From dd2972d6999aa93891d9e13cbcbe0673a0e49ab5 Mon Sep 17 00:00:00 2001 From: mrdudz Date: Sun, 28 Feb 2016 22:23:40 +0100 Subject: [PATCH 0001/2710] initial commit from old source --- libsrc/atari/cpeekchar.s | 41 ++++++++++++++++++++++ libsrc/atmos/cpeekchar.s | 36 +++++++++++++++++++ libsrc/c128/cpeekchar.s | 74 +++++++++++++++++++++++++++++++++++++++ libsrc/c128/cpeekcol.s | 67 +++++++++++++++++++++++++++++++++++ libsrc/cbm/cpeekchar.s | 39 +++++++++++++++++++++ libsrc/cbm/cpeekcol.s | 21 +++++++++++ libsrc/cbm510/cpeekchar.s | 32 +++++++++++++++++ libsrc/cbm510/cpeekcol.s | 31 ++++++++++++++++ libsrc/cbm610/cpeekchar.s | 45 ++++++++++++++++++++++++ libsrc/nes/cpeekchar.s | 40 +++++++++++++++++++++ 10 files changed, 426 insertions(+) create mode 100644 libsrc/atari/cpeekchar.s create mode 100644 libsrc/atmos/cpeekchar.s create mode 100644 libsrc/c128/cpeekchar.s create mode 100644 libsrc/c128/cpeekcol.s create mode 100644 libsrc/cbm/cpeekchar.s create mode 100644 libsrc/cbm/cpeekcol.s create mode 100644 libsrc/cbm510/cpeekchar.s create mode 100644 libsrc/cbm510/cpeekcol.s create mode 100644 libsrc/cbm610/cpeekchar.s create mode 100644 libsrc/nes/cpeekchar.s diff --git a/libsrc/atari/cpeekchar.s b/libsrc/atari/cpeekchar.s new file mode 100644 index 000000000..b551ed0df --- /dev/null +++ b/libsrc/atari/cpeekchar.s @@ -0,0 +1,41 @@ + + .export _cpeekchar + .export _cpeekcharxy + + .import _gotoxy + .import mul40 + .importzp ptr4 + + .include "atari/atari.inc" + + .segment "CODE" + +_cpeekcharxy: + + jsr _gotoxy ; Set cursor + +_cpeekchar: + + lda ROWCRS + jsr mul40 ; destroys tmp4 + clc + adc SAVMSC ; add start of screen memory + sta ptr4 + txa + adc SAVMSC+1 + sta ptr4+1 + + ldy COLCRS + lda (ptr4),y ; get char + tax + + ;; convert to asc + + ;; ugly hack here to make tetris fx work :=P + lda #' ' + cpx #0 + beq @l + lda #0 +@l: + ldx #0 + rts diff --git a/libsrc/atmos/cpeekchar.s b/libsrc/atmos/cpeekchar.s new file mode 100644 index 000000000..a1d6d4474 --- /dev/null +++ b/libsrc/atmos/cpeekchar.s @@ -0,0 +1,36 @@ + + .include "atmos.inc" + +.import _gotoxy +.export _cpeekchar,_cpeekcharxy + +_cpeekcharxy: + + jsr _gotoxy ; Will pop x parameter + +_cpeekchar: + + ldy CURS_Y + ldx ScrTabLo,y + stx @l+1 + ldx ScrTabHi,y + stx @l+2 + ldx CURS_X +@l: + lda $bb80,x +;; inc COORDX_TEXT + ldx #0 + rts + + ; FIXME: is that table available elsewhere? +.rodata +ScrTabLo: + .repeat 28, Line + .byte <(SCREEN + Line * 40) + .endrep + +ScrTabHi: + .repeat 28, Line + .byte >(SCREEN + Line * 40) + .endrep + diff --git a/libsrc/c128/cpeekchar.s b/libsrc/c128/cpeekchar.s new file mode 100644 index 000000000..e6e7e4a12 --- /dev/null +++ b/libsrc/c128/cpeekchar.s @@ -0,0 +1,74 @@ + + .export _cpeekchar + .export _cpeekcharxy + + .import _gotoxy + + .import plot,popa + + + .include "zeropage.inc" + .include "c128/c128.inc" + + .segment "CODE" + +_cpeekcharxy: + + jsr _gotoxy ; Set cursor + +_cpeekchar: + + lda MODE + bmi @c80 + + ldy CURS_X + lda (SCREEN_PTR),y ; get char + +@return: + ; convert to asc + and #$7f + + ; 0 - $1f +$40 + ; $20 - $3f + ; $40 - $7e +$80 + + cmp #$1f + bcs @sk1 +;; clc + adc #$40 + rts + +@sk1: + cmp #$40 + bcc @end + clc + adc #$80 +@end: + ldx #0 + rts + +@c80: + lda SCREEN_PTR + ldy SCREEN_PTR+1 + clc + adc CURS_X + bcc @s + iny +@s: + ; get byte from vdc mem + ldx #VDC_DATA_LO + stx VDC_ADDR_REG +@L0: bit VDC_ADDR_REG + bpl @L0 + sta VDC_DATA_REG + dex + tya + stx VDC_ADDR_REG + sta VDC_DATA_REG + + ldx #VDC_DATA_RW + stx VDC_ADDR_REG +@L1: bit VDC_ADDR_REG + bpl @L1 + lda VDC_DATA_REG + jmp @return diff --git a/libsrc/c128/cpeekcol.s b/libsrc/c128/cpeekcol.s new file mode 100644 index 000000000..95f31c7cb --- /dev/null +++ b/libsrc/c128/cpeekcol.s @@ -0,0 +1,67 @@ + + .export _cpeekcol + .export _cpeekcolxy + + .import _gotoxy + + .include "c128/c128.inc" + + .segment "CODE" + +_cpeekcolxy: + + jsr _gotoxy ; Set cursor + +_cpeekcol: + + bit MODE + bmi @c80 + + ldy CURS_X + lda (CRAM_PTR),y ; get col + and #$0f + ldx #0 + rts + +@c80: + lda CRAM_PTR + ldy CRAM_PTR+1 + clc + adc CURS_X + bcc @s + iny +@s: + ; get byte from vdc mem + ldx #VDC_DATA_LO + stx VDC_ADDR_REG +@L0: bit VDC_ADDR_REG + bpl @L0 + sta VDC_DATA_REG + dex + ;;tya + stx VDC_ADDR_REG + sty VDC_DATA_REG + + ldx #VDC_DATA_RW + stx VDC_ADDR_REG +@L1: bit VDC_ADDR_REG + bpl @L1 + lda VDC_DATA_REG + + + and #$0f + +; translate vdc->vic colour + +vdctovic: + ldy #16 +@L2: cmp $CE5C-1,y + beq @L3 + dey + bne @L2 +@L3: + dey + tya + + ldx #0 + rts diff --git a/libsrc/cbm/cpeekchar.s b/libsrc/cbm/cpeekchar.s new file mode 100644 index 000000000..e8ebcdbc3 --- /dev/null +++ b/libsrc/cbm/cpeekchar.s @@ -0,0 +1,39 @@ + + .export _cpeekchar + .export _cpeekcharxy + + .import _gotoxy + + .include "cbm/cbm.inc" + + .segment "CODE" + +_cpeekcharxy: + + jsr _gotoxy ; Set cursor + +_cpeekchar: + + ldy CURS_X + lda (SCREEN_PTR),y ; get char + ldx #0 + + and #$7f + + ; 0 - $1f +$40 + ; $20 - $3f + ; $40 - $7e +$80 + + cmp #$1f + bcs @sk1 +;; clc + adc #$40 + rts + +@sk1: + cmp #$40 + bcc @end + clc + adc #$80 +@end: + rts diff --git a/libsrc/cbm/cpeekcol.s b/libsrc/cbm/cpeekcol.s new file mode 100644 index 000000000..0e88daf04 --- /dev/null +++ b/libsrc/cbm/cpeekcol.s @@ -0,0 +1,21 @@ + + .export _cpeekcol + .export _cpeekcolxy + + .import _gotoxy + + .include "cc65/conio.inc" + + .segment "CODE" + +_cpeekcolxy: + + jsr _gotoxy ; Set cursor + +_cpeekcol: + + ldy CURS_X + lda (CRAM_PTR),y ; get color + and #$0f + ldx #0 + rts diff --git a/libsrc/cbm510/cpeekchar.s b/libsrc/cbm510/cpeekchar.s new file mode 100644 index 000000000..dc5963d2b --- /dev/null +++ b/libsrc/cbm510/cpeekchar.s @@ -0,0 +1,32 @@ + + .export _cpeekchar + .export _cpeekcharxy + + .import _gotoxy + + .include "cbm510/cbm510.inc" + + .segment "CODE" + +_cpeekcharxy: + + jsr _gotoxy ; Set cursor + +_cpeekchar: + lda #0 + ldx #0 + rts + + ;; ?!?! + + ldx IndReg + ldy #$0F + sty IndReg + + ldy CURS_X + lda (SCREEN_PTR),y ; get char + + stx IndReg + + ldx #0 + rts diff --git a/libsrc/cbm510/cpeekcol.s b/libsrc/cbm510/cpeekcol.s new file mode 100644 index 000000000..332d0aaf8 --- /dev/null +++ b/libsrc/cbm510/cpeekcol.s @@ -0,0 +1,31 @@ + + .export _cpeekcol + .export _cpeekcolxy + + .import _gotoxy + + .include "cbm510/cbm510.inc" + + .segment "CODE" + +_cpeekcolxy: + + jsr _gotoxy ; Set cursor + +_cpeekcol: + + lda #0 + ldx #0 + rts + + ;; why the HELL doesnt this work ?!? + lda #$0F + ldy CURS_X + sei + ldx IndReg + sta IndReg + lda (CRAM_PTR),y ; get color + stx IndReg + cli + ldx #0 + rts diff --git a/libsrc/cbm610/cpeekchar.s b/libsrc/cbm610/cpeekchar.s new file mode 100644 index 000000000..8cf4bd57d --- /dev/null +++ b/libsrc/cbm610/cpeekchar.s @@ -0,0 +1,45 @@ + + .export _cpeekchar + .export _cpeekcharxy + + .import _gotoxy + + .include "cbm610/cbm610.inc" + + .segment "CODE" + +_cpeekcharxy: + + jsr _gotoxy ; Set cursor + +_cpeekchar: + + ldx IndReg + ldy #$0F + sty IndReg + + ldy CURS_X + lda (CharPtr),y ; get char + ; convert to asc + and #$7f + + ; 0 - $1f +$40 + ; $20 - $3f + ; $40 - $7e +$80 + + cmp #$1f + bcs @sk1 +;; clc + adc #$40 + jmp @end + +@sk1: + cmp #$40 + bcc @end + clc + adc #$80 + +@end: + stx IndReg + ldx #0 + rts diff --git a/libsrc/nes/cpeekchar.s b/libsrc/nes/cpeekchar.s new file mode 100644 index 000000000..292a4591f --- /dev/null +++ b/libsrc/nes/cpeekchar.s @@ -0,0 +1,40 @@ + + .export _cpeekchar + .export _cpeekcharxy + + .import _gotoxy + .import ppubuf_waitempty + + .include "nes.inc" + + .segment "CODE" + +_cpeekcharxy: + + jsr _gotoxy ; Set cursor + +_cpeekchar: + + ; wait until all console data has been written + jsr ppubuf_waitempty + + ldy SCREEN_PTR+1 + ldx SCREEN_PTR + +; waiting for vblank is incredibly slow :// +vwait: +; lda $2002 ;wait +; bpl vwait + + lda #0 + sty $2006 + stx $2006 + ldy $2007 ; first read is invalid + ldy $2007 ; get data + sta $2006 + sta $2006 + + tya + and #$7f ; ?!?! + rts + From 1d877494bf8fa096057271196527ed3ddb3a6fbd Mon Sep 17 00:00:00 2001 From: mrdudz Date: Sun, 28 Feb 2016 23:37:04 +0100 Subject: [PATCH 0002/2710] initial commit from c64-rrr-1.0 --- libsrc/c64/emd/c64-rrr.s | 285 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 285 insertions(+) create mode 100644 libsrc/c64/emd/c64-rrr.s diff --git a/libsrc/c64/emd/c64-rrr.s b/libsrc/c64/emd/c64-rrr.s new file mode 100644 index 000000000..3de0ec0f4 --- /dev/null +++ b/libsrc/c64/emd/c64-rrr.s @@ -0,0 +1,285 @@ +; +;Extended Memory Driver for the Retro Replay RAM (32k) +;should work for ActionReplay as well... +; +; +;Version 1.0 +; +;Johannes Braun 2006-08-22 +;hannenz@freenet.de +; +;use the functions described in "usr/lib/cc65/include/em.h" to make use of this driver. +;------------------------------------------------------------------------------------------------------------------------- + +;NOTE: If called from ROM the Lo_Code routines must exit with LDA #$00 / STA $DE00!!! just change and recompile! + + .include "em-kernel.inc" + .importzp ptr1,ptr2,ptr3,ptr4,tmp1 + .macpack generic + +c64_ram = ptr1 ;use some more expressive identifiers... +rr_ram = ptr2 +len = ptr3 +aux = ptr4 +temp = tmp1 + +Lo_Mem = $0100 ;location of Lo_Code (must be below $1000 or above $e000) + +.segment "JUMPTABLE" + + .byte $65,$6d,$64 ;Driver signature + .byte EMD_API_VERSION + + .addr INSTALL ;Jump Table + .addr UNINSTALL + .addr PAGECOUNT + .addr MAP + .addr USE + .addr COMMIT + .addr COPYFROM + .addr COPYTO + +.bss +window: .res 256 ;the memory window (256 bytes) + +.rodata +dummy: .word window ;a "pseudo"-em_copy_struct, used by em_map/ em_commit + .byte 0 ;to pass over to COPYTO/COPYFROM +curpage: .byte $ff ;just this byte is changed according to the desired page + .byte 0 + .word 256 + +.code + +;---------------------------------------------------------------------------------------- +;unsigned char __fastcall__ em_install(void *driver); +;returns an error code +;---------------------------------------------------------------------------------------- +INSTALL: + ldx #c2-c1 +: lda c1,x + sta Lo_Mem,x + dex + bpl :- + stx curpage ;invalidate current page ($ff) + + ldx #$23 ;$de00 value for rr-ram + ldy #$02 ;$de00 value for c64-ram, CHANGE TO LDA #$00 if driver is called from ROM! + bne COMMON + +c1: stx $de00 ;try accessing rr-ram + lda $8888 + pha + lda $9999 ;remember old content of $8888 and $9999 + pha + + lda #$55 + sta $8888 ;write test values + asl + sta $9999 + + sty $de00 ;switch to c64 ram + stx $8888 + stx $9999 + + stx $de00 ;switch to rr-ram again (if present) + ldx $8888 ;read the values + ldy $9999 + pla + sta $9999 ;and write the old values back + pla + sta $8888 + + lda #2 + sta $de00 ;c64 ram again + + cli + cpx #$55 + bne no + cpy #$aa + bne no + lda #0 + rts +no: asl ;.A still has #2, so return #4: error code for "device not present" + rts +c2: +;---------------------------------------------------------------------------------------- +;void em_uninstall(void); +;---------------------------------------------------------------------------------------- +UNINSTALL: +return_null: + lda #$00 ;always return 32kb (128 pages) + .byte $2c + +;---------------------------------------------------------------------------------------- +;unsigned __fastcall__ em_pagecount(void); +;---------------------------------------------------------------------------------------- +PAGECOUNT: + lda #$80 + ldx #$00 + rts + +;---------------------------------------------------------------------------------------- +;void* __fastcall__ em_use(unsigned page); +;---------------------------------------------------------------------------------------- +USE: + cmp #$80 ;valid page? + bcs return_null ;no, return NULL pointer + sta curpage ;set to current page +return_win: lda #window +return: rts + +;---------------------------------------------------------------------------------------- +;void* __fastcall__ em_map(unsigned page); +;---------------------------------------------------------------------------------------- +MAP: + cmp #$80 + bcs return_null + sta curpage + lda #dummy ;adress in .A/.X) + jsr COPYFROM + bcs return_win ;function returns pointer to window (returns always with carry set!) + +;---------------------------------------------------------------------------------------- +;void __fastcall__ em_commit(void); +;---------------------------------------------------------------------------------------- +COMMIT: + lda curpage + cmp #$80 + bcs return + lda #dummy ;adress in .A/.X) + +;---------------------------------------------------------------------------------------- +;void __fastcall__ em_copyto (struct em_copy *copy_data); +;---------------------------------------------------------------------------------------- +COPYTO: + jsr get_struct_data ;read the parameters passed in the em_struct pointed to by .A/.X upon call + + ;copy the main copyto routine into Lo_Mem + + ldy #Lo_Code1_End - Lo_Code1 +: lda Lo_Code1-1,y + sta Lo_Mem-1,y + dey + bne :- +COMMON: + sei + jmp Lo_Mem + + ;this part will be executed in Lo_Mem (!) by COPYFROM + +Lo_Code2: + stx $de00 ;map in rr-ram + lda (rr_ram),y ;get byte from rr-ram + sty $de00 ;RR-ROM will be mapped to $8000-$a000 but write access will go to c64-ram anyway!! + sta (c64_ram),y ;and write to c64-ram + nop ;pad to same size as Lo_Code1 + nop +Lo_Code2_End: + + + ;this part will be executed in Lo_Mem (!) by COPYTO + +Lo_Code1: + lda (c64_ram),y ;read 1 byte from c64-ram + stx $de00 ;map in rr-ram + sta (rr_ram),y ;write byte to rr-ram + lda #$02 ;map in c64-ram again + sta $de00 + ;12 bytes + + ;this part is common for both COPYFROM/COPYTO and executed in Lo_Mem, too + +Lo_Code_Common: + inc c64_ram ;increase pointers + bne :+ + inc c64_ram+1 +: inc rr_ram + bne @skip + inc rr_ram+1 + lda rr_ram+1 + cmp #$a0 ;wrap around 16k boundary in rr-ram window ($8000-$a000) + bne @skip + + lda #$80 ;reset pointer to $8000 + sta rr_ram+1 + txa ;adjust value in .X to map in next 16k-bank in rr-ram + adc #7 ;carry is set because of former CMP, so it adds 8 + tax + ;27 bytes +@skip: lda c64_ram + cmp len + lda c64_ram+1 + sbc len+1 + bcc Lo_Code1 + lda #2 ;CHANGE to LDA #0 if driver is called from ROM + sta $de00 + cli + rts ;17 bytes = 56 bytes Lo_Code ($38) +Lo_Code1_End: +;---------------------------------------------------------------------------------------- +;void __fastcall__ em_copyfrom(struct em_copy *copy_data); +;copy from extended memory into linear memory +;---------------------------------------------------------------------------------------- +COPYFROM: + jsr get_struct_data + + ldy #Lo_Code2_End - Lo_Code2 ;copy routine into Lo_Mem +: lda Lo_Code2-1,y + sta Lo_Mem-1,y + dey + bne :- + ldy #Lo_Code1_End-Lo_Code_Common +: lda Lo_Code_Common-1,y + sta Lo_Mem+11,y + dey + bne :- + beq COMMON ;and execute... +;---------------------------------------------------------------------------------------- +;read the struct data located at (.A/.X) +;and setup parameters for stash/ fetch operation +;---------------------------------------------------------------------------------------- +get_struct_data: + + ;read and process the values from the em_copy struct passed to as parameters rameter to the + ;functions em_copyto and em_copyfrom + + sta aux ;store adress of struct (passed in .A/.X) into a zp pointer + stx aux+1 + ldy #0 ;index 0 + + lda (aux),y ;read c64-adress lo + sta c64_ram + iny + lda (aux),y ;read c64-adress hi + sta c64_ram+1 ;(c64_ram) --> points to c64-adress space + iny + lda (aux),y ;read rr-adress lo + sta rr_ram + iny + lda (aux),y ;rr-adress hi + pha ;remember + and #$1f + ora #$80 ;adjust into 16k-window ($8000-$a000) + sta rr_ram+1 + pla ;re-get hi byte of rr-adress + and #$60 ;isolate bits 5 and 6 + lsr + lsr ;shift into bits 3 and 4 + ora #$23 ;set bit 5 (select ram) and 1+2 (game/exrom setting for ULTIMAX-mode) + tax ;.X has now the value to write into $de00 to acess rr-ram at desired 16k-bank + iny + iny ;skip unused byte + lda (aux),y ;read length lo-byte + clc + adc c64_ram ;add to c64-addres + sta len + iny + lda (aux),y ;length hi-byte + adc c64_ram+1 + sta len+1 ;tmp2: length, tmp3 contains end adress of transfer in c64-ram. + rts ;55 bytes + From b523f070f3933e060f927d7d76026159b7355377 Mon Sep 17 00:00:00 2001 From: mrdudz Date: Sat, 17 Jun 2017 03:01:31 +0200 Subject: [PATCH 0003/2710] fixed a few things, compiles again :) --- asminc/c128.inc | 9 +++++++-- libsrc/atari/cpeekchar.s | 2 +- libsrc/c128/cpeekchar.s | 18 +++++++++--------- libsrc/c128/cpeekcol.s | 18 +++++++++--------- libsrc/cbm/cpeekchar.s | 39 --------------------------------------- libsrc/cbm/cpeekcol.s | 21 --------------------- libsrc/cbm510/cpeekchar.s | 5 +++-- libsrc/cbm510/cpeekcol.s | 3 ++- libsrc/cbm610/cpeekchar.s | 3 ++- 9 files changed, 33 insertions(+), 85 deletions(-) delete mode 100644 libsrc/cbm/cpeekchar.s delete mode 100644 libsrc/cbm/cpeekcol.s diff --git a/asminc/c128.inc b/asminc/c128.inc index e6c89b07b..e17bae4ce 100644 --- a/asminc/c128.inc +++ b/asminc/c128.inc @@ -163,8 +163,13 @@ SID_Read3 := $D41C ; --------------------------------------------------------------------------- ; I/O: VDC (128 only) -VDC_INDEX := $D600 -VDC_DATA := $D601 +VDC_INDEX := $D600 ; VDC address +VDC_DATA := $D601 ; VDC data + +VDC_DATA_HI := 18 +VDC_DATA_LO := 19 +VDC_CSET := 28 +VDC_DATA_RW := 31 ; --------------------------------------------------------------------------- ; I/O: CIAs diff --git a/libsrc/atari/cpeekchar.s b/libsrc/atari/cpeekchar.s index b551ed0df..6697ce230 100644 --- a/libsrc/atari/cpeekchar.s +++ b/libsrc/atari/cpeekchar.s @@ -6,7 +6,7 @@ .import mul40 .importzp ptr4 - .include "atari/atari.inc" + .include "atari.inc" .segment "CODE" diff --git a/libsrc/c128/cpeekchar.s b/libsrc/c128/cpeekchar.s index e6e7e4a12..cf82dd529 100644 --- a/libsrc/c128/cpeekchar.s +++ b/libsrc/c128/cpeekchar.s @@ -8,7 +8,7 @@ .include "zeropage.inc" - .include "c128/c128.inc" + .include "c128.inc" .segment "CODE" @@ -57,18 +57,18 @@ _cpeekchar: @s: ; get byte from vdc mem ldx #VDC_DATA_LO - stx VDC_ADDR_REG -@L0: bit VDC_ADDR_REG + stx VDC_INDEX +@L0: bit VDC_INDEX bpl @L0 - sta VDC_DATA_REG + sta VDC_DATA dex tya - stx VDC_ADDR_REG - sta VDC_DATA_REG + stx VDC_INDEX + sta VDC_DATA ldx #VDC_DATA_RW - stx VDC_ADDR_REG -@L1: bit VDC_ADDR_REG + stx VDC_INDEX +@L1: bit VDC_INDEX bpl @L1 - lda VDC_DATA_REG + lda VDC_DATA jmp @return diff --git a/libsrc/c128/cpeekcol.s b/libsrc/c128/cpeekcol.s index 95f31c7cb..d96563574 100644 --- a/libsrc/c128/cpeekcol.s +++ b/libsrc/c128/cpeekcol.s @@ -4,7 +4,7 @@ .import _gotoxy - .include "c128/c128.inc" + .include "c128.inc" .segment "CODE" @@ -33,20 +33,20 @@ _cpeekcol: @s: ; get byte from vdc mem ldx #VDC_DATA_LO - stx VDC_ADDR_REG -@L0: bit VDC_ADDR_REG + stx VDC_INDEX +@L0: bit VDC_INDEX bpl @L0 - sta VDC_DATA_REG + sta VDC_DATA dex ;;tya - stx VDC_ADDR_REG - sty VDC_DATA_REG + stx VDC_INDEX + sty VDC_DATA ldx #VDC_DATA_RW - stx VDC_ADDR_REG -@L1: bit VDC_ADDR_REG + stx VDC_INDEX +@L1: bit VDC_INDEX bpl @L1 - lda VDC_DATA_REG + lda VDC_DATA and #$0f diff --git a/libsrc/cbm/cpeekchar.s b/libsrc/cbm/cpeekchar.s deleted file mode 100644 index e8ebcdbc3..000000000 --- a/libsrc/cbm/cpeekchar.s +++ /dev/null @@ -1,39 +0,0 @@ - - .export _cpeekchar - .export _cpeekcharxy - - .import _gotoxy - - .include "cbm/cbm.inc" - - .segment "CODE" - -_cpeekcharxy: - - jsr _gotoxy ; Set cursor - -_cpeekchar: - - ldy CURS_X - lda (SCREEN_PTR),y ; get char - ldx #0 - - and #$7f - - ; 0 - $1f +$40 - ; $20 - $3f - ; $40 - $7e +$80 - - cmp #$1f - bcs @sk1 -;; clc - adc #$40 - rts - -@sk1: - cmp #$40 - bcc @end - clc - adc #$80 -@end: - rts diff --git a/libsrc/cbm/cpeekcol.s b/libsrc/cbm/cpeekcol.s deleted file mode 100644 index 0e88daf04..000000000 --- a/libsrc/cbm/cpeekcol.s +++ /dev/null @@ -1,21 +0,0 @@ - - .export _cpeekcol - .export _cpeekcolxy - - .import _gotoxy - - .include "cc65/conio.inc" - - .segment "CODE" - -_cpeekcolxy: - - jsr _gotoxy ; Set cursor - -_cpeekcol: - - ldy CURS_X - lda (CRAM_PTR),y ; get color - and #$0f - ldx #0 - rts diff --git a/libsrc/cbm510/cpeekchar.s b/libsrc/cbm510/cpeekchar.s index dc5963d2b..11787fe1e 100644 --- a/libsrc/cbm510/cpeekchar.s +++ b/libsrc/cbm510/cpeekchar.s @@ -3,8 +3,9 @@ .export _cpeekcharxy .import _gotoxy - - .include "cbm510/cbm510.inc" + + .include "cbm510.inc" + .include "extzp.inc" .segment "CODE" diff --git a/libsrc/cbm510/cpeekcol.s b/libsrc/cbm510/cpeekcol.s index 332d0aaf8..bbe7c5632 100644 --- a/libsrc/cbm510/cpeekcol.s +++ b/libsrc/cbm510/cpeekcol.s @@ -4,7 +4,8 @@ .import _gotoxy - .include "cbm510/cbm510.inc" + .include "cbm510.inc" + .include "extzp.inc" .segment "CODE" diff --git a/libsrc/cbm610/cpeekchar.s b/libsrc/cbm610/cpeekchar.s index 8cf4bd57d..217532ab5 100644 --- a/libsrc/cbm610/cpeekchar.s +++ b/libsrc/cbm610/cpeekchar.s @@ -4,7 +4,8 @@ .import _gotoxy - .include "cbm610/cbm610.inc" + .include "cbm610.inc" + .include "extzp.inc" .segment "CODE" From dd14f15f948b9684afe4c352a0a10d5a6777eadf Mon Sep 17 00:00:00 2001 From: mrdudz Date: Sat, 17 Jun 2017 03:46:53 +0200 Subject: [PATCH 0004/2710] added fixed files for c64/c16/plus4/vic20/pet --- libsrc/c16/cpeekchar.s | 39 ++++++++++++ libsrc/c16/cpeekcol.s | 21 +++++++ libsrc/c64/cpeekchar.s | 39 ++++++++++++ libsrc/c64/cpeekcol.s | 21 +++++++ libsrc/c64/soft80_cpeekchar.s | 113 ++++++++++++++++++++++++++++++++++ libsrc/c64/soft80_cpeekcol.s | 21 +++++++ libsrc/pet/cpeekchar.s | 39 ++++++++++++ libsrc/plus4/cpeekchar.s | 39 ++++++++++++ libsrc/plus4/cpeekcol.s | 21 +++++++ libsrc/vic20/cpeekchar.s | 39 ++++++++++++ libsrc/vic20/cpeekcol.s | 21 +++++++ 11 files changed, 413 insertions(+) create mode 100644 libsrc/c16/cpeekchar.s create mode 100644 libsrc/c16/cpeekcol.s create mode 100644 libsrc/c64/cpeekchar.s create mode 100644 libsrc/c64/cpeekcol.s create mode 100644 libsrc/c64/soft80_cpeekchar.s create mode 100644 libsrc/c64/soft80_cpeekcol.s create mode 100644 libsrc/pet/cpeekchar.s create mode 100644 libsrc/plus4/cpeekchar.s create mode 100644 libsrc/plus4/cpeekcol.s create mode 100644 libsrc/vic20/cpeekchar.s create mode 100644 libsrc/vic20/cpeekcol.s diff --git a/libsrc/c16/cpeekchar.s b/libsrc/c16/cpeekchar.s new file mode 100644 index 000000000..5d89570f1 --- /dev/null +++ b/libsrc/c16/cpeekchar.s @@ -0,0 +1,39 @@ + + .export _cpeekchar + .export _cpeekcharxy + + .import _gotoxy + + .include "c16.inc" + + .segment "CODE" + +_cpeekcharxy: + + jsr _gotoxy ; Set cursor + +_cpeekchar: + + ldy CURS_X + lda (SCREEN_PTR),y ; get char + ldx #0 + + and #$7f + + ; 0 - $1f +$40 + ; $20 - $3f + ; $40 - $7e +$80 + + cmp #$1f + bcs @sk1 +;; clc + adc #$40 + rts + +@sk1: + cmp #$40 + bcc @end + clc + adc #$80 +@end: + rts diff --git a/libsrc/c16/cpeekcol.s b/libsrc/c16/cpeekcol.s new file mode 100644 index 000000000..41fed7b9f --- /dev/null +++ b/libsrc/c16/cpeekcol.s @@ -0,0 +1,21 @@ + + .export _cpeekcol + .export _cpeekcolxy + + .import _gotoxy + + .include "c16.inc" + + .segment "CODE" + +_cpeekcolxy: + + jsr _gotoxy ; Set cursor + +_cpeekcol: + + ldy CURS_X + lda (CRAM_PTR),y ; get color + ;and #$0f is this ok? + ldx #0 + rts diff --git a/libsrc/c64/cpeekchar.s b/libsrc/c64/cpeekchar.s new file mode 100644 index 000000000..33d0284e7 --- /dev/null +++ b/libsrc/c64/cpeekchar.s @@ -0,0 +1,39 @@ + + .export _cpeekchar + .export _cpeekcharxy + + .import _gotoxy + + .include "c64.inc" + + .segment "CODE" + +_cpeekcharxy: + + jsr _gotoxy ; Set cursor + +_cpeekchar: + + ldy CURS_X + lda (SCREEN_PTR),y ; get char + ldx #0 + + and #$7f + + ; 0 - $1f +$40 + ; $20 - $3f + ; $40 - $7e +$80 + + cmp #$1f + bcs @sk1 +;; clc + adc #$40 + rts + +@sk1: + cmp #$40 + bcc @end + clc + adc #$80 +@end: + rts diff --git a/libsrc/c64/cpeekcol.s b/libsrc/c64/cpeekcol.s new file mode 100644 index 000000000..60fb45c7b --- /dev/null +++ b/libsrc/c64/cpeekcol.s @@ -0,0 +1,21 @@ + + .export _cpeekcol + .export _cpeekcolxy + + .import _gotoxy + + .include "c64.inc" + + .segment "CODE" + +_cpeekcolxy: + + jsr _gotoxy ; Set cursor + +_cpeekcol: + + ldy CURS_X + lda (CRAM_PTR),y ; get color + and #$0f + ldx #0 + rts diff --git a/libsrc/c64/soft80_cpeekchar.s b/libsrc/c64/soft80_cpeekchar.s new file mode 100644 index 000000000..21a9fc5e7 --- /dev/null +++ b/libsrc/c64/soft80_cpeekchar.s @@ -0,0 +1,113 @@ + + .export _cpeekchar + .export _cpeekcharxy + + .import _gotoxy + .import soft80_hi_charset + .import soft80_lo_charset + + .include "c64.inc" + + .macpack longbranch + + .segment "CODE" + +readdirect: +; sei +; dec $01 ;; assumed = $36 +; dec $01 ;; assumed = $36 + lda (SCREEN_PTR),y +; inc $01 +; inc $01 +; cli + rts + +_cpeekcharxy: + + jsr _gotoxy ; Set cursor + +_cpeekchar: + +;;rts + sei + ;;dec $01 ;; assumed = $36 + ;;dec $01 ;; assumed = $36 + lda #$34 + sta $01 + + lda CURS_X + and #$01 + + jne @l1a + +;; inc $d020 + +;;jmp * + + ldx #0 +@l2aa: + ldy #0 + +;; stx $d020 + + .repeat 8,line +;; jsr readdirect + lda (SCREEN_PTR),y + and #$f0 + sta $e100,y + cmp soft80_hi_charset+(line*$80),x +; cmp #0 + bne @l2b + .if (line < 7) + iny + .endif + .endrepeat + + +@backok: +;inc $d020 +; inc $01 +; inc $01 + lda #$36 + sta $01 + cli + txa + ; sec +; sbc #$20 + ldx #$00 + rts +@l2b: +;jmp * + inx + cpx #$80 + jne @l2aa +@backerr: + ;; inc $01 +;; inc $01 + lda #$36 + sta $01 + cli + ldx #0 + txa + rts + +@l1a: + ldx #0 +@l1aa: + ldy #0 + .repeat 8,line +;; jsr readdirect + lda (SCREEN_PTR),y + and #$0f + eor soft80_lo_charset+(line*$80),x + bne @l2bb + .if line < 7 + iny + .endif + .endrepeat + jmp @backok +@l2bb: + inx + cpx #$80 + bne @l1aa + jmp @backerr diff --git a/libsrc/c64/soft80_cpeekcol.s b/libsrc/c64/soft80_cpeekcol.s new file mode 100644 index 000000000..9891ab28a --- /dev/null +++ b/libsrc/c64/soft80_cpeekcol.s @@ -0,0 +1,21 @@ + + .export _cpeekcol + .export _cpeekcolxy + + .import _gotoxy + + .include "c64.inc" + + .segment "CODE" + +_cpeekcolxy: + + jsr _gotoxy ; Set cursor + +_cpeekcol: + + ldy #0 + lda (CRAM_PTR),y ; get char + and #$0f + ldx #0 + rts diff --git a/libsrc/pet/cpeekchar.s b/libsrc/pet/cpeekchar.s new file mode 100644 index 000000000..c846beb56 --- /dev/null +++ b/libsrc/pet/cpeekchar.s @@ -0,0 +1,39 @@ + + .export _cpeekchar + .export _cpeekcharxy + + .import _gotoxy + + .include "pet.inc" + + .segment "CODE" + +_cpeekcharxy: + + jsr _gotoxy ; Set cursor + +_cpeekchar: + + ldy CURS_X + lda (SCREEN_PTR),y ; get char + ldx #0 + + and #$7f + + ; 0 - $1f +$40 + ; $20 - $3f + ; $40 - $7e +$80 + + cmp #$1f + bcs @sk1 +;; clc + adc #$40 + rts + +@sk1: + cmp #$40 + bcc @end + clc + adc #$80 +@end: + rts diff --git a/libsrc/plus4/cpeekchar.s b/libsrc/plus4/cpeekchar.s new file mode 100644 index 000000000..1d47c6d64 --- /dev/null +++ b/libsrc/plus4/cpeekchar.s @@ -0,0 +1,39 @@ + + .export _cpeekchar + .export _cpeekcharxy + + .import _gotoxy + + .include "plus4.inc" + + .segment "CODE" + +_cpeekcharxy: + + jsr _gotoxy ; Set cursor + +_cpeekchar: + + ldy CURS_X + lda (SCREEN_PTR),y ; get char + ldx #0 + + and #$7f + + ; 0 - $1f +$40 + ; $20 - $3f + ; $40 - $7e +$80 + + cmp #$1f + bcs @sk1 +;; clc + adc #$40 + rts + +@sk1: + cmp #$40 + bcc @end + clc + adc #$80 +@end: + rts diff --git a/libsrc/plus4/cpeekcol.s b/libsrc/plus4/cpeekcol.s new file mode 100644 index 000000000..0f3258eb3 --- /dev/null +++ b/libsrc/plus4/cpeekcol.s @@ -0,0 +1,21 @@ + + .export _cpeekcol + .export _cpeekcolxy + + .import _gotoxy + + .include "plus4.inc" + + .segment "CODE" + +_cpeekcolxy: + + jsr _gotoxy ; Set cursor + +_cpeekcol: + + ldy CURS_X + lda (CRAM_PTR),y ; get color + ;and #$0f is this ok? + ldx #0 + rts diff --git a/libsrc/vic20/cpeekchar.s b/libsrc/vic20/cpeekchar.s new file mode 100644 index 000000000..fae7ec1b4 --- /dev/null +++ b/libsrc/vic20/cpeekchar.s @@ -0,0 +1,39 @@ + + .export _cpeekchar + .export _cpeekcharxy + + .import _gotoxy + + .include "vic20.inc" + + .segment "CODE" + +_cpeekcharxy: + + jsr _gotoxy ; Set cursor + +_cpeekchar: + + ldy CURS_X + lda (SCREEN_PTR),y ; get char + ldx #0 + + and #$7f + + ; 0 - $1f +$40 + ; $20 - $3f + ; $40 - $7e +$80 + + cmp #$1f + bcs @sk1 +;; clc + adc #$40 + rts + +@sk1: + cmp #$40 + bcc @end + clc + adc #$80 +@end: + rts diff --git a/libsrc/vic20/cpeekcol.s b/libsrc/vic20/cpeekcol.s new file mode 100644 index 000000000..59bf057ff --- /dev/null +++ b/libsrc/vic20/cpeekcol.s @@ -0,0 +1,21 @@ + + .export _cpeekcol + .export _cpeekcolxy + + .import _gotoxy + + .include "vic20.inc" + + .segment "CODE" + +_cpeekcolxy: + + jsr _gotoxy ; Set cursor + +_cpeekcol: + + ldy CURS_X + lda (CRAM_PTR),y ; get color + and #$0f + ldx #0 + rts From 609f63ac749fc4bfc75720d5b27c5f7820dc741b Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso Date: Mon, 28 Oct 2019 20:02:18 +0100 Subject: [PATCH 0005/2710] Second tentative fix --- libsrc/lynx/cgetc.s | 4 ++++ libsrc/lynx/kbhit.s | 4 +--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/libsrc/lynx/cgetc.s b/libsrc/lynx/cgetc.s index ee4893377..bb2840b1f 100644 --- a/libsrc/lynx/cgetc.s +++ b/libsrc/lynx/cgetc.s @@ -20,8 +20,10 @@ ; So the keyboard returns '1', '2', '3', 'P', 'R', 'F' or '?'. _cgetc: + bne _start jsr _kbhit ; Check for char available beq _cgetc +_start: lda KBSTL ora KBEDG ldx #0 @@ -52,6 +54,8 @@ _cgetc: rts @L5: lda KBEDG ; No Pause pressed + ldx #$00 + stx KBEDG ora KBSTL bit #$08 beq @L7 diff --git a/libsrc/lynx/kbhit.s b/libsrc/lynx/kbhit.s index b606fc49a..a5126a7dc 100644 --- a/libsrc/lynx/kbhit.s +++ b/libsrc/lynx/kbhit.s @@ -49,8 +49,6 @@ _kbhit: sta KBNPR ; inverted previous ones pressed stx KBPRV lda KBEDG - beq @L1 - jmp return1 ; Key hit - @L1: tax ; No new keys hit rts + From 43f24afe297c93256f98dfae2e71613feeedb751 Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso Date: Mon, 28 Oct 2019 21:25:41 +0100 Subject: [PATCH 0006/2710] stz --- libsrc/lynx/cgetc.s | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libsrc/lynx/cgetc.s b/libsrc/lynx/cgetc.s index bb2840b1f..17943e2dd 100644 --- a/libsrc/lynx/cgetc.s +++ b/libsrc/lynx/cgetc.s @@ -54,8 +54,7 @@ _start: rts @L5: lda KBEDG ; No Pause pressed - ldx #$00 - stx KBEDG + stz KBEDG ora KBSTL bit #$08 beq @L7 From 78d660da5571f29605dfdafe359527bf3c102823 Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso Date: Wed, 30 Oct 2019 09:14:17 +0100 Subject: [PATCH 0007/2710] kbhit checks KBEDG and getc resets KBEDG --- libsrc/lynx/cgetc.s | 16 ++++++++++------ libsrc/lynx/kbhit.s | 4 +++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/libsrc/lynx/cgetc.s b/libsrc/lynx/cgetc.s index 17943e2dd..368a0e8d3 100644 --- a/libsrc/lynx/cgetc.s +++ b/libsrc/lynx/cgetc.s @@ -20,6 +20,7 @@ ; So the keyboard returns '1', '2', '3', 'P', 'R', 'F' or '?'. _cgetc: + lda KBEDG bne _start jsr _kbhit ; Check for char available beq _cgetc @@ -39,19 +40,19 @@ _start: bit #$08 beq @L4 ; Pause + Opt 2 = Flip lda #'?' ; All buttons pressed - rts + bra reset_and_exit @L2: lda KBSTL ; Pause alone was the last placed button and #$0c bne @L1 lda #'P' ; Pause pressed - rts + bra reset_and_exit @L3: lda #'R' ; Reset pressed - rts + bra reset_and_exit @L4: lda #'F' ; Flip pressed - rts + bra reset_and_exit @L5: lda KBEDG ; No Pause pressed stz KBEDG @@ -61,10 +62,13 @@ _start: bit #$04 beq @L6 lda #'3' ; opt 1 + opt 2 pressed - rts + bra reset_and_exit @L6: lda #'1' ; opt 1 pressed - rts + bra reset_and_exit @L7: lda #'2' ; opt 2 pressed + +reset_and_exit: + stz KBEDG rts diff --git a/libsrc/lynx/kbhit.s b/libsrc/lynx/kbhit.s index a5126a7dc..a846c43e8 100644 --- a/libsrc/lynx/kbhit.s +++ b/libsrc/lynx/kbhit.s @@ -29,6 +29,8 @@ KBNPR: .byte 0 .code _kbhit: + lda KBEDG + bne L1 lda $FCB0 ; Read the Opt buttons and #$0c sta KBTMP @@ -49,6 +51,6 @@ _kbhit: sta KBNPR ; inverted previous ones pressed stx KBPRV lda KBEDG -@L1: tax ; No new keys hit +L1: ldx #$00 rts From 2bd798fa13fffa2a73df3ca46285a59fd020f6bc Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso Date: Wed, 30 Oct 2019 18:32:35 +0100 Subject: [PATCH 0008/2710] Optimizations --- libsrc/lynx/cgetc.s | 9 ++------- libsrc/lynx/kbhit.s | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/libsrc/lynx/cgetc.s b/libsrc/lynx/cgetc.s index 368a0e8d3..362371ec3 100644 --- a/libsrc/lynx/cgetc.s +++ b/libsrc/lynx/cgetc.s @@ -19,14 +19,10 @@ ; and Opt1 + Opt2 pressed '3'. ; So the keyboard returns '1', '2', '3', 'P', 'R', 'F' or '?'. -_cgetc: - lda KBEDG - bne _start +_cgetc: jsr _kbhit ; Check for char available beq _cgetc -_start: - lda KBSTL - ora KBEDG + ora KBSTL ldx #0 and #1 beq @L5 @@ -55,7 +51,6 @@ _start: bra reset_and_exit @L5: lda KBEDG ; No Pause pressed - stz KBEDG ora KBSTL bit #$08 beq @L7 diff --git a/libsrc/lynx/kbhit.s b/libsrc/lynx/kbhit.s index a846c43e8..90d9061cd 100644 --- a/libsrc/lynx/kbhit.s +++ b/libsrc/lynx/kbhit.s @@ -51,6 +51,6 @@ _kbhit: sta KBNPR ; inverted previous ones pressed stx KBPRV lda KBEDG -L1: ldx #$00 +L1: tax rts From 0d21a2b5a4a71a39b730492068ca1cf01448b4d5 Mon Sep 17 00:00:00 2001 From: Richard Halkyard Date: Thu, 31 Oct 2019 11:23:15 -0500 Subject: [PATCH 0009/2710] Reformat comments to style guide rules --- libsrc/c64/tgi/c64-hi.s | 95 ++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 48 deletions(-) diff --git a/libsrc/c64/tgi/c64-hi.s b/libsrc/c64/tgi/c64-hi.s index c9167b51d..38faf3d77 100644 --- a/libsrc/c64/tgi/c64-hi.s +++ b/libsrc/c64/tgi/c64-hi.s @@ -131,7 +131,7 @@ VBASE := $E000 ; Video memory base address ; INSTALL: -; rts ; fall through +; rts ; Fall through ; ------------------------------------------------------------------------ @@ -272,7 +272,7 @@ CLEAR: ldy #$00 sta VBASE+$1C00,y sta VBASE+$1D00,y sta VBASE+$1E00,y - sta VBASE+$1E40,y ; preserve vectors + sta VBASE+$1E40,y ; Preserve vectors iny bne @L1 rts @@ -285,7 +285,7 @@ CLEAR: ldy #$00 ; SETVIEWPAGE: -; rts ; fall through +; rts ; Fall through ; ------------------------------------------------------------------------ ; SETDRAWPAGE: Set the drawable page. Called with the new page in A (0..n). @@ -460,14 +460,14 @@ GETPIXEL: LINE: -@CHECK: lda X2 ;Make sure x1=y1? - lda Y1 ;Otherwise dy=y1-y2 + bpl @DYPOS ; Is y2>=y1? + lda Y1 ; Otherwise dy=y1-y2 sec sbc Y2 tay - ldx #$88 ;DEY + ldx #$88 ; DEY @DYPOS: sty DY ; 8-bit DY -- FIX ME? stx YINCDEC @@ -516,8 +516,8 @@ LINE: sta $01 ldx DY - cpx DX ;Who's bigger: dy or dx? - bcc STEPINX ;If dx, then... + cpx DX ; Who's bigger: dy or dx? + bcc STEPINX ; If dx, then... lda DX+1 bne STEPINX @@ -535,14 +535,14 @@ LINE: ; Y1 AND #$07 STEPINY: lda #00 - sta OLDCHUNK ;So plotting routine will work right + sta OLDCHUNK ; So plotting routine will work right lda CHUNK - lsr ;Strip the bit + lsr ; Strip the bit eor CHUNK sta CHUNK txa - beq YCONT2 ;If dy=0, it's just a point -@CONT: lsr ;Init counter to dy/2 + beq YCONT2 ; If dy=0, it's just a point +@CONT: lsr ; Init counter to dy/2 ; ; Main loop ; @@ -554,17 +554,17 @@ YLOOP: sta TEMP eor (POINT),y sta (POINT),y YINCDEC: - iny ;Advance Y coordinate + iny ; Advance Y coordinate cpy #8 - bcc @CONT ;No prob if Y=0..7 + bcc @CONT ; No prob if Y=0..7 jsr FIXY -@CONT: lda TEMP ;Restore A +@CONT: lda TEMP ; Restore A sec sbc DX bcc YFIXX -YCONT: dex ;X is counter +YCONT: dex ; X is counter bne YLOOP -YCONT2: lda (POINT),y ;Plot endpoint +YCONT2: lda (POINT),y ; Plot endpoint eor BITMASK and CHUNK eor (POINT),y @@ -574,13 +574,13 @@ YCONT2: lda (POINT),y ;Plot endpoint cli rts -YFIXX: ;x=x+1 +YFIXX: ; X = X + 1 adc DY lsr CHUNK - bne YCONT ;If we pass a column boundary... - ror CHUNK ;then reset CHUNK to $80 + bne YCONT ; If we pass a column boundary... + ror CHUNK ; Then reset CHUNK to $80 sta TEMP2 - lda POINT ;And add 8 to POINT + lda POINT ; And add 8 to POINT adc #8 sta POINT bcc @CONT @@ -598,34 +598,33 @@ YFIXX: ;x=x+1 .bss COUNTHI: - .byte $00 ;Temporary counter - ;only used once + .byte $00 ; Temporary counter, only used once .code STEPINX: ldx DX lda DX+1 sta COUNTHI cmp #$80 - ror ;Need bit for initialization - sta Y1 ;High byte of counter + ror ; Need bit for initialization + sta Y1 ; High byte of counter txa - bne @CONT ;Could be $100 + bne @CONT ; Could be $100 dec COUNTHI @CONT: ror ; ; Main loop ; XLOOP: lsr CHUNK - beq XFIXC ;If we pass a column boundary... + beq XFIXC ; If we pass a column boundary... XCONT1: sbc DY - bcc XFIXY ;Time to step in Y? + bcc XFIXY ; Time to step in Y? XCONT2: dex bne XLOOP - dec COUNTHI ;High bits set? + dec COUNTHI ; High bits set? bpl XLOOP - lsr CHUNK ;Advance to last point - jsr LINEPLOT ;Plot the last chunk + lsr CHUNK ; Advance to last point + jsr LINEPLOT ; Plot the last chunk lda #$36 sta $01 cli @@ -651,22 +650,22 @@ XFIXC: sta TEMP ; Check to make sure there isn't a high bit, plot chunk, ; and update Y-coordinate. ; -XFIXY: dec Y1 ;Maybe high bit set +XFIXY: dec Y1 ; Maybe high bit set bpl XCONT2 adc DX sta TEMP lda DX+1 - adc #$FF ;Hi byte + adc #$FF ; Hi byte sta Y1 - jsr LINEPLOT ;Plot chunk + jsr LINEPLOT ; Plot chunk lda CHUNK sta OLDCHUNK lda TEMP XINCDEC: - iny ;Y-coord - cpy #8 ;0..7 is ok + iny ; Y-coord + cpy #8 ; 0..7 is ok bcc XCONT2 sta TEMP jsr FIXY @@ -691,11 +690,11 @@ LINEPLOT: ; Plot the line chunk ; Subroutine to fix up pointer when Y decreases through ; zero or increases through 7. ; -FIXY: cpy #255 ;Y=255 or Y=8 +FIXY: cpy #255 ; Y=255 or Y=8 beq @DECPTR -@INCPTR: ;Add 320 to pointer - ldy #0 ;Y increased through 7 +@INCPTR: ; Add 320 to pointer + ldy #0 ; Y increased through 7 lda POINT adc #<320 sta POINT @@ -704,8 +703,8 @@ FIXY: cpy #255 ;Y=255 or Y=8 sta POINT+1 rts -@DECPTR: ;Okay, subtract 320 then - ldy #7 ;Y decreased through 0 +@DECPTR: ; Okay, subtract 320 then + ldy #7 ; Y decreased through 0 lda POINT sec sbc #<320 @@ -861,10 +860,10 @@ CALC: lda Y1 ror POINT cmp #$80 ror - ror POINT ; row*64 - adc TEMP2 ; +row*256 + ror POINT ; Row * 64 + adc TEMP2 ; + Row * 256 clc - adc #>VBASE ; +bitmap base + adc #>VBASE ; + Bitmap base sta POINT+1 lda X1 From 2bec637637df08ffa5a43c0e75fa04015934e0e3 Mon Sep 17 00:00:00 2001 From: Piotr Fusik Date: Tue, 5 Nov 2019 20:15:34 +0100 Subject: [PATCH 0010/2710] Optimize a negation in signed division. --- libsrc/runtime/idiv32by16r16.s | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/libsrc/runtime/idiv32by16r16.s b/libsrc/runtime/idiv32by16r16.s index 12e7feb51..098e3dbfc 100644 --- a/libsrc/runtime/idiv32by16r16.s +++ b/libsrc/runtime/idiv32by16r16.s @@ -29,19 +29,18 @@ idiv32by16r16: stx ptr3+1 lda ptr2+1 + cmp #$80 eor tmp1 sta tmp1 - bit ptr2+1 - bpl @L3 + bcc @L3 ; Negate the value in ptr1:ptr2 ldx #0 ldy #4 - sec -@L2: lda ptr1,x - eor #$FF - adc #$00 +; sec +@L2: lda #$00 + sbc ptr1,x sta ptr1,x inx dey From 421c3f2b4fef1896316b0d8b0227727c50071fdb Mon Sep 17 00:00:00 2001 From: Piotr Fusik Date: Tue, 5 Nov 2019 20:16:21 +0100 Subject: [PATCH 0011/2710] Don't set carry when already set. --- libsrc/runtime/imul8x8r16.s | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libsrc/runtime/imul8x8r16.s b/libsrc/runtime/imul8x8r16.s index e1aea30ae..72e6d03a2 100644 --- a/libsrc/runtime/imul8x8r16.s +++ b/libsrc/runtime/imul8x8r16.s @@ -1,6 +1,7 @@ ; ; 2010-11-02, Ullrich von Bassewitz ; 2014-09-10, Greg King +; 2019-11-05, Piotr Fusik ; ; CC65 runtime: 8x8 => 16 signed multiplication ; @@ -59,7 +60,8 @@ NegMult: bnz @L2 ; Branch always @L0: tya ; Subtract current multiplicand - sub ptr3 +; sec + sbc ptr3 tay txa sbc ptr3+1 From 985371433b016b4412f115c852fd44e0cf6dba69 Mon Sep 17 00:00:00 2001 From: Piotr Fusik Date: Tue, 5 Nov 2019 20:26:02 +0100 Subject: [PATCH 0012/2710] Swap the positive/negative paths to save a branch. --- libsrc/runtime/imul8x8r16.s | 55 +++++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/libsrc/runtime/imul8x8r16.s b/libsrc/runtime/imul8x8r16.s index 72e6d03a2..fe939f668 100644 --- a/libsrc/runtime/imul8x8r16.s +++ b/libsrc/runtime/imul8x8r16.s @@ -32,24 +32,7 @@ imul8x8r16m: ldy #<$0000 ; Clear .XY accumulator ldx #>$0000 lda ptr1 - bmi NegMult - bpl @L2 ; Branch always - -@L0: tya ; Add current multiplicand - add ptr3 - tay - txa - adc ptr3+1 - tax - -@L1: asl ptr3 - rol ptr3+1 -@L2: lsr ptr1 ; Get next bit of Right-Hand Side into carry - bcs @L0 - bnz @L1 ; Loop if more one-bits in multiplier - - tya ; Put result into cc65's accumulator - rts + bpl PosStart ; The multiplier is negative. ; Therefore, make it positive; and, subtract when multiplying. @@ -57,9 +40,10 @@ NegMult: eor #%11111111 sta ptr1 inc ptr1 - bnz @L2 ; Branch always + bnz NegStart ; Branch always -@L0: tya ; Subtract current multiplicand +NegAdd: + tya ; Subtract current multiplicand ; sec sbc ptr3 tay @@ -67,11 +51,34 @@ NegMult: sbc ptr3+1 tax -@L1: asl ptr3 +NegShift: + asl ptr3 rol ptr3+1 -@L2: lsr ptr1 ; Get next bit of Right-Hand Side into carry - bcs @L0 - bnz @L1 ; Loop if more one-bits in multiplier +NegStart: + lsr ptr1 ; Get next bit of Right-Hand Side into carry + bcs NegAdd + bnz NegShift ; Loop if more one-bits in multiplier + + tya ; Put result into cc65's accumulator + rts + +; The multiplier is positive. + +PosAdd: + tya ; Add current multiplicand + add ptr3 + tay + txa + adc ptr3+1 + tax + +PosShift: + asl ptr3 + rol ptr3+1 +PosStart: + lsr ptr1 ; Get next bit of Right-Hand Side into carry + bcs PosAdd + bnz PosShift ; Loop if more one-bits in multiplier tya ; Put result into cc65's accumulator rts From d38417b347323ba73d2af5106316720f038e95fa Mon Sep 17 00:00:00 2001 From: Piotr Fusik Date: Tue, 5 Nov 2019 20:44:21 +0100 Subject: [PATCH 0013/2710] Optimize sign extension. --- libsrc/runtime/imul8x8r16.s | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/libsrc/runtime/imul8x8r16.s b/libsrc/runtime/imul8x8r16.s index fe939f668..fe08c855d 100644 --- a/libsrc/runtime/imul8x8r16.s +++ b/libsrc/runtime/imul8x8r16.s @@ -24,13 +24,17 @@ imul8x8r16: sta ptr3 imul8x8r16m: +; Extend sign of Left-Hand Side + lda #$7f + cmp ptr3 + adc #$80 + sta ptr3+1 + +; Clear .XY accumulator + ldy #<$0000 ldx #>$0000 - bit ptr3 - bpl @L7 - dex -@L7: stx ptr3+1 ; Extend sign of Left-Hand Side - ldy #<$0000 ; Clear .XY accumulator - ldx #>$0000 + +; Check the multiplier sign. lda ptr1 bpl PosStart From 7f7db01e257be7215430f5eaaa95842f96e3f949 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sat, 9 Nov 2019 22:23:46 +0100 Subject: [PATCH 0014/2710] Fixed typos --- doc/funcref.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 030c726cc..6b39ad5e4 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -1360,8 +1360,8 @@ used in presence of a prototype. / The function is actually a macro. From ac4866c027b881b9cde2b4195cac0988eb3ca411 Mon Sep 17 00:00:00 2001 From: Greg King Date: Sun, 10 Nov 2019 12:46:01 -0500 Subject: [PATCH 0015/2710] Made assert() send SIGABRT when an assertion fails. A signal handler can catch it, and do anything needed to make stderr work. --- doc/funcref.sgml | 28 +++++++++++++++------------- libsrc/common/_afailed.c | 7 +++---- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 6b39ad5e4..314c57d89 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -1,4 +1,4 @@ - +
cc65 function reference @@ -1316,11 +1316,11 @@ disabled. <quote> <descrip> -<tag/Function/Terminates a program abnormally. +<tag/Function/Terminate a program abnormally. <tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/ <tag/Declaration/<tt/void abort (void);/ -<tag/Description/<tt/abort/ raises <tt/SIGABRT/, writes a termination message -on stderr, then terminates the program with an exit code of 3. +<tag/Description/<tt/abort()/ raises <tt/SIGABRT/, writes a termination message +on <tt/stderr/, then terminates the program with an exit code of 3. <tag/Availability/ISO 9899 <tag/See also/ <ref id="assert" name="assert">, @@ -1357,19 +1357,20 @@ used in presence of a prototype. <quote> <descrip> -<tag/Function/Test a condition and possibly abort. +<tag/Function/Test a condition, and possibly abort. <tag/Header/<tt/<ref id="assert.h" name="assert.h">/ <tag/Declaration/<tt/void assert (int cond);/ -<tag/Description/<tt/assert/ is a macro that expands to an <tt/id/ -statement. If the condition evaluates to zero (false), assert prints a message -on stderr and aborts the program. +<tag/Description/<tt/assert()/ is a macro that expands to an <tt/if/ statement. +If the condition evaluates to zero (false), <tt/assert()/ raises <tt/SIGABRT/, +prints a message on <tt/stderr/, then exits the program with an exit code of 2. <tag/Notes/<itemize> <item>The function is actually a macro. </itemize> <tag/Availability/ISO 9899 <tag/See also/ <ref id="abort" name="abort">, -<ref id="exit" name="exit"> +<ref id="exit" name="exit">, +<ref id="raise" name="raise"> <tag/Example/None. </descrip> </quote> @@ -5820,18 +5821,19 @@ calling convention. <tag/Function/Send a signal to the executing program. <tag/Header/<tt/<ref id="signal.h" name="signal.h">/ <tag/Declaration/<tt/int __fastcall__ raise (int sig);/ -<tag/Description/<tt/raise/ sends the given signal to the program. If the +<tag/Description/<tt/raise()/ sends the given signal to the program. If the program has installed a signal handler for the signal, this signal handler will be executed. If no handler has been installed, the default action for the raised signal will be taken. The function returns zero on success, -nonzero otherwise. +non-zero otherwise. <tag/Notes/<itemize> -<item>The function is only available as fastcall function, so it may only -be used in presence of a prototype. +<item>The function is available only as a fastcall function, +so it may be used only in the presence of a prototype. </itemize> <tag/Availability/ISO 9899 <tag/See also/ <ref id="abort" name="abort">, +<ref id="assert" name="assert">, <ref id="signal" name="signal"> <tag/Example/None. </descrip> diff --git a/libsrc/common/_afailed.c b/libsrc/common/_afailed.c index 7c6df4a2c..ed93fc12d 100644 --- a/libsrc/common/_afailed.c +++ b/libsrc/common/_afailed.c @@ -2,11 +2,12 @@ ** _afailed.c ** ** 1998-06-06, Ullrich von Bassewitz -** 2015-03-13, Greg King +** 2019-11-10, Greg King */ +#include <signal.h> #include <stdio.h> #include <stdlib.h> @@ -14,9 +15,7 @@ void __fastcall__ _afailed (char* file, unsigned line) { + raise (SIGABRT); fprintf (stderr, "ASSERTION FAILED IN %s(%u)\n", file, line); exit (2); } - - - From 659d1729eb4e8192f3ff76a8813d8944b4c3cb40 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 12 Nov 2019 11:23:23 +0100 Subject: [PATCH 0016/2710] Fixed exit code #974 --- test/ref/yacc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ref/yacc.c b/test/ref/yacc.c index f2c3e2a58..776e4f93d 100644 --- a/test/ref/yacc.c +++ b/test/ref/yacc.c @@ -409,7 +409,7 @@ yylook() if(testbreak==5) { fprintf(yyout,"yylook: error, aborted after 5 loops\n"); - exit(0); + exit(EXIT_FAILURE); } testbreak++; From 4dda5d2173928271dd3d8b506b493e55088819c0 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 12 Nov 2019 11:57:38 -0500 Subject: [PATCH 0017/2710] Changed a "See also" link in the abort() and assert() descriptions from raise() to signal(). Programmers might want to use signal() to catch the SIGABRT that's sent by abort() and assert(). --- doc/funcref.sgml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 314c57d89..72a44c7b6 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -1325,7 +1325,7 @@ on <tt/stderr/, then terminates the program with an exit code of 3. <tag/See also/ <ref id="assert" name="assert">, <ref id="exit" name="exit">, -<ref id="raise" name="raise"> +<ref id="signal" name="signal"> <tag/Example/None. </descrip> </quote> @@ -1370,7 +1370,7 @@ prints a message on <tt/stderr/, then exits the program with an exit code of 2. <tag/See also/ <ref id="abort" name="abort">, <ref id="exit" name="exit">, -<ref id="raise" name="raise"> +<ref id="signal" name="signal"> <tag/Example/None. </descrip> </quote> @@ -6656,6 +6656,7 @@ be used in presence of a prototype. <tag/Availability/ISO 9899 <tag/See also/ <ref id="abort" name="abort">, +<ref id="assert" name="assert">, <ref id="raise" name="raise"> <tag/Example/None. </descrip> From d78133e1f00be19929ca6ee920c30f782c502e8b Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 16 Nov 2019 13:11:40 -0500 Subject: [PATCH 0018/2710] Updated cx16 to match the Commander X16 ROMs and emulator, release 34. --- asminc/cbm_kernal.inc | 4 +- asminc/cx16.inc | 87 ++++++++----- cfg/cx16-asm.cfg | 3 +- cfg/cx16-bank.cfg | 2 +- cfg/cx16.cfg | 2 +- doc/cx16.sgml | 50 ++++--- include/cx16.h | 23 +++- libsrc/cx16/break.s | 21 ++- libsrc/cx16/conio.s | 9 -- libsrc/cx16/cpeekc.s | 2 +- libsrc/cx16/cpeekrevers.s | 2 +- libsrc/cx16/cputc.s | 4 +- libsrc/cx16/crt0.s | 22 ++-- libsrc/cx16/devnum.s | 8 -- libsrc/cx16/exec.c | 122 ++++++++++++++++++ libsrc/cx16/execvars.s | 16 +++ libsrc/cx16/filevars.s | 39 ++++++ libsrc/cx16/getdevice.s | 67 ++++++++++ libsrc/cx16/gotox.s | 13 ++ libsrc/cx16/gotoxy.s | 18 +++ libsrc/cx16/gotoy.s | 13 ++ libsrc/cx16/joy/{cx16-stdjoy.s => cx16-std.s} | 76 ++++++----- libsrc/cx16/joy_stat_stddrv.s | 7 +- libsrc/cx16/joy_stddrv.s | 4 +- libsrc/cx16/joyref.s | 20 +++ libsrc/cx16/kbhit.s | 6 +- libsrc/cx16/kernal.s | 5 +- libsrc/cx16/libref.s | 4 +- libsrc/cx16/mainargs.s | 8 +- libsrc/cx16/set_tv.s | 16 +-- libsrc/cx16/status.s | 16 ++- libsrc/cx16/tgi_stat_stddrv.s | 11 ++ libsrc/cx16/tgi_stddrv.s | 13 ++ libsrc/cx16/videomode.s | 44 ++++--- libsrc/cx16/waitvsync.s | 2 +- libsrc/cx16/wherex.s | 15 +++ libsrc/cx16/wherey.s | 15 +++ 37 files changed, 607 insertions(+), 182 deletions(-) delete mode 100644 libsrc/cx16/conio.s delete mode 100644 libsrc/cx16/devnum.s create mode 100644 libsrc/cx16/exec.c create mode 100644 libsrc/cx16/execvars.s create mode 100644 libsrc/cx16/filevars.s create mode 100644 libsrc/cx16/getdevice.s create mode 100644 libsrc/cx16/gotox.s create mode 100644 libsrc/cx16/gotoxy.s create mode 100644 libsrc/cx16/gotoy.s rename libsrc/cx16/joy/{cx16-stdjoy.s => cx16-std.s} (58%) create mode 100644 libsrc/cx16/joyref.s create mode 100644 libsrc/cx16/tgi_stat_stddrv.s create mode 100644 libsrc/cx16/tgi_stddrv.s create mode 100644 libsrc/cx16/wherex.s create mode 100644 libsrc/cx16/wherey.s diff --git a/asminc/cbm_kernal.inc b/asminc/cbm_kernal.inc index 6e1e1604b..a38836ceb 100644 --- a/asminc/cbm_kernal.inc +++ b/asminc/cbm_kernal.inc @@ -7,18 +7,20 @@ .if .def(__CX16__) ; CX16 extended jump table GETJOY := $FF06 + MOUSE := $FF09 + SCRMOD := $FF5F .endif .if .def(__C128__) ; C128 extended jump table C64MODE := $FF4D + SWAPPER := $FF5F SETBNK := $FF68 .endif .if .def(__C128__) || .def(__CX16__) ; Extended jump table CLSALL := $FF4A - SWAPPER := $FF5F JSRFAR := $FF6E INDFET := $FF74 INDSTA := $FF77 diff --git a/asminc/cx16.inc b/asminc/cx16.inc index 5b46908d9..1c22c99b1 100644 --- a/asminc/cx16.inc +++ b/asminc/cx16.inc @@ -44,42 +44,55 @@ ; --------------------------------------------------------------------------- ; Zero page -; BASIC -VARTAB := $2D ; Pointer to start of BASIC variables -MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1) -TXTPTR := $7A ; Pointer into BASIC source code - ; Kernal -IN_DEV := $99 ; Current input device number -OUT_DEV := $9A ; Current output device number -IMPARM := $9B ; Pointer for PRIMM function -TIME := $A0 ; 60 Hz. clock -FNAM_LEN := $B7 ; Length of filename -SECADR := $B9 ; Secondary address -DEVNUM := $BA ; Device number -FNAM := $BB ; Pointer to filename -KEY_COUNT := $C6 ; Number of keys in input buffer -RVS := $C7 ; Reverse flag -CURS_FLAG := $CC ; 1 = cursor off -CURS_BLINK := $CD ; Blink counter -CURS_CHAR := $CE ; Character under the cursor -CURS_STATE := $CF ; Cursor blink state -SCREEN_PTR := $D1 ; Pointer to current row on text screen (16 bits) -CURS_X := $D3 ; Cursor column -CURS_Y := $D6 ; Cursor row -LLEN := $D9 ; Line length -NLINES := $DA ; Number of screen lines -JOY1 := $EF ; 3 bytes of NES/SNES gamepad data -JOY2 := $F2 -FREKZP := $FB ; Five unused bytes +FNAM := $84 ; Pointer to filename +KTEMP2 := $86 ; 2 bytes for temporary storage +SCREEN_PTR := $88 ; Pointer to current row on text screen (16 bits) +IMPARM := $8A ; Pointer for PRIMM function + +; BASIC +TXTPTR := $EE ; Pointer into BASIC source code ; Page two -BASIC_BUF := $200 ; Location of command-line -BASIC_BUF_LEN = 89 ; Maximum length of command-line +BASIC_BUF := $0200 ; Location of command-line +BASIC_BUF_LEN = 81 ; Maximum length of command-line -CHARCOLOR := $286 -CURS_COLOR := $287 ; Color under the cursor +CURS_COLOR := $027E ; Color under the cursor +CHARCOLOR := $0286 ; Cursor's color nybbles (high: background, low: foreground) +STATUS := $0287 ; Status from previous I/O operation +IN_DEV := $028E ; Current input device number +OUT_DEV := $028F ; Current output device number +TIME := $0292 ; 60 Hz. clock (3 bytes, big-endian) +FNAM_LEN := $0298 ; Length of filename +SECADR := $029A ; Secondary address +DEVNUM := $029B ; Device number +KEY_COUNT := $029E ; Number of keys in input buffer +RVS := $029F ; Reverse flag +CURS_FLAG := $02A3 ; 1 = cursor off +CURS_BLINK := $02A4 ; Blink counter +CURS_CHAR := $02A5 ; Character under the cursor +CURS_STATE := $02A6 ; Cursor blink state +CURS_X := $02A8 ; Cursor column +CURS_Y := $02AB ; Cursor row +LLEN := $02AE ; Line length +NLINES := $02AF ; Number of screen lines +JOY1 := $02BC ; 3 bytes of NES/SNES gamepad data +JOY2 := $02BF + +; BASIC +VARTAB := $02DD ; Pointer to start of BASIC variables +MEMSIZE := $02E5 ; Pointer to highest BASIC RAM location (+1) + +; Kernal mouse +MSEPAR := $0371 ; mouse: $8x=sprite on, 1/2: scale +MOUSEL := $0372 ; min. x co-ordinate +MOUSER := $0374 ; max. x co-ordinate +MOUSET := $0376 ; min. y co-ordinate +MOUSEB := $0378 ; max. y co-ordinate +MOUSEX := $037A ; x co-ordinate +MOUSEY := $037C ; y co-ordinate +MOUSEBT := $037E ; buttons (bits 2: middle, 1: right, 0: left) ; --------------------------------------------------------------------------- ; Vector and other locations @@ -122,6 +135,12 @@ NMIVec := $0318 INC8192 = 14 << 4 INC16384 = 15 << 4 .endenum + .enum ; Interrupt request flags + VERT_SYNC = %00000001 + RASTER = %00000010 + SPR_COLLIDED = %00000100 + UART_IRQ = %00001000 + .endenum ; Internal RAM and registers VRAM := $000000 .scope COMPOSER ; Display composer @@ -263,7 +282,7 @@ NMIVec := $0318 .endscope .endscope -; 65c22 +; 65C22 .struct VIA1 ; Versatile Interface Adapter .org $9F60 PRB .byte ; ROM bank, IEC (Port Register B) @@ -281,10 +300,10 @@ NMIVec := $0318 PRA2 .byte ; RAM bank (Port Register A without handshaking) .endstruct -; 65c22 +; 65C22 .struct VIA2 .org $9F70 - PRB .byte + PRB .byte ; Mouse communication ? PRA .byte ; NES controller communication DDRB .byte DDRA .byte diff --git a/cfg/cx16-asm.cfg b/cfg/cx16-asm.cfg index 53f6da176..4228f6da5 100644 --- a/cfg/cx16-asm.cfg +++ b/cfg/cx16-asm.cfg @@ -6,12 +6,13 @@ SYMBOLS { __HIMEM__: type = weak, value = $9F00; } MEMORY { - ZP: file = "", start = $0004, size = $0090 - $0004, define = yes; + ZP: file = "", start = $0002, size = $0080 - $0002, define = yes; LOADADDR: file = %O, start = %S - 2, size = $0002; MAIN: file = %O, start = %S, size = __HIMEM__ - %S; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; + EXTZP: load = ZP, type = zp, optional = yes; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = MAIN, type = ro, optional = yes; LOWCODE: load = MAIN, type = ro, optional = yes; diff --git a/cfg/cx16-bank.cfg b/cfg/cx16-bank.cfg index 52438fbac..ff5dded3d 100644 --- a/cfg/cx16-bank.cfg +++ b/cfg/cx16-bank.cfg @@ -11,7 +11,7 @@ SYMBOLS { __BANKRAMSIZE__: type = weak, value = $2000; # 8K banked RAM } MEMORY { - ZP: file = "", define = yes, start = $0004, size = $0090 - $0004; + ZP: file = "", define = yes, start = $0002, size = $0080 - $0002; LOADADDR: file = %O, start = %S - 2, size = $0002; HEADER: file = %O, define = yes, start = %S, size = $000D; MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__; diff --git a/cfg/cx16.cfg b/cfg/cx16.cfg index f912e0f83..c72f6c35d 100644 --- a/cfg/cx16.cfg +++ b/cfg/cx16.cfg @@ -8,7 +8,7 @@ SYMBOLS { __HIMEM__: type = weak, value = $9F00; } MEMORY { - ZP: file = "", define = yes, start = $0004, size = $0090 - $0004; + ZP: file = "", define = yes, start = $0002, size = $0080 - $0002; LOADADDR: file = %O, start = %S - 2, size = $0002; HEADER: file = %O, define = yes, start = %S, size = $000D; MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__; diff --git a/doc/cx16.sgml b/doc/cx16.sgml index b739e6a9d..16e43db99 100644 --- a/doc/cx16.sgml +++ b/doc/cx16.sgml @@ -17,14 +17,14 @@ compiler. <sect>Overview<p> The Commander X16 is a modern small computer with firmware that is based on -the ROMs in Commodore's VIC-20 and 64C. It has a couple of the I/O chips that -are in the VIC-20. +the ROMs in Commodore's VIC-20 and 64C. It has a couple of I/O chips +(WDC65C22 VIA) that are like the ones in the VIC-20. This file contains an overview of the CX16 run-time system as it comes with the -cc65 C compiler. It describes the memory layout, CX16-specific header files, +cc65 C compiler. It describes the memory layout, CX16-specific header files, available drivers, and any pitfalls specific to that platform. -Please note that CX16-specific functions just are mentioned here; they are +Please note that CX16-specific functions just are mentioned here; they might be described in detail in the separate <url url="funcref.html" name="function reference">. Even functions marked as "platform dependent" may be available on more than one platform. Please see the function reference for more @@ -35,19 +35,20 @@ information. <sect>Binary format<p> The standard binary output format generated by the linker for the CX16 target -is a machine language program with a one-line BASIC stub which calls the -machine language part via SYS. That means that a program can be loaded as a -BASIC program, and started with RUN. It is, of course, possible to change that -behaviour by using a modified start-up file and linker config. +is a machine language program that's prepended with a 16-bit load address and a +one-line BASIC stub which calls the machine language part via SYS. That means +that a program can be loaded as a BASIC program, and started with RUN. It is, +of course, possible to change that behaviour by using a modified program-header +file and linker config. <sect>Memory layout<p> -cc65-generated programs with the default setup run with the I/O area and the -Kernal ROM visible. That means that Kernal entry points can be called directly. -The usable memory ranges are $0800 - $9EFF and $A000 - -$BFFF. +cc65-generated programs with the default setup run with the I/O area, RAM bank +zero, and the Kernal ROM visible. That means that Kernal entry points can be +called directly. The usable memory ranges are $0800 - $9EFF and +$A000 - $BFFF. Special locations: @@ -76,6 +77,9 @@ The ld65 linker comes with a default config. file for the Commander X16, which is used via <tt/-t cx16/. The cx16 package comes with additional secondary linker config. files which are used via <tt/-t cx16 -C <configfile>/. +Those files use 126 bytes in the zero page. (The rest of page zero is reserved +for Kernal and BASIC.) + <sect1>Default config. file (<tt/cx16.cfg/)<p> @@ -138,6 +142,8 @@ url="funcref.html" name="function reference"> for declarations and usage. <item>get_ostype() <item>set_tv() <item>videomode() +<item>vpeek() +<item>vpoke() <item>waitvsync() </itemize> @@ -157,6 +163,7 @@ declarations and usage. <item>cbm_k_ckout() <item>cbm_k_close() <item>cbm_k_clrch() +<item>cbm_k_getin() <item>cbm_k_load() <item>cbm_k_open() <item>cbm_k_readst() @@ -217,13 +224,13 @@ No extended memory drivers are available currently for the CX16. <sect1>Joystick drivers<p> The default drivers, <tt/joy_stddrv (joy_static_stddrv)/, -point to <tt/cX16-stdjoy.joy (cx16_stdjoy_joy)/. +point to <tt/cX16-std.joy (cx16_std_joy)/. <descrip> - <tag><tt/cX16-stdjoy.joy (cX16_stdjoy_joy)/</tag> - Supports up to two NES and SNES controllers connected to the joystick ports + <tag><tt/cX16-std.joy (cX16_std_joy)/</tag> + Supports up to two NES (and SNES) controllers connected to the joystick ports of the CX16. It reads the four directions, and the A, B, Select, and Start - buttons. Button A is the primary fire button. + buttons. Buttons A and B are the primary and secondary fire buttons. </descrip><p> @@ -248,9 +255,16 @@ any time. Some changes could make old programs fail to work. <sect>Other hints<p> +<sect1>STOP and RUN codes<p> + +The <tt/Esc/ key acts as Commodore's <tt/STOP/ key -- or, you can press the +<tt/Ctrl/ key and the <tt/C/ key together. Pressing the <tt/Shift/ and the +<tt/Esc/ keys together will type Commodore's <tt/RUN/ key. + + <sect1>Escape code<p> -For an Esc, press <tt/Ctrl/ and the <tt/[/ key. +For an <tt/Esc/, press the <tt/Ctrl/ key and the <tt/[/ key together. <sect1>Passing arguments to the program<p> @@ -274,7 +288,7 @@ supported directly by BASIC, the following syntax was chosen: <sect1>Program return code<p> -The program return code (low byte) is passed back to BASIC by use of the +The program return code (low byte) is passed back to BASIC by the use of its <tt/ST/ variable. diff --git a/include/cx16.h b/include/cx16.h index a2f52850a..a6f1b78f6 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -100,6 +100,9 @@ #define JOY_FIRE2_MASK JOY_BTN_2_MASK #define JOY_FIRE2(v) ((v) & JOY_FIRE2_MASK) +/* Additional mouse button mask */ +#define MOUSE_BTN_MIDDLE 0x02 + /* get_tv() return codes ** set_tv() argument codes */ @@ -113,10 +116,12 @@ #define TV_RGB2 7 /* Video mode defines */ -#define VIDEOMODE_40x30 40u -#define VIDEOMODE_80x60 80u +#define VIDEOMODE_40x30 0x00 +#define VIDEOMODE_80x60 0x02 #define VIDEOMODE_40COL VIDEOMODE_40x30 #define VIDEOMODE_80COL VIDEOMODE_80x60 +#define VIDEOMODE_320x240 0x80 +#define VIDEOMODE_SWAP (-1) /* Define hardware */ @@ -157,7 +162,7 @@ struct __emul { /* The addresses of the static drivers */ -extern void cx16_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */ +extern void cx16_std_joy[]; /* Referred to by joy_static_stddrv[] */ @@ -174,14 +179,20 @@ signed char get_ostype (void); ** Positive -- release build */ +unsigned char get_tv (void); +/* Return the video type that the machine is using. +** Return a TV_xx constant. +*/ + void __fastcall__ set_tv (unsigned char type); /* Set the video type that the machine will use. ** Call with a TV_xx constant. */ -unsigned char __fastcall__ videomode (unsigned char mode); -/* Set the video mode, return the old mode. Call with one of the VIDEOMODE_xx -** constants. +signed char __fastcall__ videomode (signed char mode); +/* Set the video mode, return the old mode. +** Return -1 if Mode isn't valid. +** Call with one of the VIDEOMODE_xx constants. */ unsigned char __fastcall__ vpeek (unsigned long addr); diff --git a/libsrc/cx16/break.s b/libsrc/cx16/break.s index ec569b9a7..6c79c903d 100644 --- a/libsrc/cx16/break.s +++ b/libsrc/cx16/break.s @@ -1,6 +1,6 @@ ; ; 1998-09-27, Ullrich von Bassewitz -; 2019-09-08, Greg King +; 2019-11-06, Greg King ; ; void __fastcall__ set_brk (unsigned Addr); ; void reset_brk (void); @@ -30,6 +30,7 @@ uservec: jmp $FFFF ; Patched at runtime .code ; Set the break vector + .proc _set_brk sta uservec+1 @@ -40,9 +41,9 @@ uservec: jmp $FFFF ; Patched at runtime bne L1 ; Jump if we installed the handler already lda BRKVec + ldx BRKVec+1 sta oldvec - lda BRKVec+1 - sta oldvec+1 ; Save the old vector + stx oldvec+1 ; Save the old vector L1: lda #<brk_handler ; Set the break vector to our routine ldx #>brk_handler @@ -54,6 +55,7 @@ L1: lda #<brk_handler ; Set the break vector to our routine ; Reset the break vector + .proc _reset_brk lda oldvec @@ -61,15 +63,15 @@ L1: lda #<brk_handler ; Set the break vector to our routine beq @L9 ; Jump if vector not installed sta BRKVec stx BRKVec+1 + lda #$00 sta oldvec ; Clear the old vector - stx oldvec+1 + sta oldvec+1 @L9: rts .endproc - ; Break handler, called if a break occurs .proc brk_handler @@ -81,14 +83,13 @@ L1: lda #<brk_handler ; Set the break vector to our routine pla sta _brk_a pla - and #$EF ; Clear break bit sta _brk_sr pla ; PC low sec - sbc #2 ; Point to start of brk + sbc #<$0002 ; Point to start of BRK sta _brk_pc pla ; PC high - sbc #0 + sbc #>$0002 sta _brk_pc+1 jsr uservec ; Call the user's routine @@ -99,11 +100,9 @@ L1: lda #<brk_handler ; Set the break vector to our routine pha lda _brk_sr pha - ldx _brk_x ldy _brk_y + ldx _brk_x lda _brk_a rti ; Jump back... .endproc - - diff --git a/libsrc/cx16/conio.s b/libsrc/cx16/conio.s deleted file mode 100644 index e760af21c..000000000 --- a/libsrc/cx16/conio.s +++ /dev/null @@ -1,9 +0,0 @@ -; -; 2019-09-23, Greg King -; -; Low-level stuff for screen output/console input -; - - .exportzp CURS_X, CURS_Y - - .include "cx16.inc" diff --git a/libsrc/cx16/cpeekc.s b/libsrc/cx16/cpeekc.s index 2f02623bf..f7a7d2081 100644 --- a/libsrc/cx16/cpeekc.s +++ b/libsrc/cx16/cpeekc.s @@ -19,7 +19,7 @@ _cpeekc: sta VERA::ADDR+1 ; set row number stz VERA::ADDR+2 lda CURS_X ; get character column - asl a + asl a ; each character has two bytes sta VERA::ADDR lda VERA::DATA0 ; get screen code plp diff --git a/libsrc/cx16/cpeekrevers.s b/libsrc/cx16/cpeekrevers.s index d67dd2956..15131d348 100644 --- a/libsrc/cx16/cpeekrevers.s +++ b/libsrc/cx16/cpeekrevers.s @@ -21,7 +21,7 @@ _cpeekrevers: sta VERA::ADDR+1 ; set row number stz VERA::ADDR+2 lda CURS_X ; get character column - asl a + asl a ; each character has two bytes sta VERA::ADDR lda VERA::DATA0 ; get screen code plp diff --git a/libsrc/cx16/cputc.s b/libsrc/cx16/cputc.s index cf0a5fa22..11c4f5782 100644 --- a/libsrc/cx16/cputc.s +++ b/libsrc/cx16/cputc.s @@ -78,7 +78,7 @@ plot: ldy CURS_X ; Write one screen-code and color to the video RAM without doing anything else. -; Return the x position in Y. +; Return the x position in .Y . putchar: ora RVS ; Set revers bit @@ -90,7 +90,7 @@ putchar: sta VERA::ADDR+2 ldy CURS_X ; Get character column tya - asl a + asl a ; Each character has two bytes sta VERA::ADDR stx VERA::DATA0 lda CHARCOLOR diff --git a/libsrc/cx16/crt0.s b/libsrc/cx16/crt0.s index 873fd706f..bfb4de10d 100644 --- a/libsrc/cx16/crt0.s +++ b/libsrc/cx16/crt0.s @@ -9,7 +9,6 @@ .import zerobss, callmain .import CHROUT .import __MAIN_START__, __MAIN_SIZE__ ; Linker-generated - .importzp ST .include "zeropage.inc" .include "cx16.inc" @@ -36,11 +35,18 @@ Start: tsx jsr callmain -; Back from main() [this is also the exit() entry]. Run the module destructors. +; Back from main() [this is also the exit() entry]. + +_exit: +; Put the program return code into BASIC's status variable. + + sta STATUS + +; Run the module destructors. -_exit: pha ; Save the return code on stack jsr donelib +.if 0 ; We no longer need to preserve zero-page space for cc65's variables. ; Copy back the zero-page stuff. ldx #zpspace-1 @@ -48,11 +54,7 @@ L2: lda zpsave,x sta sp,x dex bpl L2 - -; Place the program return code into BASIC's status variable. - - pla - sta ST +.endif ; Restore the system stuff. @@ -88,6 +90,7 @@ init: lda #$00 ; Choose RAM bank zero sta VIA1::PRA2 +.if 0 ; We no longer need to preserve zero-page space for cc65's variables. ; Save the zero-page locations that we need. ldx #zpspace-1 @@ -95,6 +98,7 @@ L1: lda sp,x sta zpsave,x dex bpl L1 +.endif ; Set up the stack. @@ -121,4 +125,6 @@ L1: lda sp,x ramsave: .res 1 spsave: .res 1 +.if 0 zpsave: .res zpspace +.endif diff --git a/libsrc/cx16/devnum.s b/libsrc/cx16/devnum.s deleted file mode 100644 index 6a59d6ecd..000000000 --- a/libsrc/cx16/devnum.s +++ /dev/null @@ -1,8 +0,0 @@ -; -; 2010-02-14, Oliver Schmidt -; 2019-09-08, Greg King -; - - .include "cx16.inc" - - .exportzp devnum := DEVNUM diff --git a/libsrc/cx16/exec.c b/libsrc/cx16/exec.c new file mode 100644 index 000000000..90af4e406 --- /dev/null +++ b/libsrc/cx16/exec.c @@ -0,0 +1,122 @@ +/* +** Program-chaining function for Commodore platforms. +** +** 2019-11-08, Greg King +** +** This function exploits the program-chaining feature in Commander X16 BASIC's ROM. +** +** CC65's CBM programs have a BASIC program stub. We start those programs by +** RUNning that stub; it SYSes to the Machine Language code. Normally, after +** the ML code exits, the BASIC ROM continues running the stub. But, it has +** no more statements; so, the program stops. +** +** This function puts the desired program's name and device number into a LOAD +** statement. Then, it points BASIC to that statement, so that the ROM will run +** that statement after this program quits. The ROM will load the next program, +** and will execute it (because the LOAD will be seen in a running program). +*/ + +#include <fcntl.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> +#include <device.h> + + +/* The struct below is a line of BASIC code. It sits in the LOWCODE segment +** to make sure that it won't be hidden by a ROM when BASIC is re-enabled. +** The line is: +** 0 CLR:LOAD""+"" ,01 +** After this function has written into the line, it might look like this: +** 0 CLR:LOAD""+"program name" ,08 +** +** When BASIC's LOAD command asks the Kernal to load a file, it gives the +** Kernal a pointer to a file-name string. CC65's CBM programs use that +** pointer to give a copy of the program's name to main()'s argv[0] parameter. +** But, when BASIC uses a string literal that is in a program, it points +** directly to that literal -- in the models that don't use banked RAM +** (Pet/CBM, VIC-20, and 64). The literal is overwritten by the next program +** that is loaded. So, argv[0] would point to machine code. String operations +** create a new result string -- even when that operation changes nothing. The +** result is put in the string space at the top of BASIC's memory. So, the ""+ +** in this BASIC line guarantees that argv[0] will get a name from a safe place. +*/ +#pragma data-name(push, "LOWCODE") +static struct line { + const char end_of_line; /* fake previous line */ + const struct line* const next; + const unsigned line_num; + const char CLR_token, colon, LOAD_token, quotes[2], add_token, quote; + char name[21]; + const char comma; + char unit[3]; +} basic = { + '\0', &basic + 1, /* high byte of link must be non-zero */ + 0, 0x9C, ':', 0x93, "\"\"", 0xAA, '\"', + "\" ", /* format: "123:1234567890123456\"" */ + ',', "01" +}; +#pragma data-name(pop) + +/* These values are platform-specific. */ +extern const void* vartab; /* points to BASIC program variables */ +extern const void* memsize; /* points to top of BASIC RAM */ +extern const struct line* txtptr; /* points to BASIC code */ +#pragma zpsym("txtptr") +extern char basbuf[]; /* BASIC's input buffer */ +extern void basbuf_len[]; +#pragma zpsym("basbuf_len") + + +int __fastcall__ exec (const char* progname, const char* cmdline) +{ + static int fd; + static unsigned char dv, n; + + /* Exclude devices that can't load files. */ + /* (Use hand optimization, to make smaller code.) */ + dv = getcurrentdevice (); + if (dv < 8 && __AX__ != 1 || __AX__ > 30) { + return _mappederrno (9); /* illegal device number */ + } + utoa (dv, basic.unit, 10); + + /* Don't try to run a program that doesn't exist. */ + fd = open (progname, O_RDONLY); + if (fd < 0) { + return _mappederrno (4); /* file not found */ + } + close (fd); + + n = 0; + do { + if ((basic.name[n] = progname[n]) == '\0') { + break; + } + } while (++n < 20); /* truncate long names */ + basic.name[n] = '\"'; + + /* cc65 program loads might extend beyond the end of the RAM that is allowed + ** for BASIC. Then, the LOAD statement would complain that it is "out of + ** memory". Some pointers that say where to put BASIC program variables + ** must be changed, so that we do not get that error. One pointer is + ** changed here; a BASIC CLR statement changes the others. + */ + vartab = (char*)memsize - 256; + + /* Build the next program's argument list. */ + basbuf[0] = 0x8F; /* REM token */ + basbuf[1] = '\0'; + if (cmdline != NULL) { + strncat (basbuf, cmdline, (size_t)basbuf_len - 2); + } + + /* Tell the ROM where to find that BASIC program. */ + txtptr = &basic; + + /* (The return code, in STATUS, will be destroyed by LOAD. + ** So, don't bother to set it here.) + */ + exit (__AX__); +} diff --git a/libsrc/cx16/execvars.s b/libsrc/cx16/execvars.s new file mode 100644 index 000000000..2df647a50 --- /dev/null +++ b/libsrc/cx16/execvars.s @@ -0,0 +1,16 @@ +; +; Platform-specific variables for the exec program-chaining function +; + + .include "cx16.inc" + +; exec() is written in C. +; Provide the spellings that the C compiler wants to use. + +.export _vartab := VARTAB +.export _memsize := MEMSIZE + +.exportzp _txtptr := TXTPTR + +.export _basbuf := BASIC_BUF +.exportzp _basbuf_len = BASIC_BUF_LEN diff --git a/libsrc/cx16/filevars.s b/libsrc/cx16/filevars.s new file mode 100644 index 000000000..f3fa64664 --- /dev/null +++ b/libsrc/cx16/filevars.s @@ -0,0 +1,39 @@ +; +; 2002-11-15, Ullrich von Bassewitz +; 2019-11-08, Greg King +; +; Variables used for CBM file I/O +; + + .export curunit + .constructor initcurunit, 30 + .destructor updatedevnum, 30 + + .include "cx16.inc" + + +.segment "INIT" + +curunit: + .res 1 + + +.segment "ONCE" + +.proc initcurunit + lda DEVNUM + bne L0 + lda #8 ; Default is SD card + sta DEVNUM +L0: sta curunit + rts +.endproc + + +.code + +.proc updatedevnum + lda curunit + sta DEVNUM + rts +.endproc diff --git a/libsrc/cx16/getdevice.s b/libsrc/cx16/getdevice.s new file mode 100644 index 000000000..9b554900f --- /dev/null +++ b/libsrc/cx16/getdevice.s @@ -0,0 +1,67 @@ +; +; 2012-09-04, Oliver Schmidt +; 2019-11-08, Greg King +; +; unsigned char getfirstdevice (void); +; unsigned char __fastcall__ getnextdevice (unsigned char device); +; + + .export _getfirstdevice + .export _getnextdevice + .import isdisk + .import opencmdchannel + .import closecmdchannel + .importzp tmp2 + + .include "cx16.inc" + +;------------------------------------------------------------------------------ +; getfirstdevice() + +_getfirstdevice: + lda #$FF + ; Fall through + +;------------------------------------------------------------------------------ +; getnextdevice() + +_getnextdevice: + tax +next: inx + cpx #$FF + beq done + +; [open|close]cmdchannel already call isdisk internally; but, they +; interpret a non-disk as a no-op, while we need to interpret it +; as an error here. + + jsr isdisk + bcs next + +; [open|close]cmdchannel don't call into the Kernal, at all, if they +; only [in|de]crement the reference count of the shared cmdchannel. +; Therefore, we need to initiate STATUS explicitly here. + + lda #$00 + sta STATUS + + stx tmp2 + jsr opencmdchannel + ldx tmp2 + jsr closecmdchannel + ldx tmp2 + +; As we had to reference ST above anyway, we can do so, as well, +; here too (instead of calling READST). + + lda STATUS + +; Either the Kernal calls above were successfull, or there was +; already a cmdchannel to the device open -- which is a pretty +; good indication of its existence. ;-) + + bmi next + +done: txa + ldx #$00 + rts diff --git a/libsrc/cx16/gotox.s b/libsrc/cx16/gotox.s new file mode 100644 index 000000000..1cd7c6931 --- /dev/null +++ b/libsrc/cx16/gotox.s @@ -0,0 +1,13 @@ +; +; 2019-11-06, Greg King +; +; void fastcall gotox (unsigned char x); +; + + .export _gotox + + .import plot + .include "cx16.inc" + +_gotox: sta CURS_X ; Set new position + jmp plot ; And activate it diff --git a/libsrc/cx16/gotoxy.s b/libsrc/cx16/gotoxy.s new file mode 100644 index 000000000..1c1b60e28 --- /dev/null +++ b/libsrc/cx16/gotoxy.s @@ -0,0 +1,18 @@ +; +; 2019-11-06, Greg King +; +; void fastcall gotoxy (unsigned char x, unsigned char y); +; + + .export gotoxy, _gotoxy + + .import popa, plot + .include "cx16.inc" + +gotoxy: jsr popa ; Get Y + +_gotoxy: + sta CURS_Y ; Set Y + jsr popa ; Get X + sta CURS_X ; Set X + jmp plot ; Set the cursor position diff --git a/libsrc/cx16/gotoy.s b/libsrc/cx16/gotoy.s new file mode 100644 index 000000000..487cfa793 --- /dev/null +++ b/libsrc/cx16/gotoy.s @@ -0,0 +1,13 @@ +; +; 2019-11-06, Greg King +; +; void gotoy (unsigned char y); +; + + .export _gotoy + + .import plot + .include "cx16.inc" + +_gotoy: sta CURS_Y ; Set the new position + jmp plot ; And activate it diff --git a/libsrc/cx16/joy/cx16-stdjoy.s b/libsrc/cx16/joy/cx16-std.s similarity index 58% rename from libsrc/cx16/joy/cx16-stdjoy.s rename to libsrc/cx16/joy/cx16-std.s index 8c7ddd2f2..b41c6606c 100644 --- a/libsrc/cx16/joy/cx16-stdjoy.s +++ b/libsrc/cx16/joy/cx16-std.s @@ -1,8 +1,8 @@ ; ; Standard joystick driver for the CX16. -; May be used multiple times when statically linked to the application. +; May be installed multiple times when statically linked to the application. ; -; 2019-09-23, Greg King +; 2019-11-15 Greg King ; .include "joy-kernel.inc" @@ -18,7 +18,7 @@ ; ------------------------------------------------------------------------ ; Header. Includes jump table - module_header _cx16_stdjoy_joy + module_header _cx16_std_joy ; Driver signature @@ -48,11 +48,10 @@ JOY_COUNT = 2 ; Number of joysticks we support .code ; ------------------------------------------------------------------------ -; INSTALL routine. Is called after the driver is loaded into memory. +; INSTALL routine -- is called after the driver is loaded into memory. ; If possible, check if the hardware is present, and determine the amount ; of memory available. -; Must return a JOY_ERR_xx code in a/x. -; +; Must return a JOY_ERR_xx code in .XA . INSTALL: lda #<JOY_ERR_OK @@ -60,60 +59,67 @@ INSTALL: ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ -; UNINSTALL routine. Is called before the driver is removed from memory. -; Can do clean-up or whatever. Must not return anything. -; +; UNINSTALL routine -- is called before the driver is removed from memory. +; Can do clean-up or whatever. Shouldn't return anything. UNINSTALL: rts ; ------------------------------------------------------------------------ -; COUNT: Return the total number of possible joysticks in a/x. -; +; COUNT: Return the total number of possible joysticks, in .XA . COUNT: lda #<JOY_COUNT ldx #>JOY_COUNT rts ; ------------------------------------------------------------------------ -; READ: Read a particular joystick passed in A. -; -; TODO: Find a way to report the SNES controller's extra four lines. -; +; READ: Read a particular joystick passed in .A . -READ: pha - jsr GETJOY - pla - bne pad2 +READ: php + bit #JOY_COUNT - $01 + sei + bnz pad2 ; Read game pad 1 -pad1: lda JOY1 + 1 +pad1: ldy JOY1 ; Allow JOY1 to be reread between interrupts + sty JOY1 + 2 + + lda JOY1 + 1 bit #%00001110 - beq nes1 - asl JOY1 ; Get SNES's B button + bze nes1 + + asl JOY1 + 2 ; Get SNES's B button ror a ; Put it next to the A button - asl JOY1 ; Drop SNES's Y button - asl a ; Get the B button - ror JOY1 + asl JOY1 + 2 ; Drop SNES's Y button + asl a ; Get back the B button + ror JOY1 + 2 asl a ; Get SNES's A button - ror JOY1 ; Make byte look like NES pad -nes1: lda JOY1 - eor #%11111111 ; We don't want the pad's negative logic + ror JOY1 + 2 ; Make byte look like NES pad + +nes1: lda JOY1 + 2 + plp + eor #%11111111 ; (The controllers use negative logic) rts ; Read game pad 2 -pad2: lda JOY2 + 1 +pad2: ldy JOY2 + sty JOY2 + 2 + + lda JOY2 + 1 bit #%00001110 - beq nes2 - asl JOY2 + bze nes2 + + asl JOY2 + 2 ror a - asl JOY2 + asl JOY2 + 2 asl a - ror JOY2 + ror JOY2 + 2 asl a - ror JOY2 -nes2: lda JOY2 + ror JOY2 + 2 + +nes2: lda JOY2 + 2 + plp eor #%11111111 rts diff --git a/libsrc/cx16/joy_stat_stddrv.s b/libsrc/cx16/joy_stat_stddrv.s index 0e1a3e94d..08cd2f951 100644 --- a/libsrc/cx16/joy_stat_stddrv.s +++ b/libsrc/cx16/joy_stat_stddrv.s @@ -1,10 +1,11 @@ ; ; Address of the static standard joystick driver ; -; 2019-09-19, Greg King +; 2019-11-10, Greg King ; ; const void joy_static_stddrv[]; ; - .import _cx16_stdjoy_joy - .export _joy_static_stddrv := _cx16_stdjoy_joy + .import _cx16_std_joy + + .export _joy_static_stddrv := _cx16_std_joy diff --git a/libsrc/cx16/joy_stddrv.s b/libsrc/cx16/joy_stddrv.s index 4edf9afc0..ff2f54de1 100644 --- a/libsrc/cx16/joy_stddrv.s +++ b/libsrc/cx16/joy_stddrv.s @@ -1,7 +1,7 @@ ; ; Name of the standard joystick driver ; -; 2019-09-19, Greg King +; 2019-11-10, Greg King ; ; const char joy_stddrv[]; ; @@ -10,4 +10,4 @@ .rodata -_joy_stddrv: .asciiz "cx16-stdjoy.joy" +_joy_stddrv: .asciiz "cx16-std.joy" diff --git a/libsrc/cx16/joyref.s b/libsrc/cx16/joyref.s new file mode 100644 index 000000000..fb21918c4 --- /dev/null +++ b/libsrc/cx16/joyref.s @@ -0,0 +1,20 @@ +; +; 2019-11-14, Greg King +; +; Link an interrupt handler if joysticks are used by a program. +; + + .interruptor joy_libref, 9 + + .include "cbm_kernal.inc" + .include "cx16.inc" + + +joy_libref: + lda VERA::IRQ_FLAGS + lsr a + bcc not_vsync + jsr GETJOY ; Bit-bang game controllers + clc ; Let other Jiffy handlers run +not_vsync: + rts diff --git a/libsrc/cx16/kbhit.s b/libsrc/cx16/kbhit.s index 8ceba64be..a73533e20 100644 --- a/libsrc/cx16/kbhit.s +++ b/libsrc/cx16/kbhit.s @@ -1,5 +1,5 @@ ; -; 2019-09-20, Greg King +; 2019-11-06, Greg King ; ; unsigned char kbhit (void); ; /* Returns non-zero (true) if a typed character is waiting. */ @@ -11,7 +11,7 @@ .proc _kbhit - ldx #>$0000 ; High byte of return lda KEY_COUNT ; Get number of characters - rts + tax ; High byte of return (only its zero/nonzero ... + rts ; ... state matters) .endproc diff --git a/libsrc/cx16/kernal.s b/libsrc/cx16/kernal.s index faf91385a..97443c824 100644 --- a/libsrc/cx16/kernal.s +++ b/libsrc/cx16/kernal.s @@ -1,5 +1,5 @@ ; -; 2019-09-22, Greg King +; 2019-11-05, Greg King ; ; CX16 Kernal functions ; @@ -7,9 +7,10 @@ .include "cbm_kernal.inc" .export GETJOY + .export MOUSE + .export SCRMOD .export CLSALL - .export SWAPPER .export JSRFAR .export INDFET .export INDSTA diff --git a/libsrc/cx16/libref.s b/libsrc/cx16/libref.s index 54ebb91d2..0d85c7cd8 100644 --- a/libsrc/cx16/libref.s +++ b/libsrc/cx16/libref.s @@ -1,10 +1,9 @@ ; ; 2013-05-31, Oliver Schmidt -; 2019-09-22, Greg King +; 2019-11-14, Greg King ; .export em_libref - .export joy_libref .export mouse_libref .export ser_libref .export tgi_libref @@ -12,7 +11,6 @@ .import _exit em_libref := _exit -joy_libref := _exit mouse_libref := _exit ser_libref := _exit tgi_libref := _exit diff --git a/libsrc/cx16/mainargs.s b/libsrc/cx16/mainargs.s index fe4a071c7..1764b5e20 100644 --- a/libsrc/cx16/mainargs.s +++ b/libsrc/cx16/mainargs.s @@ -33,7 +33,7 @@ REM = $8f ; BASIC token-code NAME_LEN = 16 ; Maximum length of command-name ; Get possible command-line arguments. Goes into the special ONCE segment, -; which may be reused after the startup code is run +; which may be reused after the startup code is run. .segment "ONCE" @@ -64,7 +64,7 @@ L2: lda BASIC_BUF,x bne L2 ldy #1 * 2 -; Find the next argument +; Find the next argument. next: lda BASIC_BUF,x beq done ; End of line reached @@ -74,7 +74,7 @@ next: lda BASIC_BUF,x ; Found start of next argument. We've incremented the pointer in X already, so ; it points to the second character of the argument. This is useful since we -; will check now for a quoted argument, in which case we will have to skip this +; will check now for a quoted argument, in which case, we will have to skip this ; first character. found: cmp #'"' ; Is the argument quoted? @@ -95,7 +95,7 @@ setterm:sta term ; Set end of argument marker iny inc __argc ; Found another arg -; Search for the end of the argument +; Search for the end of the argument. argloop:lda BASIC_BUF,x beq done diff --git a/libsrc/cx16/set_tv.s b/libsrc/cx16/set_tv.s index 0cf49aff7..8b802f324 100644 --- a/libsrc/cx16/set_tv.s +++ b/libsrc/cx16/set_tv.s @@ -1,5 +1,5 @@ ; -; 2019-09-20, Greg King +; 2019-11-06, Greg King ; ; void __fastcall__ set_tv (unsigned char); ; /* Set the video mode the machine will use. */ @@ -12,20 +12,18 @@ .proc _set_tv php - pha sei ; Don't let interrupts interfere ; Point to the video output register. stz VERA::CTRL ; Use port 0 - lda #<VERA::COMPOSER::VIDEO - ldx #>VERA::COMPOSER::VIDEO - ldy #^VERA::COMPOSER::VIDEO - sta VERA::ADDR - stx VERA::ADDR+1 - sty VERA::ADDR+2 + ldx #<VERA::COMPOSER::VIDEO + ldy #>VERA::COMPOSER::VIDEO + stx VERA::ADDR + sty VERA::ADDR+1 + ldx #^VERA::COMPOSER::VIDEO + stx VERA::ADDR+2 - pla sta VERA::DATA0 plp ; Re-enable interrupts rts diff --git a/libsrc/cx16/status.s b/libsrc/cx16/status.s index 6292dc274..e3446637d 100644 --- a/libsrc/cx16/status.s +++ b/libsrc/cx16/status.s @@ -1,6 +1,16 @@ ; -; 2012-09-30, Oliver Schmidt -; 2019-09-08, Greg King +; 2019-11-05, Greg King ; - .exportzp ST := $90 ; IEC status byte + .export ST: zp + +.segment "EXTZP": zp + +; This is a temporary hack. + +; A zero-page copy of the IEC status byte. +; This is needed because the Commander X16's Kernal's status +; variable was moved out of the zero page. But, the common +; CBM file function modules import this as a zero-page variable. + +ST: .res 1 diff --git a/libsrc/cx16/tgi_stat_stddrv.s b/libsrc/cx16/tgi_stat_stddrv.s new file mode 100644 index 000000000..566a36393 --- /dev/null +++ b/libsrc/cx16/tgi_stat_stddrv.s @@ -0,0 +1,11 @@ +; +; Address of the static standard TGI driver +; +; 2019-11-06, Greg King +; +; const void tgi_static_stddrv[]; +; + + .import _cx16_640x4c_tgi + + .export _tgi_static_stddrv := _cx16_640x4c_tgi diff --git a/libsrc/cx16/tgi_stddrv.s b/libsrc/cx16/tgi_stddrv.s new file mode 100644 index 000000000..0f77e7340 --- /dev/null +++ b/libsrc/cx16/tgi_stddrv.s @@ -0,0 +1,13 @@ +; +; Name of the standard TGI driver +; +; 2019-11-06, Greg King +; +; const char tgi_stddrv[]; +; + + .export _tgi_stddrv + +.rodata + +_tgi_stddrv: .asciiz "cx16-640x4c.tgi" diff --git a/libsrc/cx16/videomode.s b/libsrc/cx16/videomode.s index 4582ec1bd..e3a777b8e 100644 --- a/libsrc/cx16/videomode.s +++ b/libsrc/cx16/videomode.s @@ -1,30 +1,44 @@ ; -; 2009-09-07, Ullrich von Bassewitz -; 2019-09-23, Greg King +; 2019-11-06, Greg King ; -; unsigned __fastcall__ videomode (unsigned Mode); -; /* Set the video mode, return the old mode. */ +; /* Video mode defines */ +; #define VIDEOMODE_40x30 0x00 +; #define VIDEOMODE_80x60 0x02 +; #define VIDEOMODE_320x240 0x80 +; #define VIDEOMODE_SWAP (-1) +; +; signed char __fastcall__ videomode (signed char Mode); +; /* Set the video mode, return the old mode. +; ** Return -1 if Mode isn't valid. +; ** Call with one of the VIDEOMODE_xx constants. +; */ ; .export _videomode - .import SWAPPER - .include "cx16.inc" + .import SCRMOD .proc _videomode - cmp LLEN ; Do we have this mode already? - beq @L9 + tax + clc ; (Get old mode) + jsr SCRMOD + pha + txa - lda LLEN ; Get current mode ... - pha ; ... and save it + sec ; (Set new mode) + jsr SCRMOD - jsr SWAPPER ; Toggle the mode + pla ; Get back old mode + bcs @L1 + ldx #>$0000 ; Clear high byte + rts - pla ; Get old mode into A +; The new mode is invalid. Go back to the old mode. Return -1. -; Done, old mode is in .A - -@L9: ldx #>$0000 ; Clear high byte +@L1: sec + jsr SCRMOD + lda #<-1 + tax rts .endproc diff --git a/libsrc/cx16/waitvsync.s b/libsrc/cx16/waitvsync.s index 3fb6354f0..09d01c6a1 100644 --- a/libsrc/cx16/waitvsync.s +++ b/libsrc/cx16/waitvsync.s @@ -3,7 +3,7 @@ ; ; void waitvsync (void); ; -; VERA's vertical sync. causes IRQs which increment the jiffy clock. +; VERA's vertical sync causes IRQs which increment the jiffy clock. ; .export _waitvsync diff --git a/libsrc/cx16/wherex.s b/libsrc/cx16/wherex.s new file mode 100644 index 000000000..56f423592 --- /dev/null +++ b/libsrc/cx16/wherex.s @@ -0,0 +1,15 @@ +; +; 2019-11-06, Greg King +; +; unsigned char wherex (void); +; + + .export _wherex + + .include "cx16.inc" + +.proc _wherex + lda CURS_X + ldx #>$0000 + rts +.endproc diff --git a/libsrc/cx16/wherey.s b/libsrc/cx16/wherey.s new file mode 100644 index 000000000..396a2d14e --- /dev/null +++ b/libsrc/cx16/wherey.s @@ -0,0 +1,15 @@ +; +; 2019-11-06, Greg King +; +; unsigned char wherey (void); +; + + .export _wherey + + .include "cx16.inc" + +.proc _wherey + lda CURS_Y + ldx #>$0000 + rts +.endproc From 5da525e0ea10987d9dbf1ad2ba5bad9548d23f59 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 16 Nov 2019 14:51:24 -0500 Subject: [PATCH 0019/2710] Added a standard mouse driver to the cx16 library. --- doc/cx16.sgml | 9 +- include/cx16.h | 9 +- libsrc/cx16/mcbdefault.s | 65 +++++++ libsrc/cx16/mou/cx16-std.s | 310 ++++++++++++++++++++++++++++++++ libsrc/cx16/mouse_stat_stddrv.s | 11 ++ libsrc/cx16/mouse_stddrv.s | 13 ++ 6 files changed, 415 insertions(+), 2 deletions(-) create mode 100644 libsrc/cx16/mcbdefault.s create mode 100644 libsrc/cx16/mou/cx16-std.s create mode 100644 libsrc/cx16/mouse_stat_stddrv.s create mode 100644 libsrc/cx16/mouse_stddrv.s diff --git a/doc/cx16.sgml b/doc/cx16.sgml index 16e43db99..7189e7157 100644 --- a/doc/cx16.sgml +++ b/doc/cx16.sgml @@ -236,7 +236,14 @@ point to <tt/cX16-std.joy (cx16_std_joy)/. <sect1>Mouse drivers<p> -No mouse drivers are available currently for the CX16. +The default drivers, <tt/mouse_stddrv (mouse_static_stddrv)/, +point to <tt/cX16-std.mou (cx16_std_mou)/. + +<descrip> + <tag><tt/cX16-std.mou (cX16_std_mou)/</tag> + Supports a standard 3-button mouse connected to the PS/2 mouse port of the + Commander X16. +</descrip><p> <sect1>RS232 device drivers<p> diff --git a/include/cx16.h b/include/cx16.h index a6f1b78f6..b465378a5 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -115,7 +115,7 @@ #define TV_NTSC_MONO 6 #define TV_RGB2 7 -/* Video mode defines */ +/* Video modes */ #define VIDEOMODE_40x30 0x00 #define VIDEOMODE_80x60 0x02 #define VIDEOMODE_40COL VIDEOMODE_40x30 @@ -123,6 +123,12 @@ #define VIDEOMODE_320x240 0x80 #define VIDEOMODE_SWAP (-1) +/* VERA's interrupt flags */ +#define VERA_IRQ_VSYNC 0b00000001 +#define VERA_IRQ_RASTER 0b00000010 +#define VERA_IRQ_SPR_COLL 0b00000100 +#define VERA_IRQ_UART 0b00001000 + /* Define hardware */ @@ -163,6 +169,7 @@ struct __emul { /* The addresses of the static drivers */ extern void cx16_std_joy[]; /* Referred to by joy_static_stddrv[] */ +extern void cx16_std_mou[]; /* Referred to by mouse_static_stddrv[] */ diff --git a/libsrc/cx16/mcbdefault.s b/libsrc/cx16/mcbdefault.s new file mode 100644 index 000000000..d817b9ae6 --- /dev/null +++ b/libsrc/cx16/mcbdefault.s @@ -0,0 +1,65 @@ +; +; Default mouse callbacks for the CX16 +; +; 2019-11-09, Greg King +; +; All functions in this module should be interrupt safe +; because they might be called from an interrupt handler. +; + + .export _mouse_def_callbacks + + .include "cbm_kernal.inc" + .include "cx16.inc" + +; -------------------------------------------------------------------------- +; Hide the mouse pointer. Always called with interrupts disabled. + +.code + +hide: ldx #$00 ; Don't change sprite's scale + lda #$00 ; Disable sprite + jmp MOUSE + +; -------------------------------------------------------------------------- +; Show the mouse pointer. Always called with interrupts disabled. + +show: ldx #$00 + lda #<-$01 ; Enable sprite + jmp MOUSE + +; -------------------------------------------------------------------------- +; Prepare to move the mouse pointer. Always called with interrupts disabled. + +prep: ; Fall through + +; -------------------------------------------------------------------------- +; Draw the mouse pointer. Always called with interrupts disabled. + +draw: ; Fall through + +; -------------------------------------------------------------------------- +; Move the mouse pointer X position to the value in .XA . Always called with +; interrupts disabled. + +movex: ; Already set by drivers + ; Fall through + +; -------------------------------------------------------------------------- +; Move the mouse pointer Y position to the value in .XA . Always called with +; interrupts disabled. + +movey: rts ; Already set by drivers + +; -------------------------------------------------------------------------- +; Callback structure + +.rodata + +_mouse_def_callbacks: + .addr hide + .addr show + .addr prep + .addr draw + .addr movex + .addr movey diff --git a/libsrc/cx16/mou/cx16-std.s b/libsrc/cx16/mou/cx16-std.s new file mode 100644 index 000000000..eb3f83167 --- /dev/null +++ b/libsrc/cx16/mou/cx16-std.s @@ -0,0 +1,310 @@ +; +; Driver for the Commander X16 Kernal's mouse driver. +; +; 2019-11-16, Greg King +; + + .include "zeropage.inc" + .include "mouse-kernel.inc" + .include "cx16.inc" + .include "cbm_kernal.inc" + + .macpack module + + +; ------------------------------------------------------------------------ +; Header. Includes jump table + + module_header _cx16_std_mou + +HEADER: + +; Driver signature + + .byte $6d, $6f, $75 ; ASCII "mou" + .byte MOUSE_API_VERSION ; Mouse driver API version number + +; Library reference + + .addr $0000 + +; Jump table + + .addr INSTALL + .addr UNINSTALL + .addr HIDE + .addr SHOW + .addr SETBOX + .addr GETBOX + .addr MOVE + .addr BUTTONS + .addr POS + .addr INFO + .addr IOCTL + .addr IRQ + +; Mouse driver flags + + .byte $00 ; Don't need interrupts + +; Callback table, set by the mouse kernel before INSTALL is called + +CHIDE: jmp $0000 ; Hide the cursor +CSHOW: jmp $0000 ; Show the cursor +CPREP: jmp $0000 ; Prepare to move the cursor +CDRAW: jmp $0000 ; Draw the cursor +CMOVEX: jmp $0000 ; Move the cursor to X coord +CMOVEY: jmp $0000 ; Move the cursor to Y coord + + +;---------------------------------------------------------------------------- +; Constants + +SCREEN_WIDTH = 640 - 1 ; (origin is zero) +SCREEN_HEIGHT = 480 - 1 + +;---------------------------------------------------------------------------- +; Global variables. + +.bss + +XPos := MOUSEX ; Current mouse position, X +YPos := MOUSEY ; Current mouse position, Y + +XMin := MOUSEL ; X1 value of bounding box +XMax := MOUSER ; X2 value of bounding box +YMin := MOUSET ; Y1 value of bounding box +YMax := MOUSEB ; Y2 value of bounding box +Box := XMin + +Buttons := MOUSEBT ; button status bits + +.rodata + +; Default values for above variables +; (We use ".proc" because we want to define both a label and a scope.) + +.proc DefBox + .word 0 ; XMin + .word SCREEN_WIDTH ; XMax + .word 0 ; YMin + .word SCREEN_HEIGHT ; YMax +.endproc + +; These button masks are compatible with the CBM 1351 and the CMD SmartMouse. + +ButtMask: + .byte %00000000 ; No buttons + .byte %00010000 ; Left + .byte %00000001 ; Right + .byte %00010001 ; Left, right + .byte %00000010 ; Middle + .byte %00010010 ; Left, middle + .byte %00000011 ; Middle, right + .byte %00010011 ; Left, middle, right + +.code + +;---------------------------------------------------------------------------- +; INSTALL routine. Is called after the driver is loaded into memory. +; If possible, check if the hardware is present. +; Must return a MOUSE_ERR_xx code in .XA . + +INSTALL: + +; Initialize variables. Just copy the default stuff over. + + ldx #.sizeof(DefBox) - 1 +@L1: lda DefBox,x + sta Box,x + dex + bpl @L1 + + ldx #$00 ; Don't change sprite's scale + lda #$01 ; Initiate and show sprite + jsr MOUSE + +; Be sure the mouse cursor is invisible, and at the default location. We +; need to do that here, because the mouse interrupt handler might not set +; the mouse position if it hasn't changed. + + sei + jsr CHIDE + lda XPos + ldx XPos+1 + jsr CMOVEX + lda YPos + ldx YPos+1 + jsr CMOVEY + cli + +; Done, return zero + + ldx #>MOUSE_ERR_OK + txa + rts + +;---------------------------------------------------------------------------- +; UNINSTALL routine -- is called before the driver is removed from memory. +; No return code required (the driver is removed from memory on return). + +UNINSTALL := HIDE ; Hide cursor on exit + +;---------------------------------------------------------------------------- +; HIDE routine -- is called to hide the mouse pointer. The mouse kernel manages +; a counter for calls to show/hide, and the driver entry point is called only +; if the mouse currently is visible, and should get hidden. For most drivers, +; no special action is required besides disabling the mouse cursor. +; No return code required. + +HIDE: jmp CHIDE + +;---------------------------------------------------------------------------- +; SHOW routine -- is called to show the mouse pointer. The mouse kernel manages +; a counter for calls to show/hide, and the driver entry point is called only +; if the mouse currently is hidden, and should become visible. For most drivers, +; no special action is required besides enabling the mouse cursor. +; No return code required. + +SHOW: jmp CSHOW + +;---------------------------------------------------------------------------- +; SETBOX: Set the mouse bounding box. The parameters are passed as they come +; from the C program, that is, a pointer to a mouse_box struct in .XA . +; No checks are done if the mouse is currently inside the box, that is the job +; of the caller. It is not necessary to validate the parameters, trust the +; caller, and save some code here. No return code required. + +SETBOX: sta ptr1 + stx ptr1+1 ; Save data pointer + + lda (ptr1) + ldy #$01 + + sei + sta XMin + lda (ptr1),y + sta YMin + iny + lda (ptr1),y + sta XMax + iny + lda (ptr1),y + sta YMax + cli + + rts + +;---------------------------------------------------------------------------- +; GETBOX: Return the mouse bounding box. The parameters are passed as they +; come from the C program, that is, a pointer to a mouse_box struct in .XA . + +GETBOX: sta ptr1 + stx ptr1+1 ; Save data pointer + + lda XMin + sta (ptr1) + ldy #$01 + lda YMin + sta (ptr1),y + iny + lda XMax + sta (ptr1),y + iny + lda YMax + sta (ptr1),y + rts + +;---------------------------------------------------------------------------- +; MOVE: Put the mouse at a new position. That position is passed as it comes +; from the C program, that is: X on the stack and Y in .XA . The C wrapper +; will remove the parameter from the stack, on return. +; No checks are done to see if the new position is valid (within +; the bounding box or the screen). No return code required. + +MOVE: sei ; No interrupts + + sta YPos + stx YPos+1 ; New Y position + jsr CMOVEY ; Set it + + ldy #$01 + lda (sp),y + sta XPos+1 + tax + dey + lda (sp),y + sta XPos ; New X position + jsr CMOVEX ; Move the cursor + + cli ; Allow interrupts + rts + +;---------------------------------------------------------------------------- +; BUTTONS: Return the CBM 1351 button mask in .XA . + +BUTTONS: + lda Buttons + and #%00000111 + tax + lda ButtMask,x + ldx #>$0000 + rts + +;---------------------------------------------------------------------------- +; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1. +; No return code required. + +POS: ldy #MOUSE_POS::XCOORD ; Structure offset + + sei ; Disable interrupts + lda XPos ; Transfer the position + sta (ptr1),y + lda XPos+1 + iny + sta (ptr1),y + lda YPos + iny + sta (ptr1),y + lda YPos+1 + cli ; Enable interrupts + + iny + sta (ptr1),y ; Store last byte + rts ; Done + +;---------------------------------------------------------------------------- +; INFO: Returns mouse position and current button mask in the MOUSE_INFO +; struct pointed to by ptr1. No return code required. +; +; We're cheating here to keep the code smaller: The first fields of the +; mouse_info struct are identical to the mouse_pos struct; so, we just will +; call mouse_pos to initialize the struct pointer, and fill the position +; fields. + +INFO: jsr POS + +; Fill in the button state + + jsr BUTTONS ; Will not touch ptr1 + ldy #MOUSE_INFO::BUTTONS + sta (ptr1),y + rts + +;---------------------------------------------------------------------------- +; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl +; specific data in ptr1, and the ioctl code in A. +; Must return an error code in .XA . +; + +IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioctls, for now + ldx #>MOUSE_ERR_INV_IOCTL +; rts ; Fall through + +;---------------------------------------------------------------------------- +; IRQ: Irq handler entry point. Called as a subroutine but in IRQ context +; (so be careful). The routine MUST return carry set if the interrupt has been +; 'handled' -- which means that the interrupt source is gone. Otherwise, it +; MUST return carry clear. + +IRQ: rts ; Kernal ROM does this routine's job diff --git a/libsrc/cx16/mouse_stat_stddrv.s b/libsrc/cx16/mouse_stat_stddrv.s new file mode 100644 index 000000000..1ff8ad43b --- /dev/null +++ b/libsrc/cx16/mouse_stat_stddrv.s @@ -0,0 +1,11 @@ +; +; Address of the static standard mouse driver +; +; 2019-11-08,Greg King +; +; const void mouse_static_stddrv[]; +; + + .import _cx16_std_mou + + .export _mouse_static_stddrv := _cx16_std_mou diff --git a/libsrc/cx16/mouse_stddrv.s b/libsrc/cx16/mouse_stddrv.s new file mode 100644 index 000000000..d708bb668 --- /dev/null +++ b/libsrc/cx16/mouse_stddrv.s @@ -0,0 +1,13 @@ +; +; Name of the standard mouse driver +; +; 2019-11-08, Greg King +; +; const char mouse_stddrv[]; +; + + .export _mouse_stddrv + +.rodata + +_mouse_stddrv: .asciiz "cx16-std.mou" From 788fbcc9c8cdd88ecaf6baacef9cd347e406b0fd Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sun, 17 Nov 2019 03:45:32 -0500 Subject: [PATCH 0020/2710] Fix silent crash failure on warning from linker command line define import size mismatch --- src/ld65/exports.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ld65/exports.c b/src/ld65/exports.c index b83d8b496..be14f7484 100644 --- a/src/ld65/exports.c +++ b/src/ld65/exports.c @@ -694,10 +694,15 @@ static void CheckSymType (const Export* E) GetString (E->Obj->Name), GetSourceName (ExportLI), GetSourceLine (ExportLI)); - } else { + } else if (ExportLI) { SB_Printf (&ExportLoc, "%s(%u)", GetSourceName (ExportLI), GetSourceLine (ExportLI)); + } else { + /* The export is linker generated and we don't have line + ** information (likely from command line define) + */ + SB_Printf (&ExportLoc, "linker"); } if (I->Obj) { /* The import comes from an object file */ From c9355734f5acce3c06553d7b7b7ddbda50a7b495 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Mon, 18 Nov 2019 01:37:26 -0500 Subject: [PATCH 0021/2710] make linker generated export warning conistent with the import warning --- src/ld65/exports.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ld65/exports.c b/src/ld65/exports.c index be14f7484..5df7a37c9 100644 --- a/src/ld65/exports.c +++ b/src/ld65/exports.c @@ -702,7 +702,7 @@ static void CheckSymType (const Export* E) /* The export is linker generated and we don't have line ** information (likely from command line define) */ - SB_Printf (&ExportLoc, "linker"); + SB_Printf (&ExportLoc, "%s", GetObjFileName (E->Obj)); } if (I->Obj) { /* The import comes from an object file */ From 7bae9038cfc1ff25a6845c050a4a0d6a98fd47a9 Mon Sep 17 00:00:00 2001 From: mc78 <mc78@outlook.de> Date: Mon, 11 Nov 2019 16:30:09 +0100 Subject: [PATCH 0022/2710] Replaced plain 0's and 1's in exit statements with EXIT_SUCCESS or EXIT_FAILURE --- samples/geos/getid.c | 2 +- samples/geos/hello1.c | 2 +- samples/geos/hello2.c | 2 +- test/ref/hanoi.c | 2 +- test/ref/wf1.c | 2 +- testcode/lib/getopt-test.c | 6 ++++-- testcode/lib/shift-test.c | 6 +++--- 7 files changed, 12 insertions(+), 10 deletions(-) diff --git a/samples/geos/getid.c b/samples/geos/getid.c index 4331e27e8..200a1478e 100644 --- a/samples/geos/getid.c +++ b/samples/geos/getid.c @@ -16,7 +16,7 @@ const graphicStr Table = { void Exit(void) { - exit(0); + exit(EXIT_SUCCESS); } void Menu = { diff --git a/samples/geos/hello1.c b/samples/geos/hello1.c index fd46d157d..8dc13d5b4 100644 --- a/samples/geos/hello1.c +++ b/samples/geos/hello1.c @@ -26,7 +26,7 @@ void main (void) // MainLoop(); // we can do: // (nothing as this is the end of main function) - // exit(0); + // exit(EXIT_SUCCESS); // return; return; diff --git a/samples/geos/hello2.c b/samples/geos/hello2.c index d41bdb3c9..3f148b0b8 100644 --- a/samples/geos/hello2.c +++ b/samples/geos/hello2.c @@ -44,7 +44,7 @@ void main (void) // MainLoop(); // we can do: // (nothing as this is the end of main function) - // exit(0); + // exit(EXIT_SUCCESS); // return; return; diff --git a/test/ref/hanoi.c b/test/ref/hanoi.c index 5198c5c61..14bc60fa6 100644 --- a/test/ref/hanoi.c +++ b/test/ref/hanoi.c @@ -62,7 +62,7 @@ int main(int argc,char **argv) #ifdef USECMDLINE if (argc < 2) { printf("Usage: %s [duration] [disks]\n", argv[0]); - exit(1); + exit(EXIT_FAILURE); } else { diff --git a/test/ref/wf1.c b/test/ref/wf1.c index 1c3bfbd37..e1ed7a417 100644 --- a/test/ref/wf1.c +++ b/test/ref/wf1.c @@ -45,7 +45,7 @@ err(s) char *s; { int err(char *s) { #endif printf("? %s\n", s); - exit(1); + exit(EXIT_FAILURE); } /* getword - get next input word into buf, return 0 on EOF */ diff --git a/testcode/lib/getopt-test.c b/testcode/lib/getopt-test.c index 2f1155419..b5639b7c9 100644 --- a/testcode/lib/getopt-test.c +++ b/testcode/lib/getopt-test.c @@ -22,6 +22,8 @@ #define BADCH '?' #define ENDARGS "--" +#define NUMARGS 2 + int main (int argc, char **argv) { char *optstring = argv[1]; @@ -34,9 +36,9 @@ int main (int argc, char **argv) char *opi; - if (argc == 1) { + if (argc != NUMARGS) { fprintf (stderr, "Usage: %s optstring args\n", argv0); - exit (1); + exit (EXIT_FAILURE); } argv++; argc--; diff --git a/testcode/lib/shift-test.c b/testcode/lib/shift-test.c index 5712f4534..27c7d88a7 100644 --- a/testcode/lib/shift-test.c +++ b/testcode/lib/shift-test.c @@ -58,7 +58,7 @@ static void TestUnsignedLeftShift (void) fprintf (stderr, "Failed: %u << %u != %u (%u)\n", L, R, V, L << R); - exit (1); + exit (EXIT_FAILURE); } V = UnsignedShiftLeft1 (V); } @@ -85,7 +85,7 @@ static void TestUnsignedRightShift (void) fprintf (stderr, "Failed: %u >> %u != %u (%u)\n", L, R, V, L >> R); - exit (1); + exit (EXIT_FAILURE); } V = UnsignedShiftRight1 (V); } @@ -112,7 +112,7 @@ static void TestSignedRightShift (void) fprintf (stderr, "Failed: %d >> %d != %d (%d)\n", L, R, V, L >> R); - exit (1); + exit (EXIT_FAILURE); } V = SignedShiftRight1 (V); } From 3daecfb3dd357047e12bdd002ab114bbeb29c85d Mon Sep 17 00:00:00 2001 From: mc78 <mc78@outlook.de> Date: Tue, 12 Nov 2019 13:08:33 +0100 Subject: [PATCH 0023/2710] Added enum for cc65 exit codes. replaced stdlib exit code names constants in libsrc with cc65 exit code named constants --- include/cc65.h | 6 ++++++ libsrc/common/_afailed.c | 2 +- libsrc/common/abort.c | 2 +- libsrc/dbg/dbg.c | 2 +- libsrc/geos-apple/targetutil/convert.c | 5 +++-- libsrc/geos-common/common/_afailed.c | 2 +- libsrc/geos-common/common/abort.c | 3 ++- 7 files changed, 15 insertions(+), 7 deletions(-) diff --git a/include/cc65.h b/include/cc65.h index 7e9c2cae2..99a8665c8 100644 --- a/include/cc65.h +++ b/include/cc65.h @@ -36,6 +36,12 @@ #ifndef _CC65_H #define _CC65_H +typedef enum { + CC65_EXIT_SUCCESS, + CC65_EXIT_FAILURE, + CC65_EXIT_AFAILED, + CC65_EXIT_ABORT +} cc65_exit_codes_t; /*****************************************************************************/ diff --git a/libsrc/common/_afailed.c b/libsrc/common/_afailed.c index ed93fc12d..654025e1a 100644 --- a/libsrc/common/_afailed.c +++ b/libsrc/common/_afailed.c @@ -17,5 +17,5 @@ void __fastcall__ _afailed (char* file, unsigned line) { raise (SIGABRT); fprintf (stderr, "ASSERTION FAILED IN %s(%u)\n", file, line); - exit (2); + exit (CC65_EXIT_AFAILED); } diff --git a/libsrc/common/abort.c b/libsrc/common/abort.c index 43ad676a7..e59adb7d3 100644 --- a/libsrc/common/abort.c +++ b/libsrc/common/abort.c @@ -16,7 +16,7 @@ void abort (void) { raise (SIGABRT); fputs ("ABNORMAL PROGRAM TERMINATION\n", stderr); - exit (3); + exit (CC65_EXIT_ABORT); } diff --git a/libsrc/dbg/dbg.c b/libsrc/dbg/dbg.c index 60b452799..1b08d7750 100644 --- a/libsrc/dbg/dbg.c +++ b/libsrc/dbg/dbg.c @@ -1580,7 +1580,7 @@ void DbgEntry (void) case 'q': /* Quit program */ clrscr (); - exit (1); + exit (CC65_EXIT_FAILURE); } } diff --git a/libsrc/geos-apple/targetutil/convert.c b/libsrc/geos-apple/targetutil/convert.c index ea9273fc3..a4d07ac0a 100644 --- a/libsrc/geos-apple/targetutil/convert.c +++ b/libsrc/geos-apple/targetutil/convert.c @@ -5,6 +5,7 @@ #include <dirent.h> #include <device.h> #include <dio.h> +#include <cc65.h> unsigned char info_signature[3] = {3, 21, 63 | 0x80}; @@ -69,7 +70,7 @@ static void err_exit(char *operation, unsigned char oserr) operation); } getchar(); - exit(EXIT_FAILURE); + exit(CC65_EXIT_FAILURE); } @@ -342,5 +343,5 @@ int main(int argc, char* argv[]) printf("Convert to '%.*s' successful", dir_entry->storage_length.name_length, dir_entry->file_name); getchar(); - return EXIT_SUCCESS; + return CC65_EXIT_SUCCESS; } diff --git a/libsrc/geos-common/common/_afailed.c b/libsrc/geos-common/common/_afailed.c index 2448534c0..ec21a6b4e 100644 --- a/libsrc/geos-common/common/_afailed.c +++ b/libsrc/geos-common/common/_afailed.c @@ -28,5 +28,5 @@ void _afailed (char* file, unsigned line) DlgBoxOk(CBOLDON "ASSERTION FAILED", "PROGRAM TERMINATED" CPLAINTEXT); - exit (2); + exit (CC65_EXIT_AFAILED); } diff --git a/libsrc/geos-common/common/abort.c b/libsrc/geos-common/common/abort.c index b7cb35eb9..665b70863 100644 --- a/libsrc/geos-common/common/abort.c +++ b/libsrc/geos-common/common/abort.c @@ -6,10 +6,11 @@ #include <stdlib.h> #include <geos.h> +#include <cc65.h> void abort (void) { ExitTurbo(); DlgBoxOk(CBOLDON "ABNORMAL PROGRAM", "TERMINATION." CPLAINTEXT); - exit(3); + exit(CC65_EXIT_ABORT); } From 694dd9240fe42d9544af82ed161927c62971d95d Mon Sep 17 00:00:00 2001 From: mc78 <mc78@outlook.de> Date: Tue, 12 Nov 2019 20:48:43 +0100 Subject: [PATCH 0024/2710] Added comment to debugger exit with error --- libsrc/common/_afailed.c | 2 +- libsrc/common/abort.c | 2 +- libsrc/dbg/dbg.c | 7 +++++-- libsrc/geos-common/common/_afailed.c | 1 + 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/libsrc/common/_afailed.c b/libsrc/common/_afailed.c index 654025e1a..980045a63 100644 --- a/libsrc/common/_afailed.c +++ b/libsrc/common/_afailed.c @@ -10,7 +10,7 @@ #include <signal.h> #include <stdio.h> #include <stdlib.h> - +#include <cc65.h> void __fastcall__ _afailed (char* file, unsigned line) diff --git a/libsrc/common/abort.c b/libsrc/common/abort.c index e59adb7d3..43f4ab004 100644 --- a/libsrc/common/abort.c +++ b/libsrc/common/abort.c @@ -9,7 +9,7 @@ #include <stdio.h> #include <stdlib.h> #include <signal.h> - +#include <cc65.h> void abort (void) diff --git a/libsrc/dbg/dbg.c b/libsrc/dbg/dbg.c index 1b08d7750..a58e6c7a6 100644 --- a/libsrc/dbg/dbg.c +++ b/libsrc/dbg/dbg.c @@ -14,7 +14,7 @@ #include <ctype.h> #include <6502.h> #include <dbg.h> - +#include <cc65.h> /*****************************************************************************/ @@ -1580,8 +1580,11 @@ void DbgEntry (void) case 'q': /* Quit program */ clrscr (); + + /* Exit intentionally with error because one may + say that DbgEntry is always abnormal. */ exit (CC65_EXIT_FAILURE); - + } } } diff --git a/libsrc/geos-common/common/_afailed.c b/libsrc/geos-common/common/_afailed.c index ec21a6b4e..cc9610ddf 100644 --- a/libsrc/geos-common/common/_afailed.c +++ b/libsrc/geos-common/common/_afailed.c @@ -7,6 +7,7 @@ #include <stdio.h> #include <stdlib.h> #include <geos.h> +#include <cc65.h> void _afailed (char* file, unsigned line) { From 16a66f19e10b85e5adc4b0c72de07cbd8dd2159f Mon Sep 17 00:00:00 2001 From: mc78 <mc78@outlook.de> Date: Fri, 15 Nov 2019 16:35:58 +0100 Subject: [PATCH 0025/2710] Replaced enum in cc65.h by defines. added comment that cc65 exit constants should not redefine 0 and 1 as they are reserved for exit_success and exit_failure --- include/cc65.h | 13 +++++++------ libsrc/dbg/dbg.c | 3 +-- libsrc/geos-apple/targetutil/convert.c | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/include/cc65.h b/include/cc65.h index 99a8665c8..95de8e4ab 100644 --- a/include/cc65.h +++ b/include/cc65.h @@ -36,12 +36,13 @@ #ifndef _CC65_H #define _CC65_H -typedef enum { - CC65_EXIT_SUCCESS, - CC65_EXIT_FAILURE, - CC65_EXIT_AFAILED, - CC65_EXIT_ABORT -} cc65_exit_codes_t; + +/* Those cc65 exit constants definitions are in addition the the + constants defined in stdlib.h. The values 0 and 1 are still + reserved for EXIT_SUCCESS and EXIT_FAILURE and should not be + redefined */ +#define CC65_EXIT_AFAILED 2 +#define CC65_EXIT_ABORT 3 /*****************************************************************************/ diff --git a/libsrc/dbg/dbg.c b/libsrc/dbg/dbg.c index a58e6c7a6..a6f952f35 100644 --- a/libsrc/dbg/dbg.c +++ b/libsrc/dbg/dbg.c @@ -14,7 +14,6 @@ #include <ctype.h> #include <6502.h> #include <dbg.h> -#include <cc65.h> /*****************************************************************************/ @@ -1583,7 +1582,7 @@ void DbgEntry (void) /* Exit intentionally with error because one may say that DbgEntry is always abnormal. */ - exit (CC65_EXIT_FAILURE); + exit (EXIT_FAILURE); } } diff --git a/libsrc/geos-apple/targetutil/convert.c b/libsrc/geos-apple/targetutil/convert.c index a4d07ac0a..7798e004d 100644 --- a/libsrc/geos-apple/targetutil/convert.c +++ b/libsrc/geos-apple/targetutil/convert.c @@ -70,7 +70,7 @@ static void err_exit(char *operation, unsigned char oserr) operation); } getchar(); - exit(CC65_EXIT_FAILURE); + exit(EXIT_FAILURE); } @@ -343,5 +343,5 @@ int main(int argc, char* argv[]) printf("Convert to '%.*s' successful", dir_entry->storage_length.name_length, dir_entry->file_name); getchar(); - return CC65_EXIT_SUCCESS; + return EXIT_SUCCESS; } From a139c4057c4bcea6518ab3dc9c23db0171d2d4c5 Mon Sep 17 00:00:00 2001 From: mc78 <mc78@outlook.de> Date: Sun, 17 Nov 2019 13:13:43 +0100 Subject: [PATCH 0026/2710] Removed CC65_ prefixes from exit statements in abort and assert code as well from definition --- include/cc65.h | 4 ++-- libsrc/common/_afailed.c | 2 +- libsrc/common/abort.c | 2 +- libsrc/geos-common/common/_afailed.c | 2 +- libsrc/geos-common/common/abort.c | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/cc65.h b/include/cc65.h index 95de8e4ab..9506cf107 100644 --- a/include/cc65.h +++ b/include/cc65.h @@ -41,8 +41,8 @@ constants defined in stdlib.h. The values 0 and 1 are still reserved for EXIT_SUCCESS and EXIT_FAILURE and should not be redefined */ -#define CC65_EXIT_AFAILED 2 -#define CC65_EXIT_ABORT 3 +#define EXIT_ASSERT 2 +#define EXIT_ABORT 3 /*****************************************************************************/ diff --git a/libsrc/common/_afailed.c b/libsrc/common/_afailed.c index 980045a63..7df2db60f 100644 --- a/libsrc/common/_afailed.c +++ b/libsrc/common/_afailed.c @@ -17,5 +17,5 @@ void __fastcall__ _afailed (char* file, unsigned line) { raise (SIGABRT); fprintf (stderr, "ASSERTION FAILED IN %s(%u)\n", file, line); - exit (CC65_EXIT_AFAILED); + exit (EXIT_ASSERT); } diff --git a/libsrc/common/abort.c b/libsrc/common/abort.c index 43f4ab004..af0d8c314 100644 --- a/libsrc/common/abort.c +++ b/libsrc/common/abort.c @@ -16,7 +16,7 @@ void abort (void) { raise (SIGABRT); fputs ("ABNORMAL PROGRAM TERMINATION\n", stderr); - exit (CC65_EXIT_ABORT); + exit (EXIT_ABORT); } diff --git a/libsrc/geos-common/common/_afailed.c b/libsrc/geos-common/common/_afailed.c index cc9610ddf..63f234962 100644 --- a/libsrc/geos-common/common/_afailed.c +++ b/libsrc/geos-common/common/_afailed.c @@ -29,5 +29,5 @@ void _afailed (char* file, unsigned line) DlgBoxOk(CBOLDON "ASSERTION FAILED", "PROGRAM TERMINATED" CPLAINTEXT); - exit (CC65_EXIT_AFAILED); + exit (EXIT_ASSERT); } diff --git a/libsrc/geos-common/common/abort.c b/libsrc/geos-common/common/abort.c index 665b70863..92ed745a0 100644 --- a/libsrc/geos-common/common/abort.c +++ b/libsrc/geos-common/common/abort.c @@ -12,5 +12,5 @@ void abort (void) { ExitTurbo(); DlgBoxOk(CBOLDON "ABNORMAL PROGRAM", "TERMINATION." CPLAINTEXT); - exit(CC65_EXIT_ABORT); + exit(EXIT_ABORT); } From 8d2617110facddc2ba709db28abd710e7ce2ca38 Mon Sep 17 00:00:00 2001 From: mc78 <mc78@outlook.de> Date: Sun, 17 Nov 2019 15:57:34 +0100 Subject: [PATCH 0027/2710] Removed additional exit constants definitions from cc65.h to stdlih.h. Guarded the definitions by #ifdef. Removed cc65.h includes from abort and assert implementations. --- include/cc65.h | 8 -------- include/stdlib.h | 11 +++++++++++ libsrc/common/_afailed.c | 1 - libsrc/common/abort.c | 1 - libsrc/geos-common/common/_afailed.c | 1 - libsrc/geos-common/common/abort.c | 1 - 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/include/cc65.h b/include/cc65.h index 9506cf107..720f1cd04 100644 --- a/include/cc65.h +++ b/include/cc65.h @@ -37,14 +37,6 @@ #define _CC65_H -/* Those cc65 exit constants definitions are in addition the the - constants defined in stdlib.h. The values 0 and 1 are still - reserved for EXIT_SUCCESS and EXIT_FAILURE and should not be - redefined */ -#define EXIT_ASSERT 2 -#define EXIT_ABORT 3 - - /*****************************************************************************/ /* Code */ /*****************************************************************************/ diff --git a/include/stdlib.h b/include/stdlib.h index 3103172d8..638cb475b 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -48,6 +48,17 @@ typedef unsigned size_t; #define EXIT_SUCCESS 0 #define EXIT_FAILURE 1 +#if __CC65_STD__ == __CC65_STD_CC65__ + +/* Those non-standard cc65 exit constants definitions are in addition + to the EXIT_SUCCESS and EXIT_FAILURE constants, which should not be + redefined */ +#define EXIT_ASSERT 2 +#define EXIT_ABORT 3 + +#endif + + /* Return type of the div function */ typedef struct { int rem; diff --git a/libsrc/common/_afailed.c b/libsrc/common/_afailed.c index 7df2db60f..ad50a8750 100644 --- a/libsrc/common/_afailed.c +++ b/libsrc/common/_afailed.c @@ -10,7 +10,6 @@ #include <signal.h> #include <stdio.h> #include <stdlib.h> -#include <cc65.h> void __fastcall__ _afailed (char* file, unsigned line) diff --git a/libsrc/common/abort.c b/libsrc/common/abort.c index af0d8c314..1dda559bb 100644 --- a/libsrc/common/abort.c +++ b/libsrc/common/abort.c @@ -9,7 +9,6 @@ #include <stdio.h> #include <stdlib.h> #include <signal.h> -#include <cc65.h> void abort (void) diff --git a/libsrc/geos-common/common/_afailed.c b/libsrc/geos-common/common/_afailed.c index 63f234962..97727d605 100644 --- a/libsrc/geos-common/common/_afailed.c +++ b/libsrc/geos-common/common/_afailed.c @@ -7,7 +7,6 @@ #include <stdio.h> #include <stdlib.h> #include <geos.h> -#include <cc65.h> void _afailed (char* file, unsigned line) { diff --git a/libsrc/geos-common/common/abort.c b/libsrc/geos-common/common/abort.c index 92ed745a0..90a651286 100644 --- a/libsrc/geos-common/common/abort.c +++ b/libsrc/geos-common/common/abort.c @@ -6,7 +6,6 @@ #include <stdlib.h> #include <geos.h> -#include <cc65.h> void abort (void) { From 1dee2360fa5a5690271a347f782a214776550cab Mon Sep 17 00:00:00 2001 From: mc78 <mc78@outlook.de> Date: Sun, 17 Nov 2019 16:16:32 +0100 Subject: [PATCH 0028/2710] added additional empty line after header guard in cc65.h to conform to other headers --- include/cc65.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/cc65.h b/include/cc65.h index 720f1cd04..7e9c2cae2 100644 --- a/include/cc65.h +++ b/include/cc65.h @@ -37,6 +37,7 @@ #define _CC65_H + /*****************************************************************************/ /* Code */ /*****************************************************************************/ From db971d8a655c8f00109ba1d9403cf9838643b93a Mon Sep 17 00:00:00 2001 From: mc78 <mc78@outlook.de> Date: Tue, 19 Nov 2019 13:17:02 +0100 Subject: [PATCH 0029/2710] Removed unnecessary #include <cc65.h> from convert.c Adjusted block comments to predominant style --- include/stdlib.h | 5 +++-- libsrc/dbg/dbg.c | 3 ++- libsrc/geos-apple/targetutil/convert.c | 1 - 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/stdlib.h b/include/stdlib.h index 638cb475b..b929e8f02 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -51,8 +51,9 @@ typedef unsigned size_t; #if __CC65_STD__ == __CC65_STD_CC65__ /* Those non-standard cc65 exit constants definitions are in addition - to the EXIT_SUCCESS and EXIT_FAILURE constants, which should not be - redefined */ +** to the EXIT_SUCCESS and EXIT_FAILURE constants, which should not be +** redefined +*/ #define EXIT_ASSERT 2 #define EXIT_ABORT 3 diff --git a/libsrc/dbg/dbg.c b/libsrc/dbg/dbg.c index a6f952f35..27f2086eb 100644 --- a/libsrc/dbg/dbg.c +++ b/libsrc/dbg/dbg.c @@ -1581,7 +1581,8 @@ void DbgEntry (void) clrscr (); /* Exit intentionally with error because one may - say that DbgEntry is always abnormal. */ + ** say that DbgEntry is always abnormal. + */ exit (EXIT_FAILURE); } diff --git a/libsrc/geos-apple/targetutil/convert.c b/libsrc/geos-apple/targetutil/convert.c index 7798e004d..ea9273fc3 100644 --- a/libsrc/geos-apple/targetutil/convert.c +++ b/libsrc/geos-apple/targetutil/convert.c @@ -5,7 +5,6 @@ #include <dirent.h> #include <device.h> #include <dio.h> -#include <cc65.h> unsigned char info_signature[3] = {3, 21, 63 | 0x80}; From d9a6fbac48d52e5765b0ac6e5531f7261561f61d Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 18:59:18 +0100 Subject: [PATCH 0030/2710] Fixed C16 #978 --- libsrc/c16/waitvsync.s | 1 + 1 file changed, 1 insertion(+) create mode 100644 libsrc/c16/waitvsync.s diff --git a/libsrc/c16/waitvsync.s b/libsrc/c16/waitvsync.s new file mode 100644 index 000000000..c020976b9 --- /dev/null +++ b/libsrc/c16/waitvsync.s @@ -0,0 +1 @@ +.include "../plus4/waitvsync.s" From 9ab614d764b5f524cb60fb65c0e3d7187b97fdd0 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:05:28 +0100 Subject: [PATCH 0031/2710] Update c16.sgml --- doc/c16.sgml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/doc/c16.sgml b/doc/c16.sgml index 462f98345..ae64da47b 100644 --- a/doc/c16.sgml +++ b/doc/c16.sgml @@ -123,6 +123,7 @@ declaration and usage. <item>cbm_save <item>cbm_write <item>get_tv +<item>waitvsync </itemize> @@ -270,7 +271,3 @@ freely, subject to the following restrictions: </enum> </article> - - - - From 9bf2bf308aeb349b7693ed3feb64c29654c8d673 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:09:54 +0100 Subject: [PATCH 0032/2710] Update c128.sgml --- doc/c128.sgml | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/c128.sgml b/doc/c128.sgml index 1d8734fdf..8c62b6ad1 100644 --- a/doc/c128.sgml +++ b/doc/c128.sgml @@ -133,6 +133,7 @@ declaration and usage. <item>cbm_save <item>cbm_write <item>get_tv +<item>waitvsync </itemize> From 94892231bcc60ba0b004b94ecd2a7002b7b29e90 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:10:32 +0100 Subject: [PATCH 0033/2710] Update c64.sgml --- doc/c64.sgml | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/c64.sgml b/doc/c64.sgml index c11867051..7cd9b2d81 100644 --- a/doc/c64.sgml +++ b/doc/c64.sgml @@ -225,6 +225,7 @@ declaration and usage. <item>cbm_save <item>cbm_write <item>get_tv +<item>waitvsync </itemize> From 49ebac7ac1c6e563f481c6bdd585e724ae749763 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:11:11 +0100 Subject: [PATCH 0034/2710] Update cbm510.sgml --- doc/cbm510.sgml | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/cbm510.sgml b/doc/cbm510.sgml index 012a7b596..c208f3ead 100644 --- a/doc/cbm510.sgml +++ b/doc/cbm510.sgml @@ -126,6 +126,7 @@ declaration and usage. <item>cbm_save <item>cbm_write <item>get_tv +<item>waitvsync </itemize> From 63ab22f97f59953da5a38b265d3277dde163214c Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:14:08 +0100 Subject: [PATCH 0035/2710] Update cx16.sgml --- doc/cx16.sgml | 62 +++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/doc/cx16.sgml b/doc/cx16.sgml index 7189e7157..2136265bc 100644 --- a/doc/cx16.sgml +++ b/doc/cx16.sgml @@ -139,12 +139,11 @@ The functions listed below are special for the CX16. See the <url url="funcref.html" name="function reference"> for declarations and usage. <itemize> -<item>get_ostype() -<item>set_tv() -<item>videomode() -<item>vpeek() -<item>vpoke() -<item>waitvsync() +<item>get_ostype +<item>set_tv +<item>videomode +<item>vpeek +<item>vpoke </itemize> @@ -155,31 +154,32 @@ machines. See the <url url="funcref.html" name="function reference"> for declarations and usage. <itemize> -<item>cbm_close() -<item>cbm_closedir() -<item>cbm_k_basin() -<item>cbm_k_bsout() -<item>cbm_k_chkin() -<item>cbm_k_ckout() -<item>cbm_k_close() -<item>cbm_k_clrch() -<item>cbm_k_getin() -<item>cbm_k_load() -<item>cbm_k_open() -<item>cbm_k_readst() -<item>cbm_k_save() -<item>cbm_k_second() -<item>cbm_k_setlfs() -<item>cbm_k_setnam() -<item>cbm_k_tksa() -<item>cbm_load() -<item>cbm_open() -<item>cbm_opendir() -<item>cbm_read() -<item>cbm_readdir() -<item>cbm_save() -<item>cbm_write() -<item>get_tv() +<item>cbm_close +<item>cbm_closedir +<item>cbm_k_basin +<item>cbm_k_bsout +<item>cbm_k_chkin +<item>cbm_k_ckout +<item>cbm_k_close +<item>cbm_k_clrch +<item>cbm_k_getin +<item>cbm_k_load +<item>cbm_k_open +<item>cbm_k_readst +<item>cbm_k_save +<item>cbm_k_second +<item>cbm_k_setlfs +<item>cbm_k_setnam +<item>cbm_k_tksa +<item>cbm_load +<item>cbm_open +<item>cbm_opendir +<item>cbm_read +<item>cbm_readdir +<item>cbm_save +<item>cbm_write +<item>get_tv +<item>waitvsync </itemize> From c08f1e4bfdc56bcdd7da4c6422246f6e5896e9c3 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:15:50 +0100 Subject: [PATCH 0036/2710] Update funcref.sgml --- doc/funcref.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 72a44c7b6..7a46736ec 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -213,8 +213,8 @@ function. <!-- <item><ref id="cbm_save" name="cbm_save"> --> <!-- <item><ref id="cbm_write" name="cbm_write"> --> <!-- <item><ref id="get_tv" name="get_tv"> --> -<item><ref id="waitvsync" name="waitvsync"> <item><ref id="kbrepeat" name="kbrepeat"> +<item><ref id="waitvsync" name="waitvsync"> </itemize> (incomplete) @@ -7716,7 +7716,7 @@ name="toggle_videomode">. <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> -<tag/Availability/C128 and enhanced Apple //e +<tag/Availability/C128, enhanced Apple //e and CX16 <tag/See also/ <ref id="fast" name="fast">, <ref id="isfast" name="isfast">, From 7361aa9959b8a869d18e4f457f00ea1bf449f0f9 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:16:31 +0100 Subject: [PATCH 0037/2710] Update nes.sgml --- doc/nes.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/nes.sgml b/doc/nes.sgml index 3f8f74183..beb322fc3 100644 --- a/doc/nes.sgml +++ b/doc/nes.sgml @@ -67,8 +67,8 @@ Programs containing NES specific code may use the <tt/nes.h/ header file. <sect1>NES specific functions<p> <itemize> -<item>waitvsync - wait until the start of the next frame</item> <item>get_tv</item> +<item>waitvsync - wait until the start of the next frame</item> </itemize> From ea16316e336f53c915bc038e0cd53f0e9895ab0f Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:17:22 +0100 Subject: [PATCH 0038/2710] Update pce.sgml --- doc/pce.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/pce.sgml b/doc/pce.sgml index a1866b8f0..42a1ca9d3 100644 --- a/doc/pce.sgml +++ b/doc/pce.sgml @@ -114,8 +114,8 @@ Programs containing PCE-specific code may use the <tt/pce.h/ header file. <sect1>PCE-specific functions<p> <itemize> -<item>waitvsync</item> <item>get_tv (since all PCE systems are NTSC, this always returns TV_NTSC)</item> +<item>waitvsync</item> </itemize> From a56b176749bb6bf43a29e797e362a9596f5cb079 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:18:05 +0100 Subject: [PATCH 0039/2710] Update plus4.sgml --- doc/plus4.sgml | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/plus4.sgml b/doc/plus4.sgml index 11468bb33..645de5161 100644 --- a/doc/plus4.sgml +++ b/doc/plus4.sgml @@ -121,6 +121,7 @@ declaration and usage. <item>cbm_save <item>cbm_write <item>get_tv +<item>waitvsync </itemize> From c9d2c10cbd43cf4e46aec6ec6489515742737daf Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:18:39 +0100 Subject: [PATCH 0040/2710] Update vic20.sgml --- doc/vic20.sgml | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/vic20.sgml b/doc/vic20.sgml index e292e0a1a..4fcd0079c 100644 --- a/doc/vic20.sgml +++ b/doc/vic20.sgml @@ -107,6 +107,7 @@ declaration and usage. <item>cbm_save <item>cbm_write <item>get_tv +<item>waitvsync </itemize> From 4497998944981862233914b75875590226021345 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:20:19 +0100 Subject: [PATCH 0041/2710] Update color.s --- libsrc/c16/color.s | 34 +--------------------------------- 1 file changed, 1 insertion(+), 33 deletions(-) diff --git a/libsrc/c16/color.s b/libsrc/c16/color.s index 2f3046e8f..fbcc95a2a 100644 --- a/libsrc/c16/color.s +++ b/libsrc/c16/color.s @@ -1,33 +1 @@ -; -; Ullrich von Bassewitz, 06.08.1998 -; -; unsigned char __fastcall__ textcolor (unsigned char color); -; unsigned char __fastcall__ bgcolor (unsigned char color); -; unsigned char __fastcall__ bordercolor (unsigned char color); -; - - .export _textcolor, _bgcolor, _bordercolor - - .include "plus4.inc" - -_textcolor: - ldx CHARCOLOR ; get old value - sta CHARCOLOR ; set new value - txa - rts - - -_bgcolor: - ldx TED_BGCOLOR ; get old value - sta TED_BGCOLOR ; set new value - txa - rts - - -_bordercolor: - ldx TED_BORDERCOLOR ; get old value - sta TED_BORDERCOLOR ; set new value - txa - rts - - +.include "../plus4/color.s" From 06c98952fcd153d5ae4ac22477e8a51006481ee9 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:21:00 +0100 Subject: [PATCH 0042/2710] Update conio.s --- libsrc/c16/conio.s | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/libsrc/c16/conio.s b/libsrc/c16/conio.s index feca30c68..3ab372a29 100644 --- a/libsrc/c16/conio.s +++ b/libsrc/c16/conio.s @@ -1,10 +1 @@ -; -; Ullrich von Bassewitz, 06.08.1998 -; -; Low level stuff for screen output/console input -; - - .exportzp CURS_X, CURS_Y - - .include "plus4.inc" - +.include "../plus4/conio.s" From 3f360fe3ee04490dd1664e27066c1248f9e4de87 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:21:52 +0100 Subject: [PATCH 0043/2710] Update cputc.s --- libsrc/c16/cputc.s | 105 +-------------------------------------------- 1 file changed, 1 insertion(+), 104 deletions(-) diff --git a/libsrc/c16/cputc.s b/libsrc/c16/cputc.s index 49b3a84dd..86959675a 100644 --- a/libsrc/c16/cputc.s +++ b/libsrc/c16/cputc.s @@ -1,104 +1 @@ -; -; Ullrich von Bassewitz, 06.08.1998 -; -; void cputcxy (unsigned char x, unsigned char y, char c); -; void cputc (char c); -; - - .export _cputcxy, _cputc, cputdirect, putchar - .export newline, plot - .import gotoxy - .import PLOT - - .include "plus4.inc" - - -_cputcxy: - pha ; Save C - jsr gotoxy ; Set cursor, drop x and y - pla ; Restore C - -; Plot a character - also used as internal function - -_cputc: cmp #$0A ; CR? - bne L1 - lda #0 - sta CURS_X - beq plot ; Recalculate pointers - -L1: cmp #$0D ; LF? - beq newline ; Recalculate pointers - -; Printable char of some sort - - cmp #' ' - bcc cputdirect ; Other control char - tay - bmi L10 - cmp #$60 - bcc L2 - and #$DF - bne cputdirect ; Branch always -L2: and #$3F - -cputdirect: - jsr putchar ; Write the character to the screen - -; Advance cursor position - -advance: - iny - cpy #XSIZE - bne L3 - jsr newline ; new line - ldy #0 ; + cr -L3: sty CURS_X - rts - -newline: - clc - lda #XSIZE - adc SCREEN_PTR - sta SCREEN_PTR - bcc L4 - inc SCREEN_PTR+1 - clc -L4: lda #XSIZE - adc CRAM_PTR - sta CRAM_PTR - bcc L5 - inc CRAM_PTR+1 -L5: inc CURS_Y - rts - -; Handle character if high bit set - -L10: and #$7F - cmp #$7E ; PI? - bne L11 - lda #$5E ; Load screen code for PI - bne cputdirect -L11: ora #$40 - bne cputdirect - - - -; Set cursor position, calculate RAM pointers - -plot: ldy CURS_X - ldx CURS_Y - clc - jmp PLOT ; Set the new cursor - - - -; Write one character to the screen without doing anything else, return X -; position in Y - -putchar: - ora RVS ; Set revers bit - ldy CURS_X - sta (SCREEN_PTR),y ; Set char - lda CHARCOLOR - sta (CRAM_PTR),y ; Set color - rts +.include "../plus4/cputc.s" From df752ff7a58da5785f113c84cf946c5de75bbc58 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:22:28 +0100 Subject: [PATCH 0044/2710] Update fast.s --- libsrc/c16/fast.s | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/libsrc/c16/fast.s b/libsrc/c16/fast.s index e48813969..50924edbc 100644 --- a/libsrc/c16/fast.s +++ b/libsrc/c16/fast.s @@ -1,22 +1 @@ -; -; Marco van den Heuvel, 2018-03-20 -; -; void fast (void); -; /* Switch the CPU into double clock mode. */ -; - - .export _fast - - .include "plus4.inc" - - -.proc _fast - - lda TED_CLK - and #%11111101 - sta TED_CLK - rts - -.endproc - - +.include "../plus4/fast.s" From 2c34723a97631992dd6d00fa6e19bd49e05a7c87 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:22:53 +0100 Subject: [PATCH 0045/2710] Update isfast.s --- libsrc/c16/isfast.s | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/libsrc/c16/isfast.s b/libsrc/c16/isfast.s index ff104d97f..036840753 100644 --- a/libsrc/c16/isfast.s +++ b/libsrc/c16/isfast.s @@ -1,22 +1 @@ -; -; Marco van den Heuvel, 2018-03-20 -; -; unsigned char isfast (void); -; /* Returns 1 if the CPU is in double clock mode. */ -; - - .export _isfast - - .include "plus4.inc" - - -.proc _isfast - - lda TED_CLK - lsr - and #$01 - ldx #$00 - rts - -.endproc - +.include "../plus4/isfast.s" From eeefd10f8f8699e7ceb0d02840257dd56f6a0bbb Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:23:31 +0100 Subject: [PATCH 0046/2710] Update revers.s --- libsrc/c16/revers.s | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/libsrc/c16/revers.s b/libsrc/c16/revers.s index f1c0b4d64..3ce668760 100644 --- a/libsrc/c16/revers.s +++ b/libsrc/c16/revers.s @@ -1,27 +1 @@ -; -; Ullrich von Bassewitz, 07.08.1998 -; -; unsigned char revers (unsigned char onoff); -; - - .export _revers - - .include "plus4.inc" - -.proc _revers - - ldx #$00 ; Assume revers off - tay ; Test onoff - beq L1 ; Jump if off - ldx #$80 ; Load on value - ldy #$00 ; Assume old value is zero -L1: lda RVS ; Load old value - stx RVS ; Set new value - beq L2 ; Jump if old value zero - iny ; Make old value = 1 -L2: ldx #$00 ; Load high byte of result - tya ; Load low byte, set CC - rts - -.endproc - +.include "../plus4/revers.s" From 9d4d00737ec18db92ea395bef6185345eb353adb Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:24:14 +0100 Subject: [PATCH 0047/2710] Update slow.s --- libsrc/c16/slow.s | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/libsrc/c16/slow.s b/libsrc/c16/slow.s index 18b8c231c..70e461a9a 100644 --- a/libsrc/c16/slow.s +++ b/libsrc/c16/slow.s @@ -1,22 +1 @@ -; -; Marco van den Heuvel, 2018-03-28 -; -; void slow (void); -; /* Switch the CPU into single clock mode. */ -; - - .export _slow - - .include "plus4.inc" - - -.proc _slow - - lda TED_CLK - ora #%00000010 - sta TED_CLK - rts - -.endproc - - +.include "../plus4/slow.s" From d1fd7ffc59f2aa06ec4f5af263c867d2907eaaa0 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Tue, 19 Nov 2019 19:24:49 +0100 Subject: [PATCH 0048/2710] Update status.s --- libsrc/c16/status.s | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/libsrc/c16/status.s b/libsrc/c16/status.s index c6f279230..04d971696 100644 --- a/libsrc/c16/status.s +++ b/libsrc/c16/status.s @@ -1,5 +1 @@ -; -; Oliver Schmidt, 2012-09-30 -; - - .exportzp ST := $90 ; IEC status byte +.include "../plus4/status.s" From f75657d7e250268c5a4c444ecd8b2ac2ea7815db Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Wed, 20 Nov 2019 12:11:47 -0500 Subject: [PATCH 0049/2710] Added <cx16.h> to the function reference document. --- doc/funcref.sgml | 59 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 7a46736ec..c2b46f0f0 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -318,6 +318,20 @@ function. </itemize> +<sect1><tt/cx16.h/<label id="cx16.h"><p> + +<itemize> +<!-- <item><ref id="get_ostype" name="get_ostype"> --> +<!-- <item><ref id="get_tv" name="get_tv"> --> +<!-- <item><ref id="set_tv" name="set_tv"> --> +<item><ref id="videomode" name="videomode"> +<!-- <item><ref id="vpeek" name="vpeek"> --> +<!-- <item><ref id="vpoke" name="vpoke"> --> +</itemize> + +(incomplete) + + <sect1><tt/dbg.h/<label id="dbg.h"><p> <!-- <itemize> --> @@ -7702,24 +7716,31 @@ used in presence of a prototype. <quote> <descrip> -<tag/Function/Switch to either 40 or 80 column mode. -<tag/Header/<tt/<ref id="apple2enh.h" name="apple2enh.h">, -<ref id="c128.h" name="c128.h">/ -<tag/Declaration/<tt/unsigned __fastcall__ videomode (unsigned Mode);/ -<tag/Description/Switch to 40 or 80 column mode depending on the argument. If -the requested mode is already active, nothing happens. The old mode is returned -from the call. +<tag/Function/Switch to either 40- or 80-column text mode, or a standard +graphics mode. +<tag/Header/<tt/ +<ref id="apple2enh.h" name="apple2enh.h">, +<ref id="c128.h" name="c128.h">, +<ref id="cx16.h" name="cx16.h">/ +<tag/Declaration/ +<tt>unsigned __fastcall__ videomode (unsigned Mode); /* for apple2enh and c128 */</tt><newline> +<tt>signed char __fastcall__ videomode (signed char Mode); /* for cx16 */</tt> +<tag/Description/Switch to a 40- or 80-column text or graphics mode, depending +on the argument. If the requested mode is already active, nothing happens. The +old mode is returned from the call. <tag/Notes/<itemize> -<item>The function is specific to the C128 and enhanced Apple //e. +<item>The function is specific to the Commodore 128, the enhanced Apple //e, +and the Commander X16. <item>This function replaces <ref id="toggle_videomode" name="toggle_videomode">. -<item>The function is only available as fastcall function, so it may only be -used in presence of a prototype. +<item>The function is available as only a fastcall function, so it may be used +only in the presence of a prototype. </itemize> -<tag/Availability/C128, enhanced Apple //e and CX16 +<tag/Availability/C128, enhanced Apple //e, and CX16 <tag/See also/ <ref id="fast" name="fast">, <ref id="isfast" name="isfast">, +<!-- <ref id="set_tv" name="set_tv">, --> <ref id="slow" name="slow">, <ref id="toggle_videomode" name="toggle_videomode"> <tag/Example/None. @@ -7731,15 +7752,15 @@ used in presence of a prototype. <quote> <descrip> -<tag/Function/Wait until the start of the next frame. -<tag/Header/ -<tt/<ref id="cbm.h" name="cbm.h">/, -<tt/<ref id="gamate.h" name="gamate.h">/, -<tt/<ref id="nes.h" name="nes.h">/, -<tt/<ref id="pce.h" name="pce.h">/ +<tag/Function/Wait until the start of the next video frame. +<tag/Header/<tt/ +<ref id="cbm.h" name="cbm.h">, +<ref id="gamate.h" name="gamate.h">, +<ref id="nes.h" name="nes.h">, +<ref id="pce.h" name="pce.h">/ <tag/Declaration/<tt/void waitvsync (void);/ -<tag/Description/Wait for vertical sync to reduce flickering. -<tag/Availability/Platforms above +<tag/Description/Wait for vertical sync, to reduce flickering. +<tag/Availability/Platforms served by the headers above <tag/Example/None. </descrip> </quote> From d5c804f851c2dcf187a640b320cc49d466bfc76d Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Tue, 26 Nov 2019 22:18:12 +0100 Subject: [PATCH 0050/2710] Expanded Sim65 zero page. --- cfg/sim6502.cfg | 2 +- cfg/sim65c02.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cfg/sim6502.cfg b/cfg/sim6502.cfg index c768ab4a3..39c33581c 100644 --- a/cfg/sim6502.cfg +++ b/cfg/sim6502.cfg @@ -3,7 +3,7 @@ SYMBOLS { __STACKSIZE__: type = weak, value = $0800; # 2k stack } MEMORY { - ZP: file = "", start = $0000, size = $001B; + ZP: file = "", start = $0000, size = $0100; HEADER: file = %O, start = $0000, size = $000C; MAIN: file = %O, define = yes, start = $0200, size = $FDF0 - __STACKSIZE__; } diff --git a/cfg/sim65c02.cfg b/cfg/sim65c02.cfg index c768ab4a3..39c33581c 100644 --- a/cfg/sim65c02.cfg +++ b/cfg/sim65c02.cfg @@ -3,7 +3,7 @@ SYMBOLS { __STACKSIZE__: type = weak, value = $0800; # 2k stack } MEMORY { - ZP: file = "", start = $0000, size = $001B; + ZP: file = "", start = $0000, size = $0100; HEADER: file = %O, start = $0000, size = $000C; MAIN: file = %O, define = yes, start = $0200, size = $FDF0 - __STACKSIZE__; } From fb0d09a277ce74959552fe1ce58f1b4d7ee8419f Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 6 Dec 2019 14:47:47 -0500 Subject: [PATCH 0051/2710] Changed sim65's internal error codes from 9-bit values to 7-bit values. Some shells truncate process return codes to 8 bits. And, the eigth bit often is used to show that a signal stopped the process. --- src/sim65/error.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sim65/error.h b/src/sim65/error.h index 5d6e8be21..cbb785875 100644 --- a/src/sim65/error.h +++ b/src/sim65/error.h @@ -49,10 +49,10 @@ -#define SIM65_ERROR 256 +#define SIM65_ERROR 0x7F /* Does not use EXIT_FAILURE because it may overlap with test results. */ -#define SIM65_ERROR_TIMEOUT 257 +#define SIM65_ERROR_TIMEOUT 0x7E /* An error result for max CPU instructions exceeded. */ From cab4910a7d07029b3cc0ffd8abd4355f0365f5b7 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 10 Dec 2019 05:59:33 -0500 Subject: [PATCH 0052/2710] Added the missing BANK_RAM array to the Commander X16's header. --- include/cx16.h | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/include/cx16.h b/include/cx16.h index b465378a5..d7ed15d2a 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -77,7 +77,8 @@ #define COLOR_LIGHTBLUE 0x0E #define COLOR_GRAY3 0x0F -/* Masks for joy_read() */ +/* NES controller masks for joy_read() */ + #define JOY_BTN_1_MASK 0x80 #define JOY_BTN_2_MASK 0x40 #define JOY_BTN_3_MASK 0x20 @@ -101,7 +102,7 @@ #define JOY_FIRE2(v) ((v) & JOY_FIRE2_MASK) /* Additional mouse button mask */ -#define MOUSE_BTN_MIDDLE 0x02 +#define MOUSE_BTN_MIDDLE 0x02 /* get_tv() return codes ** set_tv() argument codes @@ -115,7 +116,7 @@ #define TV_NTSC_MONO 6 #define TV_RGB2 7 -/* Video modes */ +/* Video modes for videomode() */ #define VIDEOMODE_40x30 0x00 #define VIDEOMODE_80x60 0x02 #define VIDEOMODE_40COL VIDEOMODE_40x30 @@ -130,11 +131,9 @@ #define VERA_IRQ_UART 0b00001000 -/* Define hardware */ +/* Define hardware. */ -/* Define a structure with the Video Enhanced Retro Adapter's -** external registers. -*/ +/* A structure with the Video Enhanced Retro Adapter's external registers */ struct __vera { unsigned short address; /* Address for data ports */ unsigned char address_hi; @@ -150,7 +149,7 @@ struct __vera { #define VIA1 (*(volatile struct __6522 *)0x9F60) #define VIA2 (*(volatile struct __6522 *)0x9F70) -/* Define a structure with the x16emu's settings registers. */ +/* A structure with the x16emu's settings registers */ struct __emul { unsigned char debug; /* Boolean: debugging enabled */ unsigned char vera_action; /* Boolean: displaying VERA activity */ @@ -162,7 +161,10 @@ struct __emul { unsigned char keymap; /* Keyboard layout number */ const char detect[2]; /* "16" if running on x16emu */ }; -#define EMULATOR (*(volatile struct __emul)0x9FB0) +#define EMULATOR (*(volatile struct __emul)0x9FB0) + +/* An array window into the half Mibibyte or two Mibibytes of banked RAM */ +#define BANK_RAM ((unsigned char[0x2000])0xA000) From 3fa253d31fbec8602e791345125e33efadd98cbf Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Wed, 25 Dec 2019 10:56:32 -0500 Subject: [PATCH 0053/2710] Updated the cx16 library to the Commander X16 Kernal's prerelease 35. --- asminc/cbm_kernal.inc | 40 +++++- asminc/cx16.inc | 217 ++++++++++++++++++++++++------- cfg/cx16-asm.cfg | 2 +- cfg/cx16-bank.cfg | 10 +- cfg/cx16.cfg | 2 +- doc/cx16.sgml | 10 +- include/cbm.h | 2 +- include/cx16.h | 14 +- libsrc/cbm/clock.s | 19 ++- libsrc/cx16/_scrsize.s | 6 +- libsrc/cx16/bankramaddr.s | 6 +- libsrc/cx16/cgetc.s | 8 +- libsrc/cx16/clock.s | 36 +++++ libsrc/cx16/crt0.s | 12 +- libsrc/cx16/get_tv.s | 6 +- libsrc/cx16/joy/cx16-std.s | 60 +++------ libsrc/cx16/joyref.s | 4 +- libsrc/cx16/kbhit.s | 7 +- libsrc/cx16/kernal.s | 136 +++++++++++-------- libsrc/cx16/mcbdefault.s | 50 ++++--- libsrc/cx16/mou/cx16-std.s | 64 ++++----- libsrc/cx16/mouse_stat_stddrv.s | 2 +- libsrc/cx16/set_tv.s | 6 +- libsrc/cx16/sysuname.s | 2 +- libsrc/cx16/tgi_stat_stddrv.s | 7 +- libsrc/cx16/tgi_stddrv.s | 5 +- libsrc/cx16/{vset.s => vaddr0.s} | 9 +- libsrc/cx16/vpeek.s | 8 +- libsrc/cx16/vpoke.s | 8 +- libsrc/cx16/waitvsync.s | 12 +- src/ca65/struct.c | 9 +- 31 files changed, 508 insertions(+), 271 deletions(-) create mode 100644 libsrc/cx16/clock.s rename libsrc/cx16/{vset.s => vaddr0.s} (60%) diff --git a/asminc/cbm_kernal.inc b/asminc/cbm_kernal.inc index a38836ceb..86a60d49b 100644 --- a/asminc/cbm_kernal.inc +++ b/asminc/cbm_kernal.inc @@ -6,9 +6,40 @@ .if .def(__CX16__) ; CX16 extended jump table - GETJOY := $FF06 - MOUSE := $FF09 - SCRMOD := $FF5F + FB_INIT := $FEF6 + FB_GET_INFO := $FEF9 + FB_SET_PALETTE := $FEFC + FB_CURSOR_POSITION := $FEFF + FB_CURSOR_NEXT_LINE := $FF02 + FB_GET_PIXEL := $FF05 + FB_GET_PIXELS := $FF08 + FB_SET_PIXEL := $FF0B + FB_SET_PIXELS := $FF0E + FB_SET_8_PIXELS := $FF11 + FB_SET_8_PIXELS_OPAQUE := $FF14 + FB_FILL_PIXELS := $FF17 + FB_FILTER_PIXELS := $FF1A + FB_MOVE_PIXELS := $FF1D + GRAPH_INIT := $FF20 + GRAPH_CLEAR := $FF23 + GRAPH_SET_WINDOW := $FF26 + GRAPH_SET_COLORS := $FF29 + GRAPH_DRAW_LINE := $FF2C + GRAPH_DRAW_RECT := $FF2F + GRAPH_MOVE_RECT := $FF32 + GRAPH_DRAW_OVAL := $FF35 + GRAPH_DRAW_IMAGE := $FF38 + GRAPH_SET_FONT := $FF3B + GRAPH_GET_CHAR_SIZE := $FF3E + GRAPH_PUT_CHAR := $FF41 + RESTORE_BASIC := $FF47 + CLOCK_SET_DATE_TIME := $FF4D + CLOCK_GET_DATE_TIME := $FF50 + JOYSTICK_SCAN := $FF53 + JOYSTICK_GET := $FF56 + SCRMOD := $FF5F + MOUSE_CONFIG := $FF68 + MOUSE_GET := $FF6B .endif .if .def(__C128__) @@ -21,6 +52,9 @@ .if .def(__C128__) || .def(__CX16__) ; Extended jump table CLSALL := $FF4A + LKUPLA := $FF59 + LKUPSA := $FF5C + PFKEY := $FF65 JSRFAR := $FF6E INDFET := $FF74 INDSTA := $FF77 diff --git a/asminc/cx16.inc b/asminc/cx16.inc index 1c22c99b1..e08215df9 100644 --- a/asminc/cx16.inc +++ b/asminc/cx16.inc @@ -1,5 +1,5 @@ ; -; CX16 definitions +; CX16 r35 definitions ; ; --------------------------------------------------------------------------- @@ -44,11 +44,128 @@ ; --------------------------------------------------------------------------- ; Zero page +; GEOS and graphics pseudo-registers +.struct gREG + .org $02 + .union + r0 .word + .struct + r0L .byte + r0H .byte + .endstruct + .endunion + .union + r1 .word + .struct + r1L .byte + r1H .byte + .endstruct + .endunion + .union + r2 .word + .struct + r2L .byte + r2H .byte + .endstruct + .endunion + .union + r3 .word + .struct + r3L .byte + r3H .byte + .endstruct + .endunion + .union + r4 .word + .struct + r4L .byte + r4H .byte + .endstruct + .endunion + .union + r5 .word + .struct + r5L .byte + r5H .byte + .endstruct + .endunion + .union + r6 .word + .struct + r6L .byte + r6H .byte + .endstruct + .endunion + .union + r7 .word + .struct + r7L .byte + r7H .byte + .endstruct + .endunion + .union + r8 .word + .struct + r8L .byte + r8H .byte + .endstruct + .endunion + .union + r9 .word + .struct + r9L .byte + r9H .byte + .endstruct + .endunion + .union + r10 .word + .struct + r10L .byte + r10H .byte + .endstruct + .endunion + .union + r11 .word + .struct + r11L .byte + r11H .byte + .endstruct + .endunion + .union + r12 .word + .struct + r12L .byte + r12H .byte + .endstruct + .endunion + .union + r13 .word + .struct + r13L .byte + r13H .byte + .endstruct + .endunion + .union + r14 .word + .struct + r14L .byte + r14H .byte + .endstruct + .endunion + .union + r15 .word + .struct + r15L .byte + r15H .byte + .endstruct + .endunion +.endstruct + ; Kernal FNAM := $84 ; Pointer to filename KTEMP2 := $86 ; 2 bytes for temporary storage -SCREEN_PTR := $88 ; Pointer to current row on text screen (16 bits) -IMPARM := $8A ; Pointer for PRIMM function +IMPARM := $88 ; Pointer for PRIMM function +SCREEN_PTR := $90 ; Pointer to current row on text screen (16 bits) ; BASIC TXTPTR := $EE ; Pointer into BASIC source code @@ -58,41 +175,27 @@ TXTPTR := $EE ; Pointer into BASIC source code BASIC_BUF := $0200 ; Location of command-line BASIC_BUF_LEN = 81 ; Maximum length of command-line -CURS_COLOR := $027E ; Color under the cursor -CHARCOLOR := $0286 ; Cursor's color nybbles (high: background, low: foreground) -STATUS := $0287 ; Status from previous I/O operation -IN_DEV := $028E ; Current input device number -OUT_DEV := $028F ; Current output device number -TIME := $0292 ; 60 Hz. clock (3 bytes, big-endian) -FNAM_LEN := $0298 ; Length of filename -SECADR := $029A ; Secondary address -DEVNUM := $029B ; Device number -KEY_COUNT := $029E ; Number of keys in input buffer -RVS := $029F ; Reverse flag -CURS_FLAG := $02A3 ; 1 = cursor off -CURS_BLINK := $02A4 ; Blink counter -CURS_CHAR := $02A5 ; Character under the cursor -CURS_STATE := $02A6 ; Cursor blink state -CURS_X := $02A8 ; Cursor column -CURS_Y := $02AB ; Cursor row -LLEN := $02AE ; Line length -NLINES := $02AF ; Number of screen lines -JOY1 := $02BC ; 3 bytes of NES/SNES gamepad data -JOY2 := $02BF +STATUS := $0275 ; Status from previous I/O operation +IN_DEV := $0279 ; Current input device number +OUT_DEV := $027A ; Current output device number +FNAM_LEN := $027D ; Length of filename +SECADR := $027F ; Secondary address +DEVNUM := $0280 ; Device number +CURS_COLOR := $0373 ; Color under the cursor +CHARCOLOR := $0377 ; Cursor's color nybbles (high: background, low: foreground) +RVS := $0378 ; Reverse flag +CURS_FLAG := $037C ; 1 = cursor off +CURS_BLINK := $037D ; Blink counter +CURS_CHAR := $037E ; Character under the cursor +CURS_STATE := $037F ; Cursor blink state +CURS_X := $0381 ; Cursor column +CURS_Y := $0384 ; Cursor row +LLEN := $0387 ; Line length +NLINES := $0388 ; Number of screen lines ; BASIC -VARTAB := $02DD ; Pointer to start of BASIC variables -MEMSIZE := $02E5 ; Pointer to highest BASIC RAM location (+1) - -; Kernal mouse -MSEPAR := $0371 ; mouse: $8x=sprite on, 1/2: scale -MOUSEL := $0372 ; min. x co-ordinate -MOUSER := $0374 ; max. x co-ordinate -MOUSET := $0376 ; min. y co-ordinate -MOUSEB := $0378 ; max. y co-ordinate -MOUSEX := $037A ; x co-ordinate -MOUSEY := $037C ; y co-ordinate -MOUSEBT := $037E ; buttons (bits 2: middle, 1: right, 0: left) +VARTAB := $03E3 ; Pointer to start of BASIC variables +MEMSIZE := $03EB ; Pointer to highest BASIC RAM location (+1) ; --------------------------------------------------------------------------- ; Vector and other locations @@ -141,8 +244,13 @@ NMIVec := $0318 SPR_COLLIDED = %00000100 UART_IRQ = %00001000 .endenum + ; Internal RAM and registers - VRAM := $000000 + + .struct + .org $000000 + VRAM .res $020000 ; 128 Kibibytes + .endstruct .scope COMPOSER ; Display composer .struct .org $0F0000 @@ -226,15 +334,29 @@ NMIVec := $0318 .scope SPRITE .struct .org $0F4000 - CTRL .byte ; Enables sprites + CTRL .byte ; Enables sprite engine COLLISION .byte .endstruct + .struct ATTRIB ; Sprite attributes + .org $0F5000 + ADDR .addr ; Address and color mode + XX .word + YY .word + Z_FLIP .byte + SIZE_PAL .byte + .endstruct .enum FLIP NONE = 0 HORIZ VERT BOTH .endenum + .enum DEPTH + DISABLE = 0 << 2 + CANVAS = 1 << 2 + LAYER0 = 2 << 2 + LAYER1 = 3 << 2 + .endenum .enum ; Sprite geometry WIDTH8 = 0 << 4 WIDTH16 = 1 << 4 @@ -247,13 +369,6 @@ NMIVec := $0318 COLORS16 = 0 << 7 COLORS256 = 1 << 7 .endenum - .enum DEPTH - DISABLE = 0 << 2 - CANVAS = 1 << 2 - LAYER0 = 2 << 2 - LAYER1 = 3 << 2 - .endenum - ATTRIB := $0F5000 ; Sprite attributes .endscope AUDIO := $0F6000 .scope SPI @@ -334,3 +449,15 @@ NMIVec := $0318 KEYMAP .byte ; Current keyboard layout number (Read-Only) DETECT .byte 2 ; If is "16" string, then running on emulator (RO) .endstruct + +; --------------------------------------------------------------------------- +; Banked RAM and ROM + +KEY_COUNT := $A00A ; (bank 0) Number of keys in input buffer +TIMER := $A03E ; (bank 0) 60 Hz. timer (3 bytes, big-endian) + +.struct BANK + .org $A000 + RAM .res $2000 ; 8 Kibibyte window into 512 Kibibytes or 2048 Kibibytes + ROM .res $4000 ; 16 Kibibyte window into 128 Kibibytes +.endstruct diff --git a/cfg/cx16-asm.cfg b/cfg/cx16-asm.cfg index 4228f6da5..3c24bd56f 100644 --- a/cfg/cx16-asm.cfg +++ b/cfg/cx16-asm.cfg @@ -6,7 +6,7 @@ SYMBOLS { __HIMEM__: type = weak, value = $9F00; } MEMORY { - ZP: file = "", start = $0002, size = $0080 - $0002, define = yes; + ZP: file = "", start = $0022, size = $0080 - $0022, define = yes; LOADADDR: file = %O, start = %S - 2, size = $0002; MAIN: file = %O, start = %S, size = __HIMEM__ - %S; } diff --git a/cfg/cx16-bank.cfg b/cfg/cx16-bank.cfg index ff5dded3d..1f998f188 100644 --- a/cfg/cx16-bank.cfg +++ b/cfg/cx16-bank.cfg @@ -11,13 +11,13 @@ SYMBOLS { __BANKRAMSIZE__: type = weak, value = $2000; # 8K banked RAM } MEMORY { - ZP: file = "", define = yes, start = $0002, size = $0080 - $0002; + ZP: file = "", define = yes, start = $0022, size = $0080 - $0022; LOADADDR: file = %O, start = %S - 2, size = $0002; HEADER: file = %O, define = yes, start = %S, size = $000D; MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __ONCE_RUN__ - __STACKSIZE__; - BRAM00ADDR: file = "%O.00", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM00: file = "%O.00", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; +# BRAM00ADDR: file = "%O.00", start = __BANKRAMSTART__ - 2, size = $0002; +# BRAM00: file = "%O.00", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; BRAM01ADDR: file = "%O.01", start = __BANKRAMSTART__ - 2, size = $0002; BRAM01: file = "%O.01", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; BRAM02ADDR: file = "%O.02", start = __BANKRAMSTART__ - 2, size = $0002; @@ -62,8 +62,8 @@ SEGMENTS { INIT: load = MAIN, type = rw; ONCE: load = MAIN, type = ro, define = yes; BSS: load = BSS, type = bss, define = yes; - BRAM00ADDR: load = BRAM00ADDR, type = ro, optional = yes; - BANKRAM00: load = BRAM00, type = rw, define = yes, optional = yes; +# BRAM00ADDR: load = BRAM00ADDR, type = ro, optional = yes; +# BANKRAM00: load = BRAM00, type = rw, define = yes, optional = yes; BRAM01ADDR: load = BRAM01ADDR, type = ro, optional = yes; BANKRAM01: load = BRAM01, type = rw, define = yes, optional = yes; BRAM02ADDR: load = BRAM02ADDR, type = ro, optional = yes; diff --git a/cfg/cx16.cfg b/cfg/cx16.cfg index c72f6c35d..72fc2fe91 100644 --- a/cfg/cx16.cfg +++ b/cfg/cx16.cfg @@ -8,7 +8,7 @@ SYMBOLS { __HIMEM__: type = weak, value = $9F00; } MEMORY { - ZP: file = "", define = yes, start = $0002, size = $0080 - $0002; + ZP: file = "", define = yes, start = $0022, size = $0080 - $0022; LOADADDR: file = %O, start = %S - 2, size = $0002; HEADER: file = %O, define = yes, start = %S, size = $000D; MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__; diff --git a/doc/cx16.sgml b/doc/cx16.sgml index 2136265bc..ca9a50ed6 100644 --- a/doc/cx16.sgml +++ b/doc/cx16.sgml @@ -62,7 +62,7 @@ Special locations: <tag/Bank RAM/ Bank RAM is located at $A000 - $BFFF. It's an eight-Kibibyte - window into a half Mibibyte or two Mibibytes of banked RAM. + window into a half Mebibyte or two Mebibytes of banked RAM. <tag/Bank ROM/ Bank ROM is located at $C000 - $FFFF. It's a sixteen-Kibibyte @@ -229,8 +229,9 @@ point to <tt/cX16-std.joy (cx16_std_joy)/. <descrip> <tag><tt/cX16-std.joy (cX16_std_joy)/</tag> Supports up to two NES (and SNES) controllers connected to the joystick ports - of the CX16. It reads the four directions, and the A, B, Select, and Start - buttons. Buttons A and B are the primary and secondary fire buttons. + of the CX16. It reads the four directions, and the <bf/A/, <bf/B/, + <bf/Select/, and <bf/Start/ buttons. Buttons <bf/A/ and <bf/B/ are + the first and second fire buttons. </descrip><p> @@ -243,6 +244,9 @@ point to <tt/cX16-std.mou (cx16_std_mou)/. <tag><tt/cX16-std.mou (cX16_std_mou)/</tag> Supports a standard 3-button mouse connected to the PS/2 mouse port of the Commander X16. + + Currently (r35), this driver doesn't support <tt/mouse_move()/ + and <tt/mouse_setbox()/. </descrip><p> diff --git a/include/cbm.h b/include/cbm.h index 96eb675cd..56b5b2947 100644 --- a/include/cbm.h +++ b/include/cbm.h @@ -168,7 +168,7 @@ unsigned char __fastcall__ kbrepeat (unsigned char mode); #if !defined(__CBM610__) && !defined(__PET__) void waitvsync (void); -/* Wait for the start of the next frame */ +/* Wait for the start of the next video field. */ #endif /*****************************************************************************/ diff --git a/include/cx16.h b/include/cx16.h index d7ed15d2a..c6638cef4 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -44,7 +44,19 @@ +/* Additional output character codes */ +#define CH_COLOR_SWAP 0x01 +#define CH_UNDERLINE 0x04 +#define CH_BOLD 0x06 +#define CH_BACKSPACE 0x08 +#define CH_ITALIC 0x0B +#define CH_OUTLINE 0x0C +#define CH_FONT_ISO 0x0F +#define CH_FONT_PET 0x8F + /* Additional key defines */ +#define CH_SHIFT_TAB 0x18 +#define CH_HELP 0x84 #define CH_F1 0x85 #define CH_F2 0x89 #define CH_F3 0x86 @@ -163,7 +175,7 @@ struct __emul { }; #define EMULATOR (*(volatile struct __emul)0x9FB0) -/* An array window into the half Mibibyte or two Mibibytes of banked RAM */ +/* An array window into the half Mebibyte or two Mebibytes of banked RAM */ #define BANK_RAM ((unsigned char[0x2000])0xA000) diff --git a/libsrc/cbm/clock.s b/libsrc/cbm/clock.s index b5fa6e89b..90e4263a8 100644 --- a/libsrc/cbm/clock.s +++ b/libsrc/cbm/clock.s @@ -1,19 +1,28 @@ ; -; Ullrich von Bassewitz, 21.09.1998 +; 1998-09-21, Ullrich von Bassewitz +; 2019-12-25, Greg King ; ; clock_t clock (void); ; - .include "cbm.inc" - .export _clock .importzp sreg + .include "cbm.inc" + .macpack cpu + .proc _clock - lda #0 ; Byte 3 is always zero - sta sreg+1 +; Some accelerator adaptors have CMOS ICs. + +.if (.cpu & ::CPU_ISET_65SC02) + stz sreg + 1 +.else + lda #$00 ; Byte 3 always is zero + sta sreg + 1 +.endif + jsr RDTIM sty sreg rts diff --git a/libsrc/cx16/_scrsize.s b/libsrc/cx16/_scrsize.s index f240b1e52..6b848078c 100644 --- a/libsrc/cx16/_scrsize.s +++ b/libsrc/cx16/_scrsize.s @@ -1,10 +1,6 @@ ; -; Ullrich von Bassewitz, 26.10.2000 -; ; Screen size variables ; - .export screensize .import SCREEN - -screensize := SCREEN + .export screensize := SCREEN diff --git a/libsrc/cx16/bankramaddr.s b/libsrc/cx16/bankramaddr.s index 53d96e916..7736f8692 100644 --- a/libsrc/cx16/bankramaddr.s +++ b/libsrc/cx16/bankramaddr.s @@ -1,7 +1,7 @@ ; -; 2019-09-16, Greg King +; 2019-12-21, Greg King ; -; This module supplies the load addresses that are expected +; This module supplies some load addresses that are expected ; by a Commander X16 in the first two bytes of banked RAM load files. ; @@ -9,9 +9,11 @@ ; this module to get included into the output files. .export __BANKRAMADDR__: abs = 1 +.if 0 ; bank 0 is used by Kernal .segment "BRAM00ADDR" .addr *+2 +.endif .segment "BRAM01ADDR" diff --git a/libsrc/cx16/cgetc.s b/libsrc/cx16/cgetc.s index 2c5ea76d1..2372b431a 100644 --- a/libsrc/cx16/cgetc.s +++ b/libsrc/cx16/cgetc.s @@ -1,5 +1,5 @@ ; -; 2019-10-01, Greg King +; 2019-12-22, Greg King ; ; char cgetc (void); ; /* Return a character from the keyboard. */ @@ -7,13 +7,13 @@ .export _cgetc - .import cursor, GETIN + .import _kbhit, cursor, GETIN .include "cx16.inc" .macpack generic -_cgetc: ldx KEY_COUNT ; Get number of characters +_cgetc: jsr _kbhit bnz L3 ; Jump if there are already chars waiting ; Switch the cursor on if wanted. @@ -22,7 +22,7 @@ _cgetc: ldx KEY_COUNT ; Get number of characters tay lda cursor jsr setcursor -L1: lda KEY_COUNT +L1: jsr _kbhit bze L1 ; Wait for key tya eor #%00000001 ; (Cursor flag uses negative logic) diff --git a/libsrc/cx16/clock.s b/libsrc/cx16/clock.s new file mode 100644 index 000000000..9af215e0f --- /dev/null +++ b/libsrc/cx16/clock.s @@ -0,0 +1,36 @@ +; +; 1998-09-21, Ullrich von Bassewitz +; 2019-12-25, Greg King +; +; clock_t clock (void); +; + + .constructor initclock + .export _clock + + .import SETTIM, RDTIM + .importzp sreg + + +; clock() counts the amount of time that the process has run. +; Therefore, reset it when the program begins. + +.proc initclock + + lda #$00 + tax + tay + jmp SETTIM + +.endproc + + + +.proc _clock + + stz sreg + 1 ; Byte 3 always is zero + jsr RDTIM + sty sreg + rts + +.endproc diff --git a/libsrc/cx16/crt0.s b/libsrc/cx16/crt0.s index bfb4de10d..52deeb76f 100644 --- a/libsrc/cx16/crt0.s +++ b/libsrc/cx16/crt0.s @@ -1,5 +1,5 @@ ; -; Start-up code for cc65 (CX16 version) +; Start-up code for cc65 (CX16 r35 version) ; .export _exit @@ -46,7 +46,7 @@ _exit: jsr donelib -.if 0 ; We no longer need to preserve zero-page space for cc65's variables. +.if 0 ; We don't need to preserve zero-page space for cc65's variables. ; Copy back the zero-page stuff. ldx #zpspace-1 @@ -83,14 +83,14 @@ init: and #<~$07 sta VIA1::PRB -; Change to the first RAM bank. +; Change to the second RAM bank. lda VIA1::PRA2 sta ramsave ; Save the current RAM bank number - lda #$00 ; Choose RAM bank zero + lda #$01 sta VIA1::PRA2 -.if 0 ; We no longer need to preserve zero-page space for cc65's variables. +.if 0 ; We don't need to preserve zero-page space for cc65's variables. ; Save the zero-page locations that we need. ldx #zpspace-1 @@ -107,7 +107,7 @@ L1: lda sp,x sta sp stx sp+1 ; Set argument stack ptr -; Switch to the second charset. +; Switch to the lower/UPPER PetSCII charset. lda #$0E jsr CHROUT diff --git a/libsrc/cx16/get_tv.s b/libsrc/cx16/get_tv.s index 79a577dff..291a32cde 100644 --- a/libsrc/cx16/get_tv.s +++ b/libsrc/cx16/get_tv.s @@ -1,5 +1,5 @@ ; -; 2019-09-20, Greg King +; 2019-12-22, Greg King ; ; unsigned char get_tv (void); ; /* Return the video mode the machine is using. */ @@ -11,9 +11,6 @@ .proc _get_tv - php - sei ; Don't let interrupts interfere - ; Point to the video output register. stz VERA::CTRL ; Use port 0 @@ -25,7 +22,6 @@ sty VERA::ADDR+2 lda VERA::DATA0 - plp ; Re-enable interrupts and #$07 ; Get the type of output signal rts .endproc diff --git a/libsrc/cx16/joy/cx16-std.s b/libsrc/cx16/joy/cx16-std.s index b41c6606c..5c10c0592 100644 --- a/libsrc/cx16/joy/cx16-std.s +++ b/libsrc/cx16/joy/cx16-std.s @@ -1,8 +1,8 @@ ; ; Standard joystick driver for the CX16. -; May be installed multiple times when statically linked to the application. +; May be installed multiple times when statically linked to an application. ; -; 2019-11-15 Greg King +; 2019-12-24, Greg King ; .include "joy-kernel.inc" @@ -14,6 +14,8 @@ .macpack generic .macpack module + .importzp tmp1 + ; ------------------------------------------------------------------------ ; Header. Includes jump table @@ -75,51 +77,21 @@ COUNT: lda #<JOY_COUNT ; ------------------------------------------------------------------------ ; READ: Read a particular joystick passed in .A . -READ: php - bit #JOY_COUNT - $01 - sei - bnz pad2 +READ: and #%00000001 + jsr JOYSTICK_GET + sta tmp1 + txa + bit #%00001110 ; Is it NES or SNES controller? + bze nes -; Read game pad 1 - -pad1: ldy JOY1 ; Allow JOY1 to be reread between interrupts - sty JOY1 + 2 - - lda JOY1 + 1 - bit #%00001110 - bze nes1 - - asl JOY1 + 2 ; Get SNES's B button + asl tmp1 ; Get SNES's B button ror a ; Put it next to the A button - asl JOY1 + 2 ; Drop SNES's Y button + asl tmp1 ; Drop SNES's Y button asl a ; Get back the B button - ror JOY1 + 2 + ror tmp1 asl a ; Get SNES's A button - ror JOY1 + 2 ; Make byte look like NES pad + ror tmp1 ; Make byte look like NES pad -nes1: lda JOY1 + 2 - plp - eor #%11111111 ; (The controllers use negative logic) - rts - -; Read game pad 2 - -pad2: ldy JOY2 - sty JOY2 + 2 - - lda JOY2 + 1 - bit #%00001110 - bze nes2 - - asl JOY2 + 2 - ror a - asl JOY2 + 2 - asl a - ror JOY2 + 2 - asl a - ror JOY2 + 2 - -nes2: lda JOY2 + 2 - plp - eor #%11111111 +nes: lda tmp1 ; The controllers give zeroes for "pressed" + eor #%11111111 ; We want ones for "pressed" rts diff --git a/libsrc/cx16/joyref.s b/libsrc/cx16/joyref.s index fb21918c4..edd89fba6 100644 --- a/libsrc/cx16/joyref.s +++ b/libsrc/cx16/joyref.s @@ -1,5 +1,5 @@ ; -; 2019-11-14, Greg King +; 2019-12-22, Greg King ; ; Link an interrupt handler if joysticks are used by a program. ; @@ -14,7 +14,7 @@ joy_libref: lda VERA::IRQ_FLAGS lsr a bcc not_vsync - jsr GETJOY ; Bit-bang game controllers + jsr JOYSTICK_SCAN ; Bit-bang game controllers clc ; Let other Jiffy handlers run not_vsync: rts diff --git a/libsrc/cx16/kbhit.s b/libsrc/cx16/kbhit.s index a73533e20..34afdeba4 100644 --- a/libsrc/cx16/kbhit.s +++ b/libsrc/cx16/kbhit.s @@ -1,5 +1,5 @@ ; -; 2019-11-06, Greg King +; 2019-12-22, Greg King ; ; unsigned char kbhit (void); ; /* Returns non-zero (true) if a typed character is waiting. */ @@ -11,7 +11,10 @@ .proc _kbhit + ldy VIA1::PRA2 ; (KEY_COUNT is in RAM bank 0) + stz VIA1::PRA2 lda KEY_COUNT ; Get number of characters + sty VIA1::PRA2 tax ; High byte of return (only its zero/nonzero ... - rts ; ... state matters) + rts ; ... state matters) .endproc diff --git a/libsrc/cx16/kernal.s b/libsrc/cx16/kernal.s index 97443c824..ccd52d632 100644 --- a/libsrc/cx16/kernal.s +++ b/libsrc/cx16/kernal.s @@ -1,60 +1,94 @@ ; -; 2019-11-05, Greg King +; 2019-12-22, Greg King ; ; CX16 Kernal functions ; .include "cbm_kernal.inc" - .export GETJOY - .export MOUSE - .export SCRMOD + .export FB_INIT + .export FB_GET_INFO + .export FB_SET_PALETTE + .export FB_CURSOR_POSITION + .export FB_CURSOR_NEXT_LINE + .export FB_GET_PIXEL + .export FB_GET_PIXELS + .export FB_SET_PIXEL + .export FB_SET_PIXELS + .export FB_SET_8_PIXELS + .export FB_SET_8_PIXELS_OPAQUE + .export FB_FILL_PIXELS + .export FB_FILTER_PIXELS + .export FB_MOVE_PIXELS + .export GRAPH_INIT + .export GRAPH_CLEAR + .export GRAPH_SET_WINDOW + .export GRAPH_SET_COLORS + .export GRAPH_DRAW_LINE + .export GRAPH_DRAW_RECT + .export GRAPH_MOVE_RECT + .export GRAPH_DRAW_OVAL + .export GRAPH_DRAW_IMAGE + .export GRAPH_SET_FONT + .export GRAPH_GET_CHAR_SIZE + .export GRAPH_PUT_CHAR + .export RESTORE_BASIC + .export CLOCK_SET_DATE_TIME + .export CLOCK_GET_DATE_TIME + .export JOYSTICK_SCAN + .export JOYSTICK_GET + .export SCRMOD + .export MOUSE_CONFIG + .export MOUSE_GET - .export CLSALL - .export JSRFAR - .export INDFET - .export INDSTA - .export INDCMP - .export PRIMM + .export CLSALL + .export LKUPLA + .export LKUPSA + .export PFKEY + .export JSRFAR + .export INDFET + .export INDSTA + .export INDCMP + .export PRIMM - .export CINT - .export IOINIT - .export RAMTAS - .export RESTOR - .export VECTOR - .export SETMSG - .export SECOND - .export TKSA - .export MEMTOP - .export MEMBOT - .export SCNKEY - .export SETTMO - .export ACPTR - .export CIOUT - .export UNTLK - .export UNLSN - .export LISTEN - .export TALK - .export READST - .export SETLFS - .export SETNAM - .export OPEN - .export CLOSE - .export CHKIN - .export CKOUT - .export CLRCH - .export BASIN - .export CHRIN - .export BSOUT - .export CHROUT - .export LOAD - .export SAVE - .export SETTIM - .export RDTIM - .export STOP - .export GETIN - .export CLALL - .export UDTIM - .export SCREEN - .export PLOT - .export IOBASE + .export CINT + .export IOINIT + .export RAMTAS + .export RESTOR + .export VECTOR + .export SETMSG + .export SECOND + .export TKSA + .export MEMTOP + .export MEMBOT + .export SCNKEY + .export SETTMO + .export ACPTR + .export CIOUT + .export UNTLK + .export UNLSN + .export LISTEN + .export TALK + .export READST + .export SETLFS + .export SETNAM + .export OPEN + .export CLOSE + .export CHKIN + .export CKOUT + .export CLRCH + .export BASIN + .export CHRIN + .export BSOUT + .export CHROUT + .export LOAD + .export SAVE + .export SETTIM + .export RDTIM + .export STOP + .export GETIN + .export CLALL + .export UDTIM + .export SCREEN + .export PLOT + .export IOBASE diff --git a/libsrc/cx16/mcbdefault.s b/libsrc/cx16/mcbdefault.s index d817b9ae6..3dda1c711 100644 --- a/libsrc/cx16/mcbdefault.s +++ b/libsrc/cx16/mcbdefault.s @@ -1,53 +1,63 @@ ; ; Default mouse callbacks for the CX16 ; -; 2019-11-09, Greg King +; 2019-12-25, Greg King ; -; All functions in this module should be interrupt safe +; All functions in this module should be interrupt-safe ; because they might be called from an interrupt handler. ; .export _mouse_def_callbacks - .include "cbm_kernal.inc" .include "cx16.inc" -; -------------------------------------------------------------------------- -; Hide the mouse pointer. Always called with interrupts disabled. -.code - -hide: ldx #$00 ; Don't change sprite's scale - lda #$00 ; Disable sprite - jmp MOUSE +msprite: + stz VERA::CTRL ; set address for VERA's data port zero + lda #<(VERA::SPRITE::ATTRIB::Z_FLIP + 0 * 8) + ldx #>(VERA::SPRITE::ATTRIB::Z_FLIP + 0 * 8) + ldy #^(VERA::SPRITE::ATTRIB::Z_FLIP + 0 * 8) | VERA::INC0 + sta VERA::ADDR + stx VERA::ADDR+1 + sty VERA::ADDR+2 + rts ; -------------------------------------------------------------------------- -; Show the mouse pointer. Always called with interrupts disabled. +; Hide the mouse pointer. -show: ldx #$00 - lda #<-$01 ; Enable sprite - jmp MOUSE +hide: jsr msprite + lda VERA::DATA0 + and #<~VERA::SPRITE::DEPTH::LAYER1 + sta VERA::DATA0 + rts ; -------------------------------------------------------------------------- -; Prepare to move the mouse pointer. Always called with interrupts disabled. +; Show the mouse pointer. + +show: jsr msprite + lda VERA::DATA0 + ora #VERA::SPRITE::DEPTH::LAYER1 + sta VERA::DATA0 + rts + +; -------------------------------------------------------------------------- +; Prepare to move the mouse pointer. prep: ; Fall through ; -------------------------------------------------------------------------- -; Draw the mouse pointer. Always called with interrupts disabled. +; Draw the mouse pointer. draw: ; Fall through ; -------------------------------------------------------------------------- -; Move the mouse pointer X position to the value in .XA . Always called with -; interrupts disabled. +; Move the mouse pointer X position to the value in .XA . movex: ; Already set by drivers ; Fall through ; -------------------------------------------------------------------------- -; Move the mouse pointer Y position to the value in .XA . Always called with -; interrupts disabled. +; Move the mouse pointer Y position to the value in .XA . movey: rts ; Already set by drivers diff --git a/libsrc/cx16/mou/cx16-std.s b/libsrc/cx16/mou/cx16-std.s index eb3f83167..0d046bbc2 100644 --- a/libsrc/cx16/mou/cx16-std.s +++ b/libsrc/cx16/mou/cx16-std.s @@ -1,7 +1,7 @@ ; ; Driver for the Commander X16 Kernal's mouse driver. ; -; 2019-11-16, Greg King +; 2019-12-25, Greg King ; .include "zeropage.inc" @@ -66,18 +66,16 @@ SCREEN_HEIGHT = 480 - 1 ;---------------------------------------------------------------------------- ; Global variables. +XPos := ptr3 ; Current mouse position, X +YPos := ptr4 ; Current mouse position, Y + .bss -XPos := MOUSEX ; Current mouse position, X -YPos := MOUSEY ; Current mouse position, Y - -XMin := MOUSEL ; X1 value of bounding box -XMax := MOUSER ; X2 value of bounding box -YMin := MOUSET ; Y1 value of bounding box -YMax := MOUSEB ; Y2 value of bounding box -Box := XMin - -Buttons := MOUSEBT ; button status bits +Box: +XMin: .res 2 ; X1 value of bounding box +XMax: .res 2 ; X2 value of bounding box +YMin: .res 2 ; Y1 value of bounding box +YMax: .res 2 ; Y2 value of bounding box .rodata @@ -121,22 +119,22 @@ INSTALL: bpl @L1 ldx #$00 ; Don't change sprite's scale - lda #$01 ; Initiate and show sprite - jsr MOUSE + lda #$01 ; Create sprite + jsr MOUSE_CONFIG ; Be sure the mouse cursor is invisible, and at the default location. We ; need to do that here, because the mouse interrupt handler might not set ; the mouse position if it hasn't changed. - sei jsr CHIDE +.if 0 lda XPos ldx XPos+1 jsr CMOVEX lda YPos ldx YPos+1 jsr CMOVEY - cli +.endif ; Done, return zero @@ -148,7 +146,10 @@ INSTALL: ; UNINSTALL routine -- is called before the driver is removed from memory. ; No return code required (the driver is removed from memory on return). -UNINSTALL := HIDE ; Hide cursor on exit +UNINSTALL: ; Disable mouse on exit + lda #$00 + tax + jmp MOUSE_CONFIG ;---------------------------------------------------------------------------- ; HIDE routine -- is called to hide the mouse pointer. The mouse kernel manages @@ -181,6 +182,7 @@ SETBOX: sta ptr1 lda (ptr1) ldy #$01 + php sei sta XMin lda (ptr1),y @@ -191,10 +193,12 @@ SETBOX: sta ptr1 iny lda (ptr1),y sta YMax - cli + plp rts +;; Note: SETBOX and GETBOX currently have no effect! + ;---------------------------------------------------------------------------- ; GETBOX: Return the mouse bounding box. The parameters are passed as they ; come from the C program, that is, a pointer to a mouse_box struct in .XA . @@ -222,7 +226,10 @@ GETBOX: sta ptr1 ; No checks are done to see if the new position is valid (within ; the bounding box or the screen). No return code required. -MOVE: sei ; No interrupts +;; Note: This function currently has no effect! + +MOVE: php + sei ; No interrupts sta YPos stx YPos+1 ; New Y position @@ -237,14 +244,16 @@ MOVE: sei ; No interrupts sta XPos ; New X position jsr CMOVEX ; Move the cursor - cli ; Allow interrupts + plp ; Allow interrupts rts ;---------------------------------------------------------------------------- ; BUTTONS: Return the CBM 1351 button mask in .XA . BUTTONS: - lda Buttons + ldx #XPos + jsr MOUSE_GET + and #%00000111 tax lda ButtMask,x @@ -255,9 +264,9 @@ BUTTONS: ; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1. ; No return code required. -POS: ldy #MOUSE_POS::XCOORD ; Structure offset +POS: jsr BUTTONS - sei ; Disable interrupts +POS1: ldy #MOUSE_POS::XCOORD ; Structure offset lda XPos ; Transfer the position sta (ptr1),y lda XPos+1 @@ -267,8 +276,6 @@ POS: ldy #MOUSE_POS::XCOORD ; Structure offset iny sta (ptr1),y lda YPos+1 - cli ; Enable interrupts - iny sta (ptr1),y ; Store last byte rts ; Done @@ -282,20 +289,15 @@ POS: ldy #MOUSE_POS::XCOORD ; Structure offset ; call mouse_pos to initialize the struct pointer, and fill the position ; fields. -INFO: jsr POS - -; Fill in the button state - - jsr BUTTONS ; Will not touch ptr1 +INFO: jsr BUTTONS ; Will not touch ptr1 ldy #MOUSE_INFO::BUTTONS sta (ptr1),y - rts + jmp POS1 ;---------------------------------------------------------------------------- ; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl ; specific data in ptr1, and the ioctl code in A. ; Must return an error code in .XA . -; IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioctls, for now ldx #>MOUSE_ERR_INV_IOCTL diff --git a/libsrc/cx16/mouse_stat_stddrv.s b/libsrc/cx16/mouse_stat_stddrv.s index 1ff8ad43b..8e0a3ed53 100644 --- a/libsrc/cx16/mouse_stat_stddrv.s +++ b/libsrc/cx16/mouse_stat_stddrv.s @@ -1,7 +1,7 @@ ; ; Address of the static standard mouse driver ; -; 2019-11-08,Greg King +; 2019-11-08, Greg King ; ; const void mouse_static_stddrv[]; ; diff --git a/libsrc/cx16/set_tv.s b/libsrc/cx16/set_tv.s index 8b802f324..c23568c67 100644 --- a/libsrc/cx16/set_tv.s +++ b/libsrc/cx16/set_tv.s @@ -1,5 +1,5 @@ ; -; 2019-11-06, Greg King +; 2019-12-22, Greg King ; ; void __fastcall__ set_tv (unsigned char); ; /* Set the video mode the machine will use. */ @@ -11,9 +11,6 @@ .proc _set_tv - php - sei ; Don't let interrupts interfere - ; Point to the video output register. stz VERA::CTRL ; Use port 0 @@ -25,6 +22,5 @@ stx VERA::ADDR+2 sta VERA::DATA0 - plp ; Re-enable interrupts rts .endproc diff --git a/libsrc/cx16/sysuname.s b/libsrc/cx16/sysuname.s index f8500936b..4aefb7cf5 100644 --- a/libsrc/cx16/sysuname.s +++ b/libsrc/cx16/sysuname.s @@ -9,7 +9,7 @@ .import utscopy -__sysuname := utscopy +__sysuname := utscopy ;-------------------------------------------------------------------------- ; Data. We define a fixed utsname struct here, and just copy it. diff --git a/libsrc/cx16/tgi_stat_stddrv.s b/libsrc/cx16/tgi_stat_stddrv.s index 566a36393..e501f4c2f 100644 --- a/libsrc/cx16/tgi_stat_stddrv.s +++ b/libsrc/cx16/tgi_stat_stddrv.s @@ -1,11 +1,10 @@ ; ; Address of the static standard TGI driver ; -; 2019-11-06, Greg King +; 2019-12-22, Greg King ; ; const void tgi_static_stddrv[]; ; - .import _cx16_640x4c_tgi - - .export _tgi_static_stddrv := _cx16_640x4c_tgi + .import _cx16_320x8b_tgi + .export _tgi_static_stddrv := _cx16_320x8b_tgi diff --git a/libsrc/cx16/tgi_stddrv.s b/libsrc/cx16/tgi_stddrv.s index 0f77e7340..0e46a6cb3 100644 --- a/libsrc/cx16/tgi_stddrv.s +++ b/libsrc/cx16/tgi_stddrv.s @@ -1,7 +1,7 @@ ; ; Name of the standard TGI driver ; -; 2019-11-06, Greg King +; 2019-12-22, Greg King ; ; const char tgi_stddrv[]; ; @@ -9,5 +9,4 @@ .export _tgi_stddrv .rodata - -_tgi_stddrv: .asciiz "cx16-640x4c.tgi" +_tgi_stddrv: .asciiz "cx16-320x8b.tgi" diff --git a/libsrc/cx16/vset.s b/libsrc/cx16/vaddr0.s similarity index 60% rename from libsrc/cx16/vset.s rename to libsrc/cx16/vaddr0.s index 9178850ea..384bf3503 100644 --- a/libsrc/cx16/vset.s +++ b/libsrc/cx16/vaddr0.s @@ -1,19 +1,18 @@ ; -; 2019-10-22, Greg King +; 2019-12-22, Greg King ; ; Set the __far__ address that VERA will use for data access. ; This is a support function for the fastcall functions vpeek() and vpoke(). ; - .export vset + .export vaddr0 .importzp sreg .include "cx16.inc" -vset: ldy sreg - sei ; don't let interrupt handlers interfere - stz VERA::CTRL ; set address for VERA's data port zero +vaddr0: stz VERA::CTRL ; set address for VERA's data port zero + ldy sreg sta VERA::ADDR stx VERA::ADDR+1 sty VERA::ADDR+2 diff --git a/libsrc/cx16/vpeek.s b/libsrc/cx16/vpeek.s index 0c1a94651..80d4d536f 100644 --- a/libsrc/cx16/vpeek.s +++ b/libsrc/cx16/vpeek.s @@ -1,5 +1,5 @@ ; -; 2019-10-22, Greg King +; 2019-12-22, Greg King ; ; unsigned char fastcall vpeek (unsigned long addr); ; /* Get a byte from a location in VERA's internal address space. */ @@ -7,13 +7,11 @@ .export _vpeek - .import vset + .import vaddr0 .include "cx16.inc" -_vpeek: php ; (vset blocks interrupts) - jsr vset ; put VERA's address +_vpeek: jsr vaddr0 ; put VERA's address ldx #>$0000 lda VERA::DATA0 ; read VERA port zero - plp rts diff --git a/libsrc/cx16/vpoke.s b/libsrc/cx16/vpoke.s index 8c21e9b21..2c8497a5b 100644 --- a/libsrc/cx16/vpoke.s +++ b/libsrc/cx16/vpoke.s @@ -1,5 +1,5 @@ ; -; 2019-10-22, Greg King +; 2019-12-22, Greg King ; ; void fastcall vpoke (unsigned char data, unsigned long addr); ; /* Put a byte into a location in VERA's internal address space. @@ -9,13 +9,11 @@ .export _vpoke - .import vset, popa + .import vaddr0, popa .include "cx16.inc" -_vpoke: php ; (vset blocks interrupts) - jsr vset ; put VERA's address +_vpoke: jsr vaddr0 ; put VERA's address jsr popa sta VERA::DATA0 ; write data to VERA port zero - plp rts diff --git a/libsrc/cx16/waitvsync.s b/libsrc/cx16/waitvsync.s index 09d01c6a1..e8176916b 100644 --- a/libsrc/cx16/waitvsync.s +++ b/libsrc/cx16/waitvsync.s @@ -1,9 +1,10 @@ ; -; 2019-09-26, Greg King +; 2019-12-23, Greg King ; ; void waitvsync (void); +; /* Wait for the start of the next video field. */ ; -; VERA's vertical sync causes IRQs which increment the jiffy clock. +; VERA's vertical sync causes IRQs which increment the jiffy timer. ; .export _waitvsync @@ -11,7 +12,10 @@ .include "cx16.inc" _waitvsync: - lda TIME + 2 -: cmp TIME + 2 + ldx VIA1::PRA2 ; (TIMER is in RAM bank 0) + stz VIA1::PRA2 + lda TIMER + 2 +: cmp TIMER + 2 beq :- ; Wait for next jiffy + stx VIA1::PRA2 rts diff --git a/src/ca65/struct.c b/src/ca65/struct.c index 6d279a701..ecbaa2a71 100644 --- a/src/ca65/struct.c +++ b/src/ca65/struct.c @@ -87,6 +87,7 @@ static long Member (long AllocSize) /* Check the size for a reasonable value */ if (AllocSize >= 0x1000000) { ErrorSkip ("Range error"); + AllocSize = 1; } /* Return the size */ @@ -193,7 +194,13 @@ static long DoStructInternal (long Offs, unsigned Type) if (CurTok.Tok == TOK_SEP) { ErrorSkip ("Address is missing"); } else { - Offs = Member (1); + Offs = ConstExpression (); + + /* Check the address for a reasonable value */ + if (Offs >= 0x1000000) { + ErrorSkip ("Range error"); + Offs = 0; + } } break; From f067c4530fb385137a7458011b082690ac1c705e Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Wed, 25 Dec 2019 14:53:32 -0500 Subject: [PATCH 0054/2710] Made the program-chaining exec() handle the X16 emulator's file-system. --- libsrc/cx16/exec.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/libsrc/cx16/exec.c b/libsrc/cx16/exec.c index 90af4e406..17a547e68 100644 --- a/libsrc/cx16/exec.c +++ b/libsrc/cx16/exec.c @@ -1,7 +1,7 @@ /* ** Program-chaining function for Commodore platforms. ** -** 2019-11-08, Greg King +** 2019-12-25, Greg King ** ** This function exploits the program-chaining feature in Commander X16 BASIC's ROM. ** @@ -82,12 +82,15 @@ int __fastcall__ exec (const char* progname, const char* cmdline) } utoa (dv, basic.unit, 10); - /* Don't try to run a program that doesn't exist. */ - fd = open (progname, O_RDONLY); - if (fd < 0) { - return _mappederrno (4); /* file not found */ + /* The emulator supports only loading and saving on its file-system. */ + if (dv != 1) { + /* Don't try to run a program that doesn't exist. */ + fd = open (progname, O_RDONLY); + if (fd < 0) { + return _mappederrno (4); /* file not found */ + } + close (fd); } - close (fd); n = 0; do { From b56ba8f073c186339572b091033e1ebcd88191df Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 27 Dec 2019 18:07:37 -0500 Subject: [PATCH 0055/2710] Added real-time clock functions to the cx16 library. --- libsrc/cx16/getres.s | 36 +++++++++++++++++++ libsrc/cx16/gettime.s | 56 +++++++++++++++++++++++++++++ libsrc/cx16/settime.s | 55 +++++++++++++++++++++++++++++ libsrc/cx16/status.s | 16 --------- libsrc/cx16/tmcommon.s | 40 +++++++++++++++++++++ testcode/lib/clock-test.c | 74 ++++++++++++++++++++++----------------- 6 files changed, 229 insertions(+), 48 deletions(-) create mode 100644 libsrc/cx16/getres.s create mode 100644 libsrc/cx16/gettime.s create mode 100644 libsrc/cx16/settime.s delete mode 100644 libsrc/cx16/status.s create mode 100644 libsrc/cx16/tmcommon.s diff --git a/libsrc/cx16/getres.s b/libsrc/cx16/getres.s new file mode 100644 index 000000000..dad237014 --- /dev/null +++ b/libsrc/cx16/getres.s @@ -0,0 +1,36 @@ +; +; 2019-12-26, Greg King +; +; int __fastcall__ clock_getres (clockid_t clk_id, struct timespec *res); +; + + .include "time.inc" + + .importzp ptr1 + .import incsp1, return0 + + +;---------------------------------------------------------------------------- + +.proc _clock_getres + + sta ptr1 + stx ptr1+1 + + ldy #.sizeof(timespec) - 1 +@L1: lda time,y + sta (ptr1),y + dey + bpl @L1 + + jsr incsp1 + jmp return0 + +.endproc + +;---------------------------------------------------------------------------- +; timespec struct with tv_nsec set to approximately 1/60 of a second +.rodata + +time: .dword 0 + .dword 17 * 1000 * 1000 diff --git a/libsrc/cx16/gettime.s b/libsrc/cx16/gettime.s new file mode 100644 index 000000000..336b0f957 --- /dev/null +++ b/libsrc/cx16/gettime.s @@ -0,0 +1,56 @@ +; +; 2019-12-27, Greg King +; +; int __fastcall__ clock_gettime (clockid_t clk_id, struct timespec *tp); +; + + .include "time.inc" + .include "cx16.inc" + + .import pushax, pusheax, tosmul0ax, steaxspidx, incsp1, return0 + .import TM, load_jiffy + .import CLOCK_GET_DATE_TIME + + +;---------------------------------------------------------------------------- + +.proc _clock_gettime + + jsr pushax + jsr pushax + + jsr CLOCK_GET_DATE_TIME + + lda gREG::r0L + sta TM + tm::tm_year + lda gREG::r0H + dec a + sta TM + tm::tm_mon + lda gREG::r1L + sta TM + tm::tm_mday + + lda gREG::r1H + sta TM + tm::tm_hour + lda gREG::r2L + sta TM + tm::tm_min + lda gREG::r2H + sta TM + tm::tm_sec + + lda #<TM + ldx #>TM + jsr _mktime + ldy #timespec::tv_sec + jsr steaxspidx ; Pops address pushed by 2. pushax + + jsr load_jiffy + jsr pusheax + lda gREG::r3L + ldx #>$0000 + jsr tosmul0ax + ldy #timespec::tv_nsec + jsr steaxspidx ; Pops address pushed by 1. pushax + + jsr incsp1 + jmp return0 + +.endproc diff --git a/libsrc/cx16/settime.s b/libsrc/cx16/settime.s new file mode 100644 index 000000000..81749f508 --- /dev/null +++ b/libsrc/cx16/settime.s @@ -0,0 +1,55 @@ +; +; 2019-12-27, Greg King +; +; int __fastcall__ clock_settime (clockid_t clk_id, const struct timespec *tp); +; + + .include "time.inc" + .include "cx16.inc" + + .importzp ptr1 + .import pushax, pusheax, ldax0sp, ldeaxidx + .import tosdiveax, incsp3, return0 + .import load_jiffy + .import CLOCK_SET_DATE_TIME + + +.macro COPY reg, offset + ldy #offset + lda (ptr1),y + sta gREG::reg +.endmac + +;---------------------------------------------------------------------------- + +.proc _clock_settime + + jsr pushax + + .assert timespec::tv_sec = 0, error + jsr _localtime + sta ptr1 + stx ptr1+1 + + COPY r0L, tm::tm_year + COPY r0H, tm::tm_mon + inc gREG::r0H + COPY r1L, tm::tm_mday + COPY r1H, tm::tm_hour + COPY r2L, tm::tm_min + COPY r2H, tm::tm_sec + + jsr ldax0sp ; Get tp + ldy #timespec::tv_nsec+3 + jsr ldeaxidx ; Get nanoseconds + jsr pusheax + jsr load_jiffy + jsr tosdiveax + sta gREG::r3L ; Put number of jiffies + + jsr CLOCK_SET_DATE_TIME + + jsr incsp3 + jmp return0 + +.endproc diff --git a/libsrc/cx16/status.s b/libsrc/cx16/status.s deleted file mode 100644 index e3446637d..000000000 --- a/libsrc/cx16/status.s +++ /dev/null @@ -1,16 +0,0 @@ -; -; 2019-11-05, Greg King -; - - .export ST: zp - -.segment "EXTZP": zp - -; This is a temporary hack. - -; A zero-page copy of the IEC status byte. -; This is needed because the Commander X16's Kernal's status -; variable was moved out of the zero page. But, the common -; CBM file function modules import this as a zero-page variable. - -ST: .res 1 diff --git a/libsrc/cx16/tmcommon.s b/libsrc/cx16/tmcommon.s new file mode 100644 index 000000000..0eed245dc --- /dev/null +++ b/libsrc/cx16/tmcommon.s @@ -0,0 +1,40 @@ +; +; 2019-12-27, Greg King +; +; Common stuff for the clock routines +; + + .export TM, load_jiffy + + .importzp sreg + + +;---------------------------------------------------------------------------- +; Load .EAX with the approximate number of nanoseconds +; in one jiffy (1/60th of a second). + +.proc load_jiffy + + lda #<(17 * 1000 * 1000 / $10000) + ldx #>(17 * 1000 * 1000 / $10000) + sta sreg + stx sreg+1 + lda #<(17 * 1000 * 1000) + ldx #>(17 * 1000 * 1000) + rts + +.endproc + +;---------------------------------------------------------------------------- +; TM struct with "is daylight-saving time" set to "unknown" +.data + +TM: .word 0 ; tm_sec + .word 0 ; tm_min + .word 0 ; tm_hour + .word 0 ; tm_mday + .word 0 ; tm_mon + .word 0 ; tm_year + .word 0 ; tm_wday + .word 0 ; tm_yday + .word .loword(-1) ; tm_isdst diff --git a/testcode/lib/clock-test.c b/testcode/lib/clock-test.c index e3115d2f1..ba4b69e42 100644 --- a/testcode/lib/clock-test.c +++ b/testcode/lib/clock-test.c @@ -1,7 +1,8 @@ -/* Clock test program - * - * 25-Sep-2018, chris@groessler.org - */ +/* Calendar-clock test program +** +** 2018-Sep-25, chris@groessler.org +** 2019-Dec-27, Greg King +*/ #include <stdio.h> #include <stdlib.h> @@ -10,74 +11,83 @@ #include <errno.h> #ifdef __CC65__ -#include <conio.h> -#include <cc65.h> -#endif /* #ifdef __CC65__ */ + #include <conio.h> + #include <cc65.h> +#endif -static void print_time(void) +static int print_time(void) { struct tm *cur_tm; time_t cur_time = time(NULL); + if (cur_time == -1) { printf("time() failed: %s\n", strerror(errno)); - return; + return 1; } cur_tm = localtime(&cur_time); printf("time: %s\n", asctime(cur_tm)); // DEBUG: - printf("mday=%d mon=%d year=%d\nhour=%d min=%d sec=%d\n", cur_tm->tm_mday, cur_tm->tm_mon, cur_tm->tm_year, cur_tm->tm_hour, cur_tm->tm_min, cur_tm->tm_sec); + printf("year=%d, mon=%d, mday=%d\nhour=%d, min=%d, sec=%d\n", + cur_tm->tm_year, cur_tm->tm_mon, cur_tm->tm_mday, + cur_tm->tm_hour, cur_tm->tm_min, cur_tm->tm_sec); + return 0; } int main(int argc, char **argv) { - char c = 0; + char c; int s; struct tm cur_time; struct timespec new_time; #ifdef __CC65__ - /* if DOS will automatically clear the screen after the program exits, wait for a keypress... */ + /* If DOS automatically will clear the screen after the program exits, + ** then wait for a key-press. + */ if (doesclrscrafterexit()) atexit((void (*)(void))cgetc); #endif - if (argc <= 1) { - print_time(); - return 0; + if (argc == 1) { + return print_time(); } - if (argc != 3 || strcasecmp(*(argv + 1), "set")) { - printf("usage: CLOCKTST [set DD-MM-YY-HH-MM-SS]\n"); + if (argc != 2) { +#ifdef __CC65__ + printf("Usage: run:rem [YY-MM-DD-HH-MM-SS]\n"); +#else + printf("Usage: %s [YY-MM-DD-HH-MM-SS]\n", argv[0]); +#endif return 1; } - memset(&cur_time, 0, sizeof(cur_time)); - s = sscanf(*(argv + 2), "%d-%d-%d-%d-%d-%d", &cur_time.tm_mday, &cur_time.tm_mon, &cur_time.tm_year, &cur_time.tm_hour, &cur_time.tm_min, &cur_time.tm_sec); - if (s != 6 || cur_time.tm_year > 99 /* other input values aren't being verified... */) { - printf("invalid time/date format\n"); + memset(&cur_time, 0, sizeof cur_time); + s = sscanf(argv[1], "%d-%d-%d-%d-%d-%d", + &cur_time.tm_year, &cur_time.tm_mon, &cur_time.tm_mday, + &cur_time.tm_hour, &cur_time.tm_min, &cur_time.tm_sec); + if (s != 6 || cur_time.tm_year > 99 /* other input values aren't being verified */) { + printf("Invalid date-time format\n"); return 1; } + cur_time.tm_year += 100; /* assume 21st century */ --cur_time.tm_mon; - if (cur_time.tm_year < 79) - cur_time.tm_year += 100; /* adjust century */ - memset(&new_time, 0, sizeof(new_time)); + memset(&new_time, 0, sizeof new_time); new_time.tv_sec = mktime(&cur_time); - printf("\nyou are about to set the time to\n--> %s\n\nContinue (y/n)?", ctime(&new_time.tv_sec)); - - while (c != 'y' && c != 'Y' && c != 'n' && c != 'N') { + printf("\nYou are about to set the time to\n--> %s\nContinue (y/n)? ", ctime(&new_time.tv_sec)); + do { #ifdef __CC65__ c = cgetc(); #else c = getchar(); #endif - } + } while (c != 'y' && c != 'Y' && c != 'n' && c != 'N'); printf("%c\n", c); if (c == 'n' || c == 'N') { - printf("user abort\n"); + printf("User abort\n"); return 0; } @@ -86,11 +96,11 @@ int main(int argc, char **argv) printf("clock_settime() failed: %s\n", strerror(errno)); return 1; } - printf("time set!\n"); + printf("Time set!\n\n"); + //DEBUG test begin - print_time(); + return print_time(); //DEBUG test end - return 0; } /* Local Variables: */ /* c-file-style: "cpg" */ From 00ab3c2d34b63cdadace7827e2f148db983d48eb Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 30 Dec 2019 19:53:39 -0500 Subject: [PATCH 0056/2710] Fixed the target guards around the usage messages. --- testcode/lib/clock-test.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/testcode/lib/clock-test.c b/testcode/lib/clock-test.c index ba4b69e42..355e69d95 100644 --- a/testcode/lib/clock-test.c +++ b/testcode/lib/clock-test.c @@ -1,7 +1,7 @@ /* Calendar-clock test program ** ** 2018-Sep-25, chris@groessler.org -** 2019-Dec-27, Greg King +** 2019-Dec-30, Greg King */ #include <stdio.h> @@ -54,8 +54,10 @@ int main(int argc, char **argv) } if (argc != 2) { -#ifdef __CC65__ - printf("Usage: run:rem [YY-MM-DD-HH-MM-SS]\n"); +#if defined(__APPLE2__) + printf("USAGE: CALL2051 [:REM YY-MM-DD-HH-MM-SS]\n"); +#elif defined(__ATMOS__) || defined(__CBM__) + printf("Usage: run [:rem YY-MM-DD-HH-MM-SS]\n"); #else printf("Usage: %s [YY-MM-DD-HH-MM-SS]\n", argv[0]); #endif From 5109c0b68f7a2cd07ece07b6812affeab07ae17a Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 2 Jan 2020 04:26:02 -0500 Subject: [PATCH 0057/2710] Made ca65 give error messages when it sees duplicate .define commands. --- src/ca65/pseudo.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/ca65/pseudo.c b/src/ca65/pseudo.c index a0eb28699..5b2ef0573 100644 --- a/src/ca65/pseudo.c +++ b/src/ca65/pseudo.c @@ -821,8 +821,17 @@ static void DoDebugInfo (void) static void DoDefine (void) -/* Define a one line macro */ +/* Define a one-line macro */ { + /* The function is called with the .DEFINE token in place, because we need + ** to disable .define macro expansions before reading the next token. + ** Otherwise, the name of the macro might be expanded; therefore, + ** we never would see it. + */ + DisableDefineStyleMacros (); + NextTok (); + EnableDefineStyleMacros (); + MacDef (MAC_STYLE_DEFINE); } @@ -1871,12 +1880,12 @@ static void DoTag (void) static void DoUnDef (void) -/* Undefine a define style macro */ +/* Undefine a define-style macro */ { /* The function is called with the .UNDEF token in place, because we need ** to disable .define macro expansions before reading the next token. - ** Otherwise the name of the macro would be expanded, so we would never - ** see it. + ** Otherwise, the name of the macro would be expanded; therefore, + ** we never would see it. */ DisableDefineStyleMacros (); NextTok (); @@ -1962,7 +1971,7 @@ static void DoZeropage (void) /* Control commands flags */ enum { ccNone = 0x0000, /* No special flags */ - ccKeepToken = 0x0001 /* Do not skip the current token */ + ccKeepToken = 0x0001 /* Do not skip the control token */ }; /* Control command table */ @@ -2001,7 +2010,7 @@ static CtrlDesc CtrlCmdTab [] = { { ccNone, DoDbg, }, { ccNone, DoDByt }, { ccNone, DoDebugInfo }, - { ccNone, DoDefine }, + { ccKeepToken, DoDefine }, { ccNone, DoUnexpected }, /* .DEFINED */ { ccNone, DoUnexpected }, /* .DEFINEDMACRO */ { ccNone, DoDelMac }, From 2a421396740049244d85e1591fdec91ae6d5fa08 Mon Sep 17 00:00:00 2001 From: mc78 <mc78@outlook.de> Date: Fri, 29 Nov 2019 11:20:58 +0100 Subject: [PATCH 0058/2710] Changes in INSTALL routine from emd/c128-vdc.s. tmp1 was used at two places resulting in the bug that VDC_CSET was set to garbage on 16k VDC. pagecount and curpage were not reset on INSTALL resulting in non-reentrant code on static linkage of emd driver. --- libsrc/c128/emd/c128-vdc.s | 48 +++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/libsrc/c128/emd/c128-vdc.s b/libsrc/c128/emd/c128-vdc.s index d915fdf25..3f08b0a79 100644 --- a/libsrc/c128/emd/c128-vdc.s +++ b/libsrc/c128/emd/c128-vdc.s @@ -52,13 +52,11 @@ VDC_DATA = 31 ; ------------------------------------------------------------------------ ; Data. -.data - -pagecount: .word 64 ; $0000-$3fff as 16k default -curpage: .word $ffff ; currently mapped-in page (invalid) - .bss +pagecount: .res 1 ; $0000-$3fff as 16k default +curpage: .res 2 ; currently mapped-in page (invalid) +vdc_cset_save: .res 1 window: .res 256 ; memory window .code @@ -71,11 +69,15 @@ window: .res 256 ; memory window ; INSTALL: + ; reset mapped-in page to invalid + lda #$ff + sta curpage + sta curpage+1 + ; do test for VDC presence here??? - ldx #VDC_CSET ; determine size of RAM... jsr vdcgetreg - sta tmp1 + sta vdc_cset_save ora #%00010000 jsr vdcputreg ; turn on 64k @@ -94,35 +96,39 @@ INSTALL: lda tmp2 jsr vdcputbyte ; restore original value of test byte + ldx #0 ; prepare x with hi of default pagecount + lda ptr1 ; do bytes match? cmp ptr1+1 bne @have64k lda ptr2 cmp ptr2+1 bne @have64k - - ldx #VDC_CSET - lda tmp1 - jsr vdcputreg ; restore 16/64k flag - jmp @endok ; and leave default values for 16k - -@have64k: - lda #<256 - ldx #>256 + + lda #64 ; assumes x = 0, here -> p.c = 64 + bne @setpagecnt +@have64k: + txa ; assumes x = 0, here + inx ; so that a/x becomes 0/1 -> p.c. = 256 +@setpagecnt: sta pagecount stx pagecount+1 -@endok: + + ldx #VDC_CSET ; restore 16/64k flag + lda vdc_cset_save + jsr vdcputreg + lda #<EM_ERR_OK ldx #>EM_ERR_OK rts test64k: - sta tmp1 + sta tmp3 sty ptr3 lda #0 sta ptr3+1 jsr settestadr1 - lda tmp1 + lda tmp3 jsr vdcputbyte ; write $55 jsr settestadr1 jsr vdcgetbyte ; read here @@ -199,6 +205,8 @@ transferin: lda VDC_DATA_REG ; get 2 bytes at a time to speed-up sta (ptr2),y ; (in fact up to 8 bytes could be fetched with special VDC config) iny +@L1: bit VDC_ADDR_REG ; XXX: Test waiting for register 31 + bpl @L1 lda VDC_DATA_REG sta (ptr2),y iny @@ -334,6 +342,8 @@ vdcsetsrcaddr: dex tya stx VDC_ADDR_REG +@L1: bit VDC_ADDR_REG ; XXX: Test waiting for register 18 + bpl @L1 sta VDC_DATA_REG rts From 390878e831efdc73fc7698836762952dac53ffd9 Mon Sep 17 00:00:00 2001 From: mc78 <mc78@outlook.de> Date: Fri, 29 Nov 2019 11:47:34 +0100 Subject: [PATCH 0059/2710] Added reservation of second byte for pagecount --- libsrc/c128/emd/c128-vdc.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/c128/emd/c128-vdc.s b/libsrc/c128/emd/c128-vdc.s index 3f08b0a79..842059c3e 100644 --- a/libsrc/c128/emd/c128-vdc.s +++ b/libsrc/c128/emd/c128-vdc.s @@ -54,7 +54,7 @@ VDC_DATA = 31 .bss -pagecount: .res 1 ; $0000-$3fff as 16k default +pagecount: .res 2 ; $0000-$3fff as 16k default curpage: .res 2 ; currently mapped-in page (invalid) vdc_cset_save: .res 1 window: .res 256 ; memory window From 244dc358e55a9b86a7281d40a576355c21268f30 Mon Sep 17 00:00:00 2001 From: mc78 <mc78@outlook.de> Date: Sun, 1 Dec 2019 13:25:14 +0100 Subject: [PATCH 0060/2710] Changed the order in which lo/hi bytes of vdc addr are set according to willimanilys ((z64k) suggestions. Changed offset for vdc ramsize detection from 000 to 000. --- libsrc/c128/emd/c128-vdc.s | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/libsrc/c128/emd/c128-vdc.s b/libsrc/c128/emd/c128-vdc.s index 842059c3e..e359dcdb9 100644 --- a/libsrc/c128/emd/c128-vdc.s +++ b/libsrc/c128/emd/c128-vdc.s @@ -104,7 +104,7 @@ INSTALL: lda ptr2 cmp ptr2+1 bne @have64k - + lda #64 ; assumes x = 0, here -> p.c = 64 bne @setpagecnt @have64k: @@ -113,22 +113,25 @@ INSTALL: @setpagecnt: sta pagecount stx pagecount+1 + + txa + bne @keep64kBit ldx #VDC_CSET ; restore 16/64k flag lda vdc_cset_save - jsr vdcputreg - + jsr vdcputreg +@keep64kBit: lda #<EM_ERR_OK ldx #>EM_ERR_OK rts test64k: - sta tmp3 + sta tmp1 sty ptr3 lda #0 sta ptr3+1 jsr settestadr1 - lda tmp3 + lda tmp1 jsr vdcputbyte ; write $55 jsr settestadr1 jsr vdcgetbyte ; read here @@ -146,7 +149,7 @@ settestadr1: ldy #$02 ; test page 2 (here) .byte $2c settestadr2: - ldy #$42 ; or page 64+2 (there) + ldy #$82 ; or page 64+2 (there) lda #0 jmp vdcsetsrcaddr @@ -334,17 +337,16 @@ COPYTO: ; vdcsetsrcaddr: - ldx #VDC_DATA_LO + ldx #VDC_DATA_HI stx VDC_ADDR_REG @L0: bit VDC_ADDR_REG bpl @L0 sta VDC_DATA_REG - dex - tya + inx stx VDC_ADDR_REG @L1: bit VDC_ADDR_REG ; XXX: Test waiting for register 18 bpl @L1 - sta VDC_DATA_REG + sty VDC_DATA_REG rts vdcgetbyte: From b66f7272af4c566df6205f55296ac365ecbf8c73 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 10 Jan 2020 15:17:23 -0500 Subject: [PATCH 0061/2710] Updated the cx16 library to the ROM's prerelease 36. --- asminc/cbm_kernal.inc | 15 +++- asminc/cx16.inc | 137 +++++++++++++++++++++++++++---------- doc/cx16.sgml | 8 +-- doc/funcref.sgml | 44 ++++++++++-- doc/library.sgml | 118 +++++++++++++++++--------------- include/cbm.h | 1 + include/cx16.h | 84 +++++++++++++++-------- libsrc/cbm/c_settim.s | 16 +++++ libsrc/cx16/clock.s | 1 - libsrc/cx16/color.s | 2 +- libsrc/cx16/crt0.s | 6 +- libsrc/cx16/get_numbanks.s | 20 ++++++ libsrc/cx16/joyref.s | 20 ------ libsrc/cx16/kbhit.s | 8 +-- libsrc/cx16/kernal.s | 14 +++- libsrc/cx16/libref.s | 4 +- libsrc/cx16/mcbdefault.s | 37 +++------- libsrc/cx16/videomode.s | 28 ++++---- libsrc/cx16/waitvsync.s | 8 +-- 19 files changed, 357 insertions(+), 214 deletions(-) create mode 100644 libsrc/cbm/c_settim.s create mode 100644 libsrc/cx16/get_numbanks.s delete mode 100644 libsrc/cx16/joyref.s diff --git a/asminc/cbm_kernal.inc b/asminc/cbm_kernal.inc index 86a60d49b..7125f1253 100644 --- a/asminc/cbm_kernal.inc +++ b/asminc/cbm_kernal.inc @@ -1,11 +1,21 @@ ; ; Olli Savia <ops@iki.fi> +; Greg King ; -; Commodore Kernal functions +; Commodore-compatibles Kernal functions ; .if .def(__CX16__) ; CX16 extended jump table + CONSOLE_INIT := $FEDB + CONSOLE_PUT_CHAR := $FEDE + CONSOLE_GET_CHAR := $FEE1 + MEMORY_FILL := $FEE4 + MEMORY_COPY := $FEE7 + MEMORY_CRC := $FEEA + MEMORY_DECOMPRESS := $FEED + SPRITE_SET_IMAGE := $FEF0 + SPRITE_SET_POSITION := $FEF3 FB_INIT := $FEF6 FB_GET_INFO := $FEF9 FB_SET_PALETTE := $FEFC @@ -37,7 +47,8 @@ CLOCK_GET_DATE_TIME := $FF50 JOYSTICK_SCAN := $FF53 JOYSTICK_GET := $FF56 - SCRMOD := $FF5F + SCREEN_SET_MODE := $FF5F + SCREEN_SET_CHARSET := $FF62 MOUSE_CONFIG := $FF68 MOUSE_GET := $FF6B .endif diff --git a/asminc/cx16.inc b/asminc/cx16.inc index e08215df9..06cc30199 100644 --- a/asminc/cx16.inc +++ b/asminc/cx16.inc @@ -1,5 +1,5 @@ ; -; CX16 r35 definitions +; CX16 r36 definitions ; ; --------------------------------------------------------------------------- @@ -17,7 +17,8 @@ YELLOW ORANGE BROWN - LIGHTRED + PINK + LIGHTRED = PINK GRAY1 GRAY2 LIGHTGREEN @@ -25,20 +26,81 @@ GRAY3 .endenum -; Special keys -.enum KEY - F1 = $85 - F3 - F5 - F7 - F2 - F4 - F6 - F8 - F9 = $10 - F10 = $15 - F11 - F12 +; Special characters +.enum CH +COLOR_SWAP = $01 +STOP = $03 +UNDERLINE +WHITE +BOLD +BELL +BACKSPACE +TAB +LINEFEED +ITALIC +OUTLINE +ENTER +FONT_LOWER +FONT_ISO +F9 +CURS_DOWN +REVERSE +HOME +DEL +F10 +F11 +F12 +SHIFT_TAB +RED = $1C +CURS_RIGHT +GREEN +BLUE +LIRA = $5C +ORANGE = $81 +RUN = $83 +HELP +F1 +F3 +F5 +F7 +F2 +F4 +F6 +F8 +SHIFT_ENTER +FONT_UPPER +FONT_PET +BLACK +CURS_UP +ATTR_CLEAR +SCRN_CLEAR +INS +BROWN +PINK +LIGHTRED = PINK +GRAY1 +GRAY2 +LIGHTGREEN +LIGHTBLUE +GRAY3 +PURPLE +VIOLET = PURPLE +CURS_LEFT +YELLOW +CYAN +SHIFT_SPACE +LTEE = $AB +LLCORNER = $AD +URCORNER +ULCORNER = $B0 +BTEE +TTEE +RTEE +LRCORNER = $BD +HLINE = $C0 +CROSS = $DB +VLINE = $DD +PI .endenum ; --------------------------------------------------------------------------- @@ -162,10 +224,9 @@ .endstruct ; Kernal -FNAM := $84 ; Pointer to filename -KTEMP2 := $86 ; 2 bytes for temporary storage -IMPARM := $88 ; Pointer for PRIMM function -SCREEN_PTR := $90 ; Pointer to current row on text screen (16 bits) +KTEMP2 := $80 ; 2 bytes for temporary storage +IMPARM := $82 ; Pointer for PRIMM function +FNAM := $8C ; Pointer to filename ; BASIC TXTPTR := $EE ; Pointer into BASIC source code @@ -175,23 +236,25 @@ TXTPTR := $EE ; Pointer into BASIC source code BASIC_BUF := $0200 ; Location of command-line BASIC_BUF_LEN = 81 ; Maximum length of command-line -STATUS := $0275 ; Status from previous I/O operation -IN_DEV := $0279 ; Current input device number -OUT_DEV := $027A ; Current output device number -FNAM_LEN := $027D ; Length of filename -SECADR := $027F ; Secondary address -DEVNUM := $0280 ; Device number +SCREEN_MODE := $0262 ; Current screen mode (set by SCREEN_SET_MODE) +SCREEN_PTR := $0263 ; Pointer to current row on text screen (16 bits) +STATUS := $0286 ; Status from previous I/O operation +IN_DEV := $028A ; Current input device number +OUT_DEV := $028B ; Current output device number +FNAM_LEN := $028E ; Length of filename +SECADR := $0290 ; Secondary address +DEVNUM := $0291 ; Device number CURS_COLOR := $0373 ; Color under the cursor -CHARCOLOR := $0377 ; Cursor's color nybbles (high: background, low: foreground) -RVS := $0378 ; Reverse flag -CURS_FLAG := $037C ; 1 = cursor off -CURS_BLINK := $037D ; Blink counter -CURS_CHAR := $037E ; Character under the cursor -CURS_STATE := $037F ; Cursor blink state -CURS_X := $0381 ; Cursor column -CURS_Y := $0384 ; Cursor row -LLEN := $0387 ; Line length -NLINES := $0388 ; Number of screen lines +CHARCOLOR := $0376 ; Cursor's color nybbles (high: background, low: foreground) +RVS := $0377 ; Reverse flag +CURS_FLAG := $037B ; 1 = cursor off +CURS_BLINK := $037C ; Blink counter +CURS_CHAR := $037D ; Character under the cursor +CURS_STATE := $037E ; Cursor blink state +CURS_X := $0380 ; Cursor column +CURS_Y := $0383 ; Cursor row +LLEN := $0386 ; Line length +NLINES := $0387 ; Number of screen lines ; BASIC VARTAB := $03E3 ; Pointer to start of BASIC variables @@ -453,7 +516,7 @@ NMIVec := $0318 ; --------------------------------------------------------------------------- ; Banked RAM and ROM -KEY_COUNT := $A00A ; (bank 0) Number of keys in input buffer +KEY_COUNT := $A00B ; (bank 0) Number of keys in input buffer TIMER := $A03E ; (bank 0) 60 Hz. timer (3 bytes, big-endian) .struct BANK diff --git a/doc/cx16.sgml b/doc/cx16.sgml index ca9a50ed6..20094d609 100644 --- a/doc/cx16.sgml +++ b/doc/cx16.sgml @@ -46,9 +46,9 @@ file and linker config. <sect>Memory layout<p> cc65-generated programs with the default setup run with the I/O area, RAM bank -zero, and the Kernal ROM visible. That means that Kernal entry points can be -called directly. The usable memory ranges are $0800 - $9EFF and -$A000 - $BFFF. +one, and the Kernal ROM being visible. That means that Kernal entry points +can be called directly. The usable memory ranges are $0800 - +$9EFF, $0400 - $07FF, and $A000 - $BFFF. Special locations: @@ -77,7 +77,7 @@ The ld65 linker comes with a default config. file for the Commander X16, which is used via <tt/-t cx16/. The cx16 package comes with additional secondary linker config. files which are used via <tt/-t cx16 -C <configfile>/. -Those files use 126 bytes in the zero page. (The rest of page zero is reserved +Those files use 94 bytes in the zero page. (The rest of page zero is reserved for Kernal and BASIC.) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index c2b46f0f0..b6171a0ef 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -17,9 +17,9 @@ the C functions available in the standard library. <sect>Introduction<p> -cc65 is a C compiler for 6502 based systems. It implements a subset of the ISO +cc65 is a C compiler for 6502-based systems. It implements a subset of the ISO C standard plus additional functions specially crafted for 6502 systems or -just some of the supported machines. This function refrence describes the +just some of the supported machines. This function reference describes the available functions together with any limitations. For an overview about the available libraries, their purpose, and any @@ -27,8 +27,8 @@ differences to the ISO standard, please have a look at the <url url="library.html" name="cc65 Library Overview">. <em/Note:/ Standard C functions are listed here, but not described in detail. -Since these functions behave identical on all standard compliant systems, they -are described in any book covering standard C. +Because those functions behave identically on all standard-compliant systems, +they are described in any book covering standard C. Each entry for a function contains a detailed description @@ -200,6 +200,7 @@ function. <item><ref id="cbm_k_second" name="cbm_k_second"> <item><ref id="cbm_k_setlfs" name="cbm_k_setlfs"> <item><ref id="cbm_k_setnam" name="cbm_k_setnam"> +<item><ref id="cbm_k_settim" name="cbm_k_settim"> <item><ref id="cbm_k_talk" name="cbm_k_talk"> <item><ref id="cbm_k_tksa" name="cbm_k_tksa"> <item><ref id="cbm_k_udtim" name="cbm_k_udtim"> @@ -321,6 +322,7 @@ function. <sect1><tt/cx16.h/<label id="cx16.h"><p> <itemize> +<!-- <item><ref id="get_numbanks" name="get_numbanks"> --> <!-- <item><ref id="get_ostype" name="get_ostype"> --> <!-- <item><ref id="get_tv" name="get_tv"> --> <!-- <item><ref id="set_tv" name="set_tv"> --> @@ -2281,6 +2283,9 @@ only be used in presence of a prototype. </itemize> <tag/Availability/cc65 <tag/See also/ +<ref id="cbm_k_load" name="cbm_k_load">, +<ref id="cbm_k_open" name="cbm_k_open">, +<ref id="cbm_k_save" name="cbm_k_save">, <ref id="cbm_k_setnam" name="cbm_k_setnam"> <tag/Example/None. </descrip> @@ -2302,9 +2307,34 @@ only be used in presence of a prototype. </itemize> <tag/Availability/cc65 <tag/See also/ -<ref id="cbm_k_open" name="cbm_k_open">, <ref id="cbm_k_load" name="cbm_k_load">, -<ref id="cbm_k_save" name="cbm_k_save"> +<ref id="cbm_k_open" name="cbm_k_open">, +<ref id="cbm_k_save" name="cbm_k_save">, +<ref id="cbm_k_setlfs" name="cbm_k_setlfs"> +<tag/Example/None. +</descrip> +</quote> + + +<sect1>cbm_k_settim<label id="cbm_k_settim"><p> + +<quote> +<descrip> +<tag/Function/Set the Jiffy clock. +<tag/Header/<tt/<ref id="cbm.h" name="cbm.h">/ +<tag/Declaration/<tt/void __fastcall__ cbm_k_settim (unsigned long timer);/ +<tag/Description/This function changes the Jiffy clock to a different value. +That clock counts sixtieths of a second. It is used by the library's +<tt/clock()/ function. The Jiffy clock is updated by the Kernal's Interrupt +Service Routine. +<tag/Notes/<itemize> +<item>The function is available only as a fastcall function; therefore, it may +be used only in the presence of a prototype. +</itemize> +<tag/Availability/cc65 +<tag/See also/ +<ref id="cbm_k_udtim" name="cbm_k_udtim">, +<ref id="clock" name="clock"> <tag/Example/None. </descrip> </quote> @@ -2368,6 +2398,7 @@ then that ISR must call this function, in order to keep the clock valid. <tag/Availability/cc65 <tag/See also/ <ref id="cbm_k_scnkey" name="cbm_k_scnkey">, +<ref id="cbm_k_settim" name="cbm_k_settim">, <ref id="clock" name="clock"> <tag/Example/None. </descrip> @@ -2585,6 +2616,7 @@ changing values. (See the description of <tt/cbm_k_udtim()/.) </itemize> <tag/Availability/ISO 9899 <tag/See also/ +<ref id="cbm_k_settim" name="cbm_k_settim">, <ref id="cbm_k_udtim" name="cbm_k_udtim">, <ref id="time" name="time"> <tag/Example/None. diff --git a/doc/library.sgml b/doc/library.sgml index e8ca84653..303809c59 100644 --- a/doc/library.sgml +++ b/doc/library.sgml @@ -18,22 +18,22 @@ including a discussion of the differences to the ISO standard. This file contains a short overview of the libraries available for the cc65 C compiler. Please have a look at the <url url="funcref.html" name="function -reference"> for a list function by function. Since the function reference is -not complete (I'm working on that) it may happen that you don't find a -specific function. In this case, have a look into the header files. All -functions, that are not defined by the ISO C standard have a short comment in +reference"> for a function-by-function list. Because the function reference is +not complete (we're working on that), it may happen that you don't find a +specific function. In that case, have a look into the header files. All +functions, that are not defined by the ISO C standard, have a short comment in the headers, explaining their use. <sect>ISO C compatible library<p> -The C library contains a large subset of the ISO C library. Functions are -usually missing in areas, where there is no support on typical 6502 systems. -Wide character sets are an example for this. +The C library contains a large subset of the ISO C library. Functions usually +are missing in areas where there are no support on typical 6502 systems. +Wide-character sets are an example for that. I will not go into detail about the ISO functions. If a function is not -mentioned here explicitly, expect it to be available and to behave as defined +mentioned here explicitly, expect it to be available, and to behave as defined in the C standard. Functions that are <em/not/ available: @@ -45,13 +45,13 @@ Functions that are <em/not/ available: <p> <item>All functions that handle floating point numbers in some manner. <p> - <item>The <tt/ldiv/ function (cc65 is currently not able to return structs - with a size not equal to 1, 2 or 4 bytes by value). + <item>The <tt/ldiv/ function (cc65 currently is not able to return structs, + by value, with a size not equal to 1, 2, or 4 bytes). <p> - <item>All functions handling wide character strings. + <item>All functions handling wide-character strings. <p> <item>Signals and all related functions (having <tt/SIGSEGV/ would be - cool:-) + cool. :-) <p> <item><tt>setbuf/setvbuf</tt> </itemize> @@ -60,7 +60,7 @@ Functions not available on all supported systems: <itemize> <item><tt>fopen/fread/fwrite/fclose/fputs/fgets/fscanf</tt>: The functions - are built on open/read/write/close. These latter functions are not available + are built on open/read/write/close. Those latter functions are not available on all systems. <p> <item><tt>ftell/fseek/fgetpos/fsetpos</tt>: Support depends on the @@ -69,94 +69,95 @@ Functions not available on all supported systems: <item><tt>rename/remove/rewind</tt>: Support depends on the capabilities of the target machine. <p> - <item><tt>time</tt>: Since many of the supported systems do not have a real - time clock, which means that the <tt/time/ function is not available. Please - note that the other functions from <tt/time.h/ <em/are/ available. + <item><tt>time</tt>: Many of the supported systems don't have a real-time + clock, which means that the <tt/time/ function is not available. Please note + that the other functions from <tt/time.h/ <em/are/ available. </itemize> Functions that are limited in any way: <itemize> - <item><tt>strcspn/strpbrk/strspn</tt>: These functions have a length - limitation of 256 for the second string argument. Since this string gives a - character set, and there are only 256 distinct characters, this shouldn't be + <item><tt>strcspn/strpbrk/strspn</tt>: Those functions have a length + limitation of 256 for the second string argument. Since that string gives a + character set, and there are only 256 distinct characters, that shouldn't be a problem. <p> <item><tt>getenv</tt>: Since there is no such thing as an environment on all - supported systems, the <tt/getenv/ function will always return a <tt/NULL/ + supported systems, the <tt/getenv/ function always will return a <tt/NULL/ pointer. <p> - <item><tt>locale</tt>: There is no other locale than the "C" locale. The + <item><tt>locale</tt>: There is no locale other than the "C" locale. The native locale is identical to the "C" locale. </itemize> -In addition to these limitations, some more functions are limited if inlined -versions are requested by using -Os: +In addition to those limitations, some more functions are limited if inlined +versions are requested by using the <tt/-Os/ command-line option: <itemize> - <item>The <tt/strlen/ function only works for strings with a maximum length + <item>The <tt/strlen/ function works for only strings with a maximum length of 255 characters. <p> - <item>The <tt/isxxx/ character classification functions from + <item>The <tt/isXXX/ character classification functions from <tt/<ctype.h>/ will give unpredictable results if the argument is not - in character range (0..255). This limitation may be removed by #undef'ing + in character range (0..255). That limitation may be removed by #undef'ing the function name (when using <tt/-Os/, the functions are actually macros - that expand to inline assembler code, but the real functions are still + that expand to inline assembly code, but the real functions still are available if the macro definition is removed). </itemize> -<sect>CPU specific stuff - 6502.h<p> +<sect>CPU-specific stuff - 6502.h<p> -The header file 6502.h contains some functions that make only sense with the +The header file 6502.h contains some functions that make sense only with the 6502 CPU. Examples are macros to insert more or less useful instructions into your C code, or a function to call arbitrary machine language subroutines, passing registers in and out. -<sect>Target specific stuff<p> +<sect>Target-specific stuff<p> -For each supported system there's a header file that contains calls or defines -specific for this system. So, when programming for the C64, include c64.h, for -the C128, include c128.h and so on. To make the task for the Commodore systems -easier, there is also a header file named cbm.h that will define stuff common -for all CBM systems, and include the header file for the specific target -system. +For each supported system, there's a header file that contains calls or +defines specific for that system. So, when programming for the C64, include +<tt/<c64.h>/, for the C128, include <tt/<c128.h>/, and so on. +To make the task for the Commodore systems easier, there is also a header file +named <tt/<cbm.h>/ that will define stuff common for all CBM systems, +and include the header file for the specific target system. The header files contain <itemize> - <item>Defines for special keys (like function keys) + <item>Defines for special keys (such as function keys) - <item>Defines for special characters (like the graphics characters) + <item>Defines for special characters (such as the graphics characters) <item>Variables with a fixed address in memory that may be used to access - special hardware. For the C64 and C128 there is a variable struct named - <tt/SID/. Writing to the fields of this struct will write to the SID device - instead. Using these variables will make your program more readable and more - portable. Don't fear ineffective code when using these variables, the - compiler will translate reads and writes to these structs into direct memory + special hardware. For the C64 and C128, there is a variable struct named + <tt/SID/. Writing to the fields of that struct will write to the SID device + instead. Using those variables will make your program more readable and more + portable. Don't fear ineffective code when using those variables, the + compiler will translate reads and writes to those structs into direct memory accesses. - <item>Other routines that make only sense for a specific system. One example - are routines to write memory locations in the system bank for the CBM PET-II + <item>Other routines that make sense for only a specific system. One example + is routines to write memory locations in the system bank for the CBM-II family. </itemize> + <sect>Direct console I/O - <tt/conio.h/<p> The <tt/conio.h/ header file contains a large set of functions that do screen and keyboard I/O. The functions will write directly to the screen or poll the keyboard directly with no more help from the operating system than needed. This has some disadvantages, but on the other side it's fast and reasonably -portable. conio implementations exist for the following targets: +portable. Conio implementations exist for the following targets: <itemize> <item>apple2 @@ -165,13 +166,13 @@ portable. conio implementations exist for the following targets: <item>atari5200 <item>atarixl <item>atmos + <item>c128 <item>c16 (works also for the c116 with up to 32K memory) <item>c64 - <item>c128 - <item>plus4 (or expanded c16/c116) - <item>cbm510 (40 column video) - <item>cbm610 (all CBM series-II computers with 80 column video) + <item>cbm510 (40-column video) + <item>cbm610 (all CBM series-II computers with 80-column video) <item>creativision + <item>cx16 <item>gamate <item>geos-apple <item>geos-cbm @@ -179,11 +180,12 @@ portable. conio implementations exist for the following targets: <item>osic1p <item>pce <item>pet (all CBM PET systems except the 2001) + <item>plus4 (or expanded c16/c116) <item>telestrat <item>vic20 </itemize> -The conio.h header file does also include the system specific header files +The <tt/conio.h/ header file does include the system-specific header files also, which define constants for special characters and keys. @@ -191,14 +193,14 @@ which define constants for special characters and keys. <sect>Using the joystick - <tt/joystick.h/<p> For systems that have a joystick, <tt/joystick.h/ will define a subroutine to -read the current value, including constants to evaluate the result of this +read the current value, including constants to evaluate the result of that function. <sect>Using a mouse - <tt/mouse.h/<p> -Some target machines support a mouse. Mouse support is currently available for +Some target machines support a mouse. Mouse support currently is available for the following targets: <itemize> @@ -206,19 +208,21 @@ the following targets: <item>apple2enh <item>atari <item>atarixl - <item>c64 <item>c128 + <item>c64 <item>cbm510 + <item>cx16 </itemize> The available functions are declared in <tt/mouse.h/. + <sect>Copyright<p> This C runtime library implementation for the cc65 compiler is (C) Copyright 1998-2002 Ullrich von Bassewitz. For usage of the binaries -and/or sources the following conditions do apply: +and/or sources, the following conditions do apply: This software is provided 'as-is', without any expressed or implied warranty. In no event will the authors be held liable for any damages @@ -232,8 +236,8 @@ freely, subject to the following restrictions: <item> The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be - appreciated but is not required. -<item> Altered source versions must be plainly marked as such, and must not + appreciated, but is not required. +<item> Altered source versions must be marked plainly as such, and must not be misrepresented as being the original software. <item> This notice may not be removed or altered from any source distribution. diff --git a/include/cbm.h b/include/cbm.h index 56b5b2947..ac3615c38 100644 --- a/include/cbm.h +++ b/include/cbm.h @@ -208,6 +208,7 @@ void __fastcall__ cbm_k_second (unsigned char addr); void __fastcall__ cbm_k_setlfs (unsigned char LFN, unsigned char DEV, unsigned char SA); void __fastcall__ cbm_k_setnam (const char* Name); +void __fastcall__ cbm_k_settim (unsigned long timer); void __fastcall__ cbm_k_talk (unsigned char dev); void __fastcall__ cbm_k_tksa (unsigned char addr); void cbm_k_udtim (void); diff --git a/include/cx16.h b/include/cx16.h index c6638cef4..6ceb605c9 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -47,12 +47,32 @@ /* Additional output character codes */ #define CH_COLOR_SWAP 0x01 #define CH_UNDERLINE 0x04 +#define CH_WHITE 0x05 #define CH_BOLD 0x06 #define CH_BACKSPACE 0x08 #define CH_ITALIC 0x0B #define CH_OUTLINE 0x0C #define CH_FONT_ISO 0x0F +#define CH_RED 0x1C +#define CH_GREEN 0x1E +#define CH_BLUE 0x1F +#define CH_ORANGE 0x81 #define CH_FONT_PET 0x8F +#define CH_BLACK 0x90 +#define CH_ATTR_CLEAR 0x92 +#define CH_BROWN 0x95 +#define CH_PINK 0x96 +#define CH_LIGHTRED CH_PINK +#define CH_GRAY1 0x97 +#define CH_GRAY2 0x98 +#define CH_LIGHTGREEN 0x99 +#define CH_LIGHTBLUE 0x9A +#define CH_GRAY3 0x9B +#define CH_PURPLE 0x9C +#define CH_VIOLET CH_PURPLE +#define CH_YELLOW 0x9E +#define CH_CYAN 0x9F +#define CH_SHIFT_SPACE 0xA0 /* Additional key defines */ #define CH_SHIFT_TAB 0x18 @@ -82,7 +102,8 @@ #define COLOR_YELLOW 0x07 #define COLOR_ORANGE 0x08 #define COLOR_BROWN 0x09 -#define COLOR_LIGHTRED 0x0A +#define COLOR_PINK 0x0A +#define COLOR_LIGHTRED COLOR_PINK #define COLOR_GRAY1 0x0B #define COLOR_GRAY2 0x0C #define COLOR_LIGHTGREEN 0x0D @@ -91,27 +112,27 @@ /* NES controller masks for joy_read() */ -#define JOY_BTN_1_MASK 0x80 -#define JOY_BTN_2_MASK 0x40 -#define JOY_BTN_3_MASK 0x20 -#define JOY_BTN_4_MASK 0x10 -#define JOY_UP_MASK 0x08 -#define JOY_DOWN_MASK 0x04 -#define JOY_LEFT_MASK 0x02 -#define JOY_RIGHT_MASK 0x01 +#define JOY_BTN_1_MASK 0x80 +#define JOY_BTN_2_MASK 0x40 +#define JOY_BTN_3_MASK 0x20 +#define JOY_BTN_4_MASK 0x10 +#define JOY_UP_MASK 0x08 +#define JOY_DOWN_MASK 0x04 +#define JOY_LEFT_MASK 0x02 +#define JOY_RIGHT_MASK 0x01 -#define JOY_BTN_A_MASK JOY_BTN_1_MASK -#define JOY_BTN_B_MASK JOY_BTN_2_MASK -#define JOY_SELECT_MASK JOY_BTN_3_MASK -#define JOY_START_MASK JOY_BTN_4_MASK +#define JOY_BTN_A_MASK JOY_BTN_1_MASK +#define JOY_BTN_B_MASK JOY_BTN_2_MASK +#define JOY_SELECT_MASK JOY_BTN_3_MASK +#define JOY_START_MASK JOY_BTN_4_MASK -#define JOY_BTN_A(v) ((v) & JOY_BTN_A_MASK) -#define JOY_BTN_B(v) ((v) & JOY_BTN_B_MASK) -#define JOY_SELECT(v) ((v) & JOY_SELECT_MASK) -#define JOY_START(v) ((v) & JOY_START_MASK) +#define JOY_BTN_A(v) ((v) & JOY_BTN_A_MASK) +#define JOY_BTN_B(v) ((v) & JOY_BTN_B_MASK) +#define JOY_SELECT(v) ((v) & JOY_SELECT_MASK) +#define JOY_START(v) ((v) & JOY_START_MASK) -#define JOY_FIRE2_MASK JOY_BTN_2_MASK -#define JOY_FIRE2(v) ((v) & JOY_FIRE2_MASK) +#define JOY_FIRE2_MASK JOY_BTN_2_MASK +#define JOY_FIRE2(v) ((v) & JOY_FIRE2_MASK) /* Additional mouse button mask */ #define MOUSE_BTN_MIDDLE 0x02 @@ -119,21 +140,21 @@ /* get_tv() return codes ** set_tv() argument codes */ -#define TV_NONE 0 -#define TV_VGA 1 -#define TV_NTSC_COLOR 2 -#define TV_RGB 3 -#define TV_NONE2 4 -#define TV_VGA2 5 -#define TV_NTSC_MONO 6 -#define TV_RGB2 7 +#define TV_NONE 0 +#define TV_VGA 1 +#define TV_NTSC_COLOR 2 +#define TV_RGB 3 +#define TV_NONE2 4 +#define TV_VGA2 5 +#define TV_NTSC_MONO 6 +#define TV_RGB2 7 /* Video modes for videomode() */ #define VIDEOMODE_40x30 0x00 #define VIDEOMODE_80x60 0x02 #define VIDEOMODE_40COL VIDEOMODE_40x30 #define VIDEOMODE_80COL VIDEOMODE_80x60 -#define VIDEOMODE_320x240 0x80 +#define VIDEOMODE_320x200 0x80 #define VIDEOMODE_SWAP (-1) /* VERA's interrupt flags */ @@ -193,6 +214,9 @@ extern void cx16_std_mou[]; /* Referred to by mouse_static_stddrv[] +unsigned char get_numbanks (void); +/* Return the number of RAM banks that the machine has. */ + signed char get_ostype (void); /* Get the ROM build version. ** -1 -- custom build @@ -201,12 +225,12 @@ signed char get_ostype (void); */ unsigned char get_tv (void); -/* Return the video type that the machine is using. +/* Return the video signal type that the machine is using. ** Return a TV_xx constant. */ void __fastcall__ set_tv (unsigned char type); -/* Set the video type that the machine will use. +/* Set the video signal type that the machine will use. ** Call with a TV_xx constant. */ diff --git a/libsrc/cbm/c_settim.s b/libsrc/cbm/c_settim.s new file mode 100644 index 000000000..5206557f4 --- /dev/null +++ b/libsrc/cbm/c_settim.s @@ -0,0 +1,16 @@ +; +; 2020-01-08, Greg King +; +; void __fastcall__ cbm_k_settim (unsigned long timer); +; + + .export _cbm_k_settim + .importzp sreg + + .include "cbm.inc" + + +.proc _cbm_k_settim + ldy sreg + jmp SETTIM +.endproc diff --git a/libsrc/cx16/clock.s b/libsrc/cx16/clock.s index 9af215e0f..a0871dbc7 100644 --- a/libsrc/cx16/clock.s +++ b/libsrc/cx16/clock.s @@ -25,7 +25,6 @@ .endproc - .proc _clock stz sreg + 1 ; Byte 3 always is zero diff --git a/libsrc/cx16/color.s b/libsrc/cx16/color.s index 1be01c473..f8d8c1ebf 100644 --- a/libsrc/cx16/color.s +++ b/libsrc/cx16/color.s @@ -36,7 +36,7 @@ _bgcolor: ora tmp1 sta CHARCOLOR ; set new values txa - lsr a ; get screen color + lsr a ; get old background color lsr a lsr a lsr a diff --git a/libsrc/cx16/crt0.s b/libsrc/cx16/crt0.s index 52deeb76f..d709ea96f 100644 --- a/libsrc/cx16/crt0.s +++ b/libsrc/cx16/crt0.s @@ -61,7 +61,7 @@ L2: lda zpsave,x ldx spsave txs ; Restore stack pointer ldx ramsave - stx VIA1::PRA2 ; Restore former RAM bank + stx VIA1::PRA ; Restore former RAM bank lda VIA1::PRB and #<~$07 ora #$04 @@ -85,10 +85,10 @@ init: ; Change to the second RAM bank. - lda VIA1::PRA2 + lda VIA1::PRA sta ramsave ; Save the current RAM bank number lda #$01 - sta VIA1::PRA2 + sta VIA1::PRA .if 0 ; We don't need to preserve zero-page space for cc65's variables. ; Save the zero-page locations that we need. diff --git a/libsrc/cx16/get_numbanks.s b/libsrc/cx16/get_numbanks.s new file mode 100644 index 000000000..00490fb72 --- /dev/null +++ b/libsrc/cx16/get_numbanks.s @@ -0,0 +1,20 @@ +; +; 2020-01-10, Greg King +; +; unsigned char get_numbanks (void); +; /* Return the number of RAM banks that the machine has. */ +; +; The Commander X16 version of MEMTOP returns with an extra value: +; The accumulator describes the number of RAM banks that exist on the hardware. +; + + .export _get_numbanks + + .import MEMTOP + + +_get_numbanks: + sec + jsr MEMTOP + ldx #>$0000 + rts diff --git a/libsrc/cx16/joyref.s b/libsrc/cx16/joyref.s deleted file mode 100644 index edd89fba6..000000000 --- a/libsrc/cx16/joyref.s +++ /dev/null @@ -1,20 +0,0 @@ -; -; 2019-12-22, Greg King -; -; Link an interrupt handler if joysticks are used by a program. -; - - .interruptor joy_libref, 9 - - .include "cbm_kernal.inc" - .include "cx16.inc" - - -joy_libref: - lda VERA::IRQ_FLAGS - lsr a - bcc not_vsync - jsr JOYSTICK_SCAN ; Bit-bang game controllers - clc ; Let other Jiffy handlers run -not_vsync: - rts diff --git a/libsrc/cx16/kbhit.s b/libsrc/cx16/kbhit.s index 34afdeba4..d7e22efd1 100644 --- a/libsrc/cx16/kbhit.s +++ b/libsrc/cx16/kbhit.s @@ -1,5 +1,5 @@ ; -; 2019-12-22, Greg King +; 2020-01-08, Greg King ; ; unsigned char kbhit (void); ; /* Returns non-zero (true) if a typed character is waiting. */ @@ -11,10 +11,10 @@ .proc _kbhit - ldy VIA1::PRA2 ; (KEY_COUNT is in RAM bank 0) - stz VIA1::PRA2 + ldy VIA1::PRA ; (KEY_COUNT is in RAM bank 0) + stz VIA1::PRA lda KEY_COUNT ; Get number of characters - sty VIA1::PRA2 + sty VIA1::PRA tax ; High byte of return (only its zero/nonzero ... rts ; ... state matters) .endproc diff --git a/libsrc/cx16/kernal.s b/libsrc/cx16/kernal.s index ccd52d632..a6b65ebbd 100644 --- a/libsrc/cx16/kernal.s +++ b/libsrc/cx16/kernal.s @@ -1,11 +1,20 @@ ; -; 2019-12-22, Greg King +; 2020-01-06, Greg King ; ; CX16 Kernal functions ; .include "cbm_kernal.inc" + .export CONSOLE_INIT + .export CONSOLE_PUT_CHAR + .export CONSOLE_GET_CHAR + .export MEMORY_FILL + .export MEMORY_COPY + .export MEMORY_CRC + .export MEMORY_DECOMPRESS + .export SPRITE_SET_IMAGE + .export SPRITE_SET_POSITION .export FB_INIT .export FB_GET_INFO .export FB_SET_PALETTE @@ -37,7 +46,8 @@ .export CLOCK_GET_DATE_TIME .export JOYSTICK_SCAN .export JOYSTICK_GET - .export SCRMOD + .export SCREEN_SET_MODE + .export SCREEN_SET_CHARSET .export MOUSE_CONFIG .export MOUSE_GET diff --git a/libsrc/cx16/libref.s b/libsrc/cx16/libref.s index 0d85c7cd8..82a39c22b 100644 --- a/libsrc/cx16/libref.s +++ b/libsrc/cx16/libref.s @@ -1,9 +1,10 @@ ; ; 2013-05-31, Oliver Schmidt -; 2019-11-14, Greg King +; 2020-01-06, Greg King ; .export em_libref + .export joy_libref .export mouse_libref .export ser_libref .export tgi_libref @@ -11,6 +12,7 @@ .import _exit em_libref := _exit +joy_libref := _exit mouse_libref := _exit ser_libref := _exit tgi_libref := _exit diff --git a/libsrc/cx16/mcbdefault.s b/libsrc/cx16/mcbdefault.s index 3dda1c711..aed0e3a2d 100644 --- a/libsrc/cx16/mcbdefault.s +++ b/libsrc/cx16/mcbdefault.s @@ -1,44 +1,29 @@ ; ; Default mouse callbacks for the CX16 ; -; 2019-12-25, Greg King -; -; All functions in this module should be interrupt-safe -; because they might be called from an interrupt handler. +; 2020-01-10, Greg King ; .export _mouse_def_callbacks + .import MOUSE_GET, SPRITE_SET_POSITION .include "cx16.inc" -msprite: - stz VERA::CTRL ; set address for VERA's data port zero - lda #<(VERA::SPRITE::ATTRIB::Z_FLIP + 0 * 8) - ldx #>(VERA::SPRITE::ATTRIB::Z_FLIP + 0 * 8) - ldy #^(VERA::SPRITE::ATTRIB::Z_FLIP + 0 * 8) | VERA::INC0 - sta VERA::ADDR - stx VERA::ADDR+1 - sty VERA::ADDR+2 - rts - ; -------------------------------------------------------------------------- ; Hide the mouse pointer. -hide: jsr msprite - lda VERA::DATA0 - and #<~VERA::SPRITE::DEPTH::LAYER1 - sta VERA::DATA0 - rts +hide: ldx #%10000000 + stx gREG::r0H + bra mse ; -------------------------------------------------------------------------- ; Show the mouse pointer. -show: jsr msprite - lda VERA::DATA0 - ora #VERA::SPRITE::DEPTH::LAYER1 - sta VERA::DATA0 - rts +show: ldx #gREG::r0 + jsr MOUSE_GET +mse: lda #$00 ; mouse sprite + jmp SPRITE_SET_POSITION ; -------------------------------------------------------------------------- ; Prepare to move the mouse pointer. @@ -53,13 +38,13 @@ draw: ; Fall through ; -------------------------------------------------------------------------- ; Move the mouse pointer X position to the value in .XA . -movex: ; Already set by drivers +movex: ; Already done by Kernal ; Fall through ; -------------------------------------------------------------------------- ; Move the mouse pointer Y position to the value in .XA . -movey: rts ; Already set by drivers +movey: rts ; Already done by Kernal ; -------------------------------------------------------------------------- ; Callback structure diff --git a/libsrc/cx16/videomode.s b/libsrc/cx16/videomode.s index e3a777b8e..8fe797449 100644 --- a/libsrc/cx16/videomode.s +++ b/libsrc/cx16/videomode.s @@ -1,10 +1,10 @@ ; -; 2019-11-06, Greg King +; 2020-01-06, Greg King ; ; /* Video mode defines */ ; #define VIDEOMODE_40x30 0x00 ; #define VIDEOMODE_80x60 0x02 -; #define VIDEOMODE_320x240 0x80 +; #define VIDEOMODE_320x200 0x80 ; #define VIDEOMODE_SWAP (-1) ; ; signed char __fastcall__ videomode (signed char Mode); @@ -16,29 +16,25 @@ .export _videomode - .import SCRMOD + .import SCREEN_SET_MODE + .include "cx16.inc" .proc _videomode - tax - clc ; (Get old mode) - jsr SCRMOD - pha - txa + ldx SCREEN_MODE ; Get old mode + phx - sec ; (Set new mode) - jsr SCRMOD + jsr SCREEN_SET_MODE pla ; Get back old mode - bcs @L1 ldx #>$0000 ; Clear high byte + bcs @L1 rts -; The new mode is invalid. Go back to the old mode. Return -1. +; The new mode is invalid. Go back to the old one. Return -1. -@L1: sec - jsr SCRMOD - lda #<-1 - tax +@L1: sta SCREEN_MODE + dex + txa rts .endproc diff --git a/libsrc/cx16/waitvsync.s b/libsrc/cx16/waitvsync.s index e8176916b..6316a0483 100644 --- a/libsrc/cx16/waitvsync.s +++ b/libsrc/cx16/waitvsync.s @@ -1,5 +1,5 @@ ; -; 2019-12-23, Greg King +; 2020-01-08, Greg King ; ; void waitvsync (void); ; /* Wait for the start of the next video field. */ @@ -12,10 +12,10 @@ .include "cx16.inc" _waitvsync: - ldx VIA1::PRA2 ; (TIMER is in RAM bank 0) - stz VIA1::PRA2 + ldx VIA1::PRA ; (TIMER is in RAM bank 0) + stz VIA1::PRA lda TIMER + 2 : cmp TIMER + 2 beq :- ; Wait for next jiffy - stx VIA1::PRA2 + stx VIA1::PRA rts From 0f08ae2c12829af9c7d4b7a7a47ff37528dd1ae1 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 18 Jan 2020 19:29:02 +0100 Subject: [PATCH 0062/2710] Minor cleanup. --- libsrc/apple2/videomode.s | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libsrc/apple2/videomode.s b/libsrc/apple2/videomode.s index 1da997472..65e582547 100644 --- a/libsrc/apple2/videomode.s +++ b/libsrc/apple2/videomode.s @@ -16,7 +16,7 @@ _videomode: ; Get and save current videomode flag bit RD80VID php - + ; If we are in 80 column mode then the 80 column firmware is ; known to be active so we can just print the ctrl-char code ; (even if this only means staying in the current videomode) @@ -29,18 +29,18 @@ _videomode: ; current state of the 80 column firmware nor want to fix it : cmp #$11 ; Ctrl-char code for 40 cols beq done - + ; If we are in 40 column mode and want to set 80 column mode ; then we first presume the 80 column firmware being already ; active and print the ctrl-char code (this causes a garbage ; char to be printed on the screen if isn't already active) jsr COUT - + ; If we successfully switched to 80 column mode then the 80 ; column firmware was in fact already active and we're done bit RD80VID bmi done - + ; The 80 column firmware isn't already active so we need to ; initialize it - causing the screen to be cleared and thus ; the garbage char printed above to be erased (but for some @@ -56,7 +56,7 @@ _videomode: ; Switch in LC bank 2 for R/O bit $C080 - + ; Return ctrl-char code for setting previous ; videomode using the saved videomode flag done: lda #$11 ; Ctrl-char code for 40 cols From 90a2edcfa2e759893a1df9f8108267b43f769faf Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 25 Jan 2020 04:13:04 -0500 Subject: [PATCH 0063/2710] Made cc65 detect a possibly missing argument at the end of a function argument list. (It could be a stray comma at the end of the list.) --- src/cc65/expr.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 904c3af01..e59f9b4d3 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1,7 +1,7 @@ /* expr.c ** ** 1998-06-21, Ullrich von Bassewitz -** 2017-12-05, Greg King +** 2020-01-25, Greg King */ @@ -278,9 +278,9 @@ static void WarnConstCompareResult (void) static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) -/* Parse a function parameter list and pass the parameters to the called -** function. Depending on several criteria this may be done by just pushing -** each parameter separately, or creating the parameter frame once and then +/* Parse a function parameter list, and pass the parameters to the called +** function. Depending on several criteria, this may be done by just pushing +** each parameter separately, or creating the parameter frame once, and then ** storing into this frame. ** The function returns the size of the parameters pushed. */ @@ -322,7 +322,7 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) /* Do we have more than one parameter in the frame? */ if (FrameParams > 1) { - /* Okeydokey, setup the frame */ + /* Okeydokey, set up the frame */ FrameOffs = StackPtr; g_space (FrameSize); StackPtr -= FrameSize; @@ -343,7 +343,7 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) /* Fetch the pointer to the next argument, check for too many args */ if (ParamCount <= Func->ParamCount) { /* Beware: If there are parameters with identical names, they - ** cannot go into the same symbol table, which means that in this + ** cannot go into the same symbol table, which means that, in this ** case of errorneous input, the number of nodes in the symbol ** table and ParamCount are NOT equal. We have to handle this case ** below to avoid segmentation violations. Since we know that this @@ -364,7 +364,7 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) /* End of param list reached, no ellipsis */ Error ("Too many arguments in function call"); } - /* Assume an ellipsis even in case of errors to avoid an error + /* Assume an ellipsis even in case of errors, to avoid an error ** message for each other argument. */ Ellipsis = 1; @@ -373,7 +373,7 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) /* Evaluate the parameter expression */ hie1 (&Expr); - /* If we don't have an argument spec, accept anything, otherwise + /* If we don't have an argument spec., accept anything; otherwise, ** convert the actual argument to the type needed. */ Flags = CF_NONE; @@ -433,6 +433,12 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) break; } NextToken (); + + /* Check for stray comma */ + if (CurTok.Tok == TOK_RPAREN) { + Error ("Argument expected after comma"); + break; + } } /* Check if we had enough parameters */ @@ -441,11 +447,11 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) } /* The function returns the size of all parameters pushed onto the stack. - ** However, if there are parameters missing (which is an error and was - ** flagged by the compiler) AND a stack frame was preallocated above, - ** we would loose track of the stackpointer and generate an internal error + ** However, if there are parameters missing (which is an error, and was + ** flagged by the compiler), AND a stack frame was preallocated above, + ** we would loose track of the stackpointer, and generate an internal error ** later. So we correct the value by the parameters that should have been - ** pushed to avoid an internal compiler error. Since an error was + ** pushed, to avoid an internal compiler error. Since an error was ** generated before, no code will be output anyway. */ return ParamSize + FrameSize; From a2bbb6f1be03e1285521da97ffa20622ad1449c1 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 25 Jan 2020 20:56:52 +0100 Subject: [PATCH 0064/2710] added regression test related to bug #1001 --- test/err/bug1001.c | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 test/err/bug1001.c diff --git a/test/err/bug1001.c b/test/err/bug1001.c new file mode 100644 index 000000000..62737c178 --- /dev/null +++ b/test/err/bug1001.c @@ -0,0 +1,10 @@ + +/* https://github.com/cc65/cc65/issues/1001 */ + +#include <stdio.h> + +int main(void) +{ + printf("test",); /* should be an error */ + return 0; +} From a59402d5f544efd6d608ba4fdd64dc3a6758d2e5 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 26 Jan 2020 02:18:04 +0100 Subject: [PATCH 0065/2710] store y first, then a. fix by willymanilly --- libsrc/c128/emd/c128-vdc.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/c128/emd/c128-vdc.s b/libsrc/c128/emd/c128-vdc.s index e359dcdb9..e294ddc18 100644 --- a/libsrc/c128/emd/c128-vdc.s +++ b/libsrc/c128/emd/c128-vdc.s @@ -341,12 +341,12 @@ vdcsetsrcaddr: stx VDC_ADDR_REG @L0: bit VDC_ADDR_REG bpl @L0 - sta VDC_DATA_REG + sty VDC_DATA_REG inx stx VDC_ADDR_REG @L1: bit VDC_ADDR_REG ; XXX: Test waiting for register 18 bpl @L1 - sty VDC_DATA_REG + sta VDC_DATA_REG rts vdcgetbyte: From f68cc06ec746ff6cc889d1a7b07ebd8769d7909c Mon Sep 17 00:00:00 2001 From: Daniel Serpell <daniel.serpell@gmail.com> Date: Sun, 26 Jan 2020 23:55:37 -0300 Subject: [PATCH 0066/2710] Fixes Atari OS devhdl_t, init field needs an JMP byte. This fixes issue #1002. --- include/_atarios.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/_atarios.h b/include/_atarios.h index c15a99439..5e1374fa5 100644 --- a/include/_atarios.h +++ b/include/_atarios.h @@ -120,8 +120,9 @@ struct __devhdl { void *put; /* address of PUT BYTE routine -1 */ void *status; /* address of GET STATUS routine -1 */ void *special; /* address od SPECIAL routine -1 */ + unsigned char jmp_inst; /* a "JMP" byte, should be $4C */ void (*init)(void); /* init routine (JMP INIT) */ - void *reserved; /* unused */ + unsigned char reserved; /* unused */ }; typedef struct __devhdl devhdl_t; From 5b11eb4bb95a9982f33f2c580318202afc0b0882 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 31 Dec 2019 15:55:51 +0800 Subject: [PATCH 0067/2710] Corrected check in OptTransfers2 for register usage. Fixed Issue 992. --- src/cc65/coptind.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index f2ece2cee..e35aa5bee 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -1471,7 +1471,7 @@ unsigned OptTransfers2 (CodeSeg* S) (N = CS_GetNextEntry (S, I)) != 0 && !CE_HasLabel (N) && (N->Info & OF_XFR) != 0 && - GetRegInfo (S, I+2, E->Chg) != E->Chg) { + (GetRegInfo (S, I+2, E->Chg) & E->Chg) == 0) { CodeEntry* X = 0; From 9559625ee874434dff7a015191cb14e2303b96b3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 31 Dec 2019 16:02:42 +0800 Subject: [PATCH 0068/2710] Always insert a LDA after the removed PLA during the optimization in OptPushPop. Fixed Issue 971. --- src/cc65/coptind.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index e35aa5bee..318f9593b 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -1948,17 +1948,22 @@ unsigned OptPushPop (CodeSeg* S) !MemAccess (S, Push+1, Pop-1, E)) { /* Insert a STA after the PHA */ - X = NewCodeEntry (E->OPC, E->AM, E->Arg, E->JumpTo, E->LI); + X = NewCodeEntry (OP65_STA, E->AM, E->Arg, E->JumpTo, E->LI); CS_InsertEntry (S, X, Push+1); /* Remove the PHA instead */ CS_DelEntry (S, Push); + /* Insert a LDA after the PLA */ + X = NewCodeEntry (OP65_LDA, E->AM, E->Arg, E->JumpTo, CS_GetEntry (S, Pop)->LI); + CS_InsertEntry (S, X, Pop+1); + /* Remove the PLA/STA sequence */ - CS_DelEntries (S, Pop, 2); + CS_DelEntry (S, Pop); + CS_DelEntry (S, I); /* Correct I so we continue with the next insn */ - I -= 2; + --I; /* Remember we had changes */ ++Changes; From 6d530931bfc58c925107d2cae10bc2ebe067217b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 1 Jan 2020 23:44:35 +0800 Subject: [PATCH 0069/2710] Quick fix for the OptPushPop bug reported in Issue #337. --- src/cc65/coptind.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index 318f9593b..85901d0f9 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -1968,7 +1968,7 @@ unsigned OptPushPop (CodeSeg* S) /* Remember we had changes */ ++Changes; - } else if ((E->Info & OF_CBRA) == 0 && + } else if (!CE_UseLoadFlags (E) && (!RegAUsed (S, I) || !ChgA)) { /* We can remove the PHA and PLA instructions */ From dc5114b0713fd4a8294e81dab83b8ecb59813d41 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 3 Jan 2020 07:43:51 +0800 Subject: [PATCH 0070/2710] Just disable OptPushPop if N/Z is used after the PLA. This is a more conservative way to fix Issue #971. --- src/cc65/coptind.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index 85901d0f9..04deb0119 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -1892,6 +1892,7 @@ unsigned OptPushPop (CodeSeg* S) while (I < CS_GetEntryCount (S)) { CodeEntry* X; + CodeEntry* N; /* Get next entry */ CodeEntry* E = CS_GetEntry (S, I); @@ -1944,7 +1945,9 @@ unsigned OptPushPop (CodeSeg* S) if (E->OPC == OP65_STA && (E->AM == AM65_ABS || E->AM == AM65_ZP) && !CE_HasLabel (E) && - !RegAUsed (S, I+1) && + ((N = CS_GetNextEntry (S, I)) == 0 || + (!CE_UseLoadFlags (N) && + !RegAUsed (S, I+1))) && !MemAccess (S, Push+1, Pop-1, E)) { /* Insert a STA after the PHA */ @@ -1954,16 +1957,11 @@ unsigned OptPushPop (CodeSeg* S) /* Remove the PHA instead */ CS_DelEntry (S, Push); - /* Insert a LDA after the PLA */ - X = NewCodeEntry (OP65_LDA, E->AM, E->Arg, E->JumpTo, CS_GetEntry (S, Pop)->LI); - CS_InsertEntry (S, X, Pop+1); - /* Remove the PLA/STA sequence */ - CS_DelEntry (S, Pop); - CS_DelEntry (S, I); + CS_DelEntries (S, Pop, 2); /* Correct I so we continue with the next insn */ - --I; + I -= 2; /* Remember we had changes */ ++Changes; From ce80624f627ba887cf01d01d3f7c9dc02538a536 Mon Sep 17 00:00:00 2001 From: IrgendwerA8 <c.krueger.b@web.de> Date: Thu, 2 Jan 2020 18:57:03 +0100 Subject: [PATCH 0071/2710] ctype size optimization --- asminc/ctype.inc | 16 +- asminc/ctype_common.inc | 91 ++++++ asminc/ctype_console.inc | 92 +++++++ asminc/ctypetable.inc | 48 ++++ doc/cc65.sgml | 5 +- doc/funcref.sgml | 67 ----- include/ctype.h | 101 +------ libsrc/apple2/ctype.s | 160 +---------- libsrc/atari/ctype.s | 425 ++++++++++------------------ libsrc/atari2600/ctype.s | 161 +---------- libsrc/atmos/ctype.s | 426 ++++++++++------------------- libsrc/cbm/ctype.s | 417 ++++++++++------------------ libsrc/common/atoi.s | 22 +- libsrc/common/ctype_preprocessor.s | 50 ++++ libsrc/common/isalnum.s | 24 +- libsrc/common/isalpha.s | 24 +- libsrc/common/isascii.s | 27 ++ libsrc/common/isblank.s | 24 +- libsrc/common/iscntrl.s | 24 +- libsrc/common/isdigit.s | 24 +- libsrc/common/isgraph.s | 28 +- libsrc/common/islower.s | 22 +- libsrc/common/isprint.s | 26 +- libsrc/common/ispunct.s | 29 +- libsrc/common/isspace.s | 24 +- libsrc/common/isupper.s | 24 +- libsrc/common/isxdigit.s | 24 +- libsrc/common/stricmp.s | 43 +-- libsrc/common/strlower.s | 9 +- libsrc/common/strnicmp.s | 36 +-- libsrc/common/strupper.s | 8 +- libsrc/creativision/ctype.s | 171 +----------- libsrc/gamate/ctype.s | 160 +---------- libsrc/geos-common/system/ctype.s | 422 ++++++++++------------------ libsrc/lynx/ctype.s | 171 +----------- libsrc/nes/ctype.s | 171 +----------- libsrc/none/ctype.s | 158 +---------- libsrc/osic1p/ctype.s | 158 +---------- libsrc/pce/ctype.s | 157 +---------- libsrc/sim6502/ctype.s | 158 +---------- libsrc/supervision/ctype.s | 161 +---------- libsrc/telestrat/ctype.s | 298 +------------------- test/val/lib_common_ctype.c | 368 +++++++++++++++++++++++++ 43 files changed, 1491 insertions(+), 3563 deletions(-) create mode 100644 asminc/ctype_common.inc create mode 100644 asminc/ctype_console.inc create mode 100644 asminc/ctypetable.inc create mode 100644 libsrc/common/ctype_preprocessor.s create mode 100644 libsrc/common/isascii.s create mode 100644 test/val/lib_common_ctype.c diff --git a/asminc/ctype.inc b/asminc/ctype.inc index d6b0ccf46..401e772a2 100644 --- a/asminc/ctype.inc +++ b/asminc/ctype.inc @@ -1,12 +1,14 @@ +; ctype.inc +; +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. ; ; Definitions for the character type tables ; -; Ullrich von Bassewitz, 08.09.2001 -; - -; Make the __ctype table an exported/imported symbol - - .global __ctype ; Define bitmapped constants for the table entries @@ -25,5 +27,3 @@ CT_ALNUM = (CT_LOWER | CT_UPPER | CT_DIGIT) CT_ALPHA = (CT_LOWER | CT_UPPER) CT_CTRL_SPACE = (CT_CTRL | CT_SPACE) CT_NOT_PUNCT = (CT_SPACE | CT_CTRL | CT_DIGIT | CT_UPPER | CT_LOWER) - - diff --git a/asminc/ctype_common.inc b/asminc/ctype_common.inc new file mode 100644 index 000000000..ffd8dfe0e --- /dev/null +++ b/asminc/ctype_common.inc @@ -0,0 +1,91 @@ +; ctype_common.inc +; +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. +; +; Character specification table for some common targets. +; + + .include "ctypetable.inc" + .export __ctypeIdx + +; The tables are readonly, put them into the rodata segment + +.rodata + +__ctypeIdx: + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 0/00 ___ctrl_@___, 1/01 ___ctrl_A___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 2/02 ___ctrl_B___, 3/03 ___ctrl_C___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 4/04 ___ctrl_D___, 5/05 ___ctrl_E___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 6/06 ___ctrl_F___, 7/07 ___ctrl_G___ + ct_mix CT_CTRL_IDX, CT_CTRL_WS_SPACETAB_IDX ; 8/08 ___ctrl_H___, 9/09 ___ctrl_I___ + ct_mix CT_CTRL_WS_IDX, CT_CTRL_WS_IDX ; 10/0a ___ctrl_J___, 11/0b ___ctrl_K___ + ct_mix CT_CTRL_WS_IDX, CT_CTRL_WS_IDX ; 12/0c ___ctrl_L___, 13/0d ___ctrl_M___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 14/0e ___ctrl_N___, 15/0f ___ctrl_O___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 16/10 ___ctrl_P___, 17/11 ___ctrl_Q___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 18/12 ___ctrl_R___, 19/13 ___ctrl_S___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 20/14 ___ctrl_T___, 21/15 ___ctrl_U___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 22/16 ___ctrl_V___, 23/17 ___ctrl_W___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 24/18 ___ctrl_X___, 25/19 ___ctrl_Y___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 26/1a ___ctrl_Z___, 27/1b ___ctrl_[___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 28/1c ___ctrl_\___, 29/1d ___ctrl_]___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 30/1e ___ctrl_^___, 31/1f ___ctrl_____ + + ct_mix CT_SPACE_SPACETAB_IDX, CT_NONE_IDX ; 32/20 ___SPACE___, 33/21 _____!_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 34/22 _____"_____, 35/23 _____#_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 36/24 _____$_____, 37/25 _____%_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 38/26 _____&_____, 39/27 _____'_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 40/28 _____(_____, 41/29 _____)_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 42/2a _____*_____, 43/2b _____+_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 44/2c _____,_____, 45/2d _____-_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 46/2e _____._____, 47/2f _____/_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 48/30 _____0_____, 49/31 _____1_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 50/32 _____2_____, 51/33 _____3_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 52/34 _____4_____, 53/35 _____5_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 54/36 _____6_____, 55/37 _____7_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 56/38 _____8_____, 57/39 _____9_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 58/3a _____:_____, 59/3b _____;_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 60/3c _____<_____, 61/3d _____=_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 62/3e _____>_____, 63/3f _____?_____ + + ct_mix CT_NONE_IDX, CT_UPPER_XDIGIT_IDX ; 64/40 _____@_____, 65/41 _____A_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 66/42 _____B_____, 67/43 _____C_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 68/44 _____D_____, 69/45 _____E_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_IDX ; 70/46 _____F_____, 71/47 _____G_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 72/48 _____H_____, 73/49 _____I_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 74/4a _____J_____, 75/4b _____K_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 76/4c _____L_____, 77/4d _____M_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 78/4e _____N_____, 79/4f _____O_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 80/50 _____P_____, 81/51 _____Q_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 82/52 _____R_____, 83/53 _____S_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 84/54 _____T_____, 85/55 _____U_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 86/56 _____V_____, 87/57 _____W_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 88/58 _____X_____, 89/59 _____Y_____ + ct_mix CT_UPPER_IDX, CT_NONE_IDX ; 90/5a _____Z_____, 91/5b _____[_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 92/5c _____\_____, 93/5d _____]_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 94/5e _____^_____, 95/5f _UNDERLINE_ + + ct_mix CT_NONE_IDX, CT_LOWER_XDIGIT_IDX ; 96/60 ___grave___, 97/61 _____a_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 98/62 _____b_____, 99/63 _____c_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 100/64 _____d_____, 101/65 _____e_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_IDX ; 102/66 _____f_____, 103/67 _____g_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 104/68 _____h_____, 105/69 _____i_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 106/6a _____j_____, 107/6b _____k_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 108/6c _____l_____, 109/6d _____m_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 110/6e _____n_____, 111/6f _____o_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 112/70 _____p_____, 113/71 _____q_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 114/72 _____r_____, 115/73 _____s_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 116/74 _____t_____, 117/75 _____u_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 118/76 _____v_____, 119/77 _____w_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 120/78 _____x_____, 121/79 _____y_____ + ct_mix CT_LOWER_IDX, CT_NONE_IDX ; 122/7a _____z_____, 123/7b _____{_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 124/7c _____|_____, 125/7d _____}_____ + ct_mix CT_NONE_IDX, CT_WS_IDX ; 126/7e _____~_____, 127/7f ____DEL____ + +.repeat 64 + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 128-255 +.endrepeat diff --git a/asminc/ctype_console.inc b/asminc/ctype_console.inc new file mode 100644 index 000000000..55db8e615 --- /dev/null +++ b/asminc/ctype_console.inc @@ -0,0 +1,92 @@ +; ctype_console.inc +; +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. +; +; Character specification table, matching serveral consoles. +; + + .include "ctypetable.inc" + .export __ctypeIdx + +; The tables are readonly, put them into the rodata segment + +.rodata + +__ctypeIdx: + +.repeat 2 ; 2 times for normal and inverted + + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 0/00 ___ctrl_@___, 1/01 ___ctrl_A___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 2/02 ___ctrl_B___, 3/03 ___ctrl_C___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 4/04 ___ctrl_D___, 5/05 ___ctrl_E___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 6/06 ___ctrl_F___, 7/07 ___ctrl_G___ + ct_mix CT_CTRL_IDX, CT_CTRL_WS_SPACETAB_IDX ; 8/08 ___ctrl_H___, 9/09 ___ctrl_I___ + ct_mix CT_CTRL_WS_IDX, CT_CTRL_WS_IDX ; 10/0a ___ctrl_J___, 11/0b ___ctrl_K___ + ct_mix CT_CTRL_WS_IDX, CT_CTRL_WS_IDX ; 12/0c ___ctrl_L___, 13/0d ___ctrl_M___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 14/0e ___ctrl_N___, 15/0f ___ctrl_O___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 16/10 ___ctrl_P___, 17/11 ___ctrl_Q___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 18/12 ___ctrl_R___, 19/13 ___ctrl_S___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 20/14 ___ctrl_T___, 21/15 ___ctrl_U___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 22/16 ___ctrl_V___, 23/17 ___ctrl_W___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 24/18 ___ctrl_X___, 25/19 ___ctrl_Y___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 26/1a ___ctrl_Z___, 27/1b ___ctrl_[___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 28/1c ___ctrl_\___, 29/1d ___ctrl_]___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 30/1e ___ctrl_^___, 31/1f ___ctrl_____ + + ct_mix CT_SPACE_SPACETAB_IDX, CT_NONE_IDX ; 32/20 ___SPACE___, 33/21 _____!_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 34/22 _____"_____, 35/23 _____#_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 36/24 _____$_____, 37/25 _____%_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 38/26 _____&_____, 39/27 _____'_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 40/28 _____(_____, 41/29 _____)_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 42/2a _____*_____, 43/2b _____+_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 44/2c _____,_____, 45/2d _____-_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 46/2e _____._____, 47/2f _____/_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 48/30 _____0_____, 49/31 _____1_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 50/32 _____2_____, 51/33 _____3_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 52/34 _____4_____, 53/35 _____5_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 54/36 _____6_____, 55/37 _____7_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 56/38 _____8_____, 57/39 _____9_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 58/3a _____:_____, 59/3b _____;_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 60/3c _____<_____, 61/3d _____=_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 62/3e _____>_____, 63/3f _____?_____ + + ct_mix CT_NONE_IDX, CT_UPPER_XDIGIT_IDX ; 64/40 _____@_____, 65/41 _____A_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 66/42 _____B_____, 67/43 _____C_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 68/44 _____D_____, 69/45 _____E_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_IDX ; 70/46 _____F_____, 71/47 _____G_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 72/48 _____H_____, 73/49 _____I_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 74/4a _____J_____, 75/4b _____K_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 76/4c _____L_____, 77/4d _____M_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 78/4e _____N_____, 79/4f _____O_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 80/50 _____P_____, 81/51 _____Q_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 82/52 _____R_____, 83/53 _____S_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 84/54 _____T_____, 85/55 _____U_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 86/56 _____V_____, 87/57 _____W_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 88/58 _____X_____, 89/59 _____Y_____ + ct_mix CT_UPPER_IDX, CT_NONE_IDX ; 90/5a _____Z_____, 91/5b _____[_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 92/5c _____\_____, 93/5d _____]_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 94/5e _____^_____, 95/5f _UNDERLINE_ + + ct_mix CT_NONE_IDX, CT_LOWER_XDIGIT_IDX ; 96/60 ___grave___, 97/61 _____a_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 98/62 _____b_____, 99/63 _____c_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 100/64 _____d_____, 101/65 _____e_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_IDX ; 102/66 _____f_____, 103/67 _____g_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 104/68 _____h_____, 105/69 _____i_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 106/6a _____j_____, 107/6b _____k_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 108/6c _____l_____, 109/6d _____m_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 110/6e _____n_____, 111/6f _____o_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 112/70 _____p_____, 113/71 _____q_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 114/72 _____r_____, 115/73 _____s_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 116/74 _____t_____, 117/75 _____u_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 118/76 _____v_____, 119/77 _____w_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 120/78 _____x_____, 121/79 _____y_____ + ct_mix CT_LOWER_IDX, CT_NONE_IDX ; 122/7a _____z_____, 123/7b _____{_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 124/7c _____|_____, 125/7d _____}_____ + ct_mix CT_NONE_IDX, CT_WS_IDX ; 126/7e _____~_____, 127/7f ____DEL____ + +.endrepeat diff --git a/asminc/ctypetable.inc b/asminc/ctypetable.inc new file mode 100644 index 000000000..e0a8bdcd3 --- /dev/null +++ b/asminc/ctypetable.inc @@ -0,0 +1,48 @@ +; ctypetable.inc +; +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. +; +; Data covering all possible combinations of character flags for target specific definition +; + +.include "ctype.inc" +.export __ctype + +; This data is a table of possible ctype combinations, possible during + +.rodata +__ctype: +ct_none: .byte CT_NONE +ct_lower: .byte CT_LOWER +ct_upper: .byte CT_UPPER +ct_digit_xdigit: .byte CT_DIGIT | CT_XDIGIT +ct_lower_xdigit: .byte CT_LOWER | CT_XDIGIT +ct_upper_xdigit: .byte CT_UPPER | CT_XDIGIT +ct_ctrl: .byte CT_CTRL +ct_ws: .byte CT_OTHER_WS +ct_ctrl_ws: .byte CT_CTRL | CT_OTHER_WS +ct_space_spacetab: .byte CT_SPACE | CT_SPACE_TAB +ct_ctrl_ws_spacetab: .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB + +; build indices out of the table above: + +CT_NONE_IDX = ct_none - __ctype +CT_LOWER_IDX = ct_lower - __ctype +CT_UPPER_IDX = ct_upper - __ctype +CT_DIGIT_XDIGIT_IDX = ct_digit_xdigit - __ctype +CT_LOWER_XDIGIT_IDX = ct_lower_xdigit - __ctype +CT_UPPER_XDIGIT_IDX = ct_upper_xdigit - __ctype +CT_CTRL_IDX = ct_ctrl - __ctype +CT_WS_IDX = ct_ws - __ctype +CT_CTRL_WS_IDX = ct_ctrl_ws - __ctype +CT_SPACE_SPACETAB_IDX = ct_space_spacetab - __ctype +CT_CTRL_WS_SPACETAB_IDX = ct_ctrl_ws_spacetab - __ctype + +.macro ct_mix lower, upper + .byte ((lower) & $0F) | ((upper) << 4) +.endmacro diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 8691f9471..dba0a0288 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -249,7 +249,6 @@ Here is a description of all the command line options: <item><tt/strcmp()/ <item><tt/strcpy()/ <item><tt/strlen()/ - <item>most of the functions declared in <tt/<ctype.h>/ </itemize> Note: This has two consequences: @@ -259,9 +258,7 @@ Here is a description of all the command line options: using <tt/--eagerly-inline-funcs/ actually will break things. <p> <item>The inlined string and memory functions will not handle strings or - memory areas larger than 255 bytes. Similarly, the inlined <tt/is..()/ - functions will not work with values outside the char. range (such as - <tt/EOF/). + memory areas larger than 255 bytes. <p> </itemize> diff --git a/doc/funcref.sgml b/doc/funcref.sgml index b6171a0ef..94e850092 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -4232,11 +4232,6 @@ to undefined behaviour. is a letter or digit. The return value is zero if the character is anything else. <tag/Notes/<itemize> -<item>When compiling with <tt/-Os/ the function is actually a macro. The -inline sequence generated by the macro will not work correctly for values -outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of -this range. The non inline function may be accessed by <tt/#undef/'ing -the macro. <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> @@ -4269,11 +4264,6 @@ fastcall function, so it may only be used in presence of a prototype. <tag/Description/The function returns a non zero value if the given argument is a letter. The return value is zero if the character is anything else. <tag/Notes/<itemize> -<item>When compiling with <tt/-Os/ the function is actually a macro. The -inline sequence generated by the macro will not work correctly for values -outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of -this range. The non inline function may be accessed by <tt/#undef/'ing the -macro. <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> @@ -4305,12 +4295,6 @@ fastcall function, so it may only be used in presence of a prototype. <tag/Declaration/<tt/int __fastcall__ isascii (int c);/ <tag/Description/The function returns a non zero value if the given argument is in the range 0..127 (the range of valid ASCII characters) and zero if not. -<tag/Notes/<itemize> -<item>When compiling with <tt/-Os/ the function is actually a macro. The -inline sequence generated by the macro will not work correctly for values -outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of -this range. The non inline function may be accessed by <tt/#undef/'ing the -macro. <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> @@ -4344,11 +4328,6 @@ fastcall function, so it may only be used in presence of a prototype. is a space or tab character. The return value is zero if the character is anything else. <tag/Notes/<itemize> -<item>When compiling with <tt/-Os/ the function is actually a macro. The -inline sequence generated by the macro will not work correctly for values -outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of -this range. The non inline function may be accessed by <tt/#undef/'ing the -macro. <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> @@ -4382,11 +4361,6 @@ fastcall function, so it may only be used in presence of a prototype. is a control character. The return value is zero if the character is anything else. <tag/Notes/<itemize> -<item>When compiling with <tt/-Os/ the function is actually a macro. The -inline sequence generated by the macro will not work correctly for values -outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of -this range. The non inline function may be accessed by <tt/#undef/'ing the -macro. <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> @@ -4418,12 +4392,6 @@ fastcall function, so it may only be used in presence of a prototype. <tag/Declaration/<tt/int __fastcall__ isdigit (int c);/ <tag/Description/The function returns a non zero value if the given argument is a digit. The return value is zero if the character is anything else. -<tag/Notes/<itemize> -<item>When compiling with <tt/-Os/ the function is actually a macro. The -inline sequence generated by the macro will not work correctly for values -outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of -this range. The non inline function may be accessed by <tt/#undef/'ing the -macro. <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> @@ -4479,11 +4447,6 @@ space). is a printable character with the exception of space. The return value is zero if the character is anything else. <tag/Notes/<itemize> -<item>When compiling with <tt/-Os/ the function is actually a macro. The -inline sequence generated by the macro will not work correctly for values -outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of -this range. The non inline function may be accessed by <tt/#undef/'ing the -macro. <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> @@ -4517,11 +4480,6 @@ fastcall function, so it may only be used in presence of a prototype. is a lower case letter. The return value is zero if the character is anything else. <tag/Notes/<itemize> -<item>When compiling with <tt/-Os/ the function is actually a macro. The -inline sequence generated by the macro will not work correctly for values -outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of -this range. The non inline function may be accessed by <tt/#undef/'ing the -macro. <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> @@ -4555,11 +4513,6 @@ fastcall function, so it may only be used in presence of a prototype. is a printable character (this includes the space character). The return value is zero if the character is anything else. <tag/Notes/<itemize> -<item>When compiling with <tt/-Os/ the function is actually a macro. The -inline sequence generated by the macro will not work correctly for values -outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of -this range. The non inline function may be accessed by <tt/#undef/'ing the -macro. <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> @@ -4594,11 +4547,6 @@ space or an alphanumeric character. is a printable character, but not a space or anything alphanumeric. The return value is zero if the character is anything else. <tag/Notes/<itemize> -<item>When compiling with <tt/-Os/ the function is actually a macro. The -inline sequence generated by the macro will not work correctly for values -outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of -this range. The non inline function may be accessed by <tt/#undef/'ing the -macro. <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> @@ -4634,11 +4582,6 @@ anything else. The standard white space characters are: space, formfeed ('\f'), newline ('\n'), carriage return ('\r'), horizontal tab ('\t'), and vertical tab ('\v'). <tag/Notes/<itemize> -<item>When compiling with <tt/-Os/ the function is actually a macro. The -inline sequence generated by the macro will not work correctly for values -outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of -this range. The non inline function may be accessed by <tt/#undef/'ing the -macro. <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> @@ -4672,11 +4615,6 @@ fastcall function, so it may only be used in presence of a prototype. is an upper case letter. The return value is zero if the character is anything else. <tag/Notes/<itemize> -<item>When compiling with <tt/-Os/ the function is actually a macro. The -inline sequence generated by the macro will not work correctly for values -outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of -this range. The non inline function may be accessed by <tt/#undef/'ing the -macro. <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> @@ -4710,11 +4648,6 @@ fastcall function, so it may only be used in presence of a prototype. is a hexadecimal digit (0..9, a..f and A..F). The return value is zero if the character is anything else. <tag/Notes/<itemize> -<item>When compiling with <tt/-Os/ the function is actually a macro. The -inline sequence generated by the macro will not work correctly for values -outside the range 0..255. <em/Note:/ The constant <tt/EOF/ is not part of -this range. The non inline function may be accessed by <tt/#undef/'ing the -macro. <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> diff --git a/include/ctype.h b/include/ctype.h index 103f6cc22..d842228e9 100644 --- a/include/ctype.h +++ b/include/ctype.h @@ -36,10 +36,6 @@ #ifndef _CTYPE_H #define _CTYPE_H - -/* The array containing character classification data */ -extern unsigned char _ctype[256]; - /* Bits used to specify character classes */ #define _CT_LOWER 0x01 /* 0 - Lower case char */ #define _CT_UPPER 0x02 /* 1 - Upper case char */ @@ -61,6 +57,7 @@ extern unsigned char _ctype[256]; /* Character classification functions */ int __fastcall__ isalnum (int c); int __fastcall__ isalpha (int c); +int __fastcall__ isascii (int c); int __fastcall__ iscntrl (int c); int __fastcall__ isdigit (int c); int __fastcall__ isgraph (int c); @@ -82,102 +79,6 @@ unsigned char __fastcall__ toascii (unsigned char c); /* Convert a target-specific character to ASCII. */ #endif - - -/* When --eagerly-inline-funcs is enabled, overload most of the above -** functions by macroes. The function prototypes are available again after -** #undef'ing the macroes. -** Please note that the following macroes do NOT handle EOF correctly, as -** stated in the manual. If you need correct behaviour for EOF, don't -** use --eagerly-inline-funcs, or #undefine the following macroes. -*/ -#ifdef __EAGERLY_INLINE_FUNCS__ - -#define isalnum(c) (__AX__ = (c), \ - __asm__ ("tay"), \ - __asm__ ("lda %v,y", _ctype), \ - __asm__ ("and #%b", _CT_ALNUM), \ - __AX__) - -#define isalpha(c) (__AX__ = (c), \ - __asm__ ("tay"), \ - __asm__ ("lda %v,y", _ctype), \ - __asm__ ("and #%b", _CT_ALPHA), \ - __AX__) - -#if __CC65_STD__ >= __CC65_STD_C99__ -#define isblank(c) (__AX__ = (c), \ - __asm__ ("tay"), \ - __asm__ ("lda %v,y", _ctype), \ - __asm__ ("and #%b", _CT_SPACE_TAB), \ - __AX__) -#endif - -#define iscntrl(c) (__AX__ = (c), \ - __asm__ ("tay"), \ - __asm__ ("lda %v,y", _ctype), \ - __asm__ ("and #%b", _CT_CNTRL), \ - __AX__) - -#define isdigit(c) (__AX__ = (c), \ - __asm__ ("tay"), \ - __asm__ ("lda %v,y", _ctype), \ - __asm__ ("and #%b", _CT_DIGIT), \ - __AX__) - -#define isgraph(c) (__AX__ = (c), \ - __asm__ ("tay"), \ - __asm__ ("lda %v,y", _ctype), \ - __asm__ ("and #%b", _CT_NOT_GRAPH), \ - __asm__ ("cmp #1"), \ - __asm__ ("lda #1"), \ - __asm__ ("sbc #1"), \ - __AX__) - -#define islower(c) (__AX__ = (c), \ - __asm__ ("tay"), \ - __asm__ ("lda %v,y", _ctype), \ - __asm__ ("and #%b", _CT_LOWER), \ - __AX__) - -#define isprint(c) (__AX__ = (c), \ - __asm__ ("tay"), \ - __asm__ ("lda %v,y", _ctype), \ - __asm__ ("and #%b", _CT_NOT_PRINT), \ - __asm__ ("eor #%b", _CT_NOT_PRINT), \ - __AX__) - -#define ispunct(c) (__AX__ = (c), \ - __asm__ ("tay"), \ - __asm__ ("lda %v,y", _ctype), \ - __asm__ ("and #%b", _CT_NOT_PUNCT), \ - __asm__ ("cmp #1"), \ - __asm__ ("lda #1"), \ - __asm__ ("sbc #1"), \ - __AX__) - -#define isspace(c) (__AX__ = (c), \ - __asm__ ("tay"), \ - __asm__ ("lda %v,y", _ctype), \ - __asm__ ("and #%b", _CT_WS), \ - __AX__) - -#define isupper(c) (__AX__ = (c), \ - __asm__ ("tay"), \ - __asm__ ("lda %v,y", _ctype), \ - __asm__ ("and #%b", _CT_UPPER), \ - __AX__) - -#define isxdigit(c) (__AX__ = (c), \ - __asm__ ("tay"), \ - __asm__ ("lda %v,y", _ctype), \ - __asm__ ("and #%b", _CT_XDIGIT), \ - __AX__) - -#endif - - - /* End of ctype.h */ #endif diff --git a/libsrc/apple2/ctype.s b/libsrc/apple2/ctype.s index fa9a65c8b..da4d38472 100644 --- a/libsrc/apple2/ctype.s +++ b/libsrc/apple2/ctype.s @@ -1,161 +1,5 @@ -; -; Stefan Haubenthal with minor changes from Ullrich von Bassewitz, 2003-05-02 -; ; Character specification table. ; +; uses the "console" definition - .include "ctype.inc" - -; The tables are readonly, put them into the rodata segment - -.rodata - -; The following 256 byte wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it were'nt for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. - - -__ctype: - .repeat 2 - .byte CT_CTRL ; 0/00 ___ctrl_@___ - .byte CT_CTRL ; 1/01 ___ctrl_A___ - .byte CT_CTRL ; 2/02 ___ctrl_B___ - .byte CT_CTRL ; 3/03 ___ctrl_C___ - .byte CT_CTRL ; 4/04 ___ctrl_D___ - .byte CT_CTRL ; 5/05 ___ctrl_E___ - .byte CT_CTRL ; 6/06 ___ctrl_F___ - .byte CT_CTRL ; 7/07 ___ctrl_G___ - .byte CT_CTRL ; 8/08 ___ctrl_H___ - .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB - ; 9/09 ___ctrl_I___ - .byte CT_CTRL | CT_OTHER_WS ; 10/0a ___ctrl_J___ - .byte CT_CTRL | CT_OTHER_WS ; 11/0b ___ctrl_K___ - .byte CT_CTRL | CT_OTHER_WS ; 12/0c ___ctrl_L___ - .byte CT_CTRL | CT_OTHER_WS ; 13/0d ___ctrl_M___ - .byte CT_CTRL ; 14/0e ___ctrl_N___ - .byte CT_CTRL ; 15/0f ___ctrl_O___ - .byte CT_CTRL ; 16/10 ___ctrl_P___ - .byte CT_CTRL ; 17/11 ___ctrl_Q___ - .byte CT_CTRL ; 18/12 ___ctrl_R___ - .byte CT_CTRL ; 19/13 ___ctrl_S___ - .byte CT_CTRL ; 20/14 ___ctrl_T___ - .byte CT_CTRL ; 21/15 ___ctrl_U___ - .byte CT_CTRL ; 22/16 ___ctrl_V___ - .byte CT_CTRL ; 23/17 ___ctrl_W___ - .byte CT_CTRL ; 24/18 ___ctrl_X___ - .byte CT_CTRL ; 25/19 ___ctrl_Y___ - .byte CT_CTRL ; 26/1a ___ctrl_Z___ - .byte CT_CTRL ; 27/1b ___ctrl_[___ - .byte CT_CTRL ; 28/1c ___ctrl_\___ - .byte CT_CTRL ; 29/1d ___ctrl_]___ - .byte CT_CTRL ; 30/1e ___ctrl_^___ - .byte CT_CTRL ; 31/1f ___ctrl_____ - .byte CT_SPACE | CT_SPACE_TAB ; 32/20 ___SPACE___ - .byte CT_NONE ; 33/21 _____!_____ - .byte CT_NONE ; 34/22 _____"_____ - .byte CT_NONE ; 35/23 _____#_____ - .byte CT_NONE ; 36/24 _____$_____ - .byte CT_NONE ; 37/25 _____%_____ - .byte CT_NONE ; 38/26 _____&_____ - .byte CT_NONE ; 39/27 _____'_____ - .byte CT_NONE ; 40/28 _____(_____ - .byte CT_NONE ; 41/29 _____)_____ - .byte CT_NONE ; 42/2a _____*_____ - .byte CT_NONE ; 43/2b _____+_____ - .byte CT_NONE ; 44/2c _____,_____ - .byte CT_NONE ; 45/2d _____-_____ - .byte CT_NONE ; 46/2e _____._____ - .byte CT_NONE ; 47/2f _____/_____ - .byte CT_DIGIT | CT_XDIGIT ; 48/30 _____0_____ - .byte CT_DIGIT | CT_XDIGIT ; 49/31 _____1_____ - .byte CT_DIGIT | CT_XDIGIT ; 50/32 _____2_____ - .byte CT_DIGIT | CT_XDIGIT ; 51/33 _____3_____ - .byte CT_DIGIT | CT_XDIGIT ; 52/34 _____4_____ - .byte CT_DIGIT | CT_XDIGIT ; 53/35 _____5_____ - .byte CT_DIGIT | CT_XDIGIT ; 54/36 _____6_____ - .byte CT_DIGIT | CT_XDIGIT ; 55/37 _____7_____ - .byte CT_DIGIT | CT_XDIGIT ; 56/38 _____8_____ - .byte CT_DIGIT | CT_XDIGIT ; 57/39 _____9_____ - .byte CT_NONE ; 58/3a _____:_____ - .byte CT_NONE ; 59/3b _____;_____ - .byte CT_NONE ; 60/3c _____<_____ - .byte CT_NONE ; 61/3d _____=_____ - .byte CT_NONE ; 62/3e _____>_____ - .byte CT_NONE ; 63/3f _____?_____ - - .byte CT_NONE ; 64/40 _____@_____ - .byte CT_UPPER | CT_XDIGIT ; 65/41 _____A_____ - .byte CT_UPPER | CT_XDIGIT ; 66/42 _____B_____ - .byte CT_UPPER | CT_XDIGIT ; 67/43 _____C_____ - .byte CT_UPPER | CT_XDIGIT ; 68/44 _____D_____ - .byte CT_UPPER | CT_XDIGIT ; 69/45 _____E_____ - .byte CT_UPPER | CT_XDIGIT ; 70/46 _____F_____ - .byte CT_UPPER ; 71/47 _____G_____ - .byte CT_UPPER ; 72/48 _____H_____ - .byte CT_UPPER ; 73/49 _____I_____ - .byte CT_UPPER ; 74/4a _____J_____ - .byte CT_UPPER ; 75/4b _____K_____ - .byte CT_UPPER ; 76/4c _____L_____ - .byte CT_UPPER ; 77/4d _____M_____ - .byte CT_UPPER ; 78/4e _____N_____ - .byte CT_UPPER ; 79/4f _____O_____ - .byte CT_UPPER ; 80/50 _____P_____ - .byte CT_UPPER ; 81/51 _____Q_____ - .byte CT_UPPER ; 82/52 _____R_____ - .byte CT_UPPER ; 83/53 _____S_____ - .byte CT_UPPER ; 84/54 _____T_____ - .byte CT_UPPER ; 85/55 _____U_____ - .byte CT_UPPER ; 86/56 _____V_____ - .byte CT_UPPER ; 87/57 _____W_____ - .byte CT_UPPER ; 88/58 _____X_____ - .byte CT_UPPER ; 89/59 _____Y_____ - .byte CT_UPPER ; 90/5a _____Z_____ - .byte CT_NONE ; 91/5b _____[_____ - .byte CT_NONE ; 92/5c _____\_____ - .byte CT_NONE ; 93/5d _____]_____ - .byte CT_NONE ; 94/5e _____^_____ - .byte CT_NONE ; 95/5f _UNDERLINE_ - .byte CT_NONE ; 96/60 ___grave___ - .byte CT_LOWER | CT_XDIGIT ; 97/61 _____a_____ - .byte CT_LOWER | CT_XDIGIT ; 98/62 _____b_____ - .byte CT_LOWER | CT_XDIGIT ; 99/63 _____c_____ - .byte CT_LOWER | CT_XDIGIT ; 100/64 _____d_____ - .byte CT_LOWER | CT_XDIGIT ; 101/65 _____e_____ - .byte CT_LOWER | CT_XDIGIT ; 102/66 _____f_____ - .byte CT_LOWER ; 103/67 _____g_____ - .byte CT_LOWER ; 104/68 _____h_____ - .byte CT_LOWER ; 105/69 _____i_____ - .byte CT_LOWER ; 106/6a _____j_____ - .byte CT_LOWER ; 107/6b _____k_____ - .byte CT_LOWER ; 108/6c _____l_____ - .byte CT_LOWER ; 109/6d _____m_____ - .byte CT_LOWER ; 110/6e _____n_____ - .byte CT_LOWER ; 111/6f _____o_____ - .byte CT_LOWER ; 112/70 _____p_____ - .byte CT_LOWER ; 113/71 _____q_____ - .byte CT_LOWER ; 114/72 _____r_____ - .byte CT_LOWER ; 115/73 _____s_____ - .byte CT_LOWER ; 116/74 _____t_____ - .byte CT_LOWER ; 117/75 _____u_____ - .byte CT_LOWER ; 118/76 _____v_____ - .byte CT_LOWER ; 119/77 _____w_____ - .byte CT_LOWER ; 120/78 _____x_____ - .byte CT_LOWER ; 121/79 _____y_____ - .byte CT_LOWER ; 122/7a _____z_____ - .byte CT_NONE ; 123/7b _____{_____ - .byte CT_NONE ; 124/7c _____|_____ - .byte CT_NONE ; 125/7d _____}_____ - .byte CT_NONE ; 126/7e _____~_____ - .byte CT_OTHER_WS ; 127/7f ____DEL____ - .endrepeat - - + .include "ctype_console.inc" diff --git a/libsrc/atari/ctype.s b/libsrc/atari/ctype.s index 73553dc15..8173b2ea8 100644 --- a/libsrc/atari/ctype.s +++ b/libsrc/atari/ctype.s @@ -1,301 +1,156 @@ +; ctype.s ; -; Ullrich von Bassewitz, 02.06.1998 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems ; -; Character specification table. +; https://github.com/cc65/cc65 ; -; adapted to Atari by Christian Groessler, June 2000 +; See "LICENSE" file for legal information. +; +; Atari character specification table. ; + .include "ctypetable.inc" + .export __ctypeIdx + ; The tables are readonly, put them into the rodata segment .rodata -; The following 256 byte wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it were'nt for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. -; -; -; Bit assignments: -; -; 0 - Lower case char -; 1 - Upper case char -; 2 - Numeric digit -; 3 - Hex digit (both, lower and upper) -; 4 - Control character -; 5 - The space character itself -; 6 - Other whitespace (that is: '\f', '\n', '\r', '\t' and '\v') -; 7 - Space or tab character +__ctypeIdx: + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 0/00 ___heart____, 1/01 ___l_tee____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 2/02 ___ctrl_B___, 3/03 ___ctrl_C___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 4/04 ___r_tee____, 5/05 ___ctrl_E___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 6/06 ___ctrl_F___, 7/07 ___ctrl_G___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 8/08 ___ctrl_H___, 9/09 ___ctrl_I___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 10/0a ___ctrl_J___, 11/0b ___ctrl_K___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 12/0c ___ctrl_L___, 13/0d ___ctrl_M___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 14/0e ___ctrl_N___, 15/0f ___ctrl_O___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 16/10 ____club____, 17/11 ___ctrl_Q___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 18/12 ___h_line___, 19/13 ___ctrl_S___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 20/14 ____ball____, 21/15 ___ctrl_U___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 22/16 ___ctrl_V___, 23/17 ___t_tee____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 24/18 ___b_tee____, 25/19 ___ctrl_Y___ + ct_mix CT_NONE_IDX, CT_CTRL_IDX ; 26/1a ___ctrl_Z___, 27/1b ____ESC_____ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 28/1c ___crsr_up__, 29/1d ___crsr_dn__ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 30/1e ___crsr_lf__, 31/1f ___crsr_rg__ - .export __ctype + ct_mix CT_SPACE_SPACETAB_IDX, CT_NONE_IDX ; 32/20 ___SPACE___, 33/21 _____!_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 34/22 _____"_____, 35/23 _____#_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 36/24 _____$_____, 37/25 _____%_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 38/26 _____&_____, 39/27 _____'_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 40/28 _____(_____, 41/29 _____)_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 42/2a _____*_____, 43/2b _____+_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 44/2c _____,_____, 45/2d _____-_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 46/2e _____._____, 47/2f _____/_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 48/30 _____0_____, 49/31 _____1_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 50/32 _____2_____, 51/33 _____3_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 52/34 _____4_____, 53/35 _____5_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 54/36 _____6_____, 55/37 _____7_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 56/38 _____8_____, 57/39 _____9_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 58/3a _____:_____, 59/3b _____;_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 60/3c _____<_____, 61/3d _____=_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 62/3e _____>_____, 63/3f _____?_____ -__ctype: - .byte $00 ; 0/00 ___heart____ - .byte $00 ; 1/01 ___l_tee____ - .byte $00 ; 2/02 ___ctrl_B___ - .byte $00 ; 3/03 ___ctrl_C___ - .byte $00 ; 4/04 ___r_tee____ - .byte $00 ; 5/05 ___ctrl_E___ - .byte $00 ; 6/06 ___ctrl_F___ - .byte $00 ; 7/07 ___ctrl_G___ - .byte $00 ; 8/08 ___ctrl_H___ - .byte $00 ; 9/09 ___ctrl_I___ - .byte $00 ; 10/0a ___ctrl_J___ - .byte $00 ; 11/0b ___ctrl_K___ - .byte $00 ; 12/0c ___ctrl_L___ - .byte $00 ; 13/0d ___ctrl_M___ - .byte $00 ; 14/0e ___ctrl_N___ - .byte $00 ; 15/0f ___ctrl_O___ - .byte $00 ; 16/10 ____club____ - .byte $00 ; 17/11 ___ctrl_Q___ - .byte $00 ; 18/12 ___h_line___ - .byte $00 ; 19/13 ___ctrl_S___ - .byte $00 ; 20/14 ____ball____ - .byte $00 ; 21/15 ___ctrl_U___ - .byte $00 ; 22/16 ___ctrl_V___ - .byte $00 ; 23/17 ___t_tee____ - .byte $00 ; 24/18 ___b_tee____ - .byte $00 ; 25/19 ___ctrl_Y___ - .byte $00 ; 26/1a ___ctrl_Z___ - .byte $10 ; 27/1b ____ESC_____ - .byte $10 ; 28/1c ___crsr_up__ - .byte $10 ; 29/1d ___crsr_dn__ - .byte $10 ; 30/1e ___crsr_lf__ - .byte $10 ; 31/1f ___crsr_rg__ - .byte $A0 ; 32/20 ___SPACE___ - .byte $00 ; 33/21 _____!_____ - .byte $00 ; 34/22 _____"_____ - .byte $00 ; 35/23 _____#_____ - .byte $00 ; 36/24 _____$_____ - .byte $00 ; 37/25 _____%_____ - .byte $00 ; 38/26 _____&_____ - .byte $00 ; 39/27 _____'_____ - .byte $00 ; 40/28 _____(_____ - .byte $00 ; 41/29 _____)_____ - .byte $00 ; 42/2a _____*_____ - .byte $00 ; 43/2b _____+_____ - .byte $00 ; 44/2c _____,_____ - .byte $00 ; 45/2d _____-_____ - .byte $00 ; 46/2e _____._____ - .byte $00 ; 47/2f _____/_____ - .byte $0C ; 48/30 _____0_____ - .byte $0C ; 49/31 _____1_____ - .byte $0C ; 50/32 _____2_____ - .byte $0C ; 51/33 _____3_____ - .byte $0C ; 52/34 _____4_____ - .byte $0C ; 53/35 _____5_____ - .byte $0C ; 54/36 _____6_____ - .byte $0C ; 55/37 _____7_____ - .byte $0C ; 56/38 _____8_____ - .byte $0C ; 57/39 _____9_____ - .byte $00 ; 58/3a _____:_____ - .byte $00 ; 59/3b _____;_____ - .byte $00 ; 60/3c _____<_____ - .byte $00 ; 61/3d _____=_____ - .byte $00 ; 62/3e _____>_____ - .byte $00 ; 63/3f _____?_____ + ct_mix CT_NONE_IDX, CT_UPPER_XDIGIT_IDX ; 64/40 _____@_____, 65/41 _____A_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 66/42 _____B_____, 67/43 _____C_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 68/44 _____D_____, 69/45 _____E_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_IDX ; 70/46 _____F_____, 71/47 _____G_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 72/48 _____H_____, 73/49 _____I_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 74/4a _____J_____, 75/4b _____K_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 76/4c _____L_____, 77/4d _____M_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 78/4e _____N_____, 79/4f _____O_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 80/50 _____P_____, 81/51 _____Q_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 82/52 _____R_____, 83/53 _____S_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 84/54 _____T_____, 85/55 _____U_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 86/56 _____V_____, 87/57 _____W_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 88/58 _____X_____, 89/59 _____Y_____ + ct_mix CT_UPPER_IDX, CT_NONE_IDX ; 90/5a _____Z_____, 91/5b _____[_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 92/5c _____\_____, 93/5d _____]_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 94/5e _____^_____, 95/5f _UNDERLINE_ - .byte $00 ; 64/40 _____@_____ - .byte $0A ; 65/41 _____A_____ - .byte $0A ; 66/42 _____B_____ - .byte $0A ; 67/43 _____C_____ - .byte $0A ; 68/44 _____D_____ - .byte $0A ; 69/45 _____E_____ - .byte $0A ; 70/46 _____F_____ - .byte $02 ; 71/47 _____G_____ - .byte $02 ; 72/48 _____H_____ - .byte $02 ; 73/49 _____I_____ - .byte $02 ; 74/4a _____J_____ - .byte $02 ; 75/4b _____K_____ - .byte $02 ; 76/4c _____L_____ - .byte $02 ; 77/4d _____M_____ - .byte $02 ; 78/4e _____N_____ - .byte $02 ; 79/4f _____O_____ - .byte $02 ; 80/50 _____P_____ - .byte $02 ; 81/51 _____Q_____ - .byte $02 ; 82/52 _____R_____ - .byte $02 ; 83/53 _____S_____ - .byte $02 ; 84/54 _____T_____ - .byte $02 ; 85/55 _____U_____ - .byte $02 ; 86/56 _____V_____ - .byte $02 ; 87/57 _____W_____ - .byte $02 ; 88/58 _____X_____ - .byte $02 ; 89/59 _____Y_____ - .byte $02 ; 90/5a _____Z_____ - .byte $00 ; 91/5b _____[_____ - .byte $00 ; 92/5c _____\_____ - .byte $00 ; 93/5d _____]_____ - .byte $00 ; 94/5e _____^_____ - .byte $00 ; 95/5f _UNDERLINE_ - .byte $00 ; 96/60 __diamond__ - .byte $09 ; 97/61 _____a_____ - .byte $09 ; 98/62 _____b_____ - .byte $09 ; 99/63 _____c_____ - .byte $09 ; 100/64 _____d_____ - .byte $09 ; 101/65 _____e_____ - .byte $09 ; 102/66 _____f_____ - .byte $01 ; 103/67 _____g_____ - .byte $01 ; 104/68 _____h_____ - .byte $01 ; 105/69 _____i_____ - .byte $01 ; 106/6a _____j_____ - .byte $01 ; 107/6b _____k_____ - .byte $01 ; 108/6c _____l_____ - .byte $01 ; 109/6d _____m_____ - .byte $01 ; 110/6e _____n_____ - .byte $01 ; 111/6f _____o_____ - .byte $01 ; 112/70 _____p_____ - .byte $01 ; 113/71 _____q_____ - .byte $01 ; 114/72 _____r_____ - .byte $01 ; 115/73 _____s_____ - .byte $01 ; 116/74 _____t_____ - .byte $01 ; 117/75 _____u_____ - .byte $01 ; 118/76 _____v_____ - .byte $01 ; 119/77 _____w_____ - .byte $01 ; 120/78 _____x_____ - .byte $01 ; 121/79 _____y_____ - .byte $01 ; 122/7a _____z_____ - .byte $00 ; 123/7b ___spade___ - .byte $00 ; 124/7c __v_line___ - .byte $10 ; 125/7d __CLRSCR___ - .byte $D0 ; 126/7e __backtab__ - .byte $D0 ; 127/7f ____tab____ + ct_mix CT_NONE_IDX, CT_LOWER_XDIGIT_IDX ; 96/60 __diamond__, 97/61 _____a_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 98/62 _____b_____, 99/63 _____c_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 100/64 _____d_____, 101/65 _____e_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_IDX ; 102/66 _____f_____, 103/67 _____g_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 104/68 _____h_____, 105/69 _____i_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 106/6a _____j_____, 107/6b _____k_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 108/6c _____l_____, 109/6d _____m_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 110/6e _____n_____, 111/6f _____o_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 112/70 _____p_____, 113/71 _____q_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 114/72 _____r_____, 115/73 _____s_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 116/74 _____t_____, 117/75 _____u_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 118/76 _____v_____, 119/77 _____w_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 120/78 _____x_____, 121/79 _____y_____ + ct_mix CT_LOWER_IDX, CT_NONE_IDX ; 122/7a _____z_____, 123/7b ___spade___ + ct_mix CT_NONE_IDX, CT_CTRL_IDX ; 124/7c __v_line___, 125/7d __CLRSCR___ + ct_mix CT_CTRL_WS_SPACETAB_IDX, CT_CTRL_WS_SPACETAB_IDX + ; 126/7e __backtab__, 127/7f ____tab____ - .byte $00 ; 128/80 _inv_heart___ - .byte $00 ; 129/81 _inv_l_tee___ - .byte $00 ; 130/82 _inv_ctrl_B__ - .byte $00 ; 131/83 _inv_ctrl_C__ - .byte $00 ; 132/84 _inv_r_tee___ - .byte $00 ; 133/85 _inv_ctrl_E__ - .byte $00 ; 134/86 _inv_ctrl_F__ - .byte $00 ; 135/87 _inv_ctrl_G__ - .byte $00 ; 136/88 _inv_ctrl_H__ - .byte $00 ; 137/89 _inv_ctrl_I__ - .byte $00 ; 138/8a _inv_ctrl_J__ - .byte $00 ; 139/8b _inv_ctrl_K__ - .byte $00 ; 140/8c _inv_ctrl_L__ - .byte $00 ; 141/8d _inv_ctrl_M__ - .byte $00 ; 142/8e _inv_ctrl_N__ - .byte $00 ; 143/8f _inv_ctrl_O__ - .byte $00 ; 144/90 __inv__club__ - .byte $00 ; 145/91 _inv_ctrl_Q__ - .byte $00 ; 146/92 _inv_h_line__ - .byte $00 ; 147/93 _inv_ctrl_S__ - .byte $00 ; 148/94 __inv__ball__ - .byte $00 ; 149/95 _inv_ctrl_U__ - .byte $00 ; 150/96 _inv_ctrl_V__ - .byte $00 ; 151/97 __inv_t_tee__ - .byte $00 ; 152/98 __inv_b_tee__ - .byte $00 ; 153/99 _inv_ctrl_Y__ - .byte $00 ; 154/9a _inv_ctrl_Z__ - .byte $50 ; 155/9b _____EOL_____ - .byte $10 ; 156/9c ___CLRLINE___ - .byte $10 ; 157/9d ___INSLINE___ - .byte $10 ; 158/9e ____CLRTAB___ - .byte $10 ; 159/9f ____INSTAB___ - .byte $A0 ; 160/a0 __inv_SPACE__ - .byte $00 ; 161/a1 ___inv_!_____ - .byte $00 ; 162/a2 ___inv_"_____ - .byte $00 ; 163/a3 ___inv_#_____ - .byte $00 ; 164/a4 ___inv_$_____ - .byte $00 ; 165/a5 ___inv_%_____ - .byte $00 ; 166/a6 ___inv_&_____ - .byte $00 ; 167/a7 ___inv_'_____ - .byte $00 ; 168/a8 ___inv_(_____ - .byte $00 ; 169/a9 ___inv_)_____ - .byte $00 ; 170/aa ___inv_*_____ - .byte $00 ; 171/ab ___inv_+_____ - .byte $00 ; 172/ac ___inv_,_____ - .byte $00 ; 173/ad ___inv_-_____ - .byte $00 ; 174/ae ___inv_._____ - .byte $00 ; 175/af ___inv_/_____ - .byte $0C ; 176/b0 ___inv_0_____ - .byte $0C ; 177/b1 ___inv_1_____ - .byte $0C ; 178/b2 ___inv_2_____ - .byte $0C ; 179/b3 ___inv_3_____ - .byte $0C ; 180/b4 ___inv_4_____ - .byte $0C ; 181/b5 ___inv_5_____ - .byte $0C ; 182/b6 ___inv_6_____ - .byte $0C ; 183/b7 ___inv_7_____ - .byte $0C ; 184/b8 ___inv_8_____ - .byte $0C ; 185/b9 ___inv_9_____ - .byte $00 ; 186/ba ___inv_:_____ - .byte $00 ; 187/bb ___inv_;_____ - .byte $00 ; 188/bc ___inv_<_____ - .byte $00 ; 189/bd ___inv_=_____ - .byte $00 ; 190/be ___inv_>_____ - .byte $00 ; 191/bf ___inv_?_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 128/80 _inv_heart___, 129/81 _inv_l_tee___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 130/82 _inv_ctrl_B__, 131/83 _inv_ctrl_C__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 132/84 _inv_r_tee___, 133/85 _inv_ctrl_E__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 134/86 _inv_ctrl_F__, 135/87 _inv_ctrl_G__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 136/88 _inv_ctrl_H__, 137/89 _inv_ctrl_I__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 138/8a _inv_ctrl_J__, 139/8b _inv_ctrl_K__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 140/8c _inv_ctrl_L__, 141/8d _inv_ctrl_M__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 142/8e _inv_ctrl_N__, 143/8f _inv_ctrl_O__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 144/90 __inv__club__, 145/91 _inv_ctrl_Q__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 146/92 _inv_h_line__, 147/93 _inv_ctrl_S__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 148/94 __inv__ball__, 149/95 _inv_ctrl_U__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 150/96 _inv_ctrl_V__, 151/97 __inv_t_tee__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 152/98 __inv_b_tee__, 153/99 _inv_ctrl_Y__ + ct_mix CT_NONE_IDX, CT_CTRL_WS_IDX ; 154/9a _inv_ctrl_Z__, 155/9b _____EOL_____ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 156/9c ___CLRLINE___, 157/9d ___INSLINE___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 158/9e ____CLRTAB___, 159/9f ____INSTAB___ - .byte $00 ; 192/c0 ___inv_@_____ - .byte $0A ; 193/c1 ___inv_A_____ - .byte $0A ; 194/c2 ___inv_B_____ - .byte $0A ; 195/c3 ___inv_C_____ - .byte $0A ; 196/c4 ___inv_D_____ - .byte $0A ; 197/c5 ___inv_E_____ - .byte $0A ; 198/c6 ___inv_F_____ - .byte $02 ; 199/c7 ___inv_G_____ - .byte $02 ; 200/c8 ___inv_H_____ - .byte $02 ; 201/c9 ___inv_I_____ - .byte $02 ; 202/ca ___inv_J_____ - .byte $02 ; 203/cb ___inv_K_____ - .byte $02 ; 204/cc ___inv_L_____ - .byte $02 ; 205/cd ___inv_M_____ - .byte $02 ; 206/ce ___inv_N_____ - .byte $02 ; 207/cf ___inv_O_____ - .byte $02 ; 208/d0 ___inv_P_____ - .byte $02 ; 209/d1 ___inv_Q_____ - .byte $02 ; 210/d2 ___inv_R_____ - .byte $02 ; 211/d3 ___inv_S_____ - .byte $02 ; 212/d4 ___inv_T_____ - .byte $02 ; 213/d5 ___inv_U_____ - .byte $02 ; 214/d6 ___inv_V_____ - .byte $02 ; 215/d7 ___inv_W_____ - .byte $02 ; 216/d8 ___inv_X_____ - .byte $02 ; 217/d9 ___inv_Y_____ - .byte $02 ; 218/da ___inv_Z_____ - .byte $00 ; 219/db ___inv_[_____ - .byte $00 ; 220/dc ___inv_\_____ - .byte $00 ; 221/dd ___inv_]_____ - .byte $00 ; 222/de ___inv_^_____ - .byte $00 ; 223/df _inv_UNDRLIN_ - .byte $00 ; 224/e0 _inv_diamond_ - .byte $09 ; 225/e1 ___inv_a_____ - .byte $09 ; 226/e2 ___inv_b_____ - .byte $09 ; 227/e3 ___inv_c_____ - .byte $09 ; 228/e4 ___inv_d_____ - .byte $09 ; 229/e5 ___inv_e_____ - .byte $09 ; 230/e6 ___inv_f_____ - .byte $01 ; 231/e7 ___inv_g_____ - .byte $01 ; 232/e8 ___inv_h_____ - .byte $01 ; 233/e9 ___inv_i_____ - .byte $01 ; 234/ea ___inv_j_____ - .byte $01 ; 235/eb ___inv_k_____ - .byte $01 ; 236/ec ___inv_l_____ - .byte $01 ; 237/ed ___inv_m_____ - .byte $01 ; 238/ee ___inv_n_____ - .byte $01 ; 239/ef ___inv_o_____ - .byte $01 ; 240/f0 ___inv_p_____ - .byte $01 ; 241/f1 ___inv_q_____ - .byte $01 ; 242/f2 ___inv_r_____ - .byte $01 ; 243/f3 ___inv_s_____ - .byte $01 ; 244/f4 ___inv_t_____ - .byte $01 ; 245/f5 ___inv_u_____ - .byte $01 ; 246/f6 ___inv_v_____ - .byte $01 ; 247/f7 ___inv_w_____ - .byte $01 ; 248/f8 ___inv_x_____ - .byte $01 ; 249/f9 ___inv_y_____ - .byte $01 ; 250/fa ___inv_z_____ - .byte $00 ; 251/fb __inv_spade__ - .byte $00 ; 252/fc __inv_v_line_ - .byte $10 ; 253/fd ____BEEP_____ - .byte $10 ; 254/fe ____DELBS____ - .byte $10 ; 255/ff ___INSERT____ + ct_mix CT_SPACE_SPACETAB_IDX, CT_NONE_IDX ; 160/a0 __inv_SPACE__, 161/a1 ___inv_!_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 162/a2 ___inv_"_____, 163/a3 ___inv_#_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 164/a4 ___inv_$_____, 165/a5 ___inv_%_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 166/a6 ___inv_&_____, 167/a7 ___inv_'_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 168/a8 ___inv_(_____, 169/a9 ___inv_)_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 170/aa ___inv_*_____, 171/ab ___inv_+_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 172/ac ___inv_,_____, 173/ad ___inv_-_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 174/ae ___inv_._____, 175/af ___inv_/_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 176/b0 ___inv_0_____, 177/b1 ___inv_1_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 178/b2 ___inv_2_____, 179/b3 ___inv_3_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 180/b4 ___inv_4_____, 181/b5 ___inv_5_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 182/b6 ___inv_6_____, 183/b7 ___inv_7_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 184/b8 ___inv_8_____, 185/b9 ___inv_9_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 186/ba ___inv_:_____, 187/bb ___inv_;_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 188/bc ___inv_<_____, 189/bd ___inv_=_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 190/be ___inv_>_____, 191/bf ___inv_?_____ + ct_mix CT_NONE_IDX, CT_UPPER_XDIGIT_IDX ; 192/c0 ___inv_@_____, 193/c1 ___inv_A_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 194/c2 ___inv_B_____, 195/c3 ___inv_C_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 196/c4 ___inv_D_____, 197/c5 ___inv_E_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_IDX ; 198/c6 ___inv_F_____,199/c7 ___inv_G_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 200/c8 ___inv_H_____, 201/c9 ___inv_I_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 202/ca ___inv_J_____, 203/cb ___inv_K_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 204/cc ___inv_L_____, 205/cd ___inv_M_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 206/ce ___inv_N_____, 207/cf ___inv_O_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 208/d0 ___inv_P_____, 209/d1 ___inv_Q_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 210/d2 ___inv_R_____, 211/d3 ___inv_S_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 212/d4 ___inv_T_____, 213/d5 ___inv_U_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 214/d6 ___inv_V_____, 215/d7 ___inv_W_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 216/d8 ___inv_X_____, 217/d9 ___inv_Y_____ + ct_mix CT_UPPER_IDX, CT_NONE_IDX ; 218/da ___inv_Z_____, 219/db ___inv_[_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 220/dc ___inv_\_____, 221/dd ___inv_]_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 222/de ___inv_^_____, 223/df _inv_UNDRLIN_ + ct_mix CT_NONE_IDX, CT_LOWER_XDIGIT_IDX ; 224/e0 _inv_diamond_, 225/e1 ___inv_a_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 226/e2 ___inv_b_____, 227/e3 ___inv_c_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 228/e4 ___inv_d_____, 229/e5 ___inv_e_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_IDX ; 230/e6 ___inv_f_____, 231/e7 ___inv_g_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 232/e8 ___inv_h_____, 233/e9 ___inv_i_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 234/ea ___inv_j_____, 235/eb ___inv_k_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 236/ec ___inv_l_____, 237/ed ___inv_m_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 238/ee ___inv_n_____, 239/ef ___inv_o_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 240/f0 ___inv_p_____, 241/f1 ___inv_q_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 242/f2 ___inv_r_____, 243/f3 ___inv_s_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 244/f4 ___inv_t_____, 245/f5 ___inv_u_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 246/f6 ___inv_v_____, 247/f7 ___inv_w_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 248/f8 ___inv_x_____, 249/f9 ___inv_y_____ + ct_mix CT_LOWER_IDX, CT_NONE_IDX ; 250/fa ___inv_z_____, 251/fb __inv_spade__ + ct_mix CT_NONE_IDX, CT_CTRL_IDX ; 252/fc __inv_v_line_, 253/fd ____BEEP_____ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 254/fe ____DELBS____, 255/ff ___INSERT____ diff --git a/libsrc/atari2600/ctype.s b/libsrc/atari2600/ctype.s index 1892554fd..1301965eb 100644 --- a/libsrc/atari2600/ctype.s +++ b/libsrc/atari2600/ctype.s @@ -1,162 +1,5 @@ -; -; Ullrich von Bassewitz, 2003-10-10 -; ; Character specification table. ; +; uses the "common" definition - .include "ctype.inc" - -; The tables are readonly, put them into the rodata segment - -.rodata - -; The following 256 byte wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it weren't for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. - - -__ctype: - .byte CT_CTRL ; 0/00 ___ctrl_@___ - .byte CT_CTRL ; 1/01 ___ctrl_A___ - .byte CT_CTRL ; 2/02 ___ctrl_B___ - .byte CT_CTRL ; 3/03 ___ctrl_C___ - .byte CT_CTRL ; 4/04 ___ctrl_D___ - .byte CT_CTRL ; 5/05 ___ctrl_E___ - .byte CT_CTRL ; 6/06 ___ctrl_F___ - .byte CT_CTRL ; 7/07 ___ctrl_G___ - .byte CT_CTRL ; 8/08 ___ctrl_H___ - .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB - ; 9/09 ___ctrl_I___ - .byte CT_CTRL | CT_OTHER_WS ; 10/0a ___ctrl_J___ - .byte CT_CTRL | CT_OTHER_WS ; 11/0b ___ctrl_K___ - .byte CT_CTRL | CT_OTHER_WS ; 12/0c ___ctrl_L___ - .byte CT_CTRL | CT_OTHER_WS ; 13/0d ___ctrl_M___ - .byte CT_CTRL ; 14/0e ___ctrl_N___ - .byte CT_CTRL ; 15/0f ___ctrl_O___ - .byte CT_CTRL ; 16/10 ___ctrl_P___ - .byte CT_CTRL ; 17/11 ___ctrl_Q___ - .byte CT_CTRL ; 18/12 ___ctrl_R___ - .byte CT_CTRL ; 19/13 ___ctrl_S___ - .byte CT_CTRL ; 20/14 ___ctrl_T___ - .byte CT_CTRL ; 21/15 ___ctrl_U___ - .byte CT_CTRL ; 22/16 ___ctrl_V___ - .byte CT_CTRL ; 23/17 ___ctrl_W___ - .byte CT_CTRL ; 24/18 ___ctrl_X___ - .byte CT_CTRL ; 25/19 ___ctrl_Y___ - .byte CT_CTRL ; 26/1a ___ctrl_Z___ - .byte CT_CTRL ; 27/1b ___ctrl_[___ - .byte CT_CTRL ; 28/1c ___ctrl_\___ - .byte CT_CTRL ; 29/1d ___ctrl_]___ - .byte CT_CTRL ; 30/1e ___ctrl_^___ - .byte CT_CTRL ; 31/1f ___ctrl_____ - .byte CT_SPACE | CT_SPACE_TAB ; 32/20 ___SPACE___ - .byte CT_NONE ; 33/21 _____!_____ - .byte CT_NONE ; 34/22 _____"_____ - .byte CT_NONE ; 35/23 _____#_____ - .byte CT_NONE ; 36/24 _____$_____ - .byte CT_NONE ; 37/25 _____%_____ - .byte CT_NONE ; 38/26 _____&_____ - .byte CT_NONE ; 39/27 _____'_____ - .byte CT_NONE ; 40/28 _____(_____ - .byte CT_NONE ; 41/29 _____)_____ - .byte CT_NONE ; 42/2a _____*_____ - .byte CT_NONE ; 43/2b _____+_____ - .byte CT_NONE ; 44/2c _____,_____ - .byte CT_NONE ; 45/2d _____-_____ - .byte CT_NONE ; 46/2e _____._____ - .byte CT_NONE ; 47/2f _____/_____ - .byte CT_DIGIT | CT_XDIGIT ; 48/30 _____0_____ - .byte CT_DIGIT | CT_XDIGIT ; 49/31 _____1_____ - .byte CT_DIGIT | CT_XDIGIT ; 50/32 _____2_____ - .byte CT_DIGIT | CT_XDIGIT ; 51/33 _____3_____ - .byte CT_DIGIT | CT_XDIGIT ; 52/34 _____4_____ - .byte CT_DIGIT | CT_XDIGIT ; 53/35 _____5_____ - .byte CT_DIGIT | CT_XDIGIT ; 54/36 _____6_____ - .byte CT_DIGIT | CT_XDIGIT ; 55/37 _____7_____ - .byte CT_DIGIT | CT_XDIGIT ; 56/38 _____8_____ - .byte CT_DIGIT | CT_XDIGIT ; 57/39 _____9_____ - .byte CT_NONE ; 58/3a _____:_____ - .byte CT_NONE ; 59/3b _____;_____ - .byte CT_NONE ; 60/3c _____<_____ - .byte CT_NONE ; 61/3d _____=_____ - .byte CT_NONE ; 62/3e _____>_____ - .byte CT_NONE ; 63/3f _____?_____ - - .byte CT_NONE ; 64/40 _____@_____ - .byte CT_UPPER | CT_XDIGIT ; 65/41 _____A_____ - .byte CT_UPPER | CT_XDIGIT ; 66/42 _____B_____ - .byte CT_UPPER | CT_XDIGIT ; 67/43 _____C_____ - .byte CT_UPPER | CT_XDIGIT ; 68/44 _____D_____ - .byte CT_UPPER | CT_XDIGIT ; 69/45 _____E_____ - .byte CT_UPPER | CT_XDIGIT ; 70/46 _____F_____ - .byte CT_UPPER ; 71/47 _____G_____ - .byte CT_UPPER ; 72/48 _____H_____ - .byte CT_UPPER ; 73/49 _____I_____ - .byte CT_UPPER ; 74/4a _____J_____ - .byte CT_UPPER ; 75/4b _____K_____ - .byte CT_UPPER ; 76/4c _____L_____ - .byte CT_UPPER ; 77/4d _____M_____ - .byte CT_UPPER ; 78/4e _____N_____ - .byte CT_UPPER ; 79/4f _____O_____ - .byte CT_UPPER ; 80/50 _____P_____ - .byte CT_UPPER ; 81/51 _____Q_____ - .byte CT_UPPER ; 82/52 _____R_____ - .byte CT_UPPER ; 83/53 _____S_____ - .byte CT_UPPER ; 84/54 _____T_____ - .byte CT_UPPER ; 85/55 _____U_____ - .byte CT_UPPER ; 86/56 _____V_____ - .byte CT_UPPER ; 87/57 _____W_____ - .byte CT_UPPER ; 88/58 _____X_____ - .byte CT_UPPER ; 89/59 _____Y_____ - .byte CT_UPPER ; 90/5a _____Z_____ - .byte CT_NONE ; 91/5b _____[_____ - .byte CT_NONE ; 92/5c _____\_____ - .byte CT_NONE ; 93/5d _____]_____ - .byte CT_NONE ; 94/5e _____^_____ - .byte CT_NONE ; 95/5f _UNDERLINE_ - .byte CT_NONE ; 96/60 ___grave___ - .byte CT_LOWER | CT_XDIGIT ; 97/61 _____a_____ - .byte CT_LOWER | CT_XDIGIT ; 98/62 _____b_____ - .byte CT_LOWER | CT_XDIGIT ; 99/63 _____c_____ - .byte CT_LOWER | CT_XDIGIT ; 100/64 _____d_____ - .byte CT_LOWER | CT_XDIGIT ; 101/65 _____e_____ - .byte CT_LOWER | CT_XDIGIT ; 102/66 _____f_____ - .byte CT_LOWER ; 103/67 _____g_____ - .byte CT_LOWER ; 104/68 _____h_____ - .byte CT_LOWER ; 105/69 _____i_____ - .byte CT_LOWER ; 106/6a _____j_____ - .byte CT_LOWER ; 107/6b _____k_____ - .byte CT_LOWER ; 108/6c _____l_____ - .byte CT_LOWER ; 109/6d _____m_____ - .byte CT_LOWER ; 110/6e _____n_____ - .byte CT_LOWER ; 111/6f _____o_____ - .byte CT_LOWER ; 112/70 _____p_____ - .byte CT_LOWER ; 113/71 _____q_____ - .byte CT_LOWER ; 114/72 _____r_____ - .byte CT_LOWER ; 115/73 _____s_____ - .byte CT_LOWER ; 116/74 _____t_____ - .byte CT_LOWER ; 117/75 _____u_____ - .byte CT_LOWER ; 118/76 _____v_____ - .byte CT_LOWER ; 119/77 _____w_____ - .byte CT_LOWER ; 120/78 _____x_____ - .byte CT_LOWER ; 121/79 _____y_____ - .byte CT_LOWER ; 122/7a _____z_____ - .byte CT_NONE ; 123/7b _____{_____ - .byte CT_NONE ; 124/7c _____|_____ - .byte CT_NONE ; 125/7d _____}_____ - .byte CT_NONE ; 126/7e _____~_____ - .byte CT_OTHER_WS ; 127/7f ____DEL____ - - .res 128, CT_NONE ; 128-255 - - - + .include "ctype_common.inc" diff --git a/libsrc/atmos/ctype.s b/libsrc/atmos/ctype.s index 79edafbb2..3c3d7be5b 100644 --- a/libsrc/atmos/ctype.s +++ b/libsrc/atmos/ctype.s @@ -1,299 +1,155 @@ +; ctype.s ; -; Ullrich von Bassewitz, 2003-04-13 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems ; -; Character specification table. +; https://github.com/cc65/cc65 ; +; See "LICENSE" file for legal information. +; +; ATMOS character specification table. +; + + .include "ctypetable.inc" + .export __ctypeIdx ; The tables are readonly, put them into the rodata segment .rodata -; The following 256 byte wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it were'nt for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. -; -; -; Bit assignments: -; -; 0 - Lower case char -; 1 - Upper case char -; 2 - Numeric digit -; 3 - Hex digit (both, lower and upper) -; 4 - Control character -; 5 - The space character itself -; 6 - Other whitespace (that is: '\f', '\n', '\r', '\t' and '\v') -; 7 - Space or tab character +__ctypeIdx: + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 0/00 ___ctrl_@___, 1/01 ___ctrl_A___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 2/02 ___ctrl_B___, 3/03 ___ctrl_C___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 4/04 ___ctrl_D___, 5/05 ___ctrl_E___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 6/06 ___ctrl_F___, 7/07 ___ctrl_G___ + ct_mix CT_CTRL_IDX, CT_CTRL_WS_SPACETAB_IDX ; 8/08 ___ctrl_H___, 9/09 ___ctrl_I___ + ct_mix CT_CTRL_WS_IDX, CT_CTRL_WS_IDX ; 10/0a ___ctrl_J___, 11/0b ___ctrl_K___ + ct_mix CT_CTRL_WS_IDX, CT_CTRL_WS_IDX ; 12/0c ___ctrl_L___, 13/0d ___ctrl_M___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 14/0e ___ctrl_N___, 15/0f ___ctrl_O___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 16/10 ___ctrl_P___, 17/11 ___ctrl_Q___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 18/12 ___ctrl_R___, 19/13 ___ctrl_S___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 20/14 ___ctrl_T___, 21/15 ___ctrl_U___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 22/16 ___ctrl_V___, 23/17 ___ctrl_W___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 24/18 ___ctrl_X___, 25/19 ___ctrl_Y___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 26/1a ___ctrl_Z___, 27/1b ___ctrl_[___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 28/1c ___ctrl_\___, 29/1d ___ctrl_]___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 30/1e ___ctrl_^___, 31/1f ___ctrl_____ - .export __ctype + ct_mix CT_SPACE_SPACETAB_IDX, CT_NONE_IDX ; 32/20 ___SPACE___, 33/21 _____!_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 34/22 _____"_____, 35/23 _____#_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 36/24 _____$_____, 37/25 _____%_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 38/26 _____&_____, 39/27 _____'_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 40/28 _____(_____, 41/29 _____)_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 42/2a _____*_____, 43/2b _____+_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 44/2c _____,_____, 45/2d _____-_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 46/2e _____._____, 47/2f _____/_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 48/30 _____0_____, 49/31 _____1_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 50/32 _____2_____, 51/33 _____3_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 52/34 _____4_____, 53/35 _____5_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 54/36 _____6_____, 55/37 _____7_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 56/38 _____8_____, 57/39 _____9_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 58/3a _____:_____, 59/3b _____;_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 60/3c _____<_____, 61/3d _____=_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 62/3e _____>_____, 63/3f _____?_____ -__ctype: - .byte $10 ; 0/00 ___ctrl_@___ - .byte $10 ; 1/01 ___ctrl_A___ - .byte $10 ; 2/02 ___ctrl_B___ - .byte $10 ; 3/03 ___ctrl_C___ - .byte $10 ; 4/04 ___ctrl_D___ - .byte $10 ; 5/05 ___ctrl_E___ - .byte $10 ; 6/06 ___ctrl_F___ - .byte $10 ; 7/07 ___ctrl_G___ - .byte $10 ; 8/08 ___ctrl_H___ - .byte $D0 ; 9/09 ___ctrl_I___ - .byte $50 ; 10/0a ___ctrl_J___ - .byte $50 ; 11/0b ___ctrl_K___ - .byte $50 ; 12/0c ___ctrl_L___ - .byte $50 ; 13/0d ___ctrl_M___ - .byte $10 ; 14/0e ___ctrl_N___ - .byte $10 ; 15/0f ___ctrl_O___ - .byte $10 ; 16/10 ___ctrl_P___ - .byte $10 ; 17/11 ___ctrl_Q___ - .byte $10 ; 18/12 ___ctrl_R___ - .byte $10 ; 19/13 ___ctrl_S___ - .byte $10 ; 20/14 ___ctrl_T___ - .byte $10 ; 21/15 ___ctrl_U___ - .byte $10 ; 22/16 ___ctrl_V___ - .byte $10 ; 23/17 ___ctrl_W___ - .byte $10 ; 24/18 ___ctrl_X___ - .byte $10 ; 25/19 ___ctrl_Y___ - .byte $10 ; 26/1a ___ctrl_Z___ - .byte $10 ; 27/1b ___ctrl_[___ - .byte $10 ; 28/1c ___ctrl_\___ - .byte $10 ; 29/1d ___ctrl_]___ - .byte $10 ; 30/1e ___ctrl_^___ - .byte $10 ; 31/1f ___ctrl_____ - .byte $A0 ; 32/20 ___SPACE___ - .byte $00 ; 33/21 _____!_____ - .byte $00 ; 34/22 _____"_____ - .byte $00 ; 35/23 _____#_____ - .byte $00 ; 36/24 _____$_____ - .byte $00 ; 37/25 _____%_____ - .byte $00 ; 38/26 _____&_____ - .byte $00 ; 39/27 _____'_____ - .byte $00 ; 40/28 _____(_____ - .byte $00 ; 41/29 _____)_____ - .byte $00 ; 42/2a _____*_____ - .byte $00 ; 43/2b _____+_____ - .byte $00 ; 44/2c _____,_____ - .byte $00 ; 45/2d _____-_____ - .byte $00 ; 46/2e _____._____ - .byte $00 ; 47/2f _____/_____ - .byte $0C ; 48/30 _____0_____ - .byte $0C ; 49/31 _____1_____ - .byte $0C ; 50/32 _____2_____ - .byte $0C ; 51/33 _____3_____ - .byte $0C ; 52/34 _____4_____ - .byte $0C ; 53/35 _____5_____ - .byte $0C ; 54/36 _____6_____ - .byte $0C ; 55/37 _____7_____ - .byte $0C ; 56/38 _____8_____ - .byte $0C ; 57/39 _____9_____ - .byte $00 ; 58/3a _____:_____ - .byte $00 ; 59/3b _____;_____ - .byte $00 ; 60/3c _____<_____ - .byte $00 ; 61/3d _____=_____ - .byte $00 ; 62/3e _____>_____ - .byte $00 ; 63/3f _____?_____ + ct_mix CT_NONE_IDX, CT_UPPER_XDIGIT_IDX ; 64/40 _____@_____, 65/41 _____A_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 66/42 _____B_____, 67/43 _____C_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 68/44 _____D_____, 69/45 _____E_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_IDX ; 70/46 _____F_____, 71/47 _____G_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 72/48 _____H_____, 73/49 _____I_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 74/4a _____J_____, 75/4b _____K_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 76/4c _____L_____, 77/4d _____M_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 78/4e _____N_____, 79/4f _____O_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 80/50 _____P_____, 81/51 _____Q_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 82/52 _____R_____, 83/53 _____S_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 84/54 _____T_____, 85/55 _____U_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 86/56 _____V_____, 87/57 _____W_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 88/58 _____X_____, 89/59 _____Y_____ + ct_mix CT_UPPER_IDX, CT_NONE_IDX ; 90/5a _____Z_____, 91/5b _____[_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 92/5c _____\_____, 93/5d _____]_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 94/5e _____^_____, 95/5f _UNDERLINE_ - .byte $00 ; 64/40 _____@_____ - .byte $0A ; 65/41 _____A_____ - .byte $0A ; 66/42 _____B_____ - .byte $0A ; 67/43 _____C_____ - .byte $0A ; 68/44 _____D_____ - .byte $0A ; 69/45 _____E_____ - .byte $0A ; 70/46 _____F_____ - .byte $02 ; 71/47 _____G_____ - .byte $02 ; 72/48 _____H_____ - .byte $02 ; 73/49 _____I_____ - .byte $02 ; 74/4a _____J_____ - .byte $02 ; 75/4b _____K_____ - .byte $02 ; 76/4c _____L_____ - .byte $02 ; 77/4d _____M_____ - .byte $02 ; 78/4e _____N_____ - .byte $02 ; 79/4f _____O_____ - .byte $02 ; 80/50 _____P_____ - .byte $02 ; 81/51 _____Q_____ - .byte $02 ; 82/52 _____R_____ - .byte $02 ; 83/53 _____S_____ - .byte $02 ; 84/54 _____T_____ - .byte $02 ; 85/55 _____U_____ - .byte $02 ; 86/56 _____V_____ - .byte $02 ; 87/57 _____W_____ - .byte $02 ; 88/58 _____X_____ - .byte $02 ; 89/59 _____Y_____ - .byte $02 ; 90/5a _____Z_____ - .byte $00 ; 91/5b _____[_____ - .byte $00 ; 92/5c _____\_____ - .byte $00 ; 93/5d _____]_____ - .byte $00 ; 94/5e _____^_____ - .byte $00 ; 95/5f _UNDERLINE_ - .byte $00 ; 96/60 ___grave___ - .byte $09 ; 97/61 _____a_____ - .byte $09 ; 98/62 _____b_____ - .byte $09 ; 99/63 _____c_____ - .byte $09 ; 100/64 _____d_____ - .byte $09 ; 101/65 _____e_____ - .byte $09 ; 102/66 _____f_____ - .byte $01 ; 103/67 _____g_____ - .byte $01 ; 104/68 _____h_____ - .byte $01 ; 105/69 _____i_____ - .byte $01 ; 106/6a _____j_____ - .byte $01 ; 107/6b _____k_____ - .byte $01 ; 108/6c _____l_____ - .byte $01 ; 109/6d _____m_____ - .byte $01 ; 110/6e _____n_____ - .byte $01 ; 111/6f _____o_____ - .byte $01 ; 112/70 _____p_____ - .byte $01 ; 113/71 _____q_____ - .byte $01 ; 114/72 _____r_____ - .byte $01 ; 115/73 _____s_____ - .byte $01 ; 116/74 _____t_____ - .byte $01 ; 117/75 _____u_____ - .byte $01 ; 118/76 _____v_____ - .byte $01 ; 119/77 _____w_____ - .byte $01 ; 120/78 _____x_____ - .byte $01 ; 121/79 _____y_____ - .byte $01 ; 122/7a _____z_____ - .byte $00 ; 123/7b _____{_____ - .byte $00 ; 124/7c _____|_____ - .byte $00 ; 125/7d _____}_____ - .byte $00 ; 126/7e _____~_____ - .byte $40 ; 127/7f ____DEL____ + ct_mix CT_NONE_IDX, CT_LOWER_XDIGIT_IDX ; 96/60 ___grave___, 97/61 _____a_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 98/62 _____b_____, 99/63 _____c_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 100/64 _____d_____, 101/65 _____e_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_IDX ; 102/66 _____f_____, 103/67 _____g_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 104/68 _____h_____, 105/69 _____i_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 106/6a _____j_____, 107/6b _____k_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 108/6c _____l_____, 109/6d _____m_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 110/6e _____n_____, 111/6f _____o_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 112/70 _____p_____, 113/71 _____q_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 114/72 _____r_____, 115/73 _____s_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 116/74 _____t_____, 117/75 _____u_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 118/76 _____v_____, 119/77 _____w_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 120/78 _____x_____, 121/79 _____y_____ + ct_mix CT_LOWER_IDX, CT_NONE_IDX ; 122/7a _____z_____, 123/7b _____{_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 124/7c _____|_____, 125/7d _____}_____ + ct_mix CT_NONE_IDX, CT_WS_IDX ; 126/7e _____~_____, 127/7f ____DEL____ - .byte $00 ; 128/80 ___________ - .byte $00 ; 129/81 ___________ - .byte $00 ; 130/82 ___________ - .byte $00 ; 131/83 ___________ - .byte $00 ; 132/84 ___________ - .byte $00 ; 133/85 ___________ - .byte $00 ; 134/86 ___________ - .byte $00 ; 135/87 ___________ - .byte $00 ; 136/88 ___________ - .byte $00 ; 137/89 ___________ - .byte $00 ; 138/8a ___________ - .byte $00 ; 139/8b ___________ - .byte $00 ; 140/8c ___________ - .byte $00 ; 141/8d ___________ - .byte $00 ; 142/8e ___________ - .byte $00 ; 143/8f ___________ - .byte $00 ; 144/90 ___________ - .byte $00 ; 145/91 ___________ - .byte $00 ; 146/92 ___________ - .byte $10 ; 147/93 ___________ - .byte $00 ; 148/94 ___________ - .byte $00 ; 149/95 ___________ - .byte $00 ; 150/96 ___________ - .byte $00 ; 151/97 ___________ - .byte $00 ; 152/98 ___________ - .byte $00 ; 153/99 ___________ - .byte $00 ; 154/9a ___________ - .byte $00 ; 155/9b ___________ - .byte $00 ; 156/9c ___________ - .byte $00 ; 157/9d ___________ - .byte $00 ; 158/9e ___________ - .byte $00 ; 159/9f ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 128/80 ___________, 129/81 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 130/82 ___________, 131/83 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 132/84 ___________, 133/85 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 134/86 ___________, 135/87 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 136/88 ___________, 137/89 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 138/8a ___________, 139/8b ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 140/8c ___________, 141/8d ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 142/8e ___________, 143/8f ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 144/90 ___________, 145/91 ___________ + ct_mix CT_NONE_IDX, CT_CTRL_IDX ; 146/92 ___________, 147/93 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 148/94 ___________, 149/95 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 150/96 ___________, 151/97 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 152/98 ___________, 153/99 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 154/9a ___________, 155/9b ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 156/9c ___________, 157/9d ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 158/9e ___________, 159/9f ___________ - .byte $00 ; 160/a0 ___________ - .byte $00 ; 161/a1 ___________ - .byte $00 ; 162/a2 ___________ - .byte $00 ; 163/a3 ___________ - .byte $00 ; 164/a4 ___________ - .byte $00 ; 165/a5 ___________ - .byte $00 ; 166/a6 ___________ - .byte $00 ; 167/a7 ___________ - .byte $00 ; 168/a8 ___________ - .byte $00 ; 169/a9 ___________ - .byte $00 ; 170/aa ___________ - .byte $00 ; 171/ab ___________ - .byte $00 ; 172/ac ___________ - .byte $00 ; 173/ad ___________ - .byte $00 ; 174/ae ___________ - .byte $00 ; 175/af ___________ - .byte $00 ; 176/b0 ___________ - .byte $00 ; 177/b1 ___________ - .byte $00 ; 178/b2 ___________ - .byte $00 ; 179/b3 ___________ - .byte $00 ; 180/b4 ___________ - .byte $00 ; 181/b5 ___________ - .byte $00 ; 182/b6 ___________ - .byte $00 ; 183/b7 ___________ - .byte $00 ; 184/b8 ___________ - .byte $00 ; 185/b9 ___________ - .byte $00 ; 186/ba ___________ - .byte $00 ; 187/bb ___________ - .byte $00 ; 188/bc ___________ - .byte $00 ; 189/bd ___________ - .byte $00 ; 190/be ___________ - .byte $00 ; 191/bf ___________ - - .byte $02 ; 192/c0 ___________ - .byte $02 ; 193/c1 ___________ - .byte $02 ; 194/c2 ___________ - .byte $02 ; 195/c3 ___________ - .byte $02 ; 196/c4 ___________ - .byte $02 ; 197/c5 ___________ - .byte $02 ; 198/c6 ___________ - .byte $02 ; 199/c7 ___________ - .byte $02 ; 200/c8 ___________ - .byte $02 ; 201/c9 ___________ - .byte $02 ; 202/ca ___________ - .byte $02 ; 203/cb ___________ - .byte $02 ; 204/cc ___________ - .byte $02 ; 205/cd ___________ - .byte $02 ; 206/ce ___________ - .byte $02 ; 207/cf ___________ - .byte $02 ; 208/d0 ___________ - .byte $02 ; 209/d1 ___________ - .byte $02 ; 210/d2 ___________ - .byte $02 ; 211/d3 ___________ - .byte $02 ; 212/d4 ___________ - .byte $02 ; 213/d5 ___________ - .byte $02 ; 214/d6 ___________ - .byte $02 ; 215/d7 ___________ - .byte $02 ; 216/d8 ___________ - .byte $02 ; 217/d9 ___________ - .byte $02 ; 218/da ___________ - .byte $02 ; 219/db ___________ - .byte $02 ; 220/dc ___________ - .byte $02 ; 221/dd ___________ - .byte $02 ; 222/de ___________ - .byte $00 ; 223/df ___________ - .byte $01 ; 224/e0 ___________ - .byte $01 ; 225/e1 ___________ - .byte $01 ; 226/e2 ___________ - .byte $01 ; 227/e3 ___________ - .byte $01 ; 228/e4 ___________ - .byte $01 ; 229/e5 ___________ - .byte $01 ; 230/e6 ___________ - .byte $01 ; 231/e7 ___________ - .byte $01 ; 232/e8 ___________ - .byte $01 ; 233/e9 ___________ - .byte $01 ; 234/ea ___________ - .byte $01 ; 235/eb ___________ - .byte $01 ; 236/ec ___________ - .byte $01 ; 237/ed ___________ - .byte $01 ; 238/ee ___________ - .byte $01 ; 239/ef ___________ - .byte $01 ; 240/f0 ___________ - .byte $01 ; 241/f1 ___________ - .byte $01 ; 242/f2 ___________ - .byte $01 ; 243/f3 ___________ - .byte $01 ; 244/f4 ___________ - .byte $01 ; 245/f5 ___________ - .byte $01 ; 246/f6 ___________ - .byte $01 ; 247/f7 ___________ - .byte $01 ; 248/f8 ___________ - .byte $01 ; 249/f9 ___________ - .byte $01 ; 250/fa ___________ - .byte $01 ; 251/fb ___________ - .byte $01 ; 252/fc ___________ - .byte $01 ; 253/fd ___________ - .byte $01 ; 254/fe ___________ - .byte $00 ; 255/ff ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 160/a0 ___________, 161/a1 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 162/a2 ___________, 163/a3 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 164/a4 ___________, 165/a5 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 166/a6 ___________, 167/a7 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 168/a8 ___________, 169/a9 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 170/aa ___________, 171/ab ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 172/ac ___________, 173/ad ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 174/ae ___________, 175/af ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 176/b0 ___________, 177/b1 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 178/b2 ___________, 179/b3 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 180/b4 ___________, 181/b5 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 182/b6 ___________, 183/b7 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 184/b8 ___________, 185/b9 ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 186/ba ___________, 187/bb ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 188/bc ___________, 189/bd ___________ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 190/be ___________, 191/bf ___________ + + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 192/c0 ___________, 193/c1 ___________ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 194/c2 ___________, 195/c3 ___________ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 196/c4 ___________, 197/c5 ___________ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 198/c6 ___________, 199/c7 ___________ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 200/c8 ___________, 201/c9 ___________ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 202/ca ___________, 203/cb ___________ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 204/cc ___________, 205/cd ___________ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 206/ce ___________, 207/cf ___________ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 208/d0 ___________, 209/d1 ___________ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 210/d2 ___________, 211/d3 ___________ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 212/d4 ___________, 213/d5 ___________ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 214/d6 ___________, 215/d7 ___________ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 216/d8 ___________, 217/d9 ___________ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 218/da ___________, 219/db ___________ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 220/dc ___________, 221/dd ___________ + ct_mix CT_UPPER_IDX, CT_NONE_IDX ; 222/de ___________, 223/df ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 224/e0 ___________, 225/e1 ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 226/e2 ___________, 227/e3 ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 228/e4 ___________, 229/e5 ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 230/e6 ___________, 231/e7 ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 232/e8 ___________, 233/e9 ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 234/ea ___________, 235/eb ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 236/ec ___________, 237/ed ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 238/ee ___________, 239/ef ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 240/f0 ___________, 241/f1 ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 242/f2 ___________, 243/f3 ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 244/f4 ___________, 245/f5 ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 246/f6 ___________, 247/f7 ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 248/f8 ___________, 249/f9 ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 250/fa ___________, 251/fb ___________ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 252/fc ___________, 253/fd ___________ + ct_mix CT_LOWER_IDX, CT_NONE_IDX ; 254/fe ___________, 255/ff ___________ diff --git a/libsrc/cbm/ctype.s b/libsrc/cbm/ctype.s index ba096bb13..d0943b123 100644 --- a/libsrc/cbm/ctype.s +++ b/libsrc/cbm/ctype.s @@ -1,289 +1,156 @@ +; ctype.s ; -; Character specification table. +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems ; -; Ullrich von Bassewitz, 02.06.1998 -; 2003-05-02, Greg King +; https://github.com/cc65/cc65 ; - -; The following 256-byte-wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: +; See "LICENSE" file for legal information. ; -; * It is fast. If it weren't for the slow parameter-passing of cc65, -; one even could define C-language macroes for the isxxx functions -; (as it usually is done, on other platforms). +; CBM character specification table. ; -; * It is highly portable. The only unportable part is the table itself; -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. - ; This table is taken from Craig S. Bruce's technical docs. for the ACE OS. - .include "ctype.inc" + .include "ctypetable.inc" + .export __ctypeIdx + +; The tables are readonly, put them into the rodata segment -; The table is read-only, put it into the RODATA segment. +.rodata - .rodata +__ctypeIdx: + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 0/00 ___rvs_@___, 1/01 ___rvs_a___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 2/02 ___rvs_b___, 3/03 ___rvs_c___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 4/04 ___rvs_d___, 5/05 ___rvs_e___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 6/06 ___rvs_f___, 7/07 _BEL/rvs_g_ + ct_mix CT_CTRL_IDX, CT_CTRL_WS_SPACETAB_IDX ; 8/08 ___rvs_h___, 9/09 _TAB/rvs_i_ + ct_mix CT_CTRL_WS_IDX, CT_CTRL_IDX ; 10/0a _BOL/rvs_j_, 11/0b ___rvs_k___ + ct_mix CT_CTRL_IDX, CT_CTRL_WS_IDX ; 12/0c ___rvs_l___, 13/0d _CR_/rvs_m_ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 14/0e ___rvs_n___, 15/0f ___rvs_o___ + ct_mix CT_CTRL_IDX, CT_CTRL_WS_IDX ; 16/10 ___rvs_p___, 17/11 _VT_/rvs_q_ + ct_mix CT_CTRL_IDX, CT_CTRL_WS_IDX ; 18/12 ___rvs_r___, 19/13 HOME/rvs_s_ + ct_mix CT_CTRL_WS_IDX, CT_CTRL_IDX ; 20/14 _BS_/rvs_t_, 21/15 ___rvs_u___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 22/16 ___rvs_v___, 23/17 ___rvs_w___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 24/18 ___rvs_x___, 25/19 ___rvs_y___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 26/1a ___rvs_z___, 27/1b ___rvs_[___ + ct_mix CT_CTRL_IDX, CT_CTRL_WS_IDX ; 28/1c ___rvs_\___, 29/1d cursr-right + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 30/1e ___rvs_^___, 31/1f _rvs_under_ -__ctype: - .byte CT_CTRL ; 0/00 ___rvs_@___ - .byte CT_CTRL ; 1/01 ___rvs_a___ - .byte CT_CTRL ; 2/02 ___rvs_b___ - .byte CT_CTRL ; 3/03 ___rvs_c___ - .byte CT_CTRL ; 4/04 ___rvs_d___ - .byte CT_CTRL ; 5/05 ___rvs_e___ - .byte CT_CTRL ; 6/06 ___rvs_f___ - .byte CT_CTRL ; 7/07 _BEL/rvs_g_ - .byte CT_CTRL ; 8/08 ___rvs_h___ - .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB ; 9/09 _TAB/rvs_i_ - .byte CT_CTRL | CT_OTHER_WS ; 10/0a _BOL/rvs_j_ - .byte CT_CTRL ; 11/0b ___rvs_k___ - .byte CT_CTRL ; 12/0c ___rvs_l___ - .byte CT_CTRL | CT_OTHER_WS ; 13/0d _CR_/rvs_m_ - .byte CT_CTRL ; 14/0e ___rvs_n___ - .byte CT_CTRL ; 15/0f ___rvs_o___ - .byte CT_CTRL ; 16/10 ___rvs_p___ - .byte CT_CTRL | CT_OTHER_WS ; 17/11 _VT_/rvs_q_ - .byte CT_CTRL ; 18/12 ___rvs_r___ - .byte CT_CTRL | CT_OTHER_WS ; 19/13 HOME/rvs_s_ - .byte CT_CTRL | CT_OTHER_WS ; 20/14 _BS_/rvs_t_ - .byte CT_CTRL ; 21/15 ___rvs_u___ - .byte CT_CTRL ; 22/16 ___rvs_v___ - .byte CT_CTRL ; 23/17 ___rvs_w___ - .byte CT_CTRL ; 24/18 ___rvs_x___ - .byte CT_CTRL ; 25/19 ___rvs_y___ - .byte CT_CTRL ; 26/1a ___rvs_z___ - .byte CT_CTRL ; 27/1b ___rvs_[___ - .byte CT_CTRL ; 28/1c ___rvs_\___ - .byte CT_CTRL | CT_OTHER_WS ; 29/1d cursr-right - .byte CT_CTRL ; 30/1e ___rvs_^___ - .byte CT_CTRL ; 31/1f _rvs_under_ - .byte CT_SPACE | CT_SPACE_TAB ; 32/20 ___SPACE___ - .byte $00 ; 33/21 _____!_____ - .byte $00 ; 34/22 _____"_____ - .byte $00 ; 35/23 _____#_____ - .byte $00 ; 36/24 _____$_____ - .byte $00 ; 37/25 _____%_____ - .byte $00 ; 38/26 _____&_____ - .byte $00 ; 39/27 _____'_____ - .byte $00 ; 40/28 _____(_____ - .byte $00 ; 41/29 _____)_____ - .byte $00 ; 42/2a _____*_____ - .byte $00 ; 43/2b _____+_____ - .byte $00 ; 44/2c _____,_____ - .byte $00 ; 45/2d _____-_____ - .byte $00 ; 46/2e _____._____ - .byte $00 ; 47/2f _____/_____ - .byte CT_DIGIT | CT_XDIGIT ; 48/30 _____0_____ - .byte CT_DIGIT | CT_XDIGIT ; 49/31 _____1_____ - .byte CT_DIGIT | CT_XDIGIT ; 50/32 _____2_____ - .byte CT_DIGIT | CT_XDIGIT ; 51/33 _____3_____ - .byte CT_DIGIT | CT_XDIGIT ; 52/34 _____4_____ - .byte CT_DIGIT | CT_XDIGIT ; 53/35 _____5_____ - .byte CT_DIGIT | CT_XDIGIT ; 54/36 _____6_____ - .byte CT_DIGIT | CT_XDIGIT ; 55/37 _____7_____ - .byte CT_DIGIT | CT_XDIGIT ; 56/38 _____8_____ - .byte CT_DIGIT | CT_XDIGIT ; 57/39 _____9_____ - .byte $00 ; 58/3a _____:_____ - .byte $00 ; 59/3b _____;_____ - .byte $00 ; 60/3c _____<_____ - .byte $00 ; 61/3d _____=_____ - .byte $00 ; 62/3e _____>_____ - .byte $00 ; 63/3f _____?_____ + ct_mix CT_SPACE_SPACETAB_IDX, CT_NONE_IDX ; 32/20 ___SPACE___, 33/21 _____!_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 34/22 _____"_____, 35/23 _____#_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 36/24 _____$_____, 37/25 _____%_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 38/26 _____&_____, 39/27 _____'_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 40/28 _____(_____, 41/29 _____)_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 42/2a _____*_____, 43/2b _____+_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 44/2c _____,_____, 45/2d _____-_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 46/2e _____._____, 47/2f _____/_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 48/30 _____0_____, 49/31 _____1_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 50/32 _____2_____, 51/33 _____3_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 52/34 _____4_____, 53/35 _____5_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 54/36 _____6_____, 55/37 _____7_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 56/38 _____8_____, 57/39 _____9_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 58/3a _____:_____, 59/3b _____;_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 60/3c _____<_____, 61/3d _____=_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 62/3e _____>_____, 63/3f _____?_____ - .byte $00 ; 64/40 _____@_____ - .byte CT_LOWER | CT_XDIGIT ; 65/41 _____a_____ - .byte CT_LOWER | CT_XDIGIT ; 66/42 _____b_____ - .byte CT_LOWER | CT_XDIGIT ; 67/43 _____c_____ - .byte CT_LOWER | CT_XDIGIT ; 68/44 _____d_____ - .byte CT_LOWER | CT_XDIGIT ; 69/45 _____e_____ - .byte CT_LOWER | CT_XDIGIT ; 70/46 _____f_____ - .byte CT_LOWER ; 71/47 _____g_____ - .byte CT_LOWER ; 72/48 _____h_____ - .byte CT_LOWER ; 73/49 _____i_____ - .byte CT_LOWER ; 74/4a _____j_____ - .byte CT_LOWER ; 75/4b _____k_____ - .byte CT_LOWER ; 76/4c _____l_____ - .byte CT_LOWER ; 77/4d _____m_____ - .byte CT_LOWER ; 78/4e _____n_____ - .byte CT_LOWER ; 79/4f _____o_____ - .byte CT_LOWER ; 80/50 _____p_____ - .byte CT_LOWER ; 81/51 _____q_____ - .byte CT_LOWER ; 82/52 _____r_____ - .byte CT_LOWER ; 83/53 _____s_____ - .byte CT_LOWER ; 84/54 _____t_____ - .byte CT_LOWER ; 85/55 _____u_____ - .byte CT_LOWER ; 86/56 _____v_____ - .byte CT_LOWER ; 87/57 _____w_____ - .byte CT_LOWER ; 88/58 _____x_____ - .byte CT_LOWER ; 89/59 _____y_____ - .byte CT_LOWER ; 90/5a _____z_____ - .byte $00 ; 91/5b _____[_____ - .byte $00 ; 92/5c _____\_____ - .byte $00 ; 93/5d _____]_____ - .byte $00 ; 94/5e _____^_____ - .byte $00 ; 95/5f _UNDERLINE_ - .byte $00 ; 96/60 _A`_grave__ - .byte $00 ; 97/61 _A'_acute__ - .byte $00 ; 98/62 _A^_circum_ - .byte $00 ; 99/63 _A~_tilde__ - .byte $00 ; 100/64 _A"_dieres_ - .byte $00 ; 101/65 _A__ring___ - .byte $00 ; 102/66 _AE________ - .byte $00 ; 103/67 _C,cedilla_ - .byte $00 ; 104/68 _E`_grave__ - .byte $00 ; 105/69 _E'_acute__ - .byte $00 ; 106/6a _E^_circum_ - .byte $00 ; 107/6b _E"_dieres_ - .byte $00 ; 108/6c _I`_grave__ - .byte $00 ; 109/6d _I'_acute__ - .byte $00 ; 110/6e _I^_circum_ - .byte $00 ; 111/6f _I"_dieres_ - .byte $00 ; 112/70 _D-_Eth_lr_ - .byte $00 ; 113/71 _N~_tilde__ - .byte $00 ; 114/72 _O`_grave__ - .byte $00 ; 115/73 _O'_acute__ - .byte $00 ; 116/74 _O^_circum_ - .byte $00 ; 117/75 _O~_tilde__ - .byte $00 ; 118/76 _O"_dieres_ - .byte $00 ; 119/77 __multiply_ - .byte $00 ; 120/78 _O/_slash__ - .byte $00 ; 121/79 _U`_grave__ - .byte $00 ; 122/7a _U'_acute__ - .byte $00 ; 123/7b _U^_circum_ - .byte $00 ; 124/7c _U"_dieres_ - .byte $00 ; 125/7d _Y'_acute__ - .byte $00 ; 126/7e _cap_thorn_ - .byte $00 ; 127/7f _Es-sed_B__ + ct_mix CT_NONE_IDX, CT_LOWER_XDIGIT_IDX ; 64/40 _____@_____, 65/41 _____a_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 66/42 _____b_____, 67/43 _____c_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 68/44 _____d_____, 69/45 _____e_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_IDX ; 70/46 _____f_____, 71/47 _____g_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 72/48 _____h_____, 73/49 _____i_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 74/4a _____j_____, 75/4b _____k_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 76/4c _____l_____, 77/4d _____m_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 78/4e _____n_____, 79/4f _____o_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 80/50 _____p_____, 81/51 _____q_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 82/52 _____r_____, 83/53 _____s_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 84/54 _____t_____, 85/55 _____u_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 86/56 _____v_____, 87/57 _____w_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 88/58 _____x_____, 89/59 _____y_____ + ct_mix CT_LOWER_IDX, CT_NONE_IDX ; 90/5a _____z_____, 91/5b _____[_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 92/5c _____\_____, 93/5d _____]_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 94/5e _____^_____, 95/5f _UNDERLINE_ - .byte CT_CTRL ; 128/80 __bullet___ - .byte CT_CTRL ; 129/81 __v_line___ - .byte CT_CTRL ; 130/82 __h_line___ - .byte CT_CTRL ; 131/83 ___cross___ - .byte CT_CTRL ; 132/84 _tl_corner_ - .byte CT_CTRL ; 133/85 _tr_corner_ - .byte CT_CTRL ; 134/86 _bl_corner_ - .byte CT_CTRL ; 135/87 _br_corner_ - .byte CT_CTRL ; 136/88 ___l_tee___ - .byte CT_CTRL ; 137/89 ___r_tee___ - .byte CT_CTRL ; 138/8a ___t_tee___ - .byte CT_CTRL ; 139/8b ___b_tee___ - .byte CT_CTRL ; 140/8c ___heart___ - .byte CT_CTRL | CT_OTHER_WS ; 141/8d _CR/diamond - .byte CT_CTRL ; 142/8e ___club____ - .byte CT_CTRL ; 143/8f ___spade___ - .byte CT_CTRL ; 144/90 _s_circle__ - .byte CT_CTRL | CT_OTHER_WS ; 145/91 _cursor-up_ - .byte CT_CTRL ; 146/92 ___pound___ - .byte CT_CTRL | CT_OTHER_WS ; 147/93 _CLS/check_ - .byte CT_CTRL | CT_OTHER_WS ; 148/94 __INSert___ - .byte CT_CTRL ; 149/95 ____+/-____ - .byte CT_CTRL ; 150/96 __divide___ - .byte CT_CTRL ; 151/97 __degree___ - .byte CT_CTRL ; 152/98 _c_checker_ - .byte CT_CTRL ; 153/99 _f_checker_ - .byte CT_CTRL ; 154/9a _solid_sq__ - .byte CT_CTRL ; 155/9b __cr_char__ - .byte CT_CTRL ; 156/9c _up_arrow__ - .byte CT_CTRL | CT_OTHER_WS ; 157/9d cursor-left - .byte CT_CTRL ; 158/9e _left_arro_ - .byte CT_CTRL ; 159/9f _right_arr_ - .byte CT_SPACE | CT_SPACE_TAB ; 160/a0 _req space_ - .byte $00 ; 161/a1 _!_invertd_ - .byte $00 ; 162/a2 ___cent____ - .byte $00 ; 163/a3 ___pound___ - .byte $00 ; 164/a4 __currency_ - .byte $00 ; 165/a5 ____yen____ - .byte $00 ; 166/a6 _|_broken__ - .byte $00 ; 167/a7 __section__ - .byte $00 ; 168/a8 __umulaut__ - .byte $00 ; 169/a9 _copyright_ - .byte $00 ; 170/aa __fem_ord__ - .byte $00 ; 171/ab _l_ang_quo_ - .byte $00 ; 172/ac ____not____ - .byte $00 ; 173/ad _syl_hyphn_ - .byte $00 ; 174/ae _registerd_ - .byte $00 ; 175/af _overline__ - .byte $00 ; 176/b0 __degrees__ - .byte $00 ; 177/b1 ____+/-____ - .byte $00 ; 178/b2 _2_supersc_ - .byte $00 ; 179/b3 _3_supersc_ - .byte $00 ; 180/b4 ___acute___ - .byte $00 ; 181/b5 ____mu_____ - .byte $00 ; 182/b6 _paragraph_ - .byte $00 ; 183/b7 __mid_dot__ - .byte $00 ; 184/b8 __cedilla__ - .byte $00 ; 185/b9 _1_supersc_ - .byte $00 ; 186/ba __mas_ord__ - .byte $00 ; 187/bb _r_ang_quo_ - .byte $00 ; 188/bc ____1/4____ - .byte $00 ; 189/bd ____1/2____ - .byte $00 ; 190/be ____3/4____ - .byte $00 ; 191/bf _?_invertd_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 96/60 _A`_grave__, 97/61 _A'_acute__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 98/62 _A^_circum_, 99/63 _A~_tilde__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 100/64 _A"_dieres_, 101/65 _A__ring___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 102/66 _AE________, 103/67 _C,cedilla_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 104/68 _E`_grave__, 105/69 _E'_acute__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 106/6a _E^_circum_, 107/6b _E"_dieres_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 108/6c _I`_grave__, 109/6d _I'_acute__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 110/6e _I^_circum_, 111/6f _I"_dieres_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 112/70 _D-_Eth_lr_, 113/71 _N~_tilde__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 114/72 _O`_grave__, 115/73 _O'_acute__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 116/74 _O^_circum_, 117/75 _O~_tilde__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 118/76 _O"_dieres_, 119/77 __multiply_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 120/78 _O/_slash__, 121/79 _U`_grave__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 122/7a _U'_acute__, 123/7b _U^_circum_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 124/7c _U"_dieres_, 125/7d _Y'_acute__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 126/7e _cap_thorn_, 127/7f _Es-sed_B__ - .byte $00 ; 192/c0 _____`_____ - .byte CT_UPPER | CT_XDIGIT ; 193/c1 _____A_____ - .byte CT_UPPER | CT_XDIGIT ; 194/c2 _____B_____ - .byte CT_UPPER | CT_XDIGIT ; 195/c3 _____C_____ - .byte CT_UPPER | CT_XDIGIT ; 196/c4 _____D_____ - .byte CT_UPPER | CT_XDIGIT ; 197/c5 _____E_____ - .byte CT_UPPER | CT_XDIGIT ; 198/c6 _____F_____ - .byte CT_UPPER ; 199/c7 _____G_____ - .byte CT_UPPER ; 200/c8 _____H_____ - .byte CT_UPPER ; 201/c9 _____I_____ - .byte CT_UPPER ; 202/ca _____J_____ - .byte CT_UPPER ; 203/cb _____K_____ - .byte CT_UPPER ; 204/cc _____L_____ - .byte CT_UPPER ; 205/cd _____M_____ - .byte CT_UPPER ; 206/ce _____N_____ - .byte CT_UPPER ; 207/cf _____O_____ - .byte CT_UPPER ; 208/d0 _____P_____ - .byte CT_UPPER ; 209/d1 _____Q_____ - .byte CT_UPPER ; 210/d2 _____R_____ - .byte CT_UPPER ; 211/d3 _____S_____ - .byte CT_UPPER ; 212/d4 _____T_____ - .byte CT_UPPER ; 213/d5 _____U_____ - .byte CT_UPPER ; 214/d6 _____V_____ - .byte CT_UPPER ; 215/d7 _____W_____ - .byte CT_UPPER ; 216/d8 _____X_____ - .byte CT_UPPER ; 217/d9 _____Y_____ - .byte CT_UPPER ; 218/da _____Z_____ - .byte $00 ; 219/db _____{_____ - .byte $00 ; 220/dc _____|_____ - .byte $00 ; 221/dd _____}_____ - .byte $00 ; 222/de _____~_____ - .byte $00 ; 223/df ___HOUSE___ - .byte $00 ; 224/e0 _a`_grave__ - .byte $00 ; 225/e1 _a'_acute__ - .byte $00 ; 226/e2 _a^_circum_ - .byte $00 ; 227/e3 _a~_tilde__ - .byte $00 ; 228/e4 _a"_dieres_ - .byte $00 ; 229/e5 _a__ring___ - .byte $00 ; 230/e6 _ae________ - .byte $00 ; 231/e7 _c,cedilla_ - .byte $00 ; 232/e8 _e`_grave__ - .byte $00 ; 233/e9 _e'_acute__ - .byte $00 ; 234/ea _e^_circum_ - .byte $00 ; 235/eb _e"_dieres_ - .byte $00 ; 236/ec _i`_grave__ - .byte $00 ; 237/ed _i'_acute__ - .byte $00 ; 238/ee _i^_circum_ - .byte $00 ; 239/ef _i"_dieres_ - .byte $00 ; 240/f0 _o^x_Eth_s_ - .byte $00 ; 241/f1 _n~_tilda__ - .byte $00 ; 242/f2 _o`_grave__ - .byte $00 ; 243/f3 _o'_acute__ - .byte $00 ; 244/f4 _o^_circum_ - .byte $00 ; 245/f5 _o~_tilde__ - .byte $00 ; 246/f6 _o"_dieres_ - .byte $00 ; 247/f7 __divide___ - .byte $00 ; 248/f8 _o/_slash__ - .byte $00 ; 249/f9 _u`_grave__ - .byte $00 ; 250/fa _u'_acute__ - .byte $00 ; 251/fb _u^_circum_ - .byte $00 ; 252/fc _u"_dieres_ - .byte $00 ; 253/fd _y'_acute__ - .byte $00 ; 254/fe _sm_thorn__ - .byte $00 ; 255/ff _y"_dieres_ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 128/80 __bullet___, 129/81 __v_line___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 130/82 __h_line___, 131/83 ___cross___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 132/84 _tl_corner_, 133/85 _tr_corner_ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 134/86 _bl_corner_, 135/87 _br_corner_ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 136/88 ___l_tee___, 137/89 ___r_tee___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 138/8a ___t_tee___, 139/8b ___b_tee___ + ct_mix CT_CTRL_IDX, CT_CTRL_WS_IDX ; 140/8c ___heart___, 141/8d _CR/diamond + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 142/8e ___club____, 143/8f ___spade___ + ct_mix CT_CTRL_IDX, CT_CTRL_WS_IDX ; 144/90 _s_circle__, 145/91 _cursor-up_ + ct_mix CT_CTRL_IDX, CT_CTRL_WS_IDX ; 146/92 ___pound___, 147/93 _CLS/check_ + ct_mix CT_CTRL_WS_IDX, CT_CTRL_IDX ; 148/94 __INSert___, 149/95 ____+/-____ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 150/96 __divide___, 151/97 __degree___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 152/98 _c_checker_, 153/99 _f_checker_ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 154/9a _solid_sq__, 155/9b __cr_char__ + ct_mix CT_CTRL_IDX, CT_CTRL_WS_IDX ; 156/9c _up_arrow__, 157/9d cursor-left + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 158/9e _left_arro_, 159/9f _right_arr_ + ct_mix CT_SPACE_SPACETAB_IDX, CT_NONE_IDX ; 160/a0 _req space_, 161/a1 _!_invertd_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 162/a2 ___cent____, 163/a3 ___pound___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 164/a4 __currency_, 165/a5 ____yen____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 166/a6 _|_broken__, 167/a7 __section__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 168/a8 __umulaut__, 169/a9 _copyright_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 170/aa __fem_ord__, 171/ab _l_ang_quo_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 172/ac ____not____, 173/ad _syl_hyphn_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 174/ae _registerd_, 175/af _overline__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 176/b0 __degrees__, 177/b1 ____+/-____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 178/b2 _2_supersc_, 179/b3 _3_supersc_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 180/b4 ___acute___, 181/b5 ____mu_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 182/b6 _paragraph_, 183/b7 __mid_dot__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 184/b8 __cedilla__, 185/b9 _1_supersc_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 186/ba __mas_ord__, 187/bb _r_ang_quo_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 188/bc ____1/4____, 189/bd ____1/2____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 190/be ____3/4____, 191/bf _?_invertd_ + + ct_mix CT_NONE_IDX, CT_UPPER_XDIGIT_IDX ; 192/c0 _____`_____, 193/c1 _____A_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 194/c2 _____B_____, 195/c3 _____C_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 196/c4 _____D_____, 197/c5 _____E_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_IDX ; 198/c6 _____F_____, 199/c7 _____G_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 200/c8 _____H_____, 201/c9 _____I_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 202/ca _____J_____, 203/cb _____K_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 204/cc _____L_____, 205/cd _____M_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 206/ce _____N_____, 207/cf _____O_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 208/d0 _____P_____, 209/d1 _____Q_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 210/d2 _____R_____, 211/d3 _____S_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 212/d4 _____T_____, 213/d5 _____U_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 214/d6 _____V_____, 215/d7 _____W_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 216/d8 _____X_____, 217/d9 _____Y_____ + ct_mix CT_UPPER_IDX, CT_NONE_IDX ; 218/da _____Z_____, 219/db _____{_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 220/dc _____|_____, 221/dd _____}_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 222/de _____~_____, 223/df ___HOUSE___ + + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 224/e0 _a`_grave__, 225/e1 _a'_acute__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 226/e2 _a^_circum_, 227/e3 _a~_tilde__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 228/e4 _a"_dieres_, 229/e5 _a__ring___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 230/e6 _ae________, 231/e7 _c,cedilla_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 232/e8 _e`_grave__, 233/e9 _e'_acute__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 234/ea _e^_circum_, 235/eb _e"_dieres_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 236/ec _i`_grave__, 237/ed _i'_acute__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 238/ee _i^_circum_, 239/ef _i"_dieres_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 240/f0 _o^x_Eth_s_, 241/f1 _n~_tilda__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 242/f2 _o`_grave__, 243/f3 _o'_acute__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 244/f4 _o^_circum_, 245/f5 _o~_tilde__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 246/f6 _o"_dieres_, 247/f7 __divide___ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 248/f8 _o/_slash__, 249/f9 _u`_grave__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 250/fa _u'_acute__, 251/fb _u^_circum_ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 252/fc _u"_dieres_, 253/fd _y'_acute__ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 254/fe _sm_thorn__, 255/ff _y"_dieres_ diff --git a/libsrc/common/atoi.s b/libsrc/common/atoi.s index cb598f719..8427be62e 100644 --- a/libsrc/common/atoi.s +++ b/libsrc/common/atoi.s @@ -8,9 +8,8 @@ .export _atoi, _atol .import negeax, __ctype .importzp sreg, ptr1, ptr2, tmp1 - + .import ctype_preprocessor_no_check .include "ctype.inc" - ; ; Conversion routine (32 bit) ; @@ -27,8 +26,9 @@ _atol: sta ptr1 ; Store s ; Skip whitespace L1: lda (ptr1),y - tax - lda __ctype,x ; get character classification + ; get character classification + jsr ctype_preprocessor_no_check + and #CT_SPACE_TAB ; tab or space? beq L2 ; jump if no iny @@ -36,10 +36,10 @@ L1: lda (ptr1),y inc ptr1+1 bne L1 ; branch always -; Check for a sign. The character is in X +; Check for a sign. Refetch character, X is cleared by preprocessor -L2: txa ; get char - ldx #0 ; flag: positive +L2: lda (ptr1),y ; get char + ; x=0 -> flag: positive cmp #'+' ; ### portable? beq L3 cmp #'-' ; ### portable? @@ -54,9 +54,9 @@ L3: iny L5: stx tmp1 ; remember sign flag L6: lda (ptr1),y ; get next char - tax - lda __ctype,x ; get character classification - and #$04 ; digit? + ; get character classification + jsr ctype_preprocessor_no_check + and #CT_DIGIT ; digit? beq L8 ; done ; Multiply ptr2 (the converted value) by 10 @@ -91,7 +91,7 @@ L6: lda (ptr1),y ; get next char ; Get the character back and add it - txa ; get char back + lda (ptr1),y ; fetch char again sec sbc #'0' ; make numeric value clc diff --git a/libsrc/common/ctype_preprocessor.s b/libsrc/common/ctype_preprocessor.s new file mode 100644 index 000000000..1f33bd224 --- /dev/null +++ b/libsrc/common/ctype_preprocessor.s @@ -0,0 +1,50 @@ +; ctype_preprocessor.s +; +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. +; +; ctype_preprocessor(int c) +; +; converts a character to test via the is*-functions to the matching ctype-masks +; If c is out of the 8-bit range, the function returns with carry set and accu cleared. +; Return value is in accu and x has to be always clear when returning +; (makes calling code shorter)! +; +; IMPORTANT: stricmp, strlower, strnicmp, strupper and atoi rely that Y is not changed +; while calling this function! +; + + .export ctype_preprocessor + .export ctype_preprocessor_no_check + .import __ctype + .import __ctypeIdx + +ctype_preprocessor: + cpx #$00 ; char range ok? + bne SC ; branch if not +ctype_preprocessor_no_check: + lsr a + tax + lda __ctypeIdx, x + bcc @lowerNibble +@upperNibble: + lsr a + lsr a + lsr a + lsr a + clc ; remove out of bounds flag +@lowerNibble: + and #%1111 + tax + lda __ctype, x + ldx #0 + rts + +SC: sec + lda #0 + tax + rts diff --git a/libsrc/common/isalnum.s b/libsrc/common/isalnum.s index 33497a30c..4f6a5e91b 100644 --- a/libsrc/common/isalnum.s +++ b/libsrc/common/isalnum.s @@ -1,21 +1,21 @@ +; isalnum.s ; -; Ullrich von Bassewitz, 02.06.1998 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. ; ; int isalnum (int c); ; .export _isalnum .include "ctype.inc" + .import ctype_preprocessor _isalnum: - cpx #$00 ; Char range ok? - bne @L1 ; Jump if no - tay - lda __ctype,y ; Get character classification - and #CT_ALNUM ; Mask character/digit bits - rts - -@L1: lda #$00 ; Return false - tax - rts - + jsr ctype_preprocessor ; (clears always x) + bcs @L1 ; out of range? (everything already clear -> false) + and #CT_ALNUM ; mask character/digit bits +@L1: rts diff --git a/libsrc/common/isalpha.s b/libsrc/common/isalpha.s index 2ab9bf269..a331722a1 100644 --- a/libsrc/common/isalpha.s +++ b/libsrc/common/isalpha.s @@ -1,21 +1,21 @@ +; isalpha.s ; -; Ullrich von Bassewitz, 02.06.1998 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. ; ; int isalpha (int c); ; .export _isalpha .include "ctype.inc" + .import ctype_preprocessor _isalpha: - cpx #$00 ; Char range ok? - bne @L1 ; Jump if no - tay - lda __ctype,y ; Get character classification - and #CT_ALPHA ; Mask character bits - rts - -@L1: lda #$00 ; Return false - tax - rts - + jsr ctype_preprocessor ; (clears always x) + bcs @L1 ; out of range? (everything already clear -> false) + and #CT_ALPHA ; mask character bits +@L1: rts diff --git a/libsrc/common/isascii.s b/libsrc/common/isascii.s new file mode 100644 index 000000000..dccfabaa1 --- /dev/null +++ b/libsrc/common/isascii.s @@ -0,0 +1,27 @@ +; isascii.s +; +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. +; +; int isascii (int c); +; + + .export _isascii + +_isascii: + cpx #$00 ; Char range ok? + bne @L1 ; Jump if no + + tay + bmi @L1 + + inx + rts + +@L1: lda #$00 ; Return false + tax + rts diff --git a/libsrc/common/isblank.s b/libsrc/common/isblank.s index 6babe8853..5e0eafd73 100644 --- a/libsrc/common/isblank.s +++ b/libsrc/common/isblank.s @@ -1,5 +1,11 @@ +; isblank.s ; -; Ullrich von Bassewitz, 02.06.1998 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. ; ; int isblank (int c); ; @@ -8,16 +14,10 @@ .export _isblank .include "ctype.inc" + .import ctype_preprocessor _isblank: - cpx #$00 ; Char range ok? - bne @L1 ; Jump if no - tay - lda __ctype,y ; Get character classification - and #CT_SPACE_TAB ; Mask blank bit - rts - -@L1: lda #$00 ; Return false - tax - rts - + jsr ctype_preprocessor ; (clears always x) + bcs @L1 ; out of range? (everything already clear -> false) + and #CT_SPACE_TAB ; mask blank bit + @L1: rts diff --git a/libsrc/common/iscntrl.s b/libsrc/common/iscntrl.s index 728716450..f4bf02858 100644 --- a/libsrc/common/iscntrl.s +++ b/libsrc/common/iscntrl.s @@ -1,21 +1,21 @@ +; iscntrl.s ; -; Ullrich von Bassewitz, 02.06.1998 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. ; ; int iscntrl (int c); ; .export _iscntrl .include "ctype.inc" + .import ctype_preprocessor _iscntrl: - cpx #$00 ; Char range ok? - bne @L1 ; Jump if no - tay - lda __ctype,y ; Get character classification - and #CT_CTRL ; Mask control character bit - rts - -@L1: lda #$00 ; Return false - tax - rts - + jsr ctype_preprocessor ; (clears always x) + bcs @L1 ; out of range? (everything already clear -> false) + and #CT_CTRL ; mask control character bit +@L1: rts diff --git a/libsrc/common/isdigit.s b/libsrc/common/isdigit.s index 2972c8941..c0e8bb026 100644 --- a/libsrc/common/isdigit.s +++ b/libsrc/common/isdigit.s @@ -1,21 +1,21 @@ +; isdigit.s ; -; Ullrich von Bassewitz, 02.06.1998 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. ; ; int isdigit (int c); ; .export _isdigit .include "ctype.inc" + .import ctype_preprocessor _isdigit: - cpx #$00 ; Char range ok? - bne @L1 ; Jump if no - tay - lda __ctype,y ; Get character classification - and #CT_DIGIT ; Mask digit bit - rts - -@L1: lda #$00 ; Return false - tax - rts - + jsr ctype_preprocessor ; (clears always x) + bcs @L1 ; out of range? (everything already clear -> false) + and #CT_DIGIT ; mask digit bit + @L1: rts diff --git a/libsrc/common/isgraph.s b/libsrc/common/isgraph.s index bf94014ec..575b05a62 100644 --- a/libsrc/common/isgraph.s +++ b/libsrc/common/isgraph.s @@ -1,25 +1,25 @@ +; isgraph.s ; -; 1998-06-02, Ullrich von Bassewitz -; 2014-09-10, Greg King +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. ; ; int isgraph (int c); ; .export _isgraph .include "ctype.inc" + .import ctype_preprocessor _isgraph: - cpx #>$0000 ; Char range OK? - bne @L1 ; Jump if no - tay - lda __ctype,y ; Get character classification - and #CT_CTRL_SPACE ; Mask character bits - cmp #1 ; If false, then set "borrow" flag + jsr ctype_preprocessor ; (clears always x) + bcs @L1 ; out of range? (everything already clear -> false) + and #CT_CTRL_SPACE ; mask character bits + cmp #1 ; if false, then set "borrow" flag lda #0 - sbc #0 ; Invert logic - rts ; Return NOT control and NOT space - -@L1: lda #<0 ; Return false - tax - rts + sbc #0 ; invert logic (return NOT control and NOT space) +@L1: rts diff --git a/libsrc/common/islower.s b/libsrc/common/islower.s index 32e00fbd6..62ae41643 100644 --- a/libsrc/common/islower.s +++ b/libsrc/common/islower.s @@ -1,21 +1,23 @@ +; islower.s ; -; Ullrich von Bassewitz, 02.06.1998 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. ; ; int islower (int c); ; .export _islower .include "ctype.inc" + .import ctype_preprocessor _islower: - cpx #$00 ; Char range ok? - bne @L1 ; Jump if no - tay - lda __ctype,y ; Get character classification - and #CT_LOWER ; Mask lower char bit - rts + jsr ctype_preprocessor ; (clears always x) + bcs @L1 ; out of range? (everything already clear -> false) + and #CT_LOWER ; mask lower char bit +@L1: rts -@L1: lda #$00 ; Return false - tax - rts diff --git a/libsrc/common/isprint.s b/libsrc/common/isprint.s index 1511753fd..cbe68c801 100644 --- a/libsrc/common/isprint.s +++ b/libsrc/common/isprint.s @@ -1,22 +1,22 @@ +; isprint.s ; -; Ullrich von Bassewitz, 02.06.1998 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. ; ; int isprint (int c); ; .export _isprint .include "ctype.inc" + .import ctype_preprocessor _isprint: - cpx #$00 ; Char range ok? - bne @L1 ; Jump if no - tay - lda __ctype,y ; Get character classification - eor #CT_CTRL ; NOT a control char - and #CT_CTRL ; Mask control char bit - rts - -@L1: lda #$00 ; Return false - tax - rts - + jsr ctype_preprocessor ; (clears always x) + bcs @L1 ; out of range? (everything already clear -> false) + eor #CT_CTRL ; NOT a control char + and #CT_CTRL ; mask control char bit +@L1: rts diff --git a/libsrc/common/ispunct.s b/libsrc/common/ispunct.s index 087532940..ad48fc534 100644 --- a/libsrc/common/ispunct.s +++ b/libsrc/common/ispunct.s @@ -1,25 +1,24 @@ +; ispunct.s ; -; 1998-06-02, Ullrich von Bassewitz -; 2014-09-10, Greg King +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. ; ; int ispunct (int c); ; .export _ispunct .include "ctype.inc" + .import ctype_preprocessor _ispunct: - cpx #>$0000 ; Char range OK? - bne @L1 ; Jump if no - tay - lda __ctype,y ; Get character classification - and #CT_NOT_PUNCT ; Mask relevant bits - cmp #1 ; If false, then set "borrow" flag + jsr ctype_preprocessor ; (clears always x) + bcs @L1 ; out of range? (everything already clear -> false) + and #CT_NOT_PUNCT ; mask relevant bits + cmp #1 ; if false, then set "borrow" flag lda #0 - sbc #0 ; Invert logic - rts ; Return NOT (space | control | digit | alpha) - -@L1: lda #<0 ; Return false - tax - rts - + sbc #0 ; invert logic (return NOT (space | control | digit | alpha)) +@L1: rts diff --git a/libsrc/common/isspace.s b/libsrc/common/isspace.s index 64849f7f7..272acac0c 100644 --- a/libsrc/common/isspace.s +++ b/libsrc/common/isspace.s @@ -1,21 +1,21 @@ +; isspace.s ; -; Ullrich von Bassewitz, 02.06.1998 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. ; ; int isspace (int c); ; .export _isspace .include "ctype.inc" + .import ctype_preprocessor _isspace: - cpx #$00 ; Char range ok? - bne @L1 ; Jump if no - tay - lda __ctype,y ; Get character classification - and #(CT_SPACE | CT_OTHER_WS) ; Mask space bits - rts - -@L1: lda #$00 ; Return false - tax - rts - + jsr ctype_preprocessor ; (clears always x) + bcs @L1 ; out of range? (everything already clear -> false) + and #(CT_SPACE | CT_OTHER_WS) ; mask space bits + @L1: rts diff --git a/libsrc/common/isupper.s b/libsrc/common/isupper.s index 698983ec8..2d89459a0 100644 --- a/libsrc/common/isupper.s +++ b/libsrc/common/isupper.s @@ -1,21 +1,21 @@ +; isupper.s ; -; Ullrich von Bassewitz, 02.06.1998 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. ; ; int isupper (int c); ; .export _isupper .include "ctype.inc" + .import ctype_preprocessor _isupper: - cpx #$00 ; Char range ok? - bne @L1 ; Jump if no - tay - lda __ctype,y ; Get character classification - and #CT_UPPER ; Mask upper char bit - rts - -@L1: lda #$00 ; Return false - tax - rts - + jsr ctype_preprocessor ; (clears always x) + bcs @L1 ; out of range? (everything already clear -> false) + and #CT_UPPER ; mask upper char bit +@L1: rts diff --git a/libsrc/common/isxdigit.s b/libsrc/common/isxdigit.s index 36f86ef19..07fef5c2b 100644 --- a/libsrc/common/isxdigit.s +++ b/libsrc/common/isxdigit.s @@ -1,21 +1,21 @@ +; isxdigit.s ; -; Ullrich von Bassewitz, 02.06.1998 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. ; ; int isxdigit (int c); ; .export _isxdigit .include "ctype.inc" + .import ctype_preprocessor _isxdigit: - cpx #$00 ; Char range ok? - bne @L1 ; Jump if no - tay - lda __ctype,y ; Get character classification - and #CT_XDIGIT ; Mask xdigit bit - rts - -@L1: lda #$00 ; Return false - tax - rts - + jsr ctype_preprocessor ; (clears always x) + bcs @L1 ; out of range? (everything already clear -> false) + and #CT_XDIGIT ; mask xdigit bit +@L1: rts diff --git a/libsrc/common/stricmp.s b/libsrc/common/stricmp.s index 384e78e31..e1683d9f3 100644 --- a/libsrc/common/stricmp.s +++ b/libsrc/common/stricmp.s @@ -1,5 +1,11 @@ +; stricmp.s ; -; Ullrich von Bassewitz, 03.06.1998 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. ; ; int stricmp (const char* s1, const char* s2); /* DOS way */ ; int strcasecmp (const char* s1, const char* s2); /* UNIX way */ @@ -7,9 +13,8 @@ .export _stricmp, _strcasecmp .import popptr1 - .import __ctype - .importzp ptr1, ptr2, tmp1 - + .importzp ptr1, ptr2, tmp1, tmp2 + .import ctype_preprocessor_no_check .include "ctype.inc" _stricmp: @@ -20,27 +25,27 @@ _strcasecmp: ; ldy #0 ; Y=0 guaranteed by popptr1 loop: lda (ptr2),y ; get char from second string - tax - lda __ctype,x ; get character classification + sta tmp2 ; and save it + ; get character classification + jsr ctype_preprocessor_no_check and #CT_LOWER ; lower case char? beq L1 ; jump if no - txa ; get character back - clc - adc #<('A'-'a') ; make upper case char - tax ; -L1: stx tmp1 ; remember upper case equivalent + lda #<('A'-'a') ; make upper case char + adc tmp2 ; ctype_preprocessor_no_check ensures carry clear! + sta tmp2 ; remember upper case equivalent - lda (ptr1),y ; get character from first string - tax - lda __ctype,x ; get character classification +L1: lda (ptr1),y ; get character from first string + sta tmp1 + ; get character classification + jsr ctype_preprocessor_no_check and #CT_LOWER ; lower case char? beq L2 ; jump if no - txa ; get character back - clc - adc #<('A'-'a') ; make upper case char - tax + lda #<('A'-'a') ; make upper case char + adc tmp1 ; ctype_preprocessor_no_check ensures carry clear! + sta tmp1 ; remember upper case equivalent -L2: cpx tmp1 ; compare characters +L2: ldx tmp1 + cpx tmp2 ; compare characters bne L3 txa ; end of strings? beq L5 ; a/x both zero diff --git a/libsrc/common/strlower.s b/libsrc/common/strlower.s index 848a4faff..8c634b6e6 100644 --- a/libsrc/common/strlower.s +++ b/libsrc/common/strlower.s @@ -10,9 +10,8 @@ .export _strlower, _strlwr .import popax - .import __ctype .importzp ptr1, ptr2 - + .import ctype_preprocessor_no_check .include "ctype.inc" _strlower: @@ -25,11 +24,11 @@ _strlwr: loop: lda (ptr1),y ; get character beq L9 ; jump if done - tax - lda __ctype,x ; get character classification + ; get character classification + jsr ctype_preprocessor_no_check and #CT_UPPER ; upper case char? beq L1 ; jump if no - txa ; get character back into accu + lda (ptr1),y ; fetch character again sec sbc #<('A'-'a') ; make lower case char sta (ptr1),y ; store back diff --git a/libsrc/common/strnicmp.s b/libsrc/common/strnicmp.s index 6a5de09e4..54aef2bb8 100644 --- a/libsrc/common/strnicmp.s +++ b/libsrc/common/strnicmp.s @@ -7,9 +7,9 @@ ; .export _strnicmp, _strncasecmp - .import popax, popptr1, __ctype - .importzp ptr1, ptr2, ptr3, tmp1 - + .import popax, popptr1 + .importzp ptr1, ptr2, ptr3, tmp1, tmp2 + .import ctype_preprocessor_no_check .include "ctype.inc" _strnicmp: @@ -46,27 +46,27 @@ Loop: inc ptr3 ; Compare a byte from the strings Comp: lda (ptr2),y - tax - lda __ctype,x ; get character classification + sta tmp2 ; remember original char + ; get character classification + jsr ctype_preprocessor_no_check and #CT_LOWER ; lower case char? beq L1 ; jump if no - txa ; get character back - sec - sbc #<('a'-'A') ; make upper case char - tax ; -L1: stx tmp1 ; remember upper case equivalent + lda #<('A'-'a') ; make upper case char + adc tmp2 ; ctype_preprocessor_no_check ensures carry clear! + sta tmp2 ; remember upper case equivalent - lda (ptr1),y ; get character from first string - tax - lda __ctype,x ; get character classification +L1: lda (ptr1),y ; get character from first string + sta tmp1 ; remember original char + ; get character classification + jsr ctype_preprocessor_no_check and #CT_LOWER ; lower case char? beq L2 ; jump if no - txa ; get character back - sec - sbc #<('a'-'A') ; make upper case char - tax + lda #<('A'-'a') ; make upper case char + adc tmp1 ; ctype_preprocessor_no_check ensures carry clear! + sta tmp1 ; remember upper case equivalent -L2: cpx tmp1 ; compare characters +L2: ldx tmp1 + cpx tmp2 ; compare characters bne NotEqual ; Jump if strings different txa ; End of strings? beq Equal1 ; Jump if EOS reached, a/x == 0 diff --git a/libsrc/common/strupper.s b/libsrc/common/strupper.s index bf0d3b622..c07fb17c1 100644 --- a/libsrc/common/strupper.s +++ b/libsrc/common/strupper.s @@ -10,9 +10,8 @@ .export _strupper, _strupr .import popax - .import __ctype .importzp ptr1, ptr2 - + .import ctype_preprocessor_no_check .include "ctype.inc" _strupper: @@ -25,11 +24,10 @@ _strupr: loop: lda (ptr1),y ; get character beq L9 ; jump if done - tax - lda __ctype,x ; get character classification + jsr ctype_preprocessor_no_check and #CT_LOWER ; lower case char? beq L1 ; jump if no - txa ; get character back into accu + lda (ptr1),y ; fetch character again clc adc #<('A'-'a') ; make upper case char sta (ptr1),y ; store back diff --git a/libsrc/creativision/ctype.s b/libsrc/creativision/ctype.s index 6e0ab1785..da4d38472 100644 --- a/libsrc/creativision/ctype.s +++ b/libsrc/creativision/ctype.s @@ -1,172 +1,5 @@ -; -; Ullrich von Bassewitz, 02.06.1998 -; ; Character specification table. ; +; uses the "console" definition -; The tables are readonly, put them into the rodata segment - -.rodata - -; The following 256 byte wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it were'nt for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. -; -; -; Bit assignments: -; -; 0 - Lower case char -; 1 - Upper case char -; 2 - Numeric digit -; 3 - Hex digit (both, lower and upper) -; 4 - Control character -; 5 - The space character itself -; 6 - Other whitespace (that is: '\f', '\n', '\r', '\t' and '\v') -; 7 - Space or tab character - - .export __ctype - -__ctype: - -.repeat 2 ; 2 times for normal and inverted - - .byte $10 ; 0/00 ___ctrl_@___ - .byte $10 ; 1/01 ___ctrl_A___ - .byte $10 ; 2/02 ___ctrl_B___ - .byte $10 ; 3/03 ___ctrl_C___ - .byte $10 ; 4/04 ___ctrl_D___ - .byte $10 ; 5/05 ___ctrl_E___ - .byte $10 ; 6/06 ___ctrl_F___ - .byte $10 ; 7/07 ___ctrl_G___ - .byte $10 ; 8/08 ___ctrl_H___ - .byte $D0 ; 9/09 ___ctrl_I___ - .byte $50 ; 10/0a ___ctrl_J___ - .byte $50 ; 11/0b ___ctrl_K___ - .byte $50 ; 12/0c ___ctrl_L___ - .byte $50 ; 13/0d ___ctrl_M___ - .byte $10 ; 14/0e ___ctrl_N___ - .byte $10 ; 15/0f ___ctrl_O___ - .byte $10 ; 16/10 ___ctrl_P___ - .byte $10 ; 17/11 ___ctrl_Q___ - .byte $10 ; 18/12 ___ctrl_R___ - .byte $10 ; 19/13 ___ctrl_S___ - .byte $10 ; 20/14 ___ctrl_T___ - .byte $10 ; 21/15 ___ctrl_U___ - .byte $10 ; 22/16 ___ctrl_V___ - .byte $10 ; 23/17 ___ctrl_W___ - .byte $10 ; 24/18 ___ctrl_X___ - .byte $10 ; 25/19 ___ctrl_Y___ - .byte $10 ; 26/1a ___ctrl_Z___ - .byte $10 ; 27/1b ___ctrl_[___ - .byte $10 ; 28/1c ___ctrl_\___ - .byte $10 ; 29/1d ___ctrl_]___ - .byte $10 ; 30/1e ___ctrl_^___ - .byte $10 ; 31/1f ___ctrl_____ - .byte $A0 ; 32/20 ___SPACE___ - .byte $00 ; 33/21 _____!_____ - .byte $00 ; 34/22 _____"_____ - .byte $00 ; 35/23 _____#_____ - .byte $00 ; 36/24 _____$_____ - .byte $00 ; 37/25 _____%_____ - .byte $00 ; 38/26 _____&_____ - .byte $00 ; 39/27 _____'_____ - .byte $00 ; 40/28 _____(_____ - .byte $00 ; 41/29 _____)_____ - .byte $00 ; 42/2a _____*_____ - .byte $00 ; 43/2b _____+_____ - .byte $00 ; 44/2c _____,_____ - .byte $00 ; 45/2d _____-_____ - .byte $00 ; 46/2e _____._____ - .byte $00 ; 47/2f _____/_____ - .byte $0C ; 48/30 _____0_____ - .byte $0C ; 49/31 _____1_____ - .byte $0C ; 50/32 _____2_____ - .byte $0C ; 51/33 _____3_____ - .byte $0C ; 52/34 _____4_____ - .byte $0C ; 53/35 _____5_____ - .byte $0C ; 54/36 _____6_____ - .byte $0C ; 55/37 _____7_____ - .byte $0C ; 56/38 _____8_____ - .byte $0C ; 57/39 _____9_____ - .byte $00 ; 58/3a _____:_____ - .byte $00 ; 59/3b _____;_____ - .byte $00 ; 60/3c _____<_____ - .byte $00 ; 61/3d _____=_____ - .byte $00 ; 62/3e _____>_____ - .byte $00 ; 63/3f _____?_____ - - .byte $00 ; 64/40 _____@_____ - .byte $0A ; 65/41 _____A_____ - .byte $0A ; 66/42 _____B_____ - .byte $0A ; 67/43 _____C_____ - .byte $0A ; 68/44 _____D_____ - .byte $0A ; 69/45 _____E_____ - .byte $0A ; 70/46 _____F_____ - .byte $02 ; 71/47 _____G_____ - .byte $02 ; 72/48 _____H_____ - .byte $02 ; 73/49 _____I_____ - .byte $02 ; 74/4a _____J_____ - .byte $02 ; 75/4b _____K_____ - .byte $02 ; 76/4c _____L_____ - .byte $02 ; 77/4d _____M_____ - .byte $02 ; 78/4e _____N_____ - .byte $02 ; 79/4f _____O_____ - .byte $02 ; 80/50 _____P_____ - .byte $02 ; 81/51 _____Q_____ - .byte $02 ; 82/52 _____R_____ - .byte $02 ; 83/53 _____S_____ - .byte $02 ; 84/54 _____T_____ - .byte $02 ; 85/55 _____U_____ - .byte $02 ; 86/56 _____V_____ - .byte $02 ; 87/57 _____W_____ - .byte $02 ; 88/58 _____X_____ - .byte $02 ; 89/59 _____Y_____ - .byte $02 ; 90/5a _____Z_____ - .byte $00 ; 91/5b _____[_____ - .byte $00 ; 92/5c _____\_____ - .byte $00 ; 93/5d _____]_____ - .byte $00 ; 94/5e _____^_____ - .byte $00 ; 95/5f _UNDERLINE_ - .byte $00 ; 96/60 ___grave___ - .byte $09 ; 97/61 _____a_____ - .byte $09 ; 98/62 _____b_____ - .byte $09 ; 99/63 _____c_____ - .byte $09 ; 100/64 _____d_____ - .byte $09 ; 101/65 _____e_____ - .byte $09 ; 102/66 _____f_____ - .byte $01 ; 103/67 _____g_____ - .byte $01 ; 104/68 _____h_____ - .byte $01 ; 105/69 _____i_____ - .byte $01 ; 106/6a _____j_____ - .byte $01 ; 107/6b _____k_____ - .byte $01 ; 108/6c _____l_____ - .byte $01 ; 109/6d _____m_____ - .byte $01 ; 110/6e _____n_____ - .byte $01 ; 111/6f _____o_____ - .byte $01 ; 112/70 _____p_____ - .byte $01 ; 113/71 _____q_____ - .byte $01 ; 114/72 _____r_____ - .byte $01 ; 115/73 _____s_____ - .byte $01 ; 116/74 _____t_____ - .byte $01 ; 117/75 _____u_____ - .byte $01 ; 118/76 _____v_____ - .byte $01 ; 119/77 _____w_____ - .byte $01 ; 120/78 _____x_____ - .byte $01 ; 121/79 _____y_____ - .byte $01 ; 122/7a _____z_____ - .byte $00 ; 123/7b _____{_____ - .byte $00 ; 124/7c _____|_____ - .byte $00 ; 125/7d _____}_____ - .byte $00 ; 126/7e _____~_____ - .byte $40 ; 127/7f ____DEL____ - -.endrepeat + .include "ctype_console.inc" diff --git a/libsrc/gamate/ctype.s b/libsrc/gamate/ctype.s index fa9a65c8b..da4d38472 100644 --- a/libsrc/gamate/ctype.s +++ b/libsrc/gamate/ctype.s @@ -1,161 +1,5 @@ -; -; Stefan Haubenthal with minor changes from Ullrich von Bassewitz, 2003-05-02 -; ; Character specification table. ; +; uses the "console" definition - .include "ctype.inc" - -; The tables are readonly, put them into the rodata segment - -.rodata - -; The following 256 byte wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it were'nt for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. - - -__ctype: - .repeat 2 - .byte CT_CTRL ; 0/00 ___ctrl_@___ - .byte CT_CTRL ; 1/01 ___ctrl_A___ - .byte CT_CTRL ; 2/02 ___ctrl_B___ - .byte CT_CTRL ; 3/03 ___ctrl_C___ - .byte CT_CTRL ; 4/04 ___ctrl_D___ - .byte CT_CTRL ; 5/05 ___ctrl_E___ - .byte CT_CTRL ; 6/06 ___ctrl_F___ - .byte CT_CTRL ; 7/07 ___ctrl_G___ - .byte CT_CTRL ; 8/08 ___ctrl_H___ - .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB - ; 9/09 ___ctrl_I___ - .byte CT_CTRL | CT_OTHER_WS ; 10/0a ___ctrl_J___ - .byte CT_CTRL | CT_OTHER_WS ; 11/0b ___ctrl_K___ - .byte CT_CTRL | CT_OTHER_WS ; 12/0c ___ctrl_L___ - .byte CT_CTRL | CT_OTHER_WS ; 13/0d ___ctrl_M___ - .byte CT_CTRL ; 14/0e ___ctrl_N___ - .byte CT_CTRL ; 15/0f ___ctrl_O___ - .byte CT_CTRL ; 16/10 ___ctrl_P___ - .byte CT_CTRL ; 17/11 ___ctrl_Q___ - .byte CT_CTRL ; 18/12 ___ctrl_R___ - .byte CT_CTRL ; 19/13 ___ctrl_S___ - .byte CT_CTRL ; 20/14 ___ctrl_T___ - .byte CT_CTRL ; 21/15 ___ctrl_U___ - .byte CT_CTRL ; 22/16 ___ctrl_V___ - .byte CT_CTRL ; 23/17 ___ctrl_W___ - .byte CT_CTRL ; 24/18 ___ctrl_X___ - .byte CT_CTRL ; 25/19 ___ctrl_Y___ - .byte CT_CTRL ; 26/1a ___ctrl_Z___ - .byte CT_CTRL ; 27/1b ___ctrl_[___ - .byte CT_CTRL ; 28/1c ___ctrl_\___ - .byte CT_CTRL ; 29/1d ___ctrl_]___ - .byte CT_CTRL ; 30/1e ___ctrl_^___ - .byte CT_CTRL ; 31/1f ___ctrl_____ - .byte CT_SPACE | CT_SPACE_TAB ; 32/20 ___SPACE___ - .byte CT_NONE ; 33/21 _____!_____ - .byte CT_NONE ; 34/22 _____"_____ - .byte CT_NONE ; 35/23 _____#_____ - .byte CT_NONE ; 36/24 _____$_____ - .byte CT_NONE ; 37/25 _____%_____ - .byte CT_NONE ; 38/26 _____&_____ - .byte CT_NONE ; 39/27 _____'_____ - .byte CT_NONE ; 40/28 _____(_____ - .byte CT_NONE ; 41/29 _____)_____ - .byte CT_NONE ; 42/2a _____*_____ - .byte CT_NONE ; 43/2b _____+_____ - .byte CT_NONE ; 44/2c _____,_____ - .byte CT_NONE ; 45/2d _____-_____ - .byte CT_NONE ; 46/2e _____._____ - .byte CT_NONE ; 47/2f _____/_____ - .byte CT_DIGIT | CT_XDIGIT ; 48/30 _____0_____ - .byte CT_DIGIT | CT_XDIGIT ; 49/31 _____1_____ - .byte CT_DIGIT | CT_XDIGIT ; 50/32 _____2_____ - .byte CT_DIGIT | CT_XDIGIT ; 51/33 _____3_____ - .byte CT_DIGIT | CT_XDIGIT ; 52/34 _____4_____ - .byte CT_DIGIT | CT_XDIGIT ; 53/35 _____5_____ - .byte CT_DIGIT | CT_XDIGIT ; 54/36 _____6_____ - .byte CT_DIGIT | CT_XDIGIT ; 55/37 _____7_____ - .byte CT_DIGIT | CT_XDIGIT ; 56/38 _____8_____ - .byte CT_DIGIT | CT_XDIGIT ; 57/39 _____9_____ - .byte CT_NONE ; 58/3a _____:_____ - .byte CT_NONE ; 59/3b _____;_____ - .byte CT_NONE ; 60/3c _____<_____ - .byte CT_NONE ; 61/3d _____=_____ - .byte CT_NONE ; 62/3e _____>_____ - .byte CT_NONE ; 63/3f _____?_____ - - .byte CT_NONE ; 64/40 _____@_____ - .byte CT_UPPER | CT_XDIGIT ; 65/41 _____A_____ - .byte CT_UPPER | CT_XDIGIT ; 66/42 _____B_____ - .byte CT_UPPER | CT_XDIGIT ; 67/43 _____C_____ - .byte CT_UPPER | CT_XDIGIT ; 68/44 _____D_____ - .byte CT_UPPER | CT_XDIGIT ; 69/45 _____E_____ - .byte CT_UPPER | CT_XDIGIT ; 70/46 _____F_____ - .byte CT_UPPER ; 71/47 _____G_____ - .byte CT_UPPER ; 72/48 _____H_____ - .byte CT_UPPER ; 73/49 _____I_____ - .byte CT_UPPER ; 74/4a _____J_____ - .byte CT_UPPER ; 75/4b _____K_____ - .byte CT_UPPER ; 76/4c _____L_____ - .byte CT_UPPER ; 77/4d _____M_____ - .byte CT_UPPER ; 78/4e _____N_____ - .byte CT_UPPER ; 79/4f _____O_____ - .byte CT_UPPER ; 80/50 _____P_____ - .byte CT_UPPER ; 81/51 _____Q_____ - .byte CT_UPPER ; 82/52 _____R_____ - .byte CT_UPPER ; 83/53 _____S_____ - .byte CT_UPPER ; 84/54 _____T_____ - .byte CT_UPPER ; 85/55 _____U_____ - .byte CT_UPPER ; 86/56 _____V_____ - .byte CT_UPPER ; 87/57 _____W_____ - .byte CT_UPPER ; 88/58 _____X_____ - .byte CT_UPPER ; 89/59 _____Y_____ - .byte CT_UPPER ; 90/5a _____Z_____ - .byte CT_NONE ; 91/5b _____[_____ - .byte CT_NONE ; 92/5c _____\_____ - .byte CT_NONE ; 93/5d _____]_____ - .byte CT_NONE ; 94/5e _____^_____ - .byte CT_NONE ; 95/5f _UNDERLINE_ - .byte CT_NONE ; 96/60 ___grave___ - .byte CT_LOWER | CT_XDIGIT ; 97/61 _____a_____ - .byte CT_LOWER | CT_XDIGIT ; 98/62 _____b_____ - .byte CT_LOWER | CT_XDIGIT ; 99/63 _____c_____ - .byte CT_LOWER | CT_XDIGIT ; 100/64 _____d_____ - .byte CT_LOWER | CT_XDIGIT ; 101/65 _____e_____ - .byte CT_LOWER | CT_XDIGIT ; 102/66 _____f_____ - .byte CT_LOWER ; 103/67 _____g_____ - .byte CT_LOWER ; 104/68 _____h_____ - .byte CT_LOWER ; 105/69 _____i_____ - .byte CT_LOWER ; 106/6a _____j_____ - .byte CT_LOWER ; 107/6b _____k_____ - .byte CT_LOWER ; 108/6c _____l_____ - .byte CT_LOWER ; 109/6d _____m_____ - .byte CT_LOWER ; 110/6e _____n_____ - .byte CT_LOWER ; 111/6f _____o_____ - .byte CT_LOWER ; 112/70 _____p_____ - .byte CT_LOWER ; 113/71 _____q_____ - .byte CT_LOWER ; 114/72 _____r_____ - .byte CT_LOWER ; 115/73 _____s_____ - .byte CT_LOWER ; 116/74 _____t_____ - .byte CT_LOWER ; 117/75 _____u_____ - .byte CT_LOWER ; 118/76 _____v_____ - .byte CT_LOWER ; 119/77 _____w_____ - .byte CT_LOWER ; 120/78 _____x_____ - .byte CT_LOWER ; 121/79 _____y_____ - .byte CT_LOWER ; 122/7a _____z_____ - .byte CT_NONE ; 123/7b _____{_____ - .byte CT_NONE ; 124/7c _____|_____ - .byte CT_NONE ; 125/7d _____}_____ - .byte CT_NONE ; 126/7e _____~_____ - .byte CT_OTHER_WS ; 127/7f ____DEL____ - .endrepeat - - + .include "ctype_console.inc" diff --git a/libsrc/geos-common/system/ctype.s b/libsrc/geos-common/system/ctype.s index cc0cc98b3..a50ad1635 100644 --- a/libsrc/geos-common/system/ctype.s +++ b/libsrc/geos-common/system/ctype.s @@ -1,281 +1,157 @@ +; ctype.s +; +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://github.com/cc65/cc65 +; +; See "LICENSE" file for legal information. +; +; GEOS character specification table. ; ; Source: The Hitchhiker's Guide To GEOS ; http://lyonlabs.org/commodore/onrequest/geos-manuals/The_Hitchhikers_Guide_to_GEOS.pdf -; -; Character specification table. -; - .include "ctype.inc" + .include "ctypetable.inc" + .export __ctypeIdx + +; The tables are readonly, put them into the rodata segment .rodata -; The following 256 byte wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it were'nt for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. +__ctypeIdx: + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 0/00 ____NULL___, 1/01 ____N/A____ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 2/02 ____N/A____, 3/03 ____N/A____ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 4/04 ____N/A____, 5/05 ____N/A____ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 6/06 ____N/A____, 7/07 ____N/A____ + ct_mix CT_CTRL_IDX, CT_CTRL_WS_SPACETAB_IDX ; 8/08 __BAKSPACE_, 9/09 __FWDSPACE_ + ct_mix CT_CTRL_WS_IDX, CT_CTRL_IDX ; 10/0a _____LF____, 11/0b ____HOME___ + ct_mix CT_CTRL_IDX, CT_CTRL_WS_IDX ; 12/0c ___UPLINE__, 13/0d _____CR____ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 14/0e __ULINEON__, 15/0f __ULINEOFF_ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 16/10 _ESC_GRAPH_, 17/11 ____N/A____ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 18/12 ___REVON___, 19/13 ___REVOFF__ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 20/14 ___GOTOX___, 21/15 ___GOTOY___ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 22/16 ___GOTOXY__, 23/17 _NEWCRDSET_ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 24/18 ___BOLDON__, 25/19 __ITALICON_ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 26/1a _OUTLINEON_, 27/1b _PLAINTEXT_ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 28/1c ____N/A____, 29/1d ____N/A____ + ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 30/1e ____N/A____, 31/1f ____N/A____ -__ctype: - .byte CT_CTRL ; 0/00 ____NULL___ - .byte CT_CTRL ; 1/01 ____N/A____ - .byte CT_CTRL ; 2/02 ____N/A____ - .byte CT_CTRL ; 3/03 ____N/A____ - .byte CT_CTRL ; 4/04 ____N/A____ - .byte CT_CTRL ; 5/05 ____N/A____ - .byte CT_CTRL ; 6/06 ____N/A____ - .byte CT_CTRL ; 7/07 ____N/A____ - .byte CT_CTRL ; 8/08 __BAKSPACE_ - .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB ; 9/09 __FWDSPACE_ - .byte CT_CTRL | CT_OTHER_WS ; 10/0a _____LF____ - .byte CT_CTRL ; 11/0b ____HOME___ - .byte CT_CTRL ; 12/0c ___UPLINE__ - .byte CT_CTRL | CT_OTHER_WS ; 13/0d _____CR____ - .byte CT_CTRL ; 14/0e __ULINEON__ - .byte CT_CTRL ; 15/0f __ULINEOFF_ - .byte CT_CTRL ; 16/10 _ESC_GRAPH_ - .byte CT_CTRL ; 17/11 ____N/A____ - .byte CT_CTRL ; 18/12 ___REVON___ - .byte CT_CTRL ; 19/13 ___REVOFF__ - .byte CT_CTRL ; 20/14 ___GOTOX___ - .byte CT_CTRL ; 21/15 ___GOTOY___ - .byte CT_CTRL ; 22/16 ___GOTOXY__ - .byte CT_CTRL ; 23/17 _NEWCRDSET_ - .byte CT_CTRL ; 24/18 ___BOLDON__ - .byte CT_CTRL ; 25/19 __ITALICON_ - .byte CT_CTRL ; 26/1a _OUTLINEON_ - .byte CT_CTRL ; 27/1b _PLAINTEXT_ - .byte CT_CTRL ; 28/1c ____N/A____ - .byte CT_CTRL ; 29/1d ____N/A____ - .byte CT_CTRL ; 30/1e ____N/A____ - .byte CT_CTRL ; 31/1f ____N/A____ - .byte CT_SPACE_TAB | CT_SPACE ; 32/20 ___SPACE___ - .byte CT_NONE ; 33/21 _____!_____ - .byte CT_NONE ; 34/22 _____"_____ - .byte CT_NONE ; 35/23 _____#_____ - .byte CT_NONE ; 36/24 _____$_____ - .byte CT_NONE ; 37/25 _____%_____ - .byte CT_NONE ; 38/26 _____&_____ - .byte CT_NONE ; 39/27 _____'_____ - .byte CT_NONE ; 40/28 _____(_____ - .byte CT_NONE ; 41/29 _____)_____ - .byte CT_NONE ; 42/2a _____*_____ - .byte CT_NONE ; 43/2b _____+_____ - .byte CT_NONE ; 44/2c _____,_____ - .byte CT_NONE ; 45/2d _____-_____ - .byte CT_NONE ; 46/2e _____._____ - .byte CT_NONE ; 47/2f _____/_____ - .byte CT_DIGIT | CT_XDIGIT ; 48/30 _____0_____ - .byte CT_DIGIT | CT_XDIGIT ; 49/31 _____1_____ - .byte CT_DIGIT | CT_XDIGIT ; 50/32 _____2_____ - .byte CT_DIGIT | CT_XDIGIT ; 51/33 _____3_____ - .byte CT_DIGIT | CT_XDIGIT ; 52/34 _____4_____ - .byte CT_DIGIT | CT_XDIGIT ; 53/35 _____5_____ - .byte CT_DIGIT | CT_XDIGIT ; 54/36 _____6_____ - .byte CT_DIGIT | CT_XDIGIT ; 55/37 _____7_____ - .byte CT_DIGIT | CT_XDIGIT ; 56/38 _____8_____ - .byte CT_DIGIT | CT_XDIGIT ; 57/39 _____9_____ - .byte CT_NONE ; 58/3a _____:_____ - .byte CT_NONE ; 59/3b _____;_____ - .byte CT_NONE ; 60/3c _____<_____ - .byte CT_NONE ; 61/3d _____=_____ - .byte CT_NONE ; 62/3e _____>_____ - .byte CT_NONE ; 63/3f _____?_____ - .byte CT_NONE ; 64/40 _____@_____ - .byte CT_UPPER | CT_XDIGIT ; 65/41 _____A_____ - .byte CT_UPPER | CT_XDIGIT ; 66/42 _____B_____ - .byte CT_UPPER | CT_XDIGIT ; 67/43 _____C_____ - .byte CT_UPPER | CT_XDIGIT ; 68/44 _____D_____ - .byte CT_UPPER | CT_XDIGIT ; 69/45 _____E_____ - .byte CT_UPPER | CT_XDIGIT ; 70/46 _____F_____ - .byte CT_UPPER ; 71/47 _____G_____ - .byte CT_UPPER ; 72/48 _____H_____ - .byte CT_UPPER ; 73/49 _____I_____ - .byte CT_UPPER ; 74/4a _____J_____ - .byte CT_UPPER ; 75/4b _____K_____ - .byte CT_UPPER ; 76/4c _____L_____ - .byte CT_UPPER ; 77/4d _____M_____ - .byte CT_UPPER ; 78/4e _____N_____ - .byte CT_UPPER ; 79/4f _____O_____ - .byte CT_UPPER ; 80/50 _____P_____ - .byte CT_UPPER ; 81/51 _____Q_____ - .byte CT_UPPER ; 82/52 _____R_____ - .byte CT_UPPER ; 83/53 _____S_____ - .byte CT_UPPER ; 84/54 _____T_____ - .byte CT_UPPER ; 85/55 _____U_____ - .byte CT_UPPER ; 86/56 _____V_____ - .byte CT_UPPER ; 87/57 _____W_____ - .byte CT_UPPER ; 88/58 _____X_____ - .byte CT_UPPER ; 89/59 _____Y_____ - .byte CT_UPPER ; 90/5a _____Z_____ - .byte CT_NONE ; 91/5b _____[_____ - .byte CT_NONE ; 92/5c _____\_____ - .byte CT_NONE ; 93/5d _____]_____ - .byte CT_NONE ; 94/5e _____^_____ - .byte CT_NONE ; 95/5f _UNDERLINE_ - .byte CT_NONE ; 96/60 _____`_____ - .byte CT_LOWER | CT_XDIGIT ; 97/61 _____a_____ - .byte CT_LOWER | CT_XDIGIT ; 98/62 _____b_____ - .byte CT_LOWER | CT_XDIGIT ; 99/63 _____c_____ - .byte CT_LOWER | CT_XDIGIT ; 100/64 _____d_____ - .byte CT_LOWER | CT_XDIGIT ; 101/65 _____e_____ - .byte CT_LOWER | CT_XDIGIT ; 102/66 _____f_____ - .byte CT_LOWER ; 103/67 _____g_____ - .byte CT_LOWER ; 104/68 _____h_____ - .byte CT_LOWER ; 105/69 _____i_____ - .byte CT_LOWER ; 106/6a _____j_____ - .byte CT_LOWER ; 107/6b _____k_____ - .byte CT_LOWER ; 108/6c _____l_____ - .byte CT_LOWER ; 109/6d _____m_____ - .byte CT_LOWER ; 110/6e _____n_____ - .byte CT_LOWER ; 111/6f _____o_____ - .byte CT_LOWER ; 112/70 _____p_____ - .byte CT_LOWER ; 113/71 _____q_____ - .byte CT_LOWER ; 114/72 _____r_____ - .byte CT_LOWER ; 115/73 _____s_____ - .byte CT_LOWER ; 116/74 _____t_____ - .byte CT_LOWER ; 117/75 _____u_____ - .byte CT_LOWER ; 118/76 _____v_____ - .byte CT_LOWER ; 119/77 _____w_____ - .byte CT_LOWER ; 120/78 _____x_____ - .byte CT_LOWER ; 121/79 _____y_____ - .byte CT_LOWER ; 122/7a _____z_____ - .byte CT_NONE ; 123/7b _____{_____ - .byte CT_NONE ; 124/7c _____|_____ - .byte CT_NONE ; 125/7d _____}_____ - .byte CT_NONE ; 126/7e _____~_____ - .byte CT_CTRL ; 127/7f __USELAST__ - .byte CT_NONE ; 128/80 __SHORTCUT_ - .byte CT_NONE ; 129/81 ____N/A____ - .byte CT_NONE ; 130/82 ____N/A____ - .byte CT_NONE ; 131/83 ____N/A____ - .byte CT_NONE ; 132/84 ____N/A____ - .byte CT_NONE ; 133/85 ____N/A____ - .byte CT_NONE ; 134/86 ____N/A____ - .byte CT_NONE ; 135/87 ____N/A____ - .byte CT_NONE ; 136/88 ____N/A____ - .byte CT_NONE ; 137/89 ____N/A____ - .byte CT_NONE ; 138/8a ____N/A____ - .byte CT_NONE ; 139/8b ____N/A____ - .byte CT_NONE ; 140/8c ____N/A____ - .byte CT_NONE ; 141/8d ____N/A____ - .byte CT_NONE ; 142/8e ____N/A____ - .byte CT_NONE ; 143/8f ____N/A____ - .byte CT_NONE ; 144/90 ____N/A____ - .byte CT_NONE ; 145/91 ____N/A____ - .byte CT_NONE ; 146/92 ____N/A____ - .byte CT_NONE ; 147/93 ____N/A____ - .byte CT_NONE ; 148/94 ____N/A____ - .byte CT_NONE ; 149/95 ____N/A____ - .byte CT_NONE ; 150/96 ____N/A____ - .byte CT_NONE ; 151/97 ____N/A____ - .byte CT_NONE ; 152/98 ____N/A____ - .byte CT_NONE ; 153/99 ____N/A____ - .byte CT_NONE ; 154/9a ____N/A____ - .byte CT_NONE ; 155/9b ____N/A____ - .byte CT_NONE ; 156/9c ____N/A____ - .byte CT_NONE ; 157/9d ____N/A____ - .byte CT_NONE ; 158/9e ____N/A____ - .byte CT_NONE ; 159/9f ____N/A____ - .byte CT_NONE ; 160/a0 ____N/A____ - .byte CT_NONE ; 161/a1 ____N/A____ - .byte CT_NONE ; 162/a2 ____N/A____ - .byte CT_NONE ; 163/a3 ____N/A____ - .byte CT_NONE ; 164/a4 ____N/A____ - .byte CT_NONE ; 165/a5 ____N/A____ - .byte CT_NONE ; 166/a6 ____N/A____ - .byte CT_NONE ; 167/a7 ____N/A____ - .byte CT_NONE ; 168/a8 ____N/A____ - .byte CT_NONE ; 169/a9 ____N/A____ - .byte CT_NONE ; 170/aa ____N/A____ - .byte CT_NONE ; 171/ab ____N/A____ - .byte CT_NONE ; 172/ac ____N/A____ - .byte CT_NONE ; 173/ad ____N/A____ - .byte CT_NONE ; 174/ae ____N/A____ - .byte CT_NONE ; 175/af ____N/A____ - .byte CT_NONE ; 176/b0 ____N/A____ - .byte CT_NONE ; 177/b1 ____N/A____ - .byte CT_NONE ; 178/b2 ____N/A____ - .byte CT_NONE ; 179/b3 ____N/A____ - .byte CT_NONE ; 180/b4 ____N/A____ - .byte CT_NONE ; 181/b5 ____N/A____ - .byte CT_NONE ; 182/b6 ____N/A____ - .byte CT_NONE ; 183/b7 ____N/A____ - .byte CT_NONE ; 184/b8 ____N/A____ - .byte CT_NONE ; 185/b9 ____N/A____ - .byte CT_NONE ; 186/ba ____N/A____ - .byte CT_NONE ; 187/bb ____N/A____ - .byte CT_NONE ; 188/bc ____N/A____ - .byte CT_NONE ; 189/bd ____N/A____ - .byte CT_NONE ; 190/be ____N/A____ - .byte CT_NONE ; 191/bf ____N/A____ - .byte CT_NONE ; 192/c0 ____N/A____ - .byte CT_NONE ; 193/c1 ____N/A____ - .byte CT_NONE ; 194/c2 ____N/A____ - .byte CT_NONE ; 195/c3 ____N/A____ - .byte CT_NONE ; 196/c4 ____N/A____ - .byte CT_NONE ; 197/c5 ____N/A____ - .byte CT_NONE ; 198/c6 ____N/A____ - .byte CT_NONE ; 199/c7 ____N/A____ - .byte CT_NONE ; 200/c8 ____N/A____ - .byte CT_NONE ; 201/c9 ____N/A____ - .byte CT_NONE ; 202/ca ____N/A____ - .byte CT_NONE ; 203/cb ____N/A____ - .byte CT_NONE ; 204/cc ____N/A____ - .byte CT_NONE ; 205/cd ____N/A____ - .byte CT_NONE ; 206/ce ____N/A____ - .byte CT_NONE ; 207/cf ____N/A____ - .byte CT_NONE ; 208/d0 ____N/A____ - .byte CT_NONE ; 209/d1 ____N/A____ - .byte CT_NONE ; 210/d2 ____N/A____ - .byte CT_NONE ; 211/d3 ____N/A____ - .byte CT_NONE ; 212/d4 ____N/A____ - .byte CT_NONE ; 213/d5 ____N/A____ - .byte CT_NONE ; 214/d6 ____N/A____ - .byte CT_NONE ; 215/d7 ____N/A____ - .byte CT_NONE ; 216/d8 ____N/A____ - .byte CT_NONE ; 217/d9 ____N/A____ - .byte CT_NONE ; 218/da ____N/A____ - .byte CT_NONE ; 219/db ____N/A____ - .byte CT_NONE ; 220/dc ____N/A____ - .byte CT_NONE ; 221/dd ____N/A____ - .byte CT_NONE ; 222/de ____N/A____ - .byte CT_NONE ; 223/df ____N/A____ - .byte CT_NONE ; 224/e0 ____N/A____ - .byte CT_NONE ; 225/e1 ____N/A____ - .byte CT_NONE ; 226/e2 ____N/A____ - .byte CT_NONE ; 227/e3 ____N/A____ - .byte CT_NONE ; 228/e4 ____N/A____ - .byte CT_NONE ; 229/e5 ____N/A____ - .byte CT_NONE ; 230/e6 ____N/A____ - .byte CT_NONE ; 231/e7 ____N/A____ - .byte CT_NONE ; 232/e8 ____N/A____ - .byte CT_NONE ; 233/e9 ____N/A____ - .byte CT_NONE ; 234/ea ____N/A____ - .byte CT_NONE ; 235/eb ____N/A____ - .byte CT_NONE ; 236/ec ____N/A____ - .byte CT_NONE ; 237/ed ____N/A____ - .byte CT_NONE ; 238/ee ____N/A____ - .byte CT_NONE ; 239/ef ____N/A____ - .byte CT_NONE ; 240/f0 ____N/A____ - .byte CT_NONE ; 241/f1 ____N/A____ - .byte CT_NONE ; 242/f2 ____N/A____ - .byte CT_NONE ; 243/f3 ____N/A____ - .byte CT_NONE ; 244/f4 ____N/A____ - .byte CT_NONE ; 245/f5 ____N/A____ - .byte CT_NONE ; 246/f6 ____N/A____ - .byte CT_NONE ; 247/f7 ____N/A____ - .byte CT_NONE ; 248/f8 ____N/A____ - .byte CT_NONE ; 249/f9 ____N/A____ - .byte CT_NONE ; 250/fa ____N/A____ - .byte CT_NONE ; 251/fb ____N/A____ - .byte CT_NONE ; 252/fc ____N/A____ - .byte CT_NONE ; 253/fd ____N/A____ - .byte CT_NONE ; 254/fe ____N/A____ - .byte CT_NONE ; 255/ff ____N/A____ + ct_mix CT_SPACE_SPACETAB_IDX, CT_NONE_IDX ; 32/20 ___SPACE___, 33/21 _____!_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 34/22 _____"_____, 35/23 _____#_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 36/24 _____$_____, 37/25 _____%_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 38/26 _____&_____, 39/27 _____'_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 40/28 _____(_____, 41/29 _____)_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 42/2a _____*_____, 43/2b _____+_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 44/2c _____,_____, 45/2d _____-_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 46/2e _____._____, 47/2f _____/_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 48/30 _____0_____, 49/31 _____1_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 50/32 _____2_____, 51/33 _____3_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 52/34 _____4_____, 53/35 _____5_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 54/36 _____6_____, 55/37 _____7_____ + ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 56/38 _____8_____, 57/39 _____9_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 58/3a _____:_____, 59/3b _____;_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 60/3c _____<_____, 61/3d _____=_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 62/3e _____>_____, 63/3f _____?_____ + + ct_mix CT_NONE_IDX, CT_UPPER_XDIGIT_IDX ; 64/40 _____@_____, 65/41 _____A_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 66/42 _____B_____, 67/43 _____C_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 68/44 _____D_____, 69/45 _____E_____ + ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_IDX ; 70/46 _____F_____, 71/47 _____G_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 72/48 _____H_____, 73/49 _____I_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 74/4a _____J_____, 75/4b _____K_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 76/4c _____L_____, 77/4d _____M_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 78/4e _____N_____, 79/4f _____O_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 80/50 _____P_____, 81/51 _____Q_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 82/52 _____R_____, 83/53 _____S_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 84/54 _____T_____, 85/55 _____U_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 86/56 _____V_____, 87/57 _____W_____ + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 88/58 _____X_____, 89/59 _____Y_____ + ct_mix CT_UPPER_IDX, CT_NONE_IDX ; 90/5a _____Z_____, 91/5b _____[_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 92/5c _____\_____, 93/5d _____]_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 94/5e _____^_____, 95/5f _UNDERLINE_ + + ct_mix CT_NONE_IDX, CT_LOWER_XDIGIT_IDX ; 96/60 _____`_____, 97/61 _____a_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 98/62 _____b_____, 99/63 _____c_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 100/64 _____d_____, 101/65 _____e_____ + ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_IDX ; 102/66 _____f_____, 103/67 _____g_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 104/68 _____h_____, 105/69 _____i_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 106/6a _____j_____, 107/6b _____k_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 108/6c _____l_____, 109/6d _____m_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 110/6e _____n_____, 111/6f _____o_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 112/70 _____p_____, 113/71 _____q_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 114/72 _____r_____, 15/73 _____s_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 116/74 _____t_____, 117/75 _____u_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 118/76 _____v_____, 119/77 _____w_____ + ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 120/78 _____x_____, 121/79 _____y_____ + ct_mix CT_LOWER_IDX, CT_NONE_IDX ; 122/7a _____z_____, 123/7b _____{_____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 124/7c _____|_____, 125/7d _____}_____ + ct_mix CT_NONE_IDX, CT_CTRL_IDX ; 126/7e _____~_____, 127/7f __USELAST__ + + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 128/80 __SHORTCUT_ ,129/81 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 130/82 ____N/A____ ,131/83 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 132/84 ____N/A____ ,133/85 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 134/86 ____N/A____, 135/87 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 136/88 ____N/A____ ,137/89 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 138/8a ____N/A____ ,139/8b ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 140/8c ____N/A____, 141/8d ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 142/8e ____N/A____, 143/8f ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 144/90 ____N/A____, 145/91 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 146/92 ____N/A____, 147/93 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 148/94 ____N/A____, 149/95 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 150/96 ____N/A____, 151/97 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 152/98 ____N/A____, 153/99 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 154/9a ____N/A____, 155/9b ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 156/9c ____N/A____, 157/9d ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 158/9e ____N/A____, 159/9f ____N/A____ + + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 160/a0 ____N/A____, 161/a1 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 162/a2 ____N/A____, 163/a3 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 164/a4 ____N/A____, 165/a5 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 166/a6 ____N/A____, 167/a7 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 168/a8 ____N/A____, 169/a9 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 170/aa ____N/A____, 171/ab ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 172/ac ____N/A____, 173/ad ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 174/ae ____N/A____, 175/af ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 176/b0 ____N/A____, 177/b1 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 178/b2 ____N/A____, 179/b3 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 180/b4 ____N/A____, 181/b5 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 182/b6 ____N/A____, 183/b7 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 184/b8 ____N/A____, 185/b9 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 186/ba ____N/A____, 187/bb ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 188/bc ____N/A____, 189/bd ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 190/be ____N/A____, 191/bf ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 192/c0 ____N/A____, 193/c1 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 194/c2 ____N/A____, 195/c3 ____N/A____ + + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 196/c4 ____N/A____, 197/c5 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 198/c6 ____N/A____, 199/c7 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 200/c8 ____N/A____, 201/c9 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 202/ca ____N/A____, 203/cb ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 204/cc ____N/A____, 205/cd ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 206/ce ____N/A____, 207/cf ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 208/d0 ____N/A____, 209/d1 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 210/d2 ____N/A____, 211/d3 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 212/d4 ____N/A____, 213/d5 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 214/d6 ____N/A____, 215/d7 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 216/d8 ____N/A____, 217/d9 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 218/da ____N/A____, 219/db ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 220/dc ____N/A____, 221/dd ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 222/de ____N/A____, 223/df ____N/A____ + + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 224/e0 ____N/A____, 225/e1 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 226/e2 ____N/A____, 227/e3 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 228/e4 ____N/A____, 229/e5 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 230/e6 ____N/A____, 231/e7 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 232/e8 ____N/A____, 233/e9 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 234/ea ____N/A____, 235/eb ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 236/ec ____N/A____, 237/ed ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 238/ee ____N/A____, 239/ef ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 240/f0 ____N/A____, 241/f1 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 242/f2 ____N/A____, 243/f3 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 244/f4 ____N/A____, 245/f5 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 246/f6 ____N/A____, 247/f7 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 248/f8 ____N/A____, 249/f9 ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 250/fa ____N/A____, 251/fb ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 252/fc ____N/A____, 253/fd ____N/A____ + ct_mix CT_NONE_IDX, CT_NONE_IDX ; 254/fe ____N/A____, 255/ff ____N/A____ diff --git a/libsrc/lynx/ctype.s b/libsrc/lynx/ctype.s index 6e0ab1785..da4d38472 100644 --- a/libsrc/lynx/ctype.s +++ b/libsrc/lynx/ctype.s @@ -1,172 +1,5 @@ -; -; Ullrich von Bassewitz, 02.06.1998 -; ; Character specification table. ; +; uses the "console" definition -; The tables are readonly, put them into the rodata segment - -.rodata - -; The following 256 byte wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it were'nt for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. -; -; -; Bit assignments: -; -; 0 - Lower case char -; 1 - Upper case char -; 2 - Numeric digit -; 3 - Hex digit (both, lower and upper) -; 4 - Control character -; 5 - The space character itself -; 6 - Other whitespace (that is: '\f', '\n', '\r', '\t' and '\v') -; 7 - Space or tab character - - .export __ctype - -__ctype: - -.repeat 2 ; 2 times for normal and inverted - - .byte $10 ; 0/00 ___ctrl_@___ - .byte $10 ; 1/01 ___ctrl_A___ - .byte $10 ; 2/02 ___ctrl_B___ - .byte $10 ; 3/03 ___ctrl_C___ - .byte $10 ; 4/04 ___ctrl_D___ - .byte $10 ; 5/05 ___ctrl_E___ - .byte $10 ; 6/06 ___ctrl_F___ - .byte $10 ; 7/07 ___ctrl_G___ - .byte $10 ; 8/08 ___ctrl_H___ - .byte $D0 ; 9/09 ___ctrl_I___ - .byte $50 ; 10/0a ___ctrl_J___ - .byte $50 ; 11/0b ___ctrl_K___ - .byte $50 ; 12/0c ___ctrl_L___ - .byte $50 ; 13/0d ___ctrl_M___ - .byte $10 ; 14/0e ___ctrl_N___ - .byte $10 ; 15/0f ___ctrl_O___ - .byte $10 ; 16/10 ___ctrl_P___ - .byte $10 ; 17/11 ___ctrl_Q___ - .byte $10 ; 18/12 ___ctrl_R___ - .byte $10 ; 19/13 ___ctrl_S___ - .byte $10 ; 20/14 ___ctrl_T___ - .byte $10 ; 21/15 ___ctrl_U___ - .byte $10 ; 22/16 ___ctrl_V___ - .byte $10 ; 23/17 ___ctrl_W___ - .byte $10 ; 24/18 ___ctrl_X___ - .byte $10 ; 25/19 ___ctrl_Y___ - .byte $10 ; 26/1a ___ctrl_Z___ - .byte $10 ; 27/1b ___ctrl_[___ - .byte $10 ; 28/1c ___ctrl_\___ - .byte $10 ; 29/1d ___ctrl_]___ - .byte $10 ; 30/1e ___ctrl_^___ - .byte $10 ; 31/1f ___ctrl_____ - .byte $A0 ; 32/20 ___SPACE___ - .byte $00 ; 33/21 _____!_____ - .byte $00 ; 34/22 _____"_____ - .byte $00 ; 35/23 _____#_____ - .byte $00 ; 36/24 _____$_____ - .byte $00 ; 37/25 _____%_____ - .byte $00 ; 38/26 _____&_____ - .byte $00 ; 39/27 _____'_____ - .byte $00 ; 40/28 _____(_____ - .byte $00 ; 41/29 _____)_____ - .byte $00 ; 42/2a _____*_____ - .byte $00 ; 43/2b _____+_____ - .byte $00 ; 44/2c _____,_____ - .byte $00 ; 45/2d _____-_____ - .byte $00 ; 46/2e _____._____ - .byte $00 ; 47/2f _____/_____ - .byte $0C ; 48/30 _____0_____ - .byte $0C ; 49/31 _____1_____ - .byte $0C ; 50/32 _____2_____ - .byte $0C ; 51/33 _____3_____ - .byte $0C ; 52/34 _____4_____ - .byte $0C ; 53/35 _____5_____ - .byte $0C ; 54/36 _____6_____ - .byte $0C ; 55/37 _____7_____ - .byte $0C ; 56/38 _____8_____ - .byte $0C ; 57/39 _____9_____ - .byte $00 ; 58/3a _____:_____ - .byte $00 ; 59/3b _____;_____ - .byte $00 ; 60/3c _____<_____ - .byte $00 ; 61/3d _____=_____ - .byte $00 ; 62/3e _____>_____ - .byte $00 ; 63/3f _____?_____ - - .byte $00 ; 64/40 _____@_____ - .byte $0A ; 65/41 _____A_____ - .byte $0A ; 66/42 _____B_____ - .byte $0A ; 67/43 _____C_____ - .byte $0A ; 68/44 _____D_____ - .byte $0A ; 69/45 _____E_____ - .byte $0A ; 70/46 _____F_____ - .byte $02 ; 71/47 _____G_____ - .byte $02 ; 72/48 _____H_____ - .byte $02 ; 73/49 _____I_____ - .byte $02 ; 74/4a _____J_____ - .byte $02 ; 75/4b _____K_____ - .byte $02 ; 76/4c _____L_____ - .byte $02 ; 77/4d _____M_____ - .byte $02 ; 78/4e _____N_____ - .byte $02 ; 79/4f _____O_____ - .byte $02 ; 80/50 _____P_____ - .byte $02 ; 81/51 _____Q_____ - .byte $02 ; 82/52 _____R_____ - .byte $02 ; 83/53 _____S_____ - .byte $02 ; 84/54 _____T_____ - .byte $02 ; 85/55 _____U_____ - .byte $02 ; 86/56 _____V_____ - .byte $02 ; 87/57 _____W_____ - .byte $02 ; 88/58 _____X_____ - .byte $02 ; 89/59 _____Y_____ - .byte $02 ; 90/5a _____Z_____ - .byte $00 ; 91/5b _____[_____ - .byte $00 ; 92/5c _____\_____ - .byte $00 ; 93/5d _____]_____ - .byte $00 ; 94/5e _____^_____ - .byte $00 ; 95/5f _UNDERLINE_ - .byte $00 ; 96/60 ___grave___ - .byte $09 ; 97/61 _____a_____ - .byte $09 ; 98/62 _____b_____ - .byte $09 ; 99/63 _____c_____ - .byte $09 ; 100/64 _____d_____ - .byte $09 ; 101/65 _____e_____ - .byte $09 ; 102/66 _____f_____ - .byte $01 ; 103/67 _____g_____ - .byte $01 ; 104/68 _____h_____ - .byte $01 ; 105/69 _____i_____ - .byte $01 ; 106/6a _____j_____ - .byte $01 ; 107/6b _____k_____ - .byte $01 ; 108/6c _____l_____ - .byte $01 ; 109/6d _____m_____ - .byte $01 ; 110/6e _____n_____ - .byte $01 ; 111/6f _____o_____ - .byte $01 ; 112/70 _____p_____ - .byte $01 ; 113/71 _____q_____ - .byte $01 ; 114/72 _____r_____ - .byte $01 ; 115/73 _____s_____ - .byte $01 ; 116/74 _____t_____ - .byte $01 ; 117/75 _____u_____ - .byte $01 ; 118/76 _____v_____ - .byte $01 ; 119/77 _____w_____ - .byte $01 ; 120/78 _____x_____ - .byte $01 ; 121/79 _____y_____ - .byte $01 ; 122/7a _____z_____ - .byte $00 ; 123/7b _____{_____ - .byte $00 ; 124/7c _____|_____ - .byte $00 ; 125/7d _____}_____ - .byte $00 ; 126/7e _____~_____ - .byte $40 ; 127/7f ____DEL____ - -.endrepeat + .include "ctype_console.inc" diff --git a/libsrc/nes/ctype.s b/libsrc/nes/ctype.s index 6e0ab1785..da4d38472 100644 --- a/libsrc/nes/ctype.s +++ b/libsrc/nes/ctype.s @@ -1,172 +1,5 @@ -; -; Ullrich von Bassewitz, 02.06.1998 -; ; Character specification table. ; +; uses the "console" definition -; The tables are readonly, put them into the rodata segment - -.rodata - -; The following 256 byte wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it were'nt for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. -; -; -; Bit assignments: -; -; 0 - Lower case char -; 1 - Upper case char -; 2 - Numeric digit -; 3 - Hex digit (both, lower and upper) -; 4 - Control character -; 5 - The space character itself -; 6 - Other whitespace (that is: '\f', '\n', '\r', '\t' and '\v') -; 7 - Space or tab character - - .export __ctype - -__ctype: - -.repeat 2 ; 2 times for normal and inverted - - .byte $10 ; 0/00 ___ctrl_@___ - .byte $10 ; 1/01 ___ctrl_A___ - .byte $10 ; 2/02 ___ctrl_B___ - .byte $10 ; 3/03 ___ctrl_C___ - .byte $10 ; 4/04 ___ctrl_D___ - .byte $10 ; 5/05 ___ctrl_E___ - .byte $10 ; 6/06 ___ctrl_F___ - .byte $10 ; 7/07 ___ctrl_G___ - .byte $10 ; 8/08 ___ctrl_H___ - .byte $D0 ; 9/09 ___ctrl_I___ - .byte $50 ; 10/0a ___ctrl_J___ - .byte $50 ; 11/0b ___ctrl_K___ - .byte $50 ; 12/0c ___ctrl_L___ - .byte $50 ; 13/0d ___ctrl_M___ - .byte $10 ; 14/0e ___ctrl_N___ - .byte $10 ; 15/0f ___ctrl_O___ - .byte $10 ; 16/10 ___ctrl_P___ - .byte $10 ; 17/11 ___ctrl_Q___ - .byte $10 ; 18/12 ___ctrl_R___ - .byte $10 ; 19/13 ___ctrl_S___ - .byte $10 ; 20/14 ___ctrl_T___ - .byte $10 ; 21/15 ___ctrl_U___ - .byte $10 ; 22/16 ___ctrl_V___ - .byte $10 ; 23/17 ___ctrl_W___ - .byte $10 ; 24/18 ___ctrl_X___ - .byte $10 ; 25/19 ___ctrl_Y___ - .byte $10 ; 26/1a ___ctrl_Z___ - .byte $10 ; 27/1b ___ctrl_[___ - .byte $10 ; 28/1c ___ctrl_\___ - .byte $10 ; 29/1d ___ctrl_]___ - .byte $10 ; 30/1e ___ctrl_^___ - .byte $10 ; 31/1f ___ctrl_____ - .byte $A0 ; 32/20 ___SPACE___ - .byte $00 ; 33/21 _____!_____ - .byte $00 ; 34/22 _____"_____ - .byte $00 ; 35/23 _____#_____ - .byte $00 ; 36/24 _____$_____ - .byte $00 ; 37/25 _____%_____ - .byte $00 ; 38/26 _____&_____ - .byte $00 ; 39/27 _____'_____ - .byte $00 ; 40/28 _____(_____ - .byte $00 ; 41/29 _____)_____ - .byte $00 ; 42/2a _____*_____ - .byte $00 ; 43/2b _____+_____ - .byte $00 ; 44/2c _____,_____ - .byte $00 ; 45/2d _____-_____ - .byte $00 ; 46/2e _____._____ - .byte $00 ; 47/2f _____/_____ - .byte $0C ; 48/30 _____0_____ - .byte $0C ; 49/31 _____1_____ - .byte $0C ; 50/32 _____2_____ - .byte $0C ; 51/33 _____3_____ - .byte $0C ; 52/34 _____4_____ - .byte $0C ; 53/35 _____5_____ - .byte $0C ; 54/36 _____6_____ - .byte $0C ; 55/37 _____7_____ - .byte $0C ; 56/38 _____8_____ - .byte $0C ; 57/39 _____9_____ - .byte $00 ; 58/3a _____:_____ - .byte $00 ; 59/3b _____;_____ - .byte $00 ; 60/3c _____<_____ - .byte $00 ; 61/3d _____=_____ - .byte $00 ; 62/3e _____>_____ - .byte $00 ; 63/3f _____?_____ - - .byte $00 ; 64/40 _____@_____ - .byte $0A ; 65/41 _____A_____ - .byte $0A ; 66/42 _____B_____ - .byte $0A ; 67/43 _____C_____ - .byte $0A ; 68/44 _____D_____ - .byte $0A ; 69/45 _____E_____ - .byte $0A ; 70/46 _____F_____ - .byte $02 ; 71/47 _____G_____ - .byte $02 ; 72/48 _____H_____ - .byte $02 ; 73/49 _____I_____ - .byte $02 ; 74/4a _____J_____ - .byte $02 ; 75/4b _____K_____ - .byte $02 ; 76/4c _____L_____ - .byte $02 ; 77/4d _____M_____ - .byte $02 ; 78/4e _____N_____ - .byte $02 ; 79/4f _____O_____ - .byte $02 ; 80/50 _____P_____ - .byte $02 ; 81/51 _____Q_____ - .byte $02 ; 82/52 _____R_____ - .byte $02 ; 83/53 _____S_____ - .byte $02 ; 84/54 _____T_____ - .byte $02 ; 85/55 _____U_____ - .byte $02 ; 86/56 _____V_____ - .byte $02 ; 87/57 _____W_____ - .byte $02 ; 88/58 _____X_____ - .byte $02 ; 89/59 _____Y_____ - .byte $02 ; 90/5a _____Z_____ - .byte $00 ; 91/5b _____[_____ - .byte $00 ; 92/5c _____\_____ - .byte $00 ; 93/5d _____]_____ - .byte $00 ; 94/5e _____^_____ - .byte $00 ; 95/5f _UNDERLINE_ - .byte $00 ; 96/60 ___grave___ - .byte $09 ; 97/61 _____a_____ - .byte $09 ; 98/62 _____b_____ - .byte $09 ; 99/63 _____c_____ - .byte $09 ; 100/64 _____d_____ - .byte $09 ; 101/65 _____e_____ - .byte $09 ; 102/66 _____f_____ - .byte $01 ; 103/67 _____g_____ - .byte $01 ; 104/68 _____h_____ - .byte $01 ; 105/69 _____i_____ - .byte $01 ; 106/6a _____j_____ - .byte $01 ; 107/6b _____k_____ - .byte $01 ; 108/6c _____l_____ - .byte $01 ; 109/6d _____m_____ - .byte $01 ; 110/6e _____n_____ - .byte $01 ; 111/6f _____o_____ - .byte $01 ; 112/70 _____p_____ - .byte $01 ; 113/71 _____q_____ - .byte $01 ; 114/72 _____r_____ - .byte $01 ; 115/73 _____s_____ - .byte $01 ; 116/74 _____t_____ - .byte $01 ; 117/75 _____u_____ - .byte $01 ; 118/76 _____v_____ - .byte $01 ; 119/77 _____w_____ - .byte $01 ; 120/78 _____x_____ - .byte $01 ; 121/79 _____y_____ - .byte $01 ; 122/7a _____z_____ - .byte $00 ; 123/7b _____{_____ - .byte $00 ; 124/7c _____|_____ - .byte $00 ; 125/7d _____}_____ - .byte $00 ; 126/7e _____~_____ - .byte $40 ; 127/7f ____DEL____ - -.endrepeat + .include "ctype_console.inc" diff --git a/libsrc/none/ctype.s b/libsrc/none/ctype.s index 35968f982..1301965eb 100644 --- a/libsrc/none/ctype.s +++ b/libsrc/none/ctype.s @@ -1,159 +1,5 @@ -; -; Ullrich von Bassewitz, 2003-10-10 -; ; Character specification table. ; +; uses the "common" definition - .include "ctype.inc" - -; The tables are readonly, put them into the rodata segment - -.rodata - -; The following 256 byte wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it weren't for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. - - -__ctype: - .byte CT_CTRL ; 0/00 ___ctrl_@___ - .byte CT_CTRL ; 1/01 ___ctrl_A___ - .byte CT_CTRL ; 2/02 ___ctrl_B___ - .byte CT_CTRL ; 3/03 ___ctrl_C___ - .byte CT_CTRL ; 4/04 ___ctrl_D___ - .byte CT_CTRL ; 5/05 ___ctrl_E___ - .byte CT_CTRL ; 6/06 ___ctrl_F___ - .byte CT_CTRL ; 7/07 ___ctrl_G___ - .byte CT_CTRL ; 8/08 ___ctrl_H___ - .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB - ; 9/09 ___ctrl_I___ - .byte CT_CTRL | CT_OTHER_WS ; 10/0a ___ctrl_J___ - .byte CT_CTRL | CT_OTHER_WS ; 11/0b ___ctrl_K___ - .byte CT_CTRL | CT_OTHER_WS ; 12/0c ___ctrl_L___ - .byte CT_CTRL | CT_OTHER_WS ; 13/0d ___ctrl_M___ - .byte CT_CTRL ; 14/0e ___ctrl_N___ - .byte CT_CTRL ; 15/0f ___ctrl_O___ - .byte CT_CTRL ; 16/10 ___ctrl_P___ - .byte CT_CTRL ; 17/11 ___ctrl_Q___ - .byte CT_CTRL ; 18/12 ___ctrl_R___ - .byte CT_CTRL ; 19/13 ___ctrl_S___ - .byte CT_CTRL ; 20/14 ___ctrl_T___ - .byte CT_CTRL ; 21/15 ___ctrl_U___ - .byte CT_CTRL ; 22/16 ___ctrl_V___ - .byte CT_CTRL ; 23/17 ___ctrl_W___ - .byte CT_CTRL ; 24/18 ___ctrl_X___ - .byte CT_CTRL ; 25/19 ___ctrl_Y___ - .byte CT_CTRL ; 26/1a ___ctrl_Z___ - .byte CT_CTRL ; 27/1b ___ctrl_[___ - .byte CT_CTRL ; 28/1c ___ctrl_\___ - .byte CT_CTRL ; 29/1d ___ctrl_]___ - .byte CT_CTRL ; 30/1e ___ctrl_^___ - .byte CT_CTRL ; 31/1f ___ctrl_____ - .byte CT_SPACE | CT_SPACE_TAB ; 32/20 ___SPACE___ - .byte CT_NONE ; 33/21 _____!_____ - .byte CT_NONE ; 34/22 _____"_____ - .byte CT_NONE ; 35/23 _____#_____ - .byte CT_NONE ; 36/24 _____$_____ - .byte CT_NONE ; 37/25 _____%_____ - .byte CT_NONE ; 38/26 _____&_____ - .byte CT_NONE ; 39/27 _____'_____ - .byte CT_NONE ; 40/28 _____(_____ - .byte CT_NONE ; 41/29 _____)_____ - .byte CT_NONE ; 42/2a _____*_____ - .byte CT_NONE ; 43/2b _____+_____ - .byte CT_NONE ; 44/2c _____,_____ - .byte CT_NONE ; 45/2d _____-_____ - .byte CT_NONE ; 46/2e _____._____ - .byte CT_NONE ; 47/2f _____/_____ - .byte CT_DIGIT | CT_XDIGIT ; 48/30 _____0_____ - .byte CT_DIGIT | CT_XDIGIT ; 49/31 _____1_____ - .byte CT_DIGIT | CT_XDIGIT ; 50/32 _____2_____ - .byte CT_DIGIT | CT_XDIGIT ; 51/33 _____3_____ - .byte CT_DIGIT | CT_XDIGIT ; 52/34 _____4_____ - .byte CT_DIGIT | CT_XDIGIT ; 53/35 _____5_____ - .byte CT_DIGIT | CT_XDIGIT ; 54/36 _____6_____ - .byte CT_DIGIT | CT_XDIGIT ; 55/37 _____7_____ - .byte CT_DIGIT | CT_XDIGIT ; 56/38 _____8_____ - .byte CT_DIGIT | CT_XDIGIT ; 57/39 _____9_____ - .byte CT_NONE ; 58/3a _____:_____ - .byte CT_NONE ; 59/3b _____;_____ - .byte CT_NONE ; 60/3c _____<_____ - .byte CT_NONE ; 61/3d _____=_____ - .byte CT_NONE ; 62/3e _____>_____ - .byte CT_NONE ; 63/3f _____?_____ - - .byte CT_NONE ; 64/40 _____@_____ - .byte CT_UPPER | CT_XDIGIT ; 65/41 _____A_____ - .byte CT_UPPER | CT_XDIGIT ; 66/42 _____B_____ - .byte CT_UPPER | CT_XDIGIT ; 67/43 _____C_____ - .byte CT_UPPER | CT_XDIGIT ; 68/44 _____D_____ - .byte CT_UPPER | CT_XDIGIT ; 69/45 _____E_____ - .byte CT_UPPER | CT_XDIGIT ; 70/46 _____F_____ - .byte CT_UPPER ; 71/47 _____G_____ - .byte CT_UPPER ; 72/48 _____H_____ - .byte CT_UPPER ; 73/49 _____I_____ - .byte CT_UPPER ; 74/4a _____J_____ - .byte CT_UPPER ; 75/4b _____K_____ - .byte CT_UPPER ; 76/4c _____L_____ - .byte CT_UPPER ; 77/4d _____M_____ - .byte CT_UPPER ; 78/4e _____N_____ - .byte CT_UPPER ; 79/4f _____O_____ - .byte CT_UPPER ; 80/50 _____P_____ - .byte CT_UPPER ; 81/51 _____Q_____ - .byte CT_UPPER ; 82/52 _____R_____ - .byte CT_UPPER ; 83/53 _____S_____ - .byte CT_UPPER ; 84/54 _____T_____ - .byte CT_UPPER ; 85/55 _____U_____ - .byte CT_UPPER ; 86/56 _____V_____ - .byte CT_UPPER ; 87/57 _____W_____ - .byte CT_UPPER ; 88/58 _____X_____ - .byte CT_UPPER ; 89/59 _____Y_____ - .byte CT_UPPER ; 90/5a _____Z_____ - .byte CT_NONE ; 91/5b _____[_____ - .byte CT_NONE ; 92/5c _____\_____ - .byte CT_NONE ; 93/5d _____]_____ - .byte CT_NONE ; 94/5e _____^_____ - .byte CT_NONE ; 95/5f _UNDERLINE_ - .byte CT_NONE ; 96/60 ___grave___ - .byte CT_LOWER | CT_XDIGIT ; 97/61 _____a_____ - .byte CT_LOWER | CT_XDIGIT ; 98/62 _____b_____ - .byte CT_LOWER | CT_XDIGIT ; 99/63 _____c_____ - .byte CT_LOWER | CT_XDIGIT ; 100/64 _____d_____ - .byte CT_LOWER | CT_XDIGIT ; 101/65 _____e_____ - .byte CT_LOWER | CT_XDIGIT ; 102/66 _____f_____ - .byte CT_LOWER ; 103/67 _____g_____ - .byte CT_LOWER ; 104/68 _____h_____ - .byte CT_LOWER ; 105/69 _____i_____ - .byte CT_LOWER ; 106/6a _____j_____ - .byte CT_LOWER ; 107/6b _____k_____ - .byte CT_LOWER ; 108/6c _____l_____ - .byte CT_LOWER ; 109/6d _____m_____ - .byte CT_LOWER ; 110/6e _____n_____ - .byte CT_LOWER ; 111/6f _____o_____ - .byte CT_LOWER ; 112/70 _____p_____ - .byte CT_LOWER ; 113/71 _____q_____ - .byte CT_LOWER ; 114/72 _____r_____ - .byte CT_LOWER ; 115/73 _____s_____ - .byte CT_LOWER ; 116/74 _____t_____ - .byte CT_LOWER ; 117/75 _____u_____ - .byte CT_LOWER ; 118/76 _____v_____ - .byte CT_LOWER ; 119/77 _____w_____ - .byte CT_LOWER ; 120/78 _____x_____ - .byte CT_LOWER ; 121/79 _____y_____ - .byte CT_LOWER ; 122/7a _____z_____ - .byte CT_NONE ; 123/7b _____{_____ - .byte CT_NONE ; 124/7c _____|_____ - .byte CT_NONE ; 125/7d _____}_____ - .byte CT_NONE ; 126/7e _____~_____ - .byte CT_OTHER_WS ; 127/7f ____DEL____ - - .res 128, CT_NONE ; 128-255 + .include "ctype_common.inc" diff --git a/libsrc/osic1p/ctype.s b/libsrc/osic1p/ctype.s index 35968f982..1301965eb 100644 --- a/libsrc/osic1p/ctype.s +++ b/libsrc/osic1p/ctype.s @@ -1,159 +1,5 @@ -; -; Ullrich von Bassewitz, 2003-10-10 -; ; Character specification table. ; +; uses the "common" definition - .include "ctype.inc" - -; The tables are readonly, put them into the rodata segment - -.rodata - -; The following 256 byte wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it weren't for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. - - -__ctype: - .byte CT_CTRL ; 0/00 ___ctrl_@___ - .byte CT_CTRL ; 1/01 ___ctrl_A___ - .byte CT_CTRL ; 2/02 ___ctrl_B___ - .byte CT_CTRL ; 3/03 ___ctrl_C___ - .byte CT_CTRL ; 4/04 ___ctrl_D___ - .byte CT_CTRL ; 5/05 ___ctrl_E___ - .byte CT_CTRL ; 6/06 ___ctrl_F___ - .byte CT_CTRL ; 7/07 ___ctrl_G___ - .byte CT_CTRL ; 8/08 ___ctrl_H___ - .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB - ; 9/09 ___ctrl_I___ - .byte CT_CTRL | CT_OTHER_WS ; 10/0a ___ctrl_J___ - .byte CT_CTRL | CT_OTHER_WS ; 11/0b ___ctrl_K___ - .byte CT_CTRL | CT_OTHER_WS ; 12/0c ___ctrl_L___ - .byte CT_CTRL | CT_OTHER_WS ; 13/0d ___ctrl_M___ - .byte CT_CTRL ; 14/0e ___ctrl_N___ - .byte CT_CTRL ; 15/0f ___ctrl_O___ - .byte CT_CTRL ; 16/10 ___ctrl_P___ - .byte CT_CTRL ; 17/11 ___ctrl_Q___ - .byte CT_CTRL ; 18/12 ___ctrl_R___ - .byte CT_CTRL ; 19/13 ___ctrl_S___ - .byte CT_CTRL ; 20/14 ___ctrl_T___ - .byte CT_CTRL ; 21/15 ___ctrl_U___ - .byte CT_CTRL ; 22/16 ___ctrl_V___ - .byte CT_CTRL ; 23/17 ___ctrl_W___ - .byte CT_CTRL ; 24/18 ___ctrl_X___ - .byte CT_CTRL ; 25/19 ___ctrl_Y___ - .byte CT_CTRL ; 26/1a ___ctrl_Z___ - .byte CT_CTRL ; 27/1b ___ctrl_[___ - .byte CT_CTRL ; 28/1c ___ctrl_\___ - .byte CT_CTRL ; 29/1d ___ctrl_]___ - .byte CT_CTRL ; 30/1e ___ctrl_^___ - .byte CT_CTRL ; 31/1f ___ctrl_____ - .byte CT_SPACE | CT_SPACE_TAB ; 32/20 ___SPACE___ - .byte CT_NONE ; 33/21 _____!_____ - .byte CT_NONE ; 34/22 _____"_____ - .byte CT_NONE ; 35/23 _____#_____ - .byte CT_NONE ; 36/24 _____$_____ - .byte CT_NONE ; 37/25 _____%_____ - .byte CT_NONE ; 38/26 _____&_____ - .byte CT_NONE ; 39/27 _____'_____ - .byte CT_NONE ; 40/28 _____(_____ - .byte CT_NONE ; 41/29 _____)_____ - .byte CT_NONE ; 42/2a _____*_____ - .byte CT_NONE ; 43/2b _____+_____ - .byte CT_NONE ; 44/2c _____,_____ - .byte CT_NONE ; 45/2d _____-_____ - .byte CT_NONE ; 46/2e _____._____ - .byte CT_NONE ; 47/2f _____/_____ - .byte CT_DIGIT | CT_XDIGIT ; 48/30 _____0_____ - .byte CT_DIGIT | CT_XDIGIT ; 49/31 _____1_____ - .byte CT_DIGIT | CT_XDIGIT ; 50/32 _____2_____ - .byte CT_DIGIT | CT_XDIGIT ; 51/33 _____3_____ - .byte CT_DIGIT | CT_XDIGIT ; 52/34 _____4_____ - .byte CT_DIGIT | CT_XDIGIT ; 53/35 _____5_____ - .byte CT_DIGIT | CT_XDIGIT ; 54/36 _____6_____ - .byte CT_DIGIT | CT_XDIGIT ; 55/37 _____7_____ - .byte CT_DIGIT | CT_XDIGIT ; 56/38 _____8_____ - .byte CT_DIGIT | CT_XDIGIT ; 57/39 _____9_____ - .byte CT_NONE ; 58/3a _____:_____ - .byte CT_NONE ; 59/3b _____;_____ - .byte CT_NONE ; 60/3c _____<_____ - .byte CT_NONE ; 61/3d _____=_____ - .byte CT_NONE ; 62/3e _____>_____ - .byte CT_NONE ; 63/3f _____?_____ - - .byte CT_NONE ; 64/40 _____@_____ - .byte CT_UPPER | CT_XDIGIT ; 65/41 _____A_____ - .byte CT_UPPER | CT_XDIGIT ; 66/42 _____B_____ - .byte CT_UPPER | CT_XDIGIT ; 67/43 _____C_____ - .byte CT_UPPER | CT_XDIGIT ; 68/44 _____D_____ - .byte CT_UPPER | CT_XDIGIT ; 69/45 _____E_____ - .byte CT_UPPER | CT_XDIGIT ; 70/46 _____F_____ - .byte CT_UPPER ; 71/47 _____G_____ - .byte CT_UPPER ; 72/48 _____H_____ - .byte CT_UPPER ; 73/49 _____I_____ - .byte CT_UPPER ; 74/4a _____J_____ - .byte CT_UPPER ; 75/4b _____K_____ - .byte CT_UPPER ; 76/4c _____L_____ - .byte CT_UPPER ; 77/4d _____M_____ - .byte CT_UPPER ; 78/4e _____N_____ - .byte CT_UPPER ; 79/4f _____O_____ - .byte CT_UPPER ; 80/50 _____P_____ - .byte CT_UPPER ; 81/51 _____Q_____ - .byte CT_UPPER ; 82/52 _____R_____ - .byte CT_UPPER ; 83/53 _____S_____ - .byte CT_UPPER ; 84/54 _____T_____ - .byte CT_UPPER ; 85/55 _____U_____ - .byte CT_UPPER ; 86/56 _____V_____ - .byte CT_UPPER ; 87/57 _____W_____ - .byte CT_UPPER ; 88/58 _____X_____ - .byte CT_UPPER ; 89/59 _____Y_____ - .byte CT_UPPER ; 90/5a _____Z_____ - .byte CT_NONE ; 91/5b _____[_____ - .byte CT_NONE ; 92/5c _____\_____ - .byte CT_NONE ; 93/5d _____]_____ - .byte CT_NONE ; 94/5e _____^_____ - .byte CT_NONE ; 95/5f _UNDERLINE_ - .byte CT_NONE ; 96/60 ___grave___ - .byte CT_LOWER | CT_XDIGIT ; 97/61 _____a_____ - .byte CT_LOWER | CT_XDIGIT ; 98/62 _____b_____ - .byte CT_LOWER | CT_XDIGIT ; 99/63 _____c_____ - .byte CT_LOWER | CT_XDIGIT ; 100/64 _____d_____ - .byte CT_LOWER | CT_XDIGIT ; 101/65 _____e_____ - .byte CT_LOWER | CT_XDIGIT ; 102/66 _____f_____ - .byte CT_LOWER ; 103/67 _____g_____ - .byte CT_LOWER ; 104/68 _____h_____ - .byte CT_LOWER ; 105/69 _____i_____ - .byte CT_LOWER ; 106/6a _____j_____ - .byte CT_LOWER ; 107/6b _____k_____ - .byte CT_LOWER ; 108/6c _____l_____ - .byte CT_LOWER ; 109/6d _____m_____ - .byte CT_LOWER ; 110/6e _____n_____ - .byte CT_LOWER ; 111/6f _____o_____ - .byte CT_LOWER ; 112/70 _____p_____ - .byte CT_LOWER ; 113/71 _____q_____ - .byte CT_LOWER ; 114/72 _____r_____ - .byte CT_LOWER ; 115/73 _____s_____ - .byte CT_LOWER ; 116/74 _____t_____ - .byte CT_LOWER ; 117/75 _____u_____ - .byte CT_LOWER ; 118/76 _____v_____ - .byte CT_LOWER ; 119/77 _____w_____ - .byte CT_LOWER ; 120/78 _____x_____ - .byte CT_LOWER ; 121/79 _____y_____ - .byte CT_LOWER ; 122/7a _____z_____ - .byte CT_NONE ; 123/7b _____{_____ - .byte CT_NONE ; 124/7c _____|_____ - .byte CT_NONE ; 125/7d _____}_____ - .byte CT_NONE ; 126/7e _____~_____ - .byte CT_OTHER_WS ; 127/7f ____DEL____ - - .res 128, CT_NONE ; 128-255 + .include "ctype_common.inc" diff --git a/libsrc/pce/ctype.s b/libsrc/pce/ctype.s index 1ee51b230..da4d38472 100644 --- a/libsrc/pce/ctype.s +++ b/libsrc/pce/ctype.s @@ -1,158 +1,5 @@ -; -; Stefan Haubenthal with minor changes from Ullrich von Bassewitz, 2003-05-02 -; ; Character specification table. ; +; uses the "console" definition - .include "ctype.inc" - -; The tables are read-only; put them into the RODATA segment. - -.rodata - -; The following 256-byte-wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it weren't for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. - -__ctype: - .repeat 2 - .byte CT_CTRL ; 0/00 ___ctrl_@___ - .byte CT_CTRL ; 1/01 ___ctrl_A___ - .byte CT_CTRL ; 2/02 ___ctrl_B___ - .byte CT_CTRL ; 3/03 ___ctrl_C___ - .byte CT_CTRL ; 4/04 ___ctrl_D___ - .byte CT_CTRL ; 5/05 ___ctrl_E___ - .byte CT_CTRL ; 6/06 ___ctrl_F___ - .byte CT_CTRL ; 7/07 ___ctrl_G___ - .byte CT_CTRL ; 8/08 ___ctrl_H___ - .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB - ; 9/09 ___ctrl_I___ - .byte CT_CTRL | CT_OTHER_WS ; 10/0a ___ctrl_J___ - .byte CT_CTRL | CT_OTHER_WS ; 11/0b ___ctrl_K___ - .byte CT_CTRL | CT_OTHER_WS ; 12/0c ___ctrl_L___ - .byte CT_CTRL | CT_OTHER_WS ; 13/0d ___ctrl_M___ - .byte CT_CTRL ; 14/0e ___ctrl_N___ - .byte CT_CTRL ; 15/0f ___ctrl_O___ - .byte CT_CTRL ; 16/10 ___ctrl_P___ - .byte CT_CTRL ; 17/11 ___ctrl_Q___ - .byte CT_CTRL ; 18/12 ___ctrl_R___ - .byte CT_CTRL ; 19/13 ___ctrl_S___ - .byte CT_CTRL ; 20/14 ___ctrl_T___ - .byte CT_CTRL ; 21/15 ___ctrl_U___ - .byte CT_CTRL ; 22/16 ___ctrl_V___ - .byte CT_CTRL ; 23/17 ___ctrl_W___ - .byte CT_CTRL ; 24/18 ___ctrl_X___ - .byte CT_CTRL ; 25/19 ___ctrl_Y___ - .byte CT_CTRL ; 26/1a ___ctrl_Z___ - .byte CT_CTRL ; 27/1b ___ctrl_[___ - .byte CT_CTRL ; 28/1c ___ctrl_\___ - .byte CT_CTRL ; 29/1d ___ctrl_]___ - .byte CT_CTRL ; 30/1e ___ctrl_^___ - .byte CT_CTRL ; 31/1f ___ctrl_____ - .byte CT_SPACE | CT_SPACE_TAB ; 32/20 ___SPACE___ - .byte CT_NONE ; 33/21 _____!_____ - .byte CT_NONE ; 34/22 _____"_____ - .byte CT_NONE ; 35/23 _____#_____ - .byte CT_NONE ; 36/24 _____$_____ - .byte CT_NONE ; 37/25 _____%_____ - .byte CT_NONE ; 38/26 _____&_____ - .byte CT_NONE ; 39/27 _____'_____ - .byte CT_NONE ; 40/28 _____(_____ - .byte CT_NONE ; 41/29 _____)_____ - .byte CT_NONE ; 42/2a _____*_____ - .byte CT_NONE ; 43/2b _____+_____ - .byte CT_NONE ; 44/2c _____,_____ - .byte CT_NONE ; 45/2d _____-_____ - .byte CT_NONE ; 46/2e _____._____ - .byte CT_NONE ; 47/2f _____/_____ - .byte CT_DIGIT | CT_XDIGIT ; 48/30 _____0_____ - .byte CT_DIGIT | CT_XDIGIT ; 49/31 _____1_____ - .byte CT_DIGIT | CT_XDIGIT ; 50/32 _____2_____ - .byte CT_DIGIT | CT_XDIGIT ; 51/33 _____3_____ - .byte CT_DIGIT | CT_XDIGIT ; 52/34 _____4_____ - .byte CT_DIGIT | CT_XDIGIT ; 53/35 _____5_____ - .byte CT_DIGIT | CT_XDIGIT ; 54/36 _____6_____ - .byte CT_DIGIT | CT_XDIGIT ; 55/37 _____7_____ - .byte CT_DIGIT | CT_XDIGIT ; 56/38 _____8_____ - .byte CT_DIGIT | CT_XDIGIT ; 57/39 _____9_____ - .byte CT_NONE ; 58/3a _____:_____ - .byte CT_NONE ; 59/3b _____;_____ - .byte CT_NONE ; 60/3c _____<_____ - .byte CT_NONE ; 61/3d _____=_____ - .byte CT_NONE ; 62/3e _____>_____ - .byte CT_NONE ; 63/3f _____?_____ - - .byte CT_NONE ; 64/40 _____@_____ - .byte CT_UPPER | CT_XDIGIT ; 65/41 _____A_____ - .byte CT_UPPER | CT_XDIGIT ; 66/42 _____B_____ - .byte CT_UPPER | CT_XDIGIT ; 67/43 _____C_____ - .byte CT_UPPER | CT_XDIGIT ; 68/44 _____D_____ - .byte CT_UPPER | CT_XDIGIT ; 69/45 _____E_____ - .byte CT_UPPER | CT_XDIGIT ; 70/46 _____F_____ - .byte CT_UPPER ; 71/47 _____G_____ - .byte CT_UPPER ; 72/48 _____H_____ - .byte CT_UPPER ; 73/49 _____I_____ - .byte CT_UPPER ; 74/4a _____J_____ - .byte CT_UPPER ; 75/4b _____K_____ - .byte CT_UPPER ; 76/4c _____L_____ - .byte CT_UPPER ; 77/4d _____M_____ - .byte CT_UPPER ; 78/4e _____N_____ - .byte CT_UPPER ; 79/4f _____O_____ - .byte CT_UPPER ; 80/50 _____P_____ - .byte CT_UPPER ; 81/51 _____Q_____ - .byte CT_UPPER ; 82/52 _____R_____ - .byte CT_UPPER ; 83/53 _____S_____ - .byte CT_UPPER ; 84/54 _____T_____ - .byte CT_UPPER ; 85/55 _____U_____ - .byte CT_UPPER ; 86/56 _____V_____ - .byte CT_UPPER ; 87/57 _____W_____ - .byte CT_UPPER ; 88/58 _____X_____ - .byte CT_UPPER ; 89/59 _____Y_____ - .byte CT_UPPER ; 90/5a _____Z_____ - .byte CT_NONE ; 91/5b _____[_____ - .byte CT_NONE ; 92/5c _____\_____ - .byte CT_NONE ; 93/5d _____]_____ - .byte CT_NONE ; 94/5e _____^_____ - .byte CT_NONE ; 95/5f _UNDERLINE_ - .byte CT_NONE ; 96/60 ___grave___ - .byte CT_LOWER | CT_XDIGIT ; 97/61 _____a_____ - .byte CT_LOWER | CT_XDIGIT ; 98/62 _____b_____ - .byte CT_LOWER | CT_XDIGIT ; 99/63 _____c_____ - .byte CT_LOWER | CT_XDIGIT ; 100/64 _____d_____ - .byte CT_LOWER | CT_XDIGIT ; 101/65 _____e_____ - .byte CT_LOWER | CT_XDIGIT ; 102/66 _____f_____ - .byte CT_LOWER ; 103/67 _____g_____ - .byte CT_LOWER ; 104/68 _____h_____ - .byte CT_LOWER ; 105/69 _____i_____ - .byte CT_LOWER ; 106/6a _____j_____ - .byte CT_LOWER ; 107/6b _____k_____ - .byte CT_LOWER ; 108/6c _____l_____ - .byte CT_LOWER ; 109/6d _____m_____ - .byte CT_LOWER ; 110/6e _____n_____ - .byte CT_LOWER ; 111/6f _____o_____ - .byte CT_LOWER ; 112/70 _____p_____ - .byte CT_LOWER ; 113/71 _____q_____ - .byte CT_LOWER ; 114/72 _____r_____ - .byte CT_LOWER ; 115/73 _____s_____ - .byte CT_LOWER ; 116/74 _____t_____ - .byte CT_LOWER ; 117/75 _____u_____ - .byte CT_LOWER ; 118/76 _____v_____ - .byte CT_LOWER ; 119/77 _____w_____ - .byte CT_LOWER ; 120/78 _____x_____ - .byte CT_LOWER ; 121/79 _____y_____ - .byte CT_LOWER ; 122/7a _____z_____ - .byte CT_NONE ; 123/7b _____{_____ - .byte CT_NONE ; 124/7c _____|_____ - .byte CT_NONE ; 125/7d _____}_____ - .byte CT_NONE ; 126/7e _____~_____ - .byte CT_OTHER_WS ; 127/7f ____DEL____ - .endrepeat + .include "ctype_console.inc" diff --git a/libsrc/sim6502/ctype.s b/libsrc/sim6502/ctype.s index 35968f982..1301965eb 100644 --- a/libsrc/sim6502/ctype.s +++ b/libsrc/sim6502/ctype.s @@ -1,159 +1,5 @@ -; -; Ullrich von Bassewitz, 2003-10-10 -; ; Character specification table. ; +; uses the "common" definition - .include "ctype.inc" - -; The tables are readonly, put them into the rodata segment - -.rodata - -; The following 256 byte wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it weren't for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. - - -__ctype: - .byte CT_CTRL ; 0/00 ___ctrl_@___ - .byte CT_CTRL ; 1/01 ___ctrl_A___ - .byte CT_CTRL ; 2/02 ___ctrl_B___ - .byte CT_CTRL ; 3/03 ___ctrl_C___ - .byte CT_CTRL ; 4/04 ___ctrl_D___ - .byte CT_CTRL ; 5/05 ___ctrl_E___ - .byte CT_CTRL ; 6/06 ___ctrl_F___ - .byte CT_CTRL ; 7/07 ___ctrl_G___ - .byte CT_CTRL ; 8/08 ___ctrl_H___ - .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB - ; 9/09 ___ctrl_I___ - .byte CT_CTRL | CT_OTHER_WS ; 10/0a ___ctrl_J___ - .byte CT_CTRL | CT_OTHER_WS ; 11/0b ___ctrl_K___ - .byte CT_CTRL | CT_OTHER_WS ; 12/0c ___ctrl_L___ - .byte CT_CTRL | CT_OTHER_WS ; 13/0d ___ctrl_M___ - .byte CT_CTRL ; 14/0e ___ctrl_N___ - .byte CT_CTRL ; 15/0f ___ctrl_O___ - .byte CT_CTRL ; 16/10 ___ctrl_P___ - .byte CT_CTRL ; 17/11 ___ctrl_Q___ - .byte CT_CTRL ; 18/12 ___ctrl_R___ - .byte CT_CTRL ; 19/13 ___ctrl_S___ - .byte CT_CTRL ; 20/14 ___ctrl_T___ - .byte CT_CTRL ; 21/15 ___ctrl_U___ - .byte CT_CTRL ; 22/16 ___ctrl_V___ - .byte CT_CTRL ; 23/17 ___ctrl_W___ - .byte CT_CTRL ; 24/18 ___ctrl_X___ - .byte CT_CTRL ; 25/19 ___ctrl_Y___ - .byte CT_CTRL ; 26/1a ___ctrl_Z___ - .byte CT_CTRL ; 27/1b ___ctrl_[___ - .byte CT_CTRL ; 28/1c ___ctrl_\___ - .byte CT_CTRL ; 29/1d ___ctrl_]___ - .byte CT_CTRL ; 30/1e ___ctrl_^___ - .byte CT_CTRL ; 31/1f ___ctrl_____ - .byte CT_SPACE | CT_SPACE_TAB ; 32/20 ___SPACE___ - .byte CT_NONE ; 33/21 _____!_____ - .byte CT_NONE ; 34/22 _____"_____ - .byte CT_NONE ; 35/23 _____#_____ - .byte CT_NONE ; 36/24 _____$_____ - .byte CT_NONE ; 37/25 _____%_____ - .byte CT_NONE ; 38/26 _____&_____ - .byte CT_NONE ; 39/27 _____'_____ - .byte CT_NONE ; 40/28 _____(_____ - .byte CT_NONE ; 41/29 _____)_____ - .byte CT_NONE ; 42/2a _____*_____ - .byte CT_NONE ; 43/2b _____+_____ - .byte CT_NONE ; 44/2c _____,_____ - .byte CT_NONE ; 45/2d _____-_____ - .byte CT_NONE ; 46/2e _____._____ - .byte CT_NONE ; 47/2f _____/_____ - .byte CT_DIGIT | CT_XDIGIT ; 48/30 _____0_____ - .byte CT_DIGIT | CT_XDIGIT ; 49/31 _____1_____ - .byte CT_DIGIT | CT_XDIGIT ; 50/32 _____2_____ - .byte CT_DIGIT | CT_XDIGIT ; 51/33 _____3_____ - .byte CT_DIGIT | CT_XDIGIT ; 52/34 _____4_____ - .byte CT_DIGIT | CT_XDIGIT ; 53/35 _____5_____ - .byte CT_DIGIT | CT_XDIGIT ; 54/36 _____6_____ - .byte CT_DIGIT | CT_XDIGIT ; 55/37 _____7_____ - .byte CT_DIGIT | CT_XDIGIT ; 56/38 _____8_____ - .byte CT_DIGIT | CT_XDIGIT ; 57/39 _____9_____ - .byte CT_NONE ; 58/3a _____:_____ - .byte CT_NONE ; 59/3b _____;_____ - .byte CT_NONE ; 60/3c _____<_____ - .byte CT_NONE ; 61/3d _____=_____ - .byte CT_NONE ; 62/3e _____>_____ - .byte CT_NONE ; 63/3f _____?_____ - - .byte CT_NONE ; 64/40 _____@_____ - .byte CT_UPPER | CT_XDIGIT ; 65/41 _____A_____ - .byte CT_UPPER | CT_XDIGIT ; 66/42 _____B_____ - .byte CT_UPPER | CT_XDIGIT ; 67/43 _____C_____ - .byte CT_UPPER | CT_XDIGIT ; 68/44 _____D_____ - .byte CT_UPPER | CT_XDIGIT ; 69/45 _____E_____ - .byte CT_UPPER | CT_XDIGIT ; 70/46 _____F_____ - .byte CT_UPPER ; 71/47 _____G_____ - .byte CT_UPPER ; 72/48 _____H_____ - .byte CT_UPPER ; 73/49 _____I_____ - .byte CT_UPPER ; 74/4a _____J_____ - .byte CT_UPPER ; 75/4b _____K_____ - .byte CT_UPPER ; 76/4c _____L_____ - .byte CT_UPPER ; 77/4d _____M_____ - .byte CT_UPPER ; 78/4e _____N_____ - .byte CT_UPPER ; 79/4f _____O_____ - .byte CT_UPPER ; 80/50 _____P_____ - .byte CT_UPPER ; 81/51 _____Q_____ - .byte CT_UPPER ; 82/52 _____R_____ - .byte CT_UPPER ; 83/53 _____S_____ - .byte CT_UPPER ; 84/54 _____T_____ - .byte CT_UPPER ; 85/55 _____U_____ - .byte CT_UPPER ; 86/56 _____V_____ - .byte CT_UPPER ; 87/57 _____W_____ - .byte CT_UPPER ; 88/58 _____X_____ - .byte CT_UPPER ; 89/59 _____Y_____ - .byte CT_UPPER ; 90/5a _____Z_____ - .byte CT_NONE ; 91/5b _____[_____ - .byte CT_NONE ; 92/5c _____\_____ - .byte CT_NONE ; 93/5d _____]_____ - .byte CT_NONE ; 94/5e _____^_____ - .byte CT_NONE ; 95/5f _UNDERLINE_ - .byte CT_NONE ; 96/60 ___grave___ - .byte CT_LOWER | CT_XDIGIT ; 97/61 _____a_____ - .byte CT_LOWER | CT_XDIGIT ; 98/62 _____b_____ - .byte CT_LOWER | CT_XDIGIT ; 99/63 _____c_____ - .byte CT_LOWER | CT_XDIGIT ; 100/64 _____d_____ - .byte CT_LOWER | CT_XDIGIT ; 101/65 _____e_____ - .byte CT_LOWER | CT_XDIGIT ; 102/66 _____f_____ - .byte CT_LOWER ; 103/67 _____g_____ - .byte CT_LOWER ; 104/68 _____h_____ - .byte CT_LOWER ; 105/69 _____i_____ - .byte CT_LOWER ; 106/6a _____j_____ - .byte CT_LOWER ; 107/6b _____k_____ - .byte CT_LOWER ; 108/6c _____l_____ - .byte CT_LOWER ; 109/6d _____m_____ - .byte CT_LOWER ; 110/6e _____n_____ - .byte CT_LOWER ; 111/6f _____o_____ - .byte CT_LOWER ; 112/70 _____p_____ - .byte CT_LOWER ; 113/71 _____q_____ - .byte CT_LOWER ; 114/72 _____r_____ - .byte CT_LOWER ; 115/73 _____s_____ - .byte CT_LOWER ; 116/74 _____t_____ - .byte CT_LOWER ; 117/75 _____u_____ - .byte CT_LOWER ; 118/76 _____v_____ - .byte CT_LOWER ; 119/77 _____w_____ - .byte CT_LOWER ; 120/78 _____x_____ - .byte CT_LOWER ; 121/79 _____y_____ - .byte CT_LOWER ; 122/7a _____z_____ - .byte CT_NONE ; 123/7b _____{_____ - .byte CT_NONE ; 124/7c _____|_____ - .byte CT_NONE ; 125/7d _____}_____ - .byte CT_NONE ; 126/7e _____~_____ - .byte CT_OTHER_WS ; 127/7f ____DEL____ - - .res 128, CT_NONE ; 128-255 + .include "ctype_common.inc" diff --git a/libsrc/supervision/ctype.s b/libsrc/supervision/ctype.s index 1892554fd..1301965eb 100644 --- a/libsrc/supervision/ctype.s +++ b/libsrc/supervision/ctype.s @@ -1,162 +1,5 @@ -; -; Ullrich von Bassewitz, 2003-10-10 -; ; Character specification table. ; +; uses the "common" definition - .include "ctype.inc" - -; The tables are readonly, put them into the rodata segment - -.rodata - -; The following 256 byte wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it weren't for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. - - -__ctype: - .byte CT_CTRL ; 0/00 ___ctrl_@___ - .byte CT_CTRL ; 1/01 ___ctrl_A___ - .byte CT_CTRL ; 2/02 ___ctrl_B___ - .byte CT_CTRL ; 3/03 ___ctrl_C___ - .byte CT_CTRL ; 4/04 ___ctrl_D___ - .byte CT_CTRL ; 5/05 ___ctrl_E___ - .byte CT_CTRL ; 6/06 ___ctrl_F___ - .byte CT_CTRL ; 7/07 ___ctrl_G___ - .byte CT_CTRL ; 8/08 ___ctrl_H___ - .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB - ; 9/09 ___ctrl_I___ - .byte CT_CTRL | CT_OTHER_WS ; 10/0a ___ctrl_J___ - .byte CT_CTRL | CT_OTHER_WS ; 11/0b ___ctrl_K___ - .byte CT_CTRL | CT_OTHER_WS ; 12/0c ___ctrl_L___ - .byte CT_CTRL | CT_OTHER_WS ; 13/0d ___ctrl_M___ - .byte CT_CTRL ; 14/0e ___ctrl_N___ - .byte CT_CTRL ; 15/0f ___ctrl_O___ - .byte CT_CTRL ; 16/10 ___ctrl_P___ - .byte CT_CTRL ; 17/11 ___ctrl_Q___ - .byte CT_CTRL ; 18/12 ___ctrl_R___ - .byte CT_CTRL ; 19/13 ___ctrl_S___ - .byte CT_CTRL ; 20/14 ___ctrl_T___ - .byte CT_CTRL ; 21/15 ___ctrl_U___ - .byte CT_CTRL ; 22/16 ___ctrl_V___ - .byte CT_CTRL ; 23/17 ___ctrl_W___ - .byte CT_CTRL ; 24/18 ___ctrl_X___ - .byte CT_CTRL ; 25/19 ___ctrl_Y___ - .byte CT_CTRL ; 26/1a ___ctrl_Z___ - .byte CT_CTRL ; 27/1b ___ctrl_[___ - .byte CT_CTRL ; 28/1c ___ctrl_\___ - .byte CT_CTRL ; 29/1d ___ctrl_]___ - .byte CT_CTRL ; 30/1e ___ctrl_^___ - .byte CT_CTRL ; 31/1f ___ctrl_____ - .byte CT_SPACE | CT_SPACE_TAB ; 32/20 ___SPACE___ - .byte CT_NONE ; 33/21 _____!_____ - .byte CT_NONE ; 34/22 _____"_____ - .byte CT_NONE ; 35/23 _____#_____ - .byte CT_NONE ; 36/24 _____$_____ - .byte CT_NONE ; 37/25 _____%_____ - .byte CT_NONE ; 38/26 _____&_____ - .byte CT_NONE ; 39/27 _____'_____ - .byte CT_NONE ; 40/28 _____(_____ - .byte CT_NONE ; 41/29 _____)_____ - .byte CT_NONE ; 42/2a _____*_____ - .byte CT_NONE ; 43/2b _____+_____ - .byte CT_NONE ; 44/2c _____,_____ - .byte CT_NONE ; 45/2d _____-_____ - .byte CT_NONE ; 46/2e _____._____ - .byte CT_NONE ; 47/2f _____/_____ - .byte CT_DIGIT | CT_XDIGIT ; 48/30 _____0_____ - .byte CT_DIGIT | CT_XDIGIT ; 49/31 _____1_____ - .byte CT_DIGIT | CT_XDIGIT ; 50/32 _____2_____ - .byte CT_DIGIT | CT_XDIGIT ; 51/33 _____3_____ - .byte CT_DIGIT | CT_XDIGIT ; 52/34 _____4_____ - .byte CT_DIGIT | CT_XDIGIT ; 53/35 _____5_____ - .byte CT_DIGIT | CT_XDIGIT ; 54/36 _____6_____ - .byte CT_DIGIT | CT_XDIGIT ; 55/37 _____7_____ - .byte CT_DIGIT | CT_XDIGIT ; 56/38 _____8_____ - .byte CT_DIGIT | CT_XDIGIT ; 57/39 _____9_____ - .byte CT_NONE ; 58/3a _____:_____ - .byte CT_NONE ; 59/3b _____;_____ - .byte CT_NONE ; 60/3c _____<_____ - .byte CT_NONE ; 61/3d _____=_____ - .byte CT_NONE ; 62/3e _____>_____ - .byte CT_NONE ; 63/3f _____?_____ - - .byte CT_NONE ; 64/40 _____@_____ - .byte CT_UPPER | CT_XDIGIT ; 65/41 _____A_____ - .byte CT_UPPER | CT_XDIGIT ; 66/42 _____B_____ - .byte CT_UPPER | CT_XDIGIT ; 67/43 _____C_____ - .byte CT_UPPER | CT_XDIGIT ; 68/44 _____D_____ - .byte CT_UPPER | CT_XDIGIT ; 69/45 _____E_____ - .byte CT_UPPER | CT_XDIGIT ; 70/46 _____F_____ - .byte CT_UPPER ; 71/47 _____G_____ - .byte CT_UPPER ; 72/48 _____H_____ - .byte CT_UPPER ; 73/49 _____I_____ - .byte CT_UPPER ; 74/4a _____J_____ - .byte CT_UPPER ; 75/4b _____K_____ - .byte CT_UPPER ; 76/4c _____L_____ - .byte CT_UPPER ; 77/4d _____M_____ - .byte CT_UPPER ; 78/4e _____N_____ - .byte CT_UPPER ; 79/4f _____O_____ - .byte CT_UPPER ; 80/50 _____P_____ - .byte CT_UPPER ; 81/51 _____Q_____ - .byte CT_UPPER ; 82/52 _____R_____ - .byte CT_UPPER ; 83/53 _____S_____ - .byte CT_UPPER ; 84/54 _____T_____ - .byte CT_UPPER ; 85/55 _____U_____ - .byte CT_UPPER ; 86/56 _____V_____ - .byte CT_UPPER ; 87/57 _____W_____ - .byte CT_UPPER ; 88/58 _____X_____ - .byte CT_UPPER ; 89/59 _____Y_____ - .byte CT_UPPER ; 90/5a _____Z_____ - .byte CT_NONE ; 91/5b _____[_____ - .byte CT_NONE ; 92/5c _____\_____ - .byte CT_NONE ; 93/5d _____]_____ - .byte CT_NONE ; 94/5e _____^_____ - .byte CT_NONE ; 95/5f _UNDERLINE_ - .byte CT_NONE ; 96/60 ___grave___ - .byte CT_LOWER | CT_XDIGIT ; 97/61 _____a_____ - .byte CT_LOWER | CT_XDIGIT ; 98/62 _____b_____ - .byte CT_LOWER | CT_XDIGIT ; 99/63 _____c_____ - .byte CT_LOWER | CT_XDIGIT ; 100/64 _____d_____ - .byte CT_LOWER | CT_XDIGIT ; 101/65 _____e_____ - .byte CT_LOWER | CT_XDIGIT ; 102/66 _____f_____ - .byte CT_LOWER ; 103/67 _____g_____ - .byte CT_LOWER ; 104/68 _____h_____ - .byte CT_LOWER ; 105/69 _____i_____ - .byte CT_LOWER ; 106/6a _____j_____ - .byte CT_LOWER ; 107/6b _____k_____ - .byte CT_LOWER ; 108/6c _____l_____ - .byte CT_LOWER ; 109/6d _____m_____ - .byte CT_LOWER ; 110/6e _____n_____ - .byte CT_LOWER ; 111/6f _____o_____ - .byte CT_LOWER ; 112/70 _____p_____ - .byte CT_LOWER ; 113/71 _____q_____ - .byte CT_LOWER ; 114/72 _____r_____ - .byte CT_LOWER ; 115/73 _____s_____ - .byte CT_LOWER ; 116/74 _____t_____ - .byte CT_LOWER ; 117/75 _____u_____ - .byte CT_LOWER ; 118/76 _____v_____ - .byte CT_LOWER ; 119/77 _____w_____ - .byte CT_LOWER ; 120/78 _____x_____ - .byte CT_LOWER ; 121/79 _____y_____ - .byte CT_LOWER ; 122/7a _____z_____ - .byte CT_NONE ; 123/7b _____{_____ - .byte CT_NONE ; 124/7c _____|_____ - .byte CT_NONE ; 125/7d _____}_____ - .byte CT_NONE ; 126/7e _____~_____ - .byte CT_OTHER_WS ; 127/7f ____DEL____ - - .res 128, CT_NONE ; 128-255 - - - + .include "ctype_common.inc" diff --git a/libsrc/telestrat/ctype.s b/libsrc/telestrat/ctype.s index 79edafbb2..db61b1bb7 100644 --- a/libsrc/telestrat/ctype.s +++ b/libsrc/telestrat/ctype.s @@ -1,299 +1,5 @@ -; -; Ullrich von Bassewitz, 2003-04-13 -; ; Character specification table. ; +; same as for "atmos" target -; The tables are readonly, put them into the rodata segment - -.rodata - -; The following 256 byte wide table specifies attributes for the isxxx type -; of functions. Doing it by a table means some overhead in space, but it -; has major advantages: -; -; * It is fast. If it were'nt for the slow parameter passing of cc65, one -; could even define macros for the isxxx functions (this is usually -; done on other platforms). -; -; * It is highly portable. The only unportable part is the table itself, -; all real code goes into the common library. -; -; * We save some code in the isxxx functions. -; -; -; Bit assignments: -; -; 0 - Lower case char -; 1 - Upper case char -; 2 - Numeric digit -; 3 - Hex digit (both, lower and upper) -; 4 - Control character -; 5 - The space character itself -; 6 - Other whitespace (that is: '\f', '\n', '\r', '\t' and '\v') -; 7 - Space or tab character - - .export __ctype - -__ctype: - .byte $10 ; 0/00 ___ctrl_@___ - .byte $10 ; 1/01 ___ctrl_A___ - .byte $10 ; 2/02 ___ctrl_B___ - .byte $10 ; 3/03 ___ctrl_C___ - .byte $10 ; 4/04 ___ctrl_D___ - .byte $10 ; 5/05 ___ctrl_E___ - .byte $10 ; 6/06 ___ctrl_F___ - .byte $10 ; 7/07 ___ctrl_G___ - .byte $10 ; 8/08 ___ctrl_H___ - .byte $D0 ; 9/09 ___ctrl_I___ - .byte $50 ; 10/0a ___ctrl_J___ - .byte $50 ; 11/0b ___ctrl_K___ - .byte $50 ; 12/0c ___ctrl_L___ - .byte $50 ; 13/0d ___ctrl_M___ - .byte $10 ; 14/0e ___ctrl_N___ - .byte $10 ; 15/0f ___ctrl_O___ - .byte $10 ; 16/10 ___ctrl_P___ - .byte $10 ; 17/11 ___ctrl_Q___ - .byte $10 ; 18/12 ___ctrl_R___ - .byte $10 ; 19/13 ___ctrl_S___ - .byte $10 ; 20/14 ___ctrl_T___ - .byte $10 ; 21/15 ___ctrl_U___ - .byte $10 ; 22/16 ___ctrl_V___ - .byte $10 ; 23/17 ___ctrl_W___ - .byte $10 ; 24/18 ___ctrl_X___ - .byte $10 ; 25/19 ___ctrl_Y___ - .byte $10 ; 26/1a ___ctrl_Z___ - .byte $10 ; 27/1b ___ctrl_[___ - .byte $10 ; 28/1c ___ctrl_\___ - .byte $10 ; 29/1d ___ctrl_]___ - .byte $10 ; 30/1e ___ctrl_^___ - .byte $10 ; 31/1f ___ctrl_____ - .byte $A0 ; 32/20 ___SPACE___ - .byte $00 ; 33/21 _____!_____ - .byte $00 ; 34/22 _____"_____ - .byte $00 ; 35/23 _____#_____ - .byte $00 ; 36/24 _____$_____ - .byte $00 ; 37/25 _____%_____ - .byte $00 ; 38/26 _____&_____ - .byte $00 ; 39/27 _____'_____ - .byte $00 ; 40/28 _____(_____ - .byte $00 ; 41/29 _____)_____ - .byte $00 ; 42/2a _____*_____ - .byte $00 ; 43/2b _____+_____ - .byte $00 ; 44/2c _____,_____ - .byte $00 ; 45/2d _____-_____ - .byte $00 ; 46/2e _____._____ - .byte $00 ; 47/2f _____/_____ - .byte $0C ; 48/30 _____0_____ - .byte $0C ; 49/31 _____1_____ - .byte $0C ; 50/32 _____2_____ - .byte $0C ; 51/33 _____3_____ - .byte $0C ; 52/34 _____4_____ - .byte $0C ; 53/35 _____5_____ - .byte $0C ; 54/36 _____6_____ - .byte $0C ; 55/37 _____7_____ - .byte $0C ; 56/38 _____8_____ - .byte $0C ; 57/39 _____9_____ - .byte $00 ; 58/3a _____:_____ - .byte $00 ; 59/3b _____;_____ - .byte $00 ; 60/3c _____<_____ - .byte $00 ; 61/3d _____=_____ - .byte $00 ; 62/3e _____>_____ - .byte $00 ; 63/3f _____?_____ - - .byte $00 ; 64/40 _____@_____ - .byte $0A ; 65/41 _____A_____ - .byte $0A ; 66/42 _____B_____ - .byte $0A ; 67/43 _____C_____ - .byte $0A ; 68/44 _____D_____ - .byte $0A ; 69/45 _____E_____ - .byte $0A ; 70/46 _____F_____ - .byte $02 ; 71/47 _____G_____ - .byte $02 ; 72/48 _____H_____ - .byte $02 ; 73/49 _____I_____ - .byte $02 ; 74/4a _____J_____ - .byte $02 ; 75/4b _____K_____ - .byte $02 ; 76/4c _____L_____ - .byte $02 ; 77/4d _____M_____ - .byte $02 ; 78/4e _____N_____ - .byte $02 ; 79/4f _____O_____ - .byte $02 ; 80/50 _____P_____ - .byte $02 ; 81/51 _____Q_____ - .byte $02 ; 82/52 _____R_____ - .byte $02 ; 83/53 _____S_____ - .byte $02 ; 84/54 _____T_____ - .byte $02 ; 85/55 _____U_____ - .byte $02 ; 86/56 _____V_____ - .byte $02 ; 87/57 _____W_____ - .byte $02 ; 88/58 _____X_____ - .byte $02 ; 89/59 _____Y_____ - .byte $02 ; 90/5a _____Z_____ - .byte $00 ; 91/5b _____[_____ - .byte $00 ; 92/5c _____\_____ - .byte $00 ; 93/5d _____]_____ - .byte $00 ; 94/5e _____^_____ - .byte $00 ; 95/5f _UNDERLINE_ - .byte $00 ; 96/60 ___grave___ - .byte $09 ; 97/61 _____a_____ - .byte $09 ; 98/62 _____b_____ - .byte $09 ; 99/63 _____c_____ - .byte $09 ; 100/64 _____d_____ - .byte $09 ; 101/65 _____e_____ - .byte $09 ; 102/66 _____f_____ - .byte $01 ; 103/67 _____g_____ - .byte $01 ; 104/68 _____h_____ - .byte $01 ; 105/69 _____i_____ - .byte $01 ; 106/6a _____j_____ - .byte $01 ; 107/6b _____k_____ - .byte $01 ; 108/6c _____l_____ - .byte $01 ; 109/6d _____m_____ - .byte $01 ; 110/6e _____n_____ - .byte $01 ; 111/6f _____o_____ - .byte $01 ; 112/70 _____p_____ - .byte $01 ; 113/71 _____q_____ - .byte $01 ; 114/72 _____r_____ - .byte $01 ; 115/73 _____s_____ - .byte $01 ; 116/74 _____t_____ - .byte $01 ; 117/75 _____u_____ - .byte $01 ; 118/76 _____v_____ - .byte $01 ; 119/77 _____w_____ - .byte $01 ; 120/78 _____x_____ - .byte $01 ; 121/79 _____y_____ - .byte $01 ; 122/7a _____z_____ - .byte $00 ; 123/7b _____{_____ - .byte $00 ; 124/7c _____|_____ - .byte $00 ; 125/7d _____}_____ - .byte $00 ; 126/7e _____~_____ - .byte $40 ; 127/7f ____DEL____ - - .byte $00 ; 128/80 ___________ - .byte $00 ; 129/81 ___________ - .byte $00 ; 130/82 ___________ - .byte $00 ; 131/83 ___________ - .byte $00 ; 132/84 ___________ - .byte $00 ; 133/85 ___________ - .byte $00 ; 134/86 ___________ - .byte $00 ; 135/87 ___________ - .byte $00 ; 136/88 ___________ - .byte $00 ; 137/89 ___________ - .byte $00 ; 138/8a ___________ - .byte $00 ; 139/8b ___________ - .byte $00 ; 140/8c ___________ - .byte $00 ; 141/8d ___________ - .byte $00 ; 142/8e ___________ - .byte $00 ; 143/8f ___________ - .byte $00 ; 144/90 ___________ - .byte $00 ; 145/91 ___________ - .byte $00 ; 146/92 ___________ - .byte $10 ; 147/93 ___________ - .byte $00 ; 148/94 ___________ - .byte $00 ; 149/95 ___________ - .byte $00 ; 150/96 ___________ - .byte $00 ; 151/97 ___________ - .byte $00 ; 152/98 ___________ - .byte $00 ; 153/99 ___________ - .byte $00 ; 154/9a ___________ - .byte $00 ; 155/9b ___________ - .byte $00 ; 156/9c ___________ - .byte $00 ; 157/9d ___________ - .byte $00 ; 158/9e ___________ - .byte $00 ; 159/9f ___________ - - .byte $00 ; 160/a0 ___________ - .byte $00 ; 161/a1 ___________ - .byte $00 ; 162/a2 ___________ - .byte $00 ; 163/a3 ___________ - .byte $00 ; 164/a4 ___________ - .byte $00 ; 165/a5 ___________ - .byte $00 ; 166/a6 ___________ - .byte $00 ; 167/a7 ___________ - .byte $00 ; 168/a8 ___________ - .byte $00 ; 169/a9 ___________ - .byte $00 ; 170/aa ___________ - .byte $00 ; 171/ab ___________ - .byte $00 ; 172/ac ___________ - .byte $00 ; 173/ad ___________ - .byte $00 ; 174/ae ___________ - .byte $00 ; 175/af ___________ - .byte $00 ; 176/b0 ___________ - .byte $00 ; 177/b1 ___________ - .byte $00 ; 178/b2 ___________ - .byte $00 ; 179/b3 ___________ - .byte $00 ; 180/b4 ___________ - .byte $00 ; 181/b5 ___________ - .byte $00 ; 182/b6 ___________ - .byte $00 ; 183/b7 ___________ - .byte $00 ; 184/b8 ___________ - .byte $00 ; 185/b9 ___________ - .byte $00 ; 186/ba ___________ - .byte $00 ; 187/bb ___________ - .byte $00 ; 188/bc ___________ - .byte $00 ; 189/bd ___________ - .byte $00 ; 190/be ___________ - .byte $00 ; 191/bf ___________ - - .byte $02 ; 192/c0 ___________ - .byte $02 ; 193/c1 ___________ - .byte $02 ; 194/c2 ___________ - .byte $02 ; 195/c3 ___________ - .byte $02 ; 196/c4 ___________ - .byte $02 ; 197/c5 ___________ - .byte $02 ; 198/c6 ___________ - .byte $02 ; 199/c7 ___________ - .byte $02 ; 200/c8 ___________ - .byte $02 ; 201/c9 ___________ - .byte $02 ; 202/ca ___________ - .byte $02 ; 203/cb ___________ - .byte $02 ; 204/cc ___________ - .byte $02 ; 205/cd ___________ - .byte $02 ; 206/ce ___________ - .byte $02 ; 207/cf ___________ - .byte $02 ; 208/d0 ___________ - .byte $02 ; 209/d1 ___________ - .byte $02 ; 210/d2 ___________ - .byte $02 ; 211/d3 ___________ - .byte $02 ; 212/d4 ___________ - .byte $02 ; 213/d5 ___________ - .byte $02 ; 214/d6 ___________ - .byte $02 ; 215/d7 ___________ - .byte $02 ; 216/d8 ___________ - .byte $02 ; 217/d9 ___________ - .byte $02 ; 218/da ___________ - .byte $02 ; 219/db ___________ - .byte $02 ; 220/dc ___________ - .byte $02 ; 221/dd ___________ - .byte $02 ; 222/de ___________ - .byte $00 ; 223/df ___________ - .byte $01 ; 224/e0 ___________ - .byte $01 ; 225/e1 ___________ - .byte $01 ; 226/e2 ___________ - .byte $01 ; 227/e3 ___________ - .byte $01 ; 228/e4 ___________ - .byte $01 ; 229/e5 ___________ - .byte $01 ; 230/e6 ___________ - .byte $01 ; 231/e7 ___________ - .byte $01 ; 232/e8 ___________ - .byte $01 ; 233/e9 ___________ - .byte $01 ; 234/ea ___________ - .byte $01 ; 235/eb ___________ - .byte $01 ; 236/ec ___________ - .byte $01 ; 237/ed ___________ - .byte $01 ; 238/ee ___________ - .byte $01 ; 239/ef ___________ - .byte $01 ; 240/f0 ___________ - .byte $01 ; 241/f1 ___________ - .byte $01 ; 242/f2 ___________ - .byte $01 ; 243/f3 ___________ - .byte $01 ; 244/f4 ___________ - .byte $01 ; 245/f5 ___________ - .byte $01 ; 246/f6 ___________ - .byte $01 ; 247/f7 ___________ - .byte $01 ; 248/f8 ___________ - .byte $01 ; 249/f9 ___________ - .byte $01 ; 250/fa ___________ - .byte $01 ; 251/fb ___________ - .byte $01 ; 252/fc ___________ - .byte $01 ; 253/fd ___________ - .byte $01 ; 254/fe ___________ - .byte $00 ; 255/ff ___________ - +.include "../atmos/ctype.s" diff --git a/test/val/lib_common_ctype.c b/test/val/lib_common_ctype.c new file mode 100644 index 000000000..15980aff1 --- /dev/null +++ b/test/val/lib_common_ctype.c @@ -0,0 +1,368 @@ +// lib_common_ctype.c +// +// This file is part of +// cc65 - a freeware C compiler for 6502 based systems +// +// https://github.com/cc65/cc65 +// +// See "LICENSE" file for legal information. +// +// Unit test for character classification functions ("is..") +// + +#include <ctype.h> +#include <stdbool.h> +#include "unittest.h" + +#define NUMTESTS 257 + +typedef struct +{ + bool isalnum; + bool isalpha; + bool isascii; + bool iscntrl; + bool isdigit; + bool isgraph; + bool islower; + bool isprint; + bool ispunct; + bool isspace; + bool isupper; + bool isxdigit; + bool isblank; + +} CTypeClassifications; + + +CTypeClassifications testSet[NUMTESTS] = +{ + //alnum, alpha, ascii, cntrl, digit, graph, lower, print, punct, space, upper, xdigit,blank + + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 00 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 01 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 02 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 03 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 04 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 05 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 06 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 07 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 08 + {false, false, true, true, false, false, false, false, false, true, false, false, true }, // 09 + {false, false, true, true, false, false, false, false, false, true, false, false, false}, // 0A + {false, false, true, true, false, false, false, false, false, true, false, false, false}, // 0B + {false, false, true, true, false, false, false, false, false, true, false, false, false}, // 0C + {false, false, true, true, false, false, false, false, false, true, false, false, false}, // 0D + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 0E + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 0F + + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 10 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 11 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 12 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 13 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 14 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 15 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 16 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 17 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 18 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 19 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1A + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1B + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1C + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1D + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1E + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1F + + {false, false, true, false, false, false, false, true, false, true, false, false, true }, // 20 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 21 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 22 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 23 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 24 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 25 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 26 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 27 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 28 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 29 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2A + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2B + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2C + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2D + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2E + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2F + + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 30 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 31 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 32 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 33 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 34 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 35 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 36 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 37 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 38 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 39 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3A + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3B + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3C + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3D + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3E + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3F + + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 40 + {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 41 + {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 42 + {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 43 + {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 44 + {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 45 + {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 46 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 47 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 48 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 49 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4A + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4B + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4C + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4D + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4E + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4F + + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 50 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 51 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 52 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 53 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 54 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 55 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 56 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 57 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 58 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 59 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 5A + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5B + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5C + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5D + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5E + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5F + + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 60 + {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 61 + {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 62 + {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 63 + {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 64 + {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 65 + {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 66 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 67 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 68 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 69 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6A + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6B + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6C + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6D + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6E + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6F + + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 70 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 71 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 72 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 73 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 74 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 75 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 76 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 77 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 78 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 79 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 7A + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 7B + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 7C + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 7D + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 7E + {false, false, true, false, false, true, false, true, true, true, false, false, false}, // 7F + + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 80 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 81 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 82 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 83 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 84 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 85 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 86 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 87 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 88 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 89 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8A + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8B + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8C + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8D + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8E + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8F + + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 90 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 91 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 92 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 93 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 94 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 95 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 96 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 97 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 98 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 99 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9A + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9B + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9C + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9D + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9E + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9F + + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A0 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A1 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A2 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A3 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A4 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A5 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A6 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A7 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A8 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A9 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AA + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AB + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AC + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AD + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AE + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AF + + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B0 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B1 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B2 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B3 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B4 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B5 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B6 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B7 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B8 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B9 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BA + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BB + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BC + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BD + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BE + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BF + + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C0 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C1 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C2 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C3 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C4 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C5 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C6 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C7 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C8 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C9 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CA + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CB + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CC + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CD + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CE + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CF + + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D0 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D1 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D2 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D3 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D4 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D5 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D6 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D7 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D8 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D9 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DA + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DB + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DC + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DD + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DE + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DF + + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E0 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E1 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E2 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E3 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E4 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E5 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E6 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E7 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E8 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E9 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EA + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EB + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EC + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // ED + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EE + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EF + + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F0 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F1 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F2 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F3 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F4 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F5 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F6 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F7 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F8 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F9 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FA + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FB + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FC + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FD + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FE + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FF + + // out of range test + {false, false, false, false, false, false, false, false, false, false, false, false, false} // 100 +}; + + +TEST +{ + int i = 0; + + while (i<NUMTESTS) + { + // isalnum() + ASSERT_AreEqual(testSet[i].isalnum, (isalnum(i) ? true : false), "%d", "Invalid 'isalnum(%d)' classification!" COMMA i); + + // isalpha() + ASSERT_AreEqual(testSet[i].isalpha, (isalpha(i) ? true : false), "%d", "Invalid 'isalpha(%d)' classification!" COMMA i); + + // isascii() + ASSERT_AreEqual(testSet[i].isascii, (isascii(i) ? true : false), "%d", "Invalid 'isascii(%d)' classification!" COMMA i); + + // iscntrl() + ASSERT_AreEqual(testSet[i].iscntrl, (iscntrl(i) ? true : false), "%d", "Invalid 'iscntrl(%d)' classification!" COMMA i); + + // isdigit() + ASSERT_AreEqual(testSet[i].isdigit, (isdigit(i) ? true : false), "%d", "Invalid 'isdigit(%d)' classification!" COMMA i); + + // isgraph() + ASSERT_AreEqual(testSet[i].isgraph, (isgraph(i) ? true : false), "%d", "Invalid 'isgraph(%d)' classification!" COMMA i); + + // islower() + ASSERT_AreEqual(testSet[i].islower, (islower(i) ? true : false), "%d", "Invalid 'islower(%d)' classification!" COMMA i); + + // isprint() + ASSERT_AreEqual(testSet[i].isprint, (isprint(i) ? true : false), "%d", "Invalid 'isprint(%d)' classification!" COMMA i); + + // ispunct() + ASSERT_AreEqual(testSet[i].ispunct, (ispunct(i) ? true : false), "%d", "Invalid 'ispunct(%d)' classification!" COMMA i); + + // isspace() + ASSERT_AreEqual(testSet[i].isspace, (isspace(i) ? true : false), "%d", "Invalid 'isspace(%d)' classification!" COMMA i); + + // isupper() + ASSERT_AreEqual(testSet[i].isupper, (isupper(i) ? true : false), "%d", "Invalid 'isupper(%d)' classification!" COMMA i); + + // isxdigit() + ASSERT_AreEqual(testSet[i].isxdigit, (isxdigit(i) ? true : false), "%d", "Invalid 'isxdigit(%d)' classification!" COMMA i); + +#if __CC65_STD__ >= __CC65_STD_C99__ + // isblank() + ASSERT_AreEqual(testSet[i].isblank, (isblank(i) ? true : false), "%d", "Invalid 'isblank(%d)' classification!" COMMA i); +#endif + ++i; + } +} +ENDTEST From 002d1801ec72c1dc11e90cd7e821395e6df61a5b Mon Sep 17 00:00:00 2001 From: IrgendwerA8 <c.krueger.b@web.de> Date: Sun, 5 Jan 2020 15:57:44 +0100 Subject: [PATCH 0072/2710] Changes resulting from code review. --- asminc/ctype.inc | 2 ++ asminc/ctypetable.inc | 2 +- libsrc/common/atoi.s | 13 ++++++------- libsrc/common/isascii.s | 13 +++++-------- libsrc/common/strlower.s | 5 ++--- libsrc/common/strupper.s | 3 +-- 6 files changed, 17 insertions(+), 21 deletions(-) diff --git a/asminc/ctype.inc b/asminc/ctype.inc index 401e772a2..299760789 100644 --- a/asminc/ctype.inc +++ b/asminc/ctype.inc @@ -9,6 +9,8 @@ ; ; Definitions for the character type tables ; +; Ullrich von Bassewitz, 08.09.2001 +; ; Define bitmapped constants for the table entries diff --git a/asminc/ctypetable.inc b/asminc/ctypetable.inc index e0a8bdcd3..7134d002e 100644 --- a/asminc/ctypetable.inc +++ b/asminc/ctypetable.inc @@ -13,7 +13,7 @@ .include "ctype.inc" .export __ctype -; This data is a table of possible ctype combinations, possible during +; Table definition covering all possible ctype combinations .rodata __ctype: diff --git a/libsrc/common/atoi.s b/libsrc/common/atoi.s index 8427be62e..b63fcb206 100644 --- a/libsrc/common/atoi.s +++ b/libsrc/common/atoi.s @@ -54,10 +54,11 @@ L3: iny L5: stx tmp1 ; remember sign flag L6: lda (ptr1),y ; get next char - ; get character classification - jsr ctype_preprocessor_no_check - and #CT_DIGIT ; digit? - beq L8 ; done + sec ; check if char is in digit space + sbc #'0' ; so subtract lower limit + tax ; remember this numeric value + cmp #10 ; and check if upper limit is not crossed + bcs L8 ; done ; Multiply ptr2 (the converted value) by 10 @@ -91,9 +92,7 @@ L6: lda (ptr1),y ; get next char ; Get the character back and add it - lda (ptr1),y ; fetch char again - sec - sbc #'0' ; make numeric value + txa ; restore numeric value back to accu clc adc ptr2 sta ptr2 diff --git a/libsrc/common/isascii.s b/libsrc/common/isascii.s index dccfabaa1..c15cc586d 100644 --- a/libsrc/common/isascii.s +++ b/libsrc/common/isascii.s @@ -13,15 +13,12 @@ .export _isascii _isascii: - cpx #$00 ; Char range ok? - bne @L1 ; Jump if no - - tay - bmi @L1 - - inx + asl a ; high-bit to carry + txa ; check range of input param + bne @L1 ; out-of bounds? + adc #$FF ; calculate return value based on carry rts -@L1: lda #$00 ; Return false +@L1: lda #$00 ; return false tax rts diff --git a/libsrc/common/strlower.s b/libsrc/common/strlower.s index 8c634b6e6..d4e481382 100644 --- a/libsrc/common/strlower.s +++ b/libsrc/common/strlower.s @@ -28,9 +28,8 @@ loop: lda (ptr1),y ; get character jsr ctype_preprocessor_no_check and #CT_UPPER ; upper case char? beq L1 ; jump if no - lda (ptr1),y ; fetch character again - sec - sbc #<('A'-'a') ; make lower case char + lda (ptr1),y ; fetch character again + adc #<('a'-'A') ; make lower case char (ctype_preprocessor_no_check ensures carry clear) sta (ptr1),y ; store back L1: iny ; next char bne loop diff --git a/libsrc/common/strupper.s b/libsrc/common/strupper.s index c07fb17c1..dd6c1c25f 100644 --- a/libsrc/common/strupper.s +++ b/libsrc/common/strupper.s @@ -28,8 +28,7 @@ loop: lda (ptr1),y ; get character and #CT_LOWER ; lower case char? beq L1 ; jump if no lda (ptr1),y ; fetch character again - clc - adc #<('A'-'a') ; make upper case char + adc #<('A'-'a') ; make upper case char (ctype_preprocessor_no_check ensures carry clear) sta (ptr1),y ; store back L1: iny ; next char bne loop From 08705a3fdc5050d284eb655e6efb2ab5664ca9a4 Mon Sep 17 00:00:00 2001 From: IrgendwerA8 <c.krueger.b@web.de> Date: Sun, 2 Feb 2020 18:21:25 +0100 Subject: [PATCH 0073/2710] Changes resulting from 2nd code review --- asminc/ctype.inc | 2 +- asminc/ctype_common.inc | 2 +- asminc/ctypetable.inc | 50 +- libsrc/apple2/ctype.s | 5 - libsrc/atari/ctype.s | 2 +- libsrc/atmos/ctype.s | 2 +- libsrc/cbm/ctype.s | 2 +- .../common/ctype.s | 4 +- libsrc/common/ctype_preprocessor.s | 2 +- libsrc/common/isalnum.s | 2 +- libsrc/common/isalpha.s | 2 +- libsrc/common/isascii.s | 10 +- libsrc/common/isblank.s | 4 +- libsrc/common/iscntrl.s | 4 +- libsrc/common/isdigit.s | 2 +- libsrc/common/isgraph.s | 8 +- libsrc/common/islower.s | 4 +- libsrc/common/isprint.s | 4 +- libsrc/common/ispunct.s | 4 +- libsrc/common/isspace.s | 4 +- libsrc/common/isupper.s | 4 +- libsrc/common/isxdigit.s | 4 +- libsrc/common/mul20.s | 2 +- libsrc/common/mul40.s | 2 +- libsrc/common/stricmp.s | 10 +- libsrc/creativision/ctype.s | 5 - libsrc/gamate/ctype.s | 5 - libsrc/geos-common/system/ctype.s | 2 +- libsrc/lynx/ctype.s | 5 - libsrc/nes/ctype.s | 5 - libsrc/pce/ctype.s | 5 - test/val/lib_common_ctype.c | 606 +++++++++--------- 32 files changed, 372 insertions(+), 402 deletions(-) delete mode 100644 libsrc/apple2/ctype.s rename asminc/ctype_console.inc => libsrc/common/ctype.s (99%) delete mode 100644 libsrc/creativision/ctype.s delete mode 100644 libsrc/gamate/ctype.s delete mode 100644 libsrc/lynx/ctype.s delete mode 100644 libsrc/nes/ctype.s delete mode 100644 libsrc/pce/ctype.s diff --git a/asminc/ctype.inc b/asminc/ctype.inc index 299760789..18a290fbe 100644 --- a/asminc/ctype.inc +++ b/asminc/ctype.inc @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; diff --git a/asminc/ctype_common.inc b/asminc/ctype_common.inc index ffd8dfe0e..04aaa8f95 100644 --- a/asminc/ctype_common.inc +++ b/asminc/ctype_common.inc @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; diff --git a/asminc/ctypetable.inc b/asminc/ctypetable.inc index 7134d002e..76c5b9298 100644 --- a/asminc/ctypetable.inc +++ b/asminc/ctypetable.inc @@ -3,46 +3,46 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; ; Data covering all possible combinations of character flags for target specific definition ; -.include "ctype.inc" -.export __ctype +.include "ctype.inc" +.export __ctype ; Table definition covering all possible ctype combinations .rodata __ctype: -ct_none: .byte CT_NONE -ct_lower: .byte CT_LOWER -ct_upper: .byte CT_UPPER -ct_digit_xdigit: .byte CT_DIGIT | CT_XDIGIT -ct_lower_xdigit: .byte CT_LOWER | CT_XDIGIT -ct_upper_xdigit: .byte CT_UPPER | CT_XDIGIT -ct_ctrl: .byte CT_CTRL -ct_ws: .byte CT_OTHER_WS -ct_ctrl_ws: .byte CT_CTRL | CT_OTHER_WS -ct_space_spacetab: .byte CT_SPACE | CT_SPACE_TAB -ct_ctrl_ws_spacetab: .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB +ct_none: .byte CT_NONE +ct_lower: .byte CT_LOWER +ct_upper: .byte CT_UPPER +ct_digit_xdigit: .byte CT_DIGIT | CT_XDIGIT +ct_lower_xdigit: .byte CT_LOWER | CT_XDIGIT +ct_upper_xdigit: .byte CT_UPPER | CT_XDIGIT +ct_ctrl: .byte CT_CTRL +ct_ws: .byte CT_OTHER_WS +ct_ctrl_ws: .byte CT_CTRL | CT_OTHER_WS +ct_space_spacetab: .byte CT_SPACE | CT_SPACE_TAB +ct_ctrl_ws_spacetab: .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB ; build indices out of the table above: -CT_NONE_IDX = ct_none - __ctype -CT_LOWER_IDX = ct_lower - __ctype -CT_UPPER_IDX = ct_upper - __ctype -CT_DIGIT_XDIGIT_IDX = ct_digit_xdigit - __ctype -CT_LOWER_XDIGIT_IDX = ct_lower_xdigit - __ctype -CT_UPPER_XDIGIT_IDX = ct_upper_xdigit - __ctype -CT_CTRL_IDX = ct_ctrl - __ctype -CT_WS_IDX = ct_ws - __ctype -CT_CTRL_WS_IDX = ct_ctrl_ws - __ctype -CT_SPACE_SPACETAB_IDX = ct_space_spacetab - __ctype +CT_NONE_IDX = ct_none - __ctype +CT_LOWER_IDX = ct_lower - __ctype +CT_UPPER_IDX = ct_upper - __ctype +CT_DIGIT_XDIGIT_IDX = ct_digit_xdigit - __ctype +CT_LOWER_XDIGIT_IDX = ct_lower_xdigit - __ctype +CT_UPPER_XDIGIT_IDX = ct_upper_xdigit - __ctype +CT_CTRL_IDX = ct_ctrl - __ctype +CT_WS_IDX = ct_ws - __ctype +CT_CTRL_WS_IDX = ct_ctrl_ws - __ctype +CT_SPACE_SPACETAB_IDX = ct_space_spacetab - __ctype CT_CTRL_WS_SPACETAB_IDX = ct_ctrl_ws_spacetab - __ctype .macro ct_mix lower, upper - .byte ((lower) & $0F) | ((upper) << 4) + .byte ((lower) & $0F) | ((upper) << 4) .endmacro diff --git a/libsrc/apple2/ctype.s b/libsrc/apple2/ctype.s deleted file mode 100644 index da4d38472..000000000 --- a/libsrc/apple2/ctype.s +++ /dev/null @@ -1,5 +0,0 @@ -; Character specification table. -; -; uses the "console" definition - - .include "ctype_console.inc" diff --git a/libsrc/atari/ctype.s b/libsrc/atari/ctype.s index 8173b2ea8..7903dc2a3 100644 --- a/libsrc/atari/ctype.s +++ b/libsrc/atari/ctype.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; diff --git a/libsrc/atmos/ctype.s b/libsrc/atmos/ctype.s index 3c3d7be5b..7ca01b32a 100644 --- a/libsrc/atmos/ctype.s +++ b/libsrc/atmos/ctype.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; diff --git a/libsrc/cbm/ctype.s b/libsrc/cbm/ctype.s index d0943b123..77a37431d 100644 --- a/libsrc/cbm/ctype.s +++ b/libsrc/cbm/ctype.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; diff --git a/asminc/ctype_console.inc b/libsrc/common/ctype.s similarity index 99% rename from asminc/ctype_console.inc rename to libsrc/common/ctype.s index 55db8e615..15f115e7d 100644 --- a/asminc/ctype_console.inc +++ b/libsrc/common/ctype.s @@ -1,9 +1,9 @@ -; ctype_console.inc +; ctype.s ; ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; diff --git a/libsrc/common/ctype_preprocessor.s b/libsrc/common/ctype_preprocessor.s index 1f33bd224..efa001e61 100644 --- a/libsrc/common/ctype_preprocessor.s +++ b/libsrc/common/ctype_preprocessor.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; diff --git a/libsrc/common/isalnum.s b/libsrc/common/isalnum.s index 4f6a5e91b..141949c0f 100644 --- a/libsrc/common/isalnum.s +++ b/libsrc/common/isalnum.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; diff --git a/libsrc/common/isalpha.s b/libsrc/common/isalpha.s index a331722a1..95e799161 100644 --- a/libsrc/common/isalpha.s +++ b/libsrc/common/isalpha.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; diff --git a/libsrc/common/isascii.s b/libsrc/common/isascii.s index c15cc586d..70d2f72a3 100644 --- a/libsrc/common/isascii.s +++ b/libsrc/common/isascii.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; @@ -13,10 +13,10 @@ .export _isascii _isascii: - asl a ; high-bit to carry - txa ; check range of input param - bne @L1 ; out-of bounds? - adc #$FF ; calculate return value based on carry + asl a ; high-bit to carry + txa ; check range of input param + bne @L1 ; out-of bounds? + adc #$FF ; calculate return value based on carry rts @L1: lda #$00 ; return false diff --git a/libsrc/common/isblank.s b/libsrc/common/isblank.s index 5e0eafd73..3d0a02f3d 100644 --- a/libsrc/common/isblank.s +++ b/libsrc/common/isblank.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; @@ -14,7 +14,7 @@ .export _isblank .include "ctype.inc" - .import ctype_preprocessor + .import ctype_preprocessor _isblank: jsr ctype_preprocessor ; (clears always x) diff --git a/libsrc/common/iscntrl.s b/libsrc/common/iscntrl.s index f4bf02858..f2b95042d 100644 --- a/libsrc/common/iscntrl.s +++ b/libsrc/common/iscntrl.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; @@ -12,7 +12,7 @@ .export _iscntrl .include "ctype.inc" - .import ctype_preprocessor + .import ctype_preprocessor _iscntrl: jsr ctype_preprocessor ; (clears always x) diff --git a/libsrc/common/isdigit.s b/libsrc/common/isdigit.s index c0e8bb026..36acd73b7 100644 --- a/libsrc/common/isdigit.s +++ b/libsrc/common/isdigit.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; diff --git a/libsrc/common/isgraph.s b/libsrc/common/isgraph.s index 575b05a62..4e317db57 100644 --- a/libsrc/common/isgraph.s +++ b/libsrc/common/isgraph.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; @@ -17,9 +17,9 @@ _isgraph: jsr ctype_preprocessor ; (clears always x) bcs @L1 ; out of range? (everything already clear -> false) - and #CT_CTRL_SPACE ; mask character bits - cmp #1 ; if false, then set "borrow" flag + and #CT_CTRL_SPACE ; mask character bits + cmp #1 ; if false, then set "borrow" flag lda #0 - sbc #0 ; invert logic (return NOT control and NOT space) + sbc #0 ; invert logic (return NOT control and NOT space) @L1: rts diff --git a/libsrc/common/islower.s b/libsrc/common/islower.s index 62ae41643..608d0ccf4 100644 --- a/libsrc/common/islower.s +++ b/libsrc/common/islower.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; @@ -12,7 +12,7 @@ .export _islower .include "ctype.inc" - .import ctype_preprocessor + .import ctype_preprocessor _islower: jsr ctype_preprocessor ; (clears always x) diff --git a/libsrc/common/isprint.s b/libsrc/common/isprint.s index cbe68c801..0d135f24f 100644 --- a/libsrc/common/isprint.s +++ b/libsrc/common/isprint.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; @@ -12,7 +12,7 @@ .export _isprint .include "ctype.inc" - .import ctype_preprocessor + .import ctype_preprocessor _isprint: jsr ctype_preprocessor ; (clears always x) diff --git a/libsrc/common/ispunct.s b/libsrc/common/ispunct.s index ad48fc534..a532399fe 100644 --- a/libsrc/common/ispunct.s +++ b/libsrc/common/ispunct.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; @@ -12,7 +12,7 @@ .export _ispunct .include "ctype.inc" - .import ctype_preprocessor + .import ctype_preprocessor _ispunct: jsr ctype_preprocessor ; (clears always x) diff --git a/libsrc/common/isspace.s b/libsrc/common/isspace.s index 272acac0c..1f70786ce 100644 --- a/libsrc/common/isspace.s +++ b/libsrc/common/isspace.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; @@ -12,7 +12,7 @@ .export _isspace .include "ctype.inc" - .import ctype_preprocessor + .import ctype_preprocessor _isspace: jsr ctype_preprocessor ; (clears always x) diff --git a/libsrc/common/isupper.s b/libsrc/common/isupper.s index 2d89459a0..0dd2a6ead 100644 --- a/libsrc/common/isupper.s +++ b/libsrc/common/isupper.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; @@ -12,7 +12,7 @@ .export _isupper .include "ctype.inc" - .import ctype_preprocessor + .import ctype_preprocessor _isupper: jsr ctype_preprocessor ; (clears always x) diff --git a/libsrc/common/isxdigit.s b/libsrc/common/isxdigit.s index 07fef5c2b..3f36ede01 100644 --- a/libsrc/common/isxdigit.s +++ b/libsrc/common/isxdigit.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; @@ -12,7 +12,7 @@ .export _isxdigit .include "ctype.inc" - .import ctype_preprocessor + .import ctype_preprocessor _isxdigit: jsr ctype_preprocessor ; (clears always x) diff --git a/libsrc/common/mul20.s b/libsrc/common/mul20.s index 4035b9476..5b3bbf830 100644 --- a/libsrc/common/mul20.s +++ b/libsrc/common/mul20.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; diff --git a/libsrc/common/mul40.s b/libsrc/common/mul40.s index f240fc41a..07d6164b5 100644 --- a/libsrc/common/mul40.s +++ b/libsrc/common/mul40.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; diff --git a/libsrc/common/stricmp.s b/libsrc/common/stricmp.s index e1683d9f3..3a03258bd 100644 --- a/libsrc/common/stricmp.s +++ b/libsrc/common/stricmp.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; @@ -27,7 +27,7 @@ _strcasecmp: loop: lda (ptr2),y ; get char from second string sta tmp2 ; and save it ; get character classification - jsr ctype_preprocessor_no_check + jsr ctype_preprocessor_no_check and #CT_LOWER ; lower case char? beq L1 ; jump if no lda #<('A'-'a') ; make upper case char @@ -37,13 +37,13 @@ loop: lda (ptr2),y ; get char from second string L1: lda (ptr1),y ; get character from first string sta tmp1 ; get character classification - jsr ctype_preprocessor_no_check + jsr ctype_preprocessor_no_check and #CT_LOWER ; lower case char? beq L2 ; jump if no lda #<('A'-'a') ; make upper case char adc tmp1 ; ctype_preprocessor_no_check ensures carry clear! - sta tmp1 ; remember upper case equivalent - + sta tmp1 ; remember upper case equivalent + L2: ldx tmp1 cpx tmp2 ; compare characters bne L3 diff --git a/libsrc/creativision/ctype.s b/libsrc/creativision/ctype.s deleted file mode 100644 index da4d38472..000000000 --- a/libsrc/creativision/ctype.s +++ /dev/null @@ -1,5 +0,0 @@ -; Character specification table. -; -; uses the "console" definition - - .include "ctype_console.inc" diff --git a/libsrc/gamate/ctype.s b/libsrc/gamate/ctype.s deleted file mode 100644 index da4d38472..000000000 --- a/libsrc/gamate/ctype.s +++ /dev/null @@ -1,5 +0,0 @@ -; Character specification table. -; -; uses the "console" definition - - .include "ctype_console.inc" diff --git a/libsrc/geos-common/system/ctype.s b/libsrc/geos-common/system/ctype.s index a50ad1635..013a1ba99 100644 --- a/libsrc/geos-common/system/ctype.s +++ b/libsrc/geos-common/system/ctype.s @@ -3,7 +3,7 @@ ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems ; -; https://github.com/cc65/cc65 +; https://cc65.github.io ; ; See "LICENSE" file for legal information. ; diff --git a/libsrc/lynx/ctype.s b/libsrc/lynx/ctype.s deleted file mode 100644 index da4d38472..000000000 --- a/libsrc/lynx/ctype.s +++ /dev/null @@ -1,5 +0,0 @@ -; Character specification table. -; -; uses the "console" definition - - .include "ctype_console.inc" diff --git a/libsrc/nes/ctype.s b/libsrc/nes/ctype.s deleted file mode 100644 index da4d38472..000000000 --- a/libsrc/nes/ctype.s +++ /dev/null @@ -1,5 +0,0 @@ -; Character specification table. -; -; uses the "console" definition - - .include "ctype_console.inc" diff --git a/libsrc/pce/ctype.s b/libsrc/pce/ctype.s deleted file mode 100644 index da4d38472..000000000 --- a/libsrc/pce/ctype.s +++ /dev/null @@ -1,5 +0,0 @@ -; Character specification table. -; -; uses the "console" definition - - .include "ctype_console.inc" diff --git a/test/val/lib_common_ctype.c b/test/val/lib_common_ctype.c index 15980aff1..39c92953b 100644 --- a/test/val/lib_common_ctype.c +++ b/test/val/lib_common_ctype.c @@ -3,7 +3,7 @@ // This file is part of // cc65 - a freeware C compiler for 6502 based systems // -// https://github.com/cc65/cc65 +// https://cc65.github.io // // See "LICENSE" file for legal information. // @@ -18,19 +18,19 @@ typedef struct { - bool isalnum; - bool isalpha; - bool isascii; - bool iscntrl; - bool isdigit; - bool isgraph; - bool islower; - bool isprint; - bool ispunct; - bool isspace; - bool isupper; - bool isxdigit; - bool isblank; + bool isalnum; + bool isalpha; + bool isascii; + bool iscntrl; + bool isdigit; + bool isgraph; + bool islower; + bool isprint; + bool ispunct; + bool isspace; + bool isupper; + bool isxdigit; + bool isblank; } CTypeClassifications; @@ -39,330 +39,330 @@ CTypeClassifications testSet[NUMTESTS] = { //alnum, alpha, ascii, cntrl, digit, graph, lower, print, punct, space, upper, xdigit,blank - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 00 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 01 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 02 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 03 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 04 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 05 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 06 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 07 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 08 - {false, false, true, true, false, false, false, false, false, true, false, false, true }, // 09 - {false, false, true, true, false, false, false, false, false, true, false, false, false}, // 0A - {false, false, true, true, false, false, false, false, false, true, false, false, false}, // 0B - {false, false, true, true, false, false, false, false, false, true, false, false, false}, // 0C - {false, false, true, true, false, false, false, false, false, true, false, false, false}, // 0D - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 0E - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 0F + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 00 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 01 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 02 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 03 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 04 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 05 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 06 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 07 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 08 + {false, false, true, true, false, false, false, false, false, true, false, false, true }, // 09 + {false, false, true, true, false, false, false, false, false, true, false, false, false}, // 0A + {false, false, true, true, false, false, false, false, false, true, false, false, false}, // 0B + {false, false, true, true, false, false, false, false, false, true, false, false, false}, // 0C + {false, false, true, true, false, false, false, false, false, true, false, false, false}, // 0D + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 0E + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 0F - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 10 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 11 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 12 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 13 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 14 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 15 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 16 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 17 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 18 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 19 - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1A - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1B - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1C - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1D - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1E - {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1F + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 10 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 11 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 12 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 13 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 14 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 15 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 16 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 17 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 18 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 19 + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1A + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1B + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1C + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1D + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1E + {false, false, true, true, false, false, false, false, false, false, false, false, false}, // 1F - {false, false, true, false, false, false, false, true, false, true, false, false, true }, // 20 - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 21 - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 22 - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 23 - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 24 - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 25 - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 26 - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 27 - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 28 - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 29 - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2A - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2B - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2C - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2D - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2E - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2F + {false, false, true, false, false, false, false, true, false, true, false, false, true }, // 20 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 21 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 22 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 23 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 24 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 25 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 26 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 27 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 28 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 29 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2A + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2B + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2C + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2D + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2E + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2F - {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 30 - {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 31 - {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 32 - {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 33 - {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 34 - {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 35 - {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 36 - {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 37 - {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 38 - {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 39 - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3A - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3B - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3C - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3D - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3E - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3F + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 30 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 31 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 32 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 33 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 34 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 35 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 36 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 37 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 38 + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 39 + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3A + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3B + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3C + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3D + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3E + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 3F - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 40 - {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 41 - {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 42 - {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 43 - {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 44 - {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 45 - {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 46 - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 47 - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 48 - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 49 - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4A - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4B - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4C - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4D - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4E - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4F + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 40 + {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 41 + {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 42 + {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 43 + {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 44 + {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 45 + {true, true, true, false, false, true, false, true, false, false, true, true, false}, // 46 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 47 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 48 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 49 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4A + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4B + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4C + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4D + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4E + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4F - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 50 - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 51 - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 52 - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 53 - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 54 - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 55 - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 56 - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 57 - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 58 - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 59 - {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 5A - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5B - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5C - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5D - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5E - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5F + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 50 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 51 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 52 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 53 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 54 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 55 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 56 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 57 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 58 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 59 + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 5A + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5B + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5C + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5D + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5E + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 5F - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 60 - {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 61 - {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 62 - {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 63 - {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 64 - {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 65 - {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 66 - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 67 - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 68 - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 69 - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6A - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6B - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6C - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6D - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6E - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6F + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 60 + {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 61 + {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 62 + {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 63 + {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 64 + {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 65 + {true, true, true, false, false, true, true, true, false, false, false, true, false}, // 66 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 67 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 68 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 69 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6A + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6B + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6C + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6D + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6E + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 6F - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 70 - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 71 - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 72 - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 73 - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 74 - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 75 - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 76 - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 77 - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 78 - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 79 - {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 7A - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 7B - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 7C - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 7D - {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 7E - {false, false, true, false, false, true, false, true, true, true, false, false, false}, // 7F + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 70 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 71 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 72 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 73 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 74 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 75 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 76 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 77 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 78 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 79 + {true, true, true, false, false, true, true, true, false, false, false, false, false}, // 7A + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 7B + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 7C + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 7D + {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 7E + {false, false, true, false, false, true, false, true, true, true, false, false, false}, // 7F - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 80 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 81 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 82 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 83 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 84 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 85 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 86 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 87 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 88 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 89 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8A - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8B - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8C - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8D - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8E - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8F + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 80 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 81 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 82 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 83 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 84 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 85 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 86 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 87 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 88 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 89 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8A + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8B + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8C + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8D + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8E + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 8F - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 90 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 91 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 92 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 93 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 94 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 95 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 96 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 97 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 98 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 99 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9A - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9B - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9C - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9D - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9E - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9F + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 90 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 91 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 92 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 93 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 94 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 95 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 96 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 97 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 98 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 99 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9A + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9B + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9C + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9D + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9E + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // 9F - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A0 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A1 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A2 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A3 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A4 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A5 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A6 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A7 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A8 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A9 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AA - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AB - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AC - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AD - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AE - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AF + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A0 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A1 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A2 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A3 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A4 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A5 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A6 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A7 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A8 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // A9 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AA + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AB + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AC + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AD + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AE + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // AF - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B0 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B1 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B2 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B3 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B4 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B5 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B6 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B7 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B8 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B9 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BA - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BB - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BC - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BD - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BE - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BF + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B0 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B1 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B2 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B3 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B4 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B5 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B6 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B7 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B8 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // B9 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BA + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BB + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BC + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BD + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BE + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // BF - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C0 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C1 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C2 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C3 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C4 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C5 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C6 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C7 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C8 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C9 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CA - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CB - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CC - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CD - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CE - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CF + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C0 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C1 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C2 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C3 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C4 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C5 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C6 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C7 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C8 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // C9 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CA + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CB + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CC + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CD + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CE + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // CF - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D0 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D1 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D2 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D3 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D4 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D5 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D6 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D7 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D8 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D9 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DA - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DB - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DC - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DD - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DE - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DF + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D0 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D1 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D2 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D3 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D4 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D5 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D6 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D7 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D8 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // D9 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DA + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DB + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DC + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DD + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DE + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // DF - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E0 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E1 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E2 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E3 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E4 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E5 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E6 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E7 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E8 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E9 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EA - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EB - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EC - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // ED - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EE - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EF + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E0 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E1 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E2 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E3 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E4 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E5 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E6 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E7 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E8 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // E9 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EA + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EB + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EC + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // ED + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EE + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // EF - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F0 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F1 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F2 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F3 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F4 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F5 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F6 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F7 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F8 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F9 - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FA - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FB - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FC - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FD - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FE - {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FF + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F0 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F1 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F2 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F3 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F4 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F5 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F6 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F7 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F8 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // F9 + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FA + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FB + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FC + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FD + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FE + {false, false, false, false, false, true, false, true, true, false, false, false, false}, // FF - // out of range test - {false, false, false, false, false, false, false, false, false, false, false, false, false} // 100 + // out of range test + {false, false, false, false, false, false, false, false, false, false, false, false, false} // 100 }; TEST { - int i = 0; + int i = 0; - while (i<NUMTESTS) - { - // isalnum() - ASSERT_AreEqual(testSet[i].isalnum, (isalnum(i) ? true : false), "%d", "Invalid 'isalnum(%d)' classification!" COMMA i); + while (i<NUMTESTS) + { + // isalnum() + ASSERT_AreEqual(testSet[i].isalnum, (isalnum(i) ? true : false), "%d", "Invalid 'isalnum(%d)' classification!" COMMA i); - // isalpha() - ASSERT_AreEqual(testSet[i].isalpha, (isalpha(i) ? true : false), "%d", "Invalid 'isalpha(%d)' classification!" COMMA i); + // isalpha() + ASSERT_AreEqual(testSet[i].isalpha, (isalpha(i) ? true : false), "%d", "Invalid 'isalpha(%d)' classification!" COMMA i); - // isascii() - ASSERT_AreEqual(testSet[i].isascii, (isascii(i) ? true : false), "%d", "Invalid 'isascii(%d)' classification!" COMMA i); + // isascii() + ASSERT_AreEqual(testSet[i].isascii, (isascii(i) ? true : false), "%d", "Invalid 'isascii(%d)' classification!" COMMA i); - // iscntrl() - ASSERT_AreEqual(testSet[i].iscntrl, (iscntrl(i) ? true : false), "%d", "Invalid 'iscntrl(%d)' classification!" COMMA i); + // iscntrl() + ASSERT_AreEqual(testSet[i].iscntrl, (iscntrl(i) ? true : false), "%d", "Invalid 'iscntrl(%d)' classification!" COMMA i); - // isdigit() - ASSERT_AreEqual(testSet[i].isdigit, (isdigit(i) ? true : false), "%d", "Invalid 'isdigit(%d)' classification!" COMMA i); + // isdigit() + ASSERT_AreEqual(testSet[i].isdigit, (isdigit(i) ? true : false), "%d", "Invalid 'isdigit(%d)' classification!" COMMA i); - // isgraph() - ASSERT_AreEqual(testSet[i].isgraph, (isgraph(i) ? true : false), "%d", "Invalid 'isgraph(%d)' classification!" COMMA i); + // isgraph() + ASSERT_AreEqual(testSet[i].isgraph, (isgraph(i) ? true : false), "%d", "Invalid 'isgraph(%d)' classification!" COMMA i); - // islower() - ASSERT_AreEqual(testSet[i].islower, (islower(i) ? true : false), "%d", "Invalid 'islower(%d)' classification!" COMMA i); + // islower() + ASSERT_AreEqual(testSet[i].islower, (islower(i) ? true : false), "%d", "Invalid 'islower(%d)' classification!" COMMA i); - // isprint() - ASSERT_AreEqual(testSet[i].isprint, (isprint(i) ? true : false), "%d", "Invalid 'isprint(%d)' classification!" COMMA i); + // isprint() + ASSERT_AreEqual(testSet[i].isprint, (isprint(i) ? true : false), "%d", "Invalid 'isprint(%d)' classification!" COMMA i); - // ispunct() - ASSERT_AreEqual(testSet[i].ispunct, (ispunct(i) ? true : false), "%d", "Invalid 'ispunct(%d)' classification!" COMMA i); + // ispunct() + ASSERT_AreEqual(testSet[i].ispunct, (ispunct(i) ? true : false), "%d", "Invalid 'ispunct(%d)' classification!" COMMA i); - // isspace() - ASSERT_AreEqual(testSet[i].isspace, (isspace(i) ? true : false), "%d", "Invalid 'isspace(%d)' classification!" COMMA i); + // isspace() + ASSERT_AreEqual(testSet[i].isspace, (isspace(i) ? true : false), "%d", "Invalid 'isspace(%d)' classification!" COMMA i); - // isupper() - ASSERT_AreEqual(testSet[i].isupper, (isupper(i) ? true : false), "%d", "Invalid 'isupper(%d)' classification!" COMMA i); + // isupper() + ASSERT_AreEqual(testSet[i].isupper, (isupper(i) ? true : false), "%d", "Invalid 'isupper(%d)' classification!" COMMA i); - // isxdigit() - ASSERT_AreEqual(testSet[i].isxdigit, (isxdigit(i) ? true : false), "%d", "Invalid 'isxdigit(%d)' classification!" COMMA i); + // isxdigit() + ASSERT_AreEqual(testSet[i].isxdigit, (isxdigit(i) ? true : false), "%d", "Invalid 'isxdigit(%d)' classification!" COMMA i); #if __CC65_STD__ >= __CC65_STD_C99__ - // isblank() - ASSERT_AreEqual(testSet[i].isblank, (isblank(i) ? true : false), "%d", "Invalid 'isblank(%d)' classification!" COMMA i); + // isblank() + ASSERT_AreEqual(testSet[i].isblank, (isblank(i) ? true : false), "%d", "Invalid 'isblank(%d)' classification!" COMMA i); #endif - ++i; - } + ++i; + } } ENDTEST From 026e57279de2aead494c93081f0a645aecbb39ae Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Fri, 24 Jan 2020 22:28:53 +0100 Subject: [PATCH 0074/2710] Fix bug in tgi_line : HRS(X) parameters are 16 bits. --- libsrc/telestrat/tgi/telestrat-228-200-3.s | 8 +++++++- libsrc/telestrat/tgi/telestrat-240-200-2.s | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/libsrc/telestrat/tgi/telestrat-228-200-3.s b/libsrc/telestrat/tgi/telestrat-228-200-3.s index 228bdce99..c8c569695 100644 --- a/libsrc/telestrat/tgi/telestrat-228-200-3.s +++ b/libsrc/telestrat/tgi/telestrat-228-200-3.s @@ -297,7 +297,13 @@ LINE: lda Y2 sta HRS4 - lda #$ff + lda #$00 + sta HRS1+1 + sta HRS2+1 + sta HRS3+1 + sta HRS4+1 + + lda #$FF sta HRSPAT BRK_TELEMON(XDRAWA) diff --git a/libsrc/telestrat/tgi/telestrat-240-200-2.s b/libsrc/telestrat/tgi/telestrat-240-200-2.s index 9bffebb0c..128003bfd 100644 --- a/libsrc/telestrat/tgi/telestrat-240-200-2.s +++ b/libsrc/telestrat/tgi/telestrat-240-200-2.s @@ -290,7 +290,14 @@ LINE: lda Y2 sta HRS4 - lda #$ff + + lda #$00 + sta HRS1+1 + sta HRS2+1 + sta HRS3+1 + sta HRS4+1 + + lda #$FF sta HRSPAT BRK_TELEMON(XDRAWA) From 0962a9f286b483d35cd854ad1091115e47f9c2e8 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 28 Jan 2020 13:24:06 +0100 Subject: [PATCH 0075/2710] Fix 16 bits values --- libsrc/telestrat/tgi/telestrat-228-200-3.s | 12 +++++++++--- libsrc/telestrat/tgi/telestrat-240-200-2.s | 8 +++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/libsrc/telestrat/tgi/telestrat-228-200-3.s b/libsrc/telestrat/tgi/telestrat-228-200-3.s index c8c569695..34af597eb 100644 --- a/libsrc/telestrat/tgi/telestrat-228-200-3.s +++ b/libsrc/telestrat/tgi/telestrat-228-200-3.s @@ -296,12 +296,18 @@ LINE: sta HRS3 lda Y2 sta HRS4 - - lda #$00 + + lda X1+1 sta HRS1+1 + + lda Y1+1 sta HRS2+1 + + lda X2+1 sta HRS3+1 - sta HRS4+1 + + lda Y2+1 + sta HRS4+1 lda #$FF sta HRSPAT diff --git a/libsrc/telestrat/tgi/telestrat-240-200-2.s b/libsrc/telestrat/tgi/telestrat-240-200-2.s index 128003bfd..345f80e0e 100644 --- a/libsrc/telestrat/tgi/telestrat-240-200-2.s +++ b/libsrc/telestrat/tgi/telestrat-240-200-2.s @@ -291,10 +291,16 @@ LINE: sta HRS4 - lda #$00 + lda X1+1 sta HRS1+1 + + lda Y1+1 sta HRS2+1 + + lda X2+1 sta HRS3+1 + + lda Y2+1 sta HRS4+1 lda #$FF From 857a566a2ee2202a392471fd86e4129c9076d695 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Mon, 17 Feb 2020 11:07:52 +0100 Subject: [PATCH 0076/2710] Normalized Atari naming. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b3ea342e..3d78fda50 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ including - the 600/700 family - newer PET machines (not 2001). - the Apple ]\[+ and successors. -- the Atari 8 bit machines. +- the Atari 8-bit machines. - the Atari 2600 console. - the Atari 5200 console. - GEOS for the C64, C128 and Apple //e. From e2c664860781747eb247770bc766c7f0c5351a62 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 21 Feb 2020 08:12:05 -0500 Subject: [PATCH 0077/2710] Fixed a typo in commit 2e5fbe89cd3f67b06b292936dfdf4fdb104b7112. Changed a && to ||. --- src/common/cpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/cpu.c b/src/common/cpu.c index c1ff400b8..b4c5c8dfe 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -104,7 +104,7 @@ int ValidAddrSizeForCPU (unsigned char AddrSize) case ADDR_SIZE_FAR: /* Supported by "none" and 65816 */ - return (CPU == CPU_NONE && CPU == CPU_65816); + return (CPU == CPU_NONE || CPU == CPU_65816); case ADDR_SIZE_LONG: /* "none" supports all sizes */ From b91ad02da1759ddc81d484fe0bfc4d0aaf98b897 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 5 Mar 2020 14:38:12 +0100 Subject: [PATCH 0078/2710] Made use of 65C02 opcode (thx to polluks). --- libsrc/apple2/videomode.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/apple2/videomode.s b/libsrc/apple2/videomode.s index 65e582547..13151a48a 100644 --- a/libsrc/apple2/videomode.s +++ b/libsrc/apple2/videomode.s @@ -62,7 +62,7 @@ _videomode: done: lda #$11 ; Ctrl-char code for 40 cols plp bpl :+ - lda #$12 ; Ctrl-char code for 80 cols + inc a ; Ctrl-char code for 80 cols : rts ; X was preserved all the way .endif ; __APPLE2ENH__ From 2fc24847acc0e7d8718059f33b1d431d557050ef Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Wed, 11 Mar 2020 17:28:42 -0400 Subject: [PATCH 0079/2710] Fixed an error message printer. The disassembler can be built and won't crash if it sees duplicate labels, and one of them is an unnamed label. --- src/da65/labels.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/da65/labels.c b/src/da65/labels.c index 97e195ebf..542205c11 100644 --- a/src/da65/labels.c +++ b/src/da65/labels.c @@ -97,7 +97,9 @@ static void AddLabel (unsigned Addr, attr_t Attr, const char* Name) strcmp (SymTab[Addr], Name) == 0))) { return; } - Error ("Duplicate label for address $%04X: %s/%s", Addr, SymTab[Addr], Name); + Error ("Duplicate label for address $%04X (%s): '%s'", Addr, + SymTab[Addr] == 0 ? "<unnamed label>" : SymTab[Addr], + Name == 0 ? "<unnamed label>" : Name); } /* Create a new label (xstrdup will return NULL if input NULL) */ From e0cb33d9d486fe7e8c48d89a61ca4caff239d2e4 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 21 Mar 2020 17:11:20 -0400 Subject: [PATCH 0080/2710] SEGMENT start of 0 should be valid --- src/ld65/config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ld65/config.c b/src/ld65/config.c index b8699a87b..6606f6976 100644 --- a/src/ld65/config.c +++ b/src/ld65/config.c @@ -753,7 +753,7 @@ static void ParseSegments (void) case CFGTOK_START: FlagAttr (&S->Attr, SA_START, "START"); - S->Addr = CfgCheckedConstExpr (1, 0x1000000); + S->Addr = CfgCheckedConstExpr (0, 0x1000000); S->Flags |= SF_START; break; From beaa77d2d6c119da0251de254bc1b8b751129a7a Mon Sep 17 00:00:00 2001 From: Dirk Jagdmann <doj@cubic.org> Date: Mon, 23 Mar 2020 03:04:48 -0700 Subject: [PATCH 0081/2710] fix whitespace --- doc/coding.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/coding.sgml b/doc/coding.sgml index dc07c091a..57961209f 100644 --- a/doc/coding.sgml +++ b/doc/coding.sgml @@ -251,7 +251,7 @@ Register variables may give faster and shorter code, but they do also have an overhead. Register variables are actually zero page locations, so using them saves roughly one cycle per access. The calling routine may also use register variables, so the old values have to be saved on function entry and restored -on exit. Saving an d restoring has an overhead of about 70 cycles per 2 byte +on exit. Saving and restoring has an overhead of about 70 cycles per 2 byte variable. It is easy to see, that - apart from the additional code that is needed to save and restore the values - you need to make heavy use of a variable to justify the overhead. From 62eb3137abee926ed25e87574d6c1882c6c634df Mon Sep 17 00:00:00 2001 From: Jeremy Rand <jeremy@rand-family.com> Date: Tue, 24 Mar 2020 23:39:57 -0400 Subject: [PATCH 0082/2710] Update get_ostype.s Do not check $fbbe when detecting the Apple //e card. This byte is a version number for the Apple //e card according to misc technote #7 and it appears that the last version of the software that I am aware of has a 3 at this location. Prior to this change, Apple //e cards which we not version 0 would be detected as an Apple //e enhanced. --- libsrc/apple2/get_ostype.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/apple2/get_ostype.s b/libsrc/apple2/get_ostype.s index b54e38d63..192fa360a 100644 --- a/libsrc/apple2/get_ostype.s +++ b/libsrc/apple2/get_ostype.s @@ -36,7 +36,7 @@ index: .byte $B3, $00 ; Apple ][ .byte $B3, $1E, $00 ; Apple ][+ .byte $B3, $1E, $00 ; Apple /// (emulation) .byte $B3, $C0, $00 ; Apple //e - .byte $B3, $C0, $DD, $BE, $00 ; Apple //e Option Card + .byte $B3, $C0, $DD, $00 ; Apple //e Option Card .byte $B3, $C0, $00 ; Apple //e (enhanced) .byte $B3, $C0, $BF, $00 ; Apple //c .byte $B3, $C0, $BF, $00 ; Apple //c (3.5 ROM) @@ -49,7 +49,7 @@ value: .byte $38, $10 ; Apple ][ .byte $EA, $AD, $11 ; Apple ][+ .byte $EA, $8A, $20 ; Apple /// (emulation) .byte $06, $EA, $30 ; Apple //e - .byte $06, $E0, $02, $00, $40 ; Apple //e Option Card + .byte $06, $E0, $02, $40 ; Apple //e Option Card .byte $06, $E0, $31 ; Apple //e (enhanced) .byte $06, $00, $FF, $50 ; Apple //c .byte $06, $00, $00, $51 ; Apple //c (3.5 ROM) From a53bd345d855fdc175ed050cb4cd5b63427143fe Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 26 Mar 2020 12:29:56 +0100 Subject: [PATCH 0083/2710] Adjusted comments due to recent change. --- libsrc/apple2/get_ostype.s | 44 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/libsrc/apple2/get_ostype.s b/libsrc/apple2/get_ostype.s index 192fa360a..dd44aa831 100644 --- a/libsrc/apple2/get_ostype.s +++ b/libsrc/apple2/get_ostype.s @@ -32,30 +32,30 @@ next: inx bne :- beq next ; Branch always -index: .byte $B3, $00 ; Apple ][ - .byte $B3, $1E, $00 ; Apple ][+ - .byte $B3, $1E, $00 ; Apple /// (emulation) - .byte $B3, $C0, $00 ; Apple //e - .byte $B3, $C0, $DD, $00 ; Apple //e Option Card - .byte $B3, $C0, $00 ; Apple //e (enhanced) - .byte $B3, $C0, $BF, $00 ; Apple //c - .byte $B3, $C0, $BF, $00 ; Apple //c (3.5 ROM) - .byte $B3, $C0, $BF, $00 ; Apple //c (Mem. Exp.) - .byte $B3, $C0, $BF, $00 ; Apple //c (Rev. Mem. Exp.) - .byte $B3, $C0, $BF, $00 ; Apple //c Plus +index: .byte $B3, $00 ; Apple ][ + .byte $B3, $1E, $00 ; Apple ][+ + .byte $B3, $1E, $00 ; Apple /// (emulation) + .byte $B3, $C0, $00 ; Apple //e + .byte $B3, $C0, $DD, $00 ; Apple //e Option Card + .byte $B3, $C0, $00 ; Apple //e (enhanced) + .byte $B3, $C0, $BF, $00 ; Apple //c + .byte $B3, $C0, $BF, $00 ; Apple //c (3.5 ROM) + .byte $B3, $C0, $BF, $00 ; Apple //c (Mem. Exp.) + .byte $B3, $C0, $BF, $00 ; Apple //c (Rev. Mem. Exp.) + .byte $B3, $C0, $BF, $00 ; Apple //c Plus .byte $00 -value: .byte $38, $10 ; Apple ][ - .byte $EA, $AD, $11 ; Apple ][+ - .byte $EA, $8A, $20 ; Apple /// (emulation) - .byte $06, $EA, $30 ; Apple //e - .byte $06, $E0, $02, $40 ; Apple //e Option Card - .byte $06, $E0, $31 ; Apple //e (enhanced) - .byte $06, $00, $FF, $50 ; Apple //c - .byte $06, $00, $00, $51 ; Apple //c (3.5 ROM) - .byte $06, $00, $03, $53 ; Apple //c (Mem. Exp.) - .byte $06, $00, $04, $54 ; Apple //c (Rev. Mem. Exp.) - .byte $06, $00, $05, $55 ; Apple //c Plus +value: .byte $38, $10 ; Apple ][ + .byte $EA, $AD, $11 ; Apple ][+ + .byte $EA, $8A, $20 ; Apple /// (emulation) + .byte $06, $EA, $30 ; Apple //e + .byte $06, $E0, $02, $40 ; Apple //e Option Card + .byte $06, $E0, $31 ; Apple //e (enhanced) + .byte $06, $00, $FF, $50 ; Apple //c + .byte $06, $00, $00, $51 ; Apple //c (3.5 ROM) + .byte $06, $00, $03, $53 ; Apple //c (Mem. Exp.) + .byte $06, $00, $04, $54 ; Apple //c (Rev. Mem. Exp.) + .byte $06, $00, $05, $55 ; Apple //c Plus .byte $00 .code From 68ff89ba0a36b7d5d57d64077dfbb477215fd74a Mon Sep 17 00:00:00 2001 From: "marko.lauke" <marko.lauke@googlemail.com> Date: Fri, 13 Mar 2020 00:42:27 +0100 Subject: [PATCH 0084/2710] +cc65 inline asm stp mnemonic support --- src/cc65/codeent.c | 3 +++ src/cc65/opcodes.c | 7 +++++++ src/cc65/opcodes.h | 1 + 3 files changed, 11 insertions(+) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 729248e95..7df164cc3 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -615,6 +615,9 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) case OP65_BRK: break; + case OP65_STP: + break; + case OP65_BVC: break; diff --git a/src/cc65/opcodes.c b/src/cc65/opcodes.c index a7b91ca9a..792b92f7c 100644 --- a/src/cc65/opcodes.c +++ b/src/cc65/opcodes.c @@ -502,6 +502,13 @@ const OPCDesc OPCTable[OP65_COUNT] = { REG_NONE, /* chg */ OF_STORE /* flags */ }, + { OP65_STP, /* opcode */ + "stp", /* mnemonic */ + 1, /* size */ + REG_NONE, /* use */ + REG_NONE, /* chg */ + OF_NONE /* flags */ + }, { OP65_STX, /* opcode */ "stx", /* mnemonic */ 0, /* size */ diff --git a/src/cc65/opcodes.h b/src/cc65/opcodes.h index 0d191f6c7..8267d9550 100644 --- a/src/cc65/opcodes.h +++ b/src/cc65/opcodes.h @@ -114,6 +114,7 @@ typedef enum { OP65_SED, OP65_SEI, OP65_STA, + OP65_STP, /* 65c02, 65816 stop */ OP65_STX, OP65_STY, OP65_STZ, From 3e1284093359f1b57a1032f5708e76d9ca43ff2c Mon Sep 17 00:00:00 2001 From: "marko.lauke" <marko.lauke@googlemail.com> Date: Sat, 21 Mar 2020 20:26:34 +0100 Subject: [PATCH 0085/2710] +code style --- src/cc65/codeent.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 7df164cc3..51f5f1378 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -615,9 +615,6 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) case OP65_BRK: break; - case OP65_STP: - break; - case OP65_BVC: break; @@ -1141,6 +1138,9 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) } break; + case OP65_STP: + break; + case OP65_STX: if (E->AM == AM65_ZP) { switch (GetKnownReg (E->Chg & REG_ZP, 0)) { From 4ea2bfef0a80b253d9af81677a524fd1ab1a8670 Mon Sep 17 00:00:00 2001 From: greg-king5 <greg.king5@verizon.net> Date: Thu, 26 Mar 2020 22:54:58 -0400 Subject: [PATCH 0086/2710] Aligned comment. --- src/cc65/opcodes.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/opcodes.h b/src/cc65/opcodes.h index 8267d9550..bdb0c28a2 100644 --- a/src/cc65/opcodes.h +++ b/src/cc65/opcodes.h @@ -114,7 +114,7 @@ typedef enum { OP65_SED, OP65_SEI, OP65_STA, - OP65_STP, /* 65c02, 65816 stop */ + OP65_STP, /* 65c02, 65816 stop */ OP65_STX, OP65_STY, OP65_STZ, From 8b5a2f135cdbbafb829c1a3f4fd1518a2042eb56 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 27 Mar 2020 00:59:15 -0400 Subject: [PATCH 0087/2710] Added missing <tag> and <itemize> Linuxdoc tags to some ctype.h function descriptions. --- doc/funcref.sgml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 94e850092..a954c6581 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -4294,7 +4294,8 @@ fastcall function, so it may only be used in presence of a prototype. <tag/Header/<tt/<ref id="ctype.h" name="ctype.h">/ <tag/Declaration/<tt/int __fastcall__ isascii (int c);/ <tag/Description/The function returns a non zero value if the given argument -is in the range 0..127 (the range of valid ASCII characters) and zero if not. +is in the range 0..127 (the range of valid ASCII characters), and zero if not. +<tag/Notes/<itemize> <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> @@ -4392,6 +4393,7 @@ fastcall function, so it may only be used in presence of a prototype. <tag/Declaration/<tt/int __fastcall__ isdigit (int c);/ <tag/Description/The function returns a non zero value if the given argument is a digit. The return value is zero if the character is anything else. +<tag/Notes/<itemize> <item>When compiling without <tt/-Os/, the function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> From c15f4975d0a6d31a03f4c23ce5655f9615224997 Mon Sep 17 00:00:00 2001 From: Dirk Jagdmann <doj@cubic.org> Date: Sun, 29 Mar 2020 13:09:57 -0700 Subject: [PATCH 0088/2710] fix the clean: target to remove any disk images. --- samples/Makefile | 12 ++++++------ samples/README | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index 69efbe43b..adfe870e4 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -92,14 +92,14 @@ ifneq ($(filter disk samples.%,$(MAKECMDGOALS)),) # For this one, see https://www.horus.com/~hias/atari/ DIR2ATR ?= dir2atr - - DISK_c64 = samples.d64 - DISK_apple2 = samples.dsk - DISK_apple2enh = samples.dsk - DISK_atari = samples.atr - DISK_atarixl = samples.atr endif +DISK_c64 = samples.d64 +DISK_apple2 = samples.dsk +DISK_apple2enh = samples.dsk +DISK_atari = samples.atr +DISK_atarixl = samples.atr + # -------------------------------------------------------------------------- # System-dependent settings # For convenience, these groups and lines are sorted alphabetically, first diff --git a/samples/README b/samples/README index 7ace7da3f..73d048fca 100644 --- a/samples/README +++ b/samples/README @@ -16,6 +16,7 @@ Please note: at the top of the makefile, specify the system with SYS=<target> on the make command line, or set a SYS environment variable. + * Use "make disk" to build a disk image with all sample programs. List of supplied sample programs: From 4cc95a2c6ce814a3882121b05db88d95b89822aa Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 2 Apr 2020 09:45:11 +0200 Subject: [PATCH 0089/2710] Matched comment to the one in the C header file. --- libsrc/apple2/dosdetect.s | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libsrc/apple2/dosdetect.s b/libsrc/apple2/dosdetect.s index 46fbb5484..44e46b2b6 100644 --- a/libsrc/apple2/dosdetect.s +++ b/libsrc/apple2/dosdetect.s @@ -14,10 +14,11 @@ ; ProDOS 8 1.6 - $16 ; ProDOS 8 1.7 - $17 ; ProDOS 8 1.8 - $18 -; ProDOS 8 1.9 - $18 +; ProDOS 8 1.9 - $18 (!) ; ProDOS 8 2.0.1 - $21 ; ProDOS 8 2.0.2 - $22 ; ProDOS 8 2.0.3 - $23 +; ProDOS 8 2.4.x - $24 ; .constructor initdostype, 25 From 65dd931d22b7196a0b6a4de8d6d441e15acfdab1 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 2 Apr 2020 10:03:01 +0200 Subject: [PATCH 0090/2710] Some style adjustments. --- libsrc/atari/ostype.s | 4 ++-- libsrc/common/atoi.s | 8 +++----- libsrc/common/ctype_preprocessor.s | 10 +++++----- libsrc/common/isalnum.s | 2 +- libsrc/common/isalpha.s | 2 +- libsrc/common/isblank.s | 4 ++-- libsrc/common/iscntrl.s | 2 +- libsrc/common/isdigit.s | 4 ++-- libsrc/common/isgraph.s | 3 +-- libsrc/common/islower.s | 2 +- libsrc/common/isprint.s | 2 +- libsrc/common/ispunct.s | 2 +- libsrc/common/isspace.s | 4 ++-- libsrc/common/isupper.s | 2 +- libsrc/common/isxdigit.s | 2 +- libsrc/common/strlower.s | 9 +++------ libsrc/common/strnicmp.s | 20 ++++++++++---------- libsrc/common/strupper.s | 7 ++----- libsrc/lynx/crt0.s | 2 +- 19 files changed, 41 insertions(+), 50 deletions(-) diff --git a/libsrc/atari/ostype.s b/libsrc/atari/ostype.s index 7248582a6..876e8749d 100644 --- a/libsrc/atari/ostype.s +++ b/libsrc/atari/ostype.s @@ -93,7 +93,7 @@ _get_ostype: asl a asl a and #%00111000 - ora #%11 + ora #%00000011 _fin: ldx #0 disable_rom_save_a rts @@ -117,7 +117,7 @@ _1200_11: lda #%00010000 _1200_fin: - ora #%010 + ora #%00000010 bne _fin ; 400/800 ROM diff --git a/libsrc/common/atoi.s b/libsrc/common/atoi.s index b63fcb206..10f917f86 100644 --- a/libsrc/common/atoi.s +++ b/libsrc/common/atoi.s @@ -15,7 +15,7 @@ ; _atoi: -_atol: sta ptr1 ; Store s +_atol: sta ptr1 ; store s stx ptr1+1 ldy #0 sty ptr2 @@ -71,7 +71,7 @@ L6: lda (ptr1),y ; get next char lda ptr2+1 pha lda ptr2 - pha ; Save value + pha ; save value jsr mul2 ; * 4 jsr mul2 ; * 8 @@ -118,7 +118,7 @@ L8: lda ptr2 ; Negate the value if necessary, otherwise we're done ldy tmp1 ; sign - beq L9 ; Branch if positive + beq L9 ; branch if positive ; Negate the 32 bit value in ptr2/sreg @@ -133,5 +133,3 @@ mul2: asl ptr2 rol sreg rol sreg+1 ; * 2 L9: rts - - diff --git a/libsrc/common/ctype_preprocessor.s b/libsrc/common/ctype_preprocessor.s index efa001e61..79d93860f 100644 --- a/libsrc/common/ctype_preprocessor.s +++ b/libsrc/common/ctype_preprocessor.s @@ -29,7 +29,7 @@ ctype_preprocessor: ctype_preprocessor_no_check: lsr a tax - lda __ctypeIdx, x + lda __ctypeIdx,x bcc @lowerNibble @upperNibble: lsr a @@ -38,13 +38,13 @@ ctype_preprocessor_no_check: lsr a clc ; remove out of bounds flag @lowerNibble: - and #%1111 + and #%00001111 tax - lda __ctype, x - ldx #0 + lda __ctype,x + ldx #$00 rts SC: sec - lda #0 + lda #$00 tax rts diff --git a/libsrc/common/isalnum.s b/libsrc/common/isalnum.s index 141949c0f..2a05e32ee 100644 --- a/libsrc/common/isalnum.s +++ b/libsrc/common/isalnum.s @@ -15,7 +15,7 @@ .import ctype_preprocessor _isalnum: - jsr ctype_preprocessor ; (clears always x) + jsr ctype_preprocessor ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_ALNUM ; mask character/digit bits @L1: rts diff --git a/libsrc/common/isalpha.s b/libsrc/common/isalpha.s index 95e799161..7a1f79d20 100644 --- a/libsrc/common/isalpha.s +++ b/libsrc/common/isalpha.s @@ -15,7 +15,7 @@ .import ctype_preprocessor _isalpha: - jsr ctype_preprocessor ; (clears always x) + jsr ctype_preprocessor ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_ALPHA ; mask character bits @L1: rts diff --git a/libsrc/common/isblank.s b/libsrc/common/isblank.s index 3d0a02f3d..cc5b9e5ab 100644 --- a/libsrc/common/isblank.s +++ b/libsrc/common/isblank.s @@ -17,7 +17,7 @@ .import ctype_preprocessor _isblank: - jsr ctype_preprocessor ; (clears always x) + jsr ctype_preprocessor ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_SPACE_TAB ; mask blank bit - @L1: rts +@L1: rts diff --git a/libsrc/common/iscntrl.s b/libsrc/common/iscntrl.s index f2b95042d..65e2111be 100644 --- a/libsrc/common/iscntrl.s +++ b/libsrc/common/iscntrl.s @@ -15,7 +15,7 @@ .import ctype_preprocessor _iscntrl: - jsr ctype_preprocessor ; (clears always x) + jsr ctype_preprocessor ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_CTRL ; mask control character bit @L1: rts diff --git a/libsrc/common/isdigit.s b/libsrc/common/isdigit.s index 36acd73b7..76b2d1b27 100644 --- a/libsrc/common/isdigit.s +++ b/libsrc/common/isdigit.s @@ -15,7 +15,7 @@ .import ctype_preprocessor _isdigit: - jsr ctype_preprocessor ; (clears always x) + jsr ctype_preprocessor ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_DIGIT ; mask digit bit - @L1: rts +@L1: rts diff --git a/libsrc/common/isgraph.s b/libsrc/common/isgraph.s index 4e317db57..6dd91ed35 100644 --- a/libsrc/common/isgraph.s +++ b/libsrc/common/isgraph.s @@ -15,11 +15,10 @@ .import ctype_preprocessor _isgraph: - jsr ctype_preprocessor ; (clears always x) + jsr ctype_preprocessor ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_CTRL_SPACE ; mask character bits cmp #1 ; if false, then set "borrow" flag lda #0 sbc #0 ; invert logic (return NOT control and NOT space) @L1: rts - diff --git a/libsrc/common/islower.s b/libsrc/common/islower.s index 608d0ccf4..a11ee129c 100644 --- a/libsrc/common/islower.s +++ b/libsrc/common/islower.s @@ -15,7 +15,7 @@ .import ctype_preprocessor _islower: - jsr ctype_preprocessor ; (clears always x) + jsr ctype_preprocessor ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_LOWER ; mask lower char bit @L1: rts diff --git a/libsrc/common/isprint.s b/libsrc/common/isprint.s index 0d135f24f..e1d63bc6b 100644 --- a/libsrc/common/isprint.s +++ b/libsrc/common/isprint.s @@ -15,7 +15,7 @@ .import ctype_preprocessor _isprint: - jsr ctype_preprocessor ; (clears always x) + jsr ctype_preprocessor ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) eor #CT_CTRL ; NOT a control char and #CT_CTRL ; mask control char bit diff --git a/libsrc/common/ispunct.s b/libsrc/common/ispunct.s index a532399fe..ac4ab7f1d 100644 --- a/libsrc/common/ispunct.s +++ b/libsrc/common/ispunct.s @@ -15,7 +15,7 @@ .import ctype_preprocessor _ispunct: - jsr ctype_preprocessor ; (clears always x) + jsr ctype_preprocessor ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_NOT_PUNCT ; mask relevant bits cmp #1 ; if false, then set "borrow" flag diff --git a/libsrc/common/isspace.s b/libsrc/common/isspace.s index 1f70786ce..c37023449 100644 --- a/libsrc/common/isspace.s +++ b/libsrc/common/isspace.s @@ -15,7 +15,7 @@ .import ctype_preprocessor _isspace: - jsr ctype_preprocessor ; (clears always x) + jsr ctype_preprocessor ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #(CT_SPACE | CT_OTHER_WS) ; mask space bits - @L1: rts +@L1: rts diff --git a/libsrc/common/isupper.s b/libsrc/common/isupper.s index 0dd2a6ead..175fb872b 100644 --- a/libsrc/common/isupper.s +++ b/libsrc/common/isupper.s @@ -15,7 +15,7 @@ .import ctype_preprocessor _isupper: - jsr ctype_preprocessor ; (clears always x) + jsr ctype_preprocessor ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_UPPER ; mask upper char bit @L1: rts diff --git a/libsrc/common/isxdigit.s b/libsrc/common/isxdigit.s index 3f36ede01..e8a12a10e 100644 --- a/libsrc/common/isxdigit.s +++ b/libsrc/common/isxdigit.s @@ -15,7 +15,7 @@ .import ctype_preprocessor _isxdigit: - jsr ctype_preprocessor ; (clears always x) + jsr ctype_preprocessor ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_XDIGIT ; mask xdigit bit @L1: rts diff --git a/libsrc/common/strlower.s b/libsrc/common/strlower.s index d4e481382..479d852e8 100644 --- a/libsrc/common/strlower.s +++ b/libsrc/common/strlower.s @@ -16,7 +16,7 @@ _strlower: _strlwr: - sta ptr1 ; Save s (working copy) + sta ptr1 ; save s (working copy) stx ptr1+1 sta ptr2 stx ptr2+1 ; save function result @@ -25,10 +25,10 @@ _strlwr: loop: lda (ptr1),y ; get character beq L9 ; jump if done ; get character classification - jsr ctype_preprocessor_no_check + jsr ctype_preprocessor_no_check and #CT_UPPER ; upper case char? beq L1 ; jump if no - lda (ptr1),y ; fetch character again + lda (ptr1),y ; fetch character again adc #<('a'-'A') ; make lower case char (ctype_preprocessor_no_check ensures carry clear) sta (ptr1),y ; store back L1: iny ; next char @@ -41,6 +41,3 @@ L1: iny ; next char L9: lda ptr2 ldx ptr2+1 rts - - - diff --git a/libsrc/common/strnicmp.s b/libsrc/common/strnicmp.s index 54aef2bb8..c4cc272d9 100644 --- a/libsrc/common/strnicmp.s +++ b/libsrc/common/strnicmp.s @@ -41,7 +41,7 @@ _strncasecmp: ; Start of compare loop. Check the counter. Loop: inc ptr3 - beq IncHi ; Increment high byte + beq IncHi ; increment high byte ; Compare a byte from the strings @@ -58,18 +58,18 @@ Comp: lda (ptr2),y L1: lda (ptr1),y ; get character from first string sta tmp1 ; remember original char ; get character classification - jsr ctype_preprocessor_no_check + jsr ctype_preprocessor_no_check and #CT_LOWER ; lower case char? beq L2 ; jump if no lda #<('A'-'a') ; make upper case char adc tmp1 ; ctype_preprocessor_no_check ensures carry clear! - sta tmp1 ; remember upper case equivalent + sta tmp1 ; remember upper case equivalent L2: ldx tmp1 cpx tmp2 ; compare characters - bne NotEqual ; Jump if strings different - txa ; End of strings? - beq Equal1 ; Jump if EOS reached, a/x == 0 + bne NotEqual ; jump if strings different + txa ; end of strings? + beq Equal1 ; jump if EOS reached, a/x == 0 ; Increment the pointers @@ -77,12 +77,12 @@ L2: ldx tmp1 bne Loop inc ptr1+1 inc ptr2+1 - bne Loop ; Branch always + bne Loop ; branch always ; Increment hi byte IncHi: inc ptr3+1 - bne Comp ; Jump if counter not zero + bne Comp ; jump if counter not zero ; Exit code if strings are equal. a/x not set @@ -94,8 +94,8 @@ Equal1: rts NotEqual: bcs L3 - ldx #$FF ; Make result negative + ldx #$FF ; make result negative rts -L3: ldx #$01 ; Make result positive +L3: ldx #$01 ; make result positive rts diff --git a/libsrc/common/strupper.s b/libsrc/common/strupper.s index dd6c1c25f..e2160d4da 100644 --- a/libsrc/common/strupper.s +++ b/libsrc/common/strupper.s @@ -16,7 +16,7 @@ _strupper: _strupr: - sta ptr1 ; Save s (working copy) + sta ptr1 ; save s (working copy) stx ptr1+1 sta ptr2 stx ptr2+1 ; save function result @@ -24,7 +24,7 @@ _strupr: loop: lda (ptr1),y ; get character beq L9 ; jump if done - jsr ctype_preprocessor_no_check + jsr ctype_preprocessor_no_check and #CT_LOWER ; lower case char? beq L1 ; jump if no lda (ptr1),y ; fetch character again @@ -40,6 +40,3 @@ L1: iny ; next char L9: lda ptr2 ldx ptr2+1 rts - - - diff --git a/libsrc/lynx/crt0.s b/libsrc/lynx/crt0.s index da2162b47..238a2c99d 100644 --- a/libsrc/lynx/crt0.s +++ b/libsrc/lynx/crt0.s @@ -68,7 +68,7 @@ MikeyInitData: .byte $9e,$18,$68,$1f,$00,$00,$00,$00,$00,$ff,$1a,$1b,$04,$0d,$2 ; Disable the TX/RX IRQ; set to 8E1. - lda #%11101 + lda #%00011101 sta SERCTL ; Clear all pending interrupts. From df015f47662d3b2f44a383bd5dc520216c9285f7 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 2 Apr 2020 11:15:53 +0200 Subject: [PATCH 0091/2710] Adjusted tolower() and toupper() to https://github.com/cc65/cc65/pull/997 For some reason or another both the author of the PR in question and its reviewers didn't notice that the two functions in question were totally overlooked. --- libsrc/common/tolower.s | 32 +++++++++++++++++++------------- libsrc/common/toupper.s | 32 +++++++++++++++++++------------- 2 files changed, 38 insertions(+), 26 deletions(-) diff --git a/libsrc/common/tolower.s b/libsrc/common/tolower.s index 2c624cb74..e672f077e 100644 --- a/libsrc/common/tolower.s +++ b/libsrc/common/tolower.s @@ -1,21 +1,27 @@ +; tolower.s ; -; Ullrich von Bassewitz, 02.06.1998 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://cc65.github.io +; +; See "LICENSE" file for legal information. ; ; int tolower (int c); ; .export _tolower - .import __ctype + .include "ctype.inc" + .import ctype_preprocessor _tolower: - cpx #$00 ; Outside valid range? - bne L9 ; If so, return the argument unchanged - tay ; Get C into Y - lda __ctype,y ; Get character classification - lsr a - lsr a ; Get bit 1 (upper case char) into carry - tya ; Get char back into A - bcc L9 ; Jump if no upper case char - sbc #<('A'-'a') ; Make lower case char (carry already set) -L9: rts - + tay ; save char + jsr ctype_preprocessor ; (always clears X) + bcc @L2 ; out of range? +@L1: tya ; if so, return the argument unchanged + rts +@L2: and #CT_UPPER ; upper case char? + beq @L1 ; jump if no + tya ; restore char + adc #<('a'-'A') ; make lower case char (ctype_preprocessor ensures carry clear) + rts diff --git a/libsrc/common/toupper.s b/libsrc/common/toupper.s index da1ee0427..5b3a4c22d 100644 --- a/libsrc/common/toupper.s +++ b/libsrc/common/toupper.s @@ -1,21 +1,27 @@ +; toupper.s ; -; Ullrich von Bassewitz, 02.06.1998 +; This file is part of +; cc65 - a freeware C compiler for 6502 based systems +; +; https://cc65.github.io +; +; See "LICENSE" file for legal information. ; ; int toupper (int c); ; .export _toupper - .import __ctype + .include "ctype.inc" + .import ctype_preprocessor _toupper: - cpx #$00 ; Outside valid range? - bne L9 ; If so, return the argument unchanged - tay ; Get c into Y - lda __ctype,y ; Get character classification - lsr a ; Get bit 0 (lower char) into carry - tya ; Get C back into A - bcc L9 ; Jump if not lower char - clc - adc #<('A'-'a') ; make upper case char -L9: rts ; CC are set - + tay ; save char + jsr ctype_preprocessor ; (always clears X) + bcc @L2 ; out of range? +@L1: tya ; if so, return the argument unchanged + rts +@L2: and #CT_LOWER ; lower case char? + beq @L1 ; jump if no + tya ; restore char + adc #<('A'-'a') ; make upper case char (ctype_preprocessor ensures carry clear) + rts From 411fe87f64f57dd3b2469214fdbca01a121b4569 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 2 Apr 2020 22:14:22 +0200 Subject: [PATCH 0092/2710] Fixed tolower() and toupper() to save high byte. --- libsrc/common/tolower.s | 21 +++++++++++---------- libsrc/common/toupper.s | 21 +++++++++++---------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/libsrc/common/tolower.s b/libsrc/common/tolower.s index e672f077e..bebac3c57 100644 --- a/libsrc/common/tolower.s +++ b/libsrc/common/tolower.s @@ -12,16 +12,17 @@ .export _tolower .include "ctype.inc" - .import ctype_preprocessor + .import ctype_preprocessor_no_check _tolower: - tay ; save char - jsr ctype_preprocessor ; (always clears X) - bcc @L2 ; out of range? -@L1: tya ; if so, return the argument unchanged - rts -@L2: and #CT_UPPER ; upper case char? - beq @L1 ; jump if no - tya ; restore char - adc #<('a'-'A') ; make lower case char (ctype_preprocessor ensures carry clear) + cpx #$00 ; out of range? + bne @L2 ; if so, return the argument unchanged + tay ; save char + jsr ctype_preprocessor_no_check + and #CT_UPPER ; upper case char? + beq @L1 ; jump if no + tya ; restore char + adc #<('a'-'A') ; make lower case char (ctype_preprocessor_no_check ensures carry clear) rts +@L1: tya ; restore char +@L2: rts diff --git a/libsrc/common/toupper.s b/libsrc/common/toupper.s index 5b3a4c22d..ed3dd9b07 100644 --- a/libsrc/common/toupper.s +++ b/libsrc/common/toupper.s @@ -12,16 +12,17 @@ .export _toupper .include "ctype.inc" - .import ctype_preprocessor + .import ctype_preprocessor_no_check _toupper: - tay ; save char - jsr ctype_preprocessor ; (always clears X) - bcc @L2 ; out of range? -@L1: tya ; if so, return the argument unchanged - rts -@L2: and #CT_LOWER ; lower case char? - beq @L1 ; jump if no - tya ; restore char - adc #<('A'-'a') ; make upper case char (ctype_preprocessor ensures carry clear) + cpx #$00 ; out of range? + bne @L2 ; if so, return the argument unchanged + tay ; save char + jsr ctype_preprocessor_no_check + and #CT_LOWER ; lower case char? + beq @L1 ; jump if no + tya ; restore char + adc #<('A'-'a') ; make upper case char (ctype_preprocessor_no_check ensures carry clear) rts +@L1: tya ; restore char +@L2: rts From 0981c020b2e36a34fd3dfb29478c99d5b3142f7b Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 2 Apr 2020 22:58:16 +0200 Subject: [PATCH 0093/2710] Shortened names and adjusted style. --- asminc/ctype.inc | 18 +++++++++--------- asminc/ctype_common.inc | 4 ++-- libsrc/atari/ctype.s | 4 ++-- libsrc/atmos/ctype.s | 4 ++-- libsrc/cbm/ctype.s | 4 ++-- libsrc/common/atoi.s | 6 ++---- libsrc/common/ctype.s | 4 ++-- .../{ctype_preprocessor.s => ctypemask.s} | 16 ++++++++-------- libsrc/common/isalnum.s | 4 ++-- libsrc/common/isalpha.s | 4 ++-- libsrc/common/isblank.s | 4 ++-- libsrc/common/iscntrl.s | 4 ++-- libsrc/common/isdigit.s | 4 ++-- libsrc/common/isgraph.s | 4 ++-- libsrc/common/islower.s | 8 ++++---- libsrc/common/isprint.s | 10 +++++----- libsrc/common/ispunct.s | 12 ++++++------ libsrc/common/isspace.s | 8 ++++---- libsrc/common/isupper.s | 8 ++++---- libsrc/common/isxdigit.s | 8 ++++---- libsrc/common/stricmp.s | 12 +++++------- libsrc/common/strlower.s | 7 +++---- libsrc/common/strnicmp.s | 12 +++++------- libsrc/common/strupper.s | 6 +++--- libsrc/common/tolower.s | 6 +++--- libsrc/common/toupper.s | 6 +++--- libsrc/geos-common/system/ctype.s | 4 ++-- 27 files changed, 92 insertions(+), 99 deletions(-) rename libsrc/common/{ctype_preprocessor.s => ctypemask.s} (80%) diff --git a/asminc/ctype.inc b/asminc/ctype.inc index 18a290fbe..4d9ae7986 100644 --- a/asminc/ctype.inc +++ b/asminc/ctype.inc @@ -14,15 +14,15 @@ ; Define bitmapped constants for the table entries -CT_NONE = $00 ; Nothing special -CT_LOWER = $01 ; 0 - Lower case char -CT_UPPER = $02 ; 1 - Upper case char -CT_DIGIT = $04 ; 2 - Numeric digit -CT_XDIGIT = $08 ; 3 - Hex digit (both, lower and upper) -CT_CTRL = $10 ; 4 - Control character -CT_SPACE = $20 ; 5 - The space character itself -CT_OTHER_WS = $40 ; 6 - Other whitespace ('\f', '\n', '\r', '\t' and '\v') -CT_SPACE_TAB = $80 ; 7 - Space or tab character +CT_NONE = %00000000 ; Nothing special +CT_LOWER = %00000001 ; 0 - Lower case char +CT_UPPER = %00000010 ; 1 - Upper case char +CT_DIGIT = %00000100 ; 2 - Numeric digit +CT_XDIGIT = %00001000 ; 3 - Hex digit (both, lower and upper) +CT_CTRL = %00010000 ; 4 - Control character +CT_SPACE = %00100000 ; 5 - The space character itself +CT_OTHER_WS = %01000000 ; 6 - Other whitespace ('\f', '\n', '\r', '\t' and '\v') +CT_SPACE_TAB = %10000000 ; 7 - Space or tab character ; Combined stuff CT_ALNUM = (CT_LOWER | CT_UPPER | CT_DIGIT) diff --git a/asminc/ctype_common.inc b/asminc/ctype_common.inc index 04aaa8f95..044c2834f 100644 --- a/asminc/ctype_common.inc +++ b/asminc/ctype_common.inc @@ -11,13 +11,13 @@ ; .include "ctypetable.inc" - .export __ctypeIdx + .export __ctypeidx ; The tables are readonly, put them into the rodata segment .rodata -__ctypeIdx: +__ctypeidx: ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 0/00 ___ctrl_@___, 1/01 ___ctrl_A___ ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 2/02 ___ctrl_B___, 3/03 ___ctrl_C___ ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 4/04 ___ctrl_D___, 5/05 ___ctrl_E___ diff --git a/libsrc/atari/ctype.s b/libsrc/atari/ctype.s index 7903dc2a3..2f219f8c3 100644 --- a/libsrc/atari/ctype.s +++ b/libsrc/atari/ctype.s @@ -11,13 +11,13 @@ ; .include "ctypetable.inc" - .export __ctypeIdx + .export __ctypeidx ; The tables are readonly, put them into the rodata segment .rodata -__ctypeIdx: +__ctypeidx: ct_mix CT_NONE_IDX, CT_NONE_IDX ; 0/00 ___heart____, 1/01 ___l_tee____ ct_mix CT_NONE_IDX, CT_NONE_IDX ; 2/02 ___ctrl_B___, 3/03 ___ctrl_C___ ct_mix CT_NONE_IDX, CT_NONE_IDX ; 4/04 ___r_tee____, 5/05 ___ctrl_E___ diff --git a/libsrc/atmos/ctype.s b/libsrc/atmos/ctype.s index 7ca01b32a..90a3baa6e 100644 --- a/libsrc/atmos/ctype.s +++ b/libsrc/atmos/ctype.s @@ -11,13 +11,13 @@ ; .include "ctypetable.inc" - .export __ctypeIdx + .export __ctypeidx ; The tables are readonly, put them into the rodata segment .rodata -__ctypeIdx: +__ctypeidx: ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 0/00 ___ctrl_@___, 1/01 ___ctrl_A___ ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 2/02 ___ctrl_B___, 3/03 ___ctrl_C___ ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 4/04 ___ctrl_D___, 5/05 ___ctrl_E___ diff --git a/libsrc/cbm/ctype.s b/libsrc/cbm/ctype.s index 77a37431d..7388f68b8 100644 --- a/libsrc/cbm/ctype.s +++ b/libsrc/cbm/ctype.s @@ -12,13 +12,13 @@ ; This table is taken from Craig S. Bruce's technical docs. for the ACE OS. .include "ctypetable.inc" - .export __ctypeIdx + .export __ctypeidx ; The tables are readonly, put them into the rodata segment .rodata -__ctypeIdx: +__ctypeidx: ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 0/00 ___rvs_@___, 1/01 ___rvs_a___ ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 2/02 ___rvs_b___, 3/03 ___rvs_c___ ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 4/04 ___rvs_d___, 5/05 ___rvs_e___ diff --git a/libsrc/common/atoi.s b/libsrc/common/atoi.s index 10f917f86..0236b77f2 100644 --- a/libsrc/common/atoi.s +++ b/libsrc/common/atoi.s @@ -8,7 +8,7 @@ .export _atoi, _atol .import negeax, __ctype .importzp sreg, ptr1, ptr2, tmp1 - .import ctype_preprocessor_no_check + .import ctypemaskdirect .include "ctype.inc" ; ; Conversion routine (32 bit) @@ -26,9 +26,7 @@ _atol: sta ptr1 ; store s ; Skip whitespace L1: lda (ptr1),y - ; get character classification - jsr ctype_preprocessor_no_check - + jsr ctypemaskdirect ; get character classification and #CT_SPACE_TAB ; tab or space? beq L2 ; jump if no iny diff --git a/libsrc/common/ctype.s b/libsrc/common/ctype.s index 15f115e7d..220ad79c1 100644 --- a/libsrc/common/ctype.s +++ b/libsrc/common/ctype.s @@ -11,13 +11,13 @@ ; .include "ctypetable.inc" - .export __ctypeIdx + .export __ctypeidx ; The tables are readonly, put them into the rodata segment .rodata -__ctypeIdx: +__ctypeidx: .repeat 2 ; 2 times for normal and inverted diff --git a/libsrc/common/ctype_preprocessor.s b/libsrc/common/ctypemask.s similarity index 80% rename from libsrc/common/ctype_preprocessor.s rename to libsrc/common/ctypemask.s index 79d93860f..b518a10c0 100644 --- a/libsrc/common/ctype_preprocessor.s +++ b/libsrc/common/ctypemask.s @@ -1,4 +1,4 @@ -; ctype_preprocessor.s +; ctypemask.s ; ; This file is part of ; cc65 - a freeware C compiler for 6502 based systems @@ -7,7 +7,7 @@ ; ; See "LICENSE" file for legal information. ; -; ctype_preprocessor(int c) +; ctypemask(int c) ; ; converts a character to test via the is*-functions to the matching ctype-masks ; If c is out of the 8-bit range, the function returns with carry set and accu cleared. @@ -18,18 +18,18 @@ ; while calling this function! ; - .export ctype_preprocessor - .export ctype_preprocessor_no_check + .export ctypemask + .export ctypemaskdirect .import __ctype - .import __ctypeIdx + .import __ctypeidx -ctype_preprocessor: +ctypemask: cpx #$00 ; char range ok? bne SC ; branch if not -ctype_preprocessor_no_check: +ctypemaskdirect: lsr a tax - lda __ctypeIdx,x + lda __ctypeidx,x bcc @lowerNibble @upperNibble: lsr a diff --git a/libsrc/common/isalnum.s b/libsrc/common/isalnum.s index 2a05e32ee..ec2c9de1f 100644 --- a/libsrc/common/isalnum.s +++ b/libsrc/common/isalnum.s @@ -12,10 +12,10 @@ .export _isalnum .include "ctype.inc" - .import ctype_preprocessor + .import ctypemask _isalnum: - jsr ctype_preprocessor ; (always clears X) + jsr ctypemask ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_ALNUM ; mask character/digit bits @L1: rts diff --git a/libsrc/common/isalpha.s b/libsrc/common/isalpha.s index 7a1f79d20..2d1f4b584 100644 --- a/libsrc/common/isalpha.s +++ b/libsrc/common/isalpha.s @@ -12,10 +12,10 @@ .export _isalpha .include "ctype.inc" - .import ctype_preprocessor + .import ctypemask _isalpha: - jsr ctype_preprocessor ; (always clears X) + jsr ctypemask ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_ALPHA ; mask character bits @L1: rts diff --git a/libsrc/common/isblank.s b/libsrc/common/isblank.s index cc5b9e5ab..a9788daac 100644 --- a/libsrc/common/isblank.s +++ b/libsrc/common/isblank.s @@ -14,10 +14,10 @@ .export _isblank .include "ctype.inc" - .import ctype_preprocessor + .import ctypemask _isblank: - jsr ctype_preprocessor ; (always clears X) + jsr ctypemask ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_SPACE_TAB ; mask blank bit @L1: rts diff --git a/libsrc/common/iscntrl.s b/libsrc/common/iscntrl.s index 65e2111be..7a4879017 100644 --- a/libsrc/common/iscntrl.s +++ b/libsrc/common/iscntrl.s @@ -12,10 +12,10 @@ .export _iscntrl .include "ctype.inc" - .import ctype_preprocessor + .import ctypemask _iscntrl: - jsr ctype_preprocessor ; (always clears X) + jsr ctypemask ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_CTRL ; mask control character bit @L1: rts diff --git a/libsrc/common/isdigit.s b/libsrc/common/isdigit.s index 76b2d1b27..ae3f8d12f 100644 --- a/libsrc/common/isdigit.s +++ b/libsrc/common/isdigit.s @@ -12,10 +12,10 @@ .export _isdigit .include "ctype.inc" - .import ctype_preprocessor + .import ctypemask _isdigit: - jsr ctype_preprocessor ; (always clears X) + jsr ctypemask ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_DIGIT ; mask digit bit @L1: rts diff --git a/libsrc/common/isgraph.s b/libsrc/common/isgraph.s index 6dd91ed35..8b97780b9 100644 --- a/libsrc/common/isgraph.s +++ b/libsrc/common/isgraph.s @@ -12,10 +12,10 @@ .export _isgraph .include "ctype.inc" - .import ctype_preprocessor + .import ctypemask _isgraph: - jsr ctype_preprocessor ; (always clears X) + jsr ctypemask ; (always clears X) bcs @L1 ; out of range? (everything already clear -> false) and #CT_CTRL_SPACE ; mask character bits cmp #1 ; if false, then set "borrow" flag diff --git a/libsrc/common/islower.s b/libsrc/common/islower.s index a11ee129c..b19c16825 100644 --- a/libsrc/common/islower.s +++ b/libsrc/common/islower.s @@ -12,12 +12,12 @@ .export _islower .include "ctype.inc" - .import ctype_preprocessor + .import ctypemask _islower: - jsr ctype_preprocessor ; (always clears X) - bcs @L1 ; out of range? (everything already clear -> false) - and #CT_LOWER ; mask lower char bit + jsr ctypemask ; (always clears X) + bcs @L1 ; out of range? (everything already clear -> false) + and #CT_LOWER ; mask lower char bit @L1: rts diff --git a/libsrc/common/isprint.s b/libsrc/common/isprint.s index e1d63bc6b..c62bd784f 100644 --- a/libsrc/common/isprint.s +++ b/libsrc/common/isprint.s @@ -12,11 +12,11 @@ .export _isprint .include "ctype.inc" - .import ctype_preprocessor + .import ctypemask _isprint: - jsr ctype_preprocessor ; (always clears X) - bcs @L1 ; out of range? (everything already clear -> false) - eor #CT_CTRL ; NOT a control char - and #CT_CTRL ; mask control char bit + jsr ctypemask ; (always clears X) + bcs @L1 ; out of range? (everything already clear -> false) + eor #CT_CTRL ; NOT a control char + and #CT_CTRL ; mask control char bit @L1: rts diff --git a/libsrc/common/ispunct.s b/libsrc/common/ispunct.s index ac4ab7f1d..df47322fb 100644 --- a/libsrc/common/ispunct.s +++ b/libsrc/common/ispunct.s @@ -12,13 +12,13 @@ .export _ispunct .include "ctype.inc" - .import ctype_preprocessor + .import ctypemask _ispunct: - jsr ctype_preprocessor ; (always clears X) - bcs @L1 ; out of range? (everything already clear -> false) - and #CT_NOT_PUNCT ; mask relevant bits - cmp #1 ; if false, then set "borrow" flag + jsr ctypemask ; (always clears X) + bcs @L1 ; out of range? (everything already clear -> false) + and #CT_NOT_PUNCT ; mask relevant bits + cmp #1 ; if false, then set "borrow" flag lda #0 - sbc #0 ; invert logic (return NOT (space | control | digit | alpha)) + sbc #0 ; invert logic (return NOT (space | control | digit | alpha)) @L1: rts diff --git a/libsrc/common/isspace.s b/libsrc/common/isspace.s index c37023449..b234febfa 100644 --- a/libsrc/common/isspace.s +++ b/libsrc/common/isspace.s @@ -12,10 +12,10 @@ .export _isspace .include "ctype.inc" - .import ctype_preprocessor + .import ctypemask _isspace: - jsr ctype_preprocessor ; (always clears X) - bcs @L1 ; out of range? (everything already clear -> false) - and #(CT_SPACE | CT_OTHER_WS) ; mask space bits + jsr ctypemask ; (always clears X) + bcs @L1 ; out of range? (everything already clear -> false) + and #(CT_SPACE | CT_OTHER_WS) ; mask space bits @L1: rts diff --git a/libsrc/common/isupper.s b/libsrc/common/isupper.s index 175fb872b..45f48d871 100644 --- a/libsrc/common/isupper.s +++ b/libsrc/common/isupper.s @@ -12,10 +12,10 @@ .export _isupper .include "ctype.inc" - .import ctype_preprocessor + .import ctypemask _isupper: - jsr ctype_preprocessor ; (always clears X) - bcs @L1 ; out of range? (everything already clear -> false) - and #CT_UPPER ; mask upper char bit + jsr ctypemask ; (always clears X) + bcs @L1 ; out of range? (everything already clear -> false) + and #CT_UPPER ; mask upper char bit @L1: rts diff --git a/libsrc/common/isxdigit.s b/libsrc/common/isxdigit.s index e8a12a10e..6d59e2ac8 100644 --- a/libsrc/common/isxdigit.s +++ b/libsrc/common/isxdigit.s @@ -12,10 +12,10 @@ .export _isxdigit .include "ctype.inc" - .import ctype_preprocessor + .import ctypemask _isxdigit: - jsr ctype_preprocessor ; (always clears X) - bcs @L1 ; out of range? (everything already clear -> false) - and #CT_XDIGIT ; mask xdigit bit + jsr ctypemask ; (always clears X) + bcs @L1 ; out of range? (everything already clear -> false) + and #CT_XDIGIT ; mask xdigit bit @L1: rts diff --git a/libsrc/common/stricmp.s b/libsrc/common/stricmp.s index 3a03258bd..494350b06 100644 --- a/libsrc/common/stricmp.s +++ b/libsrc/common/stricmp.s @@ -14,7 +14,7 @@ .export _stricmp, _strcasecmp .import popptr1 .importzp ptr1, ptr2, tmp1, tmp2 - .import ctype_preprocessor_no_check + .import ctypemaskdirect .include "ctype.inc" _stricmp: @@ -26,22 +26,20 @@ _strcasecmp: loop: lda (ptr2),y ; get char from second string sta tmp2 ; and save it - ; get character classification - jsr ctype_preprocessor_no_check + jsr ctypemaskdirect ; get character classification and #CT_LOWER ; lower case char? beq L1 ; jump if no lda #<('A'-'a') ; make upper case char - adc tmp2 ; ctype_preprocessor_no_check ensures carry clear! + adc tmp2 ; ctypemaskdirect ensures carry clear! sta tmp2 ; remember upper case equivalent L1: lda (ptr1),y ; get character from first string sta tmp1 - ; get character classification - jsr ctype_preprocessor_no_check + jsr ctypemaskdirect ; get character classification and #CT_LOWER ; lower case char? beq L2 ; jump if no lda #<('A'-'a') ; make upper case char - adc tmp1 ; ctype_preprocessor_no_check ensures carry clear! + adc tmp1 ; ctypemaskdirect ensures carry clear! sta tmp1 ; remember upper case equivalent L2: ldx tmp1 diff --git a/libsrc/common/strlower.s b/libsrc/common/strlower.s index 479d852e8..b7c1a289b 100644 --- a/libsrc/common/strlower.s +++ b/libsrc/common/strlower.s @@ -11,7 +11,7 @@ .export _strlower, _strlwr .import popax .importzp ptr1, ptr2 - .import ctype_preprocessor_no_check + .import ctypemaskdirect .include "ctype.inc" _strlower: @@ -24,12 +24,11 @@ _strlwr: loop: lda (ptr1),y ; get character beq L9 ; jump if done - ; get character classification - jsr ctype_preprocessor_no_check + jsr ctypemaskdirect ; get character classification and #CT_UPPER ; upper case char? beq L1 ; jump if no lda (ptr1),y ; fetch character again - adc #<('a'-'A') ; make lower case char (ctype_preprocessor_no_check ensures carry clear) + adc #<('a'-'A') ; make lower case char (ctypemaskdirect ensures carry clear) sta (ptr1),y ; store back L1: iny ; next char bne loop diff --git a/libsrc/common/strnicmp.s b/libsrc/common/strnicmp.s index c4cc272d9..43d6d0d50 100644 --- a/libsrc/common/strnicmp.s +++ b/libsrc/common/strnicmp.s @@ -9,7 +9,7 @@ .export _strnicmp, _strncasecmp .import popax, popptr1 .importzp ptr1, ptr2, ptr3, tmp1, tmp2 - .import ctype_preprocessor_no_check + .import ctypemaskdirect .include "ctype.inc" _strnicmp: @@ -47,22 +47,20 @@ Loop: inc ptr3 Comp: lda (ptr2),y sta tmp2 ; remember original char - ; get character classification - jsr ctype_preprocessor_no_check + jsr ctypemaskdirect ; get character classification and #CT_LOWER ; lower case char? beq L1 ; jump if no lda #<('A'-'a') ; make upper case char - adc tmp2 ; ctype_preprocessor_no_check ensures carry clear! + adc tmp2 ; ctypemaskdirect ensures carry clear! sta tmp2 ; remember upper case equivalent L1: lda (ptr1),y ; get character from first string sta tmp1 ; remember original char - ; get character classification - jsr ctype_preprocessor_no_check + jsr ctypemaskdirect ; get character classification and #CT_LOWER ; lower case char? beq L2 ; jump if no lda #<('A'-'a') ; make upper case char - adc tmp1 ; ctype_preprocessor_no_check ensures carry clear! + adc tmp1 ; ctypemaskdirect ensures carry clear! sta tmp1 ; remember upper case equivalent L2: ldx tmp1 diff --git a/libsrc/common/strupper.s b/libsrc/common/strupper.s index e2160d4da..3af0d8d98 100644 --- a/libsrc/common/strupper.s +++ b/libsrc/common/strupper.s @@ -11,7 +11,7 @@ .export _strupper, _strupr .import popax .importzp ptr1, ptr2 - .import ctype_preprocessor_no_check + .import ctypemaskdirect .include "ctype.inc" _strupper: @@ -24,11 +24,11 @@ _strupr: loop: lda (ptr1),y ; get character beq L9 ; jump if done - jsr ctype_preprocessor_no_check + jsr ctypemaskdirect ; get character classification and #CT_LOWER ; lower case char? beq L1 ; jump if no lda (ptr1),y ; fetch character again - adc #<('A'-'a') ; make upper case char (ctype_preprocessor_no_check ensures carry clear) + adc #<('A'-'a') ; make upper case char (ctypemaskdirect ensures carry clear) sta (ptr1),y ; store back L1: iny ; next char bne loop diff --git a/libsrc/common/tolower.s b/libsrc/common/tolower.s index bebac3c57..828be1cb1 100644 --- a/libsrc/common/tolower.s +++ b/libsrc/common/tolower.s @@ -12,17 +12,17 @@ .export _tolower .include "ctype.inc" - .import ctype_preprocessor_no_check + .import ctypemaskdirect _tolower: cpx #$00 ; out of range? bne @L2 ; if so, return the argument unchanged tay ; save char - jsr ctype_preprocessor_no_check + jsr ctypemaskdirect ; get character classification and #CT_UPPER ; upper case char? beq @L1 ; jump if no tya ; restore char - adc #<('a'-'A') ; make lower case char (ctype_preprocessor_no_check ensures carry clear) + adc #<('a'-'A') ; make lower case char (ctypemaskdirect ensures carry clear) rts @L1: tya ; restore char @L2: rts diff --git a/libsrc/common/toupper.s b/libsrc/common/toupper.s index ed3dd9b07..d0465f64f 100644 --- a/libsrc/common/toupper.s +++ b/libsrc/common/toupper.s @@ -12,17 +12,17 @@ .export _toupper .include "ctype.inc" - .import ctype_preprocessor_no_check + .import ctypemaskdirect _toupper: cpx #$00 ; out of range? bne @L2 ; if so, return the argument unchanged tay ; save char - jsr ctype_preprocessor_no_check + jsr ctypemaskdirect ; get character classification and #CT_LOWER ; lower case char? beq @L1 ; jump if no tya ; restore char - adc #<('A'-'a') ; make upper case char (ctype_preprocessor_no_check ensures carry clear) + adc #<('A'-'a') ; make upper case char (ctypemaskdirect ensures carry clear) rts @L1: tya ; restore char @L2: rts diff --git a/libsrc/geos-common/system/ctype.s b/libsrc/geos-common/system/ctype.s index 013a1ba99..b34f68470 100644 --- a/libsrc/geos-common/system/ctype.s +++ b/libsrc/geos-common/system/ctype.s @@ -13,13 +13,13 @@ ; http://lyonlabs.org/commodore/onrequest/geos-manuals/The_Hitchhikers_Guide_to_GEOS.pdf .include "ctypetable.inc" - .export __ctypeIdx + .export __ctypeidx ; The tables are readonly, put them into the rodata segment .rodata -__ctypeIdx: +__ctypeidx: ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 0/00 ____NULL___, 1/01 ____N/A____ ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 2/02 ____N/A____, 3/03 ____N/A____ ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 4/04 ____N/A____, 5/05 ____N/A____ From 4a224878d8fb1f3dd408864e33edcee7f846449d Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Mon, 6 Apr 2020 16:20:52 +0200 Subject: [PATCH 0094/2710] Preserve the accu --- libsrc/nes/waitvsync.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/nes/waitvsync.s b/libsrc/nes/waitvsync.s index 4bdf9a9d0..9f811c0a9 100644 --- a/libsrc/nes/waitvsync.s +++ b/libsrc/nes/waitvsync.s @@ -11,7 +11,7 @@ .proc _waitvsync -wait: lda PPU_STATUS +wait: bit PPU_STATUS bpl wait rts From 31daa706b7290d97b4537feb5a4da87537684c25 Mon Sep 17 00:00:00 2001 From: itaych <itaych@gmail.com> Date: Thu, 16 Apr 2020 02:28:15 +0300 Subject: [PATCH 0095/2710] PMG_SIZE_QUAD is 3, not 2. From "Mapping the Atari": "Size of player. POKE with zero or two for normal size (eight color clocks wide), POKE with one to double a player's width (sixteen color clocks wide), and POKE with three for quadruple width (32 color clocks wide). Each player can have its own width set." --- include/_gtia.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/_gtia.h b/include/_gtia.h index cbdf7608e..eaf6bed3e 100644 --- a/include/_gtia.h +++ b/include/_gtia.h @@ -95,7 +95,7 @@ struct __gtia_write { #define PMG_SIZE_NORMAL 0x0 /* one color clock per pixel */ #define PMG_SIZE_DOUBLE 0x1 /* two color clocks per pixel */ -#define PMG_SIZE_QUAD 0x2 /* four color clocks per pixel */ +#define PMG_SIZE_QUAD 0x3 /* four color clocks per pixel */ /* COLPM0-COLPM3, COLPF0-COLPF3, COLBK color registers */ From cbf0c1d1dddc9d201ef3bf6ce9f3d5b54bc6e325 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 2 May 2020 13:46:06 -0400 Subject: [PATCH 0096/2710] Updated the cx16 library to the Commander X16's ROM prerelease 37. --- asminc/cbm_kernal.inc | 4 + asminc/cx16.inc | 344 +++++++++++++++++++---------------- include/cx16.h | 110 +++++++++-- libsrc/cx16/bordercolor.s | 18 +- libsrc/cx16/cpeekc.s | 5 +- libsrc/cx16/cpeekcolor.s | 15 +- libsrc/cx16/cpeekrevers.s | 13 +- libsrc/cx16/cputc.s | 4 +- libsrc/cx16/crt0.s | 8 +- libsrc/cx16/exec.c | 20 +- libsrc/cx16/get_numbanks.s | 10 +- libsrc/cx16/get_tv.s | 18 +- libsrc/cx16/kernal.s | 6 +- libsrc/cx16/layer_enable.s | 39 ++++ libsrc/cx16/randomize.s | 14 ++ libsrc/cx16/set_tv.s | 18 +- libsrc/cx16/sprites_enable.s | 34 ++++ 17 files changed, 447 insertions(+), 233 deletions(-) create mode 100644 libsrc/cx16/layer_enable.s create mode 100644 libsrc/cx16/randomize.s create mode 100644 libsrc/cx16/sprites_enable.s diff --git a/asminc/cbm_kernal.inc b/asminc/cbm_kernal.inc index 7125f1253..981687206 100644 --- a/asminc/cbm_kernal.inc +++ b/asminc/cbm_kernal.inc @@ -7,6 +7,10 @@ .if .def(__CX16__) ; CX16 extended jump table + ENTROPY_GET := $FECF + KEYBRD_BUF_PUT := $FED2 + CONSOLE_SET_PAGE_MSG := $FED5 + CONSOLE_PUT_IMAGE := $FED8 CONSOLE_INIT := $FEDB CONSOLE_PUT_CHAR := $FEDE CONSOLE_GET_CHAR := $FEE1 diff --git a/asminc/cx16.inc b/asminc/cx16.inc index 06cc30199..8891c1761 100644 --- a/asminc/cx16.inc +++ b/asminc/cx16.inc @@ -1,5 +1,5 @@ ; -; CX16 r36 definitions +; CX16 r37 definitions ; ; --------------------------------------------------------------------------- @@ -236,8 +236,8 @@ TXTPTR := $EE ; Pointer into BASIC source code BASIC_BUF := $0200 ; Location of command-line BASIC_BUF_LEN = 81 ; Maximum length of command-line -SCREEN_MODE := $0262 ; Current screen mode (set by SCREEN_SET_MODE) -SCREEN_PTR := $0263 ; Pointer to current row on text screen (16 bits) +SCREEN_MODE := $0261 ; Current screen mode (set by SCREEN_SET_MODE) +SCREEN_PTR := $0262 ; Pointer to current row on text screen (16 bits) STATUS := $0286 ; Status from previous I/O operation IN_DEV := $028A ; Current input device number OUT_DEV := $028B ; Current output device number @@ -257,8 +257,8 @@ LLEN := $0386 ; Line length NLINES := $0387 ; Number of screen lines ; BASIC -VARTAB := $03E3 ; Pointer to start of BASIC variables -MEMSIZE := $03EB ; Pointer to highest BASIC RAM location (+1) +VARTAB := $03E2 ; Pointer to start of BASIC variables +MEMSIZE := $03EA ; Pointer to highest BASIC RAM location (+1) ; --------------------------------------------------------------------------- ; Vector and other locations @@ -271,9 +271,11 @@ NMIVec := $0318 ; I/O locations ; Video Enhanced Retro Adapter -; Has audio, SPI, and UART. -.scope VERA +; Has audio and SPI. +.scope VERA + ; External registers + .struct .org $9F20 ADDR .faraddr ; Address for data port access @@ -282,31 +284,151 @@ NMIVec := $0318 CTRL .byte ; Control register IRQ_EN .byte ; Interrupt enable bits IRQ_FLAGS .byte ; Interrupt flags + IRQ_RASTER .byte ; Line where IRQ will occur .endstruct .enum ; Address automatic increment amounts - INC0 = 0 << 4 - INC1 = 1 << 4 - INC2 = 2 << 4 - INC4 = 3 << 4 - INC8 = 4 << 4 - INC16 = 5 << 4 - INC32 = 6 << 4 - INC64 = 7 << 4 - INC128 = 8 << 4 - INC256 = 9 << 4 - INC512 = 10 << 4 - INC1024 = 11 << 4 - INC2048 = 12 << 4 - INC4096 = 13 << 4 - INC8192 = 14 << 4 - INC16384 = 15 << 4 + DEC0 = (($00 << 1) | $01) << 3 + DEC1 = (($01 << 1) | $01) << 3 + DEC2 = (($02 << 1) | $01) << 3 + DEC4 = (($03 << 1) | $01) << 3 + DEC8 = (($04 << 1) | $01) << 3 + DEC16 = (($05 << 1) | $01) << 3 + DEC32 = (($06 << 1) | $01) << 3 + DEC64 = (($07 << 1) | $01) << 3 + DEC128 = (($08 << 1) | $01) << 3 + DEC256 = (($09 << 1) | $01) << 3 + DEC512 = (($0A << 1) | $01) << 3 + DEC40 = (($0B << 1) | $01) << 3 + DEC80 = (($0C << 1) | $01) << 3 + DEC160 = (($0D << 1) | $01) << 3 + DEC320 = (($0E << 1) | $01) << 3 + DEC640 = (($0F << 1) | $01) << 3 + INC0 = (($00 << 1) | $00) << 3 + INC1 = (($01 << 1) | $00) << 3 + INC2 = (($02 << 1) | $00) << 3 + INC4 = (($03 << 1) | $00) << 3 + INC8 = (($04 << 1) | $00) << 3 + INC16 = (($05 << 1) | $00) << 3 + INC32 = (($06 << 1) | $00) << 3 + INC64 = (($07 << 1) | $00) << 3 + INC128 = (($08 << 1) | $00) << 3 + INC256 = (($09 << 1) | $00) << 3 + INC512 = (($0A << 1) | $00) << 3 + INC40 = (($0B << 1) | $00) << 3 + INC80 = (($0C << 1) | $00) << 3 + INC160 = (($0D << 1) | $00) << 3 + INC320 = (($0E << 1) | $00) << 3 + INC640 = (($0F << 1) | $00) << 3 .endenum .enum ; Interrupt request flags VERT_SYNC = %00000001 - RASTER = %00000010 + RASTER_IRQ = %00000010 SPR_COLLIDED = %00000100 - UART_IRQ = %00001000 + AUDIO_LOW = %00001000 .endenum + .scope DISP ; Display controller + SELECT1 = %00000010 + .union + .org $9F29 + .struct + ; These four registers are visible when the DCSEL flag = %0 + VIDEO .byte + HSCALE .byte + VSCALE .byte + FRAME .byte + .endstruct + .struct + ; These four registers are visible when the DCSEL flag = %1 + HSTART .byte + HSTOP .byte + VSTART .byte + VSTOP .byte + .endstruct + .endunion + .enum MODE ; Output mode + DISABLE = $00 + VGA + NTSC + RGB ; Interlaced, composite sync + .endenum + .enum DISABLE + COLOR = %00000100 ; NTSC monochrome + .endenum + .enum ENABLE + LAYER0 = %00010000 + LAYER1 = %00100000 + SPRITES = %01000000 + .endenum + .endscope + .struct L0 ; Display layer 0 + .org $9F2D + CONFIG .byte + MAP_BASE .byte + TILE_BASE .byte + HSCROLL .word + VSCROLL .word + .endstruct + .struct L1 ; Display layer 1 + .org $9F34 + CONFIG .byte + MAP_BASE .byte + TILE_BASE .byte + HSCROLL .word + VSCROLL .word + .endstruct + .enum ; Layer display modes + TILE1BPP = %00000000 | $00 + TILE2BPP + TILE4BPP + TILE8BPP + T256C = %00001000 + BITMAP1BPP = %00000100 | $00 + BITMAP2BPP + BITMAP4BPP + BITMAP8BPP + .endenum + .enum MAP ; Map geometry + WIDTH32 = $00 << 4 + WIDTH64 = $01 << 4 + WIDTH128 = $02 << 4 + WIDTH256 = $03 << 4 + HEIGHT32 = $00 << 6 + HEIGHT64 = $01 << 6 + HEIGHT128 = $02 << 6 + HEIGHT256 = $03 << 6 + .endenum + .enum TILE ; Tile geometry + WIDTH8 = $00 + WIDTH16 = $01 + WIDTH320 = WIDTH8 + WIDTH640 = WIDTH16 + HEIGHT8 = $00 << 1 + HEIGHT16 = $01 << 1 + .endenum + .scope PCM ; Pulse-Code Modulator + .struct + .org $9F3B + CTRL .byte + RATE .byte + DATA .byte + .endstruct + .enum + STEREO = %00010000 + BITS16 = %00100000 + RESET = %10000000 + .endenum + .endscope + .scope SPI + .struct + .org $9F3E + DATA .byte + CTRL .byte + .endstruct + .enum + SELECT = %00000001 + SLOW = %00000010 + .endenum + .endscope ; Internal RAM and registers @@ -314,150 +436,66 @@ NMIVec := $0318 .org $000000 VRAM .res $020000 ; 128 Kibibytes .endstruct - .scope COMPOSER ; Display composer + .scope PSG ; Programmable Sound Generator .struct - .org $0F0000 - VIDEO .byte - HSCALE .byte - VSCALE .byte - FRAME .byte - HSTART_LO .byte - HSTOP_LO .byte - VSTART_LO .byte - VSTOP_LO .byte - STRTSTOP_HI .byte - IRQ_LINE .word + PITCH .word + VOL .byte ; Left, right channels; volume + WAVEFORM .byte ; Wave shape, pulse width .endstruct - .enum MODE ; Output mode - DISABLE = 0 - VGA - NTSC - RGB ; Interlaced, composite sync - .endenum + LEFT = %01 << 6 + RIGHT = %10 << 6 .enum - ENABLE_COLOR = 0 << 2 - DISABLE_COLOR = 1 << 2 ; NTSC monochrome + PULSE = $00 << 6 + SAWTOOTH = $01 << 6 + TRIANGLE = $02 << 6 + NOISE = $03 << 6 .endenum + .struct + .org $01F9C0 + VOICES .res $10 * 4 + .endstruct .endscope - PALETTE := $0F1000 - .struct L0 ; Layer 0 registers - .org $0F2000 - CTRL0 .byte ; Display mode control - CTRL1 .byte ; Geometry control - MAP_BASE .addr - TILE_BASE .addr - HSCROLL .word ; Horizontal scroll - VSCROLL .word ; Vertical scroll + .struct + .org $01FA00 + PALETTE .word $0100 .endstruct - .struct L1 ; Layer 1 registers (same as layer 0) - .org $0F3000 - CTRL0 .byte - CTRL1 .byte - MAP_BASE .addr - TILE_BASE .addr - HSCROLL .word - VSCROLL .word - .endstruct - .enum MAP ; Map geometry - WIDTH32 = 0 - WIDTH64 - WIDTH128 - WIDTH256 - HEIGHT32 = 0 << 2 - HEIGHT64 = 1 << 2 - HEIGHT128 = 2 << 2 - HEIGHT256 = 3 << 2 - .endenum - .scope TILE ; Tile geometry - .enum - WIDTH8 = 0 << 4 - WIDTH16 = 1 << 4 - WIDTH320 = WIDTH8 - WIDTH640 = WIDTH16 - HEIGHT8 = 0 << 5 - HEIGHT16 = 1 << 5 - .endenum - .enum FLIP - NONE = 0 << 2 - HORIZ = 1 << 2 - VERT = 2 << 2 - BOTH = 3 << 2 - .endenum - .endscope - .enum DMODE ; Display modes - TEXT16 = 0 << 5 - TEXT256 = 1 << 5 - TILE4 = 2 << 5 - TILE16 = 3 << 5 - TILE256 = 4 << 5 - BITMAP4 = 5 << 5 - BITMAP16 = 6 << 5 - BITMAP256 = 7 << 5 - .endenum .scope SPRITE - .struct - .org $0F4000 - CTRL .byte ; Enables sprite engine - COLLISION .byte - .endstruct - .struct ATTRIB ; Sprite attributes - .org $0F5000 - ADDR .addr ; Address and color mode - XX .word - YY .word - Z_FLIP .byte - SIZE_PAL .byte + .struct ; Sprite attributes + ADDR .addr ; Address and color mode + XX .word ; Co-ordinates + YY .word + Z_FLIP .byte ; Collision mask, Z-depth, flip bits + SIZE_PAL .byte .endstruct .enum FLIP - NONE = 0 + NONE = %00000000 HORIZ VERT BOTH .endenum .enum DEPTH - DISABLE = 0 << 2 - CANVAS = 1 << 2 - LAYER0 = 2 << 2 - LAYER1 = 3 << 2 + DISABLE = $00 << 2 + CANVAS = $01 << 2 + LAYER0 = $02 << 2 + LAYER1 = $03 << 2 .endenum .enum ; Sprite geometry - WIDTH8 = 0 << 4 - WIDTH16 = 1 << 4 - WIDTH32 = 2 << 4 - WIDTH64 = 3 << 4 - HEIGHT8 = 0 << 6 - HEIGHT16 = 1 << 6 - HEIGHT32 = 2 << 6 - HEIGHT64 = 3 << 6 - COLORS16 = 0 << 7 - COLORS256 = 1 << 7 - .endenum - .endscope - AUDIO := $0F6000 - .scope SPI - .struct - .org $0F7000 - DATA .byte - CONTROL .byte - .endstruct - .enum - DESELECT = 0 - SELECT - BUSY_MASK = 1 << 1 - .endenum - .endscope - .scope UART ; Universal Asyncronous Receiver Transmitter - .struct - .org $0F8000 - DATA .byte - STATUS .byte - BPS_DIV .word - .endstruct - .enum MASK - RECEIVE = 1 << 0 - TRANSMIT = 1 << 1 + WIDTH8 = $00 << 4 + WIDTH16 = $01 << 4 + WIDTH32 = $02 << 4 + WIDTH64 = $03 << 4 + HEIGHT8 = $00 << 6 + HEIGHT16 = $01 << 6 + HEIGHT32 = $02 << 6 + HEIGHT64 = $03 << 6 + COLORS16 = $00 << 7 + COLORS256 = $01 << 7 .endenum .endscope + .struct + .org $01FC00 + SPRITES .res 128 * 8 + .endstruct .endscope ; 65C22 @@ -516,8 +554,8 @@ NMIVec := $0318 ; --------------------------------------------------------------------------- ; Banked RAM and ROM -KEY_COUNT := $A00B ; (bank 0) Number of keys in input buffer -TIMER := $A03E ; (bank 0) 60 Hz. timer (3 bytes, big-endian) +KEY_COUNT := $A00A ; (bank 0) Number of keys in input buffer +TIMER := $A037 ; (bank 0) 60 Hz. timer (3 bytes, big-endian) .struct BANK .org $A000 diff --git a/include/cx16.h b/include/cx16.h index 6ceb605c9..253fa2482 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -2,7 +2,8 @@ /* */ /* cx16.h */ /* */ -/* CX16 system-specific definitions */ +/* CX16 system-specific definitions */ +/* For prerelease 37 */ /* */ /* */ /* This software is provided "as-is", without any expressed or implied */ @@ -140,14 +141,16 @@ /* get_tv() return codes ** set_tv() argument codes */ -#define TV_NONE 0 -#define TV_VGA 1 -#define TV_NTSC_COLOR 2 -#define TV_RGB 3 -#define TV_NONE2 4 -#define TV_VGA2 5 -#define TV_NTSC_MONO 6 -#define TV_RGB2 7 +enum { + TV_NONE = 0x00, + TV_VGA, + TV_NTSC_COLOR, + TV_RGB, + TV_NONE2, + TV_VGA2, + TV_NTSC_MONO, + TV_RGB2 +}; /* Video modes for videomode() */ #define VIDEOMODE_40x30 0x00 @@ -157,11 +160,47 @@ #define VIDEOMODE_320x200 0x80 #define VIDEOMODE_SWAP (-1) +/* VERA's address increment/decrement numbers */ +enum { + VERA_DEC_0 = ((0 << 1) | 1) << 3, + VERA_DEC_1 = ((1 << 1) | 1) << 3, + VERA_DEC_2 = ((2 << 1) | 1) << 3, + VERA_DEC_4 = ((3 << 1) | 1) << 3, + VERA_DEC_8 = ((4 << 1) | 1) << 3, + VERA_DEC_16 = ((5 << 1) | 1) << 3, + VERA_DEC_32 = ((6 << 1) | 1) << 3, + VERA_DEC_64 = ((7 << 1) | 1) << 3, + VERA_DEC_128 = ((8 << 1) | 1) << 3, + VERA_DEC_256 = ((9 << 1) | 1) << 3, + VERA_DEC_512 = ((10 << 1) | 1) << 3, + VERA_DEC_40 = ((11 << 1) | 1) << 3, + VERA_DEC_80 = ((12 << 1) | 1) << 3, + VERA_DEC_160 = ((13 << 1) | 1) << 3, + VERA_DEC_320 = ((14 << 1) | 1) << 3, + VERA_DEC_640 = ((15 << 1) | 1) << 3, + VERA_INC_0 = ((0 << 1) | 0) << 3, + VERA_INC_1 = ((1 << 1) | 0) << 3, + VERA_INC_2 = ((2 << 1) | 0) << 3, + VERA_INC_4 = ((3 << 1) | 0) << 3, + VERA_INC_8 = ((4 << 1) | 0) << 3, + VERA_INC_16 = ((5 << 1) | 0) << 3, + VERA_INC_32 = ((6 << 1) | 0) << 3, + VERA_INC_64 = ((7 << 1) | 0) << 3, + VERA_INC_128 = ((8 << 1) | 0) << 3, + VERA_INC_256 = ((9 << 1) | 0) << 3, + VERA_INC_512 = ((10 << 1) | 0) << 3, + VERA_INC_40 = ((11 << 1) | 0) << 3, + VERA_INC_80 = ((12 << 1) | 0) << 3, + VERA_INC_160 = ((13 << 1) | 0) << 3, + VERA_INC_320 = ((14 << 1) | 0) << 3, + VERA_INC_640 = ((15 << 1) | 0) << 3 +}; + /* VERA's interrupt flags */ #define VERA_IRQ_VSYNC 0b00000001 #define VERA_IRQ_RASTER 0b00000010 #define VERA_IRQ_SPR_COLL 0b00000100 -#define VERA_IRQ_UART 0b00001000 +#define VERA_IRQ_AUDIO_LOW 0b00001000 /* Define hardware. */ @@ -175,6 +214,44 @@ struct __vera { unsigned char control; /* Control register */ unsigned char irq_enable; /* Interrupt enable bits */ unsigned char irq_flags; /* Interrupt flags */ + unsigned char irq_raster; /* Line where IRQ will occur */ + union { + struct { /* Visible when DCSEL flag = 0 */ + unsigned char video; /* Flags to enable video layers */ + unsigned char hscale; /* Horizontal scale factor */ + unsigned char vscale; /* Vertical scale factor */ + unsigned char border; /* Border color (NTSC mode) */ + }; + struct { /* Visible when DCSEL flag = 1 */ + unsigned char hstart; /* Horizontal start position */ + unsigned char hstop; /* Horizontal stop position */ + unsigned char vstart; /* Vertical start position */ + unsigned char vstop; /* Vertical stop position */ + }; + } display; + struct { + unsigned char config; /* Layer map geometry */ + unsigned char mapbase; /* Map data address */ + unsigned char tilebase; /* Tile address and geometry */ + unsigned int hscroll; /* Smooth scroll horizontal offset */ + unsigned int vscroll; /* Smooth scroll vertical offset */ + } layer0; + struct { + unsigned char config; + unsigned char mapbase; + unsigned char tilebase; + unsigned int hscroll; + unsigned int vscroll; + } layer1; + struct { + unsigned char control; /* PCM format */ + unsigned char rate; /* Sample rate */ + unsigned char data; /* PCM output queue */ + } audio; /* Pulse-Code Modulation registers */ + struct { + unsigned char data; + unsigned char control; + } spi; /* SD card interface */ }; #define VERA (*(volatile struct __vera *)0x9F20) @@ -214,7 +291,7 @@ extern void cx16_std_mou[]; /* Referred to by mouse_static_stddrv[] -unsigned char get_numbanks (void); +unsigned short get_numbanks (void); /* Return the number of RAM banks that the machine has. */ signed char get_ostype (void); @@ -234,6 +311,17 @@ void __fastcall__ set_tv (unsigned char type); ** Call with a TV_xx constant. */ +unsigned char __fastcall__ vera_layer_enable (unsigned char layers); +/* Display the layers that are "named" by the bit flags in layers. +** A value of 0b01 shows layer 0, a value of 0b10 shows layer 1, +** a value of 0b11 shows both layers. Return the previous value. +*/ + +unsigned char __fastcall__ vera_sprites_enable (unsigned char mode); +/* Enable the sprite engine when mode is non-zero (true); +** disable sprites when mode is zero. Return the previous mode. +*/ + signed char __fastcall__ videomode (signed char mode); /* Set the video mode, return the old mode. ** Return -1 if Mode isn't valid. diff --git a/libsrc/cx16/bordercolor.s b/libsrc/cx16/bordercolor.s index 6691e2ec5..d152d1aa6 100644 --- a/libsrc/cx16/bordercolor.s +++ b/libsrc/cx16/bordercolor.s @@ -1,5 +1,5 @@ ; -; 2019-09-23, Greg King +; 2020-05-02, Greg King ; ; unsigned char __fastcall__ bordercolor (unsigned char color); ; /* Set the color for the border. The old color setting is returned. */ @@ -11,17 +11,7 @@ _bordercolor: tax - - ; Point to the border color register. - - stz VERA::CTRL ; Use port 0 - lda #<VERA::COMPOSER::FRAME - sta VERA::ADDR - lda #>VERA::COMPOSER::FRAME - sta VERA::ADDR+1 - ldy #^VERA::COMPOSER::FRAME | VERA::INC0 - sty VERA::ADDR+2 - - lda VERA::DATA0 ; get old value - stx VERA::DATA0 ; set new value + stz VERA::CTRL ; Use display register bank 0 + lda VERA::DISP::FRAME ; get old value + stx VERA::DISP::FRAME ; set new value rts diff --git a/libsrc/cx16/cpeekc.s b/libsrc/cx16/cpeekc.s index f7a7d2081..6756d995a 100644 --- a/libsrc/cx16/cpeekc.s +++ b/libsrc/cx16/cpeekc.s @@ -1,6 +1,6 @@ ; ; 2016-02-28, Groepaz -; 2019-09-25, Greg King +; 2020-04-29, Greg King ; ; char cpeekc (void); ; /* Return the character from the current cursor position. */ @@ -12,8 +12,6 @@ _cpeekc: - php - sei ; don't let cursor blinking interfere stz VERA::CTRL ; use port 0 lda CURS_Y sta VERA::ADDR+1 ; set row number @@ -22,7 +20,6 @@ _cpeekc: asl a ; each character has two bytes sta VERA::ADDR lda VERA::DATA0 ; get screen code - plp ldx #>$0000 and #<~%10000000 ; remove reverse bit diff --git a/libsrc/cx16/cpeekcolor.s b/libsrc/cx16/cpeekcolor.s index 4e3a39a2c..9c167b07a 100644 --- a/libsrc/cx16/cpeekcolor.s +++ b/libsrc/cx16/cpeekcolor.s @@ -1,5 +1,5 @@ ; -; 2019-09-25, Greg King +; 2020-04-30, Greg King ; ; unsigned char cpeekcolor (void); ; /* Return the colors from the current cursor position. */ @@ -12,8 +12,15 @@ _cpeekcolor: php + lda CURS_FLAG ; is the cursor currently off? + bne @L1 sei ; don't let cursor blinking interfere - stz VERA::CTRL ; use port 0 + ldx CURS_STATE ; is cursor currently displayed? + beq @L1 ; jump if not + lda CURS_COLOR ; get color under cursor + bra @L2 + +@L1: stz VERA::CTRL ; use port 0 lda CURS_Y sta VERA::ADDR+1 ; set row number stz VERA::ADDR+2 @@ -21,7 +28,7 @@ _cpeekcolor: sec ; color attribute is second byte rol a sta VERA::ADDR - lda VERA::DATA0 ; get color - plp + lda VERA::DATA0 ; get color of character +@L2: plp ldx #>$0000 rts diff --git a/libsrc/cx16/cpeekrevers.s b/libsrc/cx16/cpeekrevers.s index 15131d348..fd7428779 100644 --- a/libsrc/cx16/cpeekrevers.s +++ b/libsrc/cx16/cpeekrevers.s @@ -1,6 +1,6 @@ ; ; 2016-02-28, Groepaz -; 2019-09-25, Greg King +; 2020-04-30, Greg King ; ; unsigned char cpeekrevers (void); ; /* Return the reverse attribute from the current cursor position. @@ -15,8 +15,15 @@ _cpeekrevers: php + lda CURS_FLAG ; is the cursor currently off? + bne @L1 sei ; don't let cursor blinking interfere - stz VERA::CTRL ; use port 0 + ldx CURS_STATE ; is cursor currently displayed? + beq @L1 ; jump if not + lda CURS_CHAR ; get screen code under cursor + bra @L2 + +@L1: stz VERA::CTRL ; use port 0 lda CURS_Y sta VERA::ADDR+1 ; set row number stz VERA::ADDR+2 @@ -24,7 +31,7 @@ _cpeekrevers: asl a ; each character has two bytes sta VERA::ADDR lda VERA::DATA0 ; get screen code - plp +@L2: plp and #%10000000 ; get reverse bit asl a tax ; ldx #>$0000 diff --git a/libsrc/cx16/cputc.s b/libsrc/cx16/cputc.s index 11c4f5782..034c3e389 100644 --- a/libsrc/cx16/cputc.s +++ b/libsrc/cx16/cputc.s @@ -86,9 +86,9 @@ putchar: stz VERA::CTRL ; Use port 0 lda CURS_Y sta VERA::ADDR+1 ; Set row number - lda #VERA::INC1 ; Increment address by one + lda #VERA::INC1 ; Address increments by one sta VERA::ADDR+2 - ldy CURS_X ; Get character column + ldy CURS_X ; Get character column into .Y tya asl a ; Each character has two bytes sta VERA::ADDR diff --git a/libsrc/cx16/crt0.s b/libsrc/cx16/crt0.s index d709ea96f..be83927fc 100644 --- a/libsrc/cx16/crt0.s +++ b/libsrc/cx16/crt0.s @@ -22,7 +22,7 @@ Start: tsx stx spsave ; Save the system stack ptr -; Save space by putting some of the start-up code in the ONCE segment, +; Save space by putting some of the start-up code in the ONCE segment ; which will be re-used by the BSS segment, the heap, and the C stack. jsr init @@ -31,7 +31,7 @@ Start: tsx jsr zerobss -; Push the command-line arguments; and, call main(). +; Push the command-line arguments, and call main(). jsr callmain @@ -46,7 +46,7 @@ _exit: jsr donelib -.if 0 ; We don't need to preserve zero-page space for cc65's variables. +.if 0 ; (We don't need to preserve zero-page space for cc65's variables.) ; Copy back the zero-page stuff. ldx #zpspace-1 @@ -90,7 +90,7 @@ init: lda #$01 sta VIA1::PRA -.if 0 ; We don't need to preserve zero-page space for cc65's variables. +.if 0 ; (We don't need to preserve zero-page space for cc65's variables.) ; Save the zero-page locations that we need. ldx #zpspace-1 diff --git a/libsrc/cx16/exec.c b/libsrc/cx16/exec.c index 17a547e68..a6633a9c3 100644 --- a/libsrc/cx16/exec.c +++ b/libsrc/cx16/exec.c @@ -1,7 +1,7 @@ /* ** Program-chaining function for Commodore platforms. ** -** 2019-12-25, Greg King +** 2020-04-27, Greg King ** ** This function exploits the program-chaining feature in Commander X16 BASIC's ROM. ** @@ -71,26 +71,28 @@ extern void basbuf_len[]; int __fastcall__ exec (const char* progname, const char* cmdline) { +#if 0 static int fd; +#endif static unsigned char dv, n; /* Exclude devices that can't load files. */ /* (Use hand optimization, to make smaller code.) */ dv = getcurrentdevice (); - if (dv < 8 && __AX__ != 1 || __AX__ > 30) { + if (dv < 8 || __A__ > 30) { return _mappederrno (9); /* illegal device number */ } utoa (dv, basic.unit, 10); /* The emulator supports only loading and saving on its file-system. */ - if (dv != 1) { - /* Don't try to run a program that doesn't exist. */ - fd = open (progname, O_RDONLY); - if (fd < 0) { - return _mappederrno (4); /* file not found */ - } - close (fd); +#if 0 + /* Don't try to run a program that doesn't exist. */ + fd = open (progname, O_RDONLY); + if (fd < 0) { + return _mappederrno (4); /* file not found */ } + close (fd); +#endif n = 0; do { diff --git a/libsrc/cx16/get_numbanks.s b/libsrc/cx16/get_numbanks.s index 00490fb72..7654d3139 100644 --- a/libsrc/cx16/get_numbanks.s +++ b/libsrc/cx16/get_numbanks.s @@ -1,11 +1,12 @@ ; -; 2020-01-10, Greg King +; 2020-01-29, Greg King ; -; unsigned char get_numbanks (void); +; unsigned short get_numbanks (void); ; /* Return the number of RAM banks that the machine has. */ ; ; The Commander X16 version of MEMTOP returns with an extra value: ; The accumulator describes the number of RAM banks that exist on the hardware. +; A zero accumulator means that there are 256 RAM banks. ; .export _get_numbanks @@ -17,4 +18,7 @@ _get_numbanks: sec jsr MEMTOP ldx #>$0000 - rts + cmp #<$0100 ; are there 256 banks? + bne :+ + inx ; yes +: rts diff --git a/libsrc/cx16/get_tv.s b/libsrc/cx16/get_tv.s index 291a32cde..6c1cc6ad8 100644 --- a/libsrc/cx16/get_tv.s +++ b/libsrc/cx16/get_tv.s @@ -1,5 +1,5 @@ ; -; 2019-12-22, Greg King +; 2020-05-02, Greg King ; ; unsigned char get_tv (void); ; /* Return the video mode the machine is using. */ @@ -11,17 +11,9 @@ .proc _get_tv - ; Point to the video output register. - - stz VERA::CTRL ; Use port 0 - lda #<VERA::COMPOSER::VIDEO - ldx #>VERA::COMPOSER::VIDEO - ldy #^VERA::COMPOSER::VIDEO - sta VERA::ADDR - stx VERA::ADDR+1 - sty VERA::ADDR+2 - - lda VERA::DATA0 - and #$07 ; Get the type of output signal + stz VERA::CTRL ; Use display register bank 0 + lda VERA::DISP::VIDEO + and #%00000111 ; Get the type of output signal + ldx #>$0000 ; Promote to unsigned int rts .endproc diff --git a/libsrc/cx16/kernal.s b/libsrc/cx16/kernal.s index a6b65ebbd..a252569e5 100644 --- a/libsrc/cx16/kernal.s +++ b/libsrc/cx16/kernal.s @@ -1,11 +1,15 @@ ; -; 2020-01-06, Greg King +; 2020-04-27, Greg King ; ; CX16 Kernal functions ; .include "cbm_kernal.inc" + .export ENTROPY_GET + .export KEYBRD_BUF_PUT + .export CONSOLE_SET_PAGE_MSG + .export CONSOLE_PUT_IMAGE .export CONSOLE_INIT .export CONSOLE_PUT_CHAR .export CONSOLE_GET_CHAR diff --git a/libsrc/cx16/layer_enable.s b/libsrc/cx16/layer_enable.s new file mode 100644 index 000000000..2cbd6714f --- /dev/null +++ b/libsrc/cx16/layer_enable.s @@ -0,0 +1,39 @@ +; +; 2020-05-02, Greg King +; +; unsigned char __fastcall__ vera_layer_enable (unsigned char layers); +; /* Display the layers that are "named" by the bit flags in layers. +; ** A value of 0b01 shows layer 0, a value of 0b10 shows layer 1, +; ** a value of 0b11 shows both layers. Return the previous value. +; */ +; + + .export _vera_layer_enable + + .include "cx16.inc" + + +mask = VERA::DISP::ENABLE::LAYER1 | VERA::DISP::ENABLE::LAYER0 + +.proc _vera_layer_enable + stz VERA::CTRL ; Use display register bank 0 + asl a + asl a ; Shift new flags into position + asl a + asl a + ldy VERA::DISP::VIDEO + + eor VERA::DISP::VIDEO + and #mask + eor VERA::DISP::VIDEO ; Replace old flags with new flags + sta VERA::DISP::VIDEO + + tya + and #mask ; Get old flags + lsr a + lsr a + lsr a + lsr a + ldx #>$0000 + rts +.endproc diff --git a/libsrc/cx16/randomize.s b/libsrc/cx16/randomize.s new file mode 100644 index 000000000..3d965c82a --- /dev/null +++ b/libsrc/cx16/randomize.s @@ -0,0 +1,14 @@ +; +; 2020-05-02, Greg King +; +; void _randomize (void); +; /* Initialize the random number generator */ +; + + .export __randomize + + .import ENTROPY_GET, _srand + +__randomize: + jsr ENTROPY_GET + jmp _srand ; Initialize generator diff --git a/libsrc/cx16/set_tv.s b/libsrc/cx16/set_tv.s index c23568c67..1779e895e 100644 --- a/libsrc/cx16/set_tv.s +++ b/libsrc/cx16/set_tv.s @@ -1,5 +1,5 @@ ; -; 2019-12-22, Greg King +; 2020-05-02, Greg King ; ; void __fastcall__ set_tv (unsigned char); ; /* Set the video mode the machine will use. */ @@ -11,16 +11,10 @@ .proc _set_tv - ; Point to the video output register. - - stz VERA::CTRL ; Use port 0 - ldx #<VERA::COMPOSER::VIDEO - ldy #>VERA::COMPOSER::VIDEO - stx VERA::ADDR - sty VERA::ADDR+1 - ldx #^VERA::COMPOSER::VIDEO - stx VERA::ADDR+2 - - sta VERA::DATA0 + stz VERA::CTRL ; Use display register bank 0 + eor VERA::DISP::VIDEO + and #%00000111 + eor VERA::DISP::VIDEO ; Replace old mode with new mode + sta VERA::DISP::VIDEO rts .endproc diff --git a/libsrc/cx16/sprites_enable.s b/libsrc/cx16/sprites_enable.s new file mode 100644 index 000000000..73924233c --- /dev/null +++ b/libsrc/cx16/sprites_enable.s @@ -0,0 +1,34 @@ +; +; 2020-05-02, Greg King +; +; unsigned char __fastcall__ vera_sprites_enable (unsigned char mode); +; /* Enable the sprite engine when mode is non-zero (true); +; ** disable sprites when mode is zero. Return the previous mode. +; */ +; + + .export _vera_sprites_enable + + .include "cx16.inc" + + +.proc _vera_sprites_enable + stz VERA::CTRL ; Use display register bank 0 + tax ; Is mode true? + beq :+ + lda #VERA::DISP::ENABLE::SPRITES ; Yes +: ldy VERA::DISP::VIDEO + + eor VERA::DISP::VIDEO + and #VERA::DISP::ENABLE::SPRITES + eor VERA::DISP::VIDEO ; Replace old flag with new flag + sta VERA::DISP::VIDEO + + tya + and #VERA::DISP::ENABLE::SPRITES ; Get old value + asl a + asl a + rol a ; Make it boolean + ldx #>$0000 + rts +.endproc From 5b56c6e3a2b1ceff1a55e02793fce46f84b98243 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Mon, 4 May 2020 22:22:32 +0200 Subject: [PATCH 0097/2710] Disable potentially enabled double-width graphics. --- asminc/apple2.inc | 22 ++++++++++++++-------- libsrc/apple2/tgi/a2.hi.s | 4 ++++ libsrc/apple2/tgi/a2.lo.s | 4 ++++ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/asminc/apple2.inc b/asminc/apple2.inc index 536a1d851..226a85778 100644 --- a/asminc/apple2.inc +++ b/asminc/apple2.inc @@ -50,15 +50,21 @@ LCBANK2 := $C083 ; Swap in LC bank 2 LCBANK1 := $C08B ; Swap in LC bank 1 ; Video mode switches -TXTCLR := $C050 ; Display graphics -TXTSET := $C051 ; Display text -MIXCLR := $C052 ; Disable 4 lines of text -MIXSET := $C053 ; Enable 4 lines of text -LOWSCR := $C054 ; Page 1 -HISCR := $C055 ; Page 2 -LORES := $C056 ; Lores graphics -HIRES := $C057 ; Hires graphics +TXTCLR := $C050 ; Display graphics +TXTSET := $C051 ; Display text +MIXCLR := $C052 ; Disable 4 lines of text +MIXSET := $C053 ; Enable 4 lines of text +LOWSCR := $C054 ; Page 1 +HISCR := $C055 ; Page 2 +LORES := $C056 ; Lores graphics +HIRES := $C057 ; Hires graphics +DHIRESON := $C05E ; Enable double-width graphics +DHIRESOFF := $C05F ; Disable double-width graphics ; Game controller BUTN0 := $C061 ; Open-Apple Key BUTN1 := $C062 ; Closed-Apple Key + +; IOU +IOUDISON := $C07E ; Disable IOU +IOUDISOFF := $C07F ; Enable IOU diff --git a/libsrc/apple2/tgi/a2.hi.s b/libsrc/apple2/tgi/a2.hi.s index e06b4a617..aeb24f6be 100644 --- a/libsrc/apple2/tgi/a2.hi.s +++ b/libsrc/apple2/tgi/a2.hi.s @@ -175,6 +175,10 @@ INIT: ; Switch into graphics mode bit MIXCLR bit HIRES + .ifdef __APPLE2ENH__ + sta IOUDISON + bit DHIRESOFF + .endif bit TXTCLR ; Beagle Bros Shape Mechanic fonts don't diff --git a/libsrc/apple2/tgi/a2.lo.s b/libsrc/apple2/tgi/a2.lo.s index 2f5485e02..6d1c6aa4a 100644 --- a/libsrc/apple2/tgi/a2.lo.s +++ b/libsrc/apple2/tgi/a2.lo.s @@ -126,6 +126,10 @@ INIT: bit $C082 ; Switch in ROM jsr SETGR bit MIXCLR + .ifdef __APPLE2ENH__ + sta IOUDISON + bit DHIRESOFF + .endif bit $C080 ; Switch in LC bank 2 for R/O ; Done, reset the error code From ad1eadd60ddd174605f88318c0b0faee34ed939d Mon Sep 17 00:00:00 2001 From: Chris Cacciatore <chris.cacciatore@gmail.com> Date: Fri, 8 May 2020 15:33:30 -0700 Subject: [PATCH 0098/2710] Added support for --large-alignment in ld65. Implemented the same way as in ca65. --- doc/ld65.sgml | 7 +++++++ src/ld65/global.c | 6 ++++-- src/ld65/global.h | 2 ++ src/ld65/main.c | 10 ++++++++++ src/ld65/segments.c | 2 +- 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/doc/ld65.sgml b/doc/ld65.sgml index 97233271c..f3ba3bdc9 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -79,6 +79,7 @@ Long options: --end-group End a library group --force-import sym Force an import of symbol 'sym' --help Help (this text) + --large-alignment Don't warn about large alignments --lib file Link this library --lib-path path Specify a library search path --mapfile name Create a map file @@ -298,6 +299,12 @@ Here is a description of all of the command-line options: information generation is currently being developed, so the format of the file and its contents are subject to change without further notice. + <label id="option--large-alignment"> + <tag><tt>--large-alignment</tt></tag> + + Disable warnings about a large combined alignment. See the discussion of the + <tt><ref id=".ALIGN" name=".ALIGN"></tt> directive for futher information. + <tag><tt>--lib file</tt></tag> diff --git a/src/ld65/global.c b/src/ld65/global.c index 59c3754e6..8f43232fe 100644 --- a/src/ld65/global.c +++ b/src/ld65/global.c @@ -52,8 +52,10 @@ unsigned ModuleId = 0; /* Id for o65 module */ unsigned char HaveStartAddr = 0; /* Start address not given */ unsigned long StartAddr = 0x200; /* Start address */ -unsigned char VerboseMap = 0; /* Verbose map file */ -unsigned char AllowMultDef = 0; /* Allow multiple definitions */ +unsigned char VerboseMap = 0; /* Verbose map file */ +unsigned char AllowMultDef = 0; /* Allow multiple definitions */ +unsigned char LargeAlignment = 0; /* Don't warn about large alignments */ + const char* MapFileName = 0; /* Name of the map file */ const char* LabelFileName = 0; /* Name of the label file */ const char* DbgFileName = 0; /* Name of the debug file */ diff --git a/src/ld65/global.h b/src/ld65/global.h index 6af265f45..a923f6de5 100644 --- a/src/ld65/global.h +++ b/src/ld65/global.h @@ -54,6 +54,8 @@ extern unsigned long StartAddr; /* Start address */ extern unsigned char VerboseMap; /* Verbose map file */ extern unsigned char AllowMultDef; /* Allow multiple definitions */ +extern unsigned char LargeAlignment; /* Don't warn about large alignments */ + extern const char* MapFileName; /* Name of the map file */ extern const char* LabelFileName; /* Name of the label file */ extern const char* DbgFileName; /* Name of the debug file */ diff --git a/src/ld65/main.c b/src/ld65/main.c index a3fd81143..f2415a914 100644 --- a/src/ld65/main.c +++ b/src/ld65/main.c @@ -136,6 +136,7 @@ static void Usage (void) " --end-group\t\t\tEnd a library group\n" " --force-import sym\t\tForce an import of symbol 'sym'\n" " --help\t\t\tHelp (this text)\n" + " --large-alignment\t\tDon't warn about large alignments\n" " --lib file\t\t\tLink this library\n" " --lib-path path\t\tSpecify a library search path\n" " --mapfile name\t\tCreate a map file\n" @@ -406,6 +407,14 @@ static void OptHelp (const char* Opt attribute ((unused)), +static void OptLargeAlignment (const char* Opt attribute ((unused)), + const char* Arg attribute ((unused))) +/* Don't warn about large alignments */ +{ + LargeAlignment = 1; +} + + static void OptLib (const char* Opt attribute ((unused)), const char* Arg) /* Link a library */ { @@ -617,6 +626,7 @@ static void ParseCommandLine(void) { "--end-group", 0, CmdlOptEndGroup }, { "--force-import", 1, OptForceImport }, { "--help", 0, OptHelp }, + { "--large-alignment", 0, OptLargeAlignment }, { "--lib", 1, OptLib }, { "--lib-path", 1, OptLibPath }, { "--mapfile", 1, OptMapFile }, diff --git a/src/ld65/segments.c b/src/ld65/segments.c index 56a4719ad..10d2cda2c 100644 --- a/src/ld65/segments.c +++ b/src/ld65/segments.c @@ -230,7 +230,7 @@ Section* ReadSection (FILE* F, ObjData* O) "%lu. Last module requiring alignment was '%s'.", GetString (Name), Alignment, MAX_ALIGNMENT, GetObjFileName (O)); - } else if (Alignment >= LARGE_ALIGNMENT) { + } else if (Alignment >= LARGE_ALIGNMENT && !LargeAlignment) { Warning ("Combined alignment for segment '%s' is suspiciously " "large (%lu). Last module requiring alignment was '%s'.", GetString (Name), Alignment, GetObjFileName (O)); From 3adeb0f90777ab25d95a604dfba9791a8f8486e1 Mon Sep 17 00:00:00 2001 From: Chris Cacciatore <chris.cacciatore@gmail.com> Date: Sun, 10 May 2020 11:40:19 -0700 Subject: [PATCH 0099/2710] Removed invalid link to ca65 document. --- doc/ld65.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/ld65.sgml b/doc/ld65.sgml index f3ba3bdc9..6cdf78800 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -303,7 +303,7 @@ Here is a description of all of the command-line options: <tag><tt>--large-alignment</tt></tag> Disable warnings about a large combined alignment. See the discussion of the - <tt><ref id=".ALIGN" name=".ALIGN"></tt> directive for futher information. + <tt/.ALIGN/ directive in the ca65 Users Guide for futher information. <tag><tt>--lib file</tt></tag> From f8be35b41e2225d64b93da654cc8fb80c75c95b9 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 15 May 2020 21:09:02 -0400 Subject: [PATCH 0100/2710] Fixed some typos in the "large alignment" support. --- doc/ca65.sgml | 2 +- doc/ld65.sgml | 2 +- src/ca65/segment.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index ad72189c0..2c4593d21 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -226,7 +226,7 @@ Here is a description of all the command line options: <tag><tt>--large-alignment</tt></tag> Disable warnings about a large combined alignment. See the discussion of the - <tt><ref id=".ALIGN" name=".ALIGN"></tt> directive for futher information. + <tt><ref id=".ALIGN" name=".ALIGN"></tt> directive for further information. <label id="option--list-bytes"> diff --git a/doc/ld65.sgml b/doc/ld65.sgml index 6cdf78800..d8e296996 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -303,7 +303,7 @@ Here is a description of all of the command-line options: <tag><tt>--large-alignment</tt></tag> Disable warnings about a large combined alignment. See the discussion of the - <tt/.ALIGN/ directive in the ca65 Users Guide for futher information. + <tt/.ALIGN/ directive in the ca65 Users Guide for further information. <tag><tt>--lib file</tt></tag> diff --git a/src/ca65/segment.c b/src/ca65/segment.c index aa9a48512..fa4e97dd0 100644 --- a/src/ca65/segment.c +++ b/src/ca65/segment.c @@ -306,7 +306,7 @@ void SegAlign (unsigned long Alignment, int FillVal) ActiveSeg->Align = CombinedAlignment; /* Output a warning for larger alignments if not suppressed */ - if (CombinedAlignment > LARGE_ALIGNMENT && !LargeAlignment) { + if (CombinedAlignment >= LARGE_ALIGNMENT && !LargeAlignment) { Warning (0, "Combined alignment is suspiciously large (%lu)", CombinedAlignment); } @@ -411,7 +411,7 @@ void SegDone (void) /* We cannot evaluate the expression now, leave the job for ** the linker. However, we can check if the address size - ** matches the fragment size. Mismatches are errors in + ** matches the fragment size. Mismatches are errors in ** most situations. */ if ((F->Len == 1 && ED.AddrSize > ADDR_SIZE_ZP) || From 532240a2db6d494093040b94fbcafccf886d507c Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sun, 24 May 2020 22:47:20 +0200 Subject: [PATCH 0101/2710] Telestrat joystick management --- doc/telestrat.sgml | 13 +++- include/telestrat.h | 8 ++ libsrc/telestrat/joy/telestrat-joy.s | 109 +++++++++++++++++++++++++++ libsrc/telestrat/joy_stat_stddrv.s | 14 ++++ libsrc/telestrat/joy_stddrv.s | 13 ++++ libsrc/telestrat/libref.s | 3 +- 6 files changed, 155 insertions(+), 5 deletions(-) create mode 100644 libsrc/telestrat/joy/telestrat-joy.s create mode 100644 libsrc/telestrat/joy_stat_stddrv.s create mode 100644 libsrc/telestrat/joy_stddrv.s diff --git a/doc/telestrat.sgml b/doc/telestrat.sgml index 0cb40c501..6d62ef7b7 100644 --- a/doc/telestrat.sgml +++ b/doc/telestrat.sgml @@ -189,15 +189,20 @@ port cardridge. <sect1>Joystick drivers<p> -Telemon 2.4 & 3.0 manages joysticks but it had been handled yet. This means that -joysticks driver could be written easily. - Telemon 2.4 returns in keyboard buffer the direction of the joysticks. This means that if you get input from keyboard by conio cgetc function, you will get direction from joysticks. +Anyway, if you don't want to use ROM, you can use joysticks standard drivers in your code. + +The standard driver manages two joysticks. Only one button is managed for theses joysticks. + +Telestrat can handle one button for the left port, and three buttons for the right port (but this port was designed for a mouse). + +If you find a Telestrat mouse (which almost impossible :), these driver will work too because there is some extra hardware in the mouse to send direction. + <sect1>Mouse drivers<p> -Telestrat manages also mouse, but it had been no handled yet in this version. +Telestrat manages also mouse (Joystick port) Telestrat mouse is really difficult to find. <sect1>RS232 device drivers<p> diff --git a/include/telestrat.h b/include/telestrat.h index 1865f19a0..38762be1d 100644 --- a/include/telestrat.h +++ b/include/telestrat.h @@ -98,7 +98,15 @@ extern void telestrat_240_200_2_tgi[]; /* Referred to by tgi_static_stddrv[ #define CH_LIRA 95 #define CH_ESC 27 +/* Masks for joy_read */ +#define JOY_UP_MASK 0x10 +#define JOY_DOWN_MASK 0x08 +#define JOY_LEFT_MASK 0x01 +#define JOY_RIGHT_MASK 0x02 +#define JOY_BTN_1_MASK 0x04 +/* The addresses of the static drivers */ +extern void telestrat_joy[]; /* Referred to by joy_static_stddrv[] */ void oups(); void ping(); diff --git a/libsrc/telestrat/joy/telestrat-joy.s b/libsrc/telestrat/joy/telestrat-joy.s new file mode 100644 index 000000000..827e44a3f --- /dev/null +++ b/libsrc/telestrat/joy/telestrat-joy.s @@ -0,0 +1,109 @@ +; +; Telestrat joystick driver +; +; 2002-12-20, Based on Ullrich von Bassewitz's code. +; 2017-11-01, Stefan Haubenthal +; 2020-05-20n, Jede +; + + .include "joy-kernel.inc" + .include "joy-error.inc" + .include "telestrat.inc" + + .macpack module + + +; ------------------------------------------------------------------------ +; Header. Includes jump table + + module_header _telestrat_joy + +; Driver signature + + .byte $6A, $6F, $79 ; "joy" + .byte JOY_API_VERSION ; Driver API version number + +; Library reference + + .addr $0000 + +; Jump table. + + .addr INSTALL + .addr UNINSTALL + .addr COUNT + .addr READ + +; ------------------------------------------------------------------------ +; Constants + +JOY_COUNT = 2 ; Number of joysticks we support + +.code + +; ------------------------------------------------------------------------ +; INSTALL routine. Is called after the driver is loaded into memory. If +; possible, check if the hardware is present and determine the amount of +; memory available. +; Must return an JOY_ERR_xx code in a/x. +; + +INSTALL: + lda #%11000000 + sta VIA2::DDRB + sta VIA2::PRB + ; We could detect joysticks because with previous command bit0,1,2,3,4 should be set to 1 after + ; But if some one press fire or press direction, we could reach others values which could break Joystick détection. + lda #<JOY_ERR_OK + ldx #>JOY_ERR_OK +; rts ; Run into UNINSTALL instead + +; ------------------------------------------------------------------------ +; UNINSTALL routine. Is called before the driver is removed from memory. +; Can do cleanup or whatever. Must not return anything. +; + +UNINSTALL: + rts + + +; ------------------------------------------------------------------------ +; COUNT: Return the total number of available joysticks in a/x. +; + +COUNT: + lda #<JOY_COUNT + ldx #>JOY_COUNT + rts + +; ------------------------------------------------------------------------ +; READ: Read a particular joystick passed in A. +; +; How telestrat joysticks works +; PB7 and PB6 select right or left port +; When PB7 and PB6 are high, it controls two CA3083 (2 NPN transistors array) bases. +; In that case, PB0 to PB4 are set to high (it means no action are pressed) +; When the user press something then bit will be set to 0. +; bit 0 is right +; bit 1 is left +; bit 2 is fire +; ... + +READ: + beq right + lda #%10000000 + ora VIA2::PRB + sta VIA2::PRB + ; then read + lda VIA2::PRB + eor #%10011111 + rts +right: + lda #%01000000 + ora VIA2::PRB + sta VIA2::PRB + ; then read + lda VIA2::PRB + eor #%01011111 + + rts diff --git a/libsrc/telestrat/joy_stat_stddrv.s b/libsrc/telestrat/joy_stat_stddrv.s new file mode 100644 index 000000000..0c4c3667b --- /dev/null +++ b/libsrc/telestrat/joy_stat_stddrv.s @@ -0,0 +1,14 @@ +; +; Address of the static standard joystick driver +; +; Oliver Schmidt, 2012-11-01 +; +; const void joy_static_stddrv[]; +; + + .export _joy_static_stddrv + .import _telestrat_joy + +.rodata + +_joy_static_stddrv := _telestrat_joy diff --git a/libsrc/telestrat/joy_stddrv.s b/libsrc/telestrat/joy_stddrv.s new file mode 100644 index 000000000..8dfdde36e --- /dev/null +++ b/libsrc/telestrat/joy_stddrv.s @@ -0,0 +1,13 @@ +; +; Name of the standard joystick driver +; +; Oliver Schmidt, 2012-11-01 +; +; const char joy_stddrv[]; +; + + .export _joy_stddrv + +.rodata + +_joy_stddrv: .asciiz "telestrat_joy" diff --git a/libsrc/telestrat/libref.s b/libsrc/telestrat/libref.s index bdd0a671a..c737396a5 100644 --- a/libsrc/telestrat/libref.s +++ b/libsrc/telestrat/libref.s @@ -2,7 +2,8 @@ ; Jede (jede@oric.org), 2017-10-16 ; - .export tgi_libref + .export joy_libref, tgi_libref .import _exit +joy_libref := _exit tgi_libref := _exit From 7ae64307285360c21c0c3c53f50f5f51ecd3237a Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sun, 24 May 2020 22:49:26 +0200 Subject: [PATCH 0102/2710] Fix typo --- doc/telestrat.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/telestrat.sgml b/doc/telestrat.sgml index 6d62ef7b7..eac341880 100644 --- a/doc/telestrat.sgml +++ b/doc/telestrat.sgml @@ -198,7 +198,7 @@ The standard driver manages two joysticks. Only one button is managed for theses Telestrat can handle one button for the left port, and three buttons for the right port (but this port was designed for a mouse). -If you find a Telestrat mouse (which almost impossible :), these driver will work too because there is some extra hardware in the mouse to send direction. +If you find a Telestrat mouse (which is almost impossible :), these driver will work too because there is some extra hardware in the mouse to send direction. <sect1>Mouse drivers<p> From cd7abdb58df76a5bde864c435207a7e20a29666e Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sun, 24 May 2020 22:52:31 +0200 Subject: [PATCH 0103/2710] Fix typo --- libsrc/telestrat/joy/telestrat-joy.s | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libsrc/telestrat/joy/telestrat-joy.s b/libsrc/telestrat/joy/telestrat-joy.s index 827e44a3f..1d1261ea7 100644 --- a/libsrc/telestrat/joy/telestrat-joy.s +++ b/libsrc/telestrat/joy/telestrat-joy.s @@ -53,7 +53,7 @@ INSTALL: sta VIA2::DDRB sta VIA2::PRB ; We could detect joysticks because with previous command bit0,1,2,3,4 should be set to 1 after - ; But if some one press fire or press direction, we could reach others values which could break Joystick détection. + ; But if some one press fire or press direction, we could reach others values which could break joystick detection. lda #<JOY_ERR_OK ldx #>JOY_ERR_OK ; rts ; Run into UNINSTALL instead @@ -84,9 +84,9 @@ COUNT: ; When PB7 and PB6 are high, it controls two CA3083 (2 NPN transistors array) bases. ; In that case, PB0 to PB4 are set to high (it means no action are pressed) ; When the user press something then bit will be set to 0. -; bit 0 is right -; bit 1 is left -; bit 2 is fire +; Bit 0 is right +; Bit 1 is left +; Bit 2 is fire ; ... READ: @@ -97,6 +97,7 @@ READ: ; then read lda VIA2::PRB eor #%10011111 + rts right: lda #%01000000 From e8b1d51d2869783fb8e767987ae11c09c706eed6 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sun, 24 May 2020 23:31:12 +0200 Subject: [PATCH 0104/2710] Fix typo --- libsrc/telestrat/joy/telestrat-joy.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/joy/telestrat-joy.s b/libsrc/telestrat/joy/telestrat-joy.s index 1d1261ea7..d15973a05 100644 --- a/libsrc/telestrat/joy/telestrat-joy.s +++ b/libsrc/telestrat/joy/telestrat-joy.s @@ -3,7 +3,7 @@ ; ; 2002-12-20, Based on Ullrich von Bassewitz's code. ; 2017-11-01, Stefan Haubenthal -; 2020-05-20n, Jede +; 2020-05-20, Jede ; .include "joy-kernel.inc" From 1d358a473498c741549346e922d2c7c932ac328e Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 25 May 2020 22:25:14 +0200 Subject: [PATCH 0105/2710] Fix bug --- libsrc/telestrat/joy/telestrat-joy.s | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/libsrc/telestrat/joy/telestrat-joy.s b/libsrc/telestrat/joy/telestrat-joy.s index d15973a05..073a75faf 100644 --- a/libsrc/telestrat/joy/telestrat-joy.s +++ b/libsrc/telestrat/joy/telestrat-joy.s @@ -91,18 +91,22 @@ COUNT: READ: beq right - lda #%10000000 - ora VIA2::PRB + + lda VIA2::PRB + and #%01111111 + ora #%01000000 sta VIA2::PRB ; then read lda VIA2::PRB eor #%10011111 rts -right: - lda #%01000000 - ora VIA2::PRB - sta VIA2::PRB +right: + lda VIA2::PRB + and #%10111111 + ora #%10000000 + sta VIA2::PRB + ; then read lda VIA2::PRB eor #%01011111 From 50192fc65e79156a03c8918a19b5d38e79e3771b Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 25 May 2020 22:28:08 +0200 Subject: [PATCH 0106/2710] Change name of the driver (telestrat-joy.s renamed to telestrat.s --- libsrc/telestrat/joy/{telestrat-joy.s => telestrat.s} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename libsrc/telestrat/joy/{telestrat-joy.s => telestrat.s} (100%) diff --git a/libsrc/telestrat/joy/telestrat-joy.s b/libsrc/telestrat/joy/telestrat.s similarity index 100% rename from libsrc/telestrat/joy/telestrat-joy.s rename to libsrc/telestrat/joy/telestrat.s From 6c2d578c6172a5a384402a2ff240c473308f4116 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Wed, 27 May 2020 22:44:37 +0200 Subject: [PATCH 0107/2710] Fix eor bug --- libsrc/telestrat/joy/telestrat.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/telestrat/joy/telestrat.s b/libsrc/telestrat/joy/telestrat.s index 073a75faf..e4a6d94f2 100644 --- a/libsrc/telestrat/joy/telestrat.s +++ b/libsrc/telestrat/joy/telestrat.s @@ -98,7 +98,7 @@ READ: sta VIA2::PRB ; then read lda VIA2::PRB - eor #%10011111 + eor #%01011111 rts right: @@ -109,6 +109,6 @@ right: ; then read lda VIA2::PRB - eor #%01011111 + eor #%10011111 rts From 6521930880e03ed5bea884d35eb9e9f4525a7aa1 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Wed, 27 May 2020 22:49:10 +0200 Subject: [PATCH 0108/2710] Fixed the name of the driver --- libsrc/telestrat/joy_stddrv.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/joy_stddrv.s b/libsrc/telestrat/joy_stddrv.s index 8dfdde36e..c8d8c2495 100644 --- a/libsrc/telestrat/joy_stddrv.s +++ b/libsrc/telestrat/joy_stddrv.s @@ -10,4 +10,4 @@ .rodata -_joy_stddrv: .asciiz "telestrat_joy" +_joy_stddrv: .asciiz "telestrat.joy" From 3890492a9bf9b88c3fce2900c59336ad14ddc8ce Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 28 May 2020 09:59:21 -0400 Subject: [PATCH 0109/2710] Added a JOY_FIRE() macro to the Atmos and Telestrat C headers. --- include/atmos.h | 3 +++ include/telestrat.h | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/include/atmos.h b/include/atmos.h index d9f6d103b..227c387aa 100644 --- a/include/atmos.h +++ b/include/atmos.h @@ -120,6 +120,9 @@ #define JOY_RIGHT_MASK 0x02 #define JOY_BTN_1_MASK 0x20 +#define JOY_FIRE_MASK JOY_BTN_1_MASK +#define JOY_FIRE(v) ((v) & JOY_FIRE_MASK) + /* No support for dynamically loadable drivers */ diff --git a/include/telestrat.h b/include/telestrat.h index 38762be1d..524f7d39f 100644 --- a/include/telestrat.h +++ b/include/telestrat.h @@ -105,6 +105,10 @@ extern void telestrat_240_200_2_tgi[]; /* Referred to by tgi_static_stddrv[ #define JOY_RIGHT_MASK 0x02 #define JOY_BTN_1_MASK 0x04 +#define JOY_FIRE_MASK JOY_BTN_1_MASK +#define JOY_FIRE(v) ((v) & JOY_FIRE_MASK) + + /* The addresses of the static drivers */ extern void telestrat_joy[]; /* Referred to by joy_static_stddrv[] */ From 68eb0f2cdc5c7d9c770c261d0b819de13d29e805 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 28 May 2020 10:33:08 -0400 Subject: [PATCH 0110/2710] Put the Telestrat static drivers names together. --- include/telestrat.h | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/include/telestrat.h b/include/telestrat.h index 524f7d39f..a4648a3dc 100644 --- a/include/telestrat.h +++ b/include/telestrat.h @@ -55,9 +55,6 @@ #define TGI_COLOR_RED 7 -extern void telestrat_228_200_3_tgi[]; -extern void telestrat_240_200_2_tgi[]; /* Referred to by tgi_static_stddrv[] */ - /* Define hardware */ #include <_6522.h> #define VIA (*(struct __6522*)0x300) @@ -110,7 +107,10 @@ extern void telestrat_240_200_2_tgi[]; /* Referred to by tgi_static_stddrv[ /* The addresses of the static drivers */ -extern void telestrat_joy[]; /* Referred to by joy_static_stddrv[] */ +extern void telestrat_joy[]; /* Referred to by joy_static_stddrv[] */ +extern void telestrat_228_200_3_tgi[]; +extern void telestrat_240_200_2_tgi[]; /* Referred to by tgi_static_stddrv[] */ + void oups(); void ping(); @@ -119,7 +119,3 @@ void shoot(); void explode(); void kbdclick1(); - - - - From 083f3ae26b13e2c15ac559a5be78febca38f06ed Mon Sep 17 00:00:00 2001 From: laubzega <mileksmyk@gmail.com> Date: Mon, 25 May 2020 23:43:28 -0700 Subject: [PATCH 0111/2710] Fix for #928. --- src/ld65/bin.c | 8 +++++++- src/ld65/config.c | 6 ++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/ld65/bin.c b/src/ld65/bin.c index 688622415..f2e741be5 100644 --- a/src/ld65/bin.c +++ b/src/ld65/bin.c @@ -195,7 +195,7 @@ static void BinWriteMem (BinDesc* D, MemoryArea* M) if (DoWrite || (M->Flags & MF_FILL) != 0) { /* Seek in "overwrite" segments */ if (S->Flags & SF_OVERWRITE) { - fseek (D->F, NewAddr - M->Start, SEEK_SET); + fseek (D->F, NewAddr - M->Start + M->FileOffs, SEEK_SET); } else { WriteMult (D->F, M->FillVal, NewAddr-Addr); PrintNumVal ("SF_OFFSET", NewAddr - Addr); @@ -226,6 +226,12 @@ static void BinWriteMem (BinDesc* D, MemoryArea* M) unsigned long P = ftell (D->F); SegWrite (D->Filename, D->F, S->Seg, BinWriteExpr, D); PrintNumVal ("Wrote", (unsigned long) (ftell (D->F) - P)); + /* If we have just written an OVERWRITE segement, move position to the + * end of file, so that subsequent segments are written in the correct + * place. */ + if (S->Flags & SF_OVERWRITE) { + fseek (D->F, 0, SEEK_END); + } } else if (M->Flags & MF_FILL) { WriteMult (D->F, S->Seg->FillVal, S->Seg->Size); PrintNumVal ("Filled", (unsigned long) S->Seg->Size); diff --git a/src/ld65/config.c b/src/ld65/config.c index 6606f6976..79c38a108 100644 --- a/src/ld65/config.c +++ b/src/ld65/config.c @@ -2107,10 +2107,12 @@ unsigned CfgProcess (void) Addr += S->Seg->Size; /* If this segment will go out to the file, or its place - ** in the file will be filled, then increase the file size. + ** in the file will be filled, then increase the file size, + ** unless it's an OVERWRITE segment. */ if (S->Load == M && - ((S->Flags & SF_BSS) == 0 || (M->Flags & MF_FILL) != 0)) { + ((S->Flags & SF_BSS) == 0 || (M->Flags & MF_FILL) != 0) + && (S->Flags & SF_OVERWRITE) == 0) { M->F->Size += Addr - StartAddr; } } From dc4142e1a935cb453aa0496bba5a9dd49e0971e4 Mon Sep 17 00:00:00 2001 From: laubzega <mileksmyk@gmail.com> Date: Fri, 29 May 2020 00:04:12 -0700 Subject: [PATCH 0112/2710] Minor formatting changes after review. --- src/ld65/bin.c | 5 +++-- src/ld65/config.c | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ld65/bin.c b/src/ld65/bin.c index f2e741be5..bd822cc23 100644 --- a/src/ld65/bin.c +++ b/src/ld65/bin.c @@ -227,8 +227,9 @@ static void BinWriteMem (BinDesc* D, MemoryArea* M) SegWrite (D->Filename, D->F, S->Seg, BinWriteExpr, D); PrintNumVal ("Wrote", (unsigned long) (ftell (D->F) - P)); /* If we have just written an OVERWRITE segement, move position to the - * end of file, so that subsequent segments are written in the correct - * place. */ + ** end of file, so that subsequent segments are written in the correct + ** place. + */ if (S->Flags & SF_OVERWRITE) { fseek (D->F, 0, SEEK_END); } diff --git a/src/ld65/config.c b/src/ld65/config.c index 79c38a108..c22ced1ef 100644 --- a/src/ld65/config.c +++ b/src/ld65/config.c @@ -2111,8 +2111,8 @@ unsigned CfgProcess (void) ** unless it's an OVERWRITE segment. */ if (S->Load == M && - ((S->Flags & SF_BSS) == 0 || (M->Flags & MF_FILL) != 0) - && (S->Flags & SF_OVERWRITE) == 0) { + ((S->Flags & SF_BSS) == 0 || (M->Flags & MF_FILL) != 0) && + (S->Flags & SF_OVERWRITE) == 0) { M->F->Size += Addr - StartAddr; } } From 555282497c3ecf8b313d87d5973093af19c35bd5 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 30 May 2020 21:03:15 +0200 Subject: [PATCH 0113/2710] Removed --lib option from cl65. The general approach of cl65 when generating the command lines to be executed is to first put options and the put files. However, this doesn't work well with the --lib option which would rather need to be put when libraries in general are put. I opted to not add this special behavior to cl65 as * the use case for the --lib option is _VERY_ specific * cl65 is after all a wrapper for ordinary use cases --- doc/cl65.sgml | 1 - src/cl65/main.c | 10 ---------- 2 files changed, 11 deletions(-) diff --git a/doc/cl65.sgml b/doc/cl65.sgml index 989dce702..f00856bda 100644 --- a/doc/cl65.sgml +++ b/doc/cl65.sgml @@ -94,7 +94,6 @@ Long options: --help Help (this text) --include-dir dir Set a compiler include directory path --ld-args options Pass options to the linker - --lib file Link this library --lib-path path Specify a library search path --list-targets List all available targets --listing name Create an assembler listing file diff --git a/src/cl65/main.c b/src/cl65/main.c index 4a65e8729..9d536db82 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -807,7 +807,6 @@ static void Usage (void) " --help\t\t\tHelp (this text)\n" " --include-dir dir\t\tSet a compiler include directory path\n" " --ld-args options\t\tPass options to the linker\n" - " --lib file\t\t\tLink this library\n" " --lib-path path\t\tSpecify a library search path\n" " --list-targets\t\tList all available targets\n" " --listing name\t\tCreate an assembler listing file\n" @@ -1080,14 +1079,6 @@ static void OptLdArgs (const char* Opt attribute ((unused)), const char* Arg) -static void OptLib (const char* Opt attribute ((unused)), const char* Arg) -/* Library file follows (linker) */ -{ - CmdAddArg2 (&LD65, "--lib", Arg); -} - - - static void OptLibPath (const char* Opt attribute ((unused)), const char* Arg) /* Library search path (linker) */ { @@ -1374,7 +1365,6 @@ int main (int argc, char* argv []) { "--help", 0, OptHelp }, { "--include-dir", 1, OptIncludeDir }, { "--ld-args", 1, OptLdArgs }, - { "--lib", 1, OptLib }, { "--lib-path", 1, OptLibPath }, { "--list-targets", 0, OptListTargets }, { "--listing", 1, OptListing }, From 33e103fdc68e116fcf0dc6f64da7c4b52789d2ca Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 1 Jun 2020 01:28:48 +0800 Subject: [PATCH 0114/2710] Fixed Issue #1040: non-byte pointer +=/-= byte codegen bug. --- src/cc65/expr.c | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index e59f9b4d3..afc3523ae 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3456,28 +3456,32 @@ static void addsubeq (const GenDesc* Gen, ExprDesc *Expr, const char* Op) ** break, so this is the best error recovery. */ } - if (ED_IsConstAbs (&Expr2)) { - /* The resulting value is a constant. Scale it. */ - if (MustScale) { - Expr2.IVal *= CheckedSizeOf (Indirect (Expr->Type)); - } - rflags |= CF_CONST; - lflags |= CF_CONST; - } else { - /* Not constant, load into the primary */ - LoadExpr (CF_NONE, &Expr2); - if (MustScale) { - /* lhs is a pointer, scale rhs */ - g_scale (TypeOf (Expr2.Type), CheckedSizeOf (Indirect (Expr->Type))); - } - } /* Setup the code generator flags */ lflags |= TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR; rflags |= TypeOf (Expr2.Type) | CF_FORCECHAR; - /* Convert the type of the lhs to that of the rhs */ - g_typecast (lflags, rflags); + if (ED_IsConstAbs (&Expr2)) { + /* The resulting value is a constant */ + rflags |= CF_CONST; + lflags |= CF_CONST; + + /* Scale it */ + if (MustScale) { + Expr2.IVal *= CheckedSizeOf (Indirect (Expr->Type)); + } + } else { + /* Not constant, load into the primary */ + LoadExpr (CF_NONE, &Expr2); + + /* Convert the type of the rhs to that of the lhs */ + g_typecast (lflags, rflags & ~CF_FORCECHAR); + + if (MustScale) { + /* lhs is a pointer, scale rhs */ + g_scale (TypeOf (Expr2.Type), CheckedSizeOf (Indirect (Expr->Type))); + } + } /* Output apropriate code depending on the location */ switch (ED_GetLoc (Expr)) { From 68f53e69f1e72b9c70fae4e0612d894b03640247 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 1 Jun 2020 01:28:59 +0800 Subject: [PATCH 0115/2710] Fixed Issues #420 and #919 by always outputing the code segment before the three data segments for functions. --- src/cc65/codeseg.c | 5 ++++- src/cc65/segments.c | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/cc65/codeseg.c b/src/cc65/codeseg.c index e2fd84a7c..58586affd 100644 --- a/src/cc65/codeseg.c +++ b/src/cc65/codeseg.c @@ -1353,7 +1353,7 @@ void CS_OutputEpilogue (const CodeSeg* S) */ { if (S->Func) { - WriteOutput ("\n.endproc\n\n"); + WriteOutput (".endproc\n\n"); } } @@ -1423,6 +1423,9 @@ void CS_Output (CodeSeg* S) CE_Output (E); } + /* Prettyier formatting */ + WriteOutput ("\n"); + /* If debug info is enabled, terminate the last line number information */ if (DebugInfo) { WriteOutput ("\t.dbg\tline\n"); diff --git a/src/cc65/segments.c b/src/cc65/segments.c index 5e493e8f5..6efbf68b7 100644 --- a/src/cc65/segments.c +++ b/src/cc65/segments.c @@ -289,14 +289,14 @@ void OutputSegments (const Segments* S) /* Output the text segment */ TS_Output (S->Text); + /* Output the code segment */ + CS_Output (S->Code); + /* Output the three data segments */ DS_Output (S->Data); DS_Output (S->ROData); DS_Output (S->BSS); - /* Output the code segment */ - CS_Output (S->Code); - /* Output the code segment epiloque */ CS_OutputEpilogue (S->Code); } From 07a5324a81a201fc089e076031f06a221d103f4c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 1 Jun 2020 01:28:59 +0800 Subject: [PATCH 0116/2710] Fixed Issue #1028 by outputing local literals when exiting the function scope. --- src/cc65/compile.c | 2 +- src/cc65/function.c | 5 +++++ src/cc65/litpool.c | 28 ++++++++++++---------------- src/cc65/litpool.h | 7 +++++-- 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index d914afb97..ef66d38d2 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -453,7 +453,7 @@ void FinishCompile (void) } /* Output the literal pool */ - OutputLiteralPool (); + OutputGlobalLiteralPool (); /* Emit debug infos if enabled */ EmitDebugInfo (); diff --git a/src/cc65/function.c b/src/cc65/function.c index 3256d7541..8da084ac1 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -582,6 +582,11 @@ void NewFunc (SymEntry* Func) /* Restore the old literal pool, remembering the one for the function */ Func->V.F.LitPool = PopLiteralPool (); + /* If --local-strings was given, output the literals now */ + if (IS_Get (&LocalStrings)) { + OutputLocalLiteralPool (Func->V.F.LitPool); + } + /* Switch back to the old segments */ PopSegments (); diff --git a/src/cc65/litpool.c b/src/cc65/litpool.c index c427310d9..eb31c7ecc 100644 --- a/src/cc65/litpool.c +++ b/src/cc65/litpool.c @@ -147,18 +147,6 @@ Literal* UseLiteral (Literal* L) /* Increase the reference count */ ++L->RefCount; - /* If --local-strings was given, immediately output the literal */ - if (IS_Get (&LocalStrings)) { - /* Switch to the proper data segment */ - if (IS_Get (&WritableStrings)) { - g_usedata (); - } else { - g_userodata (); - } - /* Output the literal */ - OutputLiteral (L); - } - /* Return the literal */ return L; } @@ -454,12 +442,20 @@ static void OutputReadOnlyLiterals (Collection* Literals) -void OutputLiteralPool (void) -/* Output the global literal pool */ +void OutputLocalLiteralPool (LiteralPool* Pool) +/* Output the local literal pool */ { /* Output both sorts of literals */ - OutputWritableLiterals (&GlobalPool->WritableLiterals); - OutputReadOnlyLiterals (&GlobalPool->ReadOnlyLiterals); + OutputWritableLiterals (&Pool->WritableLiterals); + OutputReadOnlyLiterals (&Pool->ReadOnlyLiterals); +} + + + +void OutputGlobalLiteralPool (void) +/* Output the global literal pool */ +{ + OutputLocalLiteralPool (GlobalPool); } diff --git a/src/cc65/litpool.h b/src/cc65/litpool.h index 6efdfb089..78f432138 100644 --- a/src/cc65/litpool.h +++ b/src/cc65/litpool.h @@ -113,8 +113,11 @@ void MoveLiteralPool (LiteralPool* LocalPool); ** function will free LocalPool after moving the used string literals. */ -void OutputLiteralPool (void); -/* Output the literal pool */ +void OutputLocalLiteralPool (LiteralPool* Pool); +/* Output the local literal pool */ + +void OutputGlobalLiteralPool (void); +/* Output the global literal pool */ Literal* AddLiteral (const char* S); /* Add a literal string to the literal pool. Return the literal. */ From 8066cd9ace435932950770ff5bd74aa3b73dcba2 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 16 Apr 2020 17:17:52 +0800 Subject: [PATCH 0117/2710] Fixed wrong case in PreDec codegen, which never seems to be in use though. --- src/cc65/expr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index afc3523ae..84f11189e 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1569,7 +1569,7 @@ static void PreDec (ExprDesc* Expr) case E_LOC_PRIMARY: /* The primary register */ - g_inc (Flags, Val); + g_dec (Flags, Val); break; case E_LOC_EXPR: From f9204e5b6fae8843a45013e63fa91c0a72b8d4d2 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 16 Apr 2020 18:38:49 +0800 Subject: [PATCH 0118/2710] Fixed g_addlocal codegen with long types. --- src/cc65/codegen.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index a611f4f6a..35af5281e 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -1541,16 +1541,17 @@ void g_addlocal (unsigned flags, int offs) /* Add a local variable to ax */ { unsigned L; + int NewOff; /* Correct the offset and check it */ - offs -= StackPtr; - CheckLocalOffs (offs); + NewOff = offs - StackPtr; + CheckLocalOffs (NewOff); switch (flags & CF_TYPEMASK) { case CF_CHAR: L = GetLocalLabel(); - AddCodeLine ("ldy #$%02X", offs & 0xFF); + AddCodeLine ("ldy #$%02X", NewOff & 0xFF); AddCodeLine ("clc"); AddCodeLine ("adc (sp),y"); AddCodeLine ("bcc %s", LocalLabelName (L)); @@ -1559,7 +1560,7 @@ void g_addlocal (unsigned flags, int offs) break; case CF_INT: - AddCodeLine ("ldy #$%02X", offs & 0xFF); + AddCodeLine ("ldy #$%02X", NewOff & 0xFF); AddCodeLine ("clc"); AddCodeLine ("adc (sp),y"); AddCodeLine ("pha"); From 14c62f136814009953c3a65abaeb1f06e5d1b406 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 4 Jun 2020 12:58:05 -0400 Subject: [PATCH 0119/2710] Allowed the TGI API to support 256 colors. --- include/tgi.h | 2 +- libsrc/tgi/tgi_setcolor.s | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/include/tgi.h b/include/tgi.h index f458180c5..15a6437cc 100644 --- a/include/tgi.h +++ b/include/tgi.h @@ -134,7 +134,7 @@ void __fastcall__ tgi_setdrawpage (unsigned char page); /* Set the drawable page. Will set an error if the page is not available. */ unsigned char tgi_getcolorcount (void); -/* Get the number of available colors. */ +/* Get the number of available colors. Zero means 256 colors. */ unsigned char tgi_getmaxcolor (void); /* Return the maximum supported color number (the number of colors would diff --git a/libsrc/tgi/tgi_setcolor.s b/libsrc/tgi/tgi_setcolor.s index 8e6fdc555..16f075767 100644 --- a/libsrc/tgi/tgi_setcolor.s +++ b/libsrc/tgi/tgi_setcolor.s @@ -1,5 +1,6 @@ ; -; Ullrich von Bassewitz, 21.06.2002 +; 2002-06-21, Ullrich von Bassewitz +; 2020-06-04, Greg King ; ; void __fastcall__ tgi_setcolor (unsigned char color); ; /* Set the current drawing color */ @@ -11,9 +12,11 @@ cmp _tgi_colorcount ; Compare to available colors bcs @L1 - sta _tgi_color ; Remember the drawing color +@L0: sta _tgi_color ; Remember the drawing color jmp tgi_setcolor ; Call the driver -@L1: jmp tgi_inv_arg ; Invalid argument + +@L1: ldx _tgi_colorcount + beq @L0 ; Zero means 256 colors + jmp tgi_inv_arg ; Invalid argument .endproc - From 15e2afcdf3109dadd8a2802af12cc3ee841ad9dc Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 4 Jun 2020 21:40:40 +0200 Subject: [PATCH 0120/2710] Split libref.s into multiple files to prevent inclusion of unnecessary code. --- libsrc/atari/libref.s | 8 +------- libsrc/atari/tgiref.s | 13 +++++++++++++ 2 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 libsrc/atari/tgiref.s diff --git a/libsrc/atari/libref.s b/libsrc/atari/libref.s index 171bd6de6..933eb5911 100644 --- a/libsrc/atari/libref.s +++ b/libsrc/atari/libref.s @@ -2,14 +2,8 @@ ; Oliver Schmidt, 2013-05-31 ; - .export em_libref, joy_libref, tgi_libref + .export em_libref, joy_libref .import _exit em_libref := _exit joy_libref := _exit -.ifdef __ATARIXL__ - .import CIO_handler -tgi_libref := CIO_handler -.else -tgi_libref := _exit -.endif diff --git a/libsrc/atari/tgiref.s b/libsrc/atari/tgiref.s new file mode 100644 index 000000000..5ac42fb46 --- /dev/null +++ b/libsrc/atari/tgiref.s @@ -0,0 +1,13 @@ +; +; Oliver Schmidt, 2013-05-31 +; + + .export tgi_libref + +.ifdef __ATARIXL__ + .import CIO_handler +tgi_libref := CIO_handler +.else + .import _exit +tgi_libref := _exit +.endif From 7b2e4d0c7f606ce8f5d65eef430c26e6dc95b1e0 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 4 Jun 2020 23:22:47 +0200 Subject: [PATCH 0121/2710] Reflect that the Apple //c supports only one joystick. --- libsrc/apple2/joy/a2.stdjoy.s | 32 +++++++++++++++++++++++++------- libsrc/apple2/joyref.s | 8 ++++++++ libsrc/apple2/libref.s | 3 +-- 3 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 libsrc/apple2/joyref.s diff --git a/libsrc/apple2/joy/a2.stdjoy.s b/libsrc/apple2/joy/a2.stdjoy.s index 7e90f7b98..8aa82ba7d 100644 --- a/libsrc/apple2/joy/a2.stdjoy.s +++ b/libsrc/apple2/joy/a2.stdjoy.s @@ -44,25 +44,37 @@ PREAD := $FB1E ; Read paddle in X, return AD conv. value in Y ; Library reference - .addr $0000 +libref: .addr $0000 ; Jump table .addr INSTALL .addr UNINSTALL .addr COUNT - .addr READJOY + .addr READ ; ------------------------------------------------------------------------ - .code + .data + +maxnum: .byte $00 ; Maximum joystick number (0 or 1) ; INSTALL routine. Is called after the driver is loaded into memory. If ; possible, check if the hardware is present and determine the amount of ; memory available. ; Must return an JOY_ERR_xx code in a/x. INSTALL: - lda #<JOY_ERR_OK + lda libref + ldx libref+1 + sta ostype+1 + stx ostype+2 +ostype: jsr $0000 + and #$F0 ; Mask variants + cmp #$50 ; Any Apple //c + beq :+ ; Only one joystick + inc maxnum + +: lda #<JOY_ERR_OK ldx #>JOY_ERR_OK ; Fall through @@ -71,16 +83,22 @@ INSTALL: UNINSTALL: rts +; ------------------------------------------------------------------------ + + .code + ; COUNT: Return the total number of available joysticks in a/x. COUNT: - lda #$02 ; Number of joysticks we support + ldx maxnum + inx + txa ; Number of joysticks we support ldx #$00 rts ; READ: Read a particular joystick passed in A. -READJOY: +READ: bit $C082 ; Switch in ROM - and #$01 ; Restrict joystick number + and maxnum ; Restrict joystick number ; Read horizontal paddle asl ; Joystick number -> paddle number diff --git a/libsrc/apple2/joyref.s b/libsrc/apple2/joyref.s new file mode 100644 index 000000000..8a9609bd4 --- /dev/null +++ b/libsrc/apple2/joyref.s @@ -0,0 +1,8 @@ +; +; Oliver Schmidt, 2020-06-04 +; + + .export joy_libref + .import _get_ostype + +joy_libref := _get_ostype diff --git a/libsrc/apple2/libref.s b/libsrc/apple2/libref.s index fb22515bd..8aa54abab 100644 --- a/libsrc/apple2/libref.s +++ b/libsrc/apple2/libref.s @@ -2,11 +2,10 @@ ; Oliver Schmidt, 2013-05-31 ; - .export em_libref, joy_libref, mouse_libref, ser_libref, tgi_libref + .export em_libref, mouse_libref, ser_libref, tgi_libref .import _exit em_libref := _exit -joy_libref := _exit mouse_libref := _exit ser_libref := _exit tgi_libref := _exit From 8b5ae001e555cfa8fc9c747b96539cfaff643ae8 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 5 Jun 2020 13:37:20 -0400 Subject: [PATCH 0122/2710] Refactored the TGI demo. Cleared the screen at the beginning of each demo instead of at the end. Setting the colors before clearing makes it more reliable and consistent across platforms. --- samples/tgidemo.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/samples/tgidemo.c b/samples/tgidemo.c index de743314e..93e91899b 100644 --- a/samples/tgidemo.c +++ b/samples/tgidemo.c @@ -38,8 +38,9 @@ static unsigned AspectRatio; static void CheckError (const char* S) { unsigned char Error = tgi_geterror (); + if (Error != TGI_ERR_OK) { - printf ("%s: %d\n", S, Error); + printf ("%s: %u\n", S, Error); if (doesclrscrafterexit ()) { cgetc (); } @@ -74,19 +75,19 @@ static void DoCircles (void) unsigned Y = MaxY / 2; tgi_setpalette (Palette); + tgi_setcolor (COLOR_FORE); + tgi_clear (); + tgi_line (0, 0, MaxX, MaxY); + tgi_line (0, MaxY, MaxX, 0); while (!kbhit ()) { - tgi_setcolor (COLOR_FORE); - tgi_line (0, 0, MaxX, MaxY); - tgi_line (0, MaxY, MaxX, 0); + Color = (Color == COLOR_FORE) ? COLOR_BACK : COLOR_FORE; tgi_setcolor (Color); for (I = 10; I < 240; I += 10) { tgi_ellipse (X, Y, I, tgi_imulround (I, AspectRatio)); } - Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE; } cgetc (); - tgi_clear (); } @@ -95,19 +96,19 @@ static void DoCheckerboard (void) { static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_BLACK }; unsigned X, Y; - unsigned char Color; + unsigned char Color = COLOR_BACK; tgi_setpalette (Palette); - Color = COLOR_BACK; + tgi_clear (); + while (1) { for (Y = 0; Y <= MaxY; Y += 10) { for (X = 0; X <= MaxX; X += 10) { + Color = (Color == COLOR_FORE) ? COLOR_BACK : COLOR_FORE; tgi_setcolor (Color); tgi_bar (X, Y, X+9, Y+9); - Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE; if (kbhit ()) { cgetc (); - tgi_clear (); return; } } @@ -129,6 +130,7 @@ static void DoDiagram (void) tgi_setpalette (Palette); tgi_setcolor (COLOR_FORE); + tgi_clear (); /* Determine zero and aplitude */ YOrigin = MaxY / 2; @@ -158,7 +160,6 @@ static void DoDiagram (void) } cgetc (); - tgi_clear (); } @@ -170,6 +171,7 @@ static void DoLines (void) tgi_setpalette (Palette); tgi_setcolor (COLOR_FORE); + tgi_clear (); for (X = 0; X <= MaxY; X += 10) { tgi_line (0, 0, MaxY, X); @@ -179,7 +181,6 @@ static void DoLines (void) } cgetc (); - tgi_clear (); } @@ -203,7 +204,6 @@ int main (void) tgi_init (); CheckError ("tgi_init"); - tgi_clear (); /* Get stuff from the driver */ MaxX = tgi_getmaxx (); From 20a9c0c336387306fa3bdad9d46a79911de77f4c Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 6 Jun 2020 15:14:56 +0200 Subject: [PATCH 0123/2710] Replaced call to paddle read ROM routine with custom code. As described e.g. in the Apple IIe Technote #6: 'The Apple II Paddle Circuits' it doesn't work to call PREAD several times in immediate succession. However, so far the Apple II joystick driver did just that in order to read the two joystick axis. Therefore the driver now uses a custom routine that reads both paddles _at_the_same_time_. The code doing so requires nearly twice the cycles meaning that the overall time for a joy_read() stays roughly the same. However, twice the cycles in the read loop means half the resolution. But for the cc65 joystick driver use case that doesn't hurt at all as the driver is supposed to only detect neutral vs. left/right and up/down. CPU accelerators are supposed to detect access to $C070 and slow down for some time automatically. However, the IIgs rather comes with a modified ROM routine. Therefore it is necessary to manually slow down the IIgs when replacing the ROM routine. --- asminc/apple2.inc | 16 ++++- libsrc/apple2/joy/a2.stdjoy.s | 112 ++++++++++++++++++++++------------ 2 files changed, 87 insertions(+), 41 deletions(-) diff --git a/asminc/apple2.inc b/asminc/apple2.inc index 226a85778..19906ec2f 100644 --- a/asminc/apple2.inc +++ b/asminc/apple2.inc @@ -62,9 +62,19 @@ DHIRESON := $C05E ; Enable double-width graphics DHIRESOFF := $C05F ; Disable double-width graphics ; Game controller -BUTN0 := $C061 ; Open-Apple Key -BUTN1 := $C062 ; Closed-Apple Key +TAPEIN := $C060 ; Read casette input / Switch input 3 +BUTN0 := $C061 ; Switch input 0 / Open-Apple key +BUTN1 := $C062 ; Switch input 1 / Closed-Apple key +BUTN2 := $C063 ; Switch input 2 / Shift key +PADDL0 := $C064 ; Analog input 0 +PADDL1 := $C065 ; Analog input 1 +PADDL2 := $C066 ; Analog input 2 +PADDL3 := $C067 ; Analog input 3 +PTRIG := $C070 ; Analog input reset -; IOU +; Input/Output Unit IOUDISON := $C07E ; Disable IOU IOUDISOFF := $C07F ; Enable IOU + +; Control Your Apple +CYAREG := $C036 ; Bits 0-3=disk detect 4=shadow all banks 7=fast diff --git a/libsrc/apple2/joy/a2.stdjoy.s b/libsrc/apple2/joy/a2.stdjoy.s index 8aa82ba7d..a3a935e5b 100644 --- a/libsrc/apple2/joy/a2.stdjoy.s +++ b/libsrc/apple2/joy/a2.stdjoy.s @@ -19,13 +19,8 @@ ; Constants -THRESHOLD = 20 ; Deviation from center triggering movement - -; ------------------------------------------------------------------------ - -; ROM entry points - -PREAD := $FB1E ; Read paddle in X, return AD conv. value in Y +LOWER_THRESHOLD = 05 +UPPER_THRESHOLD = 85 ; ------------------------------------------------------------------------ @@ -55,9 +50,16 @@ libref: .addr $0000 ; ------------------------------------------------------------------------ - .data + .bss -maxnum: .byte $00 ; Maximum joystick number (0 or 1) +maxnum: .res 1 ; Maximum joystick number (0 or 1) +iigs: .res 1 +value0: .res 1 +value1: .res 1 + +; ------------------------------------------------------------------------ + + .data ; INSTALL routine. Is called after the driver is loaded into memory. If ; possible, check if the hardware is present and determine the amount of @@ -68,13 +70,19 @@ INSTALL: ldx libref+1 sta ostype+1 stx ostype+2 -ostype: jsr $0000 +ostype: jsr $0000 ; X = 0 and #$F0 ; Mask variants cmp #$50 ; Any Apple //c beq :+ ; Only one joystick - inc maxnum + inx +: stx maxnum + ldx #$00 + cmp #$80 ; Any Apple IIgs + bne :+ + inx +: stx iigs -: lda #<JOY_ERR_OK + lda #<JOY_ERR_OK ldx #>JOY_ERR_OK ; Fall through @@ -87,7 +95,7 @@ UNINSTALL: .code -; COUNT: Return the total number of available joysticks in a/x. +; COUNT routine. Return the total number of available joysticks in a/x. COUNT: ldx maxnum inx @@ -95,51 +103,79 @@ COUNT: ldx #$00 rts -; READ: Read a particular joystick passed in A. +; READ routine. Read a particular joystick passed in A. READ: - bit $C082 ; Switch in ROM - and maxnum ; Restrict joystick number - - ; Read horizontal paddle asl ; Joystick number -> paddle number - tax ; Set paddle number (0, 2) - jsr PREAD ; Read paddle value - lda #$00 ; 0 0 0 0 0 0 0 0 - cpy #127 - THRESHOLD - ror ; !LEFT 0 0 0 0 0 0 0 - cpy #127 + THRESHOLD - ror ; RIGHT !LEFT 0 0 0 0 0 0 + tax + ldy #$00 + sty value0 + sty value1 - ; Read vertical paddle + ; If IIgs -> set speed to normal + lda iigs + beq nogs1 + lda CYAREG pha - inx ; Set paddle number (1, 3) - jsr PREAD ; Read paddle value + and #%01111111 + sta CYAREG + + ; Read both paddles simultaneously +nogs1: lda PTRIG ; Trigger paddles +loop: lda PADDL0,x ; Read paddle (0 or 2) + bmi set0 ; Cycles: 2 3 + nop ; Cycles: 2 + bpl nop0 ; Cycles: 3 +set0: sty value0 ; Cycles: 4 +nop0: ; - - + ; Cycles: 7 7 + lda PADDL1,x ; Read paddle (1 or 3) + bmi set1 ; Cycles: 2 3 + nop ; Cycles: 2 + bpl nop1 ; Cycles: 3 +set1: sty value1 ; Cycles: 4 +nop1: ; - - + ; Cycles: 7 7 + iny + cpy #UPPER_THRESHOLD+1 + bne loop + + ; If IIgs -> restore speed + lda iigs + beq nogs2 pla - cpy #127 - THRESHOLD + sta CYAREG + + ; Transform paddle readings to directions +nogs2: lda #$00 ; 0 0 0 0 0 0 0 0 + ldy value0 + cpy #LOWER_THRESHOLD + ror ; !LEFT 0 0 0 0 0 0 0 + cpy #UPPER_THRESHOLD + ror ; RIGHT !LEFT 0 0 0 0 0 0 + ldy value1 + cpy #LOWER_THRESHOLD ror ; !UP RIGHT !LEFT 0 0 0 0 0 - cpy #127 + THRESHOLD + cpy #UPPER_THRESHOLD ror ; DOWN !UP RIGHT !LEFT 0 0 0 0 ; Read primary button tay - lda BUTN0-1,x ; Check button (1, 3) + lda BUTN0,x ; Check button (0 or 2) asl tya - ror ; BTN DOWN !UP RIGHT !LEFT 0 0 0 + ror ; BTN_1 DOWN !UP RIGHT !LEFT 0 0 0 ; Read secondary button tay - inx txa - and #$03 ; IIgs has fourth button at TAPEIN + eor #$02 ; IIgs has fourth button at TAPEIN tax - lda BUTN0-1,x ; Check button (2, 0) + lda TAPEIN,x ; Check button (1 or 3) asl tya - ror ; BTN2 BTN DOWN !UP RIGHT !LEFT 0 0 + ror ; BTN_2 BTN_1 DOWN !UP RIGHT !LEFT 0 0 ; Finalize - eor #%00010100 ; BTN2 BTN DOWN UP RIGHT LEFT 0 0 + eor #%00010100 ; BTN_2 BTN_1 DOWN UP RIGHT LEFT 0 0 ldx #$00 - bit $C080 ; Switch in LC bank 2 for R/O rts From bc1e884988fa1b3ee802f607511ddf16f6a7a562 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 8 Jun 2020 16:39:11 -0400 Subject: [PATCH 0124/2710] Documented how the TGI API shows when a palette has 256 colors. --- doc/tgi.sgml | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/doc/tgi.sgml b/doc/tgi.sgml index c5878622e..73a0f3bbd 100644 --- a/doc/tgi.sgml +++ b/doc/tgi.sgml @@ -241,14 +241,34 @@ color = tgi_getcolor(); <tag/Function/Get the number of available colors. <tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/ <tag/Declaration/<tt/unsigned char tgi_getcolorcount (void);/ -<tag/Description/Tgi platforms use indexed color palettes. This function +<tag/Description/TGI platforms use indexed color palettes. This function returns the number of entries we can use in the palette. + +<tt/tgi_setcolor()/ can accept numbers from <tt/0/ to <tt/255/. That is 256 +possible colors, but an <tt/(unsigned char)/ cannot hold that number. +Therefore, the number zero is used to indicate when a palette has 256 entries. +A portable program should test for that number, and do appropriate actions. +A program might assign the count to an <tt/unsigned int/ (and change a zero to +a 256). Or, it might rely on the fact that <tt/(unsigned char)/ will +"wrap-around" when it is incremented beyond 255. <tag/Availability/cc65 <tag/See also/Other tgi functions -<tag/Example/<verb> +<tag/Examples/<verb> if (tgi_getcolorcount() == 2) { printf("Only monochrome graphics is supported\n"); } + +static unsigned char num_colors; +static unsigned char color; +... +num_colors = tgi_getcolorcount(); +... +++color; +if (num_colors == 0) { + tgi_setcolor(color); +} else { + tgi_setcolor(color % num_colors); +} </verb> </descrip> </quote> From 87144a15dd5b3ccdeee97b987435ef00f7637707 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 8 Jun 2020 17:22:02 -0400 Subject: [PATCH 0125/2710] Fixed the "verbatim" tags in the TGI document. --- doc/tgi.sgml | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/doc/tgi.sgml b/doc/tgi.sgml index 73a0f3bbd..9f37962c3 100644 --- a/doc/tgi.sgml +++ b/doc/tgi.sgml @@ -41,11 +41,11 @@ of range. <ref id="tgi_ellipse" name="tgi_ellipse">, <ref id="tgi_pieslice" name="tgi_pieslice">, <ref id="tgi_setcolor" name="tgi_setcolor"> -<tag/Example/<verb> +<tag/Example/<tscreen><verb> /* Draw the upper half of an ellipse */ tgi_setcolor(TGI_COLOR_BLUE); tgi_arc (50, 50, 40, 20, 0, 180); -</verb> +</verb></tscreen> </descrip> </quote> @@ -66,10 +66,10 @@ be used in presence of a prototype. </itemize> <tag/Availability/cc65 <tag/See also/Other tgi function -<tag/Example/<verb> +<tag/Example/<tscreen><verb> tgi_setcolor(TGI_COLOR_GREEN); tgi_bar(10, 10, 100, 60); -</verb> +</verb></tscreen> </descrip> </quote> @@ -93,10 +93,10 @@ be used in presence of a prototype. <ref id="tgi_ellipse" name="tgi_ellipse">, <ref id="tgi_pieslice" name="tgi_pieslice">, <ref id="tgi_setcolor" name="tgi_setcolor"> -<tag/Example/<verb> +<tag/Example/<tscreen><verb> tgi_setcolor(TGI_COLOR_BLACK); tgi_circle(50, 40, 40); -</verb> +</verb></tscreen> </descrip> </quote> @@ -153,10 +153,10 @@ be used in presence of a prototype. <ref id="tgi_circle" name="tgi_circle">, <ref id="tgi_pieslice" name="tgi_pieslice">, <ref id="tgi_setcolor" name="tgi_setcolor"> -<tag/Example/<verb> +<tag/Example/<tscreen><verb> tgi_setcolor(TGI_COLOR_RED); tgi_ellipse (50, 40, 40, 20); -</verb> +</verb></tscreen> </descrip> </quote> @@ -227,9 +227,9 @@ and then you change the green of the palette to blue using tgi_setpalette then after this painting in TGI_COLOR_GREEN will actually be blue. <tag/Availability/cc65 <tag/See also/Other tgi functions -<tag/Example/<verb> +<tag/Example/<tscreen><verb> color = tgi_getcolor(); -</verb> +</verb></tscreen> </descrip> </quote> @@ -253,7 +253,7 @@ a 256). Or, it might rely on the fact that <tt/(unsigned char)/ will "wrap-around" when it is incremented beyond 255. <tag/Availability/cc65 <tag/See also/Other tgi functions -<tag/Examples/<verb> +<tag/Examples/<tscreen><verb> if (tgi_getcolorcount() == 2) { printf("Only monochrome graphics is supported\n"); } @@ -269,7 +269,7 @@ if (num_colors == 0) { } else { tgi_setcolor(color % num_colors); } -</verb> +</verb></tscreen> </descrip> </quote> @@ -531,10 +531,10 @@ name="tgi_clear">/ after <tt/tgi_init/. </itemize> <tag/Availability/cc65 <tag/See also/Other tgi functions. -<tag/Example/<verb> +<tag/Example/<tscreen><verb> tgi_install(tgi_static_stddrv); //Include the driver statically instead of loading it. tgi_init(); //Set up the default palette and clear the screen. -</verb> +</verb></tscreen> </descrip> </quote> @@ -558,10 +558,10 @@ used in presence of a prototype. <ref id="tgi_load_driver" name="tgi_load_driver">, <ref id="tgi_uninstall" name="tgi_uninstall">, <ref id="tgi_unload" name="tgi_unload"> -<tag/Example/<verb> +<tag/Example/<tscreen><verb> tgi_install(tgi_static_stddrv); //Include the driver statically instead of loading it. tgi_init(); //Set up the default palette and clear the screen. -</verb> +</verb></tscreen> </descrip> </quote> @@ -607,7 +607,7 @@ be used in presence of a prototype. </itemize> <tag/Availability/cc65 <tag/See also/Other tgi functions. -<tag/Example/<verb> +<tag/Example/<tscreen><verb> #define tgi_sprite(spr) tgi_ioctl(0, (void*)(spr)) #define tgi_flip() tgi_ioctl(1, (void*)0) #define tgi_setbgcolor(bgcol) tgi_ioctl(2, (void*)(bgcol)) @@ -620,7 +620,7 @@ if (!tgi_busy()) { tgi_outttextxy(20,40,"Hello World"); tgi_updatedisplay(); } -</verb> +</verb></tscreen> </descrip> </quote> @@ -779,11 +779,11 @@ of range. <ref id="tgi_circle" name="tgi_circle">, <ref id="tgi_ellipse" name="tgi_ellipse">, <ref id="tgi_setcolor" name="tgi_setcolor"> -<tag/Example/<verb> +<tag/Example/<tscreen><verb> /* Draw the closed upper half of an ellipse */ tgi_setcolor(TGI_COLOR_BLUE); tgi_pieslice (50, 50, 40, 20, 0, 180); -</verb> +</verb></tscreen> </descrip> </quote> @@ -834,12 +834,12 @@ be used in presence of a prototype. </itemize> <tag/Availability/cc65 <tag/See also/Other tgi functions. -<tag/Example/<verb> +<tag/Example/<tscreen><verb> tgi_setcolor(TGI_COLOR_BLACK); tgi_bar(0,0,30,30); tgi_setcolor(TGI_COLOR_WHITE); tgi_bar(10,10,20,20); -</verb> +</verb></tscreen> </descrip> </quote> @@ -861,7 +861,7 @@ be used in presence of a prototype. </itemize> <tag/Availability/cc65 <tag/See also/Other tgi functions. -<tag/Example/<verb> +<tag/Example/<tscreen><verb> tgi_setdrawpage(1); tgi_outtextxy(10, 10, "Hello World"); tgi_setviewpage(1); // Show page 1 @@ -869,7 +869,7 @@ tgi_setdrawpage(0); tgi_outtextxy(10, 10, "Creating next frame"); ... tgi_setviewpage(0); // Show page 0 -</verb> +</verb></tscreen> </descrip> </quote> @@ -973,7 +973,7 @@ be used in presence of a prototype. </itemize> <tag/Availability/cc65 <tag/See also/Other tgi functions. -<tag/Example/<verb> +<tag/Example/<tscreen><verb> tgi_setdrawpage(1); tgi_outtextxy(10, 10, "Hello World"); tgi_setviewpage(1); // Show page 1 @@ -981,7 +981,7 @@ tgi_setdrawpage(0); tgi_outtextxy(10, 10, "Creating next frame"); ... tgi_setviewpage(0); // Show page 0 -</verb> +</verb></tscreen> </descrip> </quote> From 2acb3b153bb3a5c29a8abe2c417a68b39a689d1b Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 8 Jun 2020 20:09:45 -0400 Subject: [PATCH 0126/2710] Added some "See also" links to the TGI color-count descriptions. --- doc/tgi.sgml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/doc/tgi.sgml b/doc/tgi.sgml index 9f37962c3..b1497ca70 100644 --- a/doc/tgi.sgml +++ b/doc/tgi.sgml @@ -252,7 +252,12 @@ A program might assign the count to an <tt/unsigned int/ (and change a zero to a 256). Or, it might rely on the fact that <tt/(unsigned char)/ will "wrap-around" when it is incremented beyond 255. <tag/Availability/cc65 -<tag/See also/Other tgi functions +<tag/See also/<ref id="tgi_getcolor" name="tgi_getcolor()">, +<ref id="tgi_getdefpalette" name="tgi_getdefpalette()">, +<ref id="tgi_getmaxcolor" name="tgi_getmaxcolor()">, +<ref id="tgi_getpalette" name="tgi_getpalette()">, +<ref id="tgi_setcolor" name="tgi_setcolor()">, +<ref id="tgi_setpalette" name="tgi_setpalette()"> <tag/Examples/<tscreen><verb> if (tgi_getcolorcount() == 2) { printf("Only monochrome graphics is supported\n"); @@ -336,7 +341,12 @@ be used in presence of a prototype. <tag/Declaration/<tt/unsigned char tgi_getmaxcolor (void);/ <tag/Description/Get the highest index of the palette. <tag/Availability/cc65 -<tag/See also/Other tgi functions +<tag/See also/<ref id="tgi_getcolor" name="tgi_getcolor()">, +<ref id="tgi_getcolorcount" name="tgi_getcolorcount()">, +<ref id="tgi_getdefpalette" name="tgi_getdefpalette()">, +<ref id="tgi_getpalette" name="tgi_getpalette()">, +<ref id="tgi_setcolor" name="tgi_setcolor()">, +<ref id="tgi_setpalette" name="tgi_setpalette()"> <tag/Example/None. </descrip> </quote> From 6adf175691f30cedd6b143dd5b6304206871eb4b Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 14 Jun 2020 21:54:33 +0200 Subject: [PATCH 0127/2710] Optimized get_ostype() return values for asm usage. Making sure that all but //c machines have bit 6 clear allows to use BIT/BVS to detect the //c machines. --- include/apple2.h | 12 ++++++------ libsrc/apple2/get_ostype.s | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/include/apple2.h b/include/apple2.h index f205fdcb9..dbed3364d 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -111,12 +111,12 @@ #define APPLE_IIIEM 0x20 /* Apple /// (emulation) */ #define APPLE_IIE 0x30 /* Apple //e */ #define APPLE_IIEENH 0x31 /* Apple //e (enhanced) */ -#define APPLE_IIECARD 0x40 /* Apple //e Option Card */ -#define APPLE_IIC 0x50 /* Apple //c */ -#define APPLE_IIC35 0x51 /* Apple //c (3.5 ROM) */ -#define APPLE_IICEXP 0x53 /* Apple //c (Mem. Exp.) */ -#define APPLE_IICREV 0x54 /* Apple //c (Rev. Mem. Exp.) */ -#define APPLE_IICPLUS 0x55 /* Apple //c Plus */ +#define APPLE_IIECARD 0x32 /* Apple //e Option Card */ +#define APPLE_IIC 0x40 /* Apple //c */ +#define APPLE_IIC35 0x41 /* Apple //c (3.5 ROM) */ +#define APPLE_IICEXP 0x43 /* Apple //c (Mem. Exp.) */ +#define APPLE_IICREV 0x44 /* Apple //c (Rev. Mem. Exp.) */ +#define APPLE_IICPLUS 0x45 /* Apple //c Plus */ #define APPLE_IIGS 0x80 /* Apple IIgs */ #define APPLE_IIGS1 0x81 /* Apple IIgs (ROM 1) */ #define APPLE_IIGS3 0x83 /* Apple IIgs (ROM 3) */ diff --git a/libsrc/apple2/get_ostype.s b/libsrc/apple2/get_ostype.s index dd44aa831..71b43d174 100644 --- a/libsrc/apple2/get_ostype.s +++ b/libsrc/apple2/get_ostype.s @@ -49,13 +49,13 @@ value: .byte $38, $10 ; Apple ][ .byte $EA, $AD, $11 ; Apple ][+ .byte $EA, $8A, $20 ; Apple /// (emulation) .byte $06, $EA, $30 ; Apple //e - .byte $06, $E0, $02, $40 ; Apple //e Option Card + .byte $06, $E0, $02, $32 ; Apple //e Option Card .byte $06, $E0, $31 ; Apple //e (enhanced) - .byte $06, $00, $FF, $50 ; Apple //c - .byte $06, $00, $00, $51 ; Apple //c (3.5 ROM) - .byte $06, $00, $03, $53 ; Apple //c (Mem. Exp.) - .byte $06, $00, $04, $54 ; Apple //c (Rev. Mem. Exp.) - .byte $06, $00, $05, $55 ; Apple //c Plus + .byte $06, $00, $FF, $40 ; Apple //c + .byte $06, $00, $00, $41 ; Apple //c (3.5 ROM) + .byte $06, $00, $03, $43 ; Apple //c (Mem. Exp.) + .byte $06, $00, $04, $44 ; Apple //c (Rev. Mem. Exp.) + .byte $06, $00, $05, $45 ; Apple //c Plus .byte $00 .code From e0a0b2dc25bfc55e9f9517f82d7bb4b158c065f3 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Mon, 15 Jun 2020 19:07:59 +0200 Subject: [PATCH 0128/2710] Streamlined machine detection. --- libsrc/apple2/joy/a2.stdjoy.s | 40 ++++++++++++++--------------------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/libsrc/apple2/joy/a2.stdjoy.s b/libsrc/apple2/joy/a2.stdjoy.s index a3a935e5b..558013910 100644 --- a/libsrc/apple2/joy/a2.stdjoy.s +++ b/libsrc/apple2/joy/a2.stdjoy.s @@ -52,8 +52,7 @@ libref: .addr $0000 .bss -maxnum: .res 1 ; Maximum joystick number (0 or 1) -iigs: .res 1 +ostype: .res 1 value0: .res 1 value1: .res 1 @@ -68,20 +67,10 @@ value1: .res 1 INSTALL: lda libref ldx libref+1 - sta ostype+1 - stx ostype+2 -ostype: jsr $0000 ; X = 0 - and #$F0 ; Mask variants - cmp #$50 ; Any Apple //c - beq :+ ; Only one joystick - inx -: stx maxnum - ldx #$00 - cmp #$80 ; Any Apple IIgs - bne :+ - inx -: stx iigs - + sta gettype+1 + stx gettype+2 +gettype:jsr $0000 + sta ostype lda #<JOY_ERR_OK ldx #>JOY_ERR_OK ; Fall through @@ -97,9 +86,11 @@ UNINSTALL: ; COUNT routine. Return the total number of available joysticks in a/x. COUNT: - ldx maxnum - inx - txa ; Number of joysticks we support + ldx #$02 + bit ostype + bvc noiic ; Not $4x + dex ; Only one joystick for the //c +noiic: txa ; Number of joysticks we support ldx #$00 rts @@ -112,14 +103,15 @@ READ: sty value1 ; If IIgs -> set speed to normal - lda iigs - beq nogs1 + bit ostype + bpl nogs1 ; Not $8x lda CYAREG pha and #%01111111 sta CYAREG - ; Read both paddles simultaneously + ; Read both paddles simultaneously according to: + ; Apple IIe Technote #6, The Apple II Paddle Circuits nogs1: lda PTRIG ; Trigger paddles loop: lda PADDL0,x ; Read paddle (0 or 2) bmi set0 ; Cycles: 2 3 @@ -140,8 +132,8 @@ nop1: ; - - bne loop ; If IIgs -> restore speed - lda iigs - beq nogs2 + bit ostype + bpl nogs2 ; Not $8x pla sta CYAREG From 98c7186221428f5943ad177581cd38200a29a865 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 15 Jun 2020 23:39:50 +0200 Subject: [PATCH 0129/2710] Add description for --debug-opt-output to the --help output --- src/cc65/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cc65/main.c b/src/cc65/main.c index a4f794fb5..756c3101f 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -116,6 +116,7 @@ static void Usage (void) " --debug\t\t\tDebug mode\n" " --debug-info\t\t\tAdd debug info to object file\n" " --debug-opt name\t\tDebug optimization steps\n" + " --debug-opt-output\t\t\tOutput extra files containing optimization steps\n" " --dep-target target\t\tUse this dependency target\n" " --disable-opt name\t\tDisable an optimization step\n" " --eagerly-inline-funcs\tEagerly inline some known functions\n" From 349a84d9728512da756aff7982f0a0d6d0492405 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 16 Jun 2020 00:08:55 +0200 Subject: [PATCH 0130/2710] remove superfluous TAB --- src/cc65/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/main.c b/src/cc65/main.c index 756c3101f..dd02eeecf 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -116,7 +116,7 @@ static void Usage (void) " --debug\t\t\tDebug mode\n" " --debug-info\t\t\tAdd debug info to object file\n" " --debug-opt name\t\tDebug optimization steps\n" - " --debug-opt-output\t\t\tOutput extra files containing optimization steps\n" + " --debug-opt-output\t\tOutput extra files containing optimization steps\n" " --dep-target target\t\tUse this dependency target\n" " --disable-opt name\t\tDisable an optimization step\n" " --eagerly-inline-funcs\tEagerly inline some known functions\n" From baa5d051e45260d8a44e6fef66af0ab55f6b305f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 16 Jun 2020 00:11:07 +0200 Subject: [PATCH 0131/2710] use same description as in the docs --- src/cc65/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/main.c b/src/cc65/main.c index dd02eeecf..e86ae13ba 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -116,7 +116,7 @@ static void Usage (void) " --debug\t\t\tDebug mode\n" " --debug-info\t\t\tAdd debug info to object file\n" " --debug-opt name\t\tDebug optimization steps\n" - " --debug-opt-output\t\tOutput extra files containing optimization steps\n" + " --debug-opt-output\t\tDebug output of each optimization step\n" " --dep-target target\t\tUse this dependency target\n" " --disable-opt name\t\tDisable an optimization step\n" " --eagerly-inline-funcs\tEagerly inline some known functions\n" From 37107174c61425915b02c5f327cdfe9335da2cae Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 18 Jun 2020 21:44:42 +0200 Subject: [PATCH 0132/2710] Added waitvsync() for the Enhanced Apple //e. The implementation is a bit tricky as it requires to take different code paths for the //e, the //c and the IIgs. Additionally the //c only provides a VBL IRQ flag supposed to be used by an IRQ handler to determine what triggered the IRQ. However, masking IRQs on the CPU, activating the VBL IRQ, clearing any pending VBL IRQs and then polling for the IRQ flag does the trick. --- asminc/apple2.inc | 40 ++++++++++++++----------- doc/apple2enh.sgml | 3 +- include/apple2enh.h | 3 ++ libsrc/apple2/get_ostype.s | 2 +- libsrc/apple2/waitvsync.s | 60 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 88 insertions(+), 20 deletions(-) create mode 100644 libsrc/apple2/waitvsync.s diff --git a/asminc/apple2.inc b/asminc/apple2.inc index 19906ec2f..5ebf73164 100644 --- a/asminc/apple2.inc +++ b/asminc/apple2.inc @@ -1,6 +1,6 @@ ;----------------------------------------------------------------------------- -; Zero page stuff +; Zero page WNDLFT := $20 ; Text window left WNDWDTH := $21 ; Text window width @@ -31,35 +31,41 @@ PWREDUP := $03F4 ; This must be = EOR #$A5 of SOFTEV+1 KBD := $C000 ; Read keyboard KBDSTRB := $C010 ; Clear keyboard strobe -; 80 column video switches +; 80 column video CLR80COL:= $C000 ; Disable 80 column store SET80COL:= $C001 ; Enable 80 column store RD80COL := $C018 ; >127 if 80 column store enabled RD80VID := $C01F ; >127 if 80 column video enabled -; Character set switches +; Character set CLRALTCHAR := $C00E ; Normal Apple II char set SETALTCHAR := $C00F ; Norm/inv LC, no flash ALTCHARSET := $C01E ; >127 if alt charset switched in -; Language card switches +; Language card RDLCBNK2:= $C011 ; >127 if LC bank 2 in use RDLCRAM := $C012 ; >127 if LC is read enabled ROMIN := $C081 ; Swap in D000-FFFF ROM LCBANK2 := $C083 ; Swap in LC bank 2 LCBANK1 := $C08B ; Swap in LC bank 1 -; Video mode switches -TXTCLR := $C050 ; Display graphics -TXTSET := $C051 ; Display text -MIXCLR := $C052 ; Disable 4 lines of text -MIXSET := $C053 ; Enable 4 lines of text -LOWSCR := $C054 ; Page 1 -HISCR := $C055 ; Page 2 -LORES := $C056 ; Lores graphics -HIRES := $C057 ; Hires graphics -DHIRESON := $C05E ; Enable double-width graphics -DHIRESOFF := $C05F ; Disable double-width graphics +; Vertical blanking +RDVBLBAR := $C019 ; >127 if not vertical blanking +RDVBLMSK := $C041 ; >127 if VBL interrupts enabled +DISVBL := $C05A ; Disable VBL interrupts +ENVBL := $C05B ; Enable VBL interrupts + +; Video mode +TXTCLR := $C050 ; Display graphics +TXTSET := $C051 ; Display text +MIXCLR := $C052 ; Disable 4 lines of text +MIXSET := $C053 ; Enable 4 lines of text +LOWSCR := $C054 ; Page 1 +HISCR := $C055 ; Page 2 +LORES := $C056 ; Lores graphics +HIRES := $C057 ; Hires graphics +DHIRESON := $C05E ; Enable double-width graphics +DHIRESOFF := $C05F ; Disable double-width graphics ; Game controller TAPEIN := $C060 ; Read casette input / Switch input 3 @@ -73,8 +79,8 @@ PADDL3 := $C067 ; Analog input 3 PTRIG := $C070 ; Analog input reset ; Input/Output Unit -IOUDISON := $C07E ; Disable IOU -IOUDISOFF := $C07F ; Enable IOU +IOUDISON := $C07E ; Disable IOU +IOUDISOFF := $C07F ; Enable IOU ; Control Your Apple CYAREG := $C036 ; Bits 0-3=disk detect 4=shadow all banks 7=fast diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index fa70da4ee..2d4381353 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -332,10 +332,9 @@ usage. <item>get_ostype <item>rebootafterexit <item>ser_apple2_slot -<item>textframe -<item>textframexy <item>tgi_apple2_mix <item>videomode +<item>waitvsync </itemize> diff --git a/include/apple2enh.h b/include/apple2enh.h index 3dd8cffc0..58e0b397f 100644 --- a/include/apple2enh.h +++ b/include/apple2enh.h @@ -116,6 +116,9 @@ unsigned __fastcall__ videomode (unsigned mode); ** constants. */ +void waitvsync (void); +/* Wait for start of next frame */ + /* End of apple2enh.h */ diff --git a/libsrc/apple2/get_ostype.s b/libsrc/apple2/get_ostype.s index 71b43d174..a1b1eb5be 100644 --- a/libsrc/apple2/get_ostype.s +++ b/libsrc/apple2/get_ostype.s @@ -4,7 +4,7 @@ ; unsigned char get_ostype (void) ; - .constructor initostype + .constructor initostype, 9 .export _get_ostype ; Identify machine according to: diff --git a/libsrc/apple2/waitvsync.s b/libsrc/apple2/waitvsync.s new file mode 100644 index 000000000..a4ab5ebb3 --- /dev/null +++ b/libsrc/apple2/waitvsync.s @@ -0,0 +1,60 @@ +; +; Oliver Schmidt, 2020-06-14 +; +; void waitvsync (void); +; + .ifdef __APPLE2ENH__ + + .constructor initvsync + .export _waitvsync + .import _get_ostype + + .include "apple2.inc" + + .segment "ONCE" + +initvsync: + jsr _get_ostype + sta ostype + rts + + .code + +_waitvsync: + bit ostype + bmi iigs ; $8x + bvs iic ; $4x + +: bit RDVBLBAR + bpl :- ; Blanking +: bit RDVBLBAR + bmi :- ; Drawing + rts + + ; Apple IIgs TechNote #40, VBL Signal +iigs: bit RDVBLBAR + bmi iigs ; Blanking +: bit RDVBLBAR + bpl :- ; Drawing + rts + + ; Apple IIc TechNote #9, Detecting VBL +iic: sei + sta IOUDISOFF + lda RDVBLMSK + bit ENVBL + bit PTRIG ; Reset VBL interrupt flag +: bit RDVBLBAR + bpl :- + asl + bcs :+ ; VBL interrupts were already enabled + bit DISVBL +: sta IOUDISON ; IIc Tech Ref Man: The firmware normally leaves IOUDIS on. + cli + rts + + .segment "INIT" + +ostype: .res 1 + + .endif ; __APPLE2ENH__ From 4afc552e1747102f7c5e40755170002edea54eec Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Fri, 19 Jun 2020 09:06:52 +0200 Subject: [PATCH 0133/2710] ParseStructDecl: Make BitOffs unsigned This makes it consistent with SymEntry and removes the need for some casts that were added to avoid warnings about signed vs unsigned comparison. --- src/cc65/declare.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 35ce5d0b2..523aac48a 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -714,7 +714,7 @@ static SymEntry* ParseStructDecl (const char* Name) unsigned StructSize; int FlexibleMember; - int BitOffs; /* Bit offset for bit-fields */ + unsigned BitOffs; /* Bit offset for bit-fields */ int FieldWidth; /* Width in bits, -1 if not a bit-field */ SymTable* FieldTab; @@ -770,7 +770,7 @@ static SymEntry* ParseStructDecl (const char* Name) ** a member with an anonymous name. */ if (BitOffs > 0) { - if (FieldWidth <= 0 || (BitOffs + FieldWidth) > (int) INT_BITS) { + if (FieldWidth <= 0 || (BitOffs + FieldWidth) > INT_BITS) { /* We need an anonymous name */ AnonName (Ident, "bit-field"); @@ -839,7 +839,7 @@ static SymEntry* ParseStructDecl (const char* Name) unsigned Offs = StructSize + (BitOffs / CHAR_BITS); AddBitField (Decl.Ident, Offs, BitOffs % CHAR_BITS, FieldWidth); BitOffs += FieldWidth; - CHECK (BitOffs <= (int) INT_BITS); + CHECK (BitOffs <= INT_BITS); if (BitOffs == INT_BITS) { StructSize += SIZEOF_INT; BitOffs = 0; From 1c2edc543478633fb8a68e224d1f56a76d562487 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Fri, 19 Jun 2020 09:01:24 +0200 Subject: [PATCH 0134/2710] AddBitField: Rename Width arg to BitWidth This makes the arg consistent with the SymEntry field name. --- src/cc65/symtab.c | 4 ++-- src/cc65/symtab.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index a31c11bfc..f19a251bd 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -597,7 +597,7 @@ SymEntry* AddStructSym (const char* Name, unsigned Type, unsigned Size, SymTable -SymEntry* AddBitField (const char* Name, unsigned Offs, unsigned BitOffs, unsigned Width) +SymEntry* AddBitField (const char* Name, unsigned Offs, unsigned BitOffs, unsigned BitWidth) /* Add a bit field to the local symbol table and return the symbol entry */ { /* Do we have an entry with this name already? */ @@ -616,7 +616,7 @@ SymEntry* AddBitField (const char* Name, unsigned Offs, unsigned BitOffs, unsign Entry->Type = type_uint; Entry->V.B.Offs = Offs; Entry->V.B.BitOffs = BitOffs; - Entry->V.B.BitWidth = Width; + Entry->V.B.BitWidth = BitWidth; /* Add the entry to the symbol table */ AddSymEntry (SymTab, Entry); diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h index cd736ec1e..62e731042 100644 --- a/src/cc65/symtab.h +++ b/src/cc65/symtab.h @@ -149,7 +149,7 @@ unsigned short FindSPAdjustment (const char* Name); SymEntry* AddStructSym (const char* Name, unsigned Type, unsigned Size, SymTable* Tab); /* Add a struct/union entry and return it */ -SymEntry* AddBitField (const char* Name, unsigned Offs, unsigned BitOffs, unsigned Width); +SymEntry* AddBitField (const char* Name, unsigned Offs, unsigned BitOffs, unsigned BitWidth); /* Add a bit field to the local symbol table and return the symbol entry */ SymEntry* AddConstSym (const char* Name, const Type* T, unsigned Flags, long Val); From a7a8426a90388f74f89661140d2d464f7e2a472a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 31 Dec 2019 16:06:52 +0800 Subject: [PATCH 0135/2710] Just keep Lhs loads in OptStackOps and leave them to OptUnusedLoads, whilst Rhs loads must be removed for OptStackOps to work right. Fixed Issue #167 as well as similar issues with tosshift. --- src/cc65/coptstop.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 87514cfdd..28eaafd7b 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -792,10 +792,6 @@ static unsigned Opt_toseqax_tosneax (StackOpData* D, const char* BoolTransformer X = NewCodeEntry (OP65_CMP, LoadA->AM, LoadA->Arg, 0, D->OpEntry->LI); InsertEntry (D, X, D->IP++); - /* Lhs load entries can be removed */ - D->Lhs.X.Flags |= LI_REMOVE; - D->Lhs.A.Flags |= LI_REMOVE; - } else if ((D->Rhs.A.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT && (D->Rhs.X.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT) { @@ -816,9 +812,13 @@ static unsigned Opt_toseqax_tosneax (StackOpData* D, const char* BoolTransformer X = NewCodeEntry (OP65_CMP, LoadA->AM, LoadA->Arg, 0, D->OpEntry->LI); InsertEntry (D, X, D->IP++); - /* Rhs load entries can be removed */ - D->Rhs.X.Flags |= LI_REMOVE; - D->Rhs.A.Flags |= LI_REMOVE; + /* Rhs load entries must be removed if they are placed after the push */ + if (D->Rhs.X.LoadIndex > D->PushIndex) { + D->Rhs.X.Flags |= LI_REMOVE; + } + if (D->Rhs.A.LoadIndex > D->PushIndex) { + D->Rhs.A.Flags |= LI_REMOVE; + } } else if ((D->Rhs.A.Flags & LI_DIRECT) != 0 && (D->Rhs.X.Flags & LI_DIRECT) != 0) { @@ -897,11 +897,7 @@ static unsigned Opt_tosshift (StackOpData* D, const char* Name) /* ldx */ X = NewCodeEntry (OP65_LDX, LoadX->AM, LoadX->Arg, 0, D->OpEntry->LI); InsertEntry (D, X, D->IP++); - - /* Lhs load entries can be removed */ - D->Lhs.X.Flags |= LI_REMOVE; - D->Lhs.A.Flags |= LI_REMOVE; - + } else { /* Save lhs into zeropage and reload later */ From b2268765bf3b802ae81153d9e0ada7d03bb14d62 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 1 Jan 2020 23:44:47 +0800 Subject: [PATCH 0136/2710] The ref test cc65141011.c now passes. --- test/misc/Makefile | 4 ---- test/{misc => ref}/cc65141011.c | 0 2 files changed, 4 deletions(-) rename test/{misc => ref}/cc65141011.c (100%) diff --git a/test/misc/Makefile b/test/misc/Makefile index ad39176bd..15999ba3c 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -86,10 +86,6 @@ $(WORKDIR)/sitest.$1.$2.prg: sitest.c | $(WORKDIR) @echo "FIXME: " $$@ "currently will fail." -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # -$(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) -$(WORKDIR)/cc65141011.$1.$2.prg: cc65141011.c | $(WORKDIR) - @echo "FIXME: " $$@ "currently can fail." - $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - -$(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) endef # PRG_template diff --git a/test/misc/cc65141011.c b/test/ref/cc65141011.c similarity index 100% rename from test/misc/cc65141011.c rename to test/ref/cc65141011.c From 48d3578c24a2017805e7fb1b67e1ea02de6e12c3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 3 Jan 2020 08:20:07 +0800 Subject: [PATCH 0137/2710] Fixed Issue #784. --- src/cc65/coptstop.c | 51 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 28eaafd7b..7a4e336a2 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -60,6 +60,8 @@ typedef enum { LI_REMOVE = 0x04, /* Load may be removed */ LI_DONT_REMOVE = 0x08, /* Load may not be removed */ LI_DUP_LOAD = 0x10, /* Duplicate load */ + LI_VOLATILE_SRC = 0x20, /* Load src might be modified later */ + LI_SRC_CHG = 0x40, /* Load src is possibly modified */ } LI_FLAGS; /* Structure that tells us how to load the lhs values */ @@ -71,6 +73,7 @@ struct LoadRegInfo { int XferIndex; /* Index of transfer insn */ CodeEntry* XferEntry; /* The actual transfer entry */ int Offs; /* Stack offset if data is on stack */ + const char* Arg; /* Loaded src possibly modified later */ }; /* Now combined for both registers */ @@ -246,6 +249,40 @@ static void AdjustLoadInfo (LoadInfo* LI, int Index, int Change) +static int Affected (LoadRegInfo* RI, const CodeEntry* E) +/* Check if the load src is modified between the pushax and op */ +{ + if (RI->Flags & LI_VOLATILE_SRC) { + if (E->AM == AM65_IMM || E->AM == AM65_ACC || E->AM == AM65_IMP || E->AM == AM65_BRA) { + return 0; + } + if (E->OPC == OP65_JSR) { + if (E->Flags & CEF_USERMARK) { + /* User subs. Play it safe. */ + return 1; + } + /* We could filter the non-modifing functions. */ + /* But why bother optimizating for such rare cases? */ + return 1; + } else if (E->OPC == OP65_DEC || E->OPC == OP65_INC || + E->OPC == OP65_ASL || E->OPC == OP65_LSR || + E->OPC == OP65_ROL || E->OPC == OP65_ROR || + E->OPC == OP65_TRB || E->OPC == OP65_TSB || + E->OPC == OP65_STA || E->OPC == OP65_STX || E->OPC == OP65_STY) { + if ((E->AM == AM65_ABS || E->AM == AM65_ZP) && + strcmp (RI->Arg, E->Arg) != 0) { + return 0; + } + /* We could've check further for more cases where the load target isn't modified */ + /* But for now let's save the trouble and just play it safe */ + return 1; + } + } + return 0; +} + + + static void HonourUseAndChg (LoadRegInfo* RI, unsigned Reg, const CodeEntry* E) /* Honour use and change flags for an instruction */ { @@ -254,6 +291,9 @@ static void HonourUseAndChg (LoadRegInfo* RI, unsigned Reg, const CodeEntry* E) } else if ((E->Use & Reg) && RI->LoadIndex >= 0) { RI->Flags |= LI_DONT_REMOVE; } + if (Affected (RI, E)) { + RI->Flags |= LI_SRC_CHG; + } } @@ -288,10 +328,15 @@ static void TrackLoads (LoadInfo* LI, CodeEntry* E, int I) RI->XferIndex = -1; /* Set load flags */ - RI->Flags &= ~(LI_DIRECT | LI_RELOAD_Y); - if (E->AM == AM65_IMM || E->AM == AM65_ZP || E->AM == AM65_ABS) { + RI->Flags &= ~(LI_DIRECT | LI_RELOAD_Y | LI_VOLATILE_SRC); + if (E->AM == AM65_IMM) { /* These insns are all ok and replaceable */ RI->Flags |= LI_DIRECT; + } else if (E->AM == AM65_ZP || E->AM == AM65_ABS) { + /* These insns are replaceable only if they are not modified later */ + RI->Flags |= LI_VOLATILE_SRC; + /* Watch for any change of the load target */ + RI->Arg = E->Arg; } else if (E->AM == AM65_ZP_INDY && RegValIsKnown (E->RI->In.RegY) && strcmp (E->Arg, "sp") == 0) { @@ -333,7 +378,7 @@ static void TrackLoads (LoadInfo* LI, CodeEntry* E, int I) Tgt->LoadIndex = Src->LoadIndex; Tgt->XferIndex = I; Tgt->Offs = Src->Offs; - Tgt->Flags &= ~(LI_DIRECT | LI_RELOAD_Y); + Tgt->Flags &= ~(LI_DIRECT | LI_RELOAD_Y | LI_VOLATILE_SRC); Tgt->Flags |= Src->Flags & (LI_DIRECT | LI_RELOAD_Y); } else if (CE_IsCallTo (E, "ldaxysp") && RegValIsKnown (E->RI->In.RegY)) { From 49c5cfd65b59c8f69c87a20a10ce22d148ffd837 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 3 Jan 2020 08:20:14 +0800 Subject: [PATCH 0138/2710] Improved fix for Issues #167 and #784 and somehow #781. --- src/cc65/codeent.h | 1 + src/cc65/codeinfo.c | 10 +- src/cc65/codeinfo.h | 13 +- src/cc65/coptstop.c | 682 +++++++++++++++++++++++++++++++------------- 4 files changed, 507 insertions(+), 199 deletions(-) diff --git a/src/cc65/codeent.h b/src/cc65/codeent.h index 4d0289086..96373a8f9 100644 --- a/src/cc65/codeent.h +++ b/src/cc65/codeent.h @@ -61,6 +61,7 @@ /* Flags used */ #define CEF_USERMARK 0x0001U /* Generic mark by user functions */ #define CEF_NUMARG 0x0002U /* Insn has numerical argument */ +#define CEF_DONT_REMOVE 0x0004U /* Insn shouldn't be removed, marked by user functions */ /* Code entry structure */ typedef struct CodeEntry CodeEntry; diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index 972d48f6a..b1e5668ce 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -375,7 +375,7 @@ static int CompareFuncInfo (const void* Key, const void* Info) -void GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg) +fncls_t GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg) /* For the given function, lookup register information and store it into ** the given variables. If the function is unknown, assume it will use and ** load all registers. @@ -430,7 +430,7 @@ void GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg) *Chg = REG_ALL; /* Done */ - return; + return FNCLS_GLOBAL; } } else if (IsDigit (Name[0]) || Name[0] == '$') { @@ -441,7 +441,7 @@ void GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg) */ *Use = REG_ALL; *Chg = REG_ALL; - return; + return FNCLS_NUMERIC; } else { @@ -466,7 +466,7 @@ void GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg) *Use = REG_ALL; *Chg = REG_ALL; } - return; + return FNCLS_BUILTIN; } /* Function not found - assume that the primary register is input, and all @@ -474,6 +474,8 @@ void GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg) */ *Use = REG_EAXY; *Chg = REG_ALL; + + return FNCLS_UNKNOWN; } diff --git a/src/cc65/codeinfo.h b/src/cc65/codeinfo.h index be0bfbf01..38e196bcf 100644 --- a/src/cc65/codeinfo.h +++ b/src/cc65/codeinfo.h @@ -120,16 +120,27 @@ typedef enum { +/* Defines for the conditions in a compare */ +typedef enum { + FNCLS_UNKNOWN = -1, /* Unknown */ + FNCLS_BUILTIN, /* Builtin */ + FNCLS_GLOBAL, /* Found in global sym table minus the leading underscore */ + FNCLS_NUMERIC /* A call to a numeric address */ +} fncls_t; + + + /*****************************************************************************/ /* Code */ /*****************************************************************************/ -void GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg); +fncls_t GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg); /* For the given function, lookup register information and store it into ** the given variables. If the function is unknown, assume it will use and ** load all registers. +** Return the whatever category the function is in. */ const ZPInfo* GetZPInfo (const char* Name); diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 7a4e336a2..46d600dba 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -59,9 +59,12 @@ typedef enum { LI_RELOAD_Y = 0x02, /* Reload index register Y */ LI_REMOVE = 0x04, /* Load may be removed */ LI_DONT_REMOVE = 0x08, /* Load may not be removed */ - LI_DUP_LOAD = 0x10, /* Duplicate load */ - LI_VOLATILE_SRC = 0x20, /* Load src might be modified later */ - LI_SRC_CHG = 0x40, /* Load src is possibly modified */ + LI_MAYBE_DIRECT = 0x10, /* Load src might be modified later */ + LI_SRC_CHG = 0x20, /* Load src is possibly modified */ + LI_LOAD_INSN = 0x40, /* Has a load insn */ + LI_USED_BY_A = 0x100, /* Content used by RegA */ + LI_USED_BY_X = 0x200, /* Content used by RegX */ + LI_USED_BY_Y = 0x400, /* Content used by RegY */ } LI_FLAGS; /* Structure that tells us how to load the lhs values */ @@ -73,7 +76,6 @@ struct LoadRegInfo { int XferIndex; /* Index of transfer insn */ CodeEntry* XferEntry; /* The actual transfer entry */ int Offs; /* Stack offset if data is on stack */ - const char* Arg; /* Loaded src possibly modified later */ }; /* Now combined for both registers */ @@ -94,13 +96,25 @@ struct LoadInfo { /* Flags for the functions */ typedef enum { - OP_NONE = 0x00, /* Nothing special */ - OP_A_KNOWN = 0x01, /* Value of A must be known */ - OP_X_ZERO = 0x02, /* X must be zero */ - OP_LHS_LOAD = 0x04, /* Must have load insns for LHS */ - OP_LHS_LOAD_DIRECT = 0x0C, /* Must have direct load insn for LHS */ - OP_RHS_LOAD = 0x10, /* Must have load insns for RHS */ - OP_RHS_LOAD_DIRECT = 0x30, /* Must have direct load insn for RHS */ + OP_NONE = 0x00, /* Nothing special */ + OP_A_KNOWN = 0x01, /* Value of A must be known */ + OP_X_ZERO = 0x02, /* X must be zero */ + OP_LHS_LOAD = 0x04, /* Must have load insns for LHS */ + OP_LHS_SAME_BY_OP = 0x08, /* Load result of LHS must be the same if relocated to op */ + OP_LHS_LOAD_DIRECT = 0x0C, /* Must have direct load insn for LHS */ + OP_RHS_LOAD = 0x10, /* Must have load insns for RHS */ + OP_RHS_SAME_BY_OP = 0x20, /* Load result of RHS must be the same if relocated to op */ + OP_RHS_LOAD_DIRECT = 0x30, /* Must have direct load insn for RHS */ + OP_AX_INTERCHANGE = 0x40, /* Preconditions of A/X may be interchanged */ + OP_LR_INTERCHANGE = 0x80, /* Preconditions of LHS/RHS may be interchanged */ + OP_LHS_SAME_BY_PUSH = 0x0100, /* LHS must load the same content if relocated to push */ + OP_RHS_SAME_BY_PUSH = 0x0200, /* RHS must load the same content if relocated to push */ + OP_LHS_SAME_BY_RHS = 0x0400, /* LHS must load the same content if relocated to RHS */ + OP_RHS_SAME_BY_LHS = 0x0800, /* RHS must load the same content if relocated to LHS */ + OP_LHS_REMOVE = 0x1000, /* LHS must be removable or RHS may use ZP store/load */ + OP_LHS_REMOVE_DIRECT = 0x3000, /* LHS must be directly removable */ + OP_RHS_REMOVE = 0x4000, /* RHS must be removable or LHS may use ZP store/load */ + OP_RHS_REMOVE_DIRECT = 0xC000, /* RHS must be directly removable */ } OP_FLAGS; /* Structure forward decl */ @@ -126,6 +140,10 @@ struct StackOpData { /* ZP register usage inside the sequence */ unsigned ZPUsage; + unsigned ZPChanged; + + /* Freedom of registers inside the sequence */ + unsigned UsedRegs; /* Registers used */ /* Register load information for lhs and rhs */ LoadInfo Lhs; @@ -159,12 +177,27 @@ static void ClearLoadRegInfo (LoadRegInfo* RI) { RI->Flags = LI_NONE; RI->LoadIndex = -1; + RI->LoadEntry = 0; RI->XferIndex = -1; + RI->XferEntry = 0; RI->Offs = 0; } +static void CopyLoadRegInfo (LoadRegInfo* To, LoadRegInfo* From) +/* Copy a LoadRegInfo struct */ +{ + To->Flags = From->Flags; + To->LoadIndex = From->LoadIndex; + To->LoadEntry = From->LoadEntry; + To->XferIndex = From->XferIndex; + To->XferEntry = From->XferEntry; + To->Offs = From->Offs; +} + + + static void FinalizeLoadRegInfo (LoadRegInfo* RI, CodeSeg* S) /* Prepare a LoadRegInfo struct for use */ { @@ -179,6 +212,10 @@ static void FinalizeLoadRegInfo (LoadRegInfo* RI, CodeSeg* S) } else { RI->XferEntry = 0; } + /* Load from src not modified before op can be treated as direct */ + if ((RI->Flags & (LI_MAYBE_DIRECT | LI_SRC_CHG)) == LI_MAYBE_DIRECT) { + RI->Flags |= LI_DIRECT; + } } @@ -193,6 +230,16 @@ static void ClearLoadInfo (LoadInfo* LI) +static void CopyLoadInfo (LoadInfo* To, LoadInfo* From) +/* Copy a LoadInfo struct */ +{ + CopyLoadRegInfo (&To->A, &From->A); + CopyLoadRegInfo (&To->X, &From->X); + CopyLoadRegInfo (&To->Y, &From->Y); +} + + + static void AdjustLoadRegInfo (LoadRegInfo* RI, int Index, int Change) /* Adjust a load register info struct after deleting or inserting an entry ** with a given index @@ -250,19 +297,27 @@ static void AdjustLoadInfo (LoadInfo* LI, int Index, int Change) static int Affected (LoadRegInfo* RI, const CodeEntry* E) -/* Check if the load src is modified between the pushax and op */ +/* Check if the load src may be modified between the pushax and op */ { - if (RI->Flags & LI_VOLATILE_SRC) { + fncls_t fncls; + unsigned short Use; + unsigned short Chg; + + if (RI->Flags & LI_MAYBE_DIRECT) { if (E->AM == AM65_IMM || E->AM == AM65_ACC || E->AM == AM65_IMP || E->AM == AM65_BRA) { return 0; } + CHECK (RI->LoadEntry != 0); + if (E->OPC == OP65_JSR) { - if (E->Flags & CEF_USERMARK) { - /* User subs. Play it safe. */ - return 1; + /* Try to know about the function */ + fncls = GetFuncInfo (E->Arg, &Use, &Chg); + if ((RI->LoadEntry->Use & Chg & REG_ALL) == 0 && + fncls == FNCLS_BUILTIN) { + /* Builtin functions are known to be harmless */ + return 0; } - /* We could filter the non-modifing functions. */ - /* But why bother optimizating for such rare cases? */ + /* Otherwise play it safe */ return 1; } else if (E->OPC == OP65_DEC || E->OPC == OP65_INC || E->OPC == OP65_ASL || E->OPC == OP65_LSR || @@ -270,11 +325,11 @@ static int Affected (LoadRegInfo* RI, const CodeEntry* E) E->OPC == OP65_TRB || E->OPC == OP65_TSB || E->OPC == OP65_STA || E->OPC == OP65_STX || E->OPC == OP65_STY) { if ((E->AM == AM65_ABS || E->AM == AM65_ZP) && - strcmp (RI->Arg, E->Arg) != 0) { + strcmp (RI->LoadEntry->Arg, E->Arg) != 0) { return 0; } - /* We could've check further for more cases where the load target isn't modified */ - /* But for now let's save the trouble and just play it safe */ + /* We could've check further for more cases where the load target isn't modified, + ** But for now let's save the trouble and just play it safe. */ return 1; } } @@ -283,24 +338,38 @@ static int Affected (LoadRegInfo* RI, const CodeEntry* E) -static void HonourUseAndChg (LoadRegInfo* RI, unsigned Reg, const CodeEntry* E) +static void HonourUseAndChg (LoadRegInfo* RI, unsigned Reg, const CodeEntry* E, int I) /* Honour use and change flags for an instruction */ { - if (E->Chg & Reg) { + if ((E->Chg & Reg) != 0) { + /* Remember this as an indirect load */ ClearLoadRegInfo (RI); - } else if ((E->Use & Reg) && RI->LoadIndex >= 0) { - RI->Flags |= LI_DONT_REMOVE; - } - if (Affected (RI, E)) { + RI->LoadIndex = I; + RI->XferIndex = -1; + RI->Flags = 0; + } else if (Affected (RI, E)) { RI->Flags |= LI_SRC_CHG; } } -static void TrackLoads (LoadInfo* LI, CodeEntry* E, int I) -/* Track loads for a code entry */ +static unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) +/* Track loads for a code entry. +** Return used registers. +*/ { + unsigned Used; + CodeEntry* E = CS_GetEntry (S, I); + CHECK (E != 0); + + /* By default */ + Used = E->Use; + + /* Whether we had a load or xfer op before or not, the newly loaded value + ** will be the real one used for the pushax/op unless it's overwritten, + ** so we can just reset the flags about it in such cases. + */ if (E->Info & OF_LOAD) { LoadRegInfo* RI = 0; @@ -315,28 +384,20 @@ static void TrackLoads (LoadInfo* LI, CodeEntry* E, int I) } CHECK (RI != 0); - /* If we had a load or xfer op before, this is a duplicate load which - ** can cause problems if it encountered between the pushax and the op, - ** so remember it. - */ - if (RI->LoadIndex >= 0 || RI->XferIndex >= 0) { - RI->Flags |= LI_DUP_LOAD; - } - /* Remember the load */ RI->LoadIndex = I; RI->XferIndex = -1; /* Set load flags */ - RI->Flags &= ~(LI_DIRECT | LI_RELOAD_Y | LI_VOLATILE_SRC); + RI->Flags = LI_LOAD_INSN; if (E->AM == AM65_IMM) { /* These insns are all ok and replaceable */ RI->Flags |= LI_DIRECT; } else if (E->AM == AM65_ZP || E->AM == AM65_ABS) { /* These insns are replaceable only if they are not modified later */ - RI->Flags |= LI_VOLATILE_SRC; + RI->Flags |= LI_MAYBE_DIRECT; /* Watch for any change of the load target */ - RI->Arg = E->Arg; + RI->LoadEntry = CS_GetEntry (S, I); } else if (E->AM == AM65_ZP_INDY && RegValIsKnown (E->RI->In.RegY) && strcmp (E->Arg, "sp") == 0) { @@ -348,8 +409,16 @@ static void TrackLoads (LoadInfo* LI, CodeEntry* E, int I) */ RI->Offs = (unsigned char) E->RI->In.RegY; RI->Flags |= (LI_DIRECT | LI_RELOAD_Y); + + /* Reg Y can be regarded as unused if this load is removed */ + Used &= ~REG_Y; + LI->Y.Flags |= LI_USED_BY_A; } + /* Watch for any change of the load target */ + if ((RI->Flags & LI_MAYBE_DIRECT) != 0) { + RI->LoadEntry = CS_GetEntry (S, I); + } } else if (E->Info & OF_XFR) { @@ -357,60 +426,82 @@ static void TrackLoads (LoadInfo* LI, CodeEntry* E, int I) LoadRegInfo* Src; LoadRegInfo* Tgt; switch (E->OPC) { - case OP65_TAX: Src = &LI->A; Tgt = &LI->X; break; - case OP65_TAY: Src = &LI->A; Tgt = &LI->Y; break; - case OP65_TXA: Src = &LI->X; Tgt = &LI->A; break; - case OP65_TYA: Src = &LI->Y; Tgt = &LI->A; break; - case OP65_TSX: ClearLoadRegInfo (&LI->X); return; - case OP65_TXS: return; + case OP65_TAX: + Src = &LI->A; + Tgt = &LI->X; + Used &= ~REG_A; + Src->Flags |= LI_USED_BY_X; + break; + case OP65_TAY: + Src = &LI->A; + Tgt = &LI->Y; + Used &= ~REG_A; + Src->Flags |= LI_USED_BY_Y; + break; + case OP65_TXA: + Src = &LI->X; + Tgt = &LI->A; + Used &= ~REG_X; + Src->Flags |= LI_USED_BY_A; + break; + case OP65_TYA: + Src = &LI->Y; + Tgt = &LI->A; + Used &= ~REG_Y; + Src->Flags |= LI_USED_BY_A; + break; + case OP65_TSX: + ClearLoadRegInfo (&LI->X); + return Used; + case OP65_TXS: + return Used; default: Internal ("Unknown XFR insn in TrackLoads"); } - /* If we had a load or xfer op before, this is a duplicate load which - ** can cause problems if it encountered between the pushax and the op, - ** so remember it. - */ - if (Tgt->LoadIndex >= 0 || Tgt->XferIndex >= 0) { - Tgt->Flags |= LI_DUP_LOAD; - } - /* Transfer the data */ - Tgt->LoadIndex = Src->LoadIndex; - Tgt->XferIndex = I; - Tgt->Offs = Src->Offs; - Tgt->Flags &= ~(LI_DIRECT | LI_RELOAD_Y | LI_VOLATILE_SRC); - Tgt->Flags |= Src->Flags & (LI_DIRECT | LI_RELOAD_Y); + Tgt->LoadIndex = Src->LoadIndex; + Tgt->LoadEntry = Src->LoadEntry; + Tgt->XferIndex = I; + Tgt->Offs = Src->Offs; + Tgt->Flags = Src->Flags; } else if (CE_IsCallTo (E, "ldaxysp") && RegValIsKnown (E->RI->In.RegY)) { - /* If we had a load or xfer op before, this is a duplicate load which - ** can cause problems if it encountered between the pushax and the op, - ** so remember it for both registers involved. - */ - if (LI->A.LoadIndex >= 0 || LI->A.XferIndex >= 0) { - LI->A.Flags |= LI_DUP_LOAD; - } - if (LI->X.LoadIndex >= 0 || LI->X.XferIndex >= 0) { - LI->X.Flags |= LI_DUP_LOAD; - } - /* Both registers set, Y changed */ LI->A.LoadIndex = I; LI->A.XferIndex = -1; - LI->A.Flags |= (LI_DIRECT | LI_RELOAD_Y); + LI->A.Flags = (LI_LOAD_INSN | LI_DIRECT | LI_RELOAD_Y); LI->A.Offs = (unsigned char) E->RI->In.RegY - 1; LI->X.LoadIndex = I; LI->X.XferIndex = -1; - LI->X.Flags |= (LI_DIRECT | LI_RELOAD_Y); + LI->X.Flags = (LI_LOAD_INSN | LI_DIRECT | LI_RELOAD_Y); LI->X.Offs = (unsigned char) E->RI->In.RegY; - ClearLoadRegInfo (&LI->Y); + /* Reg Y can be regarded as unused if this load is removed */ + Used &= ~REG_Y; + LI->Y.Flags |= LI_USED_BY_A | LI_USED_BY_X; + } else { - HonourUseAndChg (&LI->A, REG_A, E); - HonourUseAndChg (&LI->X, REG_X, E); - HonourUseAndChg (&LI->Y, REG_Y, E); + HonourUseAndChg (&LI->A, REG_A, E, I); + HonourUseAndChg (&LI->X, REG_X, E, I); + HonourUseAndChg (&LI->Y, REG_Y, E, I); + + /* The other operand may be affected too */ + if (LLI != 0) { + if (Affected (&LLI->A, E)) { + LLI->A.Flags |= LI_SRC_CHG; + } + if (Affected (&LLI->X, E)) { + LLI->X.Flags |= LI_SRC_CHG; + } + if (Affected (&LLI->Y, E)) { + LLI->Y.Flags |= LI_SRC_CHG; + } + } } + + return Used; } @@ -574,7 +665,7 @@ static void AdjustStackOffset (StackOpData* D, unsigned Offs) -static void AddStoreA (StackOpData* D) +static void AddStoreLhsA (StackOpData* D) /* Add a store to zero page after the push insn */ { CodeEntry* X = NewCodeEntry (OP65_STA, AM65_ZP, D->ZPLo, 0, D->PushEntry->LI); @@ -583,7 +674,7 @@ static void AddStoreA (StackOpData* D) -static void AddStoreX (StackOpData* D) +static void AddStoreLhsX (StackOpData* D) /* Add a store to zero page after the push insn */ { CodeEntry* X = NewCodeEntry (OP65_STX, AM65_ZP, D->ZPHi, 0, D->PushEntry->LI); @@ -603,10 +694,10 @@ static void ReplacePushByStore (StackOpData* D) ** byte first so that the store is later in A/X order. */ if ((D->Lhs.X.Flags & LI_DIRECT) == 0) { - AddStoreX (D); + AddStoreLhsX (D); } if ((D->Lhs.A.Flags & LI_DIRECT) == 0) { - AddStoreA (D); + AddStoreLhsA (D); } } @@ -725,19 +816,23 @@ static void RemoveRegLoads (StackOpData* D, LoadInfo* LI) /* Both registers may be loaded with one insn, but DelEntry will in this ** case clear the other one. */ - if ((LI->A.Flags & (LI_REMOVE | LI_DONT_REMOVE)) == LI_REMOVE) { - if (LI->A.LoadIndex >= 0) { + if ((LI->A.Flags & LI_REMOVE) == LI_REMOVE) { + if (LI->A.LoadIndex >= 0 && + (LI->A.LoadEntry->Flags & CEF_DONT_REMOVE) == 0) { DelEntry (D, LI->A.LoadIndex); } - if (LI->A.XferIndex >= 0) { + if (LI->A.XferIndex >= 0 && + (LI->A.XferEntry->Flags & CEF_DONT_REMOVE) == 0) { DelEntry (D, LI->A.XferIndex); } } - if ((LI->X.Flags & (LI_REMOVE | LI_DONT_REMOVE)) == LI_REMOVE) { - if (LI->X.LoadIndex >= 0) { + if ((LI->X.Flags & LI_REMOVE) == LI_REMOVE) { + if (LI->X.LoadIndex >= 0 && + (LI->X.LoadEntry->Flags & CEF_DONT_REMOVE) == 0) { DelEntry (D, LI->X.LoadIndex); } - if (LI->X.XferIndex >= 0) { + if (LI->X.XferIndex >= 0 && + (LI->X.XferEntry->Flags & CEF_DONT_REMOVE) == 0) { DelEntry (D, LI->X.XferIndex); } } @@ -748,7 +843,7 @@ static void RemoveRegLoads (StackOpData* D, LoadInfo* LI) static void RemoveRemainders (StackOpData* D) /* Remove the code that is unnecessary after translation of the sequence */ { - /* Remove the register loads for lhs and rhs */ + /* Remove the register loads for lhs and rhs if nothing prevents that */ RemoveRegLoads (D, &D->Lhs); RemoveRegLoads (D, &D->Rhs); @@ -760,15 +855,21 @@ static void RemoveRemainders (StackOpData* D) static int IsRegVar (StackOpData* D) -/* If the value pushed is that of a zeropage variable, replace ZPLo and ZPHi -** in the given StackOpData struct by the variable and return true. Otherwise -** leave D untouched and return false. +/* If the value pushed is that of a zeropage variable that is unchanged until Op, +** replace ZPLo and ZPHi in the given StackOpData struct by the variable and return true. +** Otherwise leave D untouched and return false. */ { CodeEntry* LoadA = D->Lhs.A.LoadEntry; CodeEntry* LoadX = D->Lhs.X.LoadEntry; unsigned Len; + /* Must be unchanged till Op */ + if ((D->Lhs.A.Flags & (LI_DIRECT | LI_RELOAD_Y)) != LI_DIRECT || + (D->Lhs.X.Flags & (LI_DIRECT | LI_RELOAD_Y)) != LI_DIRECT) { + return 0; + } + /* Must have both load insns */ if (LoadA == 0 || LoadX == 0) { return 0; @@ -837,6 +938,10 @@ static unsigned Opt_toseqax_tosneax (StackOpData* D, const char* BoolTransformer X = NewCodeEntry (OP65_CMP, LoadA->AM, LoadA->Arg, 0, D->OpEntry->LI); InsertEntry (D, X, D->IP++); + /* Lhs load entries can be removed if not used later */ + D->Lhs.X.Flags |= LI_REMOVE; + D->Lhs.A.Flags |= LI_REMOVE; + } else if ((D->Rhs.A.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT && (D->Rhs.X.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT) { @@ -857,13 +962,9 @@ static unsigned Opt_toseqax_tosneax (StackOpData* D, const char* BoolTransformer X = NewCodeEntry (OP65_CMP, LoadA->AM, LoadA->Arg, 0, D->OpEntry->LI); InsertEntry (D, X, D->IP++); - /* Rhs load entries must be removed if they are placed after the push */ - if (D->Rhs.X.LoadIndex > D->PushIndex) { - D->Rhs.X.Flags |= LI_REMOVE; - } - if (D->Rhs.A.LoadIndex > D->PushIndex) { - D->Rhs.A.Flags |= LI_REMOVE; - } + /* Rhs load entries must be removed */ + D->Rhs.X.Flags |= LI_REMOVE; + D->Rhs.A.Flags |= LI_REMOVE; } else if ((D->Rhs.A.Flags & LI_DIRECT) != 0 && (D->Rhs.X.Flags & LI_DIRECT) != 0) { @@ -883,8 +984,8 @@ static unsigned Opt_toseqax_tosneax (StackOpData* D, const char* BoolTransformer } else { /* Save lhs into zeropage, then compare */ - AddStoreX (D); - AddStoreA (D); + AddStoreLhsX (D); + AddStoreLhsA (D); D->IP = D->OpIndex+1; @@ -943,11 +1044,15 @@ static unsigned Opt_tosshift (StackOpData* D, const char* Name) X = NewCodeEntry (OP65_LDX, LoadX->AM, LoadX->Arg, 0, D->OpEntry->LI); InsertEntry (D, X, D->IP++); + /* Lhs load entries can be removed if not used later */ + D->Lhs.X.Flags |= LI_REMOVE; + D->Lhs.A.Flags |= LI_REMOVE; + } else { /* Save lhs into zeropage and reload later */ - AddStoreX (D); - AddStoreA (D); + AddStoreLhsX (D); + AddStoreLhsA (D); /* Be sure to setup IP after adding the stores, otherwise it will get ** messed up. @@ -991,8 +1096,8 @@ static unsigned Opt___bzero (StackOpData* D) /* Check if we're using a register variable */ if (!IsRegVar (D)) { /* Store the value into the zeropage instead of pushing it */ - AddStoreX (D); - AddStoreA (D); + AddStoreLhsX (D); + AddStoreLhsA (D); } /* If the return value of __bzero is used, we have to add code to reload @@ -1083,8 +1188,8 @@ static unsigned Opt_staspidx (StackOpData* D) /* Check if we're using a register variable */ if (!IsRegVar (D)) { /* Store the value into the zeropage instead of pushing it */ - AddStoreX (D); - AddStoreA (D); + AddStoreLhsX (D); + AddStoreLhsA (D); } /* Replace the store subroutine call by a direct op */ @@ -1108,8 +1213,8 @@ static unsigned Opt_staxspidx (StackOpData* D) /* Check if we're using a register variable */ if (!IsRegVar (D)) { /* Store the value into the zeropage instead of pushing it */ - AddStoreX (D); - AddStoreA (D); + AddStoreLhsX (D); + AddStoreLhsA (D); } /* Inline the store */ @@ -1187,8 +1292,8 @@ static unsigned Opt_tosaddax (StackOpData* D) int Signed = (strcmp (N->Arg, "ldaidx") == 0); /* Store the value into the zeropage instead of pushing it */ - AddStoreX (D); - AddStoreA (D); + AddStoreLhsX (D); + AddStoreLhsA (D); /* Replace the ldy by a tay. Be sure to create the new entry before ** deleting the ldy, since we will reference the line info from this @@ -1386,6 +1491,10 @@ static unsigned Opt_tosgeax (StackOpData* D) X = NewCodeEntry (OP65_ROL, AM65_ACC, "a", 0, D->OpEntry->LI); InsertEntry (D, X, D->IP++); + /* Rhs load entries must be removed */ + D->Rhs.X.Flags |= LI_REMOVE; + D->Rhs.A.Flags |= LI_REMOVE; + /* Remove the push and the call to the tosgeax function */ RemoveRemainders (D); @@ -1440,6 +1549,10 @@ static unsigned Opt_tosltax (StackOpData* D) X = NewCodeEntry (OP65_ROL, AM65_ACC, "a", 0, D->OpEntry->LI); InsertEntry (D, X, D->IP++); + /* Rhs load entries must be removed */ + D->Rhs.X.Flags |= LI_REMOVE; + D->Rhs.A.Flags |= LI_REMOVE; + /* Remove the push and the call to the tosltax function */ RemoveRemainders (D); @@ -1517,6 +1630,10 @@ static unsigned Opt_tossubax (StackOpData* D) /* Add code for high operand */ AddOpHigh (D, OP65_SBC, &D->Rhs, 1); + /* Rhs load entries must be removed */ + D->Rhs.X.Flags |= LI_REMOVE; + D->Rhs.A.Flags |= LI_REMOVE; + /* Remove the push and the call to the tossubax function */ RemoveRemainders (D); @@ -1556,6 +1673,10 @@ static unsigned Opt_tosugeax (StackOpData* D) X = NewCodeEntry (OP65_ROL, AM65_ACC, "a", 0, D->OpEntry->LI); InsertEntry (D, X, D->IP++); + /* Rhs load entries must be removed */ + D->Rhs.X.Flags |= LI_REMOVE; + D->Rhs.A.Flags |= LI_REMOVE; + /* Remove the push and the call to the tosugeax function */ RemoveRemainders (D); @@ -1599,6 +1720,10 @@ static unsigned Opt_tosugtax (StackOpData* D) X = NewCodeEntry (OP65_JSR, AM65_ABS, "boolugt", 0, D->OpEntry->LI); InsertEntry (D, X, D->IP++); + /* Rhs load entries must be removed */ + D->Rhs.X.Flags |= LI_REMOVE; + D->Rhs.A.Flags |= LI_REMOVE; + /* Remove the push and the call to the operator function */ RemoveRemainders (D); @@ -1642,6 +1767,10 @@ static unsigned Opt_tosuleax (StackOpData* D) X = NewCodeEntry (OP65_JSR, AM65_ABS, "boolule", 0, D->OpEntry->LI); InsertEntry (D, X, D->IP++); + /* Rhs load entries must be removed */ + D->Rhs.X.Flags |= LI_REMOVE; + D->Rhs.A.Flags |= LI_REMOVE; + /* Remove the push and the call to the operator function */ RemoveRemainders (D); @@ -1673,6 +1802,10 @@ static unsigned Opt_tosultax (StackOpData* D) X = NewCodeEntry (OP65_JSR, AM65_ABS, "boolult", 0, D->OpEntry->LI); InsertEntry (D, X, D->IP++); + /* Rhs load entries must be removed */ + D->Rhs.X.Flags |= LI_REMOVE; + D->Rhs.A.Flags |= LI_REMOVE; + /* Remove the push and the call to the operator function */ RemoveRemainders (D); @@ -1723,26 +1856,26 @@ static unsigned Opt_tosxorax (StackOpData* D) static const OptFuncDesc FuncTable[] = { - { "__bzero", Opt___bzero, REG_NONE, OP_X_ZERO | OP_A_KNOWN }, - { "staspidx", Opt_staspidx, REG_NONE, OP_NONE }, - { "staxspidx", Opt_staxspidx, REG_AX, OP_NONE }, - { "tosaddax", Opt_tosaddax, REG_NONE, OP_NONE }, - { "tosandax", Opt_tosandax, REG_NONE, OP_NONE }, - { "tosaslax", Opt_tosaslax, REG_NONE, OP_NONE }, - { "tosasrax", Opt_tosasrax, REG_NONE, OP_NONE }, - { "toseqax", Opt_toseqax, REG_NONE, OP_NONE }, - { "tosgeax", Opt_tosgeax, REG_NONE, OP_RHS_LOAD_DIRECT }, - { "tosltax", Opt_tosltax, REG_NONE, OP_RHS_LOAD_DIRECT }, - { "tosneax", Opt_tosneax, REG_NONE, OP_NONE }, - { "tosorax", Opt_tosorax, REG_NONE, OP_NONE }, - { "tosshlax", Opt_tosshlax, REG_NONE, OP_NONE }, - { "tosshrax", Opt_tosshrax, REG_NONE, OP_NONE }, - { "tossubax", Opt_tossubax, REG_NONE, OP_RHS_LOAD_DIRECT }, - { "tosugeax", Opt_tosugeax, REG_NONE, OP_RHS_LOAD_DIRECT }, - { "tosugtax", Opt_tosugtax, REG_NONE, OP_RHS_LOAD_DIRECT }, - { "tosuleax", Opt_tosuleax, REG_NONE, OP_RHS_LOAD_DIRECT }, - { "tosultax", Opt_tosultax, REG_NONE, OP_RHS_LOAD_DIRECT }, - { "tosxorax", Opt_tosxorax, REG_NONE, OP_NONE }, + { "__bzero", Opt___bzero, REG_NONE, OP_X_ZERO | OP_A_KNOWN }, + { "staspidx", Opt_staspidx, REG_NONE, OP_NONE }, + { "staxspidx", Opt_staxspidx, REG_AX, OP_NONE }, + { "tosaddax", Opt_tosaddax, REG_NONE, OP_NONE }, + { "tosandax", Opt_tosandax, REG_NONE, OP_NONE }, + { "tosaslax", Opt_tosaslax, REG_NONE, OP_NONE }, + { "tosasrax", Opt_tosasrax, REG_NONE, OP_NONE }, + { "toseqax", Opt_toseqax, REG_NONE, OP_LR_INTERCHANGE | OP_RHS_REMOVE_DIRECT }, + { "tosgeax", Opt_tosgeax, REG_NONE, OP_RHS_REMOVE_DIRECT | OP_RHS_LOAD_DIRECT }, + { "tosltax", Opt_tosltax, REG_NONE, OP_RHS_REMOVE_DIRECT | OP_RHS_LOAD_DIRECT }, + { "tosneax", Opt_tosneax, REG_NONE, OP_LR_INTERCHANGE | OP_RHS_REMOVE_DIRECT }, + { "tosorax", Opt_tosorax, REG_NONE, OP_NONE }, + { "tosshlax", Opt_tosshlax, REG_NONE, OP_NONE }, + { "tosshrax", Opt_tosshrax, REG_NONE, OP_NONE }, + { "tossubax", Opt_tossubax, REG_NONE, OP_RHS_REMOVE_DIRECT | OP_RHS_LOAD_DIRECT }, + { "tosugeax", Opt_tosugeax, REG_NONE, OP_RHS_REMOVE_DIRECT | OP_RHS_LOAD_DIRECT }, + { "tosugtax", Opt_tosugtax, REG_NONE, OP_RHS_REMOVE_DIRECT | OP_RHS_LOAD_DIRECT }, + { "tosuleax", Opt_tosuleax, REG_NONE, OP_RHS_REMOVE_DIRECT | OP_RHS_LOAD_DIRECT }, + { "tosultax", Opt_tosultax, REG_NONE, OP_RHS_REMOVE_DIRECT | OP_RHS_LOAD_DIRECT }, + { "tosxorax", Opt_tosxorax, REG_NONE, OP_NONE }, }; #define FUNC_COUNT (sizeof(FuncTable) / sizeof(FuncTable[0])) @@ -1840,6 +1973,8 @@ static void ResetStackOpData (StackOpData* Data) { Data->OptFunc = 0; Data->ZPUsage = REG_NONE; + Data->ZPChanged = REG_NONE; + Data->UsedRegs = REG_NONE; ClearLoadInfo (&Data->Lhs); ClearLoadInfo (&Data->Rhs); @@ -1856,6 +1991,17 @@ static int PreCondOk (StackOpData* D) ** register to use. */ { + LoadInfo* Lhs; + LoadInfo* Rhs; + LoadRegInfo* LhsLo; + LoadRegInfo* LhsHi; + LoadRegInfo* RhsLo; + LoadRegInfo* RhsHi; + short LoVal; + short HiVal; + int I; + int Passed = 0; + /* Check the flags */ unsigned UnusedRegs = D->OptFunc->UnusedRegs; if (UnusedRegs != REG_NONE && @@ -1863,39 +2009,100 @@ static int PreCondOk (StackOpData* D) /* Cannot optimize */ return 0; } - if ((D->OptFunc->Flags & OP_A_KNOWN) != 0 && - RegValIsUnknown (D->OpEntry->RI->In.RegA)) { + + Passed = 0; + LoVal = D->OpEntry->RI->In.RegA; + HiVal = D->OpEntry->RI->In.RegX; + /* Check normally first, then interchange A/X and check again if necessary */ + for (I = (D->OptFunc->Flags & OP_AX_INTERCHANGE ? 0 : 1); !Passed && I < 2; ++I) { + + do { + if ((D->OptFunc->Flags & OP_A_KNOWN) != 0 && + RegValIsUnknown (LoVal)) { + /* Cannot optimize */ + break; + } + if ((D->OptFunc->Flags & OP_X_ZERO) != 0 && + HiVal != 0) { + /* Cannot optimize */ + break; + } + Passed = 1; + } while (0); + + /* Interchange A/X */ + LoVal = D->OpEntry->RI->In.RegX; + HiVal = D->OpEntry->RI->In.RegA; + } + if (!Passed) { /* Cannot optimize */ return 0; } - if ((D->OptFunc->Flags & OP_X_ZERO) != 0 && - D->OpEntry->RI->In.RegX != 0) { - /* Cannot optimize */ - return 0; - } - if ((D->OptFunc->Flags & OP_LHS_LOAD) != 0) { - if (D->Lhs.A.LoadIndex < 0 || D->Lhs.X.LoadIndex < 0) { - /* Cannot optimize */ - return 0; - } else if ((D->OptFunc->Flags & OP_LHS_LOAD_DIRECT) != 0) { - if ((D->Lhs.A.Flags & D->Lhs.X.Flags & LI_DIRECT) == 0) { - /* Cannot optimize */ - return 0; + + Passed = 0; + Lhs = &D->Lhs; + Rhs = &D->Rhs; + /* Check normally first, then interchange LHS/RHS and check again if necessary */ + for (I = (D->OptFunc->Flags & OP_LR_INTERCHANGE ? 0 : 1); !Passed && I < 2; ++I) { + + do { + LhsLo = &Lhs->A; + LhsHi = &Lhs->X; + RhsLo = &Rhs->A; + RhsHi = &Rhs->X; + /* Currently we have only LHS/RHS checks with identical requirements for A/X, + ** so we don't need to check twice for now. + */ + + if ((D->OptFunc->Flags & OP_LHS_LOAD) != 0) { + if ((LhsLo->Flags & LhsHi->Flags & LI_LOAD_INSN) == 0) { + /* Cannot optimize */ + break; + } else if ((D->OptFunc->Flags & OP_LHS_LOAD_DIRECT) != 0) { + if ((LhsLo->Flags & LhsHi->Flags & LI_DIRECT) == 0) { + /* Cannot optimize */ + break; + } + } } - } - } - if ((D->OptFunc->Flags & OP_RHS_LOAD) != 0) { - if (D->Rhs.A.LoadIndex < 0 || D->Rhs.X.LoadIndex < 0) { - /* Cannot optimize */ - return 0; - } else if ((D->OptFunc->Flags & OP_RHS_LOAD_DIRECT) != 0) { - if ((D->Rhs.A.Flags & D->Rhs.X.Flags & LI_DIRECT) == 0) { - /* Cannot optimize */ - return 0; + if ((D->OptFunc->Flags & OP_RHS_LOAD) != 0) { + if ((RhsLo->Flags & RhsHi->Flags & LI_LOAD_INSN) == 0) { + /* Cannot optimize */ + break; + } else if ((D->OptFunc->Flags & OP_RHS_LOAD_DIRECT) != 0) { + if ((RhsLo->Flags & RhsHi->Flags & LI_DIRECT) == 0) { + /* Cannot optimize */ + break; + } + } } - } + if ((D->OptFunc->Flags & OP_LHS_REMOVE) != 0) { + /* Check if the load entries cannot be removed */ + if ((LhsLo->LoadEntry != 0 && (LhsLo->LoadEntry->Flags & CEF_DONT_REMOVE) != 0) || + (LhsHi->LoadEntry != 0 && (LhsHi->LoadEntry->Flags & CEF_DONT_REMOVE) != 0)) { + if ((D->OptFunc->Flags & OP_LHS_REMOVE_DIRECT) != 0) { + /* Cannot optimize */ + break; + } + } + } + if ((D->OptFunc->Flags & OP_RHS_REMOVE) != 0) { + if ((RhsLo->LoadEntry != 0 && (RhsLo->LoadEntry->Flags & CEF_DONT_REMOVE) != 0) || + (RhsHi->LoadEntry != 0 && (RhsHi->LoadEntry->Flags & CEF_DONT_REMOVE) != 0)) { + if ((D->OptFunc->Flags & OP_RHS_REMOVE_DIRECT) != 0) { + /* Cannot optimize */ + break; + } + } + } + Passed = 1; + } while (0); + + /* Interchange LHS/RHS for next round */ + Lhs = &D->Rhs; + Rhs = &D->Lhs; } - if ((D->Rhs.A.Flags | D->Rhs.X.Flags) & LI_DUP_LOAD) { + if (!Passed) { /* Cannot optimize */ return 0; } @@ -1929,6 +2136,52 @@ static int PreCondOk (StackOpData* D) +static void SetDontRemoveEntryFlag (LoadRegInfo* RI) +/* Flag the entry as non-removable according to register flags */ +{ + if (RI->Flags & LI_DONT_REMOVE) { + if (RI->LoadEntry != 0) { + RI->LoadEntry->Flags |= CEF_DONT_REMOVE; + } + } +} + + + +static void ResetDontRemoveEntryFlag (LoadRegInfo* RI) +/* Unflag the entry as non-removable according to register flags */ +{ + if (RI->Flags & LI_DONT_REMOVE) { + if (RI->LoadEntry != 0) { + RI->LoadEntry->Flags &= ~CEF_DONT_REMOVE; + } + } +} + + + +static void SetDontRemoveEntryFlags (StackOpData* D) +/* Flag the entries as non-removable according to register flags */ +{ + SetDontRemoveEntryFlag (&D->Lhs.A); + SetDontRemoveEntryFlag (&D->Lhs.X); + SetDontRemoveEntryFlag (&D->Rhs.A); + SetDontRemoveEntryFlag (&D->Rhs.X); +} + + + +static void ResetDontRemoveEntryFlags (StackOpData* D) +/* Unflag the entries as non-removable according to register flags */ +{ + ResetDontRemoveEntryFlag (&D->Lhs.A); + ResetDontRemoveEntryFlag (&D->Lhs.X); + ResetDontRemoveEntryFlag (&D->Rhs.A); + ResetDontRemoveEntryFlag (&D->Rhs.X); +} + + + unsigned OptStackOps (CodeSeg* S) /* Optimize operations that take operands via the stack */ { @@ -1936,9 +2189,8 @@ unsigned OptStackOps (CodeSeg* S) StackOpData Data; int I; int OldEntryCount; /* Old number of entries */ - unsigned UsedRegs = 0; /* Registers used */ - unsigned ChangedRegs = 0;/* Registers changed */ - + unsigned Used; /* What registers would be used */ + unsigned PushedRegs; /* Track if the same regs are used after the push */ enum { Initialize, @@ -1977,7 +2229,6 @@ unsigned OptStackOps (CodeSeg* S) case Initialize: ResetStackOpData (&Data); - UsedRegs = ChangedRegs = REG_NONE; State = Search; /* FALLTHROUGH */ @@ -1986,15 +2237,39 @@ unsigned OptStackOps (CodeSeg* S) ** what is in a register once pushax is encountered. */ if (CE_HasLabel (E)) { - /* Currently we don't track across branches */ + /* Currently we don't track across branches. + ** Remember this as an indirect load. + */ ClearLoadInfo (&Data.Lhs); + Data.Lhs.A.LoadIndex = I; + Data.Lhs.X.LoadIndex = I; + Data.Lhs.Y.LoadIndex = I; } if (CE_IsCallTo (E, "pushax")) { + /* Disallow removing the loads if the registers are used */ + if (Data.UsedRegs & REG_A) { + Data.Lhs.A.Flags |= LI_DONT_REMOVE; + } + if (Data.UsedRegs & REG_X) { + Data.Lhs.X.Flags |= LI_DONT_REMOVE; + } + if (Data.UsedRegs & REG_Y) { + Data.Lhs.Y.Flags |= LI_DONT_REMOVE; + } + + /* The LHS regs are also used as the default RHS until changed */ + PushedRegs = REG_AXY; + Data.UsedRegs = REG_AXY; + CopyLoadInfo (&Data.Rhs, &Data.Lhs); + Data.PushIndex = I; + Data.PushEntry = E; State = FoundPush; } else { /* Track load insns */ - TrackLoads (&Data.Lhs, E, I); + Used = TrackLoads (&Data.Lhs, 0, Data.Code, I); + Data.UsedRegs &= ~E->Chg; + Data.UsedRegs |= Used; } break; @@ -2004,8 +2279,13 @@ unsigned OptStackOps (CodeSeg* S) ** for code that will disable us from translating the sequence. */ if (CE_HasLabel (E)) { - /* Currently we don't track across branches */ + /* Currently we don't track across branches. + ** Remember this as an indirect load. + */ ClearLoadInfo (&Data.Rhs); + Data.Rhs.A.LoadIndex = I; + Data.Rhs.X.LoadIndex = I; + Data.Rhs.Y.LoadIndex = I; } if (E->OPC == OP65_JSR) { @@ -2014,6 +2294,16 @@ unsigned OptStackOps (CodeSeg* S) */ Data.OptFunc = FindFunc (E->Arg); if (Data.OptFunc) { + /* Disallow removing the loads if the registers are used */ + if (Data.UsedRegs & REG_A) { + Data.Rhs.A.Flags |= LI_DONT_REMOVE; + } + if (Data.UsedRegs & REG_X) { + Data.Rhs.X.Flags |= LI_DONT_REMOVE; + } + if (Data.UsedRegs & REG_Y) { + Data.Rhs.Y.Flags |= LI_DONT_REMOVE; + } /* Remember the op index and go on */ Data.OpIndex = I; Data.OpEntry = E; @@ -2027,22 +2317,9 @@ unsigned OptStackOps (CodeSeg* S) I = Data.PushIndex; State = Initialize; break; - } else { - /* Track register usage */ - Data.ZPUsage |= (E->Use | E->Chg); - TrackLoads (&Data.Rhs, E, I); } - } else if (E->Info & OF_STORE && (E->Chg & REG_ZP) == 0) { - - /* Too dangerous - there may be a change of a variable - ** within the sequence. - */ - I = Data.PushIndex; - State = Initialize; - break; - - } else if ((E->Use & REG_SP) != 0 && + } else if ((E->Use & REG_SP) != 0 && (E->AM != AM65_ZP_INDY || RegValIsUnknown (E->RI->In.RegY) || E->RI->In.RegY < 2)) { @@ -2059,22 +2336,31 @@ unsigned OptStackOps (CodeSeg* S) State = Initialize; break; - } else { - /* Other stuff: Track register usage */ - Data.ZPUsage |= (E->Use | E->Chg); - TrackLoads (&Data.Rhs, E, I); } - /* If the registers from the push (A/X) are used before they're - ** changed, we cannot change the sequence, because this would - ** with a high probability change the register contents. - */ - UsedRegs |= E->Use; - if ((UsedRegs & ~ChangedRegs) & REG_AX) { - I = Data.PushIndex; - State = Initialize; - break; + + /* Track register usage */ + Used = TrackLoads (&Data.Rhs, &Data.Lhs, Data.Code, I); + Data.ZPUsage |= (E->Use | E->Chg); + /* The changes could depend on the use */ + Data.UsedRegs &= ~E->Chg; + Data.UsedRegs |= Used; + Data.ZPChanged |= E->Chg; + + /* Check if any parts of Lhs are used again before overwritten */ + if (PushedRegs != 0) { + if ((PushedRegs & E->Use) != 0) { + if ((PushedRegs & E->Use & REG_A) != 0) { + Data.Lhs.A.Flags |= LI_DONT_REMOVE; + } + if ((PushedRegs & E->Use & REG_X) != 0) { + Data.Lhs.X.Flags |= LI_DONT_REMOVE; + } + if ((PushedRegs & E->Use & REG_Y) != 0) { + Data.Lhs.Y.Flags |= LI_DONT_REMOVE; + } + } + PushedRegs &= ~E->Chg; } - ChangedRegs |= E->Chg; break; case FoundOp: @@ -2093,26 +2379,31 @@ unsigned OptStackOps (CodeSeg* S) ** original zero page locations for the final op, but must ** use another ZP location to save them. */ - ChangedRegs &= REG_ZP; + Data.ZPChanged &= REG_ZP; if (Data.Lhs.A.LoadEntry && Data.Lhs.A.LoadEntry->AM == AM65_ZP) { Data.ZPUsage |= Data.Lhs.A.LoadEntry->Use; - if ((Data.Lhs.A.LoadEntry->Use & ChangedRegs) != 0) { + if ((Data.Lhs.A.LoadEntry->Use & Data.ZPChanged) != 0) { Data.Lhs.A.Flags &= ~(LI_DIRECT | LI_RELOAD_Y); } } if (Data.Lhs.X.LoadEntry && Data.Lhs.X.LoadEntry->AM == AM65_ZP) { Data.ZPUsage |= Data.Lhs.X.LoadEntry->Use; - if ((Data.Lhs.X.LoadEntry->Use & ChangedRegs) != 0) { + if ((Data.Lhs.X.LoadEntry->Use & Data.ZPChanged) != 0) { Data.Lhs.X.Flags &= ~(LI_DIRECT | LI_RELOAD_Y); } } + /* Flag entries that can't be removed */ + SetDontRemoveEntryFlags (&Data); + /* Check the preconditions. If they aren't ok, reset the insn ** pointer to the pushax and start over. We will loose part of ** load tracking but at least a/x has probably lost between ** pushax and here and will be tracked again when restarting. */ if (!PreCondOk (&Data)) { + /* Unflag entries that can't be removed */ + ResetDontRemoveEntryFlags (&Data); I = Data.PushIndex; State = Initialize; break; @@ -2138,6 +2429,9 @@ unsigned OptStackOps (CodeSeg* S) /* Call the optimizer function */ Changes += Data.OptFunc->Func (&Data); + /* Unflag entries that can't be removed */ + ResetDontRemoveEntryFlags (&Data); + /* Since the function may have added or deleted entries, ** correct the index. */ From 53eb6a948db9285c0a8e7e62f42245d2dad2204e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 3 Jan 2020 08:20:21 +0800 Subject: [PATCH 0139/2710] No more duplicated stores by Opt_tosshift which could result in worse optimizations. --- src/cc65/coptstop.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 46d600dba..b14b23195 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -1017,9 +1017,6 @@ static unsigned Opt_tosshift (StackOpData* D, const char* Name) { CodeEntry* X; - /* Store the value into the zeropage instead of pushing it */ - ReplacePushByStore (D); - /* If the lhs is direct (but not stack relative), we can just reload the ** data later. */ From 2220c58f51d74cfd82d065376ea856a3c5e543cf Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 3 Jan 2020 08:20:28 +0800 Subject: [PATCH 0140/2710] If the previous insn may be skipped, we cannot simply predict the output values of the registers. --- src/cc65/codeseg.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/codeseg.c b/src/cc65/codeseg.c index 58586affd..f2e0faf15 100644 --- a/src/cc65/codeseg.c +++ b/src/cc65/codeseg.c @@ -1560,9 +1560,9 @@ void CS_GenRegInfo (CodeSeg* S) /* If this insn is a branch on zero flag, we may have more info on ** register contents for one of both flow directions, but only if - ** there is a previous instruction. + ** we've gone through a previous instruction. */ - if ((E->Info & OF_ZBRA) != 0 && (P = CS_GetPrevEntry (S, I)) != 0) { + if (LabelCount == 0 && (E->Info & OF_ZBRA) != 0 && (P = CS_GetPrevEntry (S, I)) != 0) { /* Get the branch condition */ bc_t BC = GetBranchCond (E->OPC); From 8a166ac82fa790c4607ed326bddc1e97b3ed5a5c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 11 Feb 2020 18:28:38 +0800 Subject: [PATCH 0141/2710] Fixed register usage tracking interfered by CE_SetArg. --- src/cc65/codeent.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 51f5f1378..7dd90833b 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -360,6 +360,10 @@ void CE_SetArg (CodeEntry* E, const char* Arg) /* Assign the new one */ E->Arg = GetArgCopy (Arg); + + /* Update the Use and Chg in E */ + const OPCDesc* D = GetOPCDesc (E->OPC); + SetUseChgInfo (E, D); } From e9307ce58e04aff2322adbf2f245abcdb2eeace6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Jun 2020 08:16:51 +0800 Subject: [PATCH 0142/2710] Moved test/ref/cc65141011.c to test/val/cc65141011.c. --- test/{ref => val}/cc65141011.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/{ref => val}/cc65141011.c (100%) diff --git a/test/ref/cc65141011.c b/test/val/cc65141011.c similarity index 100% rename from test/ref/cc65141011.c rename to test/val/cc65141011.c From 76091b96d4100137d8f16f25577834fc28df319c Mon Sep 17 00:00:00 2001 From: Dirk Jagdmann <doj@cubic.org> Date: Tue, 16 Jun 2020 22:10:39 -0700 Subject: [PATCH 0143/2710] C64 Kerberos extended memory driver --- libsrc/c64/emd/c64-kerberos.s | 280 ++++++++++++++++++++++++++++++++++ testcode/lib/em-test.c | 24 ++- 2 files changed, 296 insertions(+), 8 deletions(-) create mode 100644 libsrc/c64/emd/c64-kerberos.s diff --git a/libsrc/c64/emd/c64-kerberos.s b/libsrc/c64/emd/c64-kerberos.s new file mode 100644 index 000000000..be385ef28 --- /dev/null +++ b/libsrc/c64/emd/c64-kerberos.s @@ -0,0 +1,280 @@ +; Extended Memory Driver for the Kerberos MIDI interface. +; http://www.frank-buss.de/kerberos/ +; based on the code for RamCart 64/128KB cartridge. +; 2020-06-16 Dirk Jagdmann <doj@cubic.org> + + .include "zeropage.inc" + .include "em-kernel.inc" + .include "em-error.inc" + + .macpack generic + .macpack module + +; ------------------------------------------------------------------------ +; Header. Includes jump table + + module_header _c64_kerberos_emd + +; Driver signature + + .byte $65, $6d, $64 ; "emd" + .byte EMD_API_VERSION ; EM API version number + +; Library reference + + .addr $0000 + +; Jump table + + .addr INSTALL + .addr UNINSTALL + .addr PAGECOUNT + .addr MAP + .addr USE + .addr COMMIT + .addr COPYFROM + .addr COPYTO + +; ------------------------------------------------------------------------ +; Constants + +RAMC_WINDOW = $DF00 ; Address of Kerberos SRAM +RAMC_PAGE_LO = $DE3E ; Page register low +RAMC_PAGE_HI = $DE3F ; Page register high + +.code + +; ------------------------------------------------------------------------ +; INSTALL routine. Is called after the driver is loaded into memory. If +; possible, check if the hardware is present and determine the amount of +; memory available. +; Must return an EM_ERR_xx code in a/x. +; + +INSTALL: + ;; write $55 into first page + lda #0 + sta RAMC_PAGE_LO + sta RAMC_PAGE_HI + lda #$55 + sta RAMC_WINDOW + + ;; write $AA into second page + lda #1 + sta RAMC_PAGE_LO + sta RAMC_PAGE_HI + lda #$AA + sta RAMC_WINDOW + + ;; check $55 in first page + lda #0 + sta RAMC_PAGE_LO + sta RAMC_PAGE_HI + lda RAMC_WINDOW + cmp #$55 + bne @notpresent + + ;; check $AA in first page + lda #1 + sta RAMC_PAGE_LO + sta RAMC_PAGE_HI + lda RAMC_WINDOW + cmp #$AA + bne @notpresent + + lda #<EM_ERR_OK + ldx #>EM_ERR_OK + rts + +@notpresent: + lda #<EM_ERR_NO_DEVICE + ldx #>EM_ERR_NO_DEVICE + ; use rts from UNINSTALL below + +; ------------------------------------------------------------------------ +; UNINSTALL routine. Is called before the driver is removed from memory. +; Can do cleanup or whatever. Must not return anything. +; + +UNINSTALL: + rts + +; ------------------------------------------------------------------------ +; PAGECOUNT: Return the total number of available pages in a/x. +; + +PAGECOUNT: + lda #0 + ldx #2 + rts + +; ------------------------------------------------------------------------ +; USE: Tell the driver that the window is now associated with a given page. +; The Kerberos cartridge does not copy but actually map the window, so USE is +; identical to MAP. + +USE = MAP + +; ------------------------------------------------------------------------ +; MAP: Map the page in a/x into memory and return a pointer to the page in +; a/x. The contents of the currently mapped page (if any) may be discarded +; by the driver. +; + +MAP: sta RAMC_PAGE_LO + txa + and #1 + sta RAMC_PAGE_HI + lda #<RAMC_WINDOW + ldx #>RAMC_WINDOW + +; Use the RTS from COMMIT below to save a precious byte of storage + +; ------------------------------------------------------------------------ +; COMMIT: Commit changes in the memory window to extended storage. + +COMMIT: rts + +; ------------------------------------------------------------------------ +; COPYFROM: Copy from extended into linear memory. A pointer to a structure +; describing the request is passed in a/x. +; The function must not return anything. +; + +COPYFROM: + jsr setup + +; Setup is: +; +; - ptr1 contains the struct pointer +; - ptr2 contains the linear memory buffer +; - ptr3 contains -(count-1) +; - tmp1 contains the low page register value +; - tmp2 contains the high page register value +; - X contains the page offset +; - Y contains zero + + jmp @L5 + +@L1: lda RAMC_WINDOW,x + sta (ptr2),y + iny + bne @L2 + inc ptr2+1 +@L2: inx + beq @L4 + +; Bump count and repeat + +@L3: inc ptr3 + bne @L1 + inc ptr3+1 + bne @L1 + rts + +; Bump page register + +@L4: inc tmp1 + bne @L5 + inc tmp2 +@L5: lda tmp1 + sta RAMC_PAGE_LO + lda tmp2 + sta RAMC_PAGE_HI + jmp @L3 + +; ------------------------------------------------------------------------ +; COPYTO: Copy from linear into extended memory. A pointer to a structure +; describing the request is passed in a/x. +; The function must not return anything. +; + +COPYTO: + jsr setup + +; Setup is: +; +; - ptr1 contains the struct pointer +; - ptr2 contains the linear memory buffer +; - ptr3 contains -(count-1) +; - tmp1 contains the low page register value +; - tmp2 contains the high page register value +; - X contains the page offset +; - Y contains zero + + jmp @L5 + +@L1: lda (ptr2),y + sta RAMC_WINDOW,x + iny + bne @L2 + inc ptr2+1 +@L2: inx + beq @L4 + +; Bump count and repeat + +@L3: inc ptr3 + bne @L1 + inc ptr3+1 + bne @L1 + rts + +; Bump page register + +@L4: inc tmp1 + bne @L5 + inc tmp2 +@L5: lda tmp1 + sta RAMC_PAGE_LO + lda tmp2 + sta RAMC_PAGE_HI + jmp @L3 + +; ------------------------------------------------------------------------ +; Helper function for COPYFROM and COPYTO: Store the pointer to the request +; structure and prepare data for the copy + +setup: sta ptr1 + stx ptr1+1 ; Save passed pointer + +; Get the page number from the struct and adjust it so that it may be used +; with the hardware. That is: lower 6 bits in tmp1, high bits in tmp2. + + ldy #EM_COPY::PAGE+1 + lda (ptr1),y + sta tmp2 + dey + lda (ptr1),y + sta tmp1 + +; Get the buffer pointer into ptr2 + + ldy #EM_COPY::BUF + lda (ptr1),y + sta ptr2 + iny + lda (ptr1),y + sta ptr2+1 + +; Get the count, calculate -(count-1) and store it into ptr3 + + ldy #EM_COPY::COUNT + lda (ptr1),y + eor #$FF + sta ptr3 + iny + lda (ptr1),y + eor #$FF + sta ptr3+1 + +; Get the page offset into X and clear Y + + ldy #EM_COPY::OFFS + lda (ptr1),y + tax + ldy #$00 + +; Done + + rts diff --git a/testcode/lib/em-test.c b/testcode/lib/em-test.c index ecee6608c..d71045f7a 100644 --- a/testcode/lib/em-test.c +++ b/testcode/lib/em-test.c @@ -12,16 +12,12 @@ #define BUF_SIZE (PAGE_SIZE + PAGE_SIZE/2) static unsigned buf[BUF_SIZE]; - - static void cleanup (void) /* Remove the driver on exit */ { em_unload (); } - - static void fill (register unsigned* page, register unsigned char count, register unsigned num) { register unsigned char i; @@ -30,8 +26,6 @@ static void fill (register unsigned* page, register unsigned char count, registe } } - - static void cmp (unsigned page, register const unsigned* buf, register unsigned char count, register unsigned num) { @@ -49,6 +43,20 @@ static void cmp (unsigned page, register const unsigned* buf, } } +static const char* em_error(int e) +{ + switch(e) + { + case EM_ERR_OK: return "ok"; + case EM_ERR_NO_DRIVER: return "no driver"; + case EM_ERR_CANNOT_LOAD: return "cannot load"; + case EM_ERR_INV_DRIVER: return "invalid driver"; + case EM_ERR_NO_DEVICE: return "no device"; + case EM_ERR_INSTALLED: return "already installed"; + } + return "unknown"; +} + typedef struct emd_test_s { char key; char *displayname; @@ -88,6 +96,7 @@ static emd_test_t drivers[] = { { '7', "C128 VDC (in C64 mode)", "c64-vdc.emd" }, { '8', "C64DTV himem", "dtv-himem.emd" }, { '9', "65816 extra banks", "c64-65816.emd" }, + { 'k', "Kerberos", "c64-kerberos.emd" }, #endif #if defined(__C128__) @@ -142,7 +151,7 @@ int main (void) clrscr (); Res = em_load_driver (drivers[valid_key].drivername); if (Res != EM_ERR_OK) { - cprintf ("Error in em_load_driver: %u\r\n", Res); + cprintf ("Error in em_load_driver: %u\r\n%s\r\n", Res, em_error(Res)); cprintf ("os: %u, %s\r\n", _oserror, _stroserror (_oserror)); #ifdef __ATARI__ cgetc (); @@ -263,5 +272,4 @@ int main (void) #endif return 0; - } From cb2676665111d7b521747d6998570ab705417129 Mon Sep 17 00:00:00 2001 From: Dirk Jagdmann <doj@cubic.org> Date: Wed, 17 Jun 2020 08:56:07 -0700 Subject: [PATCH 0144/2710] add C64 documentation --- doc/c64.sgml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/c64.sgml b/doc/c64.sgml index 7cd9b2d81..5ad89f9da 100644 --- a/doc/c64.sgml +++ b/doc/c64.sgml @@ -337,6 +337,10 @@ Note that the graphics drivers are incompatible with the Autodetects the amount of memory available (16 or 64K) and offers 64 or 256 pages of 256 bytes each. + <tag><tt/c64-kerberos.emd (c64_kerberos_emd)/</tag> + A driver for the Kerberos MIDI Cartridge. The cartridge has 256 + pages of 256 bytes for a total of 128KB. + <tag><tt/dtv-himem.emd (dtv_himem_emd)/</tag> A driver for the C64 D2TV (the second or PAL version). This driver offers indeed 7680 pages of 256 bytes each. From ba79b2db9ba4dffc173cf75287ce0f8934109717 Mon Sep 17 00:00:00 2001 From: Dirk Jagdmann <doj@cubic.org> Date: Wed, 17 Jun 2020 15:42:28 -0700 Subject: [PATCH 0145/2710] add kerberos em driver variable. --- include/c64.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/c64.h b/include/c64.h index b1cd2e2c4..ed82e5299 100644 --- a/include/c64.h +++ b/include/c64.h @@ -146,6 +146,7 @@ extern void c64_ram_emd[]; extern void c64_ramcart_emd[]; extern void c64_reu_emd[]; extern void c64_vdc_emd[]; +extern void c64_kerberos_emd[]; extern void dtv_himem_emd[]; extern void c64_hitjoy_joy[]; extern void c64_numpad_joy[]; From 070264acc47dc2e332267d8f177237231ff154e6 Mon Sep 17 00:00:00 2001 From: Dirk Jagdmann <doj@cubic.org> Date: Wed, 17 Jun 2020 15:42:37 -0700 Subject: [PATCH 0146/2710] remove tab characters. --- libsrc/c64/emd/c64-kerberos.s | 62 +++++++++++++++++------------------ 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/libsrc/c64/emd/c64-kerberos.s b/libsrc/c64/emd/c64-kerberos.s index be385ef28..de21a7009 100644 --- a/libsrc/c64/emd/c64-kerberos.s +++ b/libsrc/c64/emd/c64-kerberos.s @@ -52,44 +52,44 @@ RAMC_PAGE_HI = $DE3F ; Page register high ; INSTALL: - ;; write $55 into first page - lda #0 - sta RAMC_PAGE_LO - sta RAMC_PAGE_HI - lda #$55 - sta RAMC_WINDOW + ;; write $55 into first page + lda #0 + sta RAMC_PAGE_LO + sta RAMC_PAGE_HI + lda #$55 + sta RAMC_WINDOW - ;; write $AA into second page - lda #1 - sta RAMC_PAGE_LO - sta RAMC_PAGE_HI - lda #$AA - sta RAMC_WINDOW + ;; write $AA into second page + lda #1 + sta RAMC_PAGE_LO + sta RAMC_PAGE_HI + lda #$AA + sta RAMC_WINDOW - ;; check $55 in first page - lda #0 - sta RAMC_PAGE_LO - sta RAMC_PAGE_HI - lda RAMC_WINDOW - cmp #$55 - bne @notpresent + ;; check $55 in first page + lda #0 + sta RAMC_PAGE_LO + sta RAMC_PAGE_HI + lda RAMC_WINDOW + cmp #$55 + bne @notpresent - ;; check $AA in first page - lda #1 - sta RAMC_PAGE_LO - sta RAMC_PAGE_HI - lda RAMC_WINDOW - cmp #$AA - bne @notpresent + ;; check $AA in first page + lda #1 + sta RAMC_PAGE_LO + sta RAMC_PAGE_HI + lda RAMC_WINDOW + cmp #$AA + bne @notpresent - lda #<EM_ERR_OK + lda #<EM_ERR_OK ldx #>EM_ERR_OK - rts + rts @notpresent: lda #<EM_ERR_NO_DEVICE ldx #>EM_ERR_NO_DEVICE - ; use rts from UNINSTALL below + ; use rts from UNINSTALL below ; ------------------------------------------------------------------------ ; UNINSTALL routine. Is called before the driver is removed from memory. @@ -122,8 +122,8 @@ USE = MAP ; MAP: sta RAMC_PAGE_LO - txa - and #1 + txa + and #1 sta RAMC_PAGE_HI lda #<RAMC_WINDOW ldx #>RAMC_WINDOW From def27ed4e2a35b2fe13b71f5bbac3e60ee2f04df Mon Sep 17 00:00:00 2001 From: Dirk Jagdmann <doj@cubic.org> Date: Wed, 17 Jun 2020 15:45:04 -0700 Subject: [PATCH 0147/2710] change whitespace --- testcode/lib/em-test.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/testcode/lib/em-test.c b/testcode/lib/em-test.c index d71045f7a..2da9138e1 100644 --- a/testcode/lib/em-test.c +++ b/testcode/lib/em-test.c @@ -43,10 +43,9 @@ static void cmp (unsigned page, register const unsigned* buf, } } -static const char* em_error(int e) +static const char* em_error (int e) { - switch(e) - { + switch (e) { case EM_ERR_OK: return "ok"; case EM_ERR_NO_DRIVER: return "no driver"; case EM_ERR_CANNOT_LOAD: return "cannot load"; From 9227b0ccaf6fe90ef5ea80a138a636ff97c9f0c5 Mon Sep 17 00:00:00 2001 From: Dirk Jagdmann <doj@cubic.org> Date: Wed, 17 Jun 2020 15:46:19 -0700 Subject: [PATCH 0148/2710] sort items --- doc/c64.sgml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/c64.sgml b/doc/c64.sgml index 5ad89f9da..e42c1f890 100644 --- a/doc/c64.sgml +++ b/doc/c64.sgml @@ -318,6 +318,10 @@ Note that the graphics drivers are incompatible with the A driver for the ISEPIC cartridge. This driver offers just 8 pages of 256 bytes each. Written and contributed by Marco van den Heuvel. + <tag><tt/c64-kerberos.emd (c64_kerberos_emd)/</tag> + A driver for the Kerberos MIDI Cartridge. The cartridge has 256 + pages of 256 bytes for a total of 128KB. + <tag><tt/c64-ram.emd (c64_ram_emd)/</tag> A driver for the hidden RAM below the I/O area and kernal ROM. Supports 47 256 byte pages. Please note that this driver is incompatible with any of the @@ -337,10 +341,6 @@ Note that the graphics drivers are incompatible with the Autodetects the amount of memory available (16 or 64K) and offers 64 or 256 pages of 256 bytes each. - <tag><tt/c64-kerberos.emd (c64_kerberos_emd)/</tag> - A driver for the Kerberos MIDI Cartridge. The cartridge has 256 - pages of 256 bytes for a total of 128KB. - <tag><tt/dtv-himem.emd (dtv_himem_emd)/</tag> A driver for the C64 D2TV (the second or PAL version). This driver offers indeed 7680 pages of 256 bytes each. From 6465c3b6874e66029fc664b2c8bde8a8fded9c6b Mon Sep 17 00:00:00 2001 From: Dirk Jagdmann <doj@cubic.org> Date: Wed, 17 Jun 2020 15:50:54 -0700 Subject: [PATCH 0149/2710] change order of declarations. --- include/c64.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/c64.h b/include/c64.h index ed82e5299..afe47ece6 100644 --- a/include/c64.h +++ b/include/c64.h @@ -142,11 +142,11 @@ extern void c64_c256k_emd[]; extern void c64_dqbb_emd[]; extern void c64_georam_emd[]; extern void c64_isepic_emd[]; +extern void c64_kerberos_emd[]; extern void c64_ram_emd[]; extern void c64_ramcart_emd[]; extern void c64_reu_emd[]; extern void c64_vdc_emd[]; -extern void c64_kerberos_emd[]; extern void dtv_himem_emd[]; extern void c64_hitjoy_joy[]; extern void c64_numpad_joy[]; From 3cbe485b94649b80ef6a291af2fa49cf19eb05fc Mon Sep 17 00:00:00 2001 From: Dirk Jagdmann <doj@cubic.org> Date: Sun, 21 Jun 2020 09:05:17 -0700 Subject: [PATCH 0150/2710] fix description of Kerberos memory --- doc/c64.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/c64.sgml b/doc/c64.sgml index e42c1f890..7e00f3b93 100644 --- a/doc/c64.sgml +++ b/doc/c64.sgml @@ -319,7 +319,7 @@ Note that the graphics drivers are incompatible with the bytes each. Written and contributed by Marco van den Heuvel. <tag><tt/c64-kerberos.emd (c64_kerberos_emd)/</tag> - A driver for the Kerberos MIDI Cartridge. The cartridge has 256 + A driver for the Kerberos MIDI Cartridge. The cartridge has 512 pages of 256 bytes for a total of 128KB. <tag><tt/c64-ram.emd (c64_ram_emd)/</tag> From aaecf3cfec8d95d6d32d66d2a77acebb45aa9a9a Mon Sep 17 00:00:00 2001 From: Dirk Jagdmann <doj@cubic.org> Date: Sun, 21 Jun 2020 10:15:23 -0700 Subject: [PATCH 0151/2710] replace JMP with BEQ to save 1 byte. --- libsrc/c64/emd/c64-kerberos.s | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/c64/emd/c64-kerberos.s b/libsrc/c64/emd/c64-kerberos.s index de21a7009..30183362f 100644 --- a/libsrc/c64/emd/c64-kerberos.s +++ b/libsrc/c64/emd/c64-kerberos.s @@ -104,8 +104,8 @@ UNINSTALL: ; PAGECOUNT: - lda #0 - ldx #2 + lda #<(128 * 1024 / 256) + ldx #>(128 * 1024 / 256) rts ; ------------------------------------------------------------------------ @@ -154,7 +154,7 @@ COPYFROM: ; - X contains the page offset ; - Y contains zero - jmp @L5 + beq @L5 ; will always branch, because setup ends with ldy #0 @L1: lda RAMC_WINDOW,x sta (ptr2),y @@ -202,7 +202,7 @@ COPYTO: ; - X contains the page offset ; - Y contains zero - jmp @L5 + beq @L5 ; will always branch, because setup ends with ldy #0 @L1: lda (ptr2),y sta RAMC_WINDOW,x From 6e6ce4e5eedfd9f3c0629fc4b069f9a21be47b41 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 23 Jun 2020 00:46:12 +0200 Subject: [PATCH 0152/2710] added various tests related to bug #1045 --- test/val/postdec-16-16.c | 86 ++++++++++++++++++++++++++++++++++++++++ test/val/postdec-16-8.c | 86 ++++++++++++++++++++++++++++++++++++++++ test/val/postdec-8-16.c | 86 ++++++++++++++++++++++++++++++++++++++++ test/val/postdec-8-8.c | 86 ++++++++++++++++++++++++++++++++++++++++ test/val/postinc-16-16.c | 86 ++++++++++++++++++++++++++++++++++++++++ test/val/postinc-16-8.c | 85 +++++++++++++++++++++++++++++++++++++++ test/val/postinc-8-16.c | 86 ++++++++++++++++++++++++++++++++++++++++ test/val/postinc-8-8.c | 86 ++++++++++++++++++++++++++++++++++++++++ test/val/predec-16-16.c | 86 ++++++++++++++++++++++++++++++++++++++++ test/val/predec-16-8.c | 86 ++++++++++++++++++++++++++++++++++++++++ test/val/predec-8-16.c | 86 ++++++++++++++++++++++++++++++++++++++++ test/val/predec-8-8.c | 86 ++++++++++++++++++++++++++++++++++++++++ test/val/preinc-16-16.c | 86 ++++++++++++++++++++++++++++++++++++++++ test/val/preinc-16-8.c | 86 ++++++++++++++++++++++++++++++++++++++++ test/val/preinc-8-16.c | 86 ++++++++++++++++++++++++++++++++++++++++ test/val/preinc-8-8.c | 86 ++++++++++++++++++++++++++++++++++++++++ 16 files changed, 1375 insertions(+) create mode 100644 test/val/postdec-16-16.c create mode 100644 test/val/postdec-16-8.c create mode 100644 test/val/postdec-8-16.c create mode 100644 test/val/postdec-8-8.c create mode 100644 test/val/postinc-16-16.c create mode 100644 test/val/postinc-16-8.c create mode 100644 test/val/postinc-8-16.c create mode 100644 test/val/postinc-8-8.c create mode 100644 test/val/predec-16-16.c create mode 100644 test/val/predec-16-8.c create mode 100644 test/val/predec-8-16.c create mode 100644 test/val/predec-8-8.c create mode 100644 test/val/preinc-16-16.c create mode 100644 test/val/preinc-16-8.c create mode 100644 test/val/preinc-8-16.c create mode 100644 test/val/preinc-8-8.c diff --git a/test/val/postdec-16-16.c b/test/val/postdec-16-16.c new file mode 100644 index 000000000..e55b5765f --- /dev/null +++ b/test/val/postdec-16-16.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned short u16w = 3; +static unsigned short u16r = 5; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[u16w--] = ((unsigned char*)SOURCEMEM)[u16r--]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u16w: %d\n\r", u16w); + printf("u16r: %d\n\r", u16r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u16w != 1) { + err = EXIT_FAILURE; + } + if (u16r != 3) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/postdec-16-8.c b/test/val/postdec-16-8.c new file mode 100644 index 000000000..76a64d769 --- /dev/null +++ b/test/val/postdec-16-8.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned short u16w = 3; +static unsigned char u8r = 5; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[u16w--] = ((unsigned char*)SOURCEMEM)[u8r--]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u16w: %d\n\r", u16w); + printf("u8r: %d\n\r", u8r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u16w != 1) { + err = EXIT_FAILURE; + } + if (u8r != 3) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/postdec-8-16.c b/test/val/postdec-8-16.c new file mode 100644 index 000000000..f7716ae89 --- /dev/null +++ b/test/val/postdec-8-16.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned char u8w = 3; +static unsigned short u16r = 5; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[u8w--] = ((unsigned char*)SOURCEMEM)[u16r--]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u8w: %d\n\r", u8w); + printf("u16r: %d\n\r", u16r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u8w != 1) { + err = EXIT_FAILURE; + } + if (u16r != 3) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/postdec-8-8.c b/test/val/postdec-8-8.c new file mode 100644 index 000000000..b620c46dc --- /dev/null +++ b/test/val/postdec-8-8.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned char u8w = 3; +static unsigned char u8r = 5; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[u8w--] = ((unsigned char*)SOURCEMEM)[u8r--]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u8w: %d\n\r", u8w); + printf("u8r: %d\n\r", u8r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u8w != 1) { + err = EXIT_FAILURE; + } + if (u8r != 3) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/postinc-16-16.c b/test/val/postinc-16-16.c new file mode 100644 index 000000000..286e0364b --- /dev/null +++ b/test/val/postinc-16-16.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned short u16w = 1; +static unsigned short u16r = 3; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[u16w++] = ((unsigned char*)SOURCEMEM)[u16r++]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u16w: %d\n\r", u16w); + printf("u16r: %d\n\r", u16r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u16w != 3) { + err = EXIT_FAILURE; + } + if (u16r != 5) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/postinc-16-8.c b/test/val/postinc-16-8.c new file mode 100644 index 000000000..dd0a03d6c --- /dev/null +++ b/test/val/postinc-16-8.c @@ -0,0 +1,85 @@ + +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned short u16w = 1; +static unsigned char u8r = 3; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = 0; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[u16w++] = ((unsigned char*)SOURCEMEM)[u8r++]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u16w: %d\n\r", u16w); + printf("u8r: %d\n\r", u8r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = 1; + } + if (u16w != 3) { + err = 1; + } + if (u8r != 5) { + err = 1; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/postinc-8-16.c b/test/val/postinc-8-16.c new file mode 100644 index 000000000..57e934ced --- /dev/null +++ b/test/val/postinc-8-16.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned char u8w = 1; +static unsigned short u16r = 3; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[u8w++] = ((unsigned char*)SOURCEMEM)[u16r++]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u8w: %d\n\r", u8w); + printf("u16r: %d\n\r", u16r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u8w != 3) { + err = EXIT_FAILURE; + } + if (u16r != 5) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/postinc-8-8.c b/test/val/postinc-8-8.c new file mode 100644 index 000000000..b168af8df --- /dev/null +++ b/test/val/postinc-8-8.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned char u8w = 1; +static unsigned char u8r = 3; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[u8w++] = ((unsigned char*)SOURCEMEM)[u8r++]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u8w: %d\n\r", u8w); + printf("u8r: %d\n\r", u8r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u8w != 3) { + err = EXIT_FAILURE; + } + if (u8r != 5) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/predec-16-16.c b/test/val/predec-16-16.c new file mode 100644 index 000000000..7d70b1208 --- /dev/null +++ b/test/val/predec-16-16.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned short u16w = 3; +static unsigned short u16r = 5; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[--u16w] = ((unsigned char*)SOURCEMEM)[--u16r]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u16w: %d\n\r", u16w); + printf("u16r: %d\n\r", u16r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u16w != 1) { + err = EXIT_FAILURE; + } + if (u16r != 3) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/predec-16-8.c b/test/val/predec-16-8.c new file mode 100644 index 000000000..69a0a3e28 --- /dev/null +++ b/test/val/predec-16-8.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned short u16w = 3; +static unsigned char u8r = 5; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[--u16w] = ((unsigned char*)SOURCEMEM)[--u8r]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u16w: %d\n\r", u16w); + printf("u8r: %d\n\r", u8r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u16w != 1) { + err = EXIT_FAILURE; + } + if (u8r != 3) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/predec-8-16.c b/test/val/predec-8-16.c new file mode 100644 index 000000000..750312215 --- /dev/null +++ b/test/val/predec-8-16.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned char u8w = 3; +static unsigned short u16r = 5; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[--u8w] = ((unsigned char*)SOURCEMEM)[--u16r]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u8w: %d\n\r", u8w); + printf("u16r: %d\n\r", u16r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u8w != 1) { + err = EXIT_FAILURE; + } + if (u16r != 3) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/predec-8-8.c b/test/val/predec-8-8.c new file mode 100644 index 000000000..d1069b39e --- /dev/null +++ b/test/val/predec-8-8.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned char u8w = 3; +static unsigned char u8r = 5; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[--u8w] = ((unsigned char*)SOURCEMEM)[--u8r]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u8w: %d\n\r", u8w); + printf("u8r: %d\n\r", u8r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u8w != 1) { + err = EXIT_FAILURE; + } + if (u8r != 3) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/preinc-16-16.c b/test/val/preinc-16-16.c new file mode 100644 index 000000000..d9c6dbf62 --- /dev/null +++ b/test/val/preinc-16-16.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned short u16w = 3; +static unsigned short u16r = 5; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[++u16w] = ((unsigned char*)SOURCEMEM)[++u16r]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u16w: %d\n\r", u16w); + printf("u16r: %d\n\r", u16r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u16w != 5) { + err = EXIT_FAILURE; + } + if (u16r != 7) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/preinc-16-8.c b/test/val/preinc-16-8.c new file mode 100644 index 000000000..97a5dd306 --- /dev/null +++ b/test/val/preinc-16-8.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned short u16w = 3; +static unsigned char u8r = 5; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[++u16w] = ((unsigned char*)SOURCEMEM)[++u8r]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u16w: %d\n\r", u16w); + printf("u8r: %d\n\r", u8r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u16w != 5) { + err = EXIT_FAILURE; + } + if (u8r != 7) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/preinc-8-16.c b/test/val/preinc-8-16.c new file mode 100644 index 000000000..3c3a9b479 --- /dev/null +++ b/test/val/preinc-8-16.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned char u8w = 3; +static unsigned short u16r = 5; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[++u8w] = ((unsigned char*)SOURCEMEM)[++u16r]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u8w: %d\n\r", u8w); + printf("u16r: %d\n\r", u16r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u8w != 5) { + err = EXIT_FAILURE; + } + if (u16r != 7) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} diff --git a/test/val/preinc-8-8.c b/test/val/preinc-8-8.c new file mode 100644 index 000000000..a700bfc48 --- /dev/null +++ b/test/val/preinc-8-8.c @@ -0,0 +1,86 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#ifdef __C64__ +#include <conio.h> +#endif + +/* apparently we dont trigger the bug when not using absolute addresses? */ +#ifdef __C64__ +#define TARGETMEM 0x4c8 +#define SOURCEMEM 0x702 +#elif __SIM6502__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#elif __SIM65C02__ +#define TARGETMEM 0xc4c8 +#define SOURCEMEM 0xc702 +#else +static unsigned char mem[0x10]; +#define TARGETMEM &mem[0] +#define SOURCEMEM &mem[8] +#endif + +/* do not put at pos. 1, and 1 byte apart - so we can eventually notice + off-by-one errors */ +static unsigned char u8w = 3; +static unsigned char u8r = 5; + +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; + +static unsigned char i; +static unsigned char err = EXIT_SUCCESS; + +void test1(void) +{ + ((unsigned char*)TARGETMEM)[++u8w] = ((unsigned char*)SOURCEMEM)[++u8r]; +} + +void dotest(void) +{ + + memcpy(TARGETMEM, target, 8); + memcpy(SOURCEMEM, source, 8); + + test1(); + + memcpy(target, TARGETMEM, 8); + memcpy(source, SOURCEMEM, 8); +#ifdef __C64__ + clrscr(); +#endif + printf("source:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", source[i]); + } + printf("\n\rtarget:"); + for(i = 0; i < 8; ++i) { + printf("%0x ", target[i]); + } + printf("\n\r"); + + printf("u8w: %d\n\r", u8w); + printf("u8r: %d\n\r", u8r); + +} + +int main(void) +{ + dotest(); + dotest(); + if (memcmp(target, expect, 8) != 0) { + printf("buffer data error\n\r"); + err = EXIT_FAILURE; + } + if (u8w != 5) { + err = EXIT_FAILURE; + } + if (u8r != 7) { + err = EXIT_FAILURE; + } + printf("return: %d\n\r", err); + return err; +} From 86ba877a990196d978993e34fc3e9d448764d521 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Tue, 23 Jun 2020 21:25:23 +0200 Subject: [PATCH 0153/2710] Define REFCC and REFCC_UNSIGNED_CHARS in reference switch2.c uses these macros. With them unset, signed chars are not tested. --- test/ref/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ref/Makefile b/test/ref/Makefile index 5f0b86164..5da21bb92 100644 --- a/test/ref/Makefile +++ b/test/ref/Makefile @@ -54,7 +54,7 @@ $(WORKDIR): $(WORKDIR)/%.ref: %.c | $(WORKDIR) $(if $(QUIET),echo ref/$*.host) - $(CC) $(CFLAGS) -o $(WORKDIR)/$*.host $< $(NULLERR) + $(CC) $(CFLAGS) -DREFCC -DREFCC_UNSIGNED_CHARS -o $(WORKDIR)/$*.host $< $(NULLERR) $(WORKDIR)$S$*.host > $@ $(DIFF): ../bdiff.c | $(WORKDIR) From 8fe317e7faf733ab0bab5168c1e0afb5c3623bfb Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Tue, 23 Jun 2020 21:57:03 +0200 Subject: [PATCH 0154/2710] Remove REFCC_UNSIGNED_CHARS from test/ref/ Explicitly use signed char or unsigned char for REFCC. --- test/ref/Makefile | 2 +- test/ref/switch2.c | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/test/ref/Makefile b/test/ref/Makefile index 5da21bb92..be9fbed59 100644 --- a/test/ref/Makefile +++ b/test/ref/Makefile @@ -54,7 +54,7 @@ $(WORKDIR): $(WORKDIR)/%.ref: %.c | $(WORKDIR) $(if $(QUIET),echo ref/$*.host) - $(CC) $(CFLAGS) -DREFCC -DREFCC_UNSIGNED_CHARS -o $(WORKDIR)/$*.host $< $(NULLERR) + $(CC) $(CFLAGS) -DREFCC -o $(WORKDIR)/$*.host $< $(NULLERR) $(WORKDIR)$S$*.host > $@ $(DIFF): ../bdiff.c | $(WORKDIR) diff --git a/test/ref/switch2.c b/test/ref/switch2.c index 7884f3722..3b2ab23e6 100644 --- a/test/ref/switch2.c +++ b/test/ref/switch2.c @@ -40,11 +40,7 @@ void testdefault1(unsigned char i) { /* we want a signed char */ #ifdef REFCC -#ifdef REFCC_UNSIGNED_CHARS signed char k; -#else -char k; -#endif #else @@ -145,11 +141,7 @@ void testdefault2(unsigned char i) { /* we want a unsigned char */ #ifdef REFCC -#ifdef REFCC_UNSIGNED_CHARS -char k; -#else unsigned char k; -#endif #else From 18246278c5fd65e0daab65de229ea3a3baf71104 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Thu, 25 Jun 2020 08:54:58 +0200 Subject: [PATCH 0155/2710] switch2.c: Remove use of REFCC and UNSIGNED_CHARS Explicitly use `signed char` or `unsigned char`, rather than ``` signed char k; char k; signed char k; char k; ``` This should have resulted in the same thing; however, note that `REFCC` was never defined, and `common.h` was not included, so the old code in fact tested `char` then `unsigned char`, which are the same. The only difference is that a switch using plain `char` is not tested, but since this is the same as either `signed char` or `unsigned char`, the lack of test coverage seems relatively safe. --- test/ref/Makefile | 2 +- test/ref/switch2.c | 28 ++-------------------------- 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/test/ref/Makefile b/test/ref/Makefile index be9fbed59..5f0b86164 100644 --- a/test/ref/Makefile +++ b/test/ref/Makefile @@ -54,7 +54,7 @@ $(WORKDIR): $(WORKDIR)/%.ref: %.c | $(WORKDIR) $(if $(QUIET),echo ref/$*.host) - $(CC) $(CFLAGS) -DREFCC -o $(WORKDIR)/$*.host $< $(NULLERR) + $(CC) $(CFLAGS) -o $(WORKDIR)/$*.host $< $(NULLERR) $(WORKDIR)$S$*.host > $@ $(DIFF): ../bdiff.c | $(WORKDIR) diff --git a/test/ref/switch2.c b/test/ref/switch2.c index 3b2ab23e6..78d383b52 100644 --- a/test/ref/switch2.c +++ b/test/ref/switch2.c @@ -37,20 +37,8 @@ void testlimits(int i) { } void testdefault1(unsigned char i) { -/* we want a signed char */ -#ifdef REFCC -signed char k; - -#else - -#ifdef UNSIGNED_CHARS -signed char k; -#else -char k; -#endif - -#endif + signed char k; for(;i<254;) { k = i; @@ -138,20 +126,8 @@ char k; } void testdefault2(unsigned char i) { -/* we want a unsigned char */ -#ifdef REFCC -unsigned char k; - -#else - -#ifdef UNSIGNED_CHARS -char k; -#else -unsigned char k; -#endif - -#endif + unsigned char k; for(;i<254;) { k = i; From 5277ea0b73c75ce2dae034dff3c1f7a325f2563d Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 27 Jun 2020 02:23:22 +0200 Subject: [PATCH 0156/2710] Add test license description. --- test/CPYRIGHT.LCC | 60 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 test/CPYRIGHT.LCC diff --git a/test/CPYRIGHT.LCC b/test/CPYRIGHT.LCC new file mode 100644 index 000000000..a7527a9d3 --- /dev/null +++ b/test/CPYRIGHT.LCC @@ -0,0 +1,60 @@ +The authors of this software are Christopher W. Fraser and +David R. Hanson. + +Copyright (c) 1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002 +by AT&T, Christopher W. Fraser, and David R. Hanson. All Rights Reserved. + +Permission to use, copy, modify, and distribute this software for any +purpose, subject to the provisions described below, without fee is +hereby granted, provided that this entire notice is included in all +copies of any software that is or includes a copy or modification of +this software and in all copies of the supporting documentation for +such software. + +THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED +WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY +REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY +OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. + +lcc is not public-domain software, shareware, and it is not protected +by a `copyleft' agreement, like the code from the Free Software +Foundation. + +lcc is available free for your personal research and instructional use +under the `fair use' provisions of the copyright law. You may, however, +redistribute lcc in whole or in part provided you acknowledge its +source and include this CPYRIGHT file. You may, for example, include +the distribution in a CDROM of free software, provided you charge only +for the media, or mirror the distribution files at your site. + +You may not sell lcc or any product derived from it in which it is a +significant part of the value of the product. Using the lcc front end +to build a C syntax checker is an example of this kind of product. + +You may use parts of lcc in products as long as you charge for only +those components that are entirely your own and you acknowledge the use +of lcc clearly in all product documentation and distribution media. You +must state clearly that your product uses or is based on parts of lcc +and that lcc is available free of charge. You must also request that +bug reports on your product be reported to you. Using the lcc front +end to build a C compiler for the Motorola 88000 chip and charging for +and distributing only the 88000 code generator is an example of this +kind of product. + +Using parts of lcc in other products is more problematic. For example, +using parts of lcc in a C++ compiler could save substantial time and +effort and therefore contribute significantly to the profitability of +the product. This kind of use, or any use where others stand to make a +profit from what is primarily our work, requires a license agreement +with Addison-Wesley. Per-copy and unlimited use licenses are +available; for more information, contact + + Kim Boedigheimer + Addison Wesley + 75 Arlington St., Suite 300 + Boston, MA 02116 + 617/848-6559 kim.boedigheimer@pearsoned.com +----- +Chris Fraser / cwf@aya.yale.edu +David Hanson / drh@drhanson.net +$Revision$ $Date$ From 90d1c89bfff14be6d4921d0fc525060c41d3591c Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jesse.rosenstock@gmail.com> Date: Sat, 27 Jun 2020 15:02:11 +0200 Subject: [PATCH 0157/2710] Allow overlap of bit-field storage units (#1055) * Allow overlap of bit-field storage units Previously, struct s { unsigned int x : 10; unsigned int y : 10; }; had sizeof(struct s) == 4. With this change, allow the storage units of x and y to overlap, so sizeof(struct s) == 3, with y stored immediately after x, with no padding between them. An int bit-field (the only type currently supported) will still never occupy more than two bytes. * ParseStructInit: Fix typo and expand comment Explain why there are at most 30, not 32 bits. * ParseStructDecl: Rewrite AddBitFieldCall No behavior change. Co-authored-by: Jesse Rosenstock <jmr@users.noreply.github.com> --- src/cc65/declare.c | 52 ++++++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 523aac48a..d8226e604 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -33,6 +33,7 @@ +#include <limits.h> #include <stdio.h> #include <string.h> #include <errno.h> @@ -832,18 +833,18 @@ static SymEntry* ParseStructDecl (const char* Name) /* Add a field entry to the table */ if (FieldWidth > 0) { - /* Add full byte from the bit offset to the variable offset. - ** This simplifies handling he bit-field as a char type - ** in expressions. + /* Full bytes have already been added to the StructSize, + ** which is passed to the offset of AddBitField. BitOffs + ** is always within a char, which simplifies handling the + ** bit-field as a char type in expressions. */ - unsigned Offs = StructSize + (BitOffs / CHAR_BITS); - AddBitField (Decl.Ident, Offs, BitOffs % CHAR_BITS, FieldWidth); + CHECK (BitOffs < CHAR_BITS); + AddBitField (Decl.Ident, StructSize, BitOffs, FieldWidth); BitOffs += FieldWidth; CHECK (BitOffs <= INT_BITS); - if (BitOffs == INT_BITS) { - StructSize += SIZEOF_INT; - BitOffs = 0; - } + /* Add any full bytes to the struct size. */ + StructSize += BitOffs / CHAR_BITS; + BitOffs %= CHAR_BITS; } else { AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize); if (!FlexibleMember) { @@ -1815,10 +1816,15 @@ static void OutputBitFieldData (StructInitData* SI) /* Output the data */ g_defdata (CF_INT | CF_UNSIGNED | CF_CONST, SI->BitVal, 0); - /* Clear the data from SI and account for the size */ - SI->BitVal = 0; - SI->ValBits = 0; - SI->Offs += SIZEOF_INT; + /* Update the data from SI and account for the size */ + if (SI->ValBits >= INT_BITS) { + SI->BitVal >>= INT_BITS; + SI->ValBits -= INT_BITS; + } else { + SI->BitVal = 0; + SI->ValBits = 0; + } + SI->Offs += SIZEOF_INT; } } @@ -2050,10 +2056,14 @@ static unsigned ParseStructInit (Type* T, int AllowFlexibleMembers) ** have an initializer. */ if (IsAnonName (Entry->Name)) { - /* Account for the data and output it if we have a full word */ + /* Account for the data and output it if we have at least a + ** full word. We may have more if there was storage unit + ** overlap, for example two consecutive 10 bit fields. + ** These will be packed into 3 bytes. + */ SI.ValBits += Entry->V.B.BitWidth; - CHECK (SI.ValBits <= INT_BITS); - if (SI.ValBits == INT_BITS) { + CHECK (SI.ValBits <= 2 * (INT_BITS - 1)); + if (SI.ValBits >= INT_BITS) { OutputBitFieldData (&SI); } goto NextMember; @@ -2079,8 +2089,14 @@ static unsigned ParseStructInit (Type* T, int AllowFlexibleMembers) /* Account for the data and output it if we have a full word */ SI.ValBits += Entry->V.B.BitWidth; - CHECK (SI.ValBits <= INT_BITS); - if (SI.ValBits == INT_BITS) { + /* Make sure unsigned is big enough to hold the value, 30 bits. + ** This is 30 and not 32 bits because a 16-bit bit-field will + ** always be byte aligned, so will have padding before it. + ** 15 bits twice is the most we can have. + */ + CHECK (SI.ValBits <= CHAR_BIT * sizeof(SI.BitVal)); + CHECK (SI.ValBits < 2 * (INT_BITS - 1)); + if (SI.ValBits >= INT_BITS) { OutputBitFieldData (&SI); } From a00611798d612eb8e59c100ea912ca46f9a7069e Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Sun, 28 Jun 2020 22:18:12 +0200 Subject: [PATCH 0158/2710] Output bit-field data as chars instead of ints This prepares for #1058, which will pad bit-fields only to the next byte, instead of the next sizeof(int) (two bytes). OutputBitFieldData now outputs chars instead of ints, and calls to this function loop until there is less than one byte to output. A final partial byte is written out with zero padding as a final partial int was previously. --- src/cc65/declare.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index d8226e604..667f12660 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1814,17 +1814,17 @@ static void OutputBitFieldData (StructInitData* SI) if (SI->ValBits > 0) { /* Output the data */ - g_defdata (CF_INT | CF_UNSIGNED | CF_CONST, SI->BitVal, 0); + g_defdata (CF_CHAR | CF_UNSIGNED | CF_CONST, SI->BitVal, 0); /* Update the data from SI and account for the size */ - if (SI->ValBits >= INT_BITS) { - SI->BitVal >>= INT_BITS; - SI->ValBits -= INT_BITS; + if (SI->ValBits >= CHAR_BITS) { + SI->BitVal >>= CHAR_BITS; + SI->ValBits -= CHAR_BITS; } else { SI->BitVal = 0; SI->ValBits = 0; } - SI->Offs += SIZEOF_INT; + SI->Offs += SIZEOF_CHAR; } } @@ -2062,8 +2062,8 @@ static unsigned ParseStructInit (Type* T, int AllowFlexibleMembers) ** These will be packed into 3 bytes. */ SI.ValBits += Entry->V.B.BitWidth; - CHECK (SI.ValBits <= 2 * (INT_BITS - 1)); - if (SI.ValBits >= INT_BITS) { + CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); + while (SI.ValBits >= CHAR_BITS) { OutputBitFieldData (&SI); } goto NextMember; @@ -2089,14 +2089,15 @@ static unsigned ParseStructInit (Type* T, int AllowFlexibleMembers) /* Account for the data and output it if we have a full word */ SI.ValBits += Entry->V.B.BitWidth; - /* Make sure unsigned is big enough to hold the value, 30 bits. - ** This is 30 and not 32 bits because a 16-bit bit-field will - ** always be byte aligned, so will have padding before it. - ** 15 bits twice is the most we can have. + /* Make sure unsigned is big enough to hold the value, 22 bits. + ** This is 22 bits because the most we can have is 7 bits left + ** over from the previous OutputBitField call, plus 15 bits + ** from this field. A 16-bit bit-field will always be byte + ** aligned, so will have padding before it. */ CHECK (SI.ValBits <= CHAR_BIT * sizeof(SI.BitVal)); - CHECK (SI.ValBits < 2 * (INT_BITS - 1)); - if (SI.ValBits >= INT_BITS) { + CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); + while (SI.ValBits >= CHAR_BITS) { OutputBitFieldData (&SI); } From f4a6d088477e1bb7ca298c3312801b7194b056c8 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Mon, 29 Jun 2020 08:59:49 +0200 Subject: [PATCH 0159/2710] Fix full bytes vs full word in comment --- src/cc65/declare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 667f12660..51490dd7d 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2087,7 +2087,7 @@ static unsigned ParseStructInit (Type* T, int AllowFlexibleMembers) Shift = (Entry->V.B.Offs - SI.Offs) * CHAR_BITS + Entry->V.B.BitOffs; SI.BitVal |= (Val << Shift); - /* Account for the data and output it if we have a full word */ + /* Account for the data and output any full bytes we have. */ SI.ValBits += Entry->V.B.BitWidth; /* Make sure unsigned is big enough to hold the value, 22 bits. ** This is 22 bits because the most we can have is 7 bits left From fae25bc45907a5016457362abfa6cdcef07d50d3 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Mon, 29 Jun 2020 09:00:13 +0200 Subject: [PATCH 0160/2710] CHECK we have at most a partial byte --- src/cc65/declare.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 51490dd7d..06b1e314d 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2137,6 +2137,7 @@ NextMember: ConsumeRCurly (); /* If we have data from a bit-field left, output it now */ + CHECK(SI.ValBits < CHAR_BITS); OutputBitFieldData (&SI); /* If there are struct fields left, reserve additional storage */ From d31171164e0528bdaf5248be4fc59dd2633cd303 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Mon, 29 Jun 2020 17:40:02 +0200 Subject: [PATCH 0161/2710] Fix formatting --- src/cc65/declare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 06b1e314d..d7940c93b 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2137,7 +2137,7 @@ NextMember: ConsumeRCurly (); /* If we have data from a bit-field left, output it now */ - CHECK(SI.ValBits < CHAR_BITS); + CHECK (SI.ValBits < CHAR_BITS); OutputBitFieldData (&SI); /* If there are struct fields left, reserve additional storage */ From 8891a896b51a4e8adec879da8a1fd991d740b422 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Sat, 27 Jun 2020 21:15:22 +0200 Subject: [PATCH 0162/2710] test/ref: Use separate .out files Use different .out files for different options / targets. This allows make -j N to work. Previously all test.*.*.prgs would use the same test.out file. Now test.*.*.out is also used. --- test/ref/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/ref/Makefile b/test/ref/Makefile index 5f0b86164..a94f65dd8 100644 --- a/test/ref/Makefile +++ b/test/ref/Makefile @@ -71,8 +71,8 @@ define PRG_template $(WORKDIR)/%.$1.$2.prg: %.c $(WORKDIR)/%.ref $(DIFF) $(if $(QUIET),echo ref/$$*.$1.$2.prg) $(CL65) -t sim$2 $$(CC65FLAGS) -$1 -o $$@ $$< $(NULLERR) - $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/$$*.out - $(DIFF) $(WORKDIR)/$$*.out $(WORKDIR)/$$*.ref + $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/$$*.$1.$2.out + $(DIFF) $(WORKDIR)/$$*.$1.$2.out $(WORKDIR)/$$*.ref endef # PRG_template From 0f8b587bc2586209e875d2b988b5aa379f7fc8e8 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Wed, 1 Jul 2020 00:13:55 +0200 Subject: [PATCH 0163/2710] Added directory for currently failing regression tests. --- test/readme.txt | 6 +++++ test/todo/Makefile | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 test/todo/Makefile diff --git a/test/readme.txt b/test/readme.txt index cd3b7501a..2d4413f45 100644 --- a/test/readme.txt +++ b/test/readme.txt @@ -9,6 +9,12 @@ compiler. /err - contains tests that MUST NOT compile +/todo - these tests fail due to open compiler issues + +/asm - contains the assembler regression tests + +/dasm - contains the disassembler regression tests + /misc - a few tests that need special care of some sort diff --git a/test/todo/Makefile b/test/todo/Makefile new file mode 100644 index 000000000..ab5eb598c --- /dev/null +++ b/test/todo/Makefile @@ -0,0 +1,63 @@ +# Makefile for the currently failing regression tests that return an error code on failure + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + S = $(subst /,\,/) + NOT = - # Hack + NULLDEV = nul: + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /s /q $(subst /,\,$1) + DEL = del /f $(subst /,\,$1) +else + S = / + NOT = ! + NULLDEV = /dev/null + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 + DEL = $(RM) $1 +endif + +ifdef QUIET + .SILENT: + NULLOUT = >$(NULLDEV) + NULLERR = 2>$(NULLDEV) +endif + +SIM65FLAGS = -x 200000000 + +CL65 := $(if $(wildcard ../../bin/cl65*),..$S..$Sbin$Scl65,cl65) +SIM65 := $(if $(wildcard ../../bin/sim65*),..$S..$Sbin$Ssim65,sim65) + +WORKDIR = ../../testwrk/val + +OPTIONS = g O Os Osi Osir Osr Oi Oir Or + +.PHONY: all clean + +SOURCES := $(wildcard *.c) +TESTS = $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).6502.prg)) +TESTS += $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).65c02.prg)) + +all: $(TESTS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +define PRG_template + +$(WORKDIR)/%.$1.$2.prg: %.c | $(WORKDIR) + $(if $(QUIET),echo val/$$*.$1.$2.prg) + $(CL65) -t sim$2 $$(CC65FLAGS) -$1 -o $$@ $$< $(NULLERR) + $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) + +endef # PRG_template + +$(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option),6502))) +$(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option),65c02))) + +clean: + @$(call RMDIR,$(WORKDIR)) + @$(call DEL,$(SOURCES:.c=.o)) From 17c55041291b0deb880cfd4f5322714fdb6a0a30 Mon Sep 17 00:00:00 2001 From: Daniel Serpell <daniel.serpell@gmail.com> Date: Fri, 3 Jul 2020 23:03:19 -0400 Subject: [PATCH 0164/2710] In Atari XEX output format, join memory areas if possible. This makes executables shorter if two memory areas are consecutive. --- doc/ld65.sgml | 3 ++- src/ld65/xex.c | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/ld65.sgml b/doc/ld65.sgml index d8e296996..cba06fef4 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -932,7 +932,8 @@ the standard format used by Atari DOS 2.0 and upward file managers in the Atari </verb></tscreen> In the Atari segmented file format, the linker will write each <tt/MEMORY/ area -as a new segment, including a header with the start and end address. +as including a header with the start and end address. If two memory areas are +contiguous, the headers will be joined if possible. The necessary o65 or Atari attributes are defined in a special section labeled <ref id="FORMAT" name="FORMAT">. diff --git a/src/ld65/xex.c b/src/ld65/xex.c index c57fa0a8c..94f3920b5 100644 --- a/src/ld65/xex.c +++ b/src/ld65/xex.c @@ -241,9 +241,6 @@ static unsigned long XexWriteMem (XexDesc* D, MemoryArea* M) /* Store initial position to get total file size */ unsigned long StartPos = ftell (D->F); - /* Always write a segment header for each memory area */ - D->HeadPos = 0; - /* Get the start address and size of this memory area */ unsigned long Addr = M->Start; @@ -400,6 +397,7 @@ void XexWriteTarget (XexDesc* D, struct File* F) if (D->F == 0) { Error ("Cannot open `%s': %s", D->Filename, strerror (errno)); } + D->HeadPos = 0; /* Keep the user happy */ Print (stdout, 1, "Opened `%s'...\n", D->Filename); @@ -415,6 +413,8 @@ void XexWriteTarget (XexDesc* D, struct File* F) Write16 (D->F, 0x2E2); Write16 (D->F, 0x2E3); Write16 (D->F, GetExportVal (I->InitAd->Exp)); + /* Always write a new segment header after an INITAD segment */ + D->HeadPos = 0; } } From 286da30a269989be35cfd80a377da64d01ce2a95 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 4 Jul 2020 13:32:28 +0800 Subject: [PATCH 0165/2710] Quick fix for Issue #1071. --- src/cc65/coptstop.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index b14b23195..46ccf020b 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -145,6 +145,9 @@ struct StackOpData { /* Freedom of registers inside the sequence */ unsigned UsedRegs; /* Registers used */ + /* Whether the rhs is changed multiple times */ + int RhsMultiChg; + /* Register load information for lhs and rhs */ LoadInfo Lhs; LoadInfo Rhs; @@ -1972,6 +1975,7 @@ static void ResetStackOpData (StackOpData* Data) Data->ZPUsage = REG_NONE; Data->ZPChanged = REG_NONE; Data->UsedRegs = REG_NONE; + Data->RhsMultiChg = 0; ClearLoadInfo (&Data->Lhs); ClearLoadInfo (&Data->Rhs); @@ -2092,6 +2096,10 @@ static int PreCondOk (StackOpData* D) } } } + if (D->RhsMultiChg && (D->OptFunc->Flags & OP_RHS_REMOVE_DIRECT) != 0) { + /* Cannot optimize */ + break; + } Passed = 1; } while (0); @@ -2188,6 +2196,8 @@ unsigned OptStackOps (CodeSeg* S) int OldEntryCount; /* Old number of entries */ unsigned Used; /* What registers would be used */ unsigned PushedRegs; /* Track if the same regs are used after the push */ + int RhsALoadIndex; /* Track if rhs is changed more than once */ + int RhsXLoadIndex; /* Track if rhs is changed more than once */ enum { Initialize, @@ -2335,6 +2345,10 @@ unsigned OptStackOps (CodeSeg* S) } + /* Memorize the old rhs load indices before refreshing them */ + RhsALoadIndex = Data.Rhs.A.LoadIndex; + RhsXLoadIndex = Data.Rhs.X.LoadIndex; + /* Track register usage */ Used = TrackLoads (&Data.Rhs, &Data.Lhs, Data.Code, I); Data.ZPUsage |= (E->Use | E->Chg); @@ -2358,6 +2372,16 @@ unsigned OptStackOps (CodeSeg* S) } PushedRegs &= ~E->Chg; } + /* Check if rhs is changed again after the push */ + if ((RhsALoadIndex != Data.Lhs.A.LoadIndex && + RhsALoadIndex != Data.Rhs.A.LoadIndex) || + (RhsXLoadIndex != Data.Lhs.X.LoadIndex && + RhsXLoadIndex != Data.Rhs.X.LoadIndex)) { + /* This will disable those sub-opts that require removing + ** the rhs as they can't handle such cases correctly. + */ + Data.RhsMultiChg = 1; + } break; case FoundOp: From 539924249b96557f64e774db7e4ea479f299b801 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 4 Jul 2020 17:44:49 +0800 Subject: [PATCH 0166/2710] More complete fix for Issue #1071. --- src/cc65/coptstop.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 46ccf020b..a4fc0dc65 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -946,7 +946,8 @@ static unsigned Opt_toseqax_tosneax (StackOpData* D, const char* BoolTransformer D->Lhs.A.Flags |= LI_REMOVE; } else if ((D->Rhs.A.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT && - (D->Rhs.X.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT) { + (D->Rhs.X.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT && + D->RhsMultiChg == 0) { CodeEntry* LoadX = D->Rhs.X.LoadEntry; CodeEntry* LoadA = D->Rhs.A.LoadEntry; From d1833cc441c79f018fa496e44672b2b5edb57c8d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 8 Jul 2020 00:48:39 +0200 Subject: [PATCH 0167/2710] Fix handling of charcodes 254 and 255, fixes issue #988 --- libsrc/c128/cputc.s | 3 +-- libsrc/c64/cputc.s | 3 +-- libsrc/cbm510/cputc.s | 3 +-- libsrc/cbm610/cputc.s | 3 +-- libsrc/plus4/cputc.s | 3 +-- libsrc/vic20/cputc.s | 3 +-- 6 files changed, 6 insertions(+), 12 deletions(-) diff --git a/libsrc/c128/cputc.s b/libsrc/c128/cputc.s index 667260843..5c0760e75 100644 --- a/libsrc/c128/cputc.s +++ b/libsrc/c128/cputc.s @@ -62,10 +62,9 @@ cputdirect: ; Handle character if high bit set L5: and #$7F - cmp #$7E ; PI? + cmp #$7F ; PI? bne L6 lda #$5E ; Load screen code for PI - bne cputdirect L6: ora #$40 bne cputdirect ; Branch always diff --git a/libsrc/c64/cputc.s b/libsrc/c64/cputc.s index d6b49607a..b893f2102 100644 --- a/libsrc/c64/cputc.s +++ b/libsrc/c64/cputc.s @@ -74,10 +74,9 @@ L5: inc CURS_Y ; Handle character if high bit set L10: and #$7F - cmp #$7E ; PI? + cmp #$7F ; PI? bne L11 lda #$5E ; Load screen code for PI - bne cputdirect L11: ora #$40 bne cputdirect diff --git a/libsrc/cbm510/cputc.s b/libsrc/cbm510/cputc.s index 73d45b422..7dd4cddb2 100644 --- a/libsrc/cbm510/cputc.s +++ b/libsrc/cbm510/cputc.s @@ -65,10 +65,9 @@ L3: sty CURS_X ; Handle character if high bit set L10: and #$7F - cmp #$7E ; PI? + cmp #$7F ; PI? bne L11 lda #$5E ; Load screen code for PI - bne cputdirect L11: ora #$40 bne cputdirect ; Branch always diff --git a/libsrc/cbm610/cputc.s b/libsrc/cbm610/cputc.s index 5888580ac..78e2a5581 100644 --- a/libsrc/cbm610/cputc.s +++ b/libsrc/cbm610/cputc.s @@ -73,10 +73,9 @@ L4: inc CURS_Y ; Handle character if high bit set L10: and #$7F - cmp #$7E ; PI? + cmp #$7F ; PI? bne L11 lda #$5E ; Load screen code for PI - bne cputdirect L11: ora #$40 bne cputdirect ; Branch always diff --git a/libsrc/plus4/cputc.s b/libsrc/plus4/cputc.s index 49b3a84dd..a72b4012a 100644 --- a/libsrc/plus4/cputc.s +++ b/libsrc/plus4/cputc.s @@ -74,10 +74,9 @@ L5: inc CURS_Y ; Handle character if high bit set L10: and #$7F - cmp #$7E ; PI? + cmp #$7F ; PI? bne L11 lda #$5E ; Load screen code for PI - bne cputdirect L11: ora #$40 bne cputdirect diff --git a/libsrc/vic20/cputc.s b/libsrc/vic20/cputc.s index 1db818546..9e818032e 100644 --- a/libsrc/vic20/cputc.s +++ b/libsrc/vic20/cputc.s @@ -95,10 +95,9 @@ L5: inc CURS_Y ; Handle character if high bit set L10: and #$7F - cmp #$7E ; PI? + cmp #$7F ; PI? bne L11 lda #$5E ; Load screen code for PI - bne cputdirect L11: ora #$40 bne cputdirect From 410e4502eee98f74d34477b3ce031bfe0f0386df Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Wed, 8 Jul 2020 05:55:30 -0400 Subject: [PATCH 0168/2710] Added a 160x192x2 TGI (graphics) driver to the VIC-20 library. The driver requires a special linker configuration: "vic20-tgi.cfg". The VIC-20 computer needs at least 8K of expansion RAM! "tgidemo.c" needed to be adjusted because the VIC-20's vertical (y) range is greater than its horizontal (x) range -- the opposite of most other platforms. Also, the circle demo would jam on the VIC-20. --- cfg/vic20-tgi.cfg | 50 ++ doc/vic20.sgml | 29 +- include/tgi.h | 2 +- include/vic20.h | 43 +- libsrc/vic20/libref.s | 10 +- libsrc/vic20/tgi/vic20-hi.s | 1018 ++++++++++++++++++++++++++++++++ libsrc/vic20/tgi_stat_stddrv.s | 8 + libsrc/vic20/tgi_stddrv.s | 13 + libsrc/vic20/tgihdr.s | 67 +++ samples/Makefile | 14 + samples/tgidemo.c | 22 +- 11 files changed, 1253 insertions(+), 23 deletions(-) create mode 100644 cfg/vic20-tgi.cfg create mode 100644 libsrc/vic20/tgi/vic20-hi.s create mode 100644 libsrc/vic20/tgi_stat_stddrv.s create mode 100644 libsrc/vic20/tgi_stddrv.s create mode 100644 libsrc/vic20/tgihdr.s diff --git a/cfg/vic20-tgi.cfg b/cfg/vic20-tgi.cfg new file mode 100644 index 000000000..bc7845615 --- /dev/null +++ b/cfg/vic20-tgi.cfg @@ -0,0 +1,50 @@ +# Memory configuration which supports the "vic20-hi.tgi" driver. +# Memory configuration for a VIC-20 with, at least, 8K expansion RAM. +FEATURES { + STARTADDRESS: default = $1201; +} +SYMBOLS { + __LOADADDR__: type = import; + __EXEHDR__: type = import; + __TGIHDR__: type = import; + __STACKSIZE__: type = weak, value = $0200; # 512-byte stack + __HIMEM__: type = weak, value = $4000; +} +MEMORY { + ZP: file = "", define = yes, start = $0002, size = $001A; + LOADADDR: file = %O, start = %S - 2, size = $0002; + HEADER: file = %O, define = yes, start = %S, size = $003E; + MAIN: file = %O, define = yes, start = $2000, size = __HIMEM__ - __MAIN_START__ - __STACKSIZE__; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + LOADADDR: load = LOADADDR, type = ro; +# The start-up code needs EXEHDR, TGI1HDR, TGI2HDR, +# and STARTUP to be next to each other, in that order. + EXEHDR: load = HEADER, type = ro; + TGI1HDR: load = HEADER, type = ro; + TGI2HDR: load = MAIN, type = ro; + 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; + ONCE: load = MAIN, type = ro, optional = yes, define = yes; + INIT: load = MAIN, type = bss, optional = yes; + BSS: load = MAIN, 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/doc/vic20.sgml b/doc/vic20.sgml index 4fcd0079c..0a6e85d4a 100644 --- a/doc/vic20.sgml +++ b/doc/vic20.sgml @@ -75,7 +75,6 @@ common to all CBM platforms. There are currently no special VIC20 functions. - <sect1>CBM-specific functions<p> Some functions are available for all (or at least most) of the Commodore @@ -143,7 +142,33 @@ The names in the parentheses denote the symbols to be used for static linking of <sect1>Graphics drivers<p> -No graphics drivers are currently available for the VIC20. +<descrip> + + <tag><tt/vic20-hi.tgi (vic20_hi_tgi)/</tag> + This driver features a resolution of 160×192 with two colors. The + background can be chosen from a sixteen-color palette. The foreground can + be chosen from an eight-color palette. + + The driver will use memory from addresses $1000 to $1FFF as a graphics + buffer. Therefore, the VIC-20 must have, at least, 8K of expansion RAM. + + Programs that use this driver must be linked by the <tt/vic20-tgi.cfg/ + configuration file. It will link a special header into the program. + That header will do the housekeeping that's needed by TGI. + + An example command line: + <tscreen><verb> + cl65 -D DYN_DRV=0 -t vic20 -C vic20-tgi.cfg samples/mandelbrot.c + </verb></tscreen> + + When the program starts, it will move itself up in RAM, to make room for the + buffer. When the program finishes, it will reset the BASIC interpreter. + That means that graphics pictures won't be preserved between the executions + of programs. Also, the graphics buffer shares RAM with the text screen. If + a picture must be saved, then a program must put it somewhere else (such as + a disk file) before returning to the text mode. + +</descrip> <sect1>Extended memory drivers<p> diff --git a/include/tgi.h b/include/tgi.h index 15a6437cc..135ef63f1 100644 --- a/include/tgi.h +++ b/include/tgi.h @@ -216,7 +216,7 @@ void __fastcall__ tgi_arc (int x, int y, unsigned char rx, unsigned char ry, /* Draw an ellipse arc with center at x/y and radii rx/ry using the current ** drawing color. The arc covers the angle between sa and ea (startangle and ** endangle), which must be in the range 0..360 (otherwise the function may -** bevave unextectedly). +** behave unexpectedly). */ void __fastcall__ tgi_pieslice (int x, int y, unsigned char rx, unsigned char ry, diff --git a/include/vic20.h b/include/vic20.h index 44512b3fd..d60c7e270 100644 --- a/include/vic20.h +++ b/include/vic20.h @@ -2,12 +2,12 @@ /* */ /* vic20.h */ /* */ -/* vic20 system specific definitions */ +/* VIC-20 system-specific definitions */ /* */ /* */ /* */ /* (C) 1998-2004 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ @@ -66,14 +66,39 @@ #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 +/* Only the background and multi-color characters can have these colors. */ #define COLOR_ORANGE 0x08 -#define COLOR_BROWN 0x09 -#define COLOR_LIGHTRED 0x0A -#define COLOR_GRAY1 0x0B -#define COLOR_GRAY2 0x0C +#define COLOR_LIGHTORANGE 0x09 +#define COLOR_PINK 0x0A +#define COLOR_LIGHTCYAN 0x0B +#define COLOR_LIGHTVIOLET 0x0C #define COLOR_LIGHTGREEN 0x0D #define COLOR_LIGHTBLUE 0x0E -#define COLOR_GRAY3 0x0F +#define COLOR_LIGHTYELLOW 0x0F + +/* TGI color defines */ +#define TGI_COLOR_BLACK COLOR_BLACK +#define TGI_COLOR_WHITE COLOR_WHITE +#define TGI_COLOR_RED COLOR_RED +#define TGI_COLOR_CYAN COLOR_CYAN +#define TGI_COLOR_VIOLET COLOR_VIOLET +#define TGI_COLOR_GREEN COLOR_GREEN +#define TGI_COLOR_BLUE COLOR_BLUE +#define TGI_COLOR_YELLOW COLOR_YELLOW +/* Only the background and multi-color graphics can have these colors. */ +#define TGI_COLOR_ORANGE COLOR_ORANGE +#define TGI_COLOR_LIGHTORANGE COLOR_LIGHTORANGE +#define TGI_COLOR_PINK COLOR_PINK +#define TGI_COLOR_LIGHTCYAN COLOR_LIGHTCYAN +#define TGI_COLOR_LIGHTVIOLET COLOR_LIGHTVIOLET +#define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN +#define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE +#define TGI_COLOR_LIGHTYELLOW COLOR_LIGHTYELLOW + + + +/* tgi_ioctl() commands */ +#define TGI_IOCTL_VIC20_SET_PATTERN 0x01 /* Set 8-byte pattern for tgi_bar(). */ @@ -108,5 +133,9 @@ extern void vic20_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */ extern void vic20_rama_emd[]; extern void vic20_georam_emd[]; +extern void vic20_hi_tgi[]; /* Referred to by tgi_static_stddrv[] */ + + + /* End of vic20.h */ #endif diff --git a/libsrc/vic20/libref.s b/libsrc/vic20/libref.s index 468c540f1..333a66894 100644 --- a/libsrc/vic20/libref.s +++ b/libsrc/vic20/libref.s @@ -1,10 +1,14 @@ ; -; Oliver Schmidt, 2013-05-31 +; 2013-05-31, Oliver Schmidt +; 2018-03-11, Sven Michael Klose ; - .export joy_libref .export em_libref + .export joy_libref + .export tgi_libref + .import _exit -joy_libref := _exit em_libref := _exit +joy_libref := _exit +tgi_libref := _exit diff --git a/libsrc/vic20/tgi/vic20-hi.s b/libsrc/vic20/tgi/vic20-hi.s new file mode 100644 index 000000000..8dfa46d6b --- /dev/null +++ b/libsrc/vic20/tgi/vic20-hi.s @@ -0,0 +1,1018 @@ +; +; Graphics driver for a 160x192x2 mode on the VIC-20. +; +; Based on C64 TGI driver +; +; 2018-03-11, Sven Michael Klose +; 2020-07-06, Greg King +; + + .include "zeropage.inc" + .include "vic20.inc" + + .include "tgi-kernel.inc" + .include "tgi-error.inc" + + .macpack generic + .macpack module + + +; ------------------------------------------------------------------------ +; Constants + +COLS = 20 +ROWS = 12 +XRES = COLS * 8 +YRES = ROWS * 16 + +TGI_IOCTL_VIC20_SET_PATTERN = $01 + +; ------------------------------------------------------------------------ +; Header. Includes jump table and constants. + + module_header _vic20_hi_tgi + +; First part of the header is a structure that has a magic and defines the +; capabilities of the driver + + .byte $74, $67, $69 ; ASCII "tgi" + .byte TGI_API_VERSION ; TGI API version number + .addr $0000 ; Library reference + .word XRES ; X resolution + .word YRES ; Y resolution + .byte 2 ; Number of drawing colors + .byte 1 ; Number of screens available + .byte 8 ; System font X size + .byte 8 ; System font Y size + .word $0180 ; Aspect ratio 2.5:3 + .byte 0 ; TGI driver flags + +; Next comes the jump table. With the exception of IRQ, all entries must be +; valid and may point to an RTS for test versions (function not implemented). + + .addr INSTALL + .addr UNINSTALL + .addr INIT + .addr DONE + .addr GETERROR + .addr CONTROL + .addr CLEAR + .addr SETVIEWPAGE + .addr SETDRAWPAGE + .addr SETCOLOR + .addr SETPALETTE + .addr GETPALETTE + .addr GETDEFPALETTE + .addr SETPIXEL + .addr GETPIXEL + .addr LINE + .addr BAR + .addr TEXTSTYLE + .addr OUTTEXT + +; ------------------------------------------------------------------------ +; Data. + +; Variables mapped to the zero-page segment variables. Some of these are +; used for passing parameters to the driver. + +X1 := ptr1 +Y1 := ptr2 +X2 := ptr3 +Y2 := ptr4 +TEXT := ptr3 + +POINT := regsave +SOURCE := tmp1 +DEST := tmp3 + +; Absolute variables used in the code + +.bss + +ERROR: .res 1 ; Error code +PALETTE: .res 2 ; The current palette + +CURCOL: .res 1 ; Current color. +BITMASK: .res 1 ; $00 = clear, $FF = set pixels + +; BAR variables + +XPOSR: .res 1 ; Used by BAR. +PATTERN: .res 2 ; Address of pattern. +USERPATTERN: .res 2 ; User-defined pattern set via CONTROL. +COUNTER: .res 2 +TMP: .res 1 +MASKS: .res 1 +MASKD: .res 1 +XCPOS: .res 1 +HEIGHT: .res 1 + +; Line variables + +CHUNK := X2 ; Used in the line routine +OLDCHUNK := X2+1 ; Ditto +TEMP := tmp4 +TEMP2 := sreg +DX: .res 2 +DY: .res 2 + +; Text output stuff + +TEXTMAGX: .res 1 +TEXTMAGY: .res 1 +TEXTDIR: .res 1 + +; Constants and tables + +.rodata + +DEFPALETTE: .byte $00, $01 ; White on black +PALETTESIZE = * - DEFPALETTE + +BITTAB: .byte $80, $40, $20, $10, $08, $04, $02, $01 +BITCHUNK: .byte $FF, $7F, $3F, $1F, $0F, $07, $03, $01 + +CHARROM := $8000 ; Character ROM base address +CBASE := $9400 ; Color memory base address +SBASE := $1000 ; Screen memory base address +VBASE := $1100 ; Video memory base address + +; These numbers are added to Kernal's default VIC settings. +; They make the Video Interface Controller show graphics instead of text. + +.proc VICREGS + .byte <+2 ; Left_edge + 2 + .byte <-2 ; Top_edge - 2 + .byte <-2 ; Columns - 2 + .byte <-(11 << 1) + 1 ; Rows - 11, chars. are 8 x 16 pixels + .byte 0 + .byte <+$0C ; Font_address = $1000 +.endproc + +XADDRS_L: + .repeat COLS, n + .byte <(VBASE + YRES * n) + .endrep + +XADDRS_H: + .repeat COLS, n + .byte >(VBASE + YRES * n) + .endrep + +MASKS_LEFT: + .byte %11111111 +MASKD_RIGHT: + .byte %01111111 + .byte %00111111 + .byte %00011111 + .byte %00001111 + .byte %00000111 + .byte %00000011 + .byte %00000001 +MASKD_LEFT: + .byte %00000000 +MASKS_RIGHT: + .byte %10000000 + .byte %11000000 + .byte %11100000 + .byte %11110000 + .byte %11111000 + .byte %11111100 + .byte %11111110 + .byte %11111111 + +PATTERN_EMPTY: + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + .byte %00000000 + +PATTERN_SOLID: + .byte %11111111 + .byte %11111111 + .byte %11111111 + .byte %11111111 + .byte %11111111 + .byte %11111111 + .byte %11111111 + .byte %11111111 + +.code + +; ------------------------------------------------------------------------ +; INSTALL routine. Is called after the driver is loaded into memory. May +; initialize anything that has to be done just once. Is probably empty +; most of the time. +; +; Must set an error code: NO +; + +.proc INSTALL + +; Reset user-defined pattern. + + lda #$00 + sta PATTERN + sta PATTERN+1 + rts +.endproc + +; ------------------------------------------------------------------------ +; UNINSTALL routine. Is called before the driver is removed from memory. May +; clean up anything done by INSTALL; but is probably empty most of the time. +; +; Must set an error code: NO +; + +.proc UNINSTALL + rts +.endproc + +; ------------------------------------------------------------------------ +; INIT: Changes an already installed device from text mode to graphics +; mode. +; Note that INIT/DONE may be called multiple times while the driver +; is loaded, while INSTALL is called only once, so any code that is needed +; to initialize variables and so on must go here. Setting the palette +; is not needed because that is done by the graphics kernel later. +; The graphics kernel never will call INIT when a graphics mode already is +; active; so, there is no need to protect against that. +; +; Must set an error code: YES +; + +.proc INIT + +; Initialize variables + + ldx #$FF + stx BITMASK + +; Make screen columns. + + lda #<SBASE + sta tmp2 + lda #>SBASE + sta tmp2+1 + inx ; (ldx #$00) + stx ERROR ; Set to TGI_ERR_OK + +@NEXT_ROW: + ldy #$00 + txa + clc + adc #$10 + +@NEXT_COLUMN: + sta (tmp2),y + clc + adc #ROWS + iny + cpy #COLS + bne @NEXT_COLUMN + +; Step to next row on screen. + + lda tmp2 + clc + adc #COLS + sta tmp2 + bcc @L1 + inc tmp2+1 + +@L1: inx + cpx #ROWS + bne @NEXT_ROW + +; Set up VIC. + + ldx #.sizeof(VICREGS) - 1 +@L2: clc + lda $EDE4,x + adc VICREGS,x + sta VIC,x + dex + bpl @L2 + + jmp CLEAR +.endproc + +; ------------------------------------------------------------------------ +; DONE: Will be called to switch the graphics device back into text mode. +; The graphics kernel never will call DONE when no graphics mode is active; +; so, there is no need to protect against that. +; +; Must set an error code: NO +; + +.proc DONE + jmp $E518 ; Kernal console init. +.endproc + +; ------------------------------------------------------------------------ +; GETERROR: Return the error code in A, and clear it. + +.proc GETERROR + ldx #TGI_ERR_OK + lda ERROR + stx ERROR + rts +.endproc + +; ------------------------------------------------------------------------ +; CONTROL: Platform-/driver-specific entry point. +; +; Must set an error code: YES +; + +.proc CONTROL + +; Set user-defined pattern. + + cmp #TGI_IOCTL_VIC20_SET_PATTERN + bne @INVALID_FUNC + + lda ptr1 + sta USERPATTERN + lda ptr1+1 + sta USERPATTERN+1 + + lda #TGI_ERR_OK + .byte $2C ;(bit $1234) + +; Return with error code for invalid function index. + +@INVALID_FUNC: + lda #TGI_ERR_INV_FUNC + sta ERROR + rts +.endproc + +; ------------------------------------------------------------------------ +; CLEAR: Clears the screen. All pixels are set to the background color. +; +; Must set an error code: NO +; + +.proc CLEAR + lda #%00000000 + tay ; (ldy #$00) +@L1: sta VBASE + $0000,y + sta VBASE + $0100,y + sta VBASE + $0200,y + sta VBASE + $0300,y + sta VBASE + $0400,y + sta VBASE + $0500,y + sta VBASE + $0600,y + sta VBASE + $0700,y + sta VBASE + $0800,y + sta VBASE + $0900,y + sta VBASE + $0A00,y + sta VBASE + $0B00,y + sta VBASE + $0C00,y + sta VBASE + $0D00,y + sta VBASE + $0E00,y + iny + bne @L1 + rts +.endproc + +; ------------------------------------------------------------------------ +; SETVIEWPAGE: Set the visible page. Called with the new page in .A (0..n). +; The page number already is checked, to be valid, by the graphics kernel. +; +; Must set an error code: NO (will be called only if page OK) +; + +.proc SETVIEWPAGE + rts +.endproc + +; ------------------------------------------------------------------------ +; SETDRAWPAGE: Set the drawable page. Called with the new page in .A (0..n-1). +; The page number already is checked, to be valid, by the graphics kernel. +; +; Must set an error code: NO (will be called only if page OK) +; + +.proc SETDRAWPAGE + rts +.endproc + +; ------------------------------------------------------------------------ +; SETCOLOR: Set the drawing color (in .A). The new color already is checked +; to be in a valid range (0..maxcolor). +; +; Must set an error code: NO (will be called only if color OK) +; + +.proc SETCOLOR + sta CURCOL + tax + beq @L1 + lda #$FF +@L1: sta BITMASK + rts +.endproc + +; ------------------------------------------------------------------------ +; SETPALETTE: Set the palette (not available with all drivers/hardware). +; A pointer to the palette is passed in ptr1. Must set an error if palettes +; are not supported +; +; Must set an error code: YES +; + +.proc SETPALETTE + ldy #PALETTESIZE - 1 +@L1: lda (ptr1),y ; Copy the palette + and #$0F ; Make a valid color + sta PALETTE,y + dey + bpl @L1 + +; Initialize the color map with the new color settings. + + iny ; Set .Y to $00 + lda PALETTE+1 ; Foreground color +@L2: sta CBASE + $0000,y + sta CBASE + $0100,y + iny + bne @L2 + + lda PALETTE ; Background color + asl a ; Put it in high nybble + asl a + asl a + asl a + sta tmp2 + lda VIC_COLOR + and #$0F + ora tmp2 + sta VIC_COLOR + +; Done, reset the error code + + ;ldy #TGI_ERR_OK ; (Already zero) + sty ERROR + rts +.endproc + +; ------------------------------------------------------------------------ +; GETPALETTE: Return the current palette in ".XA". Even drivers that cannot +; set the palette should return the default palette here; so, there's no +; way for this function to fail. +; +; Must set an error code: NO +; + +.proc GETPALETTE + lda #<PALETTE + ldx #>PALETTE + rts +.endproc + +; ------------------------------------------------------------------------ +; GETDEFPALETTE: Return the default palette for the driver in ".XA". All +; drivers should return something reasonable here, even drivers that don't +; support palettes; otherwise, the caller has no way to determine the colors +; of the (not changeable) palette. +; +; Must set an error code: NO (all drivers must have a default palette) +; + +.proc GETDEFPALETTE + lda #<DEFPALETTE + ldx #>DEFPALETTE + rts +.endproc + +; ------------------------------------------------------------------------ +; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing +; color. The co-ordinates passed to this function never are outside the +; visible screen area; so, there's no need for clipping inside this function. +; +; Must set an error code: NO +; + +.proc SETPIXEL + jsr CALC ; Calculate co-ordinates + + ldy #$00 + lda (POINT),Y + eor BITMASK + and BITTAB,X + eor (POINT),Y + sta (POINT),Y + rts +.endproc + +; ------------------------------------------------------------------------ +; GETPIXEL: Read the color value of a pixel; and return it in ".XA". The +; co-ordinates passed to this function never are outside the visible screen +; area; so, there's no need for clipping inside this function. + + +.proc GETPIXEL + jsr CALC ; Calculate co-ordinates + + ldy #$00 + lda (POINT),Y + and BITTAB,X + beq @L1 + iny + tya ; Get color value into .A +@L1: ldx #>$0000 ; Clear high byte + rts +.endproc + +; ------------------------------------------------------------------------ +; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scalings in x and y +; directions are passed in .X/.Y; the text direction is passed in .A. +; +; Must set an error code: NO +; + +.proc TEXTSTYLE + stx TEXTMAGX + sty TEXTMAGY + sta TEXTDIR + rts +.endproc + +; ------------------------------------------------------------------------ +; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the +; current text style. The text to output is given as a zero-terminated +; string with address in ptr3. +; +; Must set an error code: NO +; + +.proc OUTTEXT + rts +.endproc + +; ------------------------------------------------------------------------ +; Calculate address and X offset in char. line, to plot the pixel at X1/Y1. + +.proc CALC + lda X1+1 + bne @L1 + lda Y1+1 + bne @L1 + + lda X1 + lsr + lsr + lsr + tay + + lda XADDRS_L,y + clc + adc Y1 + sta POINT + lda XADDRS_H,y + adc #$00 + sta POINT+1 + + lda X1 + and #7 + tax + +@L1: rts +.endproc + +; ------------------------------------------------------------------------ +; LINE: Draw a line from X1/Y1 to X2/Y2, where X1/Y1 = ptr1/ptr2 and +; X2/Y2 = ptr3/ptr4 using the current drawing color. +; +; X1,X2 etc. are set up above (x2=LINNUM in particular) +; Format is LINE x2,y2,x1,y1 +; +; Must set an error code: NO +; + +.proc LINE + +@CHECK: lda X2 ; Make sure x1 < x2 + sec + sbc X1 + tax + lda X2+1 + sbc X1+1 + bpl @CONT + lda Y2 ; If not, swap P1 and P2 + ldy Y1 + sta Y1 + sty Y2 + lda Y2+1 + ldy Y1+1 + sta Y1+1 + sty Y2+1 + lda X1 + ldy X2 + sty X1 + sta X2 + lda X2+1 + ldy X1+1 + sta X1+1 + sty X2+1 + bcc @CHECK + +@CONT: sta DX+1 + stx DX + + ldx #$C8 ; INY + lda Y2 ; Calculate dy + sec + sbc Y1 + tay + lda Y2+1 + sbc Y1+1 + bpl @DYPOS ; Is y2 >= y1? + lda Y1 ; Otherwise, dy = y1 - y2 + sec + sbc Y2 + tay + ldx #$88 ; DEY + +@DYPOS: sty DY ; 8-bit DY -- FIX ME? + stx YINCDEC + stx XINCDEC + + lda X1 + lsr + lsr + lsr + tay + lda XADDRS_L,y + sta POINT + lda XADDRS_H,y + sta POINT+1 + ldy Y1 + + lda X1 + and #7 + tax + lda BITCHUNK,X + sta OLDCHUNK + sta CHUNK + + ldx DY + cpx DX ; Who's bigger: dy or dx? + bcc STEPINX ; If dx, then... + lda DX+1 + bne STEPINX + +; +; Big steps in Y +; +; X is now counter, Y is y co-ordinate +; +; On entry, X=DY=number of loop iterations, and Y=Y1 +STEPINY: + lda #$00 + sta OLDCHUNK ; So plotting routine will work right + lda CHUNK + lsr ; Strip the bit + eor CHUNK + sta CHUNK + txa + bne @CONT ; If dy=0, it's just a point + inx +@CONT: lsr ; Init. counter to dy/2 +; +; Main loop +; +YLOOP: sta TEMP + + lda (POINT),y ; Plot + eor BITMASK + and CHUNK + eor (POINT),y + sta (POINT),y +YINCDEC: + iny ; Advance Y co-ordinate + lda TEMP ; Restore A + sec + sbc DX + bcc YFIXX +YCONT: dex ; X is counter + bne YLOOP +YCONT2: lda (POINT),y ; Plot endpoint + eor BITMASK + and CHUNK + eor (POINT),y + sta (POINT),y + rts + +YFIXX: ; x=x+1 + adc DY + lsr CHUNK + bne YCONT ; If we pass a column boundary, + ror CHUNK ; then reset CHUNK to $80 + sta TEMP2 + lda POINT + adc #YRES + sta POINT + bcc @CONT + inc POINT+1 +@CONT: lda TEMP2 + dex + bne YLOOP + beq YCONT2 + +; +; Big steps in X direction +; +; On entry, X=DY=number of loop iterations, and Y=Y1 + +.bss +COUNTHI: + .byte $00 ; Temporary counter, + ; used only once +.code +STEPINX: + ldx DX + lda DX+1 + sta COUNTHI + cmp #$80 + ror ; Need bit for initialization + sta Y1 ; High byte of counter + txa + bne @CONT ; Could be $100 + dec COUNTHI +@CONT: ror +; +; Main loop +; +XLOOP: lsr CHUNK + beq XFIXC ; If we pass a column boundary... +XCONT1: sbc DY + bcc XFIXY ; Time to step in Y? +XCONT2: dex + bne XLOOP + dec COUNTHI ; High bits set? + bpl XLOOP + + lsr CHUNK ; Advance to last point + jmp LINEPLOT ; Plot the last chunk +; +; CHUNK has passed a column; so, plot and increment pointer; +; and fix up CHUNK, OLDCHUNK. +; +XFIXC: sta TEMP + jsr LINEPLOT + lda #$FF + sta CHUNK + sta OLDCHUNK + lda POINT + clc + adc #YRES + sta POINT + lda TEMP + bcc XCONT1 + inc POINT+1 + jmp XCONT1 +; +; Check to make sure there isn't a high bit; plot chunk; +; and update Y co-ordinate. +; +XFIXY: dec Y1 ; Maybe high bit set + bpl XCONT2 + adc DX + sta TEMP + lda DX+1 + adc #$FF ; Hi byte + sta Y1 + + jsr LINEPLOT ; Plot chunk + lda CHUNK + sta OLDCHUNK + + lda TEMP +XINCDEC: + iny ; Y co-ord + jmp XCONT2 + +; +; Subroutine to plot chunks/points (to save a little +; room, gray hair, etc.) +; +LINEPLOT: ; Plot the line chunk + lda (POINT),Y + eor BITMASK + ora CHUNK + and OLDCHUNK + eor CHUNK + eor (POINT),Y + sta (POINT),Y + rts +.endproc + +; In: xpos, ypos, width, height +; ------------------------------------------------------------------------ +; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where +; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color. +; Contrary to most other functions, the graphics kernel will sort and clip +; the co-ordinates before calling the driver; so, on entry, the following +; conditions are valid: +; X1 <= X2 +; Y1 <= Y2 +; (X1 >= 0) && (X1 < XRES) +; (X2 >= 0) && (X2 < XRES) +; (Y1 >= 0) && (Y1 < YRES) +; (Y2 >= 0) && (Y2 < YRES) +; +; Must set an error code: NO +; + +.proc BAR + +; Set user pattern if available. + + lda USERPATTERN + ora USERPATTERN+1 + beq @GET_PATTERN_BY_COLOR + + lda USERPATTERN + sta PATTERN + lda USERPATTERN+1 + sta PATTERN+1 + jmp @GOT_PATTERN + +; Determine pattern based on current colour. + +@GET_PATTERN_BY_COLOR: + lda #<PATTERN_SOLID + ldx #>PATTERN_SOLID + ldy CURCOL + bne @L2 + lda #<PATTERN_EMPTY + ldx #>PATTERN_EMPTY +@L2: sta PATTERN + stx PATTERN+1 + +@GOT_PATTERN: + +; Get starting POINT on screen. + + jsr CALC + sty XCPOS + lda POINT ; One off for VFILL/VCOPY. + sec + sbc #1 + sta POINT + bcs @L3 + dec POINT+1 +@L3: + +; Get height for VFILL. + + lda Y2 + sec + sbc Y1 + sta HEIGHT + +; Get rightmost char column. + + lda X2 + and #7 + sta XPOSR + +; Get width in characters. + + lda X2 + lsr + lsr + lsr + sec + sbc XCPOS + beq @DRAW_SINGLE_COLUMN + sta COUNTER + +; Draw left end. + + lda X1 + and #7 + tax + lda MASKD_LEFT,x + sta MASKD + lda MASKS_LEFT,x + sta MASKS + jsr VFILL + jsr INCPOINTX + +; Draw middle. + + dec COUNTER + beq @DRAW_RIGHT_END +@L1: jsr VCOPY + jsr INCPOINTX + dec COUNTER + bne @L1 + +; Draw right end. + +@DRAW_RIGHT_END: + ldx XPOSR + lda MASKD_RIGHT,x + sta MASKD + lda MASKS_RIGHT,x + sta MASKS + jmp VFILL + +; Draw left end. + +@DRAW_SINGLE_COLUMN: + lda X1 + and #7 + tax + ldy XPOSR + lda MASKS_LEFT,x + and MASKS_RIGHT,y + sta MASKS + lda MASKD_LEFT,x + ora MASKD_RIGHT,y + sta MASKD + jmp VFILL +.endproc + +; In: HEIGHT, PATTERN +; MASKS: Source mask (ANDed with pattern). +; MASKD: Destination mask (ANDed with screen). +; POINT: Starting address. +; ------------------------------------------------------------------------ +; Fill column with pattern using masks. +; + +.proc VFILL + lda PATTERN + sta @MOD_PATTERN+1 + lda PATTERN+1 + sta @MOD_PATTERN+2 + ldy HEIGHT + lda Y1 + and #7 + tax + +@L1: lda (POINT),y + and MASKD + sta TMP +@MOD_PATTERN: + lda $FFFF,x + and MASKS + ora TMP + sta (POINT),y + inx + txa + and #7 + tax + dey + bne @L1 + + rts +.endproc + +; In: HEIGHT, PATTERN, POINT +; ------------------------------------------------------------------------ +; Fill column with pattern. +; + +.proc VCOPY + lda PATTERN + sta @MOD_PATTERN+1 + lda PATTERN+1 + sta @MOD_PATTERN+2 + ldy HEIGHT + lda Y1 + and #7 + tax + +@MOD_PATTERN: +@L1: lda $FFFF,x + sta (POINT),y + inx + txa + and #7 + tax + dey + bne @L1 + + rts +.endproc + +.proc INCPOINTX + lda POINT + clc + adc #YRES + sta POINT + bcc @L1 + inc POINT+1 +@L1: rts +.endproc diff --git a/libsrc/vic20/tgi_stat_stddrv.s b/libsrc/vic20/tgi_stat_stddrv.s new file mode 100644 index 000000000..6a94d66aa --- /dev/null +++ b/libsrc/vic20/tgi_stat_stddrv.s @@ -0,0 +1,8 @@ +; +; Address of the static standard TGI driver +; +; const void tgi_static_stddrv[]; +; + + .import _vic20_hi_tgi + .export _tgi_static_stddrv := _vic20_hi_tgi diff --git a/libsrc/vic20/tgi_stddrv.s b/libsrc/vic20/tgi_stddrv.s new file mode 100644 index 000000000..d56af37e7 --- /dev/null +++ b/libsrc/vic20/tgi_stddrv.s @@ -0,0 +1,13 @@ +; +; Name of the standard TGI driver +; +; 2018-03-11, Sven Michael Klose +; +; const char tgi_stddrv[]; +; + + .export _tgi_stddrv + +.rodata + +_tgi_stddrv: .asciiz "vic20-hi.tgi" diff --git a/libsrc/vic20/tgihdr.s b/libsrc/vic20/tgihdr.s new file mode 100644 index 000000000..30258162d --- /dev/null +++ b/libsrc/vic20/tgihdr.s @@ -0,0 +1,67 @@ +; +; This code sits immediately after the BASIC stub program. +; Therefore, it's executed by that stub. +; +; 2018-04-17, Greg King +; + + .export __TGIHDR__ : abs = 1 ; Mark as TGI housekeeper + + .import __MAIN_LAST__ + .importzp ptr1, ptr2, tmp1 + + +basic_reset := $C000 ; vector to BASIC's cold-start code + +; This code moves the program to $2000. That move allows $1000 - $1FFF +; to be used by the TGI driver to hold its graphics data. + +.segment "TGI1HDR" + + lda #<(tgi1end + prog_size) ; source + ldx #>(tgi1end + prog_size) + sta ptr1 + stx ptr1+1 + + lda #<(tgi2hdr + prog_size) ; destination + ldx #>(tgi2hdr + prog_size) + sta ptr2 + stx ptr2+1 + + ldx #<~prog_size + lda #>~prog_size ; use -(prog_size + 1) + sta tmp1 + + ldy #<$0000 + +; Copy loop + +@L1: inx ; bump counter's low byte + beq @L4 + +@L2: tya ; will .Y underflow? + bne @L3 + dec ptr1+1 ; yes, do next lower page + dec ptr2+1 +@L3: dey + + lda (ptr1),y + sta (ptr2),y + jmp @L1 + +@L4: inc tmp1 ; bump counter's high byte + bne @L2 + + jmp tgi2hdr ; go to moved program +tgi1end: + +.segment "TGI2HDR" + +tgi2hdr: + jsr tgi2end ; run actual program + jmp (basic_reset) +tgi2end: + +; The length of the TGI program (including the TGI2HDR segment) + +prog_size = __MAIN_LAST__ - tgi2hdr diff --git a/samples/Makefile b/samples/Makefile index adfe870e4..267dc5235 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -230,6 +230,20 @@ ovrldemo: overlaydemo.o OVERLAYLIST := $(foreach I,1 2 3,multdemo.$I ovrldemo.$I) +# -------------------------------------------------------------------------- +# TGI programs on the VIC-20 need a special ld65 configuration file. + +ifeq ($(SYS),vic20) +mandelbrot.o: override CFLAGS += -D DYN_DRV=0 +mandelbrot: mandelbrot.o + $(LD) $(LDFLAGS) -o $@ -C vic20-tgi.cfg -m $@.map $^ $(SYS).lib + +# tgidemo needs at least 16K of RAM expansion. +tgidemo.o: override CFLAGS += -D DYN_DRV=0 +tgidemo: tgidemo.o + $(LD) -D __HIMEM__=0x6000 $(LDFLAGS) -o $@ -C vic20-tgi.cfg -m $@.map $^ $(SYS).lib +endif + # -------------------------------------------------------------------------- # Rule to make a CBM disk with all samples. Needs the c1541 program that comes # with the VICE emulator. diff --git a/samples/tgidemo.c b/samples/tgidemo.c index 93e91899b..b431cfb98 100644 --- a/samples/tgidemo.c +++ b/samples/tgidemo.c @@ -70,9 +70,10 @@ static void DoCircles (void) { static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_ORANGE }; unsigned char I; - unsigned char Color = COLOR_FORE; - unsigned X = MaxX / 2; - unsigned Y = MaxY / 2; + unsigned char Color = COLOR_BACK; + const unsigned X = MaxX / 2; + const unsigned Y = MaxY / 2; + const unsigned Limit = (X < Y) ? Y : X; tgi_setpalette (Palette); tgi_setcolor (COLOR_FORE); @@ -82,7 +83,7 @@ static void DoCircles (void) while (!kbhit ()) { Color = (Color == COLOR_FORE) ? COLOR_BACK : COLOR_FORE; tgi_setcolor (Color); - for (I = 10; I < 240; I += 10) { + for (I = 10; I <= Limit; I += 10) { tgi_ellipse (X, Y, I, tgi_imulround (I, AspectRatio)); } } @@ -132,7 +133,7 @@ static void DoDiagram (void) tgi_setcolor (COLOR_FORE); tgi_clear (); - /* Determine zero and aplitude */ + /* Determine zero and amplitude */ YOrigin = MaxY / 2; XOrigin = 10; Amp = (MaxY - 19) / 2; @@ -168,16 +169,17 @@ static void DoLines (void) { static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_BLACK }; unsigned X; + const unsigned Min = (MaxX < MaxY) ? MaxX : MaxY; tgi_setpalette (Palette); tgi_setcolor (COLOR_FORE); tgi_clear (); - for (X = 0; X <= MaxY; X += 10) { - tgi_line (0, 0, MaxY, X); - tgi_line (0, 0, X, MaxY); - tgi_line (MaxY, MaxY, 0, MaxY-X); - tgi_line (MaxY, MaxY, MaxY-X, 0); + for (X = 0; X <= Min; X += 10) { + tgi_line (0, 0, Min, X); + tgi_line (0, 0, X, Min); + tgi_line (Min, Min, 0, Min-X); + tgi_line (Min, Min, Min-X, 0); } cgetc (); From 021362fb757aa84d0d409bf9bdd4323f7b6e6682 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Thu, 2 Jul 2020 22:41:38 +0200 Subject: [PATCH 0169/2710] cl65: Remove temporary .o files --- src/cl65/main.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/cl65/main.c b/src/cl65/main.c index 9d536db82..c07e93e81 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -112,6 +112,9 @@ static CmdDesc CO65 = { 0, 0, 0, 0, 0, 0, 0 }; static CmdDesc LD65 = { 0, 0, 0, 0, 0, 0, 0 }; static CmdDesc GRC = { 0, 0, 0, 0, 0, 0, 0 }; +/* Pseudo-command to track files we want to delete */ +static CmdDesc RM = { 0, 0, 0, 0, 0, 0, 0 }; + /* Variables controlling the steps we're doing */ static int DoLink = 1; static int DoAssemble = 1; @@ -456,6 +459,19 @@ static void ExecProgram (CmdDesc* Cmd) +static void RemoveTempFiles (void) +{ + unsigned I; + for (I = 0; I < RM.FileCount; ++I) { + if (remove (RM.Files[I]) < 0) { + Warning ("Cannot remove temporary file '%s': %s", + RM.Files[I], strerror (errno)); + } + } +} + + + static void Link (void) /* Link the resulting executable */ { @@ -534,6 +550,8 @@ static void AssembleFile (const char* File, unsigned ArgCount) */ char* ObjName = MakeFilename (File, ".o"); CmdAddFile (&LD65, ObjName); + /* This is just a temporary file, schedule it for removal */ + CmdAddFile (&RM, ObjName); xfree (ObjName); } else { /* This is the final step. If an output name is given, set it */ @@ -1641,6 +1659,8 @@ int main (int argc, char* argv []) Link (); } + RemoveTempFiles (); + /* Return an apropriate exit code */ return EXIT_SUCCESS; } From 416adbce82c5dee998fc592561cd692fd0056174 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Fri, 3 Jul 2020 07:53:51 +0200 Subject: [PATCH 0170/2710] Add blank line --- src/cl65/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cl65/main.c b/src/cl65/main.c index c07e93e81..e7b9d5344 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -462,6 +462,7 @@ static void ExecProgram (CmdDesc* Cmd) static void RemoveTempFiles (void) { unsigned I; + for (I = 0; I < RM.FileCount; ++I) { if (remove (RM.Files[I]) < 0) { Warning ("Cannot remove temporary file '%s': %s", From 527df094caf40db07ac14f7591c8cf91f6d1a511 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Thu, 2 Jul 2020 22:24:57 +0200 Subject: [PATCH 0171/2710] Use xrealloc in cl65 Previously, xmalloc and xfree were used. --- src/cl65/main.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/cl65/main.c b/src/cl65/main.c index e7b9d5344..f75200c89 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -231,12 +231,8 @@ static char* CmdAllocArg (const char* Arg, unsigned Len) static void CmdExpand (CmdDesc* Cmd) /* Expand the argument vector */ { - unsigned NewMax = Cmd->ArgMax + 10; - char** NewArgs = xmalloc (NewMax * sizeof (char*)); - memcpy (NewArgs, Cmd->Args, Cmd->ArgMax * sizeof (char*)); - xfree (Cmd->Args); - Cmd->Args = NewArgs; - Cmd->ArgMax = NewMax; + Cmd->ArgMax += 10; + Cmd->Args = xrealloc (Cmd->Args, Cmd->ArgMax * sizeof (char*)); } @@ -324,12 +320,8 @@ static void CmdAddFile (CmdDesc* Cmd, const char* File) { /* Expand the file vector if needed */ if (Cmd->FileCount == Cmd->FileMax) { - unsigned NewMax = Cmd->FileMax + 10; - char** NewFiles = xmalloc (NewMax * sizeof (char*)); - memcpy (NewFiles, Cmd->Files, Cmd->FileMax * sizeof (char*)); - xfree (Cmd->Files); - Cmd->Files = NewFiles; - Cmd->FileMax = NewMax; + Cmd->FileMax += 10; + Cmd->Files = xrealloc(Cmd->Files, Cmd->FileMax * sizeof(char*)); } /* If the file name is not NULL (which is legal and is used to terminate From c273c90bf22b087806f1b6d783b8666263f8766e Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Fri, 3 Jul 2020 07:56:05 +0200 Subject: [PATCH 0172/2710] Fix formatting --- src/cl65/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cl65/main.c b/src/cl65/main.c index f75200c89..ea5329335 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -321,7 +321,7 @@ static void CmdAddFile (CmdDesc* Cmd, const char* File) /* Expand the file vector if needed */ if (Cmd->FileCount == Cmd->FileMax) { Cmd->FileMax += 10; - Cmd->Files = xrealloc(Cmd->Files, Cmd->FileMax * sizeof(char*)); + Cmd->Files = xrealloc (Cmd->Files, Cmd->FileMax * sizeof(char*)); } /* If the file name is not NULL (which is legal and is used to terminate From 9e881a497e619fc97cbb48a3a163e0eea23fbd52 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Fri, 3 Jul 2020 07:57:53 +0200 Subject: [PATCH 0173/2710] Fix formatting --- src/cl65/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cl65/main.c b/src/cl65/main.c index ea5329335..dba4915f2 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -321,7 +321,7 @@ static void CmdAddFile (CmdDesc* Cmd, const char* File) /* Expand the file vector if needed */ if (Cmd->FileCount == Cmd->FileMax) { Cmd->FileMax += 10; - Cmd->Files = xrealloc (Cmd->Files, Cmd->FileMax * sizeof(char*)); + Cmd->Files = xrealloc (Cmd->Files, Cmd->FileMax * sizeof (char*)); } /* If the file name is not NULL (which is legal and is used to terminate From 9858e47dfd0d945b750bce7b19716a834f0d78e3 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Sun, 21 Jun 2020 21:28:32 +0200 Subject: [PATCH 0174/2710] Pad bit-fields only to the next byte Fixes #1054. Previously, bit-fields followed by another field were aligned to two bytes. Bit-fields ending the struct were (and continue to be) aligned only to a single byte. ``` struct s { unsigned int x : 4; }; struct t { unsigned int x : 4; unsigned int y; }; ``` Before: `sizeof(struct s) == 1`, sizeof(struct t) == 4` After: `sizeof(struct s) == 1` sizeof(struct t) == 3` --- src/cc65/declare.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index d7940c93b..730406088 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -772,17 +772,19 @@ static SymEntry* ParseStructDecl (const char* Name) */ if (BitOffs > 0) { if (FieldWidth <= 0 || (BitOffs + FieldWidth) > INT_BITS) { + /* Bits needed to byte-align the next field. */ + unsigned PaddingBitWidth = -BitOffs % CHAR_BITS; /* We need an anonymous name */ AnonName (Ident, "bit-field"); /* Add an anonymous bit-field that aligns to the next - ** storage unit. + ** byte. */ - AddBitField (Ident, StructSize, BitOffs, INT_BITS - BitOffs); + AddBitField (Ident, StructSize, BitOffs, PaddingBitWidth); /* No bits left */ - StructSize += SIZEOF_INT; + StructSize += (BitOffs + PaddingBitWidth) / CHAR_BITS; BitOffs = 0; } } From 6dc2bf12265f106d8cd4916a73990873f62f5c36 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Mon, 22 Jun 2020 09:07:39 +0200 Subject: [PATCH 0175/2710] Rename PaddingBitWidth to PaddingBits --- src/cc65/declare.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 730406088..5e2e204cf 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -773,7 +773,7 @@ static SymEntry* ParseStructDecl (const char* Name) if (BitOffs > 0) { if (FieldWidth <= 0 || (BitOffs + FieldWidth) > INT_BITS) { /* Bits needed to byte-align the next field. */ - unsigned PaddingBitWidth = -BitOffs % CHAR_BITS; + unsigned PaddingBits = -BitOffs % CHAR_BITS; /* We need an anonymous name */ AnonName (Ident, "bit-field"); @@ -781,10 +781,10 @@ static SymEntry* ParseStructDecl (const char* Name) /* Add an anonymous bit-field that aligns to the next ** byte. */ - AddBitField (Ident, StructSize, BitOffs, PaddingBitWidth); + AddBitField (Ident, StructSize, BitOffs, PaddingBits); /* No bits left */ - StructSize += (BitOffs + PaddingBitWidth) / CHAR_BITS; + StructSize += (BitOffs + PaddingBits) / CHAR_BITS; BitOffs = 0; } } From a70ac6be307e9de645b6fa7af895b226cb0c11de Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Sat, 27 Jun 2020 20:30:08 +0200 Subject: [PATCH 0176/2710] Add test of bit-field packing for #1054 and #1055 --- test/val/bitfield.c | 124 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 test/val/bitfield.c diff --git a/test/val/bitfield.c b/test/val/bitfield.c new file mode 100644 index 000000000..29e450359 --- /dev/null +++ b/test/val/bitfield.c @@ -0,0 +1,124 @@ +/* + !!DESCRIPTION!! Tests of bit-field packing + !!ORIGIN!! cc65 regression tests + !!LICENCE!! zlib + !!AUTHOR!! Jesse Rosenstock +*/ + +/* + see https://github.com/cc65/cc65/issues/1054 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +static struct four_bits { + unsigned int x : 4; +} fb = {1}; + +static void test_four_bits(void) +{ + if (sizeof(struct four_bits) != 1) { + fprintf(stderr, "Got sizeof(struct four_bits) = %zu, expected 1.\n", + sizeof(struct four_bits)); + failures++; + } + + if (fb.x != 1) { + fprintf(stderr, "Got fb.x = %u, expected 1.\n", fb.x); + failures++; + } + + fb.x = 3; + + if (fb.x != 3) { + fprintf(stderr, "Got fb.x = %u, expected 3.\n", fb.x); + failures++; + } +} + +static struct four_bits_with_int { + unsigned int x : 4; + unsigned int y; +} fbi = {1, 2}; + +static void test_four_bits_with_int(void) +{ + /* We would like this to be 3. https://github.com/cc65/cc65/issues/1054 */ + if (sizeof(struct four_bits_with_int) != 4) { + fprintf(stderr, + "Got sizeof(struct four_bits_with_int) = %zu, expected 4.\n", + sizeof(struct four_bits_with_int)); + failures++; + } + + if (fbi.x != 1) { + fprintf(stderr, "Got fbi.x = %u, expected 1.\n", fbi.x); + failures++; + } + + if (fbi.y != 2) { + fprintf(stderr, "Got fbi.y = %u, expected 2.\n", fbi.y); + failures++; + } + + fbi.x = 3; + fbi.y = 17; + + if (fbi.x != 3) { + fprintf(stderr, "Got fbi.x = %u, expected 3.\n", fbi.x); + failures++; + } + + if (fbi.y != 17) { + fprintf(stderr, "Got fbi.y = %u, expected 17.\n", fbi.y); + failures++; + } +} + +static struct overlap { + unsigned int x : 10; + unsigned int y : 10; +} o = {11, 22}; + +/* Tests that bit-fields can share allocation units. */ +static void test_overlap(void) +{ + if (sizeof(struct overlap) != 3) { + fprintf(stderr, "Got sizeof(struct overlap) = %zu, expected 3.\n", + sizeof(struct overlap)); + failures++; + } + + if (o.x != 11) { + fprintf(stderr, "Got o.x = %u, expected 11.\n", o.x); + failures++; + } + + if (o.y != 22) { + fprintf(stderr, "Got o.y = %u, expected 22.\n", o.y); + failures++; + } + + o.x = 33; + o.y = 44; + + if (o.x != 33) { + fprintf(stderr, "Got o.x = %u, expected 33.\n", o.x); + failures++; + } + + if (o.y != 44) { + fprintf(stderr, "Got o.y = %u, expected 44.\n", o.y); + failures++; + } +} + +int main(void) +{ + test_four_bits(); + test_four_bits_with_int(); + test_overlap(); + return failures; +} From 8a331ee7ecf7af1671f406aa87a29456417e1b58 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Sat, 27 Jun 2020 20:39:33 +0200 Subject: [PATCH 0177/2710] Print to stdout instead of stderr Print number of failures. This makes it consistent with the other val/ tests. --- test/val/bitfield.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/test/val/bitfield.c b/test/val/bitfield.c index 29e450359..b203b9cce 100644 --- a/test/val/bitfield.c +++ b/test/val/bitfield.c @@ -20,20 +20,20 @@ static struct four_bits { static void test_four_bits(void) { if (sizeof(struct four_bits) != 1) { - fprintf(stderr, "Got sizeof(struct four_bits) = %zu, expected 1.\n", - sizeof(struct four_bits)); + printf("Got sizeof(struct four_bits) = %zu, expected 1.\n", + sizeof(struct four_bits)); failures++; } if (fb.x != 1) { - fprintf(stderr, "Got fb.x = %u, expected 1.\n", fb.x); + printf("Got fb.x = %u, expected 1.\n", fb.x); failures++; } fb.x = 3; if (fb.x != 3) { - fprintf(stderr, "Got fb.x = %u, expected 3.\n", fb.x); + printf("Got fb.x = %u, expected 3.\n", fb.x); failures++; } } @@ -47,19 +47,18 @@ static void test_four_bits_with_int(void) { /* We would like this to be 3. https://github.com/cc65/cc65/issues/1054 */ if (sizeof(struct four_bits_with_int) != 4) { - fprintf(stderr, - "Got sizeof(struct four_bits_with_int) = %zu, expected 4.\n", - sizeof(struct four_bits_with_int)); + printf("Got sizeof(struct four_bits_with_int) = %zu, expected 4.\n", + sizeof(struct four_bits_with_int)); failures++; } if (fbi.x != 1) { - fprintf(stderr, "Got fbi.x = %u, expected 1.\n", fbi.x); + printf("Got fbi.x = %u, expected 1.\n", fbi.x); failures++; } if (fbi.y != 2) { - fprintf(stderr, "Got fbi.y = %u, expected 2.\n", fbi.y); + printf("Got fbi.y = %u, expected 2.\n", fbi.y); failures++; } @@ -67,12 +66,12 @@ static void test_four_bits_with_int(void) fbi.y = 17; if (fbi.x != 3) { - fprintf(stderr, "Got fbi.x = %u, expected 3.\n", fbi.x); + printf("Got fbi.x = %u, expected 3.\n", fbi.x); failures++; } if (fbi.y != 17) { - fprintf(stderr, "Got fbi.y = %u, expected 17.\n", fbi.y); + printf("Got fbi.y = %u, expected 17.\n", fbi.y); failures++; } } @@ -86,18 +85,18 @@ static struct overlap { static void test_overlap(void) { if (sizeof(struct overlap) != 3) { - fprintf(stderr, "Got sizeof(struct overlap) = %zu, expected 3.\n", - sizeof(struct overlap)); + printf("Got sizeof(struct overlap) = %zu, expected 3.\n", + sizeof(struct overlap)); failures++; } if (o.x != 11) { - fprintf(stderr, "Got o.x = %u, expected 11.\n", o.x); + printf("Got o.x = %u, expected 11.\n", o.x); failures++; } if (o.y != 22) { - fprintf(stderr, "Got o.y = %u, expected 22.\n", o.y); + printf("Got o.y = %u, expected 22.\n", o.y); failures++; } @@ -105,12 +104,12 @@ static void test_overlap(void) o.y = 44; if (o.x != 33) { - fprintf(stderr, "Got o.x = %u, expected 33.\n", o.x); + printf("Got o.x = %u, expected 33.\n", o.x); failures++; } if (o.y != 44) { - fprintf(stderr, "Got o.y = %u, expected 44.\n", o.y); + printf("Got o.y = %u, expected 44.\n", o.y); failures++; } } @@ -120,5 +119,6 @@ int main(void) test_four_bits(); test_four_bits_with_int(); test_overlap(); + printf("failures: %u\n", failures); return failures; } From 2f456ce4e210a4437c8063a3a6579c18dc762afb Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Sun, 28 Jun 2020 21:17:42 +0200 Subject: [PATCH 0178/2710] Add comment explaining four_bits_with_int --- test/val/bitfield.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/val/bitfield.c b/test/val/bitfield.c index b203b9cce..ce791b634 100644 --- a/test/val/bitfield.c +++ b/test/val/bitfield.c @@ -38,6 +38,11 @@ static void test_four_bits(void) } } +/* + Logic is somewhat diferent for bit-fields that end a struct vs + having additional fields. +*/ + static struct four_bits_with_int { unsigned int x : 4; unsigned int y; From 6f85ee9d95b29dbea84fbd641f26acba97a86c3d Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Sun, 28 Jun 2020 21:24:21 +0200 Subject: [PATCH 0179/2710] Add another test for bit-field unit overlap Test when there is another field after bit-fields with allocation unit overlap. --- test/val/bitfield.c | 51 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/test/val/bitfield.c b/test/val/bitfield.c index ce791b634..4298e7d46 100644 --- a/test/val/bitfield.c +++ b/test/val/bitfield.c @@ -119,11 +119,62 @@ static void test_overlap(void) } } +static struct overlap_with_int { + unsigned int x : 10; + unsigned int y : 10; + unsigned int z; +} oi = {111, 222, 333}; + +static void test_overlap_with_int(void) +{ + /* We would like this to be 5. */ + if (sizeof(struct overlap_with_int) != 6) { + printf("Got sizeof(struct overlap_with_int) = %zu, expected 6.\n", + sizeof(struct overlap_with_int)); + failures++; + } + + if (oi.x != 111) { + printf("Got oi.x = %u, expected 111.\n", oi.x); + failures++; + } + + if (oi.y != 222) { + printf("Got oi.y = %u, expected 222.\n", oi.y); + failures++; + } + + if (oi.z != 333) { + printf("Got oi.z = %u, expected 333.\n", oi.z); + failures++; + } + + oi.x = 444; + oi.y = 555; + oi.z = 666; + + if (oi.x != 444) { + printf("Got oi.x = %u, expected 444.\n", oi.x); + failures++; + } + + if (oi.y != 555) { + printf("Got oi.y = %u, expected 555.\n", oi.y); + failures++; + } + + if (oi.z != 666) { + printf("Got oi.z = %u, expected 666.\n", oi.z); + failures++; + } +} + int main(void) { test_four_bits(); test_four_bits_with_int(); test_overlap(); + test_overlap_with_int(); printf("failures: %u\n", failures); return failures; } From 532e6b2554452135dc67ffc5078b5c7ea656991c Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Thu, 2 Jul 2020 09:01:30 +0200 Subject: [PATCH 0180/2710] Add copyright notice --- test/val/bitfield.c | 1 + 1 file changed, 1 insertion(+) diff --git a/test/val/bitfield.c b/test/val/bitfield.c index 4298e7d46..21b45789b 100644 --- a/test/val/bitfield.c +++ b/test/val/bitfield.c @@ -3,6 +3,7 @@ !!ORIGIN!! cc65 regression tests !!LICENCE!! zlib !!AUTHOR!! Jesse Rosenstock + !!COPYRIGHT!! Copyright 2020 Google LLC */ /* From 8449c9eaa03563d64894f462ff604fc9efd498a7 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Thu, 2 Jul 2020 09:08:57 +0200 Subject: [PATCH 0181/2710] Add zlib license text --- test/val/bitfield.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/test/val/bitfield.c b/test/val/bitfield.c index 21b45789b..c249b0f59 100644 --- a/test/val/bitfield.c +++ b/test/val/bitfield.c @@ -1,13 +1,25 @@ /* - !!DESCRIPTION!! Tests of bit-field packing - !!ORIGIN!! cc65 regression tests - !!LICENCE!! zlib - !!AUTHOR!! Jesse Rosenstock - !!COPYRIGHT!! Copyright 2020 Google LLC + Copyright 2020 Google LLC + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. */ /* - see https://github.com/cc65/cc65/issues/1054 + Tests of bit-field packing; see https://github.com/cc65/cc65/issues/1054 */ #include <stdio.h> From 359da1ae76fbce6cf017aa48f690c52cfaa26f14 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Wed, 8 Jul 2020 17:11:41 +0200 Subject: [PATCH 0182/2710] Update bit-field tests after #1058 merge --- test/val/bitfield.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/val/bitfield.c b/test/val/bitfield.c index c249b0f59..81d5b2aa1 100644 --- a/test/val/bitfield.c +++ b/test/val/bitfield.c @@ -63,9 +63,9 @@ static struct four_bits_with_int { static void test_four_bits_with_int(void) { - /* We would like this to be 3. https://github.com/cc65/cc65/issues/1054 */ - if (sizeof(struct four_bits_with_int) != 4) { - printf("Got sizeof(struct four_bits_with_int) = %zu, expected 4.\n", + /* The first 4-bit bit-field just takes one byte, so the size is 3. */ + if (sizeof(struct four_bits_with_int) != 3) { + printf("Got sizeof(struct four_bits_with_int) = %zu, expected 3.\n", sizeof(struct four_bits_with_int)); failures++; } @@ -140,9 +140,9 @@ static struct overlap_with_int { static void test_overlap_with_int(void) { - /* We would like this to be 5. */ - if (sizeof(struct overlap_with_int) != 6) { - printf("Got sizeof(struct overlap_with_int) = %zu, expected 6.\n", + /* First two fields in 3 bytes, then another 2 bytes. */ + if (sizeof(struct overlap_with_int) != 5) { + printf("Got sizeof(struct overlap_with_int) = %zu, expected 5.\n", sizeof(struct overlap_with_int)); failures++; } From 9e5b8d99a301066f3c300a48ce836a313693531f Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Wed, 8 Jul 2020 21:28:31 +0200 Subject: [PATCH 0183/2710] Fix MSVC build broken by #1058 MSVC complains about unary negation of unsigned, but it's intended. Suppress the warning. https://github.com/cc65/cc65/pull/1058#discussion_r451757967 "Tested" with godbolt.org. --- src/cc65/declare.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 5e2e204cf..140558ad3 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -772,7 +772,11 @@ static SymEntry* ParseStructDecl (const char* Name) */ if (BitOffs > 0) { if (FieldWidth <= 0 || (BitOffs + FieldWidth) > INT_BITS) { - /* Bits needed to byte-align the next field. */ + /* Bits needed to byte-align the next field. MSVC complains + ** about unary negation of unsigned, but it's intended. + ** Disable the warning for the next line only. + */ + #pragma warning(disable: 4146) unsigned PaddingBits = -BitOffs % CHAR_BITS; /* We need an anonymous name */ From 2c16453a9fab93007d77213d914759120ea36802 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Wed, 8 Jul 2020 22:46:40 +0200 Subject: [PATCH 0184/2710] Guard MSVC pragma with ifdef _MSC_VER Fix broken travis-ci with gcc -Werror [-Werror=unknown-pragmas]. --- src/cc65/declare.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 140558ad3..ab9b45e15 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -776,7 +776,9 @@ static SymEntry* ParseStructDecl (const char* Name) ** about unary negation of unsigned, but it's intended. ** Disable the warning for the next line only. */ + #ifdef _MSC_VER #pragma warning(disable: 4146) + #endif unsigned PaddingBits = -BitOffs % CHAR_BITS; /* We need an anonymous name */ From 82c8bd6e2b9e1c53cfb60462d56ce049a01d0554 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Wed, 8 Jul 2020 23:16:15 +0200 Subject: [PATCH 0185/2710] Replace unary negation with subtraction Remove MSVC pragma. --- src/cc65/declare.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index ab9b45e15..58baaf769 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -772,14 +772,11 @@ static SymEntry* ParseStructDecl (const char* Name) */ if (BitOffs > 0) { if (FieldWidth <= 0 || (BitOffs + FieldWidth) > INT_BITS) { - /* Bits needed to byte-align the next field. MSVC complains - ** about unary negation of unsigned, but it's intended. - ** Disable the warning for the next line only. + /* Bits needed to byte-align the next field. + ** MSVC complains about unary negation of unsigned, + ** so it has been rewritten as subtraction. */ - #ifdef _MSC_VER - #pragma warning(disable: 4146) - #endif - unsigned PaddingBits = -BitOffs % CHAR_BITS; + unsigned PaddingBits = (0 - BitOffs) % CHAR_BITS; /* We need an anonymous name */ AnonName (Ident, "bit-field"); From e98fe04cc282f6d11e0a1b9c208e41917b3d1c2d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 2 Jul 2020 10:30:02 +0800 Subject: [PATCH 0186/2710] Almost fixed Issue #169. The only denominator not working right now is -2147483648. --- src/cc65/codegen.c | 102 ++++++++++++++++++++++++++------------------- 1 file changed, 60 insertions(+), 42 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 35af5281e..29d14a475 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -1479,48 +1479,9 @@ void g_scale (unsigned flags, long val) /* Scale down */ val = -val; - if ((p2 = PowerOf2 (val)) > 0 && p2 <= 4) { - /* Factor is 2, 4, 8 and 16 use special function */ - switch (flags & CF_TYPEMASK) { - - case CF_CHAR: - if (flags & CF_FORCECHAR) { - if (flags & CF_UNSIGNED) { - while (p2--) { - AddCodeLine ("lsr a"); - } - break; - } else if (p2 <= 2) { - AddCodeLine ("cmp #$80"); - AddCodeLine ("ror a"); - break; - } - } - /* FALLTHROUGH */ - - case CF_INT: - if (flags & CF_UNSIGNED) { - AddCodeLine ("jsr lsrax%d", p2); - } else { - AddCodeLine ("jsr asrax%d", p2); - } - break; - - case CF_LONG: - if (flags & CF_UNSIGNED) { - AddCodeLine ("jsr lsreax%d", p2); - } else { - AddCodeLine ("jsr asreax%d", p2); - } - break; - - default: - typeerror (flags); - - } - - } else if (val != 1) { + /* g_div will use asr if feasible */ + if (val != 1) { /* Use a division instead */ g_div (flags | CF_CONST, val); @@ -2668,11 +2629,52 @@ void g_div (unsigned flags, unsigned long val) "tosdivax", "tosudivax", "tosdiveax", "tosudiveax" }; + unsigned DoShiftLabel, EndLabel; + /* Do strength reduction if the value is constant and a power of two */ int p2; if ((flags & CF_CONST) && (p2 = PowerOf2 (val)) >= 0) { /* Generate a shift instead */ - g_asr (flags, p2); + if (flags & CF_UNSIGNED) { + g_asr (flags, p2); + } else if (p2 > 0) { + /* GitHub #169 - if abs(expr) < abs(val), the result is always 0 */ + DoShiftLabel = GetLocalLabel (); + EndLabel = GetLocalLabel (); + switch (flags & CF_TYPEMASK) { + case CF_CHAR: + if (flags & CF_FORCECHAR) { + AddCodeLine ("cmp #$00"); + AddCodeLine ("bpl %s", LocalLabelName (DoShiftLabel)); + break; + } + /* FALLTHROUGH */ + + case CF_INT: + AddCodeLine ("cpx #$00"); + AddCodeLine ("bpl %s", LocalLabelName (DoShiftLabel)); + break; + + case CF_LONG: + AddCodeLine ("ldy sreg+1"); + AddCodeLine ("bpl %s", LocalLabelName (DoShiftLabel)); + break; + + default: + typeerror (flags); + break; + } + g_save (flags); + g_le (flags, (unsigned long)-(signed long)val); + AddCodeLine ("lsr a"); + g_restore (flags); + AddCodeLine ("bcs %s", LocalLabelName (DoShiftLabel)); + g_getimmed (flags | CF_ABSOLUTE, 0, 0); + g_jump (EndLabel); + g_defcodelabel (DoShiftLabel); + g_asr (flags, p2); + g_defcodelabel (EndLabel); + } } else { /* Generate a division */ if (flags & CF_CONST) { @@ -2956,6 +2958,22 @@ void g_asr (unsigned flags, unsigned long val) switch (flags & CF_TYPEMASK) { case CF_CHAR: + if (flags & CF_FORCECHAR) { + if ((flags & CF_UNSIGNED) != 0 && val <= 4) { + while (val--) { + AddCodeLine ("lsr a"); + } + return; + } else if (val <= 2) { + while (val--) { + AddCodeLine ("cmp #$80"); + AddCodeLine ("ror a"); + } + return; + } + } + /* FALLTHROUGH */ + case CF_INT: val &= 0x0F; if (val >= 8) { From 30835e3d9d929554f443521cd622ce8ac4d1cae8 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 2 Jul 2020 10:30:02 +0800 Subject: [PATCH 0187/2710] More optimized codegen for the correct cases of the Issue #169 fix. --- src/cc65/codegen.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 29d14a475..2e25cb6ad 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -1480,12 +1480,9 @@ void g_scale (unsigned flags, long val) /* Scale down */ val = -val; - /* g_div will use asr if feasible */ + /* Use a division instead */ if (val != 1) { - - /* Use a division instead */ g_div (flags | CF_CONST, val); - } } } @@ -2631,6 +2628,9 @@ void g_div (unsigned flags, unsigned long val) unsigned DoShiftLabel, EndLabel; + /* -Val truncated to the correct size */ + unsigned long NegatedVal; + /* Do strength reduction if the value is constant and a power of two */ int p2; if ((flags & CF_CONST) && (p2 = PowerOf2 (val)) >= 0) { @@ -2641,9 +2641,11 @@ void g_div (unsigned flags, unsigned long val) /* GitHub #169 - if abs(expr) < abs(val), the result is always 0 */ DoShiftLabel = GetLocalLabel (); EndLabel = GetLocalLabel (); + NegatedVal = (unsigned long)-(signed long)val; switch (flags & CF_TYPEMASK) { case CF_CHAR: if (flags & CF_FORCECHAR) { + NegatedVal &= 0xFF; AddCodeLine ("cmp #$00"); AddCodeLine ("bpl %s", LocalLabelName (DoShiftLabel)); break; @@ -2651,11 +2653,13 @@ void g_div (unsigned flags, unsigned long val) /* FALLTHROUGH */ case CF_INT: + NegatedVal &= 0xFFFF; AddCodeLine ("cpx #$00"); AddCodeLine ("bpl %s", LocalLabelName (DoShiftLabel)); break; case CF_LONG: + NegatedVal &= 0xFFFFFFFF; AddCodeLine ("ldy sreg+1"); AddCodeLine ("bpl %s", LocalLabelName (DoShiftLabel)); break; @@ -2665,7 +2669,7 @@ void g_div (unsigned flags, unsigned long val) break; } g_save (flags); - g_le (flags, (unsigned long)-(signed long)val); + g_le (flags | CF_UNSIGNED, NegatedVal); AddCodeLine ("lsr a"); g_restore (flags); AddCodeLine ("bcs %s", LocalLabelName (DoShiftLabel)); From 09bcff08627dc247413ee875519e69455a222320 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 2 Jul 2020 10:30:02 +0800 Subject: [PATCH 0188/2710] Added support for changing divisions by negative power-of-2 denominators into bit shifts, and fixed #169 including the case of -2147483648 which is negative but appears positive. --- src/cc65/codegen.c | 85 +++++++++++++++++++++++++++++----------------- 1 file changed, 53 insertions(+), 32 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 2e25cb6ad..600bd7bc0 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -2628,24 +2628,34 @@ void g_div (unsigned flags, unsigned long val) unsigned DoShiftLabel, EndLabel; - /* -Val truncated to the correct size */ + /* Deal with negative values as well as different sizes */ + int Negation; unsigned long NegatedVal; + unsigned MaskedVal; /* Do strength reduction if the value is constant and a power of two */ int p2; - if ((flags & CF_CONST) && (p2 = PowerOf2 (val)) >= 0) { - /* Generate a shift instead */ - if (flags & CF_UNSIGNED) { - g_asr (flags, p2); - } else if (p2 > 0) { - /* GitHub #169 - if abs(expr) < abs(val), the result is always 0 */ - DoShiftLabel = GetLocalLabel (); - EndLabel = GetLocalLabel (); - NegatedVal = (unsigned long)-(signed long)val; - switch (flags & CF_TYPEMASK) { + if (flags & CF_CONST) { + Negation = (flags & CF_UNSIGNED) == 0 && (signed long)val < 0; + NegatedVal = (unsigned long)-(signed long)val; + p2 = PowerOf2 (Negation ? NegatedVal : val); + if (p2 >= 0) { + /* Generate a shift instead */ + if (flags & CF_UNSIGNED) { + g_asr (flags, p2); + return; + } + + /* Generate a conditional shift instead */ + if (p2 > 0) { + /* GitHub #169 - if abs(expr) < abs(val), the result is always 0 */ + DoShiftLabel = GetLocalLabel (); + EndLabel = GetLocalLabel (); + MaskedVal = Negation ? val : NegatedVal; + switch (flags & CF_TYPEMASK) { case CF_CHAR: if (flags & CF_FORCECHAR) { - NegatedVal &= 0xFF; + MaskedVal &= 0xFF; AddCodeLine ("cmp #$00"); AddCodeLine ("bpl %s", LocalLabelName (DoShiftLabel)); break; @@ -2653,13 +2663,13 @@ void g_div (unsigned flags, unsigned long val) /* FALLTHROUGH */ case CF_INT: - NegatedVal &= 0xFFFF; + MaskedVal &= 0xFFFF; AddCodeLine ("cpx #$00"); AddCodeLine ("bpl %s", LocalLabelName (DoShiftLabel)); break; case CF_LONG: - NegatedVal &= 0xFFFFFFFF; + MaskedVal &= 0xFFFFFFFF; AddCodeLine ("ldy sreg+1"); AddCodeLine ("bpl %s", LocalLabelName (DoShiftLabel)); break; @@ -2667,27 +2677,38 @@ void g_div (unsigned flags, unsigned long val) default: typeerror (flags); break; + } + g_save (flags); + g_le (flags | CF_UNSIGNED, MaskedVal); + AddCodeLine ("lsr a"); + g_restore (flags); + AddCodeLine ("bcs %s", LocalLabelName (DoShiftLabel)); + g_getimmed (flags | CF_ABSOLUTE, 0, 0); + g_jump (EndLabel); + g_defcodelabel (DoShiftLabel); + g_asr (flags, p2); + g_defcodelabel (EndLabel); } - g_save (flags); - g_le (flags | CF_UNSIGNED, NegatedVal); - AddCodeLine ("lsr a"); - g_restore (flags); - AddCodeLine ("bcs %s", LocalLabelName (DoShiftLabel)); - g_getimmed (flags | CF_ABSOLUTE, 0, 0); - g_jump (EndLabel); - g_defcodelabel (DoShiftLabel); - g_asr (flags, p2); - g_defcodelabel (EndLabel); + + /* Negate the result if val is negative */ + if (Negation) { + g_neg (flags); + } + + /* Done */ + return; } - } else { - /* Generate a division */ - if (flags & CF_CONST) { - /* lhs is not on stack */ - flags &= ~CF_FORCECHAR; /* Handle chars as ints */ - g_push (flags & ~CF_CONST, 0); - } - oper (flags, val, ops); + + /* If we go here, we didn't emit code. Push the lhs on stack and fall + ** into the normal, non-optimized stuff. + */ + flags &= ~CF_FORCECHAR; /* Handle chars as ints */ + g_push (flags & ~CF_CONST, 0); } + + /* Generate a division */ + oper (flags, val, ops); + } From 85e73e91f8eec70c7d598c6b60eabe3fe603edb1 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 3 Jul 2020 16:21:01 +0800 Subject: [PATCH 0189/2710] Only enable signed div replacements with shift according to the code size factor settings. Also with better comments. --- src/cc65/codegen.c | 58 ++++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 600bd7bc0..920d8fe90 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -2626,32 +2626,32 @@ void g_div (unsigned flags, unsigned long val) "tosdivax", "tosudivax", "tosdiveax", "tosudiveax" }; - unsigned DoShiftLabel, EndLabel; - - /* Deal with negative values as well as different sizes */ - int Negation; - unsigned long NegatedVal; - unsigned MaskedVal; - /* Do strength reduction if the value is constant and a power of two */ - int p2; if (flags & CF_CONST) { - Negation = (flags & CF_UNSIGNED) == 0 && (signed long)val < 0; - NegatedVal = (unsigned long)-(signed long)val; - p2 = PowerOf2 (Negation ? NegatedVal : val); - if (p2 >= 0) { - /* Generate a shift instead */ - if (flags & CF_UNSIGNED) { - g_asr (flags, p2); - return; - } + /* Deal with negative values as well as different sizes */ + int Negation = (flags & CF_UNSIGNED) == 0 && (long)val < 0; + unsigned long NegatedVal = (unsigned long)-(long)val; + int p2 = PowerOf2 (Negation ? NegatedVal : val); + + /* Generate a shift instead */ + if ((flags & CF_UNSIGNED) != 0 && p2 > 0) { + g_asr (flags, p2); + return; + } + + /* Check if we can afford using shift instead of multiplication at the + ** cost of code size */ + if (p2 == 0 || (p2 > 0 && IS_Get (&CodeSizeFactor) >= (Negation ? 200 : 170))) { /* Generate a conditional shift instead */ if (p2 > 0) { - /* GitHub #169 - if abs(expr) < abs(val), the result is always 0 */ - DoShiftLabel = GetLocalLabel (); - EndLabel = GetLocalLabel (); - MaskedVal = Negation ? val : NegatedVal; + unsigned int DoShiftLabel = GetLocalLabel (); + unsigned int EndLabel = GetLocalLabel (); + unsigned long MaskedVal = Negation ? val : NegatedVal; + + /* GitHub #169 - if abs(expr) < abs(val), the result is always 0. + ** First, check whether expr >= 0 and skip to the shift if true. + */ switch (flags & CF_TYPEMASK) { case CF_CHAR: if (flags & CF_FORCECHAR) { @@ -2678,19 +2678,33 @@ void g_div (unsigned flags, unsigned long val) typeerror (flags); break; } + /* Second, check whether expr <= -asb(val) and skip to the + ** shift if true. The original content of expr has to be saved + ** before the checking comparison and restored after that, as + ** the content in Primary register will be destroyed. + ** The result of the comparison is a boolean. We can store + ** it in the Carry flag with a LSR and branch on it later. + */ g_save (flags); g_le (flags | CF_UNSIGNED, MaskedVal); AddCodeLine ("lsr a"); g_restore (flags); AddCodeLine ("bcs %s", LocalLabelName (DoShiftLabel)); + + /* The result is 0. We can just load 0 and skip the shifting. */ g_getimmed (flags | CF_ABSOLUTE, 0, 0); g_jump (EndLabel); + + /* Do the shift. The sign of the result may need be corrected + ** later. + */ g_defcodelabel (DoShiftLabel); g_asr (flags, p2); g_defcodelabel (EndLabel); } - /* Negate the result if val is negative */ + /* Negate the result as long as val < 0, even if val == -1 and no + ** shift was generated. */ if (Negation) { g_neg (flags); } From 93f0df58e5323be4e4043c5d9e8b6d93ffb7cf9e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 9 Jul 2020 15:57:51 +0200 Subject: [PATCH 0190/2710] test related to issue #1071 --- test/val/bug1071.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 test/val/bug1071.c diff --git a/test/val/bug1071.c b/test/val/bug1071.c new file mode 100644 index 000000000..02b069de0 --- /dev/null +++ b/test/val/bug1071.c @@ -0,0 +1,87 @@ + +/* test related to issue #1071 */ + +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> + +struct ImageStruct +{ + uint8_t _imageData; + #if !defined(NO_COLOR) + uint8_t _color; + #endif +}; + +typedef struct ImageStruct Image; + +struct CharacterStruct +{ + // character coordinates + uint8_t _x; + uint8_t _y; + + // _status decides whether the character is active + uint8_t _status; + + Image* _imagePtr; +}; + +typedef struct CharacterStruct Character; + +uint16_t ghostLevel; +uint8_t level; +uint16_t loop; + +#define GHOSTS_NUMBER 10 +#define BOMBS_NUMBER 3 + +#define MAX_GHOST_LEVEL_SCALE 3 +#define MAX_GHOST_LEVEL (1400/MAX_GHOST_LEVEL_SCALE) + +#define MAX_GHOST_LOOP_SCALE 3 +#define MAX_GHOST_LOOP (1800/MAX_GHOST_LOOP_SCALE) + +#define INITIAL_GHOST_SLOWDOWN 16000 + +#define ACTION_GHOST_MIN_SLOWDOWN_SCALE 1 +#define GHOST_MIN_SLOWDOWN_SCALE ACTION_GHOST_MIN_SLOWDOWN_SCALE +#define GHOST_MIN_SLOWDOWN (3000/GHOST_MIN_SLOWDOWN_SCALE) + +Character ghosts[GHOSTS_NUMBER]; +Character bombs[BOMBS_NUMBER]; + +uint16_t test1(void) +{ + if((loop<MAX_GHOST_LOOP) && (ghostLevel<MAX_GHOST_LEVEL)) + { + return INITIAL_GHOST_SLOWDOWN-(uint16_t)level*256-ghostLevel*8; + } + return GHOST_MIN_SLOWDOWN; +} + +uint16_t test2(void) +{ + if((loop<MAX_GHOST_LOOP) && (ghostLevel<MAX_GHOST_LEVEL)) + { + return INITIAL_GHOST_SLOWDOWN-(uint16_t)level*256-ghostLevel*16; + } + return GHOST_MIN_SLOWDOWN; +} + +uint16_t res = 0; + +int main(void) +{ + loop = 7; + ghostLevel = 13; + level = 3; + + res = test1(); + printf("test1 res: %d\n", res); + if (res != 15128) return -1; + res = test2(); + printf("test2 res: %d\n", res); + if (res != 15024) return -1; + return 0; +} From 4b8b15a07a96b2daa001081fc7bc3cca5a497957 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 9 Jul 2020 16:05:57 +0200 Subject: [PATCH 0191/2710] tests for issue #169 --- test/val/div-char-char.c | 86 ++++++++++++++++++++++++ test/val/div-common.h | 52 +++++++++++++++ test/val/div-int-int.c | 114 +++++++++++++++++++++++++++++++ test/val/div-long-long.c | 141 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 393 insertions(+) create mode 100644 test/val/div-char-char.c create mode 100644 test/val/div-common.h create mode 100644 test/val/div-int-int.c create mode 100644 test/val/div-long-long.c diff --git a/test/val/div-char-char.c b/test/val/div-char-char.c new file mode 100644 index 000000000..aa86bcd19 --- /dev/null +++ b/test/val/div-char-char.c @@ -0,0 +1,86 @@ +#include <stdint.h> +#include <stdio.h> +#include "div-common.h" + +int res = 0; + +/* we check A_8 and B_8 signed */ +#define TEST(_n,_a,_b,_r) TEST_AB_8(_n,_a,_b,_r) + +#define DO_TEST_A(_n) res += test##_n##a() +#define DO_TEST_B(_n) res += test##_n##b() + +/* arbitrary values */ +TEST(1, 1, 8, 0) +TEST(2, -1, 8, 0) +TEST(3, 1, -8, 0) +TEST(4, -1, -8, 0) +TEST(5, 8, 1, 8) +TEST(6, -8, 1, -8) +TEST(7, 8, -1, -8) +TEST(8, -8, -1, 8) + +TEST(11, 32, 64, 0) +TEST(12, -32, 64, 0) +TEST(13, 32, -64, 0) +TEST(14, -32, -64, 0) +TEST(15, 64, 32, 2) +TEST(16, -64, 32, -2) +TEST(17, 64, -32, -2) +TEST(18, -64, -32, 2) + +/* +128 can't be tested for 8-bit signed char */ +TEST(101, 127, -128, 0) +TEST(102, -127, -128, 0) +TEST(103, -128, -128, 1) + +int main(void) +{ + /* check if the result is correct */ + DO_TEST_A(1); + DO_TEST_A(2); + DO_TEST_A(3); + DO_TEST_A(4); + DO_TEST_A(5); + DO_TEST_A(6); + DO_TEST_A(7); + DO_TEST_A(8); + + DO_TEST_A(11); + DO_TEST_A(12); + DO_TEST_A(13); + DO_TEST_A(14); + DO_TEST_A(15); + DO_TEST_A(16); + DO_TEST_A(17); + DO_TEST_A(18); + + DO_TEST_A(101); + DO_TEST_A(102); + DO_TEST_A(103); + + /* check if the results are equal */ + DO_TEST_B(1); + DO_TEST_B(2); + DO_TEST_B(3); + DO_TEST_B(4); + DO_TEST_B(5); + DO_TEST_B(6); + DO_TEST_B(7); + DO_TEST_B(8); + + DO_TEST_B(11); + DO_TEST_B(12); + DO_TEST_B(13); + DO_TEST_B(14); + DO_TEST_B(15); + DO_TEST_B(16); + DO_TEST_B(17); + DO_TEST_B(18); + + DO_TEST_B(101); + DO_TEST_B(102); + DO_TEST_B(103); + + return res; +} diff --git a/test/val/div-common.h b/test/val/div-common.h new file mode 100644 index 000000000..b67de54dc --- /dev/null +++ b/test/val/div-common.h @@ -0,0 +1,52 @@ +#ifndef DIV_COMMON_H +#define DIV_COMMON_H + +/* check if the result is correct */ +#define TEST_A_T(type, _n,_a,_b,_r) \ + int test##_n##a(void) { \ + typedef type int_t; \ + int_t a = ((int_t)_a), b = ((int_t)_b); \ + if (((a/((int_t)_b)) == ((int_t)_r)) && ((a/b) == ((int_t)_r))) { \ + return 0; \ + } else { \ + printf("%d\tincorrect: a/%ld = %ld, a/b = %ld\n\texpected: %ld/%ld = %ld\n", \ + (_n), (long)((int_t)_b), (long)(a/((int_t)_b)), (long)(a/b), (long)((int_t)_a), (long)((int_t)_b), (long)((int_t)_r)); \ + return 1; \ + } \ + } + +/* check if the results are equal */ +#define TEST_B_T(type, _n,_a,_b,_r) \ + int test##_n##b(void) { \ + typedef type int_t; \ + int_t a = ((int_t)_a), b = ((int_t)_b); \ + if (((a/((int_t)_b)) == (a/b))) { \ + return 0; \ + } else { \ + printf("%d\tnot equal: %ld != %ld, a = %ld, b = %ld\n\texpected: %ld/%ld = %ld\n", \ + (_n), (long)(a/((int_t)_b)), (long)(a/b), (long)(a), (long)(b), (long)((int_t)_a), (long)((int_t)_b), (long)((int_t)_r)); \ + return 1; \ + } \ + } + +#define TEST_A_8(_n,_a,_b,_r) TEST_A_T(int8_t, _n,_a,_b,_r) +#define TEST_B_8(_n,_a,_b,_r) TEST_B_T(int8_t, _n,_a,_b,_r) +#define TEST_A_16(_n,_a,_b,_r) TEST_A_T(int16_t, _n,_a,_b,_r) +#define TEST_B_16(_n,_a,_b,_r) TEST_B_T(int16_t, _n,_a,_b,_r) +#define TEST_A_32(_n,_a,_b,_r) TEST_A_T(int32_t, _n,_a,_b,_r) +#define TEST_B_32(_n,_a,_b,_r) TEST_B_T(int32_t, _n,_a,_b,_r) + +/* A and B */ +#define TEST_AB_8(_n,_a,_b,_r) \ + TEST_A_8(_n,_a,_b,_r) \ + TEST_B_8(_n,_a,_b,_r) + +#define TEST_AB_16(_n,_a,_b,_r) \ + TEST_A_16(_n,_a,_b,_r) \ + TEST_B_16(_n,_a,_b,_r) + +#define TEST_AB_32(_n,_a,_b,_r) \ + TEST_A_32(_n,_a,_b,_r) \ + TEST_B_32(_n,_a,_b,_r) + +#endif diff --git a/test/val/div-int-int.c b/test/val/div-int-int.c new file mode 100644 index 000000000..efcb12a48 --- /dev/null +++ b/test/val/div-int-int.c @@ -0,0 +1,114 @@ +#include <stdint.h> +#include <stdio.h> +#include "div-common.h" + +int res = 0; + +/* we check A_16 and B_16 signed */ +#define TEST(_n,_a,_b,_r) TEST_AB_16(_n,_a,_b,_r) + +#define DO_TEST_A(_n) res += test##_n##a() +#define DO_TEST_B(_n) res += test##_n##b() + +/* arbitrary values */ +TEST(1, 1, 8, 0) +TEST(2, -1, 8, 0) +TEST(3, 1, -8, 0) +TEST(4, -1, -8, 0) +TEST(5, 8, 1, 8) +TEST(6, -8, 1, -8) +TEST(7, 8, -1, -8) +TEST(8, -8, -1, 8) + +TEST(11, 2048, 512, 4) +TEST(12, -2048, 512, -4) +TEST(13, 2048, -512, -4) +TEST(14, -2048, -512, 4) +TEST(15, 512, 2048, 0) +TEST(16, -512, 2048, 0) +TEST(17, 512, -2048, 0) +TEST(18, -512, -2048, 0) + +/* values that are around min/max of the type(s) */ +TEST(101, 127, 128, 0) +TEST(102, -127, 128, 0) +TEST(103, 127, -128, 0) +TEST(104, -127, -128, 0) +TEST(105, 128, 128, 1) +TEST(106, 128, -128, -1) +TEST(107, -128, 128, -1) +TEST(108, -128, -128, 1) + +/* +32768 can't be tested for 16-bit signed short */ +TEST(201, 32767L, -32768L, 0) +TEST(202, 32767L, -32768L, 0) +TEST(203, -32768L, -32768L, 1) + +int main(void) +{ + /* check if the result is correct */ + DO_TEST_A(1); + DO_TEST_A(2); + DO_TEST_A(3); + DO_TEST_A(4); + DO_TEST_A(5); + DO_TEST_A(6); + DO_TEST_A(7); + DO_TEST_A(8); + + DO_TEST_A(11); + DO_TEST_A(12); + DO_TEST_A(13); + DO_TEST_A(14); + DO_TEST_A(15); + DO_TEST_A(16); + DO_TEST_A(17); + DO_TEST_A(18); + + DO_TEST_A(101); + DO_TEST_A(102); + DO_TEST_A(103); + DO_TEST_A(104); + DO_TEST_A(105); + DO_TEST_A(106); + DO_TEST_A(107); + DO_TEST_A(108); + + DO_TEST_A(201); + DO_TEST_A(202); + DO_TEST_A(203); + + /* check if the results are equal */ + DO_TEST_B(1); + DO_TEST_B(2); + DO_TEST_B(3); + DO_TEST_B(4); + DO_TEST_B(5); + DO_TEST_B(6); + DO_TEST_B(7); + DO_TEST_B(8); + + DO_TEST_B(11); + DO_TEST_B(12); + DO_TEST_B(13); + DO_TEST_B(14); + DO_TEST_B(15); + DO_TEST_B(16); + DO_TEST_B(17); + DO_TEST_B(18); + + DO_TEST_B(101); + DO_TEST_B(102); + DO_TEST_B(103); + DO_TEST_B(104); + DO_TEST_B(105); + DO_TEST_B(106); + DO_TEST_B(107); + DO_TEST_B(108); + + DO_TEST_B(201); + DO_TEST_B(202); + DO_TEST_B(203); + + return res; +} diff --git a/test/val/div-long-long.c b/test/val/div-long-long.c new file mode 100644 index 000000000..d2553e3c3 --- /dev/null +++ b/test/val/div-long-long.c @@ -0,0 +1,141 @@ +#include <stdint.h> +#include <stdio.h> +#include "div-common.h" + +int res = 0; + +/* we check A_32 and B_32 signed */ +#define TEST(_n,_a,_b,_r) TEST_AB_32(_n,_a,_b,_r) + +#define DO_TEST_A(_n) res += test##_n##a() +#define DO_TEST_B(_n) res += test##_n##b() + +/* arbitrary values */ +TEST(1, 1, 8, 0) +TEST(2, -1, 8, 0) +TEST(3, 1, -8, 0) +TEST(4, -1, -8, 0) +TEST(5, 8, 1, 8) +TEST(6, -8, 1, -8) +TEST(7, 8, -1, -8) +TEST(8, -8, -1, 8) + +TEST(11, 2048, 512, 4) +TEST(12, -2048, 512, -4) +TEST(13, 2048, -512, -4) +TEST(14, -2048, -512, 4) +TEST(15, 512, 2048, 0) +TEST(16, -512, 2048, 0) +TEST(17, 512, -2048, 0) +TEST(18, -512, -2048, 0) + +/* values that are around min/max of the type(s) */ +TEST(101, 127, 128, 0) +TEST(102, -127, 128, 0) +TEST(103, 127, -128, 0) +TEST(104, -127, -128, 0) +TEST(105, 128, 128, 1) +TEST(106, 128, -128, -1) +TEST(107, -128, 128, -1) +TEST(108, -128, -128, 1) + +TEST(201, 32767L, 32768L, 0) +TEST(202, -32767L, 32768L, 0) +TEST(203, 32767L, -32768L, 0) +TEST(204, 32767L, -32768L, 0) +TEST(205, 32768L, 32768L, 1) +TEST(206, 32768L, -32768L, -1) +TEST(207, -32768L, 32768L, -1) +TEST(208, -32768L, -32768L, 1) + +/* +2147483648 can't be tested for 32-bit signed long */ +TEST(401, 2147483647UL, -2147483648UL, 0) +TEST(402, -2147483647UL, -2147483648UL, 0) +TEST(403, -2147483648UL, -2147483648UL, 1) + +int main(void) +{ + /* check if the result is correct */ + DO_TEST_A(1); + DO_TEST_A(2); + DO_TEST_A(3); + DO_TEST_A(4); + DO_TEST_A(5); + DO_TEST_A(6); + DO_TEST_A(7); + DO_TEST_A(8); + + DO_TEST_A(11); + DO_TEST_A(12); + DO_TEST_A(13); + DO_TEST_A(14); + DO_TEST_A(15); + DO_TEST_A(16); + DO_TEST_A(17); + DO_TEST_A(18); + + DO_TEST_A(101); + DO_TEST_A(102); + DO_TEST_A(103); + DO_TEST_A(104); + DO_TEST_A(105); + DO_TEST_A(106); + DO_TEST_A(107); + DO_TEST_A(108); + + DO_TEST_A(201); + DO_TEST_A(202); + DO_TEST_A(203); + DO_TEST_A(204); + DO_TEST_A(205); + DO_TEST_A(206); + DO_TEST_A(207); + DO_TEST_A(208); + + DO_TEST_A(401); + DO_TEST_A(402); + DO_TEST_A(403); + + /* check if the results are equal */ + DO_TEST_B(1); + DO_TEST_B(2); + DO_TEST_B(3); + DO_TEST_B(4); + DO_TEST_B(5); + DO_TEST_B(6); + DO_TEST_B(7); + DO_TEST_B(8); + + DO_TEST_B(11); + DO_TEST_B(12); + DO_TEST_B(13); + DO_TEST_B(14); + DO_TEST_B(15); + DO_TEST_B(16); + DO_TEST_B(17); + DO_TEST_B(18); + + DO_TEST_B(101); + DO_TEST_B(102); + DO_TEST_B(103); + DO_TEST_B(104); + DO_TEST_B(105); + DO_TEST_B(106); + DO_TEST_B(107); + DO_TEST_B(108); + + DO_TEST_B(201); + DO_TEST_B(202); + DO_TEST_B(203); + DO_TEST_B(204); + DO_TEST_B(205); + DO_TEST_B(206); + DO_TEST_B(207); + DO_TEST_B(208); + + DO_TEST_B(401); + DO_TEST_B(402); + DO_TEST_B(403); + + return res; +} From 5925a7f8eec335b5c566c93c345ab044e1fc8b23 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 9 Jul 2020 16:16:46 +0200 Subject: [PATCH 0192/2710] test for issue #1077 --- test/todo/bug1077.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 test/todo/bug1077.c diff --git a/test/todo/bug1077.c b/test/todo/bug1077.c new file mode 100644 index 000000000..2fb3ef168 --- /dev/null +++ b/test/todo/bug1077.c @@ -0,0 +1,31 @@ +/* bug #1077 - Wrong code: a non-array constant address with a non-constant subscript */ + +#include <stdlib.h> +#include <stdio.h> + +int test1(void) +{ + int a = 0; + (&a)[a] = 42; + return a; +} +int test2(void) +{ + int a = 0; + int b = 0; + (&a)[b] = 42; + return a; +} + +int main(void) +{ + int res, ret = EXIT_SUCCESS; + res = test1(); + printf("%d\n", res); + if (res != 42) ret = EXIT_FAILURE; + res = test2(); + printf("%d\n", res); + if (res != 42) ret = EXIT_FAILURE; + + return ret; +} From ff18218b0a42cc07e42869622fb395d18301ca33 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 9 Jul 2020 16:17:16 +0200 Subject: [PATCH 0193/2710] test for issue #170 --- test/todo/bug170.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 test/todo/bug170.c diff --git a/test/todo/bug170.c b/test/todo/bug170.c new file mode 100644 index 000000000..ac54d54d8 --- /dev/null +++ b/test/todo/bug170.c @@ -0,0 +1,40 @@ +/* bug #170 - Wrong implicit conversion of integers */ + +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> + +int main(void) +{ + uint8_t c = 2; + uint32_t u = 2; + int16_t a = -2; + int32_t l = -2; + + /* Generated code should use tosmulax but uses tosumulax */ + int16_t r = c * a; + /* Generated code should use tosmuleax but uses tosumuleax */ + int32_t lr = u * l; + + int32_t n = -95; + uint16_t d = 3; + int16_t r1 = n / d; // produces 21813 instead of -31 + + int16_t r2 = n / (int32_t) d; // workaround + + printf("r: %d (-4)\n", r); +#ifdef REFERENCE + printf("lr: %d (-4)\n", lr); +#else + printf("lr: %ld (-4)\n", lr); +#endif + printf("r1: %d (-31)\n", r1); + printf("r2: %d (-31)\n", r2); + + if (r != -4) { return EXIT_FAILURE; } + if (lr != -4) { return EXIT_FAILURE; } + if (r1 != -31) { return EXIT_FAILURE; } + if (r2 != -31) { return EXIT_FAILURE; } + + return EXIT_SUCCESS; +} From 2428285694099da27a4a4cff1ed9c446ca2d4f9e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 9 Jul 2020 16:17:31 +0200 Subject: [PATCH 0194/2710] test for issue #327 --- test/todo/bug327.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 test/todo/bug327.c diff --git a/test/todo/bug327.c b/test/todo/bug327.c new file mode 100644 index 000000000..f6a79962b --- /dev/null +++ b/test/todo/bug327.c @@ -0,0 +1,34 @@ +/* bug #327 - Promoting u8 to s16 gives wrong result */ + +#include <stdio.h> +#include <stdint.h> + +static const uint8_t arr[2] = { + 0, + 255 +}; + +static int16_t get16() { + return -arr[1]; +} + +static int16_t get16_2() { + return -(int16_t) arr[1]; +} + +char res = 0; + +int main() { + + printf("Value %d, should be -255\n", get16()); + printf("Value %d, should be -255\n", get16_2()); + + if (get16() != -255) { + res++; + } + if (get16_2() != -255) { + res++; + } + + return res; +} From 579b50f0c5f068d0194fd6f2a19f7054b7c6945a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 9 Jul 2020 16:18:08 +0200 Subject: [PATCH 0195/2710] test for issue #927 --- test/todo/bug927.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 test/todo/bug927.c diff --git a/test/todo/bug927.c b/test/todo/bug927.c new file mode 100644 index 000000000..e0f916e66 --- /dev/null +++ b/test/todo/bug927.c @@ -0,0 +1,47 @@ + +/* bug #927: format specifiers related to leading zeros do not work as expected */ + +/* expected output: +0023 +0023 +-0023 +-023 +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +char b1[10]; +char b2[10]; +char b3[10]; +char b4[10]; + +int main(void) { + printf("%.4d\n", 23); + printf("%04d\n", 23); + printf("%.4d\n", -23); + printf("%04d\n\n", -23); + + sprintf(b1, "%.4d", 23); + sprintf(b2, "%04d", 23); + sprintf(b3, "%.4d", -23); + sprintf(b4, "%04d", -23); + + printf("%s\n", b1); + printf("%s\n", b2); + printf("%s\n", b3); + printf("%s\n\n", b4); + + printf("%d\n", strcmp(b1, "0023")); + printf("%d\n", strcmp(b2, "0023")); + printf("%d\n", strcmp(b3, "-0023")); + printf("%d\n", strcmp(b4, "-023")); + + if(strcmp(b1, "0023") != 0) return EXIT_FAILURE; + if(strcmp(b2, "0023") != 0) return EXIT_FAILURE; + if(strcmp(b3, "-0023") != 0) return EXIT_FAILURE; + if(strcmp(b4, "-023") != 0) return EXIT_FAILURE; + + return EXIT_SUCCESS; +} From f5afc75cbdb5cba180467185f1d8a45de6e3a005 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Thu, 9 Jul 2020 21:18:42 +0200 Subject: [PATCH 0196/2710] ar65/LibClose: Include filename in error messages ``` ar65: Error: Problem deleting temporary library file '../lib/apple2enh.lib.temp': No such file or directory ``` is the error I'm getting with `make -j 19` when trying to debug #1080. --- src/ar65/library.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ar65/library.c b/src/ar65/library.c index 4d18168d8..08fdeb563 100644 --- a/src/ar65/library.c +++ b/src/ar65/library.c @@ -399,9 +399,11 @@ void LibClose (void) Error ("Problem closing '%s': %s", LibName, strerror (errno)); } if (NewLib && fclose (NewLib) != 0) { - Error ("Problem closing temporary library file: %s", strerror (errno)); + Error ("Problem closing temporary library file '%s': %s", + NewLibName, strerror (errno)); } if (NewLibName && remove (NewLibName) != 0) { - Error ("Problem deleting temporary library file: %s", strerror (errno)); + Error ("Problem deleting temporary library file '%s': %s", + NewLibName, strerror (errno)); } } From 878e4a57c8197485d02e1be0e90a7144a37e4203 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@users.noreply.github.com> Date: Thu, 2 Jul 2020 08:57:11 +0200 Subject: [PATCH 0197/2710] Make Makefiles more -j friendly Add .$1.$2 to outputs missing them. --- test/Makefile | 2 -- test/asm/Makefile | 3 +++ test/misc/Makefile | 8 ++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/test/Makefile b/test/Makefile index c85883517..fc1ac246c 100644 --- a/test/Makefile +++ b/test/Makefile @@ -16,8 +16,6 @@ WORKDIR = ../testwrk all: dotests -.NOTPARALLEL: - dotests: mostlyclean continue continue: diff --git a/test/asm/Makefile b/test/asm/Makefile index 93210aaee..62f2f8dd1 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -41,6 +41,9 @@ CPUDETECT_BINS = $(foreach cpu,$(CPUDETECT_CPUS),$(WORKDIR)/$(cpu)-cpudetect.bin all: $(OPCODE_BINS) $(CPUDETECT_BINS) +# cpudetect.o is written by multiple rules +.NOTPARALLEL: + $(WORKDIR): $(call MKDIR,$(WORKDIR)) diff --git a/test/misc/Makefile b/test/misc/Makefile index 15999ba3c..1d6b2b9d2 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -69,13 +69,13 @@ $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(WORKDIR)/limits.$1.$2.prg: limits.c $(DIFF) $(if $(QUIET),echo misc/limits.$1.$2.prg) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/limits.$1.out - $(DIFF) $(WORKDIR)/limits.$1.out limits.ref + $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/limits.$1.$2.out + $(DIFF) $(WORKDIR)/limits.$1.$2.out limits.ref $(WORKDIR)/goto.$1.$2.prg: goto.c $(DIFF) $(if $(QUIET),echo misc/goto.$1.$2.prg) - $(CL65) -t sim$2 -$1 -o $$@ $$< 2>$(WORKDIR)/goto.$1.out - $(DIFF) $(WORKDIR)/goto.$1.out goto.ref + $(CL65) -t sim$2 -$1 -o $$@ $$< 2>$(WORKDIR)/goto.$1.$2.out + $(DIFF) $(WORKDIR)/goto.$1.$2.out goto.ref # the rest are tests that fail currently for one reason or another $(WORKDIR)/fields.$1.$2.prg: fields.c | $(WORKDIR) From 3999f2ad75e053dbddff08b1a98204b9ec6e4ce3 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Fri, 10 Jul 2020 11:48:47 +0200 Subject: [PATCH 0198/2710] Move .NOTPARALLEL closer to rule that needs it --- test/asm/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/asm/Makefile b/test/asm/Makefile index 62f2f8dd1..a0825574c 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -41,9 +41,6 @@ CPUDETECT_BINS = $(foreach cpu,$(CPUDETECT_CPUS),$(WORKDIR)/$(cpu)-cpudetect.bin all: $(OPCODE_BINS) $(CPUDETECT_BINS) -# cpudetect.o is written by multiple rules -.NOTPARALLEL: - $(WORKDIR): $(call MKDIR,$(WORKDIR)) @@ -61,6 +58,9 @@ endef # OPCODE_template $(foreach cpu,$(OPCODE_CPUS),$(eval $(call OPCODE_template,$(cpu)))) +# cpudetect.o is written by multiple rules +.NOTPARALLEL: + define CPUDETECT_template $(WORKDIR)/$1-cpudetect.bin: cpudetect.s $(DIFF) From df975704719a92ba58294c8b2c12d14634495078 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Fri, 10 Jul 2020 11:49:19 +0200 Subject: [PATCH 0199/2710] Set .NOTPARALLEL in test/misc and test/val The cl65 intermediate files stomp each other in these directories. --- test/misc/Makefile | 5 +++++ test/val/Makefile | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/test/misc/Makefile b/test/misc/Makefile index 1d6b2b9d2..cda0c789a 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -50,6 +50,11 @@ TESTS += $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).65c02. all: $(TESTS) +# The same input file is processed with different cl65 args, +# but cl65 uses the input file name to make the temp file name, +# and they stomp each other. +.NOTPARALLEL: + $(WORKDIR): $(call MKDIR,$(WORKDIR)) diff --git a/test/val/Makefile b/test/val/Makefile index df1d314e4..417c0b6c8 100644 --- a/test/val/Makefile +++ b/test/val/Makefile @@ -41,6 +41,11 @@ TESTS += $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).65c02. all: $(TESTS) +# The same input file is processed with different cl65 args, +# but cl65 uses the input file name to make the temp file name, +# and they stomp each other. +.NOTPARALLEL: + $(WORKDIR): $(call MKDIR,$(WORKDIR)) From 695b1b01d8deaaf2c4a9122681e95b266a2688f1 Mon Sep 17 00:00:00 2001 From: compyx <b.wassink@ziggo.nl> Date: Fri, 10 Jul 2020 19:35:23 +0200 Subject: [PATCH 0200/2710] C64 soft80 conio: save 6 bytes in `firstinit` As a bonus, save 6 cycles. --- libsrc/c64/soft80_conio.s | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/libsrc/c64/soft80_conio.s b/libsrc/c64/soft80_conio.s index 48039d288..355ae51a0 100644 --- a/libsrc/c64/soft80_conio.s +++ b/libsrc/c64/soft80_conio.s @@ -67,22 +67,20 @@ firstinit: inc soft80_first_init - lda #<soft80_charset + ; save 6 bytes due to soft80_charset, soft80_lo_charset and + ; soft80_hi_charset being page-aligned. + ldy #0 ldx #>soft80_charset - sta ptr1 + sty ptr1 stx ptr1+1 - lda #<soft80_lo_charset ldx #>soft80_lo_charset - sta ptr2 + sty ptr2 stx ptr2+1 - lda #<soft80_hi_charset ldx #>soft80_hi_charset - sta ptr3 + sty ptr3 stx ptr3+1 ldx #4 -@l2: - ldy #0 @l1: lda (ptr1),y sta (ptr2),y @@ -97,17 +95,17 @@ firstinit: inc ptr2+1 inc ptr3+1 dex - bne @l2 + bne @l1 ; copy the kplot tables to ram under I/O ;ldx #0 ; is 0 -@l3: +@l2: lda soft80_tables_data_start,x sta soft80_bitmapxlo,x lda soft80_tables_data_start + (soft80_tables_data_end - soft80_tables_data_start - $0100),x sta soft80_bitmapxlo + (soft80_tables_data_end - soft80_tables_data_start - $0100),x inx - bne @l3 + bne @l2 pla sta $01 From fb7996b0ce66be7675cb856d53780e73b5f3d5fd Mon Sep 17 00:00:00 2001 From: compyx <b.wassink@ziggo.nl> Date: Fri, 10 Jul 2020 19:56:34 +0200 Subject: [PATCH 0201/2710] Revert "C64 soft80 conio: save 6 bytes in `firstinit`" This reverts commit 943e68be6a3b48529540e8f86061f171634f80f9. --- libsrc/c64/soft80_conio.s | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/libsrc/c64/soft80_conio.s b/libsrc/c64/soft80_conio.s index 355ae51a0..48039d288 100644 --- a/libsrc/c64/soft80_conio.s +++ b/libsrc/c64/soft80_conio.s @@ -67,20 +67,22 @@ firstinit: inc soft80_first_init - ; save 6 bytes due to soft80_charset, soft80_lo_charset and - ; soft80_hi_charset being page-aligned. - ldy #0 + lda #<soft80_charset ldx #>soft80_charset - sty ptr1 + sta ptr1 stx ptr1+1 + lda #<soft80_lo_charset ldx #>soft80_lo_charset - sty ptr2 + sta ptr2 stx ptr2+1 + lda #<soft80_hi_charset ldx #>soft80_hi_charset - sty ptr3 + sta ptr3 stx ptr3+1 ldx #4 +@l2: + ldy #0 @l1: lda (ptr1),y sta (ptr2),y @@ -95,17 +97,17 @@ firstinit: inc ptr2+1 inc ptr3+1 dex - bne @l1 + bne @l2 ; copy the kplot tables to ram under I/O ;ldx #0 ; is 0 -@l2: +@l3: lda soft80_tables_data_start,x sta soft80_bitmapxlo,x lda soft80_tables_data_start + (soft80_tables_data_end - soft80_tables_data_start - $0100),x sta soft80_bitmapxlo + (soft80_tables_data_end - soft80_tables_data_start - $0100),x inx - bne @l2 + bne @l3 pla sta $01 From e45e57d7ce95ffce2b39f7bb5bffc974782c93a1 Mon Sep 17 00:00:00 2001 From: compyx <b.wassink@ziggo.nl> Date: Fri, 10 Jul 2020 20:08:44 +0200 Subject: [PATCH 0202/2710] C64 soft80 conio: save 4 bytes in `firstinit` Also save 6 cycles as a very small bonus. --- libsrc/c64/soft80_conio.s | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/libsrc/c64/soft80_conio.s b/libsrc/c64/soft80_conio.s index 48039d288..4291c2078 100644 --- a/libsrc/c64/soft80_conio.s +++ b/libsrc/c64/soft80_conio.s @@ -67,22 +67,21 @@ firstinit: inc soft80_first_init + ; save 4 bytes due to soft80_lo_charset and soft80_hi_charset being + ; page-aligned. + ldy #0 lda #<soft80_charset ldx #>soft80_charset sta ptr1 stx ptr1+1 - lda #<soft80_lo_charset ldx #>soft80_lo_charset - sta ptr2 + sty ptr2 stx ptr2+1 - lda #<soft80_hi_charset ldx #>soft80_hi_charset - sta ptr3 + sty ptr3 stx ptr3+1 ldx #4 -@l2: - ldy #0 @l1: lda (ptr1),y sta (ptr2),y @@ -97,17 +96,17 @@ firstinit: inc ptr2+1 inc ptr3+1 dex - bne @l2 + bne @l1 ; copy the kplot tables to ram under I/O ;ldx #0 ; is 0 -@l3: +@l2: lda soft80_tables_data_start,x sta soft80_bitmapxlo,x lda soft80_tables_data_start + (soft80_tables_data_end - soft80_tables_data_start - $0100),x sta soft80_bitmapxlo + (soft80_tables_data_end - soft80_tables_data_start - $0100),x inx - bne @l3 + bne @l2 pla sta $01 From 2c4dd5decf27ad2c0e10df920e63d9f9fc03cb4a Mon Sep 17 00:00:00 2001 From: compyx <b.wassink@ziggo.nl> Date: Sat, 11 Jul 2020 09:39:21 +0200 Subject: [PATCH 0203/2710] Shorten comment as requested --- libsrc/c64/soft80_conio.s | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libsrc/c64/soft80_conio.s b/libsrc/c64/soft80_conio.s index 4291c2078..7036f384d 100644 --- a/libsrc/c64/soft80_conio.s +++ b/libsrc/c64/soft80_conio.s @@ -67,8 +67,7 @@ firstinit: inc soft80_first_init - ; save 4 bytes due to soft80_lo_charset and soft80_hi_charset being - ; page-aligned. + ; soft80_lo_charset and soft80_hi_charset are page-aligned ldy #0 lda #<soft80_charset ldx #>soft80_charset From 381a32d9aa44fc49c9d34e812212405bde24f4af Mon Sep 17 00:00:00 2001 From: compyx <b.wassink@ziggo.nl> Date: Sat, 11 Jul 2020 13:18:14 +0200 Subject: [PATCH 0204/2710] C64 soft80-conio cgetc: save 14 cycles in `invertcursor` By 'inverting' the loop, we can save 16 cycles by removing the `cpy #8`, saving 16 cycles. But we need an extra `ldy #7` at the start of the loop, so the total cycles saved is 14. Code size doesn't increase due to the addition of the `ldy #7` negating the removal of the `cpy #xx`. --- libsrc/c64/soft80_cgetc.s | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/libsrc/c64/soft80_cgetc.s b/libsrc/c64/soft80_cgetc.s index 05e9e5b47..aa12cd8ca 100644 --- a/libsrc/c64/soft80_cgetc.s +++ b/libsrc/c64/soft80_cgetc.s @@ -46,17 +46,16 @@ invertcursor: lda #$34 sta $01 - ldy #$00 jsr setcolor ldx soft80_internal_cursorxlsb + ldy #7 @lp1: lda (SCREEN_PTR),y eor nibble,x sta (SCREEN_PTR),y - iny - cpy #8 - bne @lp1 + dey + bpl @lp1 pla sta $01 ; enable I/O @@ -67,7 +66,7 @@ invertcursor: ; shown using the current textcolor without disturbing the "color voodoo" ; in soft80_cputc setcolor: - ;ldy #0 ; is 0 + ldy #0 bcs @set ; restore old value lda tmp1 From 7d652d42dc7616cf4024aff301e6fc257ee4aa0a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 2 Jul 2020 10:30:02 +0800 Subject: [PATCH 0205/2710] Added a warning on promoting a decimal constant without a 'u'/'U' suffix to unsigned long. --- src/cc65/scanner.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 3e829aabb..91abd332d 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -530,10 +530,12 @@ static void NumericConst (void) if (!IsFloat) { unsigned Types; - int HaveSuffix; + unsigned WarnTypes = 0; - /* Check for a suffix and determine the possible types */ - HaveSuffix = 1; + /* Check for a suffix and determine the possible types. It is always + ** possible to convert the data to unsigned long even if the IT_ULONG + ** flag were not set, but we are not doing that. + */ if (toupper (CurC) == 'U') { /* Unsigned type */ NextChar (); @@ -548,17 +550,18 @@ static void NumericConst (void) NextChar (); if (toupper (CurC) != 'U') { Types = IT_LONG | IT_ULONG; + WarnTypes = IT_ULONG; } else { NextChar (); Types = IT_ULONG; } } else { - HaveSuffix = 0; if (Prefix == 10) { /* Decimal constants are of any type but uint */ Types = IT_INT | IT_LONG | IT_ULONG; + WarnTypes = IT_LONG | IT_ULONG; } else { - /* Octal or hex constants are of any type */ + /* Binary, octal or hex constants can be of any type */ Types = IT_INT | IT_UINT | IT_LONG | IT_ULONG; } } @@ -568,11 +571,14 @@ static void NumericConst (void) /* Out of range for int */ Types &= ~IT_INT; /* If the value is in the range 0x8000..0xFFFF, unsigned int is not - ** allowed, and we don't have a type specifying suffix, emit a - ** warning, because the constant is of type long. + ** allowed, and we don't have a long type specifying suffix, emit a + ** warning, because the constant is of type long while the user + ** might expect an unsigned int. */ - if (IVal <= 0xFFFF && (Types & IT_UINT) == 0 && !HaveSuffix) { - Warning ("Constant is long"); + if (IVal <= 0xFFFF && + (Types & IT_UINT) == 0 && + (WarnTypes & IT_LONG) != 0) { + Warning ("Integer constant is long"); } } if (IVal > 0xFFFF) { @@ -582,6 +588,15 @@ static void NumericConst (void) if (IVal > 0x7FFFFFFF) { /* Out of range for long int */ Types &= ~IT_LONG; + /* If the value is in the range 0x80000000..0xFFFFFFFF, decimal, + ** and we have no unsigned type specifying suffix, emit a warning, + ** because the constant is of type unsigned long while the user + ** might expect a signed integer constant, especially if there is + ** a preceding unary op or when it is used in constant calculation. + */ + if (WarnTypes & IT_ULONG) { + Warning ("Integer constant is unsigned long"); + } } /* Now set the type string to the smallest type in types */ From 727040d1ac77bff60628b87256c7bb8054fd4c02 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 12 Jul 2020 12:18:55 +0800 Subject: [PATCH 0206/2710] Comment fix. --- src/cc65/scanner.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 91abd332d..5040cdf08 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -561,7 +561,7 @@ static void NumericConst (void) Types = IT_INT | IT_LONG | IT_ULONG; WarnTypes = IT_LONG | IT_ULONG; } else { - /* Binary, octal or hex constants can be of any type */ + /* Binary, octal and hex constants can be of any type */ Types = IT_INT | IT_UINT | IT_LONG | IT_ULONG; } } From 04cc463452de739262b91ef1fa4757ad249d6762 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 12 Jul 2020 22:19:38 +0200 Subject: [PATCH 0207/2710] Implemented some CONIO peek functions. Please refer to https://github.com/cc65/cc65/pull/532 for background info. I wrote in https://sourceforge.net/p/cc65/mailman/message/35873183/ === cputs() wraps to the next line if the strings is too long to fit in the current line. I don't know if it's worth the effort to allow cpeeks() to continue reading from the next line. I'd like to discuss this aspect with the actual implementers. === This is still as unclear today as it was when I wrote the above. Therefore this change just doesn't add cpeeks() at all. Since https://github.com/cc65/cc65/commit/f8c6c58373426551eed096dcfab4eab137fc0430 the Apple II CONIO implementation doesn't "need" revers() anymore - meaning that (nearly) every possible value can be placed in VRAM with a straight cputc() (without the need for a previous revers(1)). The implementation of cpeekc() leverages that cputc() ability by always returning the value that can be fed into cputc() without a previous revers(1). Accordingly, cpeekrevers() always returns 0. So after the sequence revers(1); cputc(x); a cpeekc() will return a value different from x! However, I don't see this behavior braking the cpeekc() contract. I see the cpeekc() contract being defined by the sequence textcolor(cpeekcolor()); revers(cpeekrevers()); cputc(cpeekc()); placing the very same value in VRAM that there was before. And that contract is fulfilled. --- include/apple2.h | 2 ++ include/conio.h | 11 +++++++---- libsrc/apple2/cpeekc.s | 28 ++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 libsrc/apple2/cpeekc.s diff --git a/include/apple2.h b/include/apple2.h index dbed3364d..57d7086ce 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -207,6 +207,8 @@ void rebootafterexit (void); #define _textcolor(color) COLOR_WHITE #define _bgcolor(color) COLOR_BLACK #define _bordercolor(color) COLOR_BLACK +#define _cpeekcolor() COLOR_WHITE +#define _cpeekrevers() 0 diff --git a/include/conio.h b/include/conio.h index 72421af86..bac20e3c5 100644 --- a/include/conio.h +++ b/include/conio.h @@ -201,16 +201,19 @@ void __fastcall__ cputhex16 (unsigned val); */ #ifdef _textcolor -# define textcolor(x) _textcolor(x) +# define textcolor(color) _textcolor(color) #endif #ifdef _bgcolor -# define bgcolor(x) _bgcolor(x) +# define bgcolor(color) _bgcolor(color) #endif #ifdef _bordercolor -# define bordercolor(x) _bordercolor(x) +# define bordercolor(color) _bordercolor(color) #endif #ifdef _cpeekcolor -# define cpeekcolor(x) _cpeekcolor(x) +# define cpeekcolor() _cpeekcolor() +#endif +#ifdef _cpeekrevers +# define cpeekrevers() _cpeekrevers() #endif diff --git a/libsrc/apple2/cpeekc.s b/libsrc/apple2/cpeekc.s new file mode 100644 index 000000000..a547f7867 --- /dev/null +++ b/libsrc/apple2/cpeekc.s @@ -0,0 +1,28 @@ +; +; 2020-07-12, Oliver Schmidt +; +; char cpeekc (void); +; + + .export _cpeekc + + .include "apple2.inc" + +_cpeekc: + ldy CH + .ifdef __APPLE2ENH__ + bit RD80VID ; In 80 column mode? + bpl peek ; No, just go ahead + tya + lsr ; Div by 2 + tay + bcs peek ; Odd cols are in main memory + bit HISCR ; Assume SET80COL + .endif +peek: lda (BASL),Y ; Get character + .ifdef __APPLE2ENH__ + bit LOWSCR ; Doesn't hurt in 40 column mode + .endif + eor #$80 ; Invert high bit + ldx #$00 + rts From bcb8b4990726e9add92ae54d70204e49977f50e5 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 12 Jul 2020 23:11:43 +0200 Subject: [PATCH 0208/2710] Removed executable bit. --- libsrc/c128/emd/c128-efnram.s | 0 libsrc/c128/emd/c128-ifnram.s | 0 libsrc/c64/acc_c65_speed.s | 0 libsrc/c64/acc_chameleon_speed.s | 0 libsrc/c64/acc_detect_c65.s | 0 libsrc/c64/acc_detect_chameleon.s | 0 libsrc/c64/acc_detect_turbomaster.s | 0 libsrc/c64/acc_turbomaster_speed.s | 0 libsrc/cbm510/pencalib.c | 0 libsrc/vic20/emd/vic20-georam.s | 0 samples/supervisionhello.c | 0 test/ref/cf.in | 0 test/ref/yacc.in | 0 test/val/add3a.c | 0 test/val/casttochar.c | 0 test/val/cc65141002.c | 0 test/val/cc65141011.c | 0 test/val/cc65141022.c | 0 testcode/lib/accelerator/chameleon-test.c | 0 testcode/lib/accelerator/turbomaster-test.c | 0 20 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 libsrc/c128/emd/c128-efnram.s mode change 100755 => 100644 libsrc/c128/emd/c128-ifnram.s mode change 100755 => 100644 libsrc/c64/acc_c65_speed.s mode change 100755 => 100644 libsrc/c64/acc_chameleon_speed.s mode change 100755 => 100644 libsrc/c64/acc_detect_c65.s mode change 100755 => 100644 libsrc/c64/acc_detect_chameleon.s mode change 100755 => 100644 libsrc/c64/acc_detect_turbomaster.s mode change 100755 => 100644 libsrc/c64/acc_turbomaster_speed.s mode change 100755 => 100644 libsrc/cbm510/pencalib.c mode change 100755 => 100644 libsrc/vic20/emd/vic20-georam.s mode change 100755 => 100644 samples/supervisionhello.c mode change 100755 => 100644 test/ref/cf.in mode change 100755 => 100644 test/ref/yacc.in mode change 100755 => 100644 test/val/add3a.c mode change 100755 => 100644 test/val/casttochar.c mode change 100755 => 100644 test/val/cc65141002.c mode change 100755 => 100644 test/val/cc65141011.c mode change 100755 => 100644 test/val/cc65141022.c mode change 100755 => 100644 testcode/lib/accelerator/chameleon-test.c mode change 100755 => 100644 testcode/lib/accelerator/turbomaster-test.c diff --git a/libsrc/c128/emd/c128-efnram.s b/libsrc/c128/emd/c128-efnram.s old mode 100755 new mode 100644 diff --git a/libsrc/c128/emd/c128-ifnram.s b/libsrc/c128/emd/c128-ifnram.s old mode 100755 new mode 100644 diff --git a/libsrc/c64/acc_c65_speed.s b/libsrc/c64/acc_c65_speed.s old mode 100755 new mode 100644 diff --git a/libsrc/c64/acc_chameleon_speed.s b/libsrc/c64/acc_chameleon_speed.s old mode 100755 new mode 100644 diff --git a/libsrc/c64/acc_detect_c65.s b/libsrc/c64/acc_detect_c65.s old mode 100755 new mode 100644 diff --git a/libsrc/c64/acc_detect_chameleon.s b/libsrc/c64/acc_detect_chameleon.s old mode 100755 new mode 100644 diff --git a/libsrc/c64/acc_detect_turbomaster.s b/libsrc/c64/acc_detect_turbomaster.s old mode 100755 new mode 100644 diff --git a/libsrc/c64/acc_turbomaster_speed.s b/libsrc/c64/acc_turbomaster_speed.s old mode 100755 new mode 100644 diff --git a/libsrc/cbm510/pencalib.c b/libsrc/cbm510/pencalib.c old mode 100755 new mode 100644 diff --git a/libsrc/vic20/emd/vic20-georam.s b/libsrc/vic20/emd/vic20-georam.s old mode 100755 new mode 100644 diff --git a/samples/supervisionhello.c b/samples/supervisionhello.c old mode 100755 new mode 100644 diff --git a/test/ref/cf.in b/test/ref/cf.in old mode 100755 new mode 100644 diff --git a/test/ref/yacc.in b/test/ref/yacc.in old mode 100755 new mode 100644 diff --git a/test/val/add3a.c b/test/val/add3a.c old mode 100755 new mode 100644 diff --git a/test/val/casttochar.c b/test/val/casttochar.c old mode 100755 new mode 100644 diff --git a/test/val/cc65141002.c b/test/val/cc65141002.c old mode 100755 new mode 100644 diff --git a/test/val/cc65141011.c b/test/val/cc65141011.c old mode 100755 new mode 100644 diff --git a/test/val/cc65141022.c b/test/val/cc65141022.c old mode 100755 new mode 100644 diff --git a/testcode/lib/accelerator/chameleon-test.c b/testcode/lib/accelerator/chameleon-test.c old mode 100755 new mode 100644 diff --git a/testcode/lib/accelerator/turbomaster-test.c b/testcode/lib/accelerator/turbomaster-test.c old mode 100755 new mode 100644 From a43cac580ed70559b509227a11556deb6db29b5a Mon Sep 17 00:00:00 2001 From: Olli Savia <ops@iki.fi> Date: Wed, 8 Jul 2020 21:37:39 +0300 Subject: [PATCH 0209/2710] Tiny optimization --- libsrc/vic20/tgi/vic20-hi.s | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/libsrc/vic20/tgi/vic20-hi.s b/libsrc/vic20/tgi/vic20-hi.s index 8dfa46d6b..506de92f7 100644 --- a/libsrc/vic20/tgi/vic20-hi.s +++ b/libsrc/vic20/tgi/vic20-hi.s @@ -261,16 +261,15 @@ PATTERN_SOLID: sta tmp2+1 inx ; (ldx #$00) stx ERROR ; Set to TGI_ERR_OK + clc @NEXT_ROW: ldy #$00 txa - clc adc #$10 @NEXT_COLUMN: sta (tmp2),y - clc adc #ROWS iny cpy #COLS @@ -282,10 +281,8 @@ PATTERN_SOLID: clc adc #COLS sta tmp2 - bcc @L1 - inc tmp2+1 -@L1: inx + inx cpx #ROWS bne @NEXT_ROW From 693e3a710970627baf4ff30bdc6da19b448ab3ad Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 13 Jul 2020 15:12:04 +0200 Subject: [PATCH 0210/2710] added testcase for issue #1048 --- test/misc/bug1048.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 test/misc/bug1048.c diff --git a/test/misc/bug1048.c b/test/misc/bug1048.c new file mode 100644 index 000000000..d022474d6 --- /dev/null +++ b/test/misc/bug1048.c @@ -0,0 +1,15 @@ +/* bug #1048: The following code has two errors: a redeclared enum type and an + undeclared enum type: */ + +#include <stdlib.h> + +// this should NOT compile - but with cc65 it does +enum e { x }; +enum e { y }; + +int f() { return sizeof(enum undeclared); } + +int main(void) +{ + return EXIT_SUCCESS; +} From f5d99106e6610f9cb6bd699aa587c7321ef47074 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 13 Jul 2020 15:12:30 +0200 Subject: [PATCH 0211/2710] added testcase for issue #1075 --- test/misc/bug1075.c | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 test/misc/bug1075.c diff --git a/test/misc/bug1075.c b/test/misc/bug1075.c new file mode 100644 index 000000000..be4cd75f4 --- /dev/null +++ b/test/misc/bug1075.c @@ -0,0 +1,10 @@ +/* bug #1075 Internal compiler error */ + +long rhs; + +int main(void) +{ + /* the whole lhs is errorneously treated as an absolute address (integer + constant) neglecting its dereference */ + return *(char *)0xD77C + rhs; +} From f8873c2508203f4b86954d49e25fffc0fcea51c1 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 13 Jul 2020 15:12:47 +0200 Subject: [PATCH 0212/2710] added testcase for issue #250 --- test/misc/bug250.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 test/misc/bug250.c diff --git a/test/misc/bug250.c b/test/misc/bug250.c new file mode 100644 index 000000000..60f3c633d --- /dev/null +++ b/test/misc/bug250.c @@ -0,0 +1,13 @@ +/* bug #250 - Array size compile-time optimization stops halfway */ + +#include <stdlib.h> + +#define LZO_MAX(a,b) ((a) >= (b) ? (a) : (b)) +unsigned char c[2*4]; +unsigned char b[2*LZO_MAX(8,sizeof(int))]; // this will not compile + +int main(void) +{ + /* FIXME: add some runtime check */ + return EXIT_SUCCESS; +} From bec140143ba6fc043b1901024ce03bf931af517c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 13 Jul 2020 15:13:06 +0200 Subject: [PATCH 0213/2710] added testcase for issue #760 --- test/misc/bug264.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 test/misc/bug264.c diff --git a/test/misc/bug264.c b/test/misc/bug264.c new file mode 100644 index 000000000..a114939a4 --- /dev/null +++ b/test/misc/bug264.c @@ -0,0 +1,62 @@ +/* bug #264 - cc65 fails to warn about a function returning struct */ + +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> + +typedef uint16_t u16; +typedef uint8_t u8; + +typedef struct { + u16 quot; + u16 rem; +} udiv_t; + +udiv_t div3(u16 in) { + + udiv_t u; + u16 q = 0; + + while (in >= 300) { + in -= 300; + q += 100; + } + + while (in >= 30) { + in -= 30; + q += 10; + } + + while (in >= 3) { + in -= 3; + ++q; + } + + u.quot = q; + u.rem = in; + + return u; +} + +int res = 0; + +int main(void) { + + u16 i; + div_t d; + udiv_t u; + + for (i = 1024; i; i--) { + d = div(i, 3); + u = div3(i); + + if (d.quot != u.quot || d.rem != u.rem) { + printf("Mismatch at %u/3, div %u %u, div3 %u %u\n", i, + d.quot, d.rem, u.quot, u.rem); + res++; + } + } + + return res; +} + From 36ff37214993310a832ae75953347b100ef647fe Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 13 Jul 2020 15:13:22 +0200 Subject: [PATCH 0214/2710] added testcase for issue #760 --- test/misc/bug760.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 test/misc/bug760.c diff --git a/test/misc/bug760.c b/test/misc/bug760.c new file mode 100644 index 000000000..dc8573b6d --- /dev/null +++ b/test/misc/bug760.c @@ -0,0 +1,12 @@ +/* bug#760 - Error when using macros as pragma arguments */ + +#include <stdlib.h> + +#define BANK "PRG0" + +#pragma rodata-name(push, BANK) + +int main(void) +{ + return EXIT_SUCCESS; +} From 5597b83d041301554726d329548644b145a80cd8 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 13 Jul 2020 15:13:38 +0200 Subject: [PATCH 0215/2710] added testcase for issue #975 --- test/misc/bug975.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 test/misc/bug975.c diff --git a/test/misc/bug975.c b/test/misc/bug975.c new file mode 100644 index 000000000..458524a5a --- /dev/null +++ b/test/misc/bug975.c @@ -0,0 +1,18 @@ +/* bug #975 - Forward array reference fails to compile */ + +#include <stdlib.h> + +// this works +static const unsigned char array2[3]; +int test2(void) { + return array2[0]; +} +static const unsigned char array2[] = { 0, 1, 2 }; + +// this should work, but does not compile +static const unsigned char array[]; +int main() { + if (test2() != 0) return EXIT_FAILURE; + return array[0]; +} +static const unsigned char array[] = { 0, 1, 2 }; From 390f9720149f13ebfbb5947a8fa2e5d700bcee62 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 13 Jul 2020 15:16:26 +0200 Subject: [PATCH 0216/2710] updated Makefile with exception rules for the added tests --- test/misc/Makefile | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/misc/Makefile b/test/misc/Makefile index cda0c789a..898ea1b2b 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -63,6 +63,36 @@ $(DIFF): ../bdiff.c | $(WORKDIR) define PRG_template +# should compile, but gives an error +$(WORKDIR)/bug975.$1.$2.prg: bug975.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug975.$1.$2.prg) + -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + +# should compile, but gives an error +$(WORKDIR)/bug250.$1.$2.prg: bug250.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug250.$1.$2.prg) + -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + +# should compile, but gives an error +$(WORKDIR)/bug760.$1.$2.prg: bug760.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug760.$1.$2.prg) + -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + +# this should fail to compile, because cc65 does not support returning structs +$(WORKDIR)/bug264.$1.$2.prg: bug264.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug264.$1.$2.prg) + -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + +# this should fail to compile, because there are errors in the code +$(WORKDIR)/bug1048.$1.$2.prg: bug1048.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug1048.$1.$2.prg) + -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + +# internal compiler error +$(WORKDIR)/bug1075.$1.$2.prg: bug1075.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug1075.$1.$2.prg) + -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(if $(QUIET),echo misc/endless.$1.$2.prg) From e758110f6135bd10cf4266fa5c4ec5517d306f7f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 13 Jul 2020 17:00:17 +0200 Subject: [PATCH 0217/2710] added testcode to check petscii char mapping, related to issue #988 --- testcode/lib/cbm/Makefile | 39 ++++++++++++++++++ testcode/lib/cbm/petscii.c | 82 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 testcode/lib/cbm/Makefile create mode 100644 testcode/lib/cbm/petscii.c diff --git a/testcode/lib/cbm/Makefile b/testcode/lib/cbm/Makefile new file mode 100644 index 000000000..5217f0cc6 --- /dev/null +++ b/testcode/lib/cbm/Makefile @@ -0,0 +1,39 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= c64 + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) + CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) + CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) + LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) +endif + +all: petscii.prg + +petscii.prg: petscii.c + $(CL) -t $(SYS) -O -o petscii.prg petscii.c + +clean: + $(DEL) petscii.prg diff --git a/testcode/lib/cbm/petscii.c b/testcode/lib/cbm/petscii.c new file mode 100644 index 000000000..60a12b18b --- /dev/null +++ b/testcode/lib/cbm/petscii.c @@ -0,0 +1,82 @@ + +/* this program prints all available "petscii" characters to screen, once + using putchar (which wraps to kernal i/o) and once using conio (which + will do direct videoram access). after that the produced screencodes + are compared (they should match) (related to issue #988 */ + +#include <conio.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#if defined(__C64__) +#define VRAMPEEK(x) (*(char*)(0x0400 + (x))) +#define CRAMPOKE(x, y) *(char*)(0xd800 + (x)) = (y) +#else +#error "this target is not supported yet" +#endif + +unsigned char x, y, c; +unsigned char c1, c2; +unsigned char *p1, *p2; + +int err = 0; + +int main(void) +{ + clrscr(); + bgcolor(COLOR_BLACK); + bordercolor(COLOR_BLACK); + + /* output all characters using putchar() */ + c = 0; + for (y = 0; y < 16; y++) { + for (x = 0; x < 16; x++) { + /* skip the codes that are unprintable control codes */ + if (!((c < 32) || ((c > 127) && (c < 160)))) { + gotoxy(x, y); putchar(c); + } + c++; + } + } + + /* output all characters using conio */ + c = 0; + for (y = 0; y < 16; y++) { + for (x = 0; x < 16; x++) { + /* skip the codes that are unprintable control codes */ + if (!((c < 32) || ((c > 127) && (c < 160)))) { + gotoxy(x + 20, y); cputc(c); + } + c++; + } + } + + /* compare the two outputs */ + for (y = 0; y < 16; y++) { + for (x = 0; x < 16; x++) { + c1 = VRAMPEEK((y * 40) + x); + c2 = VRAMPEEK((y * 40) + x + 0x14); + if (c1 == c2) { + c = COLOR_GREEN; + } else { + c = COLOR_RED; + err = 1; + } + CRAMPOKE((y * 40) + x, c); + CRAMPOKE((y * 40) + x + 0x14, c); + } + } + + /* show the result */ + textcolor(COLOR_WHITE); + gotoxy(0, 17); + if (err) { + bordercolor(COLOR_RED); + cputs("errors detected"); + } else { + bordercolor(COLOR_GREEN); + cputs("all fine"); + } + return 0; +} From d940c9aa8567f8fc208f770d5a9c95285fefe85b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 13 Jul 2020 17:04:22 +0200 Subject: [PATCH 0218/2710] added a bit more precise description --- test/readme.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/readme.txt b/test/readme.txt index 2d4413f45..57ebfdd23 100644 --- a/test/readme.txt +++ b/test/readme.txt @@ -9,13 +9,16 @@ compiler. /err - contains tests that MUST NOT compile -/todo - these tests fail due to open compiler issues +/todo - these tests fail due to open compiler issues. + when an issue was fixed, the test should get moved to /var /asm - contains the assembler regression tests /dasm - contains the disassembler regression tests /misc - a few tests that need special care of some sort + tests that (incorrectly) fail to compile and other tests that fail and + do NOT return an exit code are collected here. to run the tests use "make" in this (top) directory, the makefile should exit From 882194c22125d435fcdf46520e3da080d6ad40b5 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 13 Jul 2020 21:25:13 +0200 Subject: [PATCH 0219/2710] move a bunch of tests from testcode/lib to test/val (and a failing one to test/todo) --- {testcode/lib => test/todo}/sprintf-test.c | 0 {testcode/lib => test/val}/atoi-test.c | 0 {testcode/lib => test/val}/shift-test.c | 0 {testcode/lib => test/val}/signal-test.c | 0 {testcode/lib => test/val}/snprintf-test.c | 0 {testcode/lib => test/val}/strncmp-test.c | 0 {testcode/lib => test/val}/strnicmp-test.c | 0 {testcode/lib => test/val}/strpbrk-test.c | 0 {testcode/lib => test/val}/strtol-test.c | 0 {testcode/lib => test/val}/strtoul-test.c | 0 {testcode/lib => test/val}/time-test.c | 0 11 files changed, 0 insertions(+), 0 deletions(-) rename {testcode/lib => test/todo}/sprintf-test.c (100%) rename {testcode/lib => test/val}/atoi-test.c (100%) rename {testcode/lib => test/val}/shift-test.c (100%) rename {testcode/lib => test/val}/signal-test.c (100%) rename {testcode/lib => test/val}/snprintf-test.c (100%) rename {testcode/lib => test/val}/strncmp-test.c (100%) rename {testcode/lib => test/val}/strnicmp-test.c (100%) rename {testcode/lib => test/val}/strpbrk-test.c (100%) rename {testcode/lib => test/val}/strtol-test.c (100%) rename {testcode/lib => test/val}/strtoul-test.c (100%) rename {testcode/lib => test/val}/time-test.c (100%) diff --git a/testcode/lib/sprintf-test.c b/test/todo/sprintf-test.c similarity index 100% rename from testcode/lib/sprintf-test.c rename to test/todo/sprintf-test.c diff --git a/testcode/lib/atoi-test.c b/test/val/atoi-test.c similarity index 100% rename from testcode/lib/atoi-test.c rename to test/val/atoi-test.c diff --git a/testcode/lib/shift-test.c b/test/val/shift-test.c similarity index 100% rename from testcode/lib/shift-test.c rename to test/val/shift-test.c diff --git a/testcode/lib/signal-test.c b/test/val/signal-test.c similarity index 100% rename from testcode/lib/signal-test.c rename to test/val/signal-test.c diff --git a/testcode/lib/snprintf-test.c b/test/val/snprintf-test.c similarity index 100% rename from testcode/lib/snprintf-test.c rename to test/val/snprintf-test.c diff --git a/testcode/lib/strncmp-test.c b/test/val/strncmp-test.c similarity index 100% rename from testcode/lib/strncmp-test.c rename to test/val/strncmp-test.c diff --git a/testcode/lib/strnicmp-test.c b/test/val/strnicmp-test.c similarity index 100% rename from testcode/lib/strnicmp-test.c rename to test/val/strnicmp-test.c diff --git a/testcode/lib/strpbrk-test.c b/test/val/strpbrk-test.c similarity index 100% rename from testcode/lib/strpbrk-test.c rename to test/val/strpbrk-test.c diff --git a/testcode/lib/strtol-test.c b/test/val/strtol-test.c similarity index 100% rename from testcode/lib/strtol-test.c rename to test/val/strtol-test.c diff --git a/testcode/lib/strtoul-test.c b/test/val/strtoul-test.c similarity index 100% rename from testcode/lib/strtoul-test.c rename to test/val/strtoul-test.c diff --git a/testcode/lib/time-test.c b/test/val/time-test.c similarity index 100% rename from testcode/lib/time-test.c rename to test/val/time-test.c From 5ad365c5df9bf743f5672516358d2bf41cdf196c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 13 Jul 2020 21:26:07 +0200 Subject: [PATCH 0220/2710] some tweaks to the moved tests to make them more suitable for automatic testing --- test/todo/sprintf-test.c | 10 ++--- test/val/signal-test.c | 13 ++++-- test/val/snprintf-test.c | 5 ++- test/val/strncmp-test.c | 14 ++++--- test/val/strnicmp-test.c | 85 ++++++++++++++++++++++------------------ test/val/strpbrk-test.c | 12 +++++- test/val/time-test.c | 33 +++++++++++----- 7 files changed, 108 insertions(+), 64 deletions(-) diff --git a/test/todo/sprintf-test.c b/test/todo/sprintf-test.c index 55354be20..bd5de44b4 100644 --- a/test/todo/sprintf-test.c +++ b/test/todo/sprintf-test.c @@ -1,13 +1,13 @@ #include <stdio.h> #include <string.h> #include <stdarg.h> -#if defined(__CC65__) +#if defined(__CC65__) && !defined(__SIM6502__) && !defined(__SIM65C02__) #include <conio.h> #endif /* Flag to #ifdef the tests out that crash the old implementation */ -/*#define NOCRASH 1 */ +#define NOCRASH 1 @@ -532,9 +532,9 @@ int main (void) /* Alternative form with zero value */ #ifndef NOCRASH OneTest (__LINE__, "0", 1, "%#o", 0U); +#endif OneTest (__LINE__, "0", 1, "%#x", 0U); OneTest (__LINE__, "0", 1, "%#X", 0U); -#endif /* Alternative form with zero value and precision 1 */ OneTest (__LINE__, "0", 1, "%#.1o", 0U); @@ -570,8 +570,8 @@ int main (void) } /* Wait for a key so we can read the result */ -#if defined(__CC65__) +#if defined(__CC65__) && !defined(__SIM6502__) && !defined(__SIM65C02__) cgetc (); #endif - return 0; + return Failures; } diff --git a/test/val/signal-test.c b/test/val/signal-test.c index 4e34a281d..31dd8ed5c 100644 --- a/test/val/signal-test.c +++ b/test/val/signal-test.c @@ -1,12 +1,16 @@ #include <stdio.h> +#include <stdlib.h> #include <string.h> #include <errno.h> #include <signal.h> +int signalcounter = 0; + void __fastcall__ sighandler (int sig) { printf ("Got signal #%d\n", sig); + signalcounter++; } @@ -15,15 +19,18 @@ int main (void) { if (signal (SIGSEGV, sighandler) == SIG_ERR) { printf ("signal failure %d: %s\n", errno, strerror (errno)); - return 1; + return EXIT_FAILURE; } printf ("About to raise SIGSEGV...\n"); raise (SIGSEGV); printf ("Back from signal handler\n"); printf ("About to raise SIGILL...\n"); raise (SIGILL); - printf ("Back from signal handler\n"); - return 0; + printf ("Back from signal handler, signalcounter = %d\n", signalcounter); + if (signalcounter != 1) { + return EXIT_FAILURE; + } + return EXIT_SUCCESS; } diff --git a/test/val/snprintf-test.c b/test/val/snprintf-test.c index d3af47d78..e3a60d99b 100644 --- a/test/val/snprintf-test.c +++ b/test/val/snprintf-test.c @@ -137,8 +137,9 @@ unsigned char main(void) } else { printf("There were no"); } - printf(" failures.\nTap a key. "); + printf(" failures.\nTap a key.\n"); +#if defined(__CC65__) && !defined(__SIM6502__) && !defined(__SIM65C02__) cgetc(); - +#endif return failures; } diff --git a/test/val/strncmp-test.c b/test/val/strncmp-test.c index b15565036..7dbbb4b8c 100644 --- a/test/val/strncmp-test.c +++ b/test/val/strncmp-test.c @@ -10,15 +10,19 @@ static const char S2[] = { 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '\0', 'B' }; - - +int fails = 0; int main (void) { char I; + int ret; for (I = 0; I < 20; ++I) { - printf ("%02d: %d\n", I, strncmp (S1, S2, I)); + ret = strncmp (S1, S2, I); + printf ("%02d: %d\n", I, ret); + if ((ret != 0) && (I < 7)) { + fails++; + } } - return 0; + printf("fails: %d\n", fails); + return fails; } - diff --git a/test/val/strnicmp-test.c b/test/val/strnicmp-test.c index b2d942a97..6376a39bb 100644 --- a/test/val/strnicmp-test.c +++ b/test/val/strnicmp-test.c @@ -3,70 +3,79 @@ #include <string.h> #include <conio.h> +int fails = 0; + static int do_test(const char *s1, const char *s2, size_t n) { printf("strnicmp(\"%s\", \"%s\", %d): ", s1, s2, (int)n); return strncasecmp(s1, s2, n); } +static void printresult(int ret) +{ + if (ret) { + printf("fail (%d)\n", ret); + fails++; + } else { + printf("OK (%d)\n", ret); + } +} + +static void printresultgt(int ret) +{ + if (ret >= 0) { + printf("fail (%d)\n", ret); + fails++; + } else { + printf("OK (%d)\n", ret); + } +} + +static void printresultlt(int ret) +{ + if (ret <= 0) { + printf("fail (%d)\n", ret); + fails++; + } else { + printf("OK (%d)\n", ret); + } +} + int main(void) { int ret; ret = do_test("Wurzl", "wURZL", 5); - if (ret) - printf("fail (%d)\n", ret); - else - printf("OK (%d)\n", ret); + printresult(ret); ret = do_test("Wurzl", "wURZL", 6); - if (ret) - printf("fail (%d)\n", ret); - else - printf("OK (%d)\n", ret); + printresult(ret); ret = do_test("Wurzl", "wURZL", 10); - if (ret) - printf("fail (%d)\n", ret); - else - printf("OK (%d)\n", ret); + printresult(ret); ret = do_test("Wurzla", "wURZLB", 10); - if (ret >= 0) - printf("fail (%d)\n", ret); - else - printf("OK (%d)\n", ret); + printresultgt(ret); ret = do_test("Wurzla", "wURZLb", 5); - if (ret) - printf("fail (%d)\n", ret); - else - printf("OK (%d)\n", ret); + printresult(ret); ret = do_test("BLI", "bla", 5); - if (ret <= 0) - printf("fail (%d)\n", ret); - else - printf("OK (%d)\n", ret); + printresultlt(ret); ret = do_test("", "bla", 5); - if (ret >= 0) - printf("fail (%d)\n", ret); - else - printf("OK (%d)\n", ret); + printresultgt(ret); ret = do_test("BLI", "", 5); - if (ret <= 0) - printf("fail (%d)\n", ret); - else - printf("OK (%d)\n", ret); + printresultlt(ret); ret = do_test("", "", 5); - if (ret) - printf("fail (%d)\n", ret); - else - printf("OK (%d)\n", ret); - + printresult(ret); + + printf("fails: %d\n", fails); + +#if defined(__CC65__) && !defined(__SIM6502__) && !defined(__SIM65C02__) cgetc(); - return 0; +#endif + return fails; } diff --git a/test/val/strpbrk-test.c b/test/val/strpbrk-test.c index 25c2c2fbe..6a688732d 100644 --- a/test/val/strpbrk-test.c +++ b/test/val/strpbrk-test.c @@ -3,24 +3,32 @@ static const char fox[] = "The quick brown fox jumped over the lazy dogs."; -void main (void) +int fails = 0; + +int main (void) { printf ("Testing strpbrk():\n"); if (strpbrk (fox, "qwerty") != &fox[2]) { printf ("\nThe first 'e' wasn't found.\n"); + fails++; } if (strpbrk (fox, "QWERTY") != &fox[0]) { printf ("The 'T' wasn't found.\n"); + fails++; } if (strpbrk (fox, "asdfg") != &fox[16]) { printf ("The 'f' wasn't found.\n"); + fails++; } if (strpbrk (fox, "nxv,zmb") != &fox[10]) { printf ("The 'b' wasn't found.\n"); + fails++; } if (strpbrk (fox, "!@#$%^&*()-+=[];:',/?<>.") != &fox[45]) { printf ("The '.' wasn't found.\n"); + fails++; } - printf ("\nFinished.\n"); + printf ("\nFinished. fails = %d\n", fails); + return fails; } diff --git a/test/val/time-test.c b/test/val/time-test.c index 99d16be01..304238fa0 100644 --- a/test/val/time-test.c +++ b/test/val/time-test.c @@ -1,7 +1,11 @@ #include <stdio.h> +#include <string.h> #include <time.h> +#define EXPECTSTR "3DD173D1 - Tue Nov 12 21:34:09 2002\n" +char result[0x100]; +int fails = 0; int main (void) { @@ -23,16 +27,27 @@ int main (void) t = mktime (&tm); printf ("Test passes if the following lines are\n" "all identical:\n"); - printf ("3DD173D1 - Tue Nov 12 21:34:09 2002\n"); - printf ("%08lX - %s", t, asctime (&tm)); - printf ("%08lX - %s", t, asctime (gmtime (&t))); + printf (EXPECTSTR); + + sprintf (result, "%08lX - %s", t, asctime (&tm)); + printf (result); + if (strcmp(result, EXPECTSTR) != 0) { fails++; } + + sprintf (result, "%08lX - %s", t, asctime (gmtime (&t))); + printf (result); + if (strcmp(result, EXPECTSTR) != 0) { fails++; } + strftime (buf, sizeof (buf), "%c", &tm); - printf ("%08lX - %s\n", t, buf); + sprintf (result, "%08lX - %s\n", t, buf); + printf (result); + if (strcmp(result, EXPECTSTR) != 0) { fails++; } + strftime (buf, sizeof (buf), "%a %b %d %H:%M:%S %Y", &tm); - printf ("%08lX - %s\n", t, buf); + sprintf (result, "%08lX - %s\n", t, buf); + printf (result); + if (strcmp(result, EXPECTSTR) != 0) { fails++; } + + printf("fails: %d\n", fails); - return 0; + return fails; } - - - From a4f1e37f0c46f1f56c0772d1da85a2c7c6f19b1b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 13 Jul 2020 21:26:31 +0200 Subject: [PATCH 0221/2710] increase the maximum amount of cycles, else the shift test will fail --- test/val/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/val/Makefile b/test/val/Makefile index 417c0b6c8..be63cd8da 100644 --- a/test/val/Makefile +++ b/test/val/Makefile @@ -24,7 +24,7 @@ ifdef QUIET NULLERR = 2>$(NULLDEV) endif -SIM65FLAGS = -x 200000000 +SIM65FLAGS = -x 5000000000 CL65 := $(if $(wildcard ../../bin/cl65*),..$S..$Sbin$Scl65,cl65) SIM65 := $(if $(wildcard ../../bin/sim65*),..$S..$Sbin$Ssim65,sim65) From 1f2fdbd9b1c103bc57fe057255bdc780b9f51043 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 14 Jul 2020 14:22:29 +0200 Subject: [PATCH 0222/2710] implemented conio peek functions for PCE target --- libsrc/pce/cpeekc.s | 24 +++++++++++++++ libsrc/pce/cpeekcolor.s | 28 ++++++++++++++++++ libsrc/pce/cpeekrevers.s | 26 +++++++++++++++++ libsrc/pce/cpeeks.s | 63 ++++++++++++++++++++++++++++++++++++++++ libsrc/pce/cputc.s | 4 +-- 5 files changed, 143 insertions(+), 2 deletions(-) create mode 100644 libsrc/pce/cpeekc.s create mode 100644 libsrc/pce/cpeekcolor.s create mode 100644 libsrc/pce/cpeekrevers.s create mode 100644 libsrc/pce/cpeeks.s diff --git a/libsrc/pce/cpeekc.s b/libsrc/pce/cpeekc.s new file mode 100644 index 000000000..e144f94ac --- /dev/null +++ b/libsrc/pce/cpeekc.s @@ -0,0 +1,24 @@ +; +; 2020-07-14, Groepaz +; +; char cpeekc (void); +; +; get character from current position, do NOT advance cursor + + .export _cpeekc + + .include "pce.inc" + .include "extzp.inc" + +_cpeekc: + st0 #VDC_MARR ; Memory-Address Read + ldy SCREEN_PTR + ldx SCREEN_PTR+1 + sty VDC_DATA_LO + stx VDC_DATA_HI + + st0 #VDC_VRR ; VRAM Read Register + lda VDC_DATA_LO ; character + and #<~$80 ; remove reverse bit + ldx #0 + rts diff --git a/libsrc/pce/cpeekcolor.s b/libsrc/pce/cpeekcolor.s new file mode 100644 index 000000000..8b96d29d4 --- /dev/null +++ b/libsrc/pce/cpeekcolor.s @@ -0,0 +1,28 @@ +; +; 2020-07-14, Groepaz +; +; unsigned char cpeekcolor (void); +; +; get color from current position, do NOT advance cursor + + .export _cpeekcolor + + .include "pce.inc" + .include "extzp.inc" + +_cpeekcolor: + st0 #VDC_MARR ; Memory-Address Read + ldy SCREEN_PTR + ldx SCREEN_PTR+1 + sty VDC_DATA_LO + stx VDC_DATA_HI + + st0 #VDC_VRR ; VRAM Read Register + lda VDC_DATA_HI + and #<~$02 + lsr a + lsr a + lsr a + lsr a + ldx #0 + rts diff --git a/libsrc/pce/cpeekrevers.s b/libsrc/pce/cpeekrevers.s new file mode 100644 index 000000000..3f208fd10 --- /dev/null +++ b/libsrc/pce/cpeekrevers.s @@ -0,0 +1,26 @@ +; +; 2020-07-14, Groepaz +; +; unsigned char cpeekrevers (void); +; +; get inverse flag from current position, do NOT advance cursor + + .export _cpeekrevers + + .include "pce.inc" + .include "extzp.inc" + +_cpeekrevers: + st0 #VDC_MARR ; Memory-Address Read + ldy SCREEN_PTR + ldx SCREEN_PTR+1 + sty VDC_DATA_LO + stx VDC_DATA_HI + + st0 #VDC_VRR ; VRAM Read Register + lda VDC_DATA_LO ; character (bit 7 is revers bit) + rol a + rol a + and #1 + ldx #0 + rts diff --git a/libsrc/pce/cpeeks.s b/libsrc/pce/cpeeks.s new file mode 100644 index 000000000..fe5e28687 --- /dev/null +++ b/libsrc/pce/cpeeks.s @@ -0,0 +1,63 @@ +; +; 2020-07-14, Groepaz +; +; void cpeeks (char* s, unsigned length); +; +; get string from current position, do NOT advance cursor + + .export _cpeeks + + .import popax + .importzp ptr1, ptr2, tmp1, tmp2 + + .macpack generic + + .include "pce.inc" + .include "extzp.inc" + +_cpeeks: + eor #<$FFFF ; counting a word upward is faster + sta ptr2 ; so, we use -(length + 1) + txa + eor #>$FFFF + sta ptr2+1 + + st0 #VDC_MARR ; Memory-Address Read + ldy SCREEN_PTR + ldx SCREEN_PTR+1 + sty VDC_DATA_LO + stx VDC_DATA_HI + + st0 #VDC_VRR ; VRAM Read Register + + jsr popax + sta tmp1 ; (will be a .Y index) + stx ptr1+1 + + ldx #<$0000 + stx ptr1 + beq L2 ; branch always + +L3: ldy tmp2 + lda VDC_DATA_LO ; get character + bit VDC_DATA_HI ; we need to "read" the highbyte to advance the address + iny + sty tmp2 + and #<~$80 ; remove reverse bit + + ldy tmp1 + sta (ptr1),y + iny + bne L1 + inc ptr1+1 +L1: sty tmp1 + +L2: inc ptr2 ; count length + bne L3 + inc ptr2+1 + bne L3 + + txa ; terminate the string + ldy tmp1 + sta (ptr1),y + rts diff --git a/libsrc/pce/cputc.s b/libsrc/pce/cputc.s index 04d901423..626d3ef8e 100644 --- a/libsrc/pce/cputc.s +++ b/libsrc/pce/cputc.s @@ -68,10 +68,10 @@ putchar: sty VDC_DATA_LO stx VDC_DATA_HI - st0 #VDC_VWR + st0 #VDC_VWR ; VRAM Write Register sta VDC_DATA_LO ; character - lda CHARCOLOR ; pallette number + lda CHARCOLOR ; palette number asl a asl a asl a From f99a44d8e1ab44c6a20a4794b1b2adcafe154655 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 14 Jul 2020 14:24:19 +0200 Subject: [PATCH 0223/2710] added rudimentary testing for the peek functions --- testcode/lib/pce/conio.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/testcode/lib/pce/conio.c b/testcode/lib/pce/conio.c index 858f01918..55f828f26 100644 --- a/testcode/lib/pce/conio.c +++ b/testcode/lib/pce/conio.c @@ -7,6 +7,10 @@ static int datavar = 10; +static char hex[16] = { "0123456789abcdef" }; +static char charbuf[0x20]; +static char colbuf[0x20]; + void main(void) { int stackvar = 42; @@ -21,11 +25,27 @@ void main(void) screensize(&xsize, &ysize); cputs("hello world"); + gotoxy(0,0); + cpeeks(charbuf, 11); + gotoxy(12,0); + cputs(charbuf); + cputsxy(0, 2, "colors:" ); for (i = 0; i < 16; ++i) { textcolor(i); - cputc('X'); + cputc(hex[i]); } + for (i = 0; i < 16; ++i) { + gotoxy(7 + i, 2); + charbuf[i] = cpeekc(); + colbuf[i] = cpeekcolor(); + } + gotoxy(25, 2); + for (i = 0; i < 16; ++i) { + textcolor(colbuf[i]); + cputc(charbuf[i]); + } + textcolor(1); gotoxy(0,4); @@ -115,6 +135,17 @@ void main(void) cputs(" revers"); revers(0); + for (i = 0; i < 9; ++i) { + gotoxy(xsize - 10 + i, 3); + charbuf[i] = cpeekc(); + colbuf[i] = cpeekrevers(); + } + gotoxy(xsize - 10, 4); + for (i = 0; i < 9; ++i) { + revers(colbuf[i]); + cputc(charbuf[i]); + } + if ((n & 0x1f) == 0x00) { nn = p[15]; ((char*)memmove(p + 1, p, 15))[-1] = nn; From 3558c0796dc01f3659b797d1639107ebcad40e69 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 14 Jul 2020 15:00:43 +0200 Subject: [PATCH 0224/2710] added a second test that checks all available characters (including inverse) --- testcode/lib/cbm/petscii.c | 80 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/testcode/lib/cbm/petscii.c b/testcode/lib/cbm/petscii.c index 60a12b18b..7d5ba9528 100644 --- a/testcode/lib/cbm/petscii.c +++ b/testcode/lib/cbm/petscii.c @@ -11,6 +11,8 @@ #if defined(__C64__) #define VRAMPEEK(x) (*(char*)(0x0400 + (x))) +#define VRAMPOKE(x, y) *(char*)(0x0400 + (x)) = (y) +#define CRAMPEEK(x) ((*(char*)(0xd800 + (x))) & 15) #define CRAMPOKE(x, y) *(char*)(0xd800 + (x)) = (y) #else #error "this target is not supported yet" @@ -78,5 +80,83 @@ int main(void) bordercolor(COLOR_GREEN); cputs("all fine"); } + cputs(" - press a key "); + cursor(1); + cgetc(); + cursor(0); + + clrscr(); + bordercolor(COLOR_BLACK); + + /* output all characters directly to the scree */ + c = 0; + for (y = 0; y < 16; y++) { + for (x = 0; x < 16; x++) { + VRAMPOKE((y * 40) + x, c); + CRAMPOKE((y * 40) + x, c & 15); + c++; + } + } + + /* read the characters with conio peek functions and output with conio */ + for (y = 0; y < 16; y++) { + for (x = 0; x < 16; x++) { + gotoxy(x, y); + c1 = cpeekc(); + c2 = cpeekrevers(); + c = cpeekcolor(); + + gotoxy(x + 0x14, y); + revers(c2); + textcolor(c); + cputc(c1); + } + } + + revers(0); + textcolor(COLOR_WHITE); + gotoxy(0, 17); + cputs("press a key to compare "); + cursor(1); + cgetc(); + cursor(0); + + /* compare the two outputs */ + for (y = 0; y < 16; y++) { + for (x = 0; x < 16; x++) { + c = COLOR_GREEN; + c1 = VRAMPEEK((y * 40) + x); + c2 = VRAMPEEK((y * 40) + x + 0x14); + if (c1 != c2) { + c = COLOR_RED; + err = 1; + } + c1 = CRAMPEEK((y * 40) + x); + c2 = CRAMPEEK((y * 40) + x + 0x14); + if (c1 != c2) { + c = COLOR_RED; + err = 1; + } + CRAMPOKE((y * 40) + x, c); + CRAMPOKE((y * 40) + x + 0x14, c); + } + } + + /* show the result */ + revers(0); + textcolor(COLOR_WHITE); + gotoxy(0, 17); + if (err) { + bordercolor(COLOR_RED); + cputs("errors detected"); + } else { + bordercolor(COLOR_GREEN); + cputs("all fine"); + } + cputs(" - press a key "); + cursor(1); + cgetc(); + cursor(0); + return 0; } From 9023e975df8b89384207366521e16979026cfffc Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 14 Jul 2020 16:06:21 -0400 Subject: [PATCH 0225/2710] Stopped the C128 mouse drivers from blocking certain keys such as '1', '2', and 'Q'. This extra fix is needed because the C128 keyboard scanner works a little differently than the C64 scanner works. Fixes #696. Fixes #853. --- libsrc/c128/mou/c128-1351.s | 4 ++-- libsrc/c128/mou/c128-inkwell.s | 6 +++--- libsrc/c128/mou/c128-joy.s | 4 ++-- libsrc/c128/mou/c128-pot.s | 4 ++-- libsrc/c128/mou/callback.inc | 11 ++++++----- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/libsrc/c128/mou/c128-1351.s b/libsrc/c128/mou/c128-1351.s index d06e942c4..79ccbe0de 100644 --- a/libsrc/c128/mou/c128-1351.s +++ b/libsrc/c128/mou/c128-1351.s @@ -4,7 +4,7 @@ ; ; 2009-09-26, Ullrich von Bassewitz ; 2014-04-26, Christian Groessler -; 2014-04-30, Greg King +; 2020-07-14, Greg King ; .include "zeropage.inc" @@ -377,7 +377,7 @@ IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioctls, for now IRQ: jsr CPREP lda KEY_COUNT sta old_key_count - lda #$7F + lda #$FF sta CIA1_PRA lda CIA1_PRB ; Read joystick #0 and #$1F diff --git a/libsrc/c128/mou/c128-inkwell.s b/libsrc/c128/mou/c128-inkwell.s index 45d42f2db..b8e71bbb1 100644 --- a/libsrc/c128/mou/c128-inkwell.s +++ b/libsrc/c128/mou/c128-inkwell.s @@ -2,7 +2,7 @@ ; Driver for the Inkwell Systems 170-C and 184-C lightpens. ; ; 2014-04-26, Christian Groessler -; 2014-09-10, Greg King +; 2020-07-14, Greg King ; .include "zeropage.inc" @@ -414,8 +414,8 @@ IRQ: jsr CPREP ldy #%00000000 ; Set ports A and B to input sty CIA1_DDRB sty CIA1_DDRA ; Keyboard won't look like buttons - ;lda #%01111111 ; (Keyboard scan leaves this in port A) - ;sta CIA1_PRA + lda #%11111111 + sta CIA1_PRA lda CIA1_PRB ; Read Control Port 1 dec CIA1_DDRA ; Set port A back to output eor #%11111111 ; Bit goes up when button goes down diff --git a/libsrc/c128/mou/c128-joy.s b/libsrc/c128/mou/c128-joy.s index 7718b89b7..065674dc0 100644 --- a/libsrc/c128/mou/c128-joy.s +++ b/libsrc/c128/mou/c128-joy.s @@ -3,7 +3,7 @@ ; ; 2009-09-26, Ullrich von Bassewitz ; 2014-04-26, Christian Groessler -; 2014-05-01, Greg King +; 2020-07-14, Greg King ; .include "zeropage.inc" @@ -379,7 +379,7 @@ IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioctls for now IRQ: jsr CPREP lda KEY_COUNT sta old_key_count - lda #$7F + lda #$FF sta CIA1_PRA lda CIA1_PRB ; Read joystick #0 and #$1F diff --git a/libsrc/c128/mou/c128-pot.s b/libsrc/c128/mou/c128-pot.s index f61f88d5d..e582d64fb 100644 --- a/libsrc/c128/mou/c128-pot.s +++ b/libsrc/c128/mou/c128-pot.s @@ -4,7 +4,7 @@ ; 2006-08-20, Stefan Haubenthal ; 2009-09-26, Ullrich von Bassewitz ; 2014-04-26, Christian Groessler -; 2014-05-05, Greg King +; 2020-07-14, Greg King ; .include "zeropage.inc" @@ -385,7 +385,7 @@ IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioctls for now IRQ: jsr CPREP lda KEY_COUNT sta old_key_count - lda #$7F + lda #$FF sta CIA1_PRA lda CIA1_PRB ; Read port #1 eor #%11111111 ; Make all bits active high diff --git a/libsrc/c128/mou/callback.inc b/libsrc/c128/mou/callback.inc index 9f1d749a7..274c145fa 100644 --- a/libsrc/c128/mou/callback.inc +++ b/libsrc/c128/mou/callback.inc @@ -1,11 +1,12 @@ ; -; Callback routine called from the IRQ handler after the ROM IRQ handler -; had been run. +; Callback routine, called from the IRQ handler after the ROM IRQ handler +; has been run. ; -; Christian Groessler, 24.04.2014 +; 2014-04-24, Christian Groessler +; 2020-07-14, Greg King ; ; Check if there was button/joystick activity before and/or after the ROM handler. -; If there was activity, discard the key presses since they are most +; If there was activity, discard the key presses because they are most ; probably "phantom" key presses. callback: @@ -16,7 +17,7 @@ callback: lda OLD_BUTTONS ; keypress before? bne @discard_key ; yes, discard key - lda #$7F + lda #$FF sta CIA1_PRA lda CIA1_PRB ; Read joystick #0 and #$1F From 6035f1cb751a0faf7e813dca35bcee3c2bdb81fc Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 15 Jul 2020 00:17:11 +0200 Subject: [PATCH 0226/2710] added missing gotox/gotoy functions --- libsrc/pce/gotox.s | 14 ++++++++++++++ libsrc/pce/gotoy.s | 14 ++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 libsrc/pce/gotox.s create mode 100644 libsrc/pce/gotoy.s diff --git a/libsrc/pce/gotox.s b/libsrc/pce/gotox.s new file mode 100644 index 000000000..fe8a23734 --- /dev/null +++ b/libsrc/pce/gotox.s @@ -0,0 +1,14 @@ +; +; void __fastcall__ gotox (unsigned char x); +; + + .export _gotox + + .import plot + + .include "pce.inc" + .include "extzp.inc" + +_gotox: + sta CURS_X ; Set X + jmp plot ; Set the cursor position diff --git a/libsrc/pce/gotoy.s b/libsrc/pce/gotoy.s new file mode 100644 index 000000000..9585b035b --- /dev/null +++ b/libsrc/pce/gotoy.s @@ -0,0 +1,14 @@ +; +; void __fastcall__ gotoy (unsigned char y); +; + + .export _gotoy + + .import plot + + .include "pce.inc" + .include "extzp.inc" + +_gotoy: + sta CURS_Y ; Set Y + jmp plot ; Set the cursor position From e2ec517aae26d48a983010464ad3e094649e98d8 Mon Sep 17 00:00:00 2001 From: Olli Savia <ops@iki.fi> Date: Mon, 13 Jul 2020 12:09:01 +0300 Subject: [PATCH 0227/2710] Save another 3 bytes --- libsrc/vic20/tgi/vic20-hi.s | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/libsrc/vic20/tgi/vic20-hi.s b/libsrc/vic20/tgi/vic20-hi.s index 506de92f7..9d345947b 100644 --- a/libsrc/vic20/tgi/vic20-hi.s +++ b/libsrc/vic20/tgi/vic20-hi.s @@ -270,16 +270,14 @@ PATTERN_SOLID: @NEXT_COLUMN: sta (tmp2),y - adc #ROWS iny - cpy #COLS - bne @NEXT_COLUMN + adc #ROWS + bcc @NEXT_COLUMN ; Step to next row on screen. lda tmp2 - clc - adc #COLS + adc #COLS-1 ; Carry is set sta tmp2 inx From de5678af5de94121bd75fec18ebb354e67fed4eb Mon Sep 17 00:00:00 2001 From: Olli Savia <ops@iki.fi> Date: Mon, 13 Jul 2020 16:59:47 +0300 Subject: [PATCH 0228/2710] Added optimizations by dmsc --- libsrc/vic20/tgi/vic20-hi.s | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/libsrc/vic20/tgi/vic20-hi.s b/libsrc/vic20/tgi/vic20-hi.s index 9d345947b..dd540ce88 100644 --- a/libsrc/vic20/tgi/vic20-hi.s +++ b/libsrc/vic20/tgi/vic20-hi.s @@ -136,6 +136,7 @@ BITCHUNK: .byte $FF, $7F, $3F, $1F, $0F, $07, $03, $01 CHARROM := $8000 ; Character ROM base address CBASE := $9400 ; Color memory base address SBASE := $1000 ; Screen memory base address +.assert (<SBASE) = $0, error, "Error, SBASE must be page aligned" VBASE := $1100 ; Video memory base address ; These numbers are added to Kernal's default VIC settings. @@ -250,23 +251,21 @@ PATTERN_SOLID: ; Initialize variables - ldx #$FF - stx BITMASK + ldy #$FF + sty BITMASK ; Make screen columns. - lda #<SBASE - sta tmp2 lda #>SBASE sta tmp2+1 - inx ; (ldx #$00) - stx ERROR ; Set to TGI_ERR_OK + iny ; (ldy #$00) + sty tmp2 + sty ERROR ; Set to TGI_ERR_OK clc + ldx #$10 @NEXT_ROW: - ldy #$00 txa - adc #$10 @NEXT_COLUMN: sta (tmp2),y @@ -276,12 +275,8 @@ PATTERN_SOLID: ; Step to next row on screen. - lda tmp2 - adc #COLS-1 ; Carry is set - sta tmp2 - inx - cpx #ROWS + cpx #ROWS+$10 bne @NEXT_ROW ; Set up VIC. From b3703de983306dbc4a0666cbe69aba246e4b7fc8 Mon Sep 17 00:00:00 2001 From: Olli Savia <ops@iki.fi> Date: Tue, 14 Jul 2020 12:19:46 +0300 Subject: [PATCH 0229/2710] Code style fixes --- libsrc/vic20/tgi/vic20-hi.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/vic20/tgi/vic20-hi.s b/libsrc/vic20/tgi/vic20-hi.s index dd540ce88..416eb58b0 100644 --- a/libsrc/vic20/tgi/vic20-hi.s +++ b/libsrc/vic20/tgi/vic20-hi.s @@ -253,13 +253,13 @@ PATTERN_SOLID: ldy #$FF sty BITMASK + iny ; (ldy #$00) ; Make screen columns. + sty tmp2 lda #>SBASE sta tmp2+1 - iny ; (ldy #$00) - sty tmp2 sty ERROR ; Set to TGI_ERR_OK clc ldx #$10 From a02bec11e9eacf5a765e5ad2ad51793c15cf6475 Mon Sep 17 00:00:00 2001 From: Olli Savia <ops@iki.fi> Date: Tue, 14 Jul 2020 21:15:57 +0300 Subject: [PATCH 0230/2710] Another code style fix --- libsrc/vic20/tgi/vic20-hi.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/vic20/tgi/vic20-hi.s b/libsrc/vic20/tgi/vic20-hi.s index 416eb58b0..826a09c14 100644 --- a/libsrc/vic20/tgi/vic20-hi.s +++ b/libsrc/vic20/tgi/vic20-hi.s @@ -254,13 +254,13 @@ PATTERN_SOLID: ldy #$FF sty BITMASK iny ; (ldy #$00) + sty ERROR ; Set to TGI_ERR_OK ; Make screen columns. sty tmp2 lda #>SBASE sta tmp2+1 - sty ERROR ; Set to TGI_ERR_OK clc ldx #$10 From ba0ef5938d267dc47ca6d30af18b596190b4f932 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Wed, 15 Jul 2020 04:55:38 -0400 Subject: [PATCH 0231/2710] Moved the font into a separate module in the library. The font can be replaced, at link-time, by a custom file. --- libsrc/pce/conio.s | 8 +++----- libsrc/pce/{vga.inc => vga.s} | 5 +++++ 2 files changed, 8 insertions(+), 5 deletions(-) rename libsrc/pce/{vga.inc => vga.s} (99%) diff --git a/libsrc/pce/conio.s b/libsrc/pce/conio.s index 8fefe01f6..ac306f193 100644 --- a/libsrc/pce/conio.s +++ b/libsrc/pce/conio.s @@ -3,6 +3,7 @@ .import vdc_init .import psg_init .import colors + .import _pce_font .importzp ptr1, tmp1 .include "pce.inc" @@ -53,8 +54,8 @@ load_font: ; rts ; (fall through) ; Point to the font data. -copy: lda #<font - ldx #>font +copy: lda #<_pce_font + ldx #>_pce_font sta ptr1 stx ptr1+1 @@ -84,6 +85,3 @@ fillloop: bne charloop ; next character rts - -.rodata -font: .include "vga.inc" diff --git a/libsrc/pce/vga.inc b/libsrc/pce/vga.s similarity index 99% rename from libsrc/pce/vga.inc rename to libsrc/pce/vga.s index 72c173146..630fbe8db 100644 --- a/libsrc/pce/vga.inc +++ b/libsrc/pce/vga.s @@ -1,10 +1,15 @@ ;---------------------------------------------------------------------------- ; VGA font for the PC-Engine conio implementation + .export _pce_font + ; The character tiles use only two colors from each pallette. Color zero ; comes from pallette zero; color one is different in each pallette. The ; color of a character is set by choosing one of the 16 pallettes. +.rodata + +_pce_font: .byte $00, $00, $00, $00, $00, $00, $00, $00 .byte %00000000 From 72fff0cfbc9a04f6df5de43eb065c8bc984d793f Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Wed, 15 Jul 2020 22:23:29 +0200 Subject: [PATCH 0232/2710] atari.h: fix definition of KEY_UP noticed by Stefan Wessels --- include/atari.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/atari.h b/include/atari.h index 582e23be6..1a00a4c67 100644 --- a/include/atari.h +++ b/include/atari.h @@ -209,7 +209,7 @@ #define KEY_CLEAR (KEY_LESSTHAN | KEY_SHIFT) #define KEY_INSERT (KEY_GREATERTHAN | KEY_SHIFT) -#define KEY_UP (KEY_UNDERLINE | KEY_CTRL) +#define KEY_UP (KEY_DASH | KEY_CTRL) #define KEY_DOWN (KEY_EQUALS | KEY_CTRL) #define KEY_LEFT (KEY_PLUS | KEY_CTRL) #define KEY_RIGHT (KEY_ASTERISK | KEY_CTRL) From 4296cbaf82d47bfe1c9d9b100dcdf534601f018b Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Wed, 15 Jul 2020 17:11:38 -0400 Subject: [PATCH 0233/2710] Added a 320x200x256 TGI driver to the Commander X16 library. Made the mandelbrot sample program handle the X16's 256 colors. --- doc/cx16.sgml | 37 +++- include/cx16.h | 24 +- libsrc/cx16/tgi/cx320p1.s | 401 ++++++++++++++++++++++++++++++++++ libsrc/cx16/tgi_stat_stddrv.s | 7 +- libsrc/cx16/tgi_stddrv.s | 6 +- samples/mandelbrot.c | 12 +- 6 files changed, 465 insertions(+), 22 deletions(-) create mode 100644 libsrc/cx16/tgi/cx320p1.s diff --git a/doc/cx16.sgml b/doc/cx16.sgml index 20094d609..a73bb3c1e 100644 --- a/doc/cx16.sgml +++ b/doc/cx16.sgml @@ -16,9 +16,12 @@ compiler. <sect>Overview<p> -The Commander X16 is a modern small computer with firmware that is based on -the ROMs in Commodore's VIC-20 and 64C. It has a couple of I/O chips -(WDC65C22 VIA) that are like the ones in the VIC-20. +The Commander X16 is a modern small computer with firmware that is based partly +on the ROMs in Commodore's VIC-20 and 64C. It has a couple of I/O chips +(WDC65C22 VIA) that are like the ones in the VIC-20. It supports file storage +on Secure Digital cards. It allows two joysticks and a mouse. It has three +sound devices. It's VGA screen has twice the range of the C64 (similar to the +C128's 80-column screen), with 256 colors. This file contains an overview of the CX16 run-time system as it comes with the cc65 C compiler. It describes the memory layout, CX16-specific header files, @@ -108,7 +111,7 @@ cl65 -o file.prg -t cx16 -C cx16-asm.cfg source.s To generate code that loads to $A000: <tscreen><verb> -cl65 -o file.prg -Wl -S,$A000 -t cX16 -C cX16-asm.cfg source.s +cl65 -o file.prg -Wl -S,$A000 -t cx16 -C cx16-asm.cfg source.s </verb></tscreen> It also is possible to add a small BASIC header to the program, that uses SYS @@ -208,12 +211,22 @@ structures, accessing the struct fields will access the chip registers. <sect>Loadable drivers<p> -The names in the parentheses denote the symbols to be used for static linking of the drivers. +The names in the parentheses denote the symbols to be used for static linking +of the drivers. The names fit into the 8.3 character limit of the SD-Card's +FAT32 file-system. <sect1>Graphics drivers<p> -No graphics drivers are available currently for the CX16. +The default drivers, <tt/tgi_stddrv (tgi_static_stddrv)/, +point to <tt/cx320p1.tgi (cx320p1_tgi)/. + +<descrip> + <tag><tt/cx320p1.tgi (cx320p1_tgi)/</tag> + This driver features a resolution of 320 across and 200 down with 256 colors, + and a slightly adjustable palette (the order of the colors can be changed in + a way that's compatible with some of the other color drivers). +</descrip><p> <sect1>Extended memory drivers<p> @@ -224,10 +237,10 @@ No extended memory drivers are available currently for the CX16. <sect1>Joystick drivers<p> The default drivers, <tt/joy_stddrv (joy_static_stddrv)/, -point to <tt/cX16-std.joy (cx16_std_joy)/. +point to <tt/cx16-std.joy (cx16_std_joy)/. <descrip> - <tag><tt/cX16-std.joy (cX16_std_joy)/</tag> + <tag><tt/cx16-std.joy (cx16_std_joy)/</tag> Supports up to two NES (and SNES) controllers connected to the joystick ports of the CX16. It reads the four directions, and the <bf/A/, <bf/B/, <bf/Select/, and <bf/Start/ buttons. Buttons <bf/A/ and <bf/B/ are @@ -238,15 +251,15 @@ point to <tt/cX16-std.joy (cx16_std_joy)/. <sect1>Mouse drivers<p> The default drivers, <tt/mouse_stddrv (mouse_static_stddrv)/, -point to <tt/cX16-std.mou (cx16_std_mou)/. +point to <tt/cx16-std.mou (cx16_std_mou)/. <descrip> - <tag><tt/cX16-std.mou (cX16_std_mou)/</tag> + <tag><tt/cx16-std.mou (cx16_std_mou)/</tag> Supports a standard 3-button mouse connected to the PS/2 mouse port of the Commander X16. - Currently (r35), this driver doesn't support <tt/mouse_move()/ - and <tt/mouse_setbox()/. + Currently, this driver doesn't support <tt/mouse_move()/ and + <tt/mouse_setbox()/. </descrip><p> diff --git a/include/cx16.h b/include/cx16.h index 253fa2482..f129b26f4 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -111,6 +111,25 @@ #define COLOR_LIGHTBLUE 0x0E #define COLOR_GRAY3 0x0F +/* TGI color defines */ +#define TGI_COLOR_BLACK COLOR_BLACK +#define TGI_COLOR_WHITE COLOR_WHITE +#define TGI_COLOR_RED COLOR_RED +#define TGI_COLOR_CYAN COLOR_CYAN +#define TGI_COLOR_VIOLET COLOR_VIOLET +#define TGI_COLOR_PURPLE COLOR_PURPLE +#define TGI_COLOR_GREEN COLOR_GREEN +#define TGI_COLOR_BLUE COLOR_BLUE +#define TGI_COLOR_YELLOW COLOR_YELLOW +#define TGI_COLOR_ORANGE COLOR_ORANGE +#define TGI_COLOR_BROWN COLOR_BROWN +#define TGI_COLOR_LIGHTRED COLOR_LIGHTRED +#define TGI_COLOR_GRAY1 COLOR_GRAY1 +#define TGI_COLOR_GRAY2 COLOR_GRAY2 +#define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN +#define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE +#define TGI_COLOR_GRAY3 COLOR_GRAY3 + /* NES controller masks for joy_read() */ #define JOY_BTN_1_MASK 0x80 @@ -280,8 +299,9 @@ struct __emul { /* The addresses of the static drivers */ -extern void cx16_std_joy[]; /* Referred to by joy_static_stddrv[] */ -extern void cx16_std_mou[]; /* Referred to by mouse_static_stddrv[] */ +extern void cx16_std_joy[]; /* Referenced by joy_static_stddrv[] */ +extern void cx16_std_mou[]; /* Referenced by mouse_static_stddrv[] */ +extern void cx320p1_tgi[]; /* Referenced by tgi_static_stddrv[] */ diff --git a/libsrc/cx16/tgi/cx320p1.s b/libsrc/cx16/tgi/cx320p1.s new file mode 100644 index 000000000..1ad5c2cbd --- /dev/null +++ b/libsrc/cx16/tgi/cx320p1.s @@ -0,0 +1,401 @@ +; +; Graphics driver for the 320 pixels across, 200 pixels down, 256 colors mode +; on the Commander X16 +; +; 2020-07-02, Greg King <gregdk@users.sf.net> +; + + .include "zeropage.inc" + + .include "tgi-kernel.inc" + .include "tgi-error.inc" + + .include "cbm_kernal.inc" + .include "cx16.inc" + + .macpack generic + .macpack module + + +; Macro that copies a word into a pseudo-register + +.mac setReg reg, src + lda src + ldx src+1 + sta gREG::reg + stx gREG::reg+1 +.endmac + + +; ------------------------------------------------------------------------ +; Header. Includes jump table and constants. + + module_header _cx320p1_tgi ; 320 pixels across, 1 pixel per byte + +; First part of the header is a structure that has a signature, +; and defines the capabilities of the driver. + + .byte $74, $67, $69 ; ASCII "tgi" + .byte TGI_API_VERSION ; TGI API version number + .addr $0000 ; Library reference + .word 320 ; X resolution + .word 200 ; Y resolution + .byte <$0100 ; Number of drawing colors + .byte 1 ; Number of screens available + .byte 8 ; System font X size + .byte 8 ; System font Y size + .word $0100 ; Aspect ratio (based on VGA display) + .byte 0 ; TGI driver flags + +; Next, comes the jump table. Currently, all entries must be valid, +; and may point to an RTS for test versions (function not implemented). + + .addr INSTALL + .addr UNINSTALL + .addr INIT + .addr DONE + .addr GETERROR + .addr CONTROL + .addr CLEAR + .addr SETVIEWPAGE + .addr SETDRAWPAGE + .addr SETCOLOR + .addr SETPALETTE + .addr GETPALETTE + .addr GETDEFPALETTE + .addr SETPIXEL + .addr GETPIXEL + .addr LINE + .addr BAR + .addr TEXTSTYLE + .addr OUTTEXT + + +; ------------------------------------------------------------------------ +; Constant + +GRAPH320 = $80 + +; ------------------------------------------------------------------------ +; Data + +; Variables mapped to the zero-page segment variables. Some of these are +; used for passing parameters to the driver. + +X1 := ptr1 +Y1 := ptr2 +X2 := ptr3 +Y2 := ptr4 + +; Absolute variables used in the code + +.bss + +; The colors are indicies into a TGI palette. The TGI palette is indicies into +; VERA's palette. Vera's palette is a table of Red, Green, and Blue levels. +; The first 16 RGB elements mimic the Commodore 64's colors. + +defpalette: .res $0100 +palette: .res $0100 + +bcolor := palette + 0 ; Background color +color: .res 1 ; Stroke and fill index +mode: .res 1 ; Old text mode + +.data + +error: .byte TGI_ERR_OK ; Error code + + +.code + +; ------------------------------------------------------------------------ +; INSTALL routine. Is called after the driver is loaded into memory. May +; initialize anything that has to be done just once. Is probably empty +; most of the time. +; +; Must set an error code: NO + +INSTALL: +; Create the default palette. + + ldx #$00 +: txa + sta defpalette,x + inx + bnz :- + + ; Fall through. + +; ------------------------------------------------------------------------ +; UNINSTALL routine. Is called before the driver is removed from memory. May +; clean up anything done by INSTALL, but is probably empty most of the time. +; +; Must set an error code: NO + +UNINSTALL: + rts + +; ------------------------------------------------------------------------ +; INIT: Changes an already installed device from text mode to graphics +; mode. +; Note that INIT/DONE may be called multiple times while the driver +; is loaded, while INSTALL is called only once; so, any code that is needed +; to initiate variables and so on must go here. Setting the palette is not +; needed because that is called by the graphics kernel later. +; The graphics kernel never will call INIT when a graphics mode already is +; active, so there is no need to protect against that. +; +; Must set an error code: YES + +INIT: stz error ; #TGI_ERR_OK + +; Save the current text mode. + + lda SCREEN_MODE + sta mode + +; Switch into (320 x 200 x 256) graphics mode. + + lda #GRAPH320 + jmp SCREEN_SET_MODE + +; ------------------------------------------------------------------------ +; DONE: Will be called to switch the graphics device back into text mode. +; The graphics kernel never will call DONE when no graphics mode is active, +; so there is no need to protect against that. +; +; Must set an error code: NO + +DONE: +; Work around a prerelease 37 Kernal bug. +; VERA (graphics) layer 0 isn't disabled by SCREEN_SET_MODE. + + stz VERA::CTRL + lda VERA::DISP::VIDEO + and #<~VERA::DISP::ENABLE::LAYER0 + sta VERA::DISP::VIDEO + + lda mode + jmp SCREEN_SET_MODE + +; ------------------------------------------------------------------------ +; GETERROR: Return the error code in .A, and clear it. + +GETERROR: + lda error + stz error + rts + +; ------------------------------------------------------------------------ +; CONTROL: Platform-/driver-specific entry point. +; +; Must set an error code: YES + +CONTROL: + lda #TGI_ERR_INV_FUNC + sta error + rts + +; ------------------------------------------------------------------------ +; CLEAR: Clear the screen. +; +; Must set an error code: NO + +CLEAR := GRAPH_CLEAR + +; ------------------------------------------------------------------------ +; SETVIEWPAGE: Set the visible page. Called with the new page in .A (0..n-1). +; The page number already is checked to be valid by the graphics kernel. +; +; Must set an error code: NO (will be called only if page OK) + +SETVIEWPAGE: + + ; Fall through. + +; ------------------------------------------------------------------------ +; SETDRAWPAGE: Set the drawable page. Called with the new page in .A (0..n-1). +; The page number already is checked to be valid by the graphics kernel. +; +; Must set an error code: NO (will be called only if page OK) + +SETDRAWPAGE: + rts + +; ------------------------------------------------------------------------ +; SETPALETTE: Set the palette (not available with all drivers/hardware). +; A pointer to the palette is passed in ptr1. Must set an error if palettes +; are not supported +; +; Must set an error code: YES + +SETPALETTE: + stz error ; #TGI_ERR_OK + ldy #$00 +: lda (ptr1),y + sta palette,y + iny + bnz :- + + lda color ; Get stroke and fill index + + ; Fall through. + +; ------------------------------------------------------------------------ +; SETCOLOR: Set the drawing color (in .A). The new color already is checked +; to be in a valid range (0..maxcolor). +; +; Must set an error code: NO (will be called only if color OK) + +SETCOLOR: + tax + sta color + lda palette,x ; Set stroke and fill color + tax + ldy bcolor ; Get background color + jmp GRAPH_SET_COLORS + +; ------------------------------------------------------------------------ +; GETPALETTE: Return the current palette in .XA. Even drivers that cannot +; set the palette should return the default palette here, so there's no +; way for this function to fail. +; +; Must set an error code: NO + +GETPALETTE: + lda #<palette + ldx #>palette + rts + +; ------------------------------------------------------------------------ +; GETDEFPALETTE: Return the default palette for the driver in .XA. All +; drivers should return something reasonable here, even drivers that don't +; support palettes, otherwise the caller has no way to determine the colors +; of the (not changable) palette. +; +; Must set an error code: NO (all drivers must have a default palette) + +GETDEFPALETTE: + lda #<defpalette + ldx #>defpalette + rts + +; ------------------------------------------------------------------------ +; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing +; color. The co-ordinates passed to this function never are outside the +; visible screen area, so there is no need for clipping inside this function. +; +; Must set an error code: NO + +SETPIXEL: + jsr Point + jsr FB_CURSOR_POSITION + ldx color + lda palette,x + jmp FB_SET_PIXEL + +; ------------------------------------------------------------------------ +; GETPIXEL: Read the color value of a pixel, and return it in .XA. The +; co-ordinates passed to this function never are outside the visible screen +; area, so there is no need for clipping inside this function. + +GETPIXEL: + jsr Point + jsr FB_CURSOR_POSITION + jsr FB_GET_PIXEL + ldx #>$0000 + rts + +; ------------------------------------------------------------------------ +; LINE: Draw a line from X1/Y1 to X2/Y2, where X1/Y1 = ptr1/ptr2 and +; X2/Y2 = ptr3/ptr4, using the current drawing color. +; +; Must set an error code: NO + +LINE: jsr Point + setReg r2, X2 + setReg r3, Y2 + jmp GRAPH_DRAW_LINE + +; ------------------------------------------------------------------------ +; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where +; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4, using the current drawing color. +; Contrary to most other functions, the graphics kernel will sort and clip +; the co-ordinates before calling the driver; so on entry, the following +; conditions are valid: +; X1 <= X2 +; Y1 <= Y2 +; (X1 >= 0) && (X1 < XRES) +; (X2 >= 0) && (X2 < XRES) +; (Y1 >= 0) && (Y1 < YRES) +; (Y2 >= 0) && (Y2 < YRES) +; +; Must set an error code: NO + +BAR: +; Set the starting corner. + + jsr Point + +; Set the width. + + lda X2 + sub X1 + sta gREG::r2 + lda X2+1 + sbc X1+1 + sta gREG::r2+1 + +; Set the height. + + lda Y2 + sub Y1 + sta gREG::r3 + lda Y2+1 + sbc Y1+1 + sta gREG::r3+1 + +; Set the corner radius. + + stz gREG::r4 + stz gREG::r4+1 + + sec ; Fill the rectangle + jmp GRAPH_DRAW_RECT + +; ------------------------------------------------------------------------ +; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y +; directions are passed in .X and .Y, the text direction is passed in .A. +; +; Must set an error code: NO + +TEXTSTYLE: + rts + +; ------------------------------------------------------------------------ +; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the +; current text style. The text to output is given as a zero-terminated +; string with address in ptr3. +; +; Must set an error code: NO + +OUTTEXT: + jsr Point + + ldy #$00 +@next: lda (ptr3),y + bze @end + phy + jsr GRAPH_PUT_CHAR + ply + iny + bnz @next +@end: rts + +; ------------------------------------------------------------------------ +; Point: Set the arguments for the first point of a Kernal graphics function. + +Point: setReg r0, X1 + setReg r1, Y1 + rts diff --git a/libsrc/cx16/tgi_stat_stddrv.s b/libsrc/cx16/tgi_stat_stddrv.s index e501f4c2f..e3cec1c8c 100644 --- a/libsrc/cx16/tgi_stat_stddrv.s +++ b/libsrc/cx16/tgi_stat_stddrv.s @@ -1,10 +1,11 @@ ; ; Address of the static standard TGI driver ; -; 2019-12-22, Greg King +; 2020-06-04, Greg King ; ; const void tgi_static_stddrv[]; ; - .import _cx16_320x8b_tgi - .export _tgi_static_stddrv := _cx16_320x8b_tgi + .import _cx320p1_tgi ; 320 pixels across, 1 pixel per byte + + .export _tgi_static_stddrv := _cx320p1_tgi diff --git a/libsrc/cx16/tgi_stddrv.s b/libsrc/cx16/tgi_stddrv.s index 0e46a6cb3..f05ab7131 100644 --- a/libsrc/cx16/tgi_stddrv.s +++ b/libsrc/cx16/tgi_stddrv.s @@ -1,12 +1,14 @@ ; ; Name of the standard TGI driver ; -; 2019-12-22, Greg King +; 2020-06-04, Greg King ; ; const char tgi_stddrv[]; ; .export _tgi_stddrv +; A FAT32 8+3 file-name (for SD cards) + .rodata -_tgi_stddrv: .asciiz "cx16-320x8b.tgi" +_tgi_stddrv: .asciiz "cx320p1.tgi" diff --git a/samples/mandelbrot.c b/samples/mandelbrot.c index d7291c5b5..595bcfbbb 100644 --- a/samples/mandelbrot.c +++ b/samples/mandelbrot.c @@ -51,6 +51,7 @@ void mandelbrot (signed short x1, signed short y1, signed short x2, register signed short r, r1, i; register signed short xs, ys, xx, yy; register signed short x, y; + register unsigned char maxcol = MAXCOL; /* Calc stepwidth */ xs = ((x2 - x1) / (SCREEN_X)); @@ -76,10 +77,15 @@ void mandelbrot (signed short x1, signed short y1, signed short x2, if (count == maxiterations) { tgi_setcolor (0); } else { - if (MAXCOL == 2) { + switch (maxcol) { + case 2: tgi_setcolor (1); - } else { - tgi_setcolor (count % MAXCOL); + break; + case 0: /* 256 colors */ + tgi_setcolor (count); + break; + default: + tgi_setcolor (count % maxcol); } } /* Set pixel */ From 0e55d33cc309b88e04b739638a0ed68bafe98a80 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Thu, 16 Jul 2020 17:56:58 +0200 Subject: [PATCH 0234/2710] Fix info page building for newer linuxdoc In ca65.sgml, the following pattern was used in tables in order to create an empty row: ||~@ That is, the first two columns are empty, the last one has an   Unfortunately, with newer linuxdoc, this fails, as the empty columns create two @item directly after each other, which is not allowed. Changing this to ~|~|~@ fixes it by adding an " " into each column. Furthermore, the last line had a "newrow" (@) separator, which created an artifact. Removed that one. --- doc/ca65.sgml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 2c4593d21..8d97bddfd 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -622,7 +622,7 @@ problem in most cases. <tabular ca="clc"> <bf/Operator/| <bf/Description/| <bf/Precedence/@<hline> | Built-in string functions| 0@ -||~@ +~|~|~@ | Built-in pseudo-variables| 1@ | Built-in pseudo-functions| 1@ +| Unary positive| 1@ @@ -635,7 +635,7 @@ problem in most cases. .HIBYTE| Unary high-byte operator| 1@ ^<newline> .BANKBYTE| Unary bank-byte operator| 1@ -||~@ +~|~|~@ *| Multiplication| 2@ /| Division| 2@ .MOD| Modulo operator| 2@ @@ -647,28 +647,28 @@ problem in most cases. .SHL| Shift-left operator| 2@ >><newline> .SHR| Shift-right operator| 2@ -||~@ +~|~|~@ +| Binary addition| 3@ -| Binary subtraction| 3@ |<newline> .BITOR| Bitwise or| 3@ -||~@ +~|~|~@ = | Compare operator (equal)| 4@ <>| Compare operator (not equal)| 4@ <| Compare operator (less)| 4@ >| Compare operator (greater)| 4@ <=| Compare operator (less or equal)| 4@ >=| Compare operator (greater or equal)| 4@ -||~@ +~|~|~@ &&<newline> .AND| Boolean and| 5@ .XOR| Boolean xor| 5@ -||~@ +~|~|~@ ||<newline> .OR| Boolean or| 6@ -||~@ +~|~|~@ !<newline> -.NOT| Boolean not| 7@<hline> +.NOT| Boolean not| 7 </tabular> <caption>Available operators, sorted by precedence </table> From ba48dfe65ddab173a00f85bcba272fc227f59824 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 16 Jul 2020 14:06:23 -0400 Subject: [PATCH 0235/2710] Fixed a typo in the CX16 document. --- doc/cx16.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/cx16.sgml b/doc/cx16.sgml index a73bb3c1e..490d07849 100644 --- a/doc/cx16.sgml +++ b/doc/cx16.sgml @@ -20,7 +20,7 @@ The Commander X16 is a modern small computer with firmware that is based partly on the ROMs in Commodore's VIC-20 and 64C. It has a couple of I/O chips (WDC65C22 VIA) that are like the ones in the VIC-20. It supports file storage on Secure Digital cards. It allows two joysticks and a mouse. It has three -sound devices. It's VGA screen has twice the range of the C64 (similar to the +sound devices. Its VGA screen has twice the range of the C64 (similar to the C128's 80-column screen), with 256 colors. This file contains an overview of the CX16 run-time system as it comes with the From 21084895230d137db87f8a4febac8a9359e8e548 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 15 Jul 2020 20:22:28 +0800 Subject: [PATCH 0236/2710] Fix for Issue #1075 and #1077. --- src/cc65/assignment.c | 6 +- src/cc65/codegen.c | 5 + src/cc65/codegen.h | 7 +- src/cc65/declare.c | 9 +- src/cc65/expr.c | 231 +++++++++++++++++++------------------ src/cc65/exprdesc.c | 196 ++++++++++++++++++++++++++----- src/cc65/exprdesc.h | 263 ++++++++++++++++++++++++++++++++---------- src/cc65/loadexpr.c | 80 ++++++++----- src/cc65/locals.c | 2 +- src/cc65/shiftexpr.c | 10 +- src/cc65/stdfunc.c | 30 ++--- src/cc65/typeconv.c | 19 ++- 12 files changed, 598 insertions(+), 260 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index f0607ac58..8e42a338f 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -98,7 +98,7 @@ void Assignment (ExprDesc* Expr) if (UseReg) { PushAddr (Expr); } else { - ED_MakeRVal (Expr); + ED_MarkExprAsRVal (Expr); LoadExpr (CF_NONE, Expr); g_push (CF_PTR | CF_UNSIGNED, 0); } @@ -127,7 +127,7 @@ void Assignment (ExprDesc* Expr) } else { /* We will use memcpy. Push the address of the rhs */ - ED_MakeRVal (&Expr2); + ED_MarkExprAsRVal (&Expr2); LoadExpr (CF_NONE, &Expr2); /* Push the address (or whatever is in ax in case of errors) */ @@ -264,5 +264,5 @@ void Assignment (ExprDesc* Expr) } /* Value is still in primary and not an lvalue */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); } diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 920d8fe90..7af329b91 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -100,6 +100,11 @@ static const char* GetLabelName (unsigned Flags, uintptr_t Label, long Offs) /* Create the correct label name */ switch (Flags & CF_ADDRMASK) { + case CF_IMM: + /* Immediate constant values */ + xsprintf (Buf, sizeof (Buf), "$%04X", (unsigned)((Offs) & 0xFFFF)); + break; + case CF_STATIC: /* Static memory cell */ if (Offs) { diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index 6f61b33a6..af539df8b 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -81,11 +81,12 @@ #define CF_TEST 0x0080 /* Test value */ #define CF_FIXARGC 0x0100 /* Function has fixed arg count */ #define CF_FORCECHAR 0x0200 /* Handle chars as chars, not ints */ -#define CF_REG 0x0800 /* Value is in primary register */ /* Type of static address */ -#define CF_ADDRMASK 0xF000 /* Type of address */ -#define CF_STATIC 0x0000 /* Static local */ +#define CF_ADDRMASK 0xFC00 /* Type of address */ +#define CF_IMM 0x0000 /* Value is pure rvalue and has no address */ +#define CF_REG 0x0400 /* Value is in primary register */ +#define CF_STATIC 0x0800 /* Static local */ #define CF_EXTERNAL 0x1000 /* Static external */ #define CF_ABSOLUTE 0x2000 /* Numeric absolute address */ #define CF_LOCAL 0x4000 /* Auto variable */ diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 58baaf769..5827eb6dc 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1773,9 +1773,14 @@ static void DefineData (ExprDesc* Expr) { switch (ED_GetLoc (Expr)) { + case E_LOC_NONE: + /* Immediate numeric value with no storage */ + g_defdata (CF_IMM | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); + break; + case E_LOC_ABS: - /* Absolute: numeric address or const */ - g_defdata (TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); + /* Absolute numeric address */ + g_defdata (CF_ABSOLUTE | TypeOf(Expr->Type) | CF_CONST, Expr->IVal, 0); break; case E_LOC_GLOBAL: diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 84f11189e..38a52e744 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -83,6 +83,7 @@ static unsigned GlobalModeFlags (const ExprDesc* Expr) /* Return the addressing mode flags for the given expression */ { switch (ED_GetLoc (Expr)) { + case E_LOC_NONE: return CF_IMM; case E_LOC_ABS: return CF_ABSOLUTE; case E_LOC_GLOBAL: return CF_EXTERNAL; case E_LOC_STATIC: return CF_STATIC; @@ -183,7 +184,7 @@ static unsigned typeadjust (ExprDesc* lhs, ExprDesc* rhs, int NoPush) /* Generate type adjustment code if needed */ ltype = TypeOf (lhst); - if (ED_IsLocAbs (lhs)) { + if (ED_IsLocNone (lhs)) { ltype |= CF_CONST; } if (NoPush) { @@ -191,7 +192,7 @@ static unsigned typeadjust (ExprDesc* lhs, ExprDesc* rhs, int NoPush) ltype |= CF_REG; } rtype = TypeOf (rhst); - if (ED_IsLocAbs (rhs)) { + if (ED_IsLocNone (rhs)) { rtype |= CF_CONST; } flags = g_typeadjust (ltype, rtype); @@ -506,7 +507,7 @@ static void FunctionCall (ExprDesc* Expr) ** the pointer into the primary and mark it as an expression. */ LoadExpr (CF_NONE, Expr); - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); /* Remember the code position */ GetCodePos (&Mark); @@ -646,7 +647,7 @@ static void FunctionCall (ExprDesc* Expr) } /* The function result is an rvalue in the primary register */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); Expr->Type = GetFuncReturn (Expr->Type); } @@ -663,7 +664,7 @@ static void Primary (ExprDesc* E) /* Character and integer constants. */ if (CurTok.Tok == TOK_ICONST || CurTok.Tok == TOK_CCONST) { E->IVal = CurTok.IVal; - E->Flags = E_LOC_ABS | E_RTYPE_RVAL; + E->Flags = E_LOC_NONE | E_RTYPE_RVAL; E->Type = CurTok.Type; NextToken (); return; @@ -672,7 +673,7 @@ static void Primary (ExprDesc* E) /* Floating point constant */ if (CurTok.Tok == TOK_FCONST) { E->FVal = CurTok.FVal; - E->Flags = E_LOC_ABS | E_RTYPE_RVAL; + E->Flags = E_LOC_NONE | E_RTYPE_RVAL; E->Type = CurTok.Type; NextToken (); return; @@ -716,7 +717,7 @@ static void Primary (ExprDesc* E) NextToken (); Entry = AddLabelSym (CurTok.Ident, SC_REF | SC_GOTO_IND); /* output its label */ - E->Flags = E_RTYPE_RVAL | E_LOC_STATIC; + E->Flags = E_RTYPE_RVAL | E_LOC_STATIC | E_ADDRESS_OF; E->Name = Entry->V.L.Label; E->Type = PointerTo (type_void); NextToken (); @@ -756,7 +757,7 @@ static void Primary (ExprDesc* E) /* Check for legal symbol types */ if ((Sym->Flags & SC_CONST) == SC_CONST) { /* Enum or some other numeric constant */ - E->Flags = E_LOC_ABS | E_RTYPE_RVAL; + E->Flags = E_LOC_NONE | E_RTYPE_RVAL; E->IVal = Sym->V.ConstVal; } else if ((Sym->Flags & SC_FUNC) == SC_FUNC) { /* Function */ @@ -797,12 +798,12 @@ static void Primary (ExprDesc* E) /* We've made all variables lvalues above. However, this is ** not always correct: An array is actually the address of its - ** first element, which is a rvalue, and a function is a + ** first element, which is an rvalue, and a function is an ** rvalue, too, because we cannot store anything in a function. ** So fix the flags depending on the type. */ if (IsTypeArray (E->Type) || IsTypeFunc (E->Type)) { - ED_MakeRVal (E); + ED_AddrExpr (E); } } else { @@ -845,7 +846,7 @@ static void Primary (ExprDesc* E) /* String literal */ E->LVal = UseLiteral (CurTok.SVal); E->Type = GetCharArrayType (GetLiteralSize (CurTok.SVal)); - E->Flags = E_LOC_LITERAL | E_RTYPE_RVAL; + E->Flags = E_LOC_LITERAL | E_RTYPE_RVAL | E_ADDRESS_OF; E->IVal = 0; E->Name = GetLiteralLabel (CurTok.SVal); NextToken (); @@ -854,7 +855,7 @@ static void Primary (ExprDesc* E) case TOK_ASM: /* ASM statement */ AsmStatement (); - E->Flags = E_LOC_EXPR | E_RTYPE_RVAL; + E->Flags = E_RTYPE_RVAL; E->Type = type_void; break; @@ -912,12 +913,11 @@ static void ArrayRef (ExprDesc* Expr) /* We can apply a special treatment for arrays that have a const base ** address. This is true for most arrays and will produce a lot better - ** code. Check if this is a const base address. + ** code. Check if this is a "quasi-const base" address. */ - ConstBaseAddr = ED_IsRVal (Expr) && - (ED_IsLocConst (Expr) || ED_IsLocStack (Expr)); + ConstBaseAddr = ED_IsRVal (Expr) && ED_IsLocQuasiConst (Expr); - /* If we have a constant base, we delay the address fetch */ + /* If we have a quasi-const base address, we delay the address fetch */ GetCodePos (&Mark1); if (!ConstBaseAddr) { /* Get a pointer to the array into the primary */ @@ -984,7 +984,7 @@ static void ArrayRef (ExprDesc* Expr) /* If the subscript is a bit-field, load it and make it an rvalue */ if (ED_IsBitField (&Subscript)) { LoadExpr (CF_NONE, &Subscript); - ED_MakeRValExpr (&Subscript); + ED_FinalizeRValLoad (&Subscript); } /* Check if the subscript is constant absolute value */ @@ -1015,25 +1015,21 @@ static void ArrayRef (ExprDesc* Expr) ** already in Expr. If the base address was a constant, we can even ** remove the code that loaded the address into the primary. */ - if (IsTypeArray (Expr->Type)) { - - /* Adjust the offset */ - Expr->IVal += Subscript.IVal; - - } else { - + if (!IsTypeArray (Expr->Type)) { + /* It's a pointer, so we do have to load it into the primary ** first (if it's not already there). */ - if (ConstBaseAddr || ED_IsLVal (Expr)) { + if (!ConstBaseAddr && ED_IsLVal (Expr)) { LoadExpr (CF_NONE, Expr); - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); } - - /* Use the offset */ - Expr->IVal = Subscript.IVal; } + /* Adjust the offset */ + Expr->IVal += Subscript.IVal; + + } else { /* Scale the rhs value according to the element type */ @@ -1106,7 +1102,7 @@ static void ArrayRef (ExprDesc* Expr) ** subscript was not scaled, that is, if this was a byte array ** or pointer. */ - if ((ED_IsLocConst (&Subscript) || ED_IsLocStack (&Subscript)) && + if (ED_IsLocQuasiConst (&Subscript) && CheckedSizeOf (ElementType) == SIZEOF_CHAR) { unsigned Flags; @@ -1131,12 +1127,13 @@ static void ArrayRef (ExprDesc* Expr) } } else { - if (ED_IsLocAbs (Expr)) { + if (ED_IsLocNone (Expr) || + (ED_IsLocAbs (Expr) && ED_IsAddrExpr (Expr))) { /* Constant numeric address. Just add it */ g_inc (CF_INT, Expr->IVal); } else if (ED_IsLocStack (Expr)) { /* Base address is a local variable address */ - if (IsTypeArray (Expr->Type)) { + if (ED_IsAddrExpr (Expr)) { g_addaddr_local (CF_INT, Expr->IVal); } else { g_addlocal (CF_PTR, Expr->IVal); @@ -1144,7 +1141,7 @@ static void ArrayRef (ExprDesc* Expr) } else { /* Base address is a static variable address */ unsigned Flags = CF_INT | GlobalModeFlags (Expr); - if (ED_IsRVal (Expr)) { + if (ED_IsAddrExpr (Expr)) { /* Add the address of the location */ g_addaddr_static (Flags, Expr->Name, Expr->IVal); } else { @@ -1153,27 +1150,27 @@ static void ArrayRef (ExprDesc* Expr) } } } - - } - /* The result is an expression in the primary */ - ED_MakeRValExpr (Expr); + /* The pointer is an rvalue in the primary */ + ED_FinalizeRValLoad (Expr); } - /* Result is of element type */ + /* The result is usually an lvalue expression of element type referenced in + ** the primary, unless it's an array which is a rare case. We can just + ** assume the usual case first, and change it later if necessary. + */ + ED_IndExpr (Expr); Expr->Type = ElementType; - /* An array element is actually a variable. So the rules for variables - ** with respect to the reference type apply: If it's an array, it is - ** a rvalue, otherwise it's an lvalue. (A function would also be a rvalue, - ** but an array cannot contain functions). + /* An array element is actually a variable. So the rules for variables with + ** respect to the reference type apply: If it's an array, it is virtually + ** an rvalue address, otherwise it's an lvalue reference. (A function would + ** also be an rvalue address, but an array cannot contain functions). */ if (IsTypeArray (Expr->Type)) { - ED_MakeRVal (Expr); - } else { - ED_MakeLVal (Expr); + ED_AddrExpr (Expr); } /* Consume the closing bracket */ @@ -1210,16 +1207,26 @@ static void StructRef (ExprDesc* Expr) return; } - /* If we have a struct pointer that is an lvalue and not already in the - ** primary, load it now. - */ - if (ED_IsLVal (Expr) && IsTypePtr (Expr->Type)) { + if (IsTypePtr (Expr->Type)) { + /* If we have a struct pointer that is an lvalue and not already in the + ** primary, load its content now. + */ + if (!ED_IsConst (Expr)) { + /* Load into the primary */ + LoadExpr (CF_NONE, Expr); - /* Load into the primary */ + /* Clear the offset */ + Expr->IVal = 0; + } + + /* Dereference the expression */ + ED_IndExpr (Expr); + + } else if (!ED_IsLocQuasiConst (Expr) && !ED_IsLocPrimaryOrExpr (Expr)) { + /* Load the base address into the primary (and use it as a reference + ** later) if it's not quasi-const or in the primary already. + */ LoadExpr (CF_NONE, Expr); - - /* Make it an lvalue expression */ - ED_MakeLValExpr (Expr); } /* The type is the type of the field plus any qualifiers from the struct */ @@ -1235,8 +1242,8 @@ static void StructRef (ExprDesc* Expr) FinalType->C |= Q; } - /* A struct is usually an lvalue. If not, it is a struct in the primary - ** register. + /* A struct is usually an lvalue. If not, it is a struct referenced in the + ** primary register, which is likely to be returned from a function. */ if (ED_IsRVal (Expr) && ED_IsLocExpr (Expr) && !IsTypePtr (Expr->Type)) { @@ -1289,13 +1296,12 @@ static void StructRef (ExprDesc* Expr) /* An struct member is actually a variable. So the rules for variables ** with respect to the reference type apply: If it's an array, it is - ** a rvalue, otherwise it's an lvalue. (A function would also be a rvalue, - ** but a struct field cannot be a function). + ** virtually an rvalue address, otherwise it's an lvalue reference. (A + ** function would also be an rvalue address, but a struct field cannot + ** contain functions). */ if (IsTypeArray (Expr->Type)) { - ED_MakeRVal (Expr); - } else { - ED_MakeLVal (Expr); + ED_AddrExpr (Expr); } /* Make the expression a bit field if necessary */ @@ -1391,7 +1397,7 @@ void Store (ExprDesc* Expr, const Type* StoreType) switch (ED_GetLoc (Expr)) { case E_LOC_ABS: - /* Absolute: numeric address or const */ + /* Absolute numeric addressed variable */ g_putstatic (Flags, Expr->IVal, 0); break; @@ -1421,10 +1427,14 @@ void Store (ExprDesc* Expr, const Type* StoreType) break; case E_LOC_EXPR: - /* An expression in the primary register */ + /* An expression referenced in the primary register */ g_putind (Flags, Expr->IVal); break; + case E_LOC_NONE: + /* We may get here as a result of previous compiler errors */ + break; + default: Internal ("Invalid location in Store(): 0x%04X", ED_GetLoc (Expr)); } @@ -1466,7 +1476,7 @@ static void PreInc (ExprDesc* Expr) switch (ED_GetLoc (Expr)) { case E_LOC_ABS: - /* Absolute: numeric address or const */ + /* Absolute numeric addressed variable */ g_addeqstatic (Flags, Expr->IVal, 0, Val); break; @@ -1497,7 +1507,7 @@ static void PreInc (ExprDesc* Expr) break; case E_LOC_EXPR: - /* An expression in the primary register */ + /* An expression referenced in the primary register */ g_addeqind (Flags, Expr->IVal, Val); break; @@ -1506,7 +1516,7 @@ static void PreInc (ExprDesc* Expr) } /* Result is an expression, no reference */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); } @@ -1542,7 +1552,7 @@ static void PreDec (ExprDesc* Expr) switch (ED_GetLoc (Expr)) { case E_LOC_ABS: - /* Absolute: numeric address or const */ + /* Absolute numeric addressed variable */ g_subeqstatic (Flags, Expr->IVal, 0, Val); break; @@ -1582,7 +1592,7 @@ static void PreDec (ExprDesc* Expr) } /* Result is an expression, no reference */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); } @@ -1638,7 +1648,7 @@ static void PostInc (ExprDesc* Expr) } /* The result is always an expression, no reference */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); } @@ -1694,7 +1704,7 @@ static void PostDec (ExprDesc* Expr) } /* The result is always an expression, no reference */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); } @@ -1741,8 +1751,8 @@ static void UnaryOp (ExprDesc* Expr) default: Internal ("Unexpected token: %d", Tok); } - /* The result is a rvalue in the primary */ - ED_MakeRValExpr (Expr); + /* The result is an rvalue in the primary */ + ED_FinalizeRValLoad (Expr); } } @@ -1776,7 +1786,7 @@ void hie10 (ExprDesc* Expr) Expr->IVal = !Expr->IVal; } else { g_bneg (TypeOf (Expr->Type)); - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); ED_TestDone (Expr); /* bneg will set cc */ } break; @@ -1784,13 +1794,14 @@ void hie10 (ExprDesc* Expr) case TOK_STAR: NextToken (); ExprWithCheck (hie10, Expr); - if (ED_IsLVal (Expr) || !(ED_IsLocConst (Expr) || ED_IsLocStack (Expr))) { - /* Not a const, load it into the primary and make it a + if (ED_IsLVal (Expr) || !ED_IsLocQuasiConst (Expr)) { + /* Not a const, load the pointer into the primary and make it a ** calculated value. */ LoadExpr (CF_NONE, Expr); - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); } + /* If the expression is already a pointer to function, the ** additional dereferencing operator must be ignored. A function ** itself is represented as "pointer to function", so any number @@ -1799,7 +1810,7 @@ void hie10 (ExprDesc* Expr) */ if (IsTypeFuncPtr (Expr->Type) || IsTypeFunc (Expr->Type)) { /* Expression not storable */ - ED_MakeRVal (Expr); + ED_MarkExprAsRVal (Expr); } else { if (IsClassPtr (Expr->Type)) { Expr->Type = Indirect (Expr->Type); @@ -1810,8 +1821,8 @@ void hie10 (ExprDesc* Expr) ** address -- it already is the location of the first element. */ if (!IsTypeArray (Expr->Type)) { - /* The * operator yields an lvalue */ - ED_MakeLVal (Expr); + /* The * operator yields an lvalue reference */ + ED_IndExpr (Expr); } } break; @@ -1831,8 +1842,8 @@ void hie10 (ExprDesc* Expr) Expr->Flags &= ~E_BITFIELD; } Expr->Type = PointerTo (Expr->Type); - /* The & operator yields an rvalue */ - ED_MakeRVal (Expr); + /* The & operator yields an rvalue address */ + ED_AddrExpr (Expr); } break; @@ -2067,8 +2078,8 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ /* Generate code */ Gen->Func (type, Expr->IVal); - /* We have a rvalue in the primary now */ - ED_MakeRValExpr (Expr); + /* We have an rvalue in the primary now */ + ED_FinalizeRValLoad (Expr); } else { @@ -2100,8 +2111,8 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ /* Generate code */ Gen->Func (type, Expr2.IVal); - /* We have a rvalue in the primary now */ - ED_MakeRValExpr (Expr); + /* We have an rvalue in the primary now */ + ED_FinalizeRValLoad (Expr); } } } @@ -2441,7 +2452,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ GenFunc (flags, Expr2.IVal); /* The result is an rvalue in the primary */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); } /* Result type is always int */ @@ -2534,7 +2545,7 @@ static void parseadd (ExprDesc* Expr) rhst = Expr2.Type; /* Setup flags */ - if (ED_IsLocAbs (Expr)) { + if (ED_IsLocNone (Expr)) { /* A numerical constant */ flags |= CF_CONST; } else { @@ -2549,7 +2560,7 @@ static void parseadd (ExprDesc* Expr) /* Operate on pointers, result type is a pointer */ flags |= CF_PTR; /* Generate the code for the add */ - if (ED_GetLoc (Expr) == E_LOC_ABS) { + if (ED_GetLoc (Expr) == E_LOC_NONE) { /* Numeric constant */ g_inc (flags, Expr->IVal); } else { @@ -2569,7 +2580,7 @@ static void parseadd (ExprDesc* Expr) ** not a numeric constant, and the scale factor is not one ** (no scaling), we must take the long way over the stack. */ - if (ED_IsLocAbs (Expr)) { + if (ED_IsLocNone (Expr)) { /* Numeric constant, scale lhs */ Expr->IVal *= ScaleFactor; /* Generate the code for the add */ @@ -2588,7 +2599,7 @@ static void parseadd (ExprDesc* Expr) /* Integer addition */ flags |= typeadjust (Expr, &Expr2, 1); /* Generate the code for the add */ - if (ED_IsLocAbs (Expr)) { + if (ED_IsLocNone (Expr)) { /* Numeric constant */ g_inc (flags, Expr->IVal); } else { @@ -2601,8 +2612,8 @@ static void parseadd (ExprDesc* Expr) flags = CF_INT; } - /* Result is a rvalue in primary register */ - ED_MakeRValExpr (Expr); + /* Result is an rvalue in primary register */ + ED_FinalizeRValLoad (Expr); } } else { @@ -2692,8 +2703,8 @@ static void parseadd (ExprDesc* Expr) } - /* Result is a rvalue in primary register */ - ED_MakeRValExpr (Expr); + /* Result is an rvalue in primary register */ + ED_FinalizeRValLoad (Expr); } /* Condition codes not set */ @@ -2825,8 +2836,8 @@ static void parsesub (ExprDesc* Expr) g_scale (flags, -rscale); } - /* Result is a rvalue in the primary register */ - ED_MakeRValExpr (Expr); + /* Result is an rvalue in the primary register */ + ED_FinalizeRValLoad (Expr); ED_MarkAsUntested (Expr); } @@ -2860,8 +2871,8 @@ static void parsesub (ExprDesc* Expr) ** the lhs is const, we have to remove this mark, since this is no ** longer true, lhs is on stack instead. */ - if (ED_IsLocAbs (Expr)) { - ED_MakeRValExpr (Expr); + if (ED_IsLocNone (Expr)) { + ED_FinalizeRValLoad (Expr); } /* Adjust operand types */ flags = typeadjust (Expr, &Expr2, 0); @@ -2879,8 +2890,8 @@ static void parsesub (ExprDesc* Expr) g_scale (flags, -rscale); } - /* Result is a rvalue in the primary register */ - ED_MakeRValExpr (Expr); + /* Result is an rvalue in the primary register */ + ED_FinalizeRValLoad (Expr); ED_MarkAsUntested (Expr); } } @@ -3070,7 +3081,7 @@ static void hieAnd (ExprDesc* Expr, unsigned TrueLab, int* BoolOp) g_defcodelabel (FalseLab); /* The result is an rvalue in primary */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); ED_TestDone (Expr); /* Condition codes are set */ } } @@ -3133,7 +3144,7 @@ static void hieOr (ExprDesc *Expr) } /* The result is an rvalue in primary */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); ED_TestDone (Expr); /* Condition codes are set */ } @@ -3189,7 +3200,7 @@ static void hieQuest (ExprDesc* Expr) if (!IsTypeVoid (Expr2.Type)) { /* Load it into the primary */ LoadExpr (CF_NONE, &Expr2); - ED_MakeRValExpr (&Expr2); + ED_FinalizeRValLoad (&Expr2); Expr2.Type = PtrConversion (Expr2.Type); } @@ -3212,7 +3223,7 @@ static void hieQuest (ExprDesc* Expr) if (!IsTypeVoid (Expr3.Type)) { /* Load it into the primary */ LoadExpr (CF_NONE, &Expr3); - ED_MakeRValExpr (&Expr3); + ED_FinalizeRValLoad (&Expr3); Expr3.Type = PtrConversion (Expr3.Type); } @@ -3278,7 +3289,7 @@ static void hieQuest (ExprDesc* Expr) g_defcodelabel (TrueLab); /* Setup the target expression */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); Expr->Type = ResultType; } } @@ -3294,7 +3305,7 @@ static void opeq (const GenDesc* Gen, ExprDesc* Expr, const char* Op) int MustScale; /* op= can only be used with lvalues */ - if (!ED_IsLVal (Expr)) { + if (ED_IsRVal (Expr)) { Error ("Invalid lvalue in assignment"); return; } @@ -3396,7 +3407,7 @@ static void opeq (const GenDesc* Gen, ExprDesc* Expr, const char* Op) Gen->Func (g_typeadjust (flags, TypeOf (Expr2.Type)), 0); } Store (Expr, 0); - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); } @@ -3410,7 +3421,7 @@ static void addsubeq (const GenDesc* Gen, ExprDesc *Expr, const char* Op) int MustScale; - /* We're currently only able to handle some adressing modes */ + /* We're currently only able to handle some addressing modes */ if (ED_GetLoc (Expr) == E_LOC_EXPR || ED_GetLoc (Expr) == E_LOC_PRIMARY) { /* Use generic routine */ opeq (Gen, Expr, Op); @@ -3487,7 +3498,7 @@ static void addsubeq (const GenDesc* Gen, ExprDesc *Expr, const char* Op) switch (ED_GetLoc (Expr)) { case E_LOC_ABS: - /* Absolute: numeric address or const */ + /* Absolute numeric addressed variable */ if (Gen->Tok == TOK_PLUS_ASSIGN) { g_addeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal); } else { @@ -3536,8 +3547,8 @@ static void addsubeq (const GenDesc* Gen, ExprDesc *Expr, const char* Op) Internal ("Invalid location in Store(): 0x%04X", ED_GetLoc (Expr)); } - /* Expression is a rvalue in the primary now */ - ED_MakeRValExpr (Expr); + /* Expression is an rvalue in the primary now */ + ED_FinalizeRValLoad (Expr); } diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index 46377ac6b..5ff848fb7 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -80,6 +80,39 @@ void ED_MakeBitField (ExprDesc* Expr, unsigned BitOffs, unsigned BitWidth) +#if !defined(HAVE_INLINE) +int ED_IsLocQuasiConst (const ExprDesc* Expr) +/* Return true if the expression is a constant location of some sort or on the +** stack. +*/ +{ + return ED_IsLocConst (Expr) || ED_IsLocStack (Expr); +} +#endif + + + +#if !defined(HAVE_INLINE) +int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr) +/* Return true if the expression is E_LOC_PRIMARY or E_LOC_EXPR */ +{ + return ED_IsLocPrimary (Expr) || ED_IsLocExpr (Expr); +} +#endif + + + +#if !defined(HAVE_INLINE) +int ED_IsIndExpr (const ExprDesc* Expr) +/* Check if the expression is a reference to its value */ +{ + return (Expr->Flags & E_ADDRESS_OF) == 0 && + !ED_IsLocNone (Expr) && !ED_IsLocPrimary (Expr); +} +#endif + + + void ED_SetCodeRange (ExprDesc* Expr, const CodeMark* Start, const CodeMark* End) /* Set the code range for this expression */ { @@ -115,8 +148,9 @@ const char* ED_GetLabelName (const ExprDesc* Expr, long Offs) /* Generate a label depending on the location */ switch (ED_GetLoc (Expr)) { + case E_LOC_NONE: case E_LOC_ABS: - /* Absolute: numeric address or const */ + /* Absolute numeric addressed variable */ SB_Printf (&Buf, "$%04X", (int)(Offs & 0xFFFF)); break; @@ -168,11 +202,11 @@ int ED_GetStackOffs (const ExprDesc* Expr, int Offs) ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, Type* Type) -/* Make Expr an absolute const with the given value and type. */ +/* Replace Expr with an absolute const with the given value and type */ { Expr->Sym = 0; Expr->Type = Type; - Expr->Flags = E_LOC_ABS | E_RTYPE_RVAL | (Expr->Flags & E_HAVE_MARKS); + Expr->Flags = E_LOC_NONE | E_RTYPE_RVAL | (Expr->Flags & E_HAVE_MARKS); Expr->Name = 0; Expr->IVal = Value; Expr->FVal = FP_D_Make (0.0); @@ -182,11 +216,11 @@ ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, Type* Type) ExprDesc* ED_MakeConstAbsInt (ExprDesc* Expr, long Value) -/* Make Expr a constant integer expression with the given value */ +/* Replace Expr with a constant integer expression with the given value */ { Expr->Sym = 0; Expr->Type = type_int; - Expr->Flags = E_LOC_ABS | E_RTYPE_RVAL | (Expr->Flags & E_HAVE_MARKS); + Expr->Flags = E_LOC_NONE | E_RTYPE_RVAL | (Expr->Flags & E_HAVE_MARKS); Expr->Name = 0; Expr->IVal = Value; Expr->FVal = FP_D_Make (0.0); @@ -195,14 +229,13 @@ ExprDesc* ED_MakeConstAbsInt (ExprDesc* Expr, long Value) -ExprDesc* ED_MakeRValExpr (ExprDesc* Expr) -/* Convert Expr into a rvalue which is in the primary register without an -** offset. -*/ +ExprDesc* ED_FinalizeRValLoad (ExprDesc* Expr) +/* Finalize the result of LoadExpr to be an rvalue in the primary register */ { Expr->Sym = 0; - Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE | E_BITFIELD | E_NEED_TEST | E_CC_SET); - Expr->Flags |= (E_LOC_EXPR | E_RTYPE_RVAL); + Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE | E_BITFIELD | E_ADDRESS_OF); + Expr->Flags &= ~(E_NEED_TEST | E_CC_SET); + Expr->Flags |= (E_LOC_PRIMARY | E_RTYPE_RVAL); Expr->Name = 0; Expr->IVal = 0; /* No offset */ Expr->FVal = FP_D_Make (0.0); @@ -211,18 +244,106 @@ ExprDesc* ED_MakeRValExpr (ExprDesc* Expr) -ExprDesc* ED_MakeLValExpr (ExprDesc* Expr) -/* Convert Expr into a lvalue which is in the primary register without an -** offset. +ExprDesc* ED_AddrExpr (ExprDesc* Expr) +/* Take address of Expr. The result is always an rvalue */ +{ + switch (Expr->Flags & E_MASK_LOC) { + case E_LOC_NONE: + Error ("Cannot get the address of a numeric constant"); + break; + + case E_LOC_EXPR: + Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE); + Expr->Flags |= E_LOC_PRIMARY | E_RTYPE_RVAL; + break; + + default: + if ((Expr->Flags & E_ADDRESS_OF) == 0) { + Expr->Flags &= ~E_MASK_RTYPE; + Expr->Flags |= E_ADDRESS_OF | E_RTYPE_RVAL; + } else { + /* Due to the way we handle arrays, this may happen if we take + ** the address of a pointer to an array element. + */ + if (!IsTypePtr (Expr->Type)) { + Error ("Cannot get the address of an address"); + } + Expr->Flags &= ~E_MASK_RTYPE; + Expr->Flags |= E_RTYPE_RVAL; + } + break; + } + return Expr; +} + + + +ExprDesc* ED_IndExpr (ExprDesc* Expr) +/* Dereference Expr */ +{ + switch (Expr->Flags & E_MASK_LOC) { + case E_LOC_NONE: + Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE); + Expr->Flags |= E_LOC_ABS | E_RTYPE_LVAL; + break; + + case E_LOC_PRIMARY: + Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE); + Expr->Flags |= E_LOC_EXPR | E_RTYPE_LVAL; + break; + + default: + if ((Expr->Flags & E_ADDRESS_OF) != 0) { + Expr->Flags &= ~(E_MASK_RTYPE | E_ADDRESS_OF); + Expr->Flags |= E_RTYPE_LVAL; + } else { + /* Due to the limitation of LoadExpr, this may happen after we + ** have loaded the value from a referenced address, in which + ** case the content in the primary no longer refers to the + ** original address. We simply mark this as E_LOC_EXPR so that + ** some info about the original location can be retained. + ** If it's really meant to dereference a "pointer value", it + ** should be done in two steps where the pointervalue should + ** be the manually loaded first before a call into this, and + ** the offset should be manually cleared somewhere outside. + */ + Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE); + Expr->Flags |= E_LOC_EXPR | E_RTYPE_LVAL; + } + break; + } + return Expr; +} + + + +#if !defined(HAVE_INLINE) +int ED_IsAbs (const ExprDesc* Expr) +/* Return true if the expression denotes a numeric value or address. */ +{ + return (Expr->Flags & (E_MASK_LOC)) == (E_LOC_NONE) || + (Expr->Flags & (E_MASK_LOC|E_ADDRESS_OF)) == (E_LOC_ABS|E_ADDRESS_OF); +} +#endif + + + +#if !defined(HAVE_INLINE) +int ED_IsConstAbs (const ExprDesc* Expr) +/* Return true if the expression denotes a constant absolute value. This can be +** a numeric constant, cast to any type. */ { - Expr->Sym = 0; - Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE | E_BITFIELD | E_NEED_TEST | E_CC_SET); - Expr->Flags |= (E_LOC_EXPR | E_RTYPE_LVAL); - Expr->Name = 0; - Expr->IVal = 0; /* No offset */ - Expr->FVal = FP_D_Make (0.0); - return Expr; + return ED_IsRVal (Expr) && ED_IsAbs (Expr); +} +#endif + + + +int ED_IsConstAbsInt (const ExprDesc* Expr) +/* Return true if the expression is a constant (numeric) integer. */ +{ + return ED_IsConstAbs (Expr) && IsClassInt (Expr->Type); } @@ -233,16 +354,27 @@ int ED_IsConst (const ExprDesc* Expr) ** similar. */ { - return ED_IsRVal (Expr) && (Expr->Flags & E_LOC_CONST) != 0; + return (Expr->Flags & E_MASK_LOC) == E_LOC_NONE || ED_IsConstAddr (Expr); } -int ED_IsConstAbsInt (const ExprDesc* Expr) -/* Return true if the expression is a constant (numeric) integer. */ +int ED_IsConstAddr (const ExprDesc* Expr) +/* Return true if the expression denotes a constant address of some sort. This +** can be the address of a global variable (maybe with offset) or similar. +*/ { - return (Expr->Flags & (E_MASK_LOC|E_MASK_RTYPE)) == (E_LOC_ABS|E_RTYPE_RVAL) && - IsClassInt (Expr->Type); + return ED_IsAddrExpr (Expr) && ED_IsLocConst (Expr); +} + + + +int ED_IsQuasiConstAddr (const ExprDesc* Expr) +/* Return true if the expression denotes a quasi-constant address of some sort. +** This can be a constant address or a stack variable address. +*/ +{ + return ED_IsAddrExpr (Expr) && ED_IsLocQuasiConst (Expr); } @@ -251,7 +383,7 @@ int ED_IsNullPtr (const ExprDesc* Expr) /* Return true if the given expression is a NULL pointer constant */ { return (Expr->Flags & (E_MASK_LOC|E_MASK_RTYPE|E_BITFIELD)) == - (E_LOC_ABS|E_RTYPE_RVAL) && + (E_LOC_NONE|E_RTYPE_RVAL) && Expr->IVal == 0 && IsClassInt (Expr->Type); } @@ -293,6 +425,11 @@ void PrintExprDesc (FILE* F, ExprDesc* E) Flags = E->Flags; Sep = '('; fprintf (F, "Flags: 0x%04X ", Flags); + if ((Flags & E_MASK_LOC) == E_LOC_NONE) { + fprintf (F, "%cE_LOC_NONE", Sep); + Flags &= ~E_LOC_NONE; + Sep = ','; + } if (Flags & E_LOC_ABS) { fprintf (F, "%cE_LOC_ABS", Sep); Flags &= ~E_LOC_ABS; @@ -353,6 +490,11 @@ void PrintExprDesc (FILE* F, ExprDesc* E) Flags &= ~E_CC_SET; Sep = ','; } + if (Flags & E_ADDRESS_OF) { + fprintf (F, "%cE_ADDRESS_OF", Sep); + Flags &= ~E_ADDRESS_OF; + Sep = ','; + } if (Flags) { fprintf (F, "%c,0x%04X", Sep, Flags); Sep = ','; diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index e86534902..a61c5d814 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -59,22 +59,57 @@ /* Defines for the flags field of the expression descriptor */ enum { - /* Location: Where is the value we're talking about? */ + /* Location: Where is the value we're talking about? + ** + ** Remarks: + ** - E_LOC_<else> refers to any other than E_LOC_NONE and E_LOC_PRIMARY. + ** - E_LOC_EXPR can be regarded as a generalized E_LOC_<else>. + ** - E_LOC_NONE can be regarded as E_LOC_PRIMARY + E_ADDRESS_OF unless + ** remarked otherwise (see below). + ** - An E_LOC_NONE value is not considered to be an "address". + ** - ref-load doesn't change the location, while rval-load puts into the + ** primary register a "temporary" that is the straight integer rvalue or + ** a "delegate" to the real rvalue somewhere else. + ** - ref-load doesn't change the rval/lval category of the expression, + ** while rval-load converts it to an rvalue if it wasn't. + ** - In practice, ref-load is unimplemented, and can be simulated with + ** adding E_ADDRESS_OF temporaily through LoadExpr + FinalizeLoad, + ** whilst val-load is done with LoadExpr + FinalizeRValLoad. + ** + ** E_LOC_NONE -- ref-load -> + E_LOADED (int rvalue) + ** E_LOC_PRIMARY -- ref-load -> + E_LOADED (unchanged) + ** E_LOC_<else> -- ref-load -> + E_LOADED (reference lvalue) + ** + E_ADDRESS_OF -- ref-load -> + E_LOADED (address rvalue) + ** E_LOC_NONE -- val-load -> E_LOC_PRIMARY (int rvalue) + ** E_LOC_PRIMARY -- val-load -> E_LOC_PRIMARY (unchanged) + ** E_LOC_<else> -- val-load -> E_LOC_PRIMARY (rvalue/delegate) + ** + E_ADDRESS_OF -- val-load -> E_LOC_PRIMARY (address rvalue) + ** E_LOC_NONE -- take address -> (error) + ** E_LOC_PRIMARY -- take address -> + E_ADDRESS_OF (or error) + ** E_LOC_EXPR -- take address -> E_LOC_PRIMARY (address) + ** E_LOC_<else> -- take address -> + E_ADDRESS_OF (address) + ** + E_ADDRESS_OF -- take address -> (error) + ** E_LOC_NONE -- dereference -> E_LOC_ABS (lvalue reference) + ** E_LOC_PRIMARY -- dereference -> E_LOC_EXPR (lvalue reference) + ** E_LOC_<else> -- dereference -> E_LOC_EXPR (pointed-to-value, must load) + ** + E_ADDRESS_OF -- dereference -> (lvalue reference) + */ E_MASK_LOC = 0x00FF, - E_LOC_ABS = 0x0001, /* Absolute: numeric address or const */ + E_LOC_NONE = 0x0000, /* Pure rvalue with no storage */ + E_LOC_ABS = 0x0001, /* Absolute numeric addressed variable */ E_LOC_GLOBAL = 0x0002, /* Global variable */ E_LOC_STATIC = 0x0004, /* Static variable */ E_LOC_REGISTER = 0x0008, /* Register variable */ E_LOC_STACK = 0x0010, /* Value on the stack */ - E_LOC_PRIMARY = 0x0020, /* The primary register */ - E_LOC_EXPR = 0x0040, /* An expression in the primary register */ + E_LOC_PRIMARY = 0x0020, /* Temporary in primary register */ + E_LOC_EXPR = 0x0040, /* A location that the primary register points to */ E_LOC_LITERAL = 0x0080, /* Literal in the literal pool */ /* Constant location of some sort (only if rval) */ - E_LOC_CONST = E_LOC_ABS | E_LOC_GLOBAL | E_LOC_STATIC | + E_LOC_CONST = E_LOC_NONE | E_LOC_ABS | E_LOC_GLOBAL | E_LOC_STATIC | E_LOC_REGISTER | E_LOC_LITERAL, - /* Reference? */ + /* lvalue/rvalue in C language's sense */ E_MASK_RTYPE = 0x0100, E_RTYPE_RVAL = 0x0000, E_RTYPE_LVAL = 0x0100, @@ -88,6 +123,10 @@ enum { E_HAVE_MARKS = 0x1000, /* Code marks are valid */ + E_LOADED = 0x4000, /* Expression is loaded in primary */ + + E_ADDRESS_OF = 0x8000, /* Expression is the address of the lvalue */ + }; /* Forward */ @@ -135,8 +174,18 @@ INLINE int ED_GetLoc (const ExprDesc* Expr) #endif #if defined(HAVE_INLINE) -INLINE int ED_IsLocAbs (const ExprDesc* Expr) +INLINE int ED_IsLocNone (const ExprDesc* Expr) /* Return true if the expression is an absolute value */ +{ + return (Expr->Flags & E_MASK_LOC) == E_LOC_NONE; +} +#else +# define ED_IsLocNone(Expr) (((Expr)->Flags & E_MASK_LOC) == E_LOC_NONE) +#endif + +#if defined(HAVE_INLINE) +INLINE int ED_IsLocAbs (const ExprDesc* Expr) +/* Return true if the expression is referenced with an absolute address */ { return (Expr->Flags & E_MASK_LOC) == E_LOC_ABS; } @@ -151,7 +200,7 @@ INLINE int ED_IsLocRegister (const ExprDesc* Expr) return (Expr->Flags & E_MASK_LOC) == E_LOC_REGISTER; } #else -# define ED_IsLocRegister(Expr) (((Expr)->Flags & E_MASK_LOC) == E_LOC_REGISTER) +# define ED_IsLocRegister(Expr) (((Expr)->Flags & E_MASK_LOC) == E_LOC_REGISTER) #endif #if defined(HAVE_INLINE) @@ -198,50 +247,25 @@ INLINE int ED_IsLocLiteral (const ExprDesc* Expr) INLINE int ED_IsLocConst (const ExprDesc* Expr) /* Return true if the expression is a constant location of some sort */ { - return (Expr->Flags & E_LOC_CONST) != 0; + return ((Expr)->Flags & E_MASK_LOC & ~E_LOC_CONST) == 0; } #else -# define ED_IsLocConst(Expr) (((Expr)->Flags & E_LOC_CONST) != 0) +# define ED_IsLocConst(Expr) (((Expr)->Flags & E_MASK_LOC & ~E_LOC_CONST) == 0) #endif #if defined(HAVE_INLINE) -INLINE int ED_IsLVal (const ExprDesc* Expr) -/* Return true if the expression is a reference */ +INLINE int ED_IsLocQuasiConst (const ExprDesc* Expr) +/* Return true if the expression is a constant location of some sort or on the +** stack. +*/ { - return (Expr->Flags & E_MASK_RTYPE) == E_RTYPE_LVAL; + return ED_IsLocConst (Expr) || ED_IsLocStack (Expr); } #else -# define ED_IsLVal(Expr) (((Expr)->Flags & E_MASK_RTYPE) == E_RTYPE_LVAL) -#endif - -#if defined(HAVE_INLINE) -INLINE int ED_IsRVal (const ExprDesc* Expr) -/* Return true if the expression is a rvalue */ -{ - return (Expr->Flags & E_MASK_RTYPE) == E_RTYPE_RVAL; -} -#else -# define ED_IsRVal(Expr) (((Expr)->Flags & E_MASK_RTYPE) == E_RTYPE_RVAL) -#endif - -#if defined(HAVE_INLINE) -INLINE void ED_MakeLVal (ExprDesc* Expr) -/* Make the expression a lvalue. */ -{ - Expr->Flags |= E_RTYPE_LVAL; -} -#else -# define ED_MakeLVal(Expr) do { (Expr)->Flags |= E_RTYPE_LVAL; } while (0) -#endif - -#if defined(HAVE_INLINE) -INLINE void ED_MakeRVal (ExprDesc* Expr) -/* Make the expression a rvalue. */ -{ - Expr->Flags &= ~E_RTYPE_LVAL; -} -#else -# define ED_MakeRVal(Expr) do { (Expr)->Flags &= ~E_RTYPE_LVAL; } while (0) +int ED_IsLocQuasiConst (const ExprDesc* Expr); +/* Return true if the expression denotes a constant address of some sort. This +** can be the address of a global variable (maybe with offset) or similar. +*/ #endif #if defined(HAVE_INLINE) @@ -308,6 +332,52 @@ INLINE void ED_MarkAsUntested (ExprDesc* Expr) # define ED_MarkAsUntested(Expr) do { (Expr)->Flags &= ~E_CC_SET; } while (0) #endif +#if defined(HAVE_INLINE) +INLINE int ED_IsLoaded (const ExprDesc* Expr) +/* Check if the expression is loaded. +** NOTE: This is currently unused and not working due to code complexity. +*/ +{ + return (Expr->Flags & E_LOADED) != 0; +} +#else +# define ED_IsLoaded(Expr) (((Expr)->Flags & E_LOADED) != 0) +#endif + +#if defined(HAVE_INLINE) +INLINE int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr) +/* Return true if the expression is E_LOC_PRIMARY or E_LOC_EXPR */ +{ + return ED_IsLocPrimary (Expr) || ED_IsLocExpr (Expr); +} +#else +int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr); +/* Return true if the expression is E_LOC_PRIMARY or E_LOC_EXPR */ +#endif + +#if defined(HAVE_INLINE) +INLINE int ED_IsAddrExpr (const ExprDesc* Expr) +/* Check if the expression is taken address of instead of its value. +*/ +{ + return (Expr->Flags & E_ADDRESS_OF) != 0; +} +#else +# define ED_IsAddrExpr(Expr) (((Expr)->Flags & E_ADDRESS_OF) != 0) +#endif + +#if defined(HAVE_INLINE) +INLINE int ED_IsIndExpr (const ExprDesc* Expr) +/* Check if the expression is a reference to its value */ +{ + return (Expr->Flags & E_ADDRESS_OF) == 0 && + !ED_IsLocNone (Expr) && !ED_IsLocPrimary (Expr); +} +#else +int ED_IsIndExpr (const ExprDesc* Expr); +/* Check if the expression is a reference to its value */ +#endif + void ED_SetCodeRange (ExprDesc* Expr, const CodeMark* Start, const CodeMark* End); /* Set the code range for this expression */ @@ -326,26 +396,79 @@ int ED_GetStackOffs (const ExprDesc* Expr, int Offs); */ ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, Type* Type); -/* Make Expr an absolute const with the given value and type. */ +/* Replace Expr with an absolute const with the given value and type */ ExprDesc* ED_MakeConstAbsInt (ExprDesc* Expr, long Value); -/* Make Expr a constant integer expression with the given value */ +/* Replace Expr with an constant integer with the given value */ -ExprDesc* ED_MakeRValExpr (ExprDesc* Expr); -/* Convert Expr into a rvalue which is in the primary register without an -** offset. -*/ +ExprDesc* ED_FinalizeRValLoad (ExprDesc* Expr); +/* Finalize the result of LoadExpr to be an rvalue in the primary register */ -ExprDesc* ED_MakeLValExpr (ExprDesc* Expr); -/* Convert Expr into a lvalue which is in the primary register without an -** offset. -*/ +#if defined(HAVE_INLINE) +INLINE int ED_IsLVal (const ExprDesc* Expr) +/* Return true if the expression is a reference */ +{ + return ((Expr)->Flags & E_MASK_RTYPE) == E_RTYPE_LVAL; +} +#else +# define ED_IsLVal(Expr) (((Expr)->Flags & E_MASK_RTYPE) == E_RTYPE_LVAL) +#endif -int ED_IsConst (const ExprDesc* Expr); -/* Return true if the expression denotes a constant of some sort. This can be a -** numeric constant, the address of a global variable (maybe with offset) or -** similar. +#if defined(HAVE_INLINE) +INLINE int ED_IsRVal (const ExprDesc* Expr) +/* Return true if the expression is an rvalue */ +{ + return ((Expr)->Flags & E_MASK_RTYPE) == E_RTYPE_RVAL; +} +#else +# define ED_IsRVal(Expr) (((Expr)->Flags & E_MASK_RTYPE) == E_RTYPE_RVAL) +#endif + +#if defined(HAVE_INLINE) +INLINE void ED_MarkExprAsLVal (ExprDesc* Expr) +/* Mark the expression as an lvalue. +** HINT: Consider using ED_IndExpr instead of this, unless you know what +** consequence there will be, as there are both a big part in the code +** assuming rvalue = const and a big part assuming rvalue = address. */ +{ + Expr->Flags |= E_RTYPE_LVAL; +} +#else +# define ED_MarkExprAsLVal(Expr) do { (Expr)->Flags |= E_RTYPE_LVAL; } while (0) +#endif + +#if defined(HAVE_INLINE) +INLINE void ED_MarkExprAsRVal (ExprDesc* Expr) +/* Mark the expression as an rvalue. +** HINT: Consider using ED_AddrExpr instead of this, unless you know what +** consequence there will be, as there are both a big part in the code +** assuming rvalue = const and a big part assuming rvalue = address. +*/ +{ + Expr->Flags &= ~E_RTYPE_LVAL; +} +#else +# define ED_MarkExprAsRVal(Expr) do { (Expr)->Flags &= ~E_RTYPE_LVAL; } while (0) +#endif + +ExprDesc* ED_AddrExpr (ExprDesc* Expr); +/* Take address of Expr */ + +ExprDesc* ED_IndExpr (ExprDesc* Expr); +/* Dereference Expr */ + +#if defined(HAVE_INLINE) +INLINE int ED_IsAbs (const ExprDesc* Expr) +/* Return true if the expression denotes a numeric value or address. */ +{ + return (Expr->Flags & (E_MASK_LOC)) == (E_LOC_NONE) || + (Expr->Flags & (E_MASK_LOC|E_ADDRESS_OF)) == (E_LOC_ABS|E_ADDRESS_OF); +} +#else +int ED_IsAbs (const ExprDesc* Expr); +/* Return true if the expression denotes a numeric value or address. */ +#endif #if defined(HAVE_INLINE) INLINE int ED_IsConstAbs (const ExprDesc* Expr) @@ -353,16 +476,34 @@ INLINE int ED_IsConstAbs (const ExprDesc* Expr) ** a numeric constant, cast to any type. */ { - return (Expr->Flags & (E_MASK_LOC|E_MASK_RTYPE)) == (E_LOC_ABS|E_RTYPE_RVAL); + return ED_IsRVal (Expr) && ED_IsAbs (Expr); } #else -# define ED_IsConstAbs(E) \ - (((E)->Flags & (E_MASK_LOC|E_MASK_RTYPE)) == (E_LOC_ABS|E_RTYPE_RVAL)) +int ED_IsConstAbs (const ExprDesc* Expr); +/* Return true if the expression denotes a constant absolute value. This can be +** a numeric constant, cast to any type. +*/ #endif int ED_IsConstAbsInt (const ExprDesc* Expr); /* Return true if the expression is a constant (numeric) integer. */ +int ED_IsConst (const ExprDesc* Expr); +/* Return true if the expression denotes a constant of some sort. This can be a +** numeric constant, the address of a global variable (maybe with offset) or +** similar. +*/ + +int ED_IsConstAddr (const ExprDesc* Expr); +/* Return true if the expression denotes a constant address of some sort. This +** can be the address of a global variable (maybe with offset) or similar. +*/ + +int ED_IsQuasiConstAddr (const ExprDesc* Expr); +/* Return true if the expression denotes a quasi-constant address of some sort. +** This can be a constant address or a stack variable address. +*/ + int ED_IsNullPtr (const ExprDesc* Expr); /* Return true if the given expression is a NULL pointer constant */ diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index fa37c6bbd..7eef174e2 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -48,14 +48,14 @@ -static void LoadConstant (unsigned Flags, ExprDesc* Expr) -/* Load the primary register with some constant value. */ +static void LoadAddress (unsigned Flags, ExprDesc* Expr) +/* Load the primary register with some address value. */ { switch (ED_GetLoc (Expr)) { case E_LOC_ABS: - /* Number constant */ - g_getimmed (Flags | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); + /* Numberic address */ + g_getimmed (Flags | CF_IMM | CF_CONST, Expr->IVal, 0); break; case E_LOC_GLOBAL: @@ -83,25 +83,38 @@ static void LoadConstant (unsigned Flags, ExprDesc* Expr) g_leasp (Expr->IVal); break; + case E_LOC_EXPR: + if (Expr->IVal != 0) { + /* We have an expression in the primary plus a constant + ** offset. Adjust the value in the primary accordingly. + */ + g_inc (Flags | CF_CONST, Expr->IVal); + } + break; + default: - Internal ("Unknown constant type: %04X", Expr->Flags); + Internal ("Unknown address type: %04X", Expr->Flags); } } void LoadExpr (unsigned Flags, struct ExprDesc* Expr) -/* Load an expression into the primary register if it is not already there. */ +/* Load an expression into the primary register if it is not already there. +** Note: This function can't modify the content in Expr since there are many +** instances of the "GetCodePos + LoadExpr (maybe indirectly) + RemoveCode" +** code pattern here and there which assumes that Expr should be unchanged, +** unfortunately. +*/ { - if (ED_IsLVal (Expr)) { + if (!ED_IsAddrExpr (Expr)) { - /* Dereferenced lvalue. If this is a bit field its type is unsigned. - ** But if the field is completely contained in the lower byte, we will - ** throw away the high byte anyway and may therefore load just the - ** low byte. + /* Lvalue. If this is a bit field its type is unsigned. But if the + ** field is completely contained in the lower byte, we will throw away + ** the high byte anyway and may therefore load just the low byte. */ if (ED_IsBitField (Expr)) { - Flags |= (Expr->BitOffs + Expr->BitWidth <= CHAR_BITS)? CF_CHAR : CF_INT; + Flags |= (Expr->BitOffs + Expr->BitWidth <= CHAR_BITS) ? CF_CHAR : CF_INT; Flags |= CF_UNSIGNED; } else { Flags |= TypeOf (Expr->Type); @@ -110,10 +123,16 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) Flags |= CF_TEST; } + /* Load the content of Expr */ switch (ED_GetLoc (Expr)) { + case E_LOC_NONE: + /* Immediate number constant */ + g_getimmed (Flags | CF_IMM | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); + break; + case E_LOC_ABS: - /* Absolute: numeric address or const */ + /* Absolute numeric addressed variable */ g_getstatic (Flags | CF_ABSOLUTE, Expr->IVal, 0); break; @@ -139,7 +158,15 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) break; case E_LOC_PRIMARY: - /* The primary register - just test if necessary */ + /* The primary register */ + if (Expr->IVal != 0) { + /* We have an expression in the primary plus a constant + ** offset. Adjust the value in the primary accordingly. + */ + g_inc (Flags | CF_CONST, Expr->IVal); + + /* We might want to clear the offset, but we can't */ + } if (Flags & CF_TEST) { g_test (Flags); } @@ -148,6 +175,13 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) case E_LOC_EXPR: /* Reference to address in primary with offset in Expr */ g_getind (Flags, Expr->IVal); + + /* Since the content in primary is now overwritten with the + ** dereference value, we might want to change the expression + ** loc to E_LOC_PRIMARY as well. That way we could be able to + ** call this function as many times as we want. Unfortunately, + ** we can't. + */ break; default: @@ -173,24 +207,14 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) ED_TestDone (Expr); } else { - /* An rvalue */ - if (ED_IsLocExpr (Expr)) { - if (Expr->IVal != 0) { - /* We have an expression in the primary plus a constant - ** offset. Adjust the value in the primary accordingly. - */ - Flags |= TypeOf (Expr->Type); - g_inc (Flags | CF_CONST, Expr->IVal); - } - } else { - /* Constant of some sort, load it into the primary */ - LoadConstant (Flags, Expr); - } + /* An address */ + Flags |= CF_INT | CF_UNSIGNED; + /* Constant of some sort, load it into the primary */ + LoadAddress (Flags, Expr); /* Are we testing this value? */ if (ED_NeedsTest (Expr)) { /* Yes, force a test */ - Flags |= TypeOf (Expr->Type); g_test (Flags); ED_TestDone (Expr); } diff --git a/src/cc65/locals.c b/src/cc65/locals.c index d0aab7f9c..9f8ee86ef 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -260,7 +260,7 @@ static void ParseAutoDecl (Declaration* Decl) Flags |= CF_CONST; } else { LoadExpr (CF_NONE, &Expr); - ED_MakeRVal (&Expr); + ED_MarkExprAsRVal (&Expr); } /* Push the value */ diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c index c61514f43..c7aea5255 100644 --- a/src/cc65/shiftexpr.c +++ b/src/cc65/shiftexpr.c @@ -173,8 +173,8 @@ void ShiftExpr (struct ExprDesc* Expr) goto Next; } - /* If we're shifting an integer or unsigned to the right, the - ** lhs has a const address, and the shift count is larger than 8, + /* If we're shifting an integer or unsigned to the right, the lhs + ** has a quasi-const address, and the shift count is larger than 8, ** we can load just the high byte as a char with the correct ** signedness, and reduce the shift count by 8. If the remaining ** shift count is zero, we're done. @@ -182,7 +182,7 @@ void ShiftExpr (struct ExprDesc* Expr) if (Tok == TOK_SHR && IsTypeInt (Expr->Type) && ED_IsLVal (Expr) && - (ED_IsLocConst (Expr) || ED_IsLocStack (Expr)) && + ED_IsLocQuasiConst (Expr) && Expr2.IVal >= 8) { Type* OldType; @@ -227,8 +227,8 @@ void ShiftExpr (struct ExprDesc* Expr) } MakeRVal: - /* We have a rvalue in the primary now */ - ED_MakeRValExpr (Expr); + /* We have an rvalue in the primary now */ + ED_FinalizeRValLoad (Expr); Next: /* Set the type of the result */ diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index 2d4317ef8..6d61f2750 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -343,7 +343,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** address calculation could overflow in the linker. */ int AllowOneIndex = !ED_IsLocRegister (&Arg2.Expr) && - !(ED_IsLocAbs (&Arg2.Expr) && Arg2.Expr.IVal < 256); + !(ED_IsLocNone (&Arg2.Expr) && Arg2.Expr.IVal < 256); /* Calculate the real stack offset */ Offs = ED_GetStackOffs (&Arg1.Expr, 0); @@ -421,7 +421,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** address calculation could overflow in the linker. */ int AllowOneIndex = !ED_IsLocRegister (&Arg1.Expr) && - !(ED_IsLocAbs (&Arg1.Expr) && Arg1.Expr.IVal < 256); + !(ED_IsLocNone (&Arg1.Expr) && Arg1.Expr.IVal < 256); /* Calculate the real stack offset */ Offs = ED_GetStackOffs (&Arg2.Expr, 0); @@ -520,7 +520,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) AddCodeLine ("lda ptr1"); /* The function result is an rvalue in the primary register */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); Expr->Type = GetFuncReturn (Expr->Type); /* Bail out, no need for further processing */ @@ -529,7 +529,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) } /* The function result is an rvalue in the primary register */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); Expr->Type = GetFuncReturn (Expr->Type); ExitPoint: @@ -743,7 +743,7 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr) AddCodeLine ("lda ptr1"); /* The function result is an rvalue in the primary register */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); Expr->Type = GetFuncReturn (Expr->Type); /* Bail out, no need for further processing */ @@ -752,7 +752,7 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr) } /* The function result is an rvalue in the primary register */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); Expr->Type = GetFuncReturn (Expr->Type); ExitPoint: @@ -955,7 +955,7 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr) } /* The function result is an rvalue in the primary register */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); Expr->Type = GetFuncReturn (Expr->Type); /* We expect the closing brace */ @@ -1069,7 +1069,7 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** address calculation could overflow in the linker. */ int AllowOneIndex = !ED_IsLocRegister (&Arg1.Expr) && - !(ED_IsLocAbs (&Arg1.Expr) && Arg1.Expr.IVal < 256); + !(ED_IsLocNone (&Arg1.Expr) && Arg1.Expr.IVal < 256); /* Calculate the real stack offset */ int Offs = ED_GetStackOffs (&Arg2.Expr, 0); @@ -1116,7 +1116,7 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** address calculation could overflow in the linker. */ int AllowOneIndex = !ED_IsLocRegister (&Arg2.Expr) && - !(ED_IsLocAbs (&Arg2.Expr) && Arg2.Expr.IVal < 256); + !(ED_IsLocNone (&Arg2.Expr) && Arg2.Expr.IVal < 256); /* Calculate the real stack offset */ int Offs = ED_GetStackOffs (&Arg1.Expr, 0); @@ -1153,7 +1153,7 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) } /* The function result is an rvalue in the primary register */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); Expr->Type = GetFuncReturn (Expr->Type); ExitPoint: @@ -1250,7 +1250,7 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) AddCodeLine ("tya"); /* The function result is an rvalue in the primary register */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); Expr->Type = type_size_t; /* Bail out, no need for further processing */ @@ -1279,7 +1279,7 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) AddCodeLine ("ldx #$00"); /* The function result is an rvalue in the primary register */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); Expr->Type = type_size_t; /* Bail out, no need for further processing */ @@ -1304,7 +1304,7 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) AddCodeLine ("tya"); /* The function result is an rvalue in the primary register */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); Expr->Type = type_size_t; /* Bail out, no need for further processing */ @@ -1333,7 +1333,7 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) AddCodeLine ("tya"); /* The function result is an rvalue in the primary register */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); Expr->Type = type_size_t; /* Bail out, no need for further processing */ @@ -1348,7 +1348,7 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) AddCodeLine ("jsr _%s", Func_strlen); /* The function result is an rvalue in the primary register */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); Expr->Type = type_size_t; ExitPoint: diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 21ad33f12..e8d581f54 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -70,7 +70,7 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) ** conversion void -> void. */ if (IsTypeVoid (NewType)) { - ED_MakeRVal (Expr); /* Never an lvalue */ + ED_MarkExprAsRVal (Expr); /* Never an lvalue */ goto ExitPoint; } @@ -105,10 +105,10 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) g_typecast (TypeOf (NewType), TypeOf (OldType) | CF_FORCECHAR); /* Value is now in primary and an rvalue */ - ED_MakeRValExpr (Expr); + ED_FinalizeRValLoad (Expr); } - } else if (ED_IsLocAbs (Expr)) { + } else if (ED_IsConstAbs (Expr)) { /* A cast of a constant numeric value to another type. Be sure ** to handle sign extension correctly. @@ -136,6 +136,15 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) } } + /* Do the integer constant <-> absolute address conversion if necessary */ + if (IsClassPtr (NewType)) { + Expr->Flags &= ~E_LOC_NONE; + Expr->Flags |= E_LOC_ABS | E_ADDRESS_OF; + } else if (IsClassInt (NewType)) { + Expr->Flags &= ~(E_LOC_ABS | E_ADDRESS_OF); + Expr->Flags |= E_LOC_NONE; + } + } else { /* The value is not a constant. If the sizes of the types are @@ -150,8 +159,8 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) /* Emit typecast code. */ g_typecast (TypeOf (NewType), TypeOf (OldType) | CF_FORCECHAR); - /* Value is now a rvalue in the primary */ - ED_MakeRValExpr (Expr); + /* Value is now an rvalue in the primary */ + ED_FinalizeRValLoad (Expr); } } From d23b5773312cc9dc2d3b38620ea66aa272786153 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 16 Jul 2020 01:07:53 +0800 Subject: [PATCH 0237/2710] More compiler flags on address types to match the location types of expressions. --- src/cc65/codegen.c | 4 ++-- src/cc65/codegen.h | 39 +++++++++++++++++++++------------------ src/cc65/expr.c | 20 ++++++++++---------- 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 7af329b91..20bfdf434 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -1349,7 +1349,7 @@ unsigned g_typeadjust (unsigned lhs, unsigned rhs) rtype = CF_LONG; } else if (ltype != CF_LONG && (lhs & CF_CONST) == 0 && rtype == CF_LONG) { /* We must promote the lhs to long */ - if (lhs & CF_REG) { + if (lhs & CF_PRIMARY) { g_reglong (lhs); } else { g_toslong (lhs); @@ -2338,7 +2338,7 @@ void g_call (unsigned Flags, const char* Label, unsigned ArgSize) void g_callind (unsigned Flags, unsigned ArgSize, int Offs) /* Call subroutine indirect */ { - if ((Flags & CF_LOCAL) == 0) { + if ((Flags & CF_STACK) == 0) { /* Address is in a/x */ if ((Flags & CF_FIXARGC) == 0) { /* Pass arg count */ diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index af539df8b..c63fc5398 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -62,35 +62,38 @@ #define CF_NONE 0x0000 /* No special flags */ /* Values for the actual type */ -#define CF_CHAR 0x0003 /* Operation on characters */ -#define CF_INT 0x0001 /* Operation on ints */ +#define CF_CHAR 0x0007 /* Operation on characters */ +#define CF_INT 0x0003 /* Operation on ints */ +#define CF_SHORT CF_INT /* Alias */ #define CF_PTR CF_INT /* Alias for readability */ -#define CF_LONG 0x0000 /* Operation on longs */ -#define CF_FLOAT 0x0004 /* Operation on a float */ +#define CF_LONG 0x0001 /* Operation on longs */ +#define CF_FLOAT 0x0010 /* Operation on a float */ /* Signedness */ #define CF_UNSIGNED 0x0008 /* Value is unsigned */ /* Masks for retrieving type information */ -#define CF_TYPEMASK 0x0007 /* Type information */ -#define CF_STYPEMASK 0x000F /* Includes signedness */ +#define CF_TYPEMASK 0x0017 /* Type information */ +#define CF_STYPEMASK 0x001F /* Includes signedness */ -#define CF_NOKEEP 0x0010 /* Value may get destroyed when storing */ -#define CF_CONST 0x0020 /* Constant value available */ -#define CF_CONSTADDR 0x0040 /* Constant address value available */ +#define CF_CONST 0x0040 /* Constant value available */ #define CF_TEST 0x0080 /* Test value */ #define CF_FIXARGC 0x0100 /* Function has fixed arg count */ #define CF_FORCECHAR 0x0200 /* Handle chars as chars, not ints */ +#define CF_NOKEEP 0x0400 /* Value may get destroyed when storing */ -/* Type of static address */ -#define CF_ADDRMASK 0xFC00 /* Type of address */ -#define CF_IMM 0x0000 /* Value is pure rvalue and has no address */ -#define CF_REG 0x0400 /* Value is in primary register */ -#define CF_STATIC 0x0800 /* Static local */ -#define CF_EXTERNAL 0x1000 /* Static external */ -#define CF_ABSOLUTE 0x2000 /* Numeric absolute address */ -#define CF_LOCAL 0x4000 /* Auto variable */ -#define CF_REGVAR 0x8000 /* Register variable */ +/* Type of address */ +#define CF_ADDRMASK 0xF000 /* Bit mask of address type */ +#define CF_IMM 0x0000 /* Value is pure rvalue and has no storage */ +#define CF_ABSOLUTE 0x1000 /* Numeric absolute address */ +#define CF_EXTERNAL 0x2000 /* External */ +#define CF_REGVAR 0x4000 /* Register variable */ +#define CF_LITERAL 0x7000 /* Literal */ +#define CF_PRIMARY 0x8000 /* Value is in primary register */ +#define CF_EXPR 0x9000 /* Value is addressed by primary register */ +#define CF_STATIC 0xA000 /* Local static */ +#define CF_CODE 0xB000 /* C code label location */ +#define CF_STACK 0xC000 /* Function-local auto on stack */ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 38a52e744..d3b5255d8 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -88,10 +88,10 @@ static unsigned GlobalModeFlags (const ExprDesc* Expr) case E_LOC_GLOBAL: return CF_EXTERNAL; case E_LOC_STATIC: return CF_STATIC; case E_LOC_REGISTER: return CF_REGVAR; - case E_LOC_STACK: return CF_NONE; - case E_LOC_PRIMARY: return CF_NONE; - case E_LOC_EXPR: return CF_NONE; - case E_LOC_LITERAL: return CF_STATIC; /* Same as static */ + case E_LOC_STACK: return CF_STACK; + case E_LOC_PRIMARY: return CF_PRIMARY; + case E_LOC_EXPR: return CF_EXPR; + case E_LOC_LITERAL: return CF_LITERAL; default: Internal ("GlobalModeFlags: Invalid location flags value: 0x%04X", Expr->Flags); /* NOTREACHED */ @@ -189,7 +189,7 @@ static unsigned typeadjust (ExprDesc* lhs, ExprDesc* rhs, int NoPush) } if (NoPush) { /* Value is in primary register*/ - ltype |= CF_REG; + ltype |= CF_PRIMARY; } rtype = TypeOf (rhst); if (ED_IsLocNone (rhs)) { @@ -587,7 +587,7 @@ static void FunctionCall (ExprDesc* Expr) ** Since fastcall functions may never be variadic, we can use the ** index register for this purpose. */ - g_callind (CF_LOCAL, ParamSize, PtrOffs); + g_callind (CF_STACK, ParamSize, PtrOffs); } /* If we have a pointer on stack, remove it */ @@ -2068,7 +2068,7 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ if ((Gen->Flags & GEN_NOPUSH) == 0) { g_push (ltype, 0); } else { - ltype |= CF_REG; /* Value is in register */ + ltype |= CF_PRIMARY; /* Value is in register */ } /* Determine the type of the operation result. */ @@ -2100,7 +2100,7 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ } if ((Gen->Flags & GEN_NOPUSH) != 0) { RemoveCode (&Mark2); - ltype |= CF_REG; /* Value is in register */ + ltype |= CF_PRIMARY; /* Value is in register */ } } @@ -2276,7 +2276,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ flags |= CF_CONST; if ((Gen->Flags & GEN_NOPUSH) != 0) { RemoveCode (&Mark2); - ltype |= CF_REG; /* Value is in register */ + ltype |= CF_PRIMARY; /* Value is in register */ } } @@ -2550,7 +2550,7 @@ static void parseadd (ExprDesc* Expr) flags |= CF_CONST; } else { /* Constant address label */ - flags |= GlobalModeFlags (Expr) | CF_CONSTADDR; + flags |= GlobalModeFlags (Expr); } /* Check for pointer arithmetic */ From 9198b3be00168d148000a501b4270c39b8fdf598 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 17 Jul 2020 15:10:27 +0800 Subject: [PATCH 0238/2710] Fixed '&function' and '&array'. --- src/cc65/expr.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index d3b5255d8..79650109f 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1841,9 +1841,12 @@ void hie10 (ExprDesc* Expr) /* Do it anyway, just to avoid further warnings */ Expr->Flags &= ~E_BITFIELD; } + /* It's allowed in C to take the address of an array this way */ + if (!IsTypeFunc (Expr->Type) && !IsTypeArray (Expr->Type)) { + /* The & operator yields an rvalue address */ + ED_AddrExpr (Expr); + } Expr->Type = PointerTo (Expr->Type); - /* The & operator yields an rvalue address */ - ED_AddrExpr (Expr); } break; From 333fa9732642787d6ae47f9128b189f77acb1814 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 18 Jul 2020 10:34:57 +0800 Subject: [PATCH 0239/2710] Whitespaces/newlines fixes. --- src/cc65/declare.c | 2 +- src/cc65/expr.c | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 5827eb6dc..2a21e5a76 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1780,7 +1780,7 @@ static void DefineData (ExprDesc* Expr) case E_LOC_ABS: /* Absolute numeric address */ - g_defdata (CF_ABSOLUTE | TypeOf(Expr->Type) | CF_CONST, Expr->IVal, 0); + g_defdata (CF_ABSOLUTE | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); break; case E_LOC_GLOBAL: diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 79650109f..f6aa5aad6 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1029,7 +1029,6 @@ static void ArrayRef (ExprDesc* Expr) /* Adjust the offset */ Expr->IVal += Subscript.IVal; - } else { /* Scale the rhs value according to the element type */ From 66ecc0e52cc61e5969efc22c0045a739c7f6f9f3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 18 Jul 2020 23:30:09 +0800 Subject: [PATCH 0240/2710] New utility to get the proper replacement type for passing structs/unions by value. New utility to get basic type names such as 'struct', 'union' and so on. --- src/cc65/datatype.c | 47 +++++++++++++++++++++++++++++++++++++++++++++ src/cc65/datatype.h | 8 ++++++++ 2 files changed, 55 insertions(+) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 2d54316cd..5fcfa7115 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -78,6 +78,33 @@ Type type_double[] = { TYPE(T_DOUBLE), TYPE(T_END) }; +const char* GetBasicTypeName (const Type* T) +/* Return a const name string of the basic type. +** Return "type" for unknown basic types. +*/ +{ + switch (GetType (T)) { + case T_TYPE_CHAR: return "char"; + case T_TYPE_SHORT: return "short"; + case T_TYPE_INT: return "integer"; + case T_TYPE_LONG: return "long"; + case T_TYPE_LONGLONG: return "long long"; + case T_TYPE_ENUM: return "enum"; + case T_TYPE_FLOAT: return "poinfloatter"; + case T_TYPE_DOUBLE: return "double"; + case T_TYPE_VOID: return "void"; + case T_TYPE_STRUCT: return "struct"; + case T_TYPE_UNION: return "union"; + case T_TYPE_ARRAY: return "array"; + case T_TYPE_PTR: return "pointer"; + case T_TYPE_FUNC: return "function"; + case T_TYPE_NONE: /* FALLTHROUGH */ + default: return "type"; + } +} + + + unsigned TypeLen (const Type* T) /* Return the length of the type string */ { @@ -198,6 +225,26 @@ Type* GetImplicitFuncType (void) +const Type* GetReplacementType (const Type* SType) +/* Get a replacement type for passing a struct/union in the primary register */ +{ + const Type* NewType; + /* If the size is less than or equal to that of a long, we will copy the + ** struct using the primary register, otherwise we will use memcpy. + */ + switch (SizeOf (SType)) { + case 1: NewType = type_uchar; break; + case 2: NewType = type_uint; break; + case 3: /* FALLTHROUGH */ + case 4: NewType = type_ulong; break; + default: NewType = SType; break; + } + + return NewType; +} + + + Type* PointerTo (const Type* T) /* Return a type string that is "pointer to T". The type string is allocated ** on the heap and may be freed after use. diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 92b3d0122..62ea8d06d 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -209,6 +209,11 @@ struct SymEntry; +const char* GetBasicTypeName (const Type* T); +/* Return a const name string of the basic type. +** Return "type" for unknown basic types. +*/ + unsigned TypeLen (const Type* T); /* Return the length of the type string */ @@ -238,6 +243,9 @@ Type* GetCharArrayType (unsigned Len); Type* GetImplicitFuncType (void); /* Return a type string for an inplicitly declared function */ +const Type* GetReplacementType (const Type* SType); +/* Get a replacement type for passing a struct/union in the primary register */ + Type* PointerTo (const Type* T); /* Return a type string that is "pointer to T". The type string is allocated ** on the heap and may be freed after use. From 9f67b45ea0abd003a42b241d86bc763ef51b60bc Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 18 Jul 2020 23:30:09 +0800 Subject: [PATCH 0241/2710] Fixed returning by value structs/unions <= 4 bytes in size from functions. Larger ones are forbidden for now. --- src/cc65/assignment.c | 144 +++++++++++++++++++----------------------- src/cc65/expr.c | 57 +++++++++++------ src/cc65/loadexpr.c | 2 +- src/cc65/stmt.c | 16 ++++- 4 files changed, 118 insertions(+), 101 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 8e42a338f..2a278f4a5 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -54,6 +54,69 @@ +static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) +/* Copy the struct represented by RExpr to the one represented by LExpr */ +{ + /* If the size is that of a basic type (char, int, long), we will copy + ** the struct using the primary register, otherwise we use memcpy. In + ** the former case, push the address only if really needed. + */ + const Type* ltype = LExpr->Type; + const Type* stype = GetReplacementType (ltype); + int UseReg = (stype != LExpr->Type); + + if (UseReg) { + PushAddr (LExpr); + } else { + ED_MarkExprAsRVal (LExpr); + LoadExpr (CF_NONE, LExpr); + g_push (CF_PTR | CF_UNSIGNED, 0); + } + + /* Get the expression on the right of the '=' into the primary */ + hie1 (RExpr); + + /* Check for equality of the structs */ + if (TypeCmp (ltype, RExpr->Type) < TC_STRICT_COMPATIBLE) { + Error ("Incompatible types"); + } + + /* Do we copy using the primary? */ + if (UseReg) { + + /* Check if the right hand side is an lvalue */ + if (ED_IsLVal (RExpr)) { + /* Just load the value into the primary as the replacement type. */ + LoadExpr (TypeOf (stype) | CF_FORCECHAR, RExpr); + } + + /* Store it into the new location */ + Store (LExpr, stype); + + } else { + + /* Check if the right hand side is an lvalue */ + if (ED_IsLVal (RExpr)) { + /* We will use memcpy. Push the address of the rhs */ + ED_MarkExprAsRVal (RExpr); + LoadExpr (CF_NONE, RExpr); + } + + /* Push the address (or whatever is in ax in case of errors) */ + g_push (CF_PTR | CF_UNSIGNED, 0); + + /* Load the size of the struct into the primary */ + g_getimmed (CF_INT | CF_UNSIGNED | CF_CONST, CheckedSizeOf (ltype), 0); + + /* Call the memcpy function */ + g_call (CF_FIXARGC, Func_memcpy, 4); + } + + return 0; +} + + + void Assignment (ExprDesc* Expr) /* Parse an assignment */ { @@ -79,85 +142,8 @@ void Assignment (ExprDesc* Expr) ** family, allow it here. */ if (IsClassStruct (ltype)) { - - /* Get the size of the left hand side. */ - unsigned Size = SizeOf (ltype); - - /* If the size is that of a basic type (char, int, long), we will copy - ** the struct using the primary register, otherwise we use memcpy. In - ** the former case, push the address only if really needed. - */ - int UseReg = 1; - Type* stype; - switch (Size) { - case SIZEOF_CHAR: stype = type_uchar; break; - case SIZEOF_INT: stype = type_uint; break; - case SIZEOF_LONG: stype = type_ulong; break; - default: stype = ltype; UseReg = 0; break; - } - if (UseReg) { - PushAddr (Expr); - } else { - ED_MarkExprAsRVal (Expr); - LoadExpr (CF_NONE, Expr); - g_push (CF_PTR | CF_UNSIGNED, 0); - } - - /* Get the expression on the right of the '=' into the primary */ - hie1 (&Expr2); - - /* Check for equality of the structs */ - if (TypeCmp (ltype, Expr2.Type) < TC_STRICT_COMPATIBLE) { - Error ("Incompatible types"); - } - - /* Check if the right hand side is an lvalue */ - if (ED_IsLVal (&Expr2)) { - /* We have an lvalue. Do we copy using the primary? */ - if (UseReg) { - /* Just use the replacement type */ - Expr2.Type = stype; - - /* Load the value into the primary */ - LoadExpr (CF_FORCECHAR, &Expr2); - - /* Store it into the new location */ - Store (Expr, stype); - - } else { - - /* We will use memcpy. Push the address of the rhs */ - ED_MarkExprAsRVal (&Expr2); - LoadExpr (CF_NONE, &Expr2); - - /* Push the address (or whatever is in ax in case of errors) */ - g_push (CF_PTR | CF_UNSIGNED, 0); - - /* Load the size of the struct into the primary */ - g_getimmed (CF_INT | CF_UNSIGNED | CF_CONST, CheckedSizeOf (ltype), 0); - - /* Call the memcpy function */ - g_call (CF_FIXARGC, Func_memcpy, 4); - } - - } else { - - /* We have an rvalue. This can only happen if a function returns - ** a struct, since there is no other way to generate an expression - ** that has a struct as an rvalue result. We allow only 1, 2, and 4 - ** byte sized structs, and do direct assignment. - */ - if (UseReg) { - /* Do the store */ - Store (Expr, stype); - } else { - /* Print a diagnostic */ - Error ("Structs of this size are not supported"); - /* Adjust the stack so we won't run in an internal error later */ - pop (CF_PTR); - } - - } + /* Copy the struct by value */ + CopyStruct (Expr, &Expr2); } else if (ED_IsBitField (Expr)) { diff --git a/src/cc65/expr.c b/src/cc65/expr.c index f6aa5aad6..70b28a408 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -470,6 +470,7 @@ static void FunctionCall (ExprDesc* Expr) int PtrOffs = 0; /* Offset of function pointer on stack */ int IsFastcall = 0; /* True if it's a fast-call function */ int PtrOnStack = 0; /* True if a pointer copy is on stack */ + Type* ReturnType; /* Skip the left paren */ NextToken (); @@ -648,7 +649,19 @@ static void FunctionCall (ExprDesc* Expr) /* The function result is an rvalue in the primary register */ ED_FinalizeRValLoad (Expr); - Expr->Type = GetFuncReturn (Expr->Type); + ReturnType = GetFuncReturn (Expr->Type); + + /* Handle struct specially */ + if (IsTypeStruct (ReturnType)) { + /* If there is no replacement type, then it is just the address */ + if (ReturnType == GetReplacementType (ReturnType)) { + /* Dereference it */ + ED_IndExpr (Expr); + ED_MarkExprAsRVal (Expr); + } + } + + Expr->Type = ReturnType; } @@ -1206,12 +1219,20 @@ static void StructRef (ExprDesc* Expr) return; } - if (IsTypePtr (Expr->Type)) { - /* If we have a struct pointer that is an lvalue and not already in the - ** primary, load its content now. - */ - if (!ED_IsConst (Expr)) { - /* Load into the primary */ + /* A struct is usually an lvalue. If not, it is a struct passed in the + ** primary register, which is usually a result returned from a function. + ** However, it is possible that this rvalue is a result of certain + ** operations on an lvalue, and there are no reasons to disallow that. + ** So we just rely on the check on function returns to catch the errors + ** and dereference the rvalue address of the struct here. + */ + if (IsTypePtr (Expr->Type) || + (ED_IsRVal (Expr) && + ED_IsLocPrimary (Expr) && + Expr->Type == GetReplacementType (Expr->Type))) { + + if (!ED_IsConst (Expr) && !ED_IsLocPrimary (Expr)) { + /* If we have a non-const struct pointer, load its content now */ LoadExpr (CF_NONE, Expr); /* Clear the offset */ @@ -1241,27 +1262,25 @@ static void StructRef (ExprDesc* Expr) FinalType->C |= Q; } - /* A struct is usually an lvalue. If not, it is a struct referenced in the - ** primary register, which is likely to be returned from a function. - */ - if (ED_IsRVal (Expr) && ED_IsLocExpr (Expr) && !IsTypePtr (Expr->Type)) { + if (ED_IsRVal (Expr) && ED_IsLocPrimary (Expr) && !IsTypePtr (Expr->Type)) { unsigned Flags = 0; unsigned BitOffs; /* Get the size of the type */ - unsigned Size = SizeOf (Expr->Type); + unsigned StructSize = SizeOf (Expr->Type); + unsigned FieldSize = SizeOf (Field->Type); /* Safety check */ - CHECK (Field->V.Offs + Size <= SIZEOF_LONG); + CHECK (Field->V.Offs + FieldSize <= StructSize); /* The type of the operation depends on the type of the struct */ - switch (Size) { - case 1: Flags = CF_CHAR | CF_UNSIGNED | CF_CONST; break; - case 2: Flags = CF_INT | CF_UNSIGNED | CF_CONST; break; + switch (StructSize) { + case 1: Flags = CF_CHAR | CF_UNSIGNED | CF_CONST; break; + case 2: Flags = CF_INT | CF_UNSIGNED | CF_CONST; break; case 3: /* FALLTHROUGH */ - case 4: Flags = CF_LONG | CF_UNSIGNED | CF_CONST; break; - default: Internal ("Invalid struct size: %u", Size); break; + case 4: Flags = CF_LONG | CF_UNSIGNED | CF_CONST; break; + default: Internal ("Invalid struct size: %u", StructSize); break; } /* Generate a shift to get the field in the proper position in the @@ -1274,7 +1293,7 @@ static void StructRef (ExprDesc* Expr) /* Mask the value. This is unnecessary if the shift executed above ** moved only zeroes into the value. */ - if (BitOffs + Field->V.B.BitWidth != Size * CHAR_BITS) { + if (BitOffs + Field->V.B.BitWidth != FieldSize * CHAR_BITS) { g_and (CF_INT | CF_UNSIGNED | CF_CONST, (0x0001U << Field->V.B.BitWidth) - 1U); } diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index 7eef174e2..bc0ee1dd0 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -116,7 +116,7 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) if (ED_IsBitField (Expr)) { Flags |= (Expr->BitOffs + Expr->BitWidth <= CHAR_BITS) ? CF_CHAR : CF_INT; Flags |= CF_UNSIGNED; - } else { + } else if ((Flags & CF_TYPEMASK) == 0) { Flags |= TypeOf (Expr->Type); } if (ED_NeedsTest (Expr)) { diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index 657bc9963..a1384b0ed 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -309,7 +309,8 @@ static void WhileStatement (void) static void ReturnStatement (void) /* Handle the 'return' statement */ { - ExprDesc Expr; + ExprDesc Expr; + const Type* ReturnType; NextToken (); if (CurTok.Tok != TOK_SEMI) { @@ -328,7 +329,18 @@ static void ReturnStatement (void) TypeConversion (&Expr, F_GetReturnType (CurrentFunc)); /* Load the value into the primary */ - LoadExpr (CF_NONE, &Expr); + if (IsTypeStruct (Expr.Type) || IsTypeUnion (Expr.Type)) { + /* Handle struct/union specially */ + ReturnType = GetReplacementType (Expr.Type); + if (ReturnType == Expr.Type) { + Error ("Returning %s of this size by value is not supported", GetBasicTypeName (Expr.Type)); + } + LoadExpr (TypeOf (ReturnType), &Expr); + + } else { + /* Load the value into the primary */ + LoadExpr (CF_NONE, &Expr); + } } } else if (!F_HasVoidReturn (CurrentFunc) && !F_HasOldStyleIntRet (CurrentFunc)) { From b45d373fd6e9839d86301f539a7c458340eb6769 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 18 Jul 2020 23:30:09 +0800 Subject: [PATCH 0242/2710] Fixed passing by value structs/unions <= 4 bytes in size to functions. Larger ones are forbidden for now. --- src/cc65/expr.c | 16 +++++++++++----- src/cc65/function.c | 26 +++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 70b28a408..44137a773 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -395,12 +395,18 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) } + /* Handle struct/union specially */ + if (IsTypeStruct (Expr.Type) || IsTypeUnion (Expr.Type)) { + /* Use the replacement type */ + Flags |= TypeOf (GetReplacementType (Expr.Type)); + } else { + /* Use the type of the argument for the push */ + Flags |= TypeOf (Expr.Type); + } + /* Load the value into the primary if it is not already there */ LoadExpr (Flags, &Expr); - /* Use the type of the argument for the push */ - Flags |= TypeOf (Expr.Type); - /* If this is a fastcall function, don't push the last argument */ if ((CurTok.Tok == TOK_COMMA && NextTok.Tok != TOK_RPAREN) || !IsFastcall) { unsigned ArgSize = sizeofarg (Flags); @@ -651,8 +657,8 @@ static void FunctionCall (ExprDesc* Expr) ED_FinalizeRValLoad (Expr); ReturnType = GetFuncReturn (Expr->Type); - /* Handle struct specially */ - if (IsTypeStruct (ReturnType)) { + /* Handle struct/union specially */ + if (IsTypeStruct (ReturnType) || IsTypeUnion (ReturnType)) { /* If there is no replacement type, then it is just the address */ if (ReturnType == GetReplacementType (ReturnType)) { /* Dereference it */ diff --git a/src/cc65/function.c b/src/cc65/function.c index 8da084ac1..df667e8fa 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -380,6 +380,7 @@ void NewFunc (SymEntry* Func) { int C99MainFunc = 0;/* Flag for C99 main function returning int */ SymEntry* Param; + const Type* RType; /* Real type used for struct parameters */ /* Get the function descriptor from the function entry */ FuncDesc* D = Func->V.F.Func; @@ -475,7 +476,12 @@ void NewFunc (SymEntry* Func) /* Pointer to function */ Flags = CF_PTR; } else { - Flags = TypeOf (D->LastParam->Type) | CF_FORCECHAR; + /* Handle struct/union specially */ + if (IsTypeStruct (D->LastParam->Type) || IsTypeUnion (D->LastParam->Type)) { + Flags = TypeOf (GetReplacementType (D->LastParam->Type)) | CF_FORCECHAR; + } else { + Flags = TypeOf (D->LastParam->Type) | CF_FORCECHAR; + } } g_push (Flags, 0); } @@ -498,11 +504,25 @@ void NewFunc (SymEntry* Func) Param = D->SymTab->SymHead; while (Param && (Param->Flags & SC_PARAM) != 0) { + /* Check if we need copy for struct/union type */ + RType = Param->Type; + if (IsTypeStruct (RType) || IsTypeUnion (RType)) { + RType = GetReplacementType (RType); + + /* If there is no replacement type, then it is just the address. + ** We don't currently support this case. + */ + if (RType == Param->Type) { + Error ("Passing %s of this size by value is not supported", GetBasicTypeName (Param->Type)); + } + } + + /* Check for a register variable */ if (SymIsRegVar (Param)) { /* Allocate space */ - int Reg = F_AllocRegVar (CurrentFunc, Param->Type); + int Reg = F_AllocRegVar (CurrentFunc, RType); /* Could we allocate a register? */ if (Reg < 0) { @@ -513,7 +533,7 @@ void NewFunc (SymEntry* Func) Param->V.R.RegOffs = Reg; /* Generate swap code */ - g_swap_regvars (Param->V.R.SaveOffs, Reg, CheckedSizeOf (Param->Type)); + g_swap_regvars (Param->V.R.SaveOffs, Reg, CheckedSizeOf (RType)); } } From 0c3e1b491fce1c5ae6ad74ac2e37151c8e9efc03 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 18 Jul 2020 23:30:09 +0800 Subject: [PATCH 0243/2710] Disabled -Wstruct-param by default. --- src/cc65/error.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/error.c b/src/cc65/error.c index 858a80826..c3ebebf77 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -67,7 +67,7 @@ IntStack WarningsAreErrors = INTSTACK(0); /* Treat warnings as errors */ IntStack WarnConstComparison= INTSTACK(1); /* - constant comparison results */ IntStack WarnNoEffect = INTSTACK(1); /* - statements without an effect */ IntStack WarnRemapZero = INTSTACK(1); /* - remapping character code zero */ -IntStack WarnStructParam = INTSTACK(1); /* - structs passed by val */ +IntStack WarnStructParam = INTSTACK(0); /* - structs passed by val */ IntStack WarnUnknownPragma = INTSTACK(1); /* - unknown #pragmas */ IntStack WarnUnusedLabel = INTSTACK(1); /* - unused labels */ IntStack WarnUnusedParam = INTSTACK(1); /* - unused parameters */ From 768e03a47415f9c5aef0263175612a43e45b788e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 19 Jul 2020 13:47:48 +0800 Subject: [PATCH 0244/2710] Small fixes and tidy-up based on PR review. Renamed GetReplacementType() to GetStructReplacementType(). Clarified in comments that most *Struct* facilities work for unions as well. Made it clear in some error messages with regards to structs/unions. --- src/cc65/assignment.c | 17 +++++------ src/cc65/datatype.c | 2 +- src/cc65/datatype.h | 4 +-- src/cc65/expr.c | 66 +++++++++++++++++++++++++------------------ src/cc65/function.c | 4 +-- src/cc65/stmt.c | 2 +- src/cc65/symtab.c | 10 +++---- src/cc65/symtab.h | 2 +- 8 files changed, 60 insertions(+), 47 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 2a278f4a5..ed374ef8a 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -55,15 +55,15 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) -/* Copy the struct represented by RExpr to the one represented by LExpr */ +/* Copy the struct/union represented by RExpr to the one represented by LExpr */ { /* If the size is that of a basic type (char, int, long), we will copy ** the struct using the primary register, otherwise we use memcpy. In ** the former case, push the address only if really needed. */ const Type* ltype = LExpr->Type; - const Type* stype = GetReplacementType (ltype); - int UseReg = (stype != LExpr->Type); + const Type* stype = GetStructReplacementType (ltype); + int UseReg = (stype != ltype); if (UseReg) { PushAddr (LExpr); @@ -105,7 +105,7 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) /* Push the address (or whatever is in ax in case of errors) */ g_push (CF_PTR | CF_UNSIGNED, 0); - /* Load the size of the struct into the primary */ + /* Load the size of the struct or union into the primary */ g_getimmed (CF_INT | CF_UNSIGNED | CF_CONST, CheckedSizeOf (ltype), 0); /* Call the memcpy function */ @@ -137,12 +137,13 @@ void Assignment (ExprDesc* Expr) /* Skip the '=' token */ NextToken (); - /* cc65 does not have full support for handling structs by value. Since - ** assigning structs is one of the more useful operations from this - ** family, allow it here. + /* cc65 does not have full support for handling structs or unions. Since + ** assigning structs is one of the more useful operations from this family, + ** allow it here. + ** Note: IsClassStruct() is also true for union types. */ if (IsClassStruct (ltype)) { - /* Copy the struct by value */ + /* Copy the struct or union by value */ CopyStruct (Expr, &Expr2); } else if (ED_IsBitField (Expr)) { diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 5fcfa7115..2a989e9f8 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -225,7 +225,7 @@ Type* GetImplicitFuncType (void) -const Type* GetReplacementType (const Type* SType) +const Type* GetStructReplacementType (const Type* SType) /* Get a replacement type for passing a struct/union in the primary register */ { const Type* NewType; diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 62ea8d06d..3464e8a16 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -243,7 +243,7 @@ Type* GetCharArrayType (unsigned Len); Type* GetImplicitFuncType (void); /* Return a type string for an inplicitly declared function */ -const Type* GetReplacementType (const Type* SType); +const Type* GetStructReplacementType (const Type* SType); /* Get a replacement type for passing a struct/union in the primary register */ Type* PointerTo (const Type* T); @@ -483,7 +483,7 @@ INLINE int IsClassPtr (const Type* T) #if defined(HAVE_INLINE) INLINE int IsClassStruct (const Type* T) -/* Return true if this is a struct type */ +/* Return true if this is a struct or union type */ { return (GetClass (T) == T_CLASS_STRUCT); } diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 44137a773..828e0fd75 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -398,7 +398,7 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) /* Handle struct/union specially */ if (IsTypeStruct (Expr.Type) || IsTypeUnion (Expr.Type)) { /* Use the replacement type */ - Flags |= TypeOf (GetReplacementType (Expr.Type)); + Flags |= TypeOf (GetStructReplacementType (Expr.Type)); } else { /* Use the type of the argument for the push */ Flags |= TypeOf (Expr.Type); @@ -660,7 +660,7 @@ static void FunctionCall (ExprDesc* Expr) /* Handle struct/union specially */ if (IsTypeStruct (ReturnType) || IsTypeUnion (ReturnType)) { /* If there is no replacement type, then it is just the address */ - if (ReturnType == GetReplacementType (ReturnType)) { + if (ReturnType == GetStructReplacementType (ReturnType)) { /* Dereference it */ ED_IndExpr (Expr); ED_MarkExprAsRVal (Expr); @@ -1198,7 +1198,7 @@ static void ArrayRef (ExprDesc* Expr) static void StructRef (ExprDesc* Expr) -/* Process struct field after . or ->. */ +/* Process struct/union field after . or ->. */ { ident Ident; SymEntry* Field; @@ -1214,38 +1214,41 @@ static void StructRef (ExprDesc* Expr) return; } - /* Get the symbol table entry and check for a struct field */ + /* Get the symbol table entry and check for a struct/union field */ strcpy (Ident, CurTok.Ident); NextToken (); Field = FindStructField (Expr->Type, Ident); if (Field == 0) { - Error ("Struct/union has no field named '%s'", Ident); + Error ("No field named '%s' found in %s", GetBasicTypeName (Expr->Type), Ident); /* Make the expression an integer at address zero */ ED_MakeConstAbs (Expr, 0, type_int); return; } - /* A struct is usually an lvalue. If not, it is a struct passed in the - ** primary register, which is usually a result returned from a function. - ** However, it is possible that this rvalue is a result of certain - ** operations on an lvalue, and there are no reasons to disallow that. - ** So we just rely on the check on function returns to catch the errors - ** and dereference the rvalue address of the struct here. + /* A struct/union is usually an lvalue. If not, it is a struct/union passed + ** in the primary register, which is usually the result returned from a + ** function. However, it is possible that this rvalue is the result of + ** certain kind of operations on an lvalue such as assignment, and there + ** are no reasons to disallow such use cases. So we just rely on the check + ** upon function returns to catch the unsupported cases and dereference the + ** rvalue address of the struct/union here all the time. */ if (IsTypePtr (Expr->Type) || (ED_IsRVal (Expr) && ED_IsLocPrimary (Expr) && - Expr->Type == GetReplacementType (Expr->Type))) { + Expr->Type == GetStructReplacementType (Expr->Type))) { if (!ED_IsConst (Expr) && !ED_IsLocPrimary (Expr)) { - /* If we have a non-const struct pointer, load its content now */ + /* If we have a non-const struct/union pointer that is not in the + ** primary yet, load its content now. + */ LoadExpr (CF_NONE, Expr); /* Clear the offset */ Expr->IVal = 0; } - /* Dereference the expression */ + /* Dereference the address expression */ ED_IndExpr (Expr); } else if (!ED_IsLocQuasiConst (Expr) && !ED_IsLocPrimaryOrExpr (Expr)) { @@ -1255,7 +1258,7 @@ static void StructRef (ExprDesc* Expr) LoadExpr (CF_NONE, Expr); } - /* The type is the type of the field plus any qualifiers from the struct */ + /* The type is the field type plus any qualifiers from the struct/union */ if (IsClassStruct (Expr->Type)) { Q = GetQualifier (Expr->Type); } else { @@ -1280,13 +1283,22 @@ static void StructRef (ExprDesc* Expr) /* Safety check */ CHECK (Field->V.Offs + FieldSize <= StructSize); - /* The type of the operation depends on the type of the struct */ + /* The type of the operation depends on the type of the struct/union */ switch (StructSize) { - case 1: Flags = CF_CHAR | CF_UNSIGNED | CF_CONST; break; - case 2: Flags = CF_INT | CF_UNSIGNED | CF_CONST; break; - case 3: /* FALLTHROUGH */ - case 4: Flags = CF_LONG | CF_UNSIGNED | CF_CONST; break; - default: Internal ("Invalid struct size: %u", StructSize); break; + case 1: + Flags = CF_CHAR | CF_UNSIGNED | CF_CONST; + break; + case 2: + Flags = CF_INT | CF_UNSIGNED | CF_CONST; + break; + case 3: + /* FALLTHROUGH */ + case 4: + Flags = CF_LONG | CF_UNSIGNED | CF_CONST; + break; + default: + Internal ("Invalid %s size: %u", GetBasicTypeName (Expr->Type), StructSize); + break; } /* Generate a shift to get the field in the proper position in the @@ -1312,16 +1324,16 @@ static void StructRef (ExprDesc* Expr) } else { - /* Set the struct field offset */ + /* Set the struct/union field offset */ Expr->IVal += Field->V.Offs; /* Use the new type */ Expr->Type = FinalType; - /* An struct member is actually a variable. So the rules for variables - ** with respect to the reference type apply: If it's an array, it is + /* The usual rules for variables with respect to the reference types + ** apply to struct/union fields as well: If a field is an array, it is ** virtually an rvalue address, otherwise it's an lvalue reference. (A - ** function would also be an rvalue address, but a struct field cannot + ** function would also be an rvalue address, but a struct/union cannot ** contain functions). */ if (IsTypeArray (Expr->Type)) { @@ -1376,7 +1388,7 @@ static void hie11 (ExprDesc *Expr) case TOK_DOT: if (!IsClassStruct (Expr->Type)) { - Error ("Struct expected"); + Error ("Struct or union expected"); } StructRef (Expr); break; @@ -1387,7 +1399,7 @@ static void hie11 (ExprDesc *Expr) Expr->Type = ArrayToPtr (Expr->Type); } if (!IsClassPtr (Expr->Type) || !IsClassStruct (Indirect (Expr->Type))) { - Error ("Struct pointer expected"); + Error ("Struct pointer or union pointer expected"); } StructRef (Expr); break; diff --git a/src/cc65/function.c b/src/cc65/function.c index df667e8fa..4cd5565c4 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -478,7 +478,7 @@ void NewFunc (SymEntry* Func) } else { /* Handle struct/union specially */ if (IsTypeStruct (D->LastParam->Type) || IsTypeUnion (D->LastParam->Type)) { - Flags = TypeOf (GetReplacementType (D->LastParam->Type)) | CF_FORCECHAR; + Flags = TypeOf (GetStructReplacementType (D->LastParam->Type)) | CF_FORCECHAR; } else { Flags = TypeOf (D->LastParam->Type) | CF_FORCECHAR; } @@ -507,7 +507,7 @@ void NewFunc (SymEntry* Func) /* Check if we need copy for struct/union type */ RType = Param->Type; if (IsTypeStruct (RType) || IsTypeUnion (RType)) { - RType = GetReplacementType (RType); + RType = GetStructReplacementType (RType); /* If there is no replacement type, then it is just the address. ** We don't currently support this case. diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index a1384b0ed..6c839c420 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -331,7 +331,7 @@ static void ReturnStatement (void) /* Load the value into the primary */ if (IsTypeStruct (Expr.Type) || IsTypeUnion (Expr.Type)) { /* Handle struct/union specially */ - ReturnType = GetReplacementType (Expr.Type); + ReturnType = GetStructReplacementType (Expr.Type); if (ReturnType == Expr.Type) { Error ("Returning %s of this size by value is not supported", GetBasicTypeName (Expr.Type)); } diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index f19a251bd..f363d9134 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -488,24 +488,24 @@ SymEntry* FindTagSym (const char* Name) SymEntry* FindStructField (const Type* T, const char* Name) -/* Find a struct field in the fields list */ +/* Find a struct/union field in the fields list */ { SymEntry* Field = 0; - /* The given type may actually be a pointer to struct */ + /* The given type may actually be a pointer to struct/union */ if (IsTypePtr (T)) { ++T; } - /* Non-structs do not have any struct fields... */ + /* Only structs/unions have struct/union fields... */ if (IsClassStruct (T)) { /* Get a pointer to the struct/union type */ const SymEntry* Struct = GetSymEntry (T); CHECK (Struct != 0); - /* Now search in the struct symbol table. Beware: The table may not - ** exist. + /* Now search in the struct/union symbol table. Beware: The table may + ** not exist. */ if (Struct->V.S.SymTab) { Field = FindSymInTable (Struct->V.S.SymTab, Name, HashStr (Name)); diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h index 62e731042..94e5f2d9b 100644 --- a/src/cc65/symtab.h +++ b/src/cc65/symtab.h @@ -134,7 +134,7 @@ SymEntry* FindTagSym (const char* Name); /* Find the symbol with the given name in the tag table */ SymEntry* FindStructField (const Type* TypeArray, const char* Name); -/* Find a struct field in the fields list */ +/* Find a struct/union field in the fields list */ unsigned short FindSPAdjustment (const char* Name); /* Search for an entry in the table of SP adjustments */ From bbcb39978cf3f6ed14487a3c0195b0de25429bd2 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sat, 18 Jul 2020 23:12:07 +0200 Subject: [PATCH 0245/2710] Add test of signed bitfields for #1095 --- test/todo/bug1095.c | 101 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 test/todo/bug1095.c diff --git a/test/todo/bug1095.c b/test/todo/bug1095.c new file mode 100644 index 000000000..a00a10585 --- /dev/null +++ b/test/todo/bug1095.c @@ -0,0 +1,101 @@ +/* + Copyright 2020 Google LLC + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of signed bit-fields; see https://github.com/cc65/cc65/issues/1095 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +static struct signed_ints { + signed int a : 3; + signed int b : 3; + signed int c : 3; +} si = {-4, -1, 3}; + +static void test_signed_bitfield(void) +{ + if (si.a >= 0) { + printf("Got si.a = %d, expected negative.\n", si.a); + failures++; + } + if (si.a != -4) { + printf("Got si.a = %d, expected -4.\n", si.a); + failures++; + } + + if (si.b >= 0) { + printf("Got si.b = %d, expected negative.\n", si.b); + failures++; + } + if (si.b != -1) { + printf("Got si.b = %d, expected -1.\n", si.b); + failures++; + } + + if (si.b <= 0) { + printf("Got si.c = %d, expected positive.\n", si.c); + failures++; + } + if (si.c != 3) { + printf("Got si.c = %d, expected 3.\n", si.c); + failures++; + } + + si.a = -3; + si.b = 1; + si.c = -2; + + if (si.a >= 0) { + printf("Got si.a = %d, expected negative.\n", si.a); + failures++; + } + if (si.a != -3) { + printf("Got si.a = %d, expected -3.\n", si.a); + failures++; + } + + if (si.b <= 0) { + printf("Got si.b = %d, expected positive.\n", si.b); + failures++; + } + if (si.b != 1) { + printf("Got si.b = %d, expected 1.\n", si.b); + failures++; + } + + if (si.b >= 0) { + printf("Got si.c = %d, expected negative.\n", si.c); + failures++; + } + if (si.c != -2) { + printf("Got si.c = %d, expected -2.\n", si.c); + failures++; + } +} + +int main(void) +{ + test_signed_bitfield(); + printf("failures: %u\n", failures); + return failures; +} From 29c50ab25f24deb168cb0293c8c3259dad4c4b8f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 19 Jul 2020 17:56:15 +0800 Subject: [PATCH 0246/2710] Corrected the error message about struct/union members not found. --- src/cc65/expr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 828e0fd75..f28aa3965 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1219,7 +1219,7 @@ static void StructRef (ExprDesc* Expr) NextToken (); Field = FindStructField (Expr->Type, Ident); if (Field == 0) { - Error ("No field named '%s' found in %s", GetBasicTypeName (Expr->Type), Ident); + Error ("No field named '%s' found in %s", Ident, GetBasicTypeName (Expr->Type)); /* Make the expression an integer at address zero */ ED_MakeConstAbs (Expr, 0, type_int); return; From ee208aecd6285848a8470d42ce2a7213fcf63e90 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 19 Jul 2020 13:16:12 +0200 Subject: [PATCH 0247/2710] Removed unnecessary tool. It's not the domain of cc65 to provide tools already available elsewhere. --- util/cbm/cbmcvt.c | 55 ----------------------------------------------- 1 file changed, 55 deletions(-) delete mode 100644 util/cbm/cbmcvt.c diff --git a/util/cbm/cbmcvt.c b/util/cbm/cbmcvt.c deleted file mode 100644 index 11c0325e4..000000000 --- a/util/cbm/cbmcvt.c +++ /dev/null @@ -1,55 +0,0 @@ -/* cbmcvt.c -- PetSCII <--> ISO-8859-1 Conversion Filter Tool */ -/* 2010-09-06, Greg King */ - -#include <stdio.h> -#include <unistd.h> - -/* Translation table ISO-8859-1 -> PetSCII */ -static const unsigned char CTPET[256] = { - 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x14,0x09,0x0D,0x11,0x93,0x0A,0x0E,0x0F, - 0x10,0x0B,0x12,0x13,0x08,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, - 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, - 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, - 0x40,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, - 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0x5B,0xBF,0x5D,0x5E,0xA4, - 0xAD,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, - 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0xB3,0xDD,0xAB,0xB1,0xDF, - 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, - 0x90,0x91,0x92,0x0C,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, - 0xA0,0xA1,0xA2,0xA3,0x5F,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0x7D,0xAC,0x60,0xAE,0xAF, - 0xB0,0x7E,0xB2,0x7B,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0x5C, - 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, - 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0xDC,0x7C,0xDE,0x7F, - 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, - 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF -}; - -static unsigned char CTISO[256]; - - -int main (int argc, char *argv[]) { - int C; - size_t I = 0u; - - if (isatty(fileno(stdin))) { - fputs("cbmcvt v2.1 -- Conversion Filter (stdin --> stdout)\n" - " -p converts ISO-8859-1 to PetSCII\n" - " else, converts in other direction.\n", stderr); - return 0; - } - if (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'p') { - while ((C = fgetc (stdin)) != EOF) { - fputc (CTPET[C], stdout); - } - } else { - /* Create translation table PetSCII -> ISO-8859-1 */ - for (; I < sizeof CTPET; ++I) { - CTISO[CTPET[I]] = I; - } - - while ((C = fgetc (stdin)) != EOF) { - fputc (CTISO[C], stdout); - } - } - return 0; -} From fd0a6955da15c2dfd2beeab1f25fc2ed8aa319dc Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 19 Jul 2020 14:30:22 -0400 Subject: [PATCH 0248/2710] Changed "IsTypeStruct() || IsTypeUnion()" expressions into shorter "IsClassStruct()" expressions. Type-classes are groups of types that can be handled in the same way (similar syntax). --- src/cc65/expr.c | 4 ++-- src/cc65/function.c | 4 ++-- src/cc65/stmt.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index f28aa3965..ad3710e80 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -396,7 +396,7 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) } /* Handle struct/union specially */ - if (IsTypeStruct (Expr.Type) || IsTypeUnion (Expr.Type)) { + if (IsClassStruct (Expr.Type)) { /* Use the replacement type */ Flags |= TypeOf (GetStructReplacementType (Expr.Type)); } else { @@ -658,7 +658,7 @@ static void FunctionCall (ExprDesc* Expr) ReturnType = GetFuncReturn (Expr->Type); /* Handle struct/union specially */ - if (IsTypeStruct (ReturnType) || IsTypeUnion (ReturnType)) { + if (IsClassStruct (ReturnType)) { /* If there is no replacement type, then it is just the address */ if (ReturnType == GetStructReplacementType (ReturnType)) { /* Dereference it */ diff --git a/src/cc65/function.c b/src/cc65/function.c index 4cd5565c4..ff4c23656 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -477,7 +477,7 @@ void NewFunc (SymEntry* Func) Flags = CF_PTR; } else { /* Handle struct/union specially */ - if (IsTypeStruct (D->LastParam->Type) || IsTypeUnion (D->LastParam->Type)) { + if (IsClassStruct (D->LastParam->Type)) { Flags = TypeOf (GetStructReplacementType (D->LastParam->Type)) | CF_FORCECHAR; } else { Flags = TypeOf (D->LastParam->Type) | CF_FORCECHAR; @@ -506,7 +506,7 @@ void NewFunc (SymEntry* Func) /* Check if we need copy for struct/union type */ RType = Param->Type; - if (IsTypeStruct (RType) || IsTypeUnion (RType)) { + if (IsClassStruct (RType)) { RType = GetStructReplacementType (RType); /* If there is no replacement type, then it is just the address. diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index 6c839c420..b02ae1cd6 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -329,7 +329,7 @@ static void ReturnStatement (void) TypeConversion (&Expr, F_GetReturnType (CurrentFunc)); /* Load the value into the primary */ - if (IsTypeStruct (Expr.Type) || IsTypeUnion (Expr.Type)) { + if (IsClassStruct (Expr.Type)) { /* Handle struct/union specially */ ReturnType = GetStructReplacementType (Expr.Type); if (ReturnType == Expr.Type) { From 3c52ad1d9ef15170589f4d348072fa6bd3a9caa9 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 19 Jul 2020 21:23:08 +0800 Subject: [PATCH 0249/2710] New utility ED_DisBitField() to make an expression no longer a bit-field. --- src/cc65/exprdesc.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index a61c5d814..1541c2e4e 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -278,6 +278,16 @@ INLINE int ED_IsBitField (const ExprDesc* Expr) # define ED_IsBitField(Expr) (((Expr)->Flags & E_BITFIELD) != 0) #endif +#if defined(HAVE_INLINE) +INLINE void ED_DisBitField (ExprDesc* Expr) +/* Make the expression no longer a bit field */ +{ + Expr->Flags &= ~E_BITFIELD; +} +#else +# define ED_DisBitField(Expr) ((Expr)->Flags &= ~E_BITFIELD) +#endif + void ED_MakeBitField (ExprDesc* Expr, unsigned BitOffs, unsigned BitWidth); /* Make this expression a bit field expression */ From 62a6e3748737ab864759744b0a15d536c98a8fb2 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 19 Jul 2020 21:23:08 +0800 Subject: [PATCH 0250/2710] Made the code handling '&expression' slightly tidier. --- src/cc65/expr.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index ad3710e80..b05083323 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1867,23 +1867,23 @@ void hie10 (ExprDesc* Expr) NextToken (); ExprWithCheck (hie10, Expr); /* The & operator may be applied to any lvalue, and it may be - ** applied to functions, even if they're no lvalues. + ** applied to functions and arrays, even if they're not lvalues. */ - if (ED_IsRVal (Expr) && !IsTypeFunc (Expr->Type) && !IsTypeArray (Expr->Type)) { - Error ("Illegal address"); - } else { + if (!IsTypeFunc (Expr->Type) && !IsTypeArray (Expr->Type)) { + if (ED_IsRVal (Expr)) { + Error ("Illegal address"); + break; + } + if (ED_IsBitField (Expr)) { Error ("Cannot take address of bit-field"); /* Do it anyway, just to avoid further warnings */ - Expr->Flags &= ~E_BITFIELD; + ED_DisBitField (Expr); } - /* It's allowed in C to take the address of an array this way */ - if (!IsTypeFunc (Expr->Type) && !IsTypeArray (Expr->Type)) { - /* The & operator yields an rvalue address */ - ED_AddrExpr (Expr); - } - Expr->Type = PointerTo (Expr->Type); + /* The & operator yields an rvalue address */ + ED_AddrExpr (Expr); } + Expr->Type = PointerTo (Expr->Type); break; case TOK_SIZEOF: From b67b8ddd38c5f974ef686c29fdf2798ac7f77faf Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 19 Jul 2020 21:23:20 +0800 Subject: [PATCH 0251/2710] Disabled applying 'sizeof' to bit-fields. --- src/cc65/expr.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index b05083323..0b668f402 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1898,14 +1898,19 @@ void hie10 (ExprDesc* Expr) CodeMark Mark; GetCodePos (&Mark); hie10 (Expr); - /* If the expression is a literal string, release it, so it - ** won't be output as data if not used elsewhere. - */ - if (ED_IsLocLiteral (Expr)) { - ReleaseLiteral (Expr->LVal); + if (ED_IsBitField (Expr)) { + Error ("Cannot apply 'sizeof' to bit-field"); + Size = 0; + } else { + /* If the expression is a literal string, release it, so it + ** won't be output as data if not used elsewhere. + */ + if (ED_IsLocLiteral (Expr)) { + ReleaseLiteral (Expr->LVal); + } + /* Calculate the size */ + Size = CheckedSizeOf (Expr->Type); } - /* Calculate the size */ - Size = CheckedSizeOf (Expr->Type); /* Remove any generated code */ RemoveCode (&Mark); } From 22457833459ed453579a318aef9d5b3f68224fe4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 19 Jul 2020 21:26:55 +0800 Subject: [PATCH 0252/2710] Fixed ability to do actual type conversion from bit-fields to integers. Note this doesn't try to fix the signedness issues. --- src/cc65/typeconv.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index e8d581f54..3bc7d47cb 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -59,8 +59,8 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) /* Emit code to convert the given expression to a new type. */ { Type* OldType; - unsigned OldSize; - unsigned NewSize; + unsigned OldBits; + unsigned NewBits; /* Remember the old type */ @@ -83,8 +83,12 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) /* Get the sizes of the types. Since we've excluded void types, checking ** for known sizes makes sense here. */ - OldSize = CheckedSizeOf (OldType); - NewSize = CheckedSizeOf (NewType); + if (ED_IsBitField (Expr)) { + OldBits = Expr->BitWidth; + } else { + OldBits = CheckedSizeOf (OldType) * CHAR_BITS; + } + NewBits = CheckedSizeOf (NewType) * CHAR_BITS; /* lvalue? */ if (ED_IsLVal (Expr)) { @@ -97,7 +101,7 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) ** If both sizes are equal, do also leave the value alone. ** If the new size is larger, we must convert the value. */ - if (NewSize > OldSize) { + if (NewBits > OldBits) { /* Load the value into the primary */ LoadExpr (CF_NONE, Expr); @@ -114,10 +118,6 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) ** to handle sign extension correctly. */ - /* Get the current and new size of the value */ - unsigned OldBits = OldSize * 8; - unsigned NewBits = NewSize * 8; - /* Check if the new datatype will have a smaller range. If it ** has a larger range, things are OK, since the value is ** internally already represented by a long. @@ -151,7 +151,7 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) ** not equal, add conversion code. Be sure to convert chars ** correctly. */ - if (OldSize != NewSize) { + if (OldBits != NewBits) { /* Load the value into the primary */ LoadExpr (CF_NONE, Expr); @@ -167,6 +167,11 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) ExitPoint: /* The expression has always the new type */ ReplaceType (Expr, NewType); + + /* Bit-fields are converted to integers */ + if (ED_IsBitField (Expr)) { + ED_DisBitField (Expr); + } } From 71c2d27705fafeacfcf04fac554925328cd01fbb Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 20 Jul 2020 07:36:14 +0800 Subject: [PATCH 0253/2710] Removed an ED_IsBitField() test according to PR review. --- src/cc65/typeconv.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 3bc7d47cb..e915d7392 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -169,9 +169,7 @@ ExitPoint: ReplaceType (Expr, NewType); /* Bit-fields are converted to integers */ - if (ED_IsBitField (Expr)) { - ED_DisBitField (Expr); - } + ED_DisBitField (Expr); } From 78342fa82c3d7e6c9b586cfacbf229d1642860ed Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 20 Jul 2020 20:40:41 +0800 Subject: [PATCH 0254/2710] Fix for "auto" variables made "static" with the "-Cl" options. --- src/cc65/locals.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 9f8ee86ef..0007879d8 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -340,7 +340,7 @@ static void ParseAutoDecl (Declaration* Decl) LoadExpr (CF_NONE, &Expr); /* Store the value into the variable */ - g_putstatic (TypeOf (Sym->Type), DataLabel, 0); + g_putstatic (CF_STATIC | TypeOf (Sym->Type), DataLabel, 0); } /* Mark the variable as referenced */ From 5a9d76ad5211c944d5ef004c5742139f8cdc8dcd Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 20 Jul 2020 15:50:11 +0200 Subject: [PATCH 0255/2710] added test for issue #1108 --- test/val/bug1108.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 test/val/bug1108.c diff --git a/test/val/bug1108.c b/test/val/bug1108.c new file mode 100644 index 000000000..17ef022c3 --- /dev/null +++ b/test/val/bug1108.c @@ -0,0 +1,40 @@ + +/* bug #1108 - Problem with static locals? */ + +#include <stdio.h> + +#pragma static-locals (on) + +unsigned char x = 0; + +unsigned char PrintVar1(void) +{ + unsigned char cx = x + 1; + printf("cx:%d x:%d\n", cx, x); + return cx == 0; +} + +unsigned char PrintVar2(void) +{ + unsigned char cx = x + 1; + unsigned char cy; + cy = x + 1; + printf("cx:%d cy:%d x:%d\n", cx, cy, x); + return cx != cy; +} + +#pragma static-locals (off) + +unsigned char n; +unsigned char ret = 0; + +int main(void) +{ + for (n = 0; n < 10; n++) { + ++x; + ret |= PrintVar1(); + ret |= PrintVar2(); + } + return ret; +} + From 517df130ccdba93d99d27ab7fb42676cc84ce18e Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 20 Jul 2020 17:16:11 -0400 Subject: [PATCH 0256/2710] Made a regression test increment a variable after, instead of before, using it. That change allows the initial value of zero to be tested. --- test/val/bug1108.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/test/val/bug1108.c b/test/val/bug1108.c index 17ef022c3..1cd23c8e5 100644 --- a/test/val/bug1108.c +++ b/test/val/bug1108.c @@ -7,34 +7,31 @@ unsigned char x = 0; -unsigned char PrintVar1(void) +static unsigned char PrintVar1(void) { unsigned char cx = x + 1; + printf("cx:%d x:%d\n", cx, x); return cx == 0; } -unsigned char PrintVar2(void) +static unsigned char PrintVar2(void) { unsigned char cx = x + 1; unsigned char cy; + cy = x + 1; printf("cx:%d cy:%d x:%d\n", cx, cy, x); return cx != cy; } -#pragma static-locals (off) - -unsigned char n; -unsigned char ret = 0; +static unsigned char ret = 0; int main(void) { - for (n = 0; n < 10; n++) { - ++x; + do { ret |= PrintVar1(); ret |= PrintVar2(); - } + } while (++x < 10); return ret; } - From b60b303c5d24f718b0c14022b47ca1a838112ceb Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 20 Jul 2020 21:40:44 -0400 Subject: [PATCH 0257/2710] Added a missing asterisk to a "hardware" struct definition. --- include/cx16.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/cx16.h b/include/cx16.h index f129b26f4..87a6d37ca 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -290,7 +290,7 @@ struct __emul { unsigned char keymap; /* Keyboard layout number */ const char detect[2]; /* "16" if running on x16emu */ }; -#define EMULATOR (*(volatile struct __emul)0x9FB0) +#define EMULATOR (*(volatile struct __emul *)0x9FB0) /* An array window into the half Mebibyte or two Mebibytes of banked RAM */ #define BANK_RAM ((unsigned char[0x2000])0xA000) From 638e2546684f466495a253b37325ace82cb79ced Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 21 Jul 2020 14:48:49 +0200 Subject: [PATCH 0258/2710] rework pptest2 into a runable test and move to test/misc (since it does not compile with cc65) --- test/misc/Makefile | 5 +++ test/misc/pptest2.c | 73 +++++++++++++++++++++++++++++++++++++ testcode/compiler/pptest2.c | 19 ---------- 3 files changed, 78 insertions(+), 19 deletions(-) create mode 100644 test/misc/pptest2.c delete mode 100644 testcode/compiler/pptest2.c diff --git a/test/misc/Makefile b/test/misc/Makefile index 898ea1b2b..96f61dba1 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -78,6 +78,11 @@ $(WORKDIR)/bug760.$1.$2.prg: bug760.c | $(WORKDIR) $(if $(QUIET),echo misc/bug760.$1.$2.prg) -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) +# should compile, but gives an error +$(WORKDIR)/pptest2.$1.$2.prg: pptest2.c | $(WORKDIR) + $(if $(QUIET),echo misc/pptest2.$1.$2.prg) + -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # this should fail to compile, because cc65 does not support returning structs $(WORKDIR)/bug264.$1.$2.prg: bug264.c | $(WORKDIR) $(if $(QUIET),echo misc/bug264.$1.$2.prg) diff --git a/test/misc/pptest2.c b/test/misc/pptest2.c new file mode 100644 index 000000000..7857c67b2 --- /dev/null +++ b/test/misc/pptest2.c @@ -0,0 +1,73 @@ + +/* preprocessor test #2 */ + +#include <string.h> +#include <stdlib.h> +#include <stdio.h> + +int y = 7; +int z[] = {1, 2, 3}; +int res; + +int f(int i) { + printf("f: %d\n", i); + return i + 1; +} +int t(int i) { + printf("t: %d\n", i); + return i + 1; +} +int m(int i, int j) { + printf("m: %d %d\n", i, j); + return i + j + 1; +} + +#define x 3 +#define f(a) f(x * (a)) +#undef x +#define x 2 +#define g f +#define z z[0] +#define h g(~ +#define m(a) a(w) +#define w 0,1 +#define t(a) a +#define p() int +#define q(x) x +#define r(x,y) x ## y +#define str(x) # x + +int main(void) +{ + res = f(y+1) + f(f(z)) % t(t(g) (0) + t)(1); + printf("res: %d expected: 19\n", res); + if (res != 19) { + return EXIT_FAILURE; + } + + res = g(x+(3,4)-w) | h 5) & m(f)^m(m); + printf("res: %d expected: 3\n", res); + if (res != 3) { + return EXIT_FAILURE; + } + + p() i[q()] = { q(1), r(2,3), r(4,), r(,5), r(,) }; + printf("i[]: %d %d %d %d\n", i[0], i[1], i[2], i[3]); + printf("expected: %d %d %d %d\n", 1, 23, 4, 5); + if ((i[0] != 1) || (i[1] != 23) || (i[2] != 4) || (i[3] != 5)) { + return EXIT_FAILURE; + } + + char c[2][6] = { str(hello), str() }; + printf ("c[0]: %s expected: %s\n", c[0], "hello"); + printf ("c[1]: %s expected: %s\n", c[1], ""); + if (strcmp(c[0], "hello") != 0) { + return EXIT_FAILURE; + } + if (strcmp(c[1], "") != 0) { + return EXIT_FAILURE; + } + + printf("all fine\n"); + return EXIT_SUCCESS; +} diff --git a/testcode/compiler/pptest2.c b/testcode/compiler/pptest2.c deleted file mode 100644 index e127d53fb..000000000 --- a/testcode/compiler/pptest2.c +++ /dev/null @@ -1,19 +0,0 @@ -#define x 3 -#define f(a) f(x * (a)) -#undef x -#define x 2 -#define g f -#define z z[0] -#define h g(~ -#define m(a) a(w) -#define w 0,1 -#define t(a) a -#define p() int -#define q(x) x -#define r(x,y) x ## y -#define str(x) # x - -f(y+1) + f(f(z)) % t(t(g) (0) + t)(1); -g(x+(3,4)-w) | h 5) & m(f)^m(m); -p() i[q()] = { q(1), r(2,3), r(4,), r(,5), r(,) }; -char c[2][6] = { str(hello), str() }; From 010ed6d7290c9939495f8feb0d6ad3fba9510a05 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 21 Jul 2020 14:58:15 +0200 Subject: [PATCH 0259/2710] reworked pptest1/4/5 into executable tests and moved to test/val --- test/val/pptest1.c | 27 +++++++++++++++++++++++++++ test/val/pptest4.c | 24 ++++++++++++++++++++++++ test/val/pptest5.c | 24 ++++++++++++++++++++++++ testcode/compiler/pptest1.c | 6 ------ testcode/compiler/pptest4.c | 3 --- testcode/compiler/pptest5.c | 3 --- 6 files changed, 75 insertions(+), 12 deletions(-) create mode 100644 test/val/pptest1.c create mode 100644 test/val/pptest4.c create mode 100644 test/val/pptest5.c delete mode 100644 testcode/compiler/pptest1.c delete mode 100644 testcode/compiler/pptest4.c delete mode 100644 testcode/compiler/pptest5.c diff --git a/test/val/pptest1.c b/test/val/pptest1.c new file mode 100644 index 000000000..52b381b0b --- /dev/null +++ b/test/val/pptest1.c @@ -0,0 +1,27 @@ + +/* preprocessor test #1 */ + +#define hash_hash # ## # +#define mkstr(a) # a +#define in_between(a) mkstr(a) +#define join(c, d) in_between(c hash_hash d) + +#define x "first" +#define y "second" + +char p[] = join(x, y); // Comment + +#include <string.h> +#include <stdlib.h> +#include <stdio.h> + +int main(void) +{ + printf("expected: %s\n", "\"first\" ## \"second\""); + printf("p: %s\n", p); + if (!strcmp(p, "\"first\" ## \"second\"")) { + return EXIT_SUCCESS; + } + printf("all fine\n"); + return EXIT_FAILURE; +} diff --git a/test/val/pptest4.c b/test/val/pptest4.c new file mode 100644 index 000000000..827be7200 --- /dev/null +++ b/test/val/pptest4.c @@ -0,0 +1,24 @@ + +/* preprocessor test #4 */ + +#define t(x,y,z) x ## y ## z +int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,), + t(10,,), t(,11,), t(,,12), t(,,) }; + +int e[] = { 123, 45, 67, 89, 10, 11, 12, }; + +#include <string.h> +#include <stdlib.h> +#include <stdio.h> + +unsigned char i; + +int main(void) +{ + for (i = 0; i < 7; ++i) { + printf("j: %d expect: %d\n", j[i], e[i]); + if (j[i] != e[i]) return EXIT_FAILURE; + } + printf("all fine\n"); + return EXIT_SUCCESS; +} diff --git a/test/val/pptest5.c b/test/val/pptest5.c new file mode 100644 index 000000000..82f642c8e --- /dev/null +++ b/test/val/pptest5.c @@ -0,0 +1,24 @@ + +/* preprocessor test #5 */ + +#define t(x,y,z) x ## y ## z +int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,), + t(10,,), t(,11,), t(,,12), t(,,) }; + +int e[] = { 123, 45, 67, 89, 10, 11, 12, }; + +#include <string.h> +#include <stdlib.h> +#include <stdio.h> + +unsigned char i; + +int main(void) +{ + for (i = 0; i < 7; ++i) { + printf("j: %d expect: %d\n", j[i], e[i]); + if (j[i] != e[i]) return EXIT_FAILURE; + } + printf("all fine\n"); + return EXIT_SUCCESS; +} diff --git a/testcode/compiler/pptest1.c b/testcode/compiler/pptest1.c deleted file mode 100644 index e42135688..000000000 --- a/testcode/compiler/pptest1.c +++ /dev/null @@ -1,6 +0,0 @@ -#define hash_hash # ## # -#define mkstr(a) # a -#define in_between(a) mkstr(a) -#define join(c, d) in_between(c hash_hash d) - -char p[] = join(x, y); // Comment diff --git a/testcode/compiler/pptest4.c b/testcode/compiler/pptest4.c deleted file mode 100644 index b8540b5c5..000000000 --- a/testcode/compiler/pptest4.c +++ /dev/null @@ -1,3 +0,0 @@ -#define t(x,y,z) x ## y ## z -int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,), - t(10,,), t(,11,), t(,,12), t(,,) }; diff --git a/testcode/compiler/pptest5.c b/testcode/compiler/pptest5.c deleted file mode 100644 index 1f0bd4328..000000000 --- a/testcode/compiler/pptest5.c +++ /dev/null @@ -1,3 +0,0 @@ -#define t(x,y,z) x ## y ## z -int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,), - t(10,,), t(,11,), t(,,12), t(,,) }; From e4fc7a0feca596d18098c08598a97f388617e89f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 21 Jul 2020 15:30:35 +0200 Subject: [PATCH 0260/2710] reworked pptest3 into an exectutable test and moved to test/val --- test/val/pptest3.c | 44 +++++++++++++++++++++++++++++++++++++ testcode/compiler/pptest3.c | 16 -------------- 2 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 test/val/pptest3.c delete mode 100644 testcode/compiler/pptest3.c diff --git a/test/val/pptest3.c b/test/val/pptest3.c new file mode 100644 index 000000000..b48677703 --- /dev/null +++ b/test/val/pptest3.c @@ -0,0 +1,44 @@ + +/* preprocessor test #3 */ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +char *x1 = "123"; +char *x2 = "456"; +FILE *s; +char *str = "789"; + +#define str(s) # s +#define xstr(s) str(s) +#define debug(s, t) printf("x" # s "= %d, x" # t "= %s", \ + x ## s, x ## t) +#define INCFILE(n) vers ## n // Comment +#define glue(a,b) a ## b +#define xglue(a,b) glue(a,b) +#define HIGHLOW "hello" +#define LOW LOW ", world" + +int main(void) { + s = stdout; + + debug (1, 2); + + fputs (str (strncmp("abc\0d", "abc", '\4') // Comment + == 0) str (: @\n), s); + + str = glue (HIGH, LOW); + printf("str: %s\n", str); + if (strcmp(str, "hello") != 0) { + return EXIT_FAILURE; + } + + str = xglue (HIGH, LOW); + printf("str: %s\n", str); + if (strcmp(str, "hello, world") != 0) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/testcode/compiler/pptest3.c b/testcode/compiler/pptest3.c deleted file mode 100644 index 62aa7f705..000000000 --- a/testcode/compiler/pptest3.c +++ /dev/null @@ -1,16 +0,0 @@ -#define str(s) # s -#define xstr(s) str(s) -#define debug(s, t) printf("x" # s "= %d, x" # t "= %s", \ - x ## s, x ## t) -#define INCFILE(n) vers ## n // Comment -#define glue(a,b) a ## b -#define xglue(a,b) glue(a,b) -#define HIGHLOW "hello" -#define LOW LOW ", world" - -debug (1, 2); -fputs (str (strncmp("abc\0d", "abc", '\4') // Comment - == 0) str (: @\n), s); -glue (HIGH, LOW); -xglue (HIGH, LOW); - From 0250c87ac6326d0a9114457d9d9af5b259044baa Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 20 Jul 2020 22:34:57 +0800 Subject: [PATCH 0261/2710] Fixed SC_* type masks by making them all bitwise-exclusive. --- src/cc65/compile.c | 2 +- src/cc65/declare.c | 2 +- src/cc65/expr.c | 2 +- src/cc65/symentry.h | 49 ++++++++++++++++++++++++--------------------- src/cc65/symtab.c | 6 +++--- 5 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index ef66d38d2..4806017eb 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -112,7 +112,7 @@ static void Parse (void) ParseDeclSpec (&Spec, SC_EXTERN | SC_STATIC, T_INT); /* Don't accept illegal storage classes */ - if ((Spec.StorageClass & SC_TYPE) == 0) { + if ((Spec.StorageClass & SC_TYPEMASK) == 0) { if ((Spec.StorageClass & SC_AUTO) != 0 || (Spec.StorageClass & SC_REGISTER) != 0) { Error ("Illegal storage class"); diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 2a21e5a76..3b1cf63e7 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -490,7 +490,7 @@ static void ParseEnumDecl (void) } /* Add an entry to the symbol table */ - AddConstSym (Ident, type_int, SC_ENUM, EnumVal++); + AddConstSym (Ident, type_int, SC_ENUM|SC_CONST, EnumVal++); /* Check for end of definition */ if (CurTok.Tok != TOK_COMMA) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 0b668f402..d31b153a5 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -758,7 +758,7 @@ static void Primary (ExprDesc* E) /* Check for illegal symbol types */ CHECK ((Sym->Flags & SC_LABEL) != SC_LABEL); - if (Sym->Flags & SC_TYPE) { + if (Sym->Flags & SC_ESUTYPEMASK) { /* Cannot use type symbols */ Error ("Variable identifier expected"); /* Assume an int type to make E valid */ diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 62bf0b0e7..27c6ccc1e 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -69,39 +69,42 @@ struct CodeEntry; /* Storage classes and flags */ -#define SC_AUTO 0x0001U /* Auto variable */ -#define SC_REGISTER 0x0002U /* Register variable */ -#define SC_STATIC 0x0004U /* Static */ -#define SC_EXTERN 0x0008U /* Extern linkage */ +#define SC_NONE 0x0000U /* Nothing */ +#define SC_STRUCT 0x0001U /* Struct */ +#define SC_UNION 0x0002U /* Union */ +#define SC_TYPEDEF 0x0004U /* A typedef */ +#define SC_ESUTYPEMASK 0x0007U /* Mask for above types */ +#define SC_ENUM 0x0008U /* An enum */ +#define SC_BITFIELD 0x0010U /* A bit-field inside a struct or union */ +#define SC_TYPEMASK 0x001FU /* Mask for above types */ -#define SC_ENUM 0x0030U /* An enum */ #define SC_CONST 0x0020U /* A numeric constant with a type */ -#define SC_LABEL 0x0040U /* A goto label */ +#define SC_LABEL 0x0040U /* A goto code label */ #define SC_PARAM 0x0080U /* A function parameter */ #define SC_FUNC 0x0100U /* A function */ - #define SC_DEFTYPE 0x0200U /* Parameter has default type (=int, old style) */ -#define SC_STORAGE 0x0400U /* Symbol with associated storage */ -#define SC_DEFAULT 0x0800U /* Flag: default storage class was used */ +#define SC_STRUCTFIELD 0x0400U /* Struct or union field */ + +#define SC_DECL 0x0800U /* Symbol is declared in global scope */ #define SC_DEF 0x1000U /* Symbol is defined */ #define SC_REF 0x2000U /* Symbol is referenced */ -#define SC_TYPE 0x4000U /* This is a type, struct, typedef, etc. */ -#define SC_STRUCT 0x4001U /* Struct */ -#define SC_UNION 0x4002U /* Union */ -#define SC_STRUCTFIELD 0x4003U /* Struct or union field */ -#define SC_BITFIELD 0x4004U /* A bit-field inside a struct or union */ -#define SC_TYPEDEF 0x4005U /* A typedef */ -#define SC_TYPEMASK 0x400FU /* Mask for above types */ +#define SC_ZEROPAGE 0x4000U /* Symbol marked as zeropage */ -#define SC_ZEROPAGE 0x8000U /* Symbol marked as zeropage */ +#define SC_STORAGE 0x8000U /* Symbol with associated storage */ -#define SC_HAVEATTR 0x10000U /* Symbol has attributes */ +#define SC_AUTO 0x010000U /* Auto variable */ +#define SC_REGISTER 0x020000U /* Register variable */ +#define SC_STATIC 0x040000U /* Static - not to be confused with other *_STATIC */ +#define SC_EXTERN 0x080000U /* Extern linkage */ +#define SC_STORAGEMASK 0x0F0000U /* Storage type mask */ -#define SC_GOTO 0x20000U -#define SC_SPADJUSTMENT 0x40000U -#define SC_GOTO_IND 0x80000U /* Indirect goto */ +#define SC_HAVEATTR 0x100000U /* Symbol has attributes */ + +#define SC_GOTO 0x200000U +#define SC_SPADJUSTMENT 0x400000U +#define SC_GOTO_IND 0x800000U /* Indirect goto */ @@ -245,10 +248,10 @@ INLINE int SymIsRegVar (const SymEntry* Sym) /* Return true if the given entry is a register variable */ /* ### HACK! Fix the ugly type flags! */ { - return ((Sym->Flags & (SC_REGISTER|SC_TYPE)) == SC_REGISTER); + return ((Sym->Flags & (SC_REGISTER|SC_TYPEMASK)) == SC_REGISTER); } #else -# define SymIsRegVar(Sym) (((Sym)->Flags & (SC_REGISTER|SC_TYPE)) == SC_REGISTER) +# define SymIsRegVar(Sym) (((Sym)->Flags & (SC_REGISTER|SC_ESUTYPEMASK)) == SC_REGISTER) #endif int SymIsOutputFunc (const SymEntry* Sym); diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index f363d9134..1408f9f4c 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -821,7 +821,7 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs /* Set the symbol attributes */ Entry->Type = TypeDup (T); - if ((Flags & SC_AUTO) == SC_AUTO) { + if ((Flags & SC_AUTO) == SC_AUTO || (Flags & SC_TYPEDEF) == SC_TYPEDEF) { Entry->V.Offs = Offs; } else if ((Flags & SC_REGISTER) == SC_REGISTER) { Entry->V.R.RegOffs = Offs; @@ -872,7 +872,7 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) } /* We have a symbol with this name already */ - if (Entry->Flags & SC_TYPE) { + if (Entry->Flags & SC_TYPEMASK) { Error ("Multiple definition for '%s'", Name); return Entry; } @@ -1109,7 +1109,7 @@ void EmitDebugInfo (void) } Sym = SymTab->SymHead; while (Sym) { - if ((Sym->Flags & (SC_CONST|SC_TYPE)) == 0) { + if ((Sym->Flags & (SC_CONST|SC_TYPEMASK)) == 0) { if (Sym->Flags & SC_AUTO) { AddTextLine ("%s, \"%s\", \"00\", auto, %d", Head, Sym->Name, Sym->V.Offs); From 65081aebed14588cf048bc5fe6fcff474c6e38e8 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 20 Jul 2020 22:34:57 +0800 Subject: [PATCH 0262/2710] Made able to recognize global declarations of static arrays. Fixed Issue #975. --- src/cc65/compile.c | 25 ++++++++++++++++--------- src/cc65/expr.c | 2 +- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 4806017eb..f7e4bd35d 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -151,14 +151,17 @@ static void Parse (void) ** This means that "extern int i;" will not get storage allocated. */ if ((Decl.StorageClass & SC_FUNC) != SC_FUNC && - (Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF && - ((Spec.Flags & DS_DEF_STORAGE) != 0 || - (Decl.StorageClass & (SC_EXTERN|SC_STATIC)) == SC_STATIC || - ((Decl.StorageClass & SC_EXTERN) != 0 && - CurTok.Tok == TOK_ASSIGN))) { - - /* We will allocate storage */ - Decl.StorageClass |= SC_STORAGE; + (Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { + if ((Spec.Flags & DS_DEF_STORAGE) != 0 || + (Decl.StorageClass & (SC_EXTERN|SC_STATIC)) == SC_STATIC || + ((Decl.StorageClass & SC_EXTERN) != 0 && + CurTok.Tok == TOK_ASSIGN)) { + /* We will allocate storage */ + Decl.StorageClass |= SC_STORAGE; + } else { + /* It's a declaration */ + Decl.StorageClass |= SC_DECL; + } } /* If this is a function declarator that is not followed by a comma @@ -243,7 +246,11 @@ static void Parse (void) if (!IsTypeArray (Decl.Type)) { Error ("Variable '%s' has unknown size", Decl.Ident); } - Entry->Flags &= ~(SC_STORAGE | SC_DEF); + /* Do this only if the same array has not been defined */ + if (!SymIsDef (Entry)) { + Entry->Flags &= ~(SC_STORAGE | SC_DEF); + Entry->Flags |= SC_DECL; + } } else { /* A global (including static) uninitialized variable is ** only a tentative definition. For example, this is valid: diff --git a/src/cc65/expr.c b/src/cc65/expr.c index d31b153a5..a35ad59a9 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -802,7 +802,7 @@ static void Primary (ExprDesc* E) E->Name = Sym->V.R.RegOffs; } else if ((Sym->Flags & SC_STATIC) == SC_STATIC) { /* Static variable */ - if (Sym->Flags & (SC_EXTERN | SC_STORAGE)) { + if (Sym->Flags & (SC_EXTERN | SC_STORAGE | SC_DECL)) { E->Flags = E_LOC_GLOBAL | E_RTYPE_LVAL; E->Name = (uintptr_t) Sym->Name; } else { From 18bd76bb9043c7549bbd2db35c6218f9f228f3f2 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 21 Jul 2020 13:09:41 +0800 Subject: [PATCH 0263/2710] Minor fixes and improvements. --- src/cc65/pragma.c | 2 +- src/cc65/symentry.c | 24 +++++++++++++++++++----- src/cc65/symentry.h | 20 +++++++++----------- src/cc65/symtab.c | 2 +- 4 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index b05ef6122..93c83906f 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -523,7 +523,7 @@ static void WrappedCallPragma (StrBuf* B) Entry = FindSym(Name); /* Check if the name is valid */ - if (Entry && Entry->Flags & SC_FUNC) { + if (Entry && (Entry->Flags & SC_FUNC) == SC_FUNC) { PushWrappedCall(Entry, (unsigned char) Val); Entry->Flags |= SC_REF; diff --git a/src/cc65/symentry.c b/src/cc65/symentry.c index 18cc026ea..fbcc84c98 100644 --- a/src/cc65/symentry.c +++ b/src/cc65/symentry.c @@ -104,16 +104,21 @@ void FreeSymEntry (SymEntry* E) void DumpSymEntry (FILE* F, const SymEntry* E) /* Dump the given symbol table entry to the file in readable form */ { - static const struct { + typedef const struct { const char* Name; unsigned Val; - } Flags [] = { - /* Beware: Order is important! */ + } SCFlagTable; + + static SCFlagTable ESUTypes[] = { { "SC_TYPEDEF", SC_TYPEDEF }, - { "SC_BITFIELD", SC_BITFIELD }, - { "SC_STRUCTFIELD", SC_STRUCTFIELD }, { "SC_UNION", SC_UNION }, { "SC_STRUCT", SC_STRUCT }, + }; + + static SCFlagTable Flags[] = { + /* Beware: Order is important! */ + { "SC_BITFIELD", SC_BITFIELD }, + { "SC_STRUCTFIELD", SC_STRUCTFIELD }, { "SC_AUTO", SC_AUTO }, { "SC_REGISTER", SC_REGISTER }, { "SC_STATIC", SC_STATIC }, @@ -124,6 +129,7 @@ void DumpSymEntry (FILE* F, const SymEntry* E) { "SC_PARAM", SC_PARAM }, { "SC_FUNC", SC_FUNC }, { "SC_STORAGE", SC_STORAGE }, + { "SC_DECL", SC_DECL }, { "SC_DEF", SC_DEF }, { "SC_REF", SC_REF }, { "SC_ZEROPAGE", SC_ZEROPAGE }, @@ -143,6 +149,14 @@ void DumpSymEntry (FILE* F, const SymEntry* E) /* Print the flags */ SymFlags = E->Flags; fprintf (F, " Flags:"); + if ((SymFlags & SC_ESUTYPEMASK) != 0) { + for (I = 0; I < sizeof (ESUTypes) / sizeof (ESUTypes[0]); ++I) { + if ((SymFlags & SC_ESUTYPEMASK) == ESUTypes[I].Val) { + SymFlags &= ~SC_ESUTYPEMASK; + fprintf (F, " %s", ESUTypes[I].Name); + } + } + } for (I = 0; I < sizeof (Flags) / sizeof (Flags[0]) && SymFlags != 0; ++I) { if ((SymFlags & Flags[I].Val) == Flags[I].Val) { SymFlags &= ~Flags[I].Val; diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 27c6ccc1e..820ed5025 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -74,24 +74,22 @@ struct CodeEntry; #define SC_UNION 0x0002U /* Union */ #define SC_TYPEDEF 0x0004U /* A typedef */ #define SC_ESUTYPEMASK 0x0007U /* Mask for above types */ -#define SC_ENUM 0x0008U /* An enum */ +#define SC_ENUM 0x0008U /* An enumerator */ #define SC_BITFIELD 0x0010U /* A bit-field inside a struct or union */ #define SC_TYPEMASK 0x001FU /* Mask for above types */ -#define SC_CONST 0x0020U /* A numeric constant with a type */ +#define SC_FUNC 0x0020U /* A function */ #define SC_LABEL 0x0040U /* A goto code label */ -#define SC_PARAM 0x0080U /* A function parameter */ -#define SC_FUNC 0x0100U /* A function */ +#define SC_CONST 0x0080U /* A numeric constant with a type */ +#define SC_PARAM 0x0100U /* A function parameter */ #define SC_DEFTYPE 0x0200U /* Parameter has default type (=int, old style) */ #define SC_STRUCTFIELD 0x0400U /* Struct or union field */ -#define SC_DECL 0x0800U /* Symbol is declared in global scope */ +#define SC_ZEROPAGE 0x0800U /* Symbol marked as zeropage */ #define SC_DEF 0x1000U /* Symbol is defined */ #define SC_REF 0x2000U /* Symbol is referenced */ - -#define SC_ZEROPAGE 0x4000U /* Symbol marked as zeropage */ - +#define SC_DECL 0x4000U /* Symbol is declared in global scope */ #define SC_STORAGE 0x8000U /* Symbol with associated storage */ #define SC_AUTO 0x010000U /* Auto variable */ @@ -217,10 +215,10 @@ INLINE int SymIsBitField (const SymEntry* Sym) INLINE int SymIsTypeDef (const SymEntry* Sym) /* Return true if the given entry is a typedef entry */ { - return ((Sym->Flags & SC_TYPEDEF) == SC_TYPEDEF); + return ((Sym->Flags & SC_TYPEMASK) == SC_TYPEDEF); } #else -# define SymIsTypeDef(Sym) (((Sym)->Flags & SC_TYPEDEF) == SC_TYPEDEF) +# define SymIsTypeDef(Sym) (((Sym)->Flags & SC_TYPEMASK) == SC_TYPEDEF) #endif #if defined(HAVE_INLINE) @@ -251,7 +249,7 @@ INLINE int SymIsRegVar (const SymEntry* Sym) return ((Sym->Flags & (SC_REGISTER|SC_TYPEMASK)) == SC_REGISTER); } #else -# define SymIsRegVar(Sym) (((Sym)->Flags & (SC_REGISTER|SC_ESUTYPEMASK)) == SC_REGISTER) +# define SymIsRegVar(Sym) (((Sym)->Flags & (SC_REGISTER|SC_TYPEMASK)) == SC_REGISTER) #endif int SymIsOutputFunc (const SymEntry* Sym); diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 1408f9f4c..6395f9a4a 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -821,7 +821,7 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs /* Set the symbol attributes */ Entry->Type = TypeDup (T); - if ((Flags & SC_AUTO) == SC_AUTO || (Flags & SC_TYPEDEF) == SC_TYPEDEF) { + if ((Flags & SC_AUTO) == SC_AUTO || (Flags & SC_TYPEMASK) == SC_TYPEDEF) { Entry->V.Offs = Offs; } else if ((Flags & SC_REGISTER) == SC_REGISTER) { Entry->V.R.RegOffs = Offs; From c66d0881b9bc34f3d2213eedcedc236b56da1f03 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 21 Jul 2020 15:16:47 +0800 Subject: [PATCH 0264/2710] Made the enum/enumerator types clearer and improved DumpSymEntry() output. --- src/cc65/declare.c | 2 +- src/cc65/symentry.c | 37 +++++++++++++++++++++++++------------ src/cc65/symentry.h | 5 +++-- src/cc65/symtab.c | 6 +++--- 4 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 3b1cf63e7..cd5142952 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -490,7 +490,7 @@ static void ParseEnumDecl (void) } /* Add an entry to the symbol table */ - AddConstSym (Ident, type_int, SC_ENUM|SC_CONST, EnumVal++); + AddConstSym (Ident, type_int, SC_ENUMERATOR|SC_CONST, EnumVal++); /* Check for end of definition */ if (CurTok.Tok != TOK_COMMA) diff --git a/src/cc65/symentry.c b/src/cc65/symentry.c index fbcc84c98..c8d4f9e2a 100644 --- a/src/cc65/symentry.c +++ b/src/cc65/symentry.c @@ -113,26 +113,29 @@ void DumpSymEntry (FILE* F, const SymEntry* E) { "SC_TYPEDEF", SC_TYPEDEF }, { "SC_UNION", SC_UNION }, { "SC_STRUCT", SC_STRUCT }, + { "SC_ENUM", SC_ENUM }, }; - static SCFlagTable Flags[] = { - /* Beware: Order is important! */ + static SCFlagTable Types[] = { { "SC_BITFIELD", SC_BITFIELD }, { "SC_STRUCTFIELD", SC_STRUCTFIELD }, - { "SC_AUTO", SC_AUTO }, - { "SC_REGISTER", SC_REGISTER }, - { "SC_STATIC", SC_STATIC }, - { "SC_EXTERN", SC_EXTERN }, - { "SC_ENUM", SC_ENUM }, + { "SC_ENUMERATOR", SC_ENUMERATOR }, { "SC_CONST", SC_CONST }, { "SC_LABEL", SC_LABEL }, { "SC_PARAM", SC_PARAM }, { "SC_FUNC", SC_FUNC }, + }; + + static SCFlagTable Storages[] = { + { "SC_AUTO", SC_AUTO }, + { "SC_REGISTER", SC_REGISTER }, + { "SC_STATIC", SC_STATIC }, + { "SC_EXTERN", SC_EXTERN }, { "SC_STORAGE", SC_STORAGE }, + { "SC_ZEROPAGE", SC_ZEROPAGE }, { "SC_DECL", SC_DECL }, { "SC_DEF", SC_DEF }, { "SC_REF", SC_REF }, - { "SC_ZEROPAGE", SC_ZEROPAGE }, }; unsigned I; @@ -149,18 +152,28 @@ void DumpSymEntry (FILE* F, const SymEntry* E) /* Print the flags */ SymFlags = E->Flags; fprintf (F, " Flags:"); + /* Enum, struct, union and typedefs */ if ((SymFlags & SC_ESUTYPEMASK) != 0) { for (I = 0; I < sizeof (ESUTypes) / sizeof (ESUTypes[0]); ++I) { if ((SymFlags & SC_ESUTYPEMASK) == ESUTypes[I].Val) { SymFlags &= ~SC_ESUTYPEMASK; fprintf (F, " %s", ESUTypes[I].Name); + break; } } } - for (I = 0; I < sizeof (Flags) / sizeof (Flags[0]) && SymFlags != 0; ++I) { - if ((SymFlags & Flags[I].Val) == Flags[I].Val) { - SymFlags &= ~Flags[I].Val; - fprintf (F, " %s", Flags[I].Name); + /* Other type flags */ + for (I = 0; I < sizeof (Types) / sizeof (Types[0]) && SymFlags != 0; ++I) { + if ((SymFlags & Types[I].Val) == Types[I].Val) { + SymFlags &= ~Types[I].Val; + fprintf (F, " %s", Types[I].Name); + } + } + /* Storage flags */ + for (I = 0; I < sizeof (Storages) / sizeof (Storages[0]) && SymFlags != 0; ++I) { + if ((SymFlags & Storages[I].Val) == Storages[I].Val) { + SymFlags &= ~Storages[I].Val; + fprintf (F, " %s", Storages[I].Name); } } if (SymFlags != 0) { diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 820ed5025..c112ff013 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -72,9 +72,10 @@ struct CodeEntry; #define SC_NONE 0x0000U /* Nothing */ #define SC_STRUCT 0x0001U /* Struct */ #define SC_UNION 0x0002U /* Union */ -#define SC_TYPEDEF 0x0004U /* A typedef */ +#define SC_ENUM 0x0003U /* Enum */ +#define SC_TYPEDEF 0x0004U /* Typedef */ #define SC_ESUTYPEMASK 0x0007U /* Mask for above types */ -#define SC_ENUM 0x0008U /* An enumerator */ +#define SC_ENUMERATOR 0x0008U /* An enumerator */ #define SC_BITFIELD 0x0010U /* A bit-field inside a struct or union */ #define SC_TYPEMASK 0x001FU /* Mask for above types */ diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 6395f9a4a..fdbbff7dc 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -633,7 +633,7 @@ SymEntry* AddConstSym (const char* Name, const Type* T, unsigned Flags, long Val /* Add an constant symbol to the symbol table and return it */ { /* Enums must be inserted in the global symbol table */ - SymTable* Tab = ((Flags & SC_ENUM) == SC_ENUM)? SymTab0 : SymTab; + SymTable* Tab = ((Flags & SC_ENUMERATOR) == SC_ENUMERATOR) ? SymTab0 : SymTab; /* Do we have an entry with this name already? */ SymEntry* Entry = FindSymInTable (Tab, Name, HashStr (Name)); @@ -867,8 +867,8 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) /* If the existing symbol is an enumerated constant, ** then avoid a compiler crash. See GitHub issue #728. */ - if (Entry->Flags & SC_ENUM) { - Fatal ("Can't redeclare enum constant '%s' as global variable", Name); + if (Entry->Flags & SC_ENUMERATOR) { + Fatal ("Can't redeclare enumerator constant '%s' as global variable", Name); } /* We have a symbol with this name already */ From 07e18774f76e09d8cc149366c6b420e002348de0 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 21 Jul 2020 22:41:31 +0800 Subject: [PATCH 0265/2710] Added spaces around '|' with regex replacement. --- src/cc65/declare.c | 2 +- src/cc65/symentry.h | 4 ++-- src/cc65/symtab.c | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index cd5142952..323e9af14 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -490,7 +490,7 @@ static void ParseEnumDecl (void) } /* Add an entry to the symbol table */ - AddConstSym (Ident, type_int, SC_ENUMERATOR|SC_CONST, EnumVal++); + AddConstSym (Ident, type_int, SC_ENUMERATOR | SC_CONST, EnumVal++); /* Check for end of definition */ if (CurTok.Tok != TOK_COMMA) diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index c112ff013..13829e958 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -247,10 +247,10 @@ INLINE int SymIsRegVar (const SymEntry* Sym) /* Return true if the given entry is a register variable */ /* ### HACK! Fix the ugly type flags! */ { - return ((Sym->Flags & (SC_REGISTER|SC_TYPEMASK)) == SC_REGISTER); + return ((Sym->Flags & (SC_REGISTER | SC_TYPEMASK)) == SC_REGISTER); } #else -# define SymIsRegVar(Sym) (((Sym)->Flags & (SC_REGISTER|SC_TYPEMASK)) == SC_REGISTER) +# define SymIsRegVar(Sym) (((Sym)->Flags & (SC_REGISTER | SC_TYPEMASK)) == SC_REGISTER) #endif int SymIsOutputFunc (const SymEntry* Sym); diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index fdbbff7dc..26a09cd87 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -717,7 +717,7 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags) for (i = 0; i < CollCount (Entry->V.L.DefsOrRefs); i++) { DOR = CollAt (Entry->V.L.DefsOrRefs, i); - if ((DOR->Flags & SC_DEF) && (Flags & SC_REF) && (Flags & (SC_GOTO|SC_GOTO_IND))) { + if ((DOR->Flags & SC_DEF) && (Flags & SC_REF) && (Flags & (SC_GOTO | SC_GOTO_IND))) { /* We're processing a goto and here is its destination label. ** This means the difference between SP values is already known, ** so we simply emit the SP adjustment code. @@ -739,7 +739,7 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags) } - if ((DOR->Flags & SC_REF) && (DOR->Flags & (SC_GOTO|SC_GOTO_IND)) && (Flags & SC_DEF)) { + if ((DOR->Flags & SC_REF) && (DOR->Flags & (SC_GOTO | SC_GOTO_IND)) && (Flags & SC_DEF)) { /* We're processing a label, let's update all gotos encountered ** so far */ @@ -1109,7 +1109,7 @@ void EmitDebugInfo (void) } Sym = SymTab->SymHead; while (Sym) { - if ((Sym->Flags & (SC_CONST|SC_TYPEMASK)) == 0) { + if ((Sym->Flags & (SC_CONST | SC_TYPEMASK)) == 0) { if (Sym->Flags & SC_AUTO) { AddTextLine ("%s, \"%s\", \"00\", auto, %d", Head, Sym->Name, Sym->V.Offs); From b2d799824197bb899459e34fbfdf085f20880cf1 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 21 Jul 2020 19:15:41 +0200 Subject: [PATCH 0266/2710] update makefile to use $(NOT) as discussed with Oliver --- test/misc/Makefile | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/test/misc/Makefile b/test/misc/Makefile index 96f61dba1..1405e05bf 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -66,37 +66,42 @@ define PRG_template # should compile, but gives an error $(WORKDIR)/bug975.$1.$2.prg: bug975.c | $(WORKDIR) $(if $(QUIET),echo misc/bug975.$1.$2.prg) - -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # should compile, but gives an error $(WORKDIR)/bug250.$1.$2.prg: bug250.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." $(if $(QUIET),echo misc/bug250.$1.$2.prg) - -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # should compile, but gives an error $(WORKDIR)/bug760.$1.$2.prg: bug760.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." $(if $(QUIET),echo misc/bug760.$1.$2.prg) - -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # should compile, but gives an error $(WORKDIR)/pptest2.$1.$2.prg: pptest2.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." $(if $(QUIET),echo misc/pptest2.$1.$2.prg) - -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # this should fail to compile, because cc65 does not support returning structs $(WORKDIR)/bug264.$1.$2.prg: bug264.c | $(WORKDIR) + @echo "FIXME: " $$@ "compiles but should give an error." $(if $(QUIET),echo misc/bug264.$1.$2.prg) - -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # this should fail to compile, because there are errors in the code $(WORKDIR)/bug1048.$1.$2.prg: bug1048.c | $(WORKDIR) + @echo "FIXME: " $$@ "compiles but should give an error." $(if $(QUIET),echo misc/bug1048.$1.$2.prg) - -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # internal compiler error $(WORKDIR)/bug1075.$1.$2.prg: bug1075.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1075.$1.$2.prg) - -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) @@ -106,13 +111,13 @@ $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) # these need reference data that can't be generated by a host-compiled program, # in a useful way -$(WORKDIR)/limits.$1.$2.prg: limits.c $(DIFF) +$(WORKDIR)/limits.$1.$2.prg: limits.c $(DIFF) | $(WORKDIR) $(if $(QUIET),echo misc/limits.$1.$2.prg) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/limits.$1.$2.out $(DIFF) $(WORKDIR)/limits.$1.$2.out limits.ref -$(WORKDIR)/goto.$1.$2.prg: goto.c $(DIFF) +$(WORKDIR)/goto.$1.$2.prg: goto.c $(DIFF) | $(WORKDIR) $(if $(QUIET),echo misc/goto.$1.$2.prg) $(CL65) -t sim$2 -$1 -o $$@ $$< 2>$(WORKDIR)/goto.$1.$2.out $(DIFF) $(WORKDIR)/goto.$1.$2.out goto.ref @@ -121,11 +126,12 @@ $(WORKDIR)/goto.$1.$2.prg: goto.c $(DIFF) $(WORKDIR)/fields.$1.$2.prg: fields.c | $(WORKDIR) @echo "FIXME: " $$@ "currently will fail." $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - -$(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) + $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) + $(WORKDIR)/sitest.$1.$2.prg: sitest.c | $(WORKDIR) - @echo "FIXME: " $$@ "currently will fail." - -$(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) -# -$(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) + @echo "FIXME: " $$@ "currently does not compile." + $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) +# $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) endef # PRG_template From a0c80a8c7248e76744056e3495519629c988fe28 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 21 Jul 2020 19:24:39 +0200 Subject: [PATCH 0267/2710] move (now working) tests to test/val --- test/misc/Makefile | 12 +----------- test/{misc => val}/bug975.c | 0 test/{misc => val}/fields.c | 0 3 files changed, 1 insertion(+), 11 deletions(-) rename test/{misc => val}/bug975.c (100%) rename test/{misc => val}/fields.c (100%) diff --git a/test/misc/Makefile b/test/misc/Makefile index 1405e05bf..42fbe2c55 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -63,11 +63,6 @@ $(DIFF): ../bdiff.c | $(WORKDIR) define PRG_template -# should compile, but gives an error -$(WORKDIR)/bug975.$1.$2.prg: bug975.c | $(WORKDIR) - $(if $(QUIET),echo misc/bug975.$1.$2.prg) - $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - # should compile, but gives an error $(WORKDIR)/bug250.$1.$2.prg: bug250.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." @@ -98,7 +93,7 @@ $(WORKDIR)/bug1048.$1.$2.prg: bug1048.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1048.$1.$2.prg) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) -# internal compiler error +# compiles, but we cant easily check if it works $(WORKDIR)/bug1075.$1.$2.prg: bug1075.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1075.$1.$2.prg) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) @@ -123,11 +118,6 @@ $(WORKDIR)/goto.$1.$2.prg: goto.c $(DIFF) | $(WORKDIR) $(DIFF) $(WORKDIR)/goto.$1.$2.out goto.ref # the rest are tests that fail currently for one reason or another -$(WORKDIR)/fields.$1.$2.prg: fields.c | $(WORKDIR) - @echo "FIXME: " $$@ "currently will fail." - $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) - $(WORKDIR)/sitest.$1.$2.prg: sitest.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) diff --git a/test/misc/bug975.c b/test/val/bug975.c similarity index 100% rename from test/misc/bug975.c rename to test/val/bug975.c diff --git a/test/misc/fields.c b/test/val/fields.c similarity index 100% rename from test/misc/fields.c rename to test/val/fields.c From 42c162c15e8d30eea651118c059a43de3b721cb9 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 21 Jul 2020 19:58:36 +0200 Subject: [PATCH 0268/2710] rework test for issue #1075 to return an exit code --- test/misc/Makefile | 1 + test/misc/bug1075.c | 25 +++++++++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/test/misc/Makefile b/test/misc/Makefile index 42fbe2c55..879ca7945 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -97,6 +97,7 @@ $(WORKDIR)/bug1048.$1.$2.prg: bug1048.c | $(WORKDIR) $(WORKDIR)/bug1075.$1.$2.prg: bug1075.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1075.$1.$2.prg) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) diff --git a/test/misc/bug1075.c b/test/misc/bug1075.c index be4cd75f4..6ff5ec8e7 100644 --- a/test/misc/bug1075.c +++ b/test/misc/bug1075.c @@ -1,10 +1,31 @@ /* bug #1075 Internal compiler error */ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + long rhs; -int main(void) +int test(void) { /* the whole lhs is errorneously treated as an absolute address (integer constant) neglecting its dereference */ return *(char *)0xD77C + rhs; -} +} + +int res; + +int main(void) +{ + memset(*(char *)0xD76C, 11, 0x80); + rhs = 0x10; + *(char *)(0xD77C + rhs) = 13; + *(char *)0xD77C = 23; + *(char *)0xD78C = 42; + res = test(); + printf("res: %d\n", res); + if (res != (23 + 0x10)) { + return EXIT_FAILURE; + } + return EXIT_SUCCESS; +} From 145084c41c1b1ea2b559ac4ec62654756ceb2404 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 21 Jul 2020 20:02:51 +0200 Subject: [PATCH 0269/2710] move test for issue #1075 to test/var --- test/misc/Makefile | 6 ------ test/{misc => val}/bug1075.c | 0 2 files changed, 6 deletions(-) rename test/{misc => val}/bug1075.c (100%) diff --git a/test/misc/Makefile b/test/misc/Makefile index 879ca7945..7e19d6360 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -93,12 +93,6 @@ $(WORKDIR)/bug1048.$1.$2.prg: bug1048.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1048.$1.$2.prg) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) -# compiles, but we cant easily check if it works -$(WORKDIR)/bug1075.$1.$2.prg: bug1075.c | $(WORKDIR) - $(if $(QUIET),echo misc/bug1075.$1.$2.prg) - $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) - # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(if $(QUIET),echo misc/endless.$1.$2.prg) diff --git a/test/misc/bug1075.c b/test/val/bug1075.c similarity index 100% rename from test/misc/bug1075.c rename to test/val/bug1075.c From 9e43c0a56977c69885b31f3c9710103fafb7a042 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 21 Jul 2020 21:04:41 +0200 Subject: [PATCH 0270/2710] added a test related to pr#1102 - we can now return structs by value when they are max. 4 bytes --- test/val/pr1102.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 test/val/pr1102.c diff --git a/test/val/pr1102.c b/test/val/pr1102.c new file mode 100644 index 000000000..2a78e997b --- /dev/null +++ b/test/val/pr1102.c @@ -0,0 +1,77 @@ + +/* pr#1102 - Passing structs/unions <= 4 bytes to/from functions */ + +#include <stdlib.h> +#include <stdio.h> + +typedef struct test1_s { + char a; + int b; + char c; +} test1_t; + +test1_t test1(int a, int b, int c) +{ + test1_t res; + res.a = a; + res.b = b; + res.c = c; + return res; +} + +int test2(test1_t s) +{ + printf("a: %d b: %d c: %d\n", s.a, s.b, s.c); + if ((s.a != 13) || (s.b != 4711) || (s.c != 99)) { + return 0; + } + return 1; +} + +typedef struct test2_s { + char a; + char b; + char c; + char d; +} test2_t; + +test2_t test3(test1_t s) +{ + test2_t ret; + printf("a: %d b: %d c: %d\n", s.a, s.b, s.c); + ret.a = s.c; + ret.b = s.b & 0xff; + ret.c = s.b >> 8; + ret.d = s.a; + return ret; +} + +int main(void) { + test1_t t1; + test2_t t2; + + t1 = test1(12, 1842, 23); + printf("a: %d b: %d c: %d\n", t1.a, t1.b, t1.c); + if ((t1.a != 12) || (t1.b != 1842) || (t1.c != 23)) { + return EXIT_FAILURE; + } + + t1.a = 13; + t1.b = 4711; + t1.c = 99; + if (test2(t1) != 1) { + return EXIT_FAILURE; + } + + t1.a = 66; + t1.b = 0x7788; + t1.c = 22; + t2 = test3(t1); + printf("a: %d b: %d c: %d d: %d\n", t2.a, t2.b, t2.c, t2.d); + if ((t2.a != 22) || (t2.b != 0x88) || (t2.c != 0x77) || (t2.d != 66)) { + return EXIT_FAILURE; + } + + printf("all fine\n"); + return EXIT_SUCCESS; +} From 2bbea6779a0034e7353907776d89ef71dc1bf695 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 21 Jul 2020 23:04:03 +0200 Subject: [PATCH 0271/2710] properly configure sitest so it could work, if we had the respective features :) --- test/misc/sitest.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/test/misc/sitest.c b/test/misc/sitest.c index 3332c064e..d13acf92c 100644 --- a/test/misc/sitest.c +++ b/test/misc/sitest.c @@ -19,8 +19,9 @@ NOTE: This is not a thorough validation test of the facilities. */ +#define STANDARD_CC65 +#define NO_WCHAR #define NO_INTERNAL_WCHAR -/*#define STANDALONE*/ #include <errno.h> #include <limits.h> /* for CHAR_BIT */ @@ -37,7 +38,7 @@ #ifdef NO_WCHAR -#warn "this test checks C99 features, but NO_WCHAR is defined so the test will most definetly fails." +#warn "this test checks C99 features, but NO_WCHAR is defined so the test will most definitely fail." #endif @@ -51,16 +52,6 @@ #include <inttypes.h> /* test idempotency */ -#ifdef STANDALONE - -FILE *outfile=NULL; -#define opentest(x) outfile=stdout; -#define closetest(x) - -#else - -#endif - #if __STDC_VERSION__ >= 199901 #ifndef __Q8_QT #define __Q8_QT long long @@ -1588,4 +1579,4 @@ main() { return status; } -#endif \ No newline at end of file +#endif From 7e1f4760e75d679aee7b4e325ca72b34dde92646 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 21 Jul 2020 23:31:58 +0200 Subject: [PATCH 0272/2710] remove common.h from test/misc, its no more used --- test/misc/common.h | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 test/misc/common.h diff --git a/test/misc/common.h b/test/misc/common.h deleted file mode 100644 index dada61a14..000000000 --- a/test/misc/common.h +++ /dev/null @@ -1,22 +0,0 @@ - -#include <stdio.h> -#include <stdlib.h> - -#define NO_OLD_FUNC_DECL -#define NO_TYPELESS_INT -#define NO_TYPELESS_INT_PTR -#define MAIN_RETURNS_INT -#define NO_IMPLICIT_FUNC_PROTOTYPES -#define NO_FLOATS -#define NO_WCHAR -#define NO_EMPTY_FUNC_ARGS -#define NO_SLOPPY_STRUCT_INIT -#define NO_FUNCS_TAKE_STRUCTS -#define NO_FUNCS_RETURN_STRUCTS -#define CAST_STRUCT_PTR -#define NO_TYPELESS_STRUCT_PTR -#define NO_IMPLICIT_FUNCPTR_CONV -#define SIZEOF_INT_16BIT -#define SIZEOF_LONG_32BIT -#define UNSIGNED_CHARS -#define UNSIGNED_BITFIELDS From 041f981960a7bbe79654fc5617a9ca208c4ffde8 Mon Sep 17 00:00:00 2001 From: Brad Smith <bbbradsmith@users.noreply.github.com> Date: Tue, 21 Jul 2020 17:38:18 -0400 Subject: [PATCH 0273/2710] rand() use XOR to break up unwanted pair correlation (#1107) * rand() use XOR to break up unwanted pair correlation This form of rand() cannot return the same value twice in a row. Two additonal EOR instructions produce a more even distribution of successive pairs. see comments on #951 * rand.s document purpose of XOR * suggested srand() optimization: zero fill unnecessary * test to validate implementation of rand() * srand() improving behaviour and adding startup test * srand() with a tail call to rand() for better initial shuffle * srand() can fall through to rand() instead of tail call --- libsrc/common/rand.s | 32 ++++++------- test/val/rand.c | 110 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 125 insertions(+), 17 deletions(-) create mode 100644 test/val/rand.c diff --git a/libsrc/common/rand.s b/libsrc/common/rand.s index a272af80a..798d6343a 100644 --- a/libsrc/common/rand.s +++ b/libsrc/common/rand.s @@ -15,14 +15,14 @@ ; Multiplier must be 1 (mod 4) ; Added value must be 1 (mod 2) ; This guarantees max. period (2**32) -; The lowest bits have poor entropy and -; exhibit easily detectable patterns, so -; only the upper bits 16-22 and 24-31 of the -; 4-byte state are returned. +; The quality of entropy in the bits of the seed are poorest in the lowest +; bits, and best in the highest bits. ; -; The best 8 bits, 24-31 are returned in the -; low byte A to provide the best entropy in the -; most commonly used part of the return value. +; The high 8 bits are used for the low byte A to provide the best entropy in +; the most commonly used part of the return value. +; +; Finally XOR with the lower 2 bytes is used on the output, which breaks up +; some minor deficient sequential patterns. (#951) ; ; Uses the following LCG values for ax + c (mod m) ; a = $01010101 @@ -42,10 +42,15 @@ ; The seed. When srand() is not called, the C standard says that that rand() ; should behave as if srand() was called with an argument of 1 before. -rand: .dword 1 +rand: .dword $B5B5B4B4 .code +_srand: sta rand+0 ; Store the seed + stx rand+1 + sta rand+2 ; argument << 16 is convenient fill for MSW + stx rand+3 + ; fall through to rand() to sufficiently "shuffle" first rand() result _rand: clc lda rand+0 adc #$B3 @@ -54,18 +59,11 @@ _rand: clc sta rand+1 adc rand+2 sta rand+2 + eor rand+0 and #$7f ; Suppress sign bit (make it positive) tax lda rand+2 adc rand+3 sta rand+3 + eor rand+1 rts ; return bit (16-22,24-31) in (X,A) - -_srand: sta rand+0 ; Store the seed - stx rand+1 - lda #0 - sta rand+2 ; Set MSW to zero - sta rand+3 - rts - - diff --git a/test/val/rand.c b/test/val/rand.c new file mode 100644 index 000000000..f2f604449 --- /dev/null +++ b/test/val/rand.c @@ -0,0 +1,110 @@ +/* This test verifies that the assembly implementation of rand() matches its + * theoretical high level equivalent. + * + * This does about 3000 tests from various starting srand() seeds. + * A more thorough test might visit the entire sequence with 2^32 tests, but + * that takes hours to simulate, and this should be a sufficient sampling. + * + * This will also fail if rand() is ever altered, which might be a warning to + * tread carefully. Some past discussion of RNG here: + * https://github.com/cc65/cc65/pull/951 + */ + +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> + +/* for faster execution */ +#pragma static-locals (on) + +/* values tested per seed */ +#define SUBTESTS 50 + +/* increments used between tested seeds */ +/* 653 is prime and divides 32768 by ~50 */ +#define TESTINC 653 + +static uint32_t seed; + +int ref_rand() +{ + uint16_t output; + /* seed follows the LCG sequence * 0x01010101 + 0xB3B3B3B3 */ + seed = seed * 0x01010101UL + 0xB3B3B3B3UL; + /* output uses the top two bytes (reversed) XOR with bottom two bytes */ + { + uint16_t s0 = (seed >> 0) & 0xFF; + uint16_t s1 = (seed >> 8) & 0xFF; + uint16_t s2 = (seed >> 16) & 0xFF; + uint16_t s3 = (seed >> 24) & 0xFF; + uint16_t o0 = s3 ^ s1; + uint16_t o1 = s2 ^ s0; + output = o0 | (o1 << 8); + } + return (int)(output & 0x7FFF); +} + +void ref_srand(int ax) +{ + uint32_t s = (unsigned int)ax; + seed = s | (s << 16); /* low 16 bits is convenient filler for high 16 bits */ + ref_rand(); /* one pre-call "shuffles" the first rand() result so it isn't too predictable */ +} + +int main(void) +{ + unsigned int i,j; + int a,b; + + /* test that startup state is equivalent to srand(1) */ + { + //srand(1); // implied + ref_srand(1); + for (j=0; j<SUBTESTS; ++j) + { + a = rand(); + b = ref_rand(); + if (a != b) + { + printf("failed startup seed at test %d. rand()=%d reference=%d\n",j,a,b); + return EXIT_FAILURE; + } + } + } + + /* test every power of 2 seed */ + for (i = 0; i < 16; ++i) + { + srand(1<<i); + ref_srand(1<<i); + for (j=0; j<SUBTESTS; ++j) + { + a = rand(); + b = ref_rand(); + if (a != b) + { + printf("failed seed %d at test %d. rand()=%d reference=%d\n",(1<<i),j,a,b); + return EXIT_FAILURE; + } + } + } + + /* test a sampling of seeds*/ + for (i = 0; i < 32768UL; i += TESTINC) + { + srand(i); + ref_srand(i); + for (j=0; j<SUBTESTS; ++j) + { + a = rand(); + b = ref_rand(); + if (a != b) + { + printf("failed seed %d at test %d. rand()=%d reference=%d\n",(1<<i),j,a,b); + return EXIT_FAILURE; + } + } + } + + return EXIT_SUCCESS; +} From 77674352f6d4884c0619ebd812f795f54606c869 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Tue, 21 Jul 2020 23:44:36 +0200 Subject: [PATCH 0274/2710] Minor style change. --- libsrc/common/rand.s | 1 + 1 file changed, 1 insertion(+) diff --git a/libsrc/common/rand.s b/libsrc/common/rand.s index 798d6343a..ec1df9860 100644 --- a/libsrc/common/rand.s +++ b/libsrc/common/rand.s @@ -51,6 +51,7 @@ _srand: sta rand+0 ; Store the seed sta rand+2 ; argument << 16 is convenient fill for MSW stx rand+3 ; fall through to rand() to sufficiently "shuffle" first rand() result + _rand: clc lda rand+0 adc #$B3 From df900e30b85b1b8f27e1a4d997555d07333591e7 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 21 Jul 2020 23:50:23 +0200 Subject: [PATCH 0275/2710] removed references to macros from common.h --- test/ref/cc65110210.c | 17 ----------------- test/ref/wf1.c | 22 ---------------------- 2 files changed, 39 deletions(-) diff --git a/test/ref/cc65110210.c b/test/ref/cc65110210.c index ca5b39203..319b2c529 100644 --- a/test/ref/cc65110210.c +++ b/test/ref/cc65110210.c @@ -20,27 +20,10 @@ cl65: Subprocess 'ld65' aborted by signal 11 */ -/* #define STANDALONE */ - #include <stdio.h> #include <limits.h> -#ifdef STANDALONE - -#define NO_IMPLICIT_FUNCPTR_CONV - -#define OPENTEST() -#define CLOSETEST() - -#else - -#endif - -#ifdef NO_IMPLICIT_FUNCPTR_CONV -void (*p1func)(void); -#else void (*p1func)(); -#endif void func(void) { diff --git a/test/ref/wf1.c b/test/ref/wf1.c index e1ed7a417..574e7205f 100644 --- a/test/ref/wf1.c +++ b/test/ref/wf1.c @@ -25,35 +25,21 @@ int next; /* index of next free entry in words */ /*struct node *lookup();*/ -#if defined(NO_NEW_PROTOTYPES_FOR_OLD_FUNC_DECL) && !defined(NO_OLD_FUNC_DECL) - -#else - int err(char *s); int getword(char *buf); void tprint(struct node *tree); struct node *lookup(char *word, struct node **p); -#endif - int isletter(char c); /* err - print error message s and die */ -#ifndef NO_OLD_FUNC_DECL err(s) char *s; { -#else -int err(char *s) { -#endif printf("? %s\n", s); exit(EXIT_FAILURE); } /* getword - get next input word into buf, return 0 on EOF */ -#ifndef NO_OLD_FUNC_DECL int getword(buf) char *buf; -#else -int getword(char *buf) -#endif { char *s; int c; @@ -77,12 +63,8 @@ int isletter(char c) } /* lookup - lookup word in tree; install if necessary */ -#ifndef NO_OLD_FUNC_DECL struct node *lookup(word, p) char *word; struct node **p; -#else -struct node *lookup(char *word, struct node **p) -#endif { int cond; /* char *malloc(); */ @@ -108,11 +90,7 @@ struct node *lookup(char *word, struct node **p) } /* tprint - print tree */ -#ifndef NO_OLD_FUNC_DECL void tprint(tree) struct node *tree; { -#else -void tprint(struct node *tree) { -#endif if (tree) { tprint(tree->left); printf("%d:%s\n", tree->count, tree->word); From 4a9c5ff63b7752b6c4210e6f0748558581aa3845 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 21 Jul 2020 23:59:05 +0200 Subject: [PATCH 0276/2710] use uint16_t instead of magic ifdefs, leaving support for bit type in there incase we support it some day --- test/val/add2.c | 29 +++++++---------------------- test/val/compare4.c | 20 +++++--------------- test/val/rotate3.c | 19 +++++-------------- test/val/rotate4.c | 19 +++++-------------- test/val/rotate5.c | 19 +++++-------------- test/val/rotate6.c | 19 +++++-------------- test/val/rotate7.c | 19 +++---------------- test/val/sub1.c | 18 ++++++------------ 8 files changed, 41 insertions(+), 121 deletions(-) diff --git a/test/val/add2.c b/test/val/add2.c index 90f0f4175..6fc23e5da 100644 --- a/test/val/add2.c +++ b/test/val/add2.c @@ -6,33 +6,18 @@ #include <stdio.h> #include <limits.h> +#include <stdint.h> + +/* #define SUPPORT_BIT_TYPES */ unsigned char success=0; unsigned char failures=0; unsigned char dummy=0; -#ifdef SIZEOF_INT_16BIT -#if defined(__LINUX__) || defined(LINUX) -unsigned short aint0 = 0; -unsigned short aint1 = 0; -unsigned short aint2 = 0; -unsigned short aint3 = 0; - -#else -unsigned int aint0 = 0; -unsigned int aint1 = 0; -unsigned int aint2 = 0; -unsigned int aint3 = 0; - -#endif - -#else -unsigned int aint0 = 0; -unsigned int aint1 = 0; -unsigned int aint2 = 0; -unsigned int aint3 = 0; - -#endif +uint16_t aint0 = 0; +uint16_t aint1 = 0; +uint16_t aint2 = 0; +uint16_t aint3 = 0; unsigned char achar0 = 0; unsigned char achar1 = 0; diff --git a/test/val/compare4.c b/test/val/compare4.c index 47948c3a3..8e3baad5d 100644 --- a/test/val/compare4.c +++ b/test/val/compare4.c @@ -6,11 +6,14 @@ #include <stdio.h> #include <limits.h> +#include <stdint.h> /* compare4.c */ +/*#define SUPPORT_BIT_TYPES */ + /*#define COMPARE_OUT_OF_RANGE 1*/ unsigned char success = 0; @@ -20,22 +23,9 @@ unsigned char dummy = 0; #ifdef SUPPORT_BIT_TYPES bit bit0 = 0; #endif -#ifdef SIZEOF_INT_16BIT -#if defined(__LINUX__) || defined(LINUX) -short int0 = 0; -short int1 = 0; -#else -int int0 = 0; -int int1 = 0; - -#endif - -#else -int int0 = 0; -int int1 = 0; - -#endif +int16_t int0 = 0; +int16_t int1 = 0; signed char char0 = 0; signed char char1 = 0; diff --git a/test/val/rotate3.c b/test/val/rotate3.c index 21b2dc370..8ac2581e9 100644 --- a/test/val/rotate3.c +++ b/test/val/rotate3.c @@ -6,6 +6,9 @@ #include <stdio.h> #include <limits.h> +#include <stdint.h> + +/* #define SUPPORT_BIT_TYPES */ unsigned char success=0; unsigned char failures=0; @@ -14,22 +17,10 @@ unsigned char dummy=0; #ifdef SUPPORT_BIT_TYPES bit bit0 = 0; #endif -#ifdef SIZEOF_INT_16BIT -#if defined(__LINUX__) || defined(LINUX) -unsigned short aint0 = 0; -unsigned short aint1 = 0; -#else -unsigned int aint0 = 0; -unsigned int aint1 = 0; +uint16_t aint0 = 0; +uint16_t aint1 = 0; -#endif - -#else -unsigned int aint0 = 0; -unsigned int aint1 = 0; - -#endif unsigned char achar0 = 0; unsigned char achar1 = 0; unsigned char achar2 = 0; diff --git a/test/val/rotate4.c b/test/val/rotate4.c index 09b1ebf4c..4b50b0d1c 100644 --- a/test/val/rotate4.c +++ b/test/val/rotate4.c @@ -6,6 +6,9 @@ #include <stdio.h> #include <limits.h> +#include <stdint.h> + +/* #define SUPPORT_BIT_TYPES */ unsigned char success=0; unsigned char failures=0; @@ -14,22 +17,10 @@ unsigned char dummy=0; #ifdef SUPPORT_BIT_TYPES bit bit0 = 0; #endif -#ifdef SIZEOF_INT_16BIT -#if defined(__LINUX__) || defined(LINUX) -unsigned short aint0 = 0; -unsigned short aint1 = 0; -#else -unsigned int aint0 = 0; -unsigned int aint1 = 0; +uint16_t aint0 = 0; +uint16_t aint1 = 0; -#endif - -#else -unsigned int aint0 = 0; -unsigned int aint1 = 0; - -#endif unsigned char uchar0 = 0; unsigned char uchar1 = 0; unsigned char uchar2 = 0; diff --git a/test/val/rotate5.c b/test/val/rotate5.c index 501e2e567..9de897321 100644 --- a/test/val/rotate5.c +++ b/test/val/rotate5.c @@ -6,6 +6,9 @@ #include <stdio.h> #include <limits.h> +#include <stdint.h> + +/* #define SUPPORT_BIT_TYPES */ unsigned char success=0; unsigned char failures=0; @@ -14,22 +17,10 @@ unsigned char dummy=0; #ifdef SUPPORT_BIT_TYPES bit bit0 = 0; #endif -#ifdef SIZEOF_INT_16BIT -#if defined(__LINUX__) || defined(LINUX) -signed short aint0 = 0; -signed short aint1 = 0; -#else -signed int aint0 = 0; -signed int aint1 = 0; +int16_t aint0 = 0; +int16_t aint1 = 0; -#endif - -#else -signed int aint0 = 0; -signed int aint1 = 0; - -#endif signed char achar0 = 0; signed char achar1 = 0; signed char achar2 = 0; diff --git a/test/val/rotate6.c b/test/val/rotate6.c index 9109e124e..93a770d99 100644 --- a/test/val/rotate6.c +++ b/test/val/rotate6.c @@ -6,6 +6,9 @@ #include <stdio.h> #include <limits.h> +#include <stdint.h> + +/* #define SUPPORT_BIT_TYPES */ unsigned char success=0; unsigned char failures=0; @@ -14,22 +17,10 @@ unsigned char dummy=0; #ifdef SUPPORT_BIT_TYPES bit bit0 = 0; #endif -#ifdef SIZEOF_INT_16BIT -#if defined(__LINUX__) || defined(LINUX) -signed short aint0 = 0; -signed short aint1 = 0; -#else -signed int aint0 = 0; -signed int aint1 = 0; +int16_t aint0 = 0; +int16_t aint1 = 0; -#endif - -#else -signed int aint0 = 0; -signed int aint1 = 0; - -#endif signed char achar0 = 0; signed char achar1 = 0; signed char achar2 = 0; diff --git a/test/val/rotate7.c b/test/val/rotate7.c index 2b30b86dd..4a044c16a 100644 --- a/test/val/rotate7.c +++ b/test/val/rotate7.c @@ -6,27 +6,14 @@ #include <stdio.h> #include <limits.h> +#include <stdint.h> unsigned char success=0; unsigned char failures=0; unsigned char dummy=0; -#ifdef SIZEOF_INT_16BIT -#if defined(__LINUX__) || defined(LINUX) -signed short aint0 = 0; -signed short aint1 = 0; - -#else -signed int aint0 = 0; -signed int aint1 = 0; - -#endif - -#else -signed int aint0 = 0; -signed int aint1 = 0; - -#endif +int16_t aint0 = 0; +int16_t aint1 = 0; /* signed char achar0 = 0; diff --git a/test/val/sub1.c b/test/val/sub1.c index f1ae9394f..5dbba97df 100644 --- a/test/val/sub1.c +++ b/test/val/sub1.c @@ -6,6 +6,10 @@ #include <stdio.h> #include <limits.h> +#include <stdint.h> + +/* #define SUPPORT_BIT_TYPES */ +/* #define SUPPORT_BIT_ARITHMETIC */ unsigned char success=0; unsigned char failures=0; @@ -28,19 +32,9 @@ bit bit11 = 0; #endif -#ifdef SIZEOF_INT_16BIT -#if defined(__LINUX__) || defined(LINUX) -unsigned short aint0 = 0; -unsigned short aint1 = 0; -#else -unsigned int aint0 = 0; -unsigned int aint1 = 0; -#endif +uint16_t aint0 = 0; +uint16_t aint1 = 0; -#else -unsigned int aint0 = 0; -unsigned int aint1 = 0; -#endif unsigned char achar0 = 0; unsigned char achar1 = 0; unsigned char achar2 = 0; From eb094ecf6a07f4aa8063c5ed96f9eb4875456807 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 22 Jul 2020 00:21:23 +0200 Subject: [PATCH 0277/2710] remove ifdef magic --- test/val/ptrfunc.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/test/val/ptrfunc.c b/test/val/ptrfunc.c index 4aa23b77b..78e53e254 100644 --- a/test/val/ptrfunc.c +++ b/test/val/ptrfunc.c @@ -6,7 +6,7 @@ #include <stdio.h> -#define NO_IMPLICIT_FUNCPTR_CONV +/* #define SUPPORT_BIT_TYPES */ unsigned char success=0; unsigned char failures=0; @@ -33,15 +33,9 @@ volatile unsigned char uchar1 = 0; volatile unsigned char uchar2 = 0; #endif -#ifdef NO_IMPLICIT_FUNCPTR_CONV void (*pfunc)(void); void (*p1func)(void); unsigned char (*pcfunc)(void); -#else -void (*pfunc)(); -void (*p1func)(); -unsigned char (*pcfunc)(); -#endif void done() { @@ -79,11 +73,7 @@ void docall1() } } -#ifdef NO_IMPLICIT_FUNCPTR_CONV -void docall2( void(*pf)(void) ) -#else void docall2( void(*pf)() ) -#endif { unsigned char i; for(i = 0; i < 2; i++) { From 44c82eb1c3f0360aa70d1ce77a16989e5567b59b Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 21 Jul 2020 18:25:26 -0400 Subject: [PATCH 0278/2710] Made da65 disassemble branch instructions with relative address expression operands if there's no label. --- src/da65/handler.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/da65/handler.c b/src/da65/handler.c index f8a778b22..255b8da86 100644 --- a/src/da65/handler.c +++ b/src/da65/handler.c @@ -346,7 +346,12 @@ void OH_Relative (const OpcDesc* D) GenerateLabel (D->Flags, Addr); /* Output the line */ - OneLine (D, "%s", GetAddrArg (D->Flags, Addr)); + if (HaveLabel(Addr)) { + OneLine (D, "%s", GetAddrArg (D->Flags, Addr)); + } else { + /* No label -- make a relative address expression */ + OneLine (D, "* + (%d)", (int) Offs + 2); + } } From e22e9c403c7bbbb99c46ff961d91d46a5ab03221 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 22 Jul 2020 14:57:40 +0200 Subject: [PATCH 0279/2710] added testcase for issue #1098 --- test/misc/Makefile | 18 ++++++++++++++++++ test/misc/bug1098.c | 13 +++++++++++++ test/misc/bug1098a.c | 13 +++++++++++++ test/misc/bug1098b.c | 13 +++++++++++++ 4 files changed, 57 insertions(+) create mode 100644 test/misc/bug1098.c create mode 100644 test/misc/bug1098a.c create mode 100644 test/misc/bug1098b.c diff --git a/test/misc/Makefile b/test/misc/Makefile index 7e19d6360..19768d5aa 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -93,6 +93,24 @@ $(WORKDIR)/bug1048.$1.$2.prg: bug1048.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1048.$1.$2.prg) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) +# this should fail to compile, because there are errors in the code +$(WORKDIR)/bug1098.$1.$2.prg: bug1098.c | $(WORKDIR) + @echo "FIXME: " $$@ "compiles but should give an error." + $(if $(QUIET),echo misc/bug1098.$1.$2.prg) + $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + +# this should fail to compile, because there are errors in the code +$(WORKDIR)/bug1098a.$1.$2.prg: bug1098a.c | $(WORKDIR) + @echo "FIXME: " $$@ "compiles but should give an error." + $(if $(QUIET),echo misc/bug1098a.$1.$2.prg) + $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + +# this should fail to compile, because there are errors in the code +$(WORKDIR)/bug1098b.$1.$2.prg: bug1098b.c | $(WORKDIR) + @echo "FIXME: " $$@ "compiles but should give an error." + $(if $(QUIET),echo misc/bug1098b.$1.$2.prg) + $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(if $(QUIET),echo misc/endless.$1.$2.prg) diff --git a/test/misc/bug1098.c b/test/misc/bug1098.c new file mode 100644 index 000000000..c49296245 --- /dev/null +++ b/test/misc/bug1098.c @@ -0,0 +1,13 @@ + +/* bug #1098 Empty enumerator-list */ + +/* The C Standard requires that something exists between the braces for + * enum, struct, and union. */ + +enum { +}; + +int main(void) +{ + return 0; +} diff --git a/test/misc/bug1098a.c b/test/misc/bug1098a.c new file mode 100644 index 000000000..63c1c8da0 --- /dev/null +++ b/test/misc/bug1098a.c @@ -0,0 +1,13 @@ + +/* bug #1098 Empty enumerator-list */ + +/* The C Standard requires that something exists between the braces for + * enum, struct, and union. */ + +struct { +}; + +int main(void) +{ + return 0; +} diff --git a/test/misc/bug1098b.c b/test/misc/bug1098b.c new file mode 100644 index 000000000..ebd3e94c8 --- /dev/null +++ b/test/misc/bug1098b.c @@ -0,0 +1,13 @@ + +/* bug #1098 Empty enumerator-list */ + +/* The C Standard requires that something exists between the braces for + * enum, struct, and union. */ + +union { +}; + +int main(void) +{ + return 0; +} From 6abf24e25eac975765524441e7f0dc9528372911 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 22 Jul 2020 15:12:02 +0200 Subject: [PATCH 0280/2710] move test for issue #1077 to test/val --- test/{todo => val}/bug1077.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/{todo => val}/bug1077.c (100%) diff --git a/test/todo/bug1077.c b/test/val/bug1077.c similarity index 100% rename from test/todo/bug1077.c rename to test/val/bug1077.c From 844f5a9d337ad80cac3489e62499598bf4020182 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 22 Jul 2020 15:12:29 +0200 Subject: [PATCH 0281/2710] hook up test/todo in the toplevel test makefile --- test/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/Makefile b/test/Makefile index fc1ac246c..be6e60013 100644 --- a/test/Makefile +++ b/test/Makefile @@ -25,6 +25,7 @@ continue: @$(MAKE) -C ref all @$(MAKE) -C err all @$(MAKE) -C misc all + @$(MAKE) -C todo all mostlyclean: @$(MAKE) -C asm clean @@ -33,6 +34,7 @@ mostlyclean: @$(MAKE) -C ref clean @$(MAKE) -C err clean @$(MAKE) -C misc clean + @$(MAKE) -C todo clean clean: mostlyclean @$(call RMDIR,$(WORKDIR)) From ce06b20c6c696f781332c45958a082b5a7b1983e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 22 Jul 2020 15:31:39 +0200 Subject: [PATCH 0282/2710] add some details to the readme --- test/readme.txt | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/test/readme.txt b/test/readme.txt index 57ebfdd23..21b13fc62 100644 --- a/test/readme.txt +++ b/test/readme.txt @@ -2,29 +2,40 @@ This directory contains test code for automatic regression testing of the CC65 compiler. -/val - the bulk of tests are contained here, individual tests should exit with - an exit code of EXIT_SUCCESS when they pass, or EXIT_FAILURE on error +/val - The bulk of tests are contained here, individual tests should exit with + an exit code of EXIT_SUCCESS when they pass, or EXIT_FAILURE on error. -/ref - these tests produce output that must be compared with reference output +/ref - These tests produce output that must be compared with reference output. /err - contains tests that MUST NOT compile -/todo - these tests fail due to open compiler issues. - when an issue was fixed, the test should get moved to /var +/todo - These tests fail due to open compiler issues. + + The makefile in this directory _expects_ the tests to fail, because of + that when an issue was fixed it will break the CI. The test should get + moved to /var in the PR fixing the issue, which will make CI pass again. + No changes to makefiles are required! /asm - contains the assembler regression tests /dasm - contains the disassembler regression tests /misc - a few tests that need special care of some sort - tests that (incorrectly) fail to compile and other tests that fail and - do NOT return an exit code are collected here. + + Tests that (incorrectly) fail to compile and other tests that fail and + do NOT return an exit code are collected here. The makefile _expects_ + those tests to fail, so when an issue is fixed it will break the CI. + When this happens, the PR fixing the issue should also "invert" the + failing condition in the makefile by removing the $(NOT) before the + offending line (or removing it when it is already there), which will + make the CI pass again. The test should then be moved elsewhere later, + which will require additional changes to the makefile(s). -to run the tests use "make" in this (top) directory, the makefile should exit +To run the tests use "make" in this (top) directory, the makefile should exit with no error. -when a test failed you can use "make continue" to run further tests +When a test failed you can use "make continue" to run further tests. -------------------------------------------------------------------------------- From 98b2d43c2bd03be06da700b1f9dd4cac0ebf3f4c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 22 Jul 2020 15:52:04 +0200 Subject: [PATCH 0283/2710] added tests related to pr #1110 --- test/err/pr1110.c | 15 +++++++++++++++ test/val/pr1110a.c | 19 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 test/err/pr1110.c create mode 100644 test/val/pr1110a.c diff --git a/test/err/pr1110.c b/test/err/pr1110.c new file mode 100644 index 000000000..86955c720 --- /dev/null +++ b/test/err/pr1110.c @@ -0,0 +1,15 @@ + +/* pr #1110 - not only should the current test case for #975 compile and work, + * but also the code piece below fail to compile and generate errors like commented: */ + +static const unsigned char array[3]; /* OK */ +static const unsigned char array[] = { 0, 1, 2 }; /* OK - complete definition*/ +static const unsigned char array[3]; /* OK */ +static const unsigned char array[]; /* OK */ +static const unsigned char array[] = { 1, 2, 3 }; /* Error - redefinition */ +static const unsigned char array[4]; /* Error - conflicting size */ + +int main(void) +{ + return 0; +} diff --git a/test/val/pr1110a.c b/test/val/pr1110a.c new file mode 100644 index 000000000..0e0d91f85 --- /dev/null +++ b/test/val/pr1110a.c @@ -0,0 +1,19 @@ + +/* pr #1110 - the part of the redefinition that should compile */ + +static const unsigned char array[3]; /* OK */ +static const unsigned char array[] = { 0, 1, 2 }; /* OK - complete definition*/ +static const unsigned char array[3]; /* OK */ +static const unsigned char array[]; /* OK */ + +#include <stdlib.h> +#include <stdio.h> + +int main(void) +{ + printf("%u %u %u\n", array[0], array[1], array[2]); + if ((array[0] != 0) || (array[1] != 1) || (array[2] != 2)) { + return EXIT_FAILURE; + } + return EXIT_SUCCESS; +} From afe455238c17b0796365e4de5eb777be362798d2 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 22 Jul 2020 15:55:55 +0200 Subject: [PATCH 0284/2710] added test related to issue #1113 --- test/misc/Makefile | 7 +++++++ test/misc/bug1113.c | 12 ++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 test/misc/bug1113.c diff --git a/test/misc/Makefile b/test/misc/Makefile index 19768d5aa..9045e4e4f 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -111,6 +111,13 @@ $(WORKDIR)/bug1098b.$1.$2.prg: bug1098b.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1098b.$1.$2.prg) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) +# this should fail to compile, because there are errors in the code +# instead, the compiler crashes +$(WORKDIR)/bug1113.$1.$2.prg: bug1113.c | $(WORKDIR) + @echo "FIXME: " $$@ "compiler crashes but should give an error." + $(if $(QUIET),echo misc/bug1113.$1.$2.prg) + $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(if $(QUIET),echo misc/endless.$1.$2.prg) diff --git a/test/misc/bug1113.c b/test/misc/bug1113.c new file mode 100644 index 000000000..d1aecaa0b --- /dev/null +++ b/test/misc/bug1113.c @@ -0,0 +1,12 @@ + +/* bug #1113 - Compiler crashes when calling functions "redefined" as other types */ + +void f() {} + +int f; + +int main(void) +{ + f(); + return 0; +} From 5df2de06290e9b7181c03eeb311f7687ef469b80 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Wed, 22 Jul 2020 23:27:04 +0200 Subject: [PATCH 0285/2710] Added test target. --- Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 206f853fc..3331f6fb9 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples +.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples test .SUFFIXES: @@ -20,6 +20,9 @@ doc html info: samples: @$(MAKE) -C samples --no-print-directory $@ +test: + @$(MAKE) -C test --no-print-directory $@ + %65: @$(MAKE) -C src --no-print-directory $@ From 294b5d1cf1e79ed2b4a21000e37d4e423214cfa1 Mon Sep 17 00:00:00 2001 From: compyx <b.wassink@ziggo.nl> Date: Wed, 15 Jul 2020 21:39:29 +0200 Subject: [PATCH 0286/2710] C64 soft80 conio: shave off a few bytes and cycles --- libsrc/c64/soft80_cgetc.s | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/libsrc/c64/soft80_cgetc.s b/libsrc/c64/soft80_cgetc.s index aa12cd8ca..1bca57bec 100644 --- a/libsrc/c64/soft80_cgetc.s +++ b/libsrc/c64/soft80_cgetc.s @@ -46,8 +46,18 @@ invertcursor: lda #$34 sta $01 - jsr setcolor - + ldy #0 + bcs @set + ; restore old value + lda tmp1 + bcc @lp0 +@set: + ; save old value + lda (CRAM_PTR),y ; vram + sta tmp1 + lda soft80_internal_cellcolor +@lp0: + sta (CRAM_PTR),y ; vram ldx soft80_internal_cursorxlsb ldy #7 @lp1: @@ -65,20 +75,7 @@ invertcursor: ; do not use soft80_putcolor here to make sure the cursor is always ; shown using the current textcolor without disturbing the "color voodoo" ; in soft80_cputc -setcolor: - ldy #0 - bcs @set - ; restore old value - lda tmp1 - sta (CRAM_PTR),y ; vram - rts -@set: - ; save old value - lda (CRAM_PTR),y ; vram - sta tmp1 - lda soft80_internal_cellcolor - sta (CRAM_PTR),y ; vram - rts + .rodata nibble: .byte $f0, $0f From 81d3dedb4109cd3da845ec77b1fddcc3f83c5aa3 Mon Sep 17 00:00:00 2001 From: compyx <b.wassink@ziggo.nl> Date: Wed, 15 Jul 2020 22:44:34 +0200 Subject: [PATCH 0287/2710] Move comment block as requested --- libsrc/c64/soft80_cgetc.s | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/libsrc/c64/soft80_cgetc.s b/libsrc/c64/soft80_cgetc.s index 1bca57bec..28e6b0042 100644 --- a/libsrc/c64/soft80_cgetc.s +++ b/libsrc/c64/soft80_cgetc.s @@ -46,6 +46,9 @@ invertcursor: lda #$34 sta $01 + ; do not use soft80_putcolor here to make sure the cursor is always + ; shown using the current textcolor without disturbing the "color voodoo" + ; in soft80_cputc ldy #0 bcs @set ; restore old value @@ -72,11 +75,6 @@ invertcursor: cli rts - ; do not use soft80_putcolor here to make sure the cursor is always - ; shown using the current textcolor without disturbing the "color voodoo" - ; in soft80_cputc - - .rodata nibble: .byte $f0, $0f From ed3f281b9e9983f381c1c72b029e525e220e68eb Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 27 Jul 2020 14:40:27 +0200 Subject: [PATCH 0288/2710] fix wording --- test/readme.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/readme.txt b/test/readme.txt index 21b13fc62..a8746ba60 100644 --- a/test/readme.txt +++ b/test/readme.txt @@ -26,7 +26,7 @@ compiler. do NOT return an exit code are collected here. The makefile _expects_ those tests to fail, so when an issue is fixed it will break the CI. When this happens, the PR fixing the issue should also "invert" the - failing condition in the makefile by removing the $(NOT) before the + failing condition in the makefile by adding a $(NOT) before the offending line (or removing it when it is already there), which will make the CI pass again. The test should then be moved elsewhere later, which will require additional changes to the makefile(s). From 4316242d7ee3d1471bfdbef6469cee5a2190336a Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Mon, 27 Jul 2020 17:47:14 +0200 Subject: [PATCH 0289/2710] Adjusted to https://github.com/cc65/cc65/commit/5df2de06290e9b7181c03eeb311f7687ef469b80 (and slightly simplified). --- test/Makefile | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/Makefile b/test/Makefile index be6e60013..abc70d58f 100644 --- a/test/Makefile +++ b/test/Makefile @@ -12,11 +12,9 @@ endif WORKDIR = ../testwrk -.PHONY: all dotests continue mostlyclean clean +.PHONY: test continue mostlyclean clean -all: dotests - -dotests: mostlyclean continue +test: mostlyclean continue continue: @$(MAKE) -C asm all From cdd23edd37f44e730fe00acd66ccffeb626d3499 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Mon, 27 Jul 2020 17:59:24 +0200 Subject: [PATCH 0290/2710] Added building of samples. --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c84eb0cc2..630466cc0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,9 +6,11 @@ install: script: - make bin USER_CFLAGS=-Werror - make lib QUIET=1 - - make -C test QUIET=1 + - make test QUIET=1 + - make samples - make -C src clean - make bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- + - make -C samples clean - make doc zip after_success: - make -f Makefile.travis From 04d16b3740d962ecfe0f1c9cc83e3b702835fa58 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Tue, 28 Jul 2020 13:38:49 +0200 Subject: [PATCH 0291/2710] Make $WORKDIR for tests/err Without this, if there is a test that can compile, it will still fail because the WORKDIR does not exist: ``` pass.c(1): Fatal: Cannot open output file '../../testwrk/err/pass.s': No such file or directory ``` --- test/err/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/err/Makefile b/test/err/Makefile index 4b05ca5db..1273bbb2c 100644 --- a/test/err/Makefile +++ b/test/err/Makefile @@ -34,7 +34,10 @@ TESTS = $(patsubst %.c,$(WORKDIR)/%.s,$(SOURCES)) all: $(TESTS) -$(WORKDIR)/%.s: %.c +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +$(WORKDIR)/%.s: %.c | $(WORKDIR) $(if $(QUIET),echo err/$*.s) $(NOT) $(CC65) -o $@ $< $(NULLERR) From c0f2b69bef0c47cdbcbfa9b2291b68768c294529 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sun, 19 Jul 2020 22:59:44 +0200 Subject: [PATCH 0292/2710] Add test case for sign extending < 1 byte --- test/todo/bug1095.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/test/todo/bug1095.c b/test/todo/bug1095.c index a00a10585..0803c2d1c 100644 --- a/test/todo/bug1095.c +++ b/test/todo/bug1095.c @@ -30,7 +30,8 @@ static struct signed_ints { signed int a : 3; signed int b : 3; signed int c : 3; -} si = {-4, -1, 3}; + signed int d : 10; +} si = {-4, -1, 3, -500}; static void test_signed_bitfield(void) { @@ -61,9 +62,19 @@ static void test_signed_bitfield(void) failures++; } + if (si.d >= 0) { + printf("Got si.d = %d, expected negative.\n", si.d); + failures++; + } + if (si.d != -500) { + printf("Got si.d = %d, expected -500.\n", si.d); + failures++; + } + si.a = -3; si.b = 1; si.c = -2; + si.d = 500; if (si.a >= 0) { printf("Got si.a = %d, expected negative.\n", si.a); @@ -91,6 +102,15 @@ static void test_signed_bitfield(void) printf("Got si.c = %d, expected -2.\n", si.c); failures++; } + + if (si.d <= 0) { + printf("Got si.d = %d, expected positive.\n", si.d); + failures++; + } + if (si.d != 500) { + printf("Got si.d = %d, expected 500.\n", si.d); + failures++; + } } int main(void) From c272c73686e940ef9caf608c6a437904bb874349 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Tue, 28 Jul 2020 13:47:47 +0200 Subject: [PATCH 0293/2710] Add err test for char bit-fields #1047 --- test/err/bug1047.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 test/err/bug1047.c diff --git a/test/err/bug1047.c b/test/err/bug1047.c new file mode 100644 index 000000000..3fb11250f --- /dev/null +++ b/test/err/bug1047.c @@ -0,0 +1,82 @@ +/* + Copyright 2020 Google LLC + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of char bit-fields; see https://github.com/cc65/cc65/issues/1047 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +static struct chars { + unsigned char a : 3; + unsigned char b : 3; + unsigned char c : 3; +} cs = {4, 1, 3}; + +static void test_char_bitfield(void) +{ + if (sizeof (cs) != 2) { + printf("Got sizeof (cs) = %zu, expected 2.\n", sizeof (cs)); + failures++; + } + + if (cs.a != 4) { + printf("Got cs.a = %u, expected 4.\n", cs.a); + failures++; + } + + if (cs.b != 1) { + printf("Got cs.b = %u, expected 1.\n", cs.b); + failures++; + } + + if (cs.c != 3) { + printf("Got cs.c = %u, expected 3.\n", cs.c); + failures++; + } + + cs.a = -1; + cs.b = 6; + cs.c = 1; + + if (cs.a != 7) { + printf("Got cs.a = %u, expected 7.\n", cs.a); + failures++; + } + + if (cs.b != 6) { + printf("Got cs.b = %u, expected 6.\n", cs.b); + failures++; + } + + if (cs.c != 1) { + printf("Got cs.c = %u, expected 1.\n", cs.c); + failures++; + } +} + +int main(void) +{ + test_char_bitfield(); + printf("failures: %u\n", failures); + return failures; +} From daa65199b34974302eee410ae68e604291e48a69 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 26 Jul 2020 20:12:55 +0800 Subject: [PATCH 0294/2710] Fixed underlying types of enums. Made enumerator diagnostics more sensible. Fixed Issue #1048 as a natural result. --- src/cc65/datatype.c | 176 +++++++++++++++++++++++++++---- src/cc65/datatype.h | 158 +++++++++++++++++++--------- src/cc65/declare.c | 247 ++++++++++++++++++++++++++++++++++---------- src/cc65/function.c | 2 +- src/cc65/swstmt.c | 2 +- src/cc65/symentry.h | 6 ++ src/cc65/symtab.c | 48 ++++++++- src/cc65/symtab.h | 3 + src/cc65/typecmp.c | 8 +- 9 files changed, 526 insertions(+), 124 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 2a989e9f8..3f2725659 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -83,14 +83,9 @@ const char* GetBasicTypeName (const Type* T) ** Return "type" for unknown basic types. */ { - switch (GetType (T)) { - case T_TYPE_CHAR: return "char"; - case T_TYPE_SHORT: return "short"; - case T_TYPE_INT: return "integer"; - case T_TYPE_LONG: return "long"; - case T_TYPE_LONGLONG: return "long long"; + switch (GetRawType (T)) { case T_TYPE_ENUM: return "enum"; - case T_TYPE_FLOAT: return "poinfloatter"; + case T_TYPE_FLOAT: return "float"; case T_TYPE_DOUBLE: return "double"; case T_TYPE_VOID: return "void"; case T_TYPE_STRUCT: return "struct"; @@ -99,8 +94,42 @@ const char* GetBasicTypeName (const Type* T) case T_TYPE_PTR: return "pointer"; case T_TYPE_FUNC: return "function"; case T_TYPE_NONE: /* FALLTHROUGH */ - default: return "type"; + default: break; } + if (IsClassInt (T)) { + if (IsSignSigned (T)) { + switch (GetRawType (T)) { + case T_TYPE_CHAR: return "signed char"; + case T_TYPE_SHORT: return "short"; + case T_TYPE_INT: return "int"; + case T_TYPE_LONG: return "long"; + case T_TYPE_LONGLONG: return "long long"; + default: + return "signed integer"; + } + } else if (IsSignUnsigned (T)) { + switch (GetRawType (T)) { + case T_TYPE_CHAR: return "unsigned char"; + case T_TYPE_SHORT: return "unsigned short"; + case T_TYPE_INT: return "unsigned int"; + case T_TYPE_LONG: return "unsigned long"; + case T_TYPE_LONGLONG: return "unsigned long long"; + default: + return "unsigned integer"; + } + } else { + switch (GetRawType (T)) { + case T_TYPE_CHAR: return "char"; + case T_TYPE_SHORT: return "short"; + case T_TYPE_INT: return "int"; + case T_TYPE_LONG: return "long"; + case T_TYPE_LONGLONG: return "long long"; + default: + return "integer"; + } + } + } + return "type"; } @@ -245,6 +274,49 @@ const Type* GetStructReplacementType (const Type* SType) +long GetIntegerTypeMin (const Type* Type) +/* Get the smallest possible value of the integer type */ +{ + if (IsSignSigned (Type)) { + return (long)(0xFFFFFFFF << (CHAR_BITS * SizeOf (Type) - 1U)); + } else { + return 0; + } +} + + + +unsigned long GetIntegerTypeMax (const Type* Type) +/* Get the largest possible value of the integer type */ +{ + if (IsSignSigned (Type)) { + return (1UL << (CHAR_BITS * SizeOf (Type) - 1U)) - 1UL; + } else { + return (1UL << (CHAR_BITS * SizeOf (Type))) - 1UL; + } +} + + + +static unsigned TypeOfBySize (const Type* Type) +/* Get the code generator replacement type of the object by its size */ +{ + unsigned NewType; + /* If the size is less than or equal to that of a a long, we will copy + ** the struct using the primary register, otherwise we use memcpy. + */ + switch (SizeOf (Type)) { + case 1: NewType = CF_CHAR; break; + case 2: NewType = CF_INT; break; + case 3: /* FALLTHROUGH */ + case 4: NewType = CF_LONG; break; + default: NewType = CF_NONE; break; + } + + return NewType; +} + + Type* PointerTo (const Type* T) /* Return a type string that is "pointer to T". The type string is allocated ** on the heap and may be freed after use. @@ -321,6 +393,9 @@ void PrintType (FILE* F, const Type* T) case T_TYPE_LONGLONG: fprintf (F, "long long"); break; + case T_TYPE_ENUM: + fprintf (F, "enum"); + break; case T_TYPE_FLOAT: fprintf (F, "float"); break; @@ -430,10 +505,68 @@ int TypeHasAttr (const Type* T) +const Type* GetUnderlyingType (const Type* Type) +/* Get the underlying type of an enum or other integer class type */ +{ + if (IsTypeEnum (Type)) { + + /* This should not happen, but just in case */ + if (Type->A.P == 0) { + Internal ("Enum tag type error in GetUnderlyingTypeCode"); + } + + return ((SymEntry*)Type->A.P)->V.E.Type; + } + + return Type; +} + + + +TypeCode GetUnderlyingTypeCode (const Type* Type) +/* Get the type code of the unqualified underlying type of TCode. +** Return UnqualifiedType (TCode) if TCode is not scalar. +*/ +{ + TypeCode Underlying = UnqualifiedType (Type->C); + TypeCode TCode; + + /* We could also support other T_CLASS_INT types, but just enums for now */ + if (IsTypeEnum (Type)) { + + /* This should not happen, but just in case */ + if (Type->A.P == 0) { + Internal ("Enum tag type error in GetUnderlyingTypeCode"); + } + + /* Inspect the underlying type of the enum */ + if (((SymEntry*)Type->A.P)->V.E.Type == 0) { + /* Incomplete enum type is used */ + return Underlying; + } + TCode = UnqualifiedType (((SymEntry*)Type->A.P)->V.E.Type->C); + + /* Replace the type code with integer */ + Underlying = (TCode & ~T_MASK_TYPE); + switch (TCode & T_MASK_SIZE) { + case T_SIZE_INT: Underlying |= T_TYPE_INT; break; + case T_SIZE_LONG: Underlying |= T_TYPE_LONG; break; + case T_SIZE_SHORT: Underlying |= T_TYPE_SHORT; break; + case T_SIZE_CHAR: Underlying |= T_TYPE_CHAR; break; + case T_SIZE_LONGLONG: Underlying |= T_TYPE_LONGLONG; break; + default: Underlying |= T_TYPE_INT; break; + } + } + + return Underlying; +} + + + unsigned SizeOf (const Type* T) /* Compute size of object represented by type array. */ { - switch (UnqualifiedType (T->C)) { + switch (GetUnderlyingTypeCode (T)) { case T_VOID: /* A void variable is a cc65 extension. @@ -470,9 +603,6 @@ unsigned SizeOf (const Type* T) case T_ULONGLONG: return SIZEOF_LONGLONG; - case T_ENUM: - return SIZEOF_INT; - case T_FLOAT: return SIZEOF_FLOAT; @@ -491,7 +621,12 @@ unsigned SizeOf (const Type* T) return T->A.U * SizeOf (T + 1); } + case T_ENUM: + /* Incomplete enum type */ + return 0; + default: + Internal ("Unknown type in SizeOf: %04lX", T->C); return 0; @@ -547,7 +682,9 @@ unsigned CheckedPSizeOf (const Type* T) unsigned TypeOf (const Type* T) /* Get the code generator base type of the object */ { - switch (UnqualifiedType (T->C)) { + unsigned NewType; + + switch (GetUnderlyingTypeCode (T)) { case T_SCHAR: return CF_CHAR; @@ -557,7 +694,6 @@ unsigned TypeOf (const Type* T) case T_SHORT: case T_INT: - case T_ENUM: return CF_INT; case T_USHORT: @@ -582,6 +718,10 @@ unsigned TypeOf (const Type* T) case T_STRUCT: case T_UNION: + NewType = TypeOfBySize (T); + if (NewType != CF_NONE) { + return NewType; + } /* Address of ... */ return CF_INT | CF_UNSIGNED; @@ -726,8 +866,8 @@ Type* GetBaseElementType (Type* T) SymEntry* GetSymEntry (const Type* T) /* Return a SymEntry pointer from a type */ { - /* Only structs or unions have a SymEntry attribute */ - CHECK (IsClassStruct (T)); + /* Only enums, structs or unions have a SymEntry attribute */ + CHECK (IsClassStruct (T) || IsTypeEnum (T)); /* Return the attribute */ return T->A.P; @@ -738,8 +878,8 @@ SymEntry* GetSymEntry (const Type* T) void SetSymEntry (Type* T, SymEntry* S) /* Set the SymEntry pointer for a type */ { - /* Only structs or unions have a SymEntry attribute */ - CHECK (IsClassStruct (T)); + /* Only enums, structs or unions have a SymEntry attribute */ + CHECK (IsClassStruct (T) || IsTypeEnum (T)); /* Set the attribute */ T->A.P = S; diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 3464e8a16..361f5e0a6 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -96,37 +96,39 @@ enum { /* Type size modifiers */ T_SIZE_NONE = 0x000000, - T_SIZE_SHORT = 0x000200, - T_SIZE_LONG = 0x000400, - T_SIZE_LONGLONG = 0x000600, - T_MASK_SIZE = 0x000600, + T_SIZE_CHAR = 0x000200, + T_SIZE_SHORT = 0x000400, + T_SIZE_INT = 0x000600, + T_SIZE_LONG = 0x000800, + T_SIZE_LONGLONG = 0x000A00, + T_MASK_SIZE = 0x000E00, /* Type qualifiers */ T_QUAL_NONE = 0x000000, - T_QUAL_CONST = 0x000800, - T_QUAL_VOLATILE = 0x001000, - T_QUAL_RESTRICT = 0x002000, - T_QUAL_NEAR = 0x004000, - T_QUAL_FAR = 0x008000, + T_QUAL_CONST = 0x001000, + T_QUAL_VOLATILE = 0x002000, + T_QUAL_RESTRICT = 0x004000, + T_QUAL_NEAR = 0x008000, + T_QUAL_FAR = 0x010000, T_QUAL_ADDRSIZE = T_QUAL_NEAR | T_QUAL_FAR, - T_QUAL_FASTCALL = 0x010000, - T_QUAL_CDECL = 0x020000, + T_QUAL_FASTCALL = 0x020000, + T_QUAL_CDECL = 0x040000, T_QUAL_CCONV = T_QUAL_FASTCALL | T_QUAL_CDECL, - T_MASK_QUAL = 0x03F800, + T_MASK_QUAL = 0x07F000, /* Types */ - T_CHAR = T_TYPE_CHAR | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_NONE, - T_SCHAR = T_TYPE_CHAR | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_NONE, - T_UCHAR = T_TYPE_CHAR | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_NONE, + T_CHAR = T_TYPE_CHAR | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_CHAR, + T_SCHAR = T_TYPE_CHAR | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_CHAR, + T_UCHAR = T_TYPE_CHAR | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_CHAR, T_SHORT = T_TYPE_SHORT | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_SHORT, T_USHORT = T_TYPE_SHORT | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_SHORT, - T_INT = T_TYPE_INT | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_NONE, - T_UINT = T_TYPE_INT | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_NONE, + T_INT = T_TYPE_INT | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_INT, + T_UINT = T_TYPE_INT | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_INT, T_LONG = T_TYPE_LONG | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_LONG, T_ULONG = T_TYPE_LONG | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_LONG, T_LONGLONG = T_TYPE_LONGLONG | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_LONGLONG, T_ULONGLONG = T_TYPE_LONGLONG | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_LONGLONG, - T_ENUM = T_TYPE_ENUM | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_NONE, + T_ENUM = T_TYPE_ENUM | T_CLASS_INT | T_SIGN_NONE | T_SIZE_NONE, T_FLOAT = T_TYPE_FLOAT | T_CLASS_FLOAT | T_SIGN_NONE | T_SIZE_NONE, T_DOUBLE = T_TYPE_DOUBLE | T_CLASS_FLOAT | T_SIGN_NONE | T_SIZE_NONE, T_VOID = T_TYPE_VOID | T_CLASS_NONE | T_SIGN_NONE | T_SIZE_NONE, @@ -246,6 +248,12 @@ Type* GetImplicitFuncType (void); const Type* GetStructReplacementType (const Type* SType); /* Get a replacement type for passing a struct/union in the primary register */ +long GetIntegerTypeMin (const Type* Type); +/* Get the smallest possible value of the integer type */ + +unsigned long GetIntegerTypeMax (const Type* Type); +/* Get the largest possible value of the integer type */ + Type* PointerTo (const Type* T); /* Return a type string that is "pointer to T". The type string is allocated ** on the heap and may be freed after use. @@ -283,6 +291,14 @@ INLINE TypeCode UnqualifiedType (TypeCode T) # define UnqualifiedType(T) ((T) & ~T_MASK_QUAL) #endif +const Type* GetUnderlyingType (const Type* Type); +/* Get the underlying type of an enum or other integer class type */ + +TypeCode GetUnderlyingTypeCode (const Type* Type); +/* Get the type code of the unqualified underlying type of TCode. +** Return TCode if it is not scalar. +*/ + unsigned SizeOf (const Type* T); /* Compute size of object represented by type array. */ @@ -312,123 +328,163 @@ Type* ArrayToPtr (Type* T); /* Convert an array to a pointer to it's first element */ #if defined(HAVE_INLINE) -INLINE TypeCode GetType (const Type* T) +INLINE TypeCode GetRawType (const Type* T) /* Get the raw type */ { return (T->C & T_MASK_TYPE); } #else -# define GetType(T) ((T)->C & T_MASK_TYPE) +# define GetRawType(T) ((T)->C & T_MASK_TYPE) #endif #if defined(HAVE_INLINE) INLINE int IsTypeChar (const Type* T) /* Return true if this is a character type */ { - return (GetType (T) == T_TYPE_CHAR); + return (GetRawType (GetUnderlyingType (T)) == T_TYPE_CHAR); } #else -# define IsTypeChar(T) (GetType (T) == T_TYPE_CHAR) +# define IsTypeChar(T) (GetRawType (GetUnderlyingType (T)) == T_TYPE_CHAR) #endif #if defined(HAVE_INLINE) INLINE int IsTypeInt (const Type* T) /* Return true if this is an int type (signed or unsigned) */ { - return (GetType (T) == T_TYPE_INT); + return (GetRawType (GetUnderlyingType (T)) == T_TYPE_INT); } #else -# define IsTypeInt(T) (GetType (T) == T_TYPE_INT) +# define IsTypeInt(T) (GetRawType (GetUnderlyingType (T)) == T_TYPE_INT) #endif #if defined(HAVE_INLINE) INLINE int IsTypeLong (const Type* T) /* Return true if this is a long type (signed or unsigned) */ { - return (GetType (T) == T_TYPE_LONG); + return (GetRawType (GetUnderlyingType (T)) == T_TYPE_LONG); } #else -# define IsTypeLong(T) (GetType (T) == T_TYPE_LONG) +# define IsTypeLong(T) (GetRawType (GetUnderlyingType (T)) == T_TYPE_LONG) +#endif + +#if defined(HAVE_INLINE) +INLINE int IsRawTypeChar (const Type* T) +/* Return true if this is a character raw type */ +{ + return (GetRawType (T) == T_TYPE_CHAR); +} +#else +# define IsRawTypeChar(T) (GetRawType (T) == T_TYPE_CHAR) +#endif + +#if defined(HAVE_INLINE) +INLINE int IsRawTypeInt (const Type* T) +/* Return true if this is an int raw type (signed or unsigned) */ +{ + return (GetRawType (T) == T_TYPE_INT); +} +#else +# define IsRawTypeInt(T) (GetRawType (T) == T_TYPE_INT) +#endif + +#if defined(HAVE_INLINE) +INLINE int IsRawTypeLong (const Type* T) +/* Return true if this is a long raw type (signed or unsigned) */ +{ + return (GetRawType (T) == T_TYPE_LONG); +} +#else +# define IsRawTypeLong(T) (GetRawType (T) == T_TYPE_LONG) #endif #if defined(HAVE_INLINE) INLINE int IsTypeFloat (const Type* T) /* Return true if this is a float type */ { - return (GetType (T) == T_TYPE_FLOAT); + return (GetRawType (T) == T_TYPE_FLOAT); } #else -# define IsTypeFloat(T) (GetType (T) == T_TYPE_FLOAT) +# define IsTypeFloat(T) (GetRawType (T) == T_TYPE_FLOAT) #endif #if defined(HAVE_INLINE) INLINE int IsTypeDouble (const Type* T) /* Return true if this is a double type */ { - return (GetType (T) == T_TYPE_DOUBLE); + return (GetRawType (T) == T_TYPE_DOUBLE); } #else -# define IsTypeDouble(T) (GetType (T) == T_TYPE_DOUBLE) +# define IsTypeDouble(T) (GetRawType (T) == T_TYPE_DOUBLE) #endif #if defined(HAVE_INLINE) INLINE int IsTypePtr (const Type* T) /* Return true if this is a pointer type */ { - return (GetType (T) == T_TYPE_PTR); + return (GetRawType (T) == T_TYPE_PTR); } #else -# define IsTypePtr(T) (GetType (T) == T_TYPE_PTR) +# define IsTypePtr(T) (GetRawType (T) == T_TYPE_PTR) +#endif + +#if defined(HAVE_INLINE) +INLINE int IsTypeEnum (const Type* T) +/* Return true if this is an enum type */ +{ + return (GetRawType (T) == T_TYPE_ENUM); +} +#else +# define IsTypeEnum(T) (GetRawType (T) == T_TYPE_ENUM) #endif #if defined(HAVE_INLINE) INLINE int IsTypeStruct (const Type* T) /* Return true if this is a struct type */ { - return (GetType (T) == T_TYPE_STRUCT); + return (GetRawType (T) == T_TYPE_STRUCT); } #else -# define IsTypeStruct(T) (GetType (T) == T_TYPE_STRUCT) +# define IsTypeStruct(T) (GetRawType (T) == T_TYPE_STRUCT) #endif #if defined(HAVE_INLINE) INLINE int IsTypeUnion (const Type* T) /* Return true if this is a union type */ { - return (GetType (T) == T_TYPE_UNION); + return (GetRawType (T) == T_TYPE_UNION); } #else -# define IsTypeUnion(T) (GetType (T) == T_TYPE_UNION) +# define IsTypeUnion(T) (GetRawType (T) == T_TYPE_UNION) #endif #if defined(HAVE_INLINE) INLINE int IsTypeArray (const Type* T) /* Return true if this is an array type */ { - return (GetType (T) == T_TYPE_ARRAY); + return (GetRawType (T) == T_TYPE_ARRAY); } #else -# define IsTypeArray(T) (GetType (T) == T_TYPE_ARRAY) +# define IsTypeArray(T) (GetRawType (T) == T_TYPE_ARRAY) #endif #if defined(HAVE_INLINE) INLINE int IsTypeVoid (const Type* T) /* Return true if this is a void type */ { - return (GetType (T) == T_TYPE_VOID); + return (GetRawType (T) == T_TYPE_VOID); } #else -# define IsTypeVoid(T) (GetType (T) == T_TYPE_VOID) +# define IsTypeVoid(T) (GetRawType (T) == T_TYPE_VOID) #endif #if defined(HAVE_INLINE) INLINE int IsTypeFunc (const Type* T) /* Return true if this is a function class */ { - return (GetType (T) == T_TYPE_FUNC); + return (GetRawType (T) == T_TYPE_FUNC); } #else -# define IsTypeFunc(T) (GetType (T) == T_TYPE_FUNC) +# define IsTypeFunc(T) (GetRawType (T) == T_TYPE_FUNC) #endif #if defined(HAVE_INLINE) @@ -502,13 +558,23 @@ INLINE int IsClassFunc (const Type* T) #endif #if defined(HAVE_INLINE) -INLINE TypeCode GetSignedness (const Type* T) -/* Get the sign of a type */ +INLINE TypeCode GetRawSignedness (const Type* T) +/* Get the raw signedness of a type */ { - return (T->C & T_MASK_SIGN); + return ((T)->C & T_MASK_SIGN); } #else -# define GetSignedness(T) ((T)->C & T_MASK_SIGN) +# define GetRawSignedness(T) ((T)->C & T_MASK_SIGN) +#endif + +#if defined(HAVE_INLINE) +INLINE TypeCode GetSignedness (const Type* T) +/* Get the signedness of a type */ +{ + return (GetUnderlyingTypeCode (T) & T_MASK_SIGN); +} +#else +# define GetSignedness(T) (GetUnderlyingTypeCode (T) & T_MASK_SIGN) #endif #if defined(HAVE_INLINE) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 323e9af14..734256b97 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -453,27 +453,99 @@ static void ParseStorageClass (DeclSpec* D, unsigned DefStorage) -static void ParseEnumDecl (void) -/* Process an enum declaration . */ +static SymEntry* ESUForwardDecl (const char* Name, unsigned Type) +/* Handle an enum, struct or union forward decl */ { - int EnumVal; - ident Ident; + /* Try to find an enum/struct/union with the given name. If there is none, + ** insert a forward declaration into the current lexical level. + */ + SymEntry* Entry = FindTagSym (Name); + if (Entry == 0) { + if (Type != SC_ENUM) { + Entry = AddStructSym (Name, Type, 0, 0); + } else { + Entry = AddEnumSym (Name, 0, 0); + } + } else if ((Entry->Flags & SC_TYPEMASK) != Type) { + /* Already defined, but not the same type class */ + Error ("Symbol '%s' is already different kind", Name); + } + return Entry; +} + + + +static const Type* GetEnumeratorType (long Min, unsigned long Max, int Signed) +/* GitHub #1093 - We use unsigned types to save spaces whenever possible. +** If both the signed and unsigned integer types of the same minimum size +** capable of representing all values of the enum, we prefer the unsigned +** one. +** Return 0 if impossible to represent Min and Max as the same integer type. +*/ +{ + const Type* Underlying = type_int; /* default type */ + + /* Change the underlying type if necessary */ + if (Min < 0 || Signed) { + /* We can't use unsigned types if there are any negative values */ + if (Max > (unsigned long)INT32_MAX) { + /* No way to represent both Min and Max as the same integer type */ + Underlying = 0; + } else if (Min < INT16_MIN || Max > (unsigned long)INT16_MAX) { + Underlying = type_long; + } else if (Min < INT8_MIN || Max > (unsigned long)INT8_MAX) { + Underlying = type_int; + } else { + Underlying = type_schar; + } + } else { + if (Max > UINT16_MAX) { + Underlying = type_ulong; + } else if (Max > UINT8_MAX) { + Underlying = type_uint; + } else { + Underlying = type_uchar; + } + } + + return Underlying; +} + + + +static SymEntry* ParseEnumDecl (const char* Name) +/* Process an enum declaration */ +{ + SymTable* FieldTab; + long EnumVal; + int IsSigned; + int IsIncremented; + ident Ident; + long MinConstant = 0; + unsigned long MaxConstant = 0; + const Type* NewType = type_int; /* new enumerator type */ + const Type* MemberType = type_int; /* default enumerator type */ /* Accept forward definitions */ if (CurTok.Tok != TOK_LCURLY) { - return; + return ESUForwardDecl (Name, SC_ENUM); } + /* Add the enum tag */ + AddEnumSym (Name, 0, 0); + /* Skip the opening curly brace */ NextToken (); /* Read the enum tags */ - EnumVal = 0; + EnumVal = -1L; while (CurTok.Tok != TOK_RCURLY) { /* We expect an identifier */ if (CurTok.Tok != TOK_IDENT) { - Error ("Identifier expected"); + Error ("Identifier expected for enumerator declarator"); + /* Avoid excessive errors */ + NextToken (); continue; } @@ -483,21 +555,116 @@ static void ParseEnumDecl (void) /* Check for an assigned value */ if (CurTok.Tok == TOK_ASSIGN) { + ExprDesc Expr; NextToken (); ConstAbsIntExpr (hie1, &Expr); - EnumVal = Expr.IVal; + EnumVal = Expr.IVal; + MemberType = Expr.Type; + IsSigned = IsSignSigned (MemberType); + IsIncremented = 0; + + } else { + + /* Defaulted with the same signedness as the previous member's */ + IsSigned = IsSignSigned (MemberType) && + (unsigned long)EnumVal != GetIntegerTypeMax (MemberType); + + /* Enumerate. Signed integer overflow is UB but unsigned integers + ** are guaranteed to wrap around. + */ + EnumVal = (long)((unsigned long)EnumVal + 1UL); + + if (UnqualifiedType (MemberType->C) == T_ULONG && EnumVal == 0) { + /* Warn on 'unsigned long' overflow in enumeration */ + Warning ("Enumerator '%s' overflows the range of '%s'", + Ident, + GetBasicTypeName (type_ulong)); + } + + IsIncremented = 1; } - /* Add an entry to the symbol table */ - AddConstSym (Ident, type_int, SC_ENUMERATOR | SC_CONST, EnumVal++); + /* Track down the min/max values and evaluate the type of EnumVal + ** using GetEnumeratorType in a tricky way. + */ + if (!IsSigned || EnumVal >= 0) { + if ((unsigned long)EnumVal > MaxConstant) { + MaxConstant = (unsigned long)EnumVal; + } + NewType = GetEnumeratorType (0, EnumVal, IsSigned); + } else { + if (EnumVal < MinConstant) { + MinConstant = EnumVal; + } + NewType = GetEnumeratorType (EnumVal, 0, 1); + } + + /* GetEnumeratorType above should never fail, but just in case */ + if (NewType == 0) { + Internal ("Unexpected failure with GetEnumeratorType: %lx", EnumVal); + NewType = type_ulong; + } else if (SizeOf (NewType) < SizeOf (type_int)) { + /* Integer constants are not shorter than int */ + NewType = type_int; + } + + /* Warn if the incremented value exceeds the range of the previous + ** type. + */ + if (IsIncremented && + EnumVal >= 0 && + NewType->C != UnqualifiedType (MemberType->C)) { + /* The possible overflow here can only be when EnumVal > 0 */ + Warning ("Enumerator '%s' (value = %lu) is of type '%s'", + Ident, + (unsigned long)EnumVal, + GetBasicTypeName (NewType)); + } + + /* Warn if the value exceeds range of 'int' in standard mode */ + if (IS_Get (&Standard) != STD_CC65 && NewType->C != T_INT) { + if (!IsSigned || EnumVal >= 0) { + Warning ("ISO C restricts enumerator values to range of 'int'\n" + "\tEnumerator '%s' (value = %lu) is too large", + Ident, + (unsigned long)EnumVal); + } else { + Warning ("ISO C restricts enumerator values to range of 'int'\n" + "\tEnumerator '%s' (value = %ld) is too small", + Ident, + EnumVal); + } + } + + /* Add an entry of the enumerator to the symbol table */ + AddConstSym (Ident, NewType, SC_ENUMERATOR | SC_CONST, EnumVal); + + /* Use this type for following members */ + MemberType = NewType; /* Check for end of definition */ - if (CurTok.Tok != TOK_COMMA) + if (CurTok.Tok != TOK_COMMA) { break; + } NextToken (); } ConsumeRCurly (); + + /* This evaluates the underlying type of the whole enum */ + MemberType = GetEnumeratorType (MinConstant, MaxConstant, 0); + if (MemberType == 0) { + /* It is very likely that the program is wrong */ + Error ("Enumeration values cannot be represented all as 'long'\n" + "\tMin enumerator value = %ld, Max enumerator value = %lu", + MinConstant, MaxConstant); + + /* Avoid more errors */ + MemberType = type_long; + } + + FieldTab = GetSymTab (); + return AddEnumSym (Name, MemberType, FieldTab); } @@ -541,24 +708,6 @@ static int ParseFieldWidth (Declaration* Decl) -static SymEntry* StructOrUnionForwardDecl (const char* Name, unsigned Type) -/* Handle a struct or union forward decl */ -{ - /* Try to find a struct/union with the given name. If there is none, - ** insert a forward declaration into the current lexical level. - */ - SymEntry* Entry = FindTagSym (Name); - if (Entry == 0) { - Entry = AddStructSym (Name, Type, 0, 0); - } else if ((Entry->Flags & SC_TYPEMASK) != Type) { - /* Already defined, but no struct */ - Error ("Symbol '%s' is already different kind", Name); - } - return Entry; -} - - - static unsigned CopyAnonStructFields (const Declaration* Decl, int Offs) /* Copy fields from an anon union/struct into the current lexical level. The ** function returns the size of the embedded struct/union. @@ -617,7 +766,7 @@ static SymEntry* ParseUnionDecl (const char* Name) if (CurTok.Tok != TOK_LCURLY) { /* Just a forward declaration. */ - return StructOrUnionForwardDecl (Name, SC_UNION); + return ESUForwardDecl (Name, SC_UNION); } /* Add a forward declaration for the struct in the current lexical level */ @@ -722,7 +871,7 @@ static SymEntry* ParseStructDecl (const char* Name) if (CurTok.Tok != TOK_LCURLY) { /* Just a forward declaration. */ - return StructOrUnionForwardDecl (Name, SC_STRUCT); + return ESUForwardDecl (Name, SC_STRUCT); } /* Add a forward declaration for the struct in the current lexical level */ @@ -1069,29 +1218,23 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers) case TOK_ENUM: NextToken (); - if (CurTok.Tok != TOK_LCURLY) { - /* Named enum */ - if (CurTok.Tok == TOK_IDENT) { - /* Find an entry with this name */ - Entry = FindTagSym (CurTok.Ident); - if (Entry) { - if (SymIsLocal (Entry) && (Entry->Flags & SC_ENUM) == 0) { - Error ("Symbol '%s' is already different kind", Entry->Name); - } - } else { - /* Insert entry into table ### */ - } - /* Skip the identifier */ - NextToken (); - } else { + /* Named enum */ + if (CurTok.Tok == TOK_IDENT) { + strcpy (Ident, CurTok.Ident); + NextToken (); + } else { + if (CurTok.Tok != TOK_LCURLY) { Error ("Identifier expected"); + } else { + AnonName (Ident, "enum"); } } /* Remember we have an extra type decl */ D->Flags |= DS_EXTRA_TYPE; /* Parse the enum decl */ - ParseEnumDecl (); - D->Type[0].C = T_INT; + Entry = ParseEnumDecl (Ident); + D->Type[0].C |= T_ENUM; + SetSymEntry (D->Type, Entry); D->Type[1].C = T_END; break; @@ -1624,7 +1767,7 @@ void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode) /* The return type must not be qualified */ if (GetQualifier (RetType) != T_QUAL_NONE && RetType[1].C == T_END) { - if (GetType (RetType) == T_TYPE_VOID) { + if (GetRawType (RetType) == T_TYPE_VOID) { /* A qualified void type is always an error */ Error ("function definition has qualified void return type"); } else { @@ -1916,7 +2059,7 @@ static unsigned ParseArrayInit (Type* T, int AllowFlexibleMembers) long ElementCount = GetElementCount (T); /* Special handling for a character array initialized by a literal */ - if (IsTypeChar (ElementType) && + if (IsRawTypeChar (ElementType) && (CurTok.Tok == TOK_SCONST || CurTok.Tok == TOK_WCSCONST || (CurTok.Tok == TOK_LCURLY && (NextTok.Tok == TOK_SCONST || NextTok.Tok == TOK_WCSCONST)))) { @@ -2180,7 +2323,7 @@ static unsigned ParseVoidInit (Type* T) Size = 0; do { ConstExpr (hie1, &Expr); - switch (UnqualifiedType (Expr.Type[0].C)) { + switch (GetUnderlyingTypeCode (&Expr.Type[0])) { case T_SCHAR: case T_UCHAR: @@ -2244,7 +2387,7 @@ static unsigned ParseVoidInit (Type* T) static unsigned ParseInitInternal (Type* T, int AllowFlexibleMembers) /* Parse initialization of variables. Return the number of data bytes. */ { - switch (UnqualifiedType (T->C)) { + switch (GetUnderlyingTypeCode (T)) { case T_SCHAR: case T_UCHAR: diff --git a/src/cc65/function.c b/src/cc65/function.c index ff4c23656..d6e11fea3 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -452,7 +452,7 @@ void NewFunc (SymEntry* Func) /* Determine if this is a main function in a C99 environment that ** returns an int. */ - if (IsTypeInt (F_GetReturnType (CurrentFunc)) && + if (IsRawTypeInt (F_GetReturnType (CurrentFunc)) && IS_Get (&Standard) == STD_C99) { C99MainFunc = 1; } diff --git a/src/cc65/swstmt.c b/src/cc65/swstmt.c index 4a3730283..8cab93bba 100644 --- a/src/cc65/swstmt.c +++ b/src/cc65/swstmt.c @@ -132,7 +132,7 @@ void SwitchStatement (void) /* Setup the control structure, save the old and activate the new one */ SwitchData.Nodes = NewCollection (); - SwitchData.ExprType = UnqualifiedType (SwitchExpr.Type[0].C); + SwitchData.ExprType = GetUnderlyingTypeCode (&SwitchExpr.Type[0]); SwitchData.Depth = SizeOf (SwitchExpr.Type); SwitchData.DefaultLabel = 0; OldSwitch = Switch; diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 13829e958..b030d8b8b 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -165,6 +165,12 @@ struct SymEntry { unsigned Size; /* Size of the union/struct */ } S; + /* Data for enums */ + struct { + struct SymTable* SymTab; /* Member symbol table */ + const Type* Type; /* Underlying type */ + } E; + /* Data for bit fields */ struct { unsigned Offs; /* Byte offset into struct */ diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 26a09cd87..87a33760b 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -551,6 +551,50 @@ static void AddSymEntry (SymTable* T, SymEntry* S) +SymEntry* AddEnumSym (const char* Name, const Type* Type, SymTable* Tab) +/* Add an enum entry and return it */ +{ + /* Do we have an entry with this name already? */ + SymEntry* Entry = FindSymInTable (TagTab, Name, HashStr (Name)); + if (Entry) { + + /* We do have an entry. This may be a forward, so check it. */ + if ((Entry->Flags & SC_TYPEMASK) != SC_ENUM) { + /* Existing symbol is not an enum */ + Error ("Symbol '%s' is already different kind", Name); + } else { + /* Define the struct size if the underlying type is given. */ + if (Type != 0) { + if (Type !=0 && Entry->V.E.Type != 0) { + /* Both are definitions. */ + Error ("Multiple definition for enum '%s'", Name); + } + Entry->Type = 0; + Entry->V.E.SymTab = Tab; + Entry->V.E.Type = Type; + } + } + + } else { + + /* Create a new entry */ + Entry = NewSymEntry (Name, SC_ENUM); + + /* Set the enum type data */ + Entry->Type = 0; + Entry->V.E.SymTab = Tab; + Entry->V.E.Type = Type; + + /* Add it to the current table */ + AddSymEntry (TagTab, Entry); + } + + /* Return the entry */ + return Entry; +} + + + SymEntry* AddStructSym (const char* Name, unsigned Type, unsigned Size, SymTable* Tab) /* Add a struct/union entry and return it */ { @@ -649,10 +693,10 @@ SymEntry* AddConstSym (const char* Name, const Type* T, unsigned Flags, long Val /* Create a new entry */ Entry = NewSymEntry (Name, Flags); - /* Enum values are ints */ + /* We only have integer constants for now */ Entry->Type = TypeDup (T); - /* Set the enum data */ + /* Set the constant data */ Entry->V.ConstVal = Val; /* Add the entry to the symbol table */ diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h index 94e5f2d9b..dd4b3aa37 100644 --- a/src/cc65/symtab.h +++ b/src/cc65/symtab.h @@ -146,6 +146,9 @@ unsigned short FindSPAdjustment (const char* Name); +SymEntry* AddEnumSym (const char* Name, const Type* Type, SymTable* Tab); +/* Add an enum entry and return it */ + SymEntry* AddStructSym (const char* Name, unsigned Type, unsigned Size, SymTable* Tab); /* Add a struct/union entry and return it */ diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index 673dfa163..af04d8232 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -214,9 +214,9 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) return; } - /* Get the raw left and right types, signs and qualifiers */ - LeftType = GetType (lhs); - RightType = GetType (rhs); + /* Get the left and right types, signs and qualifiers */ + LeftType = GetUnderlyingTypeCode (lhs); + RightType = GetUnderlyingTypeCode (rhs); LeftSign = GetSignedness (lhs); RightSign = GetSignedness (rhs); LeftQual = GetQualifier (lhs); @@ -229,7 +229,7 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) RightType = T_TYPE_PTR; } - /* If the raw types are not identical, the types are incompatible */ + /* If the underlying types are not identical, the types are incompatible */ if (LeftType != RightType) { SetResult (Result, TC_INCOMPATIBLE); return; From d8184fbe543d2e72538e6af179f900098bc19ce6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 26 Jul 2020 20:12:59 +0800 Subject: [PATCH 0295/2710] No longer insert all enums in the global symbol table. --- src/cc65/symtab.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 87a33760b..4169e6280 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -676,11 +676,8 @@ SymEntry* AddBitField (const char* Name, unsigned Offs, unsigned BitOffs, unsign SymEntry* AddConstSym (const char* Name, const Type* T, unsigned Flags, long Val) /* Add an constant symbol to the symbol table and return it */ { - /* Enums must be inserted in the global symbol table */ - SymTable* Tab = ((Flags & SC_ENUMERATOR) == SC_ENUMERATOR) ? SymTab0 : SymTab; - /* Do we have an entry with this name already? */ - SymEntry* Entry = FindSymInTable (Tab, Name, HashStr (Name)); + SymEntry* Entry = FindSymInTable (SymTab, Name, HashStr (Name)); if (Entry) { if ((Entry->Flags & SC_CONST) != SC_CONST) { Error ("Symbol '%s' is already different kind", Name); @@ -700,7 +697,7 @@ SymEntry* AddConstSym (const char* Name, const Type* T, unsigned Flags, long Val Entry->V.ConstVal = Val; /* Add the entry to the symbol table */ - AddSymEntry (Tab, Entry); + AddSymEntry (SymTab, Entry); /* Return the entry */ return Entry; From 7e243e0f2c8d4b210cd6d6b43d8914587f631d1f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 26 Jul 2020 20:12:59 +0800 Subject: [PATCH 0296/2710] Allowed using all integer types including enum and char types to define bit-fields, but kept the currently behavior that all of them are treated as unsigned int. --- src/cc65/declare.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 734256b97..49e233a56 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -684,21 +684,31 @@ static int ParseFieldWidth (Declaration* Decl) /* Read the width */ NextToken (); ConstAbsIntExpr (hie1, &Expr); + if (!IsClassInt (Decl->Type)) { + /* Only integer types may be used for bit-fields */ + Error ("Bit-field has invalid type ''"); + return -1; + } if (Expr.IVal < 0) { Error ("Negative width in bit-field"); return -1; } - if (Expr.IVal > (int) INT_BITS) { + /* FIXME: We should compare with the width of the specified type */ +#if 0 + /* Use is when we really support non-uint16_t bit-fields */ + if (Expr.IVal > (long)(SizeOf (Decl->Type) * CHAR_BITS)) { Error ("Width of bit-field exceeds its type"); return -1; } - if (Expr.IVal == 0 && Decl->Ident[0] != '\0') { - Error ("Zero width for named bit-field"); +#else + /* This is what we currenty do */ + if (Expr.IVal > (long)(SizeOf (type_uint) * CHAR_BITS)) { + Error ("Width of bit-field exceeds 16"); return -1; } - if (!IsTypeInt (Decl->Type)) { - /* Only integer types may be used for bit-fields */ - Error ("Bit-field has invalid type"); +#endif + if (Expr.IVal == 0 && Decl->Ident[0] != '\0') { + Error ("Zero width for named bit-field"); return -1; } From 35e1efc7f2576bc579cb27a187d1a35aadbbe85b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 26 Jul 2020 20:40:27 +0800 Subject: [PATCH 0297/2710] Moved misc/bug1048 as it is already correctly rejected by the compiler. --- test/{misc => err}/bug1048.c | 0 test/misc/Makefile | 6 ------ 2 files changed, 6 deletions(-) rename test/{misc => err}/bug1048.c (100%) diff --git a/test/misc/bug1048.c b/test/err/bug1048.c similarity index 100% rename from test/misc/bug1048.c rename to test/err/bug1048.c diff --git a/test/misc/Makefile b/test/misc/Makefile index 9045e4e4f..3c5045753 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -87,12 +87,6 @@ $(WORKDIR)/bug264.$1.$2.prg: bug264.c | $(WORKDIR) $(if $(QUIET),echo misc/bug264.$1.$2.prg) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) -# this should fail to compile, because there are errors in the code -$(WORKDIR)/bug1048.$1.$2.prg: bug1048.c | $(WORKDIR) - @echo "FIXME: " $$@ "compiles but should give an error." - $(if $(QUIET),echo misc/bug1048.$1.$2.prg) - $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - # this should fail to compile, because there are errors in the code $(WORKDIR)/bug1098.$1.$2.prg: bug1098.c | $(WORKDIR) @echo "FIXME: " $$@ "compiles but should give an error." From 0f412b6beb1319255834b7062c000a1295140e4b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 27 Jul 2020 18:25:28 +0800 Subject: [PATCH 0298/2710] Small fixes according to PR review. --- src/cc65/datatype.c | 10 ++++++++-- src/cc65/declare.c | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 3f2725659..4da9a8727 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -278,7 +278,8 @@ long GetIntegerTypeMin (const Type* Type) /* Get the smallest possible value of the integer type */ { if (IsSignSigned (Type)) { - return (long)(0xFFFFFFFF << (CHAR_BITS * SizeOf (Type) - 1U)); + /* The smallest possible signed value of N-byte integer is -pow(2, 8*N-1) */ + return (long)((unsigned long)(-1L) << (CHAR_BITS * SizeOf (Type) - 1U)); } else { return 0; } @@ -290,9 +291,14 @@ unsigned long GetIntegerTypeMax (const Type* Type) /* Get the largest possible value of the integer type */ { if (IsSignSigned (Type)) { + /* Min signed value of N-byte integer is pow(2, 8*N-1) - 1 */ return (1UL << (CHAR_BITS * SizeOf (Type) - 1U)) - 1UL; } else { - return (1UL << (CHAR_BITS * SizeOf (Type))) - 1UL; + /* Max signed value of N-byte integer is pow(2, 8*N) - 1. However, + ** workaround is needed as in ISO C it is UB if the shift count is + ** equal to the bit width of the left operand type. + */ + return (1UL << 1U << (CHAR_BITS * SizeOf (Type) - 1U)) - 1UL; } } diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 49e233a56..ba4091c3b 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -686,7 +686,7 @@ static int ParseFieldWidth (Declaration* Decl) ConstAbsIntExpr (hie1, &Expr); if (!IsClassInt (Decl->Type)) { /* Only integer types may be used for bit-fields */ - Error ("Bit-field has invalid type ''"); + Error ("Bit-field has invalid type '%s'", GetBasicTypeName (Decl->Type)); return -1; } if (Expr.IVal < 0) { From c37f9f1a41f9e6ab853cfbac7438cf5f41fb91f8 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 27 Jul 2020 19:20:07 +0800 Subject: [PATCH 0299/2710] Check if the integer size is known in GetIntegerTypeMin/Max() to prevent potential misuse. --- src/cc65/datatype.c | 16 ++++++++++++++-- src/cc65/datatype.h | 8 ++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 4da9a8727..1e2859ba7 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -275,8 +275,14 @@ const Type* GetStructReplacementType (const Type* SType) long GetIntegerTypeMin (const Type* Type) -/* Get the smallest possible value of the integer type */ +/* Get the smallest possible value of the integer type. +** The type must have a known size. +*/ { + if (SizeOf (Type) == 0) { + Internal ("Incomplete type used in GetIntegerTypeMin"); + } + if (IsSignSigned (Type)) { /* The smallest possible signed value of N-byte integer is -pow(2, 8*N-1) */ return (long)((unsigned long)(-1L) << (CHAR_BITS * SizeOf (Type) - 1U)); @@ -288,8 +294,14 @@ long GetIntegerTypeMin (const Type* Type) unsigned long GetIntegerTypeMax (const Type* Type) -/* Get the largest possible value of the integer type */ +/* Get the largest possible value of the integer type. +** The type must have a known size. +*/ { + if (SizeOf (Type) == 0) { + Internal ("Incomplete type used in GetIntegerTypeMax"); + } + if (IsSignSigned (Type)) { /* Min signed value of N-byte integer is pow(2, 8*N-1) - 1 */ return (1UL << (CHAR_BITS * SizeOf (Type) - 1U)) - 1UL; diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 361f5e0a6..2f2ed136e 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -249,10 +249,14 @@ const Type* GetStructReplacementType (const Type* SType); /* Get a replacement type for passing a struct/union in the primary register */ long GetIntegerTypeMin (const Type* Type); -/* Get the smallest possible value of the integer type */ +/* Get the smallest possible value of the integer type. +** The type must have a known size. +*/ unsigned long GetIntegerTypeMax (const Type* Type); -/* Get the largest possible value of the integer type */ +/* Get the largest possible value of the integer type. +** The type must have a known size. +*/ Type* PointerTo (const Type* T); /* Return a type string that is "pointer to T". The type string is allocated From cbb33f86e85d82f3ebe22c486e9b1bbcacb584d9 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 28 Jul 2020 11:17:17 +0800 Subject: [PATCH 0300/2710] Disabled using non-int-size types to declare bit-fields. --- src/cc65/datatype.h | 30 ++++++++++++++++++++---------- src/cc65/declare.c | 7 +++++++ 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 2f2ed136e..1997b5c89 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -601,6 +601,26 @@ INLINE int IsSignSigned (const Type* T) # define IsSignSigned(T) (GetSignedness (T) == T_SIGN_SIGNED) #endif +#if defined(HAVE_INLINE) +INLINE TypeCode GetRawSizeModifier(const Type* T) +/* Get the size modifier of a raw type */ +{ + return (T->C & T_MASK_SIZE); +} +#else +# define GetRawSizeModifier(T) ((T)->C & T_MASK_SIZE) +#endif + +#if defined(HAVE_INLINE) +INLINE TypeCode GetSizeModifier (const Type* T) +/* Get the size modifier of a type */ +{ + return (GetUnderlyingTypeCode (T) & T_MASK_SIZE); +} +#else +# define GetSizeModifier(T) (GetUnderlyingTypeCode (T) & T_MASK_SIZE) +#endif + #if defined(HAVE_INLINE) INLINE TypeCode GetQualifier (const Type* T) /* Get the qualifier from the given type string */ @@ -696,16 +716,6 @@ int IsVariadicFunc (const Type* T) attribute ((const)); ** variable parameter list */ -#if defined(HAVE_INLINE) -INLINE TypeCode GetSizeModifier (const Type* T) -/* Get the size modifier of a type */ -{ - return (T->C & T_MASK_SIZE); -} -#else -# define GetSizeModifier(T) ((T)->C & T_MASK_SIZE) -#endif - FuncDesc* GetFuncDesc (const Type* T) attribute ((const)); /* Get the FuncDesc pointer from a function or pointer-to-function type */ diff --git a/src/cc65/declare.c b/src/cc65/declare.c index ba4091c3b..cb3aa0ab3 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -689,6 +689,13 @@ static int ParseFieldWidth (Declaration* Decl) Error ("Bit-field has invalid type '%s'", GetBasicTypeName (Decl->Type)); return -1; } + + if (SizeOf (Decl->Type) != SizeOf (type_uint)) { + /* Only int sized types may be used for bit-fields for now */ + Error ("CC65 currently only supports unsigned int bit-fields"); + return -1; + } + if (Expr.IVal < 0) { Error ("Negative width in bit-field"); return -1; From 8eab28012a36516bab4682cd1797193fe721d51a Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Tue, 28 Jul 2020 23:29:16 +0200 Subject: [PATCH 0301/2710] Adjusted project name. --- src/cc65/declare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index cb3aa0ab3..48db64e61 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -692,7 +692,7 @@ static int ParseFieldWidth (Declaration* Decl) if (SizeOf (Decl->Type) != SizeOf (type_uint)) { /* Only int sized types may be used for bit-fields for now */ - Error ("CC65 currently only supports unsigned int bit-fields"); + Error ("cc65 currently only supports unsigned int bit-fields"); return -1; } From 74dda01919dd1f84c1fcbd9ebb808312976de83a Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Wed, 29 Jul 2020 13:32:26 +0200 Subject: [PATCH 0302/2710] Add test that plain int bitfields are unsigned We want to make sure this doesn't change when #1095 is fixed; unsigned is much more efficient. --- test/val/plain-int-bitfield.c | 63 +++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 test/val/plain-int-bitfield.c diff --git a/test/val/plain-int-bitfield.c b/test/val/plain-int-bitfield.c new file mode 100644 index 000000000..afc7121bb --- /dev/null +++ b/test/val/plain-int-bitfield.c @@ -0,0 +1,63 @@ +/* + Copyright 2020 Google LLC + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests that plain int bit-fields are unsigned. +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +static struct plain_ints { + int x : 4; + int y : 10; +} pi = {15, 700}; + +static void test_plain_int_bitfields (void) +{ + if (pi.x != 15) { + printf ("Got pi.x = %u, expected 15.\n", pi.x); + failures++; + } + if (pi.y != 700) { + printf ("Got pi.y = %u, expected 700.\n", pi.y); + failures++; + } + + pi.x = 3; + pi.y = 1023; + + if (pi.x != 3) { + printf ("Got pi.x = %u, expected 3.\n", pi.x); + failures++; + } + if (pi.y != 1023) { + printf ("Got pi.y = %u, expected 1023.\n", pi.y); + failures++; + } +} + +int main (void) +{ + test_plain_int_bitfields (); + printf ("failures: %u\n", failures); + return failures; +} From a2561d07f3b6c07de0db312ed32d26c01b429d89 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Wed, 29 Jul 2020 14:04:52 +0200 Subject: [PATCH 0303/2710] Remove special-case bit-field width code cbb33f8 restricted allowed bit-field types to int, so this is equivalent for now, but forward-compatible. Fixes FIXME Also move the int type check before parsing the colon. --- src/cc65/declare.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 48db64e61..b8ad09cfd 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -681,14 +681,16 @@ static int ParseFieldWidth (Declaration* Decl) return -1; } + if (!IsClassInt (Decl->Type)) { + /* Only integer types may be used for bit-fields */ + Error ("Bit-field has invalid type '%s', must be integral", + GetBasicTypeName (Decl->Type)); + return -1; + } + /* Read the width */ NextToken (); ConstAbsIntExpr (hie1, &Expr); - if (!IsClassInt (Decl->Type)) { - /* Only integer types may be used for bit-fields */ - Error ("Bit-field has invalid type '%s'", GetBasicTypeName (Decl->Type)); - return -1; - } if (SizeOf (Decl->Type) != SizeOf (type_uint)) { /* Only int sized types may be used for bit-fields for now */ @@ -700,20 +702,10 @@ static int ParseFieldWidth (Declaration* Decl) Error ("Negative width in bit-field"); return -1; } - /* FIXME: We should compare with the width of the specified type */ -#if 0 - /* Use is when we really support non-uint16_t bit-fields */ if (Expr.IVal > (long)(SizeOf (Decl->Type) * CHAR_BITS)) { Error ("Width of bit-field exceeds its type"); return -1; } -#else - /* This is what we currenty do */ - if (Expr.IVal > (long)(SizeOf (type_uint) * CHAR_BITS)) { - Error ("Width of bit-field exceeds 16"); - return -1; - } -#endif if (Expr.IVal == 0 && Decl->Ident[0] != '\0') { Error ("Zero width for named bit-field"); return -1; From aaa0cf5448fc55e5b2bb925d0ac41779d8b50b56 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Wed, 29 Jul 2020 22:41:46 +0200 Subject: [PATCH 0304/2710] Add err tests for bitfield width errors ! ../../bin/cc65 -o ../../testwrk/err/bitfield-named-zero-width.s bitfield-named-zero-width.c bitfield-named-zero-width.c(27): Error: Zero width for named bit-field ! ../../bin/cc65 -o ../../testwrk/err/bitfield-negative-width.s bitfield-negative-width.c bitfield-negative-width.c(26): Error: Negative width in bit-field ! ../../bin/cc65 -o ../../testwrk/err/bitfield-too-wide.s bitfield-too-wide.c bitfield-too-wide.c(26): Error: Width of bit-field exceeds its type --- test/err/bitfield-named-zero-width.c | 29 ++++++++++++++++++++++++++++ test/err/bitfield-negative-width.c | 27 ++++++++++++++++++++++++++ test/err/bitfield-too-wide.c | 27 ++++++++++++++++++++++++++ 3 files changed, 83 insertions(+) create mode 100644 test/err/bitfield-named-zero-width.c create mode 100644 test/err/bitfield-negative-width.c create mode 100644 test/err/bitfield-too-wide.c diff --git a/test/err/bitfield-named-zero-width.c b/test/err/bitfield-named-zero-width.c new file mode 100644 index 000000000..b9b9db88d --- /dev/null +++ b/test/err/bitfield-named-zero-width.c @@ -0,0 +1,29 @@ +/* + Copyright 2020 Google LLC + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Test of bit-field with zero-width named field +*/ + +struct s { + unsigned int x : 4; + unsigned int y : 0; + unsigned int z : 4; +}; diff --git a/test/err/bitfield-negative-width.c b/test/err/bitfield-negative-width.c new file mode 100644 index 000000000..dd83b3fc4 --- /dev/null +++ b/test/err/bitfield-negative-width.c @@ -0,0 +1,27 @@ +/* + Copyright 2020 Google LLC + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Test of bit-field with negative width. +*/ + +struct s { + unsigned int x : -1; +}; diff --git a/test/err/bitfield-too-wide.c b/test/err/bitfield-too-wide.c new file mode 100644 index 000000000..6c9c229fc --- /dev/null +++ b/test/err/bitfield-too-wide.c @@ -0,0 +1,27 @@ +/* + Copyright 2020 Google LLC + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Test of bit-field with too large width. +*/ + +struct s { + unsigned int x : 17; +}; From fb9b50ff9c63c2eefcef298348882fc3c2261587 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Wed, 29 Jul 2020 22:45:59 +0200 Subject: [PATCH 0305/2710] Move type checks before bit-field width parsing --- src/cc65/declare.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index b8ad09cfd..5c5c5c01e 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -688,16 +688,16 @@ static int ParseFieldWidth (Declaration* Decl) return -1; } - /* Read the width */ - NextToken (); - ConstAbsIntExpr (hie1, &Expr); - if (SizeOf (Decl->Type) != SizeOf (type_uint)) { /* Only int sized types may be used for bit-fields for now */ Error ("cc65 currently only supports unsigned int bit-fields"); return -1; } + /* Read the width */ + NextToken (); + ConstAbsIntExpr (hie1, &Expr); + if (Expr.IVal < 0) { Error ("Negative width in bit-field"); return -1; From 19c81ed8665f1062c176bcc75cb2f23a32f9ae03 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 29 Jul 2020 19:51:47 +0800 Subject: [PATCH 0306/2710] Fixed type mask usage. --- src/cc65/typecmp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index af04d8232..66dd9039b 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -215,8 +215,8 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) } /* Get the left and right types, signs and qualifiers */ - LeftType = GetUnderlyingTypeCode (lhs); - RightType = GetUnderlyingTypeCode (rhs); + LeftType = (GetUnderlyingTypeCode (lhs) & T_MASK_TYPE); + RightType = (GetUnderlyingTypeCode (rhs) & T_MASK_TYPE); LeftSign = GetSignedness (lhs); RightSign = GetSignedness (rhs); LeftQual = GetQualifier (lhs); From 92de4fa0d0f8ae1c4d863a7191037bd0dea8cc0b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 29 Jul 2020 15:08:54 +0800 Subject: [PATCH 0307/2710] Enabled to recognize labels when parsing local variable declarations. --- src/cc65/declare.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 5c5c5c01e..1ebae4123 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1248,11 +1248,23 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers) break; case TOK_IDENT: - Entry = FindSym (CurTok.Ident); - if (Entry && SymIsTypeDef (Entry)) { - /* It's a typedef */ - NextToken (); - TypeCopy (D->Type, Entry->Type); + /* This could be a label */ + if (NextTok.Tok != TOK_COLON) { + Entry = FindSym (CurTok.Ident); + if (Entry && SymIsTypeDef (Entry)) { + /* It's a typedef */ + NextToken (); + TypeCopy (D->Type, Entry->Type); + break; + } + } else { + /* This is a label. Use the default type flag to end the loop + ** in DeclareLocals. The type code used here doesn't matter as + ** long as it has no qualifiers. + */ + D->Flags |= DS_DEF_TYPE; + D->Type[0].C = T_QUAL_NONE; + D->Type[1].C = T_END; break; } /* FALL THROUGH */ From d6d667a688b3831e17ec0b4ec4b77a99cc0def88 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 29 Jul 2020 18:07:16 +0800 Subject: [PATCH 0308/2710] Improved error handling with symbol redefinitions. --- src/cc65/symtab.c | 282 ++++++++++++++++++++++++++++++---------------- 1 file changed, 183 insertions(+), 99 deletions(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 4169e6280..6472a0792 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -93,6 +93,7 @@ static SymTable* TagTab0 = 0; static SymTable* TagTab = 0; static SymTable* LabelTab = 0; static SymTable* SPAdjustTab = 0; +static SymTable* FailSafeTab = 0; /* For errors */ /*****************************************************************************/ @@ -141,7 +142,6 @@ static void FreeSymTable (SymTable* S) } - /*****************************************************************************/ /* Check symbols in a table */ /*****************************************************************************/ @@ -228,6 +228,9 @@ void EnterGlobalLevel (void) /* Create and assign the table of SP adjustment symbols */ SPAdjustTab = NewSymTable (SYMTAB_SIZE_GLOBAL); + + /* Create and assign the table of fictitious symbols used with errors */ + FailSafeTab = NewSymTable (SYMTAB_SIZE_GLOBAL); } @@ -523,6 +526,111 @@ SymEntry* FindStructField (const Type* T, const char* Name) +static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags) +/* Check and handle redefinition of existing symbols. +** Return ture if there *is* an error. +*/ +{ + /* Get the type info of the existing symbol */ + Type* E_Type = Entry->Type; + unsigned E_SCType = Entry->Flags & SC_TYPEMASK; + unsigned SCType = Flags & SC_TYPEMASK; + + /* Some symbols may be redeclared if certain requirements are met */ + if (IsTypeArray (T) && IsTypeArray (E_Type)) { + + /* Get the array sizes */ + long Size = GetElementCount (T); + long ESize = GetElementCount (E_Type); + + /* If we are handling arrays, the old entry or the new entry may be + ** an incomplete declaration. Accept this, and if the exsting entry + ** is incomplete, complete it. + */ + if ((Size != UNSPECIFIED && ESize != UNSPECIFIED && Size != ESize) || + TypeCmp (T + 1, E_Type + 1) < TC_EQUAL) { + /* Types not identical: Conflicting types */ + Error ("Conflicting array types for '%s[]'", Entry->Name); + Entry = 0; + } else { + /* Check if we have a size in the existing definition */ + if (ESize == UNSPECIFIED) { + /* Existing, size not given, use size from new def */ + SetElementCount (E_Type, Size); + } + } + + } else { + + /* We have a symbol with this name already */ + if ((Entry->Flags & SC_FUNC) == SC_FUNC) { + + /* In case of a function, use the new type descriptor, since it + ** contains pointers to the new symbol tables that are needed if + ** an actual function definition follows. Be sure not to use the + ** new descriptor if it contains a function declaration with an + ** empty parameter list. + */ + if (IsTypeFunc (T)) { + + /* New type must be identical */ + if (TypeCmp (Entry->Type, T) < TC_EQUAL) { + Error ("Conflicting function types for '%s'", Entry->Name); + Entry = 0; + } else { + /* Get the function descriptor from the new type */ + FuncDesc* F = GetFuncDesc (T); + /* Use this new function descriptor if it doesn't contain + ** an empty parameter list. + */ + if ((F->Flags & FD_EMPTY) == 0) { + Entry->V.F.Func = F; + SetFuncDesc (E_Type, F); + } + } + + } else { + Error ("Redefinition of function '%s' as different kind of symbol", Entry->Name); + Entry = 0; + } + } else if (E_SCType == SC_TYPEDEF) { + + if (SCType == SC_TYPEDEF) { + /* New typedef must be identical */ + if (TypeCmp (E_Type, T) < TC_EQUAL) { + Error ("Conflicting types for typedef '%s'", Entry->Name); + Entry = 0; + } + + } else { + + Error ("Redefinition of typedef '%s' as different kind of symbol", Entry->Name); + Entry = 0; + } + + } else { + + /* New type must be identical */ + if (SCType != E_SCType) { + Error ("Redefinition of '%s' as different kind of symbol", Entry->Name); + Entry = 0; + } else if (TypeCmp (E_Type, T) < TC_EQUAL) { + Error ("Conflicting types for '%s'", Entry->Name); + Entry = 0; + } else if (E_SCType == SC_ENUMERATOR) { + /* Current code logic won't reach here, but still... */ + Error ("Redeclaration of enumerator constant '%s'", Entry->Name); + Entry = 0; + } + } + } + + /* Return if there are any errors */ + return Entry == 0; +} + + + static void AddSymEntry (SymTable* T, SymEntry* S) /* Add a symbol to a symbol table */ { @@ -554,28 +662,39 @@ static void AddSymEntry (SymTable* T, SymEntry* S) SymEntry* AddEnumSym (const char* Name, const Type* Type, SymTable* Tab) /* Add an enum entry and return it */ { + SymTable* CurTagTab = TagTab; + /* Do we have an entry with this name already? */ - SymEntry* Entry = FindSymInTable (TagTab, Name, HashStr (Name)); + SymEntry* Entry = FindSymInTable (CurTagTab, Name, HashStr (Name)); if (Entry) { /* We do have an entry. This may be a forward, so check it. */ if ((Entry->Flags & SC_TYPEMASK) != SC_ENUM) { /* Existing symbol is not an enum */ Error ("Symbol '%s' is already different kind", Name); + Entry = 0; } else { /* Define the struct size if the underlying type is given. */ if (Type != 0) { if (Type !=0 && Entry->V.E.Type != 0) { /* Both are definitions. */ Error ("Multiple definition for enum '%s'", Name); + Entry = 0; + } else { + Entry->Type = 0; + Entry->V.E.SymTab = Tab; + Entry->V.E.Type = Type; } - Entry->Type = 0; - Entry->V.E.SymTab = Tab; - Entry->V.E.Type = Type; } } - } else { + if (Entry == 0) { + /* Use the fail-safe table for fictitious symbols */ + CurTagTab = FailSafeTab; + } + } + + if (Entry == 0) { /* Create a new entry */ Entry = NewSymEntry (Name, SC_ENUM); @@ -586,7 +705,7 @@ SymEntry* AddEnumSym (const char* Name, const Type* Type, SymTable* Tab) Entry->V.E.Type = Type; /* Add it to the current table */ - AddSymEntry (TagTab, Entry); + AddSymEntry (CurTagTab, Entry); } /* Return the entry */ @@ -598,22 +717,25 @@ SymEntry* AddEnumSym (const char* Name, const Type* Type, SymTable* Tab) SymEntry* AddStructSym (const char* Name, unsigned Type, unsigned Size, SymTable* Tab) /* Add a struct/union entry and return it */ { + SymTable* CurTagTab = TagTab; SymEntry* Entry; /* Type must be struct or union */ PRECONDITION (Type == SC_STRUCT || Type == SC_UNION); /* Do we have an entry with this name already? */ - Entry = FindSymInTable (TagTab, Name, HashStr (Name)); + Entry = FindSymInTable (CurTagTab, Name, HashStr (Name)); if (Entry) { /* We do have an entry. This may be a forward, so check it. */ if ((Entry->Flags & SC_TYPEMASK) != Type) { /* Existing symbol is not a struct */ Error ("Symbol '%s' is already different kind", Name); + Entry = 0; } else if (Size > 0 && Entry->V.S.Size > 0) { /* Both structs are definitions. */ Error ("Multiple definition for '%s'", Name); + Entry = 0; } else { /* Define the struct size if it is given */ if (Size > 0) { @@ -622,7 +744,13 @@ SymEntry* AddStructSym (const char* Name, unsigned Type, unsigned Size, SymTable } } - } else { + if (Entry == 0) { + /* Use the fail-safe table for fictitious symbols */ + CurTagTab = FailSafeTab; + } + } + + if (Entry == 0) { /* Create a new entry */ Entry = NewSymEntry (Name, Type); @@ -631,8 +759,8 @@ SymEntry* AddStructSym (const char* Name, unsigned Type, unsigned Size, SymTable Entry->V.S.SymTab = Tab; Entry->V.S.Size = Size; - /* Add it to the current table */ - AddSymEntry (TagTab, Entry); + /* Add it to the current tag table */ + AddSymEntry (CurTagTab, Entry); } /* Return the entry */ @@ -704,6 +832,7 @@ SymEntry* AddConstSym (const char* Name, const Type* T, unsigned Flags, long Val } + DefOrRef* AddDefOrRef (SymEntry* E, unsigned Flags) /* Add definition or reference to the SymEntry and preserve its attributes */ { @@ -721,6 +850,8 @@ DefOrRef* AddDefOrRef (SymEntry* E, unsigned Flags) return DOR; } + + unsigned short FindSPAdjustment (const char* Name) /* Search for an entry in the table of SP adjustments */ { @@ -733,6 +864,8 @@ unsigned short FindSPAdjustment (const char* Name) return Entry->V.SPAdjustment; } + + SymEntry* AddLabelSym (const char* Name, unsigned Flags) /* Add a goto label to the label table */ { @@ -848,15 +981,21 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags) SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs) /* Add a local symbol and return the symbol entry */ { + SymTable* Tab = SymTab; + /* Do we have an entry with this name already? */ - SymEntry* Entry = FindSymInTable (SymTab, Name, HashStr (Name)); + SymEntry* Entry = FindSymInTable (Tab, Name, HashStr (Name)); if (Entry) { /* We have a symbol with this name already */ - Error ("Multiple definition for '%s'", Name); - - } else { - + if (HandleSymRedefinition (Entry, T, Flags)) { + /* Use the fail-safe table for fictitious symbols */ + Tab = FailSafeTab; + Entry = 0; + } + } + + if (Entry == 0) { /* Create a new entry */ Entry = NewSymEntry (Name, Flags); @@ -881,7 +1020,7 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs } /* Add the entry to the symbol table */ - AddSymEntry (SymTab, Entry); + AddSymEntry (Tab, Entry); } @@ -898,101 +1037,46 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) int IsFunc = IsTypeFunc (T); /* Functions must be inserted in the global symbol table */ - SymTable* Tab = IsFunc? SymTab0 : SymTab; + SymTable* Tab = IsFunc ? SymTab0 : SymTab; /* Do we have an entry with this name already? */ SymEntry* Entry = FindSymInTable (Tab, Name, HashStr (Name)); if (Entry) { - Type* EType; - - /* If the existing symbol is an enumerated constant, - ** then avoid a compiler crash. See GitHub issue #728. - */ - if (Entry->Flags & SC_ENUMERATOR) { - Fatal ("Can't redeclare enumerator constant '%s' as global variable", Name); - } /* We have a symbol with this name already */ - if (Entry->Flags & SC_TYPEMASK) { - Error ("Multiple definition for '%s'", Name); - return Entry; - } - - /* Get the type string of the existing symbol */ - EType = Entry->Type; - - /* If we are handling arrays, the old entry or the new entry may be an - ** incomplete declaration. Accept this, and if the exsting entry is - ** incomplete, complete it. - */ - if (IsTypeArray (T) && IsTypeArray (EType)) { - - /* Get the array sizes */ - long Size = GetElementCount (T); - long ESize = GetElementCount (EType); - - if ((Size != UNSPECIFIED && ESize != UNSPECIFIED && Size != ESize) || - TypeCmp (T + 1, EType + 1) < TC_EQUAL) { - /* Types not identical: Conflicting types */ - Error ("Conflicting types for '%s'", Name); - return Entry; - } else { - /* Check if we have a size in the existing definition */ - if (ESize == UNSPECIFIED) { - /* Existing, size not given, use size from new def */ - SetElementCount (EType, Size); - } - } + if (HandleSymRedefinition (Entry, T, Flags)) { + /* Use the fail-safe table for fictitious symbols */ + Tab = FailSafeTab; + Entry = 0; } else { - /* New type must be identical */ - if (TypeCmp (EType, T) < TC_EQUAL) { - Error ("Conflicting types for '%s'", Name); - return Entry; - } - /* In case of a function, use the new type descriptor, since it - ** contains pointers to the new symbol tables that are needed if - ** an actual function definition follows. Be sure not to use the - ** new descriptor if it contains a function declaration with an - ** empty parameter list. + /* If a static declaration follows a non-static declaration, then + ** warn about the conflict. (It will compile a public declaration.) */ - if (IsFunc) { - /* Get the function descriptor from the new type */ - FuncDesc* F = GetFuncDesc (T); - /* Use this new function descriptor if it doesn't contain - ** an empty parameter list. - */ - if ((F->Flags & FD_EMPTY) == 0) { - Entry->V.F.Func = F; - SetFuncDesc (EType, F); - } + if ((Flags & SC_EXTERN) == 0 && (Entry->Flags & SC_EXTERN) != 0) { + Warning ("static declaration follows non-static declaration of '%s'.", Name); } + + /* An extern declaration must not change the current linkage. */ + if (IsFunc || (Flags & (SC_EXTERN | SC_STORAGE)) == SC_EXTERN) { + Flags &= ~SC_EXTERN; + } + + /* If a public declaration follows a static declaration, then + ** warn about the conflict. (It will compile a public declaration.) + */ + if ((Flags & SC_EXTERN) != 0 && (Entry->Flags & SC_EXTERN) == 0) { + Warning ("public declaration follows static declaration of '%s'.", Name); + } + + /* Add the new flags */ + Entry->Flags |= Flags; } - /* If a static declaration follows a non-static declaration, then - ** warn about the conflict. (It will compile a public declaration.) - */ - if ((Flags & SC_EXTERN) == 0 && (Entry->Flags & SC_EXTERN) != 0) { - Warning ("static declaration follows non-static declaration of '%s'.", Name); - } - - /* An extern declaration must not change the current linkage. */ - if (IsFunc || (Flags & (SC_EXTERN | SC_STORAGE)) == SC_EXTERN) { - Flags &= ~SC_EXTERN; - } - - /* If a public declaration follows a static declaration, then - ** warn about the conflict. (It will compile a public declaration.) - */ - if ((Flags & SC_EXTERN) != 0 && (Entry->Flags & SC_EXTERN) == 0) { - Warning ("public declaration follows static declaration of '%s'.", Name); - } - - /* Add the new flags */ - Entry->Flags |= Flags; - - } else { + } + + if (Entry == 0) { /* Create a new entry */ Entry = NewSymEntry (Name, Flags); From 25d10d9d9ad033c793f0857b465774a42c3613a3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 29 Jul 2020 15:09:53 +0800 Subject: [PATCH 0309/2710] Fixed nested struct/union initialization. Fixed bit-fields offsets in anonymous structs. --- src/cc65/anonname.c | 11 +++ src/cc65/anonname.h | 5 ++ src/cc65/declare.c | 203 +++++++++++++++++++++++++++----------------- src/cc65/expr.c | 31 ++++--- src/cc65/symentry.h | 10 +++ src/cc65/symtab.c | 39 +++++++-- src/cc65/symtab.h | 7 +- 7 files changed, 201 insertions(+), 105 deletions(-) diff --git a/src/cc65/anonname.c b/src/cc65/anonname.c index d02253d82..23891bf0e 100644 --- a/src/cc65/anonname.c +++ b/src/cc65/anonname.c @@ -61,6 +61,17 @@ static const char AnonTag[] = "$anon"; +char* AnonFieldName (char* Buf, const char* Spec, int ANumber) +/* Get a name for an anonymous field of a struct or union. The given buffer is +** expected to be IDENTSIZE characters long. A pointer to the buffer is returned. +*/ +{ + xsprintf (Buf, IDENTSIZE, "%s-%s-%04X", AnonTag, Spec, ANumber); + return Buf; +} + + + char* AnonName (char* Buf, const char* Spec) /* Get a name for an anonymous variable or type. The given buffer is expected ** to be IDENTSIZE characters long. A pointer to the buffer is returned. diff --git a/src/cc65/anonname.h b/src/cc65/anonname.h index dfaa1bdaa..a88b131b5 100644 --- a/src/cc65/anonname.h +++ b/src/cc65/anonname.h @@ -44,6 +44,11 @@ +char* AnonFieldName (char* Buf, const char* Spec, int ANumber); +/* Get a name for an anonymous field of a struct or union. The given buffer is +** expected to be IDENTSIZE characters long. A pointer to the buffer is returned. +*/ + char* AnonName (char* Buf, const char* Spec); /* Get a name for an anonymous variable or type. The given buffer is expected ** to be IDENTSIZE characters long. A pointer to the buffer is returned. diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 1ebae4123..a1d23c20b 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -89,7 +89,7 @@ struct StructInitData { static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers); /* Parse a type specifier */ -static unsigned ParseInitInternal (Type* T, int AllowFlexibleMembers); +static unsigned ParseInitInternal (Type* T, int* Braces, int AllowFlexibleMembers); /* Parse initialization of variables. Return the number of data bytes. */ @@ -717,24 +717,24 @@ static int ParseFieldWidth (Declaration* Decl) -static unsigned CopyAnonStructFields (const Declaration* Decl, int Offs) -/* Copy fields from an anon union/struct into the current lexical level. The -** function returns the size of the embedded struct/union. +static unsigned AliasAnonStructFields (const Declaration* Decl, SymEntry* Anon) +/* Create alias fields from an anon union/struct in the current lexical level. +** The function returns the count of created aliases. */ { + unsigned Count = 0; + SymEntry* Alias; + /* Get the pointer to the symbol table entry of the anon struct */ SymEntry* Entry = GetSymEntry (Decl->Type); - /* Get the size of the anon struct */ - unsigned Size = Entry->V.S.Size; - /* Get the symbol table containing the fields. If it is empty, there has ** been an error before, so bail out. */ SymTable* Tab = Entry->V.S.SymTab; if (Tab == 0) { /* Incomplete definition - has been flagged before */ - return Size; + return 0; } /* Get a pointer to the list of symbols. Then walk the list adding copies @@ -743,10 +743,13 @@ static unsigned CopyAnonStructFields (const Declaration* Decl, int Offs) Entry = Tab->SymHead; while (Entry) { - /* Enter a copy of this symbol adjusting the offset. We will just - ** reuse the type string here. - */ - AddLocalSym (Entry->Name, Entry->Type, SC_STRUCTFIELD, Offs + Entry->V.Offs); + /* Enter an alias of this symbol */ + if (!IsAnonName (Entry->Name)) { + Alias = AddLocalSym (Entry->Name, Entry->Type, SC_STRUCTFIELD|SC_ALIAS, 0); + Alias->V.A.Field = Entry; + Alias->V.A.Offs = Anon->V.Offs + Entry->V.Offs; + ++Count; + } /* Currently, there can not be any attributes, but if there will be ** some in the future, we want to know this. @@ -757,8 +760,8 @@ static unsigned CopyAnonStructFields (const Declaration* Decl, int Offs) Entry = Entry->NextSym; } - /* Return the size of the embedded struct */ - return Size; + /* Return the count of created aliases */ + return Count; } @@ -771,6 +774,8 @@ static SymEntry* ParseUnionDecl (const char* Name) unsigned FieldSize; int FieldWidth; /* Width in bits, -1 if not a bit-field */ SymTable* FieldTab; + SymEntry* StructTypeEntry; + SymEntry* Entry; if (CurTok.Tok != TOK_LCURLY) { @@ -779,7 +784,9 @@ static SymEntry* ParseUnionDecl (const char* Name) } /* Add a forward declaration for the struct in the current lexical level */ - AddStructSym (Name, SC_UNION, 0, 0); + StructTypeEntry = AddStructSym (Name, SC_UNION, 0, 0); + + StructTypeEntry->V.S.ACount = 0; /* Skip the curly brace */ NextToken (); @@ -821,16 +828,11 @@ static SymEntry* ParseUnionDecl (const char* Name) /* This is an anonymous struct or union. Copy the fields ** into the current level. */ - FieldSize = CopyAnonStructFields (&Decl, 0); - if (FieldSize > UnionSize) { - UnionSize = FieldSize; - } - + AnonFieldName (Decl.Ident, "field", StructTypeEntry->V.S.ACount); } else { /* A non bit-field without a name is legal but useless */ Warning ("Declaration does not declare anything"); } - goto NextMember; } /* Handle sizes */ @@ -843,7 +845,13 @@ static SymEntry* ParseUnionDecl (const char* Name) if (FieldWidth > 0) { AddBitField (Decl.Ident, 0, 0, FieldWidth); } else { - AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0); + if (IsAnonName (Decl.Ident)) { + Entry = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0); + Entry->V.A.ANumber = StructTypeEntry->V.S.ACount++; + AliasAnonStructFields (&Decl, Entry); + } else { + AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0); + } } NextMember: if (CurTok.Tok != TOK_COMMA) { @@ -876,6 +884,8 @@ static SymEntry* ParseStructDecl (const char* Name) unsigned BitOffs; /* Bit offset for bit-fields */ int FieldWidth; /* Width in bits, -1 if not a bit-field */ SymTable* FieldTab; + SymEntry* StructTypeEntry; + SymEntry* Entry; if (CurTok.Tok != TOK_LCURLY) { @@ -884,7 +894,9 @@ static SymEntry* ParseStructDecl (const char* Name) } /* Add a forward declaration for the struct in the current lexical level */ - AddStructSym (Name, SC_STRUCT, 0, 0); + StructTypeEntry = AddStructSym (Name, SC_STRUCT, 0, 0); + + StructTypeEntry->V.S.ACount = 0; /* Skip the curly brace */ NextToken (); @@ -981,13 +993,11 @@ static SymEntry* ParseStructDecl (const char* Name) /* This is an anonymous struct or union. Copy the ** fields into the current level. */ - StructSize += CopyAnonStructFields (&Decl, StructSize); - + AnonFieldName (Decl.Ident, "field", StructTypeEntry->V.S.ACount); } else { /* A non bit-field without a name is legal but useless */ Warning ("Declaration does not declare anything"); } - goto NextMember; } else { /* A bit-field without a name will get an anonymous one */ AnonName (Decl.Ident, "bit-field"); @@ -1009,7 +1019,13 @@ static SymEntry* ParseStructDecl (const char* Name) StructSize += BitOffs / CHAR_BITS; BitOffs %= CHAR_BITS; } else { - AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize); + if (IsAnonName (Decl.Ident)) { + Entry = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize); + Entry->V.A.ANumber = StructTypeEntry->V.S.ACount++; + AliasAnonStructFields (&Decl, Entry); + } else { + AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize); + } if (!FlexibleMember) { StructSize += CheckedSizeOf (Decl.Type); } @@ -1874,18 +1890,20 @@ void CheckEmptyDecl (const DeclSpec* D) -static void SkipInitializer (unsigned BracesExpected) +static void SkipInitializer (int BracesExpected) /* Skip the remainder of an initializer in case of errors. Try to be somewhat ** smart so we don't have too many following errors. */ { - while (CurTok.Tok != TOK_CEOF && CurTok.Tok != TOK_SEMI && BracesExpected > 0) { + while (CurTok.Tok != TOK_CEOF && CurTok.Tok != TOK_SEMI && BracesExpected >= 0) { switch (CurTok.Tok) { case TOK_RCURLY: --BracesExpected; break; case TOK_LCURLY: ++BracesExpected; break; default: break; } - NextToken (); + if (BracesExpected >= 0) { + NextToken (); + } } } @@ -1917,6 +1935,7 @@ static void ClosingCurlyBraces (unsigned BracesExpected) */ { while (BracesExpected) { + /* TODO: Skip all excess initializers until next closing curly brace */ if (CurTok.Tok == TOK_RCURLY) { NextToken (); } else if (CurTok.Tok == TOK_COMMA && NextTok.Tok == TOK_RCURLY) { @@ -2069,7 +2088,7 @@ static unsigned ParsePointerInit (Type* T) -static unsigned ParseArrayInit (Type* T, int AllowFlexibleMembers) +static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Parse initializaton for arrays. Return the number of data bytes. */ { int Count; @@ -2135,7 +2154,7 @@ static unsigned ParseArrayInit (Type* T, int AllowFlexibleMembers) ** an array (because the size of each element may differ ** otherwise). */ - ParseInitInternal (ElementType, 0); + ParseInitInternal (ElementType, Braces, 0); ++Count; if (CurTok.Tok != TOK_COMMA) break; @@ -2158,23 +2177,29 @@ static unsigned ParseArrayInit (Type* T, int AllowFlexibleMembers) } else if (Count < ElementCount) { g_zerobytes ((ElementCount - Count) * ElementSize); } else if (Count > ElementCount) { - Error ("Too many initializers"); + Error ("Excess elements in array initializer"); } return ElementCount * ElementSize; } -static unsigned ParseStructInit (Type* T, int AllowFlexibleMembers) +static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Parse initialization of a struct or union. Return the number of data bytes. */ { SymEntry* Entry; SymTable* Tab; StructInitData SI; + int HasCurly = 0; + int SkipComma = 0; - /* Consume the opening curly brace */ - ConsumeLCurly (); + /* Fields can be initialized without a pair of curly braces */ + if (*Braces == 0 || CurTok.Tok == TOK_LCURLY) { + /* Consume the opening curly brace */ + HasCurly = ConsumeLCurly (); + *Braces += HasCurly; + } /* Get a pointer to the struct entry from the type */ Entry = GetSymEntry (T); @@ -2189,7 +2214,7 @@ static unsigned ParseStructInit (Type* T, int AllowFlexibleMembers) if (Tab == 0) { Error ("Cannot initialize variables with incomplete type"); /* Try error recovery */ - SkipInitializer (1); + SkipInitializer (HasCurly); /* Nothing initialized */ return 0; } @@ -2203,18 +2228,50 @@ static unsigned ParseStructInit (Type* T, int AllowFlexibleMembers) SI.ValBits = 0; while (CurTok.Tok != TOK_RCURLY) { - /* */ + /* Check for excess elements */ if (Entry == 0) { - Error ("Too many initializers"); - SkipInitializer (1); + if (HasCurly) { + Error ("Excess elements in %s initializer", GetBasicTypeName (T)); + SkipInitializer (HasCurly); + } return SI.Offs; } - /* Parse initialization of one field. Bit-fields need a special - ** handling. + /* Check for special members that don't consume the initializer */ + if ((Entry->Flags & SC_ALIAS) == SC_ALIAS) { + /* Just skip */ + goto NextMember; + } + + /* This may be an anonymous bit-field, in which case it doesn't + ** have an initializer. */ + if (SymIsBitField (Entry) && (IsAnonName (Entry->Name))) { + /* Account for the data and output it if we have at least a full + ** word. We may have more if there was storage unit overlap, for + ** example two consecutive 10 bit fields. These will be packed + ** into 3 bytes. + */ + SI.ValBits += Entry->V.B.BitWidth; + CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); + while (SI.ValBits >= CHAR_BITS) { + OutputBitFieldData (&SI); + } + /* Avoid consuming the comma if any */ + goto NextMember; + } + + /* Skip comma this round */ + if (SkipComma) { + NextToken (); + SkipComma = 0; + } + if (SymIsBitField (Entry)) { + /* Parse initialization of one field. Bit-fields need a special + ** handling. + */ ExprDesc ED; unsigned Val; unsigned Shift; @@ -2226,36 +2283,17 @@ static unsigned ParseStructInit (Type* T, int AllowFlexibleMembers) CHECK (Entry->V.B.Offs * CHAR_BITS + Entry->V.B.BitOffs == SI.Offs * CHAR_BITS + SI.ValBits); - /* This may be an anonymous bit-field, in which case it doesn't - ** have an initializer. - */ - if (IsAnonName (Entry->Name)) { - /* Account for the data and output it if we have at least a - ** full word. We may have more if there was storage unit - ** overlap, for example two consecutive 10 bit fields. - ** These will be packed into 3 bytes. - */ - SI.ValBits += Entry->V.B.BitWidth; - CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); - while (SI.ValBits >= CHAR_BITS) { - OutputBitFieldData (&SI); - } - goto NextMember; - } else { - /* Read the data, check for a constant integer, do a range - ** check. - */ - ParseScalarInitInternal (type_uint, &ED); - if (!ED_IsConstAbsInt (&ED)) { - Error ("Constant initializer expected"); - ED_MakeConstAbsInt (&ED, 1); - } - if (ED.IVal > (long) Mask) { - Warning ("Truncating value in bit-field initializer"); - ED.IVal &= (long) Mask; - } - Val = (unsigned) ED.IVal; + /* Read the data, check for a constant integer, do a range check */ + ParseScalarInitInternal (type_uint, &ED); + if (!ED_IsConstAbsInt (&ED)) { + Error ("Constant initializer expected"); + ED_MakeConstAbsInt (&ED, 1); } + if (ED.IVal > (long) Mask) { + Warning ("Truncating value in bit-field initializer"); + ED.IVal &= (long) Mask; + } + Val = (unsigned) ED.IVal; /* Add the value to the currently stored bit-field value */ Shift = (Entry->V.B.Offs - SI.Offs) * CHAR_BITS + Entry->V.B.BitOffs; @@ -2285,7 +2323,7 @@ static unsigned ParseStructInit (Type* T, int AllowFlexibleMembers) /* Flexible array members may only be initialized if they are ** the last field (or part of the last struct field). */ - SI.Offs += ParseInitInternal (Entry->Type, AllowFlexibleMembers && Entry->NextSym == 0); + SI.Offs += ParseInitInternal (Entry->Type, Braces, AllowFlexibleMembers && Entry->NextSym == 0); } /* More initializers? */ @@ -2293,8 +2331,8 @@ static unsigned ParseStructInit (Type* T, int AllowFlexibleMembers) break; } - /* Skip the comma */ - NextToken (); + /* Skip the comma next round */ + SkipComma = 1; NextMember: /* Next member. For unions, only the first one can be initialized */ @@ -2307,8 +2345,10 @@ NextMember: } } - /* Consume the closing curly brace */ - ConsumeRCurly (); + if (HasCurly) { + /* Consume the closing curly brace */ + ConsumeRCurly (); + } /* If we have data from a bit-field left, output it now */ CHECK (SI.ValBits < CHAR_BITS); @@ -2405,7 +2445,7 @@ static unsigned ParseVoidInit (Type* T) -static unsigned ParseInitInternal (Type* T, int AllowFlexibleMembers) +static unsigned ParseInitInternal (Type* T, int *Braces, int AllowFlexibleMembers) /* Parse initialization of variables. Return the number of data bytes. */ { switch (GetUnderlyingTypeCode (T)) { @@ -2426,11 +2466,11 @@ static unsigned ParseInitInternal (Type* T, int AllowFlexibleMembers) return ParsePointerInit (T); case T_ARRAY: - return ParseArrayInit (T, AllowFlexibleMembers); + return ParseArrayInit (T, Braces, AllowFlexibleMembers); case T_STRUCT: case T_UNION: - return ParseStructInit (T, AllowFlexibleMembers); + return ParseStructInit (T, Braces, AllowFlexibleMembers); case T_VOID: if (IS_Get (&Standard) == STD_CC65) { @@ -2451,10 +2491,13 @@ static unsigned ParseInitInternal (Type* T, int AllowFlexibleMembers) unsigned ParseInit (Type* T) /* Parse initialization of variables. Return the number of data bytes. */ { + /* Current curly braces layers */ + int Braces = 0; + /* Parse the initialization. Flexible array members can only be initialized ** in cc65 mode. */ - unsigned Size = ParseInitInternal (T, IS_Get (&Standard) == STD_CC65); + unsigned Size = ParseInitInternal (T, &Braces, IS_Get (&Standard) == STD_CC65); /* The initialization may not generate code on global level, because code ** outside function scope will never get executed. diff --git a/src/cc65/expr.c b/src/cc65/expr.c index a35ad59a9..fd8a48002 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1201,7 +1201,6 @@ static void StructRef (ExprDesc* Expr) /* Process struct/union field after . or ->. */ { ident Ident; - SymEntry* Field; Type* FinalType; TypeCode Q; @@ -1217,8 +1216,8 @@ static void StructRef (ExprDesc* Expr) /* Get the symbol table entry and check for a struct/union field */ strcpy (Ident, CurTok.Ident); NextToken (); - Field = FindStructField (Expr->Type, Ident); - if (Field == 0) { + const SymEntry Field = FindStructField (Expr->Type, Ident); + if (Field.Type == 0) { Error ("No field named '%s' found in %s", Ident, GetBasicTypeName (Expr->Type)); /* Make the expression an integer at address zero */ ED_MakeConstAbs (Expr, 0, type_int); @@ -1264,10 +1263,10 @@ static void StructRef (ExprDesc* Expr) } else { Q = GetQualifier (Indirect (Expr->Type)); } - if (GetQualifier (Field->Type) == (GetQualifier (Field->Type) | Q)) { - FinalType = Field->Type; + if (GetQualifier (Field.Type) == (GetQualifier (Field.Type) | Q)) { + FinalType = Field.Type; } else { - FinalType = TypeDup (Field->Type); + FinalType = TypeDup (Field.Type); FinalType->C |= Q; } @@ -1278,10 +1277,10 @@ static void StructRef (ExprDesc* Expr) /* Get the size of the type */ unsigned StructSize = SizeOf (Expr->Type); - unsigned FieldSize = SizeOf (Field->Type); + unsigned FieldSize = SizeOf (Field.Type); /* Safety check */ - CHECK (Field->V.Offs + FieldSize <= StructSize); + CHECK (Field.V.Offs + FieldSize <= StructSize); /* The type of the operation depends on the type of the struct/union */ switch (StructSize) { @@ -1304,16 +1303,16 @@ static void StructRef (ExprDesc* Expr) /* Generate a shift to get the field in the proper position in the ** primary. For bit fields, mask the value. */ - BitOffs = Field->V.Offs * CHAR_BITS; - if (SymIsBitField (Field)) { - BitOffs += Field->V.B.BitOffs; + BitOffs = Field.V.Offs * CHAR_BITS; + if (SymIsBitField (&Field)) { + BitOffs += Field.V.B.BitOffs; g_asr (Flags, BitOffs); /* Mask the value. This is unnecessary if the shift executed above ** moved only zeroes into the value. */ - if (BitOffs + Field->V.B.BitWidth != FieldSize * CHAR_BITS) { + if (BitOffs + Field.V.B.BitWidth != FieldSize * CHAR_BITS) { g_and (CF_INT | CF_UNSIGNED | CF_CONST, - (0x0001U << Field->V.B.BitWidth) - 1U); + (0x0001U << Field.V.B.BitWidth) - 1U); } } else { g_asr (Flags, BitOffs); @@ -1325,7 +1324,7 @@ static void StructRef (ExprDesc* Expr) } else { /* Set the struct/union field offset */ - Expr->IVal += Field->V.Offs; + Expr->IVal += Field.V.Offs; /* Use the new type */ Expr->Type = FinalType; @@ -1341,8 +1340,8 @@ static void StructRef (ExprDesc* Expr) } /* Make the expression a bit field if necessary */ - if (SymIsBitField (Field)) { - ED_MakeBitField (Expr, Field->V.B.BitOffs, Field->V.B.BitWidth); + if (SymIsBitField (&Field)) { + ED_MakeBitField (Expr, Field.V.B.BitOffs, Field.V.B.BitWidth); } } diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index b030d8b8b..e59bf2a35 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -105,6 +105,7 @@ struct CodeEntry; #define SC_SPADJUSTMENT 0x400000U #define SC_GOTO_IND 0x800000U /* Indirect goto */ +#define SC_ALIAS 0x01000000U /* Alias of anonymous field */ @@ -138,6 +139,14 @@ struct SymEntry { /* Offset for locals or struct members */ int Offs; + /* Data for anonymous struct or union members */ + struct { + int Offs; /* Byte offset into struct */ + unsigned ANumber; /* Numeric ID */ + SymEntry* Field; /* The real field aliased */ + } A; + + /* Label name for static symbols */ struct { unsigned Label; @@ -163,6 +172,7 @@ struct SymEntry { struct { struct SymTable* SymTab; /* Member symbol table */ unsigned Size; /* Size of the union/struct */ + unsigned ACount; /* Count of anonymous fields */ } S; /* Data for enums */ diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 6472a0792..f7a7862cf 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -490,10 +490,15 @@ SymEntry* FindTagSym (const char* Name) -SymEntry* FindStructField (const Type* T, const char* Name) -/* Find a struct/union field in the fields list */ +SymEntry FindStructField (const Type* T, const char* Name) +/* Find a struct/union field in the fields list. +** Return the info about the found field symbol filled in an entry struct by +** value, or an empty entry struct if the field is not found. +*/ { - SymEntry* Field = 0; + SymEntry* Entry = 0; + SymEntry Field; + int Offs = 0; /* The given type may actually be a pointer to struct/union */ if (IsTypePtr (T)) { @@ -511,10 +516,26 @@ SymEntry* FindStructField (const Type* T, const char* Name) ** not exist. */ if (Struct->V.S.SymTab) { - Field = FindSymInTable (Struct->V.S.SymTab, Name, HashStr (Name)); + Entry = FindSymInTable (Struct->V.S.SymTab, Name, HashStr (Name)); + + if (Entry != 0) { + Offs = Entry->V.Offs; + } + + while (Entry != 0 && (Entry->Flags & SC_ALIAS) == SC_ALIAS) { + /* Get the real field */ + Entry = Entry->V.A.Field; + } } } + if (Entry != 0) { + Field = *Entry; + Field.V.Offs = Offs; + } else { + memset (&Field, 0, sizeof(SymEntry)); + } + return Field; } @@ -1001,7 +1022,13 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs /* Set the symbol attributes */ Entry->Type = TypeDup (T); - if ((Flags & SC_AUTO) == SC_AUTO || (Flags & SC_TYPEMASK) == SC_TYPEDEF) { + + if ((Flags & SC_STRUCTFIELD) == SC_STRUCTFIELD || + (Flags & SC_TYPEDEF) == SC_TYPEDEF) { + if ((Flags & SC_ALIAS) != SC_ALIAS) { + Entry->V.Offs = Offs; + } + } else if ((Flags & SC_AUTO) == SC_AUTO) { Entry->V.Offs = Offs; } else if ((Flags & SC_REGISTER) == SC_REGISTER) { Entry->V.R.RegOffs = Offs; @@ -1013,8 +1040,6 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs /* Generate the assembler name from the label number */ Entry->V.L.Label = Offs; Entry->AsmName = xstrdup (LocalLabelName (Entry->V.L.Label)); - } else if ((Flags & SC_STRUCTFIELD) == SC_STRUCTFIELD) { - Entry->V.Offs = Offs; } else { Internal ("Invalid flags in AddLocalSym: %04X", Flags); } diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h index dd4b3aa37..79f656f95 100644 --- a/src/cc65/symtab.h +++ b/src/cc65/symtab.h @@ -133,8 +133,11 @@ SymEntry* FindLocalSym (const char* Name); SymEntry* FindTagSym (const char* Name); /* Find the symbol with the given name in the tag table */ -SymEntry* FindStructField (const Type* TypeArray, const char* Name); -/* Find a struct/union field in the fields list */ +SymEntry FindStructField (const Type* TypeArray, const char* Name); +/* Find a struct/union field in the fields list. +** Return the info about the found field symbol filled in an entry struct by +** value, or an empty entry struct if the field is not found. +*/ unsigned short FindSPAdjustment (const char* Name); /* Search for an entry in the table of SP adjustments */ From 9075a853dc919e2d028b4cf67af61183555dad13 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 29 Jul 2020 15:09:53 +0800 Subject: [PATCH 0310/2710] Allows one trailing comma before the closing curly of a struct/union initializer. --- src/cc65/declare.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index a1d23c20b..0c489dab4 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2230,6 +2230,13 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Check for excess elements */ if (Entry == 0) { + /* Is there just one trailing comma before a closing curly? */ + if (NextTok.Tok == TOK_RCURLY && CurTok.Tok == TOK_COMMA) { + /* Skip comma and exit scope */ + NextToken (); + break; + } + if (HasCurly) { Error ("Excess elements in %s initializer", GetBasicTypeName (T)); SkipInitializer (HasCurly); From 8a511bb63ddcfefa71700bada01a02cd863396a0 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 29 Jul 2020 15:09:53 +0800 Subject: [PATCH 0311/2710] Fixed nested array initializers. --- src/cc65/declare.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 0c489dab4..c15041cbf 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2092,6 +2092,7 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Parse initializaton for arrays. Return the number of data bytes. */ { int Count; + int HasCurly = 0; /* Get the array data */ Type* ElementType = GetElementType (T); @@ -2144,8 +2145,12 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) } else { - /* Curly brace */ - ConsumeLCurly (); + /* Arrays can be initialized without a pair of curly braces */ + if (*Braces == 0 || CurTok.Tok == TOK_LCURLY) { + /* Consume the opening curly brace */ + HasCurly = ConsumeLCurly (); + *Braces += HasCurly; + } /* Initialize the array members */ Count = 0; @@ -2161,8 +2166,10 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) NextToken (); } - /* Closing curly braces */ - ConsumeRCurly (); + if (HasCurly) { + /* Closing curly braces */ + ConsumeRCurly (); + } } if (ElementCount == UNSPECIFIED) { @@ -2176,7 +2183,7 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) ElementCount = Count; } else if (Count < ElementCount) { g_zerobytes ((ElementCount - Count) * ElementSize); - } else if (Count > ElementCount) { + } else if (Count > ElementCount && HasCurly) { Error ("Excess elements in array initializer"); } return ElementCount * ElementSize; From e38f601fcc5db52355a2c8afb498723699c6e3bf Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 29 Jul 2020 15:09:53 +0800 Subject: [PATCH 0312/2710] Fixed padding at the ends of structs with bit-fields. --- src/cc65/declare.c | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index c15041cbf..9e77ea63e 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -717,6 +717,29 @@ static int ParseFieldWidth (Declaration* Decl) +static unsigned PadWithBitField (unsigned StructSize, unsigned BitOffs) +/* Pad the current struct with an anonymous bit-field aligned to the next byte. +** Return how many bits are used to pad. +*/ +{ + /* MSVC complains about unary negation of unsigned, + ** so it has been rewritten as subtraction. + */ + unsigned PaddingBits = (0 - BitOffs) % CHAR_BITS; + + /* We need an anonymous name */ + ident Ident; + AnonName (Ident, "bit-field"); + + /* Add an anonymous bit-field that aligns to the next + ** byte. + */ + AddBitField (Ident, StructSize, BitOffs, PaddingBits); + + return PaddingBits; +} + + static unsigned AliasAnonStructFields (const Declaration* Decl, SymEntry* Anon) /* Create alias fields from an anon union/struct in the current lexical level. ** The function returns the count of created aliases. @@ -919,7 +942,6 @@ static SymEntry* ParseStructDecl (const char* Name) while (1) { Declaration Decl; - ident Ident; /* If we had a flexible array member before, no other fields can ** follow. @@ -942,19 +964,10 @@ static SymEntry* ParseStructDecl (const char* Name) */ if (BitOffs > 0) { if (FieldWidth <= 0 || (BitOffs + FieldWidth) > INT_BITS) { - /* Bits needed to byte-align the next field. - ** MSVC complains about unary negation of unsigned, - ** so it has been rewritten as subtraction. - */ - unsigned PaddingBits = (0 - BitOffs) % CHAR_BITS; - - /* We need an anonymous name */ - AnonName (Ident, "bit-field"); - /* Add an anonymous bit-field that aligns to the next ** byte. */ - AddBitField (Ident, StructSize, BitOffs, PaddingBits); + unsigned PaddingBits = PadWithBitField (StructSize, BitOffs); /* No bits left */ StructSize += (BitOffs + PaddingBits) / CHAR_BITS; @@ -1039,9 +1052,12 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { ConsumeSemi (); } - /* If we have bits from bit-fields left, add them to the size. */ if (BitOffs > 0) { - StructSize += ((BitOffs + CHAR_BITS - 1) / CHAR_BITS); + /* If we have bits from bit-fields left, pad the struct to next byte */ + unsigned PaddingBits = PadWithBitField (StructSize, BitOffs); + + /* No bits left */ + StructSize += (BitOffs + PaddingBits) / CHAR_BITS; } /* Skip the closing brace */ From 2d5fd0fc6301ab0d0ee4cb3517f9e0c9dce540a5 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Thu, 30 Jul 2020 12:00:21 +0200 Subject: [PATCH 0313/2710] Use char ops if possible for bit-field loads Set CF_FORCECHAR and change type to char once we have shifted into a char. This saves some unnecessary ldx #0 instructions. --- src/cc65/loadexpr.c | 20 +++++++++- test/val/bitfield.c | 92 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 2 deletions(-) diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index bc0ee1dd0..807a5cbe5 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -193,10 +193,26 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) ** operations. */ if (ED_IsBitField (Expr)) { - unsigned F = CF_INT | CF_UNSIGNED | CF_CONST | (Flags & CF_TEST); + /* If the field was loaded as a char, force the shift/mask ops to be char ops. + ** If it is a char, the load has already put 0 in the upper byte, so that can remain. + ** CF_FORCECHAR does nothing if the type is not CF_CHAR. + */ + unsigned F = Flags | CF_FORCECHAR | CF_CONST; + /* Shift right by the bit offset */ g_asr (F, Expr->BitOffs); - /* And by the width if the field doesn't end on an int boundary */ + + /* Since we have now shifted down, we can do char ops as long as the width fits in + ** a char. + */ + if (Expr->BitWidth <= CHAR_BITS) { + F |= CF_CHAR; + } + + /* And by the width if the field doesn't end on a char or int boundary. If it does + ** end on a boundary, then zeros have already been shifted in. g_and emits no code + ** if the mask is all ones. + */ if (Expr->BitOffs + Expr->BitWidth != CHAR_BITS && Expr->BitOffs + Expr->BitWidth != INT_BITS) { g_and (F, (0x0001U << Expr->BitWidth) - 1U); diff --git a/test/val/bitfield.c b/test/val/bitfield.c index 81d5b2aa1..67747ed5b 100644 --- a/test/val/bitfield.c +++ b/test/val/bitfield.c @@ -182,12 +182,104 @@ static void test_overlap_with_int(void) } } +static struct full_width { + unsigned int x : 8; + unsigned int y : 16; +} fw = {255, 17}; + +static void test_full_width(void) +{ + if (sizeof(struct full_width) != 3) { + printf("Got sizeof(struct full_width) = %zu, expected 3.\n", + sizeof(struct full_width)); + failures++; + } + + if (fw.x != 255) { + printf("Got fw.x = %u, expected 255.\n", fw.x); + failures++; + } + + if (fw.y != 17) { + printf("Got fw.y = %u, expected 17.\n", fw.y); + failures++; + } + + fw.x = 42; + fw.y = 1023; + + if (fw.x != 42) { + printf("Got fw.x = %u, expected 42.\n", fw.x); + failures++; + } + + if (fw.y != 1023) { + printf("Got fw.y = %u, expected 1023.\n", fw.y); + failures++; + } +} + +static struct aligned_end { + unsigned int : 2; + unsigned int x : 6; + unsigned int : 3; + unsigned int y : 13; + /* z crosses a byte boundary, but fits in a byte when shifted. */ + unsigned int : 6; + unsigned int z : 7; +} ae = {63, 17, 100}; + +static void test_aligned_end(void) +{ + if (sizeof(struct aligned_end) != 5) { + printf("Got sizeof(struct aligned_end) = %zu, expected 5.\n", + sizeof(struct aligned_end)); + failures++; + } + + if (ae.x != 63) { + printf("Got ae.x = %u, expected 63.\n", ae.x); + failures++; + } + + if (ae.y != 17) { + printf("Got ae.y = %u, expected 17.\n", ae.y); + failures++; + } + + if (ae.z != 100) { + printf("Got ae.z = %u, expected 100.\n", ae.z); + failures++; + } + + ae.x = 42; + ae.y = 1023; + ae.z = 66; + + if (ae.x != 42) { + printf("Got ae.x = %u, expected 42.\n", ae.x); + failures++; + } + + if (ae.y != 1023) { + printf("Got ae.y = %u, expected 1023.\n", ae.y); + failures++; + } + + if (ae.z != 66) { + printf("Got ae.z = %u, expected 66.\n", ae.z); + failures++; + } +} + int main(void) { test_four_bits(); test_four_bits_with_int(); test_overlap(); test_overlap_with_int(); + test_full_width(); + test_aligned_end(); printf("failures: %u\n", failures); return failures; } From c72fa735b96a832852e2b7f60c3677463e3f8f20 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Thu, 30 Jul 2020 17:21:56 +0200 Subject: [PATCH 0314/2710] Add test for #1139 --- test/todo/bug1139.c | 52 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 test/todo/bug1139.c diff --git a/test/todo/bug1139.c b/test/todo/bug1139.c new file mode 100644 index 000000000..222a9ab51 --- /dev/null +++ b/test/todo/bug1139.c @@ -0,0 +1,52 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests bit-field in if condition; see https://github.com/cc65/cc65/issues/1139 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +static struct overlap { + unsigned int x : 10; + unsigned int y : 10; +} o = {11, 22}; + +/* Test using bit-fields in if conditions. */ +static void test_if(void) +{ + o.x = 0; + o.y = 44; + if (o.x) { + printf("Bad, o.x is false\n"); + failures++; + } else { + printf("Good\n"); + } +} + +int main(void) +{ + test_if(); + printf("failures: %u\n", failures); + return failures; +} From 3df6c383c0b9c387ef5d9be8f6fe479ce714c51f Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sun, 26 Jul 2020 22:16:47 +0200 Subject: [PATCH 0315/2710] Add support for static_assert Add C11's _Static_assert and static_assert macro. This is like #error, but is handled at a later stage of translation, so it is possible to check sizes of types, values of enums, etc. https://en.cppreference.com/w/c/language/_Static_assert https://port70.net/~nsz/c/c11/n1570.html#6.7.10 --- include/assert.h | 6 +++ src/cc65/compile.c | 7 +++ src/cc65/declare.c | 8 ++++ src/cc65/locals.c | 8 ++++ src/cc65/scanner.c | 1 + src/cc65/scanner.h | 1 + src/cc65/staticassert.c | 96 +++++++++++++++++++++++++++++++++++++++++ src/cc65/staticassert.h | 51 ++++++++++++++++++++++ test/err/staticassert.c | 26 +++++++++++ test/val/staticassert.c | 70 ++++++++++++++++++++++++++++++ 10 files changed, 274 insertions(+) create mode 100644 src/cc65/staticassert.c create mode 100644 src/cc65/staticassert.h create mode 100644 test/err/staticassert.c create mode 100644 test/val/staticassert.c diff --git a/include/assert.h b/include/assert.h index 504964dc2..3f8b46ac0 100644 --- a/include/assert.h +++ b/include/assert.h @@ -46,6 +46,12 @@ extern void __fastcall__ _afailed (const char*, unsigned); # define assert(expr) ((expr)? (void)0 : _afailed(__FILE__, __LINE__)) #endif +/* +** TODO: Guard with #if __STDC_VERSION__ >= 201112L or similar when there +** is a C11 mode. +*/ +#define static_assert _Static_assert + /* End of assert.h */ diff --git a/src/cc65/compile.c b/src/cc65/compile.c index f7e4bd35d..3d2f82c51 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -61,6 +61,7 @@ #include "pragma.h" #include "preproc.h" #include "standard.h" +#include "staticassert.h" #include "symtab.h" @@ -108,6 +109,12 @@ static void Parse (void) continue; } + /* Check for a _Static_assert */ + if (CurTok.Tok == TOK_STATIC_ASSERT) { + ParseStaticAssert (); + continue; + } + /* Read variable defs and functions */ ParseDeclSpec (&Spec, SC_EXTERN | SC_STATIC, T_INT); diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 9e77ea63e..ada3ddaae 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -58,6 +58,7 @@ #include "pragma.h" #include "scanner.h" #include "standard.h" +#include "staticassert.h" #include "symtab.h" #include "wrappedcall.h" #include "typeconv.h" @@ -935,6 +936,13 @@ static SymEntry* ParseStructDecl (const char* Name) /* Get the type of the entry */ DeclSpec Spec; + + /* Check for a _Static_assert */ + if (CurTok.Tok == TOK_STATIC_ASSERT) { + ParseStaticAssert (); + continue; + } + InitDeclSpec (&Spec); ParseTypeSpec (&Spec, -1, T_QUAL_NONE); diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 0007879d8..3fa26021f 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -50,6 +50,7 @@ #include "locals.h" #include "stackptr.h" #include "standard.h" +#include "staticassert.h" #include "symtab.h" #include "typeconv.h" #include "input.h" @@ -511,6 +512,13 @@ void DeclareLocals (void) ** declarations. */ DeclSpec Spec; + + /* Check for a _Static_assert */ + if (CurTok.Tok == TOK_STATIC_ASSERT) { + ParseStaticAssert (); + continue; + } + ParseDeclSpec (&Spec, SC_AUTO, T_INT); if ((Spec.Flags & DS_DEF_STORAGE) != 0 && /* No storage spec */ (Spec.Flags & DS_DEF_TYPE) != 0 && /* No type given */ diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 5040cdf08..70203d027 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -86,6 +86,7 @@ static const struct Keyword { unsigned char Std; /* Token supported in which standards? */ } Keywords [] = { { "_Pragma", TOK_PRAGMA, TT_C89 | TT_C99 | TT_CC65 }, /* !! */ + { "_Static_assert", TOK_STATIC_ASSERT, TT_CC65 }, /* C11 */ { "__AX__", TOK_AX, TT_C89 | TT_C99 | TT_CC65 }, { "__A__", TOK_A, TT_C89 | TT_C99 | TT_CC65 }, { "__EAX__", TOK_EAX, TT_C89 | TT_C99 | TT_CC65 }, diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h index 1242d78fd..1c95b3d33 100644 --- a/src/cc65/scanner.h +++ b/src/cc65/scanner.h @@ -173,6 +173,7 @@ typedef enum token_t { TOK_WCSCONST, TOK_ATTRIBUTE, + TOK_STATIC_ASSERT, TOK_FAR, TOK_NEAR, TOK_A, diff --git a/src/cc65/staticassert.c b/src/cc65/staticassert.c new file mode 100644 index 000000000..d7e608b06 --- /dev/null +++ b/src/cc65/staticassert.c @@ -0,0 +1,96 @@ +/*****************************************************************************/ +/* */ +/* staticassert.h */ +/* */ +/* _Static_assert handling for the cc65 C compiler */ +/* */ +/* */ +/* */ +/* Copyright 2020 Google LLC */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +/* cc65 */ +#include "error.h" +#include "expr.h" +#include "litpool.h" +#include "scanner.h" +#include "staticassert.h" + + + +/*****************************************************************************/ +/* _Static_assert handling functions */ +/*****************************************************************************/ + + + +void ParseStaticAssert () +{ + /* + ** static_assert-declaration ::= + ** _Static_assert ( constant-expression , string-literal ) ; + */ + ExprDesc Expr; + int failed; + + /* Skip the _Static_assert token itself */ + CHECK (CurTok.Tok == TOK_STATIC_ASSERT); + NextToken (); + + /* We expect an opening paren */ + if (!ConsumeLParen ()) { + return; + } + + /* Parse assertion condition */ + ConstAbsIntExpr (hie1, &Expr); + failed = !Expr.IVal; + + /* We expect a comma */ + if (!ConsumeComma ()) { + return; + } + + /* String literal */ + if (CurTok.Tok != TOK_SCONST) { + Error ("String literal expected for static_assert message"); + return; + } + + /* Issue an error including the message if the static_assert failed. */ + if (failed) { + Error ("static_assert failed '%s'", GetLiteralStr (CurTok.SVal)); + } + + /* Consume the string constant, now that we don't need it anymore. + ** This should never fail since we checked the token type above. + */ + if (!Consume (TOK_SCONST, "String literal expected")) { + return; + } + + /* Closing paren and semi-colon needed */ + ConsumeRParen (); + ConsumeSemi (); +} diff --git a/src/cc65/staticassert.h b/src/cc65/staticassert.h new file mode 100644 index 000000000..955255bfe --- /dev/null +++ b/src/cc65/staticassert.h @@ -0,0 +1,51 @@ +/*****************************************************************************/ +/* */ +/* staticassert.h */ +/* */ +/* _Static_assert handling for the cc65 C compiler */ +/* */ +/* */ +/* */ +/* Copyright 2020 Google LLC */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef STATICASSERT_H +#define STATICASSERT_H + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +void ParseStaticAssert (void); +/* Handle _Static_assert. These are a C11 feature. */ + + + +/* End of staticassert.h */ + +#endif diff --git a/test/err/staticassert.c b/test/err/staticassert.c new file mode 100644 index 000000000..df9bab6d8 --- /dev/null +++ b/test/err/staticassert.c @@ -0,0 +1,26 @@ +/* + Copyright 2020 Google LLC + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* +** Test of failing _Static_assert. +**/ + + +_Static_assert(0, "0 should be false."); diff --git a/test/val/staticassert.c b/test/val/staticassert.c new file mode 100644 index 000000000..a02ba27e8 --- /dev/null +++ b/test/val/staticassert.c @@ -0,0 +1,70 @@ +/* + Copyright 2020 Google LLC + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* +** Tests of passing _Static_asserts. +**/ + + + +#include <assert.h> + +_Static_assert (1, "1 should be true."); +_Static_assert (!0, "!0 should be true."); +_Static_assert (1 == 1, "1 == 1 should be true."); +_Static_assert (1 == 1L, "1 == 1L should be true."); +_Static_assert (1 != 0, "1 != 0 should be true."); +_Static_assert (sizeof (char) == 1, "sizeof (char) should be 1."); +_Static_assert (sizeof (int) == 2, "sizeof (int) should be 2."); + +/* Make sure we can also do structs. */ +struct sc { char a; }; +_Static_assert (sizeof (struct sc) == 1, "sizeof (struct sc) should be 1."); +struct si { int a; }; +_Static_assert (sizeof (struct si) == 2, "sizeof (struct si) should be 2."); + +/* Try enums. */ +enum { k = 1 }; +_Static_assert (k == 1, "k should be 1."); + +/* Just test the macro version once. */ +static_assert (1, "1 should be true."); + +/* _Static_assert can appear anywhere a declaration can. */ +void f (void) +{ + _Static_assert (1, "1 should still be true."); + if (1) { + _Static_assert (1, "1 should still be true."); + } +} + +/* _Static_assert can also appear in structs. */ +struct S { + int a; + _Static_assert (1, "1 should still be true."); + int b; +}; + + +int main (void) +{ + return 0; +} From d0c7108dcf64403d4256372ed9b5a1faa7b76c14 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Thu, 30 Jul 2020 13:27:57 +0200 Subject: [PATCH 0316/2710] Change copyright notice to "The cc65 Authors" --- src/cc65/staticassert.c | 2 +- src/cc65/staticassert.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/staticassert.c b/src/cc65/staticassert.c index d7e608b06..95a2d4a6e 100644 --- a/src/cc65/staticassert.c +++ b/src/cc65/staticassert.c @@ -6,7 +6,7 @@ /* */ /* */ /* */ -/* Copyright 2020 Google LLC */ +/* Copyright 2020 The cc65 Authors */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ diff --git a/src/cc65/staticassert.h b/src/cc65/staticassert.h index 955255bfe..cf6314424 100644 --- a/src/cc65/staticassert.h +++ b/src/cc65/staticassert.h @@ -6,7 +6,7 @@ /* */ /* */ /* */ -/* Copyright 2020 Google LLC */ +/* Copyright 2020 The cc65 Authors */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ From 847982c6bf1323f801140b71f16d0477cb19ea7e Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Fri, 31 Jul 2020 08:41:05 +0200 Subject: [PATCH 0317/2710] Handle bit-field test after shift/mask Previously, bit-field tests were incorrectly combined with load in `if (x.bitfield)`. Delay the test until after the shift/mask is done. Still combine tests with load if no shift/mask is required. Fixes #1139 --- src/cc65/loadexpr.c | 77 +++++++--- test/todo/bug1139.c | 52 ------- test/val/bug1139.c | 353 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 409 insertions(+), 73 deletions(-) delete mode 100644 test/todo/bug1139.c create mode 100644 test/val/bug1139.c diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index 807a5cbe5..394e0a562 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -33,6 +33,8 @@ +#include <limits.h> + /* cc65 */ #include "codegen.h" #include "error.h" @@ -113,13 +115,23 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) ** field is completely contained in the lower byte, we will throw away ** the high byte anyway and may therefore load just the low byte. */ + unsigned EndBit = 0; /* End bit for bit-fields, or zero if non-bit-field. */ + int AdjustBitField = 0; if (ED_IsBitField (Expr)) { - Flags |= (Expr->BitOffs + Expr->BitWidth <= CHAR_BITS) ? CF_CHAR : CF_INT; + EndBit = Expr->BitOffs + Expr->BitWidth; + AdjustBitField = Expr->BitOffs != 0 || (EndBit != CHAR_BITS && EndBit != INT_BITS); + + Flags |= (EndBit <= CHAR_BITS) ? CF_CHAR : CF_INT; Flags |= CF_UNSIGNED; } else if ((Flags & CF_TYPEMASK) == 0) { Flags |= TypeOf (Expr->Type); } - if (ED_NeedsTest (Expr)) { + + /* Setting CF_TEST will cause the load to perform optimizations and not actually load all + ** bits of the bit-field, instead just computing the condition codes. Therefore, if + ** adjustment is required, we do not set CF_TEST here, but handle it below. + */ + if (ED_NeedsTest (Expr) && !AdjustBitField) { Flags |= CF_TEST; } @@ -188,34 +200,57 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) Internal ("Invalid location in LoadExpr: 0x%04X", ED_GetLoc (Expr)); } - /* Handle bit fields. The actual type may have been casted or - ** converted, so be sure to always use unsigned ints for the - ** operations. + /* Handle bit fields if necessary. The actual type may have been casted or converted, + ** so be sure to always use unsigned ints for the operations. */ - if (ED_IsBitField (Expr)) { + if (AdjustBitField) { /* If the field was loaded as a char, force the shift/mask ops to be char ops. ** If it is a char, the load has already put 0 in the upper byte, so that can remain. ** CF_FORCECHAR does nothing if the type is not CF_CHAR. */ unsigned F = Flags | CF_FORCECHAR | CF_CONST; - /* Shift right by the bit offset */ - g_asr (F, Expr->BitOffs); - - /* Since we have now shifted down, we can do char ops as long as the width fits in - ** a char. + /* We always need to do something with the low byte, so there is no opportunity + ** for optimization by skipping it. */ - if (Expr->BitWidth <= CHAR_BITS) { - F |= CF_CHAR; - } + CHECK (Expr->BitOffs < CHAR_BITS); - /* And by the width if the field doesn't end on a char or int boundary. If it does - ** end on a boundary, then zeros have already been shifted in. g_and emits no code - ** if the mask is all ones. - */ - if (Expr->BitOffs + Expr->BitWidth != CHAR_BITS && - Expr->BitOffs + Expr->BitWidth != INT_BITS) { - g_and (F, (0x0001U << Expr->BitWidth) - 1U); + if (ED_NeedsTest (Expr)) { + /* If we need to do a test, then we avoid shifting (ASR only shifts one bit + ** at a time, so is slow) and just AND with the appropriate mask, then test + ** the result of that. + */ + + /* Avoid overly large shift. */ + if (EndBit == sizeof (unsigned long) * CHAR_BIT) { + g_and (F, (~0UL << Expr->BitOffs)); + } else { + g_and (F, ((1UL << EndBit) - 1) & (~0UL << Expr->BitOffs)); + } + + /* TODO: When long bit-fields are supported, an optimization to test only 3 bytes + ** when EndBit <= 24 is possible. + */ + g_test (F); + ED_TestDone (Expr); + } else { + /* Shift right by the bit offset; no code is emitted if BitOffs is zero */ + g_asr (F, Expr->BitOffs); + + /* Since we have now shifted down, we can do char ops as long as the width fits in + ** a char. + */ + if (Expr->BitWidth <= CHAR_BITS) { + F |= CF_CHAR; + } + + /* And by the width if the field doesn't end on a char or int boundary. + ** If it does end on a boundary, then zeros have already been shifted in. + ** g_and emits no code if the mask is all ones. + */ + if (EndBit != CHAR_BITS && EndBit != INT_BITS) { + g_and (F, (0x0001U << Expr->BitWidth) - 1U); + } } } diff --git a/test/todo/bug1139.c b/test/todo/bug1139.c deleted file mode 100644 index 222a9ab51..000000000 --- a/test/todo/bug1139.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - Copyright 2020 The cc65 Authors - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/* - Tests bit-field in if condition; see https://github.com/cc65/cc65/issues/1139 -*/ - -#include <stdio.h> - -static unsigned char failures = 0; - -static struct overlap { - unsigned int x : 10; - unsigned int y : 10; -} o = {11, 22}; - -/* Test using bit-fields in if conditions. */ -static void test_if(void) -{ - o.x = 0; - o.y = 44; - if (o.x) { - printf("Bad, o.x is false\n"); - failures++; - } else { - printf("Good\n"); - } -} - -int main(void) -{ - test_if(); - printf("failures: %u\n", failures); - return failures; -} diff --git a/test/val/bug1139.c b/test/val/bug1139.c new file mode 100644 index 000000000..5aef3924d --- /dev/null +++ b/test/val/bug1139.c @@ -0,0 +1,353 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests bit-field in if condition; see https://github.com/cc65/cc65/issues/1139 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +static struct four_bits { + unsigned int x : 4; +} fb = {1}; + +static struct overlap { + unsigned int x : 10; + unsigned int y : 10; +} o = {11, 22}; + +static struct full_width { + unsigned int x : 8; + unsigned int y : 16; +} fw = {255, 17}; + +static struct aligned_end { + unsigned int : 2; + unsigned int x : 6; + unsigned int : 3; + unsigned int y : 13; + /* z crosses a byte boundary, but fits in a byte when shifted. */ + unsigned int : 6; + unsigned int z : 7; +} ae = {63, 17, 100}; + +/* Test using bit-fields in if conditions. */ +static void test_if(void) +{ + /* Original test case for the bug. */ + o.x = 0; + o.y = 44; + if (o.x) { + printf("Bad, o.x is false\n"); + failures++; + } else { + printf("Good\n"); + } + + /* Additionally, test most fields from bitfield.c to try to cover all start/end situations. */ + /* four_bits */ + fb.x = 1; + if (fb.x) { + printf("Good\n"); + } else { + printf("Bad, fb.x is true (1)\n"); + failures++; + } + + fb.x = 0; + if (fb.x) { + printf("Bad, fb.x is false\n"); + failures++; + } else { + printf("Good\n"); + } + + /* overlap */ + o.x = 123; + if (o.x) { + printf("Good\n"); + } else { + printf("Bad, o.x is true (123)\n"); + failures++; + } + + o.x = 0; + if (o.x) { + printf("Bad, o.x is false\n"); + failures++; + } else { + printf("Good\n"); + } + + o.y = 321; + if (o.y) { + printf("Good\n"); + } else { + printf("Bad, o.y is true (321)\n"); + failures++; + } + + o.y = 0; + if (o.y) { + printf("Bad, o.y is false\n"); + failures++; + } else { + printf("Good\n"); + } + + /* full_width */ + fw.x = 117; + if (fw.x) { + printf("Good\n"); + } else { + printf("Bad, fw.x is true (117)\n"); + failures++; + } + + fw.x = 0; + if (fw.x) { + printf("Bad, fw.x is false\n"); + failures++; + } else { + printf("Good\n"); + } + + fw.y = 32123; + if (fw.y) { + printf("Good\n"); + } else { + printf("Bad, fw.y is true (32123)\n"); + failures++; + } + + fw.y = 0; + if (fw.y) { + printf("Bad, fw.y is false\n"); + failures++; + } else { + printf("Good\n"); + } + + /* aligned_end */ + ae.x = 2; + if (ae.x) { + printf("Good\n"); + } else { + printf("Bad, ae.x is true (2)\n"); + failures++; + } + + ae.x = 0; + if (ae.x) { + printf("Bad, ae.x is false\n"); + failures++; + } else { + printf("Good\n"); + } + + ae.y = 2222; + if (ae.y) { + printf("Good\n"); + } else { + printf("Bad, ae.y is true (2222)\n"); + failures++; + } + + ae.y = 0; + if (ae.y) { + printf("Bad, ae.y is false\n"); + failures++; + } else { + printf("Good\n"); + } + + ae.z = 111; + if (ae.z) { + printf("Good\n"); + } else { + printf("Bad, ae.z is true (111)\n"); + failures++; + } + + ae.z = 0; + if (ae.z) { + printf("Bad, ae.z is false\n"); + failures++; + } else { + printf("Good\n"); + } +} + +/* Test using bit-fields in inverted if conditions. */ +static void test_if_not(void) +{ + /* Original test case for the bug, inverted. */ + o.x = 0; + o.y = 44; + if (!o.x) { + printf("Good\n"); + } else { + printf("Bad, o.x is false\n"); + failures++; + } + + /* Additionally, test most fields from bitfield.c to try to cover all start/end situations. */ + /* four_bits */ + fb.x = 1; + if (!fb.x) { + printf("Bad, fb.x is true (1)\n"); + failures++; + } else { + printf("Good\n"); + } + + fb.x = 0; + if (!fb.x) { + printf("Good\n"); + } else { + printf("Bad, fb.x is false\n"); + failures++; + } + + /* overlap */ + o.x = 123; + if (!o.x) { + printf("Bad, o.x is true (123)\n"); + failures++; + } else { + printf("Good\n"); + } + + o.x = 0; + if (!o.x) { + printf("Good\n"); + } else { + printf("Bad, o.x is false\n"); + failures++; + } + + o.y = 321; + if (!o.y) { + printf("Bad, o.y is true (321)\n"); + failures++; + } else { + printf("Good\n"); + } + + o.y = 0; + if (!o.y) { + printf("Good\n"); + } else { + printf("Bad, o.y is false\n"); + failures++; + } + + /* full_width */ + fw.x = 117; + if (!fw.x) { + printf("Bad, fw.x is true (117)\n"); + failures++; + } else { + printf("Good\n"); + } + + fw.x = 0; + if (!fw.x) { + printf("Good\n"); + } else { + printf("Bad, fw.x is false\n"); + failures++; + } + + fw.y = 32123; + if (!fw.y) { + printf("Bad, fw.y is true (32123)\n"); + failures++; + } else { + printf("Good\n"); + } + + fw.y = 0; + if (!fw.y) { + printf("Good\n"); + } else { + printf("Bad, fw.y is false\n"); + failures++; + } + + /* aligned_end */ + ae.x = 2; + if (!ae.x) { + printf("Bad, ae.x is true (2)\n"); + failures++; + } else { + printf("Good\n"); + } + + ae.x = 0; + if (!ae.x) { + printf("Good\n"); + } else { + printf("Bad, ae.x is false\n"); + failures++; + } + + ae.y = 2222; + if (!ae.y) { + printf("Bad, ae.y is true (2222)\n"); + failures++; + } else { + printf("Good\n"); + } + + ae.y = 0; + if (!ae.y) { + printf("Good\n"); + } else { + printf("Bad, ae.y is false\n"); + failures++; + } + + ae.z = 111; + if (!ae.z) { + printf("Bad, ae.z is true (111)\n"); + failures++; + } else { + printf("Good\n"); + } + + ae.z = 0; + if (!ae.z) { + printf("Good\n"); + } else { + printf("Bad, ae.z is false\n"); + failures++; + } +} + +int main(void) +{ + test_if(); + test_if_not(); + printf("failures: %u\n", failures); + return failures; +} From 9c70bd44a6fecf99aefe888f95e0645b82324b24 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Fri, 31 Jul 2020 16:52:22 +0200 Subject: [PATCH 0318/2710] Clarify comment about large shift This is to avoid overflow on host platform. --- src/cc65/loadexpr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index 394e0a562..15be997df 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -221,7 +221,7 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) ** the result of that. */ - /* Avoid overly large shift. */ + /* Avoid overly large shift on host platform. */ if (EndBit == sizeof (unsigned long) * CHAR_BIT) { g_and (F, (~0UL << Expr->BitOffs)); } else { From e1043fac12151cdec415e76d78e23114d8f0b070 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 1 Aug 2020 10:55:49 +0200 Subject: [PATCH 0319/2710] Adjusted to https://github.com/cc65/cc65/pull/1124. --- src/cc65.vcxproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cc65.vcxproj b/src/cc65.vcxproj index a56ecf880..d566c8bc1 100644 --- a/src/cc65.vcxproj +++ b/src/cc65.vcxproj @@ -135,6 +135,7 @@ <ClInclude Include="cc65\shiftexpr.h" /> <ClInclude Include="cc65\stackptr.h" /> <ClInclude Include="cc65\standard.h" /> + <ClInclude Include="cc65\staticassert.h" /> <ClInclude Include="cc65\stdfunc.h" /> <ClInclude Include="cc65\stdnames.h" /> <ClInclude Include="cc65\stmt.h" /> @@ -209,6 +210,7 @@ <ClCompile Include="cc65\shiftexpr.c" /> <ClCompile Include="cc65\stackptr.c" /> <ClCompile Include="cc65\standard.c" /> + <ClCompile Include="cc65\staticassert.c" /> <ClCompile Include="cc65\stdfunc.c" /> <ClCompile Include="cc65\stdnames.c" /> <ClCompile Include="cc65\stmt.c" /> From 633cd17a3e8df1f20fd918a1529b61049efa0594 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sat, 1 Aug 2020 22:30:36 +0200 Subject: [PATCH 0320/2710] Add enum size test case for #1050 --- test/val/bug1050.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 test/val/bug1050.c diff --git a/test/val/bug1050.c b/test/val/bug1050.c new file mode 100644 index 000000000..af9e4f6b2 --- /dev/null +++ b/test/val/bug1050.c @@ -0,0 +1,32 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests enum sizes; see https://github.com/cc65/cc65/issues/1050 +*/ + +enum e { k }; +_Static_assert(sizeof(enum e) == 1, "This should fit in a byte."); +_Static_assert(sizeof(k) == 2, "Enumerators are still ints."); + +int main (void) +{ + return 0; +} From e526cbbff6c2588287dad7af94b3f2326300fd58 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 1 Aug 2020 22:08:19 +0800 Subject: [PATCH 0321/2710] Fixed handling multiple storage specifiers in one declaration. --- src/cc65/declare.c | 89 +++++++++++++++++++++++++++++----------------- 1 file changed, 57 insertions(+), 32 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index ada3ddaae..a525e1f86 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -410,6 +410,48 @@ static void FixQualifiers (Type* DataType) +static unsigned ParseOneStorageClass (void) +/* Parse and return a storage class */ +{ + unsigned StorageClass = 0; + + /* Check the storage class given */ + switch (CurTok.Tok) { + + case TOK_EXTERN: + StorageClass = SC_EXTERN | SC_STATIC; + NextToken (); + break; + + case TOK_STATIC: + StorageClass = SC_STATIC; + NextToken (); + break; + + case TOK_REGISTER: + StorageClass = SC_REGISTER | SC_STATIC; + NextToken (); + break; + + case TOK_AUTO: + StorageClass = SC_AUTO; + NextToken (); + break; + + case TOK_TYPEDEF: + StorageClass = SC_TYPEDEF; + NextToken (); + break; + + default: + break; + } + + return StorageClass; +} + + + static void ParseStorageClass (DeclSpec* D, unsigned DefStorage) /* Parse a storage class */ { @@ -417,38 +459,21 @@ static void ParseStorageClass (DeclSpec* D, unsigned DefStorage) D->Flags &= ~DS_DEF_STORAGE; /* Check the storage class given */ - switch (CurTok.Tok) { - - case TOK_EXTERN: - D->StorageClass = SC_EXTERN | SC_STATIC; - NextToken (); - break; - - case TOK_STATIC: - D->StorageClass = SC_STATIC; - NextToken (); - break; - - case TOK_REGISTER: - D->StorageClass = SC_REGISTER | SC_STATIC; - NextToken (); - break; - - case TOK_AUTO: - D->StorageClass = SC_AUTO; - NextToken (); - break; - - case TOK_TYPEDEF: - D->StorageClass = SC_TYPEDEF; - NextToken (); - break; - - default: - /* No storage class given, use default */ - D->Flags |= DS_DEF_STORAGE; - D->StorageClass = DefStorage; - break; + D->StorageClass = ParseOneStorageClass (); + if (D->StorageClass == 0) { + /* No storage class given, use default */ + D->Flags |= DS_DEF_STORAGE; + D->StorageClass = DefStorage; + } else { + unsigned StorageClass = ParseOneStorageClass (); + while (StorageClass != 0) { + if (D->StorageClass == StorageClass) { + Warning ("Duplicate storage class specifier"); + } else { + Error ("Conflicting storage class specifier"); + } + StorageClass = ParseOneStorageClass (); + } } } From 30fd8592ae6332b9b4eaa64abd87c11d81f2d586 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 1 Aug 2020 22:06:14 +0800 Subject: [PATCH 0322/2710] Avoid internal errors when using function-type objects in expressions. --- src/cc65/datatype.c | 19 ++++++++++++++++++- src/cc65/datatype.h | 3 +++ src/cc65/expr.c | 6 +++--- src/cc65/function.c | 2 +- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 1e2859ba7..18dd0a6b1 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -732,7 +732,8 @@ unsigned TypeOf (const Type* T) return CF_FLOAT; case T_FUNC: - return (((FuncDesc*) T->A.P)->Flags & FD_VARIADIC)? 0 : CF_FIXARGC; + /* Treat this as a function pointer */ + return CF_INT | CF_UNSIGNED; case T_STRUCT: case T_UNION: @@ -751,6 +752,22 @@ unsigned TypeOf (const Type* T) +unsigned FuncTypeOf (const Type* T) +/* Get the code generator flag for calling the function */ +{ + switch (GetUnderlyingTypeCode (T)) { + + case T_FUNC: + return (((FuncDesc*) T->A.P)->Flags & FD_VARIADIC) ? 0 : CF_FIXARGC; + + default: + Error ("Illegal function type %04lX", T->C); + return 0; + } +} + + + Type* Indirect (Type* T) /* Do one indirection for the given type, that is, return the type where the ** given type points to. diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 1997b5c89..33c66d65d 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -323,6 +323,9 @@ unsigned CheckedPSizeOf (const Type* T); unsigned TypeOf (const Type* T); /* Get the code generator base type of the object */ +unsigned FuncTypeOf (const Type* T); +/* Get the code generator flag for calling the function */ + Type* Indirect (Type* T); /* Do one indirection for the given type, that is, return the type where the ** given type points to. diff --git a/src/cc65/expr.c b/src/cc65/expr.c index fd8a48002..1d123ce9b 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -585,7 +585,7 @@ static void FunctionCall (ExprDesc* Expr) } /* Call the function */ - g_callind (TypeOf (Expr->Type+1), ParamSize, PtrOffs); + g_callind (FuncTypeOf (Expr->Type+1), ParamSize, PtrOffs); } else { @@ -646,9 +646,9 @@ static void FunctionCall (ExprDesc* Expr) SB_Done (&S); - g_call (TypeOf (Expr->Type), Func->WrappedCall->Name, ParamSize); + g_call (FuncTypeOf (Expr->Type), Func->WrappedCall->Name, ParamSize); } else { - g_call (TypeOf (Expr->Type), (const char*) Expr->Name, ParamSize); + g_call (FuncTypeOf (Expr->Type), (const char*) Expr->Name, ParamSize); } } diff --git a/src/cc65/function.c b/src/cc65/function.c index d6e11fea3..e6a974f98 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -487,7 +487,7 @@ void NewFunc (SymEntry* Func) } /* Generate function entry code if needed */ - g_enter (TypeOf (Func->Type), F_GetParamSize (CurrentFunc)); + g_enter (FuncTypeOf (Func->Type), F_GetParamSize (CurrentFunc)); /* If stack checking code is requested, emit a call to the helper routine */ if (IS_Get (&CheckStack)) { From 2a555d198cd4bf5ac916dc77ad1c095077627551 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 2 Aug 2020 13:24:46 +0800 Subject: [PATCH 0323/2710] Changed 'switch' to 'if' according PR review comments. --- src/cc65/datatype.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 18dd0a6b1..444902e60 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -755,14 +755,11 @@ unsigned TypeOf (const Type* T) unsigned FuncTypeOf (const Type* T) /* Get the code generator flag for calling the function */ { - switch (GetUnderlyingTypeCode (T)) { - - case T_FUNC: - return (((FuncDesc*) T->A.P)->Flags & FD_VARIADIC) ? 0 : CF_FIXARGC; - - default: - Error ("Illegal function type %04lX", T->C); - return 0; + if (GetUnderlyingTypeCode (T) == T_FUNC) { + return (((FuncDesc*) T->A.P)->Flags & FD_VARIADIC) ? 0 : CF_FIXARGC; + } else { + Error ("Illegal function type %04lX", T->C); + return 0; } } From adda28f5c5ce8de5a7a778723361b36545dcf92e Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sun, 2 Aug 2020 09:03:21 +0200 Subject: [PATCH 0324/2710] LoadExpr: Set CF_FORCECHAR if test is required If we are testing, we do not need to load the high byte(s). --- src/cc65/loadexpr.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index 15be997df..1a6e43779 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -127,12 +127,19 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) Flags |= TypeOf (Expr->Type); } - /* Setting CF_TEST will cause the load to perform optimizations and not actually load all - ** bits of the bit-field, instead just computing the condition codes. Therefore, if - ** adjustment is required, we do not set CF_TEST here, but handle it below. - */ - if (ED_NeedsTest (Expr) && !AdjustBitField) { - Flags |= CF_TEST; + if (ED_NeedsTest (Expr)) { + /* If we're only testing, we do not need to promote char to int. + ** CF_FORCECHAR does nothing if the type is not CF_CHAR. + */ + Flags |= CF_FORCECHAR; + + /* Setting CF_TEST will cause the load to perform optimizations and not actually load + ** all bits of the bit-field, instead just computing the condition codes. Therefore, + ** if adjustment is required, we do not set CF_TEST here, but handle it below. + */ + if (!AdjustBitField) { + Flags |= CF_TEST; + } } /* Load the content of Expr */ @@ -206,7 +213,6 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) if (AdjustBitField) { /* If the field was loaded as a char, force the shift/mask ops to be char ops. ** If it is a char, the load has already put 0 in the upper byte, so that can remain. - ** CF_FORCECHAR does nothing if the type is not CF_CHAR. */ unsigned F = Flags | CF_FORCECHAR | CF_CONST; From ce19d7b84f6ad8780135d374d63377f30214bdf3 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 2 Aug 2020 15:50:17 +0200 Subject: [PATCH 0325/2710] Made use of Travis CI's Windows support. At least for now there seems to be no point in trying to build the libraries (and run the tests) on Windows. Rather we only want to check that the MSVC solution is still valid. --- .travis.yml | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/.travis.yml b/.travis.yml index 630466cc0..efeca96b4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,16 +1,24 @@ -language: - - c -install: - - sudo apt-get update - - sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass -script: - - make bin USER_CFLAGS=-Werror - - make lib QUIET=1 - - make test QUIET=1 - - make samples - - make -C src clean - - make bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- - - make -C samples clean - - make doc zip -after_success: - - make -f Makefile.travis +language: c + +jobs: + include: + + - os: linux + install: + - sudo apt-get update + - sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass + script: + - make bin USER_CFLAGS=-Werror + - make lib QUIET=1 + - make test QUIET=1 + - make samples + - make -C src clean + - make bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- + - make -C samples clean + - make doc zip + after_success: + - make -f Makefile.travis + + - os: windows + script: + - MSBuild.exe scr/cc65.sln From 992596c981a3027b1d9320b854ea1fd5fb523b53 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 2 Aug 2020 17:32:36 +0200 Subject: [PATCH 0326/2710] Initialize MSVC 2017 environment before build. --- .travis.yml | 4 +++- src/msbuild.cmd | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 src/msbuild.cmd diff --git a/.travis.yml b/.travis.yml index efeca96b4..4096d783a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ jobs: include: - os: linux + name: Linux install: - sudo apt-get update - sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass @@ -20,5 +21,6 @@ jobs: - make -f Makefile.travis - os: windows + name: Windows script: - - MSBuild.exe scr/cc65.sln + - src/msbuild.cmd scr/cc65.sln diff --git a/src/msbuild.cmd b/src/msbuild.cmd new file mode 100644 index 000000000..129817d6a --- /dev/null +++ b/src/msbuild.cmd @@ -0,0 +1,2 @@ +call "%VS140COMNTOOLS%vsvars32.bat" +msbuild.exe %* From 35d6a75b37d021a2084edfb96c2bbd3dd9791d84 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 2 Aug 2020 17:49:18 +0200 Subject: [PATCH 0327/2710] Fixed Windows path notation. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4096d783a..0b25e5d16 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,4 +23,4 @@ jobs: - os: windows name: Windows script: - - src/msbuild.cmd scr/cc65.sln + - src/msbuild.cmd src\\cc65.sln From c831f40e9b1c2bcc3d1fdb5c5dfff5d51524447a Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 2 Aug 2020 18:44:13 +0200 Subject: [PATCH 0328/2710] Unfortunately there's no other way than using the absolute path to init the correct MSVC 2017 environment. --- src/msbuild.cmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/msbuild.cmd b/src/msbuild.cmd index 129817d6a..5736846da 100644 --- a/src/msbuild.cmd +++ b/src/msbuild.cmd @@ -1,2 +1,2 @@ -call "%VS140COMNTOOLS%vsvars32.bat" +call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\Tools\VsDevCmd.bat" msbuild.exe %* From 0df45fe2f2db73eb0e09985381462bb4f91d7566 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 2 Aug 2020 21:08:50 +0800 Subject: [PATCH 0329/2710] Utility for getting ESU tag type symbols. --- src/cc65/datatype.c | 8 ++++---- src/cc65/datatype.h | 8 ++++---- src/cc65/declare.c | 11 ++++++----- src/cc65/symentry.c | 32 ++++++++++++++++++++++++++++++++ src/cc65/symentry.h | 10 ++++++++++ src/cc65/symtab.c | 2 +- src/cc65/typecmp.c | 4 ++-- 7 files changed, 59 insertions(+), 16 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 444902e60..5ac2ec4b4 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -895,8 +895,8 @@ Type* GetBaseElementType (Type* T) -SymEntry* GetSymEntry (const Type* T) -/* Return a SymEntry pointer from a type */ +SymEntry* GetESUSymEntry (const Type* T) +/* Return a SymEntry pointer from an enum/struct/union type */ { /* Only enums, structs or unions have a SymEntry attribute */ CHECK (IsClassStruct (T) || IsTypeEnum (T)); @@ -907,8 +907,8 @@ SymEntry* GetSymEntry (const Type* T) -void SetSymEntry (Type* T, SymEntry* S) -/* Set the SymEntry pointer for a type */ +void SetESUSymEntry (Type* T, SymEntry* S) +/* Set the SymEntry pointer for an enum/struct/union type */ { /* Only enums, structs or unions have a SymEntry attribute */ CHECK (IsClassStruct (T) || IsTypeEnum (T)); diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 33c66d65d..4839be5d2 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -747,11 +747,11 @@ Type* GetBaseElementType (Type* T); ** the element type that is not an array. */ -struct SymEntry* GetSymEntry (const Type* T) attribute ((const)); -/* Return a SymEntry pointer from a type */ +struct SymEntry* GetESUSymEntry (const Type* T) attribute ((const)); +/* Return a SymEntry pointer from an enum/struct/union type */ -void SetSymEntry (Type* T, struct SymEntry* S); -/* Set the SymEntry pointer for a type */ +void SetESUSymEntry (Type* T, struct SymEntry* S); +/* Set the SymEntry pointer for an enum/struct/union type */ Type* IntPromotion (Type* T); /* Apply the integer promotions to T and return the result. The returned type diff --git a/src/cc65/declare.c b/src/cc65/declare.c index a525e1f86..5ecfeb04f 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -766,6 +766,7 @@ static unsigned PadWithBitField (unsigned StructSize, unsigned BitOffs) } + static unsigned AliasAnonStructFields (const Declaration* Decl, SymEntry* Anon) /* Create alias fields from an anon union/struct in the current lexical level. ** The function returns the count of created aliases. @@ -775,7 +776,7 @@ static unsigned AliasAnonStructFields (const Declaration* Decl, SymEntry* Anon) SymEntry* Alias; /* Get the pointer to the symbol table entry of the anon struct */ - SymEntry* Entry = GetSymEntry (Decl->Type); + SymEntry* Entry = GetESUSymEntry (Decl->Type); /* Get the symbol table containing the fields. If it is empty, there has ** been an error before, so bail out. @@ -1267,7 +1268,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers) Entry = ParseUnionDecl (Ident); /* Encode the union entry into the type */ D->Type[0].C = T_UNION; - SetSymEntry (D->Type, Entry); + SetESUSymEntry (D->Type, Entry); D->Type[1].C = T_END; break; @@ -1286,7 +1287,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers) Entry = ParseStructDecl (Ident); /* Encode the struct entry into the type */ D->Type[0].C = T_STRUCT; - SetSymEntry (D->Type, Entry); + SetESUSymEntry (D->Type, Entry); D->Type[1].C = T_END; break; @@ -1308,7 +1309,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers) /* Parse the enum decl */ Entry = ParseEnumDecl (Ident); D->Type[0].C |= T_ENUM; - SetSymEntry (D->Type, Entry); + SetESUSymEntry (D->Type, Entry); D->Type[1].C = T_END; break; @@ -2258,7 +2259,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) } /* Get a pointer to the struct entry from the type */ - Entry = GetSymEntry (T); + Entry = GetESUSymEntry (T); /* Get the size of the struct from the symbol table entry */ SI.Size = Entry->V.S.Size; diff --git a/src/cc65/symentry.c b/src/cc65/symentry.c index c8d4f9e2a..6486ab764 100644 --- a/src/cc65/symentry.c +++ b/src/cc65/symentry.c @@ -278,6 +278,38 @@ void CvtRegVarToAuto (SymEntry* Sym) +SymEntry* GetSymType (const Type* T) +/* Get the symbol entry of the enum/struct/union type +** Return 0 if it is not an enum/struct/union. +*/ +{ + if ((IsClassStruct (T) || IsTypeEnum (T))) { + return T->A.P; + } + return 0; +} + + + +const char* GetSymTypeName (const Type* T) +/* Return a name string of the type or the symbol name if it is an ESU type. +** Note: This may use a static buffer that could be overwritten by other calls. +*/ +{ + static char TypeName [IDENTSIZE + 16]; + SymEntry* Sym; + + Sym = GetSymType (T); + if (Sym == 0) { + return GetBasicTypeName (T); + } + sprintf (TypeName, "%s %s", GetBasicTypeName (T), Sym->Name ? Sym->Name : "<unknown>"); + + return TypeName; +} + + + void ChangeSymType (SymEntry* Entry, Type* T) /* Change the type of the given symbol */ { diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index e59bf2a35..1d8af3f50 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -304,6 +304,16 @@ void SymSetAsmName (SymEntry* Sym); void CvtRegVarToAuto (SymEntry* Sym); /* Convert a register variable to an auto variable */ +SymEntry* GetSymType (const Type* T); +/* Get the symbol entry of the enum/struct/union type +** Return 0 if it is not an enum/struct/union. +*/ + +const char* GetSymTypeName (const Type* T); +/* Return a name string of the type or the symbol name if it is an ESU type. +** Note: This may use a static buffer that could be overwritten by other calls. +*/ + void ChangeSymType (SymEntry* Entry, Type* T); /* Change the type of the given symbol */ diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index f7a7862cf..735cb854f 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -509,7 +509,7 @@ SymEntry FindStructField (const Type* T, const char* Name) if (IsClassStruct (T)) { /* Get a pointer to the struct/union type */ - const SymEntry* Struct = GetSymEntry (T); + const SymEntry* Struct = GetESUSymEntry (T); CHECK (Struct != 0); /* Now search in the struct/union symbol table. Beware: The table may diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index 66dd9039b..0eddf2988 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -368,8 +368,8 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) ** pointer to the struct definition from the type, and compare ** the fields. */ - Sym1 = GetSymEntry (lhs); - Sym2 = GetSymEntry (rhs); + Sym1 = GetESUSymEntry (lhs); + Sym2 = GetESUSymEntry (rhs); /* If one symbol has a name, the names must be identical */ if (!HasAnonName (Sym1) || !HasAnonName (Sym2)) { From 4ccf10f3fa43f28555168b9b7730deb73a7aaa6a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 2 Aug 2020 21:51:26 +0800 Subject: [PATCH 0330/2710] Utility to get full type names. --- src/cc65/datatype.c | 233 ++++++++++++++++++++++++++++++++++++++++++++ src/cc65/datatype.h | 16 +++ 2 files changed, 249 insertions(+) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 5ac2ec4b4..2c2167188 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -78,6 +78,144 @@ Type type_double[] = { TYPE(T_DOUBLE), TYPE(T_END) }; +static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBuf* East, const Type* T) +/* Return the name string of the given type split into a western part and an +** eastern part. +*/ +{ + struct StrBuf Buf = STATIC_STRBUF_INITIALIZER; + + if (IsTypeArray (T)) { + + long Count = GetElementCount (T); + if (!SB_IsEmpty (East)) { + if (Count > 0) { + SB_Printf (&Buf, "[%ld]", Count); + } else { + SB_Printf (&Buf, "[]"); + } + SB_Append (East, &Buf); + SB_Terminate (East); + + } else { + if (Count > 0) { + SB_Printf (East, "[%ld]", Count); + } else { + SB_Printf (East, "[]"); + } + + if (!SB_IsEmpty (West)) { + /* Add parentheses to West */ + SB_Printf (&Buf, "(%s)", SB_GetConstBuf (West)); + SB_Copy (West, &Buf); + SB_Terminate (West); + } + } + + /* Get element type */ + GetFullTypeNameWestEast (West, East, T + 1); + + } else if (IsTypeFunc (T)) { + + FuncDesc* F = GetFuncDesc (T); + struct StrBuf ParamList = STATIC_STRBUF_INITIALIZER; + + /* First argument */ + SymEntry* Param = F->SymTab->SymHead; + for (unsigned I = 1; I < F->ParamCount; ++I) { + CHECK (Param->NextSym != 0 && (Param->Flags & SC_PARAM) != 0); + SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); + SB_AppendStr (&ParamList, ", "); + SB_Clear (&Buf); + /* Next argument */ + Param = Param->NextSym; + } + if ((F->Flags & FD_VARIADIC) == 0) { + if (F->ParamCount > 0) { + SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); + } else { + SB_AppendStr (&ParamList, "void"); + } + } else { + if (F->ParamCount > 0) { + SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); + SB_AppendStr (&ParamList, ", ..."); + } else { + SB_AppendStr (&ParamList, "..."); + } + } + SB_Terminate (&ParamList); + + /* Join the existing West and East together */ + if (!SB_IsEmpty (East)) { + SB_Append (West, East); + SB_Terminate (West); + SB_Clear (East); + } + + if (SB_IsEmpty (West)) { + /* Just use the param list */ + SB_Printf (West, "(%s)", SB_GetConstBuf (&ParamList)); + } else { + /* Append the param list to the existing West */ + SB_Printf (&Buf, "(%s)(%s)", SB_GetConstBuf (West), SB_GetConstBuf (&ParamList)); + SB_Printf (West, "%s", SB_GetConstBuf (&Buf)); + } + SB_Done (&ParamList); + + /* Return type */ + GetFullTypeNameWestEast (West, East, T + 1); + + } else if (IsTypePtr (T)) { + + int QualCount = 0; + + SB_Printf (&Buf, "*"); + + /* Add qualifiers */ + if ((GetQualifier (T) & ~T_QUAL_NEAR) != T_QUAL_NONE) { + QualCount = GetQualifierTypeCodeNameBuf (&Buf, T->C, T_QUAL_NEAR); + } + + if (!SB_IsEmpty (West)) { + if (QualCount > 0) { + SB_AppendChar (&Buf, ' '); + } + SB_Append (&Buf, West); + } + + SB_Copy (West, &Buf); + SB_Terminate (West); + + /* Get indirection type */ + GetFullTypeNameWestEast (West, East, T + 1); + + } else { + + /* Add qualifiers */ + if ((GetQualifier (T) & ~T_QUAL_NEAR) != 0) { + if (GetQualifierTypeCodeNameBuf (&Buf, T->C, T_QUAL_NEAR) > 0) { + SB_AppendChar (&Buf, ' '); + } + } + + SB_AppendStr (&Buf, GetSymTypeName (T)); + + if (!SB_IsEmpty (West)) { + SB_AppendChar (&Buf, ' '); + SB_Append (&Buf, West); + } + + SB_Copy (West, &Buf); + SB_Terminate (West); + } + + SB_Done (&Buf); + return West; +} + + + const char* GetBasicTypeName (const Type* T) /* Return a const name string of the basic type. ** Return "type" for unknown basic types. @@ -134,6 +272,101 @@ const char* GetBasicTypeName (const Type* T) +const char* GetFullTypeName (const Type* T) +/* Return the full name string of the given type. +** Note: This may use a static buffer that could be overwritten by other calls. +*/ +{ + static struct StrBuf Buf = STATIC_STRBUF_INITIALIZER; + SB_Clear (&Buf); + GetFullTypeNameBuf (&Buf, T); + + return SB_GetConstBuf (&Buf); +} + + + +struct StrBuf* GetFullTypeNameBuf (struct StrBuf* S, const Type* T) +/* Return the full name string of the given type */ +{ + struct StrBuf East = STATIC_STRBUF_INITIALIZER; + GetFullTypeNameWestEast (S, &East, T); + + /* Join West and East */ + SB_Append (S, &East); + SB_Terminate (S); + SB_Done (&East); + + return S; +} + + + +int GetQualifierTypeCodeNameBuf (struct StrBuf* S, TypeCode Qual, TypeCode IgnoredQual) +/* Return the names of the qualifiers of the type. +** Qualifiers to be ignored can be specified with the IgnoredQual flags. +** Return the count of added qualifier names. +*/ +{ + int Count = 0; + + Qual &= T_MASK_QUAL & ~IgnoredQual; + if (Qual & T_QUAL_CONST) { + if (!SB_IsEmpty (S)) { + SB_AppendChar (S, ' '); + } + SB_AppendStr (S, "const"); + ++Count; + } + if (Qual & T_QUAL_VOLATILE) { + if (Count > 0) { + SB_AppendChar (S, ' '); + } + SB_AppendStr (S, "volatile"); + ++Count; + } + if (Qual & T_QUAL_RESTRICT) { + if (Count > 0) { + SB_AppendChar (S, ' '); + } + SB_AppendStr (S, "restrict"); + ++Count; + } + if (Qual & T_QUAL_NEAR) { + if (Count > 0) { + SB_AppendChar (S, ' '); + } + SB_AppendStr (S, "__near__"); + ++Count; + } + if (Qual & T_QUAL_FAR) { + SB_AppendStr (S, "__far__"); + ++Count; + } + if (Qual & T_QUAL_FASTCALL) { + if (Count > 0) { + SB_AppendChar (S, ' '); + } + SB_AppendStr (S, "__fastcall__"); + ++Count; + } + if (Qual & T_QUAL_CDECL) { + if (Count > 0) { + SB_AppendChar (S, ' '); + } + SB_AppendStr (S, "__cdecl__"); + ++Count; + } + + if (Count > 0) { + SB_Terminate (S); + } + + return Count; +} + + + unsigned TypeLen (const Type* T) /* Return the length of the type string */ { diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 4839be5d2..8e32d6404 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -203,6 +203,8 @@ extern Type type_double[]; /* Forward for the SymEntry struct */ struct SymEntry; +/* Forward for the StrBuf struct */ +struct StrBuf; /*****************************************************************************/ @@ -216,6 +218,20 @@ const char* GetBasicTypeName (const Type* T); ** Return "type" for unknown basic types. */ +const char* GetFullTypeName (const Type* T); +/* Return the full name string of the given type. +** Note: This may use a static buffer that could be overwritten by other calls. +*/ + +struct StrBuf* GetFullTypeNameBuf (struct StrBuf* S, const Type* T); +/* Return the full name string of the given type */ + +int GetQualifierTypeCodeNameBuf (struct StrBuf* S, TypeCode Qual, TypeCode IgnoredQual); +/* Return the names of the qualifiers of the type. +** Qualifiers to be ignored can be specified with the IgnoredQual flags. +** Return the count of added qualifier names. +*/ + unsigned TypeLen (const Type* T); /* Return the length of the type string */ From 52051f444e6b1bfff20d5dd8967cd1f3effad610 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 2 Aug 2020 21:51:32 +0800 Subject: [PATCH 0331/2710] Using tracked individual string buffers instead of a shared static string buffer for full type names. --- src/cc65/datatype.c | 11 ++++------ src/cc65/datatype.h | 4 +--- src/cc65/error.c | 51 +++++++++++++++++++++++++++++++++++++++++++++ src/cc65/error.h | 15 +++++++++++++ src/cc65/main.c | 6 ++++++ 5 files changed, 77 insertions(+), 10 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 2c2167188..d1c34c825 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -273,15 +273,12 @@ const char* GetBasicTypeName (const Type* T) const char* GetFullTypeName (const Type* T) -/* Return the full name string of the given type. -** Note: This may use a static buffer that could be overwritten by other calls. -*/ +/* Return the full name string of the given type */ { - static struct StrBuf Buf = STATIC_STRBUF_INITIALIZER; - SB_Clear (&Buf); - GetFullTypeNameBuf (&Buf, T); + struct StrBuf* Buf = NewDiagnosticStrBuf (); + GetFullTypeNameBuf (Buf, T); - return SB_GetConstBuf (&Buf); + return SB_GetConstBuf (Buf); } diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 8e32d6404..ad382d50f 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -219,9 +219,7 @@ const char* GetBasicTypeName (const Type* T); */ const char* GetFullTypeName (const Type* T); -/* Return the full name string of the given type. -** Note: This may use a static buffer that could be overwritten by other calls. -*/ +/* Return the full name string of the given type */ struct StrBuf* GetFullTypeNameBuf (struct StrBuf* S, const Type* T); /* Return the full name string of the given type */ diff --git a/src/cc65/error.c b/src/cc65/error.c index c3ebebf77..10d20a34b 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -38,7 +38,9 @@ #include <stdarg.h> /* common */ +#include "coll.h" #include "print.h" +#include "strbuf.h" /* cc65 */ #include "global.h" @@ -92,6 +94,8 @@ static WarnMapEntry WarnMap[] = { { &WarnUnusedVar, "unused-var" }, }; +Collection DiagnosticStrBufs; + /*****************************************************************************/ @@ -323,3 +327,50 @@ void ErrorReport (void) { Print (stdout, 1, "%u errors, %u warnings\n", ErrorCount, WarningCount); } + + + +/*****************************************************************************/ +/* Tracked StrBufs */ +/*****************************************************************************/ + + + +void InitDiagnosticStrBufs (void) +/* Init tracking string buffers used for diagnostics */ +{ + InitCollection (&DiagnosticStrBufs); +} + + + +void DoneDiagnosticStrBufs (void) +/* Done with tracked string buffers used for diagnostics */ +{ + ClearDiagnosticStrBufs (); + DoneCollection (&DiagnosticStrBufs); +} + + + +void ClearDiagnosticStrBufs (void) +/* Free all tracked string buffers */ +{ + unsigned I; + + for (I = 0; I < CollCount (&DiagnosticStrBufs); ++I) { + SB_Done (CollAtUnchecked (&DiagnosticStrBufs, I)); + } + + CollDeleteAll (&DiagnosticStrBufs); +} + + + +struct StrBuf* NewDiagnosticStrBuf (void) +/* Get a new tracked string buffer */ +{ + StrBuf *Buf = NewStrBuf (); + CollAppend (&DiagnosticStrBufs, Buf); + return Buf; +} diff --git a/src/cc65/error.h b/src/cc65/error.h index 97ee09591..a443aeff8 100644 --- a/src/cc65/error.h +++ b/src/cc65/error.h @@ -72,6 +72,9 @@ extern IntStack WarnUnusedLabel; /* - unused labels */ extern IntStack WarnUnusedParam; /* - unused parameters */ extern IntStack WarnUnusedVar; /* - unused variables */ +/* Forward */ +struct StrBuf; + /*****************************************************************************/ @@ -115,6 +118,18 @@ void ListWarnings (FILE* F); void ErrorReport (void); /* Report errors (called at end of compile) */ +void InitDiagnosticStrBufs (void); +/* Init tracking string buffers used for diagnostics */ + +void DoneDiagnosticStrBufs (void); +/* Done with tracked string buffers used for diagnostics */ + +void ClearDiagnosticStrBufs (void); +/* Free all tracked string buffers */ + +struct StrBuf* NewDiagnosticStrBuf (void); +/* Get a new tracked string buffer */ + /* End of error.h */ diff --git a/src/cc65/main.c b/src/cc65/main.c index e86ae13ba..ed2e9d7ba 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -1060,6 +1060,9 @@ int main (int argc, char* argv[]) IS_Set (&Standard, STD_DEFAULT); } + /* Track string buffer allocation */ + InitDiagnosticStrBufs (); + /* Go! */ Compile (InputFile); @@ -1083,6 +1086,9 @@ int main (int argc, char* argv[]) CreateDependencies (); } + /* Done with tracked string buffer allocation */ + DoneDiagnosticStrBufs (); + /* Return an apropriate exit code */ return (ErrorCount > 0)? EXIT_FAILURE : EXIT_SUCCESS; } From d841bbe49825f604d0d52365675d2332ed76fae7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 2 Aug 2020 21:51:32 +0800 Subject: [PATCH 0332/2710] Utility to check for castability. --- src/cc65/datatype.c | 16 ++++++++++++++++ src/cc65/datatype.h | 6 ++++++ 2 files changed, 22 insertions(+) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index d1c34c825..cffec7880 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1018,6 +1018,22 @@ Type* ArrayToPtr (Type* T) +int IsClassArithmetic (const Type* T) +/* Return true if this is an arithmetic type */ +{ + return IsClassInt (T) || IsClassFloat (T); +} + + + +int IsCastType (const Type* T) +/* Return true if this type can be used for casting */ +{ + return IsClassArithmetic (T) || IsClassPtr (T) || IsTypeVoid (T); +} + + + int IsVariadicFunc (const Type* T) /* Return true if this is a function type or pointer to function type with ** variable parameter list diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index ad382d50f..66f1b8b05 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -578,6 +578,12 @@ INLINE int IsClassFunc (const Type* T) # define IsClassFunc(T) (GetClass (T) == T_CLASS_FUNC) #endif +int IsClassArithmetic (const Type* T); +/* Return true if this is an arithmetic type */ + +int IsCastType (const Type* T); +/* Return true if this type can be used for casting */ + #if defined(HAVE_INLINE) INLINE TypeCode GetRawSignedness (const Type* T) /* Get the raw signedness of a type */ From 003d47cc8b661cfb8dcfd89ae02eb7e7022e0196 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 2 Aug 2020 21:51:32 +0800 Subject: [PATCH 0333/2710] Improved type conversion diagnostic messages. Allowed incompatible pointer assignments with warnings. Fixed Issue #1089. --- src/cc65/assignment.c | 3 +- src/cc65/expr.c | 12 ++++-- src/cc65/typeconv.c | 96 +++++++++++++++++++++++++++++++------------ src/cc65/typeconv.h | 3 ++ 4 files changed, 82 insertions(+), 32 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index ed374ef8a..c67ac1ce5 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -78,7 +78,8 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) /* Check for equality of the structs */ if (TypeCmp (ltype, RExpr->Type) < TC_STRICT_COMPATIBLE) { - Error ("Incompatible types"); + TypeCompatibilityDiagnostic (ltype, RExpr->Type, 1, + "Incompatible types in assignment to '%s' from '%s'"); } /* Do we copy using the primary? */ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 1d123ce9b..a99f17b55 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2242,7 +2242,8 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ /* Make sure, the types are compatible */ if (IsClassInt (Expr->Type)) { if (!IsClassInt (Expr2.Type) && !(IsClassPtr(Expr2.Type) && ED_IsNullPtr(Expr))) { - Error ("Incompatible types"); + TypeCompatibilityDiagnostic (Expr->Type, Expr2.Type, 1, + "Incompatible types comparing '%s' with '%s'"); } } else if (IsClassPtr (Expr->Type)) { if (IsClassPtr (Expr2.Type)) { @@ -2253,10 +2254,12 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ Type* right = Indirect (Expr2.Type); if (TypeCmp (left, right) < TC_QUAL_DIFF && left->C != T_VOID && right->C != T_VOID) { /* Incompatible pointers */ - Error ("Incompatible types"); + TypeCompatibilityDiagnostic (Expr->Type, Expr2.Type, 1, + "Incompatible pointer types comparing '%s' with '%s'"); } } else if (!ED_IsNullPtr (&Expr2)) { - Error ("Incompatible types"); + TypeCompatibilityDiagnostic (Expr->Type, Expr2.Type, 1, + "Comparing pointer type '%s' with '%s'"); } } @@ -3324,7 +3327,8 @@ static void hieQuest (ExprDesc* Expr) /* Result type is void */ ResultType = Expr3.Type; } else { - Error ("Incompatible types"); + TypeCompatibilityDiagnostic (Expr2.Type, Expr3.Type, 1, + "Incompatible types in ternary '%s' with '%s'"); ResultType = Expr2.Type; /* Doesn't matter here */ } diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index e915d7392..c3c1a2528 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -55,6 +55,24 @@ +void TypeCompatibilityDiagnostic (const Type* NewType, const Type* OldType, int IsError, const char* Msg) +/* Print error or warning message about type conversion with proper type names */ +{ + StrBuf NewTypeName = STATIC_STRBUF_INITIALIZER; + StrBuf OldTypeName = STATIC_STRBUF_INITIALIZER; + GetFullTypeNameBuf (&NewTypeName, NewType); + GetFullTypeNameBuf (&OldTypeName, OldType); + if (IsError) { + Error (Msg, SB_GetConstBuf (&NewTypeName), SB_GetConstBuf (&OldTypeName)); + } else { + Warning (Msg, SB_GetConstBuf (&NewTypeName), SB_GetConstBuf (&OldTypeName)); + } + SB_Done (&OldTypeName); + SB_Done (&NewTypeName); +} + + + static void DoConversion (ExprDesc* Expr, const Type* NewType) /* Emit code to convert the given expression to a new type. */ { @@ -189,6 +207,11 @@ void TypeConversion (ExprDesc* Expr, Type* NewType) printf ("\n"); PrintRawType (stdout, NewType); #endif + int HasWarning = 0; + int HasError = 0; + const char* Msg = 0; + const Type* OldType = Expr->Type; + /* First, do some type checking */ if (IsTypeVoid (NewType) || IsTypeVoid (Expr->Type)) { @@ -199,7 +222,7 @@ void TypeConversion (ExprDesc* Expr, Type* NewType) } /* If Expr is a function, convert it to pointer to function */ - if (IsTypeFunc(Expr->Type)) { + if (IsTypeFunc (Expr->Type)) { Expr->Type = PointerTo (Expr->Type); } @@ -220,15 +243,12 @@ void TypeConversion (ExprDesc* Expr, Type* NewType) } Warning ("Converting pointer to integer without a cast"); } else if (!IsClassInt (Expr->Type) && !IsClassFloat (Expr->Type)) { - Error ("Incompatible types"); + HasError = 1; } - } else if (IsClassFloat (NewType)) { - if (!IsClassFloat (Expr->Type) && !IsClassInt (Expr->Type)) { - Error ("Incompatible types"); + HasError = 1; } - } else if (IsClassPtr (NewType)) { /* Handle conversions to pointer type */ @@ -248,17 +268,19 @@ void TypeConversion (ExprDesc* Expr, Type* NewType) /* Compare the types */ switch (TypeCmp (NewType, Expr->Type)) { - case TC_INCOMPATIBLE: - Error ("Incompatible pointer types at '%s'", (Expr->Sym? Expr->Sym->Name : "Unknown")); - break; + case TC_INCOMPATIBLE: + HasWarning = 1; + Msg = "Incompatible pointer assignment to '%s' from '%s'"; + break; - case TC_QUAL_DIFF: - Error ("Pointer types differ in type qualifiers"); - break; + case TC_QUAL_DIFF: + HasWarning = 1; + Msg = "Pointer assignment to '%s' from '%s' discards qualifiers"; + break; - default: - /* Ok */ - break; + default: + /* Ok */ + break; } } @@ -268,18 +290,28 @@ void TypeConversion (ExprDesc* Expr, Type* NewType) Warning ("Converting integer to pointer without a cast"); } } else { - Error ("Incompatible types"); + HasError = 1; } } else { - - /* Invalid automatic conversion */ - Error ("Incompatible types"); - + /* Invalid automatic conversion */ + HasError = 1; } - /* Do the actual conversion */ - DoConversion (Expr, NewType); + if (Msg == 0) { + Msg = "Converting to '%s' from '%s'"; + } + + if (HasError) { + TypeCompatibilityDiagnostic (NewType, OldType, 1, Msg); + } else { + if (HasWarning) { + TypeCompatibilityDiagnostic (NewType, OldType, 0, Msg); + } + + /* Do the actual conversion */ + DoConversion (Expr, NewType); + } } @@ -301,9 +333,19 @@ void TypeCast (ExprDesc* Expr) /* Read the expression we have to cast */ hie10 (Expr); - /* Convert functions and arrays to "pointer to" object */ - Expr->Type = PtrConversion (Expr->Type); - - /* Convert the value. */ - DoConversion (Expr, NewType); + /* Only allow casts to arithmetic or pointer types, or just changing the + ** qualifiers. + */ + if (TypeCmp (NewType, Expr->Type) >= TC_QUAL_DIFF) { + /* The expression has always the new type */ + ReplaceType (Expr, NewType); + } else if (IsCastType (NewType)) { + /* Convert functions and arrays to "pointer to" object */ + Expr->Type = PtrConversion (Expr->Type); + /* Convert the value */ + DoConversion (Expr, NewType); + } else { + Error ("Arithmetic or pointer type expected but '%s' is used", + GetFullTypeName (NewType)); + } } diff --git a/src/cc65/typeconv.h b/src/cc65/typeconv.h index 8321aded4..5c94069a3 100644 --- a/src/cc65/typeconv.h +++ b/src/cc65/typeconv.h @@ -49,6 +49,9 @@ +void TypeCompatibilityDiagnostic (const Type* NewType, const Type* OldType, int IsError, const char* Msg); +/* Print error or warning message about type conversion with proper type names */ + void TypeConversion (ExprDesc* Expr, Type* NewType); /* Do an automatic conversion of the given expression to the new type. Output ** warnings or errors where this automatic conversion is suspicious or From 80b0e57543eeddd32485a015208aee160f7594f9 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 2 Aug 2020 21:51:32 +0800 Subject: [PATCH 0334/2710] Changed parameter constness of TypeConversion(). --- src/cc65/datatype.c | 14 ++++++++++++++ src/cc65/datatype.h | 5 +++++ src/cc65/typeconv.c | 4 ++-- src/cc65/typeconv.h | 2 +- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index cffec7880..005e6109b 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1009,6 +1009,20 @@ Type* Indirect (Type* T) +const Type* IndirectConst (const Type* T) +/* Do one indirection for the given type, that is, return the type where the +** given type points to. +*/ +{ + /* We are expecting a pointer expression */ + CHECK (IsClassPtr (T)); + + /* Skip the pointer or array token itself */ + return T + 1; +} + + + Type* ArrayToPtr (Type* T) /* Convert an array to a pointer to it's first element */ { diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 66f1b8b05..6cbad302f 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -345,6 +345,11 @@ Type* Indirect (Type* T); ** given type points to. */ +const Type* IndirectConst (const Type* T); +/* Do one indirection for the given type, that is, return the type where the +** given type points to. +*/ + Type* ArrayToPtr (Type* T); /* Convert an array to a pointer to it's first element */ diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index c3c1a2528..7e2787529 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -192,7 +192,7 @@ ExitPoint: -void TypeConversion (ExprDesc* Expr, Type* NewType) +void TypeConversion (ExprDesc* Expr, const Type* NewType) /* Do an automatic conversion of the given expression to the new type. Output ** warnings or errors where this automatic conversion is suspicious or ** impossible. @@ -264,7 +264,7 @@ void TypeConversion (ExprDesc* Expr, Type* NewType) ** - the rhs pointer is a void pointer, or ** - the lhs pointer is a void pointer. */ - if (!IsTypeVoid (Indirect (NewType)) && !IsTypeVoid (Indirect (Expr->Type))) { + if (!IsTypeVoid (IndirectConst (NewType)) && !IsTypeVoid (Indirect (Expr->Type))) { /* Compare the types */ switch (TypeCmp (NewType, Expr->Type)) { diff --git a/src/cc65/typeconv.h b/src/cc65/typeconv.h index 5c94069a3..0a82eac27 100644 --- a/src/cc65/typeconv.h +++ b/src/cc65/typeconv.h @@ -52,7 +52,7 @@ void TypeCompatibilityDiagnostic (const Type* NewType, const Type* OldType, int IsError, const char* Msg); /* Print error or warning message about type conversion with proper type names */ -void TypeConversion (ExprDesc* Expr, Type* NewType); +void TypeConversion (ExprDesc* Expr, const Type* NewType); /* Do an automatic conversion of the given expression to the new type. Output ** warnings or errors where this automatic conversion is suspicious or ** impossible. From 00c16d34a4ea1a7906ef716c6db5d52effdb8ef1 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:15:57 +0800 Subject: [PATCH 0335/2710] Minor fixes for HandleSymRedefinition(). --- src/cc65/symtab.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 735cb854f..2104c017b 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -549,7 +549,8 @@ SymEntry FindStructField (const Type* T, const char* Name) static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags) /* Check and handle redefinition of existing symbols. -** Return ture if there *is* an error. +** Complete array sizes and function descriptors as well. +** Return true if there *is* an error. */ { /* Get the type info of the existing symbol */ @@ -594,8 +595,8 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags */ if (IsTypeFunc (T)) { - /* New type must be identical */ - if (TypeCmp (Entry->Type, T) < TC_EQUAL) { + /* New type must be equivalent */ + if (TypeCmp (E_Type, T) < TC_EQUAL) { Error ("Conflicting function types for '%s'", Entry->Name); Entry = 0; } else { @@ -614,6 +615,7 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags Error ("Redefinition of function '%s' as different kind of symbol", Entry->Name); Entry = 0; } + } else if (E_SCType == SC_TYPEDEF) { if (SCType == SC_TYPEDEF) { @@ -622,9 +624,7 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags Error ("Conflicting types for typedef '%s'", Entry->Name); Entry = 0; } - } else { - Error ("Redefinition of typedef '%s' as different kind of symbol", Entry->Name); Entry = 0; } @@ -639,7 +639,10 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags Error ("Conflicting types for '%s'", Entry->Name); Entry = 0; } else if (E_SCType == SC_ENUMERATOR) { - /* Current code logic won't reach here, but still... */ + /* Enumerators aren't allowed to be redeclared at all, even if + ** all occurences are identical. The current code logic won't + ** get here, but let's just do it. + */ Error ("Redeclaration of enumerator constant '%s'", Entry->Name); Entry = 0; } From 44e3080ea93676e761093da37e4d16465e9c27b3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:15:57 +0800 Subject: [PATCH 0336/2710] Increased upper limit of allowed errors before aborting. --- src/cc65/error.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/error.c b/src/cc65/error.c index 10d20a34b..b0ca97c89 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -184,7 +184,7 @@ static void IntError (const char* Filename, unsigned LineNo, const char* Msg, va Print (stderr, 1, "Input: %.*s\n", (int) SB_GetLen (Line), SB_GetConstBuf (Line)); } ++ErrorCount; - if (ErrorCount > 10) { + if (ErrorCount > 20) { Fatal ("Too many errors"); } } From 99ac1c46da0e9d19c32855409200067992e7b1a4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:15:57 +0800 Subject: [PATCH 0337/2710] Made errors/warnings statistic message visible when there are errors. --- src/cc65/error.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cc65/error.c b/src/cc65/error.c index b0ca97c89..132bf331d 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -325,7 +325,8 @@ void ListWarnings (FILE* F) void ErrorReport (void) /* Report errors (called at end of compile) */ { - Print (stdout, 1, "%u errors, %u warnings\n", ErrorCount, WarningCount); + unsigned int V = (ErrorCount != 0 ? 0 : 1); + Print (stdout, V, "%u errors and %u warnings generated.\n", ErrorCount, WarningCount); } From 2ab727267385f4e51e26c682e69ab98af607a562 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:15:57 +0800 Subject: [PATCH 0338/2710] Improved warning on comparison of unsigned type < 0. --- src/cc65/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 20bfdf434..8a879745d 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -3642,7 +3642,7 @@ void g_lt (unsigned flags, unsigned long val) /* Give a warning in some special cases */ if (val == 0) { - Warning ("Condition is never true"); + Warning ("Comparison of unsigned type < 0 is always false"); AddCodeLine ("jsr return0"); return; } From ef5a4db12e547d4758151f58606d4eb5f5b59297 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:15:57 +0800 Subject: [PATCH 0339/2710] Improved warning messages on UB shifts. --- src/cc65/shiftexpr.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c index c7aea5255..9fe9d1188 100644 --- a/src/cc65/shiftexpr.c +++ b/src/cc65/shiftexpr.c @@ -139,9 +139,14 @@ void ShiftExpr (struct ExprDesc* Expr) ** the operand, the behaviour is undefined according to the ** standard. */ - if (Expr2.IVal < 0 || Expr2.IVal >= (long) ExprBits) { + if (Expr2.IVal < 0) { - Warning ("Shift count too large for operand type"); + Warning ("Shift count '%ld' is negative", Expr2.IVal); + Expr2.IVal &= ExprBits - 1; + + } else if (Expr2.IVal >= (long) ExprBits) { + + Warning ("Shift count '%ld' >= width of type", Expr2.IVal); Expr2.IVal &= ExprBits - 1; } From e8c28864554248095ff71f10be383a258755838e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:15:57 +0800 Subject: [PATCH 0340/2710] Improved error messages on redefinitions of constants and bit-fields. --- src/cc65/symtab.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 2104c017b..ee95a77b7 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -801,7 +801,7 @@ SymEntry* AddBitField (const char* Name, unsigned Offs, unsigned BitOffs, unsign if (Entry) { /* We have a symbol with this name already */ - Error ("Multiple definition for '%s'", Name); + Error ("Multiple definition for bit-field '%s'", Name); } else { @@ -834,7 +834,7 @@ SymEntry* AddConstSym (const char* Name, const Type* T, unsigned Flags, long Val if ((Entry->Flags & SC_CONST) != SC_CONST) { Error ("Symbol '%s' is already different kind", Name); } else { - Error ("Multiple definition for '%s'", Name); + Error ("Multiple definition for constant '%s'", Name); } return Entry; } From 7e68a246251d04027319c0f5305bcab4b292018f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:15:57 +0800 Subject: [PATCH 0341/2710] Clearer warning messages on unused symbols. --- src/cc65/symtab.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index ee95a77b7..a673bc3dd 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -172,7 +172,7 @@ static void CheckSymTable (SymTable* Tab) } } else { if (IS_Get (&WarnUnusedVar)) { - Warning ("'%s' is defined but never used", Entry->Name); + Warning ("Variable '%s' is defined but never used", Entry->Name); } } } @@ -186,7 +186,7 @@ static void CheckSymTable (SymTable* Tab) } else if (!SymIsRef (Entry)) { /* Defined but not used */ if (IS_Get (&WarnUnusedLabel)) { - Warning ("'%s' is defined but never used", Entry->Name); + Warning ("Label '%s' is defined but never used", Entry->Name); } } } From 11a5f0edf156bf2bb828ede170a0d03aa2b4befd Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:15:57 +0800 Subject: [PATCH 0342/2710] No "Statement has no effect" warnings on statements with errors. --- src/cc65/stmt.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index b02ae1cd6..27665e619 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -581,6 +581,7 @@ int Statement (int* PendingToken) ExprDesc Expr; int GotBreak; CodeMark Start, End; + unsigned PrevErrorCount = ErrorCount; /* Assume no pending token */ if (PendingToken) { @@ -681,7 +682,8 @@ int Statement (int* PendingToken) GetCodePos (&End); if (CodeRangeIsEmpty (&Start, &End) && !IsTypeVoid (Expr.Type) && - IS_Get (&WarnNoEffect)) { + IS_Get (&WarnNoEffect) && + PrevErrorCount == ErrorCount) { Warning ("Statement has no effect"); } CheckSemi (PendingToken); From 6df4f1996b52e1d09111ff6078fab1ff1ea76f3d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:16:00 +0800 Subject: [PATCH 0343/2710] Improved diagnostics with more detailed type names. --- src/cc65/assignment.c | 8 +++++++- src/cc65/datatype.c | 4 ++-- src/cc65/expr.c | 4 ++-- src/cc65/function.c | 2 +- src/cc65/stmt.c | 2 +- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index c67ac1ce5..207e01588 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -127,7 +127,13 @@ void Assignment (ExprDesc* Expr) /* We must have an lvalue for an assignment */ if (ED_IsRVal (Expr)) { - Error ("Invalid lvalue in assignment"); + if (IsTypeArray (Expr->Type)) { + Error ("Array type '%s' is not assignable", GetFullTypeName (Expr->Type)); + } else if (IsTypeFunc (Expr->Type)) { + Error ("Function type '%s' is not assignable", GetFullTypeName (Expr->Type)); + } else { + Error ("Assignment to rvalue"); + } } /* Check for assignment to const */ diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 005e6109b..aaee7260f 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -903,7 +903,7 @@ unsigned CheckedSizeOf (const Type* T) { unsigned Size = SizeOf (T); if (Size == 0) { - Error ("Size of data type is unknown"); + Error ("Size of type '%s' is unknown", GetFullTypeName (T)); Size = SIZEOF_CHAR; /* Don't return zero */ } return Size; @@ -919,7 +919,7 @@ unsigned CheckedPSizeOf (const Type* T) { unsigned Size = PSizeOf (T); if (Size == 0) { - Error ("Size of data type is unknown"); + Error ("Size of type '%s' is unknown", GetFullTypeName (T)); Size = SIZEOF_CHAR; /* Don't return zero */ } return Size; diff --git a/src/cc65/expr.c b/src/cc65/expr.c index a99f17b55..8cd332173 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1218,7 +1218,7 @@ static void StructRef (ExprDesc* Expr) NextToken (); const SymEntry Field = FindStructField (Expr->Type, Ident); if (Field.Type == 0) { - Error ("No field named '%s' found in %s", Ident, GetBasicTypeName (Expr->Type)); + Error ("No field named '%s' found in '%s'", Ident, GetFullTypeName (Expr->Type)); /* Make the expression an integer at address zero */ ED_MakeConstAbs (Expr, 0, type_int); return; @@ -1296,7 +1296,7 @@ static void StructRef (ExprDesc* Expr) Flags = CF_LONG | CF_UNSIGNED | CF_CONST; break; default: - Internal ("Invalid %s size: %u", GetBasicTypeName (Expr->Type), StructSize); + Internal ("Invalid '%s' size: %u", GetFullTypeName (Expr->Type), StructSize); break; } diff --git a/src/cc65/function.c b/src/cc65/function.c index e6a974f98..5d0b09380 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -513,7 +513,7 @@ void NewFunc (SymEntry* Func) ** We don't currently support this case. */ if (RType == Param->Type) { - Error ("Passing %s of this size by value is not supported", GetBasicTypeName (Param->Type)); + Error ("Passing '%s' of this size by value is not supported", GetFullTypeName (Param->Type)); } } diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index 27665e619..036cc2d89 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -333,7 +333,7 @@ static void ReturnStatement (void) /* Handle struct/union specially */ ReturnType = GetStructReplacementType (Expr.Type); if (ReturnType == Expr.Type) { - Error ("Returning %s of this size by value is not supported", GetBasicTypeName (Expr.Type)); + Error ("Returning '%s' of this size by value is not supported", GetFullTypeName (Expr.Type)); } LoadExpr (TypeOf (ReturnType), &Expr); From d6aa446b541cbfa909187b6eb0243e95712c37e4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:24:38 +0800 Subject: [PATCH 0344/2710] Error info for loading expressions of incomplete enum types. No more "Illegal type 0016". --- src/cc65/datatype.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index aaee7260f..bcaf3ab64 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -974,6 +974,11 @@ unsigned TypeOf (const Type* T) /* Address of ... */ return CF_INT | CF_UNSIGNED; + case T_ENUM: + /* Incomplete enum type */ + Error ("Incomplete enum type"); + return CF_INT; + default: Error ("Illegal type %04lX", T->C); return CF_INT; From e3d913b81aced6b50976b6aa5d24ef523527a0eb Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 02:23:35 +0800 Subject: [PATCH 0345/2710] Fixed the reference output of test/misc/goto.c (test/misc/goto.ref). --- test/misc/goto.ref | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/misc/goto.ref b/test/misc/goto.ref index 85dc20a61..d0a978436 100644 --- a/test/misc/goto.ref +++ b/test/misc/goto.ref @@ -1,7 +1,7 @@ goto.c(8): Warning: Goto at line 8 to label start jumps into a block with initialization of an object that has automatic storage duration -goto.c(97): Warning: 'a' is defined but never used -goto.c(117): Warning: 'a' is defined but never used -goto.c(137): Warning: 'a' is defined but never used +goto.c(97): Warning: Variable 'a' is defined but never used +goto.c(117): Warning: Variable 'a' is defined but never used +goto.c(137): Warning: Variable 'a' is defined but never used goto.c(159): Warning: Goto at line 23 to label l8 jumps into a block with initialization of an object that has automatic storage duration goto.c(159): Warning: Goto at line 44 to label l8 jumps into a block with initialization of an object that has automatic storage duration goto.c(159): Warning: Goto at line 65 to label l8 jumps into a block with initialization of an object that has automatic storage duration From bae431eab0f3cdb3d47aa47164f0d870a0ecc2ba Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 08:09:50 +0800 Subject: [PATCH 0346/2710] Fixed error message of CheckedPSizeOf(). --- src/cc65/datatype.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index bcaf3ab64..18bf41bca 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -919,7 +919,7 @@ unsigned CheckedPSizeOf (const Type* T) { unsigned Size = PSizeOf (T); if (Size == 0) { - Error ("Size of type '%s' is unknown", GetFullTypeName (T)); + Error ("Size of type '%s' is unknown", GetFullTypeName (T + 1)); Size = SIZEOF_CHAR; /* Don't return zero */ } return Size; From 0c72647edda327df6970773cefb28d3c7c6a41d9 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Mon, 3 Aug 2020 09:07:36 +0200 Subject: [PATCH 0347/2710] Remove extra ED_TestDone call Accidentally added in #1141. --- src/cc65/loadexpr.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index 1a6e43779..1ea86fa2d 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -238,7 +238,6 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) ** when EndBit <= 24 is possible. */ g_test (F); - ED_TestDone (Expr); } else { /* Shift right by the bit offset; no code is emitted if BitOffs is zero */ g_asr (F, Expr->BitOffs); From d8f9201ecd82165299b8fe758f57c1c515da313f Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sun, 2 Aug 2020 09:35:33 +0200 Subject: [PATCH 0348/2710] LoadExpr: Optimize <= 8-bit bit-field loads Set CF_FORCECHAR to do as many operations as char ops as possible. Clear high byte at the end. --- src/cc65/loadexpr.c | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index 1ea86fa2d..ba585d3e3 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -117,12 +117,27 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) */ unsigned EndBit = 0; /* End bit for bit-fields, or zero if non-bit-field. */ int AdjustBitField = 0; + unsigned BitFieldFullWidthFlags = 0; if (ED_IsBitField (Expr)) { EndBit = Expr->BitOffs + Expr->BitWidth; AdjustBitField = Expr->BitOffs != 0 || (EndBit != CHAR_BITS && EndBit != INT_BITS); + /* TODO: This probably needs to be guarded by AdjustBitField when long bit-fields are + ** supported. + */ Flags |= (EndBit <= CHAR_BITS) ? CF_CHAR : CF_INT; Flags |= CF_UNSIGNED; + + /* Flags we need operate on the whole bit-field, without CF_FORCECHAR. */ + BitFieldFullWidthFlags = Flags; + + /* If we're adjusting, then only load a char (not an int) and do only char ops; + ** We will clear the high byte in the adjustment. CF_FORCECHAR does nothing if the + ** type is not CF_CHAR. + */ + if (AdjustBitField) { + Flags |= CF_FORCECHAR; + } } else if ((Flags & CF_TYPEMASK) == 0) { Flags |= TypeOf (Expr->Type); } @@ -211,10 +226,7 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) ** so be sure to always use unsigned ints for the operations. */ if (AdjustBitField) { - /* If the field was loaded as a char, force the shift/mask ops to be char ops. - ** If it is a char, the load has already put 0 in the upper byte, so that can remain. - */ - unsigned F = Flags | CF_FORCECHAR | CF_CONST; + unsigned F = Flags | CF_CONST; /* We always need to do something with the low byte, so there is no opportunity ** for optimization by skipping it. @@ -242,19 +254,21 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) /* Shift right by the bit offset; no code is emitted if BitOffs is zero */ g_asr (F, Expr->BitOffs); - /* Since we have now shifted down, we can do char ops as long as the width fits in - ** a char. + /* Since we have now shifted down, we could do char ops when the width fits in + ** a char, but we also need to clear the high byte since we've been using + ** CF_FORCECHAR up to now. */ - if (Expr->BitWidth <= CHAR_BITS) { - F |= CF_CHAR; - } /* And by the width if the field doesn't end on a char or int boundary. - ** If it does end on a boundary, then zeros have already been shifted in. - ** g_and emits no code if the mask is all ones. + ** If it does end on a boundary, then zeros have already been shifted in, + ** but we need to clear the high byte for char. g_and emits no code if the mask + ** is all ones. */ - if (EndBit != CHAR_BITS && EndBit != INT_BITS) { - g_and (F, (0x0001U << Expr->BitWidth) - 1U); + if (EndBit == CHAR_BITS) { + /* We need to clear the high byte, since CF_FORCECHAR was set. */ + g_and (BitFieldFullWidthFlags | CF_CONST, 0xFF); + } else if (EndBit != INT_BITS) { + g_and (BitFieldFullWidthFlags | CF_CONST, (0x0001U << Expr->BitWidth) - 1U); } } } From cdfc1afd89be8fdcd14377aac996589432345fce Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Wed, 5 Aug 2020 12:57:49 +0200 Subject: [PATCH 0349/2710] Fix vacuous comparison warning from 0df45fe cc65/symentry.c:306:60: warning: address of array 'Sym->Name' will always evaluate to 'true' [-Wpointer-bool-conversion] sprintf (TypeName, "%s %s", GetBasicTypeName (T), Sym->Name ? Sym->Name : "<unknown>"); ~~~~~^~~~ ~ --- src/cc65/symentry.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cc65/symentry.c b/src/cc65/symentry.c index 6486ab764..ea08a860c 100644 --- a/src/cc65/symentry.c +++ b/src/cc65/symentry.c @@ -303,7 +303,8 @@ const char* GetSymTypeName (const Type* T) if (Sym == 0) { return GetBasicTypeName (T); } - sprintf (TypeName, "%s %s", GetBasicTypeName (T), Sym->Name ? Sym->Name : "<unknown>"); + sprintf (TypeName, "%s %s", GetBasicTypeName (T), + Sym->Name[0] != '\0' ? Sym->Name : "<unknown>"); return TypeName; } From f59d6b8f6ab79a0ed1e6d1e473f325cc5d8974c3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:31:52 +0800 Subject: [PATCH 0350/2710] Redefining enums/structs/unions of 0 size is no longer treated as declarations and thus forbidden. --- src/cc65/declare.c | 4 ++-- src/cc65/symtab.c | 20 +++++++++++++------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 5ecfeb04f..5f5fdeac4 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -920,7 +920,7 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { LeaveStructLevel (); /* Make a real entry from the forward decl and return it */ - return AddStructSym (Name, SC_UNION, UnionSize, FieldTab); + return AddStructSym (Name, SC_UNION | SC_DEF, UnionSize, FieldTab); } @@ -1102,7 +1102,7 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { LeaveStructLevel (); /* Make a real entry from the forward decl and return it */ - return AddStructSym (Name, SC_STRUCT, StructSize, FieldTab); + return AddStructSym (Name, SC_STRUCT | SC_DEF, StructSize, FieldTab); } diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index a673bc3dd..08c909121 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -52,13 +52,13 @@ #include "declare.h" #include "error.h" #include "funcdesc.h" +#include "function.h" #include "global.h" +#include "input.h" #include "stackptr.h" #include "symentry.h" #include "typecmp.h" #include "symtab.h" -#include "function.h" -#include "input.h" @@ -728,6 +728,10 @@ SymEntry* AddEnumSym (const char* Name, const Type* Type, SymTable* Tab) Entry->V.E.SymTab = Tab; Entry->V.E.Type = Type; + if (Type != 0) { + Entry->Flags |= SC_DEF; + } + /* Add it to the current table */ AddSymEntry (CurTagTab, Entry); } @@ -738,11 +742,12 @@ SymEntry* AddEnumSym (const char* Name, const Type* Type, SymTable* Tab) -SymEntry* AddStructSym (const char* Name, unsigned Type, unsigned Size, SymTable* Tab) +SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTable* Tab) /* Add a struct/union entry and return it */ { SymTable* CurTagTab = TagTab; SymEntry* Entry; + unsigned Type = (Flags & SC_TYPEMASK); /* Type must be struct or union */ PRECONDITION (Type == SC_STRUCT || Type == SC_UNION); @@ -756,13 +761,14 @@ SymEntry* AddStructSym (const char* Name, unsigned Type, unsigned Size, SymTable /* Existing symbol is not a struct */ Error ("Symbol '%s' is already different kind", Name); Entry = 0; - } else if (Size > 0 && Entry->V.S.Size > 0) { + } else if ((Entry->Flags & Flags & SC_DEF) == SC_DEF) { /* Both structs are definitions. */ Error ("Multiple definition for '%s'", Name); Entry = 0; } else { - /* Define the struct size if it is given */ - if (Size > 0) { + /* Define the struct size if it is a definition */ + if ((Flags & SC_DEF) == SC_DEF) { + Entry->Flags = Flags; Entry->V.S.SymTab = Tab; Entry->V.S.Size = Size; } @@ -777,7 +783,7 @@ SymEntry* AddStructSym (const char* Name, unsigned Type, unsigned Size, SymTable if (Entry == 0) { /* Create a new entry */ - Entry = NewSymEntry (Name, Type); + Entry = NewSymEntry (Name, Flags); /* Set the struct data */ Entry->V.S.SymTab = Tab; From fdd120db4905611e552cadd1bbeca984a3100e0b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:36:19 +0800 Subject: [PATCH 0351/2710] Enabled to output errors and warnings about tentative definitions. --- src/cc65/compile.c | 52 ++++++++++++++++++++++++++-------------------- src/cc65/compile.h | 2 +- src/cc65/main.c | 2 +- 3 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 3d2f82c51..d70e38e00 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -415,9 +415,36 @@ void Compile (const char* FileName) } else { + /* Used for emitting externals */ + SymEntry* Entry; + /* Ok, start the ball rolling... */ Parse (); + /* Reset the BSS segment name to its default; so that the below strcmp() + ** will work as expected, at the beginning of the list of variables + */ + SetSegName (SEG_BSS, SEGNAME_BSS); + + /* Walk over all global symbols and generate code for uninitialized + ** global variables. + */ + for (Entry = GetGlobalSymTab ()->SymHead; Entry; Entry = Entry->NextSym) { + if ((Entry->Flags & (SC_STORAGE | SC_DEF | SC_STATIC)) == (SC_STORAGE | SC_STATIC)) { + /* Assembly definition of uninitialized global variable */ + + /* Set the segment name only when it changes */ + if (strcmp (GetSegName (SEG_BSS), Entry->V.BssName) != 0) { + SetSegName (SEG_BSS, Entry->V.BssName); + g_segname (SEG_BSS); + } + g_usebss (); + g_defgloblabel (Entry->Name); + g_res (SizeOf (Entry->Type)); + /* Mark as defined; so that it will be exported, not imported */ + Entry->Flags |= SC_DEF; + } + } } if (Debug) { @@ -431,18 +458,12 @@ void Compile (const char* FileName) void FinishCompile (void) -/* Emit literals, externals, debug info, do cleanup and optimizations */ +/* Emit literals, debug info, do cleanup and optimizations */ { SymEntry* Entry; - /* Reset the BSS segment name to its default; so that the below strcmp() - ** will work as expected, at the beginning of the list of variables - */ - SetSegName (SEG_BSS, SEGNAME_BSS); - - /* Walk over all global symbols: - ** - for functions, do clean-up and optimizations - ** - generate code for uninitialized global variables + /* Walk over all global symbols and do clean-up and optimizations for + ** functions. */ for (Entry = GetGlobalSymTab ()->SymHead; Entry; Entry = Entry->NextSym) { if (SymIsOutputFunc (Entry)) { @@ -450,19 +471,6 @@ void FinishCompile (void) MoveLiteralPool (Entry->V.F.LitPool); CS_MergeLabels (Entry->V.F.Seg->Code); RunOpt (Entry->V.F.Seg->Code); - } else if ((Entry->Flags & (SC_STORAGE | SC_DEF | SC_STATIC)) == (SC_STORAGE | SC_STATIC)) { - /* Assembly definition of uninitialized global variable */ - - /* Set the segment name only when it changes */ - if (strcmp (GetSegName (SEG_BSS), Entry->V.BssName) != 0) { - SetSegName (SEG_BSS, Entry->V.BssName); - g_segname (SEG_BSS); - } - g_usebss (); - g_defgloblabel (Entry->Name); - g_res (SizeOf (Entry->Type)); - /* Mark as defined; so that it will be exported, not imported */ - Entry->Flags |= SC_DEF; } } diff --git a/src/cc65/compile.h b/src/cc65/compile.h index 2d15c8200..7af14ef7e 100644 --- a/src/cc65/compile.h +++ b/src/cc65/compile.h @@ -48,7 +48,7 @@ void Compile (const char* FileName); /* Top level compile routine. Will setup things and call the parser. */ void FinishCompile (void); -/* Emit literals, externals, do cleanup and optimizations */ +/* Emit literals, debug info, do cleanup and optimizations */ diff --git a/src/cc65/main.c b/src/cc65/main.c index ed2e9d7ba..3e60bcb95 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -1069,7 +1069,7 @@ int main (int argc, char* argv[]) /* Create the output file if we didn't had any errors */ if (PreprocessOnly == 0 && (ErrorCount == 0 || Debug)) { - /* Emit literals, externals, do cleanup and optimizations */ + /* Emit literals, do cleanup and optimizations */ FinishCompile (); /* Open the file */ From fdef06762938c3edbfcba45ef96a05b04d42e0f3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:36:19 +0800 Subject: [PATCH 0352/2710] Fixed tentative definition of variables of incomplete types that may be completed later. Tenative arrays that never get completed are now assumed each to have one element. --- src/cc65/compile.c | 50 ++++++++++++++++++++++++++++++++-------------- src/cc65/expr.c | 21 +++++++++++++++++-- 2 files changed, 54 insertions(+), 17 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index d70e38e00..a28c3e848 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -248,16 +248,11 @@ static void Parse (void) /* We cannot declare variables of type void */ Error ("Illegal type for variable '%s'", Decl.Ident); Entry->Flags &= ~(SC_STORAGE | SC_DEF); - } else if (Size == 0) { + } else if (Size == 0 && SymIsDef (Entry)) { /* Size is unknown. Is it an array? */ if (!IsTypeArray (Decl.Type)) { Error ("Variable '%s' has unknown size", Decl.Ident); } - /* Do this only if the same array has not been defined */ - if (!SymIsDef (Entry)) { - Entry->Flags &= ~(SC_STORAGE | SC_DEF); - Entry->Flags |= SC_DECL; - } } else { /* A global (including static) uninitialized variable is ** only a tentative definition. For example, this is valid: @@ -432,17 +427,42 @@ void Compile (const char* FileName) for (Entry = GetGlobalSymTab ()->SymHead; Entry; Entry = Entry->NextSym) { if ((Entry->Flags & (SC_STORAGE | SC_DEF | SC_STATIC)) == (SC_STORAGE | SC_STATIC)) { /* Assembly definition of uninitialized global variable */ + SymEntry* Sym = GetSymType (Entry->Type); + unsigned Size = SizeOf (Entry->Type); + if (Size == 0 && IsTypeArray (Entry->Type)) { + if (GetElementCount (Entry->Type) == UNSPECIFIED) { + /* Assume array size of 1 */ + SetElementCount (Entry->Type, 1); + Size = SizeOf (Entry->Type); + Warning ("Tentative array '%s[]' assumed to have one element", Entry->Name); + } - /* Set the segment name only when it changes */ - if (strcmp (GetSegName (SEG_BSS), Entry->V.BssName) != 0) { - SetSegName (SEG_BSS, Entry->V.BssName); - g_segname (SEG_BSS); + Sym = GetSymType (GetElementType (Entry->Type)); + if (Size == 0 && Sym != 0 && SymIsDef (Sym)) { + /* Array of 0-size elements */ + Warning ("Array '%s[]' has 0-sized elements", Entry->Name); + } + } + + /* For non-ESU types, Size != 0 */ + if (Size != 0 || (Sym != 0 && SymIsDef (Sym))) { + /* Set the segment name only when it changes */ + if (strcmp (GetSegName (SEG_BSS), Entry->V.BssName) != 0) { + SetSegName (SEG_BSS, Entry->V.BssName); + g_segname (SEG_BSS); + } + g_usebss (); + g_defgloblabel (Entry->Name); + g_res (Size); + + /* Mark as defined; so that it will be exported, not imported */ + Entry->Flags |= SC_DEF; + } else { + /* Tentative declared variable is still of incomplete type */ + Error ("Tentative definition of '%s' of type '%s' is incomplete", + Entry->Name, + GetFullTypeName (Entry->Type)); } - g_usebss (); - g_defgloblabel (Entry->Name); - g_res (SizeOf (Entry->Type)); - /* Mark as defined; so that it will be exported, not imported */ - Entry->Flags |= SC_DEF; } } } diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 8cd332173..65238af61 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -244,6 +244,23 @@ static int TypeSpecAhead (void) +static unsigned ExprCheckedSizeOf (const Type* T) +/* Specially checked SizeOf() used in 'sizeof' expressions */ +{ + unsigned Size = SizeOf (T); + SymEntry* Sym; + + if (Size == 0) { + Sym = GetSymType (T); + if (Sym == 0 || !SymIsDef (Sym)) { + Error ("Cannot apply 'sizeof' to incomplete type '%s'", GetFullTypeName (T)); + } + } + return Size; +} + + + void PushAddr (const ExprDesc* Expr) /* If the expression contains an address that was somehow evaluated, ** push this address on the stack. This is a helper function for all @@ -1890,7 +1907,7 @@ void hie10 (ExprDesc* Expr) if (TypeSpecAhead ()) { Type T[MAXTYPELEN]; NextToken (); - Size = CheckedSizeOf (ParseType (T)); + Size = ExprCheckedSizeOf (ParseType (T)); ConsumeRParen (); } else { /* Remember the output queue pointer */ @@ -1908,7 +1925,7 @@ void hie10 (ExprDesc* Expr) ReleaseLiteral (Expr->LVal); } /* Calculate the size */ - Size = CheckedSizeOf (Expr->Type); + Size = ExprCheckedSizeOf (Expr->Type); } /* Remove any generated code */ RemoveCode (&Mark); From 8cdffc1944d743455310fae7dac7470229106759 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:36:19 +0800 Subject: [PATCH 0353/2710] No storage for unsuccessfully parsed variables. --- src/cc65/compile.c | 6 ++++++ src/cc65/declare.c | 11 +++++++++-- src/cc65/locals.c | 21 +++++++++++---------- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index a28c3e848..ef7dea149 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -148,6 +148,11 @@ static void Parse (void) break; } + if ((Decl.StorageClass & SC_ALIAS) == SC_ALIAS) { + /* Failed parsing */ + goto SkipOneDecl; + } + /* Check if we must reserve storage for the variable. We do this, ** ** - if it is not a typedef or function, @@ -276,6 +281,7 @@ static void Parse (void) } +SkipOneDecl: /* Check for end of declaration list */ if (CurTok.Tok == TOK_COMMA) { NextToken (); diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 5f5fdeac4..7b868380d 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1814,6 +1814,9 @@ Type* ParseType (Type* T) void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode) /* Parse a variable, type or function declaration */ { + /* Used to check if we have any errors during parsing this */ + unsigned PrevErrorCount = ErrorCount; + /* Initialize the Declaration struct */ InitDeclaration (D); @@ -1891,8 +1894,8 @@ void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode) } } - /* Check the size of the generated type */ if (!IsTypeFunc (D->Type) && !IsTypeVoid (D->Type)) { + /* Check the size of the generated type */ unsigned Size = SizeOf (D->Type); if (Size >= 0x10000) { if (D->Ident[0] != '\0') { @@ -1901,8 +1904,12 @@ void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode) Error ("Invalid size in declaration (0x%06X)", Size); } } - } + if (PrevErrorCount != ErrorCount) { + /* Don't give storage if the declaration is not parsed correctly */ + D->StorageClass |= SC_DECL | SC_ALIAS; + } + } } diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 3fa26021f..03bc80f21 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -443,13 +443,14 @@ static void ParseOneDecl (const DeclSpec* Spec) } /* If the symbol is not marked as external, it will be defined now */ - if ((Decl.StorageClass & SC_EXTERN) == 0) { + if ((Decl.StorageClass & SC_ALIAS) == 0 && + (Decl.StorageClass & SC_EXTERN) == 0) { Decl.StorageClass |= SC_DEF; } /* Handle anything that needs storage (no functions, no typdefs) */ - if ((Decl.StorageClass & SC_FUNC) != SC_FUNC && - (Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { + if ((Decl.StorageClass & SC_DEF) == SC_DEF && + (Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { /* If we have a register variable, try to allocate a register and ** convert the declaration to "auto" if this is not possible. @@ -468,13 +469,6 @@ static void ParseOneDecl (const DeclSpec* Spec) } else if ((Decl.StorageClass & SC_AUTO) == SC_AUTO) { /* Auto variable */ ParseAutoDecl (&Decl); - } else if ((Decl.StorageClass & SC_EXTERN) == SC_EXTERN) { - /* External identifier - may not get initialized */ - if (CurTok.Tok == TOK_ASSIGN) { - Error ("Cannot initialize externals"); - } - /* Add the external symbol to the symbol table */ - AddLocalSym (Decl.Ident, Decl.Type, Decl.StorageClass, 0); } else if ((Decl.StorageClass & SC_STATIC) == SC_STATIC) { /* Static variable */ ParseStaticDecl (&Decl); @@ -484,6 +478,13 @@ static void ParseOneDecl (const DeclSpec* Spec) } else { + if ((Decl.StorageClass & SC_EXTERN) == SC_EXTERN) { + /* External identifier - may not get initialized */ + if (CurTok.Tok == TOK_ASSIGN) { + Error ("Cannot initialize externals"); + } + } + /* Add the symbol to the symbol table */ AddLocalSym (Decl.Ident, Decl.Type, Decl.StorageClass, 0); From b2d3b8379cd3aee9d99ac07080da2d0f73b03638 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:38:54 +0800 Subject: [PATCH 0354/2710] Warning about forward declaration of enum types in non-cc65 modes. --- src/cc65/compile.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index ef7dea149..5332caedb 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -276,6 +276,15 @@ static void Parse (void) Entry->Name, Entry->V.BssName); } Entry->V.BssName = xstrdup (bssName); + + /* Check for enum forward declaration. + ** Warn about it when extensions are not allowed. + */ + if (Size == 0 && IsTypeEnum (Decl.Type)) { + if (IS_Get (&Standard) != STD_CC65) { + Warning ("ISO C forbids forward references to 'enum' types"); + } + } } } From 43efc256f16c96d27a750793547b8d99e4fada66 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 5 Aug 2020 00:19:28 +0800 Subject: [PATCH 0355/2710] Changed error/warning messages not using the term 'tentative' according to PR reviews. --- src/cc65/compile.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 5332caedb..d045473ff 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -449,7 +449,7 @@ void Compile (const char* FileName) /* Assume array size of 1 */ SetElementCount (Entry->Type, 1); Size = SizeOf (Entry->Type); - Warning ("Tentative array '%s[]' assumed to have one element", Entry->Name); + Warning ("Incomplete array '%s[]' assumed to have one element", Entry->Name); } Sym = GetSymType (GetElementType (Entry->Type)); @@ -474,7 +474,7 @@ void Compile (const char* FileName) Entry->Flags |= SC_DEF; } else { /* Tentative declared variable is still of incomplete type */ - Error ("Tentative definition of '%s' of type '%s' is incomplete", + Error ("Definition of '%s' has type '%s' that is never completed", Entry->Name, GetFullTypeName (Entry->Type)); } From d68cd90e47bfe96a5b85bd57328a25687a59f016 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 6 Aug 2020 17:22:19 +0800 Subject: [PATCH 0356/2710] Function declaration in functions cannot have storage classes other than 'extern'. --- src/cc65/locals.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 03bc80f21..6b4c13fce 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -426,13 +426,25 @@ static void ParseOneDecl (const DeclSpec* Spec) /* Read the declaration */ ParseDecl (Spec, &Decl, DM_NEED_IDENT); - /* Set the correct storage class for functions */ + /* Check if there are any non-extern storage classes set for function + ** declarations. The only valid storage class for function declarations + ** inside functions is 'extern'. + */ if ((Decl.StorageClass & SC_FUNC) == SC_FUNC) { - /* Function prototypes are always external */ - if ((Decl.StorageClass & SC_EXTERN) == 0) { - Warning ("Function must be extern"); + + /* Check if there are explicitly specified non-external storage classes */ + if ((Spec->Flags & DS_DEF_STORAGE) != DS_DEF_STORAGE && + (Decl.StorageClass & SC_EXTERN) == 0 && + (Decl.StorageClass & SC_STORAGEMASK) != 0) { + Error ("Illegal storage class on function"); } + + /* The default storage class could be wrong. Just use 'extern' in all + ** cases. + */ + Decl.StorageClass &= ~SC_STORAGEMASK; Decl.StorageClass |= SC_EXTERN; + } /* If we don't have a name, this was flagged as an error earlier. From 1dd899c7c9e78597f065b4ec085e7bddd244254e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 8 Aug 2020 06:44:36 +0800 Subject: [PATCH 0357/2710] Fixed non-file-scope multiple definition checking. --- src/cc65/symtab.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 08c909121..25f3b2428 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -1019,9 +1019,18 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs /* We have a symbol with this name already */ if (HandleSymRedefinition (Entry, T, Flags)) { - /* Use the fail-safe table for fictitious symbols */ - Tab = FailSafeTab; Entry = 0; + } else if ((Flags & SC_ESUTYPEMASK) != SC_TYPEDEF) { + /* Redefinitions are not allowed */ + if (SymIsDef (Entry) && (Flags & SC_DEF) == SC_DEF) { + Error ("Multiple definition of '%s'", Entry->Name); + Entry = 0; + } + } + + if (Entry == 0) { + /* Use the fail-safe table for fictitious symbols */ + Tab = FailSafeTab; } } @@ -1033,7 +1042,7 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs Entry->Type = TypeDup (T); if ((Flags & SC_STRUCTFIELD) == SC_STRUCTFIELD || - (Flags & SC_TYPEDEF) == SC_TYPEDEF) { + (Flags & SC_ESUTYPEMASK) == SC_TYPEDEF) { if ((Flags & SC_ALIAS) != SC_ALIAS) { Entry->V.Offs = Offs; } From 0f1a5e0520eccf6d97c0de1c0d1b92a3679274fa Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 8 Aug 2020 06:45:45 +0800 Subject: [PATCH 0358/2710] Set enum tag definition flags. --- src/cc65/symtab.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 25f3b2428..de17c6487 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -697,18 +697,17 @@ SymEntry* AddEnumSym (const char* Name, const Type* Type, SymTable* Tab) /* Existing symbol is not an enum */ Error ("Symbol '%s' is already different kind", Name); Entry = 0; - } else { + } else if (Type != 0) { /* Define the struct size if the underlying type is given. */ - if (Type != 0) { - if (Type !=0 && Entry->V.E.Type != 0) { - /* Both are definitions. */ - Error ("Multiple definition for enum '%s'", Name); - Entry = 0; - } else { - Entry->Type = 0; - Entry->V.E.SymTab = Tab; - Entry->V.E.Type = Type; - } + if (Entry->V.E.Type != 0) { + /* Both are definitions. */ + Error ("Multiple definition for 'enum %s'", Name); + Entry = 0; + } else { + Entry->V.E.SymTab = Tab; + Entry->V.E.Type = Type; + Entry->Flags &= ~SC_DECL; + Entry->Flags |= SC_DEF; } } @@ -724,7 +723,6 @@ SymEntry* AddEnumSym (const char* Name, const Type* Type, SymTable* Tab) Entry = NewSymEntry (Name, SC_ENUM); /* Set the enum type data */ - Entry->Type = 0; Entry->V.E.SymTab = Tab; Entry->V.E.Type = Type; From 68d63b089d9be2e69defac2b9f6002af459bda3a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:34:02 +0800 Subject: [PATCH 0359/2710] Reduced error flood raised by misplaced variable declarations. --- src/cc65/declare.c | 2 +- src/cc65/declare.h | 3 +++ src/cc65/expr.c | 31 +++++++++++++++++++++++++++++-- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 7b868380d..f6aa9c430 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -263,7 +263,7 @@ static void OptionalSigned (void) -static void InitDeclSpec (DeclSpec* D) +void InitDeclSpec (DeclSpec* D) /* Initialize the DeclSpec struct for use */ { D->StorageClass = 0; diff --git a/src/cc65/declare.h b/src/cc65/declare.h index 117ac14a6..615f16a4a 100644 --- a/src/cc65/declare.h +++ b/src/cc65/declare.h @@ -93,6 +93,9 @@ typedef enum { +void InitDeclSpec (DeclSpec* D); +/* Initialize the DeclSpec struct for use */ + Type* ParseType (Type* Type); /* Parse a complete type specification */ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 65238af61..7b9fd0b9d 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -920,8 +920,35 @@ static void Primary (ExprDesc* E) /* Illegal primary. Be sure to skip the token to avoid endless ** error loops. */ - Error ("Expression expected"); - NextToken (); + { + /* Let's see if this is a C99-style declaration */ + DeclSpec Spec; + InitDeclSpec (&Spec); + ParseDeclSpec (&Spec, -1, T_QUAL_NONE); + + if (Spec.Type->C != T_END) { + + Error ("Mixed declarations and code are not supported in cc65"); + while (CurTok.Tok != TOK_SEMI) { + Declaration Decl; + + /* Parse one declaration */ + ParseDecl (&Spec, &Decl, DM_ACCEPT_IDENT); + if (CurTok.Tok == TOK_ASSIGN) { + NextToken (); + ParseInit (Decl.Type); + } + if (CurTok.Tok == TOK_COMMA) { + NextToken (); + } else { + break; + } + } + } else { + Error ("Expression expected"); + NextToken (); + } + } ED_MakeConstAbsInt (E, 1); break; } From 9fcfa3fc49f97c7cbbd6d5840cfa3c9097b77c08 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 8 Aug 2020 06:46:22 +0800 Subject: [PATCH 0360/2710] Fixed full type names of functions with "empty" parameter list. --- src/cc65/datatype.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 18bf41bca..65a0c0cbb 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -133,7 +133,7 @@ static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBu if ((F->Flags & FD_VARIADIC) == 0) { if (F->ParamCount > 0) { SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); - } else { + } else if ((F->Flags & FD_EMPTY) == 0) { SB_AppendStr (&ParamList, "void"); } } else { From 9317db6642a512cb0318d134daeb6d7f07299ab7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 8 Aug 2020 06:46:22 +0800 Subject: [PATCH 0361/2710] Slightly improved type error messages of 'op='. --- src/cc65/expr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 7b9fd0b9d..817234ec8 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3408,7 +3408,7 @@ static void opeq (const GenDesc* Gen, ExprDesc* Expr, const char* Op) /* There must be an integer or pointer on the left side */ if (!IsClassInt (Expr->Type) && !IsTypePtr (Expr->Type)) { - Error ("Invalid left operand type"); + Error ("Invalid left operand for binary operator '%s'", Op); /* Continue. Wrong code will be generated, but the compiler won't ** break, so this is the best error recovery. */ @@ -3532,7 +3532,7 @@ static void addsubeq (const GenDesc* Gen, ExprDesc *Expr, const char* Op) /* There must be an integer or pointer on the left side */ if (!IsClassInt (Expr->Type) && !IsTypePtr (Expr->Type)) { - Error ("Invalid left operand type"); + Error ("Invalid left operand for binary operator '%s'", Op); /* Continue. Wrong code will be generated, but the compiler won't ** break, so this is the best error recovery. */ From 0d53806490cf65bccc9420507795a3be2d973847 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 8 Aug 2020 06:46:22 +0800 Subject: [PATCH 0362/2710] Avoided excess errors in incomplete struct assignment. --- src/cc65/assignment.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 207e01588..53e0653ed 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -107,13 +107,13 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) g_push (CF_PTR | CF_UNSIGNED, 0); /* Load the size of the struct or union into the primary */ - g_getimmed (CF_INT | CF_UNSIGNED | CF_CONST, CheckedSizeOf (ltype), 0); + g_getimmed (CF_INT | CF_UNSIGNED | CF_CONST, SizeOf (ltype), 0); /* Call the memcpy function */ g_call (CF_FIXARGC, Func_memcpy, 4); } - return 0; + return 1; } From fe3f726fd695860d1534cd7819632e0fbf3bc944 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 8 Aug 2020 07:04:29 +0800 Subject: [PATCH 0363/2710] Improved incomplete enum typed diagnostics. --- src/cc65/datatype.c | 2 +- src/cc65/declare.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 65a0c0cbb..5794bf5a6 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -976,7 +976,7 @@ unsigned TypeOf (const Type* T) case T_ENUM: /* Incomplete enum type */ - Error ("Incomplete enum type"); + Error ("Incomplete type '%s'", GetFullTypeName (T)); return CF_INT; default: diff --git a/src/cc65/declare.c b/src/cc65/declare.c index f6aa9c430..9539a09b6 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2543,6 +2543,12 @@ static unsigned ParseInitInternal (Type* T, int *Braces, int AllowFlexibleMember case T_UNION: return ParseStructInit (T, Braces, AllowFlexibleMembers); + case T_ENUM: + /* Incomplete enum type must have already raised errors. + ** Just proceed to consume the value. + */ + return ParseScalarInit (T); + case T_VOID: if (IS_Get (&Standard) == STD_CC65) { /* Special cc65 extension in non-ANSI mode */ From b62b1650f57d10611368dc7f70b75599b96888e1 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 8 Aug 2020 20:12:04 +0800 Subject: [PATCH 0364/2710] Improved error messages on struct/union type multiple definitions. --- src/cc65/symtab.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index de17c6487..30fab0593 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -761,7 +761,11 @@ SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTabl Entry = 0; } else if ((Entry->Flags & Flags & SC_DEF) == SC_DEF) { /* Both structs are definitions. */ - Error ("Multiple definition for '%s'", Name); + if (Type == SC_STRUCT) { + Error ("Multiple definition for 'struct %s'", Name); + } else { + Error ("Multiple definition for 'union %s'", Name); + } Entry = 0; } else { /* Define the struct size if it is a definition */ From bde5be67933e247a6362de21e011c7f4147fbea6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 9 Aug 2020 06:25:36 +0800 Subject: [PATCH 0365/2710] Improved error message on initializing extern variables inside functions. --- src/cc65/locals.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 6b4c13fce..de2074211 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -493,7 +493,10 @@ static void ParseOneDecl (const DeclSpec* Spec) if ((Decl.StorageClass & SC_EXTERN) == SC_EXTERN) { /* External identifier - may not get initialized */ if (CurTok.Tok == TOK_ASSIGN) { - Error ("Cannot initialize externals"); + Error ("Cannot initialize extern variable '%s'", Decl.Ident); + /* Avoid excess errors */ + NextToken (); + ParseInit (Decl.Type); } } From 4dfc1a5ded78e4c2b75e3bf34d3f6ae749ecd5a2 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 10 Aug 2020 09:32:47 +0800 Subject: [PATCH 0366/2710] Using a dedicated SC_FICTITIOUS flag in case of parsing errors. --- src/cc65/compile.c | 2 +- src/cc65/declare.c | 2 +- src/cc65/locals.c | 2 +- src/cc65/symentry.h | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index d045473ff..6c881d9a8 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -148,7 +148,7 @@ static void Parse (void) break; } - if ((Decl.StorageClass & SC_ALIAS) == SC_ALIAS) { + if ((Decl.StorageClass & SC_FICTITIOUS) == SC_FICTITIOUS) { /* Failed parsing */ goto SkipOneDecl; } diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 9539a09b6..ac58948bf 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1907,7 +1907,7 @@ void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode) if (PrevErrorCount != ErrorCount) { /* Don't give storage if the declaration is not parsed correctly */ - D->StorageClass |= SC_DECL | SC_ALIAS; + D->StorageClass |= SC_DECL | SC_FICTITIOUS; } } } diff --git a/src/cc65/locals.c b/src/cc65/locals.c index de2074211..12caa7aa2 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -455,7 +455,7 @@ static void ParseOneDecl (const DeclSpec* Spec) } /* If the symbol is not marked as external, it will be defined now */ - if ((Decl.StorageClass & SC_ALIAS) == 0 && + if ((Decl.StorageClass & SC_FICTITIOUS) == 0 && (Decl.StorageClass & SC_EXTERN) == 0) { Decl.StorageClass |= SC_DEF; } diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 1d8af3f50..cfc6379d3 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -106,6 +106,7 @@ struct CodeEntry; #define SC_GOTO_IND 0x800000U /* Indirect goto */ #define SC_ALIAS 0x01000000U /* Alias of anonymous field */ +#define SC_FICTITIOUS 0x02000000U /* Symbol is fictitious */ From 97065faf1a8ca3906d587ef404b6395bee111f83 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 5 Aug 2020 00:19:28 +0800 Subject: [PATCH 0367/2710] Disallowed struct/union types of 0 size as cc65 is not ready to support them. --- src/cc65/declare.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index ac58948bf..636e0d61d 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -919,6 +919,11 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { FieldTab = GetSymTab (); LeaveStructLevel (); + /* Empty union is not supported now */ + if (UnionSize == 0) { + Error ("Empty union type '%s' is not supported", Name); + } + /* Make a real entry from the forward decl and return it */ return AddStructSym (Name, SC_UNION | SC_DEF, UnionSize, FieldTab); } @@ -1101,6 +1106,11 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { FieldTab = GetSymTab (); LeaveStructLevel (); + /* Empty struct is not supported now */ + if (StructSize == 0) { + Error ("Empty struct type '%s' is not supported", Name); + } + /* Make a real entry from the forward decl and return it */ return AddStructSym (Name, SC_STRUCT | SC_DEF, StructSize, FieldTab); } From fe44fe963fa2285096ba8c59d975feef474bd830 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 7 Aug 2020 17:40:40 +0800 Subject: [PATCH 0368/2710] Disallowed empty enums. --- src/cc65/declare.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 636e0d61d..41f96c20a 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -549,8 +549,8 @@ static SymEntry* ParseEnumDecl (const char* Name) ident Ident; long MinConstant = 0; unsigned long MaxConstant = 0; - const Type* NewType = type_int; /* new enumerator type */ - const Type* MemberType = type_int; /* default enumerator type */ + const Type* NewType = 0; /* new member type */ + const Type* MemberType = type_int; /* default member type */ /* Accept forward definitions */ if (CurTok.Tok != TOK_LCURLY) { @@ -677,6 +677,11 @@ static SymEntry* ParseEnumDecl (const char* Name) } ConsumeRCurly (); + /* Check if there have been any members. Error if none */ + if (NewType == 0) { + Error ("Empty enum is invalid"); + } + /* This evaluates the underlying type of the whole enum */ MemberType = GetEnumeratorType (MinConstant, MaxConstant, 0); if (MemberType == 0) { From 8b8561161c09139df076a19609d58312d111a3ce Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 7 Aug 2020 19:35:37 +0800 Subject: [PATCH 0369/2710] Moved #1098 bug tests from test/misc to test/err as they are fixed now. --- test/{misc => err}/bug1098.c | 0 test/{misc => err}/bug1098a.c | 0 test/{misc => err}/bug1098b.c | 0 test/misc/Makefile | 18 ------------------ 4 files changed, 18 deletions(-) rename test/{misc => err}/bug1098.c (100%) rename test/{misc => err}/bug1098a.c (100%) rename test/{misc => err}/bug1098b.c (100%) diff --git a/test/misc/bug1098.c b/test/err/bug1098.c similarity index 100% rename from test/misc/bug1098.c rename to test/err/bug1098.c diff --git a/test/misc/bug1098a.c b/test/err/bug1098a.c similarity index 100% rename from test/misc/bug1098a.c rename to test/err/bug1098a.c diff --git a/test/misc/bug1098b.c b/test/err/bug1098b.c similarity index 100% rename from test/misc/bug1098b.c rename to test/err/bug1098b.c diff --git a/test/misc/Makefile b/test/misc/Makefile index 3c5045753..1d98e2d62 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -87,24 +87,6 @@ $(WORKDIR)/bug264.$1.$2.prg: bug264.c | $(WORKDIR) $(if $(QUIET),echo misc/bug264.$1.$2.prg) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) -# this should fail to compile, because there are errors in the code -$(WORKDIR)/bug1098.$1.$2.prg: bug1098.c | $(WORKDIR) - @echo "FIXME: " $$@ "compiles but should give an error." - $(if $(QUIET),echo misc/bug1098.$1.$2.prg) - $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - -# this should fail to compile, because there are errors in the code -$(WORKDIR)/bug1098a.$1.$2.prg: bug1098a.c | $(WORKDIR) - @echo "FIXME: " $$@ "compiles but should give an error." - $(if $(QUIET),echo misc/bug1098a.$1.$2.prg) - $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - -# this should fail to compile, because there are errors in the code -$(WORKDIR)/bug1098b.$1.$2.prg: bug1098b.c | $(WORKDIR) - @echo "FIXME: " $$@ "compiles but should give an error." - $(if $(QUIET),echo misc/bug1098b.$1.$2.prg) - $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - # this should fail to compile, because there are errors in the code # instead, the compiler crashes $(WORKDIR)/bug1113.$1.$2.prg: bug1113.c | $(WORKDIR) From eb4464e8283cfeedeb560b7b0e0cc0561e4e3c3d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Aug 2020 01:38:54 +0800 Subject: [PATCH 0370/2710] Fixed type comparisons of ESU types with stricter rules. --- src/cc65/typecmp.c | 111 +++++++++++++++++++-------------------------- 1 file changed, 46 insertions(+), 65 deletions(-) diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index 0eddf2988..39f13b79e 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -148,41 +148,6 @@ static int EqualFuncParams (const FuncDesc* F1, const FuncDesc* F2) -static int EqualSymTables (SymTable* Tab1, SymTable* Tab2) -/* Compare two symbol tables. Return 1 if they are equal and 0 otherwise */ -{ - /* Compare the parameter lists */ - SymEntry* Sym1 = Tab1->SymHead; - SymEntry* Sym2 = Tab2->SymHead; - - /* Compare the fields */ - while (Sym1 && Sym2) { - - /* Compare the names of this field */ - if (!HasAnonName (Sym1) || !HasAnonName (Sym2)) { - if (strcmp (Sym1->Name, Sym2->Name) != 0) { - /* Names are not identical */ - return 0; - } - } - - /* Compare the types of this field */ - if (TypeCmp (Sym1->Type, Sym2->Type) < TC_EQUAL) { - /* Field types not equal */ - return 0; - } - - /* Get the pointers to the next fields */ - Sym1 = Sym1->NextSym; - Sym2 = Sym2->NextSym; - } - - /* Check both pointers against NULL to compare the field count */ - return (Sym1 == 0 && Sym2 == 0); -} - - - static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) /* Recursively compare two types. */ { @@ -190,8 +155,6 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) unsigned ElementCount; SymEntry* Sym1; SymEntry* Sym2; - SymTable* Tab1; - SymTable* Tab2; FuncDesc* F1; FuncDesc* F2; @@ -235,6 +198,40 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) return; } + /* Enums must be handled specially */ + if ((IsTypeEnum (lhs) || IsTypeEnum (rhs))) { + + /* Compare the tag types */ + Sym1 = GetESUSymEntry (lhs); + Sym2 = GetESUSymEntry (rhs); + + if (Sym1 != Sym2) { + if (Sym1 == 0 || Sym2 == 0) { + + /* Only one is an enum. So they can't be identical */ + SetResult (Result, TC_STRICT_COMPATIBLE); + + } else { + /* For the two to be identical, they must be in the same + ** scope and have the same name. + */ + if (Sym1->Owner != Sym2->Owner || + strcmp (Sym1->Name, Sym2->Name) != 0) { + + /* If any one of the two is incomplete, we can't guess + ** their underlying types and have to assume that they + ** be incompatible. + */ + if (SizeOf (lhs) == 0 || SizeOf (rhs) == 0) { + SetResult (Result, TC_INCOMPATIBLE); + return; + } + } + } + } + + } + /* On indirection level zero, a qualifier or sign difference is ** accepted. The types are no longer equal, but compatible. */ @@ -364,41 +361,25 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) case T_TYPE_STRUCT: case T_TYPE_UNION: - /* Compare the fields recursively. To do that, we fetch the - ** pointer to the struct definition from the type, and compare - ** the fields. - */ + /* Compare the tag types */ Sym1 = GetESUSymEntry (lhs); Sym2 = GetESUSymEntry (rhs); - /* If one symbol has a name, the names must be identical */ - if (!HasAnonName (Sym1) || !HasAnonName (Sym2)) { - if (strcmp (Sym1->Name, Sym2->Name) != 0) { - /* Names are not identical */ + CHECK (Sym1 != 0 || Sym2 != 0); + + if (Sym1 != Sym2) { + /* Both must be in the same scope and have the same name to + ** be identical. This shouldn't happen in the current code + ** base, but we still do this to be future-proof. + */ + if (Sym1->Owner != Sym2->Owner || + strcmp (Sym1->Name, Sym2->Name) != 0) { SetResult (Result, TC_INCOMPATIBLE); return; } } - /* Get the field tables from the struct entry */ - Tab1 = Sym1->V.S.SymTab; - Tab2 = Sym2->V.S.SymTab; - - /* One or both structs may be forward definitions. In this case, - ** the symbol tables are both non existant. Assume that the - ** structs are equal in this case. - */ - if (Tab1 != 0 && Tab2 != 0) { - - if (EqualSymTables (Tab1, Tab2) == 0) { - /* Field lists are not equal */ - SetResult (Result, TC_INCOMPATIBLE); - return; - } - - } - - /* Structs are equal */ + /* Both are identical */ break; } @@ -410,7 +391,7 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) /* Check if end of rhs reached */ if (rhs->C == T_END) { - SetResult (Result, TC_EQUAL); + SetResult (Result, TC_IDENTICAL); } else { SetResult (Result, TC_INCOMPATIBLE); } From 03b37cf7127deab8c5c7a659550e08b793610302 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 8 Aug 2020 06:46:55 +0800 Subject: [PATCH 0371/2710] Fixed type comparisons of typedefs and arrays. --- src/cc65/symtab.c | 71 +++++++++++++++++++++++----------------------- src/cc65/typecmp.c | 15 ++++++---- src/cc65/typecmp.h | 2 +- 3 files changed, 45 insertions(+), 43 deletions(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 30fab0593..316963ee9 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -558,34 +558,46 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags unsigned E_SCType = Entry->Flags & SC_TYPEMASK; unsigned SCType = Flags & SC_TYPEMASK; - /* Some symbols may be redeclared if certain requirements are met */ - if (IsTypeArray (T) && IsTypeArray (E_Type)) { + /* Existing typedefs cannot be redeclared as anything different */ + if (E_SCType == SC_TYPEDEF) { - /* Get the array sizes */ - long Size = GetElementCount (T); - long ESize = GetElementCount (E_Type); - - /* If we are handling arrays, the old entry or the new entry may be - ** an incomplete declaration. Accept this, and if the exsting entry - ** is incomplete, complete it. - */ - if ((Size != UNSPECIFIED && ESize != UNSPECIFIED && Size != ESize) || - TypeCmp (T + 1, E_Type + 1) < TC_EQUAL) { - /* Types not identical: Conflicting types */ - Error ("Conflicting array types for '%s[]'", Entry->Name); - Entry = 0; - } else { - /* Check if we have a size in the existing definition */ - if (ESize == UNSPECIFIED) { - /* Existing, size not given, use size from new def */ - SetElementCount (E_Type, Size); + if (SCType == SC_TYPEDEF) { + if (TypeCmp (E_Type, T) < TC_IDENTICAL) { + Error ("Conflicting types for typedef '%s'", Entry->Name); + Entry = 0; } + } else { + Error ("Redefinition of typedef '%s' as different kind of symbol", Entry->Name); + Entry = 0; } } else { - /* We have a symbol with this name already */ - if ((Entry->Flags & SC_FUNC) == SC_FUNC) { + /* Some symbols may be redeclared if certain requirements are met */ + if (IsTypeArray (T) && IsTypeArray (E_Type)) { + + /* Get the array sizes */ + long Size = GetElementCount (T); + long ESize = GetElementCount (E_Type); + + /* If we are handling arrays, the old entry or the new entry may be + ** an incomplete declaration. Accept this, and if the exsting entry + ** is incomplete, complete it. + */ + if ((Size != UNSPECIFIED && ESize != UNSPECIFIED && Size != ESize) || + TypeCmp (T + 1, E_Type + 1) < TC_EQUAL) { + /* Conflicting element types */ + Error ("Conflicting array types for '%s[]'", Entry->Name); + Entry = 0; + } else { + /* Check if we have a size in the existing definition */ + if (ESize == UNSPECIFIED) { + /* Existing, size not given, use size from new def */ + SetElementCount (E_Type, Size); + } + } + + } else if ((Entry->Flags & SC_FUNC) == SC_FUNC) { /* In case of a function, use the new type descriptor, since it ** contains pointers to the new symbol tables that are needed if @@ -616,22 +628,9 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags Entry = 0; } - } else if (E_SCType == SC_TYPEDEF) { - - if (SCType == SC_TYPEDEF) { - /* New typedef must be identical */ - if (TypeCmp (E_Type, T) < TC_EQUAL) { - Error ("Conflicting types for typedef '%s'", Entry->Name); - Entry = 0; - } - } else { - Error ("Redefinition of typedef '%s' as different kind of symbol", Entry->Name); - Entry = 0; - } - } else { - /* New type must be identical */ + /* New type must be equivalent */ if (SCType != E_SCType) { Error ("Redefinition of '%s' as different kind of symbol", Entry->Name); Entry = 0; diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index 39f13b79e..e14ace6b9 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -190,6 +190,7 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) */ if (LeftType == T_TYPE_PTR && RightType == T_TYPE_ARRAY) { RightType = T_TYPE_PTR; + SetResult (Result, TC_STRICT_COMPATIBLE); } /* If the underlying types are not identical, the types are incompatible */ @@ -350,12 +351,14 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) /* Check member count */ LeftCount = GetElementCount (lhs); RightCount = GetElementCount (rhs); - if (LeftCount != UNSPECIFIED && - RightCount != UNSPECIFIED && - LeftCount != RightCount) { - /* Member count given but different */ - SetResult (Result, TC_INCOMPATIBLE); - return; + if (LeftCount != RightCount) { + if (LeftCount != UNSPECIFIED && + RightCount != UNSPECIFIED) { + /* Member count given but different */ + SetResult (Result, TC_INCOMPATIBLE); + return; + } + SetResult (Result, TC_EQUAL); } break; diff --git a/src/cc65/typecmp.h b/src/cc65/typecmp.h index 5f95e42a1..3e95adb3f 100644 --- a/src/cc65/typecmp.h +++ b/src/cc65/typecmp.h @@ -55,7 +55,7 @@ typedef enum { TC_COMPATIBLE = TC_SIGN_DIFF, /* Compatible types */ TC_QUAL_DIFF, /* Types differ in qualifier of pointer */ TC_STRICT_COMPATIBLE, /* Strict compatibility */ - TC_EQUAL, /* Types are equal */ + TC_EQUAL, /* Types are equivalent */ TC_IDENTICAL /* Types are identical */ } typecmp_t; From 0fa18886c066278b6e1129b588dc9ff9e408f4d0 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 13 Aug 2020 09:27:53 +0800 Subject: [PATCH 0372/2710] Fixed copying structs/unions > 4 bytes. --- src/cc65/assignment.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 53e0653ed..6e25eaa56 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -58,22 +58,23 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) /* Copy the struct/union represented by RExpr to the one represented by LExpr */ { /* If the size is that of a basic type (char, int, long), we will copy - ** the struct using the primary register, otherwise we use memcpy. In - ** the former case, push the address only if really needed. + ** the struct using the primary register, otherwise we will use memcpy. */ const Type* ltype = LExpr->Type; const Type* stype = GetStructReplacementType (ltype); int UseReg = (stype != ltype); if (UseReg) { + /* Back up the address of lhs only if it is in the primary */ PushAddr (LExpr); } else { - ED_MarkExprAsRVal (LExpr); + /* Push the address of lhs as the destination of memcpy */ + ED_AddrExpr (LExpr); LoadExpr (CF_NONE, LExpr); g_push (CF_PTR | CF_UNSIGNED, 0); } - /* Get the expression on the right of the '=' into the primary */ + /* Get the expression on the right of the '=' */ hie1 (RExpr); /* Check for equality of the structs */ @@ -82,28 +83,27 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) "Incompatible types in assignment to '%s' from '%s'"); } - /* Do we copy using the primary? */ + /* Do we copy the value directly using the primary? */ if (UseReg) { - /* Check if the right hand side is an lvalue */ - if (ED_IsLVal (RExpr)) { + /* Check if the value of the rhs is not in the primary yet */ + if (!ED_IsLocPrimary (RExpr)) { /* Just load the value into the primary as the replacement type. */ LoadExpr (TypeOf (stype) | CF_FORCECHAR, RExpr); } - /* Store it into the new location */ + /* Store it into the location referred in the primary */ Store (LExpr, stype); } else { - /* Check if the right hand side is an lvalue */ - if (ED_IsLVal (RExpr)) { - /* We will use memcpy. Push the address of the rhs */ - ED_MarkExprAsRVal (RExpr); + /* The only way this can happen is in chained assignments */ + if (!ED_IsLocPrimary (RExpr)) { + ED_AddrExpr (RExpr); LoadExpr (CF_NONE, RExpr); } - /* Push the address (or whatever is in ax in case of errors) */ + /* Push the address of the rhs as the source of memcpy */ g_push (CF_PTR | CF_UNSIGNED, 0); /* Load the size of the struct or union into the primary */ @@ -111,6 +111,9 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) /* Call the memcpy function */ g_call (CF_FIXARGC, Func_memcpy, 4); + + /* Restore the indirection level of lhs */ + ED_IndExpr (LExpr); } return 1; @@ -257,6 +260,6 @@ void Assignment (ExprDesc* Expr) } - /* Value is still in primary and not an lvalue */ + /* Value might be still in primary and not an lvalue */ ED_FinalizeRValLoad (Expr); } From 0dfe9ff5fe8ac5056aa37d727b2f986e4732faab Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 14 Aug 2020 08:32:22 +0800 Subject: [PATCH 0373/2710] Fixed testing 'struct->field'. --- src/cc65/assignment.c | 8 +++++++- src/cc65/expr.c | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 6e25eaa56..0151a9000 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -77,7 +77,7 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) /* Get the expression on the right of the '=' */ hie1 (RExpr); - /* Check for equality of the structs */ + /* Check for equality of the structs/unions */ if (TypeCmp (ltype, RExpr->Type) < TC_STRICT_COMPATIBLE) { TypeCompatibilityDiagnostic (ltype, RExpr->Type, 1, "Incompatible types in assignment to '%s' from '%s'"); @@ -114,6 +114,12 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) /* Restore the indirection level of lhs */ ED_IndExpr (LExpr); + + /* Clear the tested flag set during loading. This is not neccessary + ** currently (and probably ever) as a struct/union cannot be converted + ** to a boolean in C, but there is no harm to be future-proof. + */ + ED_MarkAsUntested (LExpr); } return 1; diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 817234ec8..f75015305 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1301,6 +1301,9 @@ static void StructRef (ExprDesc* Expr) LoadExpr (CF_NONE, Expr); } + /* Clear the tested flag set during loading */ + ED_MarkAsUntested (Expr); + /* The type is the field type plus any qualifiers from the struct/union */ if (IsClassStruct (Expr->Type)) { Q = GetQualifier (Expr->Type); From dc83eb15aff2eaf0cab5f3964d93846740eb7feb Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 14 Aug 2020 16:12:17 +0200 Subject: [PATCH 0374/2710] added test related to issue #1181 --- test/val/bug1181.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 test/val/bug1181.c diff --git a/test/val/bug1181.c b/test/val/bug1181.c new file mode 100644 index 000000000..4ea2d54bf --- /dev/null +++ b/test/val/bug1181.c @@ -0,0 +1,86 @@ + +/* bug #1181 - Testing struct member against NULL is broken */ + +#include <stdio.h> +#include <stdlib.h> + +struct { + int a; +} s = { 256 }, *ps = &s; + +int res = EXIT_SUCCESS; + +void test1(void) +{ + if (ps->a) { + printf("OK\n"); + } else { + printf("ERROR: %d\n", ps->a); + res = EXIT_FAILURE; + } +} + +typedef struct _MENUITEM +{ + char *name; +} MENUITEM; + +typedef struct _MENU +{ + struct _MENUITEM *items; +} MENU; + +/* note: the behaviour changes when these strings are changed! */ +static unsigned char oi31[] = {"Browser Exec Setup"}; +static unsigned char oi36[] = {"Browser auto sort"}; +static unsigned char oi47[] = {"Browser startup"}; +static unsigned char oi49[] = {"Browser charset"}; +static unsigned char oi55[] = {"Menu color scheme"}; +static unsigned char oi63[] = {"Menu input scheme"}; +static unsigned char oi35[] = {"back"}; + +MENUITEM optionsitems_menu[] = { + {oi31}, + {oi36}, + {oi47}, + {oi49}, + {oi55}, + {oi63}, + {oi35}, + {NULL} +}; + +static MENU optionsmenu_menu = { + &optionsitems_menu[0], +}; + +unsigned char __fastcall__ menu_getnumitems(MENU *menu) +{ +static unsigned char numitems; +MENUITEM *items; + numitems = 0; + items = menu->items; + while(items->name) + { + ++numitems; + ++items; + } + return numitems; +} + +int main(void) +{ + unsigned char i = 0; + + i = menu_getnumitems(&optionsmenu_menu); + printf("numitems (expected 7): %d\n", i); + + if (i != 7) { + printf("failed\n"); + res = EXIT_FAILURE; + } + printf("passed\n"); + + test1(); + return res; +} From 8a417ff03952b30ed478d4414c42fbf3bed5c28b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 12 Aug 2020 21:33:46 +0800 Subject: [PATCH 0375/2710] Improved ESU declaration failure handling. --- src/cc65/declare.c | 73 ++++++++++++++++++++++++++++++---------------- src/cc65/symtab.c | 25 ++++++++++++---- src/cc65/symtab.h | 4 +-- 3 files changed, 70 insertions(+), 32 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 41f96c20a..259f8b8ac 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -479,7 +479,7 @@ static void ParseStorageClass (DeclSpec* D, unsigned DefStorage) -static SymEntry* ESUForwardDecl (const char* Name, unsigned Type) +static SymEntry* ESUForwardDecl (const char* Name, unsigned Flags) /* Handle an enum, struct or union forward decl */ { /* Try to find an enum/struct/union with the given name. If there is none, @@ -487,12 +487,12 @@ static SymEntry* ESUForwardDecl (const char* Name, unsigned Type) */ SymEntry* Entry = FindTagSym (Name); if (Entry == 0) { - if (Type != SC_ENUM) { - Entry = AddStructSym (Name, Type, 0, 0); + if ((Flags & SC_ESUTYPEMASK) != SC_ENUM) { + Entry = AddStructSym (Name, Flags, 0, 0); } else { - Entry = AddEnumSym (Name, 0, 0); + Entry = AddEnumSym (Name, Flags, 0, 0); } - } else if ((Entry->Flags & SC_TYPEMASK) != Type) { + } else if ((Entry->Flags & SC_TYPEMASK) != (Flags & SC_ESUTYPEMASK)) { /* Already defined, but not the same type class */ Error ("Symbol '%s' is already different kind", Name); } @@ -551,14 +551,17 @@ static SymEntry* ParseEnumDecl (const char* Name) unsigned long MaxConstant = 0; const Type* NewType = 0; /* new member type */ const Type* MemberType = type_int; /* default member type */ + unsigned Flags = 0; + unsigned PrevErrorCount = ErrorCount; + - /* Accept forward definitions */ if (CurTok.Tok != TOK_LCURLY) { + /* Just a forward definition */ return ESUForwardDecl (Name, SC_ENUM); } - /* Add the enum tag */ - AddEnumSym (Name, 0, 0); + /* Add a forward declaration for the enum tag in the current lexical level */ + AddEnumSym (Name, 0, 0, 0); /* Skip the opening curly brace */ NextToken (); @@ -695,7 +698,13 @@ static SymEntry* ParseEnumDecl (const char* Name) } FieldTab = GetSymTab (); - return AddEnumSym (Name, MemberType, FieldTab); + + /* Return a fictitious symbol if errors occurred during parsing */ + if (PrevErrorCount != ErrorCount) { + Flags |= SC_FICTITIOUS; + } + + return AddEnumSym (Name, Flags, MemberType, FieldTab); } @@ -829,19 +838,21 @@ static SymEntry* ParseUnionDecl (const char* Name) unsigned FieldSize; int FieldWidth; /* Width in bits, -1 if not a bit-field */ SymTable* FieldTab; - SymEntry* StructTypeEntry; + SymEntry* UnionTagEntry; SymEntry* Entry; + unsigned Flags = 0; + unsigned PrevErrorCount = ErrorCount; if (CurTok.Tok != TOK_LCURLY) { - /* Just a forward declaration. */ + /* Just a forward declaration */ return ESUForwardDecl (Name, SC_UNION); } - /* Add a forward declaration for the struct in the current lexical level */ - StructTypeEntry = AddStructSym (Name, SC_UNION, 0, 0); + /* Add a forward declaration for the union tag in the current lexical level */ + UnionTagEntry = AddStructSym (Name, SC_UNION, 0, 0); - StructTypeEntry->V.S.ACount = 0; + UnionTagEntry->V.S.ACount = 0; /* Skip the curly brace */ NextToken (); @@ -883,7 +894,7 @@ static SymEntry* ParseUnionDecl (const char* Name) /* This is an anonymous struct or union. Copy the fields ** into the current level. */ - AnonFieldName (Decl.Ident, "field", StructTypeEntry->V.S.ACount); + AnonFieldName (Decl.Ident, "field", UnionTagEntry->V.S.ACount); } else { /* A non bit-field without a name is legal but useless */ Warning ("Declaration does not declare anything"); @@ -902,7 +913,7 @@ static SymEntry* ParseUnionDecl (const char* Name) } else { if (IsAnonName (Decl.Ident)) { Entry = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0); - Entry->V.A.ANumber = StructTypeEntry->V.S.ACount++; + Entry->V.A.ANumber = UnionTagEntry->V.S.ACount++; AliasAnonStructFields (&Decl, Entry); } else { AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0); @@ -929,8 +940,13 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { Error ("Empty union type '%s' is not supported", Name); } + /* Return a fictitious symbol if errors occurred during parsing */ + if (PrevErrorCount != ErrorCount) { + Flags |= SC_FICTITIOUS; + } + /* Make a real entry from the forward decl and return it */ - return AddStructSym (Name, SC_UNION | SC_DEF, UnionSize, FieldTab); + return AddStructSym (Name, SC_UNION | SC_DEF | Flags, UnionSize, FieldTab); } @@ -944,19 +960,21 @@ static SymEntry* ParseStructDecl (const char* Name) unsigned BitOffs; /* Bit offset for bit-fields */ int FieldWidth; /* Width in bits, -1 if not a bit-field */ SymTable* FieldTab; - SymEntry* StructTypeEntry; + SymEntry* StructTagEntry; SymEntry* Entry; + unsigned Flags = 0; + unsigned PrevErrorCount = ErrorCount; if (CurTok.Tok != TOK_LCURLY) { - /* Just a forward declaration. */ + /* Just a forward declaration */ return ESUForwardDecl (Name, SC_STRUCT); } - /* Add a forward declaration for the struct in the current lexical level */ - StructTypeEntry = AddStructSym (Name, SC_STRUCT, 0, 0); + /* Add a forward declaration for the struct tag in the current lexical level */ + StructTagEntry = AddStructSym (Name, SC_STRUCT, 0, 0); - StructTypeEntry->V.S.ACount = 0; + StructTagEntry->V.S.ACount = 0; /* Skip the curly brace */ NextToken (); @@ -1050,7 +1068,7 @@ static SymEntry* ParseStructDecl (const char* Name) /* This is an anonymous struct or union. Copy the ** fields into the current level. */ - AnonFieldName (Decl.Ident, "field", StructTypeEntry->V.S.ACount); + AnonFieldName (Decl.Ident, "field", StructTagEntry->V.S.ACount); } else { /* A non bit-field without a name is legal but useless */ Warning ("Declaration does not declare anything"); @@ -1078,7 +1096,7 @@ static SymEntry* ParseStructDecl (const char* Name) } else { if (IsAnonName (Decl.Ident)) { Entry = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize); - Entry->V.A.ANumber = StructTypeEntry->V.S.ACount++; + Entry->V.A.ANumber = StructTagEntry->V.S.ACount++; AliasAnonStructFields (&Decl, Entry); } else { AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize); @@ -1116,8 +1134,13 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { Error ("Empty struct type '%s' is not supported", Name); } + /* Return a fictitious symbol if errors occurred during parsing */ + if (PrevErrorCount != ErrorCount) { + Flags |= SC_FICTITIOUS; + } + /* Make a real entry from the forward decl and return it */ - return AddStructSym (Name, SC_STRUCT | SC_DEF, StructSize, FieldTab); + return AddStructSym (Name, SC_STRUCT | SC_DEF | Flags, StructSize, FieldTab); } diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 316963ee9..53c30254d 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -682,13 +682,21 @@ static void AddSymEntry (SymTable* T, SymEntry* S) -SymEntry* AddEnumSym (const char* Name, const Type* Type, SymTable* Tab) +SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTable* Tab) /* Add an enum entry and return it */ { SymTable* CurTagTab = TagTab; + SymEntry* Entry; + + if ((Flags & SC_FICTITIOUS) == 0) { + /* Do we have an entry with this name already? */ + Entry = FindSymInTable (CurTagTab, Name, HashStr (Name)); + } else { + /* Add a fictitious symbol in the fail-safe table */ + Entry = 0; + CurTagTab = FailSafeTab; + } - /* Do we have an entry with this name already? */ - SymEntry* Entry = FindSymInTable (CurTagTab, Name, HashStr (Name)); if (Entry) { /* We do have an entry. This may be a forward, so check it. */ @@ -749,8 +757,15 @@ SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTabl /* Type must be struct or union */ PRECONDITION (Type == SC_STRUCT || Type == SC_UNION); - /* Do we have an entry with this name already? */ - Entry = FindSymInTable (CurTagTab, Name, HashStr (Name)); + if ((Flags & SC_FICTITIOUS) == 0) { + /* Do we have an entry with this name already? */ + Entry = FindSymInTable (CurTagTab, Name, HashStr (Name)); + } else { + /* Add a fictitious symbol in the fail-safe table */ + Entry = 0; + CurTagTab = FailSafeTab; + } + if (Entry) { /* We do have an entry. This may be a forward, so check it. */ diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h index 79f656f95..f04517fed 100644 --- a/src/cc65/symtab.h +++ b/src/cc65/symtab.h @@ -149,10 +149,10 @@ unsigned short FindSPAdjustment (const char* Name); -SymEntry* AddEnumSym (const char* Name, const Type* Type, SymTable* Tab); +SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTable* Tab); /* Add an enum entry and return it */ -SymEntry* AddStructSym (const char* Name, unsigned Type, unsigned Size, SymTable* Tab); +SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTable* Tab); /* Add a struct/union entry and return it */ SymEntry* AddBitField (const char* Name, unsigned Offs, unsigned BitOffs, unsigned BitWidth); From 44d52935dafde30886caf03d8c4b1fe1f3832870 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 12 Aug 2020 21:35:44 +0800 Subject: [PATCH 0376/2710] Utility for getting the composite types of functions. --- src/cc65/typecmp.c | 134 +++++++++++++++++++++++++++++++++++++++++++++ src/cc65/typecmp.h | 2 + 2 files changed, 136 insertions(+) diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index e14ace6b9..e3e42e67f 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -421,3 +421,137 @@ typecmp_t TypeCmp (const Type* lhs, const Type* rhs) /* Return the result */ return Result; } + + + +static Type* DoComposite (Type* lhs, const Type* rhs); + +static void CompositeFuncParams (const FuncDesc* F1, const FuncDesc* F2) +/* Composite two function symbol tables regarding function parameters */ +{ + /* Get the symbol tables */ + const SymTable* Tab1 = F1->SymTab; + const SymTable* Tab2 = F2->SymTab; + + /* Composite the parameter lists */ + const SymEntry* Sym1 = Tab1->SymHead; + const SymEntry* Sym2 = Tab2->SymHead; + + /* Composite the fields */ + while (Sym1 && (Sym1->Flags & SC_PARAM) && Sym2 && (Sym2->Flags & SC_PARAM)) { + + /* Get the symbol types */ + Type* Type1 = Sym1->Type; + Type* Type2 = Sym2->Type; + + /* If either of both functions is old style, apply the default + ** promotions to the parameter type. + */ + if (F1->Flags & FD_OLDSTYLE) { + if (IsClassInt (Type1)) { + Type1 = IntPromotion (Type1); + } + } + if (F2->Flags & FD_OLDSTYLE) { + if (IsClassInt (Type2)) { + Type2 = IntPromotion (Type2); + } + } + + /* Composite this field */ + DoComposite (Type1, Type2); + + /* Get the pointers to the next fields */ + Sym1 = Sym1->NextSym; + Sym2 = Sym2->NextSym; + } +} + + + +static Type* DoComposite (Type* lhs, const Type* rhs) +/* Recursively composite two types into lhs */ +{ + FuncDesc* F1; + FuncDesc* F2; + long LeftCount, RightCount; + + /* Composite two types */ + while (lhs->C != T_END) { + + /* Check if the end of the type string is reached */ + if (rhs->C == T_END) { + return lhs; + } + + /* Check for sanity */ + CHECK (GetUnderlyingTypeCode (lhs) == GetUnderlyingTypeCode (rhs)); + + /* Check for special type elements */ + + if (IsTypeFunc (lhs)) { + /* Composite the function descriptors */ + F1 = GetFuncDesc (lhs); + F2 = GetFuncDesc (rhs); + + /* If one of both functions has an empty parameter list (which + ** does also mean, it is not a function definition, because the + ** flag is reset in this case), it is replaced by the other + ** definition, provided that the other has no default + ** promotions in the parameter list. If none of both parameter + ** lists is empty, we have to composite the parameter lists and + ** other attributes. + */ + if ((F1->Flags & FD_EMPTY) == FD_EMPTY) { + if ((F2->Flags & FD_EMPTY) == 0) { + /* Copy the parameters and flags */ + TypeCopy (lhs, rhs); + F1->Flags = F2->Flags; + } + } else if ((F2->Flags & FD_EMPTY) == 0) { + /* Composite the parameter lists */ + CompositeFuncParams (F1, F2); + } + + } else if (IsTypeArray (lhs)) { + /* Check member count */ + LeftCount = GetElementCount (lhs); + RightCount = GetElementCount (rhs); + + /* Set composite type if it is requested */ + if (LeftCount != UNSPECIFIED) { + SetElementCount (lhs, LeftCount); + } else if (RightCount != UNSPECIFIED) { + SetElementCount (lhs, RightCount); + } + } + + /* Next type string element */ + ++lhs; + ++rhs; + } + + return lhs; +} + + + +FuncDesc* RefineFuncDesc (Type* OldType, const Type* NewType) +/* Refine the existing function descriptor with a new one */ +{ + FuncDesc* Old = GetFuncDesc (OldType); + FuncDesc* New = GetFuncDesc (NewType); + + CHECK (Old != 0 && New != 0); + + if ((New->Flags & FD_EMPTY) == 0) { + if ((Old->Flags & FD_EMPTY) == 0) { + DoComposite (OldType, NewType); + } else { + TypeCopy (OldType, NewType); + Old->Flags &= ~FD_EMPTY; + } + } + + return Old; +} diff --git a/src/cc65/typecmp.h b/src/cc65/typecmp.h index 3e95adb3f..f4a87bcf6 100644 --- a/src/cc65/typecmp.h +++ b/src/cc65/typecmp.h @@ -70,6 +70,8 @@ typedef enum { typecmp_t TypeCmp (const Type* lhs, const Type* rhs); /* Compare two types and return the result */ +FuncDesc* RefineFuncDesc (Type* OldType, const Type* NewType); +/* Refine the existing function descriptor with a new one */ /* End of typecmp.h */ From 13ed557b92586765ccc35b43ddc2359521bcca70 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 12 Aug 2020 21:35:47 +0800 Subject: [PATCH 0377/2710] Fixed compatibility checking of function declarations by using the composite types of them. --- src/cc65/codeinfo.c | 2 +- src/cc65/compile.c | 32 ++++++------ src/cc65/datatype.c | 22 ++++++++ src/cc65/datatype.h | 6 +++ src/cc65/declare.c | 2 +- src/cc65/function.c | 4 +- src/cc65/locals.c | 22 +++++--- src/cc65/pragma.c | 2 +- src/cc65/symentry.h | 2 +- src/cc65/symtab.c | 123 ++++++++++++++++++++++++-------------------- 10 files changed, 129 insertions(+), 88 deletions(-) diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index b1e5668ce..c9dea5071 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -392,7 +392,7 @@ fncls_t GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg) /* Did we find it in the top-level table? */ if (E && IsTypeFunc (E->Type)) { - FuncDesc* D = E->V.F.Func; + FuncDesc* D = GetFuncCompositeDesc (E); /* A variadic function will use the Y register (the parameter list ** size is passed there). A fastcall function will use the A or A/X diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 6c881d9a8..54918fb21 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -177,18 +177,23 @@ static void Parse (void) } /* If this is a function declarator that is not followed by a comma - ** or semicolon, it must be followed by a function body. If this is - ** the case, convert an empty parameter list into one accepting no - ** parameters (same as void) as required by the standard. + ** or semicolon, it must be followed by a function body. */ - if ((Decl.StorageClass & SC_FUNC) != 0 && - (CurTok.Tok != TOK_COMMA) && - (CurTok.Tok != TOK_SEMI)) { + if ((Decl.StorageClass & SC_FUNC) != 0) { + if (CurTok.Tok != TOK_COMMA && CurTok.Tok != TOK_SEMI) { + /* A definition */ + Decl.StorageClass |= SC_DEF; - FuncDesc* D = GetFuncDesc (Decl.Type); - - if (D->Flags & FD_EMPTY) { - D->Flags = (D->Flags & ~FD_EMPTY) | FD_VOID_PARAM; + /* Convert an empty parameter list into one accepting no + ** parameters (same as void) as required by the standard. + */ + FuncDesc* D = GetFuncDesc (Decl.Type); + if (D->Flags & FD_EMPTY) { + D->Flags = (D->Flags & ~FD_EMPTY) | FD_VOID_PARAM; + } + } else { + /* Just a declaration */ + Decl.StorageClass |= SC_DECL; } } @@ -309,13 +314,6 @@ SkipOneDecl: /* Prototype only */ NextToken (); } else { - - /* Function body. Check for duplicate function definitions */ - if (SymIsDef (Entry)) { - Error ("Body for function '%s' has already been defined", - Entry->Name); - } - /* Parse the function body */ NewFunc (Entry); } diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 5794bf5a6..94aea9cc1 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1115,6 +1115,28 @@ Type* GetFuncReturn (Type* T) +Type* GetFuncCompositeType (SymEntry* Func) +/* Get the composite function type */ +{ + /* Be sure it's a function type */ + CHECK (IsClassFunc (Func->Type)); + + return Func->V.F.Composite->Type; +} + + + +FuncDesc* GetFuncCompositeDesc (SymEntry* Func) +/* Get the composite function type descriptor */ +{ + /* Be sure it's a function type */ + CHECK (IsClassFunc (Func->Type)); + + return GetFuncDesc (Func->V.F.Composite->Type); +} + + + long GetElementCount (const Type* T) /* Get the element count of the array specified in T (which must be of ** array type). diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 6cbad302f..1ff8333c6 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -753,6 +753,12 @@ void SetFuncDesc (Type* T, FuncDesc* F); Type* GetFuncReturn (Type* T) attribute ((const)); /* Return a pointer to the return type of a function or pointer-to-function type */ +Type* GetFuncCompositeType (struct SymEntry* Func); +/* Get the composite function type */ + +FuncDesc* GetFuncCompositeDesc (struct SymEntry* Func); +/* Get the composite function type descriptor */ + long GetElementCount (const Type* T); /* Get the element count of the array specified in T (which must be of ** array type). diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 259f8b8ac..36286b6d5 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1749,7 +1749,7 @@ static void Declarator (const DeclSpec* Spec, Declaration* D, declmode_t Mode) /* Was there a previous entry? If so, copy WrappedCall info from it */ PrevEntry = FindGlobalSym (D->Ident); if (PrevEntry && PrevEntry->Flags & SC_FUNC) { - FuncDesc* D = PrevEntry->V.F.Func; + FuncDesc* D = GetFuncDesc (PrevEntry->Type); if (D->WrappedCall && !F->WrappedCall) { F->WrappedCall = D->WrappedCall; F->WrappedCallData = D->WrappedCallData; diff --git a/src/cc65/function.c b/src/cc65/function.c index 5d0b09380..b2291b312 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -295,7 +295,7 @@ static void F_RestoreRegVars (Function* F) } /* Get the first symbol from the function symbol table */ - Sym = F->FuncEntry->V.F.Func->SymTab->SymHead; + Sym = GetFuncDesc (F->FuncEntry->Type)->SymTab->SymHead; /* Walk through all symbols checking for register variables */ while (Sym) { @@ -383,7 +383,7 @@ void NewFunc (SymEntry* Func) const Type* RType; /* Real type used for struct parameters */ /* Get the function descriptor from the function entry */ - FuncDesc* D = Func->V.F.Func; + FuncDesc* D = GetFuncDesc (Func->Type); /* Allocate the function activation record for the function */ CurrentFunc = NewFunction (Func); diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 12caa7aa2..a21a09e8e 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -427,8 +427,8 @@ static void ParseOneDecl (const DeclSpec* Spec) ParseDecl (Spec, &Decl, DM_NEED_IDENT); /* Check if there are any non-extern storage classes set for function - ** declarations. The only valid storage class for function declarations - ** inside functions is 'extern'. + ** declarations. Function can only be declared inside functions with the + ** 'extern' storage class specifier or no storage class specifier at all. */ if ((Decl.StorageClass & SC_FUNC) == SC_FUNC) { @@ -439,12 +439,11 @@ static void ParseOneDecl (const DeclSpec* Spec) Error ("Illegal storage class on function"); } - /* The default storage class could be wrong. Just use 'extern' in all - ** cases. - */ + /* The default storage class could be wrong. Just clear them */ Decl.StorageClass &= ~SC_STORAGEMASK; - Decl.StorageClass |= SC_EXTERN; + /* This is always a declaration */ + Decl.StorageClass |= SC_DECL; } /* If we don't have a name, this was flagged as an error earlier. @@ -456,6 +455,7 @@ static void ParseOneDecl (const DeclSpec* Spec) /* If the symbol is not marked as external, it will be defined now */ if ((Decl.StorageClass & SC_FICTITIOUS) == 0 && + (Decl.StorageClass & SC_DECL) == 0 && (Decl.StorageClass & SC_EXTERN) == 0) { Decl.StorageClass |= SC_DEF; } @@ -500,8 +500,14 @@ static void ParseOneDecl (const DeclSpec* Spec) } } - /* Add the symbol to the symbol table */ - AddLocalSym (Decl.Ident, Decl.Type, Decl.StorageClass, 0); + if ((Decl.StorageClass & SC_EXTERN) == SC_EXTERN || + (Decl.StorageClass & SC_FUNC) == SC_FUNC) { + /* Add the global symbol to the local symbol table */ + AddGlobalSym (Decl.Ident, Decl.Type, Decl.StorageClass); + } else { + /* Add the local symbol to the local symbol table */ + AddLocalSym (Decl.Ident, Decl.Type, Decl.StorageClass, 0); + } } } diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index 93c83906f..a0876a550 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -527,7 +527,7 @@ static void WrappedCallPragma (StrBuf* B) PushWrappedCall(Entry, (unsigned char) Val); Entry->Flags |= SC_REF; - Entry->V.F.Func->Flags |= FD_CALL_WRAPPER; + GetFuncCompositeDesc (Entry)->Flags |= FD_CALL_WRAPPER; } else { diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index cfc6379d3..6b05dd72b 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -191,7 +191,7 @@ struct SymEntry { /* Data for functions */ struct { - struct FuncDesc* Func; /* Function descriptor */ + SymEntry* Composite;/* Entry to hold composite function type */ struct Segments* Seg; /* Segments for this function */ struct LiteralPool* LitPool; /* Literal pool for this function */ } F; diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 53c30254d..10ec88d79 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -45,6 +45,7 @@ #include "xmalloc.h" /* cc65 */ +#include "anonname.h" #include "asmcode.h" #include "asmlabel.h" #include "codegen.h" @@ -558,9 +559,10 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags unsigned E_SCType = Entry->Flags & SC_TYPEMASK; unsigned SCType = Flags & SC_TYPEMASK; - /* Existing typedefs cannot be redeclared as anything different */ + /* Some symbols may be redeclared if certain requirements are met */ if (E_SCType == SC_TYPEDEF) { + /* Existing typedefs cannot be redeclared as anything different */ if (SCType == SC_TYPEDEF) { if (TypeCmp (E_Type, T) < TC_IDENTICAL) { Error ("Conflicting types for typedef '%s'", Entry->Name); @@ -571,9 +573,42 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags Entry = 0; } + } else if ((Entry->Flags & SC_FUNC) == SC_FUNC) { + + /* In case of a function, use the new type descriptor, since it + ** contains pointers to the new symbol tables that are needed if + ** an actual function definition follows. Be sure not to use the + ** new descriptor if it contains a function declaration with an + ** empty parameter list. + */ + if (IsTypeFunc (T)) { + + /* Check for duplicate function definitions */ + if (SymIsDef (Entry) && (Flags & SC_DEF) == SC_DEF) { + Error ("Body for function '%s' has already been defined", + Entry->Name); + Entry = 0; + } else { + /* New type must be compatible with the composite prototype */ + if (TypeCmp (GetFuncCompositeType (Entry), T) < TC_EQUAL) { + Error ("Conflicting function types for '%s'", Entry->Name); + Entry = 0; + } else { + /* Refine the existing composite prototype with this new + ** one. + */ + RefineFuncDesc (GetFuncCompositeType (Entry), T); + } + } + + } else { + Error ("Redefinition of function '%s' as different kind of symbol", Entry->Name); + Entry = 0; + } + } else { - /* Some symbols may be redeclared if certain requirements are met */ + /* Redeclarations of ESU types are checked elsewhere */ if (IsTypeArray (T) && IsTypeArray (E_Type)) { /* Get the array sizes */ @@ -597,37 +632,6 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags } } - } else if ((Entry->Flags & SC_FUNC) == SC_FUNC) { - - /* In case of a function, use the new type descriptor, since it - ** contains pointers to the new symbol tables that are needed if - ** an actual function definition follows. Be sure not to use the - ** new descriptor if it contains a function declaration with an - ** empty parameter list. - */ - if (IsTypeFunc (T)) { - - /* New type must be equivalent */ - if (TypeCmp (E_Type, T) < TC_EQUAL) { - Error ("Conflicting function types for '%s'", Entry->Name); - Entry = 0; - } else { - /* Get the function descriptor from the new type */ - FuncDesc* F = GetFuncDesc (T); - /* Use this new function descriptor if it doesn't contain - ** an empty parameter list. - */ - if ((F->Flags & FD_EMPTY) == 0) { - Entry->V.F.Func = F; - SetFuncDesc (E_Type, F); - } - } - - } else { - Error ("Redefinition of function '%s' as different kind of symbol", Entry->Name); - Entry = 0; - } - } else { /* New type must be equivalent */ @@ -1067,7 +1071,8 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs } else if ((Flags & SC_REGISTER) == SC_REGISTER) { Entry->V.R.RegOffs = Offs; Entry->V.R.SaveOffs = StackPtr; - } else if ((Flags & SC_EXTERN) == SC_EXTERN) { + } else if ((Flags & SC_EXTERN) == SC_EXTERN || + (Flags & SC_FUNC) == SC_FUNC) { Entry->V.L.Label = Offs; SymSetAsmName (Entry); } else if ((Flags & SC_STATIC) == SC_STATIC) { @@ -1080,7 +1085,6 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs /* Add the entry to the symbol table */ AddSymEntry (Tab, Entry); - } /* Return the entry */ @@ -1092,16 +1096,12 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) /* Add an external or global symbol to the symbol table and return the entry */ { - /* There is some special handling for functions, so check if it is one */ - int IsFunc = IsTypeFunc (T); - - /* Functions must be inserted in the global symbol table */ - SymTable* Tab = IsFunc ? SymTab0 : SymTab; + /* Use the global symbol table */ + SymTable* Tab = SymTab; /* Do we have an entry with this name already? */ - SymEntry* Entry = FindSymInTable (Tab, Name, HashStr (Name)); + SymEntry* Entry = FindSymInTree (Tab, Name); if (Entry) { - /* We have a symbol with this name already */ if (HandleSymRedefinition (Entry, T, Flags)) { /* Use the fail-safe table for fictitious symbols */ @@ -1111,31 +1111,34 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) } else { /* If a static declaration follows a non-static declaration, then - ** warn about the conflict. (It will compile a public declaration.) + ** warn about the conflict. It will compile an extern declaration. */ if ((Flags & SC_EXTERN) == 0 && (Entry->Flags & SC_EXTERN) != 0) { Warning ("static declaration follows non-static declaration of '%s'.", Name); } - /* An extern declaration must not change the current linkage. */ - if (IsFunc || (Flags & (SC_EXTERN | SC_STORAGE)) == SC_EXTERN) { - Flags &= ~SC_EXTERN; - } - - /* If a public declaration follows a static declaration, then - ** warn about the conflict. (It will compile a public declaration.) + /* If an extern declaration follows a static declaration, then + ** warn about the conflict. It will compile an extern declaration. */ if ((Flags & SC_EXTERN) != 0 && (Entry->Flags & SC_EXTERN) == 0) { - Warning ("public declaration follows static declaration of '%s'.", Name); + Warning ("extern declaration follows static declaration of '%s'.", Name); + } + + /* Update existing function type if this is a definition */ + if (IsTypeFunc (Entry->Type) && + !SymIsDef (Entry) && + (Flags & SC_DEF) == SC_DEF) { + TypeFree (Entry->Type); + Entry->Type = TypeDup (T); } /* Add the new flags */ - Entry->Flags |= Flags; + Entry->Flags |= Flags & ~SC_EXTERN; } } - if (Entry == 0) { + if (Entry == 0 || Entry->Owner != Tab) { /* Create a new entry */ Entry = NewSymEntry (Name, Flags); @@ -1143,12 +1146,18 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) /* Set the symbol attributes */ Entry->Type = TypeDup (T); - /* If this is a function, set the function descriptor and clear + /* If this is a function, set the function composite typeand clear ** additional fields. */ - if (IsFunc) { - Entry->V.F.Func = GetFuncDesc (Entry->Type); - Entry->V.F.Seg = 0; + if (IsTypeFunc (T)) { + /* GitHub #1167 - Make a composite prototype */ + ident Ident; + AnonName (Ident, "prototype"); + Entry->V.F.Composite = NewSymEntry (Ident, SC_EXTERN | SC_DECL | SC_ALIAS | SC_FUNC); + Entry->V.F.Composite->Type = TypeDup (T); + AddSymEntry (SymTab0, Entry->V.F.Composite); + + Entry->V.F.Seg = 0; } /* Add the assembler name of the symbol */ From b19bb14348b2394bbd504c5c987c475bfb35de3a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 12 Aug 2020 21:35:50 +0800 Subject: [PATCH 0378/2710] Fixed checking conflitcing declarations with external vs other linkage. --- src/cc65/symtab.c | 86 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 63 insertions(+), 23 deletions(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 10ec88d79..443d0a21c 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -1045,6 +1045,22 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs if (SymIsDef (Entry) && (Flags & SC_DEF) == SC_DEF) { Error ("Multiple definition of '%s'", Entry->Name); Entry = 0; + } else if ((Flags & (SC_AUTO | SC_REGISTER)) != 0 && + (Entry->Flags & SC_EXTERN) != 0) { + /* Check for local storage class conflict */ + Error ("Declaration of '%s' with no linkage follows extern declaration", + Name); + Entry = 0; + } else { + /* If a static declaration follows a non-static declaration, + ** then it is an error. + */ + if ((Flags & SC_DEF) && + (Flags & SC_EXTERN) == 0 && + (Entry->Flags & SC_EXTERN) != 0) { + Error ("Static declaration of '%s' follows extern declaration", Name); + Entry = 0; + } } } @@ -1104,38 +1120,62 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) if (Entry) { /* We have a symbol with this name already */ if (HandleSymRedefinition (Entry, T, Flags)) { - /* Use the fail-safe table for fictitious symbols */ - Tab = FailSafeTab; Entry = 0; - - } else { - + } else if ((Entry->Flags & (SC_AUTO | SC_REGISTER)) != 0) { + /* Check for local storage class conflict */ + Error ("Extern declaration of '%s' follows declaration with no linkage", + Name); + Entry = 0; + } else if ((Flags & SC_ESUTYPEMASK) != SC_TYPEDEF) { /* If a static declaration follows a non-static declaration, then - ** warn about the conflict. It will compile an extern declaration. + ** diagnose the conflict. It will warn and compile an extern + ** declaration if both declarations are global, otherwise give an + ** error. */ - if ((Flags & SC_EXTERN) == 0 && (Entry->Flags & SC_EXTERN) != 0) { - Warning ("static declaration follows non-static declaration of '%s'.", Name); + if (Tab == SymTab0 && + (Flags & SC_EXTERN) == 0 && + (Entry->Flags & SC_EXTERN) != 0) { + Warning ("Static declaration of '%s' follows non-static declaration", Name); + } else if ((Flags & SC_EXTERN) != 0 && + (Entry->Owner == SymTab0 || (Entry->Flags & SC_DEF) != 0) && + (Entry->Flags & SC_EXTERN) == 0) { + /* It is OK if a global extern declaration follows a global + ** non-static declaration, but an error if either of them is + ** local, as the two would be referring to different objects. + ** It is an error as well if a global non-static declaration + ** follows a global static declaration. + */ + if (Entry->Owner == SymTab0) { + if ((Flags & SC_STORAGE) == 0) { + /* Linkage must be unchanged */ + Flags &= ~SC_EXTERN; + } else { + Error ("Non-static declaration of '%s' follows static declaration", Name); + } + } else { + Error ("Extern declaration of '%s' follows static declaration", Name); + Entry = 0; + } } - /* If an extern declaration follows a static declaration, then - ** warn about the conflict. It will compile an extern declaration. - */ - if ((Flags & SC_EXTERN) != 0 && (Entry->Flags & SC_EXTERN) == 0) { - Warning ("extern declaration follows static declaration of '%s'.", Name); - } + if (Entry) { + /* Update existing function type if this is a definition */ + if (IsTypeFunc (Entry->Type) && + !SymIsDef (Entry) && + (Flags & SC_DEF) == SC_DEF) { + TypeFree (Entry->Type); + Entry->Type = TypeDup (T); + } - /* Update existing function type if this is a definition */ - if (IsTypeFunc (Entry->Type) && - !SymIsDef (Entry) && - (Flags & SC_DEF) == SC_DEF) { - TypeFree (Entry->Type); - Entry->Type = TypeDup (T); + /* Add the new flags */ + Entry->Flags |= Flags; } - - /* Add the new flags */ - Entry->Flags |= Flags & ~SC_EXTERN; } + if (Entry == 0) { + /* Use the fail-safe table for fictitious symbols */ + Tab = FailSafeTab; + } } if (Entry == 0 || Entry->Owner != Tab) { From 1d28e8e3deff8d69c4e9b8ab09b5fbe0bf726a72 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 13 Aug 2020 00:00:32 +0800 Subject: [PATCH 0379/2710] Improved test case for Issue #191. --- test/val/static-1.c | 1 + 1 file changed, 1 insertion(+) diff --git a/test/val/static-1.c b/test/val/static-1.c index ae2ba6289..6918e0033 100644 --- a/test/val/static-1.c +++ b/test/val/static-1.c @@ -13,6 +13,7 @@ static int n = 0; extern int n; /* should not give an error */ +static int n; /* should not give an error */ int main(void) { From f0e4053a0d5a5a3749b4043283f912801d3914f8 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 14 Aug 2020 19:58:58 +0200 Subject: [PATCH 0380/2710] added test related to issue #1178 --- test/val/bug1178.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 test/val/bug1178.c diff --git a/test/val/bug1178.c b/test/val/bug1178.c new file mode 100644 index 000000000..043767e4c --- /dev/null +++ b/test/val/bug1178.c @@ -0,0 +1,81 @@ + +/* bug #1178 - copying structs/unions > 4 bytes is broken */ + +#include <stdio.h> +#include <stdlib.h> + +typedef struct +{ + unsigned char a; + unsigned char b; + unsigned char c; + unsigned char d; + unsigned char e; +} +TestStruct1; + +TestStruct1 StructArray1[2]; +TestStruct1 test1; + +typedef struct +{ + unsigned char a; + unsigned char b; + unsigned char c; + unsigned char d; +} +TestStruct2; + +TestStruct2 StructArray2[2]; +TestStruct2 test2; + +int res = EXIT_SUCCESS; + +void dotest1(void) +{ + test1.a = 42; + test1.b = 11; + test1.c = 23; + test1.d = 47; + test1.e = 13; + + StructArray1[0] = test1; + + printf ("test1: %d, %d, %d, %d, %d\n", + (int)StructArray1[0].a, (int)StructArray1[0].b, (int)StructArray1[0].c, + (int)StructArray1[0].d, (int)StructArray1[0].e); + if ((StructArray1[0].a != 42) || + (StructArray1[0].b != 11) || + (StructArray1[0].c != 23) || + (StructArray1[0].d != 47) || + (StructArray1[0].e != 13)) { + res = EXIT_FAILURE; + } +} + +void dotest2(void) +{ + test2.a = 42; + test2.b = 11; + test2.c = 23; + test2.d = 47; + + StructArray2[0] = test2; + + printf ("test2: %d, %d, %d, %d, %d\n", + (int)StructArray2[0].a, (int)StructArray2[0].b, + (int)StructArray2[0].c, (int)StructArray2[0].d); + if ((StructArray2[0].a != 42) || + (StructArray2[0].b != 11) || + (StructArray2[0].c != 23) || + (StructArray2[0].d != 47)) { + res = EXIT_FAILURE; + } +} + +int main(void) +{ + dotest1(); + dotest2(); + return res; +} From 8197e3c7cdeb373ae69ce80f368eb76ada6d6102 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 14 Aug 2020 21:07:39 +0200 Subject: [PATCH 0381/2710] make it actually compile again :) --- testcode/lib/strdup-test.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/testcode/lib/strdup-test.c b/testcode/lib/strdup-test.c index 5514471f9..e30841c3e 100644 --- a/testcode/lib/strdup-test.c +++ b/testcode/lib/strdup-test.c @@ -3,34 +3,25 @@ #include <string.h> #include <time.h> - -/* From _heap.h */ -extern unsigned _horg; /* Bottom of heap */ -extern unsigned _hptr; /* Current top */ -extern unsigned _hend; /* Upper limit */ -extern unsigned _hfirst; /* First free block in list */ -extern unsigned _hlast; /* Last free block in list */ - +#include <_heap.h> static unsigned char* V[256]; - - static void ShowInfo (void) /* Show heap info */ { /* Count free blocks */ unsigned Count = 0; - unsigned** P = (unsigned**) _hfirst; + unsigned** P = (unsigned**) _heapfirst; while (P) { ++Count; P = P[1]; } printf ("%04X %04X %04X %04X %04X %u\n", - _horg, _hptr, _hend, _hfirst, _hlast, Count); + _heaporg, _heapptr, _heapend, _heapfirst, _heaplast, Count); if (Count) { - P = (unsigned**) _hfirst; + P = (unsigned**) _heapfirst; while (P) { printf ("%04X %04X %04X %04X(%u)\n", (unsigned) P, P[2], P[1], P[0], P[0]); From fdded33097f3a584221abfc63fb4d370baca08d2 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 06:27:11 +0800 Subject: [PATCH 0382/2710] Made it easier to support 0-size structs in the future. --- src/cc65/compile.c | 10 ++++++---- src/cc65/datatype.c | 12 ++++++++++-- src/cc65/locals.c | 12 ++++++------ 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 85c9bd5a4..d1f78098d 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -218,14 +218,16 @@ static void Parse (void) ** void types in ISO modes. */ if (Size == 0) { - if (!IsTypeVoid (Decl.Type)) { + if (!IsEmptiableObjectType (Decl.Type)) { if (!IsTypeArray (Decl.Type)) { /* Size is unknown and not an array */ - Error ("Variable '%s' has unknown size", Decl.Ident); + Error ("Cannot initialize variable '%s' of unknown size", Decl.Ident); } } else if (IS_Get (&Standard) != STD_CC65) { /* We cannot declare variables of type void */ - Error ("Illegal type for variable '%s'", Decl.Ident); + Error ("Illegal type '%s' for variable '%s'", + GetFullTypeName (Decl.Type), + Decl.Ident); } } @@ -253,7 +255,7 @@ static void Parse (void) /* We cannot declare variables of type void */ Error ("Illegal type for variable '%s'", Decl.Ident); Entry->Flags &= ~(SC_STORAGE | SC_DEF); - } else if (Size == 0 && SymIsDef (Entry)) { + } else if (Size == 0 && SymIsDef (Entry) && !IsEmptiableObjectType (Decl.Type)) { /* Size is unknown. Is it an array? */ if (!IsTypeArray (Decl.Type)) { Error ("Variable '%s' has unknown size", Decl.Ident); diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index e43af238e..b69a44dd0 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -805,7 +805,11 @@ unsigned CheckedSizeOf (const Type* T) { unsigned Size = SizeOf (T); if (Size == 0) { - Error ("Size of type '%s' is unknown", GetFullTypeName (T)); + if (HasUnknownSize (T + 1)) { + Error ("Size of type '%s' is unknown", GetFullTypeName (T)); + } else { + Error ("Size of type '%s' is 0", GetFullTypeName (T)); + } Size = SIZEOF_CHAR; /* Don't return zero */ } return Size; @@ -821,7 +825,11 @@ unsigned CheckedPSizeOf (const Type* T) { unsigned Size = PSizeOf (T); if (Size == 0) { - Error ("Size of type '%s' is unknown", GetFullTypeName (T + 1)); + if (HasUnknownSize (T + 1)) { + Error ("Pointer to type '%s' of unknown size", GetFullTypeName (T + 1)); + } else { + Error ("Pointer to type '%s' of 0 size", GetFullTypeName (T + 1)); + } Size = SIZEOF_CHAR; /* Don't return zero */ } return Size; diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 297994455..ad36bded0 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -174,8 +174,8 @@ static void ParseRegisterDecl (Declaration* Decl, int Reg) Sym->Flags |= SC_REF; } - /* Cannot allocate a variable of zero size */ - if (Size == 0) { + /* Cannot allocate a variable of unknown size */ + if (HasUnknownSize (Sym->Type)) { if (IsTypeArray (Decl->Type)) { Error ("Array '%s' has unknown size", Decl->Ident); } else { @@ -370,8 +370,8 @@ static void ParseAutoDecl (Declaration* Decl) } } - /* Cannot allocate a variable of zero size */ - if (Size == 0) { + /* Cannot allocate an incomplete variable */ + if (HasUnknownSize (Sym->Type)) { if (IsTypeArray (Decl->Type)) { Error ("Array '%s' has unknown size", Decl->Ident); } else { @@ -428,8 +428,8 @@ static void ParseStaticDecl (Declaration* Decl) } - /* Cannot allocate a variable of zero size */ - if (Size == 0) { + /* Cannot allocate an incomplete variable */ + if (HasUnknownSize (Sym->Type)) { if (IsTypeArray (Decl->Type)) { Error ("Array '%s' has unknown size", Decl->Ident); } else { From c4698dfd07383e4ffa50d6c1fa5d158052b167a9 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Fri, 14 Aug 2020 14:54:10 +0200 Subject: [PATCH 0383/2710] Use C89 semantics for integer conversions Previously, the following rules were used for binary operators: * If one of the values is a long, the result is long. * If one of the values is unsigned, the result is also unsigned. * Otherwise the result is an int. C89 specifies the "usual arithmetic conversions" as: * The integral promotions are performed on both operands. * Then the following rules are applied: * If either operand has type unsigned long int, the other operand is converted to unsigned long int. * Otherwise, if one operand has type long int and the other has type unsigned int, if a long int can represent all values of an unsigned int, the operand of type unsigned int is converted to long int; if a long int cannot represent all the values of an unsigned int, both operands are converted to unsigned long int. * Otherwise, if either operand has type long int, the other operand is converted to long int. * Otherwise, if either operand has type unsigned int, the other operand is converted to unsigned int. * Otherwise, both operands have type int. https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.5 As one example, these rules give a different result for an operator with one long operand and one unsigned int operand. Previously, the result type was unsigned long. With C89 semantics, it is just long, since long can represent all unsigned ints. Integral promotions convert types shorter than int to int (or unsigned int). Both char and unsigned char are promoted to int since int can represent all unsigned chars. https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.1 Rename promoteint to ArithmeticConvert, since this is more accurate. Fixes #170 --- src/cc65/codegen.c | 111 ++++++++++++++++++++++++++++-------- src/cc65/datatype.c | 18 +++++- src/cc65/datatype.h | 10 ++++ src/cc65/expr.c | 78 ++++++++++++++++++------- test/{todo => val}/bug170.c | 0 5 files changed, 170 insertions(+), 47 deletions(-) rename test/{todo => val}/bug170.c (100%) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 8a879745d..2c6624a5c 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -1327,26 +1327,52 @@ void g_reglong (unsigned Flags) +static unsigned g_intpromotion (unsigned flags) +/* Return new flags for integral promotions for types smaller than int. */ +{ + /* https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.1 + ** A char, a short int, or an int bit-field, or their signed or unsigned varieties, or an + ** object that has enumeration type, may be used in an expression wherever an int or + ** unsigned int may be used. If an int can represent all values of the original type, the value + ** is converted to an int; otherwise it is converted to an unsigned int. + ** These are called the integral promotions. + */ + + if ((flags & CF_TYPEMASK) == CF_CHAR) { + /* int can represent all unsigned chars, so unsigned char is promoted to int. */ + flags &= ~CF_TYPEMASK; + flags &= ~CF_UNSIGNED; + flags |= CF_INT; + return flags; + } else if ((flags & CF_TYPEMASK) == CF_SHORT) { + /* int cannot represent all unsigned shorts, so unsigned short is promoted to + ** unsigned int. + */ + flags &= ~CF_TYPEMASK; + flags |= CF_INT; + return flags; + } else { + /* Otherwise, the type is not smaller than int, so leave it alone. */ + return flags; + } +} + + + unsigned g_typeadjust (unsigned lhs, unsigned rhs) /* Adjust the integer operands before doing a binary operation. lhs is a flags ** value, that corresponds to the value on TOS, rhs corresponds to the value ** in (e)ax. The return value is the the flags value for the resulting type. */ { - unsigned ltype, rtype; - unsigned result; - /* Get the type spec from the flags */ - ltype = lhs & CF_TYPEMASK; - rtype = rhs & CF_TYPEMASK; + unsigned ltype = lhs & CF_TYPEMASK; + unsigned rtype = rhs & CF_TYPEMASK; /* Check if a conversion is needed */ if (ltype == CF_LONG && rtype != CF_LONG && (rhs & CF_CONST) == 0) { /* We must promote the primary register to long */ g_reglong (rhs); - /* Get the new rhs type */ - rhs = (rhs & ~CF_TYPEMASK) | CF_LONG; - rtype = CF_LONG; } else if (ltype != CF_LONG && (lhs & CF_CONST) == 0 && rtype == CF_LONG) { /* We must promote the lhs to long */ if (lhs & CF_PRIMARY) { @@ -1354,25 +1380,64 @@ unsigned g_typeadjust (unsigned lhs, unsigned rhs) } else { g_toslong (lhs); } - /* Get the new rhs type */ - lhs = (lhs & ~CF_TYPEMASK) | CF_LONG; - ltype = CF_LONG; } - /* Determine the result type for the operation: - ** - The result is const if both operands are const. - ** - The result is unsigned if one of the operands is unsigned. - ** - The result is long if one of the operands is long. - ** - Otherwise the result is int sized. + /* Result is const if both operands are const. */ + unsigned const_flag = (lhs & CF_CONST) & (rhs & CF_CONST); + + /* https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.5 + ** Many binary operators that expect operands of arithmetic type cause conversions and yield + ** result types in a similar way. The purpose is to yield a common type, which is also the type + ** of the result. This pattern is called the usual arithmetic conversions. */ - result = (lhs & CF_CONST) & (rhs & CF_CONST); - result |= (lhs & CF_UNSIGNED) | (rhs & CF_UNSIGNED); - if (rtype == CF_LONG || ltype == CF_LONG) { - result |= CF_LONG; - } else { - result |= CF_INT; + + /* Note that this logic is largely duplicated by ArithmeticConvert. */ + + /* Apply integral promotions for types char/short. */ + lhs = g_intpromotion (lhs); + rhs = g_intpromotion (rhs); + ltype = lhs & CF_TYPEMASK; + rtype = rhs & CF_TYPEMASK; + + /* If either operand has type unsigned long int, the other operand is converted to + ** unsigned long int. + */ + if ((ltype == CF_LONG && (lhs & CF_UNSIGNED)) || + (rtype == CF_LONG && (rhs & CF_UNSIGNED))) { + return const_flag | CF_UNSIGNED | CF_LONG; } - return result; + + /* Otherwise, if one operand has type long int and the other has type unsigned int, + ** if a long int can represent all values of an unsigned int, the operand of type unsigned int + ** is converted to long int ; if a long int cannot represent all the values of an unsigned int, + ** both operands are converted to unsigned long int. + */ + if ((ltype == CF_LONG && rtype == CF_INT && (rhs & CF_UNSIGNED)) || + (rtype == CF_LONG && ltype == CF_INT && (rhs & CF_UNSIGNED))) { + /* long can represent all unsigneds, so we are in the first sub-case. */ + return const_flag | CF_LONG; + } + + /* Otherwise, if either operand has type long int, the other operand is converted to long int. + */ + if (ltype == CF_LONG || rtype == CF_LONG) { + return const_flag | CF_LONG; + } + + /* Otherwise, if either operand has type unsigned int, the other operand is converted to + ** unsigned int. + */ + if ((ltype == CF_INT && (lhs & CF_UNSIGNED)) || + (rtype == CF_INT && (rhs & CF_UNSIGNED))) { + return const_flag | CF_UNSIGNED | CF_INT; + } + + /* Otherwise, both operands have type int. */ + CHECK (ltype == CF_INT); + CHECK (!(lhs & CF_UNSIGNED)); + CHECK (rtype == CF_INT); + CHECK (!(rhs & CF_UNSIGNED)); + return const_flag | CF_INT; } diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 94aea9cc1..58b673fab 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1214,12 +1214,26 @@ Type* IntPromotion (Type* T) /* We must have an int to apply int promotions */ PRECONDITION (IsClassInt (T)); - /* An integer can represent all values from either signed or unsigned char, - ** so convert chars to int and leave all other types alone. + /* https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.1 + ** A char, a short int, or an int bit-field, or their signed or unsigned varieties, or an + ** object that has enumeration type, may be used in an expression wherever an int or + ** unsigned int may be used. If an int can represent all values of the original type, the value + ** is converted to an int; otherwise it is converted to an unsigned int. + ** These are called the integral promotions. */ + if (IsTypeChar (T)) { + /* An integer can represent all values from either signed or unsigned char, so convert + ** chars to int. + */ return type_int; + } else if (IsTypeShort (T)) { + /* An integer cannot represent all values from unsigned short, so convert unsigned short + ** to unsigned int. + */ + return IsSignUnsigned (T) ? type_uint : type_int; } else { + /* Otherwise, the type is not smaller than int, so leave it alone. */ return T; } } diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 1ff8333c6..fbd52e761 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -373,6 +373,16 @@ INLINE int IsTypeChar (const Type* T) # define IsTypeChar(T) (GetRawType (GetUnderlyingType (T)) == T_TYPE_CHAR) #endif +#if defined(HAVE_INLINE) +INLINE int IsTypeShort (const Type* T) +/* Return true if this is a short type (signed or unsigned) */ +{ + return (GetRawType (GetUnderlyingType (T)) == T_TYPE_SHORT); +} +#else +# define IsTypeShort(T) (GetRawType (GetUnderlyingType (T)) == T_TYPE_SHORT) +#endif + #if defined(HAVE_INLINE) INLINE int IsTypeInt (const Type* T) /* Return true if this is an int type (signed or unsigned) */ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index f75015305..efed934f8 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -140,27 +140,61 @@ void MarkedExprWithCheck (void (*Func) (ExprDesc*), ExprDesc* Expr) -static Type* promoteint (Type* lhst, Type* rhst) -/* In an expression with two ints, return the type of the result */ +static Type* ArithmeticConvert (Type* lhst, Type* rhst) +/* Perform the usual arithmetic conversions for binary operators. */ { - /* Rules for integer types: - ** - If one of the values is a long, the result is long. - ** - If one of the values is unsigned, the result is also unsigned. - ** - Otherwise the result is an int. + /* https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.5 + ** Many binary operators that expect operands of arithmetic type cause conversions and yield + ** result types in a similar way. The purpose is to yield a common type, which is also the type + ** of the result. This pattern is called the usual arithmetic conversions. + */ + + /* There are additional rules for floating point types that we don't bother with, since + ** floating point types are not (yet) supported. + ** The integral promotions are performed on both operands. + */ + lhst = IntPromotion (lhst); + rhst = IntPromotion (rhst); + + /* If either operand has type unsigned long int, the other operand is converted to + ** unsigned long int. + */ + if ((IsTypeLong (lhst) && IsSignUnsigned (lhst)) || + (IsTypeLong (rhst) && IsSignUnsigned (rhst))) { + return type_ulong; + } + + /* Otherwise, if one operand has type long int and the other has type unsigned int, + ** if a long int can represent all values of an unsigned int, the operand of type unsigned int + ** is converted to long int ; if a long int cannot represent all the values of an unsigned int, + ** both operands are converted to unsigned long int. + */ + if ((IsTypeLong (lhst) && IsTypeInt (rhst) && IsSignUnsigned (rhst)) || + (IsTypeLong (rhst) && IsTypeInt (lhst) && IsSignUnsigned (lhst))) { + /* long can represent all unsigneds, so we are in the first sub-case. */ + return type_long; + } + + /* Otherwise, if either operand has type long int, the other operand is converted to long int. */ if (IsTypeLong (lhst) || IsTypeLong (rhst)) { - if (IsSignUnsigned (lhst) || IsSignUnsigned (rhst)) { - return type_ulong; - } else { - return type_long; - } - } else { - if (IsSignUnsigned (lhst) || IsSignUnsigned (rhst)) { - return type_uint; - } else { - return type_int; - } + return type_long; } + + /* Otherwise, if either operand has type unsigned int, the other operand is converted to + ** unsigned int. + */ + if ((IsTypeInt (lhst) && IsSignUnsigned (lhst)) || + (IsTypeInt (rhst) && IsSignUnsigned (rhst))) { + return type_uint; + } + + /* Otherwise, both operands have type int. */ + CHECK (IsTypeInt (lhst)); + CHECK (IsSignSigned (lhst)); + CHECK (IsTypeInt (rhst)); + CHECK (IsSignSigned (rhst)); + return type_int; } @@ -198,7 +232,7 @@ static unsigned typeadjust (ExprDesc* lhs, ExprDesc* rhs, int NoPush) flags = g_typeadjust (ltype, rtype); /* Set the type of the result */ - lhs->Type = promoteint (lhst, rhst); + lhs->Type = ArithmeticConvert (lhst, rhst); /* Return the code generator flags */ return flags; @@ -2066,7 +2100,7 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ RemoveCode (&Mark1); /* Get the type of the result */ - Expr->Type = promoteint (Expr->Type, Expr2.Type); + Expr->Type = ArithmeticConvert (Expr->Type, Expr2.Type); /* Handle the op differently for signed and unsigned types */ if (IsSignSigned (Expr->Type)) { @@ -2163,7 +2197,7 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ /* Determine the type of the operation result. */ type |= g_typeadjust (ltype, rtype); - Expr->Type = promoteint (Expr->Type, Expr2.Type); + Expr->Type = ArithmeticConvert (Expr->Type, Expr2.Type); /* Generate code */ Gen->Func (type, Expr->IVal); @@ -2196,7 +2230,7 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ /* Determine the type of the operation result. */ type |= g_typeadjust (ltype, rtype); - Expr->Type = promoteint (Expr->Type, Expr2.Type); + Expr->Type = ArithmeticConvert (Expr->Type, Expr2.Type); /* Generate code */ Gen->Func (type, Expr2.IVal); @@ -3340,7 +3374,7 @@ static void hieQuest (ExprDesc* Expr) /* Get common type */ - ResultType = promoteint (Expr2.Type, Expr3.Type); + ResultType = ArithmeticConvert (Expr2.Type, Expr3.Type); /* Convert the third expression to this type if needed */ TypeConversion (&Expr3, ResultType); diff --git a/test/todo/bug170.c b/test/val/bug170.c similarity index 100% rename from test/todo/bug170.c rename to test/val/bug170.c From 1cf9404c19d504fa7230f6fbb14bfa8ee8204282 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sat, 15 Aug 2020 21:05:51 +0200 Subject: [PATCH 0384/2710] Support C2X _Static_assert(expr) syntax This makes the message in _Static_assert(expr, message) optional. Fixes #1188. --- src/cc65/staticassert.c | 49 ++++++++++++++++++++++++----------------- test/val/staticassert.c | 2 ++ 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/cc65/staticassert.c b/src/cc65/staticassert.c index 95a2d4a6e..68f0a41bc 100644 --- a/src/cc65/staticassert.c +++ b/src/cc65/staticassert.c @@ -49,6 +49,7 @@ void ParseStaticAssert () { /* ** static_assert-declaration ::= + ** _Static_assert ( constant-expression ) ; ** _Static_assert ( constant-expression , string-literal ) ; */ ExprDesc Expr; @@ -67,27 +68,35 @@ void ParseStaticAssert () ConstAbsIntExpr (hie1, &Expr); failed = !Expr.IVal; - /* We expect a comma */ - if (!ConsumeComma ()) { - return; - } - - /* String literal */ - if (CurTok.Tok != TOK_SCONST) { - Error ("String literal expected for static_assert message"); - return; - } - - /* Issue an error including the message if the static_assert failed. */ - if (failed) { - Error ("static_assert failed '%s'", GetLiteralStr (CurTok.SVal)); - } - - /* Consume the string constant, now that we don't need it anymore. - ** This should never fail since we checked the token type above. + /* If there is a comma, we also have an error message. The message is optional because we + ** support the C2X syntax with only an expression. */ - if (!Consume (TOK_SCONST, "String literal expected")) { - return; + if (CurTok.Tok == TOK_COMMA) { + /* Skip the comma. */ + NextToken (); + + /* String literal */ + if (CurTok.Tok != TOK_SCONST) { + Error ("String literal expected for static_assert message"); + return; + } + + /* Issue an error including the message if the static_assert failed. */ + if (failed) { + Error ("static_assert failed '%s'", GetLiteralStr (CurTok.SVal)); + } + + /* Consume the string constant, now that we don't need it anymore. + ** This should never fail since we checked the token type above. + */ + if (!Consume (TOK_SCONST, "String literal expected")) { + return; + } + } else { + /* No message. */ + if (failed) { + Error ("static_assert failed"); + } } /* Closing paren and semi-colon needed */ diff --git a/test/val/staticassert.c b/test/val/staticassert.c index a02ba27e8..5d44fed6b 100644 --- a/test/val/staticassert.c +++ b/test/val/staticassert.c @@ -27,6 +27,7 @@ #include <assert.h> _Static_assert (1, "1 should be true."); +_Static_assert (1); /* Support C2x syntax with no message. */ _Static_assert (!0, "!0 should be true."); _Static_assert (1 == 1, "1 == 1 should be true."); _Static_assert (1 == 1L, "1 == 1L should be true."); @@ -46,6 +47,7 @@ _Static_assert (k == 1, "k should be 1."); /* Just test the macro version once. */ static_assert (1, "1 should be true."); +static_assert (1); /* _Static_assert can appear anywhere a declaration can. */ void f (void) From 7e61b11f23abe1a2b0f5e826c0832a291895df4a Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sat, 15 Aug 2020 21:22:31 +0200 Subject: [PATCH 0385/2710] Add _Static_assert docs to cc65 extensions Fixes #1149. --- doc/cc65.sgml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index dba0a0288..a81358510 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -792,6 +792,21 @@ This cc65 version has some extensions to the ISO C standard. size zero, even if it is initialized. <p> +<item> cc65 supports <tt/_Static_assert/ from C11 and C2X. This is similar + to <tt/#error/ but happens at a later stage of translation, so types + can be used. + + <tscreen><verb> + /* C11 version with message. */ + _Static_assert (sizeof (int) == 2, "Expected 2-bytes ints."); + + /* C2X version without message. */ + _Static_assert (sizeof (int) == 2); + </verb></tscreen> + + <tt/_Static_assert/ is also available as the macro <tt/static_assert/ in + <tt/assert.h/. + <item> Computed gotos, a GCC extension, has limited support. With it you can use fast jump tables from C. You can take the address of a label with a double ampersand, putting them in a static const array of type void *. From 11cd3e5cbd29ddfd796452a4d30a116adcedce47 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 12 Aug 2020 21:50:34 +0800 Subject: [PATCH 0386/2710] Utility for checking general datatype categories, incomplete ESU types and arrays of unknown sizes. --- src/cc65/datatype.c | 100 +++++++++++++++++++++++++++++++++++++++++++- src/cc65/datatype.h | 35 +++++++++++++++- 2 files changed, 132 insertions(+), 3 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 58b673fab..9b30eba70 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1037,18 +1037,114 @@ Type* ArrayToPtr (Type* T) +int IsClassObject (const Type* T) +/* Return true if this is a fully described object type */ +{ + return !IsTypeFunc (T) && !IsClassIncomplete (T); +} + + + +int IsClassIncomplete (const Type* T) +/* Return true if this is an object type lacking size info */ +{ + if (IsTypeArray (T)) { + return GetElementCount (T) == UNSPECIFIED; + } + return IsTypeVoid (T) || IsIncompleteESUType (T); +} + + + int IsClassArithmetic (const Type* T) -/* Return true if this is an arithmetic type */ +/* Return true if this is an integer or real floating type */ { return IsClassInt (T) || IsClassFloat (T); } +int IsClassBasic (const Type* T) +/* Return true if this is a char, integer or floating type */ +{ + return IsRawTypeChar (T) || IsClassInt (T) || IsClassFloat (T); +} + + + +int IsClassScalar (const Type* T) +/* Return true if this is an arithmetic or pointer type */ +{ + return IsClassArithmetic (T) || IsTypePtr (T); +} + + + +int IsClassDerived (const Type* T) +/* Return true if this is an array, struct, union, function or pointer type */ +{ + return IsTypeArray (T) || IsClassStruct (T) || IsClassFunc (T) || IsTypePtr (T); +} + + + +int IsClassAggregate (const Type* T) +/* Return true if this is an array or struct type */ +{ + return IsTypeArray (T) || IsTypeStruct (T); +} + + + +int IsRelationType (const Type* T) +/* Return true if this is an arithmetic, array or pointer type */ +{ + return IsClassArithmetic (T) || IsClassPtr (T); +} + + + int IsCastType (const Type* T) /* Return true if this type can be used for casting */ { - return IsClassArithmetic (T) || IsClassPtr (T) || IsTypeVoid (T); + return IsClassScalar (T) || IsTypeVoid (T); +} + + + +int IsESUType (const Type* T) +/* Return true if this is an enum/struct/union type */ +{ + return IsClassStruct (T) || IsTypeEnum (T); +} + + + +int IsIncompleteESUType (const Type* T) +/* Return true if this is an incomplete ESU type */ +{ + SymEntry* Sym = GetSymType (T); + + return Sym != 0 && !SymIsDef (Sym); +} + + + +int IsEmptiableObjectType (const Type* T) +/* Return true if this is a struct/union/void type that can have zero size */ +{ + return IsClassStruct (T) || IsTypeVoid (T); +} + + + +int HasUnknownSize (const Type* T) +/* Return true if this is an incomplete ESU type or an array of unknown size */ +{ + if (IsTypeArray (T)) { + return GetElementCount (T) == UNSPECIFIED; + } + return IsIncompleteESUType (T); } diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index fbd52e761..7aa1d77be 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -593,12 +593,45 @@ INLINE int IsClassFunc (const Type* T) # define IsClassFunc(T) (GetClass (T) == T_CLASS_FUNC) #endif +int IsClassObject (const Type* T); +/* Return true if this is a fully described object type */ + +int IsClassIncomplete (const Type* T); +/* Return true if this is an object type lacking size info */ + int IsClassArithmetic (const Type* T); -/* Return true if this is an arithmetic type */ +/* Return true if this is an integer or real floating type */ + +int IsClassBasic (const Type* T); +/* Return true if this is a char, integer or floating type */ + +int IsClassScalar (const Type* T); +/* Return true if this is an arithmetic or pointer type */ + +int IsClassDerived (const Type* T); +/* Return true if this is an array, struct, union, function or pointer type */ + +int IsClassAggregate (const Type* T); +/* Return true if this is an array or struct type */ + +int IsRelationType (const Type* T); +/* Return true if this is an arithmetic, array or pointer type */ int IsCastType (const Type* T); /* Return true if this type can be used for casting */ +int IsESUType (const Type* T); +/* Return true if this is an enum/struct/union type */ + +int IsIncompleteESUType (const Type* T); +/* Return true if this is an incomplete ESU type */ + +int IsEmptiableObjectType (const Type* T); +/* Return true if this is a struct/union/void type that can have zero size */ + +int HasUnknownSize (const Type* T); +/* Return true if this is an incomplete ESU type or an array of unknown size */ + #if defined(HAVE_INLINE) INLINE TypeCode GetRawSignedness (const Type* T) /* Get the raw signedness of a type */ From 15f28c3a8cbf95a6bb9abb908b17de90576c7a49 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 13 Aug 2020 08:24:40 +0800 Subject: [PATCH 0387/2710] Fixed getting the basic raw type names. --- src/cc65/datatype.c | 4 ++-- src/cc65/datatype.h | 22 +++++++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 9b30eba70..20c4abc56 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -235,7 +235,7 @@ const char* GetBasicTypeName (const Type* T) default: break; } if (IsClassInt (T)) { - if (IsSignSigned (T)) { + if (IsRawSignSigned (T)) { switch (GetRawType (T)) { case T_TYPE_CHAR: return "signed char"; case T_TYPE_SHORT: return "short"; @@ -245,7 +245,7 @@ const char* GetBasicTypeName (const Type* T) default: return "signed integer"; } - } else if (IsSignUnsigned (T)) { + } else if (IsRawSignUnsigned (T)) { switch (GetRawType (T)) { case T_TYPE_CHAR: return "unsigned char"; case T_TYPE_SHORT: return "unsigned short"; diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 7aa1d77be..660681909 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -652,6 +652,16 @@ INLINE TypeCode GetSignedness (const Type* T) # define GetSignedness(T) (GetUnderlyingTypeCode (T) & T_MASK_SIGN) #endif +#if defined(HAVE_INLINE) +INLINE int IsRawSignUnsigned (const Type* T) +/* Return true if this is an unsigned raw type */ +{ + return (GetRawSignedness (T) == T_SIGN_UNSIGNED); +} +#else +# define IsRawSignUnsigned(T) (GetRawSignedness (T) == T_SIGN_UNSIGNED) +#endif + #if defined(HAVE_INLINE) INLINE int IsSignUnsigned (const Type* T) /* Return true if this is an unsigned type */ @@ -662,6 +672,16 @@ INLINE int IsSignUnsigned (const Type* T) # define IsSignUnsigned(T) (GetSignedness (T) == T_SIGN_UNSIGNED) #endif +#if defined(HAVE_INLINE) +INLINE int IsRawSignSigned (const Type* T) +/* Return true if this is a signed raw type */ +{ + return (GetRawSignedness (T) == T_SIGN_SIGNED); +} +#else +# define IsRawSignSigned(T) (GetRawSignedness (T) == T_SIGN_SIGNED) +#endif + #if defined(HAVE_INLINE) INLINE int IsSignSigned (const Type* T) /* Return true if this is a signed type */ @@ -673,7 +693,7 @@ INLINE int IsSignSigned (const Type* T) #endif #if defined(HAVE_INLINE) -INLINE TypeCode GetRawSizeModifier(const Type* T) +INLINE TypeCode GetRawSizeModifier (const Type* T) /* Get the size modifier of a raw type */ { return (T->C & T_MASK_SIZE); From 6db93d58cffc8bfd2a320111d96f7ca5a1751519 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Mon, 17 Aug 2020 09:22:15 +0200 Subject: [PATCH 0388/2710] Add test of union of bit-field from mailing list https://sourceforge.net/p/cc65/mailman/message/36152700/ This currently works, but add a test to prevent future regressions. --- test/val/bitfield-union.c | 71 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 test/val/bitfield-union.c diff --git a/test/val/bitfield-union.c b/test/val/bitfield-union.c new file mode 100644 index 000000000..1fd201456 --- /dev/null +++ b/test/val/bitfield-union.c @@ -0,0 +1,71 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of union of bit-fields; see https://sourceforge.net/p/cc65/mailman/message/36152700/ +*/ + +#include <stdio.h> + +typedef union { + unsigned int bf; + + struct { + unsigned int a : 1; + unsigned int b : 1; + unsigned int c : 1; + }; +} bitfield_t; + +static unsigned char failures = 0; + +int main (void) +{ + bitfield_t bitfield = {0}; + + printf ("Bitfield: %u\n", bitfield.bf); + if (bitfield.bf != 0) failures++; + + bitfield.a = bitfield.a ^ 1; + printf ("a=1: %u\n", bitfield.bf); + if (bitfield.bf != 1) failures++; + + bitfield.a = bitfield.a ^ 1; + printf ("a=0: %u\n\n", bitfield.bf); + if (bitfield.bf != 0) failures++; + + bitfield.b = bitfield.b ^ 1; + printf ("b=1: %u\n", bitfield.bf); + if (bitfield.bf != 2) failures++; + + bitfield.b = bitfield.b ^ 1; + printf ("b=0: %u\n\n", bitfield.bf); + if (bitfield.bf != 0) failures++; + + bitfield.c = bitfield.c ^ 1; + printf ("c=1: %u\n", bitfield.bf); + if (bitfield.bf != 4) failures++; + + bitfield.c = bitfield.c ^ 1; + printf ("c=0: %u\n\n", bitfield.bf); + if (bitfield.bf != 0) failures++; + + return failures; +} From ebae994dc9e384aa680ab297eec33b9161e7ca92 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 22:59:26 +0800 Subject: [PATCH 0389/2710] Fixed CHECK failure when calling functions defined with repeated parameter names. Clarified the terms "parameter" vs "argument" in FunctionParamList(). --- src/cc65/expr.c | 55 +++++++++++++++++++++++------------------------ src/cc65/symtab.c | 10 +++++++-- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index efed934f8..db50e14b0 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -330,32 +330,30 @@ static void WarnConstCompareResult (void) static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) -/* Parse a function parameter list, and pass the parameters to the called +/* Parse a function parameter list, and pass the arguments to the called ** function. Depending on several criteria, this may be done by just pushing -** each parameter separately, or creating the parameter frame once, and then -** storing into this frame. -** The function returns the size of the parameters pushed. +** into each parameter separately, or creating the parameter frame once, and +** then storing into this frame. +** The function returns the size of the arguments pushed in bytes. */ { - ExprDesc Expr; - /* Initialize variables */ SymEntry* Param = 0; /* Keep gcc silent */ - unsigned ParamSize = 0; /* Size of parameters pushed */ - unsigned ParamCount = 0; /* Number of parameters pushed */ + unsigned PushedSize = 0; /* Size of arguments pushed */ + unsigned PushedCount = 0; /* Number of arguments pushed */ unsigned FrameSize = 0; /* Size of parameter frame */ - unsigned FrameParams = 0; /* Number of params in frame */ + unsigned FrameParams = 0; /* Number of parameters in frame */ int FrameOffs = 0; /* Offset into parameter frame */ int Ellipsis = 0; /* Function is variadic */ /* As an optimization, we may allocate the complete parameter frame at - ** once instead of pushing each parameter as it comes. We may do that, + ** once instead of pushing into each parameter as it comes. We may do that, ** if... ** ** - optimizations that increase code size are enabled (allocating the ** stack frame at once gives usually larger code). - ** - we have more than one parameter to push (don't count the last param - ** for __fastcall__ functions). + ** - we have more than one parameter to push into (don't count the last + ** parameter for __fastcall__ functions). ** ** The FrameSize variable will contain a value > 0 if storing into a frame ** (instead of pushing) is enabled. @@ -367,7 +365,7 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) FrameParams = Func->ParamCount; FrameSize = Func->ParamSize; if (FrameParams > 0 && IsFastcall) { - /* Last parameter is not pushed */ + /* Last parameter is not pushed into */ FrameSize -= CheckedSizeOf (Func->LastParam->Type); --FrameParams; } @@ -384,25 +382,26 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) } } - /* Parse the actual parameter list */ + /* Parse the actual argument list */ while (CurTok.Tok != TOK_RPAREN) { unsigned Flags; + ExprDesc Expr; /* Count arguments */ - ++ParamCount; + ++PushedCount; /* Fetch the pointer to the next argument, check for too many args */ - if (ParamCount <= Func->ParamCount) { + if (PushedCount <= Func->ParamCount) { /* Beware: If there are parameters with identical names, they ** cannot go into the same symbol table, which means that, in this ** case of errorneous input, the number of nodes in the symbol - ** table and ParamCount are NOT equal. We have to handle this case + ** table and PushedCount are NOT equal. We have to handle this case ** below to avoid segmentation violations. Since we know that this ** problem can only occur if there is more than one parameter, ** we will just use the last one. */ - if (ParamCount == 1) { + if (PushedCount == 1) { /* First argument */ Param = Func->SymTab->SymHead; } else if (Param->NextSym != 0) { @@ -422,11 +421,11 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) Ellipsis = 1; } - /* Evaluate the parameter expression */ + /* Evaluate the argument expression */ hie1 (&Expr); - /* If we don't have an argument spec., accept anything; otherwise, - ** convert the actual argument to the type needed. + /* If we don't have a prototype, accept anything; otherwise, convert + ** the actual argument to the parameter type needed. */ Flags = CF_NONE; if (!Ellipsis) { @@ -483,7 +482,7 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) } /* Calculate total parameter size */ - ParamSize += ArgSize; + PushedSize += ArgSize; } /* Check for end of argument list */ @@ -499,20 +498,20 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) } } - /* Check if we had enough parameters */ - if (ParamCount < Func->ParamCount) { + /* Check if we had enough arguments */ + if (PushedCount < Func->ParamCount) { Error ("Too few arguments in function call"); } - /* The function returns the size of all parameters pushed onto the stack. - ** However, if there are parameters missing (which is an error, and was + /* The function returns the size of all arguments pushed onto the stack. + ** However, if there are parameters missed (which is an error, and was ** flagged by the compiler), AND a stack frame was preallocated above, ** we would loose track of the stackpointer, and generate an internal error ** later. So we correct the value by the parameters that should have been - ** pushed, to avoid an internal compiler error. Since an error was + ** pushed into, to avoid an internal compiler error. Since an error was ** generated before, no code will be output anyway. */ - return ParamSize + FrameSize; + return PushedSize + FrameSize; } diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 443d0a21c..02e96cf21 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -1032,6 +1032,7 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs /* Add a local symbol and return the symbol entry */ { SymTable* Tab = SymTab; + ident Ident; /* Do we have an entry with this name already? */ SymEntry* Entry = FindSymInTable (Tab, Name, HashStr (Name)); @@ -1065,8 +1066,13 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs } if (Entry == 0) { - /* Use the fail-safe table for fictitious symbols */ - Tab = FailSafeTab; + if ((Flags & SC_PARAM) != 0) { + /* Use anonymous names */ + Name = AnonName (Ident, "param"); + } else { + /* Use the fail-safe table for fictitious symbols */ + Tab = FailSafeTab; + } } } From 0afa1a9a95815430b444e0221f5836d8f97020db Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 01:50:04 +0800 Subject: [PATCH 0390/2710] Fixed function signatures in asm output. Improved full type name production. --- src/cc65/datatype.c | 213 +++++++++++++++----------------------------- src/cc65/datatype.h | 10 +-- 2 files changed, 76 insertions(+), 147 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 20c4abc56..48773cba5 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -83,7 +83,7 @@ static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBu ** eastern part. */ { - struct StrBuf Buf = STATIC_STRBUF_INITIALIZER; + struct StrBuf Buf = AUTO_STRBUF_INITIALIZER; if (IsTypeArray (T)) { @@ -117,28 +117,27 @@ static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBu } else if (IsTypeFunc (T)) { - FuncDesc* F = GetFuncDesc (T); - struct StrBuf ParamList = STATIC_STRBUF_INITIALIZER; + FuncDesc* D = GetFuncDesc (T); + struct StrBuf ParamList = AUTO_STRBUF_INITIALIZER; /* First argument */ - SymEntry* Param = F->SymTab->SymHead; - for (unsigned I = 1; I < F->ParamCount; ++I) { - CHECK (Param->NextSym != 0 && (Param->Flags & SC_PARAM) != 0); + SymEntry* Param = D->SymTab->SymHead; + for (unsigned I = 0; I < D->ParamCount; ++I) { + CHECK (Param != 0 && (Param->Flags & SC_PARAM) != 0); + if (I > 0) { + SB_AppendStr (&ParamList, ", "); + } SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); - SB_AppendStr (&ParamList, ", "); SB_Clear (&Buf); /* Next argument */ Param = Param->NextSym; } - if ((F->Flags & FD_VARIADIC) == 0) { - if (F->ParamCount > 0) { - SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); - } else if ((F->Flags & FD_EMPTY) == 0) { + if ((D->Flags & FD_VARIADIC) == 0) { + if (D->ParamCount == 0 && (D->Flags & FD_EMPTY) == 0) { SB_AppendStr (&ParamList, "void"); } } else { - if (F->ParamCount > 0) { - SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); + if (D->ParamCount > 0) { SB_AppendStr (&ParamList, ", ..."); } else { SB_AppendStr (&ParamList, "..."); @@ -286,7 +285,7 @@ const char* GetFullTypeName (const Type* T) struct StrBuf* GetFullTypeNameBuf (struct StrBuf* S, const Type* T) /* Return the full name string of the given type */ { - struct StrBuf East = STATIC_STRBUF_INITIALIZER; + struct StrBuf East = AUTO_STRBUF_INITIALIZER; GetFullTypeNameWestEast (S, &East, T); /* Join West and East */ @@ -586,155 +585,85 @@ Type* PointerTo (const Type* T) -static TypeCode PrintTypeComp (FILE* F, TypeCode C, TypeCode Mask, const char* Name) -/* Check for a specific component of the type. If it is there, print the -** name and remove it. Return the type with the component removed. -*/ -{ - if ((C & Mask) == Mask) { - fprintf (F, "%s ", Name); - C &= ~Mask; - } - return C; -} - - - void PrintType (FILE* F, const Type* T) -/* Output translation of type array. */ +/* Print fulle name of the type */ { - /* Walk over the type string */ - while (T->C != T_END) { - - /* Get the type code */ - TypeCode C = T->C; - - /* Print any qualifiers */ - C = PrintTypeComp (F, C, T_QUAL_CONST, "const"); - C = PrintTypeComp (F, C, T_QUAL_VOLATILE, "volatile"); - C = PrintTypeComp (F, C, T_QUAL_RESTRICT, "restrict"); - C = PrintTypeComp (F, C, T_QUAL_NEAR, "__near__"); - C = PrintTypeComp (F, C, T_QUAL_FAR, "__far__"); - C = PrintTypeComp (F, C, T_QUAL_FASTCALL, "__fastcall__"); - C = PrintTypeComp (F, C, T_QUAL_CDECL, "__cdecl__"); - - /* Signedness. Omit the signedness specifier for long and int */ - if ((C & T_MASK_TYPE) != T_TYPE_INT && (C & T_MASK_TYPE) != T_TYPE_LONG) { - C = PrintTypeComp (F, C, T_SIGN_SIGNED, "signed"); - } - C = PrintTypeComp (F, C, T_SIGN_UNSIGNED, "unsigned"); - - /* Now check the real type */ - switch (C & T_MASK_TYPE) { - case T_TYPE_CHAR: - fprintf (F, "char"); - break; - case T_TYPE_SHORT: - fprintf (F, "short"); - break; - case T_TYPE_INT: - fprintf (F, "int"); - break; - case T_TYPE_LONG: - fprintf (F, "long"); - break; - case T_TYPE_LONGLONG: - fprintf (F, "long long"); - break; - case T_TYPE_ENUM: - fprintf (F, "enum"); - break; - case T_TYPE_FLOAT: - fprintf (F, "float"); - break; - case T_TYPE_DOUBLE: - fprintf (F, "double"); - break; - case T_TYPE_VOID: - fprintf (F, "void"); - break; - case T_TYPE_STRUCT: - fprintf (F, "struct %s", ((SymEntry*) T->A.P)->Name); - break; - case T_TYPE_UNION: - fprintf (F, "union %s", ((SymEntry*) T->A.P)->Name); - break; - case T_TYPE_ARRAY: - /* Recursive call */ - PrintType (F, T + 1); - if (T->A.L == UNSPECIFIED) { - fprintf (F, " []"); - } else { - fprintf (F, " [%ld]", T->A.L); - } - return; - case T_TYPE_PTR: - /* Recursive call */ - PrintType (F, T + 1); - fprintf (F, " *"); - return; - case T_TYPE_FUNC: - fprintf (F, "function returning "); - break; - default: - fprintf (F, "unknown type: %04lX", T->C); - } - - /* Next element */ - ++T; - } + StrBuf Buf = AUTO_STRBUF_INITIALIZER; + fprintf (F, "%s", SB_GetConstBuf (GetFullTypeNameBuf (&Buf, T))); + SB_Done (&Buf); } void PrintFuncSig (FILE* F, const char* Name, Type* T) -/* Print a function signature. */ +/* Print a function signature */ { + StrBuf Buf = AUTO_STRBUF_INITIALIZER; + StrBuf ParamList = AUTO_STRBUF_INITIALIZER; + StrBuf East = AUTO_STRBUF_INITIALIZER; + StrBuf West = AUTO_STRBUF_INITIALIZER; + /* Get the function descriptor */ const FuncDesc* D = GetFuncDesc (T); - /* Print a comment with the function signature */ - PrintType (F, GetFuncReturn (T)); - if (IsQualNear (T)) { - fprintf (F, " __near__"); + /* Get the parameter list string. Start from the first parameter */ + SymEntry* Param = D->SymTab->SymHead; + for (unsigned I = 0; I < D->ParamCount; ++I) { + CHECK (Param != 0 && (Param->Flags & SC_PARAM) != 0); + if (I > 0) { + SB_AppendStr (&ParamList, ", "); + } + if (SymIsRegVar (Param)) { + SB_AppendStr (&ParamList, "register "); + } + if (!HasAnonName (Param)) { + SB_AppendStr (&Buf, Param->Name); + } + SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); + SB_Clear (&Buf); + /* Next argument */ + Param = Param->NextSym; } - if (IsQualFar (T)) { - fprintf (F, " __far__"); - } - if (IsQualFastcall (T)) { - fprintf (F, " __fastcall__"); - } - if (IsQualCDecl (T)) { - fprintf (F, " __cdecl__"); - } - fprintf (F, " %s (", Name); - - /* Parameters */ - if (D->Flags & FD_VOID_PARAM) { - fprintf (F, "void"); + if ((D->Flags & FD_VARIADIC) == 0) { + if (D->ParamCount == 0 && (D->Flags & FD_EMPTY) == 0) { + SB_AppendStr (&ParamList, "void"); + } } else { - unsigned I; - SymEntry* E = D->SymTab->SymHead; - for (I = 0; I < D->ParamCount; ++I) { - if (I > 0) { - fprintf (F, ", "); - } - if (SymIsRegVar (E)) { - fprintf (F, "register "); - } - PrintType (F, E->Type); - E = E->NextSym; + if (D->ParamCount > 0) { + SB_AppendStr (&ParamList, ", ..."); + } else { + SB_AppendStr (&ParamList, "..."); } } + SB_Terminate (&ParamList); - /* End of parameter list */ - fprintf (F, ")"); + /* Get the function qualifiers */ + if (GetQualifierTypeCodeNameBuf (&Buf, T->C, T_QUAL_NONE) > 0) { + /* Append a space between the qualifiers and the name */ + SB_AppendChar (&Buf, ' '); + } + SB_Terminate (&Buf); + + /* Get the signature string without the return type */ + SB_Printf (&West, "%s%s (%s)", SB_GetConstBuf (&Buf), Name, SB_GetConstBuf (&ParamList)); + SB_Done (&Buf); + SB_Done (&ParamList); + + /* Complete with the return type */ + GetFullTypeNameWestEast (&West, &East, GetFuncReturn (T)); + SB_Append (&West, &East); + SB_Terminate (&West); + + /* Output */ + fprintf (F, "%s", SB_GetConstBuf (&West)); + SB_Done (&East); + SB_Done (&West); } void PrintRawType (FILE* F, const Type* T) -/* Print a type string in raw format (for debugging) */ +/* Print a type string in raw hex format (for debugging) */ { while (T->C != T_END) { fprintf (F, "%04lX ", T->C); diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 660681909..00a43fbe1 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -278,13 +278,13 @@ Type* PointerTo (const Type* T); */ void PrintType (FILE* F, const Type* T); -/* Output translation of type array. */ - -void PrintRawType (FILE* F, const Type* T); -/* Print a type string in raw format (for debugging) */ +/* Print fulle name of the type */ void PrintFuncSig (FILE* F, const char* Name, Type* T); -/* Print a function signature. */ +/* Print a function signature */ + +void PrintRawType (FILE* F, const Type* T); +/* Print a type string in raw hex format (for debugging) */ int TypeHasAttr (const Type* T); /* Return true if the given type has attribute data */ From f206833a2028362557da2e06dc982a1aace943d3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 09:10:17 +0800 Subject: [PATCH 0391/2710] Alternative fix for Issue #1167. --- src/cc65/codeinfo.c | 2 +- src/cc65/compile.c | 9 +++++---- src/cc65/datatype.c | 22 ---------------------- src/cc65/datatype.h | 6 ------ src/cc65/function.c | 13 +++++-------- src/cc65/function.h | 5 ++++- src/cc65/pragma.c | 2 +- src/cc65/symentry.h | 1 - src/cc65/symtab.c | 23 +++-------------------- 9 files changed, 19 insertions(+), 64 deletions(-) diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index c9dea5071..3e1d58709 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -392,7 +392,7 @@ fncls_t GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg) /* Did we find it in the top-level table? */ if (E && IsTypeFunc (E->Type)) { - FuncDesc* D = GetFuncCompositeDesc (E); + FuncDesc* D = GetFuncDesc (E->Type); /* A variadic function will use the Y register (the parameter list ** size is passed there). A fastcall function will use the A or A/X diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 54918fb21..82dc7ec63 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -77,6 +77,7 @@ static void Parse (void) { int comma; SymEntry* Entry; + FuncDesc* FuncDef = 0; /* Go... */ NextToken (); @@ -187,9 +188,9 @@ static void Parse (void) /* Convert an empty parameter list into one accepting no ** parameters (same as void) as required by the standard. */ - FuncDesc* D = GetFuncDesc (Decl.Type); - if (D->Flags & FD_EMPTY) { - D->Flags = (D->Flags & ~FD_EMPTY) | FD_VOID_PARAM; + FuncDef = GetFuncDesc (Decl.Type); + if (FuncDef->Flags & FD_EMPTY) { + FuncDef->Flags = (FuncDef->Flags & ~FD_EMPTY) | FD_VOID_PARAM; } } else { /* Just a declaration */ @@ -315,7 +316,7 @@ SkipOneDecl: NextToken (); } else { /* Parse the function body */ - NewFunc (Entry); + NewFunc (Entry, FuncDef); } } diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 48773cba5..0f3c3e5f9 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1140,28 +1140,6 @@ Type* GetFuncReturn (Type* T) -Type* GetFuncCompositeType (SymEntry* Func) -/* Get the composite function type */ -{ - /* Be sure it's a function type */ - CHECK (IsClassFunc (Func->Type)); - - return Func->V.F.Composite->Type; -} - - - -FuncDesc* GetFuncCompositeDesc (SymEntry* Func) -/* Get the composite function type descriptor */ -{ - /* Be sure it's a function type */ - CHECK (IsClassFunc (Func->Type)); - - return GetFuncDesc (Func->V.F.Composite->Type); -} - - - long GetElementCount (const Type* T) /* Get the element count of the array specified in T (which must be of ** array type). diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 00a43fbe1..54f601364 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -816,12 +816,6 @@ void SetFuncDesc (Type* T, FuncDesc* F); Type* GetFuncReturn (Type* T) attribute ((const)); /* Return a pointer to the return type of a function or pointer-to-function type */ -Type* GetFuncCompositeType (struct SymEntry* Func); -/* Get the composite function type */ - -FuncDesc* GetFuncCompositeDesc (struct SymEntry* Func); -/* Get the composite function type descriptor */ - long GetElementCount (const Type* T); /* Get the element count of the array specified in T (which must be of ** array type). diff --git a/src/cc65/function.c b/src/cc65/function.c index b2291b312..fc113b29a 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -72,7 +72,7 @@ Function* CurrentFunc = 0; -static Function* NewFunction (struct SymEntry* Sym) +static Function* NewFunction (struct SymEntry* Sym, FuncDesc* D) /* Create a new function activation structure and return it */ { /* Allocate a new structure */ @@ -81,7 +81,7 @@ static Function* NewFunction (struct SymEntry* Sym) /* Initialize the fields */ F->FuncEntry = Sym; F->ReturnType = GetFuncReturn (Sym->Type); - F->Desc = GetFuncDesc (Sym->Type); + F->Desc = D; F->Reserved = 0; F->RetLab = GetLocalLabel (); F->TopLevelSP = 0; @@ -295,7 +295,7 @@ static void F_RestoreRegVars (Function* F) } /* Get the first symbol from the function symbol table */ - Sym = GetFuncDesc (F->FuncEntry->Type)->SymTab->SymHead; + Sym = F->Desc->SymTab->SymHead; /* Walk through all symbols checking for register variables */ while (Sym) { @@ -375,18 +375,15 @@ static void F_EmitDebugInfo (void) -void NewFunc (SymEntry* Func) +void NewFunc (SymEntry* Func, FuncDesc* D) /* Parse argument declarations and function body. */ { int C99MainFunc = 0;/* Flag for C99 main function returning int */ SymEntry* Param; const Type* RType; /* Real type used for struct parameters */ - /* Get the function descriptor from the function entry */ - FuncDesc* D = GetFuncDesc (Func->Type); - /* Allocate the function activation record for the function */ - CurrentFunc = NewFunction (Func); + CurrentFunc = NewFunction (Func, D); /* Reenter the lexical level */ ReenterFunctionLevel (D); diff --git a/src/cc65/function.h b/src/cc65/function.h index 0954322ac..8231a1970 100644 --- a/src/cc65/function.h +++ b/src/cc65/function.h @@ -67,6 +67,9 @@ struct Function { /* Structure that holds all data needed for function activation */ typedef struct Function Function; +/* Forward declaration */ +struct FuncDesc; + /* Function activation data for current function (or NULL) */ extern Function* CurrentFunc; @@ -138,7 +141,7 @@ int F_AllocRegVar (Function* F, const Type* Type); ** bank (zero page storage). If there is no register space left, return -1. */ -void NewFunc (struct SymEntry* Func); +void NewFunc (struct SymEntry* Func, struct FuncDesc* D); /* Parse argument declarations and function body. */ diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index a0876a550..c614bbfdd 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -527,7 +527,7 @@ static void WrappedCallPragma (StrBuf* B) PushWrappedCall(Entry, (unsigned char) Val); Entry->Flags |= SC_REF; - GetFuncCompositeDesc (Entry)->Flags |= FD_CALL_WRAPPER; + GetFuncDesc (Entry->Type)->Flags |= FD_CALL_WRAPPER; } else { diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 6b05dd72b..94fe66032 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -191,7 +191,6 @@ struct SymEntry { /* Data for functions */ struct { - SymEntry* Composite;/* Entry to hold composite function type */ struct Segments* Seg; /* Segments for this function */ struct LiteralPool* LitPool; /* Literal pool for this function */ } F; diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 02e96cf21..6e0654576 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -590,14 +590,14 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags Entry = 0; } else { /* New type must be compatible with the composite prototype */ - if (TypeCmp (GetFuncCompositeType (Entry), T) < TC_EQUAL) { + if (TypeCmp (Entry->Type, T) < TC_EQUAL) { Error ("Conflicting function types for '%s'", Entry->Name); Entry = 0; } else { /* Refine the existing composite prototype with this new ** one. */ - RefineFuncDesc (GetFuncCompositeType (Entry), T); + RefineFuncDesc (Entry->Type, T); } } @@ -1165,14 +1165,6 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) } if (Entry) { - /* Update existing function type if this is a definition */ - if (IsTypeFunc (Entry->Type) && - !SymIsDef (Entry) && - (Flags & SC_DEF) == SC_DEF) { - TypeFree (Entry->Type); - Entry->Type = TypeDup (T); - } - /* Add the new flags */ Entry->Flags |= Flags; } @@ -1192,17 +1184,8 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) /* Set the symbol attributes */ Entry->Type = TypeDup (T); - /* If this is a function, set the function composite typeand clear - ** additional fields. - */ + /* If this is a function, clear additional fields */ if (IsTypeFunc (T)) { - /* GitHub #1167 - Make a composite prototype */ - ident Ident; - AnonName (Ident, "prototype"); - Entry->V.F.Composite = NewSymEntry (Ident, SC_EXTERN | SC_DECL | SC_ALIAS | SC_FUNC); - Entry->V.F.Composite->Type = TypeDup (T); - AddSymEntry (SymTab0, Entry->V.F.Composite); - Entry->V.F.Seg = 0; } From cf41fccc0aee2c67fc47baffdc376a8122cdff5c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 18 Aug 2020 00:40:29 +0200 Subject: [PATCH 0392/2710] added test related to issue #1143 --- test/err/bug1143err.c | 11 +++++++++++ test/val/bug1143warn.c | 9 +++++++++ 2 files changed, 20 insertions(+) create mode 100644 test/err/bug1143err.c create mode 100644 test/val/bug1143warn.c diff --git a/test/err/bug1143err.c b/test/err/bug1143err.c new file mode 100644 index 000000000..03a6e6d35 --- /dev/null +++ b/test/err/bug1143err.c @@ -0,0 +1,11 @@ + +/* bug #1143 - Multiple storage class specifiers in one declaration? */ + +static static void* y[1]; /* warning */ +extern static int a; /* error */ +extern typedef int A; /* error */ + +int main(void) +{ + return 0; +} diff --git a/test/val/bug1143warn.c b/test/val/bug1143warn.c new file mode 100644 index 000000000..9bbc8ea8b --- /dev/null +++ b/test/val/bug1143warn.c @@ -0,0 +1,9 @@ + +/* bug #1143 - Multiple storage class specifiers in one declaration? */ + +static static void* y[1]; /* warning */ + +int main(void) +{ + return 0; +} From 6d8860b9de994607e4cebaf38350a7ac0b1c8c50 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 18 Aug 2020 00:41:07 +0200 Subject: [PATCH 0393/2710] added test related to issue #1145 --- test/err/bug1145.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 test/err/bug1145.c diff --git a/test/err/bug1145.c b/test/err/bug1145.c new file mode 100644 index 000000000..23401f91b --- /dev/null +++ b/test/err/bug1145.c @@ -0,0 +1,13 @@ + +/* bug #1145 - Internal error with function type object */ + +void f() +{ + f = 0; /* internal error */ +} + +int main(void) +{ + f(); + return 0; +} From 2663561c623c9666a89d82ca9d435680312e4f71 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 18 Aug 2020 00:41:35 +0200 Subject: [PATCH 0394/2710] added test related to pr #1135 --- test/err/pr1135.c | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 test/err/pr1135.c diff --git a/test/err/pr1135.c b/test/err/pr1135.c new file mode 100644 index 000000000..01eff7d93 --- /dev/null +++ b/test/err/pr1135.c @@ -0,0 +1,8 @@ + +void f(void) {} +void f(int); /* Should fail */ + +int main(void) +{ + return 0; +} From 87889df9e90646db40a86eadf34c50d5fde1f324 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 06:27:11 +0800 Subject: [PATCH 0395/2710] Fixed type checking in relation operations. --- src/cc65/expr.c | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index db50e14b0..84d709eb9 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2303,16 +2303,21 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ LoadExpr (CF_NONE, &Expr2); } + /* Check if operands have allowed types for this operation */ + if (!IsRelationType (Expr->Type) || !IsRelationType (Expr2.Type)) { + /* Output only one message even if both sides are wrong */ + TypeCompatibilityDiagnostic (Expr->Type, Expr2.Type, 1, + "Comparing types '%s' with '%s' is invalid"); + /* Avoid further errors */ + ED_MakeConstAbsInt (Expr, 0); + ED_MakeConstAbsInt (&Expr2, 0); + } + /* Some operations aren't allowed on function pointers */ if ((Gen->Flags & GEN_NOFUNC) != 0) { - /* Output only one message even if both sides are wrong */ - if (IsTypeFuncPtr (Expr->Type)) { - Error ("Invalid left operand for relational operator"); - /* Avoid further errors */ - ED_MakeConstAbsInt (Expr, 0); - ED_MakeConstAbsInt (&Expr2, 0); - } else if (IsTypeFuncPtr (Expr2.Type)) { - Error ("Invalid right operand for relational operator"); + if ((IsTypeFuncPtr (Expr->Type) || IsTypeFuncPtr (Expr2.Type))) { + /* Output only one message even if both sides are wrong */ + Error ("Cannot use function pointers in this relation operation"); /* Avoid further errors */ ED_MakeConstAbsInt (Expr, 0); ED_MakeConstAbsInt (&Expr2, 0); @@ -2321,9 +2326,14 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ /* Make sure, the types are compatible */ if (IsClassInt (Expr->Type)) { - if (!IsClassInt (Expr2.Type) && !(IsClassPtr(Expr2.Type) && ED_IsNullPtr(Expr))) { - TypeCompatibilityDiagnostic (Expr->Type, Expr2.Type, 1, - "Incompatible types comparing '%s' with '%s'"); + if (!IsClassInt (Expr2.Type) && !ED_IsNullPtr (Expr)) { + if (IsClassPtr (Expr2.Type)) { + TypeCompatibilityDiagnostic (Expr->Type, PtrConversion (Expr2.Type), 0, + "Comparing integer '%s' with pointer '%s'"); + } else { + TypeCompatibilityDiagnostic (Expr->Type, Expr2.Type, 1, + "Comparing types '%s' with '%s' is invalid"); + } } } else if (IsClassPtr (Expr->Type)) { if (IsClassPtr (Expr2.Type)) { @@ -2334,12 +2344,17 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ Type* right = Indirect (Expr2.Type); if (TypeCmp (left, right) < TC_QUAL_DIFF && left->C != T_VOID && right->C != T_VOID) { /* Incompatible pointers */ - TypeCompatibilityDiagnostic (Expr->Type, Expr2.Type, 1, + TypeCompatibilityDiagnostic (PtrConversion (Expr->Type), PtrConversion (Expr2.Type), 0, "Incompatible pointer types comparing '%s' with '%s'"); } } else if (!ED_IsNullPtr (&Expr2)) { - TypeCompatibilityDiagnostic (Expr->Type, Expr2.Type, 1, - "Comparing pointer type '%s' with '%s'"); + if (IsClassInt (Expr2.Type)) { + TypeCompatibilityDiagnostic (PtrConversion (Expr->Type), Expr2.Type, 0, + "Comparing pointer type '%s' with integer type '%s'"); + } else { + TypeCompatibilityDiagnostic (Expr->Type, Expr2.Type, 1, + "Comparing types '%s' with '%s' is invalid"); + } } } From 56b659c0be743a2630993bf4b7eaaff1c8415a2d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 06:27:11 +0800 Subject: [PATCH 0396/2710] Made char type a distinct type. --- src/cc65/datatype.c | 25 +++++++++++-------------- src/cc65/datatype.h | 34 +++++++++++++++++++++++++++------- src/cc65/declare.c | 4 ++-- src/cc65/global.h | 2 +- src/cc65/main.c | 2 +- src/cc65/stdfunc.c | 10 +++++----- src/cc65/typecmp.c | 6 ++++++ 7 files changed, 53 insertions(+), 30 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 0f3c3e5f9..b95e37f87 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -59,6 +59,7 @@ /* Predefined type strings */ +Type type_char[] = { TYPE(T_CHAR), TYPE(T_END) }; Type type_schar[] = { TYPE(T_SCHAR), TYPE(T_END) }; Type type_uchar[] = { TYPE(T_UCHAR), TYPE(T_END) }; Type type_int[] = { TYPE(T_INT), TYPE(T_END) }; @@ -431,14 +432,6 @@ int SignExtendChar (int C) -TypeCode GetDefaultChar (void) -/* Return the default char type (signed/unsigned) depending on the settings */ -{ - return IS_Get (&SignedChars)? T_SCHAR : T_UCHAR; -} - - - Type* GetCharArrayType (unsigned Len) /* Return the type for a char array of the given length */ { @@ -448,7 +441,7 @@ Type* GetCharArrayType (unsigned Len) /* Fill the type string */ T[0].C = T_ARRAY; T[0].A.L = Len; /* Array length is in the L attribute */ - T[1].C = GetDefaultChar (); + T[1].C = T_CHAR; T[2].C = T_END; /* Return the new type */ @@ -685,8 +678,9 @@ int TypeHasAttr (const Type* T) const Type* GetUnderlyingType (const Type* Type) /* Get the underlying type of an enum or other integer class type */ { - if (IsTypeEnum (Type)) { - + if (IsISOChar (Type)) { + return IS_Get (&SignedChars) ? type_schar : type_uchar; + } else if (IsTypeEnum (Type)) { /* This should not happen, but just in case */ if (Type->A.P == 0) { Internal ("Enum tag type error in GetUnderlyingTypeCode"); @@ -708,8 +702,11 @@ TypeCode GetUnderlyingTypeCode (const Type* Type) TypeCode Underlying = UnqualifiedType (Type->C); TypeCode TCode; - /* We could also support other T_CLASS_INT types, but just enums for now */ - if (IsTypeEnum (Type)) { + if (IsISOChar (Type)) { + + return IS_Get (&SignedChars) ? T_SCHAR : T_UCHAR; + + } else if (IsTypeEnum (Type)) { /* This should not happen, but just in case */ if (Type->A.P == 0) { @@ -996,7 +993,7 @@ int IsClassArithmetic (const Type* T) int IsClassBasic (const Type* T) /* Return true if this is a char, integer or floating type */ { - return IsRawTypeChar (T) || IsClassInt (T) || IsClassFloat (T); + return IsClassChar (T) || IsClassInt (T) || IsClassFloat (T); } diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 54f601364..472098788 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -117,7 +117,7 @@ enum { T_MASK_QUAL = 0x07F000, /* Types */ - T_CHAR = T_TYPE_CHAR | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_CHAR, + T_CHAR = T_TYPE_CHAR | T_CLASS_INT | T_SIGN_NONE | T_SIZE_CHAR, T_SCHAR = T_TYPE_CHAR | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_CHAR, T_UCHAR = T_TYPE_CHAR | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_CHAR, T_SHORT = T_TYPE_SHORT | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_SHORT, @@ -189,6 +189,7 @@ struct Type { #define PTR_BITS (8 * SIZEOF_PTR) /* Predefined type strings */ +extern Type type_char[]; extern Type type_schar[]; extern Type type_uchar[]; extern Type type_int[]; @@ -250,9 +251,6 @@ void TypeFree (Type* T); int SignExtendChar (int C); /* Do correct sign extension of a character */ -TypeCode GetDefaultChar (void); -/* Return the default char type (signed/unsigned) depending on the settings */ - Type* GetCharArrayType (unsigned Len); /* Return the type for a char array of the given length */ @@ -365,7 +363,7 @@ INLINE TypeCode GetRawType (const Type* T) #if defined(HAVE_INLINE) INLINE int IsTypeChar (const Type* T) -/* Return true if this is a character type */ +/* Return true if this is a char type */ { return (GetRawType (GetUnderlyingType (T)) == T_TYPE_CHAR); } @@ -395,7 +393,7 @@ INLINE int IsTypeInt (const Type* T) #if defined(HAVE_INLINE) INLINE int IsTypeLong (const Type* T) -/* Return true if this is a long type (signed or unsigned) */ +/* Return true if this is a long int type (signed or unsigned) */ { return (GetRawType (GetUnderlyingType (T)) == T_TYPE_LONG); } @@ -403,9 +401,31 @@ INLINE int IsTypeLong (const Type* T) # define IsTypeLong(T) (GetRawType (GetUnderlyingType (T)) == T_TYPE_LONG) #endif +#if defined(HAVE_INLINE) +INLINE int IsISOChar (const Type* T) +/* Return true if this is a narrow character type (without signed/unsigned) */ +{ + return (UnqualifiedType (T->C) == T_CHAR); +} +#else +# define IsISOChar(T) (UnqualifiedType ((T)->C) == T_CHAR) +#endif + +#if defined(HAVE_INLINE) +INLINE int IsClassChar (const Type* T) +/* Return true if this is a narrow character type (including signed/unsigned). +** For now this is the same as IsRawTypeChar(T). +*/ +{ + return (GetRawType (T) == T_TYPE_CHAR); +} +#else +# define IsClassChar(T) (GetRawType (T) == T_TYPE_CHAR) +#endif + #if defined(HAVE_INLINE) INLINE int IsRawTypeChar (const Type* T) -/* Return true if this is a character raw type */ +/* Return true if this is a char raw type (including signed/unsigned) */ { return (GetRawType (T) == T_TYPE_CHAR); } diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 36286b6d5..44d4e4142 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1169,7 +1169,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers) case TOK_CHAR: NextToken (); - D->Type[0].C = GetDefaultChar(); + D->Type[0].C = T_CHAR; D->Type[1].C = T_END; break; @@ -2195,7 +2195,7 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) long ElementCount = GetElementCount (T); /* Special handling for a character array initialized by a literal */ - if (IsRawTypeChar (ElementType) && + if (IsClassChar (ElementType) && (CurTok.Tok == TOK_SCONST || CurTok.Tok == TOK_WCSCONST || (CurTok.Tok == TOK_LCURLY && (NextTok.Tok == TOK_SCONST || NextTok.Tok == TOK_WCSCONST)))) { diff --git a/src/cc65/global.h b/src/cc65/global.h index 4ffc84a39..b9bcf5550 100644 --- a/src/cc65/global.h +++ b/src/cc65/global.h @@ -67,7 +67,7 @@ extern IntStack EnableRegVars; /* Enable register variables */ extern IntStack AllowRegVarAddr; /* Allow taking addresses of register vars */ extern IntStack RegVarsToCallStack; /* Save reg variables on call stack */ extern IntStack StaticLocals; /* Make local variables static */ -extern IntStack SignedChars; /* Make characters signed by default */ +extern IntStack SignedChars; /* Use 'signed char' as the underlying type of 'char' */ extern IntStack CheckStack; /* Generate stack overflow checks */ extern IntStack Optimize; /* Optimize flag */ extern IntStack CodeSizeFactor; /* Size factor for generated code */ diff --git a/src/cc65/main.c b/src/cc65/main.c index 3e60bcb95..26dd721be 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -731,7 +731,7 @@ static void OptRodataName (const char* Opt attribute ((unused)), const char* Arg static void OptSignedChars (const char* Opt attribute ((unused)), const char* Arg attribute ((unused))) -/* Make default characters signed */ +/* Use 'signed char' as the underlying type of 'char' */ { IS_Set (&SignedChars, 1); } diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index 6d61f2750..94e56a625 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -783,8 +783,8 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr) int Offs; /* Setup the argument type string */ - Arg1Type[1].C = GetDefaultChar () | T_QUAL_CONST; - Arg2Type[1].C = GetDefaultChar () | T_QUAL_CONST; + Arg1Type[1].C = T_CHAR | T_QUAL_CONST; + Arg2Type[1].C = T_CHAR | T_QUAL_CONST; /* Argument #1 */ ParseArg (&Arg1, Arg1Type); @@ -983,8 +983,8 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) unsigned L1; /* Setup the argument type string */ - Arg1Type[1].C = GetDefaultChar (); - Arg2Type[1].C = GetDefaultChar () | T_QUAL_CONST; + Arg1Type[1].C = T_CHAR; + Arg2Type[1].C = T_CHAR | T_QUAL_CONST; /* Argument #1 */ ParseArg (&Arg1, Arg1Type); @@ -1181,7 +1181,7 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) unsigned L; /* Setup the argument type string */ - ArgType[1].C = GetDefaultChar () | T_QUAL_CONST; + ArgType[1].C = T_CHAR | T_QUAL_CONST; /* Evaluate the parameter */ hie1 (&Arg); diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index e3e42e67f..24d9a385f 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -233,6 +233,12 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) } + /* 'char' is neither 'signed char' nor 'unsigned char' */ + if ((IsISOChar (lhs) && !IsISOChar (rhs)) || + (!IsISOChar (lhs) && IsISOChar (rhs))) { + SetResult (Result, TC_COMPATIBLE); + } + /* On indirection level zero, a qualifier or sign difference is ** accepted. The types are no longer equal, but compatible. */ From 55cebc7b9e8d5e34dc80d638405b29968e89c309 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Mon, 17 Aug 2020 22:29:52 +0200 Subject: [PATCH 0397/2710] Move bit-field adjustment to codegen.c Extract functions g_testbitfield and g_extractbitfield from LoadExpr. This helps prepare for #1192, since g_extractbitfield will get much longer and call AddCodeLine. --- src/cc65/codegen.c | 58 +++++++++++++++++++++++++++++++++++++++++++++ src/cc65/codegen.h | 11 +++++++++ src/cc65/loadexpr.c | 44 +++------------------------------- 3 files changed, 72 insertions(+), 41 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 2c6624a5c..a81b2cf46 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -33,6 +33,7 @@ +#include <limits.h> #include <stdio.h> #include <string.h> #include <stdarg.h> @@ -4424,6 +4425,63 @@ void g_initstatic (unsigned InitLabel, unsigned VarLabel, unsigned Size) +/*****************************************************************************/ +/* Bit-fields */ +/*****************************************************************************/ + + + +void g_testbitfield (unsigned Flags, unsigned BitOffs, unsigned BitWidth) +/* Test bit-field in ax. */ +{ + unsigned EndBit = BitOffs + BitWidth; + + /* If we need to do a test, then we avoid shifting (ASR only shifts one bit at a time, + ** so is slow) and just AND with the appropriate mask, then test the result of that. + */ + + /* Avoid overly large shift on host platform. */ + if (EndBit == sizeof (unsigned long) * CHAR_BIT) { + g_and (Flags | CF_CONST, (~0UL << BitOffs)); + } else { + g_and (Flags | CF_CONST, ((1UL << EndBit) - 1) & (~0UL << BitOffs)); + } + + /* TODO: When long bit-fields are supported, an optimization to test only 3 bytes when + ** EndBit <= 24 is possible. + */ + g_test (Flags | CF_CONST); +} + + + +void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, + unsigned BitOffs, unsigned BitWidth) +/* Extract bits from bit-field in ax. */ +{ + unsigned EndBit = BitOffs + BitWidth; + + /* Shift right by the bit offset; no code is emitted if BitOffs is zero */ + g_asr (Flags | CF_CONST, BitOffs); + + /* Since we have now shifted down, we could do char ops when the width fits in a char, but we + ** also need to clear the high byte since we've been using CF_FORCECHAR up to now. + */ + + /* And by the width if the field doesn't end on a char or int boundary. If it does end on + ** a boundary, then zeros have already been shifted in, but we need to clear the high byte + ** for char. g_and emits no code if the mask is all ones. + */ + if (EndBit == CHAR_BITS) { + /* We need to clear the high byte, since CF_FORCECHAR was set. */ + g_and (FullWidthFlags | CF_CONST, 0xFF); + } else if (EndBit != INT_BITS) { + g_and (FullWidthFlags | CF_CONST, (0x0001U << BitWidth) - 1U); + } +} + + + /*****************************************************************************/ /* Switch statement */ /*****************************************************************************/ diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index c63fc5398..6581fc54e 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -471,6 +471,17 @@ void g_initstatic (unsigned InitLabel, unsigned VarLabel, unsigned Size); +/*****************************************************************************/ +/* Bit-fields */ +/*****************************************************************************/ + +void g_testbitfield (unsigned Flags, unsigned BitOffs, unsigned BitWidth); +/* Test bit-field in ax. */ + +void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, + unsigned BitOffs, unsigned BitWidth); +/* Extract bits from bit-field in ax. */ + /*****************************************************************************/ /* Switch statement */ /*****************************************************************************/ diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index ba585d3e3..452d9a9a3 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -33,8 +33,6 @@ -#include <limits.h> - /* cc65 */ #include "codegen.h" #include "error.h" @@ -115,11 +113,10 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) ** field is completely contained in the lower byte, we will throw away ** the high byte anyway and may therefore load just the low byte. */ - unsigned EndBit = 0; /* End bit for bit-fields, or zero if non-bit-field. */ int AdjustBitField = 0; unsigned BitFieldFullWidthFlags = 0; if (ED_IsBitField (Expr)) { - EndBit = Expr->BitOffs + Expr->BitWidth; + unsigned EndBit = Expr->BitOffs + Expr->BitWidth; AdjustBitField = Expr->BitOffs != 0 || (EndBit != CHAR_BITS && EndBit != INT_BITS); /* TODO: This probably needs to be guarded by AdjustBitField when long bit-fields are @@ -226,50 +223,15 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) ** so be sure to always use unsigned ints for the operations. */ if (AdjustBitField) { - unsigned F = Flags | CF_CONST; - /* We always need to do something with the low byte, so there is no opportunity ** for optimization by skipping it. */ CHECK (Expr->BitOffs < CHAR_BITS); if (ED_NeedsTest (Expr)) { - /* If we need to do a test, then we avoid shifting (ASR only shifts one bit - ** at a time, so is slow) and just AND with the appropriate mask, then test - ** the result of that. - */ - - /* Avoid overly large shift on host platform. */ - if (EndBit == sizeof (unsigned long) * CHAR_BIT) { - g_and (F, (~0UL << Expr->BitOffs)); - } else { - g_and (F, ((1UL << EndBit) - 1) & (~0UL << Expr->BitOffs)); - } - - /* TODO: When long bit-fields are supported, an optimization to test only 3 bytes - ** when EndBit <= 24 is possible. - */ - g_test (F); + g_testbitfield (Flags, Expr->BitOffs, Expr->BitWidth); } else { - /* Shift right by the bit offset; no code is emitted if BitOffs is zero */ - g_asr (F, Expr->BitOffs); - - /* Since we have now shifted down, we could do char ops when the width fits in - ** a char, but we also need to clear the high byte since we've been using - ** CF_FORCECHAR up to now. - */ - - /* And by the width if the field doesn't end on a char or int boundary. - ** If it does end on a boundary, then zeros have already been shifted in, - ** but we need to clear the high byte for char. g_and emits no code if the mask - ** is all ones. - */ - if (EndBit == CHAR_BITS) { - /* We need to clear the high byte, since CF_FORCECHAR was set. */ - g_and (BitFieldFullWidthFlags | CF_CONST, 0xFF); - } else if (EndBit != INT_BITS) { - g_and (BitFieldFullWidthFlags | CF_CONST, (0x0001U << Expr->BitWidth) - 1U); - } + g_extractbitfield (Flags, BitFieldFullWidthFlags, Expr->BitOffs, Expr->BitWidth); } } From ff535b8e1a79205fe877904d922068ab6d3467d2 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sun, 19 Jul 2020 22:59:44 +0200 Subject: [PATCH 0398/2710] Treat signed int bit-fields as signed Prior to this PR, `int`, `signed int`, and `unsigned int` bitfields are all treated as `unsigned int`. With this PR, `signed int` will be treated as `signed int`, and the others remain unsigned. Since `Type` does not distinguish between `int` and `signed int`, add an extra `int* SignenessSpecified` param to `ParseTypeSpec` so we can tell these apart for bit-fields and treat plain `int : N` as `unsigned int : N` since it is more efficient to zero-extend than sign-extend. Fixes #1095 --- src/cc65/codegen.c | 75 +++++++++++++++++++++++--- src/cc65/codegen.h | 2 +- src/cc65/declare.c | 102 +++++++++++++++++++++++++++-------- src/cc65/loadexpr.c | 13 +++-- src/cc65/symtab.c | 16 ++++-- src/cc65/symtab.h | 3 +- test/{todo => val}/bug1095.c | 47 ++++++++++++++-- 7 files changed, 218 insertions(+), 40 deletions(-) rename test/{todo => val}/bug1095.c (74%) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index a81b2cf46..a0dbc498b 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -4455,7 +4455,7 @@ void g_testbitfield (unsigned Flags, unsigned BitOffs, unsigned BitWidth) -void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, +void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, int IsSigned, unsigned BitOffs, unsigned BitWidth) /* Extract bits from bit-field in ax. */ { @@ -4465,18 +4465,79 @@ void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, g_asr (Flags | CF_CONST, BitOffs); /* Since we have now shifted down, we could do char ops when the width fits in a char, but we - ** also need to clear the high byte since we've been using CF_FORCECHAR up to now. + ** also need to clear (or set) the high byte since we've been using CF_FORCECHAR up to now. */ + unsigned Mask = (1U << BitWidth) - 1; - /* And by the width if the field doesn't end on a char or int boundary. If it does end on - ** a boundary, then zeros have already been shifted in, but we need to clear the high byte - ** for char. g_and emits no code if the mask is all ones. + /* To zero-extend, we will and by the width if the field doesn't end on a char or + ** int boundary. If it does end on a boundary, then zeros will have already been shifted in, + ** but we need to clear the high byte for char. g_and emits no code if the mask is all ones. + ** This is here so the signed and unsigned branches can use it. */ + unsigned ZeroExtendMask = 0; /* Zero if we don't need to zero-extend. */ if (EndBit == CHAR_BITS) { /* We need to clear the high byte, since CF_FORCECHAR was set. */ - g_and (FullWidthFlags | CF_CONST, 0xFF); + ZeroExtendMask = 0xFF; } else if (EndBit != INT_BITS) { - g_and (FullWidthFlags | CF_CONST, (0x0001U << BitWidth) - 1U); + ZeroExtendMask = (1U << BitWidth) - 1; + } + + /* Handle signed bit-fields. */ + if (IsSigned) { + /* Push A, since the sign bit test will destroy it. */ + AddCodeLine ("pha"); + + /* Check sign bit */ + unsigned SignBitPos = BitWidth - 1U; + unsigned SignBitByte = SignBitPos / CHAR_BITS; + unsigned SignBitPosInByte = SignBitPos % CHAR_BITS; + unsigned SignBitMask = 1U << SignBitPosInByte; + + /* Move the correct byte to A. This can only be X for now, + ** but more cases will be needed to support long. + */ + switch (SignBitByte) { + case 0: + break; + case 1: + AddCodeLine ("txa"); + break; + default: + FAIL ("Invalid Byte for sign bit"); + } + + /* Test the sign bit */ + AddCodeLine ("and #$%02X", SignBitMask); + unsigned ZeroExtendLabel = GetLocalLabel (); + AddCodeLine ("beq %s", LocalLabelName (ZeroExtendLabel)); + + /* Pop A back and sign extend if required; operating on the full result need + ** to sign-extend into high byte, too. + */ + AddCodeLine ("pla"); + g_or (FullWidthFlags | CF_CONST, ~Mask); + + /* Apparently, there is no unconditional branch BRA, so use JMP. */ + unsigned DoneLabel = GetLocalLabel (); + AddCodeLine ("jmp %s", LocalLabelName (DoneLabel)); + + /* Pop A back, then zero-extend; we need to duplicate the PLA rather than move it before + ** the branch to share with the other label because PLA sets the condition codes. + */ + g_defcodelabel (ZeroExtendLabel); + AddCodeLine ("pla"); + + /* Zero the upper bits, the same as the unsigned path. */ + if (ZeroExtendMask != 0) { + g_and (FullWidthFlags | CF_CONST, ZeroExtendMask); + } + + g_defcodelabel (DoneLabel); + } else { + /* Unsigned bit-field, only needs zero-extension. */ + if (ZeroExtendMask != 0) { + g_and (FullWidthFlags | CF_CONST, ZeroExtendMask); + } } } diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index 6581fc54e..ec4756f2d 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -478,7 +478,7 @@ void g_initstatic (unsigned InitLabel, unsigned VarLabel, unsigned Size); void g_testbitfield (unsigned Flags, unsigned BitOffs, unsigned BitWidth); /* Test bit-field in ax. */ -void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, +void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, int IsSigned, unsigned BitOffs, unsigned BitWidth); /* Extract bits from bit-field in ax. */ diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 44d4e4142..ccd4e9004 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -41,6 +41,7 @@ /* common */ #include "addrsize.h" #include "mmodel.h" +#include "shift.h" #include "xmalloc.h" /* cc65 */ @@ -87,7 +88,8 @@ struct StructInitData { -static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers); +static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, + int* SignednessSpecified); /* Parse a type specifier */ static unsigned ParseInitInternal (Type* T, int* Braces, int AllowFlexibleMembers); @@ -252,12 +254,15 @@ static void OptionalInt (void) -static void OptionalSigned (void) +static void OptionalSigned (int* SignednessSpecified) /* Eat an optional "signed" token */ { if (CurTok.Tok == TOK_SIGNED) { /* Skip it */ NextToken (); + if (SignednessSpecified != NULL) { + *SignednessSpecified = 1; + } } } @@ -728,6 +733,9 @@ static int ParseFieldWidth (Declaration* Decl) return -1; } + /* TODO: This can be relaxed to be any integral type, but + ** ParseStructInit currently only supports up to int. + */ if (SizeOf (Decl->Type) != SizeOf (type_uint)) { /* Only int sized types may be used for bit-fields for now */ Error ("cc65 currently only supports unsigned int bit-fields"); @@ -774,7 +782,8 @@ static unsigned PadWithBitField (unsigned StructSize, unsigned BitOffs) /* Add an anonymous bit-field that aligns to the next ** byte. */ - AddBitField (Ident, StructSize, BitOffs, PaddingBits); + AddBitField (Ident, type_uchar, StructSize, BitOffs, PaddingBits, + /*SignednessSpecified=*/1); return PaddingBits; } @@ -866,8 +875,9 @@ static SymEntry* ParseUnionDecl (const char* Name) /* Get the type of the entry */ DeclSpec Spec; + int SignednessSpecified = 0; InitDeclSpec (&Spec); - ParseTypeSpec (&Spec, -1, T_QUAL_NONE); + ParseTypeSpec (&Spec, -1, T_QUAL_NONE, &SignednessSpecified); /* Read fields with this type */ while (1) { @@ -909,7 +919,11 @@ static SymEntry* ParseUnionDecl (const char* Name) /* Add a field entry to the table. */ if (FieldWidth > 0) { - AddBitField (Decl.Ident, 0, 0, FieldWidth); + /* For a union, allocate space for the type specified by the + ** bit-field. + */ + AddBitField (Decl.Ident, Decl.Type, 0, 0, FieldWidth, + SignednessSpecified); } else { if (IsAnonName (Decl.Ident)) { Entry = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0); @@ -997,8 +1011,9 @@ static SymEntry* ParseStructDecl (const char* Name) continue; } + int SignednessSpecified = 0; InitDeclSpec (&Spec); - ParseTypeSpec (&Spec, -1, T_QUAL_NONE); + ParseTypeSpec (&Spec, -1, T_QUAL_NONE, &SignednessSpecified); /* Read fields with this type */ while (1) { @@ -1020,12 +1035,13 @@ static SymEntry* ParseStructDecl (const char* Name) FieldWidth = ParseFieldWidth (&Decl); /* If this is not a bit field, or the bit field is too large for - ** the remainder of the current member, or we have a bit field + ** the remainder of the allocated unit, or we have a bit field ** with width zero, align the struct to the next member by adding ** a member with an anonymous name. */ if (BitOffs > 0) { - if (FieldWidth <= 0 || (BitOffs + FieldWidth) > INT_BITS) { + if (FieldWidth <= 0 || + (BitOffs + FieldWidth) > CHAR_BITS * SizeOf (Decl.Type)) { /* Add an anonymous bit-field that aligns to the next ** byte. */ @@ -1087,9 +1103,10 @@ static SymEntry* ParseStructDecl (const char* Name) ** bit-field as a char type in expressions. */ CHECK (BitOffs < CHAR_BITS); - AddBitField (Decl.Ident, StructSize, BitOffs, FieldWidth); + AddBitField (Decl.Ident, Decl.Type, StructSize, BitOffs, + FieldWidth, SignednessSpecified); BitOffs += FieldWidth; - CHECK (BitOffs <= INT_BITS); + CHECK (BitOffs <= CHAR_BITS * SizeOf (Decl.Type)); /* Add any full bytes to the struct size. */ StructSize += BitOffs / CHAR_BITS; BitOffs %= CHAR_BITS; @@ -1145,12 +1162,20 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { -static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers) -/* Parse a type specifier */ +static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, + int* SignednessSpecified) +/* Parse a type specifier. Store whether one of "signed" or "unsigned" was +** specified, so bit-fields of unspecified signedness can be treated as +** unsigned; without special handling, it would be treated as signed. +*/ { ident Ident; SymEntry* Entry; + if (SignednessSpecified != NULL) { + *SignednessSpecified = 0; + } + /* Assume we have an explicit type */ D->Flags &= ~DS_DEF_TYPE; @@ -1176,12 +1201,15 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers) case TOK_LONG: NextToken (); if (CurTok.Tok == TOK_UNSIGNED) { + if (SignednessSpecified != NULL) { + *SignednessSpecified = 1; + } NextToken (); OptionalInt (); D->Type[0].C = T_ULONG; D->Type[1].C = T_END; } else { - OptionalSigned (); + OptionalSigned (SignednessSpecified); OptionalInt (); D->Type[0].C = T_LONG; D->Type[1].C = T_END; @@ -1191,12 +1219,15 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers) case TOK_SHORT: NextToken (); if (CurTok.Tok == TOK_UNSIGNED) { + if (SignednessSpecified != NULL) { + *SignednessSpecified = 1; + } NextToken (); OptionalInt (); D->Type[0].C = T_USHORT; D->Type[1].C = T_END; } else { - OptionalSigned (); + OptionalSigned (SignednessSpecified); OptionalInt (); D->Type[0].C = T_SHORT; D->Type[1].C = T_END; @@ -1210,6 +1241,9 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers) break; case TOK_SIGNED: + if (SignednessSpecified != NULL) { + *SignednessSpecified = 1; + } NextToken (); switch (CurTok.Tok) { @@ -1245,6 +1279,9 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers) break; case TOK_UNSIGNED: + if (SignednessSpecified != NULL) { + *SignednessSpecified = 1; + } NextToken (); switch (CurTok.Tok) { @@ -1835,7 +1872,7 @@ Type* ParseType (Type* T) /* Get a type without a default */ InitDeclSpec (&Spec); - ParseTypeSpec (&Spec, -1, T_QUAL_NONE); + ParseTypeSpec (&Spec, -1, T_QUAL_NONE, NULL); /* Parse additional declarators */ ParseDecl (&Spec, &Decl, DM_NO_IDENT); @@ -1967,7 +2004,7 @@ void ParseDeclSpec (DeclSpec* D, unsigned DefStorage, long DefType) ParseStorageClass (D, DefStorage); /* Parse the type specifiers passing any initial type qualifiers */ - ParseTypeSpec (D, DefType, Qualifiers); + ParseTypeSpec (D, DefType, Qualifiers, NULL); } @@ -2362,6 +2399,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) ** into 3 bytes. */ SI.ValBits += Entry->V.B.BitWidth; + /* TODO: Generalize this so any type can be used. */ CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); while (SI.ValBits >= CHAR_BITS) { OutputBitFieldData (&SI); @@ -2393,16 +2431,34 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) SI.Offs * CHAR_BITS + SI.ValBits); /* Read the data, check for a constant integer, do a range check */ - ParseScalarInitInternal (type_uint, &ED); + ParseScalarInitInternal (Entry->Type, &ED); if (!ED_IsConstAbsInt (&ED)) { Error ("Constant initializer expected"); ED_MakeConstAbsInt (&ED, 1); } - if (ED.IVal > (long) Mask) { - Warning ("Truncating value in bit-field initializer"); - ED.IVal &= (long) Mask; + + /* Truncate the initializer value to the width of the bit-field and check if we lost + ** any useful bits. + */ + Val = (unsigned) ED.IVal & Mask; + if (IsSignUnsigned (Entry->Type)) { + if (ED.IVal < 0 || (unsigned long) ED.IVal != Val) { + Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer" + " changes value from %ld to %u", + GetFullTypeName (ED.Type), GetFullTypeName (Entry->Type), + Entry->V.B.BitWidth, ED.IVal, Val); + } + } else { + /* Sign extend back to full width of host long. */ + unsigned ShiftBits = sizeof (long) * CHAR_BIT - Entry->V.B.BitWidth; + long RestoredVal = asr_l(asl_l (Val, ShiftBits), ShiftBits); + if (ED.IVal != RestoredVal) { + Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer " + "changes value from %ld to %d", + GetFullTypeName (ED.Type), GetFullTypeName (Entry->Type), + Entry->V.B.BitWidth, ED.IVal, Val); + } } - Val = (unsigned) ED.IVal; /* Add the value to the currently stored bit-field value */ Shift = (Entry->V.B.Offs - SI.Offs) * CHAR_BITS + Entry->V.B.BitOffs; @@ -2417,6 +2473,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) ** aligned, so will have padding before it. */ CHECK (SI.ValBits <= CHAR_BIT * sizeof(SI.BitVal)); + /* TODO: Generalize this so any type can be used. */ CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); while (SI.ValBits >= CHAR_BITS) { OutputBitFieldData (&SI); @@ -2425,7 +2482,8 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) } else { /* Standard member. We should never have stuff from a - ** bit-field left + ** bit-field left because an anonymous member was added + ** for padding by ParseStructDecl. */ CHECK (SI.ValBits == 0); diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index 452d9a9a3..f3a1a6add 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -123,7 +123,9 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) ** supported. */ Flags |= (EndBit <= CHAR_BITS) ? CF_CHAR : CF_INT; - Flags |= CF_UNSIGNED; + if (IsSignUnsigned (Expr->Type)) { + Flags |= CF_UNSIGNED; + } /* Flags we need operate on the whole bit-field, without CF_FORCECHAR. */ BitFieldFullWidthFlags = Flags; @@ -133,7 +135,11 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) ** type is not CF_CHAR. */ if (AdjustBitField) { - Flags |= CF_FORCECHAR; + /* If adjusting, then we're sign extending manually, so do everything unsigned + ** to make shifts faster. + */ + Flags |= CF_UNSIGNED | CF_FORCECHAR; + BitFieldFullWidthFlags |= CF_UNSIGNED; } } else if ((Flags & CF_TYPEMASK) == 0) { Flags |= TypeOf (Expr->Type); @@ -231,7 +237,8 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) if (ED_NeedsTest (Expr)) { g_testbitfield (Flags, Expr->BitOffs, Expr->BitWidth); } else { - g_extractbitfield (Flags, BitFieldFullWidthFlags, Expr->BitOffs, Expr->BitWidth); + g_extractbitfield (Flags, BitFieldFullWidthFlags, IsSignSigned (Expr->Type), + Expr->BitOffs, Expr->BitWidth); } } diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 6e0654576..7e6a9f5bb 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -819,7 +819,8 @@ SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTabl -SymEntry* AddBitField (const char* Name, unsigned Offs, unsigned BitOffs, unsigned BitWidth) +SymEntry* AddBitField (const char* Name, const Type* T, unsigned Offs, + unsigned BitOffs, unsigned BitWidth, int SignednessSpecified) /* Add a bit field to the local symbol table and return the symbol entry */ { /* Do we have an entry with this name already? */ @@ -834,12 +835,21 @@ SymEntry* AddBitField (const char* Name, unsigned Offs, unsigned BitOffs, unsign /* Create a new entry */ Entry = NewSymEntry (Name, SC_BITFIELD); - /* Set the symbol attributes. Bit-fields are always of type unsigned */ - Entry->Type = type_uint; + /* Set the symbol attributes. Bit-fields are always integral types. */ + Entry->Type = TypeDup (T); Entry->V.B.Offs = Offs; Entry->V.B.BitOffs = BitOffs; Entry->V.B.BitWidth = BitWidth; + if (!SignednessSpecified) { + /* int is treated as signed int everywhere except bit-fields; switch it to unsigned, + ** since this is allowed for bit-fields and avoids sign-extension, so is much faster. + */ + CHECK ((Entry->Type->C & T_MASK_SIGN) == T_SIGN_SIGNED); + Entry->Type->C &= ~T_MASK_SIGN; + Entry->Type->C |= T_SIGN_UNSIGNED; + } + /* Add the entry to the symbol table */ AddSymEntry (SymTab, Entry); diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h index f04517fed..750e41b54 100644 --- a/src/cc65/symtab.h +++ b/src/cc65/symtab.h @@ -155,7 +155,8 @@ SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTab SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTable* Tab); /* Add a struct/union entry and return it */ -SymEntry* AddBitField (const char* Name, unsigned Offs, unsigned BitOffs, unsigned BitWidth); +SymEntry* AddBitField (const char* Name, const Type* Type, unsigned Offs, + unsigned BitOffs, unsigned BitWidth, int SignednessSpecified); /* Add a bit field to the local symbol table and return the symbol entry */ SymEntry* AddConstSym (const char* Name, const Type* T, unsigned Flags, long Val); diff --git a/test/todo/bug1095.c b/test/val/bug1095.c similarity index 74% rename from test/todo/bug1095.c rename to test/val/bug1095.c index 0803c2d1c..8c184cd1d 100644 --- a/test/todo/bug1095.c +++ b/test/val/bug1095.c @@ -31,7 +31,10 @@ static struct signed_ints { signed int b : 3; signed int c : 3; signed int d : 10; -} si = {-4, -1, 3, -500}; + signed int : 0; + signed int e : 8; + signed int f : 16; +} si = {-4, -1, 3, -500, -100, -5000}; static void test_signed_bitfield(void) { @@ -53,7 +56,7 @@ static void test_signed_bitfield(void) failures++; } - if (si.b <= 0) { + if (si.c <= 0) { printf("Got si.c = %d, expected positive.\n", si.c); failures++; } @@ -71,10 +74,30 @@ static void test_signed_bitfield(void) failures++; } + if (si.e >= 0) { + printf("Got si.e = %d, expected negative.\n", si.e); + failures++; + } + if (si.e != -100) { + printf("Got si.e = %d, expected -100.\n", si.e); + failures++; + } + + if (si.f >= 0) { + printf("Got si.f = %d, expected negative.\n", si.f); + failures++; + } + if (si.f != -5000) { + printf("Got si.f = %d, expected -5000.\n", si.f); + failures++; + } + si.a = -3; si.b = 1; si.c = -2; si.d = 500; + si.e = 100; + si.f = 5000; if (si.a >= 0) { printf("Got si.a = %d, expected negative.\n", si.a); @@ -94,7 +117,7 @@ static void test_signed_bitfield(void) failures++; } - if (si.b >= 0) { + if (si.c >= 0) { printf("Got si.c = %d, expected negative.\n", si.c); failures++; } @@ -111,6 +134,24 @@ static void test_signed_bitfield(void) printf("Got si.d = %d, expected 500.\n", si.d); failures++; } + + if (si.e <= 0) { + printf("Got si.e = %d, expected positive.\n", si.e); + failures++; + } + if (si.e != 100) { + printf("Got si.e = %d, expected 100.\n", si.e); + failures++; + } + + if (si.f <= 0) { + printf("Got si.f = %d, expected positive.\n", si.f); + failures++; + } + if (si.f != 5000) { + printf("Got si.f = %d, expected 5000.\n", si.f); + failures++; + } } int main(void) From ab89c168decdb959251c28314bd29f20943fba33 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 18 Aug 2020 17:47:35 +0200 Subject: [PATCH 0399/2710] replace "Copyright 2020 Google LLC" by "Copyright 2020 the cc65 authors" --- test/err/bitfield-named-zero-width.c | 2 +- test/err/bitfield-negative-width.c | 2 +- test/err/bitfield-too-wide.c | 2 +- test/err/bug1047.c | 2 +- test/err/staticassert.c | 2 +- test/val/bitfield.c | 2 +- test/val/bug1095.c | 2 +- test/val/plain-int-bitfield.c | 2 +- test/val/staticassert.c | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/test/err/bitfield-named-zero-width.c b/test/err/bitfield-named-zero-width.c index b9b9db88d..323c3d49c 100644 --- a/test/err/bitfield-named-zero-width.c +++ b/test/err/bitfield-named-zero-width.c @@ -1,5 +1,5 @@ /* - Copyright 2020 Google LLC + Copyright 2020 the cc65 authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/err/bitfield-negative-width.c b/test/err/bitfield-negative-width.c index dd83b3fc4..5b14ea7e3 100644 --- a/test/err/bitfield-negative-width.c +++ b/test/err/bitfield-negative-width.c @@ -1,5 +1,5 @@ /* - Copyright 2020 Google LLC + Copyright 2020 the cc65 authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/err/bitfield-too-wide.c b/test/err/bitfield-too-wide.c index 6c9c229fc..da7f69dc2 100644 --- a/test/err/bitfield-too-wide.c +++ b/test/err/bitfield-too-wide.c @@ -1,5 +1,5 @@ /* - Copyright 2020 Google LLC + Copyright 2020 the cc65 authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/err/bug1047.c b/test/err/bug1047.c index 3fb11250f..4020189e0 100644 --- a/test/err/bug1047.c +++ b/test/err/bug1047.c @@ -1,5 +1,5 @@ /* - Copyright 2020 Google LLC + Copyright 2020 the cc65 authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/err/staticassert.c b/test/err/staticassert.c index df9bab6d8..be991e744 100644 --- a/test/err/staticassert.c +++ b/test/err/staticassert.c @@ -1,5 +1,5 @@ /* - Copyright 2020 Google LLC + Copyright 2020 the cc65 authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/val/bitfield.c b/test/val/bitfield.c index 67747ed5b..cf96d8929 100644 --- a/test/val/bitfield.c +++ b/test/val/bitfield.c @@ -1,5 +1,5 @@ /* - Copyright 2020 Google LLC + Copyright 2020 the cc65 authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/val/bug1095.c b/test/val/bug1095.c index 8c184cd1d..6872d151c 100644 --- a/test/val/bug1095.c +++ b/test/val/bug1095.c @@ -1,5 +1,5 @@ /* - Copyright 2020 Google LLC + Copyright 2020 the cc65 authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/val/plain-int-bitfield.c b/test/val/plain-int-bitfield.c index afc7121bb..75e65590c 100644 --- a/test/val/plain-int-bitfield.c +++ b/test/val/plain-int-bitfield.c @@ -1,5 +1,5 @@ /* - Copyright 2020 Google LLC + Copyright 2020 the cc65 authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/val/staticassert.c b/test/val/staticassert.c index 5d44fed6b..a31a9e646 100644 --- a/test/val/staticassert.c +++ b/test/val/staticassert.c @@ -1,5 +1,5 @@ /* - Copyright 2020 Google LLC + Copyright 2020 the cc65 authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages From 0c22d5011e9d8d92d251072c9dc59009c773ac91 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 18 Aug 2020 17:58:29 +0200 Subject: [PATCH 0400/2710] added test related to pr #1190 --- test/err/staticassert-nomsg.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 test/err/staticassert-nomsg.c diff --git a/test/err/staticassert-nomsg.c b/test/err/staticassert-nomsg.c new file mode 100644 index 000000000..e0a1ede69 --- /dev/null +++ b/test/err/staticassert-nomsg.c @@ -0,0 +1,26 @@ +/* + Copyright 2020 the cc65 authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* +** Test of failing _Static_assert. +**/ + + +_Static_assert(0 == 1); From 0690a12ad2fb998ad6e012ed6e9f391f0580b914 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 18 Aug 2020 22:41:42 +0200 Subject: [PATCH 0401/2710] change "the cc65 authors" to "The cc65 Authors" as per jmrs request --- test/err/bitfield-named-zero-width.c | 2 +- test/err/bitfield-negative-width.c | 2 +- test/err/bitfield-too-wide.c | 2 +- test/err/bug1047.c | 2 +- test/err/staticassert-nomsg.c | 2 +- test/err/staticassert.c | 2 +- test/val/bitfield.c | 2 +- test/val/bug1095.c | 2 +- test/val/plain-int-bitfield.c | 2 +- test/val/staticassert.c | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/test/err/bitfield-named-zero-width.c b/test/err/bitfield-named-zero-width.c index 323c3d49c..108b195d0 100644 --- a/test/err/bitfield-named-zero-width.c +++ b/test/err/bitfield-named-zero-width.c @@ -1,5 +1,5 @@ /* - Copyright 2020 the cc65 authors + Copyright 2020 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/err/bitfield-negative-width.c b/test/err/bitfield-negative-width.c index 5b14ea7e3..a90199f38 100644 --- a/test/err/bitfield-negative-width.c +++ b/test/err/bitfield-negative-width.c @@ -1,5 +1,5 @@ /* - Copyright 2020 the cc65 authors + Copyright 2020 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/err/bitfield-too-wide.c b/test/err/bitfield-too-wide.c index da7f69dc2..424cf9c05 100644 --- a/test/err/bitfield-too-wide.c +++ b/test/err/bitfield-too-wide.c @@ -1,5 +1,5 @@ /* - Copyright 2020 the cc65 authors + Copyright 2020 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/err/bug1047.c b/test/err/bug1047.c index 4020189e0..3f1d3cf63 100644 --- a/test/err/bug1047.c +++ b/test/err/bug1047.c @@ -1,5 +1,5 @@ /* - Copyright 2020 the cc65 authors + Copyright 2020 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/err/staticassert-nomsg.c b/test/err/staticassert-nomsg.c index e0a1ede69..8cdcb09a4 100644 --- a/test/err/staticassert-nomsg.c +++ b/test/err/staticassert-nomsg.c @@ -1,5 +1,5 @@ /* - Copyright 2020 the cc65 authors + Copyright 2020 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/err/staticassert.c b/test/err/staticassert.c index be991e744..60cb37529 100644 --- a/test/err/staticassert.c +++ b/test/err/staticassert.c @@ -1,5 +1,5 @@ /* - Copyright 2020 the cc65 authors + Copyright 2020 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/val/bitfield.c b/test/val/bitfield.c index cf96d8929..939d90dff 100644 --- a/test/val/bitfield.c +++ b/test/val/bitfield.c @@ -1,5 +1,5 @@ /* - Copyright 2020 the cc65 authors + Copyright 2020 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/val/bug1095.c b/test/val/bug1095.c index 6872d151c..cecbf0329 100644 --- a/test/val/bug1095.c +++ b/test/val/bug1095.c @@ -1,5 +1,5 @@ /* - Copyright 2020 the cc65 authors + Copyright 2020 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/val/plain-int-bitfield.c b/test/val/plain-int-bitfield.c index 75e65590c..4d158eca9 100644 --- a/test/val/plain-int-bitfield.c +++ b/test/val/plain-int-bitfield.c @@ -1,5 +1,5 @@ /* - Copyright 2020 the cc65 authors + Copyright 2020 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/test/val/staticassert.c b/test/val/staticassert.c index a31a9e646..e43eeec8d 100644 --- a/test/val/staticassert.c +++ b/test/val/staticassert.c @@ -1,5 +1,5 @@ /* - Copyright 2020 the cc65 authors + Copyright 2020 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages From 36dd82f0e61a2c288bf4dda16ef9a3a69bc6c044 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 18 Aug 2020 19:07:29 -0400 Subject: [PATCH 0402/2710] Added g_branch() to cc65's code generator. It uses BRA if the platform's CPU has BRA. Else, it generates a JMP. (Used it in the bitfield sign-extending code.) --- src/cc65/codegen.c | 34 +++++++++++++++++++++++++--------- src/cc65/codegen.h | 7 ++++++- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index a0dbc498b..6b6b292b0 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -2207,7 +2207,7 @@ void g_restore (unsigned flags) void g_cmp (unsigned flags, unsigned long val) -/* Immidiate compare. The primary register will not be changed, Z flag +/* Immediate compare. The primary register will not be changed, Z flag ** will be set. */ { @@ -2455,6 +2455,21 @@ void g_falsejump (unsigned flags attribute ((unused)), unsigned label) } + +void g_branch (unsigned Label) +/* Branch unconditionally to Label if the CPU has the BRA instruction. +** Otherwise, jump to Label. +*/ +{ + if ((CPUIsets[CPU] & CPU_ISET_65SC02) != 0) { + AddCodeLine ("bra %s", LocalLabelName (Label)); + } else { + g_jump (Label); + } +} + + + void g_lateadjustSP (unsigned label) /* Adjust stack based on non-immediate data */ { @@ -2761,12 +2776,14 @@ void g_div (unsigned flags, unsigned long val) AddCodeLine ("lsr a"); g_restore (flags); AddCodeLine ("bcs %s", LocalLabelName (DoShiftLabel)); - + /* The result is 0. We can just load 0 and skip the shifting. */ g_getimmed (flags | CF_ABSOLUTE, 0, 0); + + /* TODO: replace with BEQ? Would it be optimized? */ g_jump (EndLabel); - /* Do the shift. The sign of the result may need be corrected + /* Do the shift. The sign of the result may need to be corrected ** later. */ g_defcodelabel (DoShiftLabel); @@ -4511,18 +4528,17 @@ void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, int IsSigned, unsigned ZeroExtendLabel = GetLocalLabel (); AddCodeLine ("beq %s", LocalLabelName (ZeroExtendLabel)); - /* Pop A back and sign extend if required; operating on the full result need + /* Pop A back and sign-extend if required; operating on the full result needs ** to sign-extend into high byte, too. */ AddCodeLine ("pla"); g_or (FullWidthFlags | CF_CONST, ~Mask); - /* Apparently, there is no unconditional branch BRA, so use JMP. */ unsigned DoneLabel = GetLocalLabel (); - AddCodeLine ("jmp %s", LocalLabelName (DoneLabel)); + g_branch (DoneLabel); - /* Pop A back, then zero-extend; we need to duplicate the PLA rather than move it before - ** the branch to share with the other label because PLA sets the condition codes. + /* Pop A back, then zero-extend. We need to duplicate the PLA, rather than move it before + ** the branch to share with the other label, because PLA changes some condition codes. */ g_defcodelabel (ZeroExtendLabel); AddCodeLine ("pla"); @@ -4534,7 +4550,7 @@ void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, int IsSigned, g_defcodelabel (DoneLabel); } else { - /* Unsigned bit-field, only needs zero-extension. */ + /* Unsigned bit-field, needs only zero-extension. */ if (ZeroExtendMask != 0) { g_and (FullWidthFlags | CF_CONST, ZeroExtendMask); } diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index ec4756f2d..d946a9a10 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -380,7 +380,7 @@ void g_restore (unsigned flags); /* Copy hold register to primary. */ void g_cmp (unsigned flags, unsigned long val); -/* Immidiate compare. The primary register will not be changed, Z flag +/* Immediate compare. The primary register will not be changed, Z flag ** will be set. */ @@ -410,6 +410,11 @@ void g_truejump (unsigned flags, unsigned label); void g_falsejump (unsigned flags, unsigned label); /* Jump to label if zero flag set */ +void g_branch (unsigned Label); +/* Branch unconditionally to Label if the CPU has the BRA instruction. +** Otherwise, jump to Label. +*/ + void g_lateadjustSP (unsigned label); /* Adjust stack based on non-immediate data */ From 9fcde120aa1fca60c19f09210adf2557f8888502 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 18 Aug 2020 20:43:19 +0800 Subject: [PATCH 0403/2710] Made function signatures in asm output use the parameter lists from original definitions instead of the composites. --- src/cc65/datatype.c | 18 ++++++++++++++++-- src/cc65/datatype.h | 3 +++ src/cc65/funcdesc.c | 1 + src/cc65/funcdesc.h | 1 + src/cc65/function.c | 3 +++ 5 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index b95e37f87..ad008cfd3 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -596,8 +596,8 @@ void PrintFuncSig (FILE* F, const char* Name, Type* T) StrBuf East = AUTO_STRBUF_INITIALIZER; StrBuf West = AUTO_STRBUF_INITIALIZER; - /* Get the function descriptor */ - const FuncDesc* D = GetFuncDesc (T); + /* Get the function descriptor used in definition */ + const FuncDesc* D = GetFuncDefinitionDesc (T); /* Get the parameter list string. Start from the first parameter */ SymEntry* Param = D->SymTab->SymHead; @@ -1137,6 +1137,20 @@ Type* GetFuncReturn (Type* T) +FuncDesc* GetFuncDefinitionDesc (Type* T) +/* Get the function descriptor of the function definition */ +{ + FuncDesc* D; + + /* Be sure it's a function type */ + CHECK (IsClassFunc (T)); + + D = GetFuncDesc (T); + return D->FuncDef != 0 ? D->FuncDef : D; +} + + + long GetElementCount (const Type* T) /* Get the element count of the array specified in T (which must be of ** array type). diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 472098788..8e9ee4c33 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -836,6 +836,9 @@ void SetFuncDesc (Type* T, FuncDesc* F); Type* GetFuncReturn (Type* T) attribute ((const)); /* Return a pointer to the return type of a function or pointer-to-function type */ +FuncDesc* GetFuncDefinitionDesc (struct Type* T); +/* Get the function descriptor of the function definition */ + long GetElementCount (const Type* T); /* Get the element count of the array specified in T (which must be of ** array type). diff --git a/src/cc65/funcdesc.c b/src/cc65/funcdesc.c index 273263dec..4c959fb6c 100644 --- a/src/cc65/funcdesc.c +++ b/src/cc65/funcdesc.c @@ -60,6 +60,7 @@ FuncDesc* NewFuncDesc (void) F->ParamCount = 0; F->ParamSize = 0; F->LastParam = 0; + F->FuncDef = 0; F->WrappedCall = 0; F->WrappedCallData = 0; diff --git a/src/cc65/funcdesc.h b/src/cc65/funcdesc.h index a04ffb14a..1cfb2bd09 100644 --- a/src/cc65/funcdesc.h +++ b/src/cc65/funcdesc.h @@ -68,6 +68,7 @@ struct FuncDesc { unsigned ParamCount; /* Number of parameters */ unsigned ParamSize; /* Size of the parameters */ struct SymEntry* LastParam; /* Pointer to last parameter */ + struct FuncDesc* FuncDef; /* Descriptor used in definition */ struct SymEntry* WrappedCall; /* Pointer to the WrappedCall */ unsigned char WrappedCallData;/* The WrappedCall's user data */ }; diff --git a/src/cc65/function.c b/src/cc65/function.c index fc113b29a..290916cd2 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -382,6 +382,9 @@ void NewFunc (SymEntry* Func, FuncDesc* D) SymEntry* Param; const Type* RType; /* Real type used for struct parameters */ + /* Remember this function descriptor used for definition */ + GetFuncDesc (Func->Type)->FuncDef = D; + /* Allocate the function activation record for the function */ CurrentFunc = NewFunction (Func, D); From 85e8a6cb9fde50cfc54854fb8161fcb0af722d6c Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Wed, 19 Aug 2020 09:29:30 +0200 Subject: [PATCH 0404/2710] Clarify docs that bss is zero-initialized Addresses comment raised in #1202. --- doc/cc65.sgml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index a81358510..e7b8f260d 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1043,8 +1043,8 @@ parameter with the <tt/#pragma/. <sect1><tt>#pragma bss-name ([push,] <name>)</tt><label id="pragma-bss-name"><p> This pragma changes the name used for the BSS segment (the BSS segment - is used to store uninitialized data). The argument is a string enclosed - in double quotes. + is used to store variables with static storage duration and no explicit + initializer). The argument is a string enclosed in double quotes. Note: The default linker configuration file does only map the standard segments. If you use other segments, you have to create a new linker @@ -1052,7 +1052,8 @@ parameter with the <tt/#pragma/. Beware: The startup code will zero only the default BSS segment. If you use another BSS segment, you have to do that yourself, otherwise - uninitialized variables do not have the value zero. + variables with static storage duration and no explicit initializer will + not have the value zero. The <tt/#pragma/ understands the push and pop parameters as explained above. From 1a92368aedd6229e298c6d191f7faaaea17b5489 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 19 Aug 2020 14:50:12 +0200 Subject: [PATCH 0405/2710] rename bdiff.c to isequal.c, make it handle different line-endings as equal --- test/asm/Makefile | 4 ++-- test/bdiff.c | 28 ------------------------ test/dasm/Makefile | 4 ++-- test/isequal.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++ test/misc/Makefile | 4 ++-- test/ref/Makefile | 4 ++-- 6 files changed, 62 insertions(+), 36 deletions(-) delete mode 100644 test/bdiff.c create mode 100644 test/isequal.c diff --git a/test/asm/Makefile b/test/asm/Makefile index a0825574c..94a925376 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -24,7 +24,7 @@ CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) WORKDIR = ../../testwrk/asm -DIFF = $(WORKDIR)/bdiff$(EXE) +DIFF = $(WORKDIR)/isequal$(EXE) CC = gcc CFLAGS = -O2 @@ -44,7 +44,7 @@ all: $(OPCODE_BINS) $(CPUDETECT_BINS) $(WORKDIR): $(call MKDIR,$(WORKDIR)) -$(DIFF): ../bdiff.c | $(WORKDIR) +$(DIFF): ../isequal.c | $(WORKDIR) $(CC) $(CFLAGS) -o $@ $< define OPCODE_template diff --git a/test/bdiff.c b/test/bdiff.c deleted file mode 100644 index 797ba4302..000000000 --- a/test/bdiff.c +++ /dev/null @@ -1,28 +0,0 @@ - -// minimal tool to compare two binaries - -#include <stdlib.h> -#include <stdio.h> - -int main(int argc, char *argv[]) -{ - FILE *f1, *f2; - if (argc < 3) { - return EXIT_FAILURE; - } - f1 = fopen(argv[1], "rb"); - f2 = fopen(argv[2], "rb"); - if ((f1 == NULL) || (f2 == NULL)) { - return EXIT_FAILURE; - } - for(;;) { - if (feof(f1) && feof(f2)) { - return EXIT_SUCCESS; - } else if (feof(f1) || feof(f2)) { - return EXIT_FAILURE; - } - if (fgetc(f1) != fgetc(f2)) { - return EXIT_FAILURE; - } - } -} diff --git a/test/dasm/Makefile b/test/dasm/Makefile index d70711491..faa6b7fa0 100644 --- a/test/dasm/Makefile +++ b/test/dasm/Makefile @@ -25,7 +25,7 @@ DA65 := $(if $(wildcard ../../bin/da65*),../../bin/da65,da65) WORKDIR = ../../testwrk/dasm -DIFF = $(WORKDIR)/bdiff$(EXE) +DIFF = $(WORKDIR)/isequal$(EXE) CC = gcc CFLAGS = -O2 @@ -44,7 +44,7 @@ all: $(BINS) $(WORKDIR): $(call MKDIR,$(WORKDIR)) -$(DIFF): ../bdiff.c | $(WORKDIR) +$(DIFF): ../isequal.c | $(WORKDIR) $(CC) $(CFLAGS) -o $@ $< define DISASS_template diff --git a/test/isequal.c b/test/isequal.c new file mode 100644 index 000000000..b3806c7e4 --- /dev/null +++ b/test/isequal.c @@ -0,0 +1,54 @@ + +// minimal tool to compare two text files + +#include <stdlib.h> +#include <stdio.h> + +/* get the next character from FILE and convert commonly used line-endings all + into the same value (0x0a, as used on *nix systems) + + recognized values/pairs: + + 0x0a (LF) Linux, macOS + 0x0d, 0x0a (CR, LF) Windows, MSDOS, OS/2 + 0x0d (CR) classic MacOS +*/ + +int getnext(FILE *f) +{ + int c = fgetc(f); + if (c == 0x0d) { + if (!feof(f)) { + int n = fgetc(f); + if (n != 0x0a) { + ungetc(n, f); + } + clearerr(f); /* clears EOF when we did not push back */ + } + return 0x0a; + } + return c; +} + +int main(int argc, char *argv[]) +{ + FILE *f1, *f2; + if (argc < 3) { + return EXIT_FAILURE; + } + f1 = fopen(argv[1], "rb"); + f2 = fopen(argv[2], "rb"); + if ((f1 == NULL) || (f2 == NULL)) { + return EXIT_FAILURE; + } + for(;;) { + if (feof(f1) && feof(f2)) { + return EXIT_SUCCESS; + } else if (feof(f1) || feof(f2)) { + return EXIT_FAILURE; + } + if (getnext(f1) != getnext(f2)) { + return EXIT_FAILURE; + } + } +} diff --git a/test/misc/Makefile b/test/misc/Makefile index 1d98e2d62..55c19704e 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -37,7 +37,7 @@ WORKDIR = ..$S..$Stestwrk$Smisc OPTIONS = g O Os Osi Osir Osr Oi Oir Or -DIFF = $(WORKDIR)$Sbdiff$(EXE) +DIFF = $(WORKDIR)$Sisequal$(EXE) CC = gcc CFLAGS = -O2 @@ -58,7 +58,7 @@ all: $(TESTS) $(WORKDIR): $(call MKDIR,$(WORKDIR)) -$(DIFF): ../bdiff.c | $(WORKDIR) +$(DIFF): ../isequal.c | $(WORKDIR) $(CC) $(CFLAGS) -o $@ $< define PRG_template diff --git a/test/ref/Makefile b/test/ref/Makefile index a94f65dd8..f88821f64 100644 --- a/test/ref/Makefile +++ b/test/ref/Makefile @@ -35,7 +35,7 @@ WORKDIR = ..$S..$Stestwrk$Sref OPTIONS = g O Os Osi Osir Osr Oi Oir Or -DIFF = $(WORKDIR)$Sbdiff$(EXE) +DIFF = $(WORKDIR)$Sisequal$(EXE) CC = gcc CFLAGS = -O2 -Wall -W -Wextra -funsigned-char -fwrapv -fno-strict-overflow @@ -57,7 +57,7 @@ $(WORKDIR)/%.ref: %.c | $(WORKDIR) $(CC) $(CFLAGS) -o $(WORKDIR)/$*.host $< $(NULLERR) $(WORKDIR)$S$*.host > $@ -$(DIFF): ../bdiff.c | $(WORKDIR) +$(DIFF): ../isequal.c | $(WORKDIR) $(CC) $(CFLAGS) -o $@ $< # "yaccdbg.c" includes "yacc.c". From e6b8f4d71581883083d0bb34e67141ad0b2e53c5 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 19 Aug 2020 22:25:18 +0200 Subject: [PATCH 0406/2710] move/fix bug264.c as suggested in issue #1122 --- test/err/bug264.c | 62 +++++++++++++++++++++ test/{misc/bug264.c => val/return-struct.c} | 0 2 files changed, 62 insertions(+) create mode 100644 test/err/bug264.c rename test/{misc/bug264.c => val/return-struct.c} (100%) diff --git a/test/err/bug264.c b/test/err/bug264.c new file mode 100644 index 000000000..6898f3790 --- /dev/null +++ b/test/err/bug264.c @@ -0,0 +1,62 @@ +/* bug #264 - cc65 fails to warn about a function returning struct */ + +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> + +typedef uint32_t u32; +typedef uint16_t u16; + +/* this struct is too large, we can only handle max 4 bytes right now */ +typedef struct { + u32 quot; + u32 rem; +} udiv_t; + +udiv_t div3(u32 in) { + + udiv_t u; + u32 q = 0; + + while (in >= 300) { + in -= 300; + q += 100; + } + + while (in >= 30) { + in -= 30; + q += 10; + } + + while (in >= 3) { + in -= 3; + ++q; + } + + u.quot = q; + u.rem = in; + + return u; /* error */ +} + +int res = 0; + +int main(void) { + + u32 i; + div_t d; + udiv_t u; + + for (i = 1024; i; i--) { + d = div((u16)i, 3); + u = div3(i); + + if (d.quot != u.quot || d.rem != u.rem) { + printf("Mismatch at %u/3, div %u %u, div3 %u %u\n", i, + d.quot, d.rem, u.quot, u.rem); + res++; + } + } + + return res; +} diff --git a/test/misc/bug264.c b/test/val/return-struct.c similarity index 100% rename from test/misc/bug264.c rename to test/val/return-struct.c From 794adcc512e8f80eda9de0e852a0443a9c08fc5d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 19 Aug 2020 22:33:10 +0200 Subject: [PATCH 0407/2710] remove unneeded rule --- test/misc/Makefile | 6 ------ 1 file changed, 6 deletions(-) diff --git a/test/misc/Makefile b/test/misc/Makefile index 55c19704e..b21384b68 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -81,12 +81,6 @@ $(WORKDIR)/pptest2.$1.$2.prg: pptest2.c | $(WORKDIR) $(if $(QUIET),echo misc/pptest2.$1.$2.prg) $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) -# this should fail to compile, because cc65 does not support returning structs -$(WORKDIR)/bug264.$1.$2.prg: bug264.c | $(WORKDIR) - @echo "FIXME: " $$@ "compiles but should give an error." - $(if $(QUIET),echo misc/bug264.$1.$2.prg) - $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - # this should fail to compile, because there are errors in the code # instead, the compiler crashes $(WORKDIR)/bug1113.$1.$2.prg: bug1113.c | $(WORKDIR) From 17bbba7327f3dddbe555c44df964c6ce0f587f53 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 20 Aug 2020 07:52:03 +0800 Subject: [PATCH 0408/2710] Added integer boolean type string. No longer set the "expression tested" flag with constant results in comparison. --- src/cc65/datatype.c | 1 + src/cc65/datatype.h | 1 + src/cc65/expr.c | 10 +++++----- src/cc65/exprdesc.c | 14 ++++++++++++++ src/cc65/exprdesc.h | 3 +++ 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index ad008cfd3..f4f978a3c 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -66,6 +66,7 @@ Type type_int[] = { TYPE(T_INT), TYPE(T_END) }; Type type_uint[] = { TYPE(T_UINT), TYPE(T_END) }; Type type_long[] = { TYPE(T_LONG), TYPE(T_END) }; Type type_ulong[] = { TYPE(T_ULONG), TYPE(T_END) }; +Type type_bool[] = { TYPE(T_INT), TYPE(T_END) }; Type type_void[] = { TYPE(T_VOID), TYPE(T_END) }; Type type_size_t[] = { TYPE(T_SIZE_T), TYPE(T_END) }; Type type_float[] = { TYPE(T_FLOAT), TYPE(T_END) }; diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 8e9ee4c33..5c3e71da5 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -196,6 +196,7 @@ extern Type type_int[]; extern Type type_uint[]; extern Type type_long[]; extern Type type_ulong[]; +extern Type type_bool[]; extern Type type_void[]; extern Type type_size_t[]; extern Type type_float[]; diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 12a0c0b57..3d4a5eb1b 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2595,13 +2595,13 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ /* The result is an rvalue in the primary */ ED_FinalizeRValLoad (Expr); + + /* Condition codes are set */ + ED_TestDone (Expr); } - /* Result type is always int */ - Expr->Type = type_int; - -Done: /* Condition codes are set */ - ED_TestDone (Expr); + /* Result type is always boolean */ +Done: Expr->Type = type_bool; } } diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index 5ff848fb7..d0ee2789a 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -229,6 +229,20 @@ ExprDesc* ED_MakeConstAbsInt (ExprDesc* Expr, long Value) +ExprDesc* ED_MakeConstBool (ExprDesc* Expr, long Value) +/* Replace Expr with a constant boolean expression with the given value */ +{ + Expr->Sym = 0; + Expr->Type = type_bool; + Expr->Flags = E_LOC_NONE | E_RTYPE_RVAL | (Expr->Flags & E_HAVE_MARKS); + Expr->Name = 0; + Expr->IVal = Value; + Expr->FVal = FP_D_Make (0.0); + return Expr; +} + + + ExprDesc* ED_FinalizeRValLoad (ExprDesc* Expr) /* Finalize the result of LoadExpr to be an rvalue in the primary register */ { diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index 1541c2e4e..0a0f970a6 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -411,6 +411,9 @@ ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, Type* Type); ExprDesc* ED_MakeConstAbsInt (ExprDesc* Expr, long Value); /* Replace Expr with an constant integer with the given value */ +ExprDesc* ED_MakeConstBool (ExprDesc* Expr, long Value); +/* Replace Expr with a constant boolean expression with the given value */ + ExprDesc* ED_FinalizeRValLoad (ExprDesc* Expr); /* Finalize the result of LoadExpr to be an rvalue in the primary register */ From b15ab348ba51100933d1b0b726f88e61f3f44caa Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 26 Aug 2020 08:23:05 +0800 Subject: [PATCH 0409/2710] Moved bug250.c from test/misc as it is to be fixed. --- test/misc/Makefile | 6 ------ test/misc/bug250.c | 13 ------------- 2 files changed, 19 deletions(-) delete mode 100644 test/misc/bug250.c diff --git a/test/misc/Makefile b/test/misc/Makefile index b21384b68..e48d86e30 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -63,12 +63,6 @@ $(DIFF): ../isequal.c | $(WORKDIR) define PRG_template -# should compile, but gives an error -$(WORKDIR)/bug250.$1.$2.prg: bug250.c | $(WORKDIR) - @echo "FIXME: " $$@ "currently does not compile." - $(if $(QUIET),echo misc/bug250.$1.$2.prg) - $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - # should compile, but gives an error $(WORKDIR)/bug760.$1.$2.prg: bug760.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." diff --git a/test/misc/bug250.c b/test/misc/bug250.c deleted file mode 100644 index 60f3c633d..000000000 --- a/test/misc/bug250.c +++ /dev/null @@ -1,13 +0,0 @@ -/* bug #250 - Array size compile-time optimization stops halfway */ - -#include <stdlib.h> - -#define LZO_MAX(a,b) ((a) >= (b) ? (a) : (b)) -unsigned char c[2*4]; -unsigned char b[2*LZO_MAX(8,sizeof(int))]; // this will not compile - -int main(void) -{ - /* FIXME: add some runtime check */ - return EXIT_SUCCESS; -} From 3ea3887c77d8a6bc0bc784b0fa5bc2917b988be4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 20 Aug 2020 07:52:06 +0800 Subject: [PATCH 0410/2710] Fixed warnings on const comparison. Warnings on expressions with no effects. Fixed const ternary. Fixed ternary with struct/union types as the true/false-branch expressions. --- src/cc65/asmstmt.c | 8 ++ src/cc65/assignment.c | 1 + src/cc65/declare.c | 11 +- src/cc65/expr.c | 263 ++++++++++++++++++++++++++++------------ src/cc65/exprdesc.c | 27 ++++- src/cc65/exprdesc.h | 131 +++++++++++++++++--- src/cc65/goto.c | 2 + src/cc65/loadexpr.c | 6 +- src/cc65/locals.c | 15 ++- src/cc65/preproc.c | 1 + src/cc65/shiftexpr.c | 5 +- src/cc65/staticassert.c | 2 + src/cc65/stdfunc.c | 5 + src/cc65/stmt.c | 36 +++--- src/cc65/swstmt.c | 5 +- src/cc65/testexpr.c | 8 +- src/cc65/typeconv.c | 5 + 17 files changed, 399 insertions(+), 132 deletions(-) diff --git a/src/cc65/asmstmt.c b/src/cc65/asmstmt.c index ae4308522..20de6033e 100644 --- a/src/cc65/asmstmt.c +++ b/src/cc65/asmstmt.c @@ -132,6 +132,8 @@ static void ParseByteArg (StrBuf* T, unsigned Arg) ExprDesc Expr; char Buf [16]; + ED_Init (&Expr); + /* We expect an argument separated by a comma */ ConsumeComma (); @@ -166,6 +168,8 @@ static void ParseWordArg (StrBuf* T, unsigned Arg) ExprDesc Expr; char Buf [16]; + ED_Init (&Expr); + /* We expect an argument separated by a comma */ ConsumeComma (); @@ -200,6 +204,8 @@ static void ParseLongArg (StrBuf* T, unsigned Arg attribute ((unused))) ExprDesc Expr; char Buf [16]; + ED_Init (&Expr); + /* We expect an argument separated by a comma */ ConsumeComma (); @@ -309,6 +315,8 @@ static void ParseStrArg (StrBuf* T, unsigned Arg attribute ((unused))) ExprDesc Expr; char Buf [64]; + ED_Init (&Expr); + /* We expect an argument separated by a comma */ ConsumeComma (); diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 6acab3fe8..71df0c4f2 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -139,6 +139,7 @@ void Assignment (ExprDesc* Expr) ExprDesc Expr2; Type* ltype = Expr->Type; + ED_Init (&Expr2); /* We must have an lvalue for an assignment */ if (ED_IsRVal (Expr)) { diff --git a/src/cc65/declare.c b/src/cc65/declare.c index ccd4e9004..7e5f24b24 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -591,6 +591,7 @@ static SymEntry* ParseEnumDecl (const char* Name) if (CurTok.Tok == TOK_ASSIGN) { ExprDesc Expr; + ED_Init (&Expr); NextToken (); ConstAbsIntExpr (hie1, &Expr); EnumVal = Expr.IVal; @@ -720,6 +721,7 @@ static int ParseFieldWidth (Declaration* Decl) */ { ExprDesc Expr; + ED_Init (&Expr); if (CurTok.Tok != TOK_COLON) { /* No bit-field declaration */ @@ -1818,6 +1820,7 @@ static void Declarator (const DeclSpec* Spec, Declaration* D, declmode_t Mode) /* Read the size if it is given */ if (CurTok.Tok != TOK_RBRACK) { ExprDesc Expr; + ED_Init (&Expr); ConstAbsIntExpr (hie1, &Expr); if (Expr.IVal <= 0) { if (D->Ident[0] != '\0') { @@ -2184,6 +2187,7 @@ static unsigned ParseScalarInit (Type* T) /* Parse initializaton for scalar data types. Return the number of data bytes. */ { ExprDesc ED; + ED_Init (&ED); /* Parse initialization */ ParseScalarInitInternal (T, &ED); @@ -2205,6 +2209,8 @@ static unsigned ParsePointerInit (Type* T) /* Expression */ ExprDesc ED; + ED_Init (&ED); + ConstExpr (hie1, &ED); TypeConversion (&ED, T); @@ -2420,6 +2426,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) ** handling. */ ExprDesc ED; + ED_Init (&ED); unsigned Val; unsigned Shift; @@ -2541,7 +2548,6 @@ static unsigned ParseVoidInit (Type* T) ** Return the number of bytes initialized. */ { - ExprDesc Expr; unsigned Size; /* Opening brace */ @@ -2550,6 +2556,9 @@ static unsigned ParseVoidInit (Type* T) /* Allow an arbitrary list of values */ Size = 0; do { + ExprDesc Expr; + ED_Init (&Expr); + ConstExpr (hie1, &Expr); switch (GetUnderlyingTypeCode (&Expr.Type[0])) { diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 3d4a5eb1b..62136e122 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -311,13 +311,15 @@ void PushAddr (const ExprDesc* Expr) -static void WarnConstCompareResult (void) +static void WarnConstCompareResult (const ExprDesc* Expr) /* If the result of a comparison is constant, this is suspicious when not in ** preprocessor mode. */ { - if (!Preprocessing && IS_Get (&WarnConstComparison) != 0) { - Warning ("Result of comparison is constant"); + if (!Preprocessing && + !ED_NeedsConst (Expr) && + IS_Get (&WarnConstComparison) != 0) { + Warning ("Result of comparison is always %s", Expr->IVal != 0 ? "true" : "false"); } } @@ -387,6 +389,7 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) unsigned Flags; ExprDesc Expr; + ED_Init (&Expr); /* Count arguments */ ++PushedCount; @@ -727,23 +730,20 @@ static void Primary (ExprDesc* E) { SymEntry* Sym; - /* Initialize fields in the expression stucture */ - ED_Init (E); - /* Character and integer constants. */ if (CurTok.Tok == TOK_ICONST || CurTok.Tok == TOK_CCONST) { - E->IVal = CurTok.IVal; - E->Flags = E_LOC_NONE | E_RTYPE_RVAL; - E->Type = CurTok.Type; + E->IVal = CurTok.IVal; + E->Flags |= E_LOC_NONE | E_RTYPE_RVAL; + E->Type = CurTok.Type; NextToken (); return; } /* Floating point constant */ if (CurTok.Tok == TOK_FCONST) { - E->FVal = CurTok.FVal; - E->Flags = E_LOC_NONE | E_RTYPE_RVAL; - E->Type = CurTok.Type; + E->FVal = CurTok.FVal; + E->Flags |= E_LOC_NONE | E_RTYPE_RVAL; + E->Type = CurTok.Type; NextToken (); return; } @@ -777,6 +777,8 @@ static void Primary (ExprDesc* E) return; } + unsigned Flags = E->Flags & E_MASK_KEEP_MAKE; + switch (CurTok.Tok) { case TOK_BOOL_AND: @@ -812,8 +814,8 @@ static void Primary (ExprDesc* E) /* Cannot use type symbols */ Error ("Variable identifier expected"); /* Assume an int type to make E valid */ - E->Flags = E_LOC_STACK | E_RTYPE_LVAL; - E->Type = type_int; + E->Flags |= E_LOC_STACK | E_RTYPE_LVAL; + E->Type = type_int; return; } @@ -924,7 +926,7 @@ static void Primary (ExprDesc* E) case TOK_ASM: /* ASM statement */ AsmStatement (); - E->Flags = E_RTYPE_RVAL; + E->Flags = E_RTYPE_RVAL | E_EVAL_MAYBE_UNUSED; E->Type = type_void; break; @@ -985,6 +987,8 @@ static void Primary (ExprDesc* E) ED_MakeConstAbsInt (E, 1); break; } + + E->Flags |= Flags; } @@ -1000,6 +1004,8 @@ static void ArrayRef (ExprDesc* Expr) Type* ElementType; Type* tptr1; + ED_Init (&Subscript); + Subscript.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; /* Skip the bracket */ NextToken (); @@ -2029,7 +2035,6 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ int* UsedGen) /* Helper function */ { - ExprDesc Expr2; CodeMark Mark1; CodeMark Mark2; const GenDesc* Gen; @@ -2044,6 +2049,10 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ *UsedGen = 0; while ((Gen = FindGen (CurTok.Tok, Ops)) != 0) { + ExprDesc Expr2; + ED_Init (&Expr2); + Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; + /* Tell the caller that we handled it's ops */ *UsedGen = 1; @@ -2248,7 +2257,6 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ void (*hienext) (ExprDesc*)) /* Helper function for the compare operators */ { - ExprDesc Expr2; CodeMark Mark0; CodeMark Mark1; CodeMark Mark2; @@ -2263,6 +2271,10 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ while ((Gen = FindGen (CurTok.Tok, Ops)) != 0) { + ExprDesc Expr2; + ED_Init (&Expr2); + Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; + /* Remember the generator function */ void (*GenFunc) (unsigned, unsigned long) = Gen->Func; @@ -2362,11 +2374,6 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ /* Check for const operands */ if (ED_IsConstAbs (Expr) && rconst) { - /* If the result is constant, this is suspicious when not in - ** preprocessor mode. - */ - WarnConstCompareResult (); - /* Both operands are constant, remove the generated code */ RemoveCode (&Mark1); @@ -2403,6 +2410,11 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ } } + /* If the result is constant, this is suspicious when not in + ** preprocessor mode. + */ + WarnConstCompareResult (Expr); + } else { /* Determine the signedness of the operands */ @@ -2461,7 +2473,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ case TOK_EQ: if (Expr2.IVal < LeftMin || Expr2.IVal > LeftMax) { ED_MakeConstAbsInt (Expr, 0); - WarnConstCompareResult (); + WarnConstCompareResult (Expr); goto Done; } break; @@ -2469,7 +2481,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ case TOK_NE: if (Expr2.IVal < LeftMin || Expr2.IVal > LeftMax) { ED_MakeConstAbsInt (Expr, 1); - WarnConstCompareResult (); + WarnConstCompareResult (Expr); goto Done; } break; @@ -2477,7 +2489,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ case TOK_LT: if (Expr2.IVal <= LeftMin || Expr2.IVal > LeftMax) { ED_MakeConstAbsInt (Expr, Expr2.IVal > LeftMax); - WarnConstCompareResult (); + WarnConstCompareResult (Expr); goto Done; } break; @@ -2485,7 +2497,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ case TOK_LE: if (Expr2.IVal < LeftMin || Expr2.IVal >= LeftMax) { ED_MakeConstAbsInt (Expr, Expr2.IVal >= LeftMax); - WarnConstCompareResult (); + WarnConstCompareResult (Expr); goto Done; } break; @@ -2493,7 +2505,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ case TOK_GE: if (Expr2.IVal <= LeftMin || Expr2.IVal > LeftMax) { ED_MakeConstAbsInt (Expr, Expr2.IVal <= LeftMin); - WarnConstCompareResult (); + WarnConstCompareResult (Expr); goto Done; } break; @@ -2501,7 +2513,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ case TOK_GT: if (Expr2.IVal < LeftMin || Expr2.IVal >= LeftMax) { ED_MakeConstAbsInt (Expr, Expr2.IVal < LeftMin); - WarnConstCompareResult (); + WarnConstCompareResult (Expr); goto Done; } break; @@ -2635,6 +2647,9 @@ static void parseadd (ExprDesc* Expr) Type* lhst; /* Type of left hand side */ Type* rhst; /* Type of right hand side */ + ED_Init (&Expr2); + Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; + /* Skip the PLUS token */ NextToken (); @@ -2869,6 +2884,8 @@ static void parsesub (ExprDesc* Expr) CodeMark Mark2; /* Another position in the queue */ int rscale; /* Scale factor for the result */ + ED_Init (&Expr2); + Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; /* lhs cannot be function or pointer to function */ if (IsTypeFunc (Expr->Type) || IsTypeFuncPtr (Expr->Type)) { @@ -3130,11 +3147,12 @@ static void hieAndPP (ExprDesc* Expr) ** called recursively from the preprocessor. */ { - ExprDesc Expr2; - ConstAbsIntExpr (hie2, Expr); while (CurTok.Tok == TOK_BOOL_AND) { + ExprDesc Expr2; + ED_Init (&Expr2); + /* Skip the && */ NextToken (); @@ -3153,11 +3171,12 @@ static void hieOrPP (ExprDesc *Expr) ** called recursively from the preprocessor. */ { - ExprDesc Expr2; - ConstAbsIntExpr (hieAndPP, Expr); while (CurTok.Tok == TOK_BOOL_OR) { + ExprDesc Expr2; + ED_Init (&Expr2); + /* Skip the && */ NextToken (); @@ -3175,8 +3194,6 @@ static void hieAnd (ExprDesc* Expr, unsigned TrueLab, int* BoolOp) /* Process "exp && exp" */ { int FalseLab; - ExprDesc Expr2; - ExprWithCheck (hie2, Expr); if (CurTok.Tok == TOK_BOOL_AND) { @@ -3186,10 +3203,8 @@ static void hieAnd (ExprDesc* Expr, unsigned TrueLab, int* BoolOp) /* Get a label that we will use for false expressions */ FalseLab = GetLocalLabel (); - /* If the expr hasn't set condition codes, set the force-test flag */ - if (!ED_IsTested (Expr)) { - ED_MarkForTest (Expr); - } + /* Set the test flag */ + ED_RequireTest (Expr); /* Load the value */ LoadExpr (CF_FORCECHAR, Expr); @@ -3200,14 +3215,15 @@ static void hieAnd (ExprDesc* Expr, unsigned TrueLab, int* BoolOp) /* Parse more boolean and's */ while (CurTok.Tok == TOK_BOOL_AND) { + ExprDesc Expr2; + ED_Init (&Expr2); + /* Skip the && */ NextToken (); /* Get rhs */ hie2 (&Expr2); - if (!ED_IsTested (&Expr2)) { - ED_MarkForTest (&Expr2); - } + ED_RequireTest (&Expr2); LoadExpr (CF_FORCECHAR, &Expr2); /* Do short circuit evaluation */ @@ -3233,7 +3249,6 @@ static void hieAnd (ExprDesc* Expr, unsigned TrueLab, int* BoolOp) static void hieOr (ExprDesc *Expr) /* Process "exp || exp". */ { - ExprDesc Expr2; int BoolOp = 0; /* Did we have a boolean op? */ int AndOp; /* Did we have a && operation? */ unsigned TrueLab; /* Jump to this label if true */ @@ -3248,10 +3263,8 @@ static void hieOr (ExprDesc *Expr) /* Any boolean or's? */ if (CurTok.Tok == TOK_BOOL_OR) { - /* If the expr hasn't set condition codes, set the force-test flag */ - if (!ED_IsTested (Expr)) { - ED_MarkForTest (Expr); - } + /* Set the test flag */ + ED_RequireTest (Expr); /* Get first expr */ LoadExpr (CF_FORCECHAR, Expr); @@ -3269,15 +3282,16 @@ static void hieOr (ExprDesc *Expr) /* while there's more expr */ while (CurTok.Tok == TOK_BOOL_OR) { + ExprDesc Expr2; + ED_Init (&Expr2); + /* skip the || */ NextToken (); /* Get a subexpr */ AndOp = 0; hieAnd (&Expr2, TrueLab, &AndOp); - if (!ED_IsTested (&Expr2)) { - ED_MarkForTest (&Expr2); - } + ED_RequireTest (&Expr2); LoadExpr (CF_FORCECHAR, &Expr2); /* If there is more to come, add shortcut boolean eval. */ @@ -3308,6 +3322,7 @@ static void hieQuest (ExprDesc* Expr) { int FalseLab; int TrueLab; + CodeMark SkippedBranch; CodeMark TrueCodeEnd; ExprDesc Expr2; /* Expression 2 */ ExprDesc Expr3; /* Expression 3 */ @@ -3315,6 +3330,10 @@ static void hieQuest (ExprDesc* Expr) int Expr3IsNULL; /* Expression 3 is a NULL pointer */ Type* ResultType; /* Type of result */ + ED_Init (&Expr2); + Expr2.Flags = Expr->Flags & E_MASK_KEEP_RESULT; + ED_Init (&Expr3); + Expr3.Flags = Expr->Flags & E_MASK_KEEP_RESULT; /* Call the lower level eval routine */ if (Preprocessing) { @@ -3325,14 +3344,20 @@ static void hieQuest (ExprDesc* Expr) /* Check if it's a ternary expression */ if (CurTok.Tok == TOK_QUEST) { + + int ConstantCond = ED_IsConstAbsInt (Expr); NextToken (); - if (!ED_IsTested (Expr)) { + + if (!ConstantCond) { /* Condition codes not set, request a test */ - ED_MarkForTest (Expr); + ED_RequireTest (Expr); + LoadExpr (CF_NONE, Expr); + FalseLab = GetLocalLabel (); + g_falsejump (CF_NONE, FalseLab); + } else if (Expr->IVal == 0) { + /* Remember the current code position */ + GetCodePos (&SkippedBranch); } - LoadExpr (CF_NONE, Expr); - FalseLab = GetLocalLabel (); - g_falsejump (CF_NONE, FalseLab); /* Parse second expression. Remember for later if it is a NULL pointer ** expression, then load it into the primary. @@ -3340,22 +3365,37 @@ static void hieQuest (ExprDesc* Expr) ExprWithCheck (hie1, &Expr2); Expr2IsNULL = ED_IsNullPtr (&Expr2); if (!IsTypeVoid (Expr2.Type)) { - /* Load it into the primary */ - LoadExpr (CF_NONE, &Expr2); - ED_FinalizeRValLoad (&Expr2); + if (!ConstantCond || !ED_IsConst (&Expr2)) { + /* Load it into the primary */ + LoadExpr (CF_NONE, &Expr2); + ED_FinalizeRValLoad (&Expr2); + } Expr2.Type = PtrConversion (Expr2.Type); } - /* Remember the current code position */ - GetCodePos (&TrueCodeEnd); + if (!ConstantCond) { + /* Remember the current code position */ + GetCodePos (&TrueCodeEnd); - /* Jump around the evaluation of the third expression */ - TrueLab = GetLocalLabel (); - ConsumeColon (); - g_jump (TrueLab); + /* Jump around the evaluation of the third expression */ + TrueLab = GetLocalLabel (); - /* Jump here if the first expression was false */ - g_defcodelabel (FalseLab); + ConsumeColon (); + + g_jump (TrueLab); + + /* Jump here if the first expression was false */ + g_defcodelabel (FalseLab); + } else { + if (Expr->IVal == 0) { + /* Remove the load code of Expr2 */ + RemoveCode (&SkippedBranch); + } else { + /* Remember the current code position */ + GetCodePos (&SkippedBranch); + } + ConsumeColon(); + } /* Parse third expression. Remember for later if it is a NULL pointer ** expression, then load it into the primary. @@ -3363,12 +3403,19 @@ static void hieQuest (ExprDesc* Expr) ExprWithCheck (hie1, &Expr3); Expr3IsNULL = ED_IsNullPtr (&Expr3); if (!IsTypeVoid (Expr3.Type)) { - /* Load it into the primary */ - LoadExpr (CF_NONE, &Expr3); - ED_FinalizeRValLoad (&Expr3); + if (!ConstantCond || !ED_IsConst (&Expr3)) { + /* Load it into the primary */ + LoadExpr (CF_NONE, &Expr3); + ED_FinalizeRValLoad (&Expr3); + } Expr3.Type = PtrConversion (Expr3.Type); } + if (ConstantCond && Expr->IVal != 0) { + /* Remove the load code of Expr3 */ + RemoveCode (&SkippedBranch); + } + /* Check if any conversions are needed, if so, do them. ** Conversion rules for ?: expression are: ** - if both expressions are int expressions, default promotion @@ -3401,9 +3448,11 @@ static void hieQuest (ExprDesc* Expr) TypeConversion (&Expr2, ResultType); GetCodePos (&CvtCodeEnd); - /* If we had conversion code, move it to the right place */ - if (!CodeRangeIsEmpty (&CvtCodeStart, &CvtCodeEnd)) { - MoveCode (&CvtCodeStart, &CvtCodeEnd, &TrueCodeEnd); + if (!ConstantCond) { + /* If we had conversion code, move it to the right place */ + if (!CodeRangeIsEmpty (&CvtCodeStart, &CvtCodeEnd)) { + MoveCode (&CvtCodeStart, &CvtCodeEnd, &TrueCodeEnd); + } } } else if (IsClassPtr (Expr2.Type) && IsClassPtr (Expr3.Type)) { @@ -3423,16 +3472,30 @@ static void hieQuest (ExprDesc* Expr) /* Result type is void */ ResultType = Expr3.Type; } else { - TypeCompatibilityDiagnostic (Expr2.Type, Expr3.Type, 1, - "Incompatible types in ternary '%s' with '%s'"); - ResultType = Expr2.Type; /* Doesn't matter here */ + if (IsClassStruct (Expr2.Type) && IsClassStruct (Expr3.Type) && + TypeCmp (Expr2.Type, Expr3.Type) == TC_IDENTICAL) { + /* Result type is struct/union */ + ResultType = Expr2.Type; + } else { + TypeCompatibilityDiagnostic (Expr2.Type, Expr3.Type, 1, + "Incompatible types in ternary '%s' with '%s'"); + ResultType = Expr2.Type; /* Doesn't matter here */ + } } - /* Define the final label */ - g_defcodelabel (TrueLab); + if (!ConstantCond) { + /* Define the final label */ + g_defcodelabel (TrueLab); + ED_FinalizeRValLoad (Expr); + } else { + if (Expr->IVal != 0) { + *Expr = Expr2; + } else { + *Expr = Expr3; + } + } /* Setup the target expression */ - ED_FinalizeRValLoad (Expr); Expr->Type = ResultType; } } @@ -3442,7 +3505,6 @@ static void hieQuest (ExprDesc* Expr) static void opeq (const GenDesc* Gen, ExprDesc* Expr, const char* Op) /* Process "op=" operators. */ { - ExprDesc Expr2; unsigned flags; CodeMark Mark; int MustScale; @@ -3483,6 +3545,10 @@ static void opeq (const GenDesc* Gen, ExprDesc* Expr, const char* Op) GetCodePos (&Mark); g_push (flags, 0); + ExprDesc Expr2; + ED_Init (&Expr2); + Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; + /* Evaluate the rhs */ MarkedExprWithCheck (hie1, &Expr2); @@ -3563,6 +3629,8 @@ static void addsubeq (const GenDesc* Gen, ExprDesc *Expr, const char* Op) unsigned rflags; int MustScale; + ED_Init (&Expr2); + Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; /* We're currently only able to handle some addressing modes */ if (ED_GetLoc (Expr) == E_LOC_EXPR || ED_GetLoc (Expr) == E_LOC_PRIMARY) { @@ -3756,8 +3824,33 @@ void hie1 (ExprDesc* Expr) void hie0 (ExprDesc *Expr) /* Parse comma operator. */ { + unsigned Flags = Expr->Flags & E_MASK_KEEP_MAKE; + unsigned PrevErrorCount = ErrorCount; + CodeMark Start, End; + + /* Remember the current code position */ + GetCodePos (&Start); + hie1 (Expr); while (CurTok.Tok == TOK_COMMA) { + /* If the expression didn't generate code or isn't cast to type void, + ** emit a warning. + */ + GetCodePos (&End); + if (!ED_MayHaveNoEffect (Expr) && + CodeRangeIsEmpty (&Start, &End) && + IS_Get (&WarnNoEffect) && + PrevErrorCount == ErrorCount) { + Warning ("Expression result unused"); + } + + PrevErrorCount = ErrorCount; + /* Remember the current code position */ + GetCodePos (&Start); + + /* Reset the expression */ + ED_Init (Expr); + Expr->Flags = Flags; NextToken (); hie1 (Expr); } @@ -3791,8 +3884,18 @@ int evalexpr (unsigned Flags, void (*Func) (ExprDesc*), ExprDesc* Expr) void Expression0 (ExprDesc* Expr) /* Evaluate an expression via hie0 and put the result into the primary register */ { + unsigned Flags = Expr->Flags & E_MASK_KEEP_RESULT; + + /* Only check further after the expression is evaluated */ ExprWithCheck (hie0, Expr); - LoadExpr (CF_NONE, Expr); + + if ((Expr->Flags & Flags & E_MASK_EVAL) != (Flags & E_MASK_EVAL)) { + Internal ("Expression flags tampered: %08X", Flags); + } + + if (ED_YetToLoad (Expr)) { + LoadExpr (CF_NONE, Expr); + } } @@ -3804,6 +3907,7 @@ void ConstExpr (void (*Func) (ExprDesc*), ExprDesc* Expr) ** result from this input error. */ { + Expr->Flags |= E_EVAL_CONST; ExprWithCheck (Func, Expr); if (!ED_IsConst (Expr)) { Error ("Constant expression expected"); @@ -3838,6 +3942,7 @@ void ConstAbsIntExpr (void (*Func) (ExprDesc*), ExprDesc* Expr) ** errors that result from this input error. */ { + Expr->Flags |= E_EVAL_CONST; ExprWithCheck (Func, Expr); if (!ED_IsConstAbsInt (Expr)) { Error ("Constant integer expression expected"); diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index d0ee2789a..c3f4c63f7 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -58,7 +58,7 @@ ExprDesc* ED_Init (ExprDesc* Expr) { Expr->Sym = 0; Expr->Type = 0; - Expr->Flags = 0; + Expr->Flags = E_NEED_EAX; Expr->Name = 0; Expr->IVal = 0; Expr->FVal = FP_D_Make (0.0); @@ -113,6 +113,24 @@ int ED_IsIndExpr (const ExprDesc* Expr) +int ED_YetToLoad (const ExprDesc* Expr) +/* Check if the expression needs to be loaded somehow. */ +{ + return ED_NeedsPrimary (Expr) || + ED_YetToTest (Expr) || + (ED_IsLVal (Expr) && IsQualVolatile (Expr->Type)); +} + + + +void ED_MarkForUneval (ExprDesc* Expr) +/* Mark the expression as not to be evaluated */ +{ + Expr->Flags = (Expr->Flags & ~E_MASK_EVAL) | E_EVAL_UNEVAL; +} + + + void ED_SetCodeRange (ExprDesc* Expr, const CodeMark* Start, const CodeMark* End) /* Set the code range for this expression */ { @@ -206,7 +224,7 @@ ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, Type* Type) { Expr->Sym = 0; Expr->Type = Type; - Expr->Flags = E_LOC_NONE | E_RTYPE_RVAL | (Expr->Flags & E_HAVE_MARKS); + Expr->Flags = E_LOC_NONE | E_RTYPE_RVAL | (Expr->Flags & E_MASK_KEEP_MAKE); Expr->Name = 0; Expr->IVal = Value; Expr->FVal = FP_D_Make (0.0); @@ -220,7 +238,7 @@ ExprDesc* ED_MakeConstAbsInt (ExprDesc* Expr, long Value) { Expr->Sym = 0; Expr->Type = type_int; - Expr->Flags = E_LOC_NONE | E_RTYPE_RVAL | (Expr->Flags & E_HAVE_MARKS); + Expr->Flags = E_LOC_NONE | E_RTYPE_RVAL | (Expr->Flags & E_MASK_KEEP_MAKE); Expr->Name = 0; Expr->IVal = Value; Expr->FVal = FP_D_Make (0.0); @@ -412,7 +430,8 @@ int ED_IsBool (const ExprDesc* Expr) /* Either ints, floats, or pointers can be used in a boolean context */ return IsClassInt (Expr->Type) || IsClassFloat (Expr->Type) || - IsClassPtr (Expr->Type); + IsClassPtr (Expr->Type) || + IsClassFunc (Expr->Type); } diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index 0a0f970a6..68db8b2fe 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -94,7 +94,7 @@ enum { ** E_LOC_<else> -- dereference -> E_LOC_EXPR (pointed-to-value, must load) ** + E_ADDRESS_OF -- dereference -> (lvalue reference) */ - E_MASK_LOC = 0x00FF, + E_MASK_LOC = 0x01FF, E_LOC_NONE = 0x0000, /* Pure rvalue with no storage */ E_LOC_ABS = 0x0001, /* Absolute numeric addressed variable */ E_LOC_GLOBAL = 0x0002, /* Global variable */ @@ -104,29 +104,58 @@ enum { E_LOC_PRIMARY = 0x0020, /* Temporary in primary register */ E_LOC_EXPR = 0x0040, /* A location that the primary register points to */ E_LOC_LITERAL = 0x0080, /* Literal in the literal pool */ + E_LOC_CODE = 0x0100, /* C code label location (&&Label) */ - /* Constant location of some sort (only if rval) */ + /* Immutable location addresses (immutable bases and offsets) */ E_LOC_CONST = E_LOC_NONE | E_LOC_ABS | E_LOC_GLOBAL | E_LOC_STATIC | - E_LOC_REGISTER | E_LOC_LITERAL, + E_LOC_REGISTER | E_LOC_LITERAL | E_LOC_CODE, + + /* Not-so-immutable location addresses (stack offsets can change) */ + E_LOC_QUASICONST = E_LOC_CONST | E_LOC_STACK, + + /* Expression type modifiers */ + E_BITFIELD = 0x0200, /* Expression is a bit-field */ + E_ADDRESS_OF = 0x0400, /* Expression is the address of the lvalue */ /* lvalue/rvalue in C language's sense */ - E_MASK_RTYPE = 0x0100, + E_MASK_RTYPE = 0x0800, E_RTYPE_RVAL = 0x0000, - E_RTYPE_LVAL = 0x0100, + E_RTYPE_LVAL = 0x0800, - /* Bit-field? */ - E_BITFIELD = 0x0200, + /* Expression status */ + E_LOADED = 0x1000, /* Expression is loaded in primary */ + E_CC_SET = 0x2000, /* Condition codes are set */ + E_HAVE_MARKS = 0x4000, /* Code marks are valid */ - /* Test */ - E_NEED_TEST = 0x0400, /* Expression needs a test to set cc */ - E_CC_SET = 0x0800, /* Condition codes are set */ + /* Optimization hints */ + E_MASK_NEED = 0x030000, + E_NEED_EAX = 0x000000, /* Expression needs to be loaded in Primary */ + E_NEED_NONE = 0x010000, /* Expression value is unused */ + E_NEED_TEST = 0x020000, /* Expression needs a test to set cc */ - E_HAVE_MARKS = 0x1000, /* Code marks are valid */ + /* Expression evaluation requirements. + ** Usage: (Flags & E_EVAL_<Flag>) == E_EVAL_<Flag> + */ + E_MASK_EVAL = 0xFC0000, + E_EVAL_NONE = 0x000000, /* No requirements */ + E_EVAL_CONST = 0x040000, /* Result must be immutable */ + E_EVAL_COMPILE_TIME = 0x0C0000, /* Result must be known at compile time */ + E_EVAL_PURE = 0x100000, /* Evaluation must have no side effects */ + E_EVAL_STATIC = 0x340000, /* Evaluation must generate no code */ + E_EVAL_MAYBE_UNUSED = 0x400000, /* Result may be unused */ + E_EVAL_UNEVAL = 0xC00000, /* Expression is unevaluated */ - E_LOADED = 0x4000, /* Expression is loaded in primary */ + /* Expression must be static and have result known at compile time */ + E_EVAL_C_CONST = E_EVAL_COMPILE_TIME | E_EVAL_STATIC, - E_ADDRESS_OF = 0x8000, /* Expression is the address of the lvalue */ + /* Flags to keep in subexpressions */ + E_MASK_KEEP_SUBEXPR = E_MASK_EVAL, + /* Flags to keep in ternary subexpressions */ + E_MASK_KEEP_RESULT = E_MASK_NEED | E_MASK_EVAL, + + /* Flags to keep when using the ED_Make functions */ + E_MASK_KEEP_MAKE = E_HAVE_MARKS | E_MASK_KEEP_RESULT, }; /* Forward */ @@ -292,13 +321,33 @@ void ED_MakeBitField (ExprDesc* Expr, unsigned BitOffs, unsigned BitWidth); /* Make this expression a bit field expression */ #if defined(HAVE_INLINE) -INLINE void ED_MarkForTest (ExprDesc* Expr) +INLINE void ED_RequireTest (ExprDesc* Expr) /* Mark the expression for a test. */ { Expr->Flags |= E_NEED_TEST; } #else -# define ED_MarkForTest(Expr) do { (Expr)->Flags |= E_NEED_TEST; } while (0) +# define ED_RequireTest(Expr) do { (Expr)->Flags |= E_NEED_TEST; } while (0) +#endif + +#if defined(HAVE_INLINE) +INLINE int ED_GetNeeds (const ExprDesc* Expr) +/* Get flags about what the expression needs. */ +{ + return (Expr->Flags & E_MASK_NEED); +} +#else +# define ED_GetNeeds(Expr) ((Expr)->Flags & E_MASK_NEED) +#endif + +#if defined(HAVE_INLINE) +INLINE int ED_NeedsPrimary (const ExprDesc* Expr) +/* Check if the expression needs to be in Primary. */ +{ + return (Expr->Flags & E_MASK_NEED) == E_NEED_EAX; +} +#else +# define ED_NeedsPrimary(Expr) (((Expr)->Flags & E_MASK_NEED) == E_NEED_EAX) #endif #if defined(HAVE_INLINE) @@ -311,15 +360,25 @@ INLINE int ED_NeedsTest (const ExprDesc* Expr) # define ED_NeedsTest(Expr) (((Expr)->Flags & E_NEED_TEST) != 0) #endif +#if defined(HAVE_INLINE) +INLINE int ED_YetToTest (const ExprDesc* Expr) +/* Check if the expression needs to be tested but not yet. */ +{ + return ((Expr)->Flags & (E_NEED_TEST | E_CC_SET)) == E_NEED_TEST; +} +#else +# define ED_YetToTest(Expr) (((Expr)->Flags & (E_NEED_TEST | E_CC_SET)) == E_NEED_TEST) +#endif + #if defined(HAVE_INLINE) INLINE void ED_TestDone (ExprDesc* Expr) /* Mark the expression as tested and condition codes set. */ { - Expr->Flags = (Expr->Flags & ~E_NEED_TEST) | E_CC_SET; + Expr->Flags |= E_CC_SET; } #else # define ED_TestDone(Expr) \ - do { (Expr)->Flags = ((Expr)->Flags & ~E_NEED_TEST) | E_CC_SET; } while (0) + do { (Expr)->Flags |= E_CC_SET; } while (0) #endif #if defined(HAVE_INLINE) @@ -354,6 +413,42 @@ INLINE int ED_IsLoaded (const ExprDesc* Expr) # define ED_IsLoaded(Expr) (((Expr)->Flags & E_LOADED) != 0) #endif +int ED_YetToLoad (const ExprDesc* Expr); +/* Check if the expression is yet to be loaded somehow. */ + +#if defined(HAVE_INLINE) +INLINE int ED_NeedsConst (const ExprDesc* Expr) +/* Check if the expression need be immutable */ +{ + return (Expr->Flags & E_EVAL_CONST) == E_EVAL_CONST; +} +#else +# define ED_NeedsConst(Expr) (((Expr)->Flags & E_EVAL_CONST) == E_EVAL_CONST) +#endif + +void ED_MarkForUneval (ExprDesc* Expr); +/* Mark the expression as not to be evaluated */ + +#if defined(HAVE_INLINE) +INLINE int ED_MayBeUneval (const ExprDesc* Expr) +/* Check if the expression may be uevaluated */ +{ + return (Expr->Flags & E_EVAL_UNEVAL) == E_EVAL_UNEVAL; +} +#else +# define ED_MayBeUneval(Expr) (((Expr)->Flags & E_EVAL_UNEVAL) == E_EVAL_UNEVAL) +#endif + +#if defined(HAVE_INLINE) +INLINE int ED_MayHaveNoEffect (const ExprDesc* Expr) +/* Check if the expression may be present without effects */ +{ + return (Expr->Flags & E_EVAL_MAYBE_UNUSED) == E_EVAL_MAYBE_UNUSED; +} +#else +# define ED_MayHaveNoEffect(Expr) (((Expr)->Flags & E_EVAL_MAYBE_UNUSED) == E_EVAL_MAYBE_UNUSED) +#endif + #if defined(HAVE_INLINE) INLINE int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr) /* Return true if the expression is E_LOC_PRIMARY or E_LOC_EXPR */ @@ -522,7 +617,7 @@ int ED_IsNullPtr (const ExprDesc* Expr); int ED_IsBool (const ExprDesc* Expr); /* Return true of the expression can be treated as a boolean, that is, it can -** be an operand to a compare operation. +** be an operand to a compare operation with 0/NULL. */ void PrintExprDesc (FILE* F, ExprDesc* Expr); diff --git a/src/cc65/goto.c b/src/cc65/goto.c index f1fb725d2..06364068f 100644 --- a/src/cc65/goto.c +++ b/src/cc65/goto.c @@ -80,6 +80,8 @@ void GotoStatement (void) CodeEntry *E; unsigned char val; + ED_Init (&desc); + NextToken (); /* arr[foo], we only support simple foo for now */ diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index f3a1a6add..5c5434393 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -145,7 +145,7 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) Flags |= TypeOf (Expr->Type); } - if (ED_NeedsTest (Expr)) { + if (ED_YetToTest (Expr)) { /* If we're only testing, we do not need to promote char to int. ** CF_FORCECHAR does nothing if the type is not CF_CHAR. */ @@ -234,7 +234,7 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) */ CHECK (Expr->BitOffs < CHAR_BITS); - if (ED_NeedsTest (Expr)) { + if (ED_YetToTest (Expr)) { g_testbitfield (Flags, Expr->BitOffs, Expr->BitWidth); } else { g_extractbitfield (Flags, BitFieldFullWidthFlags, IsSignSigned (Expr->Type), @@ -252,7 +252,7 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) LoadAddress (Flags, Expr); /* Are we testing this value? */ - if (ED_NeedsTest (Expr)) { + if (ED_YetToTest (Expr)) { /* Yes, force a test */ g_test (Flags); ED_TestDone (Expr); diff --git a/src/cc65/locals.c b/src/cc65/locals.c index a21a09e8e..87c8e6cb9 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -122,8 +122,6 @@ static void ParseRegisterDecl (Declaration* Decl, int Reg) /* Check for an optional initialization */ if (CurTok.Tok == TOK_ASSIGN) { - ExprDesc Expr; - /* Skip the '=' */ NextToken (); @@ -152,6 +150,9 @@ static void ParseRegisterDecl (Declaration* Decl, int Reg) } else { + ExprDesc Expr; + ED_Init (&Expr); + /* Parse the expression */ hie1 (&Expr); @@ -203,8 +204,6 @@ static void ParseAutoDecl (Declaration* Decl) /* Check for an optional initialization */ if (CurTok.Tok == TOK_ASSIGN) { - ExprDesc Expr; - /* Skip the '=' */ NextToken (); @@ -242,6 +241,9 @@ static void ParseAutoDecl (Declaration* Decl) } else { + ExprDesc Expr; + ED_Init (&Expr); + /* Allocate previously reserved local space */ F_AllocLocalSpace (CurrentFunc); @@ -303,8 +305,6 @@ static void ParseAutoDecl (Declaration* Decl) /* Allow assignments */ if (CurTok.Tok == TOK_ASSIGN) { - ExprDesc Expr; - /* Skip the '=' */ NextToken (); @@ -328,6 +328,9 @@ static void ParseAutoDecl (Declaration* Decl) } else { + ExprDesc Expr; + ED_Init (&Expr); + /* Allocate space for the variable */ AllocStorage (DataLabel, g_usebss, Size); diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 1c4837d94..518570ff5 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1043,6 +1043,7 @@ static int DoIf (int Skip) /* Process #if directive */ { ExprDesc Expr; + ED_Init (&Expr); /* We're about to abuse the compiler expression parser to evaluate the ** #if expression. Save the current tokens to come back here later. diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c index 9fe9d1188..0c69e96e5 100644 --- a/src/cc65/shiftexpr.c +++ b/src/cc65/shiftexpr.c @@ -61,7 +61,6 @@ void ShiftExpr (struct ExprDesc* Expr) /* Parse the << and >> operators. */ { - ExprDesc Expr2; CodeMark Mark1; CodeMark Mark2; token_t Tok; /* The operator token */ @@ -78,6 +77,10 @@ void ShiftExpr (struct ExprDesc* Expr) while (CurTok.Tok == TOK_SHL || CurTok.Tok == TOK_SHR) { + ExprDesc Expr2; + ED_Init (&Expr2); + Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; + /* All operators that call this function expect an int on the lhs */ if (!IsClassInt (Expr->Type)) { Error ("Integer expression expected"); diff --git a/src/cc65/staticassert.c b/src/cc65/staticassert.c index 68f0a41bc..b963947b6 100644 --- a/src/cc65/staticassert.c +++ b/src/cc65/staticassert.c @@ -55,6 +55,8 @@ void ParseStaticAssert () ExprDesc Expr; int failed; + ED_Init (&Expr); + /* Skip the _Static_assert token itself */ CHECK (CurTok.Tok == TOK_STATIC_ASSERT); NextToken (); diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index 94e56a625..8335177bb 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -152,6 +152,9 @@ static void ParseArg (ArgDesc* Arg, Type* Type) /* Remember the required argument type */ Arg->ArgType = Type; + /* Init expression */ + ED_Init (&Arg->Expr); + /* Read the expression we're going to pass to the function */ MarkedExprWithCheck (hie1, &Arg->Expr); @@ -1180,6 +1183,8 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) long ECount; unsigned L; + ED_Init (&Arg); + /* Setup the argument type string */ ArgType[1].C = T_CHAR | T_QUAL_CONST; diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index 036cc2d89..ba9ae389f 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -312,6 +312,7 @@ static void ReturnStatement (void) ExprDesc Expr; const Type* ReturnType; + ED_Init (&Expr); NextToken (); if (CurTok.Tok != TOK_SEMI) { @@ -424,8 +425,6 @@ static void ContinueStatement (void) static void ForStatement (void) /* Handle a 'for' statement */ { - ExprDesc lval1; - ExprDesc lval3; int HaveIncExpr; CodeMark IncExprStart; CodeMark IncExprEnd; @@ -450,6 +449,10 @@ static void ForStatement (void) /* Parse the initializer expression */ if (CurTok.Tok != TOK_SEMI) { + /* The value of the expression is unused */ + ExprDesc lval1; + ED_Init (&lval1); + lval1.Flags = E_NEED_NONE; Expression0 (&lval1); } ConsumeSemi (); @@ -475,6 +478,10 @@ static void ForStatement (void) /* Parse the increment expression */ HaveIncExpr = (CurTok.Tok != TOK_RPAREN); if (HaveIncExpr) { + /* The value of the expression is unused */ + ExprDesc lval3; + ED_Init (&lval3); + lval3.Flags = E_NEED_NONE; Expression0 (&lval3); } @@ -580,8 +587,10 @@ int Statement (int* PendingToken) { ExprDesc Expr; int GotBreak; + unsigned PrevErrorCount; CodeMark Start, End; - unsigned PrevErrorCount = ErrorCount; + + ED_Init (&Expr); /* Assume no pending token */ if (PendingToken) { @@ -666,25 +675,24 @@ int Statement (int* PendingToken) break; default: - /* Remember the current code position */ + /* Remember the current error count and code position */ + PrevErrorCount = ErrorCount; GetCodePos (&Start); + /* Actual statement */ - ExprWithCheck (hie0, &Expr); - /* Load the result only if it is an lvalue and the type is - ** marked as volatile. Otherwise the load is useless. - */ - if (ED_IsLVal (&Expr) && IsQualVolatile (Expr.Type)) { - LoadExpr (CF_NONE, &Expr); - } + Expr.Flags |= E_NEED_NONE; + Expression0 (&Expr); + /* If the statement didn't generate code, and is not of type ** void, emit a warning. */ GetCodePos (&End); - if (CodeRangeIsEmpty (&Start, &End) && - !IsTypeVoid (Expr.Type) && + if (!ED_YetToLoad (&Expr) && + !ED_MayHaveNoEffect (&Expr) && + CodeRangeIsEmpty (&Start, &End) && IS_Get (&WarnNoEffect) && PrevErrorCount == ErrorCount) { - Warning ("Statement has no effect"); + Warning ("Expression result unused"); } CheckSemi (PendingToken); } diff --git a/src/cc65/swstmt.c b/src/cc65/swstmt.c index 8cab93bba..524a31ddf 100644 --- a/src/cc65/swstmt.c +++ b/src/cc65/swstmt.c @@ -97,7 +97,6 @@ void SwitchStatement (void) SwitchCtrl* OldSwitch; /* Pointer to old switch control data */ SwitchCtrl SwitchData; /* New switch data */ - /* Eat the "switch" token */ NextToken (); @@ -105,6 +104,8 @@ void SwitchStatement (void) ** integer type. */ ConsumeLParen (); + + ED_Init (&SwitchExpr); Expression0 (&SwitchExpr); if (!IsClassInt (SwitchExpr.Type)) { Error ("Switch quantity is not an integer"); @@ -211,11 +212,11 @@ void CaseLabel (void) long Val; /* Case label value */ unsigned CodeLabel; /* Code label for this case */ - /* Skip the "case" token */ NextToken (); /* Read the selector expression */ + ED_Init (&CaseExpr); ConstAbsIntExpr (hie1, &CaseExpr); Val = CaseExpr.IVal; diff --git a/src/cc65/testexpr.c b/src/cc65/testexpr.c index 5bb7bf7e4..b924eaa40 100644 --- a/src/cc65/testexpr.c +++ b/src/cc65/testexpr.c @@ -58,6 +58,8 @@ unsigned Test (unsigned Label, int Invert) ExprDesc Expr; unsigned Result; + ED_Init (&Expr); + /* Read a boolean expression */ BoolExpr (hie0, &Expr); @@ -80,10 +82,8 @@ unsigned Test (unsigned Label, int Invert) /* Result is unknown */ Result = TESTEXPR_UNKNOWN; - /* If the expr hasn't set condition codes, set the force-test flag */ - if (!ED_IsTested (&Expr)) { - ED_MarkForTest (&Expr); - } + /* Set the test flag */ + ED_RequireTest (&Expr); /* Load the value into the primary register */ LoadExpr (CF_FORCECHAR, &Expr); diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 0f67db107..930aef8d4 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -371,6 +371,11 @@ void TypeCast (ExprDesc* Expr) GetBasicTypeName (NewType)); } + /* If the new type is void, the cast expression can have no effects */ + if (IsTypeVoid (NewType)) { + Expr->Flags |= E_EVAL_MAYBE_UNUSED; + } + /* The result is always an rvalue */ ED_MarkExprAsRVal (Expr); } From 1abb9da2b23b4de4b2e138818c1db7f7c537be96 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 26 Aug 2020 09:40:32 +0800 Subject: [PATCH 0411/2710] Moved bug250.c to test/val as it is fixed. --- test/val/bug250.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 test/val/bug250.c diff --git a/test/val/bug250.c b/test/val/bug250.c new file mode 100644 index 000000000..60f3c633d --- /dev/null +++ b/test/val/bug250.c @@ -0,0 +1,13 @@ +/* bug #250 - Array size compile-time optimization stops halfway */ + +#include <stdlib.h> + +#define LZO_MAX(a,b) ((a) >= (b) ? (a) : (b)) +unsigned char c[2*4]; +unsigned char b[2*LZO_MAX(8,sizeof(int))]; // this will not compile + +int main(void) +{ + /* FIXME: add some runtime check */ + return EXIT_SUCCESS; +} From 725511131a40737c33fe7731194f7481ebbbc69d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 20 Aug 2020 07:52:11 +0800 Subject: [PATCH 0412/2710] Fixed constant expression checks with no-code requirement. Used return-by-value initialization for ExprDesc. --- src/cc65/asmstmt.c | 19 +++------- src/cc65/declare.c | 38 +++++++------------- src/cc65/expr.c | 80 ++++++++++++++++++++++------------------- src/cc65/expr.h | 20 +++++------ src/cc65/preproc.c | 5 +-- src/cc65/preproc.h | 2 +- src/cc65/staticassert.c | 4 +-- src/cc65/swstmt.c | 3 +- 8 files changed, 73 insertions(+), 98 deletions(-) diff --git a/src/cc65/asmstmt.c b/src/cc65/asmstmt.c index 20de6033e..148d62d9c 100644 --- a/src/cc65/asmstmt.c +++ b/src/cc65/asmstmt.c @@ -129,16 +129,13 @@ static SymEntry* AsmGetSym (unsigned Arg, unsigned Type) static void ParseByteArg (StrBuf* T, unsigned Arg) /* Parse the %b format specifier */ { - ExprDesc Expr; char Buf [16]; - ED_Init (&Expr); - /* We expect an argument separated by a comma */ ConsumeComma (); /* Evaluate the expression */ - ConstAbsIntExpr (hie1, &Expr); + ExprDesc Expr = StaticConstAbsIntExpr (hie1); /* Check the range but allow negative values if the type is signed */ if (IsSignUnsigned (Expr.Type)) { @@ -165,16 +162,13 @@ static void ParseByteArg (StrBuf* T, unsigned Arg) static void ParseWordArg (StrBuf* T, unsigned Arg) /* Parse the %w format specifier */ { - ExprDesc Expr; char Buf [16]; - ED_Init (&Expr); - /* We expect an argument separated by a comma */ ConsumeComma (); /* Evaluate the expression */ - ConstAbsIntExpr (hie1, &Expr); + ExprDesc Expr = StaticConstAbsIntExpr (hie1); /* Check the range but allow negative values if the type is signed */ if (IsSignUnsigned (Expr.Type)) { @@ -201,16 +195,13 @@ static void ParseWordArg (StrBuf* T, unsigned Arg) static void ParseLongArg (StrBuf* T, unsigned Arg attribute ((unused))) /* Parse the %l format specifier */ { - ExprDesc Expr; char Buf [16]; - ED_Init (&Expr); - /* We expect an argument separated by a comma */ ConsumeComma (); /* Evaluate the expression */ - ConstAbsIntExpr (hie1, &Expr); + ExprDesc Expr = StaticConstAbsIntExpr (hie1); /* Convert into a hex number */ xsprintf (Buf, sizeof (Buf), "$%08lX", Expr.IVal & 0xFFFFFFFF); @@ -315,8 +306,6 @@ static void ParseStrArg (StrBuf* T, unsigned Arg attribute ((unused))) ExprDesc Expr; char Buf [64]; - ED_Init (&Expr); - /* We expect an argument separated by a comma */ ConsumeComma (); @@ -336,7 +325,7 @@ static void ParseStrArg (StrBuf* T, unsigned Arg attribute ((unused))) break; default: - ConstAbsIntExpr (hie1, &Expr); + Expr = StaticConstAbsIntExpr (hie1); xsprintf (Buf, sizeof (Buf), "%ld", Expr.IVal); SB_AppendStr (T, Buf); break; diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 7e5f24b24..8d24b168e 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -590,10 +590,8 @@ static SymEntry* ParseEnumDecl (const char* Name) /* Check for an assigned value */ if (CurTok.Tok == TOK_ASSIGN) { - ExprDesc Expr; - ED_Init (&Expr); NextToken (); - ConstAbsIntExpr (hie1, &Expr); + ExprDesc Expr = StaticConstAbsIntExpr (hie1); EnumVal = Expr.IVal; MemberType = Expr.Type; IsSigned = IsSignSigned (MemberType); @@ -720,9 +718,6 @@ static int ParseFieldWidth (Declaration* Decl) ** otherwise the width of the field. */ { - ExprDesc Expr; - ED_Init (&Expr); - if (CurTok.Tok != TOK_COLON) { /* No bit-field declaration */ return -1; @@ -746,7 +741,7 @@ static int ParseFieldWidth (Declaration* Decl) /* Read the width */ NextToken (); - ConstAbsIntExpr (hie1, &Expr); + ExprDesc Expr = StaticConstAbsIntExpr (hie1); if (Expr.IVal < 0) { Error ("Negative width in bit-field"); @@ -1819,9 +1814,7 @@ static void Declarator (const DeclSpec* Spec, Declaration* D, declmode_t Mode) /* Read the size if it is given */ if (CurTok.Tok != TOK_RBRACK) { - ExprDesc Expr; - ED_Init (&Expr); - ConstAbsIntExpr (hie1, &Expr); + ExprDesc Expr = StaticConstAbsIntExpr (hie1); if (Expr.IVal <= 0) { if (D->Ident[0] != '\0') { Error ("Size of array '%s' is invalid", D->Ident); @@ -2158,7 +2151,7 @@ static void OutputBitFieldData (StructInitData* SI) -static void ParseScalarInitInternal (Type* T, ExprDesc* ED) +static ExprDesc ParseScalarInitInternal (Type* T) /* Parse initializaton for scalar data types. This function will not output the ** data but return it in ED. */ @@ -2174,11 +2167,13 @@ static void ParseScalarInitInternal (Type* T, ExprDesc* ED) } /* Get the expression and convert it to the target type */ - ConstExpr (hie1, ED); - TypeConversion (ED, T); + ExprDesc ED = StaticConstExpr (hie1); + TypeConversion (&ED, T); /* Close eventually opening braces */ ClosingCurlyBraces (BraceCount); + + return ED; } @@ -2186,11 +2181,8 @@ static void ParseScalarInitInternal (Type* T, ExprDesc* ED) static unsigned ParseScalarInit (Type* T) /* Parse initializaton for scalar data types. Return the number of data bytes. */ { - ExprDesc ED; - ED_Init (&ED); - /* Parse initialization */ - ParseScalarInitInternal (T, &ED); + ExprDesc ED = ParseScalarInitInternal (T); /* Output the data */ DefineData (&ED); @@ -2208,10 +2200,7 @@ static unsigned ParsePointerInit (Type* T) unsigned BraceCount = OpeningCurlyBraces (0); /* Expression */ - ExprDesc ED; - ED_Init (&ED); - - ConstExpr (hie1, &ED); + ExprDesc ED = StaticConstExpr (hie1); TypeConversion (&ED, T); /* Output the data */ @@ -2438,7 +2427,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) SI.Offs * CHAR_BITS + SI.ValBits); /* Read the data, check for a constant integer, do a range check */ - ParseScalarInitInternal (Entry->Type, &ED); + ED = ParseScalarInitInternal (Entry->Type); if (!ED_IsConstAbsInt (&ED)) { Error ("Constant initializer expected"); ED_MakeConstAbsInt (&ED, 1); @@ -2556,10 +2545,7 @@ static unsigned ParseVoidInit (Type* T) /* Allow an arbitrary list of values */ Size = 0; do { - ExprDesc Expr; - ED_Init (&Expr); - - ConstExpr (hie1, &Expr); + ExprDesc Expr = StaticConstExpr (hie1); switch (GetUnderlyingTypeCode (&Expr.Type[0])) { case T_SCHAR: diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 62136e122..dfc8007e4 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3147,17 +3147,14 @@ static void hieAndPP (ExprDesc* Expr) ** called recursively from the preprocessor. */ { - ConstAbsIntExpr (hie2, Expr); + *Expr = StaticConstAbsIntExpr (hie2); while (CurTok.Tok == TOK_BOOL_AND) { - ExprDesc Expr2; - ED_Init (&Expr2); - /* Skip the && */ NextToken (); /* Get rhs */ - ConstAbsIntExpr (hie2, &Expr2); + ExprDesc Expr2 = StaticConstAbsIntExpr (hie2); /* Combine the two */ Expr->IVal = (Expr->IVal && Expr2.IVal); @@ -3171,17 +3168,14 @@ static void hieOrPP (ExprDesc *Expr) ** called recursively from the preprocessor. */ { - ConstAbsIntExpr (hieAndPP, Expr); + *Expr = StaticConstAbsIntExpr (hieAndPP); while (CurTok.Tok == TOK_BOOL_OR) { - ExprDesc Expr2; - ED_Init (&Expr2); - /* Skip the && */ NextToken (); /* Get rhs */ - ConstAbsIntExpr (hieAndPP, &Expr2); + ExprDesc Expr2 = StaticConstAbsIntExpr (hieAndPP); /* Combine the two */ Expr->IVal = (Expr->IVal || Expr2.IVal); @@ -3900,24 +3894,6 @@ void Expression0 (ExprDesc* Expr) -void ConstExpr (void (*Func) (ExprDesc*), ExprDesc* Expr) -/* Will evaluate an expression via the given function. If the result is not -** a constant of some sort, a diagnostic will be printed, and the value is -** replaced by a constant one to make sure there are no internal errors that -** result from this input error. -*/ -{ - Expr->Flags |= E_EVAL_CONST; - ExprWithCheck (Func, Expr); - if (!ED_IsConst (Expr)) { - Error ("Constant expression expected"); - /* To avoid any compiler errors, make the expression a valid const */ - ED_MakeConstAbsInt (Expr, 1); - } -} - - - void BoolExpr (void (*Func) (ExprDesc*), ExprDesc* Expr) /* Will evaluate an expression via the given function. If the result is not ** something that may be evaluated in a boolean context, a diagnostic will be @@ -3927,26 +3903,56 @@ void BoolExpr (void (*Func) (ExprDesc*), ExprDesc* Expr) { ExprWithCheck (Func, Expr); if (!ED_IsBool (Expr)) { - Error ("Boolean expression expected"); + Error ("Scalar expression expected"); /* To avoid any compiler errors, make the expression a valid int */ - ED_MakeConstAbsInt (Expr, 1); + ED_MakeConstBool (Expr, 1); } } -void ConstAbsIntExpr (void (*Func) (ExprDesc*), ExprDesc* Expr) -/* Will evaluate an expression via the given function. If the result is not -** a constant numeric integer value, a diagnostic will be printed, and the +ExprDesc StaticConstExpr (void (*Func) (ExprDesc*)) +/* Will evaluate an expression via the given function. If the result is not a +** static constant expression, a diagnostic will be printed, and the value is +** replaced by a constant one to make sure there are no internal errors that +** result from this input error. +*/ +{ + ExprDesc Expr; + ED_Init (&Expr); + + Expr.Flags |= E_EVAL_C_CONST; + MarkedExprWithCheck (Func, &Expr); + if (!ED_IsConst (&Expr) || !ED_CodeRangeIsEmpty (&Expr)) { + Error ("Constant expression expected"); + /* To avoid any compiler errors, make the expression a valid const */ + ED_MakeConstAbsInt (&Expr, 1); + } + + /* Return by value */ + return Expr; +} + + + +ExprDesc StaticConstAbsIntExpr (void (*Func) (ExprDesc*)) +/* Will evaluate an expression via the given function. If the result is not a +** static constant numeric integer value, a diagnostic will be printed, and the ** value is replaced by a constant one to make sure there are no internal ** errors that result from this input error. */ { - Expr->Flags |= E_EVAL_CONST; - ExprWithCheck (Func, Expr); - if (!ED_IsConstAbsInt (Expr)) { + ExprDesc Expr; + ED_Init (&Expr); + + Expr.Flags |= E_EVAL_C_CONST; + MarkedExprWithCheck (Func, &Expr); + if (!ED_IsConstAbsInt (&Expr) || !ED_CodeRangeIsEmpty (&Expr)) { Error ("Constant integer expression expected"); /* To avoid any compiler errors, make the expression a valid const */ - ED_MakeConstAbsInt (Expr, 1); + ED_MakeConstAbsInt (&Expr, 1); } + + /* Return by value */ + return Expr; } diff --git a/src/cc65/expr.h b/src/cc65/expr.h index a6c183cbd..8f7eb6f09 100644 --- a/src/cc65/expr.h +++ b/src/cc65/expr.h @@ -54,13 +54,6 @@ int evalexpr (unsigned flags, void (*Func) (ExprDesc*), ExprDesc* Expr); void Expression0 (ExprDesc* Expr); /* Evaluate an expression via hie0 and put the result into the primary register */ -void ConstExpr (void (*Func) (ExprDesc*), ExprDesc* Expr); -/* Will evaluate an expression via the given function. If the result is not -** a constant of some sort, a diagnostic will be printed, and the value is -** replaced by a constant one to make sure there are no internal errors that -** result from this input error. -*/ - void BoolExpr (void (*Func) (ExprDesc*), ExprDesc* Expr); /* Will evaluate an expression via the given function. If the result is not ** something that may be evaluated in a boolean context, a diagnostic will be @@ -68,9 +61,16 @@ void BoolExpr (void (*Func) (ExprDesc*), ExprDesc* Expr); ** are no internal errors that result from this input error. */ -void ConstAbsIntExpr (void (*Func) (ExprDesc*), ExprDesc* Expr); -/* Will evaluate an expression via the given function. If the result is not -** a constant numeric integer value, a diagnostic will be printed, and the +ExprDesc StaticConstExpr (void (*Func) (ExprDesc*)); +/* Get an expression evaluated via the given function. If the result is not a +** static constant expression, a diagnostic will be printed, and the value is +** replaced by a constant one to make sure there are no internal errors that +** result from this input error. +*/ + +ExprDesc StaticConstAbsIntExpr (void (*Func) (ExprDesc*)); +/* Get an expression evaluate via the given function. If the result is not a +** static constant numeric integer value, a diagnostic will be printed, and the ** value is replaced by a constant one to make sure there are no internal ** errors that result from this input error. */ diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 518570ff5..2d2f316d7 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1042,9 +1042,6 @@ static void DoError (void) static int DoIf (int Skip) /* Process #if directive */ { - ExprDesc Expr; - ED_Init (&Expr); - /* We're about to abuse the compiler expression parser to evaluate the ** #if expression. Save the current tokens to come back here later. ** NOTE: Yes, this is a hack, but it saves a complete separate expression @@ -1079,7 +1076,7 @@ static int DoIf (int Skip) NextToken (); /* Call the expression parser */ - ConstExpr (hie1, &Expr); + ExprDesc Expr = StaticConstExpr (hie1); /* End preprocessing mode */ Preprocessing = 0; diff --git a/src/cc65/preproc.h b/src/cc65/preproc.h index 8d7b3c374..464b02337 100644 --- a/src/cc65/preproc.h +++ b/src/cc65/preproc.h @@ -44,7 +44,7 @@ -/* Set when the preprocessor calls ConstExpr() recursively */ +/* Set when the preprocessor calls StaticConstExpr() recursively */ extern unsigned char Preprocessing; diff --git a/src/cc65/staticassert.c b/src/cc65/staticassert.c index b963947b6..3372c59a1 100644 --- a/src/cc65/staticassert.c +++ b/src/cc65/staticassert.c @@ -55,8 +55,6 @@ void ParseStaticAssert () ExprDesc Expr; int failed; - ED_Init (&Expr); - /* Skip the _Static_assert token itself */ CHECK (CurTok.Tok == TOK_STATIC_ASSERT); NextToken (); @@ -67,7 +65,7 @@ void ParseStaticAssert () } /* Parse assertion condition */ - ConstAbsIntExpr (hie1, &Expr); + Expr = StaticConstAbsIntExpr (hie1); failed = !Expr.IVal; /* If there is a comma, we also have an error message. The message is optional because we diff --git a/src/cc65/swstmt.c b/src/cc65/swstmt.c index 524a31ddf..559e168c3 100644 --- a/src/cc65/swstmt.c +++ b/src/cc65/swstmt.c @@ -216,8 +216,7 @@ void CaseLabel (void) NextToken (); /* Read the selector expression */ - ED_Init (&CaseExpr); - ConstAbsIntExpr (hie1, &CaseExpr); + CaseExpr = StaticConstAbsIntExpr (hie1); Val = CaseExpr.IVal; /* Now check if we're inside a switch statement */ From 85ea06687b7ba638841aeb83a0d22ae9112d5425 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 20 Aug 2020 07:52:15 +0800 Subject: [PATCH 0413/2710] Fixed logical AND and logical OR. --- src/cc65/expr.c | 253 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 196 insertions(+), 57 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index dfc8007e4..b27a1c6fc 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3184,58 +3184,135 @@ static void hieOrPP (ExprDesc *Expr) -static void hieAnd (ExprDesc* Expr, unsigned TrueLab, int* BoolOp) -/* Process "exp && exp" */ +static int hieAnd (ExprDesc* Expr, unsigned TrueLab, int* UsedTrueLab) +/* Process "exp && exp". This should only be called within hieOr. +** Return true if logic AND does occur. +*/ { - int FalseLab; + unsigned Flags = Expr->Flags & E_MASK_KEEP_SUBEXPR; + int HasFalseJump = 0, HasTrueJump = 0; + CodeMark Start; + + /* Get a label that we will use for false expressions */ + int FalseLab = GetLocalLabel (); + + /* Get lhs */ + GetCodePos (&Start); ExprWithCheck (hie2, Expr); + if ((Flags & E_EVAL_UNEVAL) == E_EVAL_UNEVAL) { + RemoveCode (&Start); + } + if (CurTok.Tok == TOK_BOOL_AND) { - /* Tell our caller that we're evaluating a boolean */ - *BoolOp = 1; + ExprDesc Expr2; - /* Get a label that we will use for false expressions */ - FalseLab = GetLocalLabel (); + /* Check type */ + if (!ED_IsBool (Expr)) { + Error ("Scalar expression expected"); + ED_MakeConstBool (Expr, 0); + } else if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + if (!ED_IsConstAbs (Expr)) { + /* Set the test flag */ + ED_RequireTest (Expr); - /* Set the test flag */ - ED_RequireTest (Expr); + /* Load the value */ + LoadExpr (CF_FORCECHAR, Expr); - /* Load the value */ - LoadExpr (CF_FORCECHAR, Expr); + /* Remember that the jump is used */ + HasFalseJump = 1; - /* Generate the jump */ - g_falsejump (CF_NONE, FalseLab); + /* Generate the jump */ + g_falsejump (CF_NONE, FalseLab); + } else if (Expr->IVal == 0) { + /* Skip remaining */ + Flags |= E_EVAL_UNEVAL; + } + } /* Parse more boolean and's */ while (CurTok.Tok == TOK_BOOL_AND) { - ExprDesc Expr2; ED_Init (&Expr2); + Expr2.Flags = Flags; /* Skip the && */ NextToken (); /* Get rhs */ + GetCodePos (&Start); hie2 (&Expr2); - ED_RequireTest (&Expr2); - LoadExpr (CF_FORCECHAR, &Expr2); + if ((Flags & E_EVAL_UNEVAL) == E_EVAL_UNEVAL) { + RemoveCode (&Start); + } - /* Do short circuit evaluation */ - if (CurTok.Tok == TOK_BOOL_AND) { - g_falsejump (CF_NONE, FalseLab); - } else { - /* Last expression - will evaluate to true */ - g_truejump (CF_NONE, TrueLab); + /* Check type */ + if (!ED_IsBool (&Expr2)) { + Error ("Scalar expression expected"); + ED_MakeConstBool (&Expr2, 0); + } else if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + if (!ED_IsConstAbs (&Expr2)) { + ED_RequireTest (&Expr2); + LoadExpr (CF_FORCECHAR, &Expr2); + + /* Do short circuit evaluation */ + if (CurTok.Tok == TOK_BOOL_AND) { + HasFalseJump = 1; + g_falsejump (CF_NONE, FalseLab); + } else { + /* We need the true label for the last expression */ + HasTrueJump = 1; + } + } else if (Expr2.IVal == 0) { + /* Skip remaining */ + Flags |= E_EVAL_UNEVAL; + /* The value of the expression will be false */ + ED_MakeConstBool (Expr, 0); + } } } - /* Define the false jump label here */ - g_defcodelabel (FalseLab); + /* Last expression */ + if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + if (HasFalseJump || HasTrueJump) { + /* In either case we need the true label anyways */ + HasTrueJump = 1; + if (!ED_IsConstAbs (&Expr2)) { + /* Will branch to true and fall to false */ + g_truejump (CF_NONE, TrueLab); + } else { + /* Will jump away */ + g_jump (TrueLab); + } + /* The result is an rvalue in primary */ + ED_FinalizeRValLoad (Expr); + /* No need to test as the result will be jumped to */ + ED_TestDone (Expr); + } + } - /* The result is an rvalue in primary */ - ED_FinalizeRValLoad (Expr); - ED_TestDone (Expr); /* Condition codes are set */ + if (HasFalseJump) { + /* Define the false jump label here */ + g_defcodelabel (FalseLab); + } + + /* Convert to bool */ + if (ED_IsConstAbs (Expr) && Expr->IVal != 0) { + ED_MakeConstBool (Expr, 1); + } else { + Expr->Type = type_bool; + } + + /* Tell our caller that we're used the true label */ + if (HasTrueJump) { + *UsedTrueLab = 1; + } + + /* Tell our caller that we're evaluating a boolean */ + return 1; } + + return 0; } @@ -3243,69 +3320,131 @@ static void hieAnd (ExprDesc* Expr, unsigned TrueLab, int* BoolOp) static void hieOr (ExprDesc *Expr) /* Process "exp || exp". */ { - int BoolOp = 0; /* Did we have a boolean op? */ - int AndOp; /* Did we have a && operation? */ + unsigned Flags = Expr->Flags & E_MASK_KEEP_SUBEXPR; + int AndOp; /* Did we have a && operation? */ unsigned TrueLab; /* Jump to this label if true */ unsigned DoneLab; + int HasTrueJump = 0; + int HasNewTrueJump; + CodeMark Start; - /* Get a label */ + /* Get a label that we will use for true expressions */ TrueLab = GetLocalLabel (); /* Call the next level parser */ - hieAnd (Expr, TrueLab, &BoolOp); + GetCodePos (&Start); + AndOp = hieAnd (Expr, TrueLab, &HasNewTrueJump); + if ((Flags & E_EVAL_UNEVAL) == E_EVAL_UNEVAL) { + RemoveCode (&Start); + } else { + /* Remember the jump */ + HasTrueJump = HasNewTrueJump; + } /* Any boolean or's? */ if (CurTok.Tok == TOK_BOOL_OR) { - /* Set the test flag */ - ED_RequireTest (Expr); + /* Check type */ + if (!ED_IsBool (Expr)) { + Error ("Scalar expression expected"); + ED_MakeConstBool (Expr, 0); + } else if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + + if (!ED_IsConstAbs (Expr)) { + /* Test the lhs if we haven't had && operators. If we had them, the + ** jump is already in place and there's no need to do the test. + */ + if (!AndOp) { + /* Set the test flag */ + ED_RequireTest (Expr); - /* Get first expr */ - LoadExpr (CF_FORCECHAR, Expr); + /* Get first expr */ + LoadExpr (CF_FORCECHAR, Expr); - /* For each expression jump to TrueLab if true. Beware: If we - ** had && operators, the jump is already in place! - */ - if (!BoolOp) { - g_truejump (CF_NONE, TrueLab); + /* Remember that the jump is used */ + HasTrueJump = 1; + + /* Jump to TrueLab if true */ + g_truejump (CF_NONE, TrueLab); + } + } else if (Expr->IVal != 0) { + /* Skip remaining */ + Flags |= E_EVAL_UNEVAL; + } } - /* Remember that we had a boolean op */ - BoolOp = 1; - /* while there's more expr */ while (CurTok.Tok == TOK_BOOL_OR) { ExprDesc Expr2; ED_Init (&Expr2); + Expr2.Flags = Flags; /* skip the || */ NextToken (); - /* Get a subexpr */ - AndOp = 0; - hieAnd (&Expr2, TrueLab, &AndOp); - ED_RequireTest (&Expr2); - LoadExpr (CF_FORCECHAR, &Expr2); + /* Get rhs subexpression */ + GetCodePos (&Start); + AndOp = hieAnd (&Expr2, TrueLab, &HasNewTrueJump); + if ((Flags & E_EVAL_UNEVAL) == E_EVAL_UNEVAL) { + RemoveCode (&Start); + } else { + /* Remember the jump */ + HasTrueJump = HasTrueJump || HasNewTrueJump; + } - /* If there is more to come, add shortcut boolean eval. */ - g_truejump (CF_NONE, TrueLab); + /* Check type */ + if (!ED_IsBool (&Expr2)) { + Error ("Scalar expression expected"); + ED_MakeConstBool (&Expr2, 0); + } else if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + + if (!ED_IsConstAbs (&Expr2)) { + /* If there is more to come, add shortcut boolean eval */ + if (!AndOp) { + ED_RequireTest (&Expr2); + LoadExpr (CF_FORCECHAR, &Expr2); + + HasTrueJump = 1; + g_truejump (CF_NONE, TrueLab); + } + } else if (Expr2.IVal != 0) { + /* Skip remaining */ + Flags |= E_EVAL_UNEVAL; + /* The result is always true */ + ED_MakeConstBool (Expr, 1); + } + } } - /* The result is an rvalue in primary */ - ED_FinalizeRValLoad (Expr); - ED_TestDone (Expr); /* Condition codes are set */ + /* Convert to bool */ + if (ED_IsConstAbs (Expr) && Expr->IVal != 0) { + ED_MakeConstBool (Expr, 1); + } else { + Expr->Type = type_bool; + } } - /* If we really had boolean ops, generate the end sequence */ - if (BoolOp) { + /* If we really had boolean ops, generate the end sequence if necessary */ + if (HasTrueJump) { + /* False case needs to jump over true case */ DoneLab = GetLocalLabel (); - g_getimmed (CF_INT | CF_CONST, 0, 0); /* Load FALSE */ - g_falsejump (CF_NONE, DoneLab); + if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + /* Load false only if the result is not true */ + g_getimmed (CF_INT | CF_CONST, 0, 0); /* Load FALSE */ + g_falsejump (CF_NONE, DoneLab); + } + + /* Load the true value */ g_defcodelabel (TrueLab); g_getimmed (CF_INT | CF_CONST, 1, 0); /* Load TRUE */ g_defcodelabel (DoneLab); + + /* The result is an rvalue in primary */ + ED_FinalizeRValLoad (Expr); + /* Condition codes are set */ + ED_TestDone (Expr); } } From 75dc2349882c563e7646715bf2933ac50cf6753f Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 21 Aug 2020 15:15:19 -0400 Subject: [PATCH 0414/2710] Guarded the static_assert macro with a C standards test. --- include/assert.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/include/assert.h b/include/assert.h index 3f8b46ac0..a4dcd5d7f 100644 --- a/include/assert.h +++ b/include/assert.h @@ -46,16 +46,14 @@ extern void __fastcall__ _afailed (const char*, unsigned); # define assert(expr) ((expr)? (void)0 : _afailed(__FILE__, __LINE__)) #endif -/* -** TODO: Guard with #if __STDC_VERSION__ >= 201112L or similar when there +/* TODO: Guard with #if __CC65_STD__ >= __CC65_STD_C11__ if there ** is a C11 mode. */ -#define static_assert _Static_assert +#if __CC65_STD__ > __CC65_STD_C99__ +# define static_assert _Static_assert +#endif /* End of assert.h */ #endif - - - From ea7336591cc807d63351a223896a3d9d84ae7d9a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 2 Jul 2020 10:30:02 +0800 Subject: [PATCH 0415/2710] Removed special-casing code for scaling up. Now it uses the normal multiplying code. --- src/cc65/codegen.c | 53 +++++++++------------------------------------- 1 file changed, 10 insertions(+), 43 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 6b6b292b0..a2dbf12b4 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -1496,54 +1496,14 @@ void g_scale (unsigned flags, long val) ** pointer points to. */ { - int p2; - /* Value may not be zero */ if (val == 0) { Internal ("Data type has no size"); } else if (val > 0) { - /* Scale up */ - if ((p2 = PowerOf2 (val)) > 0 && p2 <= 4) { - - /* Factor is 2, 4, 8 and 16, use special function */ - switch (flags & CF_TYPEMASK) { - - case CF_CHAR: - if (flags & CF_FORCECHAR) { - while (p2--) { - AddCodeLine ("asl a"); - } - break; - } - /* FALLTHROUGH */ - - case CF_INT: - if (flags & CF_UNSIGNED) { - AddCodeLine ("jsr shlax%d", p2); - } else { - AddCodeLine ("jsr aslax%d", p2); - } - break; - - case CF_LONG: - if (flags & CF_UNSIGNED) { - AddCodeLine ("jsr shleax%d", p2); - } else { - AddCodeLine ("jsr asleax%d", p2); - } - break; - - default: - typeerror (flags); - - } - - } else if (val != 1) { - - /* Use a multiplication instead */ + /* Use a multiplication instead */ + if (val != 1) { g_mul (flags | CF_CONST, val); - } } else { @@ -3224,7 +3184,6 @@ void g_asl (unsigned flags, unsigned long val) "tosaslax", "tosshlax", "tosasleax", "tosshleax" }; - /* If the right hand side is const, the lhs is not on stack but still ** in the primary register. */ @@ -3233,6 +3192,14 @@ void g_asl (unsigned flags, unsigned long val) switch (flags & CF_TYPEMASK) { case CF_CHAR: + if ((flags & CF_FORCECHAR) != 0 && val <= 4) { + while (val--) { + AddCodeLine ("asl a"); + } + return; + } + /* FALLTHROUGH */ + case CF_INT: val &= 0x0F; if (val >= 8) { From f59c2a08d998cc1dcfb2442a79d076b113ae9ad4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 2 Jul 2020 10:30:02 +0800 Subject: [PATCH 0416/2710] Added support for changing multiplications with certain negative multipliers into bit-shifts. Only enable certain kinds of signed mul replacements with shift according to the code size factor settings. --- src/cc65/codegen.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index a2dbf12b4..6cd8f5c43 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -2565,13 +2565,26 @@ void g_mul (unsigned flags, unsigned long val) "tosmulax", "tosumulax", "tosmuleax", "tosumuleax" }; - int p2; - /* Do strength reduction if the value is constant and a power of two */ - if (flags & CF_CONST && (p2 = PowerOf2 (val)) >= 0) { - /* Generate a shift instead */ - g_asl (flags, p2); - return; + if (flags & CF_CONST) { + + /* Deal with negative values if it's signed multiplication */ + int Negation = (flags & CF_UNSIGNED) == 0 && (signed long)val < 0; + int p2 = PowerOf2 (Negation ? (unsigned long)-(signed long)val : val); + + /* Check if we can use shift instead of multiplication */ + if (p2 == 0 || (p2 > 0 && IS_Get (&CodeSizeFactor) >= (Negation ? 100 : 0))) { + /* Generate a shift instead */ + g_asl (flags, p2); + + /* Negate the result if val is negative */ + if (Negation) { + g_neg (flags); + } + + /* Done */ + return; + } } /* If the right hand side is const, the lhs is not on stack but still From 63256fd15d0b54258a9df515bc62fca140eac201 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 20 Aug 2020 22:47:08 +0800 Subject: [PATCH 0417/2710] Changed negation of signed long stored in unsigned long to unsigned subtraction. --- src/cc65/codegen.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 6cd8f5c43..48cf02319 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -2569,8 +2569,8 @@ void g_mul (unsigned flags, unsigned long val) if (flags & CF_CONST) { /* Deal with negative values if it's signed multiplication */ - int Negation = (flags & CF_UNSIGNED) == 0 && (signed long)val < 0; - int p2 = PowerOf2 (Negation ? (unsigned long)-(signed long)val : val); + int Negation = (flags & CF_UNSIGNED) == 0 && (long)val < 0; + int p2 = PowerOf2 (Negation ? 0UL - val : val); /* Check if we can use shift instead of multiplication */ if (p2 == 0 || (p2 > 0 && IS_Get (&CodeSizeFactor) >= (Negation ? 100 : 0))) { @@ -2690,7 +2690,7 @@ void g_div (unsigned flags, unsigned long val) /* Deal with negative values as well as different sizes */ int Negation = (flags & CF_UNSIGNED) == 0 && (long)val < 0; - unsigned long NegatedVal = (unsigned long)-(long)val; + unsigned long NegatedVal = 0UL - val; int p2 = PowerOf2 (Negation ? NegatedVal : val); /* Generate a shift instead */ From 0536f4f9bdf9ce5bf7dd6d5dbfeaafda3c228f12 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 20 Aug 2020 07:52:27 +0800 Subject: [PATCH 0418/2710] Minor fixes on constant expression checking and comments. --- src/cc65/expr.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 84d709eb9..12a0c0b57 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -557,7 +557,7 @@ static void FunctionCall (ExprDesc* Expr) ** For fastcall functions we do also need to place a copy of the ** pointer on stack, since we cannot use a/x. */ - PtrOnStack = IsFastcall || !ED_IsConst (Expr); + PtrOnStack = IsFastcall || !ED_IsConstAddr (Expr); if (PtrOnStack) { /* Not a global or local variable, or a fastcall function. Load @@ -1083,12 +1083,13 @@ static void ArrayRef (ExprDesc* Expr) ED_FinalizeRValLoad (&Subscript); } - /* Check if the subscript is constant absolute value */ + /* Make the address of the array element from the base and subscript */ if (ED_IsConstAbs (&Subscript) && ED_CodeRangeIsEmpty (&Subscript)) { - /* The array subscript is a numeric constant. If we had pushed the - ** array base address onto the stack before, we can remove this value, - ** since we can generate expression+offset. + /* The array subscript is a constant. Since we can have the element + ** address directly as base+offset, we can remove the array address + ** push onto the stack before if loading subscript doesn't tamper that + ** address in the primary. */ if (!ConstBaseAddr) { RemoveCode (&Mark2); @@ -1127,7 +1128,7 @@ static void ArrayRef (ExprDesc* Expr) } else { - /* Scale the rhs value according to the element type */ + /* Scale the lhs value according to the element type */ g_scale (TypeOf (tptr1), CheckedSizeOf (ElementType)); /* Add the subscript. Since arrays are indexed by integers, @@ -1247,13 +1248,13 @@ static void ArrayRef (ExprDesc* Expr) } } - /* The pointer is an rvalue in the primary */ + /* The address of the element is an rvalue in the primary */ ED_FinalizeRValLoad (Expr); } - /* The result is usually an lvalue expression of element type referenced in - ** the primary, unless it's an array which is a rare case. We can just + /* The final result is usually an lvalue expression of element type + ** referenced in the primary, unless it is once again an array. We can just ** assume the usual case first, and change it later if necessary. */ ED_IndExpr (Expr); From f289ea6c148341fc4d09fa46a55435668901c8a0 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 22 Aug 2020 11:10:17 +0800 Subject: [PATCH 0419/2710] Avoided generating unnecessary true-case labels in logic AND/OR. --- src/cc65/expr.c | 44 +++++++++++++++++++------------------------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index b27a1c6fc..416d383d0 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3184,7 +3184,7 @@ static void hieOrPP (ExprDesc *Expr) -static int hieAnd (ExprDesc* Expr, unsigned TrueLab, int* UsedTrueLab) +static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) /* Process "exp && exp". This should only be called within hieOr. ** Return true if logic AND does occur. */ @@ -3275,14 +3275,17 @@ static int hieAnd (ExprDesc* Expr, unsigned TrueLab, int* UsedTrueLab) /* Last expression */ if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { if (HasFalseJump || HasTrueJump) { - /* In either case we need the true label anyways */ - HasTrueJump = 1; + if (*TrueLabAllocated == 0) { + /* Get a label that we will use for true expressions */ + *TrueLab = GetLocalLabel (); + *TrueLabAllocated = 1; + } if (!ED_IsConstAbs (&Expr2)) { /* Will branch to true and fall to false */ - g_truejump (CF_NONE, TrueLab); + g_truejump (CF_NONE, *TrueLab); } else { /* Will jump away */ - g_jump (TrueLab); + g_jump (*TrueLab); } /* The result is an rvalue in primary */ ED_FinalizeRValLoad (Expr); @@ -3303,11 +3306,6 @@ static int hieAnd (ExprDesc* Expr, unsigned TrueLab, int* UsedTrueLab) Expr->Type = type_bool; } - /* Tell our caller that we're used the true label */ - if (HasTrueJump) { - *UsedTrueLab = 1; - } - /* Tell our caller that we're evaluating a boolean */ return 1; } @@ -3325,20 +3323,13 @@ static void hieOr (ExprDesc *Expr) unsigned TrueLab; /* Jump to this label if true */ unsigned DoneLab; int HasTrueJump = 0; - int HasNewTrueJump; CodeMark Start; - /* Get a label that we will use for true expressions */ - TrueLab = GetLocalLabel (); - /* Call the next level parser */ GetCodePos (&Start); - AndOp = hieAnd (Expr, TrueLab, &HasNewTrueJump); + AndOp = hieAnd (Expr, &TrueLab, &HasTrueJump); if ((Flags & E_EVAL_UNEVAL) == E_EVAL_UNEVAL) { RemoveCode (&Start); - } else { - /* Remember the jump */ - HasTrueJump = HasNewTrueJump; } /* Any boolean or's? */ @@ -3361,8 +3352,11 @@ static void hieOr (ExprDesc *Expr) /* Get first expr */ LoadExpr (CF_FORCECHAR, Expr); - /* Remember that the jump is used */ - HasTrueJump = 1; + if (HasTrueJump == 0) { + /* Get a label that we will use for true expressions */ + TrueLab = GetLocalLabel(); + HasTrueJump = 1; + } /* Jump to TrueLab if true */ g_truejump (CF_NONE, TrueLab); @@ -3385,12 +3379,9 @@ static void hieOr (ExprDesc *Expr) /* Get rhs subexpression */ GetCodePos (&Start); - AndOp = hieAnd (&Expr2, TrueLab, &HasNewTrueJump); + AndOp = hieAnd (&Expr2, &TrueLab, &HasTrueJump); if ((Flags & E_EVAL_UNEVAL) == E_EVAL_UNEVAL) { RemoveCode (&Start); - } else { - /* Remember the jump */ - HasTrueJump = HasTrueJump || HasNewTrueJump; } /* Check type */ @@ -3405,7 +3396,10 @@ static void hieOr (ExprDesc *Expr) ED_RequireTest (&Expr2); LoadExpr (CF_FORCECHAR, &Expr2); - HasTrueJump = 1; + if (HasTrueJump == 0) { + TrueLab = GetLocalLabel(); + HasTrueJump = 1; + } g_truejump (CF_NONE, TrueLab); } } else if (Expr2.IVal != 0) { From 0486d28abc155c32253b5fab0a00e5e35f81e053 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 07:52:58 +0800 Subject: [PATCH 0420/2710] Fixed Issue #327. --- src/cc65/typeconv.c | 4 ++-- test/{todo => val}/bug327.c | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename test/{todo => val}/bug327.c (100%) diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 7e2787529..c9163eb51 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -124,7 +124,7 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) LoadExpr (CF_NONE, Expr); /* Emit typecast code */ - g_typecast (TypeOf (NewType), TypeOf (OldType) | CF_FORCECHAR); + g_typecast (TypeOf (NewType), TypeOf (OldType)); /* Value is now in primary and an rvalue */ ED_FinalizeRValLoad (Expr); @@ -175,7 +175,7 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) LoadExpr (CF_NONE, Expr); /* Emit typecast code. */ - g_typecast (TypeOf (NewType), TypeOf (OldType) | CF_FORCECHAR); + g_typecast (TypeOf (NewType), TypeOf (OldType)); /* Value is now an rvalue in the primary */ ED_FinalizeRValLoad (Expr); diff --git a/test/todo/bug327.c b/test/val/bug327.c similarity index 100% rename from test/todo/bug327.c rename to test/val/bug327.c From 23621f3299f213117e0b14358ea3bf66d69b980b Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sat, 22 Aug 2020 10:48:25 +0200 Subject: [PATCH 0421/2710] Add test case for #1209 Change err/ tests to use cl65 and .prg instead of cc65 and .s since this test only fails at the link stage. --- test/err/Makefile | 8 ++--- test/err/bug1209-ind-goto-rev.c | 53 +++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 test/err/bug1209-ind-goto-rev.c diff --git a/test/err/Makefile b/test/err/Makefile index 1273bbb2c..6fa53a1db 100644 --- a/test/err/Makefile +++ b/test/err/Makefile @@ -23,23 +23,23 @@ ifdef QUIET NULLERR = 2>$(NULLDEV) endif -CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) +CL65 := $(if $(wildcard ../../bin/cl65*),..$S..$Sbin$Scl65,cl65) WORKDIR = ../../testwrk/err .PHONY: all clean SOURCES := $(wildcard *.c) -TESTS = $(patsubst %.c,$(WORKDIR)/%.s,$(SOURCES)) +TESTS = $(patsubst %.c,$(WORKDIR)/%.prg,$(SOURCES)) all: $(TESTS) $(WORKDIR): $(call MKDIR,$(WORKDIR)) -$(WORKDIR)/%.s: %.c | $(WORKDIR) +$(WORKDIR)/%.prg: %.c | $(WORKDIR) $(if $(QUIET),echo err/$*.s) - $(NOT) $(CC65) -o $@ $< $(NULLERR) + $(NOT) $(CL65) -o $@ $< $(NULLERR) clean: @$(call RMDIR,$(WORKDIR)) diff --git a/test/err/bug1209-ind-goto-rev.c b/test/err/bug1209-ind-goto-rev.c new file mode 100644 index 000000000..39d8639bd --- /dev/null +++ b/test/err/bug1209-ind-goto-rev.c @@ -0,0 +1,53 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of indirect goto with the label before the goto. + https://github.com/cc65/cc65/issues/1209 + This should compile and should be moved to tests/val/ when the bug is fixed. +*/ + +#include <stdio.h> +#include <stdlib.h> + +/* When operating correctly, this returns 0. */ +int f (void) +{ + static void *x[1]; + /* Define the label before referencing it with indirect label syntax. */ + L: if (x[0] != 0) return 0; + x[0] = &&L; + goto *x[0]; +} + +static unsigned char failures = 0; + +int main (void) +{ + if (f () != 0) failures++; + + if (failures == 0) { + printf ("PASS\n"); + } else { + printf ("FAIL: %d failures\n", failures); + } + + return failures; +} From 911a79796dded8777953d8da63b98d04a3117b37 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 06:27:11 +0800 Subject: [PATCH 0422/2710] Fixed checks and diagnostics on type-casting. --- src/cc65/typeconv.c | 92 ++++++++++++++++++++++++++++----------------- 1 file changed, 57 insertions(+), 35 deletions(-) diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index c9163eb51..3af092d42 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -207,27 +207,30 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) printf ("\n"); PrintRawType (stdout, NewType); #endif + /* First, do some type checking */ int HasWarning = 0; int HasError = 0; const char* Msg = 0; const Type* OldType = Expr->Type; - /* First, do some type checking */ - if (IsTypeVoid (NewType) || IsTypeVoid (Expr->Type)) { - /* If one of the sides are of type void, output a more apropriate - ** error message. - */ - Error ("Illegal type"); + /* If one of the sides is of type void, it is an error */ + if (IsTypeVoid (NewType) || IsTypeVoid (OldType)) { + HasError = 1; } - /* If Expr is a function, convert it to pointer to function */ - if (IsTypeFunc (Expr->Type)) { - Expr->Type = PointerTo (Expr->Type); + /* If both types are strictly compatible, no conversion is needed */ + if (TypeCmp (NewType, OldType) >= TC_STRICT_COMPATIBLE) { + /* We're already done */ + return; } - /* If both types are equal, no conversion is needed */ - if (TypeCmp (Expr->Type, NewType) >= TC_EQUAL) { + /* If Expr is an array or a function, convert it to a pointer */ + Expr->Type = PtrConversion (Expr->Type); + + /* If we have changed the type, check again for strictly compatibility */ + if (Expr->Type != OldType && + TypeCmp (NewType, Expr->Type) >= TC_STRICT_COMPATIBLE) { /* We're already done */ return; } @@ -237,10 +240,6 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) /* Handle conversions to int type */ if (IsClassPtr (Expr->Type)) { - /* Pointer -> int conversion. Convert array to pointer */ - if (IsTypeArray (Expr->Type)) { - Expr->Type = ArrayToPtr (Expr->Type); - } Warning ("Converting pointer to integer without a cast"); } else if (!IsClassInt (Expr->Type) && !IsClassFloat (Expr->Type)) { HasError = 1; @@ -254,11 +253,6 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) /* Handle conversions to pointer type */ if (IsClassPtr (Expr->Type)) { - /* Convert array to pointer */ - if (IsTypeArray (Expr->Type)) { - Expr->Type = ArrayToPtr (Expr->Type); - } - /* Pointer to pointer assignment is valid, if: ** - both point to the same types, or ** - the rhs pointer is a void pointer, or @@ -271,11 +265,15 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) case TC_INCOMPATIBLE: HasWarning = 1; Msg = "Incompatible pointer assignment to '%s' from '%s'"; + /* Use the pointer type in the diagnostic */ + OldType = Expr->Type; break; case TC_QUAL_DIFF: HasWarning = 1; Msg = "Pointer assignment to '%s' from '%s' discards qualifiers"; + /* Use the pointer type in the diagnostic */ + OldType = Expr->Type; break; default: @@ -309,8 +307,21 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) TypeCompatibilityDiagnostic (NewType, OldType, 0, Msg); } - /* Do the actual conversion */ - DoConversion (Expr, NewType); + /* Both types must be complete */ + if (!IsIncompleteESUType (NewType) && !IsIncompleteESUType (Expr->Type)) { + /* Do the actual conversion */ + DoConversion (Expr, NewType); + } else { + /* We should have already generated error elsewhere so that we + ** could just silently fail here to avoid excess errors, but to + ** be safe, we must ensure that we do have errors. + */ + if (IsIncompleteESUType (NewType)) { + Error ("Conversion to incomplete type '%s'", GetFullTypeName (NewType)); + } else { + Error ("Conversion from incomplete type '%s'", GetFullTypeName (Expr->Type)); + } + } } } @@ -333,19 +344,30 @@ void TypeCast (ExprDesc* Expr) /* Read the expression we have to cast */ hie10 (Expr); - /* Only allow casts to arithmetic or pointer types, or just changing the - ** qualifiers. - */ - if (TypeCmp (NewType, Expr->Type) >= TC_QUAL_DIFF) { - /* The expression has always the new type */ - ReplaceType (Expr, NewType); - } else if (IsCastType (NewType)) { - /* Convert functions and arrays to "pointer to" object */ - Expr->Type = PtrConversion (Expr->Type); - /* Convert the value */ - DoConversion (Expr, NewType); + /* Only allow casts to arithmetic, pointer or void types */ + if (IsCastType (NewType)) { + if (!IsIncompleteESUType (NewType)) { + /* Convert functions and arrays to "pointer to" object */ + Expr->Type = PtrConversion (Expr->Type); + + if (TypeCmp (NewType, Expr->Type) >= TC_QUAL_DIFF) { + /* If the new type only differs in qualifiers, just use it to + ** replace the old one. + */ + ReplaceType (Expr, NewType); + } else if (IsCastType (Expr->Type)) { + /* Convert the value. The rsult has always the new type */ + DoConversion (Expr, NewType); + } else { + TypeCompatibilityDiagnostic (NewType, Expr->Type, 1, + "Cast to incompatible type '%s' from '%s'"); + } + } else { + Error ("Cast to incomplete type '%s'", + GetFullTypeName (NewType)); + } } else { - Error ("Arithmetic or pointer type expected but '%s' is used", - GetFullTypeName (NewType)); + Error ("Arithmetic or pointer type expected but %s is used", + GetBasicTypeName (NewType)); } } From 63fa9a5a429385fceba1d97f8dfdbf92accb21fd Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 22 Aug 2020 01:30:52 +0800 Subject: [PATCH 0423/2710] Fixed usage of "lvalue-cast" in _scanf implementation. --- libsrc/common/_scanf.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/common/_scanf.c b/libsrc/common/_scanf.c index c18f1e289..ac89e3cb3 100644 --- a/libsrc/common/_scanf.c +++ b/libsrc/common/_scanf.c @@ -183,7 +183,7 @@ static void PushBack (void) asm ("jsr pushax"); /* Copy D into the zero-page. */ - (const struct scanfdata*) __AX__ = D_; + __AX__ = (unsigned) D_; asm ("sta ptr1"); asm ("stx ptr1+1"); @@ -272,7 +272,7 @@ static void __fastcall__ Error (unsigned char /* Code */) /* Does a longjmp using the given code */ { asm ("pha"); - (char*) __AX__ = JumpBuf; + __AX__ = (unsigned) JumpBuf; asm ("jsr pushax"); asm ("pla"); asm ("ldx #>$0000"); @@ -389,7 +389,7 @@ static void AssignInt (void) if (NoAssign == false) { /* Get the next argument pointer */ - (void*) __AX__ = va_arg (ap, void*); + __AX__ = (unsigned) va_arg (ap, void*); /* Put the argument pointer into the zero-page. */ asm ("sta ptr1"); @@ -468,7 +468,7 @@ static char GetFormat (void) /* Pick up the next character from the format string. */ { /* return (F = *format++); */ - (const char*) __AX__ = format; + __AX__ = (unsigned) format; asm ("sta regsave"); asm ("stx regsave+1"); ++format; From d1995fc81aee6047a05418f89d4ee57a73fcb09c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 06:27:11 +0800 Subject: [PATCH 0424/2710] Fixed rvalue-ness of cast results. --- src/cc65/typeconv.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 3af092d42..0f67db107 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -370,4 +370,7 @@ void TypeCast (ExprDesc* Expr) Error ("Arithmetic or pointer type expected but %s is used", GetBasicTypeName (NewType)); } + + /* The result is always an rvalue */ + ED_MarkExprAsRVal (Expr); } From c3a6b399456937093eda9994f19b7f722731528d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 20 Aug 2020 07:56:11 +0800 Subject: [PATCH 0425/2710] Made struct assignment less hackish. --- src/cc65/assignment.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 0151a9000..6acab3fe8 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -95,10 +95,13 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) /* Store it into the location referred in the primary */ Store (LExpr, stype); + /* Value is in primary as an rvalue */ + ED_FinalizeRValLoad (LExpr); + } else { - /* The only way this can happen is in chained assignments */ - if (!ED_IsLocPrimary (RExpr)) { + /* The rhs cannot happen to be loaded in the primary as it is too big */ + if (!ED_IsLocExpr (RExpr)) { ED_AddrExpr (RExpr); LoadExpr (CF_NONE, RExpr); } @@ -112,16 +115,19 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) /* Call the memcpy function */ g_call (CF_FIXARGC, Func_memcpy, 4); + /* The result is an rvalue referenced in the primary */ + ED_FinalizeRValLoad (LExpr); + /* Restore the indirection level of lhs */ ED_IndExpr (LExpr); - - /* Clear the tested flag set during loading. This is not neccessary - ** currently (and probably ever) as a struct/union cannot be converted - ** to a boolean in C, but there is no harm to be future-proof. - */ - ED_MarkAsUntested (LExpr); } + /* Clear the tested flag set during loading. This is not neccessary + ** currently (and probably ever) as a struct/union cannot be converted + ** to a boolean in C, but there is no harm to be future-proof. + */ + ED_MarkAsUntested (LExpr); + return 1; } @@ -247,6 +253,9 @@ void Assignment (ExprDesc* Expr) /* Restore the expression type */ Expr->Type = ltype; + /* Value is in primary as an rvalue */ + ED_FinalizeRValLoad (Expr); + } else { /* Get the address on stack if needed */ @@ -264,8 +273,8 @@ void Assignment (ExprDesc* Expr) /* Generate a store instruction */ Store (Expr, 0); - } + /* Value is in primary as an rvalue */ + ED_FinalizeRValLoad (Expr); - /* Value might be still in primary and not an lvalue */ - ED_FinalizeRValLoad (Expr); + } } From 4b7cd491e3631e7e827f7d416ef38d17ac5c341f Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Mon, 24 Aug 2020 16:33:50 +0200 Subject: [PATCH 0426/2710] Move #1209 test from err/ to misc/ misc/ is the correct place for tests that should compile but do not. Revert err/Makefile changes from #1210. --- test/err/Makefile | 8 ++++---- test/misc/Makefile | 6 ++++++ test/{err => misc}/bug1209-ind-goto-rev.c | 0 3 files changed, 10 insertions(+), 4 deletions(-) rename test/{err => misc}/bug1209-ind-goto-rev.c (100%) diff --git a/test/err/Makefile b/test/err/Makefile index 6fa53a1db..1273bbb2c 100644 --- a/test/err/Makefile +++ b/test/err/Makefile @@ -23,23 +23,23 @@ ifdef QUIET NULLERR = 2>$(NULLDEV) endif -CL65 := $(if $(wildcard ../../bin/cl65*),..$S..$Sbin$Scl65,cl65) +CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) WORKDIR = ../../testwrk/err .PHONY: all clean SOURCES := $(wildcard *.c) -TESTS = $(patsubst %.c,$(WORKDIR)/%.prg,$(SOURCES)) +TESTS = $(patsubst %.c,$(WORKDIR)/%.s,$(SOURCES)) all: $(TESTS) $(WORKDIR): $(call MKDIR,$(WORKDIR)) -$(WORKDIR)/%.prg: %.c | $(WORKDIR) +$(WORKDIR)/%.s: %.c | $(WORKDIR) $(if $(QUIET),echo err/$*.s) - $(NOT) $(CL65) -o $@ $< $(NULLERR) + $(NOT) $(CC65) -o $@ $< $(NULLERR) clean: @$(call RMDIR,$(WORKDIR)) diff --git a/test/misc/Makefile b/test/misc/Makefile index b21384b68..80cbcdf9e 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -75,6 +75,12 @@ $(WORKDIR)/bug760.$1.$2.prg: bug760.c | $(WORKDIR) $(if $(QUIET),echo misc/bug760.$1.$2.prg) $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) +# should compile, but gives an error +$(WORKDIR)/bug1209-ind-goto-rev.$1.$2.prg: bug1209-ind-goto-rev.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." + $(if $(QUIET),echo misc/bug1209-ind-goto-rev.$1.$2.prg) + $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # should compile, but gives an error $(WORKDIR)/pptest2.$1.$2.prg: pptest2.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." diff --git a/test/err/bug1209-ind-goto-rev.c b/test/misc/bug1209-ind-goto-rev.c similarity index 100% rename from test/err/bug1209-ind-goto-rev.c rename to test/misc/bug1209-ind-goto-rev.c From d38e5858f01f67e3ad096135312de8a9e7814a74 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Mon, 24 Aug 2020 10:01:58 +0200 Subject: [PATCH 0427/2710] Add tests for #1211 CL_MoveRefs: Add CHECK (E->JumpTo != NULL) to make failure clearer. --- src/cc65/codelab.c | 1 + test/err/bug1211-ice-move-refs-1.c | 52 ++++++++++++++++++++++++++++++ test/err/bug1211-ice-move-refs-2.c | 51 +++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+) create mode 100644 test/err/bug1211-ice-move-refs-1.c create mode 100644 test/err/bug1211-ice-move-refs-2.c diff --git a/src/cc65/codelab.c b/src/cc65/codelab.c index f36520835..ff26645dc 100644 --- a/src/cc65/codelab.c +++ b/src/cc65/codelab.c @@ -112,6 +112,7 @@ void CL_MoveRefs (CodeLabel* OldLabel, CodeLabel* NewLabel) CodeEntry* E = CL_GetRef (OldLabel, Count); /* Change the reference to the new label */ + CHECK (E->JumpTo != NULL); CHECK (E->JumpTo == OldLabel); CL_AddRef (NewLabel, E); diff --git a/test/err/bug1211-ice-move-refs-1.c b/test/err/bug1211-ice-move-refs-1.c new file mode 100644 index 000000000..f28d1fcbc --- /dev/null +++ b/test/err/bug1211-ice-move-refs-1.c @@ -0,0 +1,52 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Test of indirect goto with label merge ICE. + https://github.com/cc65/cc65/issues/1211 + This should compile and should be moved to tests/val/ when the bug is fixed. +*/ + +#include <stdio.h> + +/* When operating correctly, f(0) = 31 and f(1) = 41. */ +int f (int x) +{ + static const void *const labels[] = {&&L0, &&L1}; + goto *labels[x]; +L0: if (labels[0] != labels[1]) return 31; + else return 13; +L1: return 41; +} + +static unsigned char failures = 0; + +int main (void) +{ + if (f (0) != 31) failures++; + + if (failures == 0) { + printf ("PASS\n"); + } else { + printf ("FAIL\n"); + } + + return failures; +} diff --git a/test/err/bug1211-ice-move-refs-2.c b/test/err/bug1211-ice-move-refs-2.c new file mode 100644 index 000000000..504433f45 --- /dev/null +++ b/test/err/bug1211-ice-move-refs-2.c @@ -0,0 +1,51 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Test of indirect goto with label merge ICE. + https://github.com/cc65/cc65/issues/1211 + This should compile and should be moved to tests/val/ when the bug is fixed. +*/ + +#include <stdio.h> + +/* When operating correctly, this returns 0. */ +int f (void) +{ + static const void *const x[2] = {&&L0, &&L1}; + goto *x[0]; +L0: +L1: return 0; +} + +static unsigned char failures = 0; + +int main (void) +{ + if (f () != 0) failures++; + + if (failures == 0) { + printf ("PASS\n"); + } else { + printf ("FAIL\n"); + } + + return failures; +} From 344aea06693130a41f348a56f3e85337b15bb96a Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sun, 23 Aug 2020 21:50:54 +0200 Subject: [PATCH 0428/2710] Add additional test cases for #1209 These test cases don't use dynamic labels. https://github.com/cc65/cc65/issues/1209#issuecomment-678738971 Also update the original test case for consistency: * Change failure message to just "FAIL", as there is only one failure * Outdent label definitions * Clarify description --- test/misc/Makefile | 12 +++++++ test/misc/bug1209-ind-goto-rev-2.c | 54 ++++++++++++++++++++++++++++++ test/misc/bug1209-ind-goto-rev-3.c | 52 ++++++++++++++++++++++++++++ test/misc/bug1209-ind-goto-rev.c | 6 ++-- 4 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 test/misc/bug1209-ind-goto-rev-2.c create mode 100644 test/misc/bug1209-ind-goto-rev-3.c diff --git a/test/misc/Makefile b/test/misc/Makefile index 80cbcdf9e..b28fc4d06 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -81,6 +81,18 @@ $(WORKDIR)/bug1209-ind-goto-rev.$1.$2.prg: bug1209-ind-goto-rev.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1209-ind-goto-rev.$1.$2.prg) $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) +# should compile, but gives an error +$(WORKDIR)/bug1209-ind-goto-rev-2.$1.$2.prg: bug1209-ind-goto-rev-2.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." + $(if $(QUIET),echo misc/bug1209-ind-goto-rev-2.$1.$2.prg) + $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + +# should compile, but gives an error +$(WORKDIR)/bug1209-ind-goto-rev-3.$1.$2.prg: bug1209-ind-goto-rev-3.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." + $(if $(QUIET),echo misc/bug1209-ind-goto-rev-3.$1.$2.prg) + $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # should compile, but gives an error $(WORKDIR)/pptest2.$1.$2.prg: pptest2.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." diff --git a/test/misc/bug1209-ind-goto-rev-2.c b/test/misc/bug1209-ind-goto-rev-2.c new file mode 100644 index 000000000..8918e5878 --- /dev/null +++ b/test/misc/bug1209-ind-goto-rev-2.c @@ -0,0 +1,54 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Test of indirect goto without dynamic labels and order label def, label ref, goto. + https://github.com/cc65/cc65/issues/1209 + This should compile and should be moved to tests/val/ when the bug is fixed. +*/ + +#include <stdio.h> +#include <stdlib.h> + +/* When operating correctly, this returns 0. */ +static unsigned char y = 0; +int f (void) { +L: if (y) return 0; + { + static const void *const x[1] = {&&L}; + y = 1; + goto *x[0]; + } +} + +static unsigned char failures = 0; + +int main (void) +{ + if (f () != 0) failures++; + + if (failures == 0) { + printf ("PASS\n"); + } else { + printf ("FAIL\n"); + } + + return failures; +} diff --git a/test/misc/bug1209-ind-goto-rev-3.c b/test/misc/bug1209-ind-goto-rev-3.c new file mode 100644 index 000000000..4c3268c9a --- /dev/null +++ b/test/misc/bug1209-ind-goto-rev-3.c @@ -0,0 +1,52 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Test of indirect goto without dynamic labels and order label ref, label def, goto. + https://github.com/cc65/cc65/issues/1209 + This should compile and should be moved to tests/val/ when the bug is fixed. +*/ + +#include <stdio.h> +#include <stdlib.h> + +/* When operating correctly, this returns 0. */ +static unsigned char y = 0; +int f (void) { + static const void *const x[1] = {&&L}; +L: if (y) return 0; + y = 1; + goto *x[0]; +} + +static unsigned char failures = 0; + +int main (void) +{ + if (f () != 0) failures++; + + if (failures == 0) { + printf ("PASS\n"); + } else { + printf ("FAIL\n"); + } + + return failures; +} diff --git a/test/misc/bug1209-ind-goto-rev.c b/test/misc/bug1209-ind-goto-rev.c index 39d8639bd..ab8213a30 100644 --- a/test/misc/bug1209-ind-goto-rev.c +++ b/test/misc/bug1209-ind-goto-rev.c @@ -19,7 +19,7 @@ */ /* - Tests of indirect goto with the label before the goto. + Test of indirect goto with dynamic labels and order label def, label ref, goto. https://github.com/cc65/cc65/issues/1209 This should compile and should be moved to tests/val/ when the bug is fixed. */ @@ -32,7 +32,7 @@ int f (void) { static void *x[1]; /* Define the label before referencing it with indirect label syntax. */ - L: if (x[0] != 0) return 0; +L: if (x[0] != 0) return 0; x[0] = &&L; goto *x[0]; } @@ -46,7 +46,7 @@ int main (void) if (failures == 0) { printf ("PASS\n"); } else { - printf ("FAIL: %d failures\n", failures); + printf ("FAIL\n"); } return failures; From d68925c6a8708e0bf2d4ca825bac8ded2f0af903 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 25 Aug 2020 22:34:25 +0800 Subject: [PATCH 0429/2710] Bug #1113 was fixed long ago. --- test/{misc => err}/bug1113.c | 0 test/misc/Makefile | 7 ------- 2 files changed, 7 deletions(-) rename test/{misc => err}/bug1113.c (100%) diff --git a/test/misc/bug1113.c b/test/err/bug1113.c similarity index 100% rename from test/misc/bug1113.c rename to test/err/bug1113.c diff --git a/test/misc/Makefile b/test/misc/Makefile index b28fc4d06..f4beec452 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -99,13 +99,6 @@ $(WORKDIR)/pptest2.$1.$2.prg: pptest2.c | $(WORKDIR) $(if $(QUIET),echo misc/pptest2.$1.$2.prg) $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) -# this should fail to compile, because there are errors in the code -# instead, the compiler crashes -$(WORKDIR)/bug1113.$1.$2.prg: bug1113.c | $(WORKDIR) - @echo "FIXME: " $$@ "compiler crashes but should give an error." - $(if $(QUIET),echo misc/bug1113.$1.$2.prg) - $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(if $(QUIET),echo misc/endless.$1.$2.prg) From b6a4715a38932c928db839bd511bb957c74788ed Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 26 Aug 2020 08:45:01 +0800 Subject: [PATCH 0430/2710] Added test/ref/pr1220 for testing constant AND/OR code generation. --- test/ref/pr1220.c | 344 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 344 insertions(+) create mode 100644 test/ref/pr1220.c diff --git a/test/ref/pr1220.c b/test/ref/pr1220.c new file mode 100644 index 000000000..c594b5ac2 --- /dev/null +++ b/test/ref/pr1220.c @@ -0,0 +1,344 @@ +/* PR #1220 - test constant AND/OR */ + +#include <stdio.h> + +#define CONTEXT_A(x) do {\ + s = 0, flags = 0, t = (x),\ + printf("%3d %2X: %d\n", s, flags, t);\ + } while (0) + +#define CONTEXT_B(x) do {\ + s = 0, flags = 0,\ + (x ? printf("%3d %2X: 1\n", s, flags) : printf("%3d %2X: 0\n", s, flags));\ + } while (0) + +int s, t; +void *p; +unsigned flags; + +int f(x) +{ + flags |= 1U << s; + ++s; + return x; +} + +#define _A f(a) +#define _B f(b) +#define _C f(c) +#define _D f(d) +#define _T (f(0), -1) +#define _F (f(-1), 0) + +void f0() +{ + printf("f0()\n"); + + CONTEXT_A(_T && _T && _T); + CONTEXT_A(_F && _F && _F); + + CONTEXT_A(_T || _T || _T); + CONTEXT_A(_F || _F || _F); + + CONTEXT_A(_T && _T || _T && _T); + CONTEXT_A(_F && _F || _F && _F); + CONTEXT_A(_T && _F || _T && _F); + CONTEXT_A(_F && _T || _F && _T); + + CONTEXT_A((_T && _T) || (_T && _T)); + CONTEXT_A((_F && _F) || (_F && _F)); + CONTEXT_A((_T && _F) || (_T && _F)); + CONTEXT_A((_F && _T) || (_F && _T)); + + CONTEXT_A((_T || _T) && (_T || _T)); + CONTEXT_A((_F || _F) && (_F || _F)); + CONTEXT_A((_T || _F) && (_T || _F)); + CONTEXT_A((_F || _T) && (_F || _T)); + + printf("\n"); +} + +void f1(int a, int b, int c) +{ + printf("f1(%d, %d, %d)\n", a, b, c); + + CONTEXT_A(_A && _B && _C); + + CONTEXT_A(_T && _B && _C); + CONTEXT_A(_A && _T && _C); + CONTEXT_A(_A && _B && _T); + + CONTEXT_A(_F && _B && _C); + CONTEXT_A(_A && _F && _C); + CONTEXT_A(_A && _B && _F); + + CONTEXT_A(_T && _T && _C); + CONTEXT_A(_A && _T && _T); + CONTEXT_A(_T && _B && _T); + + printf("\n"); +} + +void f2(int a, int b, int c) +{ + printf("f2(%d, %d, %d)\n", a, b, c); + + CONTEXT_A(_A || _B || _C); + + CONTEXT_A(_T || _B || _C); + CONTEXT_A(_A || _T || _C); + CONTEXT_A(_A || _B || _T); + + CONTEXT_A(_F || _B || _C); + CONTEXT_A(_A || _F || _C); + CONTEXT_A(_A || _B || _F); + + CONTEXT_A(_F || _F || _C); + CONTEXT_A(_A || _F || _F); + CONTEXT_A(_F || _B || _F); + + printf("\n"); +} + +void f3(int a, int b, int c, int d) +{ + printf("f3(%d, %d, %d, %d)\n", a, b, c, d); + + CONTEXT_A(_A && _B || _C && _D); + CONTEXT_A(_T && _T || _C && _D); + CONTEXT_A(_A && _B || _T && _T); + + CONTEXT_A(_T && _B || _C && _D); + CONTEXT_A(_A && _T || _C && _D); + CONTEXT_A(_A && _B || _T && _D); + CONTEXT_A(_A && _B || _C && _T); + + CONTEXT_A(_F && _B || _C && _D); + CONTEXT_A(_A && _F || _C && _D); + CONTEXT_A(_A && _B || _F && _D); + CONTEXT_A(_A && _B || _C && _F); + + printf("\n"); +} + +void f4(int a, int b, int c, int d) +{ + printf("f4(%d, %d, %d, %d)\n", a, b, c, d); + + CONTEXT_A((_A && _B) || (_C && _D)); + CONTEXT_A((_T && _T) || (_C && _D)); + CONTEXT_A((_A && _B) || (_T && _T)); + + CONTEXT_A((_T && _B) || (_C && _D)); + CONTEXT_A((_A && _T) || (_C && _D)); + CONTEXT_A((_A && _B) || (_T && _D)); + CONTEXT_A((_A && _B) || (_C && _T)); + + CONTEXT_A((_F && _B) || (_C && _D)); + CONTEXT_A((_A && _F) || (_C && _D)); + CONTEXT_A((_A && _B) || (_F && _D)); + CONTEXT_A((_A && _B) || (_C && _F)); + + printf("\n"); +} + +void f5(int a, int b, int c, int d) +{ + printf("f5(%d, %d, %d, %d)\n", a, b, c, d); + + CONTEXT_A((_A || _B) && (_C || _D)); + CONTEXT_A((_F || _F) && (_C || _D)); + CONTEXT_A((_A || _B) && (_F || _F)); + + CONTEXT_A((_T || _B) && (_C || _D)); + CONTEXT_A((_A || _T) && (_C || _D)); + CONTEXT_A((_A || _B) && (_T || _D)); + CONTEXT_A((_A || _B) && (_C || _T)); + + CONTEXT_A((_F || _B) && (_C || _D)); + CONTEXT_A((_A || _F) && (_C || _D)); + CONTEXT_A((_A || _B) && (_F || _D)); + CONTEXT_A((_A || _B) && (_C || _F)); + + printf("\n"); +} + +void f0_B() +{ + printf("f0()\n"); + + CONTEXT_B(_T && _T && _T); + CONTEXT_B(_F && _F && _F); + + CONTEXT_B(_T || _T || _T); + CONTEXT_B(_F || _F || _F); + + CONTEXT_B(_T && _T || _T && _T); + CONTEXT_B(_F && _F || _F && _F); + CONTEXT_B(_T && _F || _T && _F); + CONTEXT_B(_F && _T || _F && _T); + + CONTEXT_B((_T && _T) || (_T && _T)); + CONTEXT_B((_F && _F) || (_F && _F)); + CONTEXT_B((_T && _F) || (_T && _F)); + CONTEXT_B((_F && _T) || (_F && _T)); + + CONTEXT_B((_T || _T) && (_T || _T)); + CONTEXT_B((_F || _F) && (_F || _F)); + CONTEXT_B((_T || _F) && (_T || _F)); + CONTEXT_B((_F || _T) && (_F || _T)); + + printf("\n"); +} + +void f1_B(int a, int b, int c) +{ + printf("f1(%d, %d, %d)\n", a, b, c); + + CONTEXT_B(_A && _B && _C); + + CONTEXT_B(_T && _B && _C); + CONTEXT_B(_A && _T && _C); + CONTEXT_B(_A && _B && _T); + + CONTEXT_B(_F && _B && _C); + CONTEXT_B(_A && _F && _C); + CONTEXT_B(_A && _B && _F); + + CONTEXT_B(_T && _T && _C); + CONTEXT_B(_A && _T && _T); + CONTEXT_B(_T && _B && _T); + + printf("\n"); +} + +void f2_B(int a, int b, int c) +{ + printf("f2(%d, %d, %d)\n", a, b, c); + + CONTEXT_B(_A || _B || _C); + + CONTEXT_B(_T || _B || _C); + CONTEXT_B(_A || _T || _C); + CONTEXT_B(_A || _B || _T); + + CONTEXT_B(_F || _B || _C); + CONTEXT_B(_A || _F || _C); + CONTEXT_B(_A || _B || _F); + + CONTEXT_B(_F || _F || _C); + CONTEXT_B(_A || _F || _F); + CONTEXT_B(_F || _B || _F); + + printf("\n"); +} + +void f3_B(int a, int b, int c, int d) +{ + printf("f3(%d, %d, %d, %d)\n", a, b, c, d); + + CONTEXT_B(_A && _B || _C && _D); + CONTEXT_B(_T && _T || _C && _D); + CONTEXT_B(_A && _B || _T && _T); + + CONTEXT_B(_T && _B || _C && _D); + CONTEXT_B(_A && _T || _C && _D); + CONTEXT_B(_A && _B || _T && _D); + CONTEXT_B(_A && _B || _C && _T); + + CONTEXT_B(_F && _B || _C && _D); + CONTEXT_B(_A && _F || _C && _D); + CONTEXT_B(_A && _B || _F && _D); + CONTEXT_B(_A && _B || _C && _F); + + printf("\n"); +} + +void f4_B(int a, int b, int c, int d) +{ + printf("f4(%d, %d, %d, %d)\n", a, b, c, d); + + CONTEXT_B((_A && _B) || (_C && _D)); + CONTEXT_B((_T && _T) || (_C && _D)); + CONTEXT_B((_A && _B) || (_T && _T)); + + CONTEXT_B((_T && _B) || (_C && _D)); + CONTEXT_B((_A && _T) || (_C && _D)); + CONTEXT_B((_A && _B) || (_T && _D)); + CONTEXT_B((_A && _B) || (_C && _T)); + + CONTEXT_B((_F && _B) || (_C && _D)); + CONTEXT_B((_A && _F) || (_C && _D)); + CONTEXT_B((_A && _B) || (_F && _D)); + CONTEXT_B((_A && _B) || (_C && _F)); + + printf("\n"); +} + +void f5_B(int a, int b, int c, int d) +{ + printf("f5(%d, %d, %d, %d)\n", a, b, c, d); + + CONTEXT_B((_A || _B) && (_C || _D)); + CONTEXT_B((_F || _F) && (_C || _D)); + CONTEXT_B((_A || _B) && (_F || _F)); + + CONTEXT_B((_T || _B) && (_C || _D)); + CONTEXT_B((_A || _T) && (_C || _D)); + CONTEXT_B((_A || _B) && (_T || _D)); + CONTEXT_B((_A || _B) && (_C || _T)); + + CONTEXT_B((_F || _B) && (_C || _D)); + CONTEXT_B((_A || _F) && (_C || _D)); + CONTEXT_B((_A || _B) && (_F || _D)); + CONTEXT_B((_A || _B) && (_C || _F)); + + printf("\n"); +} + +int main() +{ + f0(); + + f1(0, 0, 0); + f2(0, 0, 0); + f3(0, 0, 0, 0); + f4(0, 0, 0, 0); + f5(0, 0, 0, 0); + + f1(1, 1, 1); + f2(1, 1, 1); + f3(1, 1, 1, 1); + f4(1, 1, 1, 1); + f5(1, 1, 1, 1); + + f3(1, 0, 1, 0); + f4(1, 0, 1, 0); + f5(1, 0, 1, 0); + f3(0, 1, 0, 1); + f4(0, 1, 0, 1); + f5(0, 1, 0, 1); + + f0_B(); + + f1_B(0, 0, 0); + f2_B(0, 0, 0); + f3_B(0, 0, 0, 0); + f4_B(0, 0, 0, 0); + f5_B(0, 0, 0, 0); + + f1_B(1, 1, 1); + f2_B(1, 1, 1); + f3_B(1, 1, 1, 1); + f4_B(1, 1, 1, 1); + f5_B(1, 1, 1, 1); + + f3_B(1, 0, 1, 0); + f4_B(1, 0, 1, 0); + f5_B(1, 0, 1, 0); + f3_B(0, 1, 0, 1); + f4_B(0, 1, 0, 1); + f5_B(0, 1, 0, 1); + + return 0; +} From c216b3534b0a419b8fcad55e0c94dca2c7705d0c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 26 Aug 2020 13:36:43 +0200 Subject: [PATCH 0431/2710] fix compilation, fixes issue #1184 --- testcode/lib/scanf-test.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/testcode/lib/scanf-test.c b/testcode/lib/scanf-test.c index 9fce01b77..f17b62294 100644 --- a/testcode/lib/scanf-test.c +++ b/testcode/lib/scanf-test.c @@ -14,9 +14,7 @@ /* Define USE_STDIO, when you want to use the stdio functions. ** Do not define it, when you want to use the conio functions. */ -/* #define USE_STDIO -*/ #include <stdio.h> #include <string.h> @@ -35,22 +33,23 @@ #define ARRAYSIZE(a) (sizeof (a) / sizeof (a)[0]) +typedef enum { + INT, + CHAR +} TYPE; + +typedef union { + int nvalue; + const char *svalue; +} VALUE; + static const struct { const char *input, *format; int rvalue; - enum TYPE { - INT, - CHAR - } type1; - union { - int nvalue; - const char *svalue; - } v1; - enum TYPE type2; - union { - int nvalue; - const char *svalue; - } v2; + TYPE type1; + VALUE v1; + TYPE type2; + VALUE v2; } test_data[] = { /* Input sequences for character specifiers must be less than 80 characters ** long. These format strings are allowwed a maximum of two assignment From e5a1755133b679c2cd67de9c64f0a05b7aa83b8b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 26 Aug 2020 15:08:17 +0200 Subject: [PATCH 0432/2710] added some ifdefs to make testcode compile for apple2 and atari targets --- testcode/lib/dir-test.c | 16 +++++++++++++--- testcode/lib/heaptest.c | 7 ++++--- testcode/lib/mouse-test.c | 2 +- testcode/lib/strdup-test.c | 6 ++++-- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/testcode/lib/dir-test.c b/testcode/lib/dir-test.c index 9102fc74d..61e42247e 100644 --- a/testcode/lib/dir-test.c +++ b/testcode/lib/dir-test.c @@ -19,9 +19,13 @@ #include <string.h> #include <errno.h> #include <dirent.h> -#include <cbm.h> #include <conio.h> +#if defined(__CBM__) +#include <cbm.h> +#elif defined(__APPLE2__) +#include <apple2.h> +#endif int main(void) { @@ -51,9 +55,13 @@ int main(void) printf("contents of \"%s\":\n", name); while ((E = readdir (D)) != 0) { printf ("dirent.d_name[] : \"%s\"\n", E->d_name); +#if !defined(__ATARI__) printf ("dirent.d_blocks : %10u\n", E->d_blocks); +#endif printf ("dirent.d_type : %10d\n", E->d_type); +#if !defined(__APPLE2__) && !defined(__ATARI__) printf ("telldir() : %10lu\n", telldir (D)); +#endif printf ("---\n"); if (!go) { switch (cgetc ()) { @@ -63,14 +71,16 @@ int main(void) case 'q': goto done; - +#if !defined(__APPLE2__) && !defined(__ATARI__) case 'r': seekdir (D, E->d_off); break; - +#endif +#if !defined(__ATARI__) case 's': rewinddir (D); break; +#endif } } diff --git a/testcode/lib/heaptest.c b/testcode/lib/heaptest.c index d776e2f0c..560694bee 100644 --- a/testcode/lib/heaptest.c +++ b/testcode/lib/heaptest.c @@ -214,10 +214,10 @@ int main (void) /* Show info at start */ ShowInfo (); - +#if !defined(__APPLE2__) /* Remember the time */ T = clock (); - +#endif /* Do the tests */ Test1 (); Test2 (); @@ -226,10 +226,11 @@ int main (void) Test5 (); Test6 (); +#if !defined(__APPLE2__) /* Calculate the time and print it */ T = clock () - T; printf ("Time needed: %lu ticks\n", T); - +#endif /* Done */ return EXIT_SUCCESS; } diff --git a/testcode/lib/mouse-test.c b/testcode/lib/mouse-test.c index ea8311d19..64482b937 100644 --- a/testcode/lib/mouse-test.c +++ b/testcode/lib/mouse-test.c @@ -190,7 +190,7 @@ int main (void) #endif /* Set dark-on-light colors. Clear the screen. */ -#ifdef __CBM__ +#if defined(__CBM__) && !defined(__VIC20__) (void) bordercolor (COLOR_GRAY2); (void) bgcolor (COLOR_WHITE); (void) textcolor (COLOR_GRAY1); diff --git a/testcode/lib/strdup-test.c b/testcode/lib/strdup-test.c index e30841c3e..2fcc9816f 100644 --- a/testcode/lib/strdup-test.c +++ b/testcode/lib/strdup-test.c @@ -84,19 +84,21 @@ int main (void) /* Show info at start */ ShowInfo (); - +#if !defined(__APPLE2__) /* Remember the time */ T = clock (); - +#endif /* Do the tests */ FillArray (); ShowInfo (); FreeArray (); ShowInfo (); +#if !defined(__APPLE2__) /* Calculate the time and print it */ T = clock () - T; printf ("Time needed: %lu ticks\n", T); +#endif /* Done */ return EXIT_SUCCESS; From 83cc1151121d775cef368fffa3c15bf4b13bbf03 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 26 Aug 2020 15:51:20 +0200 Subject: [PATCH 0433/2710] re-add define for pad bits hw address, which was accidently removed in some refactor commit --- include/gamate.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/gamate.h b/include/gamate.h index 0af21623d..8b9790e39 100644 --- a/include/gamate.h +++ b/include/gamate.h @@ -170,6 +170,8 @@ /* No support for dynamically loadable drivers */ #define DYN_DRV 0 +#define JOY_DATA 0x4400 /* hw register to read the pad bits from */ + /* Masks for joy_read */ #define JOY_UP_MASK 0x01 #define JOY_DOWN_MASK 0x02 From 4c912a0fbe3ff74be793c09d7eee9ae92fe9bbad Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 26 Aug 2020 15:59:52 +0200 Subject: [PATCH 0434/2710] make gamate testcode compile again --- testcode/lib/gamate/ctest.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/testcode/lib/gamate/ctest.c b/testcode/lib/gamate/ctest.c index 793770cee..bff3f5986 100644 --- a/testcode/lib/gamate/ctest.c +++ b/testcode/lib/gamate/ctest.c @@ -25,19 +25,19 @@ int main(int argc, char *argv[]) gotoxy(0,2);cprintf("%04x %02x %02x %02x", n, x, y, *((unsigned char*)JOY_DATA)); switch((*((unsigned char*)JOY_DATA))) { - case 0xff ^ JOY_DATA_UP: + case 0xff ^ JOY_UP_MASK: ++y; if (y == 0xc8) y = 0; break; - case 0xff ^ JOY_DATA_DOWN: + case 0xff ^ JOY_DOWN_MASK: --y; if (y == 0xff) y = 0xc7; break; - case 0xff ^ JOY_DATA_LEFT: + case 0xff ^ JOY_LEFT_MASK: ++x; break; - case 0xff ^ JOY_DATA_RIGHT: + case 0xff ^ JOY_RIGHT_MASK: --x; break; - case 0xff ^ JOY_DATA_FIRE_A: + case 0xff ^ JOY_BTN_A_MASK: break; } From c658acbf850e32508ea0e14f0f62d675a009c7d9 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Wed, 26 Aug 2020 20:37:28 +0200 Subject: [PATCH 0435/2710] Avoid cl65 in tests. cl65 creates intermediate files based on the source file name in the source file directory. Calling cl65 in parallel with the same source file causes those intermediate files to get overwritten. Fixes #1080 --- test/asm/Makefile | 27 ++++++++++++-------------- test/dasm/Makefile | 11 ++++------- test/misc/Makefile | 48 ++++++++++++++++++++++------------------------ test/ref/Makefile | 19 +++++++++--------- test/todo/Makefile | 11 ++++++----- test/val/Makefile | 16 ++++++---------- 6 files changed, 61 insertions(+), 71 deletions(-) diff --git a/test/asm/Makefile b/test/asm/Makefile index 94a925376..b157bb672 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -8,23 +8,22 @@ ifdef CMD_EXE EXE = .exe MKDIR = mkdir $(subst /,\,$1) RMDIR = -rmdir /s /q $(subst /,\,$1) - DEL = del /f $(subst /,\,$1) else EXE = MKDIR = mkdir -p $1 RMDIR = $(RM) -r $1 - DEL = $(RM) $1 endif ifdef QUIET .SILENT: endif -CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) +CA65 := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) +LD65 := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) WORKDIR = ../../testwrk/asm -DIFF = $(WORKDIR)/isequal$(EXE) +ISEQUAL = $(WORKDIR)/isequal$(EXE) CC = gcc CFLAGS = -O2 @@ -44,29 +43,28 @@ all: $(OPCODE_BINS) $(CPUDETECT_BINS) $(WORKDIR): $(call MKDIR,$(WORKDIR)) -$(DIFF): ../isequal.c | $(WORKDIR) +$(ISEQUAL): ../isequal.c | $(WORKDIR) $(CC) $(CFLAGS) -o $@ $< define OPCODE_template -$(WORKDIR)/$1-opcodes.bin: $1-opcodes.s $(DIFF) +$(WORKDIR)/$1-opcodes.bin: $1-opcodes.s $(ISEQUAL) $(if $(QUIET),echo asm/$1-opcodes.bin) - $(CL65) --cpu $1 -t none -l $(WORKDIR)/$1-opcodes.lst -o $$@ $$< - $(DIFF) $$@ $1-opcodes.ref + $(CA65) --cpu $1 -t none -l $(WORKDIR)/$1-opcodes.lst -o $(WORKDIR)/$1-opcodes.o $$< + $(LD65) -t none -o $$@ $(WORKDIR)/$1-opcodes.o none.lib + $(ISEQUAL) $$@ $1-opcodes.ref endef # OPCODE_template $(foreach cpu,$(OPCODE_CPUS),$(eval $(call OPCODE_template,$(cpu)))) -# cpudetect.o is written by multiple rules -.NOTPARALLEL: - define CPUDETECT_template -$(WORKDIR)/$1-cpudetect.bin: cpudetect.s $(DIFF) +$(WORKDIR)/$1-cpudetect.bin: cpudetect.s $(ISEQUAL) $(if $(QUIET),echo asm/$1-cpudetect.bin) - $(CL65) --cpu $1 -t none -l $(WORKDIR)/$1-cpudetect.lst -o $$@ $$< - $(DIFF) $$@ $1-cpudetect.ref + $(CA65) --cpu $1 -t none -l $(WORKDIR)/$1-cpudetect.lst -o $(WORKDIR)/$1-cpudetect.o $$< + $(LD65) -t none -o $$@ $(WORKDIR)/$1-cpudetect.o none.lib + $(ISEQUAL) $$@ $1-cpudetect.ref endef # CPUDETECT_template @@ -74,4 +72,3 @@ $(foreach cpu,$(CPUDETECT_CPUS),$(eval $(call CPUDETECT_template,$(cpu)))) clean: @$(call RMDIR,$(WORKDIR)) - @$(call DEL,$(OPCODE_REFS:.ref=.o) cpudetect.o) diff --git a/test/dasm/Makefile b/test/dasm/Makefile index faa6b7fa0..dc0b57c76 100644 --- a/test/dasm/Makefile +++ b/test/dasm/Makefile @@ -8,12 +8,10 @@ ifdef CMD_EXE EXE = .exe MKDIR = mkdir $(subst /,\,$1) RMDIR = -rmdir /s /q $(subst /,\,$1) - DEL = del /f $(subst /,\,$1) else EXE = MKDIR = mkdir -p $1 RMDIR = $(RM) -r $1 - DEL = $(RM) $1 endif ifdef QUIET @@ -25,7 +23,7 @@ DA65 := $(if $(wildcard ../../bin/da65*),../../bin/da65,da65) WORKDIR = ../../testwrk/dasm -DIFF = $(WORKDIR)/isequal$(EXE) +ISEQUAL = $(WORKDIR)/isequal$(EXE) CC = gcc CFLAGS = -O2 @@ -44,7 +42,7 @@ all: $(BINS) $(WORKDIR): $(call MKDIR,$(WORKDIR)) -$(DIFF): ../isequal.c | $(WORKDIR) +$(ISEQUAL): ../isequal.c | $(WORKDIR) $(CC) $(CFLAGS) -o $@ $< define DISASS_template @@ -55,10 +53,10 @@ $(WORKDIR)/$1-disass.bin: $1-disass.s | $(WORKDIR) $(WORKDIR)/$1-reass.s: $(WORKDIR)/$1-disass.bin $(DA65) --cpu $1 $(START) -o $$@ $$< -$(WORKDIR)/$1-reass.bin: $(WORKDIR)/$1-reass.s $(DIFF) +$(WORKDIR)/$1-reass.bin: $(WORKDIR)/$1-reass.s $(ISEQUAL) $(if $(QUIET),echo dasm/$1-reass.bin) $(CL65) --cpu $1 -t none $(START) -o $$@ $$< - $(DIFF) $$@ $(WORKDIR)/$1-disass.bin + $(ISEQUAL) $$@ $(WORKDIR)/$1-disass.bin endef # DISASS_template @@ -66,4 +64,3 @@ $(foreach cpu,$(CPUS),$(eval $(call DISASS_template,$(cpu)))) clean: @$(call RMDIR,$(WORKDIR)) - @$(call DEL,$(SOURCES:.s=.o)) diff --git a/test/misc/Makefile b/test/misc/Makefile index f4beec452..993a46bd4 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -11,7 +11,6 @@ ifdef CMD_EXE NULLDEV = nul: MKDIR = mkdir $(subst /,\,$1) RMDIR = -rmdir /s /q $(subst /,\,$1) - DEL = del /f $(subst /,\,$1) else S = / NOT = ! @@ -19,7 +18,6 @@ else NULLDEV = /dev/null MKDIR = mkdir -p $1 RMDIR = $(RM) -r $1 - DEL = $(RM) $1 endif ifdef QUIET @@ -30,14 +28,16 @@ endif SIM65FLAGS = -x 200000000 -CL65 := $(if $(wildcard ../../bin/cl65*),..$S..$Sbin$Scl65,cl65) +CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) +CA65 := $(if $(wildcard ../../bin/ca65*),..$S..$Sbin$Sca65,ca65) +LD65 := $(if $(wildcard ../../bin/ld65*),..$S..$Sbin$Sld65,ld65) SIM65 := $(if $(wildcard ../../bin/sim65*),..$S..$Sbin$Ssim65,sim65) WORKDIR = ..$S..$Stestwrk$Smisc OPTIONS = g O Os Osi Osir Osr Oi Oir Or -DIFF = $(WORKDIR)$Sisequal$(EXE) +ISEQUAL = $(WORKDIR)$Sisequal$(EXE) CC = gcc CFLAGS = -O2 @@ -50,15 +50,10 @@ TESTS += $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).65c02. all: $(TESTS) -# The same input file is processed with different cl65 args, -# but cl65 uses the input file name to make the temp file name, -# and they stomp each other. -.NOTPARALLEL: - $(WORKDIR): $(call MKDIR,$(WORKDIR)) -$(DIFF): ../isequal.c | $(WORKDIR) +$(ISEQUAL): ../isequal.c | $(WORKDIR) $(CC) $(CFLAGS) -o $@ $< define PRG_template @@ -67,61 +62,65 @@ define PRG_template $(WORKDIR)/bug250.$1.$2.prg: bug250.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." $(if $(QUIET),echo misc/bug250.$1.$2.prg) - $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # should compile, but gives an error $(WORKDIR)/bug760.$1.$2.prg: bug760.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." $(if $(QUIET),echo misc/bug760.$1.$2.prg) - $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # should compile, but gives an error $(WORKDIR)/bug1209-ind-goto-rev.$1.$2.prg: bug1209-ind-goto-rev.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." $(if $(QUIET),echo misc/bug1209-ind-goto-rev.$1.$2.prg) - $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # should compile, but gives an error $(WORKDIR)/bug1209-ind-goto-rev-2.$1.$2.prg: bug1209-ind-goto-rev-2.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." $(if $(QUIET),echo misc/bug1209-ind-goto-rev-2.$1.$2.prg) - $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # should compile, but gives an error $(WORKDIR)/bug1209-ind-goto-rev-3.$1.$2.prg: bug1209-ind-goto-rev-3.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." $(if $(QUIET),echo misc/bug1209-ind-goto-rev-3.$1.$2.prg) - $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # should compile, but gives an error $(WORKDIR)/pptest2.$1.$2.prg: pptest2.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." $(if $(QUIET),echo misc/pptest2.$1.$2.prg) - $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(if $(QUIET),echo misc/endless.$1.$2.prg) - $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(CC65) -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) # these need reference data that can't be generated by a host-compiled program, # in a useful way -$(WORKDIR)/limits.$1.$2.prg: limits.c $(DIFF) | $(WORKDIR) +$(WORKDIR)/limits.$1.$2.prg: limits.c $(ISEQUAL) | $(WORKDIR) $(if $(QUIET),echo misc/limits.$1.$2.prg) - $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(CC65) -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/limits.$1.$2.out - $(DIFF) $(WORKDIR)/limits.$1.$2.out limits.ref + $(ISEQUAL) $(WORKDIR)/limits.$1.$2.out limits.ref -$(WORKDIR)/goto.$1.$2.prg: goto.c $(DIFF) | $(WORKDIR) +$(WORKDIR)/goto.$1.$2.prg: goto.c $(ISEQUAL) | $(WORKDIR) $(if $(QUIET),echo misc/goto.$1.$2.prg) - $(CL65) -t sim$2 -$1 -o $$@ $$< 2>$(WORKDIR)/goto.$1.$2.out - $(DIFF) $(WORKDIR)/goto.$1.$2.out goto.ref + $(CC65) -t sim$2 -$1 -o $$@ $$< 2>$(WORKDIR)/goto.$1.$2.out + $(ISEQUAL) $(WORKDIR)/goto.$1.$2.out goto.ref # the rest are tests that fail currently for one reason or another $(WORKDIR)/sitest.$1.$2.prg: sitest.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." - $(NOT) $(CL65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) endef # PRG_template @@ -131,4 +130,3 @@ $(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option),65c02))) clean: @$(call RMDIR,$(WORKDIR)) - @$(call DEL,$(SOURCES:.c=.o)) diff --git a/test/ref/Makefile b/test/ref/Makefile index f88821f64..5faf9fb19 100644 --- a/test/ref/Makefile +++ b/test/ref/Makefile @@ -11,14 +11,12 @@ ifdef CMD_EXE NULLDEV = nul: MKDIR = mkdir $(subst /,\,$1) RMDIR = -rmdir /s /q $(subst /,\,$1) - DEL = del /f $(subst /,\,$1) else S = / EXE = NULLDEV = /dev/null MKDIR = mkdir -p $1 RMDIR = $(RM) -r $1 - DEL = $(RM) $1 endif ifdef QUIET @@ -28,14 +26,16 @@ endif SIM65FLAGS = -x 200000000 -CL65 := $(if $(wildcard ../../bin/cl65*),..$S..$Sbin$Scl65,cl65) +CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) +CA65 := $(if $(wildcard ../../bin/ca65*),..$S..$Sbin$Sca65,ca65) +LD65 := $(if $(wildcard ../../bin/ld65*),..$S..$Sbin$Sld65,ld65) SIM65 := $(if $(wildcard ../../bin/sim65*),..$S..$Sbin$Ssim65,sim65) WORKDIR = ..$S..$Stestwrk$Sref OPTIONS = g O Os Osi Osir Osr Oi Oir Or -DIFF = $(WORKDIR)$Sisequal$(EXE) +ISEQUAL = $(WORKDIR)$Sisequal$(EXE) CC = gcc CFLAGS = -O2 -Wall -W -Wextra -funsigned-char -fwrapv -fno-strict-overflow @@ -57,7 +57,7 @@ $(WORKDIR)/%.ref: %.c | $(WORKDIR) $(CC) $(CFLAGS) -o $(WORKDIR)/$*.host $< $(NULLERR) $(WORKDIR)$S$*.host > $@ -$(DIFF): ../isequal.c | $(WORKDIR) +$(ISEQUAL): ../isequal.c | $(WORKDIR) $(CC) $(CFLAGS) -o $@ $< # "yaccdbg.c" includes "yacc.c". @@ -68,11 +68,13 @@ $(WORKDIR)/yaccdbg.%.prg: yacc.c define PRG_template -$(WORKDIR)/%.$1.$2.prg: %.c $(WORKDIR)/%.ref $(DIFF) +$(WORKDIR)/%.$1.$2.prg: %.c $(WORKDIR)/%.ref $(ISEQUAL) $(if $(QUIET),echo ref/$$*.$1.$2.prg) - $(CL65) -t sim$2 $$(CC65FLAGS) -$1 -o $$@ $$< $(NULLERR) + $(CC65) -t sim$2 $$(CC65FLAGS) -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/$$*.$1.$2.out - $(DIFF) $(WORKDIR)/$$*.$1.$2.out $(WORKDIR)/$$*.ref + $(ISEQUAL) $(WORKDIR)/$$*.$1.$2.out $(WORKDIR)/$$*.ref endef # PRG_template @@ -81,4 +83,3 @@ $(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option),65c02))) clean: @$(call RMDIR,$(WORKDIR)) - @$(call DEL,$(SOURCES:.c=.o)) diff --git a/test/todo/Makefile b/test/todo/Makefile index ab5eb598c..17561f8f4 100644 --- a/test/todo/Makefile +++ b/test/todo/Makefile @@ -10,14 +10,12 @@ ifdef CMD_EXE NULLDEV = nul: MKDIR = mkdir $(subst /,\,$1) RMDIR = -rmdir /s /q $(subst /,\,$1) - DEL = del /f $(subst /,\,$1) else S = / NOT = ! NULLDEV = /dev/null MKDIR = mkdir -p $1 RMDIR = $(RM) -r $1 - DEL = $(RM) $1 endif ifdef QUIET @@ -28,7 +26,9 @@ endif SIM65FLAGS = -x 200000000 -CL65 := $(if $(wildcard ../../bin/cl65*),..$S..$Sbin$Scl65,cl65) +CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) +CA65 := $(if $(wildcard ../../bin/ca65*),..$S..$Sbin$Sca65,ca65) +LD65 := $(if $(wildcard ../../bin/ld65*),..$S..$Sbin$Sld65,ld65) SIM65 := $(if $(wildcard ../../bin/sim65*),..$S..$Sbin$Ssim65,sim65) WORKDIR = ../../testwrk/val @@ -50,7 +50,9 @@ define PRG_template $(WORKDIR)/%.$1.$2.prg: %.c | $(WORKDIR) $(if $(QUIET),echo val/$$*.$1.$2.prg) - $(CL65) -t sim$2 $$(CC65FLAGS) -$1 -o $$@ $$< $(NULLERR) + $(CC65) -t sim$2 $$(CC65FLAGS) -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) endef # PRG_template @@ -60,4 +62,3 @@ $(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option),65c02))) clean: @$(call RMDIR,$(WORKDIR)) - @$(call DEL,$(SOURCES:.c=.o)) diff --git a/test/val/Makefile b/test/val/Makefile index be63cd8da..1a9fa9a45 100644 --- a/test/val/Makefile +++ b/test/val/Makefile @@ -9,13 +9,11 @@ ifdef CMD_EXE NULLDEV = nul: MKDIR = mkdir $(subst /,\,$1) RMDIR = -rmdir /s /q $(subst /,\,$1) - DEL = del /f $(subst /,\,$1) else S = / NULLDEV = /dev/null MKDIR = mkdir -p $1 RMDIR = $(RM) -r $1 - DEL = $(RM) $1 endif ifdef QUIET @@ -26,7 +24,9 @@ endif SIM65FLAGS = -x 5000000000 -CL65 := $(if $(wildcard ../../bin/cl65*),..$S..$Sbin$Scl65,cl65) +CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) +CA65 := $(if $(wildcard ../../bin/ca65*),..$S..$Sbin$Sca65,ca65) +LD65 := $(if $(wildcard ../../bin/ld65*),..$S..$Sbin$Sld65,ld65) SIM65 := $(if $(wildcard ../../bin/sim65*),..$S..$Sbin$Ssim65,sim65) WORKDIR = ../../testwrk/val @@ -41,11 +41,6 @@ TESTS += $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).65c02. all: $(TESTS) -# The same input file is processed with different cl65 args, -# but cl65 uses the input file name to make the temp file name, -# and they stomp each other. -.NOTPARALLEL: - $(WORKDIR): $(call MKDIR,$(WORKDIR)) @@ -53,7 +48,9 @@ define PRG_template $(WORKDIR)/%.$1.$2.prg: %.c | $(WORKDIR) $(if $(QUIET),echo val/$$*.$1.$2.prg) - $(CL65) -t sim$2 $$(CC65FLAGS) -$1 -o $$@ $$< $(NULLERR) + $(CC65) -t sim$2 $$(CC65FLAGS) -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) endef # PRG_template @@ -63,4 +60,3 @@ $(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option),65c02))) clean: @$(call RMDIR,$(WORKDIR)) - @$(call DEL,$(SOURCES:.c=.o)) From c6adf4364fe0ce299a9ef415c3653231045560ad Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 26 Aug 2020 20:53:45 +0200 Subject: [PATCH 0436/2710] make atari testcode compile again, added makefile --- testcode/lib/atari/Makefile | 32 ++++++++++++++++++++++++++++++++ testcode/lib/atari/multi.xex | Bin 157 -> 0 bytes testcode/lib/atari/scrcode.s | 5 +++++ testcode/lib/atari/sys.c | 2 ++ 4 files changed, 39 insertions(+) create mode 100644 testcode/lib/atari/Makefile delete mode 100644 testcode/lib/atari/multi.xex diff --git a/testcode/lib/atari/Makefile b/testcode/lib/atari/Makefile new file mode 100644 index 000000000..e9ec853b8 --- /dev/null +++ b/testcode/lib/atari/Makefile @@ -0,0 +1,32 @@ + +all: charmapping.xex defdev.xex displaylist.xex mem.xex multi.xex ostype.xex \ + scrcode.com sys.xex + +charmapping.xex: charmapping.c + cl65 -t atari -o charmapping.xex charmapping.c +defdev.xex: defdev.c + cl65 -t atari -o defdev.xex defdev.c +displaylist.xex: displaylist.c + cl65 -t atari -o displaylist.xex displaylist.c +mem.xex: mem.c ../getsp.s + cl65 -t atari -o mem.xex mem.c ../getsp.s +multi.xex: multi-xex.s multi-xex.cfg + cl65 -t atari -C multi-xex.cfg multi-xex.s -o multi.xex +ostype.xex: ostype.c + cl65 -t atari -o ostype.xex ostype.c +scrcode.com: scrcode.s + ca65 -t atari -o scrcode.o scrcode.s + ld65 -C atari-asm.cfg -o scrcode.com scrcode.o +sys.xex: sys.c + cl65 -t atari -o sys.xex sys.c + +clean: + $(RM) charmapping.xex + $(RM) defdev.xex + $(RM) displaylist.xex + $(RM) mem.xex + $(RM) multi.xex + $(RM) ostype.xex + $(RM) scrcode.o + $(RM) scrcode.com + $(RM) sys.xex diff --git a/testcode/lib/atari/multi.xex b/testcode/lib/atari/multi.xex deleted file mode 100644 index 7da39ad47af630bef4edab9f21e06b7162e98e88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmezWzkzKz+aiXQbLP4*uVkC+%DnRbTo2~Cp3Eyb=Q=U_ggx=ePfW?oOV<N}*^ihW zGc~XsVLHJi=EjiK#K7jkRsaTWylhO43~UTQppmMRqt8&TU!;@52;#$ln>%(0lQ&>8 UWCEI?$E4@Op!b03Arpfh0RH4B!2kdN diff --git a/testcode/lib/atari/scrcode.s b/testcode/lib/atari/scrcode.s index cd4290781..ba778579b 100644 --- a/testcode/lib/atari/scrcode.s +++ b/testcode/lib/atari/scrcode.s @@ -43,15 +43,20 @@ key: lda CH dispdata: scrcode "fooBa", 'r', $66, 3+4 disp_len = * - dispdata +.export __AUTOSTART__: absolute = 1 .segment "AUTOSTRT" .word $02E0 .word $02E1 .word __CODE_LOAD__+1 +.export __EXEHDR__: absolute = 1 .segment "EXEHDR" .word $FFFF + +.segment "MAINHDR" + .word __CODE_LOAD__ .word __BSS_LOAD__ - 1 diff --git a/testcode/lib/atari/sys.c b/testcode/lib/atari/sys.c index 9ec7aa631..59debd758 100644 --- a/testcode/lib/atari/sys.c +++ b/testcode/lib/atari/sys.c @@ -10,6 +10,8 @@ #include <6502.h> #include <conio.h> +#define IOCB (OS.iocb[0]) + static struct regs regs; static struct __iocb *iocb = &IOCB; /* use IOCB #0 */ From b0d3b19a6a1c1e56589f1453ccb99dcde63257e2 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Wed, 26 Aug 2020 20:58:44 +0200 Subject: [PATCH 0437/2710] The bug1209 test fails at link stage. --- test/misc/Makefile | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/test/misc/Makefile b/test/misc/Makefile index 993a46bd4..1f7a788ba 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -74,19 +74,25 @@ $(WORKDIR)/bug760.$1.$2.prg: bug760.c | $(WORKDIR) $(WORKDIR)/bug1209-ind-goto-rev.$1.$2.prg: bug1209-ind-goto-rev.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." $(if $(QUIET),echo misc/bug1209-ind-goto-rev.$1.$2.prg) - $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(CC65) -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(NOT) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) # should compile, but gives an error $(WORKDIR)/bug1209-ind-goto-rev-2.$1.$2.prg: bug1209-ind-goto-rev-2.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." $(if $(QUIET),echo misc/bug1209-ind-goto-rev-2.$1.$2.prg) - $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(CC65) -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(NOT) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) # should compile, but gives an error $(WORKDIR)/bug1209-ind-goto-rev-3.$1.$2.prg: bug1209-ind-goto-rev-3.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." $(if $(QUIET),echo misc/bug1209-ind-goto-rev-3.$1.$2.prg) - $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(CC65) -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(NOT) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) # should compile, but gives an error $(WORKDIR)/pptest2.$1.$2.prg: pptest2.c | $(WORKDIR) From 8649859bc544d9ebb1c4f8215f00cd303a23438b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 26 Aug 2020 21:28:19 +0200 Subject: [PATCH 0438/2710] added/updated Makefiles, preparing for CI (later) --- testcode/lib/accelerator/Makefile | 31 +++++++++++++++++++- testcode/lib/apple2/Makefile | 33 +++++++++++++++++++++- testcode/lib/atari/Makefile | 47 +++++++++++++++++++++++++------ testcode/lib/atari5200/Makefile | 36 +++++++++++++++++++++++ testcode/lib/gamate/Makefile | 41 +++++++++++++++++++++++---- testcode/lib/pce/Makefile | 29 +++++++++++++++++++ 6 files changed, 200 insertions(+), 17 deletions(-) create mode 100644 testcode/lib/atari5200/Makefile diff --git a/testcode/lib/accelerator/Makefile b/testcode/lib/accelerator/Makefile index 6b90a9556..f4f651535 100644 --- a/testcode/lib/accelerator/Makefile +++ b/testcode/lib/accelerator/Makefile @@ -1,4 +1,30 @@ -CL ?= cl65 +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) + CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) + CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) + LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) +endif all: c64-scpu-test.prg c128-scpu-test.prg c64dtv-test.prg \ c64-c128-test.prg c128-test.prg chameleon-test.prg \ @@ -27,3 +53,6 @@ c65-test.prg: c65-test.c turbomaster-test.prg: turbomaster-test.c $(CL) -t c64 turbomaster-test.c -o turbomaster-test.prg + +clean: + $(RM) *.prg diff --git a/testcode/lib/apple2/Makefile b/testcode/lib/apple2/Makefile index 9d551aa62..3ea2463f1 100644 --- a/testcode/lib/apple2/Makefile +++ b/testcode/lib/apple2/Makefile @@ -1,7 +1,33 @@ # For this one see https://applecommander.github.io/ AC ?= ac.jar -CL ?= cl65 +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) + CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) + CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) + LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) +endif all: hgr.dsk dhgr.dsk @@ -35,3 +61,8 @@ dhgr.dsk: dhgrshow dhgrshow: dhgrshow.c $(CL) -Oirs -t apple2enh --start-addr 0x4000 -m dhgrshow.map $^ + +clean: + $(RM) hgr.dsk dhgr.dsk + $(RM) hgrshow hgrshow.map + $(RM) hgrtest hgrtest.map diff --git a/testcode/lib/atari/Makefile b/testcode/lib/atari/Makefile index e9ec853b8..a34a5f2d9 100644 --- a/testcode/lib/atari/Makefile +++ b/testcode/lib/atari/Makefile @@ -1,24 +1,53 @@ +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) + CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) + CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) + LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) +endif + all: charmapping.xex defdev.xex displaylist.xex mem.xex multi.xex ostype.xex \ scrcode.com sys.xex charmapping.xex: charmapping.c - cl65 -t atari -o charmapping.xex charmapping.c + $(CL) -t atari -o charmapping.xex charmapping.c defdev.xex: defdev.c - cl65 -t atari -o defdev.xex defdev.c + $(CL) -t atari -o defdev.xex defdev.c displaylist.xex: displaylist.c - cl65 -t atari -o displaylist.xex displaylist.c + $(CL) -t atari -o displaylist.xex displaylist.c mem.xex: mem.c ../getsp.s - cl65 -t atari -o mem.xex mem.c ../getsp.s + $(CL) -t atari -o mem.xex mem.c ../getsp.s multi.xex: multi-xex.s multi-xex.cfg - cl65 -t atari -C multi-xex.cfg multi-xex.s -o multi.xex + $(CL) -t atari -C multi-xex.cfg multi-xex.s -o multi.xex ostype.xex: ostype.c - cl65 -t atari -o ostype.xex ostype.c + $(CL) -t atari -o ostype.xex ostype.c scrcode.com: scrcode.s - ca65 -t atari -o scrcode.o scrcode.s - ld65 -C atari-asm.cfg -o scrcode.com scrcode.o +# ca65 -t atari -o scrcode.o scrcode.s +# ld65 -C atari-asm.cfg -o scrcode.com scrcode.o + $(CL) -t atari -C atari-asm.cfg -o scrcode.com scrcode.s sys.xex: sys.c - cl65 -t atari -o sys.xex sys.c + $(CL) -t atari -o sys.xex sys.c clean: $(RM) charmapping.xex diff --git a/testcode/lib/atari5200/Makefile b/testcode/lib/atari5200/Makefile new file mode 100644 index 000000000..990ced689 --- /dev/null +++ b/testcode/lib/atari5200/Makefile @@ -0,0 +1,36 @@ + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) + CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) + CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) + LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) +endif + +all: hello + +hello: hello.c + $(CL) -t atari5200 -o hello hello.c + +clean: + $(RM) hello diff --git a/testcode/lib/gamate/Makefile b/testcode/lib/gamate/Makefile index 2cf98d189..d4f1b9673 100644 --- a/testcode/lib/gamate/Makefile +++ b/testcode/lib/gamate/Makefile @@ -1,14 +1,42 @@ +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) + CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) + CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) + LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) +endif + all: audiotest.bin lcdtest.bin ctest.bin audiotest.bin: audiotest.s - ../../../bin/cl65 -l audiotest.lst -t gamate -o audiotest.bin audiotest.s + $(CL) -l audiotest.lst -t gamate -o audiotest.bin audiotest.s lcdtest.bin: lcdtest.s - ../../../bin/cl65 -l lcdtest.lst -t gamate -o lcdtest.bin lcdtest.s + $(CL) -l lcdtest.lst -t gamate -o lcdtest.bin lcdtest.s ctest.bin: ctest.c - ../../../bin/cl65 -l ctest.lst -t gamate -o ctest.bin ctest.c + $(CL) -l ctest.lst -t gamate -o ctest.bin ctest.c nachtm.bin: nachtm.c - ../../../bin/cl65 -Os -l nachtm.lst -t gamate -o nachtm.bin nachtm.c + $(CL) -Os -l nachtm.lst -t gamate -o nachtm.bin nachtm.c gamate-fixcart nachtm.bin test1: lcdtest.bin @@ -21,5 +49,6 @@ testn: nachtm.bin cd ~/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart ~/Desktop/cc65/github/cc65/testcode/lib/gamate/nachtm.bin clean: - rm -f lcdtest.o audiotest.o ctest.o - rm -f lcdtest.bin audiotest.bin ctest.bin nachtm.bin + $(RM) lcdtest.o audiotest.o ctest.o + $(RM) lcdtest.bin audiotest.bin ctest.bin nachtm.bin + $(RM) audiotest.lst lcdtest.lst ctest.lst diff --git a/testcode/lib/pce/Makefile b/testcode/lib/pce/Makefile index a4a495c9a..0c41778cc 100644 --- a/testcode/lib/pce/Makefile +++ b/testcode/lib/pce/Makefile @@ -1,3 +1,32 @@ + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) + CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) + CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) + LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) +endif + .PHONY: all clean test # Size of cartridge to generate. From f5b1b69376f978223dfabe535f23a5ec03bb3dc2 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 06:27:11 +0800 Subject: [PATCH 0439/2710] Forbid struct/union fields of incomplete types. --- src/cc65/declare.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index ccd4e9004..6c1dbd751 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -911,8 +911,15 @@ static SymEntry* ParseUnionDecl (const char* Name) } } + /* Check for incomplete type */ + if (IsIncompleteESUType (Decl.Type)) { + Error ("Field '%s' has incomplete type '%s'", + Decl.Ident, + GetFullTypeName (Decl.Type)); + } + /* Handle sizes */ - FieldSize = CheckedSizeOf (Decl.Type); + FieldSize = SizeOf (Decl.Type); if (FieldSize > UnionSize) { UnionSize = FieldSize; } @@ -1095,6 +1102,13 @@ static SymEntry* ParseStructDecl (const char* Name) } } + /* Check for incomplete type */ + if (IsIncompleteESUType (Decl.Type)) { + Error ("Field '%s' has incomplete type '%s'", + Decl.Ident, + GetFullTypeName (Decl.Type)); + } + /* Add a field entry to the table */ if (FieldWidth > 0) { /* Full bytes have already been added to the StructSize, @@ -1119,7 +1133,7 @@ static SymEntry* ParseStructDecl (const char* Name) AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize); } if (!FlexibleMember) { - StructSize += CheckedSizeOf (Decl.Type); + StructSize += SizeOf (Decl.Type); } } From 1957dc7a5c36bab15fd2021ce52b5b7e4f2f7479 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 06:27:11 +0800 Subject: [PATCH 0440/2710] Disallowed arrays of incomplete types. Fixed diagnostics on incomplete local arrays. --- src/cc65/compile.c | 21 +++------------ src/cc65/declare.c | 67 ++++++++++++++++++++++++++++++++++++---------- src/cc65/locals.c | 18 ++++++++++--- 3 files changed, 72 insertions(+), 34 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 82dc7ec63..3296968f6 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -140,19 +140,10 @@ static void Parse (void) comma = 0; while (1) { - Declaration Decl; + Declaration Decl; /* Read the next declaration */ ParseDecl (&Spec, &Decl, DM_NEED_IDENT); - if (Decl.Ident[0] == '\0') { - NextToken (); - break; - } - - if ((Decl.StorageClass & SC_FICTITIOUS) == SC_FICTITIOUS) { - /* Failed parsing */ - goto SkipOneDecl; - } /* Check if we must reserve storage for the variable. We do this, ** @@ -163,8 +154,9 @@ static void Parse (void) ** ** This means that "extern int i;" will not get storage allocated. */ - if ((Decl.StorageClass & SC_FUNC) != SC_FUNC && - (Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { + if ((Decl.StorageClass & SC_FUNC) != SC_FUNC && + (Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF && + (Decl.StorageClass & SC_FICTITIOUS) != SC_FICTITIOUS) { if ((Spec.Flags & DS_DEF_STORAGE) != 0 || (Decl.StorageClass & (SC_EXTERN|SC_STATIC)) == SC_STATIC || ((Decl.StorageClass & SC_EXTERN) != 0 && @@ -296,7 +288,6 @@ static void Parse (void) } -SkipOneDecl: /* Check for end of declaration list */ if (CurTok.Tok == TOK_COMMA) { NextToken (); @@ -452,10 +443,6 @@ void Compile (const char* FileName) } Sym = GetSymType (GetElementType (Entry->Type)); - if (Size == 0 && Sym != 0 && SymIsDef (Sym)) { - /* Array of 0-size elements */ - Warning ("Array '%s[]' has 0-sized elements", Entry->Name); - } } /* For non-ESU types, Size != 0 */ diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 6c1dbd751..0bfbcedd2 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -457,6 +457,37 @@ static unsigned ParseOneStorageClass (void) +static void CheckArrayElementType (Type* DataType) +/* Check if data type consists of arrays of incomplete element types */ +{ + Type* T = DataType; + + while (T->C != T_END) { + if (IsTypeArray (T)) { + ++T; + if (IsIncompleteESUType (T)) { + /* We cannot have an array of incomplete elements */ + Error ("Array of incomplete element type '%s'", GetFullTypeName (T)); + } else if (SizeOf (T) == 0) { + /* If the array is multi-dimensional, try to get the true + ** element type. + */ + if (IsTypeArray (T)) { + continue; + } + /* We could support certain 0-size element types as an extension */ + if (!IsTypeVoid (T) || IS_Get (&Standard) != STD_CC65) { + Error ("Array of 0-size element type '%s'", GetFullTypeName (T)); + } + } + } else { + ++T; + } + } +} + + + static void ParseStorageClass (DeclSpec* D, unsigned DefStorage) /* Parse a storage class */ { @@ -956,16 +987,16 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { FieldTab = GetSymTab (); LeaveStructLevel (); - /* Empty union is not supported now */ - if (UnionSize == 0) { - Error ("Empty union type '%s' is not supported", Name); - } - /* Return a fictitious symbol if errors occurred during parsing */ if (PrevErrorCount != ErrorCount) { Flags |= SC_FICTITIOUS; } + /* Empty union is not supported now */ + if (UnionSize == 0) { + Error ("Empty union type '%s' is not supported", Name); + } + /* Make a real entry from the forward decl and return it */ return AddStructSym (Name, SC_UNION | SC_DEF | Flags, UnionSize, FieldTab); } @@ -1160,16 +1191,16 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { FieldTab = GetSymTab (); LeaveStructLevel (); - /* Empty struct is not supported now */ - if (StructSize == 0) { - Error ("Empty struct type '%s' is not supported", Name); - } - /* Return a fictitious symbol if errors occurred during parsing */ if (PrevErrorCount != ErrorCount) { Flags |= SC_FICTITIOUS; } + /* Empty struct is not supported now */ + if (StructSize == 0) { + Error ("Empty struct type '%s' is not supported", Name); + } + /* Make a real entry from the forward decl and return it */ return AddStructSym (Name, SC_STRUCT | SC_DEF | Flags, StructSize, FieldTab); } @@ -1922,6 +1953,9 @@ void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode) /* Do several fixes on qualifiers */ FixQualifiers (D->Type); + /* Check if the data type consists of any arrays of forbidden types */ + CheckArrayElementType (D->Type); + /* If we have a function, add a special storage class */ if (IsTypeFunc (D->Type)) { D->StorageClass |= SC_FUNC; @@ -1993,10 +2027,15 @@ void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode) Error ("Invalid size in declaration (0x%06X)", Size); } } + } - if (PrevErrorCount != ErrorCount) { - /* Don't give storage if the declaration is not parsed correctly */ - D->StorageClass |= SC_DECL | SC_FICTITIOUS; + if (PrevErrorCount != ErrorCount) { + /* Make the declaration fictitious if is is not parsed correctly */ + D->StorageClass |= SC_DECL | SC_FICTITIOUS; + + if (Mode == DM_NEED_IDENT && D->Ident[0] == '\0') { + /* Use a fictitious name for the identifier if it is missing */ + AnonName (D->Ident, "global"); } } } @@ -2242,7 +2281,7 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Get the array data */ Type* ElementType = GetElementType (T); - unsigned ElementSize = CheckedSizeOf (ElementType); + unsigned ElementSize = SizeOf (ElementType); long ElementCount = GetElementCount (T); /* Special handling for a character array initialized by a literal */ diff --git a/src/cc65/locals.c b/src/cc65/locals.c index a21a09e8e..4323943a1 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -172,7 +172,11 @@ static void ParseRegisterDecl (Declaration* Decl, int Reg) /* Cannot allocate a variable of zero size */ if (Size == 0) { - Error ("Variable '%s' has unknown size", Decl->Ident); + if (IsTypeArray (Decl->Type)) { + Error ("Array '%s' has unknown size", Decl->Ident); + } else { + Error ("Variable '%s' has unknown size", Decl->Ident); + } } } @@ -357,7 +361,11 @@ static void ParseAutoDecl (Declaration* Decl) /* Cannot allocate a variable of zero size */ if (Size == 0) { - Error ("Variable '%s' has unknown size", Decl->Ident); + if (IsTypeArray (Decl->Type)) { + Error ("Array '%s' has unknown size", Decl->Ident); + } else { + Error ("Variable '%s' has unknown size", Decl->Ident); + } } } @@ -411,7 +419,11 @@ static void ParseStaticDecl (Declaration* Decl) /* Cannot allocate a variable of zero size */ if (Size == 0) { - Error ("Variable '%s' has unknown size", Decl->Ident); + if (IsTypeArray (Decl->Type)) { + Error ("Array '%s' has unknown size", Decl->Ident); + } else { + Error ("Variable '%s' has unknown size", Decl->Ident); + } } } From 43cb092a68004768baa28cdb41831c1d2d1a52e7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 22 Aug 2020 05:56:33 +0800 Subject: [PATCH 0441/2710] Fixed CHECK failures on certain usage of incomplete enums. --- src/cc65/datatype.c | 14 +++++++++++--- src/cc65/loadexpr.c | 4 ++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index ad008cfd3..9efb142ee 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -686,7 +686,10 @@ const Type* GetUnderlyingType (const Type* Type) Internal ("Enum tag type error in GetUnderlyingTypeCode"); } - return ((SymEntry*)Type->A.P)->V.E.Type; + /* If incomplete enum type is used, just return its raw type */ + if (((SymEntry*)Type->A.P)->V.E.Type != 0) { + return ((SymEntry*)Type->A.P)->V.E.Type; + } } return Type; @@ -1246,9 +1249,14 @@ Type* IntPromotion (Type* T) ** to unsigned int. */ return IsSignUnsigned (T) ? type_uint : type_int; - } else { - /* Otherwise, the type is not smaller than int, so leave it alone. */ + } else if (!IsIncompleteESUType (T)) { + /* The type is a complete type not smaller than int, so leave it alone. */ return T; + } else { + /* Otherwise, this is an incomplete enum, and there is expceted to be an error already. + ** Assume int to avoid further errors. + */ + return type_int; } } diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index f3a1a6add..07f88acbc 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -142,6 +142,10 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) BitFieldFullWidthFlags |= CF_UNSIGNED; } } else if ((Flags & CF_TYPEMASK) == 0) { + /* If Expr is an incomplete ESY type, bail out */ + if (IsIncompleteESUType (Expr->Type)) { + return; + } Flags |= TypeOf (Expr->Type); } From 8d225c32b194f1bb3e2c1606ec55b41b3eca6c76 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 22 Aug 2020 05:57:12 +0800 Subject: [PATCH 0442/2710] Fixed checks on assignment to incomplete types. --- src/cc65/assignment.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 6acab3fe8..633083669 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -156,6 +156,11 @@ void Assignment (ExprDesc* Expr) Error ("Assignment to const"); } + /* Check for assignment to incomplete type */ + if (IsIncompleteESUType (ltype)) { + Error ("Assignment to incomplete type '%s'", GetFullTypeName (ltype)); + } + /* Skip the '=' token */ NextToken (); From bb9c2032224a9abd034f8fcb17699048ac351e00 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 07:53:28 +0800 Subject: [PATCH 0443/2710] Fixed integer promotion of unary operations. --- src/cc65/expr.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 12a0c0b57..9f7902284 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1856,8 +1856,8 @@ static void UnaryOp (ExprDesc* Expr) /* Value is not constant */ LoadExpr (CF_NONE, Expr); - /* Get the type of the expression */ - Flags = TypeOf (Expr->Type); + /* Adjust the type of the value */ + Flags = g_typeadjust (TypeOf (Expr->Type), TypeOf (type_int) | CF_CONST); /* Handle the operation */ switch (Tok) { @@ -1870,6 +1870,9 @@ static void UnaryOp (ExprDesc* Expr) /* The result is an rvalue in the primary */ ED_FinalizeRValLoad (Expr); } + + /* Adjust the type of the expression */ + Expr->Type = IntPromotion (Expr->Type); } From bf5384a7124de8b44847f57ae7e209e85de5cc4d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 26 Aug 2020 22:46:45 +0200 Subject: [PATCH 0444/2710] some more refactoring of Makefiles, preparing for CI --- testcode/assembler/Makefile | 37 ++++++++++++++++++++++ testcode/disasm/Makefile | 58 ++++++++++++++++++++++++++++++++++ testcode/disasm/sample-unix.mk | 28 ---------------- 3 files changed, 95 insertions(+), 28 deletions(-) create mode 100644 testcode/assembler/Makefile create mode 100644 testcode/disasm/Makefile delete mode 100644 testcode/disasm/sample-unix.mk diff --git a/testcode/assembler/Makefile b/testcode/assembler/Makefile new file mode 100644 index 000000000..6cb3fe1f2 --- /dev/null +++ b/testcode/assembler/Makefile @@ -0,0 +1,37 @@ + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) + CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) + CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) + LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) +endif + +all: paramcount.o + +paramcount.o: paramcount.s + $(AS) -o paramcount.o -l paramcount.lst paramcount.s + +clean: + $(RM) paramcount.o + $(RM) paramcount.lst diff --git a/testcode/disasm/Makefile b/testcode/disasm/Makefile new file mode 100644 index 000000000..05e5b8373 --- /dev/null +++ b/testcode/disasm/Makefile @@ -0,0 +1,58 @@ +# Sample makefile using a preprocessor against info files +# and the --sync-lines option + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 + DA = $(CC65_HOME)/bin/da65 +else + AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) + CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) + CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) + LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + DA := $(if $(wildcard ../../../bin/da65*),../../../bin/da65,da65) +endif + +CPP = env LANG=C cpp +CPPFLAGS = # -DTEST_ERROR + +ASMS = fixed.s bank0.s bank1.s +DAIS = fixed.dai bank0.dai bank1.dai + +.SUFFIXES: .da .dai .s +.PHONY: all clean maintainer-clean +.SECONDARY: $(DAIS) + +.da.dai: + $(CPP) -o $@ $(CPPFLAGS) $< + +.dai.s: + $(DA) --sync-lines -o $@ -i $< image.bin + +all: $(ASMS) + +clean: + $(RM) $(ASMS) + +maintainer-clean: clean + $(RM) $(DAIS) + +$(DAIS): fixed.da diff --git a/testcode/disasm/sample-unix.mk b/testcode/disasm/sample-unix.mk deleted file mode 100644 index 0ef64a5e5..000000000 --- a/testcode/disasm/sample-unix.mk +++ /dev/null @@ -1,28 +0,0 @@ -# Sample makefile using a preprocessor against info files -# and the --sync-lines option - -CPP = env LANG=C cpp -CPPFLAGS = # -DTEST_ERROR - -ASMS = fixed.s bank0.s bank1.s -DAIS = fixed.dai bank0.dai bank1.dai - -.SUFFIXES: .da .dai .s -.PHONY: all clean maintainer-clean -.SECONDARY: $(DAIS) - -.da.dai: - $(CPP) -o $@ $(CPPFLAGS) $< - -.dai.s: - da65 --sync-lines -o $@ -i $< image.bin - -all: $(ASMS) - -clean: - rm -f $(ASMS) - -maintainer-clean: clean - rm -f $(DAIS) - -$(DAIS): fixed.da From 39a3de3119bda406c8a51625b35f20851a02060a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 26 Aug 2020 22:47:47 +0200 Subject: [PATCH 0445/2710] made geoslib testcode compile again, added the required linker config and a Makefile --- testcode/grc/Makefile | 43 ++++++++++++++++ testcode/grc/geos-cbm-overlay.cfg | 84 +++++++++++++++++++++++++++++++ testcode/grc/vlir0.s | 8 +-- testcode/grc/vlir1.s | 8 +-- testcode/grc/vlir2.s | 8 +-- 5 files changed, 139 insertions(+), 12 deletions(-) create mode 100644 testcode/grc/Makefile create mode 100644 testcode/grc/geos-cbm-overlay.cfg diff --git a/testcode/grc/Makefile b/testcode/grc/Makefile new file mode 100644 index 000000000..4df2f17bc --- /dev/null +++ b/testcode/grc/Makefile @@ -0,0 +1,43 @@ + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 + GRC = $(CC65_HOME)/bin/grc65 +else + AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) + CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) + CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) + LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + GRC := $(if $(wildcard ../../../bin/grc65*),../../../bin/grc65,grc65) +endif + +all: test.s vlir.cvt + +test.s: test.grc + $(GRC) -s test.s test.grc + +vlir.cvt: vlir.grc + $(GRC) -s vlir.s test.grc + $(CL) -t geos -C geos-cbm-overlay.cfg -o vlir.cvt vlir.s vlir0.s vlir1.s vlir2.s + +clean: + $(RM) test.s test.h + $(RM) vlir.s vlir.cvt diff --git a/testcode/grc/geos-cbm-overlay.cfg b/testcode/grc/geos-cbm-overlay.cfg new file mode 100644 index 000000000..ddf1d1e1f --- /dev/null +++ b/testcode/grc/geos-cbm-overlay.cfg @@ -0,0 +1,84 @@ +FEATURES { + STARTADDRESS: default = $0400; +} +SYMBOLS { + __BACKBUFSIZE__: type = weak, value = $2000; + __HIMEM__: type = weak, value = $8000 - __BACKBUFSIZE__; + __OVERLAYSIZE__: type = weak, value = $1000; + __OVERLAYADDR__: type = weak, value = __HIMEM__ - __OVERLAYSIZE__; + __STACKSIZE__: type = weak, value = $0400; # 1k stack + __STACKADDR__: type = weak, value = __OVERLAYADDR__ - __STACKSIZE__; +} +MEMORY { + CVT: file = %O, start = $0, size = $40000; + ZP: define = yes, start = $58, size = $1A + $06; + VLIR0: define = yes, start = %S, size = __STACKADDR__ - %S; + VLIR1: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR2: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR3: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR4: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR5: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR6: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR7: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR8: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR9: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR10: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR11: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR12: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR13: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR14: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR15: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR16: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR17: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR18: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; + VLIR19: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; +} +SEGMENTS { + ZEROPAGE: type = zp, load = ZP; + EXTZP: type = zp, load = ZP, optional = yes; + DIRENTRY: type = ro, load = CVT, align = $FE; + FILEINFO: type = ro, load = CVT, align = $FE; + RECORDS: type = ro, load = CVT, align = $FE, optional = yes; + STARTUP: type = ro, run = VLIR0, load = CVT, align_load = $FE, define = yes; + LOWCODE: type = ro, run = VLIR0, load = CVT, optional = yes; + ONCE: type = ro, run = VLIR0, load = CVT, optional = yes; + CODE: type = ro, run = VLIR0, load = CVT; + RODATA: type = ro, run = VLIR0, load = CVT; + DATA: type = rw, run = VLIR0, load = CVT; + INIT: type = bss, load = VLIR0, optional = yes; + BSS: type = bss, load = VLIR0, define = yes; + OVERLAY1: type = ro, run = VLIR1, load = CVT, align_load = $FE, optional = yes; + OVERLAY2: type = ro, run = VLIR2, load = CVT, align_load = $FE, optional = yes; + OVERLAY3: type = ro, run = VLIR3, load = CVT, align_load = $FE, optional = yes; + OVERLAY4: type = ro, run = VLIR4, load = CVT, align_load = $FE, optional = yes; + OVERLAY5: type = ro, run = VLIR5, load = CVT, align_load = $FE, optional = yes; + OVERLAY6: type = ro, run = VLIR6, load = CVT, align_load = $FE, optional = yes; + OVERLAY7: type = ro, run = VLIR7, load = CVT, align_load = $FE, optional = yes; + OVERLAY8: type = ro, run = VLIR8, load = CVT, align_load = $FE, optional = yes; + OVERLAY9: type = ro, run = VLIR9, load = CVT, align_load = $FE, optional = yes; + OVERLAY10: type = ro, run = VLIR10, load = CVT, align_load = $FE, optional = yes; + OVERLAY11: type = ro, run = VLIR11, load = CVT, align_load = $FE, optional = yes; + OVERLAY12: type = ro, run = VLIR12, load = CVT, align_load = $FE, optional = yes; + OVERLAY13: type = ro, run = VLIR13, load = CVT, align_load = $FE, optional = yes; + OVERLAY14: type = ro, run = VLIR14, load = CVT, align_load = $FE, optional = yes; + OVERLAY15: type = ro, run = VLIR15, load = CVT, align_load = $FE, optional = yes; + OVERLAY16: type = ro, run = VLIR16, load = CVT, align_load = $FE, optional = yes; + OVERLAY17: type = ro, run = VLIR17, load = CVT, align_load = $FE, optional = yes; + OVERLAY18: type = ro, run = VLIR18, load = CVT, align_load = $FE, optional = yes; + OVERLAY19: type = ro, run = VLIR19, load = CVT, align_load = $FE, optional = 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/testcode/grc/vlir0.s b/testcode/grc/vlir0.s index 2e9a3ffd9..a54d406df 100644 --- a/testcode/grc/vlir0.s +++ b/testcode/grc/vlir0.s @@ -5,10 +5,10 @@ ; include some GEOS defines - .include "../../libsrc/geos/inc/const.inc" - .include "../../libsrc/geos/inc/jumptab.inc" - .include "../../libsrc/geos/inc/geossym.inc" - .include "../../libsrc/geos/inc/geosmac.inc" + .include "../../libsrc/geos-common/const.inc" + .include "../../libsrc/geos-cbm/jumptab.inc" + .include "../../libsrc/geos-cbm/geossym.inc" + .include "../../libsrc/geos-common/geosmac.inc" ; import load addresses for all VLIR chains ; these labels are defined upon linking with ld65 diff --git a/testcode/grc/vlir1.s b/testcode/grc/vlir1.s index eae34565e..6ee3cca37 100644 --- a/testcode/grc/vlir1.s +++ b/testcode/grc/vlir1.s @@ -5,10 +5,10 @@ ; include some GEOS defines - .include "../../libsrc/geos/inc/const.inc" - .include "../../libsrc/geos/inc/jumptab.inc" - .include "../../libsrc/geos/inc/geossym.inc" - .include "../../libsrc/geos/inc/geosmac.inc" + .include "../../libsrc/geos-common/const.inc" + .include "../../libsrc/geos-cbm/jumptab.inc" + .include "../../libsrc/geos-cbm/geossym.inc" + .include "../../libsrc/geos-common/geosmac.inc" ; export names of functions that will be used in the main program diff --git a/testcode/grc/vlir2.s b/testcode/grc/vlir2.s index 9d180c847..4c02983ff 100644 --- a/testcode/grc/vlir2.s +++ b/testcode/grc/vlir2.s @@ -5,10 +5,10 @@ ; similar to vlir1.s except the fact that this is chain #2 - .include "../../libsrc/geos/inc/const.inc" - .include "../../libsrc/geos/inc/jumptab.inc" - .include "../../libsrc/geos/inc/geossym.inc" - .include "../../libsrc/geos/inc/geosmac.inc" + .include "../../libsrc/geos-common/const.inc" + .include "../../libsrc/geos-cbm/jumptab.inc" + .include "../../libsrc/geos-cbm/geossym.inc" + .include "../../libsrc/geos-common/geosmac.inc" .export OVERLAY2_Function1 .export OVERLAY2_Function2 From c1a514c0f8c6a41b0b971cd772ce724f9dfc888f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 26 Aug 2020 23:20:28 +0200 Subject: [PATCH 0446/2710] added test related to issue #1201 --- test/val/bug1201.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 test/val/bug1201.c diff --git a/test/val/bug1201.c b/test/val/bug1201.c new file mode 100644 index 000000000..6d194fbee --- /dev/null +++ b/test/val/bug1201.c @@ -0,0 +1,25 @@ + +/* bug #1201 - The unary operators +, - and ~ should do integer promote on the result types. */ + +char a; +short b; +int c; +long d; +enum E { + Z +} e; +struct S { + int a : 1; +} f; + +_Static_assert(sizeof(+a) == sizeof(int), "Result type should be int"); +_Static_assert(sizeof(+b) == sizeof(int), "Result type should be int"); +_Static_assert(sizeof(+c) == sizeof(int), "Result type should be int"); +_Static_assert(sizeof(+d) == sizeof(long), "Result type should be long"); +_Static_assert(sizeof(+e) == sizeof(int), "Result type should be int"); +_Static_assert(sizeof(+f.a) == sizeof(int), "Result type should be int"); + +int main(void) +{ + return 0; +} From 41dbd31b02b00c3b4120b7dfafedc85b6c879dca Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 27 Aug 2020 00:04:34 +0200 Subject: [PATCH 0447/2710] fix makefile, remove the unneeded .cfg again. oops :) --- testcode/grc/Makefile | 17 +++++-- testcode/grc/geos-cbm-overlay.cfg | 84 ------------------------------- 2 files changed, 13 insertions(+), 88 deletions(-) delete mode 100644 testcode/grc/geos-cbm-overlay.cfg diff --git a/testcode/grc/Makefile b/testcode/grc/Makefile index 4df2f17bc..793506890 100644 --- a/testcode/grc/Makefile +++ b/testcode/grc/Makefile @@ -34,10 +34,19 @@ all: test.s vlir.cvt test.s: test.grc $(GRC) -s test.s test.grc -vlir.cvt: vlir.grc - $(GRC) -s vlir.s test.grc - $(CL) -t geos -C geos-cbm-overlay.cfg -o vlir.cvt vlir.s vlir0.s vlir1.s vlir2.s +vlir.cvt: vlir.grc vlir0.s vlir1.s vlir2.s +# using seperate calls here for demonstration purposes: + $(GRC) -t geos-cbm -s vlir.s vlir.grc + $(AS) -t geos-cbm vlir.s + $(AS) -t geos-cbm vlir0.s + $(AS) -t geos-cbm vlir1.s + $(AS) -t geos-cbm vlir2.s + $(LD) -t geos-cbm -o vlir.cvt vlir.o vlir0.o vlir1.o vlir2.o geos-cbm.lib + +# you can also do the above in one command: +# $(CL) -t geos-cbm -o vlir.cvt vlir.grc vlir0.s vlir1.s vlir2.s clean: $(RM) test.s test.h - $(RM) vlir.s vlir.cvt + $(RM) vlir.s vlir.cvt vlir.c vlir.h + $(RM) *.o diff --git a/testcode/grc/geos-cbm-overlay.cfg b/testcode/grc/geos-cbm-overlay.cfg deleted file mode 100644 index ddf1d1e1f..000000000 --- a/testcode/grc/geos-cbm-overlay.cfg +++ /dev/null @@ -1,84 +0,0 @@ -FEATURES { - STARTADDRESS: default = $0400; -} -SYMBOLS { - __BACKBUFSIZE__: type = weak, value = $2000; - __HIMEM__: type = weak, value = $8000 - __BACKBUFSIZE__; - __OVERLAYSIZE__: type = weak, value = $1000; - __OVERLAYADDR__: type = weak, value = __HIMEM__ - __OVERLAYSIZE__; - __STACKSIZE__: type = weak, value = $0400; # 1k stack - __STACKADDR__: type = weak, value = __OVERLAYADDR__ - __STACKSIZE__; -} -MEMORY { - CVT: file = %O, start = $0, size = $40000; - ZP: define = yes, start = $58, size = $1A + $06; - VLIR0: define = yes, start = %S, size = __STACKADDR__ - %S; - VLIR1: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR2: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR3: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR4: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR5: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR6: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR7: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR8: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR9: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR10: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR11: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR12: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR13: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR14: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR15: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR16: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR17: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR18: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; - VLIR19: define = yes, start = __OVERLAYADDR__, size = __OVERLAYSIZE__; -} -SEGMENTS { - ZEROPAGE: type = zp, load = ZP; - EXTZP: type = zp, load = ZP, optional = yes; - DIRENTRY: type = ro, load = CVT, align = $FE; - FILEINFO: type = ro, load = CVT, align = $FE; - RECORDS: type = ro, load = CVT, align = $FE, optional = yes; - STARTUP: type = ro, run = VLIR0, load = CVT, align_load = $FE, define = yes; - LOWCODE: type = ro, run = VLIR0, load = CVT, optional = yes; - ONCE: type = ro, run = VLIR0, load = CVT, optional = yes; - CODE: type = ro, run = VLIR0, load = CVT; - RODATA: type = ro, run = VLIR0, load = CVT; - DATA: type = rw, run = VLIR0, load = CVT; - INIT: type = bss, load = VLIR0, optional = yes; - BSS: type = bss, load = VLIR0, define = yes; - OVERLAY1: type = ro, run = VLIR1, load = CVT, align_load = $FE, optional = yes; - OVERLAY2: type = ro, run = VLIR2, load = CVT, align_load = $FE, optional = yes; - OVERLAY3: type = ro, run = VLIR3, load = CVT, align_load = $FE, optional = yes; - OVERLAY4: type = ro, run = VLIR4, load = CVT, align_load = $FE, optional = yes; - OVERLAY5: type = ro, run = VLIR5, load = CVT, align_load = $FE, optional = yes; - OVERLAY6: type = ro, run = VLIR6, load = CVT, align_load = $FE, optional = yes; - OVERLAY7: type = ro, run = VLIR7, load = CVT, align_load = $FE, optional = yes; - OVERLAY8: type = ro, run = VLIR8, load = CVT, align_load = $FE, optional = yes; - OVERLAY9: type = ro, run = VLIR9, load = CVT, align_load = $FE, optional = yes; - OVERLAY10: type = ro, run = VLIR10, load = CVT, align_load = $FE, optional = yes; - OVERLAY11: type = ro, run = VLIR11, load = CVT, align_load = $FE, optional = yes; - OVERLAY12: type = ro, run = VLIR12, load = CVT, align_load = $FE, optional = yes; - OVERLAY13: type = ro, run = VLIR13, load = CVT, align_load = $FE, optional = yes; - OVERLAY14: type = ro, run = VLIR14, load = CVT, align_load = $FE, optional = yes; - OVERLAY15: type = ro, run = VLIR15, load = CVT, align_load = $FE, optional = yes; - OVERLAY16: type = ro, run = VLIR16, load = CVT, align_load = $FE, optional = yes; - OVERLAY17: type = ro, run = VLIR17, load = CVT, align_load = $FE, optional = yes; - OVERLAY18: type = ro, run = VLIR18, load = CVT, align_load = $FE, optional = yes; - OVERLAY19: type = ro, run = VLIR19, load = CVT, align_load = $FE, optional = 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__; -} From 7a453d1f901da8d0686d30b13d6bd672e471a39c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 27 Aug 2020 00:08:22 +0200 Subject: [PATCH 0448/2710] add a "disk" target to build the disk images as suggested by Oliver --- testcode/lib/apple2/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/testcode/lib/apple2/Makefile b/testcode/lib/apple2/Makefile index 3ea2463f1..0020b4ec5 100644 --- a/testcode/lib/apple2/Makefile +++ b/testcode/lib/apple2/Makefile @@ -29,7 +29,9 @@ else LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) endif -all: hgr.dsk dhgr.dsk +all: hgrshow hgrtest dhgrshow + +disk: hgr.dsk dhgr.dsk hgr.dsk: hgrshow hgrtest cp prodos.dsk $@ @@ -66,3 +68,4 @@ clean: $(RM) hgr.dsk dhgr.dsk $(RM) hgrshow hgrshow.map $(RM) hgrtest hgrtest.map + $(RM) dhgrshow dhgrshow.map From f34644186f0dd55b647acc9171e1b1d9b4f42bd7 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 27 Aug 2020 01:19:33 +0200 Subject: [PATCH 0449/2710] build a bogus "ROM image" that can be disassembled, fix the makefile, remove generated files --- testcode/disasm/Makefile | 17 +++++++++-------- testcode/disasm/bank0.dai | 33 --------------------------------- testcode/disasm/bank1.dai | 33 --------------------------------- testcode/disasm/fixed.da | 2 +- testcode/disasm/fixed.dai | 25 ------------------------- testcode/disasm/image.cfg | 15 +++++++++++++++ 6 files changed, 25 insertions(+), 100 deletions(-) delete mode 100644 testcode/disasm/bank0.dai delete mode 100644 testcode/disasm/bank1.dai delete mode 100644 testcode/disasm/fixed.dai create mode 100644 testcode/disasm/image.cfg diff --git a/testcode/disasm/Makefile b/testcode/disasm/Makefile index 05e5b8373..61b37e314 100644 --- a/testcode/disasm/Makefile +++ b/testcode/disasm/Makefile @@ -31,15 +31,17 @@ else DA := $(if $(wildcard ../../../bin/da65*),../../../bin/da65,da65) endif -CPP = env LANG=C cpp -CPPFLAGS = # -DTEST_ERROR +CPP = cpp +#CPPFLAGS = -DTEST_ERROR ASMS = fixed.s bank0.s bank1.s DAIS = fixed.dai bank0.dai bank1.dai .SUFFIXES: .da .dai .s -.PHONY: all clean maintainer-clean -.SECONDARY: $(DAIS) + +all: image.bin $(ASMS) + +$(DAIS): fixed.da .da.dai: $(CPP) -o $@ $(CPPFLAGS) $< @@ -47,12 +49,11 @@ DAIS = fixed.dai bank0.dai bank1.dai .dai.s: $(DA) --sync-lines -o $@ -i $< image.bin -all: $(ASMS) +image.bin: image.s image.cfg + $(CL) -t none -C image.cfg -o image.bin image.s clean: $(RM) $(ASMS) - -maintainer-clean: clean $(RM) $(DAIS) + $(RM) image.bin -$(DAIS): fixed.da diff --git a/testcode/disasm/bank0.dai b/testcode/disasm/bank0.dai deleted file mode 100644 index 2d865e77c..000000000 --- a/testcode/disasm/bank0.dai +++ /dev/null @@ -1,33 +0,0 @@ -# 1 "bank0.da" -# 1 "<built-in>" -# 1 "<command-line>" -# 1 "bank0.da" - - - - -global { - inputoffs $00010; - inputsize $4000; - startaddr $8000; - cpu "6502"; -}; - -# 1 "fixed.da" 1 -# 18 "fixed.da" -label { addr $00; name "VariableA"; }; -label { addr $01; name "VariableB"; }; -label { addr $0100; name "Stack"; size $0100; }; - - - - - -label { addr $C000; name "CommonProcA"; }; -label { addr $C123; name "CommonProcB"; }; -range { start $E123; end $FFFF; name "CommonData"; type ByteTable; }; -# 13 "bank0.da" 2 - -label { addr $8000; name "Bank0ProcA"; }; -label { addr $8123; name "Bank0ProcB"; }; -range { start $A000; end $BFFF; name "Bank0Data"; type ByteTable; }; diff --git a/testcode/disasm/bank1.dai b/testcode/disasm/bank1.dai deleted file mode 100644 index 2b5b68532..000000000 --- a/testcode/disasm/bank1.dai +++ /dev/null @@ -1,33 +0,0 @@ -# 1 "bank1.da" -# 1 "<built-in>" -# 1 "<command-line>" -# 1 "bank1.da" - - - - -global { - inputoffs $04010; - inputsize $4000; - startaddr $8000; - cpu "6502"; -}; - -# 1 "fixed.da" 1 -# 18 "fixed.da" -label { addr $00; name "VariableA"; }; -label { addr $01; name "VariableB"; }; -label { addr $0100; name "Stack"; size $0100; }; - - - - - -label { addr $C000; name "CommonProcA"; }; -label { addr $C123; name "CommonProcB"; }; -range { start $E123; end $FFFF; name "CommonData"; type ByteTable; }; -# 13 "bank1.da" 2 - -range { start $8000; end $AFFF; name "Bank1Data"; type ByteTable; }; -label { addr $B000; name "Bank1ProcA"; }; -label { addr $B123; name "Bank1ProcB"; }; diff --git a/testcode/disasm/fixed.da b/testcode/disasm/fixed.da index e8aa03427..f8ad4ba27 100644 --- a/testcode/disasm/fixed.da +++ b/testcode/disasm/fixed.da @@ -7,7 +7,7 @@ #ifndef TARGET_BANK #define TARGET_BANK -1 global { - inputoffs $1C010; + inputoffs $0C010; inputsize $4000; startaddr $C000; cpu "6502"; diff --git a/testcode/disasm/fixed.dai b/testcode/disasm/fixed.dai deleted file mode 100644 index d73155cf0..000000000 --- a/testcode/disasm/fixed.dai +++ /dev/null @@ -1,25 +0,0 @@ -# 1 "fixed.da" -# 1 "<built-in>" -# 1 "<command-line>" -# 1 "fixed.da" -# 9 "fixed.da" -global { - inputoffs $1C010; - inputsize $4000; - startaddr $C000; - cpu "6502"; -}; - - - -label { addr $00; name "VariableA"; }; -label { addr $01; name "VariableB"; }; -label { addr $0100; name "Stack"; size $0100; }; - - - - - -label { addr $C000; name "CommonProcA"; }; -label { addr $C123; name "CommonProcB"; }; -range { start $E123; end $FFFF; name "CommonData"; type ByteTable; }; diff --git a/testcode/disasm/image.cfg b/testcode/disasm/image.cfg new file mode 100644 index 000000000..2225c722f --- /dev/null +++ b/testcode/disasm/image.cfg @@ -0,0 +1,15 @@ + +MEMORY { + HEADER: file = %O, start = $0000, size = $0010, fill = yes; + BANK00: file = %O, start = $8000, size = $4000, fill = yes; + BANK01: file = %O, start = $8000, size = $4000, fill = yes; + BANK02: file = %O, start = $8000, size = $4000, fill = yes; + FIXED: file = %O, start = $c000, size = $4000, fill = yes; +} +SEGMENTS { + HDR: load = HEADER, type = rw, optional = yes, define = yes; + BANK0: load = BANK00, type = rw, optional = yes, define = yes; + BANK1: load = BANK01, type = rw, optional = yes, define = yes; + BANK2: load = BANK02, type = rw, optional = yes, define = yes; + FIX: load = FIXED, type = rw, optional = yes, define = yes; +} From 4008ab556cd725cc7d24f5b443d3224b2d8957eb Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 27 Aug 2020 01:34:18 +0200 Subject: [PATCH 0450/2710] added a Makefile --- samples/tutorial/Makefile | 40 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 samples/tutorial/Makefile diff --git a/samples/tutorial/Makefile b/samples/tutorial/Makefile new file mode 100644 index 000000000..8ed91697f --- /dev/null +++ b/samples/tutorial/Makefile @@ -0,0 +1,40 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= c64 + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../bin/ca65*),../bin/ca65,ca65) + CC := $(if $(wildcard ../bin/cc65*),../bin/cc65,cc65) + CL := $(if $(wildcard ../bin/cl65*),../bin/cl65,cl65) + LD := $(if $(wildcard ../bin/ld65*),../bin/ld65,ld65) +endif + +all: hello + +hello: hello.c text.s + $(CL) -t $(SYS) -o hello hello.c text.s + +clean: + $(RM) hello From 5e2d2a54f631c3d3855c927d11dd8f39506fb986 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 27 Aug 2020 14:25:33 +0200 Subject: [PATCH 0451/2710] added makefile for the GEOS samples. geosconio.c and rmvprot.c do not compile right now, someone with more GEOS knowledge should look at them --- samples/geos/Makefile | 82 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 samples/geos/Makefile diff --git a/samples/geos/Makefile b/samples/geos/Makefile new file mode 100644 index 000000000..32a28e118 --- /dev/null +++ b/samples/geos/Makefile @@ -0,0 +1,82 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= geos-cbm + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 + SP = $(CC65_HOME)/bin/sp65 +else + AS := $(if $(wildcard ../bin/ca65*),../bin/ca65,ca65) + CC := $(if $(wildcard ../bin/cc65*),../bin/cc65,cc65) + CL := $(if $(wildcard ../bin/cl65*),../bin/cl65,cl65) + LD := $(if $(wildcard ../bin/ld65*),../bin/ld65,ld65) + SP := $(if $(wildcard ../bin/sp65*),../bin/sp65,sp65) +endif + +# omitted: dialog.c grphstr.c inittab.c menu.c + +# TODO: geosconio.cvt rmvprot.cvt +all: bitmap-demo.cvt filesel.cvt geosver.cvt getid.cvt hello1.cvt hello2.cvt \ + overlay-demo.cvt vector-demo.cvt yesno.cvt + +bitmap.c: logo.pcx + $(SP) -r logo.pcx -c geos-bitmap -w bitmap.c,ident=bitmap + +bitmap-demo.cvt: bitmap.c bitmap-demores.grc bitmap-demo.c + $(CL) -t $(SYS) -O -o bitmap-demo.cvt -m bitmap-demo.map bitmap-demores.grc bitmap-demo.c + +filesel.cvt: fileselres.grc filesel.c + $(CL) -t $(SYS) -O -o filesel.cvt -m filesel.map fileselres.grc filesel.c + +geosconio.cvt: geosconiores.grc geosconio.c + $(CL) -t $(SYS) -O -o geosconio.cvt -m geosconio.map geosconiores.grc geosconio.c + +geosver.cvt: geosverres.grc geosver.c + $(CL) -t $(SYS) -O -o geover.cvt -m geosver.map geosverres.grc geosver.c + +getid.cvt: getidres.grc getid.c + $(CL) -t $(SYS) -O -o getid.cvt -m getid.map getidres.grc getid.c + +hello1.cvt: hello1res.grc hello1.c + $(CL) -t $(SYS) -O -o hello1.cvt -m hello1.map hello1res.grc hello1.c + +hello2.cvt: hello2res.grc hello2.c + $(CL) -t $(SYS) -O -o hello2.cvt -m hello2.map hello2res.grc hello2.c + +overlay-demo.cvt: overlay-demores.grc overlay-demo.c + $(CL) -t $(SYS) -O -o overlay-demo.cvt -m overlay-demo.map overlay-demores.grc overlay-demo.c + +rmvprot.cvt: rmvprotres.grc rmvprot.c + $(CL) -t $(SYS) -O -o rmvprot.cvt -m rmvprot.map rmvprotres.grc rmvprot.c + +vector-demo.cvt: vector-demores.grc vector-demo.c + $(CL) -t $(SYS) -O -o vector-demo.cvt -m vector-demo.map vector-demores.grc vector-demo.c + +yesno.cvt: yesnores.grc yesno.c + $(CL) -t $(SYS) -O -o yesno.cvt -m yesno.map yesnores.grc yesno.c + + +clean: + $(RM) bitmap.c + $(RM) *.cvt + $(RM) *.map From 5158ee2092442ad458ccf2a522b8a8fd8b6f4099 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 27 Aug 2020 14:50:00 +0200 Subject: [PATCH 0452/2710] preliminary makefile to build all programs in the testcode directory --- testcode/lib/Makefile | 395 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 395 insertions(+) create mode 100644 testcode/lib/Makefile diff --git a/testcode/lib/Makefile b/testcode/lib/Makefile new file mode 100644 index 000000000..33f725f6a --- /dev/null +++ b/testcode/lib/Makefile @@ -0,0 +1,395 @@ +# +# Makefile for cc65 testcode +# +# This Makefile requires GNU make +# + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= c64 + +# Just the usual way to define a variable +# containing a single space character. +SPACE := +SPACE += + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../bin/ca65*),../bin/ca65,ca65) + CC := $(if $(wildcard ../bin/cc65*),../bin/cc65,cc65) + CL := $(if $(wildcard ../bin/cl65*),../bin/cl65,cl65) + LD := $(if $(wildcard ../bin/ld65*),../bin/ld65,ld65) +endif + +ifneq ($(filter disk testcode.%,$(MAKECMDGOALS)),) + ifdef CC65_HOME + TARGET_PATH = $(CC65_HOME)/target + else + TARGET_PATH := $(if $(wildcard ../target),../target,$(shell $(CL) --print-target-path)) + endif + + # If TARGET_PATH contains spaces then it is presumed to contain escaped spaces. GNU make + # has very limited support for paths containing spaces. $(wildcard) is the only function + # that is aware of escaped spaces. However, $(wildcard) never returns paths with escaped + # spaces !!! So if it e.g. finds 4 files in a path with 2 spaces then one ends up with a + # return value consisting of 12 plain words :-(( + # + # Fortunately we can work around that behaviour here because we know that the files we + # are looking for have known extensions. So we can $(filter) the in our example above 12 + # words for file extensions so we come up with 4 path fragments. Then we remove those + # path fragments with $(notdir) from the file names. + # + # So far so good. But here we want to process files from different paths in a single + # recipe further down below and therefore want to prepend the paths to the files with + # $(addprefix). However, $(foreach) isn't aware of escaped spaces (only $(wildcard) is). + # Therefore, we need to replace the spaces with some other character temporarily in order + # to have $(foreach) generate one invocation per file. We use the character '?' for that + # purpose here, just because it is known to not be part of file names. + # + # Inside the recipe generated per file we then replace the '?' again with a space. As we + # want to be compatible with cmd.exe for execution we're not using an escaped space but + # rather double-quote the whole path. + # + # Note: The "strange" $(wildcard) further down below just serves the purpose to unescape + # spaces for cmd.exe. This could have as well been done with another $(subst). + + SUBST_TARGET_PATH := $(subst \$(SPACE),?,$(TARGET_PATH)) + + EMD := $(wildcard $(TARGET_PATH)/$(SYS)/drv/emd/*) + MOU := $(wildcard $(TARGET_PATH)/$(SYS)/drv/mou/*) + TGI := $(wildcard $(TARGET_PATH)/$(SYS)/drv/tgi/*) + + EMD := $(addprefix $(SUBST_TARGET_PATH)/$(SYS)/drv/emd/,$(notdir $(filter %.emd,$(EMD)))) + MOU := $(addprefix $(SUBST_TARGET_PATH)/$(SYS)/drv/mou/,$(notdir $(filter %.mou,$(MOU)))) + TGI := $(addprefix $(SUBST_TARGET_PATH)/$(SYS)/drv/tgi/,$(notdir $(filter %.tgi,$(TGI)))) + + # This one comes with the VICE emulator. + # See http://vice-emu.sourceforge.net/ + C1541 ?= c1541 + + # For this one, see https://applecommander.github.io/ + AC ?= ac.jar + + # For this one, see https://www.horus.com/~hias/atari/ + DIR2ATR ?= dir2atr +endif + +DISK_c64 = testcode.d64 +DISK_apple2 = testcode.dsk +DISK_apple2enh = testcode.dsk +DISK_atari = testcode.atr +DISK_atarixl = testcode.atr + +# -------------------------------------------------------------------------- +# System-dependent settings +# For convenience, these groups and lines are sorted alphabetically, first +# by target-machine group, then by mission, then by program and sub-target. + +# -------------------------------------------------------------------------- +# Generic rules + +.PHONY: all mostlyclean clean zip testcode disk + +%: %.c +%: %.s + +.c.o: + $(CC) $(CFLAGS) -Ors --codesize 500 -T -g -t $(SYS) $< + $(AS) $(<:.c=.s) + +.s.o: + $(AS) $(ASFLAGS) -t $(SYS) $< + +.PRECIOUS: %.o + +.o: +ifeq ($(SYS),vic20) + $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib +else + $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(SYS) -m $@.map $^ $(SYS).lib +endif + +# -------------------------------------------------------------------------- +# Lists of executables + +# omitted: seek +EXELIST_c64 = \ + arg-test \ + clock \ + clock-test \ + conio \ + cpeek-test \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + em-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mouse-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + ser-test \ + strdup-test \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + +# omitted: seek clock-test mouse-test ser-test +EXELIST_vic20 = \ + arg-test \ + clock \ + conio \ + cpeek-test \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + em-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + strdup-test \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + +# omitted: cpeek-test, clock +EXELIST_apple2 = \ + arg-test \ + clock-test \ + conio \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + em-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mouse-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + seek \ + ser-test \ + strdup-test \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + +EXELIST_apple2enh = $(EXELIST_apple2) + +# omitted: cpeek-test +EXELIST_atari = \ + arg-test \ + clock-test \ + clock \ + conio \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + em-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mouse-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + seek \ + ser-test \ + strdup-test \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + +EXELIST_atarixl = $(EXELIST_atari) + +# none of the testcode can work on the 2600 +# EXELIST_atari2600 = + +# none of the testcode can work on supervision +# EXELIST_supervision = + +# Unlisted targets will try to build everything. +# That lets us learn what they cannot build, and what settings +# we need to use for programs that can be built and run. +ifndef EXELIST_$(SYS) +EXELIST_$(SYS) := ${patsubst %.c,%,$(wildcard *.c)} +endif + +# -------------------------------------------------------------------------- +# Rules to make the binaries and the disk + +testcode: $(EXELIST_$(SYS)) + +disk: $(DISK_$(SYS)) + +all: testcode + make -C accelerator + make -C apple2 + make -C atari + make -C atari5200 + make -C cbm SYS=$(SYS) + make -C gamate + make -C pce + +# -------------------------------------------------------------------------- +# some programs link against getsp.o + +mouse-test: mouse-test.o getsp.o + $(LD) $(LDFLAGS) -t $(SYS) -o $@ $^ $(SYS).lib + +ifneq ($(SYS),vic20) +ft: ft.o getsp.o + $(LD) $(LDFLAGS) -t $(SYS) -o $@ $^ $(SYS).lib + +tinyshell: tinyshell.o getsp.o + $(LD) $(LDFLAGS) -t $(SYS) -o $@ $^ $(SYS).lib +endif + +# some programs need more memory on the vic20 + +ifeq ($(SYS),vic20) +ft: ft.o getsp.o + $(LD) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib + +tinyshell: tinyshell.o getsp.o + $(LD) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib +endif + +# -------------------------------------------------------------------------- +# Rule to make a CBM disk with all testcode. Needs the c1541 program that comes +# with the VICE emulator. + +define D64_WRITE_recipe + +$(C1541) -attach $@ -write "$(subst ?,$(SPACE),$(file))" $(notdir $(file)) >$(NULLDEV) + +endef # D64_WRITE_recipe + +testcode.d64: testcode + @$(C1541) -format testcode,AA d64 $@ >$(NULLDEV) + $(foreach file,$(EXELIST_$(SYS)),$(D64_WRITE_recipe)) +# $(foreach file,$(EMD) $(MOU) $(TGI),$(D64_WRITE_recipe)) + +# -------------------------------------------------------------------------- +# Rule to make an Apple II disk with all testcode. Needs the AppleCommander +# program, available at https://applecommander.github.io/, and a template disk +# named 'prodos.dsk'. + +define DSK_WRITE_BIN_recipe + +$(if $(findstring BF00,$(LDFLAGS_$(notdir $(file))_$(SYS))), \ + java -jar $(AC) -p $@ $(notdir $(file)).system sys <"$(wildcard $(TARGET_PATH)/$(SYS)/util/loader.system)") +java -jar $(AC) -as $@ $(notdir $(file)) <"$(file)" + +endef # DSK_WRITE_BIN_recipe + +define DSK_WRITE_REL_recipe + +java -jar $(AC) -p $@ $(notdir $(file)) rel 0 <"$(subst ?,$(SPACE),$(file))" + +endef # DSK_WRITE_REL_recipe + +testcode.dsk: testcode + cp prodos.dsk $@ + $(foreach file,$(EXELIST_$(SYS)),$(DSK_WRITE_BIN_recipe)) +# $(foreach file,$(EMD) $(MOU) $(TGI),$(DSK_WRITE_REL_recipe)) + +# -------------------------------------------------------------------------- +# Rule to make an Atari disk with all testcode. Needs the dir2atr program +# available at http://www.horus.com/~hias/atari/ and the MyDos4534 variant +# of dos.sys and dup.sys. + +define ATR_WRITE_recipe + +cp "$(subst ?,$(SPACE),$(file))" atr/$(notdir $(file)) + +endef # ATR_WRITE_recipe + +testcode.atr: testcode + @mkdir atr + cp "dos.sys" atr/dos.sys + cp "dup.sys" atr/dup.sys + @$(foreach file,$(EXELIST_$(SYS)),$(ATR_WRITE_recipe)) +# @$(foreach file,$(EMD) $(MOU) $(TGI),$(ATR_WRITE_recipe)) + $(DIR2ATR) -d -b MyDos4534 3200 $@ atr + @$(RMDIR) atr + +# -------------------------------------------------------------------------- +# Clean-up rules + +mostlyclean: + @$(DEL) *.lbl *.map *.o 2>$(NULLDEV) +# we cant use .s since we have asm files in the directory that we want to keep + @$(DEL) ${patsubst %.c,%.s,$(wildcard *.c)} 2>$(NULLDEV) + +clean: mostlyclean + @$(DEL) $(EXELIST_$(SYS)) $(DISK_$(SYS)) 2>$(NULLDEV) + make -C accelerator clean + make -C apple2 clean + make -C atari clean + make -C atari5200 clean + make -C cbm SYS=$(SYS) clean + make -C gamate clean + make -C pce clean From f54e01781b6d0daa9ba51a642c5a2e4d0bb21d22 Mon Sep 17 00:00:00 2001 From: IrgendwerA8 <c.krueger.b@web.de> Date: Sat, 29 Aug 2020 16:21:45 +0200 Subject: [PATCH 0453/2710] Tiny optimizations for multiplication. --- libsrc/runtime/lmul.s | 4 ++-- libsrc/runtime/umul8x16r24.s | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/libsrc/runtime/lmul.s b/libsrc/runtime/lmul.s index 860d58cba..d3c34637c 100644 --- a/libsrc/runtime/lmul.s +++ b/libsrc/runtime/lmul.s @@ -63,7 +63,7 @@ L0: lsr tmp4 bcc L1 clc adc ptr3 - pha + tax lda ptr3+1 adc tmp2 sta tmp2 @@ -73,7 +73,7 @@ L0: lsr tmp4 lda ptr4+1 adc tmp4 sta tmp4 - pla + txa L1: dey bpl L0 lda ptr1 ; Load the low result word diff --git a/libsrc/runtime/umul8x16r24.s b/libsrc/runtime/umul8x16r24.s index c006082a4..54d730558 100644 --- a/libsrc/runtime/umul8x16r24.s +++ b/libsrc/runtime/umul8x16r24.s @@ -41,20 +41,19 @@ umul8x16r16m: .endif ldy #8 ; Number of bits - ldx ptr3 ; Get into register for speed lda ptr1 ror a ; Get next bit into carry @L0: bcc @L1 clc - pha - txa + tax + lda ptr3 adc ptr1+1 sta ptr1+1 lda ptr3+1 adc sreg sta sreg - pla + txa @L1: ror sreg ror ptr1+1 From 632da3f4eefc6675484fc547b34c525983ba9d34 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 06:27:11 +0800 Subject: [PATCH 0454/2710] Fixed tracking and checking flexible array members. --- src/cc65/declare.c | 45 ++++++++++++++++++++++++++++++++++----------- src/cc65/symentry.h | 11 +++++++++++ 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 0bfbcedd2..d7851bd44 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -963,12 +963,19 @@ static SymEntry* ParseUnionDecl (const char* Name) AddBitField (Decl.Ident, Decl.Type, 0, 0, FieldWidth, SignednessSpecified); } else { + Entry = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0); if (IsAnonName (Decl.Ident)) { - Entry = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0); Entry->V.A.ANumber = UnionTagEntry->V.S.ACount++; AliasAnonStructFields (&Decl, Entry); - } else { - AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0); + } + + /* Check if the field itself has a flexible array member */ + if (IsClassStruct (Decl.Type)) { + SymEntry* Sym = GetSymType (Decl.Type); + if (Sym && SymHasFlexibleArrayMember (Sym)) { + Entry->Flags |= SC_HAVEFAM; + Flags |= SC_HAVEFAM; + } } } @@ -1107,6 +1114,8 @@ static SymEntry* ParseStructDecl (const char* Name) Error ("Flexible array member cannot be first struct field"); } FlexibleMember = 1; + Flags |= SC_HAVEFAM; + /* Assume zero for size calculations */ SetElementCount (Decl.Type, FLEXIBLE); } @@ -1156,13 +1165,21 @@ static SymEntry* ParseStructDecl (const char* Name) StructSize += BitOffs / CHAR_BITS; BitOffs %= CHAR_BITS; } else { + Entry = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize); if (IsAnonName (Decl.Ident)) { - Entry = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize); Entry->V.A.ANumber = StructTagEntry->V.S.ACount++; AliasAnonStructFields (&Decl, Entry); - } else { - AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize); } + + /* Check if the field itself has a flexible array member */ + if (IsClassStruct (Decl.Type)) { + SymEntry* Sym = GetSymType (Decl.Type); + if (Sym && SymHasFlexibleArrayMember (Sym)) { + Entry->Flags |= SC_HAVEFAM; + Flags |= SC_HAVEFAM; + } + } + if (!FlexibleMember) { StructSize += SizeOf (Decl.Type); } @@ -2361,11 +2378,17 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Number of elements determined by initializer */ SetElementCount (T, Count); ElementCount = Count; - } else if (ElementCount == FLEXIBLE && AllowFlexibleMembers) { - /* In non ANSI mode, allow initialization of flexible array - ** members. - */ - ElementCount = Count; + } else if (ElementCount == FLEXIBLE) { + if (AllowFlexibleMembers) { + /* In non ANSI mode, allow initialization of flexible array + ** members. + */ + ElementCount = Count; + } else { + /* Forbid */ + Error ("Initializing flexible array member is forbidden"); + ElementCount = Count; + } } else if (Count < ElementCount) { g_zerobytes ((ElementCount - Count) * ElementSize); } else if (Count > ElementCount && HasCurly) { diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 94fe66032..0224507ac 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -107,6 +107,7 @@ struct CodeEntry; #define SC_ALIAS 0x01000000U /* Alias of anonymous field */ #define SC_FICTITIOUS 0x02000000U /* Symbol is fictitious */ +#define SC_HAVEFAM 0x04000000U /* Type has a Flexible Array Member */ @@ -272,6 +273,16 @@ INLINE int SymIsRegVar (const SymEntry* Sym) int SymIsOutputFunc (const SymEntry* Sym); /* Return true if this is a function that must be output */ +#if defined(HAVE_INLINE) +INLINE int SymHasFlexibleArrayMember (const SymEntry* Sym) +/* Return true if the given entry has a flexible array member */ +{ + return ((Sym->Flags & SC_HAVEFAM) == SC_HAVEFAM); +} +#else +# define SymHasFlexibleArrayMember(Sym) (((Sym)->Flags & SC_HAVEFAM) == SC_HAVEFAM) +#endif + #if defined(HAVE_INLINE) INLINE const char* SymGetAsmName (const SymEntry* Sym) /* Return the assembler label name for the symbol (beware: may be NULL!) */ From 4e61ae5b3620a1003985d53e28d9dd160e51b915 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 06:27:11 +0800 Subject: [PATCH 0455/2710] Fixed function parameter type conversion. --- src/cc65/declare.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index d7851bd44..4e8446176 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1492,13 +1492,27 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, static Type* ParamTypeCvt (Type* T) -/* If T is an array, convert it to a pointer else do nothing. Return the -** resulting type. +/* If T is an array or a function, convert it to a pointer else do nothing. +** Return the resulting type. */ { + Type* Tmp = 0; + if (IsTypeArray (T)) { - T->C = T_PTR; + Tmp = ArrayToPtr (T); + } else if (IsTypeFunc (T)) { + Tmp = PointerTo (T); } + + if (Tmp != 0) { + /* Do several fixes on qualifiers */ + FixQualifiers (Tmp); + + /* Replace the type */ + TypeCopy (T, Tmp); + TypeFree (Tmp); + } + return T; } From 0a96ffc8786726ca6d492fd70ceaf5dfdae7b3a7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 06:27:11 +0800 Subject: [PATCH 0456/2710] Fixed function parameter checking. Fixed function return type checking. --- src/cc65/codeinfo.c | 6 +- src/cc65/declare.c | 20 +----- src/cc65/expr.c | 112 ++++++++++++++++--------------- src/cc65/function.c | 156 ++++++++++++++++++++++++++++++++------------ src/cc65/function.h | 6 ++ src/cc65/stmt.c | 40 +++++++----- 6 files changed, 210 insertions(+), 130 deletions(-) diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index 3e1d58709..d7d85a12d 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -410,8 +410,10 @@ fncls_t GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg) (AutoCDecl ? IsQualFastcall (E->Type) : !IsQualCDecl (E->Type))) { - /* Will use registers depending on the last param. */ - switch (CheckedSizeOf (D->LastParam->Type)) { + /* Will use registers depending on the last param. If the last + ** param has incomplete type, just assume __EAX__. + */ + switch (SizeOf (D->LastParam->Type)) { case 1u: *Use = REG_A; break; diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 4e8446176..218ba6017 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1704,7 +1704,6 @@ static void ParseAnsiParamList (FuncDesc* F) static FuncDesc* ParseFuncDecl (void) /* Parse the argument list of a function. */ { - unsigned Offs; SymEntry* Sym; SymEntry* WrappedCall; unsigned char WrappedCallData; @@ -1751,23 +1750,10 @@ static FuncDesc* ParseFuncDecl (void) */ F->LastParam = GetSymTab()->SymTail; - /* Assign offsets. If the function has a variable parameter list, - ** there's one additional byte (the arg size). + /* It is allowed to use incomplete types in function prototypes, so we + ** won't always get to know the parameter sizes here and may do that later. */ - Offs = (F->Flags & FD_VARIADIC)? 1 : 0; - Sym = F->LastParam; - while (Sym) { - unsigned Size = CheckedSizeOf (Sym->Type); - if (SymIsRegVar (Sym)) { - Sym->V.R.SaveOffs = Offs; - } else { - Sym->V.Offs = Offs; - } - Offs += Size; - F->ParamSize += Size; - Sym = Sym->PrevSym; - } - + /* Leave the lexical level remembering the symbol tables */ RememberFunctionLevel (F); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 9f7902284..89c7ff108 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -346,6 +346,9 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) int FrameOffs = 0; /* Offset into parameter frame */ int Ellipsis = 0; /* Function is variadic */ + /* Make sure the size of all parameters are known */ + int ParamComplete = F_CheckParamList (Func, 1); + /* As an optimization, we may allocate the complete parameter frame at ** once instead of pushing into each parameter as it comes. We may do that, ** if... @@ -359,7 +362,7 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) ** (instead of pushing) is enabled. ** */ - if (IS_Get (&CodeSizeFactor) >= 200) { + if (ParamComplete && IS_Get (&CodeSizeFactor) >= 200) { /* Calculate the number and size of the parameters */ FrameParams = Func->ParamCount; @@ -424,65 +427,68 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) /* Evaluate the argument expression */ hie1 (&Expr); - /* If we don't have a prototype, accept anything; otherwise, convert - ** the actual argument to the parameter type needed. - */ - Flags = CF_NONE; - if (!Ellipsis) { - - /* Convert the argument to the parameter type if needed */ - TypeConversion (&Expr, Param->Type); - - /* If we have a prototype, chars may be pushed as chars */ - Flags |= CF_FORCECHAR; - - } else { - - /* No prototype available. Convert array to "pointer to first - ** element", and function to "pointer to function". + /* Skip to the next parameter if there are any incomplete types */ + if (ParamComplete) { + /* If we don't have an argument spec., accept anything; otherwise, + ** convert the actual argument to the type needed. */ - Expr.Type = PtrConversion (Expr.Type); + Flags = CF_NONE; + if (!Ellipsis) { - } + /* Convert the argument to the parameter type if needed */ + TypeConversion (&Expr, Param->Type); - /* Handle struct/union specially */ - if (IsClassStruct (Expr.Type)) { - /* Use the replacement type */ - Flags |= TypeOf (GetStructReplacementType (Expr.Type)); - } else { - /* Use the type of the argument for the push */ - Flags |= TypeOf (Expr.Type); - } + /* If we have a prototype, chars may be pushed as chars */ + Flags |= CF_FORCECHAR; - /* Load the value into the primary if it is not already there */ - LoadExpr (Flags, &Expr); - - /* If this is a fastcall function, don't push the last argument */ - if ((CurTok.Tok == TOK_COMMA && NextTok.Tok != TOK_RPAREN) || !IsFastcall) { - unsigned ArgSize = sizeofarg (Flags); - - if (FrameSize > 0) { - /* We have the space already allocated, store in the frame. - ** Because of invalid type conversions (that have produced an - ** error before), we can end up here with a non-aligned stack - ** frame. Since no output will be generated anyway, handle - ** these cases gracefully instead of doing a CHECK. - */ - if (FrameSize >= ArgSize) { - FrameSize -= ArgSize; - } else { - FrameSize = 0; - } - FrameOffs -= ArgSize; - /* Store */ - g_putlocal (Flags | CF_NOKEEP, FrameOffs, Expr.IVal); } else { - /* Push the argument */ - g_push (Flags, Expr.IVal); + + /* No prototype available. Convert array to "pointer to first + ** element", and function to "pointer to function". + */ + Expr.Type = PtrConversion (Expr.Type); + } - /* Calculate total parameter size */ - PushedSize += ArgSize; + /* Handle struct/union specially */ + if (IsClassStruct (Expr.Type)) { + /* Use the replacement type */ + Flags |= TypeOf (GetStructReplacementType (Expr.Type)); + } else { + /* Use the type of the argument for the push */ + Flags |= TypeOf (Expr.Type); + } + + /* Load the value into the primary if it is not already there */ + LoadExpr (Flags, &Expr); + + /* If this is a fastcall function, don't push the last argument */ + if ((CurTok.Tok == TOK_COMMA && NextTok.Tok != TOK_RPAREN) || !IsFastcall) { + unsigned ArgSize = sizeofarg (Flags); + + if (FrameSize > 0) { + /* We have the space already allocated, store in the frame. + ** Because of invalid type conversions (that have produced an + ** error before), we can end up here with a non-aligned stack + ** frame. Since no output will be generated anyway, handle + ** these cases gracefully instead of doing a CHECK. + */ + if (FrameSize >= ArgSize) { + FrameSize -= ArgSize; + } else { + FrameSize = 0; + } + FrameOffs -= ArgSize; + /* Store */ + g_putlocal (Flags | CF_NOKEEP, FrameOffs, Expr.IVal); + } else { + /* Push the argument */ + g_push (Flags, Expr.IVal); + } + + /* Calculate total parameter size */ + PushedSize += ArgSize; + } } /* Check for end of argument list */ diff --git a/src/cc65/function.c b/src/cc65/function.c index 290916cd2..451efc54d 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -105,6 +105,62 @@ static void FreeFunction (Function* F) +int F_CheckParamList (FuncDesc* D, int RequireAll) +/* Check and set the parameter sizes. +** If RequireAll is true, emit errors on parameters of incomplete types. +** Return true if all parameters have complete types. +*/ +{ + unsigned I = 0; + unsigned Offs; + SymEntry* Param; + unsigned ParamSize = 0; + unsigned IncompleteCount = 0; + + /* Assign offsets. If the function has a variable parameter list, + ** there's one additional byte (the arg size). + */ + Offs = (D->Flags & FD_VARIADIC) ? 1 : 0; + Param = D->LastParam; + while (Param) { + unsigned Size = SizeOf (Param->Type); + if (RequireAll && IsIncompleteESUType (Param->Type)) { + if (D->Flags & FD_UNNAMED_PARAMS) { + Error ("Parameter %u has incomplete type '%s'", + D->ParamCount - I, + GetFullTypeName (Param->Type)); + } else { + Error ("Parameter '%s' has incomplete type '%s'", + Param->Name, + GetFullTypeName (Param->Type)); + } + ++IncompleteCount; + } + if (SymIsRegVar (Param)) { + Param->V.R.SaveOffs = Offs; + } else { + Param->V.Offs = Offs; + } + Offs += Size; + ParamSize += Size; + Param = Param->PrevSym; + ++I; + } + + /* If all parameters have complete types, set the total size description + ** and return true. + */ + if (IncompleteCount == 0) { + D->ParamSize = ParamSize; + return 1; + } + + /* Otherwise return false */ + return 0; +} + + + const char* F_GetFuncName (const Function* F) /* Return the name of the current function */ { @@ -378,9 +434,11 @@ static void F_EmitDebugInfo (void) void NewFunc (SymEntry* Func, FuncDesc* D) /* Parse argument declarations and function body. */ { + int ParamComplete; /* If all paramemters have complete types */ int C99MainFunc = 0;/* Flag for C99 main function returning int */ SymEntry* Param; const Type* RType; /* Real type used for struct parameters */ + const Type* ReturnType; /* Return type */ /* Remember this function descriptor used for definition */ GetFuncDesc (Func->Type)->FuncDef = D; @@ -391,6 +449,21 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* Reenter the lexical level */ ReenterFunctionLevel (D); + /* Check return type */ + ReturnType = F_GetReturnType (CurrentFunc); + if (IsIncompleteESUType (ReturnType)) { + /* There are already diagnostics on returning arrays or functions */ + if (!IsTypeArray (ReturnType) && !IsTypeFunc (ReturnType)) { + Error ("Function has incomplete return type '%s'", + GetFullTypeName (ReturnType)); + } + } + + /* Check and set the parameter sizes. All parameter must have complete + ** types now. + */ + ParamComplete = F_CheckParamList (D, 1); + /* Check if the function header contains unnamed parameters. These are ** only allowed in cc65 mode. */ @@ -429,7 +502,7 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* If cc65 extensions aren't enabled, don't allow a main function that ** doesn't return an int. */ - if (IS_Get (&Standard) != STD_CC65 && CurrentFunc->ReturnType[0].C != T_INT) { + if (IS_Get (&Standard) != STD_CC65 && ReturnType[0].C != T_INT) { Error ("'main' must always return an int"); } @@ -472,16 +545,11 @@ void NewFunc (SymEntry* Func, FuncDesc* D) unsigned Flags; /* Generate the push */ - if (IsTypeFunc (D->LastParam->Type)) { - /* Pointer to function */ - Flags = CF_PTR; + /* Handle struct/union specially */ + if (IsClassStruct (D->LastParam->Type)) { + Flags = TypeOf (GetStructReplacementType (D->LastParam->Type)) | CF_FORCECHAR; } else { - /* Handle struct/union specially */ - if (IsClassStruct (D->LastParam->Type)) { - Flags = TypeOf (GetStructReplacementType (D->LastParam->Type)) | CF_FORCECHAR; - } else { - Flags = TypeOf (D->LastParam->Type) | CF_FORCECHAR; - } + Flags = TypeOf (D->LastParam->Type) | CF_FORCECHAR; } g_push (Flags, 0); } @@ -497,48 +565,50 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* Setup the stack */ StackPtr = 0; - /* Walk through the parameter list and allocate register variable space - ** for parameters declared as register. Generate code to swap the contents - ** of the register bank with the save area on the stack. - */ - Param = D->SymTab->SymHead; - while (Param && (Param->Flags & SC_PARAM) != 0) { + /* Emit code to handle the parameters if all of them have complete types */ + if (ParamComplete) { + /* Walk through the parameter list and allocate register variable space + ** for parameters declared as register. Generate code to swap the contents + ** of the register bank with the save area on the stack. + */ + Param = D->SymTab->SymHead; + while (Param && (Param->Flags & SC_PARAM) != 0) { - /* Check if we need copy for struct/union type */ - RType = Param->Type; - if (IsClassStruct (RType)) { - RType = GetStructReplacementType (RType); + /* Check if we need copy for struct/union type */ + RType = Param->Type; + if (IsClassStruct (RType)) { + RType = GetStructReplacementType (RType); - /* If there is no replacement type, then it is just the address. - ** We don't currently support this case. - */ - if (RType == Param->Type) { - Error ("Passing '%s' of this size by value is not supported", GetFullTypeName (Param->Type)); + /* If there is no replacement type, then it is just the address. + ** We don't currently support this case. + */ + if (RType == Param->Type) { + Error ("Passing '%s' of this size by value is not supported", GetFullTypeName (Param->Type)); + } } - } + /* Check for a register variable */ + if (SymIsRegVar (Param)) { - /* Check for a register variable */ - if (SymIsRegVar (Param)) { + /* Allocate space */ + int Reg = F_AllocRegVar (CurrentFunc, RType); - /* Allocate space */ - int Reg = F_AllocRegVar (CurrentFunc, RType); + /* Could we allocate a register? */ + if (Reg < 0) { + /* No register available: Convert parameter to auto */ + CvtRegVarToAuto (Param); + } else { + /* Remember the register offset */ + Param->V.R.RegOffs = Reg; - /* Could we allocate a register? */ - if (Reg < 0) { - /* No register available: Convert parameter to auto */ - CvtRegVarToAuto (Param); - } else { - /* Remember the register offset */ - Param->V.R.RegOffs = Reg; - - /* Generate swap code */ - g_swap_regvars (Param->V.R.SaveOffs, Reg, CheckedSizeOf (RType)); + /* Generate swap code */ + g_swap_regvars (Param->V.R.SaveOffs, Reg, CheckedSizeOf (RType)); + } } - } - /* Next parameter */ - Param = Param->NextSym; + /* Next parameter */ + Param = Param->NextSym; + } } /* Need a starting curly brace */ diff --git a/src/cc65/function.h b/src/cc65/function.h index 8231a1970..e0b7ef0a2 100644 --- a/src/cc65/function.h +++ b/src/cc65/function.h @@ -81,6 +81,12 @@ extern Function* CurrentFunc; +int F_CheckParamList (FuncDesc* D, int RequireAll); +/* Check and set the parameter sizes. +** If RequireAll is true, emit errors on parameters of incomplete types. +** Return true if all parameters have complete types. +*/ + const char* F_GetFuncName (const Function* F); /* Return the name of the current function */ diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index 036cc2d89..0925c6d3d 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -318,28 +318,38 @@ static void ReturnStatement (void) /* Evaluate the return expression */ hie0 (&Expr); - /* If we return something in a void function, print an error and - ** ignore the value. Otherwise convert the value to the type of the - ** return. + /* If we return something in a function with void or incomplete return + ** type, print an error and ignore the value. Otherwise convert the + ** value to the type of the return. */ if (F_HasVoidReturn (CurrentFunc)) { - Error ("Returning a value in function with return type void"); + Error ("Returning a value in function with return type 'void'"); } else { - /* Convert the return value to the type of the function result */ - TypeConversion (&Expr, F_GetReturnType (CurrentFunc)); - /* Load the value into the primary */ - if (IsClassStruct (Expr.Type)) { - /* Handle struct/union specially */ - ReturnType = GetStructReplacementType (Expr.Type); - if (ReturnType == Expr.Type) { - Error ("Returning '%s' of this size by value is not supported", GetFullTypeName (Expr.Type)); + /* Check the return type first */ + ReturnType = F_GetReturnType (CurrentFunc); + if (IsIncompleteESUType (ReturnType)) { + /* Avoid excess errors */ + if (ErrorCount == 0) { + Error ("Returning a value in function with incomplete return type"); } - LoadExpr (TypeOf (ReturnType), &Expr); - } else { + /* Convert the return value to the type of the function result */ + TypeConversion (&Expr, ReturnType); + /* Load the value into the primary */ - LoadExpr (CF_NONE, &Expr); + if (IsClassStruct (Expr.Type)) { + /* Handle struct/union specially */ + ReturnType = GetStructReplacementType (Expr.Type); + if (ReturnType == Expr.Type) { + Error ("Returning '%s' of this size by value is not supported", GetFullTypeName (Expr.Type)); + } + LoadExpr (TypeOf (ReturnType), &Expr); + + } else { + /* Load the value into the primary */ + LoadExpr (CF_NONE, &Expr); + } } } From 33a75e0a7315f5dc3a5cd1bf6db2b691e655da7b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 06:27:11 +0800 Subject: [PATCH 0457/2710] Optimized parameter list checking. Fixed function type comparison between ANSI and K&R styles. --- src/cc65/declare.c | 1 + src/cc65/funcdesc.h | 3 ++- src/cc65/function.c | 10 ++++++++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 218ba6017..8d3e0f458 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1753,6 +1753,7 @@ static FuncDesc* ParseFuncDecl (void) /* It is allowed to use incomplete types in function prototypes, so we ** won't always get to know the parameter sizes here and may do that later. */ + F->Flags |= FD_INCOMPLETE_PARAM; /* Leave the lexical level remembering the symbol tables */ RememberFunctionLevel (F); diff --git a/src/cc65/funcdesc.h b/src/cc65/funcdesc.h index 1cfb2bd09..423e7621f 100644 --- a/src/cc65/funcdesc.h +++ b/src/cc65/funcdesc.h @@ -49,13 +49,14 @@ #define FD_EMPTY 0x0001U /* Function with empty param list */ #define FD_VOID_PARAM 0x0002U /* Function with a void param list */ #define FD_VARIADIC 0x0004U /* Function with variable param list */ +#define FD_INCOMPLETE_PARAM 0x0008U /* Function with param of unknown size */ #define FD_OLDSTYLE 0x0010U /* Old style (K&R) function */ #define FD_OLDSTYLE_INTRET 0x0020U /* K&R func has implicit int return */ #define FD_UNNAMED_PARAMS 0x0040U /* Function has unnamed params */ #define FD_CALL_WRAPPER 0x0080U /* This function is used as a wrapper */ /* Bits that must be ignored when comparing funcs */ -#define FD_IGNORE (FD_OLDSTYLE | FD_OLDSTYLE_INTRET | FD_UNNAMED_PARAMS | FD_CALL_WRAPPER) +#define FD_IGNORE (FD_INCOMPLETE_PARAM | FD_OLDSTYLE | FD_OLDSTYLE_INTRET | FD_UNNAMED_PARAMS | FD_CALL_WRAPPER) diff --git a/src/cc65/function.c b/src/cc65/function.c index 451efc54d..9d4f8c2f9 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -117,6 +117,11 @@ int F_CheckParamList (FuncDesc* D, int RequireAll) unsigned ParamSize = 0; unsigned IncompleteCount = 0; + /* Don't bother to check unnecessarily */ + if ((D->Flags & FD_INCOMPLETE_PARAM) == 0) { + return 1; + } + /* Assign offsets. If the function has a variable parameter list, ** there's one additional byte (the arg size). */ @@ -147,11 +152,12 @@ int F_CheckParamList (FuncDesc* D, int RequireAll) ++I; } - /* If all parameters have complete types, set the total size description - ** and return true. + /* If all parameters have complete types, set the total size description, + ** clear the FD_INCOMPLETE_PARAM flag and return true. */ if (IncompleteCount == 0) { D->ParamSize = ParamSize; + D->Flags &= ~FD_INCOMPLETE_PARAM; return 1; } From df755df44dfc97188dfea755d4c01b06d6656b5a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 06:27:11 +0800 Subject: [PATCH 0458/2710] Warning about ESU types declared inside parameter list as they are invisble outside. --- src/cc65/declare.c | 50 +++++++++++++++++++++++++++++----------------- src/cc65/declare.h | 3 +++ src/cc65/symtab.c | 30 ++++++++++++++++++++++++++-- src/cc65/symtab.h | 4 ++-- 4 files changed, 65 insertions(+), 22 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 8d3e0f458..6aff1960e 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -515,7 +515,7 @@ static void ParseStorageClass (DeclSpec* D, unsigned DefStorage) -static SymEntry* ESUForwardDecl (const char* Name, unsigned Flags) +static SymEntry* ESUForwardDecl (const char* Name, unsigned Flags, unsigned* DSFlags) /* Handle an enum, struct or union forward decl */ { /* Try to find an enum/struct/union with the given name. If there is none, @@ -524,9 +524,9 @@ static SymEntry* ESUForwardDecl (const char* Name, unsigned Flags) SymEntry* Entry = FindTagSym (Name); if (Entry == 0) { if ((Flags & SC_ESUTYPEMASK) != SC_ENUM) { - Entry = AddStructSym (Name, Flags, 0, 0); + Entry = AddStructSym (Name, Flags, 0, 0, DSFlags); } else { - Entry = AddEnumSym (Name, Flags, 0, 0); + Entry = AddEnumSym (Name, Flags, 0, 0, DSFlags); } } else if ((Entry->Flags & SC_TYPEMASK) != (Flags & SC_ESUTYPEMASK)) { /* Already defined, but not the same type class */ @@ -575,7 +575,7 @@ static const Type* GetEnumeratorType (long Min, unsigned long Max, int Signed) -static SymEntry* ParseEnumDecl (const char* Name) +static SymEntry* ParseEnumDecl (const char* Name, unsigned* DSFlags) /* Process an enum declaration */ { SymTable* FieldTab; @@ -593,11 +593,11 @@ static SymEntry* ParseEnumDecl (const char* Name) if (CurTok.Tok != TOK_LCURLY) { /* Just a forward definition */ - return ESUForwardDecl (Name, SC_ENUM); + return ESUForwardDecl (Name, SC_ENUM, DSFlags); } /* Add a forward declaration for the enum tag in the current lexical level */ - AddEnumSym (Name, 0, 0, 0); + AddEnumSym (Name, 0, 0, 0, DSFlags); /* Skip the opening curly brace */ NextToken (); @@ -740,7 +740,7 @@ static SymEntry* ParseEnumDecl (const char* Name) Flags |= SC_FICTITIOUS; } - return AddEnumSym (Name, Flags, MemberType, FieldTab); + return AddEnumSym (Name, Flags, MemberType, FieldTab, DSFlags); } @@ -870,7 +870,7 @@ static unsigned AliasAnonStructFields (const Declaration* Decl, SymEntry* Anon) -static SymEntry* ParseUnionDecl (const char* Name) +static SymEntry* ParseUnionDecl (const char* Name, unsigned* DSFlags) /* Parse a union declaration. */ { @@ -886,11 +886,11 @@ static SymEntry* ParseUnionDecl (const char* Name) if (CurTok.Tok != TOK_LCURLY) { /* Just a forward declaration */ - return ESUForwardDecl (Name, SC_UNION); + return ESUForwardDecl (Name, SC_UNION, DSFlags); } /* Add a forward declaration for the union tag in the current lexical level */ - UnionTagEntry = AddStructSym (Name, SC_UNION, 0, 0); + UnionTagEntry = AddStructSym (Name, SC_UNION, 0, 0, DSFlags); UnionTagEntry->V.S.ACount = 0; @@ -1005,12 +1005,12 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { } /* Make a real entry from the forward decl and return it */ - return AddStructSym (Name, SC_UNION | SC_DEF | Flags, UnionSize, FieldTab); + return AddStructSym (Name, SC_UNION | SC_DEF | Flags, UnionSize, FieldTab, DSFlags); } -static SymEntry* ParseStructDecl (const char* Name) +static SymEntry* ParseStructDecl (const char* Name, unsigned* DSFlags) /* Parse a struct declaration. */ { @@ -1027,11 +1027,11 @@ static SymEntry* ParseStructDecl (const char* Name) if (CurTok.Tok != TOK_LCURLY) { /* Just a forward declaration */ - return ESUForwardDecl (Name, SC_STRUCT); + return ESUForwardDecl (Name, SC_STRUCT, DSFlags); } /* Add a forward declaration for the struct tag in the current lexical level */ - StructTagEntry = AddStructSym (Name, SC_STRUCT, 0, 0); + StructTagEntry = AddStructSym (Name, SC_STRUCT, 0, 0, DSFlags); StructTagEntry->V.S.ACount = 0; @@ -1219,7 +1219,7 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { } /* Make a real entry from the forward decl and return it */ - return AddStructSym (Name, SC_STRUCT | SC_DEF | Flags, StructSize, FieldTab); + return AddStructSym (Name, SC_STRUCT | SC_DEF | Flags, StructSize, FieldTab, DSFlags); } @@ -1402,7 +1402,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, /* Remember we have an extra type decl */ D->Flags |= DS_EXTRA_TYPE; /* Declare the union in the current scope */ - Entry = ParseUnionDecl (Ident); + Entry = ParseUnionDecl (Ident, &D->Flags); /* Encode the union entry into the type */ D->Type[0].C = T_UNION; SetESUSymEntry (D->Type, Entry); @@ -1421,7 +1421,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, /* Remember we have an extra type decl */ D->Flags |= DS_EXTRA_TYPE; /* Declare the struct in the current scope */ - Entry = ParseStructDecl (Ident); + Entry = ParseStructDecl (Ident, &D->Flags); /* Encode the struct entry into the type */ D->Type[0].C = T_STRUCT; SetESUSymEntry (D->Type, Entry); @@ -1444,7 +1444,8 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, /* Remember we have an extra type decl */ D->Flags |= DS_EXTRA_TYPE; /* Parse the enum decl */ - Entry = ParseEnumDecl (Ident); + Entry = ParseEnumDecl (Ident, &D->Flags); + /* Encode the enum entry into the type */ D->Type[0].C |= T_ENUM; SetESUSymEntry (D->Type, Entry); D->Type[1].C = T_END; @@ -1583,6 +1584,13 @@ static void ParseOldStyleParamList (FuncDesc* F) /* Read the parameter */ ParseDecl (&Spec, &Decl, DM_NEED_IDENT); + + /* Warn about new local type declaration */ + if ((Spec.Flags & DS_NEW_TYPE_DECL) != 0) { + Warning ("'%s' will be invisible out of this function", + GetFullTypeName (Spec.Type)); + } + if (Decl.Ident[0] != '\0') { /* We have a name given. Search for the symbol */ @@ -1650,6 +1658,12 @@ static void ParseAnsiParamList (FuncDesc* F) Spec.StorageClass = SC_AUTO | SC_PARAM | SC_DEF; } + /* Warn about new local type declaration */ + if ((Spec.Flags & DS_NEW_TYPE_DECL) != 0) { + Warning ("'%s' will be invisible out of this function", + GetFullTypeName (Spec.Type)); + } + /* Allow parameters without a name, but remember if we had some to ** eventually print an error message later. */ diff --git a/src/cc65/declare.h b/src/cc65/declare.h index 615f16a4a..3293a0dcb 100644 --- a/src/cc65/declare.h +++ b/src/cc65/declare.h @@ -57,6 +57,9 @@ #define DS_DEF_STORAGE 0x0001U /* Default storage class used */ #define DS_DEF_TYPE 0x0002U /* Default type used */ #define DS_EXTRA_TYPE 0x0004U /* Extra type declared */ +#define DS_NEW_TYPE_DECL 0x0010U /* New type declared */ +#define DS_NEW_TYPE_DEF 0x0020U /* New type defined */ +#define DS_NEW_TYPE (DS_NEW_TYPE_DECL | DS_NEW_TYPE_DEF) /* Result of ParseDeclSpec */ typedef struct DeclSpec DeclSpec; diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 7e6a9f5bb..6a02fc0ce 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -686,7 +686,7 @@ static void AddSymEntry (SymTable* T, SymEntry* S) -SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTable* Tab) +SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTable* Tab, unsigned* DSFlags) /* Add an enum entry and return it */ { SymTable* CurTagTab = TagTab; @@ -719,6 +719,11 @@ SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTab Entry->V.E.Type = Type; Entry->Flags &= ~SC_DECL; Entry->Flags |= SC_DEF; + + /* Remember this is the first definition of this type */ + if (DSFlags != 0) { + *DSFlags |= DS_NEW_TYPE_DEF; + } } } @@ -741,6 +746,14 @@ SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTab Entry->Flags |= SC_DEF; } + /* Remember this is the first definition of this type */ + if (CurTagTab != FailSafeTab && DSFlags != 0) { + if ((Entry->Flags & SC_DEF) != 0) { + *DSFlags |= DS_NEW_TYPE_DEF; + } + *DSFlags |= DS_NEW_TYPE_DECL; + } + /* Add it to the current table */ AddSymEntry (CurTagTab, Entry); } @@ -751,7 +764,7 @@ SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTab -SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTable* Tab) +SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTable* Tab, unsigned* DSFlags) /* Add a struct/union entry and return it */ { SymTable* CurTagTab = TagTab; @@ -791,6 +804,11 @@ SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTabl Entry->Flags = Flags; Entry->V.S.SymTab = Tab; Entry->V.S.Size = Size; + + /* Remember this is the first definition of this type */ + if (DSFlags != 0) { + *DSFlags |= DS_NEW_TYPE_DEF; + } } } @@ -809,6 +827,14 @@ SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTabl Entry->V.S.SymTab = Tab; Entry->V.S.Size = Size; + /* Remember this is the first definition of this type */ + if (CurTagTab != FailSafeTab && DSFlags != 0) { + if ((Entry->Flags & SC_DEF) != 0) { + *DSFlags |= DS_NEW_TYPE_DEF; + } + *DSFlags |= DS_NEW_TYPE_DECL; + } + /* Add it to the current tag table */ AddSymEntry (CurTagTab, Entry); } diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h index 750e41b54..1231eb528 100644 --- a/src/cc65/symtab.h +++ b/src/cc65/symtab.h @@ -149,10 +149,10 @@ unsigned short FindSPAdjustment (const char* Name); -SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTable* Tab); +SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTable* Tab, unsigned* DSFlags); /* Add an enum entry and return it */ -SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTable* Tab); +SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTable* Tab, unsigned* DSFlags); /* Add a struct/union entry and return it */ SymEntry* AddBitField (const char* Name, const Type* Type, unsigned Offs, From 492ee7fc455dbef2b5a3e52c37a20a5ecdbd3eee Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 30 Aug 2020 03:10:24 +0800 Subject: [PATCH 0459/2710] Improved test/ref/pr1220.c. --- test/ref/pr1220.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/test/ref/pr1220.c b/test/ref/pr1220.c index c594b5ac2..4f88ada73 100644 --- a/test/ref/pr1220.c +++ b/test/ref/pr1220.c @@ -1,24 +1,28 @@ -/* PR #1220 - test constant AND/OR */ +/* PR #1220 - test constant ternary, AND and OR */ #include <stdio.h> +/* test AND/OR, results as integers */ #define CONTEXT_A(x) do {\ s = 0, flags = 0, t = (x),\ printf("%3d %2X: %d\n", s, flags, t);\ } while (0) +/* test AND/OR in ternary context */ #define CONTEXT_B(x) do {\ s = 0, flags = 0,\ (x ? printf("%3d %2X: 1\n", s, flags) : printf("%3d %2X: 0\n", s, flags));\ } while (0) int s, t; -void *p; unsigned flags; int f(x) +/* The call to this function should be and only be skipped strictly according to +** the short-circuit evaluation rule. +*/ { - flags |= 1U << s; + flags |= (x != 0) << s; ++s; return x; } @@ -31,6 +35,7 @@ int f(x) #define _F (f(-1), 0) void f0() +/* constant short-circuit */ { printf("f0()\n"); @@ -59,6 +64,7 @@ void f0() } void f1(int a, int b, int c) +/* AND */ { printf("f1(%d, %d, %d)\n", a, b, c); @@ -80,6 +86,7 @@ void f1(int a, int b, int c) } void f2(int a, int b, int c) +/* OR */ { printf("f2(%d, %d, %d)\n", a, b, c); @@ -101,6 +108,7 @@ void f2(int a, int b, int c) } void f3(int a, int b, int c, int d) +/* AND and OR */ { printf("f3(%d, %d, %d, %d)\n", a, b, c, d); @@ -122,6 +130,7 @@ void f3(int a, int b, int c, int d) } void f4(int a, int b, int c, int d) +/* AND as top-level expression inside OR context */ { printf("f4(%d, %d, %d, %d)\n", a, b, c, d); @@ -143,6 +152,7 @@ void f4(int a, int b, int c, int d) } void f5(int a, int b, int c, int d) +/* OR as top-level expression inside AND context */ { printf("f5(%d, %d, %d, %d)\n", a, b, c, d); @@ -164,6 +174,7 @@ void f5(int a, int b, int c, int d) } void f0_B() +/* constant short-circuit */ { printf("f0()\n"); @@ -192,6 +203,7 @@ void f0_B() } void f1_B(int a, int b, int c) +/* AND */ { printf("f1(%d, %d, %d)\n", a, b, c); @@ -213,6 +225,7 @@ void f1_B(int a, int b, int c) } void f2_B(int a, int b, int c) +/* OR */ { printf("f2(%d, %d, %d)\n", a, b, c); @@ -234,6 +247,7 @@ void f2_B(int a, int b, int c) } void f3_B(int a, int b, int c, int d) +/* AND and OR */ { printf("f3(%d, %d, %d, %d)\n", a, b, c, d); @@ -255,6 +269,7 @@ void f3_B(int a, int b, int c, int d) } void f4_B(int a, int b, int c, int d) +/* AND as top-level expression inside OR context */ { printf("f4(%d, %d, %d, %d)\n", a, b, c, d); @@ -276,6 +291,7 @@ void f4_B(int a, int b, int c, int d) } void f5_B(int a, int b, int c, int d) +/* OR as top-level expression inside AND context */ { printf("f5(%d, %d, %d, %d)\n", a, b, c, d); From 60c59f59a3957e819f1c4889b01142d9b7d3c981 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 30 Aug 2020 00:26:52 +0800 Subject: [PATCH 0460/2710] Renamed StaticConstExpr() and StaticConstAbsIntExpr() with clearer comments. --- src/cc65/asmstmt.c | 8 ++++---- src/cc65/declare.c | 12 ++++++------ src/cc65/expr.c | 28 ++++++++++++++-------------- src/cc65/expr.h | 18 +++++++++--------- src/cc65/preproc.c | 2 +- src/cc65/preproc.h | 2 +- src/cc65/staticassert.c | 2 +- src/cc65/swstmt.c | 2 +- 8 files changed, 37 insertions(+), 37 deletions(-) diff --git a/src/cc65/asmstmt.c b/src/cc65/asmstmt.c index 148d62d9c..9dd1f906a 100644 --- a/src/cc65/asmstmt.c +++ b/src/cc65/asmstmt.c @@ -135,7 +135,7 @@ static void ParseByteArg (StrBuf* T, unsigned Arg) ConsumeComma (); /* Evaluate the expression */ - ExprDesc Expr = StaticConstAbsIntExpr (hie1); + ExprDesc Expr = NoCodeConstAbsIntExpr (hie1); /* Check the range but allow negative values if the type is signed */ if (IsSignUnsigned (Expr.Type)) { @@ -168,7 +168,7 @@ static void ParseWordArg (StrBuf* T, unsigned Arg) ConsumeComma (); /* Evaluate the expression */ - ExprDesc Expr = StaticConstAbsIntExpr (hie1); + ExprDesc Expr = NoCodeConstAbsIntExpr (hie1); /* Check the range but allow negative values if the type is signed */ if (IsSignUnsigned (Expr.Type)) { @@ -201,7 +201,7 @@ static void ParseLongArg (StrBuf* T, unsigned Arg attribute ((unused))) ConsumeComma (); /* Evaluate the expression */ - ExprDesc Expr = StaticConstAbsIntExpr (hie1); + ExprDesc Expr = NoCodeConstAbsIntExpr (hie1); /* Convert into a hex number */ xsprintf (Buf, sizeof (Buf), "$%08lX", Expr.IVal & 0xFFFFFFFF); @@ -325,7 +325,7 @@ static void ParseStrArg (StrBuf* T, unsigned Arg attribute ((unused))) break; default: - Expr = StaticConstAbsIntExpr (hie1); + Expr = NoCodeConstAbsIntExpr (hie1); xsprintf (Buf, sizeof (Buf), "%ld", Expr.IVal); SB_AppendStr (T, Buf); break; diff --git a/src/cc65/declare.c b/src/cc65/declare.c index d1ac0e43f..b184c31a6 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -622,7 +622,7 @@ static SymEntry* ParseEnumDecl (const char* Name) if (CurTok.Tok == TOK_ASSIGN) { NextToken (); - ExprDesc Expr = StaticConstAbsIntExpr (hie1); + ExprDesc Expr = NoCodeConstAbsIntExpr (hie1); EnumVal = Expr.IVal; MemberType = Expr.Type; IsSigned = IsSignSigned (MemberType); @@ -772,7 +772,7 @@ static int ParseFieldWidth (Declaration* Decl) /* Read the width */ NextToken (); - ExprDesc Expr = StaticConstAbsIntExpr (hie1); + ExprDesc Expr = NoCodeConstAbsIntExpr (hie1); if (Expr.IVal < 0) { Error ("Negative width in bit-field"); @@ -1859,7 +1859,7 @@ static void Declarator (const DeclSpec* Spec, Declaration* D, declmode_t Mode) /* Read the size if it is given */ if (CurTok.Tok != TOK_RBRACK) { - ExprDesc Expr = StaticConstAbsIntExpr (hie1); + ExprDesc Expr = NoCodeConstAbsIntExpr (hie1); if (Expr.IVal <= 0) { if (D->Ident[0] != '\0') { Error ("Size of array '%s' is invalid", D->Ident); @@ -2220,7 +2220,7 @@ static ExprDesc ParseScalarInitInternal (Type* T) } /* Get the expression and convert it to the target type */ - ExprDesc ED = StaticConstExpr (hie1); + ExprDesc ED = NoCodeConstExpr (hie1); TypeConversion (&ED, T); /* Close eventually opening braces */ @@ -2253,7 +2253,7 @@ static unsigned ParsePointerInit (Type* T) unsigned BraceCount = OpeningCurlyBraces (0); /* Expression */ - ExprDesc ED = StaticConstExpr (hie1); + ExprDesc ED = NoCodeConstExpr (hie1); TypeConversion (&ED, T); /* Output the data */ @@ -2598,7 +2598,7 @@ static unsigned ParseVoidInit (Type* T) /* Allow an arbitrary list of values */ Size = 0; do { - ExprDesc Expr = StaticConstExpr (hie1); + ExprDesc Expr = NoCodeConstExpr (hie1); switch (GetUnderlyingTypeCode (&Expr.Type[0])) { case T_SCHAR: diff --git a/src/cc65/expr.c b/src/cc65/expr.c index d1ceb27c5..e627b6606 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3150,14 +3150,14 @@ static void hieAndPP (ExprDesc* Expr) ** called recursively from the preprocessor. */ { - *Expr = StaticConstAbsIntExpr (hie2); + *Expr = NoCodeConstAbsIntExpr (hie2); while (CurTok.Tok == TOK_BOOL_AND) { /* Skip the && */ NextToken (); /* Get rhs */ - ExprDesc Expr2 = StaticConstAbsIntExpr (hie2); + ExprDesc Expr2 = NoCodeConstAbsIntExpr (hie2); /* Combine the two */ Expr->IVal = (Expr->IVal && Expr2.IVal); @@ -3171,14 +3171,14 @@ static void hieOrPP (ExprDesc *Expr) ** called recursively from the preprocessor. */ { - *Expr = StaticConstAbsIntExpr (hieAndPP); + *Expr = NoCodeConstAbsIntExpr (hieAndPP); while (CurTok.Tok == TOK_BOOL_OR) { /* Skip the && */ NextToken (); /* Get rhs */ - ExprDesc Expr2 = StaticConstAbsIntExpr (hieAndPP); + ExprDesc Expr2 = NoCodeConstAbsIntExpr (hieAndPP); /* Combine the two */ Expr->IVal = (Expr->IVal || Expr2.IVal); @@ -4047,11 +4047,11 @@ void BoolExpr (void (*Func) (ExprDesc*), ExprDesc* Expr) -ExprDesc StaticConstExpr (void (*Func) (ExprDesc*)) -/* Will evaluate an expression via the given function. If the result is not a -** static constant expression, a diagnostic will be printed, and the value is -** replaced by a constant one to make sure there are no internal errors that -** result from this input error. +ExprDesc NoCodeConstExpr (void (*Func) (ExprDesc*)) +/* Get an expression evaluated via the given function. If the result is not a +** constant expression without runtime code generated, a diagnostic will be +** printed, and the value is replaced by a constant one to make sure there are +** no internal errors that result from this input error. */ { ExprDesc Expr; @@ -4071,11 +4071,11 @@ ExprDesc StaticConstExpr (void (*Func) (ExprDesc*)) -ExprDesc StaticConstAbsIntExpr (void (*Func) (ExprDesc*)) -/* Will evaluate an expression via the given function. If the result is not a -** static constant numeric integer value, a diagnostic will be printed, and the -** value is replaced by a constant one to make sure there are no internal -** errors that result from this input error. +ExprDesc NoCodeConstAbsIntExpr (void (*Func) (ExprDesc*)) +/* Get an expression evaluated via the given function. If the result is not a +** constant numeric integer value without runtime code generated, a diagnostic +** will be printed, and the value is replaced by a constant one to make sure +** there are no internal errors that result from this input error. */ { ExprDesc Expr; diff --git a/src/cc65/expr.h b/src/cc65/expr.h index 8f7eb6f09..806a376bb 100644 --- a/src/cc65/expr.h +++ b/src/cc65/expr.h @@ -61,18 +61,18 @@ void BoolExpr (void (*Func) (ExprDesc*), ExprDesc* Expr); ** are no internal errors that result from this input error. */ -ExprDesc StaticConstExpr (void (*Func) (ExprDesc*)); +ExprDesc NoCodeConstExpr (void (*Func) (ExprDesc*)); /* Get an expression evaluated via the given function. If the result is not a -** static constant expression, a diagnostic will be printed, and the value is -** replaced by a constant one to make sure there are no internal errors that -** result from this input error. +** constant expression without runtime code generated, a diagnostic will be +** printed, and the value is replaced by a constant one to make sure there are +** no internal errors that result from this input error. */ -ExprDesc StaticConstAbsIntExpr (void (*Func) (ExprDesc*)); -/* Get an expression evaluate via the given function. If the result is not a -** static constant numeric integer value, a diagnostic will be printed, and the -** value is replaced by a constant one to make sure there are no internal -** errors that result from this input error. +ExprDesc NoCodeConstAbsIntExpr (void (*Func) (ExprDesc*)); +/* Get an expression evaluated via the given function. If the result is not a +** constant numeric integer value without runtime code generated, a diagnostic +** will be printed, and the value is replaced by a constant one to make sure +** there are no internal errors that result from this input error. */ void hie10 (ExprDesc* lval); diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 2d2f316d7..cc160c1c3 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1076,7 +1076,7 @@ static int DoIf (int Skip) NextToken (); /* Call the expression parser */ - ExprDesc Expr = StaticConstExpr (hie1); + ExprDesc Expr = NoCodeConstExpr (hie1); /* End preprocessing mode */ Preprocessing = 0; diff --git a/src/cc65/preproc.h b/src/cc65/preproc.h index 464b02337..1487179f4 100644 --- a/src/cc65/preproc.h +++ b/src/cc65/preproc.h @@ -44,7 +44,7 @@ -/* Set when the preprocessor calls StaticConstExpr() recursively */ +/* Set when the preprocessor calls NoCodeConstExpr() recursively */ extern unsigned char Preprocessing; diff --git a/src/cc65/staticassert.c b/src/cc65/staticassert.c index 3372c59a1..1bf8dd4c5 100644 --- a/src/cc65/staticassert.c +++ b/src/cc65/staticassert.c @@ -65,7 +65,7 @@ void ParseStaticAssert () } /* Parse assertion condition */ - Expr = StaticConstAbsIntExpr (hie1); + Expr = NoCodeConstAbsIntExpr (hie1); failed = !Expr.IVal; /* If there is a comma, we also have an error message. The message is optional because we diff --git a/src/cc65/swstmt.c b/src/cc65/swstmt.c index 559e168c3..3878f7b67 100644 --- a/src/cc65/swstmt.c +++ b/src/cc65/swstmt.c @@ -216,7 +216,7 @@ void CaseLabel (void) NextToken (); /* Read the selector expression */ - CaseExpr = StaticConstAbsIntExpr (hie1); + CaseExpr = NoCodeConstAbsIntExpr (hie1); Val = CaseExpr.IVal; /* Now check if we're inside a switch statement */ From d87846e1e1d1f083a1f01be41e4514a15cdd2dbd Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 30 Aug 2020 22:12:30 +0800 Subject: [PATCH 0461/2710] Improved comments according to PR reviews. --- src/cc65/exprdesc.h | 86 +++++++++++++++++++++++++++++++-------------- 1 file changed, 60 insertions(+), 26 deletions(-) diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index 68db8b2fe..f04be6a8d 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -65,16 +65,16 @@ enum { ** - E_LOC_<else> refers to any other than E_LOC_NONE and E_LOC_PRIMARY. ** - E_LOC_EXPR can be regarded as a generalized E_LOC_<else>. ** - E_LOC_NONE can be regarded as E_LOC_PRIMARY + E_ADDRESS_OF unless - ** remarked otherwise (see below). + ** remarked otherwise (see below). ** - An E_LOC_NONE value is not considered to be an "address". ** - ref-load doesn't change the location, while rval-load puts into the - ** primary register a "temporary" that is the straight integer rvalue or - ** a "delegate" to the real rvalue somewhere else. + ** primary register a "temporary" that is the straight integer rvalue or + ** a "delegate" to the real rvalue somewhere else. ** - ref-load doesn't change the rval/lval category of the expression, - ** while rval-load converts it to an rvalue if it wasn't. + ** while rval-load converts it to an rvalue if it wasn't. ** - In practice, ref-load is unimplemented, and can be simulated with - ** adding E_ADDRESS_OF temporaily through LoadExpr + FinalizeLoad, - ** whilst val-load is done with LoadExpr + FinalizeRValLoad. + ** adding E_ADDRESS_OF temporaily through LoadExpr + FinalizeLoad, + ** whilst val-load is done with LoadExpr + FinalizeRValLoad. ** ** E_LOC_NONE -- ref-load -> + E_LOADED (int rvalue) ** E_LOC_PRIMARY -- ref-load -> + E_LOADED (unchanged) @@ -110,7 +110,7 @@ enum { E_LOC_CONST = E_LOC_NONE | E_LOC_ABS | E_LOC_GLOBAL | E_LOC_STATIC | E_LOC_REGISTER | E_LOC_LITERAL | E_LOC_CODE, - /* Not-so-immutable location addresses (stack offsets can change) */ + /* Not-so-immutable location addresses (stack offsets may change dynamically) */ E_LOC_QUASICONST = E_LOC_CONST | E_LOC_STACK, /* Expression type modifiers */ @@ -129,33 +129,67 @@ enum { /* Optimization hints */ E_MASK_NEED = 0x030000, - E_NEED_EAX = 0x000000, /* Expression needs to be loaded in Primary */ - E_NEED_NONE = 0x010000, /* Expression value is unused */ + E_NEED_EAX = 0x000000, /* Expression result needs to be loaded in Primary */ + E_NEED_NONE = 0x010000, /* Expression result is unused */ E_NEED_TEST = 0x020000, /* Expression needs a test to set cc */ /* Expression evaluation requirements. ** Usage: (Flags & E_EVAL_<Flag>) == E_EVAL_<Flag> + ** + ** Remark: + ** - Expression result, that is the "final value" of the expression, is no + ** more than one of the effects of the whole expression. Effects other + ** than it are usually consided "side-effects" in this regard. + ** - The compiler front end cannot know things determined by the linker, + ** such as the actual address of an object with static storage. What it + ** can know is categorized as "compiler-known" here. + ** - The concept "immutable" here means that once something is determined + ** (not necessarily by the compiler), it will never change. This is not + ** the same meaning as the "constant" word in the C standard. + ** - The concept "compile-time" ( not to be confued with "compiler-known"), + ** or "static" (compared to "run-time" as in "_Static_assert" in C, not + ** to be confused with the "static" storage) here means that something + ** has no run-time behaviors, enforced by the fact that it generates no + ** target code (hence "no-code"). It is closely related to the concepts + ** above but not the same. + ** - An "unevaluated" expression is special and different from the above: + ** while it generates no code, cannot change its "value" (it actually has + ** no value), and must be completely handled by the compiler front-end, + ** it is unique in that it is not "evaluated" while the others are, and + ** the codegen routine of such an expression is usually separated from + ** the normally evaluated ones. Therefore it is treated differently from + ** the above and uses a separate flag that implies none of the above. + ** - The "maybe-unused" flag is to suppress the checking and warning on + ** expressions with no effects. It doesn't have any special meanings + ** beyond that, and is independent from the E_NEED_<flag>s. All + ** "unevaluated" expressions are flagged as "maybe-unused" just to + ** avoid unnecessary warnings. + ** + ** Relationship of some concepts: + ** - "no-code" implies "no-side-effects" + ** - "immutable" = "compiler-known" OR "no-code" + ** - "constant expression" in C = "compiler-known" AND "no-code", with minor differences */ - E_MASK_EVAL = 0xFC0000, - E_EVAL_NONE = 0x000000, /* No requirements */ - E_EVAL_CONST = 0x040000, /* Result must be immutable */ - E_EVAL_COMPILE_TIME = 0x0C0000, /* Result must be known at compile time */ - E_EVAL_PURE = 0x100000, /* Evaluation must have no side effects */ - E_EVAL_STATIC = 0x340000, /* Evaluation must generate no code */ - E_EVAL_MAYBE_UNUSED = 0x400000, /* Result may be unused */ - E_EVAL_UNEVAL = 0xC00000, /* Expression is unevaluated */ + E_MASK_EVAL = 0xFC0000, + E_EVAL_NONE = 0x000000, /* No requirements */ + E_EVAL_IMMUTABLE_RESULT = 0x040000, /* Expression result must be immutable */ + E_EVAL_COMPILER_KNOWN = 0x0C0000, /* Expression result must be known to the compiler */ + E_EVAL_NO_SIDE_EFFECTS = 0x100000, /* Evaluation must have no side effects */ + E_EVAL_NO_CODE = 0x340000, /* Evaluation must generate no code */ + E_EVAL_MAYBE_UNUSED = 0x400000, /* Expression result may be unused */ + E_EVAL_UNEVAL = 0xC00000, /* Expression is unevaluated */ - /* Expression must be static and have result known at compile time */ - E_EVAL_C_CONST = E_EVAL_COMPILE_TIME | E_EVAL_STATIC, + /* Expression result must be known to the compiler and generate no code to load */ + E_EVAL_C_CONST = E_EVAL_COMPILER_KNOWN | E_EVAL_NO_CODE, - /* Flags to keep in subexpressions */ - E_MASK_KEEP_SUBEXPR = E_MASK_EVAL, + /* Flags to keep in subexpressions of most operations other than ternary */ + E_MASK_KEEP_SUBEXPR = E_MASK_EVAL, - /* Flags to keep in ternary subexpressions */ - E_MASK_KEEP_RESULT = E_MASK_NEED | E_MASK_EVAL, + /* Flags to keep for the two result subexpressions of the ternary operation */ + E_MASK_KEEP_RESULT = E_MASK_NEED | E_MASK_EVAL, /* Flags to keep when using the ED_Make functions */ - E_MASK_KEEP_MAKE = E_HAVE_MARKS | E_MASK_KEEP_RESULT, + E_MASK_KEEP_MAKE = E_HAVE_MARKS | E_MASK_KEEP_RESULT, }; /* Forward */ @@ -420,10 +454,10 @@ int ED_YetToLoad (const ExprDesc* Expr); INLINE int ED_NeedsConst (const ExprDesc* Expr) /* Check if the expression need be immutable */ { - return (Expr->Flags & E_EVAL_CONST) == E_EVAL_CONST; + return (Expr->Flags & E_EVAL_IMMUTABLE_RESULT) == E_EVAL_IMMUTABLE_RESULT; } #else -# define ED_NeedsConst(Expr) (((Expr)->Flags & E_EVAL_CONST) == E_EVAL_CONST) +# define ED_NeedsConst(Expr) (((Expr)->Flags & E_EVAL_IMMUTABLE_RESULT) == E_EVAL_IMMUTABLE_RESULT) #endif void ED_MarkForUneval (ExprDesc* Expr); From abcc2a8f1a06083dd8847dab5fd974cd50eba4d8 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 20 Aug 2020 07:46:08 +0800 Subject: [PATCH 0462/2710] Disallowed void arrays of elements of variant sizes. --- src/cc65/declare.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 6aff1960e..e32c880cc 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2389,6 +2389,11 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) } } + /* Size of 'void' elements are determined after initialization */ + if (ElementSize == 0) { + ElementSize = SizeOf (ElementType); + } + if (ElementCount == UNSPECIFIED) { /* Number of elements determined by initializer */ SetElementCount (T, Count); @@ -2695,7 +2700,11 @@ static unsigned ParseVoidInit (Type* T) ConsumeRCurly (); /* Number of bytes determined by initializer */ - T->A.U = Size; + if (T->A.U != 0 && T->A.U != Size) { + Error ("'void' array initialized with elements of variant sizes"); + } else { + T->A.U = Size; + } /* Return the number of bytes initialized */ return Size; From 8541f18340f01cece75fbffea3f3d8febd7cd7f9 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 26 Aug 2020 00:12:23 +0800 Subject: [PATCH 0463/2710] Improved diagnostic info on assignment to void types. --- src/cc65/datatype.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 9efb142ee..522b653c6 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -903,6 +903,7 @@ unsigned TypeOf (const Type* T) /* Address of ... */ return CF_INT | CF_UNSIGNED; + case T_VOID: case T_ENUM: /* Incomplete enum type */ Error ("Incomplete type '%s'", GetFullTypeName (T)); From f1161daee91890aeb4f028fe81637a4bf73079f3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 30 Aug 2020 02:30:43 +0800 Subject: [PATCH 0464/2710] Recursively checking for incomplete/unknown-sized types. --- src/cc65/datatype.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 522b653c6..c5fb784a2 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -979,7 +979,7 @@ int IsClassIncomplete (const Type* T) /* Return true if this is an object type lacking size info */ { if (IsTypeArray (T)) { - return GetElementCount (T) == UNSPECIFIED; + return GetElementCount (T) == UNSPECIFIED || IsClassIncomplete (T + 1); } return IsTypeVoid (T) || IsIncompleteESUType (T); } @@ -1072,7 +1072,7 @@ int HasUnknownSize (const Type* T) /* Return true if this is an incomplete ESU type or an array of unknown size */ { if (IsTypeArray (T)) { - return GetElementCount (T) == UNSPECIFIED; + return GetElementCount (T) == UNSPECIFIED || HasUnknownSize (T + 1); } return IsIncompleteESUType (T); } From 8b580e1191cad7d6da0ef97be60105d659514d6e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 30 Aug 2020 02:31:09 +0800 Subject: [PATCH 0465/2710] Disabled struct/union fields of 'void' type. --- src/cc65/declare.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index e32c880cc..f65702e91 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -942,8 +942,8 @@ static SymEntry* ParseUnionDecl (const char* Name, unsigned* DSFlags) } } - /* Check for incomplete type */ - if (IsIncompleteESUType (Decl.Type)) { + /* Check for incomplete types including 'void' */ + if (IsClassIncomplete (Decl.Type)) { Error ("Field '%s' has incomplete type '%s'", Decl.Ident, GetFullTypeName (Decl.Type)); @@ -1142,8 +1142,8 @@ static SymEntry* ParseStructDecl (const char* Name, unsigned* DSFlags) } } - /* Check for incomplete type */ - if (IsIncompleteESUType (Decl.Type)) { + /* Check for incomplete types including 'void' */ + if (IsClassIncomplete (Decl.Type)) { Error ("Field '%s' has incomplete type '%s'", Decl.Ident, GetFullTypeName (Decl.Type)); From c0a873e0c8198a1c0111e766f15e028a527c01bb Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 27 Aug 2020 08:02:05 +0800 Subject: [PATCH 0466/2710] Reduced exess errors on wrong initializations with curly braces. --- src/cc65/expr.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 89c7ff108..75d695623 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -959,7 +959,16 @@ static void Primary (ExprDesc* E) /* Illegal primary. Be sure to skip the token to avoid endless ** error loops. */ - { + if (CurTok.Tok == TOK_LCURLY) { + /* Statement block */ + NextToken (); + Error ("Expression expected"); + hie0 (E); + if (CurTok.Tok == TOK_RCURLY) { + NextToken (); + } + break; + } else { /* Let's see if this is a C99-style declaration */ DeclSpec Spec; InitDeclSpec (&Spec); From 74def4608aab0065d118e4a072e8aab9b6918cd6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 31 Aug 2020 02:30:12 +0800 Subject: [PATCH 0467/2710] The 'E_NEED_TEST' flag shouldn't be overwritten when loading the expression result. --- src/cc65/expr.c | 15 ++++++++++----- src/cc65/exprdesc.c | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index e627b6606..0b34ba237 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3460,11 +3460,6 @@ static void hieQuest (ExprDesc* Expr) int Expr3IsNULL; /* Expression 3 is a NULL pointer */ Type* ResultType; /* Type of result */ - ED_Init (&Expr2); - Expr2.Flags = Expr->Flags & E_MASK_KEEP_RESULT; - ED_Init (&Expr3); - Expr3.Flags = Expr->Flags & E_MASK_KEEP_RESULT; - /* Call the lower level eval routine */ if (Preprocessing) { ExprWithCheck (hieOrPP, Expr); @@ -3476,6 +3471,13 @@ static void hieQuest (ExprDesc* Expr) if (CurTok.Tok == TOK_QUEST) { int ConstantCond = ED_IsConstAbsInt (Expr); + unsigned Flags = Expr->Flags & E_MASK_KEEP_RESULT; + + ED_Init (&Expr2); + Expr2.Flags = Flags; + ED_Init (&Expr3); + Expr3.Flags = Flags; + NextToken (); if (!ConstantCond) { @@ -3616,7 +3618,10 @@ static void hieQuest (ExprDesc* Expr) if (!ConstantCond) { /* Define the final label */ g_defcodelabel (TrueLab); + /* Set up the result expression type */ ED_FinalizeRValLoad (Expr); + /* Restore the original evaluation flags */ + Expr->Flags = (Expr->Flags & ~E_MASK_KEEP_RESULT) | Flags; } else { if (Expr->IVal != 0) { *Expr = Expr2; diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index c3f4c63f7..ac19873e7 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -266,7 +266,7 @@ ExprDesc* ED_FinalizeRValLoad (ExprDesc* Expr) { Expr->Sym = 0; Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE | E_BITFIELD | E_ADDRESS_OF); - Expr->Flags &= ~(E_NEED_TEST | E_CC_SET); + Expr->Flags &= ~E_CC_SET; Expr->Flags |= (E_LOC_PRIMARY | E_RTYPE_RVAL); Expr->Name = 0; Expr->IVal = 0; /* No offset */ From 9398e1cd33496e9fcc61b9db386f684b0da1946b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 23 Aug 2020 01:35:06 +0800 Subject: [PATCH 0468/2710] Use a dedicated label pool for literals. --- src/cc65/asmlabel.c | 29 +++++++++++++++++++++++ src/cc65/asmlabel.h | 8 +++++++ src/cc65/codegen.c | 57 ++++++++++++++++++++++++++++++--------------- src/cc65/codegen.h | 9 ++++--- src/cc65/declare.c | 8 +++++-- src/cc65/exprdesc.c | 4 ++-- src/cc65/litpool.c | 8 +++---- src/cc65/loadexpr.c | 16 +++++++++---- 8 files changed, 105 insertions(+), 34 deletions(-) diff --git a/src/cc65/asmlabel.c b/src/cc65/asmlabel.c index 09aee3b92..1dda96fb0 100644 --- a/src/cc65/asmlabel.c +++ b/src/cc65/asmlabel.c @@ -98,3 +98,32 @@ int IsLocalLabelName (const char* Name) /* Local label name */ return 1; } + + + +unsigned GetPooledLiteralLabel (void) +/* Get an unused literal label. Will never return zero. */ +{ + /* Number to generate unique labels */ + static unsigned NextLabel = 0; + + /* Check for an overflow */ + if (NextLabel >= 0xFFFF) { + Internal ("Literal label overflow"); + } + + /* Return the next label */ + return ++NextLabel; +} + + + +const char* PooledLiteralLabelName (unsigned L) +/* Make a litral label name from the given label number. The label name will be +** created in static storage and overwritten when calling the function again. +*/ +{ + static char Buf[64]; + sprintf (Buf, "S%04X", L); + return Buf; +} diff --git a/src/cc65/asmlabel.h b/src/cc65/asmlabel.h index 4a76643a5..31b1f311a 100644 --- a/src/cc65/asmlabel.h +++ b/src/cc65/asmlabel.h @@ -56,6 +56,14 @@ const char* LocalLabelName (unsigned L); int IsLocalLabelName (const char* Name); /* Return true if Name is the name of a local label */ +unsigned GetPooledLiteralLabel (void); +/* Get an unused literal label. Will never return zero. */ + +const char* PooledLiteralLabelName (unsigned L); +/* Make a litral label name from the given label number. The label name will be +** created in static storage and overwritten when calling the function again. +*/ + /* End of asmlabel.h */ diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 48cf02319..b48d815d8 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -124,6 +124,16 @@ static const char* GetLabelName (unsigned Flags, uintptr_t Label, long Offs) } break; + case CF_LITERAL: + /* Literal */ + /* Static memory cell */ + if (Offs) { + xsprintf (Buf, sizeof (Buf), "%s%+ld", PooledLiteralLabelName (Label), Offs); + } else { + xsprintf (Buf, sizeof (Buf), "%s", PooledLiteralLabelName (Label)); + } + break; + case CF_ABSOLUTE: /* Absolute address */ xsprintf (Buf, sizeof (Buf), "$%04X", (unsigned)((Label+Offs) & 0xFFFF)); @@ -355,24 +365,6 @@ void g_defdatalabel (unsigned label) -void g_aliasdatalabel (unsigned label, unsigned baselabel, long offs) -/* Define label as a local alias for baselabel+offs */ -{ - /* We need an intermediate buffer here since LocalLabelName uses a - ** static buffer which changes with each call. - */ - StrBuf L = AUTO_STRBUF_INITIALIZER; - SB_AppendStr (&L, LocalLabelName (label)); - SB_Terminate (&L); - AddDataLine ("%s\t:=\t%s+%ld", - SB_GetConstBuf (&L), - LocalLabelName (baselabel), - offs); - SB_Done (&L); -} - - - /*****************************************************************************/ /* Functions handling global labels */ /*****************************************************************************/ @@ -388,6 +380,33 @@ void g_defgloblabel (const char* Name) +void g_defliterallabel (unsigned label) +/* Define a literal data label */ +{ + /* Literal labels are always data labels */ + AddDataLine ("%s:", PooledLiteralLabelName (label)); +} + + + +void g_aliasliterallabel (unsigned label, unsigned baselabel, long offs) +/* Define label as an alias for baselabel+offs */ +{ + /* We need an intermediate buffer here since LocalLabelName uses a + ** static buffer which changes with each call. + */ + StrBuf L = AUTO_STRBUF_INITIALIZER; + SB_AppendStr (&L, PooledLiteralLabelName (label)); + SB_Terminate (&L); + AddDataLine ("%s\t:=\t%s+%ld", + SB_GetConstBuf (&L), + PooledLiteralLabelName (baselabel), + offs); + SB_Done (&L); +} + + + void g_defexport (const char* Name, int ZP) /* Export the given label */ { @@ -2364,7 +2383,7 @@ void g_call (unsigned Flags, const char* Label, unsigned ArgSize) void g_callind (unsigned Flags, unsigned ArgSize, int Offs) /* Call subroutine indirect */ { - if ((Flags & CF_STACK) == 0) { + if ((Flags & CF_ADDRMASK) != CF_STACK) { /* Address is in a/x */ if ((Flags & CF_FIXARGC) == 0) { /* Pass arg count */ diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index d946a9a10..3054a39b3 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -148,9 +148,6 @@ void g_defcodelabel (unsigned label); void g_defdatalabel (unsigned label); /* Define a local data label */ -void g_aliasdatalabel (unsigned label, unsigned baselabel, long offs); -/* Define label as a local alias for baselabel+offs */ - /*****************************************************************************/ @@ -162,6 +159,12 @@ void g_aliasdatalabel (unsigned label, unsigned baselabel, long offs); void g_defgloblabel (const char* Name); /* Define a global label with the given name */ +void g_defliterallabel (unsigned label); +/* Define a literal data label */ + +void g_aliasliterallabel (unsigned label, unsigned baselabel, long offs); +/* Define label as an alias for baselabel+offs */ + void g_defexport (const char* Name, int ZP); /* Export the given label */ diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 6953afa3c..e81c761ed 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2185,11 +2185,15 @@ static void DefineData (ExprDesc* Expr) break; case E_LOC_STATIC: - case E_LOC_LITERAL: - /* Static variable or literal in the literal pool */ + /* Static variable */ g_defdata (CF_STATIC, Expr->Name, Expr->IVal); break; + case E_LOC_LITERAL: + /* Literal in the literal pool */ + g_defdata (CF_LITERAL, Expr->Name, Expr->IVal); + break; + case E_LOC_REGISTER: /* Register variable. Taking the address is usually not ** allowed. diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index ac19873e7..b9b5ba5fb 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -190,9 +190,9 @@ const char* ED_GetLabelName (const ExprDesc* Expr, long Offs) case E_LOC_LITERAL: /* Literal in the literal pool */ if (Offs) { - SB_Printf (&Buf, "%s%+ld", LocalLabelName (Expr->Name), Offs); + SB_Printf (&Buf, "%s%+ld", PooledLiteralLabelName (Expr->Name), Offs); } else { - SB_Printf (&Buf, "%s", LocalLabelName (Expr->Name)); + SB_Printf (&Buf, "%s", PooledLiteralLabelName (Expr->Name)); } break; diff --git a/src/cc65/litpool.c b/src/cc65/litpool.c index eb31c7ecc..95228179d 100644 --- a/src/cc65/litpool.c +++ b/src/cc65/litpool.c @@ -99,7 +99,7 @@ static Literal* NewLiteral (const void* Buf, unsigned Len) Literal* L = xmalloc (sizeof (*L)); /* Initialize the fields */ - L->Label = GetLocalLabel (); + L->Label = GetPooledLiteralLabel (); L->RefCount = 0; L->Output = 0; SB_Init (&L->Data); @@ -130,7 +130,7 @@ static void OutputLiteral (Literal* L) TranslateLiteral (L); /* Define the label for the literal */ - g_defdatalabel (L->Label); + g_defliterallabel (L->Label); /* Output the literal data */ g_defbytes (SB_GetConstBuf (&L->Data), SB_GetLen (&L->Data)); @@ -423,12 +423,12 @@ static void OutputReadOnlyLiterals (Collection* Literals) if (C != 0) { /* This literal is part of a longer literal, merge them */ - g_aliasdatalabel (L->Label, C->Label, GetLiteralSize (C) - GetLiteralSize (L)); + g_aliasliterallabel (L->Label, C->Label, GetLiteralSize (C) - GetLiteralSize (L)); } else { /* Define the label for the literal */ - g_defdatalabel (L->Label); + g_defliterallabel (L->Label); /* Output the literal data */ g_defbytes (SB_GetConstBuf (&L->Data), SB_GetLen (&L->Data)); diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index 17b0dd0fe..07acb3cbc 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -64,11 +64,15 @@ static void LoadAddress (unsigned Flags, ExprDesc* Expr) break; case E_LOC_STATIC: - case E_LOC_LITERAL: - /* Static symbol or literal, load address */ + /* Static symbol, load address */ g_getimmed ((Flags | CF_STATIC) & ~CF_CONST, Expr->Name, Expr->IVal); break; + case E_LOC_LITERAL: + /* Literal, load address */ + g_getimmed ((Flags | CF_LITERAL) & ~CF_CONST, Expr->Name, Expr->IVal); + break; + case E_LOC_REGISTER: /* Register variable. Taking the address is usually not ** allowed. @@ -183,11 +187,15 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) break; case E_LOC_STATIC: - case E_LOC_LITERAL: - /* Static variable or literal in the literal pool */ + /* Static variable */ g_getstatic (Flags | CF_STATIC, Expr->Name, Expr->IVal); break; + case E_LOC_LITERAL: + /* Literal in the literal pool */ + g_getstatic (Flags | CF_LITERAL, Expr->Name, Expr->IVal); + break; + case E_LOC_REGISTER: /* Register variable */ g_getstatic (Flags | CF_REGVAR, Expr->Name, Expr->IVal); From 6b64b4339579839ba919bfb1ba52a4e065d9a798 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 23 Aug 2020 01:35:11 +0800 Subject: [PATCH 0469/2710] Made local static data use a separated label pool from the code label pool. --- src/cc65/asmlabel.c | 29 +++++++++++++++++++++++++++++ src/cc65/asmlabel.h | 8 ++++++++ src/cc65/asmstmt.c | 2 +- src/cc65/codegen.c | 21 +++++++++++++++------ src/cc65/declare.c | 5 +++++ src/cc65/expr.c | 15 ++++++++++----- src/cc65/exprdesc.c | 20 +++++++++++++++++--- src/cc65/loadexpr.c | 10 ++++++++++ src/cc65/locals.c | 20 ++++++++++---------- src/cc65/symtab.c | 10 +++++----- 10 files changed, 110 insertions(+), 30 deletions(-) diff --git a/src/cc65/asmlabel.c b/src/cc65/asmlabel.c index 1dda96fb0..f561036ce 100644 --- a/src/cc65/asmlabel.c +++ b/src/cc65/asmlabel.c @@ -101,6 +101,35 @@ int IsLocalLabelName (const char* Name) +unsigned GetLocalDataLabel (void) +/* Get an unused local data label. Will never return zero. */ +{ + /* Number to generate unique labels */ + static unsigned NextLabel = 0; + + /* Check for an overflow */ + if (NextLabel >= 0xFFFF) { + Internal ("Local data label overflow"); + } + + /* Return the next label */ + return ++NextLabel; +} + + + +const char* LocalDataLabelName (unsigned L) +/* Make a label name from the given data label number. The label name will be +** created in static storage and overwritten when calling the function again. +*/ +{ + static char Buf[64]; + sprintf (Buf, "M%04X", L); + return Buf; +} + + + unsigned GetPooledLiteralLabel (void) /* Get an unused literal label. Will never return zero. */ { diff --git a/src/cc65/asmlabel.h b/src/cc65/asmlabel.h index 31b1f311a..a79071400 100644 --- a/src/cc65/asmlabel.h +++ b/src/cc65/asmlabel.h @@ -56,6 +56,14 @@ const char* LocalLabelName (unsigned L); int IsLocalLabelName (const char* Name); /* Return true if Name is the name of a local label */ +unsigned GetLocalDataLabel (void); +/* Get an unused local data label. Will never return zero. */ + +const char* LocalDataLabelName (unsigned L); +/* Make a label name from the given data label number. The label name will be +** created in static storage and overwritten when calling the function again. +*/ + unsigned GetPooledLiteralLabel (void); /* Get an unused literal label. Will never return zero. */ diff --git a/src/cc65/asmstmt.c b/src/cc65/asmstmt.c index 9dd1f906a..bf5a0815b 100644 --- a/src/cc65/asmstmt.c +++ b/src/cc65/asmstmt.c @@ -286,7 +286,7 @@ static void ParseLabelArg (StrBuf* T, unsigned Arg attribute ((unused))) } else { - /* Add a new label symbol if we don't have one until now */ + /* Add a new C label symbol if we don't have one until now */ SymEntry* Entry = AddLabelSym (CurTok.Ident, SC_REF); /* Append the label name to the buffer */ diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index b48d815d8..031e4e81a 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -107,11 +107,11 @@ static const char* GetLabelName (unsigned Flags, uintptr_t Label, long Offs) break; case CF_STATIC: - /* Static memory cell */ + /* Local static memory cell */ if (Offs) { - xsprintf (Buf, sizeof (Buf), "%s%+ld", LocalLabelName (Label), Offs); + xsprintf (Buf, sizeof (Buf), "%s%+ld", LocalDataLabelName (Label), Offs); } else { - xsprintf (Buf, sizeof (Buf), "%s", LocalLabelName (Label)); + xsprintf (Buf, sizeof (Buf), "%s", LocalDataLabelName (Label)); } break; @@ -144,6 +144,15 @@ static const char* GetLabelName (unsigned Flags, uintptr_t Label, long Offs) xsprintf (Buf, sizeof (Buf), "regbank+%u", (unsigned)((Label+Offs) & 0xFFFF)); break; + case CF_CODE: + /* Code label location */ + if (Offs) { + xsprintf (Buf, sizeof (Buf), "%s%+ld", LocalLabelName (Label), Offs); + } else { + xsprintf (Buf, sizeof (Buf), "%s", LocalLabelName (Label)); + } + break; + default: Internal ("Invalid address flags: %04X", Flags); } @@ -360,7 +369,7 @@ void g_defcodelabel (unsigned label) void g_defdatalabel (unsigned label) /* Define a local data label */ { - AddDataLine ("%s:", LocalLabelName (label)); + AddDataLine ("%s:", LocalDataLabelName (label)); } @@ -2453,11 +2462,11 @@ void g_lateadjustSP (unsigned label) /* Adjust stack based on non-immediate data */ { AddCodeLine ("pha"); - AddCodeLine ("lda %s", LocalLabelName (label)); + AddCodeLine ("lda %s", LocalDataLabelName (label)); AddCodeLine ("clc"); AddCodeLine ("adc sp"); AddCodeLine ("sta sp"); - AddCodeLine ("lda %s+1", LocalLabelName (label)); + AddCodeLine ("lda %s+1", LocalDataLabelName (label)); AddCodeLine ("adc sp+1"); AddCodeLine ("sta sp+1"); AddCodeLine ("pla"); diff --git a/src/cc65/declare.c b/src/cc65/declare.c index e81c761ed..d6286e62d 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2204,6 +2204,11 @@ static void DefineData (ExprDesc* Expr) g_defdata (CF_REGVAR, Expr->Name, Expr->IVal); break; + case E_LOC_CODE: + /* Code label location */ + g_defdata (CF_CODE, Expr->Name, Expr->IVal); + break; + case E_LOC_STACK: case E_LOC_PRIMARY: case E_LOC_EXPR: diff --git a/src/cc65/expr.c b/src/cc65/expr.c index d1dfa62ec..44b0f49be 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -92,6 +92,7 @@ static unsigned GlobalModeFlags (const ExprDesc* Expr) case E_LOC_PRIMARY: return CF_PRIMARY; case E_LOC_EXPR: return CF_EXPR; case E_LOC_LITERAL: return CF_LITERAL; + case E_LOC_CODE: return CF_CODE; default: Internal ("GlobalModeFlags: Invalid location flags value: 0x%04X", Expr->Flags); /* NOTREACHED */ @@ -794,7 +795,7 @@ static void Primary (ExprDesc* E) NextToken (); Entry = AddLabelSym (CurTok.Ident, SC_REF | SC_GOTO_IND); /* output its label */ - E->Flags = E_RTYPE_RVAL | E_LOC_STATIC | E_ADDRESS_OF; + E->Flags = E_RTYPE_RVAL | E_LOC_CODE | E_ADDRESS_OF; E->Name = Entry->V.L.Label; E->Type = PointerTo (type_void); NextToken (); @@ -1545,7 +1546,8 @@ void Store (ExprDesc* Expr, const Type* StoreType) case E_LOC_STATIC: case E_LOC_LITERAL: - /* Static variable or literal in the literal pool */ + case E_LOC_CODE: + /* Static variable, pooled literal or code label location */ g_putstatic (Flags, Expr->Name, Expr->IVal); break; @@ -1624,7 +1626,8 @@ static void PreInc (ExprDesc* Expr) case E_LOC_STATIC: case E_LOC_LITERAL: - /* Static variable or literal in the literal pool */ + case E_LOC_CODE: + /* Static variable, pooled literal or code label location */ g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val); break; @@ -1700,7 +1703,8 @@ static void PreDec (ExprDesc* Expr) case E_LOC_STATIC: case E_LOC_LITERAL: - /* Static variable or literal in the literal pool */ + case E_LOC_CODE: + /* Static variable, pooled literal or code label location */ g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val); break; @@ -3878,7 +3882,8 @@ static void addsubeq (const GenDesc* Gen, ExprDesc *Expr, const char* Op) case E_LOC_STATIC: case E_LOC_LITERAL: - /* Static variable or literal in the literal pool */ + case E_LOC_CODE: + /* Static variable, pooled literal or code label location */ if (Gen->Tok == TOK_PLUS_ASSIGN) { g_addeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal); } else { diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index b9b5ba5fb..62738bed7 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -196,6 +196,15 @@ const char* ED_GetLabelName (const ExprDesc* Expr, long Offs) } break; + case E_LOC_CODE: + /* Code label location */ + if (Offs) { + SB_Printf (&Buf, "%s%+ld", LocalLabelName (Expr->Name), Offs); + } else { + SB_Printf (&Buf, "%s", LocalLabelName (Expr->Name)); + } + break; + default: Internal ("Invalid location in ED_GetLabelName: 0x%04X", ED_GetLoc (Expr)); } @@ -503,9 +512,9 @@ void PrintExprDesc (FILE* F, ExprDesc* E) Flags &= ~E_LOC_LITERAL; Sep = ','; } - if (Flags & E_RTYPE_LVAL) { - fprintf (F, "%cE_RTYPE_LVAL", Sep); - Flags &= ~E_RTYPE_LVAL; + if (Flags & E_LOC_CODE) { + fprintf (F, "%cE_LOC_CODE", Sep); + Flags &= ~E_LOC_CODE; Sep = ','; } if (Flags & E_BITFIELD) { @@ -523,6 +532,11 @@ void PrintExprDesc (FILE* F, ExprDesc* E) Flags &= ~E_CC_SET; Sep = ','; } + if (Flags & E_RTYPE_LVAL) { + fprintf (F, "%cE_RTYPE_LVAL", Sep); + Flags &= ~E_RTYPE_LVAL; + Sep = ','; + } if (Flags & E_ADDRESS_OF) { fprintf (F, "%cE_ADDRESS_OF", Sep); Flags &= ~E_ADDRESS_OF; diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index 07acb3cbc..95617f596 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -83,6 +83,11 @@ static void LoadAddress (unsigned Flags, ExprDesc* Expr) g_getimmed ((Flags | CF_REGVAR) & ~CF_CONST, Expr->Name, Expr->IVal); break; + case E_LOC_CODE: + /* Code label, load address */ + g_getimmed ((Flags | CF_CODE) & ~CF_CONST, Expr->Name, Expr->IVal); + break; + case E_LOC_STACK: g_leasp (Expr->IVal); break; @@ -201,6 +206,11 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) g_getstatic (Flags | CF_REGVAR, Expr->Name, Expr->IVal); break; + case E_LOC_CODE: + /* Code label location */ + g_getstatic (Flags | CF_CODE, Expr->Name, Expr->IVal); + break; + case E_LOC_STACK: /* Value on the stack */ g_getlocal (Flags, Expr->IVal); diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 255a23b6d..81d0cea09 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -64,31 +64,31 @@ static unsigned AllocLabel (void (*UseSeg) ()) -/* Switch to a segment, define a local label and return it */ +/* Switch to a segment, define a local data label and return it */ { - unsigned Label; + unsigned DataLabel; /* Switch to the segment */ UseSeg (); /* Define the variable label */ - Label = GetLocalLabel (); - g_defdatalabel (Label); + DataLabel = GetLocalDataLabel (); + g_defdatalabel (DataLabel); /* Return the label */ - return Label; + return DataLabel; } -static void AllocStorage (unsigned Label, void (*UseSeg) (), unsigned Size) -/* Reserve Size bytes of BSS storage prefixed by a local label. */ +static void AllocStorage (unsigned DataLabel, void (*UseSeg) (), unsigned Size) +/* Reserve Size bytes of BSS storage prefixed by a local data label. */ { /* Switch to the segment */ UseSeg (); /* Define the variable label */ - g_defdatalabel (Label); + g_defdatalabel (DataLabel); /* Reserve space for the data */ g_res (Size); @@ -301,7 +301,7 @@ static void ParseAutoDecl (Declaration* Decl) Decl->StorageClass = (Decl->StorageClass & ~SC_AUTO) | SC_STATIC; /* Generate a label, but don't define it */ - DataLabel = GetLocalLabel (); + DataLabel = GetLocalDataLabel (); /* Add the symbol to the symbol table. */ Sym = AddLocalSym (Decl->Ident, Decl->Type, Decl->StorageClass, DataLabel); @@ -380,7 +380,7 @@ static void ParseStaticDecl (Declaration* Decl) unsigned Size; /* Generate a label, but don't define it */ - unsigned DataLabel = GetLocalLabel (); + unsigned DataLabel = GetLocalDataLabel (); /* Add the symbol to the symbol table. */ SymEntry* Sym = AddLocalSym (Decl->Ident, Decl->Type, diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 6a02fc0ce..10dc0d3ff 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -931,7 +931,7 @@ DefOrRef* AddDefOrRef (SymEntry* E, unsigned Flags) DOR->Flags = Flags; DOR->StackPtr = StackPtr; DOR->Depth = CollCount (&CurrentFunc->LocalsBlockStack); - DOR->LateSP_Label = GetLocalLabel (); + DOR->LateSP_Label = GetLocalDataLabel (); return DOR; } @@ -953,7 +953,7 @@ unsigned short FindSPAdjustment (const char* Name) SymEntry* AddLabelSym (const char* Name, unsigned Flags) -/* Add a goto label to the label table */ +/* Add a C goto label to the label table */ { unsigned i; DefOrRef *DOR, *NewDOR; @@ -1012,7 +1012,7 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags) /* Optimizer will need the information about the value of SP adjustment ** later, so let's preserve it. */ - E = NewSymEntry (LocalLabelName (DOR->LateSP_Label), SC_SPADJUSTMENT); + E = NewSymEntry (LocalDataLabelName (DOR->LateSP_Label), SC_SPADJUSTMENT); E->V.SPAdjustment = StackPtr - DOR->StackPtr; AddSymEntry (SPAdjustTab, E); } @@ -1134,9 +1134,9 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs Entry->V.L.Label = Offs; SymSetAsmName (Entry); } else if ((Flags & SC_STATIC) == SC_STATIC) { - /* Generate the assembler name from the label number */ + /* Generate the assembler name from the data label number */ Entry->V.L.Label = Offs; - Entry->AsmName = xstrdup (LocalLabelName (Entry->V.L.Label)); + Entry->AsmName = xstrdup (LocalDataLabelName (Entry->V.L.Label)); } else { Internal ("Invalid flags in AddLocalSym: %04X", Flags); } From 28de3423eb205a2f4125c61e47c256c6c4010cff Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 23 Aug 2020 01:35:13 +0800 Subject: [PATCH 0470/2710] Merged some switch cases in code generation subroutines. --- src/cc65/expr.c | 73 ++++++++++++------------------------------------- 1 file changed, 17 insertions(+), 56 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 44b0f49be..38df16faf 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1540,19 +1540,13 @@ void Store (ExprDesc* Expr, const Type* StoreType) break; case E_LOC_GLOBAL: - /* Global variable */ - g_putstatic (Flags, Expr->Name, Expr->IVal); - break; - case E_LOC_STATIC: + case E_LOC_REGISTER: case E_LOC_LITERAL: case E_LOC_CODE: - /* Static variable, pooled literal or code label location */ - g_putstatic (Flags, Expr->Name, Expr->IVal); - break; - - case E_LOC_REGISTER: - /* Register variable */ + /* Global variabl, static variable, register variable, pooled + ** literal or code label location. + */ g_putstatic (Flags, Expr->Name, Expr->IVal); break; @@ -1620,19 +1614,13 @@ static void PreInc (ExprDesc* Expr) break; case E_LOC_GLOBAL: - /* Global variable */ - g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val); - break; - case E_LOC_STATIC: + case E_LOC_REGISTER: case E_LOC_LITERAL: case E_LOC_CODE: - /* Static variable, pooled literal or code label location */ - g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val); - break; - - case E_LOC_REGISTER: - /* Register variable */ + /* Global variabl, static variable, register variable, pooled + ** literal or code label location. + */ g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val); break; @@ -1697,19 +1685,13 @@ static void PreDec (ExprDesc* Expr) break; case E_LOC_GLOBAL: - /* Global variable */ - g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val); - break; - case E_LOC_STATIC: + case E_LOC_REGISTER: case E_LOC_LITERAL: case E_LOC_CODE: - /* Static variable, pooled literal or code label location */ - g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val); - break; - - case E_LOC_REGISTER: - /* Register variable */ + /* Global variabl, static variable, register variable, pooled + ** literal or code label location. + */ g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val); break; @@ -3863,36 +3845,15 @@ static void addsubeq (const GenDesc* Gen, ExprDesc *Expr, const char* Op) switch (ED_GetLoc (Expr)) { case E_LOC_ABS: - /* Absolute numeric addressed variable */ - if (Gen->Tok == TOK_PLUS_ASSIGN) { - g_addeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal); - } else { - g_subeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal); - } - break; - case E_LOC_GLOBAL: - /* Global variable */ - if (Gen->Tok == TOK_PLUS_ASSIGN) { - g_addeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal); - } else { - g_subeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal); - } - break; - case E_LOC_STATIC: + case E_LOC_REGISTER: case E_LOC_LITERAL: case E_LOC_CODE: - /* Static variable, pooled literal or code label location */ - if (Gen->Tok == TOK_PLUS_ASSIGN) { - g_addeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal); - } else { - g_subeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal); - } - break; - - case E_LOC_REGISTER: - /* Register variable */ + /* Absolute numeric addressed variable, global variable, local + ** static variable, register variable, pooled literal or code + ** label location. + */ if (Gen->Tok == TOK_PLUS_ASSIGN) { g_addeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal); } else { From 23795044498cce8f4b821c910f17db33445f99bd Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 31 Aug 2020 20:31:54 +0800 Subject: [PATCH 0471/2710] Fixed AND/OR in certain cases where the 'E_NEED_TEST' flag set for usage only in subexpressions should be cleared. --- src/cc65/expr.c | 6 ++++++ src/cc65/exprdesc.h | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 38df16faf..4071728ac 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3223,6 +3223,9 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) /* Load the value */ LoadExpr (CF_FORCECHAR, Expr); + /* Clear the test flag */ + ED_RequireNoTest (Expr); + /* Remember that the jump is used */ HasFalseJump = 1; @@ -3356,6 +3359,9 @@ static void hieOr (ExprDesc *Expr) /* Get first expr */ LoadExpr (CF_FORCECHAR, Expr); + /* Clear the test flag */ + ED_RequireNoTest (Expr); + if (HasTrueJump == 0) { /* Get a label that we will use for true expressions */ TrueLab = GetLocalLabel(); diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index f04be6a8d..c435b3c38 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -364,6 +364,16 @@ INLINE void ED_RequireTest (ExprDesc* Expr) # define ED_RequireTest(Expr) do { (Expr)->Flags |= E_NEED_TEST; } while (0) #endif +#if defined(HAVE_INLINE) +INLINE void ED_RequireNoTest (ExprDesc* Expr) +/* Mark the expression not for a test. */ +{ + Expr->Flags &= ~E_NEED_TEST; +} +#else +# define ED_RequireNoTest(Expr) do { (Expr)->Flags &= ~E_NEED_TEST; } while (0) +#endif + #if defined(HAVE_INLINE) INLINE int ED_GetNeeds (const ExprDesc* Expr) /* Get flags about what the expression needs. */ From fb6bc275bc500aeb5705cf67fb2955633aec11a7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 31 Aug 2020 20:33:58 +0800 Subject: [PATCH 0472/2710] Fixed evaluation flags propagation to subexpressions in assignments and function calls. --- src/cc65/assignment.c | 3 ++- src/cc65/expr.c | 7 ++++--- src/cc65/stdfunc.c | 24 +++++++++++++----------- 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 1ada3af0b..09a10a642 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -136,10 +136,11 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) void Assignment (ExprDesc* Expr) /* Parse an assignment */ { - ExprDesc Expr2; Type* ltype = Expr->Type; + ExprDesc Expr2; ED_Init (&Expr2); + Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; /* We must have an lvalue for an assignment */ if (ED_IsRVal (Expr)) { diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 4071728ac..b91fab8a8 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -332,7 +332,7 @@ static void WarnConstCompareResult (const ExprDesc* Expr) -static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) +static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) /* Parse a function parameter list, and pass the arguments to the called ** function. Depending on several criteria, this may be done by just pushing ** into each parameter separately, or creating the parameter frame once, and @@ -391,9 +391,10 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall) /* Parse the actual argument list */ while (CurTok.Tok != TOK_RPAREN) { - unsigned Flags; + unsigned Flags; /* Code generator flags, not expression flags */ ExprDesc Expr; ED_Init (&Expr); + Expr.Flags |= ED->Flags & E_MASK_KEEP_SUBEXPR; /* Count arguments */ ++PushedCount; @@ -609,7 +610,7 @@ static void FunctionCall (ExprDesc* Expr) } /* Parse the parameter list */ - ParamSize = FunctionParamList (Func, IsFastcall); + ParamSize = FunctionParamList (Func, IsFastcall, Expr); /* We need the closing paren here */ ConsumeRParen (); diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index 8335177bb..74579212e 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -141,7 +141,7 @@ static long ArrayElementCount (const ArgDesc* Arg) -static void ParseArg (ArgDesc* Arg, Type* Type) +static void ParseArg (ArgDesc* Arg, Type* Type, ExprDesc* Expr) /* Parse one argument but do not push it onto the stack. Make all fields in ** Arg valid. */ @@ -154,6 +154,7 @@ static void ParseArg (ArgDesc* Arg, Type* Type) /* Init expression */ ED_Init (&Arg->Expr); + Arg->Expr.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; /* Read the expression we're going to pass to the function */ MarkedExprWithCheck (hie1, &Arg->Expr); @@ -221,14 +222,14 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) int Offs; /* Argument #1 */ - ParseArg (&Arg1, Arg1Type); + ParseArg (&Arg1, Arg1Type, Expr); g_push (Arg1.Flags, Arg1.Expr.IVal); GetCodePos (&Arg1.End); ParamSize += SizeOf (Arg1Type); ConsumeComma (); /* Argument #2 */ - ParseArg (&Arg2, Arg2Type); + ParseArg (&Arg2, Arg2Type, Expr); g_push (Arg2.Flags, Arg2.Expr.IVal); GetCodePos (&Arg2.End); ParamSize += SizeOf (Arg2Type); @@ -239,7 +240,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** also ignored for the calculation of the parameter size, since it is ** not passed via the stack. */ - ParseArg (&Arg3, Arg3Type); + ParseArg (&Arg3, Arg3Type, Expr); if (Arg3.Flags & CF_CONST) { LoadExpr (CF_NONE, &Arg3.Expr); } @@ -562,7 +563,7 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr) unsigned Label; /* Argument #1 */ - ParseArg (&Arg1, Arg1Type); + ParseArg (&Arg1, Arg1Type, Expr); g_push (Arg1.Flags, Arg1.Expr.IVal); GetCodePos (&Arg1.End); ParamSize += SizeOf (Arg1Type); @@ -571,7 +572,7 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* Argument #2. This argument is special in that we will call another ** function if it is a constant zero. */ - ParseArg (&Arg2, Arg2Type); + ParseArg (&Arg2, Arg2Type, Expr); if ((Arg2.Flags & CF_CONST) != 0 && Arg2.Expr.IVal == 0) { /* Don't call memset, call bzero instead */ MemSet = 0; @@ -588,7 +589,7 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** also ignored for the calculation of the parameter size, since it is ** not passed via the stack. */ - ParseArg (&Arg3, Arg3Type); + ParseArg (&Arg3, Arg3Type, Expr); if (Arg3.Flags & CF_CONST) { LoadExpr (CF_NONE, &Arg3.Expr); } @@ -790,13 +791,13 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr) Arg2Type[1].C = T_CHAR | T_QUAL_CONST; /* Argument #1 */ - ParseArg (&Arg1, Arg1Type); + ParseArg (&Arg1, Arg1Type, Expr); g_push (Arg1.Flags, Arg1.Expr.IVal); ParamSize += SizeOf (Arg1Type); ConsumeComma (); /* Argument #2. */ - ParseArg (&Arg2, Arg2Type); + ParseArg (&Arg2, Arg2Type, Expr); /* Since strcmp is a fastcall function, we must load the ** arg into the primary if it is not already there. This parameter is @@ -990,7 +991,7 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) Arg2Type[1].C = T_CHAR | T_QUAL_CONST; /* Argument #1 */ - ParseArg (&Arg1, Arg1Type); + ParseArg (&Arg1, Arg1Type, Expr); g_push (Arg1.Flags, Arg1.Expr.IVal); GetCodePos (&Arg1.End); ParamSize += SizeOf (Arg1Type); @@ -1001,7 +1002,7 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** also ignored for the calculation of the parameter size, since it is ** not passed via the stack. */ - ParseArg (&Arg2, Arg2Type); + ParseArg (&Arg2, Arg2Type, Expr); if (Arg2.Flags & CF_CONST) { LoadExpr (CF_NONE, &Arg2.Expr); } @@ -1184,6 +1185,7 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) unsigned L; ED_Init (&Arg); + Arg.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; /* Setup the argument type string */ ArgType[1].C = T_CHAR | T_QUAL_CONST; From 2a3d996077453c3171d67223271bd3ed8aaaf926 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 31 Aug 2020 20:41:36 +0800 Subject: [PATCH 0473/2710] Improved test case for PR #1220. --- test/ref/pr1220.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/test/ref/pr1220.c b/test/ref/pr1220.c index 4f88ada73..eb9f7c7f5 100644 --- a/test/ref/pr1220.c +++ b/test/ref/pr1220.c @@ -10,14 +10,14 @@ /* test AND/OR in ternary context */ #define CONTEXT_B(x) do {\ - s = 0, flags = 0,\ - (x ? printf("%3d %2X: 1\n", s, flags) : printf("%3d %2X: 0\n", s, flags));\ + s = 0, flags = 0, t = (x ? 42 : -42),\ + printf("%3d %2X: %d\n", s, flags, t);\ } while (0) int s, t; unsigned flags; -int f(x) +int f(int x) /* The call to this function should be and only be skipped strictly according to ** the short-circuit evaluation rule. */ @@ -31,8 +31,8 @@ int f(x) #define _B f(b) #define _C f(c) #define _D f(d) -#define _T (f(0), -1) -#define _F (f(-1), 0) +#define _T (f(0), 256) +#define _F (f(256), 0) void f0() /* constant short-circuit */ @@ -176,7 +176,7 @@ void f5(int a, int b, int c, int d) void f0_B() /* constant short-circuit */ { - printf("f0()\n"); + printf("f0_B()\n"); CONTEXT_B(_T && _T && _T); CONTEXT_B(_F && _F && _F); @@ -205,7 +205,7 @@ void f0_B() void f1_B(int a, int b, int c) /* AND */ { - printf("f1(%d, %d, %d)\n", a, b, c); + printf("f1_B(%d, %d, %d)\n", a, b, c); CONTEXT_B(_A && _B && _C); @@ -227,7 +227,7 @@ void f1_B(int a, int b, int c) void f2_B(int a, int b, int c) /* OR */ { - printf("f2(%d, %d, %d)\n", a, b, c); + printf("f2_B(%d, %d, %d)\n", a, b, c); CONTEXT_B(_A || _B || _C); @@ -249,7 +249,7 @@ void f2_B(int a, int b, int c) void f3_B(int a, int b, int c, int d) /* AND and OR */ { - printf("f3(%d, %d, %d, %d)\n", a, b, c, d); + printf("f3_B(%d, %d, %d, %d)\n", a, b, c, d); CONTEXT_B(_A && _B || _C && _D); CONTEXT_B(_T && _T || _C && _D); @@ -271,7 +271,7 @@ void f3_B(int a, int b, int c, int d) void f4_B(int a, int b, int c, int d) /* AND as top-level expression inside OR context */ { - printf("f4(%d, %d, %d, %d)\n", a, b, c, d); + printf("f4_B(%d, %d, %d, %d)\n", a, b, c, d); CONTEXT_B((_A && _B) || (_C && _D)); CONTEXT_B((_T && _T) || (_C && _D)); @@ -293,7 +293,7 @@ void f4_B(int a, int b, int c, int d) void f5_B(int a, int b, int c, int d) /* OR as top-level expression inside AND context */ { - printf("f5(%d, %d, %d, %d)\n", a, b, c, d); + printf("f5_B(%d, %d, %d, %d)\n", a, b, c, d); CONTEXT_B((_A || _B) && (_C || _D)); CONTEXT_B((_F || _F) && (_C || _D)); From f45d2515eb9191f21bc21c8449e407ebfb3ee415 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 31 Aug 2020 01:56:57 +0800 Subject: [PATCH 0474/2710] Fixed OptPush1 in case later code would rely on that pushax zeroes register Y. --- src/cc65/coptpush.c | 19 +++++++++++++++++-- src/cc65/coptpush.h | 6 +++--- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/cc65/coptpush.c b/src/cc65/coptpush.c index 5c3daffca..34d794c64 100644 --- a/src/cc65/coptpush.c +++ b/src/cc65/coptpush.c @@ -56,12 +56,14 @@ unsigned OptPush1 (CodeSeg* S) ** ** ldy #xx+2 ** jsr pushwysp +** ldy #$00 ; present if later code expects Y = 0 ** -** saving 3 bytes and several cycles. +** saving several cycles. */ { unsigned I; unsigned Changes = 0; + unsigned R; /* Walk over the entries */ I = 0; @@ -79,7 +81,7 @@ unsigned OptPush1 (CodeSeg* S) (L[1] = CS_GetNextEntry (S, I)) != 0 && !CE_HasLabel (L[1]) && CE_IsCallTo (L[1], "pushax") && - !RegAXUsed (S, I+2)) { + ((R = (GetRegInfo (S, I+2, REG_AXY))) & REG_AX) == 0) { /* Insert new code behind the pushax */ const char* Arg; @@ -94,12 +96,25 @@ unsigned OptPush1 (CodeSeg* S) X = NewCodeEntry (OP65_JSR, AM65_ABS, "pushwysp", 0, L[1]->LI); CS_InsertEntry (S, X, I+3); + /* pushax sets Y = 0 and following code might rely on this */ + if ((R & REG_Y) != 0) { + /* ldy #0 */ + X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (0), 0, L[1]->LI); + CS_InsertEntry (S, X, I+4); + } + /* Delete the old code */ CS_DelEntries (S, I, 2); /* Remember, we had changes */ ++Changes; + /* Skip the handled lines */ + if ((R & REG_Y) == 0) { + ++I; + } else { + I += 2; + } } /* Next entry */ diff --git a/src/cc65/coptpush.h b/src/cc65/coptpush.h index 0d637e824..aa5548517 100644 --- a/src/cc65/coptpush.h +++ b/src/cc65/coptpush.h @@ -52,16 +52,16 @@ unsigned OptPush1 (CodeSeg* S); /* Given a sequence ** -** ldy #xx ** jsr ldaxysp ** jsr pushax ** -** If a/x are not used later, replace that by +** If a/x are not used later, and Y is known, replace that by ** ** ldy #xx+2 ** jsr pushwysp +** ldy #$00 ; present if later code expects Y = 0 ** -** saving 3 bytes and several cycles. +** saving several cycles. */ unsigned OptPush2 (CodeSeg* S); From ae340703f2fa517ee69a6cf7a73ac24b0de857a6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 31 Aug 2020 01:57:01 +0800 Subject: [PATCH 0475/2710] OptDupLoads shouldn't silently do optimizations. --- src/cc65/coptind.c | 17 +++++++++++++---- src/cc65/opcodes.h | 5 ++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index 04deb0119..811adff04 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -1147,8 +1147,9 @@ unsigned OptDupLoads (CodeSeg* S) /* Get next entry */ CodeEntry* E = CS_GetEntry (S, I); - /* Assume we won't delete the entry */ + /* Assume we won't delete or replace the entry */ int Delete = 0; + opc_t NewOPC = OP65_INVALID; /* Get a pointer to the input registers of the insn */ const RegContents* In = &E->RI->In; @@ -1218,7 +1219,7 @@ unsigned OptDupLoads (CodeSeg* S) E->AM != AM65_ABSY && E->AM != AM65_ZPY) { /* Use the A register instead */ - CE_ReplaceOPC (E, OP65_STA); + NewOPC = OP65_STA; } break; @@ -1242,11 +1243,11 @@ unsigned OptDupLoads (CodeSeg* S) */ } else if (RegValIsKnown (In->RegY)) { if (In->RegY == In->RegA) { - CE_ReplaceOPC (E, OP65_STA); + NewOPC = OP65_STA; } else if (In->RegY == In->RegX && E->AM != AM65_ABSX && E->AM != AM65_ZPX) { - CE_ReplaceOPC (E, OP65_STX); + NewOPC = OP65_STX; } } break; @@ -1319,6 +1320,14 @@ unsigned OptDupLoads (CodeSeg* S) } else { + if (NewOPC != OP65_INVALID) { + /* Replace the opcode */ + CE_ReplaceOPC (E, NewOPC); + + /* Remember, we had changes */ + ++Changes; + } + /* Next entry */ ++I; diff --git a/src/cc65/opcodes.h b/src/cc65/opcodes.h index bdb0c28a2..24a289c26 100644 --- a/src/cc65/opcodes.h +++ b/src/cc65/opcodes.h @@ -128,7 +128,10 @@ typedef enum { OP65_TYA, /* Number of opcodes available */ - OP65_COUNT + OP65_COUNT, + + /* Invalid opcode */ + OP65_INVALID = OP65_COUNT, } opc_t; /* 65XX addressing modes */ From 761d00b7dc873b74bb7c99a2be716098ee1e0f0a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 31 Aug 2020 06:16:28 +0800 Subject: [PATCH 0476/2710] Ignore running removed old optimization steps. Neither list them in help info. --- src/cc65/codeopt.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index 498aa0ff2..b3b0d064b 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -1029,7 +1029,9 @@ void ListOptSteps (FILE* F) fprintf (F, "any\n"); for (I = 0; I < OPTFUNC_COUNT; ++I) { - fprintf (F, "%s\n", OptFuncs[I]->Name); + if (OptFuncs[I]->Func != 0) { + fprintf (F, "%s\n", OptFuncs[I]->Name); + } } } @@ -1190,10 +1192,10 @@ static unsigned RunOptFunc (CodeSeg* S, OptFunc* F, unsigned Max) { unsigned Changes, C; - /* Don't run the function if it is disabled or if it is prohibited by the + /* Don't run the function if it is removed, disabled or prohibited by the ** code size factor */ - if (F->Disabled || F->CodeSizeFactor > S->CodeSizeFactor) { + if (F->Func == 0 || F->Disabled || F->CodeSizeFactor > S->CodeSizeFactor) { return 0; } From 29d1999947f0fb89e08b1f696dd6f97746659d13 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 31 Aug 2020 06:16:32 +0800 Subject: [PATCH 0477/2710] Rearranged the OptFunc's in alphabetic order. --- src/cc65/codeopt.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index b3b0d064b..dfb42e5db 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -796,9 +796,6 @@ static OptFunc DOptLoad2 = { OptLoad2, "OptLoad2", 200, 0, static OptFunc DOptLoad3 = { OptLoad3, "OptLoad3", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptNegAX1 = { OptNegAX1, "OptNegAX1", 165, 0, 0, 0, 0, 0 }; static OptFunc DOptNegAX2 = { OptNegAX2, "OptNegAX2", 200, 0, 0, 0, 0, 0 }; -static OptFunc DOptRTS = { OptRTS, "OptRTS", 100, 0, 0, 0, 0, 0 }; -static OptFunc DOptRTSJumps1 = { OptRTSJumps1, "OptRTSJumps1", 100, 0, 0, 0, 0, 0 }; -static OptFunc DOptRTSJumps2 = { OptRTSJumps2, "OptRTSJumps2", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptPrecalc = { OptPrecalc, "OptPrecalc", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptPtrLoad1 = { OptPtrLoad1, "OptPtrLoad1", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptPtrLoad2 = { OptPtrLoad2, "OptPtrLoad2", 100, 0, 0, 0, 0, 0 }; @@ -822,6 +819,9 @@ static OptFunc DOptPtrStore3 = { OptPtrStore3, "OptPtrStore3", 100, 0, static OptFunc DOptPush1 = { OptPush1, "OptPush1", 65, 0, 0, 0, 0, 0 }; static OptFunc DOptPush2 = { OptPush2, "OptPush2", 50, 0, 0, 0, 0, 0 }; static OptFunc DOptPushPop = { OptPushPop, "OptPushPop", 0, 0, 0, 0, 0, 0 }; +static OptFunc DOptRTS = { OptRTS, "OptRTS", 100, 0, 0, 0, 0, 0 }; +static OptFunc DOptRTSJumps1 = { OptRTSJumps1, "OptRTSJumps1", 100, 0, 0, 0, 0, 0 }; +static OptFunc DOptRTSJumps2 = { OptRTSJumps2, "OptRTSJumps2", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptShift1 = { OptShift1, "OptShift1", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptShift2 = { OptShift2, "OptShift2", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptShift3 = { OptShift3, "OptShift3", 17, 0, 0, 0, 0, 0 }; From 676b14429dcb1357602639ea7ed455fcc48c73df Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 31 Aug 2020 06:16:36 +0800 Subject: [PATCH 0478/2710] Better opt chance for certain optimization steps e.g. OptPtrStore1 etc. --- src/cc65/codeopt.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index dfb42e5db..69ac35005 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -1241,10 +1241,10 @@ static unsigned RunOptGroup1 (CodeSeg* S) Changes += RunOptFunc (S, &DOptGotoSPAdj, 1); Changes += RunOptFunc (S, &DOptStackPtrOps, 5); + Changes += RunOptFunc (S, &DOptAdd3, 1); /* Before OptPtrLoad5! */ Changes += RunOptFunc (S, &DOptPtrStore1, 1); Changes += RunOptFunc (S, &DOptPtrStore2, 1); Changes += RunOptFunc (S, &DOptPtrStore3, 1); - Changes += RunOptFunc (S, &DOptAdd3, 1); /* Before OptPtrLoad5! */ Changes += RunOptFunc (S, &DOptPtrLoad1, 1); Changes += RunOptFunc (S, &DOptPtrLoad2, 1); Changes += RunOptFunc (S, &DOptPtrLoad3, 1); @@ -1332,7 +1332,6 @@ static unsigned RunOptGroup3 (CodeSeg* S) C += RunOptFunc (S, &DOptAdd6, 1); C += RunOptFunc (S, &DOptJumpCascades, 1); C += RunOptFunc (S, &DOptDeadJumps, 1); - C += RunOptFunc (S, &DOptRTS, 1); C += RunOptFunc (S, &DOptDeadCode, 1); C += RunOptFunc (S, &DOptBoolTrans, 1); C += RunOptFunc (S, &DOptJumpTarget1, 1); @@ -1487,11 +1486,16 @@ static unsigned RunOptGroup7 (CodeSeg* S) /* Adjust branch distances */ Changes += RunOptFunc (S, &DOptBranchDist, 3); - /* Replace conditional branches to RTS. If we had changes, we must run dead - ** code elimination again, since the change may have introduced dead code. - */ + /* Replace conditional branches to RTS */ C = RunOptFunc (S, &DOptRTSJumps2, 1); + + /* Replace JSR followed by RTS to JMP */ + C += RunOptFunc (S, &DOptRTS, 1); + Changes += C; + /* If we had changes, we must run dead code elimination again, + ** since the changes may have introduced dead code. + */ if (C) { Changes += RunOptFunc (S, &DOptDeadCode, 1); } From 44b719d957a9f02c44207a4f922012405fff0200 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Thu, 3 Sep 2020 09:16:51 +0200 Subject: [PATCH 0479/2710] Change line endings from CRLF to LF test/ref/pr1220.c was somehow added with CRLFs. Other files use just LF. --- test/ref/pr1220.c | 720 +++++++++++++++++++++++----------------------- 1 file changed, 360 insertions(+), 360 deletions(-) diff --git a/test/ref/pr1220.c b/test/ref/pr1220.c index eb9f7c7f5..0d5c1d800 100644 --- a/test/ref/pr1220.c +++ b/test/ref/pr1220.c @@ -1,360 +1,360 @@ -/* PR #1220 - test constant ternary, AND and OR */ - -#include <stdio.h> - -/* test AND/OR, results as integers */ -#define CONTEXT_A(x) do {\ - s = 0, flags = 0, t = (x),\ - printf("%3d %2X: %d\n", s, flags, t);\ - } while (0) - -/* test AND/OR in ternary context */ -#define CONTEXT_B(x) do {\ - s = 0, flags = 0, t = (x ? 42 : -42),\ - printf("%3d %2X: %d\n", s, flags, t);\ - } while (0) - -int s, t; -unsigned flags; - -int f(int x) -/* The call to this function should be and only be skipped strictly according to -** the short-circuit evaluation rule. -*/ -{ - flags |= (x != 0) << s; - ++s; - return x; -} - -#define _A f(a) -#define _B f(b) -#define _C f(c) -#define _D f(d) -#define _T (f(0), 256) -#define _F (f(256), 0) - -void f0() -/* constant short-circuit */ -{ - printf("f0()\n"); - - CONTEXT_A(_T && _T && _T); - CONTEXT_A(_F && _F && _F); - - CONTEXT_A(_T || _T || _T); - CONTEXT_A(_F || _F || _F); - - CONTEXT_A(_T && _T || _T && _T); - CONTEXT_A(_F && _F || _F && _F); - CONTEXT_A(_T && _F || _T && _F); - CONTEXT_A(_F && _T || _F && _T); - - CONTEXT_A((_T && _T) || (_T && _T)); - CONTEXT_A((_F && _F) || (_F && _F)); - CONTEXT_A((_T && _F) || (_T && _F)); - CONTEXT_A((_F && _T) || (_F && _T)); - - CONTEXT_A((_T || _T) && (_T || _T)); - CONTEXT_A((_F || _F) && (_F || _F)); - CONTEXT_A((_T || _F) && (_T || _F)); - CONTEXT_A((_F || _T) && (_F || _T)); - - printf("\n"); -} - -void f1(int a, int b, int c) -/* AND */ -{ - printf("f1(%d, %d, %d)\n", a, b, c); - - CONTEXT_A(_A && _B && _C); - - CONTEXT_A(_T && _B && _C); - CONTEXT_A(_A && _T && _C); - CONTEXT_A(_A && _B && _T); - - CONTEXT_A(_F && _B && _C); - CONTEXT_A(_A && _F && _C); - CONTEXT_A(_A && _B && _F); - - CONTEXT_A(_T && _T && _C); - CONTEXT_A(_A && _T && _T); - CONTEXT_A(_T && _B && _T); - - printf("\n"); -} - -void f2(int a, int b, int c) -/* OR */ -{ - printf("f2(%d, %d, %d)\n", a, b, c); - - CONTEXT_A(_A || _B || _C); - - CONTEXT_A(_T || _B || _C); - CONTEXT_A(_A || _T || _C); - CONTEXT_A(_A || _B || _T); - - CONTEXT_A(_F || _B || _C); - CONTEXT_A(_A || _F || _C); - CONTEXT_A(_A || _B || _F); - - CONTEXT_A(_F || _F || _C); - CONTEXT_A(_A || _F || _F); - CONTEXT_A(_F || _B || _F); - - printf("\n"); -} - -void f3(int a, int b, int c, int d) -/* AND and OR */ -{ - printf("f3(%d, %d, %d, %d)\n", a, b, c, d); - - CONTEXT_A(_A && _B || _C && _D); - CONTEXT_A(_T && _T || _C && _D); - CONTEXT_A(_A && _B || _T && _T); - - CONTEXT_A(_T && _B || _C && _D); - CONTEXT_A(_A && _T || _C && _D); - CONTEXT_A(_A && _B || _T && _D); - CONTEXT_A(_A && _B || _C && _T); - - CONTEXT_A(_F && _B || _C && _D); - CONTEXT_A(_A && _F || _C && _D); - CONTEXT_A(_A && _B || _F && _D); - CONTEXT_A(_A && _B || _C && _F); - - printf("\n"); -} - -void f4(int a, int b, int c, int d) -/* AND as top-level expression inside OR context */ -{ - printf("f4(%d, %d, %d, %d)\n", a, b, c, d); - - CONTEXT_A((_A && _B) || (_C && _D)); - CONTEXT_A((_T && _T) || (_C && _D)); - CONTEXT_A((_A && _B) || (_T && _T)); - - CONTEXT_A((_T && _B) || (_C && _D)); - CONTEXT_A((_A && _T) || (_C && _D)); - CONTEXT_A((_A && _B) || (_T && _D)); - CONTEXT_A((_A && _B) || (_C && _T)); - - CONTEXT_A((_F && _B) || (_C && _D)); - CONTEXT_A((_A && _F) || (_C && _D)); - CONTEXT_A((_A && _B) || (_F && _D)); - CONTEXT_A((_A && _B) || (_C && _F)); - - printf("\n"); -} - -void f5(int a, int b, int c, int d) -/* OR as top-level expression inside AND context */ -{ - printf("f5(%d, %d, %d, %d)\n", a, b, c, d); - - CONTEXT_A((_A || _B) && (_C || _D)); - CONTEXT_A((_F || _F) && (_C || _D)); - CONTEXT_A((_A || _B) && (_F || _F)); - - CONTEXT_A((_T || _B) && (_C || _D)); - CONTEXT_A((_A || _T) && (_C || _D)); - CONTEXT_A((_A || _B) && (_T || _D)); - CONTEXT_A((_A || _B) && (_C || _T)); - - CONTEXT_A((_F || _B) && (_C || _D)); - CONTEXT_A((_A || _F) && (_C || _D)); - CONTEXT_A((_A || _B) && (_F || _D)); - CONTEXT_A((_A || _B) && (_C || _F)); - - printf("\n"); -} - -void f0_B() -/* constant short-circuit */ -{ - printf("f0_B()\n"); - - CONTEXT_B(_T && _T && _T); - CONTEXT_B(_F && _F && _F); - - CONTEXT_B(_T || _T || _T); - CONTEXT_B(_F || _F || _F); - - CONTEXT_B(_T && _T || _T && _T); - CONTEXT_B(_F && _F || _F && _F); - CONTEXT_B(_T && _F || _T && _F); - CONTEXT_B(_F && _T || _F && _T); - - CONTEXT_B((_T && _T) || (_T && _T)); - CONTEXT_B((_F && _F) || (_F && _F)); - CONTEXT_B((_T && _F) || (_T && _F)); - CONTEXT_B((_F && _T) || (_F && _T)); - - CONTEXT_B((_T || _T) && (_T || _T)); - CONTEXT_B((_F || _F) && (_F || _F)); - CONTEXT_B((_T || _F) && (_T || _F)); - CONTEXT_B((_F || _T) && (_F || _T)); - - printf("\n"); -} - -void f1_B(int a, int b, int c) -/* AND */ -{ - printf("f1_B(%d, %d, %d)\n", a, b, c); - - CONTEXT_B(_A && _B && _C); - - CONTEXT_B(_T && _B && _C); - CONTEXT_B(_A && _T && _C); - CONTEXT_B(_A && _B && _T); - - CONTEXT_B(_F && _B && _C); - CONTEXT_B(_A && _F && _C); - CONTEXT_B(_A && _B && _F); - - CONTEXT_B(_T && _T && _C); - CONTEXT_B(_A && _T && _T); - CONTEXT_B(_T && _B && _T); - - printf("\n"); -} - -void f2_B(int a, int b, int c) -/* OR */ -{ - printf("f2_B(%d, %d, %d)\n", a, b, c); - - CONTEXT_B(_A || _B || _C); - - CONTEXT_B(_T || _B || _C); - CONTEXT_B(_A || _T || _C); - CONTEXT_B(_A || _B || _T); - - CONTEXT_B(_F || _B || _C); - CONTEXT_B(_A || _F || _C); - CONTEXT_B(_A || _B || _F); - - CONTEXT_B(_F || _F || _C); - CONTEXT_B(_A || _F || _F); - CONTEXT_B(_F || _B || _F); - - printf("\n"); -} - -void f3_B(int a, int b, int c, int d) -/* AND and OR */ -{ - printf("f3_B(%d, %d, %d, %d)\n", a, b, c, d); - - CONTEXT_B(_A && _B || _C && _D); - CONTEXT_B(_T && _T || _C && _D); - CONTEXT_B(_A && _B || _T && _T); - - CONTEXT_B(_T && _B || _C && _D); - CONTEXT_B(_A && _T || _C && _D); - CONTEXT_B(_A && _B || _T && _D); - CONTEXT_B(_A && _B || _C && _T); - - CONTEXT_B(_F && _B || _C && _D); - CONTEXT_B(_A && _F || _C && _D); - CONTEXT_B(_A && _B || _F && _D); - CONTEXT_B(_A && _B || _C && _F); - - printf("\n"); -} - -void f4_B(int a, int b, int c, int d) -/* AND as top-level expression inside OR context */ -{ - printf("f4_B(%d, %d, %d, %d)\n", a, b, c, d); - - CONTEXT_B((_A && _B) || (_C && _D)); - CONTEXT_B((_T && _T) || (_C && _D)); - CONTEXT_B((_A && _B) || (_T && _T)); - - CONTEXT_B((_T && _B) || (_C && _D)); - CONTEXT_B((_A && _T) || (_C && _D)); - CONTEXT_B((_A && _B) || (_T && _D)); - CONTEXT_B((_A && _B) || (_C && _T)); - - CONTEXT_B((_F && _B) || (_C && _D)); - CONTEXT_B((_A && _F) || (_C && _D)); - CONTEXT_B((_A && _B) || (_F && _D)); - CONTEXT_B((_A && _B) || (_C && _F)); - - printf("\n"); -} - -void f5_B(int a, int b, int c, int d) -/* OR as top-level expression inside AND context */ -{ - printf("f5_B(%d, %d, %d, %d)\n", a, b, c, d); - - CONTEXT_B((_A || _B) && (_C || _D)); - CONTEXT_B((_F || _F) && (_C || _D)); - CONTEXT_B((_A || _B) && (_F || _F)); - - CONTEXT_B((_T || _B) && (_C || _D)); - CONTEXT_B((_A || _T) && (_C || _D)); - CONTEXT_B((_A || _B) && (_T || _D)); - CONTEXT_B((_A || _B) && (_C || _T)); - - CONTEXT_B((_F || _B) && (_C || _D)); - CONTEXT_B((_A || _F) && (_C || _D)); - CONTEXT_B((_A || _B) && (_F || _D)); - CONTEXT_B((_A || _B) && (_C || _F)); - - printf("\n"); -} - -int main() -{ - f0(); - - f1(0, 0, 0); - f2(0, 0, 0); - f3(0, 0, 0, 0); - f4(0, 0, 0, 0); - f5(0, 0, 0, 0); - - f1(1, 1, 1); - f2(1, 1, 1); - f3(1, 1, 1, 1); - f4(1, 1, 1, 1); - f5(1, 1, 1, 1); - - f3(1, 0, 1, 0); - f4(1, 0, 1, 0); - f5(1, 0, 1, 0); - f3(0, 1, 0, 1); - f4(0, 1, 0, 1); - f5(0, 1, 0, 1); - - f0_B(); - - f1_B(0, 0, 0); - f2_B(0, 0, 0); - f3_B(0, 0, 0, 0); - f4_B(0, 0, 0, 0); - f5_B(0, 0, 0, 0); - - f1_B(1, 1, 1); - f2_B(1, 1, 1); - f3_B(1, 1, 1, 1); - f4_B(1, 1, 1, 1); - f5_B(1, 1, 1, 1); - - f3_B(1, 0, 1, 0); - f4_B(1, 0, 1, 0); - f5_B(1, 0, 1, 0); - f3_B(0, 1, 0, 1); - f4_B(0, 1, 0, 1); - f5_B(0, 1, 0, 1); - - return 0; -} +/* PR #1220 - test constant ternary, AND and OR */ + +#include <stdio.h> + +/* test AND/OR, results as integers */ +#define CONTEXT_A(x) do {\ + s = 0, flags = 0, t = (x),\ + printf("%3d %2X: %d\n", s, flags, t);\ + } while (0) + +/* test AND/OR in ternary context */ +#define CONTEXT_B(x) do {\ + s = 0, flags = 0, t = (x ? 42 : -42),\ + printf("%3d %2X: %d\n", s, flags, t);\ + } while (0) + +int s, t; +unsigned flags; + +int f(int x) +/* The call to this function should be and only be skipped strictly according to +** the short-circuit evaluation rule. +*/ +{ + flags |= (x != 0) << s; + ++s; + return x; +} + +#define _A f(a) +#define _B f(b) +#define _C f(c) +#define _D f(d) +#define _T (f(0), 256) +#define _F (f(256), 0) + +void f0() +/* constant short-circuit */ +{ + printf("f0()\n"); + + CONTEXT_A(_T && _T && _T); + CONTEXT_A(_F && _F && _F); + + CONTEXT_A(_T || _T || _T); + CONTEXT_A(_F || _F || _F); + + CONTEXT_A(_T && _T || _T && _T); + CONTEXT_A(_F && _F || _F && _F); + CONTEXT_A(_T && _F || _T && _F); + CONTEXT_A(_F && _T || _F && _T); + + CONTEXT_A((_T && _T) || (_T && _T)); + CONTEXT_A((_F && _F) || (_F && _F)); + CONTEXT_A((_T && _F) || (_T && _F)); + CONTEXT_A((_F && _T) || (_F && _T)); + + CONTEXT_A((_T || _T) && (_T || _T)); + CONTEXT_A((_F || _F) && (_F || _F)); + CONTEXT_A((_T || _F) && (_T || _F)); + CONTEXT_A((_F || _T) && (_F || _T)); + + printf("\n"); +} + +void f1(int a, int b, int c) +/* AND */ +{ + printf("f1(%d, %d, %d)\n", a, b, c); + + CONTEXT_A(_A && _B && _C); + + CONTEXT_A(_T && _B && _C); + CONTEXT_A(_A && _T && _C); + CONTEXT_A(_A && _B && _T); + + CONTEXT_A(_F && _B && _C); + CONTEXT_A(_A && _F && _C); + CONTEXT_A(_A && _B && _F); + + CONTEXT_A(_T && _T && _C); + CONTEXT_A(_A && _T && _T); + CONTEXT_A(_T && _B && _T); + + printf("\n"); +} + +void f2(int a, int b, int c) +/* OR */ +{ + printf("f2(%d, %d, %d)\n", a, b, c); + + CONTEXT_A(_A || _B || _C); + + CONTEXT_A(_T || _B || _C); + CONTEXT_A(_A || _T || _C); + CONTEXT_A(_A || _B || _T); + + CONTEXT_A(_F || _B || _C); + CONTEXT_A(_A || _F || _C); + CONTEXT_A(_A || _B || _F); + + CONTEXT_A(_F || _F || _C); + CONTEXT_A(_A || _F || _F); + CONTEXT_A(_F || _B || _F); + + printf("\n"); +} + +void f3(int a, int b, int c, int d) +/* AND and OR */ +{ + printf("f3(%d, %d, %d, %d)\n", a, b, c, d); + + CONTEXT_A(_A && _B || _C && _D); + CONTEXT_A(_T && _T || _C && _D); + CONTEXT_A(_A && _B || _T && _T); + + CONTEXT_A(_T && _B || _C && _D); + CONTEXT_A(_A && _T || _C && _D); + CONTEXT_A(_A && _B || _T && _D); + CONTEXT_A(_A && _B || _C && _T); + + CONTEXT_A(_F && _B || _C && _D); + CONTEXT_A(_A && _F || _C && _D); + CONTEXT_A(_A && _B || _F && _D); + CONTEXT_A(_A && _B || _C && _F); + + printf("\n"); +} + +void f4(int a, int b, int c, int d) +/* AND as top-level expression inside OR context */ +{ + printf("f4(%d, %d, %d, %d)\n", a, b, c, d); + + CONTEXT_A((_A && _B) || (_C && _D)); + CONTEXT_A((_T && _T) || (_C && _D)); + CONTEXT_A((_A && _B) || (_T && _T)); + + CONTEXT_A((_T && _B) || (_C && _D)); + CONTEXT_A((_A && _T) || (_C && _D)); + CONTEXT_A((_A && _B) || (_T && _D)); + CONTEXT_A((_A && _B) || (_C && _T)); + + CONTEXT_A((_F && _B) || (_C && _D)); + CONTEXT_A((_A && _F) || (_C && _D)); + CONTEXT_A((_A && _B) || (_F && _D)); + CONTEXT_A((_A && _B) || (_C && _F)); + + printf("\n"); +} + +void f5(int a, int b, int c, int d) +/* OR as top-level expression inside AND context */ +{ + printf("f5(%d, %d, %d, %d)\n", a, b, c, d); + + CONTEXT_A((_A || _B) && (_C || _D)); + CONTEXT_A((_F || _F) && (_C || _D)); + CONTEXT_A((_A || _B) && (_F || _F)); + + CONTEXT_A((_T || _B) && (_C || _D)); + CONTEXT_A((_A || _T) && (_C || _D)); + CONTEXT_A((_A || _B) && (_T || _D)); + CONTEXT_A((_A || _B) && (_C || _T)); + + CONTEXT_A((_F || _B) && (_C || _D)); + CONTEXT_A((_A || _F) && (_C || _D)); + CONTEXT_A((_A || _B) && (_F || _D)); + CONTEXT_A((_A || _B) && (_C || _F)); + + printf("\n"); +} + +void f0_B() +/* constant short-circuit */ +{ + printf("f0_B()\n"); + + CONTEXT_B(_T && _T && _T); + CONTEXT_B(_F && _F && _F); + + CONTEXT_B(_T || _T || _T); + CONTEXT_B(_F || _F || _F); + + CONTEXT_B(_T && _T || _T && _T); + CONTEXT_B(_F && _F || _F && _F); + CONTEXT_B(_T && _F || _T && _F); + CONTEXT_B(_F && _T || _F && _T); + + CONTEXT_B((_T && _T) || (_T && _T)); + CONTEXT_B((_F && _F) || (_F && _F)); + CONTEXT_B((_T && _F) || (_T && _F)); + CONTEXT_B((_F && _T) || (_F && _T)); + + CONTEXT_B((_T || _T) && (_T || _T)); + CONTEXT_B((_F || _F) && (_F || _F)); + CONTEXT_B((_T || _F) && (_T || _F)); + CONTEXT_B((_F || _T) && (_F || _T)); + + printf("\n"); +} + +void f1_B(int a, int b, int c) +/* AND */ +{ + printf("f1_B(%d, %d, %d)\n", a, b, c); + + CONTEXT_B(_A && _B && _C); + + CONTEXT_B(_T && _B && _C); + CONTEXT_B(_A && _T && _C); + CONTEXT_B(_A && _B && _T); + + CONTEXT_B(_F && _B && _C); + CONTEXT_B(_A && _F && _C); + CONTEXT_B(_A && _B && _F); + + CONTEXT_B(_T && _T && _C); + CONTEXT_B(_A && _T && _T); + CONTEXT_B(_T && _B && _T); + + printf("\n"); +} + +void f2_B(int a, int b, int c) +/* OR */ +{ + printf("f2_B(%d, %d, %d)\n", a, b, c); + + CONTEXT_B(_A || _B || _C); + + CONTEXT_B(_T || _B || _C); + CONTEXT_B(_A || _T || _C); + CONTEXT_B(_A || _B || _T); + + CONTEXT_B(_F || _B || _C); + CONTEXT_B(_A || _F || _C); + CONTEXT_B(_A || _B || _F); + + CONTEXT_B(_F || _F || _C); + CONTEXT_B(_A || _F || _F); + CONTEXT_B(_F || _B || _F); + + printf("\n"); +} + +void f3_B(int a, int b, int c, int d) +/* AND and OR */ +{ + printf("f3_B(%d, %d, %d, %d)\n", a, b, c, d); + + CONTEXT_B(_A && _B || _C && _D); + CONTEXT_B(_T && _T || _C && _D); + CONTEXT_B(_A && _B || _T && _T); + + CONTEXT_B(_T && _B || _C && _D); + CONTEXT_B(_A && _T || _C && _D); + CONTEXT_B(_A && _B || _T && _D); + CONTEXT_B(_A && _B || _C && _T); + + CONTEXT_B(_F && _B || _C && _D); + CONTEXT_B(_A && _F || _C && _D); + CONTEXT_B(_A && _B || _F && _D); + CONTEXT_B(_A && _B || _C && _F); + + printf("\n"); +} + +void f4_B(int a, int b, int c, int d) +/* AND as top-level expression inside OR context */ +{ + printf("f4_B(%d, %d, %d, %d)\n", a, b, c, d); + + CONTEXT_B((_A && _B) || (_C && _D)); + CONTEXT_B((_T && _T) || (_C && _D)); + CONTEXT_B((_A && _B) || (_T && _T)); + + CONTEXT_B((_T && _B) || (_C && _D)); + CONTEXT_B((_A && _T) || (_C && _D)); + CONTEXT_B((_A && _B) || (_T && _D)); + CONTEXT_B((_A && _B) || (_C && _T)); + + CONTEXT_B((_F && _B) || (_C && _D)); + CONTEXT_B((_A && _F) || (_C && _D)); + CONTEXT_B((_A && _B) || (_F && _D)); + CONTEXT_B((_A && _B) || (_C && _F)); + + printf("\n"); +} + +void f5_B(int a, int b, int c, int d) +/* OR as top-level expression inside AND context */ +{ + printf("f5_B(%d, %d, %d, %d)\n", a, b, c, d); + + CONTEXT_B((_A || _B) && (_C || _D)); + CONTEXT_B((_F || _F) && (_C || _D)); + CONTEXT_B((_A || _B) && (_F || _F)); + + CONTEXT_B((_T || _B) && (_C || _D)); + CONTEXT_B((_A || _T) && (_C || _D)); + CONTEXT_B((_A || _B) && (_T || _D)); + CONTEXT_B((_A || _B) && (_C || _T)); + + CONTEXT_B((_F || _B) && (_C || _D)); + CONTEXT_B((_A || _F) && (_C || _D)); + CONTEXT_B((_A || _B) && (_F || _D)); + CONTEXT_B((_A || _B) && (_C || _F)); + + printf("\n"); +} + +int main() +{ + f0(); + + f1(0, 0, 0); + f2(0, 0, 0); + f3(0, 0, 0, 0); + f4(0, 0, 0, 0); + f5(0, 0, 0, 0); + + f1(1, 1, 1); + f2(1, 1, 1); + f3(1, 1, 1, 1); + f4(1, 1, 1, 1); + f5(1, 1, 1, 1); + + f3(1, 0, 1, 0); + f4(1, 0, 1, 0); + f5(1, 0, 1, 0); + f3(0, 1, 0, 1); + f4(0, 1, 0, 1); + f5(0, 1, 0, 1); + + f0_B(); + + f1_B(0, 0, 0); + f2_B(0, 0, 0); + f3_B(0, 0, 0, 0); + f4_B(0, 0, 0, 0); + f5_B(0, 0, 0, 0); + + f1_B(1, 1, 1); + f2_B(1, 1, 1); + f3_B(1, 1, 1, 1); + f4_B(1, 1, 1, 1); + f5_B(1, 1, 1, 1); + + f3_B(1, 0, 1, 0); + f4_B(1, 0, 1, 0); + f5_B(1, 0, 1, 0); + f3_B(0, 1, 0, 1); + f4_B(0, 1, 0, 1); + f5_B(0, 1, 0, 1); + + return 0; +} From bc5570b708a8ea99f3e50ccdfbbc52e3739bdf0f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 20 Aug 2020 07:52:17 +0800 Subject: [PATCH 0480/2710] Fixed logical-NOT in constant context. --- src/cc65/expr.c | 30 ++++++------------------------ 1 file changed, 6 insertions(+), 24 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index b91fab8a8..7fb6e455f 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1908,14 +1908,19 @@ void hie10 (ExprDesc* Expr) case TOK_BOOL_NOT: NextToken (); - if (evalexpr (CF_NONE, hie10, Expr) == 0) { + BoolExpr (hie10, Expr); + if (ED_IsConstAbs (Expr)) { /* Constant expression */ Expr->IVal = !Expr->IVal; } else { + /* Not constant, load into the primary */ + LoadExpr (CF_NONE, Expr); g_bneg (TypeOf (Expr->Type)); ED_FinalizeRValLoad (Expr); ED_TestDone (Expr); /* bneg will set cc */ } + /* The result type is always boolean */ + Expr->Type = type_bool; break; case TOK_STAR: @@ -3981,29 +3986,6 @@ void hie0 (ExprDesc *Expr) -int evalexpr (unsigned Flags, void (*Func) (ExprDesc*), ExprDesc* Expr) -/* Will evaluate an expression via the given function. If the result is a -** constant, 0 is returned and the value is put in the Expr struct. If the -** result is not constant, LoadExpr is called to bring the value into the -** primary register and 1 is returned. -*/ -{ - /* Evaluate */ - ExprWithCheck (Func, Expr); - - /* Check for a constant expression */ - if (ED_IsConstAbs (Expr)) { - /* Constant expression */ - return 0; - } else { - /* Not constant, load into the primary */ - LoadExpr (Flags, Expr); - return 1; - } -} - - - void Expression0 (ExprDesc* Expr) /* Evaluate an expression via hie0 and put the result into the primary register */ { From 8e0b2f083356f206b6f5529d0d60b32fff3a7a0a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 20 Aug 2020 07:52:20 +0800 Subject: [PATCH 0481/2710] Object addresses as non-NULL in boolean context. --- src/cc65/expr.c | 32 +++++++++++++++++++++----------- src/cc65/exprdesc.c | 8 ++++++++ src/cc65/exprdesc.h | 3 +++ src/cc65/testexpr.c | 5 +++++ 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 7fb6e455f..94109d559 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1912,6 +1912,9 @@ void hie10 (ExprDesc* Expr) if (ED_IsConstAbs (Expr)) { /* Constant expression */ Expr->IVal = !Expr->IVal; + } else if (ED_IsAddrExpr (Expr)) { + /* Address != NULL, so !Address == 0 */ + ED_MakeConstBool (Expr, 0); } else { /* Not constant, load into the primary */ LoadExpr (CF_NONE, Expr); @@ -3222,7 +3225,7 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) Error ("Scalar expression expected"); ED_MakeConstBool (Expr, 0); } else if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { - if (!ED_IsConstAbs (Expr)) { + if (!ED_IsConstBool (Expr)) { /* Set the test flag */ ED_RequireTest (Expr); @@ -3237,7 +3240,7 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) /* Generate the jump */ g_falsejump (CF_NONE, FalseLab); - } else if (Expr->IVal == 0) { + } else if (Expr->IVal == 0 && !ED_IsAddrExpr (Expr)) { /* Skip remaining */ Flags |= E_EVAL_UNEVAL; } @@ -3264,7 +3267,7 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) Error ("Scalar expression expected"); ED_MakeConstBool (&Expr2, 0); } else if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { - if (!ED_IsConstAbs (&Expr2)) { + if (!ED_IsConstBool (&Expr2)) { ED_RequireTest (&Expr2); LoadExpr (CF_FORCECHAR, &Expr2); @@ -3276,7 +3279,7 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) /* We need the true label for the last expression */ HasTrueJump = 1; } - } else if (Expr2.IVal == 0) { + } else if (Expr2.IVal == 0 && !ED_IsAddrExpr (&Expr2)) { /* Skip remaining */ Flags |= E_EVAL_UNEVAL; /* The value of the expression will be false */ @@ -3313,7 +3316,8 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) } /* Convert to bool */ - if (ED_IsConstAbs (Expr) && Expr->IVal != 0) { + if ((ED_IsConstAbs (Expr) && Expr->IVal != 0) || + ED_IsAddrExpr (Expr)) { ED_MakeConstBool (Expr, 1); } else { Expr->Type = type_bool; @@ -3354,7 +3358,7 @@ static void hieOr (ExprDesc *Expr) ED_MakeConstBool (Expr, 0); } else if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { - if (!ED_IsConstAbs (Expr)) { + if (!ED_IsConstBool (Expr)) { /* Test the lhs if we haven't had && operators. If we had them, the ** jump is already in place and there's no need to do the test. */ @@ -3377,7 +3381,7 @@ static void hieOr (ExprDesc *Expr) /* Jump to TrueLab if true */ g_truejump (CF_NONE, TrueLab); } - } else if (Expr->IVal != 0) { + } else if (Expr->IVal != 0 || ED_IsAddrExpr (Expr)) { /* Skip remaining */ Flags |= E_EVAL_UNEVAL; } @@ -3406,7 +3410,7 @@ static void hieOr (ExprDesc *Expr) ED_MakeConstBool (&Expr2, 0); } else if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { - if (!ED_IsConstAbs (&Expr2)) { + if (!ED_IsConstBool (&Expr2)) { /* If there is more to come, add shortcut boolean eval */ if (!AndOp) { ED_RequireTest (&Expr2); @@ -3418,7 +3422,7 @@ static void hieOr (ExprDesc *Expr) } g_truejump (CF_NONE, TrueLab); } - } else if (Expr2.IVal != 0) { + } else if (Expr2.IVal != 0 || ED_IsAddrExpr (&Expr2)) { /* Skip remaining */ Flags |= E_EVAL_UNEVAL; /* The result is always true */ @@ -3429,7 +3433,8 @@ static void hieOr (ExprDesc *Expr) } /* Convert to bool */ - if (ED_IsConstAbs (Expr) && Expr->IVal != 0) { + if ((ED_IsConstAbs (Expr) && Expr->IVal != 0) || + ED_IsAddrExpr (Expr)) { ED_MakeConstBool (Expr, 1); } else { Expr->Type = type_bool; @@ -3483,7 +3488,7 @@ static void hieQuest (ExprDesc* Expr) /* Check if it's a ternary expression */ if (CurTok.Tok == TOK_QUEST) { - int ConstantCond = ED_IsConstAbsInt (Expr); + int ConstantCond = ED_IsConstBool (Expr); unsigned Flags = Expr->Flags & E_MASK_KEEP_RESULT; ED_Init (&Expr2); @@ -3493,6 +3498,11 @@ static void hieQuest (ExprDesc* Expr) NextToken (); + /* Convert non-integer constant boolean */ + if (ED_IsAddrExpr (Expr)) { + ED_MakeConstBool (Expr, 1); + } + if (!ConstantCond) { /* Condition codes not set, request a test */ ED_RequireTest (Expr); diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index 62738bed7..e82d0fafc 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -389,6 +389,14 @@ int ED_IsConstAbsInt (const ExprDesc* Expr) +int ED_IsConstBool (const ExprDesc* Expr) +/* Return true if the expression can be constantly evaluated as a boolean. */ +{ + return ED_IsConstAbsInt (Expr) || ED_IsAddrExpr (Expr); +} + + + int ED_IsConst (const ExprDesc* Expr) /* Return true if the expression denotes a constant of some sort. This can be a ** numeric constant, the address of a global variable (maybe with offset) or diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index c435b3c38..463828db6 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -640,6 +640,9 @@ int ED_IsConstAbs (const ExprDesc* Expr); int ED_IsConstAbsInt (const ExprDesc* Expr); /* Return true if the expression is a constant (numeric) integer. */ +int ED_IsConstBool (const ExprDesc* Expr); +/* Return true if the expression can be constantly evaluated as a boolean. */ + int ED_IsConst (const ExprDesc* Expr); /* Return true if the expression denotes a constant of some sort. This can be a ** numeric constant, the address of a global variable (maybe with offset) or diff --git a/src/cc65/testexpr.c b/src/cc65/testexpr.c index b924eaa40..80fe4bc3d 100644 --- a/src/cc65/testexpr.c +++ b/src/cc65/testexpr.c @@ -77,6 +77,11 @@ unsigned Test (unsigned Label, int Invert) g_jump (Label); } + } else if (ED_IsAddrExpr (&Expr)) { + + /* Object addresses are non-NULL */ + Result = 1; + } else { /* Result is unknown */ From f849de6769ac4f887c35fc9561fd38c4e584f708 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 20 Aug 2020 07:52:22 +0800 Subject: [PATCH 0482/2710] Object addresses as non-NULL for comparison with NULL. --- src/cc65/expr.c | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 94109d559..a562dfa76 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2428,6 +2428,33 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ */ WarnConstCompareResult (Expr); + } else if (ED_CodeRangeIsEmpty (&Expr2) && + ((ED_IsAddrExpr (Expr) && ED_IsNullPtr (&Expr2)) || + (ED_IsNullPtr (Expr) && (ED_IsAddrExpr (&Expr2))))) { + + /* Object addresses are inequal to null pointer */ + Expr->IVal = (Tok != TOK_EQ); + if (ED_IsNullPtr (&Expr2)) { + if (Tok == TOK_LT || Tok == TOK_LE) { + Expr->IVal = 0; + } + } else { + if (Tok == TOK_GT || Tok == TOK_GE) { + Expr->IVal = 0; + } + } + + /* Get rid of unwanted flags */ + ED_MakeConstBool (Expr, Expr->IVal); + + /* If the result is constant, this is suspicious when not in + ** preprocessor mode. + */ + WarnConstCompareResult (Expr); + + /* Both operands are static, remove the generated code */ + RemoveCode (&Mark1); + } else { /* Determine the signedness of the operands */ @@ -2485,7 +2512,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ case TOK_EQ: if (Expr2.IVal < LeftMin || Expr2.IVal > LeftMax) { - ED_MakeConstAbsInt (Expr, 0); + ED_MakeConstBool (Expr, 0); WarnConstCompareResult (Expr); goto Done; } @@ -2493,7 +2520,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ case TOK_NE: if (Expr2.IVal < LeftMin || Expr2.IVal > LeftMax) { - ED_MakeConstAbsInt (Expr, 1); + ED_MakeConstBool (Expr, 1); WarnConstCompareResult (Expr); goto Done; } @@ -2501,7 +2528,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ case TOK_LT: if (Expr2.IVal <= LeftMin || Expr2.IVal > LeftMax) { - ED_MakeConstAbsInt (Expr, Expr2.IVal > LeftMax); + ED_MakeConstBool (Expr, Expr2.IVal > LeftMax); WarnConstCompareResult (Expr); goto Done; } @@ -2509,7 +2536,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ case TOK_LE: if (Expr2.IVal < LeftMin || Expr2.IVal >= LeftMax) { - ED_MakeConstAbsInt (Expr, Expr2.IVal >= LeftMax); + ED_MakeConstBool (Expr, Expr2.IVal >= LeftMax); WarnConstCompareResult (Expr); goto Done; } @@ -2517,7 +2544,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ case TOK_GE: if (Expr2.IVal <= LeftMin || Expr2.IVal > LeftMax) { - ED_MakeConstAbsInt (Expr, Expr2.IVal <= LeftMin); + ED_MakeConstBool (Expr, Expr2.IVal <= LeftMin); WarnConstCompareResult (Expr); goto Done; } @@ -2525,7 +2552,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ case TOK_GT: if (Expr2.IVal < LeftMin || Expr2.IVal >= LeftMax) { - ED_MakeConstAbsInt (Expr, Expr2.IVal < LeftMin); + ED_MakeConstBool (Expr, Expr2.IVal < LeftMin); WarnConstCompareResult (Expr); goto Done; } From df07e23f2c523838723e5c69cdcf35ef88d4ad59 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 5 Sep 2020 11:15:17 +0800 Subject: [PATCH 0483/2710] Fixed bnegeax funcinfo on register usage. --- src/cc65/codeinfo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index d7d85a12d..a89f6d54c 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -102,7 +102,7 @@ static const FuncInfo FuncInfoTable[] = { { "asreax4", REG_EAX, REG_EAXY | REG_TMP1 }, { "bnega", REG_A, REG_AX }, { "bnegax", REG_AX, REG_AX }, - { "bnegeax", REG_EAX, REG_EAX }, + { "bnegeax", REG_EAX, REG_EAX | REG_TMP1 }, { "booleq", REG_NONE, REG_AX }, { "boolge", REG_NONE, REG_AX }, { "boolgt", REG_NONE, REG_AX }, From 903e84c24cb9887a6d5029f78c3daeba50b70cea Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 31 Aug 2020 17:45:25 +0800 Subject: [PATCH 0484/2710] Std-functions are no longer inlined if they are unevaluated. --- src/cc65/expr.c | 2 +- src/cc65/exprdesc.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index a562dfa76..d39c9ebb6 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -593,7 +593,7 @@ static void FunctionCall (ExprDesc* Expr) } /* Check for known standard functions and inline them */ - if (Expr->Name != 0) { + if (Expr->Name != 0 && !ED_IsUneval (Expr)) { int StdFunc = FindStdFunc ((const char*) Expr->Name); if (StdFunc >= 0) { /* Inline this function */ diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index 463828db6..810d68965 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -474,13 +474,13 @@ void ED_MarkForUneval (ExprDesc* Expr); /* Mark the expression as not to be evaluated */ #if defined(HAVE_INLINE) -INLINE int ED_MayBeUneval (const ExprDesc* Expr) -/* Check if the expression may be uevaluated */ +INLINE int ED_IsUneval (const ExprDesc* Expr) +/* Check if the expression is not to be evaluated */ { return (Expr->Flags & E_EVAL_UNEVAL) == E_EVAL_UNEVAL; } #else -# define ED_MayBeUneval(Expr) (((Expr)->Flags & E_EVAL_UNEVAL) == E_EVAL_UNEVAL) +# define ED_IsUneval(Expr) (((Expr)->Flags & E_EVAL_UNEVAL) == E_EVAL_UNEVAL) #endif #if defined(HAVE_INLINE) From e2f950b15e323bb89b31b2a0259c684df3edf262 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 31 Aug 2020 17:45:36 +0800 Subject: [PATCH 0485/2710] Avoided referencing string literals with sizeof so that they are not output if unused elsewhere. --- src/cc65/expr.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index d39c9ebb6..e1b22ac50 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -923,7 +923,11 @@ static void Primary (ExprDesc* E) case TOK_SCONST: case TOK_WCSCONST: /* String literal */ - E->LVal = UseLiteral (CurTok.SVal); + if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + E->LVal = UseLiteral (CurTok.SVal); + } else { + E->LVal = CurTok.SVal; + } E->Type = GetCharArrayType (GetLiteralSize (CurTok.SVal)); E->Flags = E_LOC_LITERAL | E_RTYPE_RVAL | E_ADDRESS_OF; E->IVal = 0; @@ -1996,19 +2000,18 @@ void hie10 (ExprDesc* Expr) /* Remember the output queue pointer */ CodeMark Mark; GetCodePos (&Mark); - hie10 (Expr); - if (ED_IsBitField (Expr)) { + + /* The expression shall be unevaluated */ + ExprDesc Uneval; + ED_Init (&Uneval); + ED_MarkForUneval (&Uneval); + hie10 (&Uneval); + if (ED_IsBitField (&Uneval)) { Error ("Cannot apply 'sizeof' to bit-field"); Size = 0; } else { - /* If the expression is a literal string, release it, so it - ** won't be output as data if not used elsewhere. - */ - if (ED_IsLocLiteral (Expr)) { - ReleaseLiteral (Expr->LVal); - } /* Calculate the size */ - Size = ExprCheckedSizeOf (Expr->Type); + Size = ExprCheckedSizeOf (Uneval.Type); } /* Remove any generated code */ RemoveCode (&Mark); From 6e0fb630d75b517faa48eea4a01b7edf76ac5d59 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 5 Sep 2020 21:31:22 +0800 Subject: [PATCH 0486/2710] Fixed check for processor flags usage in case of PHP. --- src/cc65/codeent.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 7dd90833b..09ca0a9c5 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -476,6 +476,11 @@ int CE_UseLoadFlags (CodeEntry* E) } } + /* PHP will use all flags */ + if (E->OPC == OP65_PHP) { + return 1; + } + /* Anything else */ return 0; } From 1cde952cf52a4c606680d1aebe9d9d0eaa146c4d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 7 Sep 2020 04:19:27 +0800 Subject: [PATCH 0487/2710] Fixed comparing an enum type with a non-enum type in DoCompare(). --- src/cc65/typecmp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index 24d9a385f..f179bff14 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -203,8 +203,8 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) if ((IsTypeEnum (lhs) || IsTypeEnum (rhs))) { /* Compare the tag types */ - Sym1 = GetESUSymEntry (lhs); - Sym2 = GetESUSymEntry (rhs); + Sym1 = IsTypeEnum (lhs) ? GetESUSymEntry (lhs) : 0; + Sym2 = IsTypeEnum (rhs) ? GetESUSymEntry (rhs) : 0; if (Sym1 != Sym2) { if (Sym1 == 0 || Sym2 == 0) { From 6bb2d1d5d1d67e63af8e84619eaa261bfda5d952 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 7 Sep 2020 04:19:27 +0800 Subject: [PATCH 0488/2710] Fixed a comment on struct/union types in DoCompare(). --- src/cc65/typecmp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index f179bff14..1f4643e73 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -378,11 +378,13 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) if (Sym1 != Sym2) { /* Both must be in the same scope and have the same name to - ** be identical. This shouldn't happen in the current code - ** base, but we still do this to be future-proof. + ** be identical. */ if (Sym1->Owner != Sym2->Owner || strcmp (Sym1->Name, Sym2->Name) != 0) { + /* This shouldn't happen in the current code base, but + ** we still handle this case to be future-proof. + */ SetResult (Result, TC_INCOMPATIBLE); return; } From 23a8b2c303f7329b29c7d9eb0604b056f66c75a4 Mon Sep 17 00:00:00 2001 From: Tevo <estevan.cps@gmail.com> Date: Thu, 3 Sep 2020 00:06:31 -0300 Subject: [PATCH 0489/2710] Define integer size macros for lacking systems Define integer size macros for lacking systems --- src/common/inttypes.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/common/inttypes.h b/src/common/inttypes.h index 29ac778ef..a36543e63 100644 --- a/src/common/inttypes.h +++ b/src/common/inttypes.h @@ -57,6 +57,16 @@ typedef size_t uintptr_t; typedef ptrdiff_t intmax_t; typedef size_t uintmax_t; +#define INT8_MAX (0x7F) +#define INT16_MAX (0x7FFF) +#define INT32_MAX (0x7FFFFFFF) + +#define INT8_MIN (-INT8_MAX - 1) +#define INT16_MIN (-INT16_MAX - 1) + +#define UINT8_MAX (0xFF) +#define UINT16_MAX (0xFFFF) + #endif From 1e7a9e44afeefdcd3746ac0ff1ec304a0b9e785b Mon Sep 17 00:00:00 2001 From: Tevo <estevan.cps@gmail.com> Date: Sun, 6 Sep 2020 21:19:01 -0300 Subject: [PATCH 0490/2710] Update comment to reflect addition of integer boundary constants --- src/common/inttypes.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/common/inttypes.h b/src/common/inttypes.h index a36543e63..0d8caf32a 100644 --- a/src/common/inttypes.h +++ b/src/common/inttypes.h @@ -38,7 +38,8 @@ -/* If we have <stdint.h>, include it; otherwise, adapt types from <stddef.h>. +/* If we have <stdint.h>, include it; otherwise, adapt types from <stddef.h> +** and define integer boundary constants. ** gcc and msvc don't define __STDC_VERSION__ without special flags, so check ** for them explicitly. Undefined symbols are replaced by zero; so, checks for ** defined(__GNUC__) and defined(_MSC_VER) aren't necessary. From 9a0e4a35e1c1083f3c3c900c1d3888a048b30a96 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sat, 5 Sep 2020 20:03:24 +0200 Subject: [PATCH 0491/2710] Fix enum bit-field ICE #1244 This previously resulted in an ICE: cc65: Check failed: (Entry->Type->C & T_MASK_SIGN) == T_SIGN_SIGNED, file 'cc65/symtab.c', line 874 This CHECK is in the code that deals with changing `int` bitfields to `unsigned int`. Work around this by treating enum bit-fields as having their signedness specified, so this type change code does not get called. Fixes #1244. --- src/cc65/declare.c | 6 ++ src/cc65/symtab.c | 1 + test/val/enum-bitfield.c | 158 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 165 insertions(+) create mode 100644 test/val/enum-bitfield.c diff --git a/src/cc65/declare.c b/src/cc65/declare.c index d6286e62d..857021671 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1446,6 +1446,12 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, D->Type[0].C |= T_ENUM; SetESUSymEntry (D->Type, Entry); D->Type[1].C = T_END; + /* The signedness of enums is determined by the type, so say this is specified to avoid + ** the int -> unsigned int handling for plain int bit-fields in AddBitField. + */ + if (SignednessSpecified) { + *SignednessSpecified = 1; + } break; case TOK_IDENT: diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 10dc0d3ff..5546d450c 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -870,6 +870,7 @@ SymEntry* AddBitField (const char* Name, const Type* T, unsigned Offs, if (!SignednessSpecified) { /* int is treated as signed int everywhere except bit-fields; switch it to unsigned, ** since this is allowed for bit-fields and avoids sign-extension, so is much faster. + ** enums set SignednessSpecified to 1 to avoid this adjustment. */ CHECK ((Entry->Type->C & T_MASK_SIGN) == T_SIGN_SIGNED); Entry->Type->C &= ~T_MASK_SIGN; diff --git a/test/val/enum-bitfield.c b/test/val/enum-bitfield.c new file mode 100644 index 000000000..62e05f71f --- /dev/null +++ b/test/val/enum-bitfield.c @@ -0,0 +1,158 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of enum bit-fields; see https://github.com/cc65/cc65/issues/1244 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +/* Enum with underlying type unsigned int. */ +enum e10u { + E10U_200 = 200, + E10U_1000 = 1000, +}; + +static struct enum_bitfield_uint { + enum e10u x : 1; + enum e10u y : 8; + enum e10u z : 16; +} e10ubf = {0, E10U_200, E10U_1000}; + +static void test_enum_bitfield_uint(void) +{ + if (sizeof (struct enum_bitfield_uint) != 4) { + printf ("Got sizeof(struct enum_bitfield_uint) = %zu, expected 4.\n", + sizeof(struct enum_bitfield_uint)); + failures++; + } + + if (e10ubf.x != 0) { + printf ("Got e10ubf.x = %u, expected 0.\n", e10ubf.x); + failures++; + } + if (e10ubf.y != 200) { + printf ("Got e10ubf.y = %u, expected 200.\n", e10ubf.y); + failures++; + } + if (e10ubf.z != 1000) { + printf ("Got e10ubf.z = %u, expected 1000.\n", e10ubf.z); + failures++; + } + + e10ubf.x = 1; + e10ubf.y = 17; + e10ubf.z = 1023; + + if (e10ubf.x != 1) { + printf ("Got e10ubf.x = %u, expected 1.\n", e10ubf.x); + failures++; + } + + /* Check signedness, should be unsigned. */ + { + long v = e10ubf.x - 2; + if (v < 0) { + printf ("Got negative v = %ld, expected large positive.\n", v); + failures++; + } + } + + if (e10ubf.y != 17) { + printf ("Got e10ubf.y = %u, expected 17.\n", e10ubf.y); + failures++; + } + if (e10ubf.z != 1023) { + printf ("Got e10ubf.z = %u, expected 1023.\n", e10ubf.z); + failures++; + } +} + +/* Enum with underlying type signed int. */ +enum e11i { + E11I_M1 = -1, + E11I_100 = 100, + E11I_1000 = 1000, +}; + +static struct enum_bitfield_int { + enum e11i x : 2; + enum e11i y : 8; + enum e11i z : 16; +} e11ibf = {E11I_M1, E11I_100, E11I_1000}; + +static void test_enum_bitfield_int(void) +{ + if (sizeof (struct enum_bitfield_int) != 4) { + printf ("Got sizeof(struct enum_bitfield_int) = %zu, expected 4.\n", + sizeof(struct enum_bitfield_int)); + failures++; + } + + if (e11ibf.x != -1) { + printf ("Got e11ibf.x = %d, expected -1.\n", e11ibf.x); + failures++; + } + if (e11ibf.y != 100) { + printf ("Got e11ibf.y = %d, expected 100.\n", e11ibf.y); + failures++; + } + if (e11ibf.z != 1000) { + printf ("Got e11ibf.z = %d, expected 1000.\n", e11ibf.z); + failures++; + } + + e11ibf.x = 1; + e11ibf.y = 17; + e11ibf.z = 1023; + + if (e11ibf.x != 1) { + printf ("Got e11ibf.x = %d, expected 1.\n", e11ibf.x); + failures++; + } + + /* Check signedness, should be signed. */ + { + long v = e11ibf.x - 2; + if (v > 0) { + printf ("Got positive v = %ld, expected negative.\n", v); + failures++; + } + } + + if (e11ibf.y != 17) { + printf ("Got e11ibf.y = %d, expected 17.\n", e11ibf.y); + failures++; + } + if (e11ibf.z != 1023) { + printf ("Got e11ibf.z = %d, expected 1023.\n", e11ibf.z); + failures++; + } +} + +int main(void) +{ + test_enum_bitfield_uint(); + test_enum_bitfield_int(); + printf("failures: %u\n", failures); + return failures; +} From 64ef562fa76cb89487f67fe7568ba350132f4696 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 7 Sep 2020 05:11:48 +0800 Subject: [PATCH 0492/2710] Moved all optimization steps from codeopt.c and some optimization steps from coptind.c into new separate files. --- src/cc65.vcxproj | 4 + src/cc65/codeopt.c | 655 +------------------------ src/cc65/coptind.c | 1105 +++---------------------------------------- src/cc65/coptind.h | 87 +--- src/cc65/coptjmp.c | 1009 +++++++++++++++++++++++++++++++++++++++ src/cc65/coptjmp.h | 116 +++++ src/cc65/coptmisc.c | 735 ++++++++++++++++++++++++++++ src/cc65/coptmisc.h | 113 +++++ 8 files changed, 2046 insertions(+), 1778 deletions(-) create mode 100644 src/cc65/coptjmp.c create mode 100644 src/cc65/coptjmp.h create mode 100644 src/cc65/coptmisc.c create mode 100644 src/cc65/coptmisc.h diff --git a/src/cc65.vcxproj b/src/cc65.vcxproj index d566c8bc1..1015b389f 100644 --- a/src/cc65.vcxproj +++ b/src/cc65.vcxproj @@ -93,6 +93,8 @@ <ClInclude Include="cc65\coptc02.h" /> <ClInclude Include="cc65\coptcmp.h" /> <ClInclude Include="cc65\coptind.h" /> + <ClInclude Include="cc65\coptjmp.h" /> + <ClInclude Include="cc65\coptmisc.h" /> <ClInclude Include="cc65\coptneg.h" /> <ClInclude Include="cc65\coptptrload.h" /> <ClInclude Include="cc65\coptptrstore.h" /> @@ -167,6 +169,8 @@ <ClCompile Include="cc65\coptc02.c" /> <ClCompile Include="cc65\coptcmp.c" /> <ClCompile Include="cc65\coptind.c" /> + <ClCompile Include="cc65\coptjmp.c" /> + <ClCompile Include="cc65\coptmisc.c" /> <ClCompile Include="cc65\coptneg.c" /> <ClCompile Include="cc65\coptptrload.c" /> <ClCompile Include="cc65\coptptrstore.c" /> diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index 69ac35005..4a7722830 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -48,7 +48,6 @@ #include "xsprintf.h" /* cc65 */ -#include "asmlabel.h" #include "codeent.h" #include "codeinfo.h" #include "codeopt.h" @@ -56,6 +55,8 @@ #include "coptc02.h" #include "coptcmp.h" #include "coptind.h" +#include "coptjmp.h" +#include "coptmisc.h" #include "coptneg.h" #include "coptptrload.h" #include "coptptrstore.h" @@ -69,660 +70,8 @@ #include "error.h" #include "global.h" #include "output.h" -#include "symtab.h" -/*****************************************************************************/ -/* Optimize loads */ -/*****************************************************************************/ - - - -static unsigned OptLoad1 (CodeSeg* S) -/* Search for a call to ldaxysp where X is not used later and replace it by -** a load of just the A register. -*/ -{ - unsigned I; - unsigned Changes = 0; - - /* Walk over the entries */ - I = 0; - while (I < CS_GetEntryCount (S)) { - - CodeEntry* E; - - /* Get next entry */ - E = CS_GetEntry (S, I); - - /* Check for the sequence */ - if (CE_IsCallTo (E, "ldaxysp") && - RegValIsKnown (E->RI->In.RegY) && - !RegXUsed (S, I+1)) { - - CodeEntry* X; - - /* Reload the Y register */ - const char* Arg = MakeHexArg (E->RI->In.RegY - 1); - X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - CS_InsertEntry (S, X, I+1); - - /* Load from stack */ - X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, E->LI); - CS_InsertEntry (S, X, I+2); - - /* Now remove the call to the subroutine */ - CS_DelEntry (S, I); - - /* Remember, we had changes */ - ++Changes; - - } - - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} - - - -static unsigned OptLoad2 (CodeSeg* S) -/* Replace calls to ldaxysp by inline code */ -{ - unsigned I; - unsigned Changes = 0; - - /* Walk over the entries */ - I = 0; - while (I < CS_GetEntryCount (S)) { - - CodeEntry* L[3]; - - /* Get next entry */ - L[0] = CS_GetEntry (S, I); - - /* Check for the sequence */ - if (CE_IsCallTo (L[0], "ldaxysp")) { - - CodeEntry* X; - - /* Followed by sta abs/stx abs? */ - if (CS_GetEntries (S, L+1, I+1, 2) && - L[1]->OPC == OP65_STA && - L[2]->OPC == OP65_STX && - (L[1]->Arg == 0 || - L[2]->Arg == 0 || - strcmp (L[1]->Arg, L[2]->Arg) != 0) && - !CS_RangeHasLabel (S, I+1, 2) && - !RegXUsed (S, I+3)) { - - /* A/X are stored into memory somewhere and X is not used - ** later - */ - - /* lda (sp),y */ - X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI); - CS_InsertEntry (S, X, I+3); - - /* sta abs */ - X = NewCodeEntry (OP65_STA, L[2]->AM, L[2]->Arg, 0, L[2]->LI); - CS_InsertEntry (S, X, I+4); - - /* dey */ - X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, L[0]->LI); - CS_InsertEntry (S, X, I+5); - - /* lda (sp),y */ - X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI); - CS_InsertEntry (S, X, I+6); - - /* sta abs */ - X = NewCodeEntry (OP65_STA, L[1]->AM, L[1]->Arg, 0, L[1]->LI); - CS_InsertEntry (S, X, I+7); - - /* Now remove the call to the subroutine and the sta/stx */ - CS_DelEntries (S, I, 3); - - } else { - - /* Standard replacement */ - - /* lda (sp),y */ - X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI); - CS_InsertEntry (S, X, I+1); - - /* tax */ - X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, L[0]->LI); - CS_InsertEntry (S, X, I+2); - - /* dey */ - X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, L[0]->LI); - CS_InsertEntry (S, X, I+3); - - /* lda (sp),y */ - X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI); - CS_InsertEntry (S, X, I+4); - - /* Now remove the call to the subroutine */ - CS_DelEntry (S, I); - - } - - /* Remember, we had changes */ - ++Changes; - - } - - /* Next entry */ - ++I; - } - - /* Return the number of changes made */ - return Changes; -} - - - -static unsigned OptLoad3 (CodeSeg* S) -/* Remove repeated loads from one and the same memory location */ -{ - unsigned Changes = 0; - CodeEntry* Load = 0; - - /* Walk over the entries */ - unsigned I = 0; - while (I < CS_GetEntryCount (S)) { - - /* Get next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Forget a preceeding load if we have a label */ - if (Load && CE_HasLabel (E)) { - Load = 0; - } - - /* Check if this insn is a load */ - if (E->Info & OF_LOAD) { - - CodeEntry* N; - - /* If we had a preceeding load that is identical, remove this one. - ** If it is not identical, or we didn't have one, remember it. - */ - if (Load != 0 && - E->OPC == Load->OPC && - E->AM == Load->AM && - ((E->Arg == 0 && Load->Arg == 0) || - strcmp (E->Arg, Load->Arg) == 0) && - (N = CS_GetNextEntry (S, I)) != 0 && - (N->Info & OF_CBRA) == 0) { - - /* Now remove the call to the subroutine */ - CS_DelEntry (S, I); - - /* Remember, we had changes */ - ++Changes; - - /* Next insn */ - continue; - - } else { - - Load = E; - - } - - } else if ((E->Info & OF_CMP) == 0 && (E->Info & OF_CBRA) == 0) { - /* Forget the first load on occurance of any insn we don't like */ - Load = 0; - } - - /* Next entry */ - ++I; - } - - /* Return the number of changes made */ - return Changes; -} - - - -/*****************************************************************************/ -/* Decouple operations */ -/*****************************************************************************/ - - - -static unsigned OptDecouple (CodeSeg* S) -/* Decouple operations, that is, do the following replacements: -** -** dex -> ldx #imm -** inx -> ldx #imm -** dey -> ldy #imm -** iny -> ldy #imm -** tax -> ldx #imm -** txa -> lda #imm -** tay -> ldy #imm -** tya -> lda #imm -** lda zp -> lda #imm -** ldx zp -> ldx #imm -** ldy zp -> ldy #imm -** -** Provided that the register values are known of course. -*/ -{ - unsigned Changes = 0; - unsigned I; - - /* Walk over the entries */ - I = 0; - while (I < CS_GetEntryCount (S)) { - - const char* Arg; - - /* Get next entry and it's input register values */ - CodeEntry* E = CS_GetEntry (S, I); - const RegContents* In = &E->RI->In; - - /* Assume we have no replacement */ - CodeEntry* X = 0; - - /* Check the instruction */ - switch (E->OPC) { - - case OP65_DEA: - if (RegValIsKnown (In->RegA)) { - Arg = MakeHexArg ((In->RegA - 1) & 0xFF); - X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); - } - break; - - case OP65_DEX: - if (RegValIsKnown (In->RegX)) { - Arg = MakeHexArg ((In->RegX - 1) & 0xFF); - X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); - } - break; - - case OP65_DEY: - if (RegValIsKnown (In->RegY)) { - Arg = MakeHexArg ((In->RegY - 1) & 0xFF); - X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - } - break; - - case OP65_INA: - if (RegValIsKnown (In->RegA)) { - Arg = MakeHexArg ((In->RegA + 1) & 0xFF); - X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); - } - break; - - case OP65_INX: - if (RegValIsKnown (In->RegX)) { - Arg = MakeHexArg ((In->RegX + 1) & 0xFF); - X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); - } - break; - - case OP65_INY: - if (RegValIsKnown (In->RegY)) { - Arg = MakeHexArg ((In->RegY + 1) & 0xFF); - X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - } - break; - - case OP65_LDA: - if (E->AM == AM65_ZP) { - switch (GetKnownReg (E->Use & REG_ZP, In)) { - case REG_TMP1: - Arg = MakeHexArg (In->Tmp1); - X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); - break; - - case REG_PTR1_LO: - Arg = MakeHexArg (In->Ptr1Lo); - X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); - break; - - case REG_PTR1_HI: - Arg = MakeHexArg (In->Ptr1Hi); - X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); - break; - - case REG_SREG_LO: - Arg = MakeHexArg (In->SRegLo); - X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); - break; - - case REG_SREG_HI: - Arg = MakeHexArg (In->SRegHi); - X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); - break; - } - } - break; - - case OP65_LDX: - if (E->AM == AM65_ZP) { - switch (GetKnownReg (E->Use & REG_ZP, In)) { - case REG_TMP1: - Arg = MakeHexArg (In->Tmp1); - X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); - break; - - case REG_PTR1_LO: - Arg = MakeHexArg (In->Ptr1Lo); - X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); - break; - - case REG_PTR1_HI: - Arg = MakeHexArg (In->Ptr1Hi); - X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); - break; - - case REG_SREG_LO: - Arg = MakeHexArg (In->SRegLo); - X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); - break; - - case REG_SREG_HI: - Arg = MakeHexArg (In->SRegHi); - X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); - break; - } - } - break; - - case OP65_LDY: - if (E->AM == AM65_ZP) { - switch (GetKnownReg (E->Use, In)) { - case REG_TMP1: - Arg = MakeHexArg (In->Tmp1); - X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - break; - - case REG_PTR1_LO: - Arg = MakeHexArg (In->Ptr1Lo); - X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - break; - - case REG_PTR1_HI: - Arg = MakeHexArg (In->Ptr1Hi); - X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - break; - - case REG_SREG_LO: - Arg = MakeHexArg (In->SRegLo); - X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - break; - - case REG_SREG_HI: - Arg = MakeHexArg (In->SRegHi); - X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - break; - } - } - break; - - case OP65_TAX: - if (E->RI->In.RegA >= 0) { - Arg = MakeHexArg (In->RegA); - X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); - } - break; - - case OP65_TAY: - if (E->RI->In.RegA >= 0) { - Arg = MakeHexArg (In->RegA); - X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - } - break; - - case OP65_TXA: - if (E->RI->In.RegX >= 0) { - Arg = MakeHexArg (In->RegX); - X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); - } - break; - - case OP65_TYA: - if (E->RI->In.RegY >= 0) { - Arg = MakeHexArg (In->RegY); - X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); - } - break; - - default: - /* Avoid gcc warnings */ - break; - - } - - /* Insert the replacement if we have one */ - if (X) { - CS_InsertEntry (S, X, I+1); - CS_DelEntry (S, I); - ++Changes; - } - - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} - - - -/*****************************************************************************/ -/* Optimize stack pointer ops */ -/*****************************************************************************/ - - - -static unsigned IsDecSP (const CodeEntry* E) -/* Check if this is an insn that decrements the stack pointer. If so, return -** the decrement. If not, return zero. -** The function expects E to be a subroutine call. -*/ -{ - if (strncmp (E->Arg, "decsp", 5) == 0) { - if (E->Arg[5] >= '1' && E->Arg[5] <= '8') { - return (E->Arg[5] - '0'); - } - } else if (strcmp (E->Arg, "subysp") == 0 && RegValIsKnown (E->RI->In.RegY)) { - return E->RI->In.RegY; - } - - /* If we come here, it's not a decsp op */ - return 0; -} - - - -static unsigned OptStackPtrOps (CodeSeg* S) -/* Merge adjacent calls to decsp into one. NOTE: This function won't merge all -** known cases! -*/ -{ - unsigned Changes = 0; - unsigned I; - - /* Walk over the entries */ - I = 0; - while (I < CS_GetEntryCount (S)) { - - unsigned Dec1; - unsigned Dec2; - const CodeEntry* N; - - /* Get the next entry */ - const CodeEntry* E = CS_GetEntry (S, I); - - /* Check for decspn or subysp */ - if (E->OPC == OP65_JSR && - (Dec1 = IsDecSP (E)) > 0 && - (N = CS_GetNextEntry (S, I)) != 0 && - (Dec2 = IsDecSP (N)) > 0 && - (Dec1 += Dec2) <= 255 && - !CE_HasLabel (N)) { - - CodeEntry* X; - char Buf[20]; - - /* We can combine the two */ - if (Dec1 <= 8) { - /* Insert a call to decsp */ - xsprintf (Buf, sizeof (Buf), "decsp%u", Dec1); - X = NewCodeEntry (OP65_JSR, AM65_ABS, Buf, 0, N->LI); - CS_InsertEntry (S, X, I+2); - } else { - /* Insert a call to subysp */ - const char* Arg = MakeHexArg (Dec1); - X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, N->LI); - CS_InsertEntry (S, X, I+2); - X = NewCodeEntry (OP65_JSR, AM65_ABS, "subysp", 0, N->LI); - CS_InsertEntry (S, X, I+3); - } - - /* Delete the old code */ - CS_DelEntries (S, I, 2); - - /* Regenerate register info */ - CS_GenRegInfo (S); - - /* Remember we had changes */ - ++Changes; - - } else { - - /* Next entry */ - ++I; - } - - } - - /* Return the number of changes made */ - return Changes; -} - -static unsigned OptGotoSPAdj (CodeSeg* S) -/* Optimize SP adjustment for forward 'goto' */ -{ - unsigned Changes = 0; - unsigned I; - - /* Walk over the entries */ - I = 0; - while (I < CS_GetEntryCount (S)) { - - CodeEntry* L[10], *X; - unsigned short adjustment; - const char* Arg; - - /* Get next entry */ - L[0] = CS_GetEntry (S, I); - - /* Check for the sequence generated by g_lateadjustSP */ - if (L[0]->OPC == OP65_PHA && - CS_GetEntries (S, L+1, I+1, 9) && - L[1]->OPC == OP65_LDA && - L[1]->AM == AM65_ABS && - L[2]->OPC == OP65_CLC && - L[3]->OPC == OP65_ADC && - strcmp (L[3]->Arg, "sp") == 0 && - L[6]->OPC == OP65_ADC && - strcmp (L[6]->Arg, "sp+1") == 0 && - L[9]->OPC == OP65_JMP) { - adjustment = FindSPAdjustment (L[1]->Arg); - - if (adjustment == 0) { - /* No SP adjustment needed, remove the whole sequence */ - CS_DelEntries (S, I, 9); - } - else if (adjustment >= 65536 - 8) { - /* If adjustment is in range [-8, 0) we use decsp* calls */ - char Buf[20]; - adjustment = 65536 - adjustment; - xsprintf (Buf, sizeof (Buf), "decsp%u", adjustment); - X = NewCodeEntry (OP65_JSR, AM65_ABS, Buf, 0, L[1]->LI); - CS_InsertEntry (S, X, I + 9); - - /* Delete the old code */ - CS_DelEntries (S, I, 9); - } - else if (adjustment >= 65536 - 255) { - /* For range [-255, -8) we have ldy #, jsr subysp */ - adjustment = 65536 - adjustment; - Arg = MakeHexArg (adjustment); - X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[1]->LI); - CS_InsertEntry (S, X, I + 9); - X = NewCodeEntry (OP65_JSR, AM65_ABS, "subysp", 0, L[1]->LI); - CS_InsertEntry (S, X, I + 10); - - /* Delete the old code */ - CS_DelEntries (S, I, 9); - } - else if (adjustment > 255) { - /* For ranges [-32768, 255) and (255, 32767) the only modification - ** is to replace the absolute with immediate addressing - */ - Arg = MakeHexArg (adjustment & 0xff); - X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, L[1]->LI); - CS_InsertEntry (S, X, I + 1); - Arg = MakeHexArg (adjustment >> 8); - X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, L[5]->LI); - CS_InsertEntry (S, X, I + 6); - - /* Delete the old code */ - CS_DelEntry (S, I + 2); - CS_DelEntry (S, I + 6); - } - else if (adjustment > 8) { - /* For range (8, 255] we have ldy #, jsr addysp */ - Arg = MakeHexArg (adjustment & 0xff); - X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[1]->LI); - CS_InsertEntry (S, X, I + 9); - X = NewCodeEntry (OP65_JSR, AM65_ABS, "addysp", 0, L[1]->LI); - CS_InsertEntry (S, X, I + 10); - - /* Delete the old code */ - CS_DelEntries (S, I, 9); - } - else { - /* If adjustment is in range (0, 8] we use incsp* calls */ - char Buf[20]; - xsprintf (Buf, sizeof (Buf), "incsp%u", adjustment); - X = NewCodeEntry (OP65_JSR, AM65_ABS, Buf, 0, L[1]->LI); - CS_InsertEntry (S, X, I + 9); - - /* Delete the old code */ - CS_DelEntries (S, I, 9); - } - /* Regenerate register info */ - CS_GenRegInfo (S); - - /* Remember we had changes */ - Changes++; - - } else { - - /* Next entry */ - ++I; - } - - } - - /* Return the number of changes made */ - return Changes; -} /*****************************************************************************/ /* struct OptFunc */ diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index 811adff04..b506a21ca 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -124,46 +124,6 @@ static int MemAccess (CodeSeg* S, unsigned From, unsigned To, const CodeEntry* N -static int GetBranchDist (CodeSeg* S, unsigned From, CodeEntry* To) -/* Get the branch distance between the two entries and return it. The distance -** will be negative for backward jumps and positive for forward jumps. -*/ -{ - /* Get the index of the branch target */ - unsigned TI = CS_GetEntryIndex (S, To); - - /* Determine the branch distance */ - int Distance = 0; - if (TI >= From) { - /* Forward branch, do not count the current insn */ - unsigned J = From+1; - while (J < TI) { - CodeEntry* N = CS_GetEntry (S, J++); - Distance += N->Size; - } - } else { - /* Backward branch */ - unsigned J = TI; - while (J < From) { - CodeEntry* N = CS_GetEntry (S, J++); - Distance -= N->Size; - } - } - - /* Return the calculated distance */ - return Distance; -} - - - -static int IsShortDist (int Distance) -/* Return true if the given distance is a short branch distance */ -{ - return (Distance >= -125 && Distance <= 125); -} - - - static short ZPRegVal (unsigned short Use, const RegContents* RC) /* Return the contents of the given zeropage register */ { @@ -184,838 +144,6 @@ static short ZPRegVal (unsigned short Use, const RegContents* RC) -static short RegVal (unsigned short Use, const RegContents* RC) -/* Return the contents of the given register */ -{ - if ((Use & REG_A) != 0) { - return RC->RegA; - } else if ((Use & REG_X) != 0) { - return RC->RegX; - } else if ((Use & REG_Y) != 0) { - return RC->RegY; - } else { - return ZPRegVal (Use, RC); - } -} - - - -/*****************************************************************************/ -/* Replace jumps to RTS by RTS */ -/*****************************************************************************/ - - - -unsigned OptRTSJumps1 (CodeSeg* S) -/* Replace jumps to RTS by RTS */ -{ - unsigned Changes = 0; - - /* Walk over all entries minus the last one */ - unsigned I = 0; - while (I < CS_GetEntryCount (S)) { - - /* Get the next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if it's an unconditional branch to a local target */ - if ((E->Info & OF_UBRA) != 0 && - E->JumpTo != 0 && - E->JumpTo->Owner->OPC == OP65_RTS) { - - /* Insert an RTS instruction */ - CodeEntry* X = NewCodeEntry (OP65_RTS, AM65_IMP, 0, 0, E->LI); - CS_InsertEntry (S, X, I+1); - - /* Delete the jump */ - CS_DelEntry (S, I); - - /* Remember, we had changes */ - ++Changes; - - } - - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} - - - -unsigned OptRTSJumps2 (CodeSeg* S) -/* Replace long conditional jumps to RTS or to a final target */ -{ - unsigned Changes = 0; - - /* Walk over all entries minus the last one */ - unsigned I = 0; - while (I < CS_GetEntryCount (S) - 1) { - - /* Get the next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if it's an conditional branch to a local target */ - if ((E->Info & OF_CBRA) != 0 && /* Conditional branch */ - (E->Info & OF_LBRA) != 0 && /* Long branch */ - E->JumpTo != 0) { /* Local label */ - - - /* Get the jump target and the next entry. There's always a next - ** entry, because we don't cover the last entry in the loop. - */ - CodeEntry* X = 0; - CodeEntry* T = E->JumpTo->Owner; - CodeEntry* N = CS_GetNextEntry (S, I); - - /* Check if it's a jump to an RTS insn */ - if (T->OPC == OP65_RTS) { - - /* It's a jump to RTS. Create a conditional branch around an - ** RTS insn. - */ - X = NewCodeEntry (OP65_RTS, AM65_IMP, 0, 0, T->LI); - - } else if (T->OPC == OP65_JMP && T->JumpTo == 0) { - - /* It's a jump to a label outside the function. Create a - ** conditional branch around a jump to the external label. - */ - X = NewCodeEntry (OP65_JMP, AM65_ABS, T->Arg, T->JumpTo, T->LI); - - } - - /* If we have a replacement insn, insert it */ - if (X) { - - CodeLabel* LN; - opc_t NewBranch; - - /* Insert the new insn */ - CS_InsertEntry (S, X, I+1); - - /* Create a conditional branch with the inverse condition - ** around the replacement insn - */ - - /* Get the new branch opcode */ - NewBranch = MakeShortBranch (GetInverseBranch (E->OPC)); - - /* Get the label attached to N, create a new one if needed */ - LN = CS_GenLabel (S, N); - - /* Generate the branch */ - X = NewCodeEntry (NewBranch, AM65_BRA, LN->Name, LN, E->LI); - CS_InsertEntry (S, X, I+1); - - /* Delete the long branch */ - CS_DelEntry (S, I); - - /* Remember, we had changes */ - ++Changes; - - } - } - - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} - - - -/*****************************************************************************/ -/* Remove dead jumps */ -/*****************************************************************************/ - - - -unsigned OptDeadJumps (CodeSeg* S) -/* Remove dead jumps (jumps to the next instruction) */ -{ - unsigned Changes = 0; - - /* Walk over all entries minus the last one */ - unsigned I = 0; - while (I < CS_GetEntryCount (S)) { - - /* Get the next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if it's a branch, if it has a local target, and if the target - ** is the next instruction. - */ - if (E->AM == AM65_BRA && - E->JumpTo && - E->JumpTo->Owner == CS_GetNextEntry (S, I)) { - - /* Delete the dead jump */ - CS_DelEntry (S, I); - - /* Remember, we had changes */ - ++Changes; - - } else { - - /* Next entry */ - ++I; - - } - } - - /* Return the number of changes made */ - return Changes; -} - - - -/*****************************************************************************/ -/* Remove dead code */ -/*****************************************************************************/ - - - -unsigned OptDeadCode (CodeSeg* S) -/* Remove dead code (code that follows an unconditional jump or an rts/rti -** and has no label) -*/ -{ - unsigned Changes = 0; - - /* Walk over all entries */ - unsigned I = 0; - while (I < CS_GetEntryCount (S)) { - - CodeEntry* N; - CodeLabel* LN; - - /* Get this entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if it's an unconditional branch, and if the next entry has - ** no labels attached, or if the label is just used so that the insn - ** can jump to itself. - */ - if ((E->Info & OF_DEAD) != 0 && /* Dead code follows */ - (N = CS_GetNextEntry (S, I)) != 0 && /* Has next entry */ - (!CE_HasLabel (N) || /* Don't has a label */ - ((N->Info & OF_UBRA) != 0 && /* Uncond branch */ - (LN = N->JumpTo) != 0 && /* Jumps to known label */ - LN->Owner == N && /* Attached to insn */ - CL_GetRefCount (LN) == 1))) { /* Only reference */ - - /* Delete the next entry */ - CS_DelEntry (S, I+1); - - /* Remember, we had changes */ - ++Changes; - - } else { - - /* Next entry */ - ++I; - - } - } - - /* Return the number of changes made */ - return Changes; -} - - - -/*****************************************************************************/ -/* Optimize jump cascades */ -/*****************************************************************************/ - - - -unsigned OptJumpCascades (CodeSeg* S) -/* Optimize jump cascades (jumps to jumps). In such a case, the jump is -** replaced by a jump to the final location. This will in some cases produce -** worse code, because some jump targets are no longer reachable by short -** branches, but this is quite rare, so there are more advantages than -** disadvantages. -*/ -{ - unsigned Changes = 0; - - /* Walk over all entries */ - unsigned I = 0; - while (I < CS_GetEntryCount (S)) { - - CodeEntry* N; - CodeLabel* OldLabel; - - /* Get this entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check: - ** - if it's a branch, - ** - if it has a jump label, - ** - if this jump label is not attached to the instruction itself, - ** - if the target instruction is itself a branch, - ** - if either the first branch is unconditional or the target of - ** the second branch is internal to the function. - ** The latter condition will avoid conditional branches to targets - ** outside of the function (usually incspx), which won't simplify the - ** code, since conditional far branches are emulated by a short branch - ** around a jump. - */ - if ((E->Info & OF_BRA) != 0 && - (OldLabel = E->JumpTo) != 0 && - (N = OldLabel->Owner) != E && - (N->Info & OF_BRA) != 0 && - ((E->Info & OF_CBRA) == 0 || - N->JumpTo != 0)) { - - /* Check if we can use the final target label. That is the case, - ** if the target branch is an absolute branch; or, if it is a - ** conditional branch checking the same condition as the first one. - */ - if ((N->Info & OF_UBRA) != 0 || - ((E->Info & OF_CBRA) != 0 && - GetBranchCond (E->OPC) == GetBranchCond (N->OPC))) { - - /* This is a jump cascade and we may jump to the final target, - ** provided that the other insn does not jump to itself. If - ** this is the case, we can also jump to ourselves, otherwise - ** insert a jump to the new instruction and remove the old one. - */ - CodeEntry* X; - CodeLabel* LN = N->JumpTo; - - if (LN != 0 && LN->Owner == N) { - - /* We found a jump to a jump to itself. Replace our jump - ** by a jump to itself. - */ - CodeLabel* LE = CS_GenLabel (S, E); - X = NewCodeEntry (E->OPC, E->AM, LE->Name, LE, E->LI); - - } else { - - /* Jump to the final jump target */ - X = NewCodeEntry (E->OPC, E->AM, N->Arg, N->JumpTo, E->LI); - - } - - /* Insert it behind E */ - CS_InsertEntry (S, X, I+1); - - /* Remove E */ - CS_DelEntry (S, I); - - /* Remember, we had changes */ - ++Changes; - - /* Check if both are conditional branches, and the condition of - ** the second is the inverse of that of the first. In this case, - ** the second branch will never be taken, and we may jump directly - ** to the instruction behind this one. - */ - } else if ((E->Info & OF_CBRA) != 0 && (N->Info & OF_CBRA) != 0) { - - CodeEntry* X; /* Instruction behind N */ - CodeLabel* LX; /* Label attached to X */ - - /* Get the branch conditions of both branches */ - bc_t BC1 = GetBranchCond (E->OPC); - bc_t BC2 = GetBranchCond (N->OPC); - - /* Check the branch conditions */ - if (BC1 != GetInverseCond (BC2)) { - /* Condition not met */ - goto NextEntry; - } - - /* We may jump behind this conditional branch. Get the - ** pointer to the next instruction - */ - if ((X = CS_GetNextEntry (S, CS_GetEntryIndex (S, N))) == 0) { - /* N is the last entry, bail out */ - goto NextEntry; - } - - /* Get the label attached to X, create a new one if needed */ - LX = CS_GenLabel (S, X); - - /* Move the reference from E to the new label */ - CS_MoveLabelRef (S, E, LX); - - /* Remember, we had changes */ - ++Changes; - } - } - -NextEntry: - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} - - - -/*****************************************************************************/ -/* Optimize jsr/rts */ -/*****************************************************************************/ - - - -unsigned OptRTS (CodeSeg* S) -/* Optimize subroutine calls followed by an RTS. The subroutine call will get -** replaced by a jump. Don't bother to delete the RTS if it does not have a -** label, the dead code elimination should take care of it. -*/ -{ - unsigned Changes = 0; - - /* Walk over all entries minus the last one */ - unsigned I = 0; - while (I < CS_GetEntryCount (S)) { - - CodeEntry* N; - - /* Get this entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if it's a subroutine call and if the following insn is RTS */ - if (E->OPC == OP65_JSR && - (N = CS_GetNextEntry (S, I)) != 0 && - N->OPC == OP65_RTS) { - - /* Change the jsr to a jmp and use the additional info for a jump */ - E->AM = AM65_BRA; - CE_ReplaceOPC (E, OP65_JMP); - - /* Remember, we had changes */ - ++Changes; - - } - - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} - - - -/*****************************************************************************/ -/* Optimize jump targets */ -/*****************************************************************************/ - - - -unsigned OptJumpTarget1 (CodeSeg* S) -/* If the instruction preceeding an unconditional branch is the same as the -** instruction preceeding the jump target, the jump target may be moved -** one entry back. This is a size optimization, since the instruction before -** the branch gets removed. -*/ -{ - unsigned Changes = 0; - CodeEntry* E1; /* Entry 1 */ - CodeEntry* E2; /* Entry 2 */ - CodeEntry* T1; /* Jump target entry 1 */ - CodeLabel* TL1; /* Target label 1 */ - - /* Walk over the entries */ - unsigned I = 0; - while (I < CS_GetEntryCount (S)) { - - /* Get next entry */ - E2 = CS_GetNextEntry (S, I); - - /* Check if we have a jump or branch without a label attached, and - ** a jump target, which is not attached to the jump itself - */ - if (E2 != 0 && - (E2->Info & OF_UBRA) != 0 && - !CE_HasLabel (E2) && - E2->JumpTo && - E2->JumpTo->Owner != E2) { - - /* Get the entry preceeding the branch target */ - T1 = CS_GetPrevEntry (S, CS_GetEntryIndex (S, E2->JumpTo->Owner)); - if (T1 == 0) { - /* There is no such entry */ - goto NextEntry; - } - - /* The entry preceeding the branch target may not be the branch - ** insn. - */ - if (T1 == E2) { - goto NextEntry; - } - - /* Get the entry preceeding the jump */ - E1 = CS_GetEntry (S, I); - - /* Check if both preceeding instructions are identical */ - if (!CodeEntriesAreEqual (E1, T1)) { - /* Not equal, try next */ - goto NextEntry; - } - - /* Get the label for the instruction preceeding the jump target. - ** This routine will create a new label if the instruction does - ** not already have one. - */ - TL1 = CS_GenLabel (S, T1); - - /* Change the jump target to point to this new label */ - CS_MoveLabelRef (S, E2, TL1); - - /* If the instruction preceeding the jump has labels attached, - ** move references to this label to the new label. - */ - if (CE_HasLabel (E1)) { - CS_MoveLabels (S, E1, T1); - } - - /* Remove the entry preceeding the jump */ - CS_DelEntry (S, I); - - /* Remember, we had changes */ - ++Changes; - - } else { -NextEntry: - /* Next entry */ - ++I; - } - } - - /* Return the number of changes made */ - return Changes; -} - - - -unsigned OptJumpTarget2 (CodeSeg* S) -/* If a bcs jumps to a sec insn or a bcc jumps to clc, skip this insn, since -** it's job is already done. -*/ -{ - unsigned Changes = 0; - - /* Walk over the entries */ - unsigned I = 0; - while (I < CS_GetEntryCount (S)) { - - /* OP that may be skipped */ - opc_t OPC; - - /* Jump target insn, old and new */ - CodeEntry* T; - CodeEntry* N; - - /* New jump label */ - CodeLabel* L; - - /* Get next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if this is a bcc insn */ - if (E->OPC == OP65_BCC || E->OPC == OP65_JCC) { - OPC = OP65_CLC; - } else if (E->OPC == OP65_BCS || E->OPC == OP65_JCS) { - OPC = OP65_SEC; - } else { - /* Not what we're looking for */ - goto NextEntry; - } - - /* Must have a jump target */ - if (E->JumpTo == 0) { - goto NextEntry; - } - - /* Get the owner insn of the jump target and check if it's the one, we - ** will skip if present. - */ - T = E->JumpTo->Owner; - if (T->OPC != OPC) { - goto NextEntry; - } - - /* Get the entry following the branch target */ - N = CS_GetNextEntry (S, CS_GetEntryIndex (S, T)); - if (N == 0) { - /* There is no such entry */ - goto NextEntry; - } - - /* Get the label for the instruction following the jump target. - ** This routine will create a new label if the instruction does - ** not already have one. - */ - L = CS_GenLabel (S, N); - - /* Change the jump target to point to this new label */ - CS_MoveLabelRef (S, E, L); - - /* Remember that we had changes */ - ++Changes; - -NextEntry: - /* Next entry */ - ++I; - } - - /* Return the number of changes made */ - return Changes; -} - - - -unsigned OptJumpTarget3 (CodeSeg* S) -/* Jumps to load instructions of a register, that do already have the matching -** register contents may skip the load instruction, since it's job is already -** done. -*/ -{ - unsigned Changes = 0; - unsigned I; - - /* Walk over the entries */ - I = 0; - while (I < CS_GetEntryCount (S)) { - - CodeEntry* N; - - /* Get next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if this is a load insn with a label and the next insn is not - ** a conditional branch that needs the flags from the load. - */ - if ((E->Info & OF_LOAD) != 0 && - CE_IsConstImm (E) && - CE_HasLabel (E) && - (N = CS_GetNextEntry (S, I)) != 0 && - !CE_UseLoadFlags (N)) { - - unsigned J; - int K; - - /* New jump label */ - CodeLabel* LN = 0; - - /* Walk over all insn that jump here */ - for (J = 0; J < CE_GetLabelCount (E); ++J) { - - /* Get the label */ - CodeLabel* L = CE_GetLabel (E, J); - - /* Loop over all insn that reference this label. Since we may - ** eventually remove a reference in the loop, we must loop - ** from end down to start. - */ - for (K = CL_GetRefCount (L) - 1; K >= 0; --K) { - - /* Get the entry that jumps here */ - CodeEntry* Jump = CL_GetRef (L, K); - - /* Get the register info from this insn */ - short Val = RegVal (E->Chg, &Jump->RI->Out2); - - /* Check if the outgoing value is the one thats's loaded */ - if (Val == (unsigned char) E->Num) { - - /* OK, skip the insn. First, generate a label for the - ** next insn after E. - */ - if (LN == 0) { - LN = CS_GenLabel (S, N); - } - - /* Change the jump target to point to this new label */ - CS_MoveLabelRef (S, Jump, LN); - - /* Remember that we had changes */ - ++Changes; - } - } - } - - } - - /* Next entry */ - ++I; - } - - /* Return the number of changes made */ - return Changes; -} - - - -/*****************************************************************************/ -/* Optimize conditional branches */ -/*****************************************************************************/ - - - -unsigned OptCondBranches1 (CodeSeg* S) -/* Performs several optimization steps: -** -** - If an immediate load of a register is followed by a conditional jump that -** is never taken because the load of the register sets the flags in such a -** manner, remove the conditional branch. -** - If the conditional branch is always taken because of the register load, -** replace it by a jmp. -** - If a conditional branch jumps around an unconditional branch, remove the -** conditional branch and make the jump a conditional branch with the -** inverse condition of the first one. -*/ -{ - unsigned Changes = 0; - - /* Walk over the entries */ - unsigned I = 0; - while (I < CS_GetEntryCount (S)) { - - CodeEntry* N; - CodeLabel* L; - - /* Get next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if it's a register load */ - if ((E->Info & OF_LOAD) != 0 && /* It's a load instruction */ - E->AM == AM65_IMM && /* ..with immidiate addressing */ - (E->Flags & CEF_NUMARG) != 0 && /* ..and a numeric argument. */ - (N = CS_GetNextEntry (S, I)) != 0 && /* There is a following entry */ - (N->Info & OF_CBRA) != 0 && /* ..which is a conditional branch */ - !CE_HasLabel (N)) { /* ..and does not have a label */ - - /* Get the branch condition */ - bc_t BC = GetBranchCond (N->OPC); - - /* Check the argument against the branch condition */ - if ((BC == BC_EQ && E->Num != 0) || - (BC == BC_NE && E->Num == 0) || - (BC == BC_PL && (E->Num & 0x80) != 0) || - (BC == BC_MI && (E->Num & 0x80) == 0)) { - - /* Remove the conditional branch */ - CS_DelEntry (S, I+1); - - /* Remember, we had changes */ - ++Changes; - - } else if ((BC == BC_EQ && E->Num == 0) || - (BC == BC_NE && E->Num != 0) || - (BC == BC_PL && (E->Num & 0x80) == 0) || - (BC == BC_MI && (E->Num & 0x80) != 0)) { - - /* The branch is always taken, replace it by a jump */ - CE_ReplaceOPC (N, OP65_JMP); - - /* Remember, we had changes */ - ++Changes; - } - - } - - if ((E->Info & OF_CBRA) != 0 && /* It's a conditional branch */ - (L = E->JumpTo) != 0 && /* ..referencing a local label */ - (N = CS_GetNextEntry (S, I)) != 0 && /* There is a following entry */ - (N->Info & OF_UBRA) != 0 && /* ..which is an uncond branch, */ - !CE_HasLabel (N) && /* ..has no label attached */ - L->Owner == CS_GetNextEntry (S, I+1)) { /* ..and jump target follows */ - - /* Replace the jump by a conditional branch with the inverse branch - ** condition than the branch around it. - */ - CE_ReplaceOPC (N, GetInverseBranch (E->OPC)); - - /* Remove the conditional branch */ - CS_DelEntry (S, I); - - /* Remember, we had changes */ - ++Changes; - - } - - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} - - - -unsigned OptCondBranches2 (CodeSeg* S) -/* If on entry to a "rol a" instruction the accu is zero, and a beq/bne follows, -** we can remove the rol and branch on the state of the carry flag. -*/ -{ - unsigned Changes = 0; - unsigned I; - - /* Walk over the entries */ - I = 0; - while (I < CS_GetEntryCount (S)) { - - CodeEntry* N; - - /* Get next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if it's a rol insn with A in accu and a branch follows */ - if (E->OPC == OP65_ROL && - E->AM == AM65_ACC && - E->RI->In.RegA == 0 && - !CE_HasLabel (E) && - (N = CS_GetNextEntry (S, I)) != 0 && - (N->Info & OF_ZBRA) != 0 && - !RegAUsed (S, I+1)) { - - /* Replace the branch condition */ - switch (GetBranchCond (N->OPC)) { - case BC_EQ: CE_ReplaceOPC (N, OP65_JCC); break; - case BC_NE: CE_ReplaceOPC (N, OP65_JCS); break; - default: Internal ("Unknown branch condition in OptCondBranches2"); - } - - /* Delete the rol insn */ - CS_DelEntry (S, I); - - /* Remember, we had changes */ - ++Changes; - } - - /* Next entry */ - ++I; - } - - /* Return the number of changes made */ - return Changes; -} - - - /*****************************************************************************/ /* Remove unused loads and stores */ /*****************************************************************************/ @@ -1132,6 +260,70 @@ unsigned OptUnusedStores (CodeSeg* S) +unsigned OptLoad3 (CodeSeg* S) +/* Remove repeated loads from one and the same memory location */ +{ + unsigned Changes = 0; + CodeEntry* Load = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Forget a preceeding load if we have a label */ + if (Load && CE_HasLabel (E)) { + Load = 0; + } + + /* Check if this insn is a load */ + if (E->Info & OF_LOAD) { + + CodeEntry* N; + + /* If we had a preceeding load that is identical, remove this one. + ** If it is not identical, or we didn't have one, remember it. + */ + if (Load != 0 && + E->OPC == Load->OPC && + E->AM == Load->AM && + ((E->Arg == 0 && Load->Arg == 0) || + strcmp (E->Arg, Load->Arg) == 0) && + (N = CS_GetNextEntry (S, I)) != 0 && + (N->Info & OF_CBRA) == 0) { + + /* Now remove the call to the subroutine */ + CS_DelEntry (S, I); + + /* Remember, we had changes */ + ++Changes; + + /* Next insn */ + continue; + + } else { + + Load = E; + + } + + } else if ((E->Info & OF_CMP) == 0 && (E->Info & OF_CBRA) == 0) { + /* Forget the first load on occurance of any insn we don't like */ + Load = 0; + } + + /* Next entry */ + ++I; + } + + /* Return the number of changes made */ + return Changes; +} + + + unsigned OptDupLoads (CodeSeg* S) /* Remove loads of registers where the value loaded is already in the register. */ { @@ -2138,172 +1330,3 @@ unsigned OptPrecalc (CodeSeg* S) /* Return the number of changes made */ return Changes; } - - - -/*****************************************************************************/ -/* Optimize branch types */ -/*****************************************************************************/ - - - -unsigned OptBranchDist (CodeSeg* S) -/* Change branches for the distance needed. */ -{ - unsigned Changes = 0; - - /* Walk over the entries */ - unsigned I = 0; - while (I < CS_GetEntryCount (S)) { - - /* Get next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if it's a conditional branch to a local label. */ - if (E->Info & OF_CBRA) { - - /* Is this a branch to a local symbol? */ - if (E->JumpTo != 0) { - - /* Check if the branch distance is short */ - int IsShort = IsShortDist (GetBranchDist (S, I, E->JumpTo->Owner)); - - /* Make the branch short/long according to distance */ - if ((E->Info & OF_LBRA) == 0 && !IsShort) { - /* Short branch but long distance */ - CE_ReplaceOPC (E, MakeLongBranch (E->OPC)); - ++Changes; - } else if ((E->Info & OF_LBRA) != 0 && IsShort) { - /* Long branch but short distance */ - CE_ReplaceOPC (E, MakeShortBranch (E->OPC)); - ++Changes; - } - - } else if ((E->Info & OF_LBRA) == 0) { - - /* Short branch to external symbol - make it long */ - CE_ReplaceOPC (E, MakeLongBranch (E->OPC)); - ++Changes; - - } - - } else if ((CPUIsets[CPU] & CPU_ISET_65SC02) != 0 && - (E->Info & OF_UBRA) != 0 && - E->JumpTo != 0 && - IsShortDist (GetBranchDist (S, I, E->JumpTo->Owner))) { - - /* The jump is short and may be replaced by a BRA on the 65C02 CPU */ - CE_ReplaceOPC (E, OP65_BRA); - ++Changes; - } - - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} - - - -/*****************************************************************************/ -/* Optimize indirect loads */ -/*****************************************************************************/ - - - -unsigned OptIndLoads1 (CodeSeg* S) -/* Change -** -** lda (zp),y -** -** into -** -** lda (zp,x) -** -** provided that x and y are both zero. -*/ -{ - unsigned Changes = 0; - unsigned I; - - /* Walk over the entries */ - I = 0; - while (I < CS_GetEntryCount (S)) { - - /* Get next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if it's what we're looking for */ - if (E->OPC == OP65_LDA && - E->AM == AM65_ZP_INDY && - E->RI->In.RegY == 0 && - E->RI->In.RegX == 0) { - - /* Replace by the same insn with other addressing mode */ - CodeEntry* X = NewCodeEntry (E->OPC, AM65_ZPX_IND, E->Arg, 0, E->LI); - CS_InsertEntry (S, X, I+1); - - /* Remove the old insn */ - CS_DelEntry (S, I); - ++Changes; - } - - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} - - - -unsigned OptIndLoads2 (CodeSeg* S) -/* Change -** -** lda (zp,x) -** -** into -** -** lda (zp),y -** -** provided that x and y are both zero. -*/ -{ - unsigned Changes = 0; - unsigned I; - - /* Walk over the entries */ - I = 0; - while (I < CS_GetEntryCount (S)) { - - /* Get next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if it's what we're looking for */ - if (E->OPC == OP65_LDA && - E->AM == AM65_ZPX_IND && - E->RI->In.RegY == 0 && - E->RI->In.RegX == 0) { - - /* Replace by the same insn with other addressing mode */ - CodeEntry* X = NewCodeEntry (E->OPC, AM65_ZP_INDY, E->Arg, 0, E->LI); - CS_InsertEntry (S, X, I+1); - - /* Remove the old insn */ - CS_DelEntry (S, I); - ++Changes; - } - - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} diff --git a/src/cc65/coptind.h b/src/cc65/coptind.h index 90e27d547..64acb10d8 100644 --- a/src/cc65/coptind.h +++ b/src/cc65/coptind.h @@ -49,69 +49,15 @@ -unsigned OptRTSJumps1 (CodeSeg* S); -/* Replace jumps to RTS by RTS */ - -unsigned OptRTSJumps2 (CodeSeg* S); -/* Replace long conditional jumps to RTS */ - -unsigned OptDeadJumps (CodeSeg* S); -/* Remove dead jumps (jumps to the next instruction) */ - -unsigned OptDeadCode (CodeSeg* S); -/* Remove dead code (code that follows an unconditional jump or an rts/rti -** and has no label) -*/ - -unsigned OptJumpCascades (CodeSeg* S); -/* Optimize jump cascades (jumps to jumps). In such a case, the jump is -** replaced by a jump to the final location. This will in some cases produce -** worse code, because some jump targets are no longer reachable by short -** branches, but this is quite rare, so there are more advantages than -** disadvantages. -*/ - -unsigned OptRTS (CodeSeg* S); -/* Optimize subroutine calls followed by an RTS. The subroutine call will get -** replaced by a jump. Don't bother to delete the RTS if it does not have a -** label, the dead code elimination should take care of it. -*/ - -unsigned OptJumpTarget1 (CodeSeg* S); -/* If the instruction preceeding an unconditional branch is the same as the -** instruction preceeding the jump target, the jump target may be moved -** one entry back. This is a size optimization, since the instruction before -** the branch gets removed. -*/ - -unsigned OptJumpTarget2 (CodeSeg* S); -/* If a bcs jumps to a sec insn or a bcc jumps to clc, skip this insn, since -** it's job is already done. -*/ - -unsigned OptJumpTarget3 (CodeSeg* S); -/* Jumps to load instructions of a register, that do already have the matching -** register contents may skip the load instruction, since it's job is already -** done. -*/ - -unsigned OptCondBranches1 (CodeSeg* S); -/* If an immidiate load of a register is followed by a conditional jump that -** is never taken because the load of the register sets the flags in such a -** manner, remove the conditional branch. -*/ - -unsigned OptCondBranches2 (CodeSeg* S); -/* If on entry to a "rol a" instruction the accu is zero, and a beq/bne follows, -** we can remove the rol and branch on the state of the carry. -*/ - unsigned OptUnusedLoads (CodeSeg* S); /* Remove loads of registers where the value loaded is not used later. */ unsigned OptUnusedStores (CodeSeg* S); /* Remove stores into zero page registers that aren't used later */ +unsigned OptLoad3 (CodeSeg* S); +/* Remove repeated loads from one and the same memory location */ + unsigned OptDupLoads (CodeSeg* S); /* Remove loads of registers where the value loaded is already in the register. */ @@ -144,33 +90,6 @@ unsigned OptPrecalc (CodeSeg* S); ** known by a load of the final value. */ -unsigned OptBranchDist (CodeSeg* S); -/* Change branches for the distance needed. */ - -unsigned OptIndLoads1 (CodeSeg* S); -/* Change -** -** lda (zp),y -** -** into -** -** lda (zp,x) -** -** provided that x and y are both zero. -*/ - -unsigned OptIndLoads2 (CodeSeg* S); -/* Change -** -** lda (zp,x) -** -** into -** -** lda (zp),y -** -** provided that x and y are both zero. -*/ - /* End of coptind.h */ diff --git a/src/cc65/coptjmp.c b/src/cc65/coptjmp.c new file mode 100644 index 000000000..693c7eb79 --- /dev/null +++ b/src/cc65/coptjmp.c @@ -0,0 +1,1009 @@ +/*****************************************************************************/ +/* */ +/* coptjmp.c */ +/* */ +/* Low level optimizations regarding branches and jumps */ +/* */ +/* */ +/* */ +/* (C) 2001-2009, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +/* common */ +#include "cpu.h" + +/* cc65 */ +#include "codeent.h" +#include "coptjmp.h" +#include "codeinfo.h" +#include "codeopt.h" +#include "error.h" + + + +/*****************************************************************************/ +/* Helper functions */ +/*****************************************************************************/ + + + +static int GetBranchDist (CodeSeg* S, unsigned From, CodeEntry* To) +/* Get the branch distance between the two entries and return it. The distance +** will be negative for backward jumps and positive for forward jumps. +*/ +{ + /* Get the index of the branch target */ + unsigned TI = CS_GetEntryIndex (S, To); + + /* Determine the branch distance */ + int Distance = 0; + if (TI >= From) { + /* Forward branch, do not count the current insn */ + unsigned J = From+1; + while (J < TI) { + CodeEntry* N = CS_GetEntry (S, J++); + Distance += N->Size; + } + } else { + /* Backward branch */ + unsigned J = TI; + while (J < From) { + CodeEntry* N = CS_GetEntry (S, J++); + Distance -= N->Size; + } + } + + /* Return the calculated distance */ + return Distance; +} + + + +static int IsShortDist (int Distance) +/* Return true if the given distance is a short branch distance */ +{ + return (Distance >= -125 && Distance <= 125); +} + + + +static short ZPRegVal (unsigned short Use, const RegContents* RC) +/* Return the contents of the given zeropage register */ +{ + if ((Use & REG_TMP1) != 0) { + return RC->Tmp1; + } else if ((Use & REG_PTR1_LO) != 0) { + return RC->Ptr1Lo; + } else if ((Use & REG_PTR1_HI) != 0) { + return RC->Ptr1Hi; + } else if ((Use & REG_SREG_LO) != 0) { + return RC->SRegLo; + } else if ((Use & REG_SREG_HI) != 0) { + return RC->SRegHi; + } else { + return UNKNOWN_REGVAL; + } +} + + + +static short RegVal (unsigned short Use, const RegContents* RC) +/* Return the contents of the given register */ +{ + if ((Use & REG_A) != 0) { + return RC->RegA; + } else if ((Use & REG_X) != 0) { + return RC->RegX; + } else if ((Use & REG_Y) != 0) { + return RC->RegY; + } else { + return ZPRegVal (Use, RC); + } +} + + + +/*****************************************************************************/ +/* Optimize branch types */ +/*****************************************************************************/ + + + +unsigned OptBranchDist (CodeSeg* S) +/* Change branches for the distance needed. */ +{ + unsigned Changes = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if it's a conditional branch to a local label. */ + if (E->Info & OF_CBRA) { + + /* Is this a branch to a local symbol? */ + if (E->JumpTo != 0) { + + /* Check if the branch distance is short */ + int IsShort = IsShortDist (GetBranchDist (S, I, E->JumpTo->Owner)); + + /* Make the branch short/long according to distance */ + if ((E->Info & OF_LBRA) == 0 && !IsShort) { + /* Short branch but long distance */ + CE_ReplaceOPC (E, MakeLongBranch (E->OPC)); + ++Changes; + } else if ((E->Info & OF_LBRA) != 0 && IsShort) { + /* Long branch but short distance */ + CE_ReplaceOPC (E, MakeShortBranch (E->OPC)); + ++Changes; + } + + } else if ((E->Info & OF_LBRA) == 0) { + + /* Short branch to external symbol - make it long */ + CE_ReplaceOPC (E, MakeLongBranch (E->OPC)); + ++Changes; + + } + + } else if ((CPUIsets[CPU] & CPU_ISET_65SC02) != 0 && + (E->Info & OF_UBRA) != 0 && + E->JumpTo != 0 && + IsShortDist (GetBranchDist (S, I, E->JumpTo->Owner))) { + + /* The jump is short and may be replaced by a BRA on the 65C02 CPU */ + CE_ReplaceOPC (E, OP65_BRA); + ++Changes; + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +/*****************************************************************************/ +/* Replace jumps to RTS by RTS */ +/*****************************************************************************/ + + + +unsigned OptRTSJumps1 (CodeSeg* S) +/* Replace jumps to RTS by RTS */ +{ + unsigned Changes = 0; + + /* Walk over all entries minus the last one */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get the next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if it's an unconditional branch to a local target */ + if ((E->Info & OF_UBRA) != 0 && + E->JumpTo != 0 && + E->JumpTo->Owner->OPC == OP65_RTS) { + + /* Insert an RTS instruction */ + CodeEntry* X = NewCodeEntry (OP65_RTS, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, I+1); + + /* Delete the jump */ + CS_DelEntry (S, I); + + /* Remember, we had changes */ + ++Changes; + + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +unsigned OptRTSJumps2 (CodeSeg* S) +/* Replace long conditional jumps to RTS or to a final target */ +{ + unsigned Changes = 0; + + /* Walk over all entries minus the last one */ + unsigned I = 0; + while (I < CS_GetEntryCount (S) - 1) { + + /* Get the next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if it's an conditional branch to a local target */ + if ((E->Info & OF_CBRA) != 0 && /* Conditional branch */ + (E->Info & OF_LBRA) != 0 && /* Long branch */ + E->JumpTo != 0) { /* Local label */ + + + /* Get the jump target and the next entry. There's always a next + ** entry, because we don't cover the last entry in the loop. + */ + CodeEntry* X = 0; + CodeEntry* T = E->JumpTo->Owner; + CodeEntry* N = CS_GetNextEntry (S, I); + + /* Check if it's a jump to an RTS insn */ + if (T->OPC == OP65_RTS) { + + /* It's a jump to RTS. Create a conditional branch around an + ** RTS insn. + */ + X = NewCodeEntry (OP65_RTS, AM65_IMP, 0, 0, T->LI); + + } else if (T->OPC == OP65_JMP && T->JumpTo == 0) { + + /* It's a jump to a label outside the function. Create a + ** conditional branch around a jump to the external label. + */ + X = NewCodeEntry (OP65_JMP, AM65_ABS, T->Arg, T->JumpTo, T->LI); + + } + + /* If we have a replacement insn, insert it */ + if (X) { + + CodeLabel* LN; + opc_t NewBranch; + + /* Insert the new insn */ + CS_InsertEntry (S, X, I+1); + + /* Create a conditional branch with the inverse condition + ** around the replacement insn + */ + + /* Get the new branch opcode */ + NewBranch = MakeShortBranch (GetInverseBranch (E->OPC)); + + /* Get the label attached to N, create a new one if needed */ + LN = CS_GenLabel (S, N); + + /* Generate the branch */ + X = NewCodeEntry (NewBranch, AM65_BRA, LN->Name, LN, E->LI); + CS_InsertEntry (S, X, I+1); + + /* Delete the long branch */ + CS_DelEntry (S, I); + + /* Remember, we had changes */ + ++Changes; + + } + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +/*****************************************************************************/ +/* Remove dead jumps */ +/*****************************************************************************/ + + + +unsigned OptDeadJumps (CodeSeg* S) +/* Remove dead jumps (jumps to the next instruction) */ +{ + unsigned Changes = 0; + + /* Walk over all entries minus the last one */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get the next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if it's a branch, if it has a local target, and if the target + ** is the next instruction. + */ + if (E->AM == AM65_BRA && + E->JumpTo && + E->JumpTo->Owner == CS_GetNextEntry (S, I)) { + + /* Delete the dead jump */ + CS_DelEntry (S, I); + + /* Remember, we had changes */ + ++Changes; + + } else { + + /* Next entry */ + ++I; + + } + } + + /* Return the number of changes made */ + return Changes; +} + + + +/*****************************************************************************/ +/* Remove dead code */ +/*****************************************************************************/ + + + +unsigned OptDeadCode (CodeSeg* S) +/* Remove dead code (code that follows an unconditional jump or an rts/rti +** and has no label) +*/ +{ + unsigned Changes = 0; + + /* Walk over all entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* N; + CodeLabel* LN; + + /* Get this entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if it's an unconditional branch, and if the next entry has + ** no labels attached, or if the label is just used so that the insn + ** can jump to itself. + */ + if ((E->Info & OF_DEAD) != 0 && /* Dead code follows */ + (N = CS_GetNextEntry (S, I)) != 0 && /* Has next entry */ + (!CE_HasLabel (N) || /* Don't has a label */ + ((N->Info & OF_UBRA) != 0 && /* Uncond branch */ + (LN = N->JumpTo) != 0 && /* Jumps to known label */ + LN->Owner == N && /* Attached to insn */ + CL_GetRefCount (LN) == 1))) { /* Only reference */ + + /* Delete the next entry */ + CS_DelEntry (S, I+1); + + /* Remember, we had changes */ + ++Changes; + + } else { + + /* Next entry */ + ++I; + + } + } + + /* Return the number of changes made */ + return Changes; +} + + + +/*****************************************************************************/ +/* Optimize jump cascades */ +/*****************************************************************************/ + + + +unsigned OptJumpCascades (CodeSeg* S) +/* Optimize jump cascades (jumps to jumps). In such a case, the jump is +** replaced by a jump to the final location. This will in some cases produce +** worse code, because some jump targets are no longer reachable by short +** branches, but this is quite rare, so there are more advantages than +** disadvantages. +*/ +{ + unsigned Changes = 0; + + /* Walk over all entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* N; + CodeLabel* OldLabel; + + /* Get this entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check: + ** - if it's a branch, + ** - if it has a jump label, + ** - if this jump label is not attached to the instruction itself, + ** - if the target instruction is itself a branch, + ** - if either the first branch is unconditional or the target of + ** the second branch is internal to the function. + ** The latter condition will avoid conditional branches to targets + ** outside of the function (usually incspx), which won't simplify the + ** code, since conditional far branches are emulated by a short branch + ** around a jump. + */ + if ((E->Info & OF_BRA) != 0 && + (OldLabel = E->JumpTo) != 0 && + (N = OldLabel->Owner) != E && + (N->Info & OF_BRA) != 0 && + ((E->Info & OF_CBRA) == 0 || + N->JumpTo != 0)) { + + /* Check if we can use the final target label. That is the case, + ** if the target branch is an absolute branch; or, if it is a + ** conditional branch checking the same condition as the first one. + */ + if ((N->Info & OF_UBRA) != 0 || + ((E->Info & OF_CBRA) != 0 && + GetBranchCond (E->OPC) == GetBranchCond (N->OPC))) { + + /* This is a jump cascade and we may jump to the final target, + ** provided that the other insn does not jump to itself. If + ** this is the case, we can also jump to ourselves, otherwise + ** insert a jump to the new instruction and remove the old one. + */ + CodeEntry* X; + CodeLabel* LN = N->JumpTo; + + if (LN != 0 && LN->Owner == N) { + + /* We found a jump to a jump to itself. Replace our jump + ** by a jump to itself. + */ + CodeLabel* LE = CS_GenLabel (S, E); + X = NewCodeEntry (E->OPC, E->AM, LE->Name, LE, E->LI); + + } else { + + /* Jump to the final jump target */ + X = NewCodeEntry (E->OPC, E->AM, N->Arg, N->JumpTo, E->LI); + + } + + /* Insert it behind E */ + CS_InsertEntry (S, X, I+1); + + /* Remove E */ + CS_DelEntry (S, I); + + /* Remember, we had changes */ + ++Changes; + + /* Check if both are conditional branches, and the condition of + ** the second is the inverse of that of the first. In this case, + ** the second branch will never be taken, and we may jump directly + ** to the instruction behind this one. + */ + } else if ((E->Info & OF_CBRA) != 0 && (N->Info & OF_CBRA) != 0) { + + CodeEntry* X; /* Instruction behind N */ + CodeLabel* LX; /* Label attached to X */ + + /* Get the branch conditions of both branches */ + bc_t BC1 = GetBranchCond (E->OPC); + bc_t BC2 = GetBranchCond (N->OPC); + + /* Check the branch conditions */ + if (BC1 != GetInverseCond (BC2)) { + /* Condition not met */ + goto NextEntry; + } + + /* We may jump behind this conditional branch. Get the + ** pointer to the next instruction + */ + if ((X = CS_GetNextEntry (S, CS_GetEntryIndex (S, N))) == 0) { + /* N is the last entry, bail out */ + goto NextEntry; + } + + /* Get the label attached to X, create a new one if needed */ + LX = CS_GenLabel (S, X); + + /* Move the reference from E to the new label */ + CS_MoveLabelRef (S, E, LX); + + /* Remember, we had changes */ + ++Changes; + } + } + +NextEntry: + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +/*****************************************************************************/ +/* Optimize jsr/rts */ +/*****************************************************************************/ + + + +unsigned OptRTS (CodeSeg* S) +/* Optimize subroutine calls followed by an RTS. The subroutine call will get +** replaced by a jump. Don't bother to delete the RTS if it does not have a +** label, the dead code elimination should take care of it. +*/ +{ + unsigned Changes = 0; + + /* Walk over all entries minus the last one */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* N; + + /* Get this entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if it's a subroutine call and if the following insn is RTS */ + if (E->OPC == OP65_JSR && + (N = CS_GetNextEntry (S, I)) != 0 && + N->OPC == OP65_RTS) { + + /* Change the jsr to a jmp and use the additional info for a jump */ + E->AM = AM65_BRA; + CE_ReplaceOPC (E, OP65_JMP); + + /* Remember, we had changes */ + ++Changes; + + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +/*****************************************************************************/ +/* Optimize jump targets */ +/*****************************************************************************/ + + + +unsigned OptJumpTarget1 (CodeSeg* S) +/* If the instruction preceeding an unconditional branch is the same as the +** instruction preceeding the jump target, the jump target may be moved +** one entry back. This is a size optimization, since the instruction before +** the branch gets removed. +*/ +{ + unsigned Changes = 0; + CodeEntry* E1; /* Entry 1 */ + CodeEntry* E2; /* Entry 2 */ + CodeEntry* T1; /* Jump target entry 1 */ + CodeLabel* TL1; /* Target label 1 */ + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get next entry */ + E2 = CS_GetNextEntry (S, I); + + /* Check if we have a jump or branch without a label attached, and + ** a jump target, which is not attached to the jump itself + */ + if (E2 != 0 && + (E2->Info & OF_UBRA) != 0 && + !CE_HasLabel (E2) && + E2->JumpTo && + E2->JumpTo->Owner != E2) { + + /* Get the entry preceeding the branch target */ + T1 = CS_GetPrevEntry (S, CS_GetEntryIndex (S, E2->JumpTo->Owner)); + if (T1 == 0) { + /* There is no such entry */ + goto NextEntry; + } + + /* The entry preceeding the branch target may not be the branch + ** insn. + */ + if (T1 == E2) { + goto NextEntry; + } + + /* Get the entry preceeding the jump */ + E1 = CS_GetEntry (S, I); + + /* Check if both preceeding instructions are identical */ + if (!CodeEntriesAreEqual (E1, T1)) { + /* Not equal, try next */ + goto NextEntry; + } + + /* Get the label for the instruction preceeding the jump target. + ** This routine will create a new label if the instruction does + ** not already have one. + */ + TL1 = CS_GenLabel (S, T1); + + /* Change the jump target to point to this new label */ + CS_MoveLabelRef (S, E2, TL1); + + /* If the instruction preceeding the jump has labels attached, + ** move references to this label to the new label. + */ + if (CE_HasLabel (E1)) { + CS_MoveLabels (S, E1, T1); + } + + /* Remove the entry preceeding the jump */ + CS_DelEntry (S, I); + + /* Remember, we had changes */ + ++Changes; + + } else { +NextEntry: + /* Next entry */ + ++I; + } + } + + /* Return the number of changes made */ + return Changes; +} + + + +unsigned OptJumpTarget2 (CodeSeg* S) +/* If a bcs jumps to a sec insn or a bcc jumps to clc, skip this insn, since +** it's job is already done. +*/ +{ + unsigned Changes = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + /* OP that may be skipped */ + opc_t OPC; + + /* Jump target insn, old and new */ + CodeEntry* T; + CodeEntry* N; + + /* New jump label */ + CodeLabel* L; + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if this is a bcc insn */ + if (E->OPC == OP65_BCC || E->OPC == OP65_JCC) { + OPC = OP65_CLC; + } else if (E->OPC == OP65_BCS || E->OPC == OP65_JCS) { + OPC = OP65_SEC; + } else { + /* Not what we're looking for */ + goto NextEntry; + } + + /* Must have a jump target */ + if (E->JumpTo == 0) { + goto NextEntry; + } + + /* Get the owner insn of the jump target and check if it's the one, we + ** will skip if present. + */ + T = E->JumpTo->Owner; + if (T->OPC != OPC) { + goto NextEntry; + } + + /* Get the entry following the branch target */ + N = CS_GetNextEntry (S, CS_GetEntryIndex (S, T)); + if (N == 0) { + /* There is no such entry */ + goto NextEntry; + } + + /* Get the label for the instruction following the jump target. + ** This routine will create a new label if the instruction does + ** not already have one. + */ + L = CS_GenLabel (S, N); + + /* Change the jump target to point to this new label */ + CS_MoveLabelRef (S, E, L); + + /* Remember that we had changes */ + ++Changes; + +NextEntry: + /* Next entry */ + ++I; + } + + /* Return the number of changes made */ + return Changes; +} + + + +unsigned OptJumpTarget3 (CodeSeg* S) +/* Jumps to load instructions of a register, that do already have the matching +** register contents may skip the load instruction, since it's job is already +** done. +*/ +{ + unsigned Changes = 0; + unsigned I; + + /* Walk over the entries */ + I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* N; + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if this is a load insn with a label and the next insn is not + ** a conditional branch that needs the flags from the load. + */ + if ((E->Info & OF_LOAD) != 0 && + CE_IsConstImm (E) && + CE_HasLabel (E) && + (N = CS_GetNextEntry (S, I)) != 0 && + !CE_UseLoadFlags (N)) { + + unsigned J; + int K; + + /* New jump label */ + CodeLabel* LN = 0; + + /* Walk over all insn that jump here */ + for (J = 0; J < CE_GetLabelCount (E); ++J) { + + /* Get the label */ + CodeLabel* L = CE_GetLabel (E, J); + + /* Loop over all insn that reference this label. Since we may + ** eventually remove a reference in the loop, we must loop + ** from end down to start. + */ + for (K = CL_GetRefCount (L) - 1; K >= 0; --K) { + + /* Get the entry that jumps here */ + CodeEntry* Jump = CL_GetRef (L, K); + + /* Get the register info from this insn */ + short Val = RegVal (E->Chg, &Jump->RI->Out2); + + /* Check if the outgoing value is the one thats's loaded */ + if (Val == (unsigned char) E->Num) { + + /* OK, skip the insn. First, generate a label for the + ** next insn after E. + */ + if (LN == 0) { + LN = CS_GenLabel (S, N); + } + + /* Change the jump target to point to this new label */ + CS_MoveLabelRef (S, Jump, LN); + + /* Remember that we had changes */ + ++Changes; + } + } + } + + } + + /* Next entry */ + ++I; + } + + /* Return the number of changes made */ + return Changes; +} + + + +/*****************************************************************************/ +/* Optimize conditional branches */ +/*****************************************************************************/ + + + +unsigned OptCondBranches1 (CodeSeg* S) +/* Performs several optimization steps: +** +** - If an immediate load of a register is followed by a conditional jump that +** is never taken because the load of the register sets the flags in such a +** manner, remove the conditional branch. +** - If the conditional branch is always taken because of the register load, +** replace it by a jmp. +** - If a conditional branch jumps around an unconditional branch, remove the +** conditional branch and make the jump a conditional branch with the +** inverse condition of the first one. +*/ +{ + unsigned Changes = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* N; + CodeLabel* L; + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if it's a register load */ + if ((E->Info & OF_LOAD) != 0 && /* It's a load instruction */ + E->AM == AM65_IMM && /* ..with immidiate addressing */ + CE_HasNumArg (E) && /* ..and a numeric argument. */ + (N = CS_GetNextEntry (S, I)) != 0 && /* There is a following entry */ + (N->Info & OF_CBRA) != 0 && /* ..which is a conditional branch */ + !CE_HasLabel (N)) { /* ..and does not have a label */ + + /* Get the branch condition */ + bc_t BC = GetBranchCond (N->OPC); + + /* Check the argument against the branch condition */ + if ((BC == BC_EQ && E->Num != 0) || + (BC == BC_NE && E->Num == 0) || + (BC == BC_PL && (E->Num & 0x80) != 0) || + (BC == BC_MI && (E->Num & 0x80) == 0)) { + + /* Remove the conditional branch */ + CS_DelEntry (S, I+1); + + /* Remember, we had changes */ + ++Changes; + + } else if ((BC == BC_EQ && E->Num == 0) || + (BC == BC_NE && E->Num != 0) || + (BC == BC_PL && (E->Num & 0x80) == 0) || + (BC == BC_MI && (E->Num & 0x80) != 0)) { + + /* The branch is always taken, replace it by a jump */ + CE_ReplaceOPC (N, OP65_JMP); + + /* Remember, we had changes */ + ++Changes; + } + + } + + if ((E->Info & OF_CBRA) != 0 && /* It's a conditional branch */ + (L = E->JumpTo) != 0 && /* ..referencing a local label */ + (N = CS_GetNextEntry (S, I)) != 0 && /* There is a following entry */ + (N->Info & OF_UBRA) != 0 && /* ..which is an uncond branch, */ + !CE_HasLabel (N) && /* ..has no label attached */ + L->Owner == CS_GetNextEntry (S, I+1)) { /* ..and jump target follows */ + + /* Replace the jump by a conditional branch with the inverse branch + ** condition than the branch around it. + */ + CE_ReplaceOPC (N, GetInverseBranch (E->OPC)); + + /* Remove the conditional branch */ + CS_DelEntry (S, I); + + /* Remember, we had changes */ + ++Changes; + + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +unsigned OptCondBranches2 (CodeSeg* S) +/* If on entry to a "rol a" instruction the accu is zero, and a beq/bne follows, +** we can remove the rol and branch on the state of the carry flag. +*/ +{ + unsigned Changes = 0; + unsigned I; + + /* Walk over the entries */ + I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* N; + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if it's a rol insn with A in accu and a branch follows */ + if (E->OPC == OP65_ROL && + E->AM == AM65_ACC && + E->RI->In.RegA == 0 && + !CE_HasLabel (E) && + (N = CS_GetNextEntry (S, I)) != 0 && + (N->Info & OF_ZBRA) != 0 && + !RegAUsed (S, I+1)) { + + /* Replace the branch condition */ + switch (GetBranchCond (N->OPC)) { + case BC_EQ: CE_ReplaceOPC (N, OP65_JCC); break; + case BC_NE: CE_ReplaceOPC (N, OP65_JCS); break; + default: Internal ("Unknown branch condition in OptCondBranches2"); + } + + /* Delete the rol insn */ + CS_DelEntry (S, I); + + /* Remember, we had changes */ + ++Changes; + } + + /* Next entry */ + ++I; + } + + /* Return the number of changes made */ + return Changes; +} diff --git a/src/cc65/coptjmp.h b/src/cc65/coptjmp.h new file mode 100644 index 000000000..4cb7a2792 --- /dev/null +++ b/src/cc65/coptjmp.h @@ -0,0 +1,116 @@ +/*****************************************************************************/ +/* */ +/* coptjmp.h */ +/* */ +/* Low level optimizations regarding branches and jumps */ +/* */ +/* */ +/* */ +/* (C) 2001-2009, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef COPTJMP_H +#define COPTJMP_H + + + +/* cc65 */ +#include "codeseg.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +unsigned OptBranchDist (CodeSeg* S); +/* Change branches for the distance needed. */ + +unsigned OptRTSJumps1 (CodeSeg* S); +/* Replace jumps to RTS by RTS */ + +unsigned OptRTSJumps2 (CodeSeg* S); +/* Replace long conditional jumps to RTS */ + +unsigned OptDeadJumps (CodeSeg* S); +/* Remove dead jumps (jumps to the next instruction) */ + +unsigned OptDeadCode (CodeSeg* S); +/* Remove dead code (code that follows an unconditional jump or an rts/rti +** and has no label) +*/ + +unsigned OptJumpCascades (CodeSeg* S); +/* Optimize jump cascades (jumps to jumps). In such a case, the jump is +** replaced by a jump to the final location. This will in some cases produce +** worse code, because some jump targets are no longer reachable by short +** branches, but this is quite rare, so there are more advantages than +** disadvantages. +*/ + +unsigned OptRTS (CodeSeg* S); +/* Optimize subroutine calls followed by an RTS. The subroutine call will get +** replaced by a jump. Don't bother to delete the RTS if it does not have a +** label, the dead code elimination should take care of it. +*/ + +unsigned OptJumpTarget1 (CodeSeg* S); +/* If the instruction preceeding an unconditional branch is the same as the +** instruction preceeding the jump target, the jump target may be moved +** one entry back. This is a size optimization, since the instruction before +** the branch gets removed. +*/ + +unsigned OptJumpTarget2 (CodeSeg* S); +/* If a bcs jumps to a sec insn or a bcc jumps to clc, skip this insn, since +** it's job is already done. +*/ + +unsigned OptJumpTarget3 (CodeSeg* S); +/* Jumps to load instructions of a register, that do already have the matching +** register contents may skip the load instruction, since it's job is already +** done. +*/ + +unsigned OptCondBranches1 (CodeSeg* S); +/* If an immidiate load of a register is followed by a conditional jump that +** is never taken because the load of the register sets the flags in such a +** manner, remove the conditional branch. +*/ + +unsigned OptCondBranches2 (CodeSeg* S); +/* If on entry to a "rol a" instruction the accu is zero, and a beq/bne follows, +** we can remove the rol and branch on the state of the carry. +*/ + + + +/* End of coptjmp.h */ + +#endif diff --git a/src/cc65/coptmisc.c b/src/cc65/coptmisc.c new file mode 100644 index 000000000..523fbf17c --- /dev/null +++ b/src/cc65/coptmisc.c @@ -0,0 +1,735 @@ +/*****************************************************************************/ +/* */ +/* codemisc.c */ +/* */ +/* Miscellaneous optimization operations */ +/* */ +/* */ +/* */ +/* (C) 2001-2012, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#include <stdlib.h> + +/* common */ +#include "chartype.h" +#include "xsprintf.h" + +/* cc65 */ +#include "codeent.h" +#include "codeinfo.h" +#include "coptmisc.h" +#include "error.h" +#include "symtab.h" + + + +/*****************************************************************************/ +/* Decouple operations */ +/*****************************************************************************/ + + + +unsigned OptDecouple (CodeSeg* S) +/* Decouple operations, that is, do the following replacements: +** +** dex -> ldx #imm +** inx -> ldx #imm +** dey -> ldy #imm +** iny -> ldy #imm +** tax -> ldx #imm +** txa -> lda #imm +** tay -> ldy #imm +** tya -> lda #imm +** lda zp -> lda #imm +** ldx zp -> ldx #imm +** ldy zp -> ldy #imm +** +** Provided that the register values are known of course. +*/ +{ + unsigned Changes = 0; + unsigned I; + + /* Walk over the entries */ + I = 0; + while (I < CS_GetEntryCount (S)) { + + const char* Arg; + + /* Get next entry and it's input register values */ + CodeEntry* E = CS_GetEntry (S, I); + const RegContents* In = &E->RI->In; + + /* Assume we have no replacement */ + CodeEntry* X = 0; + + /* Check the instruction */ + switch (E->OPC) { + + case OP65_DEA: + if (RegValIsKnown (In->RegA)) { + Arg = MakeHexArg ((In->RegA - 1) & 0xFF); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); + } + break; + + case OP65_DEX: + if (RegValIsKnown (In->RegX)) { + Arg = MakeHexArg ((In->RegX - 1) & 0xFF); + X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); + } + break; + + case OP65_DEY: + if (RegValIsKnown (In->RegY)) { + Arg = MakeHexArg ((In->RegY - 1) & 0xFF); + X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + } + break; + + case OP65_INA: + if (RegValIsKnown (In->RegA)) { + Arg = MakeHexArg ((In->RegA + 1) & 0xFF); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); + } + break; + + case OP65_INX: + if (RegValIsKnown (In->RegX)) { + Arg = MakeHexArg ((In->RegX + 1) & 0xFF); + X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); + } + break; + + case OP65_INY: + if (RegValIsKnown (In->RegY)) { + Arg = MakeHexArg ((In->RegY + 1) & 0xFF); + X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + } + break; + + case OP65_LDA: + if (E->AM == AM65_ZP) { + switch (GetKnownReg (E->Use & REG_ZP, In)) { + case REG_TMP1: + Arg = MakeHexArg (In->Tmp1); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); + break; + + case REG_PTR1_LO: + Arg = MakeHexArg (In->Ptr1Lo); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); + break; + + case REG_PTR1_HI: + Arg = MakeHexArg (In->Ptr1Hi); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); + break; + + case REG_SREG_LO: + Arg = MakeHexArg (In->SRegLo); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); + break; + + case REG_SREG_HI: + Arg = MakeHexArg (In->SRegHi); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); + break; + } + } + break; + + case OP65_LDX: + if (E->AM == AM65_ZP) { + switch (GetKnownReg (E->Use & REG_ZP, In)) { + case REG_TMP1: + Arg = MakeHexArg (In->Tmp1); + X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); + break; + + case REG_PTR1_LO: + Arg = MakeHexArg (In->Ptr1Lo); + X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); + break; + + case REG_PTR1_HI: + Arg = MakeHexArg (In->Ptr1Hi); + X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); + break; + + case REG_SREG_LO: + Arg = MakeHexArg (In->SRegLo); + X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); + break; + + case REG_SREG_HI: + Arg = MakeHexArg (In->SRegHi); + X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); + break; + } + } + break; + + case OP65_LDY: + if (E->AM == AM65_ZP) { + switch (GetKnownReg (E->Use, In)) { + case REG_TMP1: + Arg = MakeHexArg (In->Tmp1); + X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + break; + + case REG_PTR1_LO: + Arg = MakeHexArg (In->Ptr1Lo); + X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + break; + + case REG_PTR1_HI: + Arg = MakeHexArg (In->Ptr1Hi); + X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + break; + + case REG_SREG_LO: + Arg = MakeHexArg (In->SRegLo); + X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + break; + + case REG_SREG_HI: + Arg = MakeHexArg (In->SRegHi); + X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + break; + } + } + break; + + case OP65_TAX: + if (E->RI->In.RegA >= 0) { + Arg = MakeHexArg (In->RegA); + X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI); + } + break; + + case OP65_TAY: + if (E->RI->In.RegA >= 0) { + Arg = MakeHexArg (In->RegA); + X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + } + break; + + case OP65_TXA: + if (E->RI->In.RegX >= 0) { + Arg = MakeHexArg (In->RegX); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); + } + break; + + case OP65_TYA: + if (E->RI->In.RegY >= 0) { + Arg = MakeHexArg (In->RegY); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); + } + break; + + default: + /* Avoid gcc warnings */ + break; + + } + + /* Insert the replacement if we have one */ + if (X) { + CS_InsertEntry (S, X, I+1); + CS_DelEntry (S, I); + ++Changes; + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +unsigned OptIndLoads1 (CodeSeg* S) +/* Change +** +** lda (zp),y +** +** into +** +** lda (zp,x) +** +** provided that x and y are both zero. +*/ +{ + unsigned Changes = 0; + unsigned I; + + /* Walk over the entries */ + I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if it's what we're looking for */ + if (E->OPC == OP65_LDA && + E->AM == AM65_ZP_INDY && + E->RI->In.RegY == 0 && + E->RI->In.RegX == 0) { + + /* Replace by the same insn with other addressing mode */ + CodeEntry* X = NewCodeEntry (E->OPC, AM65_ZPX_IND, E->Arg, 0, E->LI); + CS_InsertEntry (S, X, I+1); + + /* Remove the old insn */ + CS_DelEntry (S, I); + ++Changes; + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +unsigned OptIndLoads2 (CodeSeg* S) +/* Change +** +** lda (zp,x) +** +** into +** +** lda (zp),y +** +** provided that x and y are both zero. +*/ +{ + unsigned Changes = 0; + unsigned I; + + /* Walk over the entries */ + I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if it's what we're looking for */ + if (E->OPC == OP65_LDA && + E->AM == AM65_ZPX_IND && + E->RI->In.RegY == 0 && + E->RI->In.RegX == 0) { + + /* Replace by the same insn with other addressing mode */ + CodeEntry* X = NewCodeEntry (E->OPC, AM65_ZP_INDY, E->Arg, 0, E->LI); + CS_InsertEntry (S, X, I+1); + + /* Remove the old insn */ + CS_DelEntry (S, I); + ++Changes; + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +/*****************************************************************************/ +/* Optimize stack pointer ops */ +/*****************************************************************************/ + + + +static unsigned IsDecSP (const CodeEntry* E) +/* Check if this is an insn that decrements the stack pointer. If so, return +** the decrement. If not, return zero. +** The function expects E to be a subroutine call. +*/ +{ + if (strncmp (E->Arg, "decsp", 5) == 0) { + if (E->Arg[5] >= '1' && E->Arg[5] <= '8') { + return (E->Arg[5] - '0'); + } + } else if (strcmp (E->Arg, "subysp") == 0 && RegValIsKnown (E->RI->In.RegY)) { + return E->RI->In.RegY; + } + + /* If we come here, it's not a decsp op */ + return 0; +} + + + +unsigned OptStackPtrOps (CodeSeg* S) +/* Merge adjacent calls to decsp into one. NOTE: This function won't merge all +** known cases! +*/ +{ + unsigned Changes = 0; + unsigned I; + + /* Walk over the entries */ + I = 0; + while (I < CS_GetEntryCount (S)) { + + unsigned Dec1; + unsigned Dec2; + const CodeEntry* N; + + /* Get the next entry */ + const CodeEntry* E = CS_GetEntry (S, I); + + /* Check for decspn or subysp */ + if (E->OPC == OP65_JSR && + (Dec1 = IsDecSP (E)) > 0 && + (N = CS_GetNextEntry (S, I)) != 0 && + (Dec2 = IsDecSP (N)) > 0 && + (Dec1 += Dec2) <= 255 && + !CE_HasLabel (N)) { + + CodeEntry* X; + char Buf[20]; + + /* We can combine the two */ + if (Dec1 <= 8) { + /* Insert a call to decsp */ + xsprintf (Buf, sizeof (Buf), "decsp%u", Dec1); + X = NewCodeEntry (OP65_JSR, AM65_ABS, Buf, 0, N->LI); + CS_InsertEntry (S, X, I+2); + } else { + /* Insert a call to subysp */ + const char* Arg = MakeHexArg (Dec1); + X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, N->LI); + CS_InsertEntry (S, X, I+2); + X = NewCodeEntry (OP65_JSR, AM65_ABS, "subysp", 0, N->LI); + CS_InsertEntry (S, X, I+3); + } + + /* Delete the old code */ + CS_DelEntries (S, I, 2); + + /* Regenerate register info */ + CS_GenRegInfo (S); + + /* Remember we had changes */ + ++Changes; + + } else { + + /* Next entry */ + ++I; + } + + } + + /* Return the number of changes made */ + return Changes; +} + + + +unsigned OptGotoSPAdj (CodeSeg* S) +/* Optimize SP adjustment for forward 'goto' */ +{ + unsigned Changes = 0; + unsigned I; + + /* Walk over the entries */ + I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* L[10], *X; + unsigned short adjustment; + const char* Arg; + + /* Get next entry */ + L[0] = CS_GetEntry (S, I); + + /* Check for the sequence generated by g_lateadjustSP */ + if (L[0]->OPC == OP65_PHA && + CS_GetEntries (S, L+1, I+1, 9) && + L[1]->OPC == OP65_LDA && + L[1]->AM == AM65_ABS && + L[2]->OPC == OP65_CLC && + L[3]->OPC == OP65_ADC && + strcmp (L[3]->Arg, "sp") == 0 && + L[6]->OPC == OP65_ADC && + strcmp (L[6]->Arg, "sp+1") == 0 && + L[9]->OPC == OP65_JMP) { + adjustment = FindSPAdjustment (L[1]->Arg); + + if (adjustment == 0) { + /* No SP adjustment needed, remove the whole sequence */ + CS_DelEntries (S, I, 9); + } + else if (adjustment >= 65536 - 8) { + /* If adjustment is in range [-8, 0) we use decsp* calls */ + char Buf[20]; + adjustment = 65536 - adjustment; + xsprintf (Buf, sizeof (Buf), "decsp%u", adjustment); + X = NewCodeEntry (OP65_JSR, AM65_ABS, Buf, 0, L[1]->LI); + CS_InsertEntry (S, X, I + 9); + + /* Delete the old code */ + CS_DelEntries (S, I, 9); + } + else if (adjustment >= 65536 - 255) { + /* For range [-255, -8) we have ldy #, jsr subysp */ + adjustment = 65536 - adjustment; + Arg = MakeHexArg (adjustment); + X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[1]->LI); + CS_InsertEntry (S, X, I + 9); + X = NewCodeEntry (OP65_JSR, AM65_ABS, "subysp", 0, L[1]->LI); + CS_InsertEntry (S, X, I + 10); + + /* Delete the old code */ + CS_DelEntries (S, I, 9); + } + else if (adjustment > 255) { + /* For ranges [-32768, 255) and (255, 32767) the only modification + ** is to replace the absolute with immediate addressing + */ + Arg = MakeHexArg (adjustment & 0xff); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, L[1]->LI); + CS_InsertEntry (S, X, I + 1); + Arg = MakeHexArg (adjustment >> 8); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, L[5]->LI); + CS_InsertEntry (S, X, I + 6); + + /* Delete the old code */ + CS_DelEntry (S, I + 2); + CS_DelEntry (S, I + 6); + } + else if (adjustment > 8) { + /* For range (8, 255] we have ldy #, jsr addysp */ + Arg = MakeHexArg (adjustment & 0xff); + X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, L[1]->LI); + CS_InsertEntry (S, X, I + 9); + X = NewCodeEntry (OP65_JSR, AM65_ABS, "addysp", 0, L[1]->LI); + CS_InsertEntry (S, X, I + 10); + + /* Delete the old code */ + CS_DelEntries (S, I, 9); + } + else { + /* If adjustment is in range (0, 8] we use incsp* calls */ + char Buf[20]; + xsprintf (Buf, sizeof (Buf), "incsp%u", adjustment); + X = NewCodeEntry (OP65_JSR, AM65_ABS, Buf, 0, L[1]->LI); + CS_InsertEntry (S, X, I + 9); + + /* Delete the old code */ + CS_DelEntries (S, I, 9); + } + /* Regenerate register info */ + CS_GenRegInfo (S); + + /* Remember we had changes */ + Changes++; + + } else { + + /* Next entry */ + ++I; + } + + } + + /* Return the number of changes made */ + return Changes; +} + + + +/*****************************************************************************/ +/* Optimize stack load ops */ +/*****************************************************************************/ + + + +unsigned OptLoad1 (CodeSeg* S) +/* Search for a call to ldaxysp where X is not used later and replace it by +** a load of just the A register. +*/ +{ + unsigned I; + unsigned Changes = 0; + + /* Walk over the entries */ + I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* E; + + /* Get next entry */ + E = CS_GetEntry (S, I); + + /* Check for the sequence */ + if (CE_IsCallTo (E, "ldaxysp") && + RegValIsKnown (E->RI->In.RegY) && + !RegXUsed (S, I+1)) { + + CodeEntry* X; + + /* Reload the Y register */ + const char* Arg = MakeHexArg (E->RI->In.RegY - 1); + X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + CS_InsertEntry (S, X, I+1); + + /* Load from stack */ + X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, E->LI); + CS_InsertEntry (S, X, I+2); + + /* Now remove the call to the subroutine */ + CS_DelEntry (S, I); + + /* Remember, we had changes */ + ++Changes; + + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +unsigned OptLoad2 (CodeSeg* S) +/* Replace calls to ldaxysp by inline code */ +{ + unsigned I; + unsigned Changes = 0; + + /* Walk over the entries */ + I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* L[3]; + + /* Get next entry */ + L[0] = CS_GetEntry (S, I); + + /* Check for the sequence */ + if (CE_IsCallTo (L[0], "ldaxysp")) { + + CodeEntry* X; + + /* Followed by sta abs/stx abs? */ + if (CS_GetEntries (S, L+1, I+1, 2) && + L[1]->OPC == OP65_STA && + L[2]->OPC == OP65_STX && + (L[1]->Arg == 0 || + L[2]->Arg == 0 || + strcmp (L[1]->Arg, L[2]->Arg) != 0) && + !CS_RangeHasLabel (S, I+1, 2) && + !RegXUsed (S, I+3)) { + + /* A/X are stored into memory somewhere and X is not used + ** later + */ + + /* lda (sp),y */ + X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI); + CS_InsertEntry (S, X, I+3); + + /* sta abs */ + X = NewCodeEntry (OP65_STA, L[2]->AM, L[2]->Arg, 0, L[2]->LI); + CS_InsertEntry (S, X, I+4); + + /* dey */ + X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, L[0]->LI); + CS_InsertEntry (S, X, I+5); + + /* lda (sp),y */ + X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI); + CS_InsertEntry (S, X, I+6); + + /* sta abs */ + X = NewCodeEntry (OP65_STA, L[1]->AM, L[1]->Arg, 0, L[1]->LI); + CS_InsertEntry (S, X, I+7); + + /* Now remove the call to the subroutine and the sta/stx */ + CS_DelEntries (S, I, 3); + + } else { + + /* Standard replacement */ + + /* lda (sp),y */ + X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI); + CS_InsertEntry (S, X, I+1); + + /* tax */ + X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, L[0]->LI); + CS_InsertEntry (S, X, I+2); + + /* dey */ + X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, L[0]->LI); + CS_InsertEntry (S, X, I+3); + + /* lda (sp),y */ + X = NewCodeEntry (OP65_LDA, AM65_ZP_INDY, "sp", 0, L[0]->LI); + CS_InsertEntry (S, X, I+4); + + /* Now remove the call to the subroutine */ + CS_DelEntry (S, I); + + } + + /* Remember, we had changes */ + ++Changes; + + } + + /* Next entry */ + ++I; + } + + /* Return the number of changes made */ + return Changes; +} diff --git a/src/cc65/coptmisc.h b/src/cc65/coptmisc.h new file mode 100644 index 000000000..89242351c --- /dev/null +++ b/src/cc65/coptmisc.h @@ -0,0 +1,113 @@ +/*****************************************************************************/ +/* */ +/* codemisc.h */ +/* */ +/* Miscellaneous optimization operations */ +/* */ +/* */ +/* */ +/* (C) 2001-2012, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef COPTMISC_H +#define COPTMISC_H + + + +/* cc65 */ +#include "codeseg.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +unsigned OptDecouple (CodeSeg* S); +/* Decouple operations, that is, do the following replacements: +** +** dex -> ldx #imm +** inx -> ldx #imm +** dey -> ldy #imm +** iny -> ldy #imm +** tax -> ldx #imm +** txa -> lda #imm +** tay -> ldy #imm +** tya -> lda #imm +** lda zp -> lda #imm +** ldx zp -> ldx #imm +** ldy zp -> ldy #imm +** +** Provided that the register values are known of course. +*/ + +unsigned OptIndLoads1 (CodeSeg* S); +/* Change +** +** lda (zp),y +** +** into +** +** lda (zp,x) +** +** provided that x and y are both zero. +*/ + +unsigned OptIndLoads2 (CodeSeg* S); +/* Change +** +** lda (zp,x) +** +** into +** +** lda (zp),y +** +** provided that x and y are both zero. +*/ + +unsigned OptStackPtrOps (CodeSeg* S); +/* Merge adjacent calls to decsp into one. NOTE: This function won't merge all +** known cases! +*/ + +unsigned OptGotoSPAdj (CodeSeg* S); +/* Optimize SP adjustment for forward 'goto' */ + +unsigned OptLoad1 (CodeSeg* S); +/* Search for a call to ldaxysp where X is not used later and replace it by +** a load of just the A register. +*/ + +unsigned OptLoad2 (CodeSeg* S); +/* Replace calls to ldaxysp by inline code */ + + +/* End of coptmisc.h */ + +#endif From 57117fa687de59234d299d76f406f4e666844f1f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 23 Jan 2020 06:39:37 +0800 Subject: [PATCH 0493/2710] Utility functions about compare conditions. --- src/cc65/codeinfo.c | 59 +++++++++++++++++++++++++++++++++++++++++++++ src/cc65/codeinfo.h | 14 ++++++++++- src/cc65/coptcmp.c | 6 +---- 3 files changed, 73 insertions(+), 6 deletions(-) diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index a89f6d54c..6bc62757e 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -64,6 +64,13 @@ static const char CmpSuffixTab [][4] = { "eq", "ne", "gt", "ge", "lt", "le", "ugt", "uge", "ult", "ule" }; +/* Table with the bool transformers */ +static const char BoolTransformerTab [][8] = { + "booleq", "boolne", + "boolgt", "boolge", "boollt", "boolle", + "boolugt", "booluge", "boolult", "boolule" +}; + /* Table listing the function names and code info values for known internally ** used functions. This table should get auto-generated in the future. */ @@ -840,3 +847,55 @@ cmp_t FindTosCmpCond (const char* Name) return CMP_INV; } } + + + +const char* GetBoolTransformer (cmp_t Cond) +/* Get the bool transformer corresponding to the given compare condition */ +{ + if (Cond > CMP_INV && Cond < CMP_END) { + return BoolTransformerTab[Cond]; + } + + /* Not found */ + return 0; +} + + +cmp_t GetNegatedCond (cmp_t Cond) +/* Get the logically opposite compare condition */ +{ + switch (Cond) { + case CMP_EQ: return CMP_NE; + case CMP_NE: return CMP_EQ; + case CMP_GT: return CMP_LE; + case CMP_GE: return CMP_LT; + case CMP_LT: return CMP_GE; + case CMP_LE: return CMP_GT; + case CMP_UGT: return CMP_ULE; + case CMP_UGE: return CMP_ULT; + case CMP_ULT: return CMP_UGE; + case CMP_ULE: return CMP_UGT; + default: return CMP_INV; + } +} + + + +cmp_t GetRevertedCond (cmp_t Cond) +/* Get the compare condition in reverted order of operands */ +{ + switch (Cond) { + case CMP_EQ: return CMP_EQ; + case CMP_NE: return CMP_NE; + case CMP_GT: return CMP_LT; + case CMP_GE: return CMP_LE; + case CMP_LT: return CMP_GT; + case CMP_LE: return CMP_GE; + case CMP_UGT: return CMP_ULT; + case CMP_UGE: return CMP_ULE; + case CMP_ULT: return CMP_UGT; + case CMP_ULE: return CMP_UGE; + default: return CMP_INV; + } +} diff --git a/src/cc65/codeinfo.h b/src/cc65/codeinfo.h index 38e196bcf..3dda3a6bc 100644 --- a/src/cc65/codeinfo.h +++ b/src/cc65/codeinfo.h @@ -115,7 +115,10 @@ typedef enum { CMP_UGT, CMP_UGE, CMP_ULT, - CMP_ULE + CMP_ULE, + + /* End of the enumeration */ + CMP_END } cmp_t; @@ -185,6 +188,15 @@ cmp_t FindTosCmpCond (const char* Name); ** Return the condition code or CMP_INV on failure. */ +const char* GetBoolTransformer (cmp_t Cond); +/* Get the bool transformer corresponding to the given compare condition */ + +cmp_t GetNegatedCond (cmp_t Cond); +/* Get the logically opposite compare condition */ + +cmp_t GetRevertedCond (cmp_t Cond); +/* Get the compare condition in reverted order of operands */ + /* End of codeinfo.h */ diff --git a/src/cc65/coptcmp.c b/src/cc65/coptcmp.c index dbc71bcd5..ca0ba39a8 100644 --- a/src/cc65/coptcmp.c +++ b/src/cc65/coptcmp.c @@ -448,11 +448,7 @@ unsigned OptCmp3 (CodeSeg* S) Delete = 1; break; - case CMP_UGT: - case CMP_UGE: - case CMP_ULT: - case CMP_ULE: - case CMP_INV: + default: /* Leave it alone */ break; } From 7553b60ef07a53c797974a73627cd6bebcc8e8fe Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 23 Jan 2020 06:53:52 +0800 Subject: [PATCH 0494/2710] Improved OptStackOps for optimizating further when operands have equal hi-bytes. --- src/cc65/coptstop.c | 515 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 500 insertions(+), 15 deletions(-) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index a4fc0dc65..c366d5dde 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -898,6 +898,67 @@ static int IsRegVar (StackOpData* D) +static RegInfo* GetLastChangedRegInfo (StackOpData* D, LoadRegInfo* Reg) +/* Get RegInfo of the last load insn entry */ +{ + CodeEntry* E; + + if (Reg->LoadIndex >= 0 && (E = CS_GetEntry (D->Code, Reg->LoadIndex)) != 0) { + return E->RI; + } + + return 0; +} + + + +static int SameRegAValue (StackOpData* D) +/* Check if Rhs Reg A == Lhs Reg A */ +{ + RegInfo* LRI = GetLastChangedRegInfo (D, &D->Lhs.A); + RegInfo* RRI = GetLastChangedRegInfo (D, &D->Rhs.A); + + /* RHS can have a -1 LoadIndex only if it is carried over from LHS */ + if (RRI == 0 || + (D->Rhs.A.LoadIndex >= 0 && + D->Rhs.A.LoadIndex == D->Lhs.A.LoadIndex) || + (LRI != 0 && + RegValIsKnown (LRI->Out.RegA) && + RegValIsKnown (RRI->Out.RegA) && + (LRI->Out.RegA & 0xFF) == (RRI->Out.RegA & 0xFF))) { + + return 1; + } + + return 0; + +} + + + +static int SameRegXValue (StackOpData* D) +/* Check if Rhs Reg X == Lhs Reg X */ +{ + RegInfo* LRI = GetLastChangedRegInfo (D, &D->Lhs.X); + RegInfo* RRI = GetLastChangedRegInfo (D, &D->Rhs.X); + + if (RRI == 0 || + (D->Rhs.X.LoadIndex >= 0 && + D->Rhs.X.LoadIndex == D->Lhs.X.LoadIndex) || + (LRI != 0 && + RegValIsKnown (LRI->Out.RegX) && + RegValIsKnown (RRI->Out.RegX) && + (LRI->Out.RegX & 0xFF) == (RRI->Out.RegX & 0xFF))) { + + return 1; + } + + return 0; + +} + + + /*****************************************************************************/ /* Actual optimization functions */ /*****************************************************************************/ @@ -1850,6 +1911,251 @@ static unsigned Opt_tosxorax (StackOpData* D) +/*****************************************************************************/ +/* Optimization functions when hi-bytes can be ignored */ +/*****************************************************************************/ + + + +static unsigned Opt_a_toscmpbool (StackOpData* D, const char* BoolTransformer) +/* Optimize the tos compare sequence with a bool transformer */ +{ + CodeEntry* X; + cmp_t Cond; + + D->IP = D->OpIndex + 1; + + if (!D->RhsMultiChg && + (D->Rhs.A.LoadEntry->Flags & CEF_DONT_REMOVE) == 0 && + (D->Rhs.A.Flags & LI_DIRECT) != 0) { + + /* cmp */ + AddOpLow (D, OP65_CMP, &D->Rhs); + + /* Rhs low-byte load must be removed and hi-byte load may be removed */ + D->Rhs.X.Flags |= LI_REMOVE; + D->Rhs.A.Flags |= LI_REMOVE; + + } else if ((D->Lhs.A.Flags & LI_DIRECT) != 0) { + + /* If the lhs is direct (but not stack relative), encode compares with lhs + ** effectively reverting the order (which doesn't matter for ==). + */ + Cond = FindBoolCmpCond (BoolTransformer); + Cond = GetRevertedCond (Cond); + BoolTransformer = GetBoolTransformer (Cond); + + /* This shouldn't fail */ + CHECK (BoolTransformer); + + /* cmp */ + AddOpLow (D, OP65_CMP, &D->Lhs); + + /* Lhs load entries can be removed if not used later */ + D->Lhs.X.Flags |= LI_REMOVE; + D->Lhs.A.Flags |= LI_REMOVE; + + } else { + + /* We'll do reverse-compare */ + Cond = FindBoolCmpCond (BoolTransformer); + Cond = GetRevertedCond (Cond); + BoolTransformer = GetBoolTransformer (Cond); + + /* This shouldn't fail */ + CHECK (BoolTransformer); + + /* Save lhs into zeropage */ + AddStoreLhsA (D); + + /* cmp */ + X = NewCodeEntry (OP65_CMP, AM65_ZP, D->ZPLo, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + + } + + /* Create a call to the boolean transformer function. This is needed for all + ** variants. + */ + X = NewCodeEntry (OP65_JSR, AM65_ABS, BoolTransformer, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + + /* Remove the push and the call to the tosgeax function */ + RemoveRemainders (D); + + /* We changed the sequence */ + return 1; +} + + + +static unsigned Opt_a_toseq (StackOpData* D) +/* Optimize the toseqax sequence */ +{ + return Opt_a_toscmpbool (D, "booleq"); +} + + + +static unsigned Opt_a_tosge (StackOpData* D) +/* Optimize the tosgeax sequence */ +{ + return Opt_a_toscmpbool (D, "boolge"); +} + + + +static unsigned Opt_a_tosgt (StackOpData* D) +/* Optimize the tosgtax sequence */ +{ + return Opt_a_toscmpbool (D, "boolgt"); +} + + + +static unsigned Opt_a_tosicmp (StackOpData* D) +/* Replace tosicmp with CMP */ +{ + CodeEntry* X; + RegInfo* RI; + const char* Arg; + + if (!SameRegAValue (D)) { + /* Because of SameRegAValue */ + CHECK (D->Rhs.A.LoadIndex >= 0); + + /* Store LHS in ZP and reload it before op */ + X = NewCodeEntry (OP65_STA, AM65_ZP, D->ZPLo, 0, D->PushEntry->LI); + InsertEntry (D, X, D->PushIndex + 1); + X = NewCodeEntry (OP65_LDA, AM65_ZP, D->ZPLo, 0, D->PushEntry->LI); + InsertEntry (D, X, D->OpIndex); + + D->IP = D->OpIndex + 1; + + if ((D->Rhs.A.Flags & LI_DIRECT) == 0) { + /* RHS src is not directly comparable */ + X = NewCodeEntry (OP65_STA, AM65_ZP, D->ZPHi, 0, D->OpEntry->LI); + InsertEntry (D, X, D->Rhs.A.LoadIndex + 1); + + /* Cmp with stored RHS */ + X = NewCodeEntry (OP65_CMP, AM65_ZP, D->ZPHi, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + } else { + if ((D->Rhs.A.Flags & LI_RELOAD_Y) == 0) { + /* Cmp directly with RHS src */ + X = NewCodeEntry (OP65_CMP, AM65_ZP, D->Rhs.A.LoadEntry->Arg, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + } else { + /* ldy #offs */ + X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (D->Rhs.A.Offs), 0, D->OpEntry->LI); + InsertEntry(D, X, D->IP++); + + /* cmp (sp),y */ + X = NewCodeEntry (OP65_CMP, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI); + InsertEntry(D, X, D->IP++); + } + + /* RHS may be removed */ + D->Rhs.A.Flags |= LI_REMOVE; + D->Rhs.X.Flags |= LI_REMOVE; + } + + /* Fix up the N/V flags: N = ~C, V = 0 */ + Arg = MakeHexArg (0); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + X = NewCodeEntry (OP65_SBC, AM65_IMM, Arg, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + Arg = MakeHexArg (0x01); + X = NewCodeEntry (OP65_ORA, AM65_IMM, Arg, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + + /* jeq L1 */ + CodeLabel* Label = CS_GenLabel (D->Code, CS_GetEntry (D->Code, D->IP)); + X = NewCodeEntry (OP65_JEQ, AM65_BRA, Label->Name, Label, X->LI); + InsertEntry (D, X, D->IP-3); + + } else { + /* Just clear A,Z,N and set C */ + if ((RI = GetLastChangedRegInfo (D, &D->Lhs.A)) != 0 && + RegValIsKnown (RI->Out.RegA) && + (RI->Out.RegA & 0xFF) == 0) { + Arg = MakeHexArg (0); + X = NewCodeEntry (OP65_CMP, AM65_IMM, Arg, 0, D->OpEntry->LI); + InsertEntry (D, X, D->OpIndex + 1); + } else { + Arg = MakeHexArg (0); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, D->OpEntry->LI); + InsertEntry (D, X, D->OpIndex + 1); + X = NewCodeEntry (OP65_CMP, AM65_IMM, Arg, 0, D->OpEntry->LI); + InsertEntry (D, X, D->OpIndex + 2); + } + } + + /* Remove the push and the call to the operator function */ + RemoveRemainders (D); + + return 1; +} + + + +static unsigned Opt_a_tosle (StackOpData* D) +/* Optimize the tosleax sequence */ +{ + return Opt_a_toscmpbool (D, "boolle"); +} + + + +static unsigned Opt_a_toslt (StackOpData* D) +/* Optimize the tosltax sequence */ +{ + return Opt_a_toscmpbool (D, "boollt"); +} + + + +static unsigned Opt_a_tosne (StackOpData* D) +/* Optimize the toseqax sequence */ +{ + return Opt_a_toscmpbool (D, "boolne"); +} + + + +static unsigned Opt_a_tosuge (StackOpData* D) +/* Optimize the tosugeax sequence */ +{ + return Opt_a_toscmpbool (D, "booluge"); +} + + + +static unsigned Opt_a_tosugt (StackOpData* D) +/* Optimize the tosugtax sequence */ +{ + return Opt_a_toscmpbool (D, "boolugt"); +} + + + +static unsigned Opt_a_tosule (StackOpData* D) +/* Optimize the tosuleax sequence */ +{ + return Opt_a_toscmpbool (D, "boolule"); +} + + + +static unsigned Opt_a_tosult (StackOpData* D) +/* Optimize the tosultax sequence */ +{ + return Opt_a_toscmpbool (D, "boolult"); +} + + + /*****************************************************************************/ /* Code */ /*****************************************************************************/ @@ -1878,7 +2184,22 @@ static const OptFuncDesc FuncTable[] = { { "tosultax", Opt_tosultax, REG_NONE, OP_RHS_REMOVE_DIRECT | OP_RHS_LOAD_DIRECT }, { "tosxorax", Opt_tosxorax, REG_NONE, OP_NONE }, }; -#define FUNC_COUNT (sizeof(FuncTable) / sizeof(FuncTable[0])) + +static const OptFuncDesc FuncRegATable[] = { + { "toseqax", Opt_a_toseq, REG_NONE, OP_NONE }, + { "tosgeax", Opt_a_tosge, REG_NONE, OP_NONE }, + { "tosgtax", Opt_a_tosgt, REG_NONE, OP_NONE }, + { "tosicmp", Opt_a_tosicmp, REG_NONE, OP_NONE }, + { "tosleax", Opt_a_tosle, REG_NONE, OP_NONE }, + { "tosltax", Opt_a_toslt, REG_NONE, OP_NONE }, + { "tosneax", Opt_a_tosne, REG_NONE, OP_NONE }, + { "tosugeax", Opt_a_tosuge, REG_NONE, OP_NONE }, + { "tosugtax", Opt_a_tosugt, REG_NONE, OP_NONE }, + { "tosuleax", Opt_a_tosule, REG_NONE, OP_NONE }, + { "tosultax", Opt_a_tosult, REG_NONE, OP_NONE }, +}; + +#define FUNC_COUNT(Table) (sizeof(Table) / sizeof(Table[0])) @@ -1890,12 +2211,12 @@ static int CmpFunc (const void* Key, const void* Func) -static const OptFuncDesc* FindFunc (const char* Name) +static const OptFuncDesc* FindFunc (const OptFuncDesc FuncTable[], size_t Count, const char* Name) /* Find the function with the given name. Return a pointer to the table entry ** or NULL if the function was not found. */ { - return bsearch (Name, FuncTable, FUNC_COUNT, sizeof(OptFuncDesc), CmpFunc); + return bsearch (Name, FuncTable, Count, sizeof(OptFuncDesc), CmpFunc); } @@ -1990,7 +2311,7 @@ static void ResetStackOpData (StackOpData* Data) static int PreCondOk (StackOpData* D) /* Check if the preconditions for a call to the optimizer subfunction are ** satisfied. As a side effect, this function will also choose the zero page -** register to use. +** register to use for temporary storage. */ { LoadInfo* Lhs; @@ -2136,6 +2457,160 @@ static int PreCondOk (StackOpData* D) +static int RegAPreCondOk (StackOpData* D) +/* Check if the preconditions for a call to the RegA-only optimizer subfunction +** are satisfied. As a side effect, this function will also choose the zero page +** register to use for temporary storage. +*/ +{ + LoadInfo* Lhs; + LoadInfo* Rhs; + LoadRegInfo* LhsLo; + LoadRegInfo* RhsLo; + short LhsLoVal, LhsHiVal; + short RhsLoVal, RhsHiVal; + int I; + int Passed = 0; + + /* Check the flags */ + unsigned UnusedRegs = D->OptFunc->UnusedRegs; + if (UnusedRegs != REG_NONE && + (GetRegInfo (D->Code, D->OpIndex+1, UnusedRegs) & UnusedRegs) != 0) { + /* Cannot optimize */ + return 0; + } + + Passed = 0; + LhsLoVal = D->PushEntry->RI->In.RegA; + LhsHiVal = D->PushEntry->RI->In.RegX; + RhsLoVal = D->OpEntry->RI->In.RegA; + RhsHiVal = D->OpEntry->RI->In.RegX; + /* Check normally first, then interchange A/X and check again if necessary */ + for (I = (D->OptFunc->Flags & OP_AX_INTERCHANGE ? 0 : 1); !Passed && I < 2; ++I) { + + do { + if (LhsHiVal != RhsHiVal) { + /* Cannot optimize */ + break; + } + if ((D->OptFunc->Flags & OP_A_KNOWN) != 0 && + RegValIsUnknown (LhsLoVal)) { + /* Cannot optimize */ + break; + } + if ((D->OptFunc->Flags & OP_X_ZERO) != 0 && + LhsHiVal != 0) { + /* Cannot optimize */ + break; + } + Passed = 1; + } while (0); + + /* Suppress warning about unused assignment in GCC */ + (void)RhsLoVal; + + /* Interchange A/X */ + LhsLoVal = D->PushEntry->RI->In.RegX; + LhsHiVal = D->PushEntry->RI->In.RegA; + RhsLoVal = D->OpEntry->RI->In.RegX; + RhsHiVal = D->OpEntry->RI->In.RegA; + } + if (!Passed) { + /* Cannot optimize */ + return 0; + } + + Passed = 0; + Lhs = &D->Lhs; + Rhs = &D->Rhs; + /* Check normally first, then interchange LHS/RHS and check again if necessary */ + for (I = (D->OptFunc->Flags & OP_LR_INTERCHANGE ? 0 : 1); !Passed && I < 2; ++I) { + + do { + LhsLo = &Lhs->A; + RhsLo = &Rhs->A; + /* Currently we have only LHS/RHS checks with identical requirements for A/X, + ** so we don't need to check twice for now. + */ + + if ((D->OptFunc->Flags & OP_LHS_LOAD) != 0) { + if ((LhsLo->Flags & LI_LOAD_INSN) == 0) { + /* Cannot optimize */ + break; + } else if ((D->OptFunc->Flags & OP_LHS_LOAD_DIRECT) != 0) { + if ((LhsLo->Flags & LI_DIRECT) == 0) { + /* Cannot optimize */ + break; + } + } + } + if ((D->OptFunc->Flags & OP_RHS_LOAD) != 0) { + if ((RhsLo->Flags & LI_LOAD_INSN) == 0) { + /* Cannot optimize */ + break; + } else if ((D->OptFunc->Flags & OP_RHS_LOAD_DIRECT) != 0) { + if ((RhsLo->Flags & LI_DIRECT) == 0) { + /* Cannot optimize */ + break; + } + } + } + if ((D->OptFunc->Flags & OP_LHS_REMOVE) != 0) { + /* Check if the load entries cannot be removed */ + if ((LhsLo->LoadEntry != 0 && (LhsLo->LoadEntry->Flags & CEF_DONT_REMOVE) != 0)) { + if ((D->OptFunc->Flags & OP_LHS_REMOVE_DIRECT) != 0) { + /* Cannot optimize */ + break; + } + } + } + if ((D->OptFunc->Flags & OP_RHS_REMOVE) != 0) { + if ((RhsLo->LoadEntry != 0 && (RhsLo->LoadEntry->Flags & CEF_DONT_REMOVE) != 0)) { + if ((D->OptFunc->Flags & OP_RHS_REMOVE_DIRECT) != 0) { + /* Cannot optimize */ + break; + } + } + } + if (D->RhsMultiChg && (D->OptFunc->Flags & OP_RHS_REMOVE_DIRECT) != 0) { + /* Cannot optimize */ + break; + } + Passed = 1; + } while (0); + + /* Interchange LHS/RHS for next round */ + Lhs = &D->Rhs; + Rhs = &D->Lhs; + } + if (!Passed) { + /* Cannot optimize */ + return 0; + } + + /* Determine the zero page locations to use. We've tracked the used + ** ZP locations, so try to find some for us that are unused. + */ + if ((D->ZPUsage & REG_PTR1) == REG_NONE) { + D->ZPLo = "ptr1"; + D->ZPHi = "ptr1+1"; + } else if ((D->ZPUsage & REG_SREG) == REG_NONE) { + D->ZPLo = "sreg"; + D->ZPHi = "sreg+1"; + } else if ((D->ZPUsage & REG_PTR2) == REG_NONE) { + D->ZPLo = "ptr2"; + D->ZPHi = "ptr2+1"; + } else { + /* No registers available */ + return 0; + } + + /* Determine if we have a basic block */ + return CS_IsBasicBlock (D->Code, D->PushIndex, D->OpIndex); +} + + + /*****************************************************************************/ /* Code */ /*****************************************************************************/ @@ -2191,14 +2666,15 @@ static void ResetDontRemoveEntryFlags (StackOpData* D) unsigned OptStackOps (CodeSeg* S) /* Optimize operations that take operands via the stack */ { - unsigned Changes = 0; /* Number of changes in one run */ - StackOpData Data; - int I; - int OldEntryCount; /* Old number of entries */ - unsigned Used; /* What registers would be used */ - unsigned PushedRegs; /* Track if the same regs are used after the push */ - int RhsALoadIndex; /* Track if rhs is changed more than once */ - int RhsXLoadIndex; /* Track if rhs is changed more than once */ + unsigned Changes = 0; /* Number of changes in one run */ + StackOpData Data; + int I; + int OldEntryCount; /* Old number of entries */ + unsigned Used; /* What registers would be used */ + unsigned PushedRegs; /* Track if the same regs are used after the push */ + int RhsALoadIndex; /* Track if rhs is changed more than once */ + int RhsXLoadIndex; /* Track if rhs is changed more than once */ + int IsRegAOptFunc = 0; /* Whether to use the RegA-only optimizations */ enum { Initialize, @@ -2225,6 +2701,8 @@ unsigned OptStackOps (CodeSeg* S) ** ** Since we need a zero page register later, do also check the ** intermediate code for zero page use. + ** When hibytes of both oprands are equal, we may have more specialized + ** optimization for the op. */ I = 0; while (I < (int)CS_GetEntryCount (S)) { @@ -2300,7 +2778,14 @@ unsigned OptStackOps (CodeSeg* S) /* Subroutine call: Check if this is one of the functions, ** we're going to replace. */ - Data.OptFunc = FindFunc (E->Arg); + if (SameRegXValue (&Data)) { + Data.OptFunc = FindFunc (FuncRegATable, FUNC_COUNT (FuncRegATable), E->Arg); + IsRegAOptFunc = 1; + } + if (Data.OptFunc == 0) { + Data.OptFunc = FindFunc (FuncTable, FUNC_COUNT (FuncTable), E->Arg); + IsRegAOptFunc = 0; + } if (Data.OptFunc) { /* Disallow removing the loads if the registers are used */ if (Data.UsedRegs & REG_A) { @@ -2419,11 +2904,11 @@ unsigned OptStackOps (CodeSeg* S) SetDontRemoveEntryFlags (&Data); /* Check the preconditions. If they aren't ok, reset the insn - ** pointer to the pushax and start over. We will loose part of + ** pointer to the pushax and start over. We will lose part of ** load tracking but at least a/x has probably lost between ** pushax and here and will be tracked again when restarting. */ - if (!PreCondOk (&Data)) { + if (IsRegAOptFunc ? !RegAPreCondOk (&Data) : !PreCondOk (&Data)) { /* Unflag entries that can't be removed */ ResetDontRemoveEntryFlags (&Data); I = Data.PushIndex; From 41cee0eb44de6f98910ca98255244f1d4731352d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 23 Jan 2020 06:54:34 +0800 Subject: [PATCH 0495/2710] Extended support for more addressing modes in tos* optimizations. --- src/cc65/coptstop.c | 185 ++++++++++++++++++++++++++++++++------------ 1 file changed, 134 insertions(+), 51 deletions(-) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index c366d5dde..f4f34d163 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -59,12 +59,14 @@ typedef enum { LI_RELOAD_Y = 0x02, /* Reload index register Y */ LI_REMOVE = 0x04, /* Load may be removed */ LI_DONT_REMOVE = 0x08, /* Load may not be removed */ - LI_MAYBE_DIRECT = 0x10, /* Load src might be modified later */ + LI_CHECK_ARG = 0x10, /* Load src might be modified later */ LI_SRC_CHG = 0x20, /* Load src is possibly modified */ LI_LOAD_INSN = 0x40, /* Has a load insn */ + LI_CHECK_Y = 0x80, /* Indexed load src might be modified later */ LI_USED_BY_A = 0x100, /* Content used by RegA */ LI_USED_BY_X = 0x200, /* Content used by RegX */ LI_USED_BY_Y = 0x400, /* Content used by RegY */ + LI_SP = 0x800, /* Content on stack */ } LI_FLAGS; /* Structure that tells us how to load the lhs values */ @@ -73,6 +75,8 @@ struct LoadRegInfo { LI_FLAGS Flags; /* Tells us how to load */ int LoadIndex; /* Index of load insn, -1 if invalid */ CodeEntry* LoadEntry; /* The actual entry, 0 if invalid */ + int LoadYIndex; /* Index of Y-load insn, -1 if invalid */ + CodeEntry* LoadYEntry; /* The actual Y-load entry, 0 if invalid */ int XferIndex; /* Index of transfer insn */ CodeEntry* XferEntry; /* The actual transfer entry */ int Offs; /* Stack offset if data is on stack */ @@ -178,12 +182,14 @@ struct StackOpData { static void ClearLoadRegInfo (LoadRegInfo* RI) /* Clear a LoadRegInfo struct */ { - RI->Flags = LI_NONE; - RI->LoadIndex = -1; - RI->LoadEntry = 0; - RI->XferIndex = -1; - RI->XferEntry = 0; - RI->Offs = 0; + RI->Flags = LI_NONE; + RI->LoadIndex = -1; + RI->LoadEntry = 0; + RI->LoadYIndex = -1; + RI->LoadYEntry = 0; + RI->XferIndex = -1; + RI->XferEntry = 0; + RI->Offs = 0; } @@ -191,12 +197,14 @@ static void ClearLoadRegInfo (LoadRegInfo* RI) static void CopyLoadRegInfo (LoadRegInfo* To, LoadRegInfo* From) /* Copy a LoadRegInfo struct */ { - To->Flags = From->Flags; - To->LoadIndex = From->LoadIndex; - To->LoadEntry = From->LoadEntry; - To->XferIndex = From->XferIndex; - To->XferEntry = From->XferEntry; - To->Offs = From->Offs; + To->Flags = From->Flags; + To->LoadIndex = From->LoadIndex; + To->LoadEntry = From->LoadEntry; + To->LoadYIndex = From->LoadYIndex; + To->LoadYEntry = From->LoadYEntry; + To->XferIndex = From->XferIndex; + To->XferEntry = From->XferEntry; + To->Offs = From->Offs; } @@ -216,8 +224,18 @@ static void FinalizeLoadRegInfo (LoadRegInfo* RI, CodeSeg* S) RI->XferEntry = 0; } /* Load from src not modified before op can be treated as direct */ - if ((RI->Flags & (LI_MAYBE_DIRECT | LI_SRC_CHG)) == LI_MAYBE_DIRECT) { + if ((RI->Flags & LI_SRC_CHG) == 0 && + (RI->Flags & (LI_CHECK_ARG | LI_CHECK_Y)) != 0) { RI->Flags |= LI_DIRECT; + if ((RI->Flags & LI_CHECK_Y) != 0) { + RI->Flags |= LI_RELOAD_Y; + } + } + /* We cannot ldy src,y */ + if ((RI->Flags & LI_RELOAD_Y) != 0 && + RI->LoadYEntry != 0 && + (RI->LoadYEntry->Use & REG_Y) == REG_Y) { + RI->Flags &= ~LI_DIRECT; } } @@ -305,17 +323,27 @@ static int Affected (LoadRegInfo* RI, const CodeEntry* E) fncls_t fncls; unsigned short Use; unsigned short Chg; + unsigned short UseToCheck = 0; - if (RI->Flags & LI_MAYBE_DIRECT) { + if ((RI->Flags & (LI_CHECK_ARG | LI_CHECK_Y)) != 0) { if (E->AM == AM65_IMM || E->AM == AM65_ACC || E->AM == AM65_IMP || E->AM == AM65_BRA) { return 0; } - CHECK (RI->LoadEntry != 0); + CHECK ((RI->Flags & LI_CHECK_ARG) == 0 || RI->LoadEntry != 0); + CHECK ((RI->Flags & LI_CHECK_Y) == 0 || RI->LoadYEntry != 0); + + if ((RI->Flags & LI_CHECK_ARG) != 0) { + UseToCheck |= RI->LoadEntry->Use; + } + + if ((RI->Flags & LI_CHECK_Y) != 0) { + UseToCheck |= RI->LoadYEntry->Use; + } if (E->OPC == OP65_JSR) { /* Try to know about the function */ fncls = GetFuncInfo (E->Arg, &Use, &Chg); - if ((RI->LoadEntry->Use & Chg & REG_ALL) == 0 && + if ((UseToCheck & Chg & REG_ALL) == 0 && fncls == FNCLS_BUILTIN) { /* Builtin functions are known to be harmless */ return 0; @@ -327,8 +355,15 @@ static int Affected (LoadRegInfo* RI, const CodeEntry* E) E->OPC == OP65_ROL || E->OPC == OP65_ROR || E->OPC == OP65_TRB || E->OPC == OP65_TSB || E->OPC == OP65_STA || E->OPC == OP65_STX || E->OPC == OP65_STY) { - if ((E->AM == AM65_ABS || E->AM == AM65_ZP) && - strcmp (RI->LoadEntry->Arg, E->Arg) != 0) { + if ((E->AM == AM65_ABS || E->AM == AM65_ZP)) { + if ((RI->Flags & LI_CHECK_ARG) != 0 && + strcmp (RI->LoadEntry->Arg, E->Arg) == 0) { + return 1; + } + if ((RI->Flags & LI_CHECK_Y) != 0 && + strcmp (RI->LoadYEntry->Arg, E->Arg) == 0) { + return 1; + } return 0; } /* We could've check further for more cases where the load target isn't modified, @@ -398,11 +433,11 @@ static unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) RI->Flags |= LI_DIRECT; } else if (E->AM == AM65_ZP || E->AM == AM65_ABS) { /* These insns are replaceable only if they are not modified later */ - RI->Flags |= LI_MAYBE_DIRECT; - /* Watch for any change of the load target */ - RI->LoadEntry = CS_GetEntry (S, I); + RI->Flags |= LI_CHECK_ARG; + } else if (E->AM == AM65_ZPY || E->AM == AM65_ABSY) { + /* These insns are replaceable only if they are not modified later */ + RI->Flags |= LI_CHECK_ARG | LI_CHECK_Y; } else if (E->AM == AM65_ZP_INDY && - RegValIsKnown (E->RI->In.RegY) && strcmp (E->Arg, "sp") == 0) { /* A load from the stack with known offset is also ok, but in this ** case we must reload the index register later. Please note that @@ -410,16 +445,34 @@ static unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) ** these locations may change between the push and the actual ** operation. */ - RI->Offs = (unsigned char) E->RI->In.RegY; - RI->Flags |= (LI_DIRECT | LI_RELOAD_Y); + RI->Flags |= LI_DIRECT | LI_CHECK_Y | LI_SP; /* Reg Y can be regarded as unused if this load is removed */ Used &= ~REG_Y; - LI->Y.Flags |= LI_USED_BY_A; + if (RI == &LI->A) { + LI->Y.Flags |= LI_USED_BY_A; + } else { + LI->Y.Flags |= LI_USED_BY_X; + } + } + + /* If the load offset has a known value, we can just remember and reload + ** it into the index register later. + */ + if ((RI->Flags & LI_CHECK_Y) != 0) { + if (RegValIsKnown (E->RI->In.RegY)) { + RI->Offs = (unsigned char)E->RI->In.RegY; + RI->Flags &= ~LI_CHECK_Y; + RI->Flags |= LI_RELOAD_Y; + } else { + /* We need to check if the src of Y is changed */ + RI->LoadYIndex = LI->Y.LoadIndex; + RI->LoadYEntry = CS_GetEntry (S, RI->LoadYIndex); + } } /* Watch for any change of the load target */ - if ((RI->Flags & LI_MAYBE_DIRECT) != 0) { + if ((RI->Flags & LI_CHECK_ARG) != 0) { RI->LoadEntry = CS_GetEntry (S, I); } @@ -462,23 +515,25 @@ static unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) } /* Transfer the data */ - Tgt->LoadIndex = Src->LoadIndex; - Tgt->LoadEntry = Src->LoadEntry; - Tgt->XferIndex = I; - Tgt->Offs = Src->Offs; - Tgt->Flags = Src->Flags; + Tgt->LoadIndex = Src->LoadIndex; + Tgt->LoadEntry = Src->LoadEntry; + Tgt->LoadYIndex = Src->LoadYIndex; + Tgt->LoadYEntry = Src->LoadYEntry; + Tgt->XferIndex = I; + Tgt->Offs = Src->Offs; + Tgt->Flags = Src->Flags; } else if (CE_IsCallTo (E, "ldaxysp") && RegValIsKnown (E->RI->In.RegY)) { /* Both registers set, Y changed */ LI->A.LoadIndex = I; LI->A.XferIndex = -1; - LI->A.Flags = (LI_LOAD_INSN | LI_DIRECT | LI_RELOAD_Y); + LI->A.Flags = (LI_LOAD_INSN | LI_DIRECT | LI_RELOAD_Y | LI_SP); LI->A.Offs = (unsigned char) E->RI->In.RegY - 1; LI->X.LoadIndex = I; LI->X.XferIndex = -1; - LI->X.Flags = (LI_LOAD_INSN | LI_DIRECT | LI_RELOAD_Y); + LI->X.Flags = (LI_LOAD_INSN | LI_DIRECT | LI_RELOAD_Y | LI_SP); LI->X.Offs = (unsigned char) E->RI->In.RegY; /* Reg Y can be regarded as unused if this load is removed */ @@ -658,10 +713,10 @@ static void AdjustStackOffset (StackOpData* D, unsigned Offs) /* If we have rhs load insns that load from stack, we'll have to adjust ** the offsets for these also. */ - if (D->Rhs.A.Flags & LI_RELOAD_Y) { + if ((D->Rhs.A.Flags & (LI_RELOAD_Y | LI_SP | LI_CHECK_Y)) == (LI_RELOAD_Y | LI_SP)) { D->Rhs.A.Offs -= Offs; } - if (D->Rhs.X.Flags & LI_RELOAD_Y) { + if ((D->Rhs.X.Flags & (LI_RELOAD_Y | LI_SP | LI_CHECK_Y)) == (LI_RELOAD_Y | LI_SP)) { D->Rhs.X.Offs -= Offs; } } @@ -727,13 +782,22 @@ static void AddOpLow (StackOpData* D, opc_t OPC, LoadInfo* LI) } else { - /* ldy #offs */ - const char* Arg = MakeHexArg (LI->A.Offs); - X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, D->OpEntry->LI); + if ((LI->A.Flags & LI_CHECK_Y) == 0) { + /* ldy #offs */ + X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (LI->A.Offs), 0, D->OpEntry->LI); + } else { + /* ldy src */ + X = NewCodeEntry (OP65_LDY, LI->A.LoadYEntry->AM, LI->A.LoadYEntry->Arg, 0, D->OpEntry->LI); + } InsertEntry (D, X, D->IP++); - /* opc (sp),y */ - X = NewCodeEntry (OPC, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI); + if (LI->A.LoadEntry->OPC == OP65_JSR) { + /* opc (sp),y */ + X = NewCodeEntry (OPC, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI); + } else { + /* opc src,y */ + X = NewCodeEntry (OPC, LI->A.LoadEntry->AM, LI->A.LoadEntry->Arg, 0, D->OpEntry->LI); + } InsertEntry (D, X, D->IP++); } @@ -781,13 +845,22 @@ static void AddOpHigh (StackOpData* D, opc_t OPC, LoadInfo* LI, int KeepResult) } else { - /* ldy #const */ - const char* Arg = MakeHexArg (LI->X.Offs); - X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, D->OpEntry->LI); + if ((LI->A.Flags & LI_CHECK_Y) == 0) { + /* ldy #const */ + X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (LI->X.Offs), 0, D->OpEntry->LI); + } else { + /* ldy src */ + X = NewCodeEntry (OP65_LDY, LI->X.LoadYEntry->AM, LI->X.LoadYEntry->Arg, 0, D->OpEntry->LI); + } InsertEntry (D, X, D->IP++); - /* opc (sp),y */ - X = NewCodeEntry (OPC, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI); + if (LI->X.LoadEntry->OPC == OP65_JSR) { + /* opc (sp),y */ + X = NewCodeEntry (OPC, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI); + } else { + /* opc src,y */ + X = NewCodeEntry (OPC, LI->A.LoadEntry->AM, LI->A.LoadEntry->Arg, 0, D->OpEntry->LI); + } InsertEntry (D, X, D->IP++); } @@ -2047,12 +2120,22 @@ static unsigned Opt_a_tosicmp (StackOpData* D) InsertEntry (D, X, D->IP++); } else { /* ldy #offs */ - X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (D->Rhs.A.Offs), 0, D->OpEntry->LI); - InsertEntry(D, X, D->IP++); + if ((D->Rhs.A.Flags & LI_CHECK_Y) == 0) { + X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (D->Rhs.A.Offs), 0, D->OpEntry->LI); + } else { + X = NewCodeEntry (OP65_LDY, D->Rhs.A.LoadYEntry->AM, D->Rhs.A.LoadYEntry->Arg, 0, D->OpEntry->LI); + } + InsertEntry (D, X, D->IP++); - /* cmp (sp),y */ - X = NewCodeEntry (OP65_CMP, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI); - InsertEntry(D, X, D->IP++); + /* cmp src,y OR cmp (sp),y*/ + if (D->Rhs.A.LoadEntry->OPC == OP65_JSR) { + /* opc (sp),y */ + X = NewCodeEntry (OP65_CMP, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI); + } else { + /* opc src,y */ + X = NewCodeEntry (OP65_CMP, D->Rhs.A.LoadEntry->AM, D->Rhs.A.LoadEntry->Arg, 0, D->OpEntry->LI); + } + InsertEntry (D, X, D->IP++); } /* RHS may be removed */ From 4e4e4c2d2194c2c1f73d8c4503b4c6c56e1aa9a7 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sun, 30 Aug 2020 20:47:25 +0200 Subject: [PATCH 0496/2710] Allow char bit-fields These are not required to be supported (only int, signed int, and unsigned int are required), but most compilers support it. https://port70.net/~nsz/c/c89/c89-draft.html#3.5.2.1 https://port70.net/~nsz/c/c89/c89-draft.html#A.6.5.8 For consistency with other integral types, plain `char` bit-fields are unsigned, regardless of the `--signed-chars` option. Fixes #1047 --- doc/cc65.sgml | 5 + src/cc65/declare.c | 6 +- src/cc65/symtab.c | 8 +- test/{err => val}/bug1047.c | 0 test/val/char-bitfield.c | 280 ++++++++++++++++++++++++++++++++++++ test/val/enum-bitfield.c | 107 ++++++++++++++ 6 files changed, 401 insertions(+), 5 deletions(-) rename test/{err => val}/bug1047.c (100%) create mode 100644 test/val/char-bitfield.c diff --git a/doc/cc65.sgml b/doc/cc65.sgml index e7b8f260d..e3d9694fe 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -807,6 +807,11 @@ This cc65 version has some extensions to the ISO C standard. <tt/_Static_assert/ is also available as the macro <tt/static_assert/ in <tt/assert.h/. +<item> cc65 supports bit-fields of any integral type that is int-sized or + smaller, and enumerated types with those types as their underlying + type. (Only <tt/int/, <tt/signed int/, and <tt/unsigned int/ are + required.) + <item> Computed gotos, a GCC extension, has limited support. With it you can use fast jump tables from C. You can take the address of a label with a double ampersand, putting them in a static const array of type void *. diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 857021671..8d0a1097c 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -764,9 +764,9 @@ static int ParseFieldWidth (Declaration* Decl) /* TODO: This can be relaxed to be any integral type, but ** ParseStructInit currently only supports up to int. */ - if (SizeOf (Decl->Type) != SizeOf (type_uint)) { - /* Only int sized types may be used for bit-fields for now */ - Error ("cc65 currently only supports unsigned int bit-fields"); + if (SizeOf (Decl->Type) > SizeOf (type_uint)) { + /* Only int-sized or smaller types may be used for bit-fields for now */ + Error ("cc65 currently only supports char-sized and int-sized bit-fields"); return -1; } diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 5546d450c..56c868b2a 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -870,9 +870,13 @@ SymEntry* AddBitField (const char* Name, const Type* T, unsigned Offs, if (!SignednessSpecified) { /* int is treated as signed int everywhere except bit-fields; switch it to unsigned, ** since this is allowed for bit-fields and avoids sign-extension, so is much faster. - ** enums set SignednessSpecified to 1 to avoid this adjustment. + ** enums set SignednessSpecified to 1 to avoid this adjustment. Character types + ** actually distinguish 3 types of char; char may either be signed or unsigned, which + ** is controlled by `--signed-chars`. In bit-fields, however, we perform the same + ** `char -> unsigned char` adjustment that is performed with other integral types. */ - CHECK ((Entry->Type->C & T_MASK_SIGN) == T_SIGN_SIGNED); + CHECK ((Entry->Type->C & T_MASK_SIGN) == T_SIGN_SIGNED || + IsTypeChar (Entry->Type)); Entry->Type->C &= ~T_MASK_SIGN; Entry->Type->C |= T_SIGN_UNSIGNED; } diff --git a/test/err/bug1047.c b/test/val/bug1047.c similarity index 100% rename from test/err/bug1047.c rename to test/val/bug1047.c diff --git a/test/val/char-bitfield.c b/test/val/char-bitfield.c new file mode 100644 index 000000000..0d611f127 --- /dev/null +++ b/test/val/char-bitfield.c @@ -0,0 +1,280 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of char bit-fields; see https://github.com/cc65/cc65/issues/1047 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +static struct four_bits { + unsigned char x : 4; +} fb = {1}; + +static void test_four_bits (void) +{ + if (sizeof (struct four_bits) != 1) { + printf ("Got sizeof (struct four_bits) = %zu, expected 1.\n", + sizeof (struct four_bits)); + failures++; + } + + if (fb.x != 1) { + printf ("Got fb.x = %u, expected 1.\n", fb.x); + failures++; + } + + fb.x = 3; + + if (fb.x != 3) { + printf ("Got fb.x = %u, expected 3.\n", fb.x); + failures++; + } +} + +static struct four_bits_signed { + signed char x : 4; +} fbs = {1}; + +static void test_four_bits_signed (void) +{ + if (sizeof (struct four_bits_signed) != 1) { + printf ("Got sizeof (struct four_bits_signed) = %zu, expected 1.\n", + sizeof (struct four_bits)); + failures++; + } + + if (fbs.x != 1) { + printf ("Got fbs.x = %d, expected 1.\n", fbs.x); + failures++; + } + + fbs.x = 3; + + if (fbs.x != 3) { + printf ("Got fbs.x = %d, expected 3.\n", fbs.x); + failures++; + } +} + +static struct four_bits_plain { + char x : 4; +} fbp = {1}; + +static void test_four_bits_plain (void) +{ + if (sizeof (struct four_bits_plain) != 1) { + printf ("Got sizeof (struct four_bits_plain) = %zu, expected 1.\n", + sizeof (struct four_bits)); + failures++; + } + + if (fbp.x != 1) { + printf ("Got fbp.x = %d, expected 1.\n", fbp.x); + failures++; + } + + fbp.x = 3; + + if (fbp.x != 3) { + printf ("Got fbp.x = %d, expected 3.\n", fbp.x); + failures++; + } +} + +/* + Logic is somewhat diferent for bit-fields that end a struct vs + having additional fields. +*/ + +static struct four_bits_with_char { + unsigned char x : 4; + unsigned char y; +} fbi = {1, 2}; + +static void test_four_bits_with_char (void) +{ + if (sizeof (struct four_bits_with_char) != 2) { + printf ("Got sizeof (struct four_bits_with_char) = %zu, expected 2.\n", + sizeof (struct four_bits_with_char)); + failures++; + } + + if (fbi.x != 1) { + printf ("Got fbi.x = %u, expected 1.\n", fbi.x); + failures++; + } + + if (fbi.y != 2) { + printf ("Got fbi.y = %u, expected 2.\n", fbi.y); + failures++; + } + + fbi.x = 3; + fbi.y = 17; + + if (fbi.x != 3) { + printf ("Got fbi.x = %u, expected 3.\n", fbi.x); + failures++; + } + + if (fbi.y != 17) { + printf ("Got fbi.y = %u, expected 17.\n", fbi.y); + failures++; + } +} + +static struct two_chars { + unsigned char x : 4; + unsigned char y : 4; +} o = {11, 7}; + +/* Tests that bit-fields can share allocation units. */ +static void test_two_chars (void) +{ + if (sizeof (struct two_chars) != 1) { + printf ("Got sizeof (struct two_chars) = %zu, expected 1.\n", + sizeof (struct two_chars)); + failures++; + } + + if (o.x != 11) { + printf ("Got o.x = %u, expected 11.\n", o.x); + failures++; + } + + if (o.y != 7) { + printf ("Got o.y = %u, expected 7.\n", o.y); + failures++; + } + + o.x = 3; + o.y = 4; + + if (o.x != 3) { + printf ("Got o.x = %u, expected 3.\n", o.x); + failures++; + } + + if (o.y != 4) { + printf ("Got o.y = %u, expected 4.\n", o.y); + failures++; + } +} + +static struct full_width { + unsigned char x : 8; +} fw = {255}; + +static void test_full_width (void) +{ + if (sizeof (struct full_width) != 1) { + printf ("Got sizeof (struct full_width) = %zu, expected 1.\n", + sizeof (struct full_width)); + failures++; + } + + if (fw.x != 255) { + printf ("Got fw.x = %u, expected 255.\n", fw.x); + failures++; + } + + fw.x = 42; + + if (fw.x != 42) { + printf ("Got fw.x = %u, expected 42.\n", fw.x); + failures++; + } +} + +static struct aligned_end { + unsigned char : 2; + unsigned char x : 6; + unsigned char : 3; + unsigned char y : 5; +} ae = {63, 17}; + +static void test_aligned_end (void) +{ + if (sizeof (struct aligned_end) != 2) { + printf ("Got sizeof (struct aligned_end) = %zu, expected 2.\n", + sizeof (struct aligned_end)); + failures++; + } + + if (ae.x != 63) { + printf ("Got ae.x = %u, expected 63.\n", ae.x); + failures++; + } + + if (ae.y != 17) { + printf ("Got ae.y = %u, expected 17.\n", ae.y); + failures++; + } + + ae.x = 42; + ae.y = 15; + + if (ae.x != 42) { + printf ("Got ae.x = %u, expected 42.\n", ae.x); + failures++; + } + + if (ae.y != 15) { + printf ("Got ae.y = %u, expected 15.\n", ae.y); + failures++; + } +} + +struct { signed char x : 1; } sc = {-1}; +struct { unsigned char x : 1; } uc = {1}; +struct { char x : 1; } pc = {1}; + +static void test_signedness (void) +{ + if (sc.x != -1) { + printf ("Got sc.x = %d, expected -1.\n", sc.x); + failures++; + } + + if (uc.x != 1) { + printf ("Got uc.x = %u, expected 1.\n", uc.x); + failures++; + } + + if (pc.x != 1) { + printf ("Got pc.x = %u, expected 1.\n", pc.x); + failures++; + } +} + +int main (void) +{ + test_four_bits (); + test_four_bits_with_char (); + test_two_chars (); + test_full_width (); + test_aligned_end (); + test_signedness (); + printf ("failures: %u\n", failures); + return failures; +} diff --git a/test/val/enum-bitfield.c b/test/val/enum-bitfield.c index 62e05f71f..a942091c2 100644 --- a/test/val/enum-bitfield.c +++ b/test/val/enum-bitfield.c @@ -149,10 +149,117 @@ static void test_enum_bitfield_int(void) } } +/* Enum with underlying type unsigned char. */ +enum e7uc { + E7UC_100 = 100, +}; + +static struct enum_bitfield_uchar { + enum e7uc x : 1; + enum e7uc y : 4; + enum e7uc z : 8; +} e7ucbf = {0, 10, E7UC_100}; + +static void test_enum_bitfield_uchar(void) +{ + if (sizeof (struct enum_bitfield_uchar) != 2) { + printf ("Got sizeof(struct enum_bitfield_uchar) = %zu, expected 2.\n", + sizeof(struct enum_bitfield_uchar)); + failures++; + } + + if (e7ucbf.x != 0) { + printf ("Got e7ucbf.x = %u, expected 0.\n", e7ucbf.x); + failures++; + } + if (e7ucbf.y != 10) { + printf ("Got e7ucbf.y = %u, expected 10.\n", e7ucbf.y); + failures++; + } + if (e7ucbf.z != 100) { + printf ("Got e7ucbf.z = %u, expected 100.\n", e7ucbf.z); + failures++; + } + + e7ucbf.x = -1; /* Will store 1. */ + e7ucbf.y = -1; /* Will store 15. */ + e7ucbf.z = 127; + + /* Both signed char and unsigned char are converted to int in arithmetic expressions, + ** so we write this test differently to enum_bitfield_int. + */ + if (e7ucbf.x != 1) { + printf ("Got e7ucbf.x = %u, expected 1.\n", e7ucbf.x); + failures++; + } + + if (e7ucbf.y != 15) { + printf ("Got e7ucbf.y = %u, expected 15.\n", e7ucbf.y); + failures++; + } + if (e7ucbf.z != 127) { + printf ("Got e7ucbf.z = %u, expected 127.\n", e7ucbf.z); + failures++; + } +} + +/* Enum with underlying type signed char. */ +enum e8sc { + E8SC_M1 = -1, + E8SC_100 = 100, +}; + +static struct enum_bitfield_char { + enum e8sc x : 1; + enum e8sc y : 4; + enum e8sc z : 8; +} e8scbf = {0, 5, E8SC_100}; + +static void test_enum_bitfield_char(void) +{ + if (sizeof (struct enum_bitfield_char) != 2) { + printf ("Got sizeof(struct enum_bitfield_char) = %zu, expected 2.\n", + sizeof(struct enum_bitfield_char)); + failures++; + } + + if (e8scbf.x != 0) { + printf ("Got e8scbf.x = %d, expected 0.\n", e8scbf.x); + failures++; + } + if (e8scbf.y != 5) { + printf ("Got e8scbf.y = %d, expected 10.\n", e8scbf.y); + failures++; + } + if (e8scbf.z != 100) { + printf ("Got e8scbf.z = %d, expected 100.\n", e8scbf.z); + failures++; + } + + e8scbf.x = -1; + e8scbf.y = -3; + e8scbf.z = 127; + + if (e8scbf.x != -1) { + printf ("Got e8scbf.x = %d, expected -1.\n", e8scbf.x); + failures++; + } + if (e8scbf.y != -3) { + printf ("Got e8scbf.y = %d, expected -3.\n", e8scbf.y); + failures++; + } + if (e8scbf.z != 127) { + printf ("Got e8scbf.z = %d, expected 127.\n", e8scbf.z); + failures++; + } +} + int main(void) { test_enum_bitfield_uint(); test_enum_bitfield_int(); + test_enum_bitfield_uchar(); + test_enum_bitfield_char(); printf("failures: %u\n", failures); return failures; } From ab7e9f84241c6f686999eb61069273c27dc0add5 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 8 Sep 2020 21:36:38 +0800 Subject: [PATCH 0497/2710] Hotfix for Issue #1250. --- src/cc65/expr.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index e1b22ac50..826e72b09 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1933,13 +1933,6 @@ void hie10 (ExprDesc* Expr) case TOK_STAR: NextToken (); ExprWithCheck (hie10, Expr); - if (ED_IsLVal (Expr) || !ED_IsLocQuasiConst (Expr)) { - /* Not a const, load the pointer into the primary and make it a - ** calculated value. - */ - LoadExpr (CF_NONE, Expr); - ED_FinalizeRValLoad (Expr); - } /* If the expression is already a pointer to function, the ** additional dereferencing operator must be ignored. A function @@ -1951,6 +1944,14 @@ void hie10 (ExprDesc* Expr) /* Expression not storable */ ED_MarkExprAsRVal (Expr); } else { + if (!ED_IsQuasiConstAddr (Expr)) { + /* Not a constant address, load the pointer into the primary + ** and make it a calculated value. + */ + LoadExpr (CF_NONE, Expr); + ED_FinalizeRValLoad (Expr); + } + if (IsClassPtr (Expr->Type)) { Expr->Type = Indirect (Expr->Type); } else { From ae6696fcb9beed9e2c5d8c2207e861ac1a0861db Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 8 Sep 2020 10:24:27 -0400 Subject: [PATCH 0498/2710] Removed some ambiguity from a statement. A limited number of bit-field types are required by the C standard, not by cc65. --- doc/cc65.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index e3d9694fe..578217307 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -810,7 +810,7 @@ This cc65 version has some extensions to the ISO C standard. <item> cc65 supports bit-fields of any integral type that is int-sized or smaller, and enumerated types with those types as their underlying type. (Only <tt/int/, <tt/signed int/, and <tt/unsigned int/ are - required.) + required by the standard.) <item> Computed gotos, a GCC extension, has limited support. With it you can use fast jump tables from C. You can take the address of a label with From 142b0bf9b35103361bac5a50d8c74c29335943b9 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 5 Sep 2020 11:26:00 +0800 Subject: [PATCH 0499/2710] Added utility functions to get names of comparison function/transformer subroutines. --- src/cc65/codeinfo.c | 57 +++++++++++++++++++++++++++++++++++++++++++++ src/cc65/codeinfo.h | 14 +++++++++++ 2 files changed, 71 insertions(+) diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index 6bc62757e..24e27ee10 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -850,6 +850,63 @@ cmp_t FindTosCmpCond (const char* Name) +const char* GetCmpSuffix (cmp_t Cond) +/* Return the compare suffix by the given a compare condition or 0 on failure */ +{ + /* Check for the correct subroutine name */ + if (Cond >= 0 && + Cond != CMP_INV && + (unsigned)Cond < sizeof (CmpSuffixTab) / sizeof (CmpSuffixTab[0])) { + return CmpSuffixTab[Cond]; + } else { + /* Not found */ + return 0; + } +} + + + +char* GetBoolCmpSuffix (char* Buf, cmp_t Cond) +/* Search for a boolean transformer subroutine (eg. booleq) by the given compare +** condition. +** Return the output buffer filled with the name of the correct subroutine or 0 +** on failure. +*/ +{ + /* Check for the correct boolean transformer subroutine name */ + const char* Suf = GetCmpSuffix (Cond); + + if (Suf != 0) { + sprintf (Buf, "bool%s", Suf); + return Buf; + } else { + /* Not found */ + return 0; + } +} + + + +char* GetTosCmpSuffix (char* Buf, cmp_t Cond) +/* Search for a TOS compare function (eg. tosgtax) by the given compare condition. +** Return the output buffer filled with the name of the correct function or 0 on +** failure. +*/ +{ + /* Check for the correct TOS function name */ + const char* Suf = GetCmpSuffix (Cond); + + if (Suf != 0) { + sprintf (Buf, "tos%sax", Suf); + return Buf; + } else { + /* Not found */ + return 0; + } +} + + + const char* GetBoolTransformer (cmp_t Cond) /* Get the bool transformer corresponding to the given compare condition */ { diff --git a/src/cc65/codeinfo.h b/src/cc65/codeinfo.h index 3dda3a6bc..763b947bf 100644 --- a/src/cc65/codeinfo.h +++ b/src/cc65/codeinfo.h @@ -197,7 +197,21 @@ cmp_t GetNegatedCond (cmp_t Cond); cmp_t GetRevertedCond (cmp_t Cond); /* Get the compare condition in reverted order of operands */ +const char* GetCmpSuffix (cmp_t Cond); +/* Return the compare suffix by the given a compare condition or 0 on failure */ +char* GetBoolCmpSuffix (char* Buf, cmp_t Cond); +/* Search for a boolean transformer subroutine (eg. booleq) by the given compare +** condition. +** Return the output buffer filled with the name of the correct subroutine or 0 +** on failure. +*/ + +char* GetTosCmpSuffix (char* Buf, cmp_t Cond); +/* Search for a TOS compare function (eg. tosgtax) by the given compare condition. +** Return the output buffer filled with the name of the correct function or 0 on +** failure. +*/ /* End of codeinfo.h */ From fe3f267233fe7651ae1c4acbb626ec626bd1c7a4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 5 Sep 2020 11:28:38 +0800 Subject: [PATCH 0500/2710] Added new runtime sub bcasta/bcastax/bcasteax opposing to bnega/bnegax/bnegeax. --- libsrc/runtime/bcast.s | 21 +++++++++++++++++++++ libsrc/runtime/lbcast.s | 20 ++++++++++++++++++++ src/cc65/codeent.c | 4 +++- src/cc65/codeinfo.c | 3 +++ src/cc65/coptstop.c | 1 + 5 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 libsrc/runtime/bcast.s create mode 100644 libsrc/runtime/lbcast.s diff --git a/libsrc/runtime/bcast.s b/libsrc/runtime/bcast.s new file mode 100644 index 000000000..bb37b6ec0 --- /dev/null +++ b/libsrc/runtime/bcast.s @@ -0,0 +1,21 @@ +; +; acqn, 01.16.2020 +; +; CC65 runtime: boolean cast +; + + .export bcasta, bcastax + +bcastax: + cpx #0 + bne L1 + +bcasta: + tax + beq L0 ; Zero already in X + +L1: ldx #0 + lda #1 + +L0: rts + diff --git a/libsrc/runtime/lbcast.s b/libsrc/runtime/lbcast.s new file mode 100644 index 000000000..3dee8d956 --- /dev/null +++ b/libsrc/runtime/lbcast.s @@ -0,0 +1,20 @@ +; +; acqn, 01.16.2020 +; +; CC65 runtime: boolean cast for longs +; + + .export bcasteax + .importzp sreg, tmp1 + +bcasteax: + stx tmp1 + ldx #0 ; High byte of result + ora tmp1 + ora sreg + ora sreg+1 + beq L0 + + lda #1 +L0: rts + diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 09ca0a9c5..0e3094962 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -851,7 +851,9 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) if ((In->RegA & 0x0F) >= 8) { Out->RegA = 0; } - } else if (FindBoolCmpCond (E->Arg) != CMP_INV || + } else if (strcmp (E->Arg, "bcastax") == 0 || + strcmp (E->Arg, "bnegax") == 0 || + FindBoolCmpCond (E->Arg) != CMP_INV || FindTosCmpCond (E->Arg) != CMP_INV) { /* Result is boolean value, so X is zero on output */ Out->RegX = 0; diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index 24e27ee10..f51189293 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -107,6 +107,9 @@ static const FuncInfo FuncInfoTable[] = { { "asreax2", REG_EAX, REG_EAX | REG_TMP1 }, { "asreax3", REG_EAX, REG_EAX | REG_TMP1 }, { "asreax4", REG_EAX, REG_EAXY | REG_TMP1 }, + { "bcasta", REG_A, REG_AX }, + { "bcastax", REG_AX, REG_AX }, + { "bcasteax", REG_EAX, REG_EAX | REG_TMP1 }, { "bnega", REG_A, REG_AX }, { "bnegax", REG_AX, REG_AX }, { "bnegeax", REG_EAX, REG_EAX | REG_TMP1 }, diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index f4f34d163..34a9b88d6 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -2328,6 +2328,7 @@ static int HarmlessCall (const char* Name) "asrax3", "asrax4", "asraxy", + "bcastax", "bnegax", "complax", "decax1", From 66c5faeb9a5ddef4b1622679a971e8f7a0ee1090 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 8 Sep 2020 23:40:58 +0800 Subject: [PATCH 0501/2710] Added processor flags usage tracking. Added ZNRegs for tracking what register(s) Z/N flags currently reflect. Added utility functions to check if the specified processor state is known to be a certain value. --- src/cc65/codeent.c | 698 ++++++++++++++++++++++++++++++++++++++------ src/cc65/codeent.h | 4 +- src/cc65/codeinfo.c | 532 ++++++++++++++++----------------- src/cc65/codeinfo.h | 27 +- src/cc65/codeseg.c | 6 + src/cc65/coptsize.c | 584 ++++++++++++++++++------------------ src/cc65/coptstop.c | 8 +- src/cc65/reginfo.c | 50 ++++ src/cc65/reginfo.h | 118 ++++++++ 9 files changed, 1371 insertions(+), 656 deletions(-) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 0e3094962..085130001 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -498,6 +498,228 @@ void CE_FreeRegInfo (CodeEntry* E) +static void DeduceZ (RegContents* C, short Val) +/* Auto-set Z flag */ +{ + if (RegValIsUnknown (Val)) { + C->PFlags |= UNKNOWN_PFVAL_Z; + } else { + C->PFlags &= ~UNKNOWN_PFVAL_Z; + if (Val == 0) { + C->PFlags |= PFVAL_Z; + } + } +} + + + +static void DeduceZN (RegContents* C, short Val) +/* Auto-set Z/N flags */ +{ + if (RegValIsUnknown (Val)) { + C->PFlags |= UNKNOWN_PFVAL_ZN; + } else { + C->PFlags &= ~UNKNOWN_PFVAL_ZN; + if (Val == 0) { + C->PFlags |= PFVAL_Z; + } else if (Val & PFVAL_N) { + C->PFlags |= PFVAL_N; + } + } +} + + + +static short KnownOpADCDeduceCZVN (RegContents* Out, RegContents* In, short Rhs) +/* Do the ADC and auto-set C/Z/V/N flags. +** Both operands and the C flag must be known. +*/ +{ + short SVal, UVal; + SVal = (signed char)(In->RegA & 0xFF) + (signed char)(Rhs & 0xFF); + UVal = (In->RegA & 0xFF) + (Rhs & 0xFF); + if (In->PFlags & PFVAL_C) { + ++SVal; + ++UVal; + } + + Out->PFlags &= ~UNKNOWN_PFVAL_CZVN; + if (UVal > 0xFF) { + Out->PFlags |= PFVAL_C; + } + + if (SVal < -128 || SVal > 127) { + Out->PFlags |= PFVAL_V; + } + + DeduceZN (Out, UVal); + + return UVal; +} + + + +static short KnownOpSBCDeduceCZVN (RegContents* Out, RegContents* In, short Rhs) +/* Do the SBC and auto-set C/Z/V/N flags. +** Both operands and the C flag must be known. +*/ +{ + short SVal, UVal; + SVal = (signed char)(In->RegA & 0xFF) - (signed char)(Rhs & 0xFF); + UVal = (In->RegA & 0xFF) - (Rhs & 0xFF); + if ((In->PFlags & PFVAL_C) == 0) { + --SVal; + --UVal; + } + + Out->PFlags &= ~UNKNOWN_PFVAL_CZVN; + if (UVal >= 0) { + Out->PFlags |= PFVAL_C; + } + + if (SVal < -128 || SVal > 127) { + Out->PFlags |= PFVAL_V; + } + + DeduceZN (Out, UVal); + + return UVal; +} + + + +static short KnownOpCmpDeduceCZN (RegContents* C, short Lhs, short Rhs) +/* Do the CMP and auto-set C/Z/N flags. +** Both operands must be known. + */ +{ + short Val = (Lhs & 0xFF) - (Rhs & 0xFF); + + C->PFlags &= ~UNKNOWN_PFVAL_C; + if (Val >= 0) { + C->PFlags |= PFVAL_C; + } + DeduceZN (C, Val); + + return Val; +} + + + +static short AnyOpASLDeduceCZN (RegContents* C, short Shiftee) +/* Do the ASL and auto-set C/Z/N flags */ +{ + if (RegValIsKnown (Shiftee)) { + C->PFlags &= ~UNKNOWN_PFVAL_C; + if (Shiftee & 0x80U) { + C->PFlags |= PFVAL_C; + } + Shiftee = (Shiftee << 1) & 0xFF; + } + DeduceZN (C, Shiftee); + + return Shiftee; +} + + + +static short AnyOpLSRDeduceCZN (RegContents* C, short Shiftee) +/* Do the LSR and auto-set C/Z/N flags */ +{ + if (RegValIsKnown (Shiftee)) { + C->PFlags &= ~UNKNOWN_PFVAL_C; + if (Shiftee & 0x01U) { + C->PFlags |= PFVAL_C; + } + Shiftee = (Shiftee >> 1) & 0xFF; + } + DeduceZN (C, Shiftee); + + return Shiftee; +} + + + +static short AnyOpROLDeduceCZN (RegContents* C, short PFlags, short Shiftee) +/* Do the ROL and auto-set C/Z/N flags */ +{ + if (RegValIsKnown (Shiftee) && PStatesAreKnown (PFlags, PSTATE_C)) { + C->PFlags &= ~UNKNOWN_PFVAL_C; + if (Shiftee & 0x80U) { + C->PFlags |= PFVAL_C; + } + Shiftee = (Shiftee << 1) & 0xFF; + if (PFlags & PFVAL_C) { + Shiftee |= 0x01U; + } + } else { + Shiftee = UNKNOWN_REGVAL; + } + DeduceZN (C, Shiftee); + + return Shiftee; +} + + + +static short AnyOpRORDeduceCZN (RegContents* C, short PFlags, short Shiftee) +/* Do the ROR and auto-set C/Z/N flags */ +{ + if (RegValIsKnown (Shiftee) && PStatesAreKnown (PFlags, PSTATE_C)) { + C->PFlags &= ~UNKNOWN_PFVAL_C; + if (Shiftee & 0x01U) { + C->PFlags |= PFVAL_C; + } + Shiftee = (Shiftee >> 1) & 0xFF; + if (PFlags & PFVAL_C) { + Shiftee |= 0x80U; + } + } else { + Shiftee = UNKNOWN_REGVAL; + } + DeduceZN (C, Shiftee); + + return Shiftee; +} + + + +static void BranchDeduceOnProcessorFlag (RegContents* True, RegContents* False, unsigned short PTrueFlag) +/* Auto-set the corresponding C/Z/V/N flag output for both True/Flase code flows */ +{ + PTrueFlag &= 0xFF; + unsigned short Mask = ~(PTrueFlag * 0x0101U) & 0xFFFFU; + True->PFlags &= Mask; + True->PFlags |= PTrueFlag; + False->PFlags &= Mask; +} + + + +static int MightAffectKnownZP (CodeEntry* E, RegContents* In) +/* TODO: This is supposed to check if any builtin ZP could be affected. +** It simply returns TRUE in most cases for now. +*/ +{ + unsigned Index = 0; + + if (E->AM == AM65_ZP || + E->AM == AM65_ABS || + (E->AM == AM65_ZPX && RegValIsKnown (In->RegX) && (Index = In->RegX & 0xFF)) || + (E->AM == AM65_ZPY && RegValIsKnown (In->RegY) && (Index = In->RegY & 0xFF)) || + (E->AM == AM65_ABSX && RegValIsKnown (In->RegX) && (Index = In->RegX & 0xFF)) || + (E->AM == AM65_ABSY && RegValIsKnown (In->RegY) && (Index = In->RegY & 0xFF))) { + return 1; + } else if ((E->AM == AM65_ZP_IND) || + (E->AM == AM65_ZPX_IND && RegValIsKnown (In->RegX) && (Index = In->RegX & 0xFF)) || + (E->AM == AM65_ZP_INDY && RegValIsKnown (In->RegY) && (Index = In->RegY & 0xFF))) { + return 1; + } + return 1; +} + + + void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) /* Generate register info for this instruction. If an old info exists, it is ** overwritten. @@ -506,9 +728,13 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) /* Pointers to the register contents */ RegContents* In; RegContents* Out; + RegContents* BranchOut; /* Function register usage */ - unsigned short Use, Chg; + unsigned Use, Chg; + + /* Value in question */ + short Val = UNKNOWN_REGVAL; /* If we don't have a register info struct, allocate one. */ if (E->RI == 0) { @@ -525,18 +751,46 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) /* Get pointers to the register contents */ In = &E->RI->In; Out = &E->RI->Out; + BranchOut = &E->RI->Out2; /* Handle the different instructions */ switch (E->OPC) { case OP65_ADC: - /* We don't know the value of the carry, so the result is - ** always unknown. - */ Out->RegA = UNKNOWN_REGVAL; + Out->PFlags |= UNKNOWN_PFVAL_CZVN; + Out->ZNRegs = ZNREG_A; + if (PStatesAreKnown (In->PFlags, PSTATE_C) && + RegValIsKnown (In->RegA)) { + if (CE_IsConstImm (E)) { + Out->RegA = KnownOpADCDeduceCZVN (Out, In, (short) E->Num); + } else if (E->AM == AM65_ZP) { + switch (GetKnownReg (E->Use & REG_ZP, In)) { + case REG_TMP1: + Out->RegA = KnownOpADCDeduceCZVN (Out, In, In->Tmp1); + break; + case REG_PTR1_LO: + Out->RegA = KnownOpADCDeduceCZVN (Out, In, In->Ptr1Lo); + break; + case REG_PTR1_HI: + Out->RegA = KnownOpADCDeduceCZVN (Out, In, In->Ptr1Hi); + break; + case REG_SREG_LO: + Out->RegA = KnownOpADCDeduceCZVN (Out, In, In->SRegLo); + break; + case REG_SREG_HI: + Out->RegA = KnownOpADCDeduceCZVN (Out, In, In->SRegHi); + break; + default: + break; + } + } + } break; case OP65_AND: + Out->RegA = UNKNOWN_REGVAL; + Out->ZNRegs = ZNREG_A; if (RegValIsKnown (In->RegA)) { if (CE_IsConstImm (E)) { Out->RegA = In->RegA & (short) E->Num; @@ -558,145 +812,289 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Out->RegA = In->RegA & In->SRegHi; break; default: - Out->RegA = UNKNOWN_REGVAL; break; } - } else { - Out->RegA = UNKNOWN_REGVAL; } } else if (CE_IsKnownImm (E, 0)) { /* A and $00 does always give zero */ Out->RegA = 0; } + DeduceZN (Out, Out->RegA); break; case OP65_ASL: - if (E->AM == AM65_ACC && RegValIsKnown (In->RegA)) { - Out->RegA = (In->RegA << 1) & 0xFF; + Out->PFlags |= UNKNOWN_PFVAL_CZN; + Out->ZNRegs = ZNREG_NONE; + if (E->AM == AM65_ACC) { + Out->RegA = AnyOpASLDeduceCZN (Out, In->RegA); + Out->ZNRegs = ZNREG_A; } else if (E->AM == AM65_ZP) { switch (GetKnownReg (E->Chg & REG_ZP, In)) { case REG_TMP1: - Out->Tmp1 = (In->Tmp1 << 1) & 0xFF; + Out->Tmp1 = AnyOpASLDeduceCZN (Out, In->Tmp1); + Out->ZNRegs = ZNREG_TMP1; break; case REG_PTR1_LO: - Out->Ptr1Lo = (In->Ptr1Lo << 1) & 0xFF; + Out->Ptr1Lo = AnyOpASLDeduceCZN (Out, In->Ptr1Lo); + Out->ZNRegs = ZNREG_PTR1_LO; break; case REG_PTR1_HI: - Out->Ptr1Hi = (In->Ptr1Hi << 1) & 0xFF; + Out->Ptr1Hi = AnyOpASLDeduceCZN (Out, In->Ptr1Hi); + Out->ZNRegs = ZNREG_PTR1_HI; break; case REG_SREG_LO: - Out->SRegLo = (In->SRegLo << 1) & 0xFF; + Out->SRegLo = AnyOpASLDeduceCZN (Out, In->SRegLo); + Out->ZNRegs = ZNREG_SREG_LO; break; case REG_SREG_HI: - Out->SRegHi = (In->SRegHi << 1) & 0xFF; + Out->SRegHi = AnyOpASLDeduceCZN (Out, In->SRegHi); + Out->ZNRegs = ZNREG_SREG_HI; break; } - } else if (E->AM == AM65_ZPX) { + } else if (MightAffectKnownZP (E, In)) { /* Invalidates all ZP registers */ RC_InvalidateZP (Out); } break; case OP65_BCC: + BranchDeduceOnProcessorFlag (Out, BranchOut, PFVAL_C); break; case OP65_BCS: + BranchDeduceOnProcessorFlag (BranchOut, Out, PFVAL_C); break; case OP65_BEQ: + BranchDeduceOnProcessorFlag (BranchOut, Out, PFVAL_Z); break; case OP65_BIT: + Out->ZNRegs = ZNREG_NONE; + if (E->AM == AM65_ZP) { + switch (GetKnownReg (E->Chg & REG_ZP, In)) { + case REG_TMP1: + Val = In->Tmp1; + break; + case REG_PTR1_LO: + Val = In->Ptr1Lo; + break; + case REG_PTR1_HI: + Val = In->Ptr1Hi; + break; + case REG_SREG_LO: + Val = In->SRegLo; + break; + case REG_SREG_HI: + Val = In->SRegHi; + break; + } + } + Out->PFlags &= ~UNKNOWN_PFVAL_V; + if (Val & PFVAL_V) { + Out->PFlags |= PFVAL_V; + } + DeduceZN (Out, Val); break; case OP65_BMI: + BranchDeduceOnProcessorFlag (BranchOut, Out, PFVAL_N); break; case OP65_BNE: + BranchDeduceOnProcessorFlag (Out, BranchOut, PFVAL_Z); break; case OP65_BPL: + BranchDeduceOnProcessorFlag (Out, BranchOut, PFVAL_N); break; case OP65_BRA: break; case OP65_BRK: + Out->PFlags &= ~UNKNOWN_PFVAL_B; + Out->PFlags |= PFVAL_B; break; case OP65_BVC: + BranchDeduceOnProcessorFlag (Out, BranchOut, PFVAL_V); break; case OP65_BVS: + BranchDeduceOnProcessorFlag (BranchOut, Out, PFVAL_V); break; case OP65_CLC: + Out->PFlags &= ~UNKNOWN_PFVAL_C; break; case OP65_CLD: + Out->PFlags &= ~UNKNOWN_PFVAL_D; break; case OP65_CLI: + Out->PFlags &= ~UNKNOWN_PFVAL_I; break; case OP65_CLV: + Out->PFlags &= ~UNKNOWN_PFVAL_V; break; case OP65_CMP: + Out->PFlags |= UNKNOWN_PFVAL_CZN; + Out->ZNRegs = ZNREG_NONE; + if (RegValIsKnown (In->RegA)) { + if (CE_IsConstImm (E)) { + KnownOpCmpDeduceCZN (Out, In->RegA, (short)E->Num); + } else if (E->AM == AM65_ZP) { + switch (GetKnownReg (E->Use & REG_ZP, In)) { + case REG_TMP1: + KnownOpCmpDeduceCZN (Out, In->RegA, In->Tmp1); + break; + case REG_PTR1_LO: + KnownOpCmpDeduceCZN (Out, In->RegA, In->Ptr1Lo); + break; + case REG_PTR1_HI: + KnownOpCmpDeduceCZN (Out, In->RegA, In->Ptr1Hi); + break; + case REG_SREG_LO: + KnownOpCmpDeduceCZN (Out, In->RegA, In->SRegLo); + break; + case REG_SREG_HI: + KnownOpCmpDeduceCZN (Out, In->RegA, In->SRegHi); + break; + default: + break; + } + } + } break; case OP65_CPX: + Out->PFlags |= UNKNOWN_PFVAL_CZN; + Out->ZNRegs = ZNREG_NONE; + if (RegValIsKnown (In->RegX)) { + if (CE_IsConstImm (E)) { + KnownOpCmpDeduceCZN (Out, In->RegX, (short)E->Num); + } else if (E->AM == AM65_ZP) { + switch (GetKnownReg (E->Use & REG_ZP, In)) { + case REG_TMP1: + KnownOpCmpDeduceCZN (Out, In->RegX, In->Tmp1); + break; + case REG_PTR1_LO: + KnownOpCmpDeduceCZN (Out, In->RegX, In->Ptr1Lo); + break; + case REG_PTR1_HI: + KnownOpCmpDeduceCZN (Out, In->RegX, In->Ptr1Hi); + break; + case REG_SREG_LO: + KnownOpCmpDeduceCZN (Out, In->RegX, In->SRegLo); + break; + case REG_SREG_HI: + KnownOpCmpDeduceCZN (Out, In->RegX, In->SRegHi); + break; + default: + break; + } + } + } break; case OP65_CPY: + Out->PFlags |= UNKNOWN_PFVAL_CZN; + Out->ZNRegs = ZNREG_NONE; + if (RegValIsKnown (In->RegY)) { + if (CE_IsConstImm (E)) { + KnownOpCmpDeduceCZN (Out, In->RegY, (short)E->Num); + } else if (E->AM == AM65_ZP) { + switch (GetKnownReg (E->Use & REG_ZP, In)) { + case REG_TMP1: + KnownOpCmpDeduceCZN (Out, In->RegY, In->Tmp1); + break; + case REG_PTR1_LO: + KnownOpCmpDeduceCZN (Out, In->RegY, In->Ptr1Lo); + break; + case REG_PTR1_HI: + KnownOpCmpDeduceCZN (Out, In->RegY, In->Ptr1Hi); + break; + case REG_SREG_LO: + KnownOpCmpDeduceCZN (Out, In->RegY, In->SRegLo); + break; + case REG_SREG_HI: + KnownOpCmpDeduceCZN (Out, In->RegY, In->SRegHi); + break; + default: + break; + } + } + } break; case OP65_DEA: + Out->ZNRegs = ZNREG_A; if (RegValIsKnown (In->RegA)) { Out->RegA = (In->RegA - 1) & 0xFF; } + DeduceZN (Out, Out->RegA); break; case OP65_DEC: - if (E->AM == AM65_ACC && RegValIsKnown (In->RegA)) { - Out->RegA = (In->RegA - 1) & 0xFF; + Out->ZNRegs = ZNREG_NONE; + if (E->AM == AM65_ACC) { + if (RegValIsKnown (In->RegA)) { + Val = Out->RegA = (In->RegA - 1) & 0xFF; + } + Out->ZNRegs = ZNREG_A; } else if (E->AM == AM65_ZP) { switch (GetKnownReg (E->Chg & REG_ZP, In)) { case REG_TMP1: - Out->Tmp1 = (In->Tmp1 - 1) & 0xFF; + Val = Out->Tmp1 = (In->Tmp1 - 1) & 0xFF; + Out->ZNRegs = ZNREG_TMP1; break; case REG_PTR1_LO: - Out->Ptr1Lo = (In->Ptr1Lo - 1) & 0xFF; + Val = Out->Ptr1Lo = (In->Ptr1Lo - 1) & 0xFF; + Out->ZNRegs = ZNREG_PTR1_LO; break; case REG_PTR1_HI: - Out->Ptr1Hi = (In->Ptr1Hi - 1) & 0xFF; + Val = Out->Ptr1Hi = (In->Ptr1Hi - 1) & 0xFF; + Out->ZNRegs = ZNREG_PTR1_HI; break; case REG_SREG_LO: - Out->SRegLo = (In->SRegLo - 1) & 0xFF; + Val = Out->SRegLo = (In->SRegLo - 1) & 0xFF; + Out->ZNRegs = ZNREG_SREG_LO; break; case REG_SREG_HI: - Out->SRegHi = (In->SRegHi - 1) & 0xFF; + Val = Out->SRegHi = (In->SRegHi - 1) & 0xFF; + Out->ZNRegs = ZNREG_SREG_HI; break; } - } else if (E->AM == AM65_ZPX) { + } else if (MightAffectKnownZP (E, In)) { /* Invalidates all ZP registers */ RC_InvalidateZP (Out); } + DeduceZN (Out, Val); break; case OP65_DEX: + Out->ZNRegs = ZNREG_X; if (RegValIsKnown (In->RegX)) { Out->RegX = (In->RegX - 1) & 0xFF; } + DeduceZN (Out, Out->RegX); break; case OP65_DEY: + Out->ZNRegs = ZNREG_Y; if (RegValIsKnown (In->RegY)) { Out->RegY = (In->RegY - 1) & 0xFF; } + DeduceZN (Out, Out->RegY); break; case OP65_EOR: + Out->RegA = UNKNOWN_REGVAL; + Out->ZNRegs = ZNREG_A; if (RegValIsKnown (In->RegA)) { if (CE_IsConstImm (E)) { Out->RegA = In->RegA ^ (short) E->Num; @@ -718,82 +1116,104 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Out->RegA = In->RegA ^ In->SRegHi; break; default: - Out->RegA = UNKNOWN_REGVAL; break; } - } else { - Out->RegA = UNKNOWN_REGVAL; } } + DeduceZN (Out, Out->RegA); break; case OP65_INA: + Out->ZNRegs = ZNREG_A; if (RegValIsKnown (In->RegA)) { Out->RegA = (In->RegA + 1) & 0xFF; } + DeduceZN (Out, Out->RegA); break; case OP65_INC: - if (E->AM == AM65_ACC && RegValIsKnown (In->RegA)) { - Out->RegA = (In->RegA + 1) & 0xFF; + Out->ZNRegs = ZNREG_NONE; + if (E->AM == AM65_ACC) { + if (RegValIsKnown (In->RegA)) { + Val = Out->RegA = (In->RegA + 1) & 0xFF; + } + Out->ZNRegs = ZNREG_A; } else if (E->AM == AM65_ZP) { - switch (GetKnownReg (E->Chg & REG_ZP, In)) { + switch (GetKnownReg (E->Chg & REG_ZP, 0)) { case REG_TMP1: - Out->Tmp1 = (In->Tmp1 + 1) & 0xFF; + Val = Out->Tmp1 = (In->Tmp1 + 1) & 0xFF; + Out->ZNRegs = ZNREG_TMP1; break; case REG_PTR1_LO: - Out->Ptr1Lo = (In->Ptr1Lo + 1) & 0xFF; + Val = Out->Ptr1Lo = (In->Ptr1Lo + 1) & 0xFF; + Out->ZNRegs = ZNREG_PTR1_LO; break; case REG_PTR1_HI: - Out->Ptr1Hi = (In->Ptr1Hi + 1) & 0xFF; + Val = Out->Ptr1Hi = (In->Ptr1Hi + 1) & 0xFF; + Out->ZNRegs = ZNREG_PTR1_HI; break; case REG_SREG_LO: - Out->SRegLo = (In->SRegLo + 1) & 0xFF; + Val = Out->SRegLo = (In->SRegLo + 1) & 0xFF; + Out->ZNRegs = ZNREG_SREG_LO; break; case REG_SREG_HI: - Out->SRegHi = (In->SRegHi + 1) & 0xFF; + Val = Out->SRegHi = (In->SRegHi + 1) & 0xFF; + Out->ZNRegs = ZNREG_SREG_HI; break; } - } else if (E->AM == AM65_ZPX) { + } else if (MightAffectKnownZP (E, In)) { /* Invalidates all ZP registers */ RC_InvalidateZP (Out); } + DeduceZN (Out, Val); break; case OP65_INX: + Out->ZNRegs = ZNREG_X; if (RegValIsKnown (In->RegX)) { Out->RegX = (In->RegX + 1) & 0xFF; } + DeduceZN (Out, Out->RegX); break; case OP65_INY: + Out->ZNRegs = ZNREG_Y; if (RegValIsKnown (In->RegY)) { Out->RegY = (In->RegY + 1) & 0xFF; } + DeduceZN (Out, Out->RegY); break; case OP65_JCC: + BranchDeduceOnProcessorFlag (Out, BranchOut, PFVAL_C); break; case OP65_JCS: + BranchDeduceOnProcessorFlag (BranchOut, Out, PFVAL_C); break; case OP65_JEQ: + BranchDeduceOnProcessorFlag (BranchOut, Out, PFVAL_Z); break; case OP65_JMI: + BranchDeduceOnProcessorFlag (BranchOut, Out, PFVAL_N); break; case OP65_JMP: break; case OP65_JNE: + BranchDeduceOnProcessorFlag (Out, BranchOut, PFVAL_Z); break; case OP65_JPL: + BranchDeduceOnProcessorFlag (Out, BranchOut, PFVAL_N); break; case OP65_JSR: + Out->ZNRegs = ZNREG_NONE; + /* Get the code info for the function */ GetFuncInfo (E->Arg, &Use, &Chg); if (Chg & REG_A) { @@ -820,6 +1240,9 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) if (Chg & REG_SREG_HI) { Out->SRegHi = UNKNOWN_REGVAL; } + /* FIXME: Quick hack to set flags on process status: */ + Out->PFlags |= ((Chg & PSTATE_ALL) >> PSTATE_BITS_SHIFT) * 0x0101U; + /* ## FIXME: Quick hack for some known functions: */ if (strcmp (E->Arg, "complax") == 0) { if (RegValIsKnown (In->RegA)) { @@ -861,12 +1284,16 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) break; case OP65_JVC: + BranchDeduceOnProcessorFlag (Out, BranchOut, PFVAL_V); break; case OP65_JVS: + BranchDeduceOnProcessorFlag (BranchOut, Out, PFVAL_V); break; case OP65_LDA: + Out->RegA = UNKNOWN_REGVAL; + Out->ZNRegs = ZNREG_A; if (CE_IsConstImm (E)) { Out->RegA = (unsigned char) E->Num; } else if (E->AM == AM65_ZP) { @@ -887,16 +1314,15 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Out->RegA = In->SRegHi; break; default: - Out->RegA = UNKNOWN_REGVAL; break; } - } else { - /* A is now unknown */ - Out->RegA = UNKNOWN_REGVAL; } + DeduceZN (Out, Out->RegA); break; case OP65_LDX: + Out->RegX = UNKNOWN_REGVAL; + Out->ZNRegs = ZNREG_X; if (CE_IsConstImm (E)) { Out->RegX = (unsigned char) E->Num; } else if (E->AM == AM65_ZP) { @@ -917,16 +1343,15 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Out->RegX = In->SRegHi; break; default: - Out->RegX = UNKNOWN_REGVAL; break; } - } else { - /* X is now unknown */ - Out->RegX = UNKNOWN_REGVAL; } + DeduceZN (Out, Out->RegX); break; case OP65_LDY: + Out->RegY = UNKNOWN_REGVAL; + Out->ZNRegs = ZNREG_Y; if (CE_IsConstImm (E)) { Out->RegY = (unsigned char) E->Num; } else if (E->AM == AM65_ZP) { @@ -947,37 +1372,42 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Out->RegY = In->SRegHi; break; default: - Out->RegY = UNKNOWN_REGVAL; break; } - } else { - /* Y is now unknown */ - Out->RegY = UNKNOWN_REGVAL; } + DeduceZN (Out, Out->RegY); break; case OP65_LSR: - if (E->AM == AM65_ACC && RegValIsKnown (In->RegA)) { - Out->RegA = (In->RegA >> 1) & 0xFF; + Out->PFlags |= UNKNOWN_PFVAL_CZN; + Out->ZNRegs = ZNREG_NONE; + if (E->AM == AM65_ACC) { + Out->RegA = AnyOpLSRDeduceCZN (Out, In->RegA); + Out->ZNRegs = ZNREG_A; } else if (E->AM == AM65_ZP) { - switch (GetKnownReg (E->Chg & REG_ZP, In)) { + switch (GetKnownReg (E->Chg & REG_ZP, 0)) { case REG_TMP1: - Out->Tmp1 = (In->Tmp1 >> 1) & 0xFF; + Out->Tmp1 = AnyOpLSRDeduceCZN (Out, In->Tmp1); + Out->ZNRegs = ZNREG_TMP1; break; case REG_PTR1_LO: - Out->Ptr1Lo = (In->Ptr1Lo >> 1) & 0xFF; + Out->Ptr1Lo = AnyOpLSRDeduceCZN (Out, In->Ptr1Lo); + Out->ZNRegs = ZNREG_PTR1_LO; break; case REG_PTR1_HI: - Out->Ptr1Hi = (In->Ptr1Hi >> 1) & 0xFF; + Out->Ptr1Hi = AnyOpLSRDeduceCZN (Out, In->Ptr1Hi); + Out->ZNRegs = ZNREG_PTR1_HI; break; case REG_SREG_LO: - Out->SRegLo = (In->SRegLo >> 1) & 0xFF; + Out->SRegLo = AnyOpLSRDeduceCZN (Out, In->SRegLo); + Out->ZNRegs = ZNREG_SREG_LO; break; case REG_SREG_HI: - Out->SRegHi = (In->SRegHi >> 1) & 0xFF; + Out->SRegHi = AnyOpLSRDeduceCZN (Out, In->SRegHi); + Out->ZNRegs = ZNREG_SREG_HI; break; } - } else if (E->AM == AM65_ZPX) { + } else if (MightAffectKnownZP (E, In)) { /* Invalidates all ZP registers */ RC_InvalidateZP (Out); } @@ -987,6 +1417,8 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) break; case OP65_ORA: + Out->RegA = UNKNOWN_REGVAL; + Out->ZNRegs = ZNREG_A; if (RegValIsKnown (In->RegA)) { if (CE_IsConstImm (E)) { Out->RegA = In->RegA | (short) E->Num; @@ -1008,17 +1440,14 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Out->RegA = In->RegA | In->SRegHi; break; default: - Out->RegA = UNKNOWN_REGVAL; break; } - } else { - /* A is now unknown */ - Out->RegA = UNKNOWN_REGVAL; } } else if (CE_IsKnownImm (E, 0xFF)) { /* ORA with 0xFF does always give 0xFF */ Out->RegA = 0xFF; } + DeduceZN (Out, Out->RegA); break; case OP65_PHA: @@ -1035,93 +1464,150 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) case OP65_PLA: Out->RegA = UNKNOWN_REGVAL; + Out->PFlags |= UNKNOWN_PFVAL_ZN; + Out->ZNRegs = ZNREG_A; break; case OP65_PLP: + Out->PFlags = UNKNOWN_PFVAL_ALL; + Out->ZNRegs = ZNREG_NONE; break; case OP65_PLX: Out->RegX = UNKNOWN_REGVAL; + Out->PFlags |= UNKNOWN_PFVAL_ZN; + Out->ZNRegs = ZNREG_X; break; case OP65_PLY: Out->RegY = UNKNOWN_REGVAL; + Out->PFlags |= UNKNOWN_PFVAL_ZN; + Out->ZNRegs = ZNREG_Y; break; case OP65_ROL: - /* We don't know the value of the carry bit */ + Out->PFlags |= UNKNOWN_PFVAL_CZN; + Out->ZNRegs = ZNREG_NONE; if (E->AM == AM65_ACC) { - Out->RegA = UNKNOWN_REGVAL; + Out->RegA = AnyOpROLDeduceCZN (Out, In->PFlags, In->RegA); + Out->ZNRegs = ZNREG_A; } else if (E->AM == AM65_ZP) { - switch (GetKnownReg (E->Chg & REG_ZP, In)) { + switch (GetKnownReg (E->Chg & REG_ZP, 0)) { case REG_TMP1: - Out->Tmp1 = UNKNOWN_REGVAL; + Out->Tmp1 = AnyOpROLDeduceCZN (Out, In->PFlags, In->Tmp1); + Out->ZNRegs = ZNREG_TMP1; break; case REG_PTR1_LO: - Out->Ptr1Lo = UNKNOWN_REGVAL; + Out->Ptr1Lo = AnyOpROLDeduceCZN (Out, In->PFlags, In->Ptr1Lo); + Out->ZNRegs = ZNREG_PTR1_LO; break; case REG_PTR1_HI: - Out->Ptr1Hi = UNKNOWN_REGVAL; + Out->Ptr1Hi = AnyOpROLDeduceCZN (Out, In->PFlags, In->Ptr1Hi); + Out->ZNRegs = ZNREG_PTR1_HI; break; case REG_SREG_LO: - Out->SRegLo = UNKNOWN_REGVAL; + Out->SRegLo = AnyOpROLDeduceCZN (Out, In->PFlags, In->SRegLo); + Out->ZNRegs = ZNREG_SREG_LO; break; case REG_SREG_HI: - Out->SRegHi = UNKNOWN_REGVAL; + Out->SRegHi = AnyOpROLDeduceCZN (Out, In->PFlags, In->SRegHi); + Out->ZNRegs = ZNREG_SREG_HI; break; } - } else if (E->AM == AM65_ZPX) { + } else if (MightAffectKnownZP (E, In)) { /* Invalidates all ZP registers */ RC_InvalidateZP (Out); } break; case OP65_ROR: - /* We don't know the value of the carry bit */ + Out->PFlags |= UNKNOWN_PFVAL_CZN; + Out->ZNRegs = ZNREG_NONE; if (E->AM == AM65_ACC) { - Out->RegA = UNKNOWN_REGVAL; + Out->RegA = AnyOpRORDeduceCZN (Out, In->PFlags, In->RegA); + Out->ZNRegs = ZNREG_A; } else if (E->AM == AM65_ZP) { - switch (GetKnownReg (E->Chg & REG_ZP, In)) { + switch (GetKnownReg (E->Chg & REG_ZP, 0)) { case REG_TMP1: - Out->Tmp1 = UNKNOWN_REGVAL; + Out->Tmp1 = AnyOpRORDeduceCZN (Out, In->PFlags, In->Tmp1); + Out->ZNRegs = ZNREG_TMP1; break; case REG_PTR1_LO: - Out->Ptr1Lo = UNKNOWN_REGVAL; + Out->Ptr1Lo = AnyOpRORDeduceCZN (Out, In->PFlags, In->Ptr1Lo); + Out->ZNRegs = ZNREG_PTR1_LO; break; case REG_PTR1_HI: - Out->Ptr1Hi = UNKNOWN_REGVAL; + Out->Ptr1Hi = AnyOpRORDeduceCZN (Out, In->PFlags, In->Ptr1Hi); + Out->ZNRegs = ZNREG_PTR1_HI; break; case REG_SREG_LO: - Out->SRegLo = UNKNOWN_REGVAL; + Out->SRegLo = AnyOpRORDeduceCZN (Out, In->PFlags, In->SRegLo); + Out->ZNRegs = ZNREG_SREG_LO; break; case REG_SREG_HI: - Out->SRegHi = UNKNOWN_REGVAL; + Out->SRegHi = AnyOpRORDeduceCZN (Out, In->PFlags, In->SRegHi); + Out->ZNRegs = ZNREG_SREG_HI; break; } - } else if (E->AM == AM65_ZPX) { + } else if (MightAffectKnownZP (E, In)) { /* Invalidates all ZP registers */ RC_InvalidateZP (Out); } break; case OP65_RTI: + Out->PFlags |= UNKNOWN_PFVAL_ALL; break; case OP65_RTS: break; case OP65_SBC: - /* We don't know the value of the carry bit */ Out->RegA = UNKNOWN_REGVAL; + Out->PFlags |= UNKNOWN_PFVAL_CZVN; + Out->ZNRegs = ZNREG_A; + if (PStatesAreKnown (In->PFlags, PSTATE_C) && + RegValIsKnown (In->RegA)) { + if (CE_IsConstImm (E)) { + Out->RegA = KnownOpSBCDeduceCZVN (Out, In, (short) E->Num); + } + else if (E->AM == AM65_ZP) { + switch (GetKnownReg(E->Use & REG_ZP, In)) { + case REG_TMP1: + Out->RegA = KnownOpSBCDeduceCZVN (Out, In, In->Tmp1); + break; + case REG_PTR1_LO: + Out->RegA = KnownOpSBCDeduceCZVN (Out, In, In->Ptr1Lo); + break; + case REG_PTR1_HI: + Out->RegA = KnownOpSBCDeduceCZVN (Out, In, In->Ptr1Hi); + break; + case REG_SREG_LO: + Out->RegA = KnownOpSBCDeduceCZVN (Out, In, In->SRegLo); + break; + case REG_SREG_HI: + Out->RegA = KnownOpSBCDeduceCZVN (Out, In, In->SRegHi); + break; + default: + break; + } + } + } break; case OP65_SEC: + Out->PFlags &= ~UNKNOWN_PFVAL_C; + Out->PFlags |= PFVAL_C; break; case OP65_SED: + Out->PFlags &= ~UNKNOWN_PFVAL_D; + Out->PFlags |= PFVAL_D; break; case OP65_SEI: + Out->PFlags &= ~UNKNOWN_PFVAL_I; + Out->PFlags |= PFVAL_I; break; case OP65_STA: @@ -1143,7 +1629,7 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Out->SRegHi = In->RegA; break; } - } else if (E->AM == AM65_ZPX) { + } else if (MightAffectKnownZP (E, In)) { /* Invalidates all ZP registers */ RC_InvalidateZP (Out); } @@ -1171,7 +1657,7 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Out->SRegHi = In->RegX; break; } - } else if (E->AM == AM65_ZPX) { + } else if (MightAffectKnownZP (E, In)) { /* Invalidates all ZP registers */ RC_InvalidateZP (Out); } @@ -1196,7 +1682,7 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Out->SRegHi = In->RegY; break; } - } else if (E->AM == AM65_ZPX) { + } else if (MightAffectKnownZP (E, In)) { /* Invalidates all ZP registers */ RC_InvalidateZP (Out); } @@ -1221,7 +1707,7 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Out->SRegHi = 0; break; } - } else if (E->AM == AM65_ZPX) { + } else if (MightAffectKnownZP (E, In)) { /* Invalidates all ZP registers */ RC_InvalidateZP (Out); } @@ -1229,37 +1715,44 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) case OP65_TAX: Out->RegX = In->RegA; + Out->ZNRegs = ZNREG_AX; + DeduceZN (Out, Out->RegX); break; case OP65_TAY: Out->RegY = In->RegA; + Out->ZNRegs = ZNREG_AY; + DeduceZN (Out, Out->RegY); break; case OP65_TRB: - if (E->AM == AM65_ZPX) { - /* Invalidates all ZP registers */ - RC_InvalidateZP (Out); - } else if (E->AM == AM65_ZP) { + Out->ZNRegs = ZNREG_NONE; + if (E->AM == AM65_ZP) { if (RegValIsKnown (In->RegA)) { switch (GetKnownReg (E->Chg & REG_ZP, In)) { case REG_TMP1: + Val = Out->Tmp1 & In->RegA; Out->Tmp1 &= ~In->RegA; break; case REG_PTR1_LO: + Val = Out->Ptr1Lo & In->RegA; Out->Ptr1Lo &= ~In->RegA; break; case REG_PTR1_HI: + Val = Out->Ptr1Hi & In->RegA; Out->Ptr1Hi &= ~In->RegA; break; case REG_SREG_LO: + Val = Out->SRegLo & In->RegA; Out->SRegLo &= ~In->RegA; break; case REG_SREG_HI: + Val = Out->SRegHi & In->RegA; Out->SRegHi &= ~In->RegA; break; } } else { - switch (GetKnownReg (E->Chg & REG_ZP, In)) { + switch (GetKnownReg (E->Chg & REG_ZP, 0)) { case REG_TMP1: Out->Tmp1 = UNKNOWN_REGVAL; break; @@ -1277,34 +1770,41 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) break; } } + } else if (MightAffectKnownZP (E, In)) { + /* Invalidates all ZP registers */ + RC_InvalidateZP (Out); } + DeduceZ (Out, Val); break; case OP65_TSB: - if (E->AM == AM65_ZPX) { - /* Invalidates all ZP registers */ - RC_InvalidateZP (Out); - } else if (E->AM == AM65_ZP) { + Out->ZNRegs = ZNREG_NONE; + if (E->AM == AM65_ZP) { if (RegValIsKnown (In->RegA)) { switch (GetKnownReg (E->Chg & REG_ZP, In)) { case REG_TMP1: + Val = Out->Tmp1 & In->RegA; Out->Tmp1 |= In->RegA; break; case REG_PTR1_LO: + Val = Out->Ptr1Lo & In->RegA; Out->Ptr1Lo |= In->RegA; break; case REG_PTR1_HI: + Val = Out->Ptr1Hi & In->RegA; Out->Ptr1Hi |= In->RegA; break; case REG_SREG_LO: + Val = Out->SRegLo & In->RegA; Out->SRegLo |= In->RegA; break; case REG_SREG_HI: + Val = Out->SRegHi & In->RegA; Out->SRegHi |= In->RegA; break; } } else { - switch (GetKnownReg (E->Chg & REG_ZP, In)) { + switch (GetKnownReg (E->Chg & REG_ZP, 0)) { case REG_TMP1: Out->Tmp1 = UNKNOWN_REGVAL; break; @@ -1322,22 +1822,34 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) break; } } + } else if (MightAffectKnownZP (E, In)) { + /* Invalidates all ZP registers */ + RC_InvalidateZP (Out); } + DeduceZ (Out, Val); break; case OP65_TSX: Out->RegX = UNKNOWN_REGVAL; + Out->PFlags |= UNKNOWN_PFVAL_ZN; + Out->ZNRegs = ZNREG_X; break; case OP65_TXA: Out->RegA = In->RegX; + Out->ZNRegs = ZNREG_AX; + DeduceZN (Out, Out->RegA); break; case OP65_TXS: + Out->ZNRegs = ZNREG_X; + DeduceZN (Out, In->RegX); break; case OP65_TYA: Out->RegA = In->RegY; + Out->ZNRegs = ZNREG_AY; + DeduceZN (Out, Out->RegA); break; default: diff --git a/src/cc65/codeent.h b/src/cc65/codeent.h index 96373a8f9..3d07670d7 100644 --- a/src/cc65/codeent.h +++ b/src/cc65/codeent.h @@ -73,8 +73,8 @@ struct CodeEntry { char* Arg; /* Argument as string */ unsigned long Num; /* Numeric argument */ unsigned short Info; /* Additional code info */ - unsigned short Use; /* Registers used */ - unsigned short Chg; /* Registers changed/destroyed */ + unsigned int Use; /* Registers used */ + unsigned int Chg; /* Registers changed/destroyed */ CodeLabel* JumpTo; /* Jump label */ Collection Labels; /* Labels for this instruction */ LineInfo* LI; /* Source line info for this insn */ diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index f51189293..892f4cd5f 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -77,8 +77,8 @@ static const char BoolTransformerTab [][8] = { typedef struct FuncInfo FuncInfo; struct FuncInfo { const char* Name; /* Function name */ - unsigned short Use; /* Register usage */ - unsigned short Chg; /* Changed/destroyed registers */ + unsigned Use; /* Register usage */ + unsigned Chg; /* Changed/destroyed registers */ }; /* Note for the shift functions: Shifts are done modulo 32, so all shift @@ -86,264 +86,264 @@ struct FuncInfo { ** anyway. */ static const FuncInfo FuncInfoTable[] = { - { "addeq0sp", REG_AX, REG_AXY }, - { "addeqysp", REG_AXY, REG_AXY }, - { "addysp", REG_Y, REG_NONE }, - { "aslax1", REG_AX, REG_AX | REG_TMP1 }, - { "aslax2", REG_AX, REG_AX | REG_TMP1 }, - { "aslax3", REG_AX, REG_AX | REG_TMP1 }, - { "aslax4", REG_AX, REG_AX | REG_TMP1 }, - { "aslaxy", REG_AXY, REG_AXY | REG_TMP1 }, - { "asleax1", REG_EAX, REG_EAX | REG_TMP1 }, - { "asleax2", REG_EAX, REG_EAX | REG_TMP1 }, - { "asleax3", REG_EAX, REG_EAX | REG_TMP1 }, - { "asleax4", REG_EAX, REG_EAXY | REG_TMP1 }, - { "asrax1", REG_AX, REG_AX | REG_TMP1 }, - { "asrax2", REG_AX, REG_AX | REG_TMP1 }, - { "asrax3", REG_AX, REG_AX | REG_TMP1 }, - { "asrax4", REG_AX, REG_AX | REG_TMP1 }, - { "asraxy", REG_AXY, REG_AXY | REG_TMP1 }, - { "asreax1", REG_EAX, REG_EAX | REG_TMP1 }, - { "asreax2", REG_EAX, REG_EAX | REG_TMP1 }, - { "asreax3", REG_EAX, REG_EAX | REG_TMP1 }, - { "asreax4", REG_EAX, REG_EAXY | REG_TMP1 }, - { "bcasta", REG_A, REG_AX }, - { "bcastax", REG_AX, REG_AX }, - { "bcasteax", REG_EAX, REG_EAX | REG_TMP1 }, - { "bnega", REG_A, REG_AX }, - { "bnegax", REG_AX, REG_AX }, - { "bnegeax", REG_EAX, REG_EAX | REG_TMP1 }, - { "booleq", REG_NONE, REG_AX }, - { "boolge", REG_NONE, REG_AX }, - { "boolgt", REG_NONE, REG_AX }, - { "boolle", REG_NONE, REG_AX }, - { "boollt", REG_NONE, REG_AX }, - { "boolne", REG_NONE, REG_AX }, - { "booluge", REG_NONE, REG_AX }, - { "boolugt", REG_NONE, REG_AX }, - { "boolule", REG_NONE, REG_AX }, - { "boolult", REG_NONE, REG_AX }, - { "callax", REG_AX, REG_ALL }, - { "complax", REG_AX, REG_AX }, - { "decax1", REG_AX, REG_AX }, - { "decax2", REG_AX, REG_AX }, - { "decax3", REG_AX, REG_AX }, - { "decax4", REG_AX, REG_AX }, - { "decax5", REG_AX, REG_AX }, - { "decax6", REG_AX, REG_AX }, - { "decax7", REG_AX, REG_AX }, - { "decax8", REG_AX, REG_AX }, - { "decaxy", REG_AXY, REG_AX | REG_TMP1 }, - { "deceaxy", REG_EAXY, REG_EAX }, - { "decsp1", REG_NONE, REG_Y }, - { "decsp2", REG_NONE, REG_A }, - { "decsp3", REG_NONE, REG_A }, - { "decsp4", REG_NONE, REG_A }, - { "decsp5", REG_NONE, REG_A }, - { "decsp6", REG_NONE, REG_A }, - { "decsp7", REG_NONE, REG_A }, - { "decsp8", REG_NONE, REG_A }, - { "incax1", REG_AX, REG_AX }, - { "incax2", REG_AX, REG_AX }, - { "incax3", REG_AX, REG_AXY | REG_TMP1 }, - { "incax4", REG_AX, REG_AXY | REG_TMP1 }, - { "incax5", REG_AX, REG_AXY | REG_TMP1 }, - { "incax6", REG_AX, REG_AXY | REG_TMP1 }, - { "incax7", REG_AX, REG_AXY | REG_TMP1 }, - { "incax8", REG_AX, REG_AXY | REG_TMP1 }, - { "incaxy", REG_AXY, REG_AXY | REG_TMP1 }, - { "incsp1", REG_NONE, REG_NONE }, - { "incsp2", REG_NONE, REG_Y }, - { "incsp3", REG_NONE, REG_Y }, - { "incsp4", REG_NONE, REG_Y }, - { "incsp5", REG_NONE, REG_Y }, - { "incsp6", REG_NONE, REG_Y }, - { "incsp7", REG_NONE, REG_Y }, - { "incsp8", REG_NONE, REG_Y }, - { "laddeq", REG_EAXY|REG_PTR1_LO, REG_EAXY | REG_PTR1_HI }, - { "laddeq0sp", REG_EAX, REG_EAXY }, - { "laddeq1", REG_Y | REG_PTR1_LO, REG_EAXY | REG_PTR1_HI }, - { "laddeqa", REG_AY | REG_PTR1_LO, REG_EAXY | REG_PTR1_HI }, - { "laddeqysp", REG_EAXY, REG_EAXY }, - { "ldaidx", REG_AXY, REG_AX | REG_PTR1 }, - { "ldauidx", REG_AXY, REG_AX | REG_PTR1 }, - { "ldax0sp", REG_NONE, REG_AXY }, - { "ldaxi", REG_AX, REG_AXY | REG_PTR1 }, - { "ldaxidx", REG_AXY, REG_AXY | REG_PTR1 }, - { "ldaxysp", REG_Y, REG_AXY }, - { "ldeax0sp", REG_NONE, REG_EAXY }, - { "ldeaxi", REG_AX, REG_EAXY | REG_PTR1 }, - { "ldeaxidx", REG_AXY, REG_EAXY | REG_PTR1 }, - { "ldeaxysp", REG_Y, REG_EAXY }, - { "leaa0sp", REG_A, REG_AX }, - { "leaaxsp", REG_AX, REG_AX }, - { "lsubeq", REG_EAXY|REG_PTR1_LO, REG_EAXY | REG_PTR1_HI }, - { "lsubeq0sp", REG_EAX, REG_EAXY }, - { "lsubeq1", REG_Y | REG_PTR1_LO, REG_EAXY | REG_PTR1_HI }, - { "lsubeqa", REG_AY | REG_PTR1_LO, REG_EAXY | REG_PTR1_HI }, - { "lsubeqysp", REG_EAXY, REG_EAXY }, - { "mulax10", REG_AX, REG_AX | REG_PTR1 }, - { "mulax3", REG_AX, REG_AX | REG_PTR1 }, - { "mulax5", REG_AX, REG_AX | REG_PTR1 }, - { "mulax6", REG_AX, REG_AX | REG_PTR1 }, - { "mulax7", REG_AX, REG_AX | REG_PTR1 }, - { "mulax9", REG_AX, REG_AX | REG_PTR1 }, - { "negax", REG_AX, REG_AX }, - { "push0", REG_NONE, REG_AXY }, - { "push0ax", REG_AX, REG_Y | REG_SREG }, - { "push1", REG_NONE, REG_AXY }, - { "push2", REG_NONE, REG_AXY }, - { "push3", REG_NONE, REG_AXY }, - { "push4", REG_NONE, REG_AXY }, - { "push5", REG_NONE, REG_AXY }, - { "push6", REG_NONE, REG_AXY }, - { "push7", REG_NONE, REG_AXY }, - { "pusha", REG_A, REG_Y }, - { "pusha0", REG_A, REG_XY }, - { "pusha0sp", REG_NONE, REG_AY }, - { "pushaFF", REG_A, REG_Y }, - { "pushax", REG_AX, REG_Y }, - { "pushaysp", REG_Y, REG_AY }, - { "pushc0", REG_NONE, REG_A | REG_Y }, - { "pushc1", REG_NONE, REG_A | REG_Y }, - { "pushc2", REG_NONE, REG_A | REG_Y }, - { "pusheax", REG_EAX, REG_Y }, - { "pushl0", REG_NONE, REG_AXY }, - { "pushw", REG_AX, REG_AXY | REG_PTR1 }, - { "pushw0sp", REG_NONE, REG_AXY }, - { "pushwidx", REG_AXY, REG_AXY | REG_PTR1 }, - { "pushwysp", REG_Y, REG_AXY }, - { "regswap", REG_AXY, REG_AXY | REG_TMP1 }, - { "regswap1", REG_XY, REG_A }, - { "regswap2", REG_XY, REG_A | REG_Y }, - { "return0", REG_NONE, REG_AX }, - { "return1", REG_NONE, REG_AX }, - { "shlax1", REG_AX, REG_AX | REG_TMP1 }, - { "shlax2", REG_AX, REG_AX | REG_TMP1 }, - { "shlax3", REG_AX, REG_AX | REG_TMP1 }, - { "shlax4", REG_AX, REG_AX | REG_TMP1 }, - { "shlaxy", REG_AXY, REG_AXY | REG_TMP1 }, - { "shleax1", REG_EAX, REG_EAX | REG_TMP1 }, - { "shleax2", REG_EAX, REG_EAX | REG_TMP1 }, - { "shleax3", REG_EAX, REG_EAX | REG_TMP1 }, - { "shleax4", REG_EAX, REG_EAXY | REG_TMP1 }, - { "shrax1", REG_AX, REG_AX | REG_TMP1 }, - { "shrax2", REG_AX, REG_AX | REG_TMP1 }, - { "shrax3", REG_AX, REG_AX | REG_TMP1 }, - { "shrax4", REG_AX, REG_AX | REG_TMP1 }, - { "shraxy", REG_AXY, REG_AXY | REG_TMP1 }, - { "shreax1", REG_EAX, REG_EAX | REG_TMP1 }, - { "shreax2", REG_EAX, REG_EAX | REG_TMP1 }, - { "shreax3", REG_EAX, REG_EAX | REG_TMP1 }, - { "shreax4", REG_EAX, REG_EAXY | REG_TMP1 }, - { "staspidx", REG_A | REG_Y, REG_Y | REG_TMP1 | REG_PTR1 }, - { "stax0sp", REG_AX, REG_Y }, - { "staxspidx", REG_AXY, REG_TMP1 | REG_PTR1 }, - { "staxysp", REG_AXY, REG_Y }, - { "steax0sp", REG_EAX, REG_Y }, - { "steaxysp", REG_EAXY, REG_Y }, - { "subeq0sp", REG_AX, REG_AXY }, - { "subeqysp", REG_AXY, REG_AXY }, - { "subysp", REG_Y, REG_AY }, - { "tosadd0ax", REG_AX, REG_EAXY | REG_TMP1 }, - { "tosadda0", REG_A, REG_AXY }, - { "tosaddax", REG_AX, REG_AXY }, - { "tosaddeax", REG_EAX, REG_EAXY | REG_TMP1 }, - { "tosand0ax", REG_AX, REG_EAXY | REG_TMP1 }, - { "tosanda0", REG_A, REG_AXY }, - { "tosandax", REG_AX, REG_AXY }, - { "tosandeax", REG_EAX, REG_EAXY | REG_TMP1 }, - { "tosaslax", REG_A, REG_AXY | REG_TMP1 }, - { "tosasleax", REG_A, REG_EAXY | REG_TMP1 }, - { "tosasrax", REG_A, REG_AXY | REG_TMP1 }, - { "tosasreax", REG_A, REG_EAXY | REG_TMP1 }, - { "tosdiv0ax", REG_AX, REG_ALL }, - { "tosdiva0", REG_A, REG_ALL }, - { "tosdivax", REG_AX, REG_ALL }, - { "tosdiveax", REG_EAX, REG_ALL }, - { "toseq00", REG_NONE, REG_AXY | REG_SREG }, - { "toseqa0", REG_A, REG_AXY | REG_SREG }, - { "toseqax", REG_AX, REG_AXY | REG_SREG }, - { "toseqeax", REG_EAX, REG_AXY | REG_PTR1 }, - { "tosge00", REG_NONE, REG_AXY | REG_SREG }, - { "tosgea0", REG_A, REG_AXY | REG_SREG }, - { "tosgeax", REG_AX, REG_AXY | REG_SREG }, - { "tosgeeax", REG_EAX, REG_AXY | REG_PTR1 }, - { "tosgt00", REG_NONE, REG_AXY | REG_SREG }, - { "tosgta0", REG_A, REG_AXY | REG_SREG }, - { "tosgtax", REG_AX, REG_AXY | REG_SREG }, - { "tosgteax", REG_EAX, REG_AXY | REG_PTR1 }, - { "tosicmp", REG_AX, REG_AXY | REG_SREG }, - { "tosicmp0", REG_A, REG_AXY | REG_SREG }, - { "toslcmp", REG_EAX, REG_A | REG_Y | REG_PTR1 }, - { "tosle00", REG_NONE, REG_AXY | REG_SREG }, - { "toslea0", REG_A, REG_AXY | REG_SREG }, - { "tosleax", REG_AX, REG_AXY | REG_SREG }, - { "tosleeax", REG_EAX, REG_AXY | REG_PTR1 }, - { "toslt00", REG_NONE, REG_AXY | REG_SREG }, - { "toslta0", REG_A, REG_AXY | REG_SREG }, - { "tosltax", REG_AX, REG_AXY | REG_SREG }, - { "toslteax", REG_EAX, REG_AXY | REG_PTR1 }, - { "tosmod0ax", REG_AX, REG_ALL }, - { "tosmodeax", REG_EAX, REG_ALL }, - { "tosmul0ax", REG_AX, REG_ALL }, - { "tosmula0", REG_A, REG_ALL }, - { "tosmulax", REG_AX, REG_ALL }, - { "tosmuleax", REG_EAX, REG_ALL }, - { "tosne00", REG_NONE, REG_AXY | REG_SREG }, - { "tosnea0", REG_A, REG_AXY | REG_SREG }, - { "tosneax", REG_AX, REG_AXY | REG_SREG }, - { "tosneeax", REG_EAX, REG_AXY | REG_PTR1 }, - { "tosor0ax", REG_AX, REG_EAXY | REG_TMP1 }, - { "tosora0", REG_A, REG_AXY | REG_TMP1 }, - { "tosorax", REG_AX, REG_AXY | REG_TMP1 }, - { "tosoreax", REG_EAX, REG_EAXY | REG_TMP1 }, - { "tosrsub0ax", REG_AX, REG_EAXY | REG_TMP1 }, - { "tosrsuba0", REG_A, REG_AXY | REG_TMP1 }, - { "tosrsubax", REG_AX, REG_AXY | REG_TMP1 }, - { "tosrsubeax", REG_EAX, REG_EAXY | REG_TMP1 }, - { "tosshlax", REG_A, REG_AXY | REG_TMP1 }, - { "tosshleax", REG_A, REG_EAXY | REG_TMP1 }, - { "tosshrax", REG_A, REG_AXY | REG_TMP1 }, - { "tosshreax", REG_A, REG_EAXY | REG_TMP1 }, - { "tossub0ax", REG_AX, REG_EAXY }, - { "tossuba0", REG_A, REG_AXY }, - { "tossubax", REG_AX, REG_AXY }, - { "tossubeax", REG_EAX, REG_EAXY }, - { "tosudiv0ax", REG_AX, REG_ALL & ~REG_SAVE }, - { "tosudiva0", REG_A, REG_EAXY | REG_PTR1 }, /* also ptr4 */ - { "tosudivax", REG_AX, REG_EAXY | REG_PTR1 }, /* also ptr4 */ - { "tosudiveax", REG_EAX, REG_ALL & ~REG_SAVE }, - { "tosuge00", REG_NONE, REG_AXY | REG_SREG }, - { "tosugea0", REG_A, REG_AXY | REG_SREG }, - { "tosugeax", REG_AX, REG_AXY | REG_SREG }, - { "tosugeeax", REG_EAX, REG_AXY | REG_PTR1 }, - { "tosugt00", REG_NONE, REG_AXY | REG_SREG }, - { "tosugta0", REG_A, REG_AXY | REG_SREG }, - { "tosugtax", REG_AX, REG_AXY | REG_SREG }, - { "tosugteax", REG_EAX, REG_AXY | REG_PTR1 }, - { "tosule00", REG_NONE, REG_AXY | REG_SREG }, - { "tosulea0", REG_A, REG_AXY | REG_SREG }, - { "tosuleax", REG_AX, REG_AXY | REG_SREG }, - { "tosuleeax", REG_EAX, REG_AXY | REG_PTR1 }, - { "tosult00", REG_NONE, REG_AXY | REG_SREG }, - { "tosulta0", REG_A, REG_AXY | REG_SREG }, - { "tosultax", REG_AX, REG_AXY | REG_SREG }, - { "tosulteax", REG_EAX, REG_AXY | REG_PTR1 }, - { "tosumod0ax", REG_AX, REG_ALL & ~REG_SAVE }, - { "tosumoda0", REG_A, REG_EAXY | REG_PTR1 }, /* also ptr4 */ - { "tosumodax", REG_AX, REG_EAXY | REG_PTR1 }, /* also ptr4 */ - { "tosumodeax", REG_EAX, REG_ALL & ~REG_SAVE }, - { "tosumul0ax", REG_AX, REG_ALL }, - { "tosumula0", REG_A, REG_ALL }, - { "tosumulax", REG_AX, REG_ALL }, - { "tosumuleax", REG_EAX, REG_ALL }, - { "tosxor0ax", REG_AX, REG_EAXY | REG_TMP1 }, - { "tosxora0", REG_A, REG_AXY | REG_TMP1 }, - { "tosxorax", REG_AX, REG_AXY | REG_TMP1 }, - { "tosxoreax", REG_EAX, REG_EAXY | REG_TMP1 }, - { "tsteax", REG_EAX, REG_Y }, - { "utsteax", REG_EAX, REG_Y }, + { "addeq0sp", REG_AX, PSTATE_ALL | REG_AXY }, + { "addeqysp", REG_AXY, PSTATE_ALL | REG_AXY }, + { "addysp", REG_Y, PSTATE_ALL | REG_NONE }, + { "aslax1", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "aslax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "aslax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "aslax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "aslaxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "asleax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "asleax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "asleax3", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "asleax4", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "asrax1", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "asrax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "asrax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "asrax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "asraxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "asreax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "asreax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "asreax3", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "asreax4", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "bcasta", REG_A, PSTATE_ALL | REG_AX }, + { "bcastax", REG_AX, PSTATE_ALL | REG_AX }, + { "bcasteax", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "bnega", REG_A, PSTATE_ALL | REG_AX }, + { "bnegax", REG_AX, PSTATE_ALL | REG_AX }, + { "bnegeax", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "booleq", PSTATE_Z, PSTATE_ALL | REG_AX }, + { "boolge", PSTATE_N, PSTATE_ALL | REG_AX }, + { "boolgt", PSTATE_ZN, PSTATE_ALL | REG_AX }, + { "boolle", PSTATE_ZN, PSTATE_ALL | REG_AX }, + { "boollt", PSTATE_N, PSTATE_ALL | REG_AX }, + { "boolne", PSTATE_Z, PSTATE_ALL | REG_AX }, + { "booluge", PSTATE_C, PSTATE_ALL | REG_AX }, + { "boolugt", PSTATE_CZ, PSTATE_ALL | REG_AX }, + { "boolule", PSTATE_CZ, PSTATE_ALL | REG_AX }, + { "boolult", PSTATE_C, PSTATE_ALL | REG_AX }, + { "callax", REG_AX, PSTATE_ALL | REG_ALL }, + { "complax", REG_AX, PSTATE_ALL | REG_AX }, + { "decax1", REG_AX, PSTATE_ALL | REG_AX }, + { "decax2", REG_AX, PSTATE_ALL | REG_AX }, + { "decax3", REG_AX, PSTATE_ALL | REG_AX }, + { "decax4", REG_AX, PSTATE_ALL | REG_AX }, + { "decax5", REG_AX, PSTATE_ALL | REG_AX }, + { "decax6", REG_AX, PSTATE_ALL | REG_AX }, + { "decax7", REG_AX, PSTATE_ALL | REG_AX }, + { "decax8", REG_AX, PSTATE_ALL | REG_AX }, + { "decaxy", REG_AXY, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "deceaxy", REG_EAXY, PSTATE_ALL | REG_EAX }, + { "decsp1", REG_NONE, PSTATE_ALL | REG_Y }, + { "decsp2", REG_NONE, PSTATE_ALL | REG_A }, + { "decsp3", REG_NONE, PSTATE_ALL | REG_A }, + { "decsp4", REG_NONE, PSTATE_ALL | REG_A }, + { "decsp5", REG_NONE, PSTATE_ALL | REG_A }, + { "decsp6", REG_NONE, PSTATE_ALL | REG_A }, + { "decsp7", REG_NONE, PSTATE_ALL | REG_A }, + { "decsp8", REG_NONE, PSTATE_ALL | REG_A }, + { "incax1", REG_AX, PSTATE_ALL | REG_AX }, + { "incax2", REG_AX, PSTATE_ALL | REG_AX }, + { "incax3", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "incax4", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "incax5", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "incax6", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "incax7", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "incax8", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "incaxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "incsp1", REG_NONE, PSTATE_ALL | REG_NONE }, + { "incsp2", REG_NONE, PSTATE_ALL | REG_Y }, + { "incsp3", REG_NONE, PSTATE_ALL | REG_Y }, + { "incsp4", REG_NONE, PSTATE_ALL | REG_Y }, + { "incsp5", REG_NONE, PSTATE_ALL | REG_Y }, + { "incsp6", REG_NONE, PSTATE_ALL | REG_Y }, + { "incsp7", REG_NONE, PSTATE_ALL | REG_Y }, + { "incsp8", REG_NONE, PSTATE_ALL | REG_Y }, + { "laddeq", REG_EAXY|REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, + { "laddeq0sp", REG_EAX, PSTATE_ALL | REG_EAXY }, + { "laddeq1", REG_Y | REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, + { "laddeqa", REG_AY | REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, + { "laddeqysp", REG_EAXY, PSTATE_ALL | REG_EAXY }, + { "ldaidx", REG_AXY, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "ldauidx", REG_AXY, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "ldax0sp", REG_NONE, PSTATE_ALL | REG_AXY }, + { "ldaxi", REG_AX, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "ldaxidx", REG_AXY, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "ldaxysp", REG_Y, PSTATE_ALL | REG_AXY }, + { "ldeax0sp", REG_NONE, PSTATE_ALL | REG_EAXY }, + { "ldeaxi", REG_AX, PSTATE_ALL | REG_EAXY | REG_PTR1 }, + { "ldeaxidx", REG_AXY, PSTATE_ALL | REG_EAXY | REG_PTR1 }, + { "ldeaxysp", REG_Y, PSTATE_ALL | REG_EAXY }, + { "leaa0sp", REG_A, PSTATE_ALL | REG_AX }, + { "leaaxsp", REG_AX, PSTATE_ALL | REG_AX }, + { "lsubeq", REG_EAXY|REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, + { "lsubeq0sp", REG_EAX, PSTATE_ALL | REG_EAXY }, + { "lsubeq1", REG_Y | REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, + { "lsubeqa", REG_AY | REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, + { "lsubeqysp", REG_EAXY, PSTATE_ALL | REG_EAXY }, + { "mulax10", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "mulax3", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "mulax5", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "mulax6", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "mulax7", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "mulax9", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "negax", REG_AX, PSTATE_ALL | REG_AX }, + { "push0", REG_NONE, PSTATE_ALL | REG_AXY }, + { "push0ax", REG_AX, PSTATE_ALL | REG_Y | REG_SREG }, + { "push1", REG_NONE, PSTATE_ALL | REG_AXY }, + { "push2", REG_NONE, PSTATE_ALL | REG_AXY }, + { "push3", REG_NONE, PSTATE_ALL | REG_AXY }, + { "push4", REG_NONE, PSTATE_ALL | REG_AXY }, + { "push5", REG_NONE, PSTATE_ALL | REG_AXY }, + { "push6", REG_NONE, PSTATE_ALL | REG_AXY }, + { "push7", REG_NONE, PSTATE_ALL | REG_AXY }, + { "pusha", REG_A, PSTATE_ALL | REG_Y }, + { "pusha0", REG_A, PSTATE_ALL | REG_XY }, + { "pusha0sp", REG_NONE, PSTATE_ALL | REG_AY }, + { "pushaFF", REG_A, PSTATE_ALL | REG_Y }, + { "pushax", REG_AX, PSTATE_ALL | REG_Y }, + { "pushaysp", REG_Y, PSTATE_ALL | REG_AY }, + { "pushc0", REG_NONE, PSTATE_ALL | REG_A | REG_Y }, + { "pushc1", REG_NONE, PSTATE_ALL | REG_A | REG_Y }, + { "pushc2", REG_NONE, PSTATE_ALL | REG_A | REG_Y }, + { "pusheax", REG_EAX, PSTATE_ALL | REG_Y }, + { "pushl0", REG_NONE, PSTATE_ALL | REG_AXY }, + { "pushw", REG_AX, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "pushw0sp", REG_NONE, PSTATE_ALL | REG_AXY }, + { "pushwidx", REG_AXY, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "pushwysp", REG_Y, PSTATE_ALL | REG_AXY }, + { "regswap", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "regswap1", REG_XY, PSTATE_ALL | REG_A }, + { "regswap2", REG_XY, PSTATE_ALL | REG_A | REG_Y }, + { "return0", REG_NONE, PSTATE_ALL | REG_AX }, + { "return1", REG_NONE, PSTATE_ALL | REG_AX }, + { "shlax1", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shlax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shlax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shlax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shlaxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "shleax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "shleax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "shleax3", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "shleax4", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "shrax1", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shrax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shrax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shrax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shraxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "shreax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "shreax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "shreax3", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "shreax4", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "staspidx", REG_A | REG_Y, PSTATE_ALL | REG_Y | REG_TMP1 | REG_PTR1 }, + { "stax0sp", REG_AX, PSTATE_ALL | REG_Y }, + { "staxspidx", REG_AXY, PSTATE_ALL | REG_TMP1 | REG_PTR1 }, + { "staxysp", REG_AXY, PSTATE_ALL | REG_Y }, + { "steax0sp", REG_EAX, PSTATE_ALL | REG_Y }, + { "steaxysp", REG_EAXY, PSTATE_ALL | REG_Y }, + { "subeq0sp", REG_AX, PSTATE_ALL | REG_AXY }, + { "subeqysp", REG_AXY, PSTATE_ALL | REG_AXY }, + { "subysp", REG_Y, PSTATE_ALL | REG_AY }, + { "tosadd0ax", REG_AX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "tosadda0", REG_A, PSTATE_ALL | REG_AXY }, + { "tosaddax", REG_AX, PSTATE_ALL | REG_AXY }, + { "tosaddeax", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "tosand0ax", REG_AX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "tosanda0", REG_A, PSTATE_ALL | REG_AXY }, + { "tosandax", REG_AX, PSTATE_ALL | REG_AXY }, + { "tosandeax", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "tosaslax", REG_A, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "tosasleax", REG_A, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "tosasrax", REG_A, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "tosasreax", REG_A, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "tosdiv0ax", REG_AX, PSTATE_ALL | REG_ALL }, + { "tosdiva0", REG_A, PSTATE_ALL | REG_ALL }, + { "tosdivax", REG_AX, PSTATE_ALL | REG_ALL }, + { "tosdiveax", REG_EAX, PSTATE_ALL | REG_ALL }, + { "toseq00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, + { "toseqa0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, + { "toseqax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, + { "toseqeax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "tosge00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosgea0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosgeax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosgeeax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "tosgt00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosgta0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosgtax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosgteax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "tosicmp", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosicmp0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, + { "toslcmp", REG_EAX, PSTATE_ALL | REG_A | REG_Y | REG_PTR1 }, + { "tosle00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, + { "toslea0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosleax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosleeax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "toslt00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, + { "toslta0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosltax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, + { "toslteax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "tosmod0ax", REG_AX, PSTATE_ALL | REG_ALL }, + { "tosmodeax", REG_EAX, PSTATE_ALL | REG_ALL }, + { "tosmul0ax", REG_AX, PSTATE_ALL | REG_ALL }, + { "tosmula0", REG_A, PSTATE_ALL | REG_ALL }, + { "tosmulax", REG_AX, PSTATE_ALL | REG_ALL }, + { "tosmuleax", REG_EAX, PSTATE_ALL | REG_ALL }, + { "tosne00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosnea0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosneax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosneeax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "tosor0ax", REG_AX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "tosora0", REG_A, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "tosorax", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "tosoreax", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "tosrsub0ax", REG_AX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "tosrsuba0", REG_A, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "tosrsubax", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "tosrsubeax", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "tosshlax", REG_A, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "tosshleax", REG_A, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "tosshrax", REG_A, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "tosshreax", REG_A, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "tossub0ax", REG_AX, PSTATE_ALL | REG_EAXY }, + { "tossuba0", REG_A, PSTATE_ALL | REG_AXY }, + { "tossubax", REG_AX, PSTATE_ALL | REG_AXY }, + { "tossubeax", REG_EAX, PSTATE_ALL | REG_EAXY }, + { "tosudiv0ax", REG_AX, PSTATE_ALL | (REG_ALL & ~REG_SAVE) }, + { "tosudiva0", REG_A, PSTATE_ALL | REG_EAXY | REG_PTR1 }, /* also ptr4 */ + { "tosudivax", REG_AX, PSTATE_ALL | REG_EAXY | REG_PTR1 }, /* also ptr4 */ + { "tosudiveax", REG_EAX, PSTATE_ALL | (REG_ALL & ~REG_SAVE) }, + { "tosuge00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosugea0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosugeax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosugeeax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "tosugt00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosugta0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosugtax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosugteax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "tosule00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosulea0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosuleax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosuleeax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "tosult00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosulta0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosultax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, + { "tosulteax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "tosumod0ax", REG_AX, PSTATE_ALL | (REG_ALL & ~REG_SAVE) }, + { "tosumoda0", REG_A, PSTATE_ALL | REG_EAXY | REG_PTR1 }, /* also ptr4 */ + { "tosumodax", REG_AX, PSTATE_ALL | REG_EAXY | REG_PTR1 }, /* also ptr4 */ + { "tosumodeax", REG_EAX, PSTATE_ALL | (REG_ALL & ~REG_SAVE) }, + { "tosumul0ax", REG_AX, PSTATE_ALL | REG_ALL }, + { "tosumula0", REG_A, PSTATE_ALL | REG_ALL }, + { "tosumulax", REG_AX, PSTATE_ALL | REG_ALL }, + { "tosumuleax", REG_EAX, PSTATE_ALL | REG_ALL }, + { "tosxor0ax", REG_AX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "tosxora0", REG_A, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "tosxorax", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "tosxoreax", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "tsteax", REG_EAX, PSTATE_ALL | REG_Y }, + { "utsteax", REG_EAX, PSTATE_ALL | REG_Y }, }; #define FuncInfoCount (sizeof(FuncInfoTable) / sizeof(FuncInfoTable[0])) @@ -385,10 +385,10 @@ static int CompareFuncInfo (const void* Key, const void* Info) -fncls_t GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg) +fncls_t GetFuncInfo (const char* Name, unsigned int* Use, unsigned int* Chg) /* For the given function, lookup register information and store it into ** the given variables. If the function is unknown, assume it will use and -** load all registers. +** load all registers as well as touching the processor flags. */ { /* If the function name starts with an underline, it is an external @@ -441,6 +441,9 @@ fncls_t GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg) /* Will destroy all registers */ *Chg = REG_ALL; + /* and will destroy all processor flags */ + *Chg |= PSTATE_ALL; + /* Done */ return FNCLS_GLOBAL; } @@ -453,6 +456,7 @@ fncls_t GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg) */ *Use = REG_ALL; *Chg = REG_ALL; + *Chg |= PSTATE_ALL; return FNCLS_NUMERIC; } else { @@ -477,15 +481,17 @@ fncls_t GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg) } *Use = REG_ALL; *Chg = REG_ALL; + *Chg |= PSTATE_ALL; } return FNCLS_BUILTIN; } /* Function not found - assume that the primary register is input, and all - ** registers are changed + ** registers and processor flags are changed */ *Use = REG_EAXY; *Chg = REG_ALL; + *Chg |= PSTATE_ALL; return FNCLS_UNKNOWN; } diff --git a/src/cc65/codeinfo.h b/src/cc65/codeinfo.h index 763b947bf..32bc5dd9c 100644 --- a/src/cc65/codeinfo.h +++ b/src/cc65/codeinfo.h @@ -57,7 +57,7 @@ struct CodeSeg; /* Forward to struct RegContents */ struct RegContents; -/* Defines for registers. */ +/* Defines for registers */ #define REG_NONE 0x0000U #define REG_A 0x0001U #define REG_X 0x0002U @@ -74,6 +74,21 @@ struct RegContents; #define REG_SP_LO 0x1000U #define REG_SP_HI 0x2000U +/* Defines for some special register usage */ +#define SLV_SP65 0x00200000U /* Accesses 6502 stack pointer */ +#define SLV_PH65 0x00400000U /* Pushes onto 6502 stack */ +#define SLV_PL65 0x00800000U /* Pops from 6502 stack */ + +/* Defines for processor states */ +#define PSTATE_NONE 0x00000000U +#define PSTATE_C 0x01000000U /* Carry */ +#define PSTATE_Z 0x02000000U /* Zero */ +#define PSTATE_I 0x04000000U /* Interrupt */ +#define PSTATE_D 0x08000000U /* Decimal */ +#define PSTATE_U 0x10000000U /* Unused */ +#define PSTATE_B 0x20000000U /* Break */ +#define PSTATE_V 0x40000000U /* Overflow */ +#define PSTATE_N 0x80000000U /* Negative */ /* Combined register defines */ #define REG_PTR1 (REG_PTR1_LO | REG_PTR1_HI) @@ -89,6 +104,14 @@ struct RegContents; #define REG_EAXY (REG_EAX | REG_Y) #define REG_ZP 0xFFF8U #define REG_ALL 0xFFFFU +#define PSTATE_CZ (PSTATE_C | PSTATE_Z) +#define PSTATE_CZN (PSTATE_C | PSTATE_Z | PSTATE_N) +#define PSTATE_CZVN (PSTATE_C | PSTATE_Z | PSTATE_V | PSTATE_N) +#define PSTATE_ZN (PSTATE_Z | PSTATE_N) +#define PSTATE_ZVN (PSTATE_Z | PSTATE_V | PSTATE_N) +#define PSTATE_6502 0xE7000000U +#define PSTATE_ALL 0xFF000000U +#define REG_EVERYTHING 0xFFFFFFFFU @@ -139,7 +162,7 @@ typedef enum { -fncls_t GetFuncInfo (const char* Name, unsigned short* Use, unsigned short* Chg); +fncls_t GetFuncInfo (const char* Name, unsigned int* Use, unsigned int* Chg); /* For the given function, lookup register information and store it into ** the given variables. If the function is unknown, assume it will use and ** load all registers. diff --git a/src/cc65/codeseg.c b/src/cc65/codeseg.c index f2e0faf15..ad8a3148c 100644 --- a/src/cc65/codeseg.c +++ b/src/cc65/codeseg.c @@ -1468,6 +1468,7 @@ void CS_GenRegInfo (CodeSeg* S) /* On entry, the register contents are unknown */ RC_Invalidate (&Regs); + RC_InvalidatePS (&Regs); CurrentRegs = &Regs; /* Walk over all insns and note just the changes from one insn to the @@ -1502,6 +1503,7 @@ void CS_GenRegInfo (CodeSeg* S) Regs = J->RI->Out2; } else { RC_Invalidate (&Regs); + RC_InvalidatePS (&Regs); } Entry = 1; } else { @@ -1521,6 +1523,7 @@ void CS_GenRegInfo (CodeSeg* S) */ Done = 0; RC_Invalidate (&Regs); + RC_InvalidatePS (&Regs); break; } if (J->RI->Out2.RegA != Regs.RegA) { @@ -1541,6 +1544,9 @@ void CS_GenRegInfo (CodeSeg* S) if (J->RI->Out2.Tmp1 != Regs.Tmp1) { Regs.Tmp1 = UNKNOWN_REGVAL; } + unsigned PF = J->RI->Out2.PFlags ^ Regs.PFlags; + Regs.PFlags |= ((PF >> 8) | PF | (PF << 8)) & UNKNOWN_PFVAL_ALL; + Regs.ZNRegs &= J->RI->Out2.ZNRegs; ++Entry; } diff --git a/src/cc65/coptsize.c b/src/cc65/coptsize.c index 5c23e637c..a5da4736d 100644 --- a/src/cc65/coptsize.c +++ b/src/cc65/coptsize.c @@ -76,730 +76,730 @@ static const CallDesc CallTable [] = { { "addeqysp", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "addeq0sp" },{ "laddeq", { - /* A X Y SRegLo */ - 1, 0, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 1, 0, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "laddeq1" },{ "laddeq", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "laddeqa" },{ "laddeqysp", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "laddeq0sp" },{ "ldaxidx", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, 1, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, 1, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "ldaxi" },{ "ldaxysp", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, 1, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, 1, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "ldax0sp" },{ "ldeaxidx", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, 3, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, 3, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "ldeaxi" },{ "ldeaxysp", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, 3, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, 3, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "ldeax0sp" },{ "leaaxsp", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "leaa0sp" },{ "lsubeq", { - /* A X Y SRegLo */ - 1, 0, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 1, 0, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "lsubeq1" },{ "lsubeq", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "lsubeqa" },{ "lsubeqysp", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "lsubeq0sp" },{ "pusha", { - /* A X Y SRegLo */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_SLOWER, "pushc0" },{ "pusha", { - /* A X Y SRegLo */ - 1, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 1, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_SLOWER, "pushc1" },{ "pusha", { - /* A X Y SRegLo */ - 2, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 2, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_SLOWER, "pushc2" },{ "pushax", { - /* A X Y SRegLo */ - 0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "push0" },{ "pushax", { - /* A X Y SRegLo */ - 1, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 1, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_SLOWER, "push1" },{ "pushax", { - /* A X Y SRegLo */ - 2, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 2, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_SLOWER, "push2" },{ "pushax", { - /* A X Y SRegLo */ - 3, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 3, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_SLOWER, "push3" },{ "pushax", { - /* A X Y SRegLo */ - 4, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 4, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_SLOWER, "push4" },{ "pushax", { - /* A X Y SRegLo */ - 5, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 5, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_SLOWER, "push5" },{ "pushax", { - /* A X Y SRegLo */ - 6, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 6, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_SLOWER, "push6" },{ "pushax", { - /* A X Y SRegLo */ - 7, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 7, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_SLOWER, "push7" },{ "pushax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "pusha0" },{ "pushax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0xFF, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0xFF, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_SLOWER, "pushaFF" },{ "pushaysp", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "pusha0sp" },{ "pusheax", { - /* A X Y SRegLo */ - 0, 0, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 0, 0, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "pushl0" },{ "pusheax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "push0ax" },{ "pushwidx", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, 1, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, 1, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "pushw" },{ "pushwysp", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, 3, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, 3, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "pushw0sp" },{ "staxysp", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "stax0sp" },{ "steaxysp", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "steax0sp" },{ "subeqysp", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "subeq0sp" },{ "tosaddax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosadda0" },{ "tosaddeax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosadd0ax" },{ "tosandax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosanda0" },{ "tosandeax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosand0ax" },{ "tosdivax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosdiva0" },{ "tosdiveax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosdiv0ax" },{ "toseqax", { - /* A X Y SRegLo */ - 0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "toseq00" },{ "toseqax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "toseqa0" },{ "tosgeax", { - /* A X Y SRegLo */ - 0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosge00" },{ "tosgeax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosgea0" },{ "tosgtax", { - /* A X Y SRegLo */ - 0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosgt00" },{ "tosgtax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosgta0" },{ "tosicmp", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosicmp0" },{ "tosleax", { - /* A X Y SRegLo */ - 0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosle00" },{ "tosleax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "toslea0" },{ "tosltax", { - /* A X Y SRegLo */ - 0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + 0, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "toslt00" },{ "tosltax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "toslta0" },{ "tosmodax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosmoda0" },{ "tosmodeax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosmod0ax" },{ "tosmulax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosmula0" },{ "tosmuleax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosmul0ax" },{ "tosneax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosnea0" },{ "tosorax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosora0" },{ "tosoreax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosor0ax" },{ "tosrsubax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosrsuba0" },{ "tosrsubeax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosrsub0ax" },{ "tossubax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tossuba0" },{ "tossubeax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tossub0ax" },{ "tosudivax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosudiva0" },{ "tosudiveax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosudiv0ax" },{ "tosugeax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosugea0" },{ "tosugtax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosugta0" },{ "tosuleax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosulea0" },{ "tosultax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosulta0" },{ "tosumodax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosumoda0" },{ "tosumodeax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosumod0ax" },{ "tosumulax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosumula0" },{ "tosumuleax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosumul0ax" },{ "tosxorax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosxora0" },{ "tosxoreax", { - /* A X Y SRegLo */ - UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, - /* SRegHi Ptr1Lo Ptr1Hi Tmp1 */ - 0, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL + /* A X Y SRegLo SRegHi */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, 0, 0, + /* Ptr1Lo Ptr1Hi Tmp1 PFlags ZNRegs */ + UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_REGVAL, UNKNOWN_PFVAL_ALL, ZNREG_NONE }, F_NONE, "tosxor0ax" diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 34a9b88d6..c31b0ec97 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -320,10 +320,10 @@ static void AdjustLoadInfo (LoadInfo* LI, int Index, int Change) static int Affected (LoadRegInfo* RI, const CodeEntry* E) /* Check if the load src may be modified between the pushax and op */ { - fncls_t fncls; - unsigned short Use; - unsigned short Chg; - unsigned short UseToCheck = 0; + fncls_t fncls; + unsigned int Use; + unsigned int Chg; + unsigned int UseToCheck = 0; if ((RI->Flags & (LI_CHECK_ARG | LI_CHECK_Y)) != 0) { if (E->AM == AM65_IMM || E->AM == AM65_ACC || E->AM == AM65_IMP || E->AM == AM65_BRA) { diff --git a/src/cc65/reginfo.c b/src/cc65/reginfo.c index 383c6ec24..601f0f688 100644 --- a/src/cc65/reginfo.c +++ b/src/cc65/reginfo.c @@ -74,6 +74,15 @@ void RC_InvalidateZP (RegContents* C) +void RC_InvalidatePS (RegContents* C) +/* Invalidate processor status */ +{ + C->PFlags = UNKNOWN_PFVAL_ALL; + C->ZNRegs = ZNREG_NONE; +} + + + static void RC_Dump1 (FILE* F, const char* Desc, short Val) /* Dump one register value */ { @@ -102,6 +111,44 @@ void RC_Dump (FILE* F, const RegContents* RC) +#if !defined(HAVE_INLINE) +int PStatesAreKnown (unsigned short PFlags, unsigned WhatStates) +/* Return true if all queried processor states are known. +** Note: WhatStates takes PSTATE_* rather than PFVAL_*. +*/ +{ + return ((PFlags << (PSTATE_BITS_SHIFT - 8)) & WhatStates & PSTATE_BITS_MASK) == 0; +} +#endif + + + +#if !defined(HAVE_INLINE) +int PStatesAreSet (unsigned short PFlags, unsigned WhatStates) +/* Return true if all queried processor states are known to be set. +** Note: WhatStates takes PSTATE_* rather than PFVAL_*. +*/ +{ + return (PFlags & (WhatStates >> (PSTATE_BITS_SHIFT - 8))) == 0 && + (PFlags & (WhatStates >> PSTATE_BITS_SHIFT)) == WhatStates >> PSTATE_BITS_SHIFT; +} +#endif + + + +#if !defined(HAVE_INLINE) +int PStatesAreClear (unsigned short PFlags, unsigned WhatStates) +/* Return true if all queried processor states are known to be cleared. +** Note: WhatStates takes PSTATE_* rather than PFVAL_*. +*/ +{ + return (PFlags & (WhatStates >> (PSTATE_BITS_SHIFT - 8))) == 0 && + (PFlags & (WhatStates >> PSTATE_BITS_SHIFT)) == 0; +} +#endif + + + RegInfo* NewRegInfo (const RegContents* RC) /* Allocate a new register info, initialize and return it. If RC is not ** a NULL pointer, it is used to initialize both, the input and output @@ -120,6 +167,9 @@ RegInfo* NewRegInfo (const RegContents* RC) RC_Invalidate (&RI->In); RC_Invalidate (&RI->Out); RC_Invalidate (&RI->Out2); + RC_InvalidatePS (&RI->In); + RC_InvalidatePS (&RI->Out); + RC_InvalidatePS (&RI->Out2); } /* Return the new struct */ diff --git a/src/cc65/reginfo.h b/src/cc65/reginfo.h index 7354c301f..28b948e04 100644 --- a/src/cc65/reginfo.h +++ b/src/cc65/reginfo.h @@ -54,6 +54,69 @@ /* Encoding for an unknown register value */ #define UNKNOWN_REGVAL -1 +/* Encoding for an unknown processor status: +** For Bit N in the flags, ((flags >> N) & 0x0101) == 0x0101 means 'unknown' +*/ +#define UNKNOWN_PFVAL_C 0x0101U /* Carray */ +#define UNKNOWN_PFVAL_Z 0x0202U /* Zero */ +#define UNKNOWN_PFVAL_I 0x0404U /* Interrupt */ +#define UNKNOWN_PFVAL_D 0x0808U /* Decimal */ +#define UNKNOWN_PFVAL_U 0x1010U /* Unused */ +#define UNKNOWN_PFVAL_B 0x2020U /* Break */ +#define UNKNOWN_PFVAL_V 0x4040U /* Overflow */ +#define UNKNOWN_PFVAL_N 0x8080U /* Negative */ +#define UNKNOWN_PFVAL_CZ (UNKNOWN_PFVAL_C | UNKNOWN_PFVAL_Z) +#define UNKNOWN_PFVAL_CZN (UNKNOWN_PFVAL_N | UNKNOWN_PFVAL_CZ) +#define UNKNOWN_PFVAL_CZVN (UNKNOWN_PFVAL_V | UNKNOWN_PFVAL_CZN) +#define UNKNOWN_PFVAL_ZN (UNKNOWN_PFVAL_Z | UNKNOWN_PFVAL_N) +#define UNKNOWN_PFVAL_ZVN (UNKNOWN_PFVAL_V | UNKNOWN_PFVAL_ZN) +#define UNKNOWN_PFVAL_6502 0xE7E7U +#define UNKNOWN_PFVAL_ALL 0xFFFFU + +/* Encoding for a known processor status */ +#define PFVAL_C 0x0001U /* Carray set */ +#define PFVAL_Z 0x0002U /* Zero set */ +#define PFVAL_I 0x0004U /* Interrupt set */ +#define PFVAL_D 0x0008U /* Decimal set */ +#define PFVAL_U 0x0010U /* Unused set */ +#define PFVAL_B 0x0020U /* Break set */ +#define PFVAL_V 0x0040U /* Overflow set */ +#define PFVAL_N 0x0080U /* Negative set */ +#define PFVAL_CZ (PFVAL_C | PFVAL_Z) +#define PFVAL_CZN (PFVAL_N | PFVAL_CZ) +#define PFVAL_CZVN (PFVAL_V | PFVAL_CZN) +#define PFVAL_ZN (PFVAL_Z | PFVAL_N) +#define PFVAL_ZVN (PFVAL_V | PFVAL_ZN) +#define PFVAL_6502 0x00E7U +#define PFVAL_ALL 0x00FFU + +/* Used for functions to convert the processor states to processor flags */ +#define PSTATE_BITS_SHIFT 24 +#define PSTATE_BITS_MASK (0xFFU << PSTATE_BITS_SHIFT) + +/* Encoding for unknown Z/N status origin */ +#define UNKNOWN_ZNREG 0x0000U + +/* Encoding for known register Z/N status origins */ +#define ZNREG_NONE 0x0000U /* None */ +#define ZNREG_A REG_A +#define ZNREG_X REG_X +#define ZNREG_Y REG_Y +#define ZNREG_TMP1 REG_TMP1 +#define ZNREG_PTR1_LO REG_PTR1_LO +#define ZNREG_PTR1_HI REG_PTR1_HI +#define ZNREG_PTR2_LO REG_PTR2_LO +#define ZNREG_PTR2_HI REG_PTR2_HI +#define ZNREG_SREG_LO REG_SREG_LO +#define ZNREG_SREG_HI REG_SREG_HI +#define ZNREG_SAVE_LO REG_SAVE_LO +#define ZNREG_SAVE_HI REG_SAVE_HI +#define ZNREG_AX (REG_A | REG_X) +#define ZNREG_AY (REG_A | REG_Y) +#define ZNREG_AXY (REG_A | REG_X | REG_Y) + + + /* Register contents */ typedef struct RegContents RegContents; struct RegContents { @@ -65,6 +128,8 @@ struct RegContents { short Ptr1Lo; short Ptr1Hi; short Tmp1; + unsigned short PFlags; /* Processor flags */ + unsigned short ZNRegs; /* Which register(s) the Z/N flags reflect */ }; /* Register change info */ @@ -89,6 +154,9 @@ void RC_Invalidate (RegContents* C); void RC_InvalidateZP (RegContents* C); /* Invalidate all ZP registers */ +void RC_InvalidatePS (RegContents* C); +/* Invalidate processor status */ + void RC_Dump (FILE* F, const RegContents* RC); /* Dump the contents of the given RegContents struct */ @@ -112,6 +180,56 @@ INLINE int RegValIsUnknown (short Val) # define RegValIsUnknown(S) ((S) < 0) #endif +#if defined(HAVE_INLINE) +INLINE int PStatesAreKnown (unsigned short PFlags, unsigned WhatStates) +/* Return true if all queried processor states are known. +** Note: WhatStates takes PSTATE_* rather than PFVAL_*. +*/ +{ + return ((PFlags << (PSTATE_BITS_SHIFT - 8)) & WhatStates & PSTATE_BITS_MASK) == 0; +} +#else +int PStatesAreKnown (unsigned short PFlags, unsigned WhatStates); +#endif + +#if defined(HAVE_INLINE) +INLINE int PStatesAreUnknown (unsigned short PFlags, unsigned WhatStates) +/* Return true if any queried processor states are unknown. +** Note: WhatStates takes PSTATE_* rather than PFVAL_*. +*/ +{ + return !PStatesAreKnown (PFlags, WhatStates); +} +#else +# define PStatesAreUnknown(V, B) (!PStatesAreKnown (V, B)) +#endif + +#if defined(HAVE_INLINE) +INLINE int PStatesAreSet (unsigned short PFlags, unsigned WhatStates) +/* Return true if all queried processor states are known to be set. +** Note: WhatStates takes PSTATE_* rather than PFVAL_*. +*/ +{ + return (PFlags & (WhatStates >> (PSTATE_BITS_SHIFT - 8))) == 0 && + (PFlags & (WhatStates >> PSTATE_BITS_SHIFT)) == WhatStates >> PSTATE_BITS_SHIFT; +} +#else +int PStatesAreSet (unsigned short PFlags, unsigned WhatStates); +#endif + +#if defined(HAVE_INLINE) +INLINE int PStatesAreClear (unsigned short PFlags, unsigned WhatStates) +/* Return true if the queried processor states are known to be cleared. +** Note: WhatStates takes PSTATE_* rather than PFVAL_*. +*/ +{ + return (PFlags & (WhatStates >> (PSTATE_BITS_SHIFT - 8))) == 0 && + (PFlags & (WhatStates >> PSTATE_BITS_SHIFT)) == 0; +} +#else +int PStatesAreClear (unsigned short PFlags, unsigned WhatStates); +#endif + RegInfo* NewRegInfo (const RegContents* RC); /* Allocate a new register info, initialize and return it. If RC is not ** a NULL pointer, it is used to initialize both, the input and output From 810e17edfefba76b3b3241e121b936572bf14a69 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 8 Sep 2020 23:41:02 +0800 Subject: [PATCH 0502/2710] Fixed processor states tracking for the BIT/TRB/TSB opcode. Added new opcode descriptions about whether and how the opcode accesses memory. --- src/cc65/codeent.c | 34 ++++++++++++++++++++++++++---- src/cc65/opcodes.c | 52 +++++++++++++++++++++++----------------------- src/cc65/opcodes.h | 5 ++++- 3 files changed, 60 insertions(+), 31 deletions(-) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 085130001..d54be039a 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -889,12 +889,38 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Val = In->SRegHi; break; } + } else if (CE_IsConstImm (E)) { + /* 65C02 special */ + Val = (short) E->Num; } - Out->PFlags &= ~UNKNOWN_PFVAL_V; - if (Val & PFVAL_V) { - Out->PFlags |= PFVAL_V; + + /* BIT is unique with regards to the Z/V/N flags: + ** - The Z is set/cleared according to whether the AND result is zero. + ** - The V is coped directly from Bit 6 of the orginal argument. + ** - The N is coped directly from Bit 7 of the orginal argument. + ** Note the V/N flags are not affected in imm addressing mode supported by 65c02! + */ + if (E->AM == AM65_IMM) { + if (RegValIsKnown (Val)) { + Out->PFlags &= ~(UNKNOWN_PFVAL_V | UNKNOWN_PFVAL_N); + if (Val & PFVAL_V) { + Out->PFlags |= PFVAL_V; + } + Out->PFlags &= ~UNKNOWN_PFVAL_V; + if (Val & PFVAL_V) { + Out->PFlags |= PFVAL_V; + } + } else { + Out->PFlags |= UNKNOWN_PFVAL_V | UNKNOWN_PFVAL_N; + } } - DeduceZN (Out, Val); + if ((RegValIsKnown (Val) && RegValIsKnown (In->RegA))) { + Val &= In->RegA; + } else if (((RegValIsKnown (Val) && Val == 0) || + (RegValIsKnown (In->RegA) && In->RegA == 0))) { + Val = 0; + } + DeduceZ (Out, Val); break; case OP65_BMI: diff --git a/src/cc65/opcodes.c b/src/cc65/opcodes.c index 792b92f7c..4ec25f3bd 100644 --- a/src/cc65/opcodes.c +++ b/src/cc65/opcodes.c @@ -63,21 +63,21 @@ const OPCDesc OPCTable[OP65_COUNT] = { 0, /* size */ REG_A, /* use */ REG_A, /* chg */ - OF_SETF /* flags */ + OF_SETF | OF_READ /* flags */ }, { OP65_AND, /* opcode */ "and", /* mnemonic */ 0, /* size */ REG_A, /* use */ REG_A, /* chg */ - OF_SETF /* flags */ + OF_SETF | OF_READ /* flags */ }, { OP65_ASL, /* opcode */ "asl", /* mnemonic */ 0, /* size */ REG_NONE, /* use */ REG_NONE, /* chg */ - OF_SETF | OF_NOIMP /* flags */ + OF_SETF | OF_NOIMP | OF_RMW /* flags */ }, { OP65_BCC, /* opcode */ "bcc", /* mnemonic */ @@ -105,7 +105,7 @@ const OPCDesc OPCTable[OP65_COUNT] = { 0, /* size */ REG_A, /* use */ REG_NONE, /* chg */ - OF_SETF /* flags */ + OF_READ /* flags */ }, { OP65_BMI, /* opcode */ "bmi", /* mnemonic */ @@ -189,21 +189,21 @@ const OPCDesc OPCTable[OP65_COUNT] = { 0, /* size */ REG_A, /* use */ REG_NONE, /* chg */ - OF_SETF | OF_CMP /* flags */ + OF_SETF | OF_CMP | OF_READ /* flags */ }, { OP65_CPX, /* opcode */ "cpx", /* mnemonic */ 0, /* size */ REG_X, /* use */ REG_NONE, /* chg */ - OF_SETF | OF_CMP /* flags */ + OF_SETF | OF_CMP | OF_READ /* flags */ }, { OP65_CPY, /* opcode */ "cpy", /* mnemonic */ 0, /* size */ REG_Y, /* use */ REG_NONE, /* chg */ - OF_SETF | OF_CMP /* flags */ + OF_SETF | OF_CMP | OF_READ /* flags */ }, { OP65_DEA, /* opcode */ "dea", /* mnemonic */ @@ -217,7 +217,7 @@ const OPCDesc OPCTable[OP65_COUNT] = { 0, /* size */ REG_NONE, /* use */ REG_NONE, /* chg */ - OF_SETF | OF_NOIMP /* flags */ + OF_SETF | OF_NOIMP | OF_RMW /* flags */ }, { OP65_DEX, /* opcode */ "dex", /* mnemonic */ @@ -238,7 +238,7 @@ const OPCDesc OPCTable[OP65_COUNT] = { 0, /* size */ REG_A, /* use */ REG_A, /* chg */ - OF_SETF /* flags */ + OF_SETF | OF_READ /* flags */ }, { OP65_INA, /* opcode */ "ina", /* mnemonic */ @@ -252,7 +252,7 @@ const OPCDesc OPCTable[OP65_COUNT] = { 0, /* size */ REG_NONE, /* use */ REG_NONE, /* chg */ - OF_SETF | OF_NOIMP /* flags */ + OF_SETF | OF_NOIMP | OF_RMW /* flags */ }, { OP65_INX, /* opcode */ "inx", /* mnemonic */ @@ -301,7 +301,7 @@ const OPCDesc OPCTable[OP65_COUNT] = { 3, /* size */ REG_NONE, /* use */ REG_NONE, /* chg */ - OF_UBRA | OF_LBRA /* flags */ + OF_UBRA | OF_LBRA | OF_READ /* flags */ }, { OP65_JNE, /* opcode */ "jne", /* mnemonic */ @@ -322,7 +322,7 @@ const OPCDesc OPCTable[OP65_COUNT] = { 3, /* size */ REG_NONE, /* use */ REG_NONE, /* chg */ - OF_CALL /* flags */ + OF_CALL | OF_READ /* flags */ }, { OP65_JVC, /* opcode */ "jvc", /* mnemonic */ @@ -343,28 +343,28 @@ const OPCDesc OPCTable[OP65_COUNT] = { 0, /* size */ REG_NONE, /* use */ REG_A, /* chg */ - OF_LOAD | OF_SETF /* flags */ + OF_LOAD | OF_SETF | OF_READ /* flags */ }, { OP65_LDX, /* opcode */ "ldx", /* mnemonic */ 0, /* size */ REG_NONE, /* use */ REG_X, /* chg */ - OF_LOAD | OF_SETF /* flags */ + OF_LOAD | OF_SETF | OF_READ /* flags */ }, { OP65_LDY, /* opcode */ "ldy", /* mnemonic */ 0, /* size */ REG_NONE, /* use */ REG_Y, /* chg */ - OF_LOAD | OF_SETF /* flags */ + OF_LOAD | OF_SETF | OF_READ /* flags */ }, { OP65_LSR, /* opcode */ "lsr", /* mnemonic */ 0, /* size */ REG_NONE, /* use */ REG_NONE, /* chg */ - OF_SETF | OF_NOIMP /* flags */ + OF_SETF | OF_NOIMP | OF_RMW /* flags */ }, { OP65_NOP, /* opcode */ "nop", /* mnemonic */ @@ -378,7 +378,7 @@ const OPCDesc OPCTable[OP65_COUNT] = { 0, /* size */ REG_A, /* use */ REG_A, /* chg */ - OF_SETF /* flags */ + OF_SETF | OF_READ /* flags */ }, { OP65_PHA, /* opcode */ "pha", /* mnemonic */ @@ -441,14 +441,14 @@ const OPCDesc OPCTable[OP65_COUNT] = { 0, /* size */ REG_NONE, /* use */ REG_NONE, /* chg */ - OF_SETF | OF_NOIMP /* flags */ + OF_SETF | OF_NOIMP | OF_RMW /* flags */ }, { OP65_ROR, /* opcode */ "ror", /* mnemonic */ 0, /* size */ REG_NONE, /* use */ REG_NONE, /* chg */ - OF_SETF | OF_NOIMP /* flags */ + OF_SETF | OF_NOIMP | OF_RMW /* flags */ }, /* Mark RTI as "uses all registers but doesn't change them", so the ** optimizer won't remove preceeding loads. @@ -472,7 +472,7 @@ const OPCDesc OPCTable[OP65_COUNT] = { 0, /* size */ REG_A, /* use */ REG_A, /* chg */ - OF_SETF /* flags */ + OF_SETF | OF_READ /* flags */ }, { OP65_SEC, /* opcode */ "sec", /* mnemonic */ @@ -500,7 +500,7 @@ const OPCDesc OPCTable[OP65_COUNT] = { 0, /* size */ REG_A, /* use */ REG_NONE, /* chg */ - OF_STORE /* flags */ + OF_STORE | OF_WRITE /* flags */ }, { OP65_STP, /* opcode */ "stp", /* mnemonic */ @@ -514,21 +514,21 @@ const OPCDesc OPCTable[OP65_COUNT] = { 0, /* size */ REG_X, /* use */ REG_NONE, /* chg */ - OF_STORE /* flags */ + OF_STORE | OF_WRITE /* flags */ }, { OP65_STY, /* opcode */ "sty", /* mnemonic */ 0, /* size */ REG_Y, /* use */ REG_NONE, /* chg */ - OF_STORE /* flags */ + OF_STORE | OF_WRITE /* flags */ }, { OP65_STZ, /* opcode */ "stz", /* mnemonic */ 0, /* size */ REG_NONE, /* use */ REG_NONE, /* chg */ - OF_STORE /* flags */ + OF_STORE | OF_WRITE /* flags */ }, { OP65_TAX, /* opcode */ "tax", /* mnemonic */ @@ -549,14 +549,14 @@ const OPCDesc OPCTable[OP65_COUNT] = { 0, /* size */ REG_A, /* use */ REG_NONE, /* chg */ - OF_SETF /* flags */ + OF_RMW /* flags */ }, { OP65_TSB, /* opcode */ "tsb", /* mnemonic */ 0, /* size */ REG_A, /* use */ REG_NONE, /* chg */ - OF_SETF /* flags */ + OF_RMW /* flags */ }, { OP65_TSX, /* opcode */ "tsx", /* mnemonic */ diff --git a/src/cc65/opcodes.h b/src/cc65/opcodes.h index 24a289c26..162647eff 100644 --- a/src/cc65/opcodes.h +++ b/src/cc65/opcodes.h @@ -176,13 +176,16 @@ typedef enum { #define OF_XFR 0x0100U /* Transfer instruction */ #define OF_CALL 0x0200U /* A subroutine call */ #define OF_REG_INCDEC 0x0400U /* A register increment or decrement */ -#define OF_SETF 0x0800U /* Insn will set all load flags (not carry) */ +#define OF_SETF 0x0800U /* Insn will set both Z and N flags according to the result */ #define OF_CMP 0x1000U /* A compare A/X/Y instruction */ #define OF_NOIMP 0x2000U /* Implicit addressing mode is actually A */ +#define OF_READ 0x4000U /* Read from the memory address */ +#define OF_WRITE 0x8000U /* Write to the memory address */ /* Combined infos */ #define OF_BRA (OF_UBRA | OF_CBRA) /* Operation is a jump/branch */ #define OF_DEAD (OF_UBRA | OF_RET) /* Dead end - no exec behind this point */ +#define OF_RMW (OF_READ | OF_WRITE) /* Read, Modify and Write */ /* Opcode description */ typedef struct { From b8ae5c28fe18ba5d5e0791eecded61d0a16f0d0e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 8 Sep 2020 23:41:04 +0800 Subject: [PATCH 0503/2710] Added debug output support for processor flags. --- src/cc65/codeent.c | 60 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 5 deletions(-) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index d54be039a..0f537bbaf 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -50,6 +50,7 @@ #include "codelab.h" #include "opcodes.h" #include "output.h" +#include "reginfo.h" @@ -1901,6 +1902,7 @@ static char* RegInfoDesc (unsigned U, char* Buf) strcat (Buf, U & REG_PTR2? "2" : "_"); strcat (Buf, U & REG_SAVE? "V" : "_"); strcat (Buf, U & REG_SP? "S" : "_"); + sprintf (Buf + 10, "_%02X", (U & PSTATE_ALL) >> PSTATE_BITS_SHIFT); return Buf; } @@ -1925,11 +1927,59 @@ static char* RegContentDesc (const RegContents* RC, char* Buf) } B += 5; if (RegValIsUnknown (RC->RegY)) { - strcpy (B, "Y:XX"); + strcpy (B, "Y:XX "); } else { - sprintf (B, "Y:%02X", RC->RegY); + sprintf (B, "Y:%02X ", RC->RegY); } - B += 4; + B += 5; + if (PStatesAreUnknown (RC->PFlags, PSTATE_C)) { + strcpy (B, "~"); + } else { + strcpy (B, RC->PFlags & PFVAL_C ? "C" : "_"); + } + B += 1; + if (PStatesAreUnknown (RC->PFlags, PSTATE_Z)) { + strcpy (B, "~"); + } else { + strcpy (B, RC->PFlags & PFVAL_Z ? "Z" : "_"); + } + B += 1; + if (PStatesAreUnknown (RC->PFlags, PSTATE_I)) { + strcpy (B, "~"); + } else { + strcpy (B, RC->PFlags & PFVAL_I ? "I" : "_"); + } + B += 1; + if (PStatesAreUnknown (RC->PFlags, PSTATE_D)) { + strcpy (B, "~"); + } else { + strcpy (B, RC->PFlags & PFVAL_D ? "D" : "_"); + } + B += 1; + if (PStatesAreUnknown (RC->PFlags, PSTATE_U)) { + strcpy (B, "~"); + } else { + strcpy (B, RC->PFlags & PFVAL_U ? "U" : "_"); + } + B += 1; + if (PStatesAreUnknown (RC->PFlags, PSTATE_B)) { + strcpy (B, "~"); + } else { + strcpy (B, RC->PFlags & PFVAL_B ? "B" : "_"); + } + B += 1; + if (PStatesAreUnknown (RC->PFlags, PSTATE_V)) { + strcpy (B, "~"); + } else { + strcpy (B, RC->PFlags & PFVAL_V ? "V" : "_"); + } + B += 1; + if (PStatesAreUnknown (RC->PFlags, PSTATE_N)) { + strcpy (B, "~"); + } else { + strcpy (B, RC->PFlags & PFVAL_N ? "N" : "_"); + } + B += 1; return Buf; } @@ -2024,7 +2074,7 @@ void CE_Output (const CodeEntry* E) if (Debug) { char Use [128]; char Chg [128]; - WriteOutput ("%*s; USE: %-12s CHG: %-12s SIZE: %u", + WriteOutput ("%*s; USE: %-15s CHG: %-15s SIZE: %u", (int)(30-Chars), "", RegInfoDesc (E->Use, Use), RegInfoDesc (E->Chg, Chg), @@ -2033,7 +2083,7 @@ void CE_Output (const CodeEntry* E) if (E->RI) { char RegIn[32]; char RegOut[32]; - WriteOutput (" In %s Out %s", + WriteOutput (" In %s Out %s", RegContentDesc (&E->RI->In, RegIn), RegContentDesc (&E->RI->Out, RegOut)); } From 0482e4d6e4e2bcba3116e2eee9a98e3d374b28f5 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Fri, 18 Sep 2020 08:42:56 +0200 Subject: [PATCH 0504/2710] Fix CRLFs introduced by fe3f267 --- libsrc/runtime/bcast.s | 42 ++++++++++++++++++++--------------------- libsrc/runtime/lbcast.s | 40 +++++++++++++++++++-------------------- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/libsrc/runtime/bcast.s b/libsrc/runtime/bcast.s index bb37b6ec0..bc228d1b7 100644 --- a/libsrc/runtime/bcast.s +++ b/libsrc/runtime/bcast.s @@ -1,21 +1,21 @@ -; -; acqn, 01.16.2020 -; -; CC65 runtime: boolean cast -; - - .export bcasta, bcastax - -bcastax: - cpx #0 - bne L1 - -bcasta: - tax - beq L0 ; Zero already in X - -L1: ldx #0 - lda #1 - -L0: rts - +; +; acqn, 01.16.2020 +; +; CC65 runtime: boolean cast +; + + .export bcasta, bcastax + +bcastax: + cpx #0 + bne L1 + +bcasta: + tax + beq L0 ; Zero already in X + +L1: ldx #0 + lda #1 + +L0: rts + diff --git a/libsrc/runtime/lbcast.s b/libsrc/runtime/lbcast.s index 3dee8d956..208442c44 100644 --- a/libsrc/runtime/lbcast.s +++ b/libsrc/runtime/lbcast.s @@ -1,20 +1,20 @@ -; -; acqn, 01.16.2020 -; -; CC65 runtime: boolean cast for longs -; - - .export bcasteax - .importzp sreg, tmp1 - -bcasteax: - stx tmp1 - ldx #0 ; High byte of result - ora tmp1 - ora sreg - ora sreg+1 - beq L0 - - lda #1 -L0: rts - +; +; acqn, 01.16.2020 +; +; CC65 runtime: boolean cast for longs +; + + .export bcasteax + .importzp sreg, tmp1 + +bcasteax: + stx tmp1 + ldx #0 ; High byte of result + ora tmp1 + ora sreg + ora sreg+1 + beq L0 + + lda #1 +L0: rts + From 86ced2bd4c35087c118c6a48bdbe7be555ff4a1c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 13 Sep 2020 17:01:57 +0800 Subject: [PATCH 0505/2710] Avoided unnecessarily boosting the code label numbers with boolean AND. --- src/cc65/expr.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 826e72b09..a88710f34 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3237,8 +3237,8 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) int HasFalseJump = 0, HasTrueJump = 0; CodeMark Start; - /* Get a label that we will use for false expressions */ - int FalseLab = GetLocalLabel (); + /* The label that we will use for false expressions */ + int FalseLab = 0; /* Get lhs */ GetCodePos (&Start); @@ -3266,8 +3266,12 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) /* Clear the test flag */ ED_RequireNoTest (Expr); - /* Remember that the jump is used */ - HasFalseJump = 1; + if (HasFalseJump == 0) { + /* Remember that the jump is used */ + HasFalseJump = 1; + /* Get a label for false expressions */ + FalseLab = GetLocalLabel (); + } /* Generate the jump */ g_falsejump (CF_NONE, FalseLab); @@ -3304,7 +3308,12 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) /* Do short circuit evaluation */ if (CurTok.Tok == TOK_BOOL_AND) { - HasFalseJump = 1; + if (HasFalseJump == 0) { + /* Remember that the jump is used */ + HasFalseJump = 1; + /* Get a label for false expressions */ + FalseLab = GetLocalLabel (); + } g_falsejump (CF_NONE, FalseLab); } else { /* We need the true label for the last expression */ From d02b12fa6c18259b2e8ca82bbff79cd06a6d6359 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 23 Aug 2020 01:35:18 +0800 Subject: [PATCH 0506/2710] Made local code/data labels really local to the functions where they live in. --- src/cc65/asmlabel.c | 37 +++++++++++++++++++++++++++---------- src/cc65/asmlabel.h | 15 ++++++++++++++- src/cc65/compile.c | 9 +++++++++ src/cc65/function.c | 16 +++++++++++++++- src/cc65/function.h | 3 +++ src/cc65/segments.c | 14 ++++++++------ src/cc65/segments.h | 2 ++ 7 files changed, 78 insertions(+), 18 deletions(-) diff --git a/src/cc65/asmlabel.c b/src/cc65/asmlabel.c index f561036ce..7d5db75e6 100644 --- a/src/cc65/asmlabel.c +++ b/src/cc65/asmlabel.c @@ -42,6 +42,17 @@ /* cc65 */ #include "asmlabel.h" #include "error.h" +#include "segments.h" + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +static struct Segments* CurrentFunctionSegment; @@ -51,19 +62,26 @@ -unsigned GetLocalLabel (void) -/* Get an unused label. Will never return zero. */ +void UseLabelPoolFromSegments (struct Segments* Seg) +/* Use the info in segments for generating new label numbers */ { - /* Number to generate unique labels */ - static unsigned NextLabel = 0; + CurrentFunctionSegment = Seg; +} + + + +unsigned GetLocalLabel (void) +/* Get an unused assembler label for the function. Will never return zero. */ +{ + PRECONDITION (CurrentFunctionSegment != 0); /* Check for an overflow */ - if (NextLabel >= 0xFFFF) { + if (CurrentFunctionSegment->NextLabel >= 0xFFFF) { Internal ("Local label overflow"); } /* Return the next label */ - return ++NextLabel; + return ++CurrentFunctionSegment->NextLabel; } @@ -104,16 +122,15 @@ int IsLocalLabelName (const char* Name) unsigned GetLocalDataLabel (void) /* Get an unused local data label. Will never return zero. */ { - /* Number to generate unique labels */ - static unsigned NextLabel = 0; + PRECONDITION (CurrentFunctionSegment != 0); /* Check for an overflow */ - if (NextLabel >= 0xFFFF) { + if (CurrentFunctionSegment->NextDataLabel >= 0xFFFF) { Internal ("Local data label overflow"); } /* Return the next label */ - return ++NextLabel; + return ++CurrentFunctionSegment->NextDataLabel; } diff --git a/src/cc65/asmlabel.h b/src/cc65/asmlabel.h index a79071400..dbfe2f443 100644 --- a/src/cc65/asmlabel.h +++ b/src/cc65/asmlabel.h @@ -38,14 +38,27 @@ +/*****************************************************************************/ +/* Forwards */ +/*****************************************************************************/ + + + +struct Segments; + + + /*****************************************************************************/ /* Code */ /*****************************************************************************/ +void UseLabelPoolFromSegments (struct Segments* Seg); +/* Use the info in segments for generating new label numbers */ + unsigned GetLocalLabel (void); -/* Get an unused assembler label. Will never return zero. */ +/* Get an unused assembler label for the function. Will never return zero. */ const char* LocalLabelName (unsigned L); /* Make a label name from the given label number. The label name will be diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 3296968f6..00e78c2bd 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -389,6 +389,12 @@ void Compile (const char* FileName) /* Create the global code and data segments */ CreateGlobalSegments (); + /* There shouldn't be needs for local labels outside a function, but the + ** current code generator still tries to get some at times even though the + ** code were ill-formed. So just set it up with the global segment list. + */ + UseLabelPoolFromSegments (GS); + /* Initialize the literal pool */ InitLiteralPool (); @@ -488,6 +494,9 @@ void FinishCompile (void) */ for (Entry = GetGlobalSymTab ()->SymHead; Entry; Entry = Entry->NextSym) { if (SymIsOutputFunc (Entry)) { + /* Continue with previous label numbers */ + UseLabelPoolFromSegments (Entry->V.F.Seg); + /* Function which is defined and referenced or extern */ MoveLiteralPool (Entry->V.F.LitPool); CS_MergeLabels (Entry->V.F.Seg->Code); diff --git a/src/cc65/function.c b/src/cc65/function.c index 9d4f8c2f9..00755ae65 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -83,7 +83,7 @@ static Function* NewFunction (struct SymEntry* Sym, FuncDesc* D) F->ReturnType = GetFuncReturn (Sym->Type); F->Desc = D; F->Reserved = 0; - F->RetLab = GetLocalLabel (); + F->RetLab = 0; F->TopLevelSP = 0; F->RegOffs = RegisterSpace; F->Flags = IsTypeVoid (F->ReturnType) ? FF_VOID_RETURN : FF_NONE; @@ -255,6 +255,14 @@ int F_HasOldStyleIntRet (const Function* F) +void F_SetRetLab (Function* F, unsigned NewRetLab) +/* Change the return jump label */ +{ + F->RetLab = NewRetLab; +} + + + unsigned F_GetRetLab (const Function* F) /* Return the return jump label */ { @@ -540,6 +548,12 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* Allocate code and data segments for this function */ Func->V.F.Seg = PushSegments (Func); + /* Use the info in the segments for generating new local labels */ + UseLabelPoolFromSegments (Func->V.F.Seg); + + /* Set return label. This has to be done after the segments are pushed */ + F_SetRetLab (CurrentFunc, GetLocalLabel ()); + /* Allocate a new literal pool */ PushLiteralPool (Func); diff --git a/src/cc65/function.h b/src/cc65/function.h index e0b7ef0a2..825257a60 100644 --- a/src/cc65/function.h +++ b/src/cc65/function.h @@ -120,6 +120,9 @@ int F_IsOldStyle (const Function* F); int F_HasOldStyleIntRet (const Function* F); /* Return true if this is an old style (K&R) function with an implicit int return */ +void F_SetRetLab (Function* F, unsigned NewRetLab); +/* Change the return jump label */ + unsigned F_GetRetLab (const Function* F); /* Return the return jump label */ diff --git a/src/cc65/segments.c b/src/cc65/segments.c index 6efbf68b7..7a9e32eb8 100644 --- a/src/cc65/segments.c +++ b/src/cc65/segments.c @@ -143,12 +143,14 @@ static Segments* NewSegments (SymEntry* Func) Segments* S = xmalloc (sizeof (Segments)); /* Initialize the fields */ - S->Text = NewTextSeg (Func); - S->Code = NewCodeSeg (GetSegName (SEG_CODE), Func); - S->Data = NewDataSeg (GetSegName (SEG_DATA), Func); - S->ROData = NewDataSeg (GetSegName (SEG_RODATA), Func); - S->BSS = NewDataSeg (GetSegName (SEG_BSS), Func); - S->CurDSeg = SEG_DATA; + S->Text = NewTextSeg (Func); + S->Code = NewCodeSeg (GetSegName (SEG_CODE), Func); + S->Data = NewDataSeg (GetSegName (SEG_DATA), Func); + S->ROData = NewDataSeg (GetSegName (SEG_RODATA), Func); + S->BSS = NewDataSeg (GetSegName (SEG_BSS), Func); + S->CurDSeg = SEG_DATA; + S->NextLabel = 0; + S->NextDataLabel = 0; /* Return the new struct */ return S; diff --git a/src/cc65/segments.h b/src/cc65/segments.h index f55be688b..777073559 100644 --- a/src/cc65/segments.h +++ b/src/cc65/segments.h @@ -86,6 +86,8 @@ struct Segments { struct DataSeg* ROData; /* Readonly data segment */ struct DataSeg* BSS; /* Segment for uninitialized data */ segment_t CurDSeg; /* Current data segment */ + unsigned NextLabel; /* Number to generate unique code labels */ + unsigned NextDataLabel; /* Number to generate unique data labels */ }; /* Pointer to the current segment list. Output goes here. */ From a7d6eb9190b8356597f008783e8aaa6121cf4f6b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 13 Sep 2020 08:41:05 +0800 Subject: [PATCH 0507/2710] Added processor flag usage/change-tracking for non-JSR/RTS code entries. Some existing optimizations are impacted and need fixes in order to work correctly again. Fixed and improved OptPrecalc. Now it respects the C/V/Z/N flags. Fixed optimizations impacted by added support of tracking processor flags. --- src/cc65/codeent.c | 139 ++++++++++++++++++++++++++++++++++++++++++++ src/cc65/coptind.c | 121 +++++++++++++++++++++++++++----------- src/cc65/copttest.c | 2 +- 3 files changed, 228 insertions(+), 34 deletions(-) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 0f537bbaf..195f7199f 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -206,6 +206,145 @@ static void SetUseChgInfo (CodeEntry* E, const OPCDesc* D) /* Keep gcc silent */ break; } + + /* Append processor flags as well as special usages */ + switch (E->OPC) { + + case OP65_ADC: + case OP65_SBC: + E->Use |= PSTATE_C; + E->Chg |= PSTATE_CZVN; + break; + case OP65_ROL: + case OP65_ROR: + E->Use |= PSTATE_C; + E->Chg |= PSTATE_CZN; + break; + case OP65_ASL: + case OP65_LSR: + E->Chg |= PSTATE_CZN; + break; + case OP65_CMP: + case OP65_CPX: + case OP65_CPY: + E->Chg |= PSTATE_CZN; + break; + case OP65_BIT: + E->Chg |= PSTATE_ZVN; + if (E->AM != AM65_IMM) { + E->Chg &= ~(PSTATE_V | PSTATE_N); + } + break; + case OP65_BRK: + E->Chg |= PSTATE_B; + break; + case OP65_CLC: + case OP65_SEC: + E->Chg |= PSTATE_C; + break; + case OP65_CLD: + case OP65_SED: + E->Chg |= PSTATE_D; + break; + case OP65_CLI: + case OP65_SEI: + E->Chg |= PSTATE_I; + break; + case OP65_CLV: + E->Chg |= PSTATE_V; + break; + case OP65_TRB: + case OP65_TSB: + E->Chg |= PSTATE_Z; + break; + case OP65_BCC: + case OP65_BCS: + case OP65_JCC: + case OP65_JCS: + E->Use |= PSTATE_C; + break; + case OP65_BEQ: + case OP65_BNE: + case OP65_JEQ: + case OP65_JNE: + E->Use |= PSTATE_Z; + break; + case OP65_BMI: + case OP65_BPL: + case OP65_JMI: + case OP65_JPL: + E->Use |= PSTATE_N; + break; + case OP65_BVC: + case OP65_BVS: + case OP65_JVC: + case OP65_JVS: + E->Use |= PSTATE_V; + break; + case OP65_BRA: + case OP65_JMP: + break; + case OP65_AND: + case OP65_EOR: + case OP65_ORA: + case OP65_DEA: + case OP65_DEC: + case OP65_DEX: + case OP65_DEY: + case OP65_INA: + case OP65_INC: + case OP65_INX: + case OP65_INY: + case OP65_LDA: + case OP65_LDX: + case OP65_LDY: + case OP65_TAX: + case OP65_TAY: + case OP65_TXA: + case OP65_TYA: + E->Chg |= PSTATE_ZN; + break; + case OP65_TSX: + E->Use |= SLV_SP65; + E->Chg |= PSTATE_ZN; + break; + case OP65_TXS: + E->Chg |= SLV_SP65; + break; + case OP65_PLA: + case OP65_PLX: + case OP65_PLY: + E->Use |= SLV_SP65; + E->Chg |= SLV_PL65 | PSTATE_ZN; + break; + case OP65_PLP: + E->Use |= SLV_SP65; + E->Chg |= SLV_PL65 | PSTATE_ALL; + break; + case OP65_PHA: + case OP65_PHX: + case OP65_PHY: + E->Use |= SLV_SP65; + E->Chg |= SLV_PH65; + break; + case OP65_PHP: + E->Use |= SLV_SP65 | PSTATE_ALL; + E->Chg |= SLV_PH65; + break; + case OP65_RTI: + E->Chg |= PSTATE_ALL; + break; + case OP65_RTS: + break; + case OP65_STA: + case OP65_STX: + case OP65_STY: + case OP65_STZ: + case OP65_JSR: + case OP65_NOP: + default: + break; + } } } diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index b506a21ca..eada61871 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -672,7 +672,7 @@ unsigned OptTransfers2 (CodeSeg* S) (N = CS_GetNextEntry (S, I)) != 0 && !CE_HasLabel (N) && (N->Info & OF_XFR) != 0 && - (GetRegInfo (S, I+2, E->Chg) & E->Chg) == 0) { + (GetRegInfo (S, I+2, E->Chg & REG_ALL) & E->Chg & REG_ALL) == 0) { CodeEntry* X = 0; @@ -796,7 +796,7 @@ unsigned OptTransfers3 (CodeSeg* S) } /* Does this insn change the target register of the transfer? */ - } else if (E->Chg & XferEntry->Chg) { + } else if (E->Chg & XferEntry->Chg & ~PSTATE_ZN) { /* We *may* add code here to remove the transfer, but I'm ** currently not sure about the consequences, so I won't @@ -823,8 +823,9 @@ unsigned OptTransfers3 (CodeSeg* S) ** isn't used later, and we have an address mode match, we can ** replace the transfer by a store and remove the store here. */ - if ((GetRegInfo (S, I, XferEntry->Chg) & XferEntry->Chg) == 0 && - (StoreEntry->AM == AM65_ABS || + if ((GetRegInfo (S, I, XferEntry->Chg & REG_ALL) & + XferEntry->Chg & REG_ALL) == 0 && + (StoreEntry->AM == AM65_ABS || StoreEntry->AM == AM65_ZP) && (StoreEntry->AM != AM65_ZP || (StoreEntry->Chg & UsedRegs) == 0) && @@ -973,7 +974,7 @@ unsigned OptTransfers4 (CodeSeg* S) } /* Does this insn change the target register of the load? */ - } else if (E->Chg & LoadEntry->Chg) { + } else if (E->Chg & LoadEntry->Chg & ~PSTATE_ZN) { /* We *may* add code here to remove the load, but I'm ** currently not sure about the consequences, so I won't @@ -989,9 +990,10 @@ unsigned OptTransfers4 (CodeSeg* S) ** isn't used later, and we have an address mode match, we can ** replace the transfer by a load and remove the initial load. */ - if ((GetRegInfo (S, I, LoadEntry->Chg) & LoadEntry->Chg) == 0 && - (LoadEntry->AM == AM65_ABS || - LoadEntry->AM == AM65_ZP || + if ((GetRegInfo (S, I, LoadEntry->Chg & REG_ALL) & + LoadEntry->Chg & REG_ALL) == 0 && + (LoadEntry->AM == AM65_ABS || + LoadEntry->AM == AM65_ZP || LoadEntry->AM == AM65_IMM) && !MemAccess (S, Load+1, Xfer-1, LoadEntry)) { @@ -1246,36 +1248,70 @@ unsigned OptPrecalc (CodeSeg* S) } break; - case OP65_EOR: - if (RegValIsKnown (Out->RegA)) { - /* Accu op zp with known contents */ - Arg = MakeHexArg (Out->RegA); - } - break; - case OP65_ADC: case OP65_SBC: - /* If this is an operation with an immediate operand of zero, - ** and the register is zero, the operation won't give us any - ** results we don't already have (including the flags), so - ** remove it. Something like this is generated as a result of - ** a compare where parts of the values are known to be zero. - ** The only situation where we need to leave things as they are - ** is when V flag is being tested in the next instruction, - ** because ADC/SBC #0 always clears it. - */ - if (In->RegA == 0 && CE_IsKnownImm (E, 0x00) && - (E = CS_GetEntry (S, I + 1)) && - E->OPC != OP65_BVC && - E->OPC != OP65_BVS ) { - /* 0-0 or 0+0 -> remove */ - CS_DelEntry (S, I); - ++Changes; + if (CE_IsKnownImm (E, 0x00)) { + /* If this is an operation with an immediate operand of zero, + ** and the Z/N flags reflect the current states of the content + ** in A, then the operation won't give us any results we don't + ** already have (including the flags) as long as the C flag is + ** set normally (cleared for ADC and set for SBC) for the + ** operation. So we can remove the operation if it is the + ** normal case or the result in A is not used later. + ** Something like this is generated as a result of a compare + ** where parts of the values are known to be zero. + ** The only situation where we need to leave things as they + ** are is when an indeterminate V flag is being tested later, + ** because ADC/SBC #0 always clears it. + */ + int CondC = PStatesAreKnown (In->PFlags, PSTATE_C) && + ((E->OPC == OP65_ADC && (In->PFlags & PFVAL_C) == 0) || + (E->OPC == OP65_SBC && (In->PFlags & PFVAL_C) != 0)); + int CondV = PStatesAreKnown (In->PFlags, PSTATE_V) && (In->PFlags & PFVAL_V) == 0; + int CondZN = (In->ZNRegs & ZNREG_A) != 0; + unsigned R = 0; + if (CondC) { + R = (CondV ? 0 : PSTATE_V) | (CondZN ? 0 : PSTATE_ZN); + } else { + R = REG_A | PSTATE_CZVN; + } + if (R != 0) { + /* Collect info on all flags in one round to save time */ + R = GetRegInfo (S, I + 1, R); + } + CondV = (CondC && CondV) || (R & PSTATE_V) == 0; + CondZN = (CondC && CondZN) || (R & PSTATE_ZN) == 0; + /* This is done last as it could change the info used by the two above */ + CondC = CondC || (R & (REG_A | PSTATE_C)) == 0; + if (CondC && CondV && CondZN) { + /* ?+0, ?-0 or result unused -> remove */ + CS_DelEntry (S, I); + ++Changes; + } + } else if (E->OPC == OP65_ADC && In->RegA == 0) { + /* 0 + arg. In this case we need only care about the C/V flags and + ** let the load set the Z/N flags properly. + */ + int CondC = PStatesAreClear (In->PFlags, PSTATE_C); + int CondV = PStatesAreClear (In->PFlags, PSTATE_V); + unsigned R = (CondC ? 0 : REG_A | PSTATE_C) | (CondC && CondV ? 0 : PSTATE_V); + if (R) { + R = GetRegInfo (S, I + 1, R); + } + CondV = (CondC && CondV) || (R & PSTATE_V) == 0; + CondC = CondC || (R & (REG_A | PSTATE_C)) == 0; + if (CondC && CondV) { + /* 0 + arg -> replace with lda arg */ + CE_ReplaceOPC (E, OP65_LDA); + ++Changes; + } } break; case OP65_AND: - if (CE_IsKnownImm (E, 0xFF)) { + if (CE_IsKnownImm (E, 0xFF) && + ((In->ZNRegs & ZNREG_A) != 0 || + (GetRegInfo (S, I + 1, PSTATE_ZN) & PSTATE_ZN) == 0)) { /* AND with 0xFF, remove */ CS_DelEntry (S, I); ++Changes; @@ -1293,7 +1329,9 @@ unsigned OptPrecalc (CodeSeg* S) break; case OP65_ORA: - if (CE_IsKnownImm (E, 0x00)) { + if (CE_IsKnownImm (E, 0x00) && + ((In->ZNRegs & ZNREG_A) != 0 || + (GetRegInfo (S, I + 1, PSTATE_ZN) & PSTATE_ZN) == 0)) { /* ORA with zero, remove */ CS_DelEntry (S, I); ++Changes; @@ -1310,6 +1348,23 @@ unsigned OptPrecalc (CodeSeg* S) } break; + case OP65_EOR: + if (CE_IsKnownImm (E, 0x00) && + ((In->ZNRegs & ZNREG_A) != 0 || + (GetRegInfo (S, I + 1, PSTATE_ZN) & PSTATE_ZN) == 0)) { + /* EOR with zero, remove */ + CS_DelEntry (S, I); + ++Changes; + } else if (RegValIsKnown (Out->RegA)) { + /* Accu op zp with known contents */ + Arg = MakeHexArg (Out->RegA); + } else if (In->RegA == 0) { + /* EOR but A contains 0x00 - replace by lda */ + CE_ReplaceOPC (E, OP65_LDA); + ++Changes; + } + break; + default: break; diff --git a/src/cc65/copttest.c b/src/cc65/copttest.c index 5628a42c3..f2d55244f 100644 --- a/src/cc65/copttest.c +++ b/src/cc65/copttest.c @@ -153,7 +153,7 @@ unsigned OptTest2 (CodeSeg* S) (L[2]->Info & OF_FBRA) != 0 && L[1]->AM == L[0]->AM && strcmp (L[0]->Arg, L[1]->Arg) == 0 && - (GetRegInfo (S, I+2, L[1]->Chg) & L[1]->Chg) == 0) { + (GetRegInfo (S, I+2, L[1]->Chg & ~PSTATE_ZN) & L[1]->Chg & ~PSTATE_ZN) == 0) { /* Remove the load */ CS_DelEntry (S, I+1); From 079f4a99dd32444d95fd916dca966827c6a07b65 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 13 Sep 2020 09:14:51 +0800 Subject: [PATCH 0508/2710] Added processor state info to the OPCDesc table. However, since some opcodes are affected by the addressing mode, this info is unused in codegen/optimizer but just as quick in-code documentation/hints. --- src/cc65/opcodes.c | 342 ++++++++++++++++++++++----------------------- src/cc65/opcodes.h | 4 +- 2 files changed, 173 insertions(+), 173 deletions(-) diff --git a/src/cc65/opcodes.c b/src/cc65/opcodes.c index 4ec25f3bd..3c02c84c4 100644 --- a/src/cc65/opcodes.c +++ b/src/cc65/opcodes.c @@ -61,394 +61,394 @@ const OPCDesc OPCTable[OP65_COUNT] = { { OP65_ADC, /* opcode */ "adc", /* mnemonic */ 0, /* size */ - REG_A, /* use */ - REG_A, /* chg */ - OF_SETF | OF_READ /* flags */ + OF_SETF | OF_READ, /* flags */ + REG_A | PSTATE_C, /* use */ + REG_A | PSTATE_CZVN /* chg */ }, { OP65_AND, /* opcode */ "and", /* mnemonic */ 0, /* size */ + OF_SETF | OF_READ, /* flags */ REG_A, /* use */ - REG_A, /* chg */ - OF_SETF | OF_READ /* flags */ + REG_A | PSTATE_ZN /* chg */ }, { OP65_ASL, /* opcode */ "asl", /* mnemonic */ 0, /* size */ + OF_SETF | OF_NOIMP | OF_RMW, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_SETF | OF_NOIMP | OF_RMW /* flags */ + PSTATE_CZN /* chg */ }, { OP65_BCC, /* opcode */ "bcc", /* mnemonic */ 2, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA /* flags */ + OF_CBRA, /* flags */ + PSTATE_C, /* use */ + REG_NONE /* chg */ }, { OP65_BCS, /* opcode */ "bcs", /* mnemonic */ 2, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA /* flags */ + OF_CBRA, /* flags */ + PSTATE_C, /* use */ + REG_NONE /* chg */ }, { OP65_BEQ, /* opcode */ "beq", /* mnemonic */ 2, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA | OF_ZBRA | OF_FBRA /* flags */ + OF_CBRA | OF_ZBRA | OF_FBRA, /* flags */ + PSTATE_Z, /* use */ + REG_NONE /* chg */ }, { OP65_BIT, /* opcode */ "bit", /* mnemonic */ 0, /* size */ + OF_READ, /* flags */ REG_A, /* use */ - REG_NONE, /* chg */ - OF_READ /* flags */ + PSTATE_ZVN /* chg */ }, { OP65_BMI, /* opcode */ "bmi", /* mnemonic */ 2, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA | OF_FBRA /* flags */ + OF_CBRA | OF_FBRA, /* flags */ + PSTATE_N, /* use */ + REG_NONE /* chg */ }, { OP65_BNE, /* opcode */ "bne", /* mnemonic */ 2, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA | OF_ZBRA | OF_FBRA /* flags */ + OF_CBRA | OF_ZBRA | OF_FBRA, /* flags */ + PSTATE_Z, /* use */ + REG_NONE /* chg */ }, { OP65_BPL, /* opcode */ "bpl", /* mnemonic */ 2, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA | OF_FBRA /* flags */ + OF_CBRA | OF_FBRA, /* flags */ + PSTATE_N, /* use */ + REG_NONE /* chg */ }, { OP65_BRA, /* opcode */ "bra", /* mnemonic */ 2, /* size */ + OF_UBRA, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_UBRA /* flags */ + REG_NONE /* chg */ }, { OP65_BRK, /* opcode */ "brk", /* mnemonic */ 1, /* size */ + OF_NONE, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + PSTATE_B /* chg */ }, { OP65_BVC, /* opcode */ "bvc", /* mnemonic */ 2, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA /* flags */ + OF_CBRA, /* flags */ + PSTATE_V, /* use */ + REG_NONE /* chg */ }, { OP65_BVS, /* opcode */ "bvs", /* mnemonic */ 2, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA /* flags */ + OF_CBRA, /* flags */ + PSTATE_V, /* use */ + REG_NONE /* chg */ }, { OP65_CLC, /* opcode */ "clc", /* mnemonic */ 1, /* size */ + OF_NONE, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + PSTATE_C /* chg */ }, { OP65_CLD, /* opcode */ "cld", /* mnemonic */ 1, /* size */ + OF_NONE, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + PSTATE_D /* chg */ }, { OP65_CLI, /* opcode */ "cli", /* mnemonic */ 1, /* size */ + OF_NONE, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + PSTATE_I /* chg */ }, { OP65_CLV, /* opcode */ "clv", /* mnemonic */ 1, /* size */ + OF_NONE, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + PSTATE_V /* chg */ }, { OP65_CMP, /* opcode */ "cmp", /* mnemonic */ 0, /* size */ + OF_SETF | OF_CMP | OF_READ, /* flags */ REG_A, /* use */ - REG_NONE, /* chg */ - OF_SETF | OF_CMP | OF_READ /* flags */ + PSTATE_CZN /* chg */ }, { OP65_CPX, /* opcode */ "cpx", /* mnemonic */ 0, /* size */ + OF_SETF | OF_CMP | OF_READ, /* flags */ REG_X, /* use */ - REG_NONE, /* chg */ - OF_SETF | OF_CMP | OF_READ /* flags */ + PSTATE_CZN /* chg */ }, { OP65_CPY, /* opcode */ "cpy", /* mnemonic */ 0, /* size */ + OF_SETF | OF_CMP | OF_READ, /* flags */ REG_Y, /* use */ - REG_NONE, /* chg */ - OF_SETF | OF_CMP | OF_READ /* flags */ + PSTATE_CZN /* chg */ }, { OP65_DEA, /* opcode */ "dea", /* mnemonic */ 1, /* size */ + OF_REG_INCDEC | OF_SETF, /* flags */ REG_A, /* use */ - REG_A, /* chg */ - OF_REG_INCDEC | OF_SETF /* flags */ + REG_A | PSTATE_ZN /* chg */ }, { OP65_DEC, /* opcode */ "dec", /* mnemonic */ 0, /* size */ + OF_SETF | OF_NOIMP | OF_RMW, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_SETF | OF_NOIMP | OF_RMW /* flags */ + PSTATE_ZN /* chg */ }, { OP65_DEX, /* opcode */ "dex", /* mnemonic */ 1, /* size */ + OF_REG_INCDEC | OF_SETF, /* flags */ REG_X, /* use */ - REG_X, /* chg */ - OF_REG_INCDEC | OF_SETF /* flags */ + REG_X | PSTATE_ZN /* chg */ }, { OP65_DEY, /* opcode */ "dey", /* mnemonic */ 1, /* size */ + OF_REG_INCDEC | OF_SETF, /* flags */ REG_Y, /* use */ - REG_Y, /* chg */ - OF_REG_INCDEC | OF_SETF /* flags */ + REG_Y | PSTATE_ZN /* chg */ }, { OP65_EOR, /* opcode */ "eor", /* mnemonic */ 0, /* size */ + OF_SETF | OF_READ, /* flags */ REG_A, /* use */ - REG_A, /* chg */ - OF_SETF | OF_READ /* flags */ + REG_A | PSTATE_ZN /* chg */ }, { OP65_INA, /* opcode */ "ina", /* mnemonic */ 1, /* size */ + OF_REG_INCDEC | OF_SETF, /* flags */ REG_A, /* use */ - REG_A, /* chg */ - OF_REG_INCDEC | OF_SETF /* flags */ + REG_A | PSTATE_ZN /* chg */ }, { OP65_INC, /* opcode */ "inc", /* mnemonic */ 0, /* size */ + OF_SETF | OF_NOIMP | OF_RMW, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_SETF | OF_NOIMP | OF_RMW /* flags */ + PSTATE_ZN /* chg */ }, { OP65_INX, /* opcode */ "inx", /* mnemonic */ 1, /* size */ + OF_REG_INCDEC | OF_SETF, /* flags */ REG_X, /* use */ - REG_X, /* chg */ - OF_REG_INCDEC | OF_SETF /* flags */ + REG_X | PSTATE_ZN /* chg */ }, { OP65_INY, /* opcode */ "iny", /* mnemonic */ 1, /* size */ + OF_REG_INCDEC | OF_SETF, /* flags */ REG_Y, /* use */ - REG_Y, /* chg */ - OF_REG_INCDEC | OF_SETF /* flags */ + REG_Y | PSTATE_ZN /* chg */ }, { OP65_JCC, /* opcode */ "jcc", /* mnemonic */ 5, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA | OF_LBRA /* flags */ + OF_CBRA | OF_LBRA, /* flags */ + PSTATE_C, /* use */ + REG_NONE /* chg */ }, { OP65_JCS, /* opcode */ "jcs", /* mnemonic */ 5, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA | OF_LBRA /* flags */ + OF_CBRA | OF_LBRA, /* flags */ + PSTATE_C, /* use */ + REG_NONE /* chg */ }, { OP65_JEQ, /* opcode */ "jeq", /* mnemonic */ 5, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA | OF_LBRA | OF_ZBRA | OF_FBRA /* flags */ + OF_CBRA | OF_LBRA | OF_ZBRA | OF_FBRA, /* flags */ + PSTATE_Z, /* use */ + REG_NONE /* chg */ }, { OP65_JMI, /* opcode */ "jmi", /* mnemonic */ 5, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA | OF_LBRA | OF_FBRA /* flags */ + OF_CBRA | OF_LBRA | OF_FBRA, /* flags */ + PSTATE_N, /* use */ + REG_NONE /* chg */ }, { OP65_JMP, /* opcode */ "jmp", /* mnemonic */ 3, /* size */ + OF_UBRA | OF_LBRA | OF_READ, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_UBRA | OF_LBRA | OF_READ /* flags */ + REG_NONE /* chg */ }, { OP65_JNE, /* opcode */ "jne", /* mnemonic */ 5, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA | OF_LBRA | OF_ZBRA | OF_FBRA /* flags */ + OF_CBRA | OF_LBRA | OF_ZBRA | OF_FBRA, /* flags */ + PSTATE_Z, /* use */ + REG_NONE /* chg */ }, { OP65_JPL, /* opcode */ "jpl", /* mnemonic */ 5, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA | OF_LBRA | OF_FBRA /* flags */ + OF_CBRA | OF_LBRA | OF_FBRA, /* flags */ + PSTATE_N, /* use */ + REG_NONE /* chg */ }, { OP65_JSR, /* opcode */ "jsr", /* mnemonic */ 3, /* size */ + OF_CALL | OF_READ, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CALL | OF_READ /* flags */ + REG_NONE /* chg */ }, { OP65_JVC, /* opcode */ "jvc", /* mnemonic */ 5, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA | OF_LBRA /* flags */ + OF_CBRA | OF_LBRA, /* flags */ + PSTATE_V, /* use */ + REG_NONE /* chg */ }, { OP65_JVS, /* opcode */ "jvs", /* mnemonic */ 5, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_CBRA | OF_LBRA /* flags */ + OF_CBRA | OF_LBRA, /* flags */ + PSTATE_V, /* use */ + REG_NONE /* chg */ }, { OP65_LDA, /* opcode */ "lda", /* mnemonic */ 0, /* size */ + OF_LOAD | OF_SETF | OF_READ, /* flags */ REG_NONE, /* use */ - REG_A, /* chg */ - OF_LOAD | OF_SETF | OF_READ /* flags */ + REG_A | PSTATE_ZN /* chg */ }, { OP65_LDX, /* opcode */ "ldx", /* mnemonic */ 0, /* size */ + OF_LOAD | OF_SETF | OF_READ, /* flags */ REG_NONE, /* use */ - REG_X, /* chg */ - OF_LOAD | OF_SETF | OF_READ /* flags */ + REG_X | PSTATE_ZN /* chg */ }, { OP65_LDY, /* opcode */ "ldy", /* mnemonic */ 0, /* size */ + OF_LOAD | OF_SETF | OF_READ, /* flags */ REG_NONE, /* use */ - REG_Y, /* chg */ - OF_LOAD | OF_SETF | OF_READ /* flags */ + REG_Y | PSTATE_ZN /* chg */ }, { OP65_LSR, /* opcode */ "lsr", /* mnemonic */ 0, /* size */ + OF_SETF | OF_NOIMP | OF_RMW, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_SETF | OF_NOIMP | OF_RMW /* flags */ + PSTATE_CZN /* chg */ }, { OP65_NOP, /* opcode */ "nop", /* mnemonic */ 1, /* size */ + OF_NONE, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + REG_NONE /* chg */ }, { OP65_ORA, /* opcode */ "ora", /* mnemonic */ 0, /* size */ + OF_SETF | OF_READ, /* flags */ REG_A, /* use */ - REG_A, /* chg */ - OF_SETF | OF_READ /* flags */ + REG_A | PSTATE_ZN /* chg */ }, { OP65_PHA, /* opcode */ "pha", /* mnemonic */ 1, /* size */ + OF_NONE, /* flags */ REG_A, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + REG_NONE /* chg */ }, { OP65_PHP, /* opcode */ "php", /* mnemonic */ 1, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + OF_NONE, /* flags */ + PSTATE_ALL, /* use */ + REG_NONE /* chg */ }, { OP65_PHX, /* opcode */ "phx", /* mnemonic */ 1, /* size */ + OF_NONE, /* flags */ REG_X, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + REG_NONE /* chg */ }, { OP65_PHY, /* opcode */ "phy", /* mnemonic */ 1, /* size */ + OF_NONE, /* flags */ REG_Y, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + REG_NONE /* chg */ }, { OP65_PLA, /* opcode */ "pla", /* mnemonic */ 1, /* size */ + OF_SETF, /* flags */ REG_NONE, /* use */ - REG_A, /* chg */ - OF_SETF /* flags */ + REG_A | PSTATE_ZN /* chg */ }, { OP65_PLP, /* opcode */ "plp", /* mnemonic */ 1, /* size */ + OF_NONE, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + PSTATE_ALL /* chg */ }, { OP65_PLX, /* opcode */ "plx", /* mnemonic */ 1, /* size */ + OF_SETF, /* flags */ REG_NONE, /* use */ - REG_X, /* chg */ - OF_SETF /* flags */ + REG_X | PSTATE_ZN /* chg */ }, { OP65_PLY, /* opcode */ "ply", /* mnemonic */ 1, /* size */ + OF_SETF, /* flags */ REG_NONE, /* use */ - REG_Y, /* chg */ - OF_SETF /* flags */ + REG_Y | PSTATE_ZN /* chg */ }, { OP65_ROL, /* opcode */ "rol", /* mnemonic */ 0, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_SETF | OF_NOIMP | OF_RMW /* flags */ + OF_SETF | OF_NOIMP | OF_RMW, /* flags */ + PSTATE_C, /* use */ + PSTATE_CZN /* chg */ }, { OP65_ROR, /* opcode */ "ror", /* mnemonic */ 0, /* size */ - REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_SETF | OF_NOIMP | OF_RMW /* flags */ + OF_SETF | OF_NOIMP | OF_RMW, /* flags */ + PSTATE_C, /* use */ + PSTATE_CZN /* chg */ }, /* Mark RTI as "uses all registers but doesn't change them", so the ** optimizer won't remove preceeding loads. @@ -456,135 +456,135 @@ const OPCDesc OPCTable[OP65_COUNT] = { { OP65_RTI, /* opcode */ "rti", /* mnemonic */ 1, /* size */ + OF_RET, /* flags */ REG_AXY, /* use */ - REG_NONE, /* chg */ - OF_RET /* flags */ + PSTATE_ALL /* chg */ }, { OP65_RTS, /* opcode */ "rts", /* mnemonic */ 1, /* size */ + OF_RET, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_RET /* flags */ + REG_NONE /* chg */ }, { OP65_SBC, /* opcode */ "sbc", /* mnemonic */ 0, /* size */ - REG_A, /* use */ - REG_A, /* chg */ - OF_SETF | OF_READ /* flags */ + OF_SETF | OF_READ, /* flags */ + REG_A | PSTATE_C, /* use */ + REG_A | PSTATE_CZVN /* chg */ }, { OP65_SEC, /* opcode */ "sec", /* mnemonic */ 1, /* size */ + OF_NONE, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + PSTATE_C /* chg */ }, { OP65_SED, /* opcode */ "sed", /* mnemonic */ 1, /* size */ + OF_NONE, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + PSTATE_D /* chg */ }, { OP65_SEI, /* opcode */ "sei", /* mnemonic */ 1, /* size */ + OF_NONE, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + PSTATE_I /* chg */ }, { OP65_STA, /* opcode */ "sta", /* mnemonic */ 0, /* size */ + OF_STORE | OF_WRITE, /* flags */ REG_A, /* use */ - REG_NONE, /* chg */ - OF_STORE | OF_WRITE /* flags */ + REG_NONE /* chg */ }, { OP65_STP, /* opcode */ "stp", /* mnemonic */ 1, /* size */ + OF_NONE, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_NONE /* flags */ + REG_NONE /* chg */ }, { OP65_STX, /* opcode */ "stx", /* mnemonic */ 0, /* size */ + OF_STORE | OF_WRITE, /* flags */ REG_X, /* use */ - REG_NONE, /* chg */ - OF_STORE | OF_WRITE /* flags */ + REG_NONE /* chg */ }, { OP65_STY, /* opcode */ "sty", /* mnemonic */ 0, /* size */ + OF_STORE | OF_WRITE, /* flags */ REG_Y, /* use */ - REG_NONE, /* chg */ - OF_STORE | OF_WRITE /* flags */ + REG_NONE /* chg */ }, { OP65_STZ, /* opcode */ "stz", /* mnemonic */ 0, /* size */ + OF_STORE | OF_WRITE, /* flags */ REG_NONE, /* use */ - REG_NONE, /* chg */ - OF_STORE | OF_WRITE /* flags */ + REG_NONE /* chg */ }, { OP65_TAX, /* opcode */ "tax", /* mnemonic */ 1, /* size */ + OF_XFR | OF_SETF, /* flags */ REG_A, /* use */ - REG_X, /* chg */ - OF_XFR | OF_SETF /* flags */ + REG_X | PSTATE_ZN /* chg */ }, { OP65_TAY, /* opcode */ "tay", /* mnemonic */ 1, /* size */ + OF_XFR | OF_SETF, /* flags */ REG_A, /* use */ - REG_Y, /* chg */ - OF_XFR | OF_SETF /* flags */ + REG_Y | PSTATE_ZN /* chg */ }, { OP65_TRB, /* opcode */ "trb", /* mnemonic */ 0, /* size */ + OF_RMW, /* flags */ REG_A, /* use */ - REG_NONE, /* chg */ - OF_RMW /* flags */ + PSTATE_Z /* chg */ }, { OP65_TSB, /* opcode */ "tsb", /* mnemonic */ 0, /* size */ + OF_RMW, /* flags */ REG_A, /* use */ - REG_NONE, /* chg */ - OF_RMW /* flags */ + PSTATE_Z /* chg */ }, { OP65_TSX, /* opcode */ "tsx", /* mnemonic */ 1, /* size */ + OF_XFR | OF_SETF, /* flags */ REG_NONE, /* use */ - REG_X, /* chg */ - OF_XFR | OF_SETF /* flags */ + REG_X | PSTATE_ZN /* chg */ }, { OP65_TXA, /* opcode */ "txa", /* mnemonic */ 1, /* size */ + OF_XFR | OF_SETF, /* flags */ REG_X, /* use */ - REG_A, /* chg */ - OF_XFR | OF_SETF /* flags */ + REG_A | PSTATE_ZN /* chg */ }, { OP65_TXS, /* opcode */ "txs", /* mnemonic */ 1, /* size */ + OF_XFR, /* flags */ REG_X, /* use */ - REG_NONE, /* chg */ - OF_XFR /* flags */ + REG_NONE /* chg */ }, { OP65_TYA, /* opcode */ "tya", /* mnemonic */ 1, /* size */ + OF_XFR | OF_SETF, /* flags */ REG_Y, /* use */ - REG_A, /* chg */ - OF_XFR | OF_SETF /* flags */ + REG_A | PSTATE_ZN /* chg */ }, }; diff --git a/src/cc65/opcodes.h b/src/cc65/opcodes.h index 162647eff..980cc649a 100644 --- a/src/cc65/opcodes.h +++ b/src/cc65/opcodes.h @@ -192,9 +192,9 @@ typedef struct { opc_t OPC; /* Opcode */ char Mnemo[9]; /* Mnemonic */ unsigned char Size; /* Size, 0 = check addressing mode */ - unsigned short Use; /* Registers used by this insn */ - unsigned short Chg; /* Registers changed by this insn */ unsigned short Info; /* Additional information */ + unsigned int Use; /* Registers used by this insn */ + unsigned int Chg; /* Registers changed by this insn */ } OPCDesc; /* Opcode description table */ From de630a12452d76ac3ab9fd88482925d9428d8d5c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 13 Sep 2020 09:15:07 +0800 Subject: [PATCH 0509/2710] Fixed quick hack for known registers after calling certain runtime functions, and new quick hack for tosshrax. --- src/cc65/codeent.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 195f7199f..3de694829 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -1418,10 +1418,10 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Out->RegX = (In->RegX ^ 0xFF); } } else if (strcmp (E->Arg, "tosandax") == 0) { - if (In->RegA == 0) { + if (RegValIsKnown (In->RegA) && In->RegA == 0) { Out->RegA = 0; } - if (In->RegX == 0) { + if (RegValIsKnown (In->RegX) && In->RegX == 0) { Out->RegX = 0; } } else if (strcmp (E->Arg, "tosaslax") == 0) { @@ -1430,16 +1430,20 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Out->RegA = 0; } } else if (strcmp (E->Arg, "tosorax") == 0) { - if (In->RegA == 0xFF) { + if (RegValIsKnown (In->RegA) && In->RegA == 0xFF) { Out->RegA = 0xFF; } - if (In->RegX == 0xFF) { + if (RegValIsKnown (In->RegX) && In->RegX == 0xFF) { Out->RegX = 0xFF; } } else if (strcmp (E->Arg, "tosshlax") == 0) { - if ((In->RegA & 0x0F) >= 8) { + if (RegValIsKnown (In->RegA) && (In->RegA & 0x0F) >= 8) { Out->RegA = 0; } + } else if (strcmp (E->Arg, "tosshrax") == 0) { + if (RegValIsKnown (In->RegA) && (In->RegA & 0x0F) >= 8) { + Out->RegX = 0; + } } else if (strcmp (E->Arg, "bcastax") == 0 || strcmp (E->Arg, "bnegax") == 0 || FindBoolCmpCond (E->Arg) != CMP_INV || From bf4b19501699fe1ab286878ff8c23f4296cf82d2 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 18 Sep 2020 15:50:26 -0400 Subject: [PATCH 0510/2710] Added some comments that explain where the g_branch() code generator can and can't be used. --- src/cc65/codegen.c | 6 ++++++ src/cc65/codegen.h | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 031e4e81a..cb448d738 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -2447,6 +2447,8 @@ void g_falsejump (unsigned flags attribute ((unused)), unsigned label) void g_branch (unsigned Label) /* Branch unconditionally to Label if the CPU has the BRA instruction. ** Otherwise, jump to Label. +** Use this function, instead of g_jump(), only where it is certain that +** the label cannot be farther away from the branch than -128/+127 bytes. */ { if ((CPUIsets[CPU] & CPU_ISET_65SC02) != 0) { @@ -4542,6 +4544,10 @@ void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, int IsSigned, AddCodeLine ("pla"); g_or (FullWidthFlags | CF_CONST, ~Mask); + /* We can generate a branch, instead of a jump, here because we know + ** that only a few instructions will be put between here and where + ** DoneLabel will be defined. + */ unsigned DoneLabel = GetLocalLabel (); g_branch (DoneLabel); diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index 3054a39b3..d6d3d2370 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -416,6 +416,8 @@ void g_falsejump (unsigned flags, unsigned label); void g_branch (unsigned Label); /* Branch unconditionally to Label if the CPU has the BRA instruction. ** Otherwise, jump to Label. +** Use this function, instead of g_jump(), only where it is certain that +** the label cannot be farther away from the branch than -128/+127 bytes. */ void g_lateadjustSP (unsigned label); From 0b64ca0d7dfba4e13f5b75634704415e77054b59 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 20 Sep 2020 16:09:58 -0400 Subject: [PATCH 0511/2710] Fixed the ld65 cx16 Assembly configuration file. The CODE segment immediately follows the EXEHDR segment. Added a segment for the zero-page area that's free when the BASIC ROM isn't used. --- cfg/cx16-asm.cfg | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/cfg/cx16-asm.cfg b/cfg/cx16-asm.cfg index 3c24bd56f..c3c08aec3 100644 --- a/cfg/cx16-asm.cfg +++ b/cfg/cx16-asm.cfg @@ -1,22 +1,27 @@ +# Assembly configuration for R38 + FEATURES { STARTADDRESS: default = $0801; } SYMBOLS { __LOADADDR__: type = import; +# Putting "-u __EXEHDR__" on cl65's command line will add a BASIC RUN stub to your program. +# __EXEHDR__: type = import; __HIMEM__: type = weak, value = $9F00; } MEMORY { ZP: file = "", start = $0022, size = $0080 - $0022, define = yes; + ZP2: file = "", start = $00A9, size = $0100 - $00A9; LOADADDR: file = %O, start = %S - 2, size = $0002; MAIN: file = %O, start = %S, size = __HIMEM__ - %S; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; - EXTZP: load = ZP, type = zp, optional = yes; + EXTZP: load = ZP2, type = zp, optional = yes; # OK if BASIC functions not used LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = MAIN, type = ro, optional = yes; - LOWCODE: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; + LOWCODE: load = MAIN, type = ro, optional = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; BSS: load = MAIN, type = bss, define = yes; From 41bd8d909b8b43a31187d9720a83b768096c153d Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 20 Sep 2020 19:55:25 -0400 Subject: [PATCH 0512/2710] Added ld65's bank attribute to the cx16 library's bank (overlay) configuration file. That attribute makes it easier for Assembly code to know which bank holds a label. --- cfg/cx16-bank.cfg | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/cfg/cx16-bank.cfg b/cfg/cx16-bank.cfg index 1f998f188..36b0edb02 100644 --- a/cfg/cx16-bank.cfg +++ b/cfg/cx16-bank.cfg @@ -19,35 +19,35 @@ MEMORY { # BRAM00ADDR: file = "%O.00", start = __BANKRAMSTART__ - 2, size = $0002; # BRAM00: file = "%O.00", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; BRAM01ADDR: file = "%O.01", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM01: file = "%O.01", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM01: file = "%O.01", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $01; BRAM02ADDR: file = "%O.02", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM02: file = "%O.02", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM02: file = "%O.02", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $02; BRAM03ADDR: file = "%O.03", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM03: file = "%O.03", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM03: file = "%O.03", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $03; BRAM04ADDR: file = "%O.04", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM04: file = "%O.04", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM04: file = "%O.04", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $04; BRAM05ADDR: file = "%O.05", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM05: file = "%O.05", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM05: file = "%O.05", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $05; BRAM06ADDR: file = "%O.06", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM06: file = "%O.06", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM06: file = "%O.06", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $06; BRAM07ADDR: file = "%O.07", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM07: file = "%O.07", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM07: file = "%O.07", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $07; BRAM08ADDR: file = "%O.08", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM08: file = "%O.08", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM08: file = "%O.08", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $08; BRAM09ADDR: file = "%O.09", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM09: file = "%O.09", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM09: file = "%O.09", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $09; BRAM0AADDR: file = "%O.0a", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM0A: file = "%O.0a", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM0A: file = "%O.0a", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0A; BRAM0BADDR: file = "%O.0b", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM0B: file = "%O.0b", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM0B: file = "%O.0b", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0B; BRAM0CADDR: file = "%O.0c", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM0C: file = "%O.0c", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM0C: file = "%O.0c", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0C; BRAM0DADDR: file = "%O.0d", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM0D: file = "%O.0d", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM0D: file = "%O.0d", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0D; BRAM0EADDR: file = "%O.0e", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM0E: file = "%O.0e", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM0E: file = "%O.0e", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0E; BRAM0FADDR: file = "%O.0f", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM0F: file = "%O.0f", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; + BRAM0F: file = "%O.0f", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0F; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; From dc147519542736efa003ec6a7e627eba86914640 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 22 Sep 2020 00:02:12 -0400 Subject: [PATCH 0513/2710] Exported the direct Kernal entries that were moved from target headers to "cbm_kernal.inc". --- libsrc/c128/kernal.s | 11 ++++++++++- libsrc/c16/kernal.s | 5 ++++- libsrc/c64/kernal.s | 7 ++++++- libsrc/vic20/kernal.s | 6 +++++- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/libsrc/c128/kernal.s b/libsrc/c128/kernal.s index f74ab3b1a..138473218 100644 --- a/libsrc/c128/kernal.s +++ b/libsrc/c128/kernal.s @@ -1,11 +1,20 @@ ; ; Ullrich von Bassewitz, 19.11.2002 ; -; C128 kernal functions +; C128 Kernal functions ; .include "cbm_kernal.inc" + .export KBDREAD + .export CLRSCR + .export PRINT + .export NEWLINE + .export CURS_SET + .export CURS_ON + .export CURS_OFF + .export NMIEXIT + .export C64MODE .export SWAPPER .export SETBNK diff --git a/libsrc/c16/kernal.s b/libsrc/c16/kernal.s index f814b2c1f..15ce35772 100644 --- a/libsrc/c16/kernal.s +++ b/libsrc/c16/kernal.s @@ -1,11 +1,14 @@ ; ; Ullrich von Bassewitz, 19.11.2002 ; -; C16 kernal functions +; C16 Kernal functions ; .include "cbm_kernal.inc" + .export CLRSCR + .export KBDREAD + .export CINT .export IOINIT .export RAMTAS diff --git a/libsrc/c64/kernal.s b/libsrc/c64/kernal.s index acbf22370..771872082 100644 --- a/libsrc/c64/kernal.s +++ b/libsrc/c64/kernal.s @@ -1,11 +1,16 @@ ; ; Ullrich von Bassewitz, 19.11.2002 ; -; C64 kernal functions +; C64 Kernal functions ; .include "cbm_kernal.inc" + .export CLRSCR + .export KBDREAD + .export UPDCRAMPTR + .export NMIEXIT + .export CINT .export IOINIT .export RAMTAS diff --git a/libsrc/vic20/kernal.s b/libsrc/vic20/kernal.s index ff16a019c..4539495b1 100644 --- a/libsrc/vic20/kernal.s +++ b/libsrc/vic20/kernal.s @@ -1,11 +1,15 @@ ; ; Ullrich von Bassewitz, 19.11.2002 ; -; VIC20 kernal functions +; VIC20 Kernal functions ; .include "cbm_kernal.inc" + .export CLRSCR + .export KBDREAD + .export UPDCRAMPTR + .export CINT .export IOINIT .export RAMTAS From d906204e84861149c363a82d205de4164271760c Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 22 Sep 2020 12:31:27 -0400 Subject: [PATCH 0514/2710] Allowed UPDCRAMPTR to be exported as a constuctor in the VIC-20 library. --- libsrc/vic20/kernal.s | 1 - 1 file changed, 1 deletion(-) diff --git a/libsrc/vic20/kernal.s b/libsrc/vic20/kernal.s index 4539495b1..94a5ec1a4 100644 --- a/libsrc/vic20/kernal.s +++ b/libsrc/vic20/kernal.s @@ -8,7 +8,6 @@ .export CLRSCR .export KBDREAD - .export UPDCRAMPTR .export CINT .export IOINIT From 07ea5259ac1cfe1ee2fcdd363fb75cc2cf251175 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 4 Sep 2020 12:06:42 -0400 Subject: [PATCH 0515/2710] Changed a cc65 error message to say that the sizes of bit-field types (not bit-fields) are limited. --- src/cc65/declare.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 8d0a1097c..6c001c117 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -762,11 +762,11 @@ static int ParseFieldWidth (Declaration* Decl) } /* TODO: This can be relaxed to be any integral type, but - ** ParseStructInit currently only supports up to int. + ** ParseStructInit currently supports only up to int. */ if (SizeOf (Decl->Type) > SizeOf (type_uint)) { - /* Only int-sized or smaller types may be used for bit-fields for now */ - Error ("cc65 currently only supports char-sized and int-sized bit-fields"); + /* Only int-sized or smaller types may be used for bit-fields, for now */ + Error ("cc65 currently supports only char-sized and int-sized bit-field types"); return -1; } From ea957283308d45dbde8001c3067d5a2f985b36fe Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 8 Sep 2020 11:51:51 -0400 Subject: [PATCH 0516/2710] Avoided an avalanche of messages from bad bit-field declarations. Made cc65 replace a bad bit-field type with a good one, and always parse the field width. Shortenned a parameter name to a spelling that's consistent with other function headers. --- src/cc65/declare.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 6c001c117..0f604d45e 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -744,7 +744,7 @@ static SymEntry* ParseEnumDecl (const char* Name, unsigned* DSFlags) -static int ParseFieldWidth (Declaration* Decl) +static int ParseFieldWidth (Declaration* D) /* Parse an optional field width. Returns -1 if no field width is specified, ** otherwise the width of the field. */ @@ -754,20 +754,26 @@ static int ParseFieldWidth (Declaration* Decl) return -1; } - if (!IsClassInt (Decl->Type)) { + if (!IsClassInt (D->Type)) { /* Only integer types may be used for bit-fields */ Error ("Bit-field has invalid type '%s', must be integral", - GetBasicTypeName (Decl->Type)); - return -1; + GetBasicTypeName (D->Type)); + + /* Avoid a diagnostic storm by giving the bit-field the widest valid + ** signed type, and continuing to parse. + */ + D->Type[0].C = T_INT; } /* TODO: This can be relaxed to be any integral type, but ** ParseStructInit currently supports only up to int. */ - if (SizeOf (Decl->Type) > SizeOf (type_uint)) { + if (SizeOf (D->Type) > SizeOf (type_uint)) { /* Only int-sized or smaller types may be used for bit-fields, for now */ Error ("cc65 currently supports only char-sized and int-sized bit-field types"); - return -1; + + /* Avoid a diagnostic storm */ + D->Type[0].C = T_INT; } /* Read the width */ @@ -778,11 +784,11 @@ static int ParseFieldWidth (Declaration* Decl) Error ("Negative width in bit-field"); return -1; } - if (Expr.IVal > (long)(SizeOf (Decl->Type) * CHAR_BITS)) { + if (Expr.IVal > (long)(SizeOf (D->Type) * CHAR_BITS)) { Error ("Width of bit-field exceeds its type"); return -1; } - if (Expr.IVal == 0 && Decl->Ident[0] != '\0') { + if (Expr.IVal == 0 && D->Ident[0] != '\0') { Error ("Zero width for named bit-field"); return -1; } @@ -818,7 +824,7 @@ static unsigned PadWithBitField (unsigned StructSize, unsigned BitOffs) -static unsigned AliasAnonStructFields (const Declaration* Decl, SymEntry* Anon) +static unsigned AliasAnonStructFields (const Declaration* D, SymEntry* Anon) /* Create alias fields from an anon union/struct in the current lexical level. ** The function returns the count of created aliases. */ @@ -827,7 +833,7 @@ static unsigned AliasAnonStructFields (const Declaration* Decl, SymEntry* Anon) SymEntry* Alias; /* Get the pointer to the symbol table entry of the anon struct */ - SymEntry* Entry = GetESUSymEntry (Decl->Type); + SymEntry* Entry = GetESUSymEntry (D->Type); /* Get the symbol table containing the fields. If it is empty, there has ** been an error before, so bail out. From 81ac28ff71b05bd829db36f544a144a83ad1d481 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 18 Sep 2020 16:33:12 -0400 Subject: [PATCH 0517/2710] Used TAY/TYA instead of PHA/PLA when extracting a bit-field. Without optimization, it saves a few CPU cycles. With optimization, it saves more cycles and a few bytes. --- src/cc65/codegen.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index cb448d738..bc85ba1de 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -4511,8 +4511,8 @@ void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, int IsSigned, /* Handle signed bit-fields. */ if (IsSigned) { - /* Push A, since the sign bit test will destroy it. */ - AddCodeLine ("pha"); + /* Save .A because the sign-bit test will destroy it. */ + AddCodeLine ("tay"); /* Check sign bit */ unsigned SignBitPos = BitWidth - 1U; @@ -4520,7 +4520,7 @@ void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, int IsSigned, unsigned SignBitPosInByte = SignBitPos % CHAR_BITS; unsigned SignBitMask = 1U << SignBitPosInByte; - /* Move the correct byte to A. This can only be X for now, + /* Move the correct byte to .A. This can be only .X for now, ** but more cases will be needed to support long. */ switch (SignBitByte) { @@ -4538,10 +4538,10 @@ void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, int IsSigned, unsigned ZeroExtendLabel = GetLocalLabel (); AddCodeLine ("beq %s", LocalLabelName (ZeroExtendLabel)); - /* Pop A back and sign-extend if required; operating on the full result needs - ** to sign-extend into high byte, too. + /* Get back .A and sign-extend if required; operating on the full result needs + ** to sign-extend into the high byte, too. */ - AddCodeLine ("pla"); + AddCodeLine ("tya"); g_or (FullWidthFlags | CF_CONST, ~Mask); /* We can generate a branch, instead of a jump, here because we know @@ -4551,11 +4551,11 @@ void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, int IsSigned, unsigned DoneLabel = GetLocalLabel (); g_branch (DoneLabel); - /* Pop A back, then zero-extend. We need to duplicate the PLA, rather than move it before - ** the branch to share with the other label, because PLA changes some condition codes. + /* Get back .A, then zero-extend. We need to duplicate the TYA, rather than move it before + ** the branch to share with the other label, because TYA changes some condition codes. */ g_defcodelabel (ZeroExtendLabel); - AddCodeLine ("pla"); + AddCodeLine ("tya"); /* Zero the upper bits, the same as the unsigned path. */ if (ZeroExtendMask != 0) { From 99121688f82318b966929afac278c69411054b80 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 23 Sep 2020 23:51:24 +0200 Subject: [PATCH 0518/2710] added test related to issue #1263 --- test/misc/Makefile | 6 ++++++ test/misc/bug1263.c | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 test/misc/bug1263.c diff --git a/test/misc/Makefile b/test/misc/Makefile index 735f83065..f8832e77e 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -94,6 +94,12 @@ $(WORKDIR)/pptest2.$1.$2.prg: pptest2.c | $(WORKDIR) $(if $(QUIET),echo misc/pptest2.$1.$2.prg) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) +# should compile, but gives an error +$(WORKDIR)/bug1263.$1.$2.prg: pptest2.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." + $(if $(QUIET),echo misc/bug1263.$1.$2.prg) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(if $(QUIET),echo misc/endless.$1.$2.prg) diff --git a/test/misc/bug1263.c b/test/misc/bug1263.c new file mode 100644 index 000000000..457e64034 --- /dev/null +++ b/test/misc/bug1263.c @@ -0,0 +1,17 @@ + +/* bug #1263 - erroneous error for implicit function declaration */ + +#include <stdlib.h> + +enum E { I }; +extern int f(enum E); +int f(e) + enum E e; +{ + return 1; +} + +int main(void) +{ + return f(1) ? EXIT_SUCCESS : EXIT_FAILURE; +} From 6fdd90fa632a58edcbc08b6a44c4bad4aaa87338 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 23 Sep 2020 23:51:37 +0200 Subject: [PATCH 0519/2710] fix typo --- test/readme.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/readme.txt b/test/readme.txt index a8746ba60..0523482fd 100644 --- a/test/readme.txt +++ b/test/readme.txt @@ -13,7 +13,7 @@ compiler. The makefile in this directory _expects_ the tests to fail, because of that when an issue was fixed it will break the CI. The test should get - moved to /var in the PR fixing the issue, which will make CI pass again. + moved to /val in the PR fixing the issue, which will make CI pass again. No changes to makefiles are required! /asm - contains the assembler regression tests From 46ebb15c76f56fd9482058432039c391ce2f0f7a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 23 Sep 2020 23:57:25 +0200 Subject: [PATCH 0520/2710] test related to issue #1245 --- test/val/bug1245.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 test/val/bug1245.c diff --git a/test/val/bug1245.c b/test/val/bug1245.c new file mode 100644 index 000000000..2dda93790 --- /dev/null +++ b/test/val/bug1245.c @@ -0,0 +1,12 @@ +/* bug #1245 - ICE for enums with int initializers */ + +#include <stdlib.h> + +enum E { + X = 1000, +} e = 3; + +int main(void) +{ + return EXIT_SUCCESS; +} From b3491e3d9a5d85ca6e62516398c329dcaa6cfe3d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 23 Sep 2020 23:57:36 +0200 Subject: [PATCH 0521/2710] test related to issue #1244 --- test/val/bug1244.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 test/val/bug1244.c diff --git a/test/val/bug1244.c b/test/val/bug1244.c new file mode 100644 index 000000000..fb499a0c8 --- /dev/null +++ b/test/val/bug1244.c @@ -0,0 +1,18 @@ + +/* bug #1244 - ICE for enum bit-fields */ + +#include <stdlib.h> + +enum E { + L = 65535L /* or U = 65535U */ +}; + +struct S { + enum E a : 16; +} s; + +int main(void) +{ + return EXIT_SUCCESS; +} + From a86644eff1b0102a95eada977b7fb23b5d2e56fb Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 24 Sep 2020 00:08:36 +0200 Subject: [PATCH 0522/2710] test related to issue #1221 --- test/val/bug1221.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 test/val/bug1221.c diff --git a/test/val/bug1221.c b/test/val/bug1221.c new file mode 100644 index 000000000..360a71162 --- /dev/null +++ b/test/val/bug1221.c @@ -0,0 +1,12 @@ +/* bug #1221 - Structs/unions as ternary operands */ + +int a; +struct S { int a; } s1, s2; +struct U { int a; } u1, u2; + +int main() +{ + a ? s1 : s2; /* BUG: should be OK */ + a ? u1 : u2; /* BUG: should be OK */ + return 0; +} From fb8b45e4794ee491cc92376e23eef082ad8ab31d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 24 Sep 2020 00:18:28 +0200 Subject: [PATCH 0523/2710] added note on how to manage the sample programs --- samples/README | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/samples/README b/samples/README index 73d048fca..3c9247c39 100644 --- a/samples/README +++ b/samples/README @@ -18,6 +18,10 @@ Please note: * Use "make disk" to build a disk image with all sample programs. + * All programs in the root of the "samples" directory have been written to + be portable and work on more than one target. Programs that are specific + to a certain target live in a subdirectory with the name of the target. + List of supplied sample programs: ----------------------------------------------------------------------------- From 97a1093ee09f5efd3569fc8bba9c10a55f4cfb36 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 24 Sep 2020 12:23:18 +0200 Subject: [PATCH 0524/2710] test related to issue #1222 --- test/val/bug1222.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 test/val/bug1222.c diff --git a/test/val/bug1222.c b/test/val/bug1222.c new file mode 100644 index 000000000..5e47e452e --- /dev/null +++ b/test/val/bug1222.c @@ -0,0 +1,12 @@ +/* bug #1222 - 'sizeof' issues */ + +#include <stdlib.h> + +int a[1]; +int b[sizeof ++a[42]]; /* should work as '++a[42]' is actually unevaluated */ + +int main(void) +{ + return EXIT_SUCCESS; +} + From 5ba9d28488a217d121cf334bb67897b71243c652 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 24 Sep 2020 16:16:16 +0200 Subject: [PATCH 0525/2710] test related to pr #1189 --- test/err/pr1189.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 test/err/pr1189.c diff --git a/test/err/pr1189.c b/test/err/pr1189.c new file mode 100644 index 000000000..af1d237f1 --- /dev/null +++ b/test/err/pr1189.c @@ -0,0 +1,12 @@ +/* pr #1189 - Fixed compiler CHECK failure when calling functions defined with duplicate param names */ + +void f(int a, int a) +{ + +} + +int main(void) +{ + f(0, 1); /* Check failed: (Param->Flags & SC_PARAM) != 0 */ + return 0; +} From 6fdb356db743dd986d479fffe994fff5e9045518 Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Thu, 24 Sep 2020 18:01:56 +0200 Subject: [PATCH 0526/2710] Simplify Gamate tile redefinition (as already done for PCE) --- libsrc/gamate/conio.s | 6 +----- libsrc/gamate/{vga.inc => vga.s} | 7 ++++++- 2 files changed, 7 insertions(+), 6 deletions(-) rename libsrc/gamate/{vga.inc => vga.s} (99%) mode change 100644 => 100755 diff --git a/libsrc/gamate/conio.s b/libsrc/gamate/conio.s index 6ac439490..33437cc04 100644 --- a/libsrc/gamate/conio.s +++ b/libsrc/gamate/conio.s @@ -1,6 +1,7 @@ .include "gamate.inc" .include "extzp.inc" + .import fontdata .import colors .importzp ptr1, tmp1 @@ -24,8 +25,3 @@ initconio: sta BGCOLOR rts - .segment "RODATA" - - .export fontdata -fontdata: - .include "vga.inc" diff --git a/libsrc/gamate/vga.inc b/libsrc/gamate/vga.s old mode 100644 new mode 100755 similarity index 99% rename from libsrc/gamate/vga.inc rename to libsrc/gamate/vga.s index da20dd4aa..39a8df173 --- a/libsrc/gamate/vga.inc +++ b/libsrc/gamate/vga.s @@ -1,6 +1,11 @@ - ; VGA charset for the Gamate conio implementation +.export fontdata + +.rodata + +fontdata: + .byte $00, $00, $00, $00, $00, $00, $00, $00 ; 1 From 61ebe2c34b6755fa0c71f89bfeee873a51f636f5 Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Thu, 24 Sep 2020 19:32:15 +0200 Subject: [PATCH 0527/2710] Indentation in vga.s for gamate --- libsrc/gamate/vga.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/gamate/vga.s b/libsrc/gamate/vga.s index 39a8df173..310560015 100755 --- a/libsrc/gamate/vga.s +++ b/libsrc/gamate/vga.s @@ -1,8 +1,8 @@ ; VGA charset for the Gamate conio implementation -.export fontdata + .export fontdata -.rodata + .rodata fontdata: From 47ee1792732def69c8ba6255a3078f0492e4ddd3 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 25 Sep 2020 00:30:49 -0400 Subject: [PATCH 0528/2710] Fixed a copy & paste error in the test/misc/ makefile. Fixed a warning that's changed to an error in Travis CI tests. --- test/misc/Makefile | 2 +- test/misc/bug1263.c | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/test/misc/Makefile b/test/misc/Makefile index f8832e77e..deacc9464 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -95,7 +95,7 @@ $(WORKDIR)/pptest2.$1.$2.prg: pptest2.c | $(WORKDIR) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # should compile, but gives an error -$(WORKDIR)/bug1263.$1.$2.prg: pptest2.c | $(WORKDIR) +$(WORKDIR)/bug1263.$1.$2.prg: bug1263.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." $(if $(QUIET),echo misc/bug1263.$1.$2.prg) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) diff --git a/test/misc/bug1263.c b/test/misc/bug1263.c index 457e64034..4e5987c58 100644 --- a/test/misc/bug1263.c +++ b/test/misc/bug1263.c @@ -1,17 +1,15 @@ +/* bug #1263 - erroneous error for K & R function declaration */ -/* bug #1263 - erroneous error for implicit function declaration */ - -#include <stdlib.h> - -enum E { I }; +enum E { I = 0 }; extern int f(enum E); + int f(e) enum E e; { - return 1; + return e; } int main(void) { - return f(1) ? EXIT_SUCCESS : EXIT_FAILURE; + return f(I); } From 61d934fd7bba94f79a297567053c81621bbf3c3b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 25 Sep 2020 16:25:32 +0200 Subject: [PATCH 0529/2710] test related to issue #1265 --- test/misc/Makefile | 9 ++++++++ test/misc/bug1265.c | 51 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 test/misc/bug1265.c diff --git a/test/misc/Makefile b/test/misc/Makefile index f8832e77e..f04bcadbd 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -100,6 +100,15 @@ $(WORKDIR)/bug1263.$1.$2.prg: pptest2.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1263.$1.$2.prg) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) +# this one requires --std=c89, it fails with --std=c99 +# it fails currently at runtime +$(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug1265.$1.$2.prg) + $(CC65) --standard c89 -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) + $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) + # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(if $(QUIET),echo misc/endless.$1.$2.prg) diff --git a/test/misc/bug1265.c b/test/misc/bug1265.c new file mode 100644 index 000000000..469946739 --- /dev/null +++ b/test/misc/bug1265.c @@ -0,0 +1,51 @@ +/* bug #1265 - misadjusted stack from unprototyped function call */ + +#include <stdio.h> +#include <string.h> + +int failures = 0; + +char str1[10]; +char str2[10]; + +int f2 (int x) { return x == 2345 ? 23 : -1; } + +int main (void) { + int x, n; + + sprintf (str1, "%p\n", &x); + puts(str1); + x = 1234; + n = f1 (x); + sprintf (str2, "%p\n", &x); + puts(str2); + + if (strcmp(str1, str2)) { + puts("not equal"); + failures++; + } + if (n != 42) { + puts("f1 returns wrong value"); + failures++; + } + + sprintf (str1, "%p\n", &x); + puts(str1); + x = 2345; + n = f2 (x); + sprintf (str2, "%p\n", &x); + puts(str2); + + if (strcmp(str1, str2)) { + puts("not equal"); + failures++; + } + if (n != 23) { + puts("f2 returns wrong value"); + failures++; + } + + return failures; +} + +int f1 (int x) { return x == 1234 ? 42 : -1; } From 34177d9eddc81eb90c582690eafd3ae4d6510204 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 25 Sep 2020 20:08:32 +0200 Subject: [PATCH 0530/2710] test related to issue #1094 --- test/misc/Makefile | 6 +++ test/misc/bug1094.c | 99 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 test/misc/bug1094.c diff --git a/test/misc/Makefile b/test/misc/Makefile index b8c578405..06046af3c 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -100,6 +100,12 @@ $(WORKDIR)/bug1263.$1.$2.prg: bug1263.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1263.$1.$2.prg) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) +# should compile, but gives an error +$(WORKDIR)/bug1094.$1.$2.prg: bug1094.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." + $(if $(QUIET),echo misc/bug1094.$1.$2.prg) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # this one requires --std=c89, it fails with --std=c99 # it fails currently at runtime $(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) diff --git a/test/misc/bug1094.c b/test/misc/bug1094.c new file mode 100644 index 000000000..05e3e6430 --- /dev/null +++ b/test/misc/bug1094.c @@ -0,0 +1,99 @@ + +/* bug #1094 - Nested struct/union initializers don't compile */ + +#include <stdio.h> +#include <stddef.h> +#include <stdlib.h> +#include <stdint.h> + +typedef uint16_t u16; +typedef uint8_t u8; + +struct WW { + int a : 4; + struct { + unsigned int b : 4; + unsigned int c : 8; + } x[2]; +} wwqq = { 0, {2, 5, {3, 4}}, }; + +typedef struct { + u16 quot; + u16 rem; +} udiv_t; + +typedef struct { + u16 quot; + u16 rem; + char m[8]; +} big_t; + +union U { + struct { + signed int a : 3; + signed int b : 3; + signed int c : 3; + }; + int u; +}; + +union U g = { 5, 3, 1 }; + +struct S { + struct { + unsigned int a : 3; + unsigned int b : 3; + unsigned int c : 3; + }; +}; + +struct S h = { 5, 3, 1 }; + +union X { + struct { + uint16_t a : 3; + union { + struct { + uint16_t b : 3; + uint16_t c : 3; + }; + uint16_t d; + }; + }; + uint16_t e; +} x = { 4, {5, 6} }; + + +udiv_t div3(udiv_t u) +{ + udiv_t v = {}; + + u.quot = 341 + u.quot; + u.rem = 1 + u.rem; + + v = u; + + return v; +} + +int main(void) +{ + udiv_t v = { 141, 32 }; + big_t b = { 141, 32 }; + + v = div3(*(udiv_t*)&b); + + printf("%d %d %d\n", (int)wwqq.a, wwqq.x[0].b, wwqq.x[0].c); + printf("%d %d %d\n", (int)wwqq.a, wwqq.x[1].b, wwqq.x[1].c); + printf("quot = %u, rem = %u\n", div3(v).quot, div3(v).rem); + printf("quot = %u, rem = %u\n", v.quot, v.rem); + printf("quot = %u, rem = %u\n", b.quot, b.rem); + printf("g.a = %u, g.b = %u, g.c = %d\n", g.a, g.b, g.c); + x.e = 1467; + printf("x.a = %d, x.b = %d, x.c = %d\n", x.a, x.b, x.c); + printf("(long)x.b = %ld, sizeof(x) = %u, sizeof((long)x.a) = %u\n", (long)x.b, sizeof(x), sizeof((long)x.a)); + printf("-x.d = %d, (long)(-x.c + 1) = %ld\n", -x.d, (long)(-x.c + 1)); + printf("h.a = %u, h.b = %u, h.c = %u\n", h.a, h.b, h.c); + + return 0; +} From d0089aef954907141bc9344558dea83577daef73 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sat, 26 Sep 2020 08:36:17 +0200 Subject: [PATCH 0531/2710] Fix bit-field truncation warning message Fix copy & paste bug with warning message. struct X { signed int a : 3; }; struct X g = { 5 }; Before: s.c(4): Warning: Implicit truncation from 'int' to 'int : 3' in bit-field initializer changes value from 5 to 5 After: s.c(4): Warning: Implicit truncation from 'int' to 'int : 3' in bit-field initializer changes value from 5 to -3 Fixes #1268 --- src/cc65/declare.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 0f604d45e..8623fa08f 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2567,9 +2567,9 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) long RestoredVal = asr_l(asl_l (Val, ShiftBits), ShiftBits); if (ED.IVal != RestoredVal) { Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer " - "changes value from %ld to %d", + "changes value from %ld to %ld", GetFullTypeName (ED.Type), GetFullTypeName (Entry->Type), - Entry->V.B.BitWidth, ED.IVal, Val); + Entry->V.B.BitWidth, ED.IVal, RestoredVal); } } From c45a6b3685815de0bc76f9cdbf9fb7d9deb500f5 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 16 Apr 2020 17:16:47 +0800 Subject: [PATCH 0532/2710] Utility function ParseOpcArgStr(). --- src/cc65/codeent.c | 100 +++++++++++++++++++++++++++++++++++++++++++++ src/cc65/codeent.h | 8 ++++ 2 files changed, 108 insertions(+) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 3de694829..aa3a960df 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -356,6 +356,106 @@ static void SetUseChgInfo (CodeEntry* E, const OPCDesc* D) +int ParseOpcArgStr (const char* Arg, struct StrBuf* Name, int* Offset) +/* Break the opcode argument string into a symbol name/label part plus an offset. +** Both parts are optional, but if there are any characters in the string that +** can't be parsed, it's an failure. +** The caller is responsible for managing the StrBuf. +** Return whether parsing succeeds or not. +*/ +{ + int NewOff = 0; + const char* OffsetPart = 0; + const char* NameEnd = 0; + int Negative = 0; + + /* A numeric address is treated as an unnamed address with the numeric part as the offset */ + if (IsDigit (Arg[0]) || Arg[0] == '$') { + /* A call to a numeric address */ + SB_Clear (Name); + SB_Terminate (Name); + OffsetPart = Arg; + } else { + /* If the symbol name starts with an underline, it is an external symbol. + ** If the symbol does not start with an underline, it may be a built-in + ** symbol. + */ + if (Arg[0] == '_') { + /* Skip the underscore */ + ++Arg; + } + + /* Rip off the offset if present. */ + OffsetPart = strchr (Arg, '+'); + if (OffsetPart == 0) { + OffsetPart = strchr (Arg, '-'); + } + if (OffsetPart != 0) { + /* Get the real arg name */ + NameEnd = strchr (Arg, ' '); + if (NameEnd == 0 || NameEnd > OffsetPart) { + NameEnd = OffsetPart; + } + SB_CopyBuf (Name, Arg, NameEnd - Arg); + SB_Terminate (Name); + + } else { + /* No offset */ + *Offset = 0; + + SB_CopyStr (Name, Arg); + SB_Terminate (Name); + + return 1; + } + } + + *Offset = 0; + + /* Get the offset */ + while (OffsetPart != 0 && OffsetPart[0] != '\0') { + if (OffsetPart[0] == '+') { + Negative = 0; + ++OffsetPart; + } else if (OffsetPart[0] == '-') { + Negative = 1; + ++OffsetPart; + } + + /* Skip spaces */ + while (OffsetPart[0] == ' ') { + ++OffsetPart; + } + + if (OffsetPart[0] == '$') { + if (sscanf (OffsetPart + 1, "%X", &NewOff) != 1) { + return 0; + } + } else { + if (sscanf (OffsetPart, "%u", &NewOff) != 1) { + return 0; + } + } + + if (Negative) { + NewOff = -NewOff; + } + + *Offset += NewOff; + + /* See if there are more */ + Arg = OffsetPart; + OffsetPart = strchr (Arg, '+'); + if (OffsetPart == 0) { + OffsetPart = strchr (Arg, '-'); + } + } + + return 1; +} + + + const char* MakeHexArg (unsigned Num) /* Convert Num into a string in the form $XY, suitable for passing it as an ** argument to NewCodeEntry, and return a pointer to the string. diff --git a/src/cc65/codeent.h b/src/cc65/codeent.h index 3d07670d7..57a7677bb 100644 --- a/src/cc65/codeent.h +++ b/src/cc65/codeent.h @@ -89,6 +89,14 @@ struct CodeEntry { +int ParseOpcArgStr (const char* Arg, struct StrBuf* Name, int* Offset); +/* Break the opcode argument string into a symbol name/label part plus an offset. +** Both parts are optional, but if there are any characters in the string that +** can't be parsed, it's an failure. +** The caller is responsible for managing the StrBuf. +** Return whether parsing succeeds or not. +*/ + const char* MakeHexArg (unsigned Num); /* Convert Num into a string in the form $XY, suitable for passing it as an ** argument to NewCodeEntry, and return a pointer to the string. From 28c7aa2bc8b18aeb0291acbbc3a34f6996a60d25 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 16 Apr 2020 17:17:52 +0800 Subject: [PATCH 0533/2710] Replaced direct CEF_NUMARG flag checks on code entries with CE_HasNumArg(). --- src/cc65/coptcmp.c | 4 ++-- src/cc65/coptneg.c | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/cc65/coptcmp.c b/src/cc65/coptcmp.c index ca0ba39a8..a4a8c6a9b 100644 --- a/src/cc65/coptcmp.c +++ b/src/cc65/coptcmp.c @@ -176,14 +176,14 @@ static int IsImmCmp16 (CodeEntry** L) { return (L[0]->OPC == OP65_CPX && L[0]->AM == AM65_IMM && - (L[0]->Flags & CEF_NUMARG) != 0 && + CE_HasNumArg (L[0]) && !CE_HasLabel (L[0]) && (L[1]->OPC == OP65_JNE || L[1]->OPC == OP65_BNE) && L[1]->JumpTo != 0 && !CE_HasLabel (L[1]) && L[2]->OPC == OP65_CMP && L[2]->AM == AM65_IMM && - (L[2]->Flags & CEF_NUMARG) != 0 && + CE_HasNumArg (L[2]) && (L[3]->Info & OF_CBRA) != 0 && L[3]->JumpTo != 0 && (L[1]->JumpTo->Owner == L[3] || L[1]->JumpTo == L[3]->JumpTo)); diff --git a/src/cc65/coptneg.c b/src/cc65/coptneg.c index 03b39eb42..0f5d589f7 100644 --- a/src/cc65/coptneg.c +++ b/src/cc65/coptneg.c @@ -68,15 +68,15 @@ unsigned OptBNegA1 (CodeSeg* S) CodeEntry* E = CS_GetEntry (S, I); /* Check for a ldx */ - if (E->OPC == OP65_LDX && - E->AM == AM65_IMM && - (E->Flags & CEF_NUMARG) != 0 && - E->Num == 0 && - CS_GetEntries (S, L, I+1, 2) && - L[0]->OPC == OP65_LDA && - (L[0]->Use & REG_X) == 0 && - !CE_HasLabel (L[0]) && - CE_IsCallTo (L[1], "bnega") && + if (E->OPC == OP65_LDX && + E->AM == AM65_IMM && + CE_HasNumArg (E) && + E->Num == 0 && + CS_GetEntries (S, L, I+1, 2) && + L[0]->OPC == OP65_LDA && + (L[0]->Use & REG_X) == 0 && + !CE_HasLabel (L[0]) && + CE_IsCallTo (L[1], "bnega") && !CE_HasLabel (L[1])) { /* Remove the ldx instruction */ From d379affc4b53d91e366bc6b17901633eb0d092eb Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 16 Apr 2020 17:17:08 +0800 Subject: [PATCH 0534/2710] Moved some reusable code from cc65/coptstop.c into new files. --- src/cc65.vcxproj | 2 + src/cc65/codeoptutil.c | 993 ++++++++++++++++++++++++++++++++++++++ src/cc65/codeoptutil.h | 257 ++++++++++ src/cc65/coptstop.c | 1027 +--------------------------------------- 4 files changed, 1253 insertions(+), 1026 deletions(-) create mode 100644 src/cc65/codeoptutil.c create mode 100644 src/cc65/codeoptutil.h diff --git a/src/cc65.vcxproj b/src/cc65.vcxproj index 1015b389f..0f63a1022 100644 --- a/src/cc65.vcxproj +++ b/src/cc65.vcxproj @@ -87,6 +87,7 @@ <ClInclude Include="cc65\codeinfo.h" /> <ClInclude Include="cc65\codelab.h" /> <ClInclude Include="cc65\codeopt.h" /> + <ClInclude Include="cc65\codeoptutil.h" /> <ClInclude Include="cc65\codeseg.h" /> <ClInclude Include="cc65\compile.h" /> <ClInclude Include="cc65\coptadd.h" /> @@ -163,6 +164,7 @@ <ClCompile Include="cc65\codeinfo.c" /> <ClCompile Include="cc65\codelab.c" /> <ClCompile Include="cc65\codeopt.c" /> + <ClCompile Include="cc65\codeoptutil.c" /> <ClCompile Include="cc65\codeseg.c" /> <ClCompile Include="cc65\compile.c" /> <ClCompile Include="cc65\coptadd.c" /> diff --git a/src/cc65/codeoptutil.c b/src/cc65/codeoptutil.c new file mode 100644 index 000000000..999c18d33 --- /dev/null +++ b/src/cc65/codeoptutil.c @@ -0,0 +1,993 @@ +/*****************************************************************************/ +/* */ +/* codeoptutil.c */ +/* */ +/* Optimize operations that take operands via the stack */ +/* */ +/* */ +/* */ +/* (C) 2001 Ullrich von Bassewitz */ +/* Wacholderweg 14 */ +/* D-70597 Stuttgart */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#include <stdlib.h> + +/* common */ +#include "chartype.h" +#include "xmalloc.h" + +/* cc65 */ +#include "codeinfo.h" +#include "codeoptutil.h" +#include "error.h" + + + +/*****************************************************************************/ +/* Load tracking code */ +/*****************************************************************************/ + + + +void ClearLoadRegInfo (LoadRegInfo* RI) +/* Clear a LoadRegInfo struct */ +{ + RI->Flags = LI_NONE; + RI->LoadIndex = -1; + RI->LoadEntry = 0; + RI->LoadYIndex = -1; + RI->LoadYEntry = 0; + RI->XferIndex = -1; + RI->XferEntry = 0; + RI->Offs = 0; +} + + + +void CopyLoadRegInfo (LoadRegInfo* To, LoadRegInfo* From) +/* Copy a LoadRegInfo struct */ +{ + To->Flags = From->Flags; + To->LoadIndex = From->LoadIndex; + To->LoadEntry = From->LoadEntry; + To->LoadYIndex = From->LoadYIndex; + To->LoadYEntry = From->LoadYEntry; + To->XferIndex = From->XferIndex; + To->XferEntry = From->XferEntry; + To->Offs = From->Offs; +} + + + +void FinalizeLoadRegInfo (LoadRegInfo* RI, CodeSeg* S) +/* Prepare a LoadRegInfo struct for use */ +{ + /* Get the entries */ + if (RI->LoadIndex >= 0) { + RI->LoadEntry = CS_GetEntry (S, RI->LoadIndex); + } else { + RI->LoadEntry = 0; + } + if (RI->XferIndex >= 0) { + RI->XferEntry = CS_GetEntry (S, RI->XferIndex); + } else { + RI->XferEntry = 0; + } + /* Load from src not modified before op can be treated as direct */ + if ((RI->Flags & LI_SRC_CHG) == 0 && + (RI->Flags & (LI_CHECK_ARG | LI_CHECK_Y)) != 0) { + RI->Flags |= LI_DIRECT; + if ((RI->Flags & LI_CHECK_Y) != 0) { + RI->Flags |= LI_RELOAD_Y; + } + } + /* We cannot ldy src,y */ + if ((RI->Flags & LI_RELOAD_Y) != 0 && + RI->LoadYEntry != 0 && + (RI->LoadYEntry->Use & REG_Y) == REG_Y) { + RI->Flags &= ~LI_DIRECT; + } +} + + + +void AdjustLoadRegInfo (LoadRegInfo* RI, int Index, int Change) +/* Adjust a load register info struct after deleting or inserting an entry +** with a given index +*/ +{ + CHECK (abs (Change) == 1); + if (Change < 0) { + /* Deletion */ + if (Index < RI->LoadIndex) { + --RI->LoadIndex; + } else if (Index == RI->LoadIndex) { + /* Has been removed */ + RI->LoadIndex = -1; + RI->LoadEntry = 0; + } + if (Index < RI->XferIndex) { + --RI->XferIndex; + } else if (Index == RI->XferIndex) { + /* Has been removed */ + RI->XferIndex = -1; + RI->XferEntry = 0; + } + } else { + /* Insertion */ + if (Index <= RI->LoadIndex) { + ++RI->LoadIndex; + } + if (Index <= RI->XferIndex) { + ++RI->XferIndex; + } + } +} + + + +void ClearLoadInfo (LoadInfo* LI) +/* Clear a LoadInfo struct */ +{ + ClearLoadRegInfo (&LI->A); + ClearLoadRegInfo (&LI->X); + ClearLoadRegInfo (&LI->Y); +} + + + +void CopyLoadInfo (LoadInfo* To, LoadInfo* From) +/* Copy a LoadInfo struct */ +{ + CopyLoadRegInfo (&To->A, &From->A); + CopyLoadRegInfo (&To->X, &From->X); + CopyLoadRegInfo (&To->Y, &From->Y); +} + + + +void FinalizeLoadInfo (LoadInfo* LI, CodeSeg* S) +/* Prepare a LoadInfo struct for use */ +{ + /* Get the entries */ + FinalizeLoadRegInfo (&LI->A, S); + FinalizeLoadRegInfo (&LI->X, S); + FinalizeLoadRegInfo (&LI->Y, S); +} + + + +void AdjustLoadInfo (LoadInfo* LI, int Index, int Change) +/* Adjust a load info struct after deleting entry with a given index */ +{ + AdjustLoadRegInfo (&LI->A, Index, Change); + AdjustLoadRegInfo (&LI->X, Index, Change); + AdjustLoadRegInfo (&LI->Y, Index, Change); +} + + + +RegInfo* GetLastChangedRegInfo (StackOpData* D, LoadRegInfo* Reg) +/* Get RegInfo of the last load insn entry */ +{ + CodeEntry* E; + + if (Reg->LoadIndex >= 0 && (E = CS_GetEntry (D->Code, Reg->LoadIndex)) != 0) { + return E->RI; + } + + return 0; +} + + + +static int Affected (LoadRegInfo* RI, const CodeEntry* E) +/* Check if the load src may be modified between the pushax and op */ +{ + fncls_t fncls; + unsigned int Use; + unsigned int Chg; + unsigned int UseToCheck = 0; + + if ((RI->Flags & (LI_CHECK_ARG | LI_CHECK_Y)) != 0) { + if (E->AM == AM65_IMM || E->AM == AM65_ACC || E->AM == AM65_IMP || E->AM == AM65_BRA) { + return 0; + } + CHECK ((RI->Flags & LI_CHECK_ARG) == 0 || RI->LoadEntry != 0); + CHECK ((RI->Flags & LI_CHECK_Y) == 0 || RI->LoadYEntry != 0); + + if ((RI->Flags & LI_CHECK_ARG) != 0) { + UseToCheck |= RI->LoadEntry->Use; + } + + if ((RI->Flags & LI_CHECK_Y) != 0) { + UseToCheck |= RI->LoadYEntry->Use; + } + + if (E->OPC == OP65_JSR) { + /* Try to know about the function */ + fncls = GetFuncInfo (E->Arg, &Use, &Chg); + if ((UseToCheck & Chg & REG_ALL) == 0 && + fncls == FNCLS_BUILTIN) { + /* Builtin functions are known to be harmless */ + return 0; + } + /* Otherwise play it safe */ + return 1; + } else if (E->OPC == OP65_DEC || E->OPC == OP65_INC || + E->OPC == OP65_ASL || E->OPC == OP65_LSR || + E->OPC == OP65_ROL || E->OPC == OP65_ROR || + E->OPC == OP65_TRB || E->OPC == OP65_TSB || + E->OPC == OP65_STA || E->OPC == OP65_STX || E->OPC == OP65_STY) { + if ((E->AM == AM65_ABS || E->AM == AM65_ZP)) { + if ((RI->Flags & LI_CHECK_ARG) != 0 && + strcmp (RI->LoadEntry->Arg, E->Arg) == 0) { + return 1; + } + if ((RI->Flags & LI_CHECK_Y) != 0 && + strcmp (RI->LoadYEntry->Arg, E->Arg) == 0) { + return 1; + } + return 0; + } + /* We could've check further for more cases where the load target isn't modified, + ** But for now let's save the trouble and just play it safe. */ + return 1; + } + } + return 0; +} + + + +static void HonourUseAndChg (LoadRegInfo* RI, unsigned Reg, const CodeEntry* E, int I) +/* Honour use and change flags for an instruction */ +{ + if ((E->Chg & Reg) != 0) { + /* Remember this as an indirect load */ + ClearLoadRegInfo (RI); + RI->LoadIndex = I; + RI->XferIndex = -1; + RI->Flags = 0; + } else if (Affected (RI, E)) { + RI->Flags |= LI_SRC_CHG; + } +} + + + +unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) +/* Track loads for a code entry. +** Return used registers. +*/ +{ + unsigned Used; + CodeEntry* E = CS_GetEntry (S, I); + CHECK (E != 0); + + /* By default */ + Used = E->Use; + + /* Whether we had a load or xfer op before or not, the newly loaded value + ** will be the real one used for the pushax/op unless it's overwritten, + ** so we can just reset the flags about it in such cases. + */ + if (E->Info & OF_LOAD) { + + LoadRegInfo* RI = 0; + + /* Determine, which register was loaded */ + if (E->Chg & REG_A) { + RI = &LI->A; + } else if (E->Chg & REG_X) { + RI = &LI->X; + } else if (E->Chg & REG_Y) { + RI = &LI->Y; + } + CHECK (RI != 0); + + /* Remember the load */ + RI->LoadIndex = I; + RI->XferIndex = -1; + + /* Set load flags */ + RI->Flags = LI_LOAD_INSN; + if (E->AM == AM65_IMM) { + /* These insns are all ok and replaceable */ + RI->Flags |= LI_DIRECT; + } else if (E->AM == AM65_ZP || E->AM == AM65_ABS) { + /* These insns are replaceable only if they are not modified later */ + RI->Flags |= LI_CHECK_ARG; + } else if (E->AM == AM65_ZPY || E->AM == AM65_ABSY) { + /* These insns are replaceable only if they are not modified later */ + RI->Flags |= LI_CHECK_ARG | LI_CHECK_Y; + } else if (E->AM == AM65_ZP_INDY && + strcmp (E->Arg, "sp") == 0) { + /* A load from the stack with known offset is also ok, but in this + ** case we must reload the index register later. Please note that + ** a load indirect via other zero page locations is not ok, since + ** these locations may change between the push and the actual + ** operation. + */ + RI->Flags |= LI_DIRECT | LI_CHECK_Y | LI_SP; + + /* Reg Y can be regarded as unused if this load is removed */ + Used &= ~REG_Y; + if (RI == &LI->A) { + LI->Y.Flags |= LI_USED_BY_A; + } else { + LI->Y.Flags |= LI_USED_BY_X; + } + } + + /* If the load offset has a known value, we can just remember and reload + ** it into the index register later. + */ + if ((RI->Flags & LI_CHECK_Y) != 0) { + if (RegValIsKnown (E->RI->In.RegY)) { + RI->Offs = (unsigned char)E->RI->In.RegY; + RI->Flags &= ~LI_CHECK_Y; + RI->Flags |= LI_RELOAD_Y; + } else { + /* We need to check if the src of Y is changed */ + RI->LoadYIndex = LI->Y.LoadIndex; + RI->LoadYEntry = CS_GetEntry (S, RI->LoadYIndex); + } + } + + /* Watch for any change of the load target */ + if ((RI->Flags & LI_CHECK_ARG) != 0) { + RI->LoadEntry = CS_GetEntry (S, I); + } + + } else if (E->Info & OF_XFR) { + + /* Determine source and target of the transfer and handle the TSX insn */ + LoadRegInfo* Src; + LoadRegInfo* Tgt; + switch (E->OPC) { + case OP65_TAX: + Src = &LI->A; + Tgt = &LI->X; + Used &= ~REG_A; + Src->Flags |= LI_USED_BY_X; + break; + case OP65_TAY: + Src = &LI->A; + Tgt = &LI->Y; + Used &= ~REG_A; + Src->Flags |= LI_USED_BY_Y; + break; + case OP65_TXA: + Src = &LI->X; + Tgt = &LI->A; + Used &= ~REG_X; + Src->Flags |= LI_USED_BY_A; + break; + case OP65_TYA: + Src = &LI->Y; + Tgt = &LI->A; + Used &= ~REG_Y; + Src->Flags |= LI_USED_BY_A; + break; + case OP65_TSX: + ClearLoadRegInfo (&LI->X); + return Used; + case OP65_TXS: + return Used; + default: Internal ("Unknown XFR insn in TrackLoads"); + } + + /* Transfer the data */ + Tgt->LoadIndex = Src->LoadIndex; + Tgt->LoadEntry = Src->LoadEntry; + Tgt->LoadYIndex = Src->LoadYIndex; + Tgt->LoadYEntry = Src->LoadYEntry; + Tgt->XferIndex = I; + Tgt->Offs = Src->Offs; + Tgt->Flags = Src->Flags; + + } else if (CE_IsCallTo (E, "ldaxysp") && RegValIsKnown (E->RI->In.RegY)) { + + /* Both registers set, Y changed */ + LI->A.LoadIndex = I; + LI->A.XferIndex = -1; + LI->A.Flags = (LI_LOAD_INSN | LI_DIRECT | LI_RELOAD_Y | LI_SP); + LI->A.Offs = (unsigned char) E->RI->In.RegY - 1; + + LI->X.LoadIndex = I; + LI->X.XferIndex = -1; + LI->X.Flags = (LI_LOAD_INSN | LI_DIRECT | LI_RELOAD_Y | LI_SP); + LI->X.Offs = (unsigned char) E->RI->In.RegY; + + /* Reg Y can be regarded as unused if this load is removed */ + Used &= ~REG_Y; + LI->Y.Flags |= LI_USED_BY_A | LI_USED_BY_X; + + } else { + HonourUseAndChg (&LI->A, REG_A, E, I); + HonourUseAndChg (&LI->X, REG_X, E, I); + HonourUseAndChg (&LI->Y, REG_Y, E, I); + + /* The other operand may be affected too */ + if (LLI != 0) { + if (Affected (&LLI->A, E)) { + LLI->A.Flags |= LI_SRC_CHG; + } + if (Affected (&LLI->X, E)) { + LLI->X.Flags |= LI_SRC_CHG; + } + if (Affected (&LLI->Y, E)) { + LLI->Y.Flags |= LI_SRC_CHG; + } + } + } + + return Used; +} + + + +void SetDontRemoveEntryFlag (LoadRegInfo* RI) +/* Flag the entry as non-removable according to register flags */ +{ + if (RI->Flags & LI_DONT_REMOVE) { + if (RI->LoadEntry != 0) { + RI->LoadEntry->Flags |= CEF_DONT_REMOVE; + } + } +} + + + +void ResetDontRemoveEntryFlag (LoadRegInfo* RI) +/* Unflag the entry as non-removable according to register flags */ +{ + if (RI->Flags & LI_DONT_REMOVE) { + if (RI->LoadEntry != 0) { + RI->LoadEntry->Flags &= ~CEF_DONT_REMOVE; + } + } +} + + + +void SetDontRemoveEntryFlags (StackOpData* D) +/* Flag the entries as non-removable according to register flags */ +{ + SetDontRemoveEntryFlag (&D->Lhs.A); + SetDontRemoveEntryFlag (&D->Lhs.X); + SetDontRemoveEntryFlag (&D->Rhs.A); + SetDontRemoveEntryFlag (&D->Rhs.X); +} + + + +void ResetDontRemoveEntryFlags (StackOpData* D) +/* Unflag the entries as non-removable according to register flags */ +{ + ResetDontRemoveEntryFlag (&D->Lhs.A); + ResetDontRemoveEntryFlag (&D->Lhs.X); + ResetDontRemoveEntryFlag (&D->Rhs.A); + ResetDontRemoveEntryFlag (&D->Rhs.X); +} + + + +void ResetStackOpData (StackOpData* Data) +/* Reset the given data structure */ +{ + Data->OptFunc = 0; + Data->ZPUsage = REG_NONE; + Data->ZPChanged = REG_NONE; + Data->UsedRegs = REG_NONE; + Data->RhsMultiChg = 0; + + ClearLoadInfo (&Data->Lhs); + ClearLoadInfo (&Data->Rhs); + + Data->PushIndex = -1; + Data->OpIndex = -1; +} + + + +/*****************************************************************************/ +/* Helpers */ +/*****************************************************************************/ + + + +void InsertEntry (StackOpData* D, CodeEntry* E, int Index) +/* Insert a new entry. Depending on Index, D->PushIndex and D->OpIndex will +** be adjusted by this function. +*/ +{ + /* Insert the entry into the code segment */ + CS_InsertEntry (D->Code, E, Index); + + /* Adjust register loads if necessary */ + AdjustLoadInfo (&D->Lhs, Index, 1); + AdjustLoadInfo (&D->Rhs, Index, 1); + + /* Adjust the indices if necessary */ + if (D->PushEntry && Index <= D->PushIndex) { + ++D->PushIndex; + } + if (D->OpEntry && Index <= D->OpIndex) { + ++D->OpIndex; + } +} + + + +void DelEntry (StackOpData* D, int Index) +/* Delete an entry. Depending on Index, D->PushIndex and D->OpIndex will be +** adjusted by this function, and PushEntry/OpEntry may get invalidated. +*/ +{ + /* Delete the entry from the code segment */ + CS_DelEntry (D->Code, Index); + + /* Adjust register loads if necessary */ + AdjustLoadInfo (&D->Lhs, Index, -1); + AdjustLoadInfo (&D->Rhs, Index, -1); + + /* Adjust the other indices if necessary */ + if (Index < D->PushIndex) { + --D->PushIndex; + } else if (Index == D->PushIndex) { + D->PushEntry = 0; + } + if (Index < D->OpIndex) { + --D->OpIndex; + } else if (Index == D->OpIndex) { + D->OpEntry = 0; + } +} + + + +void AdjustStackOffset (StackOpData* D, unsigned Offs) +/* Adjust the offset for all stack accesses in the range PushIndex to OpIndex. +** OpIndex is adjusted according to the insertions. +*/ +{ + /* Walk over all entries */ + int I = D->PushIndex + 1; + while (I < D->OpIndex) { + + CodeEntry* E = CS_GetEntry (D->Code, I); + + /* Check if this entry does a stack access, and if so, if it's a plain + ** load from stack, since this is needed later. + */ + int Correction = 0; + if ((E->Use & REG_SP) != 0) { + + /* Check for some things that should not happen */ + CHECK (E->AM == AM65_ZP_INDY || E->RI->In.RegY >= (short) Offs); + CHECK (strcmp (E->Arg, "sp") == 0); + /* We need to correct this one */ + Correction = (E->OPC == OP65_LDA)? 2 : 1; + + } else if (CE_IsCallTo (E, "ldaxysp")) { + /* We need to correct this one */ + Correction = 1; + } + + if (Correction) { + /* Get the code entry before this one. If it's a LDY, adjust the + ** value. + */ + CodeEntry* P = CS_GetPrevEntry (D->Code, I); + if (P && P->OPC == OP65_LDY && CE_IsConstImm (P)) { + /* The Y load is just before the stack access, adjust it */ + CE_SetNumArg (P, P->Num - Offs); + } else { + /* Insert a new load instruction before the stack access */ + const char* Arg = MakeHexArg (E->RI->In.RegY - Offs); + CodeEntry* X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + InsertEntry (D, X, I++); + } + + /* If we need the value of Y later, be sure to reload it */ + if (RegYUsed (D->Code, I+1)) { + CodeEntry* N; + const char* Arg = MakeHexArg (E->RI->In.RegY); + if (Correction == 2 && (N = CS_GetNextEntry(D->Code, I)) != 0 && + ((N->Info & OF_ZBRA) != 0) && N->JumpTo != 0) { + /* The Y register is used but the load instruction loads A + ** and is followed by a branch that evaluates the zero flag. + ** This means that we cannot just insert the load insn + ** for the Y register at this place, because it would + ** destroy the Z flag. Instead place load insns at the + ** target of the branch and after it. + ** Note: There is a chance that this code won't work. The + ** jump may be a backwards jump (in which case the stack + ** offset has already been adjusted) or there may be other + ** instructions between the load and the conditional jump. + ** Currently the compiler does not generate such code, but + ** it is possible to force the optimizer into something + ** invalid by use of inline assembler. + */ + + /* Add load insn after the branch */ + CodeEntry* X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + InsertEntry (D, X, I+2); + + /* Add load insn before branch target */ + CodeEntry* Y = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + int J = CS_GetEntryIndex (D->Code, N->JumpTo->Owner); + CHECK (J > I); /* Must not happen */ + InsertEntry (D, Y, J); + + /* Move the label to the new insn */ + CodeLabel* L = CS_GenLabel (D->Code, Y); + CS_MoveLabelRef (D->Code, N, L); + } else { + CodeEntry* X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + InsertEntry (D, X, I+1); + /* Skip this instruction in the next round */ + ++I; + } + } + } + + /* Next entry */ + ++I; + } + + /* If we have rhs load insns that load from stack, we'll have to adjust + ** the offsets for these also. + */ + if ((D->Rhs.A.Flags & (LI_RELOAD_Y | LI_SP | LI_CHECK_Y)) == (LI_RELOAD_Y | LI_SP)) { + D->Rhs.A.Offs -= Offs; + } + if ((D->Rhs.X.Flags & (LI_RELOAD_Y | LI_SP | LI_CHECK_Y)) == (LI_RELOAD_Y | LI_SP)) { + D->Rhs.X.Offs -= Offs; + } +} + + + +int IsRegVar (StackOpData* D) +/* If the value pushed is that of a zeropage variable that is unchanged until Op, +** replace ZPLo and ZPHi in the given StackOpData struct by the variable and return true. +** Otherwise leave D untouched and return false. +*/ +{ + CodeEntry* LoadA = D->Lhs.A.LoadEntry; + CodeEntry* LoadX = D->Lhs.X.LoadEntry; + unsigned Len; + + /* Must be unchanged till Op */ + if ((D->Lhs.A.Flags & (LI_DIRECT | LI_RELOAD_Y)) != LI_DIRECT || + (D->Lhs.X.Flags & (LI_DIRECT | LI_RELOAD_Y)) != LI_DIRECT) { + return 0; + } + + /* Must have both load insns */ + if (LoadA == 0 || LoadX == 0) { + return 0; + } + + /* Must be loads from zp */ + if (LoadA->AM != AM65_ZP || LoadX->AM != AM65_ZP) { + return 0; + } + + /* Must be the same zp loc with high byte in X */ + Len = strlen (LoadA->Arg); + if (strncmp (LoadA->Arg, LoadX->Arg, Len) != 0 || + strcmp (LoadX->Arg + Len, "+1") != 0) { + return 0; + } + + /* Use the zero page location directly */ + D->ZPLo = LoadA->Arg; + D->ZPHi = LoadX->Arg; + return 1; +} + + + +void AddStoreLhsA (StackOpData* D) +/* Add a store to zero page after the push insn */ +{ + CodeEntry* X = NewCodeEntry (OP65_STA, AM65_ZP, D->ZPLo, 0, D->PushEntry->LI); + InsertEntry (D, X, D->PushIndex+1); +} + + + +void AddStoreLhsX (StackOpData* D) +/* Add a store to zero page after the push insn */ +{ + CodeEntry* X = NewCodeEntry (OP65_STX, AM65_ZP, D->ZPHi, 0, D->PushEntry->LI); + InsertEntry (D, X, D->PushIndex+1); +} + + + +void ReplacePushByStore (StackOpData* D) +/* Replace the call to the push subroutine by a store into the zero page +** location (actually, the push is not replaced, because we need it for +** later, but the name is still ok since the push will get removed at the +** end of each routine). +*/ +{ + /* Store the value into the zeropage instead of pushing it. Check high + ** byte first so that the store is later in A/X order. + */ + if ((D->Lhs.X.Flags & LI_DIRECT) == 0) { + AddStoreLhsX (D); + } + if ((D->Lhs.A.Flags & LI_DIRECT) == 0) { + AddStoreLhsA (D); + } +} + + + +void AddOpLow (StackOpData* D, opc_t OPC, LoadInfo* LI) +/* Add an op for the low byte of an operator. This function honours the +** OP_DIRECT and OP_RELOAD_Y flags and generates the necessary instructions. +** All code is inserted at the current insertion point. +*/ +{ + CodeEntry* X; + + if ((LI->A.Flags & LI_DIRECT) != 0) { + /* Op with a variable location. If the location is on the stack, we + ** need to reload the Y register. + */ + if ((LI->A.Flags & LI_RELOAD_Y) == 0) { + + /* opc ... */ + CodeEntry* LoadA = LI->A.LoadEntry; + X = NewCodeEntry (OPC, LoadA->AM, LoadA->Arg, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + + } else { + + if ((LI->A.Flags & LI_CHECK_Y) == 0) { + /* ldy #offs */ + X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (LI->A.Offs), 0, D->OpEntry->LI); + } else { + /* ldy src */ + X = NewCodeEntry (OP65_LDY, LI->A.LoadYEntry->AM, LI->A.LoadYEntry->Arg, 0, D->OpEntry->LI); + } + InsertEntry (D, X, D->IP++); + + if (LI->A.LoadEntry->OPC == OP65_JSR) { + /* opc (sp),y */ + X = NewCodeEntry (OPC, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI); + } else { + /* opc src,y */ + X = NewCodeEntry (OPC, LI->A.LoadEntry->AM, LI->A.LoadEntry->Arg, 0, D->OpEntry->LI); + } + InsertEntry (D, X, D->IP++); + + } + + /* In both cases, we can remove the load */ + LI->A.Flags |= LI_REMOVE; + + } else { + + /* Op with temp storage */ + X = NewCodeEntry (OPC, AM65_ZP, D->ZPLo, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + + } +} + + + +void AddOpHigh (StackOpData* D, opc_t OPC, LoadInfo* LI, int KeepResult) +/* Add an op for the high byte of an operator. Special cases (constant values +** or similar) have to be checked separately, the function covers only the +** generic case. Code is inserted at the insertion point. +*/ +{ + CodeEntry* X; + + if (KeepResult) { + /* pha */ + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + } + + /* txa */ + X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + + if ((LI->X.Flags & LI_DIRECT) != 0) { + + if ((LI->X.Flags & LI_RELOAD_Y) == 0) { + + /* opc xxx */ + CodeEntry* LoadX = LI->X.LoadEntry; + X = NewCodeEntry (OPC, LoadX->AM, LoadX->Arg, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + + } else { + + if ((LI->A.Flags & LI_CHECK_Y) == 0) { + /* ldy #const */ + X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (LI->X.Offs), 0, D->OpEntry->LI); + } else { + /* ldy src */ + X = NewCodeEntry (OP65_LDY, LI->X.LoadYEntry->AM, LI->X.LoadYEntry->Arg, 0, D->OpEntry->LI); + } + InsertEntry (D, X, D->IP++); + + if (LI->X.LoadEntry->OPC == OP65_JSR) { + /* opc (sp),y */ + X = NewCodeEntry (OPC, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI); + } else { + /* opc src,y */ + X = NewCodeEntry (OPC, LI->A.LoadEntry->AM, LI->A.LoadEntry->Arg, 0, D->OpEntry->LI); + } + InsertEntry (D, X, D->IP++); + } + + /* In both cases, we can remove the load */ + LI->X.Flags |= LI_REMOVE; + + } else { + /* opc zphi */ + X = NewCodeEntry (OPC, AM65_ZP, D->ZPHi, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + } + + if (KeepResult) { + /* tax */ + X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + + /* pla */ + X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + } +} + + + +void RemoveRegLoads (StackOpData* D, LoadInfo* LI) +/* Remove register load insns */ +{ + /* Both registers may be loaded with one insn, but DelEntry will in this + ** case clear the other one. + */ + if ((LI->A.Flags & LI_REMOVE) == LI_REMOVE) { + if (LI->A.LoadIndex >= 0 && + (LI->A.LoadEntry->Flags & CEF_DONT_REMOVE) == 0) { + DelEntry (D, LI->A.LoadIndex); + } + if (LI->A.XferIndex >= 0 && + (LI->A.XferEntry->Flags & CEF_DONT_REMOVE) == 0) { + DelEntry (D, LI->A.XferIndex); + } + } + if ((LI->X.Flags & LI_REMOVE) == LI_REMOVE) { + if (LI->X.LoadIndex >= 0 && + (LI->X.LoadEntry->Flags & CEF_DONT_REMOVE) == 0) { + DelEntry (D, LI->X.LoadIndex); + } + if (LI->X.XferIndex >= 0 && + (LI->X.XferEntry->Flags & CEF_DONT_REMOVE) == 0) { + DelEntry (D, LI->X.XferIndex); + } + } +} + + + +void RemoveRemainders (StackOpData* D) +/* Remove the code that is unnecessary after translation of the sequence */ +{ + /* Remove the register loads for lhs and rhs if nothing prevents that */ + RemoveRegLoads (D, &D->Lhs); + RemoveRegLoads (D, &D->Rhs); + + /* Remove the push and the operator routine */ + DelEntry (D, D->OpIndex); + DelEntry (D, D->PushIndex); +} + + + +static int CmpHarmless (const void* Key, const void* Entry) +/* Compare function for bsearch */ +{ + return strcmp (Key, *(const char**)Entry); +} + + + +int HarmlessCall (const char* Name) +/* Check if this is a call to a harmless subroutine that will not interrupt +** the pushax/op sequence when encountered. +*/ +{ + const char* const Tab[] = { + "aslax1", + "aslax2", + "aslax3", + "aslax4", + "aslaxy", + "asrax1", + "asrax2", + "asrax3", + "asrax4", + "asraxy", + "bcastax", + "bnegax", + "complax", + "decax1", + "decax2", + "decax3", + "decax4", + "decax5", + "decax6", + "decax7", + "decax8", + "decaxy", + "incax1", + "incax2", + "incax3", + "incax4", + "incax5", + "incax6", + "incax7", + "incax8", + "incaxy", + "ldaxidx", + "ldaxysp", + "negax", + "shlax1", + "shlax2", + "shlax3", + "shlax4", + "shlaxy", + "shrax1", + "shrax2", + "shrax3", + "shrax4", + "shraxy", + }; + + void* R = bsearch (Name, + Tab, + sizeof (Tab) / sizeof (Tab[0]), + sizeof (Tab[0]), + CmpHarmless); + return (R != 0); +} + + diff --git a/src/cc65/codeoptutil.h b/src/cc65/codeoptutil.h new file mode 100644 index 000000000..49a8ce60f --- /dev/null +++ b/src/cc65/codeoptutil.h @@ -0,0 +1,257 @@ +/*****************************************************************************/ +/* */ +/* codeoptutil.h */ +/* */ +/* Optimize operations that take operands via the stack */ +/* */ +/* */ +/* */ +/* (C) 2001 Ullrich von Bassewitz */ +/* Wacholderweg 14 */ +/* D-70597 Stuttgart */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef CODEOPTUTIL_H +#define CODEOPTUTIL_H + + + +/* cc65 */ +#include "codeent.h" +#include "codeseg.h" + + + +/*****************************************************************************/ +/* Load tracking data */ +/*****************************************************************************/ + + + +/* LoadRegInfo flags set by DirectOp */ +typedef enum { + LI_NONE = 0x00, + LI_DIRECT = 0x01, /* Direct op may be used */ + LI_RELOAD_Y = 0x02, /* Reload index register Y */ + LI_REMOVE = 0x04, /* Load may be removed */ + LI_DONT_REMOVE = 0x08, /* Load may not be removed */ + LI_CHECK_ARG = 0x10, /* Load src might be modified later */ + LI_SRC_CHG = 0x20, /* Load src is possibly modified */ + LI_LOAD_INSN = 0x40, /* Has a load insn */ + LI_CHECK_Y = 0x80, /* Indexed load src might be modified later */ + LI_USED_BY_A = 0x100, /* Content used by RegA */ + LI_USED_BY_X = 0x200, /* Content used by RegX */ + LI_USED_BY_Y = 0x400, /* Content used by RegY */ + LI_SP = 0x800, /* Content on stack */ +} LI_FLAGS; + +/* Structure that tells us how to load the lhs values */ +typedef struct LoadRegInfo LoadRegInfo; +struct LoadRegInfo { + LI_FLAGS Flags; /* Tells us how to load */ + int LoadIndex; /* Index of load insn, -1 if invalid */ + CodeEntry* LoadEntry; /* The actual entry, 0 if invalid */ + int LoadYIndex; /* Index of Y-load insn, -1 if invalid */ + CodeEntry* LoadYEntry; /* The actual Y-load entry, 0 if invalid */ + int XferIndex; /* Index of transfer insn */ + CodeEntry* XferEntry; /* The actual transfer entry */ + int Offs; /* Stack offset if data is on stack */ +}; + +/* Now combined for both registers */ +typedef struct LoadInfo LoadInfo; +struct LoadInfo { + LoadRegInfo A; /* Info for A register */ + LoadRegInfo X; /* Info for X register */ + LoadRegInfo Y; /* Info for Y register */ +}; + +/* Structure forward decl */ +typedef struct StackOpData StackOpData; +typedef struct OptFuncDesc OptFuncDesc; + +/* Structure that holds the needed data */ +struct StackOpData { + CodeSeg* Code; /* Pointer to code segment */ + unsigned Flags; /* Flags to remember things */ + + /* Pointer to optimizer subfunction description */ + const OptFuncDesc* OptFunc; + + /* ZP register usage inside the sequence */ + unsigned ZPUsage; + unsigned ZPChanged; + + /* Freedom of registers inside the sequence */ + unsigned UsedRegs; /* Registers used */ + + /* Whether the rhs is changed multiple times */ + int RhsMultiChg; + + /* Register load information for lhs and rhs */ + LoadInfo Lhs; + LoadInfo Rhs; + + /* Several indices of insns in the code segment */ + int PushIndex; /* Index of call to pushax in codeseg */ + int OpIndex; /* Index of actual operation */ + + /* Pointers to insns in the code segment */ + CodeEntry* PrevEntry; /* Entry before the call to pushax */ + CodeEntry* PushEntry; /* Pointer to entry with call to pushax */ + CodeEntry* OpEntry; /* Pointer to entry with op */ + CodeEntry* NextEntry; /* Entry after the op */ + + const char* ZPLo; /* Lo byte of zero page loc to use */ + const char* ZPHi; /* Hi byte of zero page loc to use */ + unsigned IP; /* Insertion point used by some routines */ +}; + + + +/*****************************************************************************/ +/* Load tracking code */ +/*****************************************************************************/ + + + +void ClearLoadRegInfo (LoadRegInfo* LRI); +/* Clear a LoadRegInfo struct */ + +void CopyLoadRegInfo (LoadRegInfo* To, LoadRegInfo* From); +/* Copy a LoadRegInfo struct */ + +void FinalizeLoadRegInfo (LoadRegInfo* LRI, CodeSeg* S); +/* Prepare a LoadRegInfo struct for use */ + +void AdjustLoadRegInfo (LoadRegInfo* LRI, int Index, int Change); +/* Adjust a load register info struct after deleting or inserting an entry +** with a given index +*/ + +void ClearLoadInfo (LoadInfo* LI); +/* Clear a LoadInfo struct */ + +void CopyLoadInfo (LoadInfo* To, LoadInfo* From); +/* Copy a LoadInfo struct */ + +void FinalizeLoadInfo (LoadInfo* LI, CodeSeg* S); +/* Prepare a LoadInfo struct for use */ + +void AdjustLoadInfo (LoadInfo* LI, int Index, int Change); +/* Adjust a load info struct after deleting entry with a given index */ + +RegInfo* GetLastChangedRegInfo (StackOpData* D, LoadRegInfo* Reg); +/* Get RegInfo of the last insn entry that changed the reg */ + +unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I); +/* Track loads for a code entry. +** Return used registers. +*/ + +void SetDontRemoveEntryFlag (LoadRegInfo* LRI); +/* Flag the entry as non-removable according to register flags */ + +void ResetDontRemoveEntryFlag (LoadRegInfo* LRI); +/* Unflag the entry as non-removable according to register flags */ + +void SetDontRemoveEntryFlags (StackOpData* D); +/* Flag the entries as non-removable according to register flags */ + +void ResetDontRemoveEntryFlags (StackOpData* D); +/* Unflag the entries as non-removable according to register flags */ + +void ResetStackOpData (StackOpData* Data); +/* Reset the given data structure */ + + + +/*****************************************************************************/ +/* Helpers */ +/*****************************************************************************/ + + + +void InsertEntry (StackOpData* D, CodeEntry* E, int Index); +/* Insert a new entry. Depending on Index, D->PushIndex and D->OpIndex will +** be adjusted by this function. +*/ + +void DelEntry (StackOpData* D, int Index); +/* Delete an entry. Depending on Index, D->PushIndex and D->OpIndex will be +** adjusted by this function, and PushEntry/OpEntry may get invalidated. +*/ + +void AdjustStackOffset (StackOpData* D, unsigned Offs); +/* Adjust the offset for all stack accesses in the range PushIndex to OpIndex. +** OpIndex is adjusted according to the insertions. +*/ + +int IsRegVar (StackOpData* D); +/* If the value pushed is that of a zeropage variable that is unchanged until Op, +** replace ZPLo and ZPHi in the given StackOpData struct by the variable and return true. +** Otherwise leave D untouched and return false. +*/ + +void AddStoreLhsA (StackOpData* D); +/* Add a store to zero page after the push insn */ + +void AddStoreLhsX (StackOpData* D); +/* Add a store to zero page after the push insn */ + +void ReplacePushByStore (StackOpData* D); +/* Replace the call to the push subroutine by a store into the zero page +** location (actually, the push is not replaced, because we need it for +** later, but the name is still ok since the push will get removed at the +** end of each routine). +*/ + +void AddOpLow (StackOpData* D, opc_t OPC, LoadInfo* LI); +/* Add an op for the low byte of an operator. This function honours the +** OP_DIRECT and OP_RELOAD_Y flags and generates the necessary instructions. +** All code is inserted at the current insertion point. +*/ + +void AddOpHigh (StackOpData* D, opc_t OPC, LoadInfo* LI, int KeepResult); +/* Add an op for the high byte of an operator. Special cases (constant values +** or similar) have to be checked separately, the function covers only the +** generic case. Code is inserted at the insertion point. +*/ + +void RemoveRegLoads (StackOpData* D, LoadInfo* LI); +/* Remove register load insns */ + + +void RemoveRemainders (StackOpData* D); +/* Remove the code that is unnecessary after translation of the sequence */ + +int HarmlessCall (const char* Name); +/* Check if this is a call to a harmless subroutine that will not interrupt +** the pushax/op sequence when encountered. +*/ + +/* End of codeoptutil.h */ + +#endif diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index c31b0ec97..457f9ff1f 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -41,57 +41,12 @@ /* cc65 */ #include "codeent.h" #include "codeinfo.h" +#include "codeoptutil.h" #include "coptstop.h" #include "error.h" -/*****************************************************************************/ -/* Load tracking data */ -/*****************************************************************************/ - - - -/* LoadRegInfo flags set by DirectOp */ -typedef enum { - LI_NONE = 0x00, - LI_DIRECT = 0x01, /* Direct op may be used */ - LI_RELOAD_Y = 0x02, /* Reload index register Y */ - LI_REMOVE = 0x04, /* Load may be removed */ - LI_DONT_REMOVE = 0x08, /* Load may not be removed */ - LI_CHECK_ARG = 0x10, /* Load src might be modified later */ - LI_SRC_CHG = 0x20, /* Load src is possibly modified */ - LI_LOAD_INSN = 0x40, /* Has a load insn */ - LI_CHECK_Y = 0x80, /* Indexed load src might be modified later */ - LI_USED_BY_A = 0x100, /* Content used by RegA */ - LI_USED_BY_X = 0x200, /* Content used by RegX */ - LI_USED_BY_Y = 0x400, /* Content used by RegY */ - LI_SP = 0x800, /* Content on stack */ -} LI_FLAGS; - -/* Structure that tells us how to load the lhs values */ -typedef struct LoadRegInfo LoadRegInfo; -struct LoadRegInfo { - LI_FLAGS Flags; /* Tells us how to load */ - int LoadIndex; /* Index of load insn, -1 if invalid */ - CodeEntry* LoadEntry; /* The actual entry, 0 if invalid */ - int LoadYIndex; /* Index of Y-load insn, -1 if invalid */ - CodeEntry* LoadYEntry; /* The actual Y-load entry, 0 if invalid */ - int XferIndex; /* Index of transfer insn */ - CodeEntry* XferEntry; /* The actual transfer entry */ - int Offs; /* Stack offset if data is on stack */ -}; - -/* Now combined for both registers */ -typedef struct LoadInfo LoadInfo; -struct LoadInfo { - LoadRegInfo A; /* Info for A register */ - LoadRegInfo X; /* Info for X register */ - LoadRegInfo Y; /* Info for Y register */ -}; - - - /*****************************************************************************/ /* Data */ /*****************************************************************************/ @@ -121,9 +76,6 @@ typedef enum { OP_RHS_REMOVE_DIRECT = 0xC000, /* RHS must be directly removable */ } OP_FLAGS; -/* Structure forward decl */ -typedef struct StackOpData StackOpData; - /* Structure that describes an optimizer subfunction for a specific op */ typedef unsigned (*OptFunc) (StackOpData* D); typedef struct OptFuncDesc OptFuncDesc; @@ -134,434 +86,6 @@ struct OptFuncDesc { OP_FLAGS Flags; /* Flags */ }; -/* Structure that holds the needed data */ -struct StackOpData { - CodeSeg* Code; /* Pointer to code segment */ - unsigned Flags; /* Flags to remember things */ - - /* Pointer to optimizer subfunction description */ - const OptFuncDesc* OptFunc; - - /* ZP register usage inside the sequence */ - unsigned ZPUsage; - unsigned ZPChanged; - - /* Freedom of registers inside the sequence */ - unsigned UsedRegs; /* Registers used */ - - /* Whether the rhs is changed multiple times */ - int RhsMultiChg; - - /* Register load information for lhs and rhs */ - LoadInfo Lhs; - LoadInfo Rhs; - - /* Several indices of insns in the code segment */ - int PushIndex; /* Index of call to pushax in codeseg */ - int OpIndex; /* Index of actual operation */ - - /* Pointers to insns in the code segment */ - CodeEntry* PrevEntry; /* Entry before the call to pushax */ - CodeEntry* PushEntry; /* Pointer to entry with call to pushax */ - CodeEntry* OpEntry; /* Pointer to entry with op */ - CodeEntry* NextEntry; /* Entry after the op */ - - const char* ZPLo; /* Lo byte of zero page loc to use */ - const char* ZPHi; /* Hi byte of zero page loc to use */ - unsigned IP; /* Insertion point used by some routines */ -}; - - - -/*****************************************************************************/ -/* Load tracking code */ -/*****************************************************************************/ - - - -static void ClearLoadRegInfo (LoadRegInfo* RI) -/* Clear a LoadRegInfo struct */ -{ - RI->Flags = LI_NONE; - RI->LoadIndex = -1; - RI->LoadEntry = 0; - RI->LoadYIndex = -1; - RI->LoadYEntry = 0; - RI->XferIndex = -1; - RI->XferEntry = 0; - RI->Offs = 0; -} - - - -static void CopyLoadRegInfo (LoadRegInfo* To, LoadRegInfo* From) -/* Copy a LoadRegInfo struct */ -{ - To->Flags = From->Flags; - To->LoadIndex = From->LoadIndex; - To->LoadEntry = From->LoadEntry; - To->LoadYIndex = From->LoadYIndex; - To->LoadYEntry = From->LoadYEntry; - To->XferIndex = From->XferIndex; - To->XferEntry = From->XferEntry; - To->Offs = From->Offs; -} - - - -static void FinalizeLoadRegInfo (LoadRegInfo* RI, CodeSeg* S) -/* Prepare a LoadRegInfo struct for use */ -{ - /* Get the entries */ - if (RI->LoadIndex >= 0) { - RI->LoadEntry = CS_GetEntry (S, RI->LoadIndex); - } else { - RI->LoadEntry = 0; - } - if (RI->XferIndex >= 0) { - RI->XferEntry = CS_GetEntry (S, RI->XferIndex); - } else { - RI->XferEntry = 0; - } - /* Load from src not modified before op can be treated as direct */ - if ((RI->Flags & LI_SRC_CHG) == 0 && - (RI->Flags & (LI_CHECK_ARG | LI_CHECK_Y)) != 0) { - RI->Flags |= LI_DIRECT; - if ((RI->Flags & LI_CHECK_Y) != 0) { - RI->Flags |= LI_RELOAD_Y; - } - } - /* We cannot ldy src,y */ - if ((RI->Flags & LI_RELOAD_Y) != 0 && - RI->LoadYEntry != 0 && - (RI->LoadYEntry->Use & REG_Y) == REG_Y) { - RI->Flags &= ~LI_DIRECT; - } -} - - - -static void ClearLoadInfo (LoadInfo* LI) -/* Clear a LoadInfo struct */ -{ - ClearLoadRegInfo (&LI->A); - ClearLoadRegInfo (&LI->X); - ClearLoadRegInfo (&LI->Y); -} - - - -static void CopyLoadInfo (LoadInfo* To, LoadInfo* From) -/* Copy a LoadInfo struct */ -{ - CopyLoadRegInfo (&To->A, &From->A); - CopyLoadRegInfo (&To->X, &From->X); - CopyLoadRegInfo (&To->Y, &From->Y); -} - - - -static void AdjustLoadRegInfo (LoadRegInfo* RI, int Index, int Change) -/* Adjust a load register info struct after deleting or inserting an entry -** with a given index -*/ -{ - CHECK (abs (Change) == 1); - if (Change < 0) { - /* Deletion */ - if (Index < RI->LoadIndex) { - --RI->LoadIndex; - } else if (Index == RI->LoadIndex) { - /* Has been removed */ - RI->LoadIndex = -1; - RI->LoadEntry = 0; - } - if (Index < RI->XferIndex) { - --RI->XferIndex; - } else if (Index == RI->XferIndex) { - /* Has been removed */ - RI->XferIndex = -1; - RI->XferEntry = 0; - } - } else { - /* Insertion */ - if (Index <= RI->LoadIndex) { - ++RI->LoadIndex; - } - if (Index <= RI->XferIndex) { - ++RI->XferIndex; - } - } -} - - - -static void FinalizeLoadInfo (LoadInfo* LI, CodeSeg* S) -/* Prepare a LoadInfo struct for use */ -{ - /* Get the entries */ - FinalizeLoadRegInfo (&LI->A, S); - FinalizeLoadRegInfo (&LI->X, S); - FinalizeLoadRegInfo (&LI->Y, S); -} - - - -static void AdjustLoadInfo (LoadInfo* LI, int Index, int Change) -/* Adjust a load info struct after deleting entry with a given index */ -{ - AdjustLoadRegInfo (&LI->A, Index, Change); - AdjustLoadRegInfo (&LI->X, Index, Change); - AdjustLoadRegInfo (&LI->Y, Index, Change); -} - - - -static int Affected (LoadRegInfo* RI, const CodeEntry* E) -/* Check if the load src may be modified between the pushax and op */ -{ - fncls_t fncls; - unsigned int Use; - unsigned int Chg; - unsigned int UseToCheck = 0; - - if ((RI->Flags & (LI_CHECK_ARG | LI_CHECK_Y)) != 0) { - if (E->AM == AM65_IMM || E->AM == AM65_ACC || E->AM == AM65_IMP || E->AM == AM65_BRA) { - return 0; - } - CHECK ((RI->Flags & LI_CHECK_ARG) == 0 || RI->LoadEntry != 0); - CHECK ((RI->Flags & LI_CHECK_Y) == 0 || RI->LoadYEntry != 0); - - if ((RI->Flags & LI_CHECK_ARG) != 0) { - UseToCheck |= RI->LoadEntry->Use; - } - - if ((RI->Flags & LI_CHECK_Y) != 0) { - UseToCheck |= RI->LoadYEntry->Use; - } - - if (E->OPC == OP65_JSR) { - /* Try to know about the function */ - fncls = GetFuncInfo (E->Arg, &Use, &Chg); - if ((UseToCheck & Chg & REG_ALL) == 0 && - fncls == FNCLS_BUILTIN) { - /* Builtin functions are known to be harmless */ - return 0; - } - /* Otherwise play it safe */ - return 1; - } else if (E->OPC == OP65_DEC || E->OPC == OP65_INC || - E->OPC == OP65_ASL || E->OPC == OP65_LSR || - E->OPC == OP65_ROL || E->OPC == OP65_ROR || - E->OPC == OP65_TRB || E->OPC == OP65_TSB || - E->OPC == OP65_STA || E->OPC == OP65_STX || E->OPC == OP65_STY) { - if ((E->AM == AM65_ABS || E->AM == AM65_ZP)) { - if ((RI->Flags & LI_CHECK_ARG) != 0 && - strcmp (RI->LoadEntry->Arg, E->Arg) == 0) { - return 1; - } - if ((RI->Flags & LI_CHECK_Y) != 0 && - strcmp (RI->LoadYEntry->Arg, E->Arg) == 0) { - return 1; - } - return 0; - } - /* We could've check further for more cases where the load target isn't modified, - ** But for now let's save the trouble and just play it safe. */ - return 1; - } - } - return 0; -} - - - -static void HonourUseAndChg (LoadRegInfo* RI, unsigned Reg, const CodeEntry* E, int I) -/* Honour use and change flags for an instruction */ -{ - if ((E->Chg & Reg) != 0) { - /* Remember this as an indirect load */ - ClearLoadRegInfo (RI); - RI->LoadIndex = I; - RI->XferIndex = -1; - RI->Flags = 0; - } else if (Affected (RI, E)) { - RI->Flags |= LI_SRC_CHG; - } -} - - - -static unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) -/* Track loads for a code entry. -** Return used registers. -*/ -{ - unsigned Used; - CodeEntry* E = CS_GetEntry (S, I); - CHECK (E != 0); - - /* By default */ - Used = E->Use; - - /* Whether we had a load or xfer op before or not, the newly loaded value - ** will be the real one used for the pushax/op unless it's overwritten, - ** so we can just reset the flags about it in such cases. - */ - if (E->Info & OF_LOAD) { - - LoadRegInfo* RI = 0; - - /* Determine, which register was loaded */ - if (E->Chg & REG_A) { - RI = &LI->A; - } else if (E->Chg & REG_X) { - RI = &LI->X; - } else if (E->Chg & REG_Y) { - RI = &LI->Y; - } - CHECK (RI != 0); - - /* Remember the load */ - RI->LoadIndex = I; - RI->XferIndex = -1; - - /* Set load flags */ - RI->Flags = LI_LOAD_INSN; - if (E->AM == AM65_IMM) { - /* These insns are all ok and replaceable */ - RI->Flags |= LI_DIRECT; - } else if (E->AM == AM65_ZP || E->AM == AM65_ABS) { - /* These insns are replaceable only if they are not modified later */ - RI->Flags |= LI_CHECK_ARG; - } else if (E->AM == AM65_ZPY || E->AM == AM65_ABSY) { - /* These insns are replaceable only if they are not modified later */ - RI->Flags |= LI_CHECK_ARG | LI_CHECK_Y; - } else if (E->AM == AM65_ZP_INDY && - strcmp (E->Arg, "sp") == 0) { - /* A load from the stack with known offset is also ok, but in this - ** case we must reload the index register later. Please note that - ** a load indirect via other zero page locations is not ok, since - ** these locations may change between the push and the actual - ** operation. - */ - RI->Flags |= LI_DIRECT | LI_CHECK_Y | LI_SP; - - /* Reg Y can be regarded as unused if this load is removed */ - Used &= ~REG_Y; - if (RI == &LI->A) { - LI->Y.Flags |= LI_USED_BY_A; - } else { - LI->Y.Flags |= LI_USED_BY_X; - } - } - - /* If the load offset has a known value, we can just remember and reload - ** it into the index register later. - */ - if ((RI->Flags & LI_CHECK_Y) != 0) { - if (RegValIsKnown (E->RI->In.RegY)) { - RI->Offs = (unsigned char)E->RI->In.RegY; - RI->Flags &= ~LI_CHECK_Y; - RI->Flags |= LI_RELOAD_Y; - } else { - /* We need to check if the src of Y is changed */ - RI->LoadYIndex = LI->Y.LoadIndex; - RI->LoadYEntry = CS_GetEntry (S, RI->LoadYIndex); - } - } - - /* Watch for any change of the load target */ - if ((RI->Flags & LI_CHECK_ARG) != 0) { - RI->LoadEntry = CS_GetEntry (S, I); - } - - } else if (E->Info & OF_XFR) { - - /* Determine source and target of the transfer and handle the TSX insn */ - LoadRegInfo* Src; - LoadRegInfo* Tgt; - switch (E->OPC) { - case OP65_TAX: - Src = &LI->A; - Tgt = &LI->X; - Used &= ~REG_A; - Src->Flags |= LI_USED_BY_X; - break; - case OP65_TAY: - Src = &LI->A; - Tgt = &LI->Y; - Used &= ~REG_A; - Src->Flags |= LI_USED_BY_Y; - break; - case OP65_TXA: - Src = &LI->X; - Tgt = &LI->A; - Used &= ~REG_X; - Src->Flags |= LI_USED_BY_A; - break; - case OP65_TYA: - Src = &LI->Y; - Tgt = &LI->A; - Used &= ~REG_Y; - Src->Flags |= LI_USED_BY_A; - break; - case OP65_TSX: - ClearLoadRegInfo (&LI->X); - return Used; - case OP65_TXS: - return Used; - default: Internal ("Unknown XFR insn in TrackLoads"); - } - - /* Transfer the data */ - Tgt->LoadIndex = Src->LoadIndex; - Tgt->LoadEntry = Src->LoadEntry; - Tgt->LoadYIndex = Src->LoadYIndex; - Tgt->LoadYEntry = Src->LoadYEntry; - Tgt->XferIndex = I; - Tgt->Offs = Src->Offs; - Tgt->Flags = Src->Flags; - - } else if (CE_IsCallTo (E, "ldaxysp") && RegValIsKnown (E->RI->In.RegY)) { - - /* Both registers set, Y changed */ - LI->A.LoadIndex = I; - LI->A.XferIndex = -1; - LI->A.Flags = (LI_LOAD_INSN | LI_DIRECT | LI_RELOAD_Y | LI_SP); - LI->A.Offs = (unsigned char) E->RI->In.RegY - 1; - - LI->X.LoadIndex = I; - LI->X.XferIndex = -1; - LI->X.Flags = (LI_LOAD_INSN | LI_DIRECT | LI_RELOAD_Y | LI_SP); - LI->X.Offs = (unsigned char) E->RI->In.RegY; - - /* Reg Y can be regarded as unused if this load is removed */ - Used &= ~REG_Y; - LI->Y.Flags |= LI_USED_BY_A | LI_USED_BY_X; - - } else { - HonourUseAndChg (&LI->A, REG_A, E, I); - HonourUseAndChg (&LI->X, REG_X, E, I); - HonourUseAndChg (&LI->Y, REG_Y, E, I); - - /* The other operand may be affected too */ - if (LLI != 0) { - if (Affected (&LLI->A, E)) { - LLI->A.Flags |= LI_SRC_CHG; - } - if (Affected (&LLI->X, E)) { - LLI->X.Flags |= LI_SRC_CHG; - } - if (Affected (&LLI->Y, E)) { - LLI->Y.Flags |= LI_SRC_CHG; - } - } - } - - return Used; -} - /*****************************************************************************/ @@ -570,421 +94,6 @@ static unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) -static void InsertEntry (StackOpData* D, CodeEntry* E, int Index) -/* Insert a new entry. Depending on Index, D->PushIndex and D->OpIndex will -** be adjusted by this function. -*/ -{ - /* Insert the entry into the code segment */ - CS_InsertEntry (D->Code, E, Index); - - /* Adjust register loads if necessary */ - AdjustLoadInfo (&D->Lhs, Index, 1); - AdjustLoadInfo (&D->Rhs, Index, 1); - - /* Adjust the indices if necessary */ - if (D->PushEntry && Index <= D->PushIndex) { - ++D->PushIndex; - } - if (D->OpEntry && Index <= D->OpIndex) { - ++D->OpIndex; - } -} - - - -static void DelEntry (StackOpData* D, int Index) -/* Delete an entry. Depending on Index, D->PushIndex and D->OpIndex will be -** adjusted by this function, and PushEntry/OpEntry may get invalidated. -*/ -{ - /* Delete the entry from the code segment */ - CS_DelEntry (D->Code, Index); - - /* Adjust register loads if necessary */ - AdjustLoadInfo (&D->Lhs, Index, -1); - AdjustLoadInfo (&D->Rhs, Index, -1); - - /* Adjust the other indices if necessary */ - if (Index < D->PushIndex) { - --D->PushIndex; - } else if (Index == D->PushIndex) { - D->PushEntry = 0; - } - if (Index < D->OpIndex) { - --D->OpIndex; - } else if (Index == D->OpIndex) { - D->OpEntry = 0; - } -} - - - -static void AdjustStackOffset (StackOpData* D, unsigned Offs) -/* Adjust the offset for all stack accesses in the range PushIndex to OpIndex. -** OpIndex is adjusted according to the insertions. -*/ -{ - /* Walk over all entries */ - int I = D->PushIndex + 1; - while (I < D->OpIndex) { - - CodeEntry* E = CS_GetEntry (D->Code, I); - - /* Check if this entry does a stack access, and if so, if it's a plain - ** load from stack, since this is needed later. - */ - int Correction = 0; - if ((E->Use & REG_SP) != 0) { - - /* Check for some things that should not happen */ - CHECK (E->AM == AM65_ZP_INDY || E->RI->In.RegY >= (short) Offs); - CHECK (strcmp (E->Arg, "sp") == 0); - /* We need to correct this one */ - Correction = (E->OPC == OP65_LDA)? 2 : 1; - - } else if (CE_IsCallTo (E, "ldaxysp")) { - /* We need to correct this one */ - Correction = 1; - } - - if (Correction) { - /* Get the code entry before this one. If it's a LDY, adjust the - ** value. - */ - CodeEntry* P = CS_GetPrevEntry (D->Code, I); - if (P && P->OPC == OP65_LDY && CE_IsConstImm (P)) { - /* The Y load is just before the stack access, adjust it */ - CE_SetNumArg (P, P->Num - Offs); - } else { - /* Insert a new load instruction before the stack access */ - const char* Arg = MakeHexArg (E->RI->In.RegY - Offs); - CodeEntry* X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - InsertEntry (D, X, I++); - } - - /* If we need the value of Y later, be sure to reload it */ - if (RegYUsed (D->Code, I+1)) { - CodeEntry* N; - const char* Arg = MakeHexArg (E->RI->In.RegY); - if (Correction == 2 && (N = CS_GetNextEntry(D->Code, I)) != 0 && - ((N->Info & OF_ZBRA) != 0) && N->JumpTo != 0) { - /* The Y register is used but the load instruction loads A - ** and is followed by a branch that evaluates the zero flag. - ** This means that we cannot just insert the load insn - ** for the Y register at this place, because it would - ** destroy the Z flag. Instead place load insns at the - ** target of the branch and after it. - ** Note: There is a chance that this code won't work. The - ** jump may be a backwards jump (in which case the stack - ** offset has already been adjusted) or there may be other - ** instructions between the load and the conditional jump. - ** Currently the compiler does not generate such code, but - ** it is possible to force the optimizer into something - ** invalid by use of inline assembler. - */ - - /* Add load insn after the branch */ - CodeEntry* X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - InsertEntry (D, X, I+2); - - /* Add load insn before branch target */ - CodeEntry* Y = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - int J = CS_GetEntryIndex (D->Code, N->JumpTo->Owner); - CHECK (J > I); /* Must not happen */ - InsertEntry (D, Y, J); - - /* Move the label to the new insn */ - CodeLabel* L = CS_GenLabel (D->Code, Y); - CS_MoveLabelRef (D->Code, N, L); - } else { - CodeEntry* X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - InsertEntry (D, X, I+1); - /* Skip this instruction in the next round */ - ++I; - } - } - } - - /* Next entry */ - ++I; - } - - /* If we have rhs load insns that load from stack, we'll have to adjust - ** the offsets for these also. - */ - if ((D->Rhs.A.Flags & (LI_RELOAD_Y | LI_SP | LI_CHECK_Y)) == (LI_RELOAD_Y | LI_SP)) { - D->Rhs.A.Offs -= Offs; - } - if ((D->Rhs.X.Flags & (LI_RELOAD_Y | LI_SP | LI_CHECK_Y)) == (LI_RELOAD_Y | LI_SP)) { - D->Rhs.X.Offs -= Offs; - } -} - - - -static void AddStoreLhsA (StackOpData* D) -/* Add a store to zero page after the push insn */ -{ - CodeEntry* X = NewCodeEntry (OP65_STA, AM65_ZP, D->ZPLo, 0, D->PushEntry->LI); - InsertEntry (D, X, D->PushIndex+1); -} - - - -static void AddStoreLhsX (StackOpData* D) -/* Add a store to zero page after the push insn */ -{ - CodeEntry* X = NewCodeEntry (OP65_STX, AM65_ZP, D->ZPHi, 0, D->PushEntry->LI); - InsertEntry (D, X, D->PushIndex+1); -} - - - -static void ReplacePushByStore (StackOpData* D) -/* Replace the call to the push subroutine by a store into the zero page -** location (actually, the push is not replaced, because we need it for -** later, but the name is still ok since the push will get removed at the -** end of each routine). -*/ -{ - /* Store the value into the zeropage instead of pushing it. Check high - ** byte first so that the store is later in A/X order. - */ - if ((D->Lhs.X.Flags & LI_DIRECT) == 0) { - AddStoreLhsX (D); - } - if ((D->Lhs.A.Flags & LI_DIRECT) == 0) { - AddStoreLhsA (D); - } -} - - - -static void AddOpLow (StackOpData* D, opc_t OPC, LoadInfo* LI) -/* Add an op for the low byte of an operator. This function honours the -** OP_DIRECT and OP_RELOAD_Y flags and generates the necessary instructions. -** All code is inserted at the current insertion point. -*/ -{ - CodeEntry* X; - - if ((LI->A.Flags & LI_DIRECT) != 0) { - /* Op with a variable location. If the location is on the stack, we - ** need to reload the Y register. - */ - if ((LI->A.Flags & LI_RELOAD_Y) == 0) { - - /* opc ... */ - CodeEntry* LoadA = LI->A.LoadEntry; - X = NewCodeEntry (OPC, LoadA->AM, LoadA->Arg, 0, D->OpEntry->LI); - InsertEntry (D, X, D->IP++); - - } else { - - if ((LI->A.Flags & LI_CHECK_Y) == 0) { - /* ldy #offs */ - X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (LI->A.Offs), 0, D->OpEntry->LI); - } else { - /* ldy src */ - X = NewCodeEntry (OP65_LDY, LI->A.LoadYEntry->AM, LI->A.LoadYEntry->Arg, 0, D->OpEntry->LI); - } - InsertEntry (D, X, D->IP++); - - if (LI->A.LoadEntry->OPC == OP65_JSR) { - /* opc (sp),y */ - X = NewCodeEntry (OPC, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI); - } else { - /* opc src,y */ - X = NewCodeEntry (OPC, LI->A.LoadEntry->AM, LI->A.LoadEntry->Arg, 0, D->OpEntry->LI); - } - InsertEntry (D, X, D->IP++); - - } - - /* In both cases, we can remove the load */ - LI->A.Flags |= LI_REMOVE; - - } else { - - /* Op with temp storage */ - X = NewCodeEntry (OPC, AM65_ZP, D->ZPLo, 0, D->OpEntry->LI); - InsertEntry (D, X, D->IP++); - - } -} - - - -static void AddOpHigh (StackOpData* D, opc_t OPC, LoadInfo* LI, int KeepResult) -/* Add an op for the high byte of an operator. Special cases (constant values -** or similar) have to be checked separately, the function covers only the -** generic case. Code is inserted at the insertion point. -*/ -{ - CodeEntry* X; - - if (KeepResult) { - /* pha */ - X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, D->OpEntry->LI); - InsertEntry (D, X, D->IP++); - } - - /* txa */ - X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, D->OpEntry->LI); - InsertEntry (D, X, D->IP++); - - if ((LI->X.Flags & LI_DIRECT) != 0) { - - if ((LI->X.Flags & LI_RELOAD_Y) == 0) { - - /* opc xxx */ - CodeEntry* LoadX = LI->X.LoadEntry; - X = NewCodeEntry (OPC, LoadX->AM, LoadX->Arg, 0, D->OpEntry->LI); - InsertEntry (D, X, D->IP++); - - } else { - - if ((LI->A.Flags & LI_CHECK_Y) == 0) { - /* ldy #const */ - X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (LI->X.Offs), 0, D->OpEntry->LI); - } else { - /* ldy src */ - X = NewCodeEntry (OP65_LDY, LI->X.LoadYEntry->AM, LI->X.LoadYEntry->Arg, 0, D->OpEntry->LI); - } - InsertEntry (D, X, D->IP++); - - if (LI->X.LoadEntry->OPC == OP65_JSR) { - /* opc (sp),y */ - X = NewCodeEntry (OPC, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI); - } else { - /* opc src,y */ - X = NewCodeEntry (OPC, LI->A.LoadEntry->AM, LI->A.LoadEntry->Arg, 0, D->OpEntry->LI); - } - InsertEntry (D, X, D->IP++); - } - - /* In both cases, we can remove the load */ - LI->X.Flags |= LI_REMOVE; - - } else { - /* opc zphi */ - X = NewCodeEntry (OPC, AM65_ZP, D->ZPHi, 0, D->OpEntry->LI); - InsertEntry (D, X, D->IP++); - } - - if (KeepResult) { - /* tax */ - X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, D->OpEntry->LI); - InsertEntry (D, X, D->IP++); - - /* pla */ - X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, D->OpEntry->LI); - InsertEntry (D, X, D->IP++); - } -} - - - -static void RemoveRegLoads (StackOpData* D, LoadInfo* LI) -/* Remove register load insns */ -{ - /* Both registers may be loaded with one insn, but DelEntry will in this - ** case clear the other one. - */ - if ((LI->A.Flags & LI_REMOVE) == LI_REMOVE) { - if (LI->A.LoadIndex >= 0 && - (LI->A.LoadEntry->Flags & CEF_DONT_REMOVE) == 0) { - DelEntry (D, LI->A.LoadIndex); - } - if (LI->A.XferIndex >= 0 && - (LI->A.XferEntry->Flags & CEF_DONT_REMOVE) == 0) { - DelEntry (D, LI->A.XferIndex); - } - } - if ((LI->X.Flags & LI_REMOVE) == LI_REMOVE) { - if (LI->X.LoadIndex >= 0 && - (LI->X.LoadEntry->Flags & CEF_DONT_REMOVE) == 0) { - DelEntry (D, LI->X.LoadIndex); - } - if (LI->X.XferIndex >= 0 && - (LI->X.XferEntry->Flags & CEF_DONT_REMOVE) == 0) { - DelEntry (D, LI->X.XferIndex); - } - } -} - - - -static void RemoveRemainders (StackOpData* D) -/* Remove the code that is unnecessary after translation of the sequence */ -{ - /* Remove the register loads for lhs and rhs if nothing prevents that */ - RemoveRegLoads (D, &D->Lhs); - RemoveRegLoads (D, &D->Rhs); - - /* Remove the push and the operator routine */ - DelEntry (D, D->OpIndex); - DelEntry (D, D->PushIndex); -} - - - -static int IsRegVar (StackOpData* D) -/* If the value pushed is that of a zeropage variable that is unchanged until Op, -** replace ZPLo and ZPHi in the given StackOpData struct by the variable and return true. -** Otherwise leave D untouched and return false. -*/ -{ - CodeEntry* LoadA = D->Lhs.A.LoadEntry; - CodeEntry* LoadX = D->Lhs.X.LoadEntry; - unsigned Len; - - /* Must be unchanged till Op */ - if ((D->Lhs.A.Flags & (LI_DIRECT | LI_RELOAD_Y)) != LI_DIRECT || - (D->Lhs.X.Flags & (LI_DIRECT | LI_RELOAD_Y)) != LI_DIRECT) { - return 0; - } - - /* Must have both load insns */ - if (LoadA == 0 || LoadX == 0) { - return 0; - } - - /* Must be loads from zp */ - if (LoadA->AM != AM65_ZP || LoadX->AM != AM65_ZP) { - return 0; - } - - /* Must be the same zp loc with high byte in X */ - Len = strlen (LoadA->Arg); - if (strncmp (LoadA->Arg, LoadX->Arg, Len) != 0 || - strcmp (LoadX->Arg + Len, "+1") != 0) { - return 0; - } - - /* Use the zero page location directly */ - D->ZPLo = LoadA->Arg; - D->ZPHi = LoadX->Arg; - return 1; -} - - - -static RegInfo* GetLastChangedRegInfo (StackOpData* D, LoadRegInfo* Reg) -/* Get RegInfo of the last load insn entry */ -{ - CodeEntry* E; - - if (Reg->LoadIndex >= 0 && (E = CS_GetEntry (D->Code, Reg->LoadIndex)) != 0) { - return E->RI; - } - - return 0; -} - - - static int SameRegAValue (StackOpData* D) /* Check if Rhs Reg A == Lhs Reg A */ { @@ -2304,94 +1413,6 @@ static const OptFuncDesc* FindFunc (const OptFuncDesc FuncTable[], size_t Count, -static int CmpHarmless (const void* Key, const void* Entry) -/* Compare function for bsearch */ -{ - return strcmp (Key, *(const char**)Entry); -} - - - -static int HarmlessCall (const char* Name) -/* Check if this is a call to a harmless subroutine that will not interrupt -** the pushax/op sequence when encountered. -*/ -{ - static const char* const Tab[] = { - "aslax1", - "aslax2", - "aslax3", - "aslax4", - "aslaxy", - "asrax1", - "asrax2", - "asrax3", - "asrax4", - "asraxy", - "bcastax", - "bnegax", - "complax", - "decax1", - "decax2", - "decax3", - "decax4", - "decax5", - "decax6", - "decax7", - "decax8", - "decaxy", - "incax1", - "incax2", - "incax3", - "incax4", - "incax5", - "incax6", - "incax7", - "incax8", - "incaxy", - "ldaxidx", - "ldaxysp", - "negax", - "shlax1", - "shlax2", - "shlax3", - "shlax4", - "shlaxy", - "shrax1", - "shrax2", - "shrax3", - "shrax4", - "shraxy", - }; - - void* R = bsearch (Name, - Tab, - sizeof (Tab) / sizeof (Tab[0]), - sizeof (Tab[0]), - CmpHarmless); - return (R != 0); -} - - - -static void ResetStackOpData (StackOpData* Data) -/* Reset the given data structure */ -{ - Data->OptFunc = 0; - Data->ZPUsage = REG_NONE; - Data->ZPChanged = REG_NONE; - Data->UsedRegs = REG_NONE; - Data->RhsMultiChg = 0; - - ClearLoadInfo (&Data->Lhs); - ClearLoadInfo (&Data->Rhs); - - Data->PushIndex = -1; - Data->OpIndex = -1; -} - - - static int PreCondOk (StackOpData* D) /* Check if the preconditions for a call to the optimizer subfunction are ** satisfied. As a side effect, this function will also choose the zero page @@ -2701,52 +1722,6 @@ static int RegAPreCondOk (StackOpData* D) -static void SetDontRemoveEntryFlag (LoadRegInfo* RI) -/* Flag the entry as non-removable according to register flags */ -{ - if (RI->Flags & LI_DONT_REMOVE) { - if (RI->LoadEntry != 0) { - RI->LoadEntry->Flags |= CEF_DONT_REMOVE; - } - } -} - - - -static void ResetDontRemoveEntryFlag (LoadRegInfo* RI) -/* Unflag the entry as non-removable according to register flags */ -{ - if (RI->Flags & LI_DONT_REMOVE) { - if (RI->LoadEntry != 0) { - RI->LoadEntry->Flags &= ~CEF_DONT_REMOVE; - } - } -} - - - -static void SetDontRemoveEntryFlags (StackOpData* D) -/* Flag the entries as non-removable according to register flags */ -{ - SetDontRemoveEntryFlag (&D->Lhs.A); - SetDontRemoveEntryFlag (&D->Lhs.X); - SetDontRemoveEntryFlag (&D->Rhs.A); - SetDontRemoveEntryFlag (&D->Rhs.X); -} - - - -static void ResetDontRemoveEntryFlags (StackOpData* D) -/* Unflag the entries as non-removable according to register flags */ -{ - ResetDontRemoveEntryFlag (&D->Lhs.A); - ResetDontRemoveEntryFlag (&D->Lhs.X); - ResetDontRemoveEntryFlag (&D->Rhs.A); - ResetDontRemoveEntryFlag (&D->Rhs.X); -} - - - unsigned OptStackOps (CodeSeg* S) /* Optimize operations that take operands via the stack */ { From f3771a465d9bb001ff8c636b6e8856d36023fa73 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 16 Apr 2020 17:17:08 +0800 Subject: [PATCH 0535/2710] Fixed various issues in the usage-tracking code. Added some utility functions. --- src/cc65/codeoptutil.c | 2348 +++++++++++++++++++++++++++++++++++++--- src/cc65/codeoptutil.h | 283 ++++- src/cc65/coptstop.c | 156 ++- 3 files changed, 2509 insertions(+), 278 deletions(-) diff --git a/src/cc65/codeoptutil.c b/src/cc65/codeoptutil.c index 999c18d33..46acbaaff 100644 --- a/src/cc65/codeoptutil.c +++ b/src/cc65/codeoptutil.c @@ -52,17 +52,17 @@ -void ClearLoadRegInfo (LoadRegInfo* RI) +void ClearLoadRegInfo (LoadRegInfo* LRI) /* Clear a LoadRegInfo struct */ { - RI->Flags = LI_NONE; - RI->LoadIndex = -1; - RI->LoadEntry = 0; - RI->LoadYIndex = -1; - RI->LoadYEntry = 0; - RI->XferIndex = -1; - RI->XferEntry = 0; - RI->Offs = 0; + LRI->Flags = LI_NONE; + LRI->LoadIndex = -1; + LRI->LoadEntry = 0; + LRI->LoadYIndex = -1; + LRI->LoadYEntry = 0; + LRI->ChgIndex = -1; + LRI->ChgEntry = 0; + LRI->Offs = 0; } @@ -75,46 +75,52 @@ void CopyLoadRegInfo (LoadRegInfo* To, LoadRegInfo* From) To->LoadEntry = From->LoadEntry; To->LoadYIndex = From->LoadYIndex; To->LoadYEntry = From->LoadYEntry; - To->XferIndex = From->XferIndex; - To->XferEntry = From->XferEntry; + To->ChgIndex = From->ChgIndex; + To->ChgEntry = From->ChgEntry; To->Offs = From->Offs; } -void FinalizeLoadRegInfo (LoadRegInfo* RI, CodeSeg* S) +void FinalizeLoadRegInfo (LoadRegInfo* LRI, CodeSeg* S) /* Prepare a LoadRegInfo struct for use */ { /* Get the entries */ - if (RI->LoadIndex >= 0) { - RI->LoadEntry = CS_GetEntry (S, RI->LoadIndex); + if (LRI->LoadIndex >= 0) { + LRI->LoadEntry = CS_GetEntry (S, LRI->LoadIndex); } else { - RI->LoadEntry = 0; + LRI->LoadEntry = 0; } - if (RI->XferIndex >= 0) { - RI->XferEntry = CS_GetEntry (S, RI->XferIndex); + if (LRI->LoadYIndex >= 0) { + LRI->LoadYEntry = CS_GetEntry (S, LRI->LoadYIndex); } else { - RI->XferEntry = 0; + LRI->LoadYEntry = 0; } + if (LRI->ChgIndex >= 0) { + LRI->ChgEntry = CS_GetEntry (S, LRI->ChgIndex); + } else { + LRI->ChgEntry = 0; + } + /* Load from src not modified before op can be treated as direct */ - if ((RI->Flags & LI_SRC_CHG) == 0 && - (RI->Flags & (LI_CHECK_ARG | LI_CHECK_Y)) != 0) { - RI->Flags |= LI_DIRECT; - if ((RI->Flags & LI_CHECK_Y) != 0) { - RI->Flags |= LI_RELOAD_Y; + if ((LRI->Flags & LI_SRC_CHG) == 0 && + (LRI->Flags & (LI_CHECK_ARG | LI_CHECK_Y)) != 0) { + LRI->Flags |= LI_DIRECT; + if ((LRI->Flags & LI_CHECK_Y) != 0) { + LRI->Flags |= LI_RELOAD_Y; } } - /* We cannot ldy src,y */ - if ((RI->Flags & LI_RELOAD_Y) != 0 && - RI->LoadYEntry != 0 && - (RI->LoadYEntry->Use & REG_Y) == REG_Y) { - RI->Flags &= ~LI_DIRECT; + /* We cannot ldy ??? or ldy src,y */ + if ((LRI->Flags & LI_CHECK_Y) != 0 && + (LRI->LoadYEntry == 0 || + (LRI->LoadYEntry->Use & REG_Y) == REG_Y)) { + LRI->Flags &= ~LI_DIRECT; } } -void AdjustLoadRegInfo (LoadRegInfo* RI, int Index, int Change) +void AdjustLoadRegInfo (LoadRegInfo* LRI, int Index, int Change) /* Adjust a load register info struct after deleting or inserting an entry ** with a given index */ @@ -122,27 +128,37 @@ void AdjustLoadRegInfo (LoadRegInfo* RI, int Index, int Change) CHECK (abs (Change) == 1); if (Change < 0) { /* Deletion */ - if (Index < RI->LoadIndex) { - --RI->LoadIndex; - } else if (Index == RI->LoadIndex) { + if (Index < LRI->LoadIndex) { + --LRI->LoadIndex; + } else if (Index == LRI->LoadIndex) { /* Has been removed */ - RI->LoadIndex = -1; - RI->LoadEntry = 0; + LRI->LoadIndex = -1; + LRI->LoadEntry = 0; } - if (Index < RI->XferIndex) { - --RI->XferIndex; - } else if (Index == RI->XferIndex) { + if (Index < LRI->LoadYIndex) { + --LRI->LoadIndex; + } else if (Index == LRI->LoadYIndex) { /* Has been removed */ - RI->XferIndex = -1; - RI->XferEntry = 0; + LRI->LoadYIndex = -1; + LRI->LoadYEntry = 0; + } + if (Index < LRI->ChgIndex) { + --LRI->ChgIndex; + } else if (Index == LRI->ChgIndex) { + /* Has been removed */ + LRI->ChgIndex = -1; + LRI->ChgEntry = 0; } } else { /* Insertion */ - if (Index <= RI->LoadIndex) { - ++RI->LoadIndex; + if (Index <= LRI->LoadIndex) { + ++LRI->LoadIndex; } - if (Index <= RI->XferIndex) { - ++RI->XferIndex; + if (Index <= LRI->LoadYIndex) { + ++LRI->LoadYIndex; + } + if (Index <= LRI->ChgIndex) { + ++LRI->ChgIndex; } } } @@ -191,11 +207,11 @@ void AdjustLoadInfo (LoadInfo* LI, int Index, int Change) RegInfo* GetLastChangedRegInfo (StackOpData* D, LoadRegInfo* Reg) -/* Get RegInfo of the last load insn entry */ +/* Get RegInfo of the last insn entry that changed the reg */ { CodeEntry* E; - if (Reg->LoadIndex >= 0 && (E = CS_GetEntry (D->Code, Reg->LoadIndex)) != 0) { + if (Reg->ChgIndex >= 0 && (E = CS_GetEntry (D->Code, Reg->ChgIndex)) != 0) { return E->RI; } @@ -204,82 +220,265 @@ RegInfo* GetLastChangedRegInfo (StackOpData* D, LoadRegInfo* Reg) -static int Affected (LoadRegInfo* RI, const CodeEntry* E) -/* Check if the load src may be modified between the pushax and op */ +static int Affected (LoadRegInfo* LRI, const CodeEntry* E) +/* Check if the result of the same loading code as in LRI may be changed by E */ { - fncls_t fncls; - unsigned int Use; - unsigned int Chg; - unsigned int UseToCheck = 0; + fncls_t fncls; + unsigned int Use; + unsigned int Chg; + unsigned int UseToCheck = 0; + StrBuf Src, YSrc, New; + int SrcOff = 0, YSrcOff = 0, NewOff = 0; + const ZPInfo* ZI = 0; - if ((RI->Flags & (LI_CHECK_ARG | LI_CHECK_Y)) != 0) { - if (E->AM == AM65_IMM || E->AM == AM65_ACC || E->AM == AM65_IMP || E->AM == AM65_BRA) { - return 0; + SB_Init (&Src); + SB_Init (&YSrc); + SB_Init (&New); + + if ((LRI->Flags & (LI_CHECK_ARG | LI_CHECK_Y)) != 0) { + if (E->AM == AM65_ACC || E->AM == AM65_BRA || E->AM == AM65_IMM || E->AM == AM65_IMP) { + return (LRI->Flags & LI_CHECK_Y) != 0 && (E->Chg & REG_Y) != 0; } - CHECK ((RI->Flags & LI_CHECK_ARG) == 0 || RI->LoadEntry != 0); - CHECK ((RI->Flags & LI_CHECK_Y) == 0 || RI->LoadYEntry != 0); + CHECK ((LRI->Flags & LI_CHECK_ARG) == 0 || LRI->LoadIndex < 0 || LRI->LoadEntry != 0); + CHECK ((LRI->Flags & LI_CHECK_Y) == 0 || LRI->LoadYIndex < 0 || LRI->LoadYEntry != 0); - if ((RI->Flags & LI_CHECK_ARG) != 0) { - UseToCheck |= RI->LoadEntry->Use; + if ((LRI->Flags & LI_CHECK_ARG) != 0) { + if (LRI->LoadEntry != 0) { + /* We ignore processor flags for loading args. + ** Further more, Reg A can't be used as the index. + */ + UseToCheck |= LRI->LoadEntry->Use & ~REG_A & REG_ALL; + SB_InitFromString (&Src, xstrdup (LRI->LoadEntry->Arg)); + if (!ParseOpcArgStr (LRI->LoadEntry->Arg, &Src, &SrcOff)) { + /* Bail out and play it safe*/ + goto L_Affected; + } + ZI = GetZPInfo (SB_GetConstBuf (&Src)); + if (ZI != 0) { + UseToCheck |= ZI->ByteUse; + } + } else { + /* We don't know what regs could have been used for the src. + ** So we just assume all. + */ + UseToCheck |= ~REG_A & REG_ALL; + } } - if ((RI->Flags & LI_CHECK_Y) != 0) { - UseToCheck |= RI->LoadYEntry->Use; + if ((LRI->Flags & LI_CHECK_Y) != 0) { + if (LRI->LoadYEntry != 0) { + UseToCheck |= LRI->LoadYEntry->Use; + SB_InitFromString (&YSrc, xstrdup (LRI->LoadYEntry->Arg)); + if (!ParseOpcArgStr (LRI->LoadYEntry->Arg, &YSrc, &YSrcOff)) { + /* Bail out and play it safe*/ + goto L_Affected; + } + ZI = GetZPInfo (SB_GetConstBuf (&YSrc)); + if (ZI != 0) { + UseToCheck |= ZI->ByteUse; + } + } else { + /* We don't know what regs could have been used by Y. + ** So we just assume all. + */ + UseToCheck |= ~REG_A & REG_ALL; + } } if (E->OPC == OP65_JSR) { /* Try to know about the function */ - fncls = GetFuncInfo (E->Arg, &Use, &Chg); + fncls = GetFuncInfo (E->Arg, &Use, &Chg); if ((UseToCheck & Chg & REG_ALL) == 0 && fncls == FNCLS_BUILTIN) { /* Builtin functions are known to be harmless */ - return 0; + goto L_NotAffected; } /* Otherwise play it safe */ - return 1; - } else if (E->OPC == OP65_DEC || E->OPC == OP65_INC || - E->OPC == OP65_ASL || E->OPC == OP65_LSR || - E->OPC == OP65_ROL || E->OPC == OP65_ROR || - E->OPC == OP65_TRB || E->OPC == OP65_TSB || - E->OPC == OP65_STA || E->OPC == OP65_STX || E->OPC == OP65_STY) { - if ((E->AM == AM65_ABS || E->AM == AM65_ZP)) { - if ((RI->Flags & LI_CHECK_ARG) != 0 && - strcmp (RI->LoadEntry->Arg, E->Arg) == 0) { - return 1; + goto L_Affected; + + } else { + if (E->OPC == OP65_DEC || E->OPC == OP65_INC || + E->OPC == OP65_ASL || E->OPC == OP65_LSR || + E->OPC == OP65_ROL || E->OPC == OP65_ROR || + E->OPC == OP65_TRB || E->OPC == OP65_TSB || + E->OPC == OP65_STA || E->OPC == OP65_STX || + E->OPC == OP65_STY || E->OPC == OP65_STZ) { + + SB_InitFromString (&New, xstrdup (E->Arg)); + if (!ParseOpcArgStr (E->Arg, &New, &NewOff)) { + /* Bail out and play it safe*/ + goto L_Affected; } - if ((RI->Flags & LI_CHECK_Y) != 0 && - strcmp (RI->LoadYEntry->Arg, E->Arg) == 0) { - return 1; + + /* These opc may operate on memory locations */ + if ((E->AM == AM65_ABS || E->AM == AM65_ZP)) { + /* If we don't know what memory locations could have been used for the src, + ** we just assume all. + */ + if ((LRI->Flags & LI_CHECK_ARG) != 0) { + if (LRI->LoadEntry == 0 || + (LRI->LoadEntry->AM != AM65_ABS && + LRI->LoadEntry->AM != AM65_ZP && + (LRI->LoadEntry->AM != AM65_ZP_INDY || + SB_CompareStr (&Src, "sp") != 0)) || + (SB_Compare (&Src, &New) == 0 && + SrcOff == NewOff)) { + goto L_Affected; + } + } + + /* If we don't know what memory location could have been used by Y, + ** we just assume all. + */ + if ((LRI->Flags & LI_CHECK_Y) != 0) { + if (LRI->LoadYEntry == 0 || + (LRI->LoadYEntry->AM != AM65_ABS && + LRI->LoadYEntry->AM != AM65_ZP) || + (SB_Compare (&YSrc, &New) == 0 && + YSrcOff == NewOff)) { + goto L_Affected; + } + } + + /* Not affected */ + goto L_NotAffected; + + } else if (E->AM == AM65_ZP_INDY && SB_CompareStr (&New, "sp") == 0) { + if ((LRI->Flags & LI_CHECK_ARG) != 0) { + if (LRI->LoadEntry == 0 || + (LRI->LoadEntry->AM != AM65_ABS && + LRI->LoadEntry->AM != AM65_ZP && + (LRI->LoadEntry->AM != AM65_ZP_INDY || + SB_Compare (&Src, &New) == 0) && + SrcOff == NewOff)) { + goto L_Affected; + } + } + + /* Not affected */ + goto L_NotAffected; } - return 0; + /* We could've check further for more cases where the load target isn't modified, + ** But for now let's save the trouble and just play it safe. */ + goto L_Affected; } - /* We could've check further for more cases where the load target isn't modified, - ** But for now let's save the trouble and just play it safe. */ - return 1; } } + +L_NotAffected: + SB_Done (&Src); + SB_Done (&YSrc); + SB_Done (&New); return 0; + +L_Affected: + SB_Done (&Src); + SB_Done (&YSrc); + SB_Done (&New); + return 1; } -static void HonourUseAndChg (LoadRegInfo* RI, unsigned Reg, const CodeEntry* E, int I) +static void HonourUseAndChg (LoadRegInfo* LRI, unsigned Reg, const CodeEntry* E, int I) /* Honour use and change flags for an instruction */ { if ((E->Chg & Reg) != 0) { - /* Remember this as an indirect load */ - ClearLoadRegInfo (RI); - RI->LoadIndex = I; - RI->XferIndex = -1; - RI->Flags = 0; - } else if (Affected (RI, E)) { - RI->Flags |= LI_SRC_CHG; + /* This changes the content of the reg */ + ClearLoadRegInfo (LRI); + LRI->ChgIndex = I; + LRI->Flags = 0; + } else if (Affected (LRI, E)) { + LRI->Flags |= LI_SRC_CHG; } } -unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) +void PrepairLoadRegInfoForArgCheck (CodeSeg* S, LoadRegInfo* LRI, CodeEntry* E) +/* Set the load src flags and remember to check for load src change if necessary */ +{ + if (E->AM == AM65_IMM) { + /* These insns are all ok and replaceable */ + LRI->Flags |= LI_DIRECT; + } else if (E->AM == AM65_ZP || E->AM == AM65_ABS) { + /* These insns are replaceable only if they are not modified later */ + LRI->Flags |= LI_CHECK_ARG; + } else if (E->AM == AM65_ZPY || E->AM == AM65_ABSY) { + /* These insns are replaceable only if they are not modified later */ + LRI->Flags |= LI_CHECK_ARG | LI_CHECK_Y; + } else if ((E->AM == AM65_ZP_INDY) && + strcmp (E->Arg, "sp") == 0) { + /* A load from the stack with known offset is also ok, but in this + ** case we must reload the index register later. Please note that + ** a load indirect via other zero page locations is not ok, since + ** these locations may change between the push and the actual + ** operation. + */ + LRI->Flags |= LI_CHECK_ARG | LI_CHECK_Y; + } + + /* If the load offset has a known value, we can just remember and reload + ** it into the index register later. + */ + if ((LRI->Flags & LI_CHECK_Y) != 0) { + if (RegValIsKnown (E->RI->In.RegY)) { + LRI->Offs = (unsigned char)E->RI->In.RegY; + LRI->Flags &= ~LI_CHECK_Y; + LRI->Flags |= LI_RELOAD_Y; + } + } + + /* Watch for any change of the load target */ + if ((LRI->Flags & LI_CHECK_ARG) != 0) { + LRI->LoadIndex = CS_GetEntryIndex (S, E); + LRI->LoadEntry = E; + } + + /* We need to check if the src of Y is changed */ + if (LRI->LoadYIndex >= 0) { + LRI->LoadYEntry = CS_GetEntry (S, LRI->LoadYIndex); + } else { + LRI->LoadYEntry = 0; + } +} + + + +void SetIfOperandSrcAffected (LoadInfo* LLI, CodeEntry* E) +/* Check and flag operand src that may be affected */ +{ + if (Affected (&LLI->A, E)) { + LLI->A.Flags |= LI_SRC_CHG; + } + if (Affected (&LLI->X, E)) { + LLI->X.Flags |= LI_SRC_CHG; + } + if (Affected (&LLI->Y, E)) { + LLI->Y.Flags |= LI_SRC_CHG; + } +} + + + +void SetIfOperandLoadUnremovable (LoadInfo* LI, unsigned Used) +/* Check and flag operand load that may be unremovable */ +{ + /* Disallow removing the loads if the registers are used */ + if ((Used & REG_A) != 0) { + LI->A.Flags |= LI_DONT_REMOVE; + } + if ((Used & REG_X) != 0) { + LI->X.Flags |= LI_DONT_REMOVE; + } + if ((Used & REG_Y) != 0) { + LI->Y.Flags |= LI_DONT_REMOVE; + } +} + + + +unsigned int TrackLoads (LoadInfo* LI, CodeSeg* S, int I) /* Track loads for a code entry. ** Return used registers. */ @@ -297,33 +496,34 @@ unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) */ if (E->Info & OF_LOAD) { - LoadRegInfo* RI = 0; + LoadRegInfo* LRI = 0; /* Determine, which register was loaded */ if (E->Chg & REG_A) { - RI = &LI->A; + LRI = &LI->A; } else if (E->Chg & REG_X) { - RI = &LI->X; + LRI = &LI->X; } else if (E->Chg & REG_Y) { - RI = &LI->Y; + LRI = &LI->Y; } - CHECK (RI != 0); + CHECK (LRI != 0); /* Remember the load */ - RI->LoadIndex = I; - RI->XferIndex = -1; + LRI->LoadIndex = I; + LRI->ChgIndex = I; + LRI->LoadYIndex = -1; /* Set load flags */ - RI->Flags = LI_LOAD_INSN; + LRI->Flags = LI_LOAD_INSN; if (E->AM == AM65_IMM) { /* These insns are all ok and replaceable */ - RI->Flags |= LI_DIRECT; + LRI->Flags |= LI_DIRECT; } else if (E->AM == AM65_ZP || E->AM == AM65_ABS) { /* These insns are replaceable only if they are not modified later */ - RI->Flags |= LI_CHECK_ARG; + LRI->Flags |= LI_CHECK_ARG; } else if (E->AM == AM65_ZPY || E->AM == AM65_ABSY) { /* These insns are replaceable only if they are not modified later */ - RI->Flags |= LI_CHECK_ARG | LI_CHECK_Y; + LRI->Flags |= LI_CHECK_ARG | LI_CHECK_Y; } else if (E->AM == AM65_ZP_INDY && strcmp (E->Arg, "sp") == 0) { /* A load from the stack with known offset is also ok, but in this @@ -332,11 +532,11 @@ unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) ** these locations may change between the push and the actual ** operation. */ - RI->Flags |= LI_DIRECT | LI_CHECK_Y | LI_SP; + LRI->Flags |= LI_CHECK_ARG | LI_CHECK_Y | LI_SP; /* Reg Y can be regarded as unused if this load is removed */ Used &= ~REG_Y; - if (RI == &LI->A) { + if (LRI == &LI->A) { LI->Y.Flags |= LI_USED_BY_A; } else { LI->Y.Flags |= LI_USED_BY_X; @@ -346,21 +546,26 @@ unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) /* If the load offset has a known value, we can just remember and reload ** it into the index register later. */ - if ((RI->Flags & LI_CHECK_Y) != 0) { + if ((LRI->Flags & LI_CHECK_Y) != 0) { if (RegValIsKnown (E->RI->In.RegY)) { - RI->Offs = (unsigned char)E->RI->In.RegY; - RI->Flags &= ~LI_CHECK_Y; - RI->Flags |= LI_RELOAD_Y; + LRI->Offs = (unsigned char)E->RI->In.RegY; + LRI->Flags &= ~LI_CHECK_Y; + LRI->Flags |= LI_RELOAD_Y; } else { /* We need to check if the src of Y is changed */ - RI->LoadYIndex = LI->Y.LoadIndex; - RI->LoadYEntry = CS_GetEntry (S, RI->LoadYIndex); + LRI->LoadYIndex = LI->Y.LoadIndex; } } /* Watch for any change of the load target */ - if ((RI->Flags & LI_CHECK_ARG) != 0) { - RI->LoadEntry = CS_GetEntry (S, I); + if ((LRI->Flags & LI_CHECK_ARG) != 0) { + LRI->LoadEntry = CS_GetEntry (S, I); + } + + if (LRI->LoadYIndex >= 0) { + LRI->LoadYEntry = CS_GetEntry (S, LRI->LoadYIndex); + } else { + LRI->LoadYEntry = 0; } } else if (E->Info & OF_XFR) { @@ -376,9 +581,9 @@ unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) Src->Flags |= LI_USED_BY_X; break; case OP65_TAY: - Src = &LI->A; + Src = &LI->A; Tgt = &LI->Y; - Used &= ~REG_A; + Used &= ~REG_A; Src->Flags |= LI_USED_BY_Y; break; case OP65_TXA: @@ -406,7 +611,7 @@ unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) Tgt->LoadEntry = Src->LoadEntry; Tgt->LoadYIndex = Src->LoadYIndex; Tgt->LoadYEntry = Src->LoadYEntry; - Tgt->XferIndex = I; + Tgt->ChgIndex = I; Tgt->Offs = Src->Offs; Tgt->Flags = Src->Flags; @@ -414,12 +619,12 @@ unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) /* Both registers set, Y changed */ LI->A.LoadIndex = I; - LI->A.XferIndex = -1; + LI->A.ChgIndex = I; LI->A.Flags = (LI_LOAD_INSN | LI_DIRECT | LI_RELOAD_Y | LI_SP); LI->A.Offs = (unsigned char) E->RI->In.RegY - 1; LI->X.LoadIndex = I; - LI->X.XferIndex = -1; + LI->X.ChgIndex = I; LI->X.Flags = (LI_LOAD_INSN | LI_DIRECT | LI_RELOAD_Y | LI_SP); LI->X.Offs = (unsigned char) E->RI->In.RegY; @@ -431,19 +636,6 @@ unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) HonourUseAndChg (&LI->A, REG_A, E, I); HonourUseAndChg (&LI->X, REG_X, E, I); HonourUseAndChg (&LI->Y, REG_Y, E, I); - - /* The other operand may be affected too */ - if (LLI != 0) { - if (Affected (&LLI->A, E)) { - LLI->A.Flags |= LI_SRC_CHG; - } - if (Affected (&LLI->X, E)) { - LLI->X.Flags |= LI_SRC_CHG; - } - if (Affected (&LLI->Y, E)) { - LLI->Y.Flags |= LI_SRC_CHG; - } - } } return Used; @@ -451,25 +643,36 @@ unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I) -void SetDontRemoveEntryFlag (LoadRegInfo* RI) +void SetDontRemoveEntryFlag (LoadRegInfo* LRI) /* Flag the entry as non-removable according to register flags */ { - if (RI->Flags & LI_DONT_REMOVE) { - if (RI->LoadEntry != 0) { - RI->LoadEntry->Flags |= CEF_DONT_REMOVE; + if (LRI->Flags & LI_DONT_REMOVE) { + if (LRI->LoadEntry != 0) { + LRI->LoadEntry->Flags |= CEF_DONT_REMOVE; + + /* If the load requires Y, then Y shouldn't be removed either */ + if (LRI->LoadYEntry != 0) { + LRI->LoadYEntry->Flags |= CEF_DONT_REMOVE; + } } } } -void ResetDontRemoveEntryFlag (LoadRegInfo* RI) +void ResetDontRemoveEntryFlag (LoadRegInfo* LRI) /* Unflag the entry as non-removable according to register flags */ { - if (RI->Flags & LI_DONT_REMOVE) { - if (RI->LoadEntry != 0) { - RI->LoadEntry->Flags &= ~CEF_DONT_REMOVE; - } + if (LRI->LoadEntry != 0) { + LRI->LoadEntry->Flags &= ~CEF_DONT_REMOVE; + } + + if (LRI->LoadYEntry != 0) { + LRI->LoadYEntry->Flags &= ~CEF_DONT_REMOVE; + } + + if (LRI->ChgEntry != 0) { + LRI->ChgEntry->Flags &= ~CEF_DONT_REMOVE; } } @@ -480,8 +683,13 @@ void SetDontRemoveEntryFlags (StackOpData* D) { SetDontRemoveEntryFlag (&D->Lhs.A); SetDontRemoveEntryFlag (&D->Lhs.X); + SetDontRemoveEntryFlag (&D->Lhs.Y); SetDontRemoveEntryFlag (&D->Rhs.A); SetDontRemoveEntryFlag (&D->Rhs.X); + SetDontRemoveEntryFlag (&D->Rhs.Y); + SetDontRemoveEntryFlag (&D->Rv.A); + SetDontRemoveEntryFlag (&D->Rv.X); + SetDontRemoveEntryFlag (&D->Rv.Y); } @@ -491,8 +699,13 @@ void ResetDontRemoveEntryFlags (StackOpData* D) { ResetDontRemoveEntryFlag (&D->Lhs.A); ResetDontRemoveEntryFlag (&D->Lhs.X); + ResetDontRemoveEntryFlag (&D->Lhs.Y); ResetDontRemoveEntryFlag (&D->Rhs.A); ResetDontRemoveEntryFlag (&D->Rhs.X); + ResetDontRemoveEntryFlag (&D->Rhs.Y); + ResetDontRemoveEntryFlag (&D->Rv.A); + ResetDontRemoveEntryFlag (&D->Rv.X); + ResetDontRemoveEntryFlag (&D->Rv.Y); } @@ -508,6 +721,7 @@ void ResetStackOpData (StackOpData* Data) ClearLoadInfo (&Data->Lhs); ClearLoadInfo (&Data->Rhs); + ClearLoadInfo (&Data->Rv); Data->PushIndex = -1; Data->OpIndex = -1; @@ -881,28 +1095,50 @@ void AddOpHigh (StackOpData* D, opc_t OPC, LoadInfo* LI, int KeepResult) void RemoveRegLoads (StackOpData* D, LoadInfo* LI) /* Remove register load insns */ { - /* Both registers may be loaded with one insn, but DelEntry will in this - ** case clear the other one. - */ if ((LI->A.Flags & LI_REMOVE) == LI_REMOVE) { if (LI->A.LoadIndex >= 0 && (LI->A.LoadEntry->Flags & CEF_DONT_REMOVE) == 0) { DelEntry (D, LI->A.LoadIndex); + LI->A.LoadEntry = 0; } - if (LI->A.XferIndex >= 0 && - (LI->A.XferEntry->Flags & CEF_DONT_REMOVE) == 0) { - DelEntry (D, LI->A.XferIndex); + if (LI->A.LoadYIndex >= 0 && + (LI->A.LoadYEntry->Flags & CEF_DONT_REMOVE) == 0) { + DelEntry (D, LI->A.LoadYIndex); + } + if (LI->A.ChgIndex >= 0 && + (LI->A.ChgEntry->Flags & CEF_DONT_REMOVE) == 0) { + DelEntry (D, LI->A.ChgIndex); } } + + if (LI->A.LoadEntry != 0 && + (LI->A.Flags & LI_RELOAD_Y) != 0 && + LI->A.LoadYIndex >= 0) { + /* If an entry is using Y and not removed, then its Y load mustn't be removed */ + LI->A.LoadYEntry->Flags |= CEF_DONT_REMOVE; + } + if ((LI->X.Flags & LI_REMOVE) == LI_REMOVE) { if (LI->X.LoadIndex >= 0 && (LI->X.LoadEntry->Flags & CEF_DONT_REMOVE) == 0) { DelEntry (D, LI->X.LoadIndex); + LI->X.LoadEntry = 0; } - if (LI->X.XferIndex >= 0 && - (LI->X.XferEntry->Flags & CEF_DONT_REMOVE) == 0) { - DelEntry (D, LI->X.XferIndex); + if (LI->X.LoadYIndex >= 0 && + (LI->X.LoadYEntry->Flags & CEF_DONT_REMOVE) == 0) { + DelEntry (D, LI->X.LoadYIndex); } + if (LI->X.ChgIndex >= 0 && + (LI->X.ChgEntry->Flags & CEF_DONT_REMOVE) == 0) { + DelEntry (D, LI->X.ChgIndex); + } + } + + if (LI->X.LoadEntry != 0 && + (LI->X.Flags & LI_RELOAD_Y) != 0 && + LI->X.LoadYIndex >= 0) { + /* If an entry is using Y and not removed, then its Y load mustn't be removed */ + LI->X.LoadYEntry->Flags |= CEF_DONT_REMOVE; } } @@ -935,7 +1171,7 @@ int HarmlessCall (const char* Name) ** the pushax/op sequence when encountered. */ { - const char* const Tab[] = { + static const char* const Tab[] = { "aslax1", "aslax2", "aslax3", @@ -967,6 +1203,8 @@ int HarmlessCall (const char* Name) "incax7", "incax8", "incaxy", + "ldaidx", + "ldauidx", "ldaxidx", "ldaxysp", "negax", @@ -991,3 +1229,1821 @@ int HarmlessCall (const char* Name) } + +/*****************************************************************************/ +/* Load tracking code */ +/*****************************************************************************/ + + + +/*****************************************************************************/ +/* Helpers */ +/*****************************************************************************/ + + + +const char* GetZPName (unsigned ZPLoc) +/* Get the name strings of certain known ZP Regs */ +{ + if ((ZPLoc & REG_TMP1) != 0) { + return "tmp1"; + } + if ((ZPLoc & REG_PTR1_LO) != 0) { + return "ptr1"; + } + if ((ZPLoc & REG_PTR1_HI) != 0) { + return "ptr1+1"; + } + if ((ZPLoc & REG_PTR2_LO) != 0) { + return "ptr2"; + } + if ((ZPLoc & REG_PTR2_HI) != 0) { + return "ptr2+1"; + } + if ((ZPLoc & REG_SREG_LO) != 0) { + return "sreg"; + } + if ((ZPLoc & REG_SREG_HI) != 0) { + return "sreg+1"; + } + if ((ZPLoc & REG_SAVE_LO) != 0) { + return "save"; + } + if ((ZPLoc & REG_SAVE_HI) != 0) { + return "save+1"; + } + if ((ZPLoc & REG_SP_LO) != 0) { + return "sp"; + } + if ((ZPLoc & REG_SP_HI) != 0) { + return "sp+1"; + } + + return 0; +} + +unsigned FindAvailableBackupLoc (BackupInfo* B, unsigned Type) +/* Find a ZP loc for storing the backup and fill in the info. +** The allowed types are specified with the Type parameter. +** For convenience, all types are aloowed if none is specified. +** Return the type of the found loc. +*/ +{ + unsigned SizeType = Type & BU_SIZE_MASK; + Type &= BU_TYPE_MASK; + if (Type == 0) { + Type = BU_TYPE_MASK; + } + + if (SizeType == BU_B8 && (Type & BU_REG) != 0 && (B->ZPUsage & REG_Y) == 0) { + /* Use the Y Reg only */ + B->Type = BU_REG | SizeType; + B->Where = REG_Y; + B->ZPUsage |= REG_Y; + return B->Type; + } + + if (SizeType == BU_B8 && (Type & BU_ZP) != 0) { + /* For now we only check for tmp1 and sreg */ + if ((B->ZPUsage & REG_TMP1) == 0) { + B->Type = BU_ZP | BU_B8; + B->Where = REG_TMP1; + B->ZPUsage |= REG_TMP1; + return B->Type; + } + if ((B->ZPUsage & REG_SREG_LO) == 0) { + B->Type = BU_ZP | BU_B8; + B->Where = REG_SREG_LO; + B->ZPUsage |= REG_SREG_LO; + return B->Type; + } + if ((B->ZPUsage & REG_SREG_HI) == 0) { + B->Type = BU_ZP | BU_B8; + B->Where = REG_SREG_HI; + B->ZPUsage |= REG_SREG_HI; + return B->Type; + } + } + + if (SizeType == BU_B16 && (Type & BU_ZP) != 0) { + /* For now we only check for ptr1, sreg and ptr2 */ + if ((B->ZPUsage & REG_PTR1) == 0) { + B->Type = BU_ZP | BU_B16; + B->Where = REG_PTR1; + B->ZPUsage |= REG_PTR1; + return B->Type; + } + if ((B->ZPUsage & REG_SREG) == 0) { + B->Type = BU_ZP | BU_B16; + B->Where = REG_SREG; + B->ZPUsage |= REG_SREG; + return B->Type; + } + if ((B->ZPUsage & REG_PTR2) == 0) { + B->Type = BU_ZP | BU_B16; + B->Where = REG_PTR2; + B->ZPUsage |= REG_PTR2; + return B->Type; + } + } + + if (SizeType == BU_B24 && (Type & BU_ZP) != 0) { + /* For now we only check for certain combinations of + ** tmp1 + (ptr1, sreg or ptr2). + */ + if ((B->ZPUsage & (REG_TMP1 | REG_PTR1)) == 0) { + B->Type = BU_ZP | BU_B24; + B->Where = REG_TMP1 | REG_PTR1; + B->ZPUsage |= REG_TMP1 | REG_PTR1; + return B->Type; + } + if ((B->ZPUsage & (REG_TMP1 | REG_SREG)) == 0) { + B->Type = BU_ZP | BU_B24; + B->Where = REG_TMP1 | REG_SREG; + B->ZPUsage |= REG_TMP1 | REG_SREG; + return B->Type; + } + if ((B->ZPUsage & (REG_TMP1 | REG_PTR2)) == 0) { + B->Type = BU_ZP | BU_B24; + B->Where = REG_TMP1 | REG_PTR2; + B->ZPUsage |= REG_TMP1 | REG_PTR2; + return B->Type; + } + } + + if (SizeType < BU_B32 && (Type & BU_SP6502) != 0) { + /* Even for BU_B24, we just push/pop all 3 of AXY */ + B->Type = BU_SP6502 | BU_B16; + B->Where = 0; + return B->Type; + } + + if (SizeType != BU_B24 && SizeType <= BU_B32 && (Type & BU_SP) != 0) { + /* We may also use pusha/popa, pushax/popax and pusheax/popeax */ + B->Type = BU_SP | SizeType; + B->Where = 0; + return B->Type; + } + + /* No available */ + return BU_UNKNOWN; +} + + + +void AdjustEntryIndices (Collection* Indices, int Index, int Change) +/* Adjust a load register info struct after deleting or inserting successive +** entries with a given index. +*/ +{ + int I; + int* IndexPtr; + + if (Change > 0) { + /* Insertion */ + for (I = 0; I < (int)CollCount (Indices); ++I) { + IndexPtr = CollAtUnchecked (Indices, I); + if (Index <= *IndexPtr) { + *IndexPtr += Change; + } + } + } else if (Change < 0) { + /* Deletion */ + for (I = 0; I < (int)CollCount (Indices); ++I) { + IndexPtr = CollAtUnchecked (Indices, I); + if (Index <= *IndexPtr + Change) { + *IndexPtr += Change; + } else if (Index <= *IndexPtr) { + /* Has been removed */ + *IndexPtr = -1; + //CollDelete (Indices, I); + --I; + } + } + } +} + + + +void DelEntryIdx (CodeSeg* S, int Idx, Collection* Indices) +/* Delete an entry and adjust Indices if necessary */ +{ + CS_DelEntry (S, Idx); + AdjustEntryIndices (Indices, Idx, -1); +} + + + +void DelEntriesIdx (CodeSeg* S, int Idx, int Count, Collection* Indices) +/* Delete entries and adjust Indices if necessary */ +{ + CS_DelEntries (S, Idx, Count); + AdjustEntryIndices (Indices, Idx, -Count); +} + + + +void RemoveFlaggedRegLoads (CodeSeg* S, LoadRegInfo* LRI, Collection* Indices) +/* Remove flagged register load insns */ +{ + if ((LRI->Flags & LI_REMOVE) == LI_REMOVE) { + if (LRI->LoadIndex >= 0 && + (LRI->LoadEntry->Flags & CEF_DONT_REMOVE) == 0) { + DelEntryIdx (S, LRI->LoadIndex, Indices); + LRI->LoadEntry = 0; + } + if (LRI->LoadYIndex >= 0 && + (LRI->LoadYEntry->Flags & CEF_DONT_REMOVE) == 0) { + DelEntryIdx (S, LRI->LoadYIndex, Indices); + } + if (LRI->ChgIndex >= 0 && + (LRI->ChgEntry->Flags & CEF_DONT_REMOVE) == 0) { + DelEntryIdx (S, LRI->ChgIndex, Indices); + } + } + + if (LRI->LoadEntry != 0 && + (LRI->Flags & LI_RELOAD_Y) != 0 && + LRI->LoadYIndex >= 0) { + /* If an entry is using Y and not removed, then its Y load mustn't be removed */ + LRI->LoadYEntry->Flags |= CEF_DONT_REMOVE; + } +} + + +void RemoveFlaggedLoads (CodeSeg* S, LoadInfo* LI, Collection* Indices) +/* Remove flagged load insns */ +{ + RemoveFlaggedRegLoads (S, &LI->A, Indices); + RemoveFlaggedRegLoads (S, &LI->X, Indices); + RemoveFlaggedRegLoads (S, &LI->Y, Indices); +} + + + +static int BackupAAt (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices, int After) +/* Backup the content of A Before or After the specified index Idx depending on the After param */ +{ + CodeEntry* E; + CodeEntry* X; + int OldIdx; + + /* Adjust the insertion point if necessary */ + if (After) { + ++Idx; + } + OldIdx = Idx; + + /* Cannot insert after the last insn */ + CHECK ((unsigned)Idx < CollCount (&S->Entries)); + + /* Get the entry at Idx */ + E = CS_GetEntry (S, Idx); + + if (E->RI != 0 && RegValIsKnown (E->RI->In.RegA)) { + /* Just memorize the value */ + B->Type = BU_IMM | BU_B8; + B->Imm = E->RI->In.RegA; + + } else { + FindAvailableBackupLoc (B, BU_B8); + switch (B->Type & BU_TYPE_MASK) { + case BU_REG: + if ((B->Where & REG_X) != 0) { + X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } else if ((B->Where & REG_Y) != 0) { + X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + break; + + case BU_ZP: + X = NewCodeEntry (OP65_STA, AM65_ZP, GetZPName (B->Where), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_SP6502: + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_SP: + if ((B->ZPUsage & REG_Y) == 0) { + X = NewCodeEntry (OP65_JSR, AM65_ABS, "pusha", 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to do backup */ + return 0; + + default: + /* Unable to do backup */ + return 0; + } + } + + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx, Idx - OldIdx); + + /* Move labels if it was an insertion before Idx */ + if (!After) { + CS_MoveLabels (S, E, CS_GetEntry (S, OldIdx)); + } + + /* Done */ + return 1; +} + + + +static int BackupXAt (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices, int After) +/* Backup the content of X before or after the specified index Idx depending on the param After */ +{ + CodeEntry* E; + CodeEntry* X; + int OldIdx; + + /* Adjust the insertion point if necessary */ + if (After) { + ++Idx; + } + OldIdx = Idx; + + /* Cannot insert after the last insn */ + CHECK ((unsigned)Idx < CollCount (&S->Entries)); + + /* Get the entry at Idx */ + E = CS_GetEntry (S, Idx); + + if (E->RI != 0 && RegValIsKnown (E->RI->In.RegX)) { + /* Just memorize the value */ + B->Type = BU_IMM | BU_B8; + B->Imm = E->RI->In.RegX; + + } else { + FindAvailableBackupLoc (B, BU_B8); + switch (B->Type & BU_TYPE_MASK) { + case BU_ZP: + X = NewCodeEntry (OP65_STX, AM65_ZP, GetZPName(B->Where), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_SP6502: + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to do backup */ + return 0; + + case BU_SP: + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_JSR, AM65_ABS, "pusha", 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to do backup */ + return 0; + + case BU_REG: + /* Fallthrough */ + default: + + /* Unable to do backup */ + return 0; + } + } + + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx, Idx - OldIdx); + + /* Move labels if it was an insertion before Idx */ + if (!After) { + CS_MoveLabels (S, E, CS_GetEntry (S, OldIdx)); + } + + /* Done */ + return 1; +} + + + +static int BackupYAt (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices, int After) +/* Backup the content of Y before or after the specified index Idx depending on the param After */ +{ + CodeEntry* E; + CodeEntry* X; + int OldIdx; + + /* Adjust the insertion point if necessary */ + if (After) { + ++Idx; + } + OldIdx = Idx; + + /* Cannot insert after the last insn */ + CHECK ((unsigned)Idx < CollCount (&S->Entries)); + + /* Get the entry at Idx */ + E = CS_GetEntry (S, Idx); + + if (E->RI != 0 && RegValIsKnown (E->RI->In.RegY)) { + /* Just memorize the value */ + B->Type = BU_IMM | BU_B8; + B->Imm = E->RI->In.RegY; + + } else { + FindAvailableBackupLoc (B, BU_B8); + switch (B->Type & BU_TYPE_MASK) { + case BU_ZP: + X = NewCodeEntry (OP65_STY, AM65_ZP, GetZPName(B->Where), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_SP6502: + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_TYA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to do backup */ + return 0; + + case BU_SP: + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_TYA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_JSR, AM65_ABS, "pusha", 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to do backup */ + return 0; + + case BU_REG: + /* Fallthrough */ + default: + + /* Unable to do backup */ + return 0; + } + } + + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx, Idx - OldIdx); + + /* Move labels if it was an insertion before Idx */ + if (!After) { + CS_MoveLabels (S, E, CS_GetEntry (S, OldIdx)); + } + + /* Done */ + return 1; +} + + + +static int BackupAXAt (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices, int After) +/* Backup the content of AX Before or After the specified index Idx depending on the After param */ +{ + CodeEntry* E; + CodeEntry* X; + int OldIdx; + StrBuf Arg; + + SB_Init (&Arg); + + /* Adjust the insertion point if necessary */ + if (After) { + ++Idx; + } + OldIdx = Idx; + + /* Cannot insert after the last insn */ + CHECK ((unsigned)Idx < CollCount (&S->Entries)); + + /* Get the entry at Idx */ + E = CS_GetEntry (S, Idx); + + if (E->RI != 0 && RegValIsKnown (E->RI->In.RegA) && RegValIsKnown (E->RI->In.RegX)) { + /* Just memorize the value */ + B->Type = BU_IMM | BU_B16; + B->Imm = E->RI->In.RegA | (E->RI->In.RegX << 8); + + } else { + FindAvailableBackupLoc (B, BU_B16); + switch (B->Type & BU_TYPE_MASK) { + case BU_ZP: + SB_AppendStr (&Arg, GetZPName (B->Where)); + SB_Terminate (&Arg); + X = NewCodeEntry (OP65_STA, AM65_ZP, SB_GetConstBuf (&Arg), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + SB_AppendStr (&Arg, "+1"); + SB_Terminate (&Arg); + X = NewCodeEntry (OP65_STX, AM65_ZP, SB_GetConstBuf (&Arg), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_SP6502: + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to do backup */ + return 0; + + case BU_SP: + if ((B->ZPUsage & REG_Y) == 0) { + X = NewCodeEntry (OP65_JSR, AM65_ABS, "pushax", 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to do backup */ + return 0; + + case BU_REG: + /* Fallthrough */ + + default: + /* Unable to do backup */ + return 0; + } + } + + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx, Idx - OldIdx); + + /* Move labels if it was an insertion before Idx */ + if (!After) { + CS_MoveLabels (S, E, CS_GetEntry (S, OldIdx)); + } + + SB_Done (&Arg); + + /* Done */ + return 1; +} + + + +static int BackupAXYAt (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices, int After) +/* Backup the content of AXY before or after the specified index Idx depending on the param After. +** This doesn't allow separating the backup of Y from that of AX for now. +*/ +{ + CodeEntry* E; + CodeEntry* X; + int OldIdx; + StrBuf Arg; + + SB_Init (&Arg); + + /* Adjust the insertion point if necessary */ + if (After) { + ++Idx; + } + OldIdx = Idx; + + /* Cannot insert after the last insn */ + CHECK ((unsigned)Idx < CollCount (&S->Entries)); + + /* Get the entry at Idx */ + E = CS_GetEntry (S, Idx); + + if (E->RI != 0 && + RegValIsKnown (E->RI->In.RegA) && + RegValIsKnown (E->RI->In.RegX) && + RegValIsKnown (E->RI->In.RegY)) { + /* Just memorize the value */ + B->Type = BU_IMM | BU_B24; + B->Imm = E->RI->In.RegA | (E->RI->In.RegX << 8) | (E->RI->In.RegY << 16); + + } else { + FindAvailableBackupLoc (B, BU_B24); + switch (B->Type & BU_TYPE_MASK) { + case BU_ZP: + CHECK ((B->Where & REG_TMP1) != 0); + SB_AppendStr (&Arg, GetZPName (B->Where & ~REG_TMP1)); + SB_Terminate (&Arg); + X = NewCodeEntry (OP65_STA, AM65_ZP, SB_GetConstBuf (&Arg), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + SB_AppendStr (&Arg, "+1"); + SB_Terminate (&Arg); + X = NewCodeEntry (OP65_STX, AM65_ZP, SB_GetConstBuf (&Arg), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_STY, AM65_ZP, GetZPName (B->Where & REG_TMP1), 0, E->LI); + CS_InsertEntry(S, X, Idx++); + break; + + case BU_SP6502: + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TYA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to do backup */ + return 0; + + case BU_SP: + if ((B->ZPUsage & REG_AY) == 0) { + X = NewCodeEntry (OP65_JSR, AM65_ABS, "pushax", 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TYA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_JSR, AM65_ABS, "pusha", 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to do backup */ + return 0; + + case BU_REG: + /* Fallthrough */ + + default: + /* Unable to do backup */ + return 0; + } + } + + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx, Idx - OldIdx); + + /* Move labels if it was an insertion before Idx */ + if (!After) { + CS_MoveLabels (S, E, CS_GetEntry (S, OldIdx)); + } + + SB_Done (&Arg); + + /* Done */ + return 1; +} + + + +int BackupABefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Backup the content of A Before the specified index Idx */ +{ + return BackupAAt (S, B, Idx, Indices, 0); +} + + + +int BackupXBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Backup the content of X before the specified index Idx */ +{ + return BackupXAt (S, B, Idx, Indices, 0); +} + + + +int BackupYBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Backup the content of Y before the specified index Idx */ +{ + return BackupYAt (S, B, Idx, Indices, 0); +} + + + +int BackupAXBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Backup the content of AX before the specified index Idx */ +{ + return BackupAXAt (S, B, Idx, Indices, 0); +} + + + +int BackupAXYBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Backup the content of AXY before the specified index Idx. +** This doesn't allow separating the backup of Y from that of AX for now. +*/ +{ + return BackupAXYAt (S, B, Idx, Indices, 0); +} + + + +int BackupAAfter (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Backup the content of A after the specified index Idx */ +{ + return BackupAAt (S, B, Idx, Indices, 1); +} + + + +int BackupXAfter (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Backup the content of X after the specified index Idx */ +{ + return BackupXAt (S, B, Idx, Indices, 1); +} + + + +int BackupYAfter (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Backup the content of Y after the specified index Idx */ +{ + return BackupYAt (S, B, Idx, Indices, 1); +} + + + +int BackupAXAfter (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Backup the content of AX after the specified index Idx */ +{ + return BackupAXAt (S, B, Idx, Indices, 1); +} + + + +int BackupAXYAfter (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Backup the content of AXY after the specified index Idx. +** This doesn't allow separating the backup of Y from that of AX for now. +*/ +{ + return BackupAXYAt (S, B, Idx, Indices, 1); +} + + + +int RestoreABefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Restore the content of Y before the specified index Idx */ +{ + CodeEntry* E; + CodeEntry* X; + int OldIdx = Idx; + + /* Get the entry at Idx */ + E = CS_GetEntry (S, Idx); + + switch (B->Type & BU_TYPE_MASK) { + case BU_IMM: + /* Just use the memorized value */ + X = NewCodeEntry (OP65_LDA, AM65_IMM, MakeHexArg (B->Imm & 0xFF), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_REG: + if ((B->Where & REG_X) != 0) { + X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } else if ((B->Where & REG_Y) != 0) { + X = NewCodeEntry (OP65_TYA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } + break; + + case BU_ZP: + X = NewCodeEntry (OP65_LDA, AM65_ZP, GetZPName (B->Where), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_SP6502: + X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_SP: + if ((B->ZPUsage & REG_Y) == 0) { + X = NewCodeEntry (OP65_JSR, AM65_ABS, "popa", 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to restore */ + return 0; + + default: + /* Unable to restore */ + return 0; + } + + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx, Idx - OldIdx); + + /* Done */ + return 1; +} + + + +int RestoreXBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Restore the content of X before the specified index Idx */ +{ + CodeEntry* E; + CodeEntry* X; + int OldIdx = Idx; + + /* Get the entry at Idx */ + E = CS_GetEntry (S, Idx); + + switch (B->Type & BU_TYPE_MASK) { + case BU_IMM: + /* Just use the memorized value */ + X = NewCodeEntry (OP65_LDX, AM65_IMM, MakeHexArg (B->Imm & 0xFF), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_REG: + if ((B->Where & REG_A) != 0) { + X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } else if ((B->Where & REG_Y) != 0) { + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } + X = NewCodeEntry (OP65_TYA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } + } + break; + + case BU_ZP: + X = NewCodeEntry (OP65_LDX, AM65_ZP, GetZPName (B->Where), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_SP6502: + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to restore */ + return 0; + + case BU_SP: + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_JSR, AM65_ABS, "popa", 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to restore */ + return 0; + + default: + /* Unable to restore */ + return 0; + } + + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx, Idx - OldIdx); + + /* Done */ + return 1; +} + + + +int RestoreYBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Restore the content of Y before the specified index Idx */ +{ + CodeEntry* E; + CodeEntry* X; + int OldIdx = Idx; + + /* Get the entry at Idx */ + E = CS_GetEntry (S, Idx); + + switch (B->Type & BU_TYPE_MASK) { + case BU_IMM: + /* Just use the memorized value */ + X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (B->Imm & 0xFF), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_REG: + if ((B->Where & REG_A) != 0) { + X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } else if ((B->Where & REG_X) != 0) { + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } + X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } + } + break; + + case BU_ZP: + X = NewCodeEntry (OP65_LDY, AM65_ZP, GetZPName (B->Where), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_SP6502: + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to restore */ + return 0; + + case BU_SP: + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_JSR, AM65_ABS, "popa", 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to restore */ + return 0; + + default: + /* Unable to restore */ + return 0; + } + + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx, Idx - OldIdx); + + /* Done */ + return 1; +} + + + +int RestoreAXBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Restore the content of AX before the specified index Idx */ +{ + CodeEntry* E; + CodeEntry* X; + StrBuf Arg; + int OldIdx = Idx; + + SB_Init (&Arg); + + /* Get the entry at Idx */ + E = CS_GetEntry (S, Idx); + + switch (B->Type & BU_TYPE_MASK) { + case BU_REG: + /* Just use the memorized value */ + X = NewCodeEntry (OP65_LDA, AM65_IMM, MakeHexArg (B->Imm & 0xFF), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_LDX, AM65_IMM, MakeHexArg ((B->Imm >> 8) & 0xFF), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_ZP: + SB_AppendStr (&Arg, GetZPName (B->Where)); + SB_Terminate (&Arg); + X = NewCodeEntry (OP65_LDA, AM65_ZP, SB_GetConstBuf (&Arg), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + SB_AppendStr (&Arg, "+1"); + SB_Terminate (&Arg); + X = NewCodeEntry (OP65_LDX, AM65_ZP, SB_GetConstBuf (&Arg), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_SP6502: + if ((B->ZPUsage & REG_A) == 0) { + X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to restore */ + return 0; + + case BU_SP: + if ((B->ZPUsage & REG_Y) == 0) { + X = NewCodeEntry (OP65_JSR, AM65_ABS, "popax", 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + } + + /* Unable to restore */ + return 0; + + default: + /* Unable to restore */ + return 0; + } + + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx, Idx - OldIdx); + + SB_Done (&Arg); + + return 1; +} + + + +int RestoreAXYBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices) +/* Restore the content of AXY before the specified index Idx. +** This only allows restore from compacted AXY backup for now. +*/ +{ + CodeEntry* E; + CodeEntry* X; + int OldIdx = Idx; + StrBuf Arg; + + SB_Init (&Arg); + + /* Get the entry at Idx */ + E = CS_GetEntry (S, Idx); + + switch (B->Type & BU_TYPE_MASK) { + case BU_IMM: + /* Just use memorized value */ + X = NewCodeEntry (OP65_LDA, AM65_IMM, MakeHexArg (B->Imm & 0xFF), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_LDX, AM65_IMM, MakeHexArg ((B->Imm >> 8) & 0xFF), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg ((B->Imm >> 16) & 0xFF), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_ZP: + CHECK ((B->Where & REG_TMP1) != 0); + SB_AppendStr (&Arg, GetZPName (B->Where & ~REG_TMP1)); + SB_Terminate (&Arg); + X = NewCodeEntry (OP65_LDA, AM65_ZP, SB_GetConstBuf (&Arg), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + SB_AppendStr (&Arg, "+1"); + SB_Terminate (&Arg); + X = NewCodeEntry (OP65_LDX, AM65_ZP, SB_GetConstBuf (&Arg), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_LDY, AM65_ZP, GetZPName (B->Where & REG_TMP1), 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_SP6502: + X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + case BU_SP: + X = NewCodeEntry (OP65_JSR, AM65_ABS, "popa", 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_JSR, AM65_ABS, "popax", 0, E->LI); + CS_InsertEntry (S, X, Idx++); + break; + + default: + /* Unable to restorep */ + return 0; + } + + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx, Idx - OldIdx); + + SB_Done (&Arg); + + /* Done */ + return 1; +} + + + +int BackupArgAfter (CodeSeg* S, BackupInfo* B, int Idx, const CodeEntry* E, Collection* Indices) +/* Backup the content of the opc arg of the entry E after the specified index Idx. +** Reg A/Y will be used to transfer the content from a memory location to another +** regardless of whether it is in use. +*/ +{ + CodeEntry* X; + int OldIdx = Idx; + unsigned ArgSize; + unsigned Use, Chg; + StrBuf SrcArg; + StrBuf DstArg; + + SB_Init (&SrcArg); + SB_Init (&DstArg); + + /* We only recognize opc with an arg for now, as well as a special case for ldaxysp */ + if ((E->OPC != OP65_JSR || strcmp (E->Arg, "ldaxysp") == 0) && + E->AM != AM65_BRA) { + /* Get size of the arg */ + if ((E->Info & OF_LBRA) != 0 || strcmp (E->Arg, "ldaxysp") == 0) { + ArgSize = BU_B16; + } else { + ArgSize = BU_B8; + } + + if (E->AM == AM65_IMM && CE_HasNumArg (E)) { + /* Just memorize the value */ + B->Type = BU_IMM | ArgSize; + B->Imm = E->Num; + + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx + 1, Idx - OldIdx); + + /* Done */ + return 1; + + } + + if (E->Size != 1 && E->AM != AM65_IMP) { + + /* We only recognize opc with an arg for now */ + FindAvailableBackupLoc (B, ArgSize); + switch (B->Type & BU_TYPE_MASK) { + case BU_ZP: + X = NewCodeEntry (OP65_LDA, E->AM, E->Arg, 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + SB_AppendStr (&DstArg, GetZPName (B->Where)); + SB_Terminate (&DstArg); + X = NewCodeEntry (OP65_STA, AM65_ZP, SB_GetConstBuf (&DstArg), 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + if (ArgSize == BU_B16) { + SB_AppendStr (&SrcArg, E->Arg); + SB_AppendStr (&SrcArg, "+1"); + SB_Terminate (&SrcArg); + X = NewCodeEntry (OP65_LDA, E->AM, SB_GetConstBuf (&SrcArg), 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + SB_AppendStr (&DstArg, "+1"); + SB_Terminate (&DstArg); + X = NewCodeEntry (OP65_STA, AM65_ZP, SB_GetConstBuf (&DstArg), 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + } + break; + + case BU_REG: + CHECK (ArgSize == BU_B8 && B->Where == REG_Y); + if (E->AM == AM65_ZP || E->AM == AM65_ABS) { + X = NewCodeEntry (OP65_LDY, E->AM, E->Arg, 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + } else { + X = NewCodeEntry (OP65_LDA, E->AM, E->Arg, 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + } + break; + + case BU_SP6502: + X = NewCodeEntry (OP65_LDA, E->AM, E->Arg, 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + if (ArgSize == BU_B16) { + SB_AppendStr (&SrcArg, E->Arg); + SB_AppendStr (&SrcArg, "+1"); + SB_Terminate (&SrcArg); + X = NewCodeEntry (OP65_LDA, E->AM, SB_GetConstBuf (&SrcArg), 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + } + break; + + case BU_SP: + X = NewCodeEntry (OP65_LDA, E->AM, E->Arg, 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + if (ArgSize != BU_B16) { + X = NewCodeEntry (OP65_JSR, AM65_ABS, "pusha", 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + } else { + SB_AppendStr (&SrcArg, E->Arg); + SB_AppendStr (&SrcArg, "+1"); + SB_Terminate (&SrcArg); + if ((B->ZPUsage & REG_X) == 0) { + if (E->AM == AM65_ZP) { + X = NewCodeEntry (OP65_LDX, E->AM, SB_GetConstBuf (&SrcArg), 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + X = NewCodeEntry (OP65_JSR, AM65_ABS, "pushax", 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + } else { + X = NewCodeEntry (OP65_LDA, E->AM, SB_GetConstBuf (&SrcArg), 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + X = NewCodeEntry (OP65_JSR, AM65_ABS, "pushax", 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + } + } else { + X = NewCodeEntry (OP65_JSR, AM65_ABS, "pusha", 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + X = NewCodeEntry (OP65_LDA, AM65_ZP, SB_GetConstBuf (&DstArg), 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + X = NewCodeEntry (OP65_JSR, AM65_ABS, "pusha", 0, E->LI); + CS_InsertEntry (S, X, ++Idx); + } + } + break; + } + + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx + 1, Idx - OldIdx); + + /* Done */ + return 1; + } + } else if (E->OPC == OP65_JSR) { + /* For function calls we load their arguments instead */ + GetFuncInfo (E->Arg, &Use, &Chg); + if ((Use & ~REG_AXY) == 0) { + if (Use == REG_A) { + ArgSize = BU_B8; + return BackupAAfter (S, B, Idx, Indices); + } else if (Use == REG_AX) { + ArgSize = BU_B16; + return BackupAXAfter (S, B, Idx, Indices); + } else if (Use == REG_AXY) { + /* This is actually a 16-bit word plus a 8-bit byte */ + ArgSize = BU_B24; + return BackupAXYAfter (S, B, Idx, Indices); + } + + /* We don't recognize other usage patterns for now */ + } + } + + SB_Done (&SrcArg); + SB_Done (&DstArg); + + /* Unable to do backup */ + return 0; +} + +static int LoadAAt (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices, int After) +/* Reload into A the same arg according to LoadRegInfo before or after Idx +** depending on the After param. +*/ +{ + CodeEntry* E; + CodeEntry* O; /* Old entry at Idx */ + CodeEntry* X; + int Success = 0; + int OldIdx; + unsigned Use, Chg; + + /* Adjust the insertion point if necessary */ + if (After) { + ++Idx; + } + OldIdx = Idx; + + E = LRI->LoadEntry; + CHECK (E != 0); + + O = CS_GetEntry (S, OldIdx); + + /* We only recognize opc with an arg for now, as well as a special case for ldaxysp */ + if ((E->OPC != OP65_JSR || strcmp (E->Arg, "ldaxysp") == 0) && + E->AM != AM65_BRA && E->AM != AM65_IMP) { + if (E->Size != 1 && E->AM != AM65_IMP) { + + /* FIXME: The load flags only reflect the situation by the time it reaches the range end */ + if ((LRI->Flags & (LI_DIRECT | LI_CHECK_ARG | LI_CHECK_Y)) != 0) { + if ((LRI->Flags & LI_RELOAD_Y) != 0) { + if ((LRI->Flags & LI_CHECK_Y) == 0) { + X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (LRI->Offs), 0, E->LI); + } else { + X = NewCodeEntry (OP65_LDY, LRI->LoadYEntry->AM, LRI->LoadYEntry->Arg, 0, E->LI); + } + CS_InsertEntry (S, X, Idx++); + } + X = NewCodeEntry (OP65_LDA, E->AM, E->Arg, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + + Success = 1; + } + } + } else if (E->OPC == OP65_JSR) { + + /* For other function calls we load their arguments instead */ + GetFuncInfo (E->Arg, &Use, &Chg); + if ((Use & ~REG_AXY) == 0) { + if (Use == REG_X) { + X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } else if (Use == REG_A) { + X = NewCodeEntry (OP65_TYA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } else if (Use == REG_A) { + /* nothing to do */ + } else { + /* We don't recognize other usage patterns for now */ + return 0; + } + + Success = 1; + } + } + + if (Success) { + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx, Idx - OldIdx); + + /* Move labels if it was an insertion before Idx */ + CS_MoveLabels (S, O, CS_GetEntry (S, OldIdx)); + + /* Done */ + return 1; + } + + /* Unable to load */ + return 0; +} + + + +static int LoadXAt (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices, int After) +/* Reload into X the same arg according to LoadRegInfo before or after Idx +** depending on the After param. +*/ +{ + CodeEntry* E; + CodeEntry* O; /* Old entry at Idx */ + CodeEntry* X; + int Success = 0; + int OldIdx; + unsigned Use, Chg; + + /* Adjust the insertion point if necessary */ + if (After) { + ++Idx; + } + OldIdx = Idx; + + E = LRI->LoadEntry; + CHECK (E != 0); + + O = CS_GetEntry (S, OldIdx); + + /* We only recognize opc with an arg for now, as well as a special case for ldaxysp */ + if ((E->OPC != OP65_JSR || strcmp (E->Arg, "ldaxysp") == 0) && + E->AM != AM65_BRA && E->AM != AM65_IMP) { + if (E->Size != 1 && E->AM != AM65_IMP) { + + /* FIXME: The load flags only reflect the situation by the time it reaches the range end */ + if ((LRI->Flags & (LI_DIRECT | LI_CHECK_ARG | LI_CHECK_Y)) != 0) { + if ((LRI->Flags & LI_RELOAD_Y) != 0) { + if ((LRI->Flags & LI_CHECK_Y) == 0) { + X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (LRI->Offs), 0, E->LI); + } else { + X = NewCodeEntry (OP65_LDY, LRI->LoadYEntry->AM, LRI->LoadYEntry->Arg, 0, E->LI); + } + CS_InsertEntry (S, X, Idx++); + + /* ldx does support AM65_ZPY and AM65_ABSY */ + if (E->AM == AM65_ZPY || E->AM == AM65_ABSY) { + X = NewCodeEntry (OP65_LDX, E->AM, E->Arg, 0, E->LI); + } else { + X = NewCodeEntry (OP65_LDA, E->AM, E->Arg, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, E->LI); + } + CS_InsertEntry (S, X, Idx++); + } else { + X = NewCodeEntry (OP65_LDX, E->AM, E->Arg, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } + + Success = 1; + } + } + } else if (E->OPC == OP65_JSR) { + /* For function calls we load their arguments instead */ + GetFuncInfo (E->Arg, &Use, &Chg); + if ((Use & ~REG_AXY) == 0) { + if (Use == REG_A) { + X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } else if (Use == REG_Y) { + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TYA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TAX, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } else if (Use == REG_X) { + /* nothing to do */ + } else { + /* We don't recognize other usage patterns for now */ + return 0; + } + + Success = 1; + } + } + + if (Success) { + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx, Idx - OldIdx); + + /* Move labels if it was an insertion before Idx */ + CS_MoveLabels (S, O, CS_GetEntry (S, OldIdx)); + + /* Done */ + return 1; + } + + /* Unable to load */ + return 0; +} + + + +static int LoadYAt (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices, int After) +/* Reload into Y the same arg according to LoadRegInfo before or after Idx +** depending on the After param. +*/ +{ + CodeEntry* E; + CodeEntry* O; /* Old entry at Idx */ + CodeEntry* X; + int Success = 0; + int OldIdx; + unsigned Use, Chg; + + /* Adjust the insertion point if necessary */ + if (After) { + ++Idx; + } + OldIdx = Idx; + + E = LRI->LoadEntry; + CHECK (E != 0); + + O = CS_GetEntry (S, OldIdx); + + /* We only recognize opc with an arg for now, as well as a special case for ldaxysp */ + if ((E->OPC != OP65_JSR || strcmp (E->Arg, "ldaxysp") == 0) && + E->AM != AM65_BRA && E->AM != AM65_IMP) { + if (E->Size != 1 && E->AM != AM65_IMP) { + + /* FIXME: The load flags only reflect the situation by the time it reaches the range end */ + if ((LRI->Flags & (LI_DIRECT | LI_CHECK_ARG | LI_CHECK_Y)) != 0) { + if ((LRI->Flags & LI_RELOAD_Y) != 0) { + if ((LRI->Flags & LI_CHECK_Y) == 0) { + X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (LRI->Offs), 0, E->LI); + } else { + X = NewCodeEntry (OP65_LDY, LRI->LoadYEntry->AM, LRI->LoadYEntry->Arg, 0, E->LI); + } + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_LDA, E->AM, E->Arg, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } else { + X = NewCodeEntry (OP65_LDY, E->AM, E->Arg, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } + + Success = 1; + } + } + } else if (E->OPC == OP65_JSR) { + /* For function calls we load their arguments instead */ + GetFuncInfo (E->Arg, &Use, &Chg); + if ((Use & ~REG_AXY) == 0) { + if (Use == REG_A) { + X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } else if (Use == REG_X) { + X = NewCodeEntry (OP65_PHA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_TAY, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + X = NewCodeEntry (OP65_PLA, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, Idx++); + } else if (Use == REG_Y) { + /* nothing to do */ + } else { + /* We don't recognize other usage patterns for now */ + return 0; + } + + Success = 1; + } + } + + if (Success) { + /* Adjust all indices at once */ + AdjustEntryIndices (Indices, OldIdx, Idx - OldIdx); + + /* Move labels if it was an insertion before Idx */ + CS_MoveLabels (S, O, CS_GetEntry (S, OldIdx)); + + /* Done */ + return 1; + } + + /* Unable to load */ + return 0; +} + + + +int LoadABefore (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices) +/* Reload into A the same arg according to LoadRegInfo at Idx */ +{ + return LoadAAt (S, Idx, LRI, Indices, 0); +} + + + +int LoadXBefore (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices) +/* Reload into X the same arg according to LoadRegInfo at Idx */ +{ + return LoadXAt (S, Idx, LRI, Indices, 0); +} + + + +int LoadYBefore (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices) +/* Reload into Y the same arg according to LoadRegInfo at Idx */ +{ + return LoadYAt (S, Idx, LRI, Indices, 0); +} + + + +int LoadAAfter (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices) +/* Reload into A the same arg according to LoadRegInfo after Idx */ +{ + return LoadAAt (S, Idx, LRI, Indices, 1); +} + + + +int LoadXAfter (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices) +/* Reload into X the same arg according to LoadRegInfo after Idx */ +{ + return LoadXAt (S, Idx, LRI, Indices, 1); +} + + + +int LoadYAfter (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices) +/* Reload into Y the same arg according to LoadRegInfo after Idx */ +{ + return LoadYAt (S, Idx, LRI, Indices, 1); +} + + + +unsigned GetRegAccessedInOpenRange (CodeSeg* S, int First, int Last) +/* Get what ZPs, registers or processor states are used or changed in the range +** (First, Last). +** The code block must be basic without any jump backwards. +*/ +{ + CodeEntry* X; + unsigned ZPAccessed = 0; + + CHECK (Last <= (int)CollCount (&S->Entries)); + + while (++First < Last) { + X = CS_GetEntry (S, First); + ZPAccessed |= X->Use | X->Chg; + } + + return ZPAccessed; +} + + + +unsigned GetRegUsageInOpenRange (CodeSeg* S, int First, int Last, unsigned* Use, unsigned* Chg) +/* Get what ZPs, registers or processor states are used or changed in the range +** (First, Last) in output parameters Use and Chg. +** Return what ZP regs are used before changed in this range. +** The code block must be basic without any jump backwards. +*/ +{ + CodeEntry* X; + unsigned U = 0; + unsigned C = 0; + + CHECK (Last <= (int)CollCount (&S->Entries)); + + /* Clear the output flags first */ + if (Use != 0) { + *Use = 0; + } + if (Chg != 0) { + *Chg = 0; + } + + while (++First < Last) { + X = CS_GetEntry (S, First); + if (Use != 0) { + *Use |= X->Use; + } + if (Chg != 0) { + *Chg |= X->Chg; + } + /* Used before changed */ + U |= ~C & X->Use; + C |= X->Chg; + } + + return U; +} + + + +int FindArgFirstChangeInOpenRange (CodeSeg* S, int First, int Last, CodeEntry* E) +/* Find the first possible spot where the loaded arg of E might be changed in +** the range (First, Last). The code block in the range must be basic without +** any jump backwards. +** Return the index of the found entry, or Last if not found. +*/ +{ + LoadRegInfo LRI; + CodeEntry* X; + + CHECK (Last <= (int)CollCount (&S->Entries)); + + /* TODO: We'll currently give up finding the src of Y */ + ClearLoadRegInfo (&LRI); + PrepairLoadRegInfoForArgCheck (S, &LRI, E); + + /* TODO: We don't currently check for all cases */ + if ((LRI.Flags & (LI_DIRECT | LI_CHECK_ARG | LI_CHECK_Y)) == 0) { + /* Just bail out as if the src would change right away */ + return First + 1; + } + + /* If there's no need to check */ + if ((LRI.Flags & (LI_CHECK_ARG | LI_CHECK_Y)) == 0) { + return Last; + } + + while (++First < Last) { + X = CS_GetEntry (S, First); + if (Affected (&LRI, X)) { + return First; + } + } + + /* Not found */ + return Last; +} + + + +int FindRegFirstChangeInOpenRange (CodeSeg* S, int First, int Last, unsigned what) +/* Find the first possible spot where the queried ZPs, registers and/or processor +** states might be changed in the range (First, Last). The code block in the +** range must be basic without any jump backwards. +** Return the index of the found entry, or Last if not found. +*/ +{ + CodeEntry* X; + + CHECK (Last <= (int)CollCount (&S->Entries)); + + while (++First < Last) { + X = CS_GetEntry (S, First); + if ((X->Chg & what) != 0) { + return First; + } + } + + /* Not found */ + return Last; +} + + + +int FindRegFirstUseInOpenRange (CodeSeg* S, int First, int Last, unsigned what) +/* Find the first possible spot where the queried ZPs, registers and/or processor +** states might be used in the range (First, Last). The code block in the range +** must be basic without any jump backwards. +** Return the index of the found entry, or Last if not found. +*/ +{ + CodeEntry* X; + + CHECK (Last <= (int)CollCount (&S->Entries)); + + while (++First < Last) { + X = CS_GetEntry (S, First); + if ((X->Use & what) != 0) { + return First; + } + } + + /* Not found */ + return Last; +} + + + +int FindRegLastChangeInOpenRange (CodeSeg* S, int First, int Last, unsigned what) +/* Find the last possible spot where the queried ZPs, registers and/or processor +** states might be changed in the range (First, Last). The code block in the +** range must be basic without any jump backwards. +** Return the index of the found entry, or -1 if not found. +*/ +{ + CodeEntry* X; + int Found = -1; + + CHECK (Last <= (int)CollCount (&S->Entries)); + + while (++First < Last) { + X = CS_GetEntry (S, First); + if ((X->Chg & what) != 0) { + Found = First; + } + } + + return Found; +} + + + +int FindRegLastUseInOpenRange (CodeSeg* S, int First, int Last, unsigned what) +/* Find the last possible spot where the queried ZPs, registers and/or processor +** states might be used in the range (First, Last). The code block in the range +** must be basic without any jump backwards. +** Return the index of the found entry, or -1 if not found. +*/ +{ + CodeEntry* X; + int Found = -1; + + CHECK (Last <= (int)CollCount (&S->Entries)); + + while (++First < Last) { + X = CS_GetEntry (S, First); + if ((X->Use & what) != 0) { + Found = First; + } + } + + return Found; +} diff --git a/src/cc65/codeoptutil.h b/src/cc65/codeoptutil.h index 49a8ce60f..bb5158f1b 100644 --- a/src/cc65/codeoptutil.h +++ b/src/cc65/codeoptutil.h @@ -52,81 +52,81 @@ /* LoadRegInfo flags set by DirectOp */ typedef enum { - LI_NONE = 0x00, - LI_DIRECT = 0x01, /* Direct op may be used */ - LI_RELOAD_Y = 0x02, /* Reload index register Y */ - LI_REMOVE = 0x04, /* Load may be removed */ - LI_DONT_REMOVE = 0x08, /* Load may not be removed */ - LI_CHECK_ARG = 0x10, /* Load src might be modified later */ - LI_SRC_CHG = 0x20, /* Load src is possibly modified */ - LI_LOAD_INSN = 0x40, /* Has a load insn */ - LI_CHECK_Y = 0x80, /* Indexed load src might be modified later */ - LI_USED_BY_A = 0x100, /* Content used by RegA */ - LI_USED_BY_X = 0x200, /* Content used by RegX */ - LI_USED_BY_Y = 0x400, /* Content used by RegY */ - LI_SP = 0x800, /* Content on stack */ + LI_NONE = 0x00, + LI_DIRECT = 0x01, /* Direct op may be used */ + LI_RELOAD_Y = 0x02, /* Reload index register Y */ + LI_REMOVE = 0x04, /* Load may be removed */ + LI_DONT_REMOVE = 0x08, /* Load may not be removed */ + LI_CHECK_ARG = 0x10, /* Load src might be modified later */ + LI_SRC_CHG = 0x20, /* Load src is possibly modified */ + LI_LOAD_INSN = 0x40, /* Has a load insn */ + LI_CHECK_Y = 0x80, /* Indexed load src might be modified later */ + LI_USED_BY_A = 0x100, /* Content used by RegA */ + LI_USED_BY_X = 0x200, /* Content used by RegX */ + LI_USED_BY_Y = 0x400, /* Content used by RegY */ + LI_SP = 0x800, /* Content on stack */ } LI_FLAGS; /* Structure that tells us how to load the lhs values */ typedef struct LoadRegInfo LoadRegInfo; struct LoadRegInfo { - LI_FLAGS Flags; /* Tells us how to load */ - int LoadIndex; /* Index of load insn, -1 if invalid */ - CodeEntry* LoadEntry; /* The actual entry, 0 if invalid */ - int LoadYIndex; /* Index of Y-load insn, -1 if invalid */ - CodeEntry* LoadYEntry; /* The actual Y-load entry, 0 if invalid */ - int XferIndex; /* Index of transfer insn */ - CodeEntry* XferEntry; /* The actual transfer entry */ - int Offs; /* Stack offset if data is on stack */ + LI_FLAGS Flags; /* Tells us how to load */ + int LoadIndex; /* Index of load insn, -1 if invalid */ + CodeEntry* LoadEntry; /* The actual entry, 0 if invalid */ + int LoadYIndex; /* Index of Y-load insn, -1 if invalid */ + CodeEntry* LoadYEntry; /* The actual Y-load entry, 0 if invalid */ + int ChgIndex; /* Index of last change */ + CodeEntry* ChgEntry; /* The actual change entry */ + int Offs; /* Stack offset if data is on stack */ }; /* Now combined for both registers */ typedef struct LoadInfo LoadInfo; struct LoadInfo { - LoadRegInfo A; /* Info for A register */ - LoadRegInfo X; /* Info for X register */ - LoadRegInfo Y; /* Info for Y register */ + LoadRegInfo A; /* Info for A register */ + LoadRegInfo X; /* Info for X register */ + LoadRegInfo Y; /* Info for Y register */ }; /* Structure forward decl */ typedef struct StackOpData StackOpData; -typedef struct OptFuncDesc OptFuncDesc; /* Structure that holds the needed data */ struct StackOpData { - CodeSeg* Code; /* Pointer to code segment */ - unsigned Flags; /* Flags to remember things */ + CodeSeg* Code; /* Pointer to code segment */ + unsigned Flags; /* Flags to remember things */ /* Pointer to optimizer subfunction description */ - const OptFuncDesc* OptFunc; + const void* OptFunc; /* ZP register usage inside the sequence */ - unsigned ZPUsage; - unsigned ZPChanged; + unsigned ZPUsage; + unsigned ZPChanged; /* Freedom of registers inside the sequence */ - unsigned UsedRegs; /* Registers used */ + unsigned UsedRegs; /* Registers used */ /* Whether the rhs is changed multiple times */ - int RhsMultiChg; + int RhsMultiChg; - /* Register load information for lhs and rhs */ - LoadInfo Lhs; - LoadInfo Rhs; + /* Register load information for lhs, rhs and rv */ + LoadInfo Lhs; + LoadInfo Rhs; + LoadInfo Rv; /* Several indices of insns in the code segment */ - int PushIndex; /* Index of call to pushax in codeseg */ - int OpIndex; /* Index of actual operation */ + int PushIndex; /* Index of call to pushax in codeseg */ + int OpIndex; /* Index of actual operation */ /* Pointers to insns in the code segment */ - CodeEntry* PrevEntry; /* Entry before the call to pushax */ - CodeEntry* PushEntry; /* Pointer to entry with call to pushax */ - CodeEntry* OpEntry; /* Pointer to entry with op */ - CodeEntry* NextEntry; /* Entry after the op */ + CodeEntry* PrevEntry; /* Entry before the call to pushax */ + CodeEntry* PushEntry; /* Pointer to entry with call to pushax */ + CodeEntry* OpEntry; /* Pointer to entry with op */ + CodeEntry* NextEntry; /* Entry after the op */ - const char* ZPLo; /* Lo byte of zero page loc to use */ - const char* ZPHi; /* Hi byte of zero page loc to use */ - unsigned IP; /* Insertion point used by some routines */ + const char* ZPLo; /* Lo byte of zero page loc to use */ + const char* ZPHi; /* Hi byte of zero page loc to use */ + unsigned IP; /* Insertion point used by some routines */ }; @@ -166,7 +166,16 @@ void AdjustLoadInfo (LoadInfo* LI, int Index, int Change); RegInfo* GetLastChangedRegInfo (StackOpData* D, LoadRegInfo* Reg); /* Get RegInfo of the last insn entry that changed the reg */ -unsigned int TrackLoads (LoadInfo* LI, LoadInfo* LLI, CodeSeg* S, int I); +void PrepairLoadRegInfoForArgCheck (CodeSeg* S, LoadRegInfo* LRI, CodeEntry* E); +/* Set the load src flags and remember to check for load src change if necessary */ + +void SetIfOperandSrcAffected (LoadInfo* LLI, CodeEntry* E); +/* Check and flag operand src that may be affected */ + +void SetIfOperandLoadUnremovable (LoadInfo* LI, unsigned Used); +/* Check and flag operand load that may be unremovable */ + +unsigned int TrackLoads (LoadInfo* LI, CodeSeg* S, int I); /* Track loads for a code entry. ** Return used registers. */ @@ -252,6 +261,190 @@ int HarmlessCall (const char* Name); ** the pushax/op sequence when encountered. */ + + +/*****************************************************************************/ +/* Helpers */ +/*****************************************************************************/ + + + +/* Backup location types */ +#define BU_UNKNOWN 0x00000000U /* Unknown */ +#define BU_IMM 0x00000000U /* Immediate */ +#define BU_REG 0x01000000U /* In register */ +#define BU_ZP 0x02000000U /* On ZP */ +#define BU_SP6502 0x04000000U /* On 6502 stack */ +#define BU_SP 0x08000000U /* On CC65 stack */ +#define BU_B8 0x00000000U /* Size of 8-bit */ +#define BU_B16 0x10000000U /* Size of 16-bit */ +#define BU_B24 0x20000000U /* Size of 24-bit */ +#define BU_B32 0x30000000U /* Size of 32-bit */ +#define BU_TYPE_MASK 0x0F000000U /* Type mask */ +#define BU_SIZE_MASK 0xF0000000U /* Size mask */ + +typedef struct { + unsigned Type; /* Backup location type and size */ + unsigned ZPUsage; /* ZP unusable for backup */ + union { + unsigned Where; /* Backup location */ + unsigned Imm; /* Backed-up value */ + unsigned char* Bytes; /* Pointer to backed-up value */ + }; +} BackupInfo; + + + +const char* GetZPName (unsigned ZPLoc); +/* Get the name strings of certain known ZP Regs */ + +unsigned FindAvailableBackupLoc (BackupInfo* B, unsigned Type); +/* Find a ZP loc for storing the backup and fill in the info. +** The allowed types are specified with the Type parameter. +** For convenience, all types are aloowed if none is specified. +** Return the type of the found loc. +*/ + +void AdjustEntryIndices (Collection* Indices, int Index, int Change); +/* Adjust a load register info struct after deleting or inserting successive +** entries with a given index. +*/ + +void DelEntryIdx (CodeSeg* S, int Idx, Collection* Indices); +/* Delete an entry and adjust Indices if necessary */ + +void DelEntriesIdx (CodeSeg* S, int Idx, int Count, Collection* Indices); +/* Delete entries and adjust Indices if necessary */ + +void RemoveFlaggedRegLoads (CodeSeg* S, LoadRegInfo* LRI, Collection* Indices); +/* Remove flagged register load insns */ + +void RemoveFlaggedLoads (CodeSeg* S, LoadInfo* LI, Collection* Indices); +/* Remove flagged load insns */ + +int BackupABefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Backup the content of A before the specified index Idx */ + +int BackupXBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Backup the content of X before the specified index Idx */ + +int BackupYBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Backup the content of Y before the specified index Idx */ + +int BackupAXBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Backup the content of AX before the specified index Idx */ + +int BackupAXYBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Backup the content of AXY before the specified index Idx. +** This doesn't allow separating the backup of Y from that of AX for now. +*/ + +int BackupAAfter (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Backup the content of A after the specified index Idx */ + +int BackupXAfter (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Backup the content of X after the specified index Idx */ + +int BackupYAfter (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Backup the content of Y after the specified index Idx */ + +int BackupAXAfter (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Backup the content of AX after the specified index Idx */ + +int BackupAXYAfter (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Backup the content of AXY after the specified index Idx. +** This doesn't allow separating the backup of Y from that of AX for now. +*/ + +int RestoreABefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Restore the content of Y before the specified index Idx */ + +int RestoreXBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Restore the content of X before the specified index Idx */ + +int RestoreYBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Restore the content of Y before the specified index Idx */ + +int RestoreAXBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Restore the content of AX before the specified index Idx */ + +int RestoreAXYBefore (CodeSeg* S, BackupInfo* B, int Idx, Collection* Indices); +/* Restore the content of AXY before the specified index Idx. +** This only allows restore from compacted AXY backup for now. +*/ + +int BackupArgAfter (CodeSeg* S, BackupInfo* B, int Idx, const CodeEntry* E, Collection* Indices); +/* Backup the content of the opc arg of the entry E after the specified index Idx. +** Reg A/Y will be used to transfer the content from a memory location to another +** regardless of whether it is in use. +*/ + +int LoadABefore (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices); +/* Reload into A the same arg according to LoadRegInfo at Idx */ + +int LoadXBefore (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices); +/* Reload into X the same arg according to LoadRegInfo at Idx */ + +int LoadYBefore (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices); +/* Reload into Y the same arg according to LoadRegInfo at Idx */ + +int LoadAAfter (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices); +/* Reload into A the same arg according to LoadRegInfo after Idx */ + +int LoadXAfter (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices); +/* Reload into X the same arg according to LoadRegInfo after Idx */ + +int LoadYAfter (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices); +/* Reload into Y the same arg according to LoadRegInfo after Idx */ + +unsigned GetRegAccessedInOpenRange (CodeSeg* S, int First, int Last); +/* Get what ZPs, registers or processor states are used or changed in the range +** (First, Last). +** The code block must be basic without any jump backwards. +*/ + +unsigned GetRegUsageInOpenRange (CodeSeg* S, int First, int Last, unsigned* Use, unsigned* Chg); +/* Get what ZPs, registers or processor states are used or changed in the range +** (First, Last) in output parameters Use and Chg. +** Return what ZP regs are used before changed in this range. +** The code block must be basic without any jump backwards. +*/ + +int FindArgFirstChangeInOpenRange (CodeSeg* S, int First, int Last, CodeEntry* E); +/* Find the first possible spot where the loaded arg of E might be changed in +** the range (First, Last). The code block in the range must be basic without +** any jump backwards. +** Return the index of the found entry, or Last if not found. +*/ + +int FindRegFirstChangeInOpenRange (CodeSeg* S, int First, int Last, unsigned what); +/* Find the first possible spot where the queried ZPs, registers and/or processor +** states might be changed in the range (First, Last). The code block in the +** range must be basic without any jump backwards. +** Return the index of the found entry, or Last if not found. +*/ + +int FindRegFirstUseInOpenRange (CodeSeg* S, int First, int Last, unsigned what); +/* Find the first possible spot where the queried ZPs, registers and/or processor +** states might be used in the range (First, Last). The code block in the range +** must be basic without any jump backwards. +** Return the index of the found entry, or Last if not found. +*/ + +int FindRegLastChangeInOpenRange (CodeSeg* S, int First, int Last, unsigned what); +/* Find the last possible spot where the queried ZPs, registers and/or processor +** states might be changed in the range (First, Last). The code block in the +** range must be basic without any jump backwards. +** Return the index of the found entry, or -1 if not found. +*/ + +int FindRegLastUseInOpenRange (CodeSeg* S, int First, int Last, unsigned what); +/* Find the last possible spot where the queried ZPs, registers and/or processor +** states might be used in the range (First, Last). The code block in the range +** must be basic without any jump backwards. +** Return the index of the found entry, or -1 if not found. +*/ + /* End of codeoptutil.h */ #endif diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 457f9ff1f..41dfb5526 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -100,10 +100,10 @@ static int SameRegAValue (StackOpData* D) RegInfo* LRI = GetLastChangedRegInfo (D, &D->Lhs.A); RegInfo* RRI = GetLastChangedRegInfo (D, &D->Rhs.A); - /* RHS can have a -1 LoadIndex only if it is carried over from LHS */ + /* RHS can have a -1 ChgIndex only if it is carried over from LHS */ if (RRI == 0 || - (D->Rhs.A.LoadIndex >= 0 && - D->Rhs.A.LoadIndex == D->Lhs.A.LoadIndex) || + (D->Rhs.A.ChgIndex >= 0 && + D->Rhs.A.ChgIndex == D->Lhs.A.ChgIndex) || (LRI != 0 && RegValIsKnown (LRI->Out.RegA) && RegValIsKnown (RRI->Out.RegA) && @@ -125,8 +125,8 @@ static int SameRegXValue (StackOpData* D) RegInfo* RRI = GetLastChangedRegInfo (D, &D->Rhs.X); if (RRI == 0 || - (D->Rhs.X.LoadIndex >= 0 && - D->Rhs.X.LoadIndex == D->Lhs.X.LoadIndex) || + (D->Rhs.X.ChgIndex >= 0 && + D->Rhs.X.ChgIndex == D->Lhs.X.ChgIndex) || (LRI != 0 && RegValIsKnown (LRI->Out.RegX) && RegValIsKnown (RRI->Out.RegX) && @@ -1204,7 +1204,7 @@ static unsigned Opt_a_tosicmp (StackOpData* D) if (!SameRegAValue (D)) { /* Because of SameRegAValue */ - CHECK (D->Rhs.A.LoadIndex >= 0); + CHECK (D->Rhs.A.ChgIndex >= 0); /* Store LHS in ZP and reload it before op */ X = NewCodeEntry (OP65_STA, AM65_ZP, D->ZPLo, 0, D->PushEntry->LI); @@ -1217,7 +1217,7 @@ static unsigned Opt_a_tosicmp (StackOpData* D) if ((D->Rhs.A.Flags & LI_DIRECT) == 0) { /* RHS src is not directly comparable */ X = NewCodeEntry (OP65_STA, AM65_ZP, D->ZPHi, 0, D->OpEntry->LI); - InsertEntry (D, X, D->Rhs.A.LoadIndex + 1); + InsertEntry (D, X, D->Rhs.A.ChgIndex + 1); /* Cmp with stored RHS */ X = NewCodeEntry (OP65_CMP, AM65_ZP, D->ZPHi, 0, D->OpEntry->LI); @@ -1431,7 +1431,8 @@ static int PreCondOk (StackOpData* D) int Passed = 0; /* Check the flags */ - unsigned UnusedRegs = D->OptFunc->UnusedRegs; + const OptFuncDesc* Desc = D->OptFunc; + unsigned UnusedRegs = Desc->UnusedRegs; if (UnusedRegs != REG_NONE && (GetRegInfo (D->Code, D->OpIndex+1, UnusedRegs) & UnusedRegs) != 0) { /* Cannot optimize */ @@ -1442,15 +1443,15 @@ static int PreCondOk (StackOpData* D) LoVal = D->OpEntry->RI->In.RegA; HiVal = D->OpEntry->RI->In.RegX; /* Check normally first, then interchange A/X and check again if necessary */ - for (I = (D->OptFunc->Flags & OP_AX_INTERCHANGE ? 0 : 1); !Passed && I < 2; ++I) { + for (I = (Desc->Flags & OP_AX_INTERCHANGE ? 0 : 1); !Passed && I < 2; ++I) { do { - if ((D->OptFunc->Flags & OP_A_KNOWN) != 0 && + if ((Desc->Flags & OP_A_KNOWN) != 0 && RegValIsUnknown (LoVal)) { /* Cannot optimize */ break; } - if ((D->OptFunc->Flags & OP_X_ZERO) != 0 && + if ((Desc->Flags & OP_X_ZERO) != 0 && HiVal != 0) { /* Cannot optimize */ break; @@ -1471,7 +1472,7 @@ static int PreCondOk (StackOpData* D) Lhs = &D->Lhs; Rhs = &D->Rhs; /* Check normally first, then interchange LHS/RHS and check again if necessary */ - for (I = (D->OptFunc->Flags & OP_LR_INTERCHANGE ? 0 : 1); !Passed && I < 2; ++I) { + for (I = (Desc->Flags & OP_LR_INTERCHANGE ? 0 : 1); !Passed && I < 2; ++I) { do { LhsLo = &Lhs->A; @@ -1482,48 +1483,48 @@ static int PreCondOk (StackOpData* D) ** so we don't need to check twice for now. */ - if ((D->OptFunc->Flags & OP_LHS_LOAD) != 0) { + if ((Desc->Flags & OP_LHS_LOAD) != 0) { if ((LhsLo->Flags & LhsHi->Flags & LI_LOAD_INSN) == 0) { /* Cannot optimize */ break; - } else if ((D->OptFunc->Flags & OP_LHS_LOAD_DIRECT) != 0) { + } else if ((Desc->Flags & OP_LHS_LOAD_DIRECT) != 0) { if ((LhsLo->Flags & LhsHi->Flags & LI_DIRECT) == 0) { /* Cannot optimize */ break; } } } - if ((D->OptFunc->Flags & OP_RHS_LOAD) != 0) { + if ((Desc->Flags & OP_RHS_LOAD) != 0) { if ((RhsLo->Flags & RhsHi->Flags & LI_LOAD_INSN) == 0) { /* Cannot optimize */ break; - } else if ((D->OptFunc->Flags & OP_RHS_LOAD_DIRECT) != 0) { + } else if ((Desc->Flags & OP_RHS_LOAD_DIRECT) != 0) { if ((RhsLo->Flags & RhsHi->Flags & LI_DIRECT) == 0) { /* Cannot optimize */ break; } } } - if ((D->OptFunc->Flags & OP_LHS_REMOVE) != 0) { + if ((Desc->Flags & OP_LHS_REMOVE) != 0) { /* Check if the load entries cannot be removed */ if ((LhsLo->LoadEntry != 0 && (LhsLo->LoadEntry->Flags & CEF_DONT_REMOVE) != 0) || (LhsHi->LoadEntry != 0 && (LhsHi->LoadEntry->Flags & CEF_DONT_REMOVE) != 0)) { - if ((D->OptFunc->Flags & OP_LHS_REMOVE_DIRECT) != 0) { + if ((Desc->Flags & OP_LHS_REMOVE_DIRECT) != 0) { /* Cannot optimize */ break; } } } - if ((D->OptFunc->Flags & OP_RHS_REMOVE) != 0) { + if ((Desc->Flags & OP_RHS_REMOVE) != 0) { if ((RhsLo->LoadEntry != 0 && (RhsLo->LoadEntry->Flags & CEF_DONT_REMOVE) != 0) || (RhsHi->LoadEntry != 0 && (RhsHi->LoadEntry->Flags & CEF_DONT_REMOVE) != 0)) { - if ((D->OptFunc->Flags & OP_RHS_REMOVE_DIRECT) != 0) { + if ((Desc->Flags & OP_RHS_REMOVE_DIRECT) != 0) { /* Cannot optimize */ break; } } } - if (D->RhsMultiChg && (D->OptFunc->Flags & OP_RHS_REMOVE_DIRECT) != 0) { + if (D->RhsMultiChg && (Desc->Flags & OP_RHS_REMOVE_DIRECT) != 0) { /* Cannot optimize */ break; } @@ -1578,7 +1579,8 @@ static int RegAPreCondOk (StackOpData* D) int Passed = 0; /* Check the flags */ - unsigned UnusedRegs = D->OptFunc->UnusedRegs; + const OptFuncDesc* Desc = D->OptFunc; + unsigned UnusedRegs = Desc->UnusedRegs; if (UnusedRegs != REG_NONE && (GetRegInfo (D->Code, D->OpIndex+1, UnusedRegs) & UnusedRegs) != 0) { /* Cannot optimize */ @@ -1591,19 +1593,19 @@ static int RegAPreCondOk (StackOpData* D) RhsLoVal = D->OpEntry->RI->In.RegA; RhsHiVal = D->OpEntry->RI->In.RegX; /* Check normally first, then interchange A/X and check again if necessary */ - for (I = (D->OptFunc->Flags & OP_AX_INTERCHANGE ? 0 : 1); !Passed && I < 2; ++I) { + for (I = (Desc->Flags & OP_AX_INTERCHANGE ? 0 : 1); !Passed && I < 2; ++I) { do { if (LhsHiVal != RhsHiVal) { /* Cannot optimize */ break; } - if ((D->OptFunc->Flags & OP_A_KNOWN) != 0 && + if ((Desc->Flags & OP_A_KNOWN) != 0 && RegValIsUnknown (LhsLoVal)) { /* Cannot optimize */ break; } - if ((D->OptFunc->Flags & OP_X_ZERO) != 0 && + if ((Desc->Flags & OP_X_ZERO) != 0 && LhsHiVal != 0) { /* Cannot optimize */ break; @@ -1629,7 +1631,7 @@ static int RegAPreCondOk (StackOpData* D) Lhs = &D->Lhs; Rhs = &D->Rhs; /* Check normally first, then interchange LHS/RHS and check again if necessary */ - for (I = (D->OptFunc->Flags & OP_LR_INTERCHANGE ? 0 : 1); !Passed && I < 2; ++I) { + for (I = (Desc->Flags & OP_LR_INTERCHANGE ? 0 : 1); !Passed && I < 2; ++I) { do { LhsLo = &Lhs->A; @@ -1638,46 +1640,46 @@ static int RegAPreCondOk (StackOpData* D) ** so we don't need to check twice for now. */ - if ((D->OptFunc->Flags & OP_LHS_LOAD) != 0) { + if ((Desc->Flags & OP_LHS_LOAD) != 0) { if ((LhsLo->Flags & LI_LOAD_INSN) == 0) { /* Cannot optimize */ break; - } else if ((D->OptFunc->Flags & OP_LHS_LOAD_DIRECT) != 0) { + } else if ((Desc->Flags & OP_LHS_LOAD_DIRECT) != 0) { if ((LhsLo->Flags & LI_DIRECT) == 0) { /* Cannot optimize */ break; } } } - if ((D->OptFunc->Flags & OP_RHS_LOAD) != 0) { + if ((Desc->Flags & OP_RHS_LOAD) != 0) { if ((RhsLo->Flags & LI_LOAD_INSN) == 0) { /* Cannot optimize */ break; - } else if ((D->OptFunc->Flags & OP_RHS_LOAD_DIRECT) != 0) { + } else if ((Desc->Flags & OP_RHS_LOAD_DIRECT) != 0) { if ((RhsLo->Flags & LI_DIRECT) == 0) { /* Cannot optimize */ break; } } } - if ((D->OptFunc->Flags & OP_LHS_REMOVE) != 0) { + if ((Desc->Flags & OP_LHS_REMOVE) != 0) { /* Check if the load entries cannot be removed */ if ((LhsLo->LoadEntry != 0 && (LhsLo->LoadEntry->Flags & CEF_DONT_REMOVE) != 0)) { - if ((D->OptFunc->Flags & OP_LHS_REMOVE_DIRECT) != 0) { + if ((Desc->Flags & OP_LHS_REMOVE_DIRECT) != 0) { /* Cannot optimize */ break; } } } - if ((D->OptFunc->Flags & OP_RHS_REMOVE) != 0) { + if ((Desc->Flags & OP_RHS_REMOVE) != 0) { if ((RhsLo->LoadEntry != 0 && (RhsLo->LoadEntry->Flags & CEF_DONT_REMOVE) != 0)) { - if ((D->OptFunc->Flags & OP_RHS_REMOVE_DIRECT) != 0) { + if ((Desc->Flags & OP_RHS_REMOVE_DIRECT) != 0) { /* Cannot optimize */ break; } } } - if (D->RhsMultiChg && (D->OptFunc->Flags & OP_RHS_REMOVE_DIRECT) != 0) { + if (D->RhsMultiChg && (Desc->Flags & OP_RHS_REMOVE_DIRECT) != 0) { /* Cannot optimize */ break; } @@ -1731,8 +1733,8 @@ unsigned OptStackOps (CodeSeg* S) int OldEntryCount; /* Old number of entries */ unsigned Used; /* What registers would be used */ unsigned PushedRegs; /* Track if the same regs are used after the push */ - int RhsALoadIndex; /* Track if rhs is changed more than once */ - int RhsXLoadIndex; /* Track if rhs is changed more than once */ + int RhsAChgIndex; /* Track if rhs is changed more than once */ + int RhsXChgIndex; /* Track if rhs is changed more than once */ int IsRegAOptFunc = 0; /* Whether to use the RegA-only optimizations */ enum { @@ -1783,28 +1785,19 @@ unsigned OptStackOps (CodeSeg* S) */ if (CE_HasLabel (E)) { /* Currently we don't track across branches. - ** Remember this as an indirect load. + ** Treat this as a change to all regs. */ ClearLoadInfo (&Data.Lhs); - Data.Lhs.A.LoadIndex = I; - Data.Lhs.X.LoadIndex = I; - Data.Lhs.Y.LoadIndex = I; + Data.Lhs.A.ChgIndex = I; + Data.Lhs.X.ChgIndex = I; + Data.Lhs.Y.ChgIndex = I; } if (CE_IsCallTo (E, "pushax")) { - /* Disallow removing the loads if the registers are used */ - if (Data.UsedRegs & REG_A) { - Data.Lhs.A.Flags |= LI_DONT_REMOVE; - } - if (Data.UsedRegs & REG_X) { - Data.Lhs.X.Flags |= LI_DONT_REMOVE; - } - if (Data.UsedRegs & REG_Y) { - Data.Lhs.Y.Flags |= LI_DONT_REMOVE; - } + /* Disallow removing Lhs loads if the registers are used */ + SetIfOperandLoadUnremovable (&Data.Lhs, Data.UsedRegs); - /* The LHS regs are also used as the default RHS until changed */ - PushedRegs = REG_AXY; - Data.UsedRegs = REG_AXY; + /* The Lhs regs are also used as the default Rhs until changed */ + PushedRegs = REG_AXY; CopyLoadInfo (&Data.Rhs, &Data.Lhs); Data.PushIndex = I; @@ -1812,7 +1805,7 @@ unsigned OptStackOps (CodeSeg* S) State = FoundPush; } else { /* Track load insns */ - Used = TrackLoads (&Data.Lhs, 0, Data.Code, I); + Used = TrackLoads (&Data.Lhs, S, I); Data.UsedRegs &= ~E->Chg; Data.UsedRegs |= Used; } @@ -1825,15 +1818,14 @@ unsigned OptStackOps (CodeSeg* S) */ if (CE_HasLabel (E)) { /* Currently we don't track across branches. - ** Remember this as an indirect load. + ** Treat this as a change to all regs. */ ClearLoadInfo (&Data.Rhs); - Data.Rhs.A.LoadIndex = I; - Data.Rhs.X.LoadIndex = I; - Data.Rhs.Y.LoadIndex = I; + Data.Rhs.A.ChgIndex = I; + Data.Rhs.X.ChgIndex = I; + Data.Rhs.Y.ChgIndex = I; } if (E->OPC == OP65_JSR) { - /* Subroutine call: Check if this is one of the functions, ** we're going to replace. */ @@ -1846,16 +1838,9 @@ unsigned OptStackOps (CodeSeg* S) IsRegAOptFunc = 0; } if (Data.OptFunc) { - /* Disallow removing the loads if the registers are used */ - if (Data.UsedRegs & REG_A) { - Data.Rhs.A.Flags |= LI_DONT_REMOVE; - } - if (Data.UsedRegs & REG_X) { - Data.Rhs.X.Flags |= LI_DONT_REMOVE; - } - if (Data.UsedRegs & REG_Y) { - Data.Rhs.Y.Flags |= LI_DONT_REMOVE; - } + /* Disallow removing Rhs loads if the registers are used */ + SetIfOperandLoadUnremovable (&Data.Rhs, Data.UsedRegs); + /* Remember the op index and go on */ Data.OpIndex = I; Data.OpEntry = E; @@ -1891,11 +1876,15 @@ unsigned OptStackOps (CodeSeg* S) } /* Memorize the old rhs load indices before refreshing them */ - RhsALoadIndex = Data.Rhs.A.LoadIndex; - RhsXLoadIndex = Data.Rhs.X.LoadIndex; + RhsAChgIndex = Data.Rhs.A.ChgIndex; + RhsXChgIndex = Data.Rhs.X.ChgIndex; + + /* Keep tracking Lhs src if necessary */ + SetIfOperandSrcAffected (&Data.Lhs, E); /* Track register usage */ - Used = TrackLoads (&Data.Rhs, &Data.Lhs, Data.Code, I); + Used = TrackLoads (&Data.Rhs, S, I); + Data.ZPUsage |= (E->Use | E->Chg); /* The changes could depend on the use */ Data.UsedRegs &= ~E->Chg; @@ -1905,23 +1894,15 @@ unsigned OptStackOps (CodeSeg* S) /* Check if any parts of Lhs are used again before overwritten */ if (PushedRegs != 0) { if ((PushedRegs & E->Use) != 0) { - if ((PushedRegs & E->Use & REG_A) != 0) { - Data.Lhs.A.Flags |= LI_DONT_REMOVE; - } - if ((PushedRegs & E->Use & REG_X) != 0) { - Data.Lhs.X.Flags |= LI_DONT_REMOVE; - } - if ((PushedRegs & E->Use & REG_Y) != 0) { - Data.Lhs.Y.Flags |= LI_DONT_REMOVE; - } + SetIfOperandLoadUnremovable (&Data.Lhs, PushedRegs & E->Use); } PushedRegs &= ~E->Chg; } /* Check if rhs is changed again after the push */ - if ((RhsALoadIndex != Data.Lhs.A.LoadIndex && - RhsALoadIndex != Data.Rhs.A.LoadIndex) || - (RhsXLoadIndex != Data.Lhs.X.LoadIndex && - RhsXLoadIndex != Data.Rhs.X.LoadIndex)) { + if ((RhsAChgIndex != Data.Lhs.A.ChgIndex && + RhsAChgIndex != Data.Rhs.A.ChgIndex) || + (RhsXChgIndex != Data.Lhs.X.ChgIndex && + RhsXChgIndex != Data.Rhs.X.ChgIndex)) { /* This will disable those sub-opts that require removing ** the rhs as they can't handle such cases correctly. */ @@ -1993,7 +1974,8 @@ unsigned OptStackOps (CodeSeg* S) CS_GenRegInfo (S); /* Call the optimizer function */ - Changes += Data.OptFunc->Func (&Data); + const OptFuncDesc* Desc = Data.OptFunc; + Changes += Desc->Func (&Data); /* Unflag entries that can't be removed */ ResetDontRemoveEntryFlags (&Data); From cc0f8422f23b076b2046f0cc531dbaab9ba1f17f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 16 Apr 2020 17:17:52 +0800 Subject: [PATCH 0536/2710] More fixes and new utils to check if opcode arguments can be used elsewhere. Fixed tracking with LI_RELOAD_Y and LI_DIRECT. Fixed tracking with LI_CHECK_Y and LI_RELOAD_Y. --- src/cc65/codeoptutil.c | 442 +++++++++++++++++++++++++++-------------- src/cc65/codeoptutil.h | 33 ++- 2 files changed, 321 insertions(+), 154 deletions(-) diff --git a/src/cc65/codeoptutil.c b/src/cc65/codeoptutil.c index 46acbaaff..503f33859 100644 --- a/src/cc65/codeoptutil.c +++ b/src/cc65/codeoptutil.c @@ -103,15 +103,15 @@ void FinalizeLoadRegInfo (LoadRegInfo* LRI, CodeSeg* S) } /* Load from src not modified before op can be treated as direct */ - if ((LRI->Flags & LI_SRC_CHG) == 0 && + if ((LRI->Flags & (LI_SRC_CHG | LI_Y_SRC_CHG)) == 0 && (LRI->Flags & (LI_CHECK_ARG | LI_CHECK_Y)) != 0) { LRI->Flags |= LI_DIRECT; if ((LRI->Flags & LI_CHECK_Y) != 0) { LRI->Flags |= LI_RELOAD_Y; } } - /* We cannot ldy ??? or ldy src,y */ - if ((LRI->Flags & LI_CHECK_Y) != 0 && + /* We cannot ldy src,y or reload unknown Y */ + if ((LRI->Flags & (LI_CHECK_Y | LI_RELOAD_Y)) == (LI_CHECK_Y | LI_RELOAD_Y) && (LRI->LoadYEntry == 0 || (LRI->LoadYEntry->Use & REG_Y) == REG_Y)) { LRI->Flags &= ~LI_DIRECT; @@ -221,161 +221,205 @@ RegInfo* GetLastChangedRegInfo (StackOpData* D, LoadRegInfo* Reg) static int Affected (LoadRegInfo* LRI, const CodeEntry* E) -/* Check if the result of the same loading code as in LRI may be changed by E */ +/* Check if the result of the same loading code as in LRI may be changed by E. +** If any part of the arg is used, it could be unsafe to add such a store before E. +** If any part of the arg is changed, it could be unsafe to add such a load after E. +*/ { fncls_t fncls; unsigned int Use; unsigned int Chg; unsigned int UseToCheck = 0; + unsigned int ChgToCheck = 0; StrBuf Src, YSrc, New; int SrcOff = 0, YSrcOff = 0, NewOff = 0; - const ZPInfo* ZI = 0; + const ZPInfo* ZI = 0; + unsigned Res = 0; + CodeEntry* AE = 0; + CodeEntry* YE = 0; + + if ((LRI->Flags & (LI_CHECK_ARG | LI_CHECK_Y | LI_RELOAD_Y)) == 0) { + /* Nothing to check */ + return 0; + } SB_Init (&Src); SB_Init (&YSrc); SB_Init (&New); - if ((LRI->Flags & (LI_CHECK_ARG | LI_CHECK_Y)) != 0) { - if (E->AM == AM65_ACC || E->AM == AM65_BRA || E->AM == AM65_IMM || E->AM == AM65_IMP) { - return (LRI->Flags & LI_CHECK_Y) != 0 && (E->Chg & REG_Y) != 0; - } - CHECK ((LRI->Flags & LI_CHECK_ARG) == 0 || LRI->LoadIndex < 0 || LRI->LoadEntry != 0); - CHECK ((LRI->Flags & LI_CHECK_Y) == 0 || LRI->LoadYIndex < 0 || LRI->LoadYEntry != 0); + if (E->AM == AM65_ACC || E->AM == AM65_BRA || E->AM == AM65_IMM || E->AM == AM65_IMP) { + goto L_Result; + } + CHECK ((LRI->Flags & LI_CHECK_ARG) == 0 || LRI->LoadIndex < 0 || LRI->LoadEntry != 0); + CHECK ((LRI->Flags & (LI_CHECK_Y | LI_RELOAD_Y)) == 0 || LRI->LoadYIndex < 0 || LRI->LoadYEntry != 0); - if ((LRI->Flags & LI_CHECK_ARG) != 0) { - if (LRI->LoadEntry != 0) { - /* We ignore processor flags for loading args. - ** Further more, Reg A can't be used as the index. - */ - UseToCheck |= LRI->LoadEntry->Use & ~REG_A & REG_ALL; - SB_InitFromString (&Src, xstrdup (LRI->LoadEntry->Arg)); - if (!ParseOpcArgStr (LRI->LoadEntry->Arg, &Src, &SrcOff)) { - /* Bail out and play it safe*/ - goto L_Affected; - } - ZI = GetZPInfo (SB_GetConstBuf (&Src)); - if (ZI != 0) { - UseToCheck |= ZI->ByteUse; - } - } else { - /* We don't know what regs could have been used for the src. - ** So we just assume all. - */ - UseToCheck |= ~REG_A & REG_ALL; + if ((LRI->Flags & LI_CHECK_ARG) != 0) { + AE = LRI->LoadEntry; + if (AE != 0) { + /* We ignore processor flags for loading args. + ** Further more, Reg A can't be used as the index. + */ + UseToCheck |= AE->Use & ~REG_A & REG_ALL; + ChgToCheck |= AE->Chg & ~REG_A & REG_ALL; + + SB_InitFromString (&Src, xstrdup (AE->Arg)); + if (!ParseOpcArgStr (AE->Arg, &Src, &SrcOff)) { + /* Bail out and play it safe*/ + Res |= LI_SRC_USE | LI_SRC_CHG; + goto L_Result; } - } - - if ((LRI->Flags & LI_CHECK_Y) != 0) { - if (LRI->LoadYEntry != 0) { - UseToCheck |= LRI->LoadYEntry->Use; - SB_InitFromString (&YSrc, xstrdup (LRI->LoadYEntry->Arg)); - if (!ParseOpcArgStr (LRI->LoadYEntry->Arg, &YSrc, &YSrcOff)) { - /* Bail out and play it safe*/ - goto L_Affected; - } - ZI = GetZPInfo (SB_GetConstBuf (&YSrc)); - if (ZI != 0) { - UseToCheck |= ZI->ByteUse; - } - } else { - /* We don't know what regs could have been used by Y. - ** So we just assume all. - */ - UseToCheck |= ~REG_A & REG_ALL; + /* We have to manually set up the use/chg flags for builtin functions */ + ZI = GetZPInfo (SB_GetConstBuf (&Src)); + if (ZI != 0) { + UseToCheck |= ZI->ByteUse; + ChgToCheck |= ZI->ByteUse; } - } - - if (E->OPC == OP65_JSR) { - /* Try to know about the function */ - fncls = GetFuncInfo (E->Arg, &Use, &Chg); - if ((UseToCheck & Chg & REG_ALL) == 0 && - fncls == FNCLS_BUILTIN) { - /* Builtin functions are known to be harmless */ - goto L_NotAffected; - } - /* Otherwise play it safe */ - goto L_Affected; - } else { - if (E->OPC == OP65_DEC || E->OPC == OP65_INC || - E->OPC == OP65_ASL || E->OPC == OP65_LSR || - E->OPC == OP65_ROL || E->OPC == OP65_ROR || - E->OPC == OP65_TRB || E->OPC == OP65_TSB || - E->OPC == OP65_STA || E->OPC == OP65_STX || - E->OPC == OP65_STY || E->OPC == OP65_STZ) { - - SB_InitFromString (&New, xstrdup (E->Arg)); - if (!ParseOpcArgStr (E->Arg, &New, &NewOff)) { - /* Bail out and play it safe*/ - goto L_Affected; - } - - /* These opc may operate on memory locations */ - if ((E->AM == AM65_ABS || E->AM == AM65_ZP)) { - /* If we don't know what memory locations could have been used for the src, - ** we just assume all. - */ - if ((LRI->Flags & LI_CHECK_ARG) != 0) { - if (LRI->LoadEntry == 0 || - (LRI->LoadEntry->AM != AM65_ABS && - LRI->LoadEntry->AM != AM65_ZP && - (LRI->LoadEntry->AM != AM65_ZP_INDY || - SB_CompareStr (&Src, "sp") != 0)) || - (SB_Compare (&Src, &New) == 0 && - SrcOff == NewOff)) { - goto L_Affected; - } - } - - /* If we don't know what memory location could have been used by Y, - ** we just assume all. - */ - if ((LRI->Flags & LI_CHECK_Y) != 0) { - if (LRI->LoadYEntry == 0 || - (LRI->LoadYEntry->AM != AM65_ABS && - LRI->LoadYEntry->AM != AM65_ZP) || - (SB_Compare (&YSrc, &New) == 0 && - YSrcOff == NewOff)) { - goto L_Affected; - } - } - - /* Not affected */ - goto L_NotAffected; - - } else if (E->AM == AM65_ZP_INDY && SB_CompareStr (&New, "sp") == 0) { - if ((LRI->Flags & LI_CHECK_ARG) != 0) { - if (LRI->LoadEntry == 0 || - (LRI->LoadEntry->AM != AM65_ABS && - LRI->LoadEntry->AM != AM65_ZP && - (LRI->LoadEntry->AM != AM65_ZP_INDY || - SB_Compare (&Src, &New) == 0) && - SrcOff == NewOff)) { - goto L_Affected; - } - } - - /* Not affected */ - goto L_NotAffected; - } - /* We could've check further for more cases where the load target isn't modified, - ** But for now let's save the trouble and just play it safe. */ - goto L_Affected; - } + /* We don't know what regs could have been used for the src. + ** So we just assume all. + */ + UseToCheck |= ~REG_A & REG_ALL; + ChgToCheck |= ~REG_A & REG_ALL; } } -L_NotAffected: - SB_Done (&Src); - SB_Done (&YSrc); - SB_Done (&New); - return 0; + if ((LRI->Flags & LI_CHECK_Y) != 0) { + YE = LRI->LoadYEntry; + if (YE != 0) { + UseToCheck |= YE->Use; + SB_InitFromString (&YSrc, xstrdup (YE->Arg)); + if (!ParseOpcArgStr (YE->Arg, &YSrc, &YSrcOff)) { + /* Bail out and play it safe*/ + Res |= LI_SRC_USE | LI_SRC_CHG; + goto L_Result; + } + /* We have to manually set up the use/chg flags for builtin functions */ + ZI = GetZPInfo (SB_GetConstBuf (&YSrc)); + if (ZI != 0) { + UseToCheck |= ZI->ByteUse; + ChgToCheck |= ZI->ByteUse; + } + } else { + /* We don't know what regs could have been used by Y. + ** So we just assume all. + */ + UseToCheck |= ~REG_A & REG_ALL; + ChgToCheck |= ~REG_A & REG_ALL; + } + } + + if (E->OPC == OP65_JSR) { + /* Try to know about the function */ + fncls = GetFuncInfo (E->Arg, &Use, &Chg); + if (fncls == FNCLS_BUILTIN) { + /* Builtin functions are usually harmless */ + if ((ChgToCheck & Use & REG_ALL) != 0) { + Res |= LI_SRC_USE; + } + if ((UseToCheck & Chg & REG_ALL) != 0) { + Res |= LI_SRC_CHG; + } + goto L_Result; + } + /* Otherwise play it safe */ + Res |= LI_SRC_USE | LI_SRC_CHG; + goto L_Result; + + } else { + if ((E->Info & (OF_READ | OF_WRITE)) != 0) { + + SB_InitFromString (&New, xstrdup (E->Arg)); + if (!ParseOpcArgStr (E->Arg, &New, &NewOff)) { + /* Bail out and play it safe*/ + goto L_Affected; + } + + /* These opc may operate on memory locations. In some cases we can + ** be sure that the src is unaffected as E doesn't overlap with it. + ** However, if we don't know what memory locations could have been + ** used for the src, we just assume all. + */ + if (E->AM == AM65_ABS || + E->AM == AM65_ZP || + (E->AM == AM65_ZP_INDY && SB_CompareStr (&New, "sp") == 0) + ) { + if ((LRI->Flags & LI_CHECK_ARG) != 0) { + if (AE == 0 || + (AE->AM != AM65_ABS && + AE->AM != AM65_ZP && + (AE->AM != AM65_ZP_INDY || + SB_CompareStr (&Src, "sp") != 0)) || + (SrcOff == NewOff && + SB_Compare (&Src, &New) == 0)) { + + if ((E->Info & OF_READ) != 0) { + /* Used */ + Res |= LI_SRC_USE; + } + if ((E->Info & OF_WRITE) != 0) { + /* Changed */ + Res |= LI_SRC_CHG; + } + } + } + + if ((LRI->Flags & LI_CHECK_Y) != 0) { + /* If we don't know what memory location could have been used by Y, + ** we just assume all. */ + if (YE == 0 || + (YSrcOff == NewOff && SB_Compare (&YSrc, &New) == 0)) { + + if ((E->Info & OF_READ) != 0) { + /* Used */ + Res |= LI_Y_SRC_USE; + } + if ((E->Info & OF_WRITE) != 0) { + /* Changed */ + Res |= LI_Y_SRC_CHG; + } + } + } + + /* Otherwise unaffected */ + goto L_Result; + } + /* We could've check further for more cases where the load target isn't + ** modified, but for now let's save the trouble and just play it safe. + */ + goto L_Affected; + } + } L_Affected: + if ((E->Info & OF_READ) != 0) { + /* Used */ + Res |= LI_SRC_USE; + if ((LRI->Flags & LI_CHECK_Y) != 0) { + Res |= LI_Y_SRC_USE; + } + } + if ((E->Info & OF_WRITE) != 0) { + /* Changed */ + Res |= LI_SRC_CHG; + if ((LRI->Flags & LI_CHECK_Y) != 0) { + Res |= LI_Y_SRC_CHG; + } + } + +L_Result: + if ((LRI->Flags & LI_RELOAD_Y) != 0 && + (E->Use & REG_Y) != 0) { + Res |= LI_Y_USE; + } + if ((LRI->Flags & LI_CHECK_Y) != 0 && + (E->Chg & REG_Y) != 0) { + Res |= LI_Y_CHG; + } SB_Done (&Src); SB_Done (&YSrc); SB_Done (&New); - return 1; + + return Res; } @@ -388,15 +432,17 @@ static void HonourUseAndChg (LoadRegInfo* LRI, unsigned Reg, const CodeEntry* E, ClearLoadRegInfo (LRI); LRI->ChgIndex = I; LRI->Flags = 0; - } else if (Affected (LRI, E)) { - LRI->Flags |= LI_SRC_CHG; + } else { + LRI->Flags |= Affected (LRI, E); } } void PrepairLoadRegInfoForArgCheck (CodeSeg* S, LoadRegInfo* LRI, CodeEntry* E) -/* Set the load src flags and remember to check for load src change if necessary */ +/* Set the load src flags and remember to check for load src change if necessary. +** Note: this doesn't assume reloading Y. +*/ { if (E->AM == AM65_IMM) { /* These insns are all ok and replaceable */ @@ -448,15 +494,9 @@ void PrepairLoadRegInfoForArgCheck (CodeSeg* S, LoadRegInfo* LRI, CodeEntry* E) void SetIfOperandSrcAffected (LoadInfo* LLI, CodeEntry* E) /* Check and flag operand src that may be affected */ { - if (Affected (&LLI->A, E)) { - LLI->A.Flags |= LI_SRC_CHG; - } - if (Affected (&LLI->X, E)) { - LLI->X.Flags |= LI_SRC_CHG; - } - if (Affected (&LLI->Y, E)) { - LLI->Y.Flags |= LI_SRC_CHG; - } + LLI->A.Flags |= Affected (&LLI->A, E); + LLI->X.Flags |= Affected (&LLI->X, E); + LLI->Y.Flags |= Affected (&LLI->Y, E); } @@ -2914,15 +2954,64 @@ unsigned GetRegUsageInOpenRange (CodeSeg* S, int First, int Last, unsigned* Use, +int IsArgSameInOpenRange (CodeSeg* S, int First, int Last, CodeEntry* E) +/* Check if the loading the opc arg gives the same result everywhere between (First, Last). +** The code block in the range must be basic without any jump backwards. +** Note: this always checks Y if any of the LI_CHECK_Y / LI_RELOAD_Y flags is set. +*/ +{ + LoadRegInfo LRI; + CodeEntry* X; + unsigned CheckedFlags = LI_SRC_CHG; + + CHECK (Last <= (int)CollCount (&S->Entries)); + + /* TODO: We'll currently give up finding the src of Y */ + ClearLoadRegInfo (&LRI); + PrepairLoadRegInfoForArgCheck (S, &LRI, E); + + /* TODO: We don't currently check for all cases */ + if ((LRI.Flags & (LI_DIRECT | LI_CHECK_ARG | LI_CHECK_Y | LI_RELOAD_Y)) == 0) { + /* Just bail out as if the src would change right away */ + return 0; + } + + /* If there's no need to check */ + if ((LRI.Flags & (LI_CHECK_ARG | LI_CHECK_Y | LI_RELOAD_Y)) == 0) { + return 1; + } + + /* This always checks Y */ + if ((LRI.Flags & (LI_CHECK_Y | LI_RELOAD_Y)) != 0) { + LRI.Flags |= LI_CHECK_Y; + LRI.Flags &= ~LI_RELOAD_Y; + CheckedFlags |= LI_Y_CHG; + } + + while (++First < Last) { + X = CS_GetEntry (S, First); + if ((Affected (&LRI, X) & CheckedFlags) != 0) { + return 0; + } + } + + /* No change found */ + return 1; +} + + + int FindArgFirstChangeInOpenRange (CodeSeg* S, int First, int Last, CodeEntry* E) /* Find the first possible spot where the loaded arg of E might be changed in ** the range (First, Last). The code block in the range must be basic without ** any jump backwards. ** Return the index of the found entry, or Last if not found. +** Note: changes of Y are always ignored even if the LI_RELOAD_Y flag is not set. */ { LoadRegInfo LRI; CodeEntry* X; + unsigned CheckedFlags = LI_SRC_CHG; CHECK (Last <= (int)CollCount (&S->Entries)); @@ -2943,7 +3032,7 @@ int FindArgFirstChangeInOpenRange (CodeSeg* S, int First, int Last, CodeEntry* E while (++First < Last) { X = CS_GetEntry (S, First); - if (Affected (&LRI, X)) { + if ((Affected (&LRI, X) & CheckedFlags) != 0) { return First; } } @@ -2954,6 +3043,65 @@ int FindArgFirstChangeInOpenRange (CodeSeg* S, int First, int Last, CodeEntry* E +int FindArgLastUsageInOpenRange (CodeSeg* S, int First, int Last, CodeEntry* E, int ReloadY) +/* Find the last index where the arg of E might be used or changed in the range (First, Last). +** ReloadY indicates whether Y is supposed to be reloaded. +** The code block in the range must be basic without any jump backwards. +** Return the index of the found entry, or -1 if not found. +*/ +{ + LoadRegInfo LRI; + CodeEntry* X; + unsigned CheckedFlags = LI_SRC_USE | LI_SRC_CHG; + int Found = -1; + + CHECK (Last <= (int)CollCount (&S->Entries)); + + /* TODO: We'll currently give up finding the src of Y */ + ClearLoadRegInfo (&LRI); + PrepairLoadRegInfoForArgCheck (S, &LRI, E); + + /* Whether Y is to be reloaded */ + if (ReloadY) { + /* Always reload Y */ + if ((LRI.Flags & LI_CHECK_Y) != 0) { + LRI.Flags |= LI_RELOAD_Y; + } + } else if ((LRI.Flags & LI_RELOAD_Y) != 0) { + /* Always check Y */ + LRI.Flags |= LI_CHECK_Y; + LRI.Flags &= ~LI_RELOAD_Y; + } + + /* TODO: We don't currently check for all cases */ + if ((LRI.Flags & (LI_DIRECT | LI_CHECK_ARG | LI_CHECK_Y | LI_RELOAD_Y)) == 0) { + /* Just bail out as if the src would change right away */ + return 0; + } + + if ((LRI.Flags & LI_CHECK_Y) != 0) { + CheckedFlags |= LI_Y_SRC_USE | LI_Y_SRC_CHG; + } + + if ((LRI.Flags & LI_RELOAD_Y) != 0) { + CheckedFlags |= LI_Y_USE; + } else if ((LRI.Flags & LI_CHECK_Y) != 0) { + CheckedFlags |= LI_Y_CHG; + } + + while (++First < Last) { + X = CS_GetEntry (S, First); + if ((Affected (&LRI, X) & CheckedFlags) != 0) { + Found = First; + } + } + + /* Result */ + return Found; +} + + + int FindRegFirstChangeInOpenRange (CodeSeg* S, int First, int Last, unsigned what) /* Find the first possible spot where the queried ZPs, registers and/or processor ** states might be changed in the range (First, Last). The code block in the diff --git a/src/cc65/codeoptutil.h b/src/cc65/codeoptutil.h index bb5158f1b..c3596acd4 100644 --- a/src/cc65/codeoptutil.h +++ b/src/cc65/codeoptutil.h @@ -58,13 +58,18 @@ typedef enum { LI_REMOVE = 0x04, /* Load may be removed */ LI_DONT_REMOVE = 0x08, /* Load may not be removed */ LI_CHECK_ARG = 0x10, /* Load src might be modified later */ - LI_SRC_CHG = 0x20, /* Load src is possibly modified */ - LI_LOAD_INSN = 0x40, /* Has a load insn */ - LI_CHECK_Y = 0x80, /* Indexed load src might be modified later */ - LI_USED_BY_A = 0x100, /* Content used by RegA */ - LI_USED_BY_X = 0x200, /* Content used by RegX */ - LI_USED_BY_Y = 0x400, /* Content used by RegY */ - LI_SP = 0x800, /* Content on stack */ + LI_CHECK_Y = 0x20, /* Indexed load src might be modified later */ + LI_SRC_USE = 0x40, /* src of Opc argument is possibly used */ + LI_SRC_CHG = 0x80, /* src of Opc argument is possibly modified */ + LI_Y_SRC_USE = 0x0100, /* src of Opc addressing Y is possibly used */ + LI_Y_SRC_CHG = 0x0200, /* src of Opc addressing Y is possibly modified */ + LI_Y_USE = 0x0400, /* Opc addressing Y is possibly used */ + LI_Y_CHG = 0x0800, /* Opc addressing Y is possibly modified */ + LI_USED_BY_A = 0x1000, /* Content used by RegA */ + LI_USED_BY_X = 0x2000, /* Content used by RegX */ + LI_USED_BY_Y = 0x4000, /* Content used by RegY */ + LI_SP = 0x8000, /* Content on stack */ + LI_LOAD_INSN = 0x010000, /* Is a load insn */ } LI_FLAGS; /* Structure that tells us how to load the lhs values */ @@ -410,11 +415,25 @@ unsigned GetRegUsageInOpenRange (CodeSeg* S, int First, int Last, unsigned* Use, ** The code block must be basic without any jump backwards. */ +int IsArgSameInOpenRange (CodeSeg* S, int First, int Last, CodeEntry* E); +/* Check if the loading the opc arg gives the same result everywhere between (First, Last). +** The code block in the range must be basic without any jump backwards. +** Note: this always checks Y if any of the LI_CHECK_Y / LI_RELOAD_Y flags is set. +*/ + int FindArgFirstChangeInOpenRange (CodeSeg* S, int First, int Last, CodeEntry* E); /* Find the first possible spot where the loaded arg of E might be changed in ** the range (First, Last). The code block in the range must be basic without ** any jump backwards. ** Return the index of the found entry, or Last if not found. +** Note: changes of Y are always ignored even if the LI_RELOAD_Y flag is not set. +*/ + +int FindArgLastUsageInOpenRange (CodeSeg* S, int First, int Last, CodeEntry* E, int ReloadY); +/* Find the last index where the arg of E might be used or changed in the range (First, Last). +** ReloadY indicates whether Y is supposed to be reloaded. +** The code block in the range must be basic without any jump backwards. +** Return the index of the found entry, or -1 if not found. */ int FindRegFirstChangeInOpenRange (CodeSeg* S, int First, int Last, unsigned what); From 688342e194367cee9864b5772825063c9decd236 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 16 Apr 2020 17:17:53 +0800 Subject: [PATCH 0537/2710] Now every code entry has its argument parsed to tell some info. It fixes the compiling performance regression as well. Built-in ZPs are recognized. --- src/cc65/codeent.c | 330 +++++++++++++++++++++++++++++++---------- src/cc65/codeent.h | 45 +++++- src/cc65/codelab.c | 8 +- src/cc65/codeoptutil.c | 45 +++--- 4 files changed, 319 insertions(+), 109 deletions(-) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index aa3a960df..2ffe4e685 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -33,6 +33,8 @@ +#include <errno.h> +#include <limits.h> #include <stdlib.h> /* common */ @@ -43,11 +45,13 @@ #include "xsprintf.h" /* cc65 */ +#include "asmlabel.h" #include "codeent.h" #include "codeinfo.h" +#include "codelab.h" #include "error.h" #include "global.h" -#include "codelab.h" +#include "ident.h" #include "opcodes.h" #include "output.h" #include "reginfo.h" @@ -95,42 +99,11 @@ static char* GetArgCopy (const char* Arg) -static int NumArg (const char* Arg, unsigned long* Num) -/* If the given argument is numerical, convert it and return true. Otherwise -** set Num to zero and return false. -*/ +static void FreeParsedArg (char* ArgBase) +/* Free a code entry parsed argument */ { - char* End; - unsigned long Val; - - /* Determine the base */ - int Base = 10; - if (*Arg == '$') { - ++Arg; - Base = 16; - } else if (*Arg == '%') { - ++Arg; - Base = 2; - } - - /* Convert the value. strtol is not exactly what we want here, but it's - ** cheap and may be replaced by something fancier later. - */ - Val = strtoul (Arg, &End, Base); - - /* Check if the conversion was successful */ - if (*End != '\0') { - - /* Could not convert */ - *Num = 0; - return 0; - - } else { - - /* Conversion ok */ - *Num = Val; - return 1; - + if (ArgBase != 0 && ArgBase != EmptyArg) { + xfree (ArgBase); } } @@ -356,7 +329,7 @@ static void SetUseChgInfo (CodeEntry* E, const OPCDesc* D) -int ParseOpcArgStr (const char* Arg, struct StrBuf* Name, int* Offset) +int ParseOpcArgStr (const char* Arg, unsigned short* ArgInfo, struct StrBuf* Name, long* Offset) /* Break the opcode argument string into a symbol name/label part plus an offset. ** Both parts are optional, but if there are any characters in the string that ** can't be parsed, it's an failure. @@ -364,10 +337,18 @@ int ParseOpcArgStr (const char* Arg, struct StrBuf* Name, int* Offset) ** Return whether parsing succeeds or not. */ { - int NewOff = 0; - const char* OffsetPart = 0; - const char* NameEnd = 0; - int Negative = 0; + unsigned short Flags = 0; + const char* OffsetPart = 0; + const char* NameEnd = 0; + int Negative = 0; + unsigned long NumVal = 0; + long long AccOffset = 0; + char* End; /* Used for checking errors */ + + if (ArgInfo != 0) { + *ArgInfo = 0; + } + *Offset = 0; /* A numeric address is treated as an unnamed address with the numeric part as the offset */ if (IsDigit (Arg[0]) || Arg[0] == '$') { @@ -381,8 +362,9 @@ int ParseOpcArgStr (const char* Arg, struct StrBuf* Name, int* Offset) ** symbol. */ if (Arg[0] == '_') { - /* Skip the underscore */ - ++Arg; + Flags |= AIF_EXTERNAL; + } else { + Flags |= AIF_BUILTIN; } /* Rip off the offset if present. */ @@ -390,6 +372,7 @@ int ParseOpcArgStr (const char* Arg, struct StrBuf* Name, int* Offset) if (OffsetPart == 0) { OffsetPart = strchr (Arg, '-'); } + if (OffsetPart != 0) { /* Get the real arg name */ NameEnd = strchr (Arg, ' '); @@ -401,21 +384,43 @@ int ParseOpcArgStr (const char* Arg, struct StrBuf* Name, int* Offset) } else { /* No offset */ - *Offset = 0; - SB_CopyStr (Name, Arg); SB_Terminate (Name); + } - return 1; + if ((Flags & AIF_EXTERNAL) == 0) { + if (SB_GetLen (Name) > 0) { + Flags |= AIF_HAS_NAME; + + /* See if the name is a local label */ + if (IsLocalLabelName (SB_GetConstBuf (Name))) { + Flags |= AIF_LOCAL; + } + } + + } else { + if (SB_GetLen (Name) <= 0) { + /* Invalid external name */ + Flags &= ~AIF_EXTERNAL; + *Offset = 0; + if (ArgInfo != 0) { + *ArgInfo = Flags | AIF_FAILURE; + } + return 0; + } + Flags |= AIF_HAS_NAME; } } - *Offset = 0; - /* Get the offset */ while (OffsetPart != 0 && OffsetPart[0] != '\0') { + /* Skip spaces */ + while (OffsetPart[0] == ' ') { + ++OffsetPart; + } + + Negative = 0; if (OffsetPart[0] == '+') { - Negative = 0; ++OffsetPart; } else if (OffsetPart[0] == '-') { Negative = 1; @@ -427,22 +432,50 @@ int ParseOpcArgStr (const char* Arg, struct StrBuf* Name, int* Offset) ++OffsetPart; } + /* Determine the base and convert the value. strtol/strtoul is not + ** exactly what we want here, but it's cheap and may be replaced by + ** something fancier later. + */ if (OffsetPart[0] == '$') { - if (sscanf (OffsetPart + 1, "%X", &NewOff) != 1) { - return 0; - } + /* Base 16 hexedemical */ + NumVal = strtoul (OffsetPart+1, &End, 16); + } else if (OffsetPart[0] != '%') { + /* Base 10 decimal */ + NumVal = strtoul (OffsetPart, &End, 10); } else { - if (sscanf (OffsetPart, "%u", &NewOff) != 1) { - return 0; - } + /* Base 2 binary */ + NumVal = strtoul (OffsetPart+1, &End, 2); } + /* Check if the conversion was successful */ + if (*End != '\0' && *End != ' ' && *End != '+' && *End != '-') { + /* Could not convert */ + *Offset = 0; + if (ArgInfo != 0) { + *ArgInfo = Flags | AIF_FAILURE; + } + return 0; + } + + /* Check for out of range result */ + if (NumVal == ULONG_MAX && errno == ERANGE) { + /* Could not convert */ + *Offset = 0; + if (ArgInfo != 0) { + *ArgInfo = Flags | AIF_FAILURE; + } + return 0; + } + + /* This argument does have an offset */ + Flags |= AIF_HAS_OFFSET; + if (Negative) { - NewOff = -NewOff; + AccOffset -= (long long)NumVal; + } else { + AccOffset += (long long)NumVal; } - *Offset += NewOff; - /* See if there are more */ Arg = OffsetPart; OffsetPart = strchr (Arg, '+'); @@ -451,6 +484,19 @@ int ParseOpcArgStr (const char* Arg, struct StrBuf* Name, int* Offset) } } + if (AccOffset > LONG_MAX || AccOffset < LONG_MIN) { + /* Could not convert */ + *Offset = 0; + if (ArgInfo != 0) { + *ArgInfo = Flags | AIF_FAILURE; + } + return 0; + } + *Offset = (long)AccOffset; + if (ArgInfo != 0) { + *ArgInfo = Flags & ~AIF_FAILURE; + } + return 1; } @@ -471,6 +517,35 @@ const char* MakeHexArg (unsigned Num) +void PreparseArg (CodeEntry* E) +/* Parse the argument string and memorize the result for the code entry */ +{ + StrBuf B; + SB_InitFromString (&B, xmalloc (strlen (E->Arg) + 1)); + + /* Parse the argument string */ + if (ParseOpcArgStr (E->Arg, &E->ArgInfo, &B, &E->ArgOff)) { + E->ArgBase = SB_GetBuf (&B); + + if ((E->ArgInfo & (AIF_HAS_NAME | AIF_HAS_OFFSET)) == AIF_HAS_OFFSET) { + E->Flags |= CEF_NUMARG; + + /* Use the new numerical value */ + E->Num = E->ArgOff; + } + + } else { + /* Parsing fails. Issue an error/warning so that this could be spotted and fixed. */ + E->ArgBase = EmptyArg; + SB_Done (&B); + if (Debug) { + Warning ("Parsing argument \"%s\" failed!", E->Arg); + } + } +} + + + CodeEntry* NewCodeEntry (opc_t OPC, am_t AM, const char* Arg, CodeLabel* JumpTo, LineInfo* LI) /* Create a new code entry, initialize and return it */ @@ -482,15 +557,24 @@ CodeEntry* NewCodeEntry (opc_t OPC, am_t AM, const char* Arg, CodeEntry* E = xmalloc (sizeof (CodeEntry)); /* Initialize the fields */ - E->OPC = D->OPC; - E->AM = AM; - E->Size = GetInsnSize (E->OPC, E->AM); - E->Arg = GetArgCopy (Arg); - E->Flags = NumArg (E->Arg, &E->Num)? CEF_NUMARG : 0; /* Needs E->Arg */ - E->Info = D->Info; - E->JumpTo = JumpTo; - E->LI = UseLineInfo (LI); - E->RI = 0; + E->OPC = D->OPC; + E->AM = AM; + E->Size = GetInsnSize (E->OPC, E->AM); + E->Arg = GetArgCopy (Arg); + E->Flags = 0; + E->Info = D->Info; + E->ArgInfo = 0; + E->JumpTo = JumpTo; + E->LI = UseLineInfo (LI); + E->RI = 0; + + /* Parse the argument string if it's given */ + if (Arg == 0 || Arg[0] == '\0') { + E->ArgBase = EmptyArg; + } else { + PreparseArg (E); + } + SetUseChgInfo (E, D); InitCollection (&E->Labels); @@ -508,6 +592,9 @@ CodeEntry* NewCodeEntry (opc_t OPC, am_t AM, const char* Arg, void FreeCodeEntry (CodeEntry* E) /* Free the given code entry */ { + /* Free the argument base string if we have one */ + FreeParsedArg (E->ArgBase); + /* Free the string argument if we have one */ FreeArg (E->Arg); @@ -572,9 +659,8 @@ void CE_ClearJumpTo (CodeEntry* E) /* Clear the JumpTo entry */ E->JumpTo = 0; - /* Clear the argument and assign the empty one */ - FreeArg (E->Arg); - E->Arg = EmptyArg; + /* Clear the argument */ + CE_SetArg (E, 0); } @@ -593,17 +679,84 @@ void CE_MoveLabel (CodeLabel* L, CodeEntry* E) void CE_SetArg (CodeEntry* E, const char* Arg) -/* Replace the argument by the new one. */ +/* Replace the whole argument by the new one. */ { + /* Free the old parsed argument base */ + FreeParsedArg (E->ArgBase); + /* Free the old argument */ FreeArg (E->Arg); /* Assign the new one */ E->Arg = GetArgCopy (Arg); + /* Parse the new argument string */ + PreparseArg (E); + /* Update the Use and Chg in E */ - const OPCDesc* D = GetOPCDesc (E->OPC); - SetUseChgInfo (E, D); + SetUseChgInfo (E, GetOPCDesc (E->OPC)); +} + + + +void CE_SetArgBaseAndOff (CodeEntry* E, const char* ArgBase, long ArgOff) +/* Replace the new argument base and offset. Argument base is always applied. +** Argument offset is applied if and only if E has the AIF_HAS_OFFSET flag set. +*/ +{ + if (ArgBase != 0 && ArgBase[0] != '\0') { + + /* The argument base is not blank */ + char Buf[IDENTSIZE + 16]; + char* Str = Buf; + size_t Len = strlen (ArgBase) + 16; + if (Len >= sizeof (Buf)) { + Str = xmalloc (Len); + } + + if (CE_HasArgOffset (E)) { + sprintf (Str, "%s%+ld", ArgBase, ArgOff); + } else { + sprintf (Str, "%s", ArgBase); + } + CE_SetArg (E, Str); + + if (Str != Buf) { + xfree (Str); + } + + } else { + /* The argument has no base */ + if ((E->ArgInfo & AIF_HAS_OFFSET) != 0) { + /* This is a numeric argument */ + E->Flags |= CEF_NUMARG; + CE_SetNumArg (E, ArgOff); + } else { + /* Empty argument */ + CE_SetArg (E, EmptyArg); + } + } +} + + + +void CE_SetArgBase (CodeEntry* E, const char* ArgBase) +/* Replace the argument base by the new one. +** The entry must have an existing base. +*/ +{ + /* Check that the entry has a base name */ + CHECK (CE_HasArgBase (E)); + + CE_SetArgBaseAndOff (E, ArgBase, E->ArgOff); +} + + + +void CE_SetArgOffset (CodeEntry* E, long ArgOff) +/* Replace the argument offset by the new one */ +{ + CE_SetArgBaseAndOff (E, E->ArgBase, ArgOff); } @@ -616,24 +769,45 @@ void CE_SetNumArg (CodeEntry* E, long Num) char Buf[16]; /* Check that the entry has a numerical argument */ - CHECK (E->Flags & CEF_NUMARG); + CHECK (CE_HasNumArg (E)); /* Make the new argument string */ if (E->Size == 2) { Num &= 0xFF; xsprintf (Buf, sizeof (Buf), "$%02X", (unsigned) Num); - } else if (E->Size == 3) { + } else if (E->Size == 3 || E->Size == 5) { Num &= 0xFFFF; xsprintf (Buf, sizeof (Buf), "$%04X", (unsigned) Num); } else { Internal ("Invalid instruction size in CE_SetNumArg"); } - /* Replace the argument by the new one */ + /* Replace the whole argument by the new one */ CE_SetArg (E, Buf); +} - /* Use the new numerical value */ - E->Num = Num; + + +int CE_IsArgStrParsed (const CodeEntry* E) +/* Return true if the argument of E was successfully parsed last time */ +{ + return (E->ArgInfo & AIF_FAILURE) == 0; +} + + + +int CE_HasArgBase (const CodeEntry* E) +/* Return true if the argument of E has a non-blank base name */ +{ + return (E->ArgInfo & AIF_HAS_NAME) != 0 && E->ArgBase[0] != '\0'; +} + + + +int CE_HasArgOffset (const CodeEntry* E) +/* Return true if the argument of E has a non-zero offset */ +{ + return (E->ArgInfo & AIF_HAS_OFFSET) != 0 && E->ArgOff != 0; } diff --git a/src/cc65/codeent.h b/src/cc65/codeent.h index 57a7677bb..173118a7f 100644 --- a/src/cc65/codeent.h +++ b/src/cc65/codeent.h @@ -73,14 +73,32 @@ struct CodeEntry { char* Arg; /* Argument as string */ unsigned long Num; /* Numeric argument */ unsigned short Info; /* Additional code info */ + unsigned short ArgInfo; /* Additional argument info */ unsigned int Use; /* Registers used */ unsigned int Chg; /* Registers changed/destroyed */ CodeLabel* JumpTo; /* Jump label */ Collection Labels; /* Labels for this instruction */ LineInfo* LI; /* Source line info for this insn */ RegInfo* RI; /* Register info for this insn */ + char* ArgBase; /* Argument broken into a base and an offset, */ + long ArgOff; /* only done when requested. */ }; +/* */ +#define AIF_HAS_NAME 0x0001U /* Argument has a name part */ +#define AIF_HAS_OFFSET 0x0002U /* Argument has a numeric part */ +#define AIF_BUILTIN 0x0004U /* The name is built-in */ +#define AIF_EXTERNAL 0x0008U /* The name is external */ +#define AIF_LOCAL 0x0010U /* The name is a local label */ +#define AIF_ZP_NAME 0x0020U /* The name is a zp location */ +#define AIF_LOBYTE 0x0100U +#define AIF_HIBYTE 0x0200U +#define AIF_BANKBYTE 0x0400U +#define AIF_FAILURE 0x8000U /* Argument was not parsed successfully */ + +#define AIF_WORD (AIF_LOBYTE | AIF_HIBYTE) +#define AIF_FAR (AIF_LOBYTE | AIF_HIBYTE | AIF_BANKBYTE) + /*****************************************************************************/ @@ -89,7 +107,7 @@ struct CodeEntry { -int ParseOpcArgStr (const char* Arg, struct StrBuf* Name, int* Offset); +int ParseOpcArgStr (const char* Arg, unsigned short* ArgInfo, struct StrBuf* Name, long* Offset); /* Break the opcode argument string into a symbol name/label part plus an offset. ** Both parts are optional, but if there are any characters in the string that ** can't be parsed, it's an failure. @@ -105,6 +123,9 @@ const char* MakeHexArg (unsigned Num); ** safe). */ +void PreparseArg (CodeEntry* E); +/* Parse the argument string and memorize the result for the code entry */ + CodeEntry* NewCodeEntry (opc_t OPC, am_t AM, const char* Arg, CodeLabel* JumpTo, LineInfo* LI); /* Create a new code entry, initialize and return it */ @@ -205,11 +226,33 @@ INLINE int CE_HasNumArg (const CodeEntry* E) void CE_SetArg (CodeEntry* E, const char* Arg); /* Replace the argument by the new one. */ +void CE_SetArgBaseAndOff (CodeEntry* E, const char* ArgBase, long ArgOff); +/* Replace the new argument base and offset. Argument base is always applied. +** Argument offset is applied if and only if E has the AIF_HAS_OFFSET flag set. +*/ + +void CE_SetArgBase (CodeEntry* E, const char* ArgBase); +/* Replace the argument base by the new one. +** The entry must have an existing base. +*/ + +void CE_SetArgOffset (CodeEntry* E, long ArgOff); +/* Replace the argument offset by the new one */ + void CE_SetNumArg (CodeEntry* E, long Num); /* Set a new numeric argument for the given code entry that must already ** have a numeric argument. */ +int CE_IsArgStrParsed (const CodeEntry* E); +/* Return true if the argument of E was successfully parsed last time */ + +int CE_HasArgBase (const CodeEntry* E); +/* Return true if the argument of E has a non-blank base name */ + +int CE_HasArgOffset (const CodeEntry* E); +/* Return true if the argument of E has a non-zero offset */ + int CE_IsConstImm (const CodeEntry* E); /* Return true if the argument of E is a constant immediate value */ diff --git a/src/cc65/codelab.c b/src/cc65/codelab.c index ff26645dc..0909702fd 100644 --- a/src/cc65/codelab.c +++ b/src/cc65/codelab.c @@ -90,8 +90,12 @@ void CL_AddRef (CodeLabel* L, struct CodeEntry* E) /* The insn at E jumps to this label */ E->JumpTo = L; - /* Replace the code entry argument with the name of the new label */ - CE_SetArg (E, L->Name); + if (CE_HasArgBase (E)) { + /* Replace the code entry argument base with the name of the new label */ + CE_SetArgBase (E, L->Name); + } else { + CE_SetArgBaseAndOff (E, L->Name, 0); + } /* Remember that in the label */ CollAppend (&L->JumpFrom, E); diff --git a/src/cc65/codeoptutil.c b/src/cc65/codeoptutil.c index 503f33859..3df762eeb 100644 --- a/src/cc65/codeoptutil.c +++ b/src/cc65/codeoptutil.c @@ -231,8 +231,6 @@ static int Affected (LoadRegInfo* LRI, const CodeEntry* E) unsigned int Chg; unsigned int UseToCheck = 0; unsigned int ChgToCheck = 0; - StrBuf Src, YSrc, New; - int SrcOff = 0, YSrcOff = 0, NewOff = 0; const ZPInfo* ZI = 0; unsigned Res = 0; CodeEntry* AE = 0; @@ -243,10 +241,6 @@ static int Affected (LoadRegInfo* LRI, const CodeEntry* E) return 0; } - SB_Init (&Src); - SB_Init (&YSrc); - SB_Init (&New); - if (E->AM == AM65_ACC || E->AM == AM65_BRA || E->AM == AM65_IMM || E->AM == AM65_IMP) { goto L_Result; } @@ -262,14 +256,13 @@ static int Affected (LoadRegInfo* LRI, const CodeEntry* E) UseToCheck |= AE->Use & ~REG_A & REG_ALL; ChgToCheck |= AE->Chg & ~REG_A & REG_ALL; - SB_InitFromString (&Src, xstrdup (AE->Arg)); - if (!ParseOpcArgStr (AE->Arg, &Src, &SrcOff)) { + /* Check if the argument has been parsed successfully */ + if (!CE_IsArgStrParsed (AE)) { /* Bail out and play it safe*/ - Res |= LI_SRC_USE | LI_SRC_CHG; - goto L_Result; + goto L_Affected; } /* We have to manually set up the use/chg flags for builtin functions */ - ZI = GetZPInfo (SB_GetConstBuf (&Src)); + ZI = GetZPInfo (AE->ArgBase); if (ZI != 0) { UseToCheck |= ZI->ByteUse; ChgToCheck |= ZI->ByteUse; @@ -287,14 +280,14 @@ static int Affected (LoadRegInfo* LRI, const CodeEntry* E) YE = LRI->LoadYEntry; if (YE != 0) { UseToCheck |= YE->Use; - SB_InitFromString (&YSrc, xstrdup (YE->Arg)); - if (!ParseOpcArgStr (YE->Arg, &YSrc, &YSrcOff)) { + + /* Check if the argument has been parsed successfully */ + if (!CE_IsArgStrParsed (YE)) { /* Bail out and play it safe*/ - Res |= LI_SRC_USE | LI_SRC_CHG; - goto L_Result; + goto L_Affected; } /* We have to manually set up the use/chg flags for builtin functions */ - ZI = GetZPInfo (SB_GetConstBuf (&YSrc)); + ZI = GetZPInfo (YE->ArgBase); if (ZI != 0) { UseToCheck |= ZI->ByteUse; ChgToCheck |= ZI->ByteUse; @@ -322,14 +315,13 @@ static int Affected (LoadRegInfo* LRI, const CodeEntry* E) goto L_Result; } /* Otherwise play it safe */ - Res |= LI_SRC_USE | LI_SRC_CHG; - goto L_Result; + goto L_Affected; } else { if ((E->Info & (OF_READ | OF_WRITE)) != 0) { - SB_InitFromString (&New, xstrdup (E->Arg)); - if (!ParseOpcArgStr (E->Arg, &New, &NewOff)) { + /* Check if the argument has been parsed successfully */ + if (!CE_IsArgStrParsed (E)) { /* Bail out and play it safe*/ goto L_Affected; } @@ -341,16 +333,16 @@ static int Affected (LoadRegInfo* LRI, const CodeEntry* E) */ if (E->AM == AM65_ABS || E->AM == AM65_ZP || - (E->AM == AM65_ZP_INDY && SB_CompareStr (&New, "sp") == 0) + (E->AM == AM65_ZP_INDY && strcmp (E->ArgBase, "sp") == 0) ) { if ((LRI->Flags & LI_CHECK_ARG) != 0) { if (AE == 0 || (AE->AM != AM65_ABS && AE->AM != AM65_ZP && (AE->AM != AM65_ZP_INDY || - SB_CompareStr (&Src, "sp") != 0)) || - (SrcOff == NewOff && - SB_Compare (&Src, &New) == 0)) { + strcmp (AE->ArgBase, "sp") != 0)) || + (AE->ArgOff == E->ArgOff && + strcmp (AE->ArgBase, E->ArgBase) == 0)) { if ((E->Info & OF_READ) != 0) { /* Used */ @@ -367,7 +359,7 @@ static int Affected (LoadRegInfo* LRI, const CodeEntry* E) /* If we don't know what memory location could have been used by Y, ** we just assume all. */ if (YE == 0 || - (YSrcOff == NewOff && SB_Compare (&YSrc, &New) == 0)) { + (YE->ArgOff == E->ArgOff && strcmp (YE->ArgBase, E->ArgBase) == 0)) { if ((E->Info & OF_READ) != 0) { /* Used */ @@ -415,9 +407,6 @@ L_Result: (E->Chg & REG_Y) != 0) { Res |= LI_Y_CHG; } - SB_Done (&Src); - SB_Done (&YSrc); - SB_Done (&New); return Res; } From b525554bfee3c3ddc5ddd7e58b4a20728f6c9cb1 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 16 Apr 2020 17:19:17 +0800 Subject: [PATCH 0538/2710] Added support for parsing asm byte size expressions with a pair of parentheses. --- src/cc65/codeent.c | 99 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 93 insertions(+), 6 deletions(-) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 2ffe4e685..f3a910652 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -341,6 +341,7 @@ int ParseOpcArgStr (const char* Arg, unsigned short* ArgInfo, struct StrBuf* Nam const char* OffsetPart = 0; const char* NameEnd = 0; int Negative = 0; + int Parentheses = 0; unsigned long NumVal = 0; long long AccOffset = 0; char* End; /* Used for checking errors */ @@ -357,6 +358,49 @@ int ParseOpcArgStr (const char* Arg, unsigned short* ArgInfo, struct StrBuf* Nam SB_Terminate (Name); OffsetPart = Arg; } else { + /* <, >, ^ */ + if (Arg[0] == '<') { + Flags |= AIF_LOBYTE; + } else if (Arg[0] == '>') { + Flags |= AIF_HIBYTE; + } else if (Arg[0] == '^') { + Flags |= AIF_BANKBYTE; + } + + if ((Flags & (AIF_FAR)) != 0) { + /* Skip this char */ + ++Arg; + } + + /* Skip spaces */ + while (Arg[0] == ' ') { + ++Arg; + } + + /* Strip parentheses off if exist */ + if (Arg[0] == '(') { + /* Skip this char */ + ++Arg; + + End = strchr (Arg, ')'); + if (End == 0 || End[1] != '\0') { + /* Not closed at the end, bail out */ + *Offset = 0; + if (ArgInfo != 0) { + *ArgInfo = Flags | AIF_FAILURE; + } + return 0; + } + + /* Found */ + Parentheses = 1; + + /* Skip spaces */ + while (Arg[0] == ' ') { + ++Arg; + } + } + /* If the symbol name starts with an underline, it is an external symbol. ** If the symbol does not start with an underline, it may be a built-in ** symbol. @@ -384,7 +428,11 @@ int ParseOpcArgStr (const char* Arg, unsigned short* ArgInfo, struct StrBuf* Nam } else { /* No offset */ - SB_CopyStr (Name, Arg); + if (Parentheses == 0) { + SB_CopyStr (Name, Arg); + } else { + SB_CopyBuf (Name, Arg, End - Arg); + } SB_Terminate (Name); } @@ -410,10 +458,27 @@ int ParseOpcArgStr (const char* Arg, unsigned short* ArgInfo, struct StrBuf* Nam } Flags |= AIF_HAS_NAME; } + + /* A byte size expression with no parentheses but an offset is not + ** handled correctly for now, so just bail out in such cases. + */ + if ((Flags & AIF_FAR) != 0 && + Parentheses == 0 && + OffsetPart != 0 && + OffsetPart[0] != '\0') { + /* Bail out */ + *Offset = 0; + if (ArgInfo != 0) { + *ArgInfo = Flags | AIF_FAILURE; + } + return 0; + } } /* Get the offset */ - while (OffsetPart != 0 && OffsetPart[0] != '\0') { + while (OffsetPart != 0 && + OffsetPart[0] != '\0' && + OffsetPart[0] != ')') { /* Skip spaces */ while (OffsetPart[0] == ' ') { ++OffsetPart; @@ -448,7 +513,7 @@ int ParseOpcArgStr (const char* Arg, unsigned short* ArgInfo, struct StrBuf* Nam } /* Check if the conversion was successful */ - if (*End != '\0' && *End != ' ' && *End != '+' && *End != '-') { + if (*End != '\0' && *End != ' ' && *End != '+' && *End != '-' && *End != ')') { /* Could not convert */ *Offset = 0; if (ArgInfo != 0) { @@ -714,11 +779,33 @@ void CE_SetArgBaseAndOff (CodeEntry* E, const char* ArgBase, long ArgOff) Str = xmalloc (Len); } - if (CE_HasArgOffset (E)) { - sprintf (Str, "%s%+ld", ArgBase, ArgOff); + if ((E->ArgInfo & AIF_FAR) == 0) { + if (CE_HasArgOffset (E)) { + sprintf (Str, "%s%+ld", ArgBase, ArgOff); + } else { + sprintf (Str, "%s", ArgBase); + } + CE_SetArg (E, Str); } else { - sprintf (Str, "%s", ArgBase); + /* A byte expression */ + const char* Expr = ""; + if ((E->ArgInfo & AIF_FAR) == AIF_LOBYTE) { + Expr = "<"; + } else if ((E->ArgInfo & AIF_FAR) == AIF_HIBYTE) { + Expr = ">"; + } else if ((E->ArgInfo & AIF_FAR) == AIF_BANKBYTE) { + Expr = "^"; + } else { + Internal ("Invalid byte size flag in CE_SetArgBaseAndOff"); + } + + if (CE_HasArgOffset (E)) { + sprintf (Str, "%s(%s%+ld)", Expr, ArgBase, ArgOff); + } else { + sprintf (Str, "%s(%s)", Expr, ArgBase); + } } + CE_SetArg (E, Str); if (Str != Buf) { From eb87c6d3734a804f8cccb1a4bb4947ba5f998a8e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 29 Sep 2020 18:54:30 +0200 Subject: [PATCH 0539/2710] rename README to readme.txt --- samples/{README => readme.txt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename samples/{README => readme.txt} (100%) diff --git a/samples/README b/samples/readme.txt similarity index 100% rename from samples/README rename to samples/readme.txt From b549e83fb27faeddeb8910b7267ee7e5531cf0e9 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 29 Sep 2020 19:03:42 +0200 Subject: [PATCH 0540/2710] move program from testcode/assembler to test/asm and remove testcode/assembler --- test/asm/Makefile | 5 ++- {testcode/assembler => test/asm}/paramcount.s | 0 test/asm/{README => readme.txt} | 0 testcode/assembler/Makefile | 37 ------------------- 4 files changed, 4 insertions(+), 38 deletions(-) rename {testcode/assembler => test/asm}/paramcount.s (100%) rename test/asm/{README => readme.txt} (100%) delete mode 100644 testcode/assembler/Makefile diff --git a/test/asm/Makefile b/test/asm/Makefile index b157bb672..028254b68 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -38,7 +38,7 @@ CPUDETECT_REFS := $(wildcard *-cpudetect.ref) CPUDETECT_CPUS = $(foreach ref,$(CPUDETECT_REFS),$(ref:%-cpudetect.ref=%)) CPUDETECT_BINS = $(foreach cpu,$(CPUDETECT_CPUS),$(WORKDIR)/$(cpu)-cpudetect.bin) -all: $(OPCODE_BINS) $(CPUDETECT_BINS) +all: $(OPCODE_BINS) $(CPUDETECT_BINS) paramcount.o $(WORKDIR): $(call MKDIR,$(WORKDIR)) @@ -70,5 +70,8 @@ endef # CPUDETECT_template $(foreach cpu,$(CPUDETECT_CPUS),$(eval $(call CPUDETECT_template,$(cpu)))) +paramcount.o: paramcount.s + $(CA65) -o $(WORKDIR)/paramcount.o -l $(WORKDIR)/paramcount.lst paramcount.s + clean: @$(call RMDIR,$(WORKDIR)) diff --git a/testcode/assembler/paramcount.s b/test/asm/paramcount.s similarity index 100% rename from testcode/assembler/paramcount.s rename to test/asm/paramcount.s diff --git a/test/asm/README b/test/asm/readme.txt similarity index 100% rename from test/asm/README rename to test/asm/readme.txt diff --git a/testcode/assembler/Makefile b/testcode/assembler/Makefile deleted file mode 100644 index 6cb3fe1f2..000000000 --- a/testcode/assembler/Makefile +++ /dev/null @@ -1,37 +0,0 @@ - -# Just the usual way to find out if we're -# using cmd.exe to execute make rules. -ifneq ($(shell echo),) - CMD_EXE = 1 -endif - -ifdef CMD_EXE - NULLDEV = nul: - DEL = -del /f - RMDIR = rmdir /s /q -else - NULLDEV = /dev/null - DEL = $(RM) - RMDIR = $(RM) -r -endif - -ifdef CC65_HOME - AS = $(CC65_HOME)/bin/ca65 - CC = $(CC65_HOME)/bin/cc65 - CL = $(CC65_HOME)/bin/cl65 - LD = $(CC65_HOME)/bin/ld65 -else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) -endif - -all: paramcount.o - -paramcount.o: paramcount.s - $(AS) -o paramcount.o -l paramcount.lst paramcount.s - -clean: - $(RM) paramcount.o - $(RM) paramcount.lst From bbece736f5a1ad2a2f805a72f26cfb75125b9c97 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 29 Sep 2020 19:06:05 +0200 Subject: [PATCH 0541/2710] move testcode/disasm into samples/ instead --- {testcode => samples}/disasm/.gitignore | 0 {testcode => samples}/disasm/Makefile | 0 {testcode => samples}/disasm/bank0.da | 0 {testcode => samples}/disasm/bank1.da | 0 {testcode => samples}/disasm/fixed.da | 0 {testcode => samples}/disasm/image.cfg | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename {testcode => samples}/disasm/.gitignore (100%) rename {testcode => samples}/disasm/Makefile (100%) rename {testcode => samples}/disasm/bank0.da (100%) rename {testcode => samples}/disasm/bank1.da (100%) rename {testcode => samples}/disasm/fixed.da (100%) rename {testcode => samples}/disasm/image.cfg (100%) diff --git a/testcode/disasm/.gitignore b/samples/disasm/.gitignore similarity index 100% rename from testcode/disasm/.gitignore rename to samples/disasm/.gitignore diff --git a/testcode/disasm/Makefile b/samples/disasm/Makefile similarity index 100% rename from testcode/disasm/Makefile rename to samples/disasm/Makefile diff --git a/testcode/disasm/bank0.da b/samples/disasm/bank0.da similarity index 100% rename from testcode/disasm/bank0.da rename to samples/disasm/bank0.da diff --git a/testcode/disasm/bank1.da b/samples/disasm/bank1.da similarity index 100% rename from testcode/disasm/bank1.da rename to samples/disasm/bank1.da diff --git a/testcode/disasm/fixed.da b/samples/disasm/fixed.da similarity index 100% rename from testcode/disasm/fixed.da rename to samples/disasm/fixed.da diff --git a/testcode/disasm/image.cfg b/samples/disasm/image.cfg similarity index 100% rename from testcode/disasm/image.cfg rename to samples/disasm/image.cfg From 3d8e787e66d1e3b67bcac5cbdb0d869a71e3c214 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 29 Sep 2020 19:08:40 +0200 Subject: [PATCH 0542/2710] move testcode/grc to samples/geos --- {testcode => samples/geos}/grc/Makefile | 0 {testcode => samples/geos}/grc/test.grc | 0 {testcode => samples/geos}/grc/vlir.grc | 0 {testcode => samples/geos}/grc/vlir0.s | 0 {testcode => samples/geos}/grc/vlir1.s | 0 {testcode => samples/geos}/grc/vlir2.s | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename {testcode => samples/geos}/grc/Makefile (100%) rename {testcode => samples/geos}/grc/test.grc (100%) rename {testcode => samples/geos}/grc/vlir.grc (100%) rename {testcode => samples/geos}/grc/vlir0.s (100%) rename {testcode => samples/geos}/grc/vlir1.s (100%) rename {testcode => samples/geos}/grc/vlir2.s (100%) diff --git a/testcode/grc/Makefile b/samples/geos/grc/Makefile similarity index 100% rename from testcode/grc/Makefile rename to samples/geos/grc/Makefile diff --git a/testcode/grc/test.grc b/samples/geos/grc/test.grc similarity index 100% rename from testcode/grc/test.grc rename to samples/geos/grc/test.grc diff --git a/testcode/grc/vlir.grc b/samples/geos/grc/vlir.grc similarity index 100% rename from testcode/grc/vlir.grc rename to samples/geos/grc/vlir.grc diff --git a/testcode/grc/vlir0.s b/samples/geos/grc/vlir0.s similarity index 100% rename from testcode/grc/vlir0.s rename to samples/geos/grc/vlir0.s diff --git a/testcode/grc/vlir1.s b/samples/geos/grc/vlir1.s similarity index 100% rename from testcode/grc/vlir1.s rename to samples/geos/grc/vlir1.s diff --git a/testcode/grc/vlir2.s b/samples/geos/grc/vlir2.s similarity index 100% rename from testcode/grc/vlir2.s rename to samples/geos/grc/vlir2.s From dcee493e945a0154f73e1f3cb612026a82fcf1d9 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 29 Sep 2020 19:12:34 +0200 Subject: [PATCH 0543/2710] move remaining stuff from testcode/lib/ one level up to testcode/ --- testcode/{lib => }/Makefile | 0 testcode/{lib => }/accelerator/Makefile | 0 testcode/{lib => }/accelerator/c64-c128-scpu-test.c | 0 testcode/{lib => }/accelerator/c64-c128-test.c | 0 testcode/{lib => }/accelerator/c64dtv-test.c | 0 testcode/{lib => }/accelerator/c65-test.c | 0 testcode/{lib => }/accelerator/chameleon-test.c | 0 testcode/{lib => }/accelerator/turbo-test.c | 0 testcode/{lib => }/accelerator/turbomaster-test.c | 0 testcode/{lib => }/apple2/Makefile | 0 testcode/{lib => }/apple2/astronaut.hgr | Bin testcode/{lib => }/apple2/catface.dhgr | Bin testcode/{lib => }/apple2/chips.hgr | Bin testcode/{lib => }/apple2/dhgrshow.c | 0 testcode/{lib => }/apple2/gatsby.dhgr | Bin testcode/{lib => }/apple2/girl.dhgr | Bin testcode/{lib => }/apple2/hgrshow.c | 0 testcode/{lib => }/apple2/hgrtest.c | 0 testcode/{lib => }/apple2/macrometer.hgr | Bin testcode/{lib => }/apple2/mariner.hgr | Bin testcode/{lib => }/apple2/monarch.dhgr | Bin testcode/{lib => }/apple2/rose.hgr | Bin testcode/{lib => }/apple2/superman.dhgr | Bin testcode/{lib => }/apple2/venice.dhgr | Bin testcode/{lib => }/apple2/werner.hgr | Bin testcode/{lib => }/apple2/werner.s | 0 testcode/{lib => }/apple2/winston.hgr | Bin testcode/{lib => }/arg-test.c | 0 testcode/{lib => }/atari/Makefile | 0 testcode/{lib => }/atari/asm-xex.s | 0 testcode/{lib => }/atari/charmapping.c | 0 testcode/{lib => }/atari/defdev.c | 0 testcode/{lib => }/atari/displaylist.c | 0 testcode/{lib => }/atari/mem.c | 0 testcode/{lib => }/atari/multi-xex.cfg | 0 testcode/{lib => }/atari/multi-xex.s | 0 testcode/{lib => }/atari/ostype.c | 0 testcode/{lib => }/atari/scrcode.s | 0 testcode/{lib => }/atari/sys.c | 0 testcode/{lib => }/atari5200/Makefile | 0 testcode/{lib => }/atari5200/hello.c | 0 testcode/{lib => }/cbm/Makefile | 0 testcode/{lib => }/cbm/petscii.c | 0 testcode/{lib => }/clock-test.c | 0 testcode/{lib => }/clock.c | 0 testcode/{lib => }/conio.c | 0 testcode/{lib => }/cpeek-test.c | 0 testcode/{lib => }/cprintf.c | 0 testcode/{lib => }/cursor.c | 0 testcode/{lib => }/deb.c | 0 testcode/{lib => }/dir-test.c | 0 testcode/{lib => }/div-test.c | 0 testcode/{lib => }/em-test.c | 0 testcode/{lib => }/exec-test1.c | 0 testcode/{lib => }/exec-test2.c | 0 testcode/{lib => }/fileio-test.c | 0 testcode/{lib => }/ft.c | 0 testcode/{lib => }/gamate/Makefile | 0 testcode/{lib => }/gamate/audiotest.s | 0 testcode/{lib => }/gamate/cga2.chr | Bin testcode/{lib => }/gamate/ctest.c | 0 testcode/{lib => }/gamate/lcdtest.s | 0 testcode/{lib => }/gamate/nachtm.c | 0 testcode/{lib => }/getopt-test.c | 0 testcode/{lib => }/getsp.s | 0 testcode/{lib => }/heaptest.c | 0 testcode/{lib => }/joy-test.c | 0 testcode/lib/.gitignore | 2 -- testcode/{lib => }/moddiv-test.c | 0 testcode/{lib => }/mouse-test.c | 0 testcode/{lib => }/mul-test.c | 0 testcode/{lib => }/pce/Makefile | 0 testcode/{lib => }/pce/conio.c | 0 testcode/{lib => }/posixio-test.c | 0 testcode/{lib => }/rename-test.c | 0 testcode/{lib => }/scanf-test.c | 0 testcode/{lib => }/seek.c | 0 testcode/{lib => }/ser-test.c | 0 testcode/{lib => }/strdup-test.c | 0 testcode/{lib => }/stroserror-test.c | 0 testcode/{lib => }/strqtok-test.c | 0 testcode/{lib => }/tinyshell.c | 0 testcode/{lib => }/uname-test.c | 0 83 files changed, 2 deletions(-) rename testcode/{lib => }/Makefile (100%) rename testcode/{lib => }/accelerator/Makefile (100%) rename testcode/{lib => }/accelerator/c64-c128-scpu-test.c (100%) rename testcode/{lib => }/accelerator/c64-c128-test.c (100%) rename testcode/{lib => }/accelerator/c64dtv-test.c (100%) rename testcode/{lib => }/accelerator/c65-test.c (100%) rename testcode/{lib => }/accelerator/chameleon-test.c (100%) rename testcode/{lib => }/accelerator/turbo-test.c (100%) rename testcode/{lib => }/accelerator/turbomaster-test.c (100%) rename testcode/{lib => }/apple2/Makefile (100%) rename testcode/{lib => }/apple2/astronaut.hgr (100%) rename testcode/{lib => }/apple2/catface.dhgr (100%) rename testcode/{lib => }/apple2/chips.hgr (100%) rename testcode/{lib => }/apple2/dhgrshow.c (100%) rename testcode/{lib => }/apple2/gatsby.dhgr (100%) rename testcode/{lib => }/apple2/girl.dhgr (100%) rename testcode/{lib => }/apple2/hgrshow.c (100%) rename testcode/{lib => }/apple2/hgrtest.c (100%) rename testcode/{lib => }/apple2/macrometer.hgr (100%) rename testcode/{lib => }/apple2/mariner.hgr (100%) rename testcode/{lib => }/apple2/monarch.dhgr (100%) rename testcode/{lib => }/apple2/rose.hgr (100%) rename testcode/{lib => }/apple2/superman.dhgr (100%) rename testcode/{lib => }/apple2/venice.dhgr (100%) rename testcode/{lib => }/apple2/werner.hgr (100%) rename testcode/{lib => }/apple2/werner.s (100%) rename testcode/{lib => }/apple2/winston.hgr (100%) rename testcode/{lib => }/arg-test.c (100%) rename testcode/{lib => }/atari/Makefile (100%) rename testcode/{lib => }/atari/asm-xex.s (100%) rename testcode/{lib => }/atari/charmapping.c (100%) rename testcode/{lib => }/atari/defdev.c (100%) rename testcode/{lib => }/atari/displaylist.c (100%) rename testcode/{lib => }/atari/mem.c (100%) rename testcode/{lib => }/atari/multi-xex.cfg (100%) rename testcode/{lib => }/atari/multi-xex.s (100%) rename testcode/{lib => }/atari/ostype.c (100%) rename testcode/{lib => }/atari/scrcode.s (100%) rename testcode/{lib => }/atari/sys.c (100%) rename testcode/{lib => }/atari5200/Makefile (100%) rename testcode/{lib => }/atari5200/hello.c (100%) rename testcode/{lib => }/cbm/Makefile (100%) rename testcode/{lib => }/cbm/petscii.c (100%) rename testcode/{lib => }/clock-test.c (100%) rename testcode/{lib => }/clock.c (100%) rename testcode/{lib => }/conio.c (100%) rename testcode/{lib => }/cpeek-test.c (100%) rename testcode/{lib => }/cprintf.c (100%) rename testcode/{lib => }/cursor.c (100%) rename testcode/{lib => }/deb.c (100%) rename testcode/{lib => }/dir-test.c (100%) rename testcode/{lib => }/div-test.c (100%) rename testcode/{lib => }/em-test.c (100%) rename testcode/{lib => }/exec-test1.c (100%) rename testcode/{lib => }/exec-test2.c (100%) rename testcode/{lib => }/fileio-test.c (100%) rename testcode/{lib => }/ft.c (100%) rename testcode/{lib => }/gamate/Makefile (100%) rename testcode/{lib => }/gamate/audiotest.s (100%) rename testcode/{lib => }/gamate/cga2.chr (100%) rename testcode/{lib => }/gamate/ctest.c (100%) rename testcode/{lib => }/gamate/lcdtest.s (100%) rename testcode/{lib => }/gamate/nachtm.c (100%) rename testcode/{lib => }/getopt-test.c (100%) rename testcode/{lib => }/getsp.s (100%) rename testcode/{lib => }/heaptest.c (100%) rename testcode/{lib => }/joy-test.c (100%) delete mode 100644 testcode/lib/.gitignore rename testcode/{lib => }/moddiv-test.c (100%) rename testcode/{lib => }/mouse-test.c (100%) rename testcode/{lib => }/mul-test.c (100%) rename testcode/{lib => }/pce/Makefile (100%) rename testcode/{lib => }/pce/conio.c (100%) rename testcode/{lib => }/posixio-test.c (100%) rename testcode/{lib => }/rename-test.c (100%) rename testcode/{lib => }/scanf-test.c (100%) rename testcode/{lib => }/seek.c (100%) rename testcode/{lib => }/ser-test.c (100%) rename testcode/{lib => }/strdup-test.c (100%) rename testcode/{lib => }/stroserror-test.c (100%) rename testcode/{lib => }/strqtok-test.c (100%) rename testcode/{lib => }/tinyshell.c (100%) rename testcode/{lib => }/uname-test.c (100%) diff --git a/testcode/lib/Makefile b/testcode/Makefile similarity index 100% rename from testcode/lib/Makefile rename to testcode/Makefile diff --git a/testcode/lib/accelerator/Makefile b/testcode/accelerator/Makefile similarity index 100% rename from testcode/lib/accelerator/Makefile rename to testcode/accelerator/Makefile diff --git a/testcode/lib/accelerator/c64-c128-scpu-test.c b/testcode/accelerator/c64-c128-scpu-test.c similarity index 100% rename from testcode/lib/accelerator/c64-c128-scpu-test.c rename to testcode/accelerator/c64-c128-scpu-test.c diff --git a/testcode/lib/accelerator/c64-c128-test.c b/testcode/accelerator/c64-c128-test.c similarity index 100% rename from testcode/lib/accelerator/c64-c128-test.c rename to testcode/accelerator/c64-c128-test.c diff --git a/testcode/lib/accelerator/c64dtv-test.c b/testcode/accelerator/c64dtv-test.c similarity index 100% rename from testcode/lib/accelerator/c64dtv-test.c rename to testcode/accelerator/c64dtv-test.c diff --git a/testcode/lib/accelerator/c65-test.c b/testcode/accelerator/c65-test.c similarity index 100% rename from testcode/lib/accelerator/c65-test.c rename to testcode/accelerator/c65-test.c diff --git a/testcode/lib/accelerator/chameleon-test.c b/testcode/accelerator/chameleon-test.c similarity index 100% rename from testcode/lib/accelerator/chameleon-test.c rename to testcode/accelerator/chameleon-test.c diff --git a/testcode/lib/accelerator/turbo-test.c b/testcode/accelerator/turbo-test.c similarity index 100% rename from testcode/lib/accelerator/turbo-test.c rename to testcode/accelerator/turbo-test.c diff --git a/testcode/lib/accelerator/turbomaster-test.c b/testcode/accelerator/turbomaster-test.c similarity index 100% rename from testcode/lib/accelerator/turbomaster-test.c rename to testcode/accelerator/turbomaster-test.c diff --git a/testcode/lib/apple2/Makefile b/testcode/apple2/Makefile similarity index 100% rename from testcode/lib/apple2/Makefile rename to testcode/apple2/Makefile diff --git a/testcode/lib/apple2/astronaut.hgr b/testcode/apple2/astronaut.hgr similarity index 100% rename from testcode/lib/apple2/astronaut.hgr rename to testcode/apple2/astronaut.hgr diff --git a/testcode/lib/apple2/catface.dhgr b/testcode/apple2/catface.dhgr similarity index 100% rename from testcode/lib/apple2/catface.dhgr rename to testcode/apple2/catface.dhgr diff --git a/testcode/lib/apple2/chips.hgr b/testcode/apple2/chips.hgr similarity index 100% rename from testcode/lib/apple2/chips.hgr rename to testcode/apple2/chips.hgr diff --git a/testcode/lib/apple2/dhgrshow.c b/testcode/apple2/dhgrshow.c similarity index 100% rename from testcode/lib/apple2/dhgrshow.c rename to testcode/apple2/dhgrshow.c diff --git a/testcode/lib/apple2/gatsby.dhgr b/testcode/apple2/gatsby.dhgr similarity index 100% rename from testcode/lib/apple2/gatsby.dhgr rename to testcode/apple2/gatsby.dhgr diff --git a/testcode/lib/apple2/girl.dhgr b/testcode/apple2/girl.dhgr similarity index 100% rename from testcode/lib/apple2/girl.dhgr rename to testcode/apple2/girl.dhgr diff --git a/testcode/lib/apple2/hgrshow.c b/testcode/apple2/hgrshow.c similarity index 100% rename from testcode/lib/apple2/hgrshow.c rename to testcode/apple2/hgrshow.c diff --git a/testcode/lib/apple2/hgrtest.c b/testcode/apple2/hgrtest.c similarity index 100% rename from testcode/lib/apple2/hgrtest.c rename to testcode/apple2/hgrtest.c diff --git a/testcode/lib/apple2/macrometer.hgr b/testcode/apple2/macrometer.hgr similarity index 100% rename from testcode/lib/apple2/macrometer.hgr rename to testcode/apple2/macrometer.hgr diff --git a/testcode/lib/apple2/mariner.hgr b/testcode/apple2/mariner.hgr similarity index 100% rename from testcode/lib/apple2/mariner.hgr rename to testcode/apple2/mariner.hgr diff --git a/testcode/lib/apple2/monarch.dhgr b/testcode/apple2/monarch.dhgr similarity index 100% rename from testcode/lib/apple2/monarch.dhgr rename to testcode/apple2/monarch.dhgr diff --git a/testcode/lib/apple2/rose.hgr b/testcode/apple2/rose.hgr similarity index 100% rename from testcode/lib/apple2/rose.hgr rename to testcode/apple2/rose.hgr diff --git a/testcode/lib/apple2/superman.dhgr b/testcode/apple2/superman.dhgr similarity index 100% rename from testcode/lib/apple2/superman.dhgr rename to testcode/apple2/superman.dhgr diff --git a/testcode/lib/apple2/venice.dhgr b/testcode/apple2/venice.dhgr similarity index 100% rename from testcode/lib/apple2/venice.dhgr rename to testcode/apple2/venice.dhgr diff --git a/testcode/lib/apple2/werner.hgr b/testcode/apple2/werner.hgr similarity index 100% rename from testcode/lib/apple2/werner.hgr rename to testcode/apple2/werner.hgr diff --git a/testcode/lib/apple2/werner.s b/testcode/apple2/werner.s similarity index 100% rename from testcode/lib/apple2/werner.s rename to testcode/apple2/werner.s diff --git a/testcode/lib/apple2/winston.hgr b/testcode/apple2/winston.hgr similarity index 100% rename from testcode/lib/apple2/winston.hgr rename to testcode/apple2/winston.hgr diff --git a/testcode/lib/arg-test.c b/testcode/arg-test.c similarity index 100% rename from testcode/lib/arg-test.c rename to testcode/arg-test.c diff --git a/testcode/lib/atari/Makefile b/testcode/atari/Makefile similarity index 100% rename from testcode/lib/atari/Makefile rename to testcode/atari/Makefile diff --git a/testcode/lib/atari/asm-xex.s b/testcode/atari/asm-xex.s similarity index 100% rename from testcode/lib/atari/asm-xex.s rename to testcode/atari/asm-xex.s diff --git a/testcode/lib/atari/charmapping.c b/testcode/atari/charmapping.c similarity index 100% rename from testcode/lib/atari/charmapping.c rename to testcode/atari/charmapping.c diff --git a/testcode/lib/atari/defdev.c b/testcode/atari/defdev.c similarity index 100% rename from testcode/lib/atari/defdev.c rename to testcode/atari/defdev.c diff --git a/testcode/lib/atari/displaylist.c b/testcode/atari/displaylist.c similarity index 100% rename from testcode/lib/atari/displaylist.c rename to testcode/atari/displaylist.c diff --git a/testcode/lib/atari/mem.c b/testcode/atari/mem.c similarity index 100% rename from testcode/lib/atari/mem.c rename to testcode/atari/mem.c diff --git a/testcode/lib/atari/multi-xex.cfg b/testcode/atari/multi-xex.cfg similarity index 100% rename from testcode/lib/atari/multi-xex.cfg rename to testcode/atari/multi-xex.cfg diff --git a/testcode/lib/atari/multi-xex.s b/testcode/atari/multi-xex.s similarity index 100% rename from testcode/lib/atari/multi-xex.s rename to testcode/atari/multi-xex.s diff --git a/testcode/lib/atari/ostype.c b/testcode/atari/ostype.c similarity index 100% rename from testcode/lib/atari/ostype.c rename to testcode/atari/ostype.c diff --git a/testcode/lib/atari/scrcode.s b/testcode/atari/scrcode.s similarity index 100% rename from testcode/lib/atari/scrcode.s rename to testcode/atari/scrcode.s diff --git a/testcode/lib/atari/sys.c b/testcode/atari/sys.c similarity index 100% rename from testcode/lib/atari/sys.c rename to testcode/atari/sys.c diff --git a/testcode/lib/atari5200/Makefile b/testcode/atari5200/Makefile similarity index 100% rename from testcode/lib/atari5200/Makefile rename to testcode/atari5200/Makefile diff --git a/testcode/lib/atari5200/hello.c b/testcode/atari5200/hello.c similarity index 100% rename from testcode/lib/atari5200/hello.c rename to testcode/atari5200/hello.c diff --git a/testcode/lib/cbm/Makefile b/testcode/cbm/Makefile similarity index 100% rename from testcode/lib/cbm/Makefile rename to testcode/cbm/Makefile diff --git a/testcode/lib/cbm/petscii.c b/testcode/cbm/petscii.c similarity index 100% rename from testcode/lib/cbm/petscii.c rename to testcode/cbm/petscii.c diff --git a/testcode/lib/clock-test.c b/testcode/clock-test.c similarity index 100% rename from testcode/lib/clock-test.c rename to testcode/clock-test.c diff --git a/testcode/lib/clock.c b/testcode/clock.c similarity index 100% rename from testcode/lib/clock.c rename to testcode/clock.c diff --git a/testcode/lib/conio.c b/testcode/conio.c similarity index 100% rename from testcode/lib/conio.c rename to testcode/conio.c diff --git a/testcode/lib/cpeek-test.c b/testcode/cpeek-test.c similarity index 100% rename from testcode/lib/cpeek-test.c rename to testcode/cpeek-test.c diff --git a/testcode/lib/cprintf.c b/testcode/cprintf.c similarity index 100% rename from testcode/lib/cprintf.c rename to testcode/cprintf.c diff --git a/testcode/lib/cursor.c b/testcode/cursor.c similarity index 100% rename from testcode/lib/cursor.c rename to testcode/cursor.c diff --git a/testcode/lib/deb.c b/testcode/deb.c similarity index 100% rename from testcode/lib/deb.c rename to testcode/deb.c diff --git a/testcode/lib/dir-test.c b/testcode/dir-test.c similarity index 100% rename from testcode/lib/dir-test.c rename to testcode/dir-test.c diff --git a/testcode/lib/div-test.c b/testcode/div-test.c similarity index 100% rename from testcode/lib/div-test.c rename to testcode/div-test.c diff --git a/testcode/lib/em-test.c b/testcode/em-test.c similarity index 100% rename from testcode/lib/em-test.c rename to testcode/em-test.c diff --git a/testcode/lib/exec-test1.c b/testcode/exec-test1.c similarity index 100% rename from testcode/lib/exec-test1.c rename to testcode/exec-test1.c diff --git a/testcode/lib/exec-test2.c b/testcode/exec-test2.c similarity index 100% rename from testcode/lib/exec-test2.c rename to testcode/exec-test2.c diff --git a/testcode/lib/fileio-test.c b/testcode/fileio-test.c similarity index 100% rename from testcode/lib/fileio-test.c rename to testcode/fileio-test.c diff --git a/testcode/lib/ft.c b/testcode/ft.c similarity index 100% rename from testcode/lib/ft.c rename to testcode/ft.c diff --git a/testcode/lib/gamate/Makefile b/testcode/gamate/Makefile similarity index 100% rename from testcode/lib/gamate/Makefile rename to testcode/gamate/Makefile diff --git a/testcode/lib/gamate/audiotest.s b/testcode/gamate/audiotest.s similarity index 100% rename from testcode/lib/gamate/audiotest.s rename to testcode/gamate/audiotest.s diff --git a/testcode/lib/gamate/cga2.chr b/testcode/gamate/cga2.chr similarity index 100% rename from testcode/lib/gamate/cga2.chr rename to testcode/gamate/cga2.chr diff --git a/testcode/lib/gamate/ctest.c b/testcode/gamate/ctest.c similarity index 100% rename from testcode/lib/gamate/ctest.c rename to testcode/gamate/ctest.c diff --git a/testcode/lib/gamate/lcdtest.s b/testcode/gamate/lcdtest.s similarity index 100% rename from testcode/lib/gamate/lcdtest.s rename to testcode/gamate/lcdtest.s diff --git a/testcode/lib/gamate/nachtm.c b/testcode/gamate/nachtm.c similarity index 100% rename from testcode/lib/gamate/nachtm.c rename to testcode/gamate/nachtm.c diff --git a/testcode/lib/getopt-test.c b/testcode/getopt-test.c similarity index 100% rename from testcode/lib/getopt-test.c rename to testcode/getopt-test.c diff --git a/testcode/lib/getsp.s b/testcode/getsp.s similarity index 100% rename from testcode/lib/getsp.s rename to testcode/getsp.s diff --git a/testcode/lib/heaptest.c b/testcode/heaptest.c similarity index 100% rename from testcode/lib/heaptest.c rename to testcode/heaptest.c diff --git a/testcode/lib/joy-test.c b/testcode/joy-test.c similarity index 100% rename from testcode/lib/joy-test.c rename to testcode/joy-test.c diff --git a/testcode/lib/.gitignore b/testcode/lib/.gitignore deleted file mode 100644 index 9bb8eaa3e..000000000 --- a/testcode/lib/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.o -em-test-* diff --git a/testcode/lib/moddiv-test.c b/testcode/moddiv-test.c similarity index 100% rename from testcode/lib/moddiv-test.c rename to testcode/moddiv-test.c diff --git a/testcode/lib/mouse-test.c b/testcode/mouse-test.c similarity index 100% rename from testcode/lib/mouse-test.c rename to testcode/mouse-test.c diff --git a/testcode/lib/mul-test.c b/testcode/mul-test.c similarity index 100% rename from testcode/lib/mul-test.c rename to testcode/mul-test.c diff --git a/testcode/lib/pce/Makefile b/testcode/pce/Makefile similarity index 100% rename from testcode/lib/pce/Makefile rename to testcode/pce/Makefile diff --git a/testcode/lib/pce/conio.c b/testcode/pce/conio.c similarity index 100% rename from testcode/lib/pce/conio.c rename to testcode/pce/conio.c diff --git a/testcode/lib/posixio-test.c b/testcode/posixio-test.c similarity index 100% rename from testcode/lib/posixio-test.c rename to testcode/posixio-test.c diff --git a/testcode/lib/rename-test.c b/testcode/rename-test.c similarity index 100% rename from testcode/lib/rename-test.c rename to testcode/rename-test.c diff --git a/testcode/lib/scanf-test.c b/testcode/scanf-test.c similarity index 100% rename from testcode/lib/scanf-test.c rename to testcode/scanf-test.c diff --git a/testcode/lib/seek.c b/testcode/seek.c similarity index 100% rename from testcode/lib/seek.c rename to testcode/seek.c diff --git a/testcode/lib/ser-test.c b/testcode/ser-test.c similarity index 100% rename from testcode/lib/ser-test.c rename to testcode/ser-test.c diff --git a/testcode/lib/strdup-test.c b/testcode/strdup-test.c similarity index 100% rename from testcode/lib/strdup-test.c rename to testcode/strdup-test.c diff --git a/testcode/lib/stroserror-test.c b/testcode/stroserror-test.c similarity index 100% rename from testcode/lib/stroserror-test.c rename to testcode/stroserror-test.c diff --git a/testcode/lib/strqtok-test.c b/testcode/strqtok-test.c similarity index 100% rename from testcode/lib/strqtok-test.c rename to testcode/strqtok-test.c diff --git a/testcode/lib/tinyshell.c b/testcode/tinyshell.c similarity index 100% rename from testcode/lib/tinyshell.c rename to testcode/tinyshell.c diff --git a/testcode/lib/uname-test.c b/testcode/uname-test.c similarity index 100% rename from testcode/lib/uname-test.c rename to testcode/uname-test.c From 4777e98f570b5227de20bac41d2721e762352b44 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 29 Sep 2020 19:14:46 +0200 Subject: [PATCH 0544/2710] rename testcode/ to targettest/ --- {testcode => targettest}/Makefile | 0 {testcode => targettest}/accelerator/Makefile | 0 .../accelerator/c64-c128-scpu-test.c | 0 .../accelerator/c64-c128-test.c | 0 {testcode => targettest}/accelerator/c64dtv-test.c | 0 {testcode => targettest}/accelerator/c65-test.c | 0 .../accelerator/chameleon-test.c | 0 {testcode => targettest}/accelerator/turbo-test.c | 0 .../accelerator/turbomaster-test.c | 0 {testcode => targettest}/apple2/Makefile | 0 {testcode => targettest}/apple2/astronaut.hgr | Bin {testcode => targettest}/apple2/catface.dhgr | Bin {testcode => targettest}/apple2/chips.hgr | Bin {testcode => targettest}/apple2/dhgrshow.c | 0 {testcode => targettest}/apple2/gatsby.dhgr | Bin {testcode => targettest}/apple2/girl.dhgr | Bin {testcode => targettest}/apple2/hgrshow.c | 0 {testcode => targettest}/apple2/hgrtest.c | 0 {testcode => targettest}/apple2/macrometer.hgr | Bin {testcode => targettest}/apple2/mariner.hgr | Bin {testcode => targettest}/apple2/monarch.dhgr | Bin {testcode => targettest}/apple2/rose.hgr | Bin {testcode => targettest}/apple2/superman.dhgr | Bin {testcode => targettest}/apple2/venice.dhgr | Bin {testcode => targettest}/apple2/werner.hgr | Bin {testcode => targettest}/apple2/werner.s | 0 {testcode => targettest}/apple2/winston.hgr | Bin {testcode => targettest}/arg-test.c | 0 {testcode => targettest}/atari/Makefile | 0 {testcode => targettest}/atari/asm-xex.s | 0 {testcode => targettest}/atari/charmapping.c | 0 {testcode => targettest}/atari/defdev.c | 0 {testcode => targettest}/atari/displaylist.c | 0 {testcode => targettest}/atari/mem.c | 0 {testcode => targettest}/atari/multi-xex.cfg | 0 {testcode => targettest}/atari/multi-xex.s | 0 {testcode => targettest}/atari/ostype.c | 0 {testcode => targettest}/atari/scrcode.s | 0 {testcode => targettest}/atari/sys.c | 0 {testcode => targettest}/atari5200/Makefile | 0 {testcode => targettest}/atari5200/hello.c | 0 {testcode => targettest}/cbm/Makefile | 0 {testcode => targettest}/cbm/petscii.c | 0 {testcode => targettest}/clock-test.c | 0 {testcode => targettest}/clock.c | 0 {testcode => targettest}/conio.c | 0 {testcode => targettest}/cpeek-test.c | 0 {testcode => targettest}/cprintf.c | 0 {testcode => targettest}/cursor.c | 0 {testcode => targettest}/deb.c | 0 {testcode => targettest}/dir-test.c | 0 {testcode => targettest}/div-test.c | 0 {testcode => targettest}/em-test.c | 0 {testcode => targettest}/exec-test1.c | 0 {testcode => targettest}/exec-test2.c | 0 {testcode => targettest}/fileio-test.c | 0 {testcode => targettest}/ft.c | 0 {testcode => targettest}/gamate/Makefile | 0 {testcode => targettest}/gamate/audiotest.s | 0 {testcode => targettest}/gamate/cga2.chr | Bin {testcode => targettest}/gamate/ctest.c | 0 {testcode => targettest}/gamate/lcdtest.s | 0 {testcode => targettest}/gamate/nachtm.c | 0 {testcode => targettest}/getopt-test.c | 0 {testcode => targettest}/getsp.s | 0 {testcode => targettest}/heaptest.c | 0 {testcode => targettest}/joy-test.c | 0 {testcode => targettest}/moddiv-test.c | 0 {testcode => targettest}/mouse-test.c | 0 {testcode => targettest}/mul-test.c | 0 {testcode => targettest}/pce/Makefile | 0 {testcode => targettest}/pce/conio.c | 0 {testcode => targettest}/posixio-test.c | 0 {testcode => targettest}/rename-test.c | 0 {testcode => targettest}/scanf-test.c | 0 {testcode => targettest}/seek.c | 0 {testcode => targettest}/ser-test.c | 0 {testcode => targettest}/strdup-test.c | 0 {testcode => targettest}/stroserror-test.c | 0 {testcode => targettest}/strqtok-test.c | 0 {testcode => targettest}/tinyshell.c | 0 {testcode => targettest}/uname-test.c | 0 82 files changed, 0 insertions(+), 0 deletions(-) rename {testcode => targettest}/Makefile (100%) rename {testcode => targettest}/accelerator/Makefile (100%) rename {testcode => targettest}/accelerator/c64-c128-scpu-test.c (100%) rename {testcode => targettest}/accelerator/c64-c128-test.c (100%) rename {testcode => targettest}/accelerator/c64dtv-test.c (100%) rename {testcode => targettest}/accelerator/c65-test.c (100%) rename {testcode => targettest}/accelerator/chameleon-test.c (100%) rename {testcode => targettest}/accelerator/turbo-test.c (100%) rename {testcode => targettest}/accelerator/turbomaster-test.c (100%) rename {testcode => targettest}/apple2/Makefile (100%) rename {testcode => targettest}/apple2/astronaut.hgr (100%) rename {testcode => targettest}/apple2/catface.dhgr (100%) rename {testcode => targettest}/apple2/chips.hgr (100%) rename {testcode => targettest}/apple2/dhgrshow.c (100%) rename {testcode => targettest}/apple2/gatsby.dhgr (100%) rename {testcode => targettest}/apple2/girl.dhgr (100%) rename {testcode => targettest}/apple2/hgrshow.c (100%) rename {testcode => targettest}/apple2/hgrtest.c (100%) rename {testcode => targettest}/apple2/macrometer.hgr (100%) rename {testcode => targettest}/apple2/mariner.hgr (100%) rename {testcode => targettest}/apple2/monarch.dhgr (100%) rename {testcode => targettest}/apple2/rose.hgr (100%) rename {testcode => targettest}/apple2/superman.dhgr (100%) rename {testcode => targettest}/apple2/venice.dhgr (100%) rename {testcode => targettest}/apple2/werner.hgr (100%) rename {testcode => targettest}/apple2/werner.s (100%) rename {testcode => targettest}/apple2/winston.hgr (100%) rename {testcode => targettest}/arg-test.c (100%) rename {testcode => targettest}/atari/Makefile (100%) rename {testcode => targettest}/atari/asm-xex.s (100%) rename {testcode => targettest}/atari/charmapping.c (100%) rename {testcode => targettest}/atari/defdev.c (100%) rename {testcode => targettest}/atari/displaylist.c (100%) rename {testcode => targettest}/atari/mem.c (100%) rename {testcode => targettest}/atari/multi-xex.cfg (100%) rename {testcode => targettest}/atari/multi-xex.s (100%) rename {testcode => targettest}/atari/ostype.c (100%) rename {testcode => targettest}/atari/scrcode.s (100%) rename {testcode => targettest}/atari/sys.c (100%) rename {testcode => targettest}/atari5200/Makefile (100%) rename {testcode => targettest}/atari5200/hello.c (100%) rename {testcode => targettest}/cbm/Makefile (100%) rename {testcode => targettest}/cbm/petscii.c (100%) rename {testcode => targettest}/clock-test.c (100%) rename {testcode => targettest}/clock.c (100%) rename {testcode => targettest}/conio.c (100%) rename {testcode => targettest}/cpeek-test.c (100%) rename {testcode => targettest}/cprintf.c (100%) rename {testcode => targettest}/cursor.c (100%) rename {testcode => targettest}/deb.c (100%) rename {testcode => targettest}/dir-test.c (100%) rename {testcode => targettest}/div-test.c (100%) rename {testcode => targettest}/em-test.c (100%) rename {testcode => targettest}/exec-test1.c (100%) rename {testcode => targettest}/exec-test2.c (100%) rename {testcode => targettest}/fileio-test.c (100%) rename {testcode => targettest}/ft.c (100%) rename {testcode => targettest}/gamate/Makefile (100%) rename {testcode => targettest}/gamate/audiotest.s (100%) rename {testcode => targettest}/gamate/cga2.chr (100%) rename {testcode => targettest}/gamate/ctest.c (100%) rename {testcode => targettest}/gamate/lcdtest.s (100%) rename {testcode => targettest}/gamate/nachtm.c (100%) rename {testcode => targettest}/getopt-test.c (100%) rename {testcode => targettest}/getsp.s (100%) rename {testcode => targettest}/heaptest.c (100%) rename {testcode => targettest}/joy-test.c (100%) rename {testcode => targettest}/moddiv-test.c (100%) rename {testcode => targettest}/mouse-test.c (100%) rename {testcode => targettest}/mul-test.c (100%) rename {testcode => targettest}/pce/Makefile (100%) rename {testcode => targettest}/pce/conio.c (100%) rename {testcode => targettest}/posixio-test.c (100%) rename {testcode => targettest}/rename-test.c (100%) rename {testcode => targettest}/scanf-test.c (100%) rename {testcode => targettest}/seek.c (100%) rename {testcode => targettest}/ser-test.c (100%) rename {testcode => targettest}/strdup-test.c (100%) rename {testcode => targettest}/stroserror-test.c (100%) rename {testcode => targettest}/strqtok-test.c (100%) rename {testcode => targettest}/tinyshell.c (100%) rename {testcode => targettest}/uname-test.c (100%) diff --git a/testcode/Makefile b/targettest/Makefile similarity index 100% rename from testcode/Makefile rename to targettest/Makefile diff --git a/testcode/accelerator/Makefile b/targettest/accelerator/Makefile similarity index 100% rename from testcode/accelerator/Makefile rename to targettest/accelerator/Makefile diff --git a/testcode/accelerator/c64-c128-scpu-test.c b/targettest/accelerator/c64-c128-scpu-test.c similarity index 100% rename from testcode/accelerator/c64-c128-scpu-test.c rename to targettest/accelerator/c64-c128-scpu-test.c diff --git a/testcode/accelerator/c64-c128-test.c b/targettest/accelerator/c64-c128-test.c similarity index 100% rename from testcode/accelerator/c64-c128-test.c rename to targettest/accelerator/c64-c128-test.c diff --git a/testcode/accelerator/c64dtv-test.c b/targettest/accelerator/c64dtv-test.c similarity index 100% rename from testcode/accelerator/c64dtv-test.c rename to targettest/accelerator/c64dtv-test.c diff --git a/testcode/accelerator/c65-test.c b/targettest/accelerator/c65-test.c similarity index 100% rename from testcode/accelerator/c65-test.c rename to targettest/accelerator/c65-test.c diff --git a/testcode/accelerator/chameleon-test.c b/targettest/accelerator/chameleon-test.c similarity index 100% rename from testcode/accelerator/chameleon-test.c rename to targettest/accelerator/chameleon-test.c diff --git a/testcode/accelerator/turbo-test.c b/targettest/accelerator/turbo-test.c similarity index 100% rename from testcode/accelerator/turbo-test.c rename to targettest/accelerator/turbo-test.c diff --git a/testcode/accelerator/turbomaster-test.c b/targettest/accelerator/turbomaster-test.c similarity index 100% rename from testcode/accelerator/turbomaster-test.c rename to targettest/accelerator/turbomaster-test.c diff --git a/testcode/apple2/Makefile b/targettest/apple2/Makefile similarity index 100% rename from testcode/apple2/Makefile rename to targettest/apple2/Makefile diff --git a/testcode/apple2/astronaut.hgr b/targettest/apple2/astronaut.hgr similarity index 100% rename from testcode/apple2/astronaut.hgr rename to targettest/apple2/astronaut.hgr diff --git a/testcode/apple2/catface.dhgr b/targettest/apple2/catface.dhgr similarity index 100% rename from testcode/apple2/catface.dhgr rename to targettest/apple2/catface.dhgr diff --git a/testcode/apple2/chips.hgr b/targettest/apple2/chips.hgr similarity index 100% rename from testcode/apple2/chips.hgr rename to targettest/apple2/chips.hgr diff --git a/testcode/apple2/dhgrshow.c b/targettest/apple2/dhgrshow.c similarity index 100% rename from testcode/apple2/dhgrshow.c rename to targettest/apple2/dhgrshow.c diff --git a/testcode/apple2/gatsby.dhgr b/targettest/apple2/gatsby.dhgr similarity index 100% rename from testcode/apple2/gatsby.dhgr rename to targettest/apple2/gatsby.dhgr diff --git a/testcode/apple2/girl.dhgr b/targettest/apple2/girl.dhgr similarity index 100% rename from testcode/apple2/girl.dhgr rename to targettest/apple2/girl.dhgr diff --git a/testcode/apple2/hgrshow.c b/targettest/apple2/hgrshow.c similarity index 100% rename from testcode/apple2/hgrshow.c rename to targettest/apple2/hgrshow.c diff --git a/testcode/apple2/hgrtest.c b/targettest/apple2/hgrtest.c similarity index 100% rename from testcode/apple2/hgrtest.c rename to targettest/apple2/hgrtest.c diff --git a/testcode/apple2/macrometer.hgr b/targettest/apple2/macrometer.hgr similarity index 100% rename from testcode/apple2/macrometer.hgr rename to targettest/apple2/macrometer.hgr diff --git a/testcode/apple2/mariner.hgr b/targettest/apple2/mariner.hgr similarity index 100% rename from testcode/apple2/mariner.hgr rename to targettest/apple2/mariner.hgr diff --git a/testcode/apple2/monarch.dhgr b/targettest/apple2/monarch.dhgr similarity index 100% rename from testcode/apple2/monarch.dhgr rename to targettest/apple2/monarch.dhgr diff --git a/testcode/apple2/rose.hgr b/targettest/apple2/rose.hgr similarity index 100% rename from testcode/apple2/rose.hgr rename to targettest/apple2/rose.hgr diff --git a/testcode/apple2/superman.dhgr b/targettest/apple2/superman.dhgr similarity index 100% rename from testcode/apple2/superman.dhgr rename to targettest/apple2/superman.dhgr diff --git a/testcode/apple2/venice.dhgr b/targettest/apple2/venice.dhgr similarity index 100% rename from testcode/apple2/venice.dhgr rename to targettest/apple2/venice.dhgr diff --git a/testcode/apple2/werner.hgr b/targettest/apple2/werner.hgr similarity index 100% rename from testcode/apple2/werner.hgr rename to targettest/apple2/werner.hgr diff --git a/testcode/apple2/werner.s b/targettest/apple2/werner.s similarity index 100% rename from testcode/apple2/werner.s rename to targettest/apple2/werner.s diff --git a/testcode/apple2/winston.hgr b/targettest/apple2/winston.hgr similarity index 100% rename from testcode/apple2/winston.hgr rename to targettest/apple2/winston.hgr diff --git a/testcode/arg-test.c b/targettest/arg-test.c similarity index 100% rename from testcode/arg-test.c rename to targettest/arg-test.c diff --git a/testcode/atari/Makefile b/targettest/atari/Makefile similarity index 100% rename from testcode/atari/Makefile rename to targettest/atari/Makefile diff --git a/testcode/atari/asm-xex.s b/targettest/atari/asm-xex.s similarity index 100% rename from testcode/atari/asm-xex.s rename to targettest/atari/asm-xex.s diff --git a/testcode/atari/charmapping.c b/targettest/atari/charmapping.c similarity index 100% rename from testcode/atari/charmapping.c rename to targettest/atari/charmapping.c diff --git a/testcode/atari/defdev.c b/targettest/atari/defdev.c similarity index 100% rename from testcode/atari/defdev.c rename to targettest/atari/defdev.c diff --git a/testcode/atari/displaylist.c b/targettest/atari/displaylist.c similarity index 100% rename from testcode/atari/displaylist.c rename to targettest/atari/displaylist.c diff --git a/testcode/atari/mem.c b/targettest/atari/mem.c similarity index 100% rename from testcode/atari/mem.c rename to targettest/atari/mem.c diff --git a/testcode/atari/multi-xex.cfg b/targettest/atari/multi-xex.cfg similarity index 100% rename from testcode/atari/multi-xex.cfg rename to targettest/atari/multi-xex.cfg diff --git a/testcode/atari/multi-xex.s b/targettest/atari/multi-xex.s similarity index 100% rename from testcode/atari/multi-xex.s rename to targettest/atari/multi-xex.s diff --git a/testcode/atari/ostype.c b/targettest/atari/ostype.c similarity index 100% rename from testcode/atari/ostype.c rename to targettest/atari/ostype.c diff --git a/testcode/atari/scrcode.s b/targettest/atari/scrcode.s similarity index 100% rename from testcode/atari/scrcode.s rename to targettest/atari/scrcode.s diff --git a/testcode/atari/sys.c b/targettest/atari/sys.c similarity index 100% rename from testcode/atari/sys.c rename to targettest/atari/sys.c diff --git a/testcode/atari5200/Makefile b/targettest/atari5200/Makefile similarity index 100% rename from testcode/atari5200/Makefile rename to targettest/atari5200/Makefile diff --git a/testcode/atari5200/hello.c b/targettest/atari5200/hello.c similarity index 100% rename from testcode/atari5200/hello.c rename to targettest/atari5200/hello.c diff --git a/testcode/cbm/Makefile b/targettest/cbm/Makefile similarity index 100% rename from testcode/cbm/Makefile rename to targettest/cbm/Makefile diff --git a/testcode/cbm/petscii.c b/targettest/cbm/petscii.c similarity index 100% rename from testcode/cbm/petscii.c rename to targettest/cbm/petscii.c diff --git a/testcode/clock-test.c b/targettest/clock-test.c similarity index 100% rename from testcode/clock-test.c rename to targettest/clock-test.c diff --git a/testcode/clock.c b/targettest/clock.c similarity index 100% rename from testcode/clock.c rename to targettest/clock.c diff --git a/testcode/conio.c b/targettest/conio.c similarity index 100% rename from testcode/conio.c rename to targettest/conio.c diff --git a/testcode/cpeek-test.c b/targettest/cpeek-test.c similarity index 100% rename from testcode/cpeek-test.c rename to targettest/cpeek-test.c diff --git a/testcode/cprintf.c b/targettest/cprintf.c similarity index 100% rename from testcode/cprintf.c rename to targettest/cprintf.c diff --git a/testcode/cursor.c b/targettest/cursor.c similarity index 100% rename from testcode/cursor.c rename to targettest/cursor.c diff --git a/testcode/deb.c b/targettest/deb.c similarity index 100% rename from testcode/deb.c rename to targettest/deb.c diff --git a/testcode/dir-test.c b/targettest/dir-test.c similarity index 100% rename from testcode/dir-test.c rename to targettest/dir-test.c diff --git a/testcode/div-test.c b/targettest/div-test.c similarity index 100% rename from testcode/div-test.c rename to targettest/div-test.c diff --git a/testcode/em-test.c b/targettest/em-test.c similarity index 100% rename from testcode/em-test.c rename to targettest/em-test.c diff --git a/testcode/exec-test1.c b/targettest/exec-test1.c similarity index 100% rename from testcode/exec-test1.c rename to targettest/exec-test1.c diff --git a/testcode/exec-test2.c b/targettest/exec-test2.c similarity index 100% rename from testcode/exec-test2.c rename to targettest/exec-test2.c diff --git a/testcode/fileio-test.c b/targettest/fileio-test.c similarity index 100% rename from testcode/fileio-test.c rename to targettest/fileio-test.c diff --git a/testcode/ft.c b/targettest/ft.c similarity index 100% rename from testcode/ft.c rename to targettest/ft.c diff --git a/testcode/gamate/Makefile b/targettest/gamate/Makefile similarity index 100% rename from testcode/gamate/Makefile rename to targettest/gamate/Makefile diff --git a/testcode/gamate/audiotest.s b/targettest/gamate/audiotest.s similarity index 100% rename from testcode/gamate/audiotest.s rename to targettest/gamate/audiotest.s diff --git a/testcode/gamate/cga2.chr b/targettest/gamate/cga2.chr similarity index 100% rename from testcode/gamate/cga2.chr rename to targettest/gamate/cga2.chr diff --git a/testcode/gamate/ctest.c b/targettest/gamate/ctest.c similarity index 100% rename from testcode/gamate/ctest.c rename to targettest/gamate/ctest.c diff --git a/testcode/gamate/lcdtest.s b/targettest/gamate/lcdtest.s similarity index 100% rename from testcode/gamate/lcdtest.s rename to targettest/gamate/lcdtest.s diff --git a/testcode/gamate/nachtm.c b/targettest/gamate/nachtm.c similarity index 100% rename from testcode/gamate/nachtm.c rename to targettest/gamate/nachtm.c diff --git a/testcode/getopt-test.c b/targettest/getopt-test.c similarity index 100% rename from testcode/getopt-test.c rename to targettest/getopt-test.c diff --git a/testcode/getsp.s b/targettest/getsp.s similarity index 100% rename from testcode/getsp.s rename to targettest/getsp.s diff --git a/testcode/heaptest.c b/targettest/heaptest.c similarity index 100% rename from testcode/heaptest.c rename to targettest/heaptest.c diff --git a/testcode/joy-test.c b/targettest/joy-test.c similarity index 100% rename from testcode/joy-test.c rename to targettest/joy-test.c diff --git a/testcode/moddiv-test.c b/targettest/moddiv-test.c similarity index 100% rename from testcode/moddiv-test.c rename to targettest/moddiv-test.c diff --git a/testcode/mouse-test.c b/targettest/mouse-test.c similarity index 100% rename from testcode/mouse-test.c rename to targettest/mouse-test.c diff --git a/testcode/mul-test.c b/targettest/mul-test.c similarity index 100% rename from testcode/mul-test.c rename to targettest/mul-test.c diff --git a/testcode/pce/Makefile b/targettest/pce/Makefile similarity index 100% rename from testcode/pce/Makefile rename to targettest/pce/Makefile diff --git a/testcode/pce/conio.c b/targettest/pce/conio.c similarity index 100% rename from testcode/pce/conio.c rename to targettest/pce/conio.c diff --git a/testcode/posixio-test.c b/targettest/posixio-test.c similarity index 100% rename from testcode/posixio-test.c rename to targettest/posixio-test.c diff --git a/testcode/rename-test.c b/targettest/rename-test.c similarity index 100% rename from testcode/rename-test.c rename to targettest/rename-test.c diff --git a/testcode/scanf-test.c b/targettest/scanf-test.c similarity index 100% rename from testcode/scanf-test.c rename to targettest/scanf-test.c diff --git a/testcode/seek.c b/targettest/seek.c similarity index 100% rename from testcode/seek.c rename to targettest/seek.c diff --git a/testcode/ser-test.c b/targettest/ser-test.c similarity index 100% rename from testcode/ser-test.c rename to targettest/ser-test.c diff --git a/testcode/strdup-test.c b/targettest/strdup-test.c similarity index 100% rename from testcode/strdup-test.c rename to targettest/strdup-test.c diff --git a/testcode/stroserror-test.c b/targettest/stroserror-test.c similarity index 100% rename from testcode/stroserror-test.c rename to targettest/stroserror-test.c diff --git a/testcode/strqtok-test.c b/targettest/strqtok-test.c similarity index 100% rename from testcode/strqtok-test.c rename to targettest/strqtok-test.c diff --git a/testcode/tinyshell.c b/targettest/tinyshell.c similarity index 100% rename from testcode/tinyshell.c rename to targettest/tinyshell.c diff --git a/testcode/uname-test.c b/targettest/uname-test.c similarity index 100% rename from testcode/uname-test.c rename to targettest/uname-test.c From c05a750f470e21558cc0eab561b0017c7456c52d Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 1 Oct 2020 07:25:08 -0400 Subject: [PATCH 0545/2710] Fixed some copy-&-paste typo mistakes about HuC6280's TMA mnemonic. --- src/ca65/instr.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/ca65/instr.c b/src/ca65/instr.c index 58011eb8f..d71476799 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -92,7 +92,7 @@ static void PutSEP (const InsDesc* Ins); /* Emit a SEP instruction (65816), track register sizes */ static void PutTAMn (const InsDesc* Ins); -/* Emit a TAMn instruction (HuC6280). Since this is a two byte instruction with +/* Emit a TAMn instruction (HuC6280). Because this is a two-byte instruction with ** implicit addressing mode, the opcode byte in the table is actually the ** second operand byte. The TAM instruction is the more generic form, it takes ** an immediate argument. @@ -104,9 +104,9 @@ static void PutTMA (const InsDesc* Ins); */ static void PutTMAn (const InsDesc* Ins); -/* Emit a TMAn instruction (HuC6280). Since this is a two byte instruction with +/* Emit a TMAn instruction (HuC6280). Because this is a two-byte instruction with ** implicit addressing mode, the opcode byte in the table is actually the -** second operand byte. The TAM instruction is the more generic form, it takes +** second operand byte. The TMA instruction is the more generic form, it takes ** an immediate argument. */ @@ -1093,7 +1093,7 @@ static int EvalEA (const InsDesc* Ins, EffAddr* A) A->AddrModeSet &= Ins->AddrMode; /* If we have an expression, check it and remove any addressing modes that - ** are too small for the expression size. Since we have to study the + ** are too small for the expression size. Because we have to study the ** expression anyway, do also replace it by a simpler one if possible. */ if (A->Expr) { @@ -1414,7 +1414,7 @@ static void PutSEP (const InsDesc* Ins) static void PutTAMn (const InsDesc* Ins) -/* Emit a TAMn instruction (HuC6280). Since this is a two byte instruction with +/* Emit a TAMn instruction (HuC6280). Because this is a two-byte instruction with ** implicit addressing mode, the opcode byte in the table is actually the ** second operand byte. The TAM instruction is the more generic form, it takes ** an immediate argument. @@ -1444,7 +1444,7 @@ static void PutTMA (const InsDesc* Ins) } else { /* Make sure just one bit is set */ if ((Val & (Val - 1)) != 0) { - Error ("Argument to TAM must be a power of two"); + Error ("Argument of TMA must be a power of two"); } } } @@ -1452,9 +1452,9 @@ static void PutTMA (const InsDesc* Ins) static void PutTMAn (const InsDesc* Ins) -/* Emit a TMAn instruction (HuC6280). Since this is a two byte instruction with +/* Emit a TMAn instruction (HuC6280). Because this is a two-byte instruction with ** implicit addressing mode, the opcode byte in the table is actually the -** second operand byte. The TAM instruction is the more generic form, it takes +** second operand byte. The TMA instruction is the more generic form, it takes ** an immediate argument. */ { From 4acdc9ced9ded4c37e46d2bc531bea31894c1ccc Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 3 Oct 2020 14:55:30 +0200 Subject: [PATCH 0546/2710] Fixed paramcount build. --- test/asm/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/asm/Makefile b/test/asm/Makefile index 028254b68..9b0aa582e 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -38,7 +38,7 @@ CPUDETECT_REFS := $(wildcard *-cpudetect.ref) CPUDETECT_CPUS = $(foreach ref,$(CPUDETECT_REFS),$(ref:%-cpudetect.ref=%)) CPUDETECT_BINS = $(foreach cpu,$(CPUDETECT_CPUS),$(WORKDIR)/$(cpu)-cpudetect.bin) -all: $(OPCODE_BINS) $(CPUDETECT_BINS) paramcount.o +all: $(OPCODE_BINS) $(CPUDETECT_BINS) $(WORKDIR)/paramcount.o $(WORKDIR): $(call MKDIR,$(WORKDIR)) @@ -70,8 +70,8 @@ endef # CPUDETECT_template $(foreach cpu,$(CPUDETECT_CPUS),$(eval $(call CPUDETECT_template,$(cpu)))) -paramcount.o: paramcount.s - $(CA65) -o $(WORKDIR)/paramcount.o -l $(WORKDIR)/paramcount.lst paramcount.s +$(WORKDIR)/%.o: %.s | $(WORKDIR) + $(CA65) -l $(@:.o=.lst) -o $(WORKDIR)/$@ $< clean: @$(call RMDIR,$(WORKDIR)) From b931e658117189cf62662d4919618bb0ffb00144 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sat, 26 Sep 2020 14:56:28 +0200 Subject: [PATCH 0547/2710] Fix ICE for bit-fields with typedef Fixes #1267 Avoid ICE, but treat plain int bit-fields declared via typedef as signed rather than unsigned. It is more efficient to treat them as unsigned, but this requires distinguishing int from signed int, and this is curently not done. --- src/cc65/declare.c | 9 ++++ test/misc/Makefile | 6 --- test/{misc => val}/bug1094.c | 0 test/val/bug1267.c | 79 ++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 6 deletions(-) rename test/{misc => val}/bug1094.c (100%) create mode 100644 test/val/bug1267.c diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 8623fa08f..bf27f9c90 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1468,6 +1468,15 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, /* It's a typedef */ NextToken (); TypeCopy (D->Type, Entry->Type); + /* If it's a typedef, we should actually use whether the signedness was + ** specified on the typedef, but that information has been lost. Treat the + ** signedness as being specified to work around the ICE in #1267. + ** Unforunately, this will cause plain int bit-fields defined via typedefs + ** to be treated as signed rather than unsigned. + */ + if (SignednessSpecified) { + *SignednessSpecified = 1; + } break; } } else { diff --git a/test/misc/Makefile b/test/misc/Makefile index 06046af3c..b8c578405 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -100,12 +100,6 @@ $(WORKDIR)/bug1263.$1.$2.prg: bug1263.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1263.$1.$2.prg) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) -# should compile, but gives an error -$(WORKDIR)/bug1094.$1.$2.prg: bug1094.c | $(WORKDIR) - @echo "FIXME: " $$@ "currently does not compile." - $(if $(QUIET),echo misc/bug1094.$1.$2.prg) - $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - # this one requires --std=c89, it fails with --std=c99 # it fails currently at runtime $(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) diff --git a/test/misc/bug1094.c b/test/val/bug1094.c similarity index 100% rename from test/misc/bug1094.c rename to test/val/bug1094.c diff --git a/test/val/bug1267.c b/test/val/bug1267.c new file mode 100644 index 000000000..382903594 --- /dev/null +++ b/test/val/bug1267.c @@ -0,0 +1,79 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of bit-field signedness with typedefs; see https://github.com/cc65/cc65/issues/1267 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +typedef int i16; +typedef unsigned int u16; +typedef signed int s16; + +static struct ints { + i16 i : 4; + u16 u : 4; + s16 s : 4; +} si = {1, 2, 3}; + +static void test_bitfield_typedefs (void) +{ + if (si.i != 1) { + /* Note that this is another bug that i is signed. */ + printf ("Got si.a = %d, expected 1.\n", si.i); + failures++; + } + if (si.u != 2) { + printf ("Got si.u = %u, expected 2.\n", si.u); + failures++; + } + if (si.s != 3) { + printf ("Got si.s = %d, expected 3.\n", si.s); + failures++; + } + + si.i = -1; + si.u = -2; + si.s = -3; + + /* Note that this is another bug that i is signed. */ + if (si.i != -1) { + printf ("Got si.a = %d, expected -1.\n", si.i); + failures++; + } + if (si.u != 14) { + printf ("Got si.u = %u, expected 14.\n", si.u); + failures++; + } + if (si.s != -3) { + printf ("Got si.s = %d, expected -3.\n", si.s); + failures++; + } +} + +int main (void) +{ + test_bitfield_typedefs (); + printf ("failures: %u\n", failures); + return failures; +} From fd208fdf0b6f968ba7491dcec1f53be71af08abd Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 3 Oct 2020 19:35:23 +0200 Subject: [PATCH 0548/2710] - Added support for calling subdir Makefiles for the make targets 'samples' and 'clean'. - Adjusted the 'tutorial' Makefile to actually work as expected. Note: The 'disasm' and 'geos' Makefiles don't seem to work so they are not called as of now. --- samples/Makefile | 13 +++++++++++++ samples/tutorial/Makefile | 14 +++++++------- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index 267dc5235..2d1e25475 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -150,6 +150,11 @@ else $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(SYS) -m $@.map $^ $(SYS).lib endif +# -------------------------------------------------------------------------- +# Lists of subdirectories + +DIRLIST = tutorial + # -------------------------------------------------------------------------- # Lists of executables @@ -209,10 +214,17 @@ ifndef EXELIST_$(SYS) EXELIST_$(SYS) := ${patsubst %.c,%,$(wildcard *.c)} endif +define SUBDIR_recipe + +@$(MAKE) -C $(dir) --no-print-directory $@ + +endef # SUBDIR_recipe + # -------------------------------------------------------------------------- # Rules to make the binaries and the disk samples: $(EXELIST_$(SYS)) + $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) disk: $(DISK_$(SYS)) @@ -338,3 +350,4 @@ mostlyclean: clean: mostlyclean @$(DEL) $(EXELIST_$(SYS)) $(DISK_$(SYS)) 2>$(NULLDEV) @$(DEL) multdemo.? ovrldemo.? 2>$(NULLDEV) + $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) diff --git a/samples/tutorial/Makefile b/samples/tutorial/Makefile index 8ed91697f..2c4bcb988 100644 --- a/samples/tutorial/Makefile +++ b/samples/tutorial/Makefile @@ -25,16 +25,16 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../bin/ca65*),../bin/ca65,ca65) - CC := $(if $(wildcard ../bin/cc65*),../bin/cc65,cc65) - CL := $(if $(wildcard ../bin/cl65*),../bin/cl65,cl65) - LD := $(if $(wildcard ../bin/ld65*),../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: hello +samples: hello hello: hello.c text.s $(CL) -t $(SYS) -o hello hello.c text.s - + clean: - $(RM) hello + @$(DEL) hello 2>$(NULLDEV) From a85d5330fab3ffd8053f6d6f54b46da18de766f8 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 4 Oct 2020 12:15:59 +0800 Subject: [PATCH 0549/2710] Fixed StrBuf initialization in PreparseArg(). --- src/cc65/codeent.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index f3a910652..dd2000db0 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -585,8 +585,7 @@ const char* MakeHexArg (unsigned Num) void PreparseArg (CodeEntry* E) /* Parse the argument string and memorize the result for the code entry */ { - StrBuf B; - SB_InitFromString (&B, xmalloc (strlen (E->Arg) + 1)); + StrBuf B = AUTO_STRBUF_INITIALIZER; /* Parse the argument string */ if (ParseOpcArgStr (E->Arg, &E->ArgInfo, &B, &E->ArgOff)) { From dbba5f3fc9ec1256b7226f458531b81bac25e983 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 4 Oct 2020 17:01:20 +0800 Subject: [PATCH 0550/2710] Fixed handling of %v in inline asm parser. --- src/cc65/asmstmt.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/cc65/asmstmt.c b/src/cc65/asmstmt.c index bf5a0815b..d182140fd 100644 --- a/src/cc65/asmstmt.c +++ b/src/cc65/asmstmt.c @@ -213,7 +213,9 @@ static void ParseLongArg (StrBuf* T, unsigned Arg attribute ((unused))) static void ParseGVarArg (StrBuf* T, unsigned Arg) -/* Parse the %v format specifier */ +/* Parse the %v format specifier. +** ### FIXME: Asm names should be generated in the same place. +*/ { /* Parse the symbol name parameter and check the type */ SymEntry* Sym = AsmGetSym (Arg, SC_STATIC); @@ -225,7 +227,6 @@ static void ParseGVarArg (StrBuf* T, unsigned Arg) /* Check for external linkage */ if (Sym->Flags & (SC_EXTERN | SC_STORAGE | SC_FUNC)) { /* External linkage or a function */ - /* ### FIXME: Asm name should be generated by codegen */ SB_AppendChar (T, '_'); SB_AppendStr (T, Sym->Name); } else if (Sym->Flags & SC_REGISTER) { @@ -234,9 +235,7 @@ static void ParseGVarArg (StrBuf* T, unsigned Arg) SB_AppendStr (T, Buf); } else { /* Static variable */ - char Buf [16]; - xsprintf (Buf, sizeof (Buf), "L%04X", Sym->V.L.Label); - SB_AppendStr (T, Buf); + SB_AppendStr (T, LocalDataLabelName (Sym->V.L.Label)); } } From 037a806036a1af63e5e6f0d2752f507ae2c4d235 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 4 Oct 2020 17:20:40 +0200 Subject: [PATCH 0551/2710] also rename README to readme.txt in the Makefile :) --- samples/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/Makefile b/samples/Makefile index 2d1e25475..c9d205bf1 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -330,7 +330,7 @@ install: $(INSTALL) -d $(DESTDIR)$(samplesdir)/geos $(INSTALL) -d $(DESTDIR)$(samplesdir)/tutorial $(INSTALL) -m0644 *.* $(DESTDIR)$(samplesdir) - $(INSTALL) -m0644 README $(DESTDIR)$(samplesdir) + $(INSTALL) -m0644 readme.txt $(DESTDIR)$(samplesdir) $(INSTALL) -m0644 Makefile $(DESTDIR)$(samplesdir) $(INSTALL) -m0644 geos/*.* $(DESTDIR)$(samplesdir)/geos $(INSTALL) -m0644 tutorial/*.* $(DESTDIR)$(samplesdir)/tutorial From 81550ca1ee6b7520539c047b5aaeea5a86118df4 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Mon, 24 Aug 2020 22:24:00 +0200 Subject: [PATCH 0552/2710] CS_MergeLabels: Keep labels referenced by data Partial fix for ICE in #1211. This may fix enough to allow #1049 to be fixed. When merging labels, keep the first label with a ref that has no JumpTo; this is a data segment label, used by computed gotos. The real fix is to track and rewrite labels in data, but this is more involved. --- src/cc65/codeent.h | 10 ++++++ src/cc65/codeseg.c | 37 +++++++++++++++++++-- test/{err => val}/bug1211-ice-move-refs-1.c | 3 +- 3 files changed, 47 insertions(+), 3 deletions(-) rename test/{err => val}/bug1211-ice-move-refs-1.c (91%) diff --git a/src/cc65/codeent.h b/src/cc65/codeent.h index 173118a7f..bd542cc4c 100644 --- a/src/cc65/codeent.h +++ b/src/cc65/codeent.h @@ -180,6 +180,16 @@ INLINE CodeLabel* CE_GetLabel (CodeEntry* E, unsigned Index) # define CE_GetLabel(E, Index) CollAt (&(E)->Labels, (Index)) #endif +#if defined(HAVE_INLINE) +INLINE void CE_ReplaceLabel (CodeEntry* E, CodeLabel* L, unsigned Index) +/* Replace the code label at the specified index with L */ +{ + return CollReplace (&E->Labels, L, Index); +} +#else +# define CE_ReplaceLabel(E, L, Index) CollReplace (&(E)->Labels, (L), (Index)) +#endif + void CE_MoveLabel (CodeLabel* L, CodeEntry* E); /* Move the code label L from it's former owner to the code entry E. */ diff --git a/src/cc65/codeseg.c b/src/cc65/codeseg.c index ad8a3148c..8177d4fd4 100644 --- a/src/cc65/codeseg.c +++ b/src/cc65/codeseg.c @@ -183,6 +183,37 @@ static void CS_RemoveLabelFromHash (CodeSeg* S, CodeLabel* L) +static CodeLabel* PickRefLab (CodeEntry* E) +/* Pick a reference label and move it to index 0 in E. */ +{ + unsigned I; + unsigned LabelCount = CE_GetLabelCount (E); + CHECK (LabelCount > 0); + /* Use either the first one as reference label, or a label with a Ref that has no JumpTo. + ** This is a hack to partially work around #1211. Refs with no JumpTo are labels used + ** in data segments. (They are not tracked.) If a data segment is the only reference, + ** the label will be pruned away, but the data reference will remain, causing linking to fail. + */ + CodeLabel* L0 = CE_GetLabel (E, 0); + for (I = 1; I < LabelCount; ++I) { + unsigned J; + CodeLabel* L = CE_GetLabel (E, I); + unsigned RefCount = CL_GetRefCount (L); + for (J = 0; J < RefCount; ++J) { + CodeEntry* EJ = CL_GetRef (L, J); + if (EJ->JumpTo == NULL) { + /* Move it to the beginning since it's simpler to handle the removal this way. */ + CE_ReplaceLabel (E, L, 0); + CE_ReplaceLabel (E, L0, I); + return L; + } + } + } + return L0; +} + + + /*****************************************************************************/ /* Functions for parsing instructions */ /*****************************************************************************/ @@ -935,8 +966,10 @@ void CS_MergeLabels (CodeSeg* S) continue; } - /* We have at least one label. Use the first one as reference label. */ - RefLab = CE_GetLabel (E, 0); + /* Pick a label to keep, all references will be moved to this one, and the other labels + ** will be deleted. PickRefLab moves this to index 0. + */ + RefLab = PickRefLab (E); /* Walk through the remaining labels and change references to these ** labels to a reference to the one and only label. Delete the labels diff --git a/test/err/bug1211-ice-move-refs-1.c b/test/val/bug1211-ice-move-refs-1.c similarity index 91% rename from test/err/bug1211-ice-move-refs-1.c rename to test/val/bug1211-ice-move-refs-1.c index f28d1fcbc..9be1696ee 100644 --- a/test/err/bug1211-ice-move-refs-1.c +++ b/test/val/bug1211-ice-move-refs-1.c @@ -21,7 +21,8 @@ /* Test of indirect goto with label merge ICE. https://github.com/cc65/cc65/issues/1211 - This should compile and should be moved to tests/val/ when the bug is fixed. + This test case works because CS_MergeLabels has a hack to keep the "unreferenced" label + (i.e. the one referenced in a data segment). */ #include <stdio.h> From f8c9dde989e501d11ebef2ec4befbe2857371e1f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 21 Jan 2020 10:39:19 +0800 Subject: [PATCH 0553/2710] The instruction parser can now recognize ZP locations and set the addressing mode for them. --- src/cc65/codeinfo.c | 111 +++++++++++++++++++++++++++++++++++++------- src/cc65/codeinfo.h | 6 ++- src/cc65/codeseg.c | 7 ++- src/cc65/opcodes.c | 1 + 4 files changed, 105 insertions(+), 20 deletions(-) diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index 892f4cd5f..e0cda84e9 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -349,23 +349,23 @@ static const FuncInfo FuncInfoTable[] = { /* Table with names of zero page locations used by the compiler */ static const ZPInfo ZPInfoTable[] = { - { 0, "ptr1", REG_PTR1_LO, REG_PTR1 }, - { 0, "ptr1+1", REG_PTR1_HI, REG_PTR1 }, - { 0, "ptr2", REG_PTR2_LO, REG_PTR2 }, - { 0, "ptr2+1", REG_PTR2_HI, REG_PTR2 }, - { 4, "ptr3", REG_NONE, REG_NONE }, - { 4, "ptr4", REG_NONE, REG_NONE }, - { 7, "regbank", REG_NONE, REG_NONE }, - { 0, "regsave", REG_SAVE_LO, REG_SAVE }, - { 0, "regsave+1", REG_SAVE_HI, REG_SAVE }, - { 0, "sp", REG_SP_LO, REG_SP }, - { 0, "sp+1", REG_SP_HI, REG_SP }, - { 0, "sreg", REG_SREG_LO, REG_SREG }, - { 0, "sreg+1", REG_SREG_HI, REG_SREG }, - { 0, "tmp1", REG_TMP1, REG_TMP1 }, - { 0, "tmp2", REG_NONE, REG_NONE }, - { 0, "tmp3", REG_NONE, REG_NONE }, - { 0, "tmp4", REG_NONE, REG_NONE }, + { 0, "ptr1", 2, REG_PTR1_LO, REG_PTR1 }, + { 0, "ptr1+1", 1, REG_PTR1_HI, REG_PTR1 }, + { 0, "ptr2", 2, REG_PTR2_LO, REG_PTR2 }, + { 0, "ptr2+1", 1, REG_PTR2_HI, REG_PTR2 }, + { 4, "ptr3", 2, REG_NONE, REG_NONE }, + { 4, "ptr4", 2, REG_NONE, REG_NONE }, + { 7, "regbank", 6, REG_NONE, REG_NONE }, + { 0, "regsave", 4, REG_SAVE_LO, REG_SAVE }, + { 0, "regsave+1", 3, REG_SAVE_HI, REG_SAVE }, + { 0, "sp", 2, REG_SP_LO, REG_SP }, + { 0, "sp+1", 1, REG_SP_HI, REG_SP }, + { 0, "sreg", 2, REG_SREG_LO, REG_SREG }, + { 0, "sreg+1", 1, REG_SREG_HI, REG_SREG }, + { 0, "tmp1", 1, REG_TMP1, REG_TMP1 }, + { 0, "tmp2", 1, REG_NONE, REG_NONE }, + { 0, "tmp3", 1, REG_NONE, REG_NONE }, + { 0, "tmp4", 1, REG_NONE, REG_NONE }, }; #define ZPInfoCount (sizeof(ZPInfoTable) / sizeof(ZPInfoTable[0])) @@ -377,6 +377,83 @@ static const ZPInfo ZPInfoTable[] = { +static int IsAddrOnZP (long Address) +/* Return true if the Address is within the ZP range. +** FIXME: ZP range may vary depending on the CPU settings. +*/ +{ + /* ZP in range [0x00, 0xFF] */ + return Address >= 0 && Address < 0x100; +} + + + +int IsZPArg (const char* Name) +/* Exam if the main part of the arg string indicates a ZP loc */ +{ + unsigned short ArgInfo = 0; + long Offset = 0; + StrBuf NameBuf = AUTO_STRBUF_INITIALIZER; + SymEntry* E = 0; + const ZPInfo* Info = 0; + + if (!ParseOpcArgStr (Name, &ArgInfo, &NameBuf, &Offset)) { + /* Parsing failed */ + SB_Done (&NameBuf); + return 0; + } + + if ((ArgInfo & AIF_HAS_NAME) == 0) { + /* Numeric locs have no names */ + SB_Done (&NameBuf); + + /* We can check it against the ZP boundary if it is known */ + return IsAddrOnZP (Offset); + } + + if ((ArgInfo & AIF_BUILTIN) != 0) { + /* Search for the name in the list of builtin ZPs */ + Info = GetZPInfo (SB_GetConstBuf (&NameBuf)); + + SB_Done (&NameBuf); + + /* Do we know the ZP? */ + if (Info != 0) { + /* Use the information we have */ + return Offset >= 0 && Offset < (int)Info->Size; + } + + /* Assume it be non-ZP */ + return 0; + } + + if ((ArgInfo & AIF_EXTERNAL) == 0) { + /* We don't support local variables on ZP */ + SB_Done (&NameBuf); + return 0; + } + + /* Search for the symbol in the global symbol table skipping the underline + ** in its name. + */ + E = FindGlobalSym (SB_GetConstBuf (&NameBuf) + 1); + + SB_Done (&NameBuf); + + /* We are checking the offset against the symbol size rather than the actual + ** zeropage boundary, since we can't magically ensure that until linking and + ** can only trust the user in writing the correct code for now. + */ + if (E != 0 && (E->Flags & SC_ZEROPAGE) != 0) { + return Offset >= 0 && (unsigned)Offset < CheckedSizeOf (E->Type); + } + + /* Not found on ZP */ + return 0; +} + + + static int CompareFuncInfo (const void* Key, const void* Info) /* Compare function for bsearch */ { diff --git a/src/cc65/codeinfo.h b/src/cc65/codeinfo.h index 32bc5dd9c..88e26cdf4 100644 --- a/src/cc65/codeinfo.h +++ b/src/cc65/codeinfo.h @@ -119,7 +119,8 @@ struct RegContents; typedef struct ZPInfo ZPInfo; struct ZPInfo { unsigned char Len; /* Length of the following string */ - char Name[11]; /* Name of zero page symbol */ + char Name[10]; /* Name of zero page symbol */ + unsigned char Size; /* Maximum buffer size of this register */ unsigned short ByteUse; /* Register info for this symbol */ unsigned short WordUse; /* Register info for 16 bit access */ }; @@ -162,6 +163,9 @@ typedef enum { +int IsZPArg (const char* Arg); +/* Exam if the main part of the arg string indicates a ZP loc */ + fncls_t GetFuncInfo (const char* Name, unsigned int* Use, unsigned int* Chg); /* For the given function, lookup register information and store it into ** the given variables. If the function is unknown, assume it will use and diff --git a/src/cc65/codeseg.c b/src/cc65/codeseg.c index 8177d4fd4..0626f3d18 100644 --- a/src/cc65/codeseg.c +++ b/src/cc65/codeseg.c @@ -403,7 +403,7 @@ static CodeEntry* ParseInsn (CodeSeg* S, LineInfo* LI, const char* L) if ((OPC->Info & OF_BRA) != 0) { /* Branch */ AM = AM65_BRA; - } else if (GetZPInfo(Arg) != 0) { + } else if (IsZPArg (Arg)) { AM = AM65_ZP; } else { /* Check for subroutine call to local label */ @@ -424,12 +424,15 @@ static CodeEntry* ParseInsn (CodeSeg* S, LineInfo* LI, const char* L) Reg = toupper (*L); L = SkipSpace (L+1); if (Reg == 'X') { - if (GetZPInfo(Arg) != 0) { + if (IsZPArg (Arg)) { AM = AM65_ZPX; } else { AM = AM65_ABSX; } } else if (Reg == 'Y') { + /* On 6502 only LDX and STX support AM65_ZPY. + ** We just play it simple and safe for now. + */ AM = AM65_ABSY; } else { Error ("ASM code error: syntax error"); diff --git a/src/cc65/opcodes.c b/src/cc65/opcodes.c index 3c02c84c4..86b904df9 100644 --- a/src/cc65/opcodes.c +++ b/src/cc65/opcodes.c @@ -649,6 +649,7 @@ unsigned GetInsnSize (opc_t OPC, am_t AM) case AM65_IMM: return 2; case AM65_ZP: return 2; case AM65_ZPX: return 2; + case AM65_ZPY: return 2; case AM65_ABS: return 3; case AM65_ABSX: return 3; case AM65_ABSY: return 3; From e58c84acf7958c7e21879fea9daceef423da2e6e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 21 Jan 2020 10:39:19 +0800 Subject: [PATCH 0554/2710] Support for optionally specifying address size for segments with: #pragma ***-name([push,] "name"[, "addrsize"]) where "addrsize" is any addressing size supported in ca65. --- src/cc65/codegen.c | 12 +++++- src/cc65/main.c | 6 +++ src/cc65/pragma.c | 30 ++++++++++++++- src/cc65/segments.c | 90 +++++++++++++++++++++++++++++++++++++++++++++ src/cc65/segments.h | 13 +++++++ 5 files changed, 148 insertions(+), 3 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index bc85ba1de..539309283 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -39,6 +39,7 @@ #include <stdarg.h> /* common */ +#include "addrsize.h" #include "check.h" #include "cpu.h" #include "inttypes.h" @@ -260,6 +261,9 @@ void g_usebss (void) void g_segname (segment_t Seg) /* Emit the name of a segment if necessary */ { + unsigned char AddrSize; + const char* Name; + /* Emit a segment directive for the data style segments */ DataSeg* S; switch (Seg) { @@ -269,7 +273,13 @@ void g_segname (segment_t Seg) default: S = 0; break; } if (S) { - DS_AddLine (S, ".segment\t\"%s\"", GetSegName (Seg)); + Name = GetSegName (Seg); + AddrSize = GetSegAddrSize (Name); + if (AddrSize != ADDR_SIZE_INVALID) { + DS_AddLine (S, ".segment\t\"%s\": %s", Name, AddrSizeToStr (AddrSize)); + } else { + DS_AddLine (S, ".segment\t\"%s\"", Name); + } } } diff --git a/src/cc65/main.c b/src/cc65/main.c index 26dd721be..fabd71ef7 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -897,6 +897,9 @@ int main (int argc, char* argv[]) /* Initialize the default segment names */ InitSegNames (); + /* Initialize the segment address sizes table */ + InitSegAddrSizes (); + /* Initialize the include search paths */ InitIncludePaths (); @@ -1089,6 +1092,9 @@ int main (int argc, char* argv[]) /* Done with tracked string buffer allocation */ DoneDiagnosticStrBufs (); + /* Free up the segment address sizes table */ + DoneSegAddrSizes (); + /* Return an apropriate exit code */ return (ErrorCount > 0)? EXIT_FAILURE : EXIT_SUCCESS; } diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index c614bbfdd..cf463a832 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -37,6 +37,7 @@ #include <string.h> /* common */ +#include "addrsize.h" #include "chartype.h" #include "segnames.h" #include "tgttrans.h" @@ -389,7 +390,9 @@ static void SegNamePragma (StrBuf* B, segment_t Seg) /* Handle a pragma that expects a segment name parameter */ { const char* Name; + unsigned char AddrSize = ADDR_SIZE_INVALID; StrBuf S = AUTO_STRBUF_INITIALIZER; + StrBuf A = AUTO_STRBUF_INITIALIZER; int Push = 0; /* Check for the "push" or "pop" keywords */ @@ -430,13 +433,35 @@ static void SegNamePragma (StrBuf* B, segment_t Seg) goto ExitPoint; } - /* Get the string */ + /* Get the name string of the segment */ Name = SB_GetConstBuf (&S); /* Check if the name is valid */ if (ValidSegName (Name)) { - /* Set the new name */ + /* Skip the following comma */ + SB_SkipWhite (B); + if (SB_Peek (B) == ',') { + SB_Skip (B); + SB_SkipWhite (B); + + /* A string argument must follow */ + if (!GetString (B, &A)) { + goto ExitPoint; + } + + /* Get the address size for the segment */ + AddrSize = AddrSizeFromStr (SB_GetConstBuf (&A)); + + /* Set the address size for the segment if valid */ + if (AddrSize != ADDR_SIZE_INVALID) { + SetSegAddrSize (Name, AddrSize); + } else { + Warning ("Invalid address size for segment!"); + } + } + + /* Set the new name and optionally address size */ if (Push) { PushSegName (Seg, Name); } else { @@ -460,6 +485,7 @@ static void SegNamePragma (StrBuf* B, segment_t Seg) ExitPoint: /* Call the string buf destructor */ SB_Done (&S); + SB_Done (&A); } diff --git a/src/cc65/segments.c b/src/cc65/segments.c index 7a9e32eb8..8283b9da5 100644 --- a/src/cc65/segments.c +++ b/src/cc65/segments.c @@ -37,6 +37,7 @@ #include <string.h> /* common */ +#include "addrsize.h" #include "chartype.h" #include "check.h" #include "coll.h" @@ -61,6 +62,13 @@ +/* Table struct for address sizes of segments */ +typedef struct { + StrBuf Name; + unsigned char AddrSize; +} SegAddrSize_t; + + /* Pointer to the current segment list. Output goes here. */ Segments* CS = 0; @@ -70,6 +78,9 @@ Segments* GS = 0; /* Actual names for the segments */ static StrStack SegmentNames[SEG_COUNT]; +/* Address size for the segments */ +static Collection SegmentAddrSizes; + /* We're using a collection for the stack instead of a linked list. Since ** functions may not be nested (at least in the current implementation), the ** maximum stack depth is 2, so there is not really a need for a better @@ -85,6 +96,85 @@ static Collection SegmentStack = STATIC_COLLECTION_INITIALIZER; +void InitSegAddrSizes (void) +/* Initialize the segment address sizes */ +{ + InitCollection (&SegmentAddrSizes); +} + + + +void DoneSegAddrSizes (void) +/* Free the segment address sizes */ +{ + SegAddrSize_t* A; + int I; + for (I = 0; I < (int)CollCount (&SegmentAddrSizes); ++I) { + A = CollAtUnchecked (&SegmentAddrSizes, I); + SB_Done (&A->Name); + xfree (A); + } + DoneCollection (&SegmentAddrSizes); +} + + + +static SegAddrSize_t* FindSegAddrSize (const char* Name) +/* Find already specified address size for a segment by name. +** Return the found struct or 0 if not found. +*/ +{ + SegAddrSize_t* A; + int I; + for (I = 0; I < (int)CollCount (&SegmentAddrSizes); ++I) { + A = CollAtUnchecked (&SegmentAddrSizes, I); + if (A && strcmp (SB_GetConstBuf (&A->Name), Name) == 0) { + return A; + } + } + return 0; +} + + + +void SetSegAddrSize (const char* Name, unsigned char AddrSize) +/* Set the address size for a segment */ +{ + SegAddrSize_t* A = FindSegAddrSize (Name); + if (!A) { + /* New one */ + A = xmalloc (sizeof (SegAddrSize_t)); + SB_Init (&A->Name); + SB_CopyStr (&A->Name, Name); + SB_Terminate (&A->Name); + CollAppend (&SegmentAddrSizes, A); + } else { + /* Check for mismatching address sizes */ + if (A->AddrSize != AddrSize) { + Warning ("Segment address size changed from last time!"); + } + } + + /* Set the address size anyway */ + A->AddrSize = AddrSize; +} + + + +unsigned char GetSegAddrSize (const char* Name) +/* Get the address size of the given segment. +** Return ADDR_SIZE_INVALID if not found. +*/ +{ + SegAddrSize_t* A = FindSegAddrSize (Name); + if (A) { + return A->AddrSize; + } + return ADDR_SIZE_INVALID; +} + + + void InitSegNames (void) /* Initialize the segment names */ { diff --git a/src/cc65/segments.h b/src/cc65/segments.h index 777073559..91d702df6 100644 --- a/src/cc65/segments.h +++ b/src/cc65/segments.h @@ -103,6 +103,19 @@ extern Segments* GS; /*****************************************************************************/ +void InitSegAddrSizes (void); +/* Initialize the segment address sizes */ + +void DoneSegAddrSizes (void); +/* Free the segment address sizes */ + +void SetSegAddrSize (const char* Name, unsigned char AddrSize); +/* Set the address size for a segment */ + +unsigned char GetSegAddrSize (const char* Name); +/* Get the address size of the given segment. +** Return ADDR_SIZE_INVALID if not found. +*/ void InitSegNames (void); /* Initialize the segment names */ From 262c4235dfd41eead0e5702c0510b7ed72fc6962 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 21 Jan 2020 10:50:12 +0800 Subject: [PATCH 0555/2710] Symbols in ZP segments will use '.exportzp' instead of '.export' if exported. --- src/cc65/compile.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 00e78c2bd..ec90e4b2d 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -37,6 +37,7 @@ #include <time.h> /* common */ +#include "addrsize.h" #include "debugflag.h" #include "segnames.h" #include "version.h" @@ -275,6 +276,17 @@ static void Parse (void) } Entry->V.BssName = xstrdup (bssName); + /* This is to make the automatical zeropage setting of the symbol + ** work right. + */ + g_usebss (); + } + } + + /* Make the symbol zeropage according to the segment address size */ + if ((Entry->Flags & SC_EXTERN) != 0) { + if (GetSegAddrSize (GetSegName (CS->CurDSeg)) == ADDR_SIZE_ZP) { + Entry->Flags |= SC_ZEROPAGE; /* Check for enum forward declaration. ** Warn about it when extensions are not allowed. */ From 4905329ff6b934a3e14415f35ecf3d7c4b6fdd8b Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 12 Oct 2020 08:33:45 -0400 Subject: [PATCH 0556/2710] Fixed the misspelling of "height" in a GEOS header. --- include/geos/gstruct.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/geos/gstruct.h b/include/geos/gstruct.h index 9e5f0ddda..6d9cb1f14 100644 --- a/include/geos/gstruct.h +++ b/include/geos/gstruct.h @@ -126,8 +126,8 @@ struct VLIR_info { /* VLIR information */ }; struct process { /* process info, declare table of that type */ - unsigned pointer; /* (like: struct process proctab[2]=... */ - unsigned jiffies; /* last entry HAVE TO BE {0,0} */ + unsigned pointer; /* (like: struct process proctab[2]= ... */ + unsigned jiffies; /* last entry MUST BE {0,0} */ }; struct iconpic { /* icon/encoded bitmap description */ @@ -135,7 +135,7 @@ struct iconpic { /* icon/encoded bitmap description */ char x; /* position in cards (*8 pixels) */ char y; char width; /* in cards */ - char heigth; /* in lines (pixels) */ + char height; /* in lines (pixels) */ }; struct icondef { /* icon definition for DoIcons */ @@ -143,7 +143,7 @@ struct icondef { /* icon definition for DoIcons */ char x; /* position in cards (*8 pixels) */ char y; char width; /* of icon (in cards) */ - char heigth; /* of icon in lines (pixels) */ + char height; /* of icon in lines (pixels) */ unsigned proc_ptr; /* pointer to function handling that icon */ }; From e72e44d14fa713eef4238f9ad1066c6c9d890a78 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 13 Oct 2020 07:55:20 -0400 Subject: [PATCH 0557/2710] Shortenned the VIC-20's cputc() by 17 bytes. Changed to a modified table look-up method to convert PetSCII to screen-codes. --- libsrc/vic20/cputc.s | 81 ++++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 40 deletions(-) diff --git a/libsrc/vic20/cputc.s b/libsrc/vic20/cputc.s index 9e818032e..a6919ceaf 100644 --- a/libsrc/vic20/cputc.s +++ b/libsrc/vic20/cputc.s @@ -1,5 +1,6 @@ ; -; Ullrich von Bassewitz, 06.08.1998 +; 1998-08-06, Ullrich von Bassewitz +; 2020-10-09, Greg King ; ; void cputcxy (unsigned char x, unsigned char y, char c); ; void cputc (char c); @@ -39,69 +40,64 @@ _cputcxy: jsr gotoxy ; Set cursor, drop x and y pla ; Restore C -; Plot a character - also used as internal function +; Plot a character -- also used as an internal function -_cputc: cmp #$0A ; CR? - bne L1 - lda #0 - sta CURS_X - beq plot ; Recalculate pointers - -L1: cmp #$0D ; LF? +_cputc: cmp #$0D ; Is it CBM '\n'? beq newline ; Recalculate pointers + cmp #$0A ; Is it CBM '\r'? + beq cr -; Printable char of some sort +; Printable char. of some sort +; Convert it from PetSCII into a screen-code - cmp #' ' - bcc cputdirect ; Other control char + cmp #$FF ; BASIC token? + bne convert + lda #$DE ; Pi symbol +convert: tay - bmi L10 - cmp #$60 - bcc L2 - and #$DF - bne cputdirect ; Branch always -L2: and #$3F + lsr a ; Divide by 256/8 + lsr a + lsr a + lsr a + lsr a + tax ; .X = %00000xxx + tya + eor pet_to_screen,x cputdirect: jsr putchar ; Write the character to the screen -; Advance cursor position +; Advance the cursor position advance: iny cpy #XSIZE bne L3 - jsr newline ; new line - ldy #0 ; + cr + jsr newline ; Wrap around + +cr: ldy #$00 ; Do carriage-return L3: sty CURS_X rts + +; Move down by one full screen-line. Note: this routine doesn't scroll. +; +; (Both screen RAM and color RAM are aligned to page boundaries. +; Therefore, the lower bytes of their addresses have the same values. +; Shorten the code by taking advantage of that fact.) + newline: clc lda #XSIZE adc SCREEN_PTR sta SCREEN_PTR - bcc L4 - inc SCREEN_PTR+1 - clc -L4: lda #XSIZE - adc CRAM_PTR sta CRAM_PTR bcc L5 + inc SCREEN_PTR+1 inc CRAM_PTR+1 L5: inc CURS_Y rts -; Handle character if high bit set - -L10: and #$7F - cmp #$7F ; PI? - bne L11 - lda #$5E ; Load screen code for PI -L11: ora #$40 - bne cputdirect - - ; Set cursor position, calculate RAM pointers @@ -111,14 +107,19 @@ plot: ldy CURS_X jmp PLOT ; Set the new cursor - -; Write one character to the screen without doing anything else, return X -; position in Y +; Write one character to the screen without doing anything else, +; return the X position in .Y putchar: ora RVS ; Set revers bit ldy CURS_X - sta (SCREEN_PTR),y ; Set char + sta (SCREEN_PTR),y ; Set char. lda CHARCOLOR sta (CRAM_PTR),y ; Set color rts + + + .rodata +pet_to_screen: + .byte %10000000,%00000000,%01000000,%00100000 ; PetSCII -> screen-code + .byte %01000000,%11000000,%10000000,%10000000 From 095de4ea52c2b488182645fda8ae0b4f7ac5e1c8 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 15 Oct 2020 12:54:01 +0200 Subject: [PATCH 0558/2710] Write o65 files as SEQ files. --- samples/Makefile | 18 ++++++++++++------ targettest/Makefile | 16 +++++++++++----- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index c9d205bf1..e66850d35 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -260,17 +260,23 @@ endif # Rule to make a CBM disk with all samples. Needs the c1541 program that comes # with the VICE emulator. -define D64_WRITE_recipe +define D64_WRITE_PRG_recipe -$(C1541) -attach $@ -write "$(subst ?,$(SPACE),$(file))" $(notdir $(file)) >$(NULLDEV) +$(C1541) -attach $@ -write "$(subst ?,$(SPACE),$(file))" $(notdir $(file)),p >$(NULLDEV) -endef # D64_WRITE_recipe +endef # D64_WRITE_PRG_recipe + +define D64_WRITE_SEQ_recipe + +$(C1541) -attach $@ -write "$(subst ?,$(SPACE),$(file))" $(notdir $(file)),s >$(NULLDEV) + +endef # D64_WRITE_SEQ_recipe samples.d64: samples @$(C1541) -format samples,AA d64 $@ >$(NULLDEV) - $(foreach file,$(EXELIST_$(SYS)),$(D64_WRITE_recipe)) - $(foreach file,$(OVERLAYLIST),$(D64_WRITE_recipe)) - $(foreach file,$(EMD) $(MOU) $(TGI),$(D64_WRITE_recipe)) + $(foreach file,$(EXELIST_$(SYS)),$(D64_WRITE_PRG_recipe)) + $(foreach file,$(OVERLAYLIST),$(D64_WRITE_PRG_recipe)) + $(foreach file,$(EMD) $(MOU) $(TGI),$(D64_WRITE_SEQ_recipe)) # -------------------------------------------------------------------------- # Rule to make an Apple II disk with all samples. Needs the AppleCommander diff --git a/targettest/Makefile b/targettest/Makefile index 33f725f6a..f3694335c 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -321,16 +321,22 @@ endif # Rule to make a CBM disk with all testcode. Needs the c1541 program that comes # with the VICE emulator. -define D64_WRITE_recipe +define D64_WRITE_PRG_recipe -$(C1541) -attach $@ -write "$(subst ?,$(SPACE),$(file))" $(notdir $(file)) >$(NULLDEV) +$(C1541) -attach $@ -write "$(subst ?,$(SPACE),$(file))" $(notdir $(file)),p >$(NULLDEV) -endef # D64_WRITE_recipe +endef # D64_WRITE_PRG_recipe + +define D64_WRITE_SEQ_recipe + +$(C1541) -attach $@ -write "$(subst ?,$(SPACE),$(file))" $(notdir $(file)),s >$(NULLDEV) + +endef # D64_WRITE_SEQ_recipe testcode.d64: testcode @$(C1541) -format testcode,AA d64 $@ >$(NULLDEV) - $(foreach file,$(EXELIST_$(SYS)),$(D64_WRITE_recipe)) -# $(foreach file,$(EMD) $(MOU) $(TGI),$(D64_WRITE_recipe)) + $(foreach file,$(EXELIST_$(SYS)),$(D64_WRITE_PRG_recipe)) +# $(foreach file,$(EMD) $(MOU) $(TGI),$(D64_WRITE_SEQ_recipe)) # -------------------------------------------------------------------------- # Rule to make an Apple II disk with all testcode. Needs the AppleCommander From f60af0301afed94a61036c5500934a2f5b977152 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 15 Oct 2020 18:35:54 +0200 Subject: [PATCH 0559/2710] fix non working Makefiles --- samples/Makefile | 3 ++- samples/disasm/Makefile | 12 ++++++------ samples/geos/Makefile | 12 ++++++------ samples/geos/grc/Makefile | 12 +++++++++++- 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index e66850d35..6e89cb802 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -153,7 +153,8 @@ endif # -------------------------------------------------------------------------- # Lists of subdirectories -DIRLIST = tutorial +# disasm depends on cpp +DIRLIST = tutorial geos # -------------------------------------------------------------------------- # Lists of executables diff --git a/samples/disasm/Makefile b/samples/disasm/Makefile index 61b37e314..5f19e943d 100644 --- a/samples/disasm/Makefile +++ b/samples/disasm/Makefile @@ -24,11 +24,11 @@ ifdef CC65_HOME LD = $(CC65_HOME)/bin/ld65 DA = $(CC65_HOME)/bin/da65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) - DA := $(if $(wildcard ../../../bin/da65*),../../../bin/da65,da65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) + DA := $(if $(wildcard ../../bin/da65*),../../bin/da65,da65) endif CPP = cpp @@ -39,7 +39,7 @@ DAIS = fixed.dai bank0.dai bank1.dai .SUFFIXES: .da .dai .s -all: image.bin $(ASMS) +samples: image.bin $(ASMS) $(DAIS): fixed.da diff --git a/samples/geos/Makefile b/samples/geos/Makefile index 32a28e118..cc0d52a4e 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -26,17 +26,17 @@ ifdef CC65_HOME LD = $(CC65_HOME)/bin/ld65 SP = $(CC65_HOME)/bin/sp65 else - AS := $(if $(wildcard ../bin/ca65*),../bin/ca65,ca65) - CC := $(if $(wildcard ../bin/cc65*),../bin/cc65,cc65) - CL := $(if $(wildcard ../bin/cl65*),../bin/cl65,cl65) - LD := $(if $(wildcard ../bin/ld65*),../bin/ld65,ld65) - SP := $(if $(wildcard ../bin/sp65*),../bin/sp65,sp65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) + SP := $(if $(wildcard ../../bin/sp65*),../../bin/sp65,sp65) endif # omitted: dialog.c grphstr.c inittab.c menu.c # TODO: geosconio.cvt rmvprot.cvt -all: bitmap-demo.cvt filesel.cvt geosver.cvt getid.cvt hello1.cvt hello2.cvt \ +samples: bitmap-demo.cvt filesel.cvt geosver.cvt getid.cvt hello1.cvt hello2.cvt \ overlay-demo.cvt vector-demo.cvt yesno.cvt bitmap.c: logo.pcx diff --git a/samples/geos/grc/Makefile b/samples/geos/grc/Makefile index 793506890..0e5eabd81 100644 --- a/samples/geos/grc/Makefile +++ b/samples/geos/grc/Makefile @@ -29,7 +29,16 @@ else GRC := $(if $(wildcard ../../../bin/grc65*),../../../bin/grc65,grc65) endif -all: test.s vlir.cvt +DIRLIST = grc + +define SUBDIR_recipe + +@$(MAKE) -C $(dir) --no-print-directory $@ + +endef # SUBDIR_recipe + +samples: test.s vlir.cvt + $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) test.s: test.grc $(GRC) -s test.s test.grc @@ -50,3 +59,4 @@ clean: $(RM) test.s test.h $(RM) vlir.s vlir.cvt vlir.c vlir.h $(RM) *.o + $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) From a0dc7cd9e471be3864cddc67ea1d7e13f073065a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 15 Oct 2020 18:41:17 +0200 Subject: [PATCH 0560/2710] fix grc example, fix makefiles to compile grc example correctly --- samples/geos/Makefile | 11 +++++++++++ samples/geos/grc/Makefile | 10 ---------- samples/geos/grc/vlir0.s | 8 ++++---- samples/geos/grc/vlir1.s | 8 ++++---- samples/geos/grc/vlir2.s | 8 ++++---- 5 files changed, 23 insertions(+), 22 deletions(-) diff --git a/samples/geos/Makefile b/samples/geos/Makefile index cc0d52a4e..cbc1e9885 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -33,11 +33,20 @@ else SP := $(if $(wildcard ../../bin/sp65*),../../bin/sp65,sp65) endif +DIRLIST = grc + +define SUBDIR_recipe + +@$(MAKE) -C $(dir) --no-print-directory $@ + +endef # SUBDIR_recipe + # omitted: dialog.c grphstr.c inittab.c menu.c # TODO: geosconio.cvt rmvprot.cvt samples: bitmap-demo.cvt filesel.cvt geosver.cvt getid.cvt hello1.cvt hello2.cvt \ overlay-demo.cvt vector-demo.cvt yesno.cvt + $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) bitmap.c: logo.pcx $(SP) -r logo.pcx -c geos-bitmap -w bitmap.c,ident=bitmap @@ -77,6 +86,8 @@ yesno.cvt: yesnores.grc yesno.c clean: + $(RM) overlay-demores.h $(RM) bitmap.c $(RM) *.cvt $(RM) *.map + $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) diff --git a/samples/geos/grc/Makefile b/samples/geos/grc/Makefile index 0e5eabd81..4dbe51d10 100644 --- a/samples/geos/grc/Makefile +++ b/samples/geos/grc/Makefile @@ -29,16 +29,7 @@ else GRC := $(if $(wildcard ../../../bin/grc65*),../../../bin/grc65,grc65) endif -DIRLIST = grc - -define SUBDIR_recipe - -@$(MAKE) -C $(dir) --no-print-directory $@ - -endef # SUBDIR_recipe - samples: test.s vlir.cvt - $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) test.s: test.grc $(GRC) -s test.s test.grc @@ -59,4 +50,3 @@ clean: $(RM) test.s test.h $(RM) vlir.s vlir.cvt vlir.c vlir.h $(RM) *.o - $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) diff --git a/samples/geos/grc/vlir0.s b/samples/geos/grc/vlir0.s index a54d406df..fd869835c 100644 --- a/samples/geos/grc/vlir0.s +++ b/samples/geos/grc/vlir0.s @@ -5,10 +5,10 @@ ; include some GEOS defines - .include "../../libsrc/geos-common/const.inc" - .include "../../libsrc/geos-cbm/jumptab.inc" - .include "../../libsrc/geos-cbm/geossym.inc" - .include "../../libsrc/geos-common/geosmac.inc" + .include "../../../libsrc/geos-common/const.inc" + .include "../../../libsrc/geos-cbm/jumptab.inc" + .include "../../../libsrc/geos-cbm/geossym.inc" + .include "../../../libsrc/geos-common/geosmac.inc" ; import load addresses for all VLIR chains ; these labels are defined upon linking with ld65 diff --git a/samples/geos/grc/vlir1.s b/samples/geos/grc/vlir1.s index 6ee3cca37..170442af7 100644 --- a/samples/geos/grc/vlir1.s +++ b/samples/geos/grc/vlir1.s @@ -5,10 +5,10 @@ ; include some GEOS defines - .include "../../libsrc/geos-common/const.inc" - .include "../../libsrc/geos-cbm/jumptab.inc" - .include "../../libsrc/geos-cbm/geossym.inc" - .include "../../libsrc/geos-common/geosmac.inc" + .include "../../../libsrc/geos-common/const.inc" + .include "../../../libsrc/geos-cbm/jumptab.inc" + .include "../../../libsrc/geos-cbm/geossym.inc" + .include "../../../libsrc/geos-common/geosmac.inc" ; export names of functions that will be used in the main program diff --git a/samples/geos/grc/vlir2.s b/samples/geos/grc/vlir2.s index 4c02983ff..8dfb79464 100644 --- a/samples/geos/grc/vlir2.s +++ b/samples/geos/grc/vlir2.s @@ -5,10 +5,10 @@ ; similar to vlir1.s except the fact that this is chain #2 - .include "../../libsrc/geos-common/const.inc" - .include "../../libsrc/geos-cbm/jumptab.inc" - .include "../../libsrc/geos-cbm/geossym.inc" - .include "../../libsrc/geos-common/geosmac.inc" + .include "../../../libsrc/geos-common/const.inc" + .include "../../../libsrc/geos-cbm/jumptab.inc" + .include "../../../libsrc/geos-cbm/geossym.inc" + .include "../../../libsrc/geos-common/geosmac.inc" .export OVERLAY2_Function1 .export OVERLAY2_Function2 From 6920b8be78c1a60b141de123dbd54c78438fd54c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 15 Oct 2020 18:53:56 +0200 Subject: [PATCH 0561/2710] $(RM) abc -> @$(DEL) abc 2>$(NULLDEV) --- samples/disasm/Makefile | 6 +++--- samples/geos/Makefile | 8 ++++---- samples/geos/grc/Makefile | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/samples/disasm/Makefile b/samples/disasm/Makefile index 5f19e943d..0ae2e4b00 100644 --- a/samples/disasm/Makefile +++ b/samples/disasm/Makefile @@ -53,7 +53,7 @@ image.bin: image.s image.cfg $(CL) -t none -C image.cfg -o image.bin image.s clean: - $(RM) $(ASMS) - $(RM) $(DAIS) - $(RM) image.bin + $(DEL) $(ASMS) 2>$(NULLDEV) + $(DEL) $(DAIS) 2>$(NULLDEV) + $(DEL) image.bin 2>$(NULLDEV) diff --git a/samples/geos/Makefile b/samples/geos/Makefile index cbc1e9885..2ae53b0bd 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -86,8 +86,8 @@ yesno.cvt: yesnores.grc yesno.c clean: - $(RM) overlay-demores.h - $(RM) bitmap.c - $(RM) *.cvt - $(RM) *.map + $(DEL) overlay-demores.h 2>$(NULLDEV) + $(DEL) bitmap.c 2>$(NULLDEV) + $(DEL) *.cvt 2>$(NULLDEV) + $(DEL) *.map 2>$(NULLDEV) $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) diff --git a/samples/geos/grc/Makefile b/samples/geos/grc/Makefile index 4dbe51d10..5b95d9a36 100644 --- a/samples/geos/grc/Makefile +++ b/samples/geos/grc/Makefile @@ -47,6 +47,6 @@ vlir.cvt: vlir.grc vlir0.s vlir1.s vlir2.s # $(CL) -t geos-cbm -o vlir.cvt vlir.grc vlir0.s vlir1.s vlir2.s clean: - $(RM) test.s test.h - $(RM) vlir.s vlir.cvt vlir.c vlir.h - $(RM) *.o + $(DEL) test.s test.h 2>$(NULLDEV) + $(DEL) vlir.s vlir.cvt vlir.c vlir.h 2>$(NULLDEV) + $(DEL) *.o 2>$(NULLDEV) From b773bb9ded55f02ab8ddd874aefa449bb529af26 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 15 Oct 2020 19:34:40 +0200 Subject: [PATCH 0562/2710] some more $(RM) vs $(DEL) fixing --- samples/disasm/Makefile | 6 +++--- samples/geos/Makefile | 8 ++++---- samples/geos/grc/Makefile | 6 +++--- targettest/accelerator/Makefile | 2 +- targettest/apple2/Makefile | 8 ++++---- targettest/atari/Makefile | 18 +++++++++--------- targettest/atari5200/Makefile | 2 +- targettest/cbm/Makefile | 2 +- targettest/gamate/Makefile | 6 +++--- targettest/pce/Makefile | 2 +- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/samples/disasm/Makefile b/samples/disasm/Makefile index 0ae2e4b00..f1d93f5da 100644 --- a/samples/disasm/Makefile +++ b/samples/disasm/Makefile @@ -53,7 +53,7 @@ image.bin: image.s image.cfg $(CL) -t none -C image.cfg -o image.bin image.s clean: - $(DEL) $(ASMS) 2>$(NULLDEV) - $(DEL) $(DAIS) 2>$(NULLDEV) - $(DEL) image.bin 2>$(NULLDEV) + @$(DEL) $(ASMS) 2>$(NULLDEV) + @$(DEL) $(DAIS) 2>$(NULLDEV) + @$(DEL) image.bin 2>$(NULLDEV) diff --git a/samples/geos/Makefile b/samples/geos/Makefile index 2ae53b0bd..00841ee8f 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -86,8 +86,8 @@ yesno.cvt: yesnores.grc yesno.c clean: - $(DEL) overlay-demores.h 2>$(NULLDEV) - $(DEL) bitmap.c 2>$(NULLDEV) - $(DEL) *.cvt 2>$(NULLDEV) - $(DEL) *.map 2>$(NULLDEV) + @$(DEL) overlay-demores.h 2>$(NULLDEV) + @$(DEL) bitmap.c 2>$(NULLDEV) + @$(DEL) *.cvt 2>$(NULLDEV) + @$(DEL) *.map 2>$(NULLDEV) $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) diff --git a/samples/geos/grc/Makefile b/samples/geos/grc/Makefile index 5b95d9a36..81f9ca045 100644 --- a/samples/geos/grc/Makefile +++ b/samples/geos/grc/Makefile @@ -47,6 +47,6 @@ vlir.cvt: vlir.grc vlir0.s vlir1.s vlir2.s # $(CL) -t geos-cbm -o vlir.cvt vlir.grc vlir0.s vlir1.s vlir2.s clean: - $(DEL) test.s test.h 2>$(NULLDEV) - $(DEL) vlir.s vlir.cvt vlir.c vlir.h 2>$(NULLDEV) - $(DEL) *.o 2>$(NULLDEV) + @$(DEL) test.s test.h 2>$(NULLDEV) + @$(DEL) vlir.s vlir.cvt vlir.c vlir.h 2>$(NULLDEV) + @$(DEL) *.o 2>$(NULLDEV) diff --git a/targettest/accelerator/Makefile b/targettest/accelerator/Makefile index f4f651535..527b13f33 100644 --- a/targettest/accelerator/Makefile +++ b/targettest/accelerator/Makefile @@ -55,4 +55,4 @@ turbomaster-test.prg: turbomaster-test.c $(CL) -t c64 turbomaster-test.c -o turbomaster-test.prg clean: - $(RM) *.prg + @$(DEL) *.prg 2>$(NULLDEV) diff --git a/targettest/apple2/Makefile b/targettest/apple2/Makefile index 0020b4ec5..f8167b47c 100644 --- a/targettest/apple2/Makefile +++ b/targettest/apple2/Makefile @@ -65,7 +65,7 @@ dhgrshow: dhgrshow.c $(CL) -Oirs -t apple2enh --start-addr 0x4000 -m dhgrshow.map $^ clean: - $(RM) hgr.dsk dhgr.dsk - $(RM) hgrshow hgrshow.map - $(RM) hgrtest hgrtest.map - $(RM) dhgrshow dhgrshow.map + @$(DEL) hgr.dsk dhgr.dsk 2>$(NULLDEV) + @$(DEL) hgrshow hgrshow.map 2>$(NULLDEV) + @$(DEL) hgrtest hgrtest.map 2>$(NULLDEV) + @$(DEL) dhgrshow dhgrshow.map 2>$(NULLDEV) diff --git a/targettest/atari/Makefile b/targettest/atari/Makefile index a34a5f2d9..18ddf55ce 100644 --- a/targettest/atari/Makefile +++ b/targettest/atari/Makefile @@ -50,12 +50,12 @@ sys.xex: sys.c $(CL) -t atari -o sys.xex sys.c clean: - $(RM) charmapping.xex - $(RM) defdev.xex - $(RM) displaylist.xex - $(RM) mem.xex - $(RM) multi.xex - $(RM) ostype.xex - $(RM) scrcode.o - $(RM) scrcode.com - $(RM) sys.xex + @$(DEL) charmapping.xex 2>$(NULLDEV) + @$(DEL) defdev.xex 2>$(NULLDEV) + @$(DEL) displaylist.xex 2>$(NULLDEV) + @$(DEL) mem.xex 2>$(NULLDEV) + @$(DEL) multi.xex 2>$(NULLDEV) + @$(DEL) ostype.xex 2>$(NULLDEV) + @$(DEL) scrcode.o 2>$(NULLDEV) + @$(DEL) scrcode.com 2>$(NULLDEV) + @$(DEL) sys.xex 2>$(NULLDEV) diff --git a/targettest/atari5200/Makefile b/targettest/atari5200/Makefile index 990ced689..3a8114975 100644 --- a/targettest/atari5200/Makefile +++ b/targettest/atari5200/Makefile @@ -33,4 +33,4 @@ hello: hello.c $(CL) -t atari5200 -o hello hello.c clean: - $(RM) hello + @$(DEL) hello 2>$(NULLDEV) diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index 5217f0cc6..fb7af1a9a 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -36,4 +36,4 @@ petscii.prg: petscii.c $(CL) -t $(SYS) -O -o petscii.prg petscii.c clean: - $(DEL) petscii.prg + @$(DEL) petscii.prg 2>$(NULLDEV) diff --git a/targettest/gamate/Makefile b/targettest/gamate/Makefile index d4f1b9673..6cd9a3cdb 100644 --- a/targettest/gamate/Makefile +++ b/targettest/gamate/Makefile @@ -49,6 +49,6 @@ testn: nachtm.bin cd ~/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart ~/Desktop/cc65/github/cc65/testcode/lib/gamate/nachtm.bin clean: - $(RM) lcdtest.o audiotest.o ctest.o - $(RM) lcdtest.bin audiotest.bin ctest.bin nachtm.bin - $(RM) audiotest.lst lcdtest.lst ctest.lst + @$(DEL) lcdtest.o audiotest.o ctest.o 2>$(NULLDEV) + @$(DEL) lcdtest.bin audiotest.bin ctest.bin nachtm.bin 2>$(NULLDEV) + @$(DEL) audiotest.lst lcdtest.lst ctest.lst 2>$(NULLDEV) diff --git a/targettest/pce/Makefile b/targettest/pce/Makefile index 0c41778cc..f7b828e92 100644 --- a/targettest/pce/Makefile +++ b/targettest/pce/Makefile @@ -52,7 +52,7 @@ all: conio.pce ../../../bin/cl65 -t pce $< -Wl -D__CARTSIZE__=${CARTSIZE} -m $*.map -o $@ clean: - $(RM) conio.o conio.??? + @$(DEL) conio.o conio.??? 2>$(NULLDEV) test: conio.pce mednafen -force_module pce $< From e682f7c8c30189a3844da1082669e63a371e2d08 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 15 Oct 2020 14:00:25 -0400 Subject: [PATCH 0563/2710] Protect the C stack from overlays on the c64 target. --- cfg/c64-overlay.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/c64-overlay.cfg b/cfg/c64-overlay.cfg index e88bffe00..0f42434ad 100644 --- a/cfg/c64-overlay.cfg +++ b/cfg/c64-overlay.cfg @@ -14,7 +14,7 @@ MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; LOADADDR: file = %O, start = %S - 2, size = $0002; HEADER: file = %O, define = yes, start = %S, size = $000D; - MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__; + MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __OVERLAYSTART__ - __HEADER_LAST__; BSS: file = "", start = __ONCE_RUN__, size = __OVERLAYSTART__ - __STACKSIZE__ - __ONCE_RUN__; OVL1ADDR: file = "%O.1", start = __OVERLAYSTART__ - 2, size = $0002; OVL1: file = "%O.1", start = __OVERLAYSTART__, size = __OVERLAYSIZE__; From a25b28a9726c0e0c8c9c5201dcad2e00ba0f6a5d Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 15 Oct 2020 21:22:04 -0400 Subject: [PATCH 0564/2710] Added files to the pet library that support the overlay demo sample program. cbm_load() is needed because the Pet/CBM Kernals don't have a LOAD function that can be used by machine code programs. --- cfg/pet-overlay.cfg | 82 +++++++++++++++++++++++++++++++++++++++++++ libsrc/pet/cbm_load.c | 59 +++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 cfg/pet-overlay.cfg create mode 100644 libsrc/pet/cbm_load.c diff --git a/cfg/pet-overlay.cfg b/cfg/pet-overlay.cfg new file mode 100644 index 000000000..afd351a42 --- /dev/null +++ b/cfg/pet-overlay.cfg @@ -0,0 +1,82 @@ +FEATURES { + STARTADDRESS: default = $0401; +} +SYMBOLS { + __LOADADDR__: type = import; + __EXEHDR__: type = import; + __OVERLAYADDR__: type = import; + __STACKSIZE__: type = weak, value = $0800; # 2K stack + __OVERLAYSIZE__: type = weak, value = $0800; # 2K overlay + __HIMEM__: type = weak, value = $8000; + __OVERLAYSTART__: type = export, value = __HIMEM__ - __STACKSIZE__ - __OVERLAYSIZE__; +} +MEMORY { + ZP: file = "", define = yes, start = $0055, size = $001A; + LOADADDR: file = %O, start = %S - 2, size = $0002; + HEADER: file = %O, define = yes, start = %S, size = $000D; + MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __OVERLAYSTART__ - __HEADER_LAST__; + OVL1ADDR: file = "%O.1", start = __OVERLAYSTART__ - 2, size = $0002; + OVL1: file = "%O.1", start = __OVERLAYSTART__, size = __OVERLAYSIZE__; + OVL2ADDR: file = "%O.2", start = __OVERLAYSTART__ - 2, size = $0002; + OVL2: file = "%O.2", start = __OVERLAYSTART__, size = __OVERLAYSIZE__; + OVL3ADDR: file = "%O.3", start = __OVERLAYSTART__ - 2, size = $0002; + OVL3: file = "%O.3", start = __OVERLAYSTART__, size = __OVERLAYSIZE__; + OVL4ADDR: file = "%O.4", start = __OVERLAYSTART__ - 2, size = $0002; + OVL4: file = "%O.4", start = __OVERLAYSTART__, size = __OVERLAYSIZE__; + OVL5ADDR: file = "%O.5", start = __OVERLAYSTART__ - 2, size = $0002; + OVL5: file = "%O.5", start = __OVERLAYSTART__, size = __OVERLAYSIZE__; + OVL6ADDR: file = "%O.6", start = __OVERLAYSTART__ - 2, size = $0002; + OVL6: file = "%O.6", start = __OVERLAYSTART__, size = __OVERLAYSIZE__; + OVL7ADDR: file = "%O.7", start = __OVERLAYSTART__ - 2, size = $0002; + OVL7: file = "%O.7", start = __OVERLAYSTART__, size = __OVERLAYSIZE__; + OVL8ADDR: file = "%O.8", start = __OVERLAYSTART__ - 2, size = $0002; + OVL8: file = "%O.8", start = __OVERLAYSTART__, size = __OVERLAYSIZE__; + OVL9ADDR: file = "%O.9", start = __OVERLAYSTART__ - 2, size = $0002; + OVL9: file = "%O.9", start = __OVERLAYSTART__, size = __OVERLAYSIZE__; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + LOADADDR: load = LOADADDR, type = ro; + EXEHDR: load = HEADER, type = ro; + STARTUP: load = MAIN, type = ro; + LOWCODE: load = MAIN, type = ro, optional = yes; + CODE: load = MAIN, type = ro; + ONCE: load = MAIN, type = ro, optional = yes; + RODATA: load = MAIN, type = ro; + DATA: load = MAIN, type = rw; + INIT: load = MAIN, type = bss; + BSS: load = MAIN, type = bss, define = yes; + OVL1ADDR: load = OVL1ADDR, type = ro; + OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes; + OVL2ADDR: load = OVL2ADDR, type = ro; + OVERLAY2: load = OVL2, type = ro, define = yes, optional = yes; + OVL3ADDR: load = OVL3ADDR, type = ro; + OVERLAY3: load = OVL3, type = ro, define = yes, optional = yes; + OVL4ADDR: load = OVL4ADDR, type = ro; + OVERLAY4: load = OVL4, type = ro, define = yes, optional = yes; + OVL5ADDR: load = OVL5ADDR, type = ro; + OVERLAY5: load = OVL5, type = ro, define = yes, optional = yes; + OVL6ADDR: load = OVL6ADDR, type = ro; + OVERLAY6: load = OVL6, type = ro, define = yes, optional = yes; + OVL7ADDR: load = OVL7ADDR, type = ro; + OVERLAY7: load = OVL7, type = ro, define = yes, optional = yes; + OVL8ADDR: load = OVL8ADDR, type = ro; + OVERLAY8: load = OVL8, type = ro, define = yes, optional = yes; + OVL9ADDR: load = OVL9ADDR, type = ro; + OVERLAY9: load = OVL9, type = ro, define = yes, optional = 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/libsrc/pet/cbm_load.c b/libsrc/pet/cbm_load.c new file mode 100644 index 000000000..1823f6537 --- /dev/null +++ b/libsrc/pet/cbm_load.c @@ -0,0 +1,59 @@ +/* +** 2020-10-15, Greg King +** +** unsigned int __fastcall__ cbm_load (const char* name, +** unsigned char device, +** void* data); +*/ + +#include <cbm.h> +#include <limits.h> + +/* Loads file "name" from the given device to the given address, or to the load +** address of the file if "data" is the null pointer (like load"name",8,1 +** in BASIC). +** Returns the number of bytes that were loaded if loading was successful; +** otherwise 0; "_oserror" contains an error-code, then. +*/ +unsigned int __fastcall__ cbm_load (const char* name, unsigned char device, void* data) +{ + void* load; + int length; + unsigned int size = 0; + + if (cbm_open (1, device, CBM_READ, name) != 0) { + /* Can't load from a file that can't be openned. */ + return 0; + } + + /* Get the file's load address. */ + if (cbm_read (1, &load, sizeof load) != sizeof load) { + /* Either the file wasn't found, or it was too short. (Note: + ** the computer openned a file even if the drive couldn't open one.) + */ + cbm_close (1); + return 0; + } + + /* If "data" doesn't hold an address, then use the file's address. */ + if (data == (void*)0x0000) { + data = load; + } + + /* Pull the file into RAM. [Note that, if cbm_read() grabbed more + ** than 32767 bytes at a time, then its result would look negative, + ** which would cancel the load.] + */ + do { + size += (length = cbm_read (1, data, INT_MAX)); + data = (unsigned char*)data + length; + } while (length == INT_MAX && cbm_k_readst() == 0); + cbm_close (1); + + /* "length" is -1 if there was an error. */ + if (length < 0) { + size = 0; + } + + return size; +} From 77bfd163cd2460b46d4e31b17eb5e5e7ec6ab8aa Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 16 Oct 2020 15:50:18 +0200 Subject: [PATCH 0565/2710] makefile cleanup --- targettest/gamate/Makefile | 9 --------- targettest/pce/Makefile | 7 ++----- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/targettest/gamate/Makefile b/targettest/gamate/Makefile index 6cd9a3cdb..a14b8a854 100644 --- a/targettest/gamate/Makefile +++ b/targettest/gamate/Makefile @@ -39,15 +39,6 @@ nachtm.bin: nachtm.c $(CL) -Os -l nachtm.lst -t gamate -o nachtm.bin nachtm.c gamate-fixcart nachtm.bin -test1: lcdtest.bin - cd ~/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart ~/Desktop/cc65/github/cc65/testcode/lib/gamate/lcdtest.bin -test2: audiotest.bin - cd ~/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart ~/Desktop/cc65/github/cc65/testcode/lib/gamate/audiotest.bin -testc: ctest.bin - cd ~/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart ~/Desktop/cc65/github/cc65/testcode/lib/gamate/ctest.bin -testn: nachtm.bin - cd ~/Desktop/mame/winmess/ && wine mess.exe gamate -window -skip_gameinfo -cart ~/Desktop/cc65/github/cc65/testcode/lib/gamate/nachtm.bin - clean: @$(DEL) lcdtest.o audiotest.o ctest.o 2>$(NULLDEV) @$(DEL) lcdtest.bin audiotest.bin ctest.bin nachtm.bin 2>$(NULLDEV) diff --git a/targettest/pce/Makefile b/targettest/pce/Makefile index f7b828e92..1ecc0566f 100644 --- a/targettest/pce/Makefile +++ b/targettest/pce/Makefile @@ -48,11 +48,8 @@ all: conio.pce dd if=$< bs=8K skip=${COUNT} > $@ dd if=$< bs=8K count=${COUNT} >> $@ -%.bin: %.c ../../../lib/pce.lib - ../../../bin/cl65 -t pce $< -Wl -D__CARTSIZE__=${CARTSIZE} -m $*.map -o $@ +%.bin: %.c + $(CL) -t pce $< -Wl -D__CARTSIZE__=${CARTSIZE} -m $*.map -o $@ clean: @$(DEL) conio.o conio.??? 2>$(NULLDEV) - -test: conio.pce - mednafen -force_module pce $< From 0f66f7569e3cb53a314a9d8ae4df9f1768400725 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 17 Oct 2020 10:36:11 -0400 Subject: [PATCH 0566/2710] Updated the cx16 library to the upstream project's prerelease 38. --- asminc/cbm_kernal.inc | 1 + asminc/cx16.inc | 10 ++++---- include/cx16.h | 14 ++++++----- libsrc/cx16/cputc.s | 56 +++++++++++++++++++++---------------------- 4 files changed, 43 insertions(+), 38 deletions(-) diff --git a/asminc/cbm_kernal.inc b/asminc/cbm_kernal.inc index 981687206..5f41c6267 100644 --- a/asminc/cbm_kernal.inc +++ b/asminc/cbm_kernal.inc @@ -46,6 +46,7 @@ GRAPH_SET_FONT := $FF3B GRAPH_GET_CHAR_SIZE := $FF3E GRAPH_PUT_CHAR := $FF41 + MULTI_ACPTR := $FF44 RESTORE_BASIC := $FF47 CLOCK_SET_DATE_TIME := $FF4D CLOCK_GET_DATE_TIME := $FF50 diff --git a/asminc/cx16.inc b/asminc/cx16.inc index 8891c1761..4d9ce89db 100644 --- a/asminc/cx16.inc +++ b/asminc/cx16.inc @@ -1,5 +1,5 @@ ; -; CX16 r37 definitions +; CX16 r38 definitions ; ; --------------------------------------------------------------------------- @@ -439,7 +439,7 @@ NMIVec := $0318 .scope PSG ; Programmable Sound Generator .struct PITCH .word - VOL .byte ; Left, right channels; volume + VOL .byte ; Right, left sides; volume WAVEFORM .byte ; Wave shape, pulse width .endstruct LEFT = %01 << 6 @@ -544,9 +544,11 @@ NMIVec := $0318 VERALOG .byte ; Boolean: log VERA activity KEYBOARDLOG .byte ; Boolean: log keyboard data ECHO .byte ; Type of echo that's enabled - SAVEXIT .byte ; Boolean: save on exit + SAVEXIT .byte ; Boolean: save machine state on exit GIFREC .byte ; Method of recording GIF movie - .org $9FBD + .res 2 + CYCLECOUNT .dword ; Running count of CPU cycles (Read-Only) + .res 1 KEYMAP .byte ; Current keyboard layout number (Read-Only) DETECT .byte 2 ; If is "16" string, then running on emulator (RO) .endstruct diff --git a/include/cx16.h b/include/cx16.h index 87a6d37ca..f3d02bd28 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -3,7 +3,7 @@ /* cx16.h */ /* */ /* CX16 system-specific definitions */ -/* For prerelease 37 */ +/* For prerelease 38 */ /* */ /* */ /* This software is provided "as-is", without any expressed or implied */ @@ -283,12 +283,14 @@ struct __emul { unsigned char debug; /* Boolean: debugging enabled */ unsigned char vera_action; /* Boolean: displaying VERA activity */ unsigned char keyboard; /* Boolean: displaying typed keys */ - unsigned char echo; /* How Kernal output should be echoed to host */ - unsigned char save_on_exit; /* Boolean: save SD card when quitting */ + unsigned char echo; /* How to send Kernal output to host */ + unsigned char save_on_exit; /* Boolean: save machine state on exit */ unsigned char gif_method; /* How GIF movie is being recorded */ - unsigned char unused[0xD - 0x6]; - unsigned char keymap; /* Keyboard layout number */ - const char detect[2]; /* "16" if running on x16emu */ + unsigned char const unused1[2]; + unsigned long const cycle_count; /* Running total of CPU cycles (8 MHz.) */ + unsigned char const unused2[1]; + unsigned char const keymap; /* Keyboard layout number */ + char const detect[2]; /* "16" if running on x16emu */ }; #define EMULATOR (*(volatile struct __emul *)0x9FB0) diff --git a/libsrc/cx16/cputc.s b/libsrc/cx16/cputc.s index 034c3e389..4a7034e59 100644 --- a/libsrc/cx16/cputc.s +++ b/libsrc/cx16/cputc.s @@ -1,5 +1,5 @@ ; -; 2019-09-23, Greg King +; 2020-10-13, Greg King ; ; void __fastcall__ cputcxy (unsigned char x, unsigned char y, char c); ; void __fastcall__ cputc (char c); @@ -11,52 +11,47 @@ .import gotoxy, PLOT .include "cx16.inc" - .macpack generic -; First, move to a new position. +; Move to a cursor position, then print a character. _cputcxy: pha ; Save C jsr gotoxy ; Set cursor, drop x and y - pla ; Restore C + pla -; Print a character. +; Print a character -- also used as an internal function. -_cputc: cmp #$0D ; LF? +_cputc: cmp #$0D ; X16 '\n'? beq newline - cmp #$0A ; CR? - beq plotx0 + cmp #$0A ; X16 '\r'? + beq cr -; Printable char of some sort +; Printable char. of some sort. +; Convert it from PetSCII into a screen-code. - cmp #' ' - blt cputdirect ; Other control char +convert: tay - bmi L10 - cmp #$60 - blt L2 - and #<~%00100000 - bra cputdirect - -; Handle character if high bit set - -L10: and #<~%10000000 ; Remove high bit - ora #%01000000 - bra cputdirect - -L2: and #<~%01000000 + lsr a ; Divide by 256/8 + lsr a + lsr a + lsr a + lsr a + tax ; .X = %00000xxx + tya + eor pet_to_screen,x cputdirect: jsr putchar ; Write character to screen, return .Y -; Advance cursor position. +; Advance the cursor position. iny cpy LLEN ; Reached end of line? bne L3 - jsr newline ; Next line - ldy #$00 ; + CR + jsr newline ; Wrap around + +cr: ldy #$00 L3: sty CURS_X rts @@ -70,7 +65,6 @@ newline: ; Set the cursor's position, calculate RAM pointer. -plotx0: stz CURS_X plot: ldy CURS_X ldx CURS_Y clc @@ -96,3 +90,9 @@ putchar: lda CHARCOLOR sta VERA::DATA0 rts + + + .rodata +pet_to_screen: + .byte %10000000,%00000000,%01000000,%00100000 ; PetSCII -> screen-code + .byte %01000000,%11000000,%10000000,%10000000 From 4f3a96a535a94b91813ce7651dcd08de9dc95cd3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 18 Sep 2020 20:22:58 +0800 Subject: [PATCH 0567/2710] Added new opt OptPushPop2. Also renamed OptPushPop to OptPushPop1. --- src/cc65/codeopt.c | 8 ++-- src/cc65/coptind.c | 93 +++++++++++++++++++++++++++++++++++++++++++++- src/cc65/coptind.h | 7 +++- 3 files changed, 101 insertions(+), 7 deletions(-) diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index 4a7722830..f83a8d9f8 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -167,7 +167,8 @@ static OptFunc DOptPtrStore2 = { OptPtrStore2, "OptPtrStore2", 65, 0, static OptFunc DOptPtrStore3 = { OptPtrStore3, "OptPtrStore3", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptPush1 = { OptPush1, "OptPush1", 65, 0, 0, 0, 0, 0 }; static OptFunc DOptPush2 = { OptPush2, "OptPush2", 50, 0, 0, 0, 0, 0 }; -static OptFunc DOptPushPop = { OptPushPop, "OptPushPop", 0, 0, 0, 0, 0, 0 }; +static OptFunc DOptPushPop1 = { OptPushPop1, "OptPushPop1", 0, 0, 0, 0, 0, 0 }; +static OptFunc DOptPushPop2 = { OptPushPop2, "OptPushPop2", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptRTS = { OptRTS, "OptRTS", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptRTSJumps1 = { OptRTSJumps1, "OptRTSJumps1", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptRTSJumps2 = { OptRTSJumps2, "OptRTSJumps2", 100, 0, 0, 0, 0, 0 }; @@ -269,7 +270,7 @@ static OptFunc* OptFuncs[] = { &DOptPtrStore3, &DOptPush1, &DOptPush2, - &DOptPushPop, + &DOptPushPop1, &DOptRTS, &DOptRTSJumps1, &DOptRTSJumps2, @@ -709,7 +710,8 @@ static unsigned RunOptGroup3 (CodeSeg* S) C += RunOptFunc (S, &DOptTransfers4, 1); C += RunOptFunc (S, &DOptStore1, 1); C += RunOptFunc (S, &DOptStore5, 1); - C += RunOptFunc (S, &DOptPushPop, 1); + C += RunOptFunc (S, &DOptPushPop1, 1); + C += RunOptFunc (S, &DOptPushPop2, 1); C += RunOptFunc (S, &DOptPrecalc, 1); Changes += C; diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index eada61871..4bb236692 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -1069,8 +1069,8 @@ unsigned OptTransfers4 (CodeSeg* S) -unsigned OptPushPop (CodeSeg* S) -/* Remove a PHA/PLA sequence were A is not used later */ +unsigned OptPushPop1 (CodeSeg* S) +/* Remove a PHA/PLA sequence were A not used later */ { unsigned Changes = 0; unsigned Push = 0; /* Index of push insn */ @@ -1199,6 +1199,95 @@ unsigned OptPushPop (CodeSeg* S) +unsigned OptPushPop2 (CodeSeg* S) +/* Remove a PHP/PLP sequence were no processor flags changed inside */ +{ + unsigned Changes = 0; + unsigned Push = 0; /* Index of push insn */ + unsigned Pop = 0; /* Index of pop insn */ + enum { + Searching, + FoundPush, + FoundPop + } State = Searching; + + /* Walk over the entries. Look for a push instruction that is followed by + ** a pop later, where the pop is not followed by an conditional branch, + ** and where the value of the A register is not used later on. + ** Look out for the following problems: + ** + ** - There may be another PHP/PLP inside the sequence: Restart it. + ** - All jumps inside the sequence must not go outside the sequence, + ** otherwise it would be too complicated to remove the PHP/PLP. + */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + switch (State) { + + case Searching: + if (E->OPC == OP65_PHP) { + /* Found start of sequence */ + Push = I; + State = FoundPush; + } + break; + + case FoundPush: + if (E->OPC == OP65_PHP) { + /* Inner push/pop, restart */ + Push = I; + } else if (E->OPC == OP65_PLP) { + /* Found a matching pop */ + Pop = I; + /* Check that the block between Push and Pop is a basic + ** block (one entry, one exit). Otherwise ignore it. + */ + if (CS_IsBasicBlock (S, Push, Pop)) { + State = FoundPop; + } else { + /* Go into searching mode again */ + State = Searching; + } + } else if ((E->Info & OF_BRA) == 0 && + (E->Info & OF_STORE) == 0 && + E->OPC != OP65_NOP && + E->OPC != OP65_TSX) { + /* Don't bother skipping dead code */ + State = Searching; + } + break; + + case FoundPop: + /* We can remove the PHP and PLP instructions */ + CS_DelEntry (S, Pop); + CS_DelEntry (S, Push); + + /* Correct I so we continue with THIS insn */ + I -= 3; + + /* Remember we had changes */ + ++Changes; + + /* Go into search mode again */ + State = Searching; + break; + + } + + /* Next entry */ + ++I; + } + + /* Return the number of changes made */ + return Changes; +} + + + unsigned OptPrecalc (CodeSeg* S) /* Replace immediate operations with the accu where the current contents are ** known by a load of the final value. diff --git a/src/cc65/coptind.h b/src/cc65/coptind.h index 64acb10d8..ab9179e96 100644 --- a/src/cc65/coptind.h +++ b/src/cc65/coptind.h @@ -82,8 +82,11 @@ unsigned OptTransfers4 (CodeSeg* S); ** by a load of the second register if possible. */ -unsigned OptPushPop (CodeSeg* S); -/* Remove a PHA/PLA sequence were A is not used later */ +unsigned OptPushPop1 (CodeSeg* S); +/* Remove a PHA/PLA sequence were A not used later */ + +unsigned OptPushPop2 (CodeSeg* S); +/* Remove a PHP/PLP sequence were no processor flags changed inside */ unsigned OptPrecalc (CodeSeg* S); /* Replace immediate operations with the accu where the current contents are From 9c776a24e5e14dd34c4f30f96a6383f54442c7a9 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 18 Sep 2020 20:22:58 +0800 Subject: [PATCH 0568/2710] Use bcc instead of bne in OptNegAX2 to ease optimizations. --- src/cc65/coptneg.c | 6 +++--- src/cc65/coptneg.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cc65/coptneg.c b/src/cc65/coptneg.c index 0f5d589f7..27171c68d 100644 --- a/src/cc65/coptneg.c +++ b/src/cc65/coptneg.c @@ -480,7 +480,7 @@ unsigned OptNegAX2 (CodeSeg* S) ** eor #$FF ** clc ** adc #$01 -** bne L1 +** bcc L1 ** inx ** L1: ** @@ -528,8 +528,8 @@ unsigned OptNegAX2 (CodeSeg* S) /* Get the label attached to the insn following the call */ L = CS_GenLabel (S, P); - /* bne L */ - X = NewCodeEntry (OP65_BNE, AM65_BRA, L->Name, L, E->LI); + /* bcc L */ + X = NewCodeEntry (OP65_BCC, AM65_BRA, L->Name, L, E->LI); CS_InsertEntry (S, X, I+5); /* inx */ diff --git a/src/cc65/coptneg.h b/src/cc65/coptneg.h index f549fc553..844d8b886 100644 --- a/src/cc65/coptneg.h +++ b/src/cc65/coptneg.h @@ -155,7 +155,7 @@ unsigned OptNegAX2 (CodeSeg* S); ** eor #$FF ** clc ** adc #$01 -** bne L1 +** bcc L1 ** inx ** L1: ** From 0354322413db6b958b801690f593cc2ce1fdde4c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 18 Sep 2020 20:22:58 +0800 Subject: [PATCH 0569/2710] Added OptSignExtened for testing signness right after sign extention. --- src/cc65/codeopt.c | 3 ++ src/cc65/coptind.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++ src/cc65/coptind.h | 25 +++++++++++++ 3 files changed, 120 insertions(+) diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index f83a8d9f8..07764cd40 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -178,6 +178,7 @@ static OptFunc DOptShift3 = { OptShift3, "OptShift3", 17, 0, static OptFunc DOptShift4 = { OptShift4, "OptShift4", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptShift5 = { OptShift5, "OptShift5", 110, 0, 0, 0, 0, 0 }; static OptFunc DOptShift6 = { OptShift6, "OptShift6", 200, 0, 0, 0, 0, 0 }; +static OptFunc DOptSignExtended = { OptSignExtended, "OptSignExtended", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptSize1 = { OptSize1, "OptSize1", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptSize2 = { OptSize2, "OptSize2", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptStackOps = { OptStackOps, "OptStackOps", 100, 0, 0, 0, 0, 0 }; @@ -280,6 +281,7 @@ static OptFunc* OptFuncs[] = { &DOptShift4, &DOptShift5, &DOptShift6, + &DOptSignExtended, &DOptSize1, &DOptSize2, &DOptStackOps, @@ -713,6 +715,7 @@ static unsigned RunOptGroup3 (CodeSeg* S) C += RunOptFunc (S, &DOptPushPop1, 1); C += RunOptFunc (S, &DOptPushPop2, 1); C += RunOptFunc (S, &DOptPrecalc, 1); + C += RunOptFunc (S, &DOptSignExtended, 1); Changes += C; diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index 4bb236692..5fe3b5c03 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -1474,3 +1474,95 @@ unsigned OptPrecalc (CodeSeg* S) /* Return the number of changes made */ return Changes; } + + + +unsigned OptSignExtended (CodeSeg* S) +/* Change +** +** lda xxx ; X is 0 +** bpl L1 +** dex/ldx #$FF +** L1: cpx #$00 +** bpl L2 +** +** or +** +** lda xxx ; X is 0 +** bpl L1 +** dex/ldx #$FF +** L1: cpx #$80 +** bcc/bmi L2 +** +** into +** lda xxx ; X is 0 +** bpl L2 +** dex/ldx #$FF +** +** provided the C flag isn't used later. +*/ +{ + unsigned Changes = 0; + CodeEntry* L[5]; + CodeEntry* X; + unsigned CheckStates; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get next entry */ + L[0] = CS_GetEntry (S, I); + + /* Check if it's a register load or transfer insn */ + if (L[0]->OPC == OP65_LDA && + CS_GetEntries (S, L+1, I+1, 4) && + !CS_RangeHasLabel (S, I+1, 2) && + CE_GetLabelCount (L[3]) == 1 && + L[1]->JumpTo == CE_GetLabel (L[3], 0) && + (L[1]->Info & OF_CBRA) != 0 && + GetBranchCond (L[1]->OPC) == BC_PL && + RegValIsKnown (L[2]->RI->Out.RegX) && + L[2]->RI->Out.RegX == 0xFF && + L[2]->OPC != OP65_JSR && + (L[2]->Chg & REG_AXY) == REG_X) { + + /* We find a sign extention */ + CheckStates = PSTATE_CZN; + if (L[3]->OPC == OP65_CPX && + CE_IsConstImm (L[3]) && + (L[4]->Info & OF_CBRA) != 0 && + ((L[3]->Num == 0x00 && + GetBranchCond (L[4]->OPC) == BC_PL) || + ((L[3]->Num == 0x80 && + GetBranchCond (L[4]->OPC) == BC_CC && + GetBranchCond (L[4]->OPC) == BC_MI)))) { + + /* Check if the processor states set by the CPX are unused later */ + if ((GetRegInfo (S, I+5, CheckStates) & CheckStates) == 0) { + + /* Change the target of the sign extention branch */ + X = NewCodeEntry (OP65_JPL, L[4]->AM, L[4]->Arg, L[4]->JumpTo, L[4]->LI); + CS_InsertEntry (S, X, I+1); + CS_DelEntry (S, I+2); + + /* Remove the old conditional branch */ + CS_DelEntries (S, I+3, 2); + + /* Remember, we had changes */ + ++Changes; + + /* Continue with the current insn */ + continue; + } + } + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} diff --git a/src/cc65/coptind.h b/src/cc65/coptind.h index ab9179e96..496b23447 100644 --- a/src/cc65/coptind.h +++ b/src/cc65/coptind.h @@ -93,6 +93,31 @@ unsigned OptPrecalc (CodeSeg* S); ** known by a load of the final value. */ +unsigned OptSignExtended (CodeSeg* S); +/* Change +** +** lda xxx ; X is 0 +** bpl L1 +** dex/ldx #$FF +** L1: cpx #$00 +** bpl L2 +** +** or +** +** lda xxx ; X is 0 +** bpl L1 +** dex/ldx #$FF +** L1: cpx #$80 +** bcc/bmi L2 +** +** into +** lda xxx ; X is 0 +** bpl L2 +** dex/ldx #$FF +** +** provided the C flag isn't used later. +*/ + /* End of coptind.h */ From bb7b69f513e3f3612d185c3daef3d83650158ddb Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 18 Sep 2020 20:22:58 +0800 Subject: [PATCH 0570/2710] Added OptShiftBack for shifting the C flag into register A and back. --- src/cc65/codeopt.c | 3 +++ src/cc65/coptind.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++ src/cc65/coptind.h | 5 +++++ 3 files changed, 62 insertions(+) diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index 07764cd40..3c10183e4 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -178,6 +178,7 @@ static OptFunc DOptShift3 = { OptShift3, "OptShift3", 17, 0, static OptFunc DOptShift4 = { OptShift4, "OptShift4", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptShift5 = { OptShift5, "OptShift5", 110, 0, 0, 0, 0, 0 }; static OptFunc DOptShift6 = { OptShift6, "OptShift6", 200, 0, 0, 0, 0, 0 }; +static OptFunc DOptShiftBack = { OptShiftBack, "OptShiftBack", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptSignExtended = { OptSignExtended, "OptSignExtended", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptSize1 = { OptSize1, "OptSize1", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptSize2 = { OptSize2, "OptSize2", 100, 0, 0, 0, 0, 0 }; @@ -281,6 +282,7 @@ static OptFunc* OptFuncs[] = { &DOptShift4, &DOptShift5, &DOptShift6, + &DOptShiftBack, &DOptSignExtended, &DOptSize1, &DOptSize2, @@ -715,6 +717,7 @@ static unsigned RunOptGroup3 (CodeSeg* S) C += RunOptFunc (S, &DOptPushPop1, 1); C += RunOptFunc (S, &DOptPushPop2, 1); C += RunOptFunc (S, &DOptPrecalc, 1); + C += RunOptFunc (S, &DOptShiftBack, 1); C += RunOptFunc (S, &DOptSignExtended, 1); Changes += C; diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index 5fe3b5c03..f3e17fc87 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -1477,6 +1477,60 @@ unsigned OptPrecalc (CodeSeg* S) +unsigned OptShiftBack (CodeSeg* S) +/* Remove a pair of shifts to the opposite directions if none of the bits of +** the register A or the Z/N flags modified by these shifts are used later. +*/ +{ + unsigned Changes = 0; + CodeEntry* E; + CodeEntry* N; + unsigned CheckStates; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get next entry */ + E = CS_GetEntry (S, I); + + /* Check if it's a register load or transfer insn */ + if (E->OPC == OP65_ROL && + (N = CS_GetNextEntry (S, I)) != 0 && + (N->OPC == OP65_LSR || + N->OPC == OP65_ROR) && + !CE_HasLabel (N)) { + + CheckStates = PSTATE_ZN; + + if (N->OPC == OP65_LSR && + !PStatesAreClear (E->RI->Out.PFlags, PSTATE_C)) { + CheckStates |= REG_A; + } + + if ((GetRegInfo (S, I+2, CheckStates) & CheckStates) == 0) { + + /* Remove the shifts */ + CS_DelEntries (S, I, 2); + + /* Remember, we had changes */ + ++Changes; + + /* Continue with next insn */ + continue; + } + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + unsigned OptSignExtended (CodeSeg* S) /* Change ** diff --git a/src/cc65/coptind.h b/src/cc65/coptind.h index 496b23447..c7ecf4194 100644 --- a/src/cc65/coptind.h +++ b/src/cc65/coptind.h @@ -93,6 +93,11 @@ unsigned OptPrecalc (CodeSeg* S); ** known by a load of the final value. */ +unsigned OptShiftBack (CodeSeg* S); +/* Remove a pair of shifts to the opposite directions if none of the bits of +** the register A or the Z/N flags modified by these shifts are used later. +*/ + unsigned OptSignExtended (CodeSeg* S); /* Change ** From 5c43d1e04f48c51c743fb3fa66cb00b58ccc0f33 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 16 Apr 2020 17:19:16 +0800 Subject: [PATCH 0571/2710] Changed codegen for postfix inc/dec operations by deferring them till sequence points. This usually allows faster & smaller code. Note that deferred operations must still be called at sequence points even if the whole expressions containing them had constant values. --- src/cc65/compile.c | 7 + src/cc65/declare.c | 6 + src/cc65/expr.c | 493 +++++++++++++++++++++++++++++++++++++++----- src/cc65/expr.h | 34 ++- src/cc65/goto.c | 7 + src/cc65/locals.c | 10 + src/cc65/stdfunc.c | 15 ++ src/cc65/stmt.c | 3 + src/cc65/testexpr.c | 9 + 9 files changed, 526 insertions(+), 58 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index ec90e4b2d..d93de96b4 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -320,6 +320,9 @@ static void Parse (void) } else { /* Parse the function body */ NewFunc (Entry, FuncDef); + + /* Make sure we aren't omitting any work */ + CheckDeferredOpAllDone (); } } @@ -395,6 +398,8 @@ void Compile (const char* FileName) /* DefineNumericMacro ("__STDC__", 1); <- not now */ DefineNumericMacro ("__STDC_HOSTED__", 1); + InitDeferredOps (); + /* Create the base lexical level */ EnterGlobalLevel (); @@ -486,6 +491,8 @@ void Compile (const char* FileName) } } + DoneDeferredOps (); + if (Debug) { PrintMacroStats (stdout); } diff --git a/src/cc65/declare.c b/src/cc65/declare.c index bf27f9c90..08739f333 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2302,6 +2302,9 @@ static unsigned ParseScalarInit (Type* T) /* Output the data */ DefineData (&ED); + /* Do this anyways for safety */ + DoDeferred (SQP_KEEP_NONE, &ED); + /* Done */ return SizeOf (T); } @@ -2321,6 +2324,9 @@ static unsigned ParsePointerInit (Type* T) /* Output the data */ DefineData (&ED); + /* Do this anyways for safety */ + DoDeferred (SQP_KEEP_NONE, &ED); + /* Close eventually opening braces */ ClosingCurlyBraces (BraceCount); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index a88710f34..19572944e 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -332,6 +332,264 @@ static void WarnConstCompareResult (const ExprDesc* Expr) +typedef enum { + DOT_INC, + DOT_DEC, +} DeferredOpType; + + +typedef struct { + ExprDesc Expr; + DeferredOpType OpType; +} DeferredOp; + +Collection DeferredOps; + + + +void InitDeferredOps (void) +/* Init the collection for storing deferred ops */ +{ + InitCollection (&DeferredOps); +} + + + +void DoneDeferredOps (void) +/* Deinit the collection for storing deferred ops */ +{ + DoneCollection (&DeferredOps); +} + + + +static void DeferInc (const ExprDesc* Expr) +/* Defer the post-inc and put it in a queue */ +{ + DeferredOp* Op = xmalloc (sizeof (DeferredOp)); + memcpy (&Op->Expr, Expr, sizeof (ExprDesc)); + Op->OpType = DOT_INC; + CollAppend (&DeferredOps, Op); +} + + + +static void DeferDec (const ExprDesc* Expr) +/* Defer the post-dec and put it in a queue */ +{ + DeferredOp* Op = xmalloc (sizeof (DeferredOp)); + memcpy (&Op->Expr, Expr, sizeof (ExprDesc)); + Op->OpType = DOT_DEC; + CollAppend (&DeferredOps, Op); +} + + + +static void DeferredInc (ExprDesc* Expr) +/* Do the deferred post-inc */ +{ + unsigned Flags; + unsigned long Val; + + /* Get the flags */ + Flags = TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR | CF_CONST | CF_NOKEEP; + + /* Get the increment value in bytes */ + Val = IsTypePtr (Expr->Type) ? CheckedSizeOf (Expr->Type + 1) : 1; + + /* Check the location of the data */ + switch (ED_GetLoc (Expr)) { + + case E_LOC_ABS: + /* Absolute: numeric address or const */ + g_addeqstatic (Flags, Expr->IVal, 0, Val); + break; + + case E_LOC_GLOBAL: + /* Global variable */ + g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val); + break; + + case E_LOC_STATIC: + case E_LOC_LITERAL: + /* Static variable or literal in the literal pool */ + g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val); + break; + + case E_LOC_REGISTER: + /* Register variable */ + g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val); + break; + + case E_LOC_STACK: + /* Value on the stack */ + g_addeqlocal (Flags, Expr->IVal, Val); + break; + + case E_LOC_PRIMARY: + /* The primary register */ + g_inc (Flags, Val); + break; + + case E_LOC_EXPR: + /* An expression in the primary register */ + g_addeqind (Flags, Expr->IVal, Val); + break; + + default: + Internal ("Invalid location in DeferredInc(): 0x%04X", ED_GetLoc (Expr)); + } +} + + + +static void DeferredDec (ExprDesc* Expr) +/* Do the deferred post-dec */ +{ + unsigned Flags; + unsigned long Val; + + /* Get the flags */ + Flags = TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR | CF_CONST | CF_NOKEEP; + + /* Get the increment value in bytes */ + Val = IsTypePtr (Expr->Type) ? CheckedSizeOf (Expr->Type + 1) : 1; + + /* Check the location of the data */ + switch (ED_GetLoc (Expr)) { + + case E_LOC_ABS: + /* Absolute: numeric address or const */ + g_subeqstatic (Flags, Expr->IVal, 0, Val); + break; + + case E_LOC_GLOBAL: + /* Global variable */ + g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val); + break; + + case E_LOC_STATIC: + case E_LOC_LITERAL: + /* Static variable or literal in the literal pool */ + g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val); + break; + + case E_LOC_REGISTER: + /* Register variable */ + g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val); + break; + + case E_LOC_STACK: + /* Value on the stack */ + g_subeqlocal (Flags, Expr->IVal, Val); + break; + + case E_LOC_PRIMARY: + /* The primary register */ + g_dec (Flags, Val); + break; + + case E_LOC_EXPR: + /* An expression in the primary register */ + g_subeqind (Flags, Expr->IVal, Val); + break; + + default: + Internal ("Invalid location in DeferredDec(): 0x%04X", ED_GetLoc (Expr)); + } +} + + + +int GetDeferredOpCount (void) +/* Return how many deferred operations are still waiting in the queque */ +{ + return (int)CollCount (&DeferredOps); +} + + + +void CheckDeferredOpAllDone (void) +/* Check if all deferred operations are done at sequence points. +** Die off if check fails. +*/ +{ + if (GetDeferredOpCount () > 0) { + Internal ("Code generation messed up: missing operations past sequence points."); + } +} + + + +void DoDeferred (unsigned Flags, ExprDesc* Expr) +/* Do deferred operations such as post-inc/dec at sequence points */ +{ + int I; + unsigned Size = 0; + int Count = GetDeferredOpCount (); + + /* Nothing to be done */ + if (Count <= 0) { + return; + } + + /* Backup some regs/processor flags around the inc/dec */ + if ((Flags & SQP_KEEP_TEST) != 0 && ED_NeedsTest (Expr)) { + /* Sufficient to add a pair of PHP/PLP for all cases */ + AddCodeLine ("php"); + } + + /* Backup the content of EAX around the inc/dec */ + if ((Flags & SQP_KEEP_EAX) != 0 && ED_NeedsPrimary (Expr)) { + /* Get the size */ + Size = CheckedSizeOf (Expr->Type); + + if (Size < 2) { + AddCodeLine ("pha"); + } else if (Size < 3) { + AddCodeLine ("sta regsave"); + AddCodeLine ("stx regsave+1"); + } else { + AddCodeLine ("jsr saveeax"); + } + } + + for (I = 0; I < Count; ++I) { + DeferredOp* Op = CollAtUnchecked (&DeferredOps, I); + switch (Op->OpType) { + + case DOT_INC: + DeferredInc (&Op->Expr); + break; + + case DOT_DEC: + DeferredDec (&Op->Expr); + break; + } + xfree (&Op->Expr); + } + CollDeleteAll (&DeferredOps); + + /* Restore the content of EAX around the inc/dec */ + if ((Flags & SQP_KEEP_EAX) != 0 && ED_NeedsPrimary (Expr)) { + if (Size < 2) { + AddCodeLine ("pla"); + } else if (Size < 3) { + AddCodeLine ("lda regsave"); + AddCodeLine ("ldx regsave+1"); + } else { + AddCodeLine ("jsr resteax"); + } + } + + /* Restore the regs/processor flags around the inc/dec */ + if ((Flags & SQP_KEEP_TEST) != 0 && ED_NeedsTest (Expr)) { + /* Sufficient to pop the processor flags */ + AddCodeLine ("plp"); + } +} + + static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) /* Parse a function parameter list, and pass the arguments to the called ** function. Depending on several criteria, this may be done by just pushing @@ -388,11 +646,17 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) } } + /* The info of the last argument could be needed out of the loop */ + ExprDesc Expr; + ED_Init (&Expr); + Expr.Flags |= ED->Flags & E_MASK_KEEP_SUBEXPR; + /* Parse the actual argument list */ while (CurTok.Tok != TOK_RPAREN) { unsigned Flags; /* Code generator flags, not expression flags */ - ExprDesc Expr; + + /* This way the info of the last parameter won't be cleared */ ED_Init (&Expr); Expr.Flags |= ED->Flags & E_MASK_KEEP_SUBEXPR; @@ -514,6 +778,11 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) Error ("Too few arguments in function call"); } + /* Append deferred inc/dec before the function is called. + ** The last parameter needs to be restored if it is passed with AX/EAX Regs. + */ + DoDeferred (IsFastcall ? SQP_KEEP_EAX : SQP_KEEP_NONE, &Expr); + /* The function returns the size of all arguments pushed onto the stack. ** However, if there are parameters missed (which is an error, and was ** flagged by the compiler), AND a stack frame was preallocated above, @@ -1728,7 +1997,7 @@ static void PreDec (ExprDesc* Expr) static void PostInc (ExprDesc* Expr) /* Handle the postincrement operator */ { - unsigned Flags; + unsigned Flags, Loc; NextToken (); @@ -1746,33 +2015,49 @@ static void PostInc (ExprDesc* Expr) /* Get the data type */ Flags = TypeOf (Expr->Type); + /* We are allowed by the C standard to defer the inc operation until + ** the this expression is used, so that we don't need to save and reload + ** the original value. + */ + /* Emit smaller code if a char variable is at a constant location */ - if ((Flags & CF_CHAR) == CF_CHAR && ED_IsLocConst(Expr)) { + if ((Flags & CF_CHAR) == CF_CHAR && ED_IsLocConst (Expr)) { LoadExpr (CF_NONE, Expr); - AddCodeLine ("inc %s", ED_GetLabelName(Expr, 0)); + AddCodeLine ("inc %s", ED_GetLabelName (Expr, 0)); } else { - /* Push the address if needed */ - PushAddr (Expr); + Loc = ED_GetLoc (Expr); + if (Loc == E_LOC_PRIMARY || Loc == E_LOC_EXPR) { + /* Push the address if needed */ + PushAddr (Expr); - /* Fetch the value and save it (since it's the result of the expression) */ - LoadExpr (CF_NONE, Expr); - g_save (Flags | CF_FORCECHAR); + /* Fetch the value and save it (since it's the result of the expression) */ + LoadExpr (CF_NONE, Expr); + g_save (Flags | CF_FORCECHAR); + + /* If we have a pointer expression, increment by the size of the type */ + if (IsTypePtr (Expr->Type)) { + g_inc (Flags | CF_CONST | CF_FORCECHAR, CheckedSizeOf (Expr->Type + 1)); + } else { + g_inc (Flags | CF_CONST | CF_FORCECHAR, 1); + } + + /* Store the result back */ + Store (Expr, 0); + + /* Restore the original value in the primary register */ + g_restore (Flags | CF_FORCECHAR); - /* If we have a pointer expression, increment by the size of the type */ - if (IsTypePtr (Expr->Type)) { - g_inc (Flags | CF_CONST | CF_FORCECHAR, CheckedSizeOf (Expr->Type + 1)); } else { - g_inc (Flags | CF_CONST | CF_FORCECHAR, 1); + + /* Fetch the value and use it (since it's the result of the expression) */ + LoadExpr (CF_NONE, Expr); + + /* Defer the increment until the value of this expression is used */; + DeferInc (Expr); } - - /* Store the result back */ - Store (Expr, 0); - - /* Restore the original value in the primary register */ - g_restore (Flags | CF_FORCECHAR); } /* The result is always an expression, no reference */ @@ -1784,7 +2069,7 @@ static void PostInc (ExprDesc* Expr) static void PostDec (ExprDesc* Expr) /* Handle the postdecrement operator */ { - unsigned Flags; + unsigned Flags, Loc; NextToken (); @@ -1803,32 +2088,43 @@ static void PostDec (ExprDesc* Expr) Flags = TypeOf (Expr->Type); /* Emit smaller code if a char variable is at a constant location */ - if ((Flags & CF_CHAR) == CF_CHAR && ED_IsLocConst(Expr)) { + if ((Flags & CF_CHAR) == CF_CHAR && ED_IsLocConst (Expr)) { LoadExpr (CF_NONE, Expr); - AddCodeLine ("dec %s", ED_GetLabelName(Expr, 0)); + AddCodeLine ("dec %s", ED_GetLabelName (Expr, 0)); } else { - /* Push the address if needed */ - PushAddr (Expr); + Loc = ED_GetLoc (Expr); + if (Loc == E_LOC_PRIMARY || Loc == E_LOC_EXPR) { + /* Push the address if needed */ + PushAddr (Expr); - /* Fetch the value and save it (since it's the result of the expression) */ - LoadExpr (CF_NONE, Expr); - g_save (Flags | CF_FORCECHAR); + /* Fetch the value and save it (since it's the result of the expression) */ + LoadExpr (CF_NONE, Expr); + g_save (Flags | CF_FORCECHAR); + + /* If we have a pointer expression, increment by the size of the type */ + if (IsTypePtr (Expr->Type)) { + g_dec (Flags | CF_CONST | CF_FORCECHAR, CheckedSizeOf (Expr->Type + 1)); + } else { + g_dec (Flags | CF_CONST | CF_FORCECHAR, 1); + } + + /* Store the result back */ + Store (Expr, 0); + + /* Restore the original value in the primary register */ + g_restore (Flags | CF_FORCECHAR); - /* If we have a pointer expression, increment by the size of the type */ - if (IsTypePtr (Expr->Type)) { - g_dec (Flags | CF_CONST | CF_FORCECHAR, CheckedSizeOf (Expr->Type + 1)); } else { - g_dec (Flags | CF_CONST | CF_FORCECHAR, 1); + + /* Fetch the value and save it (since it's the result of the expression) */ + LoadExpr (CF_NONE, Expr); + + /* Defer the decrement until the value of this expression is used */; + DeferDec (Expr); } - - /* Store the result back */ - Store (Expr, 0); - - /* Restore the original value in the primary register */ - g_restore (Flags | CF_FORCECHAR); } /* The result is always an expression, no reference */ @@ -3263,6 +3559,9 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) /* Load the value */ LoadExpr (CF_FORCECHAR, Expr); + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_TEST, Expr); + /* Clear the test flag */ ED_RequireNoTest (Expr); @@ -3275,9 +3574,17 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) /* Generate the jump */ g_falsejump (CF_NONE, FalseLab); - } else if (Expr->IVal == 0 && !ED_IsAddrExpr (Expr)) { - /* Skip remaining */ - Flags |= E_EVAL_UNEVAL; + } else { + /* Constant boolean subexpression could still have deferred inc/dec + ** operations, so just flush their side-effects at this sequence + ** point. + */ + DoDeferred (SQP_KEEP_NONE, Expr); + + if (Expr->IVal == 0 && !ED_IsAddrExpr (Expr)) { + /* Skip remaining */ + Flags |= E_EVAL_UNEVAL; + } } } @@ -3306,6 +3613,9 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) ED_RequireTest (&Expr2); LoadExpr (CF_FORCECHAR, &Expr2); + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_TEST, &Expr2); + /* Do short circuit evaluation */ if (CurTok.Tok == TOK_BOOL_AND) { if (HasFalseJump == 0) { @@ -3319,11 +3629,19 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) /* We need the true label for the last expression */ HasTrueJump = 1; } - } else if (Expr2.IVal == 0 && !ED_IsAddrExpr (&Expr2)) { - /* Skip remaining */ - Flags |= E_EVAL_UNEVAL; - /* The value of the expression will be false */ - ED_MakeConstBool (Expr, 0); + } else { + /* Constant boolean subexpression could still have deferred inc/ + ** dec operations, so just flush their side-effects at this + ** sequence point. + */ + DoDeferred (SQP_KEEP_NONE, &Expr2); + + if (Expr2.IVal == 0 && !ED_IsAddrExpr (&Expr2)) { + /* Skip remaining */ + Flags |= E_EVAL_UNEVAL; + /* The value of the expression will be false */ + ED_MakeConstBool (Expr, 0); + } } } } @@ -3408,6 +3726,9 @@ static void hieOr (ExprDesc *Expr) /* Get first expr */ LoadExpr (CF_FORCECHAR, Expr); + + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_TEST, Expr); /* Clear the test flag */ ED_RequireNoTest (Expr); @@ -3421,9 +3742,17 @@ static void hieOr (ExprDesc *Expr) /* Jump to TrueLab if true */ g_truejump (CF_NONE, TrueLab); } - } else if (Expr->IVal != 0 || ED_IsAddrExpr (Expr)) { - /* Skip remaining */ - Flags |= E_EVAL_UNEVAL; + } else { + /* Constant boolean subexpression could still have deferred inc/dec + ** operations, so just flush their side-effects at this sequence + ** point. + */ + DoDeferred (SQP_KEEP_NONE, Expr); + + if (Expr->IVal != 0 || ED_IsAddrExpr (Expr)) { + /* Skip remaining */ + Flags |= E_EVAL_UNEVAL; + } } } @@ -3456,17 +3785,28 @@ static void hieOr (ExprDesc *Expr) ED_RequireTest (&Expr2); LoadExpr (CF_FORCECHAR, &Expr2); + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_TEST, &Expr2); + if (HasTrueJump == 0) { TrueLab = GetLocalLabel(); HasTrueJump = 1; } g_truejump (CF_NONE, TrueLab); } - } else if (Expr2.IVal != 0 || ED_IsAddrExpr (&Expr2)) { - /* Skip remaining */ - Flags |= E_EVAL_UNEVAL; - /* The result is always true */ - ED_MakeConstBool (Expr, 1); + } else { + /* Constant boolean subexpression could still have deferred inc/ + ** dec operations, so just flush their side-effects at this + ** sequence point. + */ + DoDeferred (SQP_KEEP_NONE, &Expr2); + + if (Expr2.IVal != 0 || ED_IsAddrExpr (&Expr2)) { + /* Skip remaining */ + Flags |= E_EVAL_UNEVAL; + /* The result is always true */ + ED_MakeConstBool (Expr, 1); + } } } @@ -3547,11 +3887,22 @@ static void hieQuest (ExprDesc* Expr) /* Condition codes not set, request a test */ ED_RequireTest (Expr); LoadExpr (CF_NONE, Expr); + + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_TEST, Expr); + FalseLab = GetLocalLabel (); g_falsejump (CF_NONE, FalseLab); - } else if (Expr->IVal == 0) { - /* Remember the current code position */ - GetCodePos (&SkippedBranch); + } else { + /* Constant boolean subexpression could still have deferred inc/dec + ** operations, so just flush their side-effects at this sequence point. + */ + DoDeferred (SQP_KEEP_NONE, Expr); + + if (Expr->IVal == 0) { + /* Remember the current code position */ + GetCodePos (&SkippedBranch); + } } /* Parse second expression. Remember for later if it is a NULL pointer @@ -3563,7 +3914,17 @@ static void hieQuest (ExprDesc* Expr) if (!ConstantCond || !ED_IsConst (&Expr2)) { /* Load it into the primary */ LoadExpr (CF_NONE, &Expr2); + + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_EXPR, &Expr2); + ED_FinalizeRValLoad (&Expr2); + } else { + /* Constant boolean subexpression could still have deferred inc/ + ** dec operations, so just flush their side-effects at this + ** sequence point. + */ + DoDeferred (SQP_KEEP_NONE, &Expr2); } Expr2.Type = PtrConversion (Expr2.Type); } @@ -3601,7 +3962,17 @@ static void hieQuest (ExprDesc* Expr) if (!ConstantCond || !ED_IsConst (&Expr3)) { /* Load it into the primary */ LoadExpr (CF_NONE, &Expr3); + + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_EXPR, &Expr3); + ED_FinalizeRValLoad (&Expr3); + } else { + /* Constant boolean subexpression could still have deferred inc/ + ** dec operations, so just flush their side-effects at this + ** sequence point. + */ + DoDeferred (SQP_KEEP_NONE, &Expr3); } Expr3.Type = PtrConversion (Expr3.Type); } @@ -4011,6 +4382,9 @@ void hie0 (ExprDesc *Expr) hie1 (Expr); while (CurTok.Tok == TOK_COMMA) { + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_NONE, Expr); + /* If the expression didn't generate code or isn't cast to type void, ** emit a warning. */ @@ -4037,7 +4411,9 @@ void hie0 (ExprDesc *Expr) void Expression0 (ExprDesc* Expr) -/* Evaluate an expression via hie0 and put the result into the primary register */ +/* Evaluate an expression via hie0 and put the result into the primary register. +** The expression is completely evaluated and all side effects complete. +*/ { unsigned Flags = Expr->Flags & E_MASK_KEEP_RESULT; @@ -4051,6 +4427,9 @@ void Expression0 (ExprDesc* Expr) if (ED_YetToLoad (Expr)) { LoadExpr (CF_NONE, Expr); } + + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_EXPR, Expr); } diff --git a/src/cc65/expr.h b/src/cc65/expr.h index 806a376bb..d0a9988af 100644 --- a/src/cc65/expr.h +++ b/src/cc65/expr.h @@ -17,6 +17,19 @@ +/*****************************************************************************/ +/* data */ +/*****************************************************************************/ + + + +#define SQP_KEEP_NONE 0x00 +#define SQP_KEEP_TEST 0x01U +#define SQP_KEEP_EAX 0x02U +#define SQP_KEEP_EXPR 0x03U /* SQP_KEEP_TEST | SQP_KEEP_EAX */ + + + /*****************************************************************************/ /* code */ /*****************************************************************************/ @@ -38,6 +51,23 @@ void PushAddr (const ExprDesc* Expr); ** must be saved if it's not constant, before evaluating the rhs. */ +void InitDeferredOps (void); +/* Init the collection for storing deferred ops */ + +void DoneDeferredOps (void); +/* Deinit the collection for storing deferred ops */ + +int GetDeferredOpCount (void); +/* Return how many deferred operations are still waiting in the queque */ + +void CheckDeferredOpAllDone (void); +/* Check if all deferred operations are done at sequence points. +** Die off if check fails. +*/ + +void DoDeferred (unsigned Flags, ExprDesc* Expr); +/* Do deferred operations such as post-inc/dec at sequence points */ + void Store (ExprDesc* Expr, const Type* StoreType); /* Store the primary register into the location denoted by lval. If StoreType ** is given, use this type when storing instead of lval->Type. If StoreType @@ -52,7 +82,9 @@ int evalexpr (unsigned flags, void (*Func) (ExprDesc*), ExprDesc* Expr); */ void Expression0 (ExprDesc* Expr); -/* Evaluate an expression via hie0 and put the result into the primary register */ +/* Evaluate an expression via hie0 and put the result into the primary register. +** The expression is completely evaluated and all side effects complete. +*/ void BoolExpr (void (*Func) (ExprDesc*), ExprDesc* Expr); /* Will evaluate an expression via the given function. If the result is not diff --git a/src/cc65/goto.c b/src/cc65/goto.c index 06364068f..7d3ff1a6a 100644 --- a/src/cc65/goto.c +++ b/src/cc65/goto.c @@ -105,6 +105,9 @@ void GotoStatement (void) val = (unsigned char)CurTok.IVal; NextToken (); + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_NONE, &desc); + if (CPUIsets[CPU] & CPU_ISET_65SC02) { AddCodeLine ("ldx #$%02X", val * 2); AddCodeLine ("jmp (.loword(%s),x)", arr->AsmName); @@ -118,6 +121,10 @@ void GotoStatement (void) (idx = FindSym (CurTok.Ident))) { hie10 (&desc); LoadExpr (CF_NONE, &desc); + + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_EAX, &desc); + AddCodeLine ("asl a"); if (CPUIsets[CPU] & CPU_ISET_65SC02) { diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 81d0cea09..7812acebd 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -165,6 +165,8 @@ static void ParseRegisterDecl (Declaration* Decl, int Reg) /* Store the value into the variable */ g_putstatic (CF_REGVAR | TypeOf (Sym->Type), Reg, 0); + /* This has to be done at sequence point */ + DoDeferred (SQP_KEEP_NONE, &Expr); } /* Mark the variable as referenced */ @@ -273,6 +275,8 @@ static void ParseAutoDecl (Declaration* Decl) /* Push the value */ g_push (Flags | TypeOf (Sym->Type), Expr.IVal); + /* This has to be done at sequence point */ + DoDeferred (SQP_KEEP_NONE, &Expr); } /* Mark the variable as referenced */ @@ -349,6 +353,9 @@ static void ParseAutoDecl (Declaration* Decl) /* Store the value into the variable */ g_putstatic (CF_STATIC | TypeOf (Sym->Type), DataLabel, 0); + + /* This has to be done at sequence point */ + DoDeferred (SQP_KEEP_NONE, &Expr); } /* Mark the variable as referenced */ @@ -525,6 +532,9 @@ static void ParseOneDecl (const DeclSpec* Spec) } } + + /* Make sure we aren't missing some work */ + CheckDeferredOpAllDone (); } diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index 74579212e..c1fb6c735 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -245,6 +245,9 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) LoadExpr (CF_NONE, &Arg3.Expr); } + /* We still need to append deferred inc/dec before calling into the function */ + DoDeferred (SQP_KEEP_EAX, &Arg3.Expr); + /* Emit the actual function call. This will also cleanup the stack. */ g_call (CF_FIXARGC, Func_memcpy, ParamSize); @@ -594,6 +597,9 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr) LoadExpr (CF_NONE, &Arg3.Expr); } + /* We still need to append deferred inc/dec before calling into the function */ + DoDeferred (SQP_KEEP_EAX, &Arg3.Expr); + /* Emit the actual function call. This will also cleanup the stack. */ g_call (CF_FIXARGC, MemSet? Func_memset : Func__bzero, ParamSize); @@ -808,6 +814,9 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr) LoadExpr (CF_NONE, &Arg2.Expr); } + /* We still need to append deferred inc/dec before calling into the function */ + DoDeferred (SQP_KEEP_EAX, &Arg2.Expr); + /* Emit the actual function call. This will also cleanup the stack. */ g_call (CF_FIXARGC, Func_strcmp, ParamSize); @@ -1007,6 +1016,9 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) LoadExpr (CF_NONE, &Arg2.Expr); } + /* We still need to append deferred inc/dec before calling into the function */ + DoDeferred (SQP_KEEP_EAX, &Arg2.Expr); + /* Emit the actual function call. This will also cleanup the stack. */ g_call (CF_FIXARGC, Func_strcpy, ParamSize); @@ -1193,6 +1205,9 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* Evaluate the parameter */ hie1 (&Arg); + /* We still need to append deferred inc/dec before calling into the function */ + DoDeferred (SQP_KEEP_EAX, &Arg); + /* Check if the argument is an array. If so, remember the element count. ** Otherwise set the element count to undefined. */ diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index 74b841493..9890c5467 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -352,6 +352,9 @@ static void ReturnStatement (void) LoadExpr (CF_NONE, &Expr); } } + + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_EAX, &Expr); } } else if (!F_HasVoidReturn (CurrentFunc) && !F_HasOldStyleIntRet (CurrentFunc)) { diff --git a/src/cc65/testexpr.c b/src/cc65/testexpr.c index 80fe4bc3d..eefaeb74a 100644 --- a/src/cc65/testexpr.c +++ b/src/cc65/testexpr.c @@ -66,6 +66,9 @@ unsigned Test (unsigned Label, int Invert) /* Check for a constant expression */ if (ED_IsConstAbs (&Expr)) { + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_NONE, &Expr); + /* Result is constant, so we know the outcome */ Result = (Expr.IVal != 0); @@ -79,6 +82,9 @@ unsigned Test (unsigned Label, int Invert) } else if (ED_IsAddrExpr (&Expr)) { + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_NONE, &Expr); + /* Object addresses are non-NULL */ Result = 1; @@ -93,6 +99,9 @@ unsigned Test (unsigned Label, int Invert) /* Load the value into the primary register */ LoadExpr (CF_FORCECHAR, &Expr); + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_TEST, &Expr); + /* Generate the jump */ if (Invert) { g_truejump (CF_NONE, Label); From 947dd9aca040076b3b073ce43951875a31dc48da Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 22 Oct 2020 08:54:07 +0200 Subject: [PATCH 0572/2710] Adjusted ChkDkGEOS. --- doc/geos.sgml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/geos.sgml b/doc/geos.sgml index ec9d66b1a..a10ade5d5 100644 --- a/doc/geos.sgml +++ b/doc/geos.sgml @@ -722,9 +722,9 @@ disk. Otherwise they will be lost. Operating area is the <tt/curDirHead/. This function returns the number of free blocks on the current disk. It is counted using data in <tt/curDirHead/ so you must initialize the disk before calling it. -<sect3>ChkDskGEOS +<sect3>ChkDkGEOS <p> -<tt/char ChkDskGEOS (void)/ +<tt/char ChkDkGEOS (void)/ <p> This functions checks <tt/curDirHead/ for the GEOS Format identifier. It returns either true or false, and also sets <tt/isGEOS/ properly. You must initialize the disk before using this. @@ -987,7 +987,7 @@ a particular file. <p> In GEOS there can be only one file opened at a time. Upon opening a VLIR file some information about it is copied into memory. You can retrieve the records table at <tt/fileTrScTab/ (table of -128 <tt/struct tr_se/) and from <tt/VLIRInfo/ (<tt/struct VLIR_info/. +128 <tt/struct tr_se/) and from <tt/VLIRInfo/ (<tt/struct VLIR_info/). E.g. the size of whole VLIR file can be retrieved by reading <tt/VLIRInfo.fileSize/. <sect3>OpenRecordFile From 8e685a00717348d5b1af9cac180269b15fa25b71 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Fri, 23 Oct 2020 18:35:14 +0200 Subject: [PATCH 0573/2710] Mention recursion. --- doc/cc65.sgml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 578217307..115f0a30c 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -446,10 +446,10 @@ Here is a description of all the command line options: Use static storage for local variables instead of storage on the stack. Since the stack is emulated in software, this gives shorter and usually - faster code, but the code is no longer reentrant. The difference between - <tt/-Cl/ and declaring local variables as static yourself is, that - initializer code is executed each time, the function is entered. So when - using + faster code, but the code is no longer reentrant as required for recursion. + The difference between <tt/-Cl/ and declaring local variables as static + yourself is, that initializer code is executed each time, the function is + entered. So when using <tscreen><verb> void f (void) From b8889bf37ecffce7946917bb6291d983fcc2d0ce Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Fri, 23 Oct 2020 23:47:30 +0200 Subject: [PATCH 0574/2710] Now getchar works --- libsrc/telestrat/read.s | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index 76de9d0ac..0782c4d21 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -8,21 +8,33 @@ .include "zeropage.inc" .include "telestrat.inc" + .include "fcntl.inc" ;int read (int fd, void* buf, unsigned count); .proc _read - sta ptr1 ; count - stx ptr1+1 ; count - jsr popax ; get buf + sta ptr1 ; count + stx ptr1+1 ; count + jsr popax ; get buf sta PTR_READ_DEST stx PTR_READ_DEST+1 - sta ptr2 ; in order to calculate nb of bytes read + sta ptr2 ; in order to calculate nb of bytes read stx ptr2+1 ; - ; jsr popax ; fp pointer don't care in this version + jsr popax ; fp pointer don't care in this version + cpx #$00 + bne @is_not_stdin + cmp #STDIN_FILENO + bne @is_not_stdin + ; stdin +@L1: + BRK_TELEMON XRD0 ; waits until key is pressed + bcs @L1 + + rts +@is_not_stdin: lda ptr1 ; ldy ptr1+1 ; BRK_TELEMON XFREAD ; calls telemon30 routine From 2fcd8b934ac4cbc577a02a83cc4c83f9f90d7561 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 24 Oct 2020 13:55:10 +0200 Subject: [PATCH 0575/2710] Made HGR segment obligatory. Requiring the HGR segment makes the configs a little less flexible, but for the intended use case the HGR segment actually is necessary. And as we learned now, making the HGR segment obligatory helps users to not shoot themselves in the foot. --- cfg/apple2-hgr.cfg | 4 ++-- cfg/apple2enh-hgr.cfg | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cfg/apple2-hgr.cfg b/cfg/apple2-hgr.cfg index 3ccf7b6f3..cfe577e00 100644 --- a/cfg/apple2-hgr.cfg +++ b/cfg/apple2-hgr.cfg @@ -23,8 +23,8 @@ SEGMENTS { EXEHDR: load = HEADER, type = ro, optional = yes; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; - HGR: load = MAIN, type = rw, optional = yes, start = $2000; - CODE: load = MAIN, type = ro start = $4000; + HGR: load = MAIN, type = rw, start = $2000; + CODE: load = MAIN, type = ro start = $4000; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = rw; diff --git a/cfg/apple2enh-hgr.cfg b/cfg/apple2enh-hgr.cfg index 3ccf7b6f3..cfe577e00 100644 --- a/cfg/apple2enh-hgr.cfg +++ b/cfg/apple2enh-hgr.cfg @@ -23,8 +23,8 @@ SEGMENTS { EXEHDR: load = HEADER, type = ro, optional = yes; STARTUP: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; - HGR: load = MAIN, type = rw, optional = yes, start = $2000; - CODE: load = MAIN, type = ro start = $4000; + HGR: load = MAIN, type = rw, start = $2000; + CODE: load = MAIN, type = ro start = $4000; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; INIT: load = MAIN, type = rw; From 07cc6a3d208b28ba6bcb42f9a02b8cb765c61bd8 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 18 Sep 2020 20:23:02 +0800 Subject: [PATCH 0576/2710] Made optimization steps aware of long branches better. --- src/cc65/coptcmp.c | 4 +++- src/cc65/coptptrload.c | 2 +- src/cc65/coptshift.c | 5 ++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/cc65/coptcmp.c b/src/cc65/coptcmp.c index a4a8c6a9b..fda23ae0a 100644 --- a/src/cc65/coptcmp.c +++ b/src/cc65/coptcmp.c @@ -944,7 +944,9 @@ unsigned OptCmp9 (CodeSeg* S) if (L[0]->OPC == OP65_SBC && CS_GetEntries (S, L+1, I+1, 4) && (L[1]->OPC == OP65_BVC || - L[1]->OPC == OP65_BVS) && + L[1]->OPC == OP65_BVS || + L[1]->OPC == OP65_JVC || + L[1]->OPC == OP65_JVS) && L[1]->JumpTo != 0 && L[1]->JumpTo->Owner == L[3] && L[2]->OPC == OP65_EOR && diff --git a/src/cc65/coptptrload.c b/src/cc65/coptptrload.c index 0534a1fa2..046e65d79 100644 --- a/src/cc65/coptptrload.c +++ b/src/cc65/coptptrload.c @@ -988,7 +988,7 @@ unsigned OptPtrLoad12 (CodeSeg* S) L[4]->OPC == OP65_CLC && L[5]->OPC == OP65_ADC && CE_IsKnownImm (L[5], 1) && - L[6]->OPC == OP65_BCC && + (L[6]->OPC == OP65_BCC || L[6]->OPC == OP65_JCC) && L[6]->JumpTo != 0 && L[6]->JumpTo->Owner == L[8] && L[7]->OPC == OP65_INX && diff --git a/src/cc65/coptshift.c b/src/cc65/coptshift.c index 92210ebb5..aef3f64bc 100644 --- a/src/cc65/coptshift.c +++ b/src/cc65/coptshift.c @@ -341,7 +341,10 @@ unsigned OptShift2 (CodeSeg* S) L[0] = CS_GetEntry (S, I); /* Check for the sequence */ - if ((L[0]->OPC == OP65_BPL || L[0]->OPC == OP65_BCC) && + if ((L[0]->OPC == OP65_BPL || + L[0]->OPC == OP65_BCC || + L[0]->OPC == OP65_JPL || + L[0]->OPC == OP65_JCC) && L[0]->JumpTo != 0 && CS_GetEntries (S, L+1, I+1, 3) && L[1]->OPC == OP65_DEX && From f723147f04f19ddc7e39bad9211a6f26082ffbc5 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 25 Oct 2020 14:06:44 +0100 Subject: [PATCH 0577/2710] Streamlined clock rate handling. * Docs say that CLK_TCK is an obsolete alias of CLOCKS_PER_SEC so there's no point in individual definitions. * All targets determining the clock rate at runtime can use a common handling. --- include/time.h | 46 ++++++++++++---------------------------- libsrc/atari/clock.s | 8 ++++--- libsrc/atari5200/clock.s | 1 - libsrc/lynx/clock.s | 14 +++++------- 4 files changed, 24 insertions(+), 45 deletions(-) diff --git a/include/time.h b/include/time.h index 4ee658da9..49d7e6870 100644 --- a/include/time.h +++ b/include/time.h @@ -83,46 +83,31 @@ extern struct _timezone { -#if defined(__ATARI__) -/* The clock depends on the video standard, so read it at runtime */ -unsigned _clocks_per_sec (void); -# define CLK_TCK _clocks_per_sec() -# define CLOCKS_PER_SEC _clocks_per_sec() -#elif defined(__ATARI5200__) -# define CLK_TCK 60 /* POSIX */ -# define CLOCKS_PER_SEC 60 /* ANSI */ +#if defined(__ATARI5200__) +# define CLOCKS_PER_SEC 60 #elif defined(__ATMOS__) -# define CLK_TCK 100 /* POSIX */ -# define CLOCKS_PER_SEC 100 /* ANSI */ +# define CLOCKS_PER_SEC 100 #elif defined(__CBM__) # if defined(__CBM510__) || defined(__CBM610__) /* The 510/610 gets its clock from the AC current */ -# define CLK_TCK 50 /* POSIX */ -# define CLOCKS_PER_SEC 50 /* ANSI */ +# define CLOCKS_PER_SEC 50 # else -# define CLK_TCK 60 /* POSIX */ -# define CLOCKS_PER_SEC 60 /* ANSI */ +# define CLOCKS_PER_SEC 60 # endif #elif defined(__NES__) -# define CLK_TCK 50 /* POSIX */ -# define CLOCKS_PER_SEC 50 /* ANSI */ +# define CLOCKS_PER_SEC 50 #elif defined(__PCE__) -# define CLK_TCK 60 /* POSIX */ -# define CLOCKS_PER_SEC 60 /* ANSI */ +# define CLOCKS_PER_SEC 60 #elif defined(__GAMATE__) -# define CLK_TCK 135 /* POSIX */ /* FIXME */ -# define CLOCKS_PER_SEC 135 /* ANSI */ /* FIXME */ +# define CLOCKS_PER_SEC 135 /* FIXME */ #elif defined(__GEOS__) -# define CLK_TCK 1 /* POSIX */ -# define CLOCKS_PER_SEC 1 /* ANSI */ -#elif defined(__LYNX__) -/* The clock-rate depends on the video scan-rate; -** so, read it at run-time. -*/ -extern clock_t _clk_tck (void); -# define CLK_TCK _clk_tck() -# define CLOCKS_PER_SEC _clk_tck() +# define CLOCKS_PER_SEC 1 +#else +/* Read the clock rate at runtime */ +clock_t _clocks_per_sec (void); +# define CLOCKS_PER_SEC _clocks_per_sec() #endif +#define CLK_TCK CLOCKS_PER_SEC #define CLOCK_REALTIME 0 @@ -149,6 +134,3 @@ int __fastcall__ clock_settime (clockid_t clock_id, const struct timespec *tp); /* End of time.h */ #endif - - - diff --git a/libsrc/atari/clock.s b/libsrc/atari/clock.s index e04416c18..853870520 100644 --- a/libsrc/atari/clock.s +++ b/libsrc/atari/clock.s @@ -3,7 +3,7 @@ ; originally by Ullrich von Bassewitz and Sidney Cadot ; ; clock_t clock (void); -; unsigned _clocks_per_sec (void); +; clock_t _clocks_per_sec (void); ; .export _clock, __clocks_per_sec @@ -30,8 +30,10 @@ .proc __clocks_per_sec - ldx #$00 ; Clear high byte of return value - lda PAL ; use hw register, PALNTS is only supported on XL/XE ROM + ldx #$00 ; Clear byte 1 of return value + stx sreg ; Clear byte 2 of return value + stx sreg+1 ; Clear byte 3 of return value + lda PAL ; Use hw register, PALNTS is only supported on XL/XE ROM and #$0e bne @NTSC lda #50 diff --git a/libsrc/atari5200/clock.s b/libsrc/atari5200/clock.s index f2ef85b0b..fff766093 100644 --- a/libsrc/atari5200/clock.s +++ b/libsrc/atari5200/clock.s @@ -2,7 +2,6 @@ ; from Atari computer version by Christian Groessler, 2014 ; ; clock_t clock (void); -; unsigned _clocks_per_sec (void); ; .export _clock diff --git a/libsrc/lynx/clock.s b/libsrc/lynx/clock.s index dbccb32cb..e29799df6 100644 --- a/libsrc/lynx/clock.s +++ b/libsrc/lynx/clock.s @@ -2,18 +2,14 @@ ; 2003-04-13, Ullrich von Bassewitz ; 2012-02-06, Greg King ; -; #include <time.h> +; clock_t clock (void); +; clock_t _clocks_per_sec (void); ; -; typedef unsigned long int clock_t; -; clock_t _clk_tck(void); -; #define CLOCKS_PER_SEC _clk_tck() -; clock_t clock(void); -; -; clk_tck()'s test-values are based on the numbers in "set_tv.s". +; clocks_per_sec()'s test-values are based on the numbers in "set_tv.s". ; If you change the numbers there, then change them here, too. ; - .export _clock, __clk_tck, clock_count + .export _clock, __clocks_per_sec, clock_count .interruptor update_clock, 2 ; (low priority) .constructor init_clock @@ -42,7 +38,7 @@ ;----------------------------------------------------------------------------- ; Return the number of clock ticks in one second. ; -__clk_tck: +__clocks_per_sec: ldx #$00 ; >50, >60, >75 ldy PBKUP lda #<75 From 79cf1e13a7afe1f2bf9e3a0010e9caca776cf347 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 25 Oct 2020 21:33:08 +0100 Subject: [PATCH 0578/2710] Adjusted to recent change in time.h --- samples/mandelbrot.c | 1 + 1 file changed, 1 insertion(+) diff --git a/samples/mandelbrot.c b/samples/mandelbrot.c index 595bcfbbb..519f3d823 100644 --- a/samples/mandelbrot.c +++ b/samples/mandelbrot.c @@ -31,6 +31,7 @@ /* Workaround missing clock stuff */ #ifdef __APPLE2__ # define clock() 0 +# undef CLK_TCK # define CLK_TCK 1 #endif From 353721067470fa1671a0413944dd38b744e9f0bb Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Tue, 27 Oct 2020 22:25:58 +0100 Subject: [PATCH 0579/2710] add waitvsync() for atari and atari5200 --- doc/atari.sgml | 1 + doc/atari5200.sgml | 2 +- include/atari.h | 1 + include/atari5200.h | 3 +++ libsrc/atari/waitvsync.s | 15 +++++++++++++++ libsrc/atari5200/waitvsync.s | 15 +++++++++++++++ 6 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 libsrc/atari/waitvsync.s create mode 100644 libsrc/atari5200/waitvsync.s diff --git a/doc/atari.sgml b/doc/atari.sgml index eecd1b803..7fc929f42 100644 --- a/doc/atari.sgml +++ b/doc/atari.sgml @@ -332,6 +332,7 @@ See the <url url="funcref.html" name="function reference"> for declaration and u <item>_scroll <item>_setcolor <item>_setcolor_low +<item>waitvsync </itemize> diff --git a/doc/atari5200.sgml b/doc/atari5200.sgml index 00d3dfbd2..032b0ef6c 100644 --- a/doc/atari5200.sgml +++ b/doc/atari5200.sgml @@ -77,7 +77,7 @@ Programs containing Atari 5200 specific code may use the <tt/atari5200.h/ header <sect1>Atari 5200 specific functions<p> <itemize> -<item>TBD. +<item>waitvsync </itemize> diff --git a/include/atari.h b/include/atari.h index 1a00a4c67..b2fca0b0e 100644 --- a/include/atari.h +++ b/include/atari.h @@ -227,6 +227,7 @@ extern unsigned char __fastcall__ _getcolor (unsigned char color_reg); /* Other screen functions */ /*****************************************************************************/ +extern void waitvsync (void); /* Wait for start of next frame */ extern int __fastcall__ _graphics (unsigned char mode); /* mode value same as in BASIC */ extern void __fastcall__ _scroll (signed char numlines); /* numlines > 0 scrolls up */ diff --git a/include/atari5200.h b/include/atari5200.h index d6c2561b2..9662fe98e 100644 --- a/include/atari5200.h +++ b/include/atari5200.h @@ -89,5 +89,8 @@ extern void atr5200std_joy[]; /* referred to by joy_static_stddrv[] */ */ #define _bordercolor(color) 0 +extern void waitvsync (void); +/* Wait for start of next frame */ + /* End of atari5200.h */ #endif diff --git a/libsrc/atari/waitvsync.s b/libsrc/atari/waitvsync.s new file mode 100644 index 000000000..a19b2375d --- /dev/null +++ b/libsrc/atari/waitvsync.s @@ -0,0 +1,15 @@ +; +; Written by Christian Groessler <chris@groessler.org> +; +; void waitvsync (void); +; + + .include "atari.inc" + .export _waitvsync + +.proc _waitvsync + lda RTCLOK+2 +@lp: cmp RTCLOK+2 + beq @lp + rts +.endproc diff --git a/libsrc/atari5200/waitvsync.s b/libsrc/atari5200/waitvsync.s new file mode 100644 index 000000000..9a67c6429 --- /dev/null +++ b/libsrc/atari5200/waitvsync.s @@ -0,0 +1,15 @@ +; +; Written by Christian Groessler <chris@groessler.org> +; +; void waitvsync (void); +; + + .include "atari5200.inc" + .export _waitvsync + +.proc _waitvsync + lda RTCLOK+1 +@lp: cmp RTCLOK+1 + beq @lp + rts +.endproc From 262631039dca1c7440457586d3a64d10ae9248db Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Wed, 28 Oct 2020 17:37:50 +0100 Subject: [PATCH 0580/2710] atari.h, atari5200.h: style fixes --- include/atari.h | 2 +- include/atari5200.h | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/atari.h b/include/atari.h index b2fca0b0e..f5916a284 100644 --- a/include/atari.h +++ b/include/atari.h @@ -227,7 +227,7 @@ extern unsigned char __fastcall__ _getcolor (unsigned char color_reg); /* Other screen functions */ /*****************************************************************************/ -extern void waitvsync (void); /* Wait for start of next frame */ +extern void waitvsync (void); /* wait for start of next frame */ extern int __fastcall__ _graphics (unsigned char mode); /* mode value same as in BASIC */ extern void __fastcall__ _scroll (signed char numlines); /* numlines > 0 scrolls up */ diff --git a/include/atari5200.h b/include/atari5200.h index 9662fe98e..a18360c61 100644 --- a/include/atari5200.h +++ b/include/atari5200.h @@ -35,7 +35,7 @@ -/* Check for errors */ +/* check for errors */ #if !defined(__ATARI5200__) # error This module may only be used when compiling for the Atari 5200! #endif @@ -46,14 +46,14 @@ /* the addresses of the static drivers */ extern void atr5200std_joy[]; /* referred to by joy_static_stddrv[] */ -/* Masks for joy_read */ +/* masks for joy_read */ #define JOY_UP_MASK 0x01 #define JOY_DOWN_MASK 0x02 #define JOY_LEFT_MASK 0x04 #define JOY_RIGHT_MASK 0x08 #define JOY_BTN_1_MASK 0x10 -/* Character codes */ +/* character codes */ #define CH_ULCORNER 0x0B /* '+' sign */ #define CH_URCORNER 0x0B #define CH_LLCORNER 0x0B @@ -65,7 +65,7 @@ extern void atr5200std_joy[]; /* referred to by joy_static_stddrv[] */ #define AT_NTSC 0 #define AT_PAL 1 -/* Define hardware */ +/* define hardware */ #include <_gtia.h> #define GTIA_READ (*(struct __gtia_read*)0xC000) #define GTIA_WRITE (*(struct __gtia_write*)0xC000) @@ -89,8 +89,8 @@ extern void atr5200std_joy[]; /* referred to by joy_static_stddrv[] */ */ #define _bordercolor(color) 0 +/* wait for start of next frame */ extern void waitvsync (void); -/* Wait for start of next frame */ -/* End of atari5200.h */ +/* end of atari5200.h */ #endif From a686988d0ebb0b42d965ed006b9d3a78b78d947c Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Wed, 28 Oct 2020 09:35:49 +0100 Subject: [PATCH 0581/2710] Add test cases for integral promotion of chars Both signed and unsigned chars are promoted to int by C's evaluation rules. It is more efficient to use unsigned operations when possible, however. These tests will help test the correctness of optimizations doing that. See #1308. --- test/val/char-promote.c | 127 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 test/val/char-promote.c diff --git a/test/val/char-promote.c b/test/val/char-promote.c new file mode 100644 index 000000000..1d6360d45 --- /dev/null +++ b/test/val/char-promote.c @@ -0,0 +1,127 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of promotions of character types. +*/ + +#include <stdio.h> + +typedef unsigned char u8; + +static unsigned char failures = 0; + +void test_sub (void) +{ + const u8 one = 1, two = 2; + + /* For any unsigned type other than unsigned char, (T) 1 - (T) 2 > 0. */ + if (1U - 2U < 0) { + fprintf (stderr, "Expected 1U - 2U > 0\n"); + failures++; + } + + /* The unsigned chars get promoted to int, so this is negative. */ + if (one - two > 0) { + fprintf (stderr, "Expected one - two < 0\n"); + failures++; + } + + /* Test the constant expression code paths. */ + if ((u8) 1 - (u8) 2 > 0) { + fprintf (stderr, "Expected (u8) 1 - (u8) 2 < 0\n"); + failures++; + } +} + +void test_mul (void) +{ + const u8 two_fifty_five = 255; + + if (255U * 255U != 65025U) { + fprintf (stderr, "Expected 255U * 255U == 65025U\n"); + failures++; + } +#if 0 + /* Disabled pending fix of #1310. */ + if (255 * 255 != -511) { + fprintf (stderr, "Expected 255 * 255 == -511, got: %d\n", 255 * 255); + failures++; + } +#endif + + /* The unsigned chars get promoted to int, so this is -511. + ** We should also be able to observe that the generated code uses mul, not umul. + */ + if (two_fifty_five * two_fifty_five != -511) { + fprintf (stderr, "Expected two_fifty_five * two_fifty_five == -511\n"); + failures++; + } +#if 0 + /* Disabled pending fix of #1310. */ + if ((u8) 255 * (u8) 255 != -511) { + fprintf (stderr, "Expected (u8) 255 * (u8) 255 == -511, got: %d\n", + (u8) 255 * (u8) 255); + failures++; + } +#endif +} + +void test_div (void) +{ + const u8 seventeen = 17; + const u8 three = 3; + + /* We should also be able to observe that the generated code uses div, not udiv. */ + if (seventeen / three != 5) { + fprintf (stderr, "Expected seventeen / three == 5, got: %d\n", seventeen / three); + failures++; + } + if ((u8) 17 / (u8) 3 != 5) { + fprintf (stderr, "Expected (u8) 17 / (u8) 3 == 5, got: %d\n", (u8) 17 / (u8) 3); + failures++; + } +} + +void test_shr (void) +{ + const unsigned int forty_two = 42; + const unsigned int two = 2; + + /* We should also be able to observe that the generated code uses asr, not shr. */ + if (forty_two >> two != 10) { + fprintf (stderr, "Expected forty_two / two == 10, got: %d\n", forty_two >> two); + failures++; + } + if ((u8) 42 >> (u8) 2 != 10) { + fprintf (stderr, "Expected (u8) 42 >> (u8) 2 == 10, got: %d\n", (u8) 42 >> (u8) 3); + failures++; + } +} + +int main (void) +{ + test_sub (); + test_mul (); + test_div (); + test_shr (); + printf ("failures: %u\n", failures); + return failures; +} From 944ebbc23cf6d74ffe1f5f1d5a9ca001066d7d23 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Thu, 29 Oct 2020 16:19:38 +0100 Subject: [PATCH 0582/2710] atarixl configs: make size of CHARGEN configurable If text mode is not used, its space can be reclaimed by setting __CHARGENSIZE__ to 0. Following a suggestion from issue #1314. --- cfg/atarixl-largehimem.cfg | 33 +++++++++++++++++---------------- cfg/atarixl-overlay.cfg | 37 +++++++++++++++++++------------------ cfg/atarixl-xex.cfg | 21 +++++++++++---------- cfg/atarixl.cfg | 29 +++++++++++++++-------------- 4 files changed, 62 insertions(+), 58 deletions(-) diff --git a/cfg/atarixl-largehimem.cfg b/cfg/atarixl-largehimem.cfg index 56d2af15b..5e60f32bd 100644 --- a/cfg/atarixl-largehimem.cfg +++ b/cfg/atarixl-largehimem.cfg @@ -8,39 +8,40 @@ FEATURES { } SYMBOLS { __EXEHDR__: type = import; - __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk - __AUTOSTART__: type = import; # force inclusion of autostart "trailer" - __STACKSIZE__: type = weak, value = $0800; # 2k stack + __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk + __AUTOSTART__: type = import; # force inclusion of autostart "trailer" + __STACKSIZE__: type = weak, value = $0800; # 2k stack + __CHARGENSIZE__: type = weak, value = $0400; __STARTADDRESS__: type = export, value = %S; } MEMORY { - ZP: file = "", define = yes, start = $0082, size = $007E; + ZP: file = "", define = yes, start = $0082, size = $007E; # just $FFFF - HEADER: file = %O, start = $0000, size = $0002; + HEADER: file = %O, start = $0000, size = $0002; # "system check" load chunk - SYSCHKHDR: file = %O, start = $0000, size = $0004; - SYSCHKCHNK: file = %O, start = $2E00, size = $0300; - SYSCHKTRL: file = %O, start = $0000, size = $0006; + SYSCHKHDR: file = %O, start = $0000, size = $0004; + SYSCHKCHNK: file = %O, start = $2E00, size = $0300; + SYSCHKTRL: file = %O, start = $0000, size = $0006; # "shadow RAM preparation" load chunk - SRPREPHDR: file = %O, start = $0000, size = $0004; - SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned - SRPREPTRL: file = %O, start = $0000, size = $0006; + SRPREPHDR: file = %O, start = $0000, size = $0004; + SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned + SRPREPTRL: file = %O, start = $0000, size = $0006; # "main program" load chunk - MAINHDR: file = %O, start = $0000, size = $0004; - MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__; + MAINHDR: file = %O, start = $0000, size = $0004; + MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__; # defines entry point into program - TRAILER: file = %O, start = $0000, size = $0006; + TRAILER: file = %O, start = $0000, size = $0006; # address of relocated character generator - CHARGEN: file = "", define = yes, start = $D800, size = $0400; + CHARGEN: file = "", define = yes, start = $D800, size = __CHARGENSIZE__; # memory beneath the ROM - HIDDEN_RAM: file = "", define = yes, start = $DC00, size = $FFFA - $DC00; + HIDDEN_RAM: file = "", define = yes, start = $D800 + __CHARGENSIZE__, size = $FFFA - $D800 - __CHARGENSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; diff --git a/cfg/atarixl-overlay.cfg b/cfg/atarixl-overlay.cfg index 923436497..2bb4105cd 100644 --- a/cfg/atarixl-overlay.cfg +++ b/cfg/atarixl-overlay.cfg @@ -3,44 +3,45 @@ FEATURES { } SYMBOLS { __EXEHDR__: type = import; - __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk - __AUTOSTART__: type = import; # force inclusion of autostart "trailer" - __STACKSIZE__: type = weak, value = $0800; # 2k stack - __OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay + __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk + __AUTOSTART__: type = import; # force inclusion of autostart "trailer" + __STACKSIZE__: type = weak, value = $0800; # 2k stack + __CHARGENSIZE__: type = weak, value = $0400; + __OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay __STARTADDRESS__: type = export, value = %S; } MEMORY { - ZP: file = "", define = yes, start = $0082, size = $007E; + ZP: file = "", define = yes, start = $0082, size = $007E; # just $FFFF - HEADER: file = %O, start = $0000, size = $0002; + HEADER: file = %O, start = $0000, size = $0002; # "system check" load chunk - SYSCHKHDR: file = %O, start = $0000, size = $0004; - SYSCHKCHNK: file = %O, start = $2E00, size = $0300; - SYSCHKTRL: file = %O, start = $0000, size = $0006; + SYSCHKHDR: file = %O, start = $0000, size = $0004; + SYSCHKCHNK: file = %O, start = $2E00, size = $0300; + SYSCHKTRL: file = %O, start = $0000, size = $0006; # "shadow RAM preparation" load chunk - SRPREPHDR: file = %O, start = $0000, size = $0004; - SRPREPCHNK: file = %O, define = yes, start = %S + __OVERLAYSIZE__, size = $7C20 - %S - __OVERLAYSIZE__ - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned - SRPREPTRL: file = %O, start = $0000, size = $0006; + SRPREPHDR: file = %O, start = $0000, size = $0004; + SRPREPCHNK: file = %O, define = yes, start = %S + __OVERLAYSIZE__, size = $7C20 - %S - __OVERLAYSIZE__ - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned + SRPREPTRL: file = %O, start = $0000, size = $0006; # "main program" load chunk - MAINHDR: file = %O, start = $0000, size = $0004; + MAINHDR: file = %O, start = $0000, size = $0004; MAIN: file = %O, define = yes, start = %S + __OVERLAYSIZE__ + - __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __OVERLAYSIZE__ - __LOWBSS_SIZE__; + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __OVERLAYSIZE__ - __LOWBSS_SIZE__; # defines entry point into program - TRAILER: file = %O, start = $0000, size = $0006; + TRAILER: file = %O, start = $0000, size = $0006; # memory beneath the ROM preceeding the character generator - HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800; + HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800; # address of relocated character generator (same addess as ROM version) - CHARGEN: file = "", define = yes, start = $E000, size = $0400; + CHARGEN: file = "", define = yes, start = $E000, size = __CHARGENSIZE__; # memory beneath the ROM - HIDDEN_RAM: file = "", define = yes, start = $E400, size = $FFFA - $E400; + HIDDEN_RAM: file = "", define = yes, start = $E000 + __CHARGENSIZE__, size = $FFFA - $E000 - __CHARGENSIZE__; # overlays OVL1: file = "%O.1", start = %S, size = __OVERLAYSIZE__; diff --git a/cfg/atarixl-xex.cfg b/cfg/atarixl-xex.cfg index 0b1fe9ca1..6b6601c59 100644 --- a/cfg/atarixl-xex.cfg +++ b/cfg/atarixl-xex.cfg @@ -4,35 +4,36 @@ FEATURES { STARTADDRESS: default = $2400; } SYMBOLS { - __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk - __STACKSIZE__: type = weak, value = $0800; # 2k stack + __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk + __STACKSIZE__: type = weak, value = $0800; # 2k stack __STARTADDRESS__: type = export, value = %S; + __CHARGENSIZE__: type = weak, value = $0400; __SYSCHKHDR__: type = export, value = 0; # Disable system check header __SYSCHKTRL__: type = export, value = 0; # Disable system check trailer } MEMORY { - ZP: file = "", define = yes, start = $0082, size = $007E; + ZP: file = "", define = yes, start = $0082, size = $007E; # "system check" load chunk - SYSCHKCHNK: file = %O, start = $2E00, size = $0300; + SYSCHKCHNK: file = %O, start = $2E00, size = $0300; # "shadow RAM preparation" load chunk - SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned + SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned # "main program" load chunk - MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__; + MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__; # memory beneath the ROM preceeding the character generator - HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800; + HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800; # address of relocated character generator (same addess as ROM version) - CHARGEN: file = "", define = yes, start = $E000, size = $0400; + CHARGEN: file = "", define = yes, start = $E000, size = __CHARGENSIZE__; # memory beneath the ROM - HIDDEN_RAM: file = "", define = yes, start = $E400, size = $FFFA - $E400; + HIDDEN_RAM: file = "", define = yes, start = $E000 + __CHARGENSIZE__, size = $FFFA - $E000 - __CHARGENSIZE__; # UNUSED - hide - UNUSED: file = "", start = $0, size = $10; + UNUSED: file = "", start = $0, size = $10; } FILES { %O: format = atari; diff --git a/cfg/atarixl.cfg b/cfg/atarixl.cfg index 197daace6..d4e466ae1 100644 --- a/cfg/atarixl.cfg +++ b/cfg/atarixl.cfg @@ -6,39 +6,40 @@ SYMBOLS { __SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk __AUTOSTART__: type = import; # force inclusion of autostart "trailer" __STACKSIZE__: type = weak, value = $0800; # 2k stack + __CHARGENSIZE__: type = weak, value = $0400; __STARTADDRESS__: type = export, value = %S; } MEMORY { - ZP: file = "", define = yes, start = $0082, size = $007E; + ZP: file = "", define = yes, start = $0082, size = $007E; # just $FFFF - HEADER: file = %O, start = $0000, size = $0002; + HEADER: file = %O, start = $0000, size = $0002; # "system check" load chunk - SYSCHKHDR: file = %O, start = $0000, size = $0004; - SYSCHKCHNK: file = %O, start = $2E00, size = $0300; - SYSCHKTRL: file = %O, start = $0000, size = $0006; + SYSCHKHDR: file = %O, start = $0000, size = $0004; + SYSCHKCHNK: file = %O, start = $2E00, size = $0300; + SYSCHKTRL: file = %O, start = $0000, size = $0006; # "shadow RAM preparation" load chunk - SRPREPHDR: file = %O, start = $0000, size = $0004; - SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned - SRPREPTRL: file = %O, start = $0000, size = $0006; + SRPREPHDR: file = %O, start = $0000, size = $0004; + SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned + SRPREPTRL: file = %O, start = $0000, size = $0006; # "main program" load chunk - MAINHDR: file = %O, start = $0000, size = $0004; - MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__; + MAINHDR: file = %O, start = $0000, size = $0004; + MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__; # defines entry point into program - TRAILER: file = %O, start = $0000, size = $0006; + TRAILER: file = %O, start = $0000, size = $0006; # memory beneath the ROM preceeding the character generator - HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800; + HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800; # address of relocated character generator (same addess as ROM version) - CHARGEN: file = "", define = yes, start = $E000, size = $0400; + CHARGEN: file = "", define = yes, start = $E000, size = __CHARGENSIZE__; # memory beneath the ROM - HIDDEN_RAM: file = "", define = yes, start = $E400, size = $FFFA - $E400; + HIDDEN_RAM: file = "", define = yes, start = $E000 + __CHARGENSIZE__, size = $FFFA - $E000 - __CHARGENSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; From d8e6fa61bbcbb86c7bcf287a988f42246f22376f Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 29 Oct 2020 17:42:36 +0100 Subject: [PATCH 0583/2710] Return NULL on error (or end of directory). --- libsrc/geos-common/file/get1stdirentry.s | 8 ++++++-- libsrc/geos-common/file/getnxtdirentry.s | 10 ++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/libsrc/geos-common/file/get1stdirentry.s b/libsrc/geos-common/file/get1stdirentry.s index 3b99554eb..381a35c6d 100644 --- a/libsrc/geos-common/file/get1stdirentry.s +++ b/libsrc/geos-common/file/get1stdirentry.s @@ -5,7 +5,7 @@ ; struct filehandle* Get1stDirEntry (void); - .import __oserror + .import __oserror, return0 .export _Get1stDirEntry .include "diskdrv.inc" @@ -14,6 +14,10 @@ _Get1stDirEntry: jsr Get1stDirEntry stx __oserror - lda r5L + txa + beq L0 ; error? + jmp return0 ; return NULL + +L0: lda r5L ldx r5H rts diff --git a/libsrc/geos-common/file/getnxtdirentry.s b/libsrc/geos-common/file/getnxtdirentry.s index 912f48ca4..16a31edcf 100644 --- a/libsrc/geos-common/file/getnxtdirentry.s +++ b/libsrc/geos-common/file/getnxtdirentry.s @@ -5,7 +5,7 @@ ; struct filehandle* GetNxtDirEntry (void); - .import __oserror + .import __oserror, return0 .export _GetNxtDirEntry .include "diskdrv.inc" @@ -14,6 +14,12 @@ _GetNxtDirEntry: jsr GetNxtDirEntry stx __oserror - lda r5L + txa + beq L0 ; error? + tya + beq L0 ; end of dir? + jmp return0 ; return NULL + +L0: lda r5L ldx r5H rts From aad17a6f057dc57424c010c0d832e1f49592f044 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 29 Oct 2020 17:54:56 -0400 Subject: [PATCH 0584/2710] Made two GEOS directory functions return NULL if they can't give a valid entry. --- doc/geos.sgml | 19 ++++++++++--------- libsrc/geos-common/file/get1stdirentry.s | 12 ++++++------ libsrc/geos-common/file/getnxtdirentry.s | 14 +++++++------- 3 files changed, 23 insertions(+), 22 deletions(-) diff --git a/doc/geos.sgml b/doc/geos.sgml index a10ade5d5..11ff9c534 100644 --- a/doc/geos.sgml +++ b/doc/geos.sgml @@ -858,20 +858,21 @@ The functions described here are common for SEQ and VLIR structures. <p> <tt/struct filehandle *GetNxtDirEntry (void)/ <p> -These two functions are best suited for scanning the whole directory for particular files. Note that -the returned filehandles describe all file slots in the directory - even those with deleted files. -The return value can be obtained by casting both sides to <tt/unsigned/ - as in the <tt/SetNextFree/ -function or read directly after a call to those two functions from <tt/r5/. The current sector number -is in <tt/r1/ and the sector data itself is in <tt/diskBlkBuf/. +Those two functions are best suited for scanning the whole directory for particular files. Note that +the returned filehandles describe all file slots in the directory -- even those with deleted files. +The return value is <tt/NULL/ if there are no more slots, or if there was a disk error. The +<tt/_oserror/ variable is non-zero if it was a disk error (see <tt>geos/gdisk.h</tt>). The current +directory track and sector numbers are in <tt/r1L/ and <tt/r1H/. The sector data itself is in +<tt/diskBlkBuf/. <sect3>FindFile <p> <tt/char FindFile (char *fName)/ <p> -This function scans the whole directory for the given filename. It returns either 0 (success) or 5 -(FILE_NOT_FOUND, defined in <tt/gdisk.h/) or any other fatal disk read error. After a successful -<tt/FindFile/ you will have <tt/struct filehandle/ at <tt/dirEntryBuf/ filled with the file's data and -other registers set as described in <tt/GetNxtDirEntry/. +This function scans the whole directory for the given filename. It returns either 0 (success), 5 +(FILE_NOT_FOUND, defined in <tt>geos/gdisk.h</tt>), or any other fatal disk read error. After a successful +<tt/FindFile()/, you will have <tt/struct filehandle/ at <tt/dirEntryBuf/ filled with the file's data, and +other registers set as described in <tt/GetNxtDirEntry()/. <sect3>FindFTypes <p> diff --git a/libsrc/geos-common/file/get1stdirentry.s b/libsrc/geos-common/file/get1stdirentry.s index 381a35c6d..f0ad59388 100644 --- a/libsrc/geos-common/file/get1stdirentry.s +++ b/libsrc/geos-common/file/get1stdirentry.s @@ -1,7 +1,7 @@ ; -; Maciej 'YTM/Alliance' Witkowiak +; 1999-10-26, Maciej 'YTM/Alliance' Witkowiak +; 2020-10-29, Greg King ; -; 26.10.99 ; struct filehandle* Get1stDirEntry (void); @@ -15,9 +15,9 @@ _Get1stDirEntry: jsr Get1stDirEntry stx __oserror txa - beq L0 ; error? - jmp return0 ; return NULL - -L0: lda r5L + bne L1 ; jump if disk error + lda r5L ldx r5H rts + +L1: jmp return0 ; return NULL if not valid entry diff --git a/libsrc/geos-common/file/getnxtdirentry.s b/libsrc/geos-common/file/getnxtdirentry.s index 16a31edcf..e8ccbf3a2 100644 --- a/libsrc/geos-common/file/getnxtdirentry.s +++ b/libsrc/geos-common/file/getnxtdirentry.s @@ -1,7 +1,7 @@ ; -; Maciej 'YTM/Alliance' Witkowiak +; 1999-10-26, Maciej 'YTM/Alliance' Witkowiak +; 2020-10-29, Greg King ; -; 26.10.99 ; struct filehandle* GetNxtDirEntry (void); @@ -15,11 +15,11 @@ _GetNxtDirEntry: jsr GetNxtDirEntry stx __oserror txa - beq L0 ; error? + bne L1 ; jump if disk error tya - beq L0 ; end of dir? - jmp return0 ; return NULL - -L0: lda r5L + bne L1 ; jump when no more entries + lda r5L ldx r5H rts + +L1: jmp return0 ; return NULL if not valid entry From 39c0abed549708a127a0211d94aab204dde681c2 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Fri, 30 Oct 2020 15:01:47 +0100 Subject: [PATCH 0585/2710] atarixl: fix compilation problem when CHARGEN_RELOC is defined --- libsrc/atari/shadow_ram_timerirq1.s | 1 + libsrc/atari/shadow_ram_timerirq2.s | 1 + 2 files changed, 2 insertions(+) diff --git a/libsrc/atari/shadow_ram_timerirq1.s b/libsrc/atari/shadow_ram_timerirq1.s index f8a3e9b4d..e1b7d831b 100644 --- a/libsrc/atari/shadow_ram_timerirq1.s +++ b/libsrc/atari/shadow_ram_timerirq1.s @@ -11,6 +11,7 @@ SHRAM_HANDLERS = 1 .include "atari.inc" .include "romswitch.inc" + .import __CHARGEN_START__ .export set_VTIMR1_handler diff --git a/libsrc/atari/shadow_ram_timerirq2.s b/libsrc/atari/shadow_ram_timerirq2.s index b2cdaecd2..d6d581937 100644 --- a/libsrc/atari/shadow_ram_timerirq2.s +++ b/libsrc/atari/shadow_ram_timerirq2.s @@ -11,6 +11,7 @@ SHRAM_HANDLERS = 1 .include "atari.inc" .include "romswitch.inc" + .import __CHARGEN_START__ .export set_VTIMR2_handler From 0e482c7f922b3563113ea68839054f518f852fda Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Wed, 28 Oct 2020 09:52:54 +0100 Subject: [PATCH 0586/2710] Add test for issue #1310 --- test/todo/bug1310.c | 73 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 test/todo/bug1310.c diff --git a/test/todo/bug1310.c b/test/todo/bug1310.c new file mode 100644 index 000000000..936145928 --- /dev/null +++ b/test/todo/bug1310.c @@ -0,0 +1,73 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of constant expressions. https://github.com/cc65/cc65/issues/1310 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +int main (void) +{ + /* 255 * 255 is signed integer overflow, so UB, but it would be nice if + ** (1) there were a warning, and (2) it did the "obvious" thing. + */ + const int two_fifty_five = 255; + const int two_fifty_five_squared = 255 * 255; + + /* Unsigned overflow is not UB, but has similar problems with comparison. */ + const int two_fifty_six = 256U; + const int two_fifty_six_squared = 256U * 256U; + + if (255 * 255 != -511) { + fprintf (stderr, "Expected 255 * 255 == -511, got: %d\n", 255 * 255); + failures++; + } + if (two_fifty_five * two_fifty_five != -511) { + fprintf (stderr, "Expected two_fifty_five * two_fifty_five == -511, got: %d\n", + two_fifty_five * two_fifty_five); + failures++; + } + if (two_fifty_five_squared != -511) { + fprintf (stderr, "Expected two_fifty_five_squared == -511, got: %d\n", + two_fifty_five_squared); + failures++; + } + + if (256U * 256U != 0) { + fprintf (stderr, "Expected 256U * 256U == 0, got: %d\n", 256U * 256U); + failures++; + } + if (two_fifty_six * two_fifty_six != 0) { + fprintf (stderr, "Expected two_fifty_six * two_fifty_six == 0, got: %d\n", + two_fifty_six * two_fifty_six); + failures++; + } + if (two_fifty_six_squared != 0) { + fprintf (stderr, "Expected two_fifty_six_squared == 0, got: %d\n", + two_fifty_six_squared); + failures++; + } + + printf ("failures: %u\n", failures); + return failures; +} From 65193c6aaf6227b731b8da03cccab521f6ffe3cd Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Mon, 2 Nov 2020 09:03:06 +0100 Subject: [PATCH 0587/2710] Add stdint.h constants INT32_MIN and UINT32_MAX These were missing before --- src/common/inttypes.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/common/inttypes.h b/src/common/inttypes.h index 0d8caf32a..ca30ceb71 100644 --- a/src/common/inttypes.h +++ b/src/common/inttypes.h @@ -64,9 +64,11 @@ typedef size_t uintmax_t; #define INT8_MIN (-INT8_MAX - 1) #define INT16_MIN (-INT16_MAX - 1) +#define INT32_MIN (-INT32_MAX - 1) #define UINT8_MAX (0xFF) #define UINT16_MAX (0xFFFF) +#define UINT32_MAX (0xFFFFFFFF) #endif From b5f0c0468dd4191415a37e29acf91995d714ee6b Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Tue, 3 Nov 2020 08:26:31 +0100 Subject: [PATCH 0588/2710] Add stdint.h types for C89 compilers Add `intN_t` and `uintN_t` for N = 8, 16, 32. --- src/common/inttypes.h | 45 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/src/common/inttypes.h b/src/common/inttypes.h index ca30ceb71..28ffb2cc5 100644 --- a/src/common/inttypes.h +++ b/src/common/inttypes.h @@ -51,6 +51,7 @@ /* Assume that ptrdiff_t and size_t are wide enough to hold pointers. ** Assume that they are the widest type. */ +#include <limits.h> #include <stddef.h> typedef ptrdiff_t intptr_t; @@ -70,6 +71,50 @@ typedef size_t uintmax_t; #define UINT16_MAX (0xFFFF) #define UINT32_MAX (0xFFFFFFFF) +#if UCHAR_MAX == UINT8_MAX +typedef unsigned char uint8_t; +#else +#error "No suitable type for uint8_t found." +#endif + +#if SCHAR_MIN == INT8_MIN && SCHAR_MAX == INT8_MAX +typedef signed char int8_t; +#else +#error "No suitable type for int8_t found." +#endif + +#if UINT_MAX == UINT16_MAX +typedef unsigned int uint16_t; +#elif USHRT_MAX == UINT16_MAX +typedef unsigned short uint16_t; +#else +#error "No suitable type for uint16_t found." +#endif + +#if INT_MIN == INT16_MIN && INT_MAX == INT16_MAX +typedef int int16_t; +#elif SHRT_MIN == INT16_MIN && SHRT_MAX == INT16_MAX +typedef short int16_t; +#else +#error "No suitable type for int16_t found." +#endif + +#if UINT_MAX == UINT32_MAX +typedef unsigned int uint32_t; +#elif ULONG_MAX == UINT32_MAX +typedef unsigned long uint32_t; +#else +#error "No suitable type for uint32_t found." +#endif + +#if INT_MIN == INT32_MIN && INT_MAX == INT32_MAX +typedef int int32_t; +#elif LONG_MIN == INT32_MIN && LONG_MAX == INT32_MAX +typedef long int32_t; +#else +#error "No suitable type for int32_t found." +#endif + #endif From 81edc3f582767134253d378cc2e9aa4cea8c0cab Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 8 Nov 2020 17:45:54 -0500 Subject: [PATCH 0589/2710] Updated a comment about Kernal's STATUS variable. --- libsrc/cx16/getdevice.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/cx16/getdevice.s b/libsrc/cx16/getdevice.s index 9b554900f..5f2e74af4 100644 --- a/libsrc/cx16/getdevice.s +++ b/libsrc/cx16/getdevice.s @@ -51,7 +51,7 @@ next: inx jsr closecmdchannel ldx tmp2 -; As we had to reference ST above anyway, we can do so, as well, +; As we had to reference STATUS above anyway, we can do so, as well, ; here too (instead of calling READST). lda STATUS From 5db74b4b195cd6f730a0866e4f7b4c7bfcefb98f Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Wed, 28 Oct 2020 08:13:30 +0100 Subject: [PATCH 0590/2710] Use u16 codegen for u8 x u8 ops In g_typeadjust, before we apply the integral promotions, we check if both types are unsigned char. If so, we promote to unsigned int, rather than int, which would be chosen by the standard rules. This is only a performance optimization and does not affect correctness, as the flags returned by g_typeadjust are only used for code generation, and not to determine types of other expressions containing this one. All unsigned char bit-patterns are valid as both int and unsigned int and represent the same value, so either signed or unsigned int operations can be used. This special case part is not duplicated by ArithmeticConvert. Partial fix for #1308. --- src/cc65/codegen.c | 13 +++++++++++++ test/val/char-promote.c | 11 ++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 539309283..7a25594b6 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -1432,6 +1432,19 @@ unsigned g_typeadjust (unsigned lhs, unsigned rhs) /* Note that this logic is largely duplicated by ArithmeticConvert. */ + /* Before we apply the integral promotions, we check if both types are unsigned char. + ** If so, we return unsigned int, rather than int, which would be returned by the standard + ** rules. This is only a performance optimization and does not affect correctness, as + ** the flags are only used for code generation, and not to determine types of other + ** expressions containing this one. All unsigned char bit-patterns are valid as both int + ** and unsigned int and represent the same value, so either signed or unsigned int operations + ** can be used. This special case part is not duplicated by ArithmeticConvert. + */ + if ((lhs & CF_TYPEMASK) == CF_CHAR && (lhs & CF_UNSIGNED) && + (rhs & CF_TYPEMASK) == CF_CHAR && (rhs & CF_UNSIGNED)) { + return const_flag | CF_UNSIGNED | CF_INT; + } + /* Apply integral promotions for types char/short. */ lhs = g_intpromotion (lhs); rhs = g_intpromotion (rhs); diff --git a/test/val/char-promote.c b/test/val/char-promote.c index 1d6360d45..380a13378 100644 --- a/test/val/char-promote.c +++ b/test/val/char-promote.c @@ -68,7 +68,8 @@ void test_mul (void) #endif /* The unsigned chars get promoted to int, so this is -511. - ** We should also be able to observe that the generated code uses mul, not umul. + ** We should also be able to observe that, due to optimizations from #1315, the generated code + ** uses umul, not mul. */ if (two_fifty_five * two_fifty_five != -511) { fprintf (stderr, "Expected two_fifty_five * two_fifty_five == -511\n"); @@ -89,7 +90,9 @@ void test_div (void) const u8 seventeen = 17; const u8 three = 3; - /* We should also be able to observe that the generated code uses div, not udiv. */ + /* We should also be able to observe that, due to optimizations from #1315, the generated code + ** uses udiv, not div. + */ if (seventeen / three != 5) { fprintf (stderr, "Expected seventeen / three == 5, got: %d\n", seventeen / three); failures++; @@ -105,7 +108,9 @@ void test_shr (void) const unsigned int forty_two = 42; const unsigned int two = 2; - /* We should also be able to observe that the generated code uses asr, not shr. */ + /* We should also be able to observe that, due to optimizations from #1315, the generated code + ** uses shr, not asr. + */ if (forty_two >> two != 10) { fprintf (stderr, "Expected forty_two / two == 10, got: %d\n", forty_two >> two); failures++; From 93145246fd3533cab0525def93ac4825ec6c405c Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sat, 31 Oct 2020 18:20:15 +0100 Subject: [PATCH 0591/2710] Add tests for u8 op s16_const Test expressions like `unsigned char x = ...; ... = x / 2;` These use `int` constants with values representable by `unsigned int` / `unsigned char`, so using unsigned codegen should be possible. Additional tests for #1308. These are things we want to generate better code for, so add tests that the behavior doesn't change. --- test/val/char-promote.c | 46 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/test/val/char-promote.c b/test/val/char-promote.c index 380a13378..0d2dad04e 100644 --- a/test/val/char-promote.c +++ b/test/val/char-promote.c @@ -54,6 +54,8 @@ void test_sub (void) void test_mul (void) { const u8 two_fifty_five = 255; + const u8 sixteen = 16; + int x; if (255U * 255U != 65025U) { fprintf (stderr, "Expected 255U * 255U == 65025U\n"); @@ -83,12 +85,20 @@ void test_mul (void) failures++; } #endif + + /* This should compile to a shift. */ + x = sixteen * 4; + if (x != 64) { + fprintf (stderr, "Expected sixteen * 4 == 64, got: %d\n", x); + failures++; + } } void test_div (void) { const u8 seventeen = 17; const u8 three = 3; + int x; /* We should also be able to observe that, due to optimizations from #1315, the generated code ** uses udiv, not div. @@ -101,24 +111,57 @@ void test_div (void) fprintf (stderr, "Expected (u8) 17 / (u8) 3 == 5, got: %d\n", (u8) 17 / (u8) 3); failures++; } + + /* Ideally, this would compile to a logical shift, but that does not happen currently. */ + x = seventeen / 4; + if (x != 4) { + fprintf (stderr, "Expected seventeen / 4 == 4, got: %d\n", x); + failures++; + } +} + +void test_mod (void) +{ + const u8 seventeen = 17; + /* Ideally, this would compile to a bitwise and, but that does not happen currently. */ + int x = seventeen % 4; + if (x != 1) { + fprintf (stderr, "Expected seventeen %% 4 == 1, got: %d\n", x); + failures++; + } } void test_shr (void) { const unsigned int forty_two = 42; const unsigned int two = 2; + int x; /* We should also be able to observe that, due to optimizations from #1315, the generated code ** uses shr, not asr. */ if (forty_two >> two != 10) { - fprintf (stderr, "Expected forty_two / two == 10, got: %d\n", forty_two >> two); + fprintf (stderr, "Expected forty_two >> two == 10, got: %d\n", forty_two >> two); failures++; } if ((u8) 42 >> (u8) 2 != 10) { fprintf (stderr, "Expected (u8) 42 >> (u8) 2 == 10, got: %d\n", (u8) 42 >> (u8) 3); failures++; } + + /* Ideally, this would compile to a logical shift, but that does not happen currently. */ + x = forty_two >> 2; + if (x != 10) { + fprintf (stderr, "Expected forty_two >> 2 == 10, got: %d\n", x); + failures++; + } + + /* Ideally, this would compile to a logical shift, but that does not happen currently. */ + x = 42 >> two; + if (x != 10) { + fprintf (stderr, "Expected 42 >> two == 10, got: %d\n", x); + failures++; + } } int main (void) @@ -126,6 +169,7 @@ int main (void) test_sub (); test_mul (); test_div (); + test_mod (); test_shr (); printf ("failures: %u\n", failures); return failures; From 53f055fb1d9dd614888260a0ecd57d7e0b1cb9fa Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Wed, 11 Nov 2020 12:15:09 +0100 Subject: [PATCH 0592/2710] Reduce stack size to 256B for unexpanded VICs. --- cfg/vic20.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/vic20.cfg b/cfg/vic20.cfg index ceaee3a87..a14491e9f 100644 --- a/cfg/vic20.cfg +++ b/cfg/vic20.cfg @@ -1,7 +1,7 @@ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; - __STACKSIZE__: type = weak, value = $0400; # 1k stack + __STACKSIZE__: type = weak, value = $0100 } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; From 77da8d5490ea88396cc003417bbfdafa8a1973f6 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Wed, 11 Nov 2020 17:20:25 +0100 Subject: [PATCH 0593/2710] vic20.cfg: add missing comma --- cfg/vic20.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/vic20.cfg b/cfg/vic20.cfg index a14491e9f..8efeae229 100644 --- a/cfg/vic20.cfg +++ b/cfg/vic20.cfg @@ -1,7 +1,7 @@ SYMBOLS { __LOADADDR__: type = import; __EXEHDR__: type = import; - __STACKSIZE__: type = weak, value = $0100 + __STACKSIZE__: type = weak, value = $0100; } MEMORY { ZP: file = "", define = yes, start = $0002, size = $001A; From b33b05330713a46adad4f0cbb137da06f15dfd1a Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Tue, 10 Nov 2020 10:32:29 +0100 Subject: [PATCH 0594/2710] add c64dtv support --- asminc/cpu.mac | 2 + asminc/opcodes.inc | 8 ++ doc/ca65.sgml | 2 +- src/ca65/instr.c | 92 +++++++++++++ src/cc65/codegen.c | 3 +- src/cc65/coptjmp.c | 2 +- src/cc65/main.c | 3 +- src/cc65/opcodes.c | 2 +- src/common/cpu.c | 2 + src/common/cpu.h | 2 + src/da65.vcxproj | 2 + src/da65/opc6502dtv.c | 308 ++++++++++++++++++++++++++++++++++++++++++ src/da65/opc6502dtv.h | 61 +++++++++ src/da65/opctable.c | 2 + 14 files changed, 486 insertions(+), 5 deletions(-) create mode 100644 src/da65/opc6502dtv.c create mode 100644 src/da65/opc6502dtv.h diff --git a/asminc/cpu.mac b/asminc/cpu.mac index 6b9cb9947..55727c93e 100644 --- a/asminc/cpu.mac +++ b/asminc/cpu.mac @@ -9,6 +9,7 @@ CPU_ISET_SWEET16 = $0040 CPU_ISET_HUC6280 = $0080 ;CPU_ISET_M740 = $0100 not actually implemented CPU_ISET_4510 = $0200 +CPU_ISET_6502DTV = $0400 ; CPU capabilities CPU_NONE = CPU_ISET_NONE @@ -20,3 +21,4 @@ CPU_65816 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65816 CPU_SWEET16 = CPU_ISET_SWEET16 CPU_HUC6280 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02|CPU_ISET_HUC6280 CPU_4510 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02|CPU_ISET_4510 +CPU_6502DTV = CPU_ISET_6502|CPU_ISET_6502X|CPU_ISET_6502DTV diff --git a/asminc/opcodes.inc b/asminc/opcodes.inc index aa7a65f00..e6b7e73df 100644 --- a/asminc/opcodes.inc +++ b/asminc/opcodes.inc @@ -505,4 +505,12 @@ OPC_ISC_aby = $FB OPC_NOP_abx = $FC OPC_ISC_abx = $FF +.if (.cpu .bitand ::CPU_ISET_6502DTV) + +OPC_BRA = $12 +OPC_SAC_imm = $32 +OPC_SIR_imm = $42 + +.endif + .endif diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 8d97bddfd..25a47b29a 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -151,7 +151,7 @@ Here is a description of all the command line options: Set the default for the CPU type. The option takes a parameter, which may be one of - 6502, 6502X, 65SC02, 65C02, 65816, sweet16, HuC6280, 4510 + 6502, 6502X, 6502DTV, 65SC02, 65C02, 65816, sweet16, HuC6280, 4510 <label id="option-create-dep"> diff --git a/src/ca65/instr.c b/src/ca65/instr.c index d71476799..99c0412b0 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -303,6 +303,97 @@ static const struct { } }; +/* Instruction table for the 6502 with illegal instructions (X) and DTV +** extra opcodes (DTV). Some illegal instructions (X, -DTV?) might be not +** supported by DTV. They should be tested on the DTV hardware. +*/ +static const struct { + unsigned Count; + InsDesc Ins[78]; +} InsTab6502DTV = { + sizeof (InsTab6502DTV.Ins) / sizeof (InsTab6502DTV.Ins[0]), + { + { "ADC", 0x080A26C, 0x60, 0, PutAll }, + { "ALR", 0x0800000, 0x4B, 0, PutAll }, /* X */ + { "ANC", 0x0800000, 0x0B, 0, PutAll }, /* X -DTV? */ + { "AND", 0x080A26C, 0x20, 0, PutAll }, + { "ANE", 0x0800000, 0x8B, 0, PutAll }, /* X */ + { "ARR", 0x0800000, 0x6B, 0, PutAll }, /* X */ + { "ASL", 0x000006e, 0x02, 1, PutAll }, + { "AXS", 0x0800000, 0xCB, 0, PutAll }, /* X, -DTV? */ + { "BCC", 0x0020000, 0x90, 0, PutPCRel8 }, + { "BCS", 0x0020000, 0xb0, 0, PutPCRel8 }, + { "BEQ", 0x0020000, 0xf0, 0, PutPCRel8 }, + { "BIT", 0x000000C, 0x00, 2, PutAll }, + { "BMI", 0x0020000, 0x30, 0, PutPCRel8 }, + { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, + { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, + { "BRA", 0x0020000, 0x12, 0, PutPCRel8 }, /* DTV */ + { "BRK", 0x0000001, 0x00, 0, PutAll }, + { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, + { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, + { "CLC", 0x0000001, 0x18, 0, PutAll }, + { "CLD", 0x0000001, 0xd8, 0, PutAll }, + { "CLI", 0x0000001, 0x58, 0, PutAll }, + { "CLV", 0x0000001, 0xb8, 0, PutAll }, + { "CMP", 0x080A26C, 0xc0, 0, PutAll }, + { "CPX", 0x080000C, 0xe0, 1, PutAll }, + { "CPY", 0x080000C, 0xc0, 1, PutAll }, + { "DCP", 0x000A26C, 0xC3, 0, PutAll }, /* X */ + { "DEC", 0x000006C, 0x00, 3, PutAll }, + { "DEX", 0x0000001, 0xca, 0, PutAll }, + { "DEY", 0x0000001, 0x88, 0, PutAll }, + { "EOR", 0x080A26C, 0x40, 0, PutAll }, + { "INC", 0x000006c, 0x00, 4, PutAll }, + { "INX", 0x0000001, 0xe8, 0, PutAll }, + { "INY", 0x0000001, 0xc8, 0, PutAll }, + { "ISC", 0x000A26C, 0xE3, 0, PutAll }, /* X */ + { "JAM", 0x0000001, 0x02, 0, PutAll }, /* X, -DTV? */ + { "JMP", 0x0000808, 0x4c, 6, PutJMP }, + { "JSR", 0x0000008, 0x20, 7, PutAll }, + { "LAS", 0x0000200, 0xBB, 0, PutAll }, /* X, -DTV? */ + { "LAX", 0x080A30C, 0xA3, 11, PutAll }, /* X */ + { "LDA", 0x080A26C, 0xa0, 0, PutAll }, + { "LDX", 0x080030C, 0xa2, 1, PutAll }, + { "LDY", 0x080006C, 0xa0, 1, PutAll }, + { "LSR", 0x000006F, 0x42, 1, PutAll }, + { "NOP", 0x080006D, 0x00, 10, PutAll }, /* X */ + { "ORA", 0x080A26C, 0x00, 0, PutAll }, + { "PHA", 0x0000001, 0x48, 0, PutAll }, + { "PHP", 0x0000001, 0x08, 0, PutAll }, + { "PLA", 0x0000001, 0x68, 0, PutAll }, + { "PLP", 0x0000001, 0x28, 0, PutAll }, + { "RLA", 0x000A26C, 0x23, 0, PutAll }, /* X */ + { "ROL", 0x000006F, 0x22, 1, PutAll }, + { "ROR", 0x000006F, 0x62, 1, PutAll }, + { "RRA", 0x000A26C, 0x63, 0, PutAll }, /* X */ + { "RTI", 0x0000001, 0x40, 0, PutAll }, + { "RTS", 0x0000001, 0x60, 0, PutAll }, + { "SAC", 0x0800000, 0x32, 0, PutAll }, /* DTV */ + { "SAX", 0x000810C, 0x83, 1, PutAll }, /* X */ + { "SBC", 0x080A26C, 0xe0, 0, PutAll }, + { "SEC", 0x0000001, 0x38, 0, PutAll }, + { "SED", 0x0000001, 0xf8, 0, PutAll }, + { "SEI", 0x0000001, 0x78, 0, PutAll }, + { "SHA", 0x0002200, 0x93, 1, PutAll }, /* X, -DTV? */ + { "SHX", 0x0000200, 0x9e, 1, PutAll }, /* X, -DTV? */ + { "SHY", 0x0000040, 0x9c, 1, PutAll }, /* X, -DTV? */ + { "SIR", 0x0800000, 0x32, 0, PutAll }, /* DTV */ + { "SLO", 0x000A26C, 0x03, 0, PutAll }, /* X */ + { "SRE", 0x000A26C, 0x43, 0, PutAll }, /* X */ + { "STA", 0x000A26C, 0x80, 0, PutAll }, + { "STX", 0x000010c, 0x82, 1, PutAll }, + { "STY", 0x000002c, 0x80, 1, PutAll }, + { "TAS", 0x0000200, 0x9b, 0, PutAll }, /* X */ + { "TAX", 0x0000001, 0xaa, 0, PutAll }, + { "TAY", 0x0000001, 0xa8, 0, PutAll }, + { "TSX", 0x0000001, 0xba, 0, PutAll }, + { "TXA", 0x0000001, 0x8a, 0, PutAll }, + { "TXS", 0x0000001, 0x9a, 0, PutAll }, + { "TYA", 0x0000001, 0x98, 0, PutAll } + } +}; + /* Instruction table for the 65SC02 */ static const struct { unsigned Count; @@ -930,6 +1021,7 @@ static const InsTable* InsTabs[CPU_COUNT] = { (const InsTable*) &InsTabNone, (const InsTable*) &InsTab6502, (const InsTable*) &InsTab6502X, + (const InsTable*) &InsTab6502DTV, (const InsTable*) &InsTab65SC02, (const InsTable*) &InsTab65C02, (const InsTable*) &InsTab65816, diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 7a25594b6..aee6141fc 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -186,6 +186,7 @@ void g_preamble (void) switch (CPU) { case CPU_6502: AddTextLine ("\t.setcpu\t\t\"6502\""); break; case CPU_6502X: AddTextLine ("\t.setcpu\t\t\"6502X\""); break; + case CPU_6502DTV: AddTextLine ("\t.setcpu\t\t\"6502DTV\""); break; case CPU_65SC02: AddTextLine ("\t.setcpu\t\t\"65SC02\""); break; case CPU_65C02: AddTextLine ("\t.setcpu\t\t\"65C02\""); break; case CPU_65816: AddTextLine ("\t.setcpu\t\t\"65816\""); break; @@ -2474,7 +2475,7 @@ void g_branch (unsigned Label) ** the label cannot be farther away from the branch than -128/+127 bytes. */ { - if ((CPUIsets[CPU] & CPU_ISET_65SC02) != 0) { + if ((CPUIsets[CPU] & (CPU_ISET_65SC02 | CPU_ISET_6502DTV)) != 0) { AddCodeLine ("bra %s", LocalLabelName (Label)); } else { g_jump (Label); diff --git a/src/cc65/coptjmp.c b/src/cc65/coptjmp.c index 693c7eb79..dd092a5ad 100644 --- a/src/cc65/coptjmp.c +++ b/src/cc65/coptjmp.c @@ -173,7 +173,7 @@ unsigned OptBranchDist (CodeSeg* S) } - } else if ((CPUIsets[CPU] & CPU_ISET_65SC02) != 0 && + } else if ((CPUIsets[CPU] & (CPU_ISET_65SC02 |CPU_ISET_6502DTV)) != 0 && (E->Info & OF_UBRA) != 0 && E->JumpTo != 0 && IsShortDist (GetBranchDist (S, I, E->JumpTo->Owner))) { diff --git a/src/cc65/main.c b/src/cc65/main.c index fabd71ef7..0b156fb74 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -463,7 +463,8 @@ static void OptCPU (const char* Opt, const char* Arg) /* Find the CPU from the given name */ CPU = FindCPU (Arg); if (CPU != CPU_6502 && CPU != CPU_6502X && CPU != CPU_65SC02 && - CPU != CPU_65C02 && CPU != CPU_65816 && CPU != CPU_HUC6280) { + CPU != CPU_65C02 && CPU != CPU_65816 && CPU != CPU_HUC6280 && + CPU != CPU_6502DTV) { AbEnd ("Invalid argument for %s: '%s'", Opt, Arg); } } diff --git a/src/cc65/opcodes.c b/src/cc65/opcodes.c index 86b904df9..aeea0297b 100644 --- a/src/cc65/opcodes.c +++ b/src/cc65/opcodes.c @@ -734,7 +734,7 @@ opc_t MakeShortBranch (opc_t OPC) case OP65_BVS: case OP65_JVS: return OP65_BVS; case OP65_BRA: - case OP65_JMP: return (CPUIsets[CPU] & CPU_ISET_65SC02)? OP65_BRA : OP65_JMP; + case OP65_JMP: return (CPUIsets[CPU] & (CPU_ISET_65SC02 | CPU_ISET_6502DTV)) ? OP65_BRA : OP65_JMP; default: Internal ("MakeShortBranch: Invalid opcode: %d", OPC); return 0; diff --git a/src/common/cpu.c b/src/common/cpu.c index b4c5c8dfe..16578543b 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -55,6 +55,7 @@ const char* CPUNames[CPU_COUNT] = { "none", "6502", "6502X", + "6502DTV", "65SC02", "65C02", "65816", @@ -69,6 +70,7 @@ const unsigned CPUIsets[CPU_COUNT] = { CPU_ISET_NONE, CPU_ISET_6502, CPU_ISET_6502 | CPU_ISET_6502X, + CPU_ISET_6502 | CPU_ISET_6502X | CPU_ISET_6502DTV, CPU_ISET_6502 | CPU_ISET_65SC02, CPU_ISET_6502 | CPU_ISET_65SC02 | CPU_ISET_65C02, CPU_ISET_6502 | CPU_ISET_65SC02 | CPU_ISET_65C02 | CPU_ISET_65816, diff --git a/src/common/cpu.h b/src/common/cpu.h index dcf1815db..706b4544e 100644 --- a/src/common/cpu.h +++ b/src/common/cpu.h @@ -50,6 +50,7 @@ typedef enum { CPU_NONE, /* No CPU - for assembler */ CPU_6502, CPU_6502X, /* "Extended", that is: with illegal opcodes */ + CPU_6502DTV, /* CPU_6502X + C64DTV extra opcodes */ CPU_65SC02, CPU_65C02, CPU_65816, @@ -65,6 +66,7 @@ enum { CPU_ISET_NONE = 1 << CPU_NONE, CPU_ISET_6502 = 1 << CPU_6502, CPU_ISET_6502X = 1 << CPU_6502X, + CPU_ISET_6502DTV = 1 << CPU_6502DTV, CPU_ISET_65SC02 = 1 << CPU_65SC02, CPU_ISET_65C02 = 1 << CPU_65C02, CPU_ISET_65816 = 1 << CPU_65816, diff --git a/src/da65.vcxproj b/src/da65.vcxproj index 7a8b0de68..090c3030f 100644 --- a/src/da65.vcxproj +++ b/src/da65.vcxproj @@ -90,6 +90,7 @@ <ClCompile Include="da65\opc4510.c" /> <ClCompile Include="da65\opc6502.c" /> <ClCompile Include="da65\opc6502x.c" /> + <ClCompile Include="da65\opc6502dtv.c" /> <ClCompile Include="da65\opc65816.c" /> <ClCompile Include="da65\opc65c02.c" /> <ClCompile Include="da65\opc65sc02.c" /> @@ -114,6 +115,7 @@ <ClInclude Include="da65\opc4510.h" /> <ClInclude Include="da65\opc6502.h" /> <ClInclude Include="da65\opc6502x.h" /> + <ClInclude Include="da65\opc6502dtv.h" /> <ClInclude Include="da65\opc65816.h" /> <ClInclude Include="da65\opc65c02.h" /> <ClInclude Include="da65\opc65sc02.h" /> diff --git a/src/da65/opc6502dtv.c b/src/da65/opc6502dtv.c new file mode 100644 index 000000000..73bce7f4d --- /dev/null +++ b/src/da65/opc6502dtv.c @@ -0,0 +1,308 @@ +/*****************************************************************************/ +/* */ +/* opc6502dtv.c */ +/* */ +/* 6502 opcode description table with NMOS illegals and DTV opcodes */ +/* */ +/* */ +/* */ +/* (C) 2003-2011, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +/* da65 */ +#include "handler.h" +#include "opc6502dtv.h" + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* Descriptions for all opcodes. Base table from opc6502.c with illegal +** opcodes from http://www.oxyron.de/html/opcodes02.html and DTV opcodes +*/ +const OpcDesc OpcTable_6502DTV[256] = { + { "brk", 1, flNone, OH_Implicit }, /* $00 */ + { "ora", 2, flUseLabel, OH_DirectXIndirect }, /* $01 */ + { "jam", 1, flNone, OH_Implicit }, /* $02 */ + { "slo", 2, flUseLabel, OH_DirectXIndirect }, /* $03 */ + { "nop", 2, flUseLabel, OH_Direct }, /* $04 */ + { "ora", 2, flUseLabel, OH_Direct }, /* $05 */ + { "asl", 2, flUseLabel, OH_Direct }, /* $06 */ + { "slo", 2, flUseLabel, OH_Direct }, /* $07 */ + { "php", 1, flNone, OH_Implicit }, /* $08 */ + { "ora", 2, flNone, OH_Immediate }, /* $09 */ + { "asl", 1, flNone, OH_Accumulator }, /* $0a */ + { "anc", 2, flNone, OH_Immediate }, /* $0b */ + { "nop", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $0c */ + { "ora", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $0d */ + { "asl", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $0e */ + { "slo", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $0f */ + { "bpl", 2, flLabel, OH_Relative }, /* $10 */ + { "ora", 2, flUseLabel, OH_DirectIndirectY }, /* $11 */ + { "bra", 2, flLabel, OH_Relative }, /* $12 */ + { "slo", 2, flUseLabel, OH_DirectIndirectY }, /* $13 */ + { "nop", 2, flUseLabel, OH_DirectX }, /* $14 */ + { "ora", 2, flUseLabel, OH_DirectX }, /* $15 */ + { "asl", 2, flUseLabel, OH_DirectX }, /* $16 */ + { "slo", 2, flUseLabel, OH_DirectX }, /* $17 */ + { "clc", 1, flNone, OH_Implicit }, /* $18 */ + { "ora", 3, flUseLabel, OH_AbsoluteY }, /* $19 */ + { "nop", 1, flNone, OH_Implicit }, /* $1a */ + { "slo", 3, flUseLabel, OH_AbsoluteY }, /* $1b */ + { "nop", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $1c */ + { "ora", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $1d */ + { "asl", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $1e */ + { "slo", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $1f */ + { "jsr", 3, flLabel, OH_Absolute }, /* $20 */ + { "and", 2, flUseLabel, OH_DirectXIndirect }, /* $21 */ + { "jam", 1, flNone, OH_Implicit, }, /* $22 */ + { "rla", 2, flUseLabel, OH_DirectXIndirect }, /* $23 */ + { "bit", 2, flUseLabel, OH_Direct }, /* $24 */ + { "and", 2, flUseLabel, OH_Direct }, /* $25 */ + { "rol", 2, flUseLabel, OH_Direct }, /* $26 */ + { "rla", 2, flUseLabel, OH_Direct }, /* $27 */ + { "plp", 1, flNone, OH_Implicit }, /* $28 */ + { "and", 2, flNone, OH_Immediate }, /* $29 */ + { "rol", 1, flNone, OH_Accumulator }, /* $2a */ + { "anc", 2, flNone, OH_Immediate }, /* $2b */ + { "bit", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $2c */ + { "and", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $2d */ + { "rol", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $2e */ + { "rla", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $2f */ + { "bmi", 2, flLabel, OH_Relative }, /* $30 */ + { "and", 2, flUseLabel, OH_DirectIndirectY }, /* $31 */ + { "sac", 2, flNone, OH_Immediate }, /* $32 */ + { "rla", 2, flUseLabel, OH_DirectIndirectY }, /* $33 */ + { "nop", 2, flUseLabel, OH_DirectX }, /* $34 */ + { "and", 2, flUseLabel, OH_DirectX }, /* $35 */ + { "rol", 2, flUseLabel, OH_DirectX }, /* $36 */ + { "rla", 2, flUseLabel, OH_DirectX }, /* $37 */ + { "sec", 1, flNone, OH_Implicit }, /* $38 */ + { "and", 3, flUseLabel, OH_AbsoluteY }, /* $39 */ + { "nop", 1, flNone, OH_Implicit }, /* $3a */ + { "rla", 3, flUseLabel, OH_AbsoluteY }, /* $3b */ + { "nop", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $3c */ + { "and", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $3d */ + { "rol", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $3e */ + { "rla", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $3f */ + { "rti", 1, flNone, OH_Rts }, /* $40 */ + { "eor", 2, flUseLabel, OH_DirectXIndirect }, /* $41 */ + { "sir", 1, flNone, OH_Implicit }, /* $42 */ + { "sre", 2, flUseLabel, OH_DirectXIndirect }, /* $43 */ + { "nop", 2, flUseLabel, OH_Direct }, /* $44 */ + { "eor", 2, flUseLabel, OH_Direct }, /* $45 */ + { "lsr", 2, flUseLabel, OH_Direct }, /* $46 */ + { "sre", 2, flUseLabel, OH_Direct }, /* $47 */ + { "pha", 1, flNone, OH_Implicit }, /* $48 */ + { "eor", 2, flNone, OH_Immediate }, /* $49 */ + { "lsr", 1, flNone, OH_Accumulator }, /* $4a */ + { "alr", 2, flNone, OH_Immediate }, /* $4b */ + { "jmp", 3, flLabel, OH_JmpAbsolute }, /* $4c */ + { "eor", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $4d */ + { "lsr", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $4e */ + { "sre", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $4f */ + { "bvc", 2, flLabel, OH_Relative }, /* $50 */ + { "eor", 2, flUseLabel, OH_DirectIndirectY }, /* $51 */ + { "jam", 1, flNone, OH_Implicit }, /* $52 */ + { "sre", 2, flUseLabel, OH_DirectIndirectY }, /* $53 */ + { "nop", 2, flUseLabel, OH_DirectX }, /* $54 */ + { "eor", 2, flUseLabel, OH_DirectX }, /* $55 */ + { "lsr", 2, flUseLabel, OH_DirectX }, /* $56 */ + { "sre", 2, flUseLabel, OH_DirectX }, /* $57 */ + { "cli", 1, flNone, OH_Implicit }, /* $58 */ + { "eor", 3, flUseLabel, OH_AbsoluteY }, /* $59 */ + { "nop", 1, flNone, OH_Implicit }, /* $5a */ + { "sre", 3, flUseLabel, OH_AbsoluteY }, /* $5b */ + { "nop", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $5c */ + { "eor", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $5d */ + { "lsr", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $5e */ + { "sre", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $5f */ + { "rts", 1, flNone, OH_Rts }, /* $60 */ + { "adc", 2, flUseLabel, OH_DirectXIndirect }, /* $61 */ + { "jam", 1, flNone, OH_Implicit }, /* $62 */ + { "rra", 2, flUseLabel, OH_DirectXIndirect }, /* $63 */ + { "nop", 2, flUseLabel, OH_Direct }, /* $64 */ + { "adc", 2, flUseLabel, OH_Direct }, /* $65 */ + { "ror", 2, flUseLabel, OH_Direct }, /* $66 */ + { "rra", 2, flUseLabel, OH_Direct }, /* $67 */ + { "pla", 1, flNone, OH_Implicit }, /* $68 */ + { "adc", 2, flNone, OH_Immediate }, /* $69 */ + { "ror", 1, flNone, OH_Accumulator }, /* $6a */ + { "arr", 2, flNone, OH_Immediate }, /* $6b */ + { "jmp", 3, flLabel, OH_JmpAbsoluteIndirect }, /* $6c */ + { "adc", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $6d */ + { "ror", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $6e */ + { "rra", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $6f */ + { "bvs", 2, flLabel, OH_Relative }, /* $70 */ + { "adc", 2, flUseLabel, OH_DirectIndirectY }, /* $71 */ + { "jam", 1, flNone, OH_Implicit }, /* $72 */ + { "rra", 2, flUseLabel, OH_DirectIndirectY }, /* $73 */ + { "nop", 2, flUseLabel, OH_DirectX }, /* $74 */ + { "adc", 2, flUseLabel, OH_DirectX }, /* $75 */ + { "ror", 2, flUseLabel, OH_DirectX }, /* $76 */ + { "rra", 2, flUseLabel, OH_DirectX }, /* $77 */ + { "sei", 1, flNone, OH_Implicit }, /* $78 */ + { "adc", 3, flUseLabel, OH_AbsoluteY }, /* $79 */ + { "nop", 1, flNone, OH_Implicit }, /* $7a */ + { "rra", 3, flUseLabel, OH_AbsoluteY }, /* $7b */ + { "nop", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $7c */ + { "adc", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $7d */ + { "ror", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $7e */ + { "rra", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $7f */ + { "nop", 2, flNone, OH_Immediate }, /* $80 */ + { "sta", 2, flUseLabel, OH_DirectXIndirect }, /* $81 */ + { "nop", 2, flNone, OH_Immediate }, /* $82 */ + { "sax", 2, flUseLabel, OH_DirectXIndirect }, /* $83 */ + { "sty", 2, flUseLabel, OH_Direct }, /* $84 */ + { "sta", 2, flUseLabel, OH_Direct }, /* $85 */ + { "stx", 2, flUseLabel, OH_Direct }, /* $86 */ + { "sax", 2, flUseLabel, OH_Direct }, /* $87 */ + { "dey", 1, flNone, OH_Implicit }, /* $88 */ + { "nop", 2, flNone, OH_Immediate }, /* $89 */ + { "txa", 1, flNone, OH_Implicit }, /* $8a */ + { "xaa", 2, flNone, OH_Immediate }, /* $8b */ + { "sty", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $8c */ + { "sta", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $8d */ + { "stx", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $8e */ + { "sax", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $8f */ + { "bcc", 2, flLabel, OH_Relative }, /* $90 */ + { "sta", 2, flUseLabel, OH_DirectIndirectY }, /* $91 */ + { "jam", 1, flNone, OH_Implicit }, /* $92 */ + { "ahx", 2, flUseLabel, OH_DirectIndirectY }, /* $93 */ + { "sty", 2, flUseLabel, OH_DirectX }, /* $94 */ + { "sta", 2, flUseLabel, OH_DirectX }, /* $95 */ + { "stx", 2, flUseLabel, OH_DirectY }, /* $96 */ + { "sax", 2, flUseLabel, OH_DirectY }, /* $97 */ + { "tya", 1, flNone, OH_Implicit }, /* $98 */ + { "sta", 3, flUseLabel, OH_AbsoluteY }, /* $99 */ + { "txs", 1, flNone, OH_Implicit }, /* $9a */ + { "tas", 3, flUseLabel, OH_AbsoluteY }, /* $9b */ + { "shy", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $9c */ + { "sta", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $9d */ + { "shx", 3, flUseLabel, OH_AbsoluteY }, /* $9e */ + { "ahx", 3, flUseLabel, OH_AbsoluteY }, /* $9f */ + { "ldy", 2, flNone, OH_Immediate }, /* $a0 */ + { "lda", 2, flUseLabel, OH_DirectXIndirect }, /* $a1 */ + { "ldx", 2, flNone, OH_Immediate }, /* $a2 */ + { "lax", 2, flUseLabel, OH_DirectXIndirect }, /* $a3 */ + { "ldy", 2, flUseLabel, OH_Direct }, /* $a4 */ + { "lda", 2, flUseLabel, OH_Direct }, /* $a5 */ + { "ldx", 2, flUseLabel, OH_Direct }, /* $a6 */ + { "lax", 2, flUseLabel, OH_Direct }, /* $a7 */ + { "tay", 1, flNone, OH_Implicit }, /* $a8 */ + { "lda", 2, flNone, OH_Immediate }, /* $a9 */ + { "tax", 1, flNone, OH_Implicit }, /* $aa */ + { "lax", 2, flNone, OH_Immediate }, /* $ab */ + { "ldy", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ac */ + { "lda", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ad */ + { "ldx", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ae */ + { "lax", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $af */ + { "bcs", 2, flLabel, OH_Relative }, /* $b0 */ + { "lda", 2, flUseLabel, OH_DirectIndirectY }, /* $b1 */ + { "jam", 1, flNone, OH_Implicit }, /* $b2 */ + { "lax", 2, flUseLabel, OH_DirectIndirectY }, /* $b3 */ + { "ldy", 2, flUseLabel, OH_DirectX }, /* $b4 */ + { "lda", 2, flUseLabel, OH_DirectX }, /* $b5 */ + { "ldx", 2, flUseLabel, OH_DirectY }, /* $b6 */ + { "lax", 2, flUseLabel, OH_DirectY }, /* $b7 */ + { "clv", 1, flNone, OH_Implicit }, /* $b8 */ + { "lda", 3, flUseLabel, OH_AbsoluteY }, /* $b9 */ + { "tsx", 1, flNone, OH_Implicit }, /* $ba */ + { "las", 3, flUseLabel, OH_AbsoluteY }, /* $bb */ + { "ldy", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $bc */ + { "lda", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $bd */ + { "ldx", 3, flUseLabel|flAbsOverride, OH_AbsoluteY }, /* $be */ + { "lax", 3, flUseLabel|flAbsOverride, OH_AbsoluteY }, /* $bf */ + { "cpy", 2, flNone, OH_Immediate }, /* $c0 */ + { "cmp", 2, flUseLabel, OH_DirectXIndirect }, /* $c1 */ + { "nop", 2, flNone, OH_Immediate }, /* $c2 */ + { "dcp", 2, flUseLabel, OH_DirectXIndirect }, /* $c3 */ + { "cpy", 2, flUseLabel, OH_Direct }, /* $c4 */ + { "cmp", 2, flUseLabel, OH_Direct }, /* $c5 */ + { "dec", 2, flUseLabel, OH_Direct }, /* $c6 */ + { "dcp", 2, flUseLabel, OH_Direct }, /* $c7 */ + { "iny", 1, flNone, OH_Implicit }, /* $c8 */ + { "cmp", 2, flNone, OH_Immediate }, /* $c9 */ + { "dex", 1, flNone, OH_Implicit }, /* $ca */ + { "axs", 2, flNone, OH_Immediate }, /* $cb */ + { "cpy", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $cc */ + { "cmp", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $cd */ + { "dec", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ce */ + { "dcp", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $cf */ + { "bne", 2, flLabel, OH_Relative }, /* $d0 */ + { "cmp", 2, flUseLabel, OH_DirectIndirectY }, /* $d1 */ + { "jam", 1, flNone, OH_Implicit }, /* $d2 */ + { "dcp", 2, flUseLabel, OH_DirectIndirectY }, /* $d3 */ + { "nop", 2, flUseLabel, OH_DirectX }, /* $d4 */ + { "cmp", 2, flUseLabel, OH_DirectX }, /* $d5 */ + { "dec", 2, flUseLabel, OH_DirectX }, /* $d6 */ + { "dcp", 2, flUseLabel, OH_DirectX }, /* $d7 */ + { "cld", 1, flNone, OH_Implicit }, /* $d8 */ + { "cmp", 3, flUseLabel, OH_AbsoluteY }, /* $d9 */ + { "nop", 1, flNone, OH_Implicit }, /* $da */ + { "dcp", 3, flUseLabel, OH_AbsoluteY }, /* $db */ + { "nop", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $dc */ + { "cmp", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $dd */ + { "dec", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $de */ + { "dcp", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $df */ + { "cpx", 2, flNone, OH_Immediate }, /* $e0 */ + { "sbc", 2, flUseLabel, OH_DirectXIndirect }, /* $e1 */ + { "nop", 2, flNone, OH_Immediate }, /* $e2 */ + { "isc", 2, flUseLabel, OH_DirectXIndirect }, /* $e3 */ + { "cpx", 2, flUseLabel, OH_Direct }, /* $e4 */ + { "sbc", 2, flUseLabel, OH_Direct }, /* $e5 */ + { "inc", 2, flUseLabel, OH_Direct }, /* $e6 */ + { "isc", 2, flUseLabel, OH_Direct }, /* $e7 */ + { "inx", 1, flNone, OH_Implicit }, /* $e8 */ + { "sbc", 2, flNone, OH_Immediate }, /* $e9 */ + { "nop", 1, flNone, OH_Implicit }, /* $ea */ + { "sbc", 2, flNone, OH_Immediate }, /* $eb */ + { "cpx", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ec */ + { "sbc", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ed */ + { "inc", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ee */ + { "isc", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ef */ + { "beq", 2, flLabel, OH_Relative }, /* $f0 */ + { "sbc", 2, flUseLabel, OH_DirectIndirectY }, /* $f1 */ + { "jam", 1, flNone, OH_Implicit }, /* $f2 */ + { "isc", 2, flUseLabel, OH_DirectIndirectY }, /* $f3 */ + { "nop", 2, flUseLabel, OH_DirectX }, /* $f4 */ + { "sbc", 2, flUseLabel, OH_DirectX }, /* $f5 */ + { "inc", 2, flUseLabel, OH_DirectX }, /* $f6 */ + { "isc", 2, flUseLabel, OH_DirectX }, /* $f7 */ + { "sed", 1, flNone, OH_Implicit }, /* $f8 */ + { "sbc", 3, flUseLabel, OH_AbsoluteY }, /* $f9 */ + { "nop", 1, flNone, OH_Implicit }, /* $fa */ + { "isc", 3, flUseLabel, OH_AbsoluteY }, /* $fb */ + { "nop", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $fc */ + { "sbc", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $fd */ + { "inc", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $fe */ + { "isc", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $ff */ +}; diff --git a/src/da65/opc6502dtv.h b/src/da65/opc6502dtv.h new file mode 100644 index 000000000..e63e4e44c --- /dev/null +++ b/src/da65/opc6502dtv.h @@ -0,0 +1,61 @@ +/*****************************************************************************/ +/* */ +/* opc6502dtv.h */ +/* */ +/* 6502 opcode description table with NMOS illegals and DTV opcodes */ +/* */ +/* */ +/* */ +/* (C) 2003-2011, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef OPC6502DTV_H +#define OPC6502DTV_H + + + +#include "opcdesc.h" + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* Descriptions for all opcodes */ +extern const OpcDesc OpcTable_6502DTV[256]; + + + +/* End of opc6502dtv.h */ +#endif + + + + diff --git a/src/da65/opctable.c b/src/da65/opctable.c index 031b1239b..255a3557f 100644 --- a/src/da65/opctable.c +++ b/src/da65/opctable.c @@ -38,6 +38,7 @@ #include "opc4510.h" #include "opc6502.h" #include "opc6502x.h" +#include "opc6502dtv.h" #include "opc65816.h" #include "opc65c02.h" #include "opc65sc02.h" @@ -70,6 +71,7 @@ void SetOpcTable (cpu_t CPU) switch (CPU) { case CPU_6502: OpcTable = OpcTable_6502; break; case CPU_6502X: OpcTable = OpcTable_6502X; break; + case CPU_6502DTV: OpcTable = OpcTable_6502DTV; break; case CPU_65SC02: OpcTable = OpcTable_65SC02; break; case CPU_65C02: OpcTable = OpcTable_65C02; break; case CPU_HUC6280: OpcTable = OpcTable_HuC6280; break; From 92c013944e40f0c0e956112050be42fc30386651 Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Fri, 13 Nov 2020 14:53:18 +0100 Subject: [PATCH 0595/2710] Mistyped comment, missing comma --- src/ca65/instr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ca65/instr.c b/src/ca65/instr.c index 99c0412b0..555c0a47b 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -315,7 +315,7 @@ static const struct { { { "ADC", 0x080A26C, 0x60, 0, PutAll }, { "ALR", 0x0800000, 0x4B, 0, PutAll }, /* X */ - { "ANC", 0x0800000, 0x0B, 0, PutAll }, /* X -DTV? */ + { "ANC", 0x0800000, 0x0B, 0, PutAll }, /* X, -DTV? */ { "AND", 0x080A26C, 0x20, 0, PutAll }, { "ANE", 0x0800000, 0x8B, 0, PutAll }, /* X */ { "ARR", 0x0800000, 0x6B, 0, PutAll }, /* X */ From 06dfef81a146c26e412eef76b67c6611bd1821ad Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Fri, 13 Nov 2020 16:24:17 +0100 Subject: [PATCH 0596/2710] Added 6502dtv description to cpu option --- doc/da65.sgml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/doc/da65.sgml b/doc/da65.sgml index 466b41984..2394031d2 100644 --- a/doc/da65.sgml +++ b/doc/da65.sgml @@ -112,15 +112,17 @@ Here is a description of all the command line options: <itemize> <item>6502 <item>6502x + <item>6502dtv <item>65sc02 <item>65c02 <item>huc6280 <item>4510 </itemize> - 6502x is for the NMOS 6502 with unofficial opcodes. huc6280 is the CPU of - the PC engine. 4510 is the CPU of the Commodore C65. Support for the 65816 - currently is not available. + 6502x is for the NMOS 6502 with unofficial opcodes. 6502dtv is for the + emulated CPU of the C64DTV device. huc6280 is the CPU of the PC engine. + 4510 is the CPU of the Commodore C65. Support for the 65816 currently + is not available. <label id="option--formfeeds"> @@ -251,7 +253,8 @@ for this CPU. Invalid opcodes are translated into <tt/.byte/ commands. With the command line option <tt><ref id="option--cpu" name="--cpu"></tt>, the disassembler may be told to recognize either the 65SC02 or 65C02 CPUs. The latter understands the same opcodes as the former, plus 16 additional bit -manipulation and bit test-and-branch commands. +manipulation and bit test-and-branch commands. Using 6502x as CPU the illegal opopcodes of 6502 CPU are detected and displayed. 6502dtv setting recognizes the emulated CPU instructons of the C64DTV device. + When disassembling 4510 code, due to handling of 16-bit wide branches, da65 can produce output that can not be re-assembled, when one or more of those From dd44dc4d7766dbd9b4fa39d5bcb39a28bcb5fbf5 Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Fri, 13 Nov 2020 16:28:59 +0100 Subject: [PATCH 0597/2710] Fix typo --- doc/da65.sgml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/da65.sgml b/doc/da65.sgml index 2394031d2..b46ee9dd3 100644 --- a/doc/da65.sgml +++ b/doc/da65.sgml @@ -253,7 +253,9 @@ for this CPU. Invalid opcodes are translated into <tt/.byte/ commands. With the command line option <tt><ref id="option--cpu" name="--cpu"></tt>, the disassembler may be told to recognize either the 65SC02 or 65C02 CPUs. The latter understands the same opcodes as the former, plus 16 additional bit -manipulation and bit test-and-branch commands. Using 6502x as CPU the illegal opopcodes of 6502 CPU are detected and displayed. 6502dtv setting recognizes the emulated CPU instructons of the C64DTV device. +manipulation and bit test-and-branch commands. Using 6502x as CPU the illegal +opcodes of 6502 CPU are detected and displayed. 6502dtv setting recognizes the +emulated CPU instructons of the C64DTV device. When disassembling 4510 code, due to handling of 16-bit wide branches, da65 From 0f7cf87bfa4d60242095bd6d632f428b9e82a47f Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Fri, 13 Nov 2020 18:30:23 +0100 Subject: [PATCH 0598/2710] Synchronizin InsTab6502DTV instructions table for DTV with the illegal opcodes verified by VICE-emu tests --- src/ca65/instr.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/src/ca65/instr.c b/src/ca65/instr.c index 555c0a47b..c5e3b7fef 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -303,24 +303,25 @@ static const struct { } }; -/* Instruction table for the 6502 with illegal instructions (X) and DTV -** extra opcodes (DTV). Some illegal instructions (X, -DTV?) might be not -** supported by DTV. They should be tested on the DTV hardware. +/* Instruction table for the 6502 with DTV extra opcodes (DTV) and +** those illegal instructions (X) which are supported by DTV. +** Note: illegals opcodes which contain more subinstructions +** (ASO, DCM, LSE, LXA, SBX and SHS) are not enlisted. */ static const struct { unsigned Count; - InsDesc Ins[78]; + InsDesc Ins[71]; } InsTab6502DTV = { sizeof (InsTab6502DTV.Ins) / sizeof (InsTab6502DTV.Ins[0]), { { "ADC", 0x080A26C, 0x60, 0, PutAll }, { "ALR", 0x0800000, 0x4B, 0, PutAll }, /* X */ - { "ANC", 0x0800000, 0x0B, 0, PutAll }, /* X, -DTV? */ + { "ANC", 0x0800000, 0x0B, 0, PutAll }, /* X */ { "AND", 0x080A26C, 0x20, 0, PutAll }, { "ANE", 0x0800000, 0x8B, 0, PutAll }, /* X */ { "ARR", 0x0800000, 0x6B, 0, PutAll }, /* X */ { "ASL", 0x000006e, 0x02, 1, PutAll }, - { "AXS", 0x0800000, 0xCB, 0, PutAll }, /* X, -DTV? */ + { "AXS", 0x0800000, 0xCB, 0, PutAll }, /* X */ { "BCC", 0x0020000, 0x90, 0, PutPCRel8 }, { "BCS", 0x0020000, 0xb0, 0, PutPCRel8 }, { "BEQ", 0x0020000, 0xf0, 0, PutPCRel8 }, @@ -339,7 +340,6 @@ static const struct { { "CMP", 0x080A26C, 0xc0, 0, PutAll }, { "CPX", 0x080000C, 0xe0, 1, PutAll }, { "CPY", 0x080000C, 0xc0, 1, PutAll }, - { "DCP", 0x000A26C, 0xC3, 0, PutAll }, /* X */ { "DEC", 0x000006C, 0x00, 3, PutAll }, { "DEX", 0x0000001, 0xca, 0, PutAll }, { "DEY", 0x0000001, 0x88, 0, PutAll }, @@ -347,11 +347,9 @@ static const struct { { "INC", 0x000006c, 0x00, 4, PutAll }, { "INX", 0x0000001, 0xe8, 0, PutAll }, { "INY", 0x0000001, 0xc8, 0, PutAll }, - { "ISC", 0x000A26C, 0xE3, 0, PutAll }, /* X */ - { "JAM", 0x0000001, 0x02, 0, PutAll }, /* X, -DTV? */ { "JMP", 0x0000808, 0x4c, 6, PutJMP }, { "JSR", 0x0000008, 0x20, 7, PutAll }, - { "LAS", 0x0000200, 0xBB, 0, PutAll }, /* X, -DTV? */ + { "LAS", 0x0000200, 0xBB, 0, PutAll }, /* X */ { "LAX", 0x080A30C, 0xA3, 11, PutAll }, /* X */ { "LDA", 0x080A26C, 0xa0, 0, PutAll }, { "LDX", 0x080030C, 0xa2, 1, PutAll }, @@ -370,21 +368,17 @@ static const struct { { "RTI", 0x0000001, 0x40, 0, PutAll }, { "RTS", 0x0000001, 0x60, 0, PutAll }, { "SAC", 0x0800000, 0x32, 0, PutAll }, /* DTV */ - { "SAX", 0x000810C, 0x83, 1, PutAll }, /* X */ { "SBC", 0x080A26C, 0xe0, 0, PutAll }, { "SEC", 0x0000001, 0x38, 0, PutAll }, { "SED", 0x0000001, 0xf8, 0, PutAll }, { "SEI", 0x0000001, 0x78, 0, PutAll }, - { "SHA", 0x0002200, 0x93, 1, PutAll }, /* X, -DTV? */ - { "SHX", 0x0000200, 0x9e, 1, PutAll }, /* X, -DTV? */ - { "SHY", 0x0000040, 0x9c, 1, PutAll }, /* X, -DTV? */ + { "SHA", 0x0002200, 0x93, 1, PutAll }, /* X */ + { "SHX", 0x0000200, 0x9e, 1, PutAll }, /* X */ + { "SHY", 0x0000040, 0x9c, 1, PutAll }, /* X */ { "SIR", 0x0800000, 0x32, 0, PutAll }, /* DTV */ - { "SLO", 0x000A26C, 0x03, 0, PutAll }, /* X */ - { "SRE", 0x000A26C, 0x43, 0, PutAll }, /* X */ { "STA", 0x000A26C, 0x80, 0, PutAll }, { "STX", 0x000010c, 0x82, 1, PutAll }, { "STY", 0x000002c, 0x80, 1, PutAll }, - { "TAS", 0x0000200, 0x9b, 0, PutAll }, /* X */ { "TAX", 0x0000001, 0xaa, 0, PutAll }, { "TAY", 0x0000001, 0xa8, 0, PutAll }, { "TSX", 0x0000001, 0xba, 0, PutAll }, From 2d7777b6045415845c34bc5fd1f654f7727144df Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Sat, 14 Nov 2020 11:00:50 +0100 Subject: [PATCH 0599/2710] Instruction table is synchronized with the c65's one --- src/da65/opc6502dtv.c | 94 +++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/src/da65/opc6502dtv.c b/src/da65/opc6502dtv.c index 73bce7f4d..15b860c4e 100644 --- a/src/da65/opc6502dtv.c +++ b/src/da65/opc6502dtv.c @@ -45,18 +45,18 @@ -/* Descriptions for all opcodes. Base table from opc6502.c with illegal -** opcodes from http://www.oxyron.de/html/opcodes02.html and DTV opcodes +/* Descriptions for all opcodes. Base table from opc6502x.c with DTV opcodes, +** where illegal opcodes are filtered based on their support on DTV. */ const OpcDesc OpcTable_6502DTV[256] = { { "brk", 1, flNone, OH_Implicit }, /* $00 */ { "ora", 2, flUseLabel, OH_DirectXIndirect }, /* $01 */ - { "jam", 1, flNone, OH_Implicit }, /* $02 */ - { "slo", 2, flUseLabel, OH_DirectXIndirect }, /* $03 */ + { "", 1, flIllegal, OH_Illegal, }, /* $02 */ + { "", 1, flIllegal, OH_Illegal, }, /* $03 */ { "nop", 2, flUseLabel, OH_Direct }, /* $04 */ { "ora", 2, flUseLabel, OH_Direct }, /* $05 */ { "asl", 2, flUseLabel, OH_Direct }, /* $06 */ - { "slo", 2, flUseLabel, OH_Direct }, /* $07 */ + { "", 1, flIllegal, OH_Illegal, }, /* $07 */ { "php", 1, flNone, OH_Implicit }, /* $08 */ { "ora", 2, flNone, OH_Immediate }, /* $09 */ { "asl", 1, flNone, OH_Accumulator }, /* $0a */ @@ -64,26 +64,26 @@ const OpcDesc OpcTable_6502DTV[256] = { { "nop", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $0c */ { "ora", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $0d */ { "asl", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $0e */ - { "slo", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $0f */ + { "", 1, flIllegal, OH_Illegal, }, /* $0f */ { "bpl", 2, flLabel, OH_Relative }, /* $10 */ { "ora", 2, flUseLabel, OH_DirectIndirectY }, /* $11 */ { "bra", 2, flLabel, OH_Relative }, /* $12 */ - { "slo", 2, flUseLabel, OH_DirectIndirectY }, /* $13 */ + { "", 1, flIllegal, OH_Illegal, }, /* $13 */ { "nop", 2, flUseLabel, OH_DirectX }, /* $14 */ { "ora", 2, flUseLabel, OH_DirectX }, /* $15 */ { "asl", 2, flUseLabel, OH_DirectX }, /* $16 */ - { "slo", 2, flUseLabel, OH_DirectX }, /* $17 */ + { "", 1, flIllegal, OH_Illegal, }, /* $17 */ { "clc", 1, flNone, OH_Implicit }, /* $18 */ { "ora", 3, flUseLabel, OH_AbsoluteY }, /* $19 */ { "nop", 1, flNone, OH_Implicit }, /* $1a */ - { "slo", 3, flUseLabel, OH_AbsoluteY }, /* $1b */ + { "", 1, flIllegal, OH_Illegal, }, /* $1b */ { "nop", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $1c */ { "ora", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $1d */ { "asl", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $1e */ - { "slo", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $1f */ + { "", 1, flIllegal, OH_Illegal, }, /* $1f */ { "jsr", 3, flLabel, OH_Absolute }, /* $20 */ { "and", 2, flUseLabel, OH_DirectXIndirect }, /* $21 */ - { "jam", 1, flNone, OH_Implicit, }, /* $22 */ + { "", 1, flIllegal, OH_Illegal, }, /* $22 */ { "rla", 2, flUseLabel, OH_DirectXIndirect }, /* $23 */ { "bit", 2, flUseLabel, OH_Direct }, /* $24 */ { "and", 2, flUseLabel, OH_Direct }, /* $25 */ @@ -116,11 +116,11 @@ const OpcDesc OpcTable_6502DTV[256] = { { "rti", 1, flNone, OH_Rts }, /* $40 */ { "eor", 2, flUseLabel, OH_DirectXIndirect }, /* $41 */ { "sir", 1, flNone, OH_Implicit }, /* $42 */ - { "sre", 2, flUseLabel, OH_DirectXIndirect }, /* $43 */ + { "", 1, flIllegal, OH_Illegal, }, /* $43 */ { "nop", 2, flUseLabel, OH_Direct }, /* $44 */ { "eor", 2, flUseLabel, OH_Direct }, /* $45 */ { "lsr", 2, flUseLabel, OH_Direct }, /* $46 */ - { "sre", 2, flUseLabel, OH_Direct }, /* $47 */ + { "", 1, flIllegal, OH_Illegal, }, /* $47 */ { "pha", 1, flNone, OH_Implicit }, /* $48 */ { "eor", 2, flNone, OH_Immediate }, /* $49 */ { "lsr", 1, flNone, OH_Accumulator }, /* $4a */ @@ -128,26 +128,26 @@ const OpcDesc OpcTable_6502DTV[256] = { { "jmp", 3, flLabel, OH_JmpAbsolute }, /* $4c */ { "eor", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $4d */ { "lsr", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $4e */ - { "sre", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $4f */ + { "", 1, flIllegal, OH_Illegal, }, /* $4f */ { "bvc", 2, flLabel, OH_Relative }, /* $50 */ { "eor", 2, flUseLabel, OH_DirectIndirectY }, /* $51 */ - { "jam", 1, flNone, OH_Implicit }, /* $52 */ - { "sre", 2, flUseLabel, OH_DirectIndirectY }, /* $53 */ + { "", 1, flIllegal, OH_Illegal, }, /* $52 */ + { "", 1, flIllegal, OH_Illegal, }, /* $53 */ { "nop", 2, flUseLabel, OH_DirectX }, /* $54 */ { "eor", 2, flUseLabel, OH_DirectX }, /* $55 */ { "lsr", 2, flUseLabel, OH_DirectX }, /* $56 */ - { "sre", 2, flUseLabel, OH_DirectX }, /* $57 */ + { "", 1, flIllegal, OH_Illegal, }, /* $57 */ { "cli", 1, flNone, OH_Implicit }, /* $58 */ { "eor", 3, flUseLabel, OH_AbsoluteY }, /* $59 */ { "nop", 1, flNone, OH_Implicit }, /* $5a */ - { "sre", 3, flUseLabel, OH_AbsoluteY }, /* $5b */ + { "", 1, flIllegal, OH_Illegal, }, /* $5b */ { "nop", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $5c */ { "eor", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $5d */ { "lsr", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $5e */ - { "sre", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $5f */ + { "", 1, flIllegal, OH_Illegal, }, /* $5f */ { "rts", 1, flNone, OH_Rts }, /* $60 */ { "adc", 2, flUseLabel, OH_DirectXIndirect }, /* $61 */ - { "jam", 1, flNone, OH_Implicit }, /* $62 */ + { "", 1, flIllegal, OH_Illegal, }, /* $62 */ { "rra", 2, flUseLabel, OH_DirectXIndirect }, /* $63 */ { "nop", 2, flUseLabel, OH_Direct }, /* $64 */ { "adc", 2, flUseLabel, OH_Direct }, /* $65 */ @@ -163,7 +163,7 @@ const OpcDesc OpcTable_6502DTV[256] = { { "rra", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $6f */ { "bvs", 2, flLabel, OH_Relative }, /* $70 */ { "adc", 2, flUseLabel, OH_DirectIndirectY }, /* $71 */ - { "jam", 1, flNone, OH_Implicit }, /* $72 */ + { "", 1, flIllegal, OH_Illegal, }, /* $72 */ { "rra", 2, flUseLabel, OH_DirectIndirectY }, /* $73 */ { "nop", 2, flUseLabel, OH_DirectX }, /* $74 */ { "adc", 2, flUseLabel, OH_DirectX }, /* $75 */ @@ -180,35 +180,35 @@ const OpcDesc OpcTable_6502DTV[256] = { { "nop", 2, flNone, OH_Immediate }, /* $80 */ { "sta", 2, flUseLabel, OH_DirectXIndirect }, /* $81 */ { "nop", 2, flNone, OH_Immediate }, /* $82 */ - { "sax", 2, flUseLabel, OH_DirectXIndirect }, /* $83 */ + { "", 1, flIllegal, OH_Illegal, }, /* $83 */ { "sty", 2, flUseLabel, OH_Direct }, /* $84 */ { "sta", 2, flUseLabel, OH_Direct }, /* $85 */ { "stx", 2, flUseLabel, OH_Direct }, /* $86 */ - { "sax", 2, flUseLabel, OH_Direct }, /* $87 */ + { "", 1, flIllegal, OH_Illegal, }, /* $87 */ { "dey", 1, flNone, OH_Implicit }, /* $88 */ { "nop", 2, flNone, OH_Immediate }, /* $89 */ { "txa", 1, flNone, OH_Implicit }, /* $8a */ - { "xaa", 2, flNone, OH_Immediate }, /* $8b */ + { "", 1, flIllegal, OH_Illegal, }, /* $8b */ { "sty", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $8c */ { "sta", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $8d */ { "stx", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $8e */ - { "sax", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $8f */ + { "", 1, flIllegal, OH_Illegal, }, /* $8f */ { "bcc", 2, flLabel, OH_Relative }, /* $90 */ { "sta", 2, flUseLabel, OH_DirectIndirectY }, /* $91 */ - { "jam", 1, flNone, OH_Implicit }, /* $92 */ - { "ahx", 2, flUseLabel, OH_DirectIndirectY }, /* $93 */ + { "", 1, flIllegal, OH_Illegal, }, /* $92 */ + { "", 1, flIllegal, OH_Illegal, }, /* $93 */ { "sty", 2, flUseLabel, OH_DirectX }, /* $94 */ { "sta", 2, flUseLabel, OH_DirectX }, /* $95 */ { "stx", 2, flUseLabel, OH_DirectY }, /* $96 */ - { "sax", 2, flUseLabel, OH_DirectY }, /* $97 */ + { "", 1, flIllegal, OH_Illegal, }, /* $97 */ { "tya", 1, flNone, OH_Implicit }, /* $98 */ { "sta", 3, flUseLabel, OH_AbsoluteY }, /* $99 */ { "txs", 1, flNone, OH_Implicit }, /* $9a */ - { "tas", 3, flUseLabel, OH_AbsoluteY }, /* $9b */ + { "", 1, flIllegal, OH_Illegal, }, /* $9b */ { "shy", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $9c */ { "sta", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $9d */ { "shx", 3, flUseLabel, OH_AbsoluteY }, /* $9e */ - { "ahx", 3, flUseLabel, OH_AbsoluteY }, /* $9f */ + { "", 1, flIllegal, OH_Illegal, }, /* $9f */ { "ldy", 2, flNone, OH_Immediate }, /* $a0 */ { "lda", 2, flUseLabel, OH_DirectXIndirect }, /* $a1 */ { "ldx", 2, flNone, OH_Immediate }, /* $a2 */ @@ -227,7 +227,7 @@ const OpcDesc OpcTable_6502DTV[256] = { { "lax", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $af */ { "bcs", 2, flLabel, OH_Relative }, /* $b0 */ { "lda", 2, flUseLabel, OH_DirectIndirectY }, /* $b1 */ - { "jam", 1, flNone, OH_Implicit }, /* $b2 */ + { "", 1, flIllegal, OH_Illegal, }, /* $b2 */ { "lax", 2, flUseLabel, OH_DirectIndirectY }, /* $b3 */ { "ldy", 2, flUseLabel, OH_DirectX }, /* $b4 */ { "lda", 2, flUseLabel, OH_DirectX }, /* $b5 */ @@ -244,11 +244,11 @@ const OpcDesc OpcTable_6502DTV[256] = { { "cpy", 2, flNone, OH_Immediate }, /* $c0 */ { "cmp", 2, flUseLabel, OH_DirectXIndirect }, /* $c1 */ { "nop", 2, flNone, OH_Immediate }, /* $c2 */ - { "dcp", 2, flUseLabel, OH_DirectXIndirect }, /* $c3 */ + { "", 1, flIllegal, OH_Illegal, }, /* $c3 */ { "cpy", 2, flUseLabel, OH_Direct }, /* $c4 */ { "cmp", 2, flUseLabel, OH_Direct }, /* $c5 */ { "dec", 2, flUseLabel, OH_Direct }, /* $c6 */ - { "dcp", 2, flUseLabel, OH_Direct }, /* $c7 */ + { "", 1, flIllegal, OH_Illegal, }, /* $c7 */ { "iny", 1, flNone, OH_Implicit }, /* $c8 */ { "cmp", 2, flNone, OH_Immediate }, /* $c9 */ { "dex", 1, flNone, OH_Implicit }, /* $ca */ @@ -256,31 +256,31 @@ const OpcDesc OpcTable_6502DTV[256] = { { "cpy", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $cc */ { "cmp", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $cd */ { "dec", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ce */ - { "dcp", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $cf */ + { "", 1, flIllegal, OH_Illegal, }, /* $cf */ { "bne", 2, flLabel, OH_Relative }, /* $d0 */ { "cmp", 2, flUseLabel, OH_DirectIndirectY }, /* $d1 */ - { "jam", 1, flNone, OH_Implicit }, /* $d2 */ - { "dcp", 2, flUseLabel, OH_DirectIndirectY }, /* $d3 */ + { "", 1, flIllegal, OH_Illegal, }, /* $d2 */ + { "", 1, flIllegal, OH_Illegal, }, /* $d3 */ { "nop", 2, flUseLabel, OH_DirectX }, /* $d4 */ { "cmp", 2, flUseLabel, OH_DirectX }, /* $d5 */ { "dec", 2, flUseLabel, OH_DirectX }, /* $d6 */ - { "dcp", 2, flUseLabel, OH_DirectX }, /* $d7 */ + { "", 1, flIllegal, OH_Illegal, }, /* $d7 */ { "cld", 1, flNone, OH_Implicit }, /* $d8 */ { "cmp", 3, flUseLabel, OH_AbsoluteY }, /* $d9 */ { "nop", 1, flNone, OH_Implicit }, /* $da */ - { "dcp", 3, flUseLabel, OH_AbsoluteY }, /* $db */ + { "", 1, flIllegal, OH_Illegal, }, /* $db */ { "nop", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $dc */ { "cmp", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $dd */ { "dec", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $de */ - { "dcp", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $df */ + { "", 1, flIllegal, OH_Illegal, }, /* $df */ { "cpx", 2, flNone, OH_Immediate }, /* $e0 */ { "sbc", 2, flUseLabel, OH_DirectXIndirect }, /* $e1 */ { "nop", 2, flNone, OH_Immediate }, /* $e2 */ - { "isc", 2, flUseLabel, OH_DirectXIndirect }, /* $e3 */ + { "", 1, flIllegal, OH_Illegal, }, /* $e3 */ { "cpx", 2, flUseLabel, OH_Direct }, /* $e4 */ { "sbc", 2, flUseLabel, OH_Direct }, /* $e5 */ { "inc", 2, flUseLabel, OH_Direct }, /* $e6 */ - { "isc", 2, flUseLabel, OH_Direct }, /* $e7 */ + { "", 1, flIllegal, OH_Illegal, }, /* $e7 */ { "inx", 1, flNone, OH_Implicit }, /* $e8 */ { "sbc", 2, flNone, OH_Immediate }, /* $e9 */ { "nop", 1, flNone, OH_Implicit }, /* $ea */ @@ -288,21 +288,21 @@ const OpcDesc OpcTable_6502DTV[256] = { { "cpx", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ec */ { "sbc", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ed */ { "inc", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ee */ - { "isc", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ef */ + { "", 1, flIllegal, OH_Illegal, }, /* $ef */ { "beq", 2, flLabel, OH_Relative }, /* $f0 */ { "sbc", 2, flUseLabel, OH_DirectIndirectY }, /* $f1 */ - { "jam", 1, flNone, OH_Implicit }, /* $f2 */ - { "isc", 2, flUseLabel, OH_DirectIndirectY }, /* $f3 */ + { "", 1, flIllegal, OH_Illegal, }, /* $f2 */ + { "", 1, flIllegal, OH_Illegal, }, /* $f3 */ { "nop", 2, flUseLabel, OH_DirectX }, /* $f4 */ { "sbc", 2, flUseLabel, OH_DirectX }, /* $f5 */ { "inc", 2, flUseLabel, OH_DirectX }, /* $f6 */ - { "isc", 2, flUseLabel, OH_DirectX }, /* $f7 */ + { "", 1, flIllegal, OH_Illegal, }, /* $f7 */ { "sed", 1, flNone, OH_Implicit }, /* $f8 */ { "sbc", 3, flUseLabel, OH_AbsoluteY }, /* $f9 */ { "nop", 1, flNone, OH_Implicit }, /* $fa */ - { "isc", 3, flUseLabel, OH_AbsoluteY }, /* $fb */ + { "", 1, flIllegal, OH_Illegal, }, /* $fb */ { "nop", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $fc */ { "sbc", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $fd */ { "inc", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $fe */ - { "isc", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $ff */ + { "", 1, flIllegal, OH_Illegal, }, /* $ff */ }; From 5f65252fa6197c5ec635a9f5b4bec2cad60c70fb Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 15 Nov 2020 11:44:12 -0500 Subject: [PATCH 0600/2710] Added the cputdirect entry point to the cputc() functions in the two Oric libraries. It now is available in all libraries that have cputc(). --- libsrc/atmos/cputc.s | 6 +++--- libsrc/telestrat/cputc.s | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/libsrc/atmos/cputc.s b/libsrc/atmos/cputc.s index f1ce5f2b7..db3fa373d 100644 --- a/libsrc/atmos/cputc.s +++ b/libsrc/atmos/cputc.s @@ -7,7 +7,7 @@ ; .export _cputcxy, _cputc - .export setscrptr, putchar + .export setscrptr, cputdirect, putchar .constructor initcputc .import rvs .import popax @@ -32,13 +32,13 @@ _cputc: cmp #$0D ; CR? rts L1: cmp #$0A ; LF? - bne output + bne cputdirect inc CURS_Y ; Newline rts ; Output the character, then advance the cursor position -output: +cputdirect: jsr putchar advance: diff --git a/libsrc/telestrat/cputc.s b/libsrc/telestrat/cputc.s index 38f8af84b..4b2fc4024 100644 --- a/libsrc/telestrat/cputc.s +++ b/libsrc/telestrat/cputc.s @@ -4,15 +4,17 @@ ; void cputc (char c); ; - .export _cputc, CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR + .export _cputc, cputdirect + .export CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR .include "telestrat.inc" +cputdirect: .proc _cputc ldx CHARCOLOR cpx OLD_CHARCOLOR beq do_not_change_color_foreground - + stx OLD_CHARCOLOR ; Store CHARCOLOR into OLD_CHARCOLOR dec SCRX @@ -47,8 +49,8 @@ do_not_change_color: CHARCOLOR: .res 1 OLD_CHARCOLOR: - .res 1 + .res 1 BGCOLOR: - .res 1 + .res 1 OLD_BGCOLOR: .res 1 From 2915464667e3098478f94d1a7b46e88f4fa8c6b5 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 15 Nov 2020 15:22:23 -0500 Subject: [PATCH 0601/2710] Fixed cc65's generation of char-type bit-shift code. Fixed CHAR-to-INT type conversions in the right-shift code generator. Also fixed some printf-style format specifiers. --- src/cc65/codegen.c | 52 ++++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index aee6141fc..f56abcd95 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -3104,16 +3104,14 @@ void g_asr (unsigned flags, unsigned long val) "tosasrax", "tosshrax", "tosasreax", "tosshreax" }; - /* If the right hand side is const, the lhs is not on stack but still + /* If the right hand side is const, the lhs is not on stack, but still ** in the primary register. */ if (flags & CF_CONST) { - switch (flags & CF_TYPEMASK) { - case CF_CHAR: if (flags & CF_FORCECHAR) { - if ((flags & CF_UNSIGNED) != 0 && val <= 4) { + if ((flags & CF_UNSIGNED) != 0 && val < 8) { while (val--) { AddCodeLine ("lsr a"); } @@ -3125,19 +3123,28 @@ void g_asr (unsigned flags, unsigned long val) } return; } + AddCodeLine ("ldx #$00"); + if ((flags & CF_UNSIGNED) == 0) { + unsigned L = GetLocalLabel (); + + AddCodeLine ("cmp #$80"); /* Sign bit into carry */ + AddCodeLine ("bcc %s", LocalLabelName (L)); + AddCodeLine ("dex"); /* Make $FF */ + g_defcodelabel (L); + } } /* FALLTHROUGH */ case CF_INT: val &= 0x0F; if (val >= 8) { + AddCodeLine ("txa"); if (flags & CF_UNSIGNED) { - AddCodeLine ("txa"); AddCodeLine ("ldx #$00"); } else { - unsigned L = GetLocalLabel(); + unsigned L = GetLocalLabel (); + AddCodeLine ("cpx #$80"); /* Sign bit into carry */ - AddCodeLine ("txa"); AddCodeLine ("ldx #$00"); AddCodeLine ("bcc %s", LocalLabelName (L)); AddCodeLine ("dex"); /* Make $FF */ @@ -3155,9 +3162,9 @@ void g_asr (unsigned flags, unsigned long val) } if (val > 0) { if (flags & CF_UNSIGNED) { - AddCodeLine ("jsr shrax%ld", val); + AddCodeLine ("jsr shrax%lu", val); } else { - AddCodeLine ("jsr asrax%ld", val); + AddCodeLine ("jsr asrax%lu", val); } } return; @@ -3168,7 +3175,8 @@ void g_asr (unsigned flags, unsigned long val) AddCodeLine ("ldx #$00"); AddCodeLine ("lda sreg+1"); if ((flags & CF_UNSIGNED) == 0) { - unsigned L = GetLocalLabel(); + unsigned L = GetLocalLabel (); + AddCodeLine ("bpl %s", LocalLabelName (L)); AddCodeLine ("dex"); g_defcodelabel (L); @@ -3181,7 +3189,8 @@ void g_asr (unsigned flags, unsigned long val) AddCodeLine ("ldy #$00"); AddCodeLine ("ldx sreg+1"); if ((flags & CF_UNSIGNED) == 0) { - unsigned L = GetLocalLabel(); + unsigned L = GetLocalLabel (); + AddCodeLine ("bpl %s", LocalLabelName (L)); AddCodeLine ("dey"); g_defcodelabel (L); @@ -3197,7 +3206,8 @@ void g_asr (unsigned flags, unsigned long val) AddCodeLine ("ldy sreg+1"); AddCodeLine ("sty sreg"); if ((flags & CF_UNSIGNED) == 0) { - unsigned L = GetLocalLabel(); + unsigned L = GetLocalLabel (); + AddCodeLine ("cpy #$80"); AddCodeLine ("ldy #$00"); AddCodeLine ("bcc %s", LocalLabelName (L)); @@ -3219,9 +3229,9 @@ void g_asr (unsigned flags, unsigned long val) } if (val > 0) { if (flags & CF_UNSIGNED) { - AddCodeLine ("jsr shreax%ld", val); + AddCodeLine ("jsr shreax%lu", val); } else { - AddCodeLine ("jsr asreax%ld", val); + AddCodeLine ("jsr asreax%lu", val); } } return; @@ -3251,15 +3261,13 @@ void g_asl (unsigned flags, unsigned long val) "tosaslax", "tosshlax", "tosasleax", "tosshleax" }; - /* If the right hand side is const, the lhs is not on stack but still + /* If the right hand side is const, the lhs is not on stack, but still ** in the primary register. */ if (flags & CF_CONST) { - switch (flags & CF_TYPEMASK) { - case CF_CHAR: - if ((flags & CF_FORCECHAR) != 0 && val <= 4) { + if ((flags & CF_FORCECHAR) != 0 && val <= 6) { while (val--) { AddCodeLine ("asl a"); } @@ -3284,9 +3292,9 @@ void g_asl (unsigned flags, unsigned long val) } if (val > 0) { if (flags & CF_UNSIGNED) { - AddCodeLine ("jsr shlax%ld", val); + AddCodeLine ("jsr shlax%lu", val); } else { - AddCodeLine ("jsr aslax%ld", val); + AddCodeLine ("jsr aslax%lu", val); } } return; @@ -3325,9 +3333,9 @@ void g_asl (unsigned flags, unsigned long val) } if (val > 0) { if (flags & CF_UNSIGNED) { - AddCodeLine ("jsr shleax%ld", val); + AddCodeLine ("jsr shleax%lu", val); } else { - AddCodeLine ("jsr asleax%ld", val); + AddCodeLine ("jsr asleax%lu", val); } } return; From 83ac2755fecfc22f4261433b7f38ca4d6e171d4c Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sun, 15 Nov 2020 10:16:32 +0100 Subject: [PATCH 0602/2710] Add test case for #1332 --- test/todo/bug1332.c | 72 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 test/todo/bug1332.c diff --git a/test/todo/bug1332.c b/test/todo/bug1332.c new file mode 100644 index 000000000..9714e0782 --- /dev/null +++ b/test/todo/bug1332.c @@ -0,0 +1,72 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests bit-field bug. https://github.com/cc65/cc65/issues/1332 +*/ + +#include <stdio.h> +#include <string.h> + +static unsigned char failures = 0; + +static const struct bitfield { + unsigned lsb : 1; + unsigned pad : 14; + unsigned msb : 1; +} b = {1, 0, 1}; + +static unsigned v; + +void test_if_val (void) +{ + /* Gets appropriate garbage (0x12) into .X so the test fails. */ + v = 0x1234; + + if (b.msb == 1) { + fprintf (stderr, "if (msb == 1) OK\n"); + } else { + fprintf (stderr, "if (msb == 1) FAILED\n"); + failures++; + } +} + +void test_sprintf (void) +/* This test case is similar to the original bug report. */ +{ + char buf[10]; + snprintf (buf, sizeof (buf), "%u", b.msb); + + if (strcmp (buf, "1") != 0) { + fprintf (stderr, "Expected: sprintf (msb) == \"1\", got: %s\n", buf); + failures++; + } else { + fprintf (stderr, "sprintf (msb) OK\n"); + } +} + +int main (void) +{ + test_if_val (); + test_sprintf (); + + printf ("failures: %u\n", failures); + return failures; +} From 060417b0dc1018adc79fd16d0eb97c61d729aea3 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sat, 31 Oct 2020 21:27:41 +0100 Subject: [PATCH 0603/2710] Adjust type of int constants that fit in char When there is an integral constant like `3` in an expression, it has type `int` according to the C spec, even though it can be represented as an `unsigned char`. Change codegen (`hie_internal` and `typeadjust`) to treat it as `unsigned char` instead of `int` so that faster, unsigned operations can be used. For the test case in #1298, reduces the cycles per iteration from 4311 to 1884. This is a great improvement, but still much worse than the 1053 cycles/iter from `c4698df~`, so more work remains to be done. Further partial fix for #1298 and #1308. --- src/cc65/expr.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 19572944e..7ddd8f43a 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -219,6 +219,13 @@ static unsigned typeadjust (ExprDesc* lhs, ExprDesc* rhs, int NoPush) /* Generate type adjustment code if needed */ ltype = TypeOf (lhst); + if (ED_IsConstAbsInt (lhs) && ltype == CF_INT && lhs->IVal >= 0 && lhs->IVal < 256) { + /* If the lhs is a int constant that fits in an unsigned char, use unsigned char. + ** g_typeadjust will either promote this to int or unsigned int as appropriate + ** based on the other operand. See comment in hie_internal. + */ + ltype = CF_CHAR | CF_UNSIGNED; + } if (ED_IsLocNone (lhs)) { ltype |= CF_CONST; } @@ -227,6 +234,9 @@ static unsigned typeadjust (ExprDesc* lhs, ExprDesc* rhs, int NoPush) ltype |= CF_PRIMARY; } rtype = TypeOf (rhst); + if (ED_IsConstAbsInt (rhs) && rtype == CF_INT && rhs->IVal >= 0 && rhs->IVal < 256) { + rtype = CF_CHAR | CF_UNSIGNED; + } if (ED_IsLocNone (rhs)) { rtype |= CF_CONST; } @@ -2502,6 +2512,15 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ } } else if (lconst && (Gen->Flags & GEN_COMM) && !rconst) { + /* If the LHS constant is an int that fits into an unsigned char, change the + ** codegen type to unsigned char. If the RHS is also an unsigned char, then + ** g_typeadjust will return unsigned int (instead of int, which would be + ** returned without this modification). This allows more efficient operations, + ** but does not affect correctness for the same reasons explained in g_typeadjust. + */ + if (ltype == CF_INT && Expr->IVal >= 0 && Expr->IVal < 256) { + ltype = CF_CHAR | CF_UNSIGNED; + } /* The left side is constant, the right side is not, and the ** operator allows swapping the operands. We haven't pushed the @@ -2536,6 +2555,10 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ unsigned rtype = TypeOf (Expr2.Type); type = 0; if (rconst) { + /* As above, but for the RHS. */ + if (rtype == CF_INT && Expr2.IVal >= 0 && Expr2.IVal < 256) { + rtype = CF_CHAR | CF_UNSIGNED; + } /* Second value is constant - check for div */ type |= CF_CONST; rtype |= CF_CONST; From c2c73e7d06f53ab6d0c5613fd9ef7ff4793200bf Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Mon, 16 Nov 2020 09:10:53 +0100 Subject: [PATCH 0604/2710] Move #1332 test from todo/ to val/ This bug was fixed by 2915464. --- test/{todo => val}/bug1332.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/{todo => val}/bug1332.c (100%) diff --git a/test/todo/bug1332.c b/test/val/bug1332.c similarity index 100% rename from test/todo/bug1332.c rename to test/val/bug1332.c From 116682c19022ff6d7e314569c62b15cb31fd4215 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Mon, 16 Nov 2020 18:07:39 +0100 Subject: [PATCH 0605/2710] Avoid C99 idioms. --- src/cc65/datatype.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index e5e20ac1f..413007a85 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -124,7 +124,8 @@ static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBu /* First argument */ SymEntry* Param = D->SymTab->SymHead; - for (unsigned I = 0; I < D->ParamCount; ++I) { + unsigned I; + for (I = 0; I < D->ParamCount; ++I) { CHECK (Param != 0 && (Param->Flags & SC_PARAM) != 0); if (I > 0) { SB_AppendStr (&ParamList, ", "); @@ -602,7 +603,8 @@ void PrintFuncSig (FILE* F, const char* Name, Type* T) /* Get the parameter list string. Start from the first parameter */ SymEntry* Param = D->SymTab->SymHead; - for (unsigned I = 0; I < D->ParamCount; ++I) { + unsigned I; + for (I = 0; I < D->ParamCount; ++I) { CHECK (Param != 0 && (Param->Flags & SC_PARAM) != 0); if (I > 0) { SB_AppendStr (&ParamList, ", "); From 69c0363c7e0be4a230f00616da69ea9fdcf80c0b Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Mon, 16 Nov 2020 18:50:15 +0100 Subject: [PATCH 0606/2710] Fixed CPU bitmask constants to match the CPU instruction set bitmasks computed in src/common/cpu.h. --- asminc/cpu.mac | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/asminc/cpu.mac b/asminc/cpu.mac index 55727c93e..31170fbed 100644 --- a/asminc/cpu.mac +++ b/asminc/cpu.mac @@ -2,23 +2,23 @@ CPU_ISET_NONE = $0001 CPU_ISET_6502 = $0002 CPU_ISET_6502X = $0004 -CPU_ISET_65SC02 = $0008 -CPU_ISET_65C02 = $0010 -CPU_ISET_65816 = $0020 -CPU_ISET_SWEET16 = $0040 -CPU_ISET_HUC6280 = $0080 -;CPU_ISET_M740 = $0100 not actually implemented -CPU_ISET_4510 = $0200 -CPU_ISET_6502DTV = $0400 +CPU_ISET_6502DTV = $0008 +CPU_ISET_65SC02 = $0010 +CPU_ISET_65C02 = $0020 +CPU_ISET_65816 = $0040 +CPU_ISET_SWEET16 = $0080 +CPU_ISET_HUC6280 = $0100 +;CPU_ISET_M740 = $0200 not actually implemented +CPU_ISET_4510 = $0400 ; CPU capabilities CPU_NONE = CPU_ISET_NONE CPU_6502 = CPU_ISET_6502 CPU_6502X = CPU_ISET_6502|CPU_ISET_6502X +CPU_6502DTV = CPU_ISET_6502|CPU_ISET_6502X|CPU_ISET_6502DTV CPU_65SC02 = CPU_ISET_6502|CPU_ISET_65SC02 CPU_65C02 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02 CPU_65816 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65816 CPU_SWEET16 = CPU_ISET_SWEET16 CPU_HUC6280 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02|CPU_ISET_HUC6280 CPU_4510 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02|CPU_ISET_4510 -CPU_6502DTV = CPU_ISET_6502|CPU_ISET_6502X|CPU_ISET_6502DTV From 0cd8d3761310b0c1b3fdfc349611333a502587bb Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Tue, 17 Nov 2020 08:53:48 +0100 Subject: [PATCH 0607/2710] Fixed comment. --- libsrc/atari/doesclrscr.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari/doesclrscr.s b/libsrc/atari/doesclrscr.s index 2e19e4b98..f937f9ac5 100644 --- a/libsrc/atari/doesclrscr.s +++ b/libsrc/atari/doesclrscr.s @@ -1,7 +1,7 @@ ; ; Christian Groessler, June-2016 ; -; unsigned char doesclrscr(void); +; unsigned char doesclrscrafterexit (void); ; ; returns 0/1 if after program termination the screen isn't/is cleared ; From 68cb15d0f91df5508ea783214110d98bc3433c3f Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Mon, 16 Nov 2020 13:29:07 +0100 Subject: [PATCH 0608/2710] Add test case for #1320 From https://github.com/cc65/cc65/issues/1320#issuecomment-726866015 --- test/err/bug1320.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 test/err/bug1320.c diff --git a/test/err/bug1320.c b/test/err/bug1320.c new file mode 100644 index 000000000..14e72fe99 --- /dev/null +++ b/test/err/bug1320.c @@ -0,0 +1,35 @@ +/* + Copyright 2020 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Test of access violation. + https://github.com/cc65/cc65/issues/1320 + This should compile and should be moved to tests/val/ when the bug is fixed. +*/ + +char *var; + +void foo (char, char); +char bar (void); + +void main (void) +{ + foo (*var++, bar ()); +} From 2ffb6af5d9dc699477b539e759e597205ca4ed93 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 17 Nov 2020 08:15:34 -0500 Subject: [PATCH 0609/2710] Simplified a bug test. Gave it an appropriate description, --- test/err/bug1320.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/test/err/bug1320.c b/test/err/bug1320.c index 14e72fe99..15482434c 100644 --- a/test/err/bug1320.c +++ b/test/err/bug1320.c @@ -1,35 +1,38 @@ /* Copyright 2020 The cc65 Authors - This software is provided 'as-is', without any express or implied + This software is provided "as-is", without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it + including commercial applications; and, to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be - appreciated but is not required. + appreciated, but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. */ /* - Test of access violation. + Test of a post-counted pointer argument, + followed by a (nested) function-call argument. + https://github.com/cc65/cc65/issues/1320 - This should compile and should be moved to tests/val/ when the bug is fixed. + + After the bug is fixed, this file should be moved to "test/misc/". */ -char *var; +static char *var; -void foo (char, char); +void foo (char *, char); char bar (void); void main (void) { - foo (*var++, bar ()); + foo (var++, bar ()); } From 47bceb0eab4bd040ca9516d8c5eca8a2ca2f24d4 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 17 Nov 2020 13:34:22 -0500 Subject: [PATCH 0610/2710] Streamlined some makefiles. foreach isn't needed because make automatically iterates through lists of words when substituting patterns. --- test/asm/Makefile | 26 +++++++++++++------------- test/dasm/Makefile | 11 +++++------ 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/test/asm/Makefile b/test/asm/Makefile index 9b0aa582e..0cf65f9ca 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -7,7 +7,7 @@ endif ifdef CMD_EXE EXE = .exe MKDIR = mkdir $(subst /,\,$1) - RMDIR = -rmdir /s /q $(subst /,\,$1) + RMDIR = -rmdir /q /s $(subst /,\,$1) else EXE = MKDIR = mkdir -p $1 @@ -23,7 +23,7 @@ LD65 := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) WORKDIR = ../../testwrk/asm -ISEQUAL = $(WORKDIR)/isequal$(EXE) +ISEQUAL = ../../testwrk/isequal$(EXE) CC = gcc CFLAGS = -O2 @@ -31,12 +31,12 @@ CFLAGS = -O2 .PHONY: all clean OPCODE_REFS := $(wildcard *-opcodes.ref) -OPCODE_CPUS = $(foreach ref,$(OPCODE_REFS),$(ref:%-opcodes.ref=%)) -OPCODE_BINS = $(foreach cpu,$(OPCODE_CPUS),$(WORKDIR)/$(cpu)-opcodes.bin) +OPCODE_BINS = $(OPCODE_REFS:%.ref=$(WORKDIR)/%.bin) +OPCODE_CPUS = $(OPCODE_REFS:%-opcodes.ref=%) CPUDETECT_REFS := $(wildcard *-cpudetect.ref) -CPUDETECT_CPUS = $(foreach ref,$(CPUDETECT_REFS),$(ref:%-cpudetect.ref=%)) -CPUDETECT_BINS = $(foreach cpu,$(CPUDETECT_CPUS),$(WORKDIR)/$(cpu)-cpudetect.bin) +CPUDETECT_BINS = $(CPUDETECT_REFS:%.ref=$(WORKDIR)/%.bin) +CPUDETECT_CPUS = $(CPUDETECT_REFS:%-cpudetect.ref=%) all: $(OPCODE_BINS) $(CPUDETECT_BINS) $(WORKDIR)/paramcount.o @@ -50,9 +50,9 @@ define OPCODE_template $(WORKDIR)/$1-opcodes.bin: $1-opcodes.s $(ISEQUAL) $(if $(QUIET),echo asm/$1-opcodes.bin) - $(CA65) --cpu $1 -t none -l $(WORKDIR)/$1-opcodes.lst -o $(WORKDIR)/$1-opcodes.o $$< - $(LD65) -t none -o $$@ $(WORKDIR)/$1-opcodes.o none.lib - $(ISEQUAL) $$@ $1-opcodes.ref + $(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$< + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib + $(ISEQUAL) $1-opcodes.ref $$@ endef # OPCODE_template @@ -62,16 +62,16 @@ define CPUDETECT_template $(WORKDIR)/$1-cpudetect.bin: cpudetect.s $(ISEQUAL) $(if $(QUIET),echo asm/$1-cpudetect.bin) - $(CA65) --cpu $1 -t none -l $(WORKDIR)/$1-cpudetect.lst -o $(WORKDIR)/$1-cpudetect.o $$< - $(LD65) -t none -o $$@ $(WORKDIR)/$1-cpudetect.o none.lib - $(ISEQUAL) $$@ $1-cpudetect.ref + $(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$< + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib + $(ISEQUAL) $1-cpudetect.ref $$@ endef # CPUDETECT_template $(foreach cpu,$(CPUDETECT_CPUS),$(eval $(call CPUDETECT_template,$(cpu)))) $(WORKDIR)/%.o: %.s | $(WORKDIR) - $(CA65) -l $(@:.o=.lst) -o $(WORKDIR)/$@ $< + $(CA65) -l $(@:.o=.lst) -o $@ $< clean: @$(call RMDIR,$(WORKDIR)) diff --git a/test/dasm/Makefile b/test/dasm/Makefile index dc0b57c76..542ce7d5e 100644 --- a/test/dasm/Makefile +++ b/test/dasm/Makefile @@ -7,7 +7,7 @@ endif ifdef CMD_EXE EXE = .exe MKDIR = mkdir $(subst /,\,$1) - RMDIR = -rmdir /s /q $(subst /,\,$1) + RMDIR = -rmdir /q /s $(subst /,\,$1) else EXE = MKDIR = mkdir -p $1 @@ -23,7 +23,7 @@ DA65 := $(if $(wildcard ../../bin/da65*),../../bin/da65,da65) WORKDIR = ../../testwrk/dasm -ISEQUAL = $(WORKDIR)/isequal$(EXE) +ISEQUAL = ../../testwrk/isequal$(EXE) CC = gcc CFLAGS = -O2 @@ -33,10 +33,9 @@ START = --start-addr 0x8000 .PHONY: all clean SOURCES := $(wildcard *.s) -CPUS = $(foreach src,$(SOURCES),$(src:%-disass.s=%)) -BINS = $(foreach cpu,$(CPUS),$(WORKDIR)/$(cpu)-reass.bin) +BINS = $(SOURCES:%disass.s=$(WORKDIR)/%reass.bin) +CPUS = $(SOURCES:%-disass.s=%) -# default target defined later all: $(BINS) $(WORKDIR): @@ -56,7 +55,7 @@ $(WORKDIR)/$1-reass.s: $(WORKDIR)/$1-disass.bin $(WORKDIR)/$1-reass.bin: $(WORKDIR)/$1-reass.s $(ISEQUAL) $(if $(QUIET),echo dasm/$1-reass.bin) $(CL65) --cpu $1 -t none $(START) -o $$@ $$< - $(ISEQUAL) $$@ $(WORKDIR)/$1-disass.bin + $(ISEQUAL) $(WORKDIR)/$1-disass.bin $$@ endef # DISASS_template From b0497f40b27f509a3c965ce866bbc38ffcb4a259 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 17 Nov 2020 13:40:36 -0500 Subject: [PATCH 0611/2710] 'test/isequal.c' doesn't change. Don't rebuild it for each test subdirectory. --- test/misc/Makefile | 2 +- test/ref/Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/misc/Makefile b/test/misc/Makefile index b8c578405..bd4826d54 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -37,7 +37,7 @@ WORKDIR = ..$S..$Stestwrk$Smisc OPTIONS = g O Os Osi Osir Osr Oi Oir Or -ISEQUAL = $(WORKDIR)$Sisequal$(EXE) +ISEQUAL = ..$S..$Stestwrk$Sisequal$(EXE) CC = gcc CFLAGS = -O2 diff --git a/test/ref/Makefile b/test/ref/Makefile index 5faf9fb19..d9c9817ee 100644 --- a/test/ref/Makefile +++ b/test/ref/Makefile @@ -35,7 +35,7 @@ WORKDIR = ..$S..$Stestwrk$Sref OPTIONS = g O Os Osi Osir Osr Oi Oir Or -ISEQUAL = $(WORKDIR)$Sisequal$(EXE) +ISEQUAL = ..$S..$Stestwrk$Sisequal$(EXE) CC = gcc CFLAGS = -O2 -Wall -W -Wextra -funsigned-char -fwrapv -fno-strict-overflow From 5ba16654a35bd08734ad34bf72d932ccfce1de2d Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 17 Nov 2020 15:06:05 -0500 Subject: [PATCH 0612/2710] Refined the hints about making new test reference files. --- test/asm/Makefile | 2 +- test/asm/readme.txt | 17 ++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/test/asm/Makefile b/test/asm/Makefile index 0cf65f9ca..e951c2015 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -60,7 +60,7 @@ $(foreach cpu,$(OPCODE_CPUS),$(eval $(call OPCODE_template,$(cpu)))) define CPUDETECT_template -$(WORKDIR)/$1-cpudetect.bin: cpudetect.s $(ISEQUAL) +$(WORKDIR)/$1-cpudetect.bin: cpudetect.s $1-cpudetect.ref $(ISEQUAL) $(if $(QUIET),echo asm/$1-cpudetect.bin) $(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$< $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib diff --git a/test/asm/readme.txt b/test/asm/readme.txt index a2b1e9a41..0bbadeab9 100644 --- a/test/asm/readme.txt +++ b/test/asm/readme.txt @@ -1,4 +1,3 @@ - Assembler Testcases =================== @@ -7,7 +6,7 @@ Opcode Tests: These testcases are inspired by the ones now removed from test/assembler. The main purpose is to have each possible opcode generated at least once, -either by an assembly instruction or a ".byte"-placeholder. Typically +either by an Assembly instruction or a ".byte"-placeholder. Typically generated by disassembling a binary dump that contains data in the form of the pattern that each opcode is stated once in order followed by easy to recognise: @@ -28,21 +27,21 @@ m740 instructions set. Still to do is to find a way to implement an opcode testcase for the 65816 processor, since it's capable of executing instructions with an 8-bit and -a 16-bit operator alike, only distinguished by one processor flag. +a 16-bit operator alike, distinguished by only one processor flag. -CPU detect Tests +CPU Detect Tests ---------------- These tests all assemble the same file "cpudetect.s" which contains several conditionals for several CPUs, only using every option known to the "--cpu" -commandline switch of ca65/cl65. +command-line switch of ca65/cl65. Reference (".ref") Files ------------------------ -A hint on creating these files: when running the test, it will fail due to -the missing ".ref" file. Review the output of the ".lst" very pedantic, then -copy the ".bin" to the ".ref" file. - +Some hints about creating new files: +Make an empty file with the CPU's name prepended to "-cpudetect.ref". Run the +tests; one of them will fail due to a mismatch. Review the output of the +".lst" file pedantically, then copy the ".bin" over the empty ".ref" file. From bd6e5927c46335663efcf3d78f80c715526b9e79 Mon Sep 17 00:00:00 2001 From: Polluks <polluks@sdf.lonestar.org> Date: Wed, 18 Nov 2020 01:01:17 +0100 Subject: [PATCH 0613/2710] Fixed #1341 --- src/cc65/coptstop.c | 2 +- src/cc65/expr.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 41dfb5526..59bbe6dc9 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -1732,7 +1732,7 @@ unsigned OptStackOps (CodeSeg* S) int I; int OldEntryCount; /* Old number of entries */ unsigned Used; /* What registers would be used */ - unsigned PushedRegs; /* Track if the same regs are used after the push */ + unsigned PushedRegs = 0; /* Track if the same regs are used after the push */ int RhsAChgIndex; /* Track if rhs is changed more than once */ int RhsXChgIndex; /* Track if rhs is changed more than once */ int IsRegAOptFunc = 0; /* Whether to use the RegA-only optimizations */ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 7ddd8f43a..1c8c25020 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3871,8 +3871,8 @@ static void hieOr (ExprDesc *Expr) static void hieQuest (ExprDesc* Expr) /* Parse the ternary operator */ { - int FalseLab; - int TrueLab; + int FalseLab = 0; + int TrueLab = 0; CodeMark SkippedBranch; CodeMark TrueCodeEnd; ExprDesc Expr2; /* Expression 2 */ From a0596eae6e0b96bc02a6c9dae8cb675bfc93dfba Mon Sep 17 00:00:00 2001 From: Polluks <polluks@sdf.lonestar.org> Date: Wed, 18 Nov 2020 01:05:40 +0100 Subject: [PATCH 0614/2710] Added waitvsync for PET --- libsrc/pet/waitvsync.s | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 libsrc/pet/waitvsync.s diff --git a/libsrc/pet/waitvsync.s b/libsrc/pet/waitvsync.s new file mode 100644 index 000000000..39b562e43 --- /dev/null +++ b/libsrc/pet/waitvsync.s @@ -0,0 +1,16 @@ +; +; Written by Robin Harbron, requires 12" monitor +; +; void waitvsync (void); +; + + .export _waitvsync + + .include "pet.inc" + +_waitvsync: +@l1: + lda VIA_PB + and #%00100000 + bne @l1 + rts From c59e8277ae3e8565e5f1bb9c47d81a2530980284 Mon Sep 17 00:00:00 2001 From: Polluks <polluks@sdf.lonestar.org> Date: Wed, 18 Nov 2020 01:13:10 +0100 Subject: [PATCH 0615/2710] Added prototype --- doc/pet.sgml | 1 + include/cbm.h | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/pet.sgml b/doc/pet.sgml index eb13d9fb9..6bedf6a0f 100644 --- a/doc/pet.sgml +++ b/doc/pet.sgml @@ -105,6 +105,7 @@ declaration and usage. <item>cbm_save <item>cbm_write <item>get_tv +<item>waitvsync </itemize> diff --git a/include/cbm.h b/include/cbm.h index ac3615c38..5bcef8e60 100644 --- a/include/cbm.h +++ b/include/cbm.h @@ -166,7 +166,7 @@ unsigned char get_tv (void); unsigned char __fastcall__ kbrepeat (unsigned char mode); /* Changes which keys have automatic repeat. */ -#if !defined(__CBM610__) && !defined(__PET__) +#if !defined(__CBM610__) void waitvsync (void); /* Wait for the start of the next video field. */ #endif From 4205a04a34caae838fba8daee65269aac87ecf26 Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Mon, 16 Nov 2020 22:15:47 +0100 Subject: [PATCH 0616/2710] 6502DTV is not a superset of 6502X more --- src/common/cpu.c | 2 +- src/common/cpu.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/cpu.c b/src/common/cpu.c index 16578543b..b55a5ab00 100644 --- a/src/common/cpu.c +++ b/src/common/cpu.c @@ -70,7 +70,7 @@ const unsigned CPUIsets[CPU_COUNT] = { CPU_ISET_NONE, CPU_ISET_6502, CPU_ISET_6502 | CPU_ISET_6502X, - CPU_ISET_6502 | CPU_ISET_6502X | CPU_ISET_6502DTV, + CPU_ISET_6502 | CPU_ISET_6502DTV, CPU_ISET_6502 | CPU_ISET_65SC02, CPU_ISET_6502 | CPU_ISET_65SC02 | CPU_ISET_65C02, CPU_ISET_6502 | CPU_ISET_65SC02 | CPU_ISET_65C02 | CPU_ISET_65816, diff --git a/src/common/cpu.h b/src/common/cpu.h index 706b4544e..2e75feaaf 100644 --- a/src/common/cpu.h +++ b/src/common/cpu.h @@ -50,7 +50,7 @@ typedef enum { CPU_NONE, /* No CPU - for assembler */ CPU_6502, CPU_6502X, /* "Extended", that is: with illegal opcodes */ - CPU_6502DTV, /* CPU_6502X + C64DTV extra opcodes */ + CPU_6502DTV, /* CPU_6502 + DTV extra and illegal opcodes */ CPU_65SC02, CPU_65C02, CPU_65816, From 130d3b52a245897b84aa7423a75b3e32301d70eb Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Mon, 16 Nov 2020 22:16:14 +0100 Subject: [PATCH 0617/2710] new macros supporting 6502DTV cpu --- doc/ca65.sgml | 21 ++++++++++++++++++++- src/ca65/condasm.c | 11 +++++++++++ src/ca65/pseudo.c | 10 ++++++++++ src/ca65/scanner.c | 2 ++ src/ca65/token.h | 2 ++ 5 files changed, 45 insertions(+), 1 deletion(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 25a47b29a..9f45f8c54 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -419,6 +419,8 @@ The assembler accepts <tt><ref id=".P02" name=".P02"></tt> command was given). <item>all valid 6502 mnemonics plus a set of illegal instructions when in <ref id="6502X-mode" name="6502X mode">. +<item>all valid 6502DTV mnemonics when in 6502DTV mode (after the + <tt><ref id=".PDTV" name=".PDTV"></tt> command was given). <item>all valid 65SC02 mnemonics when in 65SC02 mode (after the <tt><ref id=".PSC02" name=".PSC02"></tt> command was given). <item>all valid 65C02 mnemonics when in 65C02 mode (after the @@ -3153,6 +3155,12 @@ Here's a list of all control commands and a description, what they do: (see <tt><ref id=".PC02" name=".PC02"></tt> command). +<sect1><tt>.IFPDTV</tt><label id=".IFPDTV"><p> + + Conditional assembly: Check if the assembler is currently in 6502DTV mode + (see <tt><ref id=".PDTV" name=".PDTV"></tt> command). + + <sect1><tt>.IFPSC02</tt><label id=".IFPSC02"><p> Conditional assembly: Check if the assembler is currently in 65SC02 mode @@ -3585,6 +3593,14 @@ Here's a list of all control commands and a description, what they do: <tt><ref id=".P4510" name=".P4510"></tt> +<sect1><tt>.PDTV</tt><label id=".PDTV"><p> + + Enable the 6502DTV instruction set. This is a superset of the 6502 + instruction set. + + See: <tt><ref id=".P02" name=".P02"></tt></tt> + + <sect1><tt>.POPCPU</tt><label id=".POPCPU"><p> Pop the last CPU setting from the stack, and activate it. @@ -3848,10 +3864,11 @@ Here's a list of all control commands and a description, what they do: Switch the CPU instruction set. The command is followed by a string that specifies the CPU. Possible values are those that can also be supplied to the <tt><ref id="option--cpu" name="--cpu"></tt> command line option, - namely: 6502, 6502X, 65SC02, 65C02, 65816, 4510 and HuC6280. + namely: 6502, 6502X, 6502DTV, 65SC02, 65C02, 65816, 4510 and HuC6280. See: <tt><ref id=".CPU" name=".CPU"></tt>, <tt><ref id=".IFP02" name=".IFP02"></tt>, + <tt><ref id=".IFPDTV" name=".IFPDTV"></tt>, <tt><ref id=".IFP816" name=".IFP816"></tt>, <tt><ref id=".IFPC02" name=".IFPC02"></tt>, <tt><ref id=".IFPSC02" name=".IFPSC02"></tt>, @@ -4586,6 +4603,7 @@ each supported CPU a constant similar to CPU_SWEET16 CPU_HUC6280 CPU_4510 + CPU_6502DTV </verb></tscreen> is defined. These constants may be used to determine the exact type of the @@ -4600,6 +4618,7 @@ another constant is defined: CPU_ISET_SWEET16 CPU_ISET_HUC6280 CPU_ISET_4510 + CPU_ISET_6502DTV </verb></tscreen> The value read from the <tt/<ref id=".CPU" name=".CPU">/ pseudo variable may diff --git a/src/ca65/condasm.c b/src/ca65/condasm.c index b8bda4c7d..6198f4017 100644 --- a/src/ca65/condasm.c +++ b/src/ca65/condasm.c @@ -416,6 +416,16 @@ void DoConditionals (void) CalcOverallIfCond (); break; + case TOK_IFPDTV: + D = AllocIf (".IFPDTV", 1); + NextTok (); + if (IfCond) { + SetIfCond (D, GetCPU() == CPU_6502DTV); + } + ExpectSep (); + CalcOverallIfCond (); + break; + case TOK_IFPSC02: D = AllocIf (".IFPSC02", 1); NextTok (); @@ -470,6 +480,7 @@ int CheckConditionals (void) case TOK_IFP4510: case TOK_IFP816: case TOK_IFPC02: + case TOK_IFPDTV: case TOK_IFPSC02: case TOK_IFREF: DoConditionals (); diff --git a/src/ca65/pseudo.c b/src/ca65/pseudo.c index 5b2ef0573..26d01cbf1 100644 --- a/src/ca65/pseudo.c +++ b/src/ca65/pseudo.c @@ -1552,6 +1552,14 @@ static void DoP4510 (void) +static void DoPDTV (void) +/* Switch to C64DTV CPU */ +{ + SetCPU (CPU_6502DTV); +} + + + static void DoPageLength (void) /* Set the page length for the listing */ { @@ -2058,6 +2066,7 @@ static CtrlDesc CtrlCmdTab [] = { { ccKeepToken, DoConditionals }, /* .IFP4510 */ { ccKeepToken, DoConditionals }, /* .IFP816 */ { ccKeepToken, DoConditionals }, /* .IFPC02 */ + { ccKeepToken, DoConditionals }, /* .IFPDTV */ { ccKeepToken, DoConditionals }, /* .IFPSC02 */ { ccKeepToken, DoConditionals }, /* .IFREF */ { ccNone, DoImport }, @@ -2091,6 +2100,7 @@ static CtrlDesc CtrlCmdTab [] = { { ccNone, DoPageLength }, { ccNone, DoUnexpected }, /* .PARAMCOUNT */ { ccNone, DoPC02 }, + { ccNone, DoPDTV }, { ccNone, DoPopCPU }, { ccNone, DoPopSeg }, { ccNone, DoProc }, diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c index 361a817c1..fb9905809 100644 --- a/src/ca65/scanner.c +++ b/src/ca65/scanner.c @@ -219,6 +219,7 @@ struct DotKeyword { { ".IFP4510", TOK_IFP4510 }, { ".IFP816", TOK_IFP816 }, { ".IFPC02", TOK_IFPC02 }, + { ".IFPDTV", TOK_IFPDTV }, { ".IFPSC02", TOK_IFPSC02 }, { ".IFREF", TOK_IFREF }, { ".IMPORT", TOK_IMPORT }, @@ -258,6 +259,7 @@ struct DotKeyword { { ".PAGELENGTH", TOK_PAGELENGTH }, { ".PARAMCOUNT", TOK_PARAMCOUNT }, { ".PC02", TOK_PC02 }, + { ".PDTV", TOK_PDTV }, { ".POPCPU", TOK_POPCPU }, { ".POPSEG", TOK_POPSEG }, { ".PROC", TOK_PROC }, diff --git a/src/ca65/token.h b/src/ca65/token.h index 8998cc162..ab36028fd 100644 --- a/src/ca65/token.h +++ b/src/ca65/token.h @@ -196,6 +196,7 @@ typedef enum token_t { TOK_IFP4510, TOK_IFP816, TOK_IFPC02, + TOK_IFPDTV, TOK_IFPSC02, TOK_IFREF, TOK_IMPORT, @@ -229,6 +230,7 @@ typedef enum token_t { TOK_PAGELENGTH, TOK_PARAMCOUNT, TOK_PC02, + TOK_PDTV, TOK_POPCPU, TOK_POPSEG, TOK_PROC, From 843b94388a792b1343ca1f5824b29c0ab8401419 Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Mon, 16 Nov 2020 22:16:40 +0100 Subject: [PATCH 0618/2710] added asm test for 6502DTV cpu --- test/asm/cpudetect.s | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/asm/cpudetect.s b/test/asm/cpudetect.s index adad7c1dc..6362b98bc 100644 --- a/test/asm/cpudetect.s +++ b/test/asm/cpudetect.s @@ -24,6 +24,10 @@ taz .endif +.ifpdtv + sac #00 +.endif + ; step 2: check for bitwise compatibility of instructions sets ; (made verbose for better reading with hexdump/hd(1)) @@ -64,3 +68,7 @@ .byte 0,"CPU_ISET_4510" .endif +.if (.cpu .bitand CPU_ISET_6502DTV) + .byte 0,"CPU_ISET_6502DTV" +.endif + From 1c5c07406ca3c0a203b57df49f73c1f4067f78ee Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Wed, 18 Nov 2020 09:51:01 +0100 Subject: [PATCH 0619/2710] cpudetect.s needs this file to run its test for 6502dtv cpu --- test/asm/6502dtv-cpudetect.ref | Bin 0 -> 33 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/asm/6502dtv-cpudetect.ref diff --git a/test/asm/6502dtv-cpudetect.ref b/test/asm/6502dtv-cpudetect.ref new file mode 100644 index 0000000000000000000000000000000000000000..59278e80a126c65cc81e93110e153813468d5455 GIT binary patch literal 33 ccmcC!U~moyjrR<84T(21H84WuxrBrP0EvDGdH?_b literal 0 HcmV?d00001 From 0e98818db54b93c0db7c4918068146bacfa1e1fb Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Wed, 18 Nov 2020 15:26:23 +0100 Subject: [PATCH 0620/2710] assembled SAC and SIR opcodes of 6502DTV cpu were wrong --- src/ca65/instr.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ca65/instr.c b/src/ca65/instr.c index c5e3b7fef..77a865319 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -367,7 +367,7 @@ static const struct { { "RRA", 0x000A26C, 0x63, 0, PutAll }, /* X */ { "RTI", 0x0000001, 0x40, 0, PutAll }, { "RTS", 0x0000001, 0x60, 0, PutAll }, - { "SAC", 0x0800000, 0x32, 0, PutAll }, /* DTV */ + { "SAC", 0x0800000, 0x32, 1, PutAll }, /* DTV */ { "SBC", 0x080A26C, 0xe0, 0, PutAll }, { "SEC", 0x0000001, 0x38, 0, PutAll }, { "SED", 0x0000001, 0xf8, 0, PutAll }, @@ -375,7 +375,7 @@ static const struct { { "SHA", 0x0002200, 0x93, 1, PutAll }, /* X */ { "SHX", 0x0000200, 0x9e, 1, PutAll }, /* X */ { "SHY", 0x0000040, 0x9c, 1, PutAll }, /* X */ - { "SIR", 0x0800000, 0x32, 0, PutAll }, /* DTV */ + { "SIR", 0x0800000, 0x42, 1, PutAll }, /* DTV */ { "STA", 0x000A26C, 0x80, 0, PutAll }, { "STX", 0x000010c, 0x82, 1, PutAll }, { "STY", 0x000002c, 0x80, 1, PutAll }, @@ -1031,9 +1031,9 @@ const InsTable* InsTab = (const InsTable*) &InsTab6502; */ static unsigned char EATab[12][AM65I_COUNT] = { { /* Table 0 */ - 0x00, 0x00, 0x05, 0x0D, 0x0F, 0x15, 0x1D, 0x1F, - 0x00, 0x19, 0x12, 0x00, 0x07, 0x11, 0x17, 0x01, - 0x00, 0x00, 0x00, 0x03, 0x13, 0x09, 0x00, 0x09, + 0x00, 0x00, 0x05 /*zp*/, 0x0D /*abs*/, 0x0F, 0x15 /*zpx*/, 0x1D /*abx*/, 0x1F, + 0x00, 0x19 /*aby*/, 0x12, 0x00, 0x07, 0x11 /*izy*/, 0x17, 0x01 /*izx*/, + 0x00, 0x00, 0x00, 0x03, 0x13, 0x09 /*imm*/, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00 }, { /* Table 1 */ From 527500cedca1d18163e969e5acefb0f5e4ac5151 Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Wed, 18 Nov 2020 15:28:15 +0100 Subject: [PATCH 0621/2710] instruction table contained wrong parameters at SIR opcode --- src/da65/opc6502dtv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/da65/opc6502dtv.c b/src/da65/opc6502dtv.c index 15b860c4e..fe83ad598 100644 --- a/src/da65/opc6502dtv.c +++ b/src/da65/opc6502dtv.c @@ -115,7 +115,7 @@ const OpcDesc OpcTable_6502DTV[256] = { { "rla", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $3f */ { "rti", 1, flNone, OH_Rts }, /* $40 */ { "eor", 2, flUseLabel, OH_DirectXIndirect }, /* $41 */ - { "sir", 1, flNone, OH_Implicit }, /* $42 */ + { "sir", 2, flNone, OH_Immediate }, /* $42 */ { "", 1, flIllegal, OH_Illegal, }, /* $43 */ { "nop", 2, flUseLabel, OH_Direct }, /* $44 */ { "eor", 2, flUseLabel, OH_Direct }, /* $45 */ From 36f5dcbb6e2265ff1b2409b2ced05af23460e35a Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Wed, 18 Nov 2020 15:29:56 +0100 Subject: [PATCH 0622/2710] added 6502dtv opdoces testcases and corrected cpudetect --- test/asm/6502dtv-cpudetect.ref | Bin 33 -> 33 bytes test/asm/6502dtv-opcodes.ref | Bin 0 -> 498 bytes test/asm/6502dtv-opcodes.s | 258 +++++++++++++++++++++++++++++++++ test/asm/readme.txt | 2 +- 4 files changed, 259 insertions(+), 1 deletion(-) create mode 100644 test/asm/6502dtv-opcodes.ref create mode 100644 test/asm/6502dtv-opcodes.s diff --git a/test/asm/6502dtv-cpudetect.ref b/test/asm/6502dtv-cpudetect.ref index 59278e80a126c65cc81e93110e153813468d5455..77a865eb42566cdbce5cd3ef00c8654346e2c889 100644 GIT binary patch delta 7 OcmY#XWHg${r~m*2Rskpg delta 7 OcmY#XWVD{hr~m*2dI2#2 diff --git a/test/asm/6502dtv-opcodes.ref b/test/asm/6502dtv-opcodes.ref new file mode 100644 index 0000000000000000000000000000000000000000..408d89be2e4dd43683a6e8e3401d01e8020b6039 GIT binary patch literal 498 zcmV~$0{~D507cPk-fUwTFMHX3Vc9l*_TrXpZnf-X+qP|6=Y$AJsL){uOE|(uh)AT! zM6se;(X8k(f|wA*icK8i5-)xND`BF<RuU_zl`OfHf|RL9O&ZdYj`Y8gAtRZr%vKgF ztCcOtP7ZP+a*>-n<jrU0FJKk43R#7%B3992{7&%_l%y1;%ao;Dc`8^Htx8tqDnV7M zRj)x!Os(2=th#^Hv+7$7tcHym)1)cQXif`S(yBFW+S1NyZ*{ObTAhN<bm>Yry3>Q6 z1ih@@eXPD#KdZkrz#7OP1~X(R!}ycoBStc6^cd?e>u+o9xL`aJCQf29Q<yq!x;10w zENiwk$C^8j`7B@|i&)GO{^8%HEc=h;)(UH-waQu@tYPgs*0X_)Y-02O)|Rc-Hfy`J z!`f->VmEu(yN~@G;NYRd968D{>$r8oI(aHM&6%_3IL`$xUb<{uxq8jIZr!kM-r_cQ uxO<QLJmBG@$2@t;GwZqa!g~2Cc+H!)?|9D#K7RUaefj#$`fmNOe*OZ~w613W literal 0 HcmV?d00001 diff --git a/test/asm/6502dtv-opcodes.s b/test/asm/6502dtv-opcodes.s new file mode 100644 index 000000000..f2446cbe0 --- /dev/null +++ b/test/asm/6502dtv-opcodes.s @@ -0,0 +1,258 @@ +.setcpu "6502DTV" + + brk + ora ($12,x) + .byte $02 + .byte $03 + nop $12 + ora $12 + asl $12 + .byte $07 + php + ora #$12 + asl a + anc #$12 + nop $3456 + ora $3456 + asl $3456 + .byte $0f + bpl *+122 + ora ($12),y + bra *+122 + .byte $13 + nop $12,x + ora $12,x + asl $12,x + .byte $17 + clc + ora $3456,y + .byte $1a ; nop + .byte $1b + nop $3456,x + ora $3456,x + asl $3456,x + .byte $1f + jsr $3456 + and ($12,x) + .byte $22 + rla ($12,x) + bit $12 + and $12 + rol $12 + rla $12 + plp + and #$12 + rol a + .byte $2b,$12 ; anc #$12 + bit $3456 + and $3456 + rol $3456 + rla $3456 + bmi *+122 + and ($12),y + sac #$12 + rla ($12),y + .byte $34,$12 ; nop $12,x + and $12,x + rol $12,x + rla $12,x + sec + and $3456,y + .byte $3a ; nop + rla $3456,y + .byte $3c,$56,$34 ; nop $3456,x + and $3456,x + rol $3456,x + rla $3456,x + rti + eor ($12,x) + sir #$12 + .byte $43 + .byte $44,$12 ; nop $12 + eor $12 + lsr $12 + .byte $47 + pha + eor #$12 + lsr a + alr #$12 + jmp $3456 + eor $3456 + lsr $3456 + .byte $4f + bvc *+122 + eor ($12),y + .byte $52 + .byte $53 + .byte $54,$12 ; nop $12,x + eor $12,x + lsr $12,x + .byte $57 + cli + eor $3456,y + .byte $5a ; nop + .byte $5b + .byte $5c,$56,$34 ; nop $3456,x + eor $3456,x + lsr $3456,x + .byte $5f + rts + adc ($12,x) + .byte $62 + rra ($12,x) + .byte $64,$12 ; nop $12 + adc $12 + ror $12 + rra $12 + pla + adc #$12 + ror a + arr #$12 + jmp ($3456) + adc $3456 + ror $3456 + rra $3456 + bvs *+122 + adc ($12),y + .byte $72 + rra ($12),y + .byte $74,$12 ; nop $12,x + adc $12,x + ror $12,x + rra $12,x + sei + adc $3456,y + .byte $7a ; nop + rra $3456,y + .byte $7c,$56,$34 ; nop $3456,x + adc $3456,x + ror $3456,x + rra $3456,x + nop #$12 + sta ($12,x) + .byte $82,$12 ; nop #$12 + .byte $83 + sty $12 + sta $12 + stx $12 + .byte $87 + dey + .byte $89,$12 ; nop #$12 + txa + .byte $8b + sty $3456 + sta $3456 + stx $3456 + .byte $8f + bcc *+122 + sta ($12),y + .byte $92 + .byte $93 + sty $12,x + sta $12,x + stx $12,y + .byte $97 + tya + sta $3456,y + txs + .byte $9b + shy $3456,x + sta $3456,x + shx $3456,y + .byte $9f + ldy #$12 + lda ($12,x) + ldx #$12 + lax ($12,x) + ldy $12 + lda $12 + ldx $12 + lax $12 + tay + lda #$12 + tax + lax #$12 + ldy $3456 + lda $3456 + ldx $3456 + lax $3456 + bcs *+122 + lda ($12),y + .byte $b2 + lax ($12),y + ldy $12,x + lda $12,x + ldx $12,y + lax $12,y + clv + lda $3456,y + tsx + las $3456,y + ldy $3456,x + lda $3456,x + ldx $3456,y + lax $3456,y + cpy #$12 + cmp ($12,x) + .byte $c2,$12 ; nop #$12 + .byte $c3 + cpy $12 + cmp $12 + dec $12 + .byte $c7 + iny + cmp #$12 + dex + axs #$12 + cpy $3456 + cmp $3456 + dec $3456 + .byte $cf + bne *+122 + cmp ($12),y + .byte $d2 + .byte $d3 + .byte $d4,$12 ; nop $12,x + cmp $12,x + dec $12,x + .byte $d7 + cld + cmp $3456,y + .byte $da ; nop + .byte $db + .byte $dc,$56,$34 ; nop $3456,x + cmp $3456,x + dec $3456,x + .byte $df + cpx #$12 + sbc ($12,x) + .byte $e2,$12 ; nop #$12 + .byte $e3 + cpx $12 + sbc $12 + inc $12 + .byte $e7 + inx + sbc #$12 + nop + .byte $eb,$12 ; sbc #$12 + cpx $3456 + sbc $3456 + inc $3456 + .byte $ef + beq *+122 + sbc ($12),y + .byte $f2 + .byte $f3 + .byte $f4,$12 ; nop $12,x + sbc $12,x + inc $12,x + .byte $f7 + sed + sbc $3456,y + .byte $fa ; nop + .byte $fb + .byte $fc,$56,$34 ; nop $3456,x + sbc $3456,x + inc $3456,x + .byte $ff diff --git a/test/asm/readme.txt b/test/asm/readme.txt index 0bbadeab9..1d135c895 100644 --- a/test/asm/readme.txt +++ b/test/asm/readme.txt @@ -23,7 +23,7 @@ leftover dummy opcode parameters with something more recognizable. The testcases for 6502, 6502x, 65sc02, 65c02, 4510, and huc6280 have been put together by Sven Oliver ("SvOlli") Moll, as well as a template for the -m740 instructions set. +m740 instructions set. Later 6502dtv support was also added. Still to do is to find a way to implement an opcode testcase for the 65816 processor, since it's capable of executing instructions with an 8-bit and From b2c55c3338c582c103bfffa7a7f1fa37b085492c Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Wed, 18 Nov 2020 15:47:09 +0100 Subject: [PATCH 0623/2710] adding c64dtv device to the supported ones --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3d78fda50..3d7b32289 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ including - VIC20 - C16/C116 and Plus/4 - C64 + - C64DTV - C128 - CBM 510 (aka P500) - the 600/700 family From adad3d2e870ea09551681a8b020660f36fbaa9af Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Thu, 19 Nov 2020 12:37:51 +0100 Subject: [PATCH 0624/2710] Revert "adding c64dtv device to the supported ones" This reverts commit 1d9e378fe3e3304000763d821d72afa841f954a3. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 3d7b32289..3d78fda50 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,6 @@ including - VIC20 - C16/C116 and Plus/4 - C64 - - C64DTV - C128 - CBM 510 (aka P500) - the 600/700 family From 63543dee07d5f0f7c7096b3251ef4095e16060e8 Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Thu, 19 Nov 2020 12:44:33 +0100 Subject: [PATCH 0625/2710] Revert transient modification of EATab Table 0 comment --- src/ca65/instr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ca65/instr.c b/src/ca65/instr.c index 77a865319..faeff2026 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -1031,9 +1031,9 @@ const InsTable* InsTab = (const InsTable*) &InsTab6502; */ static unsigned char EATab[12][AM65I_COUNT] = { { /* Table 0 */ - 0x00, 0x00, 0x05 /*zp*/, 0x0D /*abs*/, 0x0F, 0x15 /*zpx*/, 0x1D /*abx*/, 0x1F, - 0x00, 0x19 /*aby*/, 0x12, 0x00, 0x07, 0x11 /*izy*/, 0x17, 0x01 /*izx*/, - 0x00, 0x00, 0x00, 0x03, 0x13, 0x09 /*imm*/, 0x00, 0x09, + 0x00, 0x00, 0x05, 0x0D, 0x0F, 0x15, 0x1D, 0x1F, + 0x00, 0x19, 0x12, 0x00, 0x07, 0x11, 0x17, 0x01, + 0x00, 0x00, 0x00, 0x03, 0x13, 0x09, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00 }, { /* Table 1 */ From 032b4e3979c378af81dfed2c6aa2ad0edb8a8fee Mon Sep 17 00:00:00 2001 From: Zsolt Branyiczky <brazso@zematix.hu> Date: Thu, 19 Nov 2020 21:22:40 +0100 Subject: [PATCH 0626/2710] Fixed typo --- doc/ca65.sgml | 2 +- test/asm/cpudetect.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 9f45f8c54..cebdca12e 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -3598,7 +3598,7 @@ Here's a list of all control commands and a description, what they do: Enable the 6502DTV instruction set. This is a superset of the 6502 instruction set. - See: <tt><ref id=".P02" name=".P02"></tt></tt> + See: <tt><ref id=".P02" name=".P02"></tt> <sect1><tt>.POPCPU</tt><label id=".POPCPU"><p> diff --git a/test/asm/cpudetect.s b/test/asm/cpudetect.s index 6362b98bc..7b2363b7f 100644 --- a/test/asm/cpudetect.s +++ b/test/asm/cpudetect.s @@ -25,7 +25,7 @@ .endif .ifpdtv - sac #00 + sac #$00 .endif From 23273584a0a49867d5975aa59edc7a9853f7f8d4 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 19 Nov 2020 23:12:16 +0100 Subject: [PATCH 0627/2710] testcase for issue #1348 --- test/misc/Makefile | 8 +++++++ test/misc/bug1348.c | 54 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 test/misc/bug1348.c diff --git a/test/misc/Makefile b/test/misc/Makefile index bd4826d54..853e9d1e0 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -117,6 +117,14 @@ $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) +# this one fails when optimization are enabled +$(WORKDIR)/bug1348.$1.$2.prg: bug1348.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug1348.$1.$2.prg) + $(CC65) -Osr -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) + $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) + # these need reference data that can't be generated by a host-compiled program, # in a useful way $(WORKDIR)/limits.$1.$2.prg: limits.c $(ISEQUAL) | $(WORKDIR) diff --git a/test/misc/bug1348.c b/test/misc/bug1348.c new file mode 100644 index 000000000..913849482 --- /dev/null +++ b/test/misc/bug1348.c @@ -0,0 +1,54 @@ + +/* bug#1348, wrongly optimized integer promotion in comparison */ + +#include <stdio.h> + +int notrandtab[] = { + 0xffff, 0x7fff, 0x3fff, 0x1fff, + 0x0fff, 0x07ff, 0x03ff, 0x01ff, + 0x00ff, 0x007f, 0x003f, 0x001f, + 0x000f, 0x0007, 0x0003, 0x0001 +}; + +unsigned char notrandcount = 0; + +int notrand(void) +{ + return notrandtab[notrandcount & 0x0f]; +} + +unsigned char n1, n2; +unsigned char i, ii, s; +unsigned char err = 0; + +unsigned char cmptab[] = { + 0xff, 0x7f, 0x3f, 0x1f, + 0x0f, 0x07, 0x03, 0x01, + 0x80, 0x40, 0x20, 0x10, + 0x08, 0x04, 0x02, 0x01 +}; + +int main(void) +{ + for (ii = 0; ii < 16; ++ii) { + s = cmptab[ii]; + for (i = 0; i < 16; ++i) { + n1 = n2 = 0; + if ((notrand() & 0xff) > s) { + n1 = 1; + } + if ((notrand() & 0xffu) > s) { + n2 = 1; + } + printf("%5d>%3d %d(%02x) %d(%02x) %s\n", + notrandtab[notrandcount & 0x0f], s, + n1, (notrand() & 0xff), + n2, (notrand() & 0xffu), + n1 == n2 ? "=" : "!=" + ); + if (n1 != n2) err = 1; + notrandcount++; + } + } + return err; +} From 48710af55ae0df0a5ed81f50da40a34b314978ac Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 19 Nov 2020 23:21:06 +0100 Subject: [PATCH 0628/2710] make plasma sample work again despite issue #1348 --- samples/plasma.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/samples/plasma.c b/samples/plasma.c index ac17265f3..f48d6dc77 100644 --- a/samples/plasma.c +++ b/samples/plasma.c @@ -1,7 +1,7 @@ /*****************************************************************************\ ** plasma test program for cc65. ** ** ** -** (w)2001 by groepaz/hitmen ** +** (w)2001 by groepaz ** ** ** ** Cleanup and porting by Ullrich von Bassewitz. ** ** ** @@ -54,7 +54,6 @@ #pragma static-locals (1); - static const unsigned char sinustable[0x100] = { 0x80, 0x7d, 0x7a, 0x77, 0x74, 0x70, 0x6d, 0x6a, 0x67, 0x64, 0x61, 0x5e, 0x5b, 0x58, 0x55, 0x52, @@ -131,8 +130,6 @@ static void doplasma (register unsigned char* scrn) } } - - static void makechar (void) { static const unsigned char bittab[8] = { @@ -147,7 +144,7 @@ static void makechar (void) for (i = 0; i < 8; ++i){ b = 0; for (ii = 0; ii < 8; ++ii) { - if ((rand() & 0xFF) > s) { + if ((rand() & 0xFFu) > s) { b |= bittab[ii]; } } From c11e389a9400a32a4cf4a0672e23fe5fcfd8c426 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 20 Nov 2020 17:25:10 +0100 Subject: [PATCH 0629/2710] move testcase for issue #1320 into test/misc --- test/misc/Makefile | 6 ++++++ test/{err => misc}/bug1320.c | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) rename test/{err => misc}/bug1320.c (93%) diff --git a/test/misc/Makefile b/test/misc/Makefile index 853e9d1e0..3fab957cb 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -100,6 +100,12 @@ $(WORKDIR)/bug1263.$1.$2.prg: bug1263.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1263.$1.$2.prg) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) +# should compile, but gives an error (segfault) +$(WORKDIR)/bug1320.$1.$2.prg: bug1320.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." + $(if $(QUIET),echo misc/bug1320.$1.$2.prg) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # this one requires --std=c89, it fails with --std=c99 # it fails currently at runtime $(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) diff --git a/test/err/bug1320.c b/test/misc/bug1320.c similarity index 93% rename from test/err/bug1320.c rename to test/misc/bug1320.c index 15482434c..3599d60de 100644 --- a/test/err/bug1320.c +++ b/test/misc/bug1320.c @@ -24,7 +24,7 @@ https://github.com/cc65/cc65/issues/1320 - After the bug is fixed, this file should be moved to "test/misc/". + After the bug is fixed, this file should be moved to "test/val/". */ static char *var; @@ -35,4 +35,5 @@ char bar (void); void main (void) { foo (var++, bar ()); + return 0; } From cffcbce60fc41d26c25891edc8992e23a4a8d4c9 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Fri, 20 Nov 2020 19:11:20 +0100 Subject: [PATCH 0630/2710] Bumped version. I placed the Git tag V2.19 in hindsight at https://github.com/cc65/cc65/commit/555282497c3ecf8b313d87d5973093af19c35bd5. But I certainly don't want to rewrite the Git history just for the reported version, so I simply set the reported version at today's HEAD to 2.19. --- src/common/version.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/version.c b/src/common/version.c index 202c61cc3..992be45ee 100644 --- a/src/common/version.c +++ b/src/common/version.c @@ -47,7 +47,7 @@ #define VER_MAJOR 2U -#define VER_MINOR 18U +#define VER_MINOR 19U From 79bdc2d51f1bf67830ef6fcde3e6cc6bf9c72bfa Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Fri, 20 Nov 2020 19:19:55 +0100 Subject: [PATCH 0631/2710] Set correct prerequisite. See https://github.com/cc65/cc65/issues/1318 --- libsrc/geos-common/disk/calcblksfree.s | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libsrc/geos-common/disk/calcblksfree.s b/libsrc/geos-common/disk/calcblksfree.s index 520c8ca61..5d7b98aba 100644 --- a/libsrc/geos-common/disk/calcblksfree.s +++ b/libsrc/geos-common/disk/calcblksfree.s @@ -13,6 +13,10 @@ .include "geossym.inc" _CalcBlksFree: + lda #<curDirHead + ldx #>curDirHead + sta r5L + stx r5H jsr CalcBlksFree stx __oserror lda r4L From 8b42f570e998df727c75d3cac7cfe6683478d900 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 20 Nov 2020 17:29:26 -0500 Subject: [PATCH 0632/2710] Fixed code that caused a seg-fault after parsing a (deferred) post-count argument followed by a (nested) function-call argument. The old broken code defers the count until the end of the (parent function's) argument list. But, a nested function call clears the pointer to the deferred type. That leads to an access violation. The new code defers only until the end of each argument. Fixes #1320. --- src/cc65/expr.c | 44 +++++++++++++++++------------------- test/misc/Makefile | 10 ++------ test/{misc => val}/bug1320.c | 17 +++++++++----- 3 files changed, 34 insertions(+), 37 deletions(-) rename test/{misc => val}/bug1320.c (85%) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 1c8c25020..0cf650d3b 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1,7 +1,7 @@ /* expr.c ** ** 1998-06-21, Ullrich von Bassewitz -** 2020-01-25, Greg King +** 2020-11-20, Greg King */ @@ -608,6 +608,8 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) ** The function returns the size of the arguments pushed in bytes. */ { + ExprDesc Expr; + /* Initialize variables */ SymEntry* Param = 0; /* Keep gcc silent */ unsigned PushedSize = 0; /* Size of arguments pushed */ @@ -634,7 +636,6 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) ** */ if (ParamComplete && IS_Get (&CodeSizeFactor) >= 200) { - /* Calculate the number and size of the parameters */ FrameParams = Func->ParamCount; FrameSize = Func->ParamSize; @@ -656,18 +657,13 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) } } - /* The info of the last argument could be needed out of the loop */ - ExprDesc Expr; - ED_Init (&Expr); - Expr.Flags |= ED->Flags & E_MASK_KEEP_SUBEXPR; - /* Parse the actual argument list */ while (CurTok.Tok != TOK_RPAREN) { - unsigned Flags; /* Code generator flags, not expression flags */ - - /* This way the info of the last parameter won't be cleared */ + ED_Init (&Expr); + + /* This way, the info of the last parameter won't be cleared */ Expr.Flags |= ED->Flags & E_MASK_KEEP_SUBEXPR; /* Count arguments */ @@ -781,18 +777,20 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) Error ("Argument expected after comma"); break; } + + DoDeferred (SQP_KEEP_NONE, &Expr); } + /* Append last deferred inc/dec before the function is called. + ** The last parameter needs to be preserved if it is passed in AX/EAX Regs. + */ + DoDeferred (IsFastcall ? SQP_KEEP_EAX : SQP_KEEP_NONE, &Expr); + /* Check if we had enough arguments */ if (PushedCount < Func->ParamCount) { Error ("Too few arguments in function call"); } - /* Append deferred inc/dec before the function is called. - ** The last parameter needs to be restored if it is passed with AX/EAX Regs. - */ - DoDeferred (IsFastcall ? SQP_KEEP_EAX : SQP_KEEP_NONE, &Expr); - /* The function returns the size of all arguments pushed onto the stack. ** However, if there are parameters missed (which is an error, and was ** flagged by the compiler), AND a stack frame was preallocated above, @@ -1395,7 +1393,7 @@ static void ArrayRef (ExprDesc* Expr) /* The array subscript is a constant. Since we can have the element ** address directly as base+offset, we can remove the array address ** push onto the stack before if loading subscript doesn't tamper that - ** address in the primary. + ** address in the primary. */ if (!ConstBaseAddr) { RemoveCode (&Mark2); @@ -1419,7 +1417,7 @@ static void ArrayRef (ExprDesc* Expr) ** remove the code that loaded the address into the primary. */ if (!IsTypeArray (Expr->Type)) { - + /* It's a pointer, so we do have to load it into the primary ** first (if it's not already there). */ @@ -2025,8 +2023,8 @@ static void PostInc (ExprDesc* Expr) /* Get the data type */ Flags = TypeOf (Expr->Type); - /* We are allowed by the C standard to defer the inc operation until - ** the this expression is used, so that we don't need to save and reload + /* We are allowed by the C standard to defer the inc operation until after + ** the expression is used, so that we don't need to save and reload ** the original value. */ @@ -2065,7 +2063,7 @@ static void PostInc (ExprDesc* Expr) /* Fetch the value and use it (since it's the result of the expression) */ LoadExpr (CF_NONE, Expr); - /* Defer the increment until the value of this expression is used */; + /* Defer the increment until after the value of this expression is used */ DeferInc (Expr); } } @@ -2132,7 +2130,7 @@ static void PostDec (ExprDesc* Expr) /* Fetch the value and save it (since it's the result of the expression) */ LoadExpr (CF_NONE, Expr); - /* Defer the decrement until the value of this expression is used */; + /* Defer the decrement until after the value of this expression is used */ DeferDec (Expr); } } @@ -3738,7 +3736,7 @@ static void hieOr (ExprDesc *Expr) Error ("Scalar expression expected"); ED_MakeConstBool (Expr, 0); } else if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { - + if (!ED_IsConstBool (Expr)) { /* Test the lhs if we haven't had && operators. If we had them, the ** jump is already in place and there's no need to do the test. @@ -3749,7 +3747,7 @@ static void hieOr (ExprDesc *Expr) /* Get first expr */ LoadExpr (CF_FORCECHAR, Expr); - + /* Append deferred inc/dec at sequence point */ DoDeferred (SQP_KEEP_TEST, Expr); diff --git a/test/misc/Makefile b/test/misc/Makefile index 3fab957cb..ad31e8554 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -100,12 +100,6 @@ $(WORKDIR)/bug1263.$1.$2.prg: bug1263.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1263.$1.$2.prg) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) -# should compile, but gives an error (segfault) -$(WORKDIR)/bug1320.$1.$2.prg: bug1320.c | $(WORKDIR) - @echo "FIXME: " $$@ "currently does not compile." - $(if $(QUIET),echo misc/bug1320.$1.$2.prg) - $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - # this one requires --std=c89, it fails with --std=c99 # it fails currently at runtime $(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) @@ -114,7 +108,7 @@ $(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) - + # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(if $(QUIET),echo misc/endless.$1.$2.prg) @@ -130,7 +124,7 @@ $(WORKDIR)/bug1348.$1.$2.prg: bug1348.c | $(WORKDIR) $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) - + # these need reference data that can't be generated by a host-compiled program, # in a useful way $(WORKDIR)/limits.$1.$2.prg: limits.c $(ISEQUAL) | $(WORKDIR) diff --git a/test/misc/bug1320.c b/test/val/bug1320.c similarity index 85% rename from test/misc/bug1320.c rename to test/val/bug1320.c index 3599d60de..824b50071 100644 --- a/test/misc/bug1320.c +++ b/test/val/bug1320.c @@ -1,5 +1,5 @@ /* - Copyright 2020 The cc65 Authors + Copyright 2020, The cc65 Authors This software is provided "as-is", without any express or implied warranty. In no event will the authors be held liable for any damages @@ -21,18 +21,23 @@ /* Test of a post-counted pointer argument, followed by a (nested) function-call argument. + Test that compiling it doesn't cause a seg-fault. https://github.com/cc65/cc65/issues/1320 - - After the bug is fixed, this file should be moved to "test/val/". */ static char *var; -void foo (char *, char); -char bar (void); +static void foo (char *, char) +{ +} -void main (void) +static char bar (void) +{ + return 'b'; +} + +int main (void) { foo (var++, bar ()); return 0; From a0d986faf8a646b8d01ed43e88727a42f1476be7 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 27 Nov 2020 21:19:49 -0500 Subject: [PATCH 0633/2710] Fixed the horizontal movement of the mouse pointer on platforms with the VIC-II display chip. ca65's logical (Boolean) NOT operator was used where bitwise NOT should be used. The effect was that all sprites were shifted to the left side of a screen when the mouse sprite was put on the left side. --- libsrc/c128/mcbdefault.s | 12 ++++++------ libsrc/c64/mcbdefault.s | 10 +++++----- libsrc/cbm510/mcbdefault.s | 12 ++++++------ 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/libsrc/c128/mcbdefault.s b/libsrc/c128/mcbdefault.s index eb521eb3a..a3ca3d0d1 100644 --- a/libsrc/c128/mcbdefault.s +++ b/libsrc/c128/mcbdefault.s @@ -19,12 +19,12 @@ ; Sprite definitions. The first value can be changed to adjust the number ; of the sprite used for the mouse. All others depend on this value. -MOUSE_SPR = 0 ; Sprite used for the mouse -MOUSE_SPR_MEM = $0E00 ; Memory location -MOUSE_SPR_MASK = $01 .shl MOUSE_SPR ; Positive mask -MOUSE_SPR_NMASK = .lobyte(.not MOUSE_SPR_MASK) ; Negative mask -VIC_SPR_X = (VIC_SPR0_X + 2*MOUSE_SPR) ; Sprite X register -VIC_SPR_Y = (VIC_SPR0_Y + 2*MOUSE_SPR) ; Sprite Y register +MOUSE_SPR = 0 ; Sprite used for the mouse +MOUSE_SPR_MEM = $0E00 ; Memory location +MOUSE_SPR_MASK = $01 .shl MOUSE_SPR ; Positive mask +MOUSE_SPR_NMASK = .lobyte(.bitnot MOUSE_SPR_MASK) ; Negative mask +VIC_SPR_X = (VIC_SPR0_X + 2*MOUSE_SPR) ; Sprite X register +VIC_SPR_Y = (VIC_SPR0_Y + 2*MOUSE_SPR) ; Sprite Y register ; -------------------------------------------------------------------------- ; Initialize the mouse sprite. diff --git a/libsrc/c64/mcbdefault.s b/libsrc/c64/mcbdefault.s index dd2f7cee7..79a8d93e5 100644 --- a/libsrc/c64/mcbdefault.s +++ b/libsrc/c64/mcbdefault.s @@ -21,11 +21,11 @@ ; Sprite definitions. The first value can be changed to adjust the number ; of the sprite used for the mouse. All others depend on this value. -MOUSE_SPR = 0 ; Sprite used for the mouse -MOUSE_SPR_MASK = $01 .shl MOUSE_SPR ; Positive mask -MOUSE_SPR_NMASK = .lobyte(.not MOUSE_SPR_MASK) ; Negative mask -VIC_SPR_X = (VIC_SPR0_X + 2*MOUSE_SPR) ; Sprite X register -VIC_SPR_Y = (VIC_SPR0_Y + 2*MOUSE_SPR) ; Sprite Y register +MOUSE_SPR = 0 ; Sprite used for the mouse +MOUSE_SPR_MASK = $01 .shl MOUSE_SPR ; Positive mask +MOUSE_SPR_NMASK = .lobyte(.bitnot MOUSE_SPR_MASK) ; Negative mask +VIC_SPR_X = (VIC_SPR0_X + 2*MOUSE_SPR) ; Sprite X register +VIC_SPR_Y = (VIC_SPR0_Y + 2*MOUSE_SPR) ; Sprite Y register ; -------------------------------------------------------------------------- ; Initialize the mouse sprite. diff --git a/libsrc/cbm510/mcbdefault.s b/libsrc/cbm510/mcbdefault.s index 700dcebb1..53eb804c0 100644 --- a/libsrc/cbm510/mcbdefault.s +++ b/libsrc/cbm510/mcbdefault.s @@ -21,12 +21,12 @@ ; Sprite definitions. The first value can be changed to adjust the number ; of the sprite used for the mouse. All others depend on that value. -MOUSE_SPR = 0 ; Sprite used for the mouse -MOUSE_SPR_MEM = $F400 ; Memory location -MOUSE_SPR_MASK = $01 .shl MOUSE_SPR ; Positive mask -MOUSE_SPR_NMASK = .lobyte(.not MOUSE_SPR_MASK) ; Negative mask -VIC_SPR_X = (VIC_SPR0_X + 2*MOUSE_SPR) ; Sprite X register -VIC_SPR_Y = (VIC_SPR0_Y + 2*MOUSE_SPR) ; Sprite Y register +MOUSE_SPR = 0 ; Sprite used for the mouse +MOUSE_SPR_MEM = $F400 ; Memory location +MOUSE_SPR_MASK = $01 .shl MOUSE_SPR ; Positive mask +MOUSE_SPR_NMASK = .lobyte(.bitnot MOUSE_SPR_MASK) ; Negative mask +VIC_SPR_X = (VIC_SPR0_X + 2*MOUSE_SPR) ; Sprite X register +VIC_SPR_Y = (VIC_SPR0_Y + 2*MOUSE_SPR) ; Sprite Y register ; -------------------------------------------------------------------------- ; Initialize the mouse sprite. From 9538ca29b214ac2881adf2cb5a43b1c95467e062 Mon Sep 17 00:00:00 2001 From: Polluks <polluks@sdf.lonestar.org> Date: Fri, 20 Nov 2020 00:54:15 +0100 Subject: [PATCH 0634/2710] Unified #1345 --- cfg/supervision-128k.cfg | 2 +- cfg/supervision-16k.cfg | 2 +- cfg/supervision-64k.cfg | 2 +- cfg/supervision.cfg | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cfg/supervision-128k.cfg b/cfg/supervision-128k.cfg index a03ab0e1b..3d7a9efd0 100644 --- a/cfg/supervision-128k.cfg +++ b/cfg/supervision-128k.cfg @@ -33,5 +33,5 @@ SEGMENTS { ZEROPAGE: load = RAM, type = bss, define = yes; DATA: load = RAM, type = bss, define = yes, offset = $0200; BSS: load = RAM, type = bss, define = yes; - VECTOR: load = ROM, type = ro, offset = $3FFA; + VECTORS: load = ROM, type = ro, start = $3FFA; } diff --git a/cfg/supervision-16k.cfg b/cfg/supervision-16k.cfg index e0b54be23..4a431621f 100644 --- a/cfg/supervision-16k.cfg +++ b/cfg/supervision-16k.cfg @@ -21,7 +21,7 @@ SEGMENTS { RODATA: load = ROM, type = ro, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes; FFF0: load = ROM, type = ro, offset = $3FF0; - VECTOR: load = ROM, type = ro, offset = $3FFA; + VECTORS: load = ROM, type = ro, start = $3FFA; BSS: load = RAM, type = bss, define = yes; } FEATURES { diff --git a/cfg/supervision-64k.cfg b/cfg/supervision-64k.cfg index 9d5f15e45..e0cb68a6f 100644 --- a/cfg/supervision-64k.cfg +++ b/cfg/supervision-64k.cfg @@ -26,5 +26,5 @@ SEGMENTS { ZEROPAGE: load = RAM, type = bss, define = yes; DATA: load = RAM, type = bss, define = yes, offset = $0200; BSS: load = RAM, type = bss, define = yes; - VECTOR: load = ROM, type = ro, offset = $3FFA; + VECTORS: load = ROM, type = ro, start = $3FFA; } diff --git a/cfg/supervision.cfg b/cfg/supervision.cfg index d9f189f2b..4ec3e49c7 100644 --- a/cfg/supervision.cfg +++ b/cfg/supervision.cfg @@ -20,7 +20,7 @@ SEGMENTS { RODATA: load = ROM, type = ro, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes; FFF0: load = ROM, type = ro, offset = $7FF0; - VECTOR: load = ROM, type = ro, offset = $7FFA; + VECTORS: load = ROM, type = ro, start = $7FFA; BSS: load = RAM, type = bss, define = yes; } FEATURES { From a538188d90239235600e76ceb62bd55343a114d0 Mon Sep 17 00:00:00 2001 From: Polluks <polluks@sdf.lonestar.org> Date: Thu, 26 Nov 2020 12:48:58 +0100 Subject: [PATCH 0635/2710] Fixed some config mistakes --- cfg/supervision-128k.cfg | 6 +++--- cfg/supervision-16k.cfg | 2 +- cfg/supervision-64k.cfg | 6 +++--- cfg/supervision.cfg | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cfg/supervision-128k.cfg b/cfg/supervision-128k.cfg index 3d7a9efd0..535e93c1d 100644 --- a/cfg/supervision-128k.cfg +++ b/cfg/supervision-128k.cfg @@ -30,8 +30,8 @@ SEGMENTS { BANK5: load = BANKROM5, type = ro; BANK6: load = BANKROM6, type = ro; BANK7: load = BANKROM7, type = ro; - ZEROPAGE: load = RAM, type = bss, define = yes; - DATA: load = RAM, type = bss, define = yes, offset = $0200; + ZEROPAGE: load = RAM, type = zp, define = yes; + DATA: load = RAM, type = rw, define = yes, offset = $0200; BSS: load = RAM, type = bss, define = yes; - VECTORS: load = ROM, type = ro, start = $3FFA; + VECTORS: load = ROM, type = ro, start = $FFFA; } diff --git a/cfg/supervision-16k.cfg b/cfg/supervision-16k.cfg index 4a431621f..0a9bdf0f9 100644 --- a/cfg/supervision-16k.cfg +++ b/cfg/supervision-16k.cfg @@ -21,7 +21,7 @@ SEGMENTS { RODATA: load = ROM, type = ro, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes; FFF0: load = ROM, type = ro, offset = $3FF0; - VECTORS: load = ROM, type = ro, start = $3FFA; + VECTORS: load = ROM, type = ro, start = $FFFA; BSS: load = RAM, type = bss, define = yes; } FEATURES { diff --git a/cfg/supervision-64k.cfg b/cfg/supervision-64k.cfg index e0cb68a6f..404ece6fc 100644 --- a/cfg/supervision-64k.cfg +++ b/cfg/supervision-64k.cfg @@ -23,8 +23,8 @@ SEGMENTS { BANK1: load = BANKROM1, type = ro; BANK2: load = BANKROM2, type = ro; BANK3: load = BANKROM3, type = ro; - ZEROPAGE: load = RAM, type = bss, define = yes; - DATA: load = RAM, type = bss, define = yes, offset = $0200; + ZEROPAGE: load = RAM, type = zp, define = yes; + DATA: load = RAM, type = rw, define = yes, offset = $0200; BSS: load = RAM, type = bss, define = yes; - VECTORS: load = ROM, type = ro, start = $3FFA; + VECTORS: load = ROM, type = ro, start = $FFFA; } diff --git a/cfg/supervision.cfg b/cfg/supervision.cfg index 4ec3e49c7..1a745234f 100644 --- a/cfg/supervision.cfg +++ b/cfg/supervision.cfg @@ -20,7 +20,7 @@ SEGMENTS { RODATA: load = ROM, type = ro, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes; FFF0: load = ROM, type = ro, offset = $7FF0; - VECTORS: load = ROM, type = ro, start = $7FFA; + VECTORS: load = ROM, type = ro, start = $FFFA; BSS: load = RAM, type = bss, define = yes; } FEATURES { From c663f64542d49cd5000aa01c41cc151b442f065a Mon Sep 17 00:00:00 2001 From: Polluks <polluks@sdf.lonestar.org> Date: Fri, 27 Nov 2020 15:05:07 +0100 Subject: [PATCH 0636/2710] Added features; changed FFF0 segments --- cfg/supervision-128k.cfg | 17 ++++++++++++++++- cfg/supervision-16k.cfg | 2 +- cfg/supervision-64k.cfg | 15 +++++++++++++++ cfg/supervision.cfg | 2 +- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/cfg/supervision-128k.cfg b/cfg/supervision-128k.cfg index 535e93c1d..c90367aa1 100644 --- a/cfg/supervision-128k.cfg +++ b/cfg/supervision-128k.cfg @@ -1,4 +1,4 @@ -# supervision 1284kbyte cartridge with bankswitching +# supervision 128kbyte cartridge with bankswitching # for assembler # ld65 config file @@ -35,3 +35,18 @@ SEGMENTS { BSS: load = RAM, type = bss, define = yes; VECTORS: load = ROM, type = ro, start = $FFFA; } +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/cfg/supervision-16k.cfg b/cfg/supervision-16k.cfg index 0a9bdf0f9..dc6130b33 100644 --- a/cfg/supervision-16k.cfg +++ b/cfg/supervision-16k.cfg @@ -20,7 +20,7 @@ SEGMENTS { CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes; - FFF0: load = ROM, type = ro, offset = $3FF0; + FFF0: load = ROM, type = ro, start = $FFF0; VECTORS: load = ROM, type = ro, start = $FFFA; BSS: load = RAM, type = bss, define = yes; } diff --git a/cfg/supervision-64k.cfg b/cfg/supervision-64k.cfg index 404ece6fc..d252c5d25 100644 --- a/cfg/supervision-64k.cfg +++ b/cfg/supervision-64k.cfg @@ -28,3 +28,18 @@ SEGMENTS { BSS: load = RAM, type = bss, define = yes; VECTORS: load = ROM, type = ro, start = $FFFA; } +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/cfg/supervision.cfg b/cfg/supervision.cfg index 1a745234f..1177660b8 100644 --- a/cfg/supervision.cfg +++ b/cfg/supervision.cfg @@ -19,7 +19,7 @@ SEGMENTS { CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes; - FFF0: load = ROM, type = ro, offset = $7FF0; + FFF0: load = ROM, type = ro, start = $FFF0; VECTORS: load = ROM, type = ro, start = $FFFA; BSS: load = RAM, type = bss, define = yes; } From 2646c06f61b46ed142bbefc723acb8c2113a23f9 Mon Sep 17 00:00:00 2001 From: Tim Gates <tim.gates@iress.com> Date: Sun, 29 Nov 2020 18:23:52 +1100 Subject: [PATCH 0637/2710] docs: fix simple typo, paramater -> parameter There is a small typo in src/cc65/pragma.c. Should read `parameter` rather than `paramater`. --- src/cc65/pragma.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index cf463a832..1ea86545d 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -677,7 +677,7 @@ static void WarnPragma (StrBuf* B) static void FlagPragma (StrBuf* B, IntStack* Stack) -/* Handle a pragma that expects a boolean paramater */ +/* Handle a pragma that expects a boolean parameter */ { StrBuf Ident = AUTO_STRBUF_INITIALIZER; long Val; @@ -727,7 +727,7 @@ ExitPoint: static void IntPragma (StrBuf* B, IntStack* Stack, long Low, long High) -/* Handle a pragma that expects an int paramater */ +/* Handle a pragma that expects an int parameter */ { long Val; int Push; From 5fa7b90e051d126153fc6f9b8f723286f70a1784 Mon Sep 17 00:00:00 2001 From: Polluks <polluks@sdf.lonestar.org> Date: Sun, 29 Nov 2020 17:10:34 +0100 Subject: [PATCH 0638/2710] crt0 clean-up --- libsrc/atari5200/crt0.s | 1 - libsrc/c16/crt0.s | 1 - libsrc/c64/crt0.s | 1 - libsrc/pet/crt0.s | 1 - libsrc/plus4/crt0.s | 2 -- libsrc/supervision/crt0.s | 2 -- libsrc/telestrat/crt0.s | 1 - libsrc/vic20/crt0.s | 1 - 8 files changed, 10 deletions(-) diff --git a/libsrc/atari5200/crt0.s b/libsrc/atari5200/crt0.s index ee3d0de4f..9538d3bb4 100644 --- a/libsrc/atari5200/crt0.s +++ b/libsrc/atari5200/crt0.s @@ -13,7 +13,6 @@ .import zerobss, copydata .include "zeropage.inc" - .include "atari5200.inc" start: diff --git a/libsrc/c16/crt0.s b/libsrc/c16/crt0.s index bee81a113..1df1e5c62 100644 --- a/libsrc/c16/crt0.s +++ b/libsrc/c16/crt0.s @@ -13,7 +13,6 @@ .importzp ST .include "zeropage.inc" - .include "plus4.inc" ; ------------------------------------------------------------------------ ; Startup code diff --git a/libsrc/c64/crt0.s b/libsrc/c64/crt0.s index 7bd294ca7..4e5c7c9d4 100644 --- a/libsrc/c64/crt0.s +++ b/libsrc/c64/crt0.s @@ -13,7 +13,6 @@ .importzp ST .include "zeropage.inc" - .include "c64.inc" ; ------------------------------------------------------------------------ diff --git a/libsrc/pet/crt0.s b/libsrc/pet/crt0.s index 520a147f7..e56a7eca4 100644 --- a/libsrc/pet/crt0.s +++ b/libsrc/pet/crt0.s @@ -12,7 +12,6 @@ .include "zeropage.inc" .include "pet.inc" - .include "../cbm/cbm.inc" ; ------------------------------------------------------------------------ ; Startup code diff --git a/libsrc/plus4/crt0.s b/libsrc/plus4/crt0.s index 2262b4c42..6b44a2b7e 100644 --- a/libsrc/plus4/crt0.s +++ b/libsrc/plus4/crt0.s @@ -198,5 +198,3 @@ irqcount: .byte 0 .segment "INIT" zpsave: .res zpspace - - diff --git a/libsrc/supervision/crt0.s b/libsrc/supervision/crt0.s index ac61c8215..203c681b8 100644 --- a/libsrc/supervision/crt0.s +++ b/libsrc/supervision/crt0.s @@ -78,5 +78,3 @@ not_dma: .word nmi .word reset32kcode .word irq - - diff --git a/libsrc/telestrat/crt0.s b/libsrc/telestrat/crt0.s index 59b1ea642..df75520ce 100644 --- a/libsrc/telestrat/crt0.s +++ b/libsrc/telestrat/crt0.s @@ -12,7 +12,6 @@ .import __MAIN_START__, __MAIN_SIZE__ .include "zeropage.inc" - .include "telestrat.inc" ; ------------------------------------------------------------------------ ; Place the startup code in a special segment. diff --git a/libsrc/vic20/crt0.s b/libsrc/vic20/crt0.s index 68ab3ed12..c5486063b 100644 --- a/libsrc/vic20/crt0.s +++ b/libsrc/vic20/crt0.s @@ -13,7 +13,6 @@ .importzp ST .include "zeropage.inc" - .include "vic20.inc" ; ------------------------------------------------------------------------ ; Startup code From 95635418707e5a6ed270a341c02a743751631099 Mon Sep 17 00:00:00 2001 From: Polluks <polluks@sdf.lonestar.org> Date: Sun, 29 Nov 2020 17:10:34 +0100 Subject: [PATCH 0639/2710] crt0 clean-up --- libsrc/atari5200/crt0.s | 1 - libsrc/c16/crt0.s | 1 - libsrc/c64/crt0.s | 1 - libsrc/pet/crt0.s | 1 - libsrc/plus4/crt0.s | 2 -- libsrc/supervision/crt0.s | 2 -- libsrc/telestrat/crt0.s | 1 - libsrc/vic20/crt0.s | 1 - 8 files changed, 10 deletions(-) diff --git a/libsrc/atari5200/crt0.s b/libsrc/atari5200/crt0.s index ee3d0de4f..9538d3bb4 100644 --- a/libsrc/atari5200/crt0.s +++ b/libsrc/atari5200/crt0.s @@ -13,7 +13,6 @@ .import zerobss, copydata .include "zeropage.inc" - .include "atari5200.inc" start: diff --git a/libsrc/c16/crt0.s b/libsrc/c16/crt0.s index bee81a113..1df1e5c62 100644 --- a/libsrc/c16/crt0.s +++ b/libsrc/c16/crt0.s @@ -13,7 +13,6 @@ .importzp ST .include "zeropage.inc" - .include "plus4.inc" ; ------------------------------------------------------------------------ ; Startup code diff --git a/libsrc/c64/crt0.s b/libsrc/c64/crt0.s index 7bd294ca7..4e5c7c9d4 100644 --- a/libsrc/c64/crt0.s +++ b/libsrc/c64/crt0.s @@ -13,7 +13,6 @@ .importzp ST .include "zeropage.inc" - .include "c64.inc" ; ------------------------------------------------------------------------ diff --git a/libsrc/pet/crt0.s b/libsrc/pet/crt0.s index 520a147f7..e56a7eca4 100644 --- a/libsrc/pet/crt0.s +++ b/libsrc/pet/crt0.s @@ -12,7 +12,6 @@ .include "zeropage.inc" .include "pet.inc" - .include "../cbm/cbm.inc" ; ------------------------------------------------------------------------ ; Startup code diff --git a/libsrc/plus4/crt0.s b/libsrc/plus4/crt0.s index 2262b4c42..6b44a2b7e 100644 --- a/libsrc/plus4/crt0.s +++ b/libsrc/plus4/crt0.s @@ -198,5 +198,3 @@ irqcount: .byte 0 .segment "INIT" zpsave: .res zpspace - - diff --git a/libsrc/supervision/crt0.s b/libsrc/supervision/crt0.s index ac61c8215..203c681b8 100644 --- a/libsrc/supervision/crt0.s +++ b/libsrc/supervision/crt0.s @@ -78,5 +78,3 @@ not_dma: .word nmi .word reset32kcode .word irq - - diff --git a/libsrc/telestrat/crt0.s b/libsrc/telestrat/crt0.s index 59b1ea642..df75520ce 100644 --- a/libsrc/telestrat/crt0.s +++ b/libsrc/telestrat/crt0.s @@ -12,7 +12,6 @@ .import __MAIN_START__, __MAIN_SIZE__ .include "zeropage.inc" - .include "telestrat.inc" ; ------------------------------------------------------------------------ ; Place the startup code in a special segment. diff --git a/libsrc/vic20/crt0.s b/libsrc/vic20/crt0.s index 68ab3ed12..c5486063b 100644 --- a/libsrc/vic20/crt0.s +++ b/libsrc/vic20/crt0.s @@ -13,7 +13,6 @@ .importzp ST .include "zeropage.inc" - .include "vic20.inc" ; ------------------------------------------------------------------------ ; Startup code From b22d8c7441d29657fa772cd4da08b2ca5dd61946 Mon Sep 17 00:00:00 2001 From: Olli Savia <ops@iki.fi> Date: Sat, 28 Nov 2020 13:03:48 +0200 Subject: [PATCH 0640/2710] Added STATUS (0) definition --- asminc/c128.inc | 1 + asminc/c64.inc | 1 + asminc/plus4.inc | 1 + asminc/vic20.inc | 1 + 4 files changed, 4 insertions(+) diff --git a/asminc/c128.inc b/asminc/c128.inc index 2852631f3..749b4168c 100644 --- a/asminc/c128.inc +++ b/asminc/c128.inc @@ -7,6 +7,7 @@ ; Zero page, Commodore stuff TXTPTR := $3D ; Pointer into BASIC source code +STATUS := $90 ; Kernal I/O completion status TIME := $A0 ; 60HZ clock FNAM_LEN := $B7 ; Length of filename SECADR := $B9 ; Secondary address diff --git a/asminc/c64.inc b/asminc/c64.inc index 1d10f673d..2cfc50db4 100644 --- a/asminc/c64.inc +++ b/asminc/c64.inc @@ -9,6 +9,7 @@ VARTAB := $2D ; Pointer to start of BASIC variables MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1) TXTPTR := $7A ; Pointer into BASIC source code +STATUS := $90 ; Kernal I/O completion status TIME := $A0 ; 60 HZ clock FNAM_LEN := $B7 ; Length of filename SECADR := $B9 ; Secondary address diff --git a/asminc/plus4.inc b/asminc/plus4.inc index 774722e93..6c6017a78 100644 --- a/asminc/plus4.inc +++ b/asminc/plus4.inc @@ -10,6 +10,7 @@ TMPPTR := $22 ; Temporary ptr used by BASIC VARTAB := $2D ; Pointer to start of BASIC variables MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1) TXTPTR := $3B ; Pointer into BASIC source code +STATUS := $90 ; Kernal I/O completion status TIME := $A3 ; 60HZ clock FNAM_LEN := $AB ; Length of filename LFN := $AC ; Logical file number diff --git a/asminc/vic20.inc b/asminc/vic20.inc index b82874f56..fa9fdfa8d 100644 --- a/asminc/vic20.inc +++ b/asminc/vic20.inc @@ -9,6 +9,7 @@ VARTAB := $2D ; Pointer to start of BASIC variables MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1) TXTPTR := $7A ; Pointer into BASIC source code +STATUS := $90 ; Kernal I/O completion status TIME := $A0 ; 60HZ clock FNAM_LEN := $B7 ; Length of filename SECADR := $B9 ; Secondary address From 59c58acbe3229a4e860981e97d3d5f3a23adf2bc Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 5 Dec 2020 23:04:48 -0500 Subject: [PATCH 0641/2710] Documented the address size argument of the bss-name, code-name, data-name, and rodata-name pragmas. --- doc/cc65.sgml | 143 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 96 insertions(+), 47 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 115f0a30c..e273ced9c 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -6,8 +6,9 @@ <url url="mailto:gregdk@users.sf.net" name="Greg King"> <abstract> -cc65 is a C compiler for 6502 targets. It supports several 6502 based home -computers like the Commodore and Atari machines, but it is easily retargetable. +cc65 is a C compiler for 6502 targets. It supports several 6502-based home +computers such as the Commodore and Atari machines, but it easily is +retargetable. </abstract> <!-- Table of contents --> @@ -1011,7 +1012,7 @@ The compiler defines several macros at startup: <tag><tt>__TELESTRAT__</tt></tag> This macro is defined if the target is the Telestrat (-t telestrat). - + <tag><tt>__TIME__</tt></tag> This macro expands to the time of translation of the preprocessing @@ -1045,26 +1046,39 @@ parameter with the <tt/#pragma/. The <tt/#pragma/ understands the push and pop parameters as explained above. -<sect1><tt>#pragma bss-name ([push,] <name>)</tt><label id="pragma-bss-name"><p> +<sect1><tt>#pragma bss-name ([push, ]<name>[ ,<addrsize>])</tt><label id="pragma-bss-name"><p> - This pragma changes the name used for the BSS segment (the BSS segment - is used to store variables with static storage duration and no explicit - initializer). The argument is a string enclosed in double quotes. + This pragma changes the name used for the BSS segment (the BSS segment is + used to store variables with static storage duration and no explicit + initializers). The <tt/name/ argument is a string enclosed in quotation + marks. - Note: The default linker configuration file does only map the standard - segments. If you use other segments, you have to create a new linker - configuration file. + <tt/addrsize/ is an optional string that gives a hint about where the + <tt/name/ segment will be put in the CPU's address space. It describes the + width of address numbers that point into that segment. Only words that + are known to ca65 are allowed: + <enum> + <item>"zp", "zeropage", "direct" + <item>"abs", "absolute", "near", "default" + <item>"far" + <item>"long", "dword" + </enum> - Beware: The startup code will zero only the default BSS segment. If you - use another BSS segment, you have to do that yourself, otherwise - variables with static storage duration and no explicit initializer will - not have the value zero. + Note: The default linker configuration file maps only the standard segments. + If you use other segments, you must create a new linker configuration file. - The <tt/#pragma/ understands the push and pop parameters as explained above. + Beware: The start-up code will zero only the default BSS segment. If you use + another BSS segment, then you must do that yourself; otherwise, variables + with static storage duration and no explicit initializer will not have the + value zero. - Example: + The <tt/#pragma/ understands the push and pop parameters, as explained above. + + Examples: <tscreen><verb> - #pragma bss-name ("MyBSS") + #pragma bss-name ("MyBSS") + #pragma bss-name (push, "MyBSS") + #pragma bss-name ("MyBSS", "zp") </verb></tscreen> @@ -1120,21 +1134,33 @@ parameter with the <tt/#pragma/. The <tt/#pragma/ understands the push and pop parameters as explained above. -<sect1><tt>#pragma code-name ([push,] <name>)</tt><label id="pragma-code-name"><p> +<sect1><tt>#pragma code-name ([push, ]<name>[ ,<addrsize>])</tt><label id="pragma-code-name"><p> - This pragma changes the name used for the CODE segment (the CODE segment - is used to store executable code). The argument is a string enclosed in - double quotes. + This pragma changes the name used for the CODE segment (the CODE segment is + used to store executable code). The <tt/name/ argument is a string enclosed + in quotation marks. - Note: The default linker configuration file does only map the standard - segments. If you use other segments, you have to create a new linker - configuration file. + <tt/addrsize/ is an optional string that gives a hint about where the + <tt/name/ segment will be put in the CPU's address space. It describes the + width of address numbers that point into that segment. Only words that + are known to ca65 are allowed: + <enum> + <item>"zp", "zeropage", "direct" + <item>"abs", "absolute", "near", "default" + <item>"far" + <item>"long", "dword" + </enum> - The <tt/#pragma/ understands the push and pop parameters as explained above. + Note: The default linker configuration file maps only the standard segments. + If you use other segments, you must create a new linker configuration file. - Example: + The <tt/#pragma/ understands the push and pop parameters, as explained above. + + Examples: <tscreen><verb> - #pragma code-name ("MyCODE") + #pragma code-name ("MyCODE") + #pragma code-name (push, "MyCODE") + #pragma code-name (push, "MyCODE", "far") </verb></tscreen> @@ -1148,21 +1174,33 @@ parameter with the <tt/#pragma/. The <tt/#pragma/ understands the push and pop parameters as explained above. -<sect1><tt>#pragma data-name ([push,] <name>)</tt><label id="pragma-data-name"><p> +<sect1><tt>#pragma data-name ([push, ]<name>[ ,<addrsize>])</tt><label id="pragma-data-name"><p> - This pragma changes the name used for the DATA segment (the DATA segment - is used to store initialized data). The argument is a string enclosed in - double quotes. + This pragma changes the name used for the DATA segment (the DATA segment is + used to store initialized data). The <tt/name/ argument is a string enclosed + in quotation marks. - Note: The default linker configuration file does only map the standard - segments. If you use other segments, you have to create a new linker - configuration file. + <tt/addrsize/ is an optional string that gives a hint about where the + <tt/name/ segment will be put in the CPU's address space. It describes the + width of address numbers that point into that segment. Only words that + are known to ca65 are allowed: + <enum> + <item>"zp", "zeropage", "direct" + <item>"abs", "absolute", "near", "default" + <item>"far" + <item>"long", "dword" + </enum> - The <tt/#pragma/ understands the push and pop parameters as explained above. + Note: The default linker configuration file maps only the standard segments. + If you use other segments, you must create a new linker configuration file. - Example: + The <tt/#pragma/ understands the push and pop parameters, as explained above. + + Examples: <tscreen><verb> - #pragma data-name ("MyDATA") + #pragma data-name ("MyDATA") + #pragma data-name (push, "MyDATA") + #pragma data-name ("MyDATA", "zeropage") </verb></tscreen> @@ -1224,21 +1262,32 @@ parameter with the <tt/#pragma/. The <tt/#pragma/ understands the push and pop parameters as explained above. -<sect1><tt>#pragma rodata-name ([push,] <name>)</tt><label id="pragma-rodata-name"><p> +<sect1><tt>#pragma rodata-name ([push, ]<name>[ ,<addrsize>])</tt><label id="pragma-rodata-name"><p> - This pragma changes the name used for the RODATA segment (the RODATA - segment is used to store readonly data). The argument is a string - enclosed in double quotes. + This pragma changes the name used for the RODATA segment (the RODATA segment + is used to store read-only data). The <tt/name/ argument is a string enclosed + in quotation marks. - Note: The default linker configuration file does only map the standard - segments. If you use other segments, you have to create a new linker - configuration file. + <tt/addrsize/ is an optional string that gives a hint about where the + <tt/name/ segment will be put in the CPU's address space. It describes the + width of address numbers that point into that segment. Only words that + are known to ca65 are allowed: + <enum> + <item>"zp", "zeropage", "direct" + <item>"abs", "absolute", "near", "default" + <item>"far" + <item>"long", "dword" + </enum> - The <tt/#pragma/ understands the push and pop parameters as explained above. + Note: The default linker configuration file maps only the standard segments. + If you use other segments, you must create a new linker configuration file. - Example: + The <tt/#pragma/ understands the push and pop parameters, as explained above. + + Examples: <tscreen><verb> - #pragma rodata-name ("MyRODATA") + #pragma rodata-name ("MyRODATA") + #pragma rodata-name (push, "MyRODATA") </verb></tscreen> From 0f4cb443b4d34dfceef35c0f9b31abcf69d00c67 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 19 Dec 2020 19:54:12 +0100 Subject: [PATCH 0642/2710] Improved device I/O under DOS 3.3 Certain scenarios (e.g. not running any Applesoft program at all since booting DOS 3.3) can make DOS 3.3 consider cc65 device input (e.g. getchar()) that reads a CR interpreting the command in the keyboard buffer. Setting the hibyte of the Applesoft currently executed line number to some value <> $FF (beside setting the input prompt to some value <> ']') makes DOS 3.3 understand that we're not in intermediate mode and that therefore I/O not preceded with ctrl-d mustn't be fiddled with (see DOS 3.3 routine at $A65E). --- asminc/apple2.inc | 1 + libsrc/apple2/read.s | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/asminc/apple2.inc b/asminc/apple2.inc index 5ebf73164..528c463a1 100644 --- a/asminc/apple2.inc +++ b/asminc/apple2.inc @@ -15,6 +15,7 @@ PROMPT := $33 ; Used by GETLN RNDL := $4E ; Random counter low RNDH := $4F ; Random counter high HIMEM := $73 ; Highest available memory address+1 +CURLIN := $75 ; Current line number being executed ;----------------------------------------------------------------------------- ; Vectors diff --git a/libsrc/apple2/read.s b/libsrc/apple2/read.s index 14c80b7e2..99c189cbd 100644 --- a/libsrc/apple2/read.s +++ b/libsrc/apple2/read.s @@ -19,11 +19,14 @@ .segment "ONCE" initprompt: - ; Set prompt <> ']' to let DOS 3.3 know that we're - ; not in Applesoft immediate mode and thus keep it - ; from scanning our device I/O for DOS commands. + ; Set prompt <> ']' and currently executed Applesoft + ; line number hibyte <> $FF to let DOS 3.3 (at $A65E) + ; know that we're not in Applesoft immediate mode and + ; thus keep it from scanning our device I/O for DOS + ; commands. lda #$80 ; Same value used at $D52C sta PROMPT + sta CURLIN+1 ; Any value <> $FF will do rts .code From b2c1a77bb389bf20b5043f796f2dee496c07fdbd Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 24 Dec 2020 12:27:09 -0500 Subject: [PATCH 0643/2710] Fixed the cc65 code that optimizes 16-bit compares when the high bytes are known to be equal. Only the low bytes are compared. Originally, signed 16-bit compares were optimized into signed 8-bit compares. But, the sign bits are in the high bytes; and, they're equal. Therefore, the low bytes always must be compared as unsigned numbers. Fixes #1348. --- src/cc65/coptstop.c | 78 +++++++++++------------------------- test/misc/Makefile | 8 ---- test/{misc => val}/bug1348.c | 28 ++++++------- 3 files changed, 37 insertions(+), 77 deletions(-) rename test/{misc => val}/bug1348.c (61%) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 59bbe6dc9..77b79281b 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -287,7 +287,7 @@ static unsigned Opt_tosshift (StackOpData* D, const char* Name) /* ldx */ X = NewCodeEntry (OP65_LDX, LoadX->AM, LoadX->Arg, 0, D->OpEntry->LI); InsertEntry (D, X, D->IP++); - + /* Lhs load entries can be removed if not used later */ D->Lhs.X.Flags |= LI_REMOVE; D->Lhs.A.Flags |= LI_REMOVE; @@ -1100,7 +1100,7 @@ static unsigned Opt_tosxorax (StackOpData* D) static unsigned Opt_a_toscmpbool (StackOpData* D, const char* BoolTransformer) -/* Optimize the tos compare sequence with a bool transformer */ +/* Optimize the TOS compare sequence with a bool transformer */ { CodeEntry* X; cmp_t Cond; @@ -1119,9 +1119,8 @@ static unsigned Opt_a_toscmpbool (StackOpData* D, const char* BoolTransformer) D->Rhs.A.Flags |= LI_REMOVE; } else if ((D->Lhs.A.Flags & LI_DIRECT) != 0) { - - /* If the lhs is direct (but not stack relative), encode compares with lhs - ** effectively reverting the order (which doesn't matter for ==). + /* If the lhs is direct (but not stack relative), encode compares with lhs, + ** effectively reversing the order (which doesn't matter for == and !=). */ Cond = FindBoolCmpCond (BoolTransformer); Cond = GetRevertedCond (Cond); @@ -1138,7 +1137,6 @@ static unsigned Opt_a_toscmpbool (StackOpData* D, const char* BoolTransformer) D->Lhs.A.Flags |= LI_REMOVE; } else { - /* We'll do reverse-compare */ Cond = FindBoolCmpCond (BoolTransformer); Cond = GetRevertedCond (Cond); @@ -1162,7 +1160,7 @@ static unsigned Opt_a_toscmpbool (StackOpData* D, const char* BoolTransformer) X = NewCodeEntry (OP65_JSR, AM65_ABS, BoolTransformer, 0, D->OpEntry->LI); InsertEntry (D, X, D->IP++); - /* Remove the push and the call to the tosgeax function */ + /* Remove the push and the call to the TOS function */ RemoveRemainders (D); /* We changed the sequence */ @@ -1179,22 +1177,6 @@ static unsigned Opt_a_toseq (StackOpData* D) -static unsigned Opt_a_tosge (StackOpData* D) -/* Optimize the tosgeax sequence */ -{ - return Opt_a_toscmpbool (D, "boolge"); -} - - - -static unsigned Opt_a_tosgt (StackOpData* D) -/* Optimize the tosgtax sequence */ -{ - return Opt_a_toscmpbool (D, "boolgt"); -} - - - static unsigned Opt_a_tosicmp (StackOpData* D) /* Replace tosicmp with CMP */ { @@ -1236,7 +1218,7 @@ static unsigned Opt_a_tosicmp (StackOpData* D) } InsertEntry (D, X, D->IP++); - /* cmp src,y OR cmp (sp),y*/ + /* cmp src,y OR cmp (sp),y */ if (D->Rhs.A.LoadEntry->OPC == OP65_JSR) { /* opc (sp),y */ X = NewCodeEntry (OP65_CMP, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI); @@ -1268,18 +1250,18 @@ static unsigned Opt_a_tosicmp (StackOpData* D) InsertEntry (D, X, D->IP-3); } else { - /* Just clear A,Z,N and set C */ + /* Just clear A,Z,N; and set C */ + Arg = MakeHexArg (0); if ((RI = GetLastChangedRegInfo (D, &D->Lhs.A)) != 0 && RegValIsKnown (RI->Out.RegA) && (RI->Out.RegA & 0xFF) == 0) { - Arg = MakeHexArg (0); - X = NewCodeEntry (OP65_CMP, AM65_IMM, Arg, 0, D->OpEntry->LI); + + X = NewCodeEntry (OP65_CMP, AM65_IMM, Arg, 0, D->OpEntry->LI); InsertEntry (D, X, D->OpIndex + 1); } else { - Arg = MakeHexArg (0); - X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, D->OpEntry->LI); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, D->OpEntry->LI); InsertEntry (D, X, D->OpIndex + 1); - X = NewCodeEntry (OP65_CMP, AM65_IMM, Arg, 0, D->OpEntry->LI); + X = NewCodeEntry (OP65_CMP, AM65_IMM, Arg, 0, D->OpEntry->LI); InsertEntry (D, X, D->OpIndex + 2); } } @@ -1292,24 +1274,8 @@ static unsigned Opt_a_tosicmp (StackOpData* D) -static unsigned Opt_a_tosle (StackOpData* D) -/* Optimize the tosleax sequence */ -{ - return Opt_a_toscmpbool (D, "boolle"); -} - - - -static unsigned Opt_a_toslt (StackOpData* D) -/* Optimize the tosltax sequence */ -{ - return Opt_a_toscmpbool (D, "boollt"); -} - - - static unsigned Opt_a_tosne (StackOpData* D) -/* Optimize the toseqax sequence */ +/* Optimize the tosneax sequence */ { return Opt_a_toscmpbool (D, "boolne"); } @@ -1317,7 +1283,7 @@ static unsigned Opt_a_tosne (StackOpData* D) static unsigned Opt_a_tosuge (StackOpData* D) -/* Optimize the tosugeax sequence */ +/* Optimize the tosgeax and tosugeax sequences */ { return Opt_a_toscmpbool (D, "booluge"); } @@ -1325,7 +1291,7 @@ static unsigned Opt_a_tosuge (StackOpData* D) static unsigned Opt_a_tosugt (StackOpData* D) -/* Optimize the tosugtax sequence */ +/* Optimize the tosgtax and tosugtax sequences */ { return Opt_a_toscmpbool (D, "boolugt"); } @@ -1333,7 +1299,7 @@ static unsigned Opt_a_tosugt (StackOpData* D) static unsigned Opt_a_tosule (StackOpData* D) -/* Optimize the tosuleax sequence */ +/* Optimize the tosleax and tosuleax sequences */ { return Opt_a_toscmpbool (D, "boolule"); } @@ -1341,7 +1307,7 @@ static unsigned Opt_a_tosule (StackOpData* D) static unsigned Opt_a_tosult (StackOpData* D) -/* Optimize the tosultax sequence */ +/* Optimize the tosltax and tosultax sequences */ { return Opt_a_toscmpbool (D, "boolult"); } @@ -1354,6 +1320,8 @@ static unsigned Opt_a_tosult (StackOpData* D) +/* The first column of these two tables must be sorted in lexical order */ + static const OptFuncDesc FuncTable[] = { { "__bzero", Opt___bzero, REG_NONE, OP_X_ZERO | OP_A_KNOWN }, { "staspidx", Opt_staspidx, REG_NONE, OP_NONE }, @@ -1379,11 +1347,11 @@ static const OptFuncDesc FuncTable[] = { static const OptFuncDesc FuncRegATable[] = { { "toseqax", Opt_a_toseq, REG_NONE, OP_NONE }, - { "tosgeax", Opt_a_tosge, REG_NONE, OP_NONE }, - { "tosgtax", Opt_a_tosgt, REG_NONE, OP_NONE }, + { "tosgeax", Opt_a_tosuge, REG_NONE, OP_NONE }, + { "tosgtax", Opt_a_tosugt, REG_NONE, OP_NONE }, { "tosicmp", Opt_a_tosicmp, REG_NONE, OP_NONE }, - { "tosleax", Opt_a_tosle, REG_NONE, OP_NONE }, - { "tosltax", Opt_a_toslt, REG_NONE, OP_NONE }, + { "tosleax", Opt_a_tosule, REG_NONE, OP_NONE }, + { "tosltax", Opt_a_tosult, REG_NONE, OP_NONE }, { "tosneax", Opt_a_tosne, REG_NONE, OP_NONE }, { "tosugeax", Opt_a_tosuge, REG_NONE, OP_NONE }, { "tosugtax", Opt_a_tosugt, REG_NONE, OP_NONE }, diff --git a/test/misc/Makefile b/test/misc/Makefile index ad31e8554..81a09c693 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -117,14 +117,6 @@ $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) -# this one fails when optimization are enabled -$(WORKDIR)/bug1348.$1.$2.prg: bug1348.c | $(WORKDIR) - $(if $(QUIET),echo misc/bug1348.$1.$2.prg) - $(CC65) -Osr -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) - $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) - $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) - $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) - # these need reference data that can't be generated by a host-compiled program, # in a useful way $(WORKDIR)/limits.$1.$2.prg: limits.c $(ISEQUAL) | $(WORKDIR) diff --git a/test/misc/bug1348.c b/test/val/bug1348.c similarity index 61% rename from test/misc/bug1348.c rename to test/val/bug1348.c index 913849482..c40d9ac84 100644 --- a/test/misc/bug1348.c +++ b/test/val/bug1348.c @@ -1,27 +1,26 @@ - -/* bug#1348, wrongly optimized integer promotion in comparison */ +/* bug #1348, wrongly optimized integer promotion in comparison */ #include <stdio.h> -int notrandtab[] = { +static const int notrandtab[] = { 0xffff, 0x7fff, 0x3fff, 0x1fff, 0x0fff, 0x07ff, 0x03ff, 0x01ff, 0x00ff, 0x007f, 0x003f, 0x001f, 0x000f, 0x0007, 0x0003, 0x0001 }; -unsigned char notrandcount = 0; +static unsigned char notrandcount = 0; -int notrand(void) +static int notrand(void) { return notrandtab[notrandcount & 0x0f]; } -unsigned char n1, n2; -unsigned char i, ii, s; -unsigned char err = 0; +static unsigned char n1, n2; +static unsigned char i, ii, s; +static unsigned char err = 0; -unsigned char cmptab[] = { +static const unsigned char cmptab[] = { 0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x80, 0x40, 0x20, 0x10, @@ -40,13 +39,14 @@ int main(void) if ((notrand() & 0xffu) > s) { n2 = 1; } - printf("%5d>%3d %d(%02x) %d(%02x) %s\n", - notrandtab[notrandcount & 0x0f], s, + printf("%5d > %3d %u(%02x) %u(%02x) %s\n", + notrandtab[i], s, n1, (notrand() & 0xff), n2, (notrand() & 0xffu), - n1 == n2 ? "=" : "!=" - ); - if (n1 != n2) err = 1; + n1 == n2 ? "=" : "!="); + if (n1 != n2) { + err = 1; + } notrandcount++; } } From dfd047ce6a693a2bc32a8778b06bd08c3d39aa0b Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Fri, 13 Nov 2020 09:01:26 +0100 Subject: [PATCH 0644/2710] g_typeadjust: Use CF_CHAR for char args If lhs and rhs are either both signed char or both unsigned char, return flags for that type instead of (unsigned) int. The flags are used only for codegen. Currently, this does nothing, since codegen treats chars as ints unless CF_FORCECHAR is set, but it allows more efficient char x char -> int codegen to be added in the future. --- src/cc65/codegen.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index f56abcd95..a58484cf1 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -1433,17 +1433,20 @@ unsigned g_typeadjust (unsigned lhs, unsigned rhs) /* Note that this logic is largely duplicated by ArithmeticConvert. */ - /* Before we apply the integral promotions, we check if both types are unsigned char. - ** If so, we return unsigned int, rather than int, which would be returned by the standard - ** rules. This is only a performance optimization and does not affect correctness, as - ** the flags are only used for code generation, and not to determine types of other - ** expressions containing this one. All unsigned char bit-patterns are valid as both int - ** and unsigned int and represent the same value, so either signed or unsigned int operations - ** can be used. This special case part is not duplicated by ArithmeticConvert. + /* Before we apply the integral promotions, we check if both types are the same character type. + ** If so, we return that type, rather than int, which would be returned by the standard + ** rules. This is only a performance optimization allowing the use of unsigned and/or char + ** operations; it does not affect correctness, as the flags are only used for code generation, + ** and not to determine types of other expressions containing this one. For codgen, CF_CHAR + ** means the operands are char and the result is int (unless CF_FORCECHAR is also set, in + ** which case the result is char). This special case part is not duplicated by + ** ArithmeticConvert. */ - if ((lhs & CF_TYPEMASK) == CF_CHAR && (lhs & CF_UNSIGNED) && - (rhs & CF_TYPEMASK) == CF_CHAR && (rhs & CF_UNSIGNED)) { - return const_flag | CF_UNSIGNED | CF_INT; + if ((lhs & CF_TYPEMASK) == CF_CHAR && (rhs & CF_TYPEMASK) == CF_CHAR && + (lhs & CF_UNSIGNED) == (rhs & CF_UNSIGNED)) { + /* Signedness flags are the same, so just use one of them. */ + const unsigned unsigned_flag = lhs & CF_UNSIGNED; + return const_flag | unsigned_flag | CF_CHAR; } /* Apply integral promotions for types char/short. */ From 1c72da490479b6876557c3cf75577e7ed55f5e15 Mon Sep 17 00:00:00 2001 From: baktrasf <zylon@post.cz> Date: Mon, 21 Dec 2020 21:31:53 +0100 Subject: [PATCH 0645/2710] Add operating system symbols for the Atari 5200 target --- include/_atari5200os.h | 80 ++++++++++++++++++++++++++++++++++++++++++ include/atari5200.h | 4 +++ 2 files changed, 84 insertions(+) create mode 100644 include/_atari5200os.h diff --git a/include/_atari5200os.h b/include/_atari5200os.h new file mode 100644 index 000000000..77ccf14ed --- /dev/null +++ b/include/_atari5200os.h @@ -0,0 +1,80 @@ +/*****************************************************************************/ +/* */ +/* _atari5200os.h */ +/* */ +/* Internal include file, do not use directly */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + +#ifndef __ATARI5200OS_H +#define __ATARI5200OS_H + + +struct __os { + + /*Page zero*/ + unsigned char pokmsk; // = $00 System mask for POKEY IRQ enable + unsigned char rtclok[2]; // = $01,$02 Real time clock + unsigned char critic; // = $03 Critical section flag + unsigned char atract; // = $04 Attract mode counter + + union { + struct { + unsigned char sdlstl; // = $05 Save display list LO + unsigned char sdlsth; // = $06 Save display list HI + }; + void* sdlst; // = $05,$06 Display list shadow + }; + + unsigned char sdmctl; // = $07 DMACTL shadow + unsigned char pcolr0; // = $08 PM color 0 + unsigned char pcolr1; // = $09 PM color 1 + unsigned char pcolr2; // = $0A PM color 2 + unsigned char pcolr3; // = $0B PM color 3 + unsigned char color0; // = $0C PF Color 0 + unsigned char color1; // = $0D PF Color 1 + unsigned char color2; // = $0E PF Color 2 + unsigned char color3; // = $0F PF Color 3 + unsigned char color4; // = $10 PF Color 4 + unsigned char __filler[0xEF]; // = $11-$FF Filler + + /*Stack*/ + unsigned char stack[0x100]; // = $100-$1FF Stack + + /*Page 2 OS variables*/ + void (*vinter)(void); // = $200 Immediate IRQ vector + void (*vvblki)(void); // = $202 Immediate VBI vector + void (*vvblkd)(void); // = $204 Deferred VBI vector + void (*vdslst)(void); // = $206 DLI vector + void (*vkeybd)(void); // = $208 Keyboard IRQ vector + void (*vkeypd)(void); // = $20A Keypad continue vector + void (*vbrkky)(void); // = $20C Break key interrupt vector + void (*vbreak)(void); // = $20E Break instruction interrupt vector + void (*vserin)(void); // = $210 Serial input ready vector + void (*vseror)(void); // = $212 Serial output data needed vector + void (*vseroc)(void); // = $214 Serial output completed vector + void (*vtimr1)(void); // = $216 POKEY timer 1 IRQ vector + void (*vtimr2)(void); // = $218 POKEY timer 2 IRQ vector + void (*vtimr4)(void); // = $21A POKEY timer 4 IRQ vector + +}; + +#endif \ No newline at end of file diff --git a/include/atari5200.h b/include/atari5200.h index a18360c61..ff176c15b 100644 --- a/include/atari5200.h +++ b/include/atari5200.h @@ -65,6 +65,10 @@ extern void atr5200std_joy[]; /* referred to by joy_static_stddrv[] */ #define AT_NTSC 0 #define AT_PAL 1 +/* Define variables used by the OS*/ +#include <_atari5200os.h> +#define OS (*(struct __os*)0x0000) + /* define hardware */ #include <_gtia.h> #define GTIA_READ (*(struct __gtia_read*)0xC000) From 2e9bada1f20b645ea94343adaf03d85da15a1d45 Mon Sep 17 00:00:00 2001 From: baktrasf <zylon@post.cz> Date: Wed, 23 Dec 2020 23:35:09 +0100 Subject: [PATCH 0646/2710] Atari 5200 OS header refinements --- doc/atari5200.sgml | 10 ++++++++++ include/_atari5200os.h | 18 +++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/doc/atari5200.sgml b/doc/atari5200.sgml index 032b0ef6c..2ec3d08f0 100644 --- a/doc/atari5200.sgml +++ b/doc/atari5200.sgml @@ -73,7 +73,17 @@ Special locations: Programs containing Atari 5200 specific code may use the <tt/atari5200.h/ header file. +This also includes access to operating system locations (e.g. hardware shadow registers) by a structure called +"<tt/OS/". +The names are the usual ones you can find in system reference manuals. Example: +<tscreen><verb> +... + OS.sdmctl = 0x00; // screen off + OS.color4 = 14; // white frame +... tics = OS.rtclok[1] // get ticks +</verb></tscreen> + <sect1>Atari 5200 specific functions<p> <itemize> diff --git a/include/_atari5200os.h b/include/_atari5200os.h index 77ccf14ed..db0f7f0c9 100644 --- a/include/_atari5200os.h +++ b/include/_atari5200os.h @@ -49,12 +49,12 @@ struct __os { unsigned char pcolr1; // = $09 PM color 1 unsigned char pcolr2; // = $0A PM color 2 unsigned char pcolr3; // = $0B PM color 3 - unsigned char color0; // = $0C PF Color 0 - unsigned char color1; // = $0D PF Color 1 - unsigned char color2; // = $0E PF Color 2 - unsigned char color3; // = $0F PF Color 3 - unsigned char color4; // = $10 PF Color 4 - unsigned char __filler[0xEF]; // = $11-$FF Filler + unsigned char color0; // = $0C PF color 0 + unsigned char color1; // = $0D PF color 1 + unsigned char color2; // = $0E PF color 2 + unsigned char color3; // = $0F PF color 3 + unsigned char color4; // = $10 PF color 4 + unsigned char _free_1[0xEF]; // = $11-$FF User space /*Stack*/ unsigned char stack[0x100]; // = $100-$1FF Stack @@ -65,9 +65,9 @@ struct __os { void (*vvblkd)(void); // = $204 Deferred VBI vector void (*vdslst)(void); // = $206 DLI vector void (*vkeybd)(void); // = $208 Keyboard IRQ vector - void (*vkeypd)(void); // = $20A Keypad continue vector + void (*vkeypd)(void); // = $20A Keyboard continuation vector void (*vbrkky)(void); // = $20C Break key interrupt vector - void (*vbreak)(void); // = $20E Break instruction interrupt vector + void (*vbreak)(void); // = $20E BRK instruction interrupt vector void (*vserin)(void); // = $210 Serial input ready vector void (*vseror)(void); // = $212 Serial output data needed vector void (*vseroc)(void); // = $214 Serial output completed vector @@ -77,4 +77,4 @@ struct __os { }; -#endif \ No newline at end of file +#endif From d67b955e528d032d287b1bdec450643b0d5a8a6c Mon Sep 17 00:00:00 2001 From: michael <zylon@post.cz> Date: Wed, 23 Dec 2020 23:50:10 +0100 Subject: [PATCH 0647/2710] Fixed example of the OS struct usage for Atari 5200 --- doc/atari5200.sgml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/atari5200.sgml b/doc/atari5200.sgml index 2ec3d08f0..aff212b15 100644 --- a/doc/atari5200.sgml +++ b/doc/atari5200.sgml @@ -81,7 +81,8 @@ The names are the usual ones you can find in system reference manuals. Example: ... OS.sdmctl = 0x00; // screen off OS.color4 = 14; // white frame -... tics = OS.rtclok[1] // get ticks + tics = OS.rtclok[1] // get ticks +... </verb></tscreen> <sect1>Atari 5200 specific functions<p> From ef258bdc1913b2bc97011e64affb7925b80c1e5a Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Fri, 25 Dec 2020 07:16:26 +0100 Subject: [PATCH 0648/2710] remove TABs which again slipped in.... --- src/cc65/expr.h | 8 +- test/val/binlit.c | 1044 ++++++++++++++++++++++---------------------- test/val/bug1071.c | 40 +- test/val/rand.c | 134 +++--- 4 files changed, 613 insertions(+), 613 deletions(-) diff --git a/src/cc65/expr.h b/src/cc65/expr.h index d0a9988af..71dbe8e0d 100644 --- a/src/cc65/expr.h +++ b/src/cc65/expr.h @@ -23,10 +23,10 @@ -#define SQP_KEEP_NONE 0x00 -#define SQP_KEEP_TEST 0x01U -#define SQP_KEEP_EAX 0x02U -#define SQP_KEEP_EXPR 0x03U /* SQP_KEEP_TEST | SQP_KEEP_EAX */ +#define SQP_KEEP_NONE 0x00 +#define SQP_KEEP_TEST 0x01U +#define SQP_KEEP_EAX 0x02U +#define SQP_KEEP_EXPR 0x03U /* SQP_KEEP_TEST | SQP_KEEP_EAX */ diff --git a/test/val/binlit.c b/test/val/binlit.c index 47e7a196e..f89ca60fc 100644 --- a/test/val/binlit.c +++ b/test/val/binlit.c @@ -3,531 +3,531 @@ static unsigned big[256]; int main() { - unsigned i; + unsigned i; - small[0] = 0b0; - small[1] = 0b1; - small[2] = 0b10; - small[3] = 0b11; - small[4] = 0b100; - small[5] = 0b101; - small[6] = 0b110; - small[7] = 0b000111; - small[8] = 0b1000; - small[9] = 0b1001; - small[10] = 0b0001010; - small[11] = 0b0001011; - small[12] = 0b1100; - small[13] = 0b1101; - small[14] = 0b1110; - small[15] = 0b1111; - small[16] = 0b10000; - small[17] = 0b10001; - small[18] = 0b00010010; - small[19] = 0b00010011; - small[20] = 0b00010100; - small[21] = 0b00010101; - small[22] = 0b10110; - small[23] = 0b10111; - small[24] = 0b11000; - small[25] = 0b11001; - small[26] = 0b11010; - small[27] = 0b11011; - small[28] = 0b11100; - small[29] = 0b11101; - small[30] = 0b11110; - small[31] = 0b11111; - small[32] = 0b00000000100000; - small[33] = 0b00000000100001; - small[34] = 0b100010; - small[35] = 0b100011; - small[36] = 0b100100; - small[37] = 0b100101; - small[38] = 0b100110; - small[39] = 0b100111; - small[40] = 0b101000; - small[41] = 0b101001; - small[42] = 0b101010; - small[43] = 0b101011; - small[44] = 0b101100; - small[45] = 0b101101; - small[46] = 0b101110; - small[47] = 0b101111; - small[48] = 0b110000; - small[49] = 0b110001; - small[50] = 0b110010; - small[51] = 0b110011; - small[52] = 0b110100; - small[53] = 0b110101; - small[54] = 0b110110; - small[55] = 0b110111; - small[56] = 0b111000; - small[57] = 0b111001; - small[58] = 0b111010; - small[59] = 0b111011; - small[60] = 0b111100; - small[61] = 0b111101; - small[62] = 0b111110; - small[63] = 0b111111; - small[64] = 0b1000000; - small[65] = 0b1000001; - small[66] = 0b1000010; - small[67] = 0b1000011; - small[68] = 0b1000100; - small[69] = 0b1000101; - small[70] = 0b1000110; - small[71] = 0b1000111; - small[72] = 0b1001000; - small[73] = 0b1001001; - small[74] = 0b1001010; - small[75] = 0b1001011; - small[76] = 0b1001100; - small[77] = 0b1001101; - small[78] = 0b1001110; - small[79] = 0b1001111; - small[80] = 0b1010000; - small[81] = 0b1010001; - small[82] = 0b1010010; - small[83] = 0b1010011; - small[84] = 0b1010100; - small[85] = 0b1010101; - small[86] = 0b1010110; - small[87] = 0b1010111; - small[88] = 0b1011000; - small[89] = 0b1011001; - small[90] = 0b1011010; - small[91] = 0b1011011; - small[92] = 0b1011100; - small[93] = 0b1011101; - small[94] = 0b1011110; - small[95] = 0b1011111; - small[96] = 0b1100000; - small[97] = 0b1100001; - small[98] = 0b1100010; - small[99] = 0b1100011; - small[100] = 0b1100100; - small[101] = 0b1100101; - small[102] = 0b1100110; - small[103] = 0b1100111; - small[104] = 0b1101000; - small[105] = 0b1101001; - small[106] = 0b1101010; - small[107] = 0b1101011; - small[108] = 0b1101100; - small[109] = 0b1101101; - small[110] = 0b1101110; - small[111] = 0b1101111; - small[112] = 0b1110000; - small[113] = 0b1110001; - small[114] = 0b1110010; - small[115] = 0b1110011; - small[116] = 0b1110100; - small[117] = 0b1110101; - small[118] = 0b1110110; - small[119] = 0b1110111; - small[120] = 0b1111000; - small[121] = 0b1111001; - small[122] = 0b1111010; - small[123] = 0b1111011; - small[124] = 0b1111100; - small[125] = 0b1111101; - small[126] = 0b1111110; - small[127] = 0b1111111; - small[128] = 0b10000000; - small[129] = 0b10000001; - small[130] = 0b10000010; - small[131] = 0b10000011; - small[132] = 0b10000100; - small[133] = 0b10000101; - small[134] = 0b10000110; - small[135] = 0b10000111; - small[136] = 0b10001000; - small[137] = 0b10001001; - small[138] = 0b10001010; - small[139] = 0b10001011; - small[140] = 0b10001100; - small[141] = 0b10001101; - small[142] = 0b10001110; - small[143] = 0b10001111; - small[144] = 0b10010000; - small[145] = 0b10010001; - small[146] = 0b10010010; - small[147] = 0b10010011; - small[148] = 0b10010100; - small[149] = 0b10010101; - small[150] = 0b10010110; - small[151] = 0b10010111; - small[152] = 0b10011000; - small[153] = 0b10011001; - small[154] = 0b10011010; - small[155] = 0b10011011; - small[156] = 0b10011100; - small[157] = 0b10011101; - small[158] = 0b10011110; - small[159] = 0b10011111; - small[160] = 0b10100000; - small[161] = 0b10100001; - small[162] = 0b10100010; - small[163] = 0b10100011; - small[164] = 0b10100100; - small[165] = 0b10100101; - small[166] = 0b10100110; - small[167] = 0b10100111; - small[168] = 0b10101000; - small[169] = 0b10101001; - small[170] = 0b10101010; - small[171] = 0b10101011; - small[172] = 0b10101100; - small[173] = 0b10101101; - small[174] = 0b10101110; - small[175] = 0b10101111; - small[176] = 0b10110000; - small[177] = 0b10110001; - small[178] = 0b10110010; - small[179] = 0b10110011; - small[180] = 0b10110100; - small[181] = 0b10110101; - small[182] = 0b10110110; - small[183] = 0b10110111; - small[184] = 0b10111000; - small[185] = 0b10111001; - small[186] = 0b10111010; - small[187] = 0b10111011; - small[188] = 0b10111100; - small[189] = 0b10111101; - small[190] = 0b10111110; - small[191] = 0b10111111; - small[192] = 0b11000000; - small[193] = 0b11000001; - small[194] = 0b11000010; - small[195] = 0b11000011; - small[196] = 0b11000100; - small[197] = 0b11000101; - small[198] = 0b11000110; - small[199] = 0b11000111; - small[200] = 0b11001000; - small[201] = 0b11001001; - small[202] = 0b11001010; - small[203] = 0b11001011; - small[204] = 0b11001100; - small[205] = 0b11001101; - small[206] = 0b11001110; - small[207] = 0b11001111; - small[208] = 0b11010000; - small[209] = 0b11010001; - small[210] = 0b11010010; - small[211] = 0b11010011; - small[212] = 0b11010100; - small[213] = 0b11010101; - small[214] = 0b11010110; - small[215] = 0b11010111; - small[216] = 0b11011000; - small[217] = 0b11011001; - small[218] = 0b11011010; - small[219] = 0b11011011; - small[220] = 0b11011100; - small[221] = 0b11011101; - small[222] = 0b11011110; - small[223] = 0b11011111; - small[224] = 0b11100000; - small[225] = 0b11100001; - small[226] = 0b11100010; - small[227] = 0b11100011; - small[228] = 0b11100100; - small[229] = 0b11100101; - small[230] = 0b11100110; - small[231] = 0b11100111; - small[232] = 0b11101000; - small[233] = 0b11101001; - small[234] = 0b11101010; - small[235] = 0b11101011; - small[236] = 0b11101100; - small[237] = 0b11101101; - small[238] = 0b11101110; - small[239] = 0b11101111; - small[240] = 0b11110000; - small[241] = 0b11110001; - small[242] = 0b11110010; - small[243] = 0b11110011; - small[244] = 0b11110100; - small[245] = 0b11110101; - small[246] = 0b11110110; - small[247] = 0b11110111; - small[248] = 0b11111000; - small[249] = 0b11111001; - small[250] = 0b11111010; - small[251] = 0b11111011; - small[252] = 0b11111100; - small[253] = 0b11111101; - small[254] = 0b11111110; - small[255] = 0b11111111; + small[0] = 0b0; + small[1] = 0b1; + small[2] = 0b10; + small[3] = 0b11; + small[4] = 0b100; + small[5] = 0b101; + small[6] = 0b110; + small[7] = 0b000111; + small[8] = 0b1000; + small[9] = 0b1001; + small[10] = 0b0001010; + small[11] = 0b0001011; + small[12] = 0b1100; + small[13] = 0b1101; + small[14] = 0b1110; + small[15] = 0b1111; + small[16] = 0b10000; + small[17] = 0b10001; + small[18] = 0b00010010; + small[19] = 0b00010011; + small[20] = 0b00010100; + small[21] = 0b00010101; + small[22] = 0b10110; + small[23] = 0b10111; + small[24] = 0b11000; + small[25] = 0b11001; + small[26] = 0b11010; + small[27] = 0b11011; + small[28] = 0b11100; + small[29] = 0b11101; + small[30] = 0b11110; + small[31] = 0b11111; + small[32] = 0b00000000100000; + small[33] = 0b00000000100001; + small[34] = 0b100010; + small[35] = 0b100011; + small[36] = 0b100100; + small[37] = 0b100101; + small[38] = 0b100110; + small[39] = 0b100111; + small[40] = 0b101000; + small[41] = 0b101001; + small[42] = 0b101010; + small[43] = 0b101011; + small[44] = 0b101100; + small[45] = 0b101101; + small[46] = 0b101110; + small[47] = 0b101111; + small[48] = 0b110000; + small[49] = 0b110001; + small[50] = 0b110010; + small[51] = 0b110011; + small[52] = 0b110100; + small[53] = 0b110101; + small[54] = 0b110110; + small[55] = 0b110111; + small[56] = 0b111000; + small[57] = 0b111001; + small[58] = 0b111010; + small[59] = 0b111011; + small[60] = 0b111100; + small[61] = 0b111101; + small[62] = 0b111110; + small[63] = 0b111111; + small[64] = 0b1000000; + small[65] = 0b1000001; + small[66] = 0b1000010; + small[67] = 0b1000011; + small[68] = 0b1000100; + small[69] = 0b1000101; + small[70] = 0b1000110; + small[71] = 0b1000111; + small[72] = 0b1001000; + small[73] = 0b1001001; + small[74] = 0b1001010; + small[75] = 0b1001011; + small[76] = 0b1001100; + small[77] = 0b1001101; + small[78] = 0b1001110; + small[79] = 0b1001111; + small[80] = 0b1010000; + small[81] = 0b1010001; + small[82] = 0b1010010; + small[83] = 0b1010011; + small[84] = 0b1010100; + small[85] = 0b1010101; + small[86] = 0b1010110; + small[87] = 0b1010111; + small[88] = 0b1011000; + small[89] = 0b1011001; + small[90] = 0b1011010; + small[91] = 0b1011011; + small[92] = 0b1011100; + small[93] = 0b1011101; + small[94] = 0b1011110; + small[95] = 0b1011111; + small[96] = 0b1100000; + small[97] = 0b1100001; + small[98] = 0b1100010; + small[99] = 0b1100011; + small[100] = 0b1100100; + small[101] = 0b1100101; + small[102] = 0b1100110; + small[103] = 0b1100111; + small[104] = 0b1101000; + small[105] = 0b1101001; + small[106] = 0b1101010; + small[107] = 0b1101011; + small[108] = 0b1101100; + small[109] = 0b1101101; + small[110] = 0b1101110; + small[111] = 0b1101111; + small[112] = 0b1110000; + small[113] = 0b1110001; + small[114] = 0b1110010; + small[115] = 0b1110011; + small[116] = 0b1110100; + small[117] = 0b1110101; + small[118] = 0b1110110; + small[119] = 0b1110111; + small[120] = 0b1111000; + small[121] = 0b1111001; + small[122] = 0b1111010; + small[123] = 0b1111011; + small[124] = 0b1111100; + small[125] = 0b1111101; + small[126] = 0b1111110; + small[127] = 0b1111111; + small[128] = 0b10000000; + small[129] = 0b10000001; + small[130] = 0b10000010; + small[131] = 0b10000011; + small[132] = 0b10000100; + small[133] = 0b10000101; + small[134] = 0b10000110; + small[135] = 0b10000111; + small[136] = 0b10001000; + small[137] = 0b10001001; + small[138] = 0b10001010; + small[139] = 0b10001011; + small[140] = 0b10001100; + small[141] = 0b10001101; + small[142] = 0b10001110; + small[143] = 0b10001111; + small[144] = 0b10010000; + small[145] = 0b10010001; + small[146] = 0b10010010; + small[147] = 0b10010011; + small[148] = 0b10010100; + small[149] = 0b10010101; + small[150] = 0b10010110; + small[151] = 0b10010111; + small[152] = 0b10011000; + small[153] = 0b10011001; + small[154] = 0b10011010; + small[155] = 0b10011011; + small[156] = 0b10011100; + small[157] = 0b10011101; + small[158] = 0b10011110; + small[159] = 0b10011111; + small[160] = 0b10100000; + small[161] = 0b10100001; + small[162] = 0b10100010; + small[163] = 0b10100011; + small[164] = 0b10100100; + small[165] = 0b10100101; + small[166] = 0b10100110; + small[167] = 0b10100111; + small[168] = 0b10101000; + small[169] = 0b10101001; + small[170] = 0b10101010; + small[171] = 0b10101011; + small[172] = 0b10101100; + small[173] = 0b10101101; + small[174] = 0b10101110; + small[175] = 0b10101111; + small[176] = 0b10110000; + small[177] = 0b10110001; + small[178] = 0b10110010; + small[179] = 0b10110011; + small[180] = 0b10110100; + small[181] = 0b10110101; + small[182] = 0b10110110; + small[183] = 0b10110111; + small[184] = 0b10111000; + small[185] = 0b10111001; + small[186] = 0b10111010; + small[187] = 0b10111011; + small[188] = 0b10111100; + small[189] = 0b10111101; + small[190] = 0b10111110; + small[191] = 0b10111111; + small[192] = 0b11000000; + small[193] = 0b11000001; + small[194] = 0b11000010; + small[195] = 0b11000011; + small[196] = 0b11000100; + small[197] = 0b11000101; + small[198] = 0b11000110; + small[199] = 0b11000111; + small[200] = 0b11001000; + small[201] = 0b11001001; + small[202] = 0b11001010; + small[203] = 0b11001011; + small[204] = 0b11001100; + small[205] = 0b11001101; + small[206] = 0b11001110; + small[207] = 0b11001111; + small[208] = 0b11010000; + small[209] = 0b11010001; + small[210] = 0b11010010; + small[211] = 0b11010011; + small[212] = 0b11010100; + small[213] = 0b11010101; + small[214] = 0b11010110; + small[215] = 0b11010111; + small[216] = 0b11011000; + small[217] = 0b11011001; + small[218] = 0b11011010; + small[219] = 0b11011011; + small[220] = 0b11011100; + small[221] = 0b11011101; + small[222] = 0b11011110; + small[223] = 0b11011111; + small[224] = 0b11100000; + small[225] = 0b11100001; + small[226] = 0b11100010; + small[227] = 0b11100011; + small[228] = 0b11100100; + small[229] = 0b11100101; + small[230] = 0b11100110; + small[231] = 0b11100111; + small[232] = 0b11101000; + small[233] = 0b11101001; + small[234] = 0b11101010; + small[235] = 0b11101011; + small[236] = 0b11101100; + small[237] = 0b11101101; + small[238] = 0b11101110; + small[239] = 0b11101111; + small[240] = 0b11110000; + small[241] = 0b11110001; + small[242] = 0b11110010; + small[243] = 0b11110011; + small[244] = 0b11110100; + small[245] = 0b11110101; + small[246] = 0b11110110; + small[247] = 0b11110111; + small[248] = 0b11111000; + small[249] = 0b11111001; + small[250] = 0b11111010; + small[251] = 0b11111011; + small[252] = 0b11111100; + small[253] = 0b11111101; + small[254] = 0b11111110; + small[255] = 0b11111111; - for (i = 0; i < 256; i++) { - if (small[i] != i) - return 1; - } + for (i = 0; i < 256; i++) { + if (small[i] != i) + return 1; + } - big[0] = 0b1111111100000000; - big[1] = 0b1111111100000001; - big[2] = 0b1111111100000010; - big[3] = 0b1111111100000011; - big[4] = 0b1111111100000100; - big[5] = 0b1111111100000101; - big[6] = 0b1111111100000110; - big[7] = 0b1111111100000111; - big[8] = 0b1111111100001000; - big[9] = 0b1111111100001001; - big[10] = 0b1111111100001010; - big[11] = 0b1111111100001011; - big[12] = 0b1111111100001100; - big[13] = 0b1111111100001101; - big[14] = 0b1111111100001110; - big[15] = 0b1111111100001111; - big[16] = 0b1111111100010000; - big[17] = 0b1111111100010001; - big[18] = 0b1111111100010010; - big[19] = 0b1111111100010011; - big[20] = 0b1111111100010100; - big[21] = 0b1111111100010101; - big[22] = 0b1111111100010110; - big[23] = 0b1111111100010111; - big[24] = 0b1111111100011000; - big[25] = 0b1111111100011001; - big[26] = 0b1111111100011010; - big[27] = 0b1111111100011011; - big[28] = 0b1111111100011100; - big[29] = 0b1111111100011101; - big[30] = 0b1111111100011110; - big[31] = 0b1111111100011111; - big[32] = 0b1111111100100000; - big[33] = 0b1111111100100001; - big[34] = 0b1111111100100010; - big[35] = 0b1111111100100011; - big[36] = 0b1111111100100100; - big[37] = 0b1111111100100101; - big[38] = 0b1111111100100110; - big[39] = 0b1111111100100111; - big[40] = 0b1111111100101000; - big[41] = 0b1111111100101001; - big[42] = 0b1111111100101010; - big[43] = 0b1111111100101011; - big[44] = 0b1111111100101100; - big[45] = 0b1111111100101101; - big[46] = 0b1111111100101110; - big[47] = 0b1111111100101111; - big[48] = 0b1111111100110000; - big[49] = 0b1111111100110001; - big[50] = 0b1111111100110010; - big[51] = 0b1111111100110011; - big[52] = 0b1111111100110100; - big[53] = 0b1111111100110101; - big[54] = 0b1111111100110110; - big[55] = 0b1111111100110111; - big[56] = 0b1111111100111000; - big[57] = 0b1111111100111001; - big[58] = 0b1111111100111010; - big[59] = 0b1111111100111011; - big[60] = 0b1111111100111100; - big[61] = 0b1111111100111101; - big[62] = 0b1111111100111110; - big[63] = 0b1111111100111111; - big[64] = 0b1111111101000000; - big[65] = 0b1111111101000001; - big[66] = 0b1111111101000010; - big[67] = 0b1111111101000011; - big[68] = 0b1111111101000100; - big[69] = 0b1111111101000101; - big[70] = 0b1111111101000110; - big[71] = 0b1111111101000111; - big[72] = 0b1111111101001000; - big[73] = 0b1111111101001001; - big[74] = 0b1111111101001010; - big[75] = 0b1111111101001011; - big[76] = 0b1111111101001100; - big[77] = 0b1111111101001101; - big[78] = 0b1111111101001110; - big[79] = 0b1111111101001111; - big[80] = 0b1111111101010000; - big[81] = 0b1111111101010001; - big[82] = 0b1111111101010010; - big[83] = 0b1111111101010011; - big[84] = 0b1111111101010100; - big[85] = 0b1111111101010101; - big[86] = 0b1111111101010110; - big[87] = 0b1111111101010111; - big[88] = 0b1111111101011000; - big[89] = 0b1111111101011001; - big[90] = 0b1111111101011010; - big[91] = 0b1111111101011011; - big[92] = 0b1111111101011100; - big[93] = 0b1111111101011101; - big[94] = 0b1111111101011110; - big[95] = 0b1111111101011111; - big[96] = 0b1111111101100000; - big[97] = 0b1111111101100001; - big[98] = 0b1111111101100010; - big[99] = 0b1111111101100011; - big[100] = 0b1111111101100100; - big[101] = 0b1111111101100101; - big[102] = 0b1111111101100110; - big[103] = 0b1111111101100111; - big[104] = 0b1111111101101000; - big[105] = 0b1111111101101001; - big[106] = 0b1111111101101010; - big[107] = 0b1111111101101011; - big[108] = 0b1111111101101100; - big[109] = 0b1111111101101101; - big[110] = 0b1111111101101110; - big[111] = 0b1111111101101111; - big[112] = 0b1111111101110000; - big[113] = 0b1111111101110001; - big[114] = 0b1111111101110010; - big[115] = 0b1111111101110011; - big[116] = 0b1111111101110100; - big[117] = 0b1111111101110101; - big[118] = 0b1111111101110110; - big[119] = 0b1111111101110111; - big[120] = 0b1111111101111000; - big[121] = 0b1111111101111001; - big[122] = 0b1111111101111010; - big[123] = 0b1111111101111011; - big[124] = 0b1111111101111100; - big[125] = 0b1111111101111101; - big[126] = 0b1111111101111110; - big[127] = 0b1111111101111111; - big[128] = 0b1111111110000000; - big[129] = 0b1111111110000001; - big[130] = 0b1111111110000010; - big[131] = 0b1111111110000011; - big[132] = 0b1111111110000100; - big[133] = 0b1111111110000101; - big[134] = 0b1111111110000110; - big[135] = 0b1111111110000111; - big[136] = 0b1111111110001000; - big[137] = 0b1111111110001001; - big[138] = 0b1111111110001010; - big[139] = 0b1111111110001011; - big[140] = 0b1111111110001100; - big[141] = 0b1111111110001101; - big[142] = 0b1111111110001110; - big[143] = 0b1111111110001111; - big[144] = 0b1111111110010000; - big[145] = 0b1111111110010001; - big[146] = 0b1111111110010010; - big[147] = 0b1111111110010011; - big[148] = 0b1111111110010100; - big[149] = 0b1111111110010101; - big[150] = 0b1111111110010110; - big[151] = 0b1111111110010111; - big[152] = 0b1111111110011000; - big[153] = 0b1111111110011001; - big[154] = 0b1111111110011010; - big[155] = 0b1111111110011011; - big[156] = 0b1111111110011100; - big[157] = 0b1111111110011101; - big[158] = 0b1111111110011110; - big[159] = 0b1111111110011111; - big[160] = 0b1111111110100000; - big[161] = 0b1111111110100001; - big[162] = 0b1111111110100010; - big[163] = 0b1111111110100011; - big[164] = 0b1111111110100100; - big[165] = 0b1111111110100101; - big[166] = 0b1111111110100110; - big[167] = 0b1111111110100111; - big[168] = 0b1111111110101000; - big[169] = 0b1111111110101001; - big[170] = 0b1111111110101010; - big[171] = 0b1111111110101011; - big[172] = 0b1111111110101100; - big[173] = 0b1111111110101101; - big[174] = 0b1111111110101110; - big[175] = 0b1111111110101111; - big[176] = 0b1111111110110000; - big[177] = 0b1111111110110001; - big[178] = 0b1111111110110010; - big[179] = 0b1111111110110011; - big[180] = 0b1111111110110100; - big[181] = 0b1111111110110101; - big[182] = 0b1111111110110110; - big[183] = 0b1111111110110111; - big[184] = 0b1111111110111000; - big[185] = 0b1111111110111001; - big[186] = 0b1111111110111010; - big[187] = 0b1111111110111011; - big[188] = 0b1111111110111100; - big[189] = 0b1111111110111101; - big[190] = 0b1111111110111110; - big[191] = 0b1111111110111111; - big[192] = 0b1111111111000000; - big[193] = 0b1111111111000001; - big[194] = 0b1111111111000010; - big[195] = 0b1111111111000011; - big[196] = 0b1111111111000100; - big[197] = 0b1111111111000101; - big[198] = 0b1111111111000110; - big[199] = 0b1111111111000111; - big[200] = 0b1111111111001000; - big[201] = 0b1111111111001001; - big[202] = 0b1111111111001010; - big[203] = 0b1111111111001011; - big[204] = 0b1111111111001100; - big[205] = 0b1111111111001101; - big[206] = 0b1111111111001110; - big[207] = 0b1111111111001111; - big[208] = 0b1111111111010000; - big[209] = 0b1111111111010001; - big[210] = 0b1111111111010010; - big[211] = 0b1111111111010011; - big[212] = 0b1111111111010100; - big[213] = 0b1111111111010101; - big[214] = 0b1111111111010110; - big[215] = 0b1111111111010111; - big[216] = 0b1111111111011000; - big[217] = 0b1111111111011001; - big[218] = 0b1111111111011010; - big[219] = 0b1111111111011011; - big[220] = 0b1111111111011100; - big[221] = 0b1111111111011101; - big[222] = 0b1111111111011110; - big[223] = 0b1111111111011111; - big[224] = 0b1111111111100000; - big[225] = 0b1111111111100001; - big[226] = 0b1111111111100010; - big[227] = 0b1111111111100011; - big[228] = 0b1111111111100100; - big[229] = 0b1111111111100101; - big[230] = 0b1111111111100110; - big[231] = 0b1111111111100111; - big[232] = 0b1111111111101000; - big[233] = 0b1111111111101001; - big[234] = 0b1111111111101010; - big[235] = 0b1111111111101011; - big[236] = 0b1111111111101100; - big[237] = 0b1111111111101101; - big[238] = 0b1111111111101110; - big[239] = 0b1111111111101111; - big[240] = 0b1111111111110000; - big[241] = 0b1111111111110001; - big[242] = 0b1111111111110010; - big[243] = 0b1111111111110011; - big[244] = 0b1111111111110100; - big[245] = 0b1111111111110101; - big[246] = 0b1111111111110110; - big[247] = 0b1111111111110111; - big[248] = 0b1111111111111000; - big[249] = 0b1111111111111001; - big[250] = 0b1111111111111010; - big[251] = 0b1111111111111011; - big[252] = 0b1111111111111100; - big[253] = 0b1111111111111101; - big[254] = 0b1111111111111110; - big[255] = 0b1111111111111111; + big[0] = 0b1111111100000000; + big[1] = 0b1111111100000001; + big[2] = 0b1111111100000010; + big[3] = 0b1111111100000011; + big[4] = 0b1111111100000100; + big[5] = 0b1111111100000101; + big[6] = 0b1111111100000110; + big[7] = 0b1111111100000111; + big[8] = 0b1111111100001000; + big[9] = 0b1111111100001001; + big[10] = 0b1111111100001010; + big[11] = 0b1111111100001011; + big[12] = 0b1111111100001100; + big[13] = 0b1111111100001101; + big[14] = 0b1111111100001110; + big[15] = 0b1111111100001111; + big[16] = 0b1111111100010000; + big[17] = 0b1111111100010001; + big[18] = 0b1111111100010010; + big[19] = 0b1111111100010011; + big[20] = 0b1111111100010100; + big[21] = 0b1111111100010101; + big[22] = 0b1111111100010110; + big[23] = 0b1111111100010111; + big[24] = 0b1111111100011000; + big[25] = 0b1111111100011001; + big[26] = 0b1111111100011010; + big[27] = 0b1111111100011011; + big[28] = 0b1111111100011100; + big[29] = 0b1111111100011101; + big[30] = 0b1111111100011110; + big[31] = 0b1111111100011111; + big[32] = 0b1111111100100000; + big[33] = 0b1111111100100001; + big[34] = 0b1111111100100010; + big[35] = 0b1111111100100011; + big[36] = 0b1111111100100100; + big[37] = 0b1111111100100101; + big[38] = 0b1111111100100110; + big[39] = 0b1111111100100111; + big[40] = 0b1111111100101000; + big[41] = 0b1111111100101001; + big[42] = 0b1111111100101010; + big[43] = 0b1111111100101011; + big[44] = 0b1111111100101100; + big[45] = 0b1111111100101101; + big[46] = 0b1111111100101110; + big[47] = 0b1111111100101111; + big[48] = 0b1111111100110000; + big[49] = 0b1111111100110001; + big[50] = 0b1111111100110010; + big[51] = 0b1111111100110011; + big[52] = 0b1111111100110100; + big[53] = 0b1111111100110101; + big[54] = 0b1111111100110110; + big[55] = 0b1111111100110111; + big[56] = 0b1111111100111000; + big[57] = 0b1111111100111001; + big[58] = 0b1111111100111010; + big[59] = 0b1111111100111011; + big[60] = 0b1111111100111100; + big[61] = 0b1111111100111101; + big[62] = 0b1111111100111110; + big[63] = 0b1111111100111111; + big[64] = 0b1111111101000000; + big[65] = 0b1111111101000001; + big[66] = 0b1111111101000010; + big[67] = 0b1111111101000011; + big[68] = 0b1111111101000100; + big[69] = 0b1111111101000101; + big[70] = 0b1111111101000110; + big[71] = 0b1111111101000111; + big[72] = 0b1111111101001000; + big[73] = 0b1111111101001001; + big[74] = 0b1111111101001010; + big[75] = 0b1111111101001011; + big[76] = 0b1111111101001100; + big[77] = 0b1111111101001101; + big[78] = 0b1111111101001110; + big[79] = 0b1111111101001111; + big[80] = 0b1111111101010000; + big[81] = 0b1111111101010001; + big[82] = 0b1111111101010010; + big[83] = 0b1111111101010011; + big[84] = 0b1111111101010100; + big[85] = 0b1111111101010101; + big[86] = 0b1111111101010110; + big[87] = 0b1111111101010111; + big[88] = 0b1111111101011000; + big[89] = 0b1111111101011001; + big[90] = 0b1111111101011010; + big[91] = 0b1111111101011011; + big[92] = 0b1111111101011100; + big[93] = 0b1111111101011101; + big[94] = 0b1111111101011110; + big[95] = 0b1111111101011111; + big[96] = 0b1111111101100000; + big[97] = 0b1111111101100001; + big[98] = 0b1111111101100010; + big[99] = 0b1111111101100011; + big[100] = 0b1111111101100100; + big[101] = 0b1111111101100101; + big[102] = 0b1111111101100110; + big[103] = 0b1111111101100111; + big[104] = 0b1111111101101000; + big[105] = 0b1111111101101001; + big[106] = 0b1111111101101010; + big[107] = 0b1111111101101011; + big[108] = 0b1111111101101100; + big[109] = 0b1111111101101101; + big[110] = 0b1111111101101110; + big[111] = 0b1111111101101111; + big[112] = 0b1111111101110000; + big[113] = 0b1111111101110001; + big[114] = 0b1111111101110010; + big[115] = 0b1111111101110011; + big[116] = 0b1111111101110100; + big[117] = 0b1111111101110101; + big[118] = 0b1111111101110110; + big[119] = 0b1111111101110111; + big[120] = 0b1111111101111000; + big[121] = 0b1111111101111001; + big[122] = 0b1111111101111010; + big[123] = 0b1111111101111011; + big[124] = 0b1111111101111100; + big[125] = 0b1111111101111101; + big[126] = 0b1111111101111110; + big[127] = 0b1111111101111111; + big[128] = 0b1111111110000000; + big[129] = 0b1111111110000001; + big[130] = 0b1111111110000010; + big[131] = 0b1111111110000011; + big[132] = 0b1111111110000100; + big[133] = 0b1111111110000101; + big[134] = 0b1111111110000110; + big[135] = 0b1111111110000111; + big[136] = 0b1111111110001000; + big[137] = 0b1111111110001001; + big[138] = 0b1111111110001010; + big[139] = 0b1111111110001011; + big[140] = 0b1111111110001100; + big[141] = 0b1111111110001101; + big[142] = 0b1111111110001110; + big[143] = 0b1111111110001111; + big[144] = 0b1111111110010000; + big[145] = 0b1111111110010001; + big[146] = 0b1111111110010010; + big[147] = 0b1111111110010011; + big[148] = 0b1111111110010100; + big[149] = 0b1111111110010101; + big[150] = 0b1111111110010110; + big[151] = 0b1111111110010111; + big[152] = 0b1111111110011000; + big[153] = 0b1111111110011001; + big[154] = 0b1111111110011010; + big[155] = 0b1111111110011011; + big[156] = 0b1111111110011100; + big[157] = 0b1111111110011101; + big[158] = 0b1111111110011110; + big[159] = 0b1111111110011111; + big[160] = 0b1111111110100000; + big[161] = 0b1111111110100001; + big[162] = 0b1111111110100010; + big[163] = 0b1111111110100011; + big[164] = 0b1111111110100100; + big[165] = 0b1111111110100101; + big[166] = 0b1111111110100110; + big[167] = 0b1111111110100111; + big[168] = 0b1111111110101000; + big[169] = 0b1111111110101001; + big[170] = 0b1111111110101010; + big[171] = 0b1111111110101011; + big[172] = 0b1111111110101100; + big[173] = 0b1111111110101101; + big[174] = 0b1111111110101110; + big[175] = 0b1111111110101111; + big[176] = 0b1111111110110000; + big[177] = 0b1111111110110001; + big[178] = 0b1111111110110010; + big[179] = 0b1111111110110011; + big[180] = 0b1111111110110100; + big[181] = 0b1111111110110101; + big[182] = 0b1111111110110110; + big[183] = 0b1111111110110111; + big[184] = 0b1111111110111000; + big[185] = 0b1111111110111001; + big[186] = 0b1111111110111010; + big[187] = 0b1111111110111011; + big[188] = 0b1111111110111100; + big[189] = 0b1111111110111101; + big[190] = 0b1111111110111110; + big[191] = 0b1111111110111111; + big[192] = 0b1111111111000000; + big[193] = 0b1111111111000001; + big[194] = 0b1111111111000010; + big[195] = 0b1111111111000011; + big[196] = 0b1111111111000100; + big[197] = 0b1111111111000101; + big[198] = 0b1111111111000110; + big[199] = 0b1111111111000111; + big[200] = 0b1111111111001000; + big[201] = 0b1111111111001001; + big[202] = 0b1111111111001010; + big[203] = 0b1111111111001011; + big[204] = 0b1111111111001100; + big[205] = 0b1111111111001101; + big[206] = 0b1111111111001110; + big[207] = 0b1111111111001111; + big[208] = 0b1111111111010000; + big[209] = 0b1111111111010001; + big[210] = 0b1111111111010010; + big[211] = 0b1111111111010011; + big[212] = 0b1111111111010100; + big[213] = 0b1111111111010101; + big[214] = 0b1111111111010110; + big[215] = 0b1111111111010111; + big[216] = 0b1111111111011000; + big[217] = 0b1111111111011001; + big[218] = 0b1111111111011010; + big[219] = 0b1111111111011011; + big[220] = 0b1111111111011100; + big[221] = 0b1111111111011101; + big[222] = 0b1111111111011110; + big[223] = 0b1111111111011111; + big[224] = 0b1111111111100000; + big[225] = 0b1111111111100001; + big[226] = 0b1111111111100010; + big[227] = 0b1111111111100011; + big[228] = 0b1111111111100100; + big[229] = 0b1111111111100101; + big[230] = 0b1111111111100110; + big[231] = 0b1111111111100111; + big[232] = 0b1111111111101000; + big[233] = 0b1111111111101001; + big[234] = 0b1111111111101010; + big[235] = 0b1111111111101011; + big[236] = 0b1111111111101100; + big[237] = 0b1111111111101101; + big[238] = 0b1111111111101110; + big[239] = 0b1111111111101111; + big[240] = 0b1111111111110000; + big[241] = 0b1111111111110001; + big[242] = 0b1111111111110010; + big[243] = 0b1111111111110011; + big[244] = 0b1111111111110100; + big[245] = 0b1111111111110101; + big[246] = 0b1111111111110110; + big[247] = 0b1111111111110111; + big[248] = 0b1111111111111000; + big[249] = 0b1111111111111001; + big[250] = 0b1111111111111010; + big[251] = 0b1111111111111011; + big[252] = 0b1111111111111100; + big[253] = 0b1111111111111101; + big[254] = 0b1111111111111110; + big[255] = 0b1111111111111111; - for (i = 0; i < 256; i++) { - if (big[i] != i + 65280U) - return 1; - } + for (i = 0; i < 256; i++) { + if (big[i] != i + 65280U) + return 1; + } - return 0; + return 0; } diff --git a/test/val/bug1071.c b/test/val/bug1071.c index 02b069de0..66e298b25 100644 --- a/test/val/bug1071.c +++ b/test/val/bug1071.c @@ -7,24 +7,24 @@ struct ImageStruct { - uint8_t _imageData; - #if !defined(NO_COLOR) - uint8_t _color; - #endif + uint8_t _imageData; + #if !defined(NO_COLOR) + uint8_t _color; + #endif }; typedef struct ImageStruct Image; struct CharacterStruct { - // character coordinates - uint8_t _x; - uint8_t _y; + // character coordinates + uint8_t _x; + uint8_t _y; - // _status decides whether the character is active - uint8_t _status; + // _status decides whether the character is active + uint8_t _status; - Image* _imagePtr; + Image* _imagePtr; }; typedef struct CharacterStruct Character; @@ -53,20 +53,20 @@ Character bombs[BOMBS_NUMBER]; uint16_t test1(void) { - if((loop<MAX_GHOST_LOOP) && (ghostLevel<MAX_GHOST_LEVEL)) - { - return INITIAL_GHOST_SLOWDOWN-(uint16_t)level*256-ghostLevel*8; - } - return GHOST_MIN_SLOWDOWN; + if((loop<MAX_GHOST_LOOP) && (ghostLevel<MAX_GHOST_LEVEL)) + { + return INITIAL_GHOST_SLOWDOWN-(uint16_t)level*256-ghostLevel*8; + } + return GHOST_MIN_SLOWDOWN; } uint16_t test2(void) { - if((loop<MAX_GHOST_LOOP) && (ghostLevel<MAX_GHOST_LEVEL)) - { - return INITIAL_GHOST_SLOWDOWN-(uint16_t)level*256-ghostLevel*16; - } - return GHOST_MIN_SLOWDOWN; + if((loop<MAX_GHOST_LOOP) && (ghostLevel<MAX_GHOST_LEVEL)) + { + return INITIAL_GHOST_SLOWDOWN-(uint16_t)level*256-ghostLevel*16; + } + return GHOST_MIN_SLOWDOWN; } uint16_t res = 0; diff --git a/test/val/rand.c b/test/val/rand.c index f2f604449..ac2ab0d17 100644 --- a/test/val/rand.c +++ b/test/val/rand.c @@ -28,83 +28,83 @@ static uint32_t seed; int ref_rand() { - uint16_t output; - /* seed follows the LCG sequence * 0x01010101 + 0xB3B3B3B3 */ - seed = seed * 0x01010101UL + 0xB3B3B3B3UL; - /* output uses the top two bytes (reversed) XOR with bottom two bytes */ - { - uint16_t s0 = (seed >> 0) & 0xFF; - uint16_t s1 = (seed >> 8) & 0xFF; - uint16_t s2 = (seed >> 16) & 0xFF; - uint16_t s3 = (seed >> 24) & 0xFF; - uint16_t o0 = s3 ^ s1; - uint16_t o1 = s2 ^ s0; - output = o0 | (o1 << 8); - } - return (int)(output & 0x7FFF); + uint16_t output; + /* seed follows the LCG sequence * 0x01010101 + 0xB3B3B3B3 */ + seed = seed * 0x01010101UL + 0xB3B3B3B3UL; + /* output uses the top two bytes (reversed) XOR with bottom two bytes */ + { + uint16_t s0 = (seed >> 0) & 0xFF; + uint16_t s1 = (seed >> 8) & 0xFF; + uint16_t s2 = (seed >> 16) & 0xFF; + uint16_t s3 = (seed >> 24) & 0xFF; + uint16_t o0 = s3 ^ s1; + uint16_t o1 = s2 ^ s0; + output = o0 | (o1 << 8); + } + return (int)(output & 0x7FFF); } void ref_srand(int ax) { - uint32_t s = (unsigned int)ax; - seed = s | (s << 16); /* low 16 bits is convenient filler for high 16 bits */ - ref_rand(); /* one pre-call "shuffles" the first rand() result so it isn't too predictable */ + uint32_t s = (unsigned int)ax; + seed = s | (s << 16); /* low 16 bits is convenient filler for high 16 bits */ + ref_rand(); /* one pre-call "shuffles" the first rand() result so it isn't too predictable */ } int main(void) { - unsigned int i,j; - int a,b; + unsigned int i,j; + int a,b; - /* test that startup state is equivalent to srand(1) */ - { - //srand(1); // implied - ref_srand(1); - for (j=0; j<SUBTESTS; ++j) - { - a = rand(); - b = ref_rand(); - if (a != b) - { - printf("failed startup seed at test %d. rand()=%d reference=%d\n",j,a,b); - return EXIT_FAILURE; - } - } - } + /* test that startup state is equivalent to srand(1) */ + { + //srand(1); // implied + ref_srand(1); + for (j=0; j<SUBTESTS; ++j) + { + a = rand(); + b = ref_rand(); + if (a != b) + { + printf("failed startup seed at test %d. rand()=%d reference=%d\n",j,a,b); + return EXIT_FAILURE; + } + } + } - /* test every power of 2 seed */ - for (i = 0; i < 16; ++i) - { - srand(1<<i); - ref_srand(1<<i); - for (j=0; j<SUBTESTS; ++j) - { - a = rand(); - b = ref_rand(); - if (a != b) - { - printf("failed seed %d at test %d. rand()=%d reference=%d\n",(1<<i),j,a,b); - return EXIT_FAILURE; - } - } - } + /* test every power of 2 seed */ + for (i = 0; i < 16; ++i) + { + srand(1<<i); + ref_srand(1<<i); + for (j=0; j<SUBTESTS; ++j) + { + a = rand(); + b = ref_rand(); + if (a != b) + { + printf("failed seed %d at test %d. rand()=%d reference=%d\n",(1<<i),j,a,b); + return EXIT_FAILURE; + } + } + } - /* test a sampling of seeds*/ - for (i = 0; i < 32768UL; i += TESTINC) - { - srand(i); - ref_srand(i); - for (j=0; j<SUBTESTS; ++j) - { - a = rand(); - b = ref_rand(); - if (a != b) - { - printf("failed seed %d at test %d. rand()=%d reference=%d\n",(1<<i),j,a,b); - return EXIT_FAILURE; - } - } - } + /* test a sampling of seeds*/ + for (i = 0; i < 32768UL; i += TESTINC) + { + srand(i); + ref_srand(i); + for (j=0; j<SUBTESTS; ++j) + { + a = rand(); + b = ref_rand(); + if (a != b) + { + printf("failed seed %d at test %d. rand()=%d reference=%d\n",(1<<i),j,a,b); + return EXIT_FAILURE; + } + } + } - return EXIT_SUCCESS; + return EXIT_SUCCESS; } From e0c12c90cd7b729d416f6dd76e1f9185a339b088 Mon Sep 17 00:00:00 2001 From: Jesse Rosenstock <jmr@google.com> Date: Sun, 15 Nov 2020 23:03:01 +0100 Subject: [PATCH 0649/2710] g_asr, g_asl: Use ROL/ROR for char shifts by >= 6 Instead of `val` right (left) shifts, we can also do `9 - val` left (right) rotates and a mask. This saves 3 bytes and 8 cycles for `val == 7` and 1 byte and 4 cycles for `val == 6`. --- src/cc65/codegen.c | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index a58484cf1..3ca9d81e6 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -3114,9 +3114,26 @@ void g_asr (unsigned flags, unsigned long val) switch (flags & CF_TYPEMASK) { case CF_CHAR: if (flags & CF_FORCECHAR) { - if ((flags & CF_UNSIGNED) != 0 && val < 8) { - while (val--) { - AddCodeLine ("lsr a"); + val &= 7; + if ((flags & CF_UNSIGNED) != 0) { + /* Instead of `val` right shifts, we can also do `9 - val` left rotates + ** and a mask. This saves 3 bytes and 8 cycles for `val == 7` and + ** 1 byte and 4 cycles for `val == 6`. + */ + if (val < 6) { + while (val--) { + AddCodeLine ("lsr a"); /* 1 byte, 2 cycles */ + } + } else { + unsigned i; + /* The first ROL shifts in garbage and sets carry to the high bit. + ** The garbage is cleaned up by the mask. + */ + for (i = val; i < 9; ++i) { + AddCodeLine ("rol a"); /* 1 byte, 2 cycles */ + } + /* 2 bytes, 2 cycles */ + AddCodeLine ("and #$%02X", 0xFF >> val); } return; } else if (val <= 2) { @@ -3270,9 +3287,21 @@ void g_asl (unsigned flags, unsigned long val) if (flags & CF_CONST) { switch (flags & CF_TYPEMASK) { case CF_CHAR: - if ((flags & CF_FORCECHAR) != 0 && val <= 6) { - while (val--) { - AddCodeLine ("asl a"); + if ((flags & CF_FORCECHAR) != 0) { + val &= 7; + /* Large shifts are faster and smaller with ROR. See g_asr for detailed + ** byte and cycle counts. + */ + if (val < 6) { + while (val--) { + AddCodeLine ("asl a"); + } + } else { + unsigned i; + for (i = val; i < 9; ++i) { + AddCodeLine ("ror a"); + } + AddCodeLine ("and #$%02X", (~0U << val) & 0xFF); } return; } From 39573109500d06b415026af2d07de4b3c8b52a47 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sun, 25 Oct 2020 14:27:26 +0100 Subject: [PATCH 0650/2710] Knock off two bytes from getcwd(), cbm_read() and cbm_write(). --- libsrc/cbm/cbm_read.s | 14 +++++++------- libsrc/cbm/cbm_write.s | 14 +++++++------- libsrc/common/getcwd.s | 16 ++++++++-------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/libsrc/cbm/cbm_read.s b/libsrc/cbm/cbm_read.s index b010966a3..a30983302 100644 --- a/libsrc/cbm/cbm_read.s +++ b/libsrc/cbm/cbm_read.s @@ -45,11 +45,11 @@ _cbm_read: - eor #$FF - sta ptr1 - txa - eor #$FF - sta ptr1+1 ; Save -size-1 + inx + stx ptr1+1 + tax + inx + stx ptr1 ; Save size with each byte incremented. jsr popax sta ptr2 @@ -92,9 +92,9 @@ _cbm_read: bne @L3 inc ptr3+1 ; ++bytesread; -@L3: inc ptr1 +@L3: dec ptr1 bne @L1 - inc ptr1+1 + dec ptr1+1 bne @L1 @L4: jsr CLRCH diff --git a/libsrc/cbm/cbm_write.s b/libsrc/cbm/cbm_write.s index 2d932d04a..a199c1d90 100644 --- a/libsrc/cbm/cbm_write.s +++ b/libsrc/cbm/cbm_write.s @@ -39,11 +39,11 @@ _cbm_write: sta ptr3 stx ptr3+1 ; Save size - eor #$FF - sta ptr1 - txa - eor #$FF - sta ptr1+1 ; Save -size-1 + inx + stx ptr1+1 + tax + inx + stx ptr1 ; Save size with each byte incremented jsr popax sta ptr2 @@ -69,9 +69,9 @@ _cbm_write: @L2: jsr BSOUT ; cbm_k_bsout (A); -@L3: inc ptr1 ; --size; +@L3: dec ptr1 ; --size; bne @L1 - inc ptr1+1 + dec ptr1+1 bne @L1 jsr CLRCH diff --git a/libsrc/common/getcwd.s b/libsrc/common/getcwd.s index 22b6ceded..c0a1c3634 100644 --- a/libsrc/common/getcwd.s +++ b/libsrc/common/getcwd.s @@ -17,22 +17,22 @@ .proc _getcwd -; Remember -size-1 because this simplifies the following loop +; Remember size with each byte incremented because this simplifies the following loop - eor #$FF - sta ptr2 - txa - eor #$FF - sta ptr2+1 + inx + stx ptr2+1 + tax + inx + stx ptr2 jsr popptr1 ; Get buf to ptr1 ; Copy __cwd to the given buffer checking the length ; ldy #$00 is guaranteed by popptr1 -loop: inc ptr2 +loop: dec ptr2 bne @L1 - inc ptr2+1 + dec ptr2+1 beq overflow ; Copy one character, end the loop if the zero terminator is reached. We From 99c0815cdb6b55ee89a1945e58674a5eefbb8126 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Tue, 27 Oct 2020 06:08:04 +0100 Subject: [PATCH 0651/2710] Clear up comments a bit. --- libsrc/cbm/cbm_read.s | 2 +- libsrc/cbm/cbm_write.s | 2 +- libsrc/common/getcwd.s | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/cbm/cbm_read.s b/libsrc/cbm/cbm_read.s index a30983302..29e0e1f19 100644 --- a/libsrc/cbm/cbm_read.s +++ b/libsrc/cbm/cbm_read.s @@ -49,7 +49,7 @@ _cbm_read: stx ptr1+1 tax inx - stx ptr1 ; Save size with each byte incremented. + stx ptr1 ; Save size with both bytes incremented separately. jsr popax sta ptr2 diff --git a/libsrc/cbm/cbm_write.s b/libsrc/cbm/cbm_write.s index a199c1d90..5ac07209c 100644 --- a/libsrc/cbm/cbm_write.s +++ b/libsrc/cbm/cbm_write.s @@ -43,7 +43,7 @@ _cbm_write: stx ptr1+1 tax inx - stx ptr1 ; Save size with each byte incremented + stx ptr1 ; Save size with both bytes incremented separately jsr popax sta ptr2 diff --git a/libsrc/common/getcwd.s b/libsrc/common/getcwd.s index c0a1c3634..4bfc0a5b6 100644 --- a/libsrc/common/getcwd.s +++ b/libsrc/common/getcwd.s @@ -23,7 +23,7 @@ stx ptr2+1 tax inx - stx ptr2 + stx ptr2 ; Save size with each byte incremented separately jsr popptr1 ; Get buf to ptr1 From f59cb9af0660e5401f18fe9e86329b2d0fd6b739 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sun, 1 Nov 2020 22:59:07 +0100 Subject: [PATCH 0652/2710] Use more compact loops. --- libsrc/atmos/read.s | 15 ++++++++------- libsrc/atmos/write.s | 14 +++++++------- libsrc/cbm/read.s | 4 ++-- libsrc/cbm/rwcommon.s | 10 +++++----- libsrc/cbm/write.s | 4 ++-- libsrc/common/memcmp.s | 15 +++++++-------- libsrc/common/strncat.s | 22 +++++++++++----------- libsrc/common/strncpy.s | 18 +++++++++--------- libsrc/common/strnicmp.s | 20 +++++++------------- libsrc/conio/vcprintf.s | 16 ++++++++-------- libsrc/geos-common/drivers/fio_module.s | 15 ++++++++------- libsrc/osic1p/bootstrap.s | 17 +++++++++-------- libsrc/telestrat/write.s | 14 +++++++------- 13 files changed, 90 insertions(+), 94 deletions(-) diff --git a/libsrc/atmos/read.s b/libsrc/atmos/read.s index 83aa8024e..3f22d8d0e 100644 --- a/libsrc/atmos/read.s +++ b/libsrc/atmos/read.s @@ -20,18 +20,19 @@ sta ptr3 stx ptr3+1 ; save count as result - eor #$FF - sta ptr2 - txa - eor #$FF - sta ptr2+1 ; Remember -count-1 + + inx + stx ptr2+1 + tax + inx + stx ptr2 ; save count with each byte incremented separately jsr popptr1 ; get buf jsr popax ; get fd and discard -L1: inc ptr2 +L1: dec ptr2 bnz L2 - inc ptr2+1 + dec ptr2+1 bze L9 ; no more room in buf ; If there are no more characters in BASIC's input buffer, then get a line from diff --git a/libsrc/atmos/write.s b/libsrc/atmos/write.s index 7865b5698..4a68994ec 100644 --- a/libsrc/atmos/write.s +++ b/libsrc/atmos/write.s @@ -17,17 +17,17 @@ sta ptr3 stx ptr3+1 ; save count as result - eor #$FF - sta ptr2 - txa - eor #$FF - sta ptr2+1 ; Remember -count-1 + inx + stx ptr2+1 + tax + inx + stx ptr2 ; save count with each byte incremented separately jsr popptr1 ; get buf jsr popax ; get fd and discard -L1: inc ptr2 +L1: dec ptr2 bne L2 - inc ptr2+1 + dec ptr2+1 beq L9 L2: ldy #0 lda (ptr1),y diff --git a/libsrc/cbm/read.s b/libsrc/cbm/read.s index ee01596aa..fb0bb3171 100644 --- a/libsrc/cbm/read.s +++ b/libsrc/cbm/read.s @@ -106,9 +106,9 @@ ; Decrement the count -@L3: inc ptr2 +@L3: dec ptr2 bne @L0 - inc ptr2+1 + dec ptr2+1 bne @L0 beq done ; Branch always diff --git a/libsrc/cbm/rwcommon.s b/libsrc/cbm/rwcommon.s index a1f92be8c..d13c478b5 100644 --- a/libsrc/cbm/rwcommon.s +++ b/libsrc/cbm/rwcommon.s @@ -21,11 +21,11 @@ .proc rwcommon - eor #$FF - sta ptr2 - txa - eor #$FF - sta ptr2+1 ; Remember -count-1 + inx + stx ptr2+1 + tax + inx + stx ptr2 ; Save count with each byte incremented separately jsr popptr1 ; Get buf to ptr1, Y=0 by call diff --git a/libsrc/cbm/write.s b/libsrc/cbm/write.s index 7a27f0044..ebc44a0ac 100644 --- a/libsrc/cbm/write.s +++ b/libsrc/cbm/write.s @@ -83,9 +83,9 @@ ; Decrement count -@L2: inc ptr2 +@L2: dec ptr2 bne @L0 - inc ptr2+1 + dec ptr2+1 bne @L0 ; Wrote all chars or disk full. Close the output channel diff --git a/libsrc/common/memcmp.s b/libsrc/common/memcmp.s index 93a2c28dc..5879a433d 100644 --- a/libsrc/common/memcmp.s +++ b/libsrc/common/memcmp.s @@ -13,11 +13,11 @@ _memcmp: ; Calculate (-count-1) and store it into ptr3. This is some overhead here but ; saves time in the compare loop - eor #$FF - sta ptr3 - txa - eor #$FF - sta ptr3+1 + inx + stx ptr3+1 + tax + inx + stx ptr3 ; Save count with each byte incremented separately ; Get the pointer parameters @@ -33,7 +33,7 @@ _memcmp: ; Head of compare loop: Test for the end condition -Loop: inx ; Bump low byte of (-count-1) +Loop: dex ; Bump low byte of (-count-1) beq BumpHiCnt ; Jump on overflow ; Do the compare @@ -53,7 +53,7 @@ Comp: lda (ptr1),y ; Entry on low counter byte overflow BumpHiCnt: - inc ptr3+1 ; Bump high byte of (-count-1) + dec ptr3+1 ; Bump high byte of (-count-1) bne Comp ; Jump if not done jmp return0 ; Count is zero, areas are identical @@ -67,4 +67,3 @@ NotEqual: Greater: ldx #$01 ; Make result positive rts - diff --git a/libsrc/common/strncat.s b/libsrc/common/strncat.s index caa6804fc..060378442 100644 --- a/libsrc/common/strncat.s +++ b/libsrc/common/strncat.s @@ -5,17 +5,17 @@ ; char* strncat (char* dest, const char* src, size_t n); ; - .export _strncat - .import popax, popptr1 - .importzp ptr1, ptr2, ptr3, tmp1, tmp2 - .macpack cpu +.export _strncat +.import popax, popptr1 +.importzp ptr1, ptr2, ptr3, tmp1, tmp2 +.macpack cpu _strncat: - eor #$FF ; one's complement to count upwards - sta tmp1 - txa - eor #$FF - sta tmp2 + inx + stx tmp2 + tax + inx + stx tmp1 ; save count with each byte incremented separately jsr popptr1 ; get src @@ -49,9 +49,9 @@ L2: sty ptr2 L3: ldy #0 ldx tmp1 ; low counter byte -L4: inx +L4: dex bne L5 - inc tmp2 + dec tmp2 beq L6 ; jump if done L5: lda (ptr1),y sta (ptr2),y diff --git a/libsrc/common/strncpy.s b/libsrc/common/strncpy.s index 56387f880..49bd90b32 100644 --- a/libsrc/common/strncpy.s +++ b/libsrc/common/strncpy.s @@ -10,11 +10,11 @@ .proc _strncpy - eor #$FF - sta tmp1 - txa - eor #$FF - sta tmp2 ; Store -size - 1 + inx + stx tmp2 + tax + inx + stx tmp1 ; save count with each byte incremented separately jsr popptr1 ; get src jsr popax ; get dest @@ -26,9 +26,9 @@ ldx tmp1 ; Load low byte of ones complement of size ldy #$00 -L1: inx +L1: dex bne L2 - inc tmp2 + dec tmp2 beq L9 L2: lda (ptr1),y ; Copy one character @@ -42,7 +42,7 @@ L2: lda (ptr1),y ; Copy one character ; Fill the remaining bytes. -L3: inx ; Counter low byte +L3: dex ; Counter low byte beq L6 ; Branch on overflow L4: sta (ptr2),y ; Clear one byte L5: iny ; Bump pointer @@ -52,7 +52,7 @@ L5: iny ; Bump pointer ; Bump the counter high byte -L6: inc tmp2 +L6: dec tmp2 bne L4 ; Done, return dest diff --git a/libsrc/common/strnicmp.s b/libsrc/common/strnicmp.s index 43d6d0d50..f447b9683 100644 --- a/libsrc/common/strnicmp.s +++ b/libsrc/common/strnicmp.s @@ -15,17 +15,11 @@ _strnicmp: _strncasecmp: -; Convert the given counter value in a/x from a downward counter into an -; upward counter, so we can increment the counter in the loop below instead -; of decrementing it. This adds some overhead now, but is cheaper than -; executing a more complex test in each iteration of the loop. We do also -; correct the value by one, so we can do the test on top of the loop. - - eor #$FF - sta ptr3 - txa - eor #$FF - sta ptr3+1 + inx + stx ptr3+1 + tax + inx + stx ptr3 ; save count with each byte incremented separately ; Get the remaining arguments @@ -40,7 +34,7 @@ _strncasecmp: ; Start of compare loop. Check the counter. -Loop: inc ptr3 +Loop: dec ptr3 beq IncHi ; increment high byte ; Compare a byte from the strings @@ -79,7 +73,7 @@ L2: ldx tmp1 ; Increment hi byte -IncHi: inc ptr3+1 +IncHi: dec ptr3+1 bne Comp ; jump if counter not zero ; Exit code if strings are equal. a/x not set diff --git a/libsrc/conio/vcprintf.s b/libsrc/conio/vcprintf.s index 3a9ddf9d7..084efe089 100644 --- a/libsrc/conio/vcprintf.s +++ b/libsrc/conio/vcprintf.s @@ -47,12 +47,12 @@ outdesc: ; Static outdesc structure out: jsr popax ; count sta ptr2 - eor #$FF - sta outdesc+6 - txa - sta ptr2+1 - eor #$FF - sta outdesc+7 + stx ptr2+1 + inx + stx outdesc+7 + tax + inx + stx outdesc+6 jsr popptr1 ; buf @@ -74,7 +74,7 @@ out: jsr popax ; count ; Loop outputting characters -@L1: inc outdesc+6 +@L1: dec outdesc+6 beq @L4 @L2: ldy tmp1 lda (ptr1),y @@ -85,7 +85,7 @@ out: jsr popax ; count jsr _cputc jmp @L1 -@L4: inc outdesc+7 +@L4: dec outdesc+7 bne @L2 rts diff --git a/libsrc/geos-common/drivers/fio_module.s b/libsrc/geos-common/drivers/fio_module.s index 0be5015a7..937ef292e 100644 --- a/libsrc/geos-common/drivers/fio_module.s +++ b/libsrc/geos-common/drivers/fio_module.s @@ -94,11 +94,12 @@ _read: ; popax - fd, must be == to the above one ; return -1+__oserror or number of bytes read - eor #$ff - sta ptr1 - txa - eor #$ff - sta ptr1+1 ; -(# of bytes to read)-1 + inx + stx ptr1+1 + tax + inx + stx ptr1 ; save count with each byte incremented separately + jsr popax sta ptr2 stx ptr2+1 ; buffer ptr @@ -152,9 +153,9 @@ _read: beq @done ; yes, we're done jmp __mappederrno ; no, we're screwed -@L3: inc ptr1 ; decrement the count +@L3: dec ptr1 ; decrement the count bne @L0 - inc ptr1+1 + dec ptr1+1 bne @L0 @done: diff --git a/libsrc/osic1p/bootstrap.s b/libsrc/osic1p/bootstrap.s index ed2ade222..efb480cb8 100644 --- a/libsrc/osic1p/bootstrap.s +++ b/libsrc/osic1p/bootstrap.s @@ -50,16 +50,17 @@ LINEDIST = $20 ; Offset in video RAM between two lines ldx #>load_addr sta load stx load+1 - lda #<load_size - eor #$FF - sta count ; store (-size - 1) - lda #>load_size - eor #$FF - sta count+1 -L1: inc count ; pre-count one's-complement upwards + ldx #<load_size + inx + stx count + ldx #>load_size + inx + stx count+1 ; save size with each byte incremented separately + +L1: dec count ; pre-count one's-complement upwards bnz L2 - inc count+1 + dec count+1 bze L3 L2: jsr GETCHAR ; (doesn't change .Y) sta (load),y diff --git a/libsrc/telestrat/write.s b/libsrc/telestrat/write.s index 68aef42d6..215db3e52 100644 --- a/libsrc/telestrat/write.s +++ b/libsrc/telestrat/write.s @@ -13,11 +13,11 @@ sta ptr3 stx ptr3+1 ; save count as result - eor #$FF - sta ptr2 - txa - eor #$FF - sta ptr2+1 ; remember -count-1 + inx + stx ptr2+1 + tax + inx + stx ptr2 ; save count with each byte incremented separately jsr popptr1 ; get buf jsr popax ; get fd and discard @@ -51,9 +51,9 @@ next: rts -L1: inc ptr2 +L1: dec ptr2 bne L2 - inc ptr2+1 + dec ptr2+1 beq L9 L2: ldy #0 lda (ptr1),y From 6201300816b3c6bcd9cd688f40c0f34b10d3584e Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Tue, 3 Nov 2020 11:52:58 +0100 Subject: [PATCH 0653/2710] Fold constant calculation. --- libsrc/osic1p/bootstrap.s | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/libsrc/osic1p/bootstrap.s b/libsrc/osic1p/bootstrap.s index efb480cb8..031c4f651 100644 --- a/libsrc/osic1p/bootstrap.s +++ b/libsrc/osic1p/bootstrap.s @@ -51,11 +51,9 @@ LINEDIST = $20 ; Offset in video RAM between two lines sta load stx load+1 - ldx #<load_size - inx + ldx #(<load_size) + 1 stx count - ldx #>load_size - inx + ldx #(>load_size) + 1 stx count+1 ; save size with each byte incremented separately L1: dec count ; pre-count one's-complement upwards From db312049503dc0effa872d66467b4f36de11831b Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Tue, 3 Nov 2020 11:53:56 +0100 Subject: [PATCH 0654/2710] Remove stale comment. --- libsrc/osic1p/bootstrap.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/osic1p/bootstrap.s b/libsrc/osic1p/bootstrap.s index 031c4f651..e88e257fd 100644 --- a/libsrc/osic1p/bootstrap.s +++ b/libsrc/osic1p/bootstrap.s @@ -56,7 +56,7 @@ LINEDIST = $20 ; Offset in video RAM between two lines ldx #(>load_size) + 1 stx count+1 ; save size with each byte incremented separately -L1: dec count ; pre-count one's-complement upwards +L1: dec count bnz L2 dec count+1 bze L3 From 9d62abb7ac19e2e117d7d162cb4d73482bca06ca Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Tue, 3 Nov 2020 11:54:50 +0100 Subject: [PATCH 0655/2710] Fix comment. --- libsrc/common/strnicmp.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/common/strnicmp.s b/libsrc/common/strnicmp.s index f447b9683..477aa3d66 100644 --- a/libsrc/common/strnicmp.s +++ b/libsrc/common/strnicmp.s @@ -34,8 +34,8 @@ _strncasecmp: ; Start of compare loop. Check the counter. -Loop: dec ptr3 - beq IncHi ; increment high byte +Loop: dec ptr3 ; decrement high byte + beq IncHi ; Compare a byte from the strings From 9800555bbb399decb5aaf50260a831076517332d Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Fri, 20 Nov 2020 03:50:19 +0100 Subject: [PATCH 0656/2710] Remove stale comments. --- libsrc/common/strncpy.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/common/strncpy.s b/libsrc/common/strncpy.s index 49bd90b32..138413ecb 100644 --- a/libsrc/common/strncpy.s +++ b/libsrc/common/strncpy.s @@ -24,7 +24,7 @@ ; Copy src -> dest up to size bytes - ldx tmp1 ; Load low byte of ones complement of size + ldx tmp1 ldy #$00 L1: dex bne L2 @@ -43,7 +43,7 @@ L2: lda (ptr1),y ; Copy one character ; Fill the remaining bytes. L3: dex ; Counter low byte - beq L6 ; Branch on overflow + beq L6 L4: sta (ptr2),y ; Clear one byte L5: iny ; Bump pointer bne L3 From d90cd112125a0a51c286b019c4e76f2131499683 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 27 Dec 2020 18:22:12 -0500 Subject: [PATCH 0657/2710] Fixed outdated comments. --- libsrc/common/memcmp.s | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libsrc/common/memcmp.s b/libsrc/common/memcmp.s index 5879a433d..d651a3cfc 100644 --- a/libsrc/common/memcmp.s +++ b/libsrc/common/memcmp.s @@ -10,8 +10,8 @@ _memcmp: -; Calculate (-count-1) and store it into ptr3. This is some overhead here but -; saves time in the compare loop +; Calculate a special count, and store it into ptr3. That is some overhead here, +; but saves time in the compare loop inx stx ptr3+1 @@ -29,12 +29,12 @@ _memcmp: ; Loop initialization ;ldy #$00 ; Initialize pointer (Y=0 guaranteed by popptr1) - ldx ptr3 ; Load low counter byte into X + ldx ptr3 ; Load inner counter byte into .X ; Head of compare loop: Test for the end condition -Loop: dex ; Bump low byte of (-count-1) - beq BumpHiCnt ; Jump on overflow +Loop: dex + beq BumpHiCnt ; Jump on end of inner count ; Do the compare @@ -50,10 +50,10 @@ Comp: lda (ptr1),y inc ptr2+1 bne Loop ; Branch always (pointer wrap is illegal) -; Entry on low counter byte overflow +; Entry on inner loop end BumpHiCnt: - dec ptr3+1 ; Bump high byte of (-count-1) + dec ptr3+1 bne Comp ; Jump if not done jmp return0 ; Count is zero, areas are identical From a9b71b6207c837833aacda2e5252dac4fd8fa8e5 Mon Sep 17 00:00:00 2001 From: Rocky <rocky@AvBook.local> Date: Fri, 1 Jan 2021 15:39:23 +0100 Subject: [PATCH 0658/2710] return-type - new warning suppression type added --- src/cc65/error.c | 2 ++ src/cc65/error.h | 1 + src/cc65/function.c | 4 ++-- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/cc65/error.c b/src/cc65/error.c index 132bf331d..feb43565d 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -74,6 +74,7 @@ IntStack WarnUnknownPragma = INTSTACK(1); /* - unknown #pragmas */ IntStack WarnUnusedLabel = INTSTACK(1); /* - unused labels */ IntStack WarnUnusedParam = INTSTACK(1); /* - unused parameters */ IntStack WarnUnusedVar = INTSTACK(1); /* - unused variables */ +IntStack WarnReturnType = INTSTACK(1); /* - control reaches end of non-void function */ /* Map the name of a warning to the intstack that holds its state */ typedef struct WarnMapEntry WarnMapEntry; @@ -92,6 +93,7 @@ static WarnMapEntry WarnMap[] = { { &WarnUnusedLabel, "unused-label" }, { &WarnUnusedParam, "unused-param" }, { &WarnUnusedVar, "unused-var" }, + { &WarnReturnType, "return-type" }, }; Collection DiagnosticStrBufs; diff --git a/src/cc65/error.h b/src/cc65/error.h index a443aeff8..898793651 100644 --- a/src/cc65/error.h +++ b/src/cc65/error.h @@ -71,6 +71,7 @@ extern IntStack WarnUnknownPragma; /* - unknown #pragmas */ extern IntStack WarnUnusedLabel; /* - unused labels */ extern IntStack WarnUnusedParam; /* - unused parameters */ extern IntStack WarnUnusedVar; /* - unused variables */ +extern IntStack WarnReturnType; /* - control reaches end of non-void function */ /* Forward */ struct StrBuf; diff --git a/src/cc65/function.c b/src/cc65/function.c index 00755ae65..9269d4c62 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -654,8 +654,8 @@ void NewFunc (SymEntry* Func, FuncDesc* D) ** environment returning int, output a warning if we didn't see a return ** statement. */ - if (!F_HasVoidReturn (CurrentFunc) && !F_HasReturn (CurrentFunc) && !C99MainFunc) { - Warning ("Control reaches end of non-void function"); + if (!F_HasVoidReturn (CurrentFunc) && !F_HasReturn (CurrentFunc) && !C99MainFunc && IS_Get (&WarnReturnType)) { + Warning ("Control reaches end of non-void function [-Wreturn-type]"); } /* If this is the main function in a C99 environment returning an int, let From 96624699577c7497fda3592088f3928867dff381 Mon Sep 17 00:00:00 2001 From: Piotr Kaczorowski <piotr.kaczorowski@gmail.com> Date: Mon, 4 Jan 2021 22:05:55 +0100 Subject: [PATCH 0659/2710] Return-type warning and pseudo variable __A__ documentation added. --- doc/cc65.sgml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index e273ced9c..211aa21b3 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -549,6 +549,8 @@ Here is a description of all the command line options: <tag><tt/remap-zero/</tag> Warn about a <tt/<ref id="pragma-charmap" name="#pragma charmap()">/ that changes a character's code number from/to 0x00. + <tag><tt/return-type/</tag> + Warn about no return statement in function returning non-void.. <tag><tt/struct-param/</tag> Warn when passing structs by value. <tag><tt/unknown-pragma/</tag> @@ -726,6 +728,29 @@ This cc65 version has some extensions to the ISO C standard. will give the high byte of any unsigned value. <p> +<item> There is pseudo variable named <tt/__A__/ that indicates accumulator register. + It can be used to highlight the returned variable in non-void + function where result is hidden in the <tt/asm/ section. + every other variable. They are most useful together with short + sequences of assembler code. + + For example, in the function below + + <tscreen><verb> + BYTE get_key_via_atarixl_romcall_device_k(void) \ + asm("LDA $E425"); \ + asm("PHA"); \ + asm("LDA $E424"); \ + asm("PHA"); \ + asm("RTA"); \ + return __A__; + </verb></tscreen> + + <tt/return __A__;/ will indicate that result is stored in the accumulator + and suppress warning that function has no return statement. Instead, you can + also use <tt/#pragma warn (return-type, off) ... pragma warn (return-type, on)/ + <p> + <item> Inside a function, the identifier <tt/__func__/ gives the name of the current function as a string. Outside of functions, <tt/__func__/ is undefined. From 68e1faa2c815696c5cebdb033593b3dcdbb9fff3 Mon Sep 17 00:00:00 2001 From: Piotr Kaczorowski <piotr.kaczorowski@gmail.com> Date: Mon, 4 Jan 2021 22:10:16 +0100 Subject: [PATCH 0660/2710] Fix typo in cc65.sgml --- doc/cc65.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 211aa21b3..0b36812d4 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -550,7 +550,7 @@ Here is a description of all the command line options: Warn about a <tt/<ref id="pragma-charmap" name="#pragma charmap()">/ that changes a character's code number from/to 0x00. <tag><tt/return-type/</tag> - Warn about no return statement in function returning non-void.. + Warn about no return statement in function returning non-void. <tag><tt/struct-param/</tag> Warn when passing structs by value. <tag><tt/unknown-pragma/</tag> From 601e6283436e00314b00fc0b2fb9a549535200ea Mon Sep 17 00:00:00 2001 From: Piotr Kaczorowski <piotr.kaczorowski@gmail.com> Date: Mon, 4 Jan 2021 22:16:07 +0100 Subject: [PATCH 0661/2710] Another fix typo in cc65.sgml --- doc/cc65.sgml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 0b36812d4..82da74f49 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -731,10 +731,7 @@ This cc65 version has some extensions to the ISO C standard. <item> There is pseudo variable named <tt/__A__/ that indicates accumulator register. It can be used to highlight the returned variable in non-void function where result is hidden in the <tt/asm/ section. - every other variable. They are most useful together with short - sequences of assembler code. - - For example, in the function below + For example, in the function below <tscreen><verb> BYTE get_key_via_atarixl_romcall_device_k(void) \ From e3fa247012a5664e6aa113dc8dd9d245bb51bf38 Mon Sep 17 00:00:00 2001 From: Piotr Kaczorowski <piotr.kaczorowski@gmail.com> Date: Tue, 5 Jan 2021 17:48:46 +0100 Subject: [PATCH 0662/2710] Yet another fix typo in cc65.sgml --- doc/cc65.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 82da74f49..36b6d1071 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -739,7 +739,7 @@ This cc65 version has some extensions to the ISO C standard. asm("PHA"); \ asm("LDA $E424"); \ asm("PHA"); \ - asm("RTA"); \ + asm("RTS"); \ return __A__; </verb></tscreen> From 0884278ae3583f43c80611b06aae618cac688122 Mon Sep 17 00:00:00 2001 From: Piotr Kaczorowski <piotr.kaczorowski@gmail.com> Date: Wed, 6 Jan 2021 16:02:25 +0100 Subject: [PATCH 0663/2710] Correction in documentation regarding __A__ pseudo variable --- doc/cc65.sgml | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 36b6d1071..f2fd69eba 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -709,7 +709,7 @@ This cc65 version has some extensions to the ISO C standard. places. <p> -<item> There are two pseudo variables named <tt/__AX__/ and <tt/__EAX__/. +<item> There are two pseudo variables named <tt/__A__, __AX__/ and <tt/__EAX__/. Both refer to the primary register that is used by the compiler to evaluate expressions or return function results. <tt/__AX__/ is of type <tt/unsigned int/ and <tt/__EAX__/ of type <tt/long unsigned int/ @@ -728,26 +728,6 @@ This cc65 version has some extensions to the ISO C standard. will give the high byte of any unsigned value. <p> -<item> There is pseudo variable named <tt/__A__/ that indicates accumulator register. - It can be used to highlight the returned variable in non-void - function where result is hidden in the <tt/asm/ section. - For example, in the function below - - <tscreen><verb> - BYTE get_key_via_atarixl_romcall_device_k(void) \ - asm("LDA $E425"); \ - asm("PHA"); \ - asm("LDA $E424"); \ - asm("PHA"); \ - asm("RTS"); \ - return __A__; - </verb></tscreen> - - <tt/return __A__;/ will indicate that result is stored in the accumulator - and suppress warning that function has no return statement. Instead, you can - also use <tt/#pragma warn (return-type, off) ... pragma warn (return-type, on)/ - <p> - <item> Inside a function, the identifier <tt/__func__/ gives the name of the current function as a string. Outside of functions, <tt/__func__/ is undefined. From a861d84011df82ac5f81a8c87ae3181fee393993 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Wed, 6 Jan 2021 16:09:55 +0100 Subject: [PATCH 0664/2710] Fixed recent addition of __A__. --- doc/cc65.sgml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index f2fd69eba..24f4422f4 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -709,12 +709,13 @@ This cc65 version has some extensions to the ISO C standard. places. <p> -<item> There are two pseudo variables named <tt/__A__, __AX__/ and <tt/__EAX__/. - Both refer to the primary register that is used by the compiler to - evaluate expressions or return function results. <tt/__AX__/ is of - type <tt/unsigned int/ and <tt/__EAX__/ of type <tt/long unsigned int/ - respectively. The pseudo variables may be used as lvalue and rvalue as - every other variable. They are most useful together with short +<item> There are three pseudo variables named <tt/__A__/, <tt/__AX__/ and + <tt/__EAX__/. They all refer to the primary register that is used + by the compiler to evaluate expressions or return function results. + <tt/__A__/ is of type <tt/unsigned char/, <tt/__AX__/ is of type + <tt/unsigned int/ and <tt/__EAX__/ of type <tt/long unsigned int/ + respectively. The pseudo variables may be used as lvalue and rvalue + as every other variable. They are most useful together with short sequences of assembler code. For example, the macro <tscreen><verb> From 084621967259fc7bb185913adbe48f8a456c262a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Jan 2021 16:40:58 +0100 Subject: [PATCH 0665/2710] added testprogram for issue #1374 --- test/misc/Makefile | 22 ++++++++++++ test/misc/bug1374.c | 83 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 test/misc/bug1374.c diff --git a/test/misc/Makefile b/test/misc/Makefile index 81a09c693..1bb8c42ad 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -109,6 +109,28 @@ $(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) +# this one fails with optimizations enabled +$(WORKDIR)/bug1374.g.6502.prg: bug1374.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug1374.g.6502.prg) + $(CC65) -t sim$2 -g -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) + $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) + +$(WORKDIR)/bug1374.g.65c02.prg: bug1374.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug1374.g.65c02.prg) + $(CC65) -t sim$2 -g -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) + $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) + +$(WORKDIR)/bug1374.$1.$2.prg: bug1374.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug1374.$1.$2.prg) + $(CC65) -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) + $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) + # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(if $(QUIET),echo misc/endless.$1.$2.prg) diff --git a/test/misc/bug1374.c b/test/misc/bug1374.c new file mode 100644 index 000000000..b55e75fee --- /dev/null +++ b/test/misc/bug1374.c @@ -0,0 +1,83 @@ + +/* test for bug#1374 */ + +#include <stdint.h> +#include <stdio.h> + +static int res = 0; + +int test1(void) +{ + uint8_t x = 0x89; + uint8_t y = 0xab; + uint16_t z = (x << 8) | y; + printf("%x\n", z); + return (z == 0x89ab) ? 0 : 1; +} + +int test1b(void) +{ + uint8_t x = 0x89; + uint8_t y = 0xab; + uint16_t z = (x * 256) | y; + printf("%x\n", z); + return (z == 0x89ab) ? 0 : 1; +} + +int test2(void) +{ + uint16_t x = 0x8900; + uint8_t y = 0xab; + uint16_t z = x | y; + printf("%x\n", z); + return (z == 0x89ab) ? 0 : 1; +} + +int test3(void) +{ + uint16_t x = 0x89; + uint8_t y = 0xab; + uint16_t z = (x << 8) | y; + printf("%x\n", z); + return (z == 0x89ab) ? 0 : 1; +} + +int test3b(void) +{ + uint16_t x = 0x89; + uint8_t y = 0xab; + uint16_t z = (x * 256) | y; + printf("%x\n", z); + return (z == 0x89ab) ? 0 : 1; +} + +int test4(void) +{ + uint8_t x = 0x89; + uint16_t y = 0xab; + uint16_t z = (x << 8) | y; + printf("%x\n", z); + return (z == 0x89ab) ? 0 : 1; +} + +int test4b(void) +{ + uint8_t x = 0x89; + uint16_t y = 0xab; + uint16_t z = (x * 256) | y; + printf("%x\n", z); + return (z == 0x89ab) ? 0 : 1; +} + +int main(void) +{ + res |= test1(); + res |= test2(); + res |= test3(); + res |= test4(); + res |= test1b(); + res |= test3b(); + res |= test4b(); + printf("res: %d\n", res); + return res; +} From b99455cc4787ddd2a139f65317fdabcdf4f5611b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 19 Jan 2021 20:47:11 +0800 Subject: [PATCH 0666/2710] Fixed Issue #1374. --- src/cc65/codeoptutil.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/codeoptutil.c b/src/cc65/codeoptutil.c index 3df762eeb..375fdf541 100644 --- a/src/cc65/codeoptutil.c +++ b/src/cc65/codeoptutil.c @@ -1080,7 +1080,7 @@ void AddOpHigh (StackOpData* D, opc_t OPC, LoadInfo* LI, int KeepResult) } else { - if ((LI->A.Flags & LI_CHECK_Y) == 0) { + if ((LI->X.Flags & LI_CHECK_Y) == 0) { /* ldy #const */ X = NewCodeEntry (OP65_LDY, AM65_IMM, MakeHexArg (LI->X.Offs), 0, D->OpEntry->LI); } else { @@ -1094,7 +1094,7 @@ void AddOpHigh (StackOpData* D, opc_t OPC, LoadInfo* LI, int KeepResult) X = NewCodeEntry (OPC, AM65_ZP_INDY, "sp", 0, D->OpEntry->LI); } else { /* opc src,y */ - X = NewCodeEntry (OPC, LI->A.LoadEntry->AM, LI->A.LoadEntry->Arg, 0, D->OpEntry->LI); + X = NewCodeEntry (OPC, LI->X.LoadEntry->AM, LI->X.LoadEntry->Arg, 0, D->OpEntry->LI); } InsertEntry (D, X, D->IP++); } From a040c28cc449a2e5c9820ce276e0cb5795cfb562 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 19 Jan 2021 20:55:56 +0800 Subject: [PATCH 0667/2710] Moved test for #1374. --- test/misc/Makefile | 22 ---------------------- test/{misc => val}/bug1374.c | 0 2 files changed, 22 deletions(-) rename test/{misc => val}/bug1374.c (100%) diff --git a/test/misc/Makefile b/test/misc/Makefile index 1bb8c42ad..81a09c693 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -109,28 +109,6 @@ $(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) -# this one fails with optimizations enabled -$(WORKDIR)/bug1374.g.6502.prg: bug1374.c | $(WORKDIR) - $(if $(QUIET),echo misc/bug1374.g.6502.prg) - $(CC65) -t sim$2 -g -o $$(@:.prg=.s) $$< $(NULLERR) - $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) - $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) - $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) - -$(WORKDIR)/bug1374.g.65c02.prg: bug1374.c | $(WORKDIR) - $(if $(QUIET),echo misc/bug1374.g.65c02.prg) - $(CC65) -t sim$2 -g -o $$(@:.prg=.s) $$< $(NULLERR) - $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) - $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) - $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) - -$(WORKDIR)/bug1374.$1.$2.prg: bug1374.c | $(WORKDIR) - $(if $(QUIET),echo misc/bug1374.$1.$2.prg) - $(CC65) -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) - $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) - $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) - $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) - # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(if $(QUIET),echo misc/endless.$1.$2.prg) diff --git a/test/misc/bug1374.c b/test/val/bug1374.c similarity index 100% rename from test/misc/bug1374.c rename to test/val/bug1374.c From a1992702f895632abd0906a05ab22c07fddb5bed Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 24 Jan 2021 18:19:48 +0800 Subject: [PATCH 0668/2710] Declarations of 'extern' object and function should be visible in the file scope. --- src/cc65/symtab.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 56c868b2a..3c000f3a1 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -1159,12 +1159,13 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) /* Add an external or global symbol to the symbol table and return the entry */ { - /* Use the global symbol table */ + /* Start from the local symbol table */ SymTable* Tab = SymTab; /* Do we have an entry with this name already? */ SymEntry* Entry = FindSymInTree (Tab, Name); if (Entry) { + /* We have a symbol with this name already */ if (HandleSymRedefinition (Entry, T, Flags)) { Entry = 0; @@ -1215,7 +1216,11 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) /* Use the fail-safe table for fictitious symbols */ Tab = FailSafeTab; } - } + + } else if ((Flags & (SC_EXTERN | SC_FUNC)) != 0) { + /* Add the new declaration to the global symbol table instead */ + Tab = SymTab0; + } if (Entry == 0 || Entry->Owner != Tab) { From c9ac5152869114dadd3e73f502b7c2ac8783ae6d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 24 Jan 2021 18:19:51 +0800 Subject: [PATCH 0669/2710] Functions with no prototypes might use EAX registers. --- src/cc65/codeinfo.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index e0cda84e9..90d4f4d68 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -493,22 +493,28 @@ fncls_t GetFuncInfo (const char* Name, unsigned int* Use, unsigned int* Chg) ** registers. */ *Use = REG_EAXY; - } else if (D->ParamCount > 0 && + } else if ((D->ParamCount > 0 || + (D->Flags & FD_EMPTY) != 0) && (AutoCDecl ? IsQualFastcall (E->Type) : !IsQualCDecl (E->Type))) { /* Will use registers depending on the last param. If the last - ** param has incomplete type, just assume __EAX__. + ** param has incomplete type, or if the function has not been + ** prototyped yet, just assume __EAX__. */ - switch (SizeOf (D->LastParam->Type)) { - case 1u: - *Use = REG_A; - break; - case 2u: - *Use = REG_AX; - break; - default: - *Use = REG_EAX; + if (D->LastParam != 0) { + switch (SizeOf(D->LastParam->Type)) { + case 1u: + *Use = REG_A; + break; + case 2u: + *Use = REG_AX; + break; + default: + *Use = REG_EAX; + } + } else { + *Use = REG_EAX; } } else { /* Will not use any registers */ From bfc7a51a44641760dfcf77a7e3407ac52ad3f3a9 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 10 Oct 2020 19:54:18 +0800 Subject: [PATCH 0670/2710] Fixed Issue #1265 according to C89/C99 standards. --- src/cc65/datatype.c | 2 +- src/cc65/expr.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 413007a85..d78bfe116 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -462,7 +462,7 @@ Type* GetImplicitFuncType (void) Type* T = TypeAlloc (3); /* func/returns int/terminator */ /* Prepare the function descriptor */ - F->Flags = FD_EMPTY | FD_VARIADIC; + F->Flags = FD_EMPTY; F->SymTab = &EmptySymTab; F->TagTab = &EmptySymTab; diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 0cf650d3b..751014af3 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1171,16 +1171,16 @@ static void Primary (ExprDesc* E) /* IDENT is either an auto-declared function or an undefined variable. */ if (CurTok.Tok == TOK_LPAREN) { - /* C99 doesn't allow calls to undefined functions, so + /* C99 doesn't allow calls to undeclared functions, so ** generate an error and otherwise a warning. Declare a ** function returning int. For that purpose, prepare a ** function signature for a function having an empty param ** list and returning int. */ if (IS_Get (&Standard) >= STD_C99) { - Error ("Call to undefined function '%s'", Ident); + Error ("Call to undeclared function '%s'", Ident); } else { - Warning ("Call to undefined function '%s'", Ident); + Warning ("Call to undeclared function '%s'", Ident); } Sym = AddGlobalSym (Ident, GetImplicitFuncType(), SC_EXTERN | SC_REF | SC_FUNC); E->Type = Sym->Type; From 95830cce29c9ae2503b60ae7244b460e1a302f53 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 24 Jan 2021 18:19:54 +0800 Subject: [PATCH 0671/2710] Fixed test/misc/bug1265.c with its output. --- test/misc/Makefile | 3 +-- test/misc/bug1265.c | 4 ---- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/test/misc/Makefile b/test/misc/Makefile index 81a09c693..7a1b82d5f 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -101,13 +101,12 @@ $(WORKDIR)/bug1263.$1.$2.prg: bug1263.c | $(WORKDIR) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) # this one requires --std=c89, it fails with --std=c99 -# it fails currently at runtime $(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1265.$1.$2.prg) $(CC65) --standard c89 -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) - $(NOT) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) + $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) diff --git a/test/misc/bug1265.c b/test/misc/bug1265.c index 469946739..36d1459a7 100644 --- a/test/misc/bug1265.c +++ b/test/misc/bug1265.c @@ -14,11 +14,9 @@ int main (void) { int x, n; sprintf (str1, "%p\n", &x); - puts(str1); x = 1234; n = f1 (x); sprintf (str2, "%p\n", &x); - puts(str2); if (strcmp(str1, str2)) { puts("not equal"); @@ -30,11 +28,9 @@ int main (void) { } sprintf (str1, "%p\n", &x); - puts(str1); x = 2345; n = f2 (x); sprintf (str2, "%p\n", &x); - puts(str2); if (strcmp(str1, str2)) { puts("not equal"); From 6c59a6254f315cd7d82112d1d7e042242c14237d Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Fri, 23 Oct 2020 23:47:30 +0200 Subject: [PATCH 0672/2710] Now getchar works --- libsrc/telestrat/read.s | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index 76de9d0ac..0782c4d21 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -8,21 +8,33 @@ .include "zeropage.inc" .include "telestrat.inc" + .include "fcntl.inc" ;int read (int fd, void* buf, unsigned count); .proc _read - sta ptr1 ; count - stx ptr1+1 ; count - jsr popax ; get buf + sta ptr1 ; count + stx ptr1+1 ; count + jsr popax ; get buf sta PTR_READ_DEST stx PTR_READ_DEST+1 - sta ptr2 ; in order to calculate nb of bytes read + sta ptr2 ; in order to calculate nb of bytes read stx ptr2+1 ; - ; jsr popax ; fp pointer don't care in this version + jsr popax ; fp pointer don't care in this version + cpx #$00 + bne @is_not_stdin + cmp #STDIN_FILENO + bne @is_not_stdin + ; stdin +@L1: + BRK_TELEMON XRD0 ; waits until key is pressed + bcs @L1 + + rts +@is_not_stdin: lda ptr1 ; ldy ptr1+1 ; BRK_TELEMON XFREAD ; calls telemon30 routine From f622783ae19178c4500593993531823483abaf9c Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 1 Feb 2021 17:53:07 +0100 Subject: [PATCH 0673/2710] kbhit added for telestrat target --- libsrc/telestrat/kbhit.s | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 libsrc/telestrat/kbhit.s diff --git a/libsrc/telestrat/kbhit.s b/libsrc/telestrat/kbhit.s new file mode 100644 index 000000000..431b9a957 --- /dev/null +++ b/libsrc/telestrat/kbhit.s @@ -0,0 +1,19 @@ +; +; Jede, 2021-02-01 +; +; int kbhit (void); +; + + .export _kbhit + + .include "telestrat.inc" + +_kbhit: + BRK_TELEMON XRD0 + bcs @no_char_action + lda #$01 + rts +@no_char_action: + lda #$00 + rts + From b52ee25385a33c42c502fd7632b6521c615cac7a Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 1 Feb 2021 23:21:41 +0100 Subject: [PATCH 0674/2710] Rollback read.s --- libsrc/telestrat/read.s | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index 0782c4d21..76de9d0ac 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -8,33 +8,21 @@ .include "zeropage.inc" .include "telestrat.inc" - .include "fcntl.inc" ;int read (int fd, void* buf, unsigned count); .proc _read - sta ptr1 ; count - stx ptr1+1 ; count - jsr popax ; get buf + sta ptr1 ; count + stx ptr1+1 ; count + jsr popax ; get buf sta PTR_READ_DEST stx PTR_READ_DEST+1 - sta ptr2 ; in order to calculate nb of bytes read + sta ptr2 ; in order to calculate nb of bytes read stx ptr2+1 ; - jsr popax ; fp pointer don't care in this version - cpx #$00 - bne @is_not_stdin - cmp #STDIN_FILENO - bne @is_not_stdin - ; stdin -@L1: - BRK_TELEMON XRD0 ; waits until key is pressed - bcs @L1 - - rts + ; jsr popax ; fp pointer don't care in this version -@is_not_stdin: lda ptr1 ; ldy ptr1+1 ; BRK_TELEMON XFREAD ; calls telemon30 routine From a9dac3b1efeab8da38bb86beaae55354a35b6101 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 2 Feb 2021 12:32:42 +0100 Subject: [PATCH 0675/2710] Fix X register for kbhit --- libsrc/telestrat/kbhit.s | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libsrc/telestrat/kbhit.s b/libsrc/telestrat/kbhit.s index 431b9a957..bb88af4b2 100644 --- a/libsrc/telestrat/kbhit.s +++ b/libsrc/telestrat/kbhit.s @@ -11,9 +11,11 @@ _kbhit: BRK_TELEMON XRD0 bcs @no_char_action + ldx #$00 lda #$01 rts @no_char_action: - lda #$00 + lda #$00 + tax rts From 6617a017faa43382bd2bebb40a3e8f810d35f6b6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 5 Feb 2021 17:29:49 +0800 Subject: [PATCH 0676/2710] Added Opt_a_tossub for 8-bit subtraction. --- src/cc65/coptstop.c | 53 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index ae40a55e9..13470dc18 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -1292,6 +1292,58 @@ static unsigned Opt_a_tosne (StackOpData* D) +static unsigned Opt_a_tossub (StackOpData* D) +/* Optimize the tossubax sequence. */ +{ + CodeEntry* X; + + + /* Inline the sbc */ + D->IP = D->OpIndex+1; + + /* Must be true because of OP_RHS_LOAD */ + CHECK ((D->Rhs.A.Flags & D->Rhs.X.Flags & LI_DIRECT) != 0); + + /* sec */ + X = NewCodeEntry (OP65_SEC, AM65_IMP, 0, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + + /* Add code for low operand */ + AddOpLow (D, OP65_SBC, &D->Rhs); + + /* Do sign-extension as high-byte operation only when its result is used */ + if ((GetRegInfo (D->Code, D->IP, REG_X) & REG_X) != 0) { + CodeLabel* L; + CodeEntry* N; + + X = NewCodeEntry (OP65_LDX, AM65_IMM, MakeHexArg (0), 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + + /* Add sign extension - N is unused now */ + N = CS_GetEntry (D->Code, D->IP); + CHECK (N != 0); + L = CS_GenLabel (D->Code, N); + + X = NewCodeEntry (OP65_BCS, AM65_BRA, L->Name, L, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + + X = NewCodeEntry (OP65_DEX, AM65_IMP, 0, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + } + + /* Rhs load entries must be removed */ + D->Rhs.X.Flags |= LI_REMOVE; + D->Rhs.A.Flags |= LI_REMOVE; + + /* Remove the push and the call to the tossubax function */ + RemoveRemainders (D); + + /* We changed the sequence */ + return 1; +} + + + static unsigned Opt_a_tosuge (StackOpData* D) /* Optimize the tosgeax and tosugeax sequences */ { @@ -1363,6 +1415,7 @@ static const OptFuncDesc FuncRegATable[] = { { "tosleax", Opt_a_tosule, REG_NONE, OP_NONE }, { "tosltax", Opt_a_tosult, REG_NONE, OP_NONE }, { "tosneax", Opt_a_tosne, REG_NONE, OP_NONE }, + { "tossubax", Opt_a_tossub, REG_NONE, OP_RHS_REMOVE_DIRECT | OP_RHS_LOAD_DIRECT }, { "tosugeax", Opt_a_tosuge, REG_NONE, OP_NONE }, { "tosugtax", Opt_a_tosugt, REG_NONE, OP_NONE }, { "tosuleax", Opt_a_tosule, REG_NONE, OP_NONE }, From 855143123347fad6a09d08f995d7a2d5c7bd84de Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Fri, 5 Feb 2021 11:54:07 +0100 Subject: [PATCH 0677/2710] Optimized based on https://github.com/cc65/cc65/pull/1393. --- libsrc/telestrat/kbhit.s | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/libsrc/telestrat/kbhit.s b/libsrc/telestrat/kbhit.s index bb88af4b2..54e4bf4d8 100644 --- a/libsrc/telestrat/kbhit.s +++ b/libsrc/telestrat/kbhit.s @@ -10,12 +10,8 @@ _kbhit: BRK_TELEMON XRD0 - bcs @no_char_action - ldx #$00 - lda #$01 + ldx #$00 + txa + rol + eor #$01 rts -@no_char_action: - lda #$00 - tax - rts - From 6c90f3e2d20ea47a28a7faa2378a917cefac749e Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Tue, 9 Feb 2021 11:22:58 +0100 Subject: [PATCH 0678/2710] atarixl configs: RAM memory area was renamed to MAIN in d8c31cf1d3b724b83bd411736472e1c16fb1b0c0 adjust comments accordingly --- cfg/atarixl-largehimem.cfg | 2 +- cfg/atarixl-overlay.cfg | 2 +- cfg/atarixl-xex.cfg | 2 +- cfg/atarixl.cfg | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cfg/atarixl-largehimem.cfg b/cfg/atarixl-largehimem.cfg index 5e60f32bd..38fb68db9 100644 --- a/cfg/atarixl-largehimem.cfg +++ b/cfg/atarixl-largehimem.cfg @@ -54,7 +54,7 @@ SEGMENTS { SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes; SRPREPHDR: load = SRPREPHDR, type = ro; - LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and RAM, not zero initialized + LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and MAIN, not zero initialized SRPREP: load = SRPREPCHNK, type = rw, define = yes; SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes; SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes; diff --git a/cfg/atarixl-overlay.cfg b/cfg/atarixl-overlay.cfg index 2bb4105cd..339228ea0 100644 --- a/cfg/atarixl-overlay.cfg +++ b/cfg/atarixl-overlay.cfg @@ -65,7 +65,7 @@ SEGMENTS { SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes; SRPREPHDR: load = SRPREPHDR, type = ro; - LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and RAM, not zero initialized + LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and MAIN, not zero initialized SRPREP: load = SRPREPCHNK, type = rw, define = yes; SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes; SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM2, type = rw, define = yes, optional = yes; diff --git a/cfg/atarixl-xex.cfg b/cfg/atarixl-xex.cfg index 6b6601c59..1b76855d0 100644 --- a/cfg/atarixl-xex.cfg +++ b/cfg/atarixl-xex.cfg @@ -48,7 +48,7 @@ SEGMENTS { EXTZP: load = ZP, type = zp, optional = yes; SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes; - LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and RAM, not zero initialized + LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and MAIN, not zero initialized SRPREP: load = SRPREPCHNK, type = rw, define = yes; SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes; SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM2, type = rw, define = yes, optional = yes; diff --git a/cfg/atarixl.cfg b/cfg/atarixl.cfg index d4e466ae1..cece23555 100644 --- a/cfg/atarixl.cfg +++ b/cfg/atarixl.cfg @@ -52,7 +52,7 @@ SEGMENTS { SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes; SRPREPHDR: load = SRPREPHDR, type = ro; - LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and RAM, not zero initialized + LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and MAIN, not zero initialized SRPREP: load = SRPREPCHNK, type = rw, define = yes; SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes; SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM2, type = rw, define = yes, optional = yes; From ab8bb26868159af14ec5fd3345789c23a6e72e49 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 9 Feb 2021 19:50:08 +0100 Subject: [PATCH 0679/2710] added testcase for issue #1937 --- test/misc/Makefile | 8 +++++++ test/misc/bug1397.c | 55 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 test/misc/bug1397.c diff --git a/test/misc/Makefile b/test/misc/Makefile index 7a1b82d5f..3142dcfb8 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -108,6 +108,14 @@ $(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) +# this one fails with optimizations, without OptBoolTrans it works +$(WORKDIR)/bug1397.$1.$2.prg: bug1397.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug1397.$1.$2.prg) + $(CC65) -O --disable-opt OptBoolTrans -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) + $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) + # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(if $(QUIET),echo misc/endless.$1.$2.prg) diff --git a/test/misc/bug1397.c b/test/misc/bug1397.c new file mode 100644 index 000000000..4f8fb8697 --- /dev/null +++ b/test/misc/bug1397.c @@ -0,0 +1,55 @@ + +/* bug #1937 - Incorrect Behavior Related to OptBoolTrans */ + +#include <stdio.h> + +unsigned char c; +int *p; + +void f1(void) { + int i = 1; + int *pa = (int *)0xaaaa; + int *pb = (int *)0xbbbb; + + p = (i == 0) ? pa : pb; + c = 0x5a; +} + + +struct data_t { + unsigned char c; + int *p; +}; + +struct data_t data; + +void f2(void) { + int i = 1; + int *pa = (int *)0xcccc; + int *pb = (int *)0xdddd; + struct data_t *po = &data; + + po->p = (i == 0) ? pa : pb; + po->c = 0xa5; +} + +int ret = 0; + +int main(void) { + f1(); + if (c != 0x5a) { + ret++; + } + printf("c: %hhx\n", c); + printf("p: %p\n", p); + f2(); + if (data.c != 0xa5) { + ret++; + } + printf("c: %hhx\n", data.c); + printf("p: %p\n", data.p); + + printf("failures: %d\n", ret); + return ret; +} + From 9cd1ffa6a6131455e419f5436f1396e140cff005 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Thu, 11 Feb 2021 19:20:11 +0100 Subject: [PATCH 0680/2710] doc/ld65.sgml: document the INIT segment - re-arrange the segments in the "Special segments" section alphabetically - some small changes in section 5.8 (FILE) regarding Atari XEX format --- doc/ld65.sgml | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/doc/ld65.sgml b/doc/ld65.sgml index cba06fef4..c2e990dc2 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -921,9 +921,8 @@ name="6502 binary relocation format specification">). It is defined like this: } </verb></tscreen> -The other format available is the Atari (xex) segmented file format, this is -the standard format used by Atari DOS 2.0 and upward file managers in the Atari -8-bit computers, and it is defined like this: +The other format available is the Atari segmented file format (xex), this is +the standard format used by Atari DOS 2.0 and upwards, and it is defined like this: <tscreen><verb> FILES { @@ -1140,6 +1139,19 @@ The builtin config files do contain segments that have a special meaning for the compiler and the libraries that come with it. If you replace the builtin config files, you will need the following information. +<sect1>INIT<p> + +The INIT segment is some kind of 'bss' segment since it contains +uninitialized data. Unlike <tt>.bss</tt> itself, its contents aren't +initialized to zero at program startup . It's mostly used by +constructors in the startup code. An example for the use of the INIT +segment is saving/restoring the zero page area used by cc65. + +<sect1>LOWCODE<p> + +For the LOWCODE segment, it is guaranteed that it won't be banked out, so it +is reachable at any time by interrupt handlers or similar. + <sect1>ONCE<p> The ONCE segment is used for initialization code run only once before @@ -1147,11 +1159,6 @@ execution reaches main() - provided that the program runs in RAM. You may for example add the ONCE segment to the heap in really memory constrained systems. -<sect1>LOWCODE<p> - -For the LOWCODE segment, it is guaranteed that it won't be banked out, so it -is reachable at any time by interrupt handlers or similar. - <sect1>STARTUP<p> This segment contains the startup code which initializes the C software stack From 43881afca22e2e8d2fc5a36a8519befd97ff1a4b Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Thu, 11 Feb 2021 20:56:28 +0100 Subject: [PATCH 0681/2710] doc/atari5200.sgml: document splash screen user changeable settings --- doc/atari5200.sgml | 50 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/doc/atari5200.sgml b/doc/atari5200.sgml index aff212b15..c7e5be73e 100644 --- a/doc/atari5200.sgml +++ b/doc/atari5200.sgml @@ -30,7 +30,7 @@ information. <sect>Binary format<p> -The standard binary output format generated by the linker for the Atari 5200 target +The binary output format generated by the linker for the Atari 5200 target is a cartridge image. It is of course possible to change this behaviour by using a modified startup file and linker config. @@ -219,10 +219,58 @@ you cannot use any of the following functions (and a few others): <sect>Other hints<p> +<sect1>CAR format<p> + AtariROMMaker (<url url="https://www.wudsn.com/index.php/productions-atari800/tools/atarirommaker"> ) can be used to create a <tt/.CAR/ file from the binary ROM image cc65 generates. This might be more convenient when working with emulators. +<sect1>Changing the splash screen<p> + +The 5200 ROM displays a splash screen at startup with the name of the +game and the copyright year. The year information has a 'Year-2000' +problem, the first two digits are fixed in the ROM and are always "19". + +<sect2>Changing the game name<p> + +The runtime library provides a default game name which is "cc65 +compiled". To change that, one has to link a file which puts data into +the "<tt/CARTNAME/" segment. + +For reference, here's the default version used by the cc65 libary: +<tscreen><verb> +.export __CART_NAME__: absolute = 1 +.macpack atari +.segment "CARTNAME" + scrcode " cc" + .byte '6' + 32, '5' + 32 ; use playfield 1 + scrcode " compiled" +</verb></tscreen> + +'<tt/__CART_NAME__/' needs to be defined in order that the linker is +satisfied and doesn't try to include the version of the runtime library. + +20 bytes are available in the <tt/CARTNAME/ segment (one line) for the +game/program name. + +<sect2>Changing the copyright year / changing the cartridge type<p> + +The century is hard-coded to 1900 by the ROM. + +There are two digits which can be changed. For example "92" will give +"1992" on the screen. + +The default used by the runtime library is + +<tscreen><verb> +.export __CART_YEAR__: absolute = 1 +.segment "CARTYEAR" + .byte '9' + 32,'8' + 32 ; "98", using playfield 1 +</verb></tscreen> + +If the second byte of the year in the <tt/CARTYEAR/ segment is 255, +the cartridge is seen as a 'diagnostic' cartridge, and the splash +screen and most of the other startup initializations are bypassed. <sect>License<p> From 98f8064b8311753fab468aaf2c1b6d2e339a4391 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 15 Feb 2021 08:50:34 -0500 Subject: [PATCH 0682/2710] Made the directory functions compatible with the Commander X16's DOS. It's directory listing's last line says, "mb free." --- include/cbm.h | 12 +++++++++++- libsrc/cbm/c_basin.s | 4 +++- libsrc/cbm/c_bsout.s | 6 ++++-- libsrc/cbm/cbm_dir.c | 9 +++++---- libsrc/cbm/readdir.c | 20 ++++++++++---------- 5 files changed, 33 insertions(+), 18 deletions(-) diff --git a/include/cbm.h b/include/cbm.h index 5bcef8e60..cceb76b1b 100644 --- a/include/cbm.h +++ b/include/cbm.h @@ -191,6 +191,8 @@ unsigned char cbm_k_acptr (void); unsigned char cbm_k_basin (void); void __fastcall__ cbm_k_bsout (unsigned char C); unsigned char __fastcall__ cbm_k_chkin (unsigned char FN); +unsigned char cbm_k_chrin (void); +void __fastcall__ cbm_k_chrout (unsigned char C); void __fastcall__ cbm_k_ciout (unsigned char C); unsigned char __fastcall__ cbm_k_ckout (unsigned char FN); void cbm_k_clall (void); @@ -295,7 +297,15 @@ unsigned char __fastcall__ cbm_readdir (unsigned char lfn, /* Reads one directory line into cbm_dirent structure. ** Returns 0 if reading directory-line was successful. ** Returns non-zero if reading directory failed, or no more file-names to read. -** Returns 2 on last line. Then, l_dirent->size = the number of "blocks free." +** Returns 2 on last line. Then, l_dirent->size = the number of "blocks free", +** "blocks used", or "mb free". Return codes: +** 0 = read file-name +** 1 = couldn't read directory +** 2 = read "blocks free", "blocks used", or "mb free" +** 3 = couldn't find start of file-name +** 4 = couldn't find end of file-name +** 5 = couldn't read file-type +** 6 = premature end of file */ void __fastcall__ cbm_closedir (unsigned char lfn); diff --git a/libsrc/cbm/c_basin.s b/libsrc/cbm/c_basin.s index da925a1a4..c2211e9ce 100644 --- a/libsrc/cbm/c_basin.s +++ b/libsrc/cbm/c_basin.s @@ -2,14 +2,16 @@ ; Ullrich von Bassewitz, 03.06.1999 ; ; unsigned char cbm_k_basin (void); +; unsigned char cbm_k_chrin (void); ; .include "cbm.inc" - .export _cbm_k_basin + .export _cbm_k_basin, _cbm_k_chrin _cbm_k_basin: +_cbm_k_chrin: jsr BASIN ldx #0 ; Clear high byte rts diff --git a/libsrc/cbm/c_bsout.s b/libsrc/cbm/c_bsout.s index 104878453..cec46bf90 100644 --- a/libsrc/cbm/c_bsout.s +++ b/libsrc/cbm/c_bsout.s @@ -2,10 +2,12 @@ ; Ullrich von Bassewitz, 03.06.1999 ; ; void __fastcall__ cbm_k_bsout (unsigned char C); +; void __fastcall__ cbm_k_chrout (unsigned char C); ; .include "cbm.inc" - .export _cbm_k_bsout + .export _cbm_k_bsout, _cbm_k_chrout -_cbm_k_bsout = BSOUT +_cbm_k_bsout := BSOUT +_cbm_k_chrout := CHROUT diff --git a/libsrc/cbm/cbm_dir.c b/libsrc/cbm/cbm_dir.c index 8f31c502a..4b8927f98 100644 --- a/libsrc/cbm/cbm_dir.c +++ b/libsrc/cbm/cbm_dir.c @@ -6,6 +6,7 @@ /* 2009-10-10 -- Version 0.3 */ /* 2011-04-07 -- Version 0.4, groepaz */ /* 2011-04-14 -- Version 0.5, Greg King */ +/* 2021-02-15 -- Version 0.6, Greg King */ /* Tested with floppy-drive and IDE64 devices. */ /* Not tested with messed (buggy) directory listings. */ @@ -29,7 +30,7 @@ unsigned char cbm_opendir (unsigned char lfn, unsigned char device, ...) va_list ap; const char* name = "$"; - /* The name used in cbm_open may optionally be passed */ + /* The name used in cbm_open() optionally may be passed */ if (__argsize__ == 4) { va_start (ap, device); name = va_arg (ap, const char*); @@ -76,9 +77,10 @@ unsigned char __fastcall__ cbm_readdir (unsigned char lfn, register struct cbm_d byte = cbm_k_basin(); switch (byte) { - - /* "B" BLOCKS FREE. */ + /* "B" BLOCKS FREE/USED. */ + /* "M" MB FREE. */ case 'b': + case 'm': /* Read until end; careless callers might call us again. */ while (!cbm_k_readst()) { cbm_k_basin(); @@ -168,7 +170,6 @@ unsigned char __fastcall__ cbm_readdir (unsigned char lfn, register struct cbm_d } rv = 0; - goto ret_val; } } diff --git a/libsrc/cbm/readdir.c b/libsrc/cbm/readdir.c index 8d6968977..1512edc4e 100644 --- a/libsrc/cbm/readdir.c +++ b/libsrc/cbm/readdir.c @@ -1,5 +1,7 @@ /* -** Ullrich von Bassewitz, 2012-05-30. Based on code by Groepaz. +** Based on code by Groepaz. +** 2012-05-30, Ullrich von Bassewitz +** 2021-02-15, Greg King */ @@ -52,12 +54,14 @@ struct dirent* __fastcall__ readdir (register DIR* dir) /* Bump the directory offset and include the bytes for line-link and size */ dir->off += count + 4; - /* End of directory is reached if the buffer contains "blocks free". It is - ** sufficient here to check for the leading 'b'. buffer will contain at - ** least one byte if we come here. + /* End of directory is reached if the buffer contains "blocks free/used" or + ** "mb free.". It is sufficient here to check for the leading 'b' and 'm'. + ** buffer will contain at least one byte if we come here. */ - if (buffer[0] == 'b') { - goto exitpoint; + switch (buffer[0]) { + case 'b': + case 'm': + goto exitpoint; } /* Parse the buffer for the filename and file type */ @@ -67,7 +71,6 @@ struct dirent* __fastcall__ readdir (register DIR* dir) b = buffer; while (i < count) { switch (s) { - case 0: /* Searching for start of file name */ if (*b == '"') { @@ -127,6 +130,3 @@ struct dirent* __fastcall__ readdir (register DIR* dir) exitpoint: return 0; } - - - From b12758fe5355b62285675628a043fe0625fff47b Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Tue, 16 Feb 2021 14:07:47 +0100 Subject: [PATCH 0683/2710] include/atari.h: fix typo in _setcolor() prototype --- include/atari.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/include/atari.h b/include/atari.h index f5916a284..86c7b9706 100644 --- a/include/atari.h +++ b/include/atari.h @@ -6,10 +6,11 @@ /* */ /* */ /* */ -/* (C) 2000-2019 Mark Keates <markk@dendrite.co.uk> */ +/* (C) 2000-2021 Mark Keates <markk@dendrite.co.uk> */ /* Freddy Offenga <taf_offenga@yahoo.com> */ /* Christian Groessler <chris@groessler.org> */ /* Bill Kendrick <nbs@sonic.net> */ +/* et al. */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ @@ -219,7 +220,7 @@ /* Color register functions */ /*****************************************************************************/ -extern void __fastcall__ _setcolor (unsigned char color_reg, unsigned char hue, unsigned char luminace); +extern void __fastcall__ _setcolor (unsigned char color_reg, unsigned char hue, unsigned char luminance); extern void __fastcall__ _setcolor_low (unsigned char color_reg, unsigned char color_value); extern unsigned char __fastcall__ _getcolor (unsigned char color_reg); From 3a7282544e0a818bf8fe39970df912a8eb4ed87f Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Wed, 17 Feb 2021 10:49:53 +0100 Subject: [PATCH 0684/2710] Moved convert.system from geos-apple to apple2[enh]. The target util convert.system is to be used in conjunction with GEOS on the Apple II but has to be built as an "ordinary" Apple II program. The way the cc65 library build system is designed there's no way to define dependencies between targets. The solution used so far was to explicitly trigger a build of the target 'apple2enh' from the target 'geos-apple'. However, that approach tends to break parallel builds which may be in the middle of building 'appple2enh' at the time it is triggered by 'geos-apple'. There might be ways to get this fixed - but the the cc65 library build systrem is already (more than) complex enough, so I really don't want to add anything special to it. On the other hand there are easier ways (outside the scope of cc65) to archive what convert.system does so I don't presume convert.system to be actually used - it's more a reference type of thing. Putting all facts together the decision was easy: Just move convert.system from the target it is used with to the target(s) it is built with. --- libsrc/Makefile | 3 +-- libsrc/apple2/targetutil/Makefile.inc | 12 ++++++++++-- libsrc/{geos-apple => apple2}/targetutil/convert.c | 0 libsrc/geos-apple/targetutil/Makefile.inc | 14 -------------- 4 files changed, 11 insertions(+), 18 deletions(-) rename libsrc/{geos-apple => apple2}/targetutil/convert.c (100%) delete mode 100644 libsrc/geos-apple/targetutil/Makefile.inc diff --git a/libsrc/Makefile b/libsrc/Makefile index d9ddb3ccd..3fac513af 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -133,8 +133,7 @@ MKINC = $(GEOS) \ TARGETUTIL = apple2 \ apple2enh \ - atari \ - geos-apple + atari GEOSDIRS = common \ conio \ diff --git a/libsrc/apple2/targetutil/Makefile.inc b/libsrc/apple2/targetutil/Makefile.inc index d9d727b0a..b53139a3d 100644 --- a/libsrc/apple2/targetutil/Makefile.inc +++ b/libsrc/apple2/targetutil/Makefile.inc @@ -1,9 +1,17 @@ -DEPS += ../libwrk/$(TARGET)/loader.d +DEPS += ../libwrk/$(TARGET)/convert.d \ + ../libwrk/$(TARGET)/loader.d + +../libwrk/$(TARGET)/convert.o: $(SRCDIR)/targetutil/convert.c | ../libwrk/$(TARGET) + $(COMPILE_recipe) ../libwrk/$(TARGET)/loader.o: $(SRCDIR)/targetutil/loader.s | ../libwrk/$(TARGET) $(ASSEMBLE_recipe) +../target/$(TARGET)/util/convert.system: ../libwrk/$(TARGET)/convert.o ../lib/$(TARGET).lib | ../target/$(TARGET)/util + $(LD65) -o $@ -C $(TARGET)-system.cfg $^ + ../target/$(TARGET)/util/loader.system: ../libwrk/$(TARGET)/loader.o $(SRCDIR)/targetutil/loader.cfg | ../target/$(TARGET)/util $(LD65) -o $@ -C $(filter %.cfg,$^) $(filter-out %.cfg,$^) -$(TARGET): ../target/$(TARGET)/util/loader.system +$(TARGET): ../target/$(TARGET)/util/convert.system \ + ../target/$(TARGET)/util/loader.system diff --git a/libsrc/geos-apple/targetutil/convert.c b/libsrc/apple2/targetutil/convert.c similarity index 100% rename from libsrc/geos-apple/targetutil/convert.c rename to libsrc/apple2/targetutil/convert.c diff --git a/libsrc/geos-apple/targetutil/Makefile.inc b/libsrc/geos-apple/targetutil/Makefile.inc deleted file mode 100644 index 3d366f913..000000000 --- a/libsrc/geos-apple/targetutil/Makefile.inc +++ /dev/null @@ -1,14 +0,0 @@ -DEPS += ../libwrk/$(TARGET)/convert.d - -../libwrk/$(TARGET)/convert.o: TARGET = apple2enh - -../libwrk/$(TARGET)/convert.o: $(SRCDIR)/targetutil/convert.c | ../libwrk/$(TARGET) - $(COMPILE_recipe) - -../lib/apple2enh.lib: - @$(MAKE) --no-print-directory apple2enh - -../target/$(TARGET)/util/convert.system: ../libwrk/$(TARGET)/convert.o ../lib/apple2enh.lib | ../target/$(TARGET)/util - $(LD65) -o $@ -C apple2enh-system.cfg $^ - -$(TARGET): ../target/$(TARGET)/util/convert.system From 55ae350fedaf1769ecc766cfb9dc4fa163d38392 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 13 Feb 2021 22:02:52 +0800 Subject: [PATCH 0685/2710] Fixed 'Opt_staxspidx' for the invariant of 'staxspidx'. --- src/cc65/coptstop.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 77b79281b..01d0b039c 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -453,6 +453,7 @@ static unsigned Opt_staxspidx (StackOpData* D) /* Optimize the staxspidx sequence */ { CodeEntry* X; + const char* Arg = 0; /* Check if we're using a register variable */ if (!IsRegVar (D)) { @@ -469,7 +470,7 @@ static unsigned Opt_staxspidx (StackOpData* D) if (RegValIsKnown (D->OpEntry->RI->In.RegY)) { /* Value of Y is known */ - const char* Arg = MakeHexArg (D->OpEntry->RI->In.RegY + 1); + Arg = MakeHexArg (D->OpEntry->RI->In.RegY + 1); X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, D->OpEntry->LI); } else { X = NewCodeEntry (OP65_INY, AM65_IMP, 0, 0, D->OpEntry->LI); @@ -478,7 +479,7 @@ static unsigned Opt_staxspidx (StackOpData* D) if (RegValIsKnown (D->OpEntry->RI->In.RegX)) { /* Value of X is known */ - const char* Arg = MakeHexArg (D->OpEntry->RI->In.RegX); + Arg = MakeHexArg (D->OpEntry->RI->In.RegX); X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, D->OpEntry->LI); } else { /* Value unknown */ @@ -493,7 +494,12 @@ static unsigned Opt_staxspidx (StackOpData* D) /* If we remove staxspidx, we must restore the Y register to what the ** function would return. */ - X = NewCodeEntry (OP65_LDY, AM65_IMM, "$00", 0, D->OpEntry->LI); + if (RegValIsKnown (D->OpEntry->RI->In.RegY)) { + Arg = MakeHexArg (D->OpEntry->RI->In.RegY); + X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, D->OpEntry->LI); + } else { + X = NewCodeEntry (OP65_DEY, AM65_IMP, 0, 0, D->OpEntry->LI); + } InsertEntry (D, X, D->OpIndex+5); /* Remove the push and the call to the staxspidx function */ From 131f96eb1eda192623b1b3e323a2a0739645b641 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 13 Feb 2021 22:11:01 +0800 Subject: [PATCH 0686/2710] Moved testcase for issue #1397. --- test/misc/Makefile | 8 -------- test/{misc => val}/bug1397.c | 0 2 files changed, 8 deletions(-) rename test/{misc => val}/bug1397.c (100%) diff --git a/test/misc/Makefile b/test/misc/Makefile index 3142dcfb8..7a1b82d5f 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -108,14 +108,6 @@ $(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) -# this one fails with optimizations, without OptBoolTrans it works -$(WORKDIR)/bug1397.$1.$2.prg: bug1397.c | $(WORKDIR) - $(if $(QUIET),echo misc/bug1397.$1.$2.prg) - $(CC65) -O --disable-opt OptBoolTrans -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) - $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) - $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) - $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) - # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(if $(QUIET),echo misc/endless.$1.$2.prg) diff --git a/test/misc/bug1397.c b/test/val/bug1397.c similarity index 100% rename from test/misc/bug1397.c rename to test/val/bug1397.c From 7f05bd797f92564b230346d6cceb97260f0d0353 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 21 Feb 2021 16:36:29 +0800 Subject: [PATCH 0687/2710] Now the compiler tracks code that has no observable effect. --- src/cc65/assignment.c | 12 +++++++ src/cc65/expr.c | 77 +++++++++++++++++++++++++++++++++++++++---- src/cc65/exprdesc.h | 14 ++++++++ src/cc65/loadexpr.c | 4 +++ src/cc65/shiftexpr.c | 3 ++ src/cc65/stdfunc.c | 9 +++++ src/cc65/stmt.c | 11 ++++--- 7 files changed, 119 insertions(+), 11 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index e6d1e4526..0a8bc2b21 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -605,6 +605,12 @@ void OpAssign (const GenDesc* Gen, ExprDesc* Expr, const char* Op) /* Normal straight 'op=' */ OpAssignArithmetic (Gen, Expr, Op); } + + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; + + /* Propagate viral flags */ + ED_PropagateFrom (Expr, &Expr2); } @@ -725,4 +731,10 @@ void OpAddSubAssign (const GenDesc* Gen, ExprDesc *Expr, const char* Op) /* Expression is an rvalue in the primary now */ ED_FinalizeRValLoad (Expr); + + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; + + /* Propagate viral flags */ + ED_PropagateFrom (Expr, &Expr2); } diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 0275e61a3..621f16c15 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -649,6 +649,9 @@ void DoDeferred (unsigned Flags, ExprDesc* Expr) /* Sufficient to pop the processor flags */ AddCodeLine ("plp"); } + + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; } @@ -822,6 +825,9 @@ static unsigned FunctionArgList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) } } + /* Propagate viral flags */ + ED_PropagateFrom (ED, &Expr); + /* Check for end of argument list */ if (CurTok.Tok != TOK_COMMA) { break; @@ -1064,6 +1070,9 @@ static void FunctionCall (ExprDesc* Expr) } Expr->Type = ReturnType; + + /* We assume all function calls had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; } @@ -1273,7 +1282,7 @@ static void Primary (ExprDesc* E) case TOK_ASM: /* ASM statement */ AsmStatement (); - E->Flags = E_RTYPE_RVAL | E_EVAL_MAYBE_UNUSED; + E->Flags = E_RTYPE_RVAL | E_EVAL_MAYBE_UNUSED | E_SIDE_EFFECTS; E->Type = type_void; break; @@ -1658,6 +1667,9 @@ static void PreInc (ExprDesc* Expr) /* Result is an expression, no reference */ ED_FinalizeRValLoad (Expr); + + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; } @@ -1685,6 +1697,9 @@ static void PreDec (ExprDesc* Expr) /* Result is an expression, no reference */ ED_FinalizeRValLoad (Expr); + + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; } @@ -1721,6 +1736,9 @@ static void PostInc (ExprDesc* Expr) LoadExpr (CF_NONE, Expr); AddCodeLine ("inc %s", ED_GetLabelName (Expr, 0)); + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; + } else { if (ED_IsLocPrimaryOrExpr (Expr)) { @@ -1728,6 +1746,9 @@ static void PostInc (ExprDesc* Expr) /* Do the increment */ DoInc (Expr, OA_NEED_OLD); + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; + } else { /* Defer the increment until after the value of this expression is used */ @@ -1771,6 +1792,9 @@ static void PostDec (ExprDesc* Expr) LoadExpr (CF_NONE, Expr); AddCodeLine ("dec %s", ED_GetLabelName (Expr, 0)); + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; + } else { if (ED_IsLocPrimaryOrExpr (Expr)) { @@ -1778,6 +1802,9 @@ static void PostDec (ExprDesc* Expr) /* Do the decrement */ DoDec (Expr, OA_NEED_OLD); + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; + } else { /* Defer the decrement until after the value of this expression is used */ @@ -2238,6 +2265,9 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ /* We have an rvalue in the primary now */ ED_FinalizeRValLoad (Expr); } + + /* Propagate viral flags */ + ED_PropagateFrom (Expr, &Expr2); } } @@ -2659,6 +2689,9 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ /* Result type is always boolean */ Done: Expr->Type = type_bool; + + /* Propagate viral flags */ + ED_PropagateFrom (Expr, &Expr2); } } @@ -3075,6 +3108,9 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) /* Condition code not set */ ED_MarkAsUntested (Expr); + + /* Propagate viral flags */ + ED_PropagateFrom (Expr, &Expr2); } @@ -3352,6 +3388,9 @@ static void parsesub (ExprDesc* Expr) /* Condition code not set */ ED_MarkAsUntested (Expr); + + /* Propagate viral flags */ + ED_PropagateFrom (Expr, &Expr2); } @@ -3603,6 +3642,12 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) } } } + + /* Propagate viral flags */ + if ((Expr->Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + ED_PropagateFrom (Expr, &Expr2); + } + } /* Last expression */ @@ -3768,6 +3813,11 @@ static void hieOr (ExprDesc *Expr) } } + /* Propagate viral flags */ + if ((Expr->Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + ED_PropagateFrom (Expr, &Expr2); + } + } /* Convert to bool */ @@ -4059,6 +4109,14 @@ static void hieQuest (ExprDesc* Expr) /* Setup the target expression */ Expr->Type = ResultType; + + /* Propagate viral flags */ + if ((Expr2.Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + ED_PropagateFrom (Expr, &Expr2); + } + if ((Expr3.Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + ED_PropagateFrom (Expr, &Expr3); + } } } @@ -4140,22 +4198,29 @@ void hie0 (ExprDesc *Expr) ** emit a warning. */ GetCodePos (&End); - if (!ED_MayHaveNoEffect (Expr) && - CodeRangeIsEmpty (&Start, &End) && - IS_Get (&WarnNoEffect) && + if (!ED_MayHaveNoEffect (Expr) && + (CodeRangeIsEmpty (&Start, &End) || + (Expr->Flags & E_SIDE_EFFECTS) == 0) && + IS_Get (&WarnNoEffect) && PrevErrorCount == ErrorCount) { - Warning ("Expression result unused"); + Warning ("Left-hand operand of comma expression has no effect"); } PrevErrorCount = ErrorCount; /* Remember the current code position */ GetCodePos (&Start); + /* Keep viral flags propagated from subexpressions */ + Flags |= Expr->Flags & E_MASK_VIRAL; + /* Reset the expression */ ED_Init (Expr); - Expr->Flags = Flags; + Expr->Flags = Flags & ~E_MASK_VIRAL; NextToken (); hie1 (Expr); + + /* Propagate viral flags */ + Expr->Flags |= Flags & E_MASK_VIRAL; } } diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index 13eb36e5e..f1f121cc4 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -125,6 +125,7 @@ enum { E_LOADED = 0x1000, /* Expression is loaded in primary */ E_CC_SET = 0x2000, /* Condition codes are set */ E_HAVE_MARKS = 0x4000, /* Code marks are valid */ + E_SIDE_EFFECTS = 0x8000, /* Expression has had side effects */ /* Optimization hints */ E_MASK_NEED = 0x030000, @@ -181,6 +182,9 @@ enum { /* Expression result must be known to the compiler and generate no code to load */ E_EVAL_C_CONST = E_EVAL_COMPILER_KNOWN | E_EVAL_NO_CODE, + /* Flags to combine from subexpressions */ + E_MASK_VIRAL = E_SIDE_EFFECTS, + /* Flags to keep in subexpressions of most operations other than ternary */ E_MASK_KEEP_SUBEXPR = E_MASK_EVAL, @@ -467,6 +471,16 @@ INLINE int ED_MayHaveNoEffect (const ExprDesc* Expr) # define ED_MayHaveNoEffect(Expr) (((Expr)->Flags & E_EVAL_MAYBE_UNUSED) == E_EVAL_MAYBE_UNUSED) #endif +#if defined(HAVE_INLINE) +INLINE void ED_PropagateFrom (ExprDesc* Expr, const ExprDesc* SubExpr) +/* Propagate viral flags from subexpression */ +{ + Expr->Flags |= SubExpr->Flags & E_MASK_VIRAL; +} +#else +# define ED_PropagateFrom(Expr, SubExpr) (void)((Expr)->Flags |= (SubExpr)->Flags & E_MASK_VIRAL) +#endif + #if defined(HAVE_INLINE) INLINE int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr) /* Return true if the expression is E_LOC_PRIMARY or E_LOC_EXPR */ diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index 4b7f8e279..ccd694e35 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -277,4 +277,8 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) } } + if (ED_IsLVal (Expr) && IsQualVolatile (Expr->Type)) { + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; + } } diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c index f7385ace1..eb879a475 100644 --- a/src/cc65/shiftexpr.c +++ b/src/cc65/shiftexpr.c @@ -237,5 +237,8 @@ MakeRVal: /* Set the type of the result */ Expr->Type = ResultType; + + /* Propagate from subexpressions */ + Expr->Flags |= Expr2.Flags & E_MASK_VIRAL; } } diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index 37566a455..5ed5ce671 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -185,6 +185,9 @@ static void ParseArg (ArgDesc* Arg, const Type* Type, ExprDesc* Expr) /* Use the type of the argument for the push */ Arg->Flags |= TypeOf (Arg->Expr.Type); + + /* Propagate from subexpressions */ + Expr->Flags |= Arg->Expr.Flags & E_MASK_VIRAL; } @@ -1365,6 +1368,9 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ExitPoint: /* We expect the closing brace */ ConsumeRParen (); + + /* Propagate from subexpressions */ + Expr->Flags |= Arg.Flags & E_MASK_VIRAL; } @@ -1405,4 +1411,7 @@ void HandleStdFunc (int Index, FuncDesc* F, ExprDesc* lval) /* Call the handler function */ D->Handler (F, lval); + + /* We assume all function calls had side effects */ + lval->Flags |= E_SIDE_EFFECTS; } diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index 022a8475c..a08197c09 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -613,12 +613,13 @@ static void Statement (int* PendingToken) ** void, emit a warning. */ GetCodePos (&End); - if (!ED_YetToLoad (&Expr) && - !ED_MayHaveNoEffect (&Expr) && - CodeRangeIsEmpty (&Start, &End) && - IS_Get (&WarnNoEffect) && + if (!ED_YetToLoad (&Expr) && + !ED_MayHaveNoEffect (&Expr) && + (CodeRangeIsEmpty (&Start, &End) || + (Expr.Flags & E_SIDE_EFFECTS) == 0) && + IS_Get (&WarnNoEffect) && PrevErrorCount == ErrorCount) { - Warning ("Expression result unused"); + Warning ("Statement has no effect"); } CheckSemi (PendingToken); } From acb5af539fd5134adebb770c9ca0500195fad5ba Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 21 Feb 2021 14:02:49 -0500 Subject: [PATCH 0688/2710] Fixed the ld65 configure files for the cx16 platform. * Added ONCE and INIT segments to the Assembly configuration. * Made more segments optional in the standard and the banked configurations. That will make them a little easier to use with Assembly-source programs. --- cfg/cx16-asm.cfg | 4 +- cfg/cx16-bank.cfg | 100 ++++++++++++++++++++++------------------------ cfg/cx16.cfg | 12 +++--- 3 files changed, 57 insertions(+), 59 deletions(-) diff --git a/cfg/cx16-asm.cfg b/cfg/cx16-asm.cfg index c3c08aec3..92c9d96f7 100644 --- a/cfg/cx16-asm.cfg +++ b/cfg/cx16-asm.cfg @@ -22,9 +22,11 @@ SEGMENTS { EXEHDR: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; LOWCODE: load = MAIN, type = ro, optional = yes; + ONCE: load = MAIN, type = ro, optional = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - BSS: load = MAIN, type = bss, define = yes; + INIT: load = MAIN, type = bss, optional = yes; + BSS: load = MAIN, type = bss, define = yes; } FEATURES { CONDES: type = constructor, diff --git a/cfg/cx16-bank.cfg b/cfg/cx16-bank.cfg index 36b0edb02..d3c2c02ae 100644 --- a/cfg/cx16-bank.cfg +++ b/cfg/cx16-bank.cfg @@ -16,8 +16,6 @@ MEMORY { HEADER: file = %O, define = yes, start = %S, size = $000D; MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __ONCE_RUN__ - __STACKSIZE__; -# BRAM00ADDR: file = "%O.00", start = __BANKRAMSTART__ - 2, size = $0002; -# BRAM00: file = "%O.00", start = __BANKRAMSTART__, size = __BANKRAMSIZE__; BRAM01ADDR: file = "%O.01", start = __BANKRAMSTART__ - 2, size = $0002; BRAM01: file = "%O.01", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $01; BRAM02ADDR: file = "%O.02", start = __BANKRAMSTART__ - 2, size = $0002; @@ -36,64 +34,62 @@ MEMORY { BRAM08: file = "%O.08", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $08; BRAM09ADDR: file = "%O.09", start = __BANKRAMSTART__ - 2, size = $0002; BRAM09: file = "%O.09", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $09; - BRAM0AADDR: file = "%O.0a", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM0A: file = "%O.0a", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0A; - BRAM0BADDR: file = "%O.0b", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM0B: file = "%O.0b", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0B; - BRAM0CADDR: file = "%O.0c", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM0C: file = "%O.0c", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0C; - BRAM0DADDR: file = "%O.0d", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM0D: file = "%O.0d", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0D; - BRAM0EADDR: file = "%O.0e", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM0E: file = "%O.0e", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0E; - BRAM0FADDR: file = "%O.0f", start = __BANKRAMSTART__ - 2, size = $0002; - BRAM0F: file = "%O.0f", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0F; + BRAM0AADDR: file = "%O.0A", start = __BANKRAMSTART__ - 2, size = $0002; + BRAM0A: file = "%O.0A", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0A; + BRAM0BADDR: file = "%O.0B", start = __BANKRAMSTART__ - 2, size = $0002; + BRAM0B: file = "%O.0B", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0B; + BRAM0CADDR: file = "%O.0C", start = __BANKRAMSTART__ - 2, size = $0002; + BRAM0C: file = "%O.0C", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0C; + BRAM0DADDR: file = "%O.0D", start = __BANKRAMSTART__ - 2, size = $0002; + BRAM0D: file = "%O.0D", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0D; + BRAM0EADDR: file = "%O.0E", start = __BANKRAMSTART__ - 2, size = $0002; + BRAM0E: file = "%O.0E", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0E; + BRAM0FADDR: file = "%O.0F", start = __BANKRAMSTART__ - 2, size = $0002; + BRAM0F: file = "%O.0F", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0F; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; - EXTZP: load = ZP, type = zp, optional = yes; + EXTZP: load = ZP, type = zp, optional = yes; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; - STARTUP: load = MAIN, type = ro; - LOWCODE: load = MAIN, type = ro, optional = yes; + STARTUP: load = MAIN, type = ro, optional = yes; + 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; - BSS: load = BSS, type = bss, define = yes; -# BRAM00ADDR: load = BRAM00ADDR, type = ro, optional = yes; -# BANKRAM00: load = BRAM00, type = rw, define = yes, optional = yes; - BRAM01ADDR: load = BRAM01ADDR, type = ro, optional = yes; - BANKRAM01: load = BRAM01, type = rw, define = yes, optional = yes; - BRAM02ADDR: load = BRAM02ADDR, type = ro, optional = yes; - BANKRAM02: load = BRAM02, type = rw, define = yes, optional = yes; - BRAM03ADDR: load = BRAM03ADDR, type = ro, optional = yes; - BANKRAM03: load = BRAM03, type = rw, define = yes, optional = yes; - BRAM04ADDR: load = BRAM04ADDR, type = ro, optional = yes; - BANKRAM04: load = BRAM04, type = rw, define = yes, optional = yes; - BRAM05ADDR: load = BRAM05ADDR, type = ro, optional = yes; - BANKRAM05: load = BRAM05, type = rw, define = yes, optional = yes; - BRAM06ADDR: load = BRAM06ADDR, type = ro, optional = yes; - BANKRAM06: load = BRAM06, type = rw, define = yes, optional = yes; - BRAM07ADDR: load = BRAM07ADDR, type = ro, optional = yes; - BANKRAM07: load = BRAM07, type = rw, define = yes, optional = yes; - BRAM08ADDR: load = BRAM08ADDR, type = ro, optional = yes; - BANKRAM08: load = BRAM08, type = rw, define = yes, optional = yes; - BRAM09ADDR: load = BRAM09ADDR, type = ro, optional = yes; - BANKRAM09: load = BRAM09, type = rw, define = yes, optional = yes; - BRAM0AADDR: load = BRAM0AADDR, type = ro, optional = yes; - BANKRAM0A: load = BRAM0A, type = rw, define = yes, optional = yes; - BRAM0BADDR: load = BRAM0BADDR, type = ro, optional = yes; - BANKRAM0B: load = BRAM0B, type = rw, define = yes, optional = yes; - BRAM0CADDR: load = BRAM0CADDR, type = ro, optional = yes; - BANKRAM0C: load = BRAM0C, type = rw, define = yes, optional = yes; - BRAM0DADDR: load = BRAM0DADDR, type = ro, optional = yes; - BANKRAM0D: load = BRAM0D, type = rw, define = yes, optional = yes; - BRAM0EADDR: load = BRAM0EADDR, type = ro, optional = yes; - BANKRAM0E: load = BRAM0E, type = rw, define = yes, optional = yes; - BRAM0FADDR: load = BRAM0FADDR, type = ro, optional = yes; - BANKRAM0F: load = BRAM0F, type = rw, define = yes, optional = yes; + INIT: load = MAIN, type = rw, optional = yes; + ONCE: load = MAIN, type = ro, define = yes; + BSS: load = BSS, type = bss, define = yes; + BRAM01ADDR: load = BRAM01ADDR, type = ro, optional = yes; + BANKRAM01: load = BRAM01, type = rw, optional = yes, define = yes; + BRAM02ADDR: load = BRAM02ADDR, type = ro, optional = yes; + BANKRAM02: load = BRAM02, type = rw, optional = yes, define = yes; + BRAM03ADDR: load = BRAM03ADDR, type = ro, optional = yes; + BANKRAM03: load = BRAM03, type = rw, optional = yes, define = yes; + BRAM04ADDR: load = BRAM04ADDR, type = ro, optional = yes; + BANKRAM04: load = BRAM04, type = rw, optional = yes, define = yes; + BRAM05ADDR: load = BRAM05ADDR, type = ro, optional = yes; + BANKRAM05: load = BRAM05, type = rw, optional = yes, define = yes; + BRAM06ADDR: load = BRAM06ADDR, type = ro, optional = yes; + BANKRAM06: load = BRAM06, type = rw, optional = yes, define = yes; + BRAM07ADDR: load = BRAM07ADDR, type = ro, optional = yes; + BANKRAM07: load = BRAM07, type = rw, optional = yes, define = yes; + BRAM08ADDR: load = BRAM08ADDR, type = ro, optional = yes; + BANKRAM08: load = BRAM08, type = rw, optional = yes, define = yes; + BRAM09ADDR: load = BRAM09ADDR, type = ro, optional = yes; + BANKRAM09: load = BRAM09, type = rw, optional = yes, define = yes; + BRAM0AADDR: load = BRAM0AADDR, type = ro, optional = yes; + BANKRAM0A: load = BRAM0A, type = rw, optional = yes, define = yes; + BRAM0BADDR: load = BRAM0BADDR, type = ro, optional = yes; + BANKRAM0B: load = BRAM0B, type = rw, optional = yes, define = yes; + BRAM0CADDR: load = BRAM0CADDR, type = ro, optional = yes; + BANKRAM0C: load = BRAM0C, type = rw, optional = yes, define = yes; + BRAM0DADDR: load = BRAM0DADDR, type = ro, optional = yes; + BANKRAM0D: load = BRAM0D, type = rw, optional = yes, define = yes; + BRAM0EADDR: load = BRAM0EADDR, type = ro, optional = yes; + BANKRAM0E: load = BRAM0E, type = rw, optional = yes, define = yes; + BRAM0FADDR: load = BRAM0FADDR, type = ro, optional = yes; + BANKRAM0F: load = BRAM0F, type = rw, optional = yes, define = yes; } FEATURES { CONDES: type = constructor, diff --git a/cfg/cx16.cfg b/cfg/cx16.cfg index 72fc2fe91..4b6025fb6 100644 --- a/cfg/cx16.cfg +++ b/cfg/cx16.cfg @@ -16,17 +16,17 @@ MEMORY { } SEGMENTS { ZEROPAGE: load = ZP, type = zp; - EXTZP: load = ZP, type = zp, optional = yes; + EXTZP: load = ZP, type = zp, optional = yes; LOADADDR: load = LOADADDR, type = ro; EXEHDR: load = HEADER, type = ro; - STARTUP: load = MAIN, type = ro; - LOWCODE: load = MAIN, type = ro, optional = yes; + STARTUP: load = MAIN, type = ro, optional = yes; + 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; - BSS: load = BSS, type = bss, define = yes; + INIT: load = MAIN, type = rw, optional = yes; + ONCE: load = MAIN, type = ro, define = yes; + BSS: load = BSS, type = bss, define = yes; } FEATURES { CONDES: type = constructor, From bb3a2db5a03fb258d8994b70916680b95e746056 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 21 Feb 2021 15:44:59 -0500 Subject: [PATCH 0689/2710] Fixed an ambiguous statement about CONDES segments. --- doc/ld65.sgml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/ld65.sgml b/doc/ld65.sgml index c2e990dc2..538948fc0 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -1009,7 +1009,8 @@ The <tt/CONDES/ feature has several attributes: <tag><tt>segment</tt></tag> This attribute tells the linker into which segment the table should be - placed. If the segment does not exist, it is created. + placed. If the segment does not exist in any object file, it is created + in the final object code. <tag><tt>type</tt></tag> @@ -1058,7 +1059,7 @@ The <tt/CONDES/ feature has several attributes: Without specifying the <tt/CONDES/ feature, the linker will not create any tables, even if there are <tt/condes/ entries in the object files. -For more information see the <tt/.CONDES/ command in the <url +For more information, see the <tt/.CONDES/ command in the <url url="ca65.html" name="ca65 manual">. From 40b26f406061fc0b05da571da2b6dee3464b2390 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Feb 2021 13:47:32 +0800 Subject: [PATCH 0690/2710] Now the compiler removes code that has no observable effect. --- src/cc65/expr.c | 22 ++++++++++++++-------- src/cc65/stmt.c | 23 ++++++++++++++--------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 621f16c15..d12bc1519 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -4194,19 +4194,25 @@ void hie0 (ExprDesc *Expr) /* Append deferred inc/dec at sequence point */ DoDeferred (SQP_KEEP_NONE, Expr); - /* If the expression didn't generate code or isn't cast to type void, - ** emit a warning. + /* If the expression has no observable effect and isn't cast to type + ** void, emit a warning and remove useless code if any. */ GetCodePos (&End); - if (!ED_MayHaveNoEffect (Expr) && - (CodeRangeIsEmpty (&Start, &End) || - (Expr->Flags & E_SIDE_EFFECTS) == 0) && - IS_Get (&WarnNoEffect) && - PrevErrorCount == ErrorCount) { - Warning ("Left-hand operand of comma expression has no effect"); + if (CodeRangeIsEmpty (&Start, &End) || + (Expr->Flags & E_SIDE_EFFECTS) == 0) { + + if (!ED_MayHaveNoEffect (Expr) && + IS_Get (&WarnNoEffect) && + PrevErrorCount == ErrorCount) { + Warning ("Left-hand operand of comma expression has no effect"); + } + + /* Remove code with no effect */ + RemoveCode (&Start); } PrevErrorCount = ErrorCount; + /* Remember the current code position */ GetCodePos (&Start); diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index a08197c09..7355e88a8 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -609,18 +609,23 @@ static void Statement (int* PendingToken) Expr.Flags |= E_NEED_NONE; Expression0 (&Expr); - /* If the statement didn't generate code, and is not of type - ** void, emit a warning. + /* If the statement has no observable effect and isn't cast to type + ** void, emit a warning and remove useless code if any. */ GetCodePos (&End); - if (!ED_YetToLoad (&Expr) && - !ED_MayHaveNoEffect (&Expr) && - (CodeRangeIsEmpty (&Start, &End) || - (Expr.Flags & E_SIDE_EFFECTS) == 0) && - IS_Get (&WarnNoEffect) && - PrevErrorCount == ErrorCount) { - Warning ("Statement has no effect"); + if (CodeRangeIsEmpty (&Start, &End) || + (Expr.Flags & E_SIDE_EFFECTS) == 0) { + + if (!ED_MayHaveNoEffect (&Expr) && + IS_Get (&WarnNoEffect) && + PrevErrorCount == ErrorCount) { + Warning ("Statement has no effect"); + } + + /* Remove code with no effect */ + RemoveCode (&Start); } + CheckSemi (PendingToken); } From eadaf2fef845afdc6b8540af4c558444d8c7315d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 21 Feb 2021 16:43:46 +0800 Subject: [PATCH 0691/2710] Fixed deferred post-inc and post-dec in unevaluated context such as 'sizeof(i++)'. --- src/cc65/expr.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 751014af3..67d64e138 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -376,6 +376,9 @@ void DoneDeferredOps (void) static void DeferInc (const ExprDesc* Expr) /* Defer the post-inc and put it in a queue */ { + if (ED_IsUneval (Expr)) { + return; + } DeferredOp* Op = xmalloc (sizeof (DeferredOp)); memcpy (&Op->Expr, Expr, sizeof (ExprDesc)); Op->OpType = DOT_INC; @@ -387,6 +390,9 @@ static void DeferInc (const ExprDesc* Expr) static void DeferDec (const ExprDesc* Expr) /* Defer the post-dec and put it in a queue */ { + if (ED_IsUneval (Expr)) { + return; + } DeferredOp* Op = xmalloc (sizeof (DeferredOp)); memcpy (&Op->Expr, Expr, sizeof (ExprDesc)); Op->OpType = DOT_DEC; From 24985f1b33936841350322a3f7aa580f53c6a587 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Feb 2021 12:00:10 +0800 Subject: [PATCH 0692/2710] Added testcase for the "deferred ops in unevaluated context" bug. --- test/val/uneval.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 test/val/uneval.c diff --git a/test/val/uneval.c b/test/val/uneval.c new file mode 100644 index 000000000..50e00973a --- /dev/null +++ b/test/val/uneval.c @@ -0,0 +1,46 @@ +/* + Copyright 2021, The cc65 Authors + + This software is provided "as-is", without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications; and, to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated, but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Test of deferred operations in unevaluated context resulted from 'sizeof' and + short-circuited code-paths in AND, OR and tenary operations. + + https://github.com/cc65/cc65/issues/1406 +*/ + +#include <stdio.h> + +int main(void) +{ + int i = 0; + int j = 0; + + sizeof(i++ | j--); + 0 && (i++ | j--); + 1 || (i++ | j--); + 0 ? i++ | j-- : 0; + 1 ? 0 : i++ | j--; + + if (i != 0 || j != 0) { + printf("i = %d, j = %d\n", i, j); + printf("Failures: %d\n", i - j); + } + return i - j; +} From 81d6321cd7a725009f4537d990d3f1156b8c8a51 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 29 Oct 2020 21:12:48 +0800 Subject: [PATCH 0693/2710] Fixed internal representation of calculated constant results. Minor clean-up. --- src/cc65/expr.c | 66 ++++++++++++++++++++++++++++++++++++++------- src/cc65/testexpr.c | 2 +- 2 files changed, 57 insertions(+), 11 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 67d64e138..4f8a09bec 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -251,6 +251,42 @@ static unsigned typeadjust (ExprDesc* lhs, ExprDesc* rhs, int NoPush) +static void LimitExprValue (ExprDesc* Expr) +/* Limit the constant value of the expression to the range of its type */ +{ + switch (GetUnderlyingTypeCode (Expr->Type)) { + case T_INT: + case T_SHORT: + Expr->IVal = (int16_t)Expr->IVal; + break; + + case T_UINT: + case T_USHORT: + case T_PTR: + case T_ARRAY: + Expr->IVal = (uint16_t)Expr->IVal; + break; + + case T_LONG: + case T_ULONG: + /* No need to do anything */ + break; + + case T_SCHAR: + Expr->IVal = (int8_t)Expr->IVal; + break; + + case T_UCHAR: + Expr->IVal = (uint8_t)Expr->IVal; + break; + + default: + Internal ("hie_internal: constant result type %s\n", GetFullTypeName (Expr->Type)); + } +} + + + static const GenDesc* FindGen (token_t Tok, const GenDesc* Table) /* Find a token in a generator table */ { @@ -2165,15 +2201,19 @@ static void UnaryOp (ExprDesc* Expr) ED_MakeConstAbsInt (Expr, 1); } - /* Check for a constant expression */ + /* Check for a constant numeric expression */ if (ED_IsConstAbs (Expr)) { - /* Value is constant */ + /* Value is numeric */ switch (Tok) { case TOK_MINUS: Expr->IVal = -Expr->IVal; break; case TOK_PLUS: break; case TOK_COMP: Expr->IVal = ~Expr->IVal; break; default: Internal ("Unexpected token: %d", Tok); } + + /* Limit the calculated value to the range of its type */ + LimitExprValue (Expr); + } else { /* Value is not constant */ LoadExpr (CF_NONE, Expr); @@ -2224,7 +2264,7 @@ void hie10 (ExprDesc* Expr) NextToken (); BoolExpr (hie10, Expr); if (ED_IsConstAbs (Expr)) { - /* Constant expression */ + /* Constant numeric expression */ Expr->IVal = !Expr->IVal; } else if (ED_IsAddrExpr (Expr)) { /* Address != NULL, so !Address == 0 */ @@ -2515,6 +2555,9 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ } } + /* Limit the calculated value to the range of its type */ + LimitExprValue (Expr); + } else if (lconst && (Gen->Flags & GEN_COMM) && !rconst) { /* If the LHS constant is an int that fits into an unsigned char, change the ** codegen type to unsigned char. If the RHS is also an unsigned char, then @@ -3048,6 +3091,9 @@ static void parseadd (ExprDesc* Expr) /* Integer addition */ Expr->IVal += Expr2.IVal; typeadjust (Expr, &Expr2, 1); + + /* Limit the calculated value to the range of its type */ + LimitExprValue (Expr); } else { /* OOPS */ Error ("Invalid operands for binary operator '+'"); @@ -3231,7 +3277,7 @@ static void parseadd (ExprDesc* Expr) ED_FinalizeRValLoad (Expr); } - /* Condition codes not set */ + /* Condition code not set */ ED_MarkAsUntested (Expr); } @@ -3315,14 +3361,14 @@ static void parsesub (ExprDesc* Expr) /* Integer subtraction */ typeadjust (Expr, &Expr2, 1); Expr->IVal -= Expr2.IVal; + + /* Limit the calculated value to the range of its type */ + LimitExprValue (Expr); } else { /* OOPS */ Error ("Invalid operands for binary operator '-'"); } - /* Result is constant, condition codes not set */ - ED_MarkAsUntested (Expr); - } else { /* Left hand side is not constant, right hand side is. @@ -3364,8 +3410,6 @@ static void parsesub (ExprDesc* Expr) /* Result is an rvalue in the primary register */ ED_FinalizeRValLoad (Expr); - ED_MarkAsUntested (Expr); - } } else { @@ -3418,8 +3462,10 @@ static void parsesub (ExprDesc* Expr) /* Result is an rvalue in the primary register */ ED_FinalizeRValLoad (Expr); - ED_MarkAsUntested (Expr); } + + /* Condition code not set */ + ED_MarkAsUntested (Expr); } diff --git a/src/cc65/testexpr.c b/src/cc65/testexpr.c index eefaeb74a..02ee98dae 100644 --- a/src/cc65/testexpr.c +++ b/src/cc65/testexpr.c @@ -63,7 +63,7 @@ unsigned Test (unsigned Label, int Invert) /* Read a boolean expression */ BoolExpr (hie0, &Expr); - /* Check for a constant expression */ + /* Check for a constant numeric expression */ if (ED_IsConstAbs (&Expr)) { /* Append deferred inc/dec at sequence point */ From da4cc08b7812c66097aee74ba6c73c50d3117036 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 3 Feb 2021 12:22:46 +0800 Subject: [PATCH 0694/2710] Moved and improved test case for Issue #1310. --- test/{todo => val}/bug1310.c | 8 ++++++++ 1 file changed, 8 insertions(+) rename test/{todo => val}/bug1310.c (90%) diff --git a/test/todo/bug1310.c b/test/val/bug1310.c similarity index 90% rename from test/todo/bug1310.c rename to test/val/bug1310.c index 936145928..dc9e47b5c 100644 --- a/test/todo/bug1310.c +++ b/test/val/bug1310.c @@ -68,6 +68,14 @@ int main (void) failures++; } + if (-32768U != 32768U) { + fprintf (stderr, "Expected -32768U == 32768U, got: %ld\n", (long)-32768U); + failures++; + } + if (~32767U != 32768U) { + fprintf (stderr, "Expected ~32767U == 32768U, got: %ld\n", (long)~32767U); + failures++; + } printf ("failures: %u\n", failures); return failures; } From f1c715c4559f9033352e51d3b75358463ac9c864 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 7 Feb 2021 11:35:36 +0800 Subject: [PATCH 0695/2710] Fixed a bug that pointer subtraction results from two absolute addresses are calculated as unsigned long. --- src/cc65/expr.c | 2 +- test/val/bug1310.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 4f8a09bec..30eda8707 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3353,7 +3353,7 @@ static void parsesub (ExprDesc* Expr) Error ("Incompatible pointer types"); } else { Expr->IVal = (Expr->IVal - Expr2.IVal) / - CheckedPSizeOf (lhst); + (long)CheckedPSizeOf (lhst); } /* Operate on pointers, result type is an integer */ Expr->Type = type_int; diff --git a/test/val/bug1310.c b/test/val/bug1310.c index dc9e47b5c..306c91fb6 100644 --- a/test/val/bug1310.c +++ b/test/val/bug1310.c @@ -76,6 +76,12 @@ int main (void) fprintf (stderr, "Expected ~32767U == 32768U, got: %ld\n", (long)~32767U); failures++; } + + if ((long*)0x1000 - (long*)0x2000 >= 0) { + fprintf (stderr, "Expected (long*)0x1000 - (long*)0x2000 < 0, got: %ld\n", (long*)0x1000 - (long*)0x2000); + failures++; + } printf ("failures: %u\n", failures); + return failures; } From d628772cd1c7f1f72cdfc1335dc11eb42480fbe6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Feb 2021 23:46:26 +0800 Subject: [PATCH 0696/2710] Fixed signed char type comparison with unsigned numeric constants. --- src/cc65/expr.c | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 30eda8707..083d1dc99 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2845,7 +2845,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ } /* Determine the type of the operation. */ - if (IsTypeChar (Expr->Type) && rconst) { + if (IsTypeChar (Expr->Type) && rconst && RightSigned) { /* Left side is unsigned char, right side is constant. ** Determine the minimum and maximum values @@ -2858,20 +2858,6 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ LeftMin = 0; LeftMax = 255; } - /* An integer value is always represented as a signed in the - ** ExprDesc structure. This may lead to false results below, - ** if it is actually unsigned, but interpreted as signed - ** because of the representation. Fortunately, in this case, - ** the actual value doesn't matter, since it's always greater - ** than what can be represented in a char. So correct the - ** value accordingly. - */ - if (!RightSigned && Expr2.IVal < 0) { - /* Correct the value so it is an unsigned. It will then - ** anyway match one of the cases below. - */ - Expr2.IVal = LeftMax + 1; - } /* Comparing a char against a constant may have a constant ** result. Please note: It is not possible to remove the code @@ -2951,7 +2937,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ if (rconst) { flags |= CF_FORCECHAR; } - if (!LeftSigned) { + if (!LeftSigned || !RightSigned) { flags |= CF_UNSIGNED; } } else { @@ -2959,11 +2945,11 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ flags |= g_typeadjust (ltype, rtype); } - /* If the left side is an unsigned and the right is a constant, - ** we may be able to change the compares to something more + /* If the comparison is made as unsigned types and the right is a + ** constant, we may be able to change the compares to something more ** effective. */ - if (!LeftSigned && rconst) { + if ((!LeftSigned || !RightSigned) && rconst) { switch (Tok) { From 6f5ad518165085d2b6fe4d20cba3cefc229bb656 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 23 Feb 2021 13:47:39 +0800 Subject: [PATCH 0697/2710] Added testcase for Issue #1408. --- test/val/bug1408.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 test/val/bug1408.c diff --git a/test/val/bug1408.c b/test/val/bug1408.c new file mode 100644 index 000000000..8ecc1be68 --- /dev/null +++ b/test/val/bug1408.c @@ -0,0 +1,41 @@ +/* Bug #1408: Signed char type comparisons with unsigned numeric constants */ + +#include <stdio.h> + +static int failures = 0; +static signed char x = -1; + +int main(void) +{ + if (!(x > -2u)) { + printf("x > -2u should be true\n"); + ++failures; + } + if (!(x > 0u)) { + printf("x > 0u should be true\n"); + ++failures; + } + if (!(x > 255u)) { + printf("x > 255u should be true\n"); + ++failures; + } + + if (!(-2u < x)) { + printf("-2u < x should be true\n"); + ++failures; + } + if (!(0u < x)) { + printf("0u < x should be true\n"); + ++failures; + } + if (!(255u < x)) { + printf("255u < x should be true\n"); + ++failures; + } + + if (failures != 0) { + printf("Failures: %d\n", failures); + } + + return failures; +} From ea0c634e12cb122113a9b97eb66a0efbda082aa6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 23 Feb 2021 17:39:02 +0800 Subject: [PATCH 0698/2710] Improved codegen for unsigned char type comparison with numeric constants. --- src/cc65/expr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 083d1dc99..66c633d2e 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2845,7 +2845,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ } /* Determine the type of the operation. */ - if (IsTypeChar (Expr->Type) && rconst && RightSigned) { + if (IsTypeChar (Expr->Type) && rconst && (!LeftSigned || RightSigned)) { /* Left side is unsigned char, right side is constant. ** Determine the minimum and maximum values @@ -2923,7 +2923,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ ** since the right side constant is in a valid range. */ flags |= (CF_CHAR | CF_FORCECHAR); - if (!LeftSigned) { + if (!LeftSigned || !RightSigned) { flags |= CF_UNSIGNED; } From f2eed38fc8e05f5f46165571c408496f1dda3200 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 15 Feb 2021 09:50:40 +0800 Subject: [PATCH 0699/2710] Fixed expression type of the result of numeric constant comparison. --- src/cc65/expr.c | 3 +++ src/cc65/exprdesc.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 66c633d2e..c932ba622 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2793,6 +2793,9 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ } } + /* Get rid of unwanted flags */ + ED_MakeConstBool (Expr, Expr->IVal); + /* If the result is constant, this is suspicious when not in ** preprocessor mode. */ diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index e82d0fafc..f5d8cd779 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -261,7 +261,7 @@ ExprDesc* ED_MakeConstBool (ExprDesc* Expr, long Value) { Expr->Sym = 0; Expr->Type = type_bool; - Expr->Flags = E_LOC_NONE | E_RTYPE_RVAL | (Expr->Flags & E_HAVE_MARKS); + Expr->Flags = E_LOC_NONE | E_RTYPE_RVAL | (Expr->Flags & E_MASK_KEEP_MAKE); Expr->Name = 0; Expr->IVal = Value; Expr->FVal = FP_D_Make (0.0); From 3caceb8174110110ba5b0c4c45a885d8c1c5711b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 15 Feb 2021 17:30:17 +0800 Subject: [PATCH 0700/2710] Fixed result type in certain contant expression addition cases. --- src/cc65/expr.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index c932ba622..09a7a1f39 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3171,6 +3171,9 @@ static void parseadd (ExprDesc* Expr) flags = CF_INT; } + /* Array and function types must be converted to pointer types */ + Expr->Type = PtrConversion (Expr->Type); + /* Result is an rvalue in primary register */ ED_FinalizeRValLoad (Expr); } From 8b6d78a075dafde8583c4992d37995d9b4c9db97 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 1 Mar 2021 22:11:22 +0800 Subject: [PATCH 0701/2710] Added Opt_a_tosbitwise for 8-bit bitwise operations. --- src/cc65/coptstop.c | 83 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 13470dc18..7e024ae88 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -1105,6 +1105,62 @@ static unsigned Opt_tosxorax (StackOpData* D) +static unsigned Opt_a_tosbitwise (StackOpData* D, opc_t OPC) +/* Optimize the tosandax/tosorax/tosxorax sequence. */ +{ + CodeEntry* X; + + + /* Inline the bitwise operation */ + D->IP = D->OpIndex+1; + + /* Backup lhs if necessary */ + if ((D->Rhs.A.Flags & LI_DIRECT) == 0) { + if ((D->Lhs.A.Flags & (LI_DIRECT | LI_RELOAD_Y)) == LI_DIRECT) { + /* Just reload lhs */ + X = NewCodeEntry (OPC, D->Lhs.A.LoadEntry->AM, D->Lhs.A.LoadEntry->Arg, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + } else { + /* Backup lhs */ + X = NewCodeEntry (OP65_STA, AM65_ZP, D->ZPLo, 0, D->PushEntry->LI); + InsertEntry (D, X, D->PushIndex+1); + /* Add code for low operand */ + X = NewCodeEntry (OPC, AM65_ZP, D->ZPLo, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + } + } else { + /* Add code for low operand */ + X = NewCodeEntry (OPC, D->Rhs.A.LoadEntry->AM, D->Rhs.A.LoadEntry->Arg, 0, D->OpEntry->LI); + InsertEntry (D, X, D->IP++); + + /* Rhs load entries may be removed */ + D->Rhs.A.Flags |= LI_REMOVE; + } + + /* Do high-byte operation only when its result is used */ + if ((GetRegInfo (D->Code, D->IP, REG_X) & REG_X) != 0) { + /* Replace the high-byte load with 0 for EOR, or just leave it alone */ + if (OPC == OP65_EOR) { + X = NewCodeEntry (OP65_LDX, AM65_IMM, MakeHexArg (0), 0, D->Rhs.X.ChgEntry->LI); + InsertEntry (D, X, D->IP++); + D->Rhs.X.Flags |= LI_REMOVE; + } else { + D->Rhs.X.Flags |= LI_DONT_REMOVE; + } + } else { + /* Rhs load entries may be removed */ + D->Rhs.X.Flags |= LI_REMOVE; + } + + /* Remove the push and the call to the tossubax function */ + RemoveRemainders (D); + + /* We changed the sequence */ + return 1; +} + + + static unsigned Opt_a_toscmpbool (StackOpData* D, const char* BoolTransformer) /* Optimize the TOS compare sequence with a bool transformer */ { @@ -1177,6 +1233,14 @@ static unsigned Opt_a_toscmpbool (StackOpData* D, const char* BoolTransformer) +static unsigned Opt_a_tosand (StackOpData* D) +/* Optimize the tosandax sequence. */ +{ + return Opt_a_tosbitwise (D, OP65_AND); +} + + + static unsigned Opt_a_toseq (StackOpData* D) /* Optimize the toseqax sequence */ { @@ -1292,6 +1356,14 @@ static unsigned Opt_a_tosne (StackOpData* D) +static unsigned Opt_a_tosor (StackOpData* D) +/* Optimize the tosorax sequence. */ +{ + return Opt_a_tosbitwise (D, OP65_ORA); +} + + + static unsigned Opt_a_tossub (StackOpData* D) /* Optimize the tossubax sequence. */ { @@ -1376,6 +1448,14 @@ static unsigned Opt_a_tosult (StackOpData* D) +static unsigned Opt_a_tosxor (StackOpData* D) +/* Optimize the tosxorax sequence. */ +{ + return Opt_a_tosbitwise (D, OP65_EOR); +} + + + /*****************************************************************************/ /* Code */ /*****************************************************************************/ @@ -1408,6 +1488,7 @@ static const OptFuncDesc FuncTable[] = { }; static const OptFuncDesc FuncRegATable[] = { + { "tosandax", Opt_a_tosand, REG_NONE, OP_NONE }, { "toseqax", Opt_a_toseq, REG_NONE, OP_NONE }, { "tosgeax", Opt_a_tosuge, REG_NONE, OP_NONE }, { "tosgtax", Opt_a_tosugt, REG_NONE, OP_NONE }, @@ -1415,11 +1496,13 @@ static const OptFuncDesc FuncRegATable[] = { { "tosleax", Opt_a_tosule, REG_NONE, OP_NONE }, { "tosltax", Opt_a_tosult, REG_NONE, OP_NONE }, { "tosneax", Opt_a_tosne, REG_NONE, OP_NONE }, + { "tosorax", Opt_a_tosor, REG_NONE, OP_NONE }, { "tossubax", Opt_a_tossub, REG_NONE, OP_RHS_REMOVE_DIRECT | OP_RHS_LOAD_DIRECT }, { "tosugeax", Opt_a_tosuge, REG_NONE, OP_NONE }, { "tosugtax", Opt_a_tosugt, REG_NONE, OP_NONE }, { "tosuleax", Opt_a_tosule, REG_NONE, OP_NONE }, { "tosultax", Opt_a_tosult, REG_NONE, OP_NONE }, + { "tosxorax", Opt_a_tosxor, REG_NONE, OP_NONE }, }; #define FUNC_COUNT(Table) (sizeof(Table) / sizeof(Table[0])) From 02e52fe24df3fabc16c4eadb452a2839d0feefc1 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 1 Mar 2021 22:33:12 +0100 Subject: [PATCH 0702/2710] Fix many bugs --- include/telestrat.h | 2 ++ libsrc/telestrat/cclear.s | 4 +-- libsrc/telestrat/chline.s | 40 +++++++++++++-------- libsrc/telestrat/clrscr.s | 27 ++++++++------- libsrc/telestrat/cputc.s | 67 ++++++++++++++++++++++++++++++------ libsrc/telestrat/gotox.s | 4 --- libsrc/telestrat/gotoxy.s | 17 +++------ libsrc/telestrat/textcolor.s | 3 +- 8 files changed, 109 insertions(+), 55 deletions(-) diff --git a/include/telestrat.h b/include/telestrat.h index a4648a3dc..5ad1d3bef 100644 --- a/include/telestrat.h +++ b/include/telestrat.h @@ -85,6 +85,8 @@ #define CH_LTEE '+' #define CH_RTEE '+' #define CH_CROSS '+' +#define CH_HLINE '-' +#define CH_VLINE '|' #define CH_CURS_UP 11 #define CH_CURS_DOWN 10 #define CH_CURS_LEFT 8 diff --git a/libsrc/telestrat/cclear.s b/libsrc/telestrat/cclear.s index a32919962..b9fce4708 100644 --- a/libsrc/telestrat/cclear.s +++ b/libsrc/telestrat/cclear.s @@ -6,7 +6,7 @@ ; .export _cclearxy, _cclear - .import update_adscr + .import update_adscr, display_conio .importzp tmp1 .import popax @@ -27,7 +27,7 @@ _cclear: @L1: stx tmp1 ; Save X lda #' ' ; Erase current char - BRK_TELEMON XFWR + jsr display_conio ldx tmp1 dex bne @L1 diff --git a/libsrc/telestrat/chline.s b/libsrc/telestrat/chline.s index 6ead10eee..91f3bdc9f 100644 --- a/libsrc/telestrat/chline.s +++ b/libsrc/telestrat/chline.s @@ -1,22 +1,34 @@ ; -; jede jede@oric.org 2018-04-17 -; - +; void chlinexy (unsigned char x, unsigned char y, unsigned char length); ; void chline (unsigned char length); ; - .export _chline + .export _chlinexy, _chline + + .import rvs, display_conio, update_adscr + .import popax + .include "telestrat.inc" - .include "zeropage.inc" -.proc _chline - sta tmp1 -@loop: - lda #'-' ; horizontal line screen code - BRK_TELEMON XWR0 ; macro send char to screen (channel 0 in telemon terms) - dec tmp1 - bne @loop - rts -.endproc +_chlinexy: + pha ; Save the length + jsr popax ; Get X and Y + sta SCRY ; Store Y + stx SCRX ; Store X + jsr update_adscr + pla ; Restore the length and run into _chline + +_chline: + tax ; Is the length zero? + beq @L9 ; Jump if done +@L1: + lda #'-' ; Horizontal line screen code + ora rvs + + jsr display_conio + +@L2: dex + bne @L1 +@L9: rts diff --git a/libsrc/telestrat/clrscr.s b/libsrc/telestrat/clrscr.s index 39c2f7724..363aa2761 100644 --- a/libsrc/telestrat/clrscr.s +++ b/libsrc/telestrat/clrscr.s @@ -3,7 +3,7 @@ ; .export _clrscr - .import OLD_CHARCOLOR, OLD_BGCOLOR + .import OLD_CHARCOLOR, OLD_BGCOLOR, BGCOLOR, CHARCOLOR .include "telestrat.inc" @@ -23,22 +23,25 @@ ; reset prompt position - lda #<(SCREEN+40) - sta ADSCRL - lda #>(SCREEN+40) - sta ADSCRH + lda #<(SCREEN) + sta ADSCR + lda #>(SCREEN) + sta ADSCR+1 + + lda #$00 + sta SCRDY ; reset display position - ldx #$01 + ldx #$00 stx SCRY - dex stx SCRX - ; At this step X is equal to $00 - dex - ; At this step X is equal to $FF - stx OLD_BGCOLOR + stx OLD_BGCOLOR ; black + stx BGCOLOR + + ldx #$07 ; white stx OLD_CHARCOLOR - + stx CHARCOLOR + rts .endproc diff --git a/libsrc/telestrat/cputc.s b/libsrc/telestrat/cputc.s index 38f8af84b..a1ab145c2 100644 --- a/libsrc/telestrat/cputc.s +++ b/libsrc/telestrat/cputc.s @@ -4,24 +4,50 @@ ; void cputc (char c); ; - .export _cputc, CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR + .export _cputc, _cputcxy, display_conio, CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR + + + .import update_adscr + .import popax .include "telestrat.inc" +_cputcxy: + pha ; Save C + jsr popax ; Get X and Y + sta SCRY ; Store Y + stx SCRX ; Store X + jsr update_adscr + pla + .proc _cputc + cmp #$0D + bne @not_CR + ldy #$00 + sty SCRX + rts +@not_CR: + cmp #$0A + bne @not_LF + + inc SCRY + jmp update_adscr + + +@not_LF: + ldx CHARCOLOR cpx OLD_CHARCOLOR beq do_not_change_color_foreground stx OLD_CHARCOLOR ; Store CHARCOLOR into OLD_CHARCOLOR - dec SCRX - dec SCRX pha txa ; Swap X to A because, X contains CHARCOLOR - BRK_TELEMON XFWR ; Change color on the screen (foreground) - inc SCRX + + jsr display_conio + pla do_not_change_color_foreground: @@ -31,18 +57,38 @@ do_not_change_color_foreground: stx OLD_BGCOLOR - dec SCRX ; Dec SCRX in order to place attribute before the right position - pha txa ; Swap X to A because, X contains BGCOLOR - ORA #%00010000 ; Add 16 because background color is an attribute between 16 and 23. 17 is red background for example - BRK_TELEMON XFWR ; Change color on the screen (background) + ora #%00010000 ; Add 16 because background color is an attribute between 16 and 23. 17 is red background for example + + jsr display_conio pla do_not_change_color: - BRK_TELEMON XFWR ; Macro send char to screen (channel 0) + ; it continues to display_conio + +.endproc + + + +.proc display_conio + ldy SCRX + sta (ADSCR),y + iny + cpy #SCREEN_XSIZE + bne @no_inc + ldy #$00 + sty SCRX + + jmp update_adscr + +@no_inc: + sty SCRX rts .endproc + + + .bss CHARCOLOR: .res 1 @@ -52,3 +98,4 @@ BGCOLOR: .res 1 OLD_BGCOLOR: .res 1 + diff --git a/libsrc/telestrat/gotox.s b/libsrc/telestrat/gotox.s index 7a172071c..72004bc0a 100644 --- a/libsrc/telestrat/gotox.s +++ b/libsrc/telestrat/gotox.s @@ -8,9 +8,5 @@ .proc _gotox sta SCRX - - lda #$FF - sta OLD_CHARCOLOR - sta OLD_BGCOLOR rts .endproc diff --git a/libsrc/telestrat/gotoxy.s b/libsrc/telestrat/gotoxy.s index 3387efe40..ea7ed5623 100644 --- a/libsrc/telestrat/gotoxy.s +++ b/libsrc/telestrat/gotoxy.s @@ -29,30 +29,23 @@ gotoxy: jsr popa ; Get Y .endproc .proc update_adscr -; Force to set again color if cursor moves -; $FF is used because we know that it's impossible to have this value with a color -; It prevents a bug : If bgcolor or textcolor is set to black for example with no char displays, -; next cputsxy will not set the attribute if y coordinate changes - lda #$FF - sta OLD_CHARCOLOR - sta OLD_BGCOLOR lda #<SCREEN - sta ADSCRL + sta ADSCR lda #>SCREEN - sta ADSCRH + sta ADSCR+1 ldy SCRY beq out loop: - lda ADSCRL + lda ADSCR clc adc #SCREEN_XSIZE bcc skip - inc ADSCRH + inc ADSCR+1 skip: - sta ADSCRL + sta ADSCR dey bne loop out: diff --git a/libsrc/telestrat/textcolor.s b/libsrc/telestrat/textcolor.s index 7d16c9e19..d851aaaab 100644 --- a/libsrc/telestrat/textcolor.s +++ b/libsrc/telestrat/textcolor.s @@ -2,12 +2,13 @@ ; .export _textcolor - .import CHARCOLOR + .import CHARCOLOR, OLD_CHARCOLOR .include "telestrat.inc" .proc _textcolor ldx CHARCOLOR ; Get previous color sta CHARCOLOR + stx OLD_CHARCOLOR txa ; Return previous color rts .endproc From 256b22f1c7017f5f30c3e6046cf4e641825788ef Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 1 Mar 2021 22:36:09 +0100 Subject: [PATCH 0703/2710] Add bordercolor and cvline --- libsrc/telestrat/bordercolor.s | 15 ++++++++++++++ libsrc/telestrat/cvline.s | 36 ++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 libsrc/telestrat/bordercolor.s create mode 100644 libsrc/telestrat/cvline.s diff --git a/libsrc/telestrat/bordercolor.s b/libsrc/telestrat/bordercolor.s new file mode 100644 index 000000000..7055e6ba9 --- /dev/null +++ b/libsrc/telestrat/bordercolor.s @@ -0,0 +1,15 @@ +; +; Ullrich von Bassewitz, 06.08.1998 +; +; unsigned char __fastcall__ bordercolor (unsigned char color); +; + + + .export _bordercolor + + .include "telestrat.inc" + +_bordercolor: + ; Nothing to do + ; Oric can't handle his border + rts \ No newline at end of file diff --git a/libsrc/telestrat/cvline.s b/libsrc/telestrat/cvline.s new file mode 100644 index 000000000..159eb9d27 --- /dev/null +++ b/libsrc/telestrat/cvline.s @@ -0,0 +1,36 @@ +; +; Ullrich von Bassewitz, 2003-04-13 +; +; void cvlinexy (unsigned char x, unsigned char y, unsigned char length); +; void cvline (unsigned char length); +; + + .export _cvlinexy, _cvline + + .import rvs, display_conio, update_adscr + + .import popax + + .include "telestrat.inc" + + +_cvlinexy: + pha ; Save the length + jsr popax ; Get X and Y + sta SCRY ; Store Y + stx SCRX ; Store X + jsr update_adscr + pla ; Restore the length and run into _cvline + +_cvline: + tax ; Is the length zero? + beq @L9 ; Jump if done +@L1: + lda #'|' + ora rvs + jsr display_conio +@L2: dex + bne @L1 +@L9: rts + + From 8ec6d28f92d50703f365fac57fa4b95d12f39c74 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 1 Mar 2021 22:44:06 +0100 Subject: [PATCH 0704/2710] Revert read.s --- libsrc/telestrat/read.s | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index 0782c4d21..76de9d0ac 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -8,33 +8,21 @@ .include "zeropage.inc" .include "telestrat.inc" - .include "fcntl.inc" ;int read (int fd, void* buf, unsigned count); .proc _read - sta ptr1 ; count - stx ptr1+1 ; count - jsr popax ; get buf + sta ptr1 ; count + stx ptr1+1 ; count + jsr popax ; get buf sta PTR_READ_DEST stx PTR_READ_DEST+1 - sta ptr2 ; in order to calculate nb of bytes read + sta ptr2 ; in order to calculate nb of bytes read stx ptr2+1 ; - jsr popax ; fp pointer don't care in this version - cpx #$00 - bne @is_not_stdin - cmp #STDIN_FILENO - bne @is_not_stdin - ; stdin -@L1: - BRK_TELEMON XRD0 ; waits until key is pressed - bcs @L1 - - rts + ; jsr popax ; fp pointer don't care in this version -@is_not_stdin: lda ptr1 ; ldy ptr1+1 ; BRK_TELEMON XFREAD ; calls telemon30 routine From abef6566e7feaac9287a75b2a3bc177dc7fa3c3f Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 1 Mar 2021 22:45:05 +0100 Subject: [PATCH 0705/2710] Add revers.s --- libsrc/telestrat/revers.s | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 libsrc/telestrat/revers.s diff --git a/libsrc/telestrat/revers.s b/libsrc/telestrat/revers.s new file mode 100644 index 000000000..ad3e1f909 --- /dev/null +++ b/libsrc/telestrat/revers.s @@ -0,0 +1,37 @@ +; +; Ullrich von Bassewitz, 07.08.1998 +; +; unsigned char revers (unsigned char onoff); +; + + .export _revers + .export rvs + +; ------------------------------------------------------------------------ +; + +.code +.proc _revers + + ldx #$00 ; Assume revers off + tay ; Test onoff + beq L1 ; Jump if off + ldx #$80 ; Load on value + ldy #$00 ; Assume old value is zero +L1: lda rvs ; Load old value + stx rvs ; Set new value + beq L2 ; Jump if old value zero + iny ; Make old value = 1 +L2: ldx #$00 ; Load high byte of result + tya ; Load low byte, set CC + rts + +.endproc + +; ------------------------------------------------------------------------ +; + +.bss +rvs: .res 1 + + From 185c4510005f974980a4725d03c097b0c5d244f5 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 1 Mar 2021 23:19:30 +0100 Subject: [PATCH 0706/2710] Fix cputdirect --- libsrc/telestrat/cputc.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/telestrat/cputc.s b/libsrc/telestrat/cputc.s index a1ab145c2..f7bf5e2b6 100644 --- a/libsrc/telestrat/cputc.s +++ b/libsrc/telestrat/cputc.s @@ -4,7 +4,7 @@ ; void cputc (char c); ; - .export _cputc, _cputcxy, display_conio, CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR + .export _cputc, _cputcxy, cputdirect, display_conio, CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR .import update_adscr @@ -12,6 +12,7 @@ .include "telestrat.inc" +cputdirect: _cputcxy: pha ; Save C jsr popax ; Get X and Y @@ -69,9 +70,8 @@ do_not_change_color: .endproc - - .proc display_conio + ; This routine is used to displays char on screen ldy SCRX sta (ADSCR),y iny From cdbe23c351658d2e2f874ee8dfcbb70e87ebc6f3 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 1 Mar 2021 23:21:58 +0100 Subject: [PATCH 0707/2710] Fix missing new line in bordercolr --- libsrc/telestrat/bordercolor.s | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libsrc/telestrat/bordercolor.s b/libsrc/telestrat/bordercolor.s index 7055e6ba9..9e49b057f 100644 --- a/libsrc/telestrat/bordercolor.s +++ b/libsrc/telestrat/bordercolor.s @@ -12,4 +12,5 @@ _bordercolor: ; Nothing to do ; Oric can't handle his border - rts \ No newline at end of file + rts + From 2aad72af90e9cc6b4bfc6c444233233433589395 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 15 Feb 2021 18:37:01 +0800 Subject: [PATCH 0708/2710] Removed trailing whitespaces. --- src/cc65/assignment.c | 2 +- src/cc65/codeopt.c | 2 +- src/cc65/codeoptutil.c | 10 +++++----- src/cc65/coptind.c | 7 ++----- src/cc65/coptptrload.h | 2 +- src/cc65/declare.c | 4 ++-- src/cc65/exprdesc.h | 6 +++--- src/cc65/hexval.h | 2 +- src/cc65/ident.c | 2 +- src/cc65/lineinfo.h | 4 ++-- src/cc65/loop.c | 2 +- src/cc65/pragma.c | 2 +- src/cc65/reginfo.h | 2 +- src/cc65/scanstrbuf.c | 2 +- src/cc65/shiftexpr.c | 2 +- src/cc65/symtab.c | 9 ++++----- src/cc65/testexpr.c | 2 +- src/cc65/typecmp.c | 2 +- 18 files changed, 30 insertions(+), 34 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 09a10a642..737d059a0 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -169,7 +169,7 @@ void Assignment (ExprDesc* Expr) /* cc65 does not have full support for handling structs or unions. Since ** assigning structs is one of the more useful operations from this family, ** allow it here. - ** Note: IsClassStruct() is also true for union types. + ** Note: IsClassStruct() is also true for union types. */ if (IsClassStruct (ltype)) { /* Copy the struct or union by value */ diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index 3c10183e4..29fa79d26 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -380,7 +380,7 @@ void ListOptSteps (FILE* F) /* List all optimization steps */ { unsigned I; - + fprintf (F, "any\n"); for (I = 0; I < OPTFUNC_COUNT; ++I) { if (OptFuncs[I]->Func != 0) { diff --git a/src/cc65/codeoptutil.c b/src/cc65/codeoptutil.c index 375fdf541..140420e97 100644 --- a/src/cc65/codeoptutil.c +++ b/src/cc65/codeoptutil.c @@ -678,7 +678,7 @@ void SetDontRemoveEntryFlag (LoadRegInfo* LRI) if (LRI->Flags & LI_DONT_REMOVE) { if (LRI->LoadEntry != 0) { LRI->LoadEntry->Flags |= CEF_DONT_REMOVE; - + /* If the load requires Y, then Y shouldn't be removed either */ if (LRI->LoadYEntry != 0) { LRI->LoadYEntry->Flags |= CEF_DONT_REMOVE; @@ -2562,7 +2562,7 @@ int BackupArgAfter (CodeSeg* S, BackupInfo* B, int Idx, const CodeEntry* E, Coll static int LoadAAt (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices, int After) /* Reload into A the same arg according to LoadRegInfo before or after Idx -** depending on the After param. +** depending on the After param. */ { CodeEntry* E; @@ -2582,7 +2582,7 @@ static int LoadAAt (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Ind CHECK (E != 0); O = CS_GetEntry (S, OldIdx); - + /* We only recognize opc with an arg for now, as well as a special case for ldaxysp */ if ((E->OPC != OP65_JSR || strcmp (E->Arg, "ldaxysp") == 0) && E->AM != AM65_BRA && E->AM != AM65_IMP) { @@ -2645,7 +2645,7 @@ static int LoadAAt (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Ind static int LoadXAt (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices, int After) /* Reload into X the same arg according to LoadRegInfo before or after Idx -** depending on the After param. +** depending on the After param. */ { CodeEntry* E; @@ -2744,7 +2744,7 @@ static int LoadXAt (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Ind static int LoadYAt (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Indices, int After) /* Reload into Y the same arg according to LoadRegInfo before or after Idx -** depending on the After param. +** depending on the After param. */ { CodeEntry* E; diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index f3e17fc87..a080cfb20 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -990,7 +990,7 @@ unsigned OptTransfers4 (CodeSeg* S) ** isn't used later, and we have an address mode match, we can ** replace the transfer by a load and remove the initial load. */ - if ((GetRegInfo (S, I, LoadEntry->Chg & REG_ALL) & + if ((GetRegInfo (S, I, LoadEntry->Chg & REG_ALL) & LoadEntry->Chg & REG_ALL) == 0 && (LoadEntry->AM == AM65_ABS || LoadEntry->AM == AM65_ZP || @@ -1252,7 +1252,7 @@ unsigned OptPushPop2 (CodeSeg* S) /* Go into searching mode again */ State = Searching; } - } else if ((E->Info & OF_BRA) == 0 && + } else if ((E->Info & OF_BRA) == 0 && (E->Info & OF_STORE) == 0 && E->OPC != OP65_NOP && E->OPC != OP65_TSX) { @@ -1500,14 +1500,11 @@ unsigned OptShiftBack (CodeSeg* S) (N->OPC == OP65_LSR || N->OPC == OP65_ROR) && !CE_HasLabel (N)) { - CheckStates = PSTATE_ZN; - if (N->OPC == OP65_LSR && !PStatesAreClear (E->RI->Out.PFlags, PSTATE_C)) { CheckStates |= REG_A; } - if ((GetRegInfo (S, I+2, CheckStates) & CheckStates) == 0) { /* Remove the shifts */ diff --git a/src/cc65/coptptrload.h b/src/cc65/coptptrload.h index 84d7cc19f..d4e0e2ed4 100644 --- a/src/cc65/coptptrload.h +++ b/src/cc65/coptptrload.h @@ -233,7 +233,7 @@ unsigned OptPtrLoad11 (CodeSeg* S); */ unsigned OptPtrLoad12 (CodeSeg* S); -/* Search for the sequence: +/* Search for the sequence: ** ** lda regbank+n ** ldx regbank+n+1 diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 08739f333..d952d1049 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1522,7 +1522,7 @@ static Type* ParamTypeCvt (Type* T) } else if (IsTypeFunc (T)) { Tmp = PointerTo (T); } - + if (Tmp != 0) { /* Do several fixes on qualifiers */ FixQualifiers (Tmp); @@ -1786,7 +1786,7 @@ static FuncDesc* ParseFuncDecl (void) ** won't always get to know the parameter sizes here and may do that later. */ F->Flags |= FD_INCOMPLETE_PARAM; - + /* Leave the lexical level remembering the symbol tables */ RememberFunctionLevel (F); diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index 810d68965..e1bf3117f 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -73,7 +73,7 @@ enum { ** - ref-load doesn't change the rval/lval category of the expression, ** while rval-load converts it to an rvalue if it wasn't. ** - In practice, ref-load is unimplemented, and can be simulated with - ** adding E_ADDRESS_OF temporaily through LoadExpr + FinalizeLoad, + ** adding E_ADDRESS_OF temporaily through LoadExpr + FinalizeLoad, ** whilst val-load is done with LoadExpr + FinalizeRValLoad. ** ** E_LOC_NONE -- ref-load -> + E_LOADED (int rvalue) @@ -142,7 +142,7 @@ enum { ** than it are usually consided "side-effects" in this regard. ** - The compiler front end cannot know things determined by the linker, ** such as the actual address of an object with static storage. What it - ** can know is categorized as "compiler-known" here. + ** can know is categorized as "compiler-known" here. ** - The concept "immutable" here means that once something is determined ** (not necessarily by the compiler), it will never change. This is not ** the same meaning as the "constant" word in the C standard. @@ -299,7 +299,7 @@ INLINE int ED_IsLocExpr (const ExprDesc* Expr) #if defined(HAVE_INLINE) INLINE int ED_IsLocLiteral (const ExprDesc* Expr) /* Return true if the expression is a string from the literal pool */ -{ +{ return (Expr->Flags & E_MASK_LOC) == E_LOC_LITERAL; } #else diff --git a/src/cc65/hexval.h b/src/cc65/hexval.h index 0361ee0cf..68ea5e40f 100644 --- a/src/cc65/hexval.h +++ b/src/cc65/hexval.h @@ -45,7 +45,7 @@ unsigned HexVal (int C); -/* Convert a hex digit into a value. The function will emit an error for +/* Convert a hex digit into a value. The function will emit an error for ** invalid hex digits. */ diff --git a/src/cc65/ident.c b/src/cc65/ident.c index 7748095c7..dc59c4868 100644 --- a/src/cc65/ident.c +++ b/src/cc65/ident.c @@ -35,7 +35,7 @@ /* common */ #include "chartype.h" - + /* cc65 */ #include "ident.h" diff --git a/src/cc65/lineinfo.h b/src/cc65/lineinfo.h index 8dbe06846..f365b4f01 100644 --- a/src/cc65/lineinfo.h +++ b/src/cc65/lineinfo.h @@ -37,7 +37,7 @@ #define LINEINFO_H - + /* common */ #include "strbuf.h" @@ -50,7 +50,7 @@ /* Input file structure */ -struct IFile; +struct IFile; diff --git a/src/cc65/loop.c b/src/cc65/loop.c index c15c37a79..f6c53ddc4 100644 --- a/src/cc65/loop.c +++ b/src/cc65/loop.c @@ -39,7 +39,7 @@ /* cc65 */ #include "error.h" -#include "loop.h" +#include "loop.h" #include "stackptr.h" diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index 1ea86545d..2dd923cf1 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -460,7 +460,7 @@ static void SegNamePragma (StrBuf* B, segment_t Seg) Warning ("Invalid address size for segment!"); } } - + /* Set the new name and optionally address size */ if (Push) { PushSegName (Seg, Name); diff --git a/src/cc65/reginfo.h b/src/cc65/reginfo.h index 28b948e04..2066ab505 100644 --- a/src/cc65/reginfo.h +++ b/src/cc65/reginfo.h @@ -102,7 +102,7 @@ #define ZNREG_A REG_A #define ZNREG_X REG_X #define ZNREG_Y REG_Y -#define ZNREG_TMP1 REG_TMP1 +#define ZNREG_TMP1 REG_TMP1 #define ZNREG_PTR1_LO REG_PTR1_LO #define ZNREG_PTR1_HI REG_PTR1_HI #define ZNREG_PTR2_LO REG_PTR2_LO diff --git a/src/cc65/scanstrbuf.c b/src/cc65/scanstrbuf.c index bbee569d2..2e3be8854 100644 --- a/src/cc65/scanstrbuf.c +++ b/src/cc65/scanstrbuf.c @@ -185,7 +185,7 @@ int SB_GetSym (StrBuf* B, StrBuf* Ident, const char* SpecialChars) SB_AppendChar (Ident, C); SB_Skip (B); C = SB_Peek (B); - } while (IsIdent (C) || IsDigit (C) || + } while (IsIdent (C) || IsDigit (C) || (C != '\0' && strchr (SpecialChars, C) != 0)); SB_Terminate (Ident); return 1; diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c index 0c69e96e5..d7b43dde2 100644 --- a/src/cc65/shiftexpr.c +++ b/src/cc65/shiftexpr.c @@ -193,7 +193,7 @@ void ShiftExpr (struct ExprDesc* Expr) ED_IsLocQuasiConst (Expr) && Expr2.IVal >= 8) { - Type* OldType; + Type* OldType; /* Increase the address by one and decrease the shift count */ ++Expr->IVal; diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 3c000f3a1..db2b04f17 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -518,7 +518,7 @@ SymEntry FindStructField (const Type* T, const char* Name) */ if (Struct->V.S.SymTab) { Entry = FindSymInTable (Struct->V.S.SymTab, Name, HashStr (Name)); - + if (Entry != 0) { Offs = Entry->V.Offs; } @@ -732,7 +732,7 @@ SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTab CurTagTab = FailSafeTab; } } - + if (Entry == 0) { /* Create a new entry */ @@ -817,7 +817,7 @@ SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTabl CurTagTab = FailSafeTab; } } - + if (Entry == 0) { /* Create a new entry */ @@ -1116,7 +1116,7 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs } } } - + if (Entry == 0) { /* Create a new entry */ Entry = NewSymEntry (Name, Flags); @@ -1221,7 +1221,6 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) /* Add the new declaration to the global symbol table instead */ Tab = SymTab0; } - if (Entry == 0 || Entry->Owner != Tab) { /* Create a new entry */ diff --git a/src/cc65/testexpr.c b/src/cc65/testexpr.c index 02ee98dae..e5db488de 100644 --- a/src/cc65/testexpr.c +++ b/src/cc65/testexpr.c @@ -32,7 +32,7 @@ /*****************************************************************************/ - + /* cc65 */ #include "codegen.h" #include "error.h" diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index 1f4643e73..f204b9a0b 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -228,7 +228,7 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) return; } } - } + } } } From 047d0f479bfee28b6e43be84d5b2a6b35b89398f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 1 Mar 2021 15:26:51 +0800 Subject: [PATCH 0709/2710] Comments format fix. --- src/cc65/codegen.c | 3 ++- src/cc65/codeoptutil.c | 10 ++++++---- src/cc65/datatype.c | 5 +++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 3ca9d81e6..bf7c900ab 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -2822,7 +2822,8 @@ void g_div (unsigned flags, unsigned long val) } /* Negate the result as long as val < 0, even if val == -1 and no - ** shift was generated. */ + ** shift was generated. + */ if (Negation) { g_neg (flags); } diff --git a/src/cc65/codeoptutil.c b/src/cc65/codeoptutil.c index 140420e97..2f79b131b 100644 --- a/src/cc65/codeoptutil.c +++ b/src/cc65/codeoptutil.c @@ -356,8 +356,9 @@ static int Affected (LoadRegInfo* LRI, const CodeEntry* E) } if ((LRI->Flags & LI_CHECK_Y) != 0) { - /* If we don't know what memory location could have been used by Y, - ** we just assume all. */ + /* If we don't know what memory location could have been + ** used by Y, we just assume all. + */ if (YE == 0 || (YE->ArgOff == E->ArgOff && strcmp (YE->ArgBase, E->ArgBase) == 0)) { @@ -375,8 +376,9 @@ static int Affected (LoadRegInfo* LRI, const CodeEntry* E) /* Otherwise unaffected */ goto L_Result; } - /* We could've check further for more cases where the load target isn't - ** modified, but for now let's save the trouble and just play it safe. + /* We could've check further for more cases where the load target + ** isn't modified, but for now let's save the trouble and just play + ** it safe. */ goto L_Affected; } diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index d78bfe116..6e42057dc 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -755,8 +755,9 @@ unsigned SizeOf (const Type* T) return T->A.U; /* Beware: There's a chance that this triggers problems in other parts - of the compiler. The solution is to fix the callers, because calling - SizeOf() with a function type as argument is bad. */ + ** of the compiler. The solution is to fix the callers, because calling + ** SizeOf() with a function type as argument is bad. + */ case T_FUNC: return 0; /* Size of function is unknown */ From 872739b5f4d9c91137f49f6a99f27493b6b72bc1 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Wed, 3 Mar 2021 22:14:29 +0100 Subject: [PATCH 0710/2710] Fix comments, return line and bordercolor return --- include/telestrat.h | 6 ++++++ libsrc/telestrat/bordercolor.s | 5 +---- libsrc/telestrat/clrscr.s | 8 ++++---- libsrc/telestrat/cputc.s | 15 ++++++--------- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/include/telestrat.h b/include/telestrat.h index 5ad1d3bef..465517f30 100644 --- a/include/telestrat.h +++ b/include/telestrat.h @@ -121,3 +121,9 @@ void shoot(); void explode(); void kbdclick1(); + +/* The following #defines will cause the matching functions calls in conio.h +** to be overlaid by macros with the same names, saving the function call +** overhead. +*/ +#define _bordercolor(color) COLOR_BLACK diff --git a/libsrc/telestrat/bordercolor.s b/libsrc/telestrat/bordercolor.s index 9e49b057f..84e167bc9 100644 --- a/libsrc/telestrat/bordercolor.s +++ b/libsrc/telestrat/bordercolor.s @@ -9,8 +9,5 @@ .include "telestrat.inc" -_bordercolor: - ; Nothing to do - ; Oric can't handle his border - rts +_bordercolor := return0 diff --git a/libsrc/telestrat/clrscr.s b/libsrc/telestrat/clrscr.s index 363aa2761..c02c26647 100644 --- a/libsrc/telestrat/clrscr.s +++ b/libsrc/telestrat/clrscr.s @@ -23,9 +23,9 @@ ; reset prompt position - lda #<(SCREEN) + lda #<SCREEN sta ADSCR - lda #>(SCREEN) + lda #>SCREEN sta ADSCR+1 lda #$00 @@ -36,10 +36,10 @@ stx SCRY stx SCRX - stx OLD_BGCOLOR ; black + stx OLD_BGCOLOR ; Black stx BGCOLOR - ldx #$07 ; white + ldx #$07 ; White stx OLD_CHARCOLOR stx CHARCOLOR diff --git a/libsrc/telestrat/cputc.s b/libsrc/telestrat/cputc.s index aa756aaf5..994a2b9d4 100644 --- a/libsrc/telestrat/cputc.s +++ b/libsrc/telestrat/cputc.s @@ -4,7 +4,8 @@ ; void cputc (char c); ; - .export _cputc, _cputcxy, cputdirect, display_conio, CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR + .export _cputc, _cputcxy, cputdirect, display_conio + .export CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR .import update_adscr @@ -14,10 +15,10 @@ cputdirect: _cputcxy: - pha ; Save C - jsr popax ; Get X and Y - sta SCRY ; Store Y - stx SCRX ; Store X + pha ; Save C + jsr popax ; Get X and Y + sta SCRY ; Store Y + stx SCRX ; Store X jsr update_adscr pla @@ -34,9 +35,7 @@ _cputcxy: inc SCRY jmp update_adscr - @not_LF: - ldx CHARCOLOR cpx OLD_CHARCOLOR beq do_not_change_color_foreground @@ -87,8 +86,6 @@ do_not_change_color: rts .endproc - - .bss CHARCOLOR: .res 1 From 5f145542b05fd08b81dac089757c206159e828c7 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Wed, 3 Mar 2021 17:39:53 -0500 Subject: [PATCH 0711/2710] Exported the Commodore CHRIN and CHROUT Kernal functions, in the CBM libraries. This commit complements commit 98f8064b8311753fab468aaf2c1b6d2e339a4391. --- libsrc/c128/kernal.s | 2 ++ libsrc/c16/kernal.s | 2 ++ libsrc/c64/kernal.s | 2 ++ libsrc/cbm510/kernal.s | 2 ++ libsrc/cbm610/kernal.s | 2 ++ libsrc/pet/kbsout.s | 7 +++++-- libsrc/pet/kernal.s | 1 + libsrc/plus4/kbasin.s | 7 ++++--- libsrc/plus4/kbsout.s | 5 +++-- libsrc/vic20/kernal.s | 2 ++ 10 files changed, 25 insertions(+), 7 deletions(-) diff --git a/libsrc/c128/kernal.s b/libsrc/c128/kernal.s index 138473218..47e80c559 100644 --- a/libsrc/c128/kernal.s +++ b/libsrc/c128/kernal.s @@ -46,7 +46,9 @@ .export CKOUT .export CLRCH .export BASIN + .export CHRIN .export BSOUT + .export CHROUT .export LOAD .export SAVE .export SETTIM diff --git a/libsrc/c16/kernal.s b/libsrc/c16/kernal.s index 15ce35772..5f70123a2 100644 --- a/libsrc/c16/kernal.s +++ b/libsrc/c16/kernal.s @@ -35,7 +35,9 @@ .export CKOUT .export CLRCH .export BASIN + .export CHRIN .export BSOUT + .export CHROUT .export LOAD .export SAVE .export SETTIM diff --git a/libsrc/c64/kernal.s b/libsrc/c64/kernal.s index 771872082..cf5511ce8 100644 --- a/libsrc/c64/kernal.s +++ b/libsrc/c64/kernal.s @@ -38,7 +38,9 @@ .export CKOUT .export CLRCH .export BASIN + .export CHRIN .export BSOUT + .export CHROUT .export LOAD .export SAVE .export SETTIM diff --git a/libsrc/cbm510/kernal.s b/libsrc/cbm510/kernal.s index 7908c40ec..705422709 100644 --- a/libsrc/cbm510/kernal.s +++ b/libsrc/cbm510/kernal.s @@ -28,7 +28,9 @@ .export CKOUT .export CLRCH .export BASIN + .export CHRIN .export BSOUT + .export CHROUT .export LOAD .export SAVE .export STOP diff --git a/libsrc/cbm610/kernal.s b/libsrc/cbm610/kernal.s index 921bf524e..30156e79c 100644 --- a/libsrc/cbm610/kernal.s +++ b/libsrc/cbm610/kernal.s @@ -28,7 +28,9 @@ .export CKOUT .export CLRCH .export BASIN + .export CHRIN .export BSOUT + .export CHROUT .export LOAD .export SAVE .export STOP diff --git a/libsrc/pet/kbsout.s b/libsrc/pet/kbsout.s index 178ac8205..8b21378af 100644 --- a/libsrc/pet/kbsout.s +++ b/libsrc/pet/kbsout.s @@ -1,17 +1,20 @@ ; ; Ullrich von Bassewitz, 19.11.2002 ; -; BSOUT replacement function for the PETs +; BSOUT/CHROUT replacement function for the PETs ; .export BSOUT + .export CHROUT + .import checkst .proc BSOUT - jsr $FFD2 ; Call kernal function + jsr $FFD2 ; Call Kernal function jmp checkst ; Check status, return carry on error .endproc +CHROUT := BSOUT diff --git a/libsrc/pet/kernal.s b/libsrc/pet/kernal.s index ba66c4653..fc8d62c4a 100644 --- a/libsrc/pet/kernal.s +++ b/libsrc/pet/kernal.s @@ -8,6 +8,7 @@ .export CLRCH .export BASIN + .export CHRIN .export STOP .export GETIN .export CLALL diff --git a/libsrc/plus4/kbasin.s b/libsrc/plus4/kbasin.s index 507043866..3bbee9f74 100644 --- a/libsrc/plus4/kbasin.s +++ b/libsrc/plus4/kbasin.s @@ -1,10 +1,11 @@ ; ; Ullrich von Bassewitz, 22.11.2002 ; -; BASIN replacement function +; BASIN/CHRIN replacement function ; - + .export BASIN + .export CHRIN .include "plus4.inc" @@ -17,4 +18,4 @@ rts ; Return to caller .endproc - +CHRIN := BASIN diff --git a/libsrc/plus4/kbsout.s b/libsrc/plus4/kbsout.s index a86a334b2..8b6df19ff 100644 --- a/libsrc/plus4/kbsout.s +++ b/libsrc/plus4/kbsout.s @@ -1,10 +1,11 @@ ; ; Ullrich von Bassewitz, 22.11.2002 ; -; BSOUT replacement function +; BSOUT/CHROUT replacement function ; .export BSOUT + .export CHROUT .include "plus4.inc" @@ -17,4 +18,4 @@ rts ; Return to caller .endproc - +CHROUT := BSOUT diff --git a/libsrc/vic20/kernal.s b/libsrc/vic20/kernal.s index 94a5ec1a4..7c54b205f 100644 --- a/libsrc/vic20/kernal.s +++ b/libsrc/vic20/kernal.s @@ -36,7 +36,9 @@ .export CKOUT .export CLRCH .export BASIN + .export CHRIN .export BSOUT + .export CHROUT .export LOAD .export SAVE .export SETTIM From 1fc16cb9ed6f9a27f4aaa6337b98e27a57a77fcd Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Fri, 23 Oct 2020 23:47:30 +0200 Subject: [PATCH 0712/2710] Now getchar works --- libsrc/telestrat/read.s | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index 76de9d0ac..0782c4d21 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -8,21 +8,33 @@ .include "zeropage.inc" .include "telestrat.inc" + .include "fcntl.inc" ;int read (int fd, void* buf, unsigned count); .proc _read - sta ptr1 ; count - stx ptr1+1 ; count - jsr popax ; get buf + sta ptr1 ; count + stx ptr1+1 ; count + jsr popax ; get buf sta PTR_READ_DEST stx PTR_READ_DEST+1 - sta ptr2 ; in order to calculate nb of bytes read + sta ptr2 ; in order to calculate nb of bytes read stx ptr2+1 ; - ; jsr popax ; fp pointer don't care in this version + jsr popax ; fp pointer don't care in this version + cpx #$00 + bne @is_not_stdin + cmp #STDIN_FILENO + bne @is_not_stdin + ; stdin +@L1: + BRK_TELEMON XRD0 ; waits until key is pressed + bcs @L1 + + rts +@is_not_stdin: lda ptr1 ; ldy ptr1+1 ; BRK_TELEMON XFREAD ; calls telemon30 routine From d83e8a3f0e8f71f627b20639c85e4e7a386cbb32 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 1 Mar 2021 22:49:20 +0100 Subject: [PATCH 0713/2710] add syschdir --- libsrc/telestrat/syschdir.s | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 libsrc/telestrat/syschdir.s diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s new file mode 100644 index 000000000..1676f5c88 --- /dev/null +++ b/libsrc/telestrat/syschdir.s @@ -0,0 +1,34 @@ +; +; Jede (jede@oric.org), 2021-02-22 +; +; unsigned char _syschdir (const char* name, ...); +; + + .export __syschdir + .import addysp, popax + .importzp tmp1 + + .include "telestrat.inc" + .include "zeropage.inc" + + +__syschdir: + ; Throw away all parameters except the name + dey + dey + jsr addysp + + ; Get name + jsr popax + + stx tmp1 + ldy tmp1 + + ; Call telemon primitive + + BRK_TELEMON(XPUTCWD) + + rts + + + From 65d5786da564e3937795361cbdc8e1f48f0b0272 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 1 Mar 2021 22:51:59 +0100 Subject: [PATCH 0714/2710] revert read.s --- libsrc/telestrat/read.s | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index 0782c4d21..76de9d0ac 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -8,33 +8,21 @@ .include "zeropage.inc" .include "telestrat.inc" - .include "fcntl.inc" ;int read (int fd, void* buf, unsigned count); .proc _read - sta ptr1 ; count - stx ptr1+1 ; count - jsr popax ; get buf + sta ptr1 ; count + stx ptr1+1 ; count + jsr popax ; get buf sta PTR_READ_DEST stx PTR_READ_DEST+1 - sta ptr2 ; in order to calculate nb of bytes read + sta ptr2 ; in order to calculate nb of bytes read stx ptr2+1 ; - jsr popax ; fp pointer don't care in this version - cpx #$00 - bne @is_not_stdin - cmp #STDIN_FILENO - bne @is_not_stdin - ; stdin -@L1: - BRK_TELEMON XRD0 ; waits until key is pressed - bcs @L1 - - rts + ; jsr popax ; fp pointer don't care in this version -@is_not_stdin: lda ptr1 ; ldy ptr1+1 ; BRK_TELEMON XFREAD ; calls telemon30 routine From 973a5337ac29f8fb1c8abfc68f4a4fa632b721d6 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 1 Mar 2021 22:53:35 +0100 Subject: [PATCH 0715/2710] remove extra line --- libsrc/telestrat/syschdir.s | 3 --- 1 file changed, 3 deletions(-) diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index 1676f5c88..37ee0cc81 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -29,6 +29,3 @@ __syschdir: BRK_TELEMON(XPUTCWD) rts - - - From d417baf826b9a6eae86d4de69f149b9f105954e9 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 1 Mar 2021 23:26:35 +0100 Subject: [PATCH 0716/2710] Now we update __cwd --- libsrc/telestrat/initcwd.s | 3 +-- libsrc/telestrat/syschdir.s | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/libsrc/telestrat/initcwd.s b/libsrc/telestrat/initcwd.s index dc3c53257..7d38dd563 100644 --- a/libsrc/telestrat/initcwd.s +++ b/libsrc/telestrat/initcwd.s @@ -10,8 +10,7 @@ initcwd: - ldx #PWD_PTR - BRK_TELEMON XVARS + BRK_TELEMON(XGETCWD) sta ptr1 sty ptr1+1 diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index 37ee0cc81..2437ac80e 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -7,6 +7,7 @@ .export __syschdir .import addysp, popax .importzp tmp1 + .import initcwd .include "telestrat.inc" .include "zeropage.inc" @@ -27,5 +28,7 @@ __syschdir: ; Call telemon primitive BRK_TELEMON(XPUTCWD) + + jsr initcwd ; Update cwd rts From 17ca09ba9afe520cd88c1c156e6e29d836fc5722 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 1 Mar 2021 23:37:09 +0100 Subject: [PATCH 0717/2710] Fix tab --- libsrc/telestrat/syschdir.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index 2437ac80e..c032fc648 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -6,7 +6,7 @@ .export __syschdir .import addysp, popax - .importzp tmp1 + .importzp tmp1 .import initcwd .include "telestrat.inc" From 9b365654852a390f00a9521c8d3654c18c68d78b Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 1 Mar 2021 23:37:50 +0100 Subject: [PATCH 0718/2710] Fix another tab --- libsrc/telestrat/syschdir.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index c032fc648..1e42bcbab 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -22,7 +22,7 @@ __syschdir: ; Get name jsr popax - stx tmp1 + stx tmp1 ldy tmp1 ; Call telemon primitive From 2ae41e0a558bfc4b511f17b1df40092a6a0e253a Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 2 Mar 2021 08:21:12 +0100 Subject: [PATCH 0719/2710] Fix tab --- libsrc/telestrat/syschdir.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index 1e42bcbab..eef11d9e3 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -22,7 +22,7 @@ __syschdir: ; Get name jsr popax - stx tmp1 + stx tmp1 ldy tmp1 ; Call telemon primitive From bf9d4ac3bbc0a3f23ec09ba90cfae36289bd7556 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Wed, 3 Mar 2021 22:20:20 +0100 Subject: [PATCH 0720/2710] Fix tab and jmp --- libsrc/telestrat/syschdir.s | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index eef11d9e3..149957215 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -6,7 +6,7 @@ .export __syschdir .import addysp, popax - .importzp tmp1 + .importzp tmp1 .import initcwd .include "telestrat.inc" @@ -29,6 +29,4 @@ __syschdir: BRK_TELEMON(XPUTCWD) - jsr initcwd ; Update cwd - - rts + jmp initcwd ; Update cwd From 1d8479b411633eeda9952805daac23177640b425 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 6 Mar 2021 11:56:22 +0100 Subject: [PATCH 0721/2710] Revert "Fix tab and jmp" This reverts commit bf9d4ac3bbc0a3f23ec09ba90cfae36289bd7556. --- libsrc/telestrat/syschdir.s | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index 149957215..eef11d9e3 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -6,7 +6,7 @@ .export __syschdir .import addysp, popax - .importzp tmp1 + .importzp tmp1 .import initcwd .include "telestrat.inc" @@ -29,4 +29,6 @@ __syschdir: BRK_TELEMON(XPUTCWD) - jmp initcwd ; Update cwd + jsr initcwd ; Update cwd + + rts From f9ca091bd040b3dd7dd65a4722d9ef0d561b0f28 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 6 Mar 2021 11:56:22 +0100 Subject: [PATCH 0722/2710] Revert "Fix tab" This reverts commit 2ae41e0a558bfc4b511f17b1df40092a6a0e253a. --- libsrc/telestrat/syschdir.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index eef11d9e3..1e42bcbab 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -22,7 +22,7 @@ __syschdir: ; Get name jsr popax - stx tmp1 + stx tmp1 ldy tmp1 ; Call telemon primitive From 24d63a96b1c7d8418b3f2b7f8c60f8a572738864 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 6 Mar 2021 11:56:22 +0100 Subject: [PATCH 0723/2710] Revert "Fix another tab" This reverts commit 9b365654852a390f00a9521c8d3654c18c68d78b. --- libsrc/telestrat/syschdir.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index 1e42bcbab..c032fc648 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -22,7 +22,7 @@ __syschdir: ; Get name jsr popax - stx tmp1 + stx tmp1 ldy tmp1 ; Call telemon primitive From 558dfa285e9a768b22860113e083528870d48500 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 6 Mar 2021 11:56:22 +0100 Subject: [PATCH 0724/2710] Revert "Fix tab" This reverts commit 17ca09ba9afe520cd88c1c156e6e29d836fc5722. --- libsrc/telestrat/syschdir.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index c032fc648..2437ac80e 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -6,7 +6,7 @@ .export __syschdir .import addysp, popax - .importzp tmp1 + .importzp tmp1 .import initcwd .include "telestrat.inc" From ab4ca51848560efdea292837d2dd74ffebd22470 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 6 Mar 2021 11:56:22 +0100 Subject: [PATCH 0725/2710] Revert "Now we update __cwd" This reverts commit d417baf826b9a6eae86d4de69f149b9f105954e9. --- libsrc/telestrat/initcwd.s | 3 ++- libsrc/telestrat/syschdir.s | 3 --- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/libsrc/telestrat/initcwd.s b/libsrc/telestrat/initcwd.s index 7d38dd563..dc3c53257 100644 --- a/libsrc/telestrat/initcwd.s +++ b/libsrc/telestrat/initcwd.s @@ -10,7 +10,8 @@ initcwd: - BRK_TELEMON(XGETCWD) + ldx #PWD_PTR + BRK_TELEMON XVARS sta ptr1 sty ptr1+1 diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index 2437ac80e..37ee0cc81 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -7,7 +7,6 @@ .export __syschdir .import addysp, popax .importzp tmp1 - .import initcwd .include "telestrat.inc" .include "zeropage.inc" @@ -28,7 +27,5 @@ __syschdir: ; Call telemon primitive BRK_TELEMON(XPUTCWD) - - jsr initcwd ; Update cwd rts From 8ae5a4a1345db0947ed327b9ce4103963b2670e3 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 6 Mar 2021 11:56:22 +0100 Subject: [PATCH 0726/2710] Revert "remove extra line" This reverts commit 973a5337ac29f8fb1c8abfc68f4a4fa632b721d6. --- libsrc/telestrat/syschdir.s | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index 37ee0cc81..1676f5c88 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -29,3 +29,6 @@ __syschdir: BRK_TELEMON(XPUTCWD) rts + + + From d6f2fda5757ee0786579cd76b6b50f2926e9836e Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 6 Mar 2021 11:56:22 +0100 Subject: [PATCH 0727/2710] Revert "revert read.s" This reverts commit 65d5786da564e3937795361cbdc8e1f48f0b0272. --- libsrc/telestrat/read.s | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index 76de9d0ac..0782c4d21 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -8,21 +8,33 @@ .include "zeropage.inc" .include "telestrat.inc" + .include "fcntl.inc" ;int read (int fd, void* buf, unsigned count); .proc _read - sta ptr1 ; count - stx ptr1+1 ; count - jsr popax ; get buf + sta ptr1 ; count + stx ptr1+1 ; count + jsr popax ; get buf sta PTR_READ_DEST stx PTR_READ_DEST+1 - sta ptr2 ; in order to calculate nb of bytes read + sta ptr2 ; in order to calculate nb of bytes read stx ptr2+1 ; - ; jsr popax ; fp pointer don't care in this version + jsr popax ; fp pointer don't care in this version + cpx #$00 + bne @is_not_stdin + cmp #STDIN_FILENO + bne @is_not_stdin + ; stdin +@L1: + BRK_TELEMON XRD0 ; waits until key is pressed + bcs @L1 + + rts +@is_not_stdin: lda ptr1 ; ldy ptr1+1 ; BRK_TELEMON XFREAD ; calls telemon30 routine From f122837955170516c629f5d97c82c984a883b5b8 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 6 Mar 2021 11:56:22 +0100 Subject: [PATCH 0728/2710] Revert "add syschdir" This reverts commit d83e8a3f0e8f71f627b20639c85e4e7a386cbb32. --- libsrc/telestrat/syschdir.s | 34 ---------------------------------- 1 file changed, 34 deletions(-) delete mode 100644 libsrc/telestrat/syschdir.s diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s deleted file mode 100644 index 1676f5c88..000000000 --- a/libsrc/telestrat/syschdir.s +++ /dev/null @@ -1,34 +0,0 @@ -; -; Jede (jede@oric.org), 2021-02-22 -; -; unsigned char _syschdir (const char* name, ...); -; - - .export __syschdir - .import addysp, popax - .importzp tmp1 - - .include "telestrat.inc" - .include "zeropage.inc" - - -__syschdir: - ; Throw away all parameters except the name - dey - dey - jsr addysp - - ; Get name - jsr popax - - stx tmp1 - ldy tmp1 - - ; Call telemon primitive - - BRK_TELEMON(XPUTCWD) - - rts - - - From bc8cca9fc48d7da6d93035b38f57b62f6e9a6043 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sat, 6 Mar 2021 11:56:22 +0100 Subject: [PATCH 0729/2710] Revert "Now getchar works" This reverts commit 1fc16cb9ed6f9a27f4aaa6337b98e27a57a77fcd. --- libsrc/telestrat/read.s | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index 0782c4d21..76de9d0ac 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -8,33 +8,21 @@ .include "zeropage.inc" .include "telestrat.inc" - .include "fcntl.inc" ;int read (int fd, void* buf, unsigned count); .proc _read - sta ptr1 ; count - stx ptr1+1 ; count - jsr popax ; get buf + sta ptr1 ; count + stx ptr1+1 ; count + jsr popax ; get buf sta PTR_READ_DEST stx PTR_READ_DEST+1 - sta ptr2 ; in order to calculate nb of bytes read + sta ptr2 ; in order to calculate nb of bytes read stx ptr2+1 ; - jsr popax ; fp pointer don't care in this version - cpx #$00 - bne @is_not_stdin - cmp #STDIN_FILENO - bne @is_not_stdin - ; stdin -@L1: - BRK_TELEMON XRD0 ; waits until key is pressed - bcs @L1 - - rts + ; jsr popax ; fp pointer don't care in this version -@is_not_stdin: lda ptr1 ; ldy ptr1+1 ; BRK_TELEMON XFREAD ; calls telemon30 routine From 48badc081679a19bec9ad6edbc1b39f36fd50e79 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sat, 6 Mar 2021 21:40:26 +0100 Subject: [PATCH 0730/2710] Fix import return0 --- libsrc/telestrat/bordercolor.s | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libsrc/telestrat/bordercolor.s b/libsrc/telestrat/bordercolor.s index 84e167bc9..c29ecc0e7 100644 --- a/libsrc/telestrat/bordercolor.s +++ b/libsrc/telestrat/bordercolor.s @@ -4,9 +4,10 @@ ; unsigned char __fastcall__ bordercolor (unsigned char color); ; - .export _bordercolor + .import return0 + .include "telestrat.inc" _bordercolor := return0 From df64fd859c7477ebd7d0ed8b377c84b0510e5e77 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sun, 7 Mar 2021 23:00:15 +0100 Subject: [PATCH 0731/2710] Fix cvline bug --- libsrc/telestrat/cvline.s | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libsrc/telestrat/cvline.s b/libsrc/telestrat/cvline.s index 159eb9d27..0d6086216 100644 --- a/libsrc/telestrat/cvline.s +++ b/libsrc/telestrat/cvline.s @@ -28,7 +28,11 @@ _cvline: @L1: lda #'|' ora rvs - jsr display_conio + ldy SCRX + sta (ADSCR),y + ; compute next line + inc SCRY + jsr update_adscr @L2: dex bne @L1 @L9: rts From facc1b4914425baee3019035189b29beca649cb5 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Mon, 8 Mar 2021 21:16:44 +0100 Subject: [PATCH 0732/2710] Fix cputdirect --- libsrc/telestrat/cputc.s | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libsrc/telestrat/cputc.s b/libsrc/telestrat/cputc.s index 994a2b9d4..6049d1174 100644 --- a/libsrc/telestrat/cputc.s +++ b/libsrc/telestrat/cputc.s @@ -6,14 +6,13 @@ .export _cputc, _cputcxy, cputdirect, display_conio .export CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR - .import update_adscr .import popax .include "telestrat.inc" -cputdirect: + _cputcxy: pha ; Save C jsr popax ; Get X and Y @@ -22,7 +21,7 @@ _cputcxy: jsr update_adscr pla -.proc _cputc +_cputc: cmp #$0D bne @not_CR ldy #$00 @@ -30,12 +29,13 @@ _cputcxy: rts @not_CR: cmp #$0A - bne @not_LF + bne not_LF inc SCRY jmp update_adscr -@not_LF: +cputdirect: +not_LF: ldx CHARCOLOR cpx OLD_CHARCOLOR beq do_not_change_color_foreground @@ -67,7 +67,7 @@ do_not_change_color_foreground: do_not_change_color: ; it continues to display_conio -.endproc + .proc display_conio ; This routine is used to displays char on screen From a05dddd0d6ac759eee695d54a8ef2632e6220108 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 9 Mar 2021 22:02:26 +0100 Subject: [PATCH 0733/2710] Fix next column --- libsrc/telestrat/cputc.s | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libsrc/telestrat/cputc.s b/libsrc/telestrat/cputc.s index 6049d1174..16b13f8cd 100644 --- a/libsrc/telestrat/cputc.s +++ b/libsrc/telestrat/cputc.s @@ -78,6 +78,8 @@ do_not_change_color: bne @no_inc ldy #$00 sty SCRX + + inc SCRY jmp update_adscr From 4f26650228506b746fce11895eaa6fa6befb2b31 Mon Sep 17 00:00:00 2001 From: jedeoric <jede@oric.org> Date: Thu, 11 Mar 2021 09:42:14 +0100 Subject: [PATCH 0734/2710] [Telestrat] chdir management (#1419) * add syschdir * revert read.s * remove extra line * Now we update __cwd * Fix tab * Fix another tab * Fix tab * Fix tab and jmp * fix xgetcwd * Fix comments --- asminc/telestrat.inc | 2 ++ libsrc/telestrat/initcwd.s | 3 +-- libsrc/telestrat/read.s | 12 ++++++------ libsrc/telestrat/syschdir.s | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 libsrc/telestrat/syschdir.s diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index 2036574a4..556b41f7c 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -284,6 +284,8 @@ XSOUND = $44 XMUSIC = $45 XZAP = $46 ; Send Zap sound to PSG XSHOOT = $47 +XGETCWD = $48 ; Get current CWD +XPUTCWD = $49 ; Chdir XMKDIR = $4B ; Create a folder. Only available in TELEMON 3.x (bank 7 of Orix) XRM = $4D ; Remove a folder or a file. Only available in TELEMON 3.x (bank 7 of Orix) XFWR = $4E ; Put a char on the first screen. Only available in TELEMON 3.x (bank 7 of Orix) diff --git a/libsrc/telestrat/initcwd.s b/libsrc/telestrat/initcwd.s index dc3c53257..7d38dd563 100644 --- a/libsrc/telestrat/initcwd.s +++ b/libsrc/telestrat/initcwd.s @@ -10,8 +10,7 @@ initcwd: - ldx #PWD_PTR - BRK_TELEMON XVARS + BRK_TELEMON(XGETCWD) sta ptr1 sty ptr1+1 diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index 76de9d0ac..db764fc84 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -12,21 +12,21 @@ ;int read (int fd, void* buf, unsigned count); .proc _read - sta ptr1 ; count - stx ptr1+1 ; count - jsr popax ; get buf + + sta ptr1 ; Count + stx ptr1+1 ; Count + jsr popax ; Get buf sta PTR_READ_DEST stx PTR_READ_DEST+1 - sta ptr2 ; in order to calculate nb of bytes read + sta ptr2 ; In order to calculate nb of bytes read stx ptr2+1 ; - ; jsr popax ; fp pointer don't care in this version lda ptr1 ; ldy ptr1+1 ; BRK_TELEMON XFREAD ; calls telemon30 routine - ; compute nb of bytes read + ; Compute nb of bytes read lda PTR_READ_DEST+1 sec sbc ptr2+1 diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s new file mode 100644 index 000000000..149957215 --- /dev/null +++ b/libsrc/telestrat/syschdir.s @@ -0,0 +1,32 @@ +; +; Jede (jede@oric.org), 2021-02-22 +; +; unsigned char _syschdir (const char* name, ...); +; + + .export __syschdir + .import addysp, popax + .importzp tmp1 + .import initcwd + + .include "telestrat.inc" + .include "zeropage.inc" + + +__syschdir: + ; Throw away all parameters except the name + dey + dey + jsr addysp + + ; Get name + jsr popax + + stx tmp1 + ldy tmp1 + + ; Call telemon primitive + + BRK_TELEMON(XPUTCWD) + + jmp initcwd ; Update cwd From c0d638a26d36152d861b3078444f94852987b34c Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Thu, 11 Mar 2021 22:48:05 +0100 Subject: [PATCH 0735/2710] add clock for Telestrat target and add some Telemon primitives --- asminc/telestrat.inc | 41 ++++++++++++++++++++++++++++++++++++---- libsrc/telestrat/clock.s | 30 +++++++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 libsrc/telestrat/clock.s diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index 556b41f7c..f48600b38 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -63,7 +63,7 @@ PTR_READ_DEST := $2C ; Used for XFREAD and XWRITE only in TELEMON 3. ADCLK := $40 ; Address for clock display TIMEUS := $42 -TIMEUD := $44 +TIMEUD := $44 ; Counter clock (1/10 of a second) HRSX := $46 @@ -277,6 +277,7 @@ XRECLK = $3C ; Reset clock XCLCL = $3D ; Close clock XWRCLK = $3E ; Displays clock in the adress in A & Y registers +; Sound primitives XSONPS = $40 ; Send data to PSG register (14 values) XOUPS = $42 ; Send Oups sound into PSG XPLAY = $43 ; Play a sound @@ -284,12 +285,25 @@ XSOUND = $44 XMUSIC = $45 XZAP = $46 ; Send Zap sound to PSG XSHOOT = $47 + +; Path Management XGETCWD = $48 ; Get current CWD XPUTCWD = $49 ; Chdir + +; File management XMKDIR = $4B ; Create a folder. Only available in TELEMON 3.x (bank 7 of Orix) + +XHCHRS = $4C ; Hard copy hires + +; File management XRM = $4D ; Remove a folder or a file. Only available in TELEMON 3.x (bank 7 of Orix) + XFWR = $4E ; Put a char on the first screen. Only available in TELEMON 3.x (bank 7 of Orix) -XGOKBD = $52 + +; Keyboard primitives +XALLKB = $50 ; Read Keyboard, and populate KBDCOL +XKBDAS = $51 ; Ascii conversion +XGOKBD = $52 ; Swap keyboard type (Qwerty, French ...) ; Buffer management XECRBU = $54 ; Write A or AY in the buffer @@ -301,8 +315,27 @@ XDEFBU = $59 ; Reset all value of the buffer XBUSY = $5A ; Test if the buffer is empty XMALLOC = $5B ; Only in TELEMON 3.x (bank 7 of Orix) + +; RS232 primitives +XSDUMP = $5C ; RS232 input dump +XCONSO = $5D ; Swap screen into RS232 terminal +XSLOAD = $5E ; Read a file from RS232 +XSSAVE = $5F ; Write a file to RS232 + +; Minitel primitives +XMLOAD = $60 ; Read a file from Minitel +XMSAVE = $61 ; Write a file to Minitel + XFREE = $62 ; Only in TELEMON 3.x (bank 7 of Orix) + +; Next Minitel primitives +XWCXFI = $63 ; Wait connection +XLIGNE = $64 ; +XDECON = $65 ; Minitel disconnection +XMOUT = $66 ; Send a byte to minitel (from A) + XSOUT = $67 ; Send accumulator value (A) to RS232, available in TELEMON 2.4 & 3.x : if RS232 buffer is full, the Oric Telestrat freezes + XHRSSE = $8C ; Set hires position cursor XDRAWA = $8D ; Draw a line absolute XDRAWR = $8E ; Draw a line (relative) @@ -326,7 +359,7 @@ PWD_PTR = $00 ; --------------------------------------------------------------------------- ; -BUFTRV := $100 +BUFTRV := $100 ; --------------------------------------------------------------------------- @@ -339,7 +372,7 @@ FLGTEL := $20D KOROM := $20E ; Used to compute the size of all rom bank. The result is store here. The value is in KB KORAM := $20F ; Used to compute the size of all ram bank. The result is store here. The value is in KB ; Time management -TIMED := $210 +TIMED := $210 ; Clock (1/10 of seconds) TIMES := $211 TIMEM := $212 TIMEH := $213 diff --git a/libsrc/telestrat/clock.s b/libsrc/telestrat/clock.s new file mode 100644 index 000000000..1e107027f --- /dev/null +++ b/libsrc/telestrat/clock.s @@ -0,0 +1,30 @@ +; +; Jede, 2021-03-10 +; +; clock_t clock (void); +; + + .export _clock + .importzp sreg + + .include "telestrat.inc" + +.proc _clock + +; Clear the timer high 16 bits + + ldy #$00 + sty sreg + sty sreg+1 + +; Read the timer + + sei ; Disable interrupts + lda TIMEUD ; TIMED contains 1/10 of a second from clock. Telestrat main cardridge simulate a clock from VIA6522 timer + ldx TIMEUD+1 + cli ; Reenable interrupts + + rts +.endproc + + From b9fd318985d12904b3facba8f82dc4cb37295f65 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Thu, 11 Mar 2021 22:52:41 +0100 Subject: [PATCH 0736/2710] fix space/column --- asminc/telestrat.inc | 22 +++++++++++----------- libsrc/telestrat/clock.s | 4 +--- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index f48600b38..7d4c1e31d 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -48,33 +48,33 @@ TR7 := $13 DEFAFF := $14 -IRQSVA := $21 ; Used to save A when a BRK call occurs -IRQSVX := $22 ; Used to save X when a BRK call occurs -IRQSVY := $23 ; Used to save Y when a BRK call occurs -IRQSVP := $24 ; Used to save P when a BRK call occurs +IRQSVA := $21 ; Used to save A when a BRK call occurs +IRQSVX := $22 ; Used to save X when a BRK call occurs +IRQSVY := $23 ; Used to save Y when a BRK call occurs +IRQSVP := $24 ; Used to save P when a BRK call occurs ADSCR := $26 -SCRNB := $28 ; Id of the current window +SCRNB := $28 ; Id of the current window -ADKBD := $2A ; Address ASCII conversion table +ADKBD := $2A ; Address ASCII conversion table -PTR_READ_DEST := $2C ; Used for XFREAD and XWRITE only in TELEMON 3.x +PTR_READ_DEST := $2C ; Used for XFREAD and XWRITE only in TELEMON 3.x -ADCLK := $40 ; Address for clock display +ADCLK := $40 ; Address for clock display TIMEUS := $42 -TIMEUD := $44 ; Counter clock (1/10 of a second) +TIMEUD := $44 ; Counter clock (1/10 of a second) HRSX := $46 HRSY := $47 -XLPRBI := $48 ; Printer flag (b7) +XLPRBI := $48 ; Printer flag (b7) HRSX40 := $49 HRSX6 := $4A -ADHRS := $4B ; Hires screen address (word) +ADHRS := $4B ; Hires screen address (word) HRS1 := $4D HRS2 := $4F diff --git a/libsrc/telestrat/clock.s b/libsrc/telestrat/clock.s index 1e107027f..c5478c7ac 100644 --- a/libsrc/telestrat/clock.s +++ b/libsrc/telestrat/clock.s @@ -20,11 +20,9 @@ ; Read the timer sei ; Disable interrupts - lda TIMEUD ; TIMED contains 1/10 of a second from clock. Telestrat main cardridge simulate a clock from VIA6522 timer + lda TIMEUD ; TIMED contains 1/10 of a second from clock. Telestrat main cardridge simulate a clock from VIA6522 timer ldx TIMEUD+1 cli ; Reenable interrupts rts .endproc - - From 41f796bbe1a825c3c8ecffc598c484be0304347e Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 16 Mar 2021 00:53:34 +0100 Subject: [PATCH 0737/2710] left and right mask are inverted : fix in telestrat.h --- include/telestrat.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/telestrat.h b/include/telestrat.h index 465517f30..c1e0996bc 100644 --- a/include/telestrat.h +++ b/include/telestrat.h @@ -100,8 +100,8 @@ /* Masks for joy_read */ #define JOY_UP_MASK 0x10 #define JOY_DOWN_MASK 0x08 -#define JOY_LEFT_MASK 0x01 -#define JOY_RIGHT_MASK 0x02 +#define JOY_LEFT_MASK 0x02 +#define JOY_RIGHT_MASK 0x01 #define JOY_BTN_1_MASK 0x04 #define JOY_FIRE_MASK JOY_BTN_1_MASK From bd5d5b738569f3159c9c7f5632e68c55db105a93 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 13 Mar 2021 14:31:23 +0800 Subject: [PATCH 0738/2710] Removed the prototype of evalexpr() that no longer exists. --- src/cc65/expr.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/cc65/expr.h b/src/cc65/expr.h index 71dbe8e0d..02f9f7a5f 100644 --- a/src/cc65/expr.h +++ b/src/cc65/expr.h @@ -74,13 +74,6 @@ void Store (ExprDesc* Expr, const Type* StoreType); ** is NULL, use lval->Type instead. */ -int evalexpr (unsigned flags, void (*Func) (ExprDesc*), ExprDesc* Expr); -/* Will evaluate an expression via the given function. If the result is a -** constant, 0 is returned and the value is put in the Expr struct. If the -** result is not constant, LoadExpr is called to bring the value into the -** primary register and 1 is returned. -*/ - void Expression0 (ExprDesc* Expr); /* Evaluate an expression via hie0 and put the result into the primary register. ** The expression is completely evaluated and all side effects complete. From 4376b833908d2280aac1df75c0098690ae70d681 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 13 Mar 2021 14:31:23 +0800 Subject: [PATCH 0739/2710] Fixed LoadAAt(). --- src/cc65/codeoptutil.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/codeoptutil.c b/src/cc65/codeoptutil.c index 2f79b131b..36232bf3a 100644 --- a/src/cc65/codeoptutil.c +++ b/src/cc65/codeoptutil.c @@ -2614,7 +2614,7 @@ static int LoadAAt (CodeSeg* S, int Idx, const LoadRegInfo* LRI, Collection* Ind if (Use == REG_X) { X = NewCodeEntry (OP65_TXA, AM65_IMP, 0, 0, E->LI); CS_InsertEntry (S, X, Idx++); - } else if (Use == REG_A) { + } else if (Use == REG_Y) { X = NewCodeEntry (OP65_TYA, AM65_IMP, 0, 0, E->LI); CS_InsertEntry (S, X, Idx++); } else if (Use == REG_A) { From 0a8ca3041a80768590af5e18f5a6b7763c685cb4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 13 Mar 2021 14:31:23 +0800 Subject: [PATCH 0740/2710] Changd all Find*Last*InOpenRange() to return the beginning of the open range. Fixed FindArgLastUsageInOpenRange(). --- src/cc65/codeoptutil.c | 16 ++++++++-------- src/cc65/codeoptutil.h | 6 +++--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/cc65/codeoptutil.c b/src/cc65/codeoptutil.c index 36232bf3a..23c759fd1 100644 --- a/src/cc65/codeoptutil.c +++ b/src/cc65/codeoptutil.c @@ -3038,13 +3038,13 @@ int FindArgLastUsageInOpenRange (CodeSeg* S, int First, int Last, CodeEntry* E, /* Find the last index where the arg of E might be used or changed in the range (First, Last). ** ReloadY indicates whether Y is supposed to be reloaded. ** The code block in the range must be basic without any jump backwards. -** Return the index of the found entry, or -1 if not found. +** Return the index of the found entry, or First if not found. */ { LoadRegInfo LRI; CodeEntry* X; unsigned CheckedFlags = LI_SRC_USE | LI_SRC_CHG; - int Found = -1; + int Found = First; CHECK (Last <= (int)CollCount (&S->Entries)); @@ -3066,8 +3066,8 @@ int FindArgLastUsageInOpenRange (CodeSeg* S, int First, int Last, CodeEntry* E, /* TODO: We don't currently check for all cases */ if ((LRI.Flags & (LI_DIRECT | LI_CHECK_ARG | LI_CHECK_Y | LI_RELOAD_Y)) == 0) { - /* Just bail out as if the src would change right away */ - return 0; + /* Just bail out as if the src would change everywhere */ + return First < Last ? Last - 1 : First; } if ((LRI.Flags & LI_CHECK_Y) != 0) { @@ -3145,11 +3145,11 @@ int FindRegLastChangeInOpenRange (CodeSeg* S, int First, int Last, unsigned what /* Find the last possible spot where the queried ZPs, registers and/or processor ** states might be changed in the range (First, Last). The code block in the ** range must be basic without any jump backwards. -** Return the index of the found entry, or -1 if not found. +** Return the index of the found entry, or First if not found. */ { CodeEntry* X; - int Found = -1; + int Found = First; CHECK (Last <= (int)CollCount (&S->Entries)); @@ -3169,11 +3169,11 @@ int FindRegLastUseInOpenRange (CodeSeg* S, int First, int Last, unsigned what) /* Find the last possible spot where the queried ZPs, registers and/or processor ** states might be used in the range (First, Last). The code block in the range ** must be basic without any jump backwards. -** Return the index of the found entry, or -1 if not found. +** Return the index of the found entry, or First if not found. */ { CodeEntry* X; - int Found = -1; + int Found = First; CHECK (Last <= (int)CollCount (&S->Entries)); diff --git a/src/cc65/codeoptutil.h b/src/cc65/codeoptutil.h index c3596acd4..70aa5f462 100644 --- a/src/cc65/codeoptutil.h +++ b/src/cc65/codeoptutil.h @@ -433,7 +433,7 @@ int FindArgLastUsageInOpenRange (CodeSeg* S, int First, int Last, CodeEntry* E, /* Find the last index where the arg of E might be used or changed in the range (First, Last). ** ReloadY indicates whether Y is supposed to be reloaded. ** The code block in the range must be basic without any jump backwards. -** Return the index of the found entry, or -1 if not found. +** Return the index of the found entry, or First if not found. */ int FindRegFirstChangeInOpenRange (CodeSeg* S, int First, int Last, unsigned what); @@ -454,14 +454,14 @@ int FindRegLastChangeInOpenRange (CodeSeg* S, int First, int Last, unsigned what /* Find the last possible spot where the queried ZPs, registers and/or processor ** states might be changed in the range (First, Last). The code block in the ** range must be basic without any jump backwards. -** Return the index of the found entry, or -1 if not found. +** Return the index of the found entry, or First if not found. */ int FindRegLastUseInOpenRange (CodeSeg* S, int First, int Last, unsigned what); /* Find the last possible spot where the queried ZPs, registers and/or processor ** states might be used in the range (First, Last). The code block in the range ** must be basic without any jump backwards. -** Return the index of the found entry, or -1 if not found. +** Return the index of the found entry, or First if not found. */ /* End of codeoptutil.h */ From c4a2620e2925516929cccbe3be532561d282cde7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 8 Feb 2021 22:47:51 +0800 Subject: [PATCH 0741/2710] Added an utility function to check for quasi-constant addresses (of stack variables). --- src/cc65/exprdesc.c | 9 +++++++++ src/cc65/exprdesc.h | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index f5d8cd779..aa98e1531 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -408,6 +408,15 @@ int ED_IsConst (const ExprDesc* Expr) +int ED_IsQuasiConst (const ExprDesc* Expr) +/* Return true if the expression denotes a quasi-constant of some sort. This +** can be a numeric constant, a constant address or a stack variable address. +*/ +{ + return (Expr->Flags & E_MASK_LOC) == E_LOC_NONE || ED_IsQuasiConstAddr (Expr); +} + + int ED_IsConstAddr (const ExprDesc* Expr) /* Return true if the expression denotes a constant address of some sort. This ** can be the address of a global variable (maybe with offset) or similar. diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index e1bf3117f..844af1566 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -649,6 +649,11 @@ int ED_IsConst (const ExprDesc* Expr); ** similar. */ +int ED_IsQuasiConst (const ExprDesc* Expr); +/* Return true if the expression denotes a quasi-constant of some sort. This +** can be a numeric constant, a constant address or a stack variable address. +*/ + int ED_IsConstAddr (const ExprDesc* Expr); /* Return true if the expression denotes a constant address of some sort. This ** can be the address of a global variable (maybe with offset) or similar. From aa6fdf58b8a17b747090fb521f3d9106e0c56d1c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 8 Feb 2021 09:03:19 +0800 Subject: [PATCH 0742/2710] Addresses in constant subtraction expressions now work. Fixed codegen for cast type subtraction in constant expressions. --- src/cc65/expr.c | 211 +++++++++++++++++++++++++++++++----------------- 1 file changed, 138 insertions(+), 73 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 09a7a1f39..a38efab53 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3287,7 +3287,8 @@ static void parsesub (ExprDesc* Expr) Type* rhst; /* Type of right hand side */ CodeMark Mark1; /* Save position of output queue */ CodeMark Mark2; /* Another position in the queue */ - int rscale; /* Scale factor for the result */ + int rscale; /* Scale factor for pointer arithmetics */ + int SubDone; /* No need to generate runtime code */ ED_Init (&Expr2); Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; @@ -3304,7 +3305,9 @@ static void parsesub (ExprDesc* Expr) /* Get the left hand side type, initialize operation flags */ lhst = Expr->Type; + flags = CF_INT; /* Default result type */ rscale = 1; /* Scale by 1, that is, don't scale */ + SubDone = 0; /* Generate runtime code by default */ /* Remember the output queue position, then bring the value onto the stack */ GetCodePos (&Mark1); @@ -3322,67 +3325,148 @@ static void parsesub (ExprDesc* Expr) Expr2.Type = type_uchar; } - /* Check for a constant rhs expression */ - if (ED_IsConstAbs (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) { + /* Get the rhs type */ + rhst = Expr2.Type; - /* The right hand side is constant. Get the rhs type. */ - rhst = Expr2.Type; + /* We can only do constant expressions for: + ** - integer subtraction: + ** - numeric - numeric + ** - (integer)(base + offset) - numeric + ** - (integer)(same_base + offset) - (integer)(same_base + offset) + ** - pointer offset: + ** - (pointer)numeric - numeric * scale + ** - (base + offset) - numeric * scale + ** - (same_base + offset) - (integer)(same_base + offset) * 1 + ** - pointer diff: + ** - (numeric - numeric) / scale + ** - ((same_base + offset) - (same_base + offset)) / scale + ** - ((base + offset) - (pointer)numeric) / 1 + */ + if (IsClassPtr (lhst) && IsClassPtr (rhst)) { - /* Check left hand side */ - if (ED_IsConstAbs (Expr)) { + /* Pointer diff */ + if (TypeCmp (Indirect (lhst), Indirect (rhst)) < TC_QUAL_DIFF) { + Error ("Incompatible pointer types"); + } - /* Both sides are constant, remove generated code */ + /* Operate on pointers, result type is an integer */ + flags = CF_PTR; + Expr->Type = type_int; + + /* We'll have to scale the result */ + rscale = CheckedPSizeOf (lhst); + + /* Check for a constant rhs expression */ + if (ED_IsQuasiConst (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) { + /* The right hand side is constant. Check left hand side. */ + if (ED_IsQuasiConst (Expr)) { + /* We can't do all 'ptr1 - ptr2' constantly at the moment */ + if (Expr->Sym == Expr2.Sym) { + Expr->IVal = (Expr->IVal - Expr2.IVal) / rscale; + /* Get rid of unneeded flags etc. */ + ED_MakeConstAbsInt (Expr, Expr->IVal); + /* No runtime code */ + SubDone = 1; + } else if (rscale == 1 && ED_IsConstAbs (&Expr2)) { + Expr->IVal = (Expr->IVal - Expr2.IVal) / rscale; + /* No runtime code */ + SubDone = 1; + } + } + } + + if (!SubDone) { + /* We'll do runtime code */ + if (ED_IsConstAbs (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) { + /* Remove pushed value from stack */ + RemoveCode (&Mark2); + /* Do the subtraction */ + g_dec (CF_INT | CF_CONST, Expr2.IVal); + } else { + /* load into the primary */ + LoadExpr (CF_NONE, &Expr2); + /* Generate code for the sub */ + g_sub (CF_INT, 0); + } + /* We must scale the result */ + if (rscale != 1) { + g_scale (CF_INT, -rscale); + } + /* Result is an rvalue in the primary register */ + ED_FinalizeRValLoad (Expr); + } else { + /* Remove pushed value from stack */ RemoveCode (&Mark1); + /* The result is always an rvalue */ + ED_MarkExprAsRVal (Expr); + } - /* Check for pointer arithmetic */ + } else if (ED_IsQuasiConst (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) { + + /* Right hand side is constant. Check left hand side. */ + if (ED_IsQuasiConst (Expr)) { + + /* Both sides are constant. Check for pointer arithmetic */ if (IsClassPtr (lhst) && IsClassInt (rhst)) { /* Left is pointer, right is int, must scale rhs */ - Expr->IVal -= Expr2.IVal * CheckedPSizeOf (lhst); + rscale = CheckedPSizeOf (lhst); /* Operate on pointers, result type is a pointer */ - } else if (IsClassPtr (lhst) && IsClassPtr (rhst)) { - /* Left is pointer, right is pointer, must scale result */ - if (TypeCmp (Indirect (lhst), Indirect (rhst)) < TC_QUAL_DIFF) { - Error ("Incompatible pointer types"); - } else { - Expr->IVal = (Expr->IVal - Expr2.IVal) / - (long)CheckedPSizeOf (lhst); - } - /* Operate on pointers, result type is an integer */ - Expr->Type = type_int; + flags = CF_PTR; } else if (IsClassInt (lhst) && IsClassInt (rhst)) { /* Integer subtraction */ - typeadjust (Expr, &Expr2, 1); - Expr->IVal -= Expr2.IVal; - - /* Limit the calculated value to the range of its type */ - LimitExprValue (Expr); + flags = typeadjust (Expr, &Expr2, 1); } else { /* OOPS */ Error ("Invalid operands for binary operator '-'"); } + /* We can't make all subtraction expressions constant */ + if (ED_IsConstAbs (&Expr2)) { + Expr->IVal -= Expr2.IVal * rscale; + /* No runtime code */ + SubDone = 1; + } else if (rscale == 1 && Expr->Sym == Expr2.Sym) { + /* The result is the diff of the offsets */ + Expr->IVal -= Expr2.IVal; + /* Get rid of unneeded bases and flags etc. */ + ED_MakeConstAbs (Expr, Expr->IVal, Expr->Type); + /* No runtime code */ + SubDone = 1; + } + + if (SubDone) { + /* Remove pushed value from stack */ + RemoveCode (&Mark1); + if (IsClassInt (lhst)) { + /* Limit the calculated value to the range of its type */ + LimitExprValue (Expr); + } + /* The result is always an rvalue */ + ED_MarkExprAsRVal (Expr); + } else { + if (ED_IsConstAbs (&Expr2)) { + /* Remove pushed value from stack */ + RemoveCode (&Mark2); + /* Do the subtraction */ + g_dec (flags | CF_CONST, Expr2.IVal); + } else { + /* Load into the primary */ + LoadExpr (CF_NONE, &Expr2); + /* Generate code for the sub (the & is a hack here) */ + g_sub (flags & ~CF_CONST, 0); + } + /* Result is an rvalue in the primary register */ + ED_FinalizeRValLoad (Expr); + } + } else { - /* Left hand side is not constant, right hand side is. - ** Remove pushed value from stack. - */ - RemoveCode (&Mark2); - + /* Left hand side is not constant, right hand side is */ if (IsClassPtr (lhst) && IsClassInt (rhst)) { /* Left is pointer, right is int, must scale rhs */ Expr2.IVal *= CheckedPSizeOf (lhst); /* Operate on pointers, result type is a pointer */ flags = CF_PTR; - } else if (IsClassPtr (lhst) && IsClassPtr (rhst)) { - /* Left is pointer, right is pointer, must scale result */ - if (TypeCmp (Indirect (lhst), Indirect (rhst)) < TC_QUAL_DIFF) { - Error ("Incompatible pointer types"); - } else { - rscale = CheckedPSizeOf (lhst); - } - /* Operate on pointers, result type is an integer */ - flags = CF_PTR; - Expr->Type = type_int; } else if (IsClassInt (lhst) && IsClassInt (rhst)) { /* Integer subtraction */ flags = typeadjust (Expr, &Expr2, 1); @@ -3392,12 +3476,16 @@ static void parsesub (ExprDesc* Expr) flags = CF_INT; } - /* Do the subtraction */ - g_dec (flags | CF_CONST, Expr2.IVal); - - /* If this was a pointer subtraction, we must scale the result */ - if (rscale != 1) { - g_scale (flags, -rscale); + if (ED_IsConstAbs (&Expr2)) { + /* Remove pushed value from stack */ + RemoveCode (&Mark2); + /* Do the subtraction */ + g_dec (flags | CF_CONST, Expr2.IVal); + } else { + /* Rhs is not numeric, load into the primary */ + LoadExpr (CF_NONE, &Expr2); + /* Generate code for the sub (the & is a hack here) */ + g_sub (flags & ~CF_CONST, 0); } /* Result is an rvalue in the primary register */ @@ -3406,56 +3494,33 @@ static void parsesub (ExprDesc* Expr) } else { - /* Not constant, load into the primary */ + /* Right hand side is not constant, load into the primary */ LoadExpr (CF_NONE, &Expr2); - /* Right hand side is not constant. Get the rhs type. */ - rhst = Expr2.Type; - /* Check for pointer arithmetic */ if (IsClassPtr (lhst) && IsClassInt (rhst)) { /* Left is pointer, right is int, must scale rhs */ g_scale (CF_INT, CheckedPSizeOf (lhst)); /* Operate on pointers, result type is a pointer */ flags = CF_PTR; - } else if (IsClassPtr (lhst) && IsClassPtr (rhst)) { - /* Left is pointer, right is pointer, must scale result */ - if (TypeCmp (Indirect (lhst), Indirect (rhst)) < TC_QUAL_DIFF) { - Error ("Incompatible pointer types"); - } else { - rscale = CheckedPSizeOf (lhst); - } - /* Operate on pointers, result type is an integer */ - flags = CF_PTR; - Expr->Type = type_int; } else if (IsClassInt (lhst) && IsClassInt (rhst)) { - /* Integer subtraction. If the left hand side descriptor says that - ** the lhs is const, we have to remove this mark, since this is no - ** longer true, lhs is on stack instead. - */ - if (ED_IsLocNone (Expr)) { - ED_FinalizeRValLoad (Expr); - } /* Adjust operand types */ flags = typeadjust (Expr, &Expr2, 0); } else { /* OOPS */ Error ("Invalid operands for binary operator '-'"); - flags = CF_INT; } /* Generate code for the sub (the & is a hack here) */ g_sub (flags & ~CF_CONST, 0); - /* If this was a pointer subtraction, we must scale the result */ - if (rscale != 1) { - g_scale (flags, -rscale); - } - /* Result is an rvalue in the primary register */ ED_FinalizeRValLoad (Expr); } + /* Result type is either a pointer or an integer */ + Expr->Type = PtrConversion (Expr->Type); + /* Condition code not set */ ED_MarkAsUntested (Expr); } From f5972dfd084d4669dc4d936b19c52819efcdcbed Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 8 Feb 2021 09:03:13 +0800 Subject: [PATCH 0743/2710] Made int+pointer work in constant expressions. Fixed codegen for cast type addition in constant expressions. Calls on swapstk in 'i+ptr' is avoided when possible. --- src/cc65/expr.c | 295 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 210 insertions(+), 85 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index a38efab53..2d410581c 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3045,6 +3045,9 @@ static void parseadd (ExprDesc* Expr) CodeMark Mark; /* Remember code position */ Type* lhst; /* Type of left hand side */ Type* rhst; /* Type of right hand side */ + int lscale; + int rscale; + int AddDone; /* No need to generate runtime code */ ED_Init (&Expr2); Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; @@ -3055,44 +3058,133 @@ static void parseadd (ExprDesc* Expr) /* Get the left hand side type, initialize operation flags */ lhst = Expr->Type; flags = 0; + lscale = rscale = 1; + AddDone = 0; - /* Check for constness on both sides */ - if (ED_IsConst (Expr)) { + /* We can only do constant expressions for: + ** - integer addition: + ** - numeric + numeric + ** - (integer)(base + offset) + numeric + ** - numeric + (integer)(base + offset) + ** - pointer offset: + ** - (pointer)numeric + numeric * scale + ** - (base + offset) + numeric * scale + ** - (pointer)numeric + (integer)(base + offset) * 1 + ** - numeric * scale + (pointer)numeric + ** - numeric * scale + (base + offset) + ** - (integer)(base + offset) * 1 + (pointer)numeric + */ + if (ED_IsQuasiConst (Expr)) { /* The left hand side is a constant of some sort. Good. Get rhs */ ExprWithCheck (hie9, &Expr2); - if (ED_IsConstAbs (&Expr2)) { - /* Right hand side is a constant numeric value. Get the rhs type */ - rhst = Expr2.Type; + /* Right hand side is constant. Get the rhs type */ + rhst = Expr2.Type; + if (ED_IsQuasiConst (&Expr2)) { /* Both expressions are constants. Check for pointer arithmetic */ if (IsClassPtr (lhst) && IsClassInt (rhst)) { /* Left is pointer, right is int, must scale rhs */ - Expr->IVal += Expr2.IVal * CheckedPSizeOf (lhst); - /* Result type is a pointer */ + rscale = CheckedPSizeOf (lhst); + /* Operate on pointers, result type is a pointer */ + flags = CF_PTR; } else if (IsClassInt (lhst) && IsClassPtr (rhst)) { /* Left is int, right is pointer, must scale lhs */ - Expr->IVal = Expr->IVal * CheckedPSizeOf (rhst) + Expr2.IVal; - /* Result type is a pointer */ - Expr->Type = Expr2.Type; + lscale = CheckedPSizeOf (rhst); + /* Operate on pointers, result type is a pointer */ + flags = CF_PTR; } else if (IsClassInt (lhst) && IsClassInt (rhst)) { /* Integer addition */ - Expr->IVal += Expr2.IVal; - typeadjust (Expr, &Expr2, 1); - - /* Limit the calculated value to the range of its type */ - LimitExprValue (Expr); + flags = CF_INT; } else { /* OOPS */ - Error ("Invalid operands for binary operator '+'"); + AddDone = -1; + } + + if (ED_IsAbs (&Expr2) && + (ED_IsAbs (Expr) || lscale == 1)) { + if (IsClassInt (lhst) && IsClassInt (rhst)) { + typeadjust (Expr, &Expr2, 1); + } + Expr->IVal = Expr->IVal * lscale + Expr2.IVal * rscale; + AddDone = 1; + } else if (ED_IsAbs (Expr) && + (ED_IsAbs (&Expr2) || rscale == 1)) { + if (IsClassInt (lhst) && IsClassInt (rhst)) { + typeadjust (&Expr2, Expr, 1); + } + Expr2.IVal = Expr->IVal * lscale + Expr2.IVal * rscale; + /* Adjust the flags */ + Expr2.Flags |= Expr->Flags & ~E_MASK_KEEP_SUBEXPR; + /* Get the symbol and the name */ + *Expr = Expr2; + AddDone = 1; + } + + if (AddDone) { + /* Adjust the result */ + if (IsClassPtr (lhst)) { + /* Result type is a pointer */ + Expr->Type = PtrConversion (lhst); + } else if (IsClassPtr (rhst)) { + /* Result type is a pointer */ + Expr->Type = PtrConversion (rhst); + } else { + /* Limit the calculated value to the range of its type */ + LimitExprValue (Expr); + } + + /* The result is always an rvalue */ + ED_MarkExprAsRVal (Expr); + } else { + /* Decide the order */ + if (!ED_IsAbs (&Expr2) && rscale > 1) { + /* Rhs needs scaling but is not numeric. Load it. */ + LoadExpr (CF_NONE, &Expr2); + /* Scale rhs */ + g_scale (CF_INT, rscale); + /* Generate the code for the add */ + if (ED_IsAbs (Expr)) { + /* Numeric constant */ + g_inc (flags | CF_CONST, Expr->IVal); + } else if (ED_IsLocStack (Expr)) { + /* Local stack address */ + g_addaddr_local (flags, Expr->IVal); + } else { + /* Static address */ + g_addaddr_static (flags | GlobalModeFlags (Expr), Expr->Name, Expr->IVal); + } + } else { + /* Lhs is not numeric. Load it. */ + LoadExpr (CF_NONE, Expr); + /* Scale lhs if necessary */ + if (lscale != 1) { + g_scale (CF_INT, lscale); + } + /* Generate the code for the add */ + if (ED_IsAbs (&Expr2)) { + /* Numeric constant */ + g_inc (flags | CF_CONST, Expr2.IVal); + } else if (ED_IsLocStack (&Expr2)) { + /* Local stack address */ + g_addaddr_local (flags, Expr2.IVal); + } else { + /* Static address */ + g_addaddr_static (flags | GlobalModeFlags (&Expr2), Expr2.Name, Expr2.IVal); + } + } + + /* Result is an rvalue in primary register */ + ED_FinalizeRValLoad (Expr); } } else { - /* lhs is a constant and rhs is not constant. Load rhs into - ** the primary. + /* lhs is constant and rhs is not constant. Load rhs into the + ** primary. */ + GetCodePos (&Mark); LoadExpr (CF_NONE, &Expr2); /* Beware: The check above (for lhs) lets not only pass numeric @@ -3100,11 +3192,8 @@ static void parseadd (ExprDesc* Expr) ** with an offset. We have to check for that here. */ - /* First, get the rhs type. */ - rhst = Expr2.Type; - /* Setup flags */ - if (ED_IsLocNone (Expr)) { + if (ED_IsAbs (Expr)) { /* A numerical constant */ flags |= CF_CONST; } else { @@ -3115,62 +3204,72 @@ static void parseadd (ExprDesc* Expr) /* Check for pointer arithmetic */ if (IsClassPtr (lhst) && IsClassInt (rhst)) { /* Left is pointer, right is int, must scale rhs */ - g_scale (CF_INT, CheckedPSizeOf (lhst)); + rscale = CheckedPSizeOf (lhst); + g_scale (CF_INT, rscale); /* Operate on pointers, result type is a pointer */ flags |= CF_PTR; - /* Generate the code for the add */ - if (ED_GetLoc (Expr) == E_LOC_NONE) { - /* Numeric constant */ - g_inc (flags, Expr->IVal); - } else { - /* Constant address */ - g_addaddr_static (flags, Expr->Name, Expr->IVal); - } } else if (IsClassInt (lhst) && IsClassPtr (rhst)) { - /* Left is int, right is pointer, must scale lhs. */ - unsigned ScaleFactor = CheckedPSizeOf (rhst); - + lscale = CheckedPSizeOf (rhst); /* Operate on pointers, result type is a pointer */ flags |= CF_PTR; Expr->Type = Expr2.Type; - - /* Since we do already have rhs in the primary, if lhs is - ** not a numeric constant, and the scale factor is not one - ** (no scaling), we must take the long way over the stack. - */ - if (ED_IsLocNone (Expr)) { - /* Numeric constant, scale lhs */ - Expr->IVal *= ScaleFactor; - /* Generate the code for the add */ - g_inc (flags, Expr->IVal); - } else if (ScaleFactor == 1) { - /* Constant address but no need to scale */ - g_addaddr_static (flags, Expr->Name, Expr->IVal); - } else { - /* Constant address that must be scaled */ - g_push (TypeOf (Expr2.Type), 0); /* rhs --> stack */ - g_getimmed (flags, Expr->Name, Expr->IVal); - g_scale (CF_PTR, ScaleFactor); - g_add (CF_PTR, 0); - } } else if (IsClassInt (lhst) && IsClassInt (rhst)) { /* Integer addition */ flags |= typeadjust (Expr, &Expr2, 1); - /* Generate the code for the add */ - if (ED_IsLocNone (Expr)) { - /* Numeric constant */ - g_inc (flags, Expr->IVal); - } else { - /* Constant address */ - g_addaddr_static (flags, Expr->Name, Expr->IVal); - } } else { /* OOPS */ - Error ("Invalid operands for binary operator '+'"); - flags = CF_INT; + AddDone = -1; } + /* Generate the code for the add */ + if (!AddDone) { + if (ED_IsAbs (Expr) && + Expr->IVal >= 0 && + Expr->IVal * lscale < 256) { + /* Numeric constant */ + g_inc (flags, Expr->IVal * lscale); + AddDone = 1; + } + } + + if (!AddDone) { + if (ED_IsLocQuasiConst (&Expr2) && + rscale == 1 && + CheckedSizeOf (rhst) == SIZEOF_CHAR) { + /* Change the order back */ + RemoveCode (&Mark); + /* Load lhs */ + LoadExpr (CF_NONE, Expr); + /* Use new flags */ + flags = CF_CHAR | GlobalModeFlags (&Expr2); + /* Add the variable */ + if (ED_IsLocStack (&Expr2)) { + g_addlocal (flags, Expr2.IVal); + } else { + g_addstatic (flags, Expr2.Name, Expr2.IVal); + } + } else if (ED_IsAbs (Expr)) { + /* Numeric constant */ + g_inc (flags, Expr->IVal * lscale); + } else if (lscale == 1) { + if (ED_IsLocStack (Expr)) { + /* Constant address */ + g_addaddr_local (flags, Expr->IVal); + } else { + g_addaddr_static (flags, Expr->Name, Expr->IVal); + } + } else { + /* Since we do already have rhs in the primary, if lhs is + ** not a numeric constant, and the scale factor is not one + ** (no scaling), we must take the long way over the stack. + */ + g_push (TypeOf (Expr2.Type), 0); /* rhs --> stack */ + LoadExpr (CF_NONE, Expr); + g_scale (CF_PTR, lscale); + g_add (CF_PTR, 0); + } + } /* Array and function types must be converted to pointer types */ Expr->Type = PtrConversion (Expr->Type); @@ -3181,20 +3280,21 @@ static void parseadd (ExprDesc* Expr) } else { /* Left hand side is not constant. Get the value onto the stack. */ - LoadExpr (CF_NONE, Expr); /* --> primary register */ + LoadExpr (CF_NONE, Expr); /* --> primary register */ GetCodePos (&Mark); - g_push (TypeOf (Expr->Type), 0); /* --> stack */ + flags = TypeOf (Expr->Type); /* default codegen type */ + g_push (flags, 0); /* --> stack */ /* Evaluate the rhs */ MarkedExprWithCheck (hie9, &Expr2); + /* Get the rhs type */ + rhst = Expr2.Type; + /* Check for a constant rhs expression */ if (ED_IsConstAbs (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) { - /* Right hand side is a constant. Get the rhs type */ - rhst = Expr2.Type; - - /* Remove pushed value from stack */ + /* Rhs is a constant. Remove pushed lhs from stack. */ RemoveCode (&Mark); /* Check for pointer arithmetic */ @@ -3214,8 +3314,7 @@ static void parseadd (ExprDesc* Expr) flags = typeadjust (Expr, &Expr2, 1); } else { /* OOPS */ - Error ("Invalid operands for binary operator '+'"); - flags = CF_INT; + AddDone = -1; } /* Generate code for the add */ @@ -3223,23 +3322,37 @@ static void parseadd (ExprDesc* Expr) } else { - /* Not constant, load into the primary */ - LoadExpr (CF_NONE, &Expr2); - - /* lhs and rhs are not constant. Get the rhs type. */ - rhst = Expr2.Type; - - /* Check for pointer arithmetic */ + /* Lhs and rhs are not so constant. Check for pointer arithmetic. */ if (IsClassPtr (lhst) && IsClassInt (rhst)) { /* Left is pointer, right is int, must scale rhs */ - g_scale (CF_INT, CheckedPSizeOf (lhst)); + rscale = CheckedPSizeOf (lhst); + if (ED_IsAbs (&Expr2)) { + Expr2.IVal *= rscale; + /* Load rhs into the primary */ + LoadExpr (CF_NONE, &Expr2); + } else { + /* Load rhs into the primary */ + LoadExpr (CF_NONE, &Expr2); + g_scale (CF_INT, rscale); + } /* Operate on pointers, result type is a pointer */ flags = CF_PTR; } else if (IsClassInt (lhst) && IsClassPtr (rhst)) { /* Left is int, right is pointer, must scale lhs */ - g_tosint (TypeOf (lhst)); /* Make sure TOS is int */ - g_swap (CF_INT); /* Swap TOS and primary */ - g_scale (CF_INT, CheckedPSizeOf (rhst)); + lscale = CheckedPSizeOf (rhst); + if (ED_CodeRangeIsEmpty (&Expr2)) { + RemoveCode (&Mark); /* Remove pushed value from stack */ + g_scale (CF_INT, lscale); + g_push (CF_PTR, 0); /* --> stack */ + LoadExpr (CF_NONE, &Expr2); /* Load rhs into primary register */ + } else { + g_tosint (TypeOf (lhst)); /* Make sure TOS is int */ + LoadExpr (CF_NONE, &Expr2); /* Load rhs into primary register */ + if (lscale != 1) { + g_swap (CF_INT); /* Swap TOS and primary */ + g_scale (CF_INT, CheckedPSizeOf (rhst)); + } + } /* Operate on pointers, result type is a pointer */ flags = CF_PTR; Expr->Type = Expr2.Type; @@ -3254,10 +3367,12 @@ static void parseadd (ExprDesc* Expr) ** when trying to apply another solution. */ flags = typeadjust (Expr, &Expr2, 0) & ~CF_CONST; + /* Load rhs into the primary */ + LoadExpr (CF_NONE, &Expr2); } else { /* OOPS */ - Error ("Invalid operands for binary operator '+'"); - flags = CF_INT; + AddDone = -1; + /* We can't just goto End as that would leave the stack unbalanced */ } /* Generate code for the add */ @@ -3265,10 +3380,20 @@ static void parseadd (ExprDesc* Expr) } + /* Array and function types must be converted to pointer types */ + Expr->Type = PtrConversion (Expr->Type); + /* Result is an rvalue in primary register */ ED_FinalizeRValLoad (Expr); } + if (AddDone < 0) { + Error ("Invalid operands for binary operator '+'"); + } else { + /* Array and function types must be converted to pointer types */ + Expr->Type = PtrConversion (Expr->Type); + } + /* Condition code not set */ ED_MarkAsUntested (Expr); } From 99c7fe0ada96dd7283e60cc16cc63b23ab919014 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 8 Feb 2021 09:03:23 +0800 Subject: [PATCH 0744/2710] Reusing code from parseadd() for ArrayRef(). Now index[ptr] works in constant expressions. Fixed codegen for cast type in constant expressions. Calls on swapstk in 'i[ptr]' is avoided when possible. --- src/cc65/expr.c | 423 +++++++++++------------------------------------- 1 file changed, 98 insertions(+), 325 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 2d410581c..e2cd09468 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -74,11 +74,20 @@ static GenDesc GenOASGN = { TOK_OR_ASSIGN, GEN_NOPUSH, g_or }; /*****************************************************************************/ -/* Helper functions */ +/* Forward declarations */ /*****************************************************************************/ +static void parseadd (ExprDesc* Expr, int DoArrayRef); + + + +/*****************************************************************************/ +/* Helper functions */ +/*****************************************************************************/ + + static unsigned GlobalModeFlags (const ExprDesc* Expr) /* Return the addressing mode flags for the given expression */ { @@ -1333,294 +1342,6 @@ static void Primary (ExprDesc* E) -static void ArrayRef (ExprDesc* Expr) -/* Handle an array reference. This function needs a rewrite. */ -{ - int ConstBaseAddr; - ExprDesc Subscript; - CodeMark Mark1; - CodeMark Mark2; - TypeCode Qualifiers; - Type* ElementType; - Type* tptr1; - - ED_Init (&Subscript); - Subscript.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; - - /* Skip the bracket */ - NextToken (); - - /* Get the type of left side */ - tptr1 = Expr->Type; - - /* We can apply a special treatment for arrays that have a const base - ** address. This is true for most arrays and will produce a lot better - ** code. Check if this is a "quasi-const base" address. - */ - ConstBaseAddr = ED_IsRVal (Expr) && ED_IsLocQuasiConst (Expr); - - /* If we have a quasi-const base address, we delay the address fetch */ - GetCodePos (&Mark1); - if (!ConstBaseAddr) { - /* Get a pointer to the array into the primary */ - LoadExpr (CF_NONE, Expr); - - /* Get the array pointer on stack. Do not push more than 16 - ** bit, even if this value is greater, since we cannot handle - ** other than 16bit stuff when doing indexing. - */ - GetCodePos (&Mark2); - g_push (CF_PTR, 0); - } - - /* TOS now contains ptr to array elements. Get the subscript. */ - MarkedExprWithCheck (hie0, &Subscript); - - /* Check the types of array and subscript. We can either have a - ** pointer/array to the left, in which case the subscript must be of an - ** integer type, or we have an integer to the left, in which case the - ** subscript must be a pointer/array. - ** Since we do the necessary checking here, we can rely later on the - ** correct types. - */ - Qualifiers = T_QUAL_NONE; - if (IsClassPtr (Expr->Type)) { - if (!IsClassInt (Subscript.Type)) { - Error ("Array subscript is not an integer"); - /* To avoid any compiler errors, make the expression a valid int */ - ED_MakeConstAbsInt (&Subscript, 0); - } - if (IsTypeArray (Expr->Type)) { - Qualifiers = GetQualifier (Expr->Type); - } - ElementType = Indirect (Expr->Type); - } else if (IsClassInt (Expr->Type)) { - if (!IsClassPtr (Subscript.Type)) { - Error ("Subscripted value is neither array nor pointer"); - /* To avoid compiler errors, make the subscript a char[] at - ** address 0. - */ - ED_MakeConstAbs (&Subscript, 0, GetCharArrayType (1)); - } else if (IsTypeArray (Subscript.Type)) { - Qualifiers = GetQualifier (Subscript.Type); - } - ElementType = Indirect (Subscript.Type); - } else { - Error ("Cannot subscript"); - /* To avoid compiler errors, fake both the array and the subscript, so - ** we can just proceed. - */ - ED_MakeConstAbs (Expr, 0, GetCharArrayType (1)); - ED_MakeConstAbsInt (&Subscript, 0); - ElementType = Indirect (Expr->Type); - } - - /* The element type has the combined qualifiers from itself and the array, - ** it is a member of (if any). - */ - if (GetQualifier (ElementType) != (GetQualifier (ElementType) | Qualifiers)) { - ElementType = TypeDup (ElementType); - ElementType->C |= Qualifiers; - } - - /* If the subscript is a bit-field, load it and make it an rvalue */ - if (ED_IsBitField (&Subscript)) { - LoadExpr (CF_NONE, &Subscript); - ED_FinalizeRValLoad (&Subscript); - } - - /* Make the address of the array element from the base and subscript */ - if (ED_IsConstAbs (&Subscript) && ED_CodeRangeIsEmpty (&Subscript)) { - - /* The array subscript is a constant. Since we can have the element - ** address directly as base+offset, we can remove the array address - ** push onto the stack before if loading subscript doesn't tamper that - ** address in the primary. - */ - if (!ConstBaseAddr) { - RemoveCode (&Mark2); - } else { - /* Get an array pointer into the primary */ - LoadExpr (CF_NONE, Expr); - } - - if (IsClassPtr (Expr->Type)) { - - /* Lhs is pointer/array. Scale the subscript value according to - ** the element size. - */ - Subscript.IVal *= CheckedSizeOf (ElementType); - - /* Remove the address load code */ - RemoveCode (&Mark1); - - /* In case of an array, we can adjust the offset of the expression - ** already in Expr. If the base address was a constant, we can even - ** remove the code that loaded the address into the primary. - */ - if (!IsTypeArray (Expr->Type)) { - - /* It's a pointer, so we do have to load it into the primary - ** first (if it's not already there). - */ - if (!ConstBaseAddr && ED_IsLVal (Expr)) { - LoadExpr (CF_NONE, Expr); - ED_FinalizeRValLoad (Expr); - } - } - - /* Adjust the offset */ - Expr->IVal += Subscript.IVal; - - } else { - - /* Scale the lhs value according to the element type */ - g_scale (TypeOf (tptr1), CheckedSizeOf (ElementType)); - - /* Add the subscript. Since arrays are indexed by integers, - ** we will ignore the true type of the subscript here and - ** use always an int. #### Use offset but beware of LoadExpr! - */ - g_inc (CF_INT | CF_CONST, Subscript.IVal); - - } - - } else { - - /* Array subscript is not constant. Load it into the primary */ - GetCodePos (&Mark2); - LoadExpr (CF_NONE, &Subscript); - - /* Do scaling */ - if (IsClassPtr (Expr->Type)) { - - /* Indexing is based on unsigneds, so we will just use the integer - ** portion of the index (which is in (e)ax, so there's no further - ** action required). - */ - g_scale (CF_INT, CheckedSizeOf (ElementType)); - - } else { - - /* Get the int value on top. If we come here, we're sure, both - ** values are 16 bit (the first one was truncated if necessary - ** and the second one is a pointer). Note: If ConstBaseAddr is - ** true, we don't have a value on stack, so to "swap" both, just - ** push the subscript. - */ - if (ConstBaseAddr) { - g_push (CF_INT, 0); - LoadExpr (CF_NONE, Expr); - ConstBaseAddr = 0; - } else { - g_swap (CF_INT); - } - - /* Scale it */ - g_scale (TypeOf (tptr1), CheckedSizeOf (ElementType)); - - } - - /* The offset is now in the primary register. It we didn't have a - ** constant base address for the lhs, the lhs address is already - ** on stack, and we must add the offset. If the base address was - ** constant, we call special functions to add the address to the - ** offset value. - */ - if (!ConstBaseAddr) { - - /* The array base address is on stack and the subscript is in the - ** primary. Add both. - */ - g_add (CF_INT, 0); - - } else { - - /* The subscript is in the primary, and the array base address is - ** in Expr. If the subscript has itself a constant address, it is - ** often a better idea to reverse again the order of the - ** evaluation. This will generate better code if the subscript is - ** a byte sized variable. But beware: This is only possible if the - ** subscript was not scaled, that is, if this was a byte array - ** or pointer. - */ - if (ED_IsLocQuasiConst (&Subscript) && - CheckedSizeOf (ElementType) == SIZEOF_CHAR) { - - unsigned Flags; - - /* Reverse the order of evaluation */ - if (CheckedSizeOf (Subscript.Type) == SIZEOF_CHAR) { - Flags = CF_CHAR; - } else { - Flags = CF_INT; - } - RemoveCode (&Mark2); - - /* Get a pointer to the array into the primary. */ - LoadExpr (CF_NONE, Expr); - - /* Add the variable */ - if (ED_IsLocStack (&Subscript)) { - g_addlocal (Flags, Subscript.IVal); - } else { - Flags |= GlobalModeFlags (&Subscript); - g_addstatic (Flags, Subscript.Name, Subscript.IVal); - } - } else { - - if (ED_IsLocNone (Expr) || - (ED_IsLocAbs (Expr) && ED_IsAddrExpr (Expr))) { - /* Constant numeric address. Just add it */ - g_inc (CF_INT, Expr->IVal); - } else if (ED_IsLocStack (Expr)) { - /* Base address is a local variable address */ - if (ED_IsAddrExpr (Expr)) { - g_addaddr_local (CF_INT, Expr->IVal); - } else { - g_addlocal (CF_PTR, Expr->IVal); - } - } else { - /* Base address is a static variable address */ - unsigned Flags = CF_INT | GlobalModeFlags (Expr); - if (ED_IsAddrExpr (Expr)) { - /* Add the address of the location */ - g_addaddr_static (Flags, Expr->Name, Expr->IVal); - } else { - /* Add the contents of the location */ - g_addstatic (Flags, Expr->Name, Expr->IVal); - } - } - } - } - - /* The address of the element is an rvalue in the primary */ - ED_FinalizeRValLoad (Expr); - - } - - /* The final result is usually an lvalue expression of element type - ** referenced in the primary, unless it is once again an array. We can just - ** assume the usual case first, and change it later if necessary. - */ - ED_IndExpr (Expr); - Expr->Type = ElementType; - - /* An array element is actually a variable. So the rules for variables with - ** respect to the reference type apply: If it's an array, it is virtually - ** an rvalue address, otherwise it's an lvalue reference. (A function would - ** also be an rvalue address, but an array cannot contain functions). - */ - if (IsTypeArray (Expr->Type)) { - ED_AddrExpr (Expr); - } - - /* Consume the closing bracket */ - ConsumeRBrack (); -} - - - static void StructRef (ExprDesc* Expr) /* Process struct/union field after . or ->. */ { @@ -1793,7 +1514,7 @@ static void hie11 (ExprDesc *Expr) case TOK_LBRACK: /* Array reference */ - ArrayRef (Expr); + parseadd (Expr, 1); break; case TOK_LPAREN: @@ -3034,10 +2755,11 @@ static void hie9 (ExprDesc *Expr) -static void parseadd (ExprDesc* Expr) -/* Parse an expression with the binary plus operator. Expr contains the -** unprocessed left hand side of the expression and will contain the -** result of the expression on return. +static void parseadd (ExprDesc* Expr, int DoArrayRef) +/* Parse an expression with the binary plus or subscript operator. Expr contains +** the unprocessed left hand side of the expression and will contain the result +** of the expression on return. If DoArrayRef is zero, this evaluates the binary +** plus operation. Otherwise, this evaluates the subscript operation. */ { ExprDesc Expr2; @@ -3052,7 +2774,7 @@ static void parseadd (ExprDesc* Expr) ED_Init (&Expr2); Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; - /* Skip the PLUS token */ + /* Skip the PLUS or opening bracket token */ NextToken (); /* Get the left hand side type, initialize operation flags */ @@ -3077,7 +2799,7 @@ static void parseadd (ExprDesc* Expr) if (ED_IsQuasiConst (Expr)) { /* The left hand side is a constant of some sort. Good. Get rhs */ - ExprWithCheck (hie9, &Expr2); + ExprWithCheck (DoArrayRef ? hie0 : hie9, &Expr2); /* Right hand side is constant. Get the rhs type */ rhst = Expr2.Type; @@ -3094,7 +2816,7 @@ static void parseadd (ExprDesc* Expr) lscale = CheckedPSizeOf (rhst); /* Operate on pointers, result type is a pointer */ flags = CF_PTR; - } else if (IsClassInt (lhst) && IsClassInt (rhst)) { + } else if (!DoArrayRef && IsClassInt (lhst) && IsClassInt (rhst)) { /* Integer addition */ flags = CF_INT; } else { @@ -3123,20 +2845,22 @@ static void parseadd (ExprDesc* Expr) } if (AddDone) { - /* Adjust the result */ - if (IsClassPtr (lhst)) { - /* Result type is a pointer */ - Expr->Type = PtrConversion (lhst); - } else if (IsClassPtr (rhst)) { - /* Result type is a pointer */ - Expr->Type = PtrConversion (rhst); - } else { - /* Limit the calculated value to the range of its type */ - LimitExprValue (Expr); - } + /* Adjust the result for addition */ + if (!DoArrayRef) { + if (IsClassPtr (lhst)) { + /* Result type is a pointer */ + Expr->Type = lhst; + } else if (IsClassPtr (rhst)) { + /* Result type is a pointer */ + Expr->Type = rhst; + } else { + /* Limit the calculated value to the range of its type */ + LimitExprValue (Expr); + } - /* The result is always an rvalue */ - ED_MarkExprAsRVal (Expr); + /* The result is always an rvalue */ + ED_MarkExprAsRVal (Expr); + } } else { /* Decide the order */ if (!ED_IsAbs (&Expr2) && rscale > 1) { @@ -3214,7 +2938,7 @@ static void parseadd (ExprDesc* Expr) /* Operate on pointers, result type is a pointer */ flags |= CF_PTR; Expr->Type = Expr2.Type; - } else if (IsClassInt (lhst) && IsClassInt (rhst)) { + } else if (!DoArrayRef && IsClassInt (lhst) && IsClassInt (rhst)) { /* Integer addition */ flags |= typeadjust (Expr, &Expr2, 1); } else { @@ -3270,8 +2994,6 @@ static void parseadd (ExprDesc* Expr) g_add (CF_PTR, 0); } } - /* Array and function types must be converted to pointer types */ - Expr->Type = PtrConversion (Expr->Type); /* Result is an rvalue in primary register */ ED_FinalizeRValLoad (Expr); @@ -3286,7 +3008,7 @@ static void parseadd (ExprDesc* Expr) g_push (flags, 0); /* --> stack */ /* Evaluate the rhs */ - MarkedExprWithCheck (hie9, &Expr2); + MarkedExprWithCheck (DoArrayRef ? hie0 : hie9, &Expr2); /* Get the rhs type */ rhst = Expr2.Type; @@ -3309,7 +3031,7 @@ static void parseadd (ExprDesc* Expr) /* Operate on pointers, result type is a pointer */ flags = CF_PTR; Expr->Type = Expr2.Type; - } else if (IsClassInt (lhst) && IsClassInt (rhst)) { + } else if (!DoArrayRef && IsClassInt (lhst) && IsClassInt (rhst)) { /* Integer addition */ flags = typeadjust (Expr, &Expr2, 1); } else { @@ -3356,7 +3078,7 @@ static void parseadd (ExprDesc* Expr) /* Operate on pointers, result type is a pointer */ flags = CF_PTR; Expr->Type = Expr2.Type; - } else if (IsClassInt (lhst) && IsClassInt (rhst)) { + } else if (!DoArrayRef && IsClassInt (lhst) && IsClassInt (rhst)) { /* Integer addition. Note: Result is never constant. ** Problem here is that typeadjust does not know if the ** variable is an rvalue or lvalue, so if both operands @@ -3380,18 +3102,69 @@ static void parseadd (ExprDesc* Expr) } - /* Array and function types must be converted to pointer types */ - Expr->Type = PtrConversion (Expr->Type); - /* Result is an rvalue in primary register */ ED_FinalizeRValLoad (Expr); } - if (AddDone < 0) { - Error ("Invalid operands for binary operator '+'"); + /* Deal with array ref */ + if (DoArrayRef) { + TypeCode Qualifiers = T_QUAL_NONE; + Type* ElementType; + + /* Check the types of array and subscript */ + if (IsClassPtr (lhst)) { + if (!IsClassInt (rhst)) { + Error ("Array subscript is not an integer"); + ED_MakeConstAbs (Expr, 0, GetCharArrayType (1)); + } else if (IsTypeArray (lhst)) { + Qualifiers = GetQualifier (lhst); + } + } else if (IsClassInt (lhst)) { + if (!IsClassPtr (rhst)) { + Error ("Subscripted value is neither array nor pointer"); + ED_MakeConstAbs (Expr, 0, GetCharArrayType (1)); + } else if (IsTypeArray (rhst)) { + Qualifiers = GetQualifier (rhst); + } + } else { + Error ("Cannot subscript"); + ED_MakeConstAbs (Expr, 0, GetCharArrayType (1)); + } + + /* The element type has the combined qualifiers from itself and the array, + ** it is a member of (if any). + */ + ElementType = Indirect (Expr->Type); + if (GetQualifier (ElementType) != (GetQualifier (ElementType) | Qualifiers)) { + ElementType = TypeDup (ElementType); + ElementType->C |= Qualifiers; + } + + /* The final result is usually an lvalue expression of element type + ** referenced in the primary, unless it is once again an array. We can just + ** assume the usual case first, and change it later if necessary. + */ + ED_IndExpr (Expr); + Expr->Type = ElementType; + + /* An array element is actually a variable. So the rules for variables with + ** respect to the reference type apply: If it's an array, it is virtually + ** an rvalue address, otherwise it's an lvalue reference. (A function would + ** also be an rvalue address, but an array cannot contain functions). + */ + if (IsTypeArray (Expr->Type)) { + ED_AddrExpr (Expr); + } + + /* Consume the closing bracket */ + ConsumeRBrack (); } else { - /* Array and function types must be converted to pointer types */ - Expr->Type = PtrConversion (Expr->Type); + if (AddDone < 0) { + Error ("Invalid operands for binary operator '+'"); + } else { + /* Array and function types must be converted to pointer types */ + Expr->Type = PtrConversion (Expr->Type); + } } /* Condition code not set */ @@ -3436,7 +3209,7 @@ static void parsesub (ExprDesc* Expr) /* Remember the output queue position, then bring the value onto the stack */ GetCodePos (&Mark1); - LoadExpr (CF_NONE, Expr); /* --> primary register */ + LoadExpr (CF_NONE, Expr); /* --> primary register */ GetCodePos (&Mark2); g_push (TypeOf (lhst), 0); /* --> stack */ @@ -3658,7 +3431,7 @@ void hie8 (ExprDesc* Expr) ExprWithCheck (hie9, Expr); while (CurTok.Tok == TOK_PLUS || CurTok.Tok == TOK_MINUS) { if (CurTok.Tok == TOK_PLUS) { - parseadd (Expr); + parseadd (Expr, 0); } else { parsesub (Expr); } From 8eeaaa3f36a973fdae29e7c66cc519104376c4d4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 15 Feb 2021 09:50:46 +0800 Subject: [PATCH 0745/2710] Made certain types of comparison between addresses in constant expressions work. --- src/cc65/expr.c | 109 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 73 insertions(+), 36 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index e2cd09468..6684d9c56 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2361,7 +2361,6 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ void (*hienext) (ExprDesc*)) /* Helper function for the compare operators */ { - CodeMark Mark0; CodeMark Mark1; CodeMark Mark2; const GenDesc* Gen; @@ -2370,7 +2369,6 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ int rconst; /* Operand is a constant */ - GetCodePos (&Mark0); ExprWithCheck (hienext, Expr); while ((Gen = FindGen (CurTok.Tok, Ops)) != 0) { @@ -2395,11 +2393,11 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ GetCodePos (&Mark1); ltype = TypeOf (Expr->Type); if (ED_IsConstAbs (Expr)) { - /* Constant value */ + /* Numeric constant value */ GetCodePos (&Mark2); g_push (ltype | CF_CONST, Expr->IVal); } else { - /* Value not constant */ + /* Value not numeric constant */ LoadExpr (CF_NONE, Expr); GetCodePos (&Mark2); g_push (ltype, 0); @@ -2413,10 +2411,10 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ Expr2.Type = PointerTo (Expr2.Type); } - /* Check for a constant expression */ + /* Check for a numeric constant expression */ rconst = (ED_IsConstAbs (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)); if (!rconst) { - /* Not constant, load into the primary */ + /* Not numeric constant, load into the primary */ LoadExpr (CF_NONE, &Expr2); } @@ -2475,10 +2473,76 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ } } - /* Check for const operands */ - if (ED_IsConstAbs (Expr) && rconst) { + /* Check for numeric constant operands */ + if ((ED_IsAddrExpr (Expr) && ED_IsNullPtr (&Expr2)) || + (ED_IsNullPtr (Expr) && ED_IsAddrExpr (&Expr2))) { - /* Both operands are constant, remove the generated code */ + /* Object addresses are inequal to null pointer */ + Expr->IVal = (Tok != TOK_EQ); + if (ED_IsNullPtr (&Expr2)) { + if (Tok == TOK_LT || Tok == TOK_LE) { + Expr->IVal = 0; + } + } else { + if (Tok == TOK_GT || Tok == TOK_GE) { + Expr->IVal = 0; + } + } + + /* Get rid of unwanted flags */ + ED_MakeConstBool (Expr, Expr->IVal); + + /* The result is constant, this is suspicious when not in + ** preprocessor mode. + */ + WarnConstCompareResult (Expr); + + if (ED_CodeRangeIsEmpty (&Expr2)) { + /* Both operands are static, remove the load code */ + RemoveCode (&Mark1); + } else { + /* Drop pushed lhs */ + g_drop (sizeofarg (ltype)); + pop (ltype); + } + + } else if (ED_IsAddrExpr (Expr) && + ED_IsAddrExpr (&Expr2) && + Expr->Sym == Expr2.Sym) { + + /* Evaluate the result for static addresses */ + unsigned long Val1 = Expr->IVal; + unsigned long Val2 = Expr2.IVal; + switch (Tok) { + case TOK_EQ: Expr->IVal = (Val1 == Val2); break; + case TOK_NE: Expr->IVal = (Val1 != Val2); break; + case TOK_LT: Expr->IVal = (Val1 < Val2); break; + case TOK_LE: Expr->IVal = (Val1 <= Val2); break; + case TOK_GE: Expr->IVal = (Val1 >= Val2); break; + case TOK_GT: Expr->IVal = (Val1 > Val2); break; + default: Internal ("hie_compare: got token 0x%X\n", Tok); + } + + /* Get rid of unwanted flags */ + ED_MakeConstBool (Expr, Expr->IVal); + + /* If the result is constant, this is suspicious when not in + ** preprocessor mode. + */ + WarnConstCompareResult (Expr); + + if (ED_CodeRangeIsEmpty (&Expr2)) { + /* Both operands are static, remove the load code */ + RemoveCode (&Mark1); + } else { + /* Drop pushed lhs */ + g_drop (sizeofarg (ltype)); + pop (ltype); + } + + } else if (ED_IsConstAbs (Expr) && rconst) { + + /* Both operands are numeric constant, remove the generated code */ RemoveCode (&Mark1); /* Determine if this is a signed or unsigned compare */ @@ -2522,33 +2586,6 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ */ WarnConstCompareResult (Expr); - } else if (ED_CodeRangeIsEmpty (&Expr2) && - ((ED_IsAddrExpr (Expr) && ED_IsNullPtr (&Expr2)) || - (ED_IsNullPtr (Expr) && (ED_IsAddrExpr (&Expr2))))) { - - /* Object addresses are inequal to null pointer */ - Expr->IVal = (Tok != TOK_EQ); - if (ED_IsNullPtr (&Expr2)) { - if (Tok == TOK_LT || Tok == TOK_LE) { - Expr->IVal = 0; - } - } else { - if (Tok == TOK_GT || Tok == TOK_GE) { - Expr->IVal = 0; - } - } - - /* Get rid of unwanted flags */ - ED_MakeConstBool (Expr, Expr->IVal); - - /* If the result is constant, this is suspicious when not in - ** preprocessor mode. - */ - WarnConstCompareResult (Expr); - - /* Both operands are static, remove the generated code */ - RemoveCode (&Mark1); - } else { /* Determine the signedness of the operands */ From b02838439c0c4a237e6094b71415193e44485be4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Feb 2021 12:33:26 +0800 Subject: [PATCH 0746/2710] Changed g_addaddr_local() codegen to reduce code size. --- src/cc65/codegen.c | 51 +++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index bf7c900ab..f8a1dcdf6 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -2112,29 +2112,38 @@ void g_addaddr_local (unsigned flags attribute ((unused)), int offs) /* Add the offset */ offs -= StackPtr; - if (offs != 0) { - /* We cannot address more then 256 bytes of locals anyway */ - L = GetLocalLabel(); - CheckLocalOffs (offs); - AddCodeLine ("clc"); - AddCodeLine ("adc #$%02X", offs & 0xFF); - /* Do also skip the CLC insn below */ - AddCodeLine ("bcc %s", LocalLabelName (L)); - AddCodeLine ("inx"); - } + if (IS_Get (&CodeSizeFactor) <= 100) { + if (offs != 0) { + /* We cannot address more then 256 bytes of locals anyway */ + g_inc (CF_INT | CF_CONST, offs); + } + /* Add the current stackpointer value */ + AddCodeLine ("jsr leaaxsp"); + } else { + if (offs != 0) { + /* We cannot address more then 256 bytes of locals anyway */ + L = GetLocalLabel(); + CheckLocalOffs (offs); + AddCodeLine ("clc"); + AddCodeLine ("adc #$%02X", offs & 0xFF); + /* Do also skip the CLC insn below */ + AddCodeLine ("bcc %s", LocalLabelName (L)); + AddCodeLine ("inx"); + } - /* Add the current stackpointer value */ - AddCodeLine ("clc"); - if (L != 0) { - /* Label was used above */ - g_defcodelabel (L); + /* Add the current stackpointer value */ + AddCodeLine ("clc"); + if (L != 0) { + /* Label was used above */ + g_defcodelabel (L); + } + AddCodeLine ("adc sp"); + AddCodeLine ("tay"); + AddCodeLine ("txa"); + AddCodeLine ("adc sp+1"); + AddCodeLine ("tax"); + AddCodeLine ("tya"); } - AddCodeLine ("adc sp"); - AddCodeLine ("tay"); - AddCodeLine ("txa"); - AddCodeLine ("adc sp+1"); - AddCodeLine ("tax"); - AddCodeLine ("tya"); } From d3c495e8b99a385231720358f5f4464866cd3ea8 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Tue, 16 Feb 2021 22:19:34 +0100 Subject: [PATCH 0747/2710] ar65: fix parallel builds by using a per-process temp file --- src/ar65/library.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ar65/library.c b/src/ar65/library.c index 08fdeb563..fd761d04e 100644 --- a/src/ar65/library.c +++ b/src/ar65/library.c @@ -249,9 +249,10 @@ void LibOpen (const char* Name, int MustExist, int NeedTemp) if (NeedTemp) { /* Create the temporary library name */ - NewLibName = xmalloc (strlen (Name) + strlen (".temp") + 1); + NewLibName = xmalloc (strlen (Name) + strlen (".temp-") + 8 + 1); strcpy (NewLibName, Name); - strcat (NewLibName, ".temp"); + strcat (NewLibName, ".temp-"); + sprintf (NewLibName + strlen (NewLibName), "%X", (unsigned int)getpid()); /* Create the temporary library */ NewLib = fopen (NewLibName, "w+b"); From 64449f0f54496908d183510ac617da8a8b11acca Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Wed, 17 Feb 2021 00:36:58 +0100 Subject: [PATCH 0748/2710] ar65: better version of last change --- src/ar65/library.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/ar65/library.c b/src/ar65/library.c index fd761d04e..c142df99a 100644 --- a/src/ar65/library.c +++ b/src/ar65/library.c @@ -249,10 +249,8 @@ void LibOpen (const char* Name, int MustExist, int NeedTemp) if (NeedTemp) { /* Create the temporary library name */ - NewLibName = xmalloc (strlen (Name) + strlen (".temp-") + 8 + 1); - strcpy (NewLibName, Name); - strcat (NewLibName, ".temp-"); - sprintf (NewLibName + strlen (NewLibName), "%X", (unsigned int)getpid()); + NewLibName = xmalloc (strlen (Name) + (sizeof (".temp-") - 1) + 2 * sizeof (unsigned int) + 1); + sprintf (NewLibName, "%s.temp-%X", Name, (unsigned int)getpid ()); /* Create the temporary library */ NewLib = fopen (NewLibName, "w+b"); From 358d750b3e8379b3f36d8bf9c514532e4d51743a Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Tue, 16 Feb 2021 22:19:34 +0100 Subject: [PATCH 0749/2710] ar65: fix parallel builds by using a per-process temp file --- src/ar65/library.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ar65/library.c b/src/ar65/library.c index c142df99a..991cfe110 100644 --- a/src/ar65/library.c +++ b/src/ar65/library.c @@ -36,6 +36,8 @@ #include <stdio.h> #include <string.h> #include <errno.h> +#include <sys/types.h> +#include <unistd.h> /* common */ #include "cmdline.h" From 9b05fe9982a1c377d224071e4f68a813283a7b50 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Thu, 18 Mar 2021 20:08:22 +0100 Subject: [PATCH 0750/2710] src/ar65/library.c: fix compilation on Windows --- src/ar65/library.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ar65/library.c b/src/ar65/library.c index 991cfe110..342bc25d3 100644 --- a/src/ar65/library.c +++ b/src/ar65/library.c @@ -36,8 +36,12 @@ #include <stdio.h> #include <string.h> #include <errno.h> +#if defined(_WIN32) +#include <process.h> +#else #include <sys/types.h> #include <unistd.h> +#endif /* common */ #include "cmdline.h" From cd116e5ba06293b1b0dff81b6b3bebaff6b6e765 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Thu, 18 Mar 2021 20:18:23 +0100 Subject: [PATCH 0751/2710] src/ar65/library.c: style fix --- src/ar65/library.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ar65/library.c b/src/ar65/library.c index 342bc25d3..d12fb198a 100644 --- a/src/ar65/library.c +++ b/src/ar65/library.c @@ -37,10 +37,10 @@ #include <string.h> #include <errno.h> #if defined(_WIN32) -#include <process.h> +# include <process.h> #else -#include <sys/types.h> -#include <unistd.h> +# include <sys/types.h> +# include <unistd.h> #endif /* common */ From 6974c1ff12981f29b74ca183ac405edd293360f6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 19 Mar 2021 15:02:53 +0800 Subject: [PATCH 0752/2710] Fixed and cleaned up codegen logic with arithmetic conversion in addition and subtraction. --- src/cc65/expr.c | 60 +++++++++++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 6684d9c56..4f579b7ae 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2861,17 +2861,18 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) AddDone = -1; } + /* Do constant calculation if we can */ if (ED_IsAbs (&Expr2) && (ED_IsAbs (Expr) || lscale == 1)) { if (IsClassInt (lhst) && IsClassInt (rhst)) { - typeadjust (Expr, &Expr2, 1); + Expr->Type = ArithmeticConvert (Expr->Type, Expr2.Type); } Expr->IVal = Expr->IVal * lscale + Expr2.IVal * rscale; AddDone = 1; } else if (ED_IsAbs (Expr) && (ED_IsAbs (&Expr2) || rscale == 1)) { if (IsClassInt (lhst) && IsClassInt (rhst)) { - typeadjust (&Expr2, Expr, 1); + Expr2.Type = ArithmeticConvert (Expr2.Type, Expr->Type); } Expr2.IVal = Expr->IVal * lscale + Expr2.IVal * rscale; /* Adjust the flags */ @@ -3053,7 +3054,7 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) /* Check for a constant rhs expression */ if (ED_IsConstAbs (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) { - /* Rhs is a constant. Remove pushed lhs from stack. */ + /* Rhs is a numeric constant. Remove pushed lhs from stack. */ RemoveCode (&Mark); /* Check for pointer arithmetic */ @@ -3081,7 +3082,7 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) } else { - /* Lhs and rhs are not so constant. Check for pointer arithmetic. */ + /* Lhs and rhs are not so "numeric constant". Check for pointer arithmetic. */ if (IsClassPtr (lhst) && IsClassInt (rhst)) { /* Left is pointer, right is int, must scale rhs */ rscale = CheckedPSizeOf (lhst); @@ -3116,16 +3117,8 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) flags = CF_PTR; Expr->Type = Expr2.Type; } else if (!DoArrayRef && IsClassInt (lhst) && IsClassInt (rhst)) { - /* Integer addition. Note: Result is never constant. - ** Problem here is that typeadjust does not know if the - ** variable is an rvalue or lvalue, so if both operands - ** are dereferenced constant numeric addresses, typeadjust - ** thinks the operation works on constants. Removing - ** CF_CONST here means handling the symptoms, however, the - ** whole parser is such a mess that I fear to break anything - ** when trying to apply another solution. - */ - flags = typeadjust (Expr, &Expr2, 0) & ~CF_CONST; + /* Integer addition */ + flags = typeadjust (Expr, &Expr2, 0); /* Load rhs into the primary */ LoadExpr (CF_NONE, &Expr2); } else { @@ -3134,8 +3127,8 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) /* We can't just goto End as that would leave the stack unbalanced */ } - /* Generate code for the add */ - g_add (flags, 0); + /* Generate code for the add (the & is a hack here) */ + g_add (flags & ~CF_CONST, 0); } @@ -3348,8 +3341,7 @@ static void parsesub (ExprDesc* Expr) /* Operate on pointers, result type is a pointer */ flags = CF_PTR; } else if (IsClassInt (lhst) && IsClassInt (rhst)) { - /* Integer subtraction */ - flags = typeadjust (Expr, &Expr2, 1); + /* Integer subtraction. We'll adjust the types later */ } else { /* OOPS */ Error ("Invalid operands for binary operator '-'"); @@ -3370,10 +3362,12 @@ static void parsesub (ExprDesc* Expr) } if (SubDone) { - /* Remove pushed value from stack */ + /* Remove loaded and pushed value from stack */ RemoveCode (&Mark1); if (IsClassInt (lhst)) { - /* Limit the calculated value to the range of its type */ + /* Just adjust the result type */ + Expr->Type = ArithmeticConvert (Expr->Type, Expr2.Type); + /* And limit the calculated value to the range of it */ LimitExprValue (Expr); } /* The result is always an rvalue */ @@ -3382,10 +3376,18 @@ static void parsesub (ExprDesc* Expr) if (ED_IsConstAbs (&Expr2)) { /* Remove pushed value from stack */ RemoveCode (&Mark2); + if (IsClassInt (lhst)) { + /* Adjust the types */ + flags = typeadjust (Expr, &Expr2, 1); + } /* Do the subtraction */ g_dec (flags | CF_CONST, Expr2.IVal); } else { - /* Load into the primary */ + if (IsClassInt (lhst)) { + /* Adjust the types */ + flags = typeadjust (Expr, &Expr2, 0); + } + /* Load rhs into the primary */ LoadExpr (CF_NONE, &Expr2); /* Generate code for the sub (the & is a hack here) */ g_sub (flags & ~CF_CONST, 0); @@ -3403,8 +3405,7 @@ static void parsesub (ExprDesc* Expr) /* Operate on pointers, result type is a pointer */ flags = CF_PTR; } else if (IsClassInt (lhst) && IsClassInt (rhst)) { - /* Integer subtraction */ - flags = typeadjust (Expr, &Expr2, 1); + /* Integer subtraction. We'll adjust the types later */ } else { /* OOPS */ Error ("Invalid operands for binary operator '-'"); @@ -3414,10 +3415,18 @@ static void parsesub (ExprDesc* Expr) if (ED_IsConstAbs (&Expr2)) { /* Remove pushed value from stack */ RemoveCode (&Mark2); + if (IsClassInt (lhst)) { + /* Adjust the types */ + flags = typeadjust (Expr, &Expr2, 1); + } /* Do the subtraction */ g_dec (flags | CF_CONST, Expr2.IVal); } else { - /* Rhs is not numeric, load into the primary */ + if (IsClassInt (lhst)) { + /* Adjust the types */ + flags = typeadjust (Expr, &Expr2, 0); + } + /* Load rhs into the primary */ LoadExpr (CF_NONE, &Expr2); /* Generate code for the sub (the & is a hack here) */ g_sub (flags & ~CF_CONST, 0); @@ -3429,6 +3438,9 @@ static void parsesub (ExprDesc* Expr) } else { + /* We'll use the pushed lhs on stack instead of the original source */ + ED_FinalizeRValLoad (Expr); + /* Right hand side is not constant, load into the primary */ LoadExpr (CF_NONE, &Expr2); From 9ec9d1e20c5c730869371766aae6be96e4404db4 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 19 Mar 2021 20:53:52 +0100 Subject: [PATCH 0753/2710] test for issue #1431 / pr #1424 --- test/val/bug1431.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 test/val/bug1431.c diff --git a/test/val/bug1431.c b/test/val/bug1431.c new file mode 100644 index 000000000..9eae3bdbd --- /dev/null +++ b/test/val/bug1431.c @@ -0,0 +1,33 @@ +/* +$ cl65 -Osir --codesize 180 -S -o main.s main.c +main.c(9): Internal compiler error: +Code generation messed up: StackPtr is -2, should be -4 + +Input: if (wcnt > btw) { + +$ git bisect bad +aa6fdf58b8a17b747090fb521f3d9106e0c56d1c is the first bad commit +commit aa6fdf58b8a17b747090fb521f3d9106e0c56d1c +Author: acqn <acqn163@outlook.com> +Date: Mon Feb 8 09:03:19 2021 +0800 + + Addresses in constant subtraction expressions now work. + Fixed codegen for cast type subtraction in constant expressions. +*/ + +unsigned long fptr = 0x40001; + +int main(void) +{ + unsigned int btw = 500; + unsigned int wcnt; + + wcnt = 512U - (fptr % 512U); + + if (wcnt > btw) { + wcnt = btw; + } + + return wcnt == 500 ? 0 : 1; +} + From 7d528d9eb0e3e667e198850ce46ca98c7adf0ca7 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 19 Mar 2021 22:26:49 +0100 Subject: [PATCH 0754/2710] fix typo --- include/cbm_screen_charmap.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/cbm_screen_charmap.h b/include/cbm_screen_charmap.h index 76e0d7d7b..5bf4c3f90 100644 --- a/include/cbm_screen_charmap.h +++ b/include/cbm_screen_charmap.h @@ -8,7 +8,7 @@ /* from ASCII to screen-code mapping, so you can write directly */ /* to the screen memory. */ /* */ -/* If this include is used, no additional macroes are needed. */ +/* If this include is used, no additional macros are needed. */ /* */ /*****************************************************************************/ From 57e69d964710593ccdee028104e9a5aa0b04760f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 19 Mar 2021 23:35:34 +0100 Subject: [PATCH 0755/2710] test related to pr #1425 --- test/val/pr1425.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 test/val/pr1425.c diff --git a/test/val/pr1425.c b/test/val/pr1425.c new file mode 100644 index 000000000..e3ae23ba3 --- /dev/null +++ b/test/val/pr1425.c @@ -0,0 +1,45 @@ + +/* pr #1425 - Ternary fixes */ + +unsigned char fails = 0; + +void test1(void) +{ + int x = 0; + x ? (void)x-- : (void)1; + if (x != 0) { + fails++; + } +} + +int test2(void) +{ + int x = 0, y = 0; + x ? (void)x--, (void)y++ : (void)1; + if (x != 0) { + fails++; + } + if (y != 0) { + fails++; + } +} + +void test3(void) +{ + int x = 0, y = 0; + x ? ((void)x--, (void)y++) : (void)1; + if (x != 0) { + fails++; + } + if (y != 0) { + fails++; + } +} + +int main(void) +{ + test1(); + test2(); + test3(); + return fails; +} From cc040ca04a861030de751c70a52dc2fcd2c06727 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 19 Mar 2021 23:39:56 +0100 Subject: [PATCH 0756/2710] remove, fucking git --- test/val/pr1425.c | 45 --------------------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 test/val/pr1425.c diff --git a/test/val/pr1425.c b/test/val/pr1425.c deleted file mode 100644 index e3ae23ba3..000000000 --- a/test/val/pr1425.c +++ /dev/null @@ -1,45 +0,0 @@ - -/* pr #1425 - Ternary fixes */ - -unsigned char fails = 0; - -void test1(void) -{ - int x = 0; - x ? (void)x-- : (void)1; - if (x != 0) { - fails++; - } -} - -int test2(void) -{ - int x = 0, y = 0; - x ? (void)x--, (void)y++ : (void)1; - if (x != 0) { - fails++; - } - if (y != 0) { - fails++; - } -} - -void test3(void) -{ - int x = 0, y = 0; - x ? ((void)x--, (void)y++) : (void)1; - if (x != 0) { - fails++; - } - if (y != 0) { - fails++; - } -} - -int main(void) -{ - test1(); - test2(); - test3(); - return fails; -} From a51d6d40de4a6a60d27c472358cd4e1ece5f5986 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 14 Mar 2021 02:39:40 +0800 Subject: [PATCH 0757/2710] Ternary fix for some obscure cases. --- src/cc65/expr.c | 66 +++++++++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 4f579b7ae..422159c4b 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3987,24 +3987,24 @@ static void hieQuest (ExprDesc* Expr) */ ExprWithCheck (hie1, &Expr2); Expr2IsNULL = ED_IsNullPtr (&Expr2); - if (!IsTypeVoid (Expr2.Type)) { - if (!ConstantCond || !ED_IsConst (&Expr2)) { - /* Load it into the primary */ - LoadExpr (CF_NONE, &Expr2); + if (!IsTypeVoid (Expr2.Type) && + ED_YetToLoad (&Expr2) && + (!ConstantCond || !ED_IsConst (&Expr2))) { + /* Load it into the primary */ + LoadExpr (CF_NONE, &Expr2); - /* Append deferred inc/dec at sequence point */ - DoDeferred (SQP_KEEP_EXPR, &Expr2); + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_EXPR, &Expr2); - ED_FinalizeRValLoad (&Expr2); - } else { - /* Constant boolean subexpression could still have deferred inc/ - ** dec operations, so just flush their side-effects at this - ** sequence point. - */ - DoDeferred (SQP_KEEP_NONE, &Expr2); - } - Expr2.Type = PtrConversion (Expr2.Type); + ED_FinalizeRValLoad (&Expr2); + } else { + /* Constant boolean subexpression could still have deferred inc/ + ** dec operations, so just flush their side-effects at this + ** sequence point. + */ + DoDeferred (SQP_KEEP_NONE, &Expr2); } + Expr2.Type = PtrConversion (Expr2.Type); if (!ConstantCond) { /* Remember the current code position */ @@ -4021,6 +4021,9 @@ static void hieQuest (ExprDesc* Expr) g_defcodelabel (FalseLab); } else { if (Expr->IVal == 0) { + /* Expr2 is unevaluated when the condition is false */ + Expr2.Flags |= E_EVAL_UNEVAL; + /* Remove the load code of Expr2 */ RemoveCode (&SkippedBranch); } else { @@ -4035,26 +4038,29 @@ static void hieQuest (ExprDesc* Expr) */ ExprWithCheck (hie1, &Expr3); Expr3IsNULL = ED_IsNullPtr (&Expr3); - if (!IsTypeVoid (Expr3.Type)) { - if (!ConstantCond || !ED_IsConst (&Expr3)) { - /* Load it into the primary */ - LoadExpr (CF_NONE, &Expr3); + if (!IsTypeVoid (Expr3.Type) && + ED_YetToLoad (&Expr3) && + (!ConstantCond || !ED_IsConst (&Expr3))) { + /* Load it into the primary */ + LoadExpr (CF_NONE, &Expr3); - /* Append deferred inc/dec at sequence point */ - DoDeferred (SQP_KEEP_EXPR, &Expr3); + /* Append deferred inc/dec at sequence point */ + DoDeferred (SQP_KEEP_EXPR, &Expr3); - ED_FinalizeRValLoad (&Expr3); - } else { - /* Constant boolean subexpression could still have deferred inc/ - ** dec operations, so just flush their side-effects at this - ** sequence point. - */ - DoDeferred (SQP_KEEP_NONE, &Expr3); - } - Expr3.Type = PtrConversion (Expr3.Type); + ED_FinalizeRValLoad (&Expr3); + } else { + /* Constant boolean subexpression could still have deferred inc/ + ** dec operations, so just flush their side-effects at this + ** sequence point. + */ + DoDeferred (SQP_KEEP_NONE, &Expr3); } + Expr3.Type = PtrConversion (Expr3.Type); if (ConstantCond && Expr->IVal != 0) { + /* Expr3 is unevaluated when the condition is true */ + Expr3.Flags |= E_EVAL_UNEVAL; + /* Remove the load code of Expr3 */ RemoveCode (&SkippedBranch); } From 325b7b4ab3cecfafd67efadf1d5ffdc784e4635b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 14 Mar 2021 03:25:40 +0800 Subject: [PATCH 0758/2710] Enabled 'a ? b, c : d'. --- src/cc65/expr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 422159c4b..44b0d17e8 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3985,7 +3985,7 @@ static void hieQuest (ExprDesc* Expr) /* Parse second expression. Remember for later if it is a NULL pointer ** expression, then load it into the primary. */ - ExprWithCheck (hie1, &Expr2); + ExprWithCheck (hie0, &Expr2); Expr2IsNULL = ED_IsNullPtr (&Expr2); if (!IsTypeVoid (Expr2.Type) && ED_YetToLoad (&Expr2) && From bbfc24770eaa1893da7bf8ae10f7bd9cfa44db65 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 19 Mar 2021 23:42:25 +0100 Subject: [PATCH 0759/2710] test related to pr #1425 --- test/val/pr1425.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 test/val/pr1425.c diff --git a/test/val/pr1425.c b/test/val/pr1425.c new file mode 100644 index 000000000..e3ae23ba3 --- /dev/null +++ b/test/val/pr1425.c @@ -0,0 +1,45 @@ + +/* pr #1425 - Ternary fixes */ + +unsigned char fails = 0; + +void test1(void) +{ + int x = 0; + x ? (void)x-- : (void)1; + if (x != 0) { + fails++; + } +} + +int test2(void) +{ + int x = 0, y = 0; + x ? (void)x--, (void)y++ : (void)1; + if (x != 0) { + fails++; + } + if (y != 0) { + fails++; + } +} + +void test3(void) +{ + int x = 0, y = 0; + x ? ((void)x--, (void)y++) : (void)1; + if (x != 0) { + fails++; + } + if (y != 0) { + fails++; + } +} + +int main(void) +{ + test1(); + test2(); + test3(); + return fails; +} From 82fb9aa41847d08556cfe12cc51a54a3ca2e2536 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 20 Mar 2021 00:55:55 +0100 Subject: [PATCH 0760/2710] testcase related to pr #1423 --- test/val/pr1423.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 test/val/pr1423.c diff --git a/test/val/pr1423.c b/test/val/pr1423.c new file mode 100644 index 000000000..3135b64a3 --- /dev/null +++ b/test/val/pr1423.c @@ -0,0 +1,41 @@ +/* pr #1423 - Codegen fix for certain cases of object addresses as boolean */ + +unsigned char fails = 0; + +void test1(void) +{ + int a; + while (&a) { + return; + } + fails++; + return; +} + +void test2(void) +{ + int a; + do { + return; + } while (&a); + fails++; + return; +} + +void test3(void) +{ + int a; + for (;&a;) { + return; + } + fails++; + return; +} + +int main(void) +{ + test1(); + test2(); + test3(); + return fails; +} From f8835d2867d428484fd7a300fbbc1213a8af1c70 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 13 Mar 2021 14:25:51 +0800 Subject: [PATCH 0761/2710] Fixed codegen with addresses as boolean test conditions. Fixed warning on unreachable code of if body. --- src/cc65/testexpr.c | 9 +++++++-- src/cc65/testexpr.h | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/cc65/testexpr.c b/src/cc65/testexpr.c index e5db488de..243f3ebf9 100644 --- a/src/cc65/testexpr.c +++ b/src/cc65/testexpr.c @@ -70,7 +70,7 @@ unsigned Test (unsigned Label, int Invert) DoDeferred (SQP_KEEP_NONE, &Expr); /* Result is constant, so we know the outcome */ - Result = (Expr.IVal != 0); + Result = (Expr.IVal != 0) ? TESTEXPR_TRUE : TESTEXPR_FALSE; /* Constant rvalue */ if (!Invert && Expr.IVal == 0) { @@ -86,7 +86,12 @@ unsigned Test (unsigned Label, int Invert) DoDeferred (SQP_KEEP_NONE, &Expr); /* Object addresses are non-NULL */ - Result = 1; + Result = TESTEXPR_TRUE; + + /* Condition is always true */ + if (Invert) { + g_jump (Label); + } } else { diff --git a/src/cc65/testexpr.h b/src/cc65/testexpr.h index 478280a28..84b957af2 100644 --- a/src/cc65/testexpr.h +++ b/src/cc65/testexpr.h @@ -44,9 +44,9 @@ -#define TESTEXPR_UNKNOWN 0 /* Result of expression unknown */ +#define TESTEXPR_UNKNOWN -1 /* Result of expression unknown */ #define TESTEXPR_TRUE 1 /* Expression yields true */ -#define TESTEXPR_FALSE 2 /* Expression yields false */ +#define TESTEXPR_FALSE 0 /* Expression yields false */ From 3c2e7ce41cb54f3a751bbf07a1b84fd51fa89104 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 13 Mar 2021 14:27:11 +0800 Subject: [PATCH 0762/2710] More reliable test for true/false with addresses for AND, OR and ternary operators. Minor comment typo fix. --- src/cc65/expr.c | 17 +++++++++++------ src/cc65/exprdesc.c | 26 +++++++++++++++++++++++++- src/cc65/exprdesc.h | 12 +++++++++++- 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 44b0d17e8..048819d50 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3658,7 +3658,7 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) */ DoDeferred (SQP_KEEP_NONE, Expr); - if (Expr->IVal == 0 && !ED_IsAddrExpr (Expr)) { + if (ED_IsConstFalse (Expr)) { /* Skip remaining */ Flags |= E_EVAL_UNEVAL; } @@ -3713,7 +3713,7 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) */ DoDeferred (SQP_KEEP_NONE, &Expr2); - if (Expr2.IVal == 0 && !ED_IsAddrExpr (&Expr2)) { + if (ED_IsConstFalse (&Expr2)) { /* Skip remaining */ Flags |= E_EVAL_UNEVAL; /* The value of the expression will be false */ @@ -3826,7 +3826,7 @@ static void hieOr (ExprDesc *Expr) */ DoDeferred (SQP_KEEP_NONE, Expr); - if (Expr->IVal != 0 || ED_IsAddrExpr (Expr)) { + if (ED_IsConstTrue (Expr)) { /* Skip remaining */ Flags |= E_EVAL_UNEVAL; } @@ -3878,7 +3878,7 @@ static void hieOr (ExprDesc *Expr) */ DoDeferred (SQP_KEEP_NONE, &Expr2); - if (Expr2.IVal != 0 || ED_IsAddrExpr (&Expr2)) { + if (ED_IsConstTrue (&Expr2)) { /* Skip remaining */ Flags |= E_EVAL_UNEVAL; /* The result is always true */ @@ -3945,6 +3945,7 @@ static void hieQuest (ExprDesc* Expr) /* Check if it's a ternary expression */ if (CurTok.Tok == TOK_QUEST) { + /* The constant condition must be compile-time known as well */ int ConstantCond = ED_IsConstBool (Expr); unsigned Flags = Expr->Flags & E_MASK_KEEP_RESULT; @@ -3955,9 +3956,13 @@ static void hieQuest (ExprDesc* Expr) NextToken (); - /* Convert non-integer constant boolean */ - if (ED_IsAddrExpr (Expr)) { + /* Convert non-integer constant to boolean constant, so that we may just + ** check it in the same way. + */ + if (ED_IsConstTrue (Expr)) { ED_MakeConstBool (Expr, 1); + } else if (ED_IsConstFalse (Expr)) { + ED_MakeConstBool (Expr, 0); } if (!ConstantCond) { diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index aa98e1531..d1113d9a5 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -397,6 +397,30 @@ int ED_IsConstBool (const ExprDesc* Expr) +int ED_IsConstTrue (const ExprDesc* Expr) +/* Return true if the constant expression can be evaluated as boolean true at +** compile time. +*/ +{ + /* Non-zero arithmetics and objects addresses are boolean true */ + return (ED_IsConstAbsInt (Expr) && Expr->IVal != 0) || + (ED_IsAddrExpr (Expr)); +} + + + +int ED_IsConstFalse (const ExprDesc* Expr) +/* Return true if the constant expression can be evaluated as boolean false at +** compile time. +*/ +{ + /* Zero arithmetics and null pointers are boolean false */ + return (ED_IsConstAbsInt (Expr) && Expr->IVal == 0) || + ED_IsNullPtr (Expr); +} + + + int ED_IsConst (const ExprDesc* Expr) /* Return true if the expression denotes a constant of some sort. This can be a ** numeric constant, the address of a global variable (maybe with offset) or @@ -449,7 +473,7 @@ int ED_IsNullPtr (const ExprDesc* Expr) int ED_IsBool (const ExprDesc* Expr) -/* Return true of the expression can be treated as a boolean, that is, it can +/* Return true if the expression can be treated as a boolean, that is, it can ** be an operand to a compare operation. */ { diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index 844af1566..a4f5eb848 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -643,6 +643,16 @@ int ED_IsConstAbsInt (const ExprDesc* Expr); int ED_IsConstBool (const ExprDesc* Expr); /* Return true if the expression can be constantly evaluated as a boolean. */ +int ED_IsConstTrue (const ExprDesc* Expr); +/* Return true if the constant expression can be evaluated as boolean true at +** compile time. +*/ + +int ED_IsConstFalse (const ExprDesc* Expr); +/* Return true if the constant expression can be evaluated as boolean false at +** compile time. +*/ + int ED_IsConst (const ExprDesc* Expr); /* Return true if the expression denotes a constant of some sort. This can be a ** numeric constant, the address of a global variable (maybe with offset) or @@ -668,7 +678,7 @@ int ED_IsNullPtr (const ExprDesc* Expr); /* Return true if the given expression is a NULL pointer constant */ int ED_IsBool (const ExprDesc* Expr); -/* Return true of the expression can be treated as a boolean, that is, it can +/* Return true if the expression can be treated as a boolean, that is, it can ** be an operand to a compare operation with 0/NULL. */ From 531a31722e2e6183e060ca4dc7d3c2c56bc9106d Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Mon, 22 Mar 2021 14:06:40 +0100 Subject: [PATCH 0763/2710] fix typo --- doc/atari.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/atari.sgml b/doc/atari.sgml index 7fc929f42..f2ced13e1 100644 --- a/doc/atari.sgml +++ b/doc/atari.sgml @@ -1170,7 +1170,7 @@ When using cl65, you can leave it out with this command line: cl65 -Wl -D__SYSTEM_CHECK__=1 <arguments> </verb></tscreen> -The value you assign to <tt/__SYSTEM_CHECK_/ doesn't matter. If the +The value you assign to <tt/__SYSTEM_CHECK__/ doesn't matter. If the <tt/__SYSTEM_CHECK__/ symbol is defined, the load chunk won't be included. From 55e89416cdd18bae1e687c97fc9b106105866a5e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 22 Mar 2021 19:12:44 +0100 Subject: [PATCH 0764/2710] test related to issue #1196 and pr #1424 respectively --- test/val/constexpr.c | 112 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 test/val/constexpr.c diff --git a/test/val/constexpr.c b/test/val/constexpr.c new file mode 100644 index 000000000..c92302a58 --- /dev/null +++ b/test/val/constexpr.c @@ -0,0 +1,112 @@ + +/* + +This tests a couple of expressions which yield constant results. While we cant +really check if the compiler figures out they are constant, we can still check +if they are being compiled/evaluated correctly. + +related: + +pr #1424 - More compile-time constant expressions regarding object addresses +issue #1196 - Constant expressions in general + +*/ + +#include <stdio.h> + +int fails = 0; + +#define TESTEXPR(expr) \ + if (!(expr)) { \ + printf("fail line %d\n", __LINE__); \ + fails++; \ + } + +#define TESTEXPRFALSE(expr) \ + if (expr) { \ + printf("fail line %d\n", __LINE__); \ + fails++; \ + } + +int a; +volatile int b; +const int c = 1; +#define d 1 +enum { e = 1 }; +int f() { return 1; } + +/* we cant really test these at runtime (because the result is constant, but not + * compile-time known), so compile only */ +void test0(void) +{ + TESTEXPR(a); /* Pure: Yes; Static: No; Immutable: No; Compile-Time-Known: No */ + TESTEXPR(b); /* Pure: No?; Static: No; Immutable: No; Compile-Time-Known: No */ + TESTEXPR(&a > &b); /* Pure: Yes; Static: Yes; Immutable: Yes; Compile-Time-Known: No */ +} + +void test1(void) +{ + TESTEXPR(1); /* Pure: Yes; Static: Yes; Immutable: Yes; Compile-Time-Known: Yes */ + TESTEXPR(c); /* Pure: Yes; Static: ???; Immutable: ???; Compile-Time-Known: ??? */ + TESTEXPR(d); /* Pure: Yes; Static: Yes; Immutable: Yes; Compile-Time-Known: Yes */ + TESTEXPR(e); /* Pure: Yes; Static: Yes; Immutable: Yes; Compile-Time-Known: Yes */ + TESTEXPR(c == c); /* Pure: Yes; Static: Yes; Immutable: Yes; Compile-Time-Known: Yes */ + TESTEXPRFALSE(c != c); + TESTEXPR(f() == f()); /* Pure: Yes; Static: Yes?; Immutable: Yes; Compile-Time-Known: Yes? */ + TESTEXPRFALSE(f() != f()); + TESTEXPR(&a == &a); /* Pure: Yes; Static: Yes; Immutable: Yes; Compile-Time-Known: Yes */ + TESTEXPRFALSE(&a != &a); + TESTEXPR(&a != 0); /* Pure: Yes; Static: Yes; Immutable: Yes; Compile-Time-Known: Yes* */ + TESTEXPRFALSE(&a == 0); +/* in a real program we cant rely on these, but in this test we can */ + TESTEXPR(&a); /* Pure: Yes; Static: Yes; Immutable: Yes; Compile-Time-Known: No */ + TESTEXPR((int)&a != 0); /* Pure: Yes; Static: Yes; Immutable: Yes; Compile-Time-Known: No */ + TESTEXPRFALSE((int)&a == 0); + TESTEXPR(&a != &b); /* Pure: Yes; Static: Yes; Immutable: Yes; Compile-Time-Known: ??** */ + TESTEXPRFALSE(&a == &b); +/* this may fail in a real world program, but here we can rely on it anyway */ + TESTEXPR(b == b); /* Pure: No?; Static: No; Immutable: No; Compile-Time-Known: No */ + TESTEXPRFALSE(b != b); +/* NOT detected by the compiler as constant */ + TESTEXPR(a == a); /* Pure: Yes; Static: Yes; Immutable: Yes; Compile-Time-Known: Yes */ + TESTEXPRFALSE(a != a); + TESTEXPR(f()); /* Pure: Yes; Static: Yes?; Immutable: Yes; Compile-Time-Known: Yes? */ +} + +/* Taken from #1196 reply */ +struct S { + int a; + int b; +} s[2]; + +void test2(void) +{ + TESTEXPR((void*)&s == (void*)&s[0]); + TESTEXPRFALSE((void*)&s != (void*)&s[0]); + TESTEXPR(&s[0] < &s[1]); + TESTEXPR(&s[0].b > &s[0].a); + TESTEXPR(&s[0].b < &s[1].a); +} + +/* FIXME: how to deal with the extern stuff in the testbench? */ +extern int g(); + +void test3(void) +{ +#if 0 + TESTEXPR(g()); /* Pure: No; Static: No; Immutable: No; Compile-Time-Known: No */ + TESTEXPR(g(), 1); /* Pure: No; Static: No; Immutable: Yes; Compile-Time-Known: Yes */ + TESTEXPR((void)g()); /* Pure: No; Static: No; Immutable: Yes; Compile-Time-Known: Yes */ + TESTEXPR(sizeof(g())); /* Pure: Yes; Static: Yes; Immutable: Yes; Compile-Time-Known: Yes */ + /* NOT detected by the compiler as constant */ + TESTEXPR(g() * 0); /* Pure: No; Static: No; Immutable: Yes; Compile-Time-Known: Yes */ +#endif +} + +int main(void) +{ + test1(); + test2(); + test3(); + return fails; +} From d3cd668585ab920fd9a6067a4cfce0e336eefbeb Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 22 Mar 2021 23:37:33 +0100 Subject: [PATCH 0765/2710] also test (some of) the cases with an external function --- test/val/constexpr.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/test/val/constexpr.c b/test/val/constexpr.c index c92302a58..4338717f4 100644 --- a/test/val/constexpr.c +++ b/test/val/constexpr.c @@ -88,19 +88,18 @@ void test2(void) TESTEXPR(&s[0].b < &s[1].a); } -/* FIXME: how to deal with the extern stuff in the testbench? */ -extern int g(); +/* we abuse the close function here, close(-1) will return -1 */ +extern int close(int fd); void test3(void) { -#if 0 - TESTEXPR(g()); /* Pure: No; Static: No; Immutable: No; Compile-Time-Known: No */ - TESTEXPR(g(), 1); /* Pure: No; Static: No; Immutable: Yes; Compile-Time-Known: Yes */ - TESTEXPR((void)g()); /* Pure: No; Static: No; Immutable: Yes; Compile-Time-Known: Yes */ - TESTEXPR(sizeof(g())); /* Pure: Yes; Static: Yes; Immutable: Yes; Compile-Time-Known: Yes */ + TESTEXPR(close(-1)); /* Pure: No; Static: No; Immutable: No; Compile-Time-Known: No */ + TESTEXPR((close(-1), 1)) /* Pure: No; Static: No; Immutable: Yes; Compile-Time-Known: Yes */ +/* Error: Scalar expression expected */ +// TESTEXPR((void)close(-1)); /* Pure: No; Static: No; Immutable: Yes; Compile-Time-Known: Yes */ + TESTEXPR(sizeof(close(-1))); /* Pure: Yes; Static: Yes; Immutable: Yes; Compile-Time-Known: Yes */ /* NOT detected by the compiler as constant */ - TESTEXPR(g() * 0); /* Pure: No; Static: No; Immutable: Yes; Compile-Time-Known: Yes */ -#endif + TESTEXPRFALSE(close(-1) * 0); /* Pure: No; Static: No; Immutable: Yes; Compile-Time-Known: Yes */ } int main(void) From 3755e4a863da973a7de60fa1abd6dde5d4379aef Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 24 Mar 2021 14:35:44 +0800 Subject: [PATCH 0766/2710] Replaced checking for __fastcall__ aginst AutoCDecl etc. with IsFastcallFunc(). --- src/cc65/codeinfo.c | 9 +++------ src/cc65/datatype.c | 21 ++++++++++++++++++--- src/cc65/datatype.h | 9 ++++++++- src/cc65/expr.c | 14 ++++---------- src/cc65/function.c | 5 +---- 5 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index 90d4f4d68..d81f46001 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -493,17 +493,14 @@ fncls_t GetFuncInfo (const char* Name, unsigned int* Use, unsigned int* Chg) ** registers. */ *Use = REG_EAXY; - } else if ((D->ParamCount > 0 || - (D->Flags & FD_EMPTY) != 0) && - (AutoCDecl ? - IsQualFastcall (E->Type) : - !IsQualCDecl (E->Type))) { + } else if ((D->ParamCount > 0 || (D->Flags & FD_EMPTY) != 0) && + IsFastcallFunc (E->Type)) { /* Will use registers depending on the last param. If the last ** param has incomplete type, or if the function has not been ** prototyped yet, just assume __EAX__. */ if (D->LastParam != 0) { - switch (SizeOf(D->LastParam->Type)) { + switch (SizeOf (D->LastParam->Type)) { case 1u: *Use = REG_A; break; diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 6e42057dc..d29a0d807 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1085,11 +1085,26 @@ int HasUnknownSize (const Type* T) int IsVariadicFunc (const Type* T) /* Return true if this is a function type or pointer to function type with -** variable parameter list +** variable parameter list. +** Check fails if the type is not a function or a pointer to function. */ { - FuncDesc* F = GetFuncDesc (T); - return (F->Flags & FD_VARIADIC) != 0; + return (GetFuncDesc (T)->Flags & FD_VARIADIC) != 0; +} + + + +int IsFastcallFunc (const Type* T) +/* Return true if this is a function type or pointer to function type by +** __fastcall__ calling convention. +** Check fails if the type is not a function or a pointer to function. +*/ +{ + if (UnqualifiedType (T->C) == T_PTR) { + /* Pointer to function */ + ++T; + } + return !IsVariadicFunc (T) && (AutoCDecl ? IsQualFastcall (T) : !IsQualCDecl (T)); } diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 5c3e71da5..ac6edeeb5 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -825,7 +825,14 @@ INLINE int IsQualCConv (const Type* T) int IsVariadicFunc (const Type* T) attribute ((const)); /* Return true if this is a function type or pointer to function type with -** variable parameter list +** variable parameter list. +** Check fails if the type is not a function or a pointer to function. +*/ + +int IsFastcallFunc (const Type* T) attribute ((const)); +/* Return true if this is a function type or pointer to function type by +** __fastcall__ calling convention. +** Check fails if the type is not a function or a pointer to function. */ FuncDesc* GetFuncDesc (const Type* T) attribute ((const)); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 048819d50..9b95efda6 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -863,7 +863,7 @@ static void FunctionCall (ExprDesc* Expr) unsigned ParamSize; /* Number of parameter bytes */ CodeMark Mark; int PtrOffs = 0; /* Offset of function pointer on stack */ - int IsFastcall = 0; /* True if it's a fast-call function */ + int IsFastcall = 0; /* True if we are fast-calling the function */ int PtrOnStack = 0; /* True if a pointer copy is on stack */ Type* ReturnType; @@ -882,11 +882,8 @@ static void FunctionCall (ExprDesc* Expr) ** parameter count is zero. Handle K & R functions as though there are ** parameters. */ - IsFastcall = (Func->Flags & FD_VARIADIC) == 0 && - (Func->ParamCount > 0 || (Func->Flags & FD_EMPTY)) && - (AutoCDecl ? - IsQualFastcall (Expr->Type + 1) : - !IsQualCDecl (Expr->Type + 1)); + IsFastcall = (Func->ParamCount > 0 || (Func->Flags & FD_EMPTY) != 0) && + IsFastcallFunc (Expr->Type + 1); /* Things may be difficult, depending on where the function pointer ** resides. If the function pointer is an expression of some sort @@ -931,10 +928,7 @@ static void FunctionCall (ExprDesc* Expr) } /* If we didn't inline the function, get fastcall info */ - IsFastcall = (Func->Flags & FD_VARIADIC) == 0 && - (AutoCDecl ? - IsQualFastcall (Expr->Type) : - !IsQualCDecl (Expr->Type)); + IsFastcall = IsFastcallFunc (Expr->Type); } /* Parse the parameter list */ diff --git a/src/cc65/function.c b/src/cc65/function.c index 9269d4c62..cad1df629 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -558,10 +558,7 @@ void NewFunc (SymEntry* Func, FuncDesc* D) PushLiteralPool (Func); /* If this is a fastcall function, push the last parameter onto the stack */ - if ((D->Flags & FD_VARIADIC) == 0 && D->ParamCount > 0 && - (AutoCDecl ? - IsQualFastcall (Func->Type) : - !IsQualCDecl (Func->Type))) { + if (D->ParamCount > 0 && IsFastcallFunc (Func->Type)) { unsigned Flags; /* Generate the push */ From 0f1386ff4c0d88a533050138de2f3a4f2796863f Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 25 Mar 2021 08:28:15 -0400 Subject: [PATCH 0767/2710] Added documentation about the slightly different behavior of cpeekcolor() on the cx16 platform. --- doc/cx16.sgml | 69 ++++++++++++++++++++++++++---------------------- doc/funcref.sgml | 2 ++ 2 files changed, 40 insertions(+), 31 deletions(-) diff --git a/doc/cx16.sgml b/doc/cx16.sgml index 490d07849..9e743064f 100644 --- a/doc/cx16.sgml +++ b/doc/cx16.sgml @@ -142,13 +142,20 @@ The functions listed below are special for the CX16. See the <url url="funcref.html" name="function reference"> for declarations and usage. <itemize> -<item>get_ostype -<item>set_tv -<item>videomode -<item>vpeek -<item>vpoke +<item>get_ostype() +<item>set_tv() +<item>videomode() +<item>vpeek() +<item>vpoke() </itemize> +<tt/cpeekcolor()/ works differently on the Commander X16 than it does on other +platforms. Each character has two colors: background and text (foreground). +<tt/cpeekcolor()/ returns both colors. The high nybble describes the +background color, the low nybble describes the text color. For example, if the +function is used on the default screen, then it returns $61, which means +white-on-blue. + <sect1>CBM-specific functions<p> @@ -157,32 +164,32 @@ machines. See the <url url="funcref.html" name="function reference"> for declarations and usage. <itemize> -<item>cbm_close -<item>cbm_closedir -<item>cbm_k_basin -<item>cbm_k_bsout -<item>cbm_k_chkin -<item>cbm_k_ckout -<item>cbm_k_close -<item>cbm_k_clrch -<item>cbm_k_getin -<item>cbm_k_load -<item>cbm_k_open -<item>cbm_k_readst -<item>cbm_k_save -<item>cbm_k_second -<item>cbm_k_setlfs -<item>cbm_k_setnam -<item>cbm_k_tksa -<item>cbm_load -<item>cbm_open -<item>cbm_opendir -<item>cbm_read -<item>cbm_readdir -<item>cbm_save -<item>cbm_write -<item>get_tv -<item>waitvsync +<item>cbm_close() +<item>cbm_closedir() +<item>cbm_k_basin() +<item>cbm_k_bsout() +<item>cbm_k_chkin() +<item>cbm_k_ckout() +<item>cbm_k_close() +<item>cbm_k_clrch() +<item>cbm_k_getin() +<item>cbm_k_load() +<item>cbm_k_open() +<item>cbm_k_readst() +<item>cbm_k_save() +<item>cbm_k_second() +<item>cbm_k_setlfs() +<item>cbm_k_setnam() +<item>cbm_k_tksa() +<item>cbm_load() +<item>cbm_open() +<item>cbm_opendir() +<item>cbm_read() +<item>cbm_readdir() +<item>cbm_save() +<item>cbm_write() +<item>get_tv() +<item>waitvsync() </itemize> diff --git a/doc/funcref.sgml b/doc/funcref.sgml index a954c6581..3b3db2e09 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -2813,6 +2813,8 @@ location of the cursor in the display screen RAM. That number can be passed to done to make it obvious that peeking doesn't move the cursor in any way. Your program must place the cursor where it wants to peek before it calls any of those functions. +<item>On the cx16 (Commander X16) target, this function returns two values: the +background color, in the high nybble, and the text color, in the low nybble. </itemize> <tag/Availability/cc65 <tag/See also/ From 710c6c6f2f08f7d938f552a0272d2424cf9fdc68 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Wed, 13 Jan 2021 03:20:19 -0500 Subject: [PATCH 0768/2710] Fixed cbm_k_readst() to work around a VIC-20 Kernal bug. It properly returns the RS-232 device's status. --- asminc/vic20.inc | 9 +++++---- libsrc/cbm/c_readst.s | 8 ++++---- libsrc/vic20/c_readst.s | 28 ++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 libsrc/vic20/c_readst.s diff --git a/asminc/vic20.inc b/asminc/vic20.inc index fa9fdfa8d..91da083f1 100644 --- a/asminc/vic20.inc +++ b/asminc/vic20.inc @@ -1,8 +1,7 @@ ; -; Vic20 generic definitions. Stolen mostly from c64.inc - Steve Schmidtke +; VIC-20 generic definitions. Stolen mostly from c64.inc -- Steve Schmidtke ; - ; --------------------------------------------------------------------------- ; Zero page, Commodore stuff @@ -12,8 +11,8 @@ TXTPTR := $7A ; Pointer into BASIC source code STATUS := $90 ; Kernal I/O completion status TIME := $A0 ; 60HZ clock FNAM_LEN := $B7 ; Length of filename -SECADR := $B9 ; Secondary address -DEVNUM := $BA ; Device number +SECADR := $B9 ; Second address +DEVNUM := $BA ; Device number (first address) FNAM := $BB ; Pointer to filename KEY_COUNT := $C6 ; Number of keys in input buffer RVS := $C7 ; Reverse flag @@ -36,6 +35,8 @@ KBDREPEAT := $28a KBDREPEATRATE := $28b KBDREPEATDELAY := $28c +RSSTAT := $297 ; RS-232 device driver status + ; --------------------------------------------------------------------------- ; Screen size diff --git a/libsrc/cbm/c_readst.s b/libsrc/cbm/c_readst.s index 85211dd2f..bcaacbbae 100644 --- a/libsrc/cbm/c_readst.s +++ b/libsrc/cbm/c_readst.s @@ -1,5 +1,6 @@ ; -; Ullrich von Bassewitz, 03.06.1999 +; 1999-06-03, Ullrich von Bassewitz +; 2021-01-12, Greg King ; ; unsigned char cbm_k_readst (void); ; @@ -10,6 +11,5 @@ _cbm_k_readst: - jsr READST - ldx #0 ; Clear high byte - rts + ldx #>$0000 + jmp READST diff --git a/libsrc/vic20/c_readst.s b/libsrc/vic20/c_readst.s new file mode 100644 index 000000000..2cb11bb21 --- /dev/null +++ b/libsrc/vic20/c_readst.s @@ -0,0 +1,28 @@ +; +; 1999-06-03, Ullrich von Bassewitz +; 2021-01-12, Greg King +; +; unsigned char cbm_k_readst (void); +; +; This version works around a bug in VIC-20 Kernal's READST function. +; + + .include "vic20.inc" + .include "../cbm/cbm.inc" + + .export _cbm_k_readst + + +_cbm_k_readst: + ldx #>$0000 + lda DEVNUM + cmp #CBMDEV_RS232 + beq @L1 + + jmp READST + +; Work-around: Read the RS-232 status variable directly. + +@L1: lda RSSTAT + stx RSSTAT ; reset the status bits + rts From f273b1ebcb578a936ba19924fdc233f51607f1d6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 26 Mar 2021 11:02:46 +0800 Subject: [PATCH 0769/2710] Fixed crash with non-inlined __fastcall__ function invocation with no arguments. --- src/cc65/expr.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 9b95efda6..0bb393cf1 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -835,7 +835,7 @@ static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) /* Append last deferred inc/dec before the function is called. ** The last parameter needs to be preserved if it is passed in AX/EAX Regs. */ - DoDeferred (IsFastcall ? SQP_KEEP_EAX : SQP_KEEP_NONE, &Expr); + DoDeferred (IsFastcall && PushedCount > 0 ? SQP_KEEP_EAX : SQP_KEEP_NONE, &Expr); /* Check if we had enough arguments */ if (PushedCount < Func->ParamCount) { @@ -928,7 +928,8 @@ static void FunctionCall (ExprDesc* Expr) } /* If we didn't inline the function, get fastcall info */ - IsFastcall = IsFastcallFunc (Expr->Type); + IsFastcall = (Func->ParamCount > 0 || (Func->Flags & FD_EMPTY) != 0) && + IsFastcallFunc (Expr->Type); } /* Parse the parameter list */ From 02392d62207ee63dc332daf4dafc6e9eff0b163f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 26 Mar 2021 22:18:05 +0100 Subject: [PATCH 0770/2710] added test related to issue #1437 --- test/misc/Makefile | 5 +++++ test/misc/bug1437.c | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 test/misc/bug1437.c diff --git a/test/misc/Makefile b/test/misc/Makefile index 7a1b82d5f..397635afd 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -64,6 +64,11 @@ $(WORKDIR)/bug760.$1.$2.prg: bug760.c | $(WORKDIR) $(if $(QUIET),echo misc/bug760.$1.$2.prg) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) +$(WORKDIR)/bug1437.$1.$2.prg: bug1437.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." + $(if $(QUIET),echo misc/bug1437.$1.$2.prg) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # should compile, but gives an error $(WORKDIR)/bug1209-ind-goto-rev.$1.$2.prg: bug1209-ind-goto-rev.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." diff --git a/test/misc/bug1437.c b/test/misc/bug1437.c new file mode 100644 index 000000000..de6c7008d --- /dev/null +++ b/test/misc/bug1437.c @@ -0,0 +1,23 @@ + +/* bug #1437 enum declaration in struct does not compile */ + +struct nodelist1 { + enum { DEAD1, LIVE1, ONCE1, TWICE1 } live1; +} firstnode1 = {ONCE1}; + +enum nodestate2 { DEAD2, LIVE2, ONCE2, TWICE2 } live2; + +struct nodelist2 { + enum nodestate2 live2; +} firstnode2 = {TWICE2}; + +int main (void) +{ + if (firstnode1.live1 != ONCE1) { + return 1; + } + if (firstnode2.live2 != TWICE2) { + return 1; + } + return 0; +} From 54920193e5e00574179a27abf9b4fc39f71b7a89 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 27 Mar 2021 15:11:47 +0100 Subject: [PATCH 0771/2710] added test for issue #1438 --- test/val/bug1438.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 test/val/bug1438.c diff --git a/test/val/bug1438.c b/test/val/bug1438.c new file mode 100644 index 000000000..93addb877 --- /dev/null +++ b/test/val/bug1438.c @@ -0,0 +1,35 @@ + +/* Issue #1438 fix #1439 - crash in cc65, related to delayed post-counting + + this is an odd issue, the compile would crash *sometimes*, perhaps in one + of ten compilation runs. +*/ + +#define __fastcall__ + +unsigned short a[10] = {0,1,2,3,4,5,6,7,8,9}; + +unsigned short __fastcall__ func2(void) +{ + return 42; +} + +void func1(unsigned short *wp) +{ + *wp++ = func2(); +} + +int main(void) +{ + func1(&a[3]); + if (a[2] != 2) { + return 1; + } + if (a[3] != 42) { + return 1; + } + if (a[4] != 4) { + return 1; + } + return 0; +} From bf1bb7a0325d91712a724cb369cf34505bed7a8a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 27 Mar 2021 15:13:32 +0100 Subject: [PATCH 0772/2710] ooopsie :) --- test/val/bug1438.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/val/bug1438.c b/test/val/bug1438.c index 93addb877..3894f87f1 100644 --- a/test/val/bug1438.c +++ b/test/val/bug1438.c @@ -5,7 +5,7 @@ of ten compilation runs. */ -#define __fastcall__ +/* #define __fastcall__ */ unsigned short a[10] = {0,1,2,3,4,5,6,7,8,9}; From edecbc86b84dcf75edf21725d9cc3ff791ce1262 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 27 Mar 2021 13:34:39 -0400 Subject: [PATCH 0773/2710] Reverted "Second address" back to "Secondary address". --- asminc/vic20.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/asminc/vic20.inc b/asminc/vic20.inc index 91da083f1..41a935238 100644 --- a/asminc/vic20.inc +++ b/asminc/vic20.inc @@ -11,8 +11,8 @@ TXTPTR := $7A ; Pointer into BASIC source code STATUS := $90 ; Kernal I/O completion status TIME := $A0 ; 60HZ clock FNAM_LEN := $B7 ; Length of filename -SECADR := $B9 ; Second address -DEVNUM := $BA ; Device number (first address) +SECADR := $B9 ; Secondary address +DEVNUM := $BA ; Device number FNAM := $BB ; Pointer to filename KEY_COUNT := $C6 ; Number of keys in input buffer RVS := $C7 ; Reverse flag From cb8fbf4772a0f2bbb1c04393662a5cacaaeea4f4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 29 Mar 2021 12:35:29 +0800 Subject: [PATCH 0774/2710] Removed the non-existing-in-C "struct/union scope" for structs/unions. Fixed handling of struct/union field declarations without identifiers, which do nothing. --- src/cc65/declare.c | 8 ++++---- src/cc65/symtab.c | 27 +++++++++++++++++++-------- src/cc65/symtab.h | 5 ++++- test/misc/bug1437.c | 23 ----------------------- test/val/bug1437.c | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 62 insertions(+), 36 deletions(-) delete mode 100644 test/misc/bug1437.c create mode 100644 test/val/bug1437.c diff --git a/src/cc65/declare.c b/src/cc65/declare.c index d952d1049..787ed62b7 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -965,7 +965,7 @@ static SymEntry* ParseUnionDecl (const char* Name, unsigned* DSFlags) */ AddBitField (Decl.Ident, Decl.Type, 0, 0, FieldWidth, SignednessSpecified); - } else { + } else if (Decl.Ident[0] != '\0') { Entry = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0); if (IsAnonName (Decl.Ident)) { Entry->V.A.ANumber = UnionTagEntry->V.S.ACount++; @@ -994,7 +994,7 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { NextToken (); /* Remember the symbol table and leave the struct level */ - FieldTab = GetSymTab (); + FieldTab = GetFieldSymTab (); LeaveStructLevel (); /* Return a fictitious symbol if errors occurred during parsing */ @@ -1167,7 +1167,7 @@ static SymEntry* ParseStructDecl (const char* Name, unsigned* DSFlags) /* Add any full bytes to the struct size. */ StructSize += BitOffs / CHAR_BITS; BitOffs %= CHAR_BITS; - } else { + } else if (Decl.Ident[0] != '\0') { Entry = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize); if (IsAnonName (Decl.Ident)) { Entry->V.A.ANumber = StructTagEntry->V.S.ACount++; @@ -1208,7 +1208,7 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { NextToken (); /* Remember the symbol table and leave the struct level */ - FieldTab = GetSymTab (); + FieldTab = GetFieldSymTab (); LeaveStructLevel (); /* Return a fictitious symbol if errors occurred during parsing */ diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index db2b04f17..3d7176a83 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -92,6 +92,7 @@ static SymTable* SymTab0 = 0; static SymTable* SymTab = 0; static SymTable* TagTab0 = 0; static SymTable* TagTab = 0; +static SymTable* FieldTab = 0; static SymTable* LabelTab = 0; static SymTable* SPAdjustTab = 0; static SymTable* FailSafeTab = 0; /* For errors */ @@ -390,9 +391,9 @@ void EnterStructLevel (void) ** nested in struct scope are NOT local to the struct but visible in the ** outside scope. So we will NOT create a new struct or enum table. */ - S = NewSymTable (SYMTAB_SIZE_BLOCK); - S->PrevTab = SymTab; - SymTab = S; + S = NewSymTable (SYMTAB_SIZE_STRUCT); + S->PrevTab = FieldTab; + FieldTab = S; } @@ -401,7 +402,7 @@ void LeaveStructLevel (void) /* Leave a nested block for a struct definition */ { /* Don't delete the table */ - SymTab = SymTab->PrevTab; + FieldTab = FieldTab->PrevTab; } @@ -850,7 +851,7 @@ SymEntry* AddBitField (const char* Name, const Type* T, unsigned Offs, /* Add a bit field to the local symbol table and return the symbol entry */ { /* Do we have an entry with this name already? */ - SymEntry* Entry = FindSymInTable (SymTab, Name, HashStr (Name)); + SymEntry* Entry = FindSymInTable (FieldTab, Name, HashStr (Name)); if (Entry) { /* We have a symbol with this name already */ @@ -882,7 +883,7 @@ SymEntry* AddBitField (const char* Name, const Type* T, unsigned Offs, } /* Add the entry to the symbol table */ - AddSymEntry (SymTab, Entry); + AddSymEntry (FieldTab, Entry); } @@ -1070,9 +1071,9 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags) SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs) -/* Add a local symbol and return the symbol entry */ +/* Add a local or struct/union field symbol and return the symbol entry */ { - SymTable* Tab = SymTab; + SymTable* Tab = (Flags & SC_STRUCTFIELD) == 0 ? SymTab : FieldTab; ident Ident; /* Do we have an entry with this name already? */ @@ -1267,6 +1268,16 @@ SymTable* GetGlobalSymTab (void) return SymTab0; } + + +SymTable* GetFieldSymTab (void) +/* Return the current field symbol table */ +{ + return FieldTab; +} + + + SymTable* GetLabelSymTab (void) /* Return the global symbol table */ { diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h index 1231eb528..469a4ba77 100644 --- a/src/cc65/symtab.h +++ b/src/cc65/symtab.h @@ -166,7 +166,7 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags); /* Add a goto label to the symbol table */ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs); -/* Add a local symbol and return the symbol entry */ +/* Add a local or struct/union field symbol and return the symbol entry */ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags); /* Add an external or global symbol to the symbol table and return the entry */ @@ -185,6 +185,9 @@ SymTable* GetSymTab (void); SymTable* GetGlobalSymTab (void); /* Return the global symbol table */ +SymTable* GetFieldSymTab (void); +/* Return the current field symbol table */ + SymTable* GetLabelSymTab (void); /* Return the label symbol table */ diff --git a/test/misc/bug1437.c b/test/misc/bug1437.c deleted file mode 100644 index de6c7008d..000000000 --- a/test/misc/bug1437.c +++ /dev/null @@ -1,23 +0,0 @@ - -/* bug #1437 enum declaration in struct does not compile */ - -struct nodelist1 { - enum { DEAD1, LIVE1, ONCE1, TWICE1 } live1; -} firstnode1 = {ONCE1}; - -enum nodestate2 { DEAD2, LIVE2, ONCE2, TWICE2 } live2; - -struct nodelist2 { - enum nodestate2 live2; -} firstnode2 = {TWICE2}; - -int main (void) -{ - if (firstnode1.live1 != ONCE1) { - return 1; - } - if (firstnode2.live2 != TWICE2) { - return 1; - } - return 0; -} diff --git a/test/val/bug1437.c b/test/val/bug1437.c new file mode 100644 index 000000000..3424079e1 --- /dev/null +++ b/test/val/bug1437.c @@ -0,0 +1,35 @@ + +/* bug #1437 enum declaration in a struct/union is invisible in the scope where the struct/union is declared */ + +struct nodelist1 { + struct { + enum { DEAD1, LIVE1, ONCE1, TWICE1 } live1; + } s; +} firstnode1 = {ONCE1}; + +enum nodestate2 { DEAD2, LIVE2, ONCE2, TWICE2 } live2; + +union nodelist2 { + enum nodestate2 live2; +} firstnode2 = { {TWICE2} }; + +struct T { + int I; + int; + enum E { + I + }; +}; + +int failures = 0; + +int main (void) +{ + if (firstnode1.s.live1 != ONCE1) { + ++failures; + } + if (firstnode2.live2 != TWICE2) { + ++failures; + } + return failures; +} From f9812930c1420646b33b785379333f2529dd0969 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 30 Mar 2021 16:47:57 +0800 Subject: [PATCH 0775/2710] More detailed diagnostic info about conflicted function types. --- src/cc65/symtab.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index b4c97e962..aa4a9a44a 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -728,6 +728,7 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags /* New type must be compatible with the composite prototype */ if (IsDistinctRedef (E_Type, T, TC_EQUAL, TCF_MASK_QUAL)) { Error ("Conflicting function types for '%s'", Entry->Name); + TypeCompatibilityDiagnostic (T, E_Type, 0, "'%s' vs '%s'"); Entry = 0; } else { /* Refine the existing composite prototype with this new From 31c1172a3aad97f9adbf127caca7dc74db01ffc0 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 23 Mar 2021 15:30:08 +0800 Subject: [PATCH 0776/2710] zlib: Use correct (un)signedness of char in prototypes and functions. Also ensure we are using the same constness qualifiers. --- include/zlib.h | 6 ++++-- libsrc/zlib/adler32.s | 3 ++- libsrc/zlib/crc32.s | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/include/zlib.h b/include/zlib.h index 3f6c2b27b..68439b290 100644 --- a/include/zlib.h +++ b/include/zlib.h @@ -114,7 +114,8 @@ int __fastcall__ uncompress (unsigned char* dest, unsigned* destLen, */ -unsigned long __fastcall__ adler32 (unsigned long adler, const char* buf, +unsigned long __fastcall__ adler32 (unsigned long adler, + const unsigned char* buf, unsigned len); /* @@ -140,7 +141,8 @@ unsigned long __fastcall__ adler32 (unsigned long adler, const char* buf, */ -unsigned long __fastcall__ crc32 (unsigned long crc, const char* buf, +unsigned long __fastcall__ crc32 (unsigned long crc, + const unsigned char* buf, unsigned len); /* Original zlib description: diff --git a/libsrc/zlib/adler32.s b/libsrc/zlib/adler32.s index 8aa641a13..1bb5588db 100644 --- a/libsrc/zlib/adler32.s +++ b/libsrc/zlib/adler32.s @@ -2,7 +2,8 @@ ; 2001-11-18, Piotr Fusik ; 2018-05-20, Christian Kruger ; -; unsigned long __fastcall__ adler32 (unsigned long adler, unsigned char* buf, +; unsigned long __fastcall__ adler32 (unsigned long adler, +; const unsigned char* buf, ; unsigned len); ; diff --git a/libsrc/zlib/crc32.s b/libsrc/zlib/crc32.s index f019736ad..41b5fe9db 100644 --- a/libsrc/zlib/crc32.s +++ b/libsrc/zlib/crc32.s @@ -2,7 +2,8 @@ ; 2001-11-14, Piotr Fusik ; 2018-05-20, Christian Kruger ; -; unsigned long __fastcall__ crc32 (unsigned long crc, unsigned char* buf, +; unsigned long __fastcall__ crc32 (unsigned long crc, +; const unsigned char* buf, ; unsigned len); ; From b802efde5446433af827dd46241dc7cf18b6a83b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 15 Mar 2021 16:59:08 +0800 Subject: [PATCH 0777/2710] Fixed ternary result type detection with pointer types. Fixed pointer type comparison and conversion, especially regarding qualifiers. Improved diagnostics about type comparison and conversion. Reorganized some type-comparison/conversion functions. --- src/cc65/assignment.c | 2 +- src/cc65/datatype.h | 1 + src/cc65/declare.c | 2 +- src/cc65/expr.c | 78 +++++--- src/cc65/symtab.c | 22 ++- src/cc65/typecmp.c | 403 +++++++++++++++++++----------------------- src/cc65/typecmp.h | 48 +++-- src/cc65/typeconv.c | 235 +++++++++++++++++------- src/cc65/typeconv.h | 11 +- 9 files changed, 466 insertions(+), 336 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 737d059a0..c642b4ce9 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -78,7 +78,7 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) hie1 (RExpr); /* Check for equality of the structs/unions */ - if (TypeCmp (ltype, RExpr->Type) < TC_STRICT_COMPATIBLE) { + if (TypeCmp (ltype, RExpr->Type).C < TC_STRICT_COMPATIBLE) { TypeCompatibilityDiagnostic (ltype, RExpr->Type, 1, "Incompatible types in assignment to '%s' from '%s'"); } diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index ac6edeeb5..e6ff9b7ce 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -108,6 +108,7 @@ enum { T_QUAL_CONST = 0x001000, T_QUAL_VOLATILE = 0x002000, T_QUAL_RESTRICT = 0x004000, + T_QUAL_CVR = T_QUAL_CONST | T_QUAL_VOLATILE | T_QUAL_RESTRICT, T_QUAL_NEAR = 0x008000, T_QUAL_FAR = 0x010000, T_QUAL_ADDRSIZE = T_QUAL_NEAR | T_QUAL_FAR, diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 787ed62b7..0c00f56d4 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1821,7 +1821,7 @@ static void Declarator (const DeclSpec* Spec, Declaration* D, declmode_t Mode) NextToken (); /* Allow const, restrict, and volatile qualifiers */ - Qualifiers |= OptionalQualifiers (T_QUAL_CONST | T_QUAL_VOLATILE | T_QUAL_RESTRICT); + Qualifiers |= OptionalQualifiers (T_QUAL_CVR); /* Parse the type that the pointer points to */ Declarator (Spec, D, Mode); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 0bb393cf1..be53b22f9 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2447,15 +2447,11 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ } } else if (IsClassPtr (Expr->Type)) { if (IsClassPtr (Expr2.Type)) { - /* Both pointers are allowed in comparison if they point to - ** the same type, or if one of them is a void pointer. - */ - Type* left = Indirect (Expr->Type); - Type* right = Indirect (Expr2.Type); - if (TypeCmp (left, right) < TC_QUAL_DIFF && left->C != T_VOID && right->C != T_VOID) { - /* Incompatible pointers */ + /* Pointers are allowed in comparison */ + if (TypeCmp (Expr->Type, Expr2.Type).C < TC_STRICT_COMPATIBLE) { + /* Warn about distinct pointer types */ TypeCompatibilityDiagnostic (PtrConversion (Expr->Type), PtrConversion (Expr2.Type), 0, - "Incompatible pointer types comparing '%s' with '%s'"); + "Distinct pointer types comparing '%s' with '%s'"); } } else if (!ED_IsNullPtr (&Expr2)) { if (IsClassInt (Expr2.Type)) { @@ -3268,17 +3264,25 @@ static void parsesub (ExprDesc* Expr) if (IsClassPtr (lhst) && IsClassPtr (rhst)) { /* Pointer diff */ - if (TypeCmp (Indirect (lhst), Indirect (rhst)) < TC_QUAL_DIFF) { - Error ("Incompatible pointer types"); + if (TypeCmp (lhst, rhst).C >= TC_STRICT_COMPATIBLE) { + /* We'll have to scale the result */ + rscale = PSizeOf (lhst); + /* We cannot scale by 0-size or unknown-size */ + if (rscale == 0) { + TypeCompatibilityDiagnostic (lhst, rhst, + 1, "Invalid pointer types in subtraction: '%s' and '%s'"); + /* Avoid further errors */ + rscale = 1; + } + } else { + TypeCompatibilityDiagnostic (lhst, rhst, + 1, "Incompatible pointer types in subtraction: '%s' and '%s'"); } /* Operate on pointers, result type is an integer */ flags = CF_PTR; Expr->Type = type_int; - /* We'll have to scale the result */ - rscale = CheckedPSizeOf (lhst); - /* Check for a constant rhs expression */ if (ED_IsQuasiConst (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) { /* The right hand side is constant. Check left hand side. */ @@ -4069,13 +4073,17 @@ static void hieQuest (ExprDesc* Expr) ** Conversion rules for ?: expression are: ** - if both expressions are int expressions, default promotion ** rules for ints apply. - ** - if both expressions are pointers of the same type, the - ** result of the expression is of this type. + ** - if both expressions have the same structure, union or void type, + ** the result has the same type. + ** - if both expressions are pointers to compatible types (possibly + ** qualified differently), the result of the expression is an + ** appropriately qualified version of the composite type. + ** - if one of the expressions is a pointer and the other is a + ** pointer to (possibly qualified) void, the resulting type is a + ** pointer to appropriately qualified void. ** - if one of the expressions is a pointer and the other is - ** a zero constant, the resulting type is that of the pointer - ** type. - ** - if both expressions are void expressions, the result is of - ** type void. + ** a null pointer constant, the resulting type is that of the + ** pointer type. ** - all other cases are flagged by an error. */ if (IsClassInt (Expr2.Type) && IsClassInt (Expr3.Type)) { @@ -4105,12 +4113,28 @@ static void hieQuest (ExprDesc* Expr) } } else if (IsClassPtr (Expr2.Type) && IsClassPtr (Expr3.Type)) { - /* Must point to same type */ - if (TypeCmp (Indirect (Expr2.Type), Indirect (Expr3.Type)) < TC_EQUAL) { - Error ("Incompatible pointer types"); + /* If one of the two is 'void *', the result type is a pointer to + ** appropriately qualified void. + */ + if (IsTypeVoid (Indirect (Expr2.Type))) { + ResultType = PointerTo (Indirect (Expr2.Type)); + ResultType[1].C |= GetQualifier (Indirect (Expr3.Type)); + } else if (IsTypeVoid (Indirect (Expr3.Type))) { + ResultType = PointerTo (Indirect (Expr3.Type)); + ResultType[1].C |= GetQualifier (Indirect (Expr2.Type)); + } else { + /* Must point to compatible types */ + if (TypeCmp (Expr2.Type, Expr3.Type).C < TC_VOID_PTR) { + TypeCompatibilityDiagnostic (Expr2.Type, Expr3.Type, + 1, "Incompatible pointer types in ternary: '%s' and '%s'"); + /* Avoid further errors */ + ResultType = PointerTo (type_void); + } else { + /* Result has the composite type */ + ResultType = TypeDup (Expr2.Type); + TypeComposition (ResultType, Expr3.Type); + } } - /* Result has the common type */ - ResultType = Expr2.Type; } else if (IsClassPtr (Expr2.Type) && Expr3IsNULL) { /* Result type is pointer, no cast needed */ ResultType = Expr2.Type; @@ -4119,10 +4143,10 @@ static void hieQuest (ExprDesc* Expr) ResultType = Expr3.Type; } else if (IsTypeVoid (Expr2.Type) && IsTypeVoid (Expr3.Type)) { /* Result type is void */ - ResultType = Expr3.Type; + ResultType = type_void; } else { if (IsClassStruct (Expr2.Type) && IsClassStruct (Expr3.Type) && - TypeCmp (Expr2.Type, Expr3.Type) == TC_IDENTICAL) { + TypeCmp (Expr2.Type, Expr3.Type).C == TC_IDENTICAL) { /* Result type is struct/union */ ResultType = Expr2.Type; } else { @@ -4148,7 +4172,7 @@ static void hieQuest (ExprDesc* Expr) } /* Setup the target expression */ - Expr->Type = ResultType; + Expr->Type = ResultType; } } diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 3d7176a83..6ec255497 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -59,6 +59,7 @@ #include "stackptr.h" #include "symentry.h" #include "typecmp.h" +#include "typeconv.h" #include "symtab.h" @@ -549,6 +550,19 @@ SymEntry FindStructField (const Type* T, const char* Name) +static int IsDistinctRedef (const Type* lhst, const Type* rhst, typecmpcode_t Code, typecmpflag_t Flags) +/* Return if type compatibility result is "worse" than Code or if any bit of +** qualifier Flags is set. +*/ +{ + typecmp_t Result = TypeCmp (lhst, rhst); + if (Result.C < Code || (Result.F & TCF_MASK_QUAL & Flags) != 0) { + return 1; + } + return 0; +} + + static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags) /* Check and handle redefinition of existing symbols. ** Complete array sizes and function descriptors as well. @@ -565,7 +579,7 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags /* Existing typedefs cannot be redeclared as anything different */ if (SCType == SC_TYPEDEF) { - if (TypeCmp (E_Type, T) < TC_IDENTICAL) { + if (IsDistinctRedef (E_Type, T, TC_IDENTICAL, TCF_MASK_QUAL)) { Error ("Conflicting types for typedef '%s'", Entry->Name); Entry = 0; } @@ -591,7 +605,7 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags Entry = 0; } else { /* New type must be compatible with the composite prototype */ - if (TypeCmp (Entry->Type, T) < TC_EQUAL) { + if (IsDistinctRedef (E_Type, T, TC_EQUAL, TCF_MASK_QUAL)) { Error ("Conflicting function types for '%s'", Entry->Name); Entry = 0; } else { @@ -621,7 +635,7 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags ** is incomplete, complete it. */ if ((Size != UNSPECIFIED && ESize != UNSPECIFIED && Size != ESize) || - TypeCmp (T + 1, E_Type + 1) < TC_EQUAL) { + IsDistinctRedef (E_Type + 1, T + 1, TC_IDENTICAL, TCF_MASK_QUAL)) { /* Conflicting element types */ Error ("Conflicting array types for '%s[]'", Entry->Name); Entry = 0; @@ -639,7 +653,7 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags if (SCType != E_SCType) { Error ("Redefinition of '%s' as different kind of symbol", Entry->Name); Entry = 0; - } else if (TypeCmp (E_Type, T) < TC_EQUAL) { + } else if (IsDistinctRedef (E_Type, T, TC_EQUAL, TCF_MASK_QUAL)) { Error ("Conflicting types for '%s'", Entry->Name); Entry = 0; } else if (E_SCType == SC_ENUMERATOR) { diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index f204b9a0b..7aae7fefe 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -36,7 +36,7 @@ #include <string.h> /* cc65 */ -#include "funcdesc.h" +#include "error.h" #include "global.h" #include "symtab.h" #include "typecmp.h" @@ -49,17 +49,6 @@ -static void SetResult (typecmp_t* Result, typecmp_t Val) -/* Set a new result value if it is less than the existing one */ -{ - if (Val < *Result) { - /* printf ("SetResult = %d\n", Val); */ - *Result = Val; - } -} - - - static int ParamsHaveDefaultPromotions (const FuncDesc* F) /* Check if any of the parameters of function F has a default promotion. In ** this case, the function is not compatible with an empty parameter name list @@ -129,7 +118,7 @@ static int EqualFuncParams (const FuncDesc* F1, const FuncDesc* F2) } /* Compare this field */ - if (TypeCmp (Type1, Type2) < TC_EQUAL) { + if (TypeCmp (Type1, Type2).C < TC_EQUAL) { /* Field types not equal */ return 0; } @@ -148,48 +137,169 @@ static int EqualFuncParams (const FuncDesc* F1, const FuncDesc* F2) +static void SetResult (typecmp_t* Result, typecmpcode_t Val) +/* Set a new result value if it is less than the existing one */ +{ + if (Val < Result->C) { + if (Result->Indirections > 0) { + if (Val >= TC_STRICT_COMPATIBLE) { + Result->C = Val; + } else if (Result->Indirections == 1) { + /* C Standard allows implicit conversion as long as one side is + ** a pointer to void type, but doesn't care which side is. + */ + if ((Result->F & TCF_MASK_VOID_PTR) != 0) { + Result->C = TC_VOID_PTR; + } else { + Result->C = TC_PTR_INCOMPATIBLE; + } + } else { + Result->C = TC_PTR_INCOMPATIBLE; + } + } else { + Result->C = Val; + } + /* printf ("SetResult = %d\n", Val); */ + } +} + + + +static typecmp_t* CmpQuals (const Type* lhst, const Type* rhst, typecmp_t* Result) +/* Copare the types regarding thier qualifiers. Return the Result */ +{ + TypeCode LeftQual, RightQual; + + /* Get the left and right qualifiers */ + LeftQual = GetQualifier (lhst); + RightQual = GetQualifier (rhst); + + /* If type is function without a calling convention set explicitly, + ** then assume the default one. + */ + if (IsTypeFunc (lhst)) { + if ((LeftQual & T_QUAL_CCONV) == T_QUAL_NONE) { + LeftQual |= (AutoCDecl || IsVariadicFunc (lhst)) ? T_QUAL_CDECL : T_QUAL_FASTCALL; + } + } + if (IsTypeFunc (rhst)) { + if ((RightQual & T_QUAL_CCONV) == T_QUAL_NONE) { + RightQual |= (AutoCDecl || IsVariadicFunc (rhst)) ? T_QUAL_CDECL : T_QUAL_FASTCALL; + } + } + + /* Default address size qualifiers */ + if ((LeftQual & T_QUAL_ADDRSIZE) == T_QUAL_NONE) { + LeftQual |= (IsTypeFunc (lhst) ? CodeAddrSizeQualifier () : DataAddrSizeQualifier ()); + } + if ((RightQual & T_QUAL_ADDRSIZE) == T_QUAL_NONE) { + RightQual |= (IsTypeFunc (rhst) ? CodeAddrSizeQualifier () : DataAddrSizeQualifier ()); + } + + /* Just return if nothing to do */ + if (LeftQual == RightQual) { + return Result; + } + + /* On the first indirection level, different qualifiers mean that the types + ** are still compatible. On the second level, that is a (maybe minor) error. + ** We create a special return-code if a qualifier is dropped from a pointer. + ** But, different calling conventions are incompatible. Starting from the + ** next level, the types are incompatible if the qualifiers differ. + */ + /* (Debugging statement) */ + /* printf ("Ind = %d %06X != %06X\n", Result->Indirections, LeftQual, RightQual); */ + switch (Result->Indirections) { + case 0: + /* Compare C qualifiers */ + if ((LeftQual & T_QUAL_CVR) > (RightQual & T_QUAL_CVR)) { + Result->F |= TCF_QUAL_IMPLICIT; + } else if ((LeftQual & T_QUAL_CVR) != (RightQual & T_QUAL_CVR)) { + Result->F |= TCF_QUAL_DIFF; + } + + /* Compare address size qualifiers */ + if ((LeftQual & T_QUAL_ADDRSIZE) != (RightQual & T_QUAL_ADDRSIZE)) { + Result->F |= TCF_ADDRSIZE_QUAL_DIFF; + } + + /* Compare function calling conventions */ + if ((LeftQual & T_QUAL_CCONV) != (RightQual & T_QUAL_CCONV)) { + SetResult (Result, TC_INCOMPATIBLE); + } + break; + + case 1: + /* A non-const value on the right is compatible to a + ** const one to the left, same for volatile. + */ + if ((LeftQual & T_QUAL_CVR) > (RightQual & T_QUAL_CVR)) { + Result->F |= TCF_PTR_QUAL_IMPLICIT; + } else if ((LeftQual & T_QUAL_CVR) != (RightQual & T_QUAL_CVR)) { + Result->F |= TCF_PTR_QUAL_DIFF; + } + + /* Compare address size qualifiers */ + if ((LeftQual & T_QUAL_ADDRSIZE) != (RightQual & T_QUAL_ADDRSIZE)) { + Result->F |= TCF_ADDRSIZE_QUAL_DIFF; + } + + /* Compare function calling conventions */ + if ((!IsTypeFunc (lhst) && !IsTypeFunc (rhst)) || + (LeftQual & T_QUAL_CCONV) == (RightQual & T_QUAL_CCONV)) { + break; + } + /* else fall through */ + + default: + /* Pointer types mismatch */ + SetResult (Result, TC_INCOMPATIBLE); + break; + } + + return Result; +} + + + static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) /* Recursively compare two types. */ { - unsigned Indirections; - unsigned ElementCount; SymEntry* Sym1; SymEntry* Sym2; FuncDesc* F1; FuncDesc* F2; + TypeCode LeftType, RightType; + long LeftCount, RightCount; - /* Initialize stuff */ - Indirections = 0; - ElementCount = 0; - /* Compare two types. Determine, where they differ */ while (lhs->C != T_END) { - TypeCode LeftType, RightType; - TypeCode LeftSign, RightSign; - TypeCode LeftQual, RightQual; - long LeftCount, RightCount; - /* Check if the end of the type string is reached */ if (rhs->C == T_END) { /* End of comparison reached */ + break; + } + + /* Compare qualifiers */ + if (CmpQuals (lhs, rhs, Result)->C == TC_INCOMPATIBLE) { return; } - /* Get the left and right types, signs and qualifiers */ + /* Get the left and right types */ LeftType = (GetUnderlyingTypeCode (lhs) & T_MASK_TYPE); RightType = (GetUnderlyingTypeCode (rhs) & T_MASK_TYPE); - LeftSign = GetSignedness (lhs); - RightSign = GetSignedness (rhs); - LeftQual = GetQualifier (lhs); - RightQual = GetQualifier (rhs); - /* If the left type is a pointer and the right is an array, both - ** are compatible. + /* If one side is a pointer and the other side is an array, both are + ** compatible. */ if (LeftType == T_TYPE_PTR && RightType == T_TYPE_ARRAY) { RightType = T_TYPE_PTR; + SetResult (Result, TC_PTR_DECAY); + } + if (LeftType == T_TYPE_ARRAY && RightType == T_TYPE_PTR) { + LeftType = T_TYPE_PTR; SetResult (Result, TC_STRICT_COMPATIBLE); } @@ -236,74 +346,30 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) /* 'char' is neither 'signed char' nor 'unsigned char' */ if ((IsISOChar (lhs) && !IsISOChar (rhs)) || (!IsISOChar (lhs) && IsISOChar (rhs))) { - SetResult (Result, TC_COMPATIBLE); + SetResult (Result, TC_SIGN_DIFF); } - /* On indirection level zero, a qualifier or sign difference is - ** accepted. The types are no longer equal, but compatible. + /* On indirection level zero, a sign difference is accepted. + ** The types are no longer equal, but compatible. */ - if (LeftSign != RightSign) { - if (ElementCount == 0) { - SetResult (Result, TC_SIGN_DIFF); - } else { - SetResult (Result, TC_INCOMPATIBLE); - return; - } - } - - if (LeftType == T_TYPE_FUNC) { - /* If a calling convention wasn't set explicitly, - ** then assume the default one. - */ - if ((LeftQual & T_QUAL_CCONV) == T_QUAL_NONE) { - LeftQual |= (AutoCDecl || IsVariadicFunc (lhs)) ? T_QUAL_CDECL : T_QUAL_FASTCALL; - } - if ((RightQual & T_QUAL_CCONV) == T_QUAL_NONE) { - RightQual |= (AutoCDecl || IsVariadicFunc (rhs)) ? T_QUAL_CDECL : T_QUAL_FASTCALL; - } - } - - if (LeftQual != RightQual) { - /* On the first indirection level, different qualifiers mean - ** that the types still are compatible. On the second level, - ** that is a (maybe minor) error. We create a special return-code - ** if a qualifier is dropped from a pointer. But, different calling - ** conventions are incompatible. Starting from the next level, - ** the types are incompatible if the qualifiers differ. - */ - /* (Debugging statement) */ - /* printf ("Ind = %d %06X != %06X\n", Indirections, LeftQual, RightQual); */ - switch (Indirections) { - case 0: - SetResult (Result, TC_STRICT_COMPATIBLE); - break; - - case 1: - /* A non-const value on the right is compatible to a - ** const one to the left, same for volatile. - */ - if ((LeftQual & T_QUAL_CONST) < (RightQual & T_QUAL_CONST) || - (LeftQual & T_QUAL_VOLATILE) < (RightQual & T_QUAL_VOLATILE)) { - SetResult (Result, TC_QUAL_DIFF); - } else { - SetResult (Result, TC_STRICT_COMPATIBLE); - } - - if (LeftType != T_TYPE_FUNC || (LeftQual & T_QUAL_CCONV) == (RightQual & T_QUAL_CCONV)) { - break; - } - /* else fall through */ - - default: - SetResult (Result, TC_INCOMPATIBLE); - return; - } + if (GetSignedness (lhs) != GetSignedness (rhs)) { + SetResult (Result, TC_SIGN_DIFF); } /* Check for special type elements */ switch (LeftType) { case T_TYPE_PTR: - ++Indirections; + ++Result->Indirections; + if (Result->Indirections == 1) { + if ((GetUnderlyingTypeCode (lhs + 1) & T_MASK_TYPE) == T_TYPE_VOID) { + Result->F |= TCF_VOID_PTR_ON_LEFT; + } + if ((GetUnderlyingTypeCode (rhs + 1) & T_MASK_TYPE) == T_TYPE_VOID) { + Result->F |= TCF_VOID_PTR_ON_RIGHT; + } + } else { + Result->F &= ~TCF_MASK_VOID_PTR; + } break; case T_TYPE_FUNC: @@ -364,7 +430,13 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) SetResult (Result, TC_INCOMPATIBLE); return; } - SetResult (Result, TC_EQUAL); + + /* We take into account which side is more specified */ + if (LeftCount == UNSPECIFIED) { + SetResult (Result, TC_UNSPECIFY); + } else { + SetResult (Result, TC_EQUAL); + } } break; @@ -397,11 +469,10 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) /* Next type string element */ ++lhs; ++rhs; - ++ElementCount; } - /* Check if end of rhs reached */ - if (rhs->C == T_END) { + /* Check if lhs and rhs both reached ends */ + if (lhs->C == T_END && rhs->C == T_END) { SetResult (Result, TC_IDENTICAL); } else { SetResult (Result, TC_INCOMPATIBLE); @@ -414,7 +485,7 @@ typecmp_t TypeCmp (const Type* lhs, const Type* rhs) /* Compare two types and return the result */ { /* Assume the types are identical */ - typecmp_t Result = TC_IDENTICAL; + typecmp_t Result = TYPECMP_INITIALIZER; #if 0 printf ("Left : "); PrintRawType (stdout, lhs); @@ -432,134 +503,18 @@ typecmp_t TypeCmp (const Type* lhs, const Type* rhs) -static Type* DoComposite (Type* lhs, const Type* rhs); - -static void CompositeFuncParams (const FuncDesc* F1, const FuncDesc* F2) -/* Composite two function symbol tables regarding function parameters */ +void TypeCompatibilityDiagnostic (const Type* NewType, const Type* OldType, int IsError, const char* Msg) +/* Print error or warning message about type compatibility with proper type names */ { - /* Get the symbol tables */ - const SymTable* Tab1 = F1->SymTab; - const SymTable* Tab2 = F2->SymTab; - - /* Composite the parameter lists */ - const SymEntry* Sym1 = Tab1->SymHead; - const SymEntry* Sym2 = Tab2->SymHead; - - /* Composite the fields */ - while (Sym1 && (Sym1->Flags & SC_PARAM) && Sym2 && (Sym2->Flags & SC_PARAM)) { - - /* Get the symbol types */ - Type* Type1 = Sym1->Type; - Type* Type2 = Sym2->Type; - - /* If either of both functions is old style, apply the default - ** promotions to the parameter type. - */ - if (F1->Flags & FD_OLDSTYLE) { - if (IsClassInt (Type1)) { - Type1 = IntPromotion (Type1); - } - } - if (F2->Flags & FD_OLDSTYLE) { - if (IsClassInt (Type2)) { - Type2 = IntPromotion (Type2); - } - } - - /* Composite this field */ - DoComposite (Type1, Type2); - - /* Get the pointers to the next fields */ - Sym1 = Sym1->NextSym; - Sym2 = Sym2->NextSym; + StrBuf NewTypeName = STATIC_STRBUF_INITIALIZER; + StrBuf OldTypeName = STATIC_STRBUF_INITIALIZER; + GetFullTypeNameBuf (&NewTypeName, NewType); + GetFullTypeNameBuf (&OldTypeName, OldType); + if (IsError) { + Error (Msg, SB_GetConstBuf (&NewTypeName), SB_GetConstBuf (&OldTypeName)); + } else { + Warning (Msg, SB_GetConstBuf (&NewTypeName), SB_GetConstBuf (&OldTypeName)); } -} - - - -static Type* DoComposite (Type* lhs, const Type* rhs) -/* Recursively composite two types into lhs */ -{ - FuncDesc* F1; - FuncDesc* F2; - long LeftCount, RightCount; - - /* Composite two types */ - while (lhs->C != T_END) { - - /* Check if the end of the type string is reached */ - if (rhs->C == T_END) { - return lhs; - } - - /* Check for sanity */ - CHECK (GetUnderlyingTypeCode (lhs) == GetUnderlyingTypeCode (rhs)); - - /* Check for special type elements */ - - if (IsTypeFunc (lhs)) { - /* Composite the function descriptors */ - F1 = GetFuncDesc (lhs); - F2 = GetFuncDesc (rhs); - - /* If one of both functions has an empty parameter list (which - ** does also mean, it is not a function definition, because the - ** flag is reset in this case), it is replaced by the other - ** definition, provided that the other has no default - ** promotions in the parameter list. If none of both parameter - ** lists is empty, we have to composite the parameter lists and - ** other attributes. - */ - if ((F1->Flags & FD_EMPTY) == FD_EMPTY) { - if ((F2->Flags & FD_EMPTY) == 0) { - /* Copy the parameters and flags */ - TypeCopy (lhs, rhs); - F1->Flags = F2->Flags; - } - } else if ((F2->Flags & FD_EMPTY) == 0) { - /* Composite the parameter lists */ - CompositeFuncParams (F1, F2); - } - - } else if (IsTypeArray (lhs)) { - /* Check member count */ - LeftCount = GetElementCount (lhs); - RightCount = GetElementCount (rhs); - - /* Set composite type if it is requested */ - if (LeftCount != UNSPECIFIED) { - SetElementCount (lhs, LeftCount); - } else if (RightCount != UNSPECIFIED) { - SetElementCount (lhs, RightCount); - } - } - - /* Next type string element */ - ++lhs; - ++rhs; - } - - return lhs; -} - - - -FuncDesc* RefineFuncDesc (Type* OldType, const Type* NewType) -/* Refine the existing function descriptor with a new one */ -{ - FuncDesc* Old = GetFuncDesc (OldType); - FuncDesc* New = GetFuncDesc (NewType); - - CHECK (Old != 0 && New != 0); - - if ((New->Flags & FD_EMPTY) == 0) { - if ((Old->Flags & FD_EMPTY) == 0) { - DoComposite (OldType, NewType); - } else { - TypeCopy (OldType, NewType); - Old->Flags &= ~FD_EMPTY; - } - } - - return Old; + SB_Done (&OldTypeName); + SB_Done (&NewTypeName); } diff --git a/src/cc65/typecmp.h b/src/cc65/typecmp.h index f4a87bcf6..e1ca699cf 100644 --- a/src/cc65/typecmp.h +++ b/src/cc65/typecmp.h @@ -48,18 +48,43 @@ -/* Degree of type compatibility. Must be in ascending order */ +/* Degree of type compatibility affected. Must be in ascending order */ typedef enum { - TC_INCOMPATIBLE, /* Distinct types */ - TC_SIGN_DIFF, /* Signedness differs */ - TC_COMPATIBLE = TC_SIGN_DIFF, /* Compatible types */ - TC_QUAL_DIFF, /* Types differ in qualifier of pointer */ - TC_STRICT_COMPATIBLE, /* Strict compatibility */ - TC_EQUAL, /* Types are equivalent */ - TC_IDENTICAL /* Types are identical */ + TC_INCOMPATIBLE, /* Distinct types */ + TC_SIGN_DIFF, /* Signedness differs */ + TC_PTR_INCOMPATIBLE, /* Distinct pointer types */ + TC_VOID_PTR, /* Non-void and void pointers */ + TC_STRICT_COMPATIBLE, /* Strict compatibility according to the C Standard */ + TC_PTR_DECAY, /* rhs is an array and lhs is a pointer */ + TC_EQUAL, /* Array types with unspecified lengths */ + TC_UNSPECIFY, /* lhs has unspecified length while rhs has specified length */ + TC_IDENTICAL /* Types are identical */ +} typecmpcode_t; + +/* Degree of type compatibility affected by qualifiers as well as some extra info */ +typedef enum { + TCF_NONE = 0x00, /* None of the below */ + TCF_VOID_PTR_ON_LEFT = 0x01, /* lhs is a void pointer */ + TCF_VOID_PTR_ON_RIGHT = 0x02, /* rhs is a void pointer */ + TCF_MASK_VOID_PTR = TCF_VOID_PTR_ON_LEFT | TCF_VOID_PTR_ON_RIGHT, + TCF_QUAL_DIFF = 0x04, /* CVR qualifiers differ in a way that doesn't matter */ + TCF_QUAL_IMPLICIT = 0x08, /* CVR qualifiers of lhs are stricter than those of rhs */ + TCF_PTR_QUAL_DIFF = 0x10, /* CVR qualifiers of pointers differ */ + TCF_PTR_QUAL_IMPLICIT = 0x20, /* CVR qualifiers of pointers are stricter on lhs than those on rhs */ + TCF_MASK_C_QUAL_DIFF = 0x3C, /* All C Standard qualifiers */ + TCF_ADDRSIZE_QUAL_DIFF = 0x40, /* Address size qualifiers differ */ + TCF_CCONV_QUAL_DIFF = 0x80, /* Function calling conventions differ. Unused now */ + TCF_INCOMPATIBLE_QUAL = TCF_ADDRSIZE_QUAL_DIFF | TCF_CCONV_QUAL_DIFF, + TCF_MASK_QUAL = TCF_MASK_C_QUAL_DIFF | TCF_INCOMPATIBLE_QUAL, +} typecmpflag_t; + +typedef struct { + typecmpcode_t C; + typecmpflag_t F; + int Indirections; } typecmp_t; - +#define TYPECMP_INITIALIZER { TC_IDENTICAL, TCF_NONE, 0 } /*****************************************************************************/ /* Code */ @@ -70,8 +95,9 @@ typedef enum { typecmp_t TypeCmp (const Type* lhs, const Type* rhs); /* Compare two types and return the result */ -FuncDesc* RefineFuncDesc (Type* OldType, const Type* NewType); -/* Refine the existing function descriptor with a new one */ +void TypeCompatibilityDiagnostic (const Type* NewType, const Type* OldType, int IsError, const char* Msg); +/* Print error or warning message about type compatibility with proper type names */ + /* End of typecmp.h */ diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 930aef8d4..d75d13cd1 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -43,7 +43,6 @@ #include "error.h" #include "expr.h" #include "loadexpr.h" -#include "scanner.h" #include "typecmp.h" #include "typeconv.h" @@ -55,24 +54,6 @@ -void TypeCompatibilityDiagnostic (const Type* NewType, const Type* OldType, int IsError, const char* Msg) -/* Print error or warning message about type conversion with proper type names */ -{ - StrBuf NewTypeName = STATIC_STRBUF_INITIALIZER; - StrBuf OldTypeName = STATIC_STRBUF_INITIALIZER; - GetFullTypeNameBuf (&NewTypeName, NewType); - GetFullTypeNameBuf (&OldTypeName, OldType); - if (IsError) { - Error (Msg, SB_GetConstBuf (&NewTypeName), SB_GetConstBuf (&OldTypeName)); - } else { - Warning (Msg, SB_GetConstBuf (&NewTypeName), SB_GetConstBuf (&OldTypeName)); - } - SB_Done (&OldTypeName); - SB_Done (&NewTypeName); -} - - - static void DoConversion (ExprDesc* Expr, const Type* NewType) /* Emit code to convert the given expression to a new type. */ { @@ -208,9 +189,10 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) PrintRawType (stdout, NewType); #endif /* First, do some type checking */ - int HasWarning = 0; - int HasError = 0; - const char* Msg = 0; + typecmp_t Result = TYPECMP_INITIALIZER; + int HasWarning = 0; + int HasError = 0; + const char* Msg = 0; const Type* OldType = Expr->Type; @@ -219,20 +201,13 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) HasError = 1; } - /* If both types are strictly compatible, no conversion is needed */ - if (TypeCmp (NewType, OldType) >= TC_STRICT_COMPATIBLE) { - /* We're already done */ - return; - } - - /* If Expr is an array or a function, convert it to a pointer */ - Expr->Type = PtrConversion (Expr->Type); - - /* If we have changed the type, check again for strictly compatibility */ - if (Expr->Type != OldType && - TypeCmp (NewType, Expr->Type) >= TC_STRICT_COMPATIBLE) { - /* We're already done */ - return; + /* If both types are the same, no conversion is needed */ + Result = TypeCmp (NewType, OldType); + if (Result.C < TC_IDENTICAL && (IsTypeArray (OldType) || IsTypeFunc (OldType))) { + /* If Expr is an array or a function, convert it to a pointer */ + Expr->Type = PtrConversion (Expr->Type); + /* Recompare */ + Result = TypeCmp (NewType, Expr->Type); } /* Check for conversion problems */ @@ -253,37 +228,27 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) /* Handle conversions to pointer type */ if (IsClassPtr (Expr->Type)) { - /* Pointer to pointer assignment is valid, if: + /* Implicit pointer-to-pointer conversion is valid, if: ** - both point to the same types, or ** - the rhs pointer is a void pointer, or ** - the lhs pointer is a void pointer. */ - if (!IsTypeVoid (IndirectConst (NewType)) && !IsTypeVoid (Indirect (Expr->Type))) { - /* Compare the types */ - switch (TypeCmp (NewType, Expr->Type)) { - - case TC_INCOMPATIBLE: - HasWarning = 1; - Msg = "Incompatible pointer assignment to '%s' from '%s'"; - /* Use the pointer type in the diagnostic */ - OldType = Expr->Type; - break; - - case TC_QUAL_DIFF: - HasWarning = 1; - Msg = "Pointer assignment to '%s' from '%s' discards qualifiers"; - /* Use the pointer type in the diagnostic */ - OldType = Expr->Type; - break; - - default: - /* Ok */ - break; - } + if (Result.C <= TC_PTR_INCOMPATIBLE || + (Result.F & TCF_INCOMPATIBLE_QUAL) != 0) + { + HasWarning = 1; + Msg = "Incompatible pointer conversion to '%s' from '%s'"; + /* Use the pointer type in the diagnostic */ + OldType = Expr->Type; + } else if ((Result.F & TCF_PTR_QUAL_DIFF) != 0) { + HasWarning = 1; + Msg = "Pointer conversion to '%s' from '%s' discards qualifiers"; + /* Use the pointer type in the diagnostic */ + OldType = Expr->Type; } } else if (IsClassInt (Expr->Type)) { - /* Int to pointer assignment is valid only for constant zero */ + /* Int to pointer conversion is valid only for constant zero */ if (!ED_IsConstAbsInt (Expr) || Expr->IVal != 0) { Warning ("Converting integer to pointer without a cast"); } @@ -291,11 +256,12 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) HasError = 1; } - } else { + } else if (Result.C < TC_IDENTICAL) { /* Invalid automatic conversion */ HasError = 1; } + /* Set default diagnostic message */ if (Msg == 0) { Msg = "Converting to '%s' from '%s'"; } @@ -350,13 +316,13 @@ void TypeCast (ExprDesc* Expr) /* Convert functions and arrays to "pointer to" object */ Expr->Type = PtrConversion (Expr->Type); - if (TypeCmp (NewType, Expr->Type) >= TC_QUAL_DIFF) { - /* If the new type only differs in qualifiers, just use it to - ** replace the old one. + if (TypeCmp (NewType, Expr->Type).C >= TC_PTR_INCOMPATIBLE) { + /* If the new type has the same underlying presentation, just + ** use it to replace the old one. */ ReplaceType (Expr, NewType); } else if (IsCastType (Expr->Type)) { - /* Convert the value. The rsult has always the new type */ + /* Convert the value. The result has always the new type */ DoConversion (Expr, NewType); } else { TypeCompatibilityDiagnostic (NewType, Expr->Type, 1, @@ -379,3 +345,142 @@ void TypeCast (ExprDesc* Expr) /* The result is always an rvalue */ ED_MarkExprAsRVal (Expr); } + + + +static void CompositeFuncParamList (const FuncDesc* F1, const FuncDesc* F2) +/* Composite two function symbol tables regarding function parameters */ +{ + /* Get the symbol tables */ + const SymTable* Tab1 = F1->SymTab; + const SymTable* Tab2 = F2->SymTab; + + /* Composite the parameter lists */ + const SymEntry* Sym1 = Tab1->SymHead; + const SymEntry* Sym2 = Tab2->SymHead; + + /* Composite the fields */ + while (Sym1 && (Sym1->Flags & SC_PARAM) && Sym2 && (Sym2->Flags & SC_PARAM)) { + + /* Get the symbol types */ + Type* Type1 = Sym1->Type; + Type* Type2 = Sym2->Type; + + /* If either of both functions is old style, apply the default + ** promotions to the parameter type. + */ + if (F1->Flags & FD_OLDSTYLE) { + if (IsClassInt (Type1)) { + Type1 = IntPromotion (Type1); + } + } + if (F2->Flags & FD_OLDSTYLE) { + if (IsClassInt (Type2)) { + Type2 = IntPromotion (Type2); + } + } + + /* Compose this field */ + TypeComposition (Type1, Type2); + + /* Get the pointers to the next fields */ + Sym1 = Sym1->NextSym; + Sym2 = Sym2->NextSym; + } +} + + + +void TypeComposition (Type* lhs, const Type* rhs) +/* Recursively compose two types into lhs. The two types must have compatible +** type or this fails with a critical check. +*/ +{ + FuncDesc* F1; + FuncDesc* F2; + long LeftCount, RightCount; + + /* Composite two types */ + while (lhs->C != T_END) { + + /* Check if the end of the type string is reached */ + if (rhs->C == T_END) { + break; + } + + /* Check for sanity */ + CHECK (GetUnderlyingTypeCode (lhs) == GetUnderlyingTypeCode (rhs)); + + /* Check for special type elements */ + if (IsTypeFunc (lhs)) { + /* Composite the function descriptors */ + F1 = GetFuncDesc (lhs); + F2 = GetFuncDesc (rhs); + + /* If one of both functions has an empty parameter list (which + ** does also mean, it is not a function definition, because the + ** flag is reset in this case), it is replaced by the other + ** definition, provided that the other has no default + ** promotions in the parameter list. If none of both parameter + ** lists is empty, we have to composite the parameter lists and + ** other attributes. + */ + if ((F1->Flags & FD_EMPTY) == FD_EMPTY) { + if ((F2->Flags & FD_EMPTY) == 0) { + /* Copy the parameters and flags */ + TypeCopy (lhs, rhs); + F1->Flags = F2->Flags; + } + } else if ((F2->Flags & FD_EMPTY) == 0) { + /* Composite the parameter lists */ + CompositeFuncParamList (F1, F2); + } + } else if (IsTypeArray (lhs)) { + /* Check member count */ + LeftCount = GetElementCount (lhs); + RightCount = GetElementCount (rhs); + + /* Set composite type if it is requested */ + if (LeftCount != UNSPECIFIED) { + SetElementCount (lhs, LeftCount); + } else if (RightCount != UNSPECIFIED) { + SetElementCount (lhs, RightCount); + } + } else { + /* Combine the qualifiers */ + if (IsClassPtr (lhs)) { + ++lhs; + ++rhs; + lhs->C |= GetQualifier (rhs); + } + } + + /* Next type string element */ + ++lhs; + ++rhs; + } + + return; +} + + + +FuncDesc* RefineFuncDesc (Type* OldType, const Type* NewType) +/* Refine the existing function descriptor with a new one */ +{ + FuncDesc* Old = GetFuncDesc (OldType); + FuncDesc* New = GetFuncDesc (NewType); + + CHECK (Old != 0 && New != 0); + + if ((New->Flags & FD_EMPTY) == 0) { + if ((Old->Flags & FD_EMPTY) == 0) { + TypeComposition (OldType, NewType); + } else { + TypeCopy (OldType, NewType); + Old->Flags &= ~FD_EMPTY; + } + } + + return Old; +} diff --git a/src/cc65/typeconv.h b/src/cc65/typeconv.h index 0a82eac27..839c5e43e 100644 --- a/src/cc65/typeconv.h +++ b/src/cc65/typeconv.h @@ -49,9 +49,6 @@ -void TypeCompatibilityDiagnostic (const Type* NewType, const Type* OldType, int IsError, const char* Msg); -/* Print error or warning message about type conversion with proper type names */ - void TypeConversion (ExprDesc* Expr, const Type* NewType); /* Do an automatic conversion of the given expression to the new type. Output ** warnings or errors where this automatic conversion is suspicious or @@ -61,6 +58,14 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType); void TypeCast (ExprDesc* Expr); /* Handle an explicit cast. */ +void TypeComposition (Type* lhs, const Type* rhs); +/* Recursively compose two types into lhs. The two types must have compatible +** type or this fails with a critical check. +*/ + +FuncDesc* RefineFuncDesc (Type* OldType, const Type* NewType); +/* Refine the existing function descriptor with a new one */ + /* End of typeconv.h */ From 4a3896538409ec6a186bbabbd3f94e9dec7e70b4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 25 Mar 2021 13:32:46 +0800 Subject: [PATCH 0778/2710] Warnings on discarding pointer qualifiers always. Added new -W options to turn on/off warnings on certain pointer conversion cases: - pointer-sign: to a pointer type differing in pointee signedness. Default on. - pointer-types: to a pointer type incompatible. Default on. --- src/cc65/error.c | 4 ++++ src/cc65/error.h | 2 ++ src/cc65/typecmp.c | 8 ++++++++ src/cc65/typecmp.h | 1 + src/cc65/typeconv.c | 38 +++++++++++++++++++++----------------- 5 files changed, 36 insertions(+), 17 deletions(-) diff --git a/src/cc65/error.c b/src/cc65/error.c index feb43565d..ec665b319 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -68,6 +68,8 @@ IntStack WarningsAreErrors = INTSTACK(0); /* Treat warnings as errors */ /* Warn about: */ IntStack WarnConstComparison= INTSTACK(1); /* - constant comparison results */ IntStack WarnNoEffect = INTSTACK(1); /* - statements without an effect */ +IntStack WarnPointerSign = INTSTACK(1); /* - pointer conversion to pointer differing in signedness */ +IntStack WarnPointerTypes = INTSTACK(1); /* - pointer conversion to incompatible pointer type */ IntStack WarnRemapZero = INTSTACK(1); /* - remapping character code zero */ IntStack WarnStructParam = INTSTACK(0); /* - structs passed by val */ IntStack WarnUnknownPragma = INTSTACK(1); /* - unknown #pragmas */ @@ -87,6 +89,8 @@ static WarnMapEntry WarnMap[] = { { &WarnConstComparison, "const-comparison" }, { &WarningsAreErrors, "error" }, { &WarnNoEffect, "no-effect" }, + { &WarnPointerSign, "pointer-sign" }, + { &WarnPointerTypes, "pointer-types" }, { &WarnRemapZero, "remap-zero" }, { &WarnStructParam, "struct-param" }, { &WarnUnknownPragma, "unknown-pragma" }, diff --git a/src/cc65/error.h b/src/cc65/error.h index 898793651..a7592b366 100644 --- a/src/cc65/error.h +++ b/src/cc65/error.h @@ -64,6 +64,8 @@ extern IntStack WarnEnable; /* Enable warnings */ extern IntStack WarningsAreErrors; /* Treat warnings as errors */ /* Warn about: */ extern IntStack WarnConstComparison; /* - constant comparison results */ +extern IntStack WarnPointerSign; /* - pointer conversion to pointer differing in signedness */ +extern IntStack WarnPointerTypes; /* - pointer conversion to incompatible pointer type */ extern IntStack WarnNoEffect; /* - statements without an effect */ extern IntStack WarnRemapZero; /* - remapping character code zero */ extern IntStack WarnStructParam; /* - structs passed by val */ diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index 7aae7fefe..567ab4e87 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -143,6 +143,7 @@ static void SetResult (typecmp_t* Result, typecmpcode_t Val) if (Val < Result->C) { if (Result->Indirections > 0) { if (Val >= TC_STRICT_COMPATIBLE) { + /* Arrays etc. */ Result->C = Val; } else if (Result->Indirections == 1) { /* C Standard allows implicit conversion as long as one side is @@ -150,10 +151,17 @@ static void SetResult (typecmp_t* Result, typecmpcode_t Val) */ if ((Result->F & TCF_MASK_VOID_PTR) != 0) { Result->C = TC_VOID_PTR; + } else if (Val == TC_SIGN_DIFF) { + /* Special treatment with pointee signedness difference */ + Result->C = TC_PTR_SIGN_DIFF; } else { + /* Incompatible */ Result->C = TC_PTR_INCOMPATIBLE; } } else { + /* Pointer-to-pointer types must have compatible pointte types, + ** or they are just incompatible. + */ Result->C = TC_PTR_INCOMPATIBLE; } } else { diff --git a/src/cc65/typecmp.h b/src/cc65/typecmp.h index e1ca699cf..367df5245 100644 --- a/src/cc65/typecmp.h +++ b/src/cc65/typecmp.h @@ -52,6 +52,7 @@ typedef enum { TC_INCOMPATIBLE, /* Distinct types */ TC_SIGN_DIFF, /* Signedness differs */ + TC_PTR_SIGN_DIFF, /* Pointee signedness differs */ TC_PTR_INCOMPATIBLE, /* Distinct pointer types */ TC_VOID_PTR, /* Non-void and void pointers */ TC_STRICT_COMPATIBLE, /* Strict compatibility according to the C Standard */ diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index d75d13cd1..91a1f022d 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -190,7 +190,6 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) #endif /* First, do some type checking */ typecmp_t Result = TYPECMP_INITIALIZER; - int HasWarning = 0; int HasError = 0; const char* Msg = 0; const Type* OldType = Expr->Type; @@ -232,19 +231,28 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) ** - both point to the same types, or ** - the rhs pointer is a void pointer, or ** - the lhs pointer is a void pointer. + ** Note: We additionally allow converting function pointers to and from + ** void pointers, just with warnings. */ - if (Result.C <= TC_PTR_INCOMPATIBLE || - (Result.F & TCF_INCOMPATIBLE_QUAL) != 0) - { - HasWarning = 1; - Msg = "Incompatible pointer conversion to '%s' from '%s'"; - /* Use the pointer type in the diagnostic */ - OldType = Expr->Type; - } else if ((Result.F & TCF_PTR_QUAL_DIFF) != 0) { - HasWarning = 1; - Msg = "Pointer conversion to '%s' from '%s' discards qualifiers"; - /* Use the pointer type in the diagnostic */ - OldType = Expr->Type; + if (Result.C == TC_PTR_SIGN_DIFF) { + /* Specific warning for pointee signedness difference */ + if (IS_Get (&WarnPointerSign)) { + TypeCompatibilityDiagnostic (NewType, Expr->Type, + 0, "Pointer conversion to '%s' from '%s' changes pointee signedness"); + } + } else if ((Result.C <= TC_PTR_INCOMPATIBLE || + (Result.F & TCF_INCOMPATIBLE_QUAL) != 0)) { + /* Incompatible pointee types or qualifiers */ + if (IS_Get (&WarnPointerTypes)) { + TypeCompatibilityDiagnostic (NewType, Expr->Type, + 0, "Incompatible pointer conversion to '%s' from '%s'"); + } + } + + if ((Result.F & TCF_PTR_QUAL_DIFF) != 0) { + /* Discarding qualifiers is a bad thing and we always warn */ + TypeCompatibilityDiagnostic (NewType, Expr->Type, + 0, "Pointer conversion to '%s' from '%s' discards qualifiers"); } } else if (IsClassInt (Expr->Type)) { @@ -269,10 +277,6 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) if (HasError) { TypeCompatibilityDiagnostic (NewType, OldType, 1, Msg); } else { - if (HasWarning) { - TypeCompatibilityDiagnostic (NewType, OldType, 0, Msg); - } - /* Both types must be complete */ if (!IsIncompleteESUType (NewType) && !IsIncompleteESUType (Expr->Type)) { /* Do the actual conversion */ From 200b42056216457a4f79097bf76195ef5bbb3da2 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Thu, 1 Apr 2021 15:06:47 +0200 Subject: [PATCH 0779/2710] Export LMARGN_save to C. People might want to preserve this setting in their program. In turn rearrange startup code in order that LMARGN can be set by a 'constructor' (Do "initlib" later.) --- libsrc/atari/crt0.s | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/libsrc/atari/crt0.s b/libsrc/atari/crt0.s index 97b7d7e95..381aa699f 100644 --- a/libsrc/atari/crt0.s +++ b/libsrc/atari/crt0.s @@ -10,6 +10,7 @@ .export __STARTUP__ : absolute = 1 ; Mark as startup .export _exit, start, excexit, SP_save + .export __LMARGN_save ; original LMARGN setting .import initlib, donelib .import callmain, zerobss @@ -82,14 +83,10 @@ start: .endif -; Call the module constructors. - - jsr initlib - ; Set the left margin to 0. lda LMARGN - sta LMARGN_save + sta __LMARGN_save ldy #0 sty LMARGN @@ -104,6 +101,10 @@ start: dey ; Set Y to $FF sty CH ; remove keypress which might be in the input buffer +; Call the module constructors. + + jsr initlib + ; Push the command-line arguments; and, call main(). jsr callmain @@ -119,7 +120,7 @@ excexit:jsr donelib ; Run module destructors; 'excexit' is called fr ; Restore the left margin. - lda LMARGN_save + lda __LMARGN_save sta LMARGN ; Restore the kb mode. @@ -196,7 +197,7 @@ excexit:jsr donelib ; Run module destructors; 'excexit' is called fr SP_save: .res 1 SHFLOK_save: .res 1 -LMARGN_save: .res 1 +__LMARGN_save: .res 1 .ifndef __ATARIXL__ APPMHI_save: .res 2 .endif From 91fd30611a3e24a8d0702d5345812cdbf1a79671 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 29 Mar 2021 14:30:44 +0800 Subject: [PATCH 0780/2710] Fixed ICE on error cases such as '&func + int a'. --- src/cc65/expr.c | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index be53b22f9..58de0d891 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2850,27 +2850,31 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) } else { /* OOPS */ AddDone = -1; + /* Avoid further errors */ + ED_MakeConstAbsInt (Expr, 0); } - /* Do constant calculation if we can */ - if (ED_IsAbs (&Expr2) && - (ED_IsAbs (Expr) || lscale == 1)) { - if (IsClassInt (lhst) && IsClassInt (rhst)) { - Expr->Type = ArithmeticConvert (Expr->Type, Expr2.Type); + if (!AddDone) { + /* Do constant calculation if we can */ + if (ED_IsAbs (&Expr2) && + (ED_IsAbs (Expr) || lscale == 1)) { + if (IsClassInt (lhst) && IsClassInt (rhst)) { + Expr->Type = ArithmeticConvert (Expr->Type, Expr2.Type); + } + Expr->IVal = Expr->IVal * lscale + Expr2.IVal * rscale; + AddDone = 1; + } else if (ED_IsAbs (Expr) && + (ED_IsAbs (&Expr2) || rscale == 1)) { + if (IsClassInt (lhst) && IsClassInt (rhst)) { + Expr2.Type = ArithmeticConvert (Expr2.Type, Expr->Type); + } + Expr2.IVal = Expr->IVal * lscale + Expr2.IVal * rscale; + /* Adjust the flags */ + Expr2.Flags |= Expr->Flags & ~E_MASK_KEEP_SUBEXPR; + /* Get the symbol and the name */ + *Expr = Expr2; + AddDone = 1; } - Expr->IVal = Expr->IVal * lscale + Expr2.IVal * rscale; - AddDone = 1; - } else if (ED_IsAbs (Expr) && - (ED_IsAbs (&Expr2) || rscale == 1)) { - if (IsClassInt (lhst) && IsClassInt (rhst)) { - Expr2.Type = ArithmeticConvert (Expr2.Type, Expr->Type); - } - Expr2.IVal = Expr->IVal * lscale + Expr2.IVal * rscale; - /* Adjust the flags */ - Expr2.Flags |= Expr->Flags & ~E_MASK_KEEP_SUBEXPR; - /* Get the symbol and the name */ - *Expr = Expr2; - AddDone = 1; } if (AddDone) { From 2864b3ef8a1722b4eda017a74ac964136279f82a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 30 Mar 2021 10:59:44 +0800 Subject: [PATCH 0781/2710] Fixed composition of prototypes and old-style function definitions with default promotions. Fixed function parameter list comparison with empty ones. --- src/cc65/typecmp.c | 65 +++++++-------------------------------------- src/cc65/typeconv.c | 52 +++++++++++++++++++++++------------- 2 files changed, 43 insertions(+), 74 deletions(-) diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index 567ab4e87..58f41d3ca 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -49,40 +49,6 @@ -static int ParamsHaveDefaultPromotions (const FuncDesc* F) -/* Check if any of the parameters of function F has a default promotion. In -** this case, the function is not compatible with an empty parameter name list -** declaration. -*/ -{ - /* Get the symbol table */ - const SymTable* Tab = F->SymTab; - - /* Get the first parameter in the list */ - const SymEntry* Sym = Tab->SymHead; - - /* Walk over all parameters */ - while (Sym && (Sym->Flags & SC_PARAM)) { - - /* If this is an integer type, check if the promoted type is equal - ** to the original type. If not, we have a default promotion. - */ - if (IsClassInt (Sym->Type)) { - if (IntPromotion (Sym->Type) != Sym->Type) { - return 1; - } - } - - /* Get the pointer to the next param */ - Sym = Sym->NextSym; - } - - /* No default promotions in the parameter list */ - return 0; -} - - - static int EqualFuncParams (const FuncDesc* F1, const FuncDesc* F2) /* Compare two function symbol tables regarding function parameters. Return 1 ** if they are equal and 0 otherwise. @@ -385,29 +351,16 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) F1 = GetFuncDesc (lhs); F2 = GetFuncDesc (rhs); - /* If one of both functions has an empty parameter list (which - ** does also mean, it is not a function definition, because the - ** flag is reset in this case), it is considered equal to any - ** other definition, provided that the other has no default - ** promotions in the parameter list. If none of both parameter - ** lists is empty, we have to check the parameter lists and - ** other attributes. + /* If one of both function declarations has an empty parameter + ** list (which does also mean, it is not a function definition, + ** because the flag is reset in this case), it is ignored for + ** parameter comparison and considered equal to the other one, + ** provided both have the same return type and other attributes. + ** If neither of both parameter lists is empty, we have to check + ** the parameter lists. */ - if (F1->Flags & FD_EMPTY) { - if ((F2->Flags & FD_EMPTY) == 0) { - if (ParamsHaveDefaultPromotions (F2)) { - /* Flags differ */ - SetResult (Result, TC_INCOMPATIBLE); - return; - } - } - } else if (F2->Flags & FD_EMPTY) { - if (ParamsHaveDefaultPromotions (F1)) { - /* Flags differ */ - SetResult (Result, TC_INCOMPATIBLE); - return; - } - } else { + if ((F1->Flags & FD_EMPTY) == 0 && + (F2->Flags & FD_EMPTY) == 0) { /* Check the remaining flags */ if ((F1->Flags & ~FD_IGNORE) != (F2->Flags & ~FD_IGNORE)) { diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 91a1f022d..8bdef8d03 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -352,18 +352,21 @@ void TypeCast (ExprDesc* Expr) -static void CompositeFuncParamList (const FuncDesc* F1, const FuncDesc* F2) -/* Composite two function symbol tables regarding function parameters */ +static void ComposeFuncParamList (const FuncDesc* F1, const FuncDesc* F2) +/* Compose two function symbol tables regarding function parameters into F1 */ { /* Get the symbol tables */ const SymTable* Tab1 = F1->SymTab; const SymTable* Tab2 = F2->SymTab; - /* Composite the parameter lists */ - const SymEntry* Sym1 = Tab1->SymHead; - const SymEntry* Sym2 = Tab2->SymHead; + /* Compose the parameter lists */ + SymEntry* Sym1 = Tab1->SymHead; + SymEntry* Sym2 = Tab2->SymHead; - /* Composite the fields */ + /* Sanity check */ + CHECK ((F1->Flags & FD_EMPTY) == 0 && (F2->Flags & FD_EMPTY) == 0); + + /* Compose the fields */ while (Sym1 && (Sym1->Flags & SC_PARAM) && Sym2 && (Sym2->Flags & SC_PARAM)) { /* Get the symbol types */ @@ -384,8 +387,19 @@ static void CompositeFuncParamList (const FuncDesc* F1, const FuncDesc* F2) } } + /* When we compose two function parameter lists with any FD_OLDSTYLE + ** flags set, we are either refining the declaration of the function + ** with its definition seen, or determining the result type of a + ** ternary operation. In either case, we can just replace the types + ** with the promoted ones since the original types of the parameters + ** only matters inside the function definition. + */ + if (Type1 != Sym1->Type) { + Sym1->Type = TypeDup (Type1); + } + /* Compose this field */ - TypeComposition (Type1, Type2); + TypeComposition (Sym1->Type, Type2); /* Get the pointers to the next fields */ Sym1 = Sym1->NextSym; @@ -404,7 +418,7 @@ void TypeComposition (Type* lhs, const Type* rhs) FuncDesc* F2; long LeftCount, RightCount; - /* Composite two types */ + /* Compose two types */ while (lhs->C != T_END) { /* Check if the end of the type string is reached */ @@ -417,17 +431,15 @@ void TypeComposition (Type* lhs, const Type* rhs) /* Check for special type elements */ if (IsTypeFunc (lhs)) { - /* Composite the function descriptors */ + /* Compose the function descriptors */ F1 = GetFuncDesc (lhs); F2 = GetFuncDesc (rhs); - /* If one of both functions has an empty parameter list (which - ** does also mean, it is not a function definition, because the - ** flag is reset in this case), it is replaced by the other - ** definition, provided that the other has no default - ** promotions in the parameter list. If none of both parameter - ** lists is empty, we have to composite the parameter lists and - ** other attributes. + /* If F1 has an empty parameter list (which does also mean, it is + ** not a function definition, because the flag is reset in this + ** case), its declaration is replaced by the other declaration. If + ** neither of the parameter lists is empty, we have to compose them + ** as well as other attributes. */ if ((F1->Flags & FD_EMPTY) == FD_EMPTY) { if ((F2->Flags & FD_EMPTY) == 0) { @@ -436,8 +448,12 @@ void TypeComposition (Type* lhs, const Type* rhs) F1->Flags = F2->Flags; } } else if ((F2->Flags & FD_EMPTY) == 0) { - /* Composite the parameter lists */ - CompositeFuncParamList (F1, F2); + /* Compose the parameter lists */ + ComposeFuncParamList (F1, F2); + /* Prefer non-old-style */ + if ((F2->Flags & FD_OLDSTYLE) == 0) { + F1->Flags &= ~FD_OLDSTYLE; + } } } else if (IsTypeArray (lhs)) { /* Check member count */ From 1a3628df1a6417156feefcbdf19dd24856d5e073 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 30 Mar 2021 10:59:44 +0800 Subject: [PATCH 0782/2710] Fixed the term 'argument' vs 'parameter' in function parser. --- src/cc65/expr.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 58de0d891..9e08faeeb 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -651,11 +651,11 @@ void DoDeferred (unsigned Flags, ExprDesc* Expr) } -static unsigned FunctionParamList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) -/* Parse a function parameter list, and pass the arguments to the called -** function. Depending on several criteria, this may be done by just pushing -** into each parameter separately, or creating the parameter frame once, and -** then storing into this frame. +static unsigned FunctionArgList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) +/* Parse the argument list of the called function and pass the arguments to it. +** Depending on several criteria, this may be done by just pushing into each +** parameter separately, or creating the parameter frame once and then storing +** arguments into this frame one by one. ** The function returns the size of the arguments pushed in bytes. */ { @@ -860,7 +860,7 @@ static void FunctionCall (ExprDesc* Expr) { FuncDesc* Func; /* Function descriptor */ int IsFuncPtr; /* Flag */ - unsigned ParamSize; /* Number of parameter bytes */ + unsigned ArgSize; /* Number of arguments bytes */ CodeMark Mark; int PtrOffs = 0; /* Offset of function pointer on stack */ int IsFastcall = 0; /* True if we are fast-calling the function */ @@ -932,8 +932,8 @@ static void FunctionCall (ExprDesc* Expr) IsFastcallFunc (Expr->Type); } - /* Parse the parameter list */ - ParamSize = FunctionParamList (Func, IsFastcall, Expr); + /* Parse the argument list and pass them to the called function */ + ArgSize = FunctionArgList (Func, IsFastcall, Expr); /* We need the closing paren here */ ConsumeRParen (); @@ -952,11 +952,11 @@ static void FunctionCall (ExprDesc* Expr) /* Not a fastcall function - we may use the primary */ if (PtrOnStack) { - /* If we have no parameters, the pointer is still in the + /* If we have no arguments, the pointer is still in the ** primary. Remove the code to push it and correct the ** stack pointer. */ - if (ParamSize == 0) { + if (ArgSize == 0) { RemoveCode (&Mark); PtrOnStack = 0; } else { @@ -969,7 +969,7 @@ static void FunctionCall (ExprDesc* Expr) } /* Call the function */ - g_callind (FuncTypeOf (Expr->Type+1), ParamSize, PtrOffs); + g_callind (FuncTypeOf (Expr->Type+1), ArgSize, PtrOffs); } else { @@ -978,7 +978,7 @@ static void FunctionCall (ExprDesc* Expr) ** Since fastcall functions may never be variadic, we can use the ** index register for this purpose. */ - g_callind (CF_STACK, ParamSize, PtrOffs); + g_callind (CF_STACK, ArgSize, PtrOffs); } /* If we have a pointer on stack, remove it */ @@ -1030,9 +1030,9 @@ static void FunctionCall (ExprDesc* Expr) SB_Done (&S); - g_call (FuncTypeOf (Expr->Type), Func->WrappedCall->Name, ParamSize); + g_call (FuncTypeOf (Expr->Type), Func->WrappedCall->Name, ArgSize); } else { - g_call (FuncTypeOf (Expr->Type), (const char*) Expr->Name, ParamSize); + g_call (FuncTypeOf (Expr->Type), (const char*) Expr->Name, ArgSize); } } From 5d05451ab2e5e4b9e52c99a5d6d04dfb5ac7ca7e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 1 Apr 2021 11:41:55 +0800 Subject: [PATCH 0783/2710] Fixed test case for Issue #1263. --- test/{misc => val}/bug1263.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) rename test/{misc => val}/bug1263.c (59%) diff --git a/test/misc/bug1263.c b/test/val/bug1263.c similarity index 59% rename from test/misc/bug1263.c rename to test/val/bug1263.c index 4e5987c58..740b19250 100644 --- a/test/misc/bug1263.c +++ b/test/val/bug1263.c @@ -1,15 +1,22 @@ /* bug #1263 - erroneous error for K & R function declaration */ enum E { I = 0 }; -extern int f(enum E); +extern int f(); int f(e) enum E e; { return e; } +extern int g(int); +int g(e) + enum E e; +{ + return e; +} + int main(void) { - return f(I); + return f(I) + g(I); } From 2583dfb71a0ee028db3520aeb4ff6ace2fa30644 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 4 Apr 2021 03:13:45 +0200 Subject: [PATCH 0784/2710] Update README.md Commander X16 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3d78fda50..2c84b7430 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ including - the Oric Telestrat. - the Lynx console. - the Ohio Scientific Challenger 1P. +- the Commander X16. The libraries are fairly portable, so creating a version for other 6502s shouldn't be too much work. From f5365c7ffdcafda91b7f84d3b4d04555ba458816 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 4 Apr 2021 03:13:45 +0200 Subject: [PATCH 0785/2710] Update README.md Commander X16 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3d78fda50..2c84b7430 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ including - the Oric Telestrat. - the Lynx console. - the Ohio Scientific Challenger 1P. +- the Commander X16. The libraries are fairly portable, so creating a version for other 6502s shouldn't be too much work. From bd8eae67f1616ca8fcb434a8ba932731c21891f8 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 5 Apr 2021 16:40:32 +0800 Subject: [PATCH 0786/2710] Fixed local struct field access via the address of the struct. --- src/cc65/expr.c | 43 +++++++++++++++++++++---------------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 9e08faeeb..74524c47a 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1340,7 +1340,6 @@ static void Primary (ExprDesc* E) static void StructRef (ExprDesc* Expr) /* Process struct/union field after . or ->. */ { - ident Ident; Type* FinalType; TypeCode Q; @@ -1354,42 +1353,42 @@ static void StructRef (ExprDesc* Expr) } /* Get the symbol table entry and check for a struct/union field */ - strcpy (Ident, CurTok.Ident); NextToken (); - const SymEntry Field = FindStructField (Expr->Type, Ident); + const SymEntry Field = FindStructField (Expr->Type, CurTok.Ident); if (Field.Type == 0) { - Error ("No field named '%s' found in '%s'", Ident, GetFullTypeName (Expr->Type)); + Error ("No field named '%s' found in '%s'", CurTok.Ident, GetFullTypeName (Expr->Type)); /* Make the expression an integer at address zero */ ED_MakeConstAbs (Expr, 0, type_int); return; } - /* A struct/union is usually an lvalue. If not, it is a struct/union passed - ** in the primary register, which is usually the result returned from a - ** function. However, it is possible that this rvalue is the result of - ** certain kind of operations on an lvalue such as assignment, and there - ** are no reasons to disallow such use cases. So we just rely on the check - ** upon function returns to catch the unsupported cases and dereference the - ** rvalue address of the struct/union here all the time. - */ - if (IsTypePtr (Expr->Type) || - (ED_IsRVal (Expr) && - ED_IsLocPrimary (Expr) && - Expr->Type == GetStructReplacementType (Expr->Type))) { + if (IsTypePtr (Expr->Type)) { - if (!ED_IsConst (Expr) && !ED_IsLocPrimary (Expr)) { + /* pointer->field */ + if (!ED_IsQuasiConst (Expr) && !ED_IsLocPrimary (Expr)) { /* If we have a non-const struct/union pointer that is not in the - ** primary yet, load its content now. + ** primary yet, load its content now to get the base address. */ LoadExpr (CF_NONE, Expr); - - /* Clear the offset */ - Expr->IVal = 0; + ED_FinalizeRValLoad (Expr); } - /* Dereference the address expression */ ED_IndExpr (Expr); + } else if (ED_IsRVal (Expr) && + ED_IsLocPrimary (Expr) && + Expr->Type == GetStructReplacementType (Expr->Type)) { + + /* A struct/union is usually an lvalue. If not, it is a struct/union + ** passed in the primary register, which is usually the result returned + ** from a function. However, it is possible that this rvalue is the + ** result of certain kind of operations on an lvalue such as assignment, + ** and there are no reasons to disallow such use cases. So we just rely + ** on the check upon function returns to catch the unsupported cases and + ** dereference the rvalue address of the struct/union here all the time. + */ + ED_IndExpr (Expr); + } else if (!ED_IsLocQuasiConst (Expr) && !ED_IsLocPrimaryOrExpr (Expr)) { /* Load the base address into the primary (and use it as a reference ** later) if it's not quasi-const or in the primary already. From 39700c77ee8eb0c2e162b81155c5066c6a4c81fe Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 5 Apr 2021 17:31:18 +0800 Subject: [PATCH 0787/2710] Added test case for Issue #1451. --- test/val/bug1451.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 test/val/bug1451.c diff --git a/test/val/bug1451.c b/test/val/bug1451.c new file mode 100644 index 000000000..c00f19903 --- /dev/null +++ b/test/val/bug1451.c @@ -0,0 +1,39 @@ +/* Bug #1451 - local struct field access via the address of the struct */ + +#include <stdio.h> + +typedef struct { + int a; + int b; +} S; + +int failures = 0; + +int main(void) +{ + S a = {2, 5}; + S b = {1, 4}; + S m[1] = {{6, 3}}; + S *p = &a; + + (&a)->a += b.a; + p->b += b.b; + m->a += b.a; + + if ((&a)->a != 3) { + ++failures; + printf("Expected 3, got %d\n", (&a)->a); + } + + if (p->b != 9) { + ++failures; + printf("Expected 9, got %d\n", p->b); + } + + if (m->a != 7) { + ++failures; + printf("Expected 7, got %d\n", m->a); + } + + return failures; +} From 0ed41db478ccf77b89aca8c6e9e959b0c113336c Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Mon, 5 Apr 2021 23:50:07 +0200 Subject: [PATCH 0788/2710] Some minor clarifications. --- doc/apple2.sgml | 14 +++++--------- doc/apple2enh.sgml | 14 +++++--------- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index 91c02c7ad..f957e1247 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -575,15 +575,13 @@ url="ca65.html" name="assembler manual">. <tag>Explanation of File Types</tag> - ProDOS associates a file type and an auxiliary type with each file. + ProDOS 8 associates a file type and an auxiliary type with each file. These type specifications are separate from the file's name, unlike Windows which uses the file name's suffix (a.k.a. extension) to specify the file type. For example, <tt/.exe/, <tt/.doc/, or <tt/.bat/. - The ProDOS low-level - Machine-Language Interface (MLI) functions for creating and opening - files require these types to be specified. And if they don't match - with the file being opened, the operation may fail. + The ProDOS 8 Machine-Language Interface (MLI) function for creating a + file require these types to be specified. In contrast, the ISO C function <tt/fopen()/ and the POSIX function <tt/open()/ have no parameter to specify either a file type or an @@ -606,8 +604,6 @@ url="ca65.html" name="assembler manual">. The header file <tt/apple2_filetype.h/ also defines many values that can be used to set these variables. It is included in <tt/apple2.h/, which is in turn included in <tt/apple2enh.h/. - So it isn't necessary to include it directly. Just - include one of <tt/apple2.h/ or <tt/apple2enh.h/. <tag>Example</tag> @@ -624,8 +620,8 @@ url="ca65.html" name="assembler manual">. carriage return instead of a line-feed (Linux/BSD/MacOS) or carriage return, line-feed pair (Windows). - The "sequential" text file terminology is in contrast to a - "random-access" text file which would + The 'sequential' text file terminology is in contrast to a + 'random-access' text file which would have a fixed-length, non-zero record length, so that the file position of any individual record can be calculated. diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 2d4381353..4aafbc256 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -580,15 +580,13 @@ url="ca65.html" name="assembler manual">. <tag>Explanation of File Types</tag> - ProDOS associates a file type and an auxiliary type with each file. + ProDOS 8 associates a file type and an auxiliary type with each file. These type specifications are separate from the file's name, unlike Windows which uses the file name's suffix (a.k.a. extension) to specify the file type. For example, <tt/.exe/, <tt/.doc/, or <tt/.bat/. - The ProDOS low-level - Machine-Language Interface (MLI) functions for creating and opening - files require these types to be specified. And if they don't match - with the file being opened, the operation may fail. + The ProDOS 8 Machine-Language Interface (MLI) function for creating a + file require these types to be specified. In contrast, the ISO C function <tt/fopen()/ and the POSIX function <tt/open()/ have no parameter to specify either a file type or an @@ -611,8 +609,6 @@ url="ca65.html" name="assembler manual">. The header file <tt/apple2_filetype.h/ also defines many values that can be used to set these variables. It is included in <tt/apple2.h/, which is in turn included in <tt/apple2enh.h/. - So it isn't necessary to include it directly. Just - include one of <tt/apple2.h/ or <tt/apple2enh.h/. <tag>Example</tag> @@ -629,8 +625,8 @@ url="ca65.html" name="assembler manual">. carriage return instead of a line-feed (Linux/BSD/MacOS) or carriage return, line-feed pair (Windows). - The "sequential" text file terminology is in contrast to a - "random-access" text file which would + The 'sequential' text file terminology is in contrast to a + 'random-access' text file which would have a fixed-length, non-zero record length, so that the file position of any individual record can be calculated. From e435da623460d3baaad0c8f5f0b609f53cb96bb3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 18 Sep 2020 20:21:51 +0800 Subject: [PATCH 0789/2710] Interim fix for Issue #897. --- src/cc65/codeseg.c | 49 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/src/cc65/codeseg.c b/src/cc65/codeseg.c index 0626f3d18..e621147ab 100644 --- a/src/cc65/codeseg.c +++ b/src/cc65/codeseg.c @@ -282,6 +282,8 @@ static CodeEntry* ParseInsn (CodeSeg* S, LineInfo* LI, const char* L) char Reg; CodeEntry* E; CodeLabel* Label; + const char* ArgBase = Arg; + int IsLabel = 0; /* Read the first token and skip white space after it */ L = SkipSpace (ReadToken (L, " \t:", Mnemo, sizeof (Mnemo))); @@ -448,32 +450,44 @@ static CodeEntry* ParseInsn (CodeSeg* S, LineInfo* LI, const char* L) } - /* If the instruction is a branch, check for the label and generate it - ** if it does not exist. This may lead to unused labels (if the label + /* We do now have the addressing mode in AM. Allocate a new CodeEntry + ** structure and half-initialize it. We'll set the argument and the label + ** later. + */ + E = NewCodeEntry (OPC->OPC, AM, Arg, 0, LI); + + /* If the instruction is a branch or accessing memory data, check if for + ** the argument could refer to a label. If it does but the label does not + ** exist yet, generate it. This may lead to unused labels (if the label ** is actually an external one) which are removed by the CS_MergeLabels ** function later. */ - Label = 0; - if (AM == AM65_BRA) { + if ((E->Info & OF_CALL) == 0 && + (E->ArgInfo & AIF_HAS_NAME) != 0) { + ArgBase = E->ArgBase; + IsLabel = (E->ArgInfo & AIF_LOCAL) != 0; + } + + if (AM == AM65_BRA || IsLabel) { /* Generate the hash over the label, then search for the label */ - unsigned Hash = HashStr (Arg) % CS_LABEL_HASH_SIZE; - Label = CS_FindLabel (S, Arg, Hash); + unsigned Hash = HashStr (ArgBase) % CS_LABEL_HASH_SIZE; + Label = CS_FindLabel (S, ArgBase, Hash); /* If we don't have the label, it's a forward ref - create it unless ** it's an external function. */ - if (Label == 0 && (OPC->OPC != OP65_JMP || IsLocalLabelName (Arg)) ) { + if (Label == 0 && (OPC->OPC != OP65_JMP || IsLabel)) { /* Generate a new label */ - Label = CS_NewCodeLabel (S, Arg, Hash); + Label = CS_NewCodeLabel (S, ArgBase, Hash); + } + + if (Label != 0) { + /* Assign the jump */ + CL_AddRef (Label, E); } } - /* We do now have the addressing mode in AM. Allocate a new CodeEntry - ** structure and initialize it. - */ - E = NewCodeEntry (OPC->OPC, AM, Arg, Label, LI); - /* Return the new code entry */ return E; } @@ -1084,8 +1098,13 @@ void CS_MoveLabelRef (CodeSeg* S, struct CodeEntry* E, CodeLabel* L) /* Be sure that code entry references a label */ PRECONDITION (OldLabel != 0); - /* Remove the reference to our label */ - CS_RemoveLabelRef (S, E); + /* Delete the entry from the label */ + CollDeleteItem (&OldLabel->JumpFrom, E); + + /* If there are no more references, delete the label */ + if (CollCount (&OldLabel->JumpFrom) == 0) { + CS_DelLabel (S, OldLabel); + } /* Use the new label */ CL_AddRef (L, E); From 5f8d1630458f76f17862ed1fff6a30a635e93218 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 1 Apr 2021 18:46:00 +0800 Subject: [PATCH 0790/2710] Moved one test case for #1209. --- test/{misc => val}/bug1209-ind-goto-rev.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/{misc => val}/bug1209-ind-goto-rev.c (100%) diff --git a/test/misc/bug1209-ind-goto-rev.c b/test/val/bug1209-ind-goto-rev.c similarity index 100% rename from test/misc/bug1209-ind-goto-rev.c rename to test/val/bug1209-ind-goto-rev.c From eb1cf750f285dffd3d3b6de227482e69f1b79c01 Mon Sep 17 00:00:00 2001 From: Dirk Lehmann <develop@dj-l.de> Date: Mon, 12 Apr 2021 17:05:31 +0200 Subject: [PATCH 0791/2710] -W-unreachable-code option added, alphabetic order of --list-warnings --- doc/cc65.sgml | 2 ++ src/cc65/error.c | 6 ++++-- src/cc65/error.h | 3 ++- src/cc65/stmt.c | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 24f4422f4..240c2bc09 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -555,6 +555,8 @@ Here is a description of all the command line options: Warn when passing structs by value. <tag><tt/unknown-pragma/</tag> Warn about #pragmas that aren't recognized by cc65. + <tag><tt/unreachable-code/</tag> + Warn about unreachable code in cases of comparing constants, etc. <tag><tt/unused-label/</tag> Warn about unused labels. <tag><tt/unused-param/</tag> diff --git a/src/cc65/error.c b/src/cc65/error.c index ec665b319..0118d50b8 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -71,12 +71,13 @@ IntStack WarnNoEffect = INTSTACK(1); /* - statements without an effect */ IntStack WarnPointerSign = INTSTACK(1); /* - pointer conversion to pointer differing in signedness */ IntStack WarnPointerTypes = INTSTACK(1); /* - pointer conversion to incompatible pointer type */ IntStack WarnRemapZero = INTSTACK(1); /* - remapping character code zero */ +IntStack WarnReturnType = INTSTACK(1); /* - control reaches end of non-void function */ IntStack WarnStructParam = INTSTACK(0); /* - structs passed by val */ IntStack WarnUnknownPragma = INTSTACK(1); /* - unknown #pragmas */ +IntStack WarnUnreachableCode= INTSTACK(1); /* - unreachable code */ IntStack WarnUnusedLabel = INTSTACK(1); /* - unused labels */ IntStack WarnUnusedParam = INTSTACK(1); /* - unused parameters */ IntStack WarnUnusedVar = INTSTACK(1); /* - unused variables */ -IntStack WarnReturnType = INTSTACK(1); /* - control reaches end of non-void function */ /* Map the name of a warning to the intstack that holds its state */ typedef struct WarnMapEntry WarnMapEntry; @@ -92,12 +93,13 @@ static WarnMapEntry WarnMap[] = { { &WarnPointerSign, "pointer-sign" }, { &WarnPointerTypes, "pointer-types" }, { &WarnRemapZero, "remap-zero" }, + { &WarnReturnType, "return-type" }, { &WarnStructParam, "struct-param" }, { &WarnUnknownPragma, "unknown-pragma" }, + { &WarnUnreachableCode, "unreachable-code" }, { &WarnUnusedLabel, "unused-label" }, { &WarnUnusedParam, "unused-param" }, { &WarnUnusedVar, "unused-var" }, - { &WarnReturnType, "return-type" }, }; Collection DiagnosticStrBufs; diff --git a/src/cc65/error.h b/src/cc65/error.h index a7592b366..31c46f513 100644 --- a/src/cc65/error.h +++ b/src/cc65/error.h @@ -68,12 +68,13 @@ extern IntStack WarnPointerSign; /* - pointer conversion to pointer diffe extern IntStack WarnPointerTypes; /* - pointer conversion to incompatible pointer type */ extern IntStack WarnNoEffect; /* - statements without an effect */ extern IntStack WarnRemapZero; /* - remapping character code zero */ +extern IntStack WarnReturnType; /* - control reaches end of non-void function */ extern IntStack WarnStructParam; /* - structs passed by val */ extern IntStack WarnUnknownPragma; /* - unknown #pragmas */ +extern IntStack WarnUnreachableCode; /* - unreachable code */ extern IntStack WarnUnusedLabel; /* - unused labels */ extern IntStack WarnUnusedParam; /* - unused parameters */ extern IntStack WarnUnusedVar; /* - unused variables */ -extern IntStack WarnReturnType; /* - control reaches end of non-void function */ /* Forward */ struct StrBuf; diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index 9890c5467..ccb113978 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -187,7 +187,7 @@ static int IfStatement (void) /* If the if expression was always true, the code in the else branch ** is never executed. Output a warning if this is the case. */ - if (TestResult == TESTEXPR_TRUE) { + if (TestResult == TESTEXPR_TRUE && IS_Get (&WarnUnreachableCode)) { Warning ("Unreachable code"); } From e9545d68ee5208b7ece65bf08e260603bd9a9894 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 17 Apr 2021 11:43:03 +0800 Subject: [PATCH 0792/2710] Minor clean-ups and typo fixes. --- src/cc65/assignment.c | 15 --------------- src/cc65/expr.c | 9 +-------- src/cc65/expr.h | 9 ++++++++- src/cc65/swstmt.c | 2 +- 4 files changed, 10 insertions(+), 25 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index e6d1e4526..d565551ea 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -49,21 +49,6 @@ -/*****************************************************************************/ -/* Data */ -/*****************************************************************************/ - - - -/* Map a generator function and its attributes to a token */ -typedef struct GenDesc { - token_t Tok; /* Token to map to */ - unsigned Flags; /* Flags for generator function */ - void (*Func) (unsigned, unsigned long); /* Generator func */ -} GenDesc; - - - /*****************************************************************************/ /* Code */ /*****************************************************************************/ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 0275e61a3..dc45b108d 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -48,13 +48,6 @@ -/* Map a generator function and its attributes to a token */ -typedef struct GenDesc { - token_t Tok; /* Token to map to */ - unsigned Flags; /* Flags for generator function */ - void (*Func) (unsigned, unsigned long); /* Generator func */ -} GenDesc; - /* Descriptors for the operations */ static GenDesc GenPASGN = { TOK_PLUS_ASSIGN, GEN_NOPUSH, g_add }; static GenDesc GenSASGN = { TOK_MINUS_ASSIGN, GEN_NOPUSH, g_sub }; @@ -243,7 +236,7 @@ static const GenDesc* FindGen (token_t Tok, const GenDesc* Table) /* Find a token in a generator table */ { while (Table->Tok != TOK_INVALID) { - if (Table->Tok == Tok) { + if ((token_t)Table->Tok == Tok) { return Table; } ++Table; diff --git a/src/cc65/expr.h b/src/cc65/expr.h index 841edcb62..abdf8ab0d 100644 --- a/src/cc65/expr.h +++ b/src/cc65/expr.h @@ -26,13 +26,20 @@ #define SQP_KEEP_NONE 0x00 #define SQP_KEEP_TEST 0x01U #define SQP_KEEP_EAX 0x02U -#define SQP_KEEP_EXPR 0x03U /* SQP_KEEP_TEST | SQP_KEEP_EAX */ +#define SQP_KEEP_EXPR 0x03U /* SQP_KEEP_TEST | SQP_KEEP_EAX */ /* Generator attributes */ #define GEN_NOPUSH 0x01 /* Don't push lhs */ #define GEN_COMM 0x02 /* Operator is commutative */ #define GEN_NOFUNC 0x04 /* Not allowed for function pointers */ +/* Map a generator function and its attributes to a token */ +typedef struct GenDesc { + long Tok; /* Token to map to */ + unsigned Flags; /* Flags for generator function */ + void (*Func) (unsigned, unsigned long); /* Generator func */ +} GenDesc; + /*****************************************************************************/ diff --git a/src/cc65/swstmt.c b/src/cc65/swstmt.c index ee0bd1a85..00555ffc3 100644 --- a/src/cc65/swstmt.c +++ b/src/cc65/swstmt.c @@ -206,7 +206,7 @@ void SwitchStatement (void) void CaseLabel (void) -/* Handle a case sabel */ +/* Handle a case label */ { ExprDesc CaseExpr; /* Case label expression */ long Val; /* Case label value */ From 6bb1b6953f77bcf07e337ccd988b562a9cd611f3 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 17 Apr 2021 01:59:09 -0400 Subject: [PATCH 0793/2710] Documented the options to control cc65's warnings about induced pointer type changes. --- doc/cc65.sgml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 240c2bc09..dc754cb31 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -546,6 +546,12 @@ Here is a description of all the command line options: Treat all warnings as errors. <tag><tt/no-effect/</tag> Warn about statements that don't have an effect. + <tag><tt/pointer-sign/</tag> + Warn if a pointer assignment changes the signedness of the target + of a pointer value, and the new signedness wasn't cast explicitly. + <tag><tt/pointer-types/</tag> + Warn if a pointer assignment changes the type of the target + of a pointer value, and the new type wasn't cast explicitly. <tag><tt/remap-zero/</tag> Warn about a <tt/<ref id="pragma-charmap" name="#pragma charmap()">/ that changes a character's code number from/to 0x00. From 6e61093e7934098959e846758c0bec132fbe8d10 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 15 Apr 2021 21:38:30 +0800 Subject: [PATCH 0794/2710] Fixed pointer subtraction in certain very rare cases. --- src/cc65/expr.c | 50 ++++++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 74524c47a..b0ebbf191 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3250,6 +3250,20 @@ static void parsesub (ExprDesc* Expr) /* Get the rhs type */ rhst = Expr2.Type; + if (IsClassPtr (lhst)) { + /* We'll have to scale the result */ + rscale = PSizeOf (lhst); + /* We cannot scale by 0-size or unknown-size */ + if (rscale == 0 && (IsClassPtr (rhst) || IsClassInt (rhst))) { + TypeCompatibilityDiagnostic (lhst, rhst, + 1, "Invalid pointer types in subtraction: '%s' and '%s'"); + /* Avoid further errors */ + rscale = 1; + } + /* Generate code for pointer subtraction */ + flags = CF_PTR; + } + /* We can only do constant expressions for: ** - integer subtraction: ** - numeric - numeric @@ -3266,24 +3280,14 @@ static void parsesub (ExprDesc* Expr) */ if (IsClassPtr (lhst) && IsClassPtr (rhst)) { - /* Pointer diff */ - if (TypeCmp (lhst, rhst).C >= TC_STRICT_COMPATIBLE) { - /* We'll have to scale the result */ - rscale = PSizeOf (lhst); - /* We cannot scale by 0-size or unknown-size */ - if (rscale == 0) { - TypeCompatibilityDiagnostic (lhst, rhst, - 1, "Invalid pointer types in subtraction: '%s' and '%s'"); - /* Avoid further errors */ - rscale = 1; - } - } else { + /* Pointer Diff. We've got the scale factor and flags above */ + typecmp_t Cmp = TypeCmp (lhst, rhst); + if (Cmp.C < TC_STRICT_COMPATIBLE) { TypeCompatibilityDiagnostic (lhst, rhst, 1, "Incompatible pointer types in subtraction: '%s' and '%s'"); } /* Operate on pointers, result type is an integer */ - flags = CF_PTR; Expr->Type = type_int; /* Check for a constant rhs expression */ @@ -3338,10 +3342,7 @@ static void parsesub (ExprDesc* Expr) /* Both sides are constant. Check for pointer arithmetic */ if (IsClassPtr (lhst) && IsClassInt (rhst)) { - /* Left is pointer, right is int, must scale rhs */ - rscale = CheckedPSizeOf (lhst); - /* Operate on pointers, result type is a pointer */ - flags = CF_PTR; + /* Pointer subtraction. We've got the scale factor and flags above */ } else if (IsClassInt (lhst) && IsClassInt (rhst)) { /* Integer subtraction. We'll adjust the types later */ } else { @@ -3383,7 +3384,7 @@ static void parsesub (ExprDesc* Expr) flags = typeadjust (Expr, &Expr2, 1); } /* Do the subtraction */ - g_dec (flags | CF_CONST, Expr2.IVal); + g_dec (flags | CF_CONST, Expr2.IVal * rscale); } else { if (IsClassInt (lhst)) { /* Adjust the types */ @@ -3391,6 +3392,7 @@ static void parsesub (ExprDesc* Expr) } /* Load rhs into the primary */ LoadExpr (CF_NONE, &Expr2); + g_scale (TypeOf (rhst), rscale); /* Generate code for the sub (the & is a hack here) */ g_sub (flags & ~CF_CONST, 0); } @@ -3402,10 +3404,7 @@ static void parsesub (ExprDesc* Expr) /* Left hand side is not constant, right hand side is */ if (IsClassPtr (lhst) && IsClassInt (rhst)) { - /* Left is pointer, right is int, must scale rhs */ - Expr2.IVal *= CheckedPSizeOf (lhst); - /* Operate on pointers, result type is a pointer */ - flags = CF_PTR; + /* Pointer subtraction. We've got the scale factor and flags above */ } else if (IsClassInt (lhst) && IsClassInt (rhst)) { /* Integer subtraction. We'll adjust the types later */ } else { @@ -3422,7 +3421,7 @@ static void parsesub (ExprDesc* Expr) flags = typeadjust (Expr, &Expr2, 1); } /* Do the subtraction */ - g_dec (flags | CF_CONST, Expr2.IVal); + g_dec (flags | CF_CONST, Expr2.IVal * rscale); } else { if (IsClassInt (lhst)) { /* Adjust the types */ @@ -3430,6 +3429,7 @@ static void parsesub (ExprDesc* Expr) } /* Load rhs into the primary */ LoadExpr (CF_NONE, &Expr2); + g_scale (TypeOf (rhst), rscale); /* Generate code for the sub (the & is a hack here) */ g_sub (flags & ~CF_CONST, 0); } @@ -3449,9 +3449,7 @@ static void parsesub (ExprDesc* Expr) /* Check for pointer arithmetic */ if (IsClassPtr (lhst) && IsClassInt (rhst)) { /* Left is pointer, right is int, must scale rhs */ - g_scale (CF_INT, CheckedPSizeOf (lhst)); - /* Operate on pointers, result type is a pointer */ - flags = CF_PTR; + g_scale (CF_INT, rscale); } else if (IsClassInt (lhst) && IsClassInt (rhst)) { /* Adjust operand types */ flags = typeadjust (Expr, &Expr2, 0); From ffc30c0c6ea220d8adaedcdcc9517436fdb98f86 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 18 Apr 2021 01:39:44 -0400 Subject: [PATCH 0795/2710] Added RAM_BANK and ROM_BANK macro definitions to cx16.h header. --- include/cx16.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/cx16.h b/include/cx16.h index f3d02bd28..179021e84 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -278,6 +278,9 @@ struct __vera { #define VIA1 (*(volatile struct __6522 *)0x9F60) #define VIA2 (*(volatile struct __6522 *)0x9F70) +#define RAM_BANK (VIA1.pra) +#define ROM_BANK (VIA1.prb) + /* A structure with the x16emu's settings registers */ struct __emul { unsigned char debug; /* Boolean: debugging enabled */ @@ -295,7 +298,7 @@ struct __emul { #define EMULATOR (*(volatile struct __emul *)0x9FB0) /* An array window into the half Mebibyte or two Mebibytes of banked RAM */ -#define BANK_RAM ((unsigned char[0x2000])0xA000) +#define BANK_RAM ((unsigned char *)0xA000) From c915b5d7f3bc5bc66e481001de240aae408acd6d Mon Sep 17 00:00:00 2001 From: Marco Aurelio da Costa <costa@gamic.com> Date: Fri, 16 Apr 2021 14:42:16 -0300 Subject: [PATCH 0796/2710] Implemented charmap stack New commands: .PUSHCHARMAP: will push the current charmap state into an internal stack .POPCHARMAP: will restore the current charmap to the last pushed charmap Details: The push and pop facilities are implemented directly inside the tgttrans.h, to facilitate its reuse on the C compiler. --- src/ca65/pseudo.c | 28 ++++++++++++++++++++++ src/ca65/scanner.c | 2 ++ src/ca65/token.h | 2 ++ src/common/tgttrans.c | 56 +++++++++++++++++++++++++++++++++++++++++++ src/common/tgttrans.h | 13 ++++++++++ 5 files changed, 101 insertions(+) diff --git a/src/ca65/pseudo.c b/src/ca65/pseudo.c index 26d01cbf1..df0482a5a 100644 --- a/src/ca65/pseudo.c +++ b/src/ca65/pseudo.c @@ -1568,6 +1568,19 @@ static void DoPageLength (void) +static void DoPopCharmap (void) +/* Restore a charmap */ +{ + if (TgtTranslateStackIsEmpty ()) { + ErrorSkip ("Charmap stack is empty"); + return; + } + + TgtTranslatePop (); +} + + + static void DoPopCPU (void) /* Pop an old CPU setting from the CPU stack */ { @@ -1657,6 +1670,16 @@ static void DoPSC02 (void) +static void DoPushCharmap (void) +/* Save the current charmap */ +{ + if (!TgtTranslatePush ()) { + ErrorSkip ("Charmap stack overflow"); + } +} + + + static void DoPushCPU (void) /* Push the current CPU setting onto the CPU stack */ { @@ -2101,10 +2124,12 @@ static CtrlDesc CtrlCmdTab [] = { { ccNone, DoUnexpected }, /* .PARAMCOUNT */ { ccNone, DoPC02 }, { ccNone, DoPDTV }, + { ccNone, DoPopCharmap }, { ccNone, DoPopCPU }, { ccNone, DoPopSeg }, { ccNone, DoProc }, { ccNone, DoPSC02 }, + { ccNone, DoPushCharmap }, { ccNone, DoPushCPU }, { ccNone, DoPushSeg }, { ccNone, DoUnexpected }, /* .REFERENCED */ @@ -2183,4 +2208,7 @@ void CheckPseudo (void) if (!IS_IsEmpty (&CPUStack)) { Warning (1, "CPU stack is not empty"); } + if (!TgtTranslateStackIsEmpty ()) { + Warning (1, "Charmap stack is not empty"); + } } diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c index fb9905809..0452bb368 100644 --- a/src/ca65/scanner.c +++ b/src/ca65/scanner.c @@ -260,10 +260,12 @@ struct DotKeyword { { ".PARAMCOUNT", TOK_PARAMCOUNT }, { ".PC02", TOK_PC02 }, { ".PDTV", TOK_PDTV }, + { ".POPCHARMAP", TOK_POPCHARMAP }, { ".POPCPU", TOK_POPCPU }, { ".POPSEG", TOK_POPSEG }, { ".PROC", TOK_PROC }, { ".PSC02", TOK_PSC02 }, + { ".PUSHCHARMAP", TOK_PUSHCHARMAP }, { ".PUSHCPU", TOK_PUSHCPU }, { ".PUSHSEG", TOK_PUSHSEG }, { ".REF", TOK_REFERENCED }, diff --git a/src/ca65/token.h b/src/ca65/token.h index ab36028fd..a94254bfd 100644 --- a/src/ca65/token.h +++ b/src/ca65/token.h @@ -231,10 +231,12 @@ typedef enum token_t { TOK_PARAMCOUNT, TOK_PC02, TOK_PDTV, + TOK_POPCHARMAP, TOK_POPCPU, TOK_POPSEG, TOK_PROC, TOK_PSC02, + TOK_PUSHCHARMAP, TOK_PUSHCPU, TOK_PUSHSEG, TOK_REFERENCED, diff --git a/src/common/tgttrans.c b/src/common/tgttrans.c index bd2056505..af5bdf725 100644 --- a/src/common/tgttrans.c +++ b/src/common/tgttrans.c @@ -39,6 +39,8 @@ #include "check.h" #include "target.h" #include "tgttrans.h" +#include "coll.h" +#include "xmalloc.h" @@ -68,6 +70,9 @@ static unsigned char Tab[256] = { 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF, }; +#define MAX_CHARMAP_STACK 16 +static Collection CharmapStack = STATIC_COLLECTION_INITIALIZER; + /*****************************************************************************/ @@ -76,6 +81,8 @@ static unsigned char Tab[256] = { + + void TgtTranslateInit (void) /* Initialize the translation tables */ { @@ -127,3 +134,52 @@ void TgtTranslateSet (unsigned Index, unsigned char C) CHECK (Index < sizeof (Tab)); Tab[Index] = C; } + + + +int TgtTranslatePush (void) +/* Pushes the current translation table to the internal stack +** Returns 1 on success, 0 on stack full +*/ +{ + unsigned char* TempTab; + + if (CollCount (&CharmapStack) >= MAX_CHARMAP_STACK) { + return 0; + } + + TempTab = xmalloc (sizeof (Tab)); + memcpy (TempTab, Tab, sizeof (Tab)); + + CollAppend (&CharmapStack, TempTab); + return 1; +} + + + +int TgtTranslatePop (void) +/* Pops a translation table from the internal stack into the current table +** Returns 1 on success, 0 on stack empty +*/ +{ + unsigned char* TempTab; + + if (CollCount (&CharmapStack) == 0) { + return 0; + } + + TempTab = CollPop (&CharmapStack); + + memcpy (Tab, TempTab, sizeof (Tab)); + + xfree (TempTab); + return 1; +} + + + +int TgtTranslateStackIsEmpty (void) +/* Returns 1 if the internal stack is empty */ +{ + return CollCount (&CharmapStack) == 0; +} diff --git a/src/common/tgttrans.h b/src/common/tgttrans.h index 46981ec0f..a86d126db 100644 --- a/src/common/tgttrans.h +++ b/src/common/tgttrans.h @@ -70,6 +70,19 @@ void TgtTranslateStrBuf (StrBuf* Buf); void TgtTranslateSet (unsigned Index, unsigned char C); /* Set the translation code for the given character */ +int TgtTranslatePush (void); +/* Pushes the current translation table to the internal stack +** Returns 1 on success, 0 on stack full +*/ + +int TgtTranslatePop (void); +/* Pops a translation table from the internal stack into the current table +** Returns 1 on success, 0 on stack empty +*/ + +int TgtTranslateStackIsEmpty (void); +/* Returns 1 if the internal stack is empty */ + /* End of tgttrans.h */ From 83ee928fb155c53d32ac532d959d6e17bbfb945b Mon Sep 17 00:00:00 2001 From: Marco Aurelio da Costa <costa@gamic.com> Date: Sun, 18 Apr 2021 12:52:26 -0300 Subject: [PATCH 0797/2710] mc: Formatting, remove stray lines --- src/common/tgttrans.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/common/tgttrans.c b/src/common/tgttrans.c index af5bdf725..3310eab81 100644 --- a/src/common/tgttrans.c +++ b/src/common/tgttrans.c @@ -81,8 +81,6 @@ static Collection CharmapStack = STATIC_COLLECTION_INITIALIZER; - - void TgtTranslateInit (void) /* Initialize the translation tables */ { From 1993d5c091d85af22fe5c7fd5ac13599ce1cd90b Mon Sep 17 00:00:00 2001 From: Marco Aurelio da Costa <costa@gamic.com> Date: Sun, 18 Apr 2021 14:18:39 -0300 Subject: [PATCH 0798/2710] mc: Documentation for .PUSHCHARMAP/.POPCHARMAP --- doc/ca65.sgml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index cebdca12e..ebd6c7135 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -3601,6 +3601,21 @@ Here's a list of all control commands and a description, what they do: See: <tt><ref id=".P02" name=".P02"></tt> +<sect1><tt>.POPCHARMAP</tt><label id=".POPCHARMAP"><p> + + Pop the last character mapping from the stack, and activate it. + + This command will switch back to the character mapping that was last pushed onto the + character mapping stack using the <tt><ref id=".PUSHCHARMAP" name=".PUSHCHARMAP"></tt> + command, and remove this entry from the stack. + + The assembler will print an error message if the mappting stack is empty when + this command is issued. + + See: <tt><ref id=".CHARMAP" name=".CHARMAP"></tt>, <tt><ref id=".PUSHCHARMAP" + name=".PUSHCHARMAP"></tt> + + <sect1><tt>.POPCPU</tt><label id=".POPCPU"><p> Pop the last CPU setting from the stack, and activate it. @@ -3675,6 +3690,22 @@ Here's a list of all control commands and a description, what they do: <tt><ref id=".P4510" name=".P4510"></tt> +<sect1><tt>.PUSHCHARMAP</tt><label id=".PUSHCHARMAP"><p> + + Push the currently active character mapping onto a stack. The stack has a size of 16 + entries. + + <tt/.PUSHCHARMAP/ allows together with <tt><ref id=".POPCHARMAP" + name=".POPCHARMAP"></tt> to switch to another character mapping and to restore the old + characther mapping later, without knowledge of the current mapping. + + The assembler will print an error message if the character mapping stack is already full, + when this command is issued. + + See: <tt><ref id=".CHARMAP" name=".CHARMAP"></tt>, <tt><ref id=".POPCHARMAP" + name=".POPCHARMAP"></tt> + + <sect1><tt>.PUSHCPU</tt><label id=".PUSHCPU"><p> Push the currently active CPU onto a stack. The stack has a size of 8 From f7613b529c389808ffc49f77ccb21630d4912072 Mon Sep 17 00:00:00 2001 From: Marco Aurelio da Costa <costa@gamic.com> Date: Sun, 18 Apr 2021 15:16:24 -0300 Subject: [PATCH 0799/2710] mc: Added default charmap include files for assembler --- asminc/ascii_charmap.inc | 291 +++++++++++++++++++++++++++++ asminc/atari_atascii_charmap.inc | 303 ++++++++++++++++++++++++++++++ asminc/atari_screen_charmap.inc | 305 ++++++++++++++++++++++++++++++ asminc/cbm_petscii_charmap.inc | 293 +++++++++++++++++++++++++++++ asminc/cbm_screen_charmap.inc | 307 +++++++++++++++++++++++++++++++ 5 files changed, 1499 insertions(+) create mode 100644 asminc/ascii_charmap.inc create mode 100644 asminc/atari_atascii_charmap.inc create mode 100644 asminc/atari_screen_charmap.inc create mode 100644 asminc/cbm_petscii_charmap.inc create mode 100644 asminc/cbm_screen_charmap.inc diff --git a/asminc/ascii_charmap.inc b/asminc/ascii_charmap.inc new file mode 100644 index 000000000..57728b0d4 --- /dev/null +++ b/asminc/ascii_charmap.inc @@ -0,0 +1,291 @@ +;/*****************************************************************************/ +;/* */ +;/* ascii_charmap.inc */ +;/* */ +;/* No translations, encodings are stored as they were typed in the host. */ +;/* */ +;/* */ +;/* 2019-09-07, Greg King */ +;/* */ +;/* This software is provided "as-is", without any expressed or implied */ +;/* warranty. In no event will the authors be held liable for any damages */ +;/* arising from the use of this software. */ +;/* */ +;/* Permission is granted to anyone to use this software for any purpose, */ +;/* including commercial applications, and to alter it and redistribute it */ +;/* freely, subject to the following restrictions: */ +;/* */ +;/* 1. The origin of this software must not be misrepresented; you must not */ +;/* claim that you wrote the original software. If you use this software */ +;/* in a product, an acknowledgment in the product documentation would be */ +;/* appreciated, but is not required. */ +;/* 2. Altered source versions must be plainly marked as such, and must not */ +;/* be misrepresented as being the original software. */ +;/* 3. This notice must not be removed or altered from any source */ +;/* distribution. */ +;/* */ +;/*****************************************************************************/ + +;/* No include guard here. Each charmap header +;** may be included many times in a source file. +;*/ + +;/* ASCII */ +.charmap $00, $00 +.charmap $01, $01 +.charmap $02, $02 +.charmap $03, $03 +.charmap $04, $04 +.charmap $05, $05 +.charmap $06, $06 +.charmap $07, $07 +.charmap $08, $08 +.charmap $09, $09 +.charmap $0A, $0A +.charmap $0B, $0B +.charmap $0C, $0C +.charmap $0D, $0D +.charmap $0E, $0E +.charmap $0F, $0F +.charmap $10, $10 +.charmap $11, $11 +.charmap $12, $12 +.charmap $13, $13 +.charmap $14, $14 +.charmap $15, $15 +.charmap $16, $16 +.charmap $17, $17 +.charmap $18, $18 +.charmap $19, $19 +.charmap $1A, $1A +.charmap $1B, $1B +.charmap $1C, $1C +.charmap $1D, $1D +.charmap $1E, $1E +.charmap $1F, $1F +.charmap $20, $20 +.charmap $21, $21 +.charmap $22, $22 +.charmap $23, $23 +.charmap $24, $24 +.charmap $25, $25 +.charmap $26, $26 +.charmap $27, $27 +.charmap $28, $28 +.charmap $29, $29 +.charmap $2A, $2A +.charmap $2B, $2B +.charmap $2C, $2C +.charmap $2D, $2D +.charmap $2E, $2E +.charmap $2F, $2F +.charmap $30, $30 +.charmap $31, $31 +.charmap $32, $32 +.charmap $33, $33 +.charmap $34, $34 +.charmap $35, $35 +.charmap $36, $36 +.charmap $37, $37 +.charmap $38, $38 +.charmap $39, $39 +.charmap $3A, $3A +.charmap $3B, $3B +.charmap $3C, $3C +.charmap $3D, $3D +.charmap $3E, $3E +.charmap $3F, $3F +.charmap $40, $40 +.charmap $41, $41 +.charmap $42, $42 +.charmap $43, $43 +.charmap $44, $44 +.charmap $45, $45 +.charmap $46, $46 +.charmap $47, $47 +.charmap $48, $48 +.charmap $49, $49 +.charmap $4A, $4A +.charmap $4B, $4B +.charmap $4C, $4C +.charmap $4D, $4D +.charmap $4E, $4E +.charmap $4F, $4F +.charmap $50, $50 +.charmap $51, $51 +.charmap $52, $52 +.charmap $53, $53 +.charmap $54, $54 +.charmap $55, $55 +.charmap $56, $56 +.charmap $57, $57 +.charmap $58, $58 +.charmap $59, $59 +.charmap $5A, $5A +.charmap $5B, $5B +.charmap $5C, $5C +.charmap $5D, $5D +.charmap $5E, $5E +.charmap $5F, $5F +.charmap $60, $60 +.charmap $61, $61 +.charmap $62, $62 +.charmap $63, $63 +.charmap $64, $64 +.charmap $65, $65 +.charmap $66, $66 +.charmap $67, $67 +.charmap $68, $68 +.charmap $69, $69 +.charmap $6A, $6A +.charmap $6B, $6B +.charmap $6C, $6C +.charmap $6D, $6D +.charmap $6E, $6E +.charmap $6F, $6F +.charmap $70, $70 +.charmap $71, $71 +.charmap $72, $72 +.charmap $73, $73 +.charmap $74, $74 +.charmap $75, $75 +.charmap $76, $76 +.charmap $77, $77 +.charmap $78, $78 +.charmap $79, $79 +.charmap $7A, $7A +.charmap $7B, $7B +.charmap $7C, $7C +.charmap $7D, $7D +.charmap $7E, $7E +.charmap $7F, $7F + +;/* beyond ASCII */ +.charmap $80, $80 +.charmap $81, $81 +.charmap $82, $82 +.charmap $83, $83 +.charmap $84, $84 +.charmap $85, $85 +.charmap $86, $86 +.charmap $87, $87 +.charmap $88, $88 +.charmap $89, $89 +.charmap $8A, $8A +.charmap $8B, $8B +.charmap $8C, $8C +.charmap $8D, $8D +.charmap $8E, $8E +.charmap $8F, $8F +.charmap $90, $90 +.charmap $91, $91 +.charmap $92, $92 +.charmap $93, $93 +.charmap $94, $94 +.charmap $95, $95 +.charmap $96, $96 +.charmap $97, $97 +.charmap $98, $98 +.charmap $99, $99 +.charmap $9A, $9A +.charmap $9B, $9B +.charmap $9C, $9C +.charmap $9D, $9D +.charmap $9E, $9E +.charmap $9F, $9F +.charmap $A0, $A0 +.charmap $A1, $A1 +.charmap $A2, $A2 +.charmap $A3, $A3 +.charmap $A4, $A4 +.charmap $A5, $A5 +.charmap $A6, $A6 +.charmap $A7, $A7 +.charmap $A8, $A8 +.charmap $A9, $A9 +.charmap $AA, $AA +.charmap $AB, $AB +.charmap $AC, $AC +.charmap $AD, $AD +.charmap $AE, $AE +.charmap $AF, $AF +.charmap $B0, $B0 +.charmap $B1, $B1 +.charmap $B2, $B2 +.charmap $B3, $B3 +.charmap $B4, $B4 +.charmap $B5, $B5 +.charmap $B6, $B6 +.charmap $B7, $B7 +.charmap $B8, $B8 +.charmap $B9, $B9 +.charmap $BA, $BA +.charmap $BB, $BB +.charmap $BC, $BC +.charmap $BD, $BD +.charmap $BE, $BE +.charmap $BF, $BF +.charmap $C0, $C0 +.charmap $C1, $C1 +.charmap $C2, $C2 +.charmap $C3, $C3 +.charmap $C4, $C4 +.charmap $C5, $C5 +.charmap $C6, $C6 +.charmap $C7, $C7 +.charmap $C8, $C8 +.charmap $C9, $C9 +.charmap $CA, $CA +.charmap $CB, $CB +.charmap $CC, $CC +.charmap $CD, $CD +.charmap $CE, $CE +.charmap $CF, $CF +.charmap $D0, $D0 +.charmap $D1, $D1 +.charmap $D2, $D2 +.charmap $D3, $D3 +.charmap $D4, $D4 +.charmap $D5, $D5 +.charmap $D6, $D6 +.charmap $D7, $D7 +.charmap $D8, $D8 +.charmap $D9, $D9 +.charmap $DA, $DA +.charmap $DB, $DB +.charmap $DC, $DC +.charmap $DD, $DD +.charmap $DE, $DE +.charmap $DF, $DF +.charmap $E0, $E0 +.charmap $E1, $E1 +.charmap $E2, $E2 +.charmap $E3, $E3 +.charmap $E4, $E4 +.charmap $E5, $E5 +.charmap $E6, $E6 +.charmap $E7, $E7 +.charmap $E8, $E8 +.charmap $E9, $E9 +.charmap $EA, $EA +.charmap $EB, $EB +.charmap $EC, $EC +.charmap $ED, $ED +.charmap $EE, $EE +.charmap $EF, $EF +.charmap $F0, $F0 +.charmap $F1, $F1 +.charmap $F2, $F2 +.charmap $F3, $F3 +.charmap $F4, $F4 +.charmap $F5, $F5 +.charmap $F6, $F6 +.charmap $F7, $F7 +.charmap $F8, $F8 +.charmap $F9, $F9 +.charmap $FA, $FA +.charmap $FB, $FB +.charmap $FC, $FC +.charmap $FD, $FD +.charmap $FE, $FE +.charmap $FF, $FF diff --git a/asminc/atari_atascii_charmap.inc b/asminc/atari_atascii_charmap.inc new file mode 100644 index 000000000..8c3222dd6 --- /dev/null +++ b/asminc/atari_atascii_charmap.inc @@ -0,0 +1,303 @@ +;/*****************************************************************************/ +;/* */ +;/* atari_atascii_charmap.inc */ +;/* */ +;/* Atari system standard string mapping ISO-8859-1 -> AtASCII */ +;/* */ +;/* */ +;/* */ +;/* C 2016 Christian Krueger */ +;/* */ +;/* */ +;/* This software is provided 'as-is', without any expressed or implied */ +;/* warranty. In no event will the authors be held liable for any damages */ +;/* arising from the use of this software. */ +;/* */ +;/* Permission is granted to anyone to use this software for any purpose, */ +;/* including commercial applications, and to alter it and redistribute it */ +;/* freely, subject to the following restrictions: */ +;/* */ +;/* 1. The origin of this software must not be misrepresented; you must not */ +;/* claim that you wrote the original software. If you use this software */ +;/* in a product, an acknowledgment in the product documentation would be */ +;/* appreciated but is not required. */ +;/* 2. Altered source versions must be plainly marked as such, and must not */ +;/* be misrepresented as being the original software. */ +;/* 3. This notice may not be removed or altered from any source */ +;/* distribution. */ +;/* */ +;/*****************************************************************************/ + +;/* No include guard here! Multiple use in one file may be intentional. */ + +.charmap $00, $00 +.charmap $01, $01 +.charmap $02, $02 +.charmap $03, $03 +.charmap $04, $04 +.charmap $05, $05 +.charmap $06, $06 +.charmap $07, $FD +.charmap $08, $08 +.charmap $09, $7F +.charmap $0A, $9B +.charmap $0B, $0B +.charmap $0C, $7D +.charmap $0D, $0D +.charmap $0E, $0E +.charmap $0F, $0F + +.charmap $10, $10 +.charmap $11, $11 +.charmap $12, $12 +.charmap $13, $13 +.charmap $14, $14 +.charmap $15, $15 +.charmap $16, $16 +.charmap $17, $17 +.charmap $18, $18 +.charmap $19, $19 +.charmap $1A, $1A +.charmap $1B, $1B +.charmap $1C, $1C +.charmap $1D, $1D +.charmap $1E, $1E +.charmap $1F, $1F + +.charmap $20, $20 +.charmap $21, $21 +.charmap $22, $22 +.charmap $23, $23 +.charmap $24, $24 +.charmap $25, $25 +.charmap $26, $26 +.charmap $27, $27 +.charmap $28, $28 +.charmap $29, $29 +.charmap $2A, $2A +.charmap $2B, $2B +.charmap $2C, $2C +.charmap $2D, $2D +.charmap $2E, $2E +.charmap $2F, $2F + +.charmap $30, $30 +.charmap $31, $31 +.charmap $32, $32 +.charmap $33, $33 +.charmap $34, $34 +.charmap $35, $35 +.charmap $36, $36 +.charmap $37, $37 +.charmap $38, $38 +.charmap $39, $39 +.charmap $3A, $3A +.charmap $3B, $3B +.charmap $3C, $3C +.charmap $3D, $3D +.charmap $3E, $3E +.charmap $3F, $3F + +.charmap $40, $40 +.charmap $41, $41 +.charmap $42, $42 +.charmap $43, $43 +.charmap $44, $44 +.charmap $45, $45 +.charmap $46, $46 +.charmap $47, $47 +.charmap $48, $48 +.charmap $49, $49 +.charmap $4A, $4A +.charmap $4B, $4B +.charmap $4C, $4C +.charmap $4D, $4D +.charmap $4E, $4E +.charmap $4F, $4F + +.charmap $50, $50 +.charmap $51, $51 +.charmap $52, $52 +.charmap $53, $53 +.charmap $54, $54 +.charmap $55, $55 +.charmap $56, $56 +.charmap $57, $57 +.charmap $58, $58 +.charmap $59, $59 +.charmap $5A, $5A +.charmap $5B, $5B +.charmap $5C, $5C +.charmap $5D, $5D +.charmap $5E, $5E +.charmap $5F, $5F + +.charmap $60, $60 +.charmap $61, $61 +.charmap $62, $62 +.charmap $63, $63 +.charmap $64, $64 +.charmap $65, $65 +.charmap $66, $66 +.charmap $67, $67 +.charmap $68, $68 +.charmap $69, $69 +.charmap $6A, $6A +.charmap $6B, $6B +.charmap $6C, $6C +.charmap $6D, $6D +.charmap $6E, $6E +.charmap $6F, $6F + +.charmap $70, $70 +.charmap $71, $71 +.charmap $72, $72 +.charmap $73, $73 +.charmap $74, $74 +.charmap $75, $75 +.charmap $76, $76 +.charmap $77, $77 +.charmap $78, $78 +.charmap $79, $79 +.charmap $7A, $7A +.charmap $7B, $7B +.charmap $7C, $7C +.charmap $7D, $7D +.charmap $7E, $7E +.charmap $7F, $7F + +.charmap $80, $80 +.charmap $81, $81 +.charmap $82, $82 +.charmap $83, $83 +.charmap $84, $84 +.charmap $85, $85 +.charmap $86, $86 +.charmap $87, $87 +.charmap $88, $88 +.charmap $89, $89 +.charmap $8A, $8A +.charmap $8B, $8B +.charmap $8C, $8C +.charmap $8D, $8D +.charmap $8E, $8E +.charmap $8F, $8F + +.charmap $90, $90 +.charmap $91, $91 +.charmap $92, $92 +.charmap $93, $93 +.charmap $94, $94 +.charmap $95, $95 +.charmap $96, $96 +.charmap $97, $97 +.charmap $98, $98 +.charmap $99, $99 +.charmap $9A, $9A +.charmap $9B, $9B +.charmap $9C, $9C +.charmap $9D, $9D +.charmap $9E, $9E +.charmap $9F, $9F + +.charmap $A0, $A0 +.charmap $A1, $A1 +.charmap $A2, $A2 +.charmap $A3, $A3 +.charmap $A4, $A4 +.charmap $A5, $A5 +.charmap $A6, $A6 +.charmap $A7, $A7 +.charmap $A8, $A8 +.charmap $A9, $A9 +.charmap $AA, $AA +.charmap $AB, $AB +.charmap $AC, $AC +.charmap $AD, $AD +.charmap $AE, $AE +.charmap $AF, $AF + +.charmap $B0, $B0 +.charmap $B1, $B1 +.charmap $B2, $B2 +.charmap $B3, $B3 +.charmap $B4, $B4 +.charmap $B5, $B5 +.charmap $B6, $B6 +.charmap $B7, $B7 +.charmap $B8, $B8 +.charmap $B9, $B9 +.charmap $BA, $BA +.charmap $BB, $BB +.charmap $BC, $BC +.charmap $BD, $BD +.charmap $BE, $BE +.charmap $BF, $BF + +.charmap $C0, $C0 +.charmap $C1, $C1 +.charmap $C2, $C2 +.charmap $C3, $C3 +.charmap $C4, $C4 +.charmap $C5, $C5 +.charmap $C6, $C6 +.charmap $C7, $C7 +.charmap $C8, $C8 +.charmap $C9, $C9 +.charmap $CA, $CA +.charmap $CB, $CB +.charmap $CC, $CC +.charmap $CD, $CD +.charmap $CE, $CE +.charmap $CF, $CF + +.charmap $D0, $D0 +.charmap $D1, $D1 +.charmap $D2, $D2 +.charmap $D3, $D3 +.charmap $D4, $D4 +.charmap $D5, $D5 +.charmap $D6, $D6 +.charmap $D7, $D7 +.charmap $D8, $D8 +.charmap $D9, $D9 +.charmap $DA, $DA +.charmap $DB, $DB +.charmap $DC, $DC +.charmap $DD, $DD +.charmap $DE, $DE +.charmap $DF, $DF + +.charmap $E0, $E0 +.charmap $E1, $E1 +.charmap $E2, $E2 +.charmap $E3, $E3 +.charmap $E4, $E4 +.charmap $E5, $E5 +.charmap $E6, $E6 +.charmap $E7, $E7 +.charmap $E8, $E8 +.charmap $E9, $E9 +.charmap $EA, $EA +.charmap $EB, $EB +.charmap $EC, $EC +.charmap $ED, $ED +.charmap $EE, $EE +.charmap $EF, $EF + +.charmap $F0, $F0 +.charmap $F1, $F1 +.charmap $F2, $F2 +.charmap $F3, $F3 +.charmap $F4, $F4 +.charmap $F5, $F5 +.charmap $F6, $F6 +.charmap $F7, $F7 +.charmap $F8, $F8 +.charmap $F9, $F9 +.charmap $FA, $FA +.charmap $FB, $FB +.charmap $FC, $FC +.charmap $FD, $FD +.charmap $FE, $FE +.charmap $FF, $FF diff --git a/asminc/atari_screen_charmap.inc b/asminc/atari_screen_charmap.inc new file mode 100644 index 000000000..ca4f9e1d7 --- /dev/null +++ b/asminc/atari_screen_charmap.inc @@ -0,0 +1,305 @@ +;/*****************************************************************************/ +;/* */ +;/* atari_screen_charmap.inc */ +;/* */ +;/* Atari system internal string mapping ISO-8859-1 -> Internal/Screen-Code */ +;/* */ +;/* */ +;/* */ +;/* C 2016 Christian Krueger */ +;/* */ +;/* */ +;/* This software is provided 'as-is', without any expressed or implied */ +;/* warranty. In no event will the authors be held liable for any damages */ +;/* arising from the use of this software. */ +;/* */ +;/* Permission is granted to anyone to use this software for any purpose, */ +;/* including commercial applications, and to alter it and redistribute it */ +;/* freely, subject to the following restrictions: */ +;/* */ +;/* 1. The origin of this software must not be misrepresented; you must not */ +;/* claim that you wrote the original software. If you use this software */ +;/* in a product, an acknowledgment in the product documentation would be */ +;/* appreciated but is not required. */ +;/* 2. Altered source versions must be plainly marked as such, and must not */ +;/* be misrepresented as being the original software. */ +;/* 3. This notice may not be removed or altered from any source */ +;/* distribution. */ +;/* */ +;/*****************************************************************************/ + +;/* No include guard here! Multiple use in one file may be intentional. */ + +.charmap $00, $40 +.charmap $01, $41 +.charmap $02, $42 +.charmap $03, $43 +.charmap $04, $44 +.charmap $05, $45 +.charmap $06, $46 +.charmap $07, $FD +.charmap $08, $48 +.charmap $09, $7F +.charmap $0A, $DB +.charmap $0B, $4B +.charmap $0C, $7D +.charmap $0D, $4D +.charmap $0E, $4E +.charmap $0F, $4F + +.charmap $10, $50 +.charmap $11, $51 +.charmap $12, $52 +.charmap $13, $53 +.charmap $14, $54 +.charmap $15, $55 +.charmap $16, $56 +.charmap $17, $57 +.charmap $18, $58 +.charmap $19, $59 +.charmap $1A, $5A +.charmap $1B, $5B +.charmap $1C, $5C +.charmap $1D, $5D +.charmap $1E, $5E +.charmap $1F, $5F + +.charmap $20, $00 + +.charmap $21, $01 +.charmap $22, $02 +.charmap $23, $03 +.charmap $24, $04 +.charmap $25, $05 +.charmap $26, $06 +.charmap $27, $07 +.charmap $28, $08 +.charmap $29, $09 +.charmap $2A, $0A +.charmap $2B, $0B +.charmap $2C, $0C +.charmap $2D, $0D +.charmap $2E, $0E +.charmap $2F, $0F + +.charmap $30, $10 +.charmap $31, $11 +.charmap $32, $12 +.charmap $33, $13 +.charmap $34, $14 +.charmap $35, $15 +.charmap $36, $16 +.charmap $37, $17 +.charmap $38, $18 +.charmap $39, $19 +.charmap $3A, $1A +.charmap $3B, $1B +.charmap $3C, $1C +.charmap $3D, $1D +.charmap $3E, $1E +.charmap $3F, $1F + +.charmap $40, $20 +.charmap $41, $21 +.charmap $42, $22 +.charmap $43, $23 +.charmap $44, $24 +.charmap $45, $25 +.charmap $46, $26 +.charmap $47, $27 +.charmap $48, $28 +.charmap $49, $29 +.charmap $4A, $2A +.charmap $4B, $2B +.charmap $4C, $2C +.charmap $4D, $2D +.charmap $4E, $2E +.charmap $4F, $2F + +.charmap $50, $30 +.charmap $51, $31 +.charmap $52, $32 +.charmap $53, $33 +.charmap $54, $34 +.charmap $55, $35 +.charmap $56, $36 +.charmap $57, $37 +.charmap $58, $38 +.charmap $59, $39 +.charmap $5A, $3A +.charmap $5B, $3B +.charmap $5C, $3C +.charmap $5D, $3D +.charmap $5E, $3E +.charmap $5F, $3F + +.charmap $60, $60 +.charmap $61, $61 +.charmap $62, $62 +.charmap $63, $63 +.charmap $64, $64 +.charmap $65, $65 +.charmap $66, $66 +.charmap $67, $67 +.charmap $68, $68 +.charmap $69, $69 +.charmap $6A, $6A +.charmap $6B, $6B +.charmap $6C, $6C +.charmap $6D, $6D +.charmap $6E, $6E +.charmap $6F, $6F + +.charmap $70, $70 +.charmap $71, $71 +.charmap $72, $72 +.charmap $73, $73 +.charmap $74, $74 +.charmap $75, $75 +.charmap $76, $76 +.charmap $77, $77 +.charmap $78, $78 +.charmap $79, $79 +.charmap $7A, $7A +.charmap $7B, $7B +.charmap $7C, $7C +.charmap $7D, $7D +.charmap $7E, $7E +.charmap $7F, $7F + +.charmap $80, $C0 +.charmap $81, $C1 +.charmap $82, $C2 +.charmap $83, $C3 +.charmap $84, $C4 +.charmap $85, $C5 +.charmap $86, $C6 +.charmap $87, $C7 +.charmap $88, $C8 +.charmap $89, $C9 +.charmap $8A, $CA +.charmap $8B, $CB +.charmap $8C, $CC +.charmap $8D, $CD +.charmap $8E, $CE +.charmap $8F, $CF + +.charmap $90, $D0 +.charmap $91, $D1 +.charmap $92, $D2 +.charmap $93, $D3 +.charmap $94, $D4 +.charmap $95, $D5 +.charmap $96, $D6 +.charmap $97, $D7 +.charmap $98, $D8 +.charmap $99, $D9 +.charmap $9A, $DA +.charmap $9B, $DB +.charmap $9C, $DC +.charmap $9D, $DD +.charmap $9E, $DE +.charmap $9F, $DF + +.charmap $A0, $80 +.charmap $A1, $81 +.charmap $A2, $82 +.charmap $A3, $83 +.charmap $A4, $84 +.charmap $A5, $85 +.charmap $A6, $86 +.charmap $A7, $87 +.charmap $A8, $88 +.charmap $A9, $89 +.charmap $AA, $8A +.charmap $AB, $8B +.charmap $AC, $8C +.charmap $AD, $8D +.charmap $AE, $8E +.charmap $AF, $8F + +.charmap $B0, $90 +.charmap $B1, $91 +.charmap $B2, $92 +.charmap $B3, $93 +.charmap $B4, $94 +.charmap $B5, $95 +.charmap $B6, $96 +.charmap $B7, $97 +.charmap $B8, $98 +.charmap $B9, $99 +.charmap $BA, $9A +.charmap $BB, $9B +.charmap $BC, $9C +.charmap $BD, $9D +.charmap $BE, $9E +.charmap $BF, $9F + +.charmap $C0, $A0 +.charmap $C1, $A1 +.charmap $C2, $A2 +.charmap $C3, $A3 +.charmap $C4, $A4 +.charmap $C5, $A5 +.charmap $C6, $A6 +.charmap $C7, $A7 +.charmap $C8, $A8 +.charmap $C9, $A9 +.charmap $CA, $AA +.charmap $CB, $AB +.charmap $CC, $AC +.charmap $CD, $AD +.charmap $CE, $AE +.charmap $CF, $AF + +.charmap $D0, $B0 +.charmap $D1, $B1 +.charmap $D2, $B2 +.charmap $D3, $B3 +.charmap $D4, $B4 +.charmap $D5, $B5 +.charmap $D6, $B6 +.charmap $D7, $B7 +.charmap $D8, $B8 +.charmap $D9, $B9 +.charmap $DA, $BA +.charmap $DB, $BB +.charmap $DC, $BC +.charmap $DD, $BD +.charmap $DE, $BE +.charmap $DF, $BF + +.charmap $E0, $E0 +.charmap $E1, $E1 +.charmap $E2, $E2 +.charmap $E3, $E3 +.charmap $E4, $E4 +.charmap $E5, $E5 +.charmap $E6, $E6 +.charmap $E7, $E7 +.charmap $E8, $E8 +.charmap $E9, $E9 +.charmap $EA, $EA +.charmap $EB, $EB +.charmap $EC, $EC +.charmap $ED, $ED +.charmap $EE, $EE +.charmap $EF, $EF + +.charmap $F0, $F0 +.charmap $F1, $F1 +.charmap $F2, $F2 +.charmap $F3, $F3 +.charmap $F4, $F4 +.charmap $F5, $F5 +.charmap $F6, $F6 +.charmap $F7, $F7 +.charmap $F8, $F8 +.charmap $F9, $F9 +.charmap $FA, $FA +.charmap $FB, $FB +.charmap $FC, $FC +.charmap $FD, $FD +.charmap $FE, $FE +.charmap $FF, $FF + diff --git a/asminc/cbm_petscii_charmap.inc b/asminc/cbm_petscii_charmap.inc new file mode 100644 index 000000000..15fde0d8c --- /dev/null +++ b/asminc/cbm_petscii_charmap.inc @@ -0,0 +1,293 @@ +;/*****************************************************************************/ +;/* */ +;/* cbm_petscii_charmap.inc */ +;/* */ +;/* CBM system standard string mapping ISO-8859-1 -> PetSCII */ +;/* */ +;/* */ +;/* 2019-03-10, Greg King */ +;/* */ +;/* This software is provided "as-is", without any expressed or implied */ +;/* warranty. In no event will the authors be held liable for any damages */ +;/* arising from the use of this software. */ +;/* */ +;/* Permission is granted to anyone to use this software for any purpose, */ +;/* including commercial applications, and to alter it and redistribute it */ +;/* freely, subject to the following restrictions: */ +;/* */ +;/* 1. The origin of this software must not be misrepresented; you must not */ +;/* claim that you wrote the original software. If you use this software */ +;/* in a product, an acknowledgment in the product documentation would be */ +;/* appreciated, but is not required. */ +;/* 2. Altered source versions must be plainly marked as such, and must not */ +;/* be misrepresented as being the original software. */ +;/* 3. This notice must not be removed or altered from any source */ +;/* distribution. */ +;/* */ +;/*****************************************************************************/ + +;/* No include guard here! Multiple use in one file might be intentional. */ + +.charmap $00, $00 +.charmap $01, $01 +.charmap $02, $02 +.charmap $03, $03 +.charmap $04, $04 +.charmap $05, $05 +.charmap $06, $06 +.charmap $07, $07 +.charmap $08, $14 +.charmap $09, $09 +.charmap $0A, $0D +.charmap $0B, $11 +.charmap $0C, $93 +.charmap $0D, $0A +.charmap $0E, $0E +.charmap $0F, $0F +.charmap $10, $10 +.charmap $11, $0B +.charmap $12, $12 +.charmap $13, $13 +.charmap $14, $08 +.charmap $15, $15 +.charmap $16, $16 +.charmap $17, $17 +.charmap $18, $18 +.charmap $19, $19 +.charmap $1A, $1A +.charmap $1B, $1B +.charmap $1C, $1C +.charmap $1D, $1D +.charmap $1E, $1E +.charmap $1F, $1F + +.charmap $20, $20 +.charmap $21, $21 +.charmap $22, $22 +.charmap $23, $23 +.charmap $24, $24 +.charmap $25, $25 +.charmap $26, $26 +.charmap $27, $27 +.charmap $28, $28 +.charmap $29, $29 +.charmap $2A, $2A +.charmap $2B, $2B +.charmap $2C, $2C +.charmap $2D, $2D +.charmap $2E, $2E +.charmap $2F, $2F +.charmap $30, $30 +.charmap $31, $31 +.charmap $32, $32 +.charmap $33, $33 +.charmap $34, $34 +.charmap $35, $35 +.charmap $36, $36 +.charmap $37, $37 +.charmap $38, $38 +.charmap $39, $39 +.charmap $3A, $3A +.charmap $3B, $3B +.charmap $3C, $3C +.charmap $3D, $3D +.charmap $3E, $3E +.charmap $3F, $3F + +.charmap $40, $40 +.charmap $41, $C1 +.charmap $42, $C2 +.charmap $43, $C3 +.charmap $44, $C4 +.charmap $45, $C5 +.charmap $46, $C6 +.charmap $47, $C7 +.charmap $48, $C8 +.charmap $49, $C9 +.charmap $4A, $CA +.charmap $4B, $CB +.charmap $4C, $CC +.charmap $4D, $CD +.charmap $4E, $CE +.charmap $4F, $CF +.charmap $50, $D0 +.charmap $51, $D1 +.charmap $52, $D2 +.charmap $53, $D3 +.charmap $54, $D4 +.charmap $55, $D5 +.charmap $56, $D6 +.charmap $57, $D7 +.charmap $58, $D8 +.charmap $59, $D9 +.charmap $5A, $DA +.charmap $5B, $5B +.charmap $5C, $BF +.charmap $5D, $5D +.charmap $5E, $5E +.charmap $5F, $A4 + +.charmap $60, $AD +.charmap $61, $41 +.charmap $62, $42 +.charmap $63, $43 +.charmap $64, $44 +.charmap $65, $45 +.charmap $66, $46 +.charmap $67, $47 +.charmap $68, $48 +.charmap $69, $49 +.charmap $6A, $4A +.charmap $6B, $4B +.charmap $6C, $4C +.charmap $6D, $4D +.charmap $6E, $4E +.charmap $6F, $4F +.charmap $70, $50 +.charmap $71, $51 +.charmap $72, $52 +.charmap $73, $53 +.charmap $74, $54 +.charmap $75, $55 +.charmap $76, $56 +.charmap $77, $57 +.charmap $78, $58 +.charmap $79, $59 +.charmap $7A, $5A +.charmap $7B, $B3 +.charmap $7C, $DD +.charmap $7D, $AB +.charmap $7E, $B1 +.charmap $7F, $DF + +.charmap $80, $80 +.charmap $81, $81 +.charmap $82, $82 +.charmap $83, $83 +.charmap $84, $84 +.charmap $85, $85 +.charmap $86, $86 +.charmap $87, $87 +.charmap $88, $88 +.charmap $89, $89 +.charmap $8A, $8A +.charmap $8B, $8B +.charmap $8C, $8C +.charmap $8D, $8D +.charmap $8E, $8E +.charmap $8F, $8F +.charmap $90, $90 +.charmap $91, $91 +.charmap $92, $92 +.charmap $93, $0C +.charmap $94, $94 +.charmap $95, $95 +.charmap $96, $96 +.charmap $97, $97 +.charmap $98, $98 +.charmap $99, $99 +.charmap $9A, $9A +.charmap $9B, $9B +.charmap $9C, $9C +.charmap $9D, $9D +.charmap $9E, $9E +.charmap $9F, $9F + +.charmap $A0, $A0 +.charmap $A1, $A1 +.charmap $A2, $A2 +.charmap $A3, $A3 +.charmap $A4, $A4 +.charmap $A5, $A5 +.charmap $A6, $A6 +.charmap $A7, $A7 +.charmap $A8, $A8 +.charmap $A9, $A9 +.charmap $AA, $AA +.charmap $AB, $AB +.charmap $AC, $AC +.charmap $AD, $AD +.charmap $AE, $AE +.charmap $AF, $AF +.charmap $B0, $B0 +.charmap $B1, $B1 +.charmap $B2, $B2 +.charmap $B3, $B3 +.charmap $B4, $B4 +.charmap $B5, $B5 +.charmap $B6, $B6 +.charmap $B7, $B7 +.charmap $B8, $B8 +.charmap $B9, $B9 +.charmap $BA, $BA +.charmap $BB, $BB +.charmap $BC, $BC +.charmap $BD, $BD +.charmap $BE, $BE +.charmap $BF, $BF + +.charmap $C0, $60 +.charmap $C1, $61 +.charmap $C2, $62 +.charmap $C3, $63 +.charmap $C4, $64 +.charmap $C5, $65 +.charmap $C6, $66 +.charmap $C7, $67 +.charmap $C8, $68 +.charmap $C9, $69 +.charmap $CA, $6A +.charmap $CB, $6B +.charmap $CC, $6C +.charmap $CD, $6D +.charmap $CE, $6E +.charmap $CF, $6F +.charmap $D0, $70 +.charmap $D1, $71 +.charmap $D2, $72 +.charmap $D3, $73 +.charmap $D4, $74 +.charmap $D5, $75 +.charmap $D6, $76 +.charmap $D7, $77 +.charmap $D8, $78 +.charmap $D9, $79 +.charmap $DA, $7A +.charmap $DB, $7B +.charmap $DC, $7C +.charmap $DD, $7D +.charmap $DE, $7E +.charmap $DF, $7F + +.charmap $E0, $E0 +.charmap $E1, $E1 +.charmap $E2, $E2 +.charmap $E3, $E3 +.charmap $E4, $E4 +.charmap $E5, $E5 +.charmap $E6, $E6 +.charmap $E7, $E7 +.charmap $E8, $E8 +.charmap $E9, $E9 +.charmap $EA, $EA +.charmap $EB, $EB +.charmap $EC, $EC +.charmap $ED, $ED +.charmap $EE, $EE +.charmap $EF, $EF +.charmap $F0, $F0 +.charmap $F1, $F1 +.charmap $F2, $F2 +.charmap $F3, $F3 +.charmap $F4, $F4 +.charmap $F5, $F5 +.charmap $F6, $F6 +.charmap $F7, $F7 +.charmap $F8, $F8 +.charmap $F9, $F9 +.charmap $FA, $FA +.charmap $FB, $FB +.charmap $FC, $FC +.charmap $FD, $FD +.charmap $FE, $FE +.charmap $FF, $FF diff --git a/asminc/cbm_screen_charmap.inc b/asminc/cbm_screen_charmap.inc new file mode 100644 index 000000000..cacce10db --- /dev/null +++ b/asminc/cbm_screen_charmap.inc @@ -0,0 +1,307 @@ +;/*****************************************************************************/ +;/* */ +;/* cbm_screen_charmap.inc */ +;/* */ +;/* c Copyright 2019, Gerhard W. Gruber (sparhawk@gmx.at) */ +;/* */ +;/* When using CBM mode, this include converts character literals */ +;/* from ASCII to screen-code mapping, so you can write directly */ +;/* to the screen memory. */ +;/* */ +;/* If this include is used, no additional macros are needed. */ +;/* */ +;/*****************************************************************************/ + +;/* No include guard here! Multiple use in one file may be intentional. */ + +; Char $00 -> c + 128 +.charmap $00, $80 + +; Char $01 ... $1A -> c + 128 + 64 control alphabet +.charmap $01, $C1 +.charmap $02, $C2 +.charmap $03, $C3 +.charmap $04, $C4 +.charmap $05, $C5 +.charmap $06, $C6 +.charmap $07, $C7 +.charmap $08, $C8 +.charmap $09, $C9 +.charmap $0A, $CA +.charmap $0B, $CB +.charmap $0C, $CC +.charmap $0D, $CD +.charmap $0E, $CE +.charmap $0F, $CF +.charmap $10, $D0 +.charmap $11, $D1 +.charmap $12, $D2 +.charmap $13, $D3 +.charmap $14, $D4 +.charmap $15, $D5 +.charmap $16, $D6 +.charmap $17, $D7 +.charmap $18, $D8 +.charmap $19, $D9 +.charmap $1A, $DA + +; Char $1B ... $1F -> c + 128 +.charmap $1B, $9B +.charmap $1C, $9C +.charmap $1D, $9D +.charmap $1E, $9E +.charmap $1F, $9F + +; Char $20 ... $3F -> c +.charmap $20, $20 +.charmap $21, $21 +.charmap $22, $22 +.charmap $23, $23 +.charmap $24, $24 +.charmap $25, $25 +.charmap $26, $26 +.charmap $27, $27 +.charmap $28, $28 +.charmap $29, $29 +.charmap $2A, $2A +.charmap $2B, $2B +.charmap $2C, $2C +.charmap $2D, $2D +.charmap $2E, $2E +.charmap $2F, $2F +.charmap $30, $30 +.charmap $31, $31 +.charmap $32, $32 +.charmap $33, $33 +.charmap $34, $34 +.charmap $35, $35 +.charmap $36, $36 +.charmap $37, $37 +.charmap $38, $38 +.charmap $39, $39 +.charmap $3A, $3A +.charmap $3B, $3B +.charmap $3C, $3C +.charmap $3D, $3D +.charmap $3E, $3E +.charmap $3F, $3F + +; Char $40 -> c - 64 +.charmap $40, $00 + +; Char $41 ... $5A -> c upper-case alphabet +.charmap $41, $41 +.charmap $42, $42 +.charmap $43, $43 +.charmap $44, $44 +.charmap $45, $45 +.charmap $46, $46 +.charmap $47, $47 +.charmap $48, $48 +.charmap $49, $49 +.charmap $4A, $4A +.charmap $4B, $4B +.charmap $4C, $4C +.charmap $4D, $4D +.charmap $4E, $4E +.charmap $4F, $4F +.charmap $50, $50 +.charmap $51, $51 +.charmap $52, $52 +.charmap $53, $53 +.charmap $54, $54 +.charmap $55, $55 +.charmap $56, $56 +.charmap $57, $57 +.charmap $58, $58 +.charmap $59, $59 +.charmap $5A, $5A + +; Char $5B ... $5F -> c - 64 +.charmap $5B, $1B +.charmap $5C, $1C +.charmap $5D, $1D +.charmap $5E, $1E +.charmap $5F, $1F + +; Char $60 -> c - 32 +.charmap $60, $40 + +; Char $61 ... $7A -> c - 32 - 64 lower-case alphabet +.charmap $61, $01 +.charmap $62, $02 +.charmap $63, $03 +.charmap $64, $04 +.charmap $65, $05 +.charmap $66, $06 +.charmap $67, $07 +.charmap $68, $08 +.charmap $69, $09 +.charmap $6A, $0A +.charmap $6B, $0B +.charmap $6C, $0C +.charmap $6D, $0D +.charmap $6E, $0E +.charmap $6F, $0F +.charmap $70, $10 +.charmap $71, $11 +.charmap $72, $12 +.charmap $73, $13 +.charmap $74, $14 +.charmap $75, $15 +.charmap $76, $16 +.charmap $77, $17 +.charmap $78, $18 +.charmap $79, $19 +.charmap $7A, $1A + +; Char $7B ... $7F -> c - 32 +.charmap $7B, $5B +.charmap $7C, $5C +.charmap $7D, $5D +.charmap $7E, $5E +.charmap $7F, $5F + +; Char $80 -> c + 64 +.charmap $80, $C0 + +; Char $81 ... $9A -> c control alphabet +.charmap $81, $81 +.charmap $82, $82 +.charmap $83, $83 +.charmap $84, $84 +.charmap $85, $85 +.charmap $86, $86 +.charmap $87, $87 +.charmap $88, $88 +.charmap $89, $89 +.charmap $8A, $8A +.charmap $8B, $8B +.charmap $8C, $8C +.charmap $8D, $8D +.charmap $8E, $8E +.charmap $8F, $8F +.charmap $90, $90 +.charmap $91, $91 +.charmap $92, $92 +.charmap $93, $93 +.charmap $94, $94 +.charmap $95, $95 +.charmap $96, $96 +.charmap $97, $97 +.charmap $98, $98 +.charmap $99, $99 +.charmap $9A, $9A + +; Char $9B ... $9F -> c + 64 +.charmap $9B, $DB +.charmap $9C, $DC +.charmap $9D, $DD +.charmap $9E, $DE +.charmap $9F, $DF + +; Char $A0 ... $BF -> c - 64 +.charmap $A0, $60 +.charmap $A1, $61 +.charmap $A2, $62 +.charmap $A3, $63 +.charmap $A4, $64 +.charmap $A5, $65 +.charmap $A6, $66 +.charmap $A7, $67 +.charmap $A8, $68 +.charmap $A9, $69 +.charmap $AA, $6A +.charmap $AB, $6B +.charmap $AC, $6C +.charmap $AD, $6D +.charmap $AE, $6E +.charmap $AF, $6F +.charmap $B0, $70 +.charmap $B1, $71 +.charmap $B2, $72 +.charmap $B3, $73 +.charmap $B4, $74 +.charmap $B5, $75 +.charmap $B6, $76 +.charmap $B7, $77 +.charmap $B8, $78 +.charmap $B9, $79 +.charmap $BA, $7A +.charmap $BB, $7B +.charmap $BC, $7C +.charmap $BD, $7D +.charmap $BE, $7E +.charmap $BF, $7F + +; Char $C0 ... $DF -> c - 128 +.charmap $C0, $40 + +; Char $C1 ... $DA -> c - 128 - 64 lower-case alphabet +.charmap $C1, $01 +.charmap $C2, $02 +.charmap $C3, $03 +.charmap $C4, $04 +.charmap $C5, $05 +.charmap $C6, $06 +.charmap $C7, $07 +.charmap $C8, $08 +.charmap $C9, $09 +.charmap $CA, $0A +.charmap $CB, $0B +.charmap $CC, $0C +.charmap $CD, $0D +.charmap $CE, $0E +.charmap $CF, $0F +.charmap $D0, $10 +.charmap $D1, $11 +.charmap $D2, $12 +.charmap $D3, $13 +.charmap $D4, $14 +.charmap $D5, $15 +.charmap $D6, $16 +.charmap $D7, $17 +.charmap $D8, $18 +.charmap $D9, $19 +.charmap $DA, $1A + +; Char $DB ... $DF -> c - 128 +.charmap $DB, $5B +.charmap $DC, $5C +.charmap $DD, $5D +.charmap $DE, $5E +.charmap $DF, $5F + +; Char $E0 ... $FF -> c - 128 +.charmap $E0, $60 +.charmap $E1, $61 +.charmap $E2, $62 +.charmap $E3, $63 +.charmap $E4, $64 +.charmap $E5, $65 +.charmap $E6, $66 +.charmap $E7, $67 +.charmap $E8, $68 +.charmap $E9, $69 +.charmap $EA, $6A +.charmap $EB, $6B +.charmap $EC, $6C +.charmap $ED, $6D +.charmap $EE, $6E +.charmap $EF, $6F +.charmap $F0, $70 +.charmap $F1, $71 +.charmap $F2, $72 +.charmap $F3, $73 +.charmap $F4, $74 +.charmap $F5, $75 +.charmap $F6, $76 +.charmap $F7, $77 +.charmap $F8, $78 +.charmap $F9, $79 +.charmap $FA, $7A +.charmap $FB, $7B +.charmap $FC, $7C +.charmap $FD, $7D +.charmap $FE, $7E +.charmap $FF, $7F From 9941855dc612ca60f7bbdf31a460f4a7df173cd2 Mon Sep 17 00:00:00 2001 From: Marco Aurelio da Costa <costa@gamic.com> Date: Sun, 18 Apr 2021 15:30:41 -0300 Subject: [PATCH 0800/2710] mc: Removed original version comment, not relevant for assembler --- asminc/ascii_charmap.inc | 4 ---- asminc/atari_atascii_charmap.inc | 2 -- asminc/atari_screen_charmap.inc | 2 -- asminc/cbm_petscii_charmap.inc | 2 -- asminc/cbm_screen_charmap.inc | 2 -- 5 files changed, 12 deletions(-) diff --git a/asminc/ascii_charmap.inc b/asminc/ascii_charmap.inc index 57728b0d4..ecbf2640f 100644 --- a/asminc/ascii_charmap.inc +++ b/asminc/ascii_charmap.inc @@ -26,10 +26,6 @@ ;/* */ ;/*****************************************************************************/ -;/* No include guard here. Each charmap header -;** may be included many times in a source file. -;*/ - ;/* ASCII */ .charmap $00, $00 .charmap $01, $01 diff --git a/asminc/atari_atascii_charmap.inc b/asminc/atari_atascii_charmap.inc index 8c3222dd6..7c6b5e542 100644 --- a/asminc/atari_atascii_charmap.inc +++ b/asminc/atari_atascii_charmap.inc @@ -28,8 +28,6 @@ ;/* */ ;/*****************************************************************************/ -;/* No include guard here! Multiple use in one file may be intentional. */ - .charmap $00, $00 .charmap $01, $01 .charmap $02, $02 diff --git a/asminc/atari_screen_charmap.inc b/asminc/atari_screen_charmap.inc index ca4f9e1d7..193ea0685 100644 --- a/asminc/atari_screen_charmap.inc +++ b/asminc/atari_screen_charmap.inc @@ -28,8 +28,6 @@ ;/* */ ;/*****************************************************************************/ -;/* No include guard here! Multiple use in one file may be intentional. */ - .charmap $00, $40 .charmap $01, $41 .charmap $02, $42 diff --git a/asminc/cbm_petscii_charmap.inc b/asminc/cbm_petscii_charmap.inc index 15fde0d8c..525bffb01 100644 --- a/asminc/cbm_petscii_charmap.inc +++ b/asminc/cbm_petscii_charmap.inc @@ -26,8 +26,6 @@ ;/* */ ;/*****************************************************************************/ -;/* No include guard here! Multiple use in one file might be intentional. */ - .charmap $00, $00 .charmap $01, $01 .charmap $02, $02 diff --git a/asminc/cbm_screen_charmap.inc b/asminc/cbm_screen_charmap.inc index cacce10db..12d02553d 100644 --- a/asminc/cbm_screen_charmap.inc +++ b/asminc/cbm_screen_charmap.inc @@ -12,8 +12,6 @@ ;/* */ ;/*****************************************************************************/ -;/* No include guard here! Multiple use in one file may be intentional. */ - ; Char $00 -> c + 128 .charmap $00, $80 From 2120dd662c919a884e73e68736cb9b806c818367 Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sun, 18 Apr 2021 20:07:43 +0300 Subject: [PATCH 0801/2710] Move all common project settings into cc65.props. --- src/.gitignore | 1 + src/ar65.vcxproj | 35 ++------------ src/ca65.vcxproj | 35 ++------------ src/cc65.props | 62 +++++++++++++++++++++++++ src/cc65.vcxproj | 35 ++------------ src/chrcvt65.vcxproj | 35 ++------------ src/cl65.vcxproj | 35 ++------------ src/co65.vcxproj | 35 ++------------ src/common.vcxproj | 106 +++++++++++++------------------------------ src/da65.vcxproj | 35 ++------------ src/grc65.vcxproj | 35 ++------------ src/ld65.vcxproj | 37 ++------------- src/od65.vcxproj | 35 ++------------ src/sim65.vcxproj | 36 ++------------- src/sp65.vcxproj | 35 ++------------ 15 files changed, 132 insertions(+), 460 deletions(-) create mode 100644 src/cc65.props diff --git a/src/.gitignore b/src/.gitignore index a2c8bb5d4..3b4d0f7ad 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1,3 +1,4 @@ +.vs/ ipch/ *.suo *.sdf diff --git a/src/ar65.vcxproj b/src/ar65.vcxproj index a57bec813..6f2d5329a 100644 --- a/src/ar65.vcxproj +++ b/src/ar65.vcxproj @@ -13,66 +13,37 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{5E8C19C6-B167-440C-8BEF-3CBF109CDB49}</ProjectGuid> <Keyword>Win32Proj</Keyword> - <RootNamespace>ar65</RootNamespace> - <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> </PropertyGroup> + <Import Project="cc65.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>false</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup> diff --git a/src/ca65.vcxproj b/src/ca65.vcxproj index df246a59f..c4d8c17ef 100644 --- a/src/ca65.vcxproj +++ b/src/ca65.vcxproj @@ -13,66 +13,37 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}</ProjectGuid> <Keyword>Win32Proj</Keyword> - <RootNamespace>ca65</RootNamespace> - <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> </PropertyGroup> + <Import Project="cc65.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <LinkIncremental>true</LinkIncremental> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)..\bin\</OutDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions> - <TreatWarningAsError>true</TreatWarningAsError> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions> - <TreatWarningAsError>true</TreatWarningAsError> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>false</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup> diff --git a/src/cc65.props b/src/cc65.props new file mode 100644 index 000000000..bd0eb6024 --- /dev/null +++ b/src/cc65.props @@ -0,0 +1,62 @@ +<Project> + + <!-- VS2017 compatibility. --> + <PropertyGroup Condition="$(MSBuildVersion.Split('.')[0]) == '15'"> + <PlatformToolset Condition="'$(PlatformToolset)' == ''">v141</PlatformToolset> + <WindowsTargetPlatformVersion Condition="'$(WindowsTargetPlatformVersion)' == ''">$([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0'))</WindowsTargetPlatformVersion> + </PropertyGroup> + + <!-- Common settings. --> + <PropertyGroup> + <PlatformToolset Condition="'$(PlatformToolset)' == ''">v142</PlatformToolset> + <WindowsTargetPlatformVersion Condition="'$(WindowsTargetPlatformVersion)' == ''">10.0</WindowsTargetPlatformVersion> + <IntDir>$(SolutionDir)..\wrk\$(MSBuildProjectName)\$(Configuration)\</IntDir> + <OutDir>$(SolutionDir)..\bin\</OutDir> + <OutDir Condition="$(MSBuildProjectName) == 'common'">$(IntDir)</OutDir> + </PropertyGroup> + <ItemDefinitionGroup> + <ClCompile> + <PrecompiledHeader></PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0601;WINVER=0x0601;NTDDI_VERSION=0x06010000;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories Condition="$(MSBuildProjectName) != 'common'">common</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <AdditionalDependencies Condition="$(MSBuildProjectName) != 'common'">$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + + <!-- Debug settings. --> + <PropertyGroup Condition="'$(Configuration)'=='Debug'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'"> + <ClCompile> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <BufferSecurityCheck>true</BufferSecurityCheck> + </ClCompile> + <Link> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + + <!-- Release settings. --> + <PropertyGroup Condition="'$(Configuration)'=='Release'"> + <LinkIncremental>false</LinkIncremental> + <WholeProgramOptimization>true</WholeProgramOptimization> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'"> + <ClCompile> + <FunctionLevelLinking>true</FunctionLevelLinking> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <BufferSecurityCheck>false</BufferSecurityCheck> + </ClCompile> + <Link> + <GenerateDebugInformation>false</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> + </Link> + </ItemDefinitionGroup> +</Project> \ No newline at end of file diff --git a/src/cc65.vcxproj b/src/cc65.vcxproj index 0f63a1022..f631672aa 100644 --- a/src/cc65.vcxproj +++ b/src/cc65.vcxproj @@ -13,66 +13,37 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}</ProjectGuid> <Keyword>Win32Proj</Keyword> - <RootNamespace>cc65</RootNamespace> - <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> </PropertyGroup> + <Import Project="cc65.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <LinkIncremental>true</LinkIncremental> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)..\bin\</OutDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <WarningLevel>Level3</WarningLevel> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>false</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup> diff --git a/src/chrcvt65.vcxproj b/src/chrcvt65.vcxproj index 351f6077e..1f517e11a 100644 --- a/src/chrcvt65.vcxproj +++ b/src/chrcvt65.vcxproj @@ -13,66 +13,37 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{1C7A3FEF-DD0B-4B10-BC33-C3BE29BF67CC}</ProjectGuid> <Keyword>Win32Proj</Keyword> - <RootNamespace>chrcvt65</RootNamespace> - <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> </PropertyGroup> + <Import Project="cc65.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>false</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup> diff --git a/src/cl65.vcxproj b/src/cl65.vcxproj index dab77e196..14fcf06bd 100644 --- a/src/cl65.vcxproj +++ b/src/cl65.vcxproj @@ -13,66 +13,37 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{F657912F-050A-488B-B203-50ED5715CDD7}</ProjectGuid> <Keyword>Win32Proj</Keyword> - <RootNamespace>cl65</RootNamespace> - <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> </PropertyGroup> + <Import Project="cc65.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>false</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup> diff --git a/src/co65.vcxproj b/src/co65.vcxproj index 9b4f18786..8fab51c53 100644 --- a/src/co65.vcxproj +++ b/src/co65.vcxproj @@ -13,66 +13,37 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}</ProjectGuid> <Keyword>Win32Proj</Keyword> - <RootNamespace>co65</RootNamespace> - <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> </PropertyGroup> + <Import Project="cc65.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>false</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup> diff --git a/src/common.vcxproj b/src/common.vcxproj index eb0dffd66..957ba55ad 100644 --- a/src/common.vcxproj +++ b/src/common.vcxproj @@ -10,6 +10,38 @@ <Platform>Win32</Platform> </ProjectConfiguration> </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{71DC1F68-BFC4-478C-8655-C8E9C9654D2B}</ProjectGuid> + <Keyword>Win32Proj</Keyword> + </PropertyGroup> + <Import Project="cc65.props" /> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <PreprocessorDefinitions>_LIB;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </ClCompile> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <PreprocessorDefinitions>_LIB;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </ClCompile> + </ItemDefinitionGroup> <ItemGroup> <ClInclude Include="common\abend.h" /> <ClInclude Include="common\addrsize.h" /> @@ -106,80 +138,6 @@ <ClCompile Include="common\xmalloc.c" /> <ClCompile Include="common\xsprintf.c" /> </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{71DC1F68-BFC4-478C-8655-C8E9C9654D2B}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>common</RootNamespace> - <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <ConfigurationType>StaticLibrary</ConfigurationType> - <PlatformToolset>v141</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</OutDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</OutDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_LIB;_DEBUG</PreprocessorDefinitions> - <TreatWarningAsError>true</TreatWarningAsError> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - <Lib /> - <Lib> - <OutputFile>$(IntDir)$(TargetName)$(TargetExt)</OutputFile> - </Lib> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <FunctionLevelLinking>true</FunctionLevelLinking> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_LIB;NDEBUG</PreprocessorDefinitions> - <TreatWarningAsError>true</TreatWarningAsError> - </ClCompile> - <Link> - <SubSystem>Windows</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - </Link> - <Lib /> - <Lib> - <OutputFile>$(IntDir)$(TargetName)$(TargetExt)</OutputFile> - </Lib> - </ItemDefinitionGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> diff --git a/src/da65.vcxproj b/src/da65.vcxproj index 090c3030f..ae7c9a7f4 100644 --- a/src/da65.vcxproj +++ b/src/da65.vcxproj @@ -13,66 +13,37 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{0BCFB793-2B25-40E2-B265-75848824AC4C}</ProjectGuid> <Keyword>Win32Proj</Keyword> - <RootNamespace>da65</RootNamespace> - <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> </PropertyGroup> + <Import Project="cc65.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>false</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup> diff --git a/src/grc65.vcxproj b/src/grc65.vcxproj index 841ec635a..1c61bc82e 100644 --- a/src/grc65.vcxproj +++ b/src/grc65.vcxproj @@ -13,66 +13,37 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}</ProjectGuid> <Keyword>Win32Proj</Keyword> - <RootNamespace>grc65</RootNamespace> - <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> </PropertyGroup> + <Import Project="cc65.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>false</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup> diff --git a/src/ld65.vcxproj b/src/ld65.vcxproj index a78f3128b..0e7ac7346 100644 --- a/src/ld65.vcxproj +++ b/src/ld65.vcxproj @@ -13,66 +13,37 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{26C749A0-814C-47A2-9D36-AE92AE932FE4}</ProjectGuid> <Keyword>Win32Proj</Keyword> - <RootNamespace>ld65</RootNamespace> - <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> </PropertyGroup> + <Import Project="cc65.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>false</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup> @@ -145,4 +116,4 @@ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> -</Project> +</Project> \ No newline at end of file diff --git a/src/od65.vcxproj b/src/od65.vcxproj index 03ea41fce..125452e5b 100644 --- a/src/od65.vcxproj +++ b/src/od65.vcxproj @@ -13,66 +13,37 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}</ProjectGuid> <Keyword>Win32Proj</Keyword> - <RootNamespace>od65</RootNamespace> - <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> </PropertyGroup> + <Import Project="cc65.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>false</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup> diff --git a/src/sim65.vcxproj b/src/sim65.vcxproj index 9dc61e53f..26bf3cf5b 100644 --- a/src/sim65.vcxproj +++ b/src/sim65.vcxproj @@ -13,67 +13,37 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{002A366E-2863-46A8-BDDE-DDF534AAEC73}</ProjectGuid> <Keyword>Win32Proj</Keyword> - <RootNamespace>sim65</RootNamespace> - <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> </PropertyGroup> + <Import Project="cc65.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>false</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup> diff --git a/src/sp65.vcxproj b/src/sp65.vcxproj index 3b770ec57..12b45c9e1 100644 --- a/src/sp65.vcxproj +++ b/src/sp65.vcxproj @@ -13,66 +13,37 @@ <PropertyGroup Label="Globals"> <ProjectGuid>{4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}</ProjectGuid> <Keyword>Win32Proj</Keyword> - <RootNamespace>sp65</RootNamespace> - <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion> </PropertyGroup> + <Import Project="cc65.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v141</PlatformToolset> </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <IntDir>$(SolutionDir)..\wrk\$(ProjectName)\$(Configuration)\</IntDir> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;_DEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_CONSOLE;NDEBUG</PreprocessorDefinitions> - <AdditionalIncludeDirectories>common</AdditionalIncludeDirectories> - <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> <Link> <SubSystem>Console</SubSystem> - <GenerateDebugInformation>false</GenerateDebugInformation> - <AdditionalDependencies>$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> </Link> </ItemDefinitionGroup> <ItemGroup> From 7be3b53f72cabb74c9e16035fee41da603c28be6 Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sun, 18 Apr 2021 20:29:30 +0300 Subject: [PATCH 0802/2710] cc65.props uses spaces instead of tabs. --- src/cc65.props | 112 ++++++++++++++++++++++++------------------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/src/cc65.props b/src/cc65.props index bd0eb6024..9d56b06bd 100644 --- a/src/cc65.props +++ b/src/cc65.props @@ -1,62 +1,62 @@ <Project> - <!-- VS2017 compatibility. --> - <PropertyGroup Condition="$(MSBuildVersion.Split('.')[0]) == '15'"> - <PlatformToolset Condition="'$(PlatformToolset)' == ''">v141</PlatformToolset> - <WindowsTargetPlatformVersion Condition="'$(WindowsTargetPlatformVersion)' == ''">$([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0'))</WindowsTargetPlatformVersion> - </PropertyGroup> + <!-- VS2017 compatibility. --> + <PropertyGroup Condition="$(MSBuildVersion.Split('.')[0]) == '15'"> + <PlatformToolset Condition="'$(PlatformToolset)' == ''">v141</PlatformToolset> + <WindowsTargetPlatformVersion Condition="'$(WindowsTargetPlatformVersion)' == ''">$([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0'))</WindowsTargetPlatformVersion> + </PropertyGroup> - <!-- Common settings. --> - <PropertyGroup> - <PlatformToolset Condition="'$(PlatformToolset)' == ''">v142</PlatformToolset> - <WindowsTargetPlatformVersion Condition="'$(WindowsTargetPlatformVersion)' == ''">10.0</WindowsTargetPlatformVersion> - <IntDir>$(SolutionDir)..\wrk\$(MSBuildProjectName)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <OutDir Condition="$(MSBuildProjectName) == 'common'">$(IntDir)</OutDir> - </PropertyGroup> - <ItemDefinitionGroup> - <ClCompile> - <PrecompiledHeader></PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <TreatWarningAsError>true</TreatWarningAsError> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0601;WINVER=0x0601;NTDDI_VERSION=0x06010000;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories Condition="$(MSBuildProjectName) != 'common'">common</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <AdditionalDependencies Condition="$(MSBuildProjectName) != 'common'">$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> + <!-- Common settings. --> + <PropertyGroup> + <PlatformToolset Condition="'$(PlatformToolset)' == ''">v142</PlatformToolset> + <WindowsTargetPlatformVersion Condition="'$(WindowsTargetPlatformVersion)' == ''">10.0</WindowsTargetPlatformVersion> + <IntDir>$(SolutionDir)..\wrk\$(MSBuildProjectName)\$(Configuration)\</IntDir> + <OutDir>$(SolutionDir)..\bin\</OutDir> + <OutDir Condition="$(MSBuildProjectName) == 'common'">$(IntDir)</OutDir> + </PropertyGroup> + <ItemDefinitionGroup> + <ClCompile> + <PrecompiledHeader></PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0601;WINVER=0x0601;NTDDI_VERSION=0x06010000;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories Condition="$(MSBuildProjectName) != 'common'">common</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <AdditionalDependencies Condition="$(MSBuildProjectName) != 'common'">$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> - <!-- Debug settings. --> - <PropertyGroup Condition="'$(Configuration)'=='Debug'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'"> - <ClCompile> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <BufferSecurityCheck>true</BufferSecurityCheck> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> + <!-- Debug settings. --> + <PropertyGroup Condition="'$(Configuration)'=='Debug'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'"> + <ClCompile> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <BufferSecurityCheck>true</BufferSecurityCheck> + </ClCompile> + <Link> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> - <!-- Release settings. --> - <PropertyGroup Condition="'$(Configuration)'=='Release'"> - <LinkIncremental>false</LinkIncremental> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'"> - <ClCompile> - <FunctionLevelLinking>true</FunctionLevelLinking> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <BufferSecurityCheck>false</BufferSecurityCheck> - </ClCompile> - <Link> - <GenerateDebugInformation>false</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> - </Link> - </ItemDefinitionGroup> + <!-- Release settings. --> + <PropertyGroup Condition="'$(Configuration)'=='Release'"> + <LinkIncremental>false</LinkIncremental> + <WholeProgramOptimization>true</WholeProgramOptimization> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'"> + <ClCompile> + <FunctionLevelLinking>true</FunctionLevelLinking> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <BufferSecurityCheck>false</BufferSecurityCheck> + </ClCompile> + <Link> + <GenerateDebugInformation>false</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> + </Link> + </ItemDefinitionGroup> </Project> \ No newline at end of file From ee8c7b47bc5c1e2c28300f4f245b44e38af127c1 Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sun, 18 Apr 2021 20:47:21 +0300 Subject: [PATCH 0803/2710] Add new lines at the end of the project files. --- src/cc65.props | 2 +- src/ld65.vcxproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65.props b/src/cc65.props index 9d56b06bd..20c5e9622 100644 --- a/src/cc65.props +++ b/src/cc65.props @@ -59,4 +59,4 @@ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> </Link> </ItemDefinitionGroup> -</Project> \ No newline at end of file +</Project> diff --git a/src/ld65.vcxproj b/src/ld65.vcxproj index 0e7ac7346..d4597de4f 100644 --- a/src/ld65.vcxproj +++ b/src/ld65.vcxproj @@ -116,4 +116,4 @@ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> -</Project> \ No newline at end of file +</Project> From ac08482fa38f645e2cfd2cd520b91e3aba3a6344 Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sun, 18 Apr 2021 21:33:46 +0300 Subject: [PATCH 0804/2710] Allow editing cc65.props from Property Manager. --- src/ar65.vcxproj | 4 +- src/ca65.vcxproj | 4 +- src/cc65.props | 120 +++++++++++++++++++++---------------------- src/cc65.vcxproj | 4 +- src/chrcvt65.vcxproj | 4 +- src/cl65.vcxproj | 4 +- src/co65.vcxproj | 4 +- src/common.vcxproj | 4 +- src/da65.vcxproj | 4 +- src/grc65.vcxproj | 4 +- src/ld65.vcxproj | 4 +- src/od65.vcxproj | 4 +- src/sim65.vcxproj | 4 +- src/sp65.vcxproj | 4 +- 14 files changed, 99 insertions(+), 73 deletions(-) diff --git a/src/ar65.vcxproj b/src/ar65.vcxproj index 6f2d5329a..27d12dadc 100644 --- a/src/ar65.vcxproj +++ b/src/ar65.vcxproj @@ -14,7 +14,9 @@ <ProjectGuid>{5E8C19C6-B167-440C-8BEF-3CBF109CDB49}</ProjectGuid> <Keyword>Win32Proj</Keyword> </PropertyGroup> - <Import Project="cc65.props" /> + <ImportGroup Label="PropertySheets"> + <Import Project="cc65.props" /> + </ImportGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> diff --git a/src/ca65.vcxproj b/src/ca65.vcxproj index c4d8c17ef..3cc6019f2 100644 --- a/src/ca65.vcxproj +++ b/src/ca65.vcxproj @@ -14,7 +14,9 @@ <ProjectGuid>{D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}</ProjectGuid> <Keyword>Win32Proj</Keyword> </PropertyGroup> - <Import Project="cc65.props" /> + <ImportGroup Label="PropertySheets"> + <Import Project="cc65.props" /> + </ImportGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> diff --git a/src/cc65.props b/src/cc65.props index 20c5e9622..ef5a37fea 100644 --- a/src/cc65.props +++ b/src/cc65.props @@ -1,62 +1,62 @@ <Project> - - <!-- VS2017 compatibility. --> - <PropertyGroup Condition="$(MSBuildVersion.Split('.')[0]) == '15'"> - <PlatformToolset Condition="'$(PlatformToolset)' == ''">v141</PlatformToolset> - <WindowsTargetPlatformVersion Condition="'$(WindowsTargetPlatformVersion)' == ''">$([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0'))</WindowsTargetPlatformVersion> - </PropertyGroup> - - <!-- Common settings. --> - <PropertyGroup> - <PlatformToolset Condition="'$(PlatformToolset)' == ''">v142</PlatformToolset> - <WindowsTargetPlatformVersion Condition="'$(WindowsTargetPlatformVersion)' == ''">10.0</WindowsTargetPlatformVersion> - <IntDir>$(SolutionDir)..\wrk\$(MSBuildProjectName)\$(Configuration)\</IntDir> - <OutDir>$(SolutionDir)..\bin\</OutDir> - <OutDir Condition="$(MSBuildProjectName) == 'common'">$(IntDir)</OutDir> - </PropertyGroup> - <ItemDefinitionGroup> - <ClCompile> - <PrecompiledHeader></PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <TreatWarningAsError>true</TreatWarningAsError> - <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0601;WINVER=0x0601;NTDDI_VERSION=0x06010000;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories Condition="$(MSBuildProjectName) != 'common'">common</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <AdditionalDependencies Condition="$(MSBuildProjectName) != 'common'">$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - - <!-- Debug settings. --> - <PropertyGroup Condition="'$(Configuration)'=='Debug'"> - <LinkIncremental>true</LinkIncremental> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'"> - <ClCompile> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <BufferSecurityCheck>true</BufferSecurityCheck> - </ClCompile> - <Link> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - - <!-- Release settings. --> - <PropertyGroup Condition="'$(Configuration)'=='Release'"> - <LinkIncremental>false</LinkIncremental> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'"> - <ClCompile> - <FunctionLevelLinking>true</FunctionLevelLinking> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <BufferSecurityCheck>false</BufferSecurityCheck> - </ClCompile> - <Link> - <GenerateDebugInformation>false</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> - </Link> - </ItemDefinitionGroup> + <PropertyGroup Label="UserMacros"> + </PropertyGroup> + <!-- VS2017 compatibility. --> + <PropertyGroup Condition="$(MSBuildVersion.Split('.')[0]) == '15'"> + <PlatformToolset Condition="'$(PlatformToolset)' == ''">v141</PlatformToolset> + <WindowsTargetPlatformVersion Condition="'$(WindowsTargetPlatformVersion)' == ''">$([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0'))</WindowsTargetPlatformVersion> + </PropertyGroup> + <!-- Common settings. --> + <PropertyGroup> + <PlatformToolset Condition="'$(PlatformToolset)' == ''">v142</PlatformToolset> + <WindowsTargetPlatformVersion Condition="'$(WindowsTargetPlatformVersion)' == ''">10.0</WindowsTargetPlatformVersion> + <IntDir>$(SolutionDir)..\wrk\$(MSBuildProjectName)\$(Configuration)\</IntDir> + <OutDir>$(SolutionDir)..\bin\</OutDir> + <OutDir Condition="$(MSBuildProjectName) == 'common'">$(IntDir)</OutDir> + </PropertyGroup> + <ItemDefinitionGroup> + <ClCompile> + <PrecompiledHeader>NotUsing</PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <TreatWarningAsError>true</TreatWarningAsError> + <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0601;WINVER=0x0601;NTDDI_VERSION=0x06010000;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <AdditionalIncludeDirectories Condition="$(MSBuildProjectName) != 'common'">common</AdditionalIncludeDirectories> + </ClCompile> + <Link> + <AdditionalDependencies Condition="$(MSBuildProjectName) != 'common'">$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> + </Link> + </ItemDefinitionGroup> + <!-- Debug settings. --> + <PropertyGroup Condition="'$(Configuration)'=='Debug'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'"> + <ClCompile> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <BufferSecurityCheck>true</BufferSecurityCheck> + </ClCompile> + <Link> + <GenerateDebugInformation>true</GenerateDebugInformation> + </Link> + </ItemDefinitionGroup> + <!-- Release settings. --> + <PropertyGroup Condition="'$(Configuration)'=='Release'"> + <LinkIncremental>false</LinkIncremental> + <WholeProgramOptimization>true</WholeProgramOptimization> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'"> + <ClCompile> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <FunctionLevelLinking>true</FunctionLevelLinking> + <Optimization>MaxSpeed</Optimization> + <BufferSecurityCheck>false</BufferSecurityCheck> + <ControlFlowGuard>false</ControlFlowGuard> + </ClCompile> + <Link> + <GenerateDebugInformation>false</GenerateDebugInformation> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <OptimizeReferences>true</OptimizeReferences> + <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> + </Link> + </ItemDefinitionGroup> </Project> diff --git a/src/cc65.vcxproj b/src/cc65.vcxproj index f631672aa..14500296d 100644 --- a/src/cc65.vcxproj +++ b/src/cc65.vcxproj @@ -14,7 +14,9 @@ <ProjectGuid>{B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}</ProjectGuid> <Keyword>Win32Proj</Keyword> </PropertyGroup> - <Import Project="cc65.props" /> + <ImportGroup Label="PropertySheets"> + <Import Project="cc65.props" /> + </ImportGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> diff --git a/src/chrcvt65.vcxproj b/src/chrcvt65.vcxproj index 1f517e11a..1e5c753b5 100644 --- a/src/chrcvt65.vcxproj +++ b/src/chrcvt65.vcxproj @@ -14,7 +14,9 @@ <ProjectGuid>{1C7A3FEF-DD0B-4B10-BC33-C3BE29BF67CC}</ProjectGuid> <Keyword>Win32Proj</Keyword> </PropertyGroup> - <Import Project="cc65.props" /> + <ImportGroup Label="PropertySheets"> + <Import Project="cc65.props" /> + </ImportGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> diff --git a/src/cl65.vcxproj b/src/cl65.vcxproj index 14fcf06bd..67b7eb087 100644 --- a/src/cl65.vcxproj +++ b/src/cl65.vcxproj @@ -14,7 +14,9 @@ <ProjectGuid>{F657912F-050A-488B-B203-50ED5715CDD7}</ProjectGuid> <Keyword>Win32Proj</Keyword> </PropertyGroup> - <Import Project="cc65.props" /> + <ImportGroup Label="PropertySheets"> + <Import Project="cc65.props" /> + </ImportGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> diff --git a/src/co65.vcxproj b/src/co65.vcxproj index 8fab51c53..9f5959d89 100644 --- a/src/co65.vcxproj +++ b/src/co65.vcxproj @@ -14,7 +14,9 @@ <ProjectGuid>{F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}</ProjectGuid> <Keyword>Win32Proj</Keyword> </PropertyGroup> - <Import Project="cc65.props" /> + <ImportGroup Label="PropertySheets"> + <Import Project="cc65.props" /> + </ImportGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> diff --git a/src/common.vcxproj b/src/common.vcxproj index 957ba55ad..f7929df2b 100644 --- a/src/common.vcxproj +++ b/src/common.vcxproj @@ -14,7 +14,9 @@ <ProjectGuid>{71DC1F68-BFC4-478C-8655-C8E9C9654D2B}</ProjectGuid> <Keyword>Win32Proj</Keyword> </PropertyGroup> - <Import Project="cc65.props" /> + <ImportGroup Label="PropertySheets"> + <Import Project="cc65.props" /> + </ImportGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> diff --git a/src/da65.vcxproj b/src/da65.vcxproj index ae7c9a7f4..a40daf1d6 100644 --- a/src/da65.vcxproj +++ b/src/da65.vcxproj @@ -14,7 +14,9 @@ <ProjectGuid>{0BCFB793-2B25-40E2-B265-75848824AC4C}</ProjectGuid> <Keyword>Win32Proj</Keyword> </PropertyGroup> - <Import Project="cc65.props" /> + <ImportGroup Label="PropertySheets"> + <Import Project="cc65.props" /> + </ImportGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> diff --git a/src/grc65.vcxproj b/src/grc65.vcxproj index 1c61bc82e..fbd44fa3e 100644 --- a/src/grc65.vcxproj +++ b/src/grc65.vcxproj @@ -14,7 +14,9 @@ <ProjectGuid>{E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}</ProjectGuid> <Keyword>Win32Proj</Keyword> </PropertyGroup> - <Import Project="cc65.props" /> + <ImportGroup Label="PropertySheets"> + <Import Project="cc65.props" /> + </ImportGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> diff --git a/src/ld65.vcxproj b/src/ld65.vcxproj index d4597de4f..9e4b08621 100644 --- a/src/ld65.vcxproj +++ b/src/ld65.vcxproj @@ -14,7 +14,9 @@ <ProjectGuid>{26C749A0-814C-47A2-9D36-AE92AE932FE4}</ProjectGuid> <Keyword>Win32Proj</Keyword> </PropertyGroup> - <Import Project="cc65.props" /> + <ImportGroup Label="PropertySheets"> + <Import Project="cc65.props" /> + </ImportGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> diff --git a/src/od65.vcxproj b/src/od65.vcxproj index 125452e5b..1a1527067 100644 --- a/src/od65.vcxproj +++ b/src/od65.vcxproj @@ -14,7 +14,9 @@ <ProjectGuid>{FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}</ProjectGuid> <Keyword>Win32Proj</Keyword> </PropertyGroup> - <Import Project="cc65.props" /> + <ImportGroup Label="PropertySheets"> + <Import Project="cc65.props" /> + </ImportGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> diff --git a/src/sim65.vcxproj b/src/sim65.vcxproj index 26bf3cf5b..97fc3855a 100644 --- a/src/sim65.vcxproj +++ b/src/sim65.vcxproj @@ -14,7 +14,9 @@ <ProjectGuid>{002A366E-2863-46A8-BDDE-DDF534AAEC73}</ProjectGuid> <Keyword>Win32Proj</Keyword> </PropertyGroup> - <Import Project="cc65.props" /> + <ImportGroup Label="PropertySheets"> + <Import Project="cc65.props" /> + </ImportGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> diff --git a/src/sp65.vcxproj b/src/sp65.vcxproj index 12b45c9e1..1b7a18427 100644 --- a/src/sp65.vcxproj +++ b/src/sp65.vcxproj @@ -14,7 +14,9 @@ <ProjectGuid>{4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}</ProjectGuid> <Keyword>Win32Proj</Keyword> </PropertyGroup> - <Import Project="cc65.props" /> + <ImportGroup Label="PropertySheets"> + <Import Project="cc65.props" /> + </ImportGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> From a982f6a668258850d0f1e40f7733d91a3729af20 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Tue, 6 Apr 2021 22:35:51 +0200 Subject: [PATCH 0805/2710] Removed obsolete file. https://github.com/cc65/cc65/commit/c658acbf850e32508ea0e14f0f62d675a009c7d9 made this file unnecessary. --- test/.gitignore | 1 - 1 file changed, 1 deletion(-) delete mode 100644 test/.gitignore diff --git a/test/.gitignore b/test/.gitignore deleted file mode 100644 index 5761abcfd..000000000 --- a/test/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.o From bfb7c936aa9ba5fe93c9923af1f1a8dc2deacf22 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 30 Mar 2021 16:47:57 +0800 Subject: [PATCH 0806/2710] Preparation for constness-correction. --- src/cc65/expr.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index b0ebbf191..64980aceb 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -4094,7 +4094,7 @@ static void hieQuest (ExprDesc* Expr) /* Get common type */ - ResultType = ArithmeticConvert (Expr2.Type, Expr3.Type); + ResultType = TypeDup (ArithmeticConvert (Expr2.Type, Expr3.Type)); /* Convert the third expression to this type if needed */ TypeConversion (&Expr3, ResultType); @@ -4138,22 +4138,22 @@ static void hieQuest (ExprDesc* Expr) } } else if (IsClassPtr (Expr2.Type) && Expr3IsNULL) { /* Result type is pointer, no cast needed */ - ResultType = Expr2.Type; + ResultType = TypeDup (Expr2.Type); } else if (Expr2IsNULL && IsClassPtr (Expr3.Type)) { /* Result type is pointer, no cast needed */ - ResultType = Expr3.Type; + ResultType = TypeDup (Expr3.Type); } else if (IsTypeVoid (Expr2.Type) && IsTypeVoid (Expr3.Type)) { /* Result type is void */ - ResultType = type_void; + ResultType = TypeDup (type_void); } else { if (IsClassStruct (Expr2.Type) && IsClassStruct (Expr3.Type) && TypeCmp (Expr2.Type, Expr3.Type).C == TC_IDENTICAL) { /* Result type is struct/union */ - ResultType = Expr2.Type; + ResultType = TypeDup (Expr2.Type); } else { TypeCompatibilityDiagnostic (Expr2.Type, Expr3.Type, 1, "Incompatible types in ternary '%s' with '%s'"); - ResultType = Expr2.Type; /* Doesn't matter here */ + ResultType = TypeDup (Expr2.Type); /* Doesn't matter here */ } } From 896f463a23e2a58695e23562b7c6f3a46489c9b2 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 30 Mar 2021 16:47:52 +0800 Subject: [PATCH 0807/2710] Used more specific pointers instead of the "arbitary attribute pointer" used in type strings. --- src/cc65/codeinfo.c | 1 + src/cc65/compile.c | 1 + src/cc65/datatype.c | 26 +++++++++++++------------- src/cc65/datatype.h | 16 ++++++++++++---- src/cc65/declare.c | 2 +- src/cc65/pragma.c | 1 + src/cc65/symentry.c | 2 +- src/cc65/typecmp.c | 1 + src/cc65/typeconv.c | 1 + 9 files changed, 32 insertions(+), 19 deletions(-) diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index d81f46001..46a7d76c6 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -46,6 +46,7 @@ #include "codeseg.h" #include "datatype.h" #include "error.h" +#include "funcdesc.h" #include "global.h" #include "reginfo.h" #include "symtab.h" diff --git a/src/cc65/compile.c b/src/cc65/compile.c index d93de96b4..f970edef7 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -53,6 +53,7 @@ #include "declare.h" #include "error.h" #include "expr.h" +#include "funcdesc.h" #include "function.h" #include "global.h" #include "input.h" diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index d29a0d807..901e2ce13 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -468,7 +468,7 @@ Type* GetImplicitFuncType (void) /* Fill the type string */ T[0].C = T_FUNC | CodeAddrSizeQualifier (); - T[0].A.P = F; + T[0].A.F = F; T[1].C = T_INT; T[2].C = T_END; @@ -685,13 +685,13 @@ const Type* GetUnderlyingType (const Type* Type) return IS_Get (&SignedChars) ? type_schar : type_uchar; } else if (IsTypeEnum (Type)) { /* This should not happen, but just in case */ - if (Type->A.P == 0) { + if (Type->A.S == 0) { Internal ("Enum tag type error in GetUnderlyingTypeCode"); } /* If incomplete enum type is used, just return its raw type */ - if (((SymEntry*)Type->A.P)->V.E.Type != 0) { - return ((SymEntry*)Type->A.P)->V.E.Type; + if (Type->A.S->V.E.Type != 0) { + return Type->A.S->V.E.Type; } } @@ -715,16 +715,16 @@ TypeCode GetUnderlyingTypeCode (const Type* Type) } else if (IsTypeEnum (Type)) { /* This should not happen, but just in case */ - if (Type->A.P == 0) { + if (Type->A.S == 0) { Internal ("Enum tag type error in GetUnderlyingTypeCode"); } /* Inspect the underlying type of the enum */ - if (((SymEntry*)Type->A.P)->V.E.Type == 0) { + if (Type->A.S->V.E.Type == 0) { /* Incomplete enum type is used */ return Underlying; } - TCode = UnqualifiedType (((SymEntry*)Type->A.P)->V.E.Type->C); + TCode = UnqualifiedType (Type->A.S->V.E.Type->C); /* Replace the type code with integer */ Underlying = (TCode & ~T_MASK_TYPE); @@ -792,7 +792,7 @@ unsigned SizeOf (const Type* T) case T_STRUCT: case T_UNION: - return ((SymEntry*) T->A.P)->V.S.Size; + return T->A.S->V.S.Size; case T_ARRAY: if (T->A.L == UNSPECIFIED) { @@ -925,7 +925,7 @@ unsigned FuncTypeOf (const Type* T) /* Get the code generator flag for calling the function */ { if (GetUnderlyingTypeCode (T) == T_FUNC) { - return (((FuncDesc*) T->A.P)->Flags & FD_VARIADIC) ? 0 : CF_FIXARGC; + return (T->A.F->Flags & FD_VARIADIC) ? 0 : CF_FIXARGC; } else { Error ("Illegal function type %04lX", T->C); return 0; @@ -1121,7 +1121,7 @@ FuncDesc* GetFuncDesc (const Type* T) CHECK (IsClassFunc (T)); /* Get the function descriptor from the type attributes */ - return T->A.P; + return T->A.F; } @@ -1138,7 +1138,7 @@ void SetFuncDesc (Type* T, FuncDesc* F) CHECK (IsClassFunc (T)); /* Set the function descriptor */ - T->A.P = F; + T->A.F = F; } @@ -1226,7 +1226,7 @@ SymEntry* GetESUSymEntry (const Type* T) CHECK (IsClassStruct (T) || IsTypeEnum (T)); /* Return the attribute */ - return T->A.P; + return T->A.S; } @@ -1238,7 +1238,7 @@ void SetESUSymEntry (Type* T, SymEntry* S) CHECK (IsClassStruct (T) || IsTypeEnum (T)); /* Set the attribute */ - T->A.P = S; + T->A.S = S; } diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index e6ff9b7ce..77dad47ac 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -45,8 +45,16 @@ #include "inline.h" #include "mmodel.h" -/* cc65 */ -#include "funcdesc.h" + + +/*****************************************************************************/ +/* Forward declarations */ +/*****************************************************************************/ + + + +typedef struct FuncDesc FuncDesc; +typedef struct SymEntry SymEntry; @@ -56,7 +64,6 @@ - /* Basic data types */ enum { T_END = 0x000000, @@ -153,7 +160,8 @@ typedef struct Type Type; struct Type { TypeCode C; /* Code for this entry */ union { - void* P; /* Arbitrary attribute pointer */ + FuncDesc* F; /* Function description pointer */ + SymEntry* S; /* Enum/struct/union tag symbol entry pointer */ long L; /* Numeric attribute value */ unsigned long U; /* Dito, unsigned */ } A; /* Type attribute if necessary */ diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 0c00f56d4..e15c59d40 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1891,7 +1891,7 @@ static void Declarator (const DeclSpec* Spec, Declaration* D, declmode_t Mode) /* Add the function type. Be sure to bounds check the type buffer */ NeedTypeSpace (D, 1); D->Type[D->Index].C = T_FUNC | Qualifiers; - D->Type[D->Index].A.P = F; + D->Type[D->Index].A.F = F; ++D->Index; /* Qualifiers now used */ diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index 2dd923cf1..f0f7ed36f 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -46,6 +46,7 @@ #include "codegen.h" #include "error.h" #include "expr.h" +#include "funcdesc.h" #include "global.h" #include "litpool.h" #include "scanner.h" diff --git a/src/cc65/symentry.c b/src/cc65/symentry.c index ea08a860c..5bce488c5 100644 --- a/src/cc65/symentry.c +++ b/src/cc65/symentry.c @@ -284,7 +284,7 @@ SymEntry* GetSymType (const Type* T) */ { if ((IsClassStruct (T) || IsTypeEnum (T))) { - return T->A.P; + return T->A.S; } return 0; } diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index 58f41d3ca..f0958d7e0 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -37,6 +37,7 @@ /* cc65 */ #include "error.h" +#include "funcdesc.h" #include "global.h" #include "symtab.h" #include "typecmp.h" diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 8bdef8d03..210f02565 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -42,6 +42,7 @@ #include "declare.h" #include "error.h" #include "expr.h" +#include "funcdesc.h" #include "loadexpr.h" #include "typecmp.h" #include "typeconv.h" From 24d36854d2810c787d81350f9d6beeff3b2df300 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 5 Apr 2021 16:40:32 +0800 Subject: [PATCH 0808/2710] Minor cleanups with array element qualifiers. --- src/cc65/expr.c | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 64980aceb..6a4b44795 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3132,44 +3132,28 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) /* Deal with array ref */ if (DoArrayRef) { - TypeCode Qualifiers = T_QUAL_NONE; - Type* ElementType; - /* Check the types of array and subscript */ if (IsClassPtr (lhst)) { if (!IsClassInt (rhst)) { Error ("Array subscript is not an integer"); ED_MakeConstAbs (Expr, 0, GetCharArrayType (1)); - } else if (IsTypeArray (lhst)) { - Qualifiers = GetQualifier (lhst); } } else if (IsClassInt (lhst)) { if (!IsClassPtr (rhst)) { Error ("Subscripted value is neither array nor pointer"); ED_MakeConstAbs (Expr, 0, GetCharArrayType (1)); - } else if (IsTypeArray (rhst)) { - Qualifiers = GetQualifier (rhst); } } else { Error ("Cannot subscript"); ED_MakeConstAbs (Expr, 0, GetCharArrayType (1)); } - /* The element type has the combined qualifiers from itself and the array, - ** it is a member of (if any). - */ - ElementType = Indirect (Expr->Type); - if (GetQualifier (ElementType) != (GetQualifier (ElementType) | Qualifiers)) { - ElementType = TypeDup (ElementType); - ElementType->C |= Qualifiers; - } - /* The final result is usually an lvalue expression of element type ** referenced in the primary, unless it is once again an array. We can just ** assume the usual case first, and change it later if necessary. */ ED_IndExpr (Expr); - Expr->Type = ElementType; + Expr->Type = Indirect (Expr->Type); /* An array element is actually a variable. So the rules for variables with ** respect to the reference type apply: If it's an array, it is virtually From 328345b9c3e0adb7bc46968acba4184626572331 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 5 Apr 2021 16:40:32 +0800 Subject: [PATCH 0809/2710] Removed a helper function that is no longer used. --- src/cc65/datatype.c | 14 -------------- src/cc65/datatype.h | 5 ----- 2 files changed, 19 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 901e2ce13..393177897 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -948,20 +948,6 @@ Type* Indirect (Type* T) -const Type* IndirectConst (const Type* T) -/* Do one indirection for the given type, that is, return the type where the -** given type points to. -*/ -{ - /* We are expecting a pointer expression */ - CHECK (IsClassPtr (T)); - - /* Skip the pointer or array token itself */ - return T + 1; -} - - - Type* ArrayToPtr (Type* T) /* Convert an array to a pointer to it's first element */ { diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 77dad47ac..de4314347 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -353,11 +353,6 @@ Type* Indirect (Type* T); ** given type points to. */ -const Type* IndirectConst (const Type* T); -/* Do one indirection for the given type, that is, return the type where the -** given type points to. -*/ - Type* ArrayToPtr (Type* T); /* Convert an array to a pointer to it's first element */ From cb64aaf20c6128aa69b95feec5e64de646c167a1 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 5 Apr 2021 16:40:32 +0800 Subject: [PATCH 0810/2710] Made the code more constness-correct with 'Type' usage for inlined std functions. --- src/cc65/stdfunc.c | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index c1fb6c735..117214a24 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -141,7 +141,7 @@ static long ArrayElementCount (const ArgDesc* Arg) -static void ParseArg (ArgDesc* Arg, Type* Type, ExprDesc* Expr) +static void ParseArg (ArgDesc* Arg, const Type* Type, ExprDesc* Expr) /* Parse one argument but do not push it onto the stack. Make all fields in ** Arg valid. */ @@ -212,9 +212,9 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* Handle the memcpy function */ { /* Argument types: (void*, const void*, size_t) */ - static Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_VOID), TYPE(T_END) }; - static Type Arg2Type[] = { TYPE(T_PTR), TYPE(T_VOID|T_QUAL_CONST), TYPE(T_END) }; - static Type Arg3Type[] = { TYPE(T_SIZE_T), TYPE(T_END) }; + static const Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_VOID), TYPE(T_END) }; + static const Type Arg2Type[] = { TYPE(T_PTR), TYPE(T_VOID|T_QUAL_CONST), TYPE(T_END) }; + static const Type Arg3Type[] = { TYPE(T_SIZE_T), TYPE(T_END) }; ArgDesc Arg1, Arg2, Arg3; unsigned ParamSize = 0; @@ -556,9 +556,9 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* Handle the memset function */ { /* Argument types: (void*, int, size_t) */ - static Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_VOID), TYPE(T_END) }; - static Type Arg2Type[] = { TYPE(T_INT), TYPE(T_END) }; - static Type Arg3Type[] = { TYPE(T_SIZE_T), TYPE(T_END) }; + static const Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_VOID), TYPE(T_END) }; + static const Type Arg2Type[] = { TYPE(T_INT), TYPE(T_END) }; + static const Type Arg3Type[] = { TYPE(T_SIZE_T), TYPE(T_END) }; ArgDesc Arg1, Arg2, Arg3; int MemSet = 1; /* Use real memset if true */ @@ -782,8 +782,8 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* Handle the strcmp function */ { /* Argument types: (const char*, const char*) */ - static Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) }; - static Type Arg2Type[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) }; + static const Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) }; + static const Type Arg2Type[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) }; ArgDesc Arg1, Arg2; unsigned ParamSize = 0; @@ -792,10 +792,6 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr) int IsArray; int Offs; - /* Setup the argument type string */ - Arg1Type[1].C = T_CHAR | T_QUAL_CONST; - Arg2Type[1].C = T_CHAR | T_QUAL_CONST; - /* Argument #1 */ ParseArg (&Arg1, Arg1Type, Expr); g_push (Arg1.Flags, Arg1.Expr.IVal); @@ -987,18 +983,14 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* Handle the strcpy function */ { /* Argument types: (char*, const char*) */ - static Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_CHAR), TYPE(T_END) }; - static Type Arg2Type[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) }; + static const Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_CHAR), TYPE(T_END) }; + static const Type Arg2Type[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) }; ArgDesc Arg1, Arg2; unsigned ParamSize = 0; long ECount; unsigned L1; - /* Setup the argument type string */ - Arg1Type[1].C = T_CHAR; - Arg2Type[1].C = T_CHAR | T_QUAL_CONST; - /* Argument #1 */ ParseArg (&Arg1, Arg1Type, Expr); g_push (Arg1.Flags, Arg1.Expr.IVal); @@ -1188,7 +1180,7 @@ ExitPoint: static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* Handle the strlen function */ { - static Type ArgType[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) }; + static const Type ArgType[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) }; ExprDesc Arg; int IsArray; int IsPtr; @@ -1199,9 +1191,6 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ED_Init (&Arg); Arg.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; - /* Setup the argument type string */ - ArgType[1].C = T_CHAR | T_QUAL_CONST; - /* Evaluate the parameter */ hie1 (&Arg); From 9cea9ce5e210fce8fcfc4d0b41cfdd6406fd4b4e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 5 Apr 2021 16:40:32 +0800 Subject: [PATCH 0811/2710] Made the code more constness-correct with 'Type' usage. --- src/cc65/assignment.c | 2 +- src/cc65/datatype.c | 83 +++++++++++++++++++++++++++++-------------- src/cc65/datatype.h | 52 +++++++++++++++------------ src/cc65/declare.c | 8 ++--- src/cc65/expr.c | 32 ++++++++--------- src/cc65/exprdesc.c | 6 ++-- src/cc65/exprdesc.h | 6 ++-- src/cc65/function.c | 2 +- src/cc65/function.h | 4 +-- src/cc65/scanner.h | 2 +- src/cc65/shiftexpr.c | 6 ++-- src/cc65/symentry.c | 2 +- src/cc65/symentry.h | 2 +- src/cc65/typecmp.c | 4 +-- src/cc65/typeconv.c | 10 +++--- 15 files changed, 130 insertions(+), 91 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index c642b4ce9..7ebd2c4e1 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -136,7 +136,7 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) void Assignment (ExprDesc* Expr) /* Parse an assignment */ { - Type* ltype = Expr->Type; + const Type* ltype = Expr->Type; ExprDesc Expr2; ED_Init (&Expr2); diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 393177897..8240a4e60 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -59,18 +59,18 @@ /* Predefined type strings */ -Type type_char[] = { TYPE(T_CHAR), TYPE(T_END) }; -Type type_schar[] = { TYPE(T_SCHAR), TYPE(T_END) }; -Type type_uchar[] = { TYPE(T_UCHAR), TYPE(T_END) }; -Type type_int[] = { TYPE(T_INT), TYPE(T_END) }; -Type type_uint[] = { TYPE(T_UINT), TYPE(T_END) }; -Type type_long[] = { TYPE(T_LONG), TYPE(T_END) }; -Type type_ulong[] = { TYPE(T_ULONG), TYPE(T_END) }; -Type type_bool[] = { TYPE(T_INT), TYPE(T_END) }; -Type type_void[] = { TYPE(T_VOID), TYPE(T_END) }; -Type type_size_t[] = { TYPE(T_SIZE_T), TYPE(T_END) }; -Type type_float[] = { TYPE(T_FLOAT), TYPE(T_END) }; -Type type_double[] = { TYPE(T_DOUBLE), TYPE(T_END) }; +const Type type_char[] = { TYPE(T_CHAR), TYPE(T_END) }; +const Type type_schar[] = { TYPE(T_SCHAR), TYPE(T_END) }; +const Type type_uchar[] = { TYPE(T_UCHAR), TYPE(T_END) }; +const Type type_int[] = { TYPE(T_INT), TYPE(T_END) }; +const Type type_uint[] = { TYPE(T_UINT), TYPE(T_END) }; +const Type type_long[] = { TYPE(T_LONG), TYPE(T_END) }; +const Type type_ulong[] = { TYPE(T_ULONG), TYPE(T_END) }; +const Type type_bool[] = { TYPE(T_INT), TYPE(T_END) }; +const Type type_void[] = { TYPE(T_VOID), TYPE(T_END) }; +const Type type_size_t[] = { TYPE(T_SIZE_T), TYPE(T_END) }; +const Type type_float[] = { TYPE(T_FLOAT), TYPE(T_END) }; +const Type type_double[] = { TYPE(T_DOUBLE), TYPE(T_END) }; @@ -559,7 +559,8 @@ static unsigned TypeOfBySize (const Type* Type) } -Type* PointerTo (const Type* T) + +Type* NewPointerTo (const Type* T) /* Return a type string that is "pointer to T". The type string is allocated ** on the heap and may be freed after use. */ @@ -590,7 +591,7 @@ void PrintType (FILE* F, const Type* T) -void PrintFuncSig (FILE* F, const char* Name, Type* T) +void PrintFuncSig (FILE* F, const char* Name, const Type* T) /* Print a function signature */ { StrBuf Buf = AUTO_STRBUF_INITIALIZER; @@ -713,7 +714,6 @@ TypeCode GetUnderlyingTypeCode (const Type* Type) return IS_Get (&SignedChars) ? T_SCHAR : T_UCHAR; } else if (IsTypeEnum (Type)) { - /* This should not happen, but just in case */ if (Type->A.S == 0) { Internal ("Enum tag type error in GetUnderlyingTypeCode"); @@ -934,7 +934,7 @@ unsigned FuncTypeOf (const Type* T) -Type* Indirect (Type* T) +const Type* Indirect (const Type* T) /* Do one indirection for the given type, that is, return the type where the ** given type points to. */ @@ -948,11 +948,25 @@ Type* Indirect (Type* T) -Type* ArrayToPtr (Type* T) +Type* IndirectModifiable (Type* T) +/* Do one indirection for the given type, that is, return the type where the +** given type points to. +*/ +{ + /* We are expecting a pointer expression */ + CHECK (IsClassPtr (T)); + + /* Skip the pointer or array token itself */ + return T + 1; +} + + + +Type* ArrayToPtr (const Type* T) /* Convert an array to a pointer to it's first element */ { /* Return pointer to first element */ - return PointerTo (GetElementType (T)); + return NewPointerTo (GetElementType (T)); } @@ -1129,7 +1143,7 @@ void SetFuncDesc (Type* T, FuncDesc* F) -Type* GetFuncReturn (Type* T) +const Type* GetFuncReturn (const Type* T) /* Return a pointer to the return type of a function or pointer-to-function type */ { if (UnqualifiedType (T->C) == T_PTR) { @@ -1146,10 +1160,27 @@ Type* GetFuncReturn (Type* T) -FuncDesc* GetFuncDefinitionDesc (Type* T) +Type* GetFuncReturnModifiable (Type* T) +/* Return a non-const pointer to the return type of a function or pointer-to-function type */ +{ + if (UnqualifiedType (T->C) == T_PTR) { + /* Pointer to function */ + ++T; + } + + /* Be sure it's a function type */ + CHECK (IsClassFunc (T)); + + /* Return a pointer to the return type */ + return T + 1; +} + + + +const FuncDesc* GetFuncDefinitionDesc (const Type* T) /* Get the function descriptor of the function definition */ { - FuncDesc* D; + const FuncDesc* D; /* Be sure it's a function type */ CHECK (IsClassFunc (T)); @@ -1182,7 +1213,7 @@ void SetElementCount (Type* T, long Count) -Type* GetElementType (Type* T) +const Type* GetElementType (const Type* T) /* Return the element type of the given array type. */ { CHECK (IsTypeArray (T)); @@ -1191,7 +1222,7 @@ Type* GetElementType (Type* T) -Type* GetBaseElementType (Type* T) +const Type* GetBaseElementType (const Type* T) /* Return the base element type of a given type. If T is not an array, this ** will return. Otherwise it will return the base element type, which means ** the element type that is not an array. @@ -1229,7 +1260,7 @@ void SetESUSymEntry (Type* T, SymEntry* S) -Type* IntPromotion (Type* T) +const Type* IntPromotion (const Type* T) /* Apply the integer promotions to T and return the result. The returned type ** string may be T if there is no need to change it. */ @@ -1268,14 +1299,14 @@ Type* IntPromotion (Type* T) -Type* PtrConversion (Type* T) +const Type* PtrConversion (const Type* T) /* If the type is a function, convert it to pointer to function. If the ** expression is an array, convert it to pointer to first element. Otherwise ** return T. */ { if (IsTypeFunc (T)) { - return PointerTo (T); + return NewPointerTo (T); } else if (IsTypeArray (T)) { return ArrayToPtr (T); } else { diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index de4314347..b65cbdd05 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -198,18 +198,18 @@ struct Type { #define PTR_BITS (8 * SIZEOF_PTR) /* Predefined type strings */ -extern Type type_char[]; -extern Type type_schar[]; -extern Type type_uchar[]; -extern Type type_int[]; -extern Type type_uint[]; -extern Type type_long[]; -extern Type type_ulong[]; -extern Type type_bool[]; -extern Type type_void[]; -extern Type type_size_t[]; -extern Type type_float[]; -extern Type type_double[]; +extern const Type type_char[]; +extern const Type type_schar[]; +extern const Type type_uchar[]; +extern const Type type_int[]; +extern const Type type_uint[]; +extern const Type type_long[]; +extern const Type type_ulong[]; +extern const Type type_bool[]; +extern const Type type_void[]; +extern const Type type_size_t[]; +extern const Type type_float[]; +extern const Type type_double[]; /* Forward for the SymEntry struct */ struct SymEntry; @@ -280,7 +280,7 @@ unsigned long GetIntegerTypeMax (const Type* Type); ** The type must have a known size. */ -Type* PointerTo (const Type* T); +Type* NewPointerTo (const Type* T); /* Return a type string that is "pointer to T". The type string is allocated ** on the heap and may be freed after use. */ @@ -288,7 +288,7 @@ Type* PointerTo (const Type* T); void PrintType (FILE* F, const Type* T); /* Print fulle name of the type */ -void PrintFuncSig (FILE* F, const char* Name, Type* T); +void PrintFuncSig (FILE* F, const char* Name, const Type* T); /* Print a function signature */ void PrintRawType (FILE* F, const Type* T); @@ -348,12 +348,17 @@ unsigned TypeOf (const Type* T); unsigned FuncTypeOf (const Type* T); /* Get the code generator flag for calling the function */ -Type* Indirect (Type* T); +const Type* Indirect (const Type* T); /* Do one indirection for the given type, that is, return the type where the ** given type points to. */ -Type* ArrayToPtr (Type* T); +Type* IndirectModifiable (Type* T); +/* Do one indirection for the given type, that is, return the type where the +** given type points to. +*/ + +Type* ArrayToPtr (const Type* T); /* Convert an array to a pointer to it's first element */ #if defined(HAVE_INLINE) @@ -845,10 +850,13 @@ FuncDesc* GetFuncDesc (const Type* T) attribute ((const)); void SetFuncDesc (Type* T, FuncDesc* F); /* Set the FuncDesc pointer in a function or pointer-to-function type */ -Type* GetFuncReturn (Type* T) attribute ((const)); +const Type* GetFuncReturn (const Type* T) attribute ((const)); /* Return a pointer to the return type of a function or pointer-to-function type */ -FuncDesc* GetFuncDefinitionDesc (struct Type* T); +Type* GetFuncReturnModifiable (Type* T) attribute ((const)); +/* Return a non-const pointer to the return type of a function or pointer-to-function type */ + +const FuncDesc* GetFuncDefinitionDesc (const Type* T) attribute ((const)); /* Get the function descriptor of the function definition */ long GetElementCount (const Type* T); @@ -861,10 +869,10 @@ void SetElementCount (Type* T, long Count); ** array type). */ -Type* GetElementType (Type* T); +const Type* GetElementType (const Type* T); /* Return the element type of the given array type. */ -Type* GetBaseElementType (Type* T); +const Type* GetBaseElementType (const Type* T); /* Return the base element type of a given type. If T is not an array, this ** will return. Otherwise it will return the base element type, which means ** the element type that is not an array. @@ -876,12 +884,12 @@ struct SymEntry* GetESUSymEntry (const Type* T) attribute ((const)); void SetESUSymEntry (Type* T, struct SymEntry* S); /* Set the SymEntry pointer for an enum/struct/union type */ -Type* IntPromotion (Type* T); +const Type* IntPromotion (const Type* T); /* Apply the integer promotions to T and return the result. The returned type ** string may be T if there is no need to change it. */ -Type* PtrConversion (Type* T); +const Type* PtrConversion (const Type* T); /* If the type is a function, convert it to pointer to function. If the ** expression is an array, convert it to pointer to first element. Otherwise ** return T. diff --git a/src/cc65/declare.c b/src/cc65/declare.c index e15c59d40..0868c2082 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1510,7 +1510,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, -static Type* ParamTypeCvt (Type* T) +static const Type* ParamTypeCvt (Type* T) /* If T is an array or a function, convert it to a pointer else do nothing. ** Return the resulting type. */ @@ -1520,7 +1520,7 @@ static Type* ParamTypeCvt (Type* T) if (IsTypeArray (T)) { Tmp = ArrayToPtr (T); } else if (IsTypeFunc (T)) { - Tmp = PointerTo (T); + Tmp = NewPointerTo (T); } if (Tmp != 0) { @@ -2017,7 +2017,7 @@ void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode) if (IsTypeFunc (D->Type) || IsTypeFuncPtr (D->Type)) { /* A function. Check the return type */ - Type* RetType = GetFuncReturn (D->Type); + Type* RetType = GetFuncReturnModifiable (D->Type); /* Functions may not return functions or arrays */ if (IsTypeFunc (RetType)) { @@ -2343,7 +2343,7 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) int HasCurly = 0; /* Get the array data */ - Type* ElementType = GetElementType (T); + Type* ElementType = IndirectModifiable (T); unsigned ElementSize = SizeOf (ElementType); long ElementCount = GetElementCount (T); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 6a4b44795..c0a9081f9 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -150,7 +150,7 @@ void MarkedExprWithCheck (void (*Func) (ExprDesc*), ExprDesc* Expr) -static Type* ArithmeticConvert (Type* lhst, Type* rhst) +static const Type* ArithmeticConvert (const Type* lhst, const Type* rhst) /* Perform the usual arithmetic conversions for binary operators. */ { /* https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.5 @@ -209,7 +209,7 @@ static Type* ArithmeticConvert (Type* lhst, Type* rhst) -static unsigned typeadjust (ExprDesc* lhs, ExprDesc* rhs, int NoPush) +static unsigned typeadjust (ExprDesc* lhs, const ExprDesc* rhs, int NoPush) /* Adjust the two values for a binary operation. lhs is expected on stack or ** to be constant, rhs is expected to be in the primary register or constant. ** The function will put the type of the result into lhs and return the @@ -223,8 +223,8 @@ static unsigned typeadjust (ExprDesc* lhs, ExprDesc* rhs, int NoPush) unsigned flags; /* Get the type strings */ - Type* lhst = lhs->Type; - Type* rhst = rhs->Type; + const Type* lhst = lhs->Type; + const Type* rhst = rhs->Type; /* Generate type adjustment code if needed */ ltype = TypeOf (lhst); @@ -865,7 +865,7 @@ static void FunctionCall (ExprDesc* Expr) int PtrOffs = 0; /* Offset of function pointer on stack */ int IsFastcall = 0; /* True if we are fast-calling the function */ int PtrOnStack = 0; /* True if a pointer copy is on stack */ - Type* ReturnType; + const Type* ReturnType; /* Skip the left paren */ NextToken (); @@ -1121,7 +1121,7 @@ static void Primary (ExprDesc* E) /* output its label */ E->Flags = E_RTYPE_RVAL | E_LOC_CODE | E_ADDRESS_OF; E->Name = Entry->V.L.Label; - E->Type = PointerTo (type_void); + E->Type = NewPointerTo (type_void); NextToken (); } else { Error ("Computed gotos are a C extension, not supported with this --standard"); @@ -2052,7 +2052,7 @@ void hie10 (ExprDesc* Expr) /* The & operator yields an rvalue address */ ED_AddrExpr (Expr); } - Expr->Type = PointerTo (Expr->Type); + Expr->Type = NewPointerTo (Expr->Type); break; case TOK_SIZEOF: @@ -2380,7 +2380,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ /* If lhs is a function, convert it to pointer to function */ if (IsTypeFunc (Expr->Type)) { - Expr->Type = PointerTo (Expr->Type); + Expr->Type = NewPointerTo (Expr->Type); } /* Get the lhs on stack */ @@ -2402,7 +2402,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ /* If rhs is a function, convert it to pointer to function */ if (IsTypeFunc (Expr2.Type)) { - Expr2.Type = PointerTo (Expr2.Type); + Expr2.Type = NewPointerTo (Expr2.Type); } /* Check for a numeric constant expression */ @@ -2792,8 +2792,8 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) ExprDesc Expr2; unsigned flags; /* Operation flags */ CodeMark Mark; /* Remember code position */ - Type* lhst; /* Type of left hand side */ - Type* rhst; /* Type of right hand side */ + const Type* lhst; /* Type of left hand side */ + const Type* rhst; /* Type of right hand side */ int lscale; int rscale; int AddDone; /* No need to generate runtime code */ @@ -3189,8 +3189,8 @@ static void parsesub (ExprDesc* Expr) { ExprDesc Expr2; unsigned flags; /* Operation flags */ - Type* lhst; /* Type of left hand side */ - Type* rhst; /* Type of right hand side */ + const Type* lhst; /* Type of left hand side */ + const Type* rhst; /* Type of right hand side */ CodeMark Mark1; /* Save position of output queue */ CodeMark Mark2; /* Another position in the queue */ int rscale; /* Scale factor for pointer arithmetics */ @@ -4102,10 +4102,10 @@ static void hieQuest (ExprDesc* Expr) ** appropriately qualified void. */ if (IsTypeVoid (Indirect (Expr2.Type))) { - ResultType = PointerTo (Indirect (Expr2.Type)); + ResultType = NewPointerTo (Indirect (Expr2.Type)); ResultType[1].C |= GetQualifier (Indirect (Expr3.Type)); } else if (IsTypeVoid (Indirect (Expr3.Type))) { - ResultType = PointerTo (Indirect (Expr3.Type)); + ResultType = NewPointerTo (Indirect (Expr3.Type)); ResultType[1].C |= GetQualifier (Indirect (Expr2.Type)); } else { /* Must point to compatible types */ @@ -4113,7 +4113,7 @@ static void hieQuest (ExprDesc* Expr) TypeCompatibilityDiagnostic (Expr2.Type, Expr3.Type, 1, "Incompatible pointer types in ternary: '%s' and '%s'"); /* Avoid further errors */ - ResultType = PointerTo (type_void); + ResultType = NewPointerTo (type_void); } else { /* Result has the composite type */ ResultType = TypeDup (Expr2.Type); diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index d1113d9a5..1d4fd6872 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -228,7 +228,7 @@ int ED_GetStackOffs (const ExprDesc* Expr, int Offs) -ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, Type* Type) +ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, const Type* Type) /* Replace Expr with an absolute const with the given value and type */ { Expr->Sym = 0; @@ -595,10 +595,10 @@ void PrintExprDesc (FILE* F, ExprDesc* E) -Type* ReplaceType (ExprDesc* Expr, const Type* NewType) +const Type* ReplaceType (ExprDesc* Expr, const Type* NewType) /* Replace the type of Expr by a copy of Newtype and return the old type string */ { - Type* OldType = Expr->Type; + const Type* OldType = Expr->Type; Expr->Type = TypeDup (NewType); return OldType; } diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index a4f5eb848..a46685b59 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -199,7 +199,7 @@ struct Literal; typedef struct ExprDesc ExprDesc; struct ExprDesc { struct SymEntry* Sym; /* Symbol table entry if known */ - Type* Type; /* Type array of expression */ + const Type* Type; /* Type array of expression */ unsigned Flags; uintptr_t Name; /* Name pointer or label number */ long IVal; /* Integer value if expression constant */ @@ -544,7 +544,7 @@ int ED_GetStackOffs (const ExprDesc* Expr, int Offs); ** an additional offset in Offs. */ -ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, Type* Type); +ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, const Type* Type); /* Replace Expr with an absolute const with the given value and type */ ExprDesc* ED_MakeConstAbsInt (ExprDesc* Expr, long Value); @@ -685,7 +685,7 @@ int ED_IsBool (const ExprDesc* Expr); void PrintExprDesc (FILE* F, ExprDesc* Expr); /* Print an ExprDesc */ -Type* ReplaceType (ExprDesc* Expr, const Type* NewType); +const Type* ReplaceType (ExprDesc* Expr, const Type* NewType); /* Replace the type of Expr by a copy of Newtype and return the old type string */ diff --git a/src/cc65/function.c b/src/cc65/function.c index cad1df629..4e61cc1d3 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -191,7 +191,7 @@ unsigned F_GetParamSize (const Function* F) -Type* F_GetReturnType (Function* F) +const Type* F_GetReturnType (Function* F) /* Get the return type for the function */ { return F->ReturnType; diff --git a/src/cc65/function.h b/src/cc65/function.h index 825257a60..f7f83cdc8 100644 --- a/src/cc65/function.h +++ b/src/cc65/function.h @@ -54,7 +54,7 @@ typedef enum { /* Structure that holds all data needed for function activation */ struct Function { struct SymEntry* FuncEntry; /* Symbol table entry */ - Type* ReturnType; /* Function return type */ + const Type* ReturnType; /* Function return type */ FuncDesc* Desc; /* Function descriptor */ int Reserved; /* Reserved local space */ unsigned RetLab; /* Return code label */ @@ -96,7 +96,7 @@ unsigned F_GetParamCount (const Function* F); unsigned F_GetParamSize (const Function* F); /* Return the parameter size for the current function */ -Type* F_GetReturnType (Function* F); +const Type* F_GetReturnType (Function* F); /* Get the return type for the function */ int F_HasVoidReturn (const Function* F); diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h index 1c95b3d33..e6a362bf3 100644 --- a/src/cc65/scanner.h +++ b/src/cc65/scanner.h @@ -205,7 +205,7 @@ struct Token { struct Literal* SVal; /* String literal is any */ ident Ident; /* Identifier if IDENT */ LineInfo* LI; /* Source line where the token comes from */ - Type* Type; /* Type if integer or float constant */ + const Type* Type; /* Type if integer or float constant */ }; extern Token CurTok; /* The current token */ diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c index d7b43dde2..168574a1b 100644 --- a/src/cc65/shiftexpr.c +++ b/src/cc65/shiftexpr.c @@ -64,8 +64,8 @@ void ShiftExpr (struct ExprDesc* Expr) CodeMark Mark1; CodeMark Mark2; token_t Tok; /* The operator token */ - Type* EffType; /* Effective lhs type */ - Type* ResultType; /* Type of the result */ + const Type* EffType; /* Effective lhs type */ + const Type* ResultType; /* Type of the result */ unsigned ExprBits; /* Bits of the lhs operand */ unsigned GenFlags; /* Generator flags */ unsigned ltype; @@ -193,7 +193,7 @@ void ShiftExpr (struct ExprDesc* Expr) ED_IsLocQuasiConst (Expr) && Expr2.IVal >= 8) { - Type* OldType; + const Type* OldType; /* Increase the address by one and decrease the shift count */ ++Expr->IVal; diff --git a/src/cc65/symentry.c b/src/cc65/symentry.c index 5bce488c5..cc790c931 100644 --- a/src/cc65/symentry.c +++ b/src/cc65/symentry.c @@ -311,7 +311,7 @@ const char* GetSymTypeName (const Type* T) -void ChangeSymType (SymEntry* Entry, Type* T) +void ChangeSymType (SymEntry* Entry, const Type* T) /* Change the type of the given symbol */ { TypeFree (Entry->Type); diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 0224507ac..56d884bb6 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -325,7 +325,7 @@ const char* GetSymTypeName (const Type* T); ** Note: This may use a static buffer that could be overwritten by other calls. */ -void ChangeSymType (SymEntry* Entry, Type* T); +void ChangeSymType (SymEntry* Entry, const Type* T); /* Change the type of the given symbol */ void ChangeAsmName (SymEntry* Entry, const char* NewAsmName); diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index f0958d7e0..8c9da3445 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -67,8 +67,8 @@ static int EqualFuncParams (const FuncDesc* F1, const FuncDesc* F2) while (Sym1 && (Sym1->Flags & SC_PARAM) && Sym2 && (Sym2->Flags & SC_PARAM)) { /* Get the symbol types */ - Type* Type1 = Sym1->Type; - Type* Type2 = Sym2->Type; + const Type* Type1 = Sym1->Type; + const Type* Type2 = Sym2->Type; /* If either of both functions is old style, apply the default ** promotions to the parameter type. diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 210f02565..16f173cc4 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -58,9 +58,9 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) /* Emit code to convert the given expression to a new type. */ { - Type* OldType; - unsigned OldBits; - unsigned NewBits; + const Type* OldType; + unsigned OldBits; + unsigned NewBits; /* Remember the old type */ @@ -371,8 +371,8 @@ static void ComposeFuncParamList (const FuncDesc* F1, const FuncDesc* F2) while (Sym1 && (Sym1->Flags & SC_PARAM) && Sym2 && (Sym2->Flags & SC_PARAM)) { /* Get the symbol types */ - Type* Type1 = Sym1->Type; - Type* Type2 = Sym2->Type; + const Type* Type1 = Sym1->Type; + const Type* Type2 = Sym2->Type; /* If either of both functions is old style, apply the default ** promotions to the parameter type. From f901adba2212cf00f5abc3d23d3726731e05fa6f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 5 Apr 2021 16:40:32 +0800 Subject: [PATCH 0812/2710] Predefined type strings for inlined std function parameters. --- src/cc65/datatype.c | 6 ++++++ src/cc65/datatype.h | 10 ++++++++++ src/cc65/stdfunc.c | 22 +++++++++++----------- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 8240a4e60..9e52027ce 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -72,6 +72,12 @@ const Type type_size_t[] = { TYPE(T_SIZE_T), TYPE(T_END) }; const Type type_float[] = { TYPE(T_FLOAT), TYPE(T_END) }; const Type type_double[] = { TYPE(T_DOUBLE), TYPE(T_END) }; +/* More predefined type strings */ +const Type type_char_p[] = { TYPE(T_PTR), TYPE(T_CHAR), TYPE(T_END) }; +const Type type_c_char_p[] = { TYPE(T_PTR), TYPE(T_C_CHAR), TYPE(T_END) }; +const Type type_void_p[] = { TYPE(T_PTR), TYPE(T_VOID), TYPE(T_END) }; +const Type type_c_void_p[] = { TYPE(T_PTR), TYPE(T_C_VOID), TYPE(T_END) }; + /*****************************************************************************/ diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index b65cbdd05..1140ee498 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -146,6 +146,10 @@ enum { T_PTR = T_TYPE_PTR | T_CLASS_PTR | T_SIGN_NONE | T_SIZE_NONE, T_FUNC = T_TYPE_FUNC | T_CLASS_FUNC | T_SIGN_NONE | T_SIZE_NONE, + /* More types for convenience */ + T_C_CHAR = T_CHAR | T_QUAL_CONST, + T_C_VOID = T_VOID | T_QUAL_CONST, + /* Aliases */ T_SIZE_T = T_UINT, }; @@ -211,6 +215,12 @@ extern const Type type_size_t[]; extern const Type type_float[]; extern const Type type_double[]; +/* More predefined type strings */ +extern const Type type_char_p[]; +extern const Type type_c_char_p[]; +extern const Type type_void_p[]; +extern const Type type_c_void_p[]; + /* Forward for the SymEntry struct */ struct SymEntry; diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index 117214a24..bdc7be006 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -212,9 +212,9 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* Handle the memcpy function */ { /* Argument types: (void*, const void*, size_t) */ - static const Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_VOID), TYPE(T_END) }; - static const Type Arg2Type[] = { TYPE(T_PTR), TYPE(T_VOID|T_QUAL_CONST), TYPE(T_END) }; - static const Type Arg3Type[] = { TYPE(T_SIZE_T), TYPE(T_END) }; + static const Type* Arg1Type = type_void_p; + static const Type* Arg2Type = type_c_void_p; + static const Type* Arg3Type = type_size_t; ArgDesc Arg1, Arg2, Arg3; unsigned ParamSize = 0; @@ -556,9 +556,9 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* Handle the memset function */ { /* Argument types: (void*, int, size_t) */ - static const Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_VOID), TYPE(T_END) }; - static const Type Arg2Type[] = { TYPE(T_INT), TYPE(T_END) }; - static const Type Arg3Type[] = { TYPE(T_SIZE_T), TYPE(T_END) }; + static const Type* Arg1Type = type_void_p; + static const Type* Arg2Type = type_int; + static const Type* Arg3Type = type_size_t; ArgDesc Arg1, Arg2, Arg3; int MemSet = 1; /* Use real memset if true */ @@ -782,8 +782,8 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* Handle the strcmp function */ { /* Argument types: (const char*, const char*) */ - static const Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) }; - static const Type Arg2Type[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) }; + static const Type* Arg1Type = type_c_char_p; + static const Type* Arg2Type = type_c_char_p; ArgDesc Arg1, Arg2; unsigned ParamSize = 0; @@ -983,8 +983,8 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* Handle the strcpy function */ { /* Argument types: (char*, const char*) */ - static const Type Arg1Type[] = { TYPE(T_PTR), TYPE(T_CHAR), TYPE(T_END) }; - static const Type Arg2Type[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) }; + static const Type* Arg1Type = type_char_p; + static const Type* Arg2Type = type_c_char_p; ArgDesc Arg1, Arg2; unsigned ParamSize = 0; @@ -1180,7 +1180,7 @@ ExitPoint: static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* Handle the strlen function */ { - static const Type ArgType[] = { TYPE(T_PTR), TYPE(T_CHAR|T_QUAL_CONST), TYPE(T_END) }; + static const Type* ArgType = type_c_char_p; ExprDesc Arg; int IsArray; int IsPtr; From fd3d5d35fb4d7fb0f38508f3593f892ad301a8ff Mon Sep 17 00:00:00 2001 From: Marco Aurelio da Costa <costa@gamic.com> Date: Sun, 18 Apr 2021 17:24:29 -0300 Subject: [PATCH 0813/2710] mc: Implemented .LITERAL --- doc/ca65.sgml | 34 ++++++++++++++++++++++++++++++---- src/ca65/pseudo.c | 29 +++++++++++++++++++++++++---- src/ca65/scanner.c | 1 + src/ca65/token.h | 1 + 4 files changed, 57 insertions(+), 8 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index ebd6c7135..f3a3c218f 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -2084,7 +2084,11 @@ Here's a list of all control commands and a description, what they do: This will put the string "Hello world" followed by a binary zero into the current segment. There may be more strings separated by commas, but - the binary zero is only appended once (after the last one). + the binary zero is only appended once (after the last one). Strings will + be translated using the current character mapping definition. + +See: <tt><ref id=".BYTE" name=".BYTE"></tt>,<tt><ref id=".CHARMAP" name=".CHARMAP"></tt>, + <tt><ref id=".LITERAL" name=".LITERAL"></tt> <sect1><tt>.ASSERT</tt><label id=".ASSERT"><p> @@ -2180,7 +2184,8 @@ Here's a list of all control commands and a description, what they do: <sect1><tt>.BYT, .BYTE</tt><label id=".BYTE"><p> Define byte sized data. Must be followed by a sequence of (byte ranged) - expressions or strings. + expressions or strings. Strings will be translated using the current + character mapping definition. Example: @@ -2189,6 +2194,9 @@ Here's a list of all control commands and a description, what they do: .byt "world", $0D, $00 </verb></tscreen> +See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CHARMAP"></tt> + <tt><ref id=".LITERAL" name=".LITERAL"></tt> + <sect1><tt>.CASE</tt><label id=".CASE"><p> @@ -2207,8 +2215,10 @@ Here's a list of all control commands and a description, what they do: <sect1><tt>.CHARMAP</tt><label id=".CHARMAP"><p> - Apply a custom mapping for characters. The command is followed by two - numbers. The first one is the index of the source character (range 0..255); + Apply a custom mapping for characters for the commands <tt><ref id=".ASCIIZ" + name=".ASCIIZ"></tt> and <tt><ref id=".BYTE" name=".BYTE"></tt>. The command + is followed by two numbers. The first one is the index of the source character + (range 0..255); the second one is the mapping (range 0..255). The mapping applies to all character and string constants <em/when/ they generate output; and, overrides a mapping table specified with the <tt><ref id="option-t" name="-t"></tt> @@ -3356,6 +3366,22 @@ Here's a list of all control commands and a description, what they do: </verb></tscreen> +<sect1><tt>.LITERAL</tt><label id=".LITERAL"><p> + + Define byte sized data. Must be followed by a sequence of (byte ranged) + expressions or strings. Strings will disregard the current character + mapping definition and will be interpreted literally. + + Example: + + <tscreen><verb> + .literal "Hello " + .literal "world", $0D, $00 + </verb></tscreen> + +See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE"></tt> + + <sect1><tt>.LOBYTES</tt><label id=".LOBYTES"><p> Define byte sized data by extracting only the low byte (that is, bits 0-7) from diff --git a/src/ca65/pseudo.c b/src/ca65/pseudo.c index df0482a5a..7e24d814d 100644 --- a/src/ca65/pseudo.c +++ b/src/ca65/pseudo.c @@ -566,8 +566,8 @@ static void DoBss (void) -static void DoByte (void) -/* Define bytes */ +static void DoByteBase (int EnableTranslation) +/* Define bytes or literals */ { /* Element type for the generated array */ static const char EType[1] = { GT_BYTE }; @@ -579,8 +579,12 @@ static void DoByte (void) /* Parse arguments */ while (1) { if (CurTok.Tok == TOK_STRCON) { - /* A string, translate into target charset and emit */ - TgtTranslateStrBuf (&CurTok.SVal); + /* A string, translate into target charset + if appropriate */ + if (EnableTranslation) { + TgtTranslateStrBuf (&CurTok.SVal); + } + /* Emit */ EmitStrBuf (&CurTok.SVal); NextTok (); } else { @@ -613,6 +617,14 @@ static void DoByte (void) +static void DoByte (void) +/* Define bytes with translation */ +{ + DoByteBase (1); +} + + + static void DoCase (void) /* Switch the IgnoreCase option */ { @@ -1415,6 +1427,14 @@ static void DoList (void) +static void DoLiteral (void) +/* Define bytes without translation */ +{ + DoByteBase (0); +} + + + static void DoLoBytes (void) /* Define bytes, extracting the lo byte from each expression in the list */ { @@ -2103,6 +2123,7 @@ static CtrlDesc CtrlCmdTab [] = { { ccNone, DoLineCont }, { ccNone, DoList }, { ccNone, DoListBytes }, + { ccNone, DoLiteral }, { ccNone, DoUnexpected }, /* .LOBYTE */ { ccNone, DoLoBytes }, { ccNone, DoUnexpected }, /* .LOCAL */ diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c index 0452bb368..0a7d433b2 100644 --- a/src/ca65/scanner.c +++ b/src/ca65/scanner.c @@ -234,6 +234,7 @@ struct DotKeyword { { ".LINECONT", TOK_LINECONT }, { ".LIST", TOK_LIST }, { ".LISTBYTES", TOK_LISTBYTES }, + { ".LITERAL", TOK_LITERAL }, { ".LOBYTE", TOK_LOBYTE }, { ".LOBYTES", TOK_LOBYTES }, { ".LOCAL", TOK_LOCAL }, diff --git a/src/ca65/token.h b/src/ca65/token.h index a94254bfd..02fc8d491 100644 --- a/src/ca65/token.h +++ b/src/ca65/token.h @@ -210,6 +210,7 @@ typedef enum token_t { TOK_LINECONT, TOK_LIST, TOK_LISTBYTES, + TOK_LITERAL, TOK_LOBYTE, TOK_LOBYTES, TOK_LOCAL, From f272bc8f42ebe26b7bab8e44665957eb690dfcf3 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Mon, 19 Apr 2021 15:50:52 +0200 Subject: [PATCH 0814/2710] Removed non-ASCII chars. --- asminc/joy-kernel.inc | 2 +- include/fcntl.h | 2 +- include/mouse/mouse-kernel.h | 2 +- include/signal.h | 2 +- src/ar65/error.c | 2 +- src/ca65/enum.h | 2 +- src/ca65/struct.h | 2 +- src/cc65/loadexpr.h | 2 +- src/cc65/loop.c | 2 +- src/cc65/loop.h | 2 +- src/cc65/preproc.h | 2 +- src/cc65/shiftexpr.h | 2 +- src/cc65/stackptr.c | 2 +- src/cc65/stackptr.h | 2 +- src/cc65/testexpr.c | 2 +- src/common/inline.h | 2 +- src/common/strstack.c | 2 +- src/common/strstack.h | 2 +- src/common/xmalloc.h | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/asminc/joy-kernel.inc b/asminc/joy-kernel.inc index ef729fe3c..791934197 100644 --- a/asminc/joy-kernel.inc +++ b/asminc/joy-kernel.inc @@ -7,7 +7,7 @@ ;/* */ ;/* */ ;/* (C) 2002-2006, Ullrich von Bassewitz */ -;/* Römerstraße 52 */ +;/* Roemerstrasse 52 */ ;/* D-70794 Filderstadt */ ;/* EMail: uz@cc65.org */ ;/* */ diff --git a/include/fcntl.h b/include/fcntl.h index 0d2398315..a1121159d 100644 --- a/include/fcntl.h +++ b/include/fcntl.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2004 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/include/mouse/mouse-kernel.h b/include/mouse/mouse-kernel.h index f024b0926..e2d2ced10 100644 --- a/include/mouse/mouse-kernel.h +++ b/include/mouse/mouse-kernel.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003-2006, Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/include/signal.h b/include/signal.h index 5cb63fcae..0d5f6ad09 100644 --- a/include/signal.h +++ b/include/signal.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2002-2005, Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/ar65/error.c b/src/ar65/error.c index 47ee90aa5..7f1e0f611 100644 --- a/src/ar65/error.c +++ b/src/ar65/error.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/ca65/enum.h b/src/ca65/enum.h index 7d73a97b8..b954588dd 100644 --- a/src/ca65/enum.h +++ b/src/ca65/enum.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/ca65/struct.h b/src/ca65/struct.h index 1fdaf9d60..e927c477c 100644 --- a/src/ca65/struct.h +++ b/src/ca65/struct.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/cc65/loadexpr.h b/src/cc65/loadexpr.h index 3f13311f1..c9e70e1f6 100644 --- a/src/cc65/loadexpr.h +++ b/src/cc65/loadexpr.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2004 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/cc65/loop.c b/src/cc65/loop.c index f6c53ddc4..cc8ccdec9 100644 --- a/src/cc65/loop.c +++ b/src/cc65/loop.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2004 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/cc65/loop.h b/src/cc65/loop.h index fa2859f61..1174443b4 100644 --- a/src/cc65/loop.h +++ b/src/cc65/loop.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2004 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/cc65/preproc.h b/src/cc65/preproc.h index 1487179f4..78a91a590 100644 --- a/src/cc65/preproc.h +++ b/src/cc65/preproc.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2004 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/cc65/shiftexpr.h b/src/cc65/shiftexpr.h index 2a000fd58..1f1a8c283 100644 --- a/src/cc65/shiftexpr.h +++ b/src/cc65/shiftexpr.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2004 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/cc65/stackptr.c b/src/cc65/stackptr.c index 1f10e8500..1381d68b4 100644 --- a/src/cc65/stackptr.c +++ b/src/cc65/stackptr.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2004-2006 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/cc65/stackptr.h b/src/cc65/stackptr.h index 4f90f8dcc..4e5ea732e 100644 --- a/src/cc65/stackptr.h +++ b/src/cc65/stackptr.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2004-2006 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/cc65/testexpr.c b/src/cc65/testexpr.c index 243f3ebf9..bad8b95f1 100644 --- a/src/cc65/testexpr.c +++ b/src/cc65/testexpr.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2004 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/common/inline.h b/src/common/inline.h index b90b3d1f4..2453547ac 100644 --- a/src/common/inline.h +++ b/src/common/inline.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2001-2005 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/common/strstack.c b/src/common/strstack.c index 508af178e..29dd10426 100644 --- a/src/common/strstack.c +++ b/src/common/strstack.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2004 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/common/strstack.h b/src/common/strstack.h index d29a47993..b0ff22bfb 100644 --- a/src/common/strstack.h +++ b/src/common/strstack.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2004 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/common/xmalloc.h b/src/common/xmalloc.h index eb196b6a1..fc919a16f 100644 --- a/src/common/xmalloc.h +++ b/src/common/xmalloc.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2000-2006 Ullrich von Bassewitz */ -/* Römerstraße 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ From 5d84a4ba137e32163390ccd058c32ad169b4ca94 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Mon, 19 Apr 2021 16:06:10 +0200 Subject: [PATCH 0815/2710] Removed non-ASCII chars. --- asminc/em-kernel.inc | 2 +- asminc/ser-kernel.inc | 2 +- asminc/stdio.inc | 2 +- asminc/utsname.inc | 2 +- include/_ted.h | 2 +- include/cbm264.h | 2 +- include/locale.h | 2 +- include/peekpoke.h | 2 +- include/plus4.h | 2 +- include/stdarg.h | 2 +- include/sys/stat.h | 2 +- include/sys/types.h | 2 +- libsrc/common/_poserror.c | 2 +- src/ar65/error.h | 2 +- src/ca65/ea.h | 2 +- src/ca65/ea65.h | 2 +- src/ca65/easw16.h | 2 +- src/cc65/assignment.h | 2 +- src/cc65/coptadd.c | 2 +- src/cc65/coptsub.c | 2 +- src/cl65/error.h | 2 +- src/co65/convert.h | 2 +- src/co65/error.c | 2 +- src/co65/error.h | 2 +- src/co65/fileio.c | 2 +- src/co65/fileio.h | 2 +- src/co65/global.c | 2 +- src/co65/global.h | 2 +- src/common/fragdefs.h | 2 +- src/common/optdefs.h | 2 +- src/common/segnames.c | 2 +- src/common/segnames.h | 2 +- src/common/va_copy.h | 2 +- src/common/xmalloc.c | 2 +- src/da65/asminc.h | 2 +- src/da65/code.h | 2 +- src/da65/comments.c | 2 +- src/da65/comments.h | 2 +- src/da65/error.h | 2 +- src/da65/global.c | 2 +- src/da65/infofile.h | 2 +- src/da65/opc4510.h | 2 +- src/da65/opc6502.h | 2 +- src/da65/opc65816.h | 2 +- src/da65/opc65c02.h | 2 +- src/da65/opc65sc02.h | 2 +- src/da65/opcdesc.h | 2 +- src/da65/opctable.h | 2 +- src/ld65/dbgfile.h | 2 +- src/ld65/error.h | 2 +- src/ld65/o65.h | 2 +- src/od65/error.h | 2 +- src/od65/fileio.h | 2 +- src/sim65/error.c | 2 +- src/sim65/error.h | 2 +- src/sim65/paravirt.c | 2 +- src/sim65/paravirt.h | 2 +- 57 files changed, 57 insertions(+), 57 deletions(-) diff --git a/asminc/em-kernel.inc b/asminc/em-kernel.inc index e7cdf9a70..889ffba98 100644 --- a/asminc/em-kernel.inc +++ b/asminc/em-kernel.inc @@ -7,7 +7,7 @@ ;/* */ ;/* */ ;/* (C) 2002-2003 Ullrich von Bassewitz */ -;/* Römerstrasse 52 */ +;/* Roemerstrasse 52 */ ;/* D-70794 Filderstadt */ ;/* EMail: uz@cc65.org */ ;/* */ diff --git a/asminc/ser-kernel.inc b/asminc/ser-kernel.inc index 546587515..79ace64e9 100644 --- a/asminc/ser-kernel.inc +++ b/asminc/ser-kernel.inc @@ -7,7 +7,7 @@ ;* * ;* * ;*(C) 2003-2006, Ullrich von Bassewitz * -;* Römerstrasse 52 * +;* Roemerstrasse 52 * ;* D-70794 Filderstadt * ;*EMail: uz@cc65.org * ;* * diff --git a/asminc/stdio.inc b/asminc/stdio.inc index 3b22c47f6..c727e8d0b 100644 --- a/asminc/stdio.inc +++ b/asminc/stdio.inc @@ -7,7 +7,7 @@ ;* */ ;* */ ;* (C) 2003-2005, Ullrich von Bassewitz */ -;* Römerstrasse 52 */ +;* Roemerstrasse 52 */ ;* D-70794 Filderstadt */ ;* EMail: uz@cc65.org */ ;* */ diff --git a/asminc/utsname.inc b/asminc/utsname.inc index 6e2289244..2c7052ce1 100644 --- a/asminc/utsname.inc +++ b/asminc/utsname.inc @@ -7,7 +7,7 @@ ;/* */ ;/* */ ;/* (C) 2003 Ullrich von Bassewitz */ -;/* Römerstrasse 52 */ +;/* Roemerstrasse 52 */ ;/* D-70794 Filderstadt */ ;/* EMail: uz@cc65.org */ ;/* */ diff --git a/include/_ted.h b/include/_ted.h index 68b59d706..c2cd0a04e 100644 --- a/include/_ted.h +++ b/include/_ted.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/include/cbm264.h b/include/cbm264.h index 5e8a242a7..a51ee79c5 100644 --- a/include/cbm264.h +++ b/include/cbm264.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/include/locale.h b/include/locale.h index 4134dd5db..3f23e01d2 100644 --- a/include/locale.h +++ b/include/locale.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2005 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/include/peekpoke.h b/include/peekpoke.h index 4c1156ec3..268dbfb98 100644 --- a/include/peekpoke.h +++ b/include/peekpoke.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/include/plus4.h b/include/plus4.h index c8aaf2eaf..325ba7d89 100644 --- a/include/plus4.h +++ b/include/plus4.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2006, Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/include/stdarg.h b/include/stdarg.h index adf73483c..f6a4fe934 100644 --- a/include/stdarg.h +++ b/include/stdarg.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2004 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/include/sys/stat.h b/include/sys/stat.h index c7e003808..d8fc09c75 100644 --- a/include/sys/stat.h +++ b/include/sys/stat.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/include/sys/types.h b/include/sys/types.h index 9b1e9610f..e75dd7d46 100644 --- a/include/sys/types.h +++ b/include/sys/types.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/libsrc/common/_poserror.c b/libsrc/common/_poserror.c index 95dbfdc9d..2777fee98 100644 --- a/libsrc/common/_poserror.c +++ b/libsrc/common/_poserror.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/ar65/error.h b/src/ar65/error.h index 4052ee3eb..b311287a1 100644 --- a/src/ar65/error.h +++ b/src/ar65/error.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/ca65/ea.h b/src/ca65/ea.h index 9a038047c..d861e9a6c 100644 --- a/src/ca65/ea.h +++ b/src/ca65/ea.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2004 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/ca65/ea65.h b/src/ca65/ea65.h index 066d9b0cc..c5b139572 100644 --- a/src/ca65/ea65.h +++ b/src/ca65/ea65.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/ca65/easw16.h b/src/ca65/easw16.h index 81dfd0fa2..b8b06d466 100644 --- a/src/ca65/easw16.h +++ b/src/ca65/easw16.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2004 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/cc65/assignment.h b/src/cc65/assignment.h index 278c5ef72..b2cc1548b 100644 --- a/src/cc65/assignment.h +++ b/src/cc65/assignment.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2002-2004 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/cc65/coptadd.c b/src/cc65/coptadd.c index 07bd2bf98..bc67f7a74 100644 --- a/src/cc65/coptadd.c +++ b/src/cc65/coptadd.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2001-2005, Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/cc65/coptsub.c b/src/cc65/coptsub.c index 3d75c1f72..08e65fe1d 100644 --- a/src/cc65/coptsub.c +++ b/src/cc65/coptsub.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2001-2006, Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/cl65/error.h b/src/cl65/error.h index b1ff30660..fdf55c758 100644 --- a/src/cl65/error.h +++ b/src/cl65/error.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/co65/convert.h b/src/co65/convert.h index 22ef25424..8c7782ff3 100644 --- a/src/co65/convert.h +++ b/src/co65/convert.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/co65/error.c b/src/co65/error.c index 1c1625207..1fa099c94 100644 --- a/src/co65/error.c +++ b/src/co65/error.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/co65/error.h b/src/co65/error.h index 4fb9d370d..23901e52e 100644 --- a/src/co65/error.h +++ b/src/co65/error.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/co65/fileio.c b/src/co65/fileio.c index 9241797c6..18813d5e4 100644 --- a/src/co65/fileio.c +++ b/src/co65/fileio.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/co65/fileio.h b/src/co65/fileio.h index c5e9a003c..150c4fca7 100644 --- a/src/co65/fileio.h +++ b/src/co65/fileio.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/co65/global.c b/src/co65/global.c index bc9b0099b..405cda7d5 100644 --- a/src/co65/global.c +++ b/src/co65/global.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/co65/global.h b/src/co65/global.h index 29c17ca29..8f1e0c4f8 100644 --- a/src/co65/global.h +++ b/src/co65/global.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/common/fragdefs.h b/src/common/fragdefs.h index c3e589cb2..80dcad491 100644 --- a/src/common/fragdefs.h +++ b/src/common/fragdefs.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/common/optdefs.h b/src/common/optdefs.h index fae517667..95af8ebba 100644 --- a/src/common/optdefs.h +++ b/src/common/optdefs.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/common/segnames.c b/src/common/segnames.c index bb9aac351..ea8a0125a 100644 --- a/src/common/segnames.c +++ b/src/common/segnames.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/common/segnames.h b/src/common/segnames.h index 0d57d6ac3..c4401a302 100644 --- a/src/common/segnames.h +++ b/src/common/segnames.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/common/va_copy.h b/src/common/va_copy.h index 2f56efa1a..4aa2428db 100644 --- a/src/common/va_copy.h +++ b/src/common/va_copy.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2004 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/common/xmalloc.c b/src/common/xmalloc.c index 327d378fe..192e8fadd 100644 --- a/src/common/xmalloc.c +++ b/src/common/xmalloc.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2000-2006 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/da65/asminc.h b/src/da65/asminc.h index bf48710e9..6d58cd155 100644 --- a/src/da65/asminc.h +++ b/src/da65/asminc.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2005 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/da65/code.h b/src/da65/code.h index 0d21e61e1..50e68ebdf 100644 --- a/src/da65/code.h +++ b/src/da65/code.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2000-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/da65/comments.c b/src/da65/comments.c index 64b64ca28..cf0b9d4e9 100644 --- a/src/da65/comments.c +++ b/src/da65/comments.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2006 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/da65/comments.h b/src/da65/comments.h index 1b8bc1771..1d95111a9 100644 --- a/src/da65/comments.h +++ b/src/da65/comments.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2006 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/da65/error.h b/src/da65/error.h index d0221bcc4..8027b3c1f 100644 --- a/src/da65/error.h +++ b/src/da65/error.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2000-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/da65/global.c b/src/da65/global.c index 7df1bd977..e258aecdd 100644 --- a/src/da65/global.c +++ b/src/da65/global.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2000-2006 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/da65/infofile.h b/src/da65/infofile.h index b8b3f53a8..49ddfcd5d 100644 --- a/src/da65/infofile.h +++ b/src/da65/infofile.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2000-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/da65/opc4510.h b/src/da65/opc4510.h index 10735952c..a87254cd1 100644 --- a/src/da65/opc4510.h +++ b/src/da65/opc4510.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/da65/opc6502.h b/src/da65/opc6502.h index c890e241b..f9d03c085 100644 --- a/src/da65/opc6502.h +++ b/src/da65/opc6502.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/da65/opc65816.h b/src/da65/opc65816.h index 12ffc4a37..341fbf085 100644 --- a/src/da65/opc65816.h +++ b/src/da65/opc65816.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/da65/opc65c02.h b/src/da65/opc65c02.h index 38138aa51..aa2fa9756 100644 --- a/src/da65/opc65c02.h +++ b/src/da65/opc65c02.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/da65/opc65sc02.h b/src/da65/opc65sc02.h index 391f425ea..c00a8e91f 100644 --- a/src/da65/opc65sc02.h +++ b/src/da65/opc65sc02.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/da65/opcdesc.h b/src/da65/opcdesc.h index 7913131cd..399a0962d 100644 --- a/src/da65/opcdesc.h +++ b/src/da65/opcdesc.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2000-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/da65/opctable.h b/src/da65/opctable.h index d5c81b216..69a64db9c 100644 --- a/src/da65/opctable.h +++ b/src/da65/opctable.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2000-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/ld65/dbgfile.h b/src/ld65/dbgfile.h index b8e1a534f..cabb60f8a 100644 --- a/src/ld65/dbgfile.h +++ b/src/ld65/dbgfile.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/ld65/error.h b/src/ld65/error.h index b49d8919c..75b8e0bc1 100644 --- a/src/ld65/error.h +++ b/src/ld65/error.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/ld65/o65.h b/src/ld65/o65.h index 2112537ff..68ed94ba7 100644 --- a/src/ld65/o65.h +++ b/src/ld65/o65.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1999-2005 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/od65/error.h b/src/od65/error.h index 8e1469a34..8a3ac0652 100644 --- a/src/od65/error.h +++ b/src/od65/error.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/od65/fileio.h b/src/od65/fileio.h index 068c4d9a3..af5559f6b 100644 --- a/src/od65/fileio.h +++ b/src/od65/fileio.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 1998-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/sim65/error.c b/src/sim65/error.c index 30d90c700..441b07d2a 100644 --- a/src/sim65/error.c +++ b/src/sim65/error.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2002-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/sim65/error.h b/src/sim65/error.h index cbb785875..ea54fa048 100644 --- a/src/sim65/error.h +++ b/src/sim65/error.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2002-2003 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index 603a07e9a..e73bd3400 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2013-2013 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ diff --git a/src/sim65/paravirt.h b/src/sim65/paravirt.h index 99c28fa02..bfa38e047 100644 --- a/src/sim65/paravirt.h +++ b/src/sim65/paravirt.h @@ -7,7 +7,7 @@ /* */ /* */ /* (C) 2013-2013 Ullrich von Bassewitz */ -/* Römerstrasse 52 */ +/* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ From 080cb1bac9b748810e528db62b74fca9394db4d0 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 23 Apr 2021 21:52:36 +0200 Subject: [PATCH 0816/2710] added testcase for issue #1462 --- test/todo/bug1462.c | 67 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 test/todo/bug1462.c diff --git a/test/todo/bug1462.c b/test/todo/bug1462.c new file mode 100644 index 000000000..aec990cde --- /dev/null +++ b/test/todo/bug1462.c @@ -0,0 +1,67 @@ + +/* issue #1462 - Bit-fields are still broken */ + +#include <stdio.h> + +typedef struct { + signed int a : 3; + signed int b : 3; + signed int c : 3; +} T; + +int failures = 0; + +void test() +{ + T a = {2, 5, -1}; + T b = {1, 4, -1}; + T m[1] = {{6, 3, -1}}; + T *p = &a; + + a.c += b.a; + p->c += b.b; + m->c += b.c; + + if (a.c != -4) { + ++failures; + } + printf("%d\n", a.c); + + if (p->c != -4) { + ++failures; + } + printf("%d\n", p->c); + + if (m->c != -2) { + ++failures; + } + printf("%d\n", m->c); + + ++a.a; + p->b++; + m->c--; + + if (a.a != 3) { + ++failures; + } + printf("%d\n", a.a); + + if (p->b != -2) { + ++failures; + } + printf("%d\n", p->b); + + if (m->c != -3) { + ++failures; + } + printf("%d\n", m->c); + + printf("Failures: %d\n", failures); +} + +int main(void) +{ + test(); + return failures; +} + From 4866ee53e69767aa911b4ab94738c5430ea98a0a Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 24 Apr 2021 13:20:10 -0400 Subject: [PATCH 0817/2710] Moved some Assembly function descriptions out of the "Control commands" section, and into the "Pseudo functions" section. --- doc/ca65.sgml | 144 +++++++++++++++++++++++++------------------------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index f3a3c218f..137404919 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -1353,15 +1353,15 @@ writable. <sect>Pseudo functions<label id="pseudo-functions"><p> -Pseudo functions expect their arguments in parenthesis, and they have a result, -either a string or an expression. +Pseudo functions expect their arguments in parentheses, and they have a result, +either a string or an expression value. <sect1><tt>.ADDRSIZE</tt><label id=".ADDRSIZE"><p> - The <tt/.ADDRSIZE/ function is used to return the interal address size + The <tt/.ADDRSIZE/ function is used to return the internal address size associated with a symbol. This can be helpful in macros when knowing the address - size of symbol can help with custom instructions. + size of a symbol can help with custom instructions. Example: @@ -1389,7 +1389,7 @@ either a string or an expression. <sect1><tt>.BANK</tt><label id=".BANK"><p> The <tt/.BANK/ function is used to support systems with banked memory. The - argument is an expression with exactly one segment reference - usually a + argument is an expression with exactly one segment reference -- usually a label. The function result is the value of the <tt/bank/ attribute assigned to the run memory area of the segment. Please see the linker documentation for more information about memory areas and their attributes. @@ -1397,13 +1397,13 @@ either a string or an expression. The value of <tt/.BANK/ can be used to switch memory so that a memory bank containing specific data is available. - The <tt/bank/ attribute is a 32 bit integer and so is the result of the + The <tt/bank/ attribute is a 32-bit integer, and so is the result of the <tt/.BANK/ function. You will have to use <tt><ref id=".LOBYTE" name=".LOBYTE"></tt> or similar functions to address just part of it. - Please note that <tt/.BANK/ will always get evaluated in the link stage, so - an expression containing <tt/.BANK/ can never be used where a constant known - result is expected (for example with <tt/.RES/). + Please note that <tt/.BANK/ always will get evaluated in the link stage, so + an expression containing <tt/.BANK/ never can be used where a constant, known + result is expected (for example, with <tt/.RES/). Example: @@ -1440,7 +1440,7 @@ either a string or an expression. <sect1><tt>.BLANK</tt><label id=".BLANK"><p> - Builtin function. The function evaluates its argument in braces and yields + Builtin function. The function evaluates its argument in parentheses and yields "false" if the argument is non blank (there is an argument), and "true" if there is no argument. The token list that makes up the function argument may optionally be enclosed in curly braces. This allows the inclusion of @@ -1479,7 +1479,7 @@ either a string or an expression. <sect1><tt>.CONST</tt><label id=".CONST"><p> - Builtin function. The function evaluates its argument in braces and + Builtin function. The function evaluates its argument in parentheses and yields "true" if the argument is a constant expression (that is, an expression that yields a constant value at assembly time) and "false" otherwise. As an example, the .IFCONST statement may be replaced by @@ -1489,6 +1489,41 @@ either a string or an expression. </verb></tscreen> +<sect1><tt>.DEF, .DEFINED</tt><label id=".DEFINED"><p> + + Builtin function. The function expects an identifier as argument in parentheses. + The argument is evaluated, and the function yields "true" if the identifier + is a symbol that already is defined somewhere in the source file up to the + current position. Otherwise, the function yields false. As an example, the + <tt><ref id=".IFDEF" name=".IFDEF"></tt> statement may be replaced by + + <tscreen><verb> + .if .defined(a) + </verb></tscreen> + + +<sect1><tt>.DEFINEDMACRO</tt><label id=".DEFINEDMACRO"><p> + + Builtin function. The function expects an identifier as argument in parentheses. + The argument is evaluated, and the function yields "true" if the identifier + already has been defined as the name of a macro. Otherwise, the function yields + false. Example: + + <tscreen><verb> + .macro add foo + clc + adc foo + .endmacro + + .if .definedmacro(add) + add #$01 + .else + clc + adc #$01 + .endif + </verb></tscreen> + + <sect1><tt>.HIBYTE</tt><label id=".HIBYTE"><p> The function returns the high byte (that is, bits 8-15) of its argument. @@ -1525,6 +1560,23 @@ either a string or an expression. </verb></tscreen> +<sect1><tt>.ISMNEM, .ISMNEMONIC</tt><label id=".ISMNEMONIC"><p> + + Builtin function. The function expects an identifier as argument in parentheses. + The argument is evaluated, and the function yields "true" if the identifier + is defined as an instruction mnemonic that is recognized by the assembler. + Example: + + <tscreen><verb> + .if .not .ismnemonic(ina) + .macro ina + clc + adc #$01 + .endmacro + .endif + </verb></tscreen> + + <sect1><tt>.LEFT</tt><label id=".LEFT"><p> Builtin function. Extracts the left part of a given token list. @@ -1719,7 +1771,7 @@ either a string or an expression. <sect1><tt>.REF, .REFERENCED</tt><label id=".REFERENCED"><p> - Builtin function. The function expects an identifier as argument in braces. + Builtin function. The function expects an identifier as argument in parentheses. The argument is evaluated, and the function yields "true" if the identifier is a symbol that has already been referenced somewhere in the source file up to the current position. Otherwise the function yields false. As an example, @@ -1865,7 +1917,7 @@ either a string or an expression. <sect1><tt>.STRING</tt><label id=".STRING"><p> - Builtin function. The function accepts an argument in braces and converts + Builtin function. The function accepts an argument in parentheses and converts this argument into a string constant. The argument may be an identifier, or a constant numeric value. @@ -1884,7 +1936,7 @@ either a string or an expression. <sect1><tt>.STRLEN</tt><label id=".STRLEN"><p> - Builtin function. The function accepts a string argument in braces and + Builtin function. The function accepts a string argument in parentheses and evaluates to the length of the string. Example: @@ -1901,7 +1953,7 @@ either a string or an expression. <sect1><tt>.TCOUNT</tt><label id=".TCOUNT"><p> - Builtin function. The function accepts a token list in braces. The function + Builtin function. The function accepts a token list in parentheses. The function result is the number of tokens given as argument. The token list may optionally be enclosed into curly braces which are not considered part of the list and not counted. Enclosement in curly braces allows the inclusion @@ -2366,7 +2418,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH Start a define style macro definition. The command is followed by an identifier (the macro name) and optionally by a list of formal arguments - in braces. + in parentheses. Please note that <tt/.DEFINE/ shares most disadvantages with its C counterpart, so the general advice is, <bf/NOT/ do use <tt/.DEFINE/ if you @@ -2390,41 +2442,6 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH See also section <ref id="macros" name="Macros">. -<sect1><tt>.DEF, .DEFINED</tt><label id=".DEFINED"><p> - - Builtin function. The function expects an identifier as argument in braces. - The argument is evaluated, and the function yields "true" if the identifier - is a symbol that is already defined somewhere in the source file up to the - current position. Otherwise the function yields false. As an example, the - <tt><ref id=".IFDEF" name=".IFDEF"></tt> statement may be replaced by - - <tscreen><verb> - .if .defined(a) - </verb></tscreen> - - -<sect1><tt>.DEFINEDMACRO</tt><label id=".DEFINEDMACRO"><p> - - Builtin function. The function expects an identifier as argument in braces. - The argument is evaluated, and the function yields "true" if the identifier - has already been defined as the name of a macro. Otherwise the function yields - false. Example: - - <tscreen><verb> - .macro add foo - clc - adc foo - .endmacro - - .if .definedmacro(add) - add #$01 - .else - clc - adc #$01 - .endif - </verb></tscreen> - - <sect1><tt>.DESTRUCTOR</tt><label id=".DESTRUCTOR"><p> Export a symbol and mark it as a module destructor. This may be used @@ -3294,23 +3311,6 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH the feature in more detail. -<sect1><tt>.ISMNEM, .ISMNEMONIC</tt><label id=".ISMNEMONIC"><p> - - Builtin function. The function expects an identifier as argument in braces. - The argument is evaluated, and the function yields "true" if the identifier - is defined as an instruction mnemonic that is recognized by the assembler. - Example: - - <tscreen><verb> - .if .not .ismnemonic(ina) - .macro ina - clc - adc #$01 - .endmacro - .endif - </verb></tscreen> - - <sect1><tt>.LINECONT</tt><label id=".LINECONT"><p> Switch on or off line continuations using the backslash character @@ -4399,8 +4399,8 @@ different: For this macro type, the number of actual parameters must match exactly the number of formal parameters. - To make this possible, formal parameters are enclosed in braces when - defining the macro. If there are no parameters, the empty braces may + To make this possible, formal parameters are enclosed in parentheses when + defining the macro. If there are no parameters, the empty parentheses may be omitted. <item> Since <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros may not @@ -4450,8 +4450,8 @@ Macros with parameters may also be useful: Note that, while formal parameters have to be placed in parentheses, the actual argument used when invoking the macro should not be. -The invoked arguments are separated by commas only, if parentheses are -used by accident they will become part of the replaced token. +The invoked arguments are separated by commas only; if parentheses are +used by accident, they will become part of the replaced token. If you wish to have an expression follow the macro invocation, the last parameter can be enclosed in curly braces {} to indicate the end of that From 1f4ce4184607dcc530db5f7577ae219874079532 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 24 Apr 2021 13:48:42 -0400 Subject: [PATCH 0818/2710] Fixed the alphabetic sorting of the "Pseudo functions" section. --- doc/ca65.sgml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 137404919..b6d577472 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -1878,24 +1878,6 @@ either a string or an expression value. </descrip> -<sect1><tt>.STRAT</tt><label id=".STRAT"><p> - - Builtin function. The function accepts a string and an index as - arguments and returns the value of the character at the given position - as an integer value. The index is zero based. - - Example: - - <tscreen><verb> - .macro M Arg - ; Check if the argument string starts with '#' - .if (.strat (Arg, 0) = '#') - ... - .endif - .endmacro - </verb></tscreen> - - <sect1><tt>.SPRINTF</tt><label id=".SPRINTF"><p> Builtin function. It expects a format string as first argument. The number @@ -1915,6 +1897,24 @@ either a string or an expression value. </verb></tscreen> +<sect1><tt>.STRAT</tt><label id=".STRAT"><p> + + Builtin function. The function accepts a string and an index as + arguments and returns the value of the character at the given position + as an integer value. The index is zero based. + + Example: + + <tscreen><verb> + .macro M Arg + ; Check if the argument string starts with '#' + .if (.strat (Arg, 0) = '#') + ... + .endif + .endmacro + </verb></tscreen> + + <sect1><tt>.STRING</tt><label id=".STRING"><p> Builtin function. The function accepts an argument in parentheses and converts From 71bd6415d6e203f941f200ceb5b8764aafe155fe Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 17 Apr 2021 16:50:59 +0800 Subject: [PATCH 0819/2710] No more unnecessary jump-over labels generated for logical OR false cases. --- src/cc65/expr.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index c0a9081f9..bc277f13b 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3757,7 +3757,6 @@ static void hieOr (ExprDesc *Expr) unsigned Flags = Expr->Flags & E_MASK_KEEP_SUBEXPR; int AndOp; /* Did we have a && operation? */ unsigned TrueLab; /* Jump to this label if true */ - unsigned DoneLab; int HasTrueJump = 0; CodeMark Start; @@ -3884,19 +3883,23 @@ static void hieOr (ExprDesc *Expr) /* If we really had boolean ops, generate the end sequence if necessary */ if (HasTrueJump) { - /* False case needs to jump over true case */ - DoneLab = GetLocalLabel (); if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + /* False case needs to jump over true case */ + unsigned DoneLab = GetLocalLabel (); /* Load false only if the result is not true */ g_getimmed (CF_INT | CF_CONST, 0, 0); /* Load FALSE */ g_falsejump (CF_NONE, DoneLab); + + /* Load the true value */ + g_defcodelabel (TrueLab); + g_getimmed (CF_INT | CF_CONST, 1, 0); /* Load TRUE */ + g_defcodelabel (DoneLab); + } else { + /* Load the true value */ + g_defcodelabel (TrueLab); + g_getimmed (CF_INT | CF_CONST, 1, 0); /* Load TRUE */ } - /* Load the true value */ - g_defcodelabel (TrueLab); - g_getimmed (CF_INT | CF_CONST, 1, 0); /* Load TRUE */ - g_defcodelabel (DoneLab); - /* The result is an rvalue in primary */ ED_FinalizeRValLoad (Expr); /* Condition codes are set */ From f3663b8d2e8b1f9d035fd612865379aed23730bd Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 28 Apr 2021 14:21:48 +0200 Subject: [PATCH 0820/2710] added test for issue #1461 --- test/val/pr1461.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 test/val/pr1461.c diff --git a/test/val/pr1461.c b/test/val/pr1461.c new file mode 100644 index 000000000..dae6b2999 --- /dev/null +++ b/test/val/pr1461.c @@ -0,0 +1,53 @@ + +/* pr#1461 Fixed pointer subtraction in certain very rare cases */ + +#include <stdlib.h> +#include <stdio.h> + +static int err = 0; + +static int a[1], *p; +static unsigned int i1, i2; + +int test1(void) +{ + p = a - (int)a; + printf("a: %p - (int)a: 0x%x = p: %p\n", a, (int)a, p); + printf("i1: 0x%x - i2: 0x%x = p: %p\n", i1, i2, i1 - i2); + if ((int)p != (i1 - i2)) { + printf("-> failed\n"); + return 1; + } + return 0; +} + +int test2(void) +{ + p = p - (int)a; + printf("p: %p - (int)a: 0x%x = p: %p\n", p, (int)a, p); + printf("p: %p - i2: 0x%x = p: %p\n", p, i2, 0x1234 - i2); + if ((int)p != (0x1234 - i2)) { + printf("-> failed\n"); + return 1; + } + return 0; +} + +int main(void) +{ + a[0] = 0x4711; + i1 = (int)a; + i2 = i1 << 1; + + p = (int*)0x1234; + printf("p: %p &a[0]: %p a: %p (int)a: 0x%x i1: 0x%x i2: 0x%x\n", p, &a[0], a, (int)a, i1, i2); + + err += test1(); + + p = (int*)0x1234; + printf("p: %p &a[0]: %p a: %p (int)a: 0x%x i1: 0x%x i2: 0x%x\n", p, &a[0], a, (int)a, i1, i2); + + err += test2(); + + return err; +} From e9a72b2462936fb929617766218b85bc7834c3b6 Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sat, 24 Apr 2021 16:34:21 +0300 Subject: [PATCH 0821/2710] Add .REF control command implementation. --- src/ca65/pseudo.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ca65/pseudo.c b/src/ca65/pseudo.c index 7e24d814d..971faf2a8 100644 --- a/src/ca65/pseudo.c +++ b/src/ca65/pseudo.c @@ -1730,6 +1730,18 @@ static void DoPushSeg (void) +static void DoReferenced (void) +/* Mark given symbol as referenced */ +{ + SymEntry* Sym = ParseAnySymName (SYM_ALLOC_NEW); + if (Sym) + { + SymRef (Sym); + } +} + + + static void DoReloc (void) /* Enter relocatable mode */ { @@ -2153,7 +2165,7 @@ static CtrlDesc CtrlCmdTab [] = { { ccNone, DoPushCharmap }, { ccNone, DoPushCPU }, { ccNone, DoPushSeg }, - { ccNone, DoUnexpected }, /* .REFERENCED */ + { ccNone, DoReferenced }, /* .REFERENCED */ { ccNone, DoReloc }, { ccNone, DoRepeat }, { ccNone, DoRes }, From 83e7c372775b8594bd0069116511fcddfbcf98d0 Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sat, 24 Apr 2021 20:51:11 +0300 Subject: [PATCH 0822/2710] Use .REFERTO instead of .REF as the command. --- src/ca65/pseudo.c | 5 +++-- src/ca65/scanner.c | 1 + src/ca65/token.h | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/ca65/pseudo.c b/src/ca65/pseudo.c index 971faf2a8..0c9e623a1 100644 --- a/src/ca65/pseudo.c +++ b/src/ca65/pseudo.c @@ -1730,7 +1730,7 @@ static void DoPushSeg (void) -static void DoReferenced (void) +static void DoReferTo (void) /* Mark given symbol as referenced */ { SymEntry* Sym = ParseAnySymName (SYM_ALLOC_NEW); @@ -2165,7 +2165,8 @@ static CtrlDesc CtrlCmdTab [] = { { ccNone, DoPushCharmap }, { ccNone, DoPushCPU }, { ccNone, DoPushSeg }, - { ccNone, DoReferenced }, /* .REFERENCED */ + { ccNone, DoUnexpected }, /* .REFERENCED */ + { ccNone, DoReferTo }, /* .REFERTO */ { ccNone, DoReloc }, { ccNone, DoRepeat }, { ccNone, DoRes }, diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c index 0a7d433b2..2c099a517 100644 --- a/src/ca65/scanner.c +++ b/src/ca65/scanner.c @@ -271,6 +271,7 @@ struct DotKeyword { { ".PUSHSEG", TOK_PUSHSEG }, { ".REF", TOK_REFERENCED }, { ".REFERENCED", TOK_REFERENCED }, + { ".REFERTO", TOK_REFERTO }, { ".RELOC", TOK_RELOC }, { ".REPEAT", TOK_REPEAT }, { ".RES", TOK_RES }, diff --git a/src/ca65/token.h b/src/ca65/token.h index 02fc8d491..b8bbb6d6e 100644 --- a/src/ca65/token.h +++ b/src/ca65/token.h @@ -241,6 +241,7 @@ typedef enum token_t { TOK_PUSHCPU, TOK_PUSHSEG, TOK_REFERENCED, + TOK_REFERTO, TOK_RELOC, TOK_REPEAT, TOK_RES, From 50a58e77067f6653a283ada6c680ef6189593bd0 Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sat, 24 Apr 2021 21:26:52 +0300 Subject: [PATCH 0823/2710] Added documentation for the .REFERTO. --- doc/ca65.sgml | 30 +++++++++++++++++++++++++++++- src/ca65/pseudo.c | 3 +-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index b6d577472..978aaf159 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -3213,7 +3213,8 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH .endif </verb></tscreen> - See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt> + See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt>, and + <tt><ref id=".REFERTO" name=".REFERTO"></tt> <sect1><tt>.IMPORT</tt><label id=".IMPORT"><p> @@ -3764,6 +3765,33 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE" See: <tt><ref id=".POPSEG" name=".POPSEG"></tt> +<sect1><tt>.REFERTO</tt><label id=".REFERTO"><p> + + Mark a symbol as referenced. + + It is useful in combination with the <tt><ref id=".IFREF" name=".IFREF"></tt> + command. A subroutine with two entry points can be created. When the first + entry point is called, it sets some default value as an argument, and falls + through into the second entry point. <tt>.REFERTO</tt> helps to ensure that + the second part is included into binary when only the first entry point is + actually used from the code. + + Example: + + <tscreen><verb> + .ifref ResetValue ; If this subroutine is used + ResetValue: ; Define it + lda #0 ; Set a default value + .referto SetValue ; Ensure that SetValue will be included + .endif + .ifref SetValue ; If this or previous subroutine is used + SetValue: + sta Value + rts + .endif + </verb></tscreen> + + <sect1><tt>.RELOC</tt><label id=".RELOC"><p> Switch back to relocatable mode. See the <tt><ref id=".ORG" diff --git a/src/ca65/pseudo.c b/src/ca65/pseudo.c index 0c9e623a1..843f5b9d2 100644 --- a/src/ca65/pseudo.c +++ b/src/ca65/pseudo.c @@ -1734,8 +1734,7 @@ static void DoReferTo (void) /* Mark given symbol as referenced */ { SymEntry* Sym = ParseAnySymName (SYM_ALLOC_NEW); - if (Sym) - { + if (Sym) { SymRef (Sym); } } From 8e02f8f5ec110ca6adff138d52fb85873cd44ad5 Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Wed, 28 Apr 2021 21:38:23 +0300 Subject: [PATCH 0824/2710] Add .REFTO as an alias to .REFERTO. Update the docs related to it. --- doc/ca65.sgml | 17 +++++++++++++++-- src/ca65/scanner.c | 1 + 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 978aaf159..3fc534066 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -3765,7 +3765,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE" See: <tt><ref id=".POPSEG" name=".POPSEG"></tt> -<sect1><tt>.REFERTO</tt><label id=".REFERTO"><p> +<sect1><tt>.REFERTO, .REFTO</tt><label id=".REFERTO"><p> Mark a symbol as referenced. @@ -3779,11 +3779,24 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE" Example: <tscreen><verb> + .ifref NegateValue ; If this subroutine is used + NegateValue: ; Define it + lda #0 + sec + sbc Value + .ifref ResetValue ; If the ResetValue is also used + jmp SetValue ; Jump over it + .else + .refto SetValue ; Ensure that SetValue will be included + .endif + .endif + .ifref ResetValue ; If this subroutine is used ResetValue: ; Define it lda #0 ; Set a default value - .referto SetValue ; Ensure that SetValue will be included + .refto SetValue ; Ensure that SetValue will be included .endif + .ifref SetValue ; If this or previous subroutine is used SetValue: sta Value diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c index 2c099a517..bf0a85183 100644 --- a/src/ca65/scanner.c +++ b/src/ca65/scanner.c @@ -272,6 +272,7 @@ struct DotKeyword { { ".REF", TOK_REFERENCED }, { ".REFERENCED", TOK_REFERENCED }, { ".REFERTO", TOK_REFERTO }, + { ".REFTO", TOK_REFERTO }, { ".RELOC", TOK_RELOC }, { ".REPEAT", TOK_REPEAT }, { ".RES", TOK_RES }, From b9a3c7888822732a0de92741cfe1a3e1b6bb272f Mon Sep 17 00:00:00 2001 From: Marco Aurelio da Costa <costa@gamic.com> Date: Mon, 26 Apr 2021 13:30:54 -0300 Subject: [PATCH 0825/2710] Parse file included inside a macro at definition time --- src/ca65/macro.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/ca65/macro.c b/src/ca65/macro.c index 988493976..56791eb66 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -510,6 +510,22 @@ void MacDef (unsigned Style) } } + if (CurTok.Tok == TOK_INCLUDE) { + /* Include another file */ + NextTok (); + /* Name must follow */ + if (CurTok.Tok != TOK_STRCON) { + ErrorSkip ("String constant expected"); + } else { + SB_Terminate (&CurTok.SVal); + if (NewInputFile (SB_GetConstBuf (&CurTok.SVal)) == 0) { + /* Error opening the file, skip remainder of line */ + SkipUntilSep (); + } + } + NextTok (); + } + /* Check for a .LOCAL declaration */ if (CurTok.Tok == TOK_LOCAL && Style == MAC_STYLE_CLASSIC) { From 04cd884f8f08e98cd9826287d2d272a23f68510f Mon Sep 17 00:00:00 2001 From: Marco Aurelio da Costa <costa@gamic.com> Date: Tue, 27 Apr 2021 08:21:06 -0300 Subject: [PATCH 0826/2710] Prevent missed .ENDMACRO in included file --- src/ca65/macro.c | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/ca65/macro.c b/src/ca65/macro.c index 56791eb66..34d87e65f 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -491,6 +491,23 @@ void MacDef (unsigned Style) */ while (1) { + /* Check for include */ + if (CurTok.Tok == TOK_INCLUDE) { + /* Include another file */ + NextTok (); + /* Name must follow */ + if (CurTok.Tok != TOK_STRCON) { + ErrorSkip ("String constant expected"); + } else { + SB_Terminate (&CurTok.SVal); + if (NewInputFile (SB_GetConstBuf (&CurTok.SVal)) == 0) { + /* Error opening the file, skip remainder of line */ + SkipUntilSep (); + } + } + NextTok (); + } + /* Check for end of macro */ if (Style == MAC_STYLE_CLASSIC) { /* In classic macros, only .endmacro is allowed */ @@ -510,22 +527,6 @@ void MacDef (unsigned Style) } } - if (CurTok.Tok == TOK_INCLUDE) { - /* Include another file */ - NextTok (); - /* Name must follow */ - if (CurTok.Tok != TOK_STRCON) { - ErrorSkip ("String constant expected"); - } else { - SB_Terminate (&CurTok.SVal); - if (NewInputFile (SB_GetConstBuf (&CurTok.SVal)) == 0) { - /* Error opening the file, skip remainder of line */ - SkipUntilSep (); - } - } - NextTok (); - } - /* Check for a .LOCAL declaration */ if (CurTok.Tok == TOK_LOCAL && Style == MAC_STYLE_CLASSIC) { From 216bb22b20e67f6ab12a74ad3a15f8bc13151c39 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 4 May 2021 11:54:06 -0400 Subject: [PATCH 0827/2710] Added a special version of a function which uses an absolute addressing mode to access the zero page. The PCEngine needs such operands to be redirected to RAM page $20 explicitly. Fixes #1482; fixes #1483. --- libsrc/common/_printf.s | 49 ++- libsrc/pce/_printf.s | 791 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 814 insertions(+), 26 deletions(-) create mode 100644 libsrc/pce/_printf.s diff --git a/libsrc/common/_printf.s b/libsrc/common/_printf.s index f5d1784ec..840d42127 100644 --- a/libsrc/common/_printf.s +++ b/libsrc/common/_printf.s @@ -3,7 +3,7 @@ ; ; Ullrich von Bassewitz, 2000-10-21 ; - + .include "zeropage.inc" .export __printf @@ -32,8 +32,8 @@ FCount = ptr2 .code ; ---------------------------------------------------------------------------- -; Get one character from the format string and increment the pointer. Will -; return zero in Y. +; Get one character from the format string, and increment the pointer. Will +; return zero in .Y. GetFormatChar: ldy #0 @@ -51,7 +51,7 @@ OutputPadChar: lda PadChar ; ---------------------------------------------------------------------------- -; Call the output function with one character in A +; Call the output function with one character in .A Output1: sta CharArg @@ -92,7 +92,7 @@ GetSignedArg: jmp axlong ; Convert to long ; ---------------------------------------------------------------------------- -; Get a long argument from the argument list. Returns 0 in Y. +; Get a long argument from the argument list. Returns 0 in .Y. GetLongArg: jsr GetIntArg ; Get high word @@ -102,7 +102,7 @@ GetLongArg: ; Run into GetIntArg fetching the low word ; ---------------------------------------------------------------------------- -; Get an integer argument from the argument list. Returns 0 in Y. +; Get an integer argument from the argument list. Returns 0 in .Y. GetIntArg: jsr DecArgList2 @@ -114,7 +114,7 @@ GetIntArg: rts ; ---------------------------------------------------------------------------- -; Read an integer from the format string. Will return zero in Y. +; Read an integer from the format string. Will return zero in .Y. ReadInt: ldy #0 @@ -247,10 +247,10 @@ Save: lda regbank,y sta RegSave,y dey bpl Save + pla ; Restore low byte of ap ; Get the parameters from the stack - pla ; Restore low byte of ap sta ArgList ; Argument list pointer stx ArgList+1 @@ -307,7 +307,7 @@ MainLoop: inc Format+1 ; Calculate, how many characters must be output. Beware: This number may -; be zero. A still contains the low byte of the pointer. +; be zero. .A still contains the low byte of the pointer. @L3: sub FSave sta FCount @@ -343,7 +343,7 @@ MainLoop: ; We're back from out(), or we didn't call it. Check for end of string. -@L4: jsr GetFormatChar ; Get one char, zero in Y +@L4: jsr GetFormatChar ; Get one char, zero in .Y tax ; End of format string reached? bne NotDone ; End not reached @@ -357,7 +357,7 @@ Rest: lda RegSave,x rts ; Still a valid format character. Check for '%' and a '%%' sequence. Output -; anything that is not a format specifier. On intro, Y is zero. +; anything that is not a format specifier. On intro, .Y is zero. NotDone: cmp #'%' @@ -371,7 +371,7 @@ NotDone: ; We have a real format specifier ; Format is: %[flags][width][.precision][mod]type -; Y is zero on entry. +; .Y is zero on entry. FormatSpec: @@ -383,7 +383,7 @@ FormatSpec: dex bpl @L1 -; Start with reading the flags if there are any. X is $FF which is used +; Start with reading the flags if there are any. .X is $FF which is used ; for "true" ReadFlags: @@ -410,7 +410,7 @@ ReadFlags: @L4: jsr IncFormatPtr jmp ReadFlags ; ...and start over -; Done with flags, read the pad char. Y is still zero if we come here. +; Done with flags, read the pad char. .Y is still zero if we come here. ReadPadding: ldx #' ' ; PadChar @@ -421,8 +421,8 @@ ReadPadding: lda (Format),y ; Read current for later @L1: stx PadChar -; Read the width. Even here, Y is still zero. A contains the current character -; from the format string +; Read the width. Even here, .Y is still zero. .A contains the current character +; from the format string. ReadWidth: cmp #'*' @@ -435,7 +435,7 @@ ReadWidth: @L2: sta Width stx Width+1 ; ...and remember in Width -; Read the precision. Even here, Y is still zero. +; Read the precision. Even here, .Y is still zero. sty Prec ; Assume Precision is zero sty Prec+1 @@ -456,7 +456,7 @@ ReadPrec: @L2: sta Prec stx Prec+1 -; Read the modifiers. Y is still zero. +; Read the modifiers. .Y is still zero. ReadMod: lda (Format),y @@ -479,9 +479,9 @@ ReadMod: ; Initialize the argument buffer pointers. We use a static buffer (ArgBuf) to ; assemble strings. A zero page index (BufIdx) is used to keep the current -; write position. A pointer to the buffer (Str) is used to point to the the -; argument in case we will not use the buffer but a user supplied string. -; Y is zero when we come here. +; write position. A pointer to the buffer (Str) is used to point to the +; argument in case we will not use the buffer but a user-supplied string. +; .Y is zero when we come here. DoFormat: sty BufIdx ; Clear BufIdx @@ -490,7 +490,7 @@ DoFormat: ldx #>Buf stx Str+1 -; Skip the current format character, then check it (current char in A) +; Skip the current format character, then check it (current char in .A) jsr IncFormatPtr @@ -777,8 +777,5 @@ ArgLen: .res 2 .data -; Stuff from OutData. Is used as a vector and must be aligned +; Stuff from OutData. Is used as a vector CallOutFunc: jmp $0000 - - - diff --git a/libsrc/pce/_printf.s b/libsrc/pce/_printf.s new file mode 100644 index 000000000..e1d2a1cf4 --- /dev/null +++ b/libsrc/pce/_printf.s @@ -0,0 +1,791 @@ +; +; _printf: Basic layer for all printf type functions. +; +; 2000-10-21, Ullrich von Bassewitz +; 2021-05-04, Greg King +; + + .include "zeropage.inc" + + .export __printf + + .import popax, pushax, pusheax, decsp6, push1, axlong, axulong + .import _ltoa, _ultoa + .import _strlower, _strlen + + .macpack generic + +; ---------------------------------------------------------------------------- +; We will store variables into the register bank in the zeropage. Define +; equates for these variables. + +ArgList = regbank+0 ; Argument list pointer +Format = regbank+2 ; Format string +OutData = regbank+4 ; Function parameters + +; ---------------------------------------------------------------------------- +; Other zero page cells + +Base = ptr1 +FSave = ptr1 +FCount = ptr2 + +.code + +; ---------------------------------------------------------------------------- +; Get one character from the format string, and increment the pointer. Will +; return zero in .Y. + +GetFormatChar: + ldy #0 + lda (Format),y +IncFormatPtr: + inc Format + bne @L1 + inc Format+1 +@L1: rts + +; ---------------------------------------------------------------------------- +; Output a pad character: outfunc (d, &padchar, 1) + +OutputPadChar: + lda PadChar + +; ---------------------------------------------------------------------------- +; Call the output function with one character in .A + +Output1: + sta CharArg + jsr PushOutData + lda #<CharArg + ldx #>CharArg + jsr pushax + jsr push1 + jmp CallOutFunc ; fout (OutData, &CharArg, 1) + +; ---------------------------------------------------------------------------- +; Decrement the argument list pointer by 2 + +DecArgList2: + lda ArgList + sub #2 + sta ArgList + bcs @L1 + dec ArgList+1 +@L1: rts + +; ---------------------------------------------------------------------------- +; Get an unsigned int or long argument depending on the IsLong flag. + +GetUnsignedArg: + lda IsLong ; Check flag + bne GetLongArg ; Long sets all + jsr GetIntArg ; Get an integer argument + jmp axulong ; Convert to unsigned long + +; ---------------------------------------------------------------------------- +; Get an signed int or long argument depending on the IsLong flag. + +GetSignedArg: + lda IsLong ; Check flag + bne GetLongArg ; Long sets all + jsr GetIntArg ; Get an integer argument + jmp axlong ; Convert to long + +; ---------------------------------------------------------------------------- +; Get a long argument from the argument list. Returns 0 in .Y. + +GetLongArg: + jsr GetIntArg ; Get high word + sta sreg + stx sreg+1 + +; Run into GetIntArg fetching the low word + +; ---------------------------------------------------------------------------- +; Get an integer argument from the argument list. Returns 0 in .Y. + +GetIntArg: + jsr DecArgList2 + ldy #1 + lda (ArgList),y + tax + dey + lda (ArgList),y + rts + +; ---------------------------------------------------------------------------- +; Read an integer from the format string. Will return zero in .Y. + +ReadInt: + ldy #0 + sty ptr1 + sty ptr1+1 ; Start with zero +@Loop: lda (Format),y ; Get format string character + sub #'0' ; Make number from ascii digit + bcc @L9 ; Jump if done + cmp #9+1 + bcs @L9 ; Jump if done + +; Skip the digit character + + jsr IncFormatPtr + +; Add the digit to the value we have in ptr1 + + pha ; Save digit value + lda ptr1 + ldx ptr1+1 + asl ptr1 + rol ptr1+1 ; * 2 + asl ptr1 + rol ptr1+1 ; * 4, assume carry clear + adc ptr1 + sta ptr1 + txa + adc ptr1+1 + sta ptr1+1 ; * 5 + asl ptr1 + rol ptr1+1 ; * 10, assume carry clear + pla + adc ptr1 ; Add digit value + sta ptr1 + bcc @Loop + inc ptr1+1 + bcs @Loop ; Branch always + +; We're done converting + +@L9: lda ptr1 + ldx ptr1+1 ; Load result + rts + + +; ---------------------------------------------------------------------------- +; Put a character into the argument buffer and increment the buffer index + +PutBuf: ldy BufIdx + inc BufIdx + sta Buf,y + rts + +; ---------------------------------------------------------------------------- +; Get a pointer to the current buffer end and push it onto the stack + +PushBufPtr: + lda #<Buf + ldx #>Buf + add BufIdx + bcc @L1 + inx +@L1: jmp pushax + +; ---------------------------------------------------------------------------- +; Push OutData onto the software stack + +PushOutData: + lda OutData + ldx OutData+1 + jmp pushax + +; ---------------------------------------------------------------------------- +; Output Width pad characters +; + +PadLoop: + jsr OutputPadChar +OutputPadding: + inc Width + bne PadLoop + inc Width+1 + bne PadLoop + rts + +; ---------------------------------------------------------------------------- +; Output the argument itself: outfunc (d, str, arglen); +; + +OutputArg: + jsr PushOutData + lda Str + ldx Str+1 + jsr pushax + lda ArgLen + ldx ArgLen+1 + jsr pushax + jmp CallOutFunc + +; ---------------------------------------------------------------------------- +; ltoa: Wrapper for _ltoa that pushes all arguments + +ltoa: sty Base ; Save base + jsr pusheax ; Push value + jsr PushBufPtr ; Push the buffer pointer... + lda Base ; Restore base + jmp _ltoa ; ultoa (l, s, base); + + +; ---------------------------------------------------------------------------- +; ultoa: Wrapper for _ultoa that pushes all arguments + +ultoa: sty Base ; Save base + jsr pusheax ; Push value + jsr PushBufPtr ; Push the buffer pointer... + lda Base ; Restore base + jmp _ultoa ; ultoa (l, s, base); + + +; ---------------------------------------------------------------------------- +; + +__printf: + +; Save the register bank variables into the save area + + pha ; Save low byte of ap + ldy #5 + +; The PC-Engine puts the zero-page at $2000. The indexed-by-.Y addressing mode +; doesn't allow zero-page addressing. Therefore, the operand must be redirected +; explicitly. + +Save: lda regbank+$2000,y + sta RegSave,y + dey + bpl Save + pla ; Restore low byte of ap + +; Get the parameters from the stack + + sta ArgList ; Argument list pointer + stx ArgList+1 + + jsr popax ; Format string + sta Format + stx Format+1 + + jsr popax ; Output descriptor + sta OutData + stx OutData+1 + +; Initialize the output counter in the output descriptor to zero + + lda #0 + tay + sta (OutData),y + iny + sta (OutData),y + +; Get the output function from the output descriptor and remember it + + iny + lda (OutData),y + sta CallOutFunc+1 + iny + lda (OutData),y + sta CallOutFunc+2 + +; Start parsing the format string + +MainLoop: + lda Format ; Remember current format pointer + sta FSave + lda Format+1 + sta FSave+1 + + ldy #0 ; Index +@L1: lda (Format),y ; Get next char + beq @L2 ; Jump on end of string + cmp #'%' ; Format spec? + beq @L2 + iny ; Bump pointer + bne @L1 + inc Format+1 ; Bump high byte of pointer + bne @L1 ; Branch always + +; Found a '%' character or end of string. Update the Format pointer so it is +; current (points to this character). + +@L2: tya ; Low byte of offset + add Format + sta Format + bcc @L3 + inc Format+1 + +; Calculate, how many characters must be output. Beware: This number may +; be zero. .A still contains the low byte of the pointer. + +@L3: sub FSave + sta FCount + lda Format+1 + sbc FSave+1 + sta FCount+1 + ora FCount ; Is the result zero? + beq @L4 ; Jump if yes + +; Output the characters that we have until now. To make the call to out +; faster, build the stack frame by hand (don't use pushax) + + jsr decsp6 ; 3 args + ldy #5 + lda OutData+1 + sta (sp),y + dey + lda OutData + sta (sp),y + dey + lda FSave+1 + sta (sp),y + dey + lda FSave + sta (sp),y + dey + lda FCount+1 + sta (sp),y + dey + lda FCount + sta (sp),y + jsr CallOutFunc ; Call the output function + +; We're back from out(), or we didn't call it. Check for end of string. + +@L4: jsr GetFormatChar ; Get one char, zero in .Y + tax ; End of format string reached? + bne NotDone ; End not reached + +; End of format string reached. Restore the zeropage registers and return. + + ldx #5 +Rest: lda RegSave,x + +; The indexed-by-.X addressing mode does allow zero-page addressing. +; Therefore, this operand doesn't need to be redirected explicitly. + + sta regbank,x + dex + bpl Rest + rts + +; Still a valid format character. Check for '%' and a '%%' sequence. Output +; anything that is not a format specifier. On intro, .Y is zero. + +NotDone: + cmp #'%' + bne @L1 + lda (Format),y ; Check for "%%" + cmp #'%' + bne FormatSpec ; Jump if really a format specifier + jsr IncFormatPtr ; Skip the second '%' +@L1: jsr Output1 ; Output the character... + jmp MainLoop ; ...and continue + +; We have a real format specifier +; Format is: %[flags][width][.precision][mod]type +; .Y is zero on entry. + +FormatSpec: + +; Initialize the flags + + lda #0 + ldx #FormatVarSize-1 +@L1: sta FormatVars,x + dex + bpl @L1 + +; Start with reading the flags if there are any. .X is $FF which is used +; for "true" + +ReadFlags: + lda (Format),y ; Get next char... + cmp #'-' + bne @L1 + stx LeftJust + beq @L4 + +@L1: cmp #'+' + bne @L2 + stx AddSign + beq @L4 + +@L2: cmp #' ' + bne @L3 + stx AddBlank + beq @L4 + +@L3: cmp #'#' + bne ReadPadding + stx AltForm + +@L4: jsr IncFormatPtr + jmp ReadFlags ; ...and start over + +; Done with flags, read the pad char. .Y is still zero if we come here. + +ReadPadding: + ldx #' ' ; PadChar + cmp #'0' + bne @L1 + tax ; PadChar is '0' + jsr IncFormatPtr + lda (Format),y ; Read current for later +@L1: stx PadChar + +; Read the width. Even here, .Y is still zero. .A contains the current character +; from the format string. + +ReadWidth: + cmp #'*' + bne @L1 + jsr IncFormatPtr + jsr GetIntArg ; Width is an additional argument + jmp @L2 + +@L1: jsr ReadInt ; Read integer from format string... +@L2: sta Width + stx Width+1 ; ...and remember in Width + +; Read the precision. Even here, .Y is still zero. + + sty Prec ; Assume Precision is zero + sty Prec+1 + lda (Format),y ; Load next format string char + cmp #'.' ; Precision given? + bne ReadMod ; Branch if no precision given + +ReadPrec: + jsr IncFormatPtr ; Skip the '.' + lda (Format),y + cmp #'*' ; Variable precision? + bne @L1 + jsr IncFormatPtr ; Skip the '*' + jsr GetIntArg ; Get integer argument + jmp @L2 + +@L1: jsr ReadInt ; Read integer from format string +@L2: sta Prec + stx Prec+1 + +; Read the modifiers. .Y is still zero. + +ReadMod: + lda (Format),y + cmp #'z' ; size_t - same as unsigned + beq @L2 + cmp #'h' ; short - same as int + beq @L2 + cmp #'t' ; ptrdiff_t - same as int + beq @L2 + cmp #'j' ; intmax_t/uintmax_t - same as long + beq @L1 + cmp #'L' ; long double + beq @L1 + cmp #'l' ; long int + bne DoFormat +@L1: lda #$FF + sta IsLong +@L2: jsr IncFormatPtr + jmp ReadMod + +; Initialize the argument buffer pointers. We use a static buffer (ArgBuf) to +; assemble strings. A zero page index (BufIdx) is used to keep the current +; write position. A pointer to the buffer (Str) is used to point to the +; argument in case we will not use the buffer but a user-supplied string. +; .Y is zero when we come here. + +DoFormat: + sty BufIdx ; Clear BufIdx + ldx #<Buf + stx Str + ldx #>Buf + stx Str+1 + +; Skip the current format character, then check it (current char in .A) + + jsr IncFormatPtr + +; Is it a character? + + cmp #'c' + bne CheckInt + +; It is a character + + jsr GetIntArg ; Get the argument (promoted to int) + sta Buf ; Place it as zero terminated string... + lda #0 + sta Buf+1 ; ...into the buffer + jmp HaveArg ; Done + +; Is it an integer? + +CheckInt: + cmp #'d' + beq @L1 + cmp #'i' + bne CheckCount + +; It is an integer + +@L1: ldx #0 + lda AddBlank ; Add a blank for positives? + beq @L2 ; Jump if no + ldx #' ' +@L2: lda AddSign ; Add a plus for positives (precedence)? + beq @L3 + ldx #'+' +@L3: stx Leader + +; Integer argument + + jsr GetSignedArg ; Get argument as a long + ldy sreg+1 ; Check sign + bmi @Int1 + ldy Leader + beq @Int1 + sty Buf + inc BufIdx + +@Int1: ldy #10 ; Base + jsr ltoa ; Push arguments, call _ltoa + jmp HaveArg + +; Is it a count pseudo format? + +CheckCount: + cmp #'n' + bne CheckOctal + +; It is a count pseudo argument + + jsr GetIntArg + sta ptr1 + stx ptr1+1 ; Get user supplied pointer + ldy #0 + lda (OutData),y ; Low byte of OutData->ccount + sta (ptr1),y + iny + lda (OutData),y ; High byte of OutData->ccount + sta (ptr1),y + jmp MainLoop ; Done + +; Check for an octal digit + +CheckOctal: + cmp #'o' + bne CheckPointer + +; Integer in octal representation + + jsr GetSignedArg ; Get argument as a long + ldy AltForm ; Alternative form? + beq @Oct1 ; Jump if no + pha ; Save low byte of value + stx tmp1 + ora tmp1 + ora sreg + ora sreg+1 + ora Prec + ora Prec+1 ; Check if value or Prec != 0 + beq @Oct1 + lda #'0' + jsr PutBuf + pla ; Restore low byte + +@Oct1: ldy #8 ; Load base + jsr ltoa ; Push arguments, call _ltoa + jmp HaveArg + +; Check for a pointer specifier (%p) + +CheckPointer: + cmp #'p' + bne CheckString + +; It's a pointer. Use %#x conversion + + ldx #0 + stx IsLong ; IsLong = 0; + inx + stx AltForm ; AltForm = 1; + lda #'x' + bne IsHex ; Branch always + +; Check for a string specifier (%s) + +CheckString: + cmp #'s' + bne CheckUnsigned + +; It's a string + + jsr GetIntArg ; Get 16bit argument + sta Str + stx Str+1 + jmp HaveArg + +; Check for an unsigned integer (%u) + +CheckUnsigned: + cmp #'u' + bne CheckHex + +; It's an unsigned integer + + jsr GetUnsignedArg ; Get argument as unsigned long + ldy #10 ; Load base + jsr ultoa ; Push arguments, call _ultoa + jmp HaveArg + +; Check for a hexadecimal integer (%x) + +CheckHex: + cmp #'x' + beq IsHex + cmp #'X' + bne UnknownFormat + +; Hexadecimal integer + +IsHex: pha ; Save the format spec + lda AltForm + beq @L1 + lda #'0' + jsr PutBuf + lda #'X' + jsr PutBuf + +@L1: jsr GetUnsignedArg ; Get argument as an unsigned long + ldy #16 ; Load base + jsr ultoa ; Push arguments, call _ultoa + + pla ; Get the format spec + cmp #'x' ; Lower case? + bne @L2 + lda Str + ldx Str+1 + jsr _strlower ; Make characters lower case +@L2: jmp HaveArg + +; Unknown format character, skip it + +UnknownFormat: + jmp MainLoop + +; We have the argument, do argument string formatting + +HaveArg: + +; ArgLen = strlen (Str); + + lda Str + ldx Str+1 + jsr _strlen ; Get length of argument + sta ArgLen + stx ArgLen+1 + +; if (Prec && Prec < ArgLen) ArgLen = Prec; + + lda Prec + ora Prec+1 + beq @L1 + ldx Prec + cpx ArgLen + lda Prec+1 + tay + sbc ArgLen+1 + bcs @L1 + stx ArgLen + sty ArgLen+1 + +; if (Width > ArgLen) { +; Width -= ArgLen; /* padcount */ +; } else { +; Width = 0; +; } +; Since width is used as a counter below, calculate -(width+1) + +@L1: sec + lda Width + sbc ArgLen + tax + lda Width+1 + sbc ArgLen+1 + bcs @L2 + lda #0 + tax +@L2: eor #$FF + sta Width+1 + txa + eor #$FF + sta Width + +; /* Do padding on the left side if needed */ +; if (!leftjust) { +; /* argument right justified */ +; while (width) { +; fout (d, &padchar, 1); +; --width; +; } +; } + + lda LeftJust + bne @L3 + jsr OutputPadding + +; Output the argument itself + +@L3: jsr OutputArg + +; /* Output right padding bytes if needed */ +; if (leftjust) { +; /* argument left justified */ +; while (width) { +; fout (d, &padchar, 1); +; --width; +; } +; } + + lda LeftJust + beq @L4 + jsr OutputPadding + +; Done, parse next chars from format string + +@L4: jmp MainLoop + + +; ---------------------------------------------------------------------------- +; Local data (all static) + +.bss + +; Save area for the zero page registers +RegSave: .res regbanksize + +; One character argument for OutFunc +CharArg: .byte 0 + +; Format variables +FormatVars: +LeftJust: .byte 0 +AddSign: .byte 0 +AddBlank: .byte 0 +AltForm: .byte 0 +PadChar: .byte 0 +Width: .word 0 +Prec: .word 0 +IsLong: .byte 0 +Leader: .byte 0 +BufIdx: .byte 0 ; Argument string pointer +FormatVarSize = * - FormatVars + +; Argument buffer and pointer +Buf: .res 20 +Str: .word 0 +ArgLen: .res 2 + +.data + +; Stuff from OutData. Is used as a vector +CallOutFunc: jmp $0000 From c9f242e566f5a86c0bf4809aa5f1e2ddbc617b63 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 5 May 2021 14:42:29 +0200 Subject: [PATCH 0828/2710] Extend #pragma wrapped-call to support "bank" argument --- src/cc65/declare.c | 4 +++- src/cc65/expr.c | 13 ++++++++++--- src/cc65/funcdesc.h | 1 + src/cc65/pragma.c | 10 +++++++--- src/cc65/wrappedcall.c | 9 +++++---- src/cc65/wrappedcall.h | 4 ++-- 6 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 0868c2082..0b705a320 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1739,6 +1739,7 @@ static FuncDesc* ParseFuncDecl (void) SymEntry* Sym; SymEntry* WrappedCall; unsigned char WrappedCallData; + int WrappedCallUseBank; /* Create a new function descriptor */ FuncDesc* F = NewFuncDesc (); @@ -1791,10 +1792,11 @@ static FuncDesc* ParseFuncDecl (void) RememberFunctionLevel (F); /* Did we have a WrappedCall for this function? */ - GetWrappedCall((void **) &WrappedCall, &WrappedCallData); + GetWrappedCall((void **) &WrappedCall, &WrappedCallData, &WrappedCallUseBank); if (WrappedCall) { F->WrappedCall = WrappedCall; F->WrappedCallData = WrappedCallData; + F->WrappedCallUseBank = WrappedCallUseBank; } /* Return the function descriptor */ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index bc277f13b..d2cd4ca5c 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -997,9 +997,16 @@ static void FunctionCall (ExprDesc* Expr) char tmp[64]; StrBuf S = AUTO_STRBUF_INITIALIZER; - /* Store the WrappedCall data in tmp4 */ - sprintf(tmp, "ldy #%u", Func->WrappedCallData); - SB_AppendStr (&S, tmp); + if (Func->WrappedCallUseBank) { + /* Store the bank attribute in tmp4 */ + SB_AppendStr (&S, "ldy #<.bank(_"); + SB_AppendStr (&S, (const char*) Expr->Name); + SB_AppendChar (&S, ')'); + } else { + /* Store the WrappedCall data in tmp4 */ + sprintf(tmp, "ldy #%u", Func->WrappedCallData); + SB_AppendStr (&S, tmp); + } g_asmcode (&S); SB_Clear(&S); diff --git a/src/cc65/funcdesc.h b/src/cc65/funcdesc.h index 423e7621f..5875723fb 100644 --- a/src/cc65/funcdesc.h +++ b/src/cc65/funcdesc.h @@ -72,6 +72,7 @@ struct FuncDesc { struct FuncDesc* FuncDef; /* Descriptor used in definition */ struct SymEntry* WrappedCall; /* Pointer to the WrappedCall */ unsigned char WrappedCallData;/* The WrappedCall's user data */ + int WrappedCallUseBank;/* Flag: does WrappedCall use .bank() or literal value */ }; diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index f0f7ed36f..249e4f1b4 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -497,6 +497,7 @@ static void WrappedCallPragma (StrBuf* B) const char *Name; long Val; SymEntry *Entry; + int UseBank = 0; /* Check for the "push" or "pop" keywords */ switch (ParsePushPop (B)) { @@ -535,12 +536,15 @@ static void WrappedCallPragma (StrBuf* B) goto ExitPoint; } - if (!GetNumber (B, &Val)) { + /* Next must be either a numeric value, or "bank" */ + if (HasStr (B, "bank")) { + UseBank = 1; + } else if (!GetNumber (B, &Val)) { Error ("Value required for wrapped-call identifier"); goto ExitPoint; } - if (Val < 0 || Val > 255) { + if (!UseBank && (Val < 0 || Val > 255)) { Error ("Identifier must be between 0-255"); goto ExitPoint; } @@ -552,7 +556,7 @@ static void WrappedCallPragma (StrBuf* B) /* Check if the name is valid */ if (Entry && (Entry->Flags & SC_FUNC) == SC_FUNC) { - PushWrappedCall(Entry, (unsigned char) Val); + PushWrappedCall(Entry, (unsigned char) Val, UseBank); Entry->Flags |= SC_REF; GetFuncDesc (Entry->Type)->Flags |= FD_CALL_WRAPPER; diff --git a/src/cc65/wrappedcall.c b/src/cc65/wrappedcall.c index 18cb507ac..a67f9815d 100644 --- a/src/cc65/wrappedcall.c +++ b/src/cc65/wrappedcall.c @@ -64,13 +64,13 @@ static IntPtrStack WrappedCalls; -void PushWrappedCall (void *Ptr, unsigned char Val) +void PushWrappedCall (void *Ptr, unsigned char Val, int UseBank) /* Push the current WrappedCall */ { if (IPS_IsFull (&WrappedCalls)) { Error ("WrappedCall stack overflow"); } else { - IPS_Push (&WrappedCalls, Val, Ptr); + IPS_Push (&WrappedCalls, Val | (UseBank << 8), Ptr); } } @@ -88,7 +88,7 @@ void PopWrappedCall (void) -void GetWrappedCall (void **Ptr, unsigned char *Val) +void GetWrappedCall (void **Ptr, unsigned char *Val, int *UseBank) /* Get the current WrappedCall */ { if (IPS_GetCount (&WrappedCalls) < 1) { @@ -97,6 +97,7 @@ void GetWrappedCall (void **Ptr, unsigned char *Val) } else { long Temp; IPS_Get (&WrappedCalls, &Temp, Ptr); - *Val = (unsigned char) Temp; + *UseBank = (int) Temp >> 8; + *Val = (unsigned char) Temp & 0xff; } } diff --git a/src/cc65/wrappedcall.h b/src/cc65/wrappedcall.h index 3517c2465..ddf6dd2b9 100644 --- a/src/cc65/wrappedcall.h +++ b/src/cc65/wrappedcall.h @@ -50,13 +50,13 @@ -void PushWrappedCall (void *Ptr, unsigned char Val); +void PushWrappedCall (void *Ptr, unsigned char Val, int usebank); /* Push the current WrappedCall */ void PopWrappedCall (void); /* Pop the current WrappedCall */ -void GetWrappedCall (void **Ptr, unsigned char *Val); +void GetWrappedCall (void **Ptr, unsigned char *Val, int *usebank); /* Get the current WrappedCall, if any */ From 729690e9e97a9eefa06d744fb1762caa3351f548 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 5 May 2021 16:07:47 +0200 Subject: [PATCH 0829/2710] document the wrapped-call extension --- doc/cc65.sgml | 5 ++++- doc/ld65.sgml | 3 +-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index dc754cb31..f4b31b8bc 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1388,7 +1388,10 @@ parameter with the <tt/#pragma/. the <tt/Y/ register if it wraps any variadic functions (they have "<tt/.../" in their prototypes). - The identifier is an 8-bit number that's set into <tt/tmp4/. + The identifier is an 8-bit number that's set into <tt/tmp4/. If the identifier + is "bank", then a <tt><htmlurl url="ca65.html#.BANK" name=".bank"></tt> operator will be used + to determine the number from the bank attribute defined in the linker config, + see <htmlurl url="ld65.html#MEMORY" name="Other MEMORY area attributes">. The address of a wrapped function is passed in <tt/ptr4/. The wrapper can call that function by using "<tt/jsr callptr4/". diff --git a/doc/ld65.sgml b/doc/ld65.sgml index 538948fc0..56d77ca63 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -760,7 +760,7 @@ There's a library subroutine called <tt/copydata/ (in a module named look at it's inner workings before using it! -<sect1>Other MEMORY area attributes<p> +<sect1>Other MEMORY area attributes<label id="MEMORY"><p> There are some other attributes not covered above. Before starting the reference section, I will discuss the remaining things here. @@ -822,7 +822,6 @@ that has a segment reference (for example a symbol). The result of this function is the value of the bank attribute for the run memory area of the segment. - <sect1>Other SEGMENT attributes<p> Segments may be aligned to some memory boundary. Specify "<tt/align = num/" to From 0fbf2af09d9cdff1f73a47d79b7735258db4a34b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 7 May 2021 18:38:26 +0200 Subject: [PATCH 0830/2710] Fix the warning that is produced for unused functions --- src/cc65/error.c | 2 ++ src/cc65/error.h | 1 + src/cc65/symtab.c | 4 ++++ 3 files changed, 7 insertions(+) diff --git a/src/cc65/error.c b/src/cc65/error.c index 0118d50b8..b1529d0b5 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -78,6 +78,7 @@ IntStack WarnUnreachableCode= INTSTACK(1); /* - unreachable code */ IntStack WarnUnusedLabel = INTSTACK(1); /* - unused labels */ IntStack WarnUnusedParam = INTSTACK(1); /* - unused parameters */ IntStack WarnUnusedVar = INTSTACK(1); /* - unused variables */ +IntStack WarnUnusedFunc = INTSTACK(1); /* - unused functions */ /* Map the name of a warning to the intstack that holds its state */ typedef struct WarnMapEntry WarnMapEntry; @@ -97,6 +98,7 @@ static WarnMapEntry WarnMap[] = { { &WarnStructParam, "struct-param" }, { &WarnUnknownPragma, "unknown-pragma" }, { &WarnUnreachableCode, "unreachable-code" }, + { &WarnUnusedFunc, "unused-func" }, { &WarnUnusedLabel, "unused-label" }, { &WarnUnusedParam, "unused-param" }, { &WarnUnusedVar, "unused-var" }, diff --git a/src/cc65/error.h b/src/cc65/error.h index 31c46f513..c4420c434 100644 --- a/src/cc65/error.h +++ b/src/cc65/error.h @@ -75,6 +75,7 @@ extern IntStack WarnUnreachableCode; /* - unreachable code */ extern IntStack WarnUnusedLabel; /* - unused labels */ extern IntStack WarnUnusedParam; /* - unused parameters */ extern IntStack WarnUnusedVar; /* - unused variables */ +extern IntStack WarnUnusedFunc; /* - unused functions */ /* Forward */ struct StrBuf; diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 6ec255497..4073a38bc 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -173,6 +173,10 @@ static void CheckSymTable (SymTable* Tab) if (IS_Get (&WarnUnusedParam)) { Warning ("Parameter '%s' is never used", Entry->Name); } + } else if (Flags & SC_FUNC) { + if (IS_Get (&WarnUnusedFunc)) { + Warning ("Function '%s' is defined but never used", Entry->Name); + } } else { if (IS_Get (&WarnUnusedVar)) { Warning ("Variable '%s' is defined but never used", Entry->Name); From 3ea330f15fb3829dcab038647dd930481d51b7d1 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 7 May 2021 21:32:04 +0200 Subject: [PATCH 0831/2710] update docs --- doc/cc65.sgml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index dc754cb31..ae80b11b0 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -563,6 +563,8 @@ Here is a description of all the command line options: Warn about #pragmas that aren't recognized by cc65. <tag><tt/unreachable-code/</tag> Warn about unreachable code in cases of comparing constants, etc. + <tag><tt/unused-func/</tag> + Warn about unused functions. <tag><tt/unused-label/</tag> Warn about unused labels. <tag><tt/unused-param/</tag> From 4c37f12a4d5a35e113a59b9f8299801f616564da Mon Sep 17 00:00:00 2001 From: Polluks <polluks@sdf.lonestar.org> Date: Sat, 8 May 2021 18:23:19 +0200 Subject: [PATCH 0832/2710] Optimised strlen --- libsrc/common/strlen.s | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/libsrc/common/strlen.s b/libsrc/common/strlen.s index e89039179..8d5bc20fc 100644 --- a/libsrc/common/strlen.s +++ b/libsrc/common/strlen.s @@ -5,17 +5,27 @@ ; the usage of only ptr2 here! Keep in mind when appling changes ; and check the other implementations too! ; -; int strlen (const char* s); +; size_t __fastcall__ strlen (const char* s); ; .export _strlen .importzp ptr2 + .macpack cpu _strlen: sta ptr2 ; Save s stx ptr2+1 +.if (.cpu .bitand ::CPU_ISET_HUC6280) + clx + cly +.else ldx #0 ; YX used as counter +.if (.cpu .bitand ::CPU_ISET_65816) + txy +.else ldy #0 +.endif +.endif L1: lda (ptr2),y beq L9 From b1f81d5e21c1965b9d1592d1c20b0c2940edc9e3 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sat, 8 May 2021 16:50:08 +0000 Subject: [PATCH 0833/2710] Optimised code --- libsrc/atari5200/y2k.inc | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/libsrc/atari5200/y2k.inc b/libsrc/atari5200/y2k.inc index a44d027a1..f8531451c 100644 --- a/libsrc/atari5200/y2k.inc +++ b/libsrc/atari5200/y2k.inc @@ -32,10 +32,8 @@ Y2K3 STA $0732,X LDA #$60 ; Store RTS opcode @ end STA $0750 JSR $0600 ; Show title screen - LDY #$00 ; Clear RAM from $0600-$3FFF + LDY #<$0600 ; Clear RAM from $0600-$3FFF STY $80 - LDA #$06 + LDA #>$0600 STA $81 - JSR CLRRAM - RTS - + JMP CLRRAM From 07bd5089ec502a4aab1e2cfd381ba8a7d86d22c8 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 9 May 2021 19:27:33 +0200 Subject: [PATCH 0834/2710] Define CLOCKS_PER_SEC as _clocks_per_sec() if _clocks_per_sec() is actually available. There are programs checking for the existence of CLOCKS_PER_SEC before usage. We don't want to mislead them. --- include/time.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/time.h b/include/time.h index 49d7e6870..92cbeee37 100644 --- a/include/time.h +++ b/include/time.h @@ -98,11 +98,11 @@ extern struct _timezone { # define CLOCKS_PER_SEC 50 #elif defined(__PCE__) # define CLOCKS_PER_SEC 60 -#elif defined(__GAMATE__) +#elif defined(__GAMATE__) # define CLOCKS_PER_SEC 135 /* FIXME */ -#elif defined(__GEOS__) +#elif defined(__GEOS__) # define CLOCKS_PER_SEC 1 -#else +#elif defined(__ATARI__) || defined (__LYNX__) /* Read the clock rate at runtime */ clock_t _clocks_per_sec (void); # define CLOCKS_PER_SEC _clocks_per_sec() From 6e79379405f09d3c51765db44a16c69b28289797 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 9 May 2021 16:34:53 -0500 Subject: [PATCH 0835/2710] Synertek Systems Sym-1 machine-specific files --- libsrc/sym1/beep.s | 24 ++ libsrc/sym1/bitio.s | 230 +++++++++++++++++ libsrc/sym1/crt0.s | 65 +++++ libsrc/sym1/display.s | 154 ++++++++++++ libsrc/sym1/getchar.s | 21 ++ libsrc/sym1/libref.s | 3 + libsrc/sym1/putchar.s | 23 ++ libsrc/sym1/read.s | 54 ++++ libsrc/sym1/tapeio.s | 58 +++++ libsrc/sym1/write.s | 53 ++++ samples/symDisplay.c | 384 +++++++++++++++++++++++++++++ samples/symHello.c | 39 +++ samples/symIO.c | 170 +++++++++++++ samples/symTiny.c | 42 ++++ samples/tutorial/sym1/build | 36 +++ samples/tutorial/sym1/build_32k | 36 +++ samples/tutorial/sym1/build_4k | 36 +++ samples/tutorial/sym1/clean | 14 ++ samples/tutorial/sym1/readme.txt | 11 + samples/tutorial/sym1/symDisplay.c | 384 +++++++++++++++++++++++++++++ samples/tutorial/sym1/symHello.c | 39 +++ samples/tutorial/sym1/symIO.c | 170 +++++++++++++ samples/tutorial/sym1/symTiny.c | 42 ++++ 23 files changed, 2088 insertions(+) create mode 100644 libsrc/sym1/beep.s create mode 100644 libsrc/sym1/bitio.s create mode 100644 libsrc/sym1/crt0.s create mode 100644 libsrc/sym1/display.s create mode 100644 libsrc/sym1/getchar.s create mode 100644 libsrc/sym1/libref.s create mode 100644 libsrc/sym1/putchar.s create mode 100644 libsrc/sym1/read.s create mode 100644 libsrc/sym1/tapeio.s create mode 100644 libsrc/sym1/write.s create mode 100644 samples/symDisplay.c create mode 100644 samples/symHello.c create mode 100644 samples/symIO.c create mode 100644 samples/symTiny.c create mode 100644 samples/tutorial/sym1/build create mode 100644 samples/tutorial/sym1/build_32k create mode 100644 samples/tutorial/sym1/build_4k create mode 100644 samples/tutorial/sym1/clean create mode 100644 samples/tutorial/sym1/readme.txt create mode 100644 samples/tutorial/sym1/symDisplay.c create mode 100644 samples/tutorial/sym1/symHello.c create mode 100644 samples/tutorial/sym1/symIO.c create mode 100644 samples/tutorial/sym1/symTiny.c diff --git a/libsrc/sym1/beep.s b/libsrc/sym1/beep.s new file mode 100644 index 000000000..a1f978563 --- /dev/null +++ b/libsrc/sym1/beep.s @@ -0,0 +1,24 @@ +; --------------------------------------------------------------------------- +; beep.s +; +; for Sym-1 +; +; Wayne Parham +; +; wayne@parhamdata.com +; --------------------------------------------------------------------------- + +.include "sym1.inc" + +.export _beep + +.segment "CODE" + +.proc _beep: near +; --------------------------------------------------------------------------- + jsr BEEP ; Beep + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc diff --git a/libsrc/sym1/bitio.s b/libsrc/sym1/bitio.s new file mode 100644 index 000000000..5aa0fde8b --- /dev/null +++ b/libsrc/sym1/bitio.s @@ -0,0 +1,230 @@ +; --------------------------------------------------------------------------- +; bitio.s +; +; for Sym-1 +; +; Wayne Parham +; +; wayne@parhamdata.com +; --------------------------------------------------------------------------- + +.include "sym1.inc" + +.export _set_DDR1A, _get_DDR1A, _set_IOR1A, _get_IOR1A +.export _set_DDR1B, _get_DDR1B, _set_IOR1B, _get_IOR1B +.export _set_DDR2A, _get_DDR2A, _set_IOR2A, _get_IOR2A +.export _set_DDR2B, _get_DDR2B, _set_IOR2B, _get_IOR2B +.export _set_DDR3A, _get_DDR3A, _set_IOR3A, _get_IOR3A +.export _set_DDR3B, _get_DDR3B, _set_IOR3B, _get_IOR3B + +.segment "CODE" + +.proc _set_DDR1A: near +; --------------------------------------------------------------------------- + sta DDR1A ; Write data direction register for port 1A + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_DDR1A: near +; --------------------------------------------------------------------------- + lda DDR1A ; Read data direction register for port 1A + ldx #$00 ; + rts ; Return DDR1A +; --------------------------------------------------------------------------- +.endproc + +.proc _set_IOR1A: near +; --------------------------------------------------------------------------- + sta OR1A ; Write I/O register for port 1A + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_IOR1A: near +; --------------------------------------------------------------------------- + lda OR1A ; Read I/O register for port 1A + ldx #$00 ; + rts ; Return OR1A +; --------------------------------------------------------------------------- +.endproc + + +.proc _set_DDR1B: near +; --------------------------------------------------------------------------- + sta DDR1B ; Write data direction register for port 1B + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_DDR1B: near +; --------------------------------------------------------------------------- + lda DDR1B ; Read data direction register for port 1B + ldx #$00 ; + rts ; Return DDR1B +; --------------------------------------------------------------------------- +.endproc + +.proc _set_IOR1B: near +; --------------------------------------------------------------------------- + sta OR1B ; Write I/O register for port 1B + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_IOR1B: near +; --------------------------------------------------------------------------- + lda OR1B ; Read I/O register for port 1B + ldx #$00 ; + rts ; Return OR1B +; --------------------------------------------------------------------------- +.endproc + + +.proc _set_DDR2A: near +; --------------------------------------------------------------------------- + sta DDR2A ; Write data direction register for port 2A + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_DDR2A: near +; --------------------------------------------------------------------------- + lda DDR2A ; Read data direction register for port 2A + ldx #$00 ; + rts ; Return DDR2A +; --------------------------------------------------------------------------- +.endproc + +.proc _set_IOR2A: near +; --------------------------------------------------------------------------- + sta OR2A ; Write I/O register for port 2A + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_IOR2A: near +; --------------------------------------------------------------------------- + lda OR2A ; Read I/O register for port 2A + ldx #$00 ; + rts ; Return OR2A +; --------------------------------------------------------------------------- +.endproc + + +.proc _set_DDR2B: near +; --------------------------------------------------------------------------- + sta DDR2B ; Write data direction register for port 2B + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_DDR2B: near +; --------------------------------------------------------------------------- + lda DDR2B ; Read data direction register for port 2B + ldx #$00 ; + rts ; Return DDR2B +; --------------------------------------------------------------------------- +.endproc + +.proc _set_IOR2B: near +; --------------------------------------------------------------------------- + sta OR2B ; Write I/O register for port 2B + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_IOR2B: near +; --------------------------------------------------------------------------- + lda OR2B ; Read I/O register for port 2B + ldx #$00 ; + rts ; Return OR2B +; --------------------------------------------------------------------------- +.endproc + + +.proc _set_DDR3A: near +; --------------------------------------------------------------------------- + sta DDR3A ; Write data direction register for port 3A + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_DDR3A: near +; --------------------------------------------------------------------------- + lda DDR3A ; Read data direction register for port 3A + ldx #$00 ; + rts ; Return DDR3A +; --------------------------------------------------------------------------- +.endproc + +.proc _set_IOR3A: near +; --------------------------------------------------------------------------- + sta OR3A ; Write I/O register for port 3A + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_IOR3A: near +; --------------------------------------------------------------------------- + lda OR3A ; Read I/O register for port 3A + ldx #$00 ; + rts ; Return OR3A +; --------------------------------------------------------------------------- +.endproc + + +.proc _set_DDR3B: near +; --------------------------------------------------------------------------- + sta DDR3B ; Write data direction register for port 3B + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_DDR3B: near +; --------------------------------------------------------------------------- + lda DDR3B ; Read data direction register for port 3B + ldx #$00 ; + rts ; Return DDR3B +; --------------------------------------------------------------------------- +.endproc + +.proc _set_IOR3B: near +; --------------------------------------------------------------------------- + sta OR3B ; Write I/O register for port 3B + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_IOR3B: near +; --------------------------------------------------------------------------- + lda OR3B ; Read I/O register for port 3B + ldx #$00 ; + rts ; Return OR3B +; --------------------------------------------------------------------------- +.endproc + diff --git a/libsrc/sym1/crt0.s b/libsrc/sym1/crt0.s new file mode 100644 index 000000000..a85887991 --- /dev/null +++ b/libsrc/sym1/crt0.s @@ -0,0 +1,65 @@ +; --------------------------------------------------------------------------- +; crt0.s +; +; for Sym-1 +; +; Wayne Parham +; +; wayne@parhamdata.com +; --------------------------------------------------------------------------- + + .export _init, _exit + .export __STARTUP__ : absolute = 1 ; Mark as startup + + .import _main + .import initlib, donelib, copydata, zerobss + .import __RAM_START__, __RAM_SIZE__ ; Linker generated + .import __STACKSIZE__ ; Linker generated + + .include "zeropage.inc" + .include "sym1.inc" + +; --------------------------------------------------------------------------- +; Place the startup code in a special segment + +.segment "STARTUP" + +; --------------------------------------------------------------------------- +; A little light housekeeping + +_init: jsr ACCESS ; Unlock System RAM + cld ; Clear decimal mode +; --------------------------------------------------------------------------- +; Turn off console echo + + lda TECHO + and #$7F + sta TECHO +; --------------------------------------------------------------------------- +; Set cc65 argument stack pointer + + lda #<(__RAM_START__ + __RAM_SIZE__) + sta sp + lda #>(__RAM_START__ + __RAM_SIZE__) + sta sp+1 +; --------------------------------------------------------------------------- +; Initialize memory storage + + jsr zerobss ; Clear BSS segment + jsr copydata ; Initialize DATA segment + jsr initlib ; Run constructors +; --------------------------------------------------------------------------- +; Call main() + + jsr _main +; --------------------------------------------------------------------------- +; Back from main (this is also the _exit entry) + +_exit: jsr donelib ; Run destructors + lda TECHO + ora #$80 ; Re-enable console echo + sta TECHO + jsr NACCES ; Lock System RAM + rts ; Re-enter Sym-1 monitor +; --------------------------------------------------------------------------- + diff --git a/libsrc/sym1/display.s b/libsrc/sym1/display.s new file mode 100644 index 000000000..530435d87 --- /dev/null +++ b/libsrc/sym1/display.s @@ -0,0 +1,154 @@ +; --------------------------------------------------------------------------- +; display.s +; +; for Sym-1 +; +; Wayne Parham +; +; wayne@parhamdata.com +; --------------------------------------------------------------------------- + +.include "sym1.inc" + +.export _fdisp, _set_D0, _get_D0 +.export _set_D1, _get_D1, _set_D2, _get_D2 +.export _set_D3, _get_D3, _set_D4, _get_D4 +.export _set_D5, _get_D5, _set_D6, _get_D6 + +.segment "CODE" + +.proc _fdisp: near +; --------------------------------------------------------------------------- + jsr SCAND ; Flash Display + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + + +.proc _set_D0: near +; --------------------------------------------------------------------------- + sta DISBUF0 ; Write Digit 0 + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_D0: near +; --------------------------------------------------------------------------- + lda DISBUF0 ; Read Digit 0 + ldx #$00 ; + rts ; Return DISBUF0 +; --------------------------------------------------------------------------- +.endproc + + +.proc _set_D1: near +; --------------------------------------------------------------------------- + sta DISBUF1 ; Write Digit 1 + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_D1: near +; --------------------------------------------------------------------------- + lda DISBUF1 ; Read Digit 1 + ldx #$00 ; + rts ; Return DISBUF1 +; --------------------------------------------------------------------------- +.endproc + + +.proc _set_D2: near +; --------------------------------------------------------------------------- + sta DISBUF2 ; Write Digit 2 + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_D2: near +; --------------------------------------------------------------------------- + lda DISBUF2 ; Read Digit 2 + ldx #$00 ; + rts ; Return DISBUF2 +; --------------------------------------------------------------------------- +.endproc + + +.proc _set_D3: near +; --------------------------------------------------------------------------- + sta DISBUF3 ; Write Digit 3 + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_D3: near +; --------------------------------------------------------------------------- + lda DISBUF3 ; Read Digit 3 + ldx #$00 ; + rts ; Return DISBUF3 +; --------------------------------------------------------------------------- +.endproc + + +.proc _set_D4: near +; --------------------------------------------------------------------------- + sta DISBUF4 ; Write Digit 4 + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_D4: near +; --------------------------------------------------------------------------- + lda DISBUF4 ; Read Digit 4 + ldx #$00 ; + rts ; Return DISBUF4 +; --------------------------------------------------------------------------- +.endproc + + +.proc _set_D5: near +; --------------------------------------------------------------------------- + sta DISBUF5 ; Write Digit 5 + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_D5: near +; --------------------------------------------------------------------------- + lda DISBUF5 ; Read Digit 5 + ldx #$00 ; + rts ; Return DISBUF5 +; --------------------------------------------------------------------------- +.endproc + + +.proc _set_D6: near +; --------------------------------------------------------------------------- + sta DISBUF6 ; Write byte to the right of display + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc + +.proc _get_D6: near +; --------------------------------------------------------------------------- + lda DISBUF6 ; Read byte to the right of display + ldx #$00 ; + rts ; Return DISBUF6 +; --------------------------------------------------------------------------- +.endproc + diff --git a/libsrc/sym1/getchar.s b/libsrc/sym1/getchar.s new file mode 100644 index 000000000..d82519ce0 --- /dev/null +++ b/libsrc/sym1/getchar.s @@ -0,0 +1,21 @@ +; --------------------------------------------------------------------------- +; getchar.s +; +; for Sym-1 +; +; Wayne Parham +; --------------------------------------------------------------------------- + +.include "sym1.inc" +.export _getchar + +.segment "CODE" + +.proc _getchar: near +; --------------------------------------------------------------------------- + jsr INTCHR ; Get character using Monitor ROM call + and #$7F ; Strip off top bit + ldx #$00 ; + rts ; Return char +; --------------------------------------------------------------------------- +.endproc diff --git a/libsrc/sym1/libref.s b/libsrc/sym1/libref.s new file mode 100644 index 000000000..9356d18dc --- /dev/null +++ b/libsrc/sym1/libref.s @@ -0,0 +1,3 @@ + + .import _exit + diff --git a/libsrc/sym1/putchar.s b/libsrc/sym1/putchar.s new file mode 100644 index 000000000..1b84416fe --- /dev/null +++ b/libsrc/sym1/putchar.s @@ -0,0 +1,23 @@ +; --------------------------------------------------------------------------- +; putchar.s +; +; for Sym-1 +; +; Wayne Parham +; +; wayne@parhamdata.com +; --------------------------------------------------------------------------- + +.include "sym1.inc" +.export _putchar + +.segment "CODE" + +.proc _putchar: near +; --------------------------------------------------------------------------- + jsr OUTCHR ; Send character using Monitor ROM call + lda #$00 ; + ldx #$00 ; + rts ; Return 0000 +; --------------------------------------------------------------------------- +.endproc diff --git a/libsrc/sym1/read.s b/libsrc/sym1/read.s new file mode 100644 index 000000000..f0b0194d2 --- /dev/null +++ b/libsrc/sym1/read.s @@ -0,0 +1,54 @@ +; --------------------------------------------------------------------------- +; read.s +; +; for Sym-1 +; +; Wayne Parham +; +; wayne@parhamdata.com +; --------------------------------------------------------------------------- + +.include "sym1.inc" + +.import popax, popptr1 +.importzp ptr1, ptr2, ptr3 + +.export _read + +.proc _read +; --------------------------------------------------------------------------- + sta ptr3 + stx ptr3+1 ; Count in ptr3 + inx + stx ptr2+1 ; Increment and store in ptr2 + tax + inx + stx ptr2 + jsr popptr1 ; Buffer address in ptr1 + jsr popax + +begin: dec ptr2 + bne getch + dec ptr2+1 + beq done ; If buffer full, return + +getch: jsr INTCHR ; Get character using Monitor ROM call + jsr OUTCHR ; Echo it + and #$7F ; Clear hi bit and check for '\r' + cmp #$0D + bne putch + lda #$0A ; Replace with '\n' and set count to zero + +putch: ldy #$00 ; Put char into return buffer + sta (ptr1),y + inc ptr1 ; Increment pointer + bne begin + inc ptr1+1 + bne begin + +done: lda ptr3 + ldx ptr3+1 + rts ; Return count +; --------------------------------------------------------------------------- +.endproc + diff --git a/libsrc/sym1/tapeio.s b/libsrc/sym1/tapeio.s new file mode 100644 index 000000000..3a0c1fa5b --- /dev/null +++ b/libsrc/sym1/tapeio.s @@ -0,0 +1,58 @@ +; --------------------------------------------------------------------------- +; tapeio.s +; +; for Sym-1 +; +; Wayne Parham +; +; wayne@parhamdata.com +; --------------------------------------------------------------------------- + +.include "sym1.inc" + +.import popax + +.export _loadt, _dumpt + +.segment "CODE" + +.proc _loadt: near +; --------------------------------------------------------------------------- + sta P1L ; Tape record ID to P1L + ldx #$00 + stx P1H + ldy #$80 + jsr LOADT ; Read data from tape + bcs error + lda #$00 + ldx #$00 ; Return 0000 if successful + jmp done +error: ldx #$00 + lda #$FF ; or 00FF if not +done: rts +; --------------------------------------------------------------------------- +.endproc + +.proc _dumpt: near +; --------------------------------------------------------------------------- + sta P3L ; End address + stx P3H + jsr popax + sta P2L ; Start address + stx P2H + jsr popax + sta P1L ; Tape Record ID + ldx #$00 + stx P1H + ldy #$80 + jsr DUMPT ; Write data to tape + bcs error + lda #$00 + ldx #$00 ; Return 0000 if successful + jmp done +error: ldx #$00 + lda #$FF ; or 00FF if not +done: rts +; --------------------------------------------------------------------------- +.endproc + diff --git a/libsrc/sym1/write.s b/libsrc/sym1/write.s new file mode 100644 index 000000000..843dddf1f --- /dev/null +++ b/libsrc/sym1/write.s @@ -0,0 +1,53 @@ +; --------------------------------------------------------------------------- +; write.s +; +; for Sym-1 +; +; Wayne Parham +; +; wayne@parhamdata.com +; --------------------------------------------------------------------------- + +.include "sym1.inc" + +.import popax, popptr1 +.importzp ptr1, ptr2, ptr3, tmp1 + +.export _write + +.proc _write +; --------------------------------------------------------------------------- + sta ptr3 + stx ptr3+1 ; Count in ptr3 + inx + stx ptr2+1 ; Increment and store in ptr2 + tax + inx + stx ptr2 + jsr popptr1 ; Buffer address in ptr1 + jsr popax + +begin: dec ptr2 + bne outch + dec ptr2+1 + beq done + +outch : ldy #0 + lda (ptr1),y + jsr OUTCHR ; Send character using Monitor call + cmp #$0A + bne next + lda #$0D ; If it is LF, add CR + jsr OUTCHR + +next: inc ptr1 + bne begin + inc ptr1+1 + jmp begin + +done: lda ptr3 + ldx ptr3+1 + rts ; Return count +; --------------------------------------------------------------------------- +.endproc + diff --git a/samples/symDisplay.c b/samples/symDisplay.c new file mode 100644 index 000000000..41eaf8b49 --- /dev/null +++ b/samples/symDisplay.c @@ -0,0 +1,384 @@ +// -------------------------------------------------------------------------- +// Sym-1 front panel display example +// +// Wayne Parham +// +// wayne@parhamdata.com +// -------------------------------------------------------------------------- + +#include <symio.h> + +void main (void) { + int delay = 10; + int flashes = 255; + int displayable = 1; + int e = 0; + int r = 0; + int d = 0; + int i = 0; + int l = 0; + int t = 0; + int z = 0; + char c = 0x00; + char buffer[41] = { 0x00 }; + + puts( "\nType a message (40 chars max) and press ENTER, please:\n" ); + + while( (c != '\r') && (i < 41) ) { + c = getchar(); + putchar( c ); + buffer[i] = c; + i++; + if( i == 40 ) { + puts( "\n\n--- Reached 40 character limit. ---" ); + } + } + + i--; // index is one past end + + while( z == 0 ) { + puts( "\n\nHow many times (0 for forever) to repeat?" ); + c = getchar(); + putchar( c ); + if( (c >= '0') && (c <= '9') ) { // between 1 and 9 loops allowed + z = 1; // a number was pressed + t = c - '0'; // convert char to int + puts( "\n\nLook at the front panel.\n" ); + } + else { + puts( "\nWhat?" ); + z = 0; // keep asking for a number + } + } + + z = 0; + while( (z < t) || (t == 0) ) { + + z++; + + putchar( '\r' ); // Send CR to console + + + set_D0( DISP_SPACE ); // Clear the display + set_D1( DISP_SPACE ); + set_D2( DISP_SPACE ); + set_D3( DISP_SPACE ); + set_D4( DISP_SPACE ); + set_D5( DISP_SPACE ); + set_D6( DISP_SPACE ); + + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + + for( l = 0; l <= i; l++ ) { + + displayable = 1; // Assume character is mapped + + switch( buffer[l] ) { // Put the typed charaters + case '1': // into the display buffer + set_D6( DISP_1 ); // one at a time + break; + case '2': + set_D6( DISP_2 ); + break; + case '3': + set_D6( DISP_3 ); + break; + case '4': + set_D6( DISP_4 ); + break; + case '5': + set_D6( DISP_5 ); + break; + case '6': + set_D6( DISP_6 ); + break; + case '7': + set_D6( DISP_7 ); + break; + case '8': + set_D6( DISP_8 ); + break; + case '9': + set_D6( DISP_9 ); + break; + case '0': + set_D6( DISP_0 ); + break; + case 'A': + set_D6( DISP_A ); + break; + case 'a': + set_D6( DISP_A ); + break; + case 'B': + set_D6( DISP_b ); + break; + case 'b': + set_D6( DISP_b ); + break; + case 'C': + set_D6( DISP_C ); + break; + case 'c': + set_D6( DISP_c ); + break; + case 'D': + set_D6( DISP_d ); + break; + case 'd': + set_D6( DISP_d ); + break; + case 'E': + set_D6( DISP_E ); + break; + case 'e': + set_D6( DISP_e ); + break; + case 'F': + set_D6( DISP_F ); + break; + case 'f': + set_D6( DISP_F ); + break; + case 'G': + set_D6( DISP_G ); + break; + case 'g': + set_D6( DISP_g ); + break; + case 'H': + set_D6( DISP_H ); + break; + case 'h': + set_D6( DISP_h ); + break; + case 'I': + set_D6( DISP_I ); + break; + case 'i': + set_D6( DISP_i ); + break; + case 'J': + set_D6( DISP_J ); + break; + case 'j': + set_D6( DISP_J ); + break; + case 'K': + set_D6( DISP_K ); + break; + case 'k': + set_D6( DISP_K ); + break; + case 'L': + set_D6( DISP_L ); + break; + case 'l': + set_D6( DISP_L ); + break; + case 'M': + set_D0( get_D1() ); + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( get_D6() ); + set_D6( DISP_M_1 ); + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + set_D6( DISP_M_2 ); + break; + case 'm': + set_D0( get_D1() ); + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( get_D6() ); + set_D6( DISP_M_1 ); + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + set_D6( DISP_M_2 ); + break; + case 'N': + set_D6( DISP_n ); + break; + case 'n': + set_D6( DISP_n ); + break; + case 'O': + set_D6( DISP_O ); + break; + case 'o': + set_D6( DISP_o ); + break; + case 'P': + set_D6( DISP_P ); + break; + case 'p': + set_D6( DISP_P ); + break; + case 'Q': + set_D6( DISP_q ); + break; + case 'q': + set_D6( DISP_q ); + break; + case 'R': + set_D6( DISP_r ); + break; + case 'r': + set_D6( DISP_r ); + break; + case 'S': + set_D6( DISP_S ); + break; + case 's': + set_D6( DISP_S ); + break; + case 'T': + set_D6( DISP_t ); + break; + case 't': + set_D6( DISP_t ); + break; + case 'U': + set_D6( DISP_U ); + break; + case 'u': + set_D6( DISP_u ); + break; + case 'V': + set_D0( get_D1() ); + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( get_D6() ); + set_D6( DISP_M_1 ); + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + set_D6( DISP_V_2 ); + break; + case 'v': + set_D0( get_D1() ); + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( get_D6() ); + set_D6( DISP_M_1 ); + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + set_D6( DISP_V_2 ); + break; + case 'W': + set_D0( get_D1() ); + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( get_D6() ); + set_D6( DISP_M_1 ); + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + set_D6( DISP_W_2 ); + break; + case 'w': + set_D0( get_D1() ); + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( get_D6() ); + set_D6( DISP_M_1 ); + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + set_D6( DISP_W_2 ); + break; + case 'Y': + set_D6( DISP_Y ); + break; + case 'y': + set_D6( DISP_Y ); + break; + case 'Z': + set_D6( DISP_Z ); + break; + case 'z': + set_D6( DISP_Z ); + break; + case ' ': + set_D6( DISP_SPACE ); + break; + case '.': + set_D6( DISP_PERIOD ); + break; + case '-': + set_D6( DISP_HYPHEN ); + break; + case '\'': + set_D6( DISP_APOSTR ); + break; + case '"': + set_D6( DISP_APOSTR ); + break; + case '=': + set_D6( DISP_EQUAL ); + break; + case '_': + set_D6( DISP_BOTTOM ); + break; + case '/': + set_D6( DISP_SLASH ); + break; + case '\\': + set_D6( DISP_BACKSLASH ); + break; + default: + displayable = 0; // Character not mapped + } + + if( displayable ) { + + putchar( buffer[l] ); // Send it to the console + + set_D0( get_D1() ); // Scroll to the left + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( get_D6() ); + + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + } + } + + for( e = 0; e < 6; e++ ) { // Gradually fill the + set_D0( get_D1() ); // display with spaces + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( DISP_SPACE ); + set_D6( DISP_SPACE ); + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + } + } + + puts( "\n\nEnjoy your day!\n\n" ); + + return; +} diff --git a/samples/symHello.c b/samples/symHello.c new file mode 100644 index 000000000..99b4c57df --- /dev/null +++ b/samples/symHello.c @@ -0,0 +1,39 @@ +// -------------------------------------------------------------------------- +// Hello World for Sym-1 +// +// Wayne Parham +// +// wayne@parhamdata.com +// -------------------------------------------------------------------------- + +#include <symio.h>; + +void main(void) { + char c = 0x00; + int d = 0x00; + int l = 0x00; + + printf( "\nHello World!\n\n" ); + + for( l = 0; l < 2; l++ ) { + beep(); + for( d = 0; d < 10 ; d++ ) { + } + } + printf( "Type a line and press ENTER, please.\n\n" ); + + while( c != '\r' ) { + c = getchar(); + putchar( c ); + } + + printf( "\n\nThanks!\n\n" ); + + for( l = 0; l < 5; l++ ) { + beep(); + for( d = 0; d < 10 ; d++ ) { + } + } + + return; +} diff --git a/samples/symIO.c b/samples/symIO.c new file mode 100644 index 000000000..c52a71b11 --- /dev/null +++ b/samples/symIO.c @@ -0,0 +1,170 @@ +// -------------------------------------------------------------------------- +// Sym-1 digital I/O interface example +// +// Wayne Parham +// +// wayne@parhamdata.com +// -------------------------------------------------------------------------- + +#include <stdio.h>; +#include <symio.h>; +#include <stdlib.h>; +#include <string.h>; + +void main(void) { + int ddr1a = 0x00; + int ior1a = 0x00; + int ddr1b = 0x00; + int ior1b = 0x00; + int ddr2a = 0x00; + int ior2a = 0x00; + int ddr2b = 0x00; + int ior2b = 0x00; + int ddr3a = 0x00; + int ior3a = 0x00; + int ddr3b = 0x00; + int ior3b = 0x00; + int l = 0x00; + int val = 0x00; + int going = 0x01; + int instr = 0x01; + char* vp = 0x00; + char cmd[20] = { 0x00 }; + + while( going ) { + + putchar( '\r' ); + for( l = 0; l < 25; l++ ) { + putchar( '\n' ); + } + + ddr1a = get_DDR1A(); + ior1a = get_IOR1A(); + ddr1b = get_DDR1B(); + ior1b = get_IOR1B(); + ddr2a = get_DDR2A(); + ior2a = get_IOR2A(); + ddr2b = get_DDR2B(); + ior2b = get_IOR2B(); + ddr3a = get_DDR3A(); + ior3a = get_IOR3A(); + ddr3b = get_DDR3B(); + ior3b = get_IOR3B(); + + puts( "================== Digital I/O Status ==================" ); + puts( " Port1A Port1B Port2A Port2B Port3A Port3B" ); + printf( "DDR %02X %02X %02X %02X %02X %02X\n\r",ddr1a,ddr1b,ddr2a,ddr2b,ddr3a,ddr3b ); + printf( "IOR %02X %02X %02X %02X %02X %02X\n\r",ior1a,ior1b,ior2a,ior2b,ior3a,ior3b ); + puts( "========================================================\n" ); + + if( instr ) { + puts( "You can set any register by typing 'register value' so" ); + puts( "as an example, to set register IOR2A with the top five" ); + puts( "bits off and the bottom three on, type 'IOR2A 07'." ); + puts( "Press ENTER without any command to see register values" ); + puts( "without changing any of them. Type 'help' to see these" ); + puts( "instructions again and type 'stop' to end the program.\n"); + puts( "Available registers: DDR1A, IOR1A, DDR1B, IOR1B, DDR2A" ); + puts( "IOR2A, DDR2B, IOR2B, DDR3A, IOR3A, DDR3B and IOR3B." ); + instr = 0; + } + + printf( "\n Command: " ); + + fgets(cmd, sizeof(cmd)-1, stdin); + cmd[strlen(cmd)-1] = '\0'; + + if( strncasecmp(cmd, "stop", 4) == 0) { + going = 0; + } + else if( strncasecmp(cmd, "help", 4) == 0) { + instr = 1; + } + else if( strncasecmp(cmd, "ddr1a", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_DDR1A( val ); + } + } + else if( strncasecmp(cmd, "ior1a", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_IOR1A( val ); + } + } + else if( strncasecmp(cmd, "ddr1b", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_DDR1B( val ); + } + } + else if( strncasecmp(cmd, "ior1b", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_IOR1B( val ); + } + } + else if( strncasecmp(cmd, "ddr2a", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_DDR2A( val ); + } + } + else if( strncasecmp(cmd, "ior2a", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_IOR2A( val ); + } + } + else if( strncasecmp(cmd, "ddr2b", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_DDR2B( val ); + } + } + else if( strncasecmp(cmd, "ior2b", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_IOR2B( val ); + } + } + else if( strncasecmp(cmd, "ddr3a", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_DDR3A( val ); + } + } + else if( strncasecmp(cmd, "ior3a", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_IOR3A( val ); + } + } + else if( strncasecmp(cmd, "ddr3b", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_DDR3B( val ); + } + } + else if( strncasecmp(cmd, "ior3b", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_IOR3B( val ); + } + } + } + + return; +} diff --git a/samples/symTiny.c b/samples/symTiny.c new file mode 100644 index 000000000..b82e952ac --- /dev/null +++ b/samples/symTiny.c @@ -0,0 +1,42 @@ +// -------------------------------------------------------------------------- +// Hello World for Sym-1 +// +// Uses only getchar, putchar and puts, generating smaller code than printf +// +// Wayne Parham +// +// wayne@parhamdata.com +// -------------------------------------------------------------------------- + +#include <symio.h>; + +void main(void) { + char c = 0x00; + int d = 0x00; + int l = 0x00; + + puts( "Hello World!\n" ); + + puts( "Type a line and press ENTER, please:\n" ); + + for( l = 0; l < 2; l++ ) { + beep(); + for( d = 0; d < 10 ; d++ ) { + } + } + + while( c != '\r' ) { + c = getchar(); + putchar( c ); + } + + puts( "\n\nThanks!\n" ); + + for( l = 0; l < 5; l++ ) { + beep(); + for( d = 0; d < 10 ; d++ ) { + } + } + + return; +} diff --git a/samples/tutorial/sym1/build b/samples/tutorial/sym1/build new file mode 100644 index 000000000..6688da0a3 --- /dev/null +++ b/samples/tutorial/sym1/build @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# +# build.sh + +if [ -f $1.c ]; then + echo + echo "--- Building $1 ---" + + if [ -f $1.s ]; then + rm $1.s + fi + if [ -f $1.o ]; then + rm $1.o + fi + if [ -f $1.bin ]; then + rm $1.bin + fi + if [ -f $1.hex ]; then + rm $1.hex + fi + + cc65 -t sym1 -O $1.c + ca65 $1.s + ld65 -C sym1.cfg -m $1.map -o $1.bin $1.o sym1.lib + if [ -f $1.bin ]; then + bin2hex $1.bin $1.hex > /dev/null 2>&1 + fi + if [ -f $1.hex ]; then + echo "--- $1.hex made ---" + else + echo "--- $1.hex FAIL ---" + fi + + +fi + diff --git a/samples/tutorial/sym1/build_32k b/samples/tutorial/sym1/build_32k new file mode 100644 index 000000000..555bda0b4 --- /dev/null +++ b/samples/tutorial/sym1/build_32k @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# +# build.sh + +if [ -f $1.c ]; then + echo + echo "--- Building $1 ---" + + if [ -f $1.s ]; then + rm $1.s + fi + if [ -f $1.o ]; then + rm $1.o + fi + if [ -f $1.bin ]; then + rm $1.bin + fi + if [ -f $1.hex ]; then + rm $1.hex + fi + + cc65 -t sym1 -O $1.c + ca65 $1.s + ld65 -C sym1-32k.cfg -m $1.map -o $1.bin $1.o sym1.lib + if [ -f $1.bin ]; then + bin2hex $1.bin $1.hex > /dev/null 2>&1 + fi + if [ -f $1.hex ]; then + echo "--- $1.hex made ---" + else + echo "--- $1.hex FAIL ---" + fi + + +fi + diff --git a/samples/tutorial/sym1/build_4k b/samples/tutorial/sym1/build_4k new file mode 100644 index 000000000..502bb6aa9 --- /dev/null +++ b/samples/tutorial/sym1/build_4k @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +# +# build.sh + +if [ -f $1.c ]; then + echo + echo "--- Building $1 ---" + + if [ -f $1.s ]; then + rm $1.s + fi + if [ -f $1.o ]; then + rm $1.o + fi + if [ -f $1.bin ]; then + rm $1.bin + fi + if [ -f $1.hex ]; then + rm $1.hex + fi + + cc65 -t sym1 -O $1.c + ca65 $1.s + ld65 -C sym1-4k.cfg -m $1.map -o $1.bin $1.o sym1.lib + if [ -f $1.bin ]; then + bin2hex $1.bin $1.hex > /dev/null 2>&1 + fi + if [ -f $1.hex ]; then + echo "--- $1.hex made ---" + else + echo "--- $1.hex FAIL ---" + fi + + +fi + diff --git a/samples/tutorial/sym1/clean b/samples/tutorial/sym1/clean new file mode 100644 index 000000000..c0d77390e --- /dev/null +++ b/samples/tutorial/sym1/clean @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +# +# clean.sh + +if [ -f $1.c ]; then + echo + echo "--- Cleaning $1 ---" + + rm $1.s $1.o $1.map $1.bin $1.hex > /dev/null 2>&1 + + echo "--- Cleaned $1 ---" + +fi + diff --git a/samples/tutorial/sym1/readme.txt b/samples/tutorial/sym1/readme.txt new file mode 100644 index 000000000..74bcb5527 --- /dev/null +++ b/samples/tutorial/sym1/readme.txt @@ -0,0 +1,11 @@ +These simple build scripts can be used to build any single-file C program +you might write. Notice the diference in the linker line for the 4k build +compared with the 32k build. Small programs can be compiled with either +build script, but they won't run on a 4k machine if compiled for a 32k +system. So if you have a program that's small enough to fit in 4k, it is +probably better to build with the 4k script so it will run on Sym-1 machines +that do not have an expansion memory board. + +Usage: build <program> (don't include the .c extension) + clean <program> (removes intermediate and output files) + diff --git a/samples/tutorial/sym1/symDisplay.c b/samples/tutorial/sym1/symDisplay.c new file mode 100644 index 000000000..41eaf8b49 --- /dev/null +++ b/samples/tutorial/sym1/symDisplay.c @@ -0,0 +1,384 @@ +// -------------------------------------------------------------------------- +// Sym-1 front panel display example +// +// Wayne Parham +// +// wayne@parhamdata.com +// -------------------------------------------------------------------------- + +#include <symio.h> + +void main (void) { + int delay = 10; + int flashes = 255; + int displayable = 1; + int e = 0; + int r = 0; + int d = 0; + int i = 0; + int l = 0; + int t = 0; + int z = 0; + char c = 0x00; + char buffer[41] = { 0x00 }; + + puts( "\nType a message (40 chars max) and press ENTER, please:\n" ); + + while( (c != '\r') && (i < 41) ) { + c = getchar(); + putchar( c ); + buffer[i] = c; + i++; + if( i == 40 ) { + puts( "\n\n--- Reached 40 character limit. ---" ); + } + } + + i--; // index is one past end + + while( z == 0 ) { + puts( "\n\nHow many times (0 for forever) to repeat?" ); + c = getchar(); + putchar( c ); + if( (c >= '0') && (c <= '9') ) { // between 1 and 9 loops allowed + z = 1; // a number was pressed + t = c - '0'; // convert char to int + puts( "\n\nLook at the front panel.\n" ); + } + else { + puts( "\nWhat?" ); + z = 0; // keep asking for a number + } + } + + z = 0; + while( (z < t) || (t == 0) ) { + + z++; + + putchar( '\r' ); // Send CR to console + + + set_D0( DISP_SPACE ); // Clear the display + set_D1( DISP_SPACE ); + set_D2( DISP_SPACE ); + set_D3( DISP_SPACE ); + set_D4( DISP_SPACE ); + set_D5( DISP_SPACE ); + set_D6( DISP_SPACE ); + + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + + for( l = 0; l <= i; l++ ) { + + displayable = 1; // Assume character is mapped + + switch( buffer[l] ) { // Put the typed charaters + case '1': // into the display buffer + set_D6( DISP_1 ); // one at a time + break; + case '2': + set_D6( DISP_2 ); + break; + case '3': + set_D6( DISP_3 ); + break; + case '4': + set_D6( DISP_4 ); + break; + case '5': + set_D6( DISP_5 ); + break; + case '6': + set_D6( DISP_6 ); + break; + case '7': + set_D6( DISP_7 ); + break; + case '8': + set_D6( DISP_8 ); + break; + case '9': + set_D6( DISP_9 ); + break; + case '0': + set_D6( DISP_0 ); + break; + case 'A': + set_D6( DISP_A ); + break; + case 'a': + set_D6( DISP_A ); + break; + case 'B': + set_D6( DISP_b ); + break; + case 'b': + set_D6( DISP_b ); + break; + case 'C': + set_D6( DISP_C ); + break; + case 'c': + set_D6( DISP_c ); + break; + case 'D': + set_D6( DISP_d ); + break; + case 'd': + set_D6( DISP_d ); + break; + case 'E': + set_D6( DISP_E ); + break; + case 'e': + set_D6( DISP_e ); + break; + case 'F': + set_D6( DISP_F ); + break; + case 'f': + set_D6( DISP_F ); + break; + case 'G': + set_D6( DISP_G ); + break; + case 'g': + set_D6( DISP_g ); + break; + case 'H': + set_D6( DISP_H ); + break; + case 'h': + set_D6( DISP_h ); + break; + case 'I': + set_D6( DISP_I ); + break; + case 'i': + set_D6( DISP_i ); + break; + case 'J': + set_D6( DISP_J ); + break; + case 'j': + set_D6( DISP_J ); + break; + case 'K': + set_D6( DISP_K ); + break; + case 'k': + set_D6( DISP_K ); + break; + case 'L': + set_D6( DISP_L ); + break; + case 'l': + set_D6( DISP_L ); + break; + case 'M': + set_D0( get_D1() ); + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( get_D6() ); + set_D6( DISP_M_1 ); + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + set_D6( DISP_M_2 ); + break; + case 'm': + set_D0( get_D1() ); + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( get_D6() ); + set_D6( DISP_M_1 ); + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + set_D6( DISP_M_2 ); + break; + case 'N': + set_D6( DISP_n ); + break; + case 'n': + set_D6( DISP_n ); + break; + case 'O': + set_D6( DISP_O ); + break; + case 'o': + set_D6( DISP_o ); + break; + case 'P': + set_D6( DISP_P ); + break; + case 'p': + set_D6( DISP_P ); + break; + case 'Q': + set_D6( DISP_q ); + break; + case 'q': + set_D6( DISP_q ); + break; + case 'R': + set_D6( DISP_r ); + break; + case 'r': + set_D6( DISP_r ); + break; + case 'S': + set_D6( DISP_S ); + break; + case 's': + set_D6( DISP_S ); + break; + case 'T': + set_D6( DISP_t ); + break; + case 't': + set_D6( DISP_t ); + break; + case 'U': + set_D6( DISP_U ); + break; + case 'u': + set_D6( DISP_u ); + break; + case 'V': + set_D0( get_D1() ); + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( get_D6() ); + set_D6( DISP_M_1 ); + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + set_D6( DISP_V_2 ); + break; + case 'v': + set_D0( get_D1() ); + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( get_D6() ); + set_D6( DISP_M_1 ); + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + set_D6( DISP_V_2 ); + break; + case 'W': + set_D0( get_D1() ); + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( get_D6() ); + set_D6( DISP_M_1 ); + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + set_D6( DISP_W_2 ); + break; + case 'w': + set_D0( get_D1() ); + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( get_D6() ); + set_D6( DISP_M_1 ); + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + set_D6( DISP_W_2 ); + break; + case 'Y': + set_D6( DISP_Y ); + break; + case 'y': + set_D6( DISP_Y ); + break; + case 'Z': + set_D6( DISP_Z ); + break; + case 'z': + set_D6( DISP_Z ); + break; + case ' ': + set_D6( DISP_SPACE ); + break; + case '.': + set_D6( DISP_PERIOD ); + break; + case '-': + set_D6( DISP_HYPHEN ); + break; + case '\'': + set_D6( DISP_APOSTR ); + break; + case '"': + set_D6( DISP_APOSTR ); + break; + case '=': + set_D6( DISP_EQUAL ); + break; + case '_': + set_D6( DISP_BOTTOM ); + break; + case '/': + set_D6( DISP_SLASH ); + break; + case '\\': + set_D6( DISP_BACKSLASH ); + break; + default: + displayable = 0; // Character not mapped + } + + if( displayable ) { + + putchar( buffer[l] ); // Send it to the console + + set_D0( get_D1() ); // Scroll to the left + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( get_D6() ); + + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + } + } + + for( e = 0; e < 6; e++ ) { // Gradually fill the + set_D0( get_D1() ); // display with spaces + set_D1( get_D2() ); + set_D2( get_D3() ); + set_D3( get_D4() ); + set_D4( get_D5() ); + set_D5( DISP_SPACE ); + set_D6( DISP_SPACE ); + for( d = 0; d < flashes ; d++ ) { + fdisp(); // Display + } + } + } + + puts( "\n\nEnjoy your day!\n\n" ); + + return; +} diff --git a/samples/tutorial/sym1/symHello.c b/samples/tutorial/sym1/symHello.c new file mode 100644 index 000000000..99b4c57df --- /dev/null +++ b/samples/tutorial/sym1/symHello.c @@ -0,0 +1,39 @@ +// -------------------------------------------------------------------------- +// Hello World for Sym-1 +// +// Wayne Parham +// +// wayne@parhamdata.com +// -------------------------------------------------------------------------- + +#include <symio.h>; + +void main(void) { + char c = 0x00; + int d = 0x00; + int l = 0x00; + + printf( "\nHello World!\n\n" ); + + for( l = 0; l < 2; l++ ) { + beep(); + for( d = 0; d < 10 ; d++ ) { + } + } + printf( "Type a line and press ENTER, please.\n\n" ); + + while( c != '\r' ) { + c = getchar(); + putchar( c ); + } + + printf( "\n\nThanks!\n\n" ); + + for( l = 0; l < 5; l++ ) { + beep(); + for( d = 0; d < 10 ; d++ ) { + } + } + + return; +} diff --git a/samples/tutorial/sym1/symIO.c b/samples/tutorial/sym1/symIO.c new file mode 100644 index 000000000..c52a71b11 --- /dev/null +++ b/samples/tutorial/sym1/symIO.c @@ -0,0 +1,170 @@ +// -------------------------------------------------------------------------- +// Sym-1 digital I/O interface example +// +// Wayne Parham +// +// wayne@parhamdata.com +// -------------------------------------------------------------------------- + +#include <stdio.h>; +#include <symio.h>; +#include <stdlib.h>; +#include <string.h>; + +void main(void) { + int ddr1a = 0x00; + int ior1a = 0x00; + int ddr1b = 0x00; + int ior1b = 0x00; + int ddr2a = 0x00; + int ior2a = 0x00; + int ddr2b = 0x00; + int ior2b = 0x00; + int ddr3a = 0x00; + int ior3a = 0x00; + int ddr3b = 0x00; + int ior3b = 0x00; + int l = 0x00; + int val = 0x00; + int going = 0x01; + int instr = 0x01; + char* vp = 0x00; + char cmd[20] = { 0x00 }; + + while( going ) { + + putchar( '\r' ); + for( l = 0; l < 25; l++ ) { + putchar( '\n' ); + } + + ddr1a = get_DDR1A(); + ior1a = get_IOR1A(); + ddr1b = get_DDR1B(); + ior1b = get_IOR1B(); + ddr2a = get_DDR2A(); + ior2a = get_IOR2A(); + ddr2b = get_DDR2B(); + ior2b = get_IOR2B(); + ddr3a = get_DDR3A(); + ior3a = get_IOR3A(); + ddr3b = get_DDR3B(); + ior3b = get_IOR3B(); + + puts( "================== Digital I/O Status ==================" ); + puts( " Port1A Port1B Port2A Port2B Port3A Port3B" ); + printf( "DDR %02X %02X %02X %02X %02X %02X\n\r",ddr1a,ddr1b,ddr2a,ddr2b,ddr3a,ddr3b ); + printf( "IOR %02X %02X %02X %02X %02X %02X\n\r",ior1a,ior1b,ior2a,ior2b,ior3a,ior3b ); + puts( "========================================================\n" ); + + if( instr ) { + puts( "You can set any register by typing 'register value' so" ); + puts( "as an example, to set register IOR2A with the top five" ); + puts( "bits off and the bottom three on, type 'IOR2A 07'." ); + puts( "Press ENTER without any command to see register values" ); + puts( "without changing any of them. Type 'help' to see these" ); + puts( "instructions again and type 'stop' to end the program.\n"); + puts( "Available registers: DDR1A, IOR1A, DDR1B, IOR1B, DDR2A" ); + puts( "IOR2A, DDR2B, IOR2B, DDR3A, IOR3A, DDR3B and IOR3B." ); + instr = 0; + } + + printf( "\n Command: " ); + + fgets(cmd, sizeof(cmd)-1, stdin); + cmd[strlen(cmd)-1] = '\0'; + + if( strncasecmp(cmd, "stop", 4) == 0) { + going = 0; + } + else if( strncasecmp(cmd, "help", 4) == 0) { + instr = 1; + } + else if( strncasecmp(cmd, "ddr1a", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_DDR1A( val ); + } + } + else if( strncasecmp(cmd, "ior1a", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_IOR1A( val ); + } + } + else if( strncasecmp(cmd, "ddr1b", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_DDR1B( val ); + } + } + else if( strncasecmp(cmd, "ior1b", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_IOR1B( val ); + } + } + else if( strncasecmp(cmd, "ddr2a", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_DDR2A( val ); + } + } + else if( strncasecmp(cmd, "ior2a", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_IOR2A( val ); + } + } + else if( strncasecmp(cmd, "ddr2b", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_DDR2B( val ); + } + } + else if( strncasecmp(cmd, "ior2b", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_IOR2B( val ); + } + } + else if( strncasecmp(cmd, "ddr3a", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_DDR3A( val ); + } + } + else if( strncasecmp(cmd, "ior3a", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_IOR3A( val ); + } + } + else if( strncasecmp(cmd, "ddr3b", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_DDR3B( val ); + } + } + else if( strncasecmp(cmd, "ior3b", 5) == 0) { + vp = strchr(cmd, ' '); + if( vp ) { + val = atoi( vp ); + set_IOR3B( val ); + } + } + } + + return; +} diff --git a/samples/tutorial/sym1/symTiny.c b/samples/tutorial/sym1/symTiny.c new file mode 100644 index 000000000..b82e952ac --- /dev/null +++ b/samples/tutorial/sym1/symTiny.c @@ -0,0 +1,42 @@ +// -------------------------------------------------------------------------- +// Hello World for Sym-1 +// +// Uses only getchar, putchar and puts, generating smaller code than printf +// +// Wayne Parham +// +// wayne@parhamdata.com +// -------------------------------------------------------------------------- + +#include <symio.h>; + +void main(void) { + char c = 0x00; + int d = 0x00; + int l = 0x00; + + puts( "Hello World!\n" ); + + puts( "Type a line and press ENTER, please:\n" ); + + for( l = 0; l < 2; l++ ) { + beep(); + for( d = 0; d < 10 ; d++ ) { + } + } + + while( c != '\r' ) { + c = getchar(); + putchar( c ); + } + + puts( "\n\nThanks!\n" ); + + for( l = 0; l < 5; l++ ) { + beep(); + for( d = 0; d < 10 ; d++ ) { + } + } + + return; +} From 044a0838a377fe17559a308bbb10ca21374e4ca1 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 9 May 2021 16:51:17 -0500 Subject: [PATCH 0836/2710] Changes to existing cc65 source to support Synertek Systems Sym-1 --- README.md | 1 + libsrc/Makefile | 49 +++++++++++++++++++++++++++++++-------------- samples/Makefile | 30 ++++++++++++++++++++------- src/cc65/main.c | 3 +++ src/common/target.c | 2 ++ src/common/target.h | 1 + 6 files changed, 64 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 2c84b7430..c1b8a8b59 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ including - the Lynx console. - the Ohio Scientific Challenger 1P. - the Commander X16. +- the Synertek Syetms Sym-1. The libraries are fairly portable, so creating a version for other 6502s shouldn't be too much work. diff --git a/libsrc/Makefile b/libsrc/Makefile index 3fac513af..eee18d0da 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -34,6 +34,7 @@ TARGETS = apple2 \ sim6502 \ sim65c02 \ supervision \ + sym1 \ telestrat DRVTYPES = emd \ @@ -148,18 +149,26 @@ GEOSDIRS = common \ runtime \ system +# MACHINE set independently of TARGET lets us easily define new targets +# without changing target.h and target.c in cc65/src/common. Useful +# for initial testing of ports to new systems. + ifeq ($(TARGET),apple2enh) SRCDIR = apple2 OBJPFX = a2 DRVPFX = a2e + MACHINE = $(TARGET) else ifeq ($(TARGET),atarixl) SRCDIR = atari OBJPFX = atr DRVPFX = atrx + MACHINE = $(TARGET) else ifeq ($(TARGET),sim65c02) SRCDIR = sim6502 + MACHINE = $(TARGET) else SRCDIR = $(TARGET) + MACHINE = $(TARGET) endif SRCDIRS = $(SRCDIR) @@ -173,16 +182,26 @@ ifeq ($(TARGET),$(filter $(TARGET),$(GEOS))) SRCDIRS += $(addprefix geos-common/,$(GEOSDIRS)) endif -SRCDIRS += common \ - conio \ - dbg \ - em \ - joystick \ - mouse \ - runtime \ - serial \ - tgi \ - zlib +ifeq ($(TARGET),sym1) + SRCDIRS += common \ + conio \ + dbg \ + em \ + runtime \ + serial \ + sym1 +else + SRCDIRS += common \ + conio \ + dbg \ + em \ + joystick \ + mouse \ + runtime \ + serial \ + tgi \ + zlib +endif vpath %.s $(SRCDIRS) vpath %.c $(SRCDIRS) @@ -231,7 +250,7 @@ $1_DRVS = $$(patsubst $$($1_DYNPAT),$$($1_DRVPAT),$$($1_DYNS)) $$($1_STCPAT): $$($1_SRCPAT) @echo $$(TARGET) - $$< - static - @$$(CA65) -t $$(TARGET) -D DYN_DRV=0 $$(CA65FLAGS) --create-dep $$(@:.o=.d) -o $$@ $$< + @$$(CA65) -t $$(MACHINE) -D DYN_DRV=0 $$(CA65FLAGS) --create-dep $$(@:.o=.d) -o $$@ $$< OBJS += $$($1_STCS) DEPS += $$($1_STCS:.o=.d) @@ -263,15 +282,15 @@ export CC65_HOME := $(abspath ..) define ASSEMBLE_recipe $(if $(QUIET),,@echo $(TARGET) - $<) -@$(CA65) -t $(TARGET) $(CA65FLAGS) --create-dep $(@:.o=.d) -o $@ $< +@$(CA65) -t $(MACHINE) $(CA65FLAGS) --create-dep $(@:.o=.d) -o $@ $< endef # ASSEMBLE_recipe define COMPILE_recipe $(if $(QUIET),,@echo $(TARGET) - $<) -@$(CC65) -t $(TARGET) $(CC65FLAGS) --create-dep $(@:.o=.d) --dep-target $@ -o $(@:.o=.s) $< -@$(CA65) -t $(TARGET) -o $@ $(@:.o=.s) +@$(CC65) -t $(MACHINE) $(CC65FLAGS) --create-dep $(@:.o=.d) --dep-target $@ -o $(@:.o=.s) $< +@$(CA65) -t $(MACHINE) -o $@ $(@:.o=.s) endef # COMPILE_recipe @@ -283,7 +302,7 @@ endef # COMPILE_recipe $(EXTRA_OBJPAT): $(EXTRA_SRCPAT) | ../libwrk/$(TARGET) ../lib @echo $(TARGET) - $(<F) - @$(CA65) -t $(TARGET) $(CA65FLAGS) --create-dep $(@:../lib/%.o=../libwrk/$(TARGET)/%.d) -o $@ $< + @$(CA65) -t $(MACHINE) $(CA65FLAGS) --create-dep $(@:../lib/%.o=../libwrk/$(TARGET)/%.d) -o $@ $< ../lib/$(TARGET).lib: $(OBJS) | ../lib $(AR65) a $@ $? diff --git a/samples/Makefile b/samples/Makefile index 6e89cb802..e3b28057f 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -135,31 +135,37 @@ LDFLAGS_tgidemo_atarixl = --start-addr 0x4000 %: %.s .c.o: - $(CC) $(CFLAGS) -Ors --codesize 500 -T -g -t $(SYS) $< + $(CC) $(CFLAGS) -Ors --codesize 500 -T -g -t $(MACHINE) $< $(AS) $(<:.c=.s) .s.o: - $(AS) $(ASFLAGS) -t $(SYS) $< + $(AS) $(ASFLAGS) -t $(MACHINE) $< .PRECIOUS: %.o .o: ifeq ($(SYS),vic20) $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib +else ifeq ($(SYS),sym1) + $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@.bin -C sym1.cfg -m $@.map $^ $(SYS).lib else - $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(SYS) -m $@.map $^ $(SYS).lib + $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(MACHINE) -m $@.map $^ $(SYS).lib endif # -------------------------------------------------------------------------- # Lists of subdirectories # disasm depends on cpp -DIRLIST = tutorial geos + +ifneq ($(SYS),sym1) + DIRLIST = tutorial geos +endif # -------------------------------------------------------------------------- # Lists of executables EXELIST_c64 = \ + helloworld \ ascii \ enumdevdir \ fire \ @@ -175,6 +181,7 @@ EXELIST_c64 = \ tgidemo EXELIST_apple2 = \ + helloworld \ ascii \ diodemo \ enumdevdir \ @@ -190,6 +197,7 @@ EXELIST_apple2 = \ EXELIST_apple2enh = $(EXELIST_apple2) EXELIST_atari = \ + helloworld \ ascii \ gunzip65 \ hello \ @@ -208,6 +216,12 @@ EXELIST_atari2600 = \ EXELIST_supervision = \ supervisionhello +EXELIST_sym1 = \ + helloworld \ + symHello \ + symTiny \ + symDisplay + # Unlisted targets will try to build everything. # That lets us learn what they cannot build, and what settings # we need to use for programs that can be built and run. @@ -215,12 +229,13 @@ ifndef EXELIST_$(SYS) EXELIST_$(SYS) := ${patsubst %.c,%,$(wildcard *.c)} endif -define SUBDIR_recipe +define SUBDIR_recipe @$(MAKE) -C $(dir) --no-print-directory $@ endef # SUBDIR_recipe + # -------------------------------------------------------------------------- # Rules to make the binaries and the disk @@ -352,9 +367,10 @@ zip: # Clean-up rules mostlyclean: - @$(DEL) *.lbl *.map *.o *.s 2>$(NULLDEV) + @$(DEL) *.lbl *.map *.bin *.hex *.o *.s 2>$(NULLDEV) clean: mostlyclean @$(DEL) $(EXELIST_$(SYS)) $(DISK_$(SYS)) 2>$(NULLDEV) @$(DEL) multdemo.? ovrldemo.? 2>$(NULLDEV) - $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) + @$(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) + diff --git a/src/cc65/main.c b/src/cc65/main.c index 0b156fb74..9e9fab6b4 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -290,6 +290,9 @@ static void SetSys (const char* Sys) cbmsys ("__CX16__"); break; + case TGT_NONE: + break; + default: AbEnd ("Unknown target system type %d", Target); } diff --git a/src/common/target.c b/src/common/target.c index a21ef2125..a35bf67a8 100644 --- a/src/common/target.c +++ b/src/common/target.c @@ -174,6 +174,7 @@ static const TargetEntry TargetMap[] = { { "sim6502", TGT_SIM6502 }, { "sim65c02", TGT_SIM65C02 }, { "supervision", TGT_SUPERVISION }, + { "sym1", TGT_SYM1 }, { "telestrat", TGT_TELESTRAT }, { "vic20", TGT_VIC20 }, }; @@ -215,6 +216,7 @@ static const TargetProperties PropertyTable[TGT_COUNT] = { { "gamate", CPU_6502, BINFMT_BINARY, CTNone }, { "c65", CPU_4510, BINFMT_BINARY, CTPET }, { "cx16", CPU_65C02, BINFMT_BINARY, CTPET }, + { "sym1", CPU_6502, BINFMT_BINARY, CTNone }, }; /* Target system */ diff --git a/src/common/target.h b/src/common/target.h index 50c400e2e..7f85713cf 100644 --- a/src/common/target.h +++ b/src/common/target.h @@ -85,6 +85,7 @@ typedef enum { TGT_GAMATE, TGT_C65, TGT_CX16, + TGT_SYM1, TGT_COUNT /* Number of target systems */ } target_t; From aea5db48cbc9207b5d947f0483f6f65e2ea2c31e Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 9 May 2021 16:55:17 -0500 Subject: [PATCH 0837/2710] fix typo in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c1b8a8b59..76b4cfcac 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ including - the Lynx console. - the Ohio Scientific Challenger 1P. - the Commander X16. -- the Synertek Syetms Sym-1. +- the Synertek Systems Sym-1. The libraries are fairly portable, so creating a version for other 6502s shouldn't be too much work. From f81aefe8bdc0b113bfb1d2ac7e5c7d8a40c33778 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 9 May 2021 17:13:24 -0500 Subject: [PATCH 0838/2710] Synertek Systems Sym-1 config files --- asminc/sym1.inc | 186 +++++++++++++++++++++++++++++++++++++++++++ cfg/sym1-32k.cfg | 46 +++++++++++ cfg/sym1-4k.cfg | 46 +++++++++++ cfg/sym1.cfg | 46 +++++++++++ doc/sym1.sgml | 135 +++++++++++++++++++++++++++++++ include/symio.h | 148 ++++++++++++++++++++++++++++++++++ samples/helloworld.c | 9 +++ src/ca65/main.c | 3 + 8 files changed, 619 insertions(+) create mode 100644 asminc/sym1.inc create mode 100644 cfg/sym1-32k.cfg create mode 100644 cfg/sym1-4k.cfg create mode 100644 cfg/sym1.cfg create mode 100644 doc/sym1.sgml create mode 100644 include/symio.h create mode 100644 samples/helloworld.c diff --git a/asminc/sym1.inc b/asminc/sym1.inc new file mode 100644 index 000000000..b6a6f17fe --- /dev/null +++ b/asminc/sym1.inc @@ -0,0 +1,186 @@ +; --------------------------------------------------------------------------- +; +; SYM-1 definitions +; +; --------------------------------------------------------------------------- + + +RAMSTART := $0200 ; Entry point + + +; --------------------------------------------------------------------------- +; Monitor Functions +; --------------------------------------------------------------------------- +WARM := $8003 ; Monitor entry +SVNMI := $809B ; Save NMI entry +INBYTE := $81D9 ; Get two HEX characters and pack +ASCNIB := $8275 ; Test for carriage-return +INCCMP := $82B2 ; Increment pointer +CHKSAD := $82DD ; Compute checksum +OUTPC := $82EE ; Display program counter +OUTBYT := $82FA ; Print byte as two ASCII characters +OUTS2 := $8319 ; Print pointer +INSTAT := $8386 ; Determine if key is pressed +GETKEY := $88AF ; Get key (disregarding monitor login) +SCAND := $8906 ; Flash LED display (once) +KEYQ := $8923 ; Test for keypress +BEEP := $8972 ; Make a beep +CONFIG := $89A5 ; Configure I/O +OUTDSP := $89C1 ; Output to on-board LED display +INCHR := $8A1B ; Input character and convert to uppercase +OUTCHR := $8A47 ; Output character +INTCHR := $8A58 ; Input character without case conversion +DLYF := $8AE6 ; Delay 1 bit time +DLYH := $8AE9 ; Delay 1/2 bit time +RESET := $8B4A ; Hard reset +ACCESS := $8B86 ; Unlock lowest 4K memory +NACCES := $8B9C ; Lock lowest 4K memory +L8C78 := $8C78 ; Link to tape +DUMPT := $8E87 ; Dump memory to tape +LOADT := $8C78 ; Load memory from tape +TAPEMODE := $00FD ; Top bit on for high-speed + + +; --------------------------------------------------------------------------- +; System Memory +; --------------------------------------------------------------------------- +DISBUF := $A640 ; On-Board Display Buffer +DISBUF0 := $A640 ; Left-Most digit +DISBUF1 := $A641 ; Second digit +DISBUF2 := $A642 ; Third +DISBUF3 := $A643 ; Fourth +DISBUF4 := $A644 ; Fifth +DISBUF5 := $A645 ; Sixth and right-most digit +DISBUF6 := $A646 ; Not-used / right of display (shift buffer) +RDIG := $A645 ; Right-most digit (same as DISBUF5) +P3L := $A64A ; Parameter 3 (low-byte) +P3H := $A64B ; (high-byte) +P2L := $A64C ; Parameter 2 +P2H := $A64D ; +P1L := $A64E ; Parameter 1 +P1H := $A64F +PARNR := $A649 ; Number of Parameters Entered +PADBIT := $A650 ; Pad Bits for Carriage Return +SDBYT := $A651 ; Baud Rate for RS232 (01-4800,06-2400,10-1200,24-600,4C-300,D5-110) +ERCNT := $A652 ; Error Count (Max FF) +TECHO := $A653 ; Terminal Echo (bit-7=ECHO/NO, 6=CTL-O TOGGLE) +TOUTFL := $A654 ; Output Flags (bit-7=CRT IN, 6=TTY IN, 5=TTY OUT, 4=CRT OUT) +KSHFL := $A655 ; Keyboard Shift Flag +TV := $A656 ; Trace Velocity (0=Single Step) +LSTCOM := $A657 ; Last Monitor Command +MAXRC := $A658 ; Maximum Record Length for Memory Dump + + +; --------------------------------------------------------------------------- +; Register Followers +; --------------------------------------------------------------------------- +PCLR := $A659 ; Program Counter (low-byte) +PCHR := $A65A ; (high-byte) +SR := $A65B ; Stack Pointer +FR := $A65C ; Status Register Flags +AR := $A65D ; A Register +XR := $A65E ; X Register +YR := $A65F ; Y Register + + +; --------------------------------------------------------------------------- +; I/O Vectors (3 bytes each) +; --------------------------------------------------------------------------- +INVEC := $A660 ; Input Character +OUTVEC := $A663 ; Output Character +INSVEC := $A666 ; Input Status +URSVEC := $A669 ; Unrecognized Syntax +URCVEC := $A66C ; Unrecognized Command / Error +SCNVEC := $A66F ; Scan On-board Display + + +; --------------------------------------------------------------------------- +; Trace and Interrupt Vectors (2 bytes each) +; --------------------------------------------------------------------------- +EXEVEC := $A672 ; Exec and Alternate InVec +TRCVEC := $A674 ; Trace +UBRKVC := $A676 ; User Break after Monitor +UIRQVC := $A678 ; User non-break IRQ after Monitor +NMIVEC := $A67A ; Non-Maskable Interrupt +RSTVEC := $A67C ; Reset +IRQVEC := $A67E ; Interrupt Request + + +; --------------------------------------------------------------------------- +; I/O Registers +; --------------------------------------------------------------------------- +; +; 6532 (U27) +; +PADA := $A400 ; Keyboard / Display +P3DA := $A402 ; Serial I/O +DDPADA := $A401 ; Data-Direction Register for PADA +DDP3DA := $A403 ; Data-Direction Register for P3DA +WEDRTA := $A404 ; Write-Edge Detect Read Timer A +WEDRFA := $A405 ; Write-Edge Detect Read-Int Flags A +WEDRTB := $A406 ; Write-Edge Detect Read Timer B +WEDRFB := $A407 ; Write-Edge Detect Read-Int Flags B +TIM0001 := $A41C ; Timer / 1 +TIM0008 := $A41D ; Timer / 8 +TIM0064 := $A41E ; Timer / 64 +TIM1024 := $A41F ; Timer / 1024 +; +; 6522 (U25) +; +OR1A := $A001 ; Input / Output Register for 1A +DDR1A := $A003 ; Data-Direction Register for 1A +OR1B := $A000 ; Input / Output Register for 1B +DDR1B := $A002 ; Data-Direction Register for 1B +TIC1L := $A004 ; +TIC1H := $A005 ; +TIL1L := $A006 ; +TIL1H := $A007 ; +T2L1L := $A008 ; +T2C1L := $A008 ; +T2C1H := $A009 ; +SR1 := $A00A ; +ACR1 := $A00B ; +PCR1 := $A00C ; +IFR1 := $A00D ; +IER1 := $A00E ; +DR1A := $A00F ; +; +; 6522 (U28) +; +OR2A := $A801 ; Input / Output Register for 2A +DDR2A := $A803 ; Data-Direction Register for 2A +OR2B := $A800 ; Input / Output Register for 2B +DDR2B := $A802 ; Data-Direction Register for 2B +TIC2L := $A804 ; +TIC2H := $A805 ; +TIL2L := $A806 ; +TIL2H := $A807 ; +T2L2L := $A808 ; +T2C2L := $A808 ; +T2C2H := $A809 ; +SR2 := $A80A ; +ACR2 := $A80B ; +PCR2 := $A80C ; +IFR2 := $A80D ; +IER2 := $A80E ; +DR2A := $A80F ; +; +; 6522 (U29) +; +OR3A := $AC01 ; Write-Protect RAM, Debug On/Off, I/O-3A +DDR3A := $AC03 ; Data-Direction Register for 3A +OR3B := $AC00 ; Input / Output Register for 3B +DDR3B := $AC02 ; Data-Direction Register for 3B +TIC3L := $AC04 ; +TIC3H := $AC05 ; +TIL3L := $AC06 ; +TIL3H := $AC07 ; +T2L3L := $AC08 ; +T2C3L := $AC08 ; +T2C3H := $AC09 ; +SR3 := $AC0A ; +ACR3 := $AC0B ; +PCR3 := $AC0C ; +IFR3 := $AC0D ; +IER3 := $AC0E ; +DR3A := $AC0F ; diff --git a/cfg/sym1-32k.cfg b/cfg/sym1-32k.cfg new file mode 100644 index 000000000..14ddfb98f --- /dev/null +++ b/cfg/sym1-32k.cfg @@ -0,0 +1,46 @@ +# sym1-32k.cfg (32k) +# +# for Sym-1 with 32kb RAM +# +# ld65 --config sym1-32k.cfg -o <prog>.bin <prog>.o + +FEATURES { + STARTADDRESS: default = $0200; + CONDES: segment = STARTUP, + type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__; +} + +SYMBOLS { + __STACKSIZE__: type = weak, value = $0200; # 512 byte program stack + __STARTADDRESS__: type = export, value = %S; +} + +MEMORY { + ZP: start = $0000, size = $00F7, define = yes, file = %O; + CPUSTACK: start = $0100, size = $0100, define = yes; + RAM: start = %S, size = $8000 - %S - __STACKSIZE__, define = yes, file = %O; + MONROM: start = $8000, size = $1000, define = yes; + EXT: start = $9000, size = $1000, define = yes; + IO: start = $A000, size = $1000, define = yes; + RAE1: start = $B000, size = $1000, define = yes; + BASROM: start = $C000, size = $1000, define = yes; + RAE2: start = $E000, size = $1000, define = yes; + TOP: start = $F000, size = $1000, define = yes; +} + +SEGMENTS { + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; + BSS: load = RAM, type = bss, define = yes; +} + diff --git a/cfg/sym1-4k.cfg b/cfg/sym1-4k.cfg new file mode 100644 index 000000000..240d7bc82 --- /dev/null +++ b/cfg/sym1-4k.cfg @@ -0,0 +1,46 @@ +# sym1-4k.cfg (4k) +# +# for Sym-1 with 4kb RAM +# +# ld65 --config sym1-4k.cfg -o <prog>.bin <prog>.o + +FEATURES { + STARTADDRESS: default = $0200; + CONDES: segment = STARTUP, + type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__; +} + +SYMBOLS { + __STACKSIZE__: type = weak, value = $0080; # 128 byte program stack + __STARTADDRESS__: type = export, value = %S; +} + +MEMORY { + ZP: start = $0000, size = $00F7, define = yes, file = %O; + CPUSTACK: start = $0100, size = $0100, define = yes; + RAM: start = %S, size = $1000 - %S - __STACKSIZE__, define = yes, file = %O; + MONROM: start = $8000, size = $1000, define = yes; + EXT: start = $9000, size = $1000, define = yes; + IO: start = $A000, size = $1000, define = yes; + RAE1: start = $B000, size = $1000, define = yes; + BASROM: start = $C000, size = $1000, define = yes; + RAE2: start = $E000, size = $1000, define = yes; + TOP: start = $F000, size = $1000, define = yes; +} + +SEGMENTS { + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; + BSS: load = RAM, type = bss, define = yes; +} + diff --git a/cfg/sym1.cfg b/cfg/sym1.cfg new file mode 100644 index 000000000..240d7bc82 --- /dev/null +++ b/cfg/sym1.cfg @@ -0,0 +1,46 @@ +# sym1-4k.cfg (4k) +# +# for Sym-1 with 4kb RAM +# +# ld65 --config sym1-4k.cfg -o <prog>.bin <prog>.o + +FEATURES { + STARTADDRESS: default = $0200; + CONDES: segment = STARTUP, + type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__; +} + +SYMBOLS { + __STACKSIZE__: type = weak, value = $0080; # 128 byte program stack + __STARTADDRESS__: type = export, value = %S; +} + +MEMORY { + ZP: start = $0000, size = $00F7, define = yes, file = %O; + CPUSTACK: start = $0100, size = $0100, define = yes; + RAM: start = %S, size = $1000 - %S - __STACKSIZE__, define = yes, file = %O; + MONROM: start = $8000, size = $1000, define = yes; + EXT: start = $9000, size = $1000, define = yes; + IO: start = $A000, size = $1000, define = yes; + RAE1: start = $B000, size = $1000, define = yes; + BASROM: start = $C000, size = $1000, define = yes; + RAE2: start = $E000, size = $1000, define = yes; + TOP: start = $F000, size = $1000, define = yes; +} + +SEGMENTS { + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; + BSS: load = RAM, type = bss, define = yes; +} + diff --git a/doc/sym1.sgml b/doc/sym1.sgml new file mode 100644 index 000000000..d02e3b1b1 --- /dev/null +++ b/doc/sym1.sgml @@ -0,0 +1,135 @@ +<!doctype linuxdoc system> + +<article> +<title>Synertek Systems Sym-1 specific information for cc65 +<author><url url="mailto:wayne@parhamdata.com" name="Wayne Parham"> + +<abstract> +An overview over the Sym-1 runtime system as it is implemented for the cc65 C compiler. +</abstract> + +<!-- Table of contents --> +<toc> + +<!-- Begin the document --> + +<sect>Overview<p> + +This file contains an overview of the Sym-1 runtime system as it comes with the cc65 C compiler. It describes the memory layout, Sym-1 specific header files, available drivers, and any pitfalls specific to the platform. + +Please note that Sym-1 specific functions are just mentioned here, they are described in detail in the separate <url url="funcref.html" name="function reference">. Even functions marked as "platform dependent" may be available on more than one platform. Please see the function reference for more information. + +<sect>Binary format<p> + +The standard binary output format generated by the linker for the Sym-1 target is a 4 kbyte machine language program. It is, of course, possible to change this behavior by using one of the different linker configs. + +<p> + +Included with this distribution is a 4k configuration file and a 32k config file. The Sym-1 on-board memory is limited to 4k but system memory can be increased to 32 kbytes of contiguous RAM with aftermarket add-on boards. So choose the config file that matches your system configuration before compiling and linking user programs. + +<sect>Memory layout<p> + +The ROMs and I/O areas are defined in the configuration files, as are most of the entry points for useful subroutines in the Sym-1 monitor ROM. cc65 generated programs compiled and linked using 4k config run in the memory range of $200 - $0FFF. The 32k config expands this range to $7FFF. The starting memory location and entry point for running the program is $200, so when the program is transferred to the Sym-1, it is executed by typing 'g 200'. The system returns control back to the monitor ROM when the program terminates, providing the '.' prompt. + +Special locations: + +<descrip> + <tag/Text screen/ + Conio support is not currently available for the Sym-1. But stdio console functions are available. + + <tag/Stack/ + The C runtime stack is located at $0FFF on 4kb Syms, or at $7FFFfor 32kb systems. The stack always grows downwards. + + <tag/Heap/ + The C heap is located at the end of the program and grows towards the C + runtime stack. + +</descrip><p> + +<sect>Platform specific header files<p> + +Programs containing Sym-1 code may use the <tt/symio.h/ header file. See the header file for more information. + +<sect1>Hardware access<p> + +The following pseudo variables declared in the <tt/sym1.inc/ include file allow access to hardware located in the address space. See the include file for more information. + +<sect>Loadable drivers<p> + +<sect1>Graphics drivers<p> + +No graphics drivers are currently available for the Sym-1. + +<sect1>Extended memory drivers<p> + +No extended memory drivers are currently available for the Sym-1. + +<sect1>Joystick drivers<p> + +No joystick driver is currently available for the Sym-1. + +<sect1>Mouse drivers<p> + +No mouse drivers are currently available for the Sym-1. + +<sect1>RS232 device drivers<p> + +No communication port drivers are currently available for the Sym-1. It has only the "master console" e.g. stdin and stdout. + +<sect>Limitations<p> + +<sect1>Disk I/O<p> + +The existing library for the Sym-1 doesn't implement C file I/O. + +To be more specific, this limitation means that you cannot use any of the following functions (and a few others): + +<itemize> +<item>fopen +<item>fclose +<item>fread +<item>fwrite +<item>... +</itemize> + +<sect>Other hints<p> + +<sect1>symio.h<p> +You can use stdio.h if you wish, which provides console I/O (like printf) but does not have access to a filesystem, as mentioned above. + +But there is another header available, which exposes Sym-specific I/O functions that are useful for reading and writing its ports and front panel. It also exposes functions normally included using stdio.h but <i>only</i> the console I/O functions and not the filesystem functions. See the symio.h include file for a list of the functions available. + +<sect2>Limited memory applications<p> + +As stated earlier, there are config files for 4kb and 32kb systems. If you have 32kb RAM, then you will probably want to use the sym1_32k configuration, but if not - if you are using the sym1_32k configuration - then you may want to use functions like getchar, putchar, gets and puts rather than printf. Printf requires about 1kb because it needs to know how to process all the format specifiers. + +<sect3>Sample programs<p> + +All the samples will run on the "stock" 4k Sym-1, except for symio.c, which requires 8k. Information on building and running it is in the samples/tutorial/sym1 directory. + +<itemize> +<item>helloworld is the traditional "Hello World!" program, using printf().</item> +<item>symHello prints "Hello World!" and then inputs characters, which are echoed on the screen. It also makes a "beep" sound.</item> +<item>symTiny does the same as symhello, but does it with puts() rather than printf() to show the difference in compiled binary size.</item> +<item>symDisplay allows entry of a message, which is then displayed by scrolling it across the front panel display.</item> +<item>symIO allows access to the Sym-1 digital I/O ports.</item> +</itemize> + +<sect>License<p> + +This software is provided 'as-is', without any expressed or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + +<enum> +<item> The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +<item> Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. +<item> This notice may not be removed or altered from any source + distribution. +</enum> + +</article> diff --git a/include/symio.h b/include/symio.h new file mode 100644 index 000000000..bd90a42f9 --- /dev/null +++ b/include/symio.h @@ -0,0 +1,148 @@ +// symio.h +// +// I/O primitives for Sym-1 +// +// Wayne Parham + +#ifndef _SYMIO_H +#define _SYMIO_H + +#include <stddef.h> +#include <stdarg.h> + +int __fastcall__ beep (void); // Beep sound +int __fastcall__ set_D0 (char); // Set display digit 0 +int __fastcall__ get_D0 (void); // Get value of display digit 0 +int __fastcall__ set_D1 (char); // Set display digit 1 +int __fastcall__ get_D1 (void); // Get value of display digit 1 +int __fastcall__ set_D2 (char); // Set display digit 2 +int __fastcall__ get_D2 (void); // Get value of display digit 2 +int __fastcall__ set_D3 (char); // Set display digit 3 +int __fastcall__ get_D3 (void); // Get value of display digit 3 +int __fastcall__ set_D4 (char); // Set display digit 4 +int __fastcall__ get_D4 (void); // Get value of display digit 4 +int __fastcall__ set_D5 (char); // Set display digit 5 +int __fastcall__ get_D5 (void); // Get value of display digit 5 +int __fastcall__ set_D6 (char); // Set byte to the right of display (leading buffer) +int __fastcall__ get_D6 (void); // Get value of memory byte to the right of display +int __fastcall__ fdisp (void); // Flash display + +int __fastcall__ loadt (int); // Read from tape (id) +int __fastcall__ dumpt (int, int, int); // Write to tape (id, start_addr, end_addr) + +int __fastcall__ set_DDR1A (int); // Set data direction register 1A (U25) +int __fastcall__ get_DDR1A (void); // Get value of data direction register 1A +int __fastcall__ set_IOR1A (int); // Set I/O register 1A +int __fastcall__ get_IOR1A (void); // Get value of I/O register 1A + +int __fastcall__ set_DDR1B (int); // Set data direction register 1B (U25) +int __fastcall__ get_DDR1B (void); // Get value of data direction register 1B +int __fastcall__ set_IOR1B (int); // Set I/O register 1B +int __fastcall__ get_IOR1B (void); // Get value of I/O register 1B + +int __fastcall__ set_DDR2A (int); // Set data direction register 2A (U28) +int __fastcall__ get_DDR2A (void); // Get value of data direction register 2A +int __fastcall__ set_IOR2A (int); // Set I/O register 2A +int __fastcall__ get_IOR2A (void); // Get value of I/O register 2A + +int __fastcall__ set_DDR2B (int); // Set data direction register 2B (U28) +int __fastcall__ get_DDR2B (void); // Get value of data direction register 2B +int __fastcall__ set_IOR2B (int); // Set I/O register 2B +int __fastcall__ get_IOR2B (void); // Get value of I/O register 2B + +int __fastcall__ set_DDR3A (int); // Set data direction register 3A (U29) +int __fastcall__ get_DDR3A (void); // Get value of data direction register 3A +int __fastcall__ set_IOR3A (int); // Set I/O register 3A +int __fastcall__ get_IOR3A (void); // Get value of I/O register 3A + +int __fastcall__ set_DDR3B (int); // Set data direction register 3B (U29) +int __fastcall__ get_DDR3B (void); // Get value of data direction register 3B +int __fastcall__ set_IOR3B (int); // Set I/O register 3B +int __fastcall__ get_IOR3B (void); // Get value of I/O register 3B + +#ifndef _STDIO_H + +int __fastcall__ putchar (char); +int __fastcall__ puts (const char* s); +int printf (const char* format, ...); +int sprintf (char* buf, const char* format, ...); +int __fastcall__ vprintf (const char* format, va_list ap); +int __fastcall__ vsnprintf (char* buf, size_t size, const char* format, va_list ap); +int __fastcall__ vsprintf (char* buf, const char* format, va_list ap); +char __fastcall__ getchar (void); +char* __fastcall__ gets (char* s); +int scanf (const char* format, ...); +int sscanf (const char* s, const char* format, ...); +int __fastcall__ vscanf (const char* format, va_list ap); +int __fastcall__ vsscanf (const char* s, const char* format, va_list ap); + +#endif + +// Display character definitions + +#define DISP_1 0x06 // '1' +#define DISP_2 0x5B // '2' +#define DISP_3 0x4F // '3' +#define DISP_4 0x66 // '4' +#define DISP_5 0x6D // '5' +#define DISP_6 0x7C // '6' +#define DISP_7 0x07 // '7' +#define DISP_8 0x7F // '8' +#define DISP_9 0x67 // '9' +#define DISP_0 0x3F // '0' +#define DISP_A 0x77 // 'A' +#define DISP_b 0x7C // 'b' +#define DISP_C 0x39 // 'C' +#define DISP_c 0x58 // 'c' +#define DISP_d 0x5E // 'd' +#define DISP_E 0x79 // 'E' +#define DISP_e 0x7B // 'e' +#define DISP_F 0x71 // 'F' +#define DISP_G 0x7D // 'G' +#define DISP_g 0x6F // 'g' +#define DISP_H 0x76 // 'H' +#define DISP_h 0x74 // 'h' +#define DISP_I 0x06 // 'I' +#define DISP_i 0x04 // 'i' +#define DISP_J 0x1E // 'J' +#define DISP_K 0x74 // 'K' +#define DISP_L 0x38 // 'L' +#define DISP_M_1 0x33 // 'M' +#define DISP_M_2 0x27 // 2nd half +#define DISP_n 0x54 // 'n' +#define DISP_O 0x3F // 'O' +#define DISP_o 0x5C // 'o' +#define DISP_P 0x73 // 'P' +#define DISP_q 0x67 // 'q' +#define DISP_r 0x50 // 'r' +#define DISP_S 0x6D // 'S' +#define DISP_t 0x46 // 't' +#define DISP_U 0x3E // 'U' +#define DISP_u 0x1C // 'u' +#define DISP_V_1 0x64 // 'V' +#define DISP_V_2 0x52 // 2nd half +#define DISP_W_1 0x3C // 'W' +#define DISP_W_2 0x1E // 2nd half +#define DISP_Y 0x6E // 'Y' +#define DISP_Z 0x5B // 'Z' +#define DISP_SPACE 0x00 // ' ' +#define DISP_PERIOD 0x80 // '.' +#define DISP_HYPHEN 0x40 // '-' +#define DISP_APOSTR 0x20 // ''' +#define DISP_EQUAL 0x41 // '=' +#define DISP_3_BAR 0x49 // '=' +#define DISP_BOTTOM 0x04 // '_' +#define DISP_TOP 0x01 // Top segment +#define DISP_LEFT 0x30 // '|' Left side, both segments +#define DISP_RIGHT 0x06 // '|' Right side, both segments +#define DISP_DEGREE 0x63 // 'o' An 'o' character in the upper segments +#define DISP_HAT 0x23 // 'n' An 'n' character in the upper segments +#define DISP_FORK 0x62 // 'u' A 'u' character in the upper segments +#define DISP_SLASH 0x51 // '/' +#define DISP_BACKSLASH 0x34 // '\' +#define DISP_TOP_RIGHT 0x02 // Top right segment +#define DISP_TOP_LEFT 0x20 // Top left segment +#define DISP_LOW_RIGHT 0x04 // Lower right segment +#define DISP_LOW_LEFT 0x10 // Lower left segment + +#endif diff --git a/samples/helloworld.c b/samples/helloworld.c new file mode 100644 index 000000000..057a153e8 --- /dev/null +++ b/samples/helloworld.c @@ -0,0 +1,9 @@ +// Traditional "Hello World" program + +#include <stdio.h> + +void main (void) +{ + printf( "Hello World!\n" ); + return; +} diff --git a/src/ca65/main.c b/src/ca65/main.c index ab19d0b4d..bb0607b7c 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -334,6 +334,9 @@ static void SetSys (const char* Sys) CBMSystem ("__CX16__"); break; + case TGT_SYM1: + break; + default: AbEnd ("Invalid target name: '%s'", Sys); From 27e04b36b0e85cc73bd24f17e4d13417cd7290e2 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 9 May 2021 17:24:15 -0500 Subject: [PATCH 0839/2710] Makefile updates --- samples/Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/samples/Makefile b/samples/Makefile index e3b28057f..8a3edc412 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -8,6 +8,10 @@ # var. to build for another target system. SYS ?= c64 +# New targets can define MACHINE separately +# from target if needed. +MACHINE=$(SYS) + # Just the usual way to define a variable # containing a single space character. SPACE := From a2def19de5dba20f52fcff6eb2cdfa9df899504e Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 10 May 2021 15:20:49 +0100 Subject: [PATCH 0840/2710] Added TGT_SYM1 --- src/cc65/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/main.c b/src/cc65/main.c index 9e9fab6b4..d0d756b3f 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -290,7 +290,7 @@ static void SetSys (const char* Sys) cbmsys ("__CX16__"); break; - case TGT_NONE: + case TGT_SYM1: break; default: From b7856ddd4f9b73b0a40a284bd782de545986f801 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Tue, 11 May 2021 10:40:44 +0200 Subject: [PATCH 0841/2710] Just some source formatting adjustments. --- src/cc65/funcdesc.c | 16 ++++++++-------- src/cc65/funcdesc.h | 34 +++++++++++++++++----------------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/cc65/funcdesc.c b/src/cc65/funcdesc.c index 4c959fb6c..2291b35ee 100644 --- a/src/cc65/funcdesc.c +++ b/src/cc65/funcdesc.c @@ -54,14 +54,14 @@ FuncDesc* NewFuncDesc (void) FuncDesc* F = (FuncDesc*) xmalloc (sizeof (FuncDesc)); /* Nullify the fields */ - F->Flags = 0; - F->SymTab = 0; - F->TagTab = 0; - F->ParamCount = 0; - F->ParamSize = 0; - F->LastParam = 0; - F->FuncDef = 0; - F->WrappedCall = 0; + F->Flags = 0; + F->SymTab = 0; + F->TagTab = 0; + F->ParamCount = 0; + F->ParamSize = 0; + F->LastParam = 0; + F->FuncDef = 0; + F->WrappedCall = 0; F->WrappedCallData = 0; /* Return the new struct */ diff --git a/src/cc65/funcdesc.h b/src/cc65/funcdesc.h index 423e7621f..b69cfa850 100644 --- a/src/cc65/funcdesc.h +++ b/src/cc65/funcdesc.h @@ -45,15 +45,15 @@ /* Masks for the Flags field in FuncDesc */ -#define FD_NONE 0x0000U /* No flags */ -#define FD_EMPTY 0x0001U /* Function with empty param list */ -#define FD_VOID_PARAM 0x0002U /* Function with a void param list */ -#define FD_VARIADIC 0x0004U /* Function with variable param list */ +#define FD_NONE 0x0000U /* No flags */ +#define FD_EMPTY 0x0001U /* Function with empty param list */ +#define FD_VOID_PARAM 0x0002U /* Function with a void param list */ +#define FD_VARIADIC 0x0004U /* Function with variable param list */ #define FD_INCOMPLETE_PARAM 0x0008U /* Function with param of unknown size */ -#define FD_OLDSTYLE 0x0010U /* Old style (K&R) function */ -#define FD_OLDSTYLE_INTRET 0x0020U /* K&R func has implicit int return */ -#define FD_UNNAMED_PARAMS 0x0040U /* Function has unnamed params */ -#define FD_CALL_WRAPPER 0x0080U /* This function is used as a wrapper */ +#define FD_OLDSTYLE 0x0010U /* Old style (K&R) function */ +#define FD_OLDSTYLE_INTRET 0x0020U /* K&R func has implicit int return */ +#define FD_UNNAMED_PARAMS 0x0040U /* Function has unnamed params */ +#define FD_CALL_WRAPPER 0x0080U /* This function is used as a wrapper */ /* Bits that must be ignored when comparing funcs */ #define FD_IGNORE (FD_INCOMPLETE_PARAM | FD_OLDSTYLE | FD_OLDSTYLE_INTRET | FD_UNNAMED_PARAMS | FD_CALL_WRAPPER) @@ -63,15 +63,15 @@ /* Function descriptor */ typedef struct FuncDesc FuncDesc; struct FuncDesc { - unsigned Flags; /* Bitmapped flags FD_... */ - struct SymTable* SymTab; /* Symbol table */ - struct SymTable* TagTab; /* Symbol table for structs/enums */ - unsigned ParamCount; /* Number of parameters */ - unsigned ParamSize; /* Size of the parameters */ - struct SymEntry* LastParam; /* Pointer to last parameter */ - struct FuncDesc* FuncDef; /* Descriptor used in definition */ - struct SymEntry* WrappedCall; /* Pointer to the WrappedCall */ - unsigned char WrappedCallData;/* The WrappedCall's user data */ + unsigned Flags; /* Bitmapped flags FD_... */ + struct SymTable* SymTab; /* Symbol table */ + struct SymTable* TagTab; /* Symbol table for structs/enums */ + unsigned ParamCount; /* Number of parameters */ + unsigned ParamSize; /* Size of the parameters */ + struct SymEntry* LastParam; /* Pointer to last parameter */ + struct FuncDesc* FuncDef; /* Descriptor used in definition */ + struct SymEntry* WrappedCall; /* Pointer to the WrappedCall */ + unsigned char WrappedCallData; /* The WrappedCall's user data */ }; From ef8c70c7affb4c423af17fcc87a2308ad4284a46 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 11 May 2021 13:36:30 +0200 Subject: [PATCH 0842/2710] use url instead of htmlurl, add note on least significant 8bits of the bank value --- doc/cc65.sgml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index f4b31b8bc..7912b85a9 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1389,9 +1389,11 @@ parameter with the <tt/#pragma/. in their prototypes). The identifier is an 8-bit number that's set into <tt/tmp4/. If the identifier - is "bank", then a <tt><htmlurl url="ca65.html#.BANK" name=".bank"></tt> operator will be used + is "bank", then a <tt><url url="ca65.html#.BANK" name=".bank"></tt> operator will be used to determine the number from the bank attribute defined in the linker config, - see <htmlurl url="ld65.html#MEMORY" name="Other MEMORY area attributes">. + see <htmlurl url="ld65.html#MEMORY" name="Other MEMORY area attributes">. Note that + this currently implies that only the least significant 8 bits of the bank attribute + can be used. The address of a wrapped function is passed in <tt/ptr4/. The wrapper can call that function by using "<tt/jsr callptr4/". From ef742269931a36142facca4e42d938ce7fd4257a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 11 May 2021 13:37:53 +0200 Subject: [PATCH 0843/2710] improve error message --- src/cc65/pragma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index 249e4f1b4..84869e60f 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -532,7 +532,7 @@ static void WrappedCallPragma (StrBuf* B) /* Skip the following comma */ if (!GetComma (B)) { /* Error already flagged by GetComma */ - Error ("Value required for wrapped-call identifier"); + Error ("Value or the word 'bank' required for wrapped-call identifier"); goto ExitPoint; } From 18f94d1fe0b2b04c723419a4df9078f77c88c0a0 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 11 May 2021 14:00:49 +0200 Subject: [PATCH 0844/2710] rework to use a magic value instead of a flag, as suggested by Oliver --- src/cc65/declare.c | 6 ++---- src/cc65/expr.c | 2 +- src/cc65/funcdesc.h | 5 ++--- src/cc65/pragma.c | 7 +++---- src/cc65/wrappedcall.c | 9 ++++----- src/cc65/wrappedcall.h | 4 ++-- 6 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 0b705a320..8879c46d8 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1738,8 +1738,7 @@ static FuncDesc* ParseFuncDecl (void) { SymEntry* Sym; SymEntry* WrappedCall; - unsigned char WrappedCallData; - int WrappedCallUseBank; + unsigned int WrappedCallData; /* Create a new function descriptor */ FuncDesc* F = NewFuncDesc (); @@ -1792,11 +1791,10 @@ static FuncDesc* ParseFuncDecl (void) RememberFunctionLevel (F); /* Did we have a WrappedCall for this function? */ - GetWrappedCall((void **) &WrappedCall, &WrappedCallData, &WrappedCallUseBank); + GetWrappedCall((void **) &WrappedCall, &WrappedCallData); if (WrappedCall) { F->WrappedCall = WrappedCall; F->WrappedCallData = WrappedCallData; - F->WrappedCallUseBank = WrappedCallUseBank; } /* Return the function descriptor */ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index d2cd4ca5c..01bebf18e 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -997,7 +997,7 @@ static void FunctionCall (ExprDesc* Expr) char tmp[64]; StrBuf S = AUTO_STRBUF_INITIALIZER; - if (Func->WrappedCallUseBank) { + if (Func->WrappedCallData == WRAPPED_CALL_USE_BANK) { /* Store the bank attribute in tmp4 */ SB_AppendStr (&S, "ldy #<.bank(_"); SB_AppendStr (&S, (const char*) Expr->Name); diff --git a/src/cc65/funcdesc.h b/src/cc65/funcdesc.h index 5875723fb..305fd14f5 100644 --- a/src/cc65/funcdesc.h +++ b/src/cc65/funcdesc.h @@ -58,7 +58,7 @@ /* Bits that must be ignored when comparing funcs */ #define FD_IGNORE (FD_INCOMPLETE_PARAM | FD_OLDSTYLE | FD_OLDSTYLE_INTRET | FD_UNNAMED_PARAMS | FD_CALL_WRAPPER) - +#define WRAPPED_CALL_USE_BANK 0x0100U /* WrappedCall uses .bank() */ /* Function descriptor */ typedef struct FuncDesc FuncDesc; @@ -71,8 +71,7 @@ struct FuncDesc { struct SymEntry* LastParam; /* Pointer to last parameter */ struct FuncDesc* FuncDef; /* Descriptor used in definition */ struct SymEntry* WrappedCall; /* Pointer to the WrappedCall */ - unsigned char WrappedCallData;/* The WrappedCall's user data */ - int WrappedCallUseBank;/* Flag: does WrappedCall use .bank() or literal value */ + unsigned int WrappedCallData;/* The WrappedCall's user data */ }; diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index 84869e60f..e4bb4cdeb 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -497,7 +497,6 @@ static void WrappedCallPragma (StrBuf* B) const char *Name; long Val; SymEntry *Entry; - int UseBank = 0; /* Check for the "push" or "pop" keywords */ switch (ParsePushPop (B)) { @@ -538,13 +537,13 @@ static void WrappedCallPragma (StrBuf* B) /* Next must be either a numeric value, or "bank" */ if (HasStr (B, "bank")) { - UseBank = 1; + Val = WRAPPED_CALL_USE_BANK; } else if (!GetNumber (B, &Val)) { Error ("Value required for wrapped-call identifier"); goto ExitPoint; } - if (!UseBank && (Val < 0 || Val > 255)) { + if (!(Val == WRAPPED_CALL_USE_BANK) && (Val < 0 || Val > 255)) { Error ("Identifier must be between 0-255"); goto ExitPoint; } @@ -556,7 +555,7 @@ static void WrappedCallPragma (StrBuf* B) /* Check if the name is valid */ if (Entry && (Entry->Flags & SC_FUNC) == SC_FUNC) { - PushWrappedCall(Entry, (unsigned char) Val, UseBank); + PushWrappedCall(Entry, (unsigned int) Val); Entry->Flags |= SC_REF; GetFuncDesc (Entry->Type)->Flags |= FD_CALL_WRAPPER; diff --git a/src/cc65/wrappedcall.c b/src/cc65/wrappedcall.c index a67f9815d..ecf2c3a53 100644 --- a/src/cc65/wrappedcall.c +++ b/src/cc65/wrappedcall.c @@ -64,13 +64,13 @@ static IntPtrStack WrappedCalls; -void PushWrappedCall (void *Ptr, unsigned char Val, int UseBank) +void PushWrappedCall (void *Ptr, unsigned int Val) /* Push the current WrappedCall */ { if (IPS_IsFull (&WrappedCalls)) { Error ("WrappedCall stack overflow"); } else { - IPS_Push (&WrappedCalls, Val | (UseBank << 8), Ptr); + IPS_Push (&WrappedCalls, Val, Ptr); } } @@ -88,7 +88,7 @@ void PopWrappedCall (void) -void GetWrappedCall (void **Ptr, unsigned char *Val, int *UseBank) +void GetWrappedCall (void **Ptr, unsigned int *Val) /* Get the current WrappedCall */ { if (IPS_GetCount (&WrappedCalls) < 1) { @@ -97,7 +97,6 @@ void GetWrappedCall (void **Ptr, unsigned char *Val, int *UseBank) } else { long Temp; IPS_Get (&WrappedCalls, &Temp, Ptr); - *UseBank = (int) Temp >> 8; - *Val = (unsigned char) Temp & 0xff; + *Val = (unsigned int) Temp; } } diff --git a/src/cc65/wrappedcall.h b/src/cc65/wrappedcall.h index ddf6dd2b9..9a1bb51bf 100644 --- a/src/cc65/wrappedcall.h +++ b/src/cc65/wrappedcall.h @@ -50,13 +50,13 @@ -void PushWrappedCall (void *Ptr, unsigned char Val, int usebank); +void PushWrappedCall (void *Ptr, unsigned int Val); /* Push the current WrappedCall */ void PopWrappedCall (void); /* Pop the current WrappedCall */ -void GetWrappedCall (void **Ptr, unsigned char *Val, int *usebank); +void GetWrappedCall (void **Ptr, unsigned int *Val); /* Get the current WrappedCall, if any */ From 07dd1e3849672f8c1487ef652611f745a96a90da Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 11 May 2021 14:14:44 +0200 Subject: [PATCH 0845/2710] fix formatting --- src/cc65/funcdesc.c | 16 ++++++++-------- src/cc65/funcdesc.h | 34 +++++++++++++++++----------------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/cc65/funcdesc.c b/src/cc65/funcdesc.c index 4c959fb6c..2291b35ee 100644 --- a/src/cc65/funcdesc.c +++ b/src/cc65/funcdesc.c @@ -54,14 +54,14 @@ FuncDesc* NewFuncDesc (void) FuncDesc* F = (FuncDesc*) xmalloc (sizeof (FuncDesc)); /* Nullify the fields */ - F->Flags = 0; - F->SymTab = 0; - F->TagTab = 0; - F->ParamCount = 0; - F->ParamSize = 0; - F->LastParam = 0; - F->FuncDef = 0; - F->WrappedCall = 0; + F->Flags = 0; + F->SymTab = 0; + F->TagTab = 0; + F->ParamCount = 0; + F->ParamSize = 0; + F->LastParam = 0; + F->FuncDef = 0; + F->WrappedCall = 0; F->WrappedCallData = 0; /* Return the new struct */ diff --git a/src/cc65/funcdesc.h b/src/cc65/funcdesc.h index 305fd14f5..e065c7602 100644 --- a/src/cc65/funcdesc.h +++ b/src/cc65/funcdesc.h @@ -45,15 +45,15 @@ /* Masks for the Flags field in FuncDesc */ -#define FD_NONE 0x0000U /* No flags */ -#define FD_EMPTY 0x0001U /* Function with empty param list */ -#define FD_VOID_PARAM 0x0002U /* Function with a void param list */ -#define FD_VARIADIC 0x0004U /* Function with variable param list */ +#define FD_NONE 0x0000U /* No flags */ +#define FD_EMPTY 0x0001U /* Function with empty param list */ +#define FD_VOID_PARAM 0x0002U /* Function with a void param list */ +#define FD_VARIADIC 0x0004U /* Function with variable param list */ #define FD_INCOMPLETE_PARAM 0x0008U /* Function with param of unknown size */ -#define FD_OLDSTYLE 0x0010U /* Old style (K&R) function */ -#define FD_OLDSTYLE_INTRET 0x0020U /* K&R func has implicit int return */ -#define FD_UNNAMED_PARAMS 0x0040U /* Function has unnamed params */ -#define FD_CALL_WRAPPER 0x0080U /* This function is used as a wrapper */ +#define FD_OLDSTYLE 0x0010U /* Old style (K&R) function */ +#define FD_OLDSTYLE_INTRET 0x0020U /* K&R func has implicit int return */ +#define FD_UNNAMED_PARAMS 0x0040U /* Function has unnamed params */ +#define FD_CALL_WRAPPER 0x0080U /* This function is used as a wrapper */ /* Bits that must be ignored when comparing funcs */ #define FD_IGNORE (FD_INCOMPLETE_PARAM | FD_OLDSTYLE | FD_OLDSTYLE_INTRET | FD_UNNAMED_PARAMS | FD_CALL_WRAPPER) @@ -63,15 +63,15 @@ /* Function descriptor */ typedef struct FuncDesc FuncDesc; struct FuncDesc { - unsigned Flags; /* Bitmapped flags FD_... */ - struct SymTable* SymTab; /* Symbol table */ - struct SymTable* TagTab; /* Symbol table for structs/enums */ - unsigned ParamCount; /* Number of parameters */ - unsigned ParamSize; /* Size of the parameters */ - struct SymEntry* LastParam; /* Pointer to last parameter */ - struct FuncDesc* FuncDef; /* Descriptor used in definition */ - struct SymEntry* WrappedCall; /* Pointer to the WrappedCall */ - unsigned int WrappedCallData;/* The WrappedCall's user data */ + unsigned Flags; /* Bitmapped flags FD_... */ + struct SymTable* SymTab; /* Symbol table */ + struct SymTable* TagTab; /* Symbol table for structs/enums */ + unsigned ParamCount; /* Number of parameters */ + unsigned ParamSize; /* Size of the parameters */ + struct SymEntry* LastParam; /* Pointer to last parameter */ + struct FuncDesc* FuncDef; /* Descriptor used in definition */ + struct SymEntry* WrappedCall; /* Pointer to the WrappedCall */ + unsigned int WrappedCallData; /* The WrappedCall's user data */ }; From bcc670ee36ac00155e6a763f97eb3791ab9d0ddc Mon Sep 17 00:00:00 2001 From: Andrea Odetti <mariofutire@gmail.com> Date: Mon, 10 May 2021 09:56:40 +0100 Subject: [PATCH 0846/2710] Standard formatting of error messages. https://www.gnu.org/prep/standards/html_node/Errors.html Issue: https://github.com/cc65/cc65/issues/1494 --- src/ca65/error.c | 2 +- src/cc65/error.c | 8 ++++---- src/cc65/pragma.c | 2 +- src/cc65/preproc.c | 2 +- src/da65/asminc.c | 8 ++++---- src/da65/scanner.c | 4 ++-- src/ld65/asserts.c | 4 ++-- src/ld65/exports.c | 8 +++++--- src/ld65/scanner.c | 4 ++-- 9 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/ca65/error.c b/src/ca65/error.c index 69446b3fc..7e1457964 100644 --- a/src/ca65/error.c +++ b/src/ca65/error.c @@ -84,7 +84,7 @@ static void VPrintMsg (const FilePos* Pos, const char* Desc, SB_Terminate (&Msg); /* Format the message header */ - SB_Printf (&S, "%s(%u): %s: ", + SB_Printf (&S, "%s:%u: %s: ", SB_GetConstBuf (GetFileName (Pos->Name)), Pos->Line, Desc); diff --git a/src/cc65/error.c b/src/cc65/error.c index b1529d0b5..f0e023969 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -129,7 +129,7 @@ void Fatal (const char* Format, ...) LineNum = GetCurrentLine (); } - fprintf (stderr, "%s(%u): Fatal: ", FileName, LineNum); + fprintf (stderr, "%s:%u: Fatal: ", FileName, LineNum); va_start (ap, Format); vfprintf (stderr, Format, ap); @@ -159,7 +159,7 @@ void Internal (const char* Format, ...) LineNum = GetCurrentLine (); } - fprintf (stderr, "%s(%u): Internal compiler error:\n", + fprintf (stderr, "%s:%u: Internal compiler error:\n", FileName, LineNum); va_start (ap, Format); @@ -186,7 +186,7 @@ void Internal (const char* Format, ...) static void IntError (const char* Filename, unsigned LineNo, const char* Msg, va_list ap) /* Print an error message - internal function*/ { - fprintf (stderr, "%s(%u): Error: ", Filename, LineNo); + fprintf (stderr, "%s:%u: Error: ", Filename, LineNo); vfprintf (stderr, Msg, ap); fprintf (stderr, "\n"); @@ -250,7 +250,7 @@ static void IntWarning (const char* Filename, unsigned LineNo, const char* Msg, } else if (IS_Get (&WarnEnable)) { - fprintf (stderr, "%s(%u): Warning: ", Filename, LineNo); + fprintf (stderr, "%s:%u: Warning: ", Filename, LineNo); vfprintf (stderr, Msg, ap); fprintf (stderr, "\n"); diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index e4bb4cdeb..b0478ce2a 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -784,7 +784,7 @@ static void IntPragma (StrBuf* B, IntStack* Stack, long Low, long High) static void MakeMessage (const char* Message) { - fprintf (stderr, "%s(%u): Note: %s\n", GetInputName (CurTok.LI), GetInputLine (CurTok.LI), Message); + fprintf (stderr, "%s:%u: Note: %s\n", GetInputName (CurTok.LI), GetInputLine (CurTok.LI), Message); } diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index cc160c1c3..37073e784 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1396,7 +1396,7 @@ void Preprocess (void) Done: if (Verbosity > 1 && SB_NotEmpty (Line)) { - printf ("%s(%u): %.*s\n", GetCurrentFile (), GetCurrentLine (), + printf ("%s:%u: %.*s\n", GetCurrentFile (), GetCurrentLine (), (int) SB_GetLen (Line), SB_GetConstBuf (Line)); } } diff --git a/src/da65/asminc.c b/src/da65/asminc.c index 59ba0aab4..4d9da2594 100644 --- a/src/da65/asminc.c +++ b/src/da65/asminc.c @@ -133,7 +133,7 @@ void AsmInc (const char* Filename, char CommentStart, int IgnoreUnknown) SB_Terminate (&Ident); } else { if (!IgnoreUnknown) { - Error ("%s(%u): Syntax error", Filename, Line); + Error ("%s:%u: Syntax error", Filename, Line); } continue; } @@ -148,7 +148,7 @@ void AsmInc (const char* Filename, char CommentStart, int IgnoreUnknown) ++L; } else { if (!IgnoreUnknown) { - Error ("%s(%u): Missing '='", Filename, Line); + Error ("%s:%u: Missing '='", Filename, Line); } continue; } @@ -192,7 +192,7 @@ void AsmInc (const char* Filename, char CommentStart, int IgnoreUnknown) /* Must have at least one digit */ if (Digits == 0) { if (!IgnoreUnknown) { - Error ("%s(%u): Error in number format", Filename, Line); + Error ("%s:%u: Error in number format", Filename, Line); } continue; } @@ -213,7 +213,7 @@ void AsmInc (const char* Filename, char CommentStart, int IgnoreUnknown) /* Check for a comment character or end of line */ if (*L != CommentStart && *L != '\0') { if (!IgnoreUnknown) { - Error ("%s(%u): Trailing garbage", Filename, Line); + Error ("%s:%u: Trailing garbage", Filename, Line); } continue; } diff --git a/src/da65/scanner.c b/src/da65/scanner.c index 85853d6c4..33fb3a826 100644 --- a/src/da65/scanner.c +++ b/src/da65/scanner.c @@ -94,7 +94,7 @@ void InfoWarning (const char* Format, ...) xvsprintf (Buf, sizeof (Buf), Format, ap); va_end (ap); - fprintf (stderr, "%s(%u): Warning: %s\n", + fprintf (stderr, "%s:%u: Warning: %s\n", InputSrcName, InfoErrorLine, Buf); } @@ -110,7 +110,7 @@ void InfoError (const char* Format, ...) xvsprintf (Buf, sizeof (Buf), Format, ap); va_end (ap); - fprintf (stderr, "%s(%u): Error: %s\n", + fprintf (stderr, "%s:%u: Error: %s\n", InputSrcName, InfoErrorLine, Buf); exit (EXIT_FAILURE); } diff --git a/src/ld65/asserts.c b/src/ld65/asserts.c index 626ed94a6..e9bae83e5 100644 --- a/src/ld65/asserts.c +++ b/src/ld65/asserts.c @@ -140,12 +140,12 @@ void CheckAssertions (void) case ASSERT_ACT_WARN: case ASSERT_ACT_LDWARN: - Warning ("%s(%u): %s", Module, Line, Message); + Warning ("%s:%u: %s", Module, Line, Message); break; case ASSERT_ACT_ERROR: case ASSERT_ACT_LDERROR: - Error ("%s(%u): %s", Module, Line, Message); + Error ("%s:%u: %s", Module, Line, Message); break; default: diff --git a/src/ld65/exports.c b/src/ld65/exports.c index 5df7a37c9..872db5143 100644 --- a/src/ld65/exports.c +++ b/src/ld65/exports.c @@ -774,17 +774,19 @@ static void PrintUnresolved (ExpCheckFunc F, void* Data) if (E->Expr == 0 && E->ImpCount > 0 && F (E->Name, Data) == 0) { /* Unresolved external */ Import* Imp = E->ImpList; + const char * name = GetString (E->Name); fprintf (stderr, "Unresolved external '%s' referenced in:\n", - GetString (E->Name)); + name); while (Imp) { unsigned J; for (J = 0; J < CollCount (&Imp->RefLines); ++J) { const LineInfo* LI = CollConstAt (&Imp->RefLines, J); fprintf (stderr, - " %s(%u)\n", + " %s:%u: Error: Unresolved external '%s'\n", GetSourceName (LI), - GetSourceLine (LI)); + GetSourceLine (LI), + name); } Imp = Imp->Next; } diff --git a/src/ld65/scanner.c b/src/ld65/scanner.c index d6278abbd..256d47f07 100644 --- a/src/ld65/scanner.c +++ b/src/ld65/scanner.c @@ -92,7 +92,7 @@ void CfgWarning (const FilePos* Pos, const char* Format, ...) SB_VPrintf (&Buf, Format, ap); va_end (ap); - Warning ("%s(%u): %s", + Warning ("%s:%u: %s", GetString (Pos->Name), Pos->Line, SB_GetConstBuf (&Buf)); SB_Done (&Buf); } @@ -109,7 +109,7 @@ void CfgError (const FilePos* Pos, const char* Format, ...) SB_VPrintf (&Buf, Format, ap); va_end (ap); - Error ("%s(%u): %s", + Error ("%s:%u: %s", GetString (Pos->Name), Pos->Line, SB_GetConstBuf (&Buf)); SB_Done (&Buf); } From 467844963a7207afd8857d93caf7c6daa74901ce Mon Sep 17 00:00:00 2001 From: Andrea Odetti <mariofutire@gmail.com> Date: Mon, 10 May 2021 10:35:17 +0100 Subject: [PATCH 0847/2710] Update failing test due to error format changes. --- test/misc/goto.ref | 300 ++++++++++++++++++++++----------------------- 1 file changed, 150 insertions(+), 150 deletions(-) diff --git a/test/misc/goto.ref b/test/misc/goto.ref index d0a978436..2e0819887 100644 --- a/test/misc/goto.ref +++ b/test/misc/goto.ref @@ -1,150 +1,150 @@ -goto.c(8): Warning: Goto at line 8 to label start jumps into a block with initialization of an object that has automatic storage duration -goto.c(97): Warning: Variable 'a' is defined but never used -goto.c(117): Warning: Variable 'a' is defined but never used -goto.c(137): Warning: Variable 'a' is defined but never used -goto.c(159): Warning: Goto at line 23 to label l8 jumps into a block with initialization of an object that has automatic storage duration -goto.c(159): Warning: Goto at line 44 to label l8 jumps into a block with initialization of an object that has automatic storage duration -goto.c(159): Warning: Goto at line 65 to label l8 jumps into a block with initialization of an object that has automatic storage duration -goto.c(159): Warning: Goto at line 86 to label l8 jumps into a block with initialization of an object that has automatic storage duration -goto.c(159): Warning: Goto at line 106 to label l8 jumps into a block with initialization of an object that has automatic storage duration -goto.c(159): Warning: Goto at line 126 to label l8 jumps into a block with initialization of an object that has automatic storage duration -goto.c(159): Warning: Goto at line 146 to label l8 jumps into a block with initialization of an object that has automatic storage duration -goto.c(180): Warning: Goto at line 24 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(180): Warning: Goto at line 45 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(180): Warning: Goto at line 66 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(180): Warning: Goto at line 87 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(180): Warning: Goto at line 107 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(180): Warning: Goto at line 127 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(180): Warning: Goto at line 147 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(180): Warning: Goto at line 168 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(201): Warning: Goto at line 25 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(201): Warning: Goto at line 46 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(201): Warning: Goto at line 67 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(201): Warning: Goto at line 88 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(201): Warning: Goto at line 108 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(201): Warning: Goto at line 128 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(201): Warning: Goto at line 148 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(201): Warning: Goto at line 169 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(201): Warning: Goto at line 190 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(221): Warning: Goto at line 26 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(221): Warning: Goto at line 47 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(221): Warning: Goto at line 68 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(221): Warning: Goto at line 89 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(221): Warning: Goto at line 109 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(221): Warning: Goto at line 129 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(221): Warning: Goto at line 149 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(221): Warning: Goto at line 170 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(231): Warning: Goto at line 231 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(241): Warning: Goto at line 27 to label lc jumps into a block with initialization of an object that has automatic storage duration -goto.c(241): Warning: Goto at line 48 to label lc jumps into a block with initialization of an object that has automatic storage duration -goto.c(241): Warning: Goto at line 69 to label lc jumps into a block with initialization of an object that has automatic storage duration -goto.c(241): Warning: Goto at line 90 to label lc jumps into a block with initialization of an object that has automatic storage duration -goto.c(241): Warning: Goto at line 110 to label lc jumps into a block with initialization of an object that has automatic storage duration -goto.c(241): Warning: Goto at line 130 to label lc jumps into a block with initialization of an object that has automatic storage duration -goto.c(241): Warning: Goto at line 150 to label lc jumps into a block with initialization of an object that has automatic storage duration -goto.c(250): Warning: Goto at line 250 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(251): Warning: Goto at line 251 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(252): Warning: Goto at line 252 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(263): Warning: Goto at line 28 to label ld jumps into a block with initialization of an object that has automatic storage duration -goto.c(263): Warning: Goto at line 49 to label ld jumps into a block with initialization of an object that has automatic storage duration -goto.c(263): Warning: Goto at line 70 to label ld jumps into a block with initialization of an object that has automatic storage duration -goto.c(263): Warning: Goto at line 91 to label ld jumps into a block with initialization of an object that has automatic storage duration -goto.c(263): Warning: Goto at line 111 to label ld jumps into a block with initialization of an object that has automatic storage duration -goto.c(263): Warning: Goto at line 131 to label ld jumps into a block with initialization of an object that has automatic storage duration -goto.c(263): Warning: Goto at line 151 to label ld jumps into a block with initialization of an object that has automatic storage duration -goto.c(263): Warning: Goto at line 172 to label ld jumps into a block with initialization of an object that has automatic storage duration -goto.c(263): Warning: Goto at line 193 to label ld jumps into a block with initialization of an object that has automatic storage duration -goto.c(263): Warning: Goto at line 214 to label ld jumps into a block with initialization of an object that has automatic storage duration -goto.c(263): Warning: Goto at line 234 to label ld jumps into a block with initialization of an object that has automatic storage duration -goto.c(263): Warning: Goto at line 254 to label ld jumps into a block with initialization of an object that has automatic storage duration -goto.c(271): Warning: Goto at line 271 to label l8 jumps into a block with initialization of an object that has automatic storage duration -goto.c(272): Warning: Goto at line 272 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(273): Warning: Goto at line 273 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(274): Warning: Goto at line 274 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(275): Warning: Goto at line 275 to label lc jumps into a block with initialization of an object that has automatic storage duration -goto.c(284): Warning: Goto at line 29 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(284): Warning: Goto at line 50 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(284): Warning: Goto at line 71 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(284): Warning: Goto at line 92 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(284): Warning: Goto at line 112 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(284): Warning: Goto at line 132 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(284): Warning: Goto at line 152 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(284): Warning: Goto at line 173 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(284): Warning: Goto at line 194 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(284): Warning: Goto at line 215 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(284): Warning: Goto at line 235 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(284): Warning: Goto at line 255 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(284): Warning: Goto at line 277 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(292): Warning: Goto at line 292 to label l8 jumps into a block with initialization of an object that has automatic storage duration -goto.c(293): Warning: Goto at line 293 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(294): Warning: Goto at line 294 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(295): Warning: Goto at line 295 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(296): Warning: Goto at line 296 to label lc jumps into a block with initialization of an object that has automatic storage duration -goto.c(305): Warning: Goto at line 30 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(305): Warning: Goto at line 51 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(305): Warning: Goto at line 72 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(305): Warning: Goto at line 93 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(305): Warning: Goto at line 113 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(305): Warning: Goto at line 133 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(305): Warning: Goto at line 153 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(305): Warning: Goto at line 174 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(305): Warning: Goto at line 195 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(305): Warning: Goto at line 216 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(305): Warning: Goto at line 236 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(305): Warning: Goto at line 256 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(305): Warning: Goto at line 278 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(305): Warning: Goto at line 299 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(313): Warning: Goto at line 313 to label l8 jumps into a block with initialization of an object that has automatic storage duration -goto.c(314): Warning: Goto at line 314 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(315): Warning: Goto at line 315 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(316): Warning: Goto at line 316 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(317): Warning: Goto at line 317 to label lc jumps into a block with initialization of an object that has automatic storage duration -goto.c(325): Warning: Goto at line 31 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(325): Warning: Goto at line 52 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(325): Warning: Goto at line 73 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(325): Warning: Goto at line 94 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(325): Warning: Goto at line 114 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(325): Warning: Goto at line 134 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(325): Warning: Goto at line 154 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(325): Warning: Goto at line 175 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(325): Warning: Goto at line 196 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(325): Warning: Goto at line 217 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(325): Warning: Goto at line 237 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(325): Warning: Goto at line 257 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(325): Warning: Goto at line 279 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(333): Warning: Goto at line 333 to label l8 jumps into a block with initialization of an object that has automatic storage duration -goto.c(334): Warning: Goto at line 334 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(335): Warning: Goto at line 335 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(336): Warning: Goto at line 336 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(337): Warning: Goto at line 337 to label lc jumps into a block with initialization of an object that has automatic storage duration -goto.c(340): Warning: Goto at line 340 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(345): Warning: Goto at line 32 to label lh jumps into a block with initialization of an object that has automatic storage duration -goto.c(345): Warning: Goto at line 53 to label lh jumps into a block with initialization of an object that has automatic storage duration -goto.c(345): Warning: Goto at line 74 to label lh jumps into a block with initialization of an object that has automatic storage duration -goto.c(345): Warning: Goto at line 95 to label lh jumps into a block with initialization of an object that has automatic storage duration -goto.c(345): Warning: Goto at line 115 to label lh jumps into a block with initialization of an object that has automatic storage duration -goto.c(345): Warning: Goto at line 135 to label lh jumps into a block with initialization of an object that has automatic storage duration -goto.c(345): Warning: Goto at line 155 to label lh jumps into a block with initialization of an object that has automatic storage duration -goto.c(345): Warning: Goto at line 176 to label lh jumps into a block with initialization of an object that has automatic storage duration -goto.c(345): Warning: Goto at line 197 to label lh jumps into a block with initialization of an object that has automatic storage duration -goto.c(345): Warning: Goto at line 218 to label lh jumps into a block with initialization of an object that has automatic storage duration -goto.c(345): Warning: Goto at line 238 to label lh jumps into a block with initialization of an object that has automatic storage duration -goto.c(345): Warning: Goto at line 258 to label lh jumps into a block with initialization of an object that has automatic storage duration -goto.c(353): Warning: Goto at line 353 to label l8 jumps into a block with initialization of an object that has automatic storage duration -goto.c(354): Warning: Goto at line 354 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(355): Warning: Goto at line 355 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(356): Warning: Goto at line 356 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(357): Warning: Goto at line 357 to label lc jumps into a block with initialization of an object that has automatic storage duration -goto.c(359): Warning: Goto at line 359 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(360): Warning: Goto at line 360 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(361): Warning: Goto at line 361 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(373): Warning: Goto at line 373 to label l8 jumps into a block with initialization of an object that has automatic storage duration -goto.c(374): Warning: Goto at line 374 to label l9 jumps into a block with initialization of an object that has automatic storage duration -goto.c(375): Warning: Goto at line 375 to label la jumps into a block with initialization of an object that has automatic storage duration -goto.c(376): Warning: Goto at line 376 to label lb jumps into a block with initialization of an object that has automatic storage duration -goto.c(377): Warning: Goto at line 377 to label lc jumps into a block with initialization of an object that has automatic storage duration -goto.c(378): Warning: Goto at line 378 to label ld jumps into a block with initialization of an object that has automatic storage duration -goto.c(379): Warning: Goto at line 379 to label le jumps into a block with initialization of an object that has automatic storage duration -goto.c(380): Warning: Goto at line 380 to label lf jumps into a block with initialization of an object that has automatic storage duration -goto.c(381): Warning: Goto at line 381 to label lg jumps into a block with initialization of an object that has automatic storage duration -goto.c(382): Warning: Goto at line 382 to label lh jumps into a block with initialization of an object that has automatic storage duration +goto.c:8: Warning: Goto at line 8 to label start jumps into a block with initialization of an object that has automatic storage duration +goto.c:97: Warning: Variable 'a' is defined but never used +goto.c:117: Warning: Variable 'a' is defined but never used +goto.c:137: Warning: Variable 'a' is defined but never used +goto.c:159: Warning: Goto at line 23 to label l8 jumps into a block with initialization of an object that has automatic storage duration +goto.c:159: Warning: Goto at line 44 to label l8 jumps into a block with initialization of an object that has automatic storage duration +goto.c:159: Warning: Goto at line 65 to label l8 jumps into a block with initialization of an object that has automatic storage duration +goto.c:159: Warning: Goto at line 86 to label l8 jumps into a block with initialization of an object that has automatic storage duration +goto.c:159: Warning: Goto at line 106 to label l8 jumps into a block with initialization of an object that has automatic storage duration +goto.c:159: Warning: Goto at line 126 to label l8 jumps into a block with initialization of an object that has automatic storage duration +goto.c:159: Warning: Goto at line 146 to label l8 jumps into a block with initialization of an object that has automatic storage duration +goto.c:180: Warning: Goto at line 24 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:180: Warning: Goto at line 45 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:180: Warning: Goto at line 66 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:180: Warning: Goto at line 87 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:180: Warning: Goto at line 107 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:180: Warning: Goto at line 127 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:180: Warning: Goto at line 147 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:180: Warning: Goto at line 168 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:201: Warning: Goto at line 25 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:201: Warning: Goto at line 46 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:201: Warning: Goto at line 67 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:201: Warning: Goto at line 88 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:201: Warning: Goto at line 108 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:201: Warning: Goto at line 128 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:201: Warning: Goto at line 148 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:201: Warning: Goto at line 169 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:201: Warning: Goto at line 190 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:221: Warning: Goto at line 26 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:221: Warning: Goto at line 47 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:221: Warning: Goto at line 68 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:221: Warning: Goto at line 89 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:221: Warning: Goto at line 109 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:221: Warning: Goto at line 129 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:221: Warning: Goto at line 149 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:221: Warning: Goto at line 170 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:231: Warning: Goto at line 231 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:241: Warning: Goto at line 27 to label lc jumps into a block with initialization of an object that has automatic storage duration +goto.c:241: Warning: Goto at line 48 to label lc jumps into a block with initialization of an object that has automatic storage duration +goto.c:241: Warning: Goto at line 69 to label lc jumps into a block with initialization of an object that has automatic storage duration +goto.c:241: Warning: Goto at line 90 to label lc jumps into a block with initialization of an object that has automatic storage duration +goto.c:241: Warning: Goto at line 110 to label lc jumps into a block with initialization of an object that has automatic storage duration +goto.c:241: Warning: Goto at line 130 to label lc jumps into a block with initialization of an object that has automatic storage duration +goto.c:241: Warning: Goto at line 150 to label lc jumps into a block with initialization of an object that has automatic storage duration +goto.c:250: Warning: Goto at line 250 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:251: Warning: Goto at line 251 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:252: Warning: Goto at line 252 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:263: Warning: Goto at line 28 to label ld jumps into a block with initialization of an object that has automatic storage duration +goto.c:263: Warning: Goto at line 49 to label ld jumps into a block with initialization of an object that has automatic storage duration +goto.c:263: Warning: Goto at line 70 to label ld jumps into a block with initialization of an object that has automatic storage duration +goto.c:263: Warning: Goto at line 91 to label ld jumps into a block with initialization of an object that has automatic storage duration +goto.c:263: Warning: Goto at line 111 to label ld jumps into a block with initialization of an object that has automatic storage duration +goto.c:263: Warning: Goto at line 131 to label ld jumps into a block with initialization of an object that has automatic storage duration +goto.c:263: Warning: Goto at line 151 to label ld jumps into a block with initialization of an object that has automatic storage duration +goto.c:263: Warning: Goto at line 172 to label ld jumps into a block with initialization of an object that has automatic storage duration +goto.c:263: Warning: Goto at line 193 to label ld jumps into a block with initialization of an object that has automatic storage duration +goto.c:263: Warning: Goto at line 214 to label ld jumps into a block with initialization of an object that has automatic storage duration +goto.c:263: Warning: Goto at line 234 to label ld jumps into a block with initialization of an object that has automatic storage duration +goto.c:263: Warning: Goto at line 254 to label ld jumps into a block with initialization of an object that has automatic storage duration +goto.c:271: Warning: Goto at line 271 to label l8 jumps into a block with initialization of an object that has automatic storage duration +goto.c:272: Warning: Goto at line 272 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:273: Warning: Goto at line 273 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:274: Warning: Goto at line 274 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:275: Warning: Goto at line 275 to label lc jumps into a block with initialization of an object that has automatic storage duration +goto.c:284: Warning: Goto at line 29 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:284: Warning: Goto at line 50 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:284: Warning: Goto at line 71 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:284: Warning: Goto at line 92 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:284: Warning: Goto at line 112 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:284: Warning: Goto at line 132 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:284: Warning: Goto at line 152 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:284: Warning: Goto at line 173 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:284: Warning: Goto at line 194 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:284: Warning: Goto at line 215 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:284: Warning: Goto at line 235 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:284: Warning: Goto at line 255 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:284: Warning: Goto at line 277 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:292: Warning: Goto at line 292 to label l8 jumps into a block with initialization of an object that has automatic storage duration +goto.c:293: Warning: Goto at line 293 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:294: Warning: Goto at line 294 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:295: Warning: Goto at line 295 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:296: Warning: Goto at line 296 to label lc jumps into a block with initialization of an object that has automatic storage duration +goto.c:305: Warning: Goto at line 30 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:305: Warning: Goto at line 51 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:305: Warning: Goto at line 72 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:305: Warning: Goto at line 93 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:305: Warning: Goto at line 113 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:305: Warning: Goto at line 133 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:305: Warning: Goto at line 153 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:305: Warning: Goto at line 174 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:305: Warning: Goto at line 195 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:305: Warning: Goto at line 216 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:305: Warning: Goto at line 236 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:305: Warning: Goto at line 256 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:305: Warning: Goto at line 278 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:305: Warning: Goto at line 299 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:313: Warning: Goto at line 313 to label l8 jumps into a block with initialization of an object that has automatic storage duration +goto.c:314: Warning: Goto at line 314 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:315: Warning: Goto at line 315 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:316: Warning: Goto at line 316 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:317: Warning: Goto at line 317 to label lc jumps into a block with initialization of an object that has automatic storage duration +goto.c:325: Warning: Goto at line 31 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:325: Warning: Goto at line 52 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:325: Warning: Goto at line 73 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:325: Warning: Goto at line 94 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:325: Warning: Goto at line 114 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:325: Warning: Goto at line 134 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:325: Warning: Goto at line 154 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:325: Warning: Goto at line 175 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:325: Warning: Goto at line 196 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:325: Warning: Goto at line 217 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:325: Warning: Goto at line 237 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:325: Warning: Goto at line 257 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:325: Warning: Goto at line 279 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:333: Warning: Goto at line 333 to label l8 jumps into a block with initialization of an object that has automatic storage duration +goto.c:334: Warning: Goto at line 334 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:335: Warning: Goto at line 335 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:336: Warning: Goto at line 336 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:337: Warning: Goto at line 337 to label lc jumps into a block with initialization of an object that has automatic storage duration +goto.c:340: Warning: Goto at line 340 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:345: Warning: Goto at line 32 to label lh jumps into a block with initialization of an object that has automatic storage duration +goto.c:345: Warning: Goto at line 53 to label lh jumps into a block with initialization of an object that has automatic storage duration +goto.c:345: Warning: Goto at line 74 to label lh jumps into a block with initialization of an object that has automatic storage duration +goto.c:345: Warning: Goto at line 95 to label lh jumps into a block with initialization of an object that has automatic storage duration +goto.c:345: Warning: Goto at line 115 to label lh jumps into a block with initialization of an object that has automatic storage duration +goto.c:345: Warning: Goto at line 135 to label lh jumps into a block with initialization of an object that has automatic storage duration +goto.c:345: Warning: Goto at line 155 to label lh jumps into a block with initialization of an object that has automatic storage duration +goto.c:345: Warning: Goto at line 176 to label lh jumps into a block with initialization of an object that has automatic storage duration +goto.c:345: Warning: Goto at line 197 to label lh jumps into a block with initialization of an object that has automatic storage duration +goto.c:345: Warning: Goto at line 218 to label lh jumps into a block with initialization of an object that has automatic storage duration +goto.c:345: Warning: Goto at line 238 to label lh jumps into a block with initialization of an object that has automatic storage duration +goto.c:345: Warning: Goto at line 258 to label lh jumps into a block with initialization of an object that has automatic storage duration +goto.c:353: Warning: Goto at line 353 to label l8 jumps into a block with initialization of an object that has automatic storage duration +goto.c:354: Warning: Goto at line 354 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:355: Warning: Goto at line 355 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:356: Warning: Goto at line 356 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:357: Warning: Goto at line 357 to label lc jumps into a block with initialization of an object that has automatic storage duration +goto.c:359: Warning: Goto at line 359 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:360: Warning: Goto at line 360 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:361: Warning: Goto at line 361 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:373: Warning: Goto at line 373 to label l8 jumps into a block with initialization of an object that has automatic storage duration +goto.c:374: Warning: Goto at line 374 to label l9 jumps into a block with initialization of an object that has automatic storage duration +goto.c:375: Warning: Goto at line 375 to label la jumps into a block with initialization of an object that has automatic storage duration +goto.c:376: Warning: Goto at line 376 to label lb jumps into a block with initialization of an object that has automatic storage duration +goto.c:377: Warning: Goto at line 377 to label lc jumps into a block with initialization of an object that has automatic storage duration +goto.c:378: Warning: Goto at line 378 to label ld jumps into a block with initialization of an object that has automatic storage duration +goto.c:379: Warning: Goto at line 379 to label le jumps into a block with initialization of an object that has automatic storage duration +goto.c:380: Warning: Goto at line 380 to label lf jumps into a block with initialization of an object that has automatic storage duration +goto.c:381: Warning: Goto at line 381 to label lg jumps into a block with initialization of an object that has automatic storage duration +goto.c:382: Warning: Goto at line 382 to label lh jumps into a block with initialization of an object that has automatic storage duration From feccc68c547c7f74d6202db179181fdf31e3f946 Mon Sep 17 00:00:00 2001 From: Andrea Odetti <mariofutire@gmail.com> Date: Tue, 11 May 2021 13:54:05 +0100 Subject: [PATCH 0848/2710] ld65: avoid redundant error message information. --- src/ld65/exports.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/ld65/exports.c b/src/ld65/exports.c index 872db5143..6580033fb 100644 --- a/src/ld65/exports.c +++ b/src/ld65/exports.c @@ -774,16 +774,13 @@ static void PrintUnresolved (ExpCheckFunc F, void* Data) if (E->Expr == 0 && E->ImpCount > 0 && F (E->Name, Data) == 0) { /* Unresolved external */ Import* Imp = E->ImpList; - const char * name = GetString (E->Name); - fprintf (stderr, - "Unresolved external '%s' referenced in:\n", - name); + const char* name = GetString (E->Name); while (Imp) { unsigned J; for (J = 0; J < CollCount (&Imp->RefLines); ++J) { const LineInfo* LI = CollConstAt (&Imp->RefLines, J); fprintf (stderr, - " %s:%u: Error: Unresolved external '%s'\n", + "%s:%u: Error: Unresolved external '%s'\n", GetSourceName (LI), GetSourceLine (LI), name); From 93762a2117760b97391c26f8f926a2a69cf921e5 Mon Sep 17 00:00:00 2001 From: Andrea Odetti <mariofutire@gmail.com> Date: Tue, 11 May 2021 13:54:36 +0100 Subject: [PATCH 0849/2710] ld65: move 2 more cases to the notation file:line. --- src/ld65/exports.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ld65/exports.c b/src/ld65/exports.c index 6580033fb..bb66ab2ce 100644 --- a/src/ld65/exports.c +++ b/src/ld65/exports.c @@ -166,7 +166,7 @@ Import* ReadImport (FILE* F, ObjData* Obj) */ if (ObjHasFiles (I->Obj)) { const LineInfo* LI = GetImportPos (I); - Error ("Invalid import size in for '%s', imported from %s(%u): 0x%02X", + Error ("Invalid import size in for '%s', imported from %s:%u: 0x%02X", GetString (I->Name), GetSourceName (LI), GetSourceLine (LI), @@ -1057,7 +1057,7 @@ void CircularRefError (const Export* E) /* Print an error about a circular reference using to define the given export */ { const LineInfo* LI = GetExportPos (E); - Error ("Circular reference for symbol '%s', %s(%u)", + Error ("Circular reference for symbol '%s', %s:%u", GetString (E->Name), GetSourceName (LI), GetSourceLine (LI)); From 05f545e18924a5fdea21d0d25b5462013847b2bd Mon Sep 17 00:00:00 2001 From: Andrea Odetti <mariofutire@gmail.com> Date: Tue, 11 May 2021 16:32:43 +0100 Subject: [PATCH 0850/2710] More line number related changes. --- libsrc/common/_afailed.c | 2 +- src/ld65/exports.c | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libsrc/common/_afailed.c b/libsrc/common/_afailed.c index ad50a8750..ab8b94ca6 100644 --- a/libsrc/common/_afailed.c +++ b/libsrc/common/_afailed.c @@ -15,6 +15,6 @@ void __fastcall__ _afailed (char* file, unsigned line) { raise (SIGABRT); - fprintf (stderr, "ASSERTION FAILED IN %s(%u)\n", file, line); + fprintf (stderr, "ASSERTION FAILED IN %s:%u\n", file, line); exit (EXIT_ASSERT); } diff --git a/src/ld65/exports.c b/src/ld65/exports.c index bb66ab2ce..35de5c8f2 100644 --- a/src/ld65/exports.c +++ b/src/ld65/exports.c @@ -690,12 +690,12 @@ static void CheckSymType (const Export* E) */ if (E->Obj) { /* The export comes from an object file */ - SB_Printf (&ExportLoc, "%s, %s(%u)", + SB_Printf (&ExportLoc, "%s, %s:%u", GetString (E->Obj->Name), GetSourceName (ExportLI), GetSourceLine (ExportLI)); } else if (ExportLI) { - SB_Printf (&ExportLoc, "%s(%u)", + SB_Printf (&ExportLoc, "%s:%u", GetSourceName (ExportLI), GetSourceLine (ExportLI)); } else { @@ -706,7 +706,7 @@ static void CheckSymType (const Export* E) } if (I->Obj) { /* The import comes from an object file */ - SB_Printf (&ImportLoc, "%s, %s(%u)", + SB_Printf (&ImportLoc, "%s, %s:%u", GetString (I->Obj->Name), GetSourceName (ImportLI), GetSourceLine (ImportLI)); @@ -714,7 +714,7 @@ static void CheckSymType (const Export* E) /* The import is linker generated and we have line ** information */ - SB_Printf (&ImportLoc, "%s(%u)", + SB_Printf (&ImportLoc, "%s:%u", GetSourceName (ImportLI), GetSourceLine (ImportLI)); } else { @@ -995,7 +995,7 @@ void PrintImportMap (FILE* F) const LineInfo* LI = GetImportPos (Imp); if (LI) { fprintf (F, - " %-25s %s(%u)\n", + " %-25s %s:%u\n", GetObjFileName (Imp->Obj), GetSourceName (LI), GetSourceLine (LI)); From f09ffb2a45e38338348ccd44cb36a5a9de63d614 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Wed, 12 May 2021 01:08:13 +0100 Subject: [PATCH 0851/2710] symNotepad.c --- doc/sym1.sgml | 1 + samples/symNotepad.c | 198 +++++++++++++++++++++++++++++ samples/tutorial/sym1/symNotepad.c | 198 +++++++++++++++++++++++++++++ 3 files changed, 397 insertions(+) create mode 100644 samples/symNotepad.c create mode 100644 samples/tutorial/sym1/symNotepad.c diff --git a/doc/sym1.sgml b/doc/sym1.sgml index d02e3b1b1..f04f36ae1 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -113,6 +113,7 @@ All the samples will run on the "stock" 4k Sym-1, except for symio.c, <item>symTiny does the same as symhello, but does it with puts() rather than printf() to show the difference in compiled binary size.</item> <item>symDisplay allows entry of a message, which is then displayed by scrolling it across the front panel display.</item> <item>symIO allows access to the Sym-1 digital I/O ports.</item> +<item>symNotepad is a simple text entry/retrieval program that uses tape storage.</item> </itemize> <sect>License<p> diff --git a/samples/symNotepad.c b/samples/symNotepad.c new file mode 100644 index 000000000..e9866e526 --- /dev/null +++ b/samples/symNotepad.c @@ -0,0 +1,198 @@ +// -------------------------------------------------------------------------- +// Sym-1 Notepad +// +// Wayne Parham +// +// wayne@parhamdata.com +// -------------------------------------------------------------------------- +// +// Note: This program requires RAM memory in locations 0xE000 - 0xEFFF +// Alternatively, the tape I/O buffer location and size can be +// changed by altering the defined TAPIO values below. +// +// -------------------------------------------------------------------------- + +#include <symio.h>; +#include <stdlib.h>; +#include <string.h>; + +#define TAPIO_ADDRESS 0xE000 +#define TAPIO_MAX_SIZE 0x0FFF + +void main(void) { + char c = 0x00; + int l = 0x00; + int p = 0x00; + int error = 0x00; + int running = 0x01; + int writing = 0x01; + int instruction_needed = 0x01; + int heap_size = 0x00; + char* tapio = (char*) TAPIO_ADDRESS; + char* buffer; + + heap_size = _heapmaxavail(); + + if( heap_size > TAPIO_MAX_SIZE ) { // No need to malloc more than + heap_size = TAPIO_MAX_SIZE; // the interface allows + } + + buffer = malloc( heap_size ); + memset( buffer, 0x00, heap_size ); + + if( buffer == 0x00 ) { + puts( "Memory full." ); + running = 0; + } + + tapio[0] = 0x00; // Check tape interface memory + if( tapio[0] != 0x00 ) + error = 1; + + tapio[0] = 0xFF; + if( tapio[0] != 0xFF ) + error = 1; + + tapio[TAPIO_MAX_SIZE] = 0x00; + if( tapio[TAPIO_MAX_SIZE] != 0x00 ) + error = 1; + + tapio[TAPIO_MAX_SIZE] = 0xFF; + if( tapio[TAPIO_MAX_SIZE] != 0xFF ) + error = 1; + + if( error ) { + printf( "\nNo memory at location %p, aborting.\n", tapio ); + running = 0; + } + else { + memset( tapio, 0, TAPIO_MAX_SIZE ); + } + + + while( running ) { + + putchar( '\r' ); + for( l = 0; l < 25; l++ ) { + putchar( '\n' ); + } + + puts( "===================== Sym-1 Notepad ====================" ); + + if( instruction_needed ) { + puts( "Enter text and you can save it to tape for reloading" ); + puts( "later. There are four special 'command' characters:\n" ); + puts( " Control-S Save to tape" ); + puts( " Control-L Load from tape" ); + puts( " Control-C Clear memory" ); + puts( " Control-X Exit" ); + puts( "========================================================\n" ); + } + + while( writing ) { + + c = getchar(); + + if( c == 0x08 ) { // Backspace + if( p > 0 ) { + buffer[p] = 0x00; + p--; + } + } + else if( c == 0x13 ) { // Save + puts( "\n========================= Save =========================" ); + puts( "\nPress any key to save." ); + c = getchar(); + for( l = 0; l <= p; l++ ) { + tapio[l] = buffer[l]; + } + l++; + tapio[l] = 0x00; + puts( "Saving to tape." ); + error = dumpt( 'N', (int) tapio, (int) tapio+p ); + if( error ) { + puts( "\nTape error." ); + } + else + { + putchar( '\r' ); + for( l = 0; l < 25; l++ ) { + putchar( '\n' ); + } + } + puts( "===================== Sym-1 Notepad ====================\n" ); + for( l = 0; l <= p; l++ ) { + putchar( buffer[l] ); + if( buffer[l] == '\r' ) { + putchar( '\n' ); + } + } + } + else if( c == 0x0C ) { // Load + p = 0; + puts( "\nLoading from tape." ); + memset( buffer, 0, heap_size ); + memset( tapio, 0, TAPIO_MAX_SIZE ); + error = loadt( 'N' ); + if( error ) { + puts( "\nTape error." ); + puts( "===================== Sym-1 Notepad ====================\n" ); + } + else + { + for( l = 0; l <= heap_size; l++ ) { + buffer[l] = tapio[l]; + } + + p = strlen( buffer ); + + putchar( '\r' ); + for( l = 0; l < 25; l++ ) { + putchar( '\n' ); + } + puts( "===================== Sym-1 Notepad ====================\n" ); + + for( l = 0; l <= p; l++ ) { + putchar( buffer[l] ); + if( buffer[l] == '\r' ) { + putchar( '\n' ); + } + } + } + } + else if( c == 0x03 ) { // Clear + p = 0; + memset( buffer, 0, heap_size ); + putchar( '\r' ); + for( l = 0; l < 25; l++ ) { + putchar( '\n' ); + } + puts( "===================== Sym-1 Notepad ====================\n" ); + } + else if( c == 0x18 ) { // Exit + writing = 0; + running = 0; + } + else { + if( p >= heap_size - 1 ) { + puts( "\n========================= End =========================" ); + puts( "Buffer full." ); + } + else { + if( c == '\r' ) { + putchar( '\n' ); + } + buffer[p] = c; + putchar( c ); + } + p++; + } + } + } + + free( buffer ); + + puts( "\nEnjoy your day!\n" ); + + return; +} diff --git a/samples/tutorial/sym1/symNotepad.c b/samples/tutorial/sym1/symNotepad.c new file mode 100644 index 000000000..e9866e526 --- /dev/null +++ b/samples/tutorial/sym1/symNotepad.c @@ -0,0 +1,198 @@ +// -------------------------------------------------------------------------- +// Sym-1 Notepad +// +// Wayne Parham +// +// wayne@parhamdata.com +// -------------------------------------------------------------------------- +// +// Note: This program requires RAM memory in locations 0xE000 - 0xEFFF +// Alternatively, the tape I/O buffer location and size can be +// changed by altering the defined TAPIO values below. +// +// -------------------------------------------------------------------------- + +#include <symio.h>; +#include <stdlib.h>; +#include <string.h>; + +#define TAPIO_ADDRESS 0xE000 +#define TAPIO_MAX_SIZE 0x0FFF + +void main(void) { + char c = 0x00; + int l = 0x00; + int p = 0x00; + int error = 0x00; + int running = 0x01; + int writing = 0x01; + int instruction_needed = 0x01; + int heap_size = 0x00; + char* tapio = (char*) TAPIO_ADDRESS; + char* buffer; + + heap_size = _heapmaxavail(); + + if( heap_size > TAPIO_MAX_SIZE ) { // No need to malloc more than + heap_size = TAPIO_MAX_SIZE; // the interface allows + } + + buffer = malloc( heap_size ); + memset( buffer, 0x00, heap_size ); + + if( buffer == 0x00 ) { + puts( "Memory full." ); + running = 0; + } + + tapio[0] = 0x00; // Check tape interface memory + if( tapio[0] != 0x00 ) + error = 1; + + tapio[0] = 0xFF; + if( tapio[0] != 0xFF ) + error = 1; + + tapio[TAPIO_MAX_SIZE] = 0x00; + if( tapio[TAPIO_MAX_SIZE] != 0x00 ) + error = 1; + + tapio[TAPIO_MAX_SIZE] = 0xFF; + if( tapio[TAPIO_MAX_SIZE] != 0xFF ) + error = 1; + + if( error ) { + printf( "\nNo memory at location %p, aborting.\n", tapio ); + running = 0; + } + else { + memset( tapio, 0, TAPIO_MAX_SIZE ); + } + + + while( running ) { + + putchar( '\r' ); + for( l = 0; l < 25; l++ ) { + putchar( '\n' ); + } + + puts( "===================== Sym-1 Notepad ====================" ); + + if( instruction_needed ) { + puts( "Enter text and you can save it to tape for reloading" ); + puts( "later. There are four special 'command' characters:\n" ); + puts( " Control-S Save to tape" ); + puts( " Control-L Load from tape" ); + puts( " Control-C Clear memory" ); + puts( " Control-X Exit" ); + puts( "========================================================\n" ); + } + + while( writing ) { + + c = getchar(); + + if( c == 0x08 ) { // Backspace + if( p > 0 ) { + buffer[p] = 0x00; + p--; + } + } + else if( c == 0x13 ) { // Save + puts( "\n========================= Save =========================" ); + puts( "\nPress any key to save." ); + c = getchar(); + for( l = 0; l <= p; l++ ) { + tapio[l] = buffer[l]; + } + l++; + tapio[l] = 0x00; + puts( "Saving to tape." ); + error = dumpt( 'N', (int) tapio, (int) tapio+p ); + if( error ) { + puts( "\nTape error." ); + } + else + { + putchar( '\r' ); + for( l = 0; l < 25; l++ ) { + putchar( '\n' ); + } + } + puts( "===================== Sym-1 Notepad ====================\n" ); + for( l = 0; l <= p; l++ ) { + putchar( buffer[l] ); + if( buffer[l] == '\r' ) { + putchar( '\n' ); + } + } + } + else if( c == 0x0C ) { // Load + p = 0; + puts( "\nLoading from tape." ); + memset( buffer, 0, heap_size ); + memset( tapio, 0, TAPIO_MAX_SIZE ); + error = loadt( 'N' ); + if( error ) { + puts( "\nTape error." ); + puts( "===================== Sym-1 Notepad ====================\n" ); + } + else + { + for( l = 0; l <= heap_size; l++ ) { + buffer[l] = tapio[l]; + } + + p = strlen( buffer ); + + putchar( '\r' ); + for( l = 0; l < 25; l++ ) { + putchar( '\n' ); + } + puts( "===================== Sym-1 Notepad ====================\n" ); + + for( l = 0; l <= p; l++ ) { + putchar( buffer[l] ); + if( buffer[l] == '\r' ) { + putchar( '\n' ); + } + } + } + } + else if( c == 0x03 ) { // Clear + p = 0; + memset( buffer, 0, heap_size ); + putchar( '\r' ); + for( l = 0; l < 25; l++ ) { + putchar( '\n' ); + } + puts( "===================== Sym-1 Notepad ====================\n" ); + } + else if( c == 0x18 ) { // Exit + writing = 0; + running = 0; + } + else { + if( p >= heap_size - 1 ) { + puts( "\n========================= End =========================" ); + puts( "Buffer full." ); + } + else { + if( c == '\r' ) { + putchar( '\n' ); + } + buffer[p] = c; + putchar( c ); + } + p++; + } + } + } + + free( buffer ); + + puts( "\nEnjoy your day!\n" ); + + return; +} From 5d198d6842c5183ed03f25e517e74607b1f9b4ec Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Wed, 12 May 2021 05:05:39 -0400 Subject: [PATCH 0852/2710] Fixed some URL links in a couple of documents. --- doc/cc65.sgml | 4 ++-- doc/funcref.sgml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 56a87ae72..004061518 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1391,9 +1391,9 @@ parameter with the <tt/#pragma/. in their prototypes). The identifier is an 8-bit number that's set into <tt/tmp4/. If the identifier - is "bank", then a <tt><url url="ca65.html#.BANK" name=".bank"></tt> operator will be used + is "bank", then ca65's <tt><url url="ca65.html#.BANK" name=".bank"></tt> function will be used to determine the number from the bank attribute defined in the linker config, - see <htmlurl url="ld65.html#MEMORY" name="Other MEMORY area attributes">. Note that + see <url url="ld65.html#MEMORY" name="Other MEMORY area attributes">. Note that this currently implies that only the least significant 8 bits of the bank attribute can be used. diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 3b3db2e09..4d1a278b0 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -5186,7 +5186,7 @@ the module just loaded. Possible error codes are: <item><tt/MLOAD_ERR_MEM/ - Not enough memory </itemize> <tag/Notes/<itemize> -<item>The <htmlurl url="ld65.html" name="ld65"> linker is needed to create +<item>The <url url="ld65.html" name="ld65 linker"> is needed to create relocatable o65 modules for use with this function. <item>The function is available only as a fastcall function; so, it may be used only in the presence of a prototype. From af4c4f6aaf8e2eb93249d6fa9418cc5d62c87ad9 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Wed, 12 May 2021 19:43:32 -0400 Subject: [PATCH 0853/2710] Removed a "return" keyword from an inline function that must return (void). --- src/cc65/codeent.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/codeent.h b/src/cc65/codeent.h index bd542cc4c..ee1dd0220 100644 --- a/src/cc65/codeent.h +++ b/src/cc65/codeent.h @@ -184,7 +184,7 @@ INLINE CodeLabel* CE_GetLabel (CodeEntry* E, unsigned Index) INLINE void CE_ReplaceLabel (CodeEntry* E, CodeLabel* L, unsigned Index) /* Replace the code label at the specified index with L */ { - return CollReplace (&E->Labels, L, Index); + CollReplace (&E->Labels, L, Index); } #else # define CE_ReplaceLabel(E, L, Index) CollReplace (&(E)->Labels, (L), (Index)) From e5813cfb1ab7069c063d0a1a8a9fd14e58a3a1a9 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 13 May 2021 00:24:32 -0400 Subject: [PATCH 0854/2710] Removed two duplicate TYPEDEFs from a header. The first one is replaced by an #include of the header that has its original TYPEDEF. The second one is replaced by its base type. That change allows pedantic C90-compliant compilers to accept the header. --- src/cc65/codeoptutil.c | 2 +- src/cc65/datatype.c | 4 ++-- src/cc65/datatype.h | 24 +++++++++++------------- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/cc65/codeoptutil.c b/src/cc65/codeoptutil.c index 23c759fd1..16c41162a 100644 --- a/src/cc65/codeoptutil.c +++ b/src/cc65/codeoptutil.c @@ -1447,7 +1447,7 @@ void AdjustEntryIndices (Collection* Indices, int Index, int Change) } else if (Index <= *IndexPtr) { /* Has been removed */ *IndexPtr = -1; - //CollDelete (Indices, I); + /*CollDelete (Indices, I);*/ --I; } } diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 9e52027ce..90bf892ba 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1242,7 +1242,7 @@ const Type* GetBaseElementType (const Type* T) -SymEntry* GetESUSymEntry (const Type* T) +struct SymEntry* GetESUSymEntry (const Type* T) /* Return a SymEntry pointer from an enum/struct/union type */ { /* Only enums, structs or unions have a SymEntry attribute */ @@ -1254,7 +1254,7 @@ SymEntry* GetESUSymEntry (const Type* T) -void SetESUSymEntry (Type* T, SymEntry* S) +void SetESUSymEntry (Type* T, struct SymEntry* S) /* Set the SymEntry pointer for an enum/struct/union type */ { /* Only enums, structs or unions have a SymEntry attribute */ diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 1140ee498..af1c6b8e4 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -45,6 +45,9 @@ #include "inline.h" #include "mmodel.h" +/* cc65 */ +#include "funcdesc.h" + /*****************************************************************************/ @@ -53,8 +56,8 @@ -typedef struct FuncDesc FuncDesc; -typedef struct SymEntry SymEntry; +struct StrBuf; +struct SymEntry; @@ -162,12 +165,12 @@ typedef unsigned long TypeCode; /* Type entry */ typedef struct Type Type; struct Type { - TypeCode C; /* Code for this entry */ + TypeCode C; /* Code for this entry */ union { - FuncDesc* F; /* Function description pointer */ - SymEntry* S; /* Enum/struct/union tag symbol entry pointer */ - long L; /* Numeric attribute value */ - unsigned long U; /* Dito, unsigned */ + struct FuncDesc* F; /* Function description pointer */ + struct SymEntry* S; /* Enum/struct/union tag symbol entry pointer */ + long L; /* Numeric attribute value */ + unsigned long U; /* Dito, unsigned */ } A; /* Type attribute if necessary */ }; @@ -221,11 +224,6 @@ extern const Type type_c_char_p[]; extern const Type type_void_p[]; extern const Type type_c_void_p[]; -/* Forward for the SymEntry struct */ -struct SymEntry; - -/* Forward for the StrBuf struct */ -struct StrBuf; /*****************************************************************************/ @@ -849,7 +847,7 @@ int IsVariadicFunc (const Type* T) attribute ((const)); */ int IsFastcallFunc (const Type* T) attribute ((const)); -/* Return true if this is a function type or pointer to function type by +/* Return true if this is a function type or pointer to function type with ** __fastcall__ calling convention. ** Check fails if the type is not a function or a pointer to function. */ From 09e0e7412467419a680b98f9b8cbe95fef7adeef Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Thu, 13 May 2021 18:12:12 +0200 Subject: [PATCH 0855/2710] (again) remove TABs --- libsrc/telestrat/syschdir.s | 2 +- test/val/bug1397.c | 43 ++++++++++++++++++------------------- test/val/bug1451.c | 2 +- 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index 149957215..09763bdbb 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -21,7 +21,7 @@ __syschdir: ; Get name jsr popax - + stx tmp1 ldy tmp1 diff --git a/test/val/bug1397.c b/test/val/bug1397.c index 4f8fb8697..191093efa 100644 --- a/test/val/bug1397.c +++ b/test/val/bug1397.c @@ -7,49 +7,48 @@ unsigned char c; int *p; void f1(void) { - int i = 1; - int *pa = (int *)0xaaaa; - int *pb = (int *)0xbbbb; + int i = 1; + int *pa = (int *)0xaaaa; + int *pb = (int *)0xbbbb; - p = (i == 0) ? pa : pb; - c = 0x5a; + p = (i == 0) ? pa : pb; + c = 0x5a; } struct data_t { - unsigned char c; - int *p; + unsigned char c; + int *p; }; struct data_t data; void f2(void) { - int i = 1; - int *pa = (int *)0xcccc; - int *pb = (int *)0xdddd; - struct data_t *po = &data; - - po->p = (i == 0) ? pa : pb; - po->c = 0xa5; + int i = 1; + int *pa = (int *)0xcccc; + int *pb = (int *)0xdddd; + struct data_t *po = &data; + + po->p = (i == 0) ? pa : pb; + po->c = 0xa5; } int ret = 0; int main(void) { - f1(); + f1(); if (c != 0x5a) { ret++; } - printf("c: %hhx\n", c); - printf("p: %p\n", p); - f2(); + printf("c: %hhx\n", c); + printf("p: %p\n", p); + f2(); if (data.c != 0xa5) { ret++; } - printf("c: %hhx\n", data.c); - printf("p: %p\n", data.p); + printf("c: %hhx\n", data.c); + printf("p: %p\n", data.p); - printf("failures: %d\n", ret); + printf("failures: %d\n", ret); return ret; } - diff --git a/test/val/bug1451.c b/test/val/bug1451.c index c00f19903..f9cca2561 100644 --- a/test/val/bug1451.c +++ b/test/val/bug1451.c @@ -15,7 +15,7 @@ int main(void) S b = {1, 4}; S m[1] = {{6, 3}}; S *p = &a; - + (&a)->a += b.a; p->b += b.b; m->a += b.a; From 321bac417845f589492182af522144aa821cb94f Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Thu, 13 May 2021 14:43:16 -0500 Subject: [PATCH 0856/2710] Remove TAB characters --- cfg/sym1-32k.cfg | 8 ++++---- cfg/sym1-4k.cfg | 8 ++++---- cfg/sym1.cfg | 8 ++++---- samples/symDisplay.c | 19 ++++++++++--------- samples/symIO.c | 2 +- samples/symNotepad.c | 7 ++++--- samples/tutorial/sym1/symDisplay.c | 19 ++++++++++--------- samples/tutorial/sym1/symIO.c | 2 +- samples/tutorial/sym1/symNotepad.c | 7 ++++--- 9 files changed, 42 insertions(+), 38 deletions(-) diff --git a/cfg/sym1-32k.cfg b/cfg/sym1-32k.cfg index 14ddfb98f..0665c8cf2 100644 --- a/cfg/sym1-32k.cfg +++ b/cfg/sym1-32k.cfg @@ -22,10 +22,10 @@ SYMBOLS { } MEMORY { - ZP: start = $0000, size = $00F7, define = yes, file = %O; + ZP: start = $0000, size = $00F7, define = yes, file = %O; CPUSTACK: start = $0100, size = $0100, define = yes; RAM: start = %S, size = $8000 - %S - __STACKSIZE__, define = yes, file = %O; - MONROM: start = $8000, size = $1000, define = yes; + MONROM: start = $8000, size = $1000, define = yes; EXT: start = $9000, size = $1000, define = yes; IO: start = $A000, size = $1000, define = yes; RAE1: start = $B000, size = $1000, define = yes; @@ -35,8 +35,8 @@ MEMORY { } SEGMENTS { - ZEROPAGE: load = ZP, type = zp, define = yes; - STARTUP: load = RAM, type = ro, define = yes; + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; CODE: load = RAM, type = ro, define = yes; RODATA: load = RAM, type = ro, define = yes; ONCE: load = RAM, type = ro, define = yes; diff --git a/cfg/sym1-4k.cfg b/cfg/sym1-4k.cfg index 240d7bc82..de1be0b8a 100644 --- a/cfg/sym1-4k.cfg +++ b/cfg/sym1-4k.cfg @@ -22,10 +22,10 @@ SYMBOLS { } MEMORY { - ZP: start = $0000, size = $00F7, define = yes, file = %O; + ZP: start = $0000, size = $00F7, define = yes, file = %O; CPUSTACK: start = $0100, size = $0100, define = yes; RAM: start = %S, size = $1000 - %S - __STACKSIZE__, define = yes, file = %O; - MONROM: start = $8000, size = $1000, define = yes; + MONROM: start = $8000, size = $1000, define = yes; EXT: start = $9000, size = $1000, define = yes; IO: start = $A000, size = $1000, define = yes; RAE1: start = $B000, size = $1000, define = yes; @@ -35,8 +35,8 @@ MEMORY { } SEGMENTS { - ZEROPAGE: load = ZP, type = zp, define = yes; - STARTUP: load = RAM, type = ro, define = yes; + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; CODE: load = RAM, type = ro, define = yes; RODATA: load = RAM, type = ro, define = yes; ONCE: load = RAM, type = ro, define = yes; diff --git a/cfg/sym1.cfg b/cfg/sym1.cfg index 240d7bc82..de1be0b8a 100644 --- a/cfg/sym1.cfg +++ b/cfg/sym1.cfg @@ -22,10 +22,10 @@ SYMBOLS { } MEMORY { - ZP: start = $0000, size = $00F7, define = yes, file = %O; + ZP: start = $0000, size = $00F7, define = yes, file = %O; CPUSTACK: start = $0100, size = $0100, define = yes; RAM: start = %S, size = $1000 - %S - __STACKSIZE__, define = yes, file = %O; - MONROM: start = $8000, size = $1000, define = yes; + MONROM: start = $8000, size = $1000, define = yes; EXT: start = $9000, size = $1000, define = yes; IO: start = $A000, size = $1000, define = yes; RAE1: start = $B000, size = $1000, define = yes; @@ -35,8 +35,8 @@ MEMORY { } SEGMENTS { - ZEROPAGE: load = ZP, type = zp, define = yes; - STARTUP: load = RAM, type = ro, define = yes; + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; CODE: load = RAM, type = ro, define = yes; RODATA: load = RAM, type = ro, define = yes; ONCE: load = RAM, type = ro, define = yes; diff --git a/samples/symDisplay.c b/samples/symDisplay.c index 41eaf8b49..8a72d5863 100644 --- a/samples/symDisplay.c +++ b/samples/symDisplay.c @@ -43,7 +43,7 @@ void main (void) { if( (c >= '0') && (c <= '9') ) { // between 1 and 9 loops allowed z = 1; // a number was pressed t = c - '0'; // convert char to int - puts( "\n\nLook at the front panel.\n" ); + puts( "\n\nLook at the front panel.\n" ); } else { puts( "\nWhat?" ); @@ -185,7 +185,7 @@ void main (void) { set_D3( get_D4() ); set_D4( get_D5() ); set_D5( get_D6() ); - set_D6( DISP_M_1 ); + set_D6( DISP_M_1 ); for( d = 0; d < flashes ; d++ ) { fdisp(); // Display } @@ -198,7 +198,7 @@ void main (void) { set_D3( get_D4() ); set_D4( get_D5() ); set_D5( get_D6() ); - set_D6( DISP_M_1 ); + set_D6( DISP_M_1 ); for( d = 0; d < flashes ; d++ ) { fdisp(); // Display } @@ -259,7 +259,7 @@ void main (void) { set_D3( get_D4() ); set_D4( get_D5() ); set_D5( get_D6() ); - set_D6( DISP_M_1 ); + set_D6( DISP_M_1 ); for( d = 0; d < flashes ; d++ ) { fdisp(); // Display } @@ -272,7 +272,7 @@ void main (void) { set_D3( get_D4() ); set_D4( get_D5() ); set_D5( get_D6() ); - set_D6( DISP_M_1 ); + set_D6( DISP_M_1 ); for( d = 0; d < flashes ; d++ ) { fdisp(); // Display } @@ -285,7 +285,7 @@ void main (void) { set_D3( get_D4() ); set_D4( get_D5() ); set_D5( get_D6() ); - set_D6( DISP_M_1 ); + set_D6( DISP_M_1 ); for( d = 0; d < flashes ; d++ ) { fdisp(); // Display } @@ -298,7 +298,7 @@ void main (void) { set_D3( get_D4() ); set_D4( get_D5() ); set_D5( get_D6() ); - set_D6( DISP_M_1 ); + set_D6( DISP_M_1 ); for( d = 0; d < flashes ; d++ ) { fdisp(); // Display } @@ -344,10 +344,10 @@ void main (void) { set_D6( DISP_BACKSLASH ); break; default: - displayable = 0; // Character not mapped + displayable = 0; // Character not mapped } - if( displayable ) { + if( displayable ) { putchar( buffer[l] ); // Send it to the console @@ -382,3 +382,4 @@ void main (void) { return; } + diff --git a/samples/symIO.c b/samples/symIO.c index c52a71b11..d887c18b9 100644 --- a/samples/symIO.c +++ b/samples/symIO.c @@ -66,7 +66,7 @@ void main(void) { puts( "instructions again and type 'stop' to end the program.\n"); puts( "Available registers: DDR1A, IOR1A, DDR1B, IOR1B, DDR2A" ); puts( "IOR2A, DDR2B, IOR2B, DDR3A, IOR3A, DDR3B and IOR3B." ); - instr = 0; + instr = 0; } printf( "\n Command: " ); diff --git a/samples/symNotepad.c b/samples/symNotepad.c index e9866e526..bc28ef4b5 100644 --- a/samples/symNotepad.c +++ b/samples/symNotepad.c @@ -99,21 +99,21 @@ void main(void) { p--; } } - else if( c == 0x13 ) { // Save + else if( c == 0x13 ) { // Save puts( "\n========================= Save =========================" ); puts( "\nPress any key to save." ); c = getchar(); for( l = 0; l <= p; l++ ) { tapio[l] = buffer[l]; } - l++; + l++; tapio[l] = 0x00; puts( "Saving to tape." ); error = dumpt( 'N', (int) tapio, (int) tapio+p ); if( error ) { puts( "\nTape error." ); } - else + else { putchar( '\r' ); for( l = 0; l < 25; l++ ) { @@ -196,3 +196,4 @@ void main(void) { return; } + diff --git a/samples/tutorial/sym1/symDisplay.c b/samples/tutorial/sym1/symDisplay.c index 41eaf8b49..8a72d5863 100644 --- a/samples/tutorial/sym1/symDisplay.c +++ b/samples/tutorial/sym1/symDisplay.c @@ -43,7 +43,7 @@ void main (void) { if( (c >= '0') && (c <= '9') ) { // between 1 and 9 loops allowed z = 1; // a number was pressed t = c - '0'; // convert char to int - puts( "\n\nLook at the front panel.\n" ); + puts( "\n\nLook at the front panel.\n" ); } else { puts( "\nWhat?" ); @@ -185,7 +185,7 @@ void main (void) { set_D3( get_D4() ); set_D4( get_D5() ); set_D5( get_D6() ); - set_D6( DISP_M_1 ); + set_D6( DISP_M_1 ); for( d = 0; d < flashes ; d++ ) { fdisp(); // Display } @@ -198,7 +198,7 @@ void main (void) { set_D3( get_D4() ); set_D4( get_D5() ); set_D5( get_D6() ); - set_D6( DISP_M_1 ); + set_D6( DISP_M_1 ); for( d = 0; d < flashes ; d++ ) { fdisp(); // Display } @@ -259,7 +259,7 @@ void main (void) { set_D3( get_D4() ); set_D4( get_D5() ); set_D5( get_D6() ); - set_D6( DISP_M_1 ); + set_D6( DISP_M_1 ); for( d = 0; d < flashes ; d++ ) { fdisp(); // Display } @@ -272,7 +272,7 @@ void main (void) { set_D3( get_D4() ); set_D4( get_D5() ); set_D5( get_D6() ); - set_D6( DISP_M_1 ); + set_D6( DISP_M_1 ); for( d = 0; d < flashes ; d++ ) { fdisp(); // Display } @@ -285,7 +285,7 @@ void main (void) { set_D3( get_D4() ); set_D4( get_D5() ); set_D5( get_D6() ); - set_D6( DISP_M_1 ); + set_D6( DISP_M_1 ); for( d = 0; d < flashes ; d++ ) { fdisp(); // Display } @@ -298,7 +298,7 @@ void main (void) { set_D3( get_D4() ); set_D4( get_D5() ); set_D5( get_D6() ); - set_D6( DISP_M_1 ); + set_D6( DISP_M_1 ); for( d = 0; d < flashes ; d++ ) { fdisp(); // Display } @@ -344,10 +344,10 @@ void main (void) { set_D6( DISP_BACKSLASH ); break; default: - displayable = 0; // Character not mapped + displayable = 0; // Character not mapped } - if( displayable ) { + if( displayable ) { putchar( buffer[l] ); // Send it to the console @@ -382,3 +382,4 @@ void main (void) { return; } + diff --git a/samples/tutorial/sym1/symIO.c b/samples/tutorial/sym1/symIO.c index c52a71b11..d887c18b9 100644 --- a/samples/tutorial/sym1/symIO.c +++ b/samples/tutorial/sym1/symIO.c @@ -66,7 +66,7 @@ void main(void) { puts( "instructions again and type 'stop' to end the program.\n"); puts( "Available registers: DDR1A, IOR1A, DDR1B, IOR1B, DDR2A" ); puts( "IOR2A, DDR2B, IOR2B, DDR3A, IOR3A, DDR3B and IOR3B." ); - instr = 0; + instr = 0; } printf( "\n Command: " ); diff --git a/samples/tutorial/sym1/symNotepad.c b/samples/tutorial/sym1/symNotepad.c index e9866e526..bc28ef4b5 100644 --- a/samples/tutorial/sym1/symNotepad.c +++ b/samples/tutorial/sym1/symNotepad.c @@ -99,21 +99,21 @@ void main(void) { p--; } } - else if( c == 0x13 ) { // Save + else if( c == 0x13 ) { // Save puts( "\n========================= Save =========================" ); puts( "\nPress any key to save." ); c = getchar(); for( l = 0; l <= p; l++ ) { tapio[l] = buffer[l]; } - l++; + l++; tapio[l] = 0x00; puts( "Saving to tape." ); error = dumpt( 'N', (int) tapio, (int) tapio+p ); if( error ) { puts( "\nTape error." ); } - else + else { putchar( '\r' ); for( l = 0; l < 25; l++ ) { @@ -196,3 +196,4 @@ void main(void) { return; } + From dfba8d77ca84bb651276aa01f58ca63f61c00f7a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 30 Aug 2020 01:31:23 +0800 Subject: [PATCH 0857/2710] Error messages shouldn't raise warnings about unused expressions by themselves. --- src/cc65/expr.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 01bebf18e..a63214f49 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1301,6 +1301,7 @@ static void Primary (ExprDesc* E) /* Statement block */ NextToken (); Error ("Expression expected"); + E->Flags |= E_EVAL_MAYBE_UNUSED; hie0 (E); if (CurTok.Tok == TOK_RCURLY) { NextToken (); @@ -1332,6 +1333,7 @@ static void Primary (ExprDesc* E) } } else { Error ("Expression expected"); + E->Flags |= E_EVAL_MAYBE_UNUSED; NextToken (); } } From 18ae09f6821b3ed15121220100023b70ae393e30 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 14 Mar 2021 03:39:05 +0800 Subject: [PATCH 0858/2710] Less excessive errors with failed array declarations. --- src/cc65/compile.c | 5 ++--- src/cc65/declare.c | 2 +- src/cc65/locals.c | 3 +-- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index f970edef7..94dfc3ffb 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -156,9 +156,8 @@ static void Parse (void) ** ** This means that "extern int i;" will not get storage allocated. */ - if ((Decl.StorageClass & SC_FUNC) != SC_FUNC && - (Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF && - (Decl.StorageClass & SC_FICTITIOUS) != SC_FICTITIOUS) { + if ((Decl.StorageClass & SC_FUNC) != SC_FUNC && + (Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { if ((Spec.Flags & DS_DEF_STORAGE) != 0 || (Decl.StorageClass & (SC_EXTERN|SC_STATIC)) == SC_STATIC || ((Decl.StorageClass & SC_EXTERN) != 0 && diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 8879c46d8..a18c837b9 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2080,7 +2080,7 @@ void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode) if (PrevErrorCount != ErrorCount) { /* Make the declaration fictitious if is is not parsed correctly */ - D->StorageClass |= SC_DECL | SC_FICTITIOUS; + D->StorageClass |= SC_FICTITIOUS; if (Mode == DM_NEED_IDENT && D->Ident[0] == '\0') { /* Use a fictitious name for the identifier if it is missing */ diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 7812acebd..c2e314485 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -476,8 +476,7 @@ static void ParseOneDecl (const DeclSpec* Spec) } /* If the symbol is not marked as external, it will be defined now */ - if ((Decl.StorageClass & SC_FICTITIOUS) == 0 && - (Decl.StorageClass & SC_DECL) == 0 && + if ((Decl.StorageClass & SC_DECL) == 0 && (Decl.StorageClass & SC_EXTERN) == 0) { Decl.StorageClass |= SC_DEF; } From 86bd6b9addc7650560826e3c21c7b393567d3cc0 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 15 May 2021 19:48:19 +0200 Subject: [PATCH 0859/2710] Added executable list for all targets and print a message when certain samples are not available for a target (instead of failing). This makes "make SYS=<target>" in samples recursively work for all supported targets. --- samples/Makefile | 152 ++++++++++++++++++++++++++++++++++---- samples/geos/Makefile | 35 +++++++-- samples/geos/grc/Makefile | 29 ++++++-- samples/tutorial/Makefile | 48 +++++++++++- 4 files changed, 234 insertions(+), 30 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index 6e89cb802..e8b9824d8 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -159,21 +159,6 @@ DIRLIST = tutorial geos # -------------------------------------------------------------------------- # Lists of executables -EXELIST_c64 = \ - ascii \ - enumdevdir \ - fire \ - gunzip65 \ - hello \ - mandelbrot \ - mousedemo \ - multdemo \ - nachtm \ - ovrldemo \ - plasma \ - sieve \ - tgidemo - EXELIST_apple2 = \ ascii \ diodemo \ @@ -204,10 +189,141 @@ EXELIST_atarixl = $(EXELIST_atari) EXELIST_atari2600 = \ atari2600hello - + +EXELIST_atmos = \ + ascii \ + hello \ + mandelbrot \ + sieve + +EXELIST_bbc = \ + notavailable + +EXELIST_c64 = \ + ascii \ + enumdevdir \ + fire \ + gunzip65 \ + hello \ + mandelbrot \ + mousedemo \ + multdemo \ + nachtm \ + ovrldemo \ + plasma \ + sieve \ + tgidemo + +EXELIST_c128 = \ + ascii \ + enumdevdir \ + fire \ + gunzip65 \ + hello \ + mandelbrot \ + mousedemo \ + nachtm \ + plasma \ + sieve \ + tgidemo + +EXELIST_c16 = \ + ascii \ + enumdevdir \ + hello + +EXELIST_cbm510 = \ + ascii \ + fire \ + gunzip65 \ + hello \ + mousedemo \ + nachtm \ + plasma \ + sieve + +EXELIST_cbm610 = \ + ascii \ + gunzip65 \ + hello \ + nachtm \ + sieve + +EXELIST_creativision = \ + ascii \ + hello + +EXELIST_cx16 = \ + ascii \ + enumdevdir \ + gunzip65 \ + hello \ + mandelbrot \ + mousedemo \ + sieve \ + tgidemo + +EXELIST_gamate = \ + hello + +EXELIST_geos-cbm = \ + ascii \ + diodemo + +EXELIST_geos-apple = \ + ascii \ + diodemo + +EXELIST_lunix = \ + notavailable + +EXELIST_lynx = \ + notavailable + +EXELIST_nes = \ + hello + +EXELIST_osic1p = \ + notavailable + +EXELIST_pce = \ + hello + +EXELIST_pet = \ + ascii \ + enumdevdir \ + hello \ + sieve + +EXELIST_plus4 = \ + ascii \ + enumdevdir \ + gunzip65 \ + hello \ + plasma \ + sieve + +EXELIST_sim6502 = \ + gunzip65 + +EXELIST_sim65c02 = $(EXELIST_sim6502) + EXELIST_supervision = \ supervisionhello +EXELIST_telestrat = \ + ascii \ + gunzip65 \ + hello + +EXELIST_vic20 = \ + ascii \ + enumdevdir \ + hello \ + mandelbrot \ + sieve \ + tgidemo + # Unlisted targets will try to build everything. # That lets us learn what they cannot build, and what settings # we need to use for programs that can be built and run. @@ -227,6 +343,10 @@ endef # SUBDIR_recipe samples: $(EXELIST_$(SYS)) $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) +# empty target used to skip systems that will not work with any program in this dir +notavailable: + @echo "warning: generic samples not available for" $(SYS) + disk: $(DISK_$(SYS)) all: diff --git a/samples/geos/Makefile b/samples/geos/Makefile index 00841ee8f..9ad555565 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -37,17 +37,42 @@ DIRLIST = grc define SUBDIR_recipe -@$(MAKE) -C $(dir) --no-print-directory $@ +@$(MAKE) SYS=$(SYS) -C $(dir) --no-print-directory $@ endef # SUBDIR_recipe +EXELIST_geos-cbm = \ + bitmap-demo.cvt \ + filesel.cvt \ + geosver.cvt \ + getid.cvt \ + hello1.cvt \ + hello2.cvt \ + overlay-demo.cvt \ + vector-demo.cvt \ + yesno.cvt + +EXELIST_geos-apple = \ + bitmap-demo.cvt \ + filesel.cvt \ + hello1.cvt \ + hello2.cvt \ + overlay-demo.cvt \ + vector-demo.cvt \ + yesno.cvt + # omitted: dialog.c grphstr.c inittab.c menu.c - # TODO: geosconio.cvt rmvprot.cvt -samples: bitmap-demo.cvt filesel.cvt geosver.cvt getid.cvt hello1.cvt hello2.cvt \ - overlay-demo.cvt vector-demo.cvt yesno.cvt - $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) +ifneq ($(EXELIST_$(SYS)),) +samples: $(EXELIST_$(SYS)) + $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) +else +samples: + @echo "warning: geos samples not available for" $(SYS) +endif + + bitmap.c: logo.pcx $(SP) -r logo.pcx -c geos-bitmap -w bitmap.c,ident=bitmap diff --git a/samples/geos/grc/Makefile b/samples/geos/grc/Makefile index 81f9ca045..0a432fd89 100644 --- a/samples/geos/grc/Makefile +++ b/samples/geos/grc/Makefile @@ -1,4 +1,8 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= geos-cbm + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -29,22 +33,31 @@ else GRC := $(if $(wildcard ../../../bin/grc65*),../../../bin/grc65,grc65) endif -samples: test.s vlir.cvt +EXELIST_geos-cbm = \ + test.s \ + vlir.cvt + +ifneq ($(EXELIST_$(SYS)),) +samples: $(EXELIST_$(SYS)) +else +samples: + @echo "warning: grc sample not available for" $(SYS) +endif test.s: test.grc $(GRC) -s test.s test.grc vlir.cvt: vlir.grc vlir0.s vlir1.s vlir2.s # using seperate calls here for demonstration purposes: - $(GRC) -t geos-cbm -s vlir.s vlir.grc - $(AS) -t geos-cbm vlir.s - $(AS) -t geos-cbm vlir0.s - $(AS) -t geos-cbm vlir1.s - $(AS) -t geos-cbm vlir2.s - $(LD) -t geos-cbm -o vlir.cvt vlir.o vlir0.o vlir1.o vlir2.o geos-cbm.lib + $(GRC) -t $(SYS) -s vlir.s vlir.grc + $(AS) -t $(SYS) vlir.s + $(AS) -t $(SYS) vlir0.s + $(AS) -t $(SYS) vlir1.s + $(AS) -t $(SYS) vlir2.s + $(LD) -t $(SYS) -o vlir.cvt vlir.o vlir0.o vlir1.o vlir2.o $(SYS).lib # you can also do the above in one command: -# $(CL) -t geos-cbm -o vlir.cvt vlir.grc vlir0.s vlir1.s vlir2.s +# $(CL) -t $(SYS) -o vlir.cvt vlir.grc vlir0.s vlir1.s vlir2.s clean: @$(DEL) test.s test.h 2>$(NULLDEV) diff --git a/samples/tutorial/Makefile b/samples/tutorial/Makefile index 2c4bcb988..39b2d6e8c 100644 --- a/samples/tutorial/Makefile +++ b/samples/tutorial/Makefile @@ -31,10 +31,56 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -samples: hello +EXELIST_atari2600 = \ + notavailable + +EXELIST_bbc = \ + notavailable + +EXELIST_creativision = \ + notavailable + +EXELIST_gamate = \ + notavailable + +EXELIST_geos-cbm = \ + notavailable + +EXELIST_geos-apple = \ + notavailable + +EXELIST_lunix = \ + notavailable + +EXELIST_lynx = \ + notavailable + +EXELIST_nes = \ + notavailable + +EXELIST_osic1p = \ + notavailable + +EXELIST_pce = \ + notavailable + +EXELIST_supervision = \ + notavailable + +# Unlisted targets will try to build everything. +# That lets us learn what they cannot build, and what settings +# we need to use for programs that can be built and run. +ifndef EXELIST_$(SYS) +EXELIST_$(SYS) := ${patsubst %.c,%,$(wildcard *.c)} +endif + +samples: $(EXELIST_$(SYS)) hello: hello.c text.s $(CL) -t $(SYS) -o hello hello.c text.s +# empty target used to skip systems that will not work with any program in this dir +notavailable: + @echo "warning: tutorial sample not available for" $(SYS) clean: @$(DEL) hello 2>$(NULLDEV) From 924fcf5d0690f8d0eb761d98d88f372107c9d924 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 8 Jun 2021 09:32:58 +0800 Subject: [PATCH 0860/2710] Replaced several occurance of PtrConversion() with StdConversion(). Variadic arguments of functions should be default-promoted. --- src/cc65/datatype.c | 19 +++++++++++++++++++ src/cc65/datatype.h | 6 ++++++ src/cc65/expr.c | 9 +++++---- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index b69a44dd0..6d9afa403 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1007,6 +1007,25 @@ const Type* PtrConversion (const Type* T) +const Type* StdConversion (const Type* T) +/* If the type is a function, convert it to pointer to function. If the +** expression is an array, convert it to pointer to first element. If the +** type is an integer, do integeral promotion. Otherwise return T. +*/ +{ + if (IsTypeFunc (T)) { + return AddressOf (T); + } else if (IsTypeArray (T)) { + return AddressOf (GetElementType (T)); + } else if (IsClassInt (T)) { + return IntPromotion (T); + } else { + return T; + } +} + + + const Type* IntPromotion (const Type* T) /* Apply the integer promotions to T and return the result. The returned type ** string may be T if there is no need to change it. diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index c60023944..e8ba7b6c0 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -368,6 +368,12 @@ const Type* PtrConversion (const Type* T); ** return T. */ +const Type* StdConversion (const Type* T); +/* If the type is a function, convert it to pointer to function. If the +** expression is an array, convert it to pointer to first element. If the +** type is an integer, do integeral promotion. Otherwise return T. +*/ + const Type* IntPromotion (const Type* T); /* Apply the integer promotions to T and return the result. The returned type ** string may be T if there is no need to change it. diff --git a/src/cc65/expr.c b/src/cc65/expr.c index dc45b108d..dc2374190 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -765,9 +765,10 @@ static unsigned FunctionArgList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) } else { /* No prototype available. Convert array to "pointer to first - ** element", and function to "pointer to function". + ** element", function to "pointer to function" and do integral + ** promotion if necessary. */ - Expr.Type = PtrConversion (Expr.Type); + TypeConversion (&Expr, StdConversion (Expr.Type)); } @@ -3062,7 +3063,7 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) Error ("Invalid operands for binary operator '+'"); } else { /* Array and function types must be converted to pointer types */ - Expr->Type = PtrConversion (Expr->Type); + Expr->Type = StdConversion (Expr->Type); } } @@ -3341,7 +3342,7 @@ static void parsesub (ExprDesc* Expr) } /* Result type is either a pointer or an integer */ - Expr->Type = PtrConversion (Expr->Type); + Expr->Type = StdConversion (Expr->Type); /* Condition code not set */ ED_MarkAsUntested (Expr); From 2d014383cd13a96bdad1af8350da8b197c96dec5 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 8 Jun 2021 00:43:26 +0800 Subject: [PATCH 0861/2710] Replaced certain usage of "(New-)PointerTo()" with "AddressOf()". --- src/cc65/expr.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index dc2374190..9c12741ec 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1127,7 +1127,7 @@ static void Primary (ExprDesc* E) /* output its label */ E->Flags = E_RTYPE_RVAL | E_LOC_CODE | E_ADDRESS_OF; E->Name = Entry->V.L.Label; - E->Type = NewPointerTo (type_void); + E->Type = type_void_p; NextToken (); } else { Error ("Computed gotos are a C extension, not supported with this --standard"); @@ -1946,7 +1946,7 @@ void hie10 (ExprDesc* Expr) /* The & operator yields an rvalue address */ ED_AddrExpr (Expr); } - Expr->Type = NewPointerTo (Expr->Type); + Expr->Type = AddressOf (Expr->Type); break; case TOK_SIZEOF: @@ -2265,9 +2265,9 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ Tok = CurTok.Tok; NextToken (); - /* If lhs is a function, convert it to pointer to function */ + /* If lhs is a function, convert it to the address of the function */ if (IsTypeFunc (Expr->Type)) { - Expr->Type = NewPointerTo (Expr->Type); + Expr->Type = AddressOf (Expr->Type); } /* Get the lhs on stack */ @@ -2287,9 +2287,9 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ /* Get the right hand side */ MarkedExprWithCheck (hienext, &Expr2); - /* If rhs is a function, convert it to pointer to function */ + /* If rhs is a function, convert it to the address of the function */ if (IsTypeFunc (Expr2.Type)) { - Expr2.Type = NewPointerTo (Expr2.Type); + Expr2.Type = AddressOf (Expr2.Type); } /* Check for a numeric constant expression */ From aac03eae6f3746dd21c5d26c551b93b5729578b3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 16 May 2021 19:08:42 +0800 Subject: [PATCH 0862/2710] Better future-proof bit-masking. --- src/cc65/typeconv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index a7528a2f8..c72b2c5eb 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -143,10 +143,10 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) /* Do the integer constant <-> absolute address conversion if necessary */ if (IsClassPtr (NewType)) { - Expr->Flags &= ~E_LOC_NONE; + Expr->Flags &= ~E_MASK_LOC; Expr->Flags |= E_LOC_ABS | E_ADDRESS_OF; } else if (IsClassInt (NewType)) { - Expr->Flags &= ~(E_LOC_ABS | E_ADDRESS_OF); + Expr->Flags &= ~(E_MASK_LOC | E_ADDRESS_OF); Expr->Flags |= E_LOC_NONE; } From 6a3b9a9880599acc38fd721a24c5864ec3194a3e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 16 May 2021 19:08:42 +0800 Subject: [PATCH 0863/2710] E_ADDRESS_OF logic fix. --- src/cc65/exprdesc.c | 5 ++--- src/cc65/exprdesc.h | 3 +-- src/cc65/loadexpr.c | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index 3d7b7c384..7d0ace004 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -93,8 +93,7 @@ int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr) int ED_IsIndExpr (const ExprDesc* Expr) /* Check if the expression is a reference to its value */ { - return (Expr->Flags & E_ADDRESS_OF) == 0 && - !ED_IsLocNone (Expr) && !ED_IsLocPrimary (Expr); + return (Expr->Flags & E_ADDRESS_OF) == 0 && !ED_IsLocNone (Expr); } #endif @@ -282,7 +281,7 @@ ExprDesc* ED_AddrExpr (ExprDesc* Expr) case E_LOC_EXPR: Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE); - Expr->Flags |= E_LOC_PRIMARY | E_RTYPE_RVAL; + Expr->Flags |= E_ADDRESS_OF | E_LOC_PRIMARY | E_RTYPE_RVAL; break; default: diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index 13eb36e5e..f2b66ee56 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -493,8 +493,7 @@ INLINE int ED_IsAddrExpr (const ExprDesc* Expr) INLINE int ED_IsIndExpr (const ExprDesc* Expr) /* Check if the expression is a reference to its value */ { - return (Expr->Flags & E_ADDRESS_OF) == 0 && - !ED_IsLocNone (Expr) && !ED_IsLocPrimary (Expr); + return (Expr->Flags & E_ADDRESS_OF) == 0 && !ED_IsLocNone (Expr); } #else int ED_IsIndExpr (const ExprDesc* Expr); diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index 4b7f8e279..c5badc1b3 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -92,6 +92,7 @@ static void LoadAddress (unsigned Flags, ExprDesc* Expr) g_leasp (Expr->IVal); break; + case E_LOC_PRIMARY: case E_LOC_EXPR: if (Expr->IVal != 0) { /* We have an expression in the primary plus a constant From f5dacda69b84b2a2f6c7df3b42021016af3df4f1 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 16 May 2021 19:08:43 +0800 Subject: [PATCH 0864/2710] NoCodeConstExpr() fix to avoid exessive error messages. --- src/cc65/expr.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 0275e61a3..cd1f780ea 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -4217,7 +4217,8 @@ ExprDesc NoCodeConstExpr (void (*Func) (ExprDesc*)) if (!ED_IsConst (&Expr) || !ED_CodeRangeIsEmpty (&Expr)) { Error ("Constant expression expected"); /* To avoid any compiler errors, make the expression a valid const */ - ED_MakeConstAbsInt (&Expr, 1); + Expr.Flags &= E_MASK_RTYPE | E_MASK_KEEP_RESULT; + Expr.Flags |= E_LOC_NONE; } /* Return by value */ From aecb01986a6c7154ce6e81ac1f319c9193eee979 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 16 May 2021 15:45:34 +0200 Subject: [PATCH 0865/2710] fix list of executables for geos-apple --- samples/Makefile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index e8b9824d8..90fba50c9 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -271,8 +271,7 @@ EXELIST_geos-cbm = \ diodemo EXELIST_geos-apple = \ - ascii \ - diodemo + ascii EXELIST_lunix = \ notavailable From 53f0552fe71f1aed5534c8e04f99fb0fa75256cf Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 16 May 2021 17:12:50 +0200 Subject: [PATCH 0866/2710] fix warnings --- samples/nachtm.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/nachtm.c b/samples/nachtm.c index 0b962fa5d..02801da24 100644 --- a/samples/nachtm.c +++ b/samples/nachtm.c @@ -972,12 +972,12 @@ static void MakeNiceScreen (void) /* Clear the screen hide the cursor, set colors */ #ifdef __CBM610__ - textcolor (COLOR_WHITE); + (void)textcolor (COLOR_WHITE); #else - textcolor (COLOR_GRAY3); + (void)textcolor (COLOR_GRAY3); #endif - bordercolor (COLOR_BLACK); - bgcolor (COLOR_BLACK); + (void)bordercolor (COLOR_BLACK); + (void)bgcolor (COLOR_BLACK); clrscr (); cursor (0); From 4ba3ff3048e0baffac77f671c6947afdeee775df Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 16 May 2021 18:23:23 +0200 Subject: [PATCH 0867/2710] redirect c64 to geos-cbm and apple2enh to geos-apple when given with SYS= on the command line, as suggested by oliver --- samples/geos/Makefile | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/samples/geos/Makefile b/samples/geos/Makefile index 9ad555565..a894c5d01 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -3,6 +3,17 @@ # var. to build for another target system. SYS ?= geos-cbm +# If SYS was given on the commandline, redirect "c64" to "geos-cbm" and +# "apple2enh" to "geos-apple" +ifeq "$(origin SYS)" "command line" +ifeq "$(SYS)" "c64" + override SYS = geos-cbm +endif +ifeq "$(SYS)" "apple2enh" + override SYS = geos-apple +endif +endif + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) From a9af6aa74334483c09fd367ab01c5d4358ab7120 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 16 May 2021 18:29:45 +0200 Subject: [PATCH 0868/2710] fix warnings --- samples/geos/geosver.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/geos/geosver.c b/samples/geos/geosver.c index 1402d148e..3d68798a2 100644 --- a/samples/geos/geosver.c +++ b/samples/geos/geosver.c @@ -8,8 +8,8 @@ struct window wholeScreen = {0, SC_PIX_HEIGHT-1, 0, SC_PIX_WIDTH-1}; void main (void) { unsigned char os = get_ostype(); - unsigned char *machine = NULL; - unsigned char *version = NULL; + char *machine = NULL; + char *version = NULL; unsigned char good = 1; SetPattern(0); From 43ca88726344b82065bf83dd5b693f7b6006c94e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 16 May 2021 16:06:52 +0800 Subject: [PATCH 0869/2710] Fixed 'case'/'default' labels in non-compound 'switch' body statement. --- src/cc65/function.c | 2 +- src/cc65/stmt.c | 177 ++++++++++++++++++++++++++------------------ src/cc65/stmt.h | 2 +- src/cc65/swstmt.c | 2 +- 4 files changed, 106 insertions(+), 77 deletions(-) diff --git a/src/cc65/function.c b/src/cc65/function.c index 4e61cc1d3..452181af9 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -644,7 +644,7 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* Now process statements in this block */ while (CurTok.Tok != TOK_RCURLY && CurTok.Tok != TOK_CEOF) { - Statement (0); + AnyStatement (0); } /* If this is not a void function, and not the main function in a C99 diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index ccb113978..022a8475c 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -163,7 +163,7 @@ static int IfStatement (void) TestResult = TestInParens (Label1, 0); /* Parse the if body */ - GotBreak = Statement (0); + GotBreak = AnyStatement (0); /* Else clause present? */ if (CurTok.Tok != TOK_ELSE) { @@ -195,7 +195,7 @@ static int IfStatement (void) g_defcodelabel (Label1); /* Total break only if both branches had a break. */ - GotBreak &= Statement (0); + GotBreak &= AnyStatement (0); /* Generate the label for the else clause */ g_defcodelabel (Label2); @@ -225,7 +225,7 @@ static void DoStatement (void) g_defcodelabel (LoopLabel); /* Parse the loop body */ - Statement (0); + AnyStatement (0); /* Output the label for a continue */ g_defcodelabel (ContinueLabel); @@ -283,7 +283,7 @@ static void WhileStatement (void) g_defcodelabel (LoopLabel); /* Loop body */ - Statement (&PendingToken); + AnyStatement (&PendingToken); /* Emit the while condition label */ g_defcodelabel (CondLabel); @@ -509,7 +509,7 @@ static void ForStatement (void) /* Loop body */ g_defcodelabel (BodyLabel); - Statement (&PendingToken); + AnyStatement (&PendingToken); /* If we had an increment expression, move the code to the bottom of ** the loop. In this case we don't need to jump there at the end of @@ -536,17 +536,20 @@ static void ForStatement (void) -static int CompoundStatement (void) +static int CompoundStatement (int* PendingToken) /* Compound statement. Allow any number of statements inside braces. The ** function returns true if the last statement was a break or return. */ { - int GotBreak; + int GotBreak = 0; /* Remember the stack at block entry */ int OldStack = StackPtr; unsigned OldBlockStackSize = CollCount (&CurrentFunc->LocalsBlockStack); + /* Skip '{' */ + NextToken (); + /* Enter a new lexical level */ EnterBlockLevel (); @@ -554,16 +557,15 @@ static int CompoundStatement (void) DeclareLocals (); /* Now process statements in this block */ - GotBreak = 0; while (CurTok.Tok != TOK_RCURLY) { if (CurTok.Tok != TOK_CEOF) { - GotBreak = Statement (0); + GotBreak = AnyStatement (0); } else { break; } } - /* Clean up the stack. */ + /* Clean up the stack if the codeflow may reach the end */ if (!GotBreak) { g_space (StackPtr - OldStack); } @@ -583,12 +585,80 @@ static int CompoundStatement (void) /* Leave the lexical level */ LeaveBlockLevel (); + /* Skip '}' */ + CheckTok (TOK_RCURLY, "'}' expected", PendingToken); + return GotBreak; } -int Statement (int* PendingToken) +static void Statement (int* PendingToken) +/* Single-line statement */ +{ + ExprDesc Expr; + unsigned PrevErrorCount; + CodeMark Start, End; + + /* Remember the current error count and code position */ + PrevErrorCount = ErrorCount; + GetCodePos (&Start); + + /* Actual statement */ + ED_Init (&Expr); + Expr.Flags |= E_NEED_NONE; + Expression0 (&Expr); + + /* If the statement didn't generate code, and is not of type + ** void, emit a warning. + */ + GetCodePos (&End); + if (!ED_YetToLoad (&Expr) && + !ED_MayHaveNoEffect (&Expr) && + CodeRangeIsEmpty (&Start, &End) && + IS_Get (&WarnNoEffect) && + PrevErrorCount == ErrorCount) { + Warning ("Expression result unused"); + } + CheckSemi (PendingToken); +} + + + +static int ParseAnyLabels (void) +/* Return -1 if there are any labels with a statement */ +{ + unsigned PrevErrorCount = ErrorCount; + int HasLabels = 0; + for (;;) { + if (CurTok.Tok == TOK_IDENT && NextTok.Tok == TOK_COLON) { + /* C 'goto' label */ + DoLabel (); + } else if (CurTok.Tok == TOK_CASE) { + /* C 'case' label */ + CaseLabel (); + } else if (CurTok.Tok == TOK_DEFAULT) { + /* C 'default' label */ + DefaultLabel (); + } else { + /* No labels */ + break; + } + HasLabels = 1; + } + + if (HasLabels) { + if (PrevErrorCount != ErrorCount || CheckLabelWithoutStatement ()) { + return -1; + } + } + + return 0; +} + + + +int AnyStatement (int* PendingToken) /* Statement parser. Returns 1 if the statement does a return/break, returns ** 0 otherwise. If the PendingToken pointer is not NULL, the function will ** not skip the terminating token of the statement (closing brace or @@ -598,40 +668,27 @@ int Statement (int* PendingToken) ** NULL, the function will skip the token. */ { - ExprDesc Expr; - int GotBreak; - unsigned PrevErrorCount; - CodeMark Start, End; - - ED_Init (&Expr); - /* Assume no pending token */ if (PendingToken) { *PendingToken = 0; } - /* Check for a label. A label is always part of a statement, it does not + /* Handle any labels. A label is always part of a statement, it does not ** replace one. */ - while (CurTok.Tok == TOK_IDENT && NextTok.Tok == TOK_COLON) { - /* Handle the label */ - DoLabel (); - if (CheckLabelWithoutStatement ()) { - return 0; - } + if (ParseAnyLabels ()) { + return 0; } switch (CurTok.Tok) { - case TOK_LCURLY: - NextToken (); - GotBreak = CompoundStatement (); - CheckTok (TOK_RCURLY, "'{' expected", PendingToken); - return GotBreak; - case TOK_IF: return IfStatement (); + case TOK_SWITCH: + SwitchStatement (); + break; + case TOK_WHILE: WhileStatement (); break; @@ -640,10 +697,15 @@ int Statement (int* PendingToken) DoStatement (); break; - case TOK_SWITCH: - SwitchStatement (); + case TOK_FOR: + ForStatement (); break; + case TOK_GOTO: + GotoStatement (); + CheckSemi (PendingToken); + return 1; + case TOK_RETURN: ReturnStatement (); CheckSemi (PendingToken); @@ -659,55 +721,22 @@ int Statement (int* PendingToken) CheckSemi (PendingToken); return 1; - case TOK_FOR: - ForStatement (); - break; - - case TOK_GOTO: - GotoStatement (); - CheckSemi (PendingToken); - return 1; - - case TOK_SEMI: - /* Ignore it */ - CheckSemi (PendingToken); - break; - case TOK_PRAGMA: DoPragma (); break; - case TOK_CASE: - CaseLabel (); - CheckLabelWithoutStatement (); + case TOK_SEMI: + /* Empty statement. Ignore it */ + CheckSemi (PendingToken); break; - case TOK_DEFAULT: - DefaultLabel (); - CheckLabelWithoutStatement (); - break; + case TOK_LCURLY: + return CompoundStatement (PendingToken); default: - /* Remember the current error count and code position */ - PrevErrorCount = ErrorCount; - GetCodePos (&Start); - - /* Actual statement */ - Expr.Flags |= E_NEED_NONE; - Expression0 (&Expr); - - /* If the statement didn't generate code, and is not of type - ** void, emit a warning. - */ - GetCodePos (&End); - if (!ED_YetToLoad (&Expr) && - !ED_MayHaveNoEffect (&Expr) && - CodeRangeIsEmpty (&Start, &End) && - IS_Get (&WarnNoEffect) && - PrevErrorCount == ErrorCount) { - Warning ("Expression result unused"); - } - CheckSemi (PendingToken); + /* Simple statement */ + Statement (PendingToken); + break; } return 0; } diff --git a/src/cc65/stmt.h b/src/cc65/stmt.h index 04ef728a3..8cff99d92 100644 --- a/src/cc65/stmt.h +++ b/src/cc65/stmt.h @@ -44,7 +44,7 @@ -int Statement (int* PendingToken); +int AnyStatement (int* PendingToken); /* Statement parser. Returns 1 if the statement does a return/break, returns ** 0 otherwise. If the PendingToken pointer is not NULL, the function will ** not skip the terminating token of the statement (closing brace or diff --git a/src/cc65/swstmt.c b/src/cc65/swstmt.c index 3878f7b67..ee0bd1a85 100644 --- a/src/cc65/swstmt.c +++ b/src/cc65/swstmt.c @@ -148,7 +148,7 @@ void SwitchStatement (void) /* Parse the following statement, which may actually be a compound ** statement if there is a curly brace at the current input position */ - HaveBreak = Statement (&RCurlyBrace); + HaveBreak = AnyStatement (&RCurlyBrace); /* Check if we had any labels */ if (CollCount (SwitchData.Nodes) == 0 && SwitchData.DefaultLabel == 0) { From 1450f146a50ac257eea145607801d4f6b1cb4bfb Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 16 May 2021 16:09:45 +0800 Subject: [PATCH 0870/2710] Fixed '[]', '()' '.' and '->' operators following a postfix increment/decrement. --- src/cc65/expr.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index a63214f49..b68b3abbb 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -80,6 +80,8 @@ static GenDesc GenOASGN = { TOK_OR_ASSIGN, GEN_NOPUSH, g_or }; static void parseadd (ExprDesc* Expr, int DoArrayRef); +static void PostInc (ExprDesc* Expr); +static void PostDec (ExprDesc* Expr); @@ -88,6 +90,7 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef); /*****************************************************************************/ + static unsigned GlobalModeFlags (const ExprDesc* Expr) /* Return the addressing mode flags for the given expression */ { @@ -1510,7 +1513,8 @@ static void hie11 (ExprDesc *Expr) Primary (Expr); /* Check for a rhs */ - while (CurTok.Tok == TOK_LBRACK || CurTok.Tok == TOK_LPAREN || + while (CurTok.Tok == TOK_INC || CurTok.Tok == TOK_DEC || + CurTok.Tok == TOK_LBRACK || CurTok.Tok == TOK_LPAREN || CurTok.Tok == TOK_DOT || CurTok.Tok == TOK_PTR_REF) { switch (CurTok.Tok) { @@ -1554,6 +1558,14 @@ static void hie11 (ExprDesc *Expr) StructRef (Expr); break; + case TOK_INC: + PostInc (Expr); + break; + + case TOK_DEC: + PostDec (Expr); + break; + default: Internal ("Invalid token in hie11: %d", CurTok.Tok); @@ -2106,13 +2118,6 @@ void hie10 (ExprDesc* Expr) /* An expression */ hie11 (Expr); - /* Handle post increment */ - switch (CurTok.Tok) { - case TOK_INC: PostInc (Expr); break; - case TOK_DEC: PostDec (Expr); break; - default: break; - } - } break; } From ce487651b09901fbd69183e69425d830505900e8 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 16 May 2021 22:24:35 +0200 Subject: [PATCH 0871/2710] as suggested by Oliver: - only output messages if MAKELEVEL is 0 - indent nested ifeq - use if (,) syntax --- samples/Makefile | 4 +++- samples/geos/Makefile | 20 ++++++++++++-------- samples/geos/grc/Makefile | 4 +++- samples/tutorial/Makefile | 5 ++++- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index 90fba50c9..f1e7a1e0b 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -344,7 +344,9 @@ samples: $(EXELIST_$(SYS)) # empty target used to skip systems that will not work with any program in this dir notavailable: - @echo "warning: generic samples not available for" $(SYS) +ifeq ($(MAKELEVEL),0) + @echo "info: generic samples not available for" $(SYS) +endif disk: $(DISK_$(SYS)) diff --git a/samples/geos/Makefile b/samples/geos/Makefile index a894c5d01..0bf862ca7 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -5,13 +5,15 @@ SYS ?= geos-cbm # If SYS was given on the commandline, redirect "c64" to "geos-cbm" and # "apple2enh" to "geos-apple" -ifeq "$(origin SYS)" "command line" -ifeq "$(SYS)" "c64" - override SYS = geos-cbm -endif -ifeq "$(SYS)" "apple2enh" - override SYS = geos-apple -endif +ifeq ($(origin SYS),command line) + ifeq ($(SYS),c64) + override SYS = geos-cbm + $(info GEOS: c64 -> geos-cbm) + endif + ifeq ($(SYS),apple2enh) + override SYS = geos-apple + $(info GEOS: apple2enh -> geos-apple) + endif endif # Just the usual way to find out if we're @@ -80,7 +82,9 @@ samples: $(EXELIST_$(SYS)) $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) else samples: - @echo "warning: geos samples not available for" $(SYS) + ifeq ($(MAKELEVEL),0) + @echo "info: geos samples not available for" $(SYS) + endif endif diff --git a/samples/geos/grc/Makefile b/samples/geos/grc/Makefile index 0a432fd89..4ad4f00a6 100644 --- a/samples/geos/grc/Makefile +++ b/samples/geos/grc/Makefile @@ -41,7 +41,9 @@ ifneq ($(EXELIST_$(SYS)),) samples: $(EXELIST_$(SYS)) else samples: - @echo "warning: grc sample not available for" $(SYS) + ifeq ($(MAKELEVEL),0) + @echo "info: grc sample not available for" $(SYS) + endif endif test.s: test.grc diff --git a/samples/tutorial/Makefile b/samples/tutorial/Makefile index 39b2d6e8c..911988db5 100644 --- a/samples/tutorial/Makefile +++ b/samples/tutorial/Makefile @@ -81,6 +81,9 @@ hello: hello.c text.s # empty target used to skip systems that will not work with any program in this dir notavailable: - @echo "warning: tutorial sample not available for" $(SYS) +ifeq ($(MAKELEVEL),0) + @echo "info: tutorial sample not available for" $(SYS) +endif + clean: @$(DEL) hello 2>$(NULLDEV) From 5fc9d3f048f8897bce1c56a4359af1221f6141b9 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 16 May 2021 22:57:28 +0200 Subject: [PATCH 0872/2710] change driver _install calls from taking "void*" to "const void*" --- include/em.h | 2 +- include/joystick.h | 2 +- include/serial.h | 2 +- include/tgi.h | 2 +- libsrc/em/em-kernel.s | 2 +- libsrc/joystick/joy-kernel.s | 2 +- libsrc/serial/ser-kernel.s | 2 +- libsrc/tgi/tgi-kernel.s | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/em.h b/include/em.h index b151800ae..47bd23222 100644 --- a/include/em.h +++ b/include/em.h @@ -82,7 +82,7 @@ unsigned char __fastcall__ em_load_driver (const char* driver); unsigned char em_unload (void); /* Uninstall, then unload the currently loaded driver. */ -unsigned char __fastcall__ em_install (void* driver); +unsigned char __fastcall__ em_install (const void* driver); /* Install an already loaded driver. Return an error code. */ unsigned char em_uninstall (void); diff --git a/include/joystick.h b/include/joystick.h index b6771c381..963c9ba95 100644 --- a/include/joystick.h +++ b/include/joystick.h @@ -89,7 +89,7 @@ unsigned char __fastcall__ joy_load_driver (const char* driver); unsigned char joy_unload (void); /* Uninstall, then unload the currently loaded driver. */ -unsigned char __fastcall__ joy_install (void* driver); +unsigned char __fastcall__ joy_install (const void* driver); /* Install an already loaded driver. Return an error code. */ unsigned char joy_uninstall (void); diff --git a/include/serial.h b/include/serial.h index 990f66521..58943d507 100644 --- a/include/serial.h +++ b/include/serial.h @@ -136,7 +136,7 @@ unsigned char __fastcall__ ser_load_driver (const char* driver); unsigned char ser_unload (void); /* Uninstall, then unload the currently loaded driver. */ -unsigned char __fastcall__ ser_install (void* driver); +unsigned char __fastcall__ ser_install (const void* driver); /* Install an already loaded driver. Return an error code. */ unsigned char ser_uninstall (void); diff --git a/include/tgi.h b/include/tgi.h index 135ef63f1..2ef65b856 100644 --- a/include/tgi.h +++ b/include/tgi.h @@ -82,7 +82,7 @@ void tgi_unload (void); ** necessary. */ -void __fastcall__ tgi_install (void* driver); +void __fastcall__ tgi_install (const void* driver); /* Install an already loaded driver. */ void tgi_uninstall (void); diff --git a/libsrc/em/em-kernel.s b/libsrc/em/em-kernel.s index c982dac88..d5be0ae23 100644 --- a/libsrc/em/em-kernel.s +++ b/libsrc/em/em-kernel.s @@ -36,7 +36,7 @@ emd_sig: .byte $65, $6d, $64, EMD_API_VERSION ; "emd", version ;---------------------------------------------------------------------------- -; unsigned char __fastcall__ em_install (void* driver); +; unsigned char __fastcall__ em_install (const void* driver); ; /* Install the driver once it is loaded */ diff --git a/libsrc/joystick/joy-kernel.s b/libsrc/joystick/joy-kernel.s index c2d50c8d8..53d475c57 100644 --- a/libsrc/joystick/joy-kernel.s +++ b/libsrc/joystick/joy-kernel.s @@ -33,7 +33,7 @@ joy_sig: .byte $6A, $6F, $79, JOY_API_VERSION ; "joy", version .code ;---------------------------------------------------------------------------- -; unsigned char __fastcall__ joy_install (void* driver); +; unsigned char __fastcall__ joy_install (const void* driver); ; /* Install the driver once it is loaded */ diff --git a/libsrc/serial/ser-kernel.s b/libsrc/serial/ser-kernel.s index 4c5b455b6..b6c57a3b5 100644 --- a/libsrc/serial/ser-kernel.s +++ b/libsrc/serial/ser-kernel.s @@ -39,7 +39,7 @@ ser_sig: .byte $73, $65, $72, SER_API_VERSION ; "ser", version .code ;---------------------------------------------------------------------------- -; unsigned char __fastcall__ ser_install (void* driver); +; unsigned char __fastcall__ ser_install (const void* driver); ; /* Install the driver once it is loaded */ diff --git a/libsrc/tgi/tgi-kernel.s b/libsrc/tgi/tgi-kernel.s index 3a388b6dc..cbd655279 100644 --- a/libsrc/tgi/tgi-kernel.s +++ b/libsrc/tgi/tgi-kernel.s @@ -88,7 +88,7 @@ tgi_sig: .byte $74, $67, $69, TGI_API_VERSION ; "tgi", version .code ;---------------------------------------------------------------------------- -; void __fastcall__ tgi_install (void* driver); +; void __fastcall__ tgi_install (const void* driver); ; /* Install an already loaded driver. */ From d2da30a7e25cb6f918af10b6d69dbabdc369512a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 16 May 2021 23:38:17 +0200 Subject: [PATCH 0873/2710] give the "samples" target something to do to supress the "nothing to be done for 'samples'" message --- samples/geos/Makefile | 4 +++- samples/geos/grc/Makefile | 3 +++ samples/tutorial/Makefile | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/samples/geos/Makefile b/samples/geos/Makefile index 0bf862ca7..e792c52f1 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -84,10 +84,12 @@ else samples: ifeq ($(MAKELEVEL),0) @echo "info: geos samples not available for" $(SYS) + else +# suppress the "nothing to be done for 'samples' message + @echo > $(NULLDEV) endif endif - bitmap.c: logo.pcx $(SP) -r logo.pcx -c geos-bitmap -w bitmap.c,ident=bitmap diff --git a/samples/geos/grc/Makefile b/samples/geos/grc/Makefile index 4ad4f00a6..9dd9ebc5e 100644 --- a/samples/geos/grc/Makefile +++ b/samples/geos/grc/Makefile @@ -43,6 +43,9 @@ else samples: ifeq ($(MAKELEVEL),0) @echo "info: grc sample not available for" $(SYS) + else +# suppress the "nothing to be done for 'samples' message + @echo > $(NULLDEV) endif endif diff --git a/samples/tutorial/Makefile b/samples/tutorial/Makefile index 911988db5..af5062588 100644 --- a/samples/tutorial/Makefile +++ b/samples/tutorial/Makefile @@ -83,6 +83,9 @@ hello: hello.c text.s notavailable: ifeq ($(MAKELEVEL),0) @echo "info: tutorial sample not available for" $(SYS) +else +# suppress the "nothing to be done for 'samples' message + @echo > $(NULLDEV) endif clean: From c53059468e8a96e4ade3781aa87a0faa5f1abc4a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 17 May 2021 14:25:18 +0200 Subject: [PATCH 0874/2710] fix documentation for the driver _init calls --- doc/funcref.sgml | 6 +++--- doc/tgi.sgml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 4d1a278b0..2cb8bbf44 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -3410,7 +3410,7 @@ loaded. <descrip> <tag/Function/Install an already loaded extended memory driver. <tag/Header/<tt/<ref id="em.h" name="em.h">/ -<tag/Declaration/<tt/unsigned char _fastcall__ em_install (void* driver);/ +<tag/Declaration/<tt/unsigned char _fastcall__ em_install (const void* driver);/ <tag/Description/The function installs an already loaded extended memory driver and returns an error code. The function may be used to install a driver linked statically to the program. @@ -4733,7 +4733,7 @@ There's no way to check for the number of actually connected joysticks. <descrip> <tag/Function/Install an already loaded driver and return an error code. <tag/Header/<tt/<ref id="joystick.h" name="joystick.h">/ -<tag/Declaration/<tt/unsigned char __fastcall__ joy_install (void* driver);/ +<tag/Declaration/<tt/unsigned char __fastcall__ joy_install (const void* driver);/ <tag/Description/The function installs a driver that was already loaded into memory (or linked statically to the program). It returns an error code (<tt/JOY_ERR_OK/ in case of success). @@ -6198,7 +6198,7 @@ while (ser_get(&ch) == SER_ERR_NO_DATA) <descrip> <tag/Function/Install an already loaded driver and return an error code. <tag/Header/<tt/<ref id="serial.h" name="serial.h">/ -<tag/Declaration/<tt/unsigned char __fastcall__ ser_install (void* driver);/ +<tag/Declaration/<tt/unsigned char __fastcall__ ser_install (const void* driver);/ <tag/Description/The function installs a driver that was already loaded into memory (or linked statically to the program). It returns an error code (<tt/SER_ERR_OK/ in case of success). diff --git a/doc/tgi.sgml b/doc/tgi.sgml index b1497ca70..29acd8ce6 100644 --- a/doc/tgi.sgml +++ b/doc/tgi.sgml @@ -555,7 +555,7 @@ tgi_init(); //Set up the default palette and clear the screen. <descrip> <tag/Function/Install an already loaded driver and return an error code. <tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/ -<tag/Declaration/<tt/unsigned char __fastcall__ tgi_install (void* driver);/ +<tag/Declaration/<tt/unsigned char __fastcall__ tgi_install (const void* driver);/ <tag/Description/The function installs a driver that was already loaded into memory (or linked statically to the program). It returns an error code (<tt/TGI_ERR_OK/ in case of success). From d736032675dc998e9196ea7e6f392945fc17795d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 17 May 2021 14:25:33 +0200 Subject: [PATCH 0875/2710] added a missing comment --- test/misc/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/test/misc/Makefile b/test/misc/Makefile index 397635afd..b17c69f5c 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -64,6 +64,7 @@ $(WORKDIR)/bug760.$1.$2.prg: bug760.c | $(WORKDIR) $(if $(QUIET),echo misc/bug760.$1.$2.prg) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) +# should compile, but gives an error $(WORKDIR)/bug1437.$1.$2.prg: bug1437.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." $(if $(QUIET),echo misc/bug1437.$1.$2.prg) From 4a57656f692c5fb08fe80e0c665d852d8e32388b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 17 May 2021 14:40:09 +0200 Subject: [PATCH 0876/2710] add test for issue #1504 --- test/val/bug1504.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 test/val/bug1504.c diff --git a/test/val/bug1504.c b/test/val/bug1504.c new file mode 100644 index 000000000..bd93c7387 --- /dev/null +++ b/test/val/bug1504.c @@ -0,0 +1,13 @@ + +/* bug #1504 - Some compilation failures */ + +#include <stdio.h> + +int main(void) +{ + int i = 0, *p = &i; + switch (i) case 0: case 1: i = 21; /* Should be OK but fails */ + p++[0] += 21; /* Should be OK but fails */ + printf("%d\n", i); + return i != 42; +} From d14148ab4f9d8d1d52025eac31bfc09d977fbaa7 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 17 May 2021 19:48:47 -0400 Subject: [PATCH 0877/2710] Restricted commit b9a3c7888822732a0de92741cfe1a3e1b6bb272f to classic-style Assembly macros. .include will work at expansion-time for .define macros. --- src/ca65/macro.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/ca65/macro.c b/src/ca65/macro.c index 34d87e65f..d6c807035 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -438,9 +438,7 @@ void MacDef (unsigned Style) /* Parse the parameter list */ if (HaveParams) { - while (CurTok.Tok == TOK_IDENT) { - /* Create a struct holding the identifier */ IdDesc* I = NewIdDesc (&CurTok.SVal); @@ -449,6 +447,7 @@ void MacDef (unsigned Style) M->Params = I; } else { IdDesc* List = M->Params; + while (1) { if (SB_Compare (&List->Id, &CurTok.SVal) == 0) { Error ("Duplicate symbol '%m%p'", &CurTok.SVal); @@ -490,9 +489,8 @@ void MacDef (unsigned Style) ** the .LOCAL command is detected and removed, at this time. */ while (1) { - /* Check for include */ - if (CurTok.Tok == TOK_INCLUDE) { + if (CurTok.Tok == TOK_INCLUDE && Style == MAC_STYLE_CLASSIC) { /* Include another file */ NextTok (); /* Name must follow */ @@ -529,9 +527,7 @@ void MacDef (unsigned Style) /* Check for a .LOCAL declaration */ if (CurTok.Tok == TOK_LOCAL && Style == MAC_STYLE_CLASSIC) { - while (1) { - IdDesc* I; /* Skip .local or comma */ @@ -570,6 +566,7 @@ void MacDef (unsigned Style) if (CurTok.Tok == TOK_IDENT) { unsigned Count = 0; IdDesc* I = M->Params; + while (I) { if (SB_Compare (&I->Id, &CurTok.SVal) == 0) { /* Local param name, replace it */ From 6d560f42366ecbd12f05f6ce121ffa7685497114 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 18 May 2021 15:16:14 +0200 Subject: [PATCH 0878/2710] change prototype for GraphicsString() to void __fastcall__ GraphicsString(const void *myGfxString); --- doc/geos.sgml | 2 +- include/geos/ggraph.h | 2 +- libsrc/geos-common/graph/graphicsstring.s | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/geos.sgml b/doc/geos.sgml index 11ff9c534..f7943f8cd 100644 --- a/doc/geos.sgml +++ b/doc/geos.sgml @@ -205,7 +205,7 @@ see them together in the filling box in GeoPaint. <sect2>GraphicsString <p> -<tt/void GraphicsString (char *myGString)/ +<tt/void GraphicsString (const void *myGString)/ <p> One of the more powerfull routines of GEOS. This function calls other graphic functions depending on the given command string. See the structures chapter for a more detailed description. diff --git a/include/geos/ggraph.h b/include/geos/ggraph.h index ec9fb0fa1..b550d6ca1 100644 --- a/include/geos/ggraph.h +++ b/include/geos/ggraph.h @@ -43,7 +43,7 @@ void __fastcall__ BitOtherClip(void *proc1, void *proc2, char skipl, char skipr, unsigned skiptop, struct iconpic *myIcon); -void __fastcall__ GraphicsString(char *myGfxString); +void __fastcall__ GraphicsString(const void *myGfxString); #ifdef __GEOS_CBM__ void SetNewMode(void); diff --git a/libsrc/geos-common/graph/graphicsstring.s b/libsrc/geos-common/graph/graphicsstring.s index 86c74f1a6..282649284 100644 --- a/libsrc/geos-common/graph/graphicsstring.s +++ b/libsrc/geos-common/graph/graphicsstring.s @@ -3,7 +3,7 @@ ; ; 25.12.99 -; void GraphicsString (char *myString); +; void GraphicsString (const void *myString); .export _GraphicsString From 0ae1aad3d3705b5cbae0d0ff74fae711bc505f52 Mon Sep 17 00:00:00 2001 From: Olli Savia <ops@iki.fi> Date: Wed, 19 May 2021 21:08:43 +0300 Subject: [PATCH 0879/2710] Fix typo: VIAx_CR -> VIAx_ACR --- asminc/vic20.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/asminc/vic20.inc b/asminc/vic20.inc index 41a935238..7184ab6ee 100644 --- a/asminc/vic20.inc +++ b/asminc/vic20.inc @@ -90,7 +90,7 @@ VIA1_T1LH := VIA1+$7 ; Timer 1 latch, high byte VIA1_T2CL := VIA1+$8 ; Timer 2, low byte VIA1_T2CH := VIA1+$9 ; Timer 2, high byte VIA1_SR := VIA1+$A ; Shift register -VIA1_CR := VIA1+$B ; Auxiliary control register +VIA1_ACR := VIA1+$B ; Auxiliary control register VIA1_PCR := VIA1+$C ; Peripheral control register VIA1_IFR := VIA1+$D ; Interrupt flag register VIA1_IER := VIA1+$E ; Interrupt enable register @@ -112,7 +112,7 @@ VIA2_T1LH := VIA2+$7 ; Timer 1 latch, high byte VIA2_T2CL := VIA2+$8 ; Timer 2, low byte VIA2_T2CH := VIA2+$9 ; Timer 2, high byte VIA2_SR := VIA2+$A ; Shift register -VIA2_CR := VIA2+$B ; Auxiliary control register +VIA2_ACR := VIA2+$B ; Auxiliary control register VIA2_PCR := VIA2+$C ; Peripheral control register VIA2_IFR := VIA2+$D ; Interrupt flag register VIA2_IER := VIA2+$E ; Interrupt enable register From 681c9594cc37581c50d48b67364398bdedeae4bf Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Fri, 21 May 2021 01:45:55 +0200 Subject: [PATCH 0880/2710] libsrc/atari5200/crt0.s: fix formatting --- libsrc/atari5200/crt0.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari5200/crt0.s b/libsrc/atari5200/crt0.s index 9538d3bb4..8f6e02273 100644 --- a/libsrc/atari5200/crt0.s +++ b/libsrc/atari5200/crt0.s @@ -44,4 +44,4 @@ _exit: jsr donelib ; Run module destructors ; A 5200 program isn't supposed to exit. -halt: jmp halt +halt: jmp halt From 663268dca98856a0280a49cc0582a77cd511a05f Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 21 May 2021 03:32:43 -0400 Subject: [PATCH 0881/2710] Syncronize the Supervision crt0.s with its ld65 config files. .segment "VECTOR" -> "VECTORS". Fixes #1506. --- libsrc/supervision/crt0.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/supervision/crt0.s b/libsrc/supervision/crt0.s index 203c681b8..fbae1fc46 100644 --- a/libsrc/supervision/crt0.s +++ b/libsrc/supervision/crt0.s @@ -67,13 +67,13 @@ not_dma: ; Removing this segment gives only a warning. .segment "FFF0" .proc reset32kcode - lda #(6<<5) | SV_LCD_ON | SV_NMI_ENABLE_ON + lda #(6<<5) | SV_LCD_ON | SV_NMI_ENABLE_ON sta sv_bank ; Now, the 32Kbyte image can reside in the top of 64Kbyte and 128Kbyte ROMs. jmp reset .endproc - .segment "VECTOR" + .segment "VECTORS" .word nmi .word reset32kcode From e13f57e86c37ae2601bed1d980fc1fa73915ff3b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 21 May 2021 16:09:10 +0200 Subject: [PATCH 0882/2710] added another testcase for issue #1462 --- test/todo/bug1462-2.c | 51 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 test/todo/bug1462-2.c diff --git a/test/todo/bug1462-2.c b/test/todo/bug1462-2.c new file mode 100644 index 000000000..df94cfc59 --- /dev/null +++ b/test/todo/bug1462-2.c @@ -0,0 +1,51 @@ + +/* issue #1462 - Bit-fields are still broken */ +/* even the = operation is buggy in certain ways */ + +#include <stdio.h> + +typedef struct { + signed int a : 3; + signed int b : 3; + signed int c : 3; +} T; + +int failures = 0; + +T *f(T *t) +{ + t->a = 0; + t->c = 0; + return t; +} + +void test(void) +{ + T a = { 7, 0, 7 }; + T *p = &a; + + a.b = f(p)->a; + + if (a.a != 0) { + ++failures; + } + printf("%d\n", a.a); + + if (p->b != 0) { + ++failures; + } + printf("%d\n", p->b); + + if ((&a)->c != 0) { + ++failures; + } + printf("%d\n", (&a)->c); + + printf("Failures: %d\n", failures); +} + +int main(void) +{ + test(); + return failures; +} From b08dc28cc1cb2241515d69ccdd89a3ac31afc788 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 22 May 2021 22:34:52 +0200 Subject: [PATCH 0883/2710] another testcase related to issue #1462 --- test/todo/bug1462-3.c | 95 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 test/todo/bug1462-3.c diff --git a/test/todo/bug1462-3.c b/test/todo/bug1462-3.c new file mode 100644 index 000000000..b75d568b9 --- /dev/null +++ b/test/todo/bug1462-3.c @@ -0,0 +1,95 @@ + +/* issue #1462 - Bit-fields are still broken */ +/* More testson "op= expression result value" that a naive fix might fail with */ + +#include <stdio.h> + +typedef struct { + signed int a : 3; + unsigned int b : 3; + signed int c : 3; + unsigned int d : 3; +} T1; + +typedef struct { + signed int a : 3; + signed int b : 3; + signed int c : 3; + signed int d : 3; +} T2; + + +int failures1 = 0; +int failures2 = 0; + +void test1(void) +{ + T1 a = { 3, 3, 3, 3 }; + int i; + + i = a.a += a.b + a.c; + if (i != 1) { + ++failures1; + } + printf("i = %d, a.a = %d\n", i, a.a); + + i = a.b *= -1; + if (i != 5 || a.b != 5) { + ++failures1; + } + printf("i = %d, a.b = %d\n", i, a.b); + + i = a.c * -1; + if (i != -3) { + ++failures1; + } + printf("i = %d, a.c = %d\n", i, a.c); + + i = a.d ^= -1; + if (i != 4 || a.d != 4) { + ++failures1; + } + printf("i = %d, a.d = %d\n", i, a.d); + + printf("Failures: %d\n", failures1); +} + +void test2(void) +{ + T2 b = { 3, 3, 4, 4 }; + int i; + + i = b.a++; + if (i != 3 || b.a != -4) { + ++failures2; + } + printf("i = %d, b.a = %d\n", i, b.a); + + i = ++b.b; + if (i != -4 || b.b != -4) { + ++failures2; + } + printf("i = %d, b.b = %d\n", i, b.b); + + i = b.c--; + if (i != -4 || b.c != 3) { + ++failures2; + } + printf("i = %d, b.c = %d\n", i, b.c); + + i = --b.d; + if (i != 3 || b.d != 3) { + ++failures2; + } + printf("i = %d, b.d = %d\n", i, b.d); + + printf("Failures: %d\n", failures2); +} + +int main(void) +{ + test1(); + test2(); + return failures1 + failures2; +} + From 0db23a8951ee43e8fdcb4377a58b045af6142983 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 23 May 2021 18:55:06 +0200 Subject: [PATCH 0884/2710] testcase for issue #263 --- test/val/bug263.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 test/val/bug263.c diff --git a/test/val/bug263.c b/test/val/bug263.c new file mode 100644 index 000000000..6f3f8f57e --- /dev/null +++ b/test/val/bug263.c @@ -0,0 +1,49 @@ + +/* issue #263 - cc65 miscompiles w/ a static variable and -O */ + +#include <stdint.h> +#include <stdio.h> + +int failures = 0; + +void __fastcall__ set_vram_update(unsigned char *ptr) +{ + printf("set_vram_update: %04x\n", ptr); + if (ptr != NULL) { + failures++; + } +} + +unsigned char __fastcall__ ppu_wait_nmi(void) +{ + // we need to make sure somehow the akku is not zero before the break + return 0x1234; +} + +unsigned char ctrl, ret, i; + +unsigned char gameloop (void) +{ + ctrl = 0; + ret = 0; + while(1) { + if (ctrl & 1) { + while (--i) { + ppu_wait_nmi(); + } + break; + } + ctrl = 1; + } + // This will pass garbage, not NULL. + set_vram_update(NULL); + return ret; +} + +int main(void) +{ + gameloop(); + printf("failures: %d\n", failures); + return failures; +} + From db395e59887fedbc3f690c0e13b076e0c24885a4 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 23 May 2021 13:31:28 -0500 Subject: [PATCH 0885/2710] Improved sample program symDisplay.c --- samples/symDisplay.c | 41 ++++++------------------------ samples/tutorial/sym1/symDisplay.c | 41 ++++++------------------------ 2 files changed, 16 insertions(+), 66 deletions(-) diff --git a/samples/symDisplay.c b/samples/symDisplay.c index 8a72d5863..fa94ce598 100644 --- a/samples/symDisplay.c +++ b/samples/symDisplay.c @@ -184,12 +184,8 @@ void main (void) { set_D2( get_D3() ); set_D3( get_D4() ); set_D4( get_D5() ); - set_D5( get_D6() ); - set_D6( DISP_M_1 ); - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } - set_D6( DISP_M_2 ); + set_D5( DISP_M_1 ); + set_D6( DISP_M_2 ); break; case 'm': set_D0( get_D1() ); @@ -197,12 +193,8 @@ void main (void) { set_D2( get_D3() ); set_D3( get_D4() ); set_D4( get_D5() ); - set_D5( get_D6() ); - set_D6( DISP_M_1 ); - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } - set_D6( DISP_M_2 ); + set_D5( DISP_M_1 ); + set_D6( DISP_M_2 ); break; case 'N': set_D6( DISP_n ); @@ -258,11 +250,7 @@ void main (void) { set_D2( get_D3() ); set_D3( get_D4() ); set_D4( get_D5() ); - set_D5( get_D6() ); - set_D6( DISP_M_1 ); - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } + set_D5( DISP_V_1 ); set_D6( DISP_V_2 ); break; case 'v': @@ -271,11 +259,7 @@ void main (void) { set_D2( get_D3() ); set_D3( get_D4() ); set_D4( get_D5() ); - set_D5( get_D6() ); - set_D6( DISP_M_1 ); - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } + set_D5( DISP_V_1 ); set_D6( DISP_V_2 ); break; case 'W': @@ -284,11 +268,7 @@ void main (void) { set_D2( get_D3() ); set_D3( get_D4() ); set_D4( get_D5() ); - set_D5( get_D6() ); - set_D6( DISP_M_1 ); - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } + set_D5( DISP_W_1 ); set_D6( DISP_W_2 ); break; case 'w': @@ -297,11 +277,7 @@ void main (void) { set_D2( get_D3() ); set_D3( get_D4() ); set_D4( get_D5() ); - set_D5( get_D6() ); - set_D6( DISP_M_1 ); - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } + set_D5( DISP_W_1 ); set_D6( DISP_W_2 ); break; case 'Y': @@ -382,4 +358,3 @@ void main (void) { return; } - diff --git a/samples/tutorial/sym1/symDisplay.c b/samples/tutorial/sym1/symDisplay.c index 8a72d5863..fa94ce598 100644 --- a/samples/tutorial/sym1/symDisplay.c +++ b/samples/tutorial/sym1/symDisplay.c @@ -184,12 +184,8 @@ void main (void) { set_D2( get_D3() ); set_D3( get_D4() ); set_D4( get_D5() ); - set_D5( get_D6() ); - set_D6( DISP_M_1 ); - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } - set_D6( DISP_M_2 ); + set_D5( DISP_M_1 ); + set_D6( DISP_M_2 ); break; case 'm': set_D0( get_D1() ); @@ -197,12 +193,8 @@ void main (void) { set_D2( get_D3() ); set_D3( get_D4() ); set_D4( get_D5() ); - set_D5( get_D6() ); - set_D6( DISP_M_1 ); - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } - set_D6( DISP_M_2 ); + set_D5( DISP_M_1 ); + set_D6( DISP_M_2 ); break; case 'N': set_D6( DISP_n ); @@ -258,11 +250,7 @@ void main (void) { set_D2( get_D3() ); set_D3( get_D4() ); set_D4( get_D5() ); - set_D5( get_D6() ); - set_D6( DISP_M_1 ); - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } + set_D5( DISP_V_1 ); set_D6( DISP_V_2 ); break; case 'v': @@ -271,11 +259,7 @@ void main (void) { set_D2( get_D3() ); set_D3( get_D4() ); set_D4( get_D5() ); - set_D5( get_D6() ); - set_D6( DISP_M_1 ); - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } + set_D5( DISP_V_1 ); set_D6( DISP_V_2 ); break; case 'W': @@ -284,11 +268,7 @@ void main (void) { set_D2( get_D3() ); set_D3( get_D4() ); set_D4( get_D5() ); - set_D5( get_D6() ); - set_D6( DISP_M_1 ); - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } + set_D5( DISP_W_1 ); set_D6( DISP_W_2 ); break; case 'w': @@ -297,11 +277,7 @@ void main (void) { set_D2( get_D3() ); set_D3( get_D4() ); set_D4( get_D5() ); - set_D5( get_D6() ); - set_D6( DISP_M_1 ); - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } + set_D5( DISP_W_1 ); set_D6( DISP_W_2 ); break; case 'Y': @@ -382,4 +358,3 @@ void main (void) { return; } - From ae9434e02e36cc629c76f68b5d9e18b7ddcb0dbb Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 23 May 2021 15:22:33 -0500 Subject: [PATCH 0886/2710] seven-segment display update --- include/symio.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/symio.h b/include/symio.h index bd90a42f9..73b3ce18e 100644 --- a/include/symio.h +++ b/include/symio.h @@ -131,7 +131,7 @@ int __fastcall__ vsscanf (const char* s, const char* format, va_list ap); #define DISP_APOSTR 0x20 // ''' #define DISP_EQUAL 0x41 // '=' #define DISP_3_BAR 0x49 // '=' -#define DISP_BOTTOM 0x04 // '_' +#define DISP_BOTTOM 0x08 // '_' #define DISP_TOP 0x01 // Top segment #define DISP_LEFT 0x30 // '|' Left side, both segments #define DISP_RIGHT 0x06 // '|' Right side, both segments From adda9438d25212740e169443936ba3a79e2b6745 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 24 May 2021 13:53:14 +0200 Subject: [PATCH 0887/2710] testcase for issue #1357 --- test/misc/Makefile | 6 ++++++ test/misc/bug1357.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 test/misc/bug1357.c diff --git a/test/misc/Makefile b/test/misc/Makefile index b17c69f5c..c8b130ec4 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -106,6 +106,12 @@ $(WORKDIR)/bug1263.$1.$2.prg: bug1263.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1263.$1.$2.prg) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) +# should compile, but gives an error +$(WORKDIR)/bug1357.$1.$2.prg: bug1357.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." + $(if $(QUIET),echo misc/bug1357.$1.$2.prg) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # this one requires --std=c89, it fails with --std=c99 $(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1265.$1.$2.prg) diff --git a/test/misc/bug1357.c b/test/misc/bug1357.c new file mode 100644 index 000000000..40415f868 --- /dev/null +++ b/test/misc/bug1357.c @@ -0,0 +1,30 @@ + +/* issue #1357 - X Macros don't work with C preprocessor */ + +#define OPCODES(X) \ + X(PUSHNIL) \ + X(PUSHTRUE) \ + X(PUSHFALSE) + +enum { +#define X(op) op, +OPCODES(X) +#undef X + N_OPS +}; + +/* cc65 -E bug1357.c -o bug1357.c.pre + should produce something like this: + +enum { +PUSHNIL, +PUSHTRUE, +PUSHFALSE, + N_OPS +}; +*/ + +int main(void) +{ + return 0; +} From ae3d3a4b5dd499406713e42254dc4b1626fd10dd Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 24 May 2021 13:53:44 +0200 Subject: [PATCH 0888/2710] make readme a bit more clear (hopefully) --- test/readme.txt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/test/readme.txt b/test/readme.txt index 0523482fd..49ae363cc 100644 --- a/test/readme.txt +++ b/test/readme.txt @@ -1,6 +1,13 @@ This directory contains test code for automatic regression testing of the CC65 -compiler. +compiler and tools. +/asm - contains the assembler regression tests + +/dasm - contains the disassembler regression tests + + +/val, /ref and /err generally contain the tests that are used to verify that the +compiler is working as expected (when the tests behave as described): /val - The bulk of tests are contained here, individual tests should exit with an exit code of EXIT_SUCCESS when they pass, or EXIT_FAILURE on error. @@ -9,6 +16,9 @@ compiler. /err - contains tests that MUST NOT compile + +/todo and /misc generally contain the tests that fail because of known bugs: + /todo - These tests fail due to open compiler issues. The makefile in this directory _expects_ the tests to fail, because of @@ -16,9 +26,6 @@ compiler. moved to /val in the PR fixing the issue, which will make CI pass again. No changes to makefiles are required! -/asm - contains the assembler regression tests - -/dasm - contains the disassembler regression tests /misc - a few tests that need special care of some sort From 022935320c61ac491cf20afe887b30f1534d0117 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 24 May 2021 14:30:10 +0200 Subject: [PATCH 0889/2710] test for issue #897 --- test/val/bug897.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 test/val/bug897.c diff --git a/test/val/bug897.c b/test/val/bug897.c new file mode 100644 index 000000000..eaf751441 --- /dev/null +++ b/test/val/bug897.c @@ -0,0 +1,52 @@ + +/* issue #897 - __asm__()-referenced code-labels are generated for only branches and jumps */ + +#include <stdlib.h> +#include <stdio.h> + +static unsigned char *srcptr, *dstptr; + +#define COPY_LEN 16 + +void test(void) +{ + asm("lda %v", srcptr); + asm("sta %g+1", s2b_copy_from); + asm("lda %v+1", srcptr); + asm("sta %g+2", s2b_copy_from); + + asm("lda %v", dstptr); + asm("sta %g+1", s2b_copy_to); + asm("lda %v+1", dstptr); + asm("sta %g+2", s2b_copy_to); + + asm("ldy #%b", COPY_LEN-1); +s2b_copy_from: + asm("lda $FFFF,y"); +s2b_copy_to: + asm("sta $FFFF,y"); + asm("dey"); + asm("bpl %g", s2b_copy_from); +} + +unsigned char src[16] = "0123456789abcdef"; +unsigned char dest[16]; + +int failures = 0; + +unsigned char i; + +int main(void) +{ + srcptr = src; + dstptr = dest; + test(); + for (i = 0; i < COPY_LEN; i++) { + printf("%d %02x %02x\n", i, src[i], dest[i]); + if (src[i] != dest[i]) { + failures++; + } + } + printf("failures: %d\n", failures); + return failures; +} From 65c640d2cf1059e97e518feb3a3a348a70a95636 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 24 May 2021 15:15:07 +0200 Subject: [PATCH 0890/2710] added missing atari5200 target --- samples/Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/samples/Makefile b/samples/Makefile index f1e7a1e0b..7e5c1934d 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -190,6 +190,9 @@ EXELIST_atarixl = $(EXELIST_atari) EXELIST_atari2600 = \ atari2600hello +EXELIST_atari5200 = \ + notavailable + EXELIST_atmos = \ ascii \ hello \ From 30830e1348f516626aab482b311e741428f411bc Mon Sep 17 00:00:00 2001 From: Polluks <polluks@sdf.lonestar.org> Date: Sun, 23 May 2021 10:19:00 +0200 Subject: [PATCH 0891/2710] Added missing Creativision functions --- doc/funcref.sgml | 112 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 2cb8bbf44..792a51741 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -298,6 +298,16 @@ function. </itemize> +<sect1><tt/creativision.h/<label id="creativision.h"><p> + +<itemize> +<item><ref id="bios_playsound" name="bios_playsound"> +<item><ref id="psg_delay" name="psg_delay"> +<item><ref id="psg_outb" name="psg_outb"> +<item><ref id="psg_silence" name="psg_silence"> +</itemize> + + <sect1><tt/ctype.h/<label id="ctype.h"><p> <itemize> @@ -1659,6 +1669,41 @@ used in presence of a prototype. </quote> +<sect1>bios_playsound<label id="bios_playsound"><p> + +<quote> +<descrip> +<tag/Function/Play sound sequence. +<tag/Header/<tt/<ref id="creativision.h" name="creativision.h">/ +<tag/Declaration/<tt/void __fastcall__ bios_playsound(void *a, unsigned char b);/ +<tag/Description/The function may play chords based on a BASIC statement, +note and duration are defined in the manual chapter 13 on page 102 resp. 103. +<tag/Notes/<itemize> +<item>BASIC has a fixed tempo of 18. +<item>The function is only available as fastcall function, so it may only be +used in presence of a prototype. +</itemize> +<tag/Availability/Creativision +<tag/See also/ +<ref id="psg_delay" name="psg_delay">, +<ref id="psg_outb" name="psg_outb"> +<tag/Example/ +<verb> +static const unsigned char notes[] = { + 0x77, 0x4F, 0x37, + 0x4B, 0x05, 0xBB, + 0x4F, 0x27, 0x83, + 0x93, 0x9B, 0x93, + 0x17, 0x4F, 0x96, + 0xAB, 0x17, 0x4F, + 0x0E +}; +bios_playsound (notes, sizeof notes); +</verb> +</descrip> +</quote> + + <sect1>bgcolor<label id="bgcolor"><p> <quote> @@ -5769,6 +5814,73 @@ be used in presence of a prototype. </quote> +<sect1>psg_delay<label id="psg_delay"><p> + +<quote> +<descrip> +<tag/Function/Delay for a short period of time. +<tag/Header/<tt/<ref id="creativision.h" name="creativision.h">/ +<tag/Declaration/<tt/void __fastcall__ psg_delay(unsigned char b);/ +<tag/Description/The function specifies how long each note or pause between +notes should last. +<tag/Notes/<itemize> +<item>The function is only available as fastcall function, so it may only be +used in presence of a prototype. +</itemize> +<tag/Availability/Creativision +<tag/See also/ +<ref id="psg_outb" name="psg_outb">, +<ref id="psg_silence" name="psg_silence"> +<tag/Example/None. +</descrip> +</quote> + + +<sect1>psg_outb<label id="psg_outb"><p> + +<quote> +<descrip> +<tag/Function/Output a byte. +<tag/Header/<tt/<ref id="creativision.h" name="creativision.h">/ +<tag/Declaration/<tt/void __fastcall__ psg_outb(unsigned char b);/ +<tag/Description/The function will send a PSG byte and wait for acknowledge. +<tag/Notes/<itemize> +<item>The function is only available as fastcall function, so it may only be +used in presence of a prototype. +</itemize> +<tag/Availability/Creativision +<tag/See also/ +<ref id="psg_delay" name="psg_delay">, +<ref id="psg_silence" name="psg_silence"> +<tag/Example/ +<verb> +psg_outb (0x80); // Latch frequency +psg_outb (0x07); // Frequency byte 2 +psg_outb (0x90); // Channel 0 full volume +</verb> +</descrip> +</quote> + + +<sect1>psg_silence<label id="psg_silence"><p> + +<quote> +<descrip> +<tag/Function/Set volume off on each channel. +<tag/Header/<tt/<ref id="creativision.h" name="creativision.h">/ +<tag/Declaration/<tt/void psg_silence(void);/ +<tag/Description/The function sends $9F, $BF, $DF, $FF to the PSG. +<tag/Notes/<itemize> +</itemize> +<tag/Availability/Creativision +<tag/See also/ +<ref id="psg_delay" name="psg_delay">, +<ref id="psg_outb" name="psg_outb"> +<tag/Example/None. +</descrip> +</quote> + + <sect1>qsort<label id="qsort"><p> <quote> From 010eea12a2fe03d6fd41aca307076aed8d1299c0 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 25 May 2021 13:38:06 +0200 Subject: [PATCH 0892/2710] move test for issue #1211 into misc --- test/misc/Makefile | 6 ++++++ test/{err => misc}/bug1211-ice-move-refs-2.c | 0 2 files changed, 6 insertions(+) rename test/{err => misc}/bug1211-ice-move-refs-2.c (100%) diff --git a/test/misc/Makefile b/test/misc/Makefile index c8b130ec4..e6c58c5a4 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -112,6 +112,12 @@ $(WORKDIR)/bug1357.$1.$2.prg: bug1357.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1357.$1.$2.prg) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) +# should compile, but compiler exits with internal error +$(WORKDIR)/bug1211-ice-move-refs-2.$1.$2.prg: bug1211-ice-move-refs-2.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." + $(if $(QUIET),echo misc/bug1211-ice-move-refs-2.$1.$2.prg) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # this one requires --std=c89, it fails with --std=c99 $(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1265.$1.$2.prg) diff --git a/test/err/bug1211-ice-move-refs-2.c b/test/misc/bug1211-ice-move-refs-2.c similarity index 100% rename from test/err/bug1211-ice-move-refs-2.c rename to test/misc/bug1211-ice-move-refs-2.c From 6bedade593e2b34fae4f86e11579ca92d18d00f6 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 29 May 2021 08:37:38 -0400 Subject: [PATCH 0893/2710] Fixed the creativision function prototypes. Added const to a pointer parameter. --- include/creativision.h | 8 ++++---- libsrc/creativision/psg.s | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/creativision.h b/include/creativision.h index 40b9ee03a..6910ee0cf 100644 --- a/include/creativision.h +++ b/include/creativision.h @@ -70,9 +70,9 @@ #define COLOR_WHITE 15 /* Protos */ -void __fastcall__ psg_outb(unsigned char b); -void __fastcall__ psg_delay(unsigned char b); -void psg_silence(void); -void __fastcall__ bios_playsound(void *a, unsigned char b); +void __fastcall__ psg_outb (unsigned char b); +void __fastcall__ psg_delay (unsigned char b); +void psg_silence (void); +void __fastcall__ bios_playsound (const void *a, unsigned char b); #endif /* #ifndef _CVISION_H */ diff --git a/libsrc/creativision/psg.s b/libsrc/creativision/psg.s index a32e87f02..18f4ffe2e 100644 --- a/libsrc/creativision/psg.s +++ b/libsrc/creativision/psg.s @@ -1,7 +1,7 @@ -; void __fastcall__ psg_outb( unsigned char b ); -; void __fastcall__ psg_delayms( unsigned char c); -; void __fastcall__ bios_playsound( void *b, unsigned char c); -; void psg_silence( void ); +; void __fastcall__ psg_outb (unsigned char b); +; void __fastcall__ psg_delay (unsigned char c); +; void __fastcall__ bios_playsound (const void *b, unsigned char c); +; void psg_silence (void); .export _psg_outb, _psg_silence, _psg_delay .export _bios_playsound From c0f29993e06c1fbe81f7367e8445f51db05d5fc9 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 29 May 2021 08:53:13 -0400 Subject: [PATCH 0894/2710] Fixed the descriptions of the Creativision's functions. Fixed bios_playsound()'s position in the alphabetical list of functions. --- doc/funcref.sgml | 112 ++++++++++++++++++++++++++--------------------- 1 file changed, 61 insertions(+), 51 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 792a51741..28faa068a 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -1669,41 +1669,6 @@ used in presence of a prototype. </quote> -<sect1>bios_playsound<label id="bios_playsound"><p> - -<quote> -<descrip> -<tag/Function/Play sound sequence. -<tag/Header/<tt/<ref id="creativision.h" name="creativision.h">/ -<tag/Declaration/<tt/void __fastcall__ bios_playsound(void *a, unsigned char b);/ -<tag/Description/The function may play chords based on a BASIC statement, -note and duration are defined in the manual chapter 13 on page 102 resp. 103. -<tag/Notes/<itemize> -<item>BASIC has a fixed tempo of 18. -<item>The function is only available as fastcall function, so it may only be -used in presence of a prototype. -</itemize> -<tag/Availability/Creativision -<tag/See also/ -<ref id="psg_delay" name="psg_delay">, -<ref id="psg_outb" name="psg_outb"> -<tag/Example/ -<verb> -static const unsigned char notes[] = { - 0x77, 0x4F, 0x37, - 0x4B, 0x05, 0xBB, - 0x4F, 0x27, 0x83, - 0x93, 0x9B, 0x93, - 0x17, 0x4F, 0x96, - 0xAB, 0x17, 0x4F, - 0x0E -}; -bios_playsound (notes, sizeof notes); -</verb> -</descrip> -</quote> - - <sect1>bgcolor<label id="bgcolor"><p> <quote> @@ -1729,6 +1694,44 @@ used in presence of a prototype. </quote> +<sect1>bios_playsound<label id="bios_playsound"><p> + +<quote> +<descrip> +<tag/Function/Play a sequence of musical notes. +<tag/Header/<tt/<ref id="creativision.h" name="creativision.h">/ +<tag/Declaration/<tt/void __fastcall__ bios_playsound (const void *a, unsigned char b);/ +<tag/Description/The function plays chords based on a BASIC statement. Notes and +durations are defined in the BASIC manual, chapter 13 on pages 102 resp. 103. +<tag/Notes/<itemize> +<item>BASIC has a fixed tempo of 18. +<item>The function is only available as fastcall function, so it may only be +used in presence of a prototype. +</itemize> +<tag/Availability/cc65 +<tag/See also/ +<ref id="psg_delay" name="psg_delay">, +<ref id="psg_outb" name="psg_outb"> +<tag/Example/<verb> +#include <creativision.h> +void main (void) +{ + static const unsigned char notes[] = { + 0x77, 0x4F, 0x37, + 0x4B, 0x05, 0xBB, + 0x4F, 0x27, 0x83, + 0x93, 0x9B, 0x93, + 0x17, 0x4F, 0x96, // played backwards + 0xAB, 0x17, 0x4F, // three-note chords + 0x0E // tempo + }; + bios_playsound (notes, sizeof notes); +} +</verb> +</descrip> +</quote> + + <sect1>bordercolor<label id="bordercolor"><p> <quote> @@ -1823,7 +1826,7 @@ be used in presence of a prototype. <item>The function is specific to the C128. <item>The function will not return to the caller. </itemize> -<tag/Availability/C128 +<tag/Availability/cc65 <tag/Example/None. </descrip> </quote> @@ -5820,14 +5823,14 @@ be used in presence of a prototype. <descrip> <tag/Function/Delay for a short period of time. <tag/Header/<tt/<ref id="creativision.h" name="creativision.h">/ -<tag/Declaration/<tt/void __fastcall__ psg_delay(unsigned char b);/ +<tag/Declaration/<tt/void __fastcall__ psg_delay (unsigned char b);/ <tag/Description/The function specifies how long each note or pause between notes should last. <tag/Notes/<itemize> <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> -<tag/Availability/Creativision +<tag/Availability/cc65 <tag/See also/ <ref id="psg_outb" name="psg_outb">, <ref id="psg_silence" name="psg_silence"> @@ -5840,23 +5843,29 @@ used in presence of a prototype. <quote> <descrip> -<tag/Function/Output a byte. +<tag/Function/Output a byte to the PSG. <tag/Header/<tt/<ref id="creativision.h" name="creativision.h">/ -<tag/Declaration/<tt/void __fastcall__ psg_outb(unsigned char b);/ -<tag/Description/The function will send a PSG byte and wait for acknowledge. +<tag/Declaration/<tt/void __fastcall__ psg_outb (unsigned char b);/ +<tag/Description/The function sends a byte to the Programmable Sound +Generator, then waits for the PSG to acknowledge. <tag/Notes/<itemize> <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> -<tag/Availability/Creativision +<tag/Availability/cc65 <tag/See also/ <ref id="psg_delay" name="psg_delay">, <ref id="psg_silence" name="psg_silence"> -<tag/Example/ -<verb> -psg_outb (0x80); // Latch frequency -psg_outb (0x07); // Frequency byte 2 -psg_outb (0x90); // Channel 0 full volume +<tag/Example/<verb> +#include <creativision.h> +void main (void) +{ + psg_outb (0x80); // Latch frequency + psg_outb (0x07); // Frequency byte 2 + psg_outb (0x90); // Channel 0 full volume + psg_delay (100); + psg_silence (); +} </verb> </descrip> </quote> @@ -5866,13 +5875,14 @@ psg_outb (0x90); // Channel 0 full volume <quote> <descrip> -<tag/Function/Set volume off on each channel. +<tag/Function/Set volume off on each PSG channel. <tag/Header/<tt/<ref id="creativision.h" name="creativision.h">/ -<tag/Declaration/<tt/void psg_silence(void);/ -<tag/Description/The function sends $9F, $BF, $DF, $FF to the PSG. +<tag/Declaration/<tt/void psg_silence (void);/ +<tag/Description/The function resets the Programmable Sound Generator, +then sends $9F, $BF, $DF, $FF to the PSG. <tag/Notes/<itemize> </itemize> -<tag/Availability/Creativision +<tag/Availability/cc65 <tag/See also/ <ref id="psg_delay" name="psg_delay">, <ref id="psg_outb" name="psg_outb"> From ee5014c5952cb0a50f0e870911941694fee291d6 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 29 May 2021 09:04:47 -0400 Subject: [PATCH 0895/2710] Simplified the Supervision "hello world" sample program. --- samples/supervisionhello.c | 134 +++++++++++++++++++------------------ 1 file changed, 69 insertions(+), 65 deletions(-) diff --git a/samples/supervisionhello.c b/samples/supervisionhello.c index db2b5f66c..ed03e82f3 100644 --- a/samples/supervisionhello.c +++ b/samples/supervisionhello.c @@ -3,89 +3,93 @@ /* Watara Supervision sample C program */ /* */ /* Fabrizio Caruso (fabrizio_caruso@hotmail.com), 2019 */ +/* Greg King (greg.king5@verizon.net), 2021 */ /* */ /*****************************************************************************/ #include <supervision.h> -#include <peekpoke.h> +#include <string.h> -// Number of bytes per screen line (Remark: Last 8 bytes are not displayed) -#define BYTES_PER_LINE 48 +/* Number of words per screen line (Remark: Last 4 words aren't displayed) */ +#define WORDS_PER_LINE (160/8+4) -// Character definitions in 8x8 format -const unsigned char h_char[] = {0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00}; -const unsigned char e_char[] = {0x7E,0x60,0x60,0x78,0x60,0x60,0x7E,0x00}; -const unsigned char l_char[] = {0x60,0x60,0x60,0x60,0x60,0x60,0x7E,0x00}; -const unsigned char o_char[] = {0x3C,0x66,0x66,0x66,0x66,0x66,0x3C,0x00}; -const unsigned char w_char[] = {0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00}; -const unsigned char r_char[] = {0x7C,0x66,0x66,0x7C,0x78,0x6C,0x66,0x00}; -const unsigned char d_char[] = {0x78,0x6C,0x66,0x66,0x66,0x6C,0x78,0x00}; +struct sv_vram { + unsigned int v[160/8][8][WORDS_PER_LINE]; +}; +#define SV_VRAM ((*(struct sv_vram *)0x4000).v) -void clear_screen(void) +/* Character definitions in 8x8 format */ +/* That format gives us a screen of 20 columns and 20 rows */ +static const unsigned char h_char[] = {0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00}; +static const unsigned char e_char[] = {0x7E,0x60,0x60,0x78,0x60,0x60,0x7E,0x00}; +static const unsigned char l_char[] = {0x60,0x60,0x60,0x60,0x60,0x60,0x7E,0x00}; +static const unsigned char o_char[] = {0x3C,0x66,0x66,0x66,0x66,0x66,0x3C,0x00}; +static const unsigned char w_char[] = {0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00}; +static const unsigned char r_char[] = {0x7C,0x66,0x66,0x7C,0x78,0x6C,0x66,0x00}; +static const unsigned char d_char[] = {0x78,0x6C,0x66,0x66,0x66,0x6C,0x78,0x00}; + +static void clear_screen(void) { - unsigned short i; - - for(i=0;i<0x2000;++i) + memset(SV_VIDEO, 0, 0x2000); +} + +/* Necessary conversion to have 2 bits per pixel with darkest hue */ +/* Remark: The Supervision uses 2 bits per pixel, and bits are mapped into pixels in reversed order */ +static unsigned int __fastcall__ double_reversed_bits(unsigned char) +{ + __asm__("stz ptr2"); + __asm__("stz ptr2+1"); + __asm__("ldy #$08"); +L1: __asm__("lsr a"); + __asm__("php"); + __asm__("rol ptr2"); + __asm__("rol ptr2+1"); + __asm__("plp"); + __asm__("rol ptr2"); + __asm__("rol ptr2+1"); + __asm__("dey"); + __asm__("bne %g", L1); + __asm__("lda ptr2"); + __asm__("ldx ptr2+1"); + return __AX__; +} + +static void display_char(const unsigned char x, const unsigned char y, const unsigned char *ch) +{ + unsigned char k; + + for(k=0;k<8;++k) { - POKE(SV_VIDEO+i,0); + SV_VRAM[y][k][x] = double_reversed_bits(ch[k]); } } -// Necessary conversion to have 2 bits per pixel with darkest hue -// Remark: The Supervision uses 2 bits per pixel and bits are mapped into pixel in reversed order -unsigned char reversed_map_one_to_two_lookup[16] = -{ - 0x00, 0xC0, 0x30, 0xF0, 0x0C, 0xCC, 0x3C, 0xFC, - 0x03, 0xC3, 0x33, 0xF3, 0x0F, 0xCF, 0x3F, 0xFF -}; - -unsigned char left_map_one_to_two(unsigned char n) -{ - return reversed_map_one_to_two_lookup[n >> 4]; -} - -unsigned char right_map_one_to_two(unsigned char n) -{ - return reversed_map_one_to_two_lookup[n&0x0F]; -} - -void display_char(const unsigned char x, const unsigned char y, const unsigned char *ch) -{ - unsigned char k; - - for(k=0;k<8;++k) - { \ - SV_VIDEO[2*(y)+BYTES_PER_LINE*k+BYTES_PER_LINE*(x<<3)] = left_map_one_to_two(ch[k]); - SV_VIDEO[2*(y)+BYTES_PER_LINE*k+BYTES_PER_LINE*(x<<3)+1] = right_map_one_to_two(ch[k]); - } -} - -void init_lcd(void) +static void init_lcd(void) { SV_LCD.width = 160; SV_LCD.height = 160; } -int main() -{ - init_lcd(); - clear_screen(); - - display_char(3,2, h_char); - display_char(3,3, e_char); - display_char(3,4, l_char); - display_char(3,5, l_char); - display_char(3,6, o_char); - - display_char(3,8, w_char); - display_char(3,9, o_char); - display_char(3,10,r_char); - display_char(3,11,l_char); - display_char(3,12,d_char); +static void hello(unsigned char x, unsigned char y) +{ + display_char(x+ 0,y,h_char); + display_char(x+ 1,y,e_char); + display_char(x+ 2,y,l_char); + display_char(x+ 3,y,l_char); + display_char(x+ 4,y,o_char); - while(1) {}; - - return 0; + display_char(x+ 6,y,w_char); + display_char(x+ 7,y,o_char); + display_char(x+ 8,y,r_char); + display_char(x+ 9,y,l_char); + display_char(x+10,y,d_char); } +void main(void) +{ + init_lcd(); + clear_screen(); + hello(2,3); + hello(7,16); +} From 0d3c827d803c573c9aa4a361658665a912e27402 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 30 May 2021 03:51:11 -0400 Subject: [PATCH 0896/2710] Made the C preprocessor #if nesting stack have 256 levels. Closes #1523. --- src/cc65/preproc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 37073e784..a607e3217 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -71,7 +71,7 @@ unsigned char Preprocessing = 0; /* Management data for #if */ -#define MAX_IFS 64 +#define MAX_IFS 256 #define IFCOND_NONE 0x00U #define IFCOND_SKIP 0x01U #define IFCOND_ELSE 0x02U From fe003eedd4e3554ec12ad4a234ce885f96e39c99 Mon Sep 17 00:00:00 2001 From: IrgendwerA8 <c.krueger.b@web.de> Date: Mon, 31 May 2021 00:24:46 +0200 Subject: [PATCH 0897/2710] Fix Atari keyboard code for cursor up key --- asminc/atari.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asminc/atari.inc b/asminc/atari.inc index 7c46b3252..c2a210ea0 100644 --- a/asminc/atari.inc +++ b/asminc/atari.inc @@ -924,7 +924,7 @@ KEY_QUESTIONMARK = KEY_SLASH | KEY_SHIFT KEY_CLEAR = KEY_LESSTHAN | KEY_SHIFT KEY_INSERT = KEY_GREATERTHAN | KEY_SHIFT -KEY_UP = KEY_UNDERLINE | KEY_CTRL +KEY_UP = KEY_DASH | KEY_CTRL KEY_DOWN = KEY_EQUALS | KEY_CTRL KEY_LEFT = KEY_PLUS | KEY_CTRL KEY_RIGHT = KEY_ASTERISK | KEY_CTRL From 0bfa13722bb72d8e8f99606f3ecddeedf360149c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 18 Sep 2020 20:23:02 +0800 Subject: [PATCH 0898/2710] More funcinfo on register usage fixes. --- src/cc65/codeent.c | 4 + src/cc65/codeinfo.c | 586 ++++++++++++++++++++++------------------- src/cc65/codeinfo.h | 3 + src/cc65/codeoptutil.c | 105 +++++--- 4 files changed, 386 insertions(+), 312 deletions(-) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index dd2000db0..4f257a22e 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -172,6 +172,10 @@ static void SetUseChgInfo (CodeEntry* E, const OPCDesc* D) if (Info && Info->ByteUse != REG_NONE) { /* These addressing modes will never change the zp loc */ E->Use |= Info->WordUse; + + if ((E->Use & REG_SP) != 0) { + E->Use |= SLV_IND; + } } break; diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index 46a7d76c6..88f8a5138 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -82,269 +82,296 @@ struct FuncInfo { unsigned Chg; /* Changed/destroyed registers */ }; -/* Note for the shift functions: Shifts are done modulo 32, so all shift +/* Functions that change the SP are regarded as using the SP as well. +** The callax/jmpvec functions may call a function that uses/changes more +** registers, so we should further check the info of the called function +** or just play it safe. +** Note for the shift functions: Shifts are done modulo 32, so all shift ** routines are marked to use only the A register. The remainder is ignored ** anyway. */ static const FuncInfo FuncInfoTable[] = { - { "addeq0sp", REG_AX, PSTATE_ALL | REG_AXY }, - { "addeqysp", REG_AXY, PSTATE_ALL | REG_AXY }, - { "addysp", REG_Y, PSTATE_ALL | REG_NONE }, - { "aslax1", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "aslax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "aslax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "aslax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "aslaxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "asleax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, - { "asleax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, - { "asleax3", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, - { "asleax4", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "asrax1", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "asrax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "asrax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "asrax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "asraxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "asreax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, - { "asreax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, - { "asreax3", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, - { "asreax4", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "bcasta", REG_A, PSTATE_ALL | REG_AX }, - { "bcastax", REG_AX, PSTATE_ALL | REG_AX }, - { "bcasteax", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, - { "bnega", REG_A, PSTATE_ALL | REG_AX }, - { "bnegax", REG_AX, PSTATE_ALL | REG_AX }, - { "bnegeax", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, - { "booleq", PSTATE_Z, PSTATE_ALL | REG_AX }, - { "boolge", PSTATE_N, PSTATE_ALL | REG_AX }, - { "boolgt", PSTATE_ZN, PSTATE_ALL | REG_AX }, - { "boolle", PSTATE_ZN, PSTATE_ALL | REG_AX }, - { "boollt", PSTATE_N, PSTATE_ALL | REG_AX }, - { "boolne", PSTATE_Z, PSTATE_ALL | REG_AX }, - { "booluge", PSTATE_C, PSTATE_ALL | REG_AX }, - { "boolugt", PSTATE_CZ, PSTATE_ALL | REG_AX }, - { "boolule", PSTATE_CZ, PSTATE_ALL | REG_AX }, - { "boolult", PSTATE_C, PSTATE_ALL | REG_AX }, - { "callax", REG_AX, PSTATE_ALL | REG_ALL }, - { "complax", REG_AX, PSTATE_ALL | REG_AX }, - { "decax1", REG_AX, PSTATE_ALL | REG_AX }, - { "decax2", REG_AX, PSTATE_ALL | REG_AX }, - { "decax3", REG_AX, PSTATE_ALL | REG_AX }, - { "decax4", REG_AX, PSTATE_ALL | REG_AX }, - { "decax5", REG_AX, PSTATE_ALL | REG_AX }, - { "decax6", REG_AX, PSTATE_ALL | REG_AX }, - { "decax7", REG_AX, PSTATE_ALL | REG_AX }, - { "decax8", REG_AX, PSTATE_ALL | REG_AX }, - { "decaxy", REG_AXY, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "deceaxy", REG_EAXY, PSTATE_ALL | REG_EAX }, - { "decsp1", REG_NONE, PSTATE_ALL | REG_Y }, - { "decsp2", REG_NONE, PSTATE_ALL | REG_A }, - { "decsp3", REG_NONE, PSTATE_ALL | REG_A }, - { "decsp4", REG_NONE, PSTATE_ALL | REG_A }, - { "decsp5", REG_NONE, PSTATE_ALL | REG_A }, - { "decsp6", REG_NONE, PSTATE_ALL | REG_A }, - { "decsp7", REG_NONE, PSTATE_ALL | REG_A }, - { "decsp8", REG_NONE, PSTATE_ALL | REG_A }, - { "incax1", REG_AX, PSTATE_ALL | REG_AX }, - { "incax2", REG_AX, PSTATE_ALL | REG_AX }, - { "incax3", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "incax4", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "incax5", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "incax6", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "incax7", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "incax8", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "incaxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "incsp1", REG_NONE, PSTATE_ALL | REG_NONE }, - { "incsp2", REG_NONE, PSTATE_ALL | REG_Y }, - { "incsp3", REG_NONE, PSTATE_ALL | REG_Y }, - { "incsp4", REG_NONE, PSTATE_ALL | REG_Y }, - { "incsp5", REG_NONE, PSTATE_ALL | REG_Y }, - { "incsp6", REG_NONE, PSTATE_ALL | REG_Y }, - { "incsp7", REG_NONE, PSTATE_ALL | REG_Y }, - { "incsp8", REG_NONE, PSTATE_ALL | REG_Y }, - { "laddeq", REG_EAXY|REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, - { "laddeq0sp", REG_EAX, PSTATE_ALL | REG_EAXY }, - { "laddeq1", REG_Y | REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, - { "laddeqa", REG_AY | REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, - { "laddeqysp", REG_EAXY, PSTATE_ALL | REG_EAXY }, - { "ldaidx", REG_AXY, PSTATE_ALL | REG_AX | REG_PTR1 }, - { "ldauidx", REG_AXY, PSTATE_ALL | REG_AX | REG_PTR1 }, - { "ldax0sp", REG_NONE, PSTATE_ALL | REG_AXY }, - { "ldaxi", REG_AX, PSTATE_ALL | REG_AXY | REG_PTR1 }, - { "ldaxidx", REG_AXY, PSTATE_ALL | REG_AXY | REG_PTR1 }, - { "ldaxysp", REG_Y, PSTATE_ALL | REG_AXY }, - { "ldeax0sp", REG_NONE, PSTATE_ALL | REG_EAXY }, - { "ldeaxi", REG_AX, PSTATE_ALL | REG_EAXY | REG_PTR1 }, - { "ldeaxidx", REG_AXY, PSTATE_ALL | REG_EAXY | REG_PTR1 }, - { "ldeaxysp", REG_Y, PSTATE_ALL | REG_EAXY }, - { "leaa0sp", REG_A, PSTATE_ALL | REG_AX }, - { "leaaxsp", REG_AX, PSTATE_ALL | REG_AX }, - { "lsubeq", REG_EAXY|REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, - { "lsubeq0sp", REG_EAX, PSTATE_ALL | REG_EAXY }, - { "lsubeq1", REG_Y | REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, - { "lsubeqa", REG_AY | REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, - { "lsubeqysp", REG_EAXY, PSTATE_ALL | REG_EAXY }, - { "mulax10", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, - { "mulax3", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, - { "mulax5", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, - { "mulax6", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, - { "mulax7", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, - { "mulax9", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, - { "negax", REG_AX, PSTATE_ALL | REG_AX }, - { "push0", REG_NONE, PSTATE_ALL | REG_AXY }, - { "push0ax", REG_AX, PSTATE_ALL | REG_Y | REG_SREG }, - { "push1", REG_NONE, PSTATE_ALL | REG_AXY }, - { "push2", REG_NONE, PSTATE_ALL | REG_AXY }, - { "push3", REG_NONE, PSTATE_ALL | REG_AXY }, - { "push4", REG_NONE, PSTATE_ALL | REG_AXY }, - { "push5", REG_NONE, PSTATE_ALL | REG_AXY }, - { "push6", REG_NONE, PSTATE_ALL | REG_AXY }, - { "push7", REG_NONE, PSTATE_ALL | REG_AXY }, - { "pusha", REG_A, PSTATE_ALL | REG_Y }, - { "pusha0", REG_A, PSTATE_ALL | REG_XY }, - { "pusha0sp", REG_NONE, PSTATE_ALL | REG_AY }, - { "pushaFF", REG_A, PSTATE_ALL | REG_Y }, - { "pushax", REG_AX, PSTATE_ALL | REG_Y }, - { "pushaysp", REG_Y, PSTATE_ALL | REG_AY }, - { "pushc0", REG_NONE, PSTATE_ALL | REG_A | REG_Y }, - { "pushc1", REG_NONE, PSTATE_ALL | REG_A | REG_Y }, - { "pushc2", REG_NONE, PSTATE_ALL | REG_A | REG_Y }, - { "pusheax", REG_EAX, PSTATE_ALL | REG_Y }, - { "pushl0", REG_NONE, PSTATE_ALL | REG_AXY }, - { "pushw", REG_AX, PSTATE_ALL | REG_AXY | REG_PTR1 }, - { "pushw0sp", REG_NONE, PSTATE_ALL | REG_AXY }, - { "pushwidx", REG_AXY, PSTATE_ALL | REG_AXY | REG_PTR1 }, - { "pushwysp", REG_Y, PSTATE_ALL | REG_AXY }, - { "regswap", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "regswap1", REG_XY, PSTATE_ALL | REG_A }, - { "regswap2", REG_XY, PSTATE_ALL | REG_A | REG_Y }, - { "return0", REG_NONE, PSTATE_ALL | REG_AX }, - { "return1", REG_NONE, PSTATE_ALL | REG_AX }, - { "shlax1", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "shlax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "shlax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "shlax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "shlaxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "shleax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, - { "shleax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, - { "shleax3", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, - { "shleax4", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "shrax1", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "shrax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "shrax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "shrax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, - { "shraxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "shreax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, - { "shreax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, - { "shreax3", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, - { "shreax4", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "staspidx", REG_A | REG_Y, PSTATE_ALL | REG_Y | REG_TMP1 | REG_PTR1 }, - { "stax0sp", REG_AX, PSTATE_ALL | REG_Y }, - { "staxspidx", REG_AXY, PSTATE_ALL | REG_TMP1 | REG_PTR1 }, - { "staxysp", REG_AXY, PSTATE_ALL | REG_Y }, - { "steax0sp", REG_EAX, PSTATE_ALL | REG_Y }, - { "steaxysp", REG_EAXY, PSTATE_ALL | REG_Y }, - { "subeq0sp", REG_AX, PSTATE_ALL | REG_AXY }, - { "subeqysp", REG_AXY, PSTATE_ALL | REG_AXY }, - { "subysp", REG_Y, PSTATE_ALL | REG_AY }, - { "tosadd0ax", REG_AX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "tosadda0", REG_A, PSTATE_ALL | REG_AXY }, - { "tosaddax", REG_AX, PSTATE_ALL | REG_AXY }, - { "tosaddeax", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "tosand0ax", REG_AX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "tosanda0", REG_A, PSTATE_ALL | REG_AXY }, - { "tosandax", REG_AX, PSTATE_ALL | REG_AXY }, - { "tosandeax", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "tosaslax", REG_A, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "tosasleax", REG_A, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "tosasrax", REG_A, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "tosasreax", REG_A, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "tosdiv0ax", REG_AX, PSTATE_ALL | REG_ALL }, - { "tosdiva0", REG_A, PSTATE_ALL | REG_ALL }, - { "tosdivax", REG_AX, PSTATE_ALL | REG_ALL }, - { "tosdiveax", REG_EAX, PSTATE_ALL | REG_ALL }, - { "toseq00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, - { "toseqa0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, - { "toseqax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, - { "toseqeax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, - { "tosge00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosgea0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosgeax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosgeeax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, - { "tosgt00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosgta0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosgtax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosgteax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, - { "tosicmp", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosicmp0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, - { "toslcmp", REG_EAX, PSTATE_ALL | REG_A | REG_Y | REG_PTR1 }, - { "tosle00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, - { "toslea0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosleax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosleeax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, - { "toslt00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, - { "toslta0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosltax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, - { "toslteax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, - { "tosmod0ax", REG_AX, PSTATE_ALL | REG_ALL }, - { "tosmodeax", REG_EAX, PSTATE_ALL | REG_ALL }, - { "tosmul0ax", REG_AX, PSTATE_ALL | REG_ALL }, - { "tosmula0", REG_A, PSTATE_ALL | REG_ALL }, - { "tosmulax", REG_AX, PSTATE_ALL | REG_ALL }, - { "tosmuleax", REG_EAX, PSTATE_ALL | REG_ALL }, - { "tosne00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosnea0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosneax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosneeax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, - { "tosor0ax", REG_AX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "tosora0", REG_A, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "tosorax", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "tosoreax", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "tosrsub0ax", REG_AX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "tosrsuba0", REG_A, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "tosrsubax", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "tosrsubeax", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "tosshlax", REG_A, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "tosshleax", REG_A, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "tosshrax", REG_A, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "tosshreax", REG_A, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "tossub0ax", REG_AX, PSTATE_ALL | REG_EAXY }, - { "tossuba0", REG_A, PSTATE_ALL | REG_AXY }, - { "tossubax", REG_AX, PSTATE_ALL | REG_AXY }, - { "tossubeax", REG_EAX, PSTATE_ALL | REG_EAXY }, - { "tosudiv0ax", REG_AX, PSTATE_ALL | (REG_ALL & ~REG_SAVE) }, - { "tosudiva0", REG_A, PSTATE_ALL | REG_EAXY | REG_PTR1 }, /* also ptr4 */ - { "tosudivax", REG_AX, PSTATE_ALL | REG_EAXY | REG_PTR1 }, /* also ptr4 */ - { "tosudiveax", REG_EAX, PSTATE_ALL | (REG_ALL & ~REG_SAVE) }, - { "tosuge00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosugea0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosugeax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosugeeax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, - { "tosugt00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosugta0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosugtax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosugteax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, - { "tosule00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosulea0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosuleax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosuleeax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, - { "tosult00", REG_NONE, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosulta0", REG_A, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosultax", REG_AX, PSTATE_ALL | REG_AXY | REG_SREG }, - { "tosulteax", REG_EAX, PSTATE_ALL | REG_AXY | REG_PTR1 }, - { "tosumod0ax", REG_AX, PSTATE_ALL | (REG_ALL & ~REG_SAVE) }, - { "tosumoda0", REG_A, PSTATE_ALL | REG_EAXY | REG_PTR1 }, /* also ptr4 */ - { "tosumodax", REG_AX, PSTATE_ALL | REG_EAXY | REG_PTR1 }, /* also ptr4 */ - { "tosumodeax", REG_EAX, PSTATE_ALL | (REG_ALL & ~REG_SAVE) }, - { "tosumul0ax", REG_AX, PSTATE_ALL | REG_ALL }, - { "tosumula0", REG_A, PSTATE_ALL | REG_ALL }, - { "tosumulax", REG_AX, PSTATE_ALL | REG_ALL }, - { "tosumuleax", REG_EAX, PSTATE_ALL | REG_ALL }, - { "tosxor0ax", REG_AX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "tosxora0", REG_A, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "tosxorax", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, - { "tosxoreax", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, - { "tsteax", REG_EAX, PSTATE_ALL | REG_Y }, - { "utsteax", REG_EAX, PSTATE_ALL | REG_Y }, + { "addeq0sp", SLV_TOP | REG_AX, PSTATE_ALL | REG_AXY }, + { "addeqysp", SLV_IND | REG_AXY, PSTATE_ALL | REG_AXY }, + { "addysp", REG_SP | REG_Y, PSTATE_ALL | REG_SP }, + { "along", REG_A, PSTATE_ALL | REG_X | REG_SREG }, + { "aslax1", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "aslax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "aslax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "aslax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "aslaxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "asleax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "asleax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "asleax3", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "asleax4", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "asrax1", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "asrax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "asrax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "asrax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "asraxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "asreax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "asreax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "asreax3", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "asreax4", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "aulong", REG_NONE, PSTATE_ALL | REG_X | REG_SREG }, + { "axlong", REG_X, PSTATE_ALL | REG_Y | REG_SREG }, + { "axulong", REG_NONE, PSTATE_ALL | REG_Y | REG_SREG }, + { "bcasta", REG_A, PSTATE_ALL | REG_AX }, + { "bcastax", REG_AX, PSTATE_ALL | REG_AX }, + { "bcasteax", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "bnega", REG_A, PSTATE_ALL | REG_AX }, + { "bnegax", REG_AX, PSTATE_ALL | REG_AX }, + { "bnegeax", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "booleq", PSTATE_Z, PSTATE_ALL | REG_AX }, + { "boolge", PSTATE_N, PSTATE_ALL | REG_AX }, + { "boolgt", PSTATE_ZN, PSTATE_ALL | REG_AX }, + { "boolle", PSTATE_ZN, PSTATE_ALL | REG_AX }, + { "boollt", PSTATE_N, PSTATE_ALL | REG_AX }, + { "boolne", PSTATE_Z, PSTATE_ALL | REG_AX }, + { "booluge", PSTATE_C, PSTATE_ALL | REG_AX }, + { "boolugt", PSTATE_CZ, PSTATE_ALL | REG_AX }, + { "boolule", PSTATE_CZ, PSTATE_ALL | REG_AX }, + { "boolult", PSTATE_C, PSTATE_ALL | REG_AX }, + { "callax", REG_AX, PSTATE_ALL | REG_ALL }, /* PSTATE_ZN | REG_PTR1 */ + { "complax", REG_AX, PSTATE_ALL | REG_AX }, + { "decax1", REG_AX, PSTATE_ALL | REG_AX }, + { "decax2", REG_AX, PSTATE_ALL | REG_AX }, + { "decax3", REG_AX, PSTATE_ALL | REG_AX }, + { "decax4", REG_AX, PSTATE_ALL | REG_AX }, + { "decax5", REG_AX, PSTATE_ALL | REG_AX }, + { "decax6", REG_AX, PSTATE_ALL | REG_AX }, + { "decax7", REG_AX, PSTATE_ALL | REG_AX }, + { "decax8", REG_AX, PSTATE_ALL | REG_AX }, + { "decaxy", REG_AXY, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "deceaxy", REG_EAXY, PSTATE_ALL | REG_EAX }, + { "decsp1", REG_SP, PSTATE_ALL | REG_SP | REG_Y }, + { "decsp2", REG_SP, PSTATE_ALL | REG_SP | REG_A }, + { "decsp3", REG_SP, PSTATE_ALL | REG_SP | REG_A }, + { "decsp4", REG_SP, PSTATE_ALL | REG_SP | REG_A }, + { "decsp5", REG_SP, PSTATE_ALL | REG_SP | REG_A }, + { "decsp6", REG_SP, PSTATE_ALL | REG_SP | REG_A }, + { "decsp7", REG_SP, PSTATE_ALL | REG_SP | REG_A }, + { "decsp8", REG_SP, PSTATE_ALL | REG_SP | REG_A }, + { "enter", REG_SP | REG_Y, PSTATE_ALL | REG_SP | REG_AY }, + { "incax1", REG_AX, PSTATE_ALL | REG_AX }, + { "incax2", REG_AX, PSTATE_ALL | REG_AX }, + { "incax3", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "incax4", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "incax5", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "incax6", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "incax7", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "incax8", REG_AX, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "incaxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "incsp1", REG_SP, PSTATE_ALL | REG_SP }, + { "incsp2", REG_SP, PSTATE_ALL | REG_SP | REG_Y }, + { "incsp3", REG_SP, PSTATE_ALL | REG_SP | REG_Y }, + { "incsp4", REG_SP, PSTATE_ALL | REG_SP | REG_Y }, + { "incsp5", REG_SP, PSTATE_ALL | REG_SP | REG_Y }, + { "incsp6", REG_SP, PSTATE_ALL | REG_SP | REG_Y }, + { "incsp7", REG_SP, PSTATE_ALL | REG_SP | REG_Y }, + { "incsp8", REG_SP, PSTATE_ALL | REG_SP | REG_Y }, + { "jmpvec", REG_EVERYTHING, PSTATE_ALL | REG_ALL }, /* NONE */ + { "laddeq", REG_EAXY | REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, + { "laddeq0sp", SLV_TOP | REG_EAX, PSTATE_ALL | REG_EAXY }, + { "laddeq1", REG_Y | REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, + { "laddeqa", REG_AY | REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, + { "laddeqysp", SLV_IND | REG_EAXY, PSTATE_ALL | REG_EAXY }, + { "ldaidx", REG_AXY, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "ldauidx", REG_AXY, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "ldax0sp", SLV_TOP, PSTATE_ALL | REG_AXY }, + { "ldaxi", REG_AX, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "ldaxidx", REG_AXY, PSTATE_ALL | REG_AXY | REG_PTR1 }, + { "ldaxysp", SLV_IND | REG_Y, PSTATE_ALL | REG_AXY }, + { "ldeax0sp", SLV_TOP, PSTATE_ALL | REG_EAXY }, + { "ldeaxi", REG_AX, PSTATE_ALL | REG_EAXY | REG_PTR1 }, + { "ldeaxidx", REG_AXY, PSTATE_ALL | REG_EAXY | REG_PTR1 }, + { "ldeaxysp", SLV_IND | REG_Y, PSTATE_ALL | REG_EAXY }, + { "leaa0sp", REG_SP | REG_A, PSTATE_ALL | REG_AX }, + { "leaaxsp", REG_SP | REG_AX, PSTATE_ALL | REG_AX }, + { "leave00", REG_SP, PSTATE_ALL | REG_SP | REG_AXY }, + { "leave0", REG_SP, PSTATE_ALL | REG_SP | REG_XY }, + { "leave", REG_SP, PSTATE_ALL | REG_SP | REG_Y }, + { "leavey00", REG_SP, PSTATE_ALL | REG_SP | REG_AXY }, + { "leavey0", REG_SP, PSTATE_ALL | REG_SP | REG_XY }, + { "leavey", REG_SP | REG_Y, PSTATE_ALL | REG_SP | REG_Y }, + { "lsubeq", REG_EAXY | REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, + { "lsubeq0sp", SLV_TOP | REG_EAX, PSTATE_ALL | REG_EAXY }, + { "lsubeq1", REG_Y | REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, + { "lsubeqa", REG_AY | REG_PTR1_LO, PSTATE_ALL | REG_EAXY | REG_PTR1_HI }, + { "lsubeqysp", SLV_IND | REG_EAXY, PSTATE_ALL | REG_EAXY }, + { "mulax10", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "mulax3", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "mulax5", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "mulax6", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "mulax7", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "mulax9", REG_AX, PSTATE_ALL | REG_AX | REG_PTR1 }, + { "negax", REG_AX, PSTATE_ALL | REG_AX }, + { "negeax", REG_EAX, PSTATE_ALL | REG_EAX }, + { "popa", SLV_TOP, PSTATE_ALL | REG_SP | REG_AY }, + { "popax", SLV_TOP, PSTATE_ALL | REG_SP | REG_AXY }, + { "popeax", SLV_TOP, PSTATE_ALL | REG_SP | REG_EAXY }, + { "push0", REG_SP, PSTATE_ALL | REG_SP | REG_AXY }, + { "push0ax", REG_SP | REG_AX, PSTATE_ALL | REG_SP | REG_Y | REG_SREG }, + { "push1", REG_SP, PSTATE_ALL | REG_SP | REG_AXY }, + { "push2", REG_SP, PSTATE_ALL | REG_SP | REG_AXY }, + { "push3", REG_SP, PSTATE_ALL | REG_SP | REG_AXY }, + { "push4", REG_SP, PSTATE_ALL | REG_SP | REG_AXY }, + { "push5", REG_SP, PSTATE_ALL | REG_SP | REG_AXY }, + { "push6", REG_SP, PSTATE_ALL | REG_SP | REG_AXY }, + { "push7", REG_SP, PSTATE_ALL | REG_SP | REG_AXY }, + { "pusha", REG_SP | REG_A, PSTATE_ALL | REG_SP | REG_Y }, + { "pusha0", REG_SP | REG_A, PSTATE_ALL | REG_SP | REG_XY }, + { "pusha0sp", SLV_TOP, PSTATE_ALL | REG_SP | REG_AY }, + { "pushaFF", REG_SP | REG_A, PSTATE_ALL | REG_SP | REG_Y }, + { "pushax", REG_SP | REG_AX, PSTATE_ALL | REG_SP | REG_Y }, + { "pushaysp", SLV_IND | REG_Y, PSTATE_ALL | REG_SP | REG_AY }, + { "pushc0", REG_SP, PSTATE_ALL | REG_SP | REG_A | REG_Y }, + { "pushc1", REG_SP, PSTATE_ALL | REG_SP | REG_A | REG_Y }, + { "pushc2", REG_SP, PSTATE_ALL | REG_SP | REG_A | REG_Y }, + { "pusheax", REG_SP | REG_EAX, PSTATE_ALL | REG_SP | REG_Y }, + { "pushl0", REG_SP, PSTATE_ALL | REG_SP | REG_AXY }, + { "pushw", REG_SP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_PTR1 }, + { "pushw0sp", SLV_TOP, PSTATE_ALL | REG_SP | REG_AXY }, + { "pushwidx", REG_SP | REG_AXY, PSTATE_ALL | REG_SP | REG_AXY | REG_PTR1 }, + { "pushwysp", SLV_IND | REG_Y, PSTATE_ALL | REG_SP | REG_AXY }, + { "regswap", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "regswap1", REG_XY, PSTATE_ALL | REG_A }, + { "regswap2", REG_XY, PSTATE_ALL | REG_A | REG_Y }, + { "resteax", REG_SAVE, PSTATE_ZN | REG_EAX }, /* also uses regsave+2/+3 */ + { "return0", REG_NONE, PSTATE_ALL | REG_AX }, + { "return1", REG_NONE, PSTATE_ALL | REG_AX }, + { "saveeax", REG_EAX, PSTATE_ZN | REG_Y | REG_SAVE }, /* also regsave+2/+3 */ + { "shlax1", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shlax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shlax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shlax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shlaxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "shleax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "shleax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "shleax3", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "shleax4", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "shrax1", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shrax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shrax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shrax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shraxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, + { "shreax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "shreax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "shreax3", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, + { "shreax4", REG_EAX, PSTATE_ALL | REG_EAXY | REG_TMP1 }, + { "staspidx", SLV_TOP | REG_AY, PSTATE_ALL | REG_SP | REG_Y | REG_TMP1 | REG_PTR1 }, + { "stax0sp", REG_SP | REG_AX, PSTATE_ALL | SLV_TOP | REG_Y }, + { "staxspidx", SLV_TOP | REG_AXY, PSTATE_ALL | REG_SP | REG_TMP1 | REG_PTR1 }, + { "staxysp", REG_SP | REG_AXY, PSTATE_ALL | SLV_IND | REG_Y }, + { "steax0sp", REG_SP | REG_EAX, PSTATE_ALL | SLV_TOP | REG_Y }, + { "steaxspidx", SLV_TOP | REG_EAXY, PSTATE_ALL | REG_SP | REG_Y | REG_TMP1 | REG_PTR1 }, /* also tmp2, tmp3 */ + { "steaxysp", REG_SP | REG_EAXY, PSTATE_ALL | SLV_IND | REG_Y }, + { "subeq0sp", SLV_TOP | REG_AX, PSTATE_ALL | REG_AXY }, + { "subeqysp", SLV_IND | REG_AXY, PSTATE_ALL | REG_AXY }, + { "subysp", REG_SP | REG_Y, PSTATE_ALL | REG_SP | REG_AY }, + { "swapstk", SLV_TOP | REG_AX, PSTATE_ALL | SLV_TOP | REG_AXY }, /* also ptr4 */ + { "tosadd0ax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_EAXY | REG_TMP1 }, + { "tosadda0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY }, + { "tosaddax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY }, + { "tosaddeax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_EAXY | REG_TMP1 }, + { "tosand0ax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_EAXY | REG_TMP1 }, + { "tosanda0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY }, + { "tosandax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY }, + { "tosandeax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_EAXY | REG_TMP1 }, + { "tosaslax", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_TMP1 }, + { "tosasleax", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_EAXY | REG_TMP1 }, + { "tosasrax", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_TMP1 }, + { "tosasreax", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_EAXY | REG_TMP1 }, + { "tosdiv0ax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_ALL }, + { "tosdiva0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_ALL }, + { "tosdivax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_ALL }, + { "tosdiveax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_ALL }, + { "toseq00", SLV_TOP, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "toseqa0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "toseqax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "toseqeax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_AXY | REG_PTR1 }, + { "tosge00", SLV_TOP, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosgea0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosgeax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosgeeax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_AXY | REG_PTR1 }, + { "tosgt00", SLV_TOP, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosgta0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosgtax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosgteax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_AXY | REG_PTR1 }, + { "tosicmp", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosicmp0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosint", SLV_TOP, PSTATE_ALL | REG_SP | REG_Y }, + { "toslcmp", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_A | REG_Y | REG_PTR1 }, + { "tosle00", SLV_TOP, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "toslea0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosleax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosleeax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_AXY | REG_PTR1 }, + { "toslong", SLV_TOP, PSTATE_ALL | REG_SP | REG_Y }, + { "toslt00", SLV_TOP, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "toslta0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosltax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "toslteax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_AXY | REG_PTR1 }, + { "tosmod0ax", SLV_TOP | REG_AX, PSTATE_ALL | REG_ALL }, + { "tosmodeax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_ALL }, + { "tosmul0ax", SLV_TOP | REG_AX, PSTATE_ALL | REG_ALL }, + { "tosmula0", SLV_TOP | REG_A, PSTATE_ALL | REG_ALL }, + { "tosmulax", SLV_TOP | REG_AX, PSTATE_ALL | REG_ALL }, + { "tosmuleax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_ALL }, + { "tosne00", SLV_TOP, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosnea0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosneax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosneeax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_AXY | REG_PTR1 }, + { "tosor0ax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_EAXY | REG_TMP1 }, + { "tosora0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_TMP1 }, + { "tosorax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_TMP1 }, + { "tosoreax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_EAXY | REG_TMP1 }, + { "tosrsub0ax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_EAXY | REG_TMP1 }, + { "tosrsuba0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_TMP1 }, + { "tosrsubax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_TMP1 }, + { "tosrsubeax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_EAXY | REG_TMP1 }, + { "tosshlax", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_TMP1 }, + { "tosshleax", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_EAXY | REG_TMP1 }, + { "tosshrax", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_TMP1 }, + { "tosshreax", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_EAXY | REG_TMP1 }, + { "tossub0ax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_EAXY }, + { "tossuba0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY }, + { "tossubax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY }, + { "tossubeax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_EAXY }, + { "tosudiv0ax", SLV_TOP | REG_AX, PSTATE_ALL | (REG_ALL & ~REG_SAVE) }, + { "tosudiva0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_EAXY | REG_PTR1 }, /* also ptr4 */ + { "tosudivax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_EAXY | REG_PTR1 }, /* also ptr4 */ + { "tosudiveax", SLV_TOP | REG_EAX, PSTATE_ALL | (REG_ALL & ~REG_SAVE) }, + { "tosuge00", SLV_TOP, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosugea0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosugeax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosugeeax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_AXY | REG_PTR1 }, + { "tosugt00", SLV_TOP, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosugta0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosugtax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosugteax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_AXY | REG_PTR1 }, + { "tosule00", SLV_TOP, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosulea0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosuleax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosuleeax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_AXY | REG_PTR1 }, + { "tosulong", SLV_TOP, PSTATE_ALL | REG_SP | REG_Y }, + { "tosult00", SLV_TOP, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosulta0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosultax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_SREG }, + { "tosulteax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_AXY | REG_PTR1 }, + { "tosumod0ax", SLV_TOP | REG_AX, PSTATE_ALL | (REG_ALL & ~REG_SAVE) }, + { "tosumoda0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_EAXY | REG_PTR1 }, /* also ptr4 */ + { "tosumodax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_EAXY | REG_PTR1 }, /* also ptr4 */ + { "tosumodeax", SLV_TOP | REG_EAX, PSTATE_ALL | (REG_ALL & ~REG_SAVE) }, + { "tosumul0ax", SLV_TOP | REG_AX, PSTATE_ALL | REG_ALL }, + { "tosumula0", SLV_TOP | REG_A, PSTATE_ALL | REG_ALL }, + { "tosumulax", SLV_TOP | REG_AX, PSTATE_ALL | REG_ALL }, + { "tosumuleax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_ALL }, + { "tosxor0ax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_EAXY | REG_TMP1 }, + { "tosxora0", SLV_TOP | REG_A, PSTATE_ALL | REG_SP | REG_AXY | REG_TMP1 }, + { "tosxorax", SLV_TOP | REG_AX, PSTATE_ALL | REG_SP | REG_AXY | REG_TMP1 }, + { "tosxoreax", SLV_TOP | REG_EAX, PSTATE_ALL | REG_SP | REG_EAXY | REG_TMP1 }, + { "tsteax", REG_EAX, PSTATE_ALL | REG_Y }, + { "utsteax", REG_EAX, PSTATE_ALL | REG_Y }, }; #define FuncInfoCount (sizeof(FuncInfoTable) / sizeof(FuncInfoTable[0])) @@ -481,6 +508,7 @@ fncls_t GetFuncInfo (const char* Name, unsigned int* Use, unsigned int* Chg) /* Did we find it in the top-level table? */ if (E && IsTypeFunc (E->Type)) { FuncDesc* D = GetFuncDesc (E->Type); + *Use = REG_NONE; /* A variadic function will use the Y register (the parameter list ** size is passed there). A fastcall function will use the A or A/X @@ -488,31 +516,40 @@ fncls_t GetFuncInfo (const char* Name, unsigned int* Use, unsigned int* Chg) ** we assume that any function will destroy all registers. */ if ((D->Flags & FD_VARIADIC) != 0) { - *Use = REG_Y; + *Use = REG_Y | REG_SP | SLV_TOP; } else if (D->Flags & FD_CALL_WRAPPER) { /* Wrappers may go to any functions, so mark them as using all ** registers. */ *Use = REG_EAXY; - } else if ((D->ParamCount > 0 || (D->Flags & FD_EMPTY) != 0) && - IsFastcallFunc (E->Type)) { + } else if (D->ParamCount > 0 || (D->Flags & FD_EMPTY) != 0) { /* Will use registers depending on the last param. If the last ** param has incomplete type, or if the function has not been ** prototyped yet, just assume __EAX__. */ - if (D->LastParam != 0) { - switch (SizeOf (D->LastParam->Type)) { - case 1u: - *Use = REG_A; - break; - case 2u: - *Use = REG_AX; - break; - default: - *Use = REG_EAX; + if (IsFastcallFunc (E->Type)) { + if (D->LastParam != 0) { + switch (SizeOf (D->LastParam->Type)) { + case 1u: + *Use = REG_A; + break; + case 2u: + *Use = REG_AX; + break; + default: + *Use = REG_EAX; + } + if (D->ParamCount > 1) { + /* Passes other params on the stack */ + *Use |= REG_SP | SLV_TOP; + } + } else { + /* We'll assume all */ + *Use = REG_EAX | REG_SP | SLV_TOP; } } else { - *Use = REG_EAX; + /* Passes all params on the stack */ + *Use = REG_SP | SLV_TOP; } } else { /* Will not use any registers */ @@ -551,6 +588,9 @@ fncls_t GetFuncInfo (const char* Name, unsigned int* Use, unsigned int* Chg) /* Use the information we have */ *Use = Info->Use; *Chg = Info->Chg; + if ((*Use & (SLV_TOP | SLV_IND)) != 0) { + *Use |= REG_SP; + } } else { /* It's an internal function we have no information for. If in ** debug mode, output an additional warning, so we have a chance diff --git a/src/cc65/codeinfo.h b/src/cc65/codeinfo.h index 88e26cdf4..14ef54d8f 100644 --- a/src/cc65/codeinfo.h +++ b/src/cc65/codeinfo.h @@ -75,6 +75,8 @@ struct RegContents; #define REG_SP_HI 0x2000U /* Defines for some special register usage */ +#define SLV_IND 0x00010000U /* Accesses (sp),y */ +#define SLV_TOP 0x00020000U /* Accesses (sp),0 */ #define SLV_SP65 0x00200000U /* Accesses 6502 stack pointer */ #define SLV_PH65 0x00400000U /* Pushes onto 6502 stack */ #define SLV_PL65 0x00800000U /* Pops from 6502 stack */ @@ -104,6 +106,7 @@ struct RegContents; #define REG_EAXY (REG_EAX | REG_Y) #define REG_ZP 0xFFF8U #define REG_ALL 0xFFFFU + #define PSTATE_CZ (PSTATE_C | PSTATE_Z) #define PSTATE_CZN (PSTATE_C | PSTATE_Z | PSTATE_N) #define PSTATE_CZVN (PSTATE_C | PSTATE_Z | PSTATE_V | PSTATE_N) diff --git a/src/cc65/codeoptutil.c b/src/cc65/codeoptutil.c index 16c41162a..a4980aa3a 100644 --- a/src/cc65/codeoptutil.c +++ b/src/cc65/codeoptutil.c @@ -827,21 +827,28 @@ void AdjustStackOffset (StackOpData* D, unsigned Offs) CodeEntry* E = CS_GetEntry (D->Code, I); + /* Check against some things that should not happen */ + CHECK ((E->Use & SLV_TOP) != SLV_TOP); + /* Check if this entry does a stack access, and if so, if it's a plain ** load from stack, since this is needed later. */ int Correction = 0; - if ((E->Use & REG_SP) != 0) { + if ((E->Use & SLV_IND) == SLV_IND) { - /* Check for some things that should not happen */ - CHECK (E->AM == AM65_ZP_INDY || E->RI->In.RegY >= (short) Offs); - CHECK (strcmp (E->Arg, "sp") == 0); - /* We need to correct this one */ - Correction = (E->OPC == OP65_LDA)? 2 : 1; + if (E->OPC != OP65_JSR) { + /* Check against some things that should not happen */ + CHECK (E->AM == AM65_ZP_INDY && E->RI->In.RegY >= (short) Offs); + CHECK (strcmp (E->Arg, "sp") == 0); + + /* We need to correct this one */ + Correction = 2; + + } else { + /* We need to correct this one */ + Correction = 1; + } - } else if (CE_IsCallTo (E, "ldaxysp")) { - /* We need to correct this one */ - Correction = 1; } if (Correction) { @@ -849,7 +856,7 @@ void AdjustStackOffset (StackOpData* D, unsigned Offs) ** value. */ CodeEntry* P = CS_GetPrevEntry (D->Code, I); - if (P && P->OPC == OP65_LDY && CE_IsConstImm (P)) { + if (P && P->OPC == OP65_LDY && CE_IsConstImm (P) && !CE_HasLabel (E)) { /* The Y load is just before the stack access, adjust it */ CE_SetNumArg (P, P->Num - Offs); } else { @@ -860,39 +867,59 @@ void AdjustStackOffset (StackOpData* D, unsigned Offs) } /* If we need the value of Y later, be sure to reload it */ - if (RegYUsed (D->Code, I+1)) { - CodeEntry* N; + unsigned R = REG_Y | (E->Chg & ~REG_A); + R = GetRegInfo (D->Code, I + 1, R) & R; + if ((R & REG_Y) != 0) { const char* Arg = MakeHexArg (E->RI->In.RegY); - if (Correction == 2 && (N = CS_GetNextEntry(D->Code, I)) != 0 && - ((N->Info & OF_ZBRA) != 0) && N->JumpTo != 0) { - /* The Y register is used but the load instruction loads A - ** and is followed by a branch that evaluates the zero flag. - ** This means that we cannot just insert the load insn - ** for the Y register at this place, because it would - ** destroy the Z flag. Instead place load insns at the - ** target of the branch and after it. - ** Note: There is a chance that this code won't work. The - ** jump may be a backwards jump (in which case the stack - ** offset has already been adjusted) or there may be other - ** instructions between the load and the conditional jump. - ** Currently the compiler does not generate such code, but - ** it is possible to force the optimizer into something - ** invalid by use of inline assembler. - */ + if ((R & PSTATE_ZN) != 0 && (R & ~(REG_Y | PSTATE_ZN)) == 0) { + CodeEntry* N; + if ((N = CS_GetNextEntry (D->Code, I)) != 0 && + ((N->Info & OF_ZBRA) != 0) && N->JumpTo != 0) { + /* The Y register is used but the load instruction loads A + ** and is followed by a branch that evaluates the zero flag. + ** This means that we cannot just insert the load insn + ** for the Y register at this place, because it would + ** destroy the Z flag. Instead place load insns at the + ** target of the branch and after it. + ** Note: There is a chance that this code won't work. The + ** jump may be a backwards jump (in which case the stack + ** offset has already been adjusted) or there may be other + ** instructions between the load and the conditional jump. + ** Currently the compiler does not generate such code, but + ** it is possible to force the optimizer into something + ** invalid by use of inline assembler. + ** Note: In reality, this route is never taken as all + ** callers of this function will just give up with + ** optimization whenever they detect a branch. + */ - /* Add load insn after the branch */ - CodeEntry* X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - InsertEntry (D, X, I+2); + /* Add load insn after the branch */ + CodeEntry* X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + InsertEntry (D, X, I+2); - /* Add load insn before branch target */ - CodeEntry* Y = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); - int J = CS_GetEntryIndex (D->Code, N->JumpTo->Owner); - CHECK (J > I); /* Must not happen */ - InsertEntry (D, Y, J); + /* Add load insn before branch target */ + CodeEntry* Y = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); + int J = CS_GetEntryIndex (D->Code, N->JumpTo->Owner); + CHECK (J > I); /* Must not happen */ + InsertEntry (D, Y, J); - /* Move the label to the new insn */ - CodeLabel* L = CS_GenLabel (D->Code, Y); - CS_MoveLabelRef (D->Code, N, L); + /* Move the label to the new insn */ + CodeLabel* L = CS_GenLabel (D->Code, Y); + CS_MoveLabelRef (D->Code, N, L); + + /* Skip the next two instructions in the next round */ + I += 2; + } else { + /* This could be suboptimal but it will always work (unless stack overflows) */ + CodeEntry* X = NewCodeEntry (OP65_PHP, AM65_IMP, 0, 0, E->LI); + InsertEntry (D, X, I+1); + X = NewCodeEntry (OP65_LDY, AM65_IMM, 0, 0, E->LI); + InsertEntry (D, X, I+2); + X = NewCodeEntry (OP65_PLP, AM65_IMP, 0, 0, E->LI); + InsertEntry (D, X, I+3); + /* Skip the three inserted instructions in the next round */ + I += 3; + } } else { CodeEntry* X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI); InsertEntry (D, X, I+1); From 79be6dec1625ca962ec01755d273f833c583b12c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 18 Sep 2020 20:23:02 +0800 Subject: [PATCH 0899/2710] More quick hack for CE_GenRegInfo. --- src/cc65/codeent.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 4f257a22e..0a1b917db 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -1781,6 +1781,13 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) if (RegValIsKnown (In->RegX)) { Out->RegX = (In->RegX ^ 0xFF); } + } else if (strncmp (E->Arg, "asrax", 5) == 0 || + strncmp (E->Arg, "shrax", 5) == 0) { + if (RegValIsKnown (In->RegX)) { + if (In->RegX == 0x00 || In->RegX == 0xFF) { + Out->RegX = In->RegX; + } + } } else if (strcmp (E->Arg, "tosandax") == 0) { if (RegValIsKnown (In->RegA) && In->RegA == 0) { Out->RegA = 0; From 4d5fe3854033b1b24d20fa4eb40e38dbf34c7cc9 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 18 Sep 2020 20:23:03 +0800 Subject: [PATCH 0900/2710] Fixed OptStackOps when the stuff pushed on stack top is accessed before the op. --- src/cc65/codeoptutil.c | 87 ++++++++++++++++-------------------------- src/cc65/codeoptutil.h | 2 +- src/cc65/coptstop.c | 27 +++++++------ 3 files changed, 48 insertions(+), 68 deletions(-) diff --git a/src/cc65/codeoptutil.c b/src/cc65/codeoptutil.c index a4980aa3a..173d5185f 100644 --- a/src/cc65/codeoptutil.c +++ b/src/cc65/codeoptutil.c @@ -1224,66 +1224,43 @@ static int CmpHarmless (const void* Key, const void* Entry) -int HarmlessCall (const char* Name) +int HarmlessCall (const CodeEntry* E, int PushedBytes) /* Check if this is a call to a harmless subroutine that will not interrupt ** the pushax/op sequence when encountered. */ { - static const char* const Tab[] = { - "aslax1", - "aslax2", - "aslax3", - "aslax4", - "aslaxy", - "asrax1", - "asrax2", - "asrax3", - "asrax4", - "asraxy", - "bcastax", - "bnegax", - "complax", - "decax1", - "decax2", - "decax3", - "decax4", - "decax5", - "decax6", - "decax7", - "decax8", - "decaxy", - "incax1", - "incax2", - "incax3", - "incax4", - "incax5", - "incax6", - "incax7", - "incax8", - "incaxy", - "ldaidx", - "ldauidx", - "ldaxidx", - "ldaxysp", - "negax", - "shlax1", - "shlax2", - "shlax3", - "shlax4", - "shlaxy", - "shrax1", - "shrax2", - "shrax3", - "shrax4", - "shraxy", - }; + unsigned Use = 0, Chg = 0; + if (GetFuncInfo (E->Arg, &Use, &Chg) == FNCLS_BUILTIN) { + if ((Chg & REG_SP) != 0) { + return 0; + } + if ((Use & REG_SP) != 0 && + ((Use & (SLV_IND | SLV_TOP)) != SLV_IND || + RegValIsUnknown (E->RI->In.RegY) || + E->RI->In.RegY < PushedBytes)) { + /* If we are using the stack, and we don't have "indirect" + ** addressing mode, or the value of Y is unknown, or less + ** than two, we cannot cope with this piece of code. Having + ** an unknown value of Y means that we cannot correct the + ** stack offset, while having an offset less than PushedBytes + ** means that the code works with the value on stack which + ** is to be removed. + */ + return 0; + } + return 1; + } else { + static const char* const Tab[] = { + "_abs", + }; - void* R = bsearch (Name, - Tab, - sizeof (Tab) / sizeof (Tab[0]), - sizeof (Tab[0]), - CmpHarmless); - return (R != 0); + void* R = bsearch (E->Arg, + Tab, + sizeof (Tab) / sizeof (Tab[0]), + sizeof (Tab[0]), + CmpHarmless); + return (R != 0); + } } diff --git a/src/cc65/codeoptutil.h b/src/cc65/codeoptutil.h index 70aa5f462..140b11236 100644 --- a/src/cc65/codeoptutil.h +++ b/src/cc65/codeoptutil.h @@ -261,7 +261,7 @@ void RemoveRegLoads (StackOpData* D, LoadInfo* LI); void RemoveRemainders (StackOpData* D); /* Remove the code that is unnecessary after translation of the sequence */ -int HarmlessCall (const char* Name); +int HarmlessCall (const CodeEntry* E, int PushedBytes); /* Check if this is a call to a harmless subroutine that will not interrupt ** the pushax/op sequence when encountered. */ diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 01d0b039c..23636e533 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -1820,20 +1820,18 @@ unsigned OptStackOps (CodeSeg* S) Data.OpEntry = E; State = FoundOp; break; - } else if (!HarmlessCall (E->Arg)) { - /* A call to an unkown subroutine: We need to start - ** over after the last pushax. Note: This will also - ** happen if we encounter a call to pushax! + } else if (!HarmlessCall (E, 2)) { + /* The call might use or change the content that we are + ** going to access later via the stack pointer. In any + ** case, we need to start over after the last pushax. + ** Note: This will also happen if we encounter a call + ** to pushax! */ I = Data.PushIndex; State = Initialize; break; } - - } else if ((E->Use & REG_SP) != 0 && - (E->AM != AM65_ZP_INDY || - RegValIsUnknown (E->RI->In.RegY) || - E->RI->In.RegY < 2)) { + } else if (((E->Chg | E->Use) & REG_SP) != 0) { /* If we are using the stack, and we don't have "indirect Y" ** addressing mode, or the value of Y is unknown, or less @@ -1843,9 +1841,14 @@ unsigned OptStackOps (CodeSeg* S) ** that the code works with the value on stack which is to ** be removed. */ - I = Data.PushIndex; - State = Initialize; - break; + if (E->AM == AM65_ZPX_IND || + ((E->Chg | E->Use) & SLV_IND) == 0 || + (RegValIsUnknown (E->RI->In.RegY) || + E->RI->In.RegY < 2)) { + I = Data.PushIndex; + State = Initialize; + break; + } } From 3584c4c87fceb3771daaa054de1eed75ebc46b86 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Mon, 22 Feb 2021 11:57:32 -0500 Subject: [PATCH 0901/2710] fix crash when a NULL ExprNode is checked for circular references --- src/ld65/expr.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/ld65/expr.c b/src/ld65/expr.c index bc3d7941c..e106e09d0 100644 --- a/src/ld65/expr.c +++ b/src/ld65/expr.c @@ -464,6 +464,12 @@ static void GetSegExprValInternal (ExprNode* Expr, SegExprDesc* D, int Sign) { Export* E; + if (Expr == 0) + { + D->TooComplex = 1; + return; + } + switch (Expr->Op) { case EXPR_LITERAL: From 6ebe551919ba9acecd5d9caf6d8668d9fc11d09d Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Mon, 22 Feb 2021 18:14:27 -0500 Subject: [PATCH 0902/2710] return is sufficient, TooComplex flag is unnecessary to resolve this crash case suggested by greg-king5 in #1409 --- src/ld65/expr.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ld65/expr.c b/src/ld65/expr.c index e106e09d0..23f52a16f 100644 --- a/src/ld65/expr.c +++ b/src/ld65/expr.c @@ -466,7 +466,6 @@ static void GetSegExprValInternal (ExprNode* Expr, SegExprDesc* D, int Sign) if (Expr == 0) { - D->TooComplex = 1; return; } From d5d9183ccfde833296a3e2d3f4d44fd7468b3a56 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Mon, 22 Feb 2021 18:17:11 -0500 Subject: [PATCH 0903/2710] conform to prevailing if bracket style --- src/ld65/expr.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ld65/expr.c b/src/ld65/expr.c index 23f52a16f..5d6b56917 100644 --- a/src/ld65/expr.c +++ b/src/ld65/expr.c @@ -464,8 +464,7 @@ static void GetSegExprValInternal (ExprNode* Expr, SegExprDesc* D, int Sign) { Export* E; - if (Expr == 0) - { + if (Expr == 0) { return; } From 39ef63cbbc0f27968fdd044a0af22630969324e6 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 4 Jun 2021 08:49:10 -0400 Subject: [PATCH 0904/2710] Don't check for circular references of imports that don't have matching exports. This fix will avoid referring to a struct member through a null pointer. --- src/ld65/expr.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/ld65/expr.c b/src/ld65/expr.c index 5d6b56917..41db2326c 100644 --- a/src/ld65/expr.c +++ b/src/ld65/expr.c @@ -457,16 +457,14 @@ long GetExprVal (ExprNode* Expr) static void GetSegExprValInternal (ExprNode* Expr, SegExprDesc* D, int Sign) /* Check if the given expression consists of a segment reference and only -** constant values, additions and subtractions. If anything else is found, +** constant values, additions, and subtractions. If anything else is found, ** set D->TooComplex to true. ** Internal, recursive routine. */ { Export* E; - if (Expr == 0) { - return; - } + CHECK (Expr != 0); switch (Expr->Op) { @@ -483,7 +481,7 @@ static void GetSegExprValInternal (ExprNode* Expr, SegExprDesc* D, int Sign) */ if (ExportHasMark (E)) { CircularRefError (E); - } else { + } else if (E->Expr != 0) { MarkExport (E); GetSegExprValInternal (E->Expr, D, Sign); UnmarkExport (E); From 1c16e46f2369306fa7397dbde8750aad3b824816 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 5 Jun 2021 11:31:28 -0400 Subject: [PATCH 0905/2710] Improved ld65's error messages about ca65's .BANK() function. * Split a message into two more specific messages. --- src/ld65/expr.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/ld65/expr.c b/src/ld65/expr.c index 41db2326c..7a2f37d4a 100644 --- a/src/ld65/expr.c +++ b/src/ld65/expr.c @@ -403,17 +403,20 @@ long GetExprVal (ExprNode* Expr) case EXPR_BANK: GetSegExprVal (Expr->Left, &D); - if (D.TooComplex || D.Seg == 0) { - Error ("Argument for .BANK is not segment relative or too complex"); + if (D.TooComplex) { + Error ("Argument of .BANK() is too complex"); + } + if (D.Seg == 0) { + Error ("Argument of .BANK() isn't a label attached to a segment"); } if (D.Seg->MemArea == 0) { - Error ("Segment '%s' is referenced by .BANK but " - "not assigned to a memory area", + Error ("Segment '%s' is referenced by .BANK()," + " but not assigned to a memory area", GetString (D.Seg->Name)); } if (D.Seg->MemArea->BankExpr == 0) { - Error ("Memory area '%s' is referenced by .BANK but " - "has no BANK attribute", + Error ("Memory area '%s' is referenced by .BANK()," + " but has no BANK attribute", GetString (D.Seg->MemArea->Name)); } return GetExprVal (D.Seg->MemArea->BankExpr); From 69e2313a63a37543032fb40658fcaacf64465431 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 6 Jun 2021 23:20:54 +0100 Subject: [PATCH 0906/2710] First round of requested code changes --- cfg/sym1-32k.cfg | 56 +++++++++---------- cfg/sym1-4k.cfg | 56 +++++++++---------- cfg/sym1.cfg | 56 +++++++++---------- doc/ca65.sgml | 1 + doc/cc65.sgml | 4 ++ libsrc/sym1/ctype.s | 5 ++ src/ca65/main.c | 1 + src/cc65/main.c | 1 + {samples/tutorial => targettest}/sym1/build | 0 .../tutorial => targettest}/sym1/build_32k | 0 .../tutorial => targettest}/sym1/build_4k | 0 {samples/tutorial => targettest}/sym1/clean | 0 .../tutorial => targettest}/sym1/readme.txt | 0 .../tutorial => targettest}/sym1/symDisplay.c | 0 .../tutorial => targettest}/sym1/symHello.c | 0 {samples/tutorial => targettest}/sym1/symIO.c | 0 .../tutorial => targettest}/sym1/symNotepad.c | 0 .../tutorial => targettest}/sym1/symTiny.c | 0 18 files changed, 96 insertions(+), 84 deletions(-) create mode 100644 libsrc/sym1/ctype.s rename {samples/tutorial => targettest}/sym1/build (100%) rename {samples/tutorial => targettest}/sym1/build_32k (100%) rename {samples/tutorial => targettest}/sym1/build_4k (100%) rename {samples/tutorial => targettest}/sym1/clean (100%) rename {samples/tutorial => targettest}/sym1/readme.txt (100%) rename {samples/tutorial => targettest}/sym1/symDisplay.c (100%) rename {samples/tutorial => targettest}/sym1/symHello.c (100%) rename {samples/tutorial => targettest}/sym1/symIO.c (100%) rename {samples/tutorial => targettest}/sym1/symNotepad.c (100%) rename {samples/tutorial => targettest}/sym1/symTiny.c (100%) diff --git a/cfg/sym1-32k.cfg b/cfg/sym1-32k.cfg index 0665c8cf2..9af125eaa 100644 --- a/cfg/sym1-32k.cfg +++ b/cfg/sym1-32k.cfg @@ -5,42 +5,42 @@ # ld65 --config sym1-32k.cfg -o <prog>.bin <prog>.o FEATURES { - STARTADDRESS: default = $0200; - CONDES: segment = STARTUP, - type = constructor, - label = __CONSTRUCTOR_TABLE__, - count = __CONSTRUCTOR_COUNT__; - CONDES: segment = STARTUP, - type = destructor, - label = __DESTRUCTOR_TABLE__, - count = __DESTRUCTOR_COUNT__; + STARTADDRESS: default = $0200; + CONDES: segment = STARTUP, + type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__; } SYMBOLS { - __STACKSIZE__: type = weak, value = $0200; # 512 byte program stack - __STARTADDRESS__: type = export, value = %S; + __STACKSIZE__: type = weak, value = $0200; # 512 byte program stack + __STARTADDRESS__: type = export, value = %S; } MEMORY { - ZP: start = $0000, size = $00F7, define = yes, file = %O; - CPUSTACK: start = $0100, size = $0100, define = yes; - RAM: start = %S, size = $8000 - %S - __STACKSIZE__, define = yes, file = %O; - MONROM: start = $8000, size = $1000, define = yes; - EXT: start = $9000, size = $1000, define = yes; - IO: start = $A000, size = $1000, define = yes; - RAE1: start = $B000, size = $1000, define = yes; - BASROM: start = $C000, size = $1000, define = yes; - RAE2: start = $E000, size = $1000, define = yes; - TOP: start = $F000, size = $1000, define = yes; + ZP: file = %O, define = yes, start = $0000, size = $00F7; + CPUSTACK: file = "", define = yes, start = $0100, size = $0100; + RAM: file = %O, define = yes, start = %S, size = $8000 - %S - __STACKSIZE__; + MONROM: file = "", define = yes, start = $8000, size = $1000; + EXT: file = "", define = yes, start = $9000, size = $1000; + IO: file = "", define = yes, start = $A000, size = $1000; + RAE1: file = "", define = yes, start = $B000, size = $1000; + BASROM: file = "", define = yes, start = $C000, size = $1000; + RAE2: file = "", define = yes, start = $E000, size = $1000; + TOP: file = "", define = yes, start = $F000, size = $1000; } SEGMENTS { - ZEROPAGE: load = ZP, type = zp, define = yes; - STARTUP: load = RAM, type = ro, define = yes; - CODE: load = RAM, type = ro, define = yes; - RODATA: load = RAM, type = ro, define = yes; - ONCE: load = RAM, type = ro, define = yes; - DATA: load = RAM, type = rw, define = yes; - BSS: load = RAM, type = bss, define = yes; + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; + BSS: load = RAM, type = bss, define = yes; } diff --git a/cfg/sym1-4k.cfg b/cfg/sym1-4k.cfg index de1be0b8a..eefb48a49 100644 --- a/cfg/sym1-4k.cfg +++ b/cfg/sym1-4k.cfg @@ -5,42 +5,42 @@ # ld65 --config sym1-4k.cfg -o <prog>.bin <prog>.o FEATURES { - STARTADDRESS: default = $0200; - CONDES: segment = STARTUP, - type = constructor, - label = __CONSTRUCTOR_TABLE__, - count = __CONSTRUCTOR_COUNT__; - CONDES: segment = STARTUP, - type = destructor, - label = __DESTRUCTOR_TABLE__, - count = __DESTRUCTOR_COUNT__; + STARTADDRESS: default = $0200; + CONDES: segment = STARTUP, + type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__; } SYMBOLS { - __STACKSIZE__: type = weak, value = $0080; # 128 byte program stack - __STARTADDRESS__: type = export, value = %S; + __STACKSIZE__: type = weak, value = $0080; # 128 byte program stack + __STARTADDRESS__: type = export, value = %S; } MEMORY { - ZP: start = $0000, size = $00F7, define = yes, file = %O; - CPUSTACK: start = $0100, size = $0100, define = yes; - RAM: start = %S, size = $1000 - %S - __STACKSIZE__, define = yes, file = %O; - MONROM: start = $8000, size = $1000, define = yes; - EXT: start = $9000, size = $1000, define = yes; - IO: start = $A000, size = $1000, define = yes; - RAE1: start = $B000, size = $1000, define = yes; - BASROM: start = $C000, size = $1000, define = yes; - RAE2: start = $E000, size = $1000, define = yes; - TOP: start = $F000, size = $1000, define = yes; + ZP: file = %O, define = yes, start = $0000, size = $00F7; + CPUSTACK: file = "", define = yes, start = $0100, size = $0100; + RAM: file = %O, define = yes, start = %S, size = $1000 - %S - __STACKSIZE__; + MONROM: file = "", define = yes, start = $8000, size = $1000; + EXT: file = "", define = yes, start = $9000, size = $1000; + IO: file = "", define = yes, start = $A000, size = $1000; + RAE1: file = "", define = yes, start = $B000, size = $1000; + BASROM: file = "", define = yes, start = $C000, size = $1000; + RAE2: file = "", define = yes, start = $E000, size = $1000; + TOP: file = "", define = yes, start = $F000, size = $1000; } SEGMENTS { - ZEROPAGE: load = ZP, type = zp, define = yes; - STARTUP: load = RAM, type = ro, define = yes; - CODE: load = RAM, type = ro, define = yes; - RODATA: load = RAM, type = ro, define = yes; - ONCE: load = RAM, type = ro, define = yes; - DATA: load = RAM, type = rw, define = yes; - BSS: load = RAM, type = bss, define = yes; + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; + BSS: load = RAM, type = bss, define = yes; } diff --git a/cfg/sym1.cfg b/cfg/sym1.cfg index de1be0b8a..eefb48a49 100644 --- a/cfg/sym1.cfg +++ b/cfg/sym1.cfg @@ -5,42 +5,42 @@ # ld65 --config sym1-4k.cfg -o <prog>.bin <prog>.o FEATURES { - STARTADDRESS: default = $0200; - CONDES: segment = STARTUP, - type = constructor, - label = __CONSTRUCTOR_TABLE__, - count = __CONSTRUCTOR_COUNT__; - CONDES: segment = STARTUP, - type = destructor, - label = __DESTRUCTOR_TABLE__, - count = __DESTRUCTOR_COUNT__; + STARTADDRESS: default = $0200; + CONDES: segment = STARTUP, + type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__; } SYMBOLS { - __STACKSIZE__: type = weak, value = $0080; # 128 byte program stack - __STARTADDRESS__: type = export, value = %S; + __STACKSIZE__: type = weak, value = $0080; # 128 byte program stack + __STARTADDRESS__: type = export, value = %S; } MEMORY { - ZP: start = $0000, size = $00F7, define = yes, file = %O; - CPUSTACK: start = $0100, size = $0100, define = yes; - RAM: start = %S, size = $1000 - %S - __STACKSIZE__, define = yes, file = %O; - MONROM: start = $8000, size = $1000, define = yes; - EXT: start = $9000, size = $1000, define = yes; - IO: start = $A000, size = $1000, define = yes; - RAE1: start = $B000, size = $1000, define = yes; - BASROM: start = $C000, size = $1000, define = yes; - RAE2: start = $E000, size = $1000, define = yes; - TOP: start = $F000, size = $1000, define = yes; + ZP: file = %O, define = yes, start = $0000, size = $00F7; + CPUSTACK: file = "", define = yes, start = $0100, size = $0100; + RAM: file = %O, define = yes, start = %S, size = $1000 - %S - __STACKSIZE__; + MONROM: file = "", define = yes, start = $8000, size = $1000; + EXT: file = "", define = yes, start = $9000, size = $1000; + IO: file = "", define = yes, start = $A000, size = $1000; + RAE1: file = "", define = yes, start = $B000, size = $1000; + BASROM: file = "", define = yes, start = $C000, size = $1000; + RAE2: file = "", define = yes, start = $E000, size = $1000; + TOP: file = "", define = yes, start = $F000, size = $1000; } SEGMENTS { - ZEROPAGE: load = ZP, type = zp, define = yes; - STARTUP: load = RAM, type = ro, define = yes; - CODE: load = RAM, type = ro, define = yes; - RODATA: load = RAM, type = ro, define = yes; - ONCE: load = RAM, type = ro, define = yes; - DATA: load = RAM, type = rw, define = yes; - BSS: load = RAM, type = bss, define = yes; + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; + BSS: load = RAM, type = bss, define = yes; } diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 3fc534066..8ae8eabd9 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -4786,6 +4786,7 @@ compiler, depending on the target system selected: <item><tt/__SIM6502__/ - Target system is <tt/sim6502/ <item><tt/__SIM65C02__/ - Target system is <tt/sim65c02/ <item><tt/__SUPERVISION__/ - Target system is <tt/supervision/ +<item><tt/__SYM1__/ - Target system is <tt/sym1/ <item><tt/__VIC20__/ - Target system is <tt/vic20/ </itemize> diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 004061518..821e76586 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1022,6 +1022,10 @@ The compiler defines several macros at startup: This macro is defined if the target is the Supervision (-t supervision). + <tag><tt>__SYM1__</tt></tag> + + This macro is defined if the target is the Sym-1 (-t sym1). + <tag><tt>__TELESTRAT__</tt></tag> This macro is defined if the target is the Telestrat (-t telestrat). diff --git a/libsrc/sym1/ctype.s b/libsrc/sym1/ctype.s new file mode 100644 index 000000000..1301965eb --- /dev/null +++ b/libsrc/sym1/ctype.s @@ -0,0 +1,5 @@ +; Character specification table. +; +; uses the "common" definition + + .include "ctype_common.inc" diff --git a/src/ca65/main.c b/src/ca65/main.c index bb0607b7c..0eaf4ba6b 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -335,6 +335,7 @@ static void SetSys (const char* Sys) break; case TGT_SYM1: + NewSymbol ("__SYM1__", 1); break; default: diff --git a/src/cc65/main.c b/src/cc65/main.c index d0d756b3f..89c1b190e 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -291,6 +291,7 @@ static void SetSys (const char* Sys) break; case TGT_SYM1: + DefineNumericMacro ("__SYM1__", 1); break; default: diff --git a/samples/tutorial/sym1/build b/targettest/sym1/build similarity index 100% rename from samples/tutorial/sym1/build rename to targettest/sym1/build diff --git a/samples/tutorial/sym1/build_32k b/targettest/sym1/build_32k similarity index 100% rename from samples/tutorial/sym1/build_32k rename to targettest/sym1/build_32k diff --git a/samples/tutorial/sym1/build_4k b/targettest/sym1/build_4k similarity index 100% rename from samples/tutorial/sym1/build_4k rename to targettest/sym1/build_4k diff --git a/samples/tutorial/sym1/clean b/targettest/sym1/clean similarity index 100% rename from samples/tutorial/sym1/clean rename to targettest/sym1/clean diff --git a/samples/tutorial/sym1/readme.txt b/targettest/sym1/readme.txt similarity index 100% rename from samples/tutorial/sym1/readme.txt rename to targettest/sym1/readme.txt diff --git a/samples/tutorial/sym1/symDisplay.c b/targettest/sym1/symDisplay.c similarity index 100% rename from samples/tutorial/sym1/symDisplay.c rename to targettest/sym1/symDisplay.c diff --git a/samples/tutorial/sym1/symHello.c b/targettest/sym1/symHello.c similarity index 100% rename from samples/tutorial/sym1/symHello.c rename to targettest/sym1/symHello.c diff --git a/samples/tutorial/sym1/symIO.c b/targettest/sym1/symIO.c similarity index 100% rename from samples/tutorial/sym1/symIO.c rename to targettest/sym1/symIO.c diff --git a/samples/tutorial/sym1/symNotepad.c b/targettest/sym1/symNotepad.c similarity index 100% rename from samples/tutorial/sym1/symNotepad.c rename to targettest/sym1/symNotepad.c diff --git a/samples/tutorial/sym1/symTiny.c b/targettest/sym1/symTiny.c similarity index 100% rename from samples/tutorial/sym1/symTiny.c rename to targettest/sym1/symTiny.c From 7d5fc7eb439b0a9ee3ba58cf07ca2f892e85e4ac Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 6 Jun 2021 17:51:24 -0500 Subject: [PATCH 0907/2710] Changed kb references to KB --- doc/sym1.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/sym1.sgml b/doc/sym1.sgml index f04f36ae1..a52cf93de 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -38,7 +38,7 @@ Special locations: Conio support is not currently available for the Sym-1. But stdio console functions are available. <tag/Stack/ - The C runtime stack is located at $0FFF on 4kb Syms, or at $7FFFfor 32kb systems. The stack always grows downwards. + The C runtime stack is located at $0FFF on 4KB Syms, or at $7FFFfor 32KB systems. The stack always grows downwards. <tag/Heap/ The C heap is located at the end of the program and grows towards the C @@ -101,7 +101,7 @@ But there is another header available, which exposes Sym-specific I/O functions <sect2>Limited memory applications<p> -As stated earlier, there are config files for 4kb and 32kb systems. If you have 32kb RAM, then you will probably want to use the sym1_32k configuration, but if not - if you are using the sym1_32k configuration - then you may want to use functions like getchar, putchar, gets and puts rather than printf. Printf requires about 1kb because it needs to know how to process all the format specifiers. +As stated earlier, there are config files for 4KB and 32KB systems. If you have 32KB RAM, then you will probably want to use the sym1_32k configuration, but if not - if you are using the sym1_32k configuration - then you may want to use functions like getchar, putchar, gets and puts rather than printf. Printf requires about 1KB because it needs to know how to process all the format specifiers. <sect3>Sample programs<p> From e687f2f0480d1ba55c958e771139a1cd93ab34d6 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 6 Jun 2021 17:55:58 -0500 Subject: [PATCH 0908/2710] Clarified 'Limited memory applications' section --- doc/sym1.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sym1.sgml b/doc/sym1.sgml index a52cf93de..5e3e44dfd 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -101,7 +101,7 @@ But there is another header available, which exposes Sym-specific I/O functions <sect2>Limited memory applications<p> -As stated earlier, there are config files for 4KB and 32KB systems. If you have 32KB RAM, then you will probably want to use the sym1_32k configuration, but if not - if you are using the sym1_32k configuration - then you may want to use functions like getchar, putchar, gets and puts rather than printf. Printf requires about 1KB because it needs to know how to process all the format specifiers. +As stated earlier, there are config files for 4KB and 32KB systems. If you have 32KB RAM, then you will probably want to use the sym1-32k configuration, but if not - if you are using the sym1-4k configuration - then you may want to use functions like getchar, putchar, gets and puts rather than printf. Printf requires about 1KB because it needs to know how to process all the format specifiers. <sect3>Sample programs<p> From 6c4c959141161eba4ce02fb3b1f18be5ad5c21c2 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 6 Jun 2021 21:28:03 -0500 Subject: [PATCH 0909/2710] Sym-1 lib changes --- doc/sym1.sgml | 8 +- include/sym1.h | 154 ++++++++++++++++++++++++++++++++++++ include/symio.h | 148 ----------------------------------- libsrc/sym1/beep.s | 16 ++-- libsrc/sym1/bitio.s | 178 ++++++++++++++++++++---------------------- libsrc/sym1/crt0.s | 24 +++--- libsrc/sym1/display.s | 123 +++++++++++++---------------- libsrc/sym1/getchar.s | 21 ----- libsrc/sym1/putchar.s | 23 ------ libsrc/sym1/read.s | 12 +-- libsrc/sym1/tapeio.s | 17 ++-- libsrc/sym1/write.s | 12 +-- samples/symDisplay.c | 3 +- samples/symHello.c | 3 +- samples/symIO.c | 8 +- samples/symNotepad.c | 7 +- samples/symTiny.c | 3 +- 17 files changed, 339 insertions(+), 421 deletions(-) create mode 100644 include/sym1.h delete mode 100644 include/symio.h delete mode 100644 libsrc/sym1/getchar.s delete mode 100644 libsrc/sym1/putchar.s diff --git a/doc/sym1.sgml b/doc/sym1.sgml index 5e3e44dfd..59d1db3b7 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -48,7 +48,7 @@ Special locations: <sect>Platform specific header files<p> -Programs containing Sym-1 code may use the <tt/symio.h/ header file. See the header file for more information. +Programs containing Sym-1 code may use the <tt/sym1.h/ header file. See the header file for more information. <sect1>Hardware access<p> @@ -94,10 +94,8 @@ To be more specific, this limitation means that you cannot use any of the follow <sect>Other hints<p> -<sect1>symio.h<p> -You can use stdio.h if you wish, which provides console I/O (like printf) but does not have access to a filesystem, as mentioned above. - -But there is another header available, which exposes Sym-specific I/O functions that are useful for reading and writing its ports and front panel. It also exposes functions normally included using stdio.h but <i>only</i> the console I/O functions and not the filesystem functions. See the symio.h include file for a list of the functions available. +<sect1>sym1.h<p> +This header exposes Sym-specific I/O functions that are useful for reading and writing its ports and front panel. See the sym1.h include file for a list of the functions available. <sect2>Limited memory applications<p> diff --git a/include/sym1.h b/include/sym1.h new file mode 100644 index 000000000..0a919f84d --- /dev/null +++ b/include/sym1.h @@ -0,0 +1,154 @@ +// sym1.h +// +// I/O primitives for Sym-1 +// +// Wayne Parham + + + +#ifndef _SYM1_H +#define _SYM1_H + + + +/* Check for errors */ +#if !defined(__SYM1__) +# error This module may only be used when compiling for the Sym-1! +#endif + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* Display character definitions */ +#define DISP_1 0x06 // '1' +#define DISP_2 0x5B // '2' +#define DISP_3 0x4F // '3' +#define DISP_4 0x66 // '4' +#define DISP_5 0x6D // '5' +#define DISP_6 0x7C // '6' +#define DISP_7 0x07 // '7' +#define DISP_8 0x7F // '8' +#define DISP_9 0x67 // '9' +#define DISP_0 0x3F // '0' +#define DISP_A 0x77 // 'A' +#define DISP_b 0x7C // 'b' +#define DISP_C 0x39 // 'C' +#define DISP_c 0x58 // 'c' +#define DISP_d 0x5E // 'd' +#define DISP_E 0x79 // 'E' +#define DISP_e 0x7B // 'e' +#define DISP_F 0x71 // 'F' +#define DISP_G 0x7D // 'G' +#define DISP_g 0x6F // 'g' +#define DISP_H 0x76 // 'H' +#define DISP_h 0x74 // 'h' +#define DISP_I 0x06 // 'I' +#define DISP_i 0x04 // 'i' +#define DISP_J 0x1E // 'J' +#define DISP_K 0x74 // 'K' +#define DISP_L 0x38 // 'L' +#define DISP_M_1 0x33 // 'M' +#define DISP_M_2 0x27 // 2nd half +#define DISP_n 0x54 // 'n' +#define DISP_O 0x3F // 'O' +#define DISP_o 0x5C // 'o' +#define DISP_P 0x73 // 'P' +#define DISP_q 0x67 // 'q' +#define DISP_r 0x50 // 'r' +#define DISP_S 0x6D // 'S' +#define DISP_t 0x46 // 't' +#define DISP_U 0x3E // 'U' +#define DISP_u 0x1C // 'u' +#define DISP_V_1 0x64 // 'V' +#define DISP_V_2 0x52 // 2nd half +#define DISP_W_1 0x3C // 'W' +#define DISP_W_2 0x1E // 2nd half +#define DISP_Y 0x6E // 'Y' +#define DISP_Z 0x5B // 'Z' +#define DISP_SPACE 0x00 // ' ' +#define DISP_PERIOD 0x80 // '.' +#define DISP_HYPHEN 0x40 // '-' +#define DISP_APOSTR 0x20 // ''' +#define DISP_EQUAL 0x41 // '=' +#define DISP_3_BAR 0x49 // '=' +#define DISP_BOTTOM 0x08 // '_' +#define DISP_TOP 0x01 // Top segment +#define DISP_LEFT 0x30 // '|' Left side, both segments +#define DISP_RIGHT 0x06 // '|' Right side, both segments +#define DISP_DEGREE 0x63 // 'o' An 'o' character in the upper segments +#define DISP_HAT 0x23 // 'n' An 'n' character in the upper segments +#define DISP_FORK 0x62 // 'u' A 'u' character in the upper segments +#define DISP_SLASH 0x51 // '/' +#define DISP_BACKSLASH 0x34 // '\' +#define DISP_TOP_RIGHT 0x02 // Top right segment +#define DISP_TOP_LEFT 0x20 // Top left segment +#define DISP_LOW_RIGHT 0x04 // Lower right segment +#define DISP_LOW_LEFT 0x10 // Lower left segment + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +int __fastcall__ beep (void); // Beep sound +void __fastcall__ set_D0 (unsigned char); // Set display digit 0 +int __fastcall__ get_D0 (void); // Get value of display digit 0 +void __fastcall__ set_D1 (unsigned char); // Set display digit 1 +int __fastcall__ get_D1 (void); // Get value of display digit 1 +void __fastcall__ set_D2 (unsigned char); // Set display digit 2 +int __fastcall__ get_D2 (void); // Get value of display digit 2 +void __fastcall__ set_D3 (unsigned char); // Set display digit 3 +int __fastcall__ get_D3 (void); // Get value of display digit 3 +void __fastcall__ set_D4 (unsigned char); // Set display digit 4 +int __fastcall__ get_D4 (void); // Get value of display digit 4 +void __fastcall__ set_D5 (unsigned char); // Set display digit 5 +int __fastcall__ get_D5 (void); // Get value of display digit 5 +void __fastcall__ set_D6 (unsigned char); // Set byte to the right of display (leading buffer) +int __fastcall__ get_D6 (void); // Get value of memory byte to the right of display +void __fastcall__ fdisp (void); // Flash display + +int __fastcall__ loadt (int); // Read from tape (id) +int __fastcall__ dumpt (int, int, int); // Write to tape (id, start_addr, end_addr) + +void __fastcall__ set_DDR1A (unsigned char); // Set data direction register 1A (U25) +int __fastcall__ get_DDR1A (void); // Get value of data direction register 1A +void __fastcall__ set_IOR1A (unsigned char); // Set I/O register 1A +int __fastcall__ get_IOR1A (void); // Get value of I/O register 1A + +void __fastcall__ set_DDR1B (unsigned char); // Set data direction register 1B (U25) +int __fastcall__ get_DDR1B (void); // Get value of data direction register 1B +void __fastcall__ set_IOR1B (unsigned char); // Set I/O register 1B +int __fastcall__ get_IOR1B (void); // Get value of I/O register 1B + +void __fastcall__ set_DDR2A (unsigned char); // Set data direction register 2A (U28) +int __fastcall__ get_DDR2A (void); // Get value of data direction register 2A +void __fastcall__ set_IOR2A (unsigned char); // Set I/O register 2A +int __fastcall__ get_IOR2A (void); // Get value of I/O register 2A + +void __fastcall__ set_DDR2B (unsigned char); // Set data direction register 2B (U28) +int __fastcall__ get_DDR2B (void); // Get value of data direction register 2B +void __fastcall__ set_IOR2B (unsigned char); // Set I/O register 2B +int __fastcall__ get_IOR2B (void); // Get value of I/O register 2B + +void __fastcall__ set_DDR3A (unsigned char); // Set data direction register 3A (U29) +int __fastcall__ get_DDR3A (void); // Get value of data direction register 3A +void __fastcall__ set_IOR3A (unsigned char); // Set I/O register 3A +int __fastcall__ get_IOR3A (void); // Get value of I/O register 3A + +void __fastcall__ set_DDR3B (unsigned char); // Set data direction register 3B (U29) +int __fastcall__ get_DDR3B (void); // Get value of data direction register 3B +void __fastcall__ set_IOR3B (unsigned char); // Set I/O register 3B +int __fastcall__ get_IOR3B (void); // Get value of I/O register 3B + + + +/* End of sym1.h */ +#endif diff --git a/include/symio.h b/include/symio.h deleted file mode 100644 index 73b3ce18e..000000000 --- a/include/symio.h +++ /dev/null @@ -1,148 +0,0 @@ -// symio.h -// -// I/O primitives for Sym-1 -// -// Wayne Parham - -#ifndef _SYMIO_H -#define _SYMIO_H - -#include <stddef.h> -#include <stdarg.h> - -int __fastcall__ beep (void); // Beep sound -int __fastcall__ set_D0 (char); // Set display digit 0 -int __fastcall__ get_D0 (void); // Get value of display digit 0 -int __fastcall__ set_D1 (char); // Set display digit 1 -int __fastcall__ get_D1 (void); // Get value of display digit 1 -int __fastcall__ set_D2 (char); // Set display digit 2 -int __fastcall__ get_D2 (void); // Get value of display digit 2 -int __fastcall__ set_D3 (char); // Set display digit 3 -int __fastcall__ get_D3 (void); // Get value of display digit 3 -int __fastcall__ set_D4 (char); // Set display digit 4 -int __fastcall__ get_D4 (void); // Get value of display digit 4 -int __fastcall__ set_D5 (char); // Set display digit 5 -int __fastcall__ get_D5 (void); // Get value of display digit 5 -int __fastcall__ set_D6 (char); // Set byte to the right of display (leading buffer) -int __fastcall__ get_D6 (void); // Get value of memory byte to the right of display -int __fastcall__ fdisp (void); // Flash display - -int __fastcall__ loadt (int); // Read from tape (id) -int __fastcall__ dumpt (int, int, int); // Write to tape (id, start_addr, end_addr) - -int __fastcall__ set_DDR1A (int); // Set data direction register 1A (U25) -int __fastcall__ get_DDR1A (void); // Get value of data direction register 1A -int __fastcall__ set_IOR1A (int); // Set I/O register 1A -int __fastcall__ get_IOR1A (void); // Get value of I/O register 1A - -int __fastcall__ set_DDR1B (int); // Set data direction register 1B (U25) -int __fastcall__ get_DDR1B (void); // Get value of data direction register 1B -int __fastcall__ set_IOR1B (int); // Set I/O register 1B -int __fastcall__ get_IOR1B (void); // Get value of I/O register 1B - -int __fastcall__ set_DDR2A (int); // Set data direction register 2A (U28) -int __fastcall__ get_DDR2A (void); // Get value of data direction register 2A -int __fastcall__ set_IOR2A (int); // Set I/O register 2A -int __fastcall__ get_IOR2A (void); // Get value of I/O register 2A - -int __fastcall__ set_DDR2B (int); // Set data direction register 2B (U28) -int __fastcall__ get_DDR2B (void); // Get value of data direction register 2B -int __fastcall__ set_IOR2B (int); // Set I/O register 2B -int __fastcall__ get_IOR2B (void); // Get value of I/O register 2B - -int __fastcall__ set_DDR3A (int); // Set data direction register 3A (U29) -int __fastcall__ get_DDR3A (void); // Get value of data direction register 3A -int __fastcall__ set_IOR3A (int); // Set I/O register 3A -int __fastcall__ get_IOR3A (void); // Get value of I/O register 3A - -int __fastcall__ set_DDR3B (int); // Set data direction register 3B (U29) -int __fastcall__ get_DDR3B (void); // Get value of data direction register 3B -int __fastcall__ set_IOR3B (int); // Set I/O register 3B -int __fastcall__ get_IOR3B (void); // Get value of I/O register 3B - -#ifndef _STDIO_H - -int __fastcall__ putchar (char); -int __fastcall__ puts (const char* s); -int printf (const char* format, ...); -int sprintf (char* buf, const char* format, ...); -int __fastcall__ vprintf (const char* format, va_list ap); -int __fastcall__ vsnprintf (char* buf, size_t size, const char* format, va_list ap); -int __fastcall__ vsprintf (char* buf, const char* format, va_list ap); -char __fastcall__ getchar (void); -char* __fastcall__ gets (char* s); -int scanf (const char* format, ...); -int sscanf (const char* s, const char* format, ...); -int __fastcall__ vscanf (const char* format, va_list ap); -int __fastcall__ vsscanf (const char* s, const char* format, va_list ap); - -#endif - -// Display character definitions - -#define DISP_1 0x06 // '1' -#define DISP_2 0x5B // '2' -#define DISP_3 0x4F // '3' -#define DISP_4 0x66 // '4' -#define DISP_5 0x6D // '5' -#define DISP_6 0x7C // '6' -#define DISP_7 0x07 // '7' -#define DISP_8 0x7F // '8' -#define DISP_9 0x67 // '9' -#define DISP_0 0x3F // '0' -#define DISP_A 0x77 // 'A' -#define DISP_b 0x7C // 'b' -#define DISP_C 0x39 // 'C' -#define DISP_c 0x58 // 'c' -#define DISP_d 0x5E // 'd' -#define DISP_E 0x79 // 'E' -#define DISP_e 0x7B // 'e' -#define DISP_F 0x71 // 'F' -#define DISP_G 0x7D // 'G' -#define DISP_g 0x6F // 'g' -#define DISP_H 0x76 // 'H' -#define DISP_h 0x74 // 'h' -#define DISP_I 0x06 // 'I' -#define DISP_i 0x04 // 'i' -#define DISP_J 0x1E // 'J' -#define DISP_K 0x74 // 'K' -#define DISP_L 0x38 // 'L' -#define DISP_M_1 0x33 // 'M' -#define DISP_M_2 0x27 // 2nd half -#define DISP_n 0x54 // 'n' -#define DISP_O 0x3F // 'O' -#define DISP_o 0x5C // 'o' -#define DISP_P 0x73 // 'P' -#define DISP_q 0x67 // 'q' -#define DISP_r 0x50 // 'r' -#define DISP_S 0x6D // 'S' -#define DISP_t 0x46 // 't' -#define DISP_U 0x3E // 'U' -#define DISP_u 0x1C // 'u' -#define DISP_V_1 0x64 // 'V' -#define DISP_V_2 0x52 // 2nd half -#define DISP_W_1 0x3C // 'W' -#define DISP_W_2 0x1E // 2nd half -#define DISP_Y 0x6E // 'Y' -#define DISP_Z 0x5B // 'Z' -#define DISP_SPACE 0x00 // ' ' -#define DISP_PERIOD 0x80 // '.' -#define DISP_HYPHEN 0x40 // '-' -#define DISP_APOSTR 0x20 // ''' -#define DISP_EQUAL 0x41 // '=' -#define DISP_3_BAR 0x49 // '=' -#define DISP_BOTTOM 0x08 // '_' -#define DISP_TOP 0x01 // Top segment -#define DISP_LEFT 0x30 // '|' Left side, both segments -#define DISP_RIGHT 0x06 // '|' Right side, both segments -#define DISP_DEGREE 0x63 // 'o' An 'o' character in the upper segments -#define DISP_HAT 0x23 // 'n' An 'n' character in the upper segments -#define DISP_FORK 0x62 // 'u' A 'u' character in the upper segments -#define DISP_SLASH 0x51 // '/' -#define DISP_BACKSLASH 0x34 // '\' -#define DISP_TOP_RIGHT 0x02 // Top right segment -#define DISP_TOP_LEFT 0x20 // Top left segment -#define DISP_LOW_RIGHT 0x04 // Lower right segment -#define DISP_LOW_LEFT 0x10 // Lower left segment - -#endif diff --git a/libsrc/sym1/beep.s b/libsrc/sym1/beep.s index a1f978563..40a3d42c6 100644 --- a/libsrc/sym1/beep.s +++ b/libsrc/sym1/beep.s @@ -1,12 +1,8 @@ -; --------------------------------------------------------------------------- -; beep.s ; -; for Sym-1 +; Wayne Parham (wayne@parhamdata.com) ; -; Wayne Parham +; void beep (void); ; -; wayne@parhamdata.com -; --------------------------------------------------------------------------- .include "sym1.inc" @@ -15,10 +11,8 @@ .segment "CODE" .proc _beep: near -; --------------------------------------------------------------------------- + jsr BEEP ; Beep - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc diff --git a/libsrc/sym1/bitio.s b/libsrc/sym1/bitio.s index 5aa0fde8b..94cd9c5ad 100644 --- a/libsrc/sym1/bitio.s +++ b/libsrc/sym1/bitio.s @@ -1,12 +1,31 @@ -; --------------------------------------------------------------------------- -; bitio.s ; -; for Sym-1 +; Wayne Parham (wayne@parhamdata.com) ; -; Wayne Parham +; void set_DDR1A (int value); +; int get_DDR1A (void); +; void set_IOR1A (int value); +; int get_IOR1A (void); +; void set_DDR1B (int value); +; int get_DDR1B (void); +; void set_IOR1B (int value); +; int get_IOR1B (void); +; void set_DDR2A (int value); +; int get_DDR2A (void); +; void set_IOR2A (int value); +; int get_IOR2A (void); +; void set_DDR2B (int value); +; int get_DDR2B (void); +; void set_IOR2B (int value); +; int get_IOR2B (void); +; void set_DDR3A (int value); +; int get_DDR3A (void); +; void set_IOR3A (int value); +; int get_IOR3A (void); +; void set_DDR3B (int value); +; int get_DDR3B (void); +; void set_IOR3B (int value); +; int get_IOR3B (void); ; -; wayne@parhamdata.com -; --------------------------------------------------------------------------- .include "sym1.inc" @@ -20,211 +39,182 @@ .segment "CODE" .proc _set_DDR1A: near -; --------------------------------------------------------------------------- + sta DDR1A ; Write data direction register for port 1A - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_DDR1A: near -; --------------------------------------------------------------------------- + lda DDR1A ; Read data direction register for port 1A ldx #$00 ; rts ; Return DDR1A -; --------------------------------------------------------------------------- + .endproc .proc _set_IOR1A: near -; --------------------------------------------------------------------------- + sta OR1A ; Write I/O register for port 1A - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_IOR1A: near -; --------------------------------------------------------------------------- + lda OR1A ; Read I/O register for port 1A ldx #$00 ; rts ; Return OR1A -; --------------------------------------------------------------------------- + .endproc - .proc _set_DDR1B: near -; --------------------------------------------------------------------------- + sta DDR1B ; Write data direction register for port 1B - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_DDR1B: near -; --------------------------------------------------------------------------- + lda DDR1B ; Read data direction register for port 1B ldx #$00 ; rts ; Return DDR1B -; --------------------------------------------------------------------------- + .endproc .proc _set_IOR1B: near -; --------------------------------------------------------------------------- + sta OR1B ; Write I/O register for port 1B - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_IOR1B: near -; --------------------------------------------------------------------------- + lda OR1B ; Read I/O register for port 1B ldx #$00 ; rts ; Return OR1B -; --------------------------------------------------------------------------- + .endproc - .proc _set_DDR2A: near -; --------------------------------------------------------------------------- + sta DDR2A ; Write data direction register for port 2A - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_DDR2A: near -; --------------------------------------------------------------------------- + lda DDR2A ; Read data direction register for port 2A ldx #$00 ; rts ; Return DDR2A -; --------------------------------------------------------------------------- + .endproc .proc _set_IOR2A: near -; --------------------------------------------------------------------------- + sta OR2A ; Write I/O register for port 2A - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_IOR2A: near -; --------------------------------------------------------------------------- + lda OR2A ; Read I/O register for port 2A ldx #$00 ; rts ; Return OR2A -; --------------------------------------------------------------------------- + .endproc - .proc _set_DDR2B: near -; --------------------------------------------------------------------------- + sta DDR2B ; Write data direction register for port 2B - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_DDR2B: near -; --------------------------------------------------------------------------- + lda DDR2B ; Read data direction register for port 2B ldx #$00 ; rts ; Return DDR2B -; --------------------------------------------------------------------------- + .endproc .proc _set_IOR2B: near -; --------------------------------------------------------------------------- + sta OR2B ; Write I/O register for port 2B - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_IOR2B: near -; --------------------------------------------------------------------------- + lda OR2B ; Read I/O register for port 2B ldx #$00 ; rts ; Return OR2B -; --------------------------------------------------------------------------- + .endproc - .proc _set_DDR3A: near -; --------------------------------------------------------------------------- + sta DDR3A ; Write data direction register for port 3A - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_DDR3A: near -; --------------------------------------------------------------------------- + lda DDR3A ; Read data direction register for port 3A ldx #$00 ; rts ; Return DDR3A -; --------------------------------------------------------------------------- + .endproc .proc _set_IOR3A: near -; --------------------------------------------------------------------------- + sta OR3A ; Write I/O register for port 3A - lda #$00 ; - ldx #$00 ; rts ; Return 0000 -; --------------------------------------------------------------------------- + .endproc .proc _get_IOR3A: near -; --------------------------------------------------------------------------- + lda OR3A ; Read I/O register for port 3A ldx #$00 ; rts ; Return OR3A -; --------------------------------------------------------------------------- + .endproc - .proc _set_DDR3B: near -; --------------------------------------------------------------------------- + sta DDR3B ; Write data direction register for port 3B - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_DDR3B: near -; --------------------------------------------------------------------------- + lda DDR3B ; Read data direction register for port 3B ldx #$00 ; rts ; Return DDR3B -; --------------------------------------------------------------------------- + .endproc .proc _set_IOR3B: near -; --------------------------------------------------------------------------- + sta OR3B ; Write I/O register for port 3B - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_IOR3B: near -; --------------------------------------------------------------------------- + lda OR3B ; Read I/O register for port 3B ldx #$00 ; rts ; Return OR3B -; --------------------------------------------------------------------------- + .endproc diff --git a/libsrc/sym1/crt0.s b/libsrc/sym1/crt0.s index a85887991..47cc67f07 100644 --- a/libsrc/sym1/crt0.s +++ b/libsrc/sym1/crt0.s @@ -1,12 +1,6 @@ -; --------------------------------------------------------------------------- -; crt0.s ; -; for Sym-1 +; Startup code for cc65 (Sym-1 version) ; -; Wayne Parham -; -; wayne@parhamdata.com -; --------------------------------------------------------------------------- .export _init, _exit .export __STARTUP__ : absolute = 1 ; Mark as startup @@ -19,40 +13,40 @@ .include "zeropage.inc" .include "sym1.inc" -; --------------------------------------------------------------------------- + ; Place the startup code in a special segment .segment "STARTUP" -; --------------------------------------------------------------------------- + ; A little light housekeeping _init: jsr ACCESS ; Unlock System RAM cld ; Clear decimal mode -; --------------------------------------------------------------------------- + ; Turn off console echo lda TECHO and #$7F sta TECHO -; --------------------------------------------------------------------------- + ; Set cc65 argument stack pointer lda #<(__RAM_START__ + __RAM_SIZE__) sta sp lda #>(__RAM_START__ + __RAM_SIZE__) sta sp+1 -; --------------------------------------------------------------------------- + ; Initialize memory storage jsr zerobss ; Clear BSS segment jsr copydata ; Initialize DATA segment jsr initlib ; Run constructors -; --------------------------------------------------------------------------- + ; Call main() jsr _main -; --------------------------------------------------------------------------- + ; Back from main (this is also the _exit entry) _exit: jsr donelib ; Run destructors @@ -61,5 +55,5 @@ _exit: jsr donelib ; Run destructors sta TECHO jsr NACCES ; Lock System RAM rts ; Re-enter Sym-1 monitor -; --------------------------------------------------------------------------- + diff --git a/libsrc/sym1/display.s b/libsrc/sym1/display.s index 530435d87..a8572f1b0 100644 --- a/libsrc/sym1/display.s +++ b/libsrc/sym1/display.s @@ -1,12 +1,22 @@ -; --------------------------------------------------------------------------- -; display.s ; -; for Sym-1 +; Wayne Parham (wayne@parhamdata.com) ; -; Wayne Parham +; int fdisp (void); +; void set_D0 (char segments); +; int get_D0 (void); +; void set_D1 (char segments); +; int get_D1 (void); +; void set_D2 (char segments); +; int get_D2 (void); +; void set_D3 (char segments); +; int get_D3 (void); +; void set_D4 (char segments); +; int get_D4 (void); +; void set_D5 (char segments); +; int get_D5 (void); +; void set_D6 (char segments); +; int get_D6 (void); ; -; wayne@parhamdata.com -; --------------------------------------------------------------------------- .include "sym1.inc" @@ -18,137 +28,114 @@ .segment "CODE" .proc _fdisp: near -; --------------------------------------------------------------------------- + jsr SCAND ; Flash Display - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc - .proc _set_D0: near -; --------------------------------------------------------------------------- + sta DISBUF0 ; Write Digit 0 - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_D0: near -; --------------------------------------------------------------------------- + lda DISBUF0 ; Read Digit 0 ldx #$00 ; rts ; Return DISBUF0 -; --------------------------------------------------------------------------- + .endproc - .proc _set_D1: near -; --------------------------------------------------------------------------- + sta DISBUF1 ; Write Digit 1 - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_D1: near -; --------------------------------------------------------------------------- + lda DISBUF1 ; Read Digit 1 ldx #$00 ; - rts ; Return DISBUF1 -; --------------------------------------------------------------------------- + rts + .endproc - .proc _set_D2: near -; --------------------------------------------------------------------------- + sta DISBUF2 ; Write Digit 2 - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_D2: near -; --------------------------------------------------------------------------- + lda DISBUF2 ; Read Digit 2 ldx #$00 ; rts ; Return DISBUF2 -; --------------------------------------------------------------------------- + .endproc - .proc _set_D3: near -; --------------------------------------------------------------------------- + sta DISBUF3 ; Write Digit 3 - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_D3: near -; --------------------------------------------------------------------------- + lda DISBUF3 ; Read Digit 3 ldx #$00 ; rts ; Return DISBUF3 -; --------------------------------------------------------------------------- + .endproc - .proc _set_D4: near -; --------------------------------------------------------------------------- + sta DISBUF4 ; Write Digit 4 - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_D4: near -; --------------------------------------------------------------------------- + lda DISBUF4 ; Read Digit 4 ldx #$00 ; rts ; Return DISBUF4 -; --------------------------------------------------------------------------- + .endproc - .proc _set_D5: near -; --------------------------------------------------------------------------- + sta DISBUF5 ; Write Digit 5 - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_D5: near -; --------------------------------------------------------------------------- + lda DISBUF5 ; Read Digit 5 ldx #$00 ; rts ; Return DISBUF5 -; --------------------------------------------------------------------------- + .endproc - .proc _set_D6: near -; --------------------------------------------------------------------------- + sta DISBUF6 ; Write byte to the right of display - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- + rts + .endproc .proc _get_D6: near -; --------------------------------------------------------------------------- + lda DISBUF6 ; Read byte to the right of display ldx #$00 ; rts ; Return DISBUF6 -; --------------------------------------------------------------------------- + .endproc diff --git a/libsrc/sym1/getchar.s b/libsrc/sym1/getchar.s deleted file mode 100644 index d82519ce0..000000000 --- a/libsrc/sym1/getchar.s +++ /dev/null @@ -1,21 +0,0 @@ -; --------------------------------------------------------------------------- -; getchar.s -; -; for Sym-1 -; -; Wayne Parham -; --------------------------------------------------------------------------- - -.include "sym1.inc" -.export _getchar - -.segment "CODE" - -.proc _getchar: near -; --------------------------------------------------------------------------- - jsr INTCHR ; Get character using Monitor ROM call - and #$7F ; Strip off top bit - ldx #$00 ; - rts ; Return char -; --------------------------------------------------------------------------- -.endproc diff --git a/libsrc/sym1/putchar.s b/libsrc/sym1/putchar.s deleted file mode 100644 index 1b84416fe..000000000 --- a/libsrc/sym1/putchar.s +++ /dev/null @@ -1,23 +0,0 @@ -; --------------------------------------------------------------------------- -; putchar.s -; -; for Sym-1 -; -; Wayne Parham -; -; wayne@parhamdata.com -; --------------------------------------------------------------------------- - -.include "sym1.inc" -.export _putchar - -.segment "CODE" - -.proc _putchar: near -; --------------------------------------------------------------------------- - jsr OUTCHR ; Send character using Monitor ROM call - lda #$00 ; - ldx #$00 ; - rts ; Return 0000 -; --------------------------------------------------------------------------- -.endproc diff --git a/libsrc/sym1/read.s b/libsrc/sym1/read.s index f0b0194d2..7ab88f1e8 100644 --- a/libsrc/sym1/read.s +++ b/libsrc/sym1/read.s @@ -1,12 +1,8 @@ -; --------------------------------------------------------------------------- -; read.s ; -; for Sym-1 +; Wayne Parham (wayne@parhamdata.com) ; -; Wayne Parham +; int read (int fd, void* buf, unsigned count); ; -; wayne@parhamdata.com -; --------------------------------------------------------------------------- .include "sym1.inc" @@ -16,7 +12,7 @@ .export _read .proc _read -; --------------------------------------------------------------------------- + sta ptr3 stx ptr3+1 ; Count in ptr3 inx @@ -49,6 +45,6 @@ putch: ldy #$00 ; Put char into return buffer done: lda ptr3 ldx ptr3+1 rts ; Return count -; --------------------------------------------------------------------------- + .endproc diff --git a/libsrc/sym1/tapeio.s b/libsrc/sym1/tapeio.s index 3a0c1fa5b..85c9c6fcc 100644 --- a/libsrc/sym1/tapeio.s +++ b/libsrc/sym1/tapeio.s @@ -1,12 +1,9 @@ -; --------------------------------------------------------------------------- -; tapeio.s ; -; for Sym-1 +; Wayne Parham (wayne@parhamdata.com) ; -; Wayne Parham +; int loadt (int id); +; int dumpt (int id, int start_addr, int end_addr); ; -; wayne@parhamdata.com -; --------------------------------------------------------------------------- .include "sym1.inc" @@ -17,7 +14,7 @@ .segment "CODE" .proc _loadt: near -; --------------------------------------------------------------------------- + sta P1L ; Tape record ID to P1L ldx #$00 stx P1H @@ -30,11 +27,11 @@ error: ldx #$00 lda #$FF ; or 00FF if not done: rts -; --------------------------------------------------------------------------- + .endproc .proc _dumpt: near -; --------------------------------------------------------------------------- + sta P3L ; End address stx P3H jsr popax @@ -53,6 +50,6 @@ done: rts error: ldx #$00 lda #$FF ; or 00FF if not done: rts -; --------------------------------------------------------------------------- + .endproc diff --git a/libsrc/sym1/write.s b/libsrc/sym1/write.s index 843dddf1f..f7eb4c55e 100644 --- a/libsrc/sym1/write.s +++ b/libsrc/sym1/write.s @@ -1,12 +1,8 @@ -; --------------------------------------------------------------------------- -; write.s ; -; for Sym-1 +; Wayne Parham (wayne@parhamdata.com) ; -; Wayne Parham +; int write (int fd, const void* buf, int count); ; -; wayne@parhamdata.com -; --------------------------------------------------------------------------- .include "sym1.inc" @@ -16,7 +12,7 @@ .export _write .proc _write -; --------------------------------------------------------------------------- + sta ptr3 stx ptr3+1 ; Count in ptr3 inx @@ -48,6 +44,6 @@ next: inc ptr1 done: lda ptr3 ldx ptr3+1 rts ; Return count -; --------------------------------------------------------------------------- + .endproc diff --git a/samples/symDisplay.c b/samples/symDisplay.c index fa94ce598..23df1e805 100644 --- a/samples/symDisplay.c +++ b/samples/symDisplay.c @@ -6,7 +6,8 @@ // wayne@parhamdata.com // -------------------------------------------------------------------------- -#include <symio.h> +#include <stdio.h> +#include <sym1.h> void main (void) { int delay = 10; diff --git a/samples/symHello.c b/samples/symHello.c index 99b4c57df..99a7745da 100644 --- a/samples/symHello.c +++ b/samples/symHello.c @@ -6,7 +6,8 @@ // wayne@parhamdata.com // -------------------------------------------------------------------------- -#include <symio.h>; +#include <stdio.h> +#include <sym1.h> void main(void) { char c = 0x00; diff --git a/samples/symIO.c b/samples/symIO.c index d887c18b9..1e93e941a 100644 --- a/samples/symIO.c +++ b/samples/symIO.c @@ -6,10 +6,10 @@ // wayne@parhamdata.com // -------------------------------------------------------------------------- -#include <stdio.h>; -#include <symio.h>; -#include <stdlib.h>; -#include <string.h>; +#include <sym1.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> void main(void) { int ddr1a = 0x00; diff --git a/samples/symNotepad.c b/samples/symNotepad.c index bc28ef4b5..79d621223 100644 --- a/samples/symNotepad.c +++ b/samples/symNotepad.c @@ -12,9 +12,10 @@ // // -------------------------------------------------------------------------- -#include <symio.h>; -#include <stdlib.h>; -#include <string.h>; +#include <sym1.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> #define TAPIO_ADDRESS 0xE000 #define TAPIO_MAX_SIZE 0x0FFF diff --git a/samples/symTiny.c b/samples/symTiny.c index b82e952ac..4d03338e6 100644 --- a/samples/symTiny.c +++ b/samples/symTiny.c @@ -8,7 +8,8 @@ // wayne@parhamdata.com // -------------------------------------------------------------------------- -#include <symio.h>; +#include <stdio.h> +#include <sym1.h> void main(void) { char c = 0x00; From 64afb50d5a3002497633ec49aa952496da0e9632 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 6 Jun 2021 21:45:58 -0500 Subject: [PATCH 0910/2710] Makefile changes --- libsrc/Makefile | 38 ++++++++++---------------------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/libsrc/Makefile b/libsrc/Makefile index eee18d0da..fc07862e6 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -149,26 +149,18 @@ GEOSDIRS = common \ runtime \ system -# MACHINE set independently of TARGET lets us easily define new targets -# without changing target.h and target.c in cc65/src/common. Useful -# for initial testing of ports to new systems. - ifeq ($(TARGET),apple2enh) SRCDIR = apple2 OBJPFX = a2 DRVPFX = a2e - MACHINE = $(TARGET) else ifeq ($(TARGET),atarixl) SRCDIR = atari OBJPFX = atr DRVPFX = atrx - MACHINE = $(TARGET) else ifeq ($(TARGET),sim65c02) SRCDIR = sim6502 - MACHINE = $(TARGET) else SRCDIR = $(TARGET) - MACHINE = $(TARGET) endif SRCDIRS = $(SRCDIR) @@ -182,26 +174,16 @@ ifeq ($(TARGET),$(filter $(TARGET),$(GEOS))) SRCDIRS += $(addprefix geos-common/,$(GEOSDIRS)) endif -ifeq ($(TARGET),sym1) - SRCDIRS += common \ - conio \ - dbg \ - em \ - runtime \ - serial \ - sym1 -else - SRCDIRS += common \ - conio \ - dbg \ - em \ - joystick \ - mouse \ - runtime \ - serial \ - tgi \ - zlib -endif +SRCDIRS += common \ + conio \ + dbg \ + em \ + joystick \ + mouse \ + runtime \ + serial \ + tgi \ + zlib vpath %.s $(SRCDIRS) vpath %.c $(SRCDIRS) From 9d509735a8fff81c4f94cb343102540293540c23 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 6 Jun 2021 21:56:23 -0500 Subject: [PATCH 0911/2710] Makefile changes --- libsrc/Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libsrc/Makefile b/libsrc/Makefile index fc07862e6..60946b59f 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -232,7 +232,7 @@ $1_DRVS = $$(patsubst $$($1_DYNPAT),$$($1_DRVPAT),$$($1_DYNS)) $$($1_STCPAT): $$($1_SRCPAT) @echo $$(TARGET) - $$< - static - @$$(CA65) -t $$(MACHINE) -D DYN_DRV=0 $$(CA65FLAGS) --create-dep $$(@:.o=.d) -o $$@ $$< + @$$(CA65) -t $$(TARGET) -D DYN_DRV=0 $$(CA65FLAGS) --create-dep $$(@:.o=.d) -o $$@ $$< OBJS += $$($1_STCS) DEPS += $$($1_STCS:.o=.d) @@ -264,15 +264,15 @@ export CC65_HOME := $(abspath ..) define ASSEMBLE_recipe $(if $(QUIET),,@echo $(TARGET) - $<) -@$(CA65) -t $(MACHINE) $(CA65FLAGS) --create-dep $(@:.o=.d) -o $@ $< +@$(CA65) -t $(TARGET) $(CA65FLAGS) --create-dep $(@:.o=.d) -o $@ $< endef # ASSEMBLE_recipe define COMPILE_recipe $(if $(QUIET),,@echo $(TARGET) - $<) -@$(CC65) -t $(MACHINE) $(CC65FLAGS) --create-dep $(@:.o=.d) --dep-target $@ -o $(@:.o=.s) $< -@$(CA65) -t $(MACHINE) -o $@ $(@:.o=.s) +@$(CC65) -t $(TARGET) $(CC65FLAGS) --create-dep $(@:.o=.d) --dep-target $@ -o $(@:.o=.s) $< +@$(CA65) -t $(TARGET) -o $@ $(@:.o=.s) endef # COMPILE_recipe @@ -284,7 +284,7 @@ endef # COMPILE_recipe $(EXTRA_OBJPAT): $(EXTRA_SRCPAT) | ../libwrk/$(TARGET) ../lib @echo $(TARGET) - $(<F) - @$(CA65) -t $(MACHINE) $(CA65FLAGS) --create-dep $(@:../lib/%.o=../libwrk/$(TARGET)/%.d) -o $@ $< + @$(CA65) -t $(TARGET) $(CA65FLAGS) --create-dep $(@:../lib/%.o=../libwrk/$(TARGET)/%.d) -o $@ $< ../lib/$(TARGET).lib: $(OBJS) | ../lib $(AR65) a $@ $? From 33af3d79975d7b8b2b9bf381ab7193ef1df38561 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 6 Jun 2021 23:53:53 -0500 Subject: [PATCH 0912/2710] sym1.h updates --- include/sym1.h | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/include/sym1.h b/include/sym1.h index 0a919f84d..4fb66b251 100644 --- a/include/sym1.h +++ b/include/sym1.h @@ -100,53 +100,53 @@ int __fastcall__ beep (void); // Beep sound void __fastcall__ set_D0 (unsigned char); // Set display digit 0 -int __fastcall__ get_D0 (void); // Get value of display digit 0 +unsigned char __fastcall__ get_D0 (void); // Get value of display digit 0 void __fastcall__ set_D1 (unsigned char); // Set display digit 1 -int __fastcall__ get_D1 (void); // Get value of display digit 1 +unsigned char __fastcall__ get_D1 (void); // Get value of display digit 1 void __fastcall__ set_D2 (unsigned char); // Set display digit 2 -int __fastcall__ get_D2 (void); // Get value of display digit 2 +unsigned char __fastcall__ get_D2 (void); // Get value of display digit 2 void __fastcall__ set_D3 (unsigned char); // Set display digit 3 -int __fastcall__ get_D3 (void); // Get value of display digit 3 +unsigned char __fastcall__ get_D3 (void); // Get value of display digit 3 void __fastcall__ set_D4 (unsigned char); // Set display digit 4 -int __fastcall__ get_D4 (void); // Get value of display digit 4 +unsigned char __fastcall__ get_D4 (void); // Get value of display digit 4 void __fastcall__ set_D5 (unsigned char); // Set display digit 5 -int __fastcall__ get_D5 (void); // Get value of display digit 5 +unsigned char __fastcall__ get_D5 (void); // Get value of display digit 5 void __fastcall__ set_D6 (unsigned char); // Set byte to the right of display (leading buffer) -int __fastcall__ get_D6 (void); // Get value of memory byte to the right of display +unsigned char __fastcall__ get_D6 (void); // Get value of memory byte to the right of display void __fastcall__ fdisp (void); // Flash display int __fastcall__ loadt (int); // Read from tape (id) int __fastcall__ dumpt (int, int, int); // Write to tape (id, start_addr, end_addr) void __fastcall__ set_DDR1A (unsigned char); // Set data direction register 1A (U25) -int __fastcall__ get_DDR1A (void); // Get value of data direction register 1A +unsigned char __fastcall__ get_DDR1A (void); // Get value of data direction register 1A void __fastcall__ set_IOR1A (unsigned char); // Set I/O register 1A -int __fastcall__ get_IOR1A (void); // Get value of I/O register 1A +unsigned char __fastcall__ get_IOR1A (void); // Get value of I/O register 1A void __fastcall__ set_DDR1B (unsigned char); // Set data direction register 1B (U25) -int __fastcall__ get_DDR1B (void); // Get value of data direction register 1B +unsigned char __fastcall__ get_DDR1B (void); // Get value of data direction register 1B void __fastcall__ set_IOR1B (unsigned char); // Set I/O register 1B -int __fastcall__ get_IOR1B (void); // Get value of I/O register 1B +unsigned char __fastcall__ get_IOR1B (void); // Get value of I/O register 1B void __fastcall__ set_DDR2A (unsigned char); // Set data direction register 2A (U28) -int __fastcall__ get_DDR2A (void); // Get value of data direction register 2A +unsigned char __fastcall__ get_DDR2A (void); // Get value of data direction register 2A void __fastcall__ set_IOR2A (unsigned char); // Set I/O register 2A -int __fastcall__ get_IOR2A (void); // Get value of I/O register 2A +unsigned char __fastcall__ get_IOR2A (void); // Get value of I/O register 2A void __fastcall__ set_DDR2B (unsigned char); // Set data direction register 2B (U28) -int __fastcall__ get_DDR2B (void); // Get value of data direction register 2B +unsigned char __fastcall__ get_DDR2B (void); // Get value of data direction register 2B void __fastcall__ set_IOR2B (unsigned char); // Set I/O register 2B -int __fastcall__ get_IOR2B (void); // Get value of I/O register 2B +unsigned char __fastcall__ get_IOR2B (void); // Get value of I/O register 2B void __fastcall__ set_DDR3A (unsigned char); // Set data direction register 3A (U29) -int __fastcall__ get_DDR3A (void); // Get value of data direction register 3A +unsigned char __fastcall__ get_DDR3A (void); // Get value of data direction register 3A void __fastcall__ set_IOR3A (unsigned char); // Set I/O register 3A -int __fastcall__ get_IOR3A (void); // Get value of I/O register 3A +unsigned char __fastcall__ get_IOR3A (void); // Get value of I/O register 3A void __fastcall__ set_DDR3B (unsigned char); // Set data direction register 3B (U29) -int __fastcall__ get_DDR3B (void); // Get value of data direction register 3B +unsigned char __fastcall__ get_DDR3B (void); // Get value of data direction register 3B void __fastcall__ set_IOR3B (unsigned char); // Set I/O register 3B -int __fastcall__ get_IOR3B (void); // Get value of I/O register 3B +unsigned char __fastcall__ get_IOR3B (void); // Get value of I/O register 3B From 0bbff54378bec65843214a786a60684fc6af67bd Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Jun 2021 00:03:44 -0500 Subject: [PATCH 0913/2710] return val updates --- libsrc/sym1/bitio.s | 24 ++++++++++++------------ libsrc/sym1/display.s | 14 +++++++------- libsrc/sym1/tapeio.s | 4 ++-- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/libsrc/sym1/bitio.s b/libsrc/sym1/bitio.s index 94cd9c5ad..a61dd4800 100644 --- a/libsrc/sym1/bitio.s +++ b/libsrc/sym1/bitio.s @@ -48,7 +48,7 @@ .proc _get_DDR1A: near lda DDR1A ; Read data direction register for port 1A - ldx #$00 ; + ldx #>$0000 ; rts ; Return DDR1A .endproc @@ -63,7 +63,7 @@ .proc _get_IOR1A: near lda OR1A ; Read I/O register for port 1A - ldx #$00 ; + ldx #>$0000 ; rts ; Return OR1A .endproc @@ -78,7 +78,7 @@ .proc _get_DDR1B: near lda DDR1B ; Read data direction register for port 1B - ldx #$00 ; + ldx #>$0000 ; rts ; Return DDR1B .endproc @@ -93,7 +93,7 @@ .proc _get_IOR1B: near lda OR1B ; Read I/O register for port 1B - ldx #$00 ; + ldx #>$0000 ; rts ; Return OR1B .endproc @@ -108,7 +108,7 @@ .proc _get_DDR2A: near lda DDR2A ; Read data direction register for port 2A - ldx #$00 ; + ldx #>$0000 ; rts ; Return DDR2A .endproc @@ -123,7 +123,7 @@ .proc _get_IOR2A: near lda OR2A ; Read I/O register for port 2A - ldx #$00 ; + ldx #>$0000 ; rts ; Return OR2A .endproc @@ -138,7 +138,7 @@ .proc _get_DDR2B: near lda DDR2B ; Read data direction register for port 2B - ldx #$00 ; + ldx #>$0000 ; rts ; Return DDR2B .endproc @@ -153,7 +153,7 @@ .proc _get_IOR2B: near lda OR2B ; Read I/O register for port 2B - ldx #$00 ; + ldx #>$0000 ; rts ; Return OR2B .endproc @@ -168,7 +168,7 @@ .proc _get_DDR3A: near lda DDR3A ; Read data direction register for port 3A - ldx #$00 ; + ldx #>$0000 ; rts ; Return DDR3A .endproc @@ -183,7 +183,7 @@ .proc _get_IOR3A: near lda OR3A ; Read I/O register for port 3A - ldx #$00 ; + ldx #>$0000 ; rts ; Return OR3A .endproc @@ -198,7 +198,7 @@ .proc _get_DDR3B: near lda DDR3B ; Read data direction register for port 3B - ldx #$00 ; + ldx #>$0000 ; rts ; Return DDR3B .endproc @@ -213,7 +213,7 @@ .proc _get_IOR3B: near lda OR3B ; Read I/O register for port 3B - ldx #$00 ; + ldx #>$0000 ; rts ; Return OR3B .endproc diff --git a/libsrc/sym1/display.s b/libsrc/sym1/display.s index a8572f1b0..9bef30c01 100644 --- a/libsrc/sym1/display.s +++ b/libsrc/sym1/display.s @@ -44,7 +44,7 @@ .proc _get_D0: near lda DISBUF0 ; Read Digit 0 - ldx #$00 ; + ldx #>$0000 ; rts ; Return DISBUF0 .endproc @@ -59,7 +59,7 @@ .proc _get_D1: near lda DISBUF1 ; Read Digit 1 - ldx #$00 ; + ldx #>$0000 ; rts .endproc @@ -74,7 +74,7 @@ .proc _get_D2: near lda DISBUF2 ; Read Digit 2 - ldx #$00 ; + ldx #>$0000 ; rts ; Return DISBUF2 .endproc @@ -89,7 +89,7 @@ .proc _get_D3: near lda DISBUF3 ; Read Digit 3 - ldx #$00 ; + ldx #>$0000 ; rts ; Return DISBUF3 .endproc @@ -104,7 +104,7 @@ .proc _get_D4: near lda DISBUF4 ; Read Digit 4 - ldx #$00 ; + ldx #>$0000 ; rts ; Return DISBUF4 .endproc @@ -119,7 +119,7 @@ .proc _get_D5: near lda DISBUF5 ; Read Digit 5 - ldx #$00 ; + ldx #>$0000 ; rts ; Return DISBUF5 .endproc @@ -134,7 +134,7 @@ .proc _get_D6: near lda DISBUF6 ; Read byte to the right of display - ldx #$00 ; + ldx #>$0000 ; rts ; Return DISBUF6 .endproc diff --git a/libsrc/sym1/tapeio.s b/libsrc/sym1/tapeio.s index 85c9c6fcc..e956b6eee 100644 --- a/libsrc/sym1/tapeio.s +++ b/libsrc/sym1/tapeio.s @@ -24,7 +24,7 @@ lda #$00 ldx #$00 ; Return 0000 if successful jmp done -error: ldx #$00 +error: ldx #>$0000 lda #$FF ; or 00FF if not done: rts @@ -47,7 +47,7 @@ done: rts lda #$00 ldx #$00 ; Return 0000 if successful jmp done -error: ldx #$00 +error: ldx #>$0000 lda #$FF ; or 00FF if not done: rts From c961782192f15c4f2099e526d8babcffcabd07fd Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Jun 2021 00:07:09 -0500 Subject: [PATCH 0914/2710] Removed libref.s --- libsrc/sym1/libref.s | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 libsrc/sym1/libref.s diff --git a/libsrc/sym1/libref.s b/libsrc/sym1/libref.s deleted file mode 100644 index 9356d18dc..000000000 --- a/libsrc/sym1/libref.s +++ /dev/null @@ -1,3 +0,0 @@ - - .import _exit - From dc9333a3bbeef7d07535a505120af0205824d0c0 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Jun 2021 00:18:26 -0500 Subject: [PATCH 0915/2710] tapeio.s updates --- libsrc/sym1/tapeio.s | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/libsrc/sym1/tapeio.s b/libsrc/sym1/tapeio.s index e956b6eee..dbb6963ca 100644 --- a/libsrc/sym1/tapeio.s +++ b/libsrc/sym1/tapeio.s @@ -7,7 +7,7 @@ .include "sym1.inc" -.import popax +.import popax, return0, return1 .export _loadt, _dumpt @@ -21,12 +21,8 @@ ldy #$80 jsr LOADT ; Read data from tape bcs error - lda #$00 - ldx #$00 ; Return 0000 if successful - jmp done -error: ldx #>$0000 - lda #$FF ; or 00FF if not -done: rts + jmp return 0 ; Return 0 if sucessful +error: jmp return 1 ; or 1 if not .endproc @@ -44,12 +40,8 @@ done: rts ldy #$80 jsr DUMPT ; Write data to tape bcs error - lda #$00 - ldx #$00 ; Return 0000 if successful - jmp done -error: ldx #>$0000 - lda #$FF ; or 00FF if not -done: rts + jmp return 0 ; Return 0 if sucessful +error: jmp return 1 ; or 1 if not .endproc From 88ee45e9ef33d88cd95ec0cb03bc22a29c53ba26 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Jun 2021 00:35:20 -0500 Subject: [PATCH 0916/2710] tapeio.s updates --- libsrc/sym1/tapeio.s | 8 ++++---- samples/helloworld.c | 9 --------- 2 files changed, 4 insertions(+), 13 deletions(-) delete mode 100644 samples/helloworld.c diff --git a/libsrc/sym1/tapeio.s b/libsrc/sym1/tapeio.s index dbb6963ca..19eeb2444 100644 --- a/libsrc/sym1/tapeio.s +++ b/libsrc/sym1/tapeio.s @@ -21,8 +21,8 @@ ldy #$80 jsr LOADT ; Read data from tape bcs error - jmp return 0 ; Return 0 if sucessful -error: jmp return 1 ; or 1 if not + jmp return0 ; Return 0 if sucessful +error: jmp return1 ; or 1 if not .endproc @@ -40,8 +40,8 @@ error: jmp return 1 ; or 1 if not ldy #$80 jsr DUMPT ; Write data to tape bcs error - jmp return 0 ; Return 0 if sucessful -error: jmp return 1 ; or 1 if not + jmp return0 ; Return 0 if sucessful +error: jmp return1 ; or 1 if not .endproc diff --git a/samples/helloworld.c b/samples/helloworld.c deleted file mode 100644 index 057a153e8..000000000 --- a/samples/helloworld.c +++ /dev/null @@ -1,9 +0,0 @@ -// Traditional "Hello World" program - -#include <stdio.h> - -void main (void) -{ - printf( "Hello World!\n" ); - return; -} From a3fce656b7c8761346a2b565046f9a371413ca3f Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Jun 2021 00:42:13 -0500 Subject: [PATCH 0917/2710] Samples updates --- samples/Makefile | 23 +++++------------------ samples/helloworld.c | 8 ++++++++ 2 files changed, 13 insertions(+), 18 deletions(-) create mode 100644 samples/helloworld.c diff --git a/samples/Makefile b/samples/Makefile index 0cd867054..c8c02dbe3 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -8,10 +8,6 @@ # var. to build for another target system. SYS ?= c64 -# New targets can define MACHINE separately -# from target if needed. -MACHINE=$(SYS) - # Just the usual way to define a variable # containing a single space character. SPACE := @@ -139,21 +135,19 @@ LDFLAGS_tgidemo_atarixl = --start-addr 0x4000 %: %.s .c.o: - $(CC) $(CFLAGS) -Ors --codesize 500 -T -g -t $(MACHINE) $< + $(CC) $(CFLAGS) -Ors --codesize 500 -T -g -t $(SYS) $< $(AS) $(<:.c=.s) .s.o: - $(AS) $(ASFLAGS) -t $(MACHINE) $< + $(AS) $(ASFLAGS) -t $(SYS) $< .PRECIOUS: %.o .o: ifeq ($(SYS),vic20) $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib -else ifeq ($(SYS),sym1) - $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@.bin -C sym1.cfg -m $@.map $^ $(SYS).lib else - $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(MACHINE) -m $@.map $^ $(SYS).lib + $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(SYS) -m $@.map $^ $(SYS).lib endif # -------------------------------------------------------------------------- @@ -161,9 +155,7 @@ endif # disasm depends on cpp -ifneq ($(SYS),sym1) - DIRLIST = tutorial geos -endif +DIRLIST = tutorial geos # -------------------------------------------------------------------------- # Lists of executables @@ -276,12 +268,10 @@ EXELIST_gamate = \ hello EXELIST_geos-cbm = \ - helloworld \ ascii \ diodemo EXELIST_geos-apple = \ - helloworld \ ascii EXELIST_lunix = \ @@ -322,10 +312,7 @@ EXELIST_supervision = \ supervisionhello EXELIST_sym1 = \ - helloworld \ - symHello \ - symTiny \ - symDisplay + helloworld EXELIST_telestrat = \ ascii \ diff --git a/samples/helloworld.c b/samples/helloworld.c new file mode 100644 index 000000000..9aa4197d8 --- /dev/null +++ b/samples/helloworld.c @@ -0,0 +1,8 @@ +// Traditional "Hello World" program + +#include <stdio.h> + +int main() { + printf("Hello, World!"); + return 0; +} From 975e43892ff05462eeb23be37165c77247aba871 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Jun 2021 00:48:02 -0500 Subject: [PATCH 0918/2710] Samples cleanup --- samples/symDisplay.c | 361 ------------------------------------- samples/symHello.c | 40 ---- samples/symIO.c | 170 ----------------- samples/symNotepad.c | 200 -------------------- samples/symTiny.c | 43 ----- targettest/sym1/build | 36 ---- targettest/sym1/build_32k | 36 ---- targettest/sym1/build_4k | 36 ---- targettest/sym1/clean | 14 -- targettest/sym1/readme.txt | 11 -- 10 files changed, 947 deletions(-) delete mode 100644 samples/symDisplay.c delete mode 100644 samples/symHello.c delete mode 100644 samples/symIO.c delete mode 100644 samples/symNotepad.c delete mode 100644 samples/symTiny.c delete mode 100644 targettest/sym1/build delete mode 100644 targettest/sym1/build_32k delete mode 100644 targettest/sym1/build_4k delete mode 100644 targettest/sym1/clean delete mode 100644 targettest/sym1/readme.txt diff --git a/samples/symDisplay.c b/samples/symDisplay.c deleted file mode 100644 index 23df1e805..000000000 --- a/samples/symDisplay.c +++ /dev/null @@ -1,361 +0,0 @@ -// -------------------------------------------------------------------------- -// Sym-1 front panel display example -// -// Wayne Parham -// -// wayne@parhamdata.com -// -------------------------------------------------------------------------- - -#include <stdio.h> -#include <sym1.h> - -void main (void) { - int delay = 10; - int flashes = 255; - int displayable = 1; - int e = 0; - int r = 0; - int d = 0; - int i = 0; - int l = 0; - int t = 0; - int z = 0; - char c = 0x00; - char buffer[41] = { 0x00 }; - - puts( "\nType a message (40 chars max) and press ENTER, please:\n" ); - - while( (c != '\r') && (i < 41) ) { - c = getchar(); - putchar( c ); - buffer[i] = c; - i++; - if( i == 40 ) { - puts( "\n\n--- Reached 40 character limit. ---" ); - } - } - - i--; // index is one past end - - while( z == 0 ) { - puts( "\n\nHow many times (0 for forever) to repeat?" ); - c = getchar(); - putchar( c ); - if( (c >= '0') && (c <= '9') ) { // between 1 and 9 loops allowed - z = 1; // a number was pressed - t = c - '0'; // convert char to int - puts( "\n\nLook at the front panel.\n" ); - } - else { - puts( "\nWhat?" ); - z = 0; // keep asking for a number - } - } - - z = 0; - while( (z < t) || (t == 0) ) { - - z++; - - putchar( '\r' ); // Send CR to console - - - set_D0( DISP_SPACE ); // Clear the display - set_D1( DISP_SPACE ); - set_D2( DISP_SPACE ); - set_D3( DISP_SPACE ); - set_D4( DISP_SPACE ); - set_D5( DISP_SPACE ); - set_D6( DISP_SPACE ); - - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } - - for( l = 0; l <= i; l++ ) { - - displayable = 1; // Assume character is mapped - - switch( buffer[l] ) { // Put the typed charaters - case '1': // into the display buffer - set_D6( DISP_1 ); // one at a time - break; - case '2': - set_D6( DISP_2 ); - break; - case '3': - set_D6( DISP_3 ); - break; - case '4': - set_D6( DISP_4 ); - break; - case '5': - set_D6( DISP_5 ); - break; - case '6': - set_D6( DISP_6 ); - break; - case '7': - set_D6( DISP_7 ); - break; - case '8': - set_D6( DISP_8 ); - break; - case '9': - set_D6( DISP_9 ); - break; - case '0': - set_D6( DISP_0 ); - break; - case 'A': - set_D6( DISP_A ); - break; - case 'a': - set_D6( DISP_A ); - break; - case 'B': - set_D6( DISP_b ); - break; - case 'b': - set_D6( DISP_b ); - break; - case 'C': - set_D6( DISP_C ); - break; - case 'c': - set_D6( DISP_c ); - break; - case 'D': - set_D6( DISP_d ); - break; - case 'd': - set_D6( DISP_d ); - break; - case 'E': - set_D6( DISP_E ); - break; - case 'e': - set_D6( DISP_e ); - break; - case 'F': - set_D6( DISP_F ); - break; - case 'f': - set_D6( DISP_F ); - break; - case 'G': - set_D6( DISP_G ); - break; - case 'g': - set_D6( DISP_g ); - break; - case 'H': - set_D6( DISP_H ); - break; - case 'h': - set_D6( DISP_h ); - break; - case 'I': - set_D6( DISP_I ); - break; - case 'i': - set_D6( DISP_i ); - break; - case 'J': - set_D6( DISP_J ); - break; - case 'j': - set_D6( DISP_J ); - break; - case 'K': - set_D6( DISP_K ); - break; - case 'k': - set_D6( DISP_K ); - break; - case 'L': - set_D6( DISP_L ); - break; - case 'l': - set_D6( DISP_L ); - break; - case 'M': - set_D0( get_D1() ); - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( DISP_M_1 ); - set_D6( DISP_M_2 ); - break; - case 'm': - set_D0( get_D1() ); - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( DISP_M_1 ); - set_D6( DISP_M_2 ); - break; - case 'N': - set_D6( DISP_n ); - break; - case 'n': - set_D6( DISP_n ); - break; - case 'O': - set_D6( DISP_O ); - break; - case 'o': - set_D6( DISP_o ); - break; - case 'P': - set_D6( DISP_P ); - break; - case 'p': - set_D6( DISP_P ); - break; - case 'Q': - set_D6( DISP_q ); - break; - case 'q': - set_D6( DISP_q ); - break; - case 'R': - set_D6( DISP_r ); - break; - case 'r': - set_D6( DISP_r ); - break; - case 'S': - set_D6( DISP_S ); - break; - case 's': - set_D6( DISP_S ); - break; - case 'T': - set_D6( DISP_t ); - break; - case 't': - set_D6( DISP_t ); - break; - case 'U': - set_D6( DISP_U ); - break; - case 'u': - set_D6( DISP_u ); - break; - case 'V': - set_D0( get_D1() ); - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( DISP_V_1 ); - set_D6( DISP_V_2 ); - break; - case 'v': - set_D0( get_D1() ); - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( DISP_V_1 ); - set_D6( DISP_V_2 ); - break; - case 'W': - set_D0( get_D1() ); - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( DISP_W_1 ); - set_D6( DISP_W_2 ); - break; - case 'w': - set_D0( get_D1() ); - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( DISP_W_1 ); - set_D6( DISP_W_2 ); - break; - case 'Y': - set_D6( DISP_Y ); - break; - case 'y': - set_D6( DISP_Y ); - break; - case 'Z': - set_D6( DISP_Z ); - break; - case 'z': - set_D6( DISP_Z ); - break; - case ' ': - set_D6( DISP_SPACE ); - break; - case '.': - set_D6( DISP_PERIOD ); - break; - case '-': - set_D6( DISP_HYPHEN ); - break; - case '\'': - set_D6( DISP_APOSTR ); - break; - case '"': - set_D6( DISP_APOSTR ); - break; - case '=': - set_D6( DISP_EQUAL ); - break; - case '_': - set_D6( DISP_BOTTOM ); - break; - case '/': - set_D6( DISP_SLASH ); - break; - case '\\': - set_D6( DISP_BACKSLASH ); - break; - default: - displayable = 0; // Character not mapped - } - - if( displayable ) { - - putchar( buffer[l] ); // Send it to the console - - set_D0( get_D1() ); // Scroll to the left - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( get_D6() ); - - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } - } - } - - for( e = 0; e < 6; e++ ) { // Gradually fill the - set_D0( get_D1() ); // display with spaces - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( DISP_SPACE ); - set_D6( DISP_SPACE ); - for( d = 0; d < flashes ; d++ ) { - fdisp(); // Display - } - } - } - - puts( "\n\nEnjoy your day!\n\n" ); - - return; -} diff --git a/samples/symHello.c b/samples/symHello.c deleted file mode 100644 index 99a7745da..000000000 --- a/samples/symHello.c +++ /dev/null @@ -1,40 +0,0 @@ -// -------------------------------------------------------------------------- -// Hello World for Sym-1 -// -// Wayne Parham -// -// wayne@parhamdata.com -// -------------------------------------------------------------------------- - -#include <stdio.h> -#include <sym1.h> - -void main(void) { - char c = 0x00; - int d = 0x00; - int l = 0x00; - - printf( "\nHello World!\n\n" ); - - for( l = 0; l < 2; l++ ) { - beep(); - for( d = 0; d < 10 ; d++ ) { - } - } - printf( "Type a line and press ENTER, please.\n\n" ); - - while( c != '\r' ) { - c = getchar(); - putchar( c ); - } - - printf( "\n\nThanks!\n\n" ); - - for( l = 0; l < 5; l++ ) { - beep(); - for( d = 0; d < 10 ; d++ ) { - } - } - - return; -} diff --git a/samples/symIO.c b/samples/symIO.c deleted file mode 100644 index 1e93e941a..000000000 --- a/samples/symIO.c +++ /dev/null @@ -1,170 +0,0 @@ -// -------------------------------------------------------------------------- -// Sym-1 digital I/O interface example -// -// Wayne Parham -// -// wayne@parhamdata.com -// -------------------------------------------------------------------------- - -#include <sym1.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -void main(void) { - int ddr1a = 0x00; - int ior1a = 0x00; - int ddr1b = 0x00; - int ior1b = 0x00; - int ddr2a = 0x00; - int ior2a = 0x00; - int ddr2b = 0x00; - int ior2b = 0x00; - int ddr3a = 0x00; - int ior3a = 0x00; - int ddr3b = 0x00; - int ior3b = 0x00; - int l = 0x00; - int val = 0x00; - int going = 0x01; - int instr = 0x01; - char* vp = 0x00; - char cmd[20] = { 0x00 }; - - while( going ) { - - putchar( '\r' ); - for( l = 0; l < 25; l++ ) { - putchar( '\n' ); - } - - ddr1a = get_DDR1A(); - ior1a = get_IOR1A(); - ddr1b = get_DDR1B(); - ior1b = get_IOR1B(); - ddr2a = get_DDR2A(); - ior2a = get_IOR2A(); - ddr2b = get_DDR2B(); - ior2b = get_IOR2B(); - ddr3a = get_DDR3A(); - ior3a = get_IOR3A(); - ddr3b = get_DDR3B(); - ior3b = get_IOR3B(); - - puts( "================== Digital I/O Status ==================" ); - puts( " Port1A Port1B Port2A Port2B Port3A Port3B" ); - printf( "DDR %02X %02X %02X %02X %02X %02X\n\r",ddr1a,ddr1b,ddr2a,ddr2b,ddr3a,ddr3b ); - printf( "IOR %02X %02X %02X %02X %02X %02X\n\r",ior1a,ior1b,ior2a,ior2b,ior3a,ior3b ); - puts( "========================================================\n" ); - - if( instr ) { - puts( "You can set any register by typing 'register value' so" ); - puts( "as an example, to set register IOR2A with the top five" ); - puts( "bits off and the bottom three on, type 'IOR2A 07'." ); - puts( "Press ENTER without any command to see register values" ); - puts( "without changing any of them. Type 'help' to see these" ); - puts( "instructions again and type 'stop' to end the program.\n"); - puts( "Available registers: DDR1A, IOR1A, DDR1B, IOR1B, DDR2A" ); - puts( "IOR2A, DDR2B, IOR2B, DDR3A, IOR3A, DDR3B and IOR3B." ); - instr = 0; - } - - printf( "\n Command: " ); - - fgets(cmd, sizeof(cmd)-1, stdin); - cmd[strlen(cmd)-1] = '\0'; - - if( strncasecmp(cmd, "stop", 4) == 0) { - going = 0; - } - else if( strncasecmp(cmd, "help", 4) == 0) { - instr = 1; - } - else if( strncasecmp(cmd, "ddr1a", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { - val = atoi( vp ); - set_DDR1A( val ); - } - } - else if( strncasecmp(cmd, "ior1a", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { - val = atoi( vp ); - set_IOR1A( val ); - } - } - else if( strncasecmp(cmd, "ddr1b", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { - val = atoi( vp ); - set_DDR1B( val ); - } - } - else if( strncasecmp(cmd, "ior1b", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { - val = atoi( vp ); - set_IOR1B( val ); - } - } - else if( strncasecmp(cmd, "ddr2a", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { - val = atoi( vp ); - set_DDR2A( val ); - } - } - else if( strncasecmp(cmd, "ior2a", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { - val = atoi( vp ); - set_IOR2A( val ); - } - } - else if( strncasecmp(cmd, "ddr2b", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { - val = atoi( vp ); - set_DDR2B( val ); - } - } - else if( strncasecmp(cmd, "ior2b", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { - val = atoi( vp ); - set_IOR2B( val ); - } - } - else if( strncasecmp(cmd, "ddr3a", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { - val = atoi( vp ); - set_DDR3A( val ); - } - } - else if( strncasecmp(cmd, "ior3a", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { - val = atoi( vp ); - set_IOR3A( val ); - } - } - else if( strncasecmp(cmd, "ddr3b", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { - val = atoi( vp ); - set_DDR3B( val ); - } - } - else if( strncasecmp(cmd, "ior3b", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { - val = atoi( vp ); - set_IOR3B( val ); - } - } - } - - return; -} diff --git a/samples/symNotepad.c b/samples/symNotepad.c deleted file mode 100644 index 79d621223..000000000 --- a/samples/symNotepad.c +++ /dev/null @@ -1,200 +0,0 @@ -// -------------------------------------------------------------------------- -// Sym-1 Notepad -// -// Wayne Parham -// -// wayne@parhamdata.com -// -------------------------------------------------------------------------- -// -// Note: This program requires RAM memory in locations 0xE000 - 0xEFFF -// Alternatively, the tape I/O buffer location and size can be -// changed by altering the defined TAPIO values below. -// -// -------------------------------------------------------------------------- - -#include <sym1.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#define TAPIO_ADDRESS 0xE000 -#define TAPIO_MAX_SIZE 0x0FFF - -void main(void) { - char c = 0x00; - int l = 0x00; - int p = 0x00; - int error = 0x00; - int running = 0x01; - int writing = 0x01; - int instruction_needed = 0x01; - int heap_size = 0x00; - char* tapio = (char*) TAPIO_ADDRESS; - char* buffer; - - heap_size = _heapmaxavail(); - - if( heap_size > TAPIO_MAX_SIZE ) { // No need to malloc more than - heap_size = TAPIO_MAX_SIZE; // the interface allows - } - - buffer = malloc( heap_size ); - memset( buffer, 0x00, heap_size ); - - if( buffer == 0x00 ) { - puts( "Memory full." ); - running = 0; - } - - tapio[0] = 0x00; // Check tape interface memory - if( tapio[0] != 0x00 ) - error = 1; - - tapio[0] = 0xFF; - if( tapio[0] != 0xFF ) - error = 1; - - tapio[TAPIO_MAX_SIZE] = 0x00; - if( tapio[TAPIO_MAX_SIZE] != 0x00 ) - error = 1; - - tapio[TAPIO_MAX_SIZE] = 0xFF; - if( tapio[TAPIO_MAX_SIZE] != 0xFF ) - error = 1; - - if( error ) { - printf( "\nNo memory at location %p, aborting.\n", tapio ); - running = 0; - } - else { - memset( tapio, 0, TAPIO_MAX_SIZE ); - } - - - while( running ) { - - putchar( '\r' ); - for( l = 0; l < 25; l++ ) { - putchar( '\n' ); - } - - puts( "===================== Sym-1 Notepad ====================" ); - - if( instruction_needed ) { - puts( "Enter text and you can save it to tape for reloading" ); - puts( "later. There are four special 'command' characters:\n" ); - puts( " Control-S Save to tape" ); - puts( " Control-L Load from tape" ); - puts( " Control-C Clear memory" ); - puts( " Control-X Exit" ); - puts( "========================================================\n" ); - } - - while( writing ) { - - c = getchar(); - - if( c == 0x08 ) { // Backspace - if( p > 0 ) { - buffer[p] = 0x00; - p--; - } - } - else if( c == 0x13 ) { // Save - puts( "\n========================= Save =========================" ); - puts( "\nPress any key to save." ); - c = getchar(); - for( l = 0; l <= p; l++ ) { - tapio[l] = buffer[l]; - } - l++; - tapio[l] = 0x00; - puts( "Saving to tape." ); - error = dumpt( 'N', (int) tapio, (int) tapio+p ); - if( error ) { - puts( "\nTape error." ); - } - else - { - putchar( '\r' ); - for( l = 0; l < 25; l++ ) { - putchar( '\n' ); - } - } - puts( "===================== Sym-1 Notepad ====================\n" ); - for( l = 0; l <= p; l++ ) { - putchar( buffer[l] ); - if( buffer[l] == '\r' ) { - putchar( '\n' ); - } - } - } - else if( c == 0x0C ) { // Load - p = 0; - puts( "\nLoading from tape." ); - memset( buffer, 0, heap_size ); - memset( tapio, 0, TAPIO_MAX_SIZE ); - error = loadt( 'N' ); - if( error ) { - puts( "\nTape error." ); - puts( "===================== Sym-1 Notepad ====================\n" ); - } - else - { - for( l = 0; l <= heap_size; l++ ) { - buffer[l] = tapio[l]; - } - - p = strlen( buffer ); - - putchar( '\r' ); - for( l = 0; l < 25; l++ ) { - putchar( '\n' ); - } - puts( "===================== Sym-1 Notepad ====================\n" ); - - for( l = 0; l <= p; l++ ) { - putchar( buffer[l] ); - if( buffer[l] == '\r' ) { - putchar( '\n' ); - } - } - } - } - else if( c == 0x03 ) { // Clear - p = 0; - memset( buffer, 0, heap_size ); - putchar( '\r' ); - for( l = 0; l < 25; l++ ) { - putchar( '\n' ); - } - puts( "===================== Sym-1 Notepad ====================\n" ); - } - else if( c == 0x18 ) { // Exit - writing = 0; - running = 0; - } - else { - if( p >= heap_size - 1 ) { - puts( "\n========================= End =========================" ); - puts( "Buffer full." ); - } - else { - if( c == '\r' ) { - putchar( '\n' ); - } - buffer[p] = c; - putchar( c ); - } - p++; - } - } - } - - free( buffer ); - - puts( "\nEnjoy your day!\n" ); - - return; -} - diff --git a/samples/symTiny.c b/samples/symTiny.c deleted file mode 100644 index 4d03338e6..000000000 --- a/samples/symTiny.c +++ /dev/null @@ -1,43 +0,0 @@ -// -------------------------------------------------------------------------- -// Hello World for Sym-1 -// -// Uses only getchar, putchar and puts, generating smaller code than printf -// -// Wayne Parham -// -// wayne@parhamdata.com -// -------------------------------------------------------------------------- - -#include <stdio.h> -#include <sym1.h> - -void main(void) { - char c = 0x00; - int d = 0x00; - int l = 0x00; - - puts( "Hello World!\n" ); - - puts( "Type a line and press ENTER, please:\n" ); - - for( l = 0; l < 2; l++ ) { - beep(); - for( d = 0; d < 10 ; d++ ) { - } - } - - while( c != '\r' ) { - c = getchar(); - putchar( c ); - } - - puts( "\n\nThanks!\n" ); - - for( l = 0; l < 5; l++ ) { - beep(); - for( d = 0; d < 10 ; d++ ) { - } - } - - return; -} diff --git a/targettest/sym1/build b/targettest/sym1/build deleted file mode 100644 index 6688da0a3..000000000 --- a/targettest/sym1/build +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash -# -# build.sh - -if [ -f $1.c ]; then - echo - echo "--- Building $1 ---" - - if [ -f $1.s ]; then - rm $1.s - fi - if [ -f $1.o ]; then - rm $1.o - fi - if [ -f $1.bin ]; then - rm $1.bin - fi - if [ -f $1.hex ]; then - rm $1.hex - fi - - cc65 -t sym1 -O $1.c - ca65 $1.s - ld65 -C sym1.cfg -m $1.map -o $1.bin $1.o sym1.lib - if [ -f $1.bin ]; then - bin2hex $1.bin $1.hex > /dev/null 2>&1 - fi - if [ -f $1.hex ]; then - echo "--- $1.hex made ---" - else - echo "--- $1.hex FAIL ---" - fi - - -fi - diff --git a/targettest/sym1/build_32k b/targettest/sym1/build_32k deleted file mode 100644 index 555bda0b4..000000000 --- a/targettest/sym1/build_32k +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash -# -# build.sh - -if [ -f $1.c ]; then - echo - echo "--- Building $1 ---" - - if [ -f $1.s ]; then - rm $1.s - fi - if [ -f $1.o ]; then - rm $1.o - fi - if [ -f $1.bin ]; then - rm $1.bin - fi - if [ -f $1.hex ]; then - rm $1.hex - fi - - cc65 -t sym1 -O $1.c - ca65 $1.s - ld65 -C sym1-32k.cfg -m $1.map -o $1.bin $1.o sym1.lib - if [ -f $1.bin ]; then - bin2hex $1.bin $1.hex > /dev/null 2>&1 - fi - if [ -f $1.hex ]; then - echo "--- $1.hex made ---" - else - echo "--- $1.hex FAIL ---" - fi - - -fi - diff --git a/targettest/sym1/build_4k b/targettest/sym1/build_4k deleted file mode 100644 index 502bb6aa9..000000000 --- a/targettest/sym1/build_4k +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash -# -# build.sh - -if [ -f $1.c ]; then - echo - echo "--- Building $1 ---" - - if [ -f $1.s ]; then - rm $1.s - fi - if [ -f $1.o ]; then - rm $1.o - fi - if [ -f $1.bin ]; then - rm $1.bin - fi - if [ -f $1.hex ]; then - rm $1.hex - fi - - cc65 -t sym1 -O $1.c - ca65 $1.s - ld65 -C sym1-4k.cfg -m $1.map -o $1.bin $1.o sym1.lib - if [ -f $1.bin ]; then - bin2hex $1.bin $1.hex > /dev/null 2>&1 - fi - if [ -f $1.hex ]; then - echo "--- $1.hex made ---" - else - echo "--- $1.hex FAIL ---" - fi - - -fi - diff --git a/targettest/sym1/clean b/targettest/sym1/clean deleted file mode 100644 index c0d77390e..000000000 --- a/targettest/sym1/clean +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -# -# clean.sh - -if [ -f $1.c ]; then - echo - echo "--- Cleaning $1 ---" - - rm $1.s $1.o $1.map $1.bin $1.hex > /dev/null 2>&1 - - echo "--- Cleaned $1 ---" - -fi - diff --git a/targettest/sym1/readme.txt b/targettest/sym1/readme.txt deleted file mode 100644 index 74bcb5527..000000000 --- a/targettest/sym1/readme.txt +++ /dev/null @@ -1,11 +0,0 @@ -These simple build scripts can be used to build any single-file C program -you might write. Notice the diference in the linker line for the 4k build -compared with the 32k build. Small programs can be compiled with either -build script, but they won't run on a 4k machine if compiled for a 32k -system. So if you have a program that's small enough to fit in 4k, it is -probably better to build with the 4k script so it will run on Sym-1 machines -that do not have an expansion memory board. - -Usage: build <program> (don't include the .c extension) - clean <program> (removes intermediate and output files) - From 5eafd8115f2077f668616c1534c21c0fd14ad9c4 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Jun 2021 00:53:15 -0500 Subject: [PATCH 0919/2710] Cleanup whitespace in Makefile --- samples/Makefile | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index c8c02dbe3..e455852c6 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -334,13 +334,12 @@ ifndef EXELIST_$(SYS) EXELIST_$(SYS) := ${patsubst %.c,%,$(wildcard *.c)} endif -define SUBDIR_recipe +define SUBDIR_recipe @$(MAKE) -C $(dir) --no-print-directory $@ endef # SUBDIR_recipe - # -------------------------------------------------------------------------- # Rules to make the binaries and the disk @@ -481,5 +480,4 @@ mostlyclean: clean: mostlyclean @$(DEL) $(EXELIST_$(SYS)) $(DISK_$(SYS)) 2>$(NULLDEV) @$(DEL) multdemo.? ovrldemo.? 2>$(NULLDEV) - @$(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) - + $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) From 732a5fb9a7409eca69faae7e7ce7423b77e493e1 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Jun 2021 00:56:50 -0500 Subject: [PATCH 0920/2710] Remove bin and hex references from samples/Makefile --- samples/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/Makefile b/samples/Makefile index e455852c6..32a0086d8 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -475,7 +475,7 @@ zip: # Clean-up rules mostlyclean: - @$(DEL) *.lbl *.map *.bin *.hex *.o *.s 2>$(NULLDEV) + @$(DEL) *.lbl *.map *.o *.s 2>$(NULLDEV) clean: mostlyclean @$(DEL) $(EXELIST_$(SYS)) $(DISK_$(SYS)) 2>$(NULLDEV) From 79757ee28093884e1b845a885a2a1e6e9b97c140 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Jun 2021 01:04:55 -0500 Subject: [PATCH 0921/2710] Removed 'return' from samples (with void main) --- targettest/sym1/symDisplay.c | 2 -- targettest/sym1/symHello.c | 2 -- targettest/sym1/symIO.c | 2 -- targettest/sym1/symNotepad.c | 2 -- targettest/sym1/symTiny.c | 2 -- 5 files changed, 10 deletions(-) diff --git a/targettest/sym1/symDisplay.c b/targettest/sym1/symDisplay.c index fa94ce598..18ae54797 100644 --- a/targettest/sym1/symDisplay.c +++ b/targettest/sym1/symDisplay.c @@ -355,6 +355,4 @@ void main (void) { } puts( "\n\nEnjoy your day!\n\n" ); - - return; } diff --git a/targettest/sym1/symHello.c b/targettest/sym1/symHello.c index 99b4c57df..2cab3cbde 100644 --- a/targettest/sym1/symHello.c +++ b/targettest/sym1/symHello.c @@ -34,6 +34,4 @@ void main(void) { for( d = 0; d < 10 ; d++ ) { } } - - return; } diff --git a/targettest/sym1/symIO.c b/targettest/sym1/symIO.c index d887c18b9..d1cbe8137 100644 --- a/targettest/sym1/symIO.c +++ b/targettest/sym1/symIO.c @@ -165,6 +165,4 @@ void main(void) { } } } - - return; } diff --git a/targettest/sym1/symNotepad.c b/targettest/sym1/symNotepad.c index bc28ef4b5..f59eebda8 100644 --- a/targettest/sym1/symNotepad.c +++ b/targettest/sym1/symNotepad.c @@ -193,7 +193,5 @@ void main(void) { free( buffer ); puts( "\nEnjoy your day!\n" ); - - return; } diff --git a/targettest/sym1/symTiny.c b/targettest/sym1/symTiny.c index b82e952ac..7806d5629 100644 --- a/targettest/sym1/symTiny.c +++ b/targettest/sym1/symTiny.c @@ -37,6 +37,4 @@ void main(void) { for( d = 0; d < 10 ; d++ ) { } } - - return; } From 6cf4bd99bbb96e895ee93d255c555966672aa412 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Jun 2021 11:50:47 -0500 Subject: [PATCH 0922/2710] Added Makefile for targettest/sym1 --- targettest/sym1/Makefile | 55 ++++++++++++++++++++++++++++++++++++ targettest/sym1/symDisplay.c | 3 +- targettest/sym1/symHello.c | 3 +- targettest/sym1/symIO.c | 8 +++--- targettest/sym1/symNotepad.c | 7 +++-- targettest/sym1/symTiny.c | 3 +- 6 files changed, 69 insertions(+), 10 deletions(-) create mode 100644 targettest/sym1/Makefile diff --git a/targettest/sym1/Makefile b/targettest/sym1/Makefile new file mode 100644 index 000000000..c8508f1e0 --- /dev/null +++ b/targettest/sym1/Makefile @@ -0,0 +1,55 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= sym1 + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) + CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) + CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) + LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) +endif + +all: symHello.bin symTiny.bin symDisplay.bin symIO.bin symNotepad.bin + +symHello.bin: symHello.c + $(CL) -t $(SYS) -C sym1-4k.cfg -O -o symHello.bin symHello.c + +symTiny.bin: symTiny.c + $(CL) -t $(SYS) -C sym1-4k.cfg -O -o symTiny.bin symTiny.c + +symDisplay.bin: symDisplay.c + $(CL) -t $(SYS) -C sym1-4k.cfg -O -o symDisplay.bin symDisplay.c + +symIO.bin: symIO.c + $(CL) -t $(SYS) -C sym1-32k.cfg -O -o symIO.bin symIO.c + +symNotepad.bin: symNotepad.c + $(CL) -t $(SYS) -C sym1-32k.cfg -O -o symNotepad.bin symNotepad.c + +clean: + @$(DEL) symHello.bin 2>$(NULLDEV) + @$(DEL) symTiny.bin 2>$(NULLDEV) + @$(DEL) symDisplay.bin 2>$(NULLDEV) + @$(DEL) symIO.bin 2>$(NULLDEV) + @$(DEL) symNotepad.bin 2>$(NULLDEV) diff --git a/targettest/sym1/symDisplay.c b/targettest/sym1/symDisplay.c index 18ae54797..7b056c3ab 100644 --- a/targettest/sym1/symDisplay.c +++ b/targettest/sym1/symDisplay.c @@ -6,7 +6,8 @@ // wayne@parhamdata.com // -------------------------------------------------------------------------- -#include <symio.h> +#include <stdio.h> +#include <sym1.h> void main (void) { int delay = 10; diff --git a/targettest/sym1/symHello.c b/targettest/sym1/symHello.c index 2cab3cbde..7fb86f04e 100644 --- a/targettest/sym1/symHello.c +++ b/targettest/sym1/symHello.c @@ -6,7 +6,8 @@ // wayne@parhamdata.com // -------------------------------------------------------------------------- -#include <symio.h>; +#include <stdio.h> +#include <sym1.h> void main(void) { char c = 0x00; diff --git a/targettest/sym1/symIO.c b/targettest/sym1/symIO.c index d1cbe8137..67e898801 100644 --- a/targettest/sym1/symIO.c +++ b/targettest/sym1/symIO.c @@ -6,10 +6,10 @@ // wayne@parhamdata.com // -------------------------------------------------------------------------- -#include <stdio.h>; -#include <symio.h>; -#include <stdlib.h>; -#include <string.h>; +#include <sym1.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> void main(void) { int ddr1a = 0x00; diff --git a/targettest/sym1/symNotepad.c b/targettest/sym1/symNotepad.c index f59eebda8..683cea63f 100644 --- a/targettest/sym1/symNotepad.c +++ b/targettest/sym1/symNotepad.c @@ -12,9 +12,10 @@ // // -------------------------------------------------------------------------- -#include <symio.h>; -#include <stdlib.h>; -#include <string.h>; +#include <sym1.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> #define TAPIO_ADDRESS 0xE000 #define TAPIO_MAX_SIZE 0x0FFF diff --git a/targettest/sym1/symTiny.c b/targettest/sym1/symTiny.c index 7806d5629..1e9f86516 100644 --- a/targettest/sym1/symTiny.c +++ b/targettest/sym1/symTiny.c @@ -8,7 +8,8 @@ // wayne@parhamdata.com // -------------------------------------------------------------------------- -#include <symio.h>; +#include <stdio.h> +#include <sym1.h> void main(void) { char c = 0x00; From 886e9e83b2f26c4f6c0ceb5407dcd31646c9d039 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Jun 2021 12:33:29 -0500 Subject: [PATCH 0923/2710] Removed stdin->stdout echo from read.s --- libsrc/sym1/read.s | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/libsrc/sym1/read.s b/libsrc/sym1/read.s index 7ab88f1e8..b876a5915 100644 --- a/libsrc/sym1/read.s +++ b/libsrc/sym1/read.s @@ -29,11 +29,7 @@ begin: dec ptr2 beq done ; If buffer full, return getch: jsr INTCHR ; Get character using Monitor ROM call - jsr OUTCHR ; Echo it - and #$7F ; Clear hi bit and check for '\r' - cmp #$0D - bne putch - lda #$0A ; Replace with '\n' and set count to zero + and #$7F ; Clear hi bit putch: ldy #$00 ; Put char into return buffer sta (ptr1),y From ed9f9ccbabea58a2e2a688434290d0ad026acd13 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Mon, 7 Jun 2021 20:56:24 +0000 Subject: [PATCH 0924/2710] Fix #1536 --- src/cc65/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/main.c b/src/cc65/main.c index 0b156fb74..5d1fd7487 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -291,7 +291,7 @@ static void SetSys (const char* Sys) break; default: - AbEnd ("Unknown target system type %d", Target); + AbEnd ("Unknown target system '%s'", Sys); } /* Initialize the translation tables for the target system */ From 89fb731e2e293d16686fe027a86e8eb12c213891 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Jun 2021 19:01:06 -0500 Subject: [PATCH 0925/2710] samples/helloworld.c --- samples/helloworld.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/helloworld.c b/samples/helloworld.c index 9aa4197d8..b4e1ee6a3 100644 --- a/samples/helloworld.c +++ b/samples/helloworld.c @@ -2,7 +2,7 @@ #include <stdio.h> -int main() { - printf("Hello, World!"); +int main(void) { + printf("Hello, World!\n"); return 0; } From 2635655e8c1b7d7fdcacca619f412fcd93208528 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Jun 2021 19:07:36 -0500 Subject: [PATCH 0926/2710] sym1.cfg cosmetic changes --- cfg/sym1-32k.cfg | 12 ++++++------ cfg/sym1-4k.cfg | 12 ++++++------ cfg/sym1.cfg | 12 ++++++------ 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/cfg/sym1-32k.cfg b/cfg/sym1-32k.cfg index 9af125eaa..ee3bc9d63 100644 --- a/cfg/sym1-32k.cfg +++ b/cfg/sym1-32k.cfg @@ -35,12 +35,12 @@ MEMORY { } SEGMENTS { - ZEROPAGE: load = ZP, type = zp, define = yes; - STARTUP: load = RAM, type = ro, define = yes; - CODE: load = RAM, type = ro, define = yes; - RODATA: load = RAM, type = ro, define = yes; - ONCE: load = RAM, type = ro, define = yes; - DATA: load = RAM, type = rw, define = yes; + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; BSS: load = RAM, type = bss, define = yes; } diff --git a/cfg/sym1-4k.cfg b/cfg/sym1-4k.cfg index eefb48a49..8570b6077 100644 --- a/cfg/sym1-4k.cfg +++ b/cfg/sym1-4k.cfg @@ -35,12 +35,12 @@ MEMORY { } SEGMENTS { - ZEROPAGE: load = ZP, type = zp, define = yes; - STARTUP: load = RAM, type = ro, define = yes; - CODE: load = RAM, type = ro, define = yes; - RODATA: load = RAM, type = ro, define = yes; - ONCE: load = RAM, type = ro, define = yes; - DATA: load = RAM, type = rw, define = yes; + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; BSS: load = RAM, type = bss, define = yes; } diff --git a/cfg/sym1.cfg b/cfg/sym1.cfg index eefb48a49..8570b6077 100644 --- a/cfg/sym1.cfg +++ b/cfg/sym1.cfg @@ -35,12 +35,12 @@ MEMORY { } SEGMENTS { - ZEROPAGE: load = ZP, type = zp, define = yes; - STARTUP: load = RAM, type = ro, define = yes; - CODE: load = RAM, type = ro, define = yes; - RODATA: load = RAM, type = ro, define = yes; - ONCE: load = RAM, type = ro, define = yes; - DATA: load = RAM, type = rw, define = yes; + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; BSS: load = RAM, type = bss, define = yes; } From 2a25921515a5736b40b2bb7096339a0e912328e6 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Jun 2021 20:00:18 -0500 Subject: [PATCH 0927/2710] Sym-1 documentation updates --- doc/sym1.sgml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/doc/sym1.sgml b/doc/sym1.sgml index 59d1db3b7..d2e5f09fd 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -21,11 +21,11 @@ Please note that Sym-1 specific functions are just mentioned here, they are desc <sect>Binary format<p> -The standard binary output format generated by the linker for the Sym-1 target is a 4 kbyte machine language program. It is, of course, possible to change this behavior by using one of the different linker configs. +The output format generated by the linker for the Sym-1 target is a raw binary BIN file, which is essentially a memory image. You can convert this to a HEX file using BIN2HEX, which is a popular open-source conversion utility program. A HEX file has ASCII representations of the hexadecimal byte values of the machine-language program. <p> -Included with this distribution is a 4k configuration file and a 32k config file. The Sym-1 on-board memory is limited to 4k but system memory can be increased to 32 kbytes of contiguous RAM with aftermarket add-on boards. So choose the config file that matches your system configuration before compiling and linking user programs. +Included with this distribution is a 4k configuration file and a 32k config file. The Sym-1 on-board memory is limited to 4 kbytes but system memory can be increased to 32 kbytes of contiguous RAM with aftermarket add-on boards. So choose the config file that matches your system configuration before compiling and linking user programs. <sect>Memory layout<p> @@ -41,8 +41,7 @@ Special locations: The C runtime stack is located at $0FFF on 4KB Syms, or at $7FFFfor 32KB systems. The stack always grows downwards. <tag/Heap/ - The C heap is located at the end of the program and grows towards the C - runtime stack. + The C heap is located at the end of the program and grows towards the C runtime stack. </descrip><p> @@ -52,7 +51,7 @@ Programs containing Sym-1 code may use the <tt/sym1.h/ header file. See the hea <sect1>Hardware access<p> -The following pseudo variables declared in the <tt/sym1.inc/ include file allow access to hardware located in the address space. See the include file for more information. +The pseudo variables declared in the <tt/sym1.inc/ include file allow access to hardware located in the address space. See the include file for more information. <sect>Loadable drivers<p> @@ -103,7 +102,7 @@ As stated earlier, there are config files for 4KB and 32KB systems. If you have <sect3>Sample programs<p> -All the samples will run on the "stock" 4k Sym-1, except for symio.c, which requires 8k. Information on building and running it is in the samples/tutorial/sym1 directory. +All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. Information on building and running the sample programs are in the targettest/sym1 directory. <itemize> <item>helloworld is the traditional "Hello World!" program, using printf().</item> From 2324bd62f6e55084d6d763f6c3a8a9b7bfd5c876 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 8 Jun 2021 14:16:14 +0800 Subject: [PATCH 0928/2710] If __A__,__AX__ or __EAX__ is used, post-inc/dec within the same statement will not modify it. Moved testcase from src/test/todo to src/test/val plus minor improvement on portability. --- src/cc65.vcxproj | 2 + src/cc65/expr.c | 60 +++++++++++++++--------- src/cc65/expr.h | 5 -- src/cc65/goto.c | 1 + src/cc65/initdata.c | 1 + src/cc65/locals.c | 1 + src/cc65/seqpoint.c | 67 ++++++++++++++++++++++++++ src/cc65/seqpoint.h | 70 ++++++++++++++++++++++++++++ src/cc65/stdfunc.c | 1 + src/cc65/stmt.c | 27 ++++++++--- src/cc65/testexpr.c | 1 + test/{todo => val}/inline-asm-1489.c | 22 ++++++++- 12 files changed, 222 insertions(+), 36 deletions(-) create mode 100644 src/cc65/seqpoint.c create mode 100644 src/cc65/seqpoint.h rename test/{todo => val}/inline-asm-1489.c (83%) diff --git a/src/cc65.vcxproj b/src/cc65.vcxproj index 7e2e8ea8c..556c616b0 100644 --- a/src/cc65.vcxproj +++ b/src/cc65.vcxproj @@ -110,6 +110,7 @@ <ClInclude Include="cc65\scanner.h" /> <ClInclude Include="cc65\scanstrbuf.h" /> <ClInclude Include="cc65\segments.h" /> + <ClInclude Include="cc65\seqpoint.h" /> <ClInclude Include="cc65\shiftexpr.h" /> <ClInclude Include="cc65\stackptr.h" /> <ClInclude Include="cc65\standard.h" /> @@ -190,6 +191,7 @@ <ClCompile Include="cc65\scanner.c" /> <ClCompile Include="cc65\scanstrbuf.c" /> <ClCompile Include="cc65\segments.c" /> + <ClCompile Include="cc65\seqpoint.c" /> <ClCompile Include="cc65\shiftexpr.c" /> <ClCompile Include="cc65\stackptr.c" /> <ClCompile Include="cc65\standard.c" /> diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 37af494b5..61a24329f 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -31,6 +31,7 @@ #include "macrotab.h" #include "preproc.h" #include "scanner.h" +#include "seqpoint.h" #include "shiftexpr.h" #include "stackptr.h" #include "standard.h" @@ -677,6 +678,7 @@ void DoDeferred (unsigned Flags, ExprDesc* Expr) int I; unsigned Size = 0; int Count = GetDeferredOpCount (); + unsigned StmtFlags = GetSQPFlags (); /* Nothing to be done */ if (Count <= 0) { @@ -684,26 +686,38 @@ void DoDeferred (unsigned Flags, ExprDesc* Expr) } /* Backup some regs/processor flags around the inc/dec */ - if ((Flags & SQP_KEEP_TEST) != 0 && ED_NeedsTest (Expr)) { + if ((StmtFlags & SQP_KEEP_TEST) != 0 || + ((Flags & SQP_KEEP_TEST) != 0 && ED_NeedsTest (Expr))) { /* Sufficient to add a pair of PHP/PLP for all cases */ AddCodeLine ("php"); } - /* Backup the content of EAX around the inc/dec */ - if ((Flags & SQP_KEEP_EAX) != 0 && ED_NeedsPrimary (Expr)) { - /* Get the size */ - Size = CheckedSizeOf (Expr->Type); + if ((Flags & SQP_MASK_EAX) != 0 && ED_NeedsPrimary (Expr)) { + Size = SizeOf (Expr->Type); + } - if (Size < 2) { - AddCodeLine ("pha"); - } else if (Size < 3) { - AddCodeLine ("sta regsave"); - AddCodeLine ("stx regsave+1"); - } else { - AddCodeLine ("jsr saveeax"); + /* Get the size of the backup */ + if ((StmtFlags & SQP_MASK_EAX) != 0) { + switch (StmtFlags & SQP_MASK_EAX) { + case SQP_KEEP_A: if (Size < 1) Size = 1; break; + case SQP_KEEP_AX: if (Size < 2) Size = 2; break; + case SQP_KEEP_EAX: if (Size < 4) Size = 4; break; + default: ; } } + /* Backup the content of EAX around the inc/dec */ + if (Size == 1) { + AddCodeLine ("pha"); + } else if (Size == 2) { + AddCodeLine ("sta regsave"); + AddCodeLine ("stx regsave+1"); + } else if (Size == 3 || Size == 4) { + AddCodeLine("jsr saveeax"); + } else if (Size > 4) { + Error ("Unsupported deferred operand size: %u", Size); + } + for (I = 0; I < Count; ++I) { DeferredOp* Op = CollAtUnchecked (&DeferredOps, I); switch (Op->OpType) { @@ -721,19 +735,18 @@ void DoDeferred (unsigned Flags, ExprDesc* Expr) CollDeleteAll (&DeferredOps); /* Restore the content of EAX around the inc/dec */ - if ((Flags & SQP_KEEP_EAX) != 0 && ED_NeedsPrimary (Expr)) { - if (Size < 2) { - AddCodeLine ("pla"); - } else if (Size < 3) { - AddCodeLine ("lda regsave"); - AddCodeLine ("ldx regsave+1"); - } else { - AddCodeLine ("jsr resteax"); - } + if (Size == 1) { + AddCodeLine ("pla"); + } else if (Size == 2) { + AddCodeLine ("lda regsave"); + AddCodeLine ("ldx regsave+1"); + } else if (Size == 3 || Size == 4) { + AddCodeLine ("jsr resteax"); } /* Restore the regs/processor flags around the inc/dec */ - if ((Flags & SQP_KEEP_TEST) != 0 && ED_NeedsTest (Expr)) { + if ((StmtFlags & SQP_KEEP_TEST) != 0 || + ((Flags & SQP_KEEP_TEST) != 0 && ED_NeedsTest (Expr))) { /* Sufficient to pop the processor flags */ AddCodeLine ("plp"); } @@ -1362,6 +1375,7 @@ static void Primary (ExprDesc* E) case TOK_A: /* Register pseudo variable */ + SetSQPFlags (SQP_KEEP_A); E->Type = type_uchar; E->Flags = E_LOC_PRIMARY | E_RTYPE_LVAL; NextToken (); @@ -1369,6 +1383,7 @@ static void Primary (ExprDesc* E) case TOK_AX: /* Register pseudo variable */ + SetSQPFlags (SQP_KEEP_AX); E->Type = type_uint; E->Flags = E_LOC_PRIMARY | E_RTYPE_LVAL; NextToken (); @@ -1376,6 +1391,7 @@ static void Primary (ExprDesc* E) case TOK_EAX: /* Register pseudo variable */ + SetSQPFlags (SQP_KEEP_EAX); E->Type = type_ulong; E->Flags = E_LOC_PRIMARY | E_RTYPE_LVAL; NextToken (); diff --git a/src/cc65/expr.h b/src/cc65/expr.h index 5644fb82d..8bf7c00b5 100644 --- a/src/cc65/expr.h +++ b/src/cc65/expr.h @@ -23,11 +23,6 @@ -#define SQP_KEEP_NONE 0x00 -#define SQP_KEEP_TEST 0x01U -#define SQP_KEEP_EAX 0x02U -#define SQP_KEEP_EXPR 0x03U /* SQP_KEEP_TEST | SQP_KEEP_EAX */ - /* Generator attributes */ #define GEN_NOPUSH 0x01 /* Don't push lhs */ #define GEN_COMM 0x02 /* Operator is commutative */ diff --git a/src/cc65/goto.c b/src/cc65/goto.c index 7d3ff1a6a..44ae0595e 100644 --- a/src/cc65/goto.c +++ b/src/cc65/goto.c @@ -43,6 +43,7 @@ #include "expr.h" #include "loadexpr.h" #include "scanner.h" +#include "seqpoint.h" #include "standard.h" #include "symtab.h" #include "goto.h" diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c index f63e9e95c..f576c0255 100644 --- a/src/cc65/initdata.c +++ b/src/cc65/initdata.c @@ -58,6 +58,7 @@ #include "litpool.h" #include "pragma.h" #include "scanner.h" +#include "seqpoint.h" #include "shift.h" #include "standard.h" #include "symtab.h" diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 68ac00e62..7bc5697ff 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -49,6 +49,7 @@ #include "initdata.h" #include "loadexpr.h" #include "locals.h" +#include "seqpoint.h" #include "stackptr.h" #include "standard.h" #include "staticassert.h" diff --git a/src/cc65/seqpoint.c b/src/cc65/seqpoint.c new file mode 100644 index 000000000..a6d992113 --- /dev/null +++ b/src/cc65/seqpoint.c @@ -0,0 +1,67 @@ +/*****************************************************************************/ +/* */ +/* seqpoint.h */ +/* */ +/* Stuff involved in sequence points */ +/* */ +/* */ +/* */ +/* Copyright 2022 The cc65 Authors */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +/* cc65 */ +#include "seqpoint.h" + + + +/*****************************************************************************/ +/* data */ +/*****************************************************************************/ + + + +/* Remeber if __A__, __AX__ and __EAX__ are being used */ +unsigned PendingSqpFlags = SQP_KEEP_NONE; + + + +/*****************************************************************************/ +/* code */ +/*****************************************************************************/ + + + +void SetSQPFlags (unsigned Flags) +/* Set the SQP_KEEP_* flags for the deferred operations in the statement */ +{ + PendingSqpFlags = Flags; +} + + + +unsigned GetSQPFlags (void) +/* Get the SQP_KEEP_* flags for the deferred operations in the statement */ +{ + return PendingSqpFlags; +} diff --git a/src/cc65/seqpoint.h b/src/cc65/seqpoint.h new file mode 100644 index 000000000..07ff0d315 --- /dev/null +++ b/src/cc65/seqpoint.h @@ -0,0 +1,70 @@ +/*****************************************************************************/ +/* */ +/* seqpoint.h */ +/* */ +/* Stuff involved in sequence points */ +/* */ +/* */ +/* */ +/* Copyright 2022 The cc65 Authors */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef SEQPOINT_H +#define SEQPOINT_H + + + +/*****************************************************************************/ +/* data */ +/*****************************************************************************/ + + + +#define SQP_KEEP_NONE 0x00U +#define SQP_KEEP_A 0x01U +#define SQP_KEEP_AX 0x03U +#define SQP_KEEP_EAX 0x07U +#define SQP_MASK_EAX 0x07U +#define SQP_KEEP_TEST 0x10U +#define SQP_KEEP_EXPR 0x17U /* SQP_KEEP_TEST | SQP_KEEP_EAX */ + + + +/*****************************************************************************/ +/* code */ +/*****************************************************************************/ + + + +void SetSQPFlags (unsigned Flags); +/* Set the SQP_KEEP_* flags for the deferred operations in the statement */ + +unsigned GetSQPFlags (void); +/* Get the SQP_KEEP_* flags for the deferred operations in the statement */ + + + +/* End of seqpoint.h */ + +#endif diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index d22c73dcf..e968aaf1f 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -50,6 +50,7 @@ #include "litpool.h" #include "loadexpr.h" #include "scanner.h" +#include "seqpoint.h" #include "stackptr.h" #include "stdfunc.h" #include "stdnames.h" diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index 7355e88a8..613129e1b 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -56,6 +56,7 @@ #include "loop.h" #include "pragma.h" #include "scanner.h" +#include "seqpoint.h" #include "stackptr.h" #include "stmt.h" #include "swstmt.h" @@ -674,6 +675,8 @@ int AnyStatement (int* PendingToken) ** NULL, the function will skip the token. */ { + int GotBreak = 0; + /* Assume no pending token */ if (PendingToken) { *PendingToken = 0; @@ -689,7 +692,8 @@ int AnyStatement (int* PendingToken) switch (CurTok.Tok) { case TOK_IF: - return IfStatement (); + GotBreak = IfStatement (); + break; case TOK_SWITCH: SwitchStatement (); @@ -710,22 +714,26 @@ int AnyStatement (int* PendingToken) case TOK_GOTO: GotoStatement (); CheckSemi (PendingToken); - return 1; + GotBreak = 1; + break; case TOK_RETURN: ReturnStatement (); CheckSemi (PendingToken); - return 1; + GotBreak = 1; + break; case TOK_BREAK: BreakStatement (); CheckSemi (PendingToken); - return 1; + GotBreak = 1; + break; case TOK_CONTINUE: ContinueStatement (); CheckSemi (PendingToken); - return 1; + GotBreak = 1; + break; case TOK_PRAGMA: DoPragma (); @@ -737,12 +745,17 @@ int AnyStatement (int* PendingToken) break; case TOK_LCURLY: - return CompoundStatement (PendingToken); + GotBreak = CompoundStatement (PendingToken); + break; default: /* Simple statement */ Statement (PendingToken); break; } - return 0; + + /* Reset SQP flags */ + SetSQPFlags (SQP_KEEP_NONE); + + return GotBreak; } diff --git a/src/cc65/testexpr.c b/src/cc65/testexpr.c index bad8b95f1..14160f13f 100644 --- a/src/cc65/testexpr.c +++ b/src/cc65/testexpr.c @@ -39,6 +39,7 @@ #include "expr.h" #include "loadexpr.h" #include "scanner.h" +#include "seqpoint.h" #include "testexpr.h" diff --git a/test/todo/inline-asm-1489.c b/test/val/inline-asm-1489.c similarity index 83% rename from test/todo/inline-asm-1489.c rename to test/val/inline-asm-1489.c index 57699ab0a..a531c7405 100644 --- a/test/todo/inline-asm-1489.c +++ b/test/val/inline-asm-1489.c @@ -1,9 +1,11 @@ +#include <stddef.h> #include <stdlib.h> #include <stdio.h> #include <stdint.h> #include <string.h> +#ifdef __CC65__ #define testasm1(C) (__AX__ = (C), \ asm("and #$3f"),\ __AX__) @@ -11,6 +13,22 @@ #define testasm2(C) (__A__ = (C), \ asm("and #$3f"),\ __A__) +#else +/* Non-cc65 compiler. Just make the code compile and work. */ +uint16_t testasm1(uint16_t C) +{ + uint16_t AX = C; + AX &= 0x3f; + return AX; +} + +uint8_t testasm2(uint8_t C) +{ + uint8_t A = C; + A &= 0x3f; + return A; +} +#endif uint8_t src[32] = { 0x10, 0x41, 0x62, 0x83, 0xb4, 0xf5, 0xe6, 0xc7, 0, 0 }; uint8_t src2[32] = { 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0, 0 }; @@ -46,7 +64,7 @@ void dotest1b(uint8_t *s, uint8_t *d) void dotest2a (void) { char *p = &src2[0]; - uint16_t scaddr=&dest[0]; //output to line 11 on the screen + uintptr_t scaddr=&dest[0]; //output to line 11 on the screen printf("dotest2a\n"); while (*p != 0) { @@ -58,7 +76,7 @@ void dotest2a (void) void dotest2b (void) { char *p = &src2[0]; - uint16_t scaddr=&dest[0]; //output to line 11 on the screen + uintptr_t scaddr=&dest[0]; //output to line 11 on the screen printf("dotest2b\n"); while (*p != 0) { From 09862e7ce908d7915e6341f626f2930e0cc62118 Mon Sep 17 00:00:00 2001 From: Filip Golewski <f.golewski@gmail.com> Date: Tue, 8 Jun 2021 20:05:22 +0200 Subject: [PATCH 0929/2710] Update src/msbuild.cmd script to optionally include Visual Studio 2019 Community build tools --- src/msbuild.cmd | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/msbuild.cmd b/src/msbuild.cmd index 5736846da..2e1821f0a 100644 --- a/src/msbuild.cmd +++ b/src/msbuild.cmd @@ -1,2 +1,18 @@ +@echo off + +if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\Tools\VsDevCmd.bat" goto vs2017 +if exist "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat" goto vs2019 + +echo Error: VsDevCmd.bat not found! +goto:eof + +:vs2017 call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\Tools\VsDevCmd.bat" +goto run + +:vs2019 +call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat" +goto run + +:run msbuild.exe %* From dcacba472ae69c27146a7767bc7835e5b239d8ff Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 5 Apr 2021 16:40:33 +0800 Subject: [PATCH 0930/2710] Moved ArithmeticConvert() from cc65/expr.c to cc65/datatype.c. Reorganized a few functions in cc65/datatype.c. Added SignedType() and UnsignedType() for future usage. Made LimitExprValue() external so that it can be used more often. --- src/cc65/datatype.c | 480 ++++++++++++++++++++++++++++---------------- src/cc65/datatype.h | 90 +++++---- src/cc65/expr.c | 61 +----- src/cc65/expr.h | 3 + 4 files changed, 358 insertions(+), 276 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 90bf892ba..6465c27a6 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -546,14 +546,14 @@ unsigned long GetIntegerTypeMax (const Type* Type) -static unsigned TypeOfBySize (const Type* Type) +static unsigned TypeOfBySize (unsigned Size) /* Get the code generator replacement type of the object by its size */ { unsigned NewType; /* If the size is less than or equal to that of a a long, we will copy ** the struct using the primary register, otherwise we use memcpy. */ - switch (SizeOf (Type)) { + switch (Size) { case 1: NewType = CF_CHAR; break; case 2: NewType = CF_INT; break; case 3: /* FALLTHROUGH */ @@ -566,125 +566,6 @@ static unsigned TypeOfBySize (const Type* Type) -Type* NewPointerTo (const Type* T) -/* Return a type string that is "pointer to T". The type string is allocated -** on the heap and may be freed after use. -*/ -{ - /* Get the size of the type string including the terminator */ - unsigned Size = TypeLen (T) + 1; - - /* Allocate the new type string */ - Type* P = TypeAlloc (Size + 1); - - /* Create the return type... */ - P[0].C = T_PTR | (T[0].C & T_QUAL_ADDRSIZE); - memcpy (P+1, T, Size * sizeof (Type)); - - /* ...and return it */ - return P; -} - - - -void PrintType (FILE* F, const Type* T) -/* Print fulle name of the type */ -{ - StrBuf Buf = AUTO_STRBUF_INITIALIZER; - fprintf (F, "%s", SB_GetConstBuf (GetFullTypeNameBuf (&Buf, T))); - SB_Done (&Buf); -} - - - -void PrintFuncSig (FILE* F, const char* Name, const Type* T) -/* Print a function signature */ -{ - StrBuf Buf = AUTO_STRBUF_INITIALIZER; - StrBuf ParamList = AUTO_STRBUF_INITIALIZER; - StrBuf East = AUTO_STRBUF_INITIALIZER; - StrBuf West = AUTO_STRBUF_INITIALIZER; - - /* Get the function descriptor used in definition */ - const FuncDesc* D = GetFuncDefinitionDesc (T); - - /* Get the parameter list string. Start from the first parameter */ - SymEntry* Param = D->SymTab->SymHead; - unsigned I; - for (I = 0; I < D->ParamCount; ++I) { - CHECK (Param != 0 && (Param->Flags & SC_PARAM) != 0); - if (I > 0) { - SB_AppendStr (&ParamList, ", "); - } - if (SymIsRegVar (Param)) { - SB_AppendStr (&ParamList, "register "); - } - if (!HasAnonName (Param)) { - SB_AppendStr (&Buf, Param->Name); - } - SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); - SB_Clear (&Buf); - /* Next argument */ - Param = Param->NextSym; - } - if ((D->Flags & FD_VARIADIC) == 0) { - if (D->ParamCount == 0 && (D->Flags & FD_EMPTY) == 0) { - SB_AppendStr (&ParamList, "void"); - } - } else { - if (D->ParamCount > 0) { - SB_AppendStr (&ParamList, ", ..."); - } else { - SB_AppendStr (&ParamList, "..."); - } - } - SB_Terminate (&ParamList); - - /* Get the function qualifiers */ - if (GetQualifierTypeCodeNameBuf (&Buf, T->C, T_QUAL_NONE) > 0) { - /* Append a space between the qualifiers and the name */ - SB_AppendChar (&Buf, ' '); - } - SB_Terminate (&Buf); - - /* Get the signature string without the return type */ - SB_Printf (&West, "%s%s (%s)", SB_GetConstBuf (&Buf), Name, SB_GetConstBuf (&ParamList)); - SB_Done (&Buf); - SB_Done (&ParamList); - - /* Complete with the return type */ - GetFullTypeNameWestEast (&West, &East, GetFuncReturn (T)); - SB_Append (&West, &East); - SB_Terminate (&West); - - /* Output */ - fprintf (F, "%s", SB_GetConstBuf (&West)); - SB_Done (&East); - SB_Done (&West); -} - - - -void PrintRawType (FILE* F, const Type* T) -/* Print a type string in raw hex format (for debugging) */ -{ - while (T->C != T_END) { - fprintf (F, "%04lX ", T->C); - ++T; - } - fprintf (F, "\n"); -} - - - -int TypeHasAttr (const Type* T) -/* Return true if the given type has attribute data */ -{ - return IsClassStruct (T) || IsTypeArray (T) || IsClassFunc (T); -} - - - const Type* GetUnderlyingType (const Type* Type) /* Get the underlying type of an enum or other integer class type */ { @@ -906,7 +787,7 @@ unsigned TypeOf (const Type* T) case T_STRUCT: case T_UNION: - NewType = TypeOfBySize (T); + NewType = TypeOfBySize (SizeOf (T)); if (NewType != CF_NONE) { return NewType; } @@ -968,6 +849,48 @@ Type* IndirectModifiable (Type* T) +Type* NewPointerTo (const Type* T) +/* Return a type string that is "pointer to T". The type string is allocated +** on the heap and may be freed after use. +*/ +{ + /* Get the size of the type string including the terminator */ + unsigned Size = TypeLen (T) + 1; + + /* Allocate the new type string */ + Type* P = TypeAlloc (Size + 1); + + /* Create the return type... */ + P[0].C = T_PTR | (T[0].C & T_QUAL_ADDRSIZE); + memcpy (P+1, T, Size * sizeof (Type)); + + /* ...and return it */ + return P; +} + + + +const Type* AddressOf (const Type* T) +/* Return a type string that is "address of T". The type string is allocated +** on the heap and may be freed after use. +*/ +{ + /* Get the size of the type string including the terminator */ + unsigned Size = TypeLen (T) + 1; + + /* Allocate the new type string */ + Type* P = TypeAlloc (Size + 1); + + /* Create the return type... */ + P[0].C = T_PTR | (T[0].C & T_QUAL_ADDRSIZE) | T_QUAL_CONST; + memcpy (P+1, T, Size * sizeof (Type)); + + /* ...and return it */ + return P; +} + + + Type* ArrayToPtr (const Type* T) /* Convert an array to a pointer to it's first element */ { @@ -977,6 +900,165 @@ Type* ArrayToPtr (const Type* T) +const Type* PtrConversion (const Type* T) +/* If the type is a function, convert it to pointer to function. If the +** expression is an array, convert it to pointer to first element. Otherwise +** return T. +*/ +{ + if (IsTypeFunc (T)) { + return AddressOf (T); + } else if (IsTypeArray (T)) { + return AddressOf (GetElementType (T)); + } else { + return T; + } +} + + + +const Type* IntPromotion (const Type* T) +/* Apply the integer promotions to T and return the result. The returned type +** string may be T if there is no need to change it. +*/ +{ + /* We must have an int to apply int promotions */ + PRECONDITION (IsClassInt (T)); + + /* https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.1 + ** A char, a short int, or an int bit-field, or their signed or unsigned varieties, or + ** an object that has enumeration type, may be used in an expression wherever an int or + ** unsigned int may be used. If an int can represent all values of the original type, + ** the value is converted to an int; otherwise it is converted to an unsigned int. + ** These are called the integral promotions. + */ + + if (IsTypeChar (T)) { + /* An integer can represent all values from either signed or unsigned char, so convert + ** chars to int. + */ + return type_int; + } else if (IsTypeShort (T)) { + /* An integer cannot represent all values from unsigned short, so convert unsigned short + ** to unsigned int. + */ + return IsSignUnsigned (T) ? type_uint : type_int; + } else if (!IsIncompleteESUType (T)) { + /* The type is a complete type not smaller than int, so leave it alone. */ + return T; + } else { + /* Otherwise, this is an incomplete enum, and there is expceted to be an error already. + ** Assume int to avoid further errors. + */ + return type_int; + } +} + + + +const Type* ArithmeticConvert (const Type* lhst, const Type* rhst) +/* Perform the usual arithmetic conversions for binary operators. */ +{ + /* https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.5 + ** Many binary operators that expect operands of arithmetic type cause conversions and yield + ** result types in a similar way. The purpose is to yield a common type, which is also the type + ** of the result. This pattern is called the usual arithmetic conversions. + */ + + /* There are additional rules for floating point types that we don't bother with, since + ** floating point types are not (yet) supported. + ** The integral promotions are performed on both operands. + */ + lhst = IntPromotion (lhst); + rhst = IntPromotion (rhst); + + /* If either operand has type unsigned long int, the other operand is converted to + ** unsigned long int. + */ + if ((IsTypeLong (lhst) && IsSignUnsigned (lhst)) || + (IsTypeLong (rhst) && IsSignUnsigned (rhst))) { + return type_ulong; + } + + /* Otherwise, if one operand has type long int and the other has type unsigned int, + ** if a long int can represent all values of an unsigned int, the operand of type unsigned int + ** is converted to long int ; if a long int cannot represent all the values of an unsigned int, + ** both operands are converted to unsigned long int. + */ + if ((IsTypeLong (lhst) && IsTypeInt (rhst) && IsSignUnsigned (rhst)) || + (IsTypeLong (rhst) && IsTypeInt (lhst) && IsSignUnsigned (lhst))) { + /* long can represent all unsigneds, so we are in the first sub-case. */ + return type_long; + } + + /* Otherwise, if either operand has type long int, the other operand is converted to long int. + */ + if (IsTypeLong (lhst) || IsTypeLong (rhst)) { + return type_long; + } + + /* Otherwise, if either operand has type unsigned int, the other operand is converted to + ** unsigned int. + */ + if ((IsTypeInt (lhst) && IsSignUnsigned (lhst)) || + (IsTypeInt (rhst) && IsSignUnsigned (rhst))) { + return type_uint; + } + + /* Otherwise, both operands have type int. */ + CHECK (IsTypeInt (lhst)); + CHECK (IsSignSigned (lhst)); + CHECK (IsTypeInt (rhst)); + CHECK (IsSignSigned (rhst)); + return type_int; +} + + + +const Type* SignedType (const Type* T) +/* Get signed counterpart of the integral type */ +{ + switch (GetUnderlyingTypeCode (T) & T_MASK_TYPE) { + case T_TYPE_CHAR: + return type_schar; + + case T_TYPE_INT: + case T_TYPE_SHORT: + return type_int; + + case T_TYPE_LONG: + return type_long; + + default: + Internal ("Unknown type code: %lX", GetUnderlyingTypeCode (T)); + return T; + } +} + + + +const Type* UnsignedType (const Type* T) +/* Get unsigned counterpart of the integral type */ +{ + switch (GetUnderlyingTypeCode (T) & T_MASK_TYPE) { + case T_TYPE_CHAR: + return type_uchar; + + case T_TYPE_INT: + case T_TYPE_SHORT: + return type_uint; + + case T_TYPE_LONG: + return type_ulong; + + default: + Internal ("Unknown type code: %lX", GetUnderlyingTypeCode (T)); + return T; + } +} + + + int IsClassObject (const Type* T) /* Return true if this is a fully described object type */ { @@ -1266,62 +1348,6 @@ void SetESUSymEntry (Type* T, struct SymEntry* S) -const Type* IntPromotion (const Type* T) -/* Apply the integer promotions to T and return the result. The returned type -** string may be T if there is no need to change it. -*/ -{ - /* We must have an int to apply int promotions */ - PRECONDITION (IsClassInt (T)); - - /* https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.1 - ** A char, a short int, or an int bit-field, or their signed or unsigned varieties, or an - ** object that has enumeration type, may be used in an expression wherever an int or - ** unsigned int may be used. If an int can represent all values of the original type, the value - ** is converted to an int; otherwise it is converted to an unsigned int. - ** These are called the integral promotions. - */ - - if (IsTypeChar (T)) { - /* An integer can represent all values from either signed or unsigned char, so convert - ** chars to int. - */ - return type_int; - } else if (IsTypeShort (T)) { - /* An integer cannot represent all values from unsigned short, so convert unsigned short - ** to unsigned int. - */ - return IsSignUnsigned (T) ? type_uint : type_int; - } else if (!IsIncompleteESUType (T)) { - /* The type is a complete type not smaller than int, so leave it alone. */ - return T; - } else { - /* Otherwise, this is an incomplete enum, and there is expceted to be an error already. - ** Assume int to avoid further errors. - */ - return type_int; - } -} - - - -const Type* PtrConversion (const Type* T) -/* If the type is a function, convert it to pointer to function. If the -** expression is an array, convert it to pointer to first element. Otherwise -** return T. -*/ -{ - if (IsTypeFunc (T)) { - return NewPointerTo (T); - } else if (IsTypeArray (T)) { - return ArrayToPtr (T); - } else { - return T; - } -} - - - TypeCode AddrSizeQualifier (unsigned AddrSize) /* Return T_QUAL_NEAR or T_QUAL_FAR depending on the address size */ { @@ -1339,3 +1365,101 @@ TypeCode AddrSizeQualifier (unsigned AddrSize) } } + + + +int TypeHasAttr (const Type* T) +/* Return true if the given type has attribute data */ +{ + return IsClassStruct (T) || IsTypeArray (T) || IsClassFunc (T); +} + + + +void PrintType (FILE* F, const Type* T) +/* Print fulle name of the type */ +{ + StrBuf Buf = AUTO_STRBUF_INITIALIZER; + fprintf (F, "%s", SB_GetConstBuf (GetFullTypeNameBuf (&Buf, T))); + SB_Done (&Buf); +} + + + +void PrintFuncSig (FILE* F, const char* Name, const Type* T) +/* Print a function signature */ +{ + StrBuf Buf = AUTO_STRBUF_INITIALIZER; + StrBuf ParamList = AUTO_STRBUF_INITIALIZER; + StrBuf East = AUTO_STRBUF_INITIALIZER; + StrBuf West = AUTO_STRBUF_INITIALIZER; + + /* Get the function descriptor used in definition */ + const FuncDesc* D = GetFuncDefinitionDesc (T); + + /* Get the parameter list string. Start from the first parameter */ + SymEntry* Param = D->SymTab->SymHead; + unsigned I; + for (I = 0; I < D->ParamCount; ++I) { + CHECK (Param != 0 && (Param->Flags & SC_PARAM) != 0); + if (I > 0) { + SB_AppendStr (&ParamList, ", "); + } + if (SymIsRegVar (Param)) { + SB_AppendStr (&ParamList, "register "); + } + if (!HasAnonName (Param)) { + SB_AppendStr (&Buf, Param->Name); + } + SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); + SB_Clear (&Buf); + /* Next argument */ + Param = Param->NextSym; + } + if ((D->Flags & FD_VARIADIC) == 0) { + if (D->ParamCount == 0 && (D->Flags & FD_EMPTY) == 0) { + SB_AppendStr (&ParamList, "void"); + } + } else { + if (D->ParamCount > 0) { + SB_AppendStr (&ParamList, ", ..."); + } else { + SB_AppendStr (&ParamList, "..."); + } + } + SB_Terminate (&ParamList); + + /* Get the function qualifiers */ + if (GetQualifierTypeCodeNameBuf (&Buf, T->C, T_QUAL_NONE) > 0) { + /* Append a space between the qualifiers and the name */ + SB_AppendChar (&Buf, ' '); + } + SB_Terminate (&Buf); + + /* Get the signature string without the return type */ + SB_Printf (&West, "%s%s (%s)", SB_GetConstBuf (&Buf), Name, SB_GetConstBuf (&ParamList)); + SB_Done (&Buf); + SB_Done (&ParamList); + + /* Complete with the return type */ + GetFullTypeNameWestEast (&West, &East, GetFuncReturn (T)); + SB_Append (&West, &East); + SB_Terminate (&West); + + /* Output */ + fprintf (F, "%s", SB_GetConstBuf (&West)); + SB_Done (&East); + SB_Done (&West); +} + + + +void PrintRawType (FILE* F, const Type* T) +/* Print a type string in raw hex format (for debugging) */ +{ + while (T->C != T_END) { + fprintf (F, "%04lX ", T->C); + ++T; + } + fprintf (F, "\n"); +} diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index af1c6b8e4..4729284bd 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -288,33 +288,6 @@ unsigned long GetIntegerTypeMax (const Type* Type); ** The type must have a known size. */ -Type* NewPointerTo (const Type* T); -/* Return a type string that is "pointer to T". The type string is allocated -** on the heap and may be freed after use. -*/ - -void PrintType (FILE* F, const Type* T); -/* Print fulle name of the type */ - -void PrintFuncSig (FILE* F, const char* Name, const Type* T); -/* Print a function signature */ - -void PrintRawType (FILE* F, const Type* T); -/* Print a type string in raw hex format (for debugging) */ - -int TypeHasAttr (const Type* T); -/* Return true if the given type has attribute data */ - -#if defined(HAVE_INLINE) -INLINE void CopyTypeAttr (const Type* Src, Type* Dest) -/* Copy attribute data from Src to Dest */ -{ - Dest->A = Src->A; -} -#else -# define CopyTypeAttr(Src, Dest) ((Dest)->A = (Src)->A) -#endif - #if defined(HAVE_INLINE) INLINE TypeCode UnqualifiedType (TypeCode T) /* Return the unqalified type code */ @@ -366,9 +339,39 @@ Type* IndirectModifiable (Type* T); ** given type points to. */ +Type* NewPointerTo (const Type* T); +/* Return a type string that is "pointer to T". The type string is allocated +** on the heap and may be freed after use. +*/ + +const Type* AddressOf (const Type* T); +/* Return a type string that is "address of T". The type string is allocated +** on the heap and may be freed after use. +*/ + Type* ArrayToPtr (const Type* T); /* Convert an array to a pointer to it's first element */ +const Type* PtrConversion (const Type* T); +/* If the type is a function, convert it to pointer to function. If the +** expression is an array, convert it to pointer to first element. Otherwise +** return T. +*/ + +const Type* IntPromotion (const Type* T); +/* Apply the integer promotions to T and return the result. The returned type +** string may be T if there is no need to change it. +*/ + +const Type* ArithmeticConvert (const Type* lhst, const Type* rhst); +/* Perform the usual arithmetic conversions for binary operators. */ + +const Type* SignedType (const Type* T); +/* Get signed counterpart of the integral type */ + +const Type* UnsignedType (const Type* T); +/* Get unsigned counterpart of the integral type */ + #if defined(HAVE_INLINE) INLINE TypeCode GetRawType (const Type* T) /* Get the raw type */ @@ -892,17 +895,6 @@ struct SymEntry* GetESUSymEntry (const Type* T) attribute ((const)); void SetESUSymEntry (Type* T, struct SymEntry* S); /* Set the SymEntry pointer for an enum/struct/union type */ -const Type* IntPromotion (const Type* T); -/* Apply the integer promotions to T and return the result. The returned type -** string may be T if there is no need to change it. -*/ - -const Type* PtrConversion (const Type* T); -/* If the type is a function, convert it to pointer to function. If the -** expression is an array, convert it to pointer to first element. Otherwise -** return T. -*/ - TypeCode AddrSizeQualifier (unsigned AddrSize); /* Return T_QUAL_NEAR or T_QUAL_FAR depending on the address size */ @@ -926,6 +918,28 @@ INLINE TypeCode DataAddrSizeQualifier (void) # define DataAddrSizeQualifier() (AddrSizeQualifier (DataAddrSize)) #endif +int TypeHasAttr (const Type* T); +/* Return true if the given type has attribute data */ + +#if defined(HAVE_INLINE) +INLINE void CopyTypeAttr (const Type* Src, Type* Dest) +/* Copy attribute data from Src to Dest */ +{ + Dest->A = Src->A; +} +#else +# define CopyTypeAttr(Src, Dest) ((Dest)->A = (Src)->A) +#endif + +void PrintType (FILE* F, const Type* T); +/* Print fulle name of the type */ + +void PrintFuncSig (FILE* F, const char* Name, const Type* T); +/* Print a function signature */ + +void PrintRawType (FILE* F, const Type* T); +/* Print a type string in raw hex format (for debugging) */ + /* End of datatype.h */ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index b68b3abbb..729b26942 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -153,65 +153,6 @@ void MarkedExprWithCheck (void (*Func) (ExprDesc*), ExprDesc* Expr) -static const Type* ArithmeticConvert (const Type* lhst, const Type* rhst) -/* Perform the usual arithmetic conversions for binary operators. */ -{ - /* https://port70.net/~nsz/c/c89/c89-draft.html#3.2.1.5 - ** Many binary operators that expect operands of arithmetic type cause conversions and yield - ** result types in a similar way. The purpose is to yield a common type, which is also the type - ** of the result. This pattern is called the usual arithmetic conversions. - */ - - /* There are additional rules for floating point types that we don't bother with, since - ** floating point types are not (yet) supported. - ** The integral promotions are performed on both operands. - */ - lhst = IntPromotion (lhst); - rhst = IntPromotion (rhst); - - /* If either operand has type unsigned long int, the other operand is converted to - ** unsigned long int. - */ - if ((IsTypeLong (lhst) && IsSignUnsigned (lhst)) || - (IsTypeLong (rhst) && IsSignUnsigned (rhst))) { - return type_ulong; - } - - /* Otherwise, if one operand has type long int and the other has type unsigned int, - ** if a long int can represent all values of an unsigned int, the operand of type unsigned int - ** is converted to long int ; if a long int cannot represent all the values of an unsigned int, - ** both operands are converted to unsigned long int. - */ - if ((IsTypeLong (lhst) && IsTypeInt (rhst) && IsSignUnsigned (rhst)) || - (IsTypeLong (rhst) && IsTypeInt (lhst) && IsSignUnsigned (lhst))) { - /* long can represent all unsigneds, so we are in the first sub-case. */ - return type_long; - } - - /* Otherwise, if either operand has type long int, the other operand is converted to long int. - */ - if (IsTypeLong (lhst) || IsTypeLong (rhst)) { - return type_long; - } - - /* Otherwise, if either operand has type unsigned int, the other operand is converted to - ** unsigned int. - */ - if ((IsTypeInt (lhst) && IsSignUnsigned (lhst)) || - (IsTypeInt (rhst) && IsSignUnsigned (rhst))) { - return type_uint; - } - - /* Otherwise, both operands have type int. */ - CHECK (IsTypeInt (lhst)); - CHECK (IsSignSigned (lhst)); - CHECK (IsTypeInt (rhst)); - CHECK (IsSignSigned (rhst)); - return type_int; -} - - - static unsigned typeadjust (ExprDesc* lhs, const ExprDesc* rhs, int NoPush) /* Adjust the two values for a binary operation. lhs is expected on stack or ** to be constant, rhs is expected to be in the primary register or constant. @@ -263,7 +204,7 @@ static unsigned typeadjust (ExprDesc* lhs, const ExprDesc* rhs, int NoPush) -static void LimitExprValue (ExprDesc* Expr) +void LimitExprValue (ExprDesc* Expr) /* Limit the constant value of the expression to the range of its type */ { switch (GetUnderlyingTypeCode (Expr->Type)) { diff --git a/src/cc65/expr.h b/src/cc65/expr.h index 02f9f7a5f..4909815ee 100644 --- a/src/cc65/expr.h +++ b/src/cc65/expr.h @@ -44,6 +44,9 @@ void MarkedExprWithCheck (void (*Func) (ExprDesc*), ExprDesc* Expr); ** generated code. */ +void LimitExprValue (ExprDesc* Expr); +/* Limit the constant value of the expression to the range of its type */ + void PushAddr (const ExprDesc* Expr); /* If the expression contains an address that was somehow evaluated, ** push this address on the stack. This is a helper function for all From 004c60de396398a14bd75b17ef0f260c9ae19499 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 15 Apr 2021 22:46:25 +0800 Subject: [PATCH 0931/2710] Optional flags for the codegen to skip restoring the expression results into the primary registers. --- src/cc65/codegen.c | 71 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 22 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index f8a1dcdf6..cf10314b9 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -1166,7 +1166,9 @@ void g_putind (unsigned Flags, unsigned Offs) /* Overflow - we need to add the low byte also */ AddCodeLine ("ldy #$00"); AddCodeLine ("clc"); - AddCodeLine ("pha"); + if ((Flags & CF_NOKEEP) == 0) { + AddCodeLine ("pha"); + } AddCodeLine ("lda #$%02X", Offs & 0xFF); AddCodeLine ("adc (sp),y"); AddCodeLine ("sta (sp),y"); @@ -1174,7 +1176,9 @@ void g_putind (unsigned Flags, unsigned Offs) AddCodeLine ("lda #$%02X", (Offs >> 8) & 0xFF); AddCodeLine ("adc (sp),y"); AddCodeLine ("sta (sp),y"); - AddCodeLine ("pla"); + if ((Flags & CF_NOKEEP) == 0) { + AddCodeLine ("pla"); + } /* Complete address is on stack, new offset is zero */ Offs = 0; @@ -1184,12 +1188,15 @@ void g_putind (unsigned Flags, unsigned Offs) /* We can just add the high byte */ AddCodeLine ("ldy #$01"); AddCodeLine ("clc"); - AddCodeLine ("pha"); + if ((Flags & CF_NOKEEP) == 0) { + AddCodeLine ("pha"); + } AddCodeLine ("lda #$%02X", (Offs >> 8) & 0xFF); AddCodeLine ("adc (sp),y"); AddCodeLine ("sta (sp),y"); - AddCodeLine ("pla"); - + if ((Flags & CF_NOKEEP) == 0) { + AddCodeLine ("pla"); + } /* Offset is now just the low byte */ Offs &= 0x00FF; } @@ -1696,7 +1703,9 @@ void g_addeqstatic (unsigned flags, uintptr_t label, long offs, if (flags & CF_CONST) { if (val == 1) { AddCodeLine ("inc %s", lbuf); - AddCodeLine ("lda %s", lbuf); + if ((flags & CF_NOKEEP) == 0) { + AddCodeLine ("lda %s", lbuf); + } } else { AddCodeLine ("lda #$%02X", (int)(val & 0xFF)); AddCodeLine ("clc"); @@ -1726,8 +1735,10 @@ void g_addeqstatic (unsigned flags, uintptr_t label, long offs, AddCodeLine ("bne %s", LocalLabelName (L)); AddCodeLine ("inc %s+1", lbuf); g_defcodelabel (L); - AddCodeLine ("lda %s", lbuf); /* Hmmm... */ - AddCodeLine ("ldx %s+1", lbuf); + if ((flags & CF_NOKEEP) == 0) { + AddCodeLine ("lda %s", lbuf); /* Hmmm... */ + AddCodeLine ("ldx %s+1", lbuf); + } } else { AddCodeLine ("lda #$%02X", (int)(val & 0xFF)); AddCodeLine ("clc"); @@ -1738,13 +1749,17 @@ void g_addeqstatic (unsigned flags, uintptr_t label, long offs, AddCodeLine ("bcc %s", LocalLabelName (L)); AddCodeLine ("inc %s+1", lbuf); g_defcodelabel (L); - AddCodeLine ("ldx %s+1", lbuf); + if ((flags & CF_NOKEEP) == 0) { + AddCodeLine ("ldx %s+1", lbuf); + } } else { AddCodeLine ("lda #$%02X", (unsigned char)(val >> 8)); AddCodeLine ("adc %s+1", lbuf); AddCodeLine ("sta %s+1", lbuf); - AddCodeLine ("tax"); - AddCodeLine ("lda %s", lbuf); + if ((flags & CF_NOKEEP) == 0) { + AddCodeLine ("tax"); + AddCodeLine ("lda %s", lbuf); + } } } } else { @@ -1754,8 +1769,10 @@ void g_addeqstatic (unsigned flags, uintptr_t label, long offs, AddCodeLine ("txa"); AddCodeLine ("adc %s+1", lbuf); AddCodeLine ("sta %s+1", lbuf); - AddCodeLine ("tax"); - AddCodeLine ("lda %s", lbuf); + if ((flags & CF_NOKEEP) == 0) { + AddCodeLine ("tax"); + AddCodeLine ("lda %s", lbuf); + } } break; @@ -1837,9 +1854,11 @@ void g_addeqlocal (unsigned flags, int Offs, unsigned long val) AddCodeLine ("lda #$%02X", (int) ((val >> 8) & 0xFF)); AddCodeLine ("adc (sp),y"); AddCodeLine ("sta (sp),y"); - AddCodeLine ("tax"); - AddCodeLine ("dey"); - AddCodeLine ("lda (sp),y"); + if ((flags & CF_NOKEEP) == 0) { + AddCodeLine ("tax"); + AddCodeLine ("dey"); + AddCodeLine ("lda (sp),y"); + } } else { g_getimmed (flags, val, 0); AddCodeLine ("jsr addeqysp"); @@ -1919,7 +1938,9 @@ void g_subeqstatic (unsigned flags, uintptr_t label, long offs, if (flags & CF_CONST) { if (val == 1) { AddCodeLine ("dec %s", lbuf); - AddCodeLine ("lda %s", lbuf); + if ((flags & CF_NOKEEP) == 0) { + AddCodeLine ("lda %s", lbuf); + } } else { AddCodeLine ("lda %s", lbuf); AddCodeLine ("sec"); @@ -1953,13 +1974,17 @@ void g_subeqstatic (unsigned flags, uintptr_t label, long offs, AddCodeLine ("bcs %s", LocalLabelName (L)); AddCodeLine ("dec %s+1", lbuf); g_defcodelabel (L); - AddCodeLine ("ldx %s+1", lbuf); + if ((flags & CF_NOKEEP) == 0) { + AddCodeLine ("ldx %s+1", lbuf); + } } else { AddCodeLine ("lda %s+1", lbuf); AddCodeLine ("sbc #$%02X", (unsigned char)(val >> 8)); AddCodeLine ("sta %s+1", lbuf); - AddCodeLine ("tax"); - AddCodeLine ("lda %s", lbuf); + if ((flags & CF_NOKEEP) == 0) { + AddCodeLine ("tax"); + AddCodeLine ("lda %s", lbuf); + } } } else { AddCodeLine ("eor #$FF"); @@ -1970,8 +1995,10 @@ void g_subeqstatic (unsigned flags, uintptr_t label, long offs, AddCodeLine ("eor #$FF"); AddCodeLine ("adc %s+1", lbuf); AddCodeLine ("sta %s+1", lbuf); - AddCodeLine ("tax"); - AddCodeLine ("lda %s", lbuf); + if ((flags & CF_NOKEEP) == 0) { + AddCodeLine ("tax"); + AddCodeLine ("lda %s", lbuf); + } } break; From 1d7bf7355cb26d2da330d0173cecb5aa3213e1da Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 16 May 2021 19:08:43 +0800 Subject: [PATCH 0932/2710] Better function naming in declare.c. Scalar initialization routines need only 'const Type*' as parameters. --- src/cc65/declare.c | 80 +++++++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 36 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index a18c837b9..2aa620a29 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2243,7 +2243,7 @@ static void DefineData (ExprDesc* Expr) -static void OutputBitFieldData (StructInitData* SI) +static void DefineBitFieldData (StructInitData* SI) /* Output bit field data */ { /* Ignore if we have no data */ @@ -2266,7 +2266,18 @@ static void OutputBitFieldData (StructInitData* SI) -static ExprDesc ParseScalarInitInternal (Type* T) +static void DefineStrData (Literal* Lit, unsigned Count) +{ + /* Translate into target charset */ + TranslateLiteral (Lit); + + /* Output the data */ + g_defbytes (GetLiteralStr (Lit), Count); +} + + + +static ExprDesc ParseScalarInitInternal (const Type* T) /* Parse initializaton for scalar data types. This function will not output the ** data but return it in ED. */ @@ -2293,7 +2304,7 @@ static ExprDesc ParseScalarInitInternal (Type* T) -static unsigned ParseScalarInit (Type* T) +static unsigned ParseScalarInit (const Type* T) /* Parse initializaton for scalar data types. Return the number of data bytes. */ { /* Parse initialization */ @@ -2311,7 +2322,7 @@ static unsigned ParseScalarInit (Type* T) -static unsigned ParsePointerInit (Type* T) +static unsigned ParsePointerInit (const Type* T) /* Parse initializaton for pointer data types. Return the number of data bytes. */ { /* Optional opening brace */ @@ -2364,9 +2375,6 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) NextToken (); } - /* Translate into target charset */ - TranslateLiteral (CurTok.SVal); - /* If the array is one too small for the string literal, omit the ** trailing zero. */ @@ -2379,7 +2387,7 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) } /* Output the data */ - g_defbytes (GetLiteralStr (CurTok.SVal), Count); + DefineStrData (CurTok.SVal, Count); /* Skip the string */ NextToken (); @@ -2453,7 +2461,7 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Parse initialization of a struct or union. Return the number of data bytes. */ { - SymEntry* Entry; + SymEntry* Sym; SymTable* Tab; StructInitData SI; int HasCurly = 0; @@ -2468,15 +2476,15 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) } /* Get a pointer to the struct entry from the type */ - Entry = GetESUSymEntry (T); + Sym = GetESUSymEntry (T); /* Get the size of the struct from the symbol table entry */ - SI.Size = Entry->V.S.Size; + SI.Size = Sym->V.S.Size; /* Check if this struct definition has a field table. If it doesn't, it ** is an incomplete definition. */ - Tab = Entry->V.S.SymTab; + Tab = Sym->V.S.SymTab; if (Tab == 0) { Error ("Cannot initialize variables with incomplete type"); /* Try error recovery */ @@ -2486,7 +2494,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) } /* Get a pointer to the list of symbols */ - Entry = Tab->SymHead; + Sym = Tab->SymHead; /* Initialize fields */ SI.Offs = 0; @@ -2495,7 +2503,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) while (CurTok.Tok != TOK_RCURLY) { /* Check for excess elements */ - if (Entry == 0) { + if (Sym == 0) { /* Is there just one trailing comma before a closing curly? */ if (NextTok.Tok == TOK_RCURLY && CurTok.Tok == TOK_COMMA) { /* Skip comma and exit scope */ @@ -2511,7 +2519,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) } /* Check for special members that don't consume the initializer */ - if ((Entry->Flags & SC_ALIAS) == SC_ALIAS) { + if ((Sym->Flags & SC_ALIAS) == SC_ALIAS) { /* Just skip */ goto NextMember; } @@ -2519,17 +2527,17 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* This may be an anonymous bit-field, in which case it doesn't ** have an initializer. */ - if (SymIsBitField (Entry) && (IsAnonName (Entry->Name))) { + if (SymIsBitField (Sym) && (IsAnonName (Sym->Name))) { /* Account for the data and output it if we have at least a full ** word. We may have more if there was storage unit overlap, for ** example two consecutive 10 bit fields. These will be packed ** into 3 bytes. */ - SI.ValBits += Entry->V.B.BitWidth; + SI.ValBits += Sym->V.B.BitWidth; /* TODO: Generalize this so any type can be used. */ CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); while (SI.ValBits >= CHAR_BITS) { - OutputBitFieldData (&SI); + DefineBitFieldData (&SI); } /* Avoid consuming the comma if any */ goto NextMember; @@ -2541,7 +2549,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) SkipComma = 0; } - if (SymIsBitField (Entry)) { + if (SymIsBitField (Sym)) { /* Parse initialization of one field. Bit-fields need a special ** handling. @@ -2552,14 +2560,14 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) unsigned Shift; /* Calculate the bitmask from the bit-field data */ - unsigned Mask = (1U << Entry->V.B.BitWidth) - 1U; + unsigned Mask = (1U << Sym->V.B.BitWidth) - 1U; /* Safety ... */ - CHECK (Entry->V.B.Offs * CHAR_BITS + Entry->V.B.BitOffs == - SI.Offs * CHAR_BITS + SI.ValBits); + CHECK (Sym->V.B.Offs * CHAR_BITS + Sym->V.B.BitOffs == + SI.Offs * CHAR_BITS + SI.ValBits); /* Read the data, check for a constant integer, do a range check */ - ED = ParseScalarInitInternal (Entry->Type); + ED = ParseScalarInitInternal (Sym->Type); if (!ED_IsConstAbsInt (&ED)) { Error ("Constant initializer expected"); ED_MakeConstAbsInt (&ED, 1); @@ -2569,31 +2577,31 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) ** any useful bits. */ Val = (unsigned) ED.IVal & Mask; - if (IsSignUnsigned (Entry->Type)) { + if (IsSignUnsigned (Sym->Type)) { if (ED.IVal < 0 || (unsigned long) ED.IVal != Val) { Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer" " changes value from %ld to %u", - GetFullTypeName (ED.Type), GetFullTypeName (Entry->Type), - Entry->V.B.BitWidth, ED.IVal, Val); + GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), + Sym->V.B.BitWidth, ED.IVal, Val); } } else { /* Sign extend back to full width of host long. */ - unsigned ShiftBits = sizeof (long) * CHAR_BIT - Entry->V.B.BitWidth; + unsigned ShiftBits = sizeof (long) * CHAR_BIT - Sym->V.B.BitWidth; long RestoredVal = asr_l(asl_l (Val, ShiftBits), ShiftBits); if (ED.IVal != RestoredVal) { Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer " "changes value from %ld to %ld", - GetFullTypeName (ED.Type), GetFullTypeName (Entry->Type), - Entry->V.B.BitWidth, ED.IVal, RestoredVal); + GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), + Sym->V.B.BitWidth, ED.IVal, RestoredVal); } } /* Add the value to the currently stored bit-field value */ - Shift = (Entry->V.B.Offs - SI.Offs) * CHAR_BITS + Entry->V.B.BitOffs; + Shift = (Sym->V.B.Offs - SI.Offs) * CHAR_BITS + Sym->V.B.BitOffs; SI.BitVal |= (Val << Shift); /* Account for the data and output any full bytes we have. */ - SI.ValBits += Entry->V.B.BitWidth; + SI.ValBits += Sym->V.B.BitWidth; /* Make sure unsigned is big enough to hold the value, 22 bits. ** This is 22 bits because the most we can have is 7 bits left ** over from the previous OutputBitField call, plus 15 bits @@ -2604,7 +2612,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* TODO: Generalize this so any type can be used. */ CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); while (SI.ValBits >= CHAR_BITS) { - OutputBitFieldData (&SI); + DefineBitFieldData (&SI); } } else { @@ -2618,7 +2626,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Flexible array members may only be initialized if they are ** the last field (or part of the last struct field). */ - SI.Offs += ParseInitInternal (Entry->Type, Braces, AllowFlexibleMembers && Entry->NextSym == 0); + SI.Offs += ParseInitInternal (Sym->Type, Braces, AllowFlexibleMembers && Sym->NextSym == 0); } /* More initializers? */ @@ -2633,10 +2641,10 @@ NextMember: /* Next member. For unions, only the first one can be initialized */ if (IsTypeUnion (T)) { /* Union */ - Entry = 0; + Sym = 0; } else { /* Struct */ - Entry = Entry->NextSym; + Sym = Sym->NextSym; } } @@ -2647,7 +2655,7 @@ NextMember: /* If we have data from a bit-field left, output it now */ CHECK (SI.ValBits < CHAR_BITS); - OutputBitFieldData (&SI); + DefineBitFieldData (&SI); /* If there are struct fields left, reserve additional storage */ if (SI.Offs < SI.Size) { From 5adb29ce3165db1c5f525dc9a0b8160170e4613c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 22 May 2021 19:15:47 +0800 Subject: [PATCH 0933/2710] Made "bit-field-ness" a type property instead of a SymbolEntry or ExprDesc property. Fixed integer promotion and result type in certain operations. Fixed bit-fields 'op=' and postfix inc/dec operators. --- src/cc65/assignment.c | 811 +++++++++++++++++++++++++++++++++++------- src/cc65/assignment.h | 28 +- src/cc65/datatype.c | 74 +++- src/cc65/datatype.h | 108 ++++-- src/cc65/declare.c | 20 +- src/cc65/expr.c | 720 +++++++++++-------------------------- src/cc65/expr.h | 8 + src/cc65/exprdesc.c | 44 +-- src/cc65/exprdesc.h | 40 +-- src/cc65/loadexpr.c | 66 ++-- src/cc65/stdfunc.c | 10 +- src/cc65/symentry.h | 7 - src/cc65/symtab.c | 12 +- src/cc65/typecmp.c | 15 + src/cc65/typeconv.c | 12 +- 15 files changed, 1171 insertions(+), 804 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 7ebd2c4e1..be6a8116f 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -42,19 +42,35 @@ #include "expr.h" #include "loadexpr.h" #include "scanner.h" +#include "stackptr.h" #include "stdnames.h" #include "typecmp.h" #include "typeconv.h" +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* Map a generator function and its attributes to a token */ +typedef struct GenDesc { + token_t Tok; /* Token to map to */ + unsigned Flags; /* Flags for generator function */ + void (*Func) (unsigned, unsigned long); /* Generator func */ +} GenDesc; + + + /*****************************************************************************/ /* Code */ /*****************************************************************************/ -static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) +static void CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) /* Copy the struct/union represented by RExpr to the one represented by LExpr */ { /* If the size is that of a basic type (char, int, long), we will copy @@ -127,14 +143,519 @@ static int CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) ** to a boolean in C, but there is no harm to be future-proof. */ ED_MarkAsUntested (LExpr); - - return 1; } -void Assignment (ExprDesc* Expr) -/* Parse an assignment */ +void DoIncDecBitField (ExprDesc* Expr, long Val, unsigned KeepResult) +/* Process inc/dec for bit-field */ +{ + int AddrSP; + unsigned Flags; /* Internal codegen flags */ + unsigned Mask; + unsigned ChunkFlags; + const Type* ChunkType; + const Type* ResType; + + /* If the bit-field fits within one byte, do the following operations + ** with bytes. + */ + if ((Expr->Type->A.B.Width - 1U) / CHAR_BITS == + (Expr->Type->A.B.Offs + Expr->Type->A.B.Width - 1U) / CHAR_BITS) { + ChunkType = GetUnderlyingType (Expr->Type); + } else { + /* We use the declarartion integer type as the chunk type. + ** Note: A bit-field will not occupy bits located in bytes more than + ** that of its declaration type in cc65. So this is OK. + */ + ChunkType = Expr->Type + 1; + } + + /* Determine code generator flags */ + Flags = TypeOf (Expr->Type) | CF_FORCECHAR; + ChunkFlags = TypeOf (ChunkType); + if ((ChunkFlags & CF_TYPEMASK) == CF_CHAR) { + ChunkFlags |= CF_FORCECHAR; + } + + /* Get the address on stack for the store */ + PushAddr (Expr); + + /* We may need the pushed address later */ + AddrSP = StackPtr; + + /* Get bit mask to limit the range of the value */ + Mask = (0x0001U << Expr->Type->A.B.Width) - 1U; + + /* Fetch the lhs into the primary register if needed */ + LoadExpr (CF_NONE, Expr); + + if (KeepResult == OA_NEED_OLD) { + /* Save the original expression value */ + g_save (Flags | CF_FORCECHAR); + } + + /* Handle for add and sub */ + if (Val > 0) { + g_inc (Flags | CF_CONST, Val); + } else if (Val < 0) { + g_dec (Flags | CF_CONST, -Val); + } + + /* Apply the mask */ + g_and (Flags | CF_CONST, Mask); + + if (KeepResult == OA_NEED_NEW) { + /* Save the result value */ + g_save (Flags | CF_FORCECHAR); + } + + /* Do integral promotion without sign-extension if needed */ + g_typecast (ChunkFlags | CF_UNSIGNED, Flags); + + /* Shift it into the right position */ + g_asl (ChunkFlags | CF_CONST, Expr->Type->A.B.Offs); + + /* Push the interim result on stack */ + g_push (ChunkFlags & ~CF_FORCECHAR, 0); + + /* If the original lhs was using the primary, it is now accessible only via + ** the pushed address. Reload that address. + */ + if (ED_IsLocPrimaryOrExpr (Expr)) { + g_getlocal (CF_PTR, AddrSP); + } + + /* Load the whole data chunk containing the bits to be changed */ + LoadExpr (ChunkFlags, Expr); + + /* Get the bits that are not to be affected */ + g_and (ChunkFlags | CF_CONST, ~(Mask << Expr->Type->A.B.Offs)); + + /* Restore the bits that are not to be affected */ + g_or (ChunkFlags & ~CF_FORCECHAR, 0); + + /* Store the whole data chunk containing the changed bits back */ + Store (Expr, ChunkType); + + /* Cache the expression result type */ + ResType = IntPromotion (Expr->Type); + + if (KeepResult != OA_NEED_NONE) { + /* Restore the expression result value */ + g_restore (Flags | CF_FORCECHAR); + + /* Promote if needed */ + if (KeepResult != OA_NEED_OLD) { + /* Do unsigned promotion first */ + g_typecast (TypeOf (ResType) | CF_UNSIGNED, Flags); + + /* Then do sign-extension */ + if (IsSignSigned (Expr->Type) && + Expr->Type->A.B.Width < CHAR_BITS * SizeOf (ResType)) { + /* The way is: + ** x = bits & bit_mask + ** m = 1 << (bit_width - 1) + ** r = (x ^ m) - m + ** Since we have already masked bits with bit_mask, we may skip the + ** first step. + */ + g_xor (Flags | CF_CONST, 1U << (Expr->Type->A.B.Width - 1U)); + g_dec ((Flags & ~CF_FORCECHAR) | CF_CONST, 1U << (Expr->Type->A.B.Width - 1U)); + } + } else { + /* Do promotion with sign-extension */ + g_typecast (TypeOf (ResType), Flags); + } + } + + /* Get the expression result type */ + Expr->Type = ResType; +} + + + +static void OpAssignBitField (const GenDesc* Gen, ExprDesc* Expr, const char* Op) +/* Parse an "=" (if 'Gen' is 0) or "op=" operation for bit-field lhs */ +{ + ExprDesc Expr2; + CodeMark PushPos; + int AddrSP; + unsigned Mask; + unsigned Flags; + unsigned ChunkFlags; + const Type* ChunkType; + const Type* ResType; + + /* Cache the expression result type */ + ResType = IntPromotion (Expr->Type); + + ED_Init (&Expr2); + Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; + + /* If the bit-field fits within one byte, do the following operations + ** with bytes. + */ + if ((Expr->Type->A.B.Width - 1U) / CHAR_BITS == + (Expr->Type->A.B.Offs + Expr->Type->A.B.Width - 1U) / CHAR_BITS) { + ChunkType = GetUnderlyingType (Expr->Type); + } else { + /* We use the declarartion integer type as the chunk type. + ** Note: A bit-field will not occupy bits located in bytes more than + ** that of its declaration type in cc65. So this is OK. + */ + ChunkType = Expr->Type + 1; + } + + /* Determine code generator flags */ + Flags = TypeOf (Expr->Type) | CF_FORCECHAR; + ChunkFlags = TypeOf (ChunkType); + if ((ChunkFlags & CF_TYPEMASK) == CF_CHAR) { + ChunkFlags |= CF_FORCECHAR; + } + + /* Get the address on stack for the store */ + PushAddr (Expr); + + /* We may need the pushed address later */ + AddrSP = StackPtr; + + /* Get bit mask to limit the range of the value */ + Mask = (0x0001U << Expr->Type->A.B.Width) - 1U; + + if (Gen != 0) { + + /* Fetch the lhs into the primary register if needed */ + LoadExpr (CF_NONE, Expr); + + /* Backup them on stack */ + GetCodePos (&PushPos); + g_push (Flags & ~CF_FORCECHAR, 0); + + } + + /* Read the expression on the right side of the '=' or 'op=' */ + MarkedExprWithCheck (hie1, &Expr2); + + /* The rhs must be an integer (or a float, but we don't support that yet */ + if (!IsClassInt (Expr2.Type)) { + Error ("Invalid right operand for binary operator '%s'", Op); + /* Continue. Wrong code will be generated, but the compiler won't + ** break, so this is the best error recovery. + */ + } + + /* Special treatment if the value is constant. + ** Beware: Expr2 may contain side effects, so there must not be + ** code generated for Expr2. + */ + if (ED_IsConstAbsInt (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) { + + if (Gen == 0) { + + /* Get the value and apply the mask */ + unsigned Val = (unsigned)(Expr2.IVal & Mask); + + /* Load the whole data chunk containing the bits to be changed */ + LoadExpr (ChunkFlags, Expr); + + /* If the value is equal to the mask now, all bits are one, and we + ** can skip the mask operation. + */ + if (Val != Mask) { + /* Get the bits that are not to be affected */ + g_and (ChunkFlags | CF_CONST, ~(Mask << Expr->Type->A.B.Offs)); + } + + /* Restore the bits that are not to be affected */ + g_or (ChunkFlags | CF_CONST, Val << Expr->Type->A.B.Offs); + + /* Store the whole data chunk containing the changed bits back */ + Store (Expr, ChunkType); + + /* Load the expression result value */ + if (IsSignSigned (Expr->Type)) { + unsigned SignExtensionMask = 1 << (Expr->Type->A.B.Width - 1); + Val = (Val^ SignExtensionMask) - SignExtensionMask; + } + ED_MakeConstAbs (Expr, Val, ResType); + LimitExprValue (Expr); + LoadExpr (CF_NONE, Expr); + + /* Done */ + goto Done; + + } else { + + /* Since we will operate with a constant, we can remove the push if + ** the generator has the NOPUSH flag set. + */ + if (Gen->Flags & GEN_NOPUSH) { + RemoveCode (&PushPos); + } + + /* Special handling for add and sub - some sort of a hack, but short code */ + if (Gen->Func == g_add) { + g_inc (Flags | CF_CONST, Expr2.IVal); + } else if (Gen->Func == g_sub) { + g_dec (Flags | CF_CONST, Expr2.IVal); + } else { + if (Expr2.IVal == 0) { + /* Check for div by zero/mod by zero */ + if (Gen->Func == g_div) { + Error ("Division by zero"); + } else if (Gen->Func == g_mod) { + Error ("Modulo operation with zero"); + } + } + + /* Adjust the types of the operands if needed */ + if (Gen->Func == g_div || Gen->Func == g_mod) { + unsigned AdjustedFlags = Flags; + if (Expr->Type->A.B.Width < INT_BITS || IsSignSigned (Expr->Type)) { + AdjustedFlags = (Flags & ~CF_UNSIGNED) | CF_CONST; + AdjustedFlags = g_typeadjust (AdjustedFlags, TypeOf (Expr2.Type) | CF_CONST); + } + Gen->Func (g_typeadjust (Flags, AdjustedFlags) | CF_CONST, Expr2.IVal); + } else { + Gen->Func ((Flags & ~CF_FORCECHAR) | CF_CONST, Expr2.IVal); + } + } + + } + + } else { + + /* Do 'op' if provided */ + if (Gen != 0) { + + /* Load rhs into the primary */ + LoadExpr (CF_NONE, &Expr2); + + /* Adjust the types of the operands if needed */ + if (Gen->Func == g_div || Gen->Func == g_mod) { + unsigned AdjustedFlags = Flags; + if (Expr->Type->A.B.Width < INT_BITS || IsSignSigned (Expr->Type)) { + AdjustedFlags = (Flags & ~CF_UNSIGNED) | CF_CONST; + AdjustedFlags = g_typeadjust (AdjustedFlags, TypeOf (Expr2.Type) | CF_CONST); + } + Gen->Func (g_typeadjust (Flags, AdjustedFlags), 0); + } else { + Gen->Func (g_typeadjust (Flags, TypeOf (Expr2.Type)), 0); + } + + } else { + + /* Do type conversion if necessary */ + TypeConversion (&Expr2, Expr->Type); + + /* If necessary, load rhs into the primary register */ + LoadExpr (CF_NONE, &Expr2); + + } + + } + + /* Apply the mask */ + g_and (Flags | CF_CONST, Mask); + + /* Save the expression result value */ + g_save (Flags); + + /* Do integral promotion without sign-extension if needed */ + g_typecast (ChunkFlags | CF_UNSIGNED, Flags); + + /* Shift it into the right position */ + g_asl (ChunkFlags | CF_CONST, Expr->Type->A.B.Offs); + + /* Push the interim result on stack */ + g_push (ChunkFlags & ~CF_FORCECHAR, 0); + + /* If the original lhs was using the primary, it is now accessible only via + ** the pushed address. Reload that address. + */ + if (ED_IsLocPrimaryOrExpr (Expr)) { + g_getlocal (CF_PTR, AddrSP); + } + + /* Load the whole data chunk containing the bits to be changed */ + LoadExpr (ChunkFlags, Expr); + + /* Get the bits that are not to be affected */ + g_and (ChunkFlags | CF_CONST, ~(Mask << Expr->Type->A.B.Offs)); + + /* Restore the bits that are not to be affected */ + g_or (ChunkFlags & ~CF_FORCECHAR, 0); + + /* Store the whole data chunk containing the changed bits back */ + Store (Expr, ChunkType); + + /* Restore the expression result value */ + g_restore (Flags); + + /* Do unsigned promotion first */ + g_typecast (TypeOf (ResType) | CF_UNSIGNED, Flags); + + /* Then do sign-extension */ + if (IsSignSigned (Expr->Type) && + Expr->Type->A.B.Width < CHAR_BITS * SizeOf (ResType)) { + /* The way is: + ** x = bits & bit_mask + ** m = 1 << (bit_width - 1) + ** r = (x ^ m) - m + ** Since we have already masked bits with bit_mask, we may skip the + ** first step. + */ + g_xor (Flags | CF_CONST, 1U << (Expr->Type->A.B.Width - 1U)); + g_dec ((Flags & ~CF_FORCECHAR) | CF_CONST, 1U << (Expr->Type->A.B.Width - 1U)); + } + +Done: + + /* Get the expression result type */ + Expr->Type = ResType; + + /* Value is in primary as an rvalue */ + ED_FinalizeRValLoad (Expr); +} + + + +static void OpAssignArithmetic (const GenDesc* Gen, ExprDesc* Expr, const char* Op) +/* Parse an "=" (if 'Gen' is 0) or "op=" operation for arithmetic lhs */ +{ + ExprDesc Expr2; + CodeMark PushPos; + + unsigned Flags; + int MustScale; + + ED_Init (&Expr2); + Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; + + /* Determine code generator flags */ + Flags = TypeOf (Expr->Type); + + /* Determine the type of the lhs */ + MustScale = Gen != 0 && (Gen->Func == g_add || Gen->Func == g_sub) && + IsTypePtr (Expr->Type); + + /* Get the address on stack for the store */ + PushAddr (Expr); + + if (Gen == 0) { + + /* Read the expression on the right side of the '=' */ + MarkedExprWithCheck (hie1, &Expr2); + + /* Do type conversion if necessary. Beware: Do not use char type + ** here! + */ + TypeConversion (&Expr2, Expr->Type); + + /* If necessary, load the value into the primary register */ + LoadExpr (CF_NONE, &Expr2); + + } else { + + /* Load the original value if necessary */ + LoadExpr (CF_NONE, Expr); + + /* Push lhs on stack */ + GetCodePos (&PushPos); + g_push (Flags, 0); + + /* Read the expression on the right side of the '=' or 'op=' */ + MarkedExprWithCheck (hie1, &Expr2); + + /* The rhs must be an integer (or a float, but we don't support that yet */ + if (!IsClassInt (Expr2.Type)) { + Error ("Invalid right operand for binary operator '%s'", Op); + /* Continue. Wrong code will be generated, but the compiler won't + ** break, so this is the best error recovery. + */ + } + + /* Special treatment if the value is constant. + ** Beware: Expr2 may contain side effects, so there must not be + ** code generated for Expr2. + */ + if (ED_IsConstAbsInt (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) { + + /* Since we will operate with a constant, we can remove the push if + ** the generator has the NOPUSH flag set. + */ + if (Gen->Flags & GEN_NOPUSH) { + RemoveCode (&PushPos); + } + if (MustScale) { + /* lhs is a pointer, scale rhs */ + Expr2.IVal *= CheckedSizeOf (Expr->Type+1); + } + + /* If the lhs is character sized, the operation may be later done + ** with characters. + */ + if (CheckedSizeOf (Expr->Type) == SIZEOF_CHAR) { + Flags |= CF_FORCECHAR; + } + + /* Special handling for add and sub - some sort of a hack, but short code */ + if (Gen->Func == g_add) { + g_inc (Flags | CF_CONST, Expr2.IVal); + } else if (Gen->Func == g_sub) { + g_dec (Flags | CF_CONST, Expr2.IVal); + } else { + if (Expr2.IVal == 0) { + /* Check for div by zero/mod by zero */ + if (Gen->Func == g_div) { + Error ("Division by zero"); + } else if (Gen->Func == g_mod) { + Error ("Modulo operation with zero"); + } + } + Gen->Func (Flags | CF_CONST, Expr2.IVal); + } + + } else { + + /* If necessary, load the value into the primary register */ + LoadExpr (CF_NONE, &Expr2); + + if (MustScale) { + /* lhs is a pointer, scale rhs */ + g_scale (TypeOf (Expr2.Type), CheckedSizeOf (Expr->Type+1)); + } + + /* If the lhs is character sized, the operation may be later done + ** with characters. + */ + if (CheckedSizeOf (Expr->Type) == SIZEOF_CHAR) { + Flags |= CF_FORCECHAR; + } + + /* Adjust the types of the operands if needed */ + Gen->Func (g_typeadjust (Flags, TypeOf (Expr2.Type)), 0); + + } + } + + /* Generate a store instruction */ + Store (Expr, 0); + + /* Get the expression result type */ + if (IsClassInt (Expr->Type)) { + Expr->Type = IntPromotion (Expr->Type); + } + + /* Value is in primary as an rvalue */ + ED_FinalizeRValLoad (Expr); +} + + + +void OpAssign (const GenDesc* Gen, ExprDesc* Expr, const char* Op) +/* Parse an "=" (if 'Gen' is 0) or "op=" operation */ { const Type* ltype = Expr->Type; @@ -142,28 +663,32 @@ void Assignment (ExprDesc* Expr) ED_Init (&Expr2); Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; - /* We must have an lvalue for an assignment */ - if (ED_IsRVal (Expr)) { - if (IsTypeArray (Expr->Type)) { - Error ("Array type '%s' is not assignable", GetFullTypeName (Expr->Type)); - } else if (IsTypeFunc (Expr->Type)) { - Error ("Function type '%s' is not assignable", GetFullTypeName (Expr->Type)); - } else { - Error ("Assignment to rvalue"); + /* Only "=" accept struct/union */ + if (IsClassStruct (ltype) ? Gen != 0 : !IsClassScalar (ltype)) { + Error ("Invalid left operand for binary operator '%s'", Op); + /* Continue. Wrong code will be generated, but the compiler won't + ** break, so this is the best error recovery. + */ + } else { + /* Check for assignment to incomplete type */ + if (IsIncompleteESUType (ltype)) { + Error ("Assignment to incomplete type '%s'", GetFullTypeName (ltype)); + } else if (ED_IsRVal (Expr)) { + /* Assignment can only be used with lvalues */ + if (IsTypeArray (ltype)) { + Error ("Array type '%s' is not assignable", GetFullTypeName (ltype)); + } else if (IsTypeFunc (ltype)) { + Error ("Function type '%s' is not assignable", GetFullTypeName (ltype)); + } else { + Error ("Assignment to rvalue"); + } + } else if (IsQualConst (ltype)) { + /* Check for assignment to const */ + Error ("Assignment to const"); } } - /* Check for assignment to const */ - if (IsQualConst (ltype)) { - Error ("Assignment to const"); - } - - /* Check for assignment to incomplete type */ - if (IsIncompleteESUType (ltype)) { - Error ("Assignment to incomplete type '%s'", GetFullTypeName (ltype)); - } - - /* Skip the '=' token */ + /* Skip the '=' or 'op=' token */ NextToken (); /* cc65 does not have full support for handling structs or unions. Since @@ -174,114 +699,136 @@ void Assignment (ExprDesc* Expr) if (IsClassStruct (ltype)) { /* Copy the struct or union by value */ CopyStruct (Expr, &Expr2); - - } else if (ED_IsBitField (Expr)) { - - CodeMark AndPos; - CodeMark PushPos; - - unsigned Mask; - unsigned Flags; - - /* If the bit-field fits within one byte, do the following operations - ** with bytes. - */ - if (Expr->BitOffs / CHAR_BITS == (Expr->BitOffs + Expr->BitWidth - 1) / CHAR_BITS) { - Expr->Type = type_uchar; - } - - /* Determine code generator flags */ - Flags = TypeOf (Expr->Type); - - /* Assignment to a bit field. Get the address on stack for the store. */ - PushAddr (Expr); - - /* Load the value from the location */ - Expr->Flags &= ~E_BITFIELD; - LoadExpr (CF_NONE, Expr); - - /* Mask unwanted bits */ - Mask = (0x0001U << Expr->BitWidth) - 1U; - GetCodePos (&AndPos); - g_and (Flags | CF_CONST, ~(Mask << Expr->BitOffs)); - - /* Push it on stack */ - GetCodePos (&PushPos); - g_push (Flags, 0); - - /* Read the expression on the right side of the '=' */ - MarkedExprWithCheck (hie1, &Expr2); - - /* Do type conversion if necessary. Beware: Do not use char type - ** here! - */ - TypeConversion (&Expr2, ltype); - - /* Special treatment if the value is constant. */ - /* Beware: Expr2 may contain side effects, so there must not be - ** code generated for Expr2. - */ - if (ED_IsConstAbsInt (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) { - - /* Get the value and apply the mask */ - unsigned Val = (unsigned) (Expr2.IVal & Mask); - - /* Since we will do the OR with a constant, we can remove the push */ - RemoveCode (&PushPos); - - /* If the value is equal to the mask now, all bits are one, and we - ** can remove the mask operation from above. - */ - if (Val == Mask) { - RemoveCode (&AndPos); - } - - /* Generate the or operation */ - g_or (Flags | CF_CONST, Val << Expr->BitOffs); - - } else { - - /* If necessary, load the value into the primary register */ - LoadExpr (CF_NONE, &Expr2); - - /* Apply the mask */ - g_and (Flags | CF_CONST, Mask); - - /* Shift it into the right position */ - g_asl (Flags | CF_CONST, Expr->BitOffs); - - /* Or both values */ - g_or (Flags, 0); - } - - /* Generate a store instruction */ - Store (Expr, 0); - - /* Restore the expression type */ - Expr->Type = ltype; - - /* Value is in primary as an rvalue */ - ED_FinalizeRValLoad (Expr); - + } else if (IsTypeBitField (ltype)) { + /* Special care is needed for bit-field 'op=' */ + OpAssignBitField (Gen, Expr, Op); } else { - - /* Get the address on stack if needed */ - PushAddr (Expr); - - /* Read the expression on the right side of the '=' */ - hie1 (&Expr2); - - /* Do type conversion if necessary */ - TypeConversion (&Expr2, ltype); - - /* If necessary, load the value into the primary register */ - LoadExpr (CF_NONE, &Expr2); - - /* Generate a store instruction */ - Store (Expr, 0); - - /* Value is in primary as an rvalue */ - ED_FinalizeRValLoad (Expr); - + /* Normal straight 'op=' */ + OpAssignArithmetic (Gen, Expr, Op); } } + + + +void OpAddSubAssign (const GenDesc* Gen, ExprDesc *Expr, const char* Op) +/* Parse a "+=" or "-=" operation */ +{ + ExprDesc Expr2; + unsigned lflags; + unsigned rflags; + int MustScale; + + /* We currently only handle non-bit-fields in some addressing modes here */ + if (IsTypeBitField (Expr->Type) || ED_IsLocPrimaryOrExpr (Expr)) { + /* Use generic routine instead */ + OpAssign (Gen, Expr, Op); + return; + } + + /* There must be an integer or pointer on the left side */ + if (!IsClassInt (Expr->Type) && !IsTypePtr (Expr->Type)) { + Error ("Invalid left operand for binary operator '%s'", Op); + /* Continue. Wrong code will be generated, but the compiler won't + ** break, so this is the best error recovery. + */ + } else { + /* We must have an lvalue */ + if (ED_IsRVal (Expr)) { + Error ("Invalid lvalue in assignment"); + } else if (IsQualConst (Expr->Type)) { + /* The left side must not be const qualified */ + Error ("Assignment to const"); + } + } + + /* Skip the operator */ + NextToken (); + + /* Check if we have a pointer expression and must scale rhs */ + MustScale = IsTypePtr (Expr->Type); + + /* Initialize the code generator flags */ + lflags = 0; + rflags = 0; + + ED_Init (&Expr2); + Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; + + /* Evaluate the rhs. We expect an integer here, since float is not + ** supported + */ + hie1 (&Expr2); + if (!IsClassInt (Expr2.Type)) { + Error ("Invalid right operand for binary operator '%s'", Op); + /* Continue. Wrong code will be generated, but the compiler won't + ** break, so this is the best error recovery. + */ + } + + /* Setup the code generator flags */ + lflags |= TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR; + rflags |= TypeOf (Expr2.Type) | CF_FORCECHAR; + + if (ED_IsConstAbs (&Expr2)) { + /* The resulting value is a constant */ + rflags |= CF_CONST; + lflags |= CF_CONST; + + /* Scale it */ + if (MustScale) { + Expr2.IVal *= CheckedSizeOf (Indirect (Expr->Type)); + } + } else { + /* Not constant, load into the primary */ + LoadExpr (CF_NONE, &Expr2); + + /* Convert the type of the rhs to that of the lhs */ + g_typecast (lflags, rflags & ~CF_FORCECHAR); + + if (MustScale) { + /* lhs is a pointer, scale rhs */ + g_scale (TypeOf (Expr2.Type), CheckedSizeOf (Indirect (Expr->Type))); + } + } + + /* Output apropriate code depending on the location */ + switch (ED_GetLoc (Expr)) { + + case E_LOC_ABS: + case E_LOC_GLOBAL: + case E_LOC_STATIC: + case E_LOC_REGISTER: + case E_LOC_LITERAL: + case E_LOC_CODE: + /* Absolute numeric addressed variable, global variable, local + ** static variable, register variable, pooled literal or code + ** label location. + */ + if (Gen->Tok == TOK_PLUS_ASSIGN) { + g_addeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal); + } else { + g_subeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal); + } + break; + + case E_LOC_STACK: + /* Value on the stack */ + if (Gen->Tok == TOK_PLUS_ASSIGN) { + g_addeqlocal (lflags, Expr->IVal, Expr2.IVal); + } else { + g_subeqlocal (lflags, Expr->IVal, Expr2.IVal); + } + break; + + default: + Internal ("Invalid location in Store(): 0x%04X", ED_GetLoc (Expr)); + } + + /* Get the expression result type */ + if (IsClassInt (Expr->Type)) { + Expr->Type = IntPromotion (Expr->Type); + } + + /* Expression is an rvalue in the primary now */ + ED_FinalizeRValLoad (Expr); +} diff --git a/src/cc65/assignment.h b/src/cc65/assignment.h index b2cc1548b..6098118b4 100644 --- a/src/cc65/assignment.h +++ b/src/cc65/assignment.h @@ -43,14 +43,38 @@ +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* Whether to save/restore the original lhs or result value */ +enum { + OA_NEED_NONE, + OA_NEED_OLD, + OA_NEED_NEW, +}; + +/* Forward */ +struct GenDesc; + + + /*****************************************************************************/ /* Code */ /*****************************************************************************/ -void Assignment (ExprDesc* lval); -/* Parse an assignment */ +void DoIncDecBitField (ExprDesc* Expr, long Val, unsigned KeepResult); +/* Process inc/dec for bit-field */ + +void OpAssign (const struct GenDesc* Gen, ExprDesc* lval, const char* Op); +/* Parse an "=" (if 'Gen' is 0) or "op=" operation */ + +void OpAddSubAssign (const struct GenDesc* Gen, ExprDesc *Expr, const char* Op); +/* Parse a "+=" or "-=" operation */ diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 6465c27a6..e5d3f8d96 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -207,7 +207,11 @@ static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBu } } - SB_AppendStr (&Buf, GetSymTypeName (T)); + if (!IsTypeBitField (T)) { + SB_AppendStr (&Buf, GetSymTypeName (T)); + } else { + SB_AppendStr (&Buf, GetBasicTypeName (T + 1)); + } if (!SB_IsEmpty (West)) { SB_AppendChar (&Buf, ' '); @@ -231,6 +235,7 @@ const char* GetBasicTypeName (const Type* T) { switch (GetRawType (T)) { case T_TYPE_ENUM: return "enum"; + case T_TYPE_BITFIELD: return "bit-field"; case T_TYPE_FLOAT: return "float"; case T_TYPE_DOUBLE: return "double"; case T_TYPE_VOID: return "void"; @@ -581,6 +586,18 @@ const Type* GetUnderlyingType (const Type* Type) if (Type->A.S->V.E.Type != 0) { return Type->A.S->V.E.Type; } + } else if (IsTypeBitField (Type)) { + /* We consider the smallest type that can represent all values of the + ** bit-field, instead of the type used in the declaration, the truly + ** underlying of the bit-field. + */ + unsigned Size = (int)(Type->A.B.Width - 1) / (int)CHAR_BITS + 1; + switch (Size) { + case SIZEOF_CHAR: Type = IsSignSigned (Type) ? type_schar : type_uchar; break; + case SIZEOF_INT: Type = IsSignSigned (Type) ? type_int : type_uint; break; + case SIZEOF_LONG: Type = IsSignSigned (Type) ? type_long : type_ulong; break; + default: Type = IsSignSigned (Type) ? type_int : type_uint; break; + } } return Type; @@ -594,13 +611,14 @@ TypeCode GetUnderlyingTypeCode (const Type* Type) */ { TypeCode Underlying = UnqualifiedType (Type->C); - TypeCode TCode; if (IsISOChar (Type)) { return IS_Get (&SignedChars) ? T_SCHAR : T_UCHAR; } else if (IsTypeEnum (Type)) { + TypeCode TCode; + /* This should not happen, but just in case */ if (Type->A.S == 0) { Internal ("Enum tag type error in GetUnderlyingTypeCode"); @@ -623,6 +641,21 @@ TypeCode GetUnderlyingTypeCode (const Type* Type) case T_SIZE_LONGLONG: Underlying |= T_TYPE_LONGLONG; break; default: Underlying |= T_TYPE_INT; break; } + } else if (IsTypeBitField (Type)) { + /* We consider the smallest type that can represent all values of the + ** bit-field, instead of the type used in the declaration, the truly + ** underlying of the bit-field. + */ + unsigned Size = (int)(Type->A.B.Width - 1) / (int)CHAR_BITS + 1; + switch (Size) { + case SIZEOF_CHAR: Underlying = T_CHAR; break; + case SIZEOF_INT: Underlying = T_INT; break; + case SIZEOF_LONG: Underlying = T_LONG; break; + case SIZEOF_LONGLONG: Underlying = T_LONGLONG; break; + default: Underlying = T_INT; break; + } + Underlying &= ~T_MASK_SIGN; + Underlying |= Type->C & T_MASK_SIGN; } return Underlying; @@ -933,7 +966,11 @@ const Type* IntPromotion (const Type* T) ** These are called the integral promotions. */ - if (IsTypeChar (T)) { + if (IsTypeBitField (T)) { + /* The standard rule is OK for now as we don't support bit-fields with widths > 16. + */ + return T->A.B.Width >= INT_BITS && IsSignUnsigned (T) ? type_uint : type_int; + } else if (IsTypeChar (T)) { /* An integer can represent all values from either signed or unsigned char, so convert ** chars to int. */ @@ -1059,6 +1096,37 @@ const Type* UnsignedType (const Type* T) +Type* NewBitFieldType (const Type* T, unsigned BitOffs, unsigned BitWidth) +/* Return a type string that is "T : BitWidth" aligned on BitOffs. The type +** string is allocated on the heap and may be freed after use. +*/ +{ + Type* P; + + /* The type specifier must be integeral */ + CHECK (IsClassInt (T)); + + /* Allocate the new type string */ + P = TypeAlloc (3); + + /* Create the return type... */ + P[0].C = IsSignSigned (T) ? T_SBITFIELD : T_UBITFIELD; + P[0].C |= (T[0].C & T_QUAL_ADDRSIZE); + P[0].A.B.Offs = BitOffs; + P[0].A.B.Width = BitWidth; + + /* Get the declaration type */ + memcpy (&P[1], GetUnderlyingType (T), sizeof (P[1])); + + /* Get done... */ + P[2].C = T_END; + + /* ...and return it */ + return P; +} + + + int IsClassObject (const Type* T) /* Return true if this is a fully described object type */ { diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 4729284bd..e36d7c82e 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -78,54 +78,55 @@ enum { T_TYPE_INT = 0x000003, T_TYPE_LONG = 0x000004, T_TYPE_LONGLONG = 0x000005, - T_TYPE_ENUM = 0x000006, - T_TYPE_FLOAT = 0x000007, - T_TYPE_DOUBLE = 0x000008, - T_TYPE_VOID = 0x000009, - T_TYPE_STRUCT = 0x00000A, - T_TYPE_UNION = 0x00000B, - T_TYPE_ARRAY = 0x00000C, - T_TYPE_PTR = 0x00000D, - T_TYPE_FUNC = 0x00000E, - T_MASK_TYPE = 0x00000F, + T_TYPE_ENUM = 0x000008, + T_TYPE_BITFIELD = 0x000009, + T_TYPE_FLOAT = 0x00000A, + T_TYPE_DOUBLE = 0x00000B, + T_TYPE_VOID = 0x000010, + T_TYPE_STRUCT = 0x000011, + T_TYPE_UNION = 0x000012, + T_TYPE_ARRAY = 0x000018, + T_TYPE_PTR = 0x000019, + T_TYPE_FUNC = 0x00001A, + T_MASK_TYPE = 0x00001F, /* Type classes */ T_CLASS_NONE = 0x000000, - T_CLASS_INT = 0x000010, - T_CLASS_FLOAT = 0x000020, - T_CLASS_PTR = 0x000030, - T_CLASS_STRUCT = 0x000040, - T_CLASS_FUNC = 0x000050, - T_MASK_CLASS = 0x000070, + T_CLASS_INT = 0x000020, + T_CLASS_FLOAT = 0x000040, + T_CLASS_PTR = 0x000060, + T_CLASS_STRUCT = 0x000080, + T_CLASS_FUNC = 0x0000A0, + T_MASK_CLASS = 0x0000E0, /* Type signedness */ T_SIGN_NONE = 0x000000, - T_SIGN_UNSIGNED = 0x000080, - T_SIGN_SIGNED = 0x000100, - T_MASK_SIGN = 0x000180, + T_SIGN_UNSIGNED = 0x000100, + T_SIGN_SIGNED = 0x000200, + T_MASK_SIGN = 0x000300, /* Type size modifiers */ T_SIZE_NONE = 0x000000, - T_SIZE_CHAR = 0x000200, - T_SIZE_SHORT = 0x000400, - T_SIZE_INT = 0x000600, - T_SIZE_LONG = 0x000800, - T_SIZE_LONGLONG = 0x000A00, - T_MASK_SIZE = 0x000E00, + T_SIZE_CHAR = 0x001000, + T_SIZE_SHORT = 0x002000, + T_SIZE_INT = 0x003000, + T_SIZE_LONG = 0x004000, + T_SIZE_LONGLONG = 0x005000, + T_MASK_SIZE = 0x00F000, /* Type qualifiers */ T_QUAL_NONE = 0x000000, - T_QUAL_CONST = 0x001000, - T_QUAL_VOLATILE = 0x002000, - T_QUAL_RESTRICT = 0x004000, + T_QUAL_CONST = 0x010000, + T_QUAL_VOLATILE = 0x020000, + T_QUAL_RESTRICT = 0x040000, T_QUAL_CVR = T_QUAL_CONST | T_QUAL_VOLATILE | T_QUAL_RESTRICT, - T_QUAL_NEAR = 0x008000, - T_QUAL_FAR = 0x010000, + T_QUAL_NEAR = 0x080000, + T_QUAL_FAR = 0x100000, T_QUAL_ADDRSIZE = T_QUAL_NEAR | T_QUAL_FAR, - T_QUAL_FASTCALL = 0x020000, - T_QUAL_CDECL = 0x040000, + T_QUAL_FASTCALL = 0x200000, + T_QUAL_CDECL = 0x400000, T_QUAL_CCONV = T_QUAL_FASTCALL | T_QUAL_CDECL, - T_MASK_QUAL = 0x07F000, + T_MASK_QUAL = 0x7F0000, /* Types */ T_CHAR = T_TYPE_CHAR | T_CLASS_INT | T_SIGN_NONE | T_SIZE_CHAR, @@ -140,6 +141,8 @@ enum { T_LONGLONG = T_TYPE_LONGLONG | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_LONGLONG, T_ULONGLONG = T_TYPE_LONGLONG | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_LONGLONG, T_ENUM = T_TYPE_ENUM | T_CLASS_INT | T_SIGN_NONE | T_SIZE_NONE, + T_SBITFIELD = T_TYPE_BITFIELD | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_NONE, + T_UBITFIELD = T_TYPE_BITFIELD | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_NONE, T_FLOAT = T_TYPE_FLOAT | T_CLASS_FLOAT | T_SIGN_NONE | T_SIZE_NONE, T_DOUBLE = T_TYPE_DOUBLE | T_CLASS_FLOAT | T_SIGN_NONE | T_SIZE_NONE, T_VOID = T_TYPE_VOID | T_CLASS_NONE | T_SIGN_NONE | T_SIZE_NONE, @@ -171,6 +174,10 @@ struct Type { struct SymEntry* S; /* Enum/struct/union tag symbol entry pointer */ long L; /* Numeric attribute value */ unsigned long U; /* Dito, unsigned */ + struct { + unsigned Offs; /* Bit offset into storage unit */ + unsigned Width; /* Width in bits */ + } B; /* Data for bit fields */ } A; /* Type attribute if necessary */ }; @@ -372,6 +379,11 @@ const Type* SignedType (const Type* T); const Type* UnsignedType (const Type* T); /* Get unsigned counterpart of the integral type */ +Type* NewBitFieldType (const Type* T, unsigned BitOffs, unsigned BitWidth); +/* Return a type string that is "T : BitWidth" aligned on BitOffs. The type +** string is allocated on the heap and may be freed after use. +*/ + #if defined(HAVE_INLINE) INLINE TypeCode GetRawType (const Type* T) /* Get the raw type */ @@ -514,6 +526,36 @@ INLINE int IsTypeEnum (const Type* T) # define IsTypeEnum(T) (GetRawType (T) == T_TYPE_ENUM) #endif +#if defined(HAVE_INLINE) +INLINE int IsTypeSignedBitField (const Type* T) +/* Return true if this is a signed bit-field */ +{ + return (UnqualifiedType (T->C) == T_SBITFIELD); +} +#else +# define IsTypeSignedBitField(T) (UnqualifiedType ((T)->C) == T_SBITFIELD) +#endif + +#if defined(HAVE_INLINE) +INLINE int IsTypeUnsignedBitField (const Type* T) +/* Return true if this is an unsigned bit-field */ +{ + return (UnqualifiedType (T->C) == T_UBITFIELD); +} +#else +# define IsTypeUnsignedBitField(T) (UnqualifiedType ((T)->C) == T_UBITFIELD) +#endif + +#if defined(HAVE_INLINE) +INLINE int IsTypeBitField (const Type* T) +/* Return true if this is a bit-field (either signed or unsigned) */ +{ + return IsTypeSignedBitField (T) || IsTypeUnsignedBitField (T); +} +#else +# define IsTypeBitField(T) (IsTypeSignedBitField (T) || IsTypeUnsignedBitField (T)) +#endif + #if defined(HAVE_INLINE) INLINE int IsTypeStruct (const Type* T) /* Return true if this is a struct type */ diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 2aa620a29..c1346e872 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2533,7 +2533,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) ** example two consecutive 10 bit fields. These will be packed ** into 3 bytes. */ - SI.ValBits += Sym->V.B.BitWidth; + SI.ValBits += Sym->Type->A.B.Width; /* TODO: Generalize this so any type can be used. */ CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); while (SI.ValBits >= CHAR_BITS) { @@ -2560,14 +2560,14 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) unsigned Shift; /* Calculate the bitmask from the bit-field data */ - unsigned Mask = (1U << Sym->V.B.BitWidth) - 1U; + unsigned Mask = (1U << Sym->Type->A.B.Width) - 1U; /* Safety ... */ - CHECK (Sym->V.B.Offs * CHAR_BITS + Sym->V.B.BitOffs == - SI.Offs * CHAR_BITS + SI.ValBits); + CHECK (Sym->V.Offs * CHAR_BITS + Sym->Type->A.B.Offs == + SI.Offs * CHAR_BITS + SI.ValBits); /* Read the data, check for a constant integer, do a range check */ - ED = ParseScalarInitInternal (Sym->Type); + ED = ParseScalarInitInternal (IntPromotion (Sym->Type)); if (!ED_IsConstAbsInt (&ED)) { Error ("Constant initializer expected"); ED_MakeConstAbsInt (&ED, 1); @@ -2582,26 +2582,26 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer" " changes value from %ld to %u", GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), - Sym->V.B.BitWidth, ED.IVal, Val); + Sym->Type->A.B.Width, ED.IVal, Val); } } else { /* Sign extend back to full width of host long. */ - unsigned ShiftBits = sizeof (long) * CHAR_BIT - Sym->V.B.BitWidth; + unsigned ShiftBits = sizeof (long) * CHAR_BIT - Sym->Type->A.B.Width; long RestoredVal = asr_l(asl_l (Val, ShiftBits), ShiftBits); if (ED.IVal != RestoredVal) { Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer " "changes value from %ld to %ld", GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), - Sym->V.B.BitWidth, ED.IVal, RestoredVal); + Sym->Type->A.B.Width, ED.IVal, RestoredVal); } } /* Add the value to the currently stored bit-field value */ - Shift = (Sym->V.B.Offs - SI.Offs) * CHAR_BITS + Sym->V.B.BitOffs; + Shift = (Sym->V.Offs - SI.Offs) * CHAR_BITS + Sym->Type->A.B.Offs; SI.BitVal |= (Val << Shift); /* Account for the data and output any full bytes we have. */ - SI.ValBits += Sym->V.B.BitWidth; + SI.ValBits += Sym->Type->A.B.Width; /* Make sure unsigned is big enough to hold the value, 22 bits. ** This is 22 bits because the most we can have is 7 bits left ** over from the previous OutputBitField call, plus 15 bits diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 729b26942..c45005d65 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -47,13 +47,8 @@ -/* Generator attributes */ -#define GEN_NOPUSH 0x01 /* Don't push lhs */ -#define GEN_COMM 0x02 /* Operator is commutative */ -#define GEN_NOFUNC 0x04 /* Not allowed for function pointers */ - /* Map a generator function and its attributes to a token */ -typedef struct { +typedef struct GenDesc { token_t Tok; /* Token to map to */ unsigned Flags; /* Flags for generator function */ void (*Func) (unsigned, unsigned long); /* Generator func */ @@ -91,7 +86,7 @@ static void PostDec (ExprDesc* Expr); -static unsigned GlobalModeFlags (const ExprDesc* Expr) +unsigned GlobalModeFlags (const ExprDesc* Expr) /* Return the addressing mode flags for the given expression */ { switch (ED_GetLoc (Expr)) { @@ -390,117 +385,175 @@ static void DeferDec (const ExprDesc* Expr) -static void DeferredInc (ExprDesc* Expr) -/* Do the deferred post-inc */ +static void DoInc (ExprDesc* Expr, unsigned KeepResult) +/* Do increment */ { unsigned Flags; - unsigned long Val; - - /* Get the flags */ - Flags = TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR | CF_CONST | CF_NOKEEP; + long Val; /* Get the increment value in bytes */ Val = IsTypePtr (Expr->Type) ? CheckedSizeOf (Expr->Type + 1) : 1; - /* Check the location of the data */ - switch (ED_GetLoc (Expr)) { + /* Special treatment is needed for bit-fields */ + if (IsTypeBitField (Expr->Type)) { + DoIncDecBitField (Expr, Val, KeepResult); + return; + } - case E_LOC_ABS: - /* Absolute: numeric address or const */ - g_addeqstatic (Flags, Expr->IVal, 0, Val); - break; + /* Get the flags */ + Flags = TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR | CF_CONST; + if (KeepResult != OA_NEED_NEW) { + /* No need to get the result */ + Flags |= CF_NOKEEP; + } - case E_LOC_GLOBAL: - /* Global variable */ - g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val); - break; + if (KeepResult == OA_NEED_OLD) { - case E_LOC_STATIC: - case E_LOC_LITERAL: - /* Static variable or literal in the literal pool */ - g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val); - break; + Flags |= CF_FORCECHAR; - case E_LOC_REGISTER: - /* Register variable */ - g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val); - break; + /* Push the address if needed */ + PushAddr (Expr); - case E_LOC_STACK: - /* Value on the stack */ - g_addeqlocal (Flags, Expr->IVal, Val); - break; + /* Save the original value */ + LoadExpr (CF_NONE, Expr); + g_save (Flags); - case E_LOC_PRIMARY: - /* The primary register */ - g_inc (Flags, Val); - break; + /* Do the increment */ + g_inc (Flags | CF_CONST, Val); - case E_LOC_EXPR: - /* An expression in the primary register */ - g_addeqind (Flags, Expr->IVal, Val); - break; + /* Store the result back */ + Store (Expr, 0); + + /* Restore the original value */ + g_restore (Flags); + + } else { + + /* Check the location of the data */ + switch (ED_GetLoc (Expr)) { + + case E_LOC_ABS: + /* Absolute numeric addressed variable */ + g_addeqstatic (Flags, Expr->IVal, 0, Val); + break; + + case E_LOC_GLOBAL: + case E_LOC_STATIC: + case E_LOC_REGISTER: + case E_LOC_LITERAL: + case E_LOC_CODE: + /* Global variabl, static variable, register variable, pooled + ** literal or code label location. + */ + g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val); + break; + + case E_LOC_STACK: + /* Value on the stack */ + g_addeqlocal (Flags, Expr->IVal, Val); + break; + + case E_LOC_PRIMARY: + /* The primary register */ + g_inc (Flags, Val); + break; + + case E_LOC_EXPR: + /* An expression referenced in the primary register */ + g_addeqind (Flags, Expr->IVal, Val); + break; + + default: + Internal ("Invalid location in DoInc(): 0x%04X", ED_GetLoc (Expr)); + } - default: - Internal ("Invalid location in DeferredInc(): 0x%04X", ED_GetLoc (Expr)); } } -static void DeferredDec (ExprDesc* Expr) -/* Do the deferred post-dec */ +static void DoDec (ExprDesc* Expr, unsigned KeepResult) +/* Do decrement */ { unsigned Flags; - unsigned long Val; + long Val; - /* Get the flags */ - Flags = TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR | CF_CONST | CF_NOKEEP; - - /* Get the increment value in bytes */ + /* Get the decrement value in bytes */ Val = IsTypePtr (Expr->Type) ? CheckedSizeOf (Expr->Type + 1) : 1; - /* Check the location of the data */ - switch (ED_GetLoc (Expr)) { + /* Special treatment is needed for bit-fields */ + if (IsTypeBitField (Expr->Type)) { + DoIncDecBitField (Expr, -Val, KeepResult); + return; + } - case E_LOC_ABS: - /* Absolute: numeric address or const */ - g_subeqstatic (Flags, Expr->IVal, 0, Val); - break; + /* Get the flags */ + Flags = TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR | CF_CONST; + if (KeepResult != OA_NEED_NEW) { + /* No need to get the result */ + Flags |= CF_NOKEEP; + } - case E_LOC_GLOBAL: - /* Global variable */ - g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val); - break; + if (KeepResult == OA_NEED_OLD) { - case E_LOC_STATIC: - case E_LOC_LITERAL: - /* Static variable or literal in the literal pool */ - g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val); - break; + Flags |= CF_FORCECHAR; - case E_LOC_REGISTER: - /* Register variable */ - g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val); - break; + /* Push the address if needed */ + PushAddr (Expr); - case E_LOC_STACK: - /* Value on the stack */ - g_subeqlocal (Flags, Expr->IVal, Val); - break; + /* Save the original value */ + LoadExpr (CF_NONE, Expr); + g_save (Flags); - case E_LOC_PRIMARY: - /* The primary register */ - g_dec (Flags, Val); - break; + /* Do the decrement */ + g_dec (Flags | CF_CONST, Val); - case E_LOC_EXPR: - /* An expression in the primary register */ - g_subeqind (Flags, Expr->IVal, Val); - break; + /* Store the result back */ + Store (Expr, 0); + + /* Restore the original value */ + g_restore (Flags); + + } else { + + /* Check the location of the data */ + switch (ED_GetLoc (Expr)) { + + case E_LOC_ABS: + /* Absolute numeric addressed variable */ + g_subeqstatic (Flags, Expr->IVal, 0, Val); + break; + + case E_LOC_GLOBAL: + case E_LOC_STATIC: + case E_LOC_REGISTER: + case E_LOC_LITERAL: + case E_LOC_CODE: + /* Global variabl, static variable, register variable, pooled + ** literal or code label location. + */ + g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val); + break; + + case E_LOC_STACK: + /* Value on the stack */ + g_subeqlocal (Flags, Expr->IVal, Val); + break; + + case E_LOC_PRIMARY: + /* The primary register */ + g_dec (Flags, Val); + break; + + case E_LOC_EXPR: + /* An expression referenced in the primary register */ + g_subeqind (Flags, Expr->IVal, Val); + break; + + default: + Internal ("Invalid location in DoDec(): 0x%04X", ED_GetLoc (Expr)); + } - default: - Internal ("Invalid location in DeferredDec(): 0x%04X", ED_GetLoc (Expr)); } } @@ -564,11 +617,11 @@ void DoDeferred (unsigned Flags, ExprDesc* Expr) switch (Op->OpType) { case DOT_INC: - DeferredInc (&Op->Expr); + DoInc (&Op->Expr, OA_NEED_NONE); break; case DOT_DEC: - DeferredDec (&Op->Expr); + DoDec (&Op->Expr, OA_NEED_NONE); break; } xfree (&Op->Expr); @@ -595,6 +648,7 @@ void DoDeferred (unsigned Flags, ExprDesc* Expr) } + static unsigned FunctionArgList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) /* Parse the argument list of the called function and pass the arguments to it. ** Depending on several criteria, this may be done by just pushing into each @@ -724,14 +778,17 @@ static unsigned FunctionArgList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) if (IsClassStruct (Expr.Type)) { /* Use the replacement type */ Flags |= TypeOf (GetStructReplacementType (Expr.Type)); + + /* Load the value into the primary if it is not already there */ + LoadExpr (Flags, &Expr); } else { + /* Load the value into the primary if it is not already there */ + LoadExpr (CF_NONE, &Expr); + /* Use the type of the argument for the push */ Flags |= TypeOf (Expr.Type); } - /* Load the value into the primary if it is not already there */ - LoadExpr (Flags, &Expr); - /* If this is a fastcall function, don't push the last argument */ if ((CurTok.Tok == TOK_COMMA && NextTok.Tok != TOK_RPAREN) || !IsFastcall) { unsigned ArgSize = sizeofarg (Flags); @@ -1023,7 +1080,7 @@ static void Primary (ExprDesc* E) /* Floating point constant */ if (CurTok.Tok == TOK_FCONST) { - E->FVal = CurTok.FVal; + E->V.FVal = CurTok.FVal; E->Flags |= E_LOC_NONE | E_RTYPE_RVAL; E->Type = CurTok.Type; NextToken (); @@ -1198,9 +1255,9 @@ static void Primary (ExprDesc* E) case TOK_WCSCONST: /* String literal */ if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { - E->LVal = UseLiteral (CurTok.SVal); + E->V.LVal = UseLiteral (CurTok.SVal); } else { - E->LVal = CurTok.SVal; + E->V.LVal = CurTok.SVal; } E->Type = GetCharArrayType (GetLiteralSize (CurTok.SVal)); E->Flags = E_LOC_LITERAL | E_RTYPE_RVAL | E_ADDRESS_OF; @@ -1400,14 +1457,14 @@ static void StructRef (ExprDesc* Expr) */ BitOffs = Field.V.Offs * CHAR_BITS; if (SymIsBitField (&Field)) { - BitOffs += Field.V.B.BitOffs; + BitOffs += Field.Type->A.B.Offs; g_asr (Flags, BitOffs); /* Mask the value. This is unnecessary if the shift executed above ** moved only zeroes into the value. */ - if (BitOffs + Field.V.B.BitWidth != FieldSize * CHAR_BITS) { + if (BitOffs + Field.Type->A.B.Width != FieldSize * CHAR_BITS) { g_and (CF_INT | CF_UNSIGNED | CF_CONST, - (0x0001U << Field.V.B.BitWidth) - 1U); + (0x0001U << Field.Type->A.B.Width) - 1U); } } else { g_asr (Flags, BitOffs); @@ -1434,12 +1491,7 @@ static void StructRef (ExprDesc* Expr) ED_AddrExpr (Expr); } - /* Make the expression a bit field if necessary */ - if (SymIsBitField (&Field)) { - ED_MakeBitField (Expr, Field.V.B.BitOffs, Field.V.B.BitWidth); - } } - } @@ -1582,9 +1634,6 @@ void Store (ExprDesc* Expr, const Type* StoreType) static void PreInc (ExprDesc* Expr) /* Handle the preincrement operators */ { - unsigned Flags; - unsigned long Val; - /* Skip the operator token */ NextToken (); @@ -1600,49 +1649,8 @@ static void PreInc (ExprDesc* Expr) Error ("Increment of read-only variable"); } - /* Get the data type */ - Flags = TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR | CF_CONST; - - /* Get the increment value in bytes */ - Val = IsTypePtr (Expr->Type)? CheckedPSizeOf (Expr->Type) : 1; - - /* Check the location of the data */ - switch (ED_GetLoc (Expr)) { - - case E_LOC_ABS: - /* Absolute numeric addressed variable */ - g_addeqstatic (Flags, Expr->IVal, 0, Val); - break; - - case E_LOC_GLOBAL: - case E_LOC_STATIC: - case E_LOC_REGISTER: - case E_LOC_LITERAL: - case E_LOC_CODE: - /* Global variabl, static variable, register variable, pooled - ** literal or code label location. - */ - g_addeqstatic (Flags, Expr->Name, Expr->IVal, Val); - break; - - case E_LOC_STACK: - /* Value on the stack */ - g_addeqlocal (Flags, Expr->IVal, Val); - break; - - case E_LOC_PRIMARY: - /* The primary register */ - g_inc (Flags, Val); - break; - - case E_LOC_EXPR: - /* An expression referenced in the primary register */ - g_addeqind (Flags, Expr->IVal, Val); - break; - - default: - Internal ("Invalid location in PreInc(): 0x%04X", ED_GetLoc (Expr)); - } + /* Do the increment */ + DoInc (Expr, OA_NEED_NEW); /* Result is an expression, no reference */ ED_FinalizeRValLoad (Expr); @@ -1653,9 +1661,6 @@ static void PreInc (ExprDesc* Expr) static void PreDec (ExprDesc* Expr) /* Handle the predecrement operators */ { - unsigned Flags; - unsigned long Val; - /* Skip the operator token */ NextToken (); @@ -1671,49 +1676,8 @@ static void PreDec (ExprDesc* Expr) Error ("Decrement of read-only variable"); } - /* Get the data type */ - Flags = TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR | CF_CONST; - - /* Get the increment value in bytes */ - Val = IsTypePtr (Expr->Type)? CheckedPSizeOf (Expr->Type) : 1; - - /* Check the location of the data */ - switch (ED_GetLoc (Expr)) { - - case E_LOC_ABS: - /* Absolute numeric addressed variable */ - g_subeqstatic (Flags, Expr->IVal, 0, Val); - break; - - case E_LOC_GLOBAL: - case E_LOC_STATIC: - case E_LOC_REGISTER: - case E_LOC_LITERAL: - case E_LOC_CODE: - /* Global variabl, static variable, register variable, pooled - ** literal or code label location. - */ - g_subeqstatic (Flags, Expr->Name, Expr->IVal, Val); - break; - - case E_LOC_STACK: - /* Value on the stack */ - g_subeqlocal (Flags, Expr->IVal, Val); - break; - - case E_LOC_PRIMARY: - /* The primary register */ - g_dec (Flags, Val); - break; - - case E_LOC_EXPR: - /* An expression in the primary register */ - g_subeqind (Flags, Expr->IVal, Val); - break; - - default: - Internal ("Invalid location in PreDec(): 0x%04X", ED_GetLoc (Expr)); - } + /* Do the decrement */ + DoDec (Expr, OA_NEED_NEW); /* Result is an expression, no reference */ ED_FinalizeRValLoad (Expr); @@ -1724,7 +1688,7 @@ static void PreDec (ExprDesc* Expr) static void PostInc (ExprDesc* Expr) /* Handle the postincrement operator */ { - unsigned Flags, Loc; + unsigned Flags; NextToken (); @@ -1748,34 +1712,17 @@ static void PostInc (ExprDesc* Expr) */ /* Emit smaller code if a char variable is at a constant location */ - if ((Flags & CF_CHAR) == CF_CHAR && ED_IsLocConst (Expr)) { + if ((Flags & CF_TYPEMASK) == CF_CHAR && ED_IsLocConst (Expr) && !IsTypeBitField (Expr->Type)) { LoadExpr (CF_NONE, Expr); AddCodeLine ("inc %s", ED_GetLabelName (Expr, 0)); } else { - Loc = ED_GetLoc (Expr); - if (Loc == E_LOC_PRIMARY || Loc == E_LOC_EXPR) { - /* Push the address if needed */ - PushAddr (Expr); + if (ED_IsLocPrimaryOrExpr (Expr)) { - /* Fetch the value and save it (since it's the result of the expression) */ - LoadExpr (CF_NONE, Expr); - g_save (Flags | CF_FORCECHAR); - - /* If we have a pointer expression, increment by the size of the type */ - if (IsTypePtr (Expr->Type)) { - g_inc (Flags | CF_CONST | CF_FORCECHAR, CheckedSizeOf (Expr->Type + 1)); - } else { - g_inc (Flags | CF_CONST | CF_FORCECHAR, 1); - } - - /* Store the result back */ - Store (Expr, 0); - - /* Restore the original value in the primary register */ - g_restore (Flags | CF_FORCECHAR); + /* Do the increment */ + DoInc (Expr, OA_NEED_OLD); } else { @@ -1787,6 +1734,11 @@ static void PostInc (ExprDesc* Expr) } } + /* Adjust the type of the expression */ + if (IsClassInt (Expr->Type)) { + Expr->Type = IntPromotion (Expr->Type); + } + /* The result is always an expression, no reference */ ED_FinalizeRValLoad (Expr); } @@ -1796,11 +1748,11 @@ static void PostInc (ExprDesc* Expr) static void PostDec (ExprDesc* Expr) /* Handle the postdecrement operator */ { - unsigned Flags, Loc; + unsigned Flags; NextToken (); - /* The expression to increment must be an lvalue */ + /* The expression to decrement must be an lvalue */ if (!ED_IsLVal (Expr)) { Error ("Invalid lvalue"); return; @@ -1815,34 +1767,17 @@ static void PostDec (ExprDesc* Expr) Flags = TypeOf (Expr->Type); /* Emit smaller code if a char variable is at a constant location */ - if ((Flags & CF_CHAR) == CF_CHAR && ED_IsLocConst (Expr)) { + if ((Flags & CF_TYPEMASK) == CF_CHAR && ED_IsLocConst (Expr) && !IsTypeBitField (Expr->Type)) { LoadExpr (CF_NONE, Expr); AddCodeLine ("dec %s", ED_GetLabelName (Expr, 0)); } else { - Loc = ED_GetLoc (Expr); - if (Loc == E_LOC_PRIMARY || Loc == E_LOC_EXPR) { - /* Push the address if needed */ - PushAddr (Expr); + if (ED_IsLocPrimaryOrExpr (Expr)) { - /* Fetch the value and save it (since it's the result of the expression) */ - LoadExpr (CF_NONE, Expr); - g_save (Flags | CF_FORCECHAR); - - /* If we have a pointer expression, increment by the size of the type */ - if (IsTypePtr (Expr->Type)) { - g_dec (Flags | CF_CONST | CF_FORCECHAR, CheckedSizeOf (Expr->Type + 1)); - } else { - g_dec (Flags | CF_CONST | CF_FORCECHAR, 1); - } - - /* Store the result back */ - Store (Expr, 0); - - /* Restore the original value in the primary register */ - g_restore (Flags | CF_FORCECHAR); + /* Do the decrement */ + DoDec (Expr, OA_NEED_OLD); } else { @@ -1854,6 +1789,11 @@ static void PostDec (ExprDesc* Expr) } } + /* Adjust the type of the expression */ + if (IsClassInt (Expr->Type)) { + Expr->Type = IntPromotion (Expr->Type); + } + /* The result is always an expression, no reference */ ED_FinalizeRValLoad (Expr); } @@ -1863,8 +1803,6 @@ static void PostDec (ExprDesc* Expr) static void UnaryOp (ExprDesc* Expr) /* Handle unary -/+ and ~ */ { - unsigned Flags; - /* Remember the operator token and skip it */ token_t Tok = CurTok.Tok; NextToken (); @@ -1888,15 +1826,24 @@ static void UnaryOp (ExprDesc* Expr) default: Internal ("Unexpected token: %d", Tok); } + /* Adjust the type of the expression */ + Expr->Type = IntPromotion (Expr->Type); + /* Limit the calculated value to the range of its type */ LimitExprValue (Expr); } else { + unsigned Flags; + /* Value is not constant */ LoadExpr (CF_NONE, Expr); - /* Adjust the type of the value */ - Flags = g_typeadjust (TypeOf (Expr->Type), TypeOf (type_int) | CF_CONST); + /* Adjust the type of the expression */ + Expr->Type = IntPromotion (Expr->Type); + TypeConversion (Expr, Expr->Type); + + /* Get code generation flags */ + Flags = TypeOf (Expr->Type); /* Handle the operation */ switch (Tok) { @@ -1909,9 +1856,6 @@ static void UnaryOp (ExprDesc* Expr) /* The result is an rvalue in the primary */ ED_FinalizeRValLoad (Expr); } - - /* Adjust the type of the expression */ - Expr->Type = IntPromotion (Expr->Type); } @@ -2003,13 +1947,13 @@ void hie10 (ExprDesc* Expr) if (!IsTypeFunc (Expr->Type) && !IsTypeArray (Expr->Type)) { if (ED_IsRVal (Expr)) { Error ("Illegal address"); - break; + /* Continue anyway, just to avoid further warnings */ } - if (ED_IsBitField (Expr)) { + if (IsTypeBitField (Expr->Type)) { Error ("Cannot take address of bit-field"); - /* Do it anyway, just to avoid further warnings */ - ED_DisBitField (Expr); + /* Continue anyway, just to avoid further warnings */ + Expr->Type = GetUnderlyingType (Expr->Type); } /* The & operator yields an rvalue address */ ED_AddrExpr (Expr); @@ -2034,7 +1978,7 @@ void hie10 (ExprDesc* Expr) ED_Init (&Uneval); ED_MarkForUneval (&Uneval); hie10 (&Uneval); - if (ED_IsBitField (&Uneval)) { + if (IsTypeBitField (Uneval.Type)) { Error ("Cannot apply 'sizeof' to bit-field"); Size = 0; } else { @@ -2536,6 +2480,8 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ /* Determine the signedness of the operands */ int LeftSigned = IsSignSigned (Expr->Type); int RightSigned = IsSignSigned (Expr2.Type); + int CmpSigned = IsClassInt (Expr->Type) && IsClassInt (Expr2.Type) && + IsSignSigned (ArithmeticConvert (Expr->Type, Expr2.Type)); /* If the right hand side is constant, and the generator function ** expects the lhs in the primary, remove the push of the primary @@ -2630,6 +2576,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ */ flags |= (CF_CHAR | CF_FORCECHAR); if (!LeftSigned || !RightSigned) { + CmpSigned = 0; flags |= CF_UNSIGNED; } @@ -2644,10 +2591,15 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ flags |= CF_FORCECHAR; } if (!LeftSigned || !RightSigned) { + CmpSigned = 0; flags |= CF_UNSIGNED; } } else { unsigned rtype = TypeOf (Expr2.Type) | (flags & CF_CONST); + if (CmpSigned) { + ltype &= ~CF_UNSIGNED; + rtype &= ~CF_UNSIGNED; + } flags |= g_typeadjust (ltype, rtype); } @@ -2655,7 +2607,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ ** constant, we may be able to change the compares to something more ** effective. */ - if ((!LeftSigned || !RightSigned) && rconst) { + if (!CmpSigned && rconst) { switch (Tok) { @@ -4121,248 +4073,6 @@ static void hieQuest (ExprDesc* Expr) -static void opeq (const GenDesc* Gen, ExprDesc* Expr, const char* Op) -/* Process "op=" operators. */ -{ - unsigned flags; - CodeMark Mark; - int MustScale; - - /* op= can only be used with lvalues */ - if (ED_IsRVal (Expr)) { - Error ("Invalid lvalue in assignment"); - return; - } - - /* The left side must not be const qualified */ - if (IsQualConst (Expr->Type)) { - Error ("Assignment to const"); - } - - /* There must be an integer or pointer on the left side */ - if (!IsClassInt (Expr->Type) && !IsTypePtr (Expr->Type)) { - Error ("Invalid left operand for binary operator '%s'", Op); - /* Continue. Wrong code will be generated, but the compiler won't - ** break, so this is the best error recovery. - */ - } - - /* Skip the operator token */ - NextToken (); - - /* Determine the type of the lhs */ - flags = TypeOf (Expr->Type); - MustScale = (Gen->Func == g_add || Gen->Func == g_sub) && IsTypePtr (Expr->Type); - - /* Get the lhs address on stack (if needed) */ - PushAddr (Expr); - - /* Fetch the lhs into the primary register if needed */ - LoadExpr (CF_NONE, Expr); - - /* Bring the lhs on stack */ - GetCodePos (&Mark); - g_push (flags, 0); - - ExprDesc Expr2; - ED_Init (&Expr2); - Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; - - /* Evaluate the rhs */ - MarkedExprWithCheck (hie1, &Expr2); - - /* The rhs must be an integer (or a float, but we don't support that yet */ - if (!IsClassInt (Expr2.Type)) { - Error ("Invalid right operand for binary operator '%s'", Op); - /* Continue. Wrong code will be generated, but the compiler won't - ** break, so this is the best error recovery. - */ - } - - /* Check for a constant expression */ - if (ED_IsConstAbs (&Expr2) && ED_CodeRangeIsEmpty (&Expr2)) { - /* The resulting value is a constant. If the generator has the NOPUSH - ** flag set, don't push the lhs. - */ - if (Gen->Flags & GEN_NOPUSH) { - RemoveCode (&Mark); - } - if (MustScale) { - /* lhs is a pointer, scale rhs */ - Expr2.IVal *= CheckedSizeOf (Expr->Type+1); - } - - /* If the lhs is character sized, the operation may be later done - ** with characters. - */ - if (CheckedSizeOf (Expr->Type) == SIZEOF_CHAR) { - flags |= CF_FORCECHAR; - } - - /* Special handling for add and sub - some sort of a hack, but short code */ - if (Gen->Func == g_add) { - g_inc (flags | CF_CONST, Expr2.IVal); - } else if (Gen->Func == g_sub) { - g_dec (flags | CF_CONST, Expr2.IVal); - } else { - if (Expr2.IVal == 0) { - /* Check for div by zero/mod by zero */ - if (Gen->Func == g_div) { - Error ("Division by zero"); - } else if (Gen->Func == g_mod) { - Error ("Modulo operation with zero"); - } - } - Gen->Func (flags | CF_CONST, Expr2.IVal); - } - } else { - - /* rhs is not constant. Load into the primary */ - LoadExpr (CF_NONE, &Expr2); - if (MustScale) { - /* lhs is a pointer, scale rhs */ - g_scale (TypeOf (Expr2.Type), CheckedSizeOf (Expr->Type+1)); - } - - /* If the lhs is character sized, the operation may be later done - ** with characters. - */ - if (CheckedSizeOf (Expr->Type) == SIZEOF_CHAR) { - flags |= CF_FORCECHAR; - } - - /* Adjust the types of the operands if needed */ - Gen->Func (g_typeadjust (flags, TypeOf (Expr2.Type)), 0); - } - Store (Expr, 0); - ED_FinalizeRValLoad (Expr); -} - - - -static void addsubeq (const GenDesc* Gen, ExprDesc *Expr, const char* Op) -/* Process the += and -= operators */ -{ - ExprDesc Expr2; - unsigned lflags; - unsigned rflags; - int MustScale; - - ED_Init (&Expr2); - Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; - - /* We're currently only able to handle some addressing modes */ - if (ED_GetLoc (Expr) == E_LOC_EXPR || ED_GetLoc (Expr) == E_LOC_PRIMARY) { - /* Use generic routine */ - opeq (Gen, Expr, Op); - return; - } - - /* We must have an lvalue */ - if (ED_IsRVal (Expr)) { - Error ("Invalid lvalue in assignment"); - return; - } - - /* The left side must not be const qualified */ - if (IsQualConst (Expr->Type)) { - Error ("Assignment to const"); - } - - /* There must be an integer or pointer on the left side */ - if (!IsClassInt (Expr->Type) && !IsTypePtr (Expr->Type)) { - Error ("Invalid left operand for binary operator '%s'", Op); - /* Continue. Wrong code will be generated, but the compiler won't - ** break, so this is the best error recovery. - */ - } - - /* Skip the operator */ - NextToken (); - - /* Check if we have a pointer expression and must scale rhs */ - MustScale = IsTypePtr (Expr->Type); - - /* Initialize the code generator flags */ - lflags = 0; - rflags = 0; - - /* Evaluate the rhs. We expect an integer here, since float is not - ** supported - */ - hie1 (&Expr2); - if (!IsClassInt (Expr2.Type)) { - Error ("Invalid right operand for binary operator '%s'", Op); - /* Continue. Wrong code will be generated, but the compiler won't - ** break, so this is the best error recovery. - */ - } - - /* Setup the code generator flags */ - lflags |= TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR; - rflags |= TypeOf (Expr2.Type) | CF_FORCECHAR; - - if (ED_IsConstAbs (&Expr2)) { - /* The resulting value is a constant */ - rflags |= CF_CONST; - lflags |= CF_CONST; - - /* Scale it */ - if (MustScale) { - Expr2.IVal *= CheckedSizeOf (Indirect (Expr->Type)); - } - } else { - /* Not constant, load into the primary */ - LoadExpr (CF_NONE, &Expr2); - - /* Convert the type of the rhs to that of the lhs */ - g_typecast (lflags, rflags & ~CF_FORCECHAR); - - if (MustScale) { - /* lhs is a pointer, scale rhs */ - g_scale (TypeOf (Expr2.Type), CheckedSizeOf (Indirect (Expr->Type))); - } - } - - /* Output apropriate code depending on the location */ - switch (ED_GetLoc (Expr)) { - - case E_LOC_ABS: - case E_LOC_GLOBAL: - case E_LOC_STATIC: - case E_LOC_REGISTER: - case E_LOC_LITERAL: - case E_LOC_CODE: - /* Absolute numeric addressed variable, global variable, local - ** static variable, register variable, pooled literal or code - ** label location. - */ - if (Gen->Tok == TOK_PLUS_ASSIGN) { - g_addeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal); - } else { - g_subeqstatic (lflags, Expr->Name, Expr->IVal, Expr2.IVal); - } - break; - - case E_LOC_STACK: - /* Value on the stack */ - if (Gen->Tok == TOK_PLUS_ASSIGN) { - g_addeqlocal (lflags, Expr->IVal, Expr2.IVal); - } else { - g_subeqlocal (lflags, Expr->IVal, Expr2.IVal); - } - break; - - default: - Internal ("Invalid location in Store(): 0x%04X", ED_GetLoc (Expr)); - } - - /* Expression is an rvalue in the primary now */ - ED_FinalizeRValLoad (Expr); -} - - - void hie1 (ExprDesc* Expr) /* Parse first level of expression hierarchy. */ { @@ -4370,47 +4080,47 @@ void hie1 (ExprDesc* Expr) switch (CurTok.Tok) { case TOK_ASSIGN: - Assignment (Expr); + OpAssign (0, Expr, "="); break; case TOK_PLUS_ASSIGN: - addsubeq (&GenPASGN, Expr, "+="); + OpAddSubAssign (&GenPASGN, Expr, "+="); break; case TOK_MINUS_ASSIGN: - addsubeq (&GenSASGN, Expr, "-="); + OpAddSubAssign (&GenSASGN, Expr, "-="); break; case TOK_MUL_ASSIGN: - opeq (&GenMASGN, Expr, "*="); + OpAssign (&GenMASGN, Expr, "*="); break; case TOK_DIV_ASSIGN: - opeq (&GenDASGN, Expr, "/="); + OpAssign (&GenDASGN, Expr, "/="); break; case TOK_MOD_ASSIGN: - opeq (&GenMOASGN, Expr, "%="); + OpAssign (&GenMOASGN, Expr, "%="); break; case TOK_SHL_ASSIGN: - opeq (&GenSLASGN, Expr, "<<="); + OpAssign (&GenSLASGN, Expr, "<<="); break; case TOK_SHR_ASSIGN: - opeq (&GenSRASGN, Expr, ">>="); + OpAssign (&GenSRASGN, Expr, ">>="); break; case TOK_AND_ASSIGN: - opeq (&GenAASGN, Expr, "&="); + OpAssign (&GenAASGN, Expr, "&="); break; case TOK_XOR_ASSIGN: - opeq (&GenXOASGN, Expr, "^="); + OpAssign (&GenXOASGN, Expr, "^="); break; case TOK_OR_ASSIGN: - opeq (&GenOASGN, Expr, "|="); + OpAssign (&GenOASGN, Expr, "|="); break; default: diff --git a/src/cc65/expr.h b/src/cc65/expr.h index 4909815ee..841edcb62 100644 --- a/src/cc65/expr.h +++ b/src/cc65/expr.h @@ -28,6 +28,11 @@ #define SQP_KEEP_EAX 0x02U #define SQP_KEEP_EXPR 0x03U /* SQP_KEEP_TEST | SQP_KEEP_EAX */ +/* Generator attributes */ +#define GEN_NOPUSH 0x01 /* Don't push lhs */ +#define GEN_COMM 0x02 /* Operator is commutative */ +#define GEN_NOFUNC 0x04 /* Not allowed for function pointers */ + /*****************************************************************************/ @@ -36,6 +41,9 @@ +unsigned GlobalModeFlags (const ExprDesc* Expr); +/* Return the addressing mode flags for the given expression */ + void ExprWithCheck (void (*Func) (ExprDesc*), ExprDesc* Expr); /* Call an expression function with checks. */ diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index 1d4fd6872..3d7b7c384 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -56,30 +56,17 @@ ExprDesc* ED_Init (ExprDesc* Expr) /* Initialize an ExprDesc */ { - Expr->Sym = 0; Expr->Type = 0; Expr->Flags = E_NEED_EAX; Expr->Name = 0; + Expr->Sym = 0; Expr->IVal = 0; - Expr->FVal = FP_D_Make (0.0); - Expr->LVal = 0; - Expr->BitOffs = 0; - Expr->BitWidth = 0; + memset (&Expr->V, 0, sizeof (Expr->V)); return Expr; } -void ED_MakeBitField (ExprDesc* Expr, unsigned BitOffs, unsigned BitWidth) -/* Make this expression a bit field expression */ -{ - Expr->Flags |= E_BITFIELD; - Expr->BitOffs = BitOffs; - Expr->BitWidth = BitWidth; -} - - - #if !defined(HAVE_INLINE) int ED_IsLocQuasiConst (const ExprDesc* Expr) /* Return true if the expression is a constant location of some sort or on the @@ -231,12 +218,12 @@ int ED_GetStackOffs (const ExprDesc* Expr, int Offs) ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, const Type* Type) /* Replace Expr with an absolute const with the given value and type */ { - Expr->Sym = 0; Expr->Type = Type; Expr->Flags = E_LOC_NONE | E_RTYPE_RVAL | (Expr->Flags & E_MASK_KEEP_MAKE); Expr->Name = 0; + Expr->Sym = 0; Expr->IVal = Value; - Expr->FVal = FP_D_Make (0.0); + memset (&Expr->V, 0, sizeof (Expr->V)); return Expr; } @@ -245,12 +232,12 @@ ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, const Type* Type) ExprDesc* ED_MakeConstAbsInt (ExprDesc* Expr, long Value) /* Replace Expr with a constant integer expression with the given value */ { - Expr->Sym = 0; Expr->Type = type_int; Expr->Flags = E_LOC_NONE | E_RTYPE_RVAL | (Expr->Flags & E_MASK_KEEP_MAKE); Expr->Name = 0; + Expr->Sym = 0; Expr->IVal = Value; - Expr->FVal = FP_D_Make (0.0); + memset (&Expr->V, 0, sizeof (Expr->V)); return Expr; } @@ -264,7 +251,7 @@ ExprDesc* ED_MakeConstBool (ExprDesc* Expr, long Value) Expr->Flags = E_LOC_NONE | E_RTYPE_RVAL | (Expr->Flags & E_MASK_KEEP_MAKE); Expr->Name = 0; Expr->IVal = Value; - Expr->FVal = FP_D_Make (0.0); + memset (&Expr->V, 0, sizeof (Expr->V)); return Expr; } @@ -273,13 +260,13 @@ ExprDesc* ED_MakeConstBool (ExprDesc* Expr, long Value) ExprDesc* ED_FinalizeRValLoad (ExprDesc* Expr) /* Finalize the result of LoadExpr to be an rvalue in the primary register */ { - Expr->Sym = 0; - Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE | E_BITFIELD | E_ADDRESS_OF); + Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE | E_ADDRESS_OF); Expr->Flags &= ~E_CC_SET; Expr->Flags |= (E_LOC_PRIMARY | E_RTYPE_RVAL); + Expr->Sym = 0; Expr->Name = 0; Expr->IVal = 0; /* No offset */ - Expr->FVal = FP_D_Make (0.0); + memset (&Expr->V, 0, sizeof (Expr->V)); return Expr; } @@ -464,8 +451,8 @@ int ED_IsQuasiConstAddr (const ExprDesc* Expr) int ED_IsNullPtr (const ExprDesc* Expr) /* Return true if the given expression is a NULL pointer constant */ { - return (Expr->Flags & (E_MASK_LOC|E_MASK_RTYPE|E_BITFIELD)) == - (E_LOC_NONE|E_RTYPE_RVAL) && + return (Expr->Flags & (E_MASK_LOC|E_MASK_RTYPE)) == + (E_LOC_NONE|E_RTYPE_RVAL) && Expr->IVal == 0 && IsClassInt (Expr->Type); } @@ -503,7 +490,7 @@ void PrintExprDesc (FILE* F, ExprDesc* E) "Raw type: (unknown)\n"); } fprintf (F, "IVal: 0x%08lX\n", E->IVal); - fprintf (F, "FVal: %f\n", FP_D_ToFloat (E->FVal)); + fprintf (F, "FVal: %f\n", FP_D_ToFloat (E->V.FVal)); Flags = E->Flags; Sep = '('; @@ -558,11 +545,6 @@ void PrintExprDesc (FILE* F, ExprDesc* E) Flags &= ~E_LOC_CODE; Sep = ','; } - if (Flags & E_BITFIELD) { - fprintf (F, "%cE_BITFIELD", Sep); - Flags &= ~E_BITFIELD; - Sep = ','; - } if (Flags & E_NEED_TEST) { fprintf (F, "%cE_NEED_TEST", Sep); Flags &= ~E_NEED_TEST; diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index a46685b59..a1487a0bd 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -114,7 +114,6 @@ enum { E_LOC_QUASICONST = E_LOC_CONST | E_LOC_STACK, /* Expression type modifiers */ - E_BITFIELD = 0x0200, /* Expression is a bit-field */ E_ADDRESS_OF = 0x0400, /* Expression is the address of the lvalue */ /* lvalue/rvalue in C language's sense */ @@ -198,17 +197,15 @@ struct Literal; /* Describe the result of an expression */ typedef struct ExprDesc ExprDesc; struct ExprDesc { - struct SymEntry* Sym; /* Symbol table entry if known */ - const Type* Type; /* Type array of expression */ - unsigned Flags; + const Type* Type; /* C type of the expression */ + unsigned Flags; /* Properties of the expression */ uintptr_t Name; /* Name pointer or label number */ + struct SymEntry* Sym; /* Symbol table entry if any */ long IVal; /* Integer value if expression constant */ - Double FVal; /* Floating point value */ - struct Literal* LVal; /* Literal value */ - - /* Bit field stuff */ - unsigned BitOffs; /* Bit offset for bit fields */ - unsigned BitWidth; /* Bit width for bit fields */ + union { + Double FVal; /* Floating point value */ + struct Literal* LVal; /* Literal value */ + } V; /* Start and end of generated code */ CodeMark Start; @@ -331,29 +328,6 @@ int ED_IsLocQuasiConst (const ExprDesc* Expr); */ #endif -#if defined(HAVE_INLINE) -INLINE int ED_IsBitField (const ExprDesc* Expr) -/* Return true if the expression is a bit field */ -{ - return (Expr->Flags & E_BITFIELD) != 0; -} -#else -# define ED_IsBitField(Expr) (((Expr)->Flags & E_BITFIELD) != 0) -#endif - -#if defined(HAVE_INLINE) -INLINE void ED_DisBitField (ExprDesc* Expr) -/* Make the expression no longer a bit field */ -{ - Expr->Flags &= ~E_BITFIELD; -} -#else -# define ED_DisBitField(Expr) ((Expr)->Flags &= ~E_BITFIELD) -#endif - -void ED_MakeBitField (ExprDesc* Expr, unsigned BitOffs, unsigned BitWidth); -/* Make this expression a bit field expression */ - #if defined(HAVE_INLINE) INLINE void ED_RequireTest (ExprDesc* Expr) /* Mark the expression for a test. */ diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index 95617f596..a742087b7 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -124,38 +124,40 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) */ int AdjustBitField = 0; unsigned BitFieldFullWidthFlags = 0; - if (ED_IsBitField (Expr)) { - unsigned EndBit = Expr->BitOffs + Expr->BitWidth; - AdjustBitField = Expr->BitOffs != 0 || (EndBit != CHAR_BITS && EndBit != INT_BITS); + if ((Flags & CF_TYPEMASK) == 0) { + if (IsTypeBitField (Expr->Type)) { + unsigned EndBit = Expr->Type->A.B.Offs + Expr->Type->A.B.Width; + AdjustBitField = Expr->Type->A.B.Offs != 0 || (EndBit != CHAR_BITS && EndBit != INT_BITS); - /* TODO: This probably needs to be guarded by AdjustBitField when long bit-fields are - ** supported. - */ - Flags |= (EndBit <= CHAR_BITS) ? CF_CHAR : CF_INT; - if (IsSignUnsigned (Expr->Type)) { - Flags |= CF_UNSIGNED; - } - - /* Flags we need operate on the whole bit-field, without CF_FORCECHAR. */ - BitFieldFullWidthFlags = Flags; - - /* If we're adjusting, then only load a char (not an int) and do only char ops; - ** We will clear the high byte in the adjustment. CF_FORCECHAR does nothing if the - ** type is not CF_CHAR. - */ - if (AdjustBitField) { - /* If adjusting, then we're sign extending manually, so do everything unsigned - ** to make shifts faster. + /* TODO: This probably needs to be guarded by AdjustBitField when long bit-fields are + ** supported. */ - Flags |= CF_UNSIGNED | CF_FORCECHAR; - BitFieldFullWidthFlags |= CF_UNSIGNED; + Flags |= (EndBit <= CHAR_BITS) ? CF_CHAR : CF_INT; + if (IsSignUnsigned (Expr->Type)) { + Flags |= CF_UNSIGNED; + } + + /* Flags we need operate on the whole bit-field, without CF_FORCECHAR. */ + BitFieldFullWidthFlags = Flags; + + /* If we're adjusting, then only load a char (not an int) and do only char ops; + ** We will clear the high byte in the adjustment. CF_FORCECHAR does nothing if the + ** type is not CF_CHAR. + */ + if (AdjustBitField) { + /* If adjusting, then we're sign extending manually, so do everything unsigned + ** to make shifts faster. + */ + Flags |= CF_UNSIGNED | CF_FORCECHAR; + BitFieldFullWidthFlags |= CF_UNSIGNED; + } + } else { + /* If Expr is an incomplete ESY type, bail out */ + if (IsIncompleteESUType (Expr->Type)) { + return; + } + Flags |= TypeOf (Expr->Type); } - } else if ((Flags & CF_TYPEMASK) == 0) { - /* If Expr is an incomplete ESY type, bail out */ - if (IsIncompleteESUType (Expr->Type)) { - return; - } - Flags |= TypeOf (Expr->Type); } if (ED_YetToTest (Expr)) { @@ -254,13 +256,13 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) /* We always need to do something with the low byte, so there is no opportunity ** for optimization by skipping it. */ - CHECK (Expr->BitOffs < CHAR_BITS); + CHECK (Expr->Type->A.B.Offs < CHAR_BITS); if (ED_YetToTest (Expr)) { - g_testbitfield (Flags, Expr->BitOffs, Expr->BitWidth); + g_testbitfield (Flags, Expr->Type->A.B.Offs, Expr->Type->A.B.Width); } else { g_extractbitfield (Flags, BitFieldFullWidthFlags, IsSignSigned (Expr->Type), - Expr->BitOffs, Expr->BitWidth); + Expr->Type->A.B.Offs, Expr->Type->A.B.Width); } } diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index bdc7be006..37566a455 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -832,8 +832,8 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr) */ if (ED_IsLocLiteral (&Arg2.Expr) && IS_Get (&WritableStrings) == 0 && - GetLiteralSize (Arg2.Expr.LVal) == 1 && - GetLiteralStr (Arg2.Expr.LVal)[0] == '\0') { + GetLiteralSize (Arg2.Expr.V.LVal) == 1 && + GetLiteralStr (Arg2.Expr.V.LVal)[0] == '\0') { /* Drop the generated code so we have the first argument in the ** primary @@ -841,7 +841,7 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr) RemoveCode (&Arg1.Push); /* We don't need the literal any longer */ - ReleaseLiteral (Arg2.Expr.LVal); + ReleaseLiteral (Arg2.Expr.V.LVal); /* We do now have Arg1 in the primary. Load the first character from ** this string and cast to int. This is the function result. @@ -1232,10 +1232,10 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) if (ED_IsLocLiteral (&Arg) && IS_Get (&WritableStrings) == 0) { /* Constant string literal */ - ED_MakeConstAbs (Expr, GetLiteralSize (Arg.LVal) - 1, type_size_t); + ED_MakeConstAbs (Expr, GetLiteralSize (Arg.V.LVal) - 1, type_size_t); /* We don't need the literal any longer */ - ReleaseLiteral (Arg.LVal); + ReleaseLiteral (Arg.V.LVal); /* Bail out, no need for further improvements */ goto ExitPoint; diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 56d884bb6..bb87c7472 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -183,13 +183,6 @@ struct SymEntry { const Type* Type; /* Underlying type */ } E; - /* Data for bit fields */ - struct { - unsigned Offs; /* Byte offset into struct */ - unsigned BitOffs; /* Bit offset into storage unit */ - unsigned BitWidth; /* Width in bits */ - } B; - /* Data for functions */ struct { struct Segments* Seg; /* Segments for this function */ diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 4073a38bc..5d7bd1436 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -881,10 +881,8 @@ SymEntry* AddBitField (const char* Name, const Type* T, unsigned Offs, Entry = NewSymEntry (Name, SC_BITFIELD); /* Set the symbol attributes. Bit-fields are always integral types. */ - Entry->Type = TypeDup (T); - Entry->V.B.Offs = Offs; - Entry->V.B.BitOffs = BitOffs; - Entry->V.B.BitWidth = BitWidth; + Entry->Type = NewBitFieldType (T, BitOffs, BitWidth); + Entry->V.Offs = Offs; if (!SignednessSpecified) { /* int is treated as signed int everywhere except bit-fields; switch it to unsigned, @@ -896,8 +894,10 @@ SymEntry* AddBitField (const char* Name, const Type* T, unsigned Offs, */ CHECK ((Entry->Type->C & T_MASK_SIGN) == T_SIGN_SIGNED || IsTypeChar (Entry->Type)); - Entry->Type->C &= ~T_MASK_SIGN; - Entry->Type->C |= T_SIGN_UNSIGNED; + Entry->Type[0].C &= ~T_MASK_SIGN; + Entry->Type[0].C |= T_SIGN_UNSIGNED; + Entry->Type[1].C &= ~T_MASK_SIGN; + Entry->Type[1].C |= T_SIGN_UNSIGNED; } /* Add the entry to the symbol table */ diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index 8c9da3445..6052f4a84 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -278,6 +278,21 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) SetResult (Result, TC_STRICT_COMPATIBLE); } + /* Bit-fields are considered compatible if they have the same + ** signedness, bit-offset and bit-width. + */ + if (IsTypeBitField (lhs) || IsTypeBitField (rhs)) { + if (!IsTypeBitField (lhs) || + !IsTypeBitField (rhs) || + lhs->A.B.Offs != rhs->A.B.Offs || + lhs->A.B.Width != rhs->A.B.Width) { + SetResult (Result, TC_INCOMPATIBLE); + } + if (LeftType != RightType) { + SetResult (Result, TC_STRICT_COMPATIBLE); + } + } + /* If the underlying types are not identical, the types are incompatible */ if (LeftType != RightType) { SetResult (Result, TC_INCOMPATIBLE); diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 16f173cc4..a7528a2f8 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -83,11 +83,16 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) /* Get the sizes of the types. Since we've excluded void types, checking ** for known sizes makes sense here. */ - if (ED_IsBitField (Expr)) { - OldBits = Expr->BitWidth; + if (IsTypeBitField (OldType)) { + OldBits = OldType->A.B.Width; } else { OldBits = CheckedSizeOf (OldType) * CHAR_BITS; } + + /* If the new type is a bit-field, we use its underlying type instead */ + if (IsTypeBitField (NewType)) { + NewType = GetUnderlyingType (NewType); + } NewBits = CheckedSizeOf (NewType) * CHAR_BITS; /* lvalue? */ @@ -167,9 +172,6 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) ExitPoint: /* The expression has always the new type */ ReplaceType (Expr, NewType); - - /* Bit-fields are converted to integers */ - ED_DisBitField (Expr); } From d69e81cd66e7bb8ba307ea654a7c643fc8d3d4a6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 27 May 2021 15:44:52 +0800 Subject: [PATCH 0934/2710] Moved and improved test cases for Issue #1462. Fixed an old test case for unsigned enum bit-fields that are supposed to be int-promoted. --- test/{todo => val}/bug1462-2.c | 0 test/{todo => val}/bug1462-3.c | 18 +++---- test/val/bug1462-4.c | 85 ++++++++++++++++++++++++++++++++++ test/{todo => val}/bug1462.c | 0 test/val/enum-bitfield.c | 37 +++++++++++---- 5 files changed, 122 insertions(+), 18 deletions(-) rename test/{todo => val}/bug1462-2.c (100%) rename test/{todo => val}/bug1462-3.c (82%) create mode 100644 test/val/bug1462-4.c rename test/{todo => val}/bug1462.c (100%) diff --git a/test/todo/bug1462-2.c b/test/val/bug1462-2.c similarity index 100% rename from test/todo/bug1462-2.c rename to test/val/bug1462-2.c diff --git a/test/todo/bug1462-3.c b/test/val/bug1462-3.c similarity index 82% rename from test/todo/bug1462-3.c rename to test/val/bug1462-3.c index b75d568b9..12559b94f 100644 --- a/test/todo/bug1462-3.c +++ b/test/val/bug1462-3.c @@ -1,6 +1,6 @@ /* issue #1462 - Bit-fields are still broken */ -/* More testson "op= expression result value" that a naive fix might fail with */ +/* More tests on "op= expression result value" that a naive fix might fail with */ #include <stdio.h> @@ -27,26 +27,26 @@ void test1(void) T1 a = { 3, 3, 3, 3 }; int i; - i = a.a += a.b + a.c; - if (i != 1) { + i = a.a -= a.b + a.c; + if (i != -3 || a.a != -3) { ++failures1; } printf("i = %d, a.a = %d\n", i, a.a); - i = a.b *= -1; - if (i != 5 || a.b != 5) { + a.b = i = a.b / -1; + if (i != -3 || a.b != 5) { ++failures1; } printf("i = %d, a.b = %d\n", i, a.b); - i = a.c * -1; - if (i != -3) { + i = a.c = 0; + if (i != 0 || a.c != 0) { ++failures1; } printf("i = %d, a.c = %d\n", i, a.c); - i = a.d ^= -1; - if (i != 4 || a.d != 4) { + i = a.d /= -1; + if (i != 5 || a.d != 5) { ++failures1; } printf("i = %d, a.d = %d\n", i, a.d); diff --git a/test/val/bug1462-4.c b/test/val/bug1462-4.c new file mode 100644 index 000000000..f811ddbd6 --- /dev/null +++ b/test/val/bug1462-4.c @@ -0,0 +1,85 @@ + +/* issue #1462 - Bit-fields are still broken */ +/* More tests on "op= expression result value" that a naive fix might fail with */ + +#include <stdio.h> +#include <limits.h> + +#define SMALL_WIDTH 4 +#define LARGE_WIDTH (CHAR_BIT * sizeof (unsigned int)) + +typedef struct { + unsigned int a : SMALL_WIDTH; + unsigned int b : SMALL_WIDTH; + unsigned int c : SMALL_WIDTH; + unsigned int d : SMALL_WIDTH; +} T1; + +typedef struct { + unsigned int a : LARGE_WIDTH; + unsigned int b : LARGE_WIDTH; + unsigned int c : LARGE_WIDTH; + unsigned int d : LARGE_WIDTH; +} T2; + + +int failures1 = 0; +int failures2 = 0; + +void test1(void) +{ + T1 a = { 0, 0, 0, 0 }; + + printf("\nunsigned int : %d\n", SMALL_WIDTH); + if (!(~a.a < 0)) { + ++failures1; + } + printf("~a.a < 0 : %d\n", ~a.a < 0); + if (!(0 > ~a.b)) { + ++failures1; + } + printf("0 > ~a.b : %d\n",0 > ~a.b); + if (!(a.c > -1)) { + ++failures1; + } + printf("a.c > -1 : %d\n", a.c > -1); + if (!(-1 < a.d)) { + ++failures1; + } + printf("-1 < a.d : %d\n", -1 < a.d); + + printf("Failures: %d\n", failures1); +} + +void test2(void) +{ + T1 b = { 0, 0, 0, 0 }; + + printf("\nunsigned int : %d\n", LARGE_WIDTH); + if (!(~b.a < 0)) { + ++failures2; + } + printf("~b.a < 0 : %d\n", ~b.a < 0); + if (!(0 > ~b.b)) { + ++failures2; + } + printf("0 > ~b.b : %d\n", 0 > ~b.b); + if (!(b.c > -1)) { + ++failures2; + } + printf("b.c > -1 : %d\n", b.c > -1); + if (!(-1 < b.d)) { + ++failures2; + } + printf("-1 < b.d : %d\n", -1 < b.d); + + printf("Failures: %d\n", failures2); +} + +int main(void) +{ + test1(); + test2(); + return failures1 + failures2; +} + diff --git a/test/todo/bug1462.c b/test/val/bug1462.c similarity index 100% rename from test/todo/bug1462.c rename to test/val/bug1462.c diff --git a/test/val/enum-bitfield.c b/test/val/enum-bitfield.c index a942091c2..5669978c9 100644 --- a/test/val/enum-bitfield.c +++ b/test/val/enum-bitfield.c @@ -23,6 +23,7 @@ */ #include <stdio.h> +#include <limits.h> static unsigned char failures = 0; @@ -35,7 +36,7 @@ enum e10u { static struct enum_bitfield_uint { enum e10u x : 1; enum e10u y : 8; - enum e10u z : 16; + enum e10u z : CHAR_BIT * sizeof (enum e10u); } e10ubf = {0, E10U_200, E10U_1000}; static void test_enum_bitfield_uint(void) @@ -68,11 +69,11 @@ static void test_enum_bitfield_uint(void) failures++; } - /* Check signedness, should be unsigned. */ + /* Check signedness, should be signed. */ { long v = e10ubf.x - 2; - if (v < 0) { - printf ("Got negative v = %ld, expected large positive.\n", v); + if (v >= 0) { + printf ("Got non-negative v (= e10ubf.x - 2) = %ld, expected negative.\n", v); failures++; } } @@ -85,6 +86,15 @@ static void test_enum_bitfield_uint(void) printf ("Got e10ubf.z = %u, expected 1023.\n", e10ubf.z); failures++; } + + /* Check signedness, should be unsigned. */ + { + long v = e10ubf.z - 1024; + if (v < 0) { + printf ("Got negative v (= e10ubf.z - 1024) = %ld, expected positive.\n", v); + failures++; + } + } } /* Enum with underlying type signed int. */ @@ -97,7 +107,7 @@ enum e11i { static struct enum_bitfield_int { enum e11i x : 2; enum e11i y : 8; - enum e11i z : 16; + enum e11i z : CHAR_BIT * sizeof (enum e11i); } e11ibf = {E11I_M1, E11I_100, E11I_1000}; static void test_enum_bitfield_int(void) @@ -133,8 +143,8 @@ static void test_enum_bitfield_int(void) /* Check signedness, should be signed. */ { long v = e11ibf.x - 2; - if (v > 0) { - printf ("Got positive v = %ld, expected negative.\n", v); + if (v >= 0) { + printf ("Got non-negative v (= e11ibf.x - 2) = %ld, expected negative.\n", v); failures++; } } @@ -147,6 +157,15 @@ static void test_enum_bitfield_int(void) printf ("Got e11ibf.z = %d, expected 1023.\n", e11ibf.z); failures++; } + + /* Check signedness, should be signed. */ + { + long v = e11ibf.z - 1024; + if (v >= 0) { + printf ("Got non-negative v (= e11ibf.z - 1024) = %ld, expected negative.\n", v); + failures++; + } + } } /* Enum with underlying type unsigned char. */ @@ -157,7 +176,7 @@ enum e7uc { static struct enum_bitfield_uchar { enum e7uc x : 1; enum e7uc y : 4; - enum e7uc z : 8; + enum e7uc z : CHAR_BIT; } e7ucbf = {0, 10, E7UC_100}; static void test_enum_bitfield_uchar(void) @@ -212,7 +231,7 @@ enum e8sc { static struct enum_bitfield_char { enum e8sc x : 1; enum e8sc y : 4; - enum e8sc z : 8; + enum e8sc z : CHAR_BIT; } e8scbf = {0, 5, E8SC_100}; static void test_enum_bitfield_char(void) From 7d6541274d58a9bff7bdf1092b48b3644d960bad Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Wed, 9 Jun 2021 10:23:42 -0500 Subject: [PATCH 0935/2710] Changes to I/O access --- include/sym1.h | 77 ++++------- libsrc/sym1/bitio.s | 220 ------------------------------ libsrc/sym1/display.s | 126 +---------------- libsrc/sym1/read.s | 6 +- targettest/sym1/symDisplay.c | 255 +++++++++++++++++------------------ targettest/sym1/symHello.c | 3 +- targettest/sym1/symIO.c | 112 +++++++-------- targettest/sym1/symTiny.c | 3 +- 8 files changed, 219 insertions(+), 583 deletions(-) delete mode 100644 libsrc/sym1/bitio.s diff --git a/include/sym1.h b/include/sym1.h index 4fb66b251..bedaa7913 100644 --- a/include/sym1.h +++ b/include/sym1.h @@ -91,6 +91,30 @@ #define DISP_LOW_LEFT 0x10 // Lower left segment +/*****************************************************************************/ +/* Hardware */ +/*****************************************************************************/ + + + +#include <_6522.h> +#define VIA1 (*(struct __6522*)0xA000) // U25 +#define VIA2 (*(struct __6522*)0xA800) // U28 +#define VIA3 (*(struct __6522*)0xAC00) // U29 + + +struct _display { + unsigned char d0; // left-most seven-segment display + unsigned char d1; // second seven-segment display + unsigned char d2; // third seven-segment display + unsigned char d3; // fouth seven-segment display + unsigned char d4; // fifth seven-segment display + unsigned char d5; // sixth seven-segment display + unsigned char d6; // buffer byte to the right +}; +#define DISPLAY (*(struct _display*)0xA640) + + /*****************************************************************************/ /* Code */ @@ -98,55 +122,10 @@ -int __fastcall__ beep (void); // Beep sound -void __fastcall__ set_D0 (unsigned char); // Set display digit 0 -unsigned char __fastcall__ get_D0 (void); // Get value of display digit 0 -void __fastcall__ set_D1 (unsigned char); // Set display digit 1 -unsigned char __fastcall__ get_D1 (void); // Get value of display digit 1 -void __fastcall__ set_D2 (unsigned char); // Set display digit 2 -unsigned char __fastcall__ get_D2 (void); // Get value of display digit 2 -void __fastcall__ set_D3 (unsigned char); // Set display digit 3 -unsigned char __fastcall__ get_D3 (void); // Get value of display digit 3 -void __fastcall__ set_D4 (unsigned char); // Set display digit 4 -unsigned char __fastcall__ get_D4 (void); // Get value of display digit 4 -void __fastcall__ set_D5 (unsigned char); // Set display digit 5 -unsigned char __fastcall__ get_D5 (void); // Get value of display digit 5 -void __fastcall__ set_D6 (unsigned char); // Set byte to the right of display (leading buffer) -unsigned char __fastcall__ get_D6 (void); // Get value of memory byte to the right of display -void __fastcall__ fdisp (void); // Flash display - -int __fastcall__ loadt (int); // Read from tape (id) -int __fastcall__ dumpt (int, int, int); // Write to tape (id, start_addr, end_addr) - -void __fastcall__ set_DDR1A (unsigned char); // Set data direction register 1A (U25) -unsigned char __fastcall__ get_DDR1A (void); // Get value of data direction register 1A -void __fastcall__ set_IOR1A (unsigned char); // Set I/O register 1A -unsigned char __fastcall__ get_IOR1A (void); // Get value of I/O register 1A - -void __fastcall__ set_DDR1B (unsigned char); // Set data direction register 1B (U25) -unsigned char __fastcall__ get_DDR1B (void); // Get value of data direction register 1B -void __fastcall__ set_IOR1B (unsigned char); // Set I/O register 1B -unsigned char __fastcall__ get_IOR1B (void); // Get value of I/O register 1B - -void __fastcall__ set_DDR2A (unsigned char); // Set data direction register 2A (U28) -unsigned char __fastcall__ get_DDR2A (void); // Get value of data direction register 2A -void __fastcall__ set_IOR2A (unsigned char); // Set I/O register 2A -unsigned char __fastcall__ get_IOR2A (void); // Get value of I/O register 2A - -void __fastcall__ set_DDR2B (unsigned char); // Set data direction register 2B (U28) -unsigned char __fastcall__ get_DDR2B (void); // Get value of data direction register 2B -void __fastcall__ set_IOR2B (unsigned char); // Set I/O register 2B -unsigned char __fastcall__ get_IOR2B (void); // Get value of I/O register 2B - -void __fastcall__ set_DDR3A (unsigned char); // Set data direction register 3A (U29) -unsigned char __fastcall__ get_DDR3A (void); // Get value of data direction register 3A -void __fastcall__ set_IOR3A (unsigned char); // Set I/O register 3A -unsigned char __fastcall__ get_IOR3A (void); // Get value of I/O register 3A - -void __fastcall__ set_DDR3B (unsigned char); // Set data direction register 3B (U29) -unsigned char __fastcall__ get_DDR3B (void); // Get value of data direction register 3B -void __fastcall__ set_IOR3B (unsigned char); // Set I/O register 3B -unsigned char __fastcall__ get_IOR3B (void); // Get value of I/O register 3B +void beep (void); // Beep sound +void fdisp (void); // Flash display +int __fastcall__ loadt (unsigned char); // Read from tape (id) +int __fastcall__ dumpt (unsigned char, const void*, const void*); // Write to tape (id, start_addr, end_addr) diff --git a/libsrc/sym1/bitio.s b/libsrc/sym1/bitio.s deleted file mode 100644 index a61dd4800..000000000 --- a/libsrc/sym1/bitio.s +++ /dev/null @@ -1,220 +0,0 @@ -; -; Wayne Parham (wayne@parhamdata.com) -; -; void set_DDR1A (int value); -; int get_DDR1A (void); -; void set_IOR1A (int value); -; int get_IOR1A (void); -; void set_DDR1B (int value); -; int get_DDR1B (void); -; void set_IOR1B (int value); -; int get_IOR1B (void); -; void set_DDR2A (int value); -; int get_DDR2A (void); -; void set_IOR2A (int value); -; int get_IOR2A (void); -; void set_DDR2B (int value); -; int get_DDR2B (void); -; void set_IOR2B (int value); -; int get_IOR2B (void); -; void set_DDR3A (int value); -; int get_DDR3A (void); -; void set_IOR3A (int value); -; int get_IOR3A (void); -; void set_DDR3B (int value); -; int get_DDR3B (void); -; void set_IOR3B (int value); -; int get_IOR3B (void); -; - -.include "sym1.inc" - -.export _set_DDR1A, _get_DDR1A, _set_IOR1A, _get_IOR1A -.export _set_DDR1B, _get_DDR1B, _set_IOR1B, _get_IOR1B -.export _set_DDR2A, _get_DDR2A, _set_IOR2A, _get_IOR2A -.export _set_DDR2B, _get_DDR2B, _set_IOR2B, _get_IOR2B -.export _set_DDR3A, _get_DDR3A, _set_IOR3A, _get_IOR3A -.export _set_DDR3B, _get_DDR3B, _set_IOR3B, _get_IOR3B - -.segment "CODE" - -.proc _set_DDR1A: near - - sta DDR1A ; Write data direction register for port 1A - rts - -.endproc - -.proc _get_DDR1A: near - - lda DDR1A ; Read data direction register for port 1A - ldx #>$0000 ; - rts ; Return DDR1A - -.endproc - -.proc _set_IOR1A: near - - sta OR1A ; Write I/O register for port 1A - rts - -.endproc - -.proc _get_IOR1A: near - - lda OR1A ; Read I/O register for port 1A - ldx #>$0000 ; - rts ; Return OR1A - -.endproc - -.proc _set_DDR1B: near - - sta DDR1B ; Write data direction register for port 1B - rts - -.endproc - -.proc _get_DDR1B: near - - lda DDR1B ; Read data direction register for port 1B - ldx #>$0000 ; - rts ; Return DDR1B - -.endproc - -.proc _set_IOR1B: near - - sta OR1B ; Write I/O register for port 1B - rts - -.endproc - -.proc _get_IOR1B: near - - lda OR1B ; Read I/O register for port 1B - ldx #>$0000 ; - rts ; Return OR1B - -.endproc - -.proc _set_DDR2A: near - - sta DDR2A ; Write data direction register for port 2A - rts - -.endproc - -.proc _get_DDR2A: near - - lda DDR2A ; Read data direction register for port 2A - ldx #>$0000 ; - rts ; Return DDR2A - -.endproc - -.proc _set_IOR2A: near - - sta OR2A ; Write I/O register for port 2A - rts - -.endproc - -.proc _get_IOR2A: near - - lda OR2A ; Read I/O register for port 2A - ldx #>$0000 ; - rts ; Return OR2A - -.endproc - -.proc _set_DDR2B: near - - sta DDR2B ; Write data direction register for port 2B - rts - -.endproc - -.proc _get_DDR2B: near - - lda DDR2B ; Read data direction register for port 2B - ldx #>$0000 ; - rts ; Return DDR2B - -.endproc - -.proc _set_IOR2B: near - - sta OR2B ; Write I/O register for port 2B - rts - -.endproc - -.proc _get_IOR2B: near - - lda OR2B ; Read I/O register for port 2B - ldx #>$0000 ; - rts ; Return OR2B - -.endproc - -.proc _set_DDR3A: near - - sta DDR3A ; Write data direction register for port 3A - rts - -.endproc - -.proc _get_DDR3A: near - - lda DDR3A ; Read data direction register for port 3A - ldx #>$0000 ; - rts ; Return DDR3A - -.endproc - -.proc _set_IOR3A: near - - sta OR3A ; Write I/O register for port 3A - rts ; Return 0000 - -.endproc - -.proc _get_IOR3A: near - - lda OR3A ; Read I/O register for port 3A - ldx #>$0000 ; - rts ; Return OR3A - -.endproc - -.proc _set_DDR3B: near - - sta DDR3B ; Write data direction register for port 3B - rts - -.endproc - -.proc _get_DDR3B: near - - lda DDR3B ; Read data direction register for port 3B - ldx #>$0000 ; - rts ; Return DDR3B - -.endproc - -.proc _set_IOR3B: near - - sta OR3B ; Write I/O register for port 3B - rts - -.endproc - -.proc _get_IOR3B: near - - lda OR3B ; Read I/O register for port 3B - ldx #>$0000 ; - rts ; Return OR3B - -.endproc - diff --git a/libsrc/sym1/display.s b/libsrc/sym1/display.s index 9bef30c01..1d3b0abfa 100644 --- a/libsrc/sym1/display.s +++ b/libsrc/sym1/display.s @@ -1,29 +1,12 @@ ; ; Wayne Parham (wayne@parhamdata.com) ; -; int fdisp (void); -; void set_D0 (char segments); -; int get_D0 (void); -; void set_D1 (char segments); -; int get_D1 (void); -; void set_D2 (char segments); -; int get_D2 (void); -; void set_D3 (char segments); -; int get_D3 (void); -; void set_D4 (char segments); -; int get_D4 (void); -; void set_D5 (char segments); -; int get_D5 (void); -; void set_D6 (char segments); -; int get_D6 (void); +; void fdisp (void); ; .include "sym1.inc" -.export _fdisp, _set_D0, _get_D0 -.export _set_D1, _get_D1, _set_D2, _get_D2 -.export _set_D3, _get_D3, _set_D4, _get_D4 -.export _set_D5, _get_D5, _set_D6, _get_D6 +.export _fdisp .segment "CODE" @@ -34,108 +17,3 @@ .endproc -.proc _set_D0: near - - sta DISBUF0 ; Write Digit 0 - rts - -.endproc - -.proc _get_D0: near - - lda DISBUF0 ; Read Digit 0 - ldx #>$0000 ; - rts ; Return DISBUF0 - -.endproc - -.proc _set_D1: near - - sta DISBUF1 ; Write Digit 1 - rts - -.endproc - -.proc _get_D1: near - - lda DISBUF1 ; Read Digit 1 - ldx #>$0000 ; - rts - -.endproc - -.proc _set_D2: near - - sta DISBUF2 ; Write Digit 2 - rts - -.endproc - -.proc _get_D2: near - - lda DISBUF2 ; Read Digit 2 - ldx #>$0000 ; - rts ; Return DISBUF2 - -.endproc - -.proc _set_D3: near - - sta DISBUF3 ; Write Digit 3 - rts - -.endproc - -.proc _get_D3: near - - lda DISBUF3 ; Read Digit 3 - ldx #>$0000 ; - rts ; Return DISBUF3 - -.endproc - -.proc _set_D4: near - - sta DISBUF4 ; Write Digit 4 - rts - -.endproc - -.proc _get_D4: near - - lda DISBUF4 ; Read Digit 4 - ldx #>$0000 ; - rts ; Return DISBUF4 - -.endproc - -.proc _set_D5: near - - sta DISBUF5 ; Write Digit 5 - rts - -.endproc - -.proc _get_D5: near - - lda DISBUF5 ; Read Digit 5 - ldx #>$0000 ; - rts ; Return DISBUF5 - -.endproc - -.proc _set_D6: near - - sta DISBUF6 ; Write byte to the right of display - rts - -.endproc - -.proc _get_D6: near - - lda DISBUF6 ; Read byte to the right of display - ldx #>$0000 ; - rts ; Return DISBUF6 - -.endproc - diff --git a/libsrc/sym1/read.s b/libsrc/sym1/read.s index b876a5915..7ab88f1e8 100644 --- a/libsrc/sym1/read.s +++ b/libsrc/sym1/read.s @@ -29,7 +29,11 @@ begin: dec ptr2 beq done ; If buffer full, return getch: jsr INTCHR ; Get character using Monitor ROM call - and #$7F ; Clear hi bit + jsr OUTCHR ; Echo it + and #$7F ; Clear hi bit and check for '\r' + cmp #$0D + bne putch + lda #$0A ; Replace with '\n' and set count to zero putch: ldy #$00 ; Put char into return buffer sta (ptr1),y diff --git a/targettest/sym1/symDisplay.c b/targettest/sym1/symDisplay.c index 7b056c3ab..e97518c79 100644 --- a/targettest/sym1/symDisplay.c +++ b/targettest/sym1/symDisplay.c @@ -25,9 +25,8 @@ void main (void) { puts( "\nType a message (40 chars max) and press ENTER, please:\n" ); - while( (c != '\r') && (i < 41) ) { + while( (c != '\n') && (i < 40) ) { c = getchar(); - putchar( c ); buffer[i] = c; i++; if( i == 40 ) { @@ -40,7 +39,6 @@ void main (void) { while( z == 0 ) { puts( "\n\nHow many times (0 for forever) to repeat?" ); c = getchar(); - putchar( c ); if( (c >= '0') && (c <= '9') ) { // between 1 and 9 loops allowed z = 1; // a number was pressed t = c - '0'; // convert char to int @@ -59,14 +57,13 @@ void main (void) { putchar( '\r' ); // Send CR to console - - set_D0( DISP_SPACE ); // Clear the display - set_D1( DISP_SPACE ); - set_D2( DISP_SPACE ); - set_D3( DISP_SPACE ); - set_D4( DISP_SPACE ); - set_D5( DISP_SPACE ); - set_D6( DISP_SPACE ); + DISPLAY.d0 = DISP_SPACE; // Clear the display + DISPLAY.d1 = DISP_SPACE; + DISPLAY.d2 = DISP_SPACE; + DISPLAY.d3 = DISP_SPACE; + DISPLAY.d4 = DISP_SPACE; + DISPLAY.d5 = DISP_SPACE; + DISPLAY.d6 = DISP_SPACE; for( d = 0; d < flashes ; d++ ) { fdisp(); // Display @@ -78,247 +75,247 @@ void main (void) { switch( buffer[l] ) { // Put the typed charaters case '1': // into the display buffer - set_D6( DISP_1 ); // one at a time + DISPLAY.d6 = DISP_1; // one at a time break; case '2': - set_D6( DISP_2 ); + DISPLAY.d6 = DISP_2; break; case '3': - set_D6( DISP_3 ); + DISPLAY.d6 = DISP_3; break; case '4': - set_D6( DISP_4 ); + DISPLAY.d6 = DISP_4; break; case '5': - set_D6( DISP_5 ); + DISPLAY.d6 = DISP_5; break; case '6': - set_D6( DISP_6 ); + DISPLAY.d6 = DISP_6; break; case '7': - set_D6( DISP_7 ); + DISPLAY.d6 = DISP_7; break; case '8': - set_D6( DISP_8 ); + DISPLAY.d6 = DISP_8; break; case '9': - set_D6( DISP_9 ); + DISPLAY.d6 = DISP_9; break; case '0': - set_D6( DISP_0 ); + DISPLAY.d6 = DISP_0; break; case 'A': - set_D6( DISP_A ); + DISPLAY.d6 = DISP_A; break; case 'a': - set_D6( DISP_A ); + DISPLAY.d6 = DISP_A; break; case 'B': - set_D6( DISP_b ); + DISPLAY.d6 = DISP_b; break; case 'b': - set_D6( DISP_b ); + DISPLAY.d6 = DISP_b; break; case 'C': - set_D6( DISP_C ); + DISPLAY.d6 = DISP_C; break; case 'c': - set_D6( DISP_c ); + DISPLAY.d6 = DISP_c; break; case 'D': - set_D6( DISP_d ); + DISPLAY.d6 = DISP_d; break; case 'd': - set_D6( DISP_d ); + DISPLAY.d6 = DISP_d; break; case 'E': - set_D6( DISP_E ); + DISPLAY.d6 = DISP_E; break; case 'e': - set_D6( DISP_e ); + DISPLAY.d6 = DISP_e; break; case 'F': - set_D6( DISP_F ); + DISPLAY.d6 = DISP_F; break; case 'f': - set_D6( DISP_F ); + DISPLAY.d6 = DISP_F; break; case 'G': - set_D6( DISP_G ); + DISPLAY.d6 = DISP_G; break; case 'g': - set_D6( DISP_g ); + DISPLAY.d6 = DISP_g; break; case 'H': - set_D6( DISP_H ); + DISPLAY.d6 = DISP_H; break; case 'h': - set_D6( DISP_h ); + DISPLAY.d6 = DISP_h; break; case 'I': - set_D6( DISP_I ); + DISPLAY.d6 = DISP_I; break; case 'i': - set_D6( DISP_i ); + DISPLAY.d6 = DISP_i; break; case 'J': - set_D6( DISP_J ); + DISPLAY.d6 = DISP_J; break; case 'j': - set_D6( DISP_J ); + DISPLAY.d6 = DISP_J; break; case 'K': - set_D6( DISP_K ); + DISPLAY.d6 = DISP_K; break; case 'k': - set_D6( DISP_K ); + DISPLAY.d6 = DISP_K; break; case 'L': - set_D6( DISP_L ); + DISPLAY.d6 = DISP_L; break; case 'l': - set_D6( DISP_L ); + DISPLAY.d6 = DISP_L; break; case 'M': - set_D0( get_D1() ); - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( DISP_M_1 ); - set_D6( DISP_M_2 ); + DISPLAY.d0 = DISPLAY.d1; + DISPLAY.d1 = DISPLAY.d2; + DISPLAY.d2 = DISPLAY.d3; + DISPLAY.d3 = DISPLAY.d4; + DISPLAY.d4 = DISPLAY.d5; + DISPLAY.d5 = DISP_M_1; + DISPLAY.d6 = DISP_M_2; break; case 'm': - set_D0( get_D1() ); - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( DISP_M_1 ); - set_D6( DISP_M_2 ); + DISPLAY.d0 = DISPLAY.d1; + DISPLAY.d1 = DISPLAY.d2; + DISPLAY.d2 = DISPLAY.d3; + DISPLAY.d3 = DISPLAY.d4; + DISPLAY.d4 = DISPLAY.d5; + DISPLAY.d5 = DISP_M_1; + DISPLAY.d6 = DISP_M_2; break; case 'N': - set_D6( DISP_n ); + DISPLAY.d6 = DISP_n; break; case 'n': - set_D6( DISP_n ); + DISPLAY.d6 = DISP_n; break; case 'O': - set_D6( DISP_O ); + DISPLAY.d6 = DISP_O; break; case 'o': - set_D6( DISP_o ); + DISPLAY.d6 = DISP_o; break; case 'P': - set_D6( DISP_P ); + DISPLAY.d6 = DISP_P; break; case 'p': - set_D6( DISP_P ); + DISPLAY.d6 = DISP_P; break; case 'Q': - set_D6( DISP_q ); + DISPLAY.d6 = DISP_q; break; case 'q': - set_D6( DISP_q ); + DISPLAY.d6 = DISP_q; break; case 'R': - set_D6( DISP_r ); + DISPLAY.d6 = DISP_r; break; case 'r': - set_D6( DISP_r ); + DISPLAY.d6 = DISP_r; break; case 'S': - set_D6( DISP_S ); + DISPLAY.d6 = DISP_S; break; case 's': - set_D6( DISP_S ); + DISPLAY.d6 = DISP_S; break; case 'T': - set_D6( DISP_t ); + DISPLAY.d6 = DISP_t; break; case 't': - set_D6( DISP_t ); + DISPLAY.d6 = DISP_t; break; case 'U': - set_D6( DISP_U ); + DISPLAY.d6 = DISP_U; break; case 'u': - set_D6( DISP_u ); + DISPLAY.d6 = DISP_u; break; case 'V': - set_D0( get_D1() ); - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( DISP_V_1 ); - set_D6( DISP_V_2 ); + DISPLAY.d0 = DISPLAY.d1; + DISPLAY.d1 = DISPLAY.d2; + DISPLAY.d2 = DISPLAY.d3; + DISPLAY.d3 = DISPLAY.d4; + DISPLAY.d4 = DISPLAY.d5; + DISPLAY.d5 = DISP_V_1; + DISPLAY.d6 = DISP_V_2; break; case 'v': - set_D0( get_D1() ); - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( DISP_V_1 ); - set_D6( DISP_V_2 ); + DISPLAY.d0 = DISPLAY.d1; + DISPLAY.d1 = DISPLAY.d2; + DISPLAY.d2 = DISPLAY.d3; + DISPLAY.d3 = DISPLAY.d4; + DISPLAY.d4 = DISPLAY.d5; + DISPLAY.d5 = DISP_V_1; + DISPLAY.d6 = DISP_V_2; break; case 'W': - set_D0( get_D1() ); - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( DISP_W_1 ); - set_D6( DISP_W_2 ); + DISPLAY.d0 = DISPLAY.d1; + DISPLAY.d1 = DISPLAY.d2; + DISPLAY.d2 = DISPLAY.d3; + DISPLAY.d3 = DISPLAY.d4; + DISPLAY.d4 = DISPLAY.d5; + DISPLAY.d5 = DISP_W_1; + DISPLAY.d6 = DISP_W_2; break; case 'w': - set_D0( get_D1() ); - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( DISP_W_1 ); - set_D6( DISP_W_2 ); + DISPLAY.d0 = DISPLAY.d1; + DISPLAY.d1 = DISPLAY.d2; + DISPLAY.d2 = DISPLAY.d3; + DISPLAY.d3 = DISPLAY.d4; + DISPLAY.d4 = DISPLAY.d5; + DISPLAY.d5 = DISP_W_1; + DISPLAY.d6 = DISP_W_2; break; case 'Y': - set_D6( DISP_Y ); + DISPLAY.d6 = DISP_Y; break; case 'y': - set_D6( DISP_Y ); + DISPLAY.d6 = DISP_Y; break; case 'Z': - set_D6( DISP_Z ); + DISPLAY.d6 = DISP_Z; break; case 'z': - set_D6( DISP_Z ); + DISPLAY.d6 = DISP_Z; break; case ' ': - set_D6( DISP_SPACE ); + DISPLAY.d6 = DISP_SPACE; break; case '.': - set_D6( DISP_PERIOD ); + DISPLAY.d6 = DISP_PERIOD; break; case '-': - set_D6( DISP_HYPHEN ); + DISPLAY.d6 = DISP_HYPHEN; break; case '\'': - set_D6( DISP_APOSTR ); + DISPLAY.d6 = DISP_APOSTR; break; case '"': - set_D6( DISP_APOSTR ); + DISPLAY.d6 = DISP_APOSTR; break; case '=': - set_D6( DISP_EQUAL ); + DISPLAY.d6 = DISP_EQUAL; break; case '_': - set_D6( DISP_BOTTOM ); + DISPLAY.d6 = DISP_BOTTOM; break; case '/': - set_D6( DISP_SLASH ); + DISPLAY.d6 = DISP_SLASH; break; case '\\': - set_D6( DISP_BACKSLASH ); + DISPLAY.d6 = DISP_BACKSLASH; break; default: displayable = 0; // Character not mapped @@ -328,12 +325,12 @@ void main (void) { putchar( buffer[l] ); // Send it to the console - set_D0( get_D1() ); // Scroll to the left - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( get_D6() ); + DISPLAY.d0 = DISPLAY.d1; // Scroll to the left + DISPLAY.d1 = DISPLAY.d2; + DISPLAY.d2 = DISPLAY.d3; + DISPLAY.d3 = DISPLAY.d4; + DISPLAY.d4 = DISPLAY.d5; + DISPLAY.d5 = DISPLAY.d6; for( d = 0; d < flashes ; d++ ) { fdisp(); // Display @@ -342,13 +339,13 @@ void main (void) { } for( e = 0; e < 6; e++ ) { // Gradually fill the - set_D0( get_D1() ); // display with spaces - set_D1( get_D2() ); - set_D2( get_D3() ); - set_D3( get_D4() ); - set_D4( get_D5() ); - set_D5( DISP_SPACE ); - set_D6( DISP_SPACE ); + DISPLAY.d0 = DISPLAY.d1; // display with spaces + DISPLAY.d1 = DISPLAY.d2; + DISPLAY.d2 = DISPLAY.d3; + DISPLAY.d3 = DISPLAY.d4; + DISPLAY.d4 = DISPLAY.d5; + DISPLAY.d5 = DISP_SPACE; + DISPLAY.d6 = DISP_SPACE; for( d = 0; d < flashes ; d++ ) { fdisp(); // Display } diff --git a/targettest/sym1/symHello.c b/targettest/sym1/symHello.c index 7fb86f04e..543e00cb2 100644 --- a/targettest/sym1/symHello.c +++ b/targettest/sym1/symHello.c @@ -23,9 +23,8 @@ void main(void) { } printf( "Type a line and press ENTER, please.\n\n" ); - while( c != '\r' ) { + while( c != '\n' ) { c = getchar(); - putchar( c ); } printf( "\n\nThanks!\n\n" ); diff --git a/targettest/sym1/symIO.c b/targettest/sym1/symIO.c index 67e898801..99b020be2 100644 --- a/targettest/sym1/symIO.c +++ b/targettest/sym1/symIO.c @@ -12,24 +12,24 @@ #include <string.h> void main(void) { - int ddr1a = 0x00; - int ior1a = 0x00; - int ddr1b = 0x00; - int ior1b = 0x00; - int ddr2a = 0x00; - int ior2a = 0x00; - int ddr2b = 0x00; - int ior2b = 0x00; - int ddr3a = 0x00; - int ior3a = 0x00; - int ddr3b = 0x00; - int ior3b = 0x00; - int l = 0x00; - int val = 0x00; - int going = 0x01; - int instr = 0x01; - char* vp = 0x00; - char cmd[20] = { 0x00 }; + unsigned char ddr1a = 0x00; + unsigned char ior1a = 0x00; + unsigned char ddr1b = 0x00; + unsigned char ior1b = 0x00; + unsigned char ddr2a = 0x00; + unsigned char ior2a = 0x00; + unsigned char ddr2b = 0x00; + unsigned char ior2b = 0x00; + unsigned char ddr3a = 0x00; + unsigned char ior3a = 0x00; + unsigned char ddr3b = 0x00; + unsigned char ior3b = 0x00; + unsigned char val = 0x00; + int going = 0x01; + int instr = 0x01; + int l = 0x00; + char* vp = 0x00; + char cmd[20] = { 0x00 }; while( going ) { @@ -38,18 +38,18 @@ void main(void) { putchar( '\n' ); } - ddr1a = get_DDR1A(); - ior1a = get_IOR1A(); - ddr1b = get_DDR1B(); - ior1b = get_IOR1B(); - ddr2a = get_DDR2A(); - ior2a = get_IOR2A(); - ddr2b = get_DDR2B(); - ior2b = get_IOR2B(); - ddr3a = get_DDR3A(); - ior3a = get_IOR3A(); - ddr3b = get_DDR3B(); - ior3b = get_IOR3B(); + ddr1a = VIA1.ddra; + ior1a = VIA1.pra; + ddr1b = VIA1.ddrb; + ior1b = VIA1.prb; + ddr2a = VIA2.ddra; + ior2a = VIA2.pra; + ddr2b = VIA2.ddrb; + ior2b = VIA2.prb; + ddr3a = VIA3.ddra; + ior3a = VIA3.pra; + ddr3b = VIA3.ddrb; + ior3b = VIA3.prb; puts( "================== Digital I/O Status ==================" ); puts( " Port1A Port1B Port2A Port2B Port3A Port3B" ); @@ -63,7 +63,7 @@ void main(void) { puts( "bits off and the bottom three on, type 'IOR2A 07'." ); puts( "Press ENTER without any command to see register values" ); puts( "without changing any of them. Type 'help' to see these" ); - puts( "instructions again and type 'stop' to end the program.\n"); + puts( "instructions again and type 'quit' to end the program.\n"); puts( "Available registers: DDR1A, IOR1A, DDR1B, IOR1B, DDR2A" ); puts( "IOR2A, DDR2B, IOR2B, DDR3A, IOR3A, DDR3B and IOR3B." ); instr = 0; @@ -74,7 +74,7 @@ void main(void) { fgets(cmd, sizeof(cmd)-1, stdin); cmd[strlen(cmd)-1] = '\0'; - if( strncasecmp(cmd, "stop", 4) == 0) { + if( strncasecmp(cmd, "quit", 4) == 0) { going = 0; } else if( strncasecmp(cmd, "help", 4) == 0) { @@ -83,85 +83,85 @@ void main(void) { else if( strncasecmp(cmd, "ddr1a", 5) == 0) { vp = strchr(cmd, ' '); if( vp ) { - val = atoi( vp ); - set_DDR1A( val ); + val = (unsigned char) strtol( vp, NULL, 0 ); + VIA1.ddra = val; } } else if( strncasecmp(cmd, "ior1a", 5) == 0) { vp = strchr(cmd, ' '); if( vp ) { - val = atoi( vp ); - set_IOR1A( val ); + val = (unsigned char) strtol( vp, NULL, 0 ); + VIA1.pra = val; } } else if( strncasecmp(cmd, "ddr1b", 5) == 0) { vp = strchr(cmd, ' '); if( vp ) { - val = atoi( vp ); - set_DDR1B( val ); + val = (unsigned char) strtol( vp, NULL, 0 ); + VIA1.ddrb = val; } } else if( strncasecmp(cmd, "ior1b", 5) == 0) { vp = strchr(cmd, ' '); if( vp ) { - val = atoi( vp ); - set_IOR1B( val ); + val = (unsigned char) strtol( vp, NULL, 0 ); + VIA1.prb = val; } } else if( strncasecmp(cmd, "ddr2a", 5) == 0) { vp = strchr(cmd, ' '); if( vp ) { - val = atoi( vp ); - set_DDR2A( val ); + val = (unsigned char) strtol( vp, NULL, 0 ); + VIA2.ddra = val; } } else if( strncasecmp(cmd, "ior2a", 5) == 0) { vp = strchr(cmd, ' '); if( vp ) { - val = atoi( vp ); - set_IOR2A( val ); + val = (unsigned char) strtol( vp, NULL, 0 ); + VIA2.pra = val; } } else if( strncasecmp(cmd, "ddr2b", 5) == 0) { vp = strchr(cmd, ' '); if( vp ) { - val = atoi( vp ); - set_DDR2B( val ); + val = (unsigned char) strtol( vp, NULL, 0 ); + VIA2.ddrb = val; } } else if( strncasecmp(cmd, "ior2b", 5) == 0) { vp = strchr(cmd, ' '); if( vp ) { - val = atoi( vp ); - set_IOR2B( val ); + val = (unsigned char) strtol( vp, NULL, 0 ); + VIA2.prb = val; } } else if( strncasecmp(cmd, "ddr3a", 5) == 0) { vp = strchr(cmd, ' '); if( vp ) { - val = atoi( vp ); - set_DDR3A( val ); + val = (unsigned char) strtol( vp, NULL, 0 ); + VIA3.ddra = val; } } else if( strncasecmp(cmd, "ior3a", 5) == 0) { vp = strchr(cmd, ' '); if( vp ) { - val = atoi( vp ); - set_IOR3A( val ); + val = (unsigned char) strtol( vp, NULL, 0 ); + VIA3.pra = val; } } else if( strncasecmp(cmd, "ddr3b", 5) == 0) { vp = strchr(cmd, ' '); if( vp ) { - val = atoi( vp ); - set_DDR3B( val ); + val = (unsigned char) strtol( vp, NULL, 0 ); + VIA3.ddrb = val; } } else if( strncasecmp(cmd, "ior3b", 5) == 0) { vp = strchr(cmd, ' '); if( vp ) { - val = atoi( vp ); - set_IOR3B( val ); + val = (unsigned char) strtol( vp, NULL, 0 ); + VIA3.prb = val; } } } diff --git a/targettest/sym1/symTiny.c b/targettest/sym1/symTiny.c index 1e9f86516..bbca4f9d1 100644 --- a/targettest/sym1/symTiny.c +++ b/targettest/sym1/symTiny.c @@ -26,9 +26,8 @@ void main(void) { } } - while( c != '\r' ) { + while( c != '\n' ) { c = getchar(); - putchar( c ); } puts( "\n\nThanks!\n" ); From 9a523abbfbb2c0939807e1e85fd1d1ef555b044d Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Thu, 10 Jun 2021 15:48:21 +0200 Subject: [PATCH 0936/2710] limits.h: provide PATH_MAX - stdio.h: define FILENAME_MAX to PATH_MAX - stdio.h, stdio.inc: increase FILENAME_MAX/PATH_MAX for Atari (For DOSes with subdirectory support.) --- asminc/stdio.inc | 2 +- include/limits.h | 12 ++++++++++++ include/stdio.h | 14 ++------------ 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/asminc/stdio.inc b/asminc/stdio.inc index c727e8d0b..feb061d70 100644 --- a/asminc/stdio.inc +++ b/asminc/stdio.inc @@ -44,7 +44,7 @@ EOF = -1 .if .defined(__APPLE2__) FILENAME_MAX = 64+1 .elseif .defined(__ATARI__) -FILENAME_MAX = 12+1 +FILENAME_MAX = 63+1 .elseif .defined(__LUNIX__) FILENAME_MAX = 80+1 .elseif .defined(__TELESTRAT__) diff --git a/include/limits.h b/include/limits.h index 23474c78c..8dbc83ff2 100644 --- a/include/limits.h +++ b/include/limits.h @@ -63,6 +63,18 @@ #define ULONG_MAX 4294967295UL +/* These defines that are platform dependent */ +#if defined(__APPLE2__) +# define PATH_MAX (64+1) +#elif defined(__ATARI__) +# define PATH_MAX (63+1) +#elif defined(__LUNIX__) +# define PATH_MAX (80+1) +#elif defined(__TELESTRAT__) +# define PATH_MAX (50+1) +#else +# define PATH_MAX (16+1) +#endif /* End of limits.h */ diff --git a/include/stdio.h b/include/stdio.h index 73dc05bdb..916affe71 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -40,6 +40,7 @@ #include <stddef.h> #include <stdarg.h> +#include <limits.h> @@ -64,18 +65,7 @@ extern FILE* stderr; #define SEEK_SET 2 #define TMP_MAX 256 -/* Standard defines that are platform dependent */ -#if defined(__APPLE2__) -# define FILENAME_MAX (64+1) -#elif defined(__ATARI__) -# define FILENAME_MAX (12+1) -#elif defined(__LUNIX__) -# define FILENAME_MAX (80+1) -#elif defined(__TELESTRAT__) -# define FILENAME_MAX (50+1) -#else -# define FILENAME_MAX (16+1) -#endif +#define FILENAME_MAX PATH_MAX #define L_tmpnam FILENAME_MAX From ae9101961e149d75d46440390a772b1de0ba0311 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Thu, 10 Jun 2021 16:06:37 +0200 Subject: [PATCH 0937/2710] stdio.inc,stdio.h: increase CBM PATH_MAX/FILENAME_MAX value to 256+1 --- asminc/stdio.inc | 2 ++ include/limits.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/asminc/stdio.inc b/asminc/stdio.inc index feb061d70..6eb458b62 100644 --- a/asminc/stdio.inc +++ b/asminc/stdio.inc @@ -45,6 +45,8 @@ EOF = -1 FILENAME_MAX = 64+1 .elseif .defined(__ATARI__) FILENAME_MAX = 63+1 +.elseif .defined(__CBM__) +FILENAME_MAX = 256+1 .elseif .defined(__LUNIX__) FILENAME_MAX = 80+1 .elseif .defined(__TELESTRAT__) diff --git a/include/limits.h b/include/limits.h index 8dbc83ff2..532f5104a 100644 --- a/include/limits.h +++ b/include/limits.h @@ -68,6 +68,8 @@ # define PATH_MAX (64+1) #elif defined(__ATARI__) # define PATH_MAX (63+1) +#elif defined(__CBM__) +# define PATH_MAX (256+1) #elif defined(__LUNIX__) # define PATH_MAX (80+1) #elif defined(__TELESTRAT__) From c90c3c9133cc561c015562390c869a982c603cad Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Thu, 10 Jun 2021 16:17:43 +0200 Subject: [PATCH 0938/2710] stdio.inc,stdio.h: set CBM PATH_MAX/FILENAME_MAX value to 255 Some parts of the runtime library cannot handle larger paths. --- asminc/stdio.inc | 2 +- include/limits.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/asminc/stdio.inc b/asminc/stdio.inc index 6eb458b62..426389de3 100644 --- a/asminc/stdio.inc +++ b/asminc/stdio.inc @@ -46,7 +46,7 @@ FILENAME_MAX = 64+1 .elseif .defined(__ATARI__) FILENAME_MAX = 63+1 .elseif .defined(__CBM__) -FILENAME_MAX = 256+1 +FILENAME_MAX = 255 .elseif .defined(__LUNIX__) FILENAME_MAX = 80+1 .elseif .defined(__TELESTRAT__) diff --git a/include/limits.h b/include/limits.h index 532f5104a..531c6bef2 100644 --- a/include/limits.h +++ b/include/limits.h @@ -69,7 +69,7 @@ #elif defined(__ATARI__) # define PATH_MAX (63+1) #elif defined(__CBM__) -# define PATH_MAX (256+1) +# define PATH_MAX (255) /* should be 256+1, see libsrc/common/_cmd.s why it's not */ #elif defined(__LUNIX__) # define PATH_MAX (80+1) #elif defined(__TELESTRAT__) From 7f1f0249f3d79a091f16b8b8462a25ae5c7f701c Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Thu, 10 Jun 2021 17:15:29 +0200 Subject: [PATCH 0939/2710] enumdevdir.c: allocate path name buffers from the heap. --- samples/enumdevdir.c | 46 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/samples/enumdevdir.c b/samples/enumdevdir.c index ce2dc99ec..97d69d8a6 100644 --- a/samples/enumdevdir.c +++ b/samples/enumdevdir.c @@ -16,31 +16,47 @@ #include <cc65.h> -void printdir (char *newdir) +int printdir (char *newdir) { - char olddir[FILENAME_MAX]; - char curdir[FILENAME_MAX]; + char *olddir; + char *curdir; DIR *dir; struct dirent *ent; char *subdirs = NULL; unsigned dirnum = 0; unsigned num; - getcwd (olddir, sizeof (olddir)); + olddir = malloc (FILENAME_MAX); + if (olddir != NULL) { + + perror ("cannot allocate memory"); + return 1; + } + + getcwd (olddir, FILENAME_MAX); if (chdir (newdir)) { /* If chdir() fails we just print the ** directory name - as done for files. */ printf (" Dir %s\n", newdir); - return; + free (olddir); + return 0; + } + + curdir = malloc (FILENAME_MAX); + if (curdir != NULL) { + + perror ("cannot allocate memory"); + return 1; } /* We call getcwd() in order to print the ** absolute pathname for a subdirectory. */ - getcwd (curdir, sizeof (curdir)); + getcwd (curdir, FILENAME_MAX); printf (" Dir %s:\n", curdir); + free (curdir); /* Calling opendir() always with "." avoids ** fiddling around with pathname separators. @@ -65,18 +81,28 @@ void printdir (char *newdir) closedir (dir); for (num = 0; num < dirnum; ++num) { - printdir (subdirs + FILENAME_MAX * num); + if (printdir (subdirs + FILENAME_MAX * num)) + break; } free (subdirs); chdir (olddir); + free (olddir); + return 0; } void main (void) { unsigned char device; - char devicedir[FILENAME_MAX]; + char *devicedir; + + devicedir = malloc (FILENAME_MAX); + if (devicedir != NULL) { + + perror ("cannot allocate memory"); + return; + } /* Calling getfirstdevice()/getnextdevice() does _not_ turn on the motor ** of a drive-type device and does _not_ check for a disk in the drive. @@ -88,7 +114,7 @@ void main (void) /* Calling getdevicedir() _does_ check for a (formatted) disk in a ** floppy-disk-type device and returns NULL if that check fails. */ - if (getdevicedir (device, devicedir, sizeof (devicedir))) { + if (getdevicedir (device, devicedir, FILENAME_MAX)) { printdir (devicedir); } else { printf (" N/A\n"); @@ -100,4 +126,6 @@ void main (void) if (doesclrscrafterexit ()) { getchar (); } + + free (devicedir); } From f3db74395d830d4f5b02573e37ee58ffea1f0c87 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Thu, 10 Jun 2021 18:11:45 +0200 Subject: [PATCH 0940/2710] fix last change and use stdbool.h --- samples/enumdevdir.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/samples/enumdevdir.c b/samples/enumdevdir.c index 97d69d8a6..bf1ff3bbb 100644 --- a/samples/enumdevdir.c +++ b/samples/enumdevdir.c @@ -11,12 +11,14 @@ #include <string.h> #include <unistd.h> #include <stdlib.h> +#include <stdbool.h> #include <device.h> #include <dirent.h> #include <cc65.h> -int printdir (char *newdir) +/* returns true for error, false for OK */ +bool printdir (char *newdir) { char *olddir; char *curdir; @@ -27,10 +29,9 @@ int printdir (char *newdir) unsigned num; olddir = malloc (FILENAME_MAX); - if (olddir != NULL) { - + if (olddir == NULL) { perror ("cannot allocate memory"); - return 1; + return true; } getcwd (olddir, FILENAME_MAX); @@ -41,14 +42,13 @@ int printdir (char *newdir) */ printf (" Dir %s\n", newdir); free (olddir); - return 0; + return false; } curdir = malloc (FILENAME_MAX); - if (curdir != NULL) { - + if (curdir == NULL) { perror ("cannot allocate memory"); - return 1; + return true; } /* We call getcwd() in order to print the @@ -88,7 +88,7 @@ int printdir (char *newdir) chdir (olddir); free (olddir); - return 0; + return false; } @@ -98,8 +98,7 @@ void main (void) char *devicedir; devicedir = malloc (FILENAME_MAX); - if (devicedir != NULL) { - + if (devicedir == NULL) { perror ("cannot allocate memory"); return; } From 25a35d6b59b718803d99bb058e6c5ee719e65573 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 9 Jun 2021 17:48:09 +0800 Subject: [PATCH 0941/2710] Fixed result type of certain operations, which was broken with the bit-field fix. --- src/cc65/assignment.c | 100 ++++-------------------------------------- src/cc65/expr.c | 22 +++------- 2 files changed, 14 insertions(+), 108 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index be6a8116f..05a6d9a96 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -155,7 +155,6 @@ void DoIncDecBitField (ExprDesc* Expr, long Val, unsigned KeepResult) unsigned Mask; unsigned ChunkFlags; const Type* ChunkType; - const Type* ResType; /* If the bit-field fits within one byte, do the following operations ** with bytes. @@ -190,11 +189,6 @@ void DoIncDecBitField (ExprDesc* Expr, long Val, unsigned KeepResult) /* Fetch the lhs into the primary register if needed */ LoadExpr (CF_NONE, Expr); - if (KeepResult == OA_NEED_OLD) { - /* Save the original expression value */ - g_save (Flags | CF_FORCECHAR); - } - /* Handle for add and sub */ if (Val > 0) { g_inc (Flags | CF_CONST, Val); @@ -205,11 +199,6 @@ void DoIncDecBitField (ExprDesc* Expr, long Val, unsigned KeepResult) /* Apply the mask */ g_and (Flags | CF_CONST, Mask); - if (KeepResult == OA_NEED_NEW) { - /* Save the result value */ - g_save (Flags | CF_FORCECHAR); - } - /* Do integral promotion without sign-extension if needed */ g_typecast (ChunkFlags | CF_UNSIGNED, Flags); @@ -229,6 +218,11 @@ void DoIncDecBitField (ExprDesc* Expr, long Val, unsigned KeepResult) /* Load the whole data chunk containing the bits to be changed */ LoadExpr (ChunkFlags, Expr); + if (KeepResult == OA_NEED_OLD) { + /* Save the original expression value */ + g_save (ChunkFlags | CF_FORCECHAR); + } + /* Get the bits that are not to be affected */ g_and (ChunkFlags | CF_CONST, ~(Mask << Expr->Type->A.B.Offs)); @@ -238,39 +232,10 @@ void DoIncDecBitField (ExprDesc* Expr, long Val, unsigned KeepResult) /* Store the whole data chunk containing the changed bits back */ Store (Expr, ChunkType); - /* Cache the expression result type */ - ResType = IntPromotion (Expr->Type); - - if (KeepResult != OA_NEED_NONE) { - /* Restore the expression result value */ - g_restore (Flags | CF_FORCECHAR); - - /* Promote if needed */ - if (KeepResult != OA_NEED_OLD) { - /* Do unsigned promotion first */ - g_typecast (TypeOf (ResType) | CF_UNSIGNED, Flags); - - /* Then do sign-extension */ - if (IsSignSigned (Expr->Type) && - Expr->Type->A.B.Width < CHAR_BITS * SizeOf (ResType)) { - /* The way is: - ** x = bits & bit_mask - ** m = 1 << (bit_width - 1) - ** r = (x ^ m) - m - ** Since we have already masked bits with bit_mask, we may skip the - ** first step. - */ - g_xor (Flags | CF_CONST, 1U << (Expr->Type->A.B.Width - 1U)); - g_dec ((Flags & ~CF_FORCECHAR) | CF_CONST, 1U << (Expr->Type->A.B.Width - 1U)); - } - } else { - /* Do promotion with sign-extension */ - g_typecast (TypeOf (ResType), Flags); - } + if (KeepResult == OA_NEED_OLD) { + /* Restore the original expression value */ + g_restore (ChunkFlags | CF_FORCECHAR); } - - /* Get the expression result type */ - Expr->Type = ResType; } @@ -285,10 +250,6 @@ static void OpAssignBitField (const GenDesc* Gen, ExprDesc* Expr, const char* Op unsigned Flags; unsigned ChunkFlags; const Type* ChunkType; - const Type* ResType; - - /* Cache the expression result type */ - ResType = IntPromotion (Expr->Type); ED_Init (&Expr2); Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; @@ -373,15 +334,6 @@ static void OpAssignBitField (const GenDesc* Gen, ExprDesc* Expr, const char* Op /* Store the whole data chunk containing the changed bits back */ Store (Expr, ChunkType); - /* Load the expression result value */ - if (IsSignSigned (Expr->Type)) { - unsigned SignExtensionMask = 1 << (Expr->Type->A.B.Width - 1); - Val = (Val^ SignExtensionMask) - SignExtensionMask; - } - ED_MakeConstAbs (Expr, Val, ResType); - LimitExprValue (Expr); - LoadExpr (CF_NONE, Expr); - /* Done */ goto Done; @@ -459,9 +411,6 @@ static void OpAssignBitField (const GenDesc* Gen, ExprDesc* Expr, const char* Op /* Apply the mask */ g_and (Flags | CF_CONST, Mask); - /* Save the expression result value */ - g_save (Flags); - /* Do integral promotion without sign-extension if needed */ g_typecast (ChunkFlags | CF_UNSIGNED, Flags); @@ -490,31 +439,8 @@ static void OpAssignBitField (const GenDesc* Gen, ExprDesc* Expr, const char* Op /* Store the whole data chunk containing the changed bits back */ Store (Expr, ChunkType); - /* Restore the expression result value */ - g_restore (Flags); - - /* Do unsigned promotion first */ - g_typecast (TypeOf (ResType) | CF_UNSIGNED, Flags); - - /* Then do sign-extension */ - if (IsSignSigned (Expr->Type) && - Expr->Type->A.B.Width < CHAR_BITS * SizeOf (ResType)) { - /* The way is: - ** x = bits & bit_mask - ** m = 1 << (bit_width - 1) - ** r = (x ^ m) - m - ** Since we have already masked bits with bit_mask, we may skip the - ** first step. - */ - g_xor (Flags | CF_CONST, 1U << (Expr->Type->A.B.Width - 1U)); - g_dec ((Flags & ~CF_FORCECHAR) | CF_CONST, 1U << (Expr->Type->A.B.Width - 1U)); - } - Done: - /* Get the expression result type */ - Expr->Type = ResType; - /* Value is in primary as an rvalue */ ED_FinalizeRValLoad (Expr); } @@ -643,11 +569,6 @@ static void OpAssignArithmetic (const GenDesc* Gen, ExprDesc* Expr, const char* /* Generate a store instruction */ Store (Expr, 0); - /* Get the expression result type */ - if (IsClassInt (Expr->Type)) { - Expr->Type = IntPromotion (Expr->Type); - } - /* Value is in primary as an rvalue */ ED_FinalizeRValLoad (Expr); } @@ -824,11 +745,6 @@ void OpAddSubAssign (const GenDesc* Gen, ExprDesc *Expr, const char* Op) Internal ("Invalid location in Store(): 0x%04X", ED_GetLoc (Expr)); } - /* Get the expression result type */ - if (IsClassInt (Expr->Type)) { - Expr->Type = IntPromotion (Expr->Type); - } - /* Expression is an rvalue in the primary now */ ED_FinalizeRValLoad (Expr); } diff --git a/src/cc65/expr.c b/src/cc65/expr.c index c45005d65..3b9307a37 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1726,17 +1726,12 @@ static void PostInc (ExprDesc* Expr) } else { - /* Fetch the value and use it (since it's the result of the expression) */ - LoadExpr (CF_NONE, Expr); - /* Defer the increment until after the value of this expression is used */ DeferInc (Expr); - } - } - /* Adjust the type of the expression */ - if (IsClassInt (Expr->Type)) { - Expr->Type = IntPromotion (Expr->Type); + /* Just return */ + return; + } } /* The result is always an expression, no reference */ @@ -1781,17 +1776,12 @@ static void PostDec (ExprDesc* Expr) } else { - /* Fetch the value and save it (since it's the result of the expression) */ - LoadExpr (CF_NONE, Expr); - /* Defer the decrement until after the value of this expression is used */ DeferDec (Expr); - } - } - /* Adjust the type of the expression */ - if (IsClassInt (Expr->Type)) { - Expr->Type = IntPromotion (Expr->Type); + /* Just return */ + return; + } } /* The result is always an expression, no reference */ From 31128d48099f869331b3b7308150b6c599921202 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 9 Jun 2021 18:43:25 +0800 Subject: [PATCH 0942/2710] Added test cases for result types of certain operations. --- test/val/opsize.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 test/val/opsize.c diff --git a/test/val/opsize.c b/test/val/opsize.c new file mode 100644 index 000000000..20c7f0511 --- /dev/null +++ b/test/val/opsize.c @@ -0,0 +1,33 @@ + +/* Test for result types of certain unary operations */ + +#include <stdio.h> + +signed char x; +struct S { + unsigned char a : 3; + unsigned int b : 3; +} s; + +int main(void) +{ + _Static_assert(sizeof (++x) == sizeof (char), "++x result should not have promoted type"); + _Static_assert(sizeof (--x) == sizeof (char), "--x result should not have promoted type"); + _Static_assert(sizeof (x++) == sizeof (char), "x++ result should not have promoted type"); + _Static_assert(sizeof (x--) == sizeof (char), "x-- result should not have promoted type"); + _Static_assert(sizeof (x=0) == sizeof (char), "x=0 result should not have promoted type"); + + _Static_assert(sizeof (+x) == sizeof (int), "+x result should have promoted type"); + _Static_assert(sizeof (-x) == sizeof (int), "-x result should have promoted type"); + _Static_assert(sizeof (~x) == sizeof (int), "~x result should have promoted type"); + + _Static_assert(sizeof (+s.a) == sizeof (int), "+s.a result should have promoted type"); + _Static_assert(sizeof (-s.a) == sizeof (int), "-s.a result should have promoted type"); + _Static_assert(sizeof (~s.a) == sizeof (int), "~s.a result should have promoted type"); + + _Static_assert(sizeof (+s.b) == sizeof (int), "+s.b result should have promoted type"); + _Static_assert(sizeof (-s.b) == sizeof (int), "-s.b result should have promoted type"); + _Static_assert(sizeof (~s.b) == sizeof (int), "~s.b result should have promoted type"); + + return 0; +} From 24f5bac8994a1a009ae46f5e4db2cdb927bee001 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Thu, 10 Jun 2021 16:07:39 -0500 Subject: [PATCH 0943/2710] Added BEL -> beep() functionality --- libsrc/sym1/read.s | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/libsrc/sym1/read.s b/libsrc/sym1/read.s index 7ab88f1e8..fe4990601 100644 --- a/libsrc/sym1/read.s +++ b/libsrc/sym1/read.s @@ -30,10 +30,13 @@ begin: dec ptr2 getch: jsr INTCHR ; Get character using Monitor ROM call jsr OUTCHR ; Echo it - and #$7F ; Clear hi bit and check for '\r' - cmp #$0D - bne putch - lda #$0A ; Replace with '\n' and set count to zero + and #$7F ; Clear hi bit + cmp #$07 ; Check for '\a' + bne chkcr ; ...if BEL character + jsr BEEP ; Make beep sound +chkcr: cmp #$0D ; Check for '\r' + bne putch ; ...if CR character + lda #$0A ; Replace with '\n' putch: ldy #$00 ; Put char into return buffer sta (ptr1),y From f636d4e634fd2553e4b40f0c39b6e845bb49b902 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 14 May 2021 19:12:59 -0400 Subject: [PATCH 0944/2710] Fixed the Creativision library's bios_playsound(). It was disabling interrupts permanently. --- libsrc/creativision/psg.s | 76 ++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 36 deletions(-) diff --git a/libsrc/creativision/psg.s b/libsrc/creativision/psg.s index 18f4ffe2e..c84f92f43 100644 --- a/libsrc/creativision/psg.s +++ b/libsrc/creativision/psg.s @@ -1,63 +1,67 @@ ; void __fastcall__ psg_outb (unsigned char b); -; void __fastcall__ psg_delay (unsigned char c); -; void __fastcall__ bios_playsound (const void *b, unsigned char c); +; void __fastcall__ psg_delay (unsigned char b); +; void __fastcall__ bios_playsound (void *a, unsigned char b); ; void psg_silence (void); - .export _psg_outb, _psg_silence, _psg_delay - .export _bios_playsound - .import popa + + .export _psg_outb, _psg_silence, _psg_delay + .export _bios_playsound + + .import popax + .include "creativision.inc" -_psg_outb: - ;* Let BIOS output the value - jmp $FE77 +songptr := $00 ; Points to current tune data +volptr := $04 ; Points to current volume table + +_psg_outb: + ;* Let BIOS output the value. + jmp $FE77 + _psg_silence: - - jmp $FE54 + jmp $FE54 _psg_delay: - tay -l1: lda #200 -l2: sbc #1 - bne l2 +l1: lda #200 +l2: sbc #1 + bne l2 - lda #200 -l3: sbc #1 - bne l3 + lda #200 +l3: sbc #1 + bne l3 dey - bne l1 - + bne l1 rts ;* Creativision Sound Player +;* Based on BIOS song player. ;* -;* Based on BIOS sound player. -;* Pass a pointer to a set of note triples, terminated with a tempo byte -;* and the len (max 255) +;* Pass a pointer to a set of note triples, terminated with a tempo byte; +;* and pass the length of the triples and tempo (max 255). +;* +;* Note: tune data must be stored backwards. _bios_playsound: - - pha ; Save Length Byte + php + pha ; Save tune length sei - lda #$D5 ; BIOS volume table low - sta $4 - lda #$FC ; BIOS volume table high - sta $5 + lda #<$FCD5 ; A BIOS volume table + ldx #>$FCD5 + sta volptr + stx volptr+1 - jsr popa ; Get Sound table pointer low - sta $0 - jsr popa ; Get Sound table pointer high - sta $1 + jsr popax ; Get tune array pointer + sta songptr + stx songptr+1 pla - tay ; Put length in Y - dey - php - jmp $FBED ; Let BIOS do it's thing + tay + dey ; Point to tempo byte + jmp $FBED ; Let BIOS do its thing From af3d4581d306f00c4a7f0aba62f9d79962a3ff79 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 30 May 2021 13:30:08 -0400 Subject: [PATCH 0945/2710] Moved Creativision's playsound() into a separate file. It won't waste space in a cartridge if it isn't used. --- asminc/creativision.inc | 47 ++++++++++++++++++--------------- libsrc/creativision/playsound.s | 40 ++++++++++++++++++++++++++++ libsrc/creativision/psg.s | 43 +++--------------------------- 3 files changed, 69 insertions(+), 61 deletions(-) create mode 100644 libsrc/creativision/playsound.s diff --git a/asminc/creativision.inc b/asminc/creativision.inc index 49d55a342..a0259ecce 100644 --- a/asminc/creativision.inc +++ b/asminc/creativision.inc @@ -5,21 +5,21 @@ ;** Screen SCREEN_ROWS = 24 SCREEN_COLS = 32 -SCREEN_PTR = $3A -CURSOR_X = $3C -CURSOR_Y = $3D +SCREEN_PTR := $3A +CURSOR_X := $3C +CURSOR_Y := $3D ;** VDP -VDP_DATA_R = $2000 -VDP_STATUS_R = $2001 -VDP_DATA_W = $3000 -VDP_CONTROL_W = $3001 +VDP_DATA_R := $2000 +VDP_STATUS_R := $2001 +VDP_DATA_W := $3000 +VDP_CONTROL_W := $3001 ;** PIA -PIA0_DATA = $1000 -PIA0_STATUS = $1001 -PIA1_DATA = $1002 -PIA1_STATUS = $1003 +PIA0_DATA := $1000 +PIA0_STATUS := $1001 +PIA1_DATA := $1002 +PIA1_STATUS := $1003 ;** General CH_VLINE = 33 @@ -30,11 +30,11 @@ CH_LLCORNER = 37 CH_LRCORNER = 38 ;** I/O (Zero-page variables) -ZP_KEYBOARD = $10 -ZP_JOY0_DIR = $11 -ZP_JOY1_DIR = $13 -ZP_JOY0_BUTTONS = $16 -ZP_JOY1_BUTTONS = $17 +ZP_KEYBOARD := $10 +ZP_JOY0_DIR := $11 +ZP_JOY1_DIR := $13 +ZP_JOY0_BUTTONS := $16 +ZP_JOY1_BUTTONS := $17 ;** Joystick direction values (ZP_JOY0_DIR/ZP_JOY1_DIR) JOY_N = $49 @@ -54,8 +54,13 @@ JOY_WNW = $4C JOY_NW = $4B JOY_NNW = $4A -;** BIOS -BIOS_IRQ1_ADDR = $FF3F -BIOS_IRQ2_ADDR = $FF52 -BIOS_NMI_RESET_ADDR = $F808 -BIOS_WRITE_VDP_REG = $FE1F +;** BIOS routines +BIOS_NMI_RESET_ADDR := $F808 +BIOS_PLAY_TUNE1 := $FBD6 +BIOS_PLAY_SONG := $FBED +BIOS_PLAY_TUNE2 := $FCE6 +BIOS_WRITE_VDP_REG := $FE1F +BIOS_QUIET_PSG := $FE54 +BIOS_POKE_PSG := $FE77 +BIOS_IRQ1_ADDR := $FF3F +BIOS_IRQ2_ADDR := $FF52 diff --git a/libsrc/creativision/playsound.s b/libsrc/creativision/playsound.s new file mode 100644 index 000000000..55c7a3fed --- /dev/null +++ b/libsrc/creativision/playsound.s @@ -0,0 +1,40 @@ +; void __fastcall__ bios_playsound (void *a, unsigned char b); + + + .export _bios_playsound + + .import popax + + .include "creativision.inc" + + +songptr := $00 ; Points to current tune data +volptr := $04 ; Points to current volume table + + +;* Creativision Sound Player +;* Based on BIOS song player. +;* +;* Pass a pointer to a set of note triples, terminated with a tempo byte; +;* and pass the length of the triples and tempo (max 255). +;* +;* Note: tune data must be stored backwards. + +_bios_playsound: + php + pha ; Save tune length + sei + + lda #<$FCD5 ; BIOS decreasing-volume table + ldx #>$FCD5 + sta volptr + stx volptr+1 + + jsr popax ; Get tune array pointer + sta songptr + stx songptr+1 + + pla + tay + dey ; Point to tempo byte + jmp BIOS_PLAY_SONG ; Let BIOS do its thing diff --git a/libsrc/creativision/psg.s b/libsrc/creativision/psg.s index c84f92f43..ec878af31 100644 --- a/libsrc/creativision/psg.s +++ b/libsrc/creativision/psg.s @@ -1,27 +1,18 @@ ; void __fastcall__ psg_outb (unsigned char b); ; void __fastcall__ psg_delay (unsigned char b); -; void __fastcall__ bios_playsound (void *a, unsigned char b); ; void psg_silence (void); .export _psg_outb, _psg_silence, _psg_delay - .export _bios_playsound - - .import popax .include "creativision.inc" -songptr := $00 ; Points to current tune data -volptr := $04 ; Points to current volume table - -_psg_outb: - ;* Let BIOS output the value. - jmp $FE77 +;* Let BIOS output the value. +_psg_outb := BIOS_POKE_PSG -_psg_silence: - jmp $FE54 +_psg_silence := BIOS_QUIET_PSG _psg_delay: @@ -37,31 +28,3 @@ l3: sbc #1 dey bne l1 rts - - -;* Creativision Sound Player -;* Based on BIOS song player. -;* -;* Pass a pointer to a set of note triples, terminated with a tempo byte; -;* and pass the length of the triples and tempo (max 255). -;* -;* Note: tune data must be stored backwards. - -_bios_playsound: - php - pha ; Save tune length - sei - - lda #<$FCD5 ; A BIOS volume table - ldx #>$FCD5 - sta volptr - stx volptr+1 - - jsr popax ; Get tune array pointer - sta songptr - stx songptr+1 - - pla - tay - dey ; Point to tempo byte - jmp $FBED ; Let BIOS do its thing From 14d05c61b67ab1a856f6b1202a2706e08e1eac6e Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 4 Jun 2021 07:30:26 -0400 Subject: [PATCH 0946/2710] Made Creativision's joystick driver more efficient. --- libsrc/creativision/joy/creativision-stdjoy.s | 100 ++++++++---------- 1 file changed, 46 insertions(+), 54 deletions(-) diff --git a/libsrc/creativision/joy/creativision-stdjoy.s b/libsrc/creativision/joy/creativision-stdjoy.s index 5cf46c39f..73b0c249f 100644 --- a/libsrc/creativision/joy/creativision-stdjoy.s +++ b/libsrc/creativision/joy/creativision-stdjoy.s @@ -1,11 +1,11 @@ ; ; Standard joystick driver for the Creativision. ; -; Christian Groessler, 2017-03-08 +; 2017-03-08, Christian Groessler +; 2021-06-01, Greg King ; .include "zeropage.inc" - .include "joy-kernel.inc" .include "joy-error.inc" .include "creativision.inc" @@ -13,10 +13,12 @@ .macpack module +buttons := tmp2 + ; ------------------------------------------------------------------------ ; Header. Includes jump table - module_header _creativisionstd_joy + module_header _creativisionstd_joy ; Driver signature @@ -39,16 +41,14 @@ JOY_COUNT = 2 ; Number of joysticks we support -; Symbolic names for joystick masks (similar names like the defines in joystick.h, but not related to them) +; Symbolic names for joystick masks (similar names to the macros in joystick.h, +; with the same values as the masks in creativision.h) JOY_UP = $10 JOY_DOWN = $04 JOY_LEFT = $20 JOY_RIGHT = $08 -; ------------------------------------------------------------------------ -; Code - .code ; ------------------------------------------------------------------------ @@ -59,7 +59,7 @@ JOY_RIGHT = $08 ; INSTALL: lda #JOY_ERR_OK - ldx #0 + ldx #>$0000 ; rts ; Fall through ; ------------------------------------------------------------------------ @@ -82,14 +82,14 @@ COUNT: lda #<JOY_COUNT ; READ: Read a particular joystick passed in A. ; -READJOY: and #1 ; fix joystick number - bne READJOY_1 ; read right joystick +READJOY: lsr a ; Get joystick number + bcs READJOY_1 ; Read right joystick ; Read left joystick ldx ZP_JOY0_DIR lda ZP_JOY0_BUTTONS - jmp convert ; convert joystick state to cc65 values + bcc convert ; Convert joystick state to cc65 values ; Read right joystick @@ -97,11 +97,11 @@ READJOY_1: ldx ZP_JOY1_DIR lda ZP_JOY1_BUTTONS lsr a lsr a - ;jmp convert ; convert joystick state to cc65 values - ; fall thru... + ;jmp convert ; Convert joystick state to cc65 values + ; Fall thru... ; ------------------------------------------------------------------------ -; convert: make runtime lib compatible values +; convert: make runtime lib-compatible values ; inputs: ; A - buttons ; X - direction @@ -111,24 +111,24 @@ convert: ; ------ ; buttons: -; Port values are for the left hand joystick (right hand joystick +; Port values are for the left-hand joystick (right-hand joystick ; values were shifted to the right to be identical). ; Why are there two bits indicating a pressed trigger? ; According to the "Second book of programs for the Dick Smith Wizard" -; (pg. 88ff), the left hand button gives the value of -; %00010001 and the right hand button gives %00100010 +; (pg. 88ff), the left-hand button gives the value of +; %00010001 and the right-hand button gives %00100010 ; Why two bits? Can there be cases that just one of those bits is set? -; Until these questions have been answered, we only use the lower two -; bits and ignore the upper ones... +; Until those questions have been answered, we only use the lower two +; bits, and ignore the upper ones. - and #%00000011 ; button status came in in A, strip high bits - sta retval ; initialize 'retval' with button status + and #%00000011 ; Button status came in A, strip high bits + sta buttons ; ------ ; direction: -; CV has a 16-direction joystick +; CV has a 16-direction joystick. ; -; port values: (compass points) +; Port values: (compass points) ; N - $49 - %01001001 ; NNE - $48 - %01001000 ; NE - $47 - %01000111 @@ -147,55 +147,51 @@ convert: ; NNW - $4A - %01001010 ; center - $00 - %00000000 ; -; mapping to cc65 definitions (4-direction joystick with 8 possible directions thru combinations) +; Mapping to cc65 definitions (4-direction joystick with 8 possible directions thru combinations): ; N, E, S, W -> JOY_UP, JOY_RIGHT, JOY_DOWN, JOY_LEFT ; NE, SE, SW, NW -> (JOY_UP | JOY_RIGHT), (JOY_DOWN | JOY_RIGHT), (JOY_DOWN | JOY_LEFT), (JOY_UP | JOY_LEFT) ; NNE, ENE, ESE, SSE, SSW, WSW, WNW, NNW: -; toggle between straight and diagonal direction for every call, e.g. +; toggle between the straight and diagonal directions for each call, e.g., ; NNE: ; call to READJOY: return JOY_UP | JOY_RIGHT ; call to READJOY: return JOY_UP ; call to READJOY: return JOY_UP | JOY_RIGHT ; call to READJOY: return JOY_UP ; call to READJOY: return JOY_UP | JOY_RIGHT -; etc... +; etc. - txa ; move direction status into A - beq done ; center position (no bits are set), nothing to do + txa ; Move direction status into A + beq done ; Center position (no bits are set), nothing to do - and #$0F ; get rid of the "$40" bit - bit bit0 ; is it a "three letter" direction (NNE, ENE, etc.)? - beq special ; yes (bit #0 is zero) + and #$0F ; Get rid of the "$40" bit + lsr a ; Is it "three-letter" direction (NNE, ENE, etc.)? + tax ; Create index into table + bcc special ; Yes (bit #0 was zero) - lsr a ; create index into table - tax lda dirtable,x -done: ora retval ; include "button" bits - ldx #0 +done: ora buttons ; Include button bits + ldx #>$0000 rts ; NNE, ENE, ESE, SSE, SSW, WSW, WNW, NNW -special: lsr a - tax - - lda toggler ; toggle the toggler +special: lda toggle ; Toggle the flag eor #$01 - sta toggler - bne spec_1 ; toggler is 1, use spectable_1 entry + sta toggle + bne spec_1 ; Flag is 1, use spectable_1 entry - lda spectable_0,x ; toggler is 0, use spectable_0 entry - bne done ; jump always + lda spectable_0,x + bne done ; Jump always spec_1: lda spectable_1,x - bne done ; jump always + bne done ; Jump always ; ------------------------------------------------------------------------ ; .rodata - ; a mapping table of "port values" to "cc65 values" - ; port value had been shifted one bit to the right (range 0..7) + ; A mapping table of "port values" to "cc65 values" + ; Port value had been shifted one bit to the right (range 0..7) dirtable: .byte JOY_DOWN ; S .byte JOY_DOWN | JOY_RIGHT ; SE .byte JOY_RIGHT ; E @@ -205,12 +201,12 @@ dirtable: .byte JOY_DOWN ; S .byte JOY_LEFT ; W .byte JOY_DOWN | JOY_LEFT ; SW - ; two "special" mapping tables for three-letter directions (NNE, etc.) + ; Two "special" mapping tables for three-letter directions (NNE, etc.) spectable_0: .byte JOY_DOWN ; SSW .byte JOY_DOWN ; SSE .byte JOY_RIGHT ; ESE .byte JOY_RIGHT ; ENE - .byte JOY_RIGHT ; NNE + .byte JOY_UP ; NNE .byte JOY_UP ; NNW .byte JOY_LEFT ; WNW .byte JOY_LEFT ; WSW @@ -224,14 +220,10 @@ spectable_1: .byte JOY_DOWN | JOY_LEFT ; SSW .byte JOY_UP | JOY_LEFT ; WNW .byte JOY_DOWN | JOY_LEFT ; WSW -; ------------------------------------------------------------------------ -; -bit0: .byte $01 - ; ------------------------------------------------------------------------ ; .bss -toggler: .res 1 -retval: .res 1 + +toggle: .res 1 .end From 9e6c1d1303b2efae34712f51a1a9a915fb3d6856 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Fri, 11 Jun 2021 19:55:13 -0500 Subject: [PATCH 0947/2710] tapeio and symNotepad updates --- libsrc/sym1/tapeio.s | 8 ++++---- targettest/sym1/symNotepad.c | 11 ++--------- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/libsrc/sym1/tapeio.s b/libsrc/sym1/tapeio.s index 19eeb2444..13579dca7 100644 --- a/libsrc/sym1/tapeio.s +++ b/libsrc/sym1/tapeio.s @@ -1,13 +1,13 @@ ; ; Wayne Parham (wayne@parhamdata.com) ; -; int loadt (int id); -; int dumpt (int id, int start_addr, int end_addr); +; int __fastcall__ loadt (unsigned char id); +; int __fastcall__ dumpt (unsigned char id, void* start_addr, void* end_addr); ; .include "sym1.inc" -.import popax, return0, return1 +.import popa, popax, return0, return1 .export _loadt, _dumpt @@ -33,7 +33,7 @@ error: jmp return1 ; or 1 if not jsr popax sta P2L ; Start address stx P2H - jsr popax + jsr popa sta P1L ; Tape Record ID ldx #$00 stx P1H diff --git a/targettest/sym1/symNotepad.c b/targettest/sym1/symNotepad.c index 683cea63f..c47d1ac98 100644 --- a/targettest/sym1/symNotepad.c +++ b/targettest/sym1/symNotepad.c @@ -110,7 +110,7 @@ void main(void) { l++; tapio[l] = 0x00; puts( "Saving to tape." ); - error = dumpt( 'N', (int) tapio, (int) tapio+p ); + error = dumpt( 'N', tapio, tapio+p ); if( error ) { puts( "\nTape error." ); } @@ -124,9 +124,6 @@ void main(void) { puts( "===================== Sym-1 Notepad ====================\n" ); for( l = 0; l <= p; l++ ) { putchar( buffer[l] ); - if( buffer[l] == '\r' ) { - putchar( '\n' ); - } } } else if( c == 0x0C ) { // Load @@ -155,9 +152,6 @@ void main(void) { for( l = 0; l <= p; l++ ) { putchar( buffer[l] ); - if( buffer[l] == '\r' ) { - putchar( '\n' ); - } } } } @@ -180,11 +174,10 @@ void main(void) { puts( "Buffer full." ); } else { - if( c == '\r' ) { + if( c == '\n' ) { putchar( '\n' ); } buffer[p] = c; - putchar( c ); } p++; } From c9bb1483ac57030981ee77d2e851c3fabf05697d Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sat, 12 Jun 2021 06:17:03 -0500 Subject: [PATCH 0948/2710] Add BEL->beep functionality --- libsrc/sym1/write.s | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libsrc/sym1/write.s b/libsrc/sym1/write.s index f7eb4c55e..314a7760b 100644 --- a/libsrc/sym1/write.s +++ b/libsrc/sym1/write.s @@ -7,7 +7,7 @@ .include "sym1.inc" .import popax, popptr1 -.importzp ptr1, ptr2, ptr3, tmp1 +.importzp ptr1, ptr2, ptr3 .export _write @@ -28,12 +28,15 @@ begin: dec ptr2 dec ptr2+1 beq done -outch : ldy #0 +outch: ldy #0 lda (ptr1),y jsr OUTCHR ; Send character using Monitor call - cmp #$0A - bne next - lda #$0D ; If it is LF, add CR + cmp #$07 ; Check for '\a' + bne chklf ; ...if BEL character + jsr BEEP ; Make beep sound +chklf: cmp #$0A ; Check for 'n' + bne next ; ...if LF character + lda #$0D ; Add a carriage return jsr OUTCHR next: inc ptr1 From faf6266cded2d45d6020fd9a27e622fc17b4e47e Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sat, 12 Jun 2021 06:28:53 -0500 Subject: [PATCH 0949/2710] typo in comment --- libsrc/sym1/read.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/sym1/read.s b/libsrc/sym1/read.s index fe4990601..177472270 100644 --- a/libsrc/sym1/read.s +++ b/libsrc/sym1/read.s @@ -30,7 +30,7 @@ begin: dec ptr2 getch: jsr INTCHR ; Get character using Monitor ROM call jsr OUTCHR ; Echo it - and #$7F ; Clear hi bit + and #$7F ; Clear top bit cmp #$07 ; Check for '\a' bne chkcr ; ...if BEL character jsr BEEP ; Make beep sound From 4db50e8e931e10951436310e7837c2bc5de66b5a Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Sun, 13 Jun 2021 11:29:30 -0500 Subject: [PATCH 0950/2710] Documentation update: Mention where to find sym1 sample programs --- doc/sym1.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/sym1.sgml b/doc/sym1.sgml index d2e5f09fd..c32fcf2cb 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -94,7 +94,7 @@ To be more specific, this limitation means that you cannot use any of the follow <sect>Other hints<p> <sect1>sym1.h<p> -This header exposes Sym-specific I/O functions that are useful for reading and writing its ports and front panel. See the sym1.h include file for a list of the functions available. +This header exposes Sym-specific I/O functions that are useful for reading and writing its ports and front panel. See the <tt/sym1.h/ include file for a list of the functions available. <sect2>Limited memory applications<p> @@ -102,7 +102,7 @@ As stated earlier, there are config files for 4KB and 32KB systems. If you have <sect3>Sample programs<p> -All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. Information on building and running the sample programs are in the targettest/sym1 directory. +All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. These sample programs can be found in the samples and targettest/sym1 directories: <itemize> <item>helloworld is the traditional "Hello World!" program, using printf().</item> From fcda94f25895ed792c11bc254052abed7f964617 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 13 Jun 2021 20:36:05 -0400 Subject: [PATCH 0951/2710] Made a slight improvement in the ld65 expression evaluator. --- src/ld65/expr.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/ld65/expr.c b/src/ld65/expr.c index 7a2f37d4a..ff210e315 100644 --- a/src/ld65/expr.c +++ b/src/ld65/expr.c @@ -321,20 +321,18 @@ long GetExprVal (ExprNode* Expr) return GetExprVal (Expr->Left) * GetExprVal (Expr->Right); case EXPR_DIV: - Left = GetExprVal (Expr->Left); Right = GetExprVal (Expr->Right); if (Right == 0) { Error ("Division by zero"); } - return Left / Right; + return GetExprVal (Expr->Left) / Right; case EXPR_MOD: - Left = GetExprVal (Expr->Left); Right = GetExprVal (Expr->Right); if (Right == 0) { Error ("Modulo operation with zero"); } - return Left % Right; + return GetExprVal (Expr->Left) % Right; case EXPR_OR: return GetExprVal (Expr->Left) | GetExprVal (Expr->Right); From 11d81b1f436f4f1fc4e5f6e0b952b2df500e76c4 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Tue, 15 Jun 2021 16:39:28 -0500 Subject: [PATCH 0952/2710] Stylistic changes --- cfg/sym1-32k.cfg | 54 ++++++++++++++++++------------------ cfg/sym1-4k.cfg | 54 ++++++++++++++++++------------------ cfg/sym1.cfg | 54 ++++++++++++++++++------------------ doc/sym1.sgml | 7 ++--- include/sym1.h | 50 +++++++++++++++++++++++++++------ samples/Makefile | 2 +- samples/helloworld.c | 8 ------ targettest/sym1/Makefile | 14 ++++------ targettest/sym1/symDisplay.c | 23 ++++++++------- targettest/sym1/symIO.c | 36 ++++++++++++------------ targettest/sym1/symNotepad.c | 23 +++++++-------- 11 files changed, 170 insertions(+), 155 deletions(-) delete mode 100644 samples/helloworld.c diff --git a/cfg/sym1-32k.cfg b/cfg/sym1-32k.cfg index ee3bc9d63..ad0d760f3 100644 --- a/cfg/sym1-32k.cfg +++ b/cfg/sym1-32k.cfg @@ -6,41 +6,41 @@ FEATURES { STARTADDRESS: default = $0200; - CONDES: segment = STARTUP, - type = constructor, - label = __CONSTRUCTOR_TABLE__, - count = __CONSTRUCTOR_COUNT__; - CONDES: segment = STARTUP, - type = destructor, - label = __DESTRUCTOR_TABLE__, - count = __DESTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__; } SYMBOLS { - __STACKSIZE__: type = weak, value = $0200; # 512 byte program stack - __STARTADDRESS__: type = export, value = %S; + __STACKSIZE__: type = weak, value = $0200; # 512 byte program stack + __STARTADDRESS__: type = export, value = %S; } MEMORY { - ZP: file = %O, define = yes, start = $0000, size = $00F7; - CPUSTACK: file = "", define = yes, start = $0100, size = $0100; - RAM: file = %O, define = yes, start = %S, size = $8000 - %S - __STACKSIZE__; - MONROM: file = "", define = yes, start = $8000, size = $1000; - EXT: file = "", define = yes, start = $9000, size = $1000; - IO: file = "", define = yes, start = $A000, size = $1000; - RAE1: file = "", define = yes, start = $B000, size = $1000; - BASROM: file = "", define = yes, start = $C000, size = $1000; - RAE2: file = "", define = yes, start = $E000, size = $1000; - TOP: file = "", define = yes, start = $F000, size = $1000; + ZP: file = %O, define = yes, start = $0000, size = $00F7; + CPUSTACK: file = "", define = yes, start = $0100, size = $0100; + RAM: file = %O, define = yes, start = %S, size = $8000 - %S - __STACKSIZE__; + MONROM: file = "", define = yes, start = $8000, size = $1000; + EXT: file = "", define = yes, start = $9000, size = $1000; + IO: file = "", define = yes, start = $A000, size = $1000; + RAE1: file = "", define = yes, start = $B000, size = $1000; + BASROM: file = "", define = yes, start = $C000, size = $1000; + RAE2: file = "", define = yes, start = $E000, size = $1000; + TOP: file = "", define = yes, start = $F000, size = $1000; } SEGMENTS { - ZEROPAGE: load = ZP, type = zp, define = yes; - STARTUP: load = RAM, type = ro, define = yes; - CODE: load = RAM, type = ro, define = yes; - RODATA: load = RAM, type = ro, define = yes; - ONCE: load = RAM, type = ro, define = yes; - DATA: load = RAM, type = rw, define = yes; - BSS: load = RAM, type = bss, define = yes; + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; + BSS: load = RAM, type = bss, define = yes; } diff --git a/cfg/sym1-4k.cfg b/cfg/sym1-4k.cfg index 8570b6077..32d3cbb3a 100644 --- a/cfg/sym1-4k.cfg +++ b/cfg/sym1-4k.cfg @@ -6,41 +6,41 @@ FEATURES { STARTADDRESS: default = $0200; - CONDES: segment = STARTUP, - type = constructor, - label = __CONSTRUCTOR_TABLE__, - count = __CONSTRUCTOR_COUNT__; - CONDES: segment = STARTUP, - type = destructor, - label = __DESTRUCTOR_TABLE__, - count = __DESTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__; } SYMBOLS { - __STACKSIZE__: type = weak, value = $0080; # 128 byte program stack - __STARTADDRESS__: type = export, value = %S; + __STACKSIZE__: type = weak, value = $0080; # 128 byte program stack + __STARTADDRESS__: type = export, value = %S; } MEMORY { - ZP: file = %O, define = yes, start = $0000, size = $00F7; - CPUSTACK: file = "", define = yes, start = $0100, size = $0100; - RAM: file = %O, define = yes, start = %S, size = $1000 - %S - __STACKSIZE__; - MONROM: file = "", define = yes, start = $8000, size = $1000; - EXT: file = "", define = yes, start = $9000, size = $1000; - IO: file = "", define = yes, start = $A000, size = $1000; - RAE1: file = "", define = yes, start = $B000, size = $1000; - BASROM: file = "", define = yes, start = $C000, size = $1000; - RAE2: file = "", define = yes, start = $E000, size = $1000; - TOP: file = "", define = yes, start = $F000, size = $1000; + ZP: file = %O, define = yes, start = $0000, size = $00F7; + CPUSTACK: file = "", define = yes, start = $0100, size = $0100; + RAM: file = %O, define = yes, start = %S, size = $1000 - %S - __STACKSIZE__; + MONROM: file = "", define = yes, start = $8000, size = $1000; + EXT: file = "", define = yes, start = $9000, size = $1000; + IO: file = "", define = yes, start = $A000, size = $1000; + RAE1: file = "", define = yes, start = $B000, size = $1000; + BASROM: file = "", define = yes, start = $C000, size = $1000; + RAE2: file = "", define = yes, start = $E000, size = $1000; + TOP: file = "", define = yes, start = $F000, size = $1000; } SEGMENTS { - ZEROPAGE: load = ZP, type = zp, define = yes; - STARTUP: load = RAM, type = ro, define = yes; - CODE: load = RAM, type = ro, define = yes; - RODATA: load = RAM, type = ro, define = yes; - ONCE: load = RAM, type = ro, define = yes; - DATA: load = RAM, type = rw, define = yes; - BSS: load = RAM, type = bss, define = yes; + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; + BSS: load = RAM, type = bss, define = yes; } diff --git a/cfg/sym1.cfg b/cfg/sym1.cfg index 8570b6077..32d3cbb3a 100644 --- a/cfg/sym1.cfg +++ b/cfg/sym1.cfg @@ -6,41 +6,41 @@ FEATURES { STARTADDRESS: default = $0200; - CONDES: segment = STARTUP, - type = constructor, - label = __CONSTRUCTOR_TABLE__, - count = __CONSTRUCTOR_COUNT__; - CONDES: segment = STARTUP, - type = destructor, - label = __DESTRUCTOR_TABLE__, - count = __DESTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__; } SYMBOLS { - __STACKSIZE__: type = weak, value = $0080; # 128 byte program stack - __STARTADDRESS__: type = export, value = %S; + __STACKSIZE__: type = weak, value = $0080; # 128 byte program stack + __STARTADDRESS__: type = export, value = %S; } MEMORY { - ZP: file = %O, define = yes, start = $0000, size = $00F7; - CPUSTACK: file = "", define = yes, start = $0100, size = $0100; - RAM: file = %O, define = yes, start = %S, size = $1000 - %S - __STACKSIZE__; - MONROM: file = "", define = yes, start = $8000, size = $1000; - EXT: file = "", define = yes, start = $9000, size = $1000; - IO: file = "", define = yes, start = $A000, size = $1000; - RAE1: file = "", define = yes, start = $B000, size = $1000; - BASROM: file = "", define = yes, start = $C000, size = $1000; - RAE2: file = "", define = yes, start = $E000, size = $1000; - TOP: file = "", define = yes, start = $F000, size = $1000; + ZP: file = %O, define = yes, start = $0000, size = $00F7; + CPUSTACK: file = "", define = yes, start = $0100, size = $0100; + RAM: file = %O, define = yes, start = %S, size = $1000 - %S - __STACKSIZE__; + MONROM: file = "", define = yes, start = $8000, size = $1000; + EXT: file = "", define = yes, start = $9000, size = $1000; + IO: file = "", define = yes, start = $A000, size = $1000; + RAE1: file = "", define = yes, start = $B000, size = $1000; + BASROM: file = "", define = yes, start = $C000, size = $1000; + RAE2: file = "", define = yes, start = $E000, size = $1000; + TOP: file = "", define = yes, start = $F000, size = $1000; } SEGMENTS { - ZEROPAGE: load = ZP, type = zp, define = yes; - STARTUP: load = RAM, type = ro, define = yes; - CODE: load = RAM, type = ro, define = yes; - RODATA: load = RAM, type = ro, define = yes; - ONCE: load = RAM, type = ro, define = yes; - DATA: load = RAM, type = rw, define = yes; - BSS: load = RAM, type = bss, define = yes; + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; + BSS: load = RAM, type = bss, define = yes; } diff --git a/doc/sym1.sgml b/doc/sym1.sgml index c32fcf2cb..75c44b422 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -21,7 +21,7 @@ Please note that Sym-1 specific functions are just mentioned here, they are desc <sect>Binary format<p> -The output format generated by the linker for the Sym-1 target is a raw binary BIN file, which is essentially a memory image. You can convert this to a HEX file using BIN2HEX, which is a popular open-source conversion utility program. A HEX file has ASCII representations of the hexadecimal byte values of the machine-language program. +The output format generated by the linker for the Sym-1 target is a raw binary BIN file, which is essentially a memory image. You can convert this to a HEX file using BIN2HEX, which is a popular open-source conversion utility program. A HEX file has ASCII representations of the hexadecimal byte values of the machine-language program. So the HEX file can be transferred to the Sym-1 using the RS-232 terminal port, just as if the machine-code was entered by hand. Enter 'm 200' in the monitor and start the HEX file transfer. <p> @@ -98,14 +98,13 @@ This header exposes Sym-specific I/O functions that are useful for reading and w <sect2>Limited memory applications<p> -As stated earlier, there are config files for 4KB and 32KB systems. If you have 32KB RAM, then you will probably want to use the sym1-32k configuration, but if not - if you are using the sym1-4k configuration - then you may want to use functions like getchar, putchar, gets and puts rather than printf. Printf requires about 1KB because it needs to know how to process all the format specifiers. +As stated earlier, there are config files for 4KB and 32KB systems. If you have 32KB RAM, then you will probably want to use the sym1-32k configuration, but if not - if you are using the sym1-4k configuration - then you may want to use functions like getchar, putchar, gets and puts rather than functions like scanf and printf. Printf, for example, requires about 1KB because it needs to know how to process all the format specifiers. <sect3>Sample programs<p> -All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. These sample programs can be found in the samples and targettest/sym1 directories: +All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. These sample programs can be found in the targettest/sym1 directory: <itemize> -<item>helloworld is the traditional "Hello World!" program, using printf().</item> <item>symHello prints "Hello World!" and then inputs characters, which are echoed on the screen. It also makes a "beep" sound.</item> <item>symTiny does the same as symhello, but does it with puts() rather than printf() to show the difference in compiled binary size.</item> <item>symDisplay allows entry of a message, which is then displayed by scrolling it across the front panel display.</item> diff --git a/include/sym1.h b/include/sym1.h index bedaa7913..e0eb81ecf 100644 --- a/include/sym1.h +++ b/include/sym1.h @@ -1,8 +1,33 @@ -// sym1.h -// -// I/O primitives for Sym-1 -// -// Wayne Parham +/*****************************************************************************/ +/* */ +/* sym1.h */ +/* */ +/* Sym-1 system-specific definitions */ +/* */ +/* */ +/* */ +/* (C) 2020 Wayne Parham */ +/* EMail: wayne@parhamdata.com */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ @@ -122,10 +147,17 @@ struct _display { -void beep (void); // Beep sound -void fdisp (void); // Flash display -int __fastcall__ loadt (unsigned char); // Read from tape (id) -int __fastcall__ dumpt (unsigned char, const void*, const void*); // Write to tape (id, start_addr, end_addr) +void beep (void); +/* Beep sound. */ + +void fdisp (void); +/* Flash display */ + +int __fastcall__ loadt (unsigned char); +/* Read from tape */ + +int __fastcall__ dumpt (unsigned char, const void*, const void*); +/* Write to tape */ diff --git a/samples/Makefile b/samples/Makefile index 32a0086d8..1679b7d96 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -312,7 +312,7 @@ EXELIST_supervision = \ supervisionhello EXELIST_sym1 = \ - helloworld + notavailable EXELIST_telestrat = \ ascii \ diff --git a/samples/helloworld.c b/samples/helloworld.c deleted file mode 100644 index b4e1ee6a3..000000000 --- a/samples/helloworld.c +++ /dev/null @@ -1,8 +0,0 @@ -// Traditional "Hello World" program - -#include <stdio.h> - -int main(void) { - printf("Hello, World!\n"); - return 0; -} diff --git a/targettest/sym1/Makefile b/targettest/sym1/Makefile index c8508f1e0..23742f6d1 100644 --- a/targettest/sym1/Makefile +++ b/targettest/sym1/Makefile @@ -1,7 +1,3 @@ -# Run 'make SYS=<target>'; or, set a SYS env. -# var. to build for another target system. -SYS ?= sym1 - # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -33,19 +29,19 @@ endif all: symHello.bin symTiny.bin symDisplay.bin symIO.bin symNotepad.bin symHello.bin: symHello.c - $(CL) -t $(SYS) -C sym1-4k.cfg -O -o symHello.bin symHello.c + $(CL) -t sym1 -O -o symHello.bin symHello.c symTiny.bin: symTiny.c - $(CL) -t $(SYS) -C sym1-4k.cfg -O -o symTiny.bin symTiny.c + $(CL) -t sym1 -O -o symTiny.bin symTiny.c symDisplay.bin: symDisplay.c - $(CL) -t $(SYS) -C sym1-4k.cfg -O -o symDisplay.bin symDisplay.c + $(CL) -t sym1 -O -o symDisplay.bin symDisplay.c symIO.bin: symIO.c - $(CL) -t $(SYS) -C sym1-32k.cfg -O -o symIO.bin symIO.c + $(CL) -t sym1 -C sym1-32k.cfg -O -o symIO.bin symIO.c symNotepad.bin: symNotepad.c - $(CL) -t $(SYS) -C sym1-32k.cfg -O -o symNotepad.bin symNotepad.c + $(CL) -t sym1 -C sym1-32k.cfg -O -o symNotepad.bin symNotepad.c clean: @$(DEL) symHello.bin 2>$(NULLDEV) diff --git a/targettest/sym1/symDisplay.c b/targettest/sym1/symDisplay.c index e97518c79..ff9ff90b2 100644 --- a/targettest/sym1/symDisplay.c +++ b/targettest/sym1/symDisplay.c @@ -10,18 +10,18 @@ #include <sym1.h> void main (void) { - int delay = 10; - int flashes = 255; + int delay = 10; + int flashes = 255; int displayable = 1; - int e = 0; - int r = 0; - int d = 0; - int i = 0; - int l = 0; - int t = 0; - int z = 0; - char c = 0x00; - char buffer[41] = { 0x00 }; + int e = 0; + int r = 0; + int d = 0; + int i = 0; + int l = 0; + int t = 0; + int z = 0; + char c = 0x00; + char buffer[41] = { 0x00 }; puts( "\nType a message (40 chars max) and press ENTER, please:\n" ); @@ -351,6 +351,5 @@ void main (void) { } } } - puts( "\n\nEnjoy your day!\n\n" ); } diff --git a/targettest/sym1/symIO.c b/targettest/sym1/symIO.c index 99b020be2..0b1dee40b 100644 --- a/targettest/sym1/symIO.c +++ b/targettest/sym1/symIO.c @@ -12,24 +12,24 @@ #include <string.h> void main(void) { - unsigned char ddr1a = 0x00; - unsigned char ior1a = 0x00; - unsigned char ddr1b = 0x00; - unsigned char ior1b = 0x00; - unsigned char ddr2a = 0x00; - unsigned char ior2a = 0x00; - unsigned char ddr2b = 0x00; - unsigned char ior2b = 0x00; - unsigned char ddr3a = 0x00; - unsigned char ior3a = 0x00; - unsigned char ddr3b = 0x00; - unsigned char ior3b = 0x00; - unsigned char val = 0x00; - int going = 0x01; - int instr = 0x01; - int l = 0x00; - char* vp = 0x00; - char cmd[20] = { 0x00 }; + unsigned char ddr1a = 0x00; + unsigned char ior1a = 0x00; + unsigned char ddr1b = 0x00; + unsigned char ior1b = 0x00; + unsigned char ddr2a = 0x00; + unsigned char ior2a = 0x00; + unsigned char ddr2b = 0x00; + unsigned char ior2b = 0x00; + unsigned char ddr3a = 0x00; + unsigned char ior3a = 0x00; + unsigned char ddr3b = 0x00; + unsigned char ior3b = 0x00; + unsigned char val = 0x00; + int going = 0x01; + int instr = 0x01; + int l = 0x00; + char* vp = 0x00; + char cmd[20] = { 0x00 }; while( going ) { diff --git a/targettest/sym1/symNotepad.c b/targettest/sym1/symNotepad.c index c47d1ac98..f2c85756c 100644 --- a/targettest/sym1/symNotepad.c +++ b/targettest/sym1/symNotepad.c @@ -17,18 +17,18 @@ #include <stdlib.h> #include <string.h> -#define TAPIO_ADDRESS 0xE000 -#define TAPIO_MAX_SIZE 0x0FFF +#define TAPIO_ADDRESS 0xE000 +#define TAPIO_MAX_SIZE 0x0FFF void main(void) { - char c = 0x00; - int l = 0x00; - int p = 0x00; - int error = 0x00; - int running = 0x01; - int writing = 0x01; - int instruction_needed = 0x01; - int heap_size = 0x00; + cha c = 0x00; + int l = 0x00; + int p = 0x00; + int error = 0x00; + int running = 0x01; + int writing = 0x01; + int instruction_needed = 0x01; + int heap_size = 0x00; char* tapio = (char*) TAPIO_ADDRESS; char* buffer; @@ -183,9 +183,6 @@ void main(void) { } } } - free( buffer ); - puts( "\nEnjoy your day!\n" ); } - From f98e5f4feb28f6e786ca48551fdad50d1e1f6a7a Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Tue, 15 Jun 2021 17:14:27 -0500 Subject: [PATCH 0953/2710] Stylistic changes --- doc/sym1.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sym1.sgml b/doc/sym1.sgml index 75c44b422..60eb1c020 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -106,7 +106,7 @@ All the samples will run on the "stock" 4KB Sym-1, except for symIO an <itemize> <item>symHello prints "Hello World!" and then inputs characters, which are echoed on the screen. It also makes a "beep" sound.</item> -<item>symTiny does the same as symhello, but does it with puts() rather than printf() to show the difference in compiled binary size.</item> +<item>symTiny does the same as symHello, but does it with puts() rather than printf() to show the difference in compiled binary size.</item> <item>symDisplay allows entry of a message, which is then displayed by scrolling it across the front panel display.</item> <item>symIO allows access to the Sym-1 digital I/O ports.</item> <item>symNotepad is a simple text entry/retrieval program that uses tape storage.</item> From f1f700799b6f175e66f4258c634b205a71519cf7 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Wed, 16 Jun 2021 07:35:18 -0500 Subject: [PATCH 0954/2710] All samples use 'int main' and 'return int' --- targettest/sym1/symDisplay.c | 5 ++++- targettest/sym1/symHello.c | 4 +++- targettest/sym1/symIO.c | 6 +++++- targettest/sym1/symNotepad.c | 8 ++++++-- targettest/sym1/symTiny.c | 4 +++- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/targettest/sym1/symDisplay.c b/targettest/sym1/symDisplay.c index ff9ff90b2..9176b5234 100644 --- a/targettest/sym1/symDisplay.c +++ b/targettest/sym1/symDisplay.c @@ -9,7 +9,7 @@ #include <stdio.h> #include <sym1.h> -void main (void) { +int main (void) { int delay = 10; int flashes = 255; int displayable = 1; @@ -351,5 +351,8 @@ void main (void) { } } } + puts( "\n\nEnjoy your day!\n\n" ); + + return 0; } diff --git a/targettest/sym1/symHello.c b/targettest/sym1/symHello.c index 543e00cb2..a37bc1994 100644 --- a/targettest/sym1/symHello.c +++ b/targettest/sym1/symHello.c @@ -9,7 +9,7 @@ #include <stdio.h> #include <sym1.h> -void main(void) { +int main(void) { char c = 0x00; int d = 0x00; int l = 0x00; @@ -34,4 +34,6 @@ void main(void) { for( d = 0; d < 10 ; d++ ) { } } + + return 0; } diff --git a/targettest/sym1/symIO.c b/targettest/sym1/symIO.c index 0b1dee40b..0659b71f3 100644 --- a/targettest/sym1/symIO.c +++ b/targettest/sym1/symIO.c @@ -11,7 +11,7 @@ #include <stdlib.h> #include <string.h> -void main(void) { +int main(void) { unsigned char ddr1a = 0x00; unsigned char ior1a = 0x00; unsigned char ddr1b = 0x00; @@ -165,4 +165,8 @@ void main(void) { } } } + + puts( "\n\nEnjoy your day!\n\n" ); + + return 0; } diff --git a/targettest/sym1/symNotepad.c b/targettest/sym1/symNotepad.c index f2c85756c..f2e923bb5 100644 --- a/targettest/sym1/symNotepad.c +++ b/targettest/sym1/symNotepad.c @@ -20,8 +20,8 @@ #define TAPIO_ADDRESS 0xE000 #define TAPIO_MAX_SIZE 0x0FFF -void main(void) { - cha c = 0x00; +int main(void) { + char c = 0x00; int l = 0x00; int p = 0x00; int error = 0x00; @@ -183,6 +183,10 @@ void main(void) { } } } + free( buffer ); + puts( "\nEnjoy your day!\n" ); + + return 0; } diff --git a/targettest/sym1/symTiny.c b/targettest/sym1/symTiny.c index bbca4f9d1..27b8840d8 100644 --- a/targettest/sym1/symTiny.c +++ b/targettest/sym1/symTiny.c @@ -11,7 +11,7 @@ #include <stdio.h> #include <sym1.h> -void main(void) { +int main(void) { char c = 0x00; int d = 0x00; int l = 0x00; @@ -37,4 +37,6 @@ void main(void) { for( d = 0; d < 10 ; d++ ) { } } + + return 0; } From a93542e80cb0e15d790d4ac1882f1d6d64600736 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Wed, 16 Jun 2021 16:24:26 -0500 Subject: [PATCH 0955/2710] Added __fastcall__ to comments --- libsrc/sym1/read.s | 3 ++- libsrc/sym1/write.s | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/libsrc/sym1/read.s b/libsrc/sym1/read.s index 177472270..a2549fd9c 100644 --- a/libsrc/sym1/read.s +++ b/libsrc/sym1/read.s @@ -1,7 +1,7 @@ ; ; Wayne Parham (wayne@parhamdata.com) ; -; int read (int fd, void* buf, unsigned count); +; int __fastcall__ read (int fd, void* buf, unsigned count); ; .include "sym1.inc" @@ -37,6 +37,7 @@ getch: jsr INTCHR ; Get character using Monitor ROM call chkcr: cmp #$0D ; Check for '\r' bne putch ; ...if CR character lda #$0A ; Replace with '\n' + jsr OUTCHR ; and echo it putch: ldy #$00 ; Put char into return buffer sta (ptr1),y diff --git a/libsrc/sym1/write.s b/libsrc/sym1/write.s index 314a7760b..7b7428b9b 100644 --- a/libsrc/sym1/write.s +++ b/libsrc/sym1/write.s @@ -1,7 +1,7 @@ ; ; Wayne Parham (wayne@parhamdata.com) ; -; int write (int fd, const void* buf, int count); +; int __fastcall__ write (int fd, const void* buf, int count); ; .include "sym1.inc" From bed61df8377c42ad7c1cf4e4e32e61691d84ffd7 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Wed, 16 Jun 2021 16:28:17 -0500 Subject: [PATCH 0956/2710] Removed unnecessary blank line from samples/Makefile --- samples/Makefile | 1 - 1 file changed, 1 deletion(-) diff --git a/samples/Makefile b/samples/Makefile index 1679b7d96..502748ea1 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -154,7 +154,6 @@ endif # Lists of subdirectories # disasm depends on cpp - DIRLIST = tutorial geos # -------------------------------------------------------------------------- From 82bdc77e41b4e46471ce26be3580f641afe730ac Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Wed, 16 Jun 2021 16:47:38 -0500 Subject: [PATCH 0957/2710] puts() whitespace style change --- targettest/sym1/symDisplay.c | 10 ++++---- targettest/sym1/symHello.c | 2 +- targettest/sym1/symIO.c | 26 ++++++++++---------- targettest/sym1/symNotepad.c | 46 ++++++++++++++++++------------------ targettest/sym1/symTiny.c | 8 +++---- 5 files changed, 46 insertions(+), 46 deletions(-) diff --git a/targettest/sym1/symDisplay.c b/targettest/sym1/symDisplay.c index 9176b5234..350d261f9 100644 --- a/targettest/sym1/symDisplay.c +++ b/targettest/sym1/symDisplay.c @@ -30,22 +30,22 @@ int main (void) { buffer[i] = c; i++; if( i == 40 ) { - puts( "\n\n--- Reached 40 character limit. ---" ); + puts ("\n\n--- Reached 40 character limit. ---"); } } i--; // index is one past end while( z == 0 ) { - puts( "\n\nHow many times (0 for forever) to repeat?" ); + puts ("\n\nHow many times (0 for forever) to repeat?"); c = getchar(); if( (c >= '0') && (c <= '9') ) { // between 1 and 9 loops allowed z = 1; // a number was pressed t = c - '0'; // convert char to int - puts( "\n\nLook at the front panel.\n" ); + puts ("\n\nLook at the front panel.\n"); } else { - puts( "\nWhat?" ); + puts ("\nWhat?"); z = 0; // keep asking for a number } } @@ -352,7 +352,7 @@ int main (void) { } } - puts( "\n\nEnjoy your day!\n\n" ); + puts ("\n\nEnjoy your day!\n\n"); return 0; } diff --git a/targettest/sym1/symHello.c b/targettest/sym1/symHello.c index a37bc1994..8ca3ac4aa 100644 --- a/targettest/sym1/symHello.c +++ b/targettest/sym1/symHello.c @@ -9,7 +9,7 @@ #include <stdio.h> #include <sym1.h> -int main(void) { +int main (void) { char c = 0x00; int d = 0x00; int l = 0x00; diff --git a/targettest/sym1/symIO.c b/targettest/sym1/symIO.c index 0659b71f3..65bd6e2e1 100644 --- a/targettest/sym1/symIO.c +++ b/targettest/sym1/symIO.c @@ -11,7 +11,7 @@ #include <stdlib.h> #include <string.h> -int main(void) { +int main (void) { unsigned char ddr1a = 0x00; unsigned char ior1a = 0x00; unsigned char ddr1b = 0x00; @@ -51,21 +51,21 @@ int main(void) { ddr3b = VIA3.ddrb; ior3b = VIA3.prb; - puts( "================== Digital I/O Status ==================" ); - puts( " Port1A Port1B Port2A Port2B Port3A Port3B" ); + puts ("================== Digital I/O Status =================="); + puts (" Port1A Port1B Port2A Port2B Port3A Port3B" ); printf( "DDR %02X %02X %02X %02X %02X %02X\n\r",ddr1a,ddr1b,ddr2a,ddr2b,ddr3a,ddr3b ); printf( "IOR %02X %02X %02X %02X %02X %02X\n\r",ior1a,ior1b,ior2a,ior2b,ior3a,ior3b ); - puts( "========================================================\n" ); + puts ("========================================================\n"); if( instr ) { - puts( "You can set any register by typing 'register value' so" ); - puts( "as an example, to set register IOR2A with the top five" ); - puts( "bits off and the bottom three on, type 'IOR2A 07'." ); - puts( "Press ENTER without any command to see register values" ); - puts( "without changing any of them. Type 'help' to see these" ); - puts( "instructions again and type 'quit' to end the program.\n"); - puts( "Available registers: DDR1A, IOR1A, DDR1B, IOR1B, DDR2A" ); - puts( "IOR2A, DDR2B, IOR2B, DDR3A, IOR3A, DDR3B and IOR3B." ); + puts ("You can set any register by typing 'register value' so"); + puts ("as an example, to set register IOR2A with the top five"); + puts ("bits off and the bottom three on, type 'IOR2A 07'."); + puts ("Press ENTER without any command to see register values"); + puts ("without changing any of them. Type 'help' to see these"); + puts ("instructions again and type 'quit' to end the program.\n"); + puts ("Available registers: DDR1A, IOR1A, DDR1B, IOR1B, DDR2A"); + puts ("IOR2A, DDR2B, IOR2B, DDR3A, IOR3A, DDR3B and IOR3B."); instr = 0; } @@ -166,7 +166,7 @@ int main(void) { } } - puts( "\n\nEnjoy your day!\n\n" ); + puts ("\n\nEnjoy your day!\n\n"); return 0; } diff --git a/targettest/sym1/symNotepad.c b/targettest/sym1/symNotepad.c index f2e923bb5..7a603bd93 100644 --- a/targettest/sym1/symNotepad.c +++ b/targettest/sym1/symNotepad.c @@ -20,7 +20,7 @@ #define TAPIO_ADDRESS 0xE000 #define TAPIO_MAX_SIZE 0x0FFF -int main(void) { +int main (void) { char c = 0x00; int l = 0x00; int p = 0x00; @@ -42,7 +42,7 @@ int main(void) { memset( buffer, 0x00, heap_size ); if( buffer == 0x00 ) { - puts( "Memory full." ); + puts ("Memory full."); running = 0; } @@ -78,16 +78,16 @@ int main(void) { putchar( '\n' ); } - puts( "===================== Sym-1 Notepad ====================" ); + puts ("===================== Sym-1 Notepad ===================="); if( instruction_needed ) { - puts( "Enter text and you can save it to tape for reloading" ); - puts( "later. There are four special 'command' characters:\n" ); - puts( " Control-S Save to tape" ); - puts( " Control-L Load from tape" ); - puts( " Control-C Clear memory" ); - puts( " Control-X Exit" ); - puts( "========================================================\n" ); + puts ("Enter text and you can save it to tape for reloading"); + puts ("later. There are four special 'command' characters:\n"); + puts (" Control-S Save to tape"); + puts (" Control-L Load from tape"); + puts (" Control-C Clear memory"); + puts (" Control-X Exit"); + puts ("========================================================\n"); } while( writing ) { @@ -101,18 +101,18 @@ int main(void) { } } else if( c == 0x13 ) { // Save - puts( "\n========================= Save =========================" ); - puts( "\nPress any key to save." ); + puts ("\n========================= Save ========================="); + puts ("\nPress any key to save."); c = getchar(); for( l = 0; l <= p; l++ ) { tapio[l] = buffer[l]; } l++; tapio[l] = 0x00; - puts( "Saving to tape." ); + puts ("Saving to tape."); error = dumpt( 'N', tapio, tapio+p ); if( error ) { - puts( "\nTape error." ); + puts ("\nTape error."); } else { @@ -121,20 +121,20 @@ int main(void) { putchar( '\n' ); } } - puts( "===================== Sym-1 Notepad ====================\n" ); + puts ("===================== Sym-1 Notepad ====================\n"); for( l = 0; l <= p; l++ ) { putchar( buffer[l] ); } } else if( c == 0x0C ) { // Load p = 0; - puts( "\nLoading from tape." ); + puts ("\nLoading from tape."); memset( buffer, 0, heap_size ); memset( tapio, 0, TAPIO_MAX_SIZE ); error = loadt( 'N' ); if( error ) { - puts( "\nTape error." ); - puts( "===================== Sym-1 Notepad ====================\n" ); + puts ("\nTape error."); + puts ("===================== Sym-1 Notepad ====================\n"); } else { @@ -148,7 +148,7 @@ int main(void) { for( l = 0; l < 25; l++ ) { putchar( '\n' ); } - puts( "===================== Sym-1 Notepad ====================\n" ); + puts ("===================== Sym-1 Notepad ====================\n"); for( l = 0; l <= p; l++ ) { putchar( buffer[l] ); @@ -162,7 +162,7 @@ int main(void) { for( l = 0; l < 25; l++ ) { putchar( '\n' ); } - puts( "===================== Sym-1 Notepad ====================\n" ); + puts ("===================== Sym-1 Notepad ====================\n"); } else if( c == 0x18 ) { // Exit writing = 0; @@ -170,8 +170,8 @@ int main(void) { } else { if( p >= heap_size - 1 ) { - puts( "\n========================= End =========================" ); - puts( "Buffer full." ); + puts ("\n========================= End ========================="); + puts ("Buffer full."); } else { if( c == '\n' ) { @@ -186,7 +186,7 @@ int main(void) { free( buffer ); - puts( "\nEnjoy your day!\n" ); + puts ("\nEnjoy your day!\n"); return 0; } diff --git a/targettest/sym1/symTiny.c b/targettest/sym1/symTiny.c index 27b8840d8..be7d02824 100644 --- a/targettest/sym1/symTiny.c +++ b/targettest/sym1/symTiny.c @@ -11,14 +11,14 @@ #include <stdio.h> #include <sym1.h> -int main(void) { +int main (void) { char c = 0x00; int d = 0x00; int l = 0x00; - puts( "Hello World!\n" ); + puts ("Hello World!\n"); - puts( "Type a line and press ENTER, please:\n" ); + puts ("Type a line and press ENTER, please:\n"); for( l = 0; l < 2; l++ ) { beep(); @@ -30,7 +30,7 @@ int main(void) { c = getchar(); } - puts( "\n\nThanks!\n" ); + puts ("\n\nThanks!\n"); for( l = 0; l < 5; l++ ) { beep(); From 5d90087e664bdd564f09c78b6cbacee2edef5561 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Wed, 16 Jun 2021 17:14:44 -0500 Subject: [PATCH 0958/2710] Add space after every function or statement, before parenthesis --- targettest/sym1/symDisplay.c | 30 +++++------ targettest/sym1/symHello.c | 16 +++--- targettest/sym1/symIO.c | 94 ++++++++++++++++---------------- targettest/sym1/symNotepad.c | 100 +++++++++++++++++------------------ targettest/sym1/symTiny.c | 10 ++-- 5 files changed, 125 insertions(+), 125 deletions(-) diff --git a/targettest/sym1/symDisplay.c b/targettest/sym1/symDisplay.c index 350d261f9..dce39f6b9 100644 --- a/targettest/sym1/symDisplay.c +++ b/targettest/sym1/symDisplay.c @@ -23,23 +23,23 @@ int main (void) { char c = 0x00; char buffer[41] = { 0x00 }; - puts( "\nType a message (40 chars max) and press ENTER, please:\n" ); + puts ("\nType a message (40 chars max) and press ENTER, please:\n"); - while( (c != '\n') && (i < 40) ) { + while ( (c != '\n') && (i < 40) ) { c = getchar(); buffer[i] = c; i++; - if( i == 40 ) { + if ( i == 40 ) { puts ("\n\n--- Reached 40 character limit. ---"); } } i--; // index is one past end - while( z == 0 ) { + while ( z == 0 ) { puts ("\n\nHow many times (0 for forever) to repeat?"); c = getchar(); - if( (c >= '0') && (c <= '9') ) { // between 1 and 9 loops allowed + if ( (c >= '0') && (c <= '9') ) {// between 1 and 9 loops allowed z = 1; // a number was pressed t = c - '0'; // convert char to int puts ("\n\nLook at the front panel.\n"); @@ -51,11 +51,11 @@ int main (void) { } z = 0; - while( (z < t) || (t == 0) ) { + while ( (z < t) || (t == 0) ) { z++; - putchar( '\r' ); // Send CR to console + putchar ( '\r' ); // Send CR to console DISPLAY.d0 = DISP_SPACE; // Clear the display DISPLAY.d1 = DISP_SPACE; @@ -65,15 +65,15 @@ int main (void) { DISPLAY.d5 = DISP_SPACE; DISPLAY.d6 = DISP_SPACE; - for( d = 0; d < flashes ; d++ ) { + for ( d = 0; d < flashes ; d++ ) { fdisp(); // Display } - for( l = 0; l <= i; l++ ) { + for ( l = 0; l <= i; l++ ) { displayable = 1; // Assume character is mapped - switch( buffer[l] ) { // Put the typed charaters + switch ( buffer[l] ) { // Put the typed charaters case '1': // into the display buffer DISPLAY.d6 = DISP_1; // one at a time break; @@ -321,9 +321,9 @@ int main (void) { displayable = 0; // Character not mapped } - if( displayable ) { + if ( displayable ) { - putchar( buffer[l] ); // Send it to the console + putchar ( buffer[l] ); // Send it to the console DISPLAY.d0 = DISPLAY.d1; // Scroll to the left DISPLAY.d1 = DISPLAY.d2; @@ -332,13 +332,13 @@ int main (void) { DISPLAY.d4 = DISPLAY.d5; DISPLAY.d5 = DISPLAY.d6; - for( d = 0; d < flashes ; d++ ) { + for ( d = 0; d < flashes ; d++ ) { fdisp(); // Display } } } - for( e = 0; e < 6; e++ ) { // Gradually fill the + for ( e = 0; e < 6; e++ ) { // Gradually fill the DISPLAY.d0 = DISPLAY.d1; // display with spaces DISPLAY.d1 = DISPLAY.d2; DISPLAY.d2 = DISPLAY.d3; @@ -346,7 +346,7 @@ int main (void) { DISPLAY.d4 = DISPLAY.d5; DISPLAY.d5 = DISP_SPACE; DISPLAY.d6 = DISP_SPACE; - for( d = 0; d < flashes ; d++ ) { + for ( d = 0; d < flashes ; d++ ) { fdisp(); // Display } } diff --git a/targettest/sym1/symHello.c b/targettest/sym1/symHello.c index 8ca3ac4aa..afc1d94c5 100644 --- a/targettest/sym1/symHello.c +++ b/targettest/sym1/symHello.c @@ -14,24 +14,24 @@ int main (void) { int d = 0x00; int l = 0x00; - printf( "\nHello World!\n\n" ); + printf ("\nHello World!\n\n"); - for( l = 0; l < 2; l++ ) { + for ( l = 0; l < 2; l++ ) { beep(); - for( d = 0; d < 10 ; d++ ) { + for ( d = 0; d < 10 ; d++ ) { } } - printf( "Type a line and press ENTER, please.\n\n" ); + printf ("Type a line and press ENTER, please.\n\n"); - while( c != '\n' ) { + while ( c != '\n' ) { c = getchar(); } - printf( "\n\nThanks!\n\n" ); + printf ("\n\nThanks!\n\n"); - for( l = 0; l < 5; l++ ) { + for ( l = 0; l < 5; l++ ) { beep(); - for( d = 0; d < 10 ; d++ ) { + for ( d = 0; d < 10 ; d++ ) { } } diff --git a/targettest/sym1/symIO.c b/targettest/sym1/symIO.c index 65bd6e2e1..50fefc303 100644 --- a/targettest/sym1/symIO.c +++ b/targettest/sym1/symIO.c @@ -31,11 +31,11 @@ int main (void) { char* vp = 0x00; char cmd[20] = { 0x00 }; - while( going ) { + while ( going ) { - putchar( '\r' ); - for( l = 0; l < 25; l++ ) { - putchar( '\n' ); + putchar ( '\r' ); + for ( l = 0; l < 25; l++ ) { + putchar ( '\n' ); } ddr1a = VIA1.ddra; @@ -53,11 +53,11 @@ int main (void) { puts ("================== Digital I/O Status =================="); puts (" Port1A Port1B Port2A Port2B Port3A Port3B" ); - printf( "DDR %02X %02X %02X %02X %02X %02X\n\r",ddr1a,ddr1b,ddr2a,ddr2b,ddr3a,ddr3b ); - printf( "IOR %02X %02X %02X %02X %02X %02X\n\r",ior1a,ior1b,ior2a,ior2b,ior3a,ior3b ); + printf ("DDR %02X %02X %02X %02X %02X %02X\n\r",ddr1a,ddr1b,ddr2a,ddr2b,ddr3a,ddr3b); + printf ("IOR %02X %02X %02X %02X %02X %02X\n\r",ior1a,ior1b,ior2a,ior2b,ior3a,ior3b); puts ("========================================================\n"); - if( instr ) { + if ( instr ) { puts ("You can set any register by typing 'register value' so"); puts ("as an example, to set register IOR2A with the top five"); puts ("bits off and the bottom three on, type 'IOR2A 07'."); @@ -69,97 +69,97 @@ int main (void) { instr = 0; } - printf( "\n Command: " ); + printf ("\n Command: "); - fgets(cmd, sizeof(cmd)-1, stdin); + fgets ( cmd, sizeof(cmd)-1, stdin ); cmd[strlen(cmd)-1] = '\0'; - if( strncasecmp(cmd, "quit", 4) == 0) { + if ( strncasecmp(cmd, "quit", 4) == 0 ) { going = 0; } - else if( strncasecmp(cmd, "help", 4) == 0) { + else if ( strncasecmp(cmd, "help", 4) == 0 ) { instr = 1; } - else if( strncasecmp(cmd, "ddr1a", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { + else if ( strncasecmp(cmd, "ddr1a", 5) == 0 ) { + vp = strchr ( cmd, ' ' ); + if ( vp ) { val = (unsigned char) strtol( vp, NULL, 0 ); VIA1.ddra = val; } } - else if( strncasecmp(cmd, "ior1a", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { + else if ( strncasecmp(cmd, "ior1a", 5) == 0 ) { + vp = strchr ( cmd, ' ' ); + if ( vp ) { val = (unsigned char) strtol( vp, NULL, 0 ); VIA1.pra = val; } } - else if( strncasecmp(cmd, "ddr1b", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { + else if ( strncasecmp(cmd, "ddr1b", 5) == 0 ) { + vp = strchr ( cmd, ' ' ); + if ( vp ) { val = (unsigned char) strtol( vp, NULL, 0 ); VIA1.ddrb = val; } } - else if( strncasecmp(cmd, "ior1b", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { + else if ( strncasecmp(cmd, "ior1b", 5) == 0 ) { + vp = strchr ( cmd, ' ' ); + if ( vp ) { val = (unsigned char) strtol( vp, NULL, 0 ); VIA1.prb = val; } } - else if( strncasecmp(cmd, "ddr2a", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { + else if ( strncasecmp(cmd, "ddr2a", 5) == 0 ) { + vp = strchr ( cmd, ' ' ); + if ( vp ) { val = (unsigned char) strtol( vp, NULL, 0 ); VIA2.ddra = val; } } - else if( strncasecmp(cmd, "ior2a", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { + else if ( strncasecmp(cmd, "ior2a", 5) == 0 ) { + vp = strchr ( cmd, ' ' ); + if ( vp ) { val = (unsigned char) strtol( vp, NULL, 0 ); VIA2.pra = val; } } - else if( strncasecmp(cmd, "ddr2b", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { + else if ( strncasecmp(cmd, "ddr2b", 5) == 0 ) { + vp = strchr ( cmd, ' ' ); + if ( vp ) { val = (unsigned char) strtol( vp, NULL, 0 ); VIA2.ddrb = val; } } - else if( strncasecmp(cmd, "ior2b", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { + else if ( strncasecmp(cmd, "ior2b", 5) == 0 ) { + vp = strchr ( cmd, ' ' ); + if ( vp ) { val = (unsigned char) strtol( vp, NULL, 0 ); VIA2.prb = val; } } - else if( strncasecmp(cmd, "ddr3a", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { + else if ( strncasecmp(cmd, "ddr3a", 5) == 0 ) { + vp = strchr ( cmd, ' ' ); + if ( vp ) { val = (unsigned char) strtol( vp, NULL, 0 ); VIA3.ddra = val; } } - else if( strncasecmp(cmd, "ior3a", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { + else if ( strncasecmp(cmd, "ior3a", 5) == 0 ) { + vp = strchr ( cmd, ' ' ); + if ( vp ) { val = (unsigned char) strtol( vp, NULL, 0 ); VIA3.pra = val; } } - else if( strncasecmp(cmd, "ddr3b", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { + else if ( strncasecmp(cmd, "ddr3b", 5) == 0 ) { + vp = strchr ( cmd, ' ' ); + if ( vp ) { val = (unsigned char) strtol( vp, NULL, 0 ); VIA3.ddrb = val; } } - else if( strncasecmp(cmd, "ior3b", 5) == 0) { - vp = strchr(cmd, ' '); - if( vp ) { + else if ( strncasecmp(cmd, "ior3b", 5) == 0 ) { + vp = strchr (cmd, ' ' ); + if ( vp ) { val = (unsigned char) strtol( vp, NULL, 0 ); VIA3.prb = val; } diff --git a/targettest/sym1/symNotepad.c b/targettest/sym1/symNotepad.c index 7a603bd93..1d0541ab6 100644 --- a/targettest/sym1/symNotepad.c +++ b/targettest/sym1/symNotepad.c @@ -34,53 +34,53 @@ int main (void) { heap_size = _heapmaxavail(); - if( heap_size > TAPIO_MAX_SIZE ) { // No need to malloc more than + if ( heap_size > TAPIO_MAX_SIZE ) { // No need to malloc more than heap_size = TAPIO_MAX_SIZE; // the interface allows } - buffer = malloc( heap_size ); - memset( buffer, 0x00, heap_size ); + buffer = malloc ( heap_size ); + memset ( buffer, 0x00, heap_size ); - if( buffer == 0x00 ) { + if ( buffer == 0x00 ) { puts ("Memory full."); running = 0; } tapio[0] = 0x00; // Check tape interface memory - if( tapio[0] != 0x00 ) + if ( tapio[0] != 0x00 ) error = 1; tapio[0] = 0xFF; - if( tapio[0] != 0xFF ) + if ( tapio[0] != 0xFF ) error = 1; tapio[TAPIO_MAX_SIZE] = 0x00; - if( tapio[TAPIO_MAX_SIZE] != 0x00 ) + if ( tapio[TAPIO_MAX_SIZE] != 0x00 ) error = 1; tapio[TAPIO_MAX_SIZE] = 0xFF; - if( tapio[TAPIO_MAX_SIZE] != 0xFF ) + if ( tapio[TAPIO_MAX_SIZE] != 0xFF ) error = 1; - if( error ) { - printf( "\nNo memory at location %p, aborting.\n", tapio ); + if ( error ) { + printf ("\nNo memory at location %p, aborting.\n", tapio); running = 0; } else { - memset( tapio, 0, TAPIO_MAX_SIZE ); + memset ( tapio, 0, TAPIO_MAX_SIZE ); } - while( running ) { + while ( running ) { - putchar( '\r' ); - for( l = 0; l < 25; l++ ) { - putchar( '\n' ); + putchar ( '\r' ); + for ( l = 0; l < 25; l++ ) { + putchar ( '\n' ); } puts ("===================== Sym-1 Notepad ===================="); - if( instruction_needed ) { + if ( instruction_needed ) { puts ("Enter text and you can save it to tape for reloading"); puts ("later. There are four special 'command' characters:\n"); puts (" Control-S Save to tape"); @@ -90,92 +90,92 @@ int main (void) { puts ("========================================================\n"); } - while( writing ) { + while ( writing ) { c = getchar(); - if( c == 0x08 ) { // Backspace - if( p > 0 ) { + if ( c == 0x08 ) { // Backspace + if ( p > 0 ) { buffer[p] = 0x00; p--; } } - else if( c == 0x13 ) { // Save + else if ( c == 0x13 ) { // Save puts ("\n========================= Save ========================="); puts ("\nPress any key to save."); c = getchar(); - for( l = 0; l <= p; l++ ) { + for ( l = 0; l <= p; l++ ) { tapio[l] = buffer[l]; } l++; tapio[l] = 0x00; puts ("Saving to tape."); - error = dumpt( 'N', tapio, tapio+p ); - if( error ) { + error = dumpt ( 'N', tapio, tapio+p ); + if ( error ) { puts ("\nTape error."); } else { - putchar( '\r' ); - for( l = 0; l < 25; l++ ) { - putchar( '\n' ); + putchar ( '\r' ); + for ( l = 0; l < 25; l++ ) { + putchar ( '\n' ); } } puts ("===================== Sym-1 Notepad ====================\n"); - for( l = 0; l <= p; l++ ) { - putchar( buffer[l] ); + for ( l = 0; l <= p; l++ ) { + putchar ( buffer[l] ); } } - else if( c == 0x0C ) { // Load + else if ( c == 0x0C ) { // Load p = 0; puts ("\nLoading from tape."); - memset( buffer, 0, heap_size ); - memset( tapio, 0, TAPIO_MAX_SIZE ); - error = loadt( 'N' ); - if( error ) { + memset ( buffer, 0, heap_size ); + memset ( tapio, 0, TAPIO_MAX_SIZE ); + error = loadt ( 'N' ); + if ( error ) { puts ("\nTape error."); puts ("===================== Sym-1 Notepad ====================\n"); } else { - for( l = 0; l <= heap_size; l++ ) { + for ( l = 0; l <= heap_size; l++ ) { buffer[l] = tapio[l]; } - p = strlen( buffer ); + p = strlen ( buffer ); - putchar( '\r' ); - for( l = 0; l < 25; l++ ) { - putchar( '\n' ); + putchar ( '\r' ); + for ( l = 0; l < 25; l++ ) { + putchar ( '\n' ); } puts ("===================== Sym-1 Notepad ====================\n"); - for( l = 0; l <= p; l++ ) { - putchar( buffer[l] ); + for ( l = 0; l <= p; l++ ) { + putchar ( buffer[l] ); } } } - else if( c == 0x03 ) { // Clear + else if ( c == 0x03 ) { // Clear p = 0; - memset( buffer, 0, heap_size ); - putchar( '\r' ); - for( l = 0; l < 25; l++ ) { - putchar( '\n' ); + memset ( buffer, 0, heap_size ); + putchar ( '\r' ); + for ( l = 0; l < 25; l++ ) { + putchar ( '\n' ); } puts ("===================== Sym-1 Notepad ====================\n"); } - else if( c == 0x18 ) { // Exit + else if ( c == 0x18 ) { // Exit writing = 0; running = 0; } else { - if( p >= heap_size - 1 ) { + if ( p >= heap_size - 1 ) { puts ("\n========================= End ========================="); puts ("Buffer full."); } else { - if( c == '\n' ) { - putchar( '\n' ); + if ( c == '\n' ) { + putchar ( '\n' ); } buffer[p] = c; } @@ -184,7 +184,7 @@ int main (void) { } } - free( buffer ); + free ( buffer ); puts ("\nEnjoy your day!\n"); diff --git a/targettest/sym1/symTiny.c b/targettest/sym1/symTiny.c index be7d02824..574ac36bc 100644 --- a/targettest/sym1/symTiny.c +++ b/targettest/sym1/symTiny.c @@ -20,21 +20,21 @@ int main (void) { puts ("Type a line and press ENTER, please:\n"); - for( l = 0; l < 2; l++ ) { + for ( l = 0; l < 2; l++ ) { beep(); - for( d = 0; d < 10 ; d++ ) { + for ( d = 0; d < 10 ; d++ ) { } } - while( c != '\n' ) { + while ( c != '\n' ) { c = getchar(); } puts ("\n\nThanks!\n"); - for( l = 0; l < 5; l++ ) { + for ( l = 0; l < 5; l++ ) { beep(); - for( d = 0; d < 10 ; d++ ) { + for ( d = 0; d < 10 ; d++ ) { } } From 85d345088dd46ed4529c156c671d72e7ec9f94ed Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Wed, 16 Jun 2021 17:19:28 -0500 Subject: [PATCH 0959/2710] Remove trailing two blank lines from libsrc/sym1/crt0.s --- libsrc/sym1/crt0.s | 2 -- 1 file changed, 2 deletions(-) diff --git a/libsrc/sym1/crt0.s b/libsrc/sym1/crt0.s index 47cc67f07..5d398b311 100644 --- a/libsrc/sym1/crt0.s +++ b/libsrc/sym1/crt0.s @@ -55,5 +55,3 @@ _exit: jsr donelib ; Run destructors sta TECHO jsr NACCES ; Lock System RAM rts ; Re-enter Sym-1 monitor - - From d6ef8326f9836a8f417bfc187daf57fab42806eb Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Wed, 16 Jun 2021 17:24:18 -0500 Subject: [PATCH 0960/2710] Remove trailing blank line from libsrc/sym1/display.s --- libsrc/sym1/display.s | 1 - 1 file changed, 1 deletion(-) diff --git a/libsrc/sym1/display.s b/libsrc/sym1/display.s index 1d3b0abfa..f3b2923d6 100644 --- a/libsrc/sym1/display.s +++ b/libsrc/sym1/display.s @@ -16,4 +16,3 @@ rts .endproc - From 5f4605c4fc0dc0f3266edcc811df31a67ef724e6 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Wed, 16 Jun 2021 17:28:19 -0500 Subject: [PATCH 0961/2710] Remove trailing blank lines from read.s, write.s and tapeio.s --- libsrc/sym1/read.s | 1 - libsrc/sym1/tapeio.s | 1 - libsrc/sym1/write.s | 1 - 3 files changed, 3 deletions(-) diff --git a/libsrc/sym1/read.s b/libsrc/sym1/read.s index a2549fd9c..c041664da 100644 --- a/libsrc/sym1/read.s +++ b/libsrc/sym1/read.s @@ -51,4 +51,3 @@ done: lda ptr3 rts ; Return count .endproc - diff --git a/libsrc/sym1/tapeio.s b/libsrc/sym1/tapeio.s index 13579dca7..078ea7abd 100644 --- a/libsrc/sym1/tapeio.s +++ b/libsrc/sym1/tapeio.s @@ -44,4 +44,3 @@ error: jmp return1 ; or 1 if not error: jmp return1 ; or 1 if not .endproc - diff --git a/libsrc/sym1/write.s b/libsrc/sym1/write.s index 7b7428b9b..dbe738468 100644 --- a/libsrc/sym1/write.s +++ b/libsrc/sym1/write.s @@ -49,4 +49,3 @@ done: lda ptr3 rts ; Return count .endproc - From 62da869e49bee55b3f0d7dab2dc7bdf9721b6f07 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Mon, 21 Jun 2021 21:34:19 +0200 Subject: [PATCH 0962/2710] doc: psg_silence: Remove empty notes The notes section of psg_silence (Creativision funcref) contained an empty Notes section, consisting of an empty <itemize> only. Newer sgmltools fail on this, as they insist on having an <item> element, or they fail compilation: [ 225s] Processing file ../doc/funcref.sgml [ 225s] onsgmls:/tmp/linuxdoc-tools.NfxbjODQbW/sgmltmp.funcref.01.precmdout:5884:9:E:end tag for "ITEMIZE" which is not finished Fixed this by removing the (empty) Notes section altogether. --- doc/funcref.sgml | 2 -- 1 file changed, 2 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 28faa068a..e6cb42a0f 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -5880,8 +5880,6 @@ void main (void) <tag/Declaration/<tt/void psg_silence (void);/ <tag/Description/The function resets the Programmable Sound Generator, then sends $9F, $BF, $DF, $FF to the PSG. -<tag/Notes/<itemize> -</itemize> <tag/Availability/cc65 <tag/See also/ <ref id="psg_delay" name="psg_delay">, From 52e43879298c2fb30c7bc6fd95fae3b3f1458793 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 12 Aug 2021 13:21:24 -0400 Subject: [PATCH 0963/2710] Added a program that tests the Commodore-specific directory functions. --- targettest/cbm/Makefile | 7 ++- targettest/cbm/cbmdir-test.c | 119 +++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 targettest/cbm/cbmdir-test.c diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index fb7af1a9a..298f80d62 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -30,10 +30,13 @@ else LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) endif -all: petscii.prg +all: petscii.prg cbmdir-test.prg petscii.prg: petscii.c $(CL) -t $(SYS) -O -o petscii.prg petscii.c +cbmdir-test.prg: cbmdir-test.c + $(CL) -t $(SYS) -Oris -o $@ $< + clean: - @$(DEL) petscii.prg 2>$(NULLDEV) + @$(DEL) petscii.prg cbmdir-test.prg 2>$(NULLDEV) diff --git a/targettest/cbm/cbmdir-test.c b/targettest/cbm/cbmdir-test.c new file mode 100644 index 000000000..0db9856b7 --- /dev/null +++ b/targettest/cbm/cbmdir-test.c @@ -0,0 +1,119 @@ +/* +** Tests the CBM-specific directory functions. +** +** 2021-08-12, Greg King +*/ + +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <conio.h> +#include <cbm.h> + + +/* device number */ +#define UNIT 8 + +/* directory patterm */ +static const char name[] = "$"; + + +static const char* const type[] = { + "DEL", + "CBM", + "DIR", + "LNK", + "???", + "Directory header", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "SEQ", + "PRG", + "USR", + "REL", + "VRP" +}; + +static const char* const access[] = { + "unknown", + "read-only", + "write-only", + "read/write" +}; + +static const char* const error[] = { + "", + "couldn't read it", + "", + "couldn't find start of file-name", + "couldn't find end of file-name", + "couldn't read file-type", + "premature end of file" +}; + + +int main(void) +{ + unsigned char go = 0; + unsigned char rc; + struct cbm_dirent E; + + /* Explain use, and wait for a key. */ + printf ("use the following keys:\n" + " g -> go ahead without stopping\n" + " q -> quit directory lister\n" + "tap any key to start ...\n\n"); + cgetc (); + + /* Open the directory. */ + if (cbm_opendir (1, UNIT, name) != 0) { + printf("error opening %s:\n %s\n", name, _stroserror (_oserror)); + return 1; + } + + /* Output the directory. */ + printf("contents of \"%s\":\n", name); + while ((rc = cbm_readdir (1, &E)) != 2) { + if (rc != 0) { + goto oops; + } + + printf (" name[]: \"%s\"\n", E.name); + printf (" size :%6u\n", E.size); + printf (" type : %s\n", type[E.type]); + printf (" access: %s\n", access[E.access > 3 ? 0 : E.access]); + printf ("----\n"); + + if (!go) { + switch (cgetc ()) { + case 'q': + goto done; + + case 'g': + go = 1; + } + } + } + + printf (" size :%6u free.\n", E.size); + +done: + /* Close the directory. */ + cbm_closedir (1); + return 0; + +oops: + if (rc <= 6) { + printf ("\ndirectory error:\n %s.\n", error[rc]); + } + cbm_closedir (1); + return 1; +} From fb7b880dc02cde747de55be1e69f4ba9f08ae286 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Thu, 9 Sep 2021 11:05:39 +0200 Subject: [PATCH 0964/2710] Create c-cpp.yml --- .github/workflows/c-cpp.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/workflows/c-cpp.yml diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml new file mode 100644 index 000000000..e3233268f --- /dev/null +++ b/.github/workflows/c-cpp.yml @@ -0,0 +1,23 @@ +name: C/C++ CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: configure + run: ./configure + - name: make + run: make + - name: make check + run: make check + - name: make distcheck + run: make distcheck From 28b1687aafc4c124cbb6664d20d4b0759125d350 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 26 Sep 2021 12:09:50 +0200 Subject: [PATCH 0965/2710] Be explicit about hardware flow control (RTS/CTS) being the only supported option. --- doc/apple2.sgml | 4 ++-- doc/apple2enh.sgml | 4 ++-- doc/atari.sgml | 6 +++--- doc/atmos.sgml | 9 +++++---- doc/c128.sgml | 6 +++--- doc/c64.sgml | 6 +++--- doc/cbm510.sgml | 8 ++++---- doc/cbm610.sgml | 8 ++++---- doc/plus4.sgml | 8 ++++---- 9 files changed, 30 insertions(+), 29 deletions(-) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index f957e1247..bd01b68dc 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -428,8 +428,8 @@ The names in the parentheses denote the symbols to be used for static linking of <tag><tt/a2.ssc.ser (a2_ssc_ser)/</tag> Driver for the Apple II Super Serial Card. Supports up to 19200 baud, - hardware flow control (RTS/CTS) and interrupt driven receives. Note - that because of the peculiarities of the 6551 chip transmits are not + requires hardware flow control (RTS/CTS) and does interrupt driven receives. + Note that because of the peculiarities of the 6551 chip transmits are not interrupt driven, and the transceiver blocks if the receiver asserts flow control because of a full buffer. diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 4aafbc256..56fc05e31 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -428,8 +428,8 @@ The names in the parentheses denote the symbols to be used for static linking of <tag><tt/a2e.ssc.ser (a2e_ssc_ser)/</tag> Driver for the Apple II Super Serial Card. Supports up to 19200 baud, - hardware flow control (RTS/CTS) and interrupt driven receives. Note - that because of the peculiarities of the 6551 chip transmits are not + requires hardware flow control (RTS/CTS) and does interrupt driven receives. + Note that because of the peculiarities of the 6551 chip transmits are not interrupt driven, and the transceiver blocks if the receiver asserts flow control because of a full buffer. diff --git a/doc/atari.sgml b/doc/atari.sgml index f2ced13e1..903895d17 100644 --- a/doc/atari.sgml +++ b/doc/atari.sgml @@ -675,9 +675,9 @@ The default callbacks definition (<tt/mouse_def_callbacks/) is an alias for the <sect1>RS232 device drivers<p> -Currently there is one RS232 driver. It uses the R: device (therefore -an R: driver needs to be installed) and was tested with the 850 -interface module. +Currently there is one RS232 driver. It supports up to 9600 baud, requires hardware flow control +(RTS/CTS) and uses the R: device (therefore an R: driver needs to be installed). It was tested +with the 850 interface module. <table> <tabular ca="rr"> diff --git a/doc/atmos.sgml b/doc/atmos.sgml index 3fd61abcf..cef7770e4 100644 --- a/doc/atmos.sgml +++ b/doc/atmos.sgml @@ -176,10 +176,11 @@ No mouse drivers are currently available for the Atmos. <tag><tt/atmos-acia.ser (atmos_acia_ser)/</tag> Driver for the Telestrat integrated serial controller and the Atmos with a - serial add-on. - Note that, because of the peculiarities of the 6551 chip, together with the - use of the NMI, transmits are not interrupt driven; and, the transceiver - blocks if the receiver asserts flow control because of a full buffer. + serial add-on. Supports up to 19200 baud, requires hardware flow control + (RTS/CTS) and does interrupt driven receives. Note that, because of the + peculiarities of the 6551 chip, together with the use of the NMI, transmits + are not interrupt driven; and, the transceiver blocks if the receiver + asserts flow control because of a full buffer. </descrip><p> diff --git a/doc/c128.sgml b/doc/c128.sgml index 8c62b6ad1..60306814c 100644 --- a/doc/c128.sgml +++ b/doc/c128.sgml @@ -324,9 +324,9 @@ The default drivers, <tt/mouse_stddrv (mouse_static_stddrv)/, point to <tt/c128- <descrip> <tag><tt/c128-swlink.ser (c128_swlink_ser)/</tag> - Driver for the SwiftLink cartridge. Supports up to 38400 BPS, hardware flow - control (RTS/CTS), and interrupt-driven receives. Note that, because of the - peculiarities of the 6551 chip, together with the use of the NMI, transmits + Driver for the SwiftLink cartridge. Supports up to 38400 baud, requires hardware + flow control (RTS/CTS) and does interrupt driven receives. Note that, because of + the peculiarities of the 6551 chip, together with the use of the NMI, transmits are not interrupt driven; and, the transceiver blocks if the receiver asserts flow control because of a full buffer. diff --git a/doc/c64.sgml b/doc/c64.sgml index 7e00f3b93..de37ed4b7 100644 --- a/doc/c64.sgml +++ b/doc/c64.sgml @@ -410,9 +410,9 @@ The default drivers, <tt/mouse_stddrv (mouse_static_stddrv)/, point to <tt/c64-1 <descrip> <tag><tt/c64-swlink.ser (c64_swlink_ser)/</tag> - Driver for the SwiftLink cartridge. Supports up to 38400 BPS, hardware flow - control (RTS/CTS), and interrupt-driven receives. Note that, because of the - peculiarities of the 6551 chip, together with the use of the NMI, transmits + Driver for the SwiftLink cartridge. Supports up to 38400 baud, requires hardware + flow control (RTS/CTS) and does interrupt driven receives. Note that, because of + the peculiarities of the 6551 chip, together with the use of the NMI, transmits are not interrupt driven; and, the transceiver blocks if the receiver asserts flow control because of a full buffer. diff --git a/doc/cbm510.sgml b/doc/cbm510.sgml index c208f3ead..86bed7607 100644 --- a/doc/cbm510.sgml +++ b/doc/cbm510.sgml @@ -231,10 +231,10 @@ The default drivers, <tt/mouse_stddrv (mouse_static_stddrv)/, point to <tt/cbm51 <tag><tt/cbm510-std.ser (cbm510_std_ser)/</tag> Driver for the 6551 ACIA chip built into the Commodore 510. Supports up to - 19200 BPS, hardware flow control (RTS/CTS), and interrupt-driven receives. - Note that, because of the peculiarities of the 6551 chip, transmits are not - interrupt driven; and, the transceiver blocks if the receiver asserts flow - control because of a full buffer. + 19200 baud, requires hardware flow control (RTS/CTS) and does interrupt driven + receives. Note that, because of the peculiarities of the 6551 chip, transmits + are not interrupt driven; and, the transceiver blocks if the receiver asserts + flow control because of a full buffer. </descrip><p> diff --git a/doc/cbm610.sgml b/doc/cbm610.sgml index 37a445dd1..d86950abc 100644 --- a/doc/cbm610.sgml +++ b/doc/cbm610.sgml @@ -212,10 +212,10 @@ No mouse drivers are currently available for the Commodore 610. <tag><tt/cbm610-std.ser (cbm610_std_ser)/</tag> Driver for the 6551 ACIA chip built into the Commodore 610. Supports up to - 19200 BPS, hardware flow control (RTS/CTS), and interrupt-driven receives. - Note that, because of the peculiarities of the 6551 chip, transmits are not - interrupt driven; and, the transceiver blocks if the receiver asserts flow - control because of a full buffer. + 19200 baud, requires hardware flow control (RTS/CTS) and does interrupt driven + receives. Note that, because of the peculiarities of the 6551 chip, transmits + are not interrupt driven; and, the transceiver blocks if the receiver asserts + flow control because of a full buffer. </descrip><p> diff --git a/doc/plus4.sgml b/doc/plus4.sgml index 645de5161..79a2597d0 100644 --- a/doc/plus4.sgml +++ b/doc/plus4.sgml @@ -195,10 +195,10 @@ No mouse drivers are currently available for the Plus/4. <tag><tt/plus4-stdser.ser (plus4_stdser_ser)/</tag> Driver for the 6551 ACIA chip built into the Plus/4. Supports up to 19200 - baud, hardware flow control (RTS/CTS) and interrupt driven receives. Note - that because of the peculiarities of the 6551 chip transmits are not - interrupt driven, and the transceiver blocks if the receiver asserts flow - control because of a full buffer. + baud, requires hardware flow control (RTS/CTS) and does interrupt driven + receives. Note that because of the peculiarities of the 6551 chip transmits + are not interrupt driven, and the transceiver blocks if the receiver asserts + flow control because of a full buffer. You need an adapter to use the builtin port, since the output levels available at the user port don't follow the RS232 standard. From eeaa111835d5c82cc821e120a4eba2d548bd2c32 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 28 Sep 2021 17:30:10 +0800 Subject: [PATCH 0966/2710] Fixed crash in Opt_a_toscmpbool caused by wrong order of condition checks. --- src/cc65/coptstop.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 23636e533..08f6c820e 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -1113,9 +1113,9 @@ static unsigned Opt_a_toscmpbool (StackOpData* D, const char* BoolTransformer) D->IP = D->OpIndex + 1; - if (!D->RhsMultiChg && - (D->Rhs.A.LoadEntry->Flags & CEF_DONT_REMOVE) == 0 && - (D->Rhs.A.Flags & LI_DIRECT) != 0) { + if (!D->RhsMultiChg && + (D->Rhs.A.Flags & LI_DIRECT) != 0 && + (D->Rhs.A.LoadEntry->Flags & CEF_DONT_REMOVE) == 0) { /* cmp */ AddOpLow (D, OP65_CMP, &D->Rhs); From 6ba8a385a0b81af5388f47d18ce45c3753cde6ba Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 28 Sep 2021 15:59:54 +0200 Subject: [PATCH 0967/2710] add test related tu issue #1562 --- test/val/bug1562.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 test/val/bug1562.c diff --git a/test/val/bug1562.c b/test/val/bug1562.c new file mode 100644 index 000000000..7e6c1751e --- /dev/null +++ b/test/val/bug1562.c @@ -0,0 +1,30 @@ + +/* bug 1562: cc65 generates incorrect code for logical expression with -O */ + +#include <stdio.h> +#include <string.h> + +int failures = 0; + +char input[256]; + +#define DEBUGTRUE(x) printf("%s=%d\n", #x, (x)); failures += (x) ? 0 : 1 + +#define DEBUGFALSE(x) printf("%s=%d\n", #x, (x)); failures += (x) ? 1 : 0 + +int main(void) { + char* r; + strcpy(input, "\"XYZ\""); + r = input+4; + DEBUGFALSE(*r != '"'); // = false + DEBUGTRUE(*r == '"'); // = true + DEBUGFALSE(*(r+1) == '"'); // = false + // Next answer should be false because + // (false || true && false) is false, but it is true with -O. + DEBUGFALSE(*r != '"' || *r == '"' && *(r+1) == '"'); + // Adding parens fixes it even with -O. + DEBUGFALSE(*r != '"' || (*r == '"' && *(r+1) == '"')); + + printf("failures: %d\n", failures); + return failures; +} From 86f19652022ed7c6cc5152c219ee9e8976f78d9e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 28 Sep 2021 18:55:23 +0200 Subject: [PATCH 0968/2710] added test related to issue #1552 fixed in pr #1571 --- test/val/bug1552.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 test/val/bug1552.c diff --git a/test/val/bug1552.c b/test/val/bug1552.c new file mode 100644 index 000000000..42f39eec6 --- /dev/null +++ b/test/val/bug1552.c @@ -0,0 +1,42 @@ + +/* + bug #1552 - crash in fuzix xec.c + + cc65 -t none -O bug1552.c +*/ + +#include <stdio.h> + +typedef struct trenod *TREPTR; +typedef struct whnod *WHPTR; + +struct trenod { + int tretyp; +}; + +struct whnod { + int whtyp; + TREPTR whtre; +}; + +int execute(TREPTR argt, int execflg, int *pf1, int *pf2) +{ + register TREPTR t; + int type; + switch (type) + { + case 6: + { + while ((execute(((WHPTR) t)->whtre, 0, NULL, NULL) == 0) == (type == 5)) { + + } + break; + } + } + return 0; +} + +int main(void) +{ + return execute((TREPTR)42, 2, (int *)3, (int *)4); +} From cf1c0b67747be04a6a0b9aabff4c1aae2f761214 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 28 Sep 2021 22:18:49 +0200 Subject: [PATCH 0969/2710] move hints on how to run binaries from the target specific pages to the intro page, where they should be. --- doc/gamate.sgml | 11 ++---- doc/intro.sgml | 94 ++++++++++++++++++++++++++++++++++++++++--------- doc/pce.sgml | 7 +--- 3 files changed, 80 insertions(+), 32 deletions(-) diff --git a/doc/gamate.sgml b/doc/gamate.sgml index 8e18ab76d..b61053ce8 100644 --- a/doc/gamate.sgml +++ b/doc/gamate.sgml @@ -3,7 +3,7 @@ <article> <title>Gamate System specific information for cc65 <author> -<url url="mailto:groepaz@gmx.net" name="Groepaz/Hitmen"> +<url url="mailto:groepaz@gmx.net" name="Groepaz"> <abstract> An overview over the Gamate runtime system as it is implemented for the @@ -117,14 +117,7 @@ following functions (and a few others): <sect>Other hints<p> <itemize> -<item>The Gamate is emulated by MESS (<url url="http://www.mess.org/">), -run like this: <tt>mess gamate -debug -window -skip_gameinfo -cart test.bin</tt> -</itemize> - -some resources on the Gamate: - -<itemize> -<item><url url="http://en.wikipedia.org/wiki/Gamate"> +<item>some resources on the Gamate: <url url="http://en.wikipedia.org/wiki/Gamate"> </itemize> <sect>License<p> diff --git a/doc/intro.sgml b/doc/intro.sgml index b2b141d10..0617b0ab3 100644 --- a/doc/intro.sgml +++ b/doc/intro.sgml @@ -6,6 +6,7 @@ <url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">,<newline> <url url="mailto:cbmnut@hushmail.com" name="CbmNut">,<newline> <url url="mailto:greg.king5@verizon.net" name="Greg King">,<newline> +<url url="mailto:groepaz@gmx.net" name="Groepaz">,<newline> <url url="mailto:stephan.muehlstrasser@web.de" name="Stephan Mühlstrasser"> <abstract> @@ -458,12 +459,8 @@ Substitute the name of a Commodore computer for that <tt/<sys>/: Start the desired version of the emulator (CBM610 programs run on the CBM II [<tt/xcbm2/] emulator). -In the Windows versions of VICE, choose <bf>File>Autoboot disk/tape -image...</bf>, choose your executable, and click <bf/OK/. - -In the Unix versions, hold down the mouse's first button. Move the pointer to -<bf>Smart-attach disk/tape...</bf>, and release the button. Choose your -executable, and click <bf/Autostart/. +Choose <bf>File>Autostart disk/tape image...</bf>, choose your executable, +and click <bf/OK/. The file has a 14-byte header which corresponds to a PRG-format BASIC program, consisting of a single line, similar to this: @@ -499,6 +496,29 @@ The output will appear on a separate line, and you will be returned to a BASIC prompt. +<sect1>Gamate<p> + +Before you can run the cartridge image produced by the linker, the binary has to +be patched using the <bf/gamate-fixcart/ tool that is included in the cc65 +package in the util/gamata directory. + +<tscreen><verb> +gamate-fixcart <image.bin> +</verb></tscreen> + +<sect2>MESS<p> +Available at <url +url="https://www.mamedev.org">: + +MESS (Multiple Emulator Super System) is a multi system emulator that emulates +various cc65 targets. It once started as a MAME fork, but was marged into MAME +again at some point. + +<tscreen><verb> +mess gamate -debug -window -skip_gameinfo -cart <image.bin> +</verb></tscreen> + + <sect1>GEOS<p> Available at <it/Click Here Software's/ <url url="http://cbmfiles.com/geos/index.html" name="GEOS download section">: @@ -535,17 +555,8 @@ feature on. </quote> <quote> -VICE even has different ways that depend on which operating system is running -the emulator. -<itemize> -<item>In Windows, you must click on <bf/Options/ (in an always visible menu). - Then, you must click on <bf/True drive emulation/. -<item>In Unix, you must <em/hold down/ the second button on your mouse. Move - the pointer down to <bf/Drive settings/. Then, move the pointer over to - <bf/Enable true drive emulation/. (If there is a check-mark in front of - those words, that feature already is turned on -- then, move the pointer - off of that menu.) Release the mouse button. -</itemize> +In VICE, got to <bf/Settings/ -> <bf/Settings/, then <bf/Peripherial devices/ -> +<bf/Drive/. Then, you must enable the <bf/True drive emulation/ checkbox. </quote> Find the <bf/CONVERT/ program on the boot disk [tap the 6-key; then, you @@ -572,6 +583,29 @@ directory notePad. Look at the eight file-positions on each page until you see The output is shown in a GEOS dialog box; click <bf/OK/ when you have finished reading it. +Alternatively you can use the <bf/c1541/ program that comes with VICE to write the +file to a disk image directly in GEOS format, so it can be used in GEOS directly +without having to use the <bf/CONVERT/ program. + +<tscreen><verb> +c1541 -attach geos.d64 -geoswrite hello1 +</verb></tscreen> + + +<sect1>Nintendo Entertainment System<p> + +<sect2>Mednafen (NES)<p> +Available at <url +url="https://mednafen.github.io/releases/">: + +Mednafen is a multi system emulator that emulates a couple of the supported +targets of cc65: Apple II/II+, Atari Lynx, Nintendo Entertainment System and +PC Engine/TurboGrafx 16. + +<tscreen><verb> +mednafen -force_module nes <image.bin> +</verb></tscreen> + <sect1>Ohio Scientific Challenger 1P<p> The <tt/osic1p/ runtime library returns to the boot prompt when the main() @@ -694,6 +728,32 @@ Press <RETURN>. After hitting the RETURN key, you should see the boot prompt again. +<sect1>PC Engine/TurboGrafx 16<p> + +For the cartridge image produced by the linker to work in emulators and on real +hardware, its content must be rearranged so the first 8k block becomes the last +8k block in the image. + +For example, for a 32k image this can be done using <bf/dd/ as follows: + +<tscreen><verb> +dd if=infile.bin bs=8K skip=3 > outfile.pce +dd if=infile.bin bs=8K count=3 >> outfile.pce +</verb></tscreen> + +<sect2>Mednafen<p> +Available at <url +url="https://mednafen.github.io/releases/">: + +Mednafen is a multi system emulator that emulates a couple of the supported +targets of cc65: Apple II/II+, Atari Lynx, Nintendo Entertainment System and +PC Engine/TurboGrafx 16. + +<tscreen><verb> +mednafen -force_module pce <image.pce> +</verb></tscreen> + + <sect1>Contributions wanted<p> We need your help! Recommended emulators and instructions for other targets diff --git a/doc/pce.sgml b/doc/pce.sgml index 42a1ca9d3..47eeabcfd 100644 --- a/doc/pce.sgml +++ b/doc/pce.sgml @@ -2,7 +2,7 @@ <article> <title>PC-Engine (TurboGrafx 16) System-specific information for cc65 -<author><url url="mailto:groepaz@gmx.net" name="Groepaz/Hitmen">,<newline> +<author><url url="mailto:groepaz@gmx.net" name="Groepaz">,<newline> <url url="mailto:greg.king5@verizon.net" name="Greg King"> <abstract> @@ -206,11 +206,6 @@ following functions (and a few others): <sect>Other hints<p> -<itemize> -<item><url url="https://mednafen.github.io/" name= "Mednafen"> is a good -emulator to use for the PC-Engine. -</itemize> - Some useful resources on PCE coding: <itemize> From 94445cd16ffdcd245e1c0d1a1f23a2375fac2ca9 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 28 Sep 2021 22:37:34 +0200 Subject: [PATCH 0970/2710] remove conio.pce from the default target and print a message instead --- targettest/pce/Makefile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/targettest/pce/Makefile b/targettest/pce/Makefile index 1ecc0566f..f91f0eed8 100644 --- a/targettest/pce/Makefile +++ b/targettest/pce/Makefile @@ -42,14 +42,15 @@ else COUNT := 1 endif -all: conio.pce +all: conio.bin + +%.bin: %.c + $(CL) -t pce $< -Wl -D__CARTSIZE__=${CARTSIZE} -m $*.map -o $@ + @echo "use 'make conio.pce' to produce a .pce file using dd" %.pce: %.bin dd if=$< bs=8K skip=${COUNT} > $@ dd if=$< bs=8K count=${COUNT} >> $@ -%.bin: %.c - $(CL) -t pce $< -Wl -D__CARTSIZE__=${CARTSIZE} -m $*.map -o $@ - clean: @$(DEL) conio.o conio.??? 2>$(NULLDEV) From fd8d51497c0867f42e3e9ff0a472cb9ad63ecd18 Mon Sep 17 00:00:00 2001 From: empathicqubit <empathicqubit@entan.gl> Date: Fri, 10 Sep 2021 21:09:22 +0200 Subject: [PATCH 0971/2710] Add --debug-tables <filename> option and output struct and union fields --- src/cc65/global.c | 7 +++-- src/cc65/global.h | 1 + src/cc65/main.c | 8 ++++- src/cc65/symtab.c | 74 +++++++++++++++++++++++++++++++++++++++++------ 4 files changed, 77 insertions(+), 13 deletions(-) diff --git a/src/cc65/global.c b/src/cc65/global.c index a337549fe..8b9838dc5 100644 --- a/src/cc65/global.c +++ b/src/cc65/global.c @@ -66,6 +66,7 @@ IntStack CodeSizeFactor = INTSTACK(100);/* Size factor for generated code */ IntStack DataAlignment = INTSTACK(1); /* Alignment for data */ /* File names */ -StrBuf DepName = STATIC_STRBUF_INITIALIZER; /* Name of dependencies file */ -StrBuf FullDepName = STATIC_STRBUF_INITIALIZER; /* Name of full dependencies file */ -StrBuf DepTarget = STATIC_STRBUF_INITIALIZER; /* Name of dependency target */ +StrBuf DepName = STATIC_STRBUF_INITIALIZER; /* Name of dependencies file */ +StrBuf FullDepName = STATIC_STRBUF_INITIALIZER; /* Name of full dependencies file */ +StrBuf DepTarget = STATIC_STRBUF_INITIALIZER; /* Name of dependency target */ +StrBuf DebugTableName = STATIC_STRBUF_INITIALIZER; /* Name of debug table dump file */ diff --git a/src/cc65/global.h b/src/cc65/global.h index b9bcf5550..266035346 100644 --- a/src/cc65/global.h +++ b/src/cc65/global.h @@ -77,6 +77,7 @@ extern IntStack DataAlignment; /* Alignment for data */ extern StrBuf DepName; /* Name of dependencies file */ extern StrBuf FullDepName; /* Name of full dependencies file */ extern StrBuf DepTarget; /* Name of dependency target */ +extern StrBuf DebugTableName; /* Name of debug table dump file */ diff --git a/src/cc65/main.c b/src/cc65/main.c index 5d1fd7487..38c4b4c9d 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -114,6 +114,7 @@ static void Usage (void) " --create-full-dep name\tCreate a full make dependency file\n" " --data-name seg\t\tSet the name of the DATA segment\n" " --debug\t\t\tDebug mode\n" + " --debug-tables name\t\tWrite symbol table debug info to a file\n" " --debug-info\t\t\tAdd debug info to object file\n" " --debug-opt name\t\tDebug optimization steps\n" " --debug-opt-output\t\tDebug output of each optimization step\n" @@ -490,7 +491,11 @@ static void OptDebug (const char* Opt attribute ((unused)), ++Debug; } - +static void OptDebugTables (const char* Opt, const char* Arg) +/* Dump tables to file */ +{ + FileNameOption (Opt, Arg, &DebugTableName); +} static void OptDebugInfo (const char* Opt attribute ((unused)), const char* Arg attribute ((unused))) @@ -861,6 +866,7 @@ int main (int argc, char* argv[]) { "--create-full-dep", 1, OptCreateFullDep }, { "--data-name", 1, OptDataName }, { "--debug", 0, OptDebug }, + { "--debug-tables", 1, OptDebugTables }, { "--debug-info", 0, OptDebugInfo }, { "--debug-opt", 1, OptDebugOpt }, { "--debug-opt-output", 0, OptDebugOptOutput }, diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 5d7bd1436..64016339c 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -37,6 +37,7 @@ #include <stdlib.h> #include <stdarg.h> #include <string.h> +#include <errno.h> /* common */ #include "check.h" @@ -68,8 +69,6 @@ /* Data */ /*****************************************************************************/ - - /* An empty symbol table */ SymTable EmptySymTab = { 0, /* PrevTab */ @@ -98,6 +97,7 @@ static SymTable* LabelTab = 0; static SymTable* SPAdjustTab = 0; static SymTable* FailSafeTab = 0; /* For errors */ +static FILE* DebugTableFile = 0; /*****************************************************************************/ /* struct SymTable */ @@ -219,11 +219,25 @@ unsigned GetLexicalLevel (void) return LexicalLevel; } - - void EnterGlobalLevel (void) /* Enter the program global lexical level */ { + const char* OutName = NULL; + if (!SB_IsEmpty (&DebugTableName)) { + OutName = SB_GetConstBuf (&DebugTableName); + } + + if (OutName) { + /* Open the table file */ + DebugTableFile = fopen (OutName, "w"); + if (DebugTableFile == 0) { + Error ("Cannot create table dump file '%s': %s", OutName, strerror (errno)); + } + } + else if (Debug) { + DebugTableFile = stdout; + } + /* Safety */ PRECONDITION (++LexicalLevel == LEX_LEVEL_GLOBAL); @@ -240,8 +254,6 @@ void EnterGlobalLevel (void) FailSafeTab = NewSymTable (SYMTAB_SIZE_GLOBAL); } - - void LeaveGlobalLevel (void) /* Leave the program global lexical level */ { @@ -252,9 +264,41 @@ void LeaveGlobalLevel (void) CheckSymTable (SymTab0); /* Dump the tables if requested */ - if (Debug) { - PrintSymTable (SymTab0, stdout, "Global symbol table"); - PrintSymTable (TagTab0, stdout, "Global tag table"); + if (DebugTableFile) { + SymEntry* Entry; + StrBuf* Header; + + PrintSymTable (SymTab0, DebugTableFile, "Global symbol table"); + PrintSymTable (TagTab0, DebugTableFile, "Global tag table"); + + Entry = TagTab0->SymHead; + if (Entry) { + fputs ("\nGlobal struct and union definitions", DebugTableFile); + fputs ("\n=========================\n", DebugTableFile); + + do { + if (!((Entry->Flags & SC_STRUCT) || (Entry->Flags & SC_UNION)) || !Entry->V.S.SymTab) { + continue; + } + + Header = NewStrBuf(); + if(Entry->Flags & SC_STRUCT) { + SB_AppendStr (Header, "SC_STRUCT: "); + } + else { + SB_AppendStr (Header, "SC_UNION: "); + } + SB_AppendStr (Header, Entry->Name); + SB_Terminate (Header); + + PrintSymTable (Entry->V.S.SymTab, DebugTableFile, SB_GetConstBuf (Header)); + } while ((Entry = Entry->NextSym)); + } + + /* Close the file */ + if (DebugTableFile != stdout && fclose (DebugTableFile) != 0) { + Error ("Error closing table dump file '%s': %s", SB_GetConstBuf(&DebugTableName), strerror (errno)); + } } /* Don't delete the symbol and struct tables! */ @@ -337,6 +381,18 @@ void LeaveFunctionLevel (void) CheckSymTable (SymTab); CheckSymTable (LabelTab); + /* Dump the tables if requested */ + if (DebugTableFile) { + StrBuf* SymbolHeader = NewStrBuf(); + + SB_AppendStr (SymbolHeader, "SC_FUNC: "); + SB_AppendStr (SymbolHeader, CurrentFunc->FuncEntry->AsmName); + SB_AppendStr (SymbolHeader, ": Symbol table"); + SB_Terminate (SymbolHeader); + + PrintSymTable (SymTab, DebugTableFile, SB_GetConstBuf(SymbolHeader)); + } + /* Drop the label table if it is empty */ if (LabelTab->SymCount == 0) { FreeSymTable (LabelTab); From 2338e70709294a93d69d1f8bdc50d51509566b24 Mon Sep 17 00:00:00 2001 From: cc65 Owner <41281059+cc65-github@users.noreply.github.com> Date: Wed, 29 Sep 2021 10:37:44 +0200 Subject: [PATCH 0972/2710] travis-ci.org -> travis-ci.com --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2c84b7430..36a4b56cd 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [Wiki](https://github.com/cc65/wiki/wiki) -[![Build Status](https://api.travis-ci.org/cc65/cc65.svg?branch=master)](https://travis-ci.org/cc65/cc65/builds) +[![Build Status](https://app.travis-ci.com/cc65/cc65.svg?branch=master)](https://app.travis-ci.com/cc65/cc65) cc65 is a complete cross development package for 65(C)02 systems, including a powerful macro assembler, a C compiler, linker, librarian and several From 674a5439096b6bb16a3622e45b8a5f0c5218c998 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Wed, 29 Sep 2021 12:33:51 +0200 Subject: [PATCH 0973/2710] Parallelize build Travis CI defaults to 2 core environments. --- .travis.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0b25e5d16..c9068193a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,14 +9,14 @@ jobs: - sudo apt-get update - sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass script: - - make bin USER_CFLAGS=-Werror - - make lib QUIET=1 - - make test QUIET=1 - - make samples + - make -j2 bin USER_CFLAGS=-Werror + - make -j2 lib QUIET=1 + - make -j2 test QUIET=1 + - make -j2 samples - make -C src clean - - make bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- + - make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- - make -C samples clean - - make doc zip + - make -j2 doc zip after_success: - make -f Makefile.travis From c48e821c4bfe9d4bd178a742261808c79bd65e1a Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Wed, 29 Sep 2021 14:48:09 +0200 Subject: [PATCH 0974/2710] Don --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c9068193a..4b0919a10 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ jobs: script: - make -j2 bin USER_CFLAGS=-Werror - make -j2 lib QUIET=1 - - make -j2 test QUIET=1 + - make test QUIET=1 - make -j2 samples - make -C src clean - make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- From f6636635fae4ed40bb687ed13eff5f8e91e56883 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Tue, 5 Oct 2021 19:17:16 +0200 Subject: [PATCH 0975/2710] targettest/atari/multi-xex.cfg: fix comments --- targettest/atari/multi-xex.cfg | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/targettest/atari/multi-xex.cfg b/targettest/atari/multi-xex.cfg index 7558aa895..f13a9eabe 100644 --- a/targettest/atari/multi-xex.cfg +++ b/targettest/atari/multi-xex.cfg @@ -5,13 +5,13 @@ MEMORY { ZP: file = "", define = yes, start = $0082, size = $007E; # First memory segment in file, show message LOADER: file = %O, start = $680, size = 128; - # First memory segment in file, load over COLOR registers: + # Second memory segment in file, load over COLOR registers: COLOR: file = %O, start = $2C4, size = 5; - # Second memory segment, load at page 6: + # Third memory segment, load at page 6: PAGE6: file = %O, start = $600, size = 128; - # Third memory segment in file, load over SDLST register: + # Fourth memory segment in file, load over SDLST register: SDLST: file = %O, start = $230, size = 2; - # Main segment, load at "STARTADDRESS" + # Fifth/Main segment, load at "STARTADDRESS" MAIN: file = %O, start = %S, size = $BC20 - %S; } FILES { From c3d7a900844673cc4a85f0c132a2faa00886f711 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Tue, 5 Oct 2021 19:19:54 +0200 Subject: [PATCH 0976/2710] targettest/atari/ostype.c: remove warnings --- targettest/atari/ostype.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targettest/atari/ostype.c b/targettest/atari/ostype.c index 552735ac8..5561f64fd 100644 --- a/targettest/atari/ostype.c +++ b/targettest/atari/ostype.c @@ -9,9 +9,9 @@ int main(void) { + char *rev; unsigned int t, v; unsigned char palntsc; - unsigned char *rev; unsigned char minor; unsigned char c; From 4f87c7cc645c72903f99c78abcf52124b1e14623 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 23 Oct 2021 01:18:17 +0200 Subject: [PATCH 0977/2710] move samples that only work for a specific target into subdirs named the same as the target --- samples/Makefile | 23 +-- samples/atari2600/Makefile | 59 +++++++ .../{atari2600hello.c => atari2600/hello.c} | 0 samples/cbm/Makefile | 164 ++++++++++++++++++ samples/{ => cbm}/fire.c | 0 samples/{ => cbm}/nachtm.c | 0 samples/{ => cbm}/plasma.c | 0 samples/readme.txt | 89 ++++++---- samples/supervision/Makefile | 59 +++++++ .../hello.c} | 0 10 files changed, 343 insertions(+), 51 deletions(-) create mode 100644 samples/atari2600/Makefile rename samples/{atari2600hello.c => atari2600/hello.c} (100%) create mode 100644 samples/cbm/Makefile rename samples/{ => cbm}/fire.c (100%) rename samples/{ => cbm}/nachtm.c (100%) rename samples/{ => cbm}/plasma.c (100%) create mode 100644 samples/supervision/Makefile rename samples/{supervisionhello.c => supervision/hello.c} (100%) diff --git a/samples/Makefile b/samples/Makefile index 7e5c1934d..db7bb0d84 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -154,7 +154,7 @@ endif # Lists of subdirectories # disasm depends on cpp -DIRLIST = tutorial geos +DIRLIST = tutorial geos atari2600 supervision cbm # -------------------------------------------------------------------------- # Lists of executables @@ -205,28 +205,22 @@ EXELIST_bbc = \ EXELIST_c64 = \ ascii \ enumdevdir \ - fire \ gunzip65 \ hello \ mandelbrot \ mousedemo \ multdemo \ - nachtm \ ovrldemo \ - plasma \ sieve \ tgidemo EXELIST_c128 = \ ascii \ enumdevdir \ - fire \ gunzip65 \ hello \ mandelbrot \ mousedemo \ - nachtm \ - plasma \ sieve \ tgidemo @@ -237,19 +231,15 @@ EXELIST_c16 = \ EXELIST_cbm510 = \ ascii \ - fire \ gunzip65 \ hello \ mousedemo \ - nachtm \ - plasma \ sieve EXELIST_cbm610 = \ ascii \ gunzip65 \ hello \ - nachtm \ sieve EXELIST_creativision = \ @@ -302,7 +292,6 @@ EXELIST_plus4 = \ enumdevdir \ gunzip65 \ hello \ - plasma \ sieve EXELIST_sim6502 = \ @@ -311,7 +300,7 @@ EXELIST_sim6502 = \ EXELIST_sim65c02 = $(EXELIST_sim6502) EXELIST_supervision = \ - supervisionhello + notavailable EXELIST_telestrat = \ ascii \ @@ -398,7 +387,7 @@ $(C1541) -attach $@ -write "$(subst ?,$(SPACE),$(file))" $(notdir $(file)),s >$( endef # D64_WRITE_SEQ_recipe samples.d64: samples - @$(C1541) -format samples,AA d64 $@ >$(NULLDEV) + @$(C1541) -format "samples,00" d64 $@ >$(NULLDEV) $(foreach file,$(EXELIST_$(SYS)),$(D64_WRITE_PRG_recipe)) $(foreach file,$(OVERLAYLIST),$(D64_WRITE_PRG_recipe)) $(foreach file,$(EMD) $(MOU) $(TGI),$(D64_WRITE_SEQ_recipe)) @@ -460,11 +449,17 @@ install: $(INSTALL) -d $(DESTDIR)$(samplesdir) $(INSTALL) -d $(DESTDIR)$(samplesdir)/geos $(INSTALL) -d $(DESTDIR)$(samplesdir)/tutorial + $(INSTALL) -d $(DESTDIR)$(samplesdir)/atari2600 + $(INSTALL) -d $(DESTDIR)$(samplesdir)/cbm + $(INSTALL) -d $(DESTDIR)$(samplesdir)/supervision $(INSTALL) -m0644 *.* $(DESTDIR)$(samplesdir) $(INSTALL) -m0644 readme.txt $(DESTDIR)$(samplesdir) $(INSTALL) -m0644 Makefile $(DESTDIR)$(samplesdir) $(INSTALL) -m0644 geos/*.* $(DESTDIR)$(samplesdir)/geos $(INSTALL) -m0644 tutorial/*.* $(DESTDIR)$(samplesdir)/tutorial + $(INSTALL) -m0644 atari2600/*.* $(DESTDIR)$(samplesdir)/atari2600 + $(INSTALL) -m0644 cbm/*.* $(DESTDIR)$(samplesdir)/cbm + $(INSTALL) -m0644 supervision/*.* $(DESTDIR)$(samplesdir)/supervision # -------------------------------------------------------------------------- # Packaging rules diff --git a/samples/atari2600/Makefile b/samples/atari2600/Makefile new file mode 100644 index 000000000..a02ec9e80 --- /dev/null +++ b/samples/atari2600/Makefile @@ -0,0 +1,59 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= atari2600 + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 + SP = $(CC65_HOME)/bin/sp65 +else + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) + SP := $(if $(wildcard ../../bin/sp65*),../../bin/sp65,sp65) +endif + +EXELIST_atari2600 = \ + hello + +ifneq ($(EXELIST_$(SYS)),) +samples: $(EXELIST_$(SYS)) +else +samples: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: atari 2600 samples not available for" $(SYS) +else +# suppress the "nothing to be done for 'samples' message + @echo > $(NULLDEV) +endif + +hello: hello.c + $(CL) -t $(SYS) -O -o hello -m hello.map hello.c + +clean: + @$(DEL) $(EXELIST_atari2600) 2>$(NULLDEV) + @$(DEL) *.map 2>$(NULLDEV) diff --git a/samples/atari2600hello.c b/samples/atari2600/hello.c similarity index 100% rename from samples/atari2600hello.c rename to samples/atari2600/hello.c diff --git a/samples/cbm/Makefile b/samples/cbm/Makefile new file mode 100644 index 000000000..989710932 --- /dev/null +++ b/samples/cbm/Makefile @@ -0,0 +1,164 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= c64 + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 + SP = $(CC65_HOME)/bin/sp65 +else + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) + SP := $(if $(wildcard ../../bin/sp65*),../../bin/sp65,sp65) +endif + +ifneq ($(filter disk samples.%,$(MAKECMDGOALS)),) + ifdef CC65_HOME + TARGET_PATH = $(CC65_HOME)/target + else + TARGET_PATH := $(if $(wildcard ../target),../target,$(shell $(CL) --print-target-path)) + endif + + # If TARGET_PATH contains spaces then it is presumed to contain escaped spaces. GNU make + # has very limited support for paths containing spaces. $(wildcard) is the only function + # that is aware of escaped spaces. However, $(wildcard) never returns paths with escaped + # spaces !!! So if it e.g. finds 4 files in a path with 2 spaces then one ends up with a + # return value consisting of 12 plain words :-(( + # + # Fortunately we can work around that behaviour here because we know that the files we + # are looking for have known extensions. So we can $(filter) the in our example above 12 + # words for file extensions so we come up with 4 path fragments. Then we remove those + # path fragments with $(notdir) from the file names. + # + # So far so good. But here we want to process files from different paths in a single + # recipe further down below and therefore want to prepend the paths to the files with + # $(addprefix). However, $(foreach) isn't aware of escaped spaces (only $(wildcard) is). + # Therefore, we need to replace the spaces with some other character temporarily in order + # to have $(foreach) generate one invocation per file. We use the character '?' for that + # purpose here, just because it is known to not be part of file names. + # + # Inside the recipe generated per file we then replace the '?' again with a space. As we + # want to be compatible with cmd.exe for execution we're not using an escaped space but + # rather double-quote the whole path. + # + # Note: The "strange" $(wildcard) further down below just serves the purpose to unescape + # spaces for cmd.exe. This could have as well been done with another $(subst). + + SUBST_TARGET_PATH := $(subst \$(SPACE),?,$(TARGET_PATH)) + + EMD := $(wildcard $(TARGET_PATH)/$(SYS)/drv/emd/*) + MOU := $(wildcard $(TARGET_PATH)/$(SYS)/drv/mou/*) + TGI := $(wildcard $(TARGET_PATH)/$(SYS)/drv/tgi/*) + + EMD := $(addprefix $(SUBST_TARGET_PATH)/$(SYS)/drv/emd/,$(notdir $(filter %.emd,$(EMD)))) + MOU := $(addprefix $(SUBST_TARGET_PATH)/$(SYS)/drv/mou/,$(notdir $(filter %.mou,$(MOU)))) + TGI := $(addprefix $(SUBST_TARGET_PATH)/$(SYS)/drv/tgi/,$(notdir $(filter %.tgi,$(TGI)))) + + # This one comes with the VICE emulator. + # See http://vice-emu.sourceforge.net/ + C1541 ?= c1541 +endif + +DISK_c64 = samples.d64 + +EXELIST_c64 = \ + fire \ + plasma \ + nachtm + +EXELIST_c128 = \ + fire \ + plasma \ + nachtm + +EXELIST_cbm510 = \ + fire \ + plasma \ + nachtm + +EXELIST_cbm610 = \ + nachtm + +EXELIST_plus4 = \ + plasma + +EXELIST_c16 = \ + notavailable + +EXELIST_pet = \ + notavailable + +EXELIST_vic20 = \ + notavailable + +ifneq ($(EXELIST_$(SYS)),) +samples: $(EXELIST_$(SYS)) +else +samples: notavailable +endif + +disk: $(DISK_$(SYS)) + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: cbm samples not available for" $(SYS) +else +# suppress the "nothing to be done for 'samples' message + @echo > $(NULLDEV) +endif + +fire: fire.c + $(CL) -t $(SYS) -O -o fire -m fire.map fire.c +plasma: plasma.c + $(CL) -t $(SYS) -O -o plasma -m plasma.map plasma.c +nachtm: nachtm.c + $(CL) -t $(SYS) -O -o nachtm -m nachtm.map nachtm.c + +# -------------------------------------------------------------------------- +# Rule to make a CBM disk with all samples. Needs the c1541 program that comes +# with the VICE emulator. + +define D64_WRITE_PRG_recipe + +$(C1541) -attach $@ -write "$(subst ?,$(SPACE),$(file))" $(notdir $(file)),p >$(NULLDEV) + +endef # D64_WRITE_PRG_recipe + +define D64_WRITE_SEQ_recipe + +$(C1541) -attach $@ -write "$(subst ?,$(SPACE),$(file))" $(notdir $(file)),s >$(NULLDEV) + +endef # D64_WRITE_SEQ_recipe + +samples.d64: samples + @$(C1541) -format "samples,00" d64 $@ >$(NULLDEV) + $(foreach file,$(EXELIST_$(SYS)),$(D64_WRITE_PRG_recipe)) +# $(foreach file,$(OVERLAYLIST),$(D64_WRITE_PRG_recipe)) +# $(foreach file,$(EMD) $(MOU) $(TGI),$(D64_WRITE_SEQ_recipe)) + +clean: + @$(DEL) $(EXELIST_$(SYS)) 2>$(NULLDEV) + @$(DEL) *.map 2>$(NULLDEV) + @$(DEL) $(DISK_$(SYS)) 2>$(NULLDEV) diff --git a/samples/fire.c b/samples/cbm/fire.c similarity index 100% rename from samples/fire.c rename to samples/cbm/fire.c diff --git a/samples/nachtm.c b/samples/cbm/nachtm.c similarity index 100% rename from samples/nachtm.c rename to samples/cbm/nachtm.c diff --git a/samples/plasma.c b/samples/cbm/plasma.c similarity index 100% rename from samples/plasma.c rename to samples/cbm/plasma.c diff --git a/samples/readme.txt b/samples/readme.txt index 3c9247c39..56b275764 100644 --- a/samples/readme.txt +++ b/samples/readme.txt @@ -10,11 +10,13 @@ Please note: similar systems. If you're using Windows, then consider installing Cygwin or MSys2. - * The makefile specifies the C64 as the default target system because all - but three of the programs run on that platform. When compiling for another - system, you will have to change the line that specifies the target system - at the top of the makefile, specify the system with SYS=<target> on the - make command line, or set a SYS environment variable. + * The makefile specifies the C64 as the default target system because most + of the programs run on that platform. When compiling for another system, + you will have to change the line that specifies the target system at the + top of the makefile, specify the system with SYS=<target> on the make + command line, or set a SYS environment variable. For example: + + make SYS=apple2 * Use "make disk" to build a disk image with all sample programs. @@ -31,11 +33,6 @@ Description: Shows the ASCII (or ATASCII, PETSCII) codes of typed <greg.king5@verizon.com>. Platforms: All platforms with conio or stdio (compile time configurable). ------------------------------------------------------------------------------ -Name: atari2600hello -Description: A "Hello world" type program. -Platforms: Runs on only the Atari 2600 Video Console System. - ----------------------------------------------------------------------------- Name: diodemo Description: A disc copy program written and contributed by Oliver @@ -52,12 +49,6 @@ Platforms: All systems with device enumeration and directory access (currently the Commodore machines, the Commander X16, and the Apple ][). ------------------------------------------------------------------------------ -Name: fire -Description: Another graphics demo written by groepaz/hitmen. -Platforms: The program currently is running on only the C64, but should - be portable to the C128 and CBM510 (and maybe more machines). - ----------------------------------------------------------------------------- Name: gunzip65 Description: A gunzip utility for 6502-based machines, written by Piotr @@ -76,8 +67,8 @@ Platforms: Runs on all platforms that support conio, which means: ----------------------------------------------------------------------------- Name: mandelbrot Description: A mandelbrot demo using integer arithmetic. The demo was - written by groepaz/hitmen, and converted to cc65 using TGI - graphics by Stephan Haubenthal. + written by groepaz, and converted to cc65 using TGI graphics + by Stephan Haubenthal. Platforms: Runs on all platforms that have TGI support: Apple ][, Atari, C64, C128, Oric Atmos and Telestrat, GEOS, NES, and Lynx. @@ -97,13 +88,6 @@ Platforms: All systems with an overlay linker config., disk directory access, and EMD support (currently the C64, the C128, the Atari, and the Apple ][). ------------------------------------------------------------------------------ -Name: nachtm -Description: Plays "Eine kleine Nachtmusik" by Wolfgang Amadeus Mozart. -Platforms: All systems that have the Commodore SID (Sound Interface - Device): - C64, C128, CBM510, CBM610. - ----------------------------------------------------------------------------- Name: overlaydemo Description: Shows how to load overlay files from disk. Written and @@ -111,13 +95,6 @@ Description: Shows how to load overlay files from disk. Written and Platforms: All systems with an overlay linker config. (currently the C64, the C128, the Atari, and the Apple ][). ------------------------------------------------------------------------------ -Name: plasma -Description: A fancy graphics demo written by groepaz/hitmen. -Platforms: The program needs a VIC-II or a TED, so it runs on the following - systems: - C64, C128, CBM510, Plus/4. - ----------------------------------------------------------------------------- Name: sieve Description: Implements the "Sieve of Eratosthenes" as a way to find all @@ -128,11 +105,6 @@ Platforms: All systems with conio and clock support: Commander X16, Apple ][ (without timing due to missing clock support). ------------------------------------------------------------------------------ -Name: supervisionhello -Description: A "Hello world" type program. -Platforms: Runs on only the Watara Supervision game console. - ----------------------------------------------------------------------------- Name: tgidemo Description: Shows some of the graphics capabilities of the "Tiny Graphics @@ -140,3 +112,46 @@ Description: Shows some of the graphics capabilities of the "Tiny Graphics Platforms: Runs on all platforms that have TGI support: Apple ][, Atari, C64, C128, Oric Atmos and Telestrat, GEOS, NES, and Lynx. + +============================================================================= + +Platform specific samples follow: + +atari 2600: +----------- + +Name: hello +Description: A "Hello world" type program. +Platforms: Runs on only the Atari 2600 Video Console System. +----------------------------------------------------------------------------- + +cbm: +---- + +Name: fire +Description: Another graphics demo written by groepaz. +Platforms: C64, C128, CBM510 + +----------------------------------------------------------------------------- +Name: nachtm +Description: Plays "Eine kleine Nachtmusik" by Wolfgang Amadeus Mozart. +Platforms: All systems that have the Commodore SID (Sound Interface + Device): + C64, C128, CBM510, CBM610. + +----------------------------------------------------------------------------- +Name: plasma +Description: A fancy graphics demo written by groepaz. +Platforms: The program needs a VIC-II or a TED, so it runs on the following + systems: + C64, C128, CBM510, Plus/4. +----------------------------------------------------------------------------- + + +supervision: +------------ + +Name: hello +Description: A "Hello world" type program. +Platforms: Runs on only the Watara Supervision game console. +---------------------------------------------------------------------------- diff --git a/samples/supervision/Makefile b/samples/supervision/Makefile new file mode 100644 index 000000000..5829b3f01 --- /dev/null +++ b/samples/supervision/Makefile @@ -0,0 +1,59 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= supervision + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 + SP = $(CC65_HOME)/bin/sp65 +else + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) + SP := $(if $(wildcard ../../bin/sp65*),../../bin/sp65,sp65) +endif + +EXELIST_supervision = \ + hello + +ifneq ($(EXELIST_$(SYS)),) +samples: $(EXELIST_$(SYS)) +else +samples: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: supervision samples not available for" $(SYS) +else +# suppress the "nothing to be done for 'samples' message + @echo > $(NULLDEV) +endif + +hello: hello.c + $(CL) -t $(SYS) -O -o hello -m hello.map hello.c + +clean: + @$(DEL) $(EXELIST_supervision) 2>$(NULLDEV) + @$(DEL) *.map 2>$(NULLDEV) diff --git a/samples/supervisionhello.c b/samples/supervision/hello.c similarity index 100% rename from samples/supervisionhello.c rename to samples/supervision/hello.c From f796c260910cf6047623c3c550fa1153f4e839ae Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 21 Nov 2021 22:56:02 +0100 Subject: [PATCH 0978/2710] Added hint on clock(). clock() isn't available on the Apple II - and never will be. --- doc/library.sgml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/library.sgml b/doc/library.sgml index 303809c59..bcd5db86e 100644 --- a/doc/library.sgml +++ b/doc/library.sgml @@ -59,6 +59,9 @@ Functions that are <em/not/ available: Functions not available on all supported systems: <itemize> + <item><tt>clock</tt>: Support depends on the capabilities of the target + machine. + <p> <item><tt>fopen/fread/fwrite/fclose/fputs/fgets/fscanf</tt>: The functions are built on open/read/write/close. Those latter functions are not available on all systems. From 6637e288318f10cf789faedb3ef46f2323691fa3 Mon Sep 17 00:00:00 2001 From: Gabriele Gorla <44734244+gorlik@users.noreply.github.com> Date: Wed, 8 Sep 2021 15:00:20 -0700 Subject: [PATCH 0979/2710] saves 2 bytes in the standard c64 joystick driver remove redundant code and add jmp to the common sequence two more bytes could be saved at the expense of longer sequence with interrupts disabled by moving sei/cli --- libsrc/c64/joy/c64-stdjoy.s | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/libsrc/c64/joy/c64-stdjoy.s b/libsrc/c64/joy/c64-stdjoy.s index c983d81bb..d11093fba 100644 --- a/libsrc/c64/joy/c64-stdjoy.s +++ b/libsrc/c64/joy/c64-stdjoy.s @@ -93,9 +93,7 @@ joy1: lda #$7F sta CIA1_PRA lda CIA1_PRB cli - and #$1F - eor #$1F - rts + jmp end ; Read joystick 2 @@ -107,8 +105,6 @@ joy2: ldx #0 lda CIA1_PRA sty CIA1_DDRA cli - and #$1F +end: and #$1F eor #$1F rts - - From 1918f0ac9b81e119256b6c71b6bab79e3d55d47a Mon Sep 17 00:00:00 2001 From: gorlik <44734244+gorlik@users.noreply.github.com> Date: Mon, 13 Sep 2021 12:27:37 -0700 Subject: [PATCH 0980/2710] adding missing VIC register definition to c64.inc --- asminc/c64.inc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/asminc/c64.inc b/asminc/c64.inc index 2cfc50db4..d131c7860 100644 --- a/asminc/c64.inc +++ b/asminc/c64.inc @@ -77,6 +77,8 @@ VIC_SPR_EXP_Y := $D017 VIC_SPR_EXP_X := $D01D VIC_SPR_MCOLOR := $D01C VIC_SPR_BG_PRIO := $D01B +VIC_SPR_COLL := $D01E +VIC_SPR_BG_COLL := $D01F VIC_SPR_MCOLOR0 := $D025 VIC_SPR_MCOLOR1 := $D026 From a7e6f9840ca12798629efaf7e992b12d31a929e4 Mon Sep 17 00:00:00 2001 From: Gerhard Gruber <gerhard.gruber@gdata.de> Date: Wed, 22 Sep 2021 11:38:49 +0200 Subject: [PATCH 0981/2710] VIC-20 and C128 cfg added for ASM programming --- cfg/c128-asm.cfg | 20 ++++++++++++++++++++ cfg/vic20-asm.cfg | 19 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 cfg/c128-asm.cfg create mode 100644 cfg/vic20-asm.cfg diff --git a/cfg/c128-asm.cfg b/cfg/c128-asm.cfg new file mode 100644 index 000000000..0da296c71 --- /dev/null +++ b/cfg/c128-asm.cfg @@ -0,0 +1,20 @@ +FEATURES { + STARTADDRESS: default = $1c01; +} +SYMBOLS { + __LOADADDR__: type = import; +} +MEMORY { + ZP: file = "", start = $0002, size = $00FE, define = yes; + LOADADDR: file = %O, start = %S - 2, size = $0002; + MAIN: file = %O, start = %S, size = $D000 - %S; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp, optional = yes; + LOADADDR: load = LOADADDR, type = ro; + EXEHDR: load = MAIN, type = ro, optional = yes; + CODE: load = MAIN, type = rw; + RODATA: load = MAIN, type = ro, optional = yes; + DATA: load = MAIN, type = rw, optional = yes; + BSS: load = MAIN, type = bss, optional = yes, define = yes; +} diff --git a/cfg/vic20-asm.cfg b/cfg/vic20-asm.cfg new file mode 100644 index 000000000..7ab70888c --- /dev/null +++ b/cfg/vic20-asm.cfg @@ -0,0 +1,19 @@ +FEATURES { + STARTADDRESS: default = $1001; +} +SYMBOLS { + __LOADADDR__: type = import; +} +MEMORY { + ZP: file = "", start = $0002, size = $001A, define = yes; + LOADADDR: file = %O, start = $1001, size = $0002; + MAIN: file = %O, start = %S, size = $0DF3 - %S; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp, optional = yes; + LOADADDR: load = LOADADDR, type = ro; + CODE: load = MAIN, type = ro; + RODATA: load = MAIN, type = ro; + DATA: load = MAIN, type = rw; + BSS: load = MAIN, type = bss, optional = yes, define = yes; +} From cb0dca0ca76d0ea8abd582fdf283d73bb616895d Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Wed, 24 Nov 2021 14:17:18 +0100 Subject: [PATCH 0982/2710] No more Travis-CI ! --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 2a31d42be..f6142e2c1 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,6 @@ [Wiki](https://github.com/cc65/wiki/wiki) -[![Build Status](https://app.travis-ci.com/cc65/cc65.svg?branch=master)](https://app.travis-ci.com/cc65/cc65) - cc65 is a complete cross development package for 65(C)02 systems, including a powerful macro assembler, a C compiler, linker, librarian and several other tools. From 622d2c4e39f948056e87bb8fd1d03993895e582d Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Wed, 24 Nov 2021 14:30:19 -0600 Subject: [PATCH 0983/2710] Added Sym-1 link to documentation doc/index.sgml --- doc/index.sgml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/index.sgml b/doc/index.sgml index 01325529d..3bb085bf6 100644 --- a/doc/index.sgml +++ b/doc/index.sgml @@ -172,6 +172,9 @@ <tag><htmlurl url="supervision.html" name="supervision.html"></tag> Topics specific to the Watara Supervision Console. + <tag><htmlurl url="sym1.html" name="sym1.html"></tag> + Topics specific to the Synertek Systems Sym-1. + <tag><htmlurl url="telestrat.html" name="telestrat.html"></tag> Topics specific to the Oric Telestrat. From 1d36f255ecf401f1c69ce5f337b936fd0cf08154 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Wed, 24 Nov 2021 14:30:19 -0600 Subject: [PATCH 0984/2710] Added Sym-1 link to documentation doc/index.sgml --- doc/index.sgml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/index.sgml b/doc/index.sgml index 01325529d..3bb085bf6 100644 --- a/doc/index.sgml +++ b/doc/index.sgml @@ -172,6 +172,9 @@ <tag><htmlurl url="supervision.html" name="supervision.html"></tag> Topics specific to the Watara Supervision Console. + <tag><htmlurl url="sym1.html" name="sym1.html"></tag> + Topics specific to the Synertek Systems Sym-1. + <tag><htmlurl url="telestrat.html" name="telestrat.html"></tag> Topics specific to the Oric Telestrat. From 2d96f79bc732bf5ba36f9dc05cf425aa0e54a9da Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 1 Dec 2021 09:45:17 +0800 Subject: [PATCH 0985/2710] Added and used new utility type functions for bit-fields. Fixed GetUnderlyingTypeCode() for bit-fields with widths > 16. --- src/cc65/assignment.c | 34 ++++------------------ src/cc65/datatype.c | 66 ++++++++++++++++++++++++++++++++++++++++--- src/cc65/datatype.h | 6 ++++ src/cc65/expr.c | 4 +-- src/cc65/loadexpr.c | 36 ++++++++++------------- src/cc65/loadexpr.h | 5 +++- 6 files changed, 95 insertions(+), 56 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 05a6d9a96..e6d1e4526 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -156,19 +156,8 @@ void DoIncDecBitField (ExprDesc* Expr, long Val, unsigned KeepResult) unsigned ChunkFlags; const Type* ChunkType; - /* If the bit-field fits within one byte, do the following operations - ** with bytes. - */ - if ((Expr->Type->A.B.Width - 1U) / CHAR_BITS == - (Expr->Type->A.B.Offs + Expr->Type->A.B.Width - 1U) / CHAR_BITS) { - ChunkType = GetUnderlyingType (Expr->Type); - } else { - /* We use the declarartion integer type as the chunk type. - ** Note: A bit-field will not occupy bits located in bytes more than - ** that of its declaration type in cc65. So this is OK. - */ - ChunkType = Expr->Type + 1; - } + /* Determine the type to operate on the whole byte chunk containing the bit-field */ + ChunkType = GetBitFieldChunkType (Expr->Type); /* Determine code generator flags */ Flags = TypeOf (Expr->Type) | CF_FORCECHAR; @@ -254,19 +243,8 @@ static void OpAssignBitField (const GenDesc* Gen, ExprDesc* Expr, const char* Op ED_Init (&Expr2); Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; - /* If the bit-field fits within one byte, do the following operations - ** with bytes. - */ - if ((Expr->Type->A.B.Width - 1U) / CHAR_BITS == - (Expr->Type->A.B.Offs + Expr->Type->A.B.Width - 1U) / CHAR_BITS) { - ChunkType = GetUnderlyingType (Expr->Type); - } else { - /* We use the declarartion integer type as the chunk type. - ** Note: A bit-field will not occupy bits located in bytes more than - ** that of its declaration type in cc65. So this is OK. - */ - ChunkType = Expr->Type + 1; - } + /* Determine the type to operate on the whole byte chunk containing the bit-field */ + ChunkType = GetBitFieldChunkType (Expr->Type); /* Determine code generator flags */ Flags = TypeOf (Expr->Type) | CF_FORCECHAR; @@ -620,8 +598,8 @@ void OpAssign (const GenDesc* Gen, ExprDesc* Expr, const char* Op) if (IsClassStruct (ltype)) { /* Copy the struct or union by value */ CopyStruct (Expr, &Expr2); - } else if (IsTypeBitField (ltype)) { - /* Special care is needed for bit-field 'op=' */ + } else if (IsTypeFragBitField (ltype)) { + /* Special care is needed for bit-fields if they don't fit in full bytes */ OpAssignBitField (Gen, Expr, Op); } else { /* Normal straight 'op=' */ diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index cc313bd21..bb7c40476 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -551,6 +551,24 @@ unsigned long GetIntegerTypeMax (const Type* Type) +static unsigned GetBitFieldMinimalTypeSize (unsigned BitWidth) +/* Return the size of the smallest integer type that may have BitWidth bits */ +{ + /* Since all integer types supported in cc65 for bit-fields have sizes that + ** are powers of 2, we can just use this bit-twiddling trick. + */ + unsigned V = (int)(BitWidth - 1U) / (int)CHAR_BITS; + V |= V >> 1; + V |= V >> 2; + V |= V >> 4; + V |= V >> 8; + V |= V >> 16; + + /* Return the result size */ + return V + 1U; +} + + static unsigned TypeOfBySize (unsigned Size) /* Get the code generator replacement type of the object by its size */ { @@ -591,8 +609,7 @@ const Type* GetUnderlyingType (const Type* Type) ** bit-field, instead of the type used in the declaration, the truly ** underlying of the bit-field. */ - unsigned Size = (int)(Type->A.B.Width - 1) / (int)CHAR_BITS + 1; - switch (Size) { + switch (GetBitFieldMinimalTypeSize (Type->A.B.Width)) { case SIZEOF_CHAR: Type = IsSignSigned (Type) ? type_schar : type_uchar; break; case SIZEOF_INT: Type = IsSignSigned (Type) ? type_int : type_uint; break; case SIZEOF_LONG: Type = IsSignSigned (Type) ? type_long : type_ulong; break; @@ -646,8 +663,7 @@ TypeCode GetUnderlyingTypeCode (const Type* Type) ** bit-field, instead of the type used in the declaration, the truly ** underlying of the bit-field. */ - unsigned Size = (int)(Type->A.B.Width - 1) / (int)CHAR_BITS + 1; - switch (Size) { + switch (GetBitFieldMinimalTypeSize (Type->A.B.Width)) { case SIZEOF_CHAR: Underlying = T_CHAR; break; case SIZEOF_INT: Underlying = T_INT; break; case SIZEOF_LONG: Underlying = T_LONG; break; @@ -663,6 +679,39 @@ TypeCode GetUnderlyingTypeCode (const Type* Type) +const Type* GetBitFieldChunkType (const Type* Type) +/* Get the type needed to operate on the byte chunk containing the bit-field */ +{ + unsigned ChunkSize; + if ((Type->A.B.Width - 1U) / CHAR_BITS == + (Type->A.B.Offs + Type->A.B.Width - 1U) / CHAR_BITS) { + /* T bit-field fits within its underlying type */ + return GetUnderlyingType (Type); + } + + ChunkSize = GetBitFieldMinimalTypeSize (Type->A.B.Offs + Type->A.B.Width); + if (ChunkSize < SizeOf (Type + 1)) { + /* The end of the bit-field is offset by some bits so that it requires + ** more bytes to be accessed as a whole than its underlying type does. + ** Note: In cc65 the bit offset is always less than CHAR_BITS. + */ + switch (ChunkSize) { + case SIZEOF_CHAR: return IsSignSigned (Type) ? type_schar : type_uchar; + case SIZEOF_INT: return IsSignSigned (Type) ? type_int : type_uint; + case SIZEOF_LONG: return IsSignSigned (Type) ? type_long : type_ulong; + default: return IsSignSigned (Type) ? type_int : type_uint; + } + } + + /* We can always use the declarartion integer type as the chunk type. + ** Note: A bit-field will not occupy bits located in bytes more than that + ** of its declaration type in cc65. So this is OK. + */ + return Type + 1; +} + + + unsigned SizeOf (const Type* T) /* Compute size of object represented by type array. */ { @@ -1127,6 +1176,15 @@ Type* NewBitFieldType (const Type* T, unsigned BitOffs, unsigned BitWidth) +int IsTypeFragBitField (const Type* T) +/* Return true if this is a bit-field that shares byte space with other fields */ +{ + return IsTypeBitField (T) && + (T->A.B.Offs != 0 || T->A.B.Width != CHAR_BITS * SizeOf (T)); +} + + + int IsClassObject (const Type* T) /* Return true if this is a fully described object type */ { diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index e36d7c82e..c60023944 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -313,6 +313,9 @@ TypeCode GetUnderlyingTypeCode (const Type* Type); ** Return TCode if it is not scalar. */ +const Type* GetBitFieldChunkType (const Type* Type); +/* Get the type needed to operate on the byte chunk containing the bit-field */ + unsigned SizeOf (const Type* T); /* Compute size of object represented by type array. */ @@ -556,6 +559,9 @@ INLINE int IsTypeBitField (const Type* T) # define IsTypeBitField(T) (IsTypeSignedBitField (T) || IsTypeUnsignedBitField (T)) #endif +int IsTypeFragBitField (const Type* T); +/* Return true if this is a bit-field that shares byte space with other fields */ + #if defined(HAVE_INLINE) INLINE int IsTypeStruct (const Type* T) /* Return true if this is a struct type */ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 7343702ea..3b3754665 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -398,7 +398,7 @@ static void DoInc (ExprDesc* Expr, unsigned KeepResult) Val = IsTypePtr (Expr->Type) ? CheckedSizeOf (Expr->Type + 1) : 1; /* Special treatment is needed for bit-fields */ - if (IsTypeBitField (Expr->Type)) { + if (IsTypeFragBitField (Expr->Type)) { DoIncDecBitField (Expr, Val, KeepResult); return; } @@ -485,7 +485,7 @@ static void DoDec (ExprDesc* Expr, unsigned KeepResult) Val = IsTypePtr (Expr->Type) ? CheckedSizeOf (Expr->Type + 1) : 1; /* Special treatment is needed for bit-fields */ - if (IsTypeBitField (Expr->Type)) { + if (IsTypeFragBitField (Expr->Type)) { DoIncDecBitField (Expr, -Val, KeepResult); return; } diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index a742087b7..4b7f8e279 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -110,6 +110,8 @@ static void LoadAddress (unsigned Flags, ExprDesc* Expr) void LoadExpr (unsigned Flags, struct ExprDesc* Expr) /* Load an expression into the primary register if it is not already there. +** If Flags contains any CF_TYPEMASK bits, it then overrides the codegen type +** info that would be otherwise taken from the expression type. ** Note: This function can't modify the content in Expr since there are many ** instances of the "GetCodePos + LoadExpr (maybe indirectly) + RemoveCode" ** code pattern here and there which assumes that Expr should be unchanged, @@ -125,32 +127,24 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) int AdjustBitField = 0; unsigned BitFieldFullWidthFlags = 0; if ((Flags & CF_TYPEMASK) == 0) { - if (IsTypeBitField (Expr->Type)) { - unsigned EndBit = Expr->Type->A.B.Offs + Expr->Type->A.B.Width; - AdjustBitField = Expr->Type->A.B.Offs != 0 || (EndBit != CHAR_BITS && EndBit != INT_BITS); - - /* TODO: This probably needs to be guarded by AdjustBitField when long bit-fields are - ** supported. - */ - Flags |= (EndBit <= CHAR_BITS) ? CF_CHAR : CF_INT; - if (IsSignUnsigned (Expr->Type)) { - Flags |= CF_UNSIGNED; - } + if (IsTypeFragBitField (Expr->Type)) { + /* We need to adjust the bits in this case. */ + AdjustBitField = 1; /* Flags we need operate on the whole bit-field, without CF_FORCECHAR. */ - BitFieldFullWidthFlags = Flags; + BitFieldFullWidthFlags = Flags | TypeOf (Expr->Type); + + /* Flags we need operate on the whole chunk containing the bit-field. */ + Flags |= TypeOf (GetBitFieldChunkType (Expr->Type)); /* If we're adjusting, then only load a char (not an int) and do only char ops; - ** We will clear the high byte in the adjustment. CF_FORCECHAR does nothing if the - ** type is not CF_CHAR. + ** We will clear the high byte in the adjustment. CF_FORCECHAR does nothing if + ** the type is not CF_CHAR; + ** If adjusting, then we're sign extending manually, so do everything unsigned + ** to make shifts faster. */ - if (AdjustBitField) { - /* If adjusting, then we're sign extending manually, so do everything unsigned - ** to make shifts faster. - */ - Flags |= CF_UNSIGNED | CF_FORCECHAR; - BitFieldFullWidthFlags |= CF_UNSIGNED; - } + Flags |= CF_UNSIGNED | CF_FORCECHAR; + BitFieldFullWidthFlags |= CF_UNSIGNED; } else { /* If Expr is an incomplete ESY type, bail out */ if (IsIncompleteESUType (Expr->Type)) { diff --git a/src/cc65/loadexpr.h b/src/cc65/loadexpr.h index c9e70e1f6..90862e33a 100644 --- a/src/cc65/loadexpr.h +++ b/src/cc65/loadexpr.h @@ -55,7 +55,10 @@ struct ExprDesc; void LoadExpr (unsigned Flags, struct ExprDesc* Expr); -/* Load an expression into the primary register if it is not already there. */ +/* Load an expression into the primary register if it is not already there. +** If Flags contains any CF_TYPEMASK bits, it then overrides the codegen type +** info that would be otherwise taken from the expression type. +*/ From 970607cde5c0afc96fd8af35b4fdf27173a2a986 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 5 Dec 2021 12:21:01 +0800 Subject: [PATCH 0986/2710] Optimized g_testbitfield() and g_extractbitfield() with enhanced support for long bit-fields. --- src/cc65/codegen.c | 295 ++++++++++++++++++++++++++++++++++----------- src/cc65/codegen.h | 4 +- 2 files changed, 229 insertions(+), 70 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 5bfc6696b..c79863d0e 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -43,6 +43,7 @@ #include "addrsize.h" #include "check.h" #include "cpu.h" +#include "shift.h" #include "strbuf.h" #include "xmalloc.h" #include "xsprintf.h" @@ -4560,110 +4561,268 @@ void g_initstatic (unsigned InitLabel, unsigned VarLabel, unsigned Size) void g_testbitfield (unsigned Flags, unsigned BitOffs, unsigned BitWidth) -/* Test bit-field in ax. */ +/* Test bit-field in primary. */ { - unsigned EndBit = BitOffs + BitWidth; + /* Since the end is inclusive and cannot be negative here, we subtract 1 from the sum */ + unsigned MSBit = BitOffs + BitWidth - 1U; + unsigned Bytes = MSBit / CHAR_BITS + 1U - BitOffs / CHAR_BITS; + unsigned HeadMask = (0xFF << (BitOffs % CHAR_BITS)) & 0xFF; + unsigned TailMask = ((1U << (MSBit % CHAR_BITS + 1U)) - 1U) & 0xFF; + unsigned UntestedBytes = ((1U << Bytes) - 1U) << (BitOffs / CHAR_BITS); + + /* We don't use these flags for now. Could CF_NOKEEP be potentially interesting? */ + Flags &= ~CF_STYPEMASK; /* If we need to do a test, then we avoid shifting (ASR only shifts one bit at a time, - ** so is slow) and just AND with the appropriate mask, then test the result of that. + ** so is slow) and just AND the head and tail bytes with the appropriate mask, then + ** OR the results with the rest bytes. */ - - /* Avoid overly large shift on host platform. */ - if (EndBit == sizeof (unsigned long) * CHAR_BIT) { - g_and (Flags | CF_CONST, (~0UL << BitOffs)); - } else { - g_and (Flags | CF_CONST, ((1UL << EndBit) - 1) & (~0UL << BitOffs)); + if (Bytes == 1) { + HeadMask = TailMask = HeadMask & TailMask; } - /* TODO: When long bit-fields are supported, an optimization to test only 3 bytes when - ** EndBit <= 24 is possible. - */ - g_test (Flags | CF_CONST); + /* Get the head byte */ + switch (BitOffs / CHAR_BITS) { + case 0: + if (HeadMask == 0xFF && Bytes == 1) { + AddCodeLine ("tax"); + UntestedBytes &= ~0x1; + } + break; + case 1: + if (HeadMask != 0xFF || TailMask == 0xFF) { + AddCodeLine ("txa"); + UntestedBytes &= ~0x2; + } + break; + case 2: + if (HeadMask != 0xFF || TailMask == 0xFF) { + AddCodeLine ("lda sreg"); + UntestedBytes &= ~0x4; + } + break; + case 3: + /* In this case we'd have HeadMask == TailMask and only 1 byte, but anyways... */ + if (HeadMask != 0xFF || TailMask == 0xFF) { + AddCodeLine ("lda sreg+1"); + UntestedBytes &= ~0x8; + } + break; + default: + break; + } + + /* Keep in mind that the head is NOT always "Byte 0" */ + if (HeadMask != 0xFF) { + AddCodeLine ("and #$%02X", HeadMask); + /* Abuse the "Byte 0" flag so that this head content will be saved by the routine */ + UntestedBytes |= 0x1; + } + + /* If there is only 1 byte to test, we have done with it */ + if (Bytes == 1) { + return; + } + + /* Handle the tail byte */ + if (TailMask != 0xFF) { + /* If we have to do any more masking operation, register A will be used for that, + ** and its current content in it must be saved. + */ + if (UntestedBytes & 0x1) { + AddCodeLine ("sta tmp1"); + } + + /* Test the tail byte */ + switch (MSBit / CHAR_BITS) { + case 1: + AddCodeLine ("txa"); + UntestedBytes &= ~0x2; + break; + case 2: + AddCodeLine ("lda sreg"); + UntestedBytes &= ~0x4; + break; + case 3: + AddCodeLine ("lda sreg+1"); + UntestedBytes &= ~0x8; + break; + default: + break; + } + AddCodeLine ("and #$%02X", TailMask); + + if (UntestedBytes & 0x1) { + AddCodeLine ("ora tmp1"); + } + } + + /* OR the rest bytes together, which could never need masking */ + if (UntestedBytes & 0x2) { + AddCodeLine ("stx tmp1"); + AddCodeLine ("ora tmp1"); + } + if (UntestedBytes & 0x4) { + AddCodeLine ("ora sreg"); + } + if (UntestedBytes & 0x8) { + AddCodeLine ("ora sreg+1"); + } } void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, int IsSigned, unsigned BitOffs, unsigned BitWidth) -/* Extract bits from bit-field in ax. */ +/* Extract bits from bit-field in primary. */ { unsigned EndBit = BitOffs + BitWidth; + unsigned long ZeroExtendMask = 0; /* Zero if we don't need to zero-extend. */ /* Shift right by the bit offset; no code is emitted if BitOffs is zero */ g_asr (Flags | CF_CONST, BitOffs); - /* Since we have now shifted down, we could do char ops when the width fits in a char, but we - ** also need to clear (or set) the high byte since we've been using CF_FORCECHAR up to now. - */ - unsigned Mask = (1U << BitWidth) - 1; - /* To zero-extend, we will and by the width if the field doesn't end on a char or ** int boundary. If it does end on a boundary, then zeros will have already been shifted in, ** but we need to clear the high byte for char. g_and emits no code if the mask is all ones. ** This is here so the signed and unsigned branches can use it. */ - unsigned ZeroExtendMask = 0; /* Zero if we don't need to zero-extend. */ if (EndBit == CHAR_BITS) { /* We need to clear the high byte, since CF_FORCECHAR was set. */ ZeroExtendMask = 0xFF; - } else if (EndBit != INT_BITS) { - ZeroExtendMask = (1U << BitWidth) - 1; + } else if (EndBit != INT_BITS && EndBit != LONG_BITS) { + ZeroExtendMask = shl_l (1UL, BitWidth) - 1UL; } /* Handle signed bit-fields. */ if (IsSigned) { - /* Save .A because the sign-bit test will destroy it. */ - AddCodeLine ("tay"); - - /* Check sign bit */ unsigned SignBitPos = BitWidth - 1U; unsigned SignBitByte = SignBitPos / CHAR_BITS; unsigned SignBitPosInByte = SignBitPos % CHAR_BITS; - unsigned SignBitMask = 1U << SignBitPosInByte; - /* Move the correct byte to .A. This can be only .X for now, - ** but more cases will be needed to support long. - */ - switch (SignBitByte) { - case 0: - break; - case 1: - AddCodeLine ("txa"); - break; - default: - FAIL ("Invalid Byte for sign bit"); - } - - /* Test the sign bit */ - AddCodeLine ("and #$%02X", SignBitMask); - unsigned ZeroExtendLabel = GetLocalLabel (); - AddCodeLine ("beq %s", LocalLabelName (ZeroExtendLabel)); - - /* Get back .A and sign-extend if required; operating on the full result needs - ** to sign-extend into the high byte, too. - */ - AddCodeLine ("tya"); - g_or (FullWidthFlags | CF_CONST, ~Mask); - - /* We can generate a branch, instead of a jump, here because we know - ** that only a few instructions will be put between here and where - ** DoneLabel will be defined. - */ - unsigned DoneLabel = GetLocalLabel (); - g_branch (DoneLabel); - - /* Get back .A, then zero-extend. We need to duplicate the TYA, rather than move it before - ** the branch to share with the other label, because TYA changes some condition codes. - */ - g_defcodelabel (ZeroExtendLabel); - AddCodeLine ("tya"); - - /* Zero the upper bits, the same as the unsigned path. */ if (ZeroExtendMask != 0) { - g_and (FullWidthFlags | CF_CONST, ZeroExtendMask); - } + /* The universal trick is: + ** x = bits & bit_mask + ** m = 1 << (bit_width - 1) + ** r = (x ^ m) - m + ** which works for long as well. + */ - g_defcodelabel (DoneLabel); + if (SignBitByte + 1U == sizeofarg (FullWidthFlags)) { + /* We can just sign-extend on the high byte if it is the only affected one */ + unsigned char SignBitMask = (1UL << SignBitPosInByte) & 0xFF; + unsigned char Mask = ((2UL << (SignBitPos % CHAR_BITS)) - 1UL) & 0xFF; + + /* Move the correct byte to .A */ + switch (SignBitByte) { + case 0: + break; + case 1: + AddCodeLine ("tay"); + AddCodeLine ("txa"); + break; + case 3: + AddCodeLine ("tay"); + AddCodeLine ("lda sreg+1"); + break; + default: + FAIL ("Invalid Byte for sign bit"); + } + + /* Use .A to do the ops on the correct byte */ + AddCodeLine ("and #$%02X", Mask); + AddCodeLine ("eor #$%02X", SignBitMask); + AddCodeLine ("sec"); + AddCodeLine ("sbc #$%02X", SignBitMask); + + /* Move the correct byte from .A */ + switch (SignBitByte) { + case 0: + break; + case 1: + AddCodeLine ("tax"); + AddCodeLine ("tya"); + break; + case 3: + AddCodeLine ("sta sreg+1"); + AddCodeLine ("tya"); + break; + default: + FAIL ("Invalid Byte for sign bit"); + } + } else { + unsigned long SignBitMask = 1UL << SignBitPos; + unsigned long Mask = (2UL << SignBitPos) - 1UL; + g_and (FullWidthFlags | CF_CONST, Mask); + g_xor (FullWidthFlags | CF_CONST, SignBitMask); + g_dec (FullWidthFlags | CF_CONST, SignBitMask); + } + } else { + unsigned char SignBitMask = (1UL << SignBitPosInByte) & 0xFF; + unsigned ZeroExtendLabel = GetLocalLabel (); + + /* Save .A because the sign-bit test will destroy it. */ + AddCodeLine ("tay"); + + /* Move the correct byte to .A */ + switch (SignBitByte) { + case 0: + break; + case 1: + AddCodeLine ("txa"); + break; + case 3: + AddCodeLine ("lda sreg+1"); + break; + default: + FAIL ("Invalid Byte for sign bit"); + } + + /* Test the sign bit */ + AddCodeLine ("and #$%02X", SignBitMask); + AddCodeLine ("beq %s", LocalLabelName (ZeroExtendLabel)); + + if (SignBitByte + 1U == sizeofarg (FullWidthFlags)) { + /* We can just sign-extend on the high byte if it is the only affected one */ + unsigned char Mask = ~((2UL << (SignBitPos % CHAR_BITS)) - 1UL) & 0xFF; + + /* Use .A to do the ops on the correct byte */ + switch (SignBitByte) { + case 0: + AddCodeLine ("tya"); + AddCodeLine ("ora #$%02X", Mask); + /* We could jump over the following tya instead, but that wouldn't be faster + ** than taking this extra tay and then the tya. + */ + AddCodeLine ("tay"); + break; + case 1: + AddCodeLine ("txa"); + AddCodeLine ("ora #$%02X", Mask); + AddCodeLine ("tax"); + break; + case 3: + AddCodeLine ("lda sreg+1"); + AddCodeLine ("ora #$%02X", Mask); + AddCodeLine ("sta sreg+1"); + break; + default: + FAIL ("Invalid Byte for sign bit"); + } + } else { + /* Since we are going to get back .A later anyways, we may just do the op on the + ** higher bytes with whatever content currently in it. + */ + unsigned long Mask = ~((2UL << SignBitPos) - 1UL); + g_or (FullWidthFlags | CF_CONST, Mask); + } + + /* Get back .A. We need to duplicate the TYA, rather than move it before + ** the branch to share with the other label, because TYA changes some condition codes. + */ + g_defcodelabel (ZeroExtendLabel); + AddCodeLine ("tya"); + } } else { /* Unsigned bit-field, needs only zero-extension. */ if (ZeroExtendMask != 0) { diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index 1de71e7d3..cb62d78bd 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -486,11 +486,11 @@ void g_initstatic (unsigned InitLabel, unsigned VarLabel, unsigned Size); /*****************************************************************************/ void g_testbitfield (unsigned Flags, unsigned BitOffs, unsigned BitWidth); -/* Test bit-field in ax. */ +/* Test bit-field in primary. */ void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, int IsSigned, unsigned BitOffs, unsigned BitWidth); -/* Extract bits from bit-field in ax. */ +/* Extract bits from bit-field in primary. */ /*****************************************************************************/ /* Switch statement */ From 4eaf68d414c4adf0c2fd7b8746d9e6c9462d2464 Mon Sep 17 00:00:00 2001 From: David Hogan <david.q.hogan@gmail.com> Date: Sat, 11 Dec 2021 11:30:21 +1100 Subject: [PATCH 0987/2710] Automated Github pull request build and test --- .github/workflows/build-on-pull-request.yml | 56 +++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows/build-on-pull-request.yml diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml new file mode 100644 index 000000000..53f79fef4 --- /dev/null +++ b/.github/workflows/build-on-pull-request.yml @@ -0,0 +1,56 @@ +name: Build Pull Request +on: [pull_request] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build_linux: + name: Build and Test (Linux) + runs-on: ubuntu-latest + + steps: + - shell: bash + run: git config --global core.autocrlf input + + - name: Checkout Source + uses: actions/checkout@v2 + + - name: Install Dependencies + shell: bash + run: | + sudo apt-get update + sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass + + - name: Build + id: build + shell: bash + run: | + make -j2 bin USER_CFLAGS=-Werror + make -j2 lib QUIET=1 + make test QUIET=1 + make -j2 samples + make -C src clean + make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- + make -C samples clean + make -j2 doc zip + + build_windows: + name: Build (Windows) + runs-on: windows-latest + + steps: + - shell: bash + run: git config --global core.autocrlf input + + - name: Checkout Source + uses: actions/checkout@v2 + + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.1 + + - name: Build app (debug) + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug + + - name: Build app (release) + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release From a39c23f7960c1909e452e8f59257c178d93822fb Mon Sep 17 00:00:00 2001 From: David Hogan <david.q.hogan@gmail.com> Date: Sat, 11 Dec 2021 13:53:53 +1100 Subject: [PATCH 0988/2710] Snapshot build on push master. For now, the snapshot zip can be obtained from the latest successful snapshot build at: https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml TODO: Update docs at https://github.com/cc65/doc TODO: Publish snapshot zip at https://github.com/cc65/cc65.github.io --- .github/workflows/snapshot-on-push-master.yml | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 .github/workflows/snapshot-on-push-master.yml diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml new file mode 100644 index 000000000..aefc7f2f5 --- /dev/null +++ b/.github/workflows/snapshot-on-push-master.yml @@ -0,0 +1,69 @@ +name: Snapshot Build +on: + push: + branches: + master +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build_windows: + name: Build (Windows) + runs-on: windows-latest + + steps: + - shell: bash + run: git config --global core.autocrlf input + + - name: Checkout Source + uses: actions/checkout@v2 + + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.1 + + - name: Build app (debug) + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug + + - name: Build app (release) + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release + + build_linux: + name: Build, Test and Snaphot (Linux) + runs-on: ubuntu-latest + needs: build_windows + + steps: + - shell: bash + run: git config --global core.autocrlf input + + - name: Checkout Source + uses: actions/checkout@v2 + + - name: Install Dependencies + shell: bash + run: | + sudo apt-get update + sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass + + - name: Build + id: build + shell: bash + run: | + make -j2 bin USER_CFLAGS=-Werror + make -j2 lib QUIET=1 + make test QUIET=1 + make -j2 samples + make -C src clean + make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- + make -C samples clean + make -j2 doc zip + + - name: Upload Snapshot Zip + uses: actions/upload-artifact@v2 + with: + name: cc65-snapshot-win32.zip + path: cc65.zip + + # TODO: Update docs at https://github.com/cc65/doc + # TODO: Publish snapshot zip at https://github.com/cc65/cc65.github.io From bd94879be21719356b4f987c8d9c1dfeccf3bf32 Mon Sep 17 00:00:00 2001 From: dqh-github <david.q.hogan@gmail.com> Date: Sat, 11 Dec 2021 15:28:29 +1100 Subject: [PATCH 0989/2710] Re-added build status badge (Github Actions is now doing a snapshot build and test for updates to the master branch) --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f6142e2c1..33c7d2830 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ [Wiki](https://github.com/cc65/wiki/wiki) +[![Snapshot Build](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml/badge.svg?branch=master)](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml) + cc65 is a complete cross development package for 65(C)02 systems, including a powerful macro assembler, a C compiler, linker, librarian and several other tools. From b35a9d97a6953cb13a7215c369ff3b66ef440287 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 12 Dec 2021 23:41:19 +0100 Subject: [PATCH 0990/2710] Updated URL and improved consistency. --- doc/apple2.sgml | 4 ++-- doc/apple2enh.sgml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index bd01b68dc..cf83dacc9 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -33,7 +33,7 @@ more information. The standard binary file format generated by the linker for the Apple ][ target is an <url name="AppleSingle" -url="http://kaiser-edv.de/documents/AppleSingle_AppleDouble.pdf"> file. +url="https://nulib.com/library/AppleSingle_AppleDouble.pdf"> file. The default load address is $803. <bf/AppleCommander 1.4.0/ or later (available at <url @@ -281,7 +281,7 @@ AppleCommander option to put LOADER.SYSTEM on a ProDOS 8 disk image is <tt/-p/. If the cc65 program can be successfully linked as system program using the linker configuration <ref id="apple-sys-cfg" name="apple2-system.cfg">, but uses the heap either explicitly or implicitly (i.e. by loading a driver) then -the memory from $800 to $2000 can be added to the heap by calling +the memory from $800 to $1FFF can be added to the heap by calling <tt/_heapadd ((void *) 0x0800, 0x1800);/ at the beginning of <tt/main()/. diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 56fc05e31..8b61df91c 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -33,7 +33,7 @@ more information. The standard binary file format generated by the linker for the enhanced Apple //e target is an <url name="AppleSingle" -url="http://kaiser-edv.de/documents/AppleSingle_AppleDouble.pdf"> file. +url="https://nulib.com/library/AppleSingle_AppleDouble.pdf"> file. The default load address is $803. <bf/AppleCommander 1.4.0/ or later (available at <url @@ -281,7 +281,7 @@ AppleCommander option to put LOADER.SYSTEM on a ProDOS 8 disk image is <tt/-p/. If the cc65 program can be successfully linked as system program using the linker configuration <ref id="apple-sys-cfg" name="apple2enh-system.cfg">, but uses the heap either explicitly or implicitly (i.e. by loading a driver) then -the memory from $800 to $2000 can be added to the heap by calling +the memory from $800 to $1FFF can be added to the heap by calling <tt/_heapadd ((void *) 0x0800, 0x1800);/ at the beginning of <tt/main()/. From 2feadf865c2efb0a1df35bbfd29a95c9a197121a Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 12 Dec 2021 12:27:55 -0500 Subject: [PATCH 0991/2710] Changed a big script into separate named steps. It makes the job log easier to navigate. Also, Pull Requests don't need a Zip file. --- .github/workflows/build-on-pull-request.yml | 37 ++++++++------ .github/workflows/snapshot-on-push-master.yml | 48 ++++++++++++------- 2 files changed, 52 insertions(+), 33 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 53f79fef4..da9216a3d 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -1,6 +1,6 @@ name: Build Pull Request on: [pull_request] -concurrency: +concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -8,11 +8,11 @@ jobs: build_linux: name: Build and Test (Linux) runs-on: ubuntu-latest - + steps: - shell: bash run: git config --global core.autocrlf input - + - name: Checkout Source uses: actions/checkout@v2 @@ -21,28 +21,35 @@ jobs: run: | sudo apt-get update sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass - - - name: Build - id: build + + - name: Build the tools. shell: bash + run: make -j2 bin USER_CFLAGS=-Werror + - name: Build the platform libraries. + shell: bash + run: make -j2 lib QUIET=1 + - name: Run the regression tests. + shell: bash + run: make test QUIET=1 + - name: Test that the samples can be built. + shell: bash + run: make -j2 samples + - name: Build the document files. + shell: bash + run: make -j2 doc + - name: Build 32-bit Windows versions of the tools. run: | - make -j2 bin USER_CFLAGS=-Werror - make -j2 lib QUIET=1 - make test QUIET=1 - make -j2 samples make -C src clean make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- - make -C samples clean - make -j2 doc zip build_windows: name: Build (Windows) runs-on: windows-latest - + steps: - shell: bash run: git config --global core.autocrlf input - + - name: Checkout Source uses: actions/checkout@v2 @@ -51,6 +58,6 @@ jobs: - name: Build app (debug) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug - + - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index aefc7f2f5..e10904357 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -1,9 +1,9 @@ -name: Snapshot Build +name: Snapshot Build on: push: branches: master -concurrency: +concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -11,11 +11,11 @@ jobs: build_windows: name: Build (Windows) runs-on: windows-latest - + steps: - shell: bash run: git config --global core.autocrlf input - + - name: Checkout Source uses: actions/checkout@v2 @@ -24,7 +24,7 @@ jobs: - name: Build app (debug) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug - + - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release @@ -32,11 +32,11 @@ jobs: name: Build, Test and Snaphot (Linux) runs-on: ubuntu-latest needs: build_windows - + steps: - shell: bash run: git config --global core.autocrlf input - + - name: Checkout Source uses: actions/checkout@v2 @@ -45,25 +45,37 @@ jobs: run: | sudo apt-get update sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass - - - name: Build - id: build + + - name: Build the tools. shell: bash + run: make -j2 bin USER_CFLAGS=-Werror + - name: Build the platform libraries. + shell: bash + run: make -j2 lib QUIET=1 + - name: Run the regression tests. + shell: bash + run: make test QUIET=1 + - name: Test that the samples can be built. + shell: bash + run: make -j2 samples + - name: Remove the output from the samples tests. + shell: bash + run: make -C samples clean + - name: Build the document files. + shell: bash + run: make -j2 doc + - name: Build and package 32-bit Windows versions of the tools. run: | - make -j2 bin USER_CFLAGS=-Werror - make -j2 lib QUIET=1 - make test QUIET=1 - make -j2 samples make -C src clean make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- - make -C samples clean - make -j2 doc zip - + make zip + mv cc65.zip cc65-win32.zip + - name: Upload Snapshot Zip uses: actions/upload-artifact@v2 with: name: cc65-snapshot-win32.zip - path: cc65.zip + path: cc65-win32.zip # TODO: Update docs at https://github.com/cc65/doc # TODO: Publish snapshot zip at https://github.com/cc65/cc65.github.io From 33cf8608b752c810d39141bb73373fea7647aeec Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 12 Dec 2021 12:35:27 -0500 Subject: [PATCH 0992/2710] Removed unneeded package names. sshpass isn't needed because the Windows packages are put on Github. linuxdoc-tools is a dependency of linuxdoc-tools-info. The binutils package is a dependency of the gcc package. --- .github/workflows/build-on-pull-request.yml | 2 +- .github/workflows/snapshot-on-push-master.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index da9216a3d..c3214c308 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -20,7 +20,7 @@ jobs: shell: bash run: | sudo apt-get update - sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass + sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-i686 - name: Build the tools. shell: bash diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index e10904357..3f138e492 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -44,7 +44,7 @@ jobs: shell: bash run: | sudo apt-get update - sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass + sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-i686 - name: Build the tools. shell: bash From 366701e066b17bda85320f8e311f71a8dfad2834 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 12 Dec 2021 13:42:25 -0500 Subject: [PATCH 0993/2710] Added a 64-bit Windows cross-compile. That compiler catches pointer-integer width mismatches that other compilers ignore. --- .github/workflows/build-on-pull-request.yml | 6 +++--- .github/workflows/snapshot-on-push-master.yml | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index c3214c308..fe99c4673 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -20,7 +20,7 @@ jobs: shell: bash run: | sudo apt-get update - sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-i686 + sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-x86-64 - name: Build the tools. shell: bash @@ -37,10 +37,10 @@ jobs: - name: Build the document files. shell: bash run: make -j2 doc - - name: Build 32-bit Windows versions of the tools. + - name: Build 64-bit Windows versions of the tools. run: | make -C src clean - make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- + make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32- build_windows: name: Build (Windows) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 3f138e492..c8d36488d 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -44,7 +44,7 @@ jobs: shell: bash run: | sudo apt-get update - sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-i686 + sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 - name: Build the tools. shell: bash @@ -64,6 +64,12 @@ jobs: - name: Build the document files. shell: bash run: make -j2 doc + - name: Build and package 64-bit Windows versions of the tools. + run: | + make -C src clean + make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32- + make zip + mv cc65.zip cc65-win64.zip - name: Build and package 32-bit Windows versions of the tools. run: | make -C src clean @@ -71,11 +77,16 @@ jobs: make zip mv cc65.zip cc65-win32.zip - - name: Upload Snapshot Zip + - name: Upload a 32-bit Snapshot Zip uses: actions/upload-artifact@v2 with: name: cc65-snapshot-win32.zip path: cc65-win32.zip + - name: Upload a 64-bit Snapshot Zip + uses: actions/upload-artifact@v2 + with: + name: cc65-snapshot-win64.zip + path: cc65-win64.zip # TODO: Update docs at https://github.com/cc65/doc # TODO: Publish snapshot zip at https://github.com/cc65/cc65.github.io From 325ff9667e924dd80acb24983791d7aa24cd2dad Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 12 Dec 2021 17:36:03 -0500 Subject: [PATCH 0994/2710] Used (size_t), instead of (long) where converting between pointers and integers. (long) still is 32 bits on 64-bit Windows! --- src/cc65/locals.c | 2 +- src/cc65/symentry.h | 2 +- src/cc65/symtab.c | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cc65/locals.c b/src/cc65/locals.c index c2e314485..d3902f329 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -286,7 +286,7 @@ static void ParseAutoDecl (Declaration* Decl) ** We abuse the Collection somewhat by using it to store line ** numbers. */ - CollReplace (&CurrentFunc->LocalsBlockStack, (void *)(long)GetCurrentLine (), + CollReplace (&CurrentFunc->LocalsBlockStack, (void *)(size_t)GetCurrentLine (), CollCount (&CurrentFunc->LocalsBlockStack) - 1); } else { diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index bb87c7472..bcf586510 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -115,7 +115,7 @@ struct CodeEntry; typedef struct DefOrRef DefOrRef; struct DefOrRef { unsigned Line; - long LocalsBlockId; + size_t LocalsBlockId; unsigned Flags; int StackPtr; unsigned Depth; diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 5d7bd1436..3de0bb460 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -951,7 +951,7 @@ DefOrRef* AddDefOrRef (SymEntry* E, unsigned Flags) DOR = xmalloc (sizeof (DefOrRef)); CollAppend (E->V.L.DefsOrRefs, DOR); DOR->Line = GetCurrentLine (); - DOR->LocalsBlockId = (long)CollLast (&CurrentFunc->LocalsBlockStack); + DOR->LocalsBlockId = (size_t)CollLast (&CurrentFunc->LocalsBlockStack); DOR->Flags = Flags; DOR->StackPtr = StackPtr; DOR->Depth = CollCount (&CurrentFunc->LocalsBlockStack); @@ -1013,9 +1013,9 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags) /* Are we jumping into a block with initalization of an object that ** has automatic storage duration? Let's emit a warning. */ - if ((long)CollLast (AIC) != DOR->LocalsBlockId && + if ((size_t)CollLast (AIC) != DOR->LocalsBlockId && (CollCount (AIC) < DOR->Depth || - (long)CollAt (AIC, DOR->Depth - 1) != DOR->LocalsBlockId)) { + (size_t)CollAt (AIC, DOR->Depth - 1) != DOR->LocalsBlockId)) { Warning ("Goto at line %d to label %s jumps into a block with " "initialization of an object that has automatic storage duration", GetCurrentLine (), Name); @@ -1044,9 +1044,9 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags) /* Are we jumping into a block with initalization of an object that ** has automatic storage duration? Let's emit a warning. */ - if ((long)CollLast (AIC) != DOR->LocalsBlockId && + if ((size_t)CollLast (AIC) != DOR->LocalsBlockId && (CollCount (AIC) >= DOR->Depth || - (long)CollLast (AIC) >= (long)DOR->Line)) + (size_t)CollLast (AIC) >= (size_t)DOR->Line)) Warning ("Goto at line %d to label %s jumps into a block with " "initialization of an object that has automatic storage duration", DOR->Line, Name); From 230f4d3807a99c6037c73ac7a5cd7e5c8deb8766 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 12 Dec 2021 23:54:17 -0500 Subject: [PATCH 0995/2710] Install system packages before checking out the repo. --- .github/workflows/build-on-pull-request.yml | 11 +++++------ .github/workflows/snapshot-on-push-master.yml | 11 +++++------ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index fe99c4673..f5477d191 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -10,18 +10,17 @@ jobs: runs-on: ubuntu-latest steps: - - shell: bash - run: git config --global core.autocrlf input - - - name: Checkout Source - uses: actions/checkout@v2 - - name: Install Dependencies shell: bash run: | sudo apt-get update sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-x86-64 + - shell: bash + run: git config --global core.autocrlf input + - name: Checkout Source + uses: actions/checkout@v2 + - name: Build the tools. shell: bash run: make -j2 bin USER_CFLAGS=-Werror diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index c8d36488d..110edbbf0 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -34,18 +34,17 @@ jobs: needs: build_windows steps: - - shell: bash - run: git config --global core.autocrlf input - - - name: Checkout Source - uses: actions/checkout@v2 - - name: Install Dependencies shell: bash run: | sudo apt-get update sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 + - shell: bash + run: git config --global core.autocrlf input + - name: Checkout Source + uses: actions/checkout@v2 + - name: Build the tools. shell: bash run: make -j2 bin USER_CFLAGS=-Werror From 9e9b3dbacad05c1ee39e8246ba7f0cacfc43e4f6 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Mon, 13 Dec 2021 17:14:57 +0100 Subject: [PATCH 0996/2710] Fixed typo --- src/ld65/scanner.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ld65/scanner.c b/src/ld65/scanner.c index 256d47f07..718951aa5 100644 --- a/src/ld65/scanner.c +++ b/src/ld65/scanner.c @@ -196,7 +196,7 @@ static void StrVal (void) default: CfgWarning (&CfgErrorPos, - "Unkown escape sequence '%%%c'", C); + "Unknown escape sequence '%%%c'", C); SB_AppendChar (&CfgSVal, '%'); SB_AppendChar (&CfgSVal, C); NextChar (); From 1d3318c2476b99c76a7990fe8ec23438a116c6da Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Mon, 13 Dec 2021 17:20:56 +0100 Subject: [PATCH 0997/2710] Fixed many typos --- src/dbginfo/dbginfo.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/dbginfo/dbginfo.c b/src/dbginfo/dbginfo.c index 42001ed07..fdebe6910 100644 --- a/src/dbginfo/dbginfo.c +++ b/src/dbginfo/dbginfo.c @@ -183,7 +183,7 @@ typedef struct DbgInfo DbgInfo; struct DbgInfo { /* First we have all items in collections sorted by id. The ids are - ** continous, so an access by id is almost as cheap as an array access. + ** continuous, so an access by id is almost as cheap as an array access. ** The collections are also used when the objects are deleted, so they're ** actually the ones that "own" the items. */ @@ -680,7 +680,7 @@ static char* SB_StrDup (const StrBuf* B) static Collection* CollInit (Collection* C) /* Initialize a collection and return it. */ { - /* Intialize the fields. */ + /* Initialize the fields. */ C->Count = 0; C->Size = 0; C->Items = 0; @@ -1349,7 +1349,7 @@ static int CompareFileInfoByName (const void* L, const void* R) static LibInfo* NewLibInfo (const StrBuf* Name) -/* Create a new LibInfo struct, intialize and return it */ +/* Create a new LibInfo struct, initialize and return it */ { /* Allocate memory */ LibInfo* L = xmalloc (sizeof (LibInfo) + SB_GetLen (Name)); @@ -1463,7 +1463,7 @@ static int CompareLineInfoByLine (const void* L, const void* R) static ModInfo* NewModInfo (const StrBuf* Name) -/* Create a new ModInfo struct, intialize and return it */ +/* Create a new ModInfo struct, initialize and return it */ { /* Allocate memory */ ModInfo* M = xmalloc (sizeof (ModInfo) + SB_GetLen (Name)); @@ -1536,7 +1536,7 @@ static int CompareModInfoByName (const void* L, const void* R) static ScopeInfo* NewScopeInfo (const StrBuf* Name) -/* Create a new ScopeInfo struct, intialize and return it */ +/* Create a new ScopeInfo struct, initialize and return it */ { /* Allocate memory */ ScopeInfo* S = xmalloc (sizeof (ScopeInfo) + SB_GetLen (Name)); @@ -1697,7 +1697,7 @@ static int CompareSegInfoByName (const void* L, const void* R) static SpanInfo* NewSpanInfo (void) -/* Create a new SpanInfo struct, intialize and return it */ +/* Create a new SpanInfo struct, initialize and return it */ { /* Allocate memory */ SpanInfo* S = xmalloc (sizeof (SpanInfo)); @@ -1779,7 +1779,7 @@ static int CompareSpanInfoByAddr (const void* L, const void* R) static SymInfo* NewSymInfo (const StrBuf* Name) -/* Create a new SymInfo struct, intialize and return it */ +/* Create a new SymInfo struct, initialize and return it */ { /* Allocate memory */ SymInfo* S = xmalloc (sizeof (SymInfo) + SB_GetLen (Name)); @@ -2147,7 +2147,7 @@ static TypeInfo* ParseTypeString (InputData* D, StrBuf* Type) I += GT_GET_SIZE (A[I]) + 1; } else { /* Unknown type in type string */ - ParseError (D, CC65_ERROR, "Unkown type in type value"); + ParseError (D, CC65_ERROR, "Unknown type in type value"); return 0; } break; @@ -2733,7 +2733,7 @@ static int StrConstFollows (InputData* D) static int Consume (InputData* D, Token Tok, const char* Name) -/* Check for a token and consume it. Return true if the token was comsumed, +/* Check for a token and consume it. Return true if the token was consumed, ** return false otherwise. */ { @@ -6936,7 +6936,7 @@ const cc65_scopeinfo* cc65_scope_byspan (cc65_dbginfo Handle, unsigned SpanId) const cc65_scopeinfo* cc65_childscopes_byid (cc65_dbginfo Handle, unsigned Id) /* Return the direct child scopes of a scope with a given id. The function ** returns NULL if no scope with this id was found, otherwise a list of the -** direct childs. +** direct children. */ { const DbgInfo* Info; From 1cdd4676b25762f4257287a389349c68960905d0 Mon Sep 17 00:00:00 2001 From: polluks2 <stefan@Stefan-PC.localdomain> Date: Tue, 14 Dec 2021 13:13:16 +0100 Subject: [PATCH 0998/2710] Fixed many typos --- doc/apple2.sgml | 2 +- doc/apple2enh.sgml | 2 +- doc/atari.sgml | 12 ++++++------ doc/atari5200.sgml | 2 +- doc/ca65.sgml | 2 +- doc/cc65.sgml | 6 +++--- doc/cl65.sgml | 4 ++-- doc/co65.sgml | 4 ++-- doc/coding.sgml | 2 +- doc/da65.sgml | 2 +- doc/debugging.sgml | 6 +++--- doc/geos.sgml | 4 ++-- doc/grc65.sgml | 6 +++--- doc/intro.sgml | 2 +- doc/ld65.sgml | 2 +- doc/smc.sgml | 4 ++-- 16 files changed, 31 insertions(+), 31 deletions(-) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index cf83dacc9..09052ade1 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -73,7 +73,7 @@ system takes care of actually moving the code into the Language Card. The amount of memory available in the Language Card for generated code depends on the <ref id="link-configs" name="linker configuration"> parameters. There are -several usefull settings: +several useful settings: <descrip> diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 8b61df91c..a105cb47a 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -73,7 +73,7 @@ system takes care of actually moving the code into the Language Card. The amount of memory available in the Language Card for generated code depends on the <ref id="link-configs" name="linker configuration"> parameters. There are -several usefull settings: +several useful settings: <descrip> diff --git a/doc/atari.sgml b/doc/atari.sgml index 903895d17..85dcaaf5e 100644 --- a/doc/atari.sgml +++ b/doc/atari.sgml @@ -131,7 +131,7 @@ With the default load address of $2400 this gives a usable memory range o [$2400-$CFFF]. Please note that the first load chunk (which checks the system -compatibilty and available memory) will always be loaded at +compatibility and available memory) will always be loaded at $2E00, regardless of the specified start address. This address can only be changed by a custom linker config file. @@ -305,7 +305,7 @@ The names are the usual ones you can find in system reference manuals. Example: ... </verb></tscreen> -Please note that memory location 762/$2FA is called "<tt/char_/" while the orignal name "<tt/char/" conflicts with the C keyword. +Please note that memory location 762/$2FA is called "<tt/char_/" while the original name "<tt/char/" conflicts with the C keyword. If you like to use the OS names and locations for the original Atari 800 operating system, please "<tt/#define OSA/" before including the <tt/atari.h/ header file. @@ -401,7 +401,7 @@ OS.sdlst = &DisplayList; ... </verb></tscreen> -Please inspect the <tt/_antic.h/ header file to detemine the supported +Please inspect the <tt/_antic.h/ header file to determine the supported instruction names. Modifiers on instructions can be nested without need for an order: @@ -410,7 +410,7 @@ for an order: Please mind that ANTIC has memory alignment requirements for "player missile graphics"-data, font data, display lists and screen memory. Creation of a special linker configuration with appropriate aligned segments and -switching to that segment in the c-code is usually neccessary. A more memory +switching to that segment in the c-code is usually necessary. A more memory hungry solution consists in using the "<tt/posix_memalign()/" function in conjunction with copying your data to the allocated memory. @@ -1141,8 +1141,8 @@ ld65: Error: Missing memory area assignment for segment 'MAINHDR' </verb></tscreen> The old "HEADER" memory description contained six bytes: $FFFF -and the first and last memory addess of the program. For the "system -check" load chunk this had to be split into two memory assigments. The +and the first and last memory address of the program. For the "system +check" load chunk this had to be split into two memory assignments The "HEADER" now only contains the $FFFF. The main program's first and last memory address were moved to a new segment, called "MAINHDR", which in the new linker config file goes into its own memory area (also diff --git a/doc/atari5200.sgml b/doc/atari5200.sgml index c7e5be73e..599ffe3c9 100644 --- a/doc/atari5200.sgml +++ b/doc/atari5200.sgml @@ -237,7 +237,7 @@ The runtime library provides a default game name which is "cc65 compiled". To change that, one has to link a file which puts data into the "<tt/CARTNAME/" segment. -For reference, here's the default version used by the cc65 libary: +For reference, here's the default version used by the cc65 library: <tscreen><verb> .export __CART_NAME__: absolute = 1 .macpack atari diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 8ae8eabd9..0638ab08c 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -301,7 +301,7 @@ Here is a description of all the command line options: compiler, see there for a list. Depending on the target, the default CPU type is also set. This can be - overriden by using the <tt/<ref id="option--cpu" name="--cpu">/ option. + overridden by using the <tt/<ref id="option--cpu" name="--cpu">/ option. <label id="option-v"> diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 821e76586..b20e05cc6 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -395,7 +395,7 @@ Here is a description of all the command line options: This option is used to set the target system. The target system determines the character set that is used for strings and character constants and the - default CPU. The CPU setting can be overriden by use of the <tt/<ref + default CPU. The CPU setting can be overridden by use of the <tt/<ref id="option--cpu" name="--cpu">/ option. The following target systems are supported: @@ -1250,7 +1250,7 @@ parameter with the <tt/#pragma/. This pragma is used to display informational messages at compile-time. - The message intented to be displayed must be a string literal. + The message intended to be displayed must be a string literal. Example: <tscreen><verb> @@ -1369,7 +1369,7 @@ parameter with the <tt/#pragma/. Switch compiler warnings on or off. "name" is the name of a warning (see the <tt/<ref name="-W" id="option-W">/ compiler option for a list). The name is followed either by "pop", which restores the last pushed state, or by "on" or - "off", optionally preceeded by "push" to push the current state before + "off", optionally preceded by "push" to push the current state before changing it. Example: diff --git a/doc/cl65.sgml b/doc/cl65.sgml index f00856bda..24d2f5927 100644 --- a/doc/cl65.sgml +++ b/doc/cl65.sgml @@ -57,11 +57,11 @@ Short options: -O Optimize code -Oi Optimize code, inline more code -Or Optimize code, honour the register keyword - -Os Optimize code, inline standard funtions + -Os Optimize code, inline standard functions -S Compile but don't assemble and link -T Include source as comment -V Print the version number - -W name[,...] Supress compiler warnings + -W name[,...] Suppress compiler warnings -Wa options Pass options to the assembler -Wc options Pass options to the compiler -Wl options Pass options to the linker diff --git a/doc/co65.sgml b/doc/co65.sgml index 865aed2bb..0a50fb3a8 100644 --- a/doc/co65.sgml +++ b/doc/co65.sgml @@ -235,12 +235,12 @@ things to be different from runtime loading: <item> Without changing the segment names, all segments take the default names used by the standard linker configurations. This means that the - driver code is no longer contingous in memory, instead the code + driver code is no longer contiguous in memory, instead the code segment is placed somewhere in between all other code segments, the data segment is placed with all other data segments and so on. If the driver doesn't do strange things this shouldn't be a problem. -<item> With statically linked code, data and bss segments will get intialized +<item> With statically linked code, data and bss segments will get initialized once (when the application is loaded), while a loadable driver will get its initialization each time the driver is loaded into memory (which may be more than once in the lifetime of a program). It depends diff --git a/doc/coding.sgml b/doc/coding.sgml index 57961209f..3b1066dcd 100644 --- a/doc/coding.sgml +++ b/doc/coding.sgml @@ -59,7 +59,7 @@ slower than the same code for unsigned types. <sect>Use chars instead of ints if possible<p> -While in arithmetic operations, chars are immidiately promoted to ints, they +While in arithmetic operations, chars are immediately promoted to ints, they are passed as chars in parameter lists and are accessed as chars in variables. The code generated is usually not much smaller, but it is faster, since accessing chars is faster. For several operations, the generated code may be diff --git a/doc/da65.sgml b/doc/da65.sgml index b46ee9dd3..1702694a0 100644 --- a/doc/da65.sgml +++ b/doc/da65.sgml @@ -156,7 +156,7 @@ Here is a description of all the command line options: <tag><tt>-i name, --info name</tt></tag> Specify an info file. The info file contains global options that may - override or replace command line options plus informations about the code + override or replace command line options plus information about the code that has to be disassembled. See the separate section <ref id="infofile" name="Info File Format">. diff --git a/doc/debugging.sgml b/doc/debugging.sgml index 8b09db384..a270d12c7 100644 --- a/doc/debugging.sgml +++ b/doc/debugging.sgml @@ -39,7 +39,7 @@ transfer the program to the real machine until it is done. <item>An emulator allows many things that are almost impossible one of the original machines. You may set watchpoints (detect read or write access to -arbitary addresses), debug interrupt handlers and even debug routines that run +arbitrary addresses), debug interrupt handlers and even debug routines that run inside the 1541 floppy. <item>You may use the label file generated by the linker to make much more use @@ -117,7 +117,7 @@ these warnings and errors as long as they reference any problems VICE thinks it has with the labels. After loading the labels, they are used by VICE in the disassembler listing, -and you may use them whereever you need to specify an address. Try +and you may use them wherever you need to specify an address. Try <tscreen><verb> d ._main @@ -138,7 +138,7 @@ load your label file like this: </verb></tscreen> After loading the labels, they are used by Oricutron in the disassembler listing, -and you may use them whereever you need to specify an address. Try +and you may use them wherever you need to specify an address. Try <tscreen><verb> d ._main diff --git a/doc/geos.sgml b/doc/geos.sgml index f7943f8cd..c3601e741 100644 --- a/doc/geos.sgml +++ b/doc/geos.sgml @@ -207,7 +207,7 @@ see them together in the filling box in GeoPaint. <p> <tt/void GraphicsString (const void *myGString)/ <p> -One of the more powerfull routines of GEOS. This function calls other graphic functions depending +One of the more powerful routines of GEOS. This function calls other graphic functions depending on the given command string. See the structures chapter for a more detailed description. <sect2>Rectangle functions @@ -652,7 +652,7 @@ For some purposes you might consider using the <tt/dio.h/ interface to disk acce <p> All GEOS disk functions return an error code in the X register. In some cases this is returned by the GEOSLib function (if its type is <tt/char/), but in all cases the last error is saved in the <tt/__oserror/ -location. If it is nonzero - an error occured. See <tt/gdisk.h/ for the list of possible errorcodes. +location. If it is nonzero - an error occurred. See <tt/gdisk.h/ for the list of possible errorcodes. You need to include <tt/errno.h/ to get <tt/__oserror/, together with the standard <tt/errno/. The latter gives less verbose, but still usable information and can be used with <tt/strerror/. Probably you will get more information using <tt/_stroserror/ in a similar way. diff --git a/doc/grc65.sgml b/doc/grc65.sgml index aec112f6b..c03815ade 100644 --- a/doc/grc65.sgml +++ b/doc/grc65.sgml @@ -7,7 +7,7 @@ <url url="mailto:greg.king5@verizon.net" name="Greg King"> <abstract> -This document describes a compiler that can create GEOS headers and menues for +This document describes a compiler that can create GEOS headers and menus for cc65-compiled programs. </abstract> @@ -24,7 +24,7 @@ Optional resources might be menu definitions, other headers (e.g., for data files of an app.), dialog definitions, etc. Without an application's header, GEOS is unable to load and start it. -Currently, <bf/grc65/ supports only menues and the required header definition, +Currently, <bf/grc65/ supports only menus and the required header definition, along with support for building applications with VLIR-structured overlays. <bf/grc65/ generates output in two formats: C header and <bf/ca65/ source (.s). @@ -345,7 +345,7 @@ for addresses. <!-- <appendix> --> <sect>Appendix A -- example.grc<label id="example-grc"> <p><tscreen><verb> -; Note that MENU can define both menues and submenues. +; Note that MENU can define both menus and submenus. ; If you want to use any C operators (such as "|", "&", etc.), do it WITHOUT ; any spaces between the arguments (the parser is simple and weak). diff --git a/doc/intro.sgml b/doc/intro.sgml index 0617b0ab3..5d1889d76 100644 --- a/doc/intro.sgml +++ b/doc/intro.sgml @@ -555,7 +555,7 @@ feature on. </quote> <quote> -In VICE, got to <bf/Settings/ -> <bf/Settings/, then <bf/Peripherial devices/ -> +In VICE, got to <bf/Settings/ -> <bf/Settings/, then <bf/Peripheral devices/ -> <bf/Drive/. Then, you must enable the <bf/True drive emulation/ checkbox. </quote> diff --git a/doc/ld65.sgml b/doc/ld65.sgml index 56d77ca63..87c2cae51 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -886,7 +886,7 @@ also for a segment. The value must be an integer between 0 and 255. It is used as the fill value for space reserved by the assembler's <tt/.ALIGN/ and <tt/.RES/ commands. It is also used as the fill value for space between sections (part of a segment that comes from one object file) caused by alignment, but not for -space that preceeds the first section. +space that precedes the first section. To suppress the warning, the linker issues if it encounters a segment that is not found in any of the input files, use "<tt/optional=yes/" as an additional diff --git a/doc/smc.sgml b/doc/smc.sgml index e277c5008..88cd6dc14 100644 --- a/doc/smc.sgml +++ b/doc/smc.sgml @@ -85,7 +85,7 @@ Please note: <item> The macro '<tt>SMC_StoreValue</tt>' takes care, that the store operation will occur on the value-position of a SMC-instruction. As you will see, other macros influence other instruction part positions. - There is no consistency check, if the targeted SMC instruction acually + There is no consistency check, if the targeted SMC instruction actually contains a value. Storing a 'value' on an immplied SMC instruction would corrupt the following memory cell! </enum> @@ -582,7 +582,7 @@ into a single instruction line. These can be changed of course too. Line 10,11: These lines construct a branch operation for line 8: The X-register will be used to change it from 'inc StoreAccuFirstSection+2' (high-byte operation) to 'beq restoreCode'. Please note: To calculate the -relaive branch offset, we introduced a second label +relative branch offset, we introduced a second label ('RestoreCodeBranchBaseAdr') for to calculate it. Some could also use the internal name of the SMC label, but you should abstain to do so - it may be changed in the future... From 2235830e31b16c5a0af9605864b69a9da7106b84 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 19 Dec 2021 16:44:37 +0100 Subject: [PATCH 0999/2710] Don't rely on (actually changed) unspecified compiler behavior. --- libsrc/common/pmemalign.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/common/pmemalign.c b/libsrc/common/pmemalign.c index 8f055a3fc..d9d6b4e97 100644 --- a/libsrc/common/pmemalign.c +++ b/libsrc/common/pmemalign.c @@ -75,7 +75,7 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size) } /* Test alignment: is it a power of two? There must be only one bit set. */ - if (alignment == 0 || (alignment & --alignment) != 0) { + if (alignment == 0 || (alignment & alignment - 1) != 0) { *memptr = NULL; return EINVAL; } From 884f72637b3b97a4fce0d5fbbe4f4a2c18df3281 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 19 Dec 2021 20:27:56 -0500 Subject: [PATCH 1000/2710] Put the alignment decrement code back into posix_memalign(). Without that code, the function returns a very broken pointer. --- libsrc/common/pmemalign.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/libsrc/common/pmemalign.c b/libsrc/common/pmemalign.c index d9d6b4e97..52adb240d 100644 --- a/libsrc/common/pmemalign.c +++ b/libsrc/common/pmemalign.c @@ -75,7 +75,7 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size) } /* Test alignment: is it a power of two? There must be only one bit set. */ - if (alignment == 0 || (alignment & alignment - 1) != 0) { + if (alignment == 0 || (alignment & (alignment - 1)) != 0) { *memptr = NULL; return EINVAL; } @@ -86,7 +86,7 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size) ** overhead added one time; and, the worst thing that might happen is that ** we cannot free the upper and lower blocks. */ - b = malloc (size + alignment); + b = malloc (--alignment + size); /* Handle out-of-memory */ if (b == NULL) { @@ -169,6 +169,3 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size) return EOK; } - - - From 7d6b6ef986f23599334e67beeb04881dafbe2450 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Wed, 22 Dec 2021 09:50:38 +0100 Subject: [PATCH 1001/2710] Delete c-cpp.yml --- .github/workflows/c-cpp.yml | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 .github/workflows/c-cpp.yml diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml deleted file mode 100644 index e3233268f..000000000 --- a/.github/workflows/c-cpp.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: C/C++ CI - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - name: configure - run: ./configure - - name: make - run: make - - name: make check - run: make check - - name: make distcheck - run: make distcheck From 6ac4aa4e2076189ad5b5f3a9d33e1c5910d4e37c Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 23 Dec 2021 22:24:55 -0500 Subject: [PATCH 1002/2710] Made cbm_open() be more efficient. The fastcall argument doesn't need to be put on a stack. SETNAM can be called before SETLFS. --- libsrc/cbm/cbm_open.s | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/libsrc/cbm/cbm_open.s b/libsrc/cbm/cbm_open.s index 1842fc149..db4179db8 100644 --- a/libsrc/cbm/cbm_open.s +++ b/libsrc/cbm/cbm_open.s @@ -1,5 +1,6 @@ ; -; Ullrich von Bassewitz, 22.06.2002 +; 2002-06-22, Ullrich von Bassewitz +; 2021-12-23, Greg King ; ; Original C code by Marc 'BlackJack' Rintsch, 18.03.2001 ; @@ -19,26 +20,17 @@ ; .export _cbm_open + .import popa .import _cbm_k_setlfs, _cbm_k_setnam, _cbm_k_open .import __oserror _cbm_open: - pha - txa - pha ; Save name + jsr _cbm_k_setnam jsr popa ; Get sec_addr jsr _cbm_k_setlfs ; Call SETLFS, pop all args - pla - tax - pla ; Get name - jsr _cbm_k_setnam - jsr _cbm_k_open sta __oserror - rts - - From 921e54917268637498610d5fb41c3836bf8b384a Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Fri, 24 Dec 2021 23:44:57 +0100 Subject: [PATCH 1003/2710] Add standard C library function strnlen(). --- include/string.h | 1 + libsrc/common/strnlen.s | 54 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 libsrc/common/strnlen.s diff --git a/include/string.h b/include/string.h index 2f5953196..74442415f 100644 --- a/include/string.h +++ b/include/string.h @@ -50,6 +50,7 @@ char* __fastcall__ strcpy (char* dest, const char* src); size_t __fastcall__ strcspn (const char* s1, const char* s2); char* __fastcall__ strerror (int errcode); size_t __fastcall__ strlen (const char* s); +size_t __fastcall__ strnlen (const char* s, size_t maxlen); char* __fastcall__ strncat (char* s1, const char* s2, size_t count); int __fastcall__ strncmp (const char* s1, const char* s2, size_t count); char* __fastcall__ strncpy (char* dest, const char* src, size_t count); diff --git a/libsrc/common/strnlen.s b/libsrc/common/strnlen.s new file mode 100644 index 000000000..e748325e2 --- /dev/null +++ b/libsrc/common/strnlen.s @@ -0,0 +1,54 @@ +; size_t __fastcall__ strnlen (const char* s, size_t maxlen); + +.export _strnlen +.import popax +.importzp ptr1, tmp1, tmp2, tmp3, tmp4 + +.proc _strnlen + ; Fetch string pointer. + sta ptr1 + stx ptr1+1 + + ; Clear return value. + lda #0 + sta tmp1 + sta tmp2 + + ; Get maximum length. + jsr popax + sta tmp3 + inc tmp3 + inx + stx tmp4 + + ;;; Loop over string. + ldy #0 + + ; Decrement maximum length. +next: dec tmp3 + bne l2 + dec tmp4 + beq done +l2: + + lda (ptr1),y + beq done + + ; Step to next character. + inc ptr1 + bne l1 + inc ptr1+1 +l1: + + ; Increment return value. + inc tmp1 + bne next + inc tmp2 + + jmp next + + +done: lda tmp1 + ldx tmp2 + rts +.endproc From 0b84465276dc2c6e2f380a3d26b1e08c3015b0ac Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 09:11:58 +0100 Subject: [PATCH 1004/2710] Fix strnlen(). --- libsrc/common/strnlen.s | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/libsrc/common/strnlen.s b/libsrc/common/strnlen.s index e748325e2..eb2c16006 100644 --- a/libsrc/common/strnlen.s +++ b/libsrc/common/strnlen.s @@ -5,25 +5,25 @@ .importzp ptr1, tmp1, tmp2, tmp3, tmp4 .proc _strnlen + ; Get maximum length. + tay + iny + sty tmp3 + inx + stx tmp4 + ; Fetch string pointer. + jsr popax sta ptr1 stx ptr1+1 ; Clear return value. - lda #0 - sta tmp1 - sta tmp2 + ldy #0 + sty tmp1 + sty tmp2 - ; Get maximum length. - jsr popax - sta tmp3 - inc tmp3 - inx - stx tmp4 ;;; Loop over string. - ldy #0 - ; Decrement maximum length. next: dec tmp3 bne l2 @@ -35,7 +35,7 @@ l2: beq done ; Step to next character. - inc ptr1 + iny bne l1 inc ptr1+1 l1: @@ -45,7 +45,7 @@ l1: bne next inc tmp2 - jmp next + bne next ; (jmp) done: lda tmp1 From c9ccc82b9f8d43daf489c4139d8383206a7aa925 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 09:12:13 +0100 Subject: [PATCH 1005/2710] strnlen(): Add comment with POSIX standard. --- include/string.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/string.h b/include/string.h index 74442415f..70abd5851 100644 --- a/include/string.h +++ b/include/string.h @@ -50,7 +50,7 @@ char* __fastcall__ strcpy (char* dest, const char* src); size_t __fastcall__ strcspn (const char* s1, const char* s2); char* __fastcall__ strerror (int errcode); size_t __fastcall__ strlen (const char* s); -size_t __fastcall__ strnlen (const char* s, size_t maxlen); +size_t __fastcall__ strnlen (const char* s, size_t maxlen); /* POSIX.1-2008 */ char* __fastcall__ strncat (char* s1, const char* s2, size_t count); int __fastcall__ strncmp (const char* s1, const char* s2, size_t count); char* __fastcall__ strncpy (char* dest, const char* src, size_t count); From 87fe2f5d0ea7536fcfbf2dd9523bcf47cc30a227 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 09:13:43 +0100 Subject: [PATCH 1006/2710] Add test of strnlen(). --- targettest/Makefile | 4 ++++ targettest/strnlen.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 targettest/strnlen.c diff --git a/targettest/Makefile b/targettest/Makefile index f3694335c..44933949a 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -160,6 +160,7 @@ EXELIST_c64 = \ scanf-test \ ser-test \ strdup-test \ + strnlen \ stroserror-test \ strqtok-test \ tinyshell \ @@ -190,6 +191,7 @@ EXELIST_vic20 = \ rename-test \ scanf-test \ strdup-test \ + strnlen \ stroserror-test \ strqtok-test \ tinyshell \ @@ -222,6 +224,7 @@ EXELIST_apple2 = \ seek \ ser-test \ strdup-test \ + strnlen \ stroserror-test \ strqtok-test \ tinyshell \ @@ -257,6 +260,7 @@ EXELIST_atari = \ seek \ ser-test \ strdup-test \ + strnlen \ stroserror-test \ strqtok-test \ tinyshell \ diff --git a/targettest/strnlen.c b/targettest/strnlen.c new file mode 100644 index 000000000..d07b7628c --- /dev/null +++ b/targettest/strnlen.c @@ -0,0 +1,32 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +const char * str = "0123456789"; + +void +check (size_t result, size_t expected) +{ + if (result != expected) { + printf ("Expected strnlen() to return %d, got %d.\n", + expected, result); + exit (EXIT_FAILURE); + } +} + +int +main (void) +{ + size_t maxlen = strlen (str); + size_t result; + size_t expected; + + for (expected = 0; expected < maxlen; expected++) + check (strnlen (str, expected), expected); + + check (strnlen (str, maxlen << 1), maxlen); + + printf ("strnlen() OK.\n"); + + return EXIT_SUCCESS; +} From ba93ab07bc5652be9b0692180ab0ae616e96c74c Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 09:19:37 +0100 Subject: [PATCH 1007/2710] Do not compile petscii test for unsupported platforms. Only C64 is supported. --- targettest/cbm/Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index 298f80d62..147df2c1c 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -32,8 +32,12 @@ endif all: petscii.prg cbmdir-test.prg +ifeq ($(SYS),c64) petscii.prg: petscii.c $(CL) -t $(SYS) -O -o petscii.prg petscii.c +else +petscii.prg: +endif cbmdir-test.prg: cbmdir-test.c $(CL) -t $(SYS) -Oris -o $@ $< From 58dd28f0536b269c7fe3d03200985e8d05d78c3d Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 09:40:32 +0100 Subject: [PATCH 1008/2710] Make VICE monitor command lists for Commodore platforms. --- targettest/Makefile | 40 +++++++++++++++++++++++++++++++++++++++- targettest/cbm/Makefile | 2 +- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/targettest/Makefile b/targettest/Makefile index f3694335c..16f25fd3f 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -122,6 +122,44 @@ DISK_atarixl = testcode.atr .PRECIOUS: %.o +LDFLAGS= +ifeq ($(SYS),c64) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),c128) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),c16) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),cbm510) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),cbm510) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),cx16) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),geos-cbm) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),lunix) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),pet) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),pet-overlay) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),plus4) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),vic20) + LDFLAGS+=-Ln $@.lst +endif + .o: ifeq ($(SYS),vic20) $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib @@ -386,7 +424,7 @@ testcode.atr: testcode # Clean-up rules mostlyclean: - @$(DEL) *.lbl *.map *.o 2>$(NULLDEV) + @$(DEL) *.lbl *.map *.lst *.o 2>$(NULLDEV) # we cant use .s since we have asm files in the directory that we want to keep @$(DEL) ${patsubst %.c,%.s,$(wildcard *.c)} 2>$(NULLDEV) diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index 147df2c1c..73b51fc76 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -43,4 +43,4 @@ cbmdir-test.prg: cbmdir-test.c $(CL) -t $(SYS) -Oris -o $@ $< clean: - @$(DEL) petscii.prg cbmdir-test.prg 2>$(NULLDEV) + @$(DEL) *.lst petscii.prg cbmdir-test.prg 2>$(NULLDEV) From bdd18d958b47332fbad42d0934b91d5e52639d79 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 09:45:15 +0100 Subject: [PATCH 1009/2710] cbmdir-test for VICs needs memory expansion. --- targettest/cbm/Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index 73b51fc76..3c0678c32 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -40,7 +40,11 @@ petscii.prg: endif cbmdir-test.prg: cbmdir-test.c +ifeq ($(SYS),vic20) + $(CL) -C vic20-32k.cfg -Oris -o $@ $< +else $(CL) -t $(SYS) -Oris -o $@ $< +endif clean: @$(DEL) *.lst petscii.prg cbmdir-test.prg 2>$(NULLDEV) From 65564a158c5347f3e949139833706344a7a35b0b Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 09:57:18 +0100 Subject: [PATCH 1010/2710] Remove most compiler warnings. --- targettest/gamate/ctest.c | 3 +++ targettest/heaptest.c | 6 +++--- targettest/strdup-test.c | 2 +- targettest/tinyshell.c | 14 +++++++------- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/targettest/gamate/ctest.c b/targettest/gamate/ctest.c index bff3f5986..b2c3740c5 100644 --- a/targettest/gamate/ctest.c +++ b/targettest/gamate/ctest.c @@ -9,6 +9,9 @@ unsigned short n; int main(int argc, char *argv[]) { + (void) argc; // Suppress warnings. + (void) argv; + clrscr(); gotoxy(0,0);cputs("Gamate C-Test"); diff --git a/targettest/heaptest.c b/targettest/heaptest.c index 560694bee..e3a21eaa6 100644 --- a/targettest/heaptest.c +++ b/targettest/heaptest.c @@ -6,7 +6,7 @@ -static unsigned char* V[256]; +static char* V[256]; @@ -17,7 +17,7 @@ static char* Alloc (void) unsigned char Size = (((unsigned char)rand()) & 0x7F) + 1; /* Allocate memory */ - unsigned char* P = malloc (Size); + char* P = malloc (Size); /* Set the string to a defined value. We use the size, since this will ** also allow us to retrieve it later. @@ -33,7 +33,7 @@ static char* Alloc (void) -static void Free (unsigned char* P) +static void Free (char* P) /* Check a memory block and free it */ { unsigned char I; diff --git a/targettest/strdup-test.c b/targettest/strdup-test.c index 2fcc9816f..8e7ae87d8 100644 --- a/targettest/strdup-test.c +++ b/targettest/strdup-test.c @@ -5,7 +5,7 @@ #include <_heap.h> -static unsigned char* V[256]; +static char* V[256]; static void ShowInfo (void) /* Show heap info */ diff --git a/targettest/tinyshell.c b/targettest/tinyshell.c index c83bd14e8..71e9b56e3 100644 --- a/targettest/tinyshell.c +++ b/targettest/tinyshell.c @@ -60,13 +60,13 @@ extern unsigned int getsp(void); /* comes from getsp.s */ static unsigned char verbose; static unsigned char terminate; static unsigned char cmd; -static unsigned char *cmd_asc, *arg1, *arg2, *arg3, *args; /* 'args': everything after command */ -static unsigned char keyb_buf[KEYB_BUFSZ + 1]; -static unsigned char keyb_buf2[KEYB_BUFSZ + 1]; +static char *cmd_asc, *arg1, *arg2, *arg3, *args; /* 'args': everything after command */ +static char keyb_buf[KEYB_BUFSZ + 1]; +static char keyb_buf2[KEYB_BUFSZ + 1]; static size_t cpbuf_sz = 4096; struct cmd_table { - unsigned char *name; + char *name; unsigned char code; } cmd_table[] = { { "help", CMD_HELP }, @@ -196,7 +196,7 @@ static void cmd_help(void) static void cmd_ls(void) { DIR *dir; - unsigned char *arg; + char *arg; struct dirent *dirent; #ifdef __ATARI__ char need_free = 0; @@ -356,7 +356,7 @@ static void cmd_rename(void) static void cmd_exec(void) { - unsigned char *progname, *arguments; + char *progname, *arguments; progname = strtok(args, " \t\n"); if (! progname) { @@ -373,7 +373,7 @@ static void cmd_exec(void) static void cmd_copy(void) { int srcfd = -1, dstfd = -1; - unsigned char *buf; + char *buf; int readsz, writesz; if (!arg2 || arg3) { From 666f266e900653fc4f27ba5839b08630af36136b Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 14:21:47 +0100 Subject: [PATCH 1011/2710] Move strnlen() to non-ANSI section. --- include/string.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/string.h b/include/string.h index 70abd5851..83970493e 100644 --- a/include/string.h +++ b/include/string.h @@ -50,7 +50,6 @@ char* __fastcall__ strcpy (char* dest, const char* src); size_t __fastcall__ strcspn (const char* s1, const char* s2); char* __fastcall__ strerror (int errcode); size_t __fastcall__ strlen (const char* s); -size_t __fastcall__ strnlen (const char* s, size_t maxlen); /* POSIX.1-2008 */ char* __fastcall__ strncat (char* s1, const char* s2, size_t count); int __fastcall__ strncmp (const char* s1, const char* s2, size_t count); char* __fastcall__ strncpy (char* dest, const char* src, size_t count); @@ -79,6 +78,7 @@ int __fastcall__ stricmp (const char* s1, const char* s2); /* DOS/Windows */ int __fastcall__ strcasecmp (const char* s1, const char* s2); /* Same for Unix */ int __fastcall__ strnicmp (const char* s1, const char* s2, size_t count); /* DOS/Windows */ int __fastcall__ strncasecmp (const char* s1, const char* s2, size_t count); /* Same for Unix */ +size_t __fastcall__ strnlen (const char* s, size_t maxlen); /* POSIX.1-2008 */ char* __fastcall__ strlwr (char* s); char* __fastcall__ strlower (char* s); char* __fastcall__ strupr (char* s); From d1cbb1deebe0b015f90e954b7a07ab78fe96f165 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 20:04:10 +0100 Subject: [PATCH 1012/2710] More strict printf() format string. --- targettest/strnlen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targettest/strnlen.c b/targettest/strnlen.c index d07b7628c..ac39f2396 100644 --- a/targettest/strnlen.c +++ b/targettest/strnlen.c @@ -8,7 +8,7 @@ void check (size_t result, size_t expected) { if (result != expected) { - printf ("Expected strnlen() to return %d, got %d.\n", + printf ("Expected strnlen() to return %u, got %u.\n", expected, result); exit (EXIT_FAILURE); } From de158c08470f40098fff9de4230c56751b536e88 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 20:07:34 +0100 Subject: [PATCH 1013/2710] Use suffix '.lbl' instead of '.lst'. --- targettest/Makefile | 26 +++++++++++++------------- targettest/cbm/Makefile | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/targettest/Makefile b/targettest/Makefile index 16f25fd3f..6aabe06a3 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -124,40 +124,40 @@ DISK_atarixl = testcode.atr LDFLAGS= ifeq ($(SYS),c64) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),c128) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),c16) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),cbm510) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),cbm510) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),cx16) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),geos-cbm) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),lunix) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),pet) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),pet-overlay) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),plus4) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),vic20) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif .o: @@ -424,7 +424,7 @@ testcode.atr: testcode # Clean-up rules mostlyclean: - @$(DEL) *.lbl *.map *.lst *.o 2>$(NULLDEV) + @$(DEL) *.lbl *.map *.lbl *.o 2>$(NULLDEV) # we cant use .s since we have asm files in the directory that we want to keep @$(DEL) ${patsubst %.c,%.s,$(wildcard *.c)} 2>$(NULLDEV) diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index 3c0678c32..cbff73273 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -47,4 +47,4 @@ else endif clean: - @$(DEL) *.lst petscii.prg cbmdir-test.prg 2>$(NULLDEV) + @$(DEL) *.lbl petscii.prg cbmdir-test.prg 2>$(NULLDEV) From 34dd29556fb72586829de1456f055366bad9083e Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 20:09:18 +0100 Subject: [PATCH 1014/2710] Use -t option alongside -C. --- targettest/Makefile | 2 +- targettest/cbm/Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/targettest/Makefile b/targettest/Makefile index 6aabe06a3..1340fb5eb 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -162,7 +162,7 @@ endif .o: ifeq ($(SYS),vic20) - $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib + $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(SYS) -C vic20-32k.cfg -m $@.map $^ $(SYS).lib else $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(SYS) -m $@.map $^ $(SYS).lib endif diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index cbff73273..a7646c2d9 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -41,7 +41,7 @@ endif cbmdir-test.prg: cbmdir-test.c ifeq ($(SYS),vic20) - $(CL) -C vic20-32k.cfg -Oris -o $@ $< + $(CL) -t $(SYS) -C vic20-32k.cfg -Oris -o $@ $< else $(CL) -t $(SYS) -Oris -o $@ $< endif From 412a30987ad24447f6f3f37d0307c505eb65a5db Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 20:10:53 +0100 Subject: [PATCH 1015/2710] Remove -t option for linker only. --- targettest/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targettest/Makefile b/targettest/Makefile index 1340fb5eb..6aabe06a3 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -162,7 +162,7 @@ endif .o: ifeq ($(SYS),vic20) - $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(SYS) -C vic20-32k.cfg -m $@.map $^ $(SYS).lib + $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib else $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(SYS) -m $@.map $^ $(SYS).lib endif From f4702cbc40d7111118e2d182141bafe145669577 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 20:11:22 +0100 Subject: [PATCH 1016/2710] Make label file for c610 platform. --- targettest/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targettest/Makefile b/targettest/Makefile index 6aabe06a3..f9afff64f 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -135,7 +135,7 @@ endif ifeq ($(SYS),cbm510) LDFLAGS+=-Ln $@.lbl endif -ifeq ($(SYS),cbm510) +ifeq ($(SYS),cbm610) LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),cx16) From 0707cdbe2c75cf36aa7f5098870beddefaa24dda Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 20:12:45 +0100 Subject: [PATCH 1017/2710] Remove command line arguments and return value from main(). --- targettest/gamate/ctest.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/targettest/gamate/ctest.c b/targettest/gamate/ctest.c index b2c3740c5..6b2de2354 100644 --- a/targettest/gamate/ctest.c +++ b/targettest/gamate/ctest.c @@ -7,11 +7,8 @@ unsigned char y = 0; unsigned char x = 0; unsigned short n; -int main(int argc, char *argv[]) +void main(void) { - (void) argc; // Suppress warnings. - (void) argv; - clrscr(); gotoxy(0,0);cputs("Gamate C-Test"); From 3bd72b96599c37d2acf6a1813bd17133caa884b2 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 20:15:09 +0100 Subject: [PATCH 1018/2710] main(): Re-introduce return value. Compiler rejects 'void'. --- targettest/gamate/ctest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targettest/gamate/ctest.c b/targettest/gamate/ctest.c index 6b2de2354..c3ee819bc 100644 --- a/targettest/gamate/ctest.c +++ b/targettest/gamate/ctest.c @@ -7,7 +7,7 @@ unsigned char y = 0; unsigned char x = 0; unsigned short n; -void main(void) +int main(void) { clrscr(); gotoxy(0,0);cputs("Gamate C-Test"); From 05b8af07aa38531a193d10b77a6be59e66400fdc Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 21:21:01 +0100 Subject: [PATCH 1019/2710] main(): No return value. --- targettest/gamate/ctest.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/targettest/gamate/ctest.c b/targettest/gamate/ctest.c index c3ee819bc..9acbe94cd 100644 --- a/targettest/gamate/ctest.c +++ b/targettest/gamate/ctest.c @@ -7,7 +7,7 @@ unsigned char y = 0; unsigned char x = 0; unsigned short n; -int main(void) +void main(void) { clrscr(); gotoxy(0,0);cputs("Gamate C-Test"); @@ -47,6 +47,4 @@ int main(void) (*((unsigned char*)LCD_YPOS)) = y; } - - return 0; } From 683739d6fc308da3a11d3359f5d7ecbc569e3c20 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 21:25:52 +0100 Subject: [PATCH 1020/2710] mostlyclean: Clean up. --- targettest/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targettest/Makefile b/targettest/Makefile index f9afff64f..7d752480b 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -424,7 +424,7 @@ testcode.atr: testcode # Clean-up rules mostlyclean: - @$(DEL) *.lbl *.map *.lbl *.o 2>$(NULLDEV) + @$(DEL) *.lbl *.map *.o 2>$(NULLDEV) # we cant use .s since we have asm files in the directory that we want to keep @$(DEL) ${patsubst %.c,%.s,$(wildcard *.c)} 2>$(NULLDEV) From 4920ffa23a305b3491324a9f6e9d19fc0baada2e Mon Sep 17 00:00:00 2001 From: polluks <polluks@sdf.lonestar.org> Date: Thu, 30 Dec 2021 00:04:57 +0100 Subject: [PATCH 1021/2710] Save a few bytes --- libsrc/cbm/read.s | 2 +- libsrc/cbm/write.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/cbm/read.s b/libsrc/cbm/read.s index fb0bb3171..71ba5d713 100644 --- a/libsrc/cbm/read.s +++ b/libsrc/cbm/read.s @@ -135,7 +135,7 @@ eof: lda #0 devnotpresent: lda #ENODEV - jmp __directerrno ; Sets _errno, clears _oserror, returns -1 + .byte $2C ; Skip next opcode ; Error entry: The given file descriptor is not valid or not open diff --git a/libsrc/cbm/write.s b/libsrc/cbm/write.s index ebc44a0ac..04010f2e4 100644 --- a/libsrc/cbm/write.s +++ b/libsrc/cbm/write.s @@ -106,7 +106,7 @@ devnotpresent2: pla devnotpresent: lda #ENODEV - jmp __directerrno ; Sets _errno, clears _oserror, returns -1 + .byte $2C ; Skip next opcode ; Error entry: The given file descriptor is not valid or not open From 21858b52e7a7b1574c9bc68a441be1ed983a31c4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Jan 2022 13:10:32 +0800 Subject: [PATCH 1022/2710] Separated data initializer stuff from declaration stuff. --- src/cc65.vcxproj | 2 + src/cc65/compile.c | 1 + src/cc65/declare.c | 720 --------------------------------------- src/cc65/declare.h | 5 - src/cc65/expr.c | 1 + src/cc65/initdata.c | 800 ++++++++++++++++++++++++++++++++++++++++++++ src/cc65/initdata.h | 61 ++++ src/cc65/locals.c | 1 + 8 files changed, 866 insertions(+), 725 deletions(-) create mode 100644 src/cc65/initdata.c create mode 100644 src/cc65/initdata.h diff --git a/src/cc65.vcxproj b/src/cc65.vcxproj index 14500296d..5cddc1862 100644 --- a/src/cc65.vcxproj +++ b/src/cc65.vcxproj @@ -93,6 +93,7 @@ <ClInclude Include="cc65\hexval.h" /> <ClInclude Include="cc65\ident.h" /> <ClInclude Include="cc65\incpath.h" /> + <ClInclude Include="cc65\initdata.h" /> <ClInclude Include="cc65\input.h" /> <ClInclude Include="cc65\lineinfo.h" /> <ClInclude Include="cc65\litpool.h" /> @@ -170,6 +171,7 @@ <ClCompile Include="cc65\hexval.c" /> <ClCompile Include="cc65\ident.c" /> <ClCompile Include="cc65\incpath.c" /> + <ClCompile Include="cc65\initdata.c" /> <ClCompile Include="cc65\input.c" /> <ClCompile Include="cc65\lineinfo.c" /> <ClCompile Include="cc65\litpool.c" /> diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 94dfc3ffb..85c9bd5a4 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -56,6 +56,7 @@ #include "funcdesc.h" #include "function.h" #include "global.h" +#include "initdata.h" #include "input.h" #include "litpool.h" #include "macrotab.h" diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 017a69874..67e9a1783 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -66,22 +66,6 @@ -/*****************************************************************************/ -/* Data */ -/*****************************************************************************/ - - - -typedef struct StructInitData StructInitData; -struct StructInitData { - unsigned Size; /* Size of struct */ - unsigned Offs; /* Current offset in struct */ - unsigned BitVal; /* Summed up bit-field value */ - unsigned ValBits; /* Valid bits in Val */ -}; - - - /*****************************************************************************/ /* Forwards */ /*****************************************************************************/ @@ -92,9 +76,6 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, int* SignednessSpecified); /* Parse a type specifier */ -static unsigned ParseInitInternal (Type* T, int* Braces, int AllowFlexibleMembers); -/* Parse initialization of variables. Return the number of data bytes. */ - /*****************************************************************************/ @@ -2121,704 +2102,3 @@ void CheckEmptyDecl (const DeclSpec* D) Warning ("Useless declaration"); } } - - - -static void SkipInitializer (int BracesExpected) -/* Skip the remainder of an initializer in case of errors. Try to be somewhat -** smart so we don't have too many following errors. -*/ -{ - while (CurTok.Tok != TOK_CEOF && CurTok.Tok != TOK_SEMI && BracesExpected >= 0) { - switch (CurTok.Tok) { - case TOK_RCURLY: --BracesExpected; break; - case TOK_LCURLY: ++BracesExpected; break; - default: break; - } - if (BracesExpected >= 0) { - NextToken (); - } - } -} - - - -static unsigned OpeningCurlyBraces (unsigned BracesNeeded) -/* Accept any number of opening curly braces around an initialization, skip -** them and return the number. If the number of curly braces is less than -** BracesNeeded, issue a warning. -*/ -{ - unsigned BraceCount = 0; - while (CurTok.Tok == TOK_LCURLY) { - ++BraceCount; - NextToken (); - } - if (BraceCount < BracesNeeded) { - Error ("'{' expected"); - } - return BraceCount; -} - - - -static void ClosingCurlyBraces (unsigned BracesExpected) -/* Accept and skip the given number of closing curly braces together with -** an optional comma. Output an error messages, if the input does not contain -** the expected number of braces. -*/ -{ - while (BracesExpected) { - /* TODO: Skip all excess initializers until next closing curly brace */ - if (CurTok.Tok == TOK_RCURLY) { - NextToken (); - } else if (CurTok.Tok == TOK_COMMA && NextTok.Tok == TOK_RCURLY) { - NextToken (); - NextToken (); - } else { - Error ("'}' expected"); - return; - } - --BracesExpected; - } -} - - - -static void DefineData (ExprDesc* Expr) -/* Output a data definition for the given expression */ -{ - switch (ED_GetLoc (Expr)) { - - case E_LOC_NONE: - /* Immediate numeric value with no storage */ - g_defdata (CF_IMM | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); - break; - - case E_LOC_ABS: - /* Absolute numeric address */ - g_defdata (CF_ABSOLUTE | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); - break; - - case E_LOC_GLOBAL: - /* Global variable */ - g_defdata (CF_EXTERNAL, Expr->Name, Expr->IVal); - break; - - case E_LOC_STATIC: - /* Static variable */ - g_defdata (CF_STATIC, Expr->Name, Expr->IVal); - break; - - case E_LOC_LITERAL: - /* Literal in the literal pool */ - g_defdata (CF_LITERAL, Expr->Name, Expr->IVal); - break; - - case E_LOC_REGISTER: - /* Register variable. Taking the address is usually not - ** allowed. - */ - if (IS_Get (&AllowRegVarAddr) == 0) { - Error ("Cannot take the address of a register variable"); - } - g_defdata (CF_REGVAR, Expr->Name, Expr->IVal); - break; - - case E_LOC_CODE: - /* Code label location */ - g_defdata (CF_CODE, Expr->Name, Expr->IVal); - break; - - case E_LOC_STACK: - case E_LOC_PRIMARY: - case E_LOC_EXPR: - Error ("Non constant initializer"); - break; - - default: - Internal ("Unknown constant type: 0x%04X", ED_GetLoc (Expr)); - } -} - - - -static void DefineBitFieldData (StructInitData* SI) -/* Output bit field data */ -{ - /* Ignore if we have no data */ - if (SI->ValBits > 0) { - - /* Output the data */ - g_defdata (CF_CHAR | CF_UNSIGNED | CF_CONST, SI->BitVal, 0); - - /* Update the data from SI and account for the size */ - if (SI->ValBits >= CHAR_BITS) { - SI->BitVal >>= CHAR_BITS; - SI->ValBits -= CHAR_BITS; - } else { - SI->BitVal = 0; - SI->ValBits = 0; - } - SI->Offs += SIZEOF_CHAR; - } -} - - - -static void DefineStrData (Literal* Lit, unsigned Count) -{ - /* Translate into target charset */ - TranslateLiteral (Lit); - - /* Output the data */ - g_defbytes (GetLiteralStr (Lit), Count); -} - - - -static ExprDesc ParseScalarInitInternal (const Type* T) -/* Parse initializaton for scalar data types. This function will not output the -** data but return it in ED. -*/ -{ - /* Optional opening brace */ - unsigned BraceCount = OpeningCurlyBraces (0); - - /* We warn if an initializer for a scalar contains braces, because this is - ** quite unusual and often a sign for some problem in the input. - */ - if (BraceCount > 0) { - Warning ("Braces around scalar initializer"); - } - - /* Get the expression and convert it to the target type */ - ExprDesc ED = NoCodeConstExpr (hie1); - TypeConversion (&ED, T); - - /* Close eventually opening braces */ - ClosingCurlyBraces (BraceCount); - - return ED; -} - - - -static unsigned ParseScalarInit (const Type* T) -/* Parse initializaton for scalar data types. Return the number of data bytes. */ -{ - /* Parse initialization */ - ExprDesc ED = ParseScalarInitInternal (T); - - /* Output the data */ - DefineData (&ED); - - /* Do this anyways for safety */ - DoDeferred (SQP_KEEP_NONE, &ED); - - /* Done */ - return SizeOf (T); -} - - - -static unsigned ParsePointerInit (const Type* T) -/* Parse initializaton for pointer data types. Return the number of data bytes. */ -{ - /* Optional opening brace */ - unsigned BraceCount = OpeningCurlyBraces (0); - - /* Expression */ - ExprDesc ED = NoCodeConstExpr (hie1); - TypeConversion (&ED, T); - - /* Output the data */ - DefineData (&ED); - - /* Do this anyways for safety */ - DoDeferred (SQP_KEEP_NONE, &ED); - - /* Close eventually opening braces */ - ClosingCurlyBraces (BraceCount); - - /* Done */ - return SIZEOF_PTR; -} - - - -static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) -/* Parse initializaton for arrays. Return the number of data bytes. */ -{ - int Count; - int HasCurly = 0; - - /* Get the array data */ - Type* ElementType = IndirectModifiable (T); - unsigned ElementSize = SizeOf (ElementType); - long ElementCount = GetElementCount (T); - - /* Special handling for a character array initialized by a literal */ - if (IsClassChar (ElementType) && - (CurTok.Tok == TOK_SCONST || CurTok.Tok == TOK_WCSCONST || - (CurTok.Tok == TOK_LCURLY && - (NextTok.Tok == TOK_SCONST || NextTok.Tok == TOK_WCSCONST)))) { - - /* Char array initialized by string constant */ - int NeedParen; - - /* If we initializer is enclosed in brackets, remember this fact and - ** skip the opening bracket. - */ - NeedParen = (CurTok.Tok == TOK_LCURLY); - if (NeedParen) { - NextToken (); - } - - /* If the array is one too small for the string literal, omit the - ** trailing zero. - */ - Count = GetLiteralSize (CurTok.SVal); - if (ElementCount != UNSPECIFIED && - ElementCount != FLEXIBLE && - Count == ElementCount + 1) { - /* Omit the trailing zero */ - --Count; - } - - /* Output the data */ - DefineStrData (CurTok.SVal, Count); - - /* Skip the string */ - NextToken (); - - /* If the initializer was enclosed in curly braces, we need a closing - ** one. - */ - if (NeedParen) { - ConsumeRCurly (); - } - - } else { - - /* Arrays can be initialized without a pair of curly braces */ - if (*Braces == 0 || CurTok.Tok == TOK_LCURLY) { - /* Consume the opening curly brace */ - HasCurly = ConsumeLCurly (); - *Braces += HasCurly; - } - - /* Initialize the array members */ - Count = 0; - while (CurTok.Tok != TOK_RCURLY) { - /* Flexible array members may not be initialized within - ** an array (because the size of each element may differ - ** otherwise). - */ - ParseInitInternal (ElementType, Braces, 0); - ++Count; - if (CurTok.Tok != TOK_COMMA) - break; - NextToken (); - } - - if (HasCurly) { - /* Closing curly braces */ - ConsumeRCurly (); - } - } - - /* Size of 'void' elements are determined after initialization */ - if (ElementSize == 0) { - ElementSize = SizeOf (ElementType); - } - - if (ElementCount == UNSPECIFIED) { - /* Number of elements determined by initializer */ - SetElementCount (T, Count); - ElementCount = Count; - } else if (ElementCount == FLEXIBLE) { - if (AllowFlexibleMembers) { - /* In non ANSI mode, allow initialization of flexible array - ** members. - */ - ElementCount = Count; - } else { - /* Forbid */ - Error ("Initializing flexible array member is forbidden"); - ElementCount = Count; - } - } else if (Count < ElementCount) { - g_zerobytes ((ElementCount - Count) * ElementSize); - } else if (Count > ElementCount && HasCurly) { - Error ("Excess elements in array initializer"); - } - return ElementCount * ElementSize; -} - - - -static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) -/* Parse initialization of a struct or union. Return the number of data bytes. */ -{ - SymEntry* Sym; - SymTable* Tab; - StructInitData SI; - int HasCurly = 0; - int SkipComma = 0; - - - /* Fields can be initialized without a pair of curly braces */ - if (*Braces == 0 || CurTok.Tok == TOK_LCURLY) { - /* Consume the opening curly brace */ - HasCurly = ConsumeLCurly (); - *Braces += HasCurly; - } - - /* Get a pointer to the struct entry from the type */ - Sym = GetESUSymEntry (T); - - /* Get the size of the struct from the symbol table entry */ - SI.Size = Sym->V.S.Size; - - /* Check if this struct definition has a field table. If it doesn't, it - ** is an incomplete definition. - */ - Tab = Sym->V.S.SymTab; - if (Tab == 0) { - Error ("Cannot initialize variables with incomplete type"); - /* Try error recovery */ - SkipInitializer (HasCurly); - /* Nothing initialized */ - return 0; - } - - /* Get a pointer to the list of symbols */ - Sym = Tab->SymHead; - - /* Initialize fields */ - SI.Offs = 0; - SI.BitVal = 0; - SI.ValBits = 0; - while (CurTok.Tok != TOK_RCURLY) { - - /* Check for excess elements */ - if (Sym == 0) { - /* Is there just one trailing comma before a closing curly? */ - if (NextTok.Tok == TOK_RCURLY && CurTok.Tok == TOK_COMMA) { - /* Skip comma and exit scope */ - NextToken (); - break; - } - - if (HasCurly) { - Error ("Excess elements in %s initializer", GetBasicTypeName (T)); - SkipInitializer (HasCurly); - } - return SI.Offs; - } - - /* Check for special members that don't consume the initializer */ - if ((Sym->Flags & SC_ALIAS) == SC_ALIAS) { - /* Just skip */ - goto NextMember; - } - - /* This may be an anonymous bit-field, in which case it doesn't - ** have an initializer. - */ - if (SymIsBitField (Sym) && (IsAnonName (Sym->Name))) { - /* Account for the data and output it if we have at least a full - ** word. We may have more if there was storage unit overlap, for - ** example two consecutive 10 bit fields. These will be packed - ** into 3 bytes. - */ - SI.ValBits += Sym->Type->A.B.Width; - /* TODO: Generalize this so any type can be used. */ - CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); - while (SI.ValBits >= CHAR_BITS) { - DefineBitFieldData (&SI); - } - /* Avoid consuming the comma if any */ - goto NextMember; - } - - /* Skip comma this round */ - if (SkipComma) { - NextToken (); - SkipComma = 0; - } - - if (SymIsBitField (Sym)) { - - /* Parse initialization of one field. Bit-fields need a special - ** handling. - */ - ExprDesc ED; - ED_Init (&ED); - unsigned Val; - unsigned Shift; - - /* Calculate the bitmask from the bit-field data */ - unsigned Mask = (1U << Sym->Type->A.B.Width) - 1U; - - /* Safety ... */ - CHECK (Sym->V.Offs * CHAR_BITS + Sym->Type->A.B.Offs == - SI.Offs * CHAR_BITS + SI.ValBits); - - /* Read the data, check for a constant integer, do a range check */ - ED = ParseScalarInitInternal (IntPromotion (Sym->Type)); - if (!ED_IsConstAbsInt (&ED)) { - Error ("Constant initializer expected"); - ED_MakeConstAbsInt (&ED, 1); - } - - /* Truncate the initializer value to the width of the bit-field and check if we lost - ** any useful bits. - */ - Val = (unsigned) ED.IVal & Mask; - if (IsSignUnsigned (Sym->Type)) { - if (ED.IVal < 0 || (unsigned long) ED.IVal != Val) { - Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer" - " changes value from %ld to %u", - GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), - Sym->Type->A.B.Width, ED.IVal, Val); - } - } else { - /* Sign extend back to full width of host long. */ - unsigned ShiftBits = sizeof (long) * CHAR_BIT - Sym->Type->A.B.Width; - long RestoredVal = asr_l(asl_l (Val, ShiftBits), ShiftBits); - if (ED.IVal != RestoredVal) { - Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer " - "changes value from %ld to %ld", - GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), - Sym->Type->A.B.Width, ED.IVal, RestoredVal); - } - } - - /* Add the value to the currently stored bit-field value */ - Shift = (Sym->V.Offs - SI.Offs) * CHAR_BITS + Sym->Type->A.B.Offs; - SI.BitVal |= (Val << Shift); - - /* Account for the data and output any full bytes we have. */ - SI.ValBits += Sym->Type->A.B.Width; - /* Make sure unsigned is big enough to hold the value, 22 bits. - ** This is 22 bits because the most we can have is 7 bits left - ** over from the previous OutputBitField call, plus 15 bits - ** from this field. A 16-bit bit-field will always be byte - ** aligned, so will have padding before it. - */ - CHECK (SI.ValBits <= CHAR_BIT * sizeof(SI.BitVal)); - /* TODO: Generalize this so any type can be used. */ - CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); - while (SI.ValBits >= CHAR_BITS) { - DefineBitFieldData (&SI); - } - - } else { - - /* Standard member. We should never have stuff from a - ** bit-field left because an anonymous member was added - ** for padding by ParseStructDecl. - */ - CHECK (SI.ValBits == 0); - - /* Flexible array members may only be initialized if they are - ** the last field (or part of the last struct field). - */ - SI.Offs += ParseInitInternal (Sym->Type, Braces, AllowFlexibleMembers && Sym->NextSym == 0); - } - - /* More initializers? */ - if (CurTok.Tok != TOK_COMMA) { - break; - } - - /* Skip the comma next round */ - SkipComma = 1; - -NextMember: - /* Next member. For unions, only the first one can be initialized */ - if (IsTypeUnion (T)) { - /* Union */ - Sym = 0; - } else { - /* Struct */ - Sym = Sym->NextSym; - } - } - - if (HasCurly) { - /* Consume the closing curly brace */ - ConsumeRCurly (); - } - - /* If we have data from a bit-field left, output it now */ - CHECK (SI.ValBits < CHAR_BITS); - DefineBitFieldData (&SI); - - /* If there are struct fields left, reserve additional storage */ - if (SI.Offs < SI.Size) { - g_zerobytes (SI.Size - SI.Offs); - SI.Offs = SI.Size; - } - - /* Return the actual number of bytes initialized. This number may be - ** larger than sizeof (Struct) if flexible array members are present and - ** were initialized (possible in non ANSI mode). - */ - return SI.Offs; -} - - - -static unsigned ParseVoidInit (Type* T) -/* Parse an initialization of a void variable (special cc65 extension). -** Return the number of bytes initialized. -*/ -{ - unsigned Size; - - /* Opening brace */ - ConsumeLCurly (); - - /* Allow an arbitrary list of values */ - Size = 0; - do { - ExprDesc Expr = NoCodeConstExpr (hie1); - switch (GetUnderlyingTypeCode (&Expr.Type[0])) { - - case T_SCHAR: - case T_UCHAR: - if (ED_IsConstAbsInt (&Expr)) { - /* Make it byte sized */ - Expr.IVal &= 0xFF; - } - DefineData (&Expr); - Size += SIZEOF_CHAR; - break; - - case T_SHORT: - case T_USHORT: - case T_INT: - case T_UINT: - case T_PTR: - case T_ARRAY: - if (ED_IsConstAbsInt (&Expr)) { - /* Make it word sized */ - Expr.IVal &= 0xFFFF; - } - DefineData (&Expr); - Size += SIZEOF_INT; - break; - - case T_LONG: - case T_ULONG: - if (ED_IsConstAbsInt (&Expr)) { - /* Make it dword sized */ - Expr.IVal &= 0xFFFFFFFF; - } - DefineData (&Expr); - Size += SIZEOF_LONG; - break; - - default: - Error ("Illegal type in initialization"); - break; - - } - - if (CurTok.Tok != TOK_COMMA) { - break; - } - NextToken (); - - } while (CurTok.Tok != TOK_RCURLY); - - /* Closing brace */ - ConsumeRCurly (); - - /* Number of bytes determined by initializer */ - if (T->A.U != 0 && T->A.U != Size) { - Error ("'void' array initialized with elements of variant sizes"); - } else { - T->A.U = Size; - } - - /* Return the number of bytes initialized */ - return Size; -} - - - -static unsigned ParseInitInternal (Type* T, int *Braces, int AllowFlexibleMembers) -/* Parse initialization of variables. Return the number of data bytes. */ -{ - switch (GetUnderlyingTypeCode (T)) { - - case T_SCHAR: - case T_UCHAR: - case T_SHORT: - case T_USHORT: - case T_INT: - case T_UINT: - case T_LONG: - case T_ULONG: - case T_FLOAT: - case T_DOUBLE: - return ParseScalarInit (T); - - case T_PTR: - return ParsePointerInit (T); - - case T_ARRAY: - return ParseArrayInit (T, Braces, AllowFlexibleMembers); - - case T_STRUCT: - case T_UNION: - return ParseStructInit (T, Braces, AllowFlexibleMembers); - - case T_ENUM: - /* Incomplete enum type must have already raised errors. - ** Just proceed to consume the value. - */ - return ParseScalarInit (T); - - case T_VOID: - if (IS_Get (&Standard) == STD_CC65) { - /* Special cc65 extension in non-ANSI mode */ - return ParseVoidInit (T); - } - /* FALLTHROUGH */ - - default: - Error ("Illegal type"); - return SIZEOF_CHAR; - - } -} - - - -unsigned ParseInit (Type* T) -/* Parse initialization of variables. Return the number of data bytes. */ -{ - /* Current curly braces layers */ - int Braces = 0; - - /* Parse the initialization. Flexible array members can only be initialized - ** in cc65 mode. - */ - unsigned Size = ParseInitInternal (T, &Braces, IS_Get (&Standard) == STD_CC65); - - /* The initialization may not generate code on global level, because code - ** outside function scope will never get executed. - */ - if (HaveGlobalCode ()) { - Error ("Non constant initializers"); - RemoveGlobalCode (); - } - - /* Return the size needed for the initialization */ - return Size; -} diff --git a/src/cc65/declare.h b/src/cc65/declare.h index 3293a0dcb..2b8b36f1c 100644 --- a/src/cc65/declare.h +++ b/src/cc65/declare.h @@ -114,11 +114,6 @@ void CheckEmptyDecl (const DeclSpec* D); ** warning if not. */ -unsigned ParseInit (Type* T); -/* Parse initialization of variables. Return the number of initialized data -** bytes. -*/ - /* End of declare.h */ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 3b3754665..0275e61a3 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -25,6 +25,7 @@ #include "funcdesc.h" #include "function.h" #include "global.h" +#include "initdata.h" #include "litpool.h" #include "loadexpr.h" #include "macrotab.h" diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c new file mode 100644 index 000000000..1f8b35ce4 --- /dev/null +++ b/src/cc65/initdata.c @@ -0,0 +1,800 @@ +/*****************************************************************************/ +/* */ +/* initdata.c */ +/* */ +/* Parse and generate initializer data */ +/* */ +/* */ +/* */ +/* (C) 1998-2015, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#include <limits.h> +#include <stdio.h> +#include <string.h> +#include <errno.h> + +/* common */ +#include "addrsize.h" +#include "mmodel.h" +#include "shift.h" +#include "xmalloc.h" + +/* cc65 */ +#include "anonname.h" +#include "codegen.h" +#include "datatype.h" +#include "declattr.h" +#include "error.h" +#include "expr.h" +#include "exprdesc.h" +#include "funcdesc.h" +#include "function.h" +#include "global.h" +#include "litpool.h" +#include "pragma.h" +#include "scanner.h" +#include "shift.h" +#include "standard.h" +#include "symtab.h" +#include "wrappedcall.h" +#include "typeconv.h" +#include "initdata.h" + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +typedef struct StructInitData StructInitData; +struct StructInitData { + unsigned Size; /* Size of struct */ + unsigned Offs; /* Current offset in struct */ + unsigned BitVal; /* Summed up bit-field value */ + unsigned ValBits; /* Valid bits in Val */ +}; + + + +/*****************************************************************************/ +/* Forwards */ +/*****************************************************************************/ + + + +static unsigned ParseInitInternal (Type* T, int* Braces, int AllowFlexibleMembers); +/* Parse initialization of variables. Return the number of data bytes. */ + + + +/*****************************************************************************/ +/* code */ +/*****************************************************************************/ + + + +static void SkipInitializer (int BracesExpected) +/* Skip the remainder of an initializer in case of errors. Try to be somewhat +** smart so we don't have too many following errors. +*/ +{ + while (CurTok.Tok != TOK_CEOF && CurTok.Tok != TOK_SEMI && BracesExpected >= 0) { + switch (CurTok.Tok) { + case TOK_RCURLY: --BracesExpected; break; + case TOK_LCURLY: ++BracesExpected; break; + default: break; + } + if (BracesExpected >= 0) { + NextToken (); + } + } +} + + + +static unsigned OpeningCurlyBraces (unsigned BracesNeeded) +/* Accept any number of opening curly braces around an initialization, skip +** them and return the number. If the number of curly braces is less than +** BracesNeeded, issue a warning. +*/ +{ + unsigned BraceCount = 0; + while (CurTok.Tok == TOK_LCURLY) { + ++BraceCount; + NextToken (); + } + if (BraceCount < BracesNeeded) { + Error ("'{' expected"); + } + return BraceCount; +} + + + +static void ClosingCurlyBraces (unsigned BracesExpected) +/* Accept and skip the given number of closing curly braces together with +** an optional comma. Output an error messages, if the input does not contain +** the expected number of braces. +*/ +{ + while (BracesExpected) { + /* TODO: Skip all excess initializers until next closing curly brace */ + if (CurTok.Tok == TOK_RCURLY) { + NextToken (); + } else if (CurTok.Tok == TOK_COMMA && NextTok.Tok == TOK_RCURLY) { + NextToken (); + NextToken (); + } else { + Error ("'}' expected"); + return; + } + --BracesExpected; + } +} + + + +static void DefineData (ExprDesc* Expr) +/* Output a data definition for the given expression */ +{ + switch (ED_GetLoc (Expr)) { + + case E_LOC_NONE: + /* Immediate numeric value with no storage */ + g_defdata (CF_IMM | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); + break; + + case E_LOC_ABS: + /* Absolute numeric address */ + g_defdata (CF_ABSOLUTE | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); + break; + + case E_LOC_GLOBAL: + /* Global variable */ + g_defdata (CF_EXTERNAL, Expr->Name, Expr->IVal); + break; + + case E_LOC_STATIC: + /* Static variable */ + g_defdata (CF_STATIC, Expr->Name, Expr->IVal); + break; + + case E_LOC_LITERAL: + /* Literal in the literal pool */ + g_defdata (CF_LITERAL, Expr->Name, Expr->IVal); + break; + + case E_LOC_REGISTER: + /* Register variable. Taking the address is usually not + ** allowed. + */ + if (IS_Get (&AllowRegVarAddr) == 0) { + Error ("Cannot take the address of a register variable"); + } + g_defdata (CF_REGVAR, Expr->Name, Expr->IVal); + break; + + case E_LOC_CODE: + /* Code label location */ + g_defdata (CF_CODE, Expr->Name, Expr->IVal); + break; + + case E_LOC_STACK: + case E_LOC_PRIMARY: + case E_LOC_EXPR: + Error ("Non constant initializer"); + break; + + default: + Internal ("Unknown constant type: 0x%04X", ED_GetLoc (Expr)); + } +} + + + +static void DefineBitFieldData (StructInitData* SI) +/* Output bit field data */ +{ + /* Ignore if we have no data */ + if (SI->ValBits > 0) { + + /* Output the data */ + g_defdata (CF_CHAR | CF_UNSIGNED | CF_CONST, SI->BitVal, 0); + + /* Update the data from SI and account for the size */ + if (SI->ValBits >= CHAR_BITS) { + SI->BitVal >>= CHAR_BITS; + SI->ValBits -= CHAR_BITS; + } else { + SI->BitVal = 0; + SI->ValBits = 0; + } + SI->Offs += SIZEOF_CHAR; + } +} + + + +static void DefineStrData (Literal* Lit, unsigned Count) +{ + /* Translate into target charset */ + TranslateLiteral (Lit); + + /* Output the data */ + g_defbytes (GetLiteralStr (Lit), Count); +} + + + +static ExprDesc ParseScalarInitInternal (const Type* T) +/* Parse initializaton for scalar data types. This function will not output the +** data but return it in ED. +*/ +{ + /* Optional opening brace */ + unsigned BraceCount = OpeningCurlyBraces (0); + + /* We warn if an initializer for a scalar contains braces, because this is + ** quite unusual and often a sign for some problem in the input. + */ + if (BraceCount > 0) { + Warning ("Braces around scalar initializer"); + } + + /* Get the expression and convert it to the target type */ + ExprDesc ED = NoCodeConstExpr (hie1); + TypeConversion (&ED, T); + + /* Close eventually opening braces */ + ClosingCurlyBraces (BraceCount); + + return ED; +} + + + +static unsigned ParseScalarInit (const Type* T) +/* Parse initializaton for scalar data types. Return the number of data bytes. */ +{ + /* Parse initialization */ + ExprDesc ED = ParseScalarInitInternal (T); + + /* Output the data */ + DefineData (&ED); + + /* Do this anyways for safety */ + DoDeferred (SQP_KEEP_NONE, &ED); + + /* Done */ + return SizeOf (T); +} + + + +static unsigned ParsePointerInit (const Type* T) +/* Parse initializaton for pointer data types. Return the number of data bytes. */ +{ + /* Optional opening brace */ + unsigned BraceCount = OpeningCurlyBraces (0); + + /* Expression */ + ExprDesc ED = NoCodeConstExpr (hie1); + TypeConversion (&ED, T); + + /* Output the data */ + DefineData (&ED); + + /* Do this anyways for safety */ + DoDeferred (SQP_KEEP_NONE, &ED); + + /* Close eventually opening braces */ + ClosingCurlyBraces (BraceCount); + + /* Done */ + return SIZEOF_PTR; +} + + + +static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) +/* Parse initializaton for arrays. Return the number of data bytes. */ +{ + int Count; + int HasCurly = 0; + + /* Get the array data */ + Type* ElementType = IndirectModifiable (T); + unsigned ElementSize = SizeOf (ElementType); + long ElementCount = GetElementCount (T); + + /* Special handling for a character array initialized by a literal */ + if (IsClassChar (ElementType) && + (CurTok.Tok == TOK_SCONST || CurTok.Tok == TOK_WCSCONST || + (CurTok.Tok == TOK_LCURLY && + (NextTok.Tok == TOK_SCONST || NextTok.Tok == TOK_WCSCONST)))) { + + /* Char array initialized by string constant */ + int NeedParen; + + /* If we initializer is enclosed in brackets, remember this fact and + ** skip the opening bracket. + */ + NeedParen = (CurTok.Tok == TOK_LCURLY); + if (NeedParen) { + NextToken (); + } + + /* If the array is one too small for the string literal, omit the + ** trailing zero. + */ + Count = GetLiteralSize (CurTok.SVal); + if (ElementCount != UNSPECIFIED && + ElementCount != FLEXIBLE && + Count == ElementCount + 1) { + /* Omit the trailing zero */ + --Count; + } + + /* Output the data */ + DefineStrData (CurTok.SVal, Count); + + /* Skip the string */ + NextToken (); + + /* If the initializer was enclosed in curly braces, we need a closing + ** one. + */ + if (NeedParen) { + ConsumeRCurly (); + } + + } else { + + /* Arrays can be initialized without a pair of curly braces */ + if (*Braces == 0 || CurTok.Tok == TOK_LCURLY) { + /* Consume the opening curly brace */ + HasCurly = ConsumeLCurly (); + *Braces += HasCurly; + } + + /* Initialize the array members */ + Count = 0; + while (CurTok.Tok != TOK_RCURLY) { + /* Flexible array members may not be initialized within + ** an array (because the size of each element may differ + ** otherwise). + */ + ParseInitInternal (ElementType, Braces, 0); + ++Count; + if (CurTok.Tok != TOK_COMMA) + break; + NextToken (); + } + + if (HasCurly) { + /* Closing curly braces */ + ConsumeRCurly (); + } + } + + /* Size of 'void' elements are determined after initialization */ + if (ElementSize == 0) { + ElementSize = SizeOf (ElementType); + } + + if (ElementCount == UNSPECIFIED) { + /* Number of elements determined by initializer */ + SetElementCount (T, Count); + ElementCount = Count; + } else if (ElementCount == FLEXIBLE) { + if (AllowFlexibleMembers) { + /* In non ANSI mode, allow initialization of flexible array + ** members. + */ + ElementCount = Count; + } else { + /* Forbid */ + Error ("Initializing flexible array member is forbidden"); + ElementCount = Count; + } + } else if (Count < ElementCount) { + g_zerobytes ((ElementCount - Count) * ElementSize); + } else if (Count > ElementCount && HasCurly) { + Error ("Excess elements in array initializer"); + } + return ElementCount * ElementSize; +} + + + +static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) +/* Parse initialization of a struct or union. Return the number of data bytes. */ +{ + SymEntry* Sym; + SymTable* Tab; + StructInitData SI; + int HasCurly = 0; + int SkipComma = 0; + + + /* Fields can be initialized without a pair of curly braces */ + if (*Braces == 0 || CurTok.Tok == TOK_LCURLY) { + /* Consume the opening curly brace */ + HasCurly = ConsumeLCurly (); + *Braces += HasCurly; + } + + /* Get a pointer to the struct entry from the type */ + Sym = GetESUSymEntry (T); + + /* Get the size of the struct from the symbol table entry */ + SI.Size = Sym->V.S.Size; + + /* Check if this struct definition has a field table. If it doesn't, it + ** is an incomplete definition. + */ + Tab = Sym->V.S.SymTab; + if (Tab == 0) { + Error ("Cannot initialize variables with incomplete type"); + /* Try error recovery */ + SkipInitializer (HasCurly); + /* Nothing initialized */ + return 0; + } + + /* Get a pointer to the list of symbols */ + Sym = Tab->SymHead; + + /* Initialize fields */ + SI.Offs = 0; + SI.BitVal = 0; + SI.ValBits = 0; + while (CurTok.Tok != TOK_RCURLY) { + + /* Check for excess elements */ + if (Sym == 0) { + /* Is there just one trailing comma before a closing curly? */ + if (NextTok.Tok == TOK_RCURLY && CurTok.Tok == TOK_COMMA) { + /* Skip comma and exit scope */ + NextToken (); + break; + } + + if (HasCurly) { + Error ("Excess elements in %s initializer", GetBasicTypeName (T)); + SkipInitializer (HasCurly); + } + return SI.Offs; + } + + /* Check for special members that don't consume the initializer */ + if ((Sym->Flags & SC_ALIAS) == SC_ALIAS) { + /* Just skip */ + goto NextMember; + } + + /* This may be an anonymous bit-field, in which case it doesn't + ** have an initializer. + */ + if (SymIsBitField (Sym) && (IsAnonName (Sym->Name))) { + /* Account for the data and output it if we have at least a full + ** word. We may have more if there was storage unit overlap, for + ** example two consecutive 10 bit fields. These will be packed + ** into 3 bytes. + */ + SI.ValBits += Sym->Type->A.B.Width; + /* TODO: Generalize this so any type can be used. */ + CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); + while (SI.ValBits >= CHAR_BITS) { + DefineBitFieldData (&SI); + } + /* Avoid consuming the comma if any */ + goto NextMember; + } + + /* Skip comma this round */ + if (SkipComma) { + NextToken (); + SkipComma = 0; + } + + if (SymIsBitField (Sym)) { + + /* Parse initialization of one field. Bit-fields need a special + ** handling. + */ + ExprDesc ED; + ED_Init (&ED); + unsigned Val; + unsigned Shift; + + /* Calculate the bitmask from the bit-field data */ + unsigned Mask = (1U << Sym->Type->A.B.Width) - 1U; + + /* Safety ... */ + CHECK (Sym->V.Offs * CHAR_BITS + Sym->Type->A.B.Offs == + SI.Offs * CHAR_BITS + SI.ValBits); + + /* Read the data, check for a constant integer, do a range check */ + ED = ParseScalarInitInternal (IntPromotion (Sym->Type)); + if (!ED_IsConstAbsInt (&ED)) { + Error ("Constant initializer expected"); + ED_MakeConstAbsInt (&ED, 1); + } + + /* Truncate the initializer value to the width of the bit-field and check if we lost + ** any useful bits. + */ + Val = (unsigned) ED.IVal & Mask; + if (IsSignUnsigned (Sym->Type)) { + if (ED.IVal < 0 || (unsigned long) ED.IVal != Val) { + Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer" + " changes value from %ld to %u", + GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), + Sym->Type->A.B.Width, ED.IVal, Val); + } + } else { + /* Sign extend back to full width of host long. */ + unsigned ShiftBits = sizeof (long) * CHAR_BIT - Sym->Type->A.B.Width; + long RestoredVal = asr_l(asl_l (Val, ShiftBits), ShiftBits); + if (ED.IVal != RestoredVal) { + Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer " + "changes value from %ld to %ld", + GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), + Sym->Type->A.B.Width, ED.IVal, RestoredVal); + } + } + + /* Add the value to the currently stored bit-field value */ + Shift = (Sym->V.Offs - SI.Offs) * CHAR_BITS + Sym->Type->A.B.Offs; + SI.BitVal |= (Val << Shift); + + /* Account for the data and output any full bytes we have. */ + SI.ValBits += Sym->Type->A.B.Width; + /* Make sure unsigned is big enough to hold the value, 22 bits. + ** This is 22 bits because the most we can have is 7 bits left + ** over from the previous OutputBitField call, plus 15 bits + ** from this field. A 16-bit bit-field will always be byte + ** aligned, so will have padding before it. + */ + CHECK (SI.ValBits <= CHAR_BIT * sizeof(SI.BitVal)); + /* TODO: Generalize this so any type can be used. */ + CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); + while (SI.ValBits >= CHAR_BITS) { + DefineBitFieldData (&SI); + } + + } else { + + /* Standard member. We should never have stuff from a + ** bit-field left because an anonymous member was added + ** for padding by ParseStructDecl. + */ + CHECK (SI.ValBits == 0); + + /* Flexible array members may only be initialized if they are + ** the last field (or part of the last struct field). + */ + SI.Offs += ParseInitInternal (Sym->Type, Braces, AllowFlexibleMembers && Sym->NextSym == 0); + } + + /* More initializers? */ + if (CurTok.Tok != TOK_COMMA) { + break; + } + + /* Skip the comma next round */ + SkipComma = 1; + +NextMember: + /* Next member. For unions, only the first one can be initialized */ + if (IsTypeUnion (T)) { + /* Union */ + Sym = 0; + } else { + /* Struct */ + Sym = Sym->NextSym; + } + } + + if (HasCurly) { + /* Consume the closing curly brace */ + ConsumeRCurly (); + } + + /* If we have data from a bit-field left, output it now */ + CHECK (SI.ValBits < CHAR_BITS); + DefineBitFieldData (&SI); + + /* If there are struct fields left, reserve additional storage */ + if (SI.Offs < SI.Size) { + g_zerobytes (SI.Size - SI.Offs); + SI.Offs = SI.Size; + } + + /* Return the actual number of bytes initialized. This number may be + ** larger than sizeof (Struct) if flexible array members are present and + ** were initialized (possible in non ANSI mode). + */ + return SI.Offs; +} + + + +static unsigned ParseVoidInit (Type* T) +/* Parse an initialization of a void variable (special cc65 extension). +** Return the number of bytes initialized. +*/ +{ + unsigned Size; + + /* Opening brace */ + ConsumeLCurly (); + + /* Allow an arbitrary list of values */ + Size = 0; + do { + ExprDesc Expr = NoCodeConstExpr (hie1); + switch (GetUnderlyingTypeCode (&Expr.Type[0])) { + + case T_SCHAR: + case T_UCHAR: + if (ED_IsConstAbsInt (&Expr)) { + /* Make it byte sized */ + Expr.IVal &= 0xFF; + } + DefineData (&Expr); + Size += SIZEOF_CHAR; + break; + + case T_SHORT: + case T_USHORT: + case T_INT: + case T_UINT: + case T_PTR: + case T_ARRAY: + if (ED_IsConstAbsInt (&Expr)) { + /* Make it word sized */ + Expr.IVal &= 0xFFFF; + } + DefineData (&Expr); + Size += SIZEOF_INT; + break; + + case T_LONG: + case T_ULONG: + if (ED_IsConstAbsInt (&Expr)) { + /* Make it dword sized */ + Expr.IVal &= 0xFFFFFFFF; + } + DefineData (&Expr); + Size += SIZEOF_LONG; + break; + + default: + Error ("Illegal type in initialization"); + break; + + } + + if (CurTok.Tok != TOK_COMMA) { + break; + } + NextToken (); + + } while (CurTok.Tok != TOK_RCURLY); + + /* Closing brace */ + ConsumeRCurly (); + + /* Number of bytes determined by initializer */ + if (T->A.U != 0 && T->A.U != Size) { + Error ("'void' array initialized with elements of variant sizes"); + } else { + T->A.U = Size; + } + + /* Return the number of bytes initialized */ + return Size; +} + + + +static unsigned ParseInitInternal (Type* T, int *Braces, int AllowFlexibleMembers) +/* Parse initialization of variables. Return the number of data bytes. */ +{ + switch (GetUnderlyingTypeCode (T)) { + + case T_SCHAR: + case T_UCHAR: + case T_SHORT: + case T_USHORT: + case T_INT: + case T_UINT: + case T_LONG: + case T_ULONG: + case T_FLOAT: + case T_DOUBLE: + return ParseScalarInit (T); + + case T_PTR: + return ParsePointerInit (T); + + case T_ARRAY: + return ParseArrayInit (T, Braces, AllowFlexibleMembers); + + case T_STRUCT: + case T_UNION: + return ParseStructInit (T, Braces, AllowFlexibleMembers); + + case T_ENUM: + /* Incomplete enum type must have already raised errors. + ** Just proceed to consume the value. + */ + return ParseScalarInit (T); + + case T_VOID: + if (IS_Get (&Standard) == STD_CC65) { + /* Special cc65 extension in non-ANSI mode */ + return ParseVoidInit (T); + } + /* FALLTHROUGH */ + + default: + Error ("Illegal type"); + return SIZEOF_CHAR; + + } +} + + + +unsigned ParseInit (Type* T) +/* Parse initialization of variables. Return the number of data bytes. */ +{ + /* Current curly braces layers */ + int Braces = 0; + + /* Parse the initialization. Flexible array members can only be initialized + ** in cc65 mode. + */ + unsigned Size = ParseInitInternal (T, &Braces, IS_Get (&Standard) == STD_CC65); + + /* The initialization may not generate code on global level, because code + ** outside function scope will never get executed. + */ + if (HaveGlobalCode ()) { + Error ("Non constant initializers"); + RemoveGlobalCode (); + } + + /* Return the size needed for the initialization */ + return Size; +} diff --git a/src/cc65/initdata.h b/src/cc65/initdata.h new file mode 100644 index 000000000..6fa3f20b3 --- /dev/null +++ b/src/cc65/initdata.h @@ -0,0 +1,61 @@ +/*****************************************************************************/ +/* */ +/* initdata.h */ +/* */ +/* Parse and generate initializer data */ +/* */ +/* */ +/* */ +/* (C) 1998-2009, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef INITDATA_H +#define INITDATA_H + + + +/* cc65 */ +#include "datatype.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +unsigned ParseInit (Type* T); +/* Parse initialization of variables. Return the number of initialized data +** bytes. +*/ + + + +/* End of initdata.h */ + +#endif diff --git a/src/cc65/locals.c b/src/cc65/locals.c index d3902f329..297994455 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -46,6 +46,7 @@ #include "expr.h" #include "function.h" #include "global.h" +#include "initdata.h" #include "loadexpr.h" #include "locals.h" #include "stackptr.h" From 38511843e5172e93204480dbc3f5ebe1c7a6c774 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Jan 2022 23:50:48 +0800 Subject: [PATCH 1023/2710] Fixed crash with labels in non-function/block scopes. --- src/cc65/declare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index c1346e872..8af67524f 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1485,7 +1485,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, ** long as it has no qualifiers. */ D->Flags |= DS_DEF_TYPE; - D->Type[0].C = T_QUAL_NONE; + D->Type[0].C = T_INT; D->Type[1].C = T_END; break; } From 6beb090193ee932ee67bed553f54d721c48c276d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Jan 2022 23:54:14 +0800 Subject: [PATCH 1024/2710] Fixed anonymous bit-fields declared with typedef'ed type names. --- src/cc65/declare.c | 2 +- src/cc65/symtab.c | 95 +++++++++++++++++++++++++++++++++++++--------- src/cc65/symtab.h | 23 ++++++++++- 3 files changed, 100 insertions(+), 20 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 8af67524f..fa4c52818 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1462,7 +1462,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, case TOK_IDENT: /* This could be a label */ - if (NextTok.Tok != TOK_COLON) { + if (NextTok.Tok != TOK_COLON || GetLexicalLevel () == LEX_LEVEL_STRUCT) { Entry = FindSym (CurTok.Ident); if (Entry && SymIsTypeDef (Entry)) { /* It's a typedef */ diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 3de0bb460..c1c5c4696 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -88,7 +88,8 @@ SymTable EmptySymTab = { #define SYMTAB_SIZE_LABEL 7U /* The current and root symbol tables */ -static unsigned LexicalLevel = 0; /* For safety checks */ +static unsigned LexLevelDepth = 0; /* For safety checks */ +static LexicalLevel* CurrentLex = 0; static SymTable* SymTab0 = 0; static SymTable* SymTab = 0; static SymTable* TagTab0 = 0; @@ -213,10 +214,46 @@ static void CheckSymTable (SymTable* Tab) +unsigned GetLexicalLevelDepth (void) +/* Return the current lexical level depth */ +{ + return LexLevelDepth; +} + + + unsigned GetLexicalLevel (void) /* Return the current lexical level */ { - return LexicalLevel; + if (CurrentLex != 0) { + return CurrentLex->CurrentLevel; + } + return LEX_LEVEL_NONE; +} + + + +void PushLexicalLevel (unsigned NewLevel) +/* Enter the specified lexical level */ +{ + LexicalLevel* L = xmalloc (sizeof (LexicalLevel)); + L->PrevLex = CurrentLex; + CurrentLex = L; + CurrentLex->CurrentLevel = NewLevel; + ++LexLevelDepth; +} + + + +void PopLexicalLevel (void) +/* Exit the current lexical level */ +{ + LexicalLevel* L; + PRECONDITION (CurrentLex != 0 && LexLevelDepth > 0); + L = CurrentLex; + CurrentLex = L->PrevLex; + xfree (L); + --LexLevelDepth; } @@ -225,7 +262,10 @@ void EnterGlobalLevel (void) /* Enter the program global lexical level */ { /* Safety */ - PRECONDITION (++LexicalLevel == LEX_LEVEL_GLOBAL); + PRECONDITION (GetLexicalLevel () == LEX_LEVEL_NONE); + + /* Enter global lexical level */ + PushLexicalLevel (LEX_LEVEL_GLOBAL); /* Create and assign the symbol table */ SymTab0 = SymTab = NewSymTable (SYMTAB_SIZE_GLOBAL); @@ -246,7 +286,7 @@ void LeaveGlobalLevel (void) /* Leave the program global lexical level */ { /* Safety */ - PRECONDITION (LexicalLevel-- == LEX_LEVEL_GLOBAL); + PRECONDITION (GetLexicalLevel () == LEX_LEVEL_GLOBAL); /* Check the tables */ CheckSymTable (SymTab0); @@ -260,6 +300,9 @@ void LeaveGlobalLevel (void) /* Don't delete the symbol and struct tables! */ SymTab = 0; TagTab = 0; + + /* Exit global lexical level */ + PopLexicalLevel (); } @@ -269,8 +312,8 @@ void EnterFunctionLevel (void) { SymTable* S; - /* New lexical level */ - ++LexicalLevel; + /* Enter function lexical level */ + PushLexicalLevel (LEX_LEVEL_FUNCTION); /* Get a new symbol table and make it current */ S = NewSymTable (SYMTAB_SIZE_FUNCTION); @@ -293,8 +336,11 @@ void EnterFunctionLevel (void) void RememberFunctionLevel (struct FuncDesc* F) /* Remember the symbol tables for the level and leave the level without checks */ { - /* Leave the lexical level */ - --LexicalLevel; + /* Safety */ + PRECONDITION (GetLexicalLevel () == LEX_LEVEL_FUNCTION); + + /* Leave function lexical level */ + PopLexicalLevel (); /* Remember the tables */ F->SymTab = SymTab; @@ -311,8 +357,8 @@ void RememberFunctionLevel (struct FuncDesc* F) void ReenterFunctionLevel (struct FuncDesc* F) /* Reenter the function lexical level using the existing tables from F */ { - /* New lexical level */ - ++LexicalLevel; + /* Enter function lexical level */ + PushLexicalLevel (LEX_LEVEL_FUNCTION); /* Make the tables current again */ F->SymTab->PrevTab = SymTab; @@ -330,8 +376,11 @@ void ReenterFunctionLevel (struct FuncDesc* F) void LeaveFunctionLevel (void) /* Leave function lexical level */ { - /* Leave the lexical level */ - --LexicalLevel; + /* Safety */ + PRECONDITION (GetLexicalLevel () == LEX_LEVEL_FUNCTION); + + /* Leave function lexical level */ + PopLexicalLevel (); /* Check the tables */ CheckSymTable (SymTab); @@ -355,8 +404,8 @@ void EnterBlockLevel (void) { SymTable* S; - /* New lexical level */ - ++LexicalLevel; + /* Enter block lexical level */ + PushLexicalLevel (LEX_LEVEL_BLOCK); /* Get a new symbol table and make it current */ S = NewSymTable (SYMTAB_SIZE_BLOCK); @@ -374,8 +423,11 @@ void EnterBlockLevel (void) void LeaveBlockLevel (void) /* Leave a nested block in a function */ { - /* Leave the lexical level */ - --LexicalLevel; + /* Safety */ + PRECONDITION (GetLexicalLevel () == LEX_LEVEL_BLOCK); + + /* Leave block lexical level */ + PopLexicalLevel (); /* Check the tables */ CheckSymTable (SymTab); @@ -392,6 +444,9 @@ void EnterStructLevel (void) { SymTable* S; + /* Enter struct lexical level */ + PushLexicalLevel (LEX_LEVEL_STRUCT); + /* Get a new symbol table and make it current. Note: Structs and enums ** nested in struct scope are NOT local to the struct but visible in the ** outside scope. So we will NOT create a new struct or enum table. @@ -406,6 +461,12 @@ void EnterStructLevel (void) void LeaveStructLevel (void) /* Leave a nested block for a struct definition */ { + /* Safety */ + PRECONDITION (GetLexicalLevel () == LEX_LEVEL_STRUCT); + + /* Leave struct lexical level */ + PopLexicalLevel (); + /* Don't delete the table */ FieldTab = FieldTab->PrevTab; } @@ -1398,7 +1459,7 @@ void EmitDebugInfo (void) /* For cosmetic reasons in the output file, we will insert two tabs ** on global level and just one on local level. */ - if (LexicalLevel == LEX_LEVEL_GLOBAL) { + if (GetLexicalLevel () == LEX_LEVEL_GLOBAL) { Head = "\t.dbg\t\tsym"; } else { Head = "\t.dbg\tsym"; diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h index 469a4ba77..1df61a822 100644 --- a/src/cc65/symtab.h +++ b/src/cc65/symtab.h @@ -65,12 +65,22 @@ struct SymTable { /* An empty symbol table */ extern SymTable EmptySymTab; -/* Forwards */ -struct FuncDesc; +/* Lexical level linked list node type */ +typedef struct LexicalLevel LexicalLevel; +struct LexicalLevel { + LexicalLevel* PrevLex; + unsigned CurrentLevel; +}; /* Predefined lexical levels */ +#define LEX_LEVEL_NONE 0U #define LEX_LEVEL_GLOBAL 1U #define LEX_LEVEL_FUNCTION 2U +#define LEX_LEVEL_BLOCK 3U +#define LEX_LEVEL_STRUCT 4U + +/* Forwards */ +struct FuncDesc; @@ -80,9 +90,18 @@ struct FuncDesc; +unsigned GetLexicalLevelDepth (void); +/* Return the current lexical level depth */ + unsigned GetLexicalLevel (void); /* Return the current lexical level */ +void PushLexicalLevel (unsigned NewLevel); +/* Enter the specified lexical level */ + +void PopLexicalLevel (void); +/* Exit the current lexical level */ + void EnterGlobalLevel (void); /* Enter the program global lexical level */ From 4f4487cb032a26478a0ac27fcaf0d29812118d7f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 4 Jan 2022 18:23:04 +0800 Subject: [PATCH 1025/2710] Added supports for long bit-fields. --- src/cc65/datatype.c | 13 +++++++-- src/cc65/declare.c | 10 +++---- src/cc65/initdata.c | 65 +++++++++++++++++++++++++-------------------- 3 files changed, 51 insertions(+), 37 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index bb7c40476..e43af238e 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1016,9 +1016,18 @@ const Type* IntPromotion (const Type* T) */ if (IsTypeBitField (T)) { - /* The standard rule is OK for now as we don't support bit-fields with widths > 16. + /* As we now support long bit-fields, we need modified rules for them: + ** - If an int can represent all values of the bit-field, the bit-field is converted + ** to an int; + ** - Otherwise, if an unsigned int can represent all values of the bit-field, the + ** bit-field is converted to an unsigned int; + ** - Otherwise, the bit-field will have its declared integer type. + ** These rules are borrowed from C++ and seem to be consistent with GCC/Clang's. */ - return T->A.B.Width >= INT_BITS && IsSignUnsigned (T) ? type_uint : type_int; + if (T->A.B.Width > INT_BITS) { + return IsSignUnsigned (T) ? type_ulong : type_long; + } + return T->A.B.Width == INT_BITS && IsSignUnsigned (T) ? type_uint : type_int; } else if (IsTypeChar (T)) { /* An integer can represent all values from either signed or unsigned char, so convert ** chars to int. diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 67e9a1783..7cc7444b6 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -746,12 +746,10 @@ static int ParseFieldWidth (Declaration* D) D->Type[0].C = T_INT; } - /* TODO: This can be relaxed to be any integral type, but - ** ParseStructInit currently supports only up to int. - */ - if (SizeOf (D->Type) > SizeOf (type_uint)) { - /* Only int-sized or smaller types may be used for bit-fields, for now */ - Error ("cc65 currently supports only char-sized and int-sized bit-field types"); + /* We currently support integral types up to long */ + if (SizeOf (D->Type) > SizeOf (type_ulong)) { + /* Only long-sized or smaller types may be used for bit-fields, for now */ + Error ("cc65 currently supports only long-sized and smaller bit-field types"); /* Avoid a diagnostic storm */ D->Type[0].C = T_INT; diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c index 1f8b35ce4..99dacdca9 100644 --- a/src/cc65/initdata.c +++ b/src/cc65/initdata.c @@ -505,13 +505,14 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) */ if (SymIsBitField (Sym) && (IsAnonName (Sym->Name))) { /* Account for the data and output it if we have at least a full - ** word. We may have more if there was storage unit overlap, for - ** example two consecutive 10 bit fields. These will be packed - ** into 3 bytes. + ** byte. We may have more if there was storage unit overlap, for + ** example two consecutive 7 bit fields. Those would be packed + ** into 2 bytes. */ SI.ValBits += Sym->Type->A.B.Width; + CHECK (SI.ValBits <= CHAR_BIT * sizeof(SI.BitVal)); /* TODO: Generalize this so any type can be used. */ - CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); + CHECK (SI.ValBits <= LONG_BITS); while (SI.ValBits >= CHAR_BITS) { DefineBitFieldData (&SI); } @@ -530,45 +531,51 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Parse initialization of one field. Bit-fields need a special ** handling. */ - ExprDesc ED; - ED_Init (&ED); - unsigned Val; + ExprDesc Field; + ED_Init (&Field); + unsigned long Val; unsigned Shift; /* Calculate the bitmask from the bit-field data */ - unsigned Mask = (1U << Sym->Type->A.B.Width) - 1U; + unsigned long Mask = shl_l (1UL, Sym->Type->A.B.Width) - 1UL; /* Safety ... */ CHECK (Sym->V.Offs * CHAR_BITS + Sym->Type->A.B.Offs == SI.Offs * CHAR_BITS + SI.ValBits); /* Read the data, check for a constant integer, do a range check */ - ED = ParseScalarInitInternal (IntPromotion (Sym->Type)); - if (!ED_IsConstAbsInt (&ED)) { + Field = ParseScalarInitInternal (IntPromotion (Sym->Type)); + if (!ED_IsConstAbsInt (&Field)) { Error ("Constant initializer expected"); - ED_MakeConstAbsInt (&ED, 1); + ED_MakeConstAbsInt (&Field, 1); } /* Truncate the initializer value to the width of the bit-field and check if we lost ** any useful bits. */ - Val = (unsigned) ED.IVal & Mask; + Val = (unsigned long) Field.IVal & Mask; if (IsSignUnsigned (Sym->Type)) { - if (ED.IVal < 0 || (unsigned long) ED.IVal != Val) { - Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer" - " changes value from %ld to %u", - GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), - Sym->Type->A.B.Width, ED.IVal, Val); + if (Field.IVal < 0 || (unsigned long) Field.IVal != Val) { + Warning (IsSignUnsigned (Field.Type) ? + "Implicit truncation from '%s' to '%s : %u' in bit-field initializer" + " changes value from %lu to %lu" : + "Implicit truncation from '%s' to '%s : %u' in bit-field initializer" + " changes value from %ld to %lu", + GetFullTypeName (Field.Type), GetFullTypeName (Sym->Type), + Sym->Type->A.B.Width, Field.IVal, Val); } } else { /* Sign extend back to full width of host long. */ unsigned ShiftBits = sizeof (long) * CHAR_BIT - Sym->Type->A.B.Width; - long RestoredVal = asr_l(asl_l (Val, ShiftBits), ShiftBits); - if (ED.IVal != RestoredVal) { - Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer " - "changes value from %ld to %ld", - GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), - Sym->Type->A.B.Width, ED.IVal, RestoredVal); + long RestoredVal = asr_l (asl_l (Val, ShiftBits), ShiftBits); + if (Field.IVal != RestoredVal) { + Warning (IsSignUnsigned (Field.Type) ? + "Implicit truncation from '%s' to '%s : %u' in bit-field initializer" + " changes value from %lu to %ld" : + "Implicit truncation from '%s' to '%s : %u' in bit-field initializer" + " changes value from %ld to %ld", + GetFullTypeName (Field.Type), GetFullTypeName (Sym->Type), + Sym->Type->A.B.Width, Field.IVal, RestoredVal); } } @@ -578,15 +585,15 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Account for the data and output any full bytes we have. */ SI.ValBits += Sym->Type->A.B.Width; - /* Make sure unsigned is big enough to hold the value, 22 bits. - ** This is 22 bits because the most we can have is 7 bits left - ** over from the previous OutputBitField call, plus 15 bits - ** from this field. A 16-bit bit-field will always be byte - ** aligned, so will have padding before it. + /* Make sure unsigned is big enough to hold the value, 32 bits. + ** This cannot be more than 32 bits because a 16-bit or 32-bit + ** bit-field will always be byte-aligned with padding before it + ** if there are bits from prior fields that haven't been output + ** yet. */ CHECK (SI.ValBits <= CHAR_BIT * sizeof(SI.BitVal)); /* TODO: Generalize this so any type can be used. */ - CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); + CHECK (SI.ValBits <= LONG_BITS); while (SI.ValBits >= CHAR_BITS) { DefineBitFieldData (&SI); } From cf1bc4fad427052eae7ce4d9077715459d938e89 Mon Sep 17 00:00:00 2001 From: "Matthew D. Steele" <mdsteele@alum.mit.edu> Date: Fri, 7 Jan 2022 09:56:46 -0500 Subject: [PATCH 1026/2710] Fix Pop() implementation in src/sim65/paravirt.c (fixes #1625) The Pop() function was not handling stack pointer wrap around correctly. Also, change the simulated RTS implementation in ParaVirtHooks() to explicitly sequence the two Pop() calls in the correct order. --- src/sim65/paravirt.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index e73bd3400..b3ec8fa37 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -105,7 +105,7 @@ static void SetAX (CPURegs* Regs, unsigned Val) static unsigned char Pop (CPURegs* Regs) { - return MemReadByte (0x0100 + ++Regs->SP); + return MemReadByte (0x0100 + (++Regs->SP & 0xFF)); } @@ -327,5 +327,7 @@ void ParaVirtHooks (CPURegs* Regs) Hooks[Regs->PC - PARAVIRT_BASE] (Regs); /* Simulate RTS */ - Regs->PC = Pop(Regs) + (Pop(Regs) << 8) + 1; + unsigned lo = Pop(Regs); + unsigned hi = Pop(Regs); + Regs->PC = lo + (hi << 8) + 1; } From 92bfbeb8abf85596a30a13d5af275b535d640dfe Mon Sep 17 00:00:00 2001 From: "Matthew D. Steele" <mdsteele@alum.mit.edu> Date: Sat, 8 Jan 2022 16:24:40 -0500 Subject: [PATCH 1027/2710] Adjust Pop() sequencing in paravirt.c --- src/sim65/paravirt.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index b3ec8fa37..7da683f1d 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -328,6 +328,5 @@ void ParaVirtHooks (CPURegs* Regs) /* Simulate RTS */ unsigned lo = Pop(Regs); - unsigned hi = Pop(Regs); - Regs->PC = lo + (hi << 8) + 1; + Regs->PC = lo + (Pop(Regs) << 8) + 1; } From 1f6bc6240faa126048c13ad20427b250d9cba235 Mon Sep 17 00:00:00 2001 From: "Matthew D. Steele" <mdsteele@alum.mit.edu> Date: Sat, 8 Jan 2022 16:29:42 -0500 Subject: [PATCH 1028/2710] Move local variable declaration to top of block --- src/sim65/paravirt.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index 7da683f1d..ba3a76461 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -317,6 +317,8 @@ void ParaVirtInit (unsigned aArgStart, unsigned char aSPAddr) void ParaVirtHooks (CPURegs* Regs) /* Potentially execute paravirtualization hooks */ { + unsigned lo; + /* Check for paravirtualization address range */ if (Regs->PC < PARAVIRT_BASE || Regs->PC >= PARAVIRT_BASE + sizeof (Hooks) / sizeof (Hooks[0])) { @@ -327,6 +329,6 @@ void ParaVirtHooks (CPURegs* Regs) Hooks[Regs->PC - PARAVIRT_BASE] (Regs); /* Simulate RTS */ - unsigned lo = Pop(Regs); + lo = Pop(Regs); Regs->PC = lo + (Pop(Regs) << 8) + 1; } From 22a3d55e40317e2554c5e686725d793e8df9900c Mon Sep 17 00:00:00 2001 From: "Matthew D. Steele" <mdsteele@alum.mit.edu> Date: Sat, 8 Jan 2022 16:39:30 -0500 Subject: [PATCH 1029/2710] Add space after function names --- src/sim65/paravirt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index ba3a76461..db4120326 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -329,6 +329,6 @@ void ParaVirtHooks (CPURegs* Regs) Hooks[Regs->PC - PARAVIRT_BASE] (Regs); /* Simulate RTS */ - lo = Pop(Regs); - Regs->PC = lo + (Pop(Regs) << 8) + 1; + lo = Pop (Regs); + Regs->PC = lo + (Pop (Regs) << 8) + 1; } From 12f9a2f1f87b90d0ec880bc4e76be10996150b9f Mon Sep 17 00:00:00 2001 From: Daniel Lehenbauer <DLehenbauer@users.noreply.github.com> Date: Mon, 17 Jan 2022 08:22:15 -0800 Subject: [PATCH 1030/2710] asminc/pet.inc: Add PIA1 & PIA2 --- asminc/pet.inc | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/asminc/pet.inc b/asminc/pet.inc index d165bb336..ee96d378c 100644 --- a/asminc/pet.inc +++ b/asminc/pet.inc @@ -50,7 +50,6 @@ PET_2000 = $CA PET_3000 = $FC PET_4000 = $FD - ;---------------------------------------------------------------------------- ; Vector and other locations @@ -59,7 +58,25 @@ BRKVec := $0092 NMIVec := $0094 ; --------------------------------------------------------------------------- -; I/O: 6522 VIA2 +; I/O: 6520 PIA1 + +PIA1 := $E810 ; PIA1 base address +PIA1_PORTA := PIA1+$0 ; Port A (PA) and data direction register A (DDRA) +PIA1_PACTL := PIA1+$1 ; Port A control register (CRA) +PIA1_PORTB := PIA1+$2 ; Port B (PB) and data direction register B (DDRB) +PIA1_PBCTL := PIA1+$3 ; Port B control register (CRB) + +; --------------------------------------------------------------------------- +; I/O: 6520 PIA2 + +PIA2 := $E820 ; PIA2 base address +PIA2_PORTA := PIA2+$0 ; Port A (PA) and data direction register A (DDRA) +PIA2_PACTL := PIA2+$1 ; Port A control register (CRA) +PIA2_PORTB := PIA2+$2 ; Port B (PB) and data direction register B (DDRB) +PIA2_PBCTL := PIA2+$3 ; Port B control register (CRB) + +; --------------------------------------------------------------------------- +; I/O: 6522 VIA VIA := $E840 ; VIA base address VIA_PB := VIA+$0 ; Port register B From 3aeaa36a58a111a2adc2080df4965703b5080a6c Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sat, 22 Jan 2022 01:04:08 +0100 Subject: [PATCH 1031/2710] Wrong platform There was no conio for Lynx ```` ../bin/ld65 -o mandelbrot -t lynx -m mandelbrot.map mandelbrot.o lynx.lib mandelbrot.s:516: Error: Unresolved external '_clrscr' conio/vcprintf.s:85: Error: Unresolved external '_cputc' conio/cputs.s:25: Error: Unresolved external '_cputc' conio/cputs.s:15: Error: Unresolved external 'gotoxy' ld65: Error: 3 unresolved external(s) found - cannot create output file make: *** [mandelbrot] Error 1 ```` --- samples/readme.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/readme.txt b/samples/readme.txt index 56b275764..11326146b 100644 --- a/samples/readme.txt +++ b/samples/readme.txt @@ -68,10 +68,10 @@ Platforms: Runs on all platforms that support conio, which means: Name: mandelbrot Description: A mandelbrot demo using integer arithmetic. The demo was written by groepaz, and converted to cc65 using TGI graphics - by Stephan Haubenthal. + by Stefan Haubenthal. Platforms: Runs on all platforms that have TGI support: Apple ][, Atari, C64, C128, Oric Atmos and Telestrat, GEOS, - NES, and Lynx. + and NES. ----------------------------------------------------------------------------- Name: mousedemo From 91920f807ee3b80063290215cdc352c6d4328786 Mon Sep 17 00:00:00 2001 From: Scott Prive <Scott Prive> Date: Sun, 23 Jan 2022 18:53:14 -0500 Subject: [PATCH 1032/2710] document special case on sub 40-col modes --- doc/funcref.sgml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index e6cb42a0f..2dc28137a 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -7788,6 +7788,10 @@ format specifiers as <tt/vprintf/. <!-- <tt/<ref id="vprintf" name="vprintf">/. between <tt/\r/ and <tt/\n/. <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. +<item>cprintf targets a 40 character line. On a 20-column display this has +the unexpected effect of a blank line after your text. On such displays you can either +use for example gotoxy(20,0) to target the "next" line, or you can switch to write() +function which does not have this side effect. </itemize> <tag/Availability/cc65 <tag/See also/ From c3e01062ea35378e72f3f4949c3eebe95a3036cb Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Mon, 24 Jan 2022 20:13:49 +0100 Subject: [PATCH 1033/2710] put Atari 20-column note to where it belongs... --- doc/atari.sgml | 5 +++++ doc/funcref.sgml | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/atari.sgml b/doc/atari.sgml index 903895d17..ec281c0b5 100644 --- a/doc/atari.sgml +++ b/doc/atari.sgml @@ -726,6 +726,11 @@ for sectors 1 to 3, regardless of the type of diskette. The console I/O is speed optimized therefore support for XEP80 hardware or f80.com software is missing. Of course you may use stdio.h functions. +<tt/cprintf/ targets a 40 character line. On a 20-column display this has +the unexpected effect of a blank line after your text. On such displays you can either +use for example <tt/gotoxy(20,0)/ to target the "next" line, or you can switch to <tt/write()/ +function which does not have this side effect. + <sect>Technical details<label id="techdetail"><p> diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 2dc28137a..e6cb42a0f 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -7788,10 +7788,6 @@ format specifiers as <tt/vprintf/. <!-- <tt/<ref id="vprintf" name="vprintf">/. between <tt/\r/ and <tt/\n/. <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. -<item>cprintf targets a 40 character line. On a 20-column display this has -the unexpected effect of a blank line after your text. On such displays you can either -use for example gotoxy(20,0) to target the "next" line, or you can switch to write() -function which does not have this side effect. </itemize> <tag/Availability/cc65 <tag/See also/ From d1ae09819087ff6b0ce86c1e51d1682662d945cd Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 01:23:10 +0100 Subject: [PATCH 1034/2710] iterate through all targettest builds --- .github/workflows/build-on-pull-request.yml | 65 +++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index f5477d191..4408727b3 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -33,6 +33,71 @@ jobs: - name: Test that the samples can be built. shell: bash run: make -j2 samples + - name: Test that the targettest programs can be built. + shell: bash + run: | + make SYS=apple2 -C targettest + make SYS=apple2 -C targettest clean + make SYS=apple2enh -C targettest + make SYS=apple2enh -C targettest clean + make SYS=atari -C targettest + make SYS=atari -C targettest clean + make SYS=atarixl -C targettest + make SYS=atarixl -C targettest clean + make SYS=atari2600 -C targettest + make SYS=atari2600 -C targettest clean + make SYS=atari5200 -C targettest + make SYS=atari5200 -C targettest clean + make SYS=atmos -C targettest + make SYS=atmos -C targettest clean + make SYS=bbc -C targettest + make SYS=bbc -C targettest clean + make SYS=c128 -C targettest + make SYS=c128 -C targettest clean + make SYS=c16 -C targettest + make SYS=c16 -C targettest clean + make SYS=c64 -C targettest + make SYS=c64 -C targettest clean + make SYS=cbm510 -C targettest + make SYS=cbm510 -C targettest clean + make SYS=cbm610 -C targettest + make SYS=cbm610 -C targettest clean + make SYS=creativision -C targettest + make SYS=creativision -C targettest clean + make SYS=cx16 -C targettest + make SYS=cx16 -C targettest clean + make SYS=gamate -C targettest + make SYS=gamate -C targettest clean + make SYS=geos-apple -C targettest + make SYS=geos-apple -C targettest clean + make SYS=geos-cbm -C targettest + make SYS=geos-cbm -C targettest clean + make SYS=lunix -C targettest + make SYS=lunix -C targettest clean + make SYS=lynx -C targettest + make SYS=lynx -C targettest clean + make SYS=nes -C targettest + make SYS=nes -C targettest clean + make SYS=osic1p -C targettest + make SYS=osic1p -C targettest clean + make SYS=pce -C targettest + make SYS=pce -C targettest clean + make SYS=pet -C targettest + make SYS=pet -C targettest clean + make SYS=plus4 -C targettest + make SYS=plus4 -C targettest clean + make SYS=sim6502 -C targettest + make SYS=sim6502 -C targettest clean + make SYS=sim65c02 -C targettest + make SYS=sim65c02 -C targettest clean + make SYS=supervision -C targettest + make SYS=supervision -C targettest clean + make SYS=sym1 -C targettest + make SYS=sym1 -C targettest clean + make SYS=telestrat -C targettest + make SYS=telestrat -C targettest clean + make SYS=vic20 -C targettest + make SYS=vic20 -C targettest clean - name: Build the document files. shell: bash run: make -j2 doc From 90cc44b4101ece26209d6650ba23492f602b7fb3 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 01:46:47 +0100 Subject: [PATCH 1035/2710] another try --- .github/workflows/build-on-pull-request.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 4408727b3..fc2a6b7dd 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -36,6 +36,8 @@ jobs: - name: Test that the targettest programs can be built. shell: bash run: | + make SYS=c64 all + make SYS=c64 clean make SYS=apple2 -C targettest make SYS=apple2 -C targettest clean make SYS=apple2enh -C targettest @@ -44,8 +46,8 @@ jobs: make SYS=atari -C targettest clean make SYS=atarixl -C targettest make SYS=atarixl -C targettest clean - make SYS=atari2600 -C targettest - make SYS=atari2600 -C targettest clean + # make SYS=atari2600 -C targettest + # make SYS=atari2600 -C targettest clean make SYS=atari5200 -C targettest make SYS=atari5200 -C targettest clean make SYS=atmos -C targettest @@ -90,8 +92,8 @@ jobs: make SYS=sim6502 -C targettest clean make SYS=sim65c02 -C targettest make SYS=sim65c02 -C targettest clean - make SYS=supervision -C targettest - make SYS=supervision -C targettest clean + # make SYS=supervision -C targettest + # make SYS=supervision -C targettest clean make SYS=sym1 -C targettest make SYS=sym1 -C targettest clean make SYS=telestrat -C targettest From 43fdc8781d4c01a8d47ca15a9577eaa65f844977 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 01:54:06 +0100 Subject: [PATCH 1036/2710] and another --- .github/workflows/build-on-pull-request.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index fc2a6b7dd..5c39082bd 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -36,8 +36,8 @@ jobs: - name: Test that the targettest programs can be built. shell: bash run: | - make SYS=c64 all - make SYS=c64 clean + make SYS=c64 -C targettest all + make SYS=c64 -C targettest clean make SYS=apple2 -C targettest make SYS=apple2 -C targettest clean make SYS=apple2enh -C targettest From 273721e05e9c14f4a3eaab7497c6e3d91545f2df Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 02:07:50 +0100 Subject: [PATCH 1037/2710] fix pathes --- .github/workflows/build-on-pull-request.yml | 4 ++++ targettest/accelerator/Makefile | 8 ++++---- targettest/apple2/Makefile | 8 ++++---- targettest/atari/Makefile | 8 ++++---- targettest/atari5200/Makefile | 8 ++++---- targettest/cbm/Makefile | 8 ++++---- targettest/gamate/Makefile | 8 ++++---- targettest/pce/Makefile | 8 ++++---- 8 files changed, 32 insertions(+), 28 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 5c39082bd..aa76f1f64 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -127,3 +127,7 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release + +# TODO: build targettest cbm subdir for all cbm targets +# TODO: build targettest atari subdir for all atari targets +# TODO: build targettest apple2 subdir for all apple2 targets diff --git a/targettest/accelerator/Makefile b/targettest/accelerator/Makefile index 527b13f33..90871f20c 100644 --- a/targettest/accelerator/Makefile +++ b/targettest/accelerator/Makefile @@ -20,10 +20,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif all: c64-scpu-test.prg c128-scpu-test.prg c64dtv-test.prg \ diff --git a/targettest/apple2/Makefile b/targettest/apple2/Makefile index f8167b47c..15a4075af 100644 --- a/targettest/apple2/Makefile +++ b/targettest/apple2/Makefile @@ -23,10 +23,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif all: hgrshow hgrtest dhgrshow diff --git a/targettest/atari/Makefile b/targettest/atari/Makefile index 18ddf55ce..05388ddd7 100644 --- a/targettest/atari/Makefile +++ b/targettest/atari/Makefile @@ -21,10 +21,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif all: charmapping.xex defdev.xex displaylist.xex mem.xex multi.xex ostype.xex \ diff --git a/targettest/atari5200/Makefile b/targettest/atari5200/Makefile index 3a8114975..532bb815e 100644 --- a/targettest/atari5200/Makefile +++ b/targettest/atari5200/Makefile @@ -21,10 +21,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif all: hello diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index a7646c2d9..3a4eff86f 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -24,10 +24,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif all: petscii.prg cbmdir-test.prg diff --git a/targettest/gamate/Makefile b/targettest/gamate/Makefile index a14b8a854..69ac30dc5 100644 --- a/targettest/gamate/Makefile +++ b/targettest/gamate/Makefile @@ -21,10 +21,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif all: audiotest.bin lcdtest.bin ctest.bin diff --git a/targettest/pce/Makefile b/targettest/pce/Makefile index f91f0eed8..695fed0a5 100644 --- a/targettest/pce/Makefile +++ b/targettest/pce/Makefile @@ -21,10 +21,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif .PHONY: all clean test From 91cf347f31fd264b1fe15ba74a6acd0987eb06ca Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 02:13:54 +0100 Subject: [PATCH 1038/2710] fix pathes --- targettest/sym1/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/targettest/sym1/Makefile b/targettest/sym1/Makefile index 23742f6d1..8e469a599 100644 --- a/targettest/sym1/Makefile +++ b/targettest/sym1/Makefile @@ -20,10 +20,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif all: symHello.bin symTiny.bin symDisplay.bin symIO.bin symNotepad.bin From 908173b6634cefa4e53eb0b084ffe7d1744d54a5 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 02:14:01 +0100 Subject: [PATCH 1039/2710] add sym1 target --- targettest/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/targettest/Makefile b/targettest/Makefile index f222bb471..8207fc560 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -334,6 +334,7 @@ all: testcode make -C cbm SYS=$(SYS) make -C gamate make -C pce + make -C sym1 # -------------------------------------------------------------------------- # some programs link against getsp.o @@ -441,3 +442,4 @@ clean: mostlyclean make -C cbm SYS=$(SYS) clean make -C gamate clean make -C pce clean + make -C sym1 clean From 11bcaba99be870ee07967d0ba7a2e6fd66daf3cc Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 02:29:11 +0100 Subject: [PATCH 1040/2710] comment out all the non working targets --- .github/workflows/build-on-pull-request.yml | 93 +++++++++++---------- 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index aa76f1f64..e121aaca5 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -48,56 +48,56 @@ jobs: make SYS=atarixl -C targettest clean # make SYS=atari2600 -C targettest # make SYS=atari2600 -C targettest clean - make SYS=atari5200 -C targettest - make SYS=atari5200 -C targettest clean - make SYS=atmos -C targettest - make SYS=atmos -C targettest clean - make SYS=bbc -C targettest - make SYS=bbc -C targettest clean - make SYS=c128 -C targettest - make SYS=c128 -C targettest clean - make SYS=c16 -C targettest - make SYS=c16 -C targettest clean + # make SYS=atari5200 -C targettest + # make SYS=atari5200 -C targettest clean + # make SYS=atmos -C targettest + # make SYS=atmos -C targettest clean + # make SYS=bbc -C targettest + # make SYS=bbc -C targettest clean + # make SYS=c128 -C targettest + # make SYS=c128 -C targettest clean + # make SYS=c16 -C targettest + # make SYS=c16 -C targettest clean make SYS=c64 -C targettest make SYS=c64 -C targettest clean - make SYS=cbm510 -C targettest - make SYS=cbm510 -C targettest clean - make SYS=cbm610 -C targettest - make SYS=cbm610 -C targettest clean - make SYS=creativision -C targettest - make SYS=creativision -C targettest clean - make SYS=cx16 -C targettest - make SYS=cx16 -C targettest clean - make SYS=gamate -C targettest - make SYS=gamate -C targettest clean - make SYS=geos-apple -C targettest - make SYS=geos-apple -C targettest clean - make SYS=geos-cbm -C targettest - make SYS=geos-cbm -C targettest clean - make SYS=lunix -C targettest - make SYS=lunix -C targettest clean - make SYS=lynx -C targettest - make SYS=lynx -C targettest clean - make SYS=nes -C targettest - make SYS=nes -C targettest clean - make SYS=osic1p -C targettest - make SYS=osic1p -C targettest clean - make SYS=pce -C targettest - make SYS=pce -C targettest clean - make SYS=pet -C targettest - make SYS=pet -C targettest clean - make SYS=plus4 -C targettest - make SYS=plus4 -C targettest clean - make SYS=sim6502 -C targettest - make SYS=sim6502 -C targettest clean - make SYS=sim65c02 -C targettest - make SYS=sim65c02 -C targettest clean + # make SYS=cbm510 -C targettest + # make SYS=cbm510 -C targettest clean + # make SYS=cbm610 -C targettest + # make SYS=cbm610 -C targettest clean + # make SYS=creativision -C targettest + # make SYS=creativision -C targettest clean + # make SYS=cx16 -C targettest + # make SYS=cx16 -C targettest clean + # make SYS=gamate -C targettest + # make SYS=gamate -C targettest clean + # make SYS=geos-apple -C targettest + # make SYS=geos-apple -C targettest clean + # make SYS=geos-cbm -C targettest + # make SYS=geos-cbm -C targettest clean + # make SYS=lunix -C targettest + # make SYS=lunix -C targettest clean + # make SYS=lynx -C targettest + # make SYS=lynx -C targettest clean + # make SYS=nes -C targettest + # make SYS=nes -C targettest clean + # make SYS=osic1p -C targettest + # make SYS=osic1p -C targettest clean + # make SYS=pce -C targettest + # make SYS=pce -C targettest clean + # make SYS=pet -C targettest + # make SYS=pet -C targettest clean + # make SYS=plus4 -C targettest + # make SYS=plus4 -C targettest clean + # make SYS=sim6502 -C targettest + # make SYS=sim6502 -C targettest clean + # make SYS=sim65c02 -C targettest + # make SYS=sim65c02 -C targettest clean # make SYS=supervision -C targettest # make SYS=supervision -C targettest clean - make SYS=sym1 -C targettest - make SYS=sym1 -C targettest clean - make SYS=telestrat -C targettest - make SYS=telestrat -C targettest clean + # make SYS=sym1 -C targettest + # make SYS=sym1 -C targettest clean + # make SYS=telestrat -C targettest + # make SYS=telestrat -C targettest clean make SYS=vic20 -C targettest make SYS=vic20 -C targettest clean - name: Build the document files. @@ -128,6 +128,7 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release +# TODO: fix tergettest Makefile for all currently commented out targets # TODO: build targettest cbm subdir for all cbm targets # TODO: build targettest atari subdir for all atari targets # TODO: build targettest apple2 subdir for all apple2 targets From e66a54ac14f3ecc875648bda8b1da253a29830b8 Mon Sep 17 00:00:00 2001 From: polluks <polluks@sdf.lonestar.org> Date: Sun, 30 Jan 2022 03:15:28 +0100 Subject: [PATCH 1041/2710] Revert commits --- libsrc/cbm/read.s | 2 +- libsrc/cbm/write.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/cbm/read.s b/libsrc/cbm/read.s index 71ba5d713..fb0bb3171 100644 --- a/libsrc/cbm/read.s +++ b/libsrc/cbm/read.s @@ -135,7 +135,7 @@ eof: lda #0 devnotpresent: lda #ENODEV - .byte $2C ; Skip next opcode + jmp __directerrno ; Sets _errno, clears _oserror, returns -1 ; Error entry: The given file descriptor is not valid or not open diff --git a/libsrc/cbm/write.s b/libsrc/cbm/write.s index 04010f2e4..ebc44a0ac 100644 --- a/libsrc/cbm/write.s +++ b/libsrc/cbm/write.s @@ -106,7 +106,7 @@ devnotpresent2: pla devnotpresent: lda #ENODEV - .byte $2C ; Skip next opcode + jmp __directerrno ; Sets _errno, clears _oserror, returns -1 ; Error entry: The given file descriptor is not valid or not open From e327071615456b6a68a1bd2ef6be9fa342f875f8 Mon Sep 17 00:00:00 2001 From: polluks <polluks@sdf.lonestar.org> Date: Sun, 30 Jan 2022 03:26:32 +0100 Subject: [PATCH 1042/2710] Save a few bytes --- libsrc/cbm/read.s | 2 +- libsrc/cbm/write.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/cbm/read.s b/libsrc/cbm/read.s index fb0bb3171..1c2c670e7 100644 --- a/libsrc/cbm/read.s +++ b/libsrc/cbm/read.s @@ -135,7 +135,7 @@ eof: lda #0 devnotpresent: lda #ENODEV - jmp __directerrno ; Sets _errno, clears _oserror, returns -1 + .byte $2C ; Skip next opcode via BIT <abs> ; Error entry: The given file descriptor is not valid or not open diff --git a/libsrc/cbm/write.s b/libsrc/cbm/write.s index ebc44a0ac..93bdda31d 100644 --- a/libsrc/cbm/write.s +++ b/libsrc/cbm/write.s @@ -106,7 +106,7 @@ devnotpresent2: pla devnotpresent: lda #ENODEV - jmp __directerrno ; Sets _errno, clears _oserror, returns -1 + .byte $2C ; Skip next opcode via BIT <abs> ; Error entry: The given file descriptor is not valid or not open From 6e5a988f85f54617c1faa176dc19b96cd5ac2d5a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 12:36:15 +0100 Subject: [PATCH 1043/2710] build samples for all targets --- .github/workflows/build-on-pull-request.yml | 71 ++++++++++++++++++++- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index e121aaca5..9d6166e02 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -32,7 +32,71 @@ jobs: run: make test QUIET=1 - name: Test that the samples can be built. shell: bash - run: make -j2 samples + run: | + make SYS=c64 -C samples all + make SYS=c64 -C samples clean + make SYS=apple2 -C samples + make SYS=apple2 -C samples clean + make SYS=apple2enh -C samples + make SYS=apple2enh -C samples clean + make SYS=atari -C samples + make SYS=atari -C samples clean + make SYS=atarixl -C samples + make SYS=atarixl -C samples clean + # make SYS=atari2600 -C samples + # make SYS=atari2600 -C samples clean + # make SYS=atari5200 -C samples + # make SYS=atari5200 -C samples clean + make SYS=atmos -C samples + make SYS=atmos -C samples clean + # make SYS=bbc -C samples + # make SYS=bbc -C samples clean + make SYS=c128 -C samples + make SYS=c128 -C samples clean + make SYS=c16 -C samples + make SYS=c16 -C samples clean + make SYS=c64 -C samples + make SYS=c64 -C samples clean + make SYS=cbm510 -C samples + make SYS=cbm510 -C samples clean + make SYS=cbm610 -C samples + make SYS=cbm610 -C samples clean + make SYS=creativision -C samples + make SYS=creativision -C samples clean + make SYS=cx16 -C samples + make SYS=cx16 -C samples clean + make SYS=gamate -C samples + make SYS=gamate -C samples clean + make SYS=geos-apple -C samples + make SYS=geos-apple -C samples clean + make SYS=geos-cbm -C samples + make SYS=geos-cbm -C samples clean + make SYS=lunix -C samples + make SYS=lunix -C samples clean + make SYS=lynx -C samples + make SYS=lynx -C samples clean + make SYS=nes -C samples + make SYS=nes -C samples clean + make SYS=osic1p -C samples + make SYS=osic1p -C samples clean + make SYS=pce -C samples + make SYS=pce -C samples clean + make SYS=pet -C samples + make SYS=pet -C samples clean + make SYS=plus4 -C samples + make SYS=plus4 -C samples clean + make SYS=sim6502 -C samples + make SYS=sim6502 -C samples clean + make SYS=sim65c02 -C samples + make SYS=sim65c02 -C samples clean + make SYS=supervision -C samples + make SYS=supervision -C samples clean + make SYS=sym1 -C samples + make SYS=sym1 -C samples clean + make SYS=telestrat -C samples + make SYS=telestrat -C samples clean + make SYS=vic20 -C samples + make SYS=vic20 -C samples clean - name: Test that the targettest programs can be built. shell: bash run: | @@ -128,7 +192,10 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -# TODO: fix tergettest Makefile for all currently commented out targets +# TODO: fix samples Makefile for all currently commented out targets +# TODO: build samples cbm subdir for all cbm targets + +# TODO: fix targettest Makefile for all currently commented out targets # TODO: build targettest cbm subdir for all cbm targets # TODO: build targettest atari subdir for all atari targets # TODO: build targettest apple2 subdir for all apple2 targets From 333c31e4ce70a21d6a22d8851f099e743b2c1989 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 12:49:02 +0100 Subject: [PATCH 1044/2710] fix for atari5200 --- samples/Makefile | 2 +- samples/tutorial/Makefile | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/samples/Makefile b/samples/Makefile index 1dc3aef8a..44276d879 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -188,7 +188,7 @@ EXELIST_atari = \ EXELIST_atarixl = $(EXELIST_atari) EXELIST_atari2600 = \ - atari2600hello + notavailable EXELIST_atari5200 = \ notavailable diff --git a/samples/tutorial/Makefile b/samples/tutorial/Makefile index af5062588..67dd84003 100644 --- a/samples/tutorial/Makefile +++ b/samples/tutorial/Makefile @@ -34,6 +34,9 @@ endif EXELIST_atari2600 = \ notavailable +EXELIST_atari5200 = \ + notavailable + EXELIST_bbc = \ notavailable From a0fc95bb15828431a60dead52069f52b81151e94 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 12:49:33 +0100 Subject: [PATCH 1045/2710] actually use all targets for the samples dir --- .github/workflows/build-on-pull-request.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 9d6166e02..bb343a9ff 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -43,14 +43,14 @@ jobs: make SYS=atari -C samples clean make SYS=atarixl -C samples make SYS=atarixl -C samples clean - # make SYS=atari2600 -C samples - # make SYS=atari2600 -C samples clean - # make SYS=atari5200 -C samples - # make SYS=atari5200 -C samples clean + make SYS=atari2600 -C samples + make SYS=atari2600 -C samples clean + make SYS=atari5200 -C samples + make SYS=atari5200 -C samples clean make SYS=atmos -C samples make SYS=atmos -C samples clean - # make SYS=bbc -C samples - # make SYS=bbc -C samples clean + make SYS=bbc -C samples + make SYS=bbc -C samples clean make SYS=c128 -C samples make SYS=c128 -C samples clean make SYS=c16 -C samples @@ -192,7 +192,6 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -# TODO: fix samples Makefile for all currently commented out targets # TODO: build samples cbm subdir for all cbm targets # TODO: fix targettest Makefile for all currently commented out targets From ccb77735d288c0a1b5daa669eb67767a47fc944e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 13:18:51 +0100 Subject: [PATCH 1046/2710] samples makefile already goes through the subdirs correctly --- .github/workflows/build-on-pull-request.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index bb343a9ff..41a3529b8 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -33,8 +33,6 @@ jobs: - name: Test that the samples can be built. shell: bash run: | - make SYS=c64 -C samples all - make SYS=c64 -C samples clean make SYS=apple2 -C samples make SYS=apple2 -C samples clean make SYS=apple2enh -C samples @@ -192,8 +190,6 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -# TODO: build samples cbm subdir for all cbm targets - # TODO: fix targettest Makefile for all currently commented out targets # TODO: build targettest cbm subdir for all cbm targets # TODO: build targettest atari subdir for all atari targets From d8366132c77b9a910522fd82c89f84bb4293f722 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 19:50:13 +0100 Subject: [PATCH 1047/2710] fix Makefiles for all targets, dive into subdirs like in samples --- targettest/Makefile | 424 ++++++++++++++++++++++++++++++-- targettest/accelerator/Makefile | 29 ++- targettest/apple2/Makefile | 20 +- targettest/atari/Makefile | 26 +- targettest/atari5200/Makefile | 18 +- targettest/cbm/Makefile | 22 +- targettest/gamate/Makefile | 18 +- targettest/pce/Makefile | 18 +- targettest/sym1/Makefile | 18 +- 9 files changed, 561 insertions(+), 32 deletions(-) diff --git a/targettest/Makefile b/targettest/Makefile index 8207fc560..be6842f0f 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -160,6 +160,10 @@ ifeq ($(SYS),vic20) LDFLAGS+=-Ln $@.lbl endif +ifeq ($(SYS),pce) + LDFLAGS+=-D__CARTSIZE__=0x8000 +endif + .o: ifeq ($(SYS),vic20) $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib @@ -167,11 +171,17 @@ else $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(SYS) -m $@.map $^ $(SYS).lib endif +# -------------------------------------------------------------------------- +# Lists of subdirectories + +DIRLIST = accelerator apple2 atari atari5200 cbm gamate pce sym1 + # -------------------------------------------------------------------------- # Lists of executables # omitted: seek EXELIST_c64 = \ + minimal \ arg-test \ clock \ clock-test \ @@ -204,8 +214,206 @@ EXELIST_c64 = \ tinyshell \ uname-test +# omitted: seek +EXELIST_c128 = \ + minimal \ + arg-test \ + clock \ + clock-test \ + conio \ + cpeek-test \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + em-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mouse-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + ser-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + + +# omitted: seek clock clock-test mouse-test ser-test +EXELIST_c16 = \ + minimal \ + arg-test \ + conio \ + cpeek-test \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + em-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + +# omitted: seek ser-test +EXELIST_cbm510 = \ + minimal \ + arg-test \ + clock \ + clock-test \ + conio \ + cpeek-test \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + em-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mouse-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + +# omitted: joy-test mouse-test seek +EXELIST_cbm610 = \ + minimal \ + arg-test \ + clock \ + clock-test \ + conio \ + cpeek-test \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + em-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + moddiv-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + ser-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + +# omitted: clock-test em-test mouse-test seek ser-test +EXELIST_pet = \ + minimal \ + arg-test \ + clock \ + conio \ + cpeek-test \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + +# omitted: clock-test em-test mouse-test seek +EXELIST_plus4 = \ + minimal \ + arg-test \ + clock \ + conio \ + cpeek-test \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + ser-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + # omitted: seek clock-test mouse-test ser-test EXELIST_vic20 = \ + minimal \ arg-test \ clock \ conio \ @@ -237,6 +445,7 @@ EXELIST_vic20 = \ # omitted: cpeek-test, clock EXELIST_apple2 = \ + minimal \ arg-test \ clock-test \ conio \ @@ -272,6 +481,7 @@ EXELIST_apple2enh = $(EXELIST_apple2) # omitted: cpeek-test EXELIST_atari = \ + minimal \ arg-test \ clock-test \ clock \ @@ -306,11 +516,185 @@ EXELIST_atari = \ EXELIST_atarixl = $(EXELIST_atari) -# none of the testcode can work on the 2600 -# EXELIST_atari2600 = +# omitted: clock-test clock cpeek-test deb dir-test em-test exec-test1 exec-test2 +# joy-test mouse-test rename-test seek ser-test stroserror-test tinyshell +EXELIST_telestrat = \ + minimal \ + arg-test \ + conio \ + cprintf \ + cursor \ + div-test \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + moddiv-test \ + mul-test \ + posixio-test \ + scanf-test \ + strdup-test \ + strnlen \ + strqtok-test \ + uname-test -# none of the testcode can work on supervision -# EXELIST_supervision = +# omitted: arg-test clock-test clock cpeek-test conio cprintf cursor deb dir-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test +# mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test +# stroserror-test tinyshell uname-test +EXELIST_sym1 = \ + minimal \ + div-test \ + moddiv-test \ + strnlen \ + strqtok-test + +# omitted: clock-test cpeek-test conio deb dir-test em-test exec-test1 exec-test2 +# fileio-test ft mouse-test posixio-test rename-test seek ser-test tinyshell +EXELIST_atmos = \ + minimal \ + arg-test \ + clock \ + cprintf \ + cursor \ + div-test \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mul-test \ + scanf-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + uname-test + +# omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test +# mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test +# strnlen stroserror-test strqtok-test tinyshell uname-test +EXELIST_creativision = \ + minimal \ + cursor + +# omitted: cpeek-test seek ser-test +EXELIST_cx16 = \ + minimal \ + arg-test \ + clock-test \ + clock \ + conio \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + em-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mouse-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + +# omitted: arg-test clock-test clock cpeek-test cprintf cursor deb dir-test div-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test +# mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test +# strnlen stroserror-test strqtok-test tinyshell uname-test +EXELIST_nes = \ + minimal \ + conio + +# omitted: arg-test clock-test clock cpeek-test cprintf cursor deb dir-test div-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test +# mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test +# strnlen stroserror-test strqtok-test tinyshell uname-test +EXELIST_pce = \ + minimal \ + conio + +# omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test +# mouse-test posixio-test rename-test scanf-test seek ser-test strdup-test strnlen +# stroserror-test strqtok-test tinyshell uname-test +EXELIST_osic1p = \ + minimal \ + cursor \ + mul-test + +# omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test +# mouse-test posixio-test rename-test scanf-test seek ser-test strdup-test strnlen +# stroserror-test strqtok-test tinyshell uname-test +EXELIST_geos-apple = \ + minimal \ + cursor \ + mul-test + +# omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test +# mouse-test posixio-test rename-test scanf-test seek ser-test strdup-test strnlen +# stroserror-test strqtok-test tinyshell uname-test + +EXELIST_geos-cbm = \ + minimal \ + cursor \ + mul-test + +# omitted: clock clock-test conio cpeek-test cprintf cursor deb dir-test em-test +# exec-test1 exec-test2 ft heaptest joy-test mouse-test mul-test rename-test seek +# ser-test strdup-test stroserror-test tinyshell uname-test +EXELIST_sim6502 = \ + minimal \ + arg-test \ + div-test \ + fileio-test \ + getopt-test \ + moddiv-test \ + posixio-test \ + scanf-test \ + strnlen \ + strqtok-test + +EXELIST_sim65c02 = $(EXELIST_sim6502) + +EXELIST_atari2600 = \ + minimal + +EXELIST_atari5200 = \ + minimal + +EXELIST_gamate = \ + minimal + +EXELIST_supervision = \ + minimal + +# none of the testcode can work on the bbc (no library support) +EXELIST_bbc = \ + notavailable + +# none of the testcode can work on lunix (no library support) +EXELIST_lunix = \ + notavailable + +# none of the testcode can work on the lynx (library support is broken!) +EXELIST_lynx = \ + notavailable # Unlisted targets will try to build everything. # That lets us learn what they cannot build, and what settings @@ -319,22 +703,27 @@ ifndef EXELIST_$(SYS) EXELIST_$(SYS) := ${patsubst %.c,%,$(wildcard *.c)} endif +define SUBDIR_recipe + +@$(MAKE) -C $(dir) --no-print-directory $@ + +endef # SUBDIR_recipe + # -------------------------------------------------------------------------- # Rules to make the binaries and the disk testcode: $(EXELIST_$(SYS)) + $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: generic targettest programs not available for" $(SYS) +endif disk: $(DISK_$(SYS)) -all: testcode - make -C accelerator - make -C apple2 - make -C atari - make -C atari5200 - make -C cbm SYS=$(SYS) - make -C gamate - make -C pce - make -C sym1 +all: # -------------------------------------------------------------------------- # some programs link against getsp.o @@ -435,11 +824,4 @@ mostlyclean: clean: mostlyclean @$(DEL) $(EXELIST_$(SYS)) $(DISK_$(SYS)) 2>$(NULLDEV) - make -C accelerator clean - make -C apple2 clean - make -C atari clean - make -C atari5200 clean - make -C cbm SYS=$(SYS) clean - make -C gamate clean - make -C pce clean - make -C sym1 clean + $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) diff --git a/targettest/accelerator/Makefile b/targettest/accelerator/Makefile index 90871f20c..a46ec43c0 100644 --- a/targettest/accelerator/Makefile +++ b/targettest/accelerator/Makefile @@ -26,9 +26,32 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: c64-scpu-test.prg c128-scpu-test.prg c64dtv-test.prg \ - c64-c128-test.prg c128-test.prg chameleon-test.prg \ - c65-test.prg turbomaster-test.prg +EXELIST_c64 = \ + c64-scpu-test.prg \ + c128-scpu-test.prg \ + c64dtv-test.prg \ + c64-c128-test.prg \ + chameleon-test.prg \ + c65-test.prg \ + turbomaster-test.prg + +EXELIST_c128 = \ + c128-test.prg + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: accelerator tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif c64-scpu-test.prg: c64-c128-scpu-test.c $(CL) -t c64 c64-c128-scpu-test.c -o c64-scpu-test.prg diff --git a/targettest/apple2/Makefile b/targettest/apple2/Makefile index 15a4075af..d71c5be3a 100644 --- a/targettest/apple2/Makefile +++ b/targettest/apple2/Makefile @@ -29,7 +29,25 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: hgrshow hgrtest dhgrshow +EXELIST_apple2 = \ + hgrshow \ + hgrtest \ + dhgrshow + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: apple2 tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif disk: hgr.dsk dhgr.dsk diff --git a/targettest/atari/Makefile b/targettest/atari/Makefile index 05388ddd7..609d2c758 100644 --- a/targettest/atari/Makefile +++ b/targettest/atari/Makefile @@ -27,8 +27,30 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: charmapping.xex defdev.xex displaylist.xex mem.xex multi.xex ostype.xex \ - scrcode.com sys.xex +EXELIST_atari = \ + charmapping.xex \ + defdev.xex \ + displaylist.xex \ + mem.xex \ + multi.xex \ + ostype.xex \ + scrcode.com \ + sys.xex + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: atari tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif charmapping.xex: charmapping.c $(CL) -t atari -o charmapping.xex charmapping.c diff --git a/targettest/atari5200/Makefile b/targettest/atari5200/Makefile index 532bb815e..ab0c99f1c 100644 --- a/targettest/atari5200/Makefile +++ b/targettest/atari5200/Makefile @@ -27,7 +27,23 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: hello +EXELIST_atari5200 = \ + hello + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: atari 5200 tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif hello: hello.c $(CL) -t atari5200 -o hello hello.c diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index 3a4eff86f..47ae5171d 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -30,7 +30,27 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: petscii.prg cbmdir-test.prg +EXELIST_c64 = \ + petscii.prg \ + cbmdir-test.prg + +EXELIST_vic20 = \ + cbmdir-test.prg + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: cbm tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif ifeq ($(SYS),c64) petscii.prg: petscii.c diff --git a/targettest/gamate/Makefile b/targettest/gamate/Makefile index 69ac30dc5..74a3d8c50 100644 --- a/targettest/gamate/Makefile +++ b/targettest/gamate/Makefile @@ -27,7 +27,23 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: audiotest.bin lcdtest.bin ctest.bin +EXELIST_gamate = \ + audiotest.bin lcdtest.bin ctest.bin + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: gamate tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif audiotest.bin: audiotest.s $(CL) -l audiotest.lst -t gamate -o audiotest.bin audiotest.s diff --git a/targettest/pce/Makefile b/targettest/pce/Makefile index 695fed0a5..598c38575 100644 --- a/targettest/pce/Makefile +++ b/targettest/pce/Makefile @@ -42,7 +42,23 @@ else COUNT := 1 endif -all: conio.bin +EXELIST_pce = \ + conio.bin + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: pce tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif %.bin: %.c $(CL) -t pce $< -Wl -D__CARTSIZE__=${CARTSIZE} -m $*.map -o $@ diff --git a/targettest/sym1/Makefile b/targettest/sym1/Makefile index 8e469a599..c9f9eb099 100644 --- a/targettest/sym1/Makefile +++ b/targettest/sym1/Makefile @@ -26,7 +26,23 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: symHello.bin symTiny.bin symDisplay.bin symIO.bin symNotepad.bin +EXELIST_sym1 = \ + symHello.bin symTiny.bin symDisplay.bin symIO.bin symNotepad.bin + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: sym1 tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif symHello.bin: symHello.c $(CL) -t sym1 -O -o symHello.bin symHello.c From c50f5c946756aebd81b1630ca753c3eaf8febe4b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 19:50:52 +0100 Subject: [PATCH 1048/2710] build targettest progrs for all targets --- .github/workflows/build-on-pull-request.yml | 107 +++++++++----------- 1 file changed, 50 insertions(+), 57 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 41a3529b8..7f09ec6af 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -98,8 +98,6 @@ jobs: - name: Test that the targettest programs can be built. shell: bash run: | - make SYS=c64 -C targettest all - make SYS=c64 -C targettest clean make SYS=apple2 -C targettest make SYS=apple2 -C targettest clean make SYS=apple2enh -C targettest @@ -108,58 +106,58 @@ jobs: make SYS=atari -C targettest clean make SYS=atarixl -C targettest make SYS=atarixl -C targettest clean - # make SYS=atari2600 -C targettest - # make SYS=atari2600 -C targettest clean - # make SYS=atari5200 -C targettest - # make SYS=atari5200 -C targettest clean - # make SYS=atmos -C targettest - # make SYS=atmos -C targettest clean - # make SYS=bbc -C targettest - # make SYS=bbc -C targettest clean - # make SYS=c128 -C targettest - # make SYS=c128 -C targettest clean - # make SYS=c16 -C targettest - # make SYS=c16 -C targettest clean + make SYS=atari2600 -C targettest + make SYS=atari2600 -C targettest clean + make SYS=atari5200 -C targettest + make SYS=atari5200 -C targettest clean + make SYS=atmos -C targettest + make SYS=atmos -C targettest clean + make SYS=bbc -C targettest + make SYS=bbc -C targettest clean + make SYS=c128 -C targettest + make SYS=c128 -C targettest clean + make SYS=c16 -C targettest + make SYS=c16 -C targettest clean make SYS=c64 -C targettest make SYS=c64 -C targettest clean - # make SYS=cbm510 -C targettest - # make SYS=cbm510 -C targettest clean - # make SYS=cbm610 -C targettest - # make SYS=cbm610 -C targettest clean - # make SYS=creativision -C targettest - # make SYS=creativision -C targettest clean - # make SYS=cx16 -C targettest - # make SYS=cx16 -C targettest clean - # make SYS=gamate -C targettest - # make SYS=gamate -C targettest clean - # make SYS=geos-apple -C targettest - # make SYS=geos-apple -C targettest clean - # make SYS=geos-cbm -C targettest - # make SYS=geos-cbm -C targettest clean - # make SYS=lunix -C targettest - # make SYS=lunix -C targettest clean - # make SYS=lynx -C targettest - # make SYS=lynx -C targettest clean - # make SYS=nes -C targettest - # make SYS=nes -C targettest clean - # make SYS=osic1p -C targettest - # make SYS=osic1p -C targettest clean - # make SYS=pce -C targettest - # make SYS=pce -C targettest clean - # make SYS=pet -C targettest - # make SYS=pet -C targettest clean - # make SYS=plus4 -C targettest - # make SYS=plus4 -C targettest clean - # make SYS=sim6502 -C targettest - # make SYS=sim6502 -C targettest clean - # make SYS=sim65c02 -C targettest - # make SYS=sim65c02 -C targettest clean - # make SYS=supervision -C targettest - # make SYS=supervision -C targettest clean - # make SYS=sym1 -C targettest - # make SYS=sym1 -C targettest clean - # make SYS=telestrat -C targettest - # make SYS=telestrat -C targettest clean + make SYS=cbm510 -C targettest + make SYS=cbm510 -C targettest clean + make SYS=cbm610 -C targettest + make SYS=cbm610 -C targettest clean + make SYS=creativision -C targettest + make SYS=creativision -C targettest clean + make SYS=cx16 -C targettest + make SYS=cx16 -C targettest clean + make SYS=gamate -C targettest + make SYS=gamate -C targettest clean + make SYS=geos-apple -C targettest + make SYS=geos-apple -C targettest clean + make SYS=geos-cbm -C targettest + make SYS=geos-cbm -C targettest clean + make SYS=lunix -C targettest + make SYS=lunix -C targettest clean + make SYS=lynx -C targettest + make SYS=lynx -C targettest clean + make SYS=nes -C targettest + make SYS=nes -C targettest clean + make SYS=osic1p -C targettest + make SYS=osic1p -C targettest clean + make SYS=pce -C targettest + make SYS=pce -C targettest clean + make SYS=pet -C targettest + make SYS=pet -C targettest clean + make SYS=plus4 -C targettest + make SYS=plus4 -C targettest clean + make SYS=sim6502 -C targettest + make SYS=sim6502 -C targettest clean + make SYS=sim65c02 -C targettest + make SYS=sim65c02 -C targettest clean + make SYS=supervision -C targettest + make SYS=supervision -C targettest clean + make SYS=sym1 -C targettest + make SYS=sym1 -C targettest clean + make SYS=telestrat -C targettest + make SYS=telestrat -C targettest clean make SYS=vic20 -C targettest make SYS=vic20 -C targettest clean - name: Build the document files. @@ -189,8 +187,3 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release - -# TODO: fix targettest Makefile for all currently commented out targets -# TODO: build targettest cbm subdir for all cbm targets -# TODO: build targettest atari subdir for all atari targets -# TODO: build targettest apple2 subdir for all apple2 targets From 25363ae00afad1f7d8c545bf884d655516d39cd5 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 23:26:07 +0100 Subject: [PATCH 1049/2710] the forgotten minimal testprog --- targettest/minimal.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 targettest/minimal.c diff --git a/targettest/minimal.c b/targettest/minimal.c new file mode 100644 index 000000000..65ec37a97 --- /dev/null +++ b/targettest/minimal.c @@ -0,0 +1,13 @@ + +/* this is a minimal / empty c program, any supported target that has some + * sort of C support should be able to link this. Failure indicates a problem + * with the crt0 or the linker config of the respective target */ + +char bss_variable; +char data_variable = 42; +const char rodata_variable = 23; + +void main(void) +{ + /* nothing here */ +} From 98f862b8fbb1d288f4aeac5a1a48b2968ec2d016 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 30 Jan 2022 19:59:32 -0500 Subject: [PATCH 1050/2710] Fixed heaptest.c compiler warnings in a way that's better than PR #1621. This fix adds "unsigned" to one line instead of removing it from several lines. --- targettest/heaptest.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/targettest/heaptest.c b/targettest/heaptest.c index e3a21eaa6..f33808261 100644 --- a/targettest/heaptest.c +++ b/targettest/heaptest.c @@ -6,18 +6,18 @@ -static char* V[256]; +static unsigned char* V[256]; -static char* Alloc (void) +static unsigned char* Alloc (void) /* Allocate a random sized chunk of memory */ { /* Determine the size */ unsigned char Size = (((unsigned char)rand()) & 0x7F) + 1; /* Allocate memory */ - char* P = malloc (Size); + unsigned char* P = malloc (Size); /* Set the string to a defined value. We use the size, since this will ** also allow us to retrieve it later. @@ -33,7 +33,7 @@ static char* Alloc (void) -static void Free (char* P) +static void Free (unsigned char* P) /* Check a memory block and free it */ { unsigned char I; @@ -234,6 +234,3 @@ int main (void) /* Done */ return EXIT_SUCCESS; } - - - From a29a1b0a59cdcc0e2e925ef2cffddafc99590317 Mon Sep 17 00:00:00 2001 From: polluks <polluks@sdf.lonestar.org> Date: Mon, 31 Jan 2022 02:18:01 +0100 Subject: [PATCH 1051/2710] Added more purple (rain) --- include/apple2.h | 1 + include/atari.h | 2 ++ include/c128.h | 2 ++ include/lynx.h | 3 +++ include/nes.h | 20 ++++++++++++++++++++ include/pce.h | 1 + 6 files changed, 29 insertions(+) diff --git a/include/apple2.h b/include/apple2.h index 57d7086ce..41b45f58f 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -59,6 +59,7 @@ #define TGI_COLOR_BLACK 0x00 #define TGI_COLOR_GREEN 0x01 #define TGI_COLOR_VIOLET 0x02 +#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET #define TGI_COLOR_WHITE 0x03 #define TGI_COLOR_BLACK2 0x04 #define TGI_COLOR_ORANGE 0x05 diff --git a/include/atari.h b/include/atari.h index 86c7b9706..ab3ce81e6 100644 --- a/include/atari.h +++ b/include/atari.h @@ -393,6 +393,7 @@ extern void atrx15p2_tgi[]; #define COLOR_RED GTIA_COLOR_RED #define COLOR_CYAN GTIA_COLOR_CYAN #define COLOR_VIOLET GTIA_COLOR_VIOLET +#define COLOR_PURPLE COLOR_VIOLET #define COLOR_GREEN GTIA_COLOR_GREEN #define COLOR_BLUE GTIA_COLOR_BLUE #define COLOR_YELLOW GTIA_COLOR_YELLOW @@ -411,6 +412,7 @@ extern void atrx15p2_tgi[]; #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN #define TGI_COLOR_VIOLET COLOR_VIOLET +#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_YELLOW COLOR_YELLOW diff --git a/include/c128.h b/include/c128.h index fe1dd4317..623e5f99d 100644 --- a/include/c128.h +++ b/include/c128.h @@ -61,6 +61,7 @@ #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 #define COLOR_VIOLET 0x04 +#define COLOR_PURPLE COLOR_VIOLET #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 @@ -79,6 +80,7 @@ #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN #define TGI_COLOR_VIOLET COLOR_VIOLET +#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_YELLOW COLOR_YELLOW diff --git a/include/lynx.h b/include/lynx.h index 4b0390a13..cf8f32b59 100644 --- a/include/lynx.h +++ b/include/lynx.h @@ -65,6 +65,7 @@ #define COLOR_GREEN 0x0A #define COLOR_DARKBROWN 0x0B #define COLOR_VIOLET 0x0C +#define COLOR_PURPLE COLOR_VIOLET #define COLOR_BLUE 0x0D #define COLOR_LIGHTBLUE 0x0E #define COLOR_WHITE 0x0F @@ -77,12 +78,14 @@ #define TGI_COLOR_GREY COLOR_GREY #define TGI_COLOR_DARKGREY COLOR_DARKGREY #define TGI_COLOR_BROWN COLOR_BROWN +#define TGI_COLOR_ORANGE COLOR_BROWN #define TGI_COLOR_PEACH COLOR_PEACH #define TGI_COLOR_YELLOW COLOR_YELLOW #define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_DARKBROWN COLOR_DARKBROWN #define TGI_COLOR_VIOLET COLOR_VIOLET +#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE #define TGI_COLOR_WHITE COLOR_WHITE diff --git a/include/nes.h b/include/nes.h index 217a90779..0724418b2 100644 --- a/include/nes.h +++ b/include/nes.h @@ -70,6 +70,7 @@ #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 #define COLOR_VIOLET 0x04 +#define COLOR_PURPLE COLOR_VIOLET #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 @@ -82,6 +83,25 @@ #define COLOR_LIGHTBLUE 0x0E #define COLOR_GRAY3 0x0F +/* TGI color defines (default palette) */ +#define TGI_COLOR_BLACK COLOR_BLACK +#define TGI_COLOR_RED COLOR_RED +#define TGI_COLOR_PINK COLOR_LIGHTRED +#define TGI_COLOR_LIGHTGREY COLOR_GRAY1 +#define TGI_COLOR_GREY COLOR_GRAY2 +#define TGI_COLOR_DARKGREY COLOR_GRAY3 +#define TGI_COLOR_BROWN COLOR_BROWN +#define TGI_COLOR_PEACH COLOR_CYAN +#define TGI_COLOR_YELLOW COLOR_YELLOW +#define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN +#define TGI_COLOR_GREEN COLOR_GREEN +#define TGI_COLOR_DARKBROWN COLOR_ORANGE +#define TGI_COLOR_VIOLET COLOR_VIOLET +#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET +#define TGI_COLOR_BLUE COLOR_BLUE +#define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE +#define TGI_COLOR_WHITE COLOR_WHITE + /* Masks for joy_read */ #define JOY_UP_MASK 0x10 #define JOY_DOWN_MASK 0x20 diff --git a/include/pce.h b/include/pce.h index d7cf0a695..8ab5b363f 100644 --- a/include/pce.h +++ b/include/pce.h @@ -57,6 +57,7 @@ #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 #define COLOR_VIOLET 0x04 +#define COLOR_PURPLE COLOR_VIOLET #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 From 112e216e53937982e26106cf2e96eea3179397ba Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 30 Jan 2022 21:44:39 -0500 Subject: [PATCH 1052/2710] Removed an obsolete command-line option from the cc65 compiler. --- src/cc65/main.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/cc65/main.c b/src/cc65/main.c index f95d89bd9..0ed5af986 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -955,10 +955,6 @@ int main (int argc, char* argv[]) OptTarget (Arg, GetArg (&I, 2)); break; - case 'u': - OptCreateDep (Arg, 0); - break; - case 'v': OptVerbose (Arg, 0); break; From 7118c9236ba102367ab529ec94171f620d204d59 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 31 Jan 2022 07:10:03 -0500 Subject: [PATCH 1053/2710] Fixed the cart directory build code to handle even simple programs. Carts can be built containing programs that don't link some segments. --- libsrc/lynx/defdir.s | 5 ++--- targettest/Makefile | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/libsrc/lynx/defdir.s b/libsrc/lynx/defdir.s index c0fe19f4d..d15a99d5a 100644 --- a/libsrc/lynx/defdir.s +++ b/libsrc/lynx/defdir.s @@ -6,8 +6,7 @@ .include "lynx.inc" .import __STARTOFDIRECTORY__ .import __MAIN_START__ - .import __CODE_SIZE__, __DATA_SIZE__, __RODATA_SIZE__ - .import __STARTUP_SIZE__, __ONCE_SIZE__, __LOWCODE_SIZE__ + .import __STARTUP_LOAD__, __BSS_LOAD__ .import __BANK0BLOCKSIZE__ .export __DEFDIR__: absolute = 1 @@ -21,7 +20,7 @@ off0 = __STARTOFDIRECTORY__ + (__DIRECTORY_END__ - __DIRECTORY_START__) blocka = off0 / __BANK0BLOCKSIZE__ ; Entry 0 - first executable block0 = off0 / __BANK0BLOCKSIZE__ -len0 = __STARTUP_SIZE__ + __ONCE_SIZE__ + __CODE_SIZE__ + __DATA_SIZE__ + __RODATA_SIZE__ + __LOWCODE_SIZE__ +len0 = __BSS_LOAD__ - __STARTUP_LOAD__ .byte <block0 .word off0 & (__BANK0BLOCKSIZE__ - 1) .byte $88 diff --git a/targettest/Makefile b/targettest/Makefile index be6842f0f..6c1de1101 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -692,9 +692,8 @@ EXELIST_bbc = \ EXELIST_lunix = \ notavailable -# none of the testcode can work on the lynx (library support is broken!) EXELIST_lynx = \ - notavailable + minimal # Unlisted targets will try to build everything. # That lets us learn what they cannot build, and what settings From e3ca14116debd160285b2231839925f1f1c6f618 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Mon, 31 Jan 2022 19:32:44 +0100 Subject: [PATCH 1054/2710] Disable double hires on exit. A program being run afterwards might not even know about the existence of double hires. So it's our task to turn double hires off on exit. --- targettest/apple2/dhgrshow.c | 1 + 1 file changed, 1 insertion(+) diff --git a/targettest/apple2/dhgrshow.c b/targettest/apple2/dhgrshow.c index f0b37e461..8bc8bcebd 100644 --- a/targettest/apple2/dhgrshow.c +++ b/targettest/apple2/dhgrshow.c @@ -40,6 +40,7 @@ void main (void) } closedir (dir); + POKE (0xC05F, 0); tgi_uninstall (); videomode (old); } From 8e60102e8e7c01ea1c7b2d88236a2e4554dcfbd1 Mon Sep 17 00:00:00 2001 From: polluks <polluks@sdf.lonestar.org> Date: Wed, 2 Feb 2022 00:58:50 +0100 Subject: [PATCH 1055/2710] Removed the colour purple This commit may break compatibility. --- asminc/cx16.inc | 4 +--- include/apple2.h | 3 +-- include/atari.h | 6 ++---- include/c128.h | 6 ++---- include/c64.h | 4 +--- include/cbm264.h | 6 ++---- include/cbm510.h | 3 +-- include/cx16.h | 5 +---- include/geos.h | 2 -- include/lynx.h | 6 ++---- include/nes.h | 6 ++---- include/pce.h | 3 +-- include/vic20.h | 4 ++-- libsrc/nes/color.s | 3 +-- libsrc/nes/ppu.s | 2 +- 15 files changed, 20 insertions(+), 43 deletions(-) diff --git a/asminc/cx16.inc b/asminc/cx16.inc index 4d9ce89db..4e5971593 100644 --- a/asminc/cx16.inc +++ b/asminc/cx16.inc @@ -10,8 +10,7 @@ WHITE RED CYAN - VIOLET - PURPLE = VIOLET + PURPLE GREEN BLUE YELLOW @@ -84,7 +83,6 @@ LIGHTGREEN LIGHTBLUE GRAY3 PURPLE -VIOLET = PURPLE CURS_LEFT YELLOW CYAN diff --git a/include/apple2.h b/include/apple2.h index 41b45f58f..2735e948b 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -58,8 +58,7 @@ /* TGI color defines */ #define TGI_COLOR_BLACK 0x00 #define TGI_COLOR_GREEN 0x01 -#define TGI_COLOR_VIOLET 0x02 -#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET +#define TGI_COLOR_PURPLE 0x02 #define TGI_COLOR_WHITE 0x03 #define TGI_COLOR_BLACK2 0x04 #define TGI_COLOR_ORANGE 0x05 diff --git a/include/atari.h b/include/atari.h index ab3ce81e6..781ee7a80 100644 --- a/include/atari.h +++ b/include/atari.h @@ -392,8 +392,7 @@ extern void atrx15p2_tgi[]; #define COLOR_WHITE GTIA_COLOR_WHITE #define COLOR_RED GTIA_COLOR_RED #define COLOR_CYAN GTIA_COLOR_CYAN -#define COLOR_VIOLET GTIA_COLOR_VIOLET -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE GTIA_COLOR_VIOLET #define COLOR_GREEN GTIA_COLOR_GREEN #define COLOR_BLUE GTIA_COLOR_BLUE #define COLOR_YELLOW GTIA_COLOR_YELLOW @@ -411,8 +410,7 @@ extern void atrx15p2_tgi[]; #define TGI_COLOR_WHITE COLOR_WHITE #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN -#define TGI_COLOR_VIOLET COLOR_VIOLET -#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET +#define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_YELLOW COLOR_YELLOW diff --git a/include/c128.h b/include/c128.h index 623e5f99d..ee1dce99e 100644 --- a/include/c128.h +++ b/include/c128.h @@ -60,8 +60,7 @@ #define COLOR_WHITE 0x01 #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 -#define COLOR_VIOLET 0x04 -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE 0x04 #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 @@ -79,8 +78,7 @@ #define TGI_COLOR_WHITE COLOR_WHITE #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN -#define TGI_COLOR_VIOLET COLOR_VIOLET -#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET +#define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_YELLOW COLOR_YELLOW diff --git a/include/c64.h b/include/c64.h index afe47ece6..f501a4e7f 100644 --- a/include/c64.h +++ b/include/c64.h @@ -66,8 +66,7 @@ #define COLOR_WHITE 0x01 #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 -#define COLOR_VIOLET 0x04 -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE 0x04 #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 @@ -85,7 +84,6 @@ #define TGI_COLOR_WHITE COLOR_WHITE #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN -#define TGI_COLOR_VIOLET COLOR_VIOLET #define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE diff --git a/include/cbm264.h b/include/cbm264.h index a51ee79c5..4951df518 100644 --- a/include/cbm264.h +++ b/include/cbm264.h @@ -79,8 +79,7 @@ #define BCOLOR_WHITE 0x01 #define BCOLOR_RED 0x02 #define BCOLOR_CYAN 0x03 -#define BCOLOR_VIOLET 0x04 -#define BCOLOR_PURPLE BCOLOR_VIOLET +#define BCOLOR_PURPLE 0x04 #define BCOLOR_GREEN 0x05 #define BCOLOR_BLUE 0x06 #define BCOLOR_YELLOW 0x07 @@ -98,8 +97,7 @@ #define COLOR_WHITE (BCOLOR_WHITE | CATTR_LUMA7) #define COLOR_RED (BCOLOR_RED | CATTR_LUMA4) #define COLOR_CYAN (BCOLOR_CYAN | CATTR_LUMA7) -#define COLOR_VIOLET (BCOLOR_VIOLET | CATTR_LUMA7) -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE (BCOLOR_VIOLET | CATTR_LUMA7) #define COLOR_GREEN (BCOLOR_GREEN | CATTR_LUMA7) #define COLOR_BLUE (BCOLOR_BLUE | CATTR_LUMA7) #define COLOR_YELLOW (BCOLOR_YELLOW | CATTR_LUMA7) diff --git a/include/cbm510.h b/include/cbm510.h index 3d6ccd209..20b334ed9 100644 --- a/include/cbm510.h +++ b/include/cbm510.h @@ -78,8 +78,7 @@ #define COLOR_WHITE 0x01 #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 -#define COLOR_VIOLET 0x04 -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE 0x04 #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 diff --git a/include/cx16.h b/include/cx16.h index 179021e84..4100da631 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -70,7 +70,6 @@ #define CH_LIGHTBLUE 0x9A #define CH_GRAY3 0x9B #define CH_PURPLE 0x9C -#define CH_VIOLET CH_PURPLE #define CH_YELLOW 0x9E #define CH_CYAN 0x9F #define CH_SHIFT_SPACE 0xA0 @@ -96,8 +95,7 @@ #define COLOR_WHITE 0x01 #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 -#define COLOR_VIOLET 0x04 -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE 0x04 #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 @@ -116,7 +114,6 @@ #define TGI_COLOR_WHITE COLOR_WHITE #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN -#define TGI_COLOR_VIOLET COLOR_VIOLET #define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE diff --git a/include/geos.h b/include/geos.h index 3f760b6ad..99b49777f 100644 --- a/include/geos.h +++ b/include/geos.h @@ -67,7 +67,6 @@ #define COLOR_WHITE WHITE #define COLOR_RED RED #define COLOR_CYAN CYAN -#define COLOR_VIOLET PURPLE #define COLOR_PURPLE PURPLE #define COLOR_GREEN GREEN #define COLOR_BLUE BLUE @@ -85,7 +84,6 @@ #define TGI_COLOR_WHITE COLOR_WHITE #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN -#define TGI_COLOR_VIOLET COLOR_VIOLET #define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE diff --git a/include/lynx.h b/include/lynx.h index cf8f32b59..6c7e13da9 100644 --- a/include/lynx.h +++ b/include/lynx.h @@ -64,8 +64,7 @@ #define COLOR_LIGHTGREEN 0x09 #define COLOR_GREEN 0x0A #define COLOR_DARKBROWN 0x0B -#define COLOR_VIOLET 0x0C -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE 0x0C #define COLOR_BLUE 0x0D #define COLOR_LIGHTBLUE 0x0E #define COLOR_WHITE 0x0F @@ -84,8 +83,7 @@ #define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_DARKBROWN COLOR_DARKBROWN -#define TGI_COLOR_VIOLET COLOR_VIOLET -#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET +#define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE #define TGI_COLOR_WHITE COLOR_WHITE diff --git a/include/nes.h b/include/nes.h index 0724418b2..9537dd698 100644 --- a/include/nes.h +++ b/include/nes.h @@ -69,8 +69,7 @@ #define COLOR_WHITE 0x01 #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 -#define COLOR_VIOLET 0x04 -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE 0x04 #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 @@ -96,8 +95,7 @@ #define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_DARKBROWN COLOR_ORANGE -#define TGI_COLOR_VIOLET COLOR_VIOLET -#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET +#define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE #define TGI_COLOR_WHITE COLOR_WHITE diff --git a/include/pce.h b/include/pce.h index 8ab5b363f..826f85390 100644 --- a/include/pce.h +++ b/include/pce.h @@ -56,8 +56,7 @@ #define COLOR_WHITE 0x01 #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 -#define COLOR_VIOLET 0x04 -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE 0x04 #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 diff --git a/include/vic20.h b/include/vic20.h index d60c7e270..55b81f13f 100644 --- a/include/vic20.h +++ b/include/vic20.h @@ -62,7 +62,7 @@ #define COLOR_WHITE 0x01 #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 -#define COLOR_VIOLET 0x04 +#define COLOR_PURPLE 0x04 #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 @@ -81,7 +81,7 @@ #define TGI_COLOR_WHITE COLOR_WHITE #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN -#define TGI_COLOR_VIOLET COLOR_VIOLET +#define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_YELLOW COLOR_YELLOW diff --git a/libsrc/nes/color.s b/libsrc/nes/color.s index bb91ff908..e3aef9a28 100644 --- a/libsrc/nes/color.s +++ b/libsrc/nes/color.s @@ -54,7 +54,7 @@ colors: .byte $0f ; 0 black .byte $3d ; 1 white .byte $04 ; 2 red .byte $3b ; 3 cyan - .byte $14 ; 4 violett + .byte $14 ; 4 violet .byte $1a ; 5 green .byte $01 ; 6 blue .byte $38 ; 7 yellow @@ -66,4 +66,3 @@ colors: .byte $0f ; 0 black .byte $2b ; d light green .byte $22 ; e light blue .byte $3d ; f light gray - diff --git a/libsrc/nes/ppu.s b/libsrc/nes/ppu.s index 07b6842f7..92e056fb4 100644 --- a/libsrc/nes/ppu.s +++ b/libsrc/nes/ppu.s @@ -137,7 +137,7 @@ paldata: .repeat 2 .byte $0f ; 0 black - .byte $14 ; 4 violett + .byte $14 ; 4 violet .byte $3b ; 3 cyan .byte $3d ; 1 white From a26778744a3cefee87bda8405eff586edac50b2c Mon Sep 17 00:00:00 2001 From: polluks <polluks@sdf.lonestar.org> Date: Wed, 2 Feb 2022 23:02:01 +0100 Subject: [PATCH 1056/2710] Added tail call optimization --- libsrc/sym1/beep.s | 3 +-- libsrc/sym1/crt0.s | 4 ++-- libsrc/sym1/display.s | 3 +-- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/libsrc/sym1/beep.s b/libsrc/sym1/beep.s index 40a3d42c6..edb5f23e4 100644 --- a/libsrc/sym1/beep.s +++ b/libsrc/sym1/beep.s @@ -12,7 +12,6 @@ .proc _beep: near - jsr BEEP ; Beep - rts + jmp BEEP ; Beep .endproc diff --git a/libsrc/sym1/crt0.s b/libsrc/sym1/crt0.s index 5d398b311..5d4e0449b 100644 --- a/libsrc/sym1/crt0.s +++ b/libsrc/sym1/crt0.s @@ -53,5 +53,5 @@ _exit: jsr donelib ; Run destructors lda TECHO ora #$80 ; Re-enable console echo sta TECHO - jsr NACCES ; Lock System RAM - rts ; Re-enter Sym-1 monitor + jmp NACCES ; Lock System RAM + ; Re-enter Sym-1 monitor diff --git a/libsrc/sym1/display.s b/libsrc/sym1/display.s index f3b2923d6..160b98806 100644 --- a/libsrc/sym1/display.s +++ b/libsrc/sym1/display.s @@ -12,7 +12,6 @@ .proc _fdisp: near - jsr SCAND ; Flash Display - rts + jmp SCAND ; Flash Display .endproc From f7fa81b24489dea1bf931d1930d08bd6e7294dc3 Mon Sep 17 00:00:00 2001 From: polluks <polluks@sdf.lonestar.org> Date: Thu, 3 Feb 2022 01:01:10 +0100 Subject: [PATCH 1057/2710] Fixed many typos --- doc/atari.sgml | 2 +- doc/ca65.sgml | 2 +- doc/cc65.sgml | 2 +- doc/funcref.sgml | 20 ++++++++++---------- doc/smc.sgml | 2 +- doc/telestrat.sgml | 4 ++-- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/doc/atari.sgml b/doc/atari.sgml index ff41d0bb4..170ffd5fb 100644 --- a/doc/atari.sgml +++ b/doc/atari.sgml @@ -117,7 +117,7 @@ Special locations: The startup code rearranges the memory as follows: <enum> -<item>Sceen memory and display list are moved below the program start address. +<item>Screen memory and display list are moved below the program start address. <item>The ROM is disabled, making the memory in the areas [$C000-$CFFF] and [$D800-$FFF9] available. <item>Character generator data is copied from ROM to the CHARGEN location specified in the diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 0638ab08c..309fbf28d 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -3724,7 +3724,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE" <tt/.PUSHCHARMAP/ allows together with <tt><ref id=".POPCHARMAP" name=".POPCHARMAP"></tt> to switch to another character mapping and to restore the old - characther mapping later, without knowledge of the current mapping. + character mapping later, without knowledge of the current mapping. The assembler will print an error message if the character mapping stack is already full, when this command is issued. diff --git a/doc/cc65.sgml b/doc/cc65.sgml index b20e05cc6..df58a0a95 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1673,7 +1673,7 @@ This is the original compiler copyright: Anyone may copy or redistribute these programs, provided that: - 1: You don't charge anything for the copy. It is permissable to + 1: You don't charge anything for the copy. It is permissible to charge a nominal fee for media, etc. 2: All source code and documentation for the programs is made diff --git a/doc/funcref.sgml b/doc/funcref.sgml index e6cb42a0f..4dff14dd3 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -3513,7 +3513,7 @@ extended memory that should be supported. There is no autodetect capability. <tag/Declaration/<tt/void* __fastcall__ em_map (unsigned page);/ <tag/Description/The function maps one page of extended memory into linear memory and returns a pointer to the page frame. Depending on the hardware -and driver, the data is either mapped into the address space or transfered +and driver, the data is either mapped into the address space or transferred into a buffer. If you don't need the actual contents of the page (for example because you're going to overwrite it completely), it is better to call <tt/<ref id="em_use" name="em_use">/ instead. <tt/em_use/ will not transfer the @@ -3728,7 +3728,7 @@ switching the CPU into double clock mode. <tag/Function/Return the end-of-file indicator of a stream. <tag/Header/<tt/<ref id="stdio.h" name="stdio.h">/ <tag/Declaration/<tt/int __fastcall__ feof (FILE* f);/ -<tag/Description/<tt/feof/ tests the end-of-file indicator ofthe stream +<tag/Description/<tt/feof/ tests the end-of-file indicator of the stream <tt/f/, and returns a non zero value if it is set. <tag/Notes/<itemize> <item>The indicator is set only after a read past the end of a file is @@ -4172,7 +4172,7 @@ const char* optstring);/ is a string that contains command line option characters. If a character in <tt/optstring/ is followed by a colon, the option requires an argument. An option on the command line is recognized if it is one of the option characters -preceeded by a '-'. +preceded by a '-'. <tt/getopt/ must be called repeatedly. It will return each option character found on the command line and <tt/EOF/ (-1) if there is no other option. An option argument is placed in <tt/optarg/, the index of the next element on the @@ -5020,7 +5020,7 @@ always be the same. <tag/Header/<tt/<ref id="setjmp.h" name="setjmp.h">/ <tag/Declaration/<tt/void __fastcall__ longjmp (jmp_buf buf, int retval);/ <tag/Description/The <tt/longjmp/ function restores a program context from the -data in <tt/buf/, which must have been set by a preceeding call to +data in <tt/buf/, which must have been set by a preceding call to <tt/<ref id="setjmp" name="setjmp">/. Program execution continues as if the call to <tt/<ref id="setjmp" name="setjmp">/ has just returned the value <tt/retval/. @@ -5664,7 +5664,7 @@ cc65 allows to pass this argument, it is ignored. <tag/Function/Open a directory. <tag/Header/<tt/<ref id="dirent.h" name="dirent.h">/ <tag/Declaration/<tt/DIR* __fastcall__ opendir (const char* name);/ -<tag/Description/<tt/opendir/ opens a directory and returns the direcory +<tag/Description/<tt/opendir/ opens a directory and returns the directory descriptor associated with it. On error, NULL is returned and an error code is stored in <tt/errno/. <tag/Notes/<itemize> @@ -6863,7 +6863,7 @@ be used in presence of a prototype. <quote> <descrip> -<tag/Function/Concatentate two strings. +<tag/Function/Concatenate two strings. <tag/Header/<tt/<ref id="string.h" name="string.h">/ <tag/Declaration/<tt/char* __fastcall__ strcat (char* s1, const char* s2);/ <tag/Description/The <tt/strcat/ function appends a copy of the string @@ -7189,7 +7189,7 @@ be used in presence of a prototype. <quote> <descrip> -<tag/Function/Concatentate two strings. +<tag/Function/Concatenate two strings. <tag/Header/<tt/<ref id="string.h" name="string.h">/ <tag/Declaration/<tt/char* __fastcall__ strncat (char* s1, const char* s2, size_t n);/ <tag/Description/The <tt/strncat/ function appends not more than n characters @@ -7314,7 +7314,7 @@ be used in presence of a prototype. <tag/Header/<tt/<ref id="string.h" name="string.h">/ <tag/Declaration/<tt/char* __fastcall__ strpbrk (const char* str, const char* set);/ <tag/Description/<tt/strpbrk()/ searches within <tt/str/ for the first -occurance of any character from <tt/set/. It returns a pointer to that +occurrence of any character from <tt/set/. It returns a pointer to that character if found; otherwise, it returns <tt/NULL/. <tag/Notes/<itemize> <item>The function is available only as a fastcall function; @@ -7418,7 +7418,7 @@ be used in presence of a prototype. <tag/Function/Find a substring. <tag/Header/<tt/<ref id="string.h" name="string.h">/ <tag/Declaration/<tt/char* __fastcall__ strstr (const char* str, const char* substr);/ -<tag/Description/<tt/strstr/ searches for the first occurance of the string +<tag/Description/<tt/strstr/ searches for the first occurrence of the string <tt/substr/ within <tt/str/. If found, it returns a pointer to the copy, otherwise it returns <tt/NULL/. <tag/Notes/<itemize> @@ -7485,7 +7485,7 @@ the behaviour is undefined. <item>If <tt/n/ is zero, <tt/s1/ may be a NULL pointer. <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. -<item>Since cc65 doesn't support different charcter sets, <tt/strxfrm/ will +<item>Since cc65 doesn't support different character sets, <tt/strxfrm/ will just copy s2 to s1 using <tt><ref id="strncpy" name="strncpy"></tt>. </itemize> <tag/Availability/ISO 9899 diff --git a/doc/smc.sgml b/doc/smc.sgml index 88cd6dc14..71de20208 100644 --- a/doc/smc.sgml +++ b/doc/smc.sgml @@ -257,7 +257,7 @@ SMC LoadDefault, { LDX #25 } <label id="Load value"> <tag><tt>SMC_LoadValue label (, register)</tt></tag> - Retreives the value of a SMC line. + Retrieves the value of a SMC line. Example: <tscreen><verb> diff --git a/doc/telestrat.sgml b/doc/telestrat.sgml index eac341880..385bd69f9 100644 --- a/doc/telestrat.sgml +++ b/doc/telestrat.sgml @@ -79,7 +79,7 @@ in Telemon, there is no way to load a binary easily. Stratsed (the Telestrat operating system) handles files management. Stratsed is loaded to memory from floppy disk. Stratsed vector are declared in asminc/telestrat.inc. -But, reverse engineering is required to find how theses vectors works. Please, note that +But, reverse engineering is required to find how these vectors works. Please, note that Stratsed is located in overlay memory (bank 0) There is no tool to insert a binary in a Stratsed floppy disk. @@ -194,7 +194,7 @@ if you get input from keyboard by conio cgetc function, you will get direction f Anyway, if you don't want to use ROM, you can use joysticks standard drivers in your code. -The standard driver manages two joysticks. Only one button is managed for theses joysticks. +The standard driver manages two joysticks. Only one button is managed for these joysticks. Telestrat can handle one button for the left port, and three buttons for the right port (but this port was designed for a mouse). From bae2821d5ac914c5da465b7e0dc10c9d3f119b6b Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 3 Feb 2022 00:18:02 -0500 Subject: [PATCH 1058/2710] Added telestrat to <time.h>. That library has clock(). --- include/time.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/time.h b/include/time.h index 92cbeee37..ca7ee385f 100644 --- a/include/time.h +++ b/include/time.h @@ -102,6 +102,8 @@ extern struct _timezone { # define CLOCKS_PER_SEC 135 /* FIXME */ #elif defined(__GEOS__) # define CLOCKS_PER_SEC 1 +#elif defined(__TELESTRAT__) +# define CLOCKS_PER_SEC 10 #elif defined(__ATARI__) || defined (__LYNX__) /* Read the clock rate at runtime */ clock_t _clocks_per_sec (void); From f64ee3370d7f0c539bd16f14d22403a12a64c726 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 3 Feb 2022 00:29:48 -0500 Subject: [PATCH 1059/2710] Added to the telestrat library the name of the standard dynamic TGI driver. --- libsrc/telestrat/tgi_stddrv.s | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 libsrc/telestrat/tgi_stddrv.s diff --git a/libsrc/telestrat/tgi_stddrv.s b/libsrc/telestrat/tgi_stddrv.s new file mode 100644 index 000000000..959fa457e --- /dev/null +++ b/libsrc/telestrat/tgi_stddrv.s @@ -0,0 +1,13 @@ +; +; Name of the standard TGI driver +; +; 2022-02-02, Greg King +; +; const char tgi_stddrv[]; +; + + .export _tgi_stddrv + +.rodata + +_tgi_stddrv: .asciiz "telestrat-240-200-2.tgi" From 98bc021c5a79540334010d062ad8fbe953bd849d Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 3 Feb 2022 03:05:50 -0500 Subject: [PATCH 1060/2710] Added the names of samples and targettest programs that the telestrat library can build now. --- samples/Makefile | 5 ++++- targettest/Makefile | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index 44276d879..2cfd8d89b 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -308,7 +308,10 @@ EXELIST_sym1 = \ EXELIST_telestrat = \ ascii \ gunzip65 \ - hello + hello \ + mandelbrot \ + sieve \ +# tgidemo EXELIST_vic20 = \ ascii \ diff --git a/targettest/Makefile b/targettest/Makefile index 6c1de1101..806eda2fd 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -516,11 +516,12 @@ EXELIST_atari = \ EXELIST_atarixl = $(EXELIST_atari) -# omitted: clock-test clock cpeek-test deb dir-test em-test exec-test1 exec-test2 +# omitted: clock-test cpeek-test deb dir-test em-test exec-test1 exec-test2 # joy-test mouse-test rename-test seek ser-test stroserror-test tinyshell EXELIST_telestrat = \ minimal \ arg-test \ + clock \ conio \ cprintf \ cursor \ From 4e5b521903450c77bf1f629b0b5681bf6cdcd5f2 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 16:55:57 +0100 Subject: [PATCH 1061/2710] move some things from targettest to samples --- samples/Makefile | 39 +++++++++- {targettest => samples}/apple2/Makefile | 11 ++- {targettest => samples}/apple2/astronaut.hgr | Bin {targettest => samples}/apple2/catface.dhgr | Bin {targettest => samples}/apple2/chips.hgr | Bin {targettest => samples}/apple2/dhgrshow.c | 0 {targettest => samples}/apple2/gatsby.dhgr | Bin {targettest => samples}/apple2/girl.dhgr | Bin {targettest => samples}/apple2/hgrshow.c | 0 {targettest => samples}/apple2/hgrtest.c | 0 {targettest => samples}/apple2/macrometer.hgr | Bin {targettest => samples}/apple2/mariner.hgr | Bin {targettest => samples}/apple2/monarch.dhgr | Bin {targettest => samples}/apple2/rose.hgr | Bin {targettest => samples}/apple2/superman.dhgr | Bin {targettest => samples}/apple2/venice.dhgr | Bin {targettest => samples}/apple2/werner.hgr | Bin {targettest => samples}/apple2/werner.s | 0 {targettest => samples}/apple2/winston.hgr | Bin {targettest => samples}/atari5200/Makefile | 10 ++- {targettest => samples}/atari5200/hello.c | 0 samples/gamate/Makefile | 57 ++++++++++++++ {targettest => samples}/gamate/nachtm.c | 0 samples/getsp.s | 12 +++ samples/readme.txt | 70 ++++++++++++++++++ {targettest => samples}/sym1/Makefile | 11 ++- {targettest => samples}/sym1/symDisplay.c | 0 {targettest => samples}/sym1/symHello.c | 0 {targettest => samples}/sym1/symIO.c | 0 {targettest => samples}/sym1/symNotepad.c | 0 {targettest => samples}/sym1/symTiny.c | 0 {targettest => samples}/tinyshell.c | 0 targettest/Makefile | 39 +++------- targettest/atari/Makefile | 4 + targettest/gamate/Makefile | 7 +- targettest/pce/Makefile | 4 + targettest/readme.txt | 9 +++ 37 files changed, 231 insertions(+), 42 deletions(-) rename {targettest => samples}/apple2/Makefile (92%) rename {targettest => samples}/apple2/astronaut.hgr (100%) rename {targettest => samples}/apple2/catface.dhgr (100%) rename {targettest => samples}/apple2/chips.hgr (100%) rename {targettest => samples}/apple2/dhgrshow.c (100%) rename {targettest => samples}/apple2/gatsby.dhgr (100%) rename {targettest => samples}/apple2/girl.dhgr (100%) rename {targettest => samples}/apple2/hgrshow.c (100%) rename {targettest => samples}/apple2/hgrtest.c (100%) rename {targettest => samples}/apple2/macrometer.hgr (100%) rename {targettest => samples}/apple2/mariner.hgr (100%) rename {targettest => samples}/apple2/monarch.dhgr (100%) rename {targettest => samples}/apple2/rose.hgr (100%) rename {targettest => samples}/apple2/superman.dhgr (100%) rename {targettest => samples}/apple2/venice.dhgr (100%) rename {targettest => samples}/apple2/werner.hgr (100%) rename {targettest => samples}/apple2/werner.s (100%) rename {targettest => samples}/apple2/winston.hgr (100%) rename {targettest => samples}/atari5200/Makefile (82%) rename {targettest => samples}/atari5200/hello.c (100%) create mode 100644 samples/gamate/Makefile rename {targettest => samples}/gamate/nachtm.c (100%) create mode 100644 samples/getsp.s rename {targettest => samples}/sym1/Makefile (88%) rename {targettest => samples}/sym1/symDisplay.c (100%) rename {targettest => samples}/sym1/symHello.c (100%) rename {targettest => samples}/sym1/symIO.c (100%) rename {targettest => samples}/sym1/symNotepad.c (100%) rename {targettest => samples}/sym1/symTiny.c (100%) rename {targettest => samples}/tinyshell.c (100%) create mode 100644 targettest/readme.txt diff --git a/samples/Makefile b/samples/Makefile index 2cfd8d89b..5b08d4bb0 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -154,7 +154,7 @@ endif # Lists of subdirectories # disasm depends on cpp -DIRLIST = tutorial geos atari2600 supervision cbm +DIRLIST = tutorial geos atari2600 atari5200 apple2 gamate supervision sym1 cbm # -------------------------------------------------------------------------- # Lists of executables @@ -170,6 +170,7 @@ EXELIST_apple2 = \ multdemo \ ovrldemo \ sieve \ + tinyshell \ tgidemo EXELIST_apple2enh = $(EXELIST_apple2) @@ -183,6 +184,7 @@ EXELIST_atari = \ multdemo \ ovrldemo \ sieve \ + tinyshell \ tgidemo EXELIST_atarixl = $(EXELIST_atari) @@ -212,6 +214,7 @@ EXELIST_c64 = \ multdemo \ ovrldemo \ sieve \ + tinyshell \ tgidemo EXELIST_c128 = \ @@ -222,11 +225,13 @@ EXELIST_c128 = \ mandelbrot \ mousedemo \ sieve \ + tinyshell \ tgidemo EXELIST_c16 = \ ascii \ enumdevdir \ + tinyshell \ hello EXELIST_cbm510 = \ @@ -234,12 +239,14 @@ EXELIST_cbm510 = \ gunzip65 \ hello \ mousedemo \ + tinyshell \ sieve EXELIST_cbm610 = \ ascii \ gunzip65 \ hello \ + tinyshell \ sieve EXELIST_creativision = \ @@ -254,6 +261,7 @@ EXELIST_cx16 = \ mandelbrot \ mousedemo \ sieve \ + tinyshell \ tgidemo EXELIST_gamate = \ @@ -285,6 +293,7 @@ EXELIST_pet = \ ascii \ enumdevdir \ hello \ + tinyshell \ sieve EXELIST_plus4 = \ @@ -292,6 +301,7 @@ EXELIST_plus4 = \ enumdevdir \ gunzip65 \ hello \ + tinyshell \ sieve EXELIST_sim6502 = \ @@ -376,6 +386,23 @@ tgidemo: tgidemo.o $(LD) -D __HIMEM__=0x6000 $(LDFLAGS) -o $@ -C vic20-tgi.cfg -m $@.map $^ $(SYS).lib endif +# -------------------------------------------------------------------------- +# some programs link against getsp.o + +getsp.o: getsp.s + $(AS) $(ASFLAGS) -t $(SYS) $< + +ifneq ($(SYS),vic20) +tinyshell: tinyshell.o getsp.o + $(LD) $(LDFLAGS) -t $(SYS) -o $@ $^ $(SYS).lib +endif + +# some programs need more memory on the vic20 +ifeq ($(SYS),vic20) +tinyshell: tinyshell.o getsp.o + $(LD) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib +endif + # -------------------------------------------------------------------------- # Rule to make a CBM disk with all samples. Needs the c1541 program that comes # with the VICE emulator. @@ -456,7 +483,10 @@ install: $(INSTALL) -d $(DESTDIR)$(samplesdir)/geos $(INSTALL) -d $(DESTDIR)$(samplesdir)/tutorial $(INSTALL) -d $(DESTDIR)$(samplesdir)/atari2600 + $(INSTALL) -d $(DESTDIR)$(samplesdir)/atari5200 + $(INSTALL) -d $(DESTDIR)$(samplesdir)/apple2 $(INSTALL) -d $(DESTDIR)$(samplesdir)/cbm + $(INSTALL) -d $(DESTDIR)$(samplesdir)/gamate $(INSTALL) -d $(DESTDIR)$(samplesdir)/supervision $(INSTALL) -m0644 *.* $(DESTDIR)$(samplesdir) $(INSTALL) -m0644 readme.txt $(DESTDIR)$(samplesdir) @@ -464,7 +494,10 @@ install: $(INSTALL) -m0644 geos/*.* $(DESTDIR)$(samplesdir)/geos $(INSTALL) -m0644 tutorial/*.* $(DESTDIR)$(samplesdir)/tutorial $(INSTALL) -m0644 atari2600/*.* $(DESTDIR)$(samplesdir)/atari2600 + $(INSTALL) -m0644 atari5200/*.* $(DESTDIR)$(samplesdir)/atari5200 + $(INSTALL) -m0644 apple2/*.* $(DESTDIR)$(samplesdir)/apple2 $(INSTALL) -m0644 cbm/*.* $(DESTDIR)$(samplesdir)/cbm + $(INSTALL) -m0644 gamate/*.* $(DESTDIR)$(samplesdir)/gamate $(INSTALL) -m0644 supervision/*.* $(DESTDIR)$(samplesdir)/supervision # -------------------------------------------------------------------------- @@ -477,7 +510,9 @@ zip: # Clean-up rules mostlyclean: - @$(DEL) *.lbl *.map *.o *.s 2>$(NULLDEV) + @$(DEL) *.lbl *.map *.o 2>$(NULLDEV) +# we cant use .s since we have asm files in the directory that we want to keep + @$(DEL) ${patsubst %.c,%.s,$(wildcard *.c)} 2>$(NULLDEV) clean: mostlyclean @$(DEL) $(EXELIST_$(SYS)) $(DISK_$(SYS)) 2>$(NULLDEV) diff --git a/targettest/apple2/Makefile b/samples/apple2/Makefile similarity index 92% rename from targettest/apple2/Makefile rename to samples/apple2/Makefile index d71c5be3a..55e84aed6 100644 --- a/targettest/apple2/Makefile +++ b/samples/apple2/Makefile @@ -1,3 +1,8 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= apple2 + # For this one see https://applecommander.github.io/ AC ?= ac.jar @@ -35,9 +40,9 @@ EXELIST_apple2 = \ dhgrshow ifneq ($(EXELIST_$(SYS)),) -testcode: $(EXELIST_$(SYS)) +samples: $(EXELIST_$(SYS)) else -testcode: notavailable +samples: notavailable endif # empty target used to skip systems that will not work with any program in this dir @@ -45,7 +50,7 @@ notavailable: ifeq ($(MAKELEVEL),0) @echo "info: apple2 tests not available for" $(SYS) else -# suppress the "nothing to be done for 'testcode' message +# suppress the "nothing to be done for 'samples' message @echo > $(NULLDEV) endif diff --git a/targettest/apple2/astronaut.hgr b/samples/apple2/astronaut.hgr similarity index 100% rename from targettest/apple2/astronaut.hgr rename to samples/apple2/astronaut.hgr diff --git a/targettest/apple2/catface.dhgr b/samples/apple2/catface.dhgr similarity index 100% rename from targettest/apple2/catface.dhgr rename to samples/apple2/catface.dhgr diff --git a/targettest/apple2/chips.hgr b/samples/apple2/chips.hgr similarity index 100% rename from targettest/apple2/chips.hgr rename to samples/apple2/chips.hgr diff --git a/targettest/apple2/dhgrshow.c b/samples/apple2/dhgrshow.c similarity index 100% rename from targettest/apple2/dhgrshow.c rename to samples/apple2/dhgrshow.c diff --git a/targettest/apple2/gatsby.dhgr b/samples/apple2/gatsby.dhgr similarity index 100% rename from targettest/apple2/gatsby.dhgr rename to samples/apple2/gatsby.dhgr diff --git a/targettest/apple2/girl.dhgr b/samples/apple2/girl.dhgr similarity index 100% rename from targettest/apple2/girl.dhgr rename to samples/apple2/girl.dhgr diff --git a/targettest/apple2/hgrshow.c b/samples/apple2/hgrshow.c similarity index 100% rename from targettest/apple2/hgrshow.c rename to samples/apple2/hgrshow.c diff --git a/targettest/apple2/hgrtest.c b/samples/apple2/hgrtest.c similarity index 100% rename from targettest/apple2/hgrtest.c rename to samples/apple2/hgrtest.c diff --git a/targettest/apple2/macrometer.hgr b/samples/apple2/macrometer.hgr similarity index 100% rename from targettest/apple2/macrometer.hgr rename to samples/apple2/macrometer.hgr diff --git a/targettest/apple2/mariner.hgr b/samples/apple2/mariner.hgr similarity index 100% rename from targettest/apple2/mariner.hgr rename to samples/apple2/mariner.hgr diff --git a/targettest/apple2/monarch.dhgr b/samples/apple2/monarch.dhgr similarity index 100% rename from targettest/apple2/monarch.dhgr rename to samples/apple2/monarch.dhgr diff --git a/targettest/apple2/rose.hgr b/samples/apple2/rose.hgr similarity index 100% rename from targettest/apple2/rose.hgr rename to samples/apple2/rose.hgr diff --git a/targettest/apple2/superman.dhgr b/samples/apple2/superman.dhgr similarity index 100% rename from targettest/apple2/superman.dhgr rename to samples/apple2/superman.dhgr diff --git a/targettest/apple2/venice.dhgr b/samples/apple2/venice.dhgr similarity index 100% rename from targettest/apple2/venice.dhgr rename to samples/apple2/venice.dhgr diff --git a/targettest/apple2/werner.hgr b/samples/apple2/werner.hgr similarity index 100% rename from targettest/apple2/werner.hgr rename to samples/apple2/werner.hgr diff --git a/targettest/apple2/werner.s b/samples/apple2/werner.s similarity index 100% rename from targettest/apple2/werner.s rename to samples/apple2/werner.s diff --git a/targettest/apple2/winston.hgr b/samples/apple2/winston.hgr similarity index 100% rename from targettest/apple2/winston.hgr rename to samples/apple2/winston.hgr diff --git a/targettest/atari5200/Makefile b/samples/atari5200/Makefile similarity index 82% rename from targettest/atari5200/Makefile rename to samples/atari5200/Makefile index ab0c99f1c..2fbda11d9 100644 --- a/targettest/atari5200/Makefile +++ b/samples/atari5200/Makefile @@ -1,4 +1,8 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= atari5200 + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -31,9 +35,9 @@ EXELIST_atari5200 = \ hello ifneq ($(EXELIST_$(SYS)),) -testcode: $(EXELIST_$(SYS)) +samples: $(EXELIST_$(SYS)) else -testcode: notavailable +samples: notavailable endif # empty target used to skip systems that will not work with any program in this dir @@ -41,7 +45,7 @@ notavailable: ifeq ($(MAKELEVEL),0) @echo "info: atari 5200 tests not available for" $(SYS) else -# suppress the "nothing to be done for 'testcode' message +# suppress the "nothing to be done for 'samples' message @echo > $(NULLDEV) endif diff --git a/targettest/atari5200/hello.c b/samples/atari5200/hello.c similarity index 100% rename from targettest/atari5200/hello.c rename to samples/atari5200/hello.c diff --git a/samples/gamate/Makefile b/samples/gamate/Makefile new file mode 100644 index 000000000..6e0617163 --- /dev/null +++ b/samples/gamate/Makefile @@ -0,0 +1,57 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= gamate + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) +endif + +EXELIST_gamate = \ + nachtm.bin + +ifneq ($(EXELIST_$(SYS)),) +samples: $(EXELIST_$(SYS)) +else +samples: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: gamate tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'samples' message + @echo > $(NULLDEV) +endif + +nachtm.bin: nachtm.c + $(CL) -Os -l nachtm.lst -t gamate -o nachtm.bin nachtm.c + gamate-fixcart nachtm.bin + +clean: + @$(DEL) nachtm.bin nachtm.lst 2>$(NULLDEV) diff --git a/targettest/gamate/nachtm.c b/samples/gamate/nachtm.c similarity index 100% rename from targettest/gamate/nachtm.c rename to samples/gamate/nachtm.c diff --git a/samples/getsp.s b/samples/getsp.s new file mode 100644 index 000000000..9f169dc0b --- /dev/null +++ b/samples/getsp.s @@ -0,0 +1,12 @@ + + .export _getsp + .importzp sp + +.proc _getsp + + ldx sp+1 + lda sp + rts + +.endproc + diff --git a/samples/readme.txt b/samples/readme.txt index 11326146b..506cd5d43 100644 --- a/samples/readme.txt +++ b/samples/readme.txt @@ -1,6 +1,14 @@ This directory contains sample programs for the cc65 compiler. +The programs contained here are +- used as samples and referenced from within the documentation (this is their + main purpose) +- installed into the filesystem +- compiled (but NOT run) by the CI test + +----------------------------------------------------------------------------- + Below is a short description for each of the programs, together with a list of the supported platforms. @@ -105,6 +113,11 @@ Platforms: All systems with conio and clock support: Commander X16, Apple ][ (without timing due to missing clock support). +----------------------------------------------------------------------------- +Name: tinyshell +Description: Simple ("tiny") shell to test filename and directory functions. +Platforms: Runs on all platforms that have stdio support + ----------------------------------------------------------------------------- Name: tgidemo Description: Shows some of the graphics capabilities of the "Tiny Graphics @@ -125,6 +138,37 @@ Description: A "Hello world" type program. Platforms: Runs on only the Atari 2600 Video Console System. ----------------------------------------------------------------------------- +atari 5200: +----------- + +Name: hello +Description: A "Hello world" type program. +Platforms: Runs on only the Atari 5200 Video Console System. +----------------------------------------------------------------------------- + +apple2: +------- + +Name: hgrtest +Description: shows how to incorporate a hires screen right into the binary, + thus allowing to place content both below and above the hires + video ram without multiple files nor copying stuff around (plus + having a nice splash screen as bonus). It basically demos how to + make use of apple2-hgr.cfg. + +Name: hgrshow +Description: is a (single) hires program showing how to load (single) hires + screens from files without support from TGI. TGI could be used + to "paint" on the loaded screens. + +Name: dhgrshow +Description: is a double hires program showing how to load double hires + screens from files. TGI is used for most of the I/O address + manipulation, but (in contrast to hgrshow) is not actually + functional. + +----------------------------------------------------------------------------- + cbm: ---- @@ -147,6 +191,32 @@ Platforms: The program needs a VIC-II or a TED, so it runs on the following C64, C128, CBM510, Plus/4. ----------------------------------------------------------------------------- +gamate: +------- + +Name: nachtm +Description: Plays "Eine kleine Nachtmusik" by Wolfgang Amadeus Mozart. +----------------------------------------------------------------------------- + +sym1: +----- + +Name: symHello +Description: Hello World for Sym-1 + +Name: symTiny +Description: Hello World for Sym-1 (tiny version without printf) + +Name: symDisplay +Description: Sym-1 front panel display example + +Name: symIO +Description: Sym-1 digital I/O interface example + +Name: symNotepad +Description: Sym-1 Notepad + +----------------------------------------------------------------------------- supervision: ------------ diff --git a/targettest/sym1/Makefile b/samples/sym1/Makefile similarity index 88% rename from targettest/sym1/Makefile rename to samples/sym1/Makefile index c9f9eb099..14da90ad3 100644 --- a/targettest/sym1/Makefile +++ b/samples/sym1/Makefile @@ -1,3 +1,8 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= sym1 + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -30,9 +35,9 @@ EXELIST_sym1 = \ symHello.bin symTiny.bin symDisplay.bin symIO.bin symNotepad.bin ifneq ($(EXELIST_$(SYS)),) -testcode: $(EXELIST_$(SYS)) +samples: $(EXELIST_$(SYS)) else -testcode: notavailable +samples: notavailable endif # empty target used to skip systems that will not work with any program in this dir @@ -40,7 +45,7 @@ notavailable: ifeq ($(MAKELEVEL),0) @echo "info: sym1 tests not available for" $(SYS) else -# suppress the "nothing to be done for 'testcode' message +# suppress the "nothing to be done for 'samples' message @echo > $(NULLDEV) endif diff --git a/targettest/sym1/symDisplay.c b/samples/sym1/symDisplay.c similarity index 100% rename from targettest/sym1/symDisplay.c rename to samples/sym1/symDisplay.c diff --git a/targettest/sym1/symHello.c b/samples/sym1/symHello.c similarity index 100% rename from targettest/sym1/symHello.c rename to samples/sym1/symHello.c diff --git a/targettest/sym1/symIO.c b/samples/sym1/symIO.c similarity index 100% rename from targettest/sym1/symIO.c rename to samples/sym1/symIO.c diff --git a/targettest/sym1/symNotepad.c b/samples/sym1/symNotepad.c similarity index 100% rename from targettest/sym1/symNotepad.c rename to samples/sym1/symNotepad.c diff --git a/targettest/sym1/symTiny.c b/samples/sym1/symTiny.c similarity index 100% rename from targettest/sym1/symTiny.c rename to samples/sym1/symTiny.c diff --git a/targettest/tinyshell.c b/samples/tinyshell.c similarity index 100% rename from targettest/tinyshell.c rename to samples/tinyshell.c diff --git a/targettest/Makefile b/targettest/Makefile index 806eda2fd..145492803 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -174,7 +174,7 @@ endif # -------------------------------------------------------------------------- # Lists of subdirectories -DIRLIST = accelerator apple2 atari atari5200 cbm gamate pce sym1 +DIRLIST = accelerator atari cbm gamate pce # -------------------------------------------------------------------------- # Lists of executables @@ -211,7 +211,6 @@ EXELIST_c64 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: seek @@ -246,7 +245,6 @@ EXELIST_c128 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test @@ -278,7 +276,6 @@ EXELIST_c16 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: seek ser-test @@ -312,7 +309,6 @@ EXELIST_cbm510 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: joy-test mouse-test seek @@ -345,7 +341,6 @@ EXELIST_cbm610 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: clock-test em-test mouse-test seek ser-test @@ -376,7 +371,6 @@ EXELIST_pet = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: clock-test em-test mouse-test seek @@ -408,7 +402,6 @@ EXELIST_plus4 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: seek clock-test mouse-test ser-test @@ -440,7 +433,6 @@ EXELIST_vic20 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: cpeek-test, clock @@ -474,7 +466,6 @@ EXELIST_apple2 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test EXELIST_apple2enh = $(EXELIST_apple2) @@ -511,13 +502,12 @@ EXELIST_atari = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test EXELIST_atarixl = $(EXELIST_atari) # omitted: clock-test cpeek-test deb dir-test em-test exec-test1 exec-test2 -# joy-test mouse-test rename-test seek ser-test stroserror-test tinyshell +# joy-test mouse-test rename-test seek ser-test stroserror-test EXELIST_telestrat = \ minimal \ arg-test \ @@ -542,7 +532,7 @@ EXELIST_telestrat = \ # omitted: arg-test clock-test clock cpeek-test conio cprintf cursor deb dir-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test # mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test -# stroserror-test tinyshell uname-test +# stroserror-test uname-test EXELIST_sym1 = \ minimal \ div-test \ @@ -551,7 +541,7 @@ EXELIST_sym1 = \ strqtok-test # omitted: clock-test cpeek-test conio deb dir-test em-test exec-test1 exec-test2 -# fileio-test ft mouse-test posixio-test rename-test seek ser-test tinyshell +# fileio-test ft mouse-test posixio-test rename-test seek ser-test EXELIST_atmos = \ minimal \ arg-test \ @@ -574,7 +564,7 @@ EXELIST_atmos = \ # omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test # mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test -# strnlen stroserror-test strqtok-test tinyshell uname-test +# strnlen stroserror-test strqtok-test uname-test EXELIST_creativision = \ minimal \ cursor @@ -609,13 +599,12 @@ EXELIST_cx16 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: arg-test clock-test clock cpeek-test cprintf cursor deb dir-test div-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test # mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test -# strnlen stroserror-test strqtok-test tinyshell uname-test +# strnlen stroserror-test strqtok-test uname-test EXELIST_nes = \ minimal \ conio @@ -623,7 +612,7 @@ EXELIST_nes = \ # omitted: arg-test clock-test clock cpeek-test cprintf cursor deb dir-test div-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test # mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test -# strnlen stroserror-test strqtok-test tinyshell uname-test +# strnlen stroserror-test strqtok-test uname-test EXELIST_pce = \ minimal \ conio @@ -631,7 +620,7 @@ EXELIST_pce = \ # omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test # mouse-test posixio-test rename-test scanf-test seek ser-test strdup-test strnlen -# stroserror-test strqtok-test tinyshell uname-test +# stroserror-test strqtok-test uname-test EXELIST_osic1p = \ minimal \ cursor \ @@ -640,7 +629,7 @@ EXELIST_osic1p = \ # omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test # mouse-test posixio-test rename-test scanf-test seek ser-test strdup-test strnlen -# stroserror-test strqtok-test tinyshell uname-test +# stroserror-test strqtok-test uname-test EXELIST_geos-apple = \ minimal \ cursor \ @@ -649,7 +638,7 @@ EXELIST_geos-apple = \ # omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test # mouse-test posixio-test rename-test scanf-test seek ser-test strdup-test strnlen -# stroserror-test strqtok-test tinyshell uname-test +# stroserror-test strqtok-test uname-test EXELIST_geos-cbm = \ minimal \ @@ -658,7 +647,7 @@ EXELIST_geos-cbm = \ # omitted: clock clock-test conio cpeek-test cprintf cursor deb dir-test em-test # exec-test1 exec-test2 ft heaptest joy-test mouse-test mul-test rename-test seek -# ser-test strdup-test stroserror-test tinyshell uname-test +# ser-test strdup-test stroserror-test uname-test EXELIST_sim6502 = \ minimal \ arg-test \ @@ -734,9 +723,6 @@ mouse-test: mouse-test.o getsp.o ifneq ($(SYS),vic20) ft: ft.o getsp.o $(LD) $(LDFLAGS) -t $(SYS) -o $@ $^ $(SYS).lib - -tinyshell: tinyshell.o getsp.o - $(LD) $(LDFLAGS) -t $(SYS) -o $@ $^ $(SYS).lib endif # some programs need more memory on the vic20 @@ -744,9 +730,6 @@ endif ifeq ($(SYS),vic20) ft: ft.o getsp.o $(LD) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib - -tinyshell: tinyshell.o getsp.o - $(LD) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib endif # -------------------------------------------------------------------------- diff --git a/targettest/atari/Makefile b/targettest/atari/Makefile index 609d2c758..dd4f6078f 100644 --- a/targettest/atari/Makefile +++ b/targettest/atari/Makefile @@ -1,4 +1,8 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= atari + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) diff --git a/targettest/gamate/Makefile b/targettest/gamate/Makefile index 74a3d8c50..e2b060406 100644 --- a/targettest/gamate/Makefile +++ b/targettest/gamate/Makefile @@ -1,4 +1,8 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= gamate + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -51,9 +55,6 @@ lcdtest.bin: lcdtest.s $(CL) -l lcdtest.lst -t gamate -o lcdtest.bin lcdtest.s ctest.bin: ctest.c $(CL) -l ctest.lst -t gamate -o ctest.bin ctest.c -nachtm.bin: nachtm.c - $(CL) -Os -l nachtm.lst -t gamate -o nachtm.bin nachtm.c - gamate-fixcart nachtm.bin clean: @$(DEL) lcdtest.o audiotest.o ctest.o 2>$(NULLDEV) diff --git a/targettest/pce/Makefile b/targettest/pce/Makefile index 598c38575..f757c3062 100644 --- a/targettest/pce/Makefile +++ b/targettest/pce/Makefile @@ -1,4 +1,8 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= pce + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) diff --git a/targettest/readme.txt b/targettest/readme.txt new file mode 100644 index 000000000..355812776 --- /dev/null +++ b/targettest/readme.txt @@ -0,0 +1,9 @@ + +This directory contains test programs for the cc65 compiler. + +The programs contained here are +- NOT to be referenced in the documentation +- compiled (but NOT run) by the CI test (this is their main purpose) +- some programs can be used interactively to check certain library features + +Sample programs ment for endusers should be placed in the samples directory. From afe9d6a2ebafb4a74f5c8be9926aa52b8cb147c2 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:28:11 +0100 Subject: [PATCH 1062/2710] also compile the programs in the util directory by default, not only do we want to test they can be compiled, but also samples may use/require them. we might want to install them too, perhaps --- Makefile | 6 +++++- util/Makefile | 20 ++++++++++++++++++++ util/atari/Makefile | 12 ++++++++++++ util/gamate/Makefile | 12 ++++++++++++ util/zlib/Makefile | 17 +++++++++++++++++ 5 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 util/Makefile create mode 100644 util/atari/Makefile create mode 100644 util/gamate/Makefile create mode 100644 util/zlib/Makefile diff --git a/Makefile b/Makefile index 3331f6fb9..6552c60ec 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples test +.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples test util .SUFFIXES: @@ -7,6 +7,7 @@ all mostlyclean clean install zip: @$(MAKE) -C libsrc --no-print-directory $@ @$(MAKE) -C doc --no-print-directory $@ @$(MAKE) -C samples --no-print-directory $@ + @$(MAKE) -C util --no-print-directory $@ avail unavail bin: @$(MAKE) -C src --no-print-directory $@ @@ -23,6 +24,9 @@ samples: test: @$(MAKE) -C test --no-print-directory $@ +util: + @$(MAKE) -C util --no-print-directory $@ + %65: @$(MAKE) -C src --no-print-directory $@ diff --git a/util/Makefile b/util/Makefile new file mode 100644 index 000000000..52cd10435 --- /dev/null +++ b/util/Makefile @@ -0,0 +1,20 @@ + +.PHONY: atari gamate zlib + +all: atari gamate zlib + +atari: + @$(MAKE) -C atari --no-print-directory $@ +gamate: + @$(MAKE) -C gamate --no-print-directory $@ +zlib: + @$(MAKE) -C zlib --no-print-directory $@ + +mostlyclean clean: + @$(MAKE) -C atari --no-print-directory $@ + @$(MAKE) -C gamate --no-print-directory $@ + @$(MAKE) -C zlib --no-print-directory $@ + +install zip: + + diff --git a/util/atari/Makefile b/util/atari/Makefile new file mode 100644 index 000000000..28efeafa1 --- /dev/null +++ b/util/atari/Makefile @@ -0,0 +1,12 @@ + +.PHONY: mostlyclean clean + +atari: ataricvt + +ataricvt: ataricvt.c + $(CC) $(CFLAGS) -o ataricvt ataricvt.c + +mostlyclean clean: + $(RM) ataricvt + +install zip: diff --git a/util/gamate/Makefile b/util/gamate/Makefile new file mode 100644 index 000000000..a6281de21 --- /dev/null +++ b/util/gamate/Makefile @@ -0,0 +1,12 @@ + +.PHONY: mostlyclean clean + +gamate: gamate-fixcart + +gamate-fixcart: gamate-fixcart.c + $(CC) $(CFLAGS) -o gamate-fixcart gamate-fixcart.c + +mostlyclean clean: + $(RM) gamate-fixcart + +install zip: diff --git a/util/zlib/Makefile b/util/zlib/Makefile new file mode 100644 index 000000000..75c67fb26 --- /dev/null +++ b/util/zlib/Makefile @@ -0,0 +1,17 @@ + +.PHONY: mostlyclean clean + +zlib: warning +#zlib: deflater + +warning: + @echo "deflater needs zlib installed, use 'make deflater' to build" + +deflater: deflater.c + $(CC) $(CFLAGS) -o deflater deflater.c -lz + +mostlyclean clean: + $(RM) deflater + +install zip: + From d23c9b6aa553d074c40cd5edf8efb53b3316f213 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:34:22 +0100 Subject: [PATCH 1063/2710] use gamate-fixcart from util dir --- samples/gamate/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/gamate/Makefile b/samples/gamate/Makefile index 6e0617163..cfb8505cc 100644 --- a/samples/gamate/Makefile +++ b/samples/gamate/Makefile @@ -51,7 +51,7 @@ endif nachtm.bin: nachtm.c $(CL) -Os -l nachtm.lst -t gamate -o nachtm.bin nachtm.c - gamate-fixcart nachtm.bin + ../../util/gamate/gamate-fixcart nachtm.bin clean: @$(DEL) nachtm.bin nachtm.lst 2>$(NULLDEV) From b3217ccb032045fe4a6f0e1460bf9d3b6a845400 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:44:32 +0100 Subject: [PATCH 1064/2710] build util dir when testing --- .github/workflows/build-on-pull-request.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 7f09ec6af..307cbd048 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -23,7 +23,9 @@ jobs: - name: Build the tools. shell: bash - run: make -j2 bin USER_CFLAGS=-Werror + run: | + make -j2 bin USER_CFLAGS=-Werror + make -j2 util - name: Build the platform libraries. shell: bash run: make -j2 lib QUIET=1 From 179f2d05aa4d106a51fa4b88746a133e0236f6eb Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:44:46 +0100 Subject: [PATCH 1065/2710] utils before samples --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 6552c60ec..540c214fc 100644 --- a/Makefile +++ b/Makefile @@ -6,8 +6,8 @@ all mostlyclean clean install zip: @$(MAKE) -C src --no-print-directory $@ @$(MAKE) -C libsrc --no-print-directory $@ @$(MAKE) -C doc --no-print-directory $@ - @$(MAKE) -C samples --no-print-directory $@ @$(MAKE) -C util --no-print-directory $@ + @$(MAKE) -C samples --no-print-directory $@ avail unavail bin: @$(MAKE) -C src --no-print-directory $@ From 2ea9cf0449287d2d867010834af9715ee93cac3b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:44:54 +0100 Subject: [PATCH 1066/2710] cleanup --- targettest/Makefile | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/targettest/Makefile b/targettest/Makefile index 806eda2fd..e430fb356 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -673,6 +673,11 @@ EXELIST_sim6502 = \ EXELIST_sim65c02 = $(EXELIST_sim6502) + +# omitted: arg-test clock clock-test conio cpeek-test cprintf cursor deb dir-test +# div-test em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest +# joy-test moddiv-test mouse-test mul-test posixio-test rename-test scanf-test +# ser-test seek strdup-test strnlen stroserror-test strqtok-test tinyshell uname-test EXELIST_atari2600 = \ minimal @@ -682,6 +687,9 @@ EXELIST_atari5200 = \ EXELIST_gamate = \ minimal +EXELIST_lynx = \ + minimal + EXELIST_supervision = \ minimal @@ -693,9 +701,6 @@ EXELIST_bbc = \ EXELIST_lunix = \ notavailable -EXELIST_lynx = \ - minimal - # Unlisted targets will try to build everything. # That lets us learn what they cannot build, and what settings # we need to use for programs that can be built and run. From 096c28bb522334eaa3e9ea9f51777a4abf6679f2 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:47:20 +0100 Subject: [PATCH 1067/2710] remove programs in util dir before making a snapshot. we might later decide to leave them there anyway. --- .github/workflows/snapshot-on-push-master.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 110edbbf0..c6a6eda8e 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -47,7 +47,9 @@ jobs: - name: Build the tools. shell: bash - run: make -j2 bin USER_CFLAGS=-Werror + run: | + make -j2 bin USER_CFLAGS=-Werror + make -j2 util - name: Build the platform libraries. shell: bash run: make -j2 lib QUIET=1 @@ -60,6 +62,9 @@ jobs: - name: Remove the output from the samples tests. shell: bash run: make -C samples clean + - name: Remove programs in util directory + shell: bash + run: make -j2 util clean - name: Build the document files. shell: bash run: make -j2 doc From 766e0e2144d0c2b3fba3875f5b6f5204f73ee0d6 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:51:48 +0100 Subject: [PATCH 1068/2710] fix --- util/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/Makefile b/util/Makefile index 52cd10435..14a006379 100644 --- a/util/Makefile +++ b/util/Makefile @@ -1,7 +1,7 @@ .PHONY: atari gamate zlib -all: atari gamate zlib +util: atari gamate zlib atari: @$(MAKE) -C atari --no-print-directory $@ From e0745204b6943d63dcac22ba62ea971cb6c4743b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:56:33 +0100 Subject: [PATCH 1069/2710] fix again. sigh --- util/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/util/Makefile b/util/Makefile index 14a006379..6d960abf6 100644 --- a/util/Makefile +++ b/util/Makefile @@ -3,6 +3,8 @@ util: atari gamate zlib +all: util + atari: @$(MAKE) -C atari --no-print-directory $@ gamate: From 0436c6e314a64651a2914c787b74204436dfa193 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 18:09:32 +0100 Subject: [PATCH 1070/2710] fix this too --- .github/workflows/snapshot-on-push-master.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index c6a6eda8e..442adc160 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -64,7 +64,7 @@ jobs: run: make -C samples clean - name: Remove programs in util directory shell: bash - run: make -j2 util clean + run: make -C util clean - name: Build the document files. shell: bash run: make -j2 doc From e7469212d7e48896abb7998f07fe19eb3ef46b1d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 6 Feb 2022 16:49:01 +0100 Subject: [PATCH 1071/2710] try publishing on sf after snapshot --- .github/workflows/snapshot-on-push-master.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 442adc160..6bb1d4b5d 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -92,5 +92,15 @@ jobs: name: cc65-snapshot-win64.zip path: cc65-win64.zip + - name: Upload snapshot to sourceforge + uses: nogsantos/scp-deploy@master + with: + src: cc65-win32.zip + host: ${{ secrets.SSH_HOST }} + remote: ${{ secrets.SSH_DIR }} + port: ${{ secrets.SSH_PORT }} + user: ${{ secrets.SSH_USER }} + key: ${{ secrets.SSH_KEY }} + # TODO: Update docs at https://github.com/cc65/doc # TODO: Publish snapshot zip at https://github.com/cc65/cc65.github.io From ddfbe932e3088f14d81b87c29d8b9c7c4f485549 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 6 Feb 2022 17:29:14 +0100 Subject: [PATCH 1072/2710] test upload again --- .github/workflows/snapshot-on-push-master.yml | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 6bb1d4b5d..957caba87 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -53,9 +53,9 @@ jobs: - name: Build the platform libraries. shell: bash run: make -j2 lib QUIET=1 - - name: Run the regression tests. - shell: bash - run: make test QUIET=1 +# - name: Run the regression tests. +# shell: bash +# run: make test QUIET=1 - name: Test that the samples can be built. shell: bash run: make -j2 samples @@ -68,34 +68,34 @@ jobs: - name: Build the document files. shell: bash run: make -j2 doc - - name: Build and package 64-bit Windows versions of the tools. - run: | - make -C src clean - make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32- - make zip - mv cc65.zip cc65-win64.zip +# - name: Build and package 64-bit Windows versions of the tools. +# run: | +# make -C src clean +# make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32- +# make zip +# mv cc65.zip cc65-snapshot-win64.zip - name: Build and package 32-bit Windows versions of the tools. run: | make -C src clean make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- make zip - mv cc65.zip cc65-win32.zip + mv cc65.zip cc65-snapshot-win32.zip - name: Upload a 32-bit Snapshot Zip uses: actions/upload-artifact@v2 with: name: cc65-snapshot-win32.zip - path: cc65-win32.zip - - name: Upload a 64-bit Snapshot Zip - uses: actions/upload-artifact@v2 - with: - name: cc65-snapshot-win64.zip - path: cc65-win64.zip + path: cc65-snapshot-win32.zip +# - name: Upload a 64-bit Snapshot Zip +# uses: actions/upload-artifact@v2 +# with: +# name: cc65-snapshot-win64.zip +# path: cc65-snapshot-win64.zip - name: Upload snapshot to sourceforge uses: nogsantos/scp-deploy@master with: - src: cc65-win32.zip + src: cc65-snapshot-win32.zip host: ${{ secrets.SSH_HOST }} remote: ${{ secrets.SSH_DIR }} port: ${{ secrets.SSH_PORT }} From dfe478b15423acb69c9ddac2a817da9ccdd48dba Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 6 Feb 2022 18:20:09 +0100 Subject: [PATCH 1073/2710] upload snapshot to sourceforge --- .github/workflows/snapshot-on-push-master.yml | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 442adc160..83f311568 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -73,24 +73,35 @@ jobs: make -C src clean make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32- make zip - mv cc65.zip cc65-win64.zip + mv cc65.zip cc65-snapshot-win64.zip - name: Build and package 32-bit Windows versions of the tools. run: | make -C src clean make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- make zip - mv cc65.zip cc65-win32.zip + mv cc65.zip cc65-snapshot-win32.zip - name: Upload a 32-bit Snapshot Zip uses: actions/upload-artifact@v2 with: name: cc65-snapshot-win32.zip - path: cc65-win32.zip + path: cc65-snapshot-win32.zip - name: Upload a 64-bit Snapshot Zip uses: actions/upload-artifact@v2 with: name: cc65-snapshot-win64.zip - path: cc65-win64.zip + path: cc65-snapshot-win64.zip + # enter secrets under "repository secrets" + - name: Upload snapshot to sourceforge + uses: nogsantos/scp-deploy@master + with: + src: cc65-snapshot-win32.zip + host: ${{ secrets.SSH_HOST }} + remote: ${{ secrets.SSH_DIR }} + port: ${{ secrets.SSH_PORT }} + user: ${{ secrets.SSH_USER }} + key: ${{ secrets.SSH_KEY }} + # TODO: Update docs at https://github.com/cc65/doc # TODO: Publish snapshot zip at https://github.com/cc65/cc65.github.io From e488d7b2a64be111b832786550e74594cee0ada1 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Feb 2022 19:14:02 -0600 Subject: [PATCH 1074/2710] Documentation updates for Sym-1. --- doc/funcref.sgml | 100 +++++++++++++++++++++++++++++++++++++++++++++++ doc/sym1.sgml | 4 +- 2 files changed, 102 insertions(+), 2 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 4dff14dd3..4571d34a3 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -754,6 +754,16 @@ communication, see also <tt>testcode/lib/ser-test.c</tt>. </itemize> +<sect1><tt/sym1.h/<label id="sym1.h"><p> + +<itemize> +<item><ref id="beep" name="beep"> +<item><ref id="fdisp" name="fdisp"> +<item><ref id="loadt" name="loadt"> +<item><ref id="dumpt" name="dumpt"> +</itemize> + + <sect1><tt/telestrat.h/<label id="telestrat.h"><p> <itemize> @@ -1669,6 +1679,27 @@ used in presence of a prototype. </quote> +<sect1>beep<label id="beep"><p> + +<quote> +<descrip> +<tag/Function/Beep sound. +<tag/Header/<tt/<ref id="sym1.h" name="sym1.h">/ +<tag/Declaration/<tt/void beep(void);/ +<tag/Description/<tt/beep/ makes a brief tone. +<tag/Notes/<itemize> +<item>The function is specific to the Sym-1. +</itemize> +<tag/Availability/cc65 +<tag/See also/ +<ref id="fdisp" name="fdisp">, +<ref id="loadt" name="loadt">, +<ref id="dumpt" name="dumpt">, +<tag/Example/None. +</descrip> +</quote> + + <sect1>bgcolor<label id="bgcolor"><p> <quote> @@ -3363,6 +3394,29 @@ int main(void) </quote> +<sect1>dumpt<label id="dumpt"><p> + +<quote> +<descrip> +<tag/Function/Dump memory to tape. +<tag/Header/<tt/<ref id="sym1.h" name="sym1.h">/ +<tag/Declaration/<tt/int __fastcall__ dumpt (unsigned char id, const void* start, const void* end);/ +<tag/Description/<tt/dumpt/ saves memory onto data tape. +<tag/Notes/<itemize> +<item>The function is specific to the Sym-1. +<item>The function is only available as fastcall function, so it may only +be used in presence of a prototype. +</itemize> +<tag/Availability/cc65 +<tag/See also/ +<ref id="fdisp" name="beep">, +<ref id="loadt" name="fdisp">, +<ref id="dumpt" name="loadt">, +<tag/Example/None. +</descrip> +</quote> + + <sect1>em_commit<label id="em_commit"><p> <quote> @@ -3721,6 +3775,28 @@ switching the CPU into double clock mode. </quote> +<sect1>fdisp<label id="fdisp"><p> + +<quote> +<descrip> +<tag/Function/Flash front-panel display. +<tag/Header/<tt/<ref id="sym1.h" name="sym1.h">/ +<tag/Declaration/<tt/void fdisp(void);/ +<tag/Description/<tt/fdisp/ flashes front-panel display. +<tag/Notes/<itemize> +<item>The function is specific to the Sym-1. +<item>The front-panel display buffer mut be loaded prior to calling fdisp. See the DISPLAY struct definition in sym1.h. +</itemize> +<tag/Availability/cc65 +<tag/See also/ +<ref id="fdisp" name="beep">, +<ref id="loadt" name="loadt">, +<ref id="dumpt" name="dumpt">, +<tag/Example/None. +</descrip> +</quote> + + <sect1>feof<label id="feof"><p> <quote> @@ -4961,6 +5037,30 @@ used in presence of a prototype. </quote> +<sect1>loadt<label id="loadt"><p> + +<quote> +<descrip> +<tag/Function/Load memory from tape. +<tag/Header/<tt/<ref id="sym1.h" name="sym1.h">/ +<tag/Declaration/<tt/int __fastcall__ loadt (unsigned char id);/ +<tag/Description/<tt/loadt/ loads memory from data tape. +<tag/Notes/<itemize> +<item>The function is specific to the Sym-1. +<item>The return value is status. Non-zero status indicates an error. +<item>The function is only available as fastcall function, so it may only +be used in presence of a prototype. +</itemize> +<tag/Availability/cc65 +<tag/See also/ +<ref id="fdisp" name="beep">, +<ref id="loadt" name="fdisp">, +<ref id="dumpt" name="dumpt">, +<tag/Example/None. +</descrip> +</quote> + + <sect1>ltoa<label id="ltoa"><p> <quote> diff --git a/doc/sym1.sgml b/doc/sym1.sgml index 60eb1c020..5961984bd 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -38,7 +38,7 @@ Special locations: Conio support is not currently available for the Sym-1. But stdio console functions are available. <tag/Stack/ - The C runtime stack is located at $0FFF on 4KB Syms, or at $7FFFfor 32KB systems. The stack always grows downwards. + The C runtime stack is located at $0FFF on 4KB Syms, or at $7FFF for 32KB systems. The stack always grows downwards. <tag/Heap/ The C heap is located at the end of the program and grows towards the C runtime stack. @@ -102,7 +102,7 @@ As stated earlier, there are config files for 4KB and 32KB systems. If you have <sect3>Sample programs<p> -All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. These sample programs can be found in the targettest/sym1 directory: +All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. These sample programs can be found in the samples/sym1 directory: <itemize> <item>symHello prints "Hello World!" and then inputs characters, which are echoed on the screen. It also makes a "beep" sound.</item> From 84d639e40c6c84866d1fde9e79b7ac50d4a9377c Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Feb 2022 19:46:16 -0600 Subject: [PATCH 1075/2710] Typo correction. --- doc/funcref.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 4571d34a3..b66344a01 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -3785,7 +3785,7 @@ switching the CPU into double clock mode. <tag/Description/<tt/fdisp/ flashes front-panel display. <tag/Notes/<itemize> <item>The function is specific to the Sym-1. -<item>The front-panel display buffer mut be loaded prior to calling fdisp. See the DISPLAY struct definition in sym1.h. +<item>The front-panel display buffer must be loaded prior to calling fdisp. See the DISPLAY struct definition in sym1.h. </itemize> <tag/Availability/cc65 <tag/See also/ From 470b648b9fb64360c10bf040d2fff40c17e0ab2c Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Feb 2022 19:51:03 -0600 Subject: [PATCH 1076/2710] Added note about return value being function status. --- doc/funcref.sgml | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index b66344a01..86c286909 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -3404,6 +3404,7 @@ int main(void) <tag/Description/<tt/dumpt/ saves memory onto data tape. <tag/Notes/<itemize> <item>The function is specific to the Sym-1. +<item>The return value is status. Non-zero status indicates an error. <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> From 9cb005c98f766a51285a3ecba3ca0a9197660944 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Tue, 8 Feb 2022 14:22:09 -0600 Subject: [PATCH 1077/2710] Correction of link typos --- doc/funcref.sgml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 86c286909..1a9dcaa77 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -3410,9 +3410,9 @@ be used in presence of a prototype. </itemize> <tag/Availability/cc65 <tag/See also/ -<ref id="fdisp" name="beep">, -<ref id="loadt" name="fdisp">, -<ref id="dumpt" name="loadt">, +<ref id="beep" name="beep">, +<ref id="fdisp" name="fdisp">, +<ref id="loadt" name="loadt">, <tag/Example/None. </descrip> </quote> @@ -3790,7 +3790,7 @@ switching the CPU into double clock mode. </itemize> <tag/Availability/cc65 <tag/See also/ -<ref id="fdisp" name="beep">, +<ref id="beep" name="beep">, <ref id="loadt" name="loadt">, <ref id="dumpt" name="dumpt">, <tag/Example/None. @@ -5054,8 +5054,8 @@ be used in presence of a prototype. </itemize> <tag/Availability/cc65 <tag/See also/ -<ref id="fdisp" name="beep">, -<ref id="loadt" name="fdisp">, +<ref id="beep" name="beep">, +<ref id="fdisp" name="fdisp">, <ref id="dumpt" name="dumpt">, <tag/Example/None. </descrip> From 9dd13d7047755fc1b11de4ca5c36f9cc2eba820b Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 6 Feb 2022 04:21:53 -0500 Subject: [PATCH 1078/2710] Moved the platform-test enumerations from Github Actions over to makefiles. Now, we can run those tests locally, as well as on Github. --- .github/workflows/build-on-pull-request.yml | 130 +----------------- .github/workflows/snapshot-on-push-master.yml | 3 +- samples/Makefile | 52 ++++++- targettest/Makefile | 58 +++++++- 4 files changed, 106 insertions(+), 137 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 307cbd048..2203e43dd 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -33,135 +33,9 @@ jobs: shell: bash run: make test QUIET=1 - name: Test that the samples can be built. - shell: bash - run: | - make SYS=apple2 -C samples - make SYS=apple2 -C samples clean - make SYS=apple2enh -C samples - make SYS=apple2enh -C samples clean - make SYS=atari -C samples - make SYS=atari -C samples clean - make SYS=atarixl -C samples - make SYS=atarixl -C samples clean - make SYS=atari2600 -C samples - make SYS=atari2600 -C samples clean - make SYS=atari5200 -C samples - make SYS=atari5200 -C samples clean - make SYS=atmos -C samples - make SYS=atmos -C samples clean - make SYS=bbc -C samples - make SYS=bbc -C samples clean - make SYS=c128 -C samples - make SYS=c128 -C samples clean - make SYS=c16 -C samples - make SYS=c16 -C samples clean - make SYS=c64 -C samples - make SYS=c64 -C samples clean - make SYS=cbm510 -C samples - make SYS=cbm510 -C samples clean - make SYS=cbm610 -C samples - make SYS=cbm610 -C samples clean - make SYS=creativision -C samples - make SYS=creativision -C samples clean - make SYS=cx16 -C samples - make SYS=cx16 -C samples clean - make SYS=gamate -C samples - make SYS=gamate -C samples clean - make SYS=geos-apple -C samples - make SYS=geos-apple -C samples clean - make SYS=geos-cbm -C samples - make SYS=geos-cbm -C samples clean - make SYS=lunix -C samples - make SYS=lunix -C samples clean - make SYS=lynx -C samples - make SYS=lynx -C samples clean - make SYS=nes -C samples - make SYS=nes -C samples clean - make SYS=osic1p -C samples - make SYS=osic1p -C samples clean - make SYS=pce -C samples - make SYS=pce -C samples clean - make SYS=pet -C samples - make SYS=pet -C samples clean - make SYS=plus4 -C samples - make SYS=plus4 -C samples clean - make SYS=sim6502 -C samples - make SYS=sim6502 -C samples clean - make SYS=sim65c02 -C samples - make SYS=sim65c02 -C samples clean - make SYS=supervision -C samples - make SYS=supervision -C samples clean - make SYS=sym1 -C samples - make SYS=sym1 -C samples clean - make SYS=telestrat -C samples - make SYS=telestrat -C samples clean - make SYS=vic20 -C samples - make SYS=vic20 -C samples clean + run: make -C samples platforms - name: Test that the targettest programs can be built. - shell: bash - run: | - make SYS=apple2 -C targettest - make SYS=apple2 -C targettest clean - make SYS=apple2enh -C targettest - make SYS=apple2enh -C targettest clean - make SYS=atari -C targettest - make SYS=atari -C targettest clean - make SYS=atarixl -C targettest - make SYS=atarixl -C targettest clean - make SYS=atari2600 -C targettest - make SYS=atari2600 -C targettest clean - make SYS=atari5200 -C targettest - make SYS=atari5200 -C targettest clean - make SYS=atmos -C targettest - make SYS=atmos -C targettest clean - make SYS=bbc -C targettest - make SYS=bbc -C targettest clean - make SYS=c128 -C targettest - make SYS=c128 -C targettest clean - make SYS=c16 -C targettest - make SYS=c16 -C targettest clean - make SYS=c64 -C targettest - make SYS=c64 -C targettest clean - make SYS=cbm510 -C targettest - make SYS=cbm510 -C targettest clean - make SYS=cbm610 -C targettest - make SYS=cbm610 -C targettest clean - make SYS=creativision -C targettest - make SYS=creativision -C targettest clean - make SYS=cx16 -C targettest - make SYS=cx16 -C targettest clean - make SYS=gamate -C targettest - make SYS=gamate -C targettest clean - make SYS=geos-apple -C targettest - make SYS=geos-apple -C targettest clean - make SYS=geos-cbm -C targettest - make SYS=geos-cbm -C targettest clean - make SYS=lunix -C targettest - make SYS=lunix -C targettest clean - make SYS=lynx -C targettest - make SYS=lynx -C targettest clean - make SYS=nes -C targettest - make SYS=nes -C targettest clean - make SYS=osic1p -C targettest - make SYS=osic1p -C targettest clean - make SYS=pce -C targettest - make SYS=pce -C targettest clean - make SYS=pet -C targettest - make SYS=pet -C targettest clean - make SYS=plus4 -C targettest - make SYS=plus4 -C targettest clean - make SYS=sim6502 -C targettest - make SYS=sim6502 -C targettest clean - make SYS=sim65c02 -C targettest - make SYS=sim65c02 -C targettest clean - make SYS=supervision -C targettest - make SYS=supervision -C targettest clean - make SYS=sym1 -C targettest - make SYS=sym1 -C targettest clean - make SYS=telestrat -C targettest - make SYS=telestrat -C targettest clean - make SYS=vic20 -C targettest - make SYS=vic20 -C targettest clean + run: make -C targettest platforms - name: Build the document files. shell: bash run: make -j2 doc diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 83f311568..914094567 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -29,9 +29,8 @@ jobs: run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release build_linux: - name: Build, Test and Snaphot (Linux) + name: Build, Test, and Snapshot (Linux) runs-on: ubuntu-latest - needs: build_windows steps: - name: Install Dependencies diff --git a/samples/Makefile b/samples/Makefile index 5b08d4bb0..18a663c1b 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -129,7 +129,7 @@ LDFLAGS_tgidemo_atarixl = --start-addr 0x4000 # -------------------------------------------------------------------------- # Generic rules -.PHONY: all mostlyclean clean install zip samples disk +.PHONY: samples all mostlyclean clean install zip disk platforms %: %.c %: %.s @@ -340,7 +340,7 @@ endif define SUBDIR_recipe -@$(MAKE) -C $(dir) --no-print-directory $@ +@+$(MAKE) -C $(dir) --no-print-directory $@ endef # SUBDIR_recipe @@ -360,6 +360,54 @@ disk: $(DISK_$(SYS)) all: +# -------------------------------------------------------------------------- +# List of every supported platform +TARGETS := \ + apple2 \ + apple2enh \ + atari \ + atarixl \ + atari2600 \ + atari5200 \ + atmos \ + bbc \ + c128 \ + c16 \ + c64 \ + cbm510 \ + cbm610 \ + creativision \ + cx16 \ + gamate \ + geos-apple \ + geos-cbm \ + lunix \ + lynx \ + nes \ + osic1p \ + pce \ + pet \ + plus4 \ + sim6502 \ + sim65c02 \ + supervision \ + sym1 \ + telestrat \ + vic20 + +# -------------------------------------------------------------------------- +# Rule to make the binaries for every platform + +define TARGET_recipe + +@$(MAKE) -j2 SYS:=$(T) +@$(MAKE) --no-print-directory clean SYS:=$(T) + +endef # TARGET_recipe + +platforms: + $(foreach T,$(TARGETS),$(TARGET_recipe)) + # -------------------------------------------------------------------------- # Overlay rules. Overlays need special ld65 configuration files. Also, the # overlay file-names are shortenned to fit the Atari's 8.3-character limit. diff --git a/targettest/Makefile b/targettest/Makefile index 55b4660fc..3e8698c34 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -108,7 +108,7 @@ DISK_atarixl = testcode.atr # -------------------------------------------------------------------------- # Generic rules -.PHONY: all mostlyclean clean zip testcode disk +.PHONY: testcode all mostlyclean clean zip disk platforms %: %.c %: %.s @@ -404,7 +404,7 @@ EXELIST_plus4 = \ strqtok-test \ uname-test -# omitted: seek clock-test mouse-test ser-test +# omitted: seek clock-test mouse-test ser-test EXELIST_vic20 = \ minimal \ arg-test \ @@ -616,7 +616,7 @@ EXELIST_nes = \ EXELIST_pce = \ minimal \ conio - + # omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test # mouse-test posixio-test rename-test scanf-test seek ser-test strdup-test strnlen @@ -659,7 +659,7 @@ EXELIST_sim6502 = \ scanf-test \ strnlen \ strqtok-test - + EXELIST_sim65c02 = $(EXELIST_sim6502) @@ -699,7 +699,7 @@ endif define SUBDIR_recipe -@$(MAKE) -C $(dir) --no-print-directory $@ +@+$(MAKE) -C $(dir) --no-print-directory $@ endef # SUBDIR_recipe @@ -719,6 +719,54 @@ disk: $(DISK_$(SYS)) all: +# -------------------------------------------------------------------------- +# List of every supported platform +TARGETS := \ + apple2 \ + apple2enh \ + atari \ + atarixl \ + atari2600 \ + atari5200 \ + atmos \ + bbc \ + c128 \ + c16 \ + c64 \ + cbm510 \ + cbm610 \ + creativision \ + cx16 \ + gamate \ + geos-apple \ + geos-cbm \ + lunix \ + lynx \ + nes \ + osic1p \ + pce \ + pet \ + plus4 \ + sim6502 \ + sim65c02 \ + supervision \ + sym1 \ + telestrat \ + vic20 + +# -------------------------------------------------------------------------- +# Rule to make the binaries for every platform + +define TARGET_recipe + +@$(MAKE) -j2 SYS:=$(T) +@$(MAKE) --no-print-directory clean SYS:=$(T) + +endef # TARGET_recipe + +platforms: + $(foreach T,$(TARGETS),$(TARGET_recipe)) + # -------------------------------------------------------------------------- # some programs link against getsp.o From 5747fa4df3f9b4d140f8d511d960d086098fa606 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 7 Feb 2022 14:09:27 -0500 Subject: [PATCH 1079/2710] Added '+' to another SUBDIRS_recipe. --- samples/geos/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/geos/Makefile b/samples/geos/Makefile index e792c52f1..04de0aaa3 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -50,7 +50,7 @@ DIRLIST = grc define SUBDIR_recipe -@$(MAKE) SYS=$(SYS) -C $(dir) --no-print-directory $@ +@+$(MAKE) SYS=$(SYS) -C $(dir) --no-print-directory $@ endef # SUBDIR_recipe From 1f51a9f5875e803072da51b805cb740284ac16d4 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 7 Feb 2022 14:14:30 -0500 Subject: [PATCH 1080/2710] Removed geos_apple and geos_cbm from the lists of targets. They need resource files to go with the program source files. The top-level samples and targettest programs don't have those resources. --- samples/Makefile | 2 -- targettest/Makefile | 2 -- 2 files changed, 4 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index 18a663c1b..5c44d1947 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -379,8 +379,6 @@ TARGETS := \ creativision \ cx16 \ gamate \ - geos-apple \ - geos-cbm \ lunix \ lynx \ nes \ diff --git a/targettest/Makefile b/targettest/Makefile index 3e8698c34..806f6b445 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -738,8 +738,6 @@ TARGETS := \ creativision \ cx16 \ gamate \ - geos-apple \ - geos-cbm \ lunix \ lynx \ nes \ From 118e73ddf9a8c37366efb4e9005ee217af57085f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 11 Feb 2022 16:38:40 +0100 Subject: [PATCH 1081/2710] build utilities in a seperate step --- .github/workflows/build-on-pull-request.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 2203e43dd..6ab8543de 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -23,9 +23,10 @@ jobs: - name: Build the tools. shell: bash - run: | - make -j2 bin USER_CFLAGS=-Werror - make -j2 util + run: make -j2 bin USER_CFLAGS=-Werror + - name: Build the utilities. + shell: bash + run: make -j2 util - name: Build the platform libraries. shell: bash run: make -j2 lib QUIET=1 From 30b00ed0766d520e45513affbbc406425a8ff03a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 11 Feb 2022 16:53:34 +0100 Subject: [PATCH 1082/2710] attempt to prevent utils being compiled with cc65 --- util/atari/Makefile | 8 ++++++++ util/gamate/Makefile | 8 ++++++++ util/zlib/Makefile | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/util/atari/Makefile b/util/atari/Makefile index 28efeafa1..db4226f69 100644 --- a/util/atari/Makefile +++ b/util/atari/Makefile @@ -1,4 +1,12 @@ +CC = $(CROSS_COMPILE)gcc + +ifdef CROSS_COMPILE + $(info CC: $(CC)) +endif + +CFLAGS += -O3 -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) + .PHONY: mostlyclean clean atari: ataricvt diff --git a/util/gamate/Makefile b/util/gamate/Makefile index a6281de21..db2a1f059 100644 --- a/util/gamate/Makefile +++ b/util/gamate/Makefile @@ -1,4 +1,12 @@ +CC = $(CROSS_COMPILE)gcc + +ifdef CROSS_COMPILE + $(info CC: $(CC)) +endif + +CFLAGS += -O3 -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) + .PHONY: mostlyclean clean gamate: gamate-fixcart diff --git a/util/zlib/Makefile b/util/zlib/Makefile index 75c67fb26..3770e1f3c 100644 --- a/util/zlib/Makefile +++ b/util/zlib/Makefile @@ -1,4 +1,12 @@ +CC = $(CROSS_COMPILE)gcc + +ifdef CROSS_COMPILE + $(info CC: $(CC)) +endif + +CFLAGS += -O3 -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) + .PHONY: mostlyclean clean zlib: warning From 86b6514c16b8965fedb3f869ef93bd344682b348 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 12 Feb 2022 04:48:47 -0500 Subject: [PATCH 1083/2710] Added code that avoids infinite loops that were caused by circular references (a symbol that was defined by referring to itself directly or indirectly). Patch by kugelfuhr. --- src/ca65/expr.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/ca65/expr.c b/src/ca65/expr.c index 8703b2a55..aad4d9ae5 100644 --- a/src/ca65/expr.c +++ b/src/ca65/expr.c @@ -171,6 +171,25 @@ int IsFarRange (long Val) +static const ExprNode* ResolveSymbolChain(const ExprNode* E) +/* Recursive helper function for IsEasyConst */ +{ + if (E->Op == EXPR_SYMBOL) { + SymEntry* Sym = E->V.Sym; + + if (Sym == 0 || Sym->Expr == 0 || SymHasUserMark (Sym)) { + return 0; + } else { + SymMarkUser (Sym); + E = ResolveSymbolChain (Sym->Expr); + SymUnmarkUser (Sym); + } + } + return E; +} + + + int IsEasyConst (const ExprNode* E, long* Val) /* Do some light checking if the given node is a constant. Don't care if E is ** a complex expression. If E is a constant, return true and place its value @@ -178,12 +197,10 @@ int IsEasyConst (const ExprNode* E, long* Val) */ { /* Resolve symbols, follow symbol chains */ - while (E->Op == EXPR_SYMBOL) { - E = SymResolve (E->V.Sym); - if (E == 0) { - /* Could not resolve */ - return 0; - } + E = ResolveSymbolChain (E); + if (E == 0) { + /* Could not resolve */ + return 0; } /* Symbols resolved, check for a literal */ From 6dbafda53f2bfcce1d4f27cfb64538d15875b9bf Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 14 Feb 2022 22:28:22 +0800 Subject: [PATCH 1084/2710] Testcase for #1662. --- test/val/bitfield.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/test/val/bitfield.c b/test/val/bitfield.c index 939d90dff..1de19777a 100644 --- a/test/val/bitfield.c +++ b/test/val/bitfield.c @@ -26,8 +26,10 @@ static unsigned char failures = 0; +typedef unsigned int field_type; + static struct four_bits { - unsigned int x : 4; + field_type x : 4; } fb = {1}; static void test_four_bits(void) @@ -57,8 +59,8 @@ static void test_four_bits(void) */ static struct four_bits_with_int { - unsigned int x : 4; - unsigned int y; + field_type x : 4; + field_type y; } fbi = {1, 2}; static void test_four_bits_with_int(void) @@ -95,8 +97,8 @@ static void test_four_bits_with_int(void) } static struct overlap { - unsigned int x : 10; - unsigned int y : 10; + field_type x : 10; + field_type y : 10; } o = {11, 22}; /* Tests that bit-fields can share allocation units. */ @@ -133,9 +135,9 @@ static void test_overlap(void) } static struct overlap_with_int { - unsigned int x : 10; - unsigned int y : 10; - unsigned int z; + field_type x : 10; + field_type y : 10; + field_type z; } oi = {111, 222, 333}; static void test_overlap_with_int(void) @@ -183,8 +185,8 @@ static void test_overlap_with_int(void) } static struct full_width { - unsigned int x : 8; - unsigned int y : 16; + field_type x : 8; + field_type y : 16; } fw = {255, 17}; static void test_full_width(void) @@ -220,13 +222,13 @@ static void test_full_width(void) } static struct aligned_end { - unsigned int : 2; - unsigned int x : 6; - unsigned int : 3; - unsigned int y : 13; + field_type : 2; + field_type x : 6; + field_type : 3; + field_type y : 13; /* z crosses a byte boundary, but fits in a byte when shifted. */ - unsigned int : 6; - unsigned int z : 7; + field_type : 6; + field_type z : 7; } ae = {63, 17, 100}; static void test_aligned_end(void) From ad82392428df9c837d5140a839929c95ecdc6b26 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 15 Feb 2022 21:25:03 +0100 Subject: [PATCH 1085/2710] add hint on VICE -moncommands --- doc/debugging.sgml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/doc/debugging.sgml b/doc/debugging.sgml index a270d12c7..ce678601d 100644 --- a/doc/debugging.sgml +++ b/doc/debugging.sgml @@ -16,7 +16,7 @@ How to debug your code using the VICE and Oricutron emulators. <sect>Overview<p> This document describes how to debug your programs using the cc65 development -tools and the VICE CBM emulator. +tools and the VICE or Oricutron emulator. @@ -126,6 +126,12 @@ and you may use them wherever you need to specify an address. Try as an example (note that VICE needs a leading dot before all labels, and that the compiler prepends an underline under most named labels). +If you start the emulator from the commandline, you can also load the labels +directly using something like this: + +<tscreen><verb> + x64sc -moncommands hello.lbl hello.prg +</verb></tscreen> <sect>How to use the label file with Oricutron<p> @@ -144,8 +150,7 @@ and you may use them wherever you need to specify an address. Try d ._main </verb></tscreen> -as an example (note that VICE needs a leading dot before all labels, and that -the compiler prepends an underline under most named labels). +as an example. From 3d0013ab309fac3eeac6edcbca0116fc5db2c1a5 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Tue, 15 Feb 2022 21:46:07 +0100 Subject: [PATCH 1086/2710] Invalid flagged errors if token is missing A missing factor in an expression causes an expected but missing token to be skipped, leading to invalid flagged errors in the following line: l = 3 + lda #$00 An error should be output for line 1, but not for line 2. Actually, both are flagged as errors: test.s(1): Error: Syntax error test.s(2): Error: Unexpected trailing garbage characters This patch (as proposed in issue #1634 by kugelfuhr) fixes this. --- src/ca65/expr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ca65/expr.c b/src/ca65/expr.c index aad4d9ae5..74133d533 100644 --- a/src/ca65/expr.c +++ b/src/ca65/expr.c @@ -1226,11 +1226,11 @@ static ExprNode* Factor (void) SB_GetLen (&CurTok.SVal) == 1) { /* A character constant */ N = GenLiteralExpr (TgtTranslateChar (SB_At (&CurTok.SVal, 0))); + NextTok (); } else { N = GenLiteral0 (); /* Dummy */ Error ("Syntax error"); } - NextTok (); break; } return N; From 364e72921c7ec6d6ad8d23f6aa13d3f9f7f118d8 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Tue, 15 Feb 2022 22:03:47 +0100 Subject: [PATCH 1087/2710] ca65: .constructor after .export fails The actor directives (.constructor, .destructor, .interruptor, and .condes) can't handle a symbol that's already exported. The relevant code does the checks in the wrong order. For example, the following correct snippet does not assemble: .export C C: .constructor C, 5 The assembler outputs: test.s:2: Error: Address size mismatch for symbol 'C' Exchanging both lines makes it work. This fixes #1647; the patch is provided by 'kugelfuhr' and taken from there. --- src/ca65/symentry.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/ca65/symentry.c b/src/ca65/symentry.c index cf789da5e..1048bfbc2 100644 --- a/src/ca65/symentry.c +++ b/src/ca65/symentry.c @@ -546,6 +546,18 @@ void SymConDes (SymEntry* S, unsigned char AddrSize, unsigned Type, unsigned Pri return; } + /* If the symbol is already defined, check symbol size against the + ** exported size. + */ + if (S->Flags & SF_DEFINED) { + if (AddrSize == ADDR_SIZE_DEFAULT) { + /* Use the real size of the symbol */ + AddrSize = S->AddrSize; + } else if (S->AddrSize != AddrSize) { + Error ("Address size mismatch for symbol '%m%p'", GetSymName (S)); + } + } + /* If the symbol was already marked as an export or global, check if ** this was done specifiying the same address size. In case of a global ** declaration, silently remove the global flag. @@ -558,18 +570,6 @@ void SymConDes (SymEntry* S, unsigned char AddrSize, unsigned Type, unsigned Pri } S->ExportSize = AddrSize; - /* If the symbol is already defined, check symbol size against the - ** exported size. - */ - if (S->Flags & SF_DEFINED) { - if (S->ExportSize == ADDR_SIZE_DEFAULT) { - /* Use the real size of the symbol */ - S->ExportSize = S->AddrSize; - } else if (S->AddrSize != S->ExportSize) { - Error ("Address size mismatch for symbol '%m%p'", GetSymName (S)); - } - } - /* If the symbol already was declared as a condes of this type, ** check if the new priority value is the same as the old one. */ From 1df61b6ec715c86f3c97ce84cfe714c61c922059 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Tue, 15 Feb 2022 22:16:06 +0100 Subject: [PATCH 1088/2710] Add link to DEB and RPM snapshots --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 33c7d2830..93b91aa80 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ [Windows Snapshot](https://sourceforge.net/projects/cc65/files/cc65-snapshot-win32.zip) +[Linux Snapshot DEB and RPM](https://software.opensuse.org//download.html?project=home%3Astrik&package=cc65) + [Documentation](https://cc65.github.io/doc) [Wiki](https://github.com/cc65/wiki/wiki) From 14988f5dda131cb532ad13a901c85c227c6ace81 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 16 Feb 2022 20:10:54 +0800 Subject: [PATCH 1089/2710] Fixed bitwise shift with numeric constant operand(s). --- src/cc65/shiftexpr.c | 54 ++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c index 168574a1b..f7385ace1 100644 --- a/src/cc65/shiftexpr.c +++ b/src/cc65/shiftexpr.c @@ -64,11 +64,11 @@ void ShiftExpr (struct ExprDesc* Expr) CodeMark Mark1; CodeMark Mark2; token_t Tok; /* The operator token */ - const Type* EffType; /* Effective lhs type */ const Type* ResultType; /* Type of the result */ unsigned ExprBits; /* Bits of the lhs operand */ unsigned GenFlags; /* Generator flags */ unsigned ltype; + int lconst; /* Operand is a constant */ int rconst; /* Operand is a constant */ @@ -92,7 +92,7 @@ void ShiftExpr (struct ExprDesc* Expr) NextToken (); /* Get the type of the result */ - ResultType = EffType = IntPromotion (Expr->Type); + ResultType = IntPromotion (Expr->Type); /* Prepare the code generator flags */ GenFlags = TypeOf (ResultType); @@ -103,7 +103,8 @@ void ShiftExpr (struct ExprDesc* Expr) /* Get the lhs on stack */ GetCodePos (&Mark1); ltype = TypeOf (Expr->Type); - if (ED_IsConstAbs (Expr)) { + lconst = ED_IsConstAbs (Expr); + if (lconst) { /* Constant value */ GetCodePos (&Mark2); g_push (ltype | CF_CONST, Expr->IVal); @@ -115,7 +116,7 @@ void ShiftExpr (struct ExprDesc* Expr) } /* Get the right hand side */ - ExprWithCheck (hie8, &Expr2); + MarkedExprWithCheck (hie8, &Expr2); /* Check the type of the rhs */ if (!IsClassInt (Expr2.Type)) { @@ -124,7 +125,7 @@ void ShiftExpr (struct ExprDesc* Expr) } /* Check for a constant right side expression */ - rconst = ED_IsConstAbs (&Expr2); + rconst = ED_IsConstAbs (&Expr2) && ED_CodeRangeIsEmpty (&Expr2); if (!rconst) { /* Not constant, load into the primary */ @@ -154,31 +155,32 @@ void ShiftExpr (struct ExprDesc* Expr) } - /* If the shift count is zero, nothing happens */ - if (Expr2.IVal == 0) { + /* If the shift count is zero, nothing happens. If the left hand + ** side is a constant, the result is constant. + */ + if (Expr2.IVal == 0 || lconst) { - /* Result is already in Expr, remove the generated code */ - RemoveCode (&Mark1); + /* Set the type */ + Expr->Type = ResultType; - /* Done */ - goto Next; - } + if (lconst) { - /* If the left hand side is a constant, the result is constant */ - if (ED_IsConstAbs (Expr)) { + /* Evaluate the result */ + switch (Tok) { + case TOK_SHL: Expr->IVal <<= Expr2.IVal; break; + case TOK_SHR: Expr->IVal >>= Expr2.IVal; break; + default: /* Shutup gcc */ break; + } - /* Evaluate the result */ - switch (Tok) { - case TOK_SHL: Expr->IVal <<= Expr2.IVal; break; - case TOK_SHR: Expr->IVal >>= Expr2.IVal; break; - default: /* Shutup gcc */ break; + /* Limit the calculated value to the range of its type */ + LimitExprValue (Expr); } - /* Both operands are constant, remove the generated code */ + /* Result is already got, remove the generated code */ RemoveCode (&Mark1); /* Done */ - goto Next; + continue; } /* If we're shifting an integer or unsigned to the right, the lhs @@ -188,13 +190,12 @@ void ShiftExpr (struct ExprDesc* Expr) ** shift count is zero, we're done. */ if (Tok == TOK_SHR && - IsTypeInt (Expr->Type) && + IsClassInt (Expr->Type) && + SizeOf (Expr->Type) == SIZEOF_INT && ED_IsLVal (Expr) && ED_IsLocQuasiConst (Expr) && Expr2.IVal >= 8) { - const Type* OldType; - /* Increase the address by one and decrease the shift count */ ++Expr->IVal; Expr2.IVal -= 8; @@ -202,7 +203,6 @@ void ShiftExpr (struct ExprDesc* Expr) /* Replace the type of the expression temporarily by the ** corresponding char type. */ - OldType = Expr->Type; if (IsSignUnsigned (Expr->Type)) { Expr->Type = type_uchar; } else { @@ -215,9 +215,6 @@ void ShiftExpr (struct ExprDesc* Expr) /* Generate again code for the load, this time with the new type */ LoadExpr (CF_NONE, Expr); - /* Reset the type */ - Expr->Type = OldType; - /* If the shift count is now zero, we're done */ if (Expr2.IVal == 0) { /* Be sure to mark the value as in the primary */ @@ -238,7 +235,6 @@ MakeRVal: /* We have an rvalue in the primary now */ ED_FinalizeRValLoad (Expr); -Next: /* Set the type of the result */ Expr->Type = ResultType; } From d006317b0e5ead2cf9e3e0355209f7ac3e8250c6 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 17 Feb 2022 00:30:31 -0500 Subject: [PATCH 1090/2710] Made the snapshot-on-push Github action run on only the upstream repository. --- .github/workflows/snapshot-on-push-master.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 914094567..fb4b3aa13 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -10,6 +10,7 @@ concurrency: jobs: build_windows: name: Build (Windows) + if: github.repository == 'cc65/cc65' runs-on: windows-latest steps: @@ -30,6 +31,7 @@ jobs: build_linux: name: Build, Test, and Snapshot (Linux) + if: github.repository == 'cc65/cc65' runs-on: ubuntu-latest steps: From 246814e63b6893b7d8b9f211620f41a94b85b271 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Fri, 18 Feb 2022 00:43:49 +0100 Subject: [PATCH 1091/2710] smarter manufacturer some kind of promotion --- libsrc/lynx/exehdr.s | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libsrc/lynx/exehdr.s b/libsrc/lynx/exehdr.s index d63c0524d..0fbe99150 100644 --- a/libsrc/lynx/exehdr.s +++ b/libsrc/lynx/exehdr.s @@ -16,8 +16,12 @@ .word __BANK1BLOCKSIZE__ ; bank 1 page size .word 1 ; version number .asciiz "Cart name " ; 32 bytes cart name - .asciiz "Manufacturer " ; 16 bytes manufacturer + .byte "cc65 V" ; 16 bytes manufacturer + .byte ((.VERSION >> 8) & $0F) + '0' + .byte '.' + .byte ((.VERSION >> 4) & $0F) + '0' + .byte (.VERSION & $0F) + '0' + .asciiz " " .byte 0 ; rotation 1=left ; rotation 2=right .byte 0,0,0,0,0 ; spare - From 2bda128ef183c6b1a26a5d8a1586af25114e629f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 26 Feb 2022 23:02:51 +0800 Subject: [PATCH 1092/2710] Fixed LimitExprValue() for 64-bit long env. --- src/cc65/expr.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 3b9307a37..8920d5c40 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -216,8 +216,11 @@ void LimitExprValue (ExprDesc* Expr) break; case T_LONG: + Expr->IVal = (int32_t)Expr->IVal; + break; + case T_ULONG: - /* No need to do anything */ + Expr->IVal = (uint32_t)Expr->IVal; break; case T_SCHAR: From 904a77e03c960cd226882d579f2b3365f62bd6c7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 18 Feb 2022 15:20:01 +0800 Subject: [PATCH 1093/2710] Testcase for #1675. --- test/val/bug1675-ub.c | 60 +++++++++++++++++++++++++ test/val/bug1675.c | 101 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+) create mode 100644 test/val/bug1675-ub.c create mode 100644 test/val/bug1675.c diff --git a/test/val/bug1675-ub.c b/test/val/bug1675-ub.c new file mode 100644 index 000000000..72e372308 --- /dev/null +++ b/test/val/bug1675-ub.c @@ -0,0 +1,60 @@ +/* #1675 - Some UB cases of bit-shifts */ + +#include <stdio.h> + +int unexpected = 0; + +void Test_UB(void) +{ + { + /* UB per standard, lhs expected in cc65: (int)-32768 */ + if (!((0x4000 << 1) < 0)) { + ++unexpected; + printf("Expected: (0x4000 << 1) < 0, got lhs: %ld\n", (long)(0x4000 << 1)); + } + } + + { + /* UB per standard, lhs expected in cc65: (long)-2147483648L */ + if (!((0x40000000 << 1) < 0)) { + ++unexpected; + printf("Expected: (0x40000000 << 1) < 0, got lhs: %ld\n", (long)(0x40000000 << 1)); + } + } + + { + /* UB per standard, lhs expected in cc65: (int)-32768 */ + if (!(((unsigned char)0x80 << 8) < 0)) { + ++unexpected; + printf("Expected: ((unsigned char)0x80 << 8) < 0, got lhs: %ld\n", (long)((unsigned char)0x80 << 8)); + } + } + + { + /* UB per standard, lhs expected in cc65: (int)-32768 */ + if (!(((short)0x4000L << 1) < 0)) { + ++unexpected; + printf("Expected: ((short)0x4000L << 1) < 0, got lhs: %ld\n", (long)((short)0x4000L << 1)); + } + } + + { + const signed short x = 0x4000; + /* UB per standard, lhs expected in cc65: (int)-32768 */ + if (!((x << 1) < 0)) { + ++unexpected; + printf("Expected: (x << 1) < 0, got lhs: %ld\n", (long)(x << 1)); + } + } +} + +int main(void) +{ + Test_UB(); + + if (unexpected != 0) { + printf("Unexpected: %d\n", unexpected); + } + + return unexpected; +} diff --git a/test/val/bug1675.c b/test/val/bug1675.c new file mode 100644 index 000000000..ee24425df --- /dev/null +++ b/test/val/bug1675.c @@ -0,0 +1,101 @@ +/* #1675 - Some corner cases of bit-shifts */ + +#include <stdio.h> + +int failures = 0; + +void Test_Defined(void) +{ + { + /* Well-defined per standard, lhs expected in cc65: (int)-256 */ + if (!(((signed char)0x80 << 1) < 0)) { + ++failures; + printf("Expected: ((signed char)0x80 << 1) < 0, got lhs: %ld\n", (long)((signed char)0x80 << 1)); + } + } + + { + /* Implementation-defined per standard, lhs expected in cc65: (int)-128 */ + if (!(((signed char)0x80 >> 1 << 1) < 0)) { + ++failures; + printf("Expected: ((signed char)0x80 >> 1 << 1) < 0, got lhs: %ld\n", (long)((signed char)0x80 >> 1 << 1)); + } + } + + { + int x = 0; + /* Well-defined per standard, lhs expected in cc65: (int)1 */ + if (!((1 << (x++, 0)) == 1)) { + ++failures; + x = 0; + printf("Expected: (1 << (x++, 0)) == 1, got lhs: %ld\n", (long)(1 << (x++, 0))); + } + + /* Well-defined per standard, lhs expected in cc65: (int)1 */ + if (!(x == 1)) { + ++failures; + printf("Expected: (1 << (x++, 0)) == 1 && x == 1, got x: %d\n", x); + } + } + + { + int x = 0, y = 0x100; + /* Well-defined per standard, lhs expected in cc65: (int)128 */ + if (!((y >> (x++, 0) >> 1) == 0x80)) { + ++failures; + x = 0; + printf("Expected: (y >> (x++, 0) >> 1) == 0x80, got lhs: %ld\n", (long)(y >> (x++, 0) >> 1)); + } + + /* Well-defined per standard, lhs expected in cc65: (int)1 */ + if (!(x == 1)) { + ++failures; + printf("Expected: (y >> (x++, 0) >> 1) == 0x80 && x == 1, got x: %d\n", x); + } + } + + { + int x = 0, y = 0x100; + /* Well-defined per standard, lhs expected in cc65: (int)1 */ + if (!((y >> (x++, 8)) == 1)) { + ++failures; + x = 0; + printf("Expected: (y >> (x++, 8)) == 1, got lhs: %ld\n", (long)(y >> (x++, 8))); + } + + /* Well-defined per standard, lhs expected in cc65: (int)1 */ + if (!(x == 1)) { + ++failures; + printf("Expected: (y >> (x++, 8)) == 1 && x == 1, got x: %d\n", x); + } + } + + { + const signed char x = 0x80; + /* Well-defined per standard, lhs expected in cc65: (int)-256 */ + if (!((x << 1) < 0)) { + ++failures; + printf("Expected: (x << 1) < 0, got lhs: %ld\n", (long)(x << 1)); + } + } + + { + const signed char x = 0x40; + /* Well-defined per standard, lhs expected in cc65: (int)128 */ + if (!((x << 1) >= 0)) { + ++failures; + printf("Expected: (x << 1) >= 0, got lhs: %ld\n", (long)(x << 1)); + } + } +} + +int main(void) +{ + Test_Defined(); + + if (failures != 0) { + printf("Failures: %d\n", failures); + } + + return failures; +} From 388ae87cb384d1ef4bf4e01f5d683b0471386b2d Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Sat, 19 Feb 2022 12:44:20 +0100 Subject: [PATCH 1094/2710] Reorganized test/asm --- test/asm/Makefile | 71 +++----------- test/asm/{ => cpudetect}/4510-cpudetect.ref | Bin test/asm/{ => cpudetect}/6502-cpudetect.ref | Bin .../asm/{ => cpudetect}/6502dtv-cpudetect.ref | Bin test/asm/{ => cpudetect}/6502x-cpudetect.ref | Bin test/asm/{ => cpudetect}/65816-cpudetect.ref | Bin test/asm/{ => cpudetect}/65c02-cpudetect.ref | Bin test/asm/{ => cpudetect}/65sc02-cpudetect.ref | Bin test/asm/cpudetect/Makefile | 61 ++++++++++++ test/asm/{ => cpudetect}/cpudetect.s | 0 .../asm/{ => cpudetect}/huc6280-cpudetect.ref | Bin test/asm/listing/Makefile | 89 ++++++++++++++++++ test/asm/{ => listing}/paramcount.s | 0 test/asm/{ => opcodes}/4510-opcodes.ref | Bin test/asm/{ => opcodes}/4510-opcodes.s | 0 test/asm/{ => opcodes}/6502-opcodes.ref | Bin test/asm/{ => opcodes}/6502-opcodes.s | 0 test/asm/{ => opcodes}/6502dtv-opcodes.ref | Bin test/asm/{ => opcodes}/6502dtv-opcodes.s | 0 test/asm/{ => opcodes}/6502x-opcodes.ref | Bin test/asm/{ => opcodes}/6502x-opcodes.s | 0 test/asm/{ => opcodes}/65c02-opcodes.ref | Bin test/asm/{ => opcodes}/65c02-opcodes.s | 0 test/asm/{ => opcodes}/65sc02-opcodes.ref | Bin test/asm/{ => opcodes}/65sc02-opcodes.s | 0 test/asm/opcodes/Makefile | 61 ++++++++++++ test/asm/{ => opcodes}/huc6280-opcodes.ref | Bin test/asm/{ => opcodes}/huc6280-opcodes.s | 0 test/asm/{ => opcodes}/m740-opcodes.s | 0 29 files changed, 225 insertions(+), 57 deletions(-) rename test/asm/{ => cpudetect}/4510-cpudetect.ref (100%) rename test/asm/{ => cpudetect}/6502-cpudetect.ref (100%) rename test/asm/{ => cpudetect}/6502dtv-cpudetect.ref (100%) rename test/asm/{ => cpudetect}/6502x-cpudetect.ref (100%) rename test/asm/{ => cpudetect}/65816-cpudetect.ref (100%) rename test/asm/{ => cpudetect}/65c02-cpudetect.ref (100%) rename test/asm/{ => cpudetect}/65sc02-cpudetect.ref (100%) create mode 100644 test/asm/cpudetect/Makefile rename test/asm/{ => cpudetect}/cpudetect.s (100%) rename test/asm/{ => cpudetect}/huc6280-cpudetect.ref (100%) create mode 100644 test/asm/listing/Makefile rename test/asm/{ => listing}/paramcount.s (100%) rename test/asm/{ => opcodes}/4510-opcodes.ref (100%) rename test/asm/{ => opcodes}/4510-opcodes.s (100%) rename test/asm/{ => opcodes}/6502-opcodes.ref (100%) rename test/asm/{ => opcodes}/6502-opcodes.s (100%) rename test/asm/{ => opcodes}/6502dtv-opcodes.ref (100%) rename test/asm/{ => opcodes}/6502dtv-opcodes.s (100%) rename test/asm/{ => opcodes}/6502x-opcodes.ref (100%) rename test/asm/{ => opcodes}/6502x-opcodes.s (100%) rename test/asm/{ => opcodes}/65c02-opcodes.ref (100%) rename test/asm/{ => opcodes}/65c02-opcodes.s (100%) rename test/asm/{ => opcodes}/65sc02-opcodes.ref (100%) rename test/asm/{ => opcodes}/65sc02-opcodes.s (100%) create mode 100644 test/asm/opcodes/Makefile rename test/asm/{ => opcodes}/huc6280-opcodes.ref (100%) rename test/asm/{ => opcodes}/huc6280-opcodes.s (100%) rename test/asm/{ => opcodes}/m740-opcodes.s (100%) diff --git a/test/asm/Makefile b/test/asm/Makefile index e951c2015..d722c47db 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -1,77 +1,34 @@ -# Makefile for the assembler regression tests +# top-level Makefile for the regression tests ifneq ($(shell echo),) CMD_EXE = 1 endif ifdef CMD_EXE - EXE = .exe - MKDIR = mkdir $(subst /,\,$1) - RMDIR = -rmdir /q /s $(subst /,\,$1) + RMDIR = -rmdir /s /q $(subst /,\,$1) else - EXE = - MKDIR = mkdir -p $1 RMDIR = $(RM) -r $1 endif -ifdef QUIET - .SILENT: -endif +WORKDIR = ../testwrk/asm -CA65 := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) -LD65 := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) +SUBDIRS = cpudetect opcodes listing -WORKDIR = ../../testwrk/asm +.PHONY: test continue mostlyclean clean -ISEQUAL = ../../testwrk/isequal$(EXE) +test: mostlyclean continue -CC = gcc -CFLAGS = -O2 +define CALL_template -.PHONY: all clean +continue:: + @$(MAKE) -C $1 all -OPCODE_REFS := $(wildcard *-opcodes.ref) -OPCODE_BINS = $(OPCODE_REFS:%.ref=$(WORKDIR)/%.bin) -OPCODE_CPUS = $(OPCODE_REFS:%-opcodes.ref=%) +mostlyclean:: + @$(MAKE) -C $1 clean -CPUDETECT_REFS := $(wildcard *-cpudetect.ref) -CPUDETECT_BINS = $(CPUDETECT_REFS:%.ref=$(WORKDIR)/%.bin) -CPUDETECT_CPUS = $(CPUDETECT_REFS:%-cpudetect.ref=%) +endef -all: $(OPCODE_BINS) $(CPUDETECT_BINS) $(WORKDIR)/paramcount.o +$(foreach subdir,$(SUBDIRS),$(eval $(call CALL_template,$(subdir)))) -$(WORKDIR): - $(call MKDIR,$(WORKDIR)) - -$(ISEQUAL): ../isequal.c | $(WORKDIR) - $(CC) $(CFLAGS) -o $@ $< - -define OPCODE_template - -$(WORKDIR)/$1-opcodes.bin: $1-opcodes.s $(ISEQUAL) - $(if $(QUIET),echo asm/$1-opcodes.bin) - $(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$< - $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib - $(ISEQUAL) $1-opcodes.ref $$@ - -endef # OPCODE_template - -$(foreach cpu,$(OPCODE_CPUS),$(eval $(call OPCODE_template,$(cpu)))) - -define CPUDETECT_template - -$(WORKDIR)/$1-cpudetect.bin: cpudetect.s $1-cpudetect.ref $(ISEQUAL) - $(if $(QUIET),echo asm/$1-cpudetect.bin) - $(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$< - $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib - $(ISEQUAL) $1-cpudetect.ref $$@ - -endef # CPUDETECT_template - -$(foreach cpu,$(CPUDETECT_CPUS),$(eval $(call CPUDETECT_template,$(cpu)))) - -$(WORKDIR)/%.o: %.s | $(WORKDIR) - $(CA65) -l $(@:.o=.lst) -o $@ $< - -clean: +clean: mostlyclean @$(call RMDIR,$(WORKDIR)) diff --git a/test/asm/4510-cpudetect.ref b/test/asm/cpudetect/4510-cpudetect.ref similarity index 100% rename from test/asm/4510-cpudetect.ref rename to test/asm/cpudetect/4510-cpudetect.ref diff --git a/test/asm/6502-cpudetect.ref b/test/asm/cpudetect/6502-cpudetect.ref similarity index 100% rename from test/asm/6502-cpudetect.ref rename to test/asm/cpudetect/6502-cpudetect.ref diff --git a/test/asm/6502dtv-cpudetect.ref b/test/asm/cpudetect/6502dtv-cpudetect.ref similarity index 100% rename from test/asm/6502dtv-cpudetect.ref rename to test/asm/cpudetect/6502dtv-cpudetect.ref diff --git a/test/asm/6502x-cpudetect.ref b/test/asm/cpudetect/6502x-cpudetect.ref similarity index 100% rename from test/asm/6502x-cpudetect.ref rename to test/asm/cpudetect/6502x-cpudetect.ref diff --git a/test/asm/65816-cpudetect.ref b/test/asm/cpudetect/65816-cpudetect.ref similarity index 100% rename from test/asm/65816-cpudetect.ref rename to test/asm/cpudetect/65816-cpudetect.ref diff --git a/test/asm/65c02-cpudetect.ref b/test/asm/cpudetect/65c02-cpudetect.ref similarity index 100% rename from test/asm/65c02-cpudetect.ref rename to test/asm/cpudetect/65c02-cpudetect.ref diff --git a/test/asm/65sc02-cpudetect.ref b/test/asm/cpudetect/65sc02-cpudetect.ref similarity index 100% rename from test/asm/65sc02-cpudetect.ref rename to test/asm/cpudetect/65sc02-cpudetect.ref diff --git a/test/asm/cpudetect/Makefile b/test/asm/cpudetect/Makefile new file mode 100644 index 000000000..ffddb1ad8 --- /dev/null +++ b/test/asm/cpudetect/Makefile @@ -0,0 +1,61 @@ +# Makefile for the assembler regression tests + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + EXE = .exe + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /q /s $(subst /,\,$1) +else + EXE = + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +ifdef QUIET + .SILENT: +endif + +CA65 := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) +LD65 := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + +WORKDIR = ../../../testwrk/asm/cpudetect + +ISEQUAL = ../../../testwrk/isequal$(EXE) + +CC = gcc +CFLAGS = -O2 + +.PHONY: all clean + +CPUDETECT_REFS := $(wildcard *-cpudetect.ref) +CPUDETECT_BINS = $(CPUDETECT_REFS:%.ref=$(WORKDIR)/%.bin) +CPUDETECT_CPUS = $(CPUDETECT_REFS:%-cpudetect.ref=%) + +all: $(CPUDETECT_BINS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +$(ISEQUAL): ../../isequal.c | $(WORKDIR) + $(CC) $(CFLAGS) -o $@ $< + +define CPUDETECT_template + +$(WORKDIR)/$1-cpudetect.bin: cpudetect.s $1-cpudetect.ref $(ISEQUAL) + $(if $(QUIET),echo asm/$1-cpudetect.bin) + $(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$< + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib + $(ISEQUAL) $1-cpudetect.ref $$@ + +endef # CPUDETECT_template + +$(foreach cpu,$(CPUDETECT_CPUS),$(eval $(call CPUDETECT_template,$(cpu)))) + +$(WORKDIR)/%.o: %.s | $(WORKDIR) + $(CA65) -l $(@:.o=.lst) -o $@ $< + +clean: + @$(call RMDIR,$(WORKDIR)) diff --git a/test/asm/cpudetect.s b/test/asm/cpudetect/cpudetect.s similarity index 100% rename from test/asm/cpudetect.s rename to test/asm/cpudetect/cpudetect.s diff --git a/test/asm/huc6280-cpudetect.ref b/test/asm/cpudetect/huc6280-cpudetect.ref similarity index 100% rename from test/asm/huc6280-cpudetect.ref rename to test/asm/cpudetect/huc6280-cpudetect.ref diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile new file mode 100644 index 000000000..f4a7df81c --- /dev/null +++ b/test/asm/listing/Makefile @@ -0,0 +1,89 @@ +# Makefile for the assembler regression tests + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + EXE = .exe + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /q /s $(subst /,\,$1) +else + EXE = + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +ifdef QUIET + .SILENT: +endif + +CA65 := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) +LD65 := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + +WORKDIR = ../../../testwrk/asm/listing + +ISEQUAL = ../../../testwrk/isequal$(EXE) + +CC = gcc +CFLAGS = -O2 + +.PHONY: all clean + +LISTING_SRC := $(wildcard *.s) +LISTING_TESTS = $(LISTING_SRC:%.s=%) +LISTING_BINS = $(LISTING_SRC:%.s=$(WORKDIR)/%.bin) + +all: $(LISTING_BINS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +$(ISEQUAL): ../../isequal.c | $(WORKDIR) + $(CC) $(CFLAGS) -o $@ $< + + +define LISTING_template + +$(WORKDIR)/$1.bin: $1.s $(ISEQUAL) + $(if $(QUIET),echo asm/$1.bin) + + # compile without generating listing + $(CA65) -t none -o $$(@:.bin=.o) $$< + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib + +ifneq ($(wildcard $1.bin-ref),) + $(ISEQUAL) $1.bin-ref $$@ +endif + + $(CA65) -t none -l $$(@:.bin=.list.orig) -o $$(@:.bin=.list-o) $$< + $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib + + # check if the result bin is the same as without listing file + $(ISEQUAL) $$@ $$(@:.bin=.list-bin) + +ifneq ($(wildcard $1.list-ref),) + # we have a reference file, compare that, too + + # remove first line which contains a version number + tail -n +2 $$(@:.bin=.lst.orig) > $$(@:.bin=.lst) + $(ISEQUAL) $1.list-ref $$(@:.bin=.lst) +endif + +# $(CA65) -t none -f -l $$(@:.bin=.flist.orig) -o $$(@:.bin=.flist-o) $$< +# $(LD65) -t none -o $$(@:.bin=.flist-bin) $$(@:.bin=.flist-o) none.lib + +# # check if the result bin is the same as without listing file +# $(ISEQUAL) $$@ $$(@:.bin=.flist-bin) + +endef # LISTING_template + + +$(foreach listing,$(LISTING_TESTS),$(eval $(call LISTING_template,$(listing)))) + + +$(WORKDIR)/%.o: %.s | $(WORKDIR) + $(CA65) -l $(@:.o=.lst) -o $@ $< + +clean: + @$(call RMDIR,$(WORKDIR)) diff --git a/test/asm/paramcount.s b/test/asm/listing/paramcount.s similarity index 100% rename from test/asm/paramcount.s rename to test/asm/listing/paramcount.s diff --git a/test/asm/4510-opcodes.ref b/test/asm/opcodes/4510-opcodes.ref similarity index 100% rename from test/asm/4510-opcodes.ref rename to test/asm/opcodes/4510-opcodes.ref diff --git a/test/asm/4510-opcodes.s b/test/asm/opcodes/4510-opcodes.s similarity index 100% rename from test/asm/4510-opcodes.s rename to test/asm/opcodes/4510-opcodes.s diff --git a/test/asm/6502-opcodes.ref b/test/asm/opcodes/6502-opcodes.ref similarity index 100% rename from test/asm/6502-opcodes.ref rename to test/asm/opcodes/6502-opcodes.ref diff --git a/test/asm/6502-opcodes.s b/test/asm/opcodes/6502-opcodes.s similarity index 100% rename from test/asm/6502-opcodes.s rename to test/asm/opcodes/6502-opcodes.s diff --git a/test/asm/6502dtv-opcodes.ref b/test/asm/opcodes/6502dtv-opcodes.ref similarity index 100% rename from test/asm/6502dtv-opcodes.ref rename to test/asm/opcodes/6502dtv-opcodes.ref diff --git a/test/asm/6502dtv-opcodes.s b/test/asm/opcodes/6502dtv-opcodes.s similarity index 100% rename from test/asm/6502dtv-opcodes.s rename to test/asm/opcodes/6502dtv-opcodes.s diff --git a/test/asm/6502x-opcodes.ref b/test/asm/opcodes/6502x-opcodes.ref similarity index 100% rename from test/asm/6502x-opcodes.ref rename to test/asm/opcodes/6502x-opcodes.ref diff --git a/test/asm/6502x-opcodes.s b/test/asm/opcodes/6502x-opcodes.s similarity index 100% rename from test/asm/6502x-opcodes.s rename to test/asm/opcodes/6502x-opcodes.s diff --git a/test/asm/65c02-opcodes.ref b/test/asm/opcodes/65c02-opcodes.ref similarity index 100% rename from test/asm/65c02-opcodes.ref rename to test/asm/opcodes/65c02-opcodes.ref diff --git a/test/asm/65c02-opcodes.s b/test/asm/opcodes/65c02-opcodes.s similarity index 100% rename from test/asm/65c02-opcodes.s rename to test/asm/opcodes/65c02-opcodes.s diff --git a/test/asm/65sc02-opcodes.ref b/test/asm/opcodes/65sc02-opcodes.ref similarity index 100% rename from test/asm/65sc02-opcodes.ref rename to test/asm/opcodes/65sc02-opcodes.ref diff --git a/test/asm/65sc02-opcodes.s b/test/asm/opcodes/65sc02-opcodes.s similarity index 100% rename from test/asm/65sc02-opcodes.s rename to test/asm/opcodes/65sc02-opcodes.s diff --git a/test/asm/opcodes/Makefile b/test/asm/opcodes/Makefile new file mode 100644 index 000000000..00be96d91 --- /dev/null +++ b/test/asm/opcodes/Makefile @@ -0,0 +1,61 @@ +# Makefile for the assembler regression tests + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + EXE = .exe + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /q /s $(subst /,\,$1) +else + EXE = + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +ifdef QUIET + .SILENT: +endif + +CA65 := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) +LD65 := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + +WORKDIR = ../../../testwrk/asm/opcodes + +ISEQUAL = ../../../testwrk/isequal$(EXE) + +CC = gcc +CFLAGS = -O2 + +.PHONY: all clean + +OPCODE_REFS := $(wildcard *-opcodes.ref) +OPCODE_BINS = $(OPCODE_REFS:%.ref=$(WORKDIR)/%.bin) +OPCODE_CPUS = $(OPCODE_REFS:%-opcodes.ref=%) + +all: $(OPCODE_BINS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +$(ISEQUAL): ../../isequal.c | $(WORKDIR) + $(CC) $(CFLAGS) -o $@ $< + +define OPCODE_template + +$(WORKDIR)/$1-opcodes.bin: $1-opcodes.s $(ISEQUAL) + $(if $(QUIET),echo asm/$1-opcodes.bin) + $(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$< + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib + $(ISEQUAL) $1-opcodes.ref $$@ + +endef # OPCODE_template + +$(foreach cpu,$(OPCODE_CPUS),$(eval $(call OPCODE_template,$(cpu)))) + +$(WORKDIR)/%.o: %.s | $(WORKDIR) + $(CA65) -l $(@:.o=.lst) -o $@ $< + +clean: + @$(call RMDIR,$(WORKDIR)) diff --git a/test/asm/huc6280-opcodes.ref b/test/asm/opcodes/huc6280-opcodes.ref similarity index 100% rename from test/asm/huc6280-opcodes.ref rename to test/asm/opcodes/huc6280-opcodes.ref diff --git a/test/asm/huc6280-opcodes.s b/test/asm/opcodes/huc6280-opcodes.s similarity index 100% rename from test/asm/huc6280-opcodes.s rename to test/asm/opcodes/huc6280-opcodes.s diff --git a/test/asm/m740-opcodes.s b/test/asm/opcodes/m740-opcodes.s similarity index 100% rename from test/asm/m740-opcodes.s rename to test/asm/opcodes/m740-opcodes.s From 0e45976f9b0c07b1fbdb491fff4d8f95ed8f7493 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Sat, 19 Feb 2022 12:52:02 +0100 Subject: [PATCH 1095/2710] Rename target test to asm --- test/asm/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/asm/Makefile b/test/asm/Makefile index d722c47db..b35c30c9f 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -14,9 +14,9 @@ WORKDIR = ../testwrk/asm SUBDIRS = cpudetect opcodes listing -.PHONY: test continue mostlyclean clean +.PHONY: all continue mostlyclean clean -test: mostlyclean continue +all: mostlyclean continue define CALL_template From 0f6cb5b114b0cfe6331dab38c4d19d499b712722 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Sun, 20 Feb 2022 11:20:20 +0100 Subject: [PATCH 1096/2710] Add proper readmes --- test/asm/cpudetect/readme.txt | 15 ++++++++++++++ test/asm/listing/readme.txt | 27 +++++++++++++++++++++++++ test/asm/opcodes/readme.txt | 29 ++++++++++++++++++++++++++ test/asm/readme.txt | 38 +++++------------------------------ 4 files changed, 76 insertions(+), 33 deletions(-) create mode 100644 test/asm/cpudetect/readme.txt create mode 100644 test/asm/listing/readme.txt create mode 100644 test/asm/opcodes/readme.txt diff --git a/test/asm/cpudetect/readme.txt b/test/asm/cpudetect/readme.txt new file mode 100644 index 000000000..6a1adf480 --- /dev/null +++ b/test/asm/cpudetect/readme.txt @@ -0,0 +1,15 @@ +CPU Detect Tests +---------------- + +These tests all assemble the same file "cpudetect.s" which contains several +conditionals for several CPUs, only using every option known to the "--cpu" +command-line switch of ca65/cl65. + +Reference (".ref") Files +------------------------ + +Some hints about creating new files: +Make an empty file with the CPU's name prepended to "-cpudetect.ref". Run the +tests; one of them will fail due to a mismatch. Review the output of the +".lst" file pedantically, then copy the ".bin" over the empty ".ref" file. + diff --git a/test/asm/listing/readme.txt b/test/asm/listing/readme.txt new file mode 100644 index 000000000..e43f2008a --- /dev/null +++ b/test/asm/listing/readme.txt @@ -0,0 +1,27 @@ +Overall test: +------------- + +These testcases can be used to test different aspects of the assembler. +The name of a test is everything in the form <test>.s. + +The following reference files can be added: + +- <test>.bin-ref: + This is a reference for the resulting binary. + The binary as binary tested against this file. + If they are not equal, the test fails. + +- <test>.list-ref + This is a reference for the resulting listing output + This file *must* have the first line of the listing removed, as that + contains a ca65 version string, and almost always this will be changed! + + +Note that the resulting .bin file is generated twice: Once with no listing +file, and once with listing file. This way, one can find out if the listing +file generation changes anything with the resulting binary output. + + +TODO: +- add the possibility to test for specific error output that are to be + expected diff --git a/test/asm/opcodes/readme.txt b/test/asm/opcodes/readme.txt new file mode 100644 index 000000000..098dd549a --- /dev/null +++ b/test/asm/opcodes/readme.txt @@ -0,0 +1,29 @@ +Opcode Tests: +------------- + +These testcases are inspired by the ones now removed from test/assembler. +The main purpose is to have each possible opcode generated at least once, +either by an Assembly instruction or a ".byte"-placeholder. Typically +generated by disassembling a binary dump that contains data in the form +of the pattern that each opcode is stated once in order followed by easy +to recognise: + +00 00 EA 00 +01 00 EA 00 +02 00 EA 00 +[...] +fe 00 EA 00 +ff 00 EA 00 + +The disassembly is then put in a better readable form by replacing the +leftover dummy opcode parameters with something more recognizable. + +The testcases for 6502, 6502x, 65sc02, 65c02, 4510, and huc6280 have been +put together by Sven Oliver ("SvOlli") Moll, as well as a template for the +m740 instructions set. Later 6502dtv support was also added. + +Still to do is to find a way to implement an opcode testcase for the 65816 +processor, since it's capable of executing instructions with an 8-bit and +a 16-bit operator alike, distinguished by only one processor flag. + + diff --git a/test/asm/readme.txt b/test/asm/readme.txt index 1d135c895..18354bb47 100644 --- a/test/asm/readme.txt +++ b/test/asm/readme.txt @@ -4,44 +4,16 @@ Assembler Testcases Opcode Tests: ------------- -These testcases are inspired by the ones now removed from test/assembler. -The main purpose is to have each possible opcode generated at least once, -either by an Assembly instruction or a ".byte"-placeholder. Typically -generated by disassembling a binary dump that contains data in the form -of the pattern that each opcode is stated once in order followed by easy -to recognise: - -00 00 EA 00 -01 00 EA 00 -02 00 EA 00 -[...] -fe 00 EA 00 -ff 00 EA 00 - -The disassembly is then put in a better readable form by replacing the -leftover dummy opcode parameters with something more recognizable. - -The testcases for 6502, 6502x, 65sc02, 65c02, 4510, and huc6280 have been -put together by Sven Oliver ("SvOlli") Moll, as well as a template for the -m740 instructions set. Later 6502dtv support was also added. - -Still to do is to find a way to implement an opcode testcase for the 65816 -processor, since it's capable of executing instructions with an 8-bit and -a 16-bit operator alike, distinguished by only one processor flag. +these go into opcodes/. Refer to opcodes/readme.txt CPU Detect Tests ---------------- -These tests all assemble the same file "cpudetect.s" which contains several -conditionals for several CPUs, only using every option known to the "--cpu" -command-line switch of ca65/cl65. +these go into cpudetect/. Refer to cpudetect/readme.txt -Reference (".ref") Files ------------------------- +Overall tests: +-------------- -Some hints about creating new files: -Make an empty file with the CPU's name prepended to "-cpudetect.ref". Run the -tests; one of them will fail due to a mismatch. Review the output of the -".lst" file pedantically, then copy the ".bin" over the empty ".ref" file. +These go into listing/. Refer to listing/readme.txt From 49b4a57add8029ce1f2cc270c3689def36bb2cbb Mon Sep 17 00:00:00 2001 From: empathicqubit <empathicqubit@entan.gl> Date: Sun, 20 Feb 2022 11:44:08 +0100 Subject: [PATCH 1097/2710] Documentation --- doc/cc65.sgml | 183 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 821e76586..94d9b8a48 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -198,6 +198,189 @@ Here is a description of all the command line options: Enables debug mode, for debugging the behavior of cc65. + <tag><tt>--debug-tables name</tt></tag> + + Writes symbol table information to a file, which includes details on structs, unions + functions, and global variables. For example, given the following code: + + <tscreen><verb> + struct l { + unsigned char m; + unsigned char n; + }; + + struct hello { + unsigned char j; + unsigned char k; + struct l l; + }; + + struct sub { + unsigned char x; + unsigned char y; + }; + + union xy { + struct sub xy; + unsigned int mem; + }; + + typedef struct hello thingy; + + unsigned char single; + + unsigned char test_local_vars_main(void) { + static unsigned char wahoo; + static unsigned char bonanza = 0x42; + unsigned char i; + unsigned int j; + unsigned int *random; + unsigned char *lol; + signed char whoa; + struct hello wow; + thingy *cool; + union xy xy; + + return 0; + } + </verb></tscreen> + + The following output would be produced: + + <tscreen><verb> + SC_FUNC: _test_local_vars_main: Symbol table + ============================================ + __fixargs__: + Flags: SC_CONST SC_DEF + Type: unsigned int + __argsize__: + Flags: SC_CONST SC_DEF + Type: unsigned char + wahoo: + AsmName: M0001 + Flags: SC_STATIC SC_DEF SC_REF + Type: unsigned char + bonanza: + AsmName: M0002 + Flags: SC_STATIC SC_DEF SC_REF + Type: unsigned char + i: + Flags: SC_AUTO SC_DEF SC_REF + Type: unsigned char + j: + Flags: SC_AUTO SC_DEF SC_REF + Type: unsigned int + random: + Flags: SC_AUTO SC_DEF SC_REF + Type: unsigned int * + lol: + Flags: SC_AUTO SC_DEF SC_REF + Type: unsigned char * + whoa: + Flags: SC_AUTO SC_DEF SC_REF + Type: signed char + wow: + Flags: SC_AUTO SC_DEF SC_REF + Type: struct hello + cool: + Flags: SC_AUTO SC_DEF SC_REF + Type: struct hello * + xy: + Flags: SC_AUTO SC_DEF SC_REF + Type: union xy + + + + + Global symbol table + =================== + thingy: + AsmName: _thingy + Flags: SC_TYPEDEF 0x100000 + Type: struct hello + single: + AsmName: _single + Flags: SC_STATIC SC_EXTERN SC_STORAGE SC_DEF SC_REF 0x100000 + Type: unsigned char + test_local_vars_main: + AsmName: _test_local_vars_main + Flags: SC_FUNC SC_STATIC SC_EXTERN SC_DEF 0x100000 + Type: unsigned char (void) + + + + + Global tag table + ================ + l: + Flags: SC_STRUCT SC_DEF + Type: (none) + hello: + Flags: SC_STRUCT SC_DEF + Type: (none) + sub: + Flags: SC_STRUCT SC_DEF + Type: (none) + xy: + Flags: SC_UNION SC_DEF + Type: (none) + + + + + Global struct and union definitions + ========================= + + SC_STRUCT: l + ============ + m: + Flags: SC_STRUCTFIELD + Type: unsigned char + n: + Flags: SC_STRUCTFIELD + Type: unsigned char + + + + + SC_STRUCT: hello + ================ + j: + Flags: SC_STRUCTFIELD + Type: unsigned char + k: + Flags: SC_STRUCTFIELD + Type: unsigned char + l: + Flags: SC_STRUCTFIELD + Type: struct l + + + + + SC_STRUCT: sub + ============== + x: + Flags: SC_STRUCTFIELD + Type: unsigned char + y: + Flags: SC_STRUCTFIELD + Type: unsigned char + + + + + SC_UNION: xy + ============ + xy: + Flags: SC_STRUCTFIELD + Type: struct sub + mem: + Flags: SC_STRUCTFIELD + Type: unsigned int + </verb></tscreen> + + <tag><tt>--debug-opt name</tt></tag> The named file contains a list of specific optimization steps to enable or disable. From 02a46e02379dbeb86dc6b44bbcfa6d6fa1267528 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 20 Feb 2022 16:49:01 +0100 Subject: [PATCH 1098/2710] do not use cl65 to prevent tests from failing randomly because of one process deleting the temp files from another --- targettest/accelerator/Makefile | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/targettest/accelerator/Makefile b/targettest/accelerator/Makefile index a46ec43c0..bcddac1fa 100644 --- a/targettest/accelerator/Makefile +++ b/targettest/accelerator/Makefile @@ -1,3 +1,7 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= c64 + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -54,10 +58,18 @@ else endif c64-scpu-test.prg: c64-c128-scpu-test.c - $(CL) -t c64 c64-c128-scpu-test.c -o c64-scpu-test.prg +# do not use cl65 to prevent tests from failing randomly because of one process +# deleting the temp files from another +# $(CL) -t c64 c64-c128-scpu-test.c -o c64-scpu-test.prg + $(CC) -t c64 c64-c128-scpu-test.c -o c64-scpu-test.s + $(CL) -t c64 c64-scpu-test.s -o c64-scpu-test.prg c128-scpu-test.prg: c64-c128-scpu-test.c - $(CL) -t c128 c64-c128-scpu-test.c -o c128-scpu-test.prg +# do not use cl65 to prevent tests from failing randomly because of one process +# deleting the temp files from another +# $(CL) -t c128 c64-c128-scpu-test.c -o c128-scpu-test.prg + $(CC) -t c128 c64-c128-scpu-test.c -o c128-scpu-test.s + $(CL) -t c128 c128-scpu-test.s -o c128-scpu-test.prg c64dtv-test.prg: c64dtv-test.c $(CL) -t c64 c64dtv-test.c -o c64dtv-test.prg @@ -79,3 +91,4 @@ turbomaster-test.prg: turbomaster-test.c clean: @$(DEL) *.prg 2>$(NULLDEV) + @$(DEL) *.s 2>$(NULLDEV) From 2bf8be5b3bd1b3f9f784464a3568c9e507604735 Mon Sep 17 00:00:00 2001 From: Jeff Tranter <tranter@pobox.com> Date: Mon, 21 Feb 2022 15:44:31 -0500 Subject: [PATCH 1099/2710] Fix some commonly made spelling errors in comments. --- asminc/telestrat.inc | 2 +- doc/apple2.sgml | 2 +- doc/apple2enh.sgml | 2 +- doc/c64.sgml | 2 +- doc/ca65.sgml | 8 ++++---- doc/funcref.sgml | 2 +- include/_atarios.h | 2 +- include/cc65.h | 10 +++++----- libsrc/apple2/exec.s | 6 +++--- libsrc/c128/emd/c128-reu.s | 2 +- libsrc/c64/emd/c64-reu.s | 2 +- libsrc/cbm/open.s | 4 ++-- libsrc/common/freopen.c | 2 +- libsrc/common/itoa.s | 2 +- libsrc/common/ltoa.s | 2 +- libsrc/dbg/dbgsupp.s | 2 +- libsrc/telestrat/gotoxy.s | 2 +- libsrc/telestrat/tgi/telestrat-228-200-3.s | 2 +- libsrc/telestrat/tgi/telestrat-240-200-2.s | 2 +- libsrc/tgi/tgi_clippedline.s | 8 ++++---- libsrc/tgi/tgi_imulround.s | 2 +- libsrc/tgi/tgi_vectorchar.s | 6 +++--- samples/geos/grc/Makefile | 4 ++-- samples/multidemo.c | 2 +- samples/overlaydemo.c | 2 +- src/ca65/expr.c | 2 +- src/ca65/expr.h | 2 +- src/ca65/lineinfo.c | 2 +- src/ca65/macro.c | 2 +- src/ca65/studyexpr.c | 4 ++-- src/cc65/casenode.c | 2 +- src/cc65/casenode.h | 2 +- src/cc65/codegen.c | 2 +- src/cc65/codegen.h | 2 +- src/cc65/expr.c | 2 +- src/cl65/main.c | 4 ++-- src/common/fp.c | 4 ++-- src/common/fp.h | 4 ++-- targettest/ft.c | 2 +- test/val/cc65150311.c | 2 +- test/val/sub1.c | 2 +- test/val/sub2.c | 2 +- 42 files changed, 62 insertions(+), 62 deletions(-) diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index 7d4c1e31d..79ac2d566 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -275,7 +275,7 @@ XFWRITE = $3B ; Only in TELEMON 3.x write file (bank 7 of Orix ; Clock primitive XRECLK = $3C ; Reset clock XCLCL = $3D ; Close clock -XWRCLK = $3E ; Displays clock in the adress in A & Y registers +XWRCLK = $3E ; Displays clock in the address in A & Y registers ; Sound primitives XSONPS = $40 ; Send data to PSG register (14 values) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index 09052ade1..63b40c6f8 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -370,7 +370,7 @@ The names in the parentheses denote the symbols to be used for static linking of In memory constrained situations the memory from $803 to $1FFF can be made available to a program by calling <tt/_heapadd ((void *) 0x0803, 0x17FD);/ at the beginning of <tt/main()/. Doing so is beneficial even if the program - doesn't use the the heap explicitly because loading the driver (and in fact + doesn't use the heap explicitly because loading the driver (and in fact already opening the driver file) uses the heap implicitly. </descrip><p> diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index a105cb47a..15ceed04f 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -376,7 +376,7 @@ The names in the parentheses denote the symbols to be used for static linking of In memory constrained situations the memory from $803 to $1FFF can be made available to a program by calling <tt/_heapadd ((void *) 0x0803, 0x17FD);/ at the beginning of <tt/main()/. Doing so is beneficial even if the program - doesn't use the the heap explicitly because loading the driver (and in fact + doesn't use the heap explicitly because loading the driver (and in fact already opening the driver file) uses the heap implicitly. </descrip><p> diff --git a/doc/c64.sgml b/doc/c64.sgml index de37ed4b7..8c1b3754e 100644 --- a/doc/c64.sgml +++ b/doc/c64.sgml @@ -126,7 +126,7 @@ and $FF3F. In memory constrained situations the memory from $400 to $7FF can be made available to a program by calling <tt/_heapadd ((void *) 0x0400, 0x0400);/ at the beginning of <tt/main()/. Doing so is beneficial even if the program -doesn't use the the heap explicitly because loading a driver uses the heap implicitly. +doesn't use the heap explicitly because loading a driver uses the heap implicitly. Using <tt/c64-soft80.o/ is as simple as placing it on the linker command line like this: diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 309fbf28d..de30f4147 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -3108,7 +3108,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.IFDEF</tt><label id=".IFDEF"><p> Conditional assembly: Check if a symbol is defined. Must be followed by - a symbol name. The condition is true if the the given symbol is already + a symbol name. The condition is true if the given symbol is already defined, and false otherwise. See also: <tt><ref id=".DEFINED" name=".DEFINED"></tt> @@ -3143,7 +3143,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.IFNDEF</tt><label id=".IFNDEF"><p> Conditional assembly: Check if a symbol is defined. Must be followed by - a symbol name. The condition is true if the the given symbol is not + a symbol name. The condition is true if the given symbol is not defined, and false otherwise. See also: <tt><ref id=".DEFINED" name=".DEFINED"></tt> @@ -3152,7 +3152,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.IFNREF</tt><label id=".IFNREF"><p> Conditional assembly: Check if a symbol is referenced. Must be followed - by a symbol name. The condition is true if if the the given symbol was + by a symbol name. The condition is true if if the given symbol was not referenced before, and false otherwise. See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt> @@ -3197,7 +3197,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.IFREF</tt><label id=".IFREF"><p> Conditional assembly: Check if a symbol is referenced. Must be followed - by a symbol name. The condition is true if if the the given symbol was + by a symbol name. The condition is true if if the given symbol was referenced before, and false otherwise. This command may be used to build subroutine libraries in include files diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 1a9dcaa77..a8593ebb5 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -6127,7 +6127,7 @@ pointer you're passing somewhere else, otherwise <tscreen><verb> ptr = realloc (ptr, size); </verb></tscreen> -will loose your only copy of <tt/ptr/ if <tt/realloc/ returns <tt/NULL/. +will lose your only copy of <tt/ptr/ if <tt/realloc/ returns <tt/NULL/. <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> diff --git a/include/_atarios.h b/include/_atarios.h index 5e1374fa5..986092659 100644 --- a/include/_atarios.h +++ b/include/_atarios.h @@ -105,7 +105,7 @@ struct __dos2x { unsigned char* zbufp; /* points to user filename */ unsigned char* zdrva; /* points to serveral buffers (mostly VTOC) */ unsigned char* zsba; /* points to sector buffer */ - unsigned char errno; /* number of occured error */ + unsigned char errno; /* number of occurred error */ }; typedef struct __dos2x dos2x_t; diff --git a/include/cc65.h b/include/cc65.h index 7e9c2cae2..2b05cc17a 100644 --- a/include/cc65.h +++ b/include/cc65.h @@ -59,21 +59,21 @@ unsigned long __fastcall__ udiv32by16r16 (unsigned long rhs, unsigned lhs); */ int __fastcall__ imul8x8r16 (signed char lhs, signed char rhs); -/* Multiplicate two signed 8 bit to yield an signed 16 bit result */ +/* Multiply two signed 8 bit to yield an signed 16 bit result */ long __fastcall__ imul16x16r32 (int lhs, int rhs); -/* Multiplicate two signed 16 bit to yield a signed 32 bit result */ +/* Multiply two signed 16 bit to yield a signed 32 bit result */ unsigned __fastcall__ umul8x8r16 (unsigned char lhs, unsigned char rhs); -/* Multiplicate two unsigned 8 bit to yield an unsigned 16 bit result */ +/* Multiply two unsigned 8 bit to yield an unsigned 16 bit result */ unsigned long __fastcall__ umul16x8r32 (unsigned lhs, unsigned char rhs); -/* Multiplicate an unsigned 16 bit by an unsigned 8 bit number yielding a 24 +/* Multiply an unsigned 16 bit by an unsigned 8 bit number yielding a 24 ** bit unsigned result that is extended to 32 bits for easier handling from C. */ unsigned long __fastcall__ umul16x16r32 (unsigned lhs, unsigned rhs); -/* Multiplicate two unsigned 16 bit to yield an unsigned 32 bit result */ +/* Multiply two unsigned 16 bit to yield an unsigned 32 bit result */ unsigned int __fastcall__ mul20 (unsigned char value); /* Multiply an 8 bit unsigned value by 20 and return the 16 bit unsigned diff --git a/libsrc/apple2/exec.s b/libsrc/apple2/exec.s index c0cd98650..9212ecb8a 100644 --- a/libsrc/apple2/exec.s +++ b/libsrc/apple2/exec.s @@ -129,7 +129,7 @@ setbuf: lda #$00 ; Low byte .assert MLI::OPEN::PATHNAME = MLI::INFO::PATHNAME, error ; Lower file level to avoid program file - ; being closed by C libary shutdown code + ; being closed by C library shutdown code ldx LEVEL stx level beq :+ @@ -185,13 +185,13 @@ setbuf: lda #$00 ; Low byte lda #$00 ; '\0' beq :- ; Branch always - ; Call loader stub after C libary shutdown + ; Call loader stub after C library shutdown : lda #<target ldx #>target sta done+1 stx done+2 - ; Initiate C libary shutdown + ; Initiate C library shutdown jmp _exit .bss diff --git a/libsrc/c128/emd/c128-reu.s b/libsrc/c128/emd/c128-reu.s index 3ded00d67..84e7cb695 100644 --- a/libsrc/c128/emd/c128-reu.s +++ b/libsrc/c128/emd/c128-reu.s @@ -72,7 +72,7 @@ reu_params: .word $0000 ; Host address, lo, hi .byte $00 ; Expansion bank no. .word $0000 ; # bytes to move, lo, hi .byte $00 ; Interrupt mask reg. - .byte $00 ; Adress control reg. + .byte $00 ; Address control reg. .code diff --git a/libsrc/c64/emd/c64-reu.s b/libsrc/c64/emd/c64-reu.s index a563305ce..07ac1fbed 100644 --- a/libsrc/c64/emd/c64-reu.s +++ b/libsrc/c64/emd/c64-reu.s @@ -73,7 +73,7 @@ reu_params: .word $0000 ; Host address, lo, hi .byte $00 ; Expansion bank no. .word $0000 ; # bytes to move, lo, hi .byte $00 ; Interrupt mask reg. - .byte $00 ; Adress control reg. + .byte $00 ; Address control reg. .code diff --git a/libsrc/cbm/open.s b/libsrc/cbm/open.s index 317f9eaa2..e9f0237cc 100644 --- a/libsrc/cbm/open.s +++ b/libsrc/cbm/open.s @@ -130,7 +130,7 @@ dowrite: beq notrunc jsr scratch -; Complete the the file name. Check for append mode here. +; Complete the file name. Check for append mode here. notrunc: lda tmp3 ; Get the mode again @@ -168,7 +168,7 @@ nofile: ; ... else use SA=0 (read) jsr OPEN bcs oserror -; Open the the drive command channel and read it +; Open the drive command channel and read it ldx fnunit jsr opencmdchannel diff --git a/libsrc/common/freopen.c b/libsrc/common/freopen.c index d79d3cf15..41b0b094b 100644 --- a/libsrc/common/freopen.c +++ b/libsrc/common/freopen.c @@ -31,7 +31,7 @@ FILE* __fastcall__ freopen (const char* name, const char* mode, FILE* f) ** overwritten by _fopen. */ if (close (f->f_fd) < 0) { - /* An error occured, errno is already set */ + /* An error occurred, errno is already set */ return 0; } diff --git a/libsrc/common/itoa.s b/libsrc/common/itoa.s index 176bc2ddd..808f9bc33 100644 --- a/libsrc/common/itoa.s +++ b/libsrc/common/itoa.s @@ -19,7 +19,7 @@ specval: ; Common subroutine to pop the parameters and put them into core ; -dopop: sta tmp1 ; will loose high byte +dopop: sta tmp1 ; will lose high byte ldy #0 lda (sp),y sta ptr2 diff --git a/libsrc/common/ltoa.s b/libsrc/common/ltoa.s index 54b693ecc..d8d8c988d 100644 --- a/libsrc/common/ltoa.s +++ b/libsrc/common/ltoa.s @@ -18,7 +18,7 @@ ; Common subroutine to pop the parameters and put them into core ; -dopop: sta tmp1 ; will loose high byte +dopop: sta tmp1 ; will lose high byte jsr popax ; get s to ptr2 sta ptr2 stx ptr2+1 diff --git a/libsrc/dbg/dbgsupp.s b/libsrc/dbg/dbgsupp.s index 07ab9e25a..b1f122013 100644 --- a/libsrc/dbg/dbgsupp.s +++ b/libsrc/dbg/dbgsupp.s @@ -58,7 +58,7 @@ DbgBreak: .res 256 DbgStack: -; Swap space for the the C temporaries +; Swap space for the C temporaries CTemp: _DbgCS: .res 2 ; sp diff --git a/libsrc/telestrat/gotoxy.s b/libsrc/telestrat/gotoxy.s index ea7ed5623..3fbdc25e0 100644 --- a/libsrc/telestrat/gotoxy.s +++ b/libsrc/telestrat/gotoxy.s @@ -24,7 +24,7 @@ gotoxy: jsr popa ; Get Y jsr popa sta SCRX -; Update adress video ram position when SCRY is modified (update_adscr) +; Update address video ram position when SCRY is modified (update_adscr) ; Fall through .endproc diff --git a/libsrc/telestrat/tgi/telestrat-228-200-3.s b/libsrc/telestrat/tgi/telestrat-228-200-3.s index 34af597eb..7eda27bc9 100644 --- a/libsrc/telestrat/tgi/telestrat-228-200-3.s +++ b/libsrc/telestrat/tgi/telestrat-228-200-3.s @@ -379,7 +379,7 @@ out: tya tax - lda ptr3 ; XSCHAR needs in A and Y the adress of the string + lda ptr3 ; XSCHAR needs in A and Y the address of the string ldy ptr3+1 BRK_TELEMON(XSCHAR) rts diff --git a/libsrc/telestrat/tgi/telestrat-240-200-2.s b/libsrc/telestrat/tgi/telestrat-240-200-2.s index 345f80e0e..7a6bb8a4c 100644 --- a/libsrc/telestrat/tgi/telestrat-240-200-2.s +++ b/libsrc/telestrat/tgi/telestrat-240-200-2.s @@ -372,7 +372,7 @@ out: tya tax - lda ptr3 ; XSCHAR needs in A and Y the adress of the string + lda ptr3 ; XSCHAR needs in A and Y the address of the string ldy ptr3+1 BRK_TELEMON(XSCHAR) rts diff --git a/libsrc/tgi/tgi_clippedline.s b/libsrc/tgi/tgi_clippedline.s index b32b819ec..b0f1dd456 100644 --- a/libsrc/tgi/tgi_clippedline.s +++ b/libsrc/tgi/tgi_clippedline.s @@ -159,7 +159,7 @@ tgi_clip_sign: .res 1 ;---------------------------------------------------------------------------- -; Multiplicate value in y/a by dy, then divide by dx. +; Multiply value in y/a by dy, then divide by dx. ; .code @@ -176,7 +176,7 @@ tgi_clip_sign: .res 1 lda tgi_clip_dy ldx tgi_clip_dy+1 ; rhs - jsr umul16x16r32 ; Multiplicate + jsr umul16x16r32 ; Multiply ; Move the result of the multiplication into ptr1:ptr2 @@ -199,7 +199,7 @@ done: bit tmp1 ;---------------------------------------------------------------------------- -; Multiplicate value in y/a by dx, then divide by dy. +; Multiply value in y/a by dx, then divide by dy. ; .code @@ -216,7 +216,7 @@ done: bit tmp1 lda tgi_clip_dx ldx tgi_clip_dx+1 ; rhs - jsr umul16x16r32 ; Multiplicate + jsr umul16x16r32 ; Multiply ; Move the result of the multiplication into ptr1:ptr2 diff --git a/libsrc/tgi/tgi_imulround.s b/libsrc/tgi/tgi_imulround.s index 238c69fc8..112f2930f 100644 --- a/libsrc/tgi/tgi_imulround.s +++ b/libsrc/tgi/tgi_imulround.s @@ -33,7 +33,7 @@ _tgi_imulround: ; ASM callable entry point tgi_imulround: -; Multiplicate +; Multiply jsr imul16x16r32 diff --git a/libsrc/tgi/tgi_vectorchar.s b/libsrc/tgi/tgi_vectorchar.s index bd4cc84c4..3e5e6a3dc 100644 --- a/libsrc/tgi/tgi_vectorchar.s +++ b/libsrc/tgi/tgi_vectorchar.s @@ -79,9 +79,9 @@ GetProcessedCoord: jsr GetOp -; Multiplicate with the scale factor. +; Multiply with the scale factor. - jmp tgi_imulround ; Multiplicate, round and scale + jmp tgi_imulround ; Multiply, round and scale ;---------------------------------------------------------------------------- ; Add the base coordinate with offset in Y to the value in A/X @@ -133,7 +133,7 @@ GetProcessedCoord: .code .proc _tgi_vectorchar -; Multiplicate the char value by two and save into Y +; Multiply the char value by two and save into Y asl a tay diff --git a/samples/geos/grc/Makefile b/samples/geos/grc/Makefile index 9dd9ebc5e..ef30a6e03 100644 --- a/samples/geos/grc/Makefile +++ b/samples/geos/grc/Makefile @@ -53,7 +53,7 @@ test.s: test.grc $(GRC) -s test.s test.grc vlir.cvt: vlir.grc vlir0.s vlir1.s vlir2.s -# using seperate calls here for demonstration purposes: +# using separate calls here for demonstration purposes: $(GRC) -t $(SYS) -s vlir.s vlir.grc $(AS) -t $(SYS) vlir.s $(AS) -t $(SYS) vlir0.s @@ -63,7 +63,7 @@ vlir.cvt: vlir.grc vlir0.s vlir1.s vlir2.s # you can also do the above in one command: # $(CL) -t $(SYS) -o vlir.cvt vlir.grc vlir0.s vlir1.s vlir2.s - + clean: @$(DEL) test.s test.h 2>$(NULLDEV) @$(DEL) vlir.s vlir.cvt vlir.c vlir.h 2>$(NULLDEV) diff --git a/samples/multidemo.c b/samples/multidemo.c index 396d7344a..02bb6fcac 100644 --- a/samples/multidemo.c +++ b/samples/multidemo.c @@ -237,7 +237,7 @@ void main (void) /* The linker makes sure that the call to foo() ends up at the right mem ** addr. However it's up to user to make sure that the - right - overlay - ** is actually loaded before making the the call. + ** is actually loaded before making the call. */ foo (); } diff --git a/samples/overlaydemo.c b/samples/overlaydemo.c index 7553f3d0e..dde6b70ab 100644 --- a/samples/overlaydemo.c +++ b/samples/overlaydemo.c @@ -112,7 +112,7 @@ void main (void) /* The linker makes sure that the call to foo() ends up at the right mem ** addr. However it's up to user to make sure that the - right - overlay - ** is actually loaded before making the the call. + ** is actually loaded before making the call. */ foo (); } diff --git a/src/ca65/expr.c b/src/ca65/expr.c index 74133d533..812b6e90c 100644 --- a/src/ca65/expr.c +++ b/src/ca65/expr.c @@ -1708,7 +1708,7 @@ ExprNode* GenLiteralExpr (long Val) ExprNode* GenLiteral0 (void) -/* Return an expression tree that encodes the the number zero */ +/* Return an expression tree that encodes the number zero */ { return GenLiteralExpr (0); } diff --git a/src/ca65/expr.h b/src/ca65/expr.h index 16dffd901..b18fabb01 100644 --- a/src/ca65/expr.h +++ b/src/ca65/expr.h @@ -81,7 +81,7 @@ ExprNode* GenLiteralExpr (long Val); /* Return an expression tree that encodes the given literal value */ ExprNode* GenLiteral0 (void); -/* Return an expression tree that encodes the the number zero */ +/* Return an expression tree that encodes the number zero */ ExprNode* GenSymExpr (struct SymEntry* Sym); /* Return an expression node that encodes the given symbol */ diff --git a/src/ca65/lineinfo.c b/src/ca65/lineinfo.c index e6707dac4..4f29a29d2 100644 --- a/src/ca65/lineinfo.c +++ b/src/ca65/lineinfo.c @@ -429,7 +429,7 @@ void ReleaseFullLineInfo (Collection* LineInfos) /* Walk over all entries */ for (I = 0; I < CollCount (LineInfos); ++I) { - /* Release the the line info */ + /* Release the line info */ ReleaseLineInfo (CollAt (LineInfos, I)); } diff --git a/src/ca65/macro.c b/src/ca65/macro.c index d6c807035..0bdc89b5b 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -637,7 +637,7 @@ void MacUndef (const StrBuf* Name, unsigned char Style) static int MacExpand (void* Data) -/* If we're currently expanding a macro, set the the scanner token and +/* If we're currently expanding a macro, set the scanner token and ** attribute to the next value and return true. If we are not expanding ** a macro, return false. */ diff --git a/src/ca65/studyexpr.c b/src/ca65/studyexpr.c index 6d8734c9e..2a345a07c 100644 --- a/src/ca65/studyexpr.c +++ b/src/ca65/studyexpr.c @@ -711,7 +711,7 @@ static void StudyMul (ExprNode* Expr, ExprDesc* D) */ if (ED_IsConst (D) && ED_IsValid (&Right)) { - /* Multiplicate both, result goes into Right */ + /* Multiply both, result goes into Right */ ED_Mul (&Right, D); /* Move result into D */ @@ -719,7 +719,7 @@ static void StudyMul (ExprNode* Expr, ExprDesc* D) } else if (ED_IsConst (&Right) && ED_IsValid (D)) { - /* Multiplicate both */ + /* Multiply both */ ED_Mul (D, &Right); } else { diff --git a/src/cc65/casenode.c b/src/cc65/casenode.c index f5e751f08..e7da64995 100644 --- a/src/cc65/casenode.c +++ b/src/cc65/casenode.c @@ -95,7 +95,7 @@ void FreeCaseNodeColl (Collection* Nodes) int SearchCaseNode (const Collection* Nodes, unsigned char Key, int* Index) /* Search for a node in the given collection. If the node has been found, ** set Index to the index of the node and return true. If the node was not -** found, set Index the the insertion position of the node and return +** found, set Index the insertion position of the node and return ** false. */ { diff --git a/src/cc65/casenode.h b/src/cc65/casenode.h index aef546f19..df80e62fd 100644 --- a/src/cc65/casenode.h +++ b/src/cc65/casenode.h @@ -116,7 +116,7 @@ void FreeCaseNodeColl (Collection* Nodes); int SearchCaseNode (const Collection* Nodes, unsigned char Key, int* Index); /* Search for a node in the given collection. If the node has been found, ** set Index to the index of the node and return true. If the node was not -** found, set Index the the insertion position of the node and return +** found, set Index to the insertion position of the node and return ** false. */ diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index cf10314b9..3a98f5e63 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -1409,7 +1409,7 @@ static unsigned g_intpromotion (unsigned flags) unsigned g_typeadjust (unsigned lhs, unsigned rhs) /* Adjust the integer operands before doing a binary operation. lhs is a flags ** value, that corresponds to the value on TOS, rhs corresponds to the value -** in (e)ax. The return value is the the flags value for the resulting type. +** in (e)ax. The return value is the flags value for the resulting type. */ { /* Get the type spec from the flags */ diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index d6d3d2370..b0cf9858d 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -217,7 +217,7 @@ void g_reglong (unsigned Flags); unsigned g_typeadjust (unsigned lhs, unsigned rhs); /* Adjust the integer operands before doing a binary operation. lhs is a flags ** value, that corresponds to the value on TOS, rhs corresponds to the value -** in (e)ax. The return value is the the flags value for the resulting type. +** in (e)ax. The return value is the flags value for the resulting type. */ unsigned g_typecast (unsigned lhs, unsigned rhs); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 3b9307a37..8c1ce6bcb 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -846,7 +846,7 @@ static unsigned FunctionArgList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) /* The function returns the size of all arguments pushed onto the stack. ** However, if there are parameters missed (which is an error, and was ** flagged by the compiler), AND a stack frame was preallocated above, - ** we would loose track of the stackpointer, and generate an internal error + ** we would lose track of the stackpointer, and generate an internal error ** later. So we correct the value by the parameters that should have been ** pushed into, to avoid an internal compiler error. Since an error was ** generated before, no code will be output anyway. diff --git a/src/cl65/main.c b/src/cl65/main.c index dba4915f2..023e111e0 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -538,7 +538,7 @@ static void AssembleFile (const char* File, unsigned ArgCount) /* Check if this is the last processing step */ if (DoLink) { /* We're linking later. Add the output file of the assembly - ** the the file list of the linker. The name of the output + ** to the file list of the linker. The name of the output ** file is that of the input file with ".s" replaced by ".o". */ char* ObjName = MakeFilename (File, ".o"); @@ -1627,7 +1627,7 @@ int main (int argc, char* argv []) break; case FILETYPE_O65: - /* Add the the object file converter files */ + /* Add the object file converter files */ ConvertO65 (Arg); break; diff --git a/src/common/fp.c b/src/common/fp.c index 0c4d2790c..0682f9f9e 100644 --- a/src/common/fp.c +++ b/src/common/fp.c @@ -134,7 +134,7 @@ Float FP_F_Sub (Float Left, Float Right) Float FP_F_Mul (Float Left, Float Right) -/* Multiplicate two floats */ +/* Multiply two floats */ { Float D; D.V = Left.V * Right.V; @@ -220,7 +220,7 @@ Double FP_D_Sub (Double Left, Double Right) Double FP_D_Mul (Double Left, Double Right) -/* Multiplicate two floats */ +/* Multiply two floats */ { Double D; D.V = Left.V * Right.V; diff --git a/src/common/fp.h b/src/common/fp.h index 978359b8b..4e89e2316 100644 --- a/src/common/fp.h +++ b/src/common/fp.h @@ -102,7 +102,7 @@ Float FP_F_Sub (Float Left, Float Right); /* Subtract two floats */ Float FP_F_Mul (Float Left, Float Right); -/* Multiplicate two floats */ +/* Multiply two floats */ Float FP_F_Div (Float Left, Float Right); /* Divide two floats */ @@ -129,7 +129,7 @@ Double FP_D_Sub (Double Left, Double Right); /* Subtract two floats */ Double FP_D_Mul (Double Left, Double Right); -/* Multiplicate two floats */ +/* Multiply two floats */ Double FP_D_Div (Double Left, Double Right); /* Divide two floats */ diff --git a/targettest/ft.c b/targettest/ft.c index 880df6369..3dfa0e37b 100644 --- a/targettest/ft.c +++ b/targettest/ft.c @@ -8,7 +8,7 @@ ** ** The program asks for a filename (if it hasn't ** got one from argv). I then opens the file, -** reads the the first 16 bytes and displays them +** reads the first 16 bytes and displays them ** (as hex values). ** The values of sp (cc65 runtime stack pointer) ** are displayed at some places. The displayed diff --git a/test/val/cc65150311.c b/test/val/cc65150311.c index cd644f491..10676d679 100644 --- a/test/val/cc65150311.c +++ b/test/val/cc65150311.c @@ -20,7 +20,7 @@ int main(void) { n = (p == &func); n = (p == func); -/* the following are not valid C and should go into seperate tests that MUST fail */ +/* the following are not valid C and should go into separate tests that MUST fail */ /* ++p; n = (p > &func); diff --git a/test/val/sub1.c b/test/val/sub1.c index 5dbba97df..06e5cf463 100644 --- a/test/val/sub1.c +++ b/test/val/sub1.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! Substraction Test + !!DESCRIPTION!! Subtraction Test !!ORIGIN!! SDCC regression tests !!LICENCE!! GPL, read COPYING.GPL */ diff --git a/test/val/sub2.c b/test/val/sub2.c index 835e65733..d3ea2a05b 100644 --- a/test/val/sub2.c +++ b/test/val/sub2.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! Substraction Test + !!DESCRIPTION!! Subtraction Test !!ORIGIN!! SDCC regression tests !!LICENCE!! GPL, read COPYING.GPL */ From 5d8cf4ec4849fd1f32b78ce7a3f7af71be9e986c Mon Sep 17 00:00:00 2001 From: Jeff Tranter <tranter@pobox.com> Date: Mon, 21 Feb 2022 15:54:47 -0500 Subject: [PATCH 1100/2710] A couple of addtional fixes. --- doc/ca65.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index de30f4147..8797f2c60 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -3152,7 +3152,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.IFNREF</tt><label id=".IFNREF"><p> Conditional assembly: Check if a symbol is referenced. Must be followed - by a symbol name. The condition is true if if the given symbol was + by a symbol name. The condition is true if the given symbol was not referenced before, and false otherwise. See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt> @@ -3197,7 +3197,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.IFREF</tt><label id=".IFREF"><p> Conditional assembly: Check if a symbol is referenced. Must be followed - by a symbol name. The condition is true if if the given symbol was + by a symbol name. The condition is true if the given symbol was referenced before, and false otherwise. This command may be used to build subroutine libraries in include files From a49bf13b2533e1924becce08ed6447135f76e666 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 21 Feb 2022 15:46:13 -0500 Subject: [PATCH 1101/2710] Reverted "do not use cl65 to prevent tests from failing randomly because of one process deleting the temp files from another". This reverted commit 02a46e02379dbeb86dc6b44bbcfa6d6fa1267528. That commit didn't fix the real bug (a program name in the wrong list). --- targettest/accelerator/Makefile | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/targettest/accelerator/Makefile b/targettest/accelerator/Makefile index bcddac1fa..a46ec43c0 100644 --- a/targettest/accelerator/Makefile +++ b/targettest/accelerator/Makefile @@ -1,7 +1,3 @@ -# Run 'make SYS=<target>'; or, set a SYS env. -# var. to build for another target system. -SYS ?= c64 - # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -58,18 +54,10 @@ else endif c64-scpu-test.prg: c64-c128-scpu-test.c -# do not use cl65 to prevent tests from failing randomly because of one process -# deleting the temp files from another -# $(CL) -t c64 c64-c128-scpu-test.c -o c64-scpu-test.prg - $(CC) -t c64 c64-c128-scpu-test.c -o c64-scpu-test.s - $(CL) -t c64 c64-scpu-test.s -o c64-scpu-test.prg + $(CL) -t c64 c64-c128-scpu-test.c -o c64-scpu-test.prg c128-scpu-test.prg: c64-c128-scpu-test.c -# do not use cl65 to prevent tests from failing randomly because of one process -# deleting the temp files from another -# $(CL) -t c128 c64-c128-scpu-test.c -o c128-scpu-test.prg - $(CC) -t c128 c64-c128-scpu-test.c -o c128-scpu-test.s - $(CL) -t c128 c128-scpu-test.s -o c128-scpu-test.prg + $(CL) -t c128 c64-c128-scpu-test.c -o c128-scpu-test.prg c64dtv-test.prg: c64dtv-test.c $(CL) -t c64 c64dtv-test.c -o c64dtv-test.prg @@ -91,4 +79,3 @@ turbomaster-test.prg: turbomaster-test.c clean: @$(DEL) *.prg 2>$(NULLDEV) - @$(DEL) *.s 2>$(NULLDEV) From 39df6f8f66365c4086fec82d14d2352f1dff93df Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 21 Feb 2022 16:07:22 -0500 Subject: [PATCH 1102/2710] Made the c128, not the c64, target build the c128 version of "c64-c128-scpu-test.c". Its placement in the wrong list caused a parallel race condition that sometimes led to failed test builds. --- targettest/accelerator/Makefile | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/targettest/accelerator/Makefile b/targettest/accelerator/Makefile index a46ec43c0..dd5011459 100644 --- a/targettest/accelerator/Makefile +++ b/targettest/accelerator/Makefile @@ -1,3 +1,7 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= c64 + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -28,16 +32,16 @@ endif EXELIST_c64 = \ c64-scpu-test.prg \ - c128-scpu-test.prg \ c64dtv-test.prg \ - c64-c128-test.prg \ + c64-test.prg \ chameleon-test.prg \ c65-test.prg \ turbomaster-test.prg - + EXELIST_c128 = \ + c128-scpu-test.prg \ c128-test.prg - + ifneq ($(EXELIST_$(SYS)),) testcode: $(EXELIST_$(SYS)) else @@ -62,8 +66,8 @@ c128-scpu-test.prg: c64-c128-scpu-test.c c64dtv-test.prg: c64dtv-test.c $(CL) -t c64 c64dtv-test.c -o c64dtv-test.prg -c64-c128-test.prg: c64-c128-test.c - $(CL) -t c64 c64-c128-test.c -o c64-c128-test.prg +c64-test.prg: c64-c128-test.c + $(CL) -t c64 c64-c128-test.c -o c64-test.prg c128-test.prg: c64-c128-test.c $(CL) -t c128 c64-c128-test.c -o c128-test.prg From 4e406b744c174a6b2c1b4fa65c0c9b5980b614ed Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 24 Feb 2022 08:50:36 +0200 Subject: [PATCH 1103/2710] Mark index 0 as TRANSPARENT. Let palette start from index 1 --- include/lynx.h | 26 +++++++++++++------------- libsrc/lynx/tgi/lynx-160-102-16.s | 16 ++++++---------- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/include/lynx.h b/include/lynx.h index 4b0390a13..e5ff88a99 100644 --- a/include/lynx.h +++ b/include/lynx.h @@ -52,24 +52,25 @@ /* Color defines */ -#define COLOR_BLACK 0x00 -#define COLOR_RED 0x01 -#define COLOR_PINK 0x02 -#define COLOR_LIGHTGREY 0x03 -#define COLOR_GREY 0x04 -#define COLOR_DARKGREY 0x05 -#define COLOR_BROWN 0x06 -#define COLOR_PEACH 0x07 -#define COLOR_YELLOW 0x08 -#define COLOR_LIGHTGREEN 0x09 -#define COLOR_GREEN 0x0A -#define COLOR_DARKBROWN 0x0B +#define COLOR_TRANSPARENT 0x00 +#define COLOR_BLACK 0x01 +#define COLOR_RED 0x02 +#define COLOR_PINK 0x03 +#define COLOR_LIGHTGREY 0x04 +#define COLOR_GREY 0x05 +#define COLOR_DARKGREY 0x06 +#define COLOR_BROWN 0x07 +#define COLOR_PEACH 0x08 +#define COLOR_YELLOW 0x09 +#define COLOR_LIGHTGREEN 0x0A +#define COLOR_GREEN 0x0B #define COLOR_VIOLET 0x0C #define COLOR_BLUE 0x0D #define COLOR_LIGHTBLUE 0x0E #define COLOR_WHITE 0x0F /* TGI color defines (default palette) */ +#define TGI_COLOR_TRANSPARENT COLOR_TRANSPARENT #define TGI_COLOR_BLACK COLOR_BLACK #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_PINK COLOR_PINK @@ -81,7 +82,6 @@ #define TGI_COLOR_YELLOW COLOR_YELLOW #define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN #define TGI_COLOR_GREEN COLOR_GREEN -#define TGI_COLOR_DARKBROWN COLOR_DARKBROWN #define TGI_COLOR_VIOLET COLOR_VIOLET #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE diff --git a/libsrc/lynx/tgi/lynx-160-102-16.s b/libsrc/lynx/tgi/lynx-160-102-16.s index 903d8f25e..c35b6a5aa 100644 --- a/libsrc/lynx/tgi/lynx-160-102-16.s +++ b/libsrc/lynx/tgi/lynx-160-102-16.s @@ -113,7 +113,8 @@ text_bitmap: .res 8*(1+20+1)+1 .rodata -DEFPALETTE: .byte >$011 +DEFPALETTE: .byte >$223 + .byte >$011 .byte >$34d .byte >$9af .byte >$9b8 @@ -124,11 +125,11 @@ DEFPALETTE: .byte >$011 .byte >$d5f .byte >$c53 .byte >$822 - .byte >$223 .byte >$484 .byte >$8e5 .byte >$cf5 .byte >$fff + .byte <$223 .byte <$011 .byte <$34d .byte <$9af @@ -140,7 +141,6 @@ DEFPALETTE: .byte >$011 .byte <$d5f .byte <$c53 .byte <$822 - .byte <$223 .byte <$484 .byte <$8e5 .byte <$cf5 @@ -162,6 +162,7 @@ INSTALL: lda #1 sta TEXTMAGX sta TEXTMAGY + sta DRAWINDEX stz BGINDEX stz DRAWPAGE stz SWAPREQUEST @@ -418,7 +419,7 @@ cls_sprite: .word 0 .word $a000 ; 160 .word $6600 ; 102 - .byte $00 + .byte $11 .code CLEAR: lda #<cls_sprite @@ -844,11 +845,6 @@ OUTTEXT: lda TEXTMAGY sta text_sy+1 - lda BGINDEX - beq @L1 ; Choose opaque black sprite? - lda #$04 ; No, choose normal sprite -@L1: - sta text_sprite lda DRAWINDEX ; Set color asl asl @@ -956,7 +952,7 @@ OUTTEXT: text_coll: .byte 0 text_sprite: - .byte $00,$90,$20 + .byte $04,$90,$20 .addr 0, text_bitmap text_x: .word 0 From b74de2319fd23d770103c8dc06c2164fdad68f0f Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Fri, 25 Feb 2022 16:00:03 +0200 Subject: [PATCH 1104/2710] Fix black index in tgi_colors.s --- libsrc/lynx/tgi_colors.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/lynx/tgi_colors.s b/libsrc/lynx/tgi_colors.s index c7aefb417..ebc8c2889 100644 --- a/libsrc/lynx/tgi_colors.s +++ b/libsrc/lynx/tgi_colors.s @@ -4,5 +4,5 @@ .include "tgi-kernel.inc" - .export tgi_color_black:zp = $00 + .export tgi_color_black:zp = $01 .export tgi_color_white:zp = $0F From 5ef420af5a4be4350780b335354093bedc81b5c0 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 1 Mar 2022 10:40:01 +0800 Subject: [PATCH 1105/2710] Fixed OptCmp1 with certain code patterns with labels. --- src/cc65/coptcmp.c | 4 ++-- test/val/bug1690.c | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 test/val/bug1690.c diff --git a/src/cc65/coptcmp.c b/src/cc65/coptcmp.c index fda23ae0a..92401a858 100644 --- a/src/cc65/coptcmp.c +++ b/src/cc65/coptcmp.c @@ -309,10 +309,10 @@ unsigned OptCmp1 (CodeSeg* S) /* Insert the ora instead */ X = NewCodeEntry (OP65_ORA, L[0]->AM, L[0]->Arg, 0, L[0]->LI); - CS_InsertEntry (S, X, I); + CS_InsertEntry (S, X, I+3); /* Remove all other instructions */ - CS_DelEntries (S, I+1, 3); + CS_DelEntries (S, I, 3); /* Remember, we had changes */ ++Changes; diff --git a/test/val/bug1690.c b/test/val/bug1690.c new file mode 100644 index 000000000..317913634 --- /dev/null +++ b/test/val/bug1690.c @@ -0,0 +1,23 @@ +/* OptCmp1 messed up with labels */ + +#include <stdio.h> + +int main(void) +{ + register unsigned int x = 0x200; + register unsigned int y = 0; + + do + { + ++y; + } + while (--x); + + if (y != 0x200) + { + printf("0x%X\n", y); + return 1; + } + + return 0; +} From 328781bf8a33991b23c82c5334b779fda0f28b15 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 1 Mar 2022 06:44:26 +0200 Subject: [PATCH 1106/2710] Add target atari7800 --- asminc/atari7800.inc | 8 +++ asminc/atari7800_maria.inc | 39 ++++++++++++ asminc/atari7800_riot.inc | 20 ++++++ asminc/atari7800_tia.inc | 69 +++++++++++++++++++++ cfg/atari7800.cfg | 50 +++++++++++++++ doc/atari7800.sgml | 122 +++++++++++++++++++++++++++++++++++++ include/_maria.h | 63 +++++++++++++++++++ include/atari7800.h | 105 +++++++++++++++++++++++++++++++ 8 files changed, 476 insertions(+) create mode 100644 asminc/atari7800.inc create mode 100644 asminc/atari7800_maria.inc create mode 100644 asminc/atari7800_riot.inc create mode 100644 asminc/atari7800_tia.inc create mode 100644 cfg/atari7800.cfg create mode 100644 doc/atari7800.sgml create mode 100644 include/_maria.h create mode 100644 include/atari7800.h diff --git a/asminc/atari7800.inc b/asminc/atari7800.inc new file mode 100644 index 000000000..a7625aa8a --- /dev/null +++ b/asminc/atari7800.inc @@ -0,0 +1,8 @@ +; Atari 7800 TIA & RIOT read / write registers +; +; Karri Kaksonen (karri@sipo.fi), 2022 + +; TIA, RIOT & MARIA registers mapping +.include "atari7800_tia.inc" +.include "atari7800_riot.inc" +.include "atari7800_maria.inc" diff --git a/asminc/atari7800_maria.inc b/asminc/atari7800_maria.inc new file mode 100644 index 000000000..a8857812d --- /dev/null +++ b/asminc/atari7800_maria.inc @@ -0,0 +1,39 @@ +; Atari 7800 MARIA read / write registers +; + +; Read registers +BKGRND := $00 +P0C1 := $01 +P0C2 := $02 +P0C3 := $03 +MWSYNC := $04 +P1C1 := $05 +P1C2 := $06 +P1C3 := $07 +MSTAT := $08 +P2C1 := $09 +P2C2 := $0A +P2C3 := $0B +DPPH := $0C +P3C1 := $0D +P3C2 := $0E +P3C3 := $0F +DPPL := $10 +P4C1 := $11 +P4C2 := $12 +P4C3 := $13 +CHBASE := $14 +P5C1 := $15 +P5C2 := $16 +P5C3 := $17 +OFFSET := $18 +P6C1 := $19 +P6C2 := $1A +P6C3 := $1B +CTRL := $1C +P7C1 := $1D +P7C2 := $1E +P7C3 := $1F + +; Write registers + diff --git a/asminc/atari7800_riot.inc b/asminc/atari7800_riot.inc new file mode 100644 index 000000000..780e34df3 --- /dev/null +++ b/asminc/atari7800_riot.inc @@ -0,0 +1,20 @@ +; Atari 7800 RIOT read / write registers +; +; Source: DASM - vcs.h +; Details available in: Stella Programmer's Guide by Steve Wright +; +; Florent Flament (contact@florentflament.com), 2017 + +; Read registers +SWCHA := $0280 +CTLSWA := $0281 +SWCHB := $0282 +CTLSWB := $0283 +INTIM := $0284 +TIMINT := $0285 + +; Write registers +TIM1T := $0294 +TIM8T := $0295 +TIM64T := $0296 +T1024T := $0297 diff --git a/asminc/atari7800_tia.inc b/asminc/atari7800_tia.inc new file mode 100644 index 000000000..f4439e421 --- /dev/null +++ b/asminc/atari7800_tia.inc @@ -0,0 +1,69 @@ +; Atari 7800 TIA read / write registers +; +; Source: DASM - vcs.h +; Details available in: Stella Programmer's Guide by Steve Wright +; +; Florent Flament (contact@florentflament.com), 2017 + +; Read registers +VSYNC := $00 +VBLANK := $01 +WSYNC := $02 +RSYNC := $03 +NUSIZ0 := $04 +NUSIZ1 := $05 +COLUP0 := $06 +COLUP1 := $07 +COLUPF := $08 +COLUBK := $09 +CTRLPF := $0A +REFP0 := $0B +REFP1 := $0C +PF0 := $0D +PF1 := $0E +PF2 := $0F +RESP0 := $10 +RESP1 := $11 +RESM0 := $12 +RESM1 := $13 +RESBL := $14 +AUDC0 := $15 +AUDC1 := $16 +AUDF0 := $17 +AUDF1 := $18 +AUDV0 := $19 +AUDV1 := $1A +GRP0 := $1B +GRP1 := $1C +ENAM0 := $1D +ENAM1 := $1E +ENABL := $1F +HMP0 := $20 +HMP1 := $21 +HMM0 := $22 +HMM1 := $23 +HMBL := $24 +VDELP0 := $25 +VDELP1 := $26 +VDELBL := $27 +RESMP0 := $28 +RESMP1 := $29 +HMOVE := $2A +HMCLR := $2B +CXCLR := $2C + +; Write registers +CXM0P := $00 +CXM1P := $01 +CXP0FB := $02 +CXP1FB := $03 +CXM0FB := $04 +CXM1FB := $05 +CXBLPF := $06 +CXPPMM := $07 +INPT0 := $08 +INPT1 := $09 +INPT2 := $0A +INPT3 := $0B +INPT4 := $0C +INPT5 := $0D diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg new file mode 100644 index 000000000..a2aa7b36c --- /dev/null +++ b/cfg/atari7800.cfg @@ -0,0 +1,50 @@ +# Atari VCS 7800 linker configuration file for cc65 + +SYMBOLS { + __STACKSIZE__: type = weak, value = $0010; # 16 bytes stack +} + +MEMORY { + ZP: file = "", define = yes, start = $0040, size = $00C0, type = rw; + SP: file = "", define = yes, start = $0140, size = $00C0, type = rw; + RAM1: file = "", define = yes, start = $1800, size = $0840, type = rw; + RAM2: file = "", define = yes, start = $2100, size = $0040, type = rw; + RAM3: file = "", define = yes, start = $2200, size = $0600, type = rw; + # "Normal" cartridge rom. Multiple banks arent supported + # by this script. You may change the rom size, but keep + # two things in mind: + # - start must be a multiple of $1000 + # - ROM must end at $ff79 + ROM: file = %O, define = yes, start = $8000, size = $7f7a, type = ro, fill = yes, fillval = $ff; + # Encryption stuff + ROME: file = %O, start = $ff7a, size = $80, type = ro, fill = yes, fillval = $ff; + # Interrupt vectors + ROMV: file = %O, start = $fffa, size = $6, type = ro, fill = yes, fillval = $ff; +} + +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + STARTUP: load = ROM, type = ro, define = yes; + CODE: load = ROM, type = ro, define = yes; + RODATA: load = ROM, type = ro, define = yes, align = 256; + DATA: load = ROM, run = RAM1, type = rw, define = yes; + BSS: load = RAM1, type = bss, define = yes; + VECTORS: load = ROM, type = ro, define = yes; + ENCRYPTION: load = ROME, type = ro 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/doc/atari7800.sgml b/doc/atari7800.sgml new file mode 100644 index 000000000..95868bbd9 --- /dev/null +++ b/doc/atari7800.sgml @@ -0,0 +1,122 @@ +<!doctype linuxdoc system> + +<article> +<title>Atari 7800 specific information for cc65 +<author> +<url url="mailto:contact@florentflament.com" name="Florent Flament"><newline> + +<abstract> +An overview over the Atari 7800 runtime system as it is implemented +for the cc65 C compiler. +</abstract> + +<!-- Table of contents --> +<toc> + +<!-- Begin the document --> + +<sect>Overview<p> + +This file contains an overview of the Atari 7800 runtime system as it +comes with the cc65 C compiler. It describes the memory layout, Atari +7800 specific header files and any pitfalls specific to that platform. + +<sect>Binary format<p> + +The default binary output format generated by the linker for the Atari +7800 target is a 4K cartridge image. + +<sect>Memory layout<p> + +cc65 generated programs with the default setup can use RAM from +$0080 to $00FF - __STACKSIZE__, where __STACKSIZE__ is +the size of the system stack with a default value of 16 bytes. The +size of the system stack can be customized by defining the +__STACKSIZE__ linker variable. + +Special locations: + +<descrip> + <tag/Stack/ The C runtime stack is located at $00FF - + __STACKSIZE__ and growing downwards. + + <tag/Heap/ The C heap is located at $0080 and grows upwards. + +</descrip><p> + +<sect>Start-up condition<p> + +When powered-up, the Atari 7800 TIA registers contain random +values. During the initialization phase, the start-up code needs to +initialize the TIA registers to sound values (or else the console has +an unpredictable behavior). In this implementation, zeros are written +to all of TIA registers during the start-up phase. + +Note that RIOT registers (mostly timers) are left uninitialized, as +they don't have any consequence on the console behavior. + +<sect>Platform specific header files<p> + +Programs containing Atari 7800 specific code may use the +<tt/atari7800.h/ header file. + +The following pseudo variables declared in the <tt/atari7800.h/ header +file allow access to the Atari 7800 TIA & RIOT chips registers. + +<descrip> + + <tag><tt/TIA/</tag> The <tt/TIA/ structure allows read/write access + to the Atari 7800 TIA chip registers. See the <tt/_tia.h/ header + file located in the include directory for the declaration of the + structure. Also refer to the Stella Programmer's Guide by Steve + Wright for a detailed description of the chip and its registers. + + <tag><tt/RIOT/</tag> The <tt/RIOT/ structure allows read/write + access to the Atari 7800 RIOT chip registers. See the + <tt/_riot.h/ header file located in the include directory for the + declaration of the structure. Also refer to the Stella Programmer's + Guide by Steve Wright for a detailed description of the chip and its + registers. + +</descrip><p> + + +<sect>Loadable drivers<p> + +There are no drivers for the Atari 7800. + + +<sect>Limitations<p> + +TBD + + +<sect>Other hints<p> + +One may write a custom linker configuration file to tune the memory +layout of a program. See the <tt/atari7800.cfg/ file in the cfg +directory as a starting point. + + +<sect>License<p> + +This software is provided 'as-is', without any expressed or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +<enum> +<item> The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +<item> Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. +<item> This notice may not be removed or altered from any source + distribution. +</enum> + +</article> diff --git a/include/_maria.h b/include/_maria.h new file mode 100644 index 000000000..461119fda --- /dev/null +++ b/include/_maria.h @@ -0,0 +1,63 @@ +/*****************************************************************************/ +/* */ +/* _maria.h */ +/* */ +/* Atari 7800, Maria chip register hardware structures */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + +/* + * MARIA registers + */ +struct __maria { + unsigned char bkgrnd; + unsigned char p0c1; + unsigned char p0c2; + unsigned char p0c3; + unsigned char wsync; + unsigned char p1c1; + unsigned char p1c2; + unsigned char p1c3; + unsigned char mstat; + unsigned char p2c1; + unsigned char p2c2; + unsigned char p2c3; + unsigned char dpph; + unsigned char p3c1; + unsigned char p3c2; + unsigned char p3c3; + unsigned char dppl; + unsigned char p4c1; + unsigned char p4c2; + unsigned char p4c3; + unsigned char chbase; + unsigned char p5c1; + unsigned char p5c2; + unsigned char p5c3; + unsigned char offset; + unsigned char p6c1; + unsigned char p6c2; + unsigned char p6c3; + unsigned char ctrl; + unsigned char p7c1; + unsigned char p7c2; + unsigned char p7c3; +}; diff --git a/include/atari7800.h b/include/atari7800.h new file mode 100644 index 000000000..378f8786a --- /dev/null +++ b/include/atari7800.h @@ -0,0 +1,105 @@ +/*****************************************************************************/ +/* */ +/* Atari VCS 7800 TIA & RIOT registers addresses */ +/* */ +/* Karri Kaksonen (karri@sipo.fi), 2022 */ +/* */ +/* */ +/*****************************************************************************/ + + + +#ifndef _ATARI7800_H +#define _ATARI7800_H + +/* Check for errors */ +#if !defined(__ATARI7800__) +# error This module may only be used when compiling for the Atari 7800! +#endif + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* Color defines */ +#define COLOR_BLACK 0x00 +#define COLOR_WHITE 0x0F + +/* TGI color defines (default palette) */ +#define TGI_COLOR_BLACK COLOR_BLACK +#define TGI_COLOR_WHITE COLOR_WHITE + +/* Masks for joy_read */ +#define JOY_RIGHT_MASK 0x80 +#define JOY_LEFT_MASK 0x40 +#define JOY_DOWN_MASK 0x20 +#define JOY_UP_MASK 0x10 +#define JOY_BTN_1_MASK 0x01 +#define JOY_BTN_2_MASK 0x02 + +#define JOY_BTN_A_MASK JOY_BTN_1_MASK +#define JOY_BTN_B_MASK JOY_BTN_2_MASK + +#define JOY_BTN_A(v) ((v) & JOY_BTN_A_MASK) +#define JOY_BTN_B(v) ((v) & JOY_BTN_B_MASK) + +/* No support for dynamically loadable drivers */ +#define DYN_DRV 0 + +#include <_tia.h> +#define TIA (*(struct __tia*)0x0000) + +#include <_riot.h> +#define RIOT (*(struct __riot*)0x0280) + +#include <_maria.h> +#define MARIA (*(struct __maria*)0x0020) + +/* + * Alternative MARIA register definitions. + */ +#define BKGRND MARIA.bkgrnd +#define BACKGRND MARIA.bkgrnd +#define P0C1 MARIA.p0c1 +#define P0C2 MARIA.p0c2 +#define P0C3 MARIA.p0c3 +#define WSYNC MARIA.wsync +#define P1C1 MARIA.p1c1 +#define P1C2 MARIA.p1c2 +#define P1C3 MARIA.p1c3 +#define MSTAT MARIA.mstat +#define P2C1 MARIA.p2c1 +#define P2C2 MARIA.p2c2 +#define P2C3 MARIA.p2c3 +#define DPPH MARIA.dpph +#define DPH MARIA.dpph +#define P3C1 MARIA.p3c1 +#define P3C2 MARIA.p3c2 +#define P3C3 MARIA.p3c3 +#define DPPL MARIA.dppl +#define DPL MARIA.dppl +#define P4C1 MARIA.p4c1 +#define P4C2 MARIA.p4c2 +#define P4C3 MARIA.p4c3 +#define CHBASE MARIA.chbase +#define P5C1 MARIA.p5c1 +#define P5C2 MARIA.p5c2 +#define P5C3 MARIA.p5c3 +#define OFFSET MARIA.offset +#define P6C1 MARIA.p6c1 +#define P6C2 MARIA.p6c2 +#define P6C3 MARIA.p6c3 +#define CTRL MARIA.ctrl +#define P7C1 MARIA.p7c1 +#define P7C2 MARIA.p7c2 +#define P7C3 MARIA.p7c3 + +/* + * MSTAT register constants + */ +#define MSTAT_VBLANK 0x80 /* vblank is on when bit 7 is set */ + +/* End of atari7800.h */ +#endif From 3266e70de4431a8994d922d119009b56a0b73690 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 1 Mar 2022 06:44:55 +0200 Subject: [PATCH 1107/2710] Add target atari7800 --- README.md | 1 + doc/ca65.sgml | 1 + doc/index.sgml | 3 +++ doc/ld65.sgml | 1 + include/target.h | 2 ++ libsrc/Makefile | 1 + src/ca65/main.c | 4 ++++ src/cc65/main.c | 4 ++++ src/common/target.c | 2 ++ src/common/target.h | 1 + targettest/Makefile | 4 ++++ 11 files changed, 24 insertions(+) diff --git a/README.md b/README.md index 93b91aa80..009fca78b 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ including - the Atari 8-bit machines. - the Atari 2600 console. - the Atari 5200 console. +- the Atari 7800 console. - GEOS for the C64, C128 and Apple //e. - the Bit Corporation Gamate console. - the NEC PC-Engine (aka TurboGrafx-16) console. diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 8797f2c60..c0ebe3688 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -4763,6 +4763,7 @@ compiler, depending on the target system selected: <item><tt/__APPLE2ENH__/ - Target system is <tt/apple2enh/ <item><tt/__ATARI2600__/ - Target system is <tt/atari2600/ <item><tt/__ATARI5200__/ - Target system is <tt/atari5200/ +<item><tt/__ATARI7800__/ - Target system is <tt/atari7800/ <item><tt/__ATARI__/ - Target system is <tt/atari/ or <tt/atarixl/ <item><tt/__ATARIXL__/ - Target system is <tt/atarixl/ <item><tt/__ATMOS__/ - Target system is <tt/atmos/ diff --git a/doc/index.sgml b/doc/index.sgml index 3bb085bf6..bb3ad5357 100644 --- a/doc/index.sgml +++ b/doc/index.sgml @@ -124,6 +124,9 @@ <tag><htmlurl url="atari5200.html" name="atari5200.html"></tag> Topics specific to the Atari 5200 Game Console. + <tag><htmlurl url="atari7800.html" name="atari7800.html"></tag> + Topics specific to the Atari 7800 Game Console. + <tag><htmlurl url="atmos.html" name="atmos.html"></tag> Topics specific to the Oric Atmos. diff --git a/doc/ld65.sgml b/doc/ld65.sgml index 87c2cae51..307caeaa4 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -166,6 +166,7 @@ Here is a description of all of the command-line options: <item>apple2 <item>apple2enh <item>atari2600 + <item>atari7800 <item>atari <item>atarixl <item>atmos diff --git a/include/target.h b/include/target.h index af401ec35..7663a39dd 100644 --- a/include/target.h +++ b/include/target.h @@ -43,6 +43,8 @@ # include <atari2600.h> #elif defined(__ATARI5200__) # include <atari5200.h> +#elif defined(__ATARI7800__) +# include <atari7800.h> #elif defined(__ATMOS__) # include <atmos.h> #elif defined(__CBM__) diff --git a/libsrc/Makefile b/libsrc/Makefile index 60946b59f..177314bdf 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -21,6 +21,7 @@ TARGETS = apple2 \ atarixl \ atari2600 \ atari5200 \ + atari7800 \ atmos \ creativision \ $(CBMS) \ diff --git a/src/ca65/main.c b/src/ca65/main.c index 0eaf4ba6b..b1ef3a3db 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -212,6 +212,10 @@ static void SetSys (const char* Sys) NewSymbol ("__ATARI5200__", 1); break; + case TGT_ATARI7800: + NewSymbol ("__ATARI7800__", 1); + break; + case TGT_ATARI: NewSymbol ("__ATARI__", 1); break; diff --git a/src/cc65/main.c b/src/cc65/main.c index 0ed5af986..4a5729063 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -172,6 +172,10 @@ static void SetSys (const char* Sys) DefineNumericMacro ("__ATARI5200__", 1); break; + case TGT_ATARI7800: + DefineNumericMacro ("__ATARI7800__", 1); + break; + case TGT_ATARI: DefineNumericMacro ("__ATARI__", 1); break; diff --git a/src/common/target.c b/src/common/target.c index a35bf67a8..4a851034a 100644 --- a/src/common/target.c +++ b/src/common/target.c @@ -147,6 +147,7 @@ static const TargetEntry TargetMap[] = { { "atari", TGT_ATARI }, { "atari2600", TGT_ATARI2600 }, { "atari5200", TGT_ATARI5200 }, + { "atari7800", TGT_ATARI7800 }, { "atarixl", TGT_ATARIXL }, { "atmos", TGT_ATMOS }, { "bbc", TGT_BBC }, @@ -188,6 +189,7 @@ static const TargetProperties PropertyTable[TGT_COUNT] = { { "atari", CPU_6502, BINFMT_BINARY, CTAtari }, { "atari2600", CPU_6502, BINFMT_BINARY, CTNone }, { "atari5200", CPU_6502, BINFMT_BINARY, CTAtari }, + { "atari7800", CPU_6502, BINFMT_BINARY, CTNone }, { "atarixl", CPU_6502, BINFMT_BINARY, CTAtari }, { "vic20", CPU_6502, BINFMT_BINARY, CTPET }, { "c16", CPU_6502, BINFMT_BINARY, CTPET }, diff --git a/src/common/target.h b/src/common/target.h index 7f85713cf..7087048e2 100644 --- a/src/common/target.h +++ b/src/common/target.h @@ -57,6 +57,7 @@ typedef enum { TGT_ATARI, TGT_ATARI2600, TGT_ATARI5200, + TGT_ATARI7800, TGT_ATARIXL, TGT_VIC20, TGT_C16, diff --git a/targettest/Makefile b/targettest/Makefile index 806f6b445..0450bfd4e 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -673,6 +673,9 @@ EXELIST_atari2600 = \ EXELIST_atari5200 = \ minimal +EXELIST_atari7800 = \ + minimal + EXELIST_gamate = \ minimal @@ -728,6 +731,7 @@ TARGETS := \ atarixl \ atari2600 \ atari5200 \ + atari7800 \ atmos \ bbc \ c128 \ From 8c975dfb36c43a25443879f218ff102f0e86e354 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 1 Mar 2022 07:03:29 +0200 Subject: [PATCH 1108/2710] Remove garbage --- include/atari7800.h | 50 +++++---------------------------------------- 1 file changed, 5 insertions(+), 45 deletions(-) diff --git a/include/atari7800.h b/include/atari7800.h index 378f8786a..4fdaacfcc 100644 --- a/include/atari7800.h +++ b/include/atari7800.h @@ -25,10 +25,14 @@ /* Color defines */ #define COLOR_BLACK 0x00 -#define COLOR_WHITE 0x0F +#define COLOR_GREY 0x01 +#define COLOR_LIGHTGREY 0x02 +#define COLOR_WHITE 0x03 /* TGI color defines (default palette) */ #define TGI_COLOR_BLACK COLOR_BLACK +#define TGI_COLOR_GREY COLOR_GREY +#define TGI_COLOR_LIGHTGREY COLOR_LIGHTGREY #define TGI_COLOR_WHITE COLOR_WHITE /* Masks for joy_read */ @@ -57,49 +61,5 @@ #include <_maria.h> #define MARIA (*(struct __maria*)0x0020) -/* - * Alternative MARIA register definitions. - */ -#define BKGRND MARIA.bkgrnd -#define BACKGRND MARIA.bkgrnd -#define P0C1 MARIA.p0c1 -#define P0C2 MARIA.p0c2 -#define P0C3 MARIA.p0c3 -#define WSYNC MARIA.wsync -#define P1C1 MARIA.p1c1 -#define P1C2 MARIA.p1c2 -#define P1C3 MARIA.p1c3 -#define MSTAT MARIA.mstat -#define P2C1 MARIA.p2c1 -#define P2C2 MARIA.p2c2 -#define P2C3 MARIA.p2c3 -#define DPPH MARIA.dpph -#define DPH MARIA.dpph -#define P3C1 MARIA.p3c1 -#define P3C2 MARIA.p3c2 -#define P3C3 MARIA.p3c3 -#define DPPL MARIA.dppl -#define DPL MARIA.dppl -#define P4C1 MARIA.p4c1 -#define P4C2 MARIA.p4c2 -#define P4C3 MARIA.p4c3 -#define CHBASE MARIA.chbase -#define P5C1 MARIA.p5c1 -#define P5C2 MARIA.p5c2 -#define P5C3 MARIA.p5c3 -#define OFFSET MARIA.offset -#define P6C1 MARIA.p6c1 -#define P6C2 MARIA.p6c2 -#define P6C3 MARIA.p6c3 -#define CTRL MARIA.ctrl -#define P7C1 MARIA.p7c1 -#define P7C2 MARIA.p7c2 -#define P7C3 MARIA.p7c3 - -/* - * MSTAT register constants - */ -#define MSTAT_VBLANK 0x80 /* vblank is on when bit 7 is set */ - /* End of atari7800.h */ #endif From d059682692cbb8c281334a1d94f7f5055b3b8264 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 1 Mar 2022 07:37:07 +0200 Subject: [PATCH 1109/2710] Add crt0.s and ctype.s --- libsrc/atari7800/crt0.s | 71 ++++++++++++++++++++++++++++++++++++++++ libsrc/atari7800/ctype.s | 5 +++ 2 files changed, 76 insertions(+) create mode 100644 libsrc/atari7800/crt0.s create mode 100644 libsrc/atari7800/ctype.s diff --git a/libsrc/atari7800/crt0.s b/libsrc/atari7800/crt0.s new file mode 100644 index 000000000..3d53abfa8 --- /dev/null +++ b/libsrc/atari7800/crt0.s @@ -0,0 +1,71 @@ + .export _zonecounter + .export __STARTUP__ : absolute = 1 + .export _exit + .import __ROM_START__ + .import __RAM3_START__, __RAM3_SIZE__ + .import initlib, donelib + .import zerobss, copydata + .import push0, _main + .include "zeropage.inc" + +INPTCTRL = $01 +OFFSET = $38 +CTRL = $3c + + .segment "STARTUP" +start: + ; Startup sequence recommended by Atari. + ; See the 7800 standards document. + sei ; Initialize 6502 + cld + lda #$07 ; Lock machine in 7800 mode + sta INPTCTRL + lda #$7f ; DMA off + sta CTRL + ldx #0 ; OFFSET must always be 0 + stx OFFSET + stx INPTCTRL ; Make sure joysticks don't freeze + dex ; Stack pointer = $ff + txs + + ; Set up parameter stack + lda #<(__RAM3_START__ + __RAM3_SIZE__) + sta sp + lda #>(__RAM3_START__ + __RAM3_SIZE__) + sta sp+1 + + jsr copydata + jsr zerobss + jsr initlib + + ; Call main program (pass empty command line) + jsr push0 ; argc + jsr push0 ; argv + ldy #4 ; Argument size + jsr _main + +_exit: + jsr donelib + jmp start + +NMIHandler: + inc _zonecounter + rti + +IRQHandler: + rti + + .segment "DATA" +_zonecounter: + .byte 0 + + .segment "ENCRYPTION" + .res 126, $ff ; Reserved for encryption +Lfff8: .byte $ff ; Region verification (always $ff) +Lfff9: .byte $f7 ; Use last 4096 bytes only for encryption +;;;Lfff9: .byte <(((__ROM_START__/4096)<<4) | 7) + + .segment "VECTORS" + .word NMIHandler + .word start + .word IRQHandler diff --git a/libsrc/atari7800/ctype.s b/libsrc/atari7800/ctype.s new file mode 100644 index 000000000..1301965eb --- /dev/null +++ b/libsrc/atari7800/ctype.s @@ -0,0 +1,5 @@ +; Character specification table. +; +; uses the "common" definition + + .include "ctype_common.inc" From c293b299d8dcfb13589f6ea9a8a457019130dca8 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 1 Mar 2022 07:44:47 +0200 Subject: [PATCH 1110/2710] Add segment ONCE --- cfg/atari7800.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index a2aa7b36c..cf663be3d 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -25,6 +25,7 @@ MEMORY { SEGMENTS { ZEROPAGE: load = ZP, type = zp; STARTUP: load = ROM, type = ro, define = yes; + ONCE: load = ROM, type = ro, define = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, define = yes, align = 256; DATA: load = ROM, run = RAM1, type = rw, define = yes; From b861f6df8f62907fa86ca978372c10f142271670 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 1 Mar 2022 09:28:06 +0200 Subject: [PATCH 1111/2710] Add exehdr --- libsrc/atari7800/exehdr.s | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 libsrc/atari7800/exehdr.s diff --git a/libsrc/atari7800/exehdr.s b/libsrc/atari7800/exehdr.s new file mode 100644 index 000000000..15ce7ea29 --- /dev/null +++ b/libsrc/atari7800/exehdr.s @@ -0,0 +1,39 @@ +; ------------------------------------------------------------------------ +; EXE header + .segment "EXEHDR" + .byte 3 ; version + .byte 'A','T','A','R','I','7','8','0','0',' ',' ',' ',' ',' ',' ',' ' + .byte 'G','a','m','e',' ','n','a','m','e',0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,$80,0 ; Size + ; bit 0 - pokey at 4000 + ; bit 1 - supergame bank switched + ; bit 2 - supergame ram at $4000 + ; bit 3 - rom at $4000 + ; bit 4 - bank 6 at $4000 + ; bit 5 - supergame banked ram + ; bit 6 - pokey at $450 + ; bit 7 - mirror ram at $4000 + ; bit 8 - activision banking + ; bit 9 - absolute banking + ; bit 10 - pokey at $440 + ; bit 11 - ym2151 at $461/462 + ; bit 12 - souper + ; bit 13-15 - Special + ; 0 = Normal cart + .byte 0,0 ; 0 = Normal cart + .byte 1 ; 1 = Joystick, 2 = lightgun + .byte 0 ; No joystick 2 + .byte 0 ; bit0 = 0:NTSC,1:PAL bit1 = 0:component,1:composite + .byte 0 ; Save data peripheral - 1 byte (version 2) + ; 0 = None / unknown (default) + ; 1 = High Score Cart (HSC) + ; 2 = SaveKey + + .byte 0 ; 63 Expansion module + ; 0 = No expansion module (default on all currently released games) + ; 1 = Expansion module required + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0 + .byte 'A','C','T','U','A','L',' ','C','A','R','T',' ','D','A','T','A',' ','S','T','A','R','T','S',' ','H','E','R','E' From d679faaf2221cdc2336c0b207a736e878b3a3445 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 1 Mar 2022 09:28:15 +0200 Subject: [PATCH 1112/2710] Add exehdr --- cfg/atari7800.cfg | 26 ++++++++++++++++++++------ libsrc/atari7800/exehdr.s | 7 +++++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index cf663be3d..8029ca674 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -2,6 +2,16 @@ SYMBOLS { __STACKSIZE__: type = weak, value = $0010; # 16 bytes stack + __EXEHDR__: type = import; + __VEC_BOTTOM__: value = $fffa, type = export; + __VEC_SIZE__: value = $6, type = export; + __ENCRYPT_BOTTOM__: value = $ff7a, type = export; + __ENCRYPT_SIZE__: value = $80, type = export; + __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; + __INIT_SIZE__: value = 69, type = export; + __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; + __MEMORY_BOTTOM__: value = $8000, type = export; + __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; } MEMORY { @@ -10,27 +20,31 @@ MEMORY { RAM1: file = "", define = yes, start = $1800, size = $0840, type = rw; RAM2: file = "", define = yes, start = $2100, size = $0040, type = rw; RAM3: file = "", define = yes, start = $2200, size = $0600, type = rw; + # For emulators you also need a header file + HEADER: file = %O, start = $0000, size = 128; # "Normal" cartridge rom. Multiple banks arent supported # by this script. You may change the rom size, but keep # two things in mind: # - start must be a multiple of $1000 # - ROM must end at $ff79 - ROM: file = %O, define = yes, start = $8000, size = $7f7a, type = ro, fill = yes, fillval = $ff; + ROM: file = %O, define = yes, start = __MEMORY_BOTTOM__, size = __FREE_ROM_SIZE__, type = ro, fill = yes, fillval = $ff; + ROMS: file = %O, define = yes, start = __MEMORY_INIT__, size = __INIT_SIZE__, type = ro, fill = yes, fillval = $ff; # Encryption stuff - ROME: file = %O, start = $ff7a, size = $80, type = ro, fill = yes, fillval = $ff; + ROME: file = %O, start = __ENCRYPT_BOTTOM__, size = __ENCRYPT_SIZE__, type = ro, fill = yes, fillval = $ff; # Interrupt vectors - ROMV: file = %O, start = $fffa, size = $6, type = ro, fill = yes, fillval = $ff; + ROMV: file = %O, start = __VEC_BOTTOM__, size = __VEC_SIZE__, type = ro, fill = yes, fillval = $ff; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; - STARTUP: load = ROM, type = ro, define = yes; - ONCE: load = ROM, type = ro, define = yes; + EXEHDR: load = HEADER, type = ro, define = yes; + STARTUP: load = ROMS, type = ro, define = yes; + ONCE: load = ROMS, type = ro, define = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, define = yes, align = 256; DATA: load = ROM, run = RAM1, type = rw, define = yes; BSS: load = RAM1, type = bss, define = yes; - VECTORS: load = ROM, type = ro, define = yes; + VECTORS: load = ROMV, type = ro, define = yes; ENCRYPTION: load = ROME, type = ro define = yes; } diff --git a/libsrc/atari7800/exehdr.s b/libsrc/atari7800/exehdr.s index 15ce7ea29..6f3023040 100644 --- a/libsrc/atari7800/exehdr.s +++ b/libsrc/atari7800/exehdr.s @@ -1,3 +1,10 @@ +; +; Karri Kaksonen, 2022 +; +; This header contains data for emulators +; + .export __EXEHDR__: absolute = 1 + ; ------------------------------------------------------------------------ ; EXE header .segment "EXEHDR" From bca8fcb9478f47221e2a3f7d1ecdf5717c72899c Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 1 Mar 2022 12:56:34 -0500 Subject: [PATCH 1113/2710] Added a more general test to test/val/bug1690.c --- test/val/bug1690.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/test/val/bug1690.c b/test/val/bug1690.c index 317913634..499dc6b35 100644 --- a/test/val/bug1690.c +++ b/test/val/bug1690.c @@ -2,22 +2,29 @@ #include <stdio.h> +static int failures = 0; +static unsigned int z = 0xFF23; + int main(void) { register unsigned int x = 0x200; register unsigned int y = 0; - do - { + do { ++y; + } while (--x); + if (y != 0x200) { + printf("y should be 0x200, not 0x%X.\n", y); + ++failures;; } - while (--x); - if (y != 0x200) - { - printf("0x%X\n", y); - return 1; - } + if ((z -= 0x23)) { + /* Passed -- non-zero z looks like non-zero. */ + } else { + /* Failed -- only the low byte of z was tested. */ + printf("Test thinks non-zero z is zero.\n"); + ++failures; + } - return 0; + return failures; } From 1ba39b678c6efa565736d115efb080d94ccd99a3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 3 Mar 2022 14:03:01 +0800 Subject: [PATCH 1114/2710] Fixed test/asm/listing/Makefile with mingw32-make.exe that has problems with comments lead with tabulators. --- test/asm/listing/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index f4a7df81c..c152db7be 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -48,7 +48,7 @@ define LISTING_template $(WORKDIR)/$1.bin: $1.s $(ISEQUAL) $(if $(QUIET),echo asm/$1.bin) - # compile without generating listing +# compile without generating listing $(CA65) -t none -o $$(@:.bin=.o) $$< $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib @@ -59,13 +59,13 @@ endif $(CA65) -t none -l $$(@:.bin=.list.orig) -o $$(@:.bin=.list-o) $$< $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib - # check if the result bin is the same as without listing file +# check if the result bin is the same as without listing file $(ISEQUAL) $$@ $$(@:.bin=.list-bin) ifneq ($(wildcard $1.list-ref),) - # we have a reference file, compare that, too +# we have a reference file, compare that, too - # remove first line which contains a version number +# remove first line which contains a version number tail -n +2 $$(@:.bin=.lst.orig) > $$(@:.bin=.lst) $(ISEQUAL) $1.list-ref $$(@:.bin=.lst) endif From 67594cca70e21cf29caf16b1cda065d2b5858814 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 3 Mar 2022 16:14:26 +0800 Subject: [PATCH 1115/2710] Testcases for long bit-fields. --- test/val/{enum-bitfield.c => bitfield-enum.c} | 162 ++++++++- test/val/bitfield-packing-char.c | 278 ++++++++++++++++ test/val/bitfield-packing-long.c | 315 ++++++++++++++++++ test/val/{bitfield.c => bitfield-packing.c} | 18 +- test/val/bitfield-plain.c | 180 ++++++++++ test/val/bitfield-signed.c | 180 ++++++++++ test/val/plain-int-bitfield.c | 63 ---- 7 files changed, 1123 insertions(+), 73 deletions(-) rename test/val/{enum-bitfield.c => bitfield-enum.c} (61%) create mode 100644 test/val/bitfield-packing-char.c create mode 100644 test/val/bitfield-packing-long.c rename test/val/{bitfield.c => bitfield-packing.c} (93%) create mode 100644 test/val/bitfield-plain.c create mode 100644 test/val/bitfield-signed.c delete mode 100644 test/val/plain-int-bitfield.c diff --git a/test/val/enum-bitfield.c b/test/val/bitfield-enum.c similarity index 61% rename from test/val/enum-bitfield.c rename to test/val/bitfield-enum.c index 5669978c9..ce74b062e 100644 --- a/test/val/enum-bitfield.c +++ b/test/val/bitfield-enum.c @@ -1,5 +1,5 @@ /* - Copyright 2020 The cc65 Authors + Copyright 2020-2022 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -247,7 +247,7 @@ static void test_enum_bitfield_char(void) failures++; } if (e8scbf.y != 5) { - printf ("Got e8scbf.y = %d, expected 10.\n", e8scbf.y); + printf ("Got e8scbf.y = %d, expected 5.\n", e8scbf.y); failures++; } if (e8scbf.z != 100) { @@ -273,12 +273,170 @@ static void test_enum_bitfield_char(void) } } +/* Enum with underlying type unsigned long. */ +enum e20ul { + E20UL_10 = 10, + E20UL_1000 = 1000, + E20UL_1000000000 = 1000000000L, +}; + +static struct enum_bitfield_ulong { + enum e20ul x : 4; + enum e20ul y : 16; + enum e20ul z : CHAR_BIT * sizeof (enum e20ul); +} e20ulbf = {E20UL_10, E20UL_1000, E20UL_1000000000}; + +static void test_enum_bitfield_ulong(void) +{ + if (sizeof (struct enum_bitfield_ulong) != 7) { + printf ("Got sizeof(struct enum_bitfield_ulong) = %zu, expected 7.\n", + sizeof(struct enum_bitfield_ulong)); + failures++; + } + + if (e20ulbf.x != 10) { + printf ("Got e20ulbf.x = %u, expected 10.\n", e20ulbf.x); + failures++; + } + if (e20ulbf.y != 1000) { + printf ("Got e20ulbf.y = %u, expected 1000.\n", e20ulbf.y); + failures++; + } + if (e20ulbf.z != 1000000000L) { + printf ("Got e20ulbf.z = %ul, expected 1000000000.\n", e20ulbf.z); + failures++; + } + + e20ulbf.x = 8; + e20ulbf.y = -1; /* Will store 65535. */ + e20ulbf.z = 1048575L; + + if (e20ulbf.x != 8) { + printf ("Got e20ulbf.x = %ld, expected 8.\n", (long)e20ulbf.x); + failures++; + } + + /* Check signedness, should be signed. */ + { + if (e20ulbf.x - 9 >= 0) { + printf ("Got non-negative e20ulbf.x - 9 = %lu, expected negative.\n", (unsigned long)(e20ulbf.x - 9)); + failures++; + } + } + + if (e20ulbf.y != 65535L) { + printf ("Got e20ulbf.y = %ld, expected 65535.\n", (long)e20ulbf.y); + failures++; + } + + /* Check signedness, should be signed. */ + { + if (e20ulbf.y - 65536L >= 0) { + printf ("Got non-negative e20ulbf.y - 65536L = %lu, expected negative.\n", (unsigned long)(e20ulbf.y - 65536L)); + failures++; + } + } + + if (e20ulbf.z != 1048575L) { + printf ("Got e20ulbf.z = %lu, expected 1048575.\n", (unsigned long)e20ulbf.z); + failures++; + } + + /* Check signedness, should be unsigned. */ + { + if (e20ulbf.z - 1048576L < 0) { + printf ("Got negative e20ulbf.z - 1048576 = %ld, expected positive.\n", (long)(e20ulbf.z - 1048576L)); + failures++; + } + } +} + +/* Enum with underlying type signed long. */ +enum e20sl { + E20SL_M1 = -1, + E20SL_1000 = 1000, + E20SL_1000000000 = 1000000000L, +}; + +static struct enum_bitfield_long { + enum e20sl x : 2; + enum e20sl y : 16; + enum e20sl z : CHAR_BIT * sizeof (enum e20sl); +} e20slbf = {E20SL_M1, E20SL_1000, E20SL_1000000000}; + +static void test_enum_bitfield_long(void) +{ + if (sizeof (struct enum_bitfield_long) != 7) { + printf ("Got sizeof(struct enum_bitfield_long) = %zu, expected 8.\n", + sizeof(struct enum_bitfield_long)); + failures++; + } + + if (e20slbf.x != -1) { + printf ("Got e20slbf.x = %ld, expected -1.\n", (long)e20slbf.x); + failures++; + } + if (e20slbf.y != 1000) { + printf ("Got e20slbf.y = %ld, expected 1000.\n", (long)e20slbf.y); + failures++; + } + if (e20slbf.z != 1000000000L) { + printf ("Got e20slbf.z = %ld, expected 1000000000.\n", (long)e20slbf.z); + failures++; + } + + e20slbf.x = 1; + e20slbf.y = 257; + e20slbf.z = 1048575L; + + if (e20slbf.x != 1) { + printf ("Got e20slbf.x = %d, expected 1.\n", e20slbf.x); + failures++; + } + + /* Check signedness, should be signed. */ + { + if (e20slbf.x - 2 >= 0) { + printf ("Got non-negative e20slbf.x - 2 = %lu, expected negative.\n", (unsigned long)(e20slbf.x - 2)); + failures++; + } + } + + if (e20slbf.y != 257) { + printf ("Got e20slbf.y = %ld, expected 257.\n", (long)e20slbf.y); + failures++; + } + + /* Check signedness, should be signed. */ + { + if (e20slbf.y - 258 >= 0) { + printf ("Got non-negative e20slbf.y - 258 = %lu, expected negative.\n", (unsigned long)(e20slbf.y - 258)); + failures++; + } + } + + if (e20slbf.z != 1048575L) { + printf ("Got e20slbf.z = %ld, expected 1048575.\n", (long)e20slbf.z); + failures++; + } + + /* Check signedness, should be signed. */ + { + if (e20slbf.z - 1048576L >= 0) { + printf ("Got non-negative e20slbf.z - 1048576L = %ld, expected negative.\n", (long)(e20slbf.z - 1048576L)); + failures++; + } + } +} + int main(void) { test_enum_bitfield_uint(); test_enum_bitfield_int(); test_enum_bitfield_uchar(); test_enum_bitfield_char(); + test_enum_bitfield_ulong(); + test_enum_bitfield_long(); printf("failures: %u\n", failures); return failures; } diff --git a/test/val/bitfield-packing-char.c b/test/val/bitfield-packing-char.c new file mode 100644 index 000000000..18621e0eb --- /dev/null +++ b/test/val/bitfield-packing-char.c @@ -0,0 +1,278 @@ +/* + Copyright 2020-2022 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of char bit-field packing and typedef works with them; see issues below + - packing issue: https://github.com/cc65/cc65/issues/1054 + - typedef issue: https://github.com/cc65/cc65/pull/1662 + - char bit-field support: https://github.com/cc65/cc65/issues/1047 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +typedef unsigned char field_type; + +static struct four_bits { + field_type x : 4; +} fb = {1}; + +static void test_four_bits(void) +{ + if (sizeof(struct four_bits) != 1) { + printf("Got sizeof(struct four_bits) = %zu, expected 1.\n", + sizeof(struct four_bits)); + failures++; + } + + if (fb.x != 1) { + printf("Got fb.x = %u, expected 1.\n", fb.x); + failures++; + } + + fb.x = 3; + + if (fb.x != 3) { + printf("Got fb.x = %u, expected 3.\n", fb.x); + failures++; + } +} + +/* + Logic is somewhat diferent for bit-fields that end a struct vs + having additional fields. +*/ + +static struct four_bits_with_char { + field_type x : 4; + field_type y; +} fbi = {1, 2}; + +static void test_four_bits_with_char(void) +{ + /* The first 4-bit bit-field just takes one byte, so the size is 2. */ + if (sizeof(struct four_bits_with_char) != 2) { + printf("Got sizeof(struct four_bits_with_char) = %zu, expected 2.\n", + sizeof(struct four_bits_with_char)); + failures++; + } + + if (fbi.x != 1) { + printf("Got fbi.x = %u, expected 1.\n", fbi.x); + failures++; + } + + if (fbi.y != 2) { + printf("Got fbi.y = %u, expected 2.\n", fbi.y); + failures++; + } + + fbi.x = 3; + fbi.y = 17; + + if (fbi.x != 3) { + printf("Got fbi.x = %u, expected 3.\n", fbi.x); + failures++; + } + + if (fbi.y != 17) { + printf("Got fbi.y = %u, expected 17.\n", fbi.y); + failures++; + } +} + +static struct overlap { + field_type x : 6; + field_type y : 6; +} o = {11, 22}; + +/* Tests that bit-fields can share allocation units. */ +static void test_overlap(void) +{ + if (sizeof(struct overlap) != 2) { + printf("Got sizeof(struct overlap) = %zu, expected 2.\n", + sizeof(struct overlap)); + failures++; + } + + if (o.x != 11) { + printf("Got o.x = %u, expected 11.\n", o.x); + failures++; + } + + if (o.y != 22) { + printf("Got o.y = %u, expected 22.\n", o.y); + failures++; + } + + o.x = 33; + o.y = 44; + + if (o.x != 33) { + printf("Got o.x = %u, expected 33.\n", o.x); + failures++; + } + + if (o.y != 44) { + printf("Got o.y = %u, expected 44.\n", o.y); + failures++; + } +} + +static struct overlap_with_char { + field_type x : 6; + field_type y : 6; + field_type z; +} oi = {11, 22, 33}; + +static void test_overlap_with_char(void) +{ + /* First two fields in 2 bytes, then another 1 byte. */ + if (sizeof(struct overlap_with_char) != 3) { + printf("Got sizeof(struct overlap_with_char) = %zu, expected 3.\n", + sizeof(struct overlap_with_char)); + failures++; + } + + if (oi.x != 11) { + printf("Got oi.x = %u, expected 11.\n", oi.x); + failures++; + } + + if (oi.y != 22) { + printf("Got oi.y = %u, expected 22.\n", oi.y); + failures++; + } + + if (oi.z != 33) { + printf("Got oi.z = %u, expected 33.\n", oi.z); + failures++; + } + + oi.x = 44; + oi.y = 55; + oi.z = 66; + + if (oi.x != 44) { + printf("Got oi.x = %u, expected 44.\n", oi.x); + failures++; + } + + if (oi.y != 55) { + printf("Got oi.y = %u, expected 55.\n", oi.y); + failures++; + } + + if (oi.z != 66) { + printf("Got oi.z = %u, expected 66.\n", oi.z); + failures++; + } +} + +static struct full_width { + field_type x : 8; + field_type y : 8; +} fw = {255, 17}; + +static void test_full_width(void) +{ + if (sizeof(struct full_width) != 2) { + printf("Got sizeof(struct full_width) = %zu, expected 2.\n", + sizeof(struct full_width)); + failures++; + } + + if (fw.x != 255) { + printf("Got fw.x = %u, expected 255.\n", fw.x); + failures++; + } + + if (fw.y != 17) { + printf("Got fw.y = %u, expected 17.\n", fw.y); + failures++; + } + + fw.x = 42; + fw.y = 255; + + if (fw.x != 42) { + printf("Got fw.x = %u, expected 42.\n", fw.x); + failures++; + } + + if (fw.y != 255) { + printf("Got fw.y = %u, expected 255.\n", fw.y); + failures++; + } +} + +static struct aligned_end { + field_type : 2; + field_type x : 6; + /* y crosses a byte boundary, but fits in a byte when shifted. */ + field_type : 6; + field_type y : 7; +} ae = {63, 17}; + +static void test_aligned_end(void) +{ + if (sizeof(struct aligned_end) != 3) { + printf("Got sizeof(struct aligned_end) = %zu, expected 3.\n", + sizeof(struct aligned_end)); + failures++; + } + + if (ae.x != 63) { + printf("Got ae.x = %u, expected 63.\n", ae.x); + failures++; + } + + if (ae.y != 17) { + printf("Got ae.y = %u, expected 17.\n", ae.y); + failures++; + } + + ae.x = 42; + ae.y = 127; + + if (ae.x != 42) { + printf("Got ae.x = %u, expected 42.\n", ae.x); + failures++; + } + + if (ae.y != 127) { + printf("Got ae.y = %u, expected 127.\n", ae.y); + failures++; + } + +} + +int main(void) +{ + test_four_bits(); + test_four_bits_with_char(); + test_overlap(); + test_overlap_with_char(); + test_full_width(); + test_aligned_end(); + printf("failures: %u\n", failures); + return failures; +} diff --git a/test/val/bitfield-packing-long.c b/test/val/bitfield-packing-long.c new file mode 100644 index 000000000..fcc8eb7fe --- /dev/null +++ b/test/val/bitfield-packing-long.c @@ -0,0 +1,315 @@ +/* + Copyright 2020-2022 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of long bit-field packing and typedef works with them; see issues below + - packing: https://github.com/cc65/cc65/issues/1054 + - typedef: https://github.com/cc65/cc65/pull/1662 + - long bit-field support: https://github.com/cc65/cc65/issues/1131 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +typedef unsigned long field_type; + +static struct four_bits { + field_type x : 4; +} fb = {1}; + +static void test_four_bits(void) +{ + if (sizeof(struct four_bits) != 1) { + printf("Got sizeof(struct four_bits) = %zu, expected 1.\n", + sizeof(struct four_bits)); + failures++; + } + + if (fb.x != 1) { + printf("Got fb.x = %u, expected 1.\n", fb.x); + failures++; + } + + fb.x = 3; + + if (fb.x != 3) { + printf("Got fb.x = %u, expected 3.\n", fb.x); + failures++; + } +} + +/* + Logic is somewhat diferent for bit-fields that end a struct vs + having additional fields. +*/ + +static struct four_bits_with_long { + field_type x : 4; + field_type y; +} fbi = {1, 2}; + +static void test_four_bits_with_long(void) +{ + /* The first 4-bit bit-field just takes one byte, so the size is 5. */ + if (sizeof(struct four_bits_with_long) != 5) { + printf("Got sizeof(struct four_bits_with_long) = %zu, expected 5.\n", + sizeof(struct four_bits_with_long)); + failures++; + } + + if (fbi.x != 1) { + printf("Got fbi.x = %u, expected 1.\n", fbi.x); + failures++; + } + + if (fbi.y != 2) { + printf("Got fbi.y = %lu, expected 2.\n", fbi.y); + failures++; + } + + fbi.x = 3; + fbi.y = 65537; + + if (fbi.x != 3) { + printf("Got fbi.x = %u, expected 3.\n", fbi.x); + failures++; + } + + if (fbi.y != 65537) { + printf("Got fbi.y = %lu, expected 65537.\n", fbi.y); + failures++; + } +} + +static struct overlap { + field_type x : 10; + field_type y : 10; +} o = {11, 22}; + +/* Tests that bit-fields can share allocation units. */ +static void test_overlap(void) +{ + if (sizeof(struct overlap) != 3) { + printf("Got sizeof(struct overlap) = %zu, expected 3.\n", + sizeof(struct overlap)); + failures++; + } + + if (o.x != 11) { + printf("Got o.x = %u, expected 11.\n", o.x); + failures++; + } + + if (o.y != 22) { + printf("Got o.y = %u, expected 22.\n", o.y); + failures++; + } + + o.x = 33; + o.y = 44; + + if (o.x != 33) { + printf("Got o.x = %u, expected 33.\n", o.x); + failures++; + } + + if (o.y != 44) { + printf("Got o.y = %u, expected 44.\n", o.y); + failures++; + } +} + +static struct overlap_with_long { + field_type x : 10; + field_type y : 10; + field_type z; +} oi = {111, 222, 333}; + +static void test_overlap_with_long(void) +{ + /* First two fields in 3 bytes, then another 4 bytes. */ + if (sizeof(struct overlap_with_long) != 7) { + printf("Got sizeof(struct overlap_with_long) = %zu, expected 7.\n", + sizeof(struct overlap_with_long)); + failures++; + } + + if (oi.x != 111) { + printf("Got oi.x = %u, expected 111.\n", oi.x); + failures++; + } + + if (oi.y != 222) { + printf("Got oi.y = %u, expected 222.\n", oi.y); + failures++; + } + + if (oi.z != 333) { + printf("Got oi.z = %u, expected 333.\n", oi.z); + failures++; + } + + oi.x = 444; + oi.y = 555; + oi.z = 4294967295; + + if (oi.x != 444) { + printf("Got oi.x = %u, expected 444.\n", oi.x); + failures++; + } + + if (oi.y != 555) { + printf("Got oi.y = %u, expected 555.\n", oi.y); + failures++; + } + + if (oi.z != 4294967295) { + printf("Got oi.z = %lu, expected 4294967295.\n", oi.z); + failures++; + } +} + +static struct full_width { + field_type x : 8; + field_type y : 16; + field_type z : 32; +} fw = {255, 17, 1}; + +static void test_full_width(void) +{ + if (sizeof(struct full_width) != 7) { + printf("Got sizeof(struct full_width) = %zu, expected 7.\n", + sizeof(struct full_width)); + failures++; + } + + if (fw.x != 255) { + printf("Got fw.x = %u, expected 255.\n", fw.x); + failures++; + } + + if (fw.y != 17) { + printf("Got fw.y = %u, expected 17.\n", fw.y); + failures++; + } + + if (fw.z != 1) { + printf("Got fw.z = %lu, expected 1.\n", fw.z); + failures++; + } + + fw.x = 42; + fw.y = 1023; + fw.z = 65537; + + if (fw.x != 42) { + printf("Got fw.x = %u, expected 42.\n", fw.x); + failures++; + } + + if (fw.y != 1023) { + printf("Got fw.y = %u, expected 1023.\n", fw.y); + failures++; + } + + if (fw.z != 65537) { + printf("Got fw.z = %lu, expected 65537.\n", fw.z); + failures++; + } +} + +static struct aligned_end { + field_type : 2; + field_type x : 6; + field_type : 3; + field_type y : 13; + field_type : 14; + field_type z : 18; + /* w crosses a byte boundary, but fits in a byte when shifted. */ + field_type : 6; + field_type w : 7; +} ae = {63, 17, 1, 100}; + +static void test_aligned_end(void) +{ + if (sizeof(struct aligned_end) != 9) { + printf("Got sizeof(struct aligned_end) = %zu, expected 9.\n", + sizeof(struct aligned_end)); + failures++; + } + + if (ae.x != 63) { + printf("Got ae.x = %u, expected 63.\n", ae.x); + failures++; + } + + if (ae.y != 17) { + printf("Got ae.y = %u, expected 17.\n", ae.y); + failures++; + } + + if (ae.z != 1) { + printf("Got ae.z = %lu, expected 1.\n", ae.z); + failures++; + } + + if (ae.w != 100) { + printf("Got ae.w = %u, expected 100.\n", ae.w); + failures++; + } + + ae.x = 42; + ae.y = 1023; + ae.z = 262143; + ae.w = 66; + + if (ae.x != 42) { + printf("Got ae.x = %u, expected 42.\n", ae.x); + failures++; + } + + if (ae.y != 1023) { + printf("Got ae.y = %u, expected 1023.\n", ae.y); + failures++; + } + + if (ae.z != 262143) { + printf("Got ae.z = %lu, expected 262143.\n", ae.z); + failures++; + } + + if (ae.w != 66) { + printf("Got ae.w = %u, expected 66.\n", ae.w); + failures++; + } +} + +int main(void) +{ + test_four_bits(); + test_four_bits_with_long(); + test_overlap(); + test_overlap_with_long(); + test_full_width(); + test_aligned_end(); + printf("failures: %u\n", failures); + return failures; +} diff --git a/test/val/bitfield.c b/test/val/bitfield-packing.c similarity index 93% rename from test/val/bitfield.c rename to test/val/bitfield-packing.c index 1de19777a..5786d6906 100644 --- a/test/val/bitfield.c +++ b/test/val/bitfield-packing.c @@ -1,5 +1,5 @@ /* - Copyright 2020 The cc65 Authors + Copyright 2020-2022 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,9 @@ */ /* - Tests of bit-field packing; see https://github.com/cc65/cc65/issues/1054 + Tests of int bit-field packing and typedef works with them; see issues below + - packing issue: https://github.com/cc65/cc65/issues/1054 + - typedef issue: https://github.com/cc65/cc65/pull/1662 */ #include <stdio.h> @@ -83,15 +85,15 @@ static void test_four_bits_with_int(void) } fbi.x = 3; - fbi.y = 17; + fbi.y = 257; if (fbi.x != 3) { printf("Got fbi.x = %u, expected 3.\n", fbi.x); failures++; } - if (fbi.y != 17) { - printf("Got fbi.y = %u, expected 17.\n", fbi.y); + if (fbi.y != 257) { + printf("Got fbi.y = %u, expected 257.\n", fbi.y); failures++; } } @@ -166,7 +168,7 @@ static void test_overlap_with_int(void) oi.x = 444; oi.y = 555; - oi.z = 666; + oi.z = 65535; if (oi.x != 444) { printf("Got oi.x = %u, expected 444.\n", oi.x); @@ -178,8 +180,8 @@ static void test_overlap_with_int(void) failures++; } - if (oi.z != 666) { - printf("Got oi.z = %u, expected 666.\n", oi.z); + if (oi.z != 65535) { + printf("Got oi.z = %u, expected 65535.\n", oi.z); failures++; } } diff --git a/test/val/bitfield-plain.c b/test/val/bitfield-plain.c new file mode 100644 index 000000000..735f3dc87 --- /dev/null +++ b/test/val/bitfield-plain.c @@ -0,0 +1,180 @@ +/* + Copyright 2020-2022 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests that plain bit-fields are unsigned; see issues below + - unsigned integer types by default: https://github.com/cc65/cc65/issues/1095 + - char bit-field support: https://github.com/cc65/cc65/issues/1047 + - long bit-field support: https://github.com/cc65/cc65/issues/1131 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +static struct plain_ints { + int x : 4; + int y : 10; +} pi = {15, 700}; + +static void test_plain_int_bitfields (void) +{ + if (pi.x != 15) { + printf ("Got pi.x = %ld, expected 15.\n", (long)pi.x); + failures++; + } + if (pi.y != 700) { + printf ("Got pi.y = %ld, expected 700.\n", (long)pi.y); + failures++; + } + + pi.x = 3; + pi.y = 1023; + + if (pi.x != 3) { + printf ("Got pi.x = %ld, expected 3.\n", (long)pi.x); + failures++; + } + if (pi.y != 1023) { + printf ("Got pi.y = %ld, expected 1023.\n", (long)pi.y); + failures++; + } +} + +static struct plain_shorts { + short x : 4; + short y : 10; +} ps = {15, 700}; + +static void test_plain_short_bitfields (void) +{ + if (ps.x != 15) { + printf ("Got ps.x = %ld, expected 15.\n", (long)ps.x); + failures++; + } + if (ps.y != 700) { + printf ("Got ps.y = %ld, expected 700.\n", (long)ps.y); + failures++; + } + + ps.x = 3; + ps.y = 1023; + + if (ps.x != 3) { + printf ("Got ps.x = %ld, expected 3.\n", (long)ps.x); + failures++; + } + if (ps.y != 1023) { + printf ("Got ps.y = %ld, expected 1023.\n", (long)ps.y); + failures++; + } +} + +static struct plain_chars { + char x : 4; +} pc = {15}; + +static void test_plain_char_bitfields (void) +{ + if (pc.x != 15) { + printf ("Got pc.x = %ld, expected 15.\n", (long)pc.x); + failures++; + } + + pc.x = 3; + + if (pc.x != 3) { + printf ("Got pc.x = %ld, expected 3.\n", (long)pc.x); + failures++; + } +} + +static struct plain_longs { + long x : 4; + long y : 10; + long z : 18; +} pl = {15, 700, 200000}; + +static void test_plain_long_bitfields (void) +{ + if (pl.x != 15) { + if (pl.x < 0) { + printf ("Got pl.x = %ld, expected 15.\n", (long)pl.x); + } else { + printf ("Got pl.x = %lu, expected 15.\n", (unsigned long)pl.x); + } + failures++; + } + if (pl.y != 700) { + if (pl.y < 0) { + printf ("Got pl.y = %ld, expected 700.\n", (long)pl.y); + } else { + printf ("Got pl.y = %lu, expected 700.\n", (unsigned long)pl.y); + } + failures++; + } + if (pl.z != 200000) { + if (pl.z < 0) { + printf ("Got pl.z = %ld, expected 200000.\n", (long)pl.z); + } else { + printf ("Got pl.z = %lu, expected 200000.\n", (unsigned long)pl.z); + } + failures++; + } + + pl.x = 3; + pl.y = 1023; + pl.z = 262143; + + if (pl.x != 3) { + if (pl.x < 0) { + printf ("Got pl.x = %ld, expected 3.\n", (long)pl.x); + } else { + printf ("Got pl.x = %lu, expected 3.\n", (unsigned long)pl.x); + } + failures++; + } + if (pl.y != 1023) { + if (pl.y < 0) { + printf ("Got pl.y = %ld, expected 1023.\n", (long)pl.y); + } else { + printf ("Got pl.y = %lu, expected 1023.\n", (unsigned long)pl.y); + } + failures++; + } + if (pl.z != 262143) { + if (pl.z < 0) { + printf ("Got pl.z = %ld, expected 262143.\n", (long)pl.z); + } else { + printf ("Got pl.z = %lu, expected 262143.\n", (unsigned long)pl.z); + } + failures++; + } +} + +int main (void) +{ + test_plain_int_bitfields (); + test_plain_short_bitfields (); + test_plain_char_bitfields (); + test_plain_long_bitfields (); + printf ("failures: %u\n", failures); + return failures; +} diff --git a/test/val/bitfield-signed.c b/test/val/bitfield-signed.c new file mode 100644 index 000000000..68f36f92a --- /dev/null +++ b/test/val/bitfield-signed.c @@ -0,0 +1,180 @@ +/* + Copyright 2020-2022 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be signedly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests that signed bit-fields are indeed signed; see issues below + - unsigned integer types by default: https://github.com/cc65/cc65/issues/1095 + - char bit-field support: https://github.com/cc65/cc65/issues/1047 + - long bit-field support: https://github.com/cc65/cc65/issues/1131 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +static struct signed_ints { + signed int x : 4; + signed int y : 10; +} pi = {-8, -500}; + +static void test_signed_int_bitfields (void) +{ + if (pi.x != -8) { + printf ("Got pi.x = %ld, expected -8.\n", (long)pi.x); + failures++; + } + if (pi.y != -500) { + printf ("Got pi.y = %ld, expected -500.\n", (long)pi.y); + failures++; + } + + pi.x = -3; + pi.y = -512; + + if (pi.x != -3) { + printf ("Got pi.x = %ld, expected -3.\n", (long)pi.x); + failures++; + } + if (pi.y != -512) { + printf ("Got pi.y = %ld, expected -512.\n", (long)pi.y); + failures++; + } +} + +static struct signed_shorts { + signed short x : 4; + signed short y : 10; +} ps = {-8, -500}; + +static void test_signed_short_bitfields (void) +{ + if (ps.x != -8) { + printf ("Got ps.x = %ld, expected -8.\n", (long)ps.x); + failures++; + } + if (ps.y != -500) { + printf ("Got ps.y = %ld, expected -500.\n", (long)ps.y); + failures++; + } + + ps.x = -3; + ps.y = -512; + + if (ps.x != -3) { + printf ("Got ps.x = %ld, expected -3.\n", (long)ps.x); + failures++; + } + if (ps.y != -512) { + printf ("Got ps.y = %ld, expected -512.\n", (long)ps.y); + failures++; + } +} + +static struct signed_chars { + signed char x : 4; +} pc = {-8}; + +static void test_signed_char_bitfields (void) +{ + if (pc.x != -8) { + printf ("Got pc.x = %ld, expected -8.\n", (long)pc.x); + failures++; + } + + pc.x = -3; + + if (pc.x != -3) { + printf ("Got pc.x = %ld, expected -3.\n", (long)pc.x); + failures++; + } +} + +static struct signed_longs { + signed long x : 4; + signed long y : 10; + signed long z : 18; +} pl = {-8, -500, -70000}; + +static void test_signed_long_bitfields (void) +{ + if (pl.x != -8) { + if (pl.x < 0) { + printf ("Got pl.x = %ld, expected -8.\n", (long)pl.x); + } else { + printf ("Got pl.x = %lu, expected -8.\n", (unsigned long)pl.x); + } + failures++; + } + if (pl.y != -500) { + if (pl.y < 0) { + printf ("Got pl.y = %ld, expected -500.\n", (long)pl.y); + } else { + printf ("Got pl.y = %lu, expected -500.\n", (unsigned long)pl.y); + } + failures++; + } + if (pl.z != -70000) { + if (pl.z < 0) { + printf ("Got pl.z = %ld, expected -70000.\n", (long)pl.z); + } else { + printf ("Got pl.z = %lu, expected -70000.\n", (unsigned long)pl.z); + } + failures++; + } + + pl.x = -3; + pl.y = -512; + pl.z = -131072; + + if (pl.x != -3) { + if (pl.x < 0) { + printf ("Got pl.x = %ld, expected -3.\n", (long)pl.x); + } else { + printf ("Got pl.x = %lu, expected -3.\n", (unsigned long)pl.x); + } + failures++; + } + if (pl.y != -512) { + if (pl.y < 0) { + printf ("Got pl.y = %ld, expected -512.\n", (long)pl.y); + } else { + printf ("Got pl.y = %lu, expected -512.\n", (unsigned long)pl.y); + } + failures++; + } + if (pl.z != -131072) { + if (pl.z < 0) { + printf ("Got pl.z = %ld, expected -131072.\n", (long)pl.z); + } else { + printf ("Got pl.z = %lu, expected -131072.\n", (unsigned long)pl.z); + } + failures++; + } +} + +int main (void) +{ + test_signed_int_bitfields (); + test_signed_short_bitfields (); + test_signed_char_bitfields (); + test_signed_long_bitfields (); + printf ("failures: %u\n", failures); + return failures; +} diff --git a/test/val/plain-int-bitfield.c b/test/val/plain-int-bitfield.c deleted file mode 100644 index 4d158eca9..000000000 --- a/test/val/plain-int-bitfield.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright 2020 The cc65 Authors - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/* - Tests that plain int bit-fields are unsigned. -*/ - -#include <stdio.h> - -static unsigned char failures = 0; - -static struct plain_ints { - int x : 4; - int y : 10; -} pi = {15, 700}; - -static void test_plain_int_bitfields (void) -{ - if (pi.x != 15) { - printf ("Got pi.x = %u, expected 15.\n", pi.x); - failures++; - } - if (pi.y != 700) { - printf ("Got pi.y = %u, expected 700.\n", pi.y); - failures++; - } - - pi.x = 3; - pi.y = 1023; - - if (pi.x != 3) { - printf ("Got pi.x = %u, expected 3.\n", pi.x); - failures++; - } - if (pi.y != 1023) { - printf ("Got pi.y = %u, expected 1023.\n", pi.y); - failures++; - } -} - -int main (void) -{ - test_plain_int_bitfields (); - printf ("failures: %u\n", failures); - return failures; -} From c8956ce19b4581c00ac0914db12e36f2ba9b3190 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 3 Mar 2022 20:24:14 +0800 Subject: [PATCH 1116/2710] Fixed signed long comparisons with smaller unsigned types. --- src/cc65/expr.c | 5 +---- test/val/bug1696.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 test/val/bug1696.c diff --git a/src/cc65/expr.c b/src/cc65/expr.c index b3e97ef99..ab48a4554 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2587,12 +2587,9 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ CmpSigned = 0; flags |= CF_UNSIGNED; } + } else { unsigned rtype = TypeOf (Expr2.Type) | (flags & CF_CONST); - if (CmpSigned) { - ltype &= ~CF_UNSIGNED; - rtype &= ~CF_UNSIGNED; - } flags |= g_typeadjust (ltype, rtype); } diff --git a/test/val/bug1696.c b/test/val/bug1696.c new file mode 100644 index 000000000..c31dc257b --- /dev/null +++ b/test/val/bug1696.c @@ -0,0 +1,44 @@ +/* + Copyright 2022 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of unsigned short/unsigned int vs signed long comparisons; + see https://github.com/cc65/cc65/issues/1696 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +int main(void) +{ + unsigned int x = 65535; + unsigned short y = 65535; + if (!(x > 1L)) { + printf("x = %ld but x > 1L failed\n", (long)x); + ++failures; + } + if (!(y == 65535L)) { + printf("y = %ld but y == 65535L failed\n", (long)y); + ++failures; + } + printf("failures: %u\n", failures); + return failures; +} From 1cb18182edc74f099ab359bb05f5a95ebff8e186 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Thu, 3 Mar 2022 12:06:15 -0600 Subject: [PATCH 1117/2710] Corrected size of BASROM definition --- cfg/sym1-32k.cfg | 2 +- cfg/sym1-4k.cfg | 2 +- cfg/sym1.cfg | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cfg/sym1-32k.cfg b/cfg/sym1-32k.cfg index ad0d760f3..7949375d3 100644 --- a/cfg/sym1-32k.cfg +++ b/cfg/sym1-32k.cfg @@ -29,7 +29,7 @@ MEMORY { EXT: file = "", define = yes, start = $9000, size = $1000; IO: file = "", define = yes, start = $A000, size = $1000; RAE1: file = "", define = yes, start = $B000, size = $1000; - BASROM: file = "", define = yes, start = $C000, size = $1000; + BASROM: file = "", define = yes, start = $C000, size = $2000; RAE2: file = "", define = yes, start = $E000, size = $1000; TOP: file = "", define = yes, start = $F000, size = $1000; } diff --git a/cfg/sym1-4k.cfg b/cfg/sym1-4k.cfg index 32d3cbb3a..468a76fe0 100644 --- a/cfg/sym1-4k.cfg +++ b/cfg/sym1-4k.cfg @@ -29,7 +29,7 @@ MEMORY { EXT: file = "", define = yes, start = $9000, size = $1000; IO: file = "", define = yes, start = $A000, size = $1000; RAE1: file = "", define = yes, start = $B000, size = $1000; - BASROM: file = "", define = yes, start = $C000, size = $1000; + BASROM: file = "", define = yes, start = $C000, size = $2000; RAE2: file = "", define = yes, start = $E000, size = $1000; TOP: file = "", define = yes, start = $F000, size = $1000; } diff --git a/cfg/sym1.cfg b/cfg/sym1.cfg index 32d3cbb3a..468a76fe0 100644 --- a/cfg/sym1.cfg +++ b/cfg/sym1.cfg @@ -29,7 +29,7 @@ MEMORY { EXT: file = "", define = yes, start = $9000, size = $1000; IO: file = "", define = yes, start = $A000, size = $1000; RAE1: file = "", define = yes, start = $B000, size = $1000; - BASROM: file = "", define = yes, start = $C000, size = $1000; + BASROM: file = "", define = yes, start = $C000, size = $2000; RAE2: file = "", define = yes, start = $E000, size = $1000; TOP: file = "", define = yes, start = $F000, size = $1000; } From 81338a61c3a8576ff29408c3bc372c8f95d33621 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Thu, 3 Mar 2022 17:47:31 -0600 Subject: [PATCH 1118/2710] Added Sym-1 extended memory sample program and documentation --- doc/sym1.sgml | 9 +-- samples/sym1/Makefile | 7 ++- samples/sym1/symExtendedMemory.c | 95 ++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 samples/sym1/symExtendedMemory.c diff --git a/doc/sym1.sgml b/doc/sym1.sgml index 5961984bd..c2265ba7b 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -29,7 +29,7 @@ Included with this distribution is a 4k configuration file and a 32k config file <sect>Memory layout<p> -The ROMs and I/O areas are defined in the configuration files, as are most of the entry points for useful subroutines in the Sym-1 monitor ROM. cc65 generated programs compiled and linked using 4k config run in the memory range of $200 - $0FFF. The 32k config expands this range to $7FFF. The starting memory location and entry point for running the program is $200, so when the program is transferred to the Sym-1, it is executed by typing 'g 200'. The system returns control back to the monitor ROM when the program terminates, providing the '.' prompt. +The ROMs and I/O areas are defined in the configuration files, as are most of the entry points for useful subroutines in the Sym-1 monitor ROM. cc65 generated programs compiled and linked using 4k config run in the memory range of $200 - $0FFF. The 32k config expands this range to $7FFF. Memory above 32K can be used to extend the heap, as described below. The starting memory location and entry point for running the program is $200, so when the program is transferred to the Sym-1, it is executed by typing 'g 200'. The system returns control back to the monitor ROM when the program terminates, providing the '.' prompt. Special locations: @@ -41,7 +41,7 @@ Special locations: The C runtime stack is located at $0FFF on 4KB Syms, or at $7FFF for 32KB systems. The stack always grows downwards. <tag/Heap/ - The C heap is located at the end of the program and grows towards the C runtime stack. + The C heap is located at the end of the program and grows towards the C runtime stack. Extended memory can be added to the heap, as described below. </descrip><p> @@ -61,7 +61,7 @@ No graphics drivers are currently available for the Sym-1. <sect1>Extended memory drivers<p> -No extended memory drivers are currently available for the Sym-1. +See the example program, symExtendedMemory, in the samples directory. <sect1>Joystick drivers<p> @@ -102,7 +102,7 @@ As stated earlier, there are config files for 4KB and 32KB systems. If you have <sect3>Sample programs<p> -All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. These sample programs can be found in the samples/sym1 directory: +All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. Additionally, symExtendedMemory shows how to access memory above 32KB, so it expects more than 32KB. These sample programs can be found in the samples/sym1 directory: <itemize> <item>symHello prints "Hello World!" and then inputs characters, which are echoed on the screen. It also makes a "beep" sound.</item> @@ -110,6 +110,7 @@ All the samples will run on the "stock" 4KB Sym-1, except for symIO an <item>symDisplay allows entry of a message, which is then displayed by scrolling it across the front panel display.</item> <item>symIO allows access to the Sym-1 digital I/O ports.</item> <item>symNotepad is a simple text entry/retrieval program that uses tape storage.</item> +<item>symExtendedMemory demonstrates how to access upper-memory and add it to the heap.</item> </itemize> <sect>License<p> diff --git a/samples/sym1/Makefile b/samples/sym1/Makefile index 14da90ad3..281b5bcd0 100644 --- a/samples/sym1/Makefile +++ b/samples/sym1/Makefile @@ -32,7 +32,7 @@ else endif EXELIST_sym1 = \ - symHello.bin symTiny.bin symDisplay.bin symIO.bin symNotepad.bin + symHello.bin symTiny.bin symDisplay.bin symIO.bin symNotepad.bin symExtendedMemory.bin ifneq ($(EXELIST_$(SYS)),) samples: $(EXELIST_$(SYS)) @@ -64,9 +64,14 @@ symIO.bin: symIO.c symNotepad.bin: symNotepad.c $(CL) -t sym1 -C sym1-32k.cfg -O -o symNotepad.bin symNotepad.c +symExtendedMemory.bin: symExtendedMemory.c + $(CL) -t sym1 -C sym1-32k.cfg -O -o symExtendedMemory.bin symExtendedMemory.c + + clean: @$(DEL) symHello.bin 2>$(NULLDEV) @$(DEL) symTiny.bin 2>$(NULLDEV) @$(DEL) symDisplay.bin 2>$(NULLDEV) @$(DEL) symIO.bin 2>$(NULLDEV) @$(DEL) symNotepad.bin 2>$(NULLDEV) + @$(DEL) symExtendedMemory.bin 2>$(NULLDEV) diff --git a/samples/sym1/symExtendedMemory.c b/samples/sym1/symExtendedMemory.c new file mode 100644 index 000000000..81902382f --- /dev/null +++ b/samples/sym1/symExtendedMemory.c @@ -0,0 +1,95 @@ +// -------------------------------------------------------------------------- +// Sym-1 Extended Memory +// +// Wayne Parham +// +// wayne@parhamdata.com +// -------------------------------------------------------------------------- +// +// Note: This program examines memory above the monitor ROM (8000-8FFF) to +// Determine what, if any, memory is available. It then adds whatever +// 4K segments it finds to the heap. +// +// Memory Segment Remark +// 0x9000 Usually available +// 0xA000 System I/O, always unavailable +// 0xB000 Used by RAE, but normally available +// 0xC000 Used by BASIC, normally unavailable +// 0xD000 Used by BASIC, normally unavailable +// 0xE000 Used by RAE, but normally available +// 0xF000 Normally available, but only to FF7F +// +// -------------------------------------------------------------------------- + +#include <sym1.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#define SEGMENT 0x9000 // First 4K segment of extended memory +#define SEG_END 0x0FFF // Last location of segment +#define BLOCK_SIZE 0x1000 // Size of segment +#define TOP_END 0x0F7F // Last location of memory +#define TOP_SIZE 0x0F80 // Size of top segment +#define UNAVAILABLE 0xA000 // System I/O area + +int main (void) { + int error = 0; + unsigned heap_size = 0x0000; + char* segment = (char*) SEGMENT; + + printf ( "Analyzing memory.\n\n" ); + + heap_size = _heapmemavail(); + + printf ( "Main memory has %d bytes available.\n", heap_size ); + + while ( (int) segment < 0xEFFF ) { // Iterate through 4K memory blocks + if( (int) segment != UNAVAILABLE ) { + segment[0] = 0x00; // Check beginning of segment + if ( segment[0] != 0x00 ) + error = 1; + segment[0] = 0xFF; + if ( segment[0] != 0xFF ) + error = 1; + segment[SEG_END] = 0x00; // Check end of segment + if ( segment[SEG_END] != 0x00 ) + error = 1; + segment[SEG_END] = 0xFF; + if ( segment[SEG_END] != 0xFF ) + error = 1; + if ( ! error ) { // If memory found, add to the heap + printf ( "Memory found at location %p, ", segment ); + _heapadd ( segment, BLOCK_SIZE ); + heap_size = _heapmemavail(); + printf( "so the system now has %u bytes available.\n", heap_size ); + } else { + error = 0; + } + } + segment += 0x1000; // Increment to next segment + } + + segment[0] = 0x00; // Check beginning of top memory segment + if ( segment[0] != 0x00 ) + error = 1; + segment[0] = 0xFF; + if ( segment[0] != 0xFF ) + error = 1; + segment[TOP_END] = 0x00; // Check end of usable memory + if ( segment[TOP_END] != 0x00 ) + error = 1; + segment[TOP_END] = 0xFF; + if ( segment[TOP_END] != 0xFF ) + error = 1; + if ( ! error ) { // If memory found, add to the heap + printf ( "Memory found at location %p, ", segment ); + _heapadd ( segment, TOP_SIZE ); + heap_size = _heapmemavail(); + printf( "so the system now has %u bytes available.\n", heap_size ); + } + + puts ("\nEnjoy your day!\n"); + + return 0; +} From dc9c0fe90ba3aead76838dbf39041fff91e819a3 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Thu, 3 Mar 2022 19:57:43 -0600 Subject: [PATCH 1119/2710] unsigned int format specifier --- samples/sym1/symExtendedMemory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/sym1/symExtendedMemory.c b/samples/sym1/symExtendedMemory.c index 81902382f..db0231236 100644 --- a/samples/sym1/symExtendedMemory.c +++ b/samples/sym1/symExtendedMemory.c @@ -42,7 +42,7 @@ int main (void) { heap_size = _heapmemavail(); - printf ( "Main memory has %d bytes available.\n", heap_size ); + printf ( "Main memory has %u bytes available.\n", heap_size ); while ( (int) segment < 0xEFFF ) { // Iterate through 4K memory blocks if( (int) segment != UNAVAILABLE ) { From 7664a2f61e5d30716bafbeafb4d2abda0b8bd398 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Thu, 3 Mar 2022 20:51:16 -0600 Subject: [PATCH 1120/2710] Documentation clarifications --- doc/sym1.sgml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/sym1.sgml b/doc/sym1.sgml index c2265ba7b..565f11e43 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -61,7 +61,7 @@ No graphics drivers are currently available for the Sym-1. <sect1>Extended memory drivers<p> -See the example program, symExtendedMemory, in the samples directory. +There are no extended memory drivers for the Sym-1. However, there is a way to access memory beyond the 32k boundary, if memory is physically present in the system. See the example program, symExtendedMemory, in the samples directory. <sect1>Joystick drivers<p> @@ -100,7 +100,11 @@ This header exposes Sym-specific I/O functions that are useful for reading and w As stated earlier, there are config files for 4KB and 32KB systems. If you have 32KB RAM, then you will probably want to use the sym1-32k configuration, but if not - if you are using the sym1-4k configuration - then you may want to use functions like getchar, putchar, gets and puts rather than functions like scanf and printf. Printf, for example, requires about 1KB because it needs to know how to process all the format specifiers. -<sect3>Sample programs<p> +<sect3>Using extended memory<p> + +Memory may be physically present that is addressed at locations above the monitor ROM at $8000. This extended memory is accessible by adding to the heap, as described in the symExtendedMemory sample program. + +<sect4>Sample programs<p> All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. Additionally, symExtendedMemory shows how to access memory above 32KB, so it expects more than 32KB. These sample programs can be found in the samples/sym1 directory: From 3cb85fd5e8803c27cd50658d2fba381ebdcc969b Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Fri, 4 Mar 2022 06:23:06 -0600 Subject: [PATCH 1121/2710] Minor updates --- doc/sym1.sgml | 72 ++++++++++++++++------ samples/sym1/symExtendedMemory.c | 102 ++++++++++++++++--------------- 2 files changed, 108 insertions(+), 66 deletions(-) diff --git a/doc/sym1.sgml b/doc/sym1.sgml index 565f11e43..b97f94720 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -15,21 +15,40 @@ An overview over the Sym-1 runtime system as it is implemented for the cc65 C co <sect>Overview<p> -This file contains an overview of the Sym-1 runtime system as it comes with the cc65 C compiler. It describes the memory layout, Sym-1 specific header files, available drivers, and any pitfalls specific to the platform. +This file contains an overview of the Sym-1 runtime system as it comes with the cc65 C compiler. +It describes the memory layout, Sym-1 specific header files, available drivers, and any pitfalls +specific to the platform. -Please note that Sym-1 specific functions are just mentioned here, they are described in detail in the separate <url url="funcref.html" name="function reference">. Even functions marked as "platform dependent" may be available on more than one platform. Please see the function reference for more information. +Please note that Sym-1 specific functions are just mentioned here, they are described in detail +in the separate <url url="funcref.html" name="function reference">. Even functions marked as +"platform dependent" may be available on more than one platform. Please see the +function reference for more information. <sect>Binary format<p> -The output format generated by the linker for the Sym-1 target is a raw binary BIN file, which is essentially a memory image. You can convert this to a HEX file using BIN2HEX, which is a popular open-source conversion utility program. A HEX file has ASCII representations of the hexadecimal byte values of the machine-language program. So the HEX file can be transferred to the Sym-1 using the RS-232 terminal port, just as if the machine-code was entered by hand. Enter 'm 200' in the monitor and start the HEX file transfer. +The output format generated by the linker for the Sym-1 target is a raw binary BIN file, which +is essentially a memory image. You can convert this to a HEX file using BIN2HEX, which is a +popular open-source conversion utility program. A HEX file has ASCII representations of the +hexadecimal byte values of the machine-language program. So the HEX file can be transferred +to the Sym-1 using the RS-232 terminal port, just as if the machine-code was entered by hand. +Enter 'm 200' in the monitor and start the HEX file transfer. <p> -Included with this distribution is a 4k configuration file and a 32k config file. The Sym-1 on-board memory is limited to 4 kbytes but system memory can be increased to 32 kbytes of contiguous RAM with aftermarket add-on boards. So choose the config file that matches your system configuration before compiling and linking user programs. +Included with this distribution is a 4k configuration file and a 32k config file. The Sym-1 +on-board memory is limited to 4 kbytes but system memory can be increased to 32 kbytes of +contiguous RAM with aftermarket add-on boards. So choose the config file that matches your +system configuration before compiling and linking user programs. <sect>Memory layout<p> -The ROMs and I/O areas are defined in the configuration files, as are most of the entry points for useful subroutines in the Sym-1 monitor ROM. cc65 generated programs compiled and linked using 4k config run in the memory range of $200 - $0FFF. The 32k config expands this range to $7FFF. Memory above 32K can be used to extend the heap, as described below. The starting memory location and entry point for running the program is $200, so when the program is transferred to the Sym-1, it is executed by typing 'g 200'. The system returns control back to the monitor ROM when the program terminates, providing the '.' prompt. +The ROMs and I/O areas are defined in the configuration files, as are most of the entry points +for useful subroutines in the Sym-1 monitor ROM. cc65 generated programs compiled and linked +using 4k config run in the memory range of $200 - $0FFF. The 32k config expands +this range to $7FFF. Memory above 32k can be used to extend the heap, as described below. +The starting memory location and entry point for running the program is $200, so when the +program is transferred to the Sym-1, it is executed by typing 'g 200'. The system returns control +back to the monitor ROM when the program terminates, providing the '.' prompt. Special locations: @@ -38,10 +57,12 @@ Special locations: Conio support is not currently available for the Sym-1. But stdio console functions are available. <tag/Stack/ - The C runtime stack is located at $0FFF on 4KB Syms, or at $7FFF for 32KB systems. The stack always grows downwards. + The C runtime stack is located at $0FFF on 4kb Syms, or at $7FFF for 32kb systems. + The stack always grows downwards. <tag/Heap/ - The C heap is located at the end of the program and grows towards the C runtime stack. Extended memory can be added to the heap, as described below. + The C heap is located at the end of the program and grows towards the C runtime stack. Extended + memory can be added to the heap, as described below. </descrip><p> @@ -51,7 +72,8 @@ Programs containing Sym-1 code may use the <tt/sym1.h/ header file. See the hea <sect1>Hardware access<p> -The pseudo variables declared in the <tt/sym1.inc/ include file allow access to hardware located in the address space. See the include file for more information. +The pseudo variables declared in the <tt/sym1.inc/ include file allow access to hardware located in the +address space. See the include file for more information. <sect>Loadable drivers<p> @@ -61,7 +83,9 @@ No graphics drivers are currently available for the Sym-1. <sect1>Extended memory drivers<p> -There are no extended memory drivers for the Sym-1. However, there is a way to access memory beyond the 32k boundary, if memory is physically present in the system. See the example program, symExtendedMemory, in the samples directory. +There are no extended memory drivers for the Sym-1. However, there is a way to access memory beyond the +32kb boundary, if extended memory is physically present in the system. See the example program, +symExtendedMemory, in the samples directory. <sect1>Joystick drivers<p> @@ -73,7 +97,8 @@ No mouse drivers are currently available for the Sym-1. <sect1>RS232 device drivers<p> -No communication port drivers are currently available for the Sym-1. It has only the "master console" e.g. stdin and stdout. +No communication port drivers are currently available for the Sym-1. It has only the "master console" +e.g. stdin and stdout. <sect>Limitations<p> @@ -94,23 +119,32 @@ To be more specific, this limitation means that you cannot use any of the follow <sect>Other hints<p> <sect1>sym1.h<p> -This header exposes Sym-specific I/O functions that are useful for reading and writing its ports and front panel. See the <tt/sym1.h/ include file for a list of the functions available. +This header exposes Sym-specific I/O functions that are useful for reading and writing its ports and front panel. +See the <tt/sym1.h/ include file for a list of the functions available. <sect2>Limited memory applications<p> -As stated earlier, there are config files for 4KB and 32KB systems. If you have 32KB RAM, then you will probably want to use the sym1-32k configuration, but if not - if you are using the sym1-4k configuration - then you may want to use functions like getchar, putchar, gets and puts rather than functions like scanf and printf. Printf, for example, requires about 1KB because it needs to know how to process all the format specifiers. +As stated earlier, there are config files for 4kb and 32kb systems. If you have 32kb RAM, then you will probably +want to use the sym1-32k configuration, but if not - if you are using the sym1-4k configuration - then you may +want to use functions like getchar, putchar, gets and puts rather than functions like scanf and printf. +Printf, for example, requires about 1KB because it needs to know how to process all the format specifiers. <sect3>Using extended memory<p> -Memory may be physically present that is addressed at locations above the monitor ROM at $8000. This extended memory is accessible by adding to the heap, as described in the symExtendedMemory sample program. +Memory may be physically present that is addressed at locations above the monitor ROM at $8000. This extended +memory is accessible by adding to the heap, as described in the symExtendedMemory sample program. <sect4>Sample programs<p> -All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. Additionally, symExtendedMemory shows how to access memory above 32KB, so it expects more than 32KB. These sample programs can be found in the samples/sym1 directory: +All the samples will run on the "stock" 4kb Sym-1, except for symIO and symNotepad, which require 32kb. +Additionally, symExtendedMemory shows how to access memory above 32kb, so it expects more than 32kb. +These sample programs can be found in the samples/sym1 directory: <itemize> -<item>symHello prints "Hello World!" and then inputs characters, which are echoed on the screen. It also makes a "beep" sound.</item> -<item>symTiny does the same as symHello, but does it with puts() rather than printf() to show the difference in compiled binary size.</item> +<item>symHello prints "Hello World!" and then inputs characters, which are echoed on the screen. + It also makes a "beep" sound.</item> +<item>symTiny does the same as symHello, but does it with puts() rather than printf() to show the difference + in compiled binary size.</item> <item>symDisplay allows entry of a message, which is then displayed by scrolling it across the front panel display.</item> <item>symIO allows access to the Sym-1 digital I/O ports.</item> <item>symNotepad is a simple text entry/retrieval program that uses tape storage.</item> @@ -119,9 +153,11 @@ All the samples will run on the "stock" 4KB Sym-1, except for symIO an <sect>License<p> -This software is provided 'as-is', without any expressed or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. +This software is provided 'as-is', without any expressed or implied warranty. In no event will the authors be held +liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter +it and redistribute it freely, subject to the following restrictions: <enum> <item> The origin of this software must not be misrepresented; you must not diff --git a/samples/sym1/symExtendedMemory.c b/samples/sym1/symExtendedMemory.c index db0231236..cc01da353 100644 --- a/samples/sym1/symExtendedMemory.c +++ b/samples/sym1/symExtendedMemory.c @@ -26,12 +26,13 @@ #include <stdlib.h> #include <string.h> -#define SEGMENT 0x9000 // First 4K segment of extended memory -#define SEG_END 0x0FFF // Last location of segment -#define BLOCK_SIZE 0x1000 // Size of segment -#define TOP_END 0x0F7F // Last location of memory -#define TOP_SIZE 0x0F80 // Size of top segment -#define UNAVAILABLE 0xA000 // System I/O area +#define STD_MEM 0x7FFF // Last address of standard memory +#define SEGMENT 0x9000 // First 4K segment of extended memory +#define SEG_END 0x0FFF // Last location of segment +#define BLOCK_SIZE 0x1000 // Size of segment +#define TOP_END 0x0F7F // Last location of memory +#define TOP_SIZE 0x0F80 // Size of top segment +#define UNAVAILABLE 0xA000 // System I/O area int main (void) { int error = 0; @@ -44,49 +45,54 @@ int main (void) { printf ( "Main memory has %u bytes available.\n", heap_size ); - while ( (int) segment < 0xEFFF ) { // Iterate through 4K memory blocks - if( (int) segment != UNAVAILABLE ) { - segment[0] = 0x00; // Check beginning of segment - if ( segment[0] != 0x00 ) - error = 1; - segment[0] = 0xFF; - if ( segment[0] != 0xFF ) - error = 1; - segment[SEG_END] = 0x00; // Check end of segment - if ( segment[SEG_END] != 0x00 ) - error = 1; - segment[SEG_END] = 0xFF; - if ( segment[SEG_END] != 0xFF ) - error = 1; - if ( ! error ) { // If memory found, add to the heap - printf ( "Memory found at location %p, ", segment ); - _heapadd ( segment, BLOCK_SIZE ); - heap_size = _heapmemavail(); - printf( "so the system now has %u bytes available.\n", heap_size ); - } else { - error = 0; - } - } - segment += 0x1000; // Increment to next segment - } + if ( heap_size > STD_MEM ) { + printf ( "Extended memory already installed.\n" ); + } else { - segment[0] = 0x00; // Check beginning of top memory segment - if ( segment[0] != 0x00 ) - error = 1; - segment[0] = 0xFF; - if ( segment[0] != 0xFF ) - error = 1; - segment[TOP_END] = 0x00; // Check end of usable memory - if ( segment[TOP_END] != 0x00 ) - error = 1; - segment[TOP_END] = 0xFF; - if ( segment[TOP_END] != 0xFF ) - error = 1; - if ( ! error ) { // If memory found, add to the heap - printf ( "Memory found at location %p, ", segment ); - _heapadd ( segment, TOP_SIZE ); - heap_size = _heapmemavail(); - printf( "so the system now has %u bytes available.\n", heap_size ); + while ( (int) segment < 0xEFFF ) { // Iterate through 4K memory blocks + if( (int) segment != UNAVAILABLE ) { + segment[0] = 0x00; // Check beginning of segment + if ( segment[0] != 0x00 ) + error = 1; + segment[0] = 0xFF; + if ( segment[0] != 0xFF ) + error = 1; + segment[SEG_END] = 0x00; // Check end of segment + if ( segment[SEG_END] != 0x00 ) + error = 1; + segment[SEG_END] = 0xFF; + if ( segment[SEG_END] != 0xFF ) + error = 1; + if ( ! error ) { // If memory found, add to the heap + printf ( "Memory found at location %p, ", segment ); + _heapadd ( segment, BLOCK_SIZE ); + heap_size = _heapmemavail(); + printf( "so the system now has %u bytes available.\n", heap_size ); + } else { + error = 0; + } + } + segment += 0x1000; // Increment to next segment + } + + segment[0] = 0x00; // Check beginning of top memory segment + if ( segment[0] != 0x00 ) + error = 1; + segment[0] = 0xFF; + if ( segment[0] != 0xFF ) + error = 1; + segment[TOP_END] = 0x00; // Check end of usable memory + if ( segment[TOP_END] != 0x00 ) + error = 1; + segment[TOP_END] = 0xFF; + if ( segment[TOP_END] != 0xFF ) + error = 1; + if ( ! error ) { // If memory found, add to the heap + printf ( "Memory found at location %p, ", segment ); + _heapadd ( segment, TOP_SIZE ); + heap_size = _heapmemavail(); + printf( "so the system now has %u bytes available.\n", heap_size ); + } } puts ("\nEnjoy your day!\n"); From cc9535e82f379ff5b5001072142d28737e7541aa Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Fri, 4 Mar 2022 20:21:20 +0200 Subject: [PATCH 1122/2710] Update docs --- doc/atari7800.sgml | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/doc/atari7800.sgml b/doc/atari7800.sgml index 95868bbd9..85f6e4f9f 100644 --- a/doc/atari7800.sgml +++ b/doc/atari7800.sgml @@ -3,7 +3,7 @@ <article> <title>Atari 7800 specific information for cc65 <author> -<url url="mailto:contact@florentflament.com" name="Florent Flament"><newline> +<url url="mailto:karri@sipo.fi" name="Karri Kaksonen"><newline> <abstract> An overview over the Atari 7800 runtime system as it is implemented @@ -24,23 +24,31 @@ comes with the cc65 C compiler. It describes the memory layout, Atari <sect>Binary format<p> The default binary output format generated by the linker for the Atari -7800 target is a 4K cartridge image. +7800 target is a 32K cartridge image. <sect>Memory layout<p> cc65 generated programs with the default setup can use RAM from -$0080 to $00FF - __STACKSIZE__, where __STACKSIZE__ is -the size of the system stack with a default value of 16 bytes. The +from $1800 to $203f. +The 4k RAM is then mapped to zero page area. +$2040 to $20ff is visible as zero page. +After that we have a vero small RAM area that is unused. +$2100 to $213f. +Then we mirror a second block from the RAM to become the hardware stack. +This would be from $2140 to $21ff. + +The C-stack starts at $2800 and it can grow down to $2200. + size of the system stack can be customized by defining the __STACKSIZE__ linker variable. Special locations: <descrip> - <tag/Stack/ The C runtime stack is located at $00FF - + <tag/Stack/ The C runtime stack is located at $2800 - __STACKSIZE__ and growing downwards. - <tag/Heap/ The C heap is located at $0080 and grows upwards. + <tag/Heap/ The C heap is located at $2200 and grows upwards. </descrip><p> @@ -61,7 +69,7 @@ Programs containing Atari 7800 specific code may use the <tt/atari7800.h/ header file. The following pseudo variables declared in the <tt/atari7800.h/ header -file allow access to the Atari 7800 TIA & RIOT chips registers. +file allow access to the Atari 7800 TIA, MARIA & RIOT chips registers. <descrip> @@ -78,6 +86,11 @@ file allow access to the Atari 7800 TIA & RIOT chips registers. Guide by Steve Wright for a detailed description of the chip and its registers. + <tag><tt/MARIA/</tag> The <tt/MARIA/ structure allows read/write + access to the Atari 7800 MARIA chip registers. See the + <tt/_maria.h/ header file located in the include directory for the + declaration of the structure. + </descrip><p> @@ -91,6 +104,12 @@ There are no drivers for the Atari 7800. TBD +<sect>Encryption<p> + +In order to boot the game in a mode that supports atari7800 functions +the cart must be encrypted after the linking phase. +There is a program called sign7800 that can be used to sign the cart. + <sect>Other hints<p> One may write a custom linker configuration file to tune the memory From f36b9b544dd16070813782e8c566a9b9fa2a8e77 Mon Sep 17 00:00:00 2001 From: nyanpasu64 <nyanpasu64@tuta.io> Date: Mon, 21 Feb 2022 21:15:43 -0800 Subject: [PATCH 1123/2710] Fix segfault on 64-bit LLP64 Windows builds There are many occurrences of unsigned long in codegen.h's function arguments. Changing g_getimmed and g_defdata makes `make` succeed without segfaulting. I don't know if it makes cc65 behave correctly in all cases, or if there are more unsigned long that need to be changed. --- src/cc65/codegen.c | 4 ++-- src/cc65/codegen.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 3a98f5e63..59be677fd 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -689,7 +689,7 @@ void g_restore_regvars (int StackOffs, int RegOffs, unsigned Bytes) -void g_getimmed (unsigned Flags, unsigned long Val, long Offs) +void g_getimmed (unsigned Flags, uintptr_t Val, long Offs) /* Load a constant into the primary register */ { unsigned char B1, B2, B3, B4; @@ -4394,7 +4394,7 @@ void g_res (unsigned n) -void g_defdata (unsigned flags, unsigned long val, long offs) +void g_defdata (unsigned flags, uintptr_t val, long offs) /* Define data with the size given in flags */ { if (flags & CF_CONST) { diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index b0cf9858d..0a5384578 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -271,7 +271,7 @@ void g_restore_regvars (int StackOffs, int RegOffs, unsigned Bytes); -void g_getimmed (unsigned Flags, unsigned long Val, long Offs); +void g_getimmed (unsigned Flags, uintptr_t Val, long Offs); /* Load a constant into the primary register */ void g_getstatic (unsigned Flags, uintptr_t Label, long Offs); @@ -461,7 +461,7 @@ void g_ge (unsigned flags, unsigned long val); void g_res (unsigned n); /* Reserve static storage, n bytes */ -void g_defdata (unsigned flags, unsigned long val, long offs); +void g_defdata (unsigned flags, uintptr_t val, long offs); /* Define data with the size given in flags */ void g_defbytes (const void* bytes, unsigned count); From 2feba696223537371b5f8ac853a653fddcdf7a6d Mon Sep 17 00:00:00 2001 From: nyanpasu64 <nyanpasu64@tuta.io> Date: Sat, 5 Mar 2022 03:23:51 -0800 Subject: [PATCH 1124/2710] Remove broken inttypes.h src/common/inttypes.h is a shim to fix building cc65 on non-C99-compliant compilers missing inttypes.h (like VS2012 and earlier). The shim is actually incomplete and does not define the PRI... macros supplied by the actual compiler headers. Since we're planning to use those macros, delete this header so cc65's source files instead use host-supplied inttypes.h containing macro definitions. --- src/common.vcxproj | 1 - src/common/inttypes.h | 123 ------------------------------------------ 2 files changed, 124 deletions(-) delete mode 100644 src/common/inttypes.h diff --git a/src/common.vcxproj b/src/common.vcxproj index f7929df2b..df99fc4a9 100644 --- a/src/common.vcxproj +++ b/src/common.vcxproj @@ -74,7 +74,6 @@ <ClInclude Include="common\inline.h" /> <ClInclude Include="common\intptrstack.h" /> <ClInclude Include="common\intstack.h" /> - <ClInclude Include="common\inttypes.h" /> <ClInclude Include="common\libdefs.h" /> <ClInclude Include="common\lidefs.h" /> <ClInclude Include="common\matchpat.h" /> diff --git a/src/common/inttypes.h b/src/common/inttypes.h deleted file mode 100644 index 28ffb2cc5..000000000 --- a/src/common/inttypes.h +++ /dev/null @@ -1,123 +0,0 @@ -/*****************************************************************************/ -/* */ -/* inttypes.h */ -/* */ -/* Define integer types */ -/* */ -/* */ -/* */ -/* (C) 2004 Ullrich von Bassewitz */ -/* Roemerstrasse 52 */ -/* D-70794 Filderstadt */ -/* EMail: uz@cc65.org */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#ifndef INTTYPES_H -#define INTTYPES_H - - - -/* If we have <stdint.h>, include it; otherwise, adapt types from <stddef.h> -** and define integer boundary constants. -** gcc and msvc don't define __STDC_VERSION__ without special flags, so check -** for them explicitly. Undefined symbols are replaced by zero; so, checks for -** defined(__GNUC__) and defined(_MSC_VER) aren't necessary. -*/ -#if (__STDC_VERSION__ >= 199901) || (__GNUC__ >= 3) || (_MSC_VER >= 1600) -#include <stdint.h> -#else - -/* Assume that ptrdiff_t and size_t are wide enough to hold pointers. -** Assume that they are the widest type. -*/ -#include <limits.h> -#include <stddef.h> - -typedef ptrdiff_t intptr_t; -typedef size_t uintptr_t; -typedef ptrdiff_t intmax_t; -typedef size_t uintmax_t; - -#define INT8_MAX (0x7F) -#define INT16_MAX (0x7FFF) -#define INT32_MAX (0x7FFFFFFF) - -#define INT8_MIN (-INT8_MAX - 1) -#define INT16_MIN (-INT16_MAX - 1) -#define INT32_MIN (-INT32_MAX - 1) - -#define UINT8_MAX (0xFF) -#define UINT16_MAX (0xFFFF) -#define UINT32_MAX (0xFFFFFFFF) - -#if UCHAR_MAX == UINT8_MAX -typedef unsigned char uint8_t; -#else -#error "No suitable type for uint8_t found." -#endif - -#if SCHAR_MIN == INT8_MIN && SCHAR_MAX == INT8_MAX -typedef signed char int8_t; -#else -#error "No suitable type for int8_t found." -#endif - -#if UINT_MAX == UINT16_MAX -typedef unsigned int uint16_t; -#elif USHRT_MAX == UINT16_MAX -typedef unsigned short uint16_t; -#else -#error "No suitable type for uint16_t found." -#endif - -#if INT_MIN == INT16_MIN && INT_MAX == INT16_MAX -typedef int int16_t; -#elif SHRT_MIN == INT16_MIN && SHRT_MAX == INT16_MAX -typedef short int16_t; -#else -#error "No suitable type for int16_t found." -#endif - -#if UINT_MAX == UINT32_MAX -typedef unsigned int uint32_t; -#elif ULONG_MAX == UINT32_MAX -typedef unsigned long uint32_t; -#else -#error "No suitable type for uint32_t found." -#endif - -#if INT_MIN == INT32_MIN && INT_MAX == INT32_MAX -typedef int int32_t; -#elif LONG_MIN == INT32_MIN && LONG_MAX == INT32_MAX -typedef long int32_t; -#else -#error "No suitable type for int32_t found." -#endif - -#endif - - - -/* End of inttypes.h */ -#endif From 3466abc60cb768db4b46444255e45fd5ea69faa8 Mon Sep 17 00:00:00 2001 From: nyanpasu64 <nyanpasu64@tuta.io> Date: Sat, 5 Mar 2022 03:30:14 -0800 Subject: [PATCH 1125/2710] Fix format strings to properly format uintptr_t --- src/cc65/codegen.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 59be677fd..4f737555c 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -4403,15 +4403,15 @@ void g_defdata (unsigned flags, uintptr_t val, long offs) switch (flags & CF_TYPEMASK) { case CF_CHAR: - AddDataLine ("\t.byte\t$%02lX", val & 0xFF); + AddDataLine ("\t.byte\t$%02"PRIXPTR, val & 0xFF); break; case CF_INT: - AddDataLine ("\t.word\t$%04lX", val & 0xFFFF); + AddDataLine ("\t.word\t$%04"PRIXPTR, val & 0xFFFF); break; case CF_LONG: - AddDataLine ("\t.dword\t$%08lX", val & 0xFFFFFFFF); + AddDataLine ("\t.dword\t$%08"PRIXPTR, val & 0xFFFFFFFF); break; default: From 9cb81f1410c768562c56c75e665b31bed4bdc055 Mon Sep 17 00:00:00 2001 From: nyanpasu64 <nyanpasu64@tuta.io> Date: Sun, 6 Mar 2022 14:46:56 -0800 Subject: [PATCH 1126/2710] Replace #include "inttypes.h" with <inttypes.h> --- src/cc65/codegen.c | 2 +- src/cc65/codegen.h | 2 +- src/cc65/exprdesc.h | 2 +- src/common/xsprintf.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 4f737555c..5bfc6696b 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -33,6 +33,7 @@ +#include <inttypes.h> #include <limits.h> #include <stdio.h> #include <string.h> @@ -42,7 +43,6 @@ #include "addrsize.h" #include "check.h" #include "cpu.h" -#include "inttypes.h" #include "strbuf.h" #include "xmalloc.h" #include "xsprintf.h" diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index 0a5384578..1de71e7d3 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -37,10 +37,10 @@ #define CODEGEN_H +#include <inttypes.h> /* common */ #include "coll.h" -#include "inttypes.h" /* cc65 */ #include "segments.h" diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index a1487a0bd..13eb36e5e 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -38,12 +38,12 @@ +#include <inttypes.h> #include <string.h> /* common */ #include "fp.h" #include "inline.h" -#include "inttypes.h" /* cc65 */ #include "asmcode.h" diff --git a/src/common/xsprintf.c b/src/common/xsprintf.c index a7d26d5ef..5994bb604 100644 --- a/src/common/xsprintf.c +++ b/src/common/xsprintf.c @@ -33,6 +33,7 @@ +#include <inttypes.h> #include <stdio.h> #include <stddef.h> #include <string.h> @@ -41,7 +42,6 @@ /* common */ #include "chartype.h" #include "check.h" -#include "inttypes.h" #include "strbuf.h" #include "va_copy.h" #include "xsprintf.h" From eb86bc33b94144c9001846c195622025edabebf0 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 7 Mar 2022 08:48:59 +0200 Subject: [PATCH 1127/2710] Add CARTSIZE to cfg file for configuring the a78 header. Add descriptions of usage. --- cfg/atari7800.cfg | 11 ++++++++--- doc/atari7800.sgml | 30 +++++++++++++++++++++++------- libsrc/atari7800/exehdr.s | 4 ++-- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 8029ca674..d7b166809 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -1,7 +1,12 @@ # Atari VCS 7800 linker configuration file for cc65 +# This cfg file adds the a78 header in front of the image +# If you want just the ROM you can mark the __EXEHDR__ as weak instead of import +# But for the most common use we add the a78 automatically as it +# contains info about what kind of cart the build supports SYMBOLS { - __STACKSIZE__: type = weak, value = $0010; # 16 bytes stack + __STACKSIZE__: type = weak, value = $0600; # C stack + __CARTSIZE__: type = weak, value = $c000; __EXEHDR__: type = import; __VEC_BOTTOM__: value = $fffa, type = export; __VEC_SIZE__: value = $6, type = export; @@ -21,7 +26,7 @@ MEMORY { RAM2: file = "", define = yes, start = $2100, size = $0040, type = rw; RAM3: file = "", define = yes, start = $2200, size = $0600, type = rw; # For emulators you also need a header file - HEADER: file = %O, start = $0000, size = 128; + HEADER: file = %O, start = $0000, size = 128; # "Normal" cartridge rom. Multiple banks arent supported # by this script. You may change the rom size, but keep # two things in mind: @@ -37,7 +42,7 @@ MEMORY { SEGMENTS { ZEROPAGE: load = ZP, type = zp; - EXEHDR: load = HEADER, type = ro, define = yes; + EXEHDR: load = HEADER, type = ro; STARTUP: load = ROMS, type = ro, define = yes; ONCE: load = ROMS, type = ro, define = yes; CODE: load = ROM, type = ro, define = yes; diff --git a/doc/atari7800.sgml b/doc/atari7800.sgml index 85f6e4f9f..b6551614c 100644 --- a/doc/atari7800.sgml +++ b/doc/atari7800.sgml @@ -24,7 +24,29 @@ comes with the cc65 C compiler. It describes the memory layout, Atari <sect>Binary format<p> The default binary output format generated by the linker for the Atari -7800 target is a 32K cartridge image. +7800 target is a 48K cartridge image. + +<sect>A78 header<p> + +There is lots of different cart hardware available for the atari7800. +Some carts have ROM, RAM, sound hardware, non-volatile high score chips. +In order to know what kind of hardware the cart build requires there is +a header file of 128 bytes in front of the binary. + +The default build creates a cart file for a 48K rom cart without any +extra features like the pokey audio chip or extra RAM. + +In order to make cc65 more user friendly the build will add the a78 +header automatically. This allows you to run the binary on emulators +and flash carts on the real console. + +<sect>Encryption<p> + +In order to boot the game in a mode that supports atari7800 functions +the cart must be encrypted after the linking phase. +There is a program called sign7800 that can be used to sign the cart. +The encryption is not required for running the cart on emulators. +You can also run atari2600 games without encryption. <sect>Memory layout<p> @@ -104,12 +126,6 @@ There are no drivers for the Atari 7800. TBD -<sect>Encryption<p> - -In order to boot the game in a mode that supports atari7800 functions -the cart must be encrypted after the linking phase. -There is a program called sign7800 that can be used to sign the cart. - <sect>Other hints<p> One may write a custom linker configuration file to tune the memory diff --git a/libsrc/atari7800/exehdr.s b/libsrc/atari7800/exehdr.s index 6f3023040..618164cd4 100644 --- a/libsrc/atari7800/exehdr.s +++ b/libsrc/atari7800/exehdr.s @@ -4,7 +4,7 @@ ; This header contains data for emulators ; .export __EXEHDR__: absolute = 1 - + .import __CARTSIZE__ ; ------------------------------------------------------------------------ ; EXE header .segment "EXEHDR" @@ -12,7 +12,7 @@ .byte 'A','T','A','R','I','7','8','0','0',' ',' ',' ',' ',' ',' ',' ' .byte 'G','a','m','e',' ','n','a','m','e',0,0,0,0,0,0,0 .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - .byte 0,0,$80,0 ; Size + .byte 0,0,>__CARTSIZE__,0 ; Set the cart size in the cfg file ; bit 0 - pokey at 4000 ; bit 1 - supergame bank switched ; bit 2 - supergame ram at $4000 From 6001d3eab9160629d14f8f538c9ae7645916f1d3 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 7 Mar 2022 14:48:55 +0100 Subject: [PATCH 1128/2710] fix #warning directive so the test could actually compile :) --- test/misc/sitest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/misc/sitest.c b/test/misc/sitest.c index d13acf92c..2f1d7df4d 100644 --- a/test/misc/sitest.c +++ b/test/misc/sitest.c @@ -38,7 +38,7 @@ #ifdef NO_WCHAR -#warn "this test checks C99 features, but NO_WCHAR is defined so the test will most definitely fail." +#warning "this test checks C99 features, but NO_WCHAR is defined so the test will most definitely fail." #endif From b2ae73879bdf4148963b3df80cc200dd95ec2b64 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 12 Mar 2022 01:35:33 -0500 Subject: [PATCH 1129/2710] Added a URL to the snapshot's commit history as a comment in the Windows snapshot ZIPs. --- src/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Makefile b/src/Makefile index 87f1e8236..c8028204b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -119,6 +119,7 @@ endif # CMD_EXE zip: @cd .. && zip cc65 bin/* + @echo 'https://github.com/cc65/cc65/commits/'$(word 2,$(BUILD_ID))|zip -zq ../cc65 define OBJS_template From 52d7991b9bf07997cd3b919a1829340ca7a6e62e Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sun, 13 Mar 2022 12:32:13 +0200 Subject: [PATCH 1130/2710] Remove the EXEHDR from the default build --- cfg/atari7800.cfg | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index d7b166809..85abc24ee 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -1,13 +1,10 @@ # Atari VCS 7800 linker configuration file for cc65 -# This cfg file adds the a78 header in front of the image -# If you want just the ROM you can mark the __EXEHDR__ as weak instead of import -# But for the most common use we add the a78 automatically as it -# contains info about what kind of cart the build supports +# In order to add the a78 header to the build you can add +# "--force-import __EXEHDR__" to the command line SYMBOLS { __STACKSIZE__: type = weak, value = $0600; # C stack __CARTSIZE__: type = weak, value = $c000; - __EXEHDR__: type = import; __VEC_BOTTOM__: value = $fffa, type = export; __VEC_SIZE__: value = $6, type = export; __ENCRYPT_BOTTOM__: value = $ff7a, type = export; @@ -42,9 +39,9 @@ MEMORY { SEGMENTS { ZEROPAGE: load = ZP, type = zp; - EXEHDR: load = HEADER, type = ro; - STARTUP: load = ROMS, type = ro, define = yes; - ONCE: load = ROMS, type = ro, define = yes; + EXEHDR: load = HEADER, type = ro, optional = yes; + STARTUP: load = ROMS, type = ro, define = yes; + ONCE: load = ROMS, type = ro, define = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, define = yes, align = 256; DATA: load = ROM, run = RAM1, type = rw, define = yes; From 38b330482d57f5db92d74855267003ac08a114ce Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sun, 13 Mar 2022 13:31:11 +0200 Subject: [PATCH 1131/2710] Make start of ROM depend on CARTSIZE --- cfg/atari7800.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 85abc24ee..562dd3857 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -4,7 +4,7 @@ SYMBOLS { __STACKSIZE__: type = weak, value = $0600; # C stack - __CARTSIZE__: type = weak, value = $c000; + __CARTSIZE__: type = weak, value = $8000; __VEC_BOTTOM__: value = $fffa, type = export; __VEC_SIZE__: value = $6, type = export; __ENCRYPT_BOTTOM__: value = $ff7a, type = export; @@ -12,7 +12,7 @@ SYMBOLS { __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; __INIT_SIZE__: value = 69, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; - __MEMORY_BOTTOM__: value = $8000, type = export; + __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; } From 266f35ee3742e05690fad267cc2b41a83c1597ac Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 18 Mar 2022 01:06:48 -0400 Subject: [PATCH 1132/2710] Made tgidemo draw circles in blue instead of orange. That change lets it be built on two more platforms (Atmos, Telestrat). --- samples/Makefile | 7 ++++--- samples/tgidemo.c | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index 5c44d1947..86be30a83 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -199,7 +199,8 @@ EXELIST_atmos = \ ascii \ hello \ mandelbrot \ - sieve + sieve \ + tgidemo EXELIST_bbc = \ notavailable @@ -311,7 +312,7 @@ EXELIST_sim65c02 = $(EXELIST_sim6502) EXELIST_supervision = \ notavailable - + EXELIST_sym1 = \ notavailable @@ -321,7 +322,7 @@ EXELIST_telestrat = \ hello \ mandelbrot \ sieve \ -# tgidemo + tgidemo EXELIST_vic20 = \ ascii \ diff --git a/samples/tgidemo.c b/samples/tgidemo.c index b431cfb98..f193a1b83 100644 --- a/samples/tgidemo.c +++ b/samples/tgidemo.c @@ -68,7 +68,7 @@ static void DoWarning (void) static void DoCircles (void) { - static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_ORANGE }; + static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_BLUE }; unsigned char I; unsigned char Color = COLOR_BACK; const unsigned X = MaxX / 2; From 9f2d27d9c152e7acf40d0eda5df30577a45e8dfe Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 19 Mar 2022 01:21:52 -0400 Subject: [PATCH 1133/2710] Added Atari Lynx versions of three sample programs. The Lynx target can't build the usual versions because its library doesn't have conio output and stdio. --- samples/Makefile | 2 +- samples/lynx/Makefile | 59 +++++++++++++ samples/lynx/hello.c | 43 +++++++++ samples/lynx/mandelbrot.c | 86 ++++++++++++++++++ samples/lynx/tgidemo.c | 179 ++++++++++++++++++++++++++++++++++++++ samples/readme.txt | 23 ++++- 6 files changed, 390 insertions(+), 2 deletions(-) create mode 100644 samples/lynx/Makefile create mode 100644 samples/lynx/hello.c create mode 100644 samples/lynx/mandelbrot.c create mode 100644 samples/lynx/tgidemo.c diff --git a/samples/Makefile b/samples/Makefile index 86be30a83..9732cfac7 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -154,7 +154,7 @@ endif # Lists of subdirectories # disasm depends on cpp -DIRLIST = tutorial geos atari2600 atari5200 apple2 gamate supervision sym1 cbm +DIRLIST = tutorial geos atari2600 atari5200 apple2 gamate lynx supervision sym1 cbm # -------------------------------------------------------------------------- # Lists of executables diff --git a/samples/lynx/Makefile b/samples/lynx/Makefile new file mode 100644 index 000000000..b4ef64af0 --- /dev/null +++ b/samples/lynx/Makefile @@ -0,0 +1,59 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= lynx + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f +else + NULLDEV = /dev/null + DEL = $(RM) +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) +endif + +EXELIST_lynx = \ + hello.lnx \ + mandelbrot.lnx \ + tgidemo.lnx + +.PHONY: samples clean + +ifneq ($(EXELIST_$(SYS)),) +samples: $(EXELIST_$(SYS)) +else +samples: +# recipe used to skip systems that will not work with any program in this dir +ifeq ($(MAKELEVEL),0) + @echo "info: Lynx tests not available for" $(SYS) +else +# Suppress the "nothing to be done for 'samples' message. + @echo "" > $(NULLDEV) +endif +endif + +.SUFFIXES: +.SUFFIXES: .c .lnx + +%.lnx : %.c + $(CL) -t $(SYS) -Oris -m $*.map -o $@ $< + +clean: + @$(DEL) *.o *.map *.lnx 2>$(NULLDEV) diff --git a/samples/lynx/hello.c b/samples/lynx/hello.c new file mode 100644 index 000000000..5e6832514 --- /dev/null +++ b/samples/lynx/hello.c @@ -0,0 +1,43 @@ +/* Atari Lynx version of samples/hello.c, using TGI instead of conio */ + +#include <tgi.h> + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + +static const char Text[] = "Hello world!"; + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + +void main (void) +{ + unsigned int XMax, YMax; + + tgi_install (tgi_static_stddrv); + tgi_init (); + + /* Set screen color. */ + tgi_setcolor (TGI_COLOR_WHITE); + + /* Clear the screen. */ + tgi_clear(); + + /* Ask for the screen size. */ + XMax = tgi_getmaxx (); + YMax = tgi_getmaxy (); + + /* Draw a frame around the screen. */ + tgi_line (0, 0, XMax, 0); + tgi_lineto (XMax, YMax); + tgi_lineto (0, YMax); + tgi_lineto (0, 0); + + /* Write the greeting in the middle of the screen. */ + tgi_outtextxy ((tgi_getxres () - tgi_gettextwidth (Text)) / 2, + (tgi_getyres () - tgi_gettextheight (Text)) / 2, Text); +} diff --git a/samples/lynx/mandelbrot.c b/samples/lynx/mandelbrot.c new file mode 100644 index 000000000..ce49fbf7a --- /dev/null +++ b/samples/lynx/mandelbrot.c @@ -0,0 +1,86 @@ +/*****************************************************************************\ +** mandelbrot sample program for Atari Lynx ** +** ** +** (w) 2002 by groepaz/hitmen, TGI support by Stefan Haubenthal ** +\*****************************************************************************/ + + + +#include <stdlib.h> +#include <tgi.h> + + + +/* Graphics definitions */ +#define SCREEN_X (tgi_getxres()) +#define SCREEN_Y (tgi_getyres()) +#define MAXCOL (tgi_getcolorcount()) + +#define maxiterations 32 +#define fpshift (10) +#define tofp(_x) ((_x)<<fpshift) +#define fromfp(_x) ((_x)>>fpshift) +#define fpabs(_x) (abs(_x)) + +#define mulfp(_a,_b) ((((signed long)_a)*(_b))>>fpshift) +#define divfp(_a,_b) ((((signed long)_a)<<fpshift)/(_b)) + +/* Use static local variables for speed */ +#pragma static-locals (1); + + + +static void mandelbrot (signed short x1, signed short y1, signed short x2, + signed short y2) +{ + /* */ + register signed short r, r1, i; + register signed short xs, ys, xx, yy; + register signed short x, y; + register unsigned char count; + register unsigned char maxcol = MAXCOL; + + /* Calc stepwidth */ + xs = ((x2 - x1) / (SCREEN_X)); + ys = ((y2 - y1) / (SCREEN_Y)); + + yy = y1; + for (y = 0; y < (SCREEN_Y); y++) { + yy += ys; + xx = x1; + for (x = 0; x < (SCREEN_X); x++) { + xx += xs; + /* Do iterations */ + r = 0; + i = 0; + for (count = 0; (count < maxiterations) && + (fpabs (r) < tofp (2)) && (fpabs (i) < tofp (2)); + ++count) { + r1 = (mulfp (r, r) - mulfp (i, i)) + xx; + /* i = (mulfp(mulfp(r,i),tofp(2)))+yy; */ + i = (((signed long) r * i) >> (fpshift - 1)) + yy; + r = r1; + } + if (count == maxiterations) { + tgi_setcolor (0); + } else { + tgi_setcolor (count % maxcol); + } + /* Set pixel */ + tgi_setpixel (x, y); + } + } +} + +void main (void) +{ + /* Install the graphics driver */ + tgi_install (tgi_static_stddrv); + + /* Initialize graphics */ + tgi_init (); + tgi_clear (); + + /* Calc mandelbrot set */ + mandelbrot (tofp (-2), tofp (-2), tofp (2), tofp (2)); +} diff --git a/samples/lynx/tgidemo.c b/samples/lynx/tgidemo.c new file mode 100644 index 000000000..e92a078dc --- /dev/null +++ b/samples/lynx/tgidemo.c @@ -0,0 +1,179 @@ +/* Tgidemo modified for the Atari Lynx. +** +** Press any of the Lynx's option buttons to go to the next screen. +*/ + +#include <cc65.h> +#include <conio.h> +#include <tgi.h> +#include <time.h> + + +#define COLOR_BACK TGI_COLOR_BLACK +#define COLOR_FORE TGI_COLOR_WHITE + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* Driver stuff */ +static unsigned MaxX; +static unsigned MaxY; +static unsigned AspectRatio; + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +/* The Lynx draws too fast. This function delays +** the drawing so that we can watch it. +*/ +static void wait (unsigned char ticks) +{ + clock_t T = clock () + ticks; + + while (clock () < T) {} +} + + + +static void DoCircles (void) +{ + unsigned char I; + unsigned char Color = COLOR_BACK; + const unsigned X = MaxX / 2; + const unsigned Y = MaxY / 2; + const unsigned Limit = (X < Y) ? Y : X; + + tgi_setcolor (COLOR_FORE); + tgi_clear (); + + tgi_line (0, 0, MaxX, MaxY); + tgi_line (0, MaxY, MaxX, 0); + while (!kbhit ()) { + Color = (Color == COLOR_FORE) ? COLOR_BACK : COLOR_FORE; + tgi_setcolor (Color); + for (I = 10; I <= Limit; I += 10) { + tgi_ellipse (X, Y, I, tgi_imulround (I, AspectRatio)); + wait (9); + } + } + + cgetc (); +} + + + +static void DoCheckerboard (void) +{ + unsigned X, Y; + unsigned char Color = COLOR_BACK; + + tgi_clear (); + + while (1) { + for (Y = 0; Y <= MaxY - 2; Y += 10) { + for (X = 0; X <= MaxX; X += 10) { + Color = (Color == COLOR_FORE) ? COLOR_BACK : COLOR_FORE; + tgi_setcolor (Color); + tgi_bar (X, Y, X+9, Y+9); + if (kbhit ()) { + cgetc (); + return; + } + wait (1); + } + Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE; + } + Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE; + } +} + + + +static void DoDiagram (void) +{ + int XOrigin, YOrigin; + int Amp; + int X, Y; + unsigned I; + + tgi_setcolor (COLOR_FORE); + tgi_clear (); + + /* Determine zero and amplitude */ + YOrigin = MaxY / 2; + XOrigin = 10; + Amp = (MaxY - 19) / 2; + + /* Y axis */ + tgi_line (XOrigin, 10, XOrigin, MaxY-10); + tgi_line (XOrigin-2, 12, XOrigin, 10); + tgi_lineto (XOrigin+2, 12); + + /* X axis */ + tgi_line (XOrigin, YOrigin, MaxX-10, YOrigin); + tgi_line (MaxX-12, YOrigin-2, MaxX-10, YOrigin); + tgi_lineto (MaxX-12, YOrigin+2); + + /* Sine */ + tgi_gotoxy (XOrigin, YOrigin); + for (I = 0; I <= 360; ++I) { + /* Calculate the next points */ + X = (int)(((long)(MaxX - 19) * I) / 360); + Y = (int)(((long)Amp * -_sin (I)) / 256); + + /* Draw the line */ + tgi_lineto (XOrigin + X, YOrigin + Y); + } + + cgetc (); +} + + + +static void DoLines (void) +{ + unsigned X; + const unsigned Min = (MaxX < MaxY) ? MaxX : MaxY; + + tgi_setcolor (COLOR_FORE); + tgi_clear (); + + for (X = 0; X <= Min; X += 10) { + tgi_line (0, 0, Min, X); + tgi_line (0, 0, X, Min); + tgi_line (Min, Min, 0, Min-X); + tgi_line (Min, Min, Min-X, 0); + wait (9); + } + + cgetc (); +} + + + +void main (void) +{ + /* Install the driver */ + tgi_install (tgi_static_stddrv); + tgi_init (); + + /* Get stuff from the driver */ + MaxX = tgi_getmaxx (); + MaxY = tgi_getmaxy (); + AspectRatio = tgi_getaspectratio (); + + /* Do graphics stuff */ + DoCircles (); + DoCheckerboard (); + DoDiagram (); + DoLines (); +} diff --git a/samples/readme.txt b/samples/readme.txt index 506cd5d43..1a5b1c9ff 100644 --- a/samples/readme.txt +++ b/samples/readme.txt @@ -128,7 +128,7 @@ Platforms: Runs on all platforms that have TGI support: ============================================================================= -Platform specific samples follow: +Platform-specific samples follow: atari 2600: ----------- @@ -198,6 +198,27 @@ Name: nachtm Description: Plays "Eine kleine Nachtmusik" by Wolfgang Amadeus Mozart. ----------------------------------------------------------------------------- +lynx: +----- + +These programs are adapted for the Atari Lynx because its library has no conio +output or stdio. + +Name: hello +Description: A nice "Hello world" type program that uses the TGI graphics + library for output. + +Name: mandelbrot +Description: A mandelbrot demo using integer arithmetic. The demo was + written by groepaz, and converted to cc65 using TGI graphics + by Stefan Haubenthal. + +Name: tgidemo +Description: Shows some of the graphics capabilities of the "Tiny Graphics + Interface". + +----------------------------------------------------------------------------- + sym1: ----- From d12c2d68104f6ad5eca9214ebcad9af29e5abc9e Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 19 Mar 2022 09:09:50 +0200 Subject: [PATCH 1134/2710] Fix offset for MARIA --- asminc/atari7800_maria.inc | 64 +++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/asminc/atari7800_maria.inc b/asminc/atari7800_maria.inc index a8857812d..39624d21d 100644 --- a/asminc/atari7800_maria.inc +++ b/asminc/atari7800_maria.inc @@ -2,38 +2,38 @@ ; ; Read registers -BKGRND := $00 -P0C1 := $01 -P0C2 := $02 -P0C3 := $03 -MWSYNC := $04 -P1C1 := $05 -P1C2 := $06 -P1C3 := $07 -MSTAT := $08 -P2C1 := $09 -P2C2 := $0A -P2C3 := $0B -DPPH := $0C -P3C1 := $0D -P3C2 := $0E -P3C3 := $0F -DPPL := $10 -P4C1 := $11 -P4C2 := $12 -P4C3 := $13 -CHBASE := $14 -P5C1 := $15 -P5C2 := $16 -P5C3 := $17 -OFFSET := $18 -P6C1 := $19 -P6C2 := $1A -P6C3 := $1B -CTRL := $1C -P7C1 := $1D -P7C2 := $1E -P7C3 := $1F +BKGRND := $20 +P0C1 := $21 +P0C2 := $22 +P0C3 := $23 +MWSYNC := $24 +P1C1 := $25 +P1C2 := $26 +P1C3 := $27 +MSTAT := $28 +P2C1 := $29 +P2C2 := $2A +P2C3 := $2B +DPPH := $2C +P3C1 := $2D +P3C2 := $2E +P3C3 := $2F +DPPL := $30 +P4C1 := $31 +P4C2 := $32 +P4C3 := $33 +CHBASE := $34 +P5C1 := $35 +P5C2 := $36 +P5C3 := $37 +OFFSET := $38 +P6C1 := $39 +P6C2 := $3A +P6C3 := $3B +CTRL := $3C +P7C1 := $3D +P7C2 := $3E +P7C3 := $3F ; Write registers From 79c243ccef527fd71b281b6430b1c524739575ed Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 21 Mar 2022 08:37:49 +0200 Subject: [PATCH 1135/2710] Clear hw palette and set AUDIN low at startup --- libsrc/lynx/bootldr.s | 72 ++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 28 deletions(-) diff --git a/libsrc/lynx/bootldr.s b/libsrc/lynx/bootldr.s index 64569e6ee..58f04afc6 100644 --- a/libsrc/lynx/bootldr.s +++ b/libsrc/lynx/bootldr.s @@ -18,44 +18,60 @@ ; The idea is to make the smalles possible encrypted loader as decryption ; is very slow. The minimum size is 49 bytes plus a zero byte. ;********************************** -; EXE = $fb68 +; EXE = $fb68 ; -; .org $0200 +; .org $0200 ; -; ; 1. force Mikey to be in memory -; stz MAPCTL +; ; 1. force Mikey to be in memory +; 9C F9 FF stz MAPCTL ; -; ; 3. set ComLynx to open collector -; lda #4 ; a = 00000100 -; sta SERCTL ; set the ComLynx to open collector +; ; 2. clear palette +; A0 1F ldy #31 +; A9 00 lda #0 +; 99 A0 FD nextc: sta GCOLMAP, y +; 88 dey +; 10 FA bpl nextc ; -; ; 4. make sure the ROM is powered on -; lda #8 ; a = 00001000 -; sta IODAT ; set the ROM power to on +; ; 3. set ComLynx to open collector +; A9 04 lda #4 ; a = 00000100 +; 8D 8C FD sta SERCTL ; set the ComLynx to open collector ; -; ; 5. read in secondary exe + 8 bytes from the cart and store it in $f000 -; ldx #0 ; x = 0 -; ldy #$97 ; y = secondary loader size (151 bytes) -;rloop1: lda RCART0 ; read a byte from the cart -; sta EXE,X ; EXE[X] = a -; inx ; x++ -; dey ; y-- -; bne rloop1 ; loops until y wraps +; ; 4. set AUDIN to output +; A9 1A lda #$1a ; audin = out, rest = out, +; ; noexp = in, cart addr = out, ext pwd = in +; 8D 8A FD sta IODIR ; -; ; 6. jump to secondary loader -; jmp EXE ; run the secondary loader +; ; 5. set AUDIN to LOW +; A9 0B lda #$0B ; Set AUDIN low +; 85 1A sta $1a ; Save local copy to ZP +; 8D 8B FD sta IODAT ; -; .reloc +; ; 6. read in secondary exe + 8 bytes from the cart +; ; and store it in $f000 +; A2 00 ldx #0 ; x = 0 +; A0 97 ldy #$97 ; y = secondary loader size (151 bytes) +; AD B2 FC rloop1: lda RCART0 ; read a byte from the cart +; 9D 68 FB sta EXE,X ; EXE[X] = a +; E8 inx ; x++ +; 88 dey ; y-- +; D0 F6 bne rloop1 ; loops until y wraps +; +; ; 7. jump to secondary loader +; 4C 68 FB jmp EXE +; 00 00 00 00 ; spares +; 00 ; End of encrypted header mark +; +; .reloc ;********************************** ; After compilation, encryption and obfuscation it turns into this. ;********************************** - .byte $ff, $81, $ca, $33, $be, $80, $a2, $c4 - .byte $6d, $98, $fe, $8d, $bc, $66, $c0, $7a - .byte $09, $50, $23, $28, $18, $c8, $06, $70 - .byte $58, $4f, $1b, $e1, $c7, $90, $08, $cd - .byte $1a, $6e, $5a, $45, $32, $d7, $6d, $c6 - .byte $8a, $e5, $d8, $5c, $a0, $e8, $4f, $7a - .byte $5f, $73, $8d, $22 + .byte $ff, $b6, $bb, $82, $d5, $9f, $48, $cf + .byte $23, $37, $8e, $07, $38, $f5, $b6, $30 + .byte $d6, $2f, $12, $29, $9f, $43, $5b, $2e + .byte $f5, $66, $5c, $db, $93, $1a, $78, $55 + .byte $5e, $c9, $0d, $72, $1b, $e9, $d8, $4d + .byte $2f, $e4, $95, $c0, $4f, $7f, $1b, $66 + .byte $8b, $a7, $fc, $21 ;********************************** ; Now we have the secondary loader From 220171d0da0b6c43933994be264853a7f2a9fd3d Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 22 Mar 2022 20:02:46 +0200 Subject: [PATCH 1136/2710] Add irq handling, PAL/NTSC detection and clock() --- libsrc/atari7800/clock.s | 89 ++++++++++++++++++++++++++++++++++++++++ libsrc/atari7800/irq.s | 36 ++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 libsrc/atari7800/clock.s create mode 100644 libsrc/atari7800/irq.s diff --git a/libsrc/atari7800/clock.s b/libsrc/atari7800/clock.s new file mode 100644 index 000000000..814defceb --- /dev/null +++ b/libsrc/atari7800/clock.s @@ -0,0 +1,89 @@ +; +; 2022-03-15, Karri Kaksonen +; +; clock_t clock (void); +; clock_t _clocks_per_sec (void); +; + + .export _clock, __clocks_per_sec, clock_count + .interruptor update_clock, 2 ; (low priority) + .constructor init_clock + + .import sreg: zp + .import _zonecounter + .import _paldetected + .include "atari7800.inc" + + .macpack generic + + .code + +;----------------------------------------------------------------------------- +; Read the clock counter. +; + .proc _clock + + lda #0 + sta sreg+1 ; Promote 24 bits up to 32 bits + lda clock_count+2 + sta sreg + ldx clock_count+1 + lda clock_count + + rts + .endproc + +;----------------------------------------------------------------------------- +; Return the number of clock ticks in one second. +; + .proc __clocks_per_sec + + lda #0 + tax + sta sreg ; return 32 bits + sta sreg+1 + lda _paldetected + bne pal + lda #60 ; NTSC - 60Hz + rts +pal: + lda #50 ; PAL - 50Hz + rts + .endproc + +;----------------------------------------------------------------------------- +; This interrupt handler increments a 24-bit counter at every video +; vertical-blanking time. +; Update the clock only on interrupt while the drawing on screen is on +; _zonecounter == 1 (from 1st visible scanline to last visible scanline) +; +update_clock: + lda _zonecounter + and #01 + beq @L1 + inc clock_count + bne @L1 + inc clock_count+1 + bne @L1 + inc clock_count+2 +@L1: ;clc ; General interrupt was not reset + rts + +;----------------------------------------------------------------------------- +; Set time to zero at startup +; + .segment "ONCE" +init_clock: + lda #0 + sta clock_count+2 + sta clock_count+1 + sta clock_count + rts + +;----------------------------------------------------------------------------- +; Store time in 3 bytes +; + .bss +clock_count: + .res 3 + diff --git a/libsrc/atari7800/irq.s b/libsrc/atari7800/irq.s new file mode 100644 index 000000000..ed315a1b7 --- /dev/null +++ b/libsrc/atari7800/irq.s @@ -0,0 +1,36 @@ +; +; IRQ handling (Atari 7800 version) +; + + .export initirq, doneirq, IRQStub + + .import __INTERRUPTOR_COUNT__, callirq + + .include "atari7800.inc" + + .code +; ------------------------------------------------------------------------ + +initirq: +doneirq: + rts + +; ------------------------------------------------------------------------ + +IRQStub: + cld ; Just to be sure + pha + lda #<(__INTERRUPTOR_COUNT__ * 2) + beq @L1 + txa + pha + tya + pha + jsr callirq ; Call the functions + pla + tay + pla + tax +@L1: pla + rti + From d6009721d42036eeb3ffad610c3e8db28307303f Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 22 Mar 2022 20:02:54 +0200 Subject: [PATCH 1137/2710] Add irq handling, PAL/NTSC detection and clock() --- libsrc/atari7800/crt0.s | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/libsrc/atari7800/crt0.s b/libsrc/atari7800/crt0.s index 3d53abfa8..bd8a57525 100644 --- a/libsrc/atari7800/crt0.s +++ b/libsrc/atari7800/crt0.s @@ -1,16 +1,17 @@ .export _zonecounter + .export _paldetected .export __STARTUP__ : absolute = 1 .export _exit .import __ROM_START__ .import __RAM3_START__, __RAM3_SIZE__ .import initlib, donelib .import zerobss, copydata + .import IRQStub .import push0, _main + .include "atari7800.inc" .include "zeropage.inc" INPTCTRL = $01 -OFFSET = $38 -CTRL = $3c .segment "STARTUP" start: @@ -38,6 +39,29 @@ start: jsr zerobss jsr initlib + ; Examine machine type as we need the info early +vboff: lda MSTAT + bmi vboff +vbon: lda MSTAT + bpl vbon +vboff2: lda MSTAT + bmi vboff2 + lda #$00 + sta _paldetected + jmp mtsta +count: sta WSYNC + sta WSYNC + dec _paldetected +mtsta: lda MSTAT + bpl count + lda _paldetected + cmp #$78 + bcc mtntsc + lda #$01 + jmp mtpal +mtntsc: lda #$00 +mtpal: sta _paldetected + ; Call main program (pass empty command line) jsr push0 ; argc jsr push0 ; argv @@ -50,7 +74,7 @@ _exit: NMIHandler: inc _zonecounter - rti + jmp IRQStub IRQHandler: rti @@ -58,6 +82,9 @@ IRQHandler: .segment "DATA" _zonecounter: .byte 0 +_paldetected: + .byte 0 ; 0 = NTSC, 1 = PAL + .segment "ENCRYPTION" .res 126, $ff ; Reserved for encryption From c577ec1383e16fa0e178f6b7d1e302ed2eeb7fea Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 22 Mar 2022 21:16:56 +0200 Subject: [PATCH 1138/2710] Add more space to init segmen --- cfg/atari7800.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 562dd3857..b27353307 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -10,7 +10,7 @@ SYMBOLS { __ENCRYPT_BOTTOM__: value = $ff7a, type = export; __ENCRYPT_SIZE__: value = $80, type = export; __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; - __INIT_SIZE__: value = 69, type = export; + __INIT_SIZE__: value = 107, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; From d0d0941a649e392e57fabde0310f2d176ed4224b Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 22 Mar 2022 21:28:35 +0200 Subject: [PATCH 1139/2710] Add get_tv.s --- libsrc/atari7800/get_tv.s | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 libsrc/atari7800/get_tv.s diff --git a/libsrc/atari7800/get_tv.s b/libsrc/atari7800/get_tv.s new file mode 100644 index 000000000..307a5c58d --- /dev/null +++ b/libsrc/atari7800/get_tv.s @@ -0,0 +1,26 @@ +; +; Stefan Haubenthal, 2007-01-21 +; +; unsigned char get_tv (void); +; /* Return the video mode the machine is using */ +; + + .include "atari7800.inc" + .include "get_tv.inc" + .importzp tmp1, tmp2 + .import _paldetected + +;-------------------------------------------------------------------------- +; _get_tv + +.proc _get_tv + + lda _paldetected + beq ntsc + lda #TV::PAL + rts +ntsc: + lda #TV::NTSC + rts + +.endproc From 865be55e66af59aab3366618f9f2bb19439e6ea1 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 22 Mar 2022 21:29:06 +0200 Subject: [PATCH 1140/2710] Split clock file to components --- libsrc/atari7800/clock.s | 22 +------------------- libsrc/atari7800/clocks_per_sec.s | 34 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 21 deletions(-) create mode 100644 libsrc/atari7800/clocks_per_sec.s diff --git a/libsrc/atari7800/clock.s b/libsrc/atari7800/clock.s index 814defceb..3b259cfcf 100644 --- a/libsrc/atari7800/clock.s +++ b/libsrc/atari7800/clock.s @@ -2,16 +2,14 @@ ; 2022-03-15, Karri Kaksonen ; ; clock_t clock (void); -; clock_t _clocks_per_sec (void); ; - .export _clock, __clocks_per_sec, clock_count + .export _clock, clock_count .interruptor update_clock, 2 ; (low priority) .constructor init_clock .import sreg: zp .import _zonecounter - .import _paldetected .include "atari7800.inc" .macpack generic @@ -33,24 +31,6 @@ rts .endproc -;----------------------------------------------------------------------------- -; Return the number of clock ticks in one second. -; - .proc __clocks_per_sec - - lda #0 - tax - sta sreg ; return 32 bits - sta sreg+1 - lda _paldetected - bne pal - lda #60 ; NTSC - 60Hz - rts -pal: - lda #50 ; PAL - 50Hz - rts - .endproc - ;----------------------------------------------------------------------------- ; This interrupt handler increments a 24-bit counter at every video ; vertical-blanking time. diff --git a/libsrc/atari7800/clocks_per_sec.s b/libsrc/atari7800/clocks_per_sec.s new file mode 100644 index 000000000..dc09c4396 --- /dev/null +++ b/libsrc/atari7800/clocks_per_sec.s @@ -0,0 +1,34 @@ +; +; 2022-03-15, Karri Kaksonen +; +; clock_t _clocks_per_sec (void); +; + + .export __clocks_per_sec + + .import sreg: zp + .import _paldetected + .include "atari7800.inc" + + .macpack generic + + .code + +;----------------------------------------------------------------------------- +; Return the number of clock ticks in one second. +; + .proc __clocks_per_sec + + lda #0 + tax + sta sreg ; return 32 bits + sta sreg+1 + lda _paldetected + bne pal + lda #60 ; NTSC - 60Hz + rts +pal: + lda #50 ; PAL - 50Hz + rts + .endproc + From 4c3120b93536f1b6020695d7922fc3c797356b65 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 22 Mar 2022 21:41:12 +0200 Subject: [PATCH 1141/2710] Make STARTUP segment larger --- cfg/atari7800.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index b27353307..4d20ab0d9 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -10,7 +10,7 @@ SYMBOLS { __ENCRYPT_BOTTOM__: value = $ff7a, type = export; __ENCRYPT_SIZE__: value = $80, type = export; __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; - __INIT_SIZE__: value = 107, type = export; + __INIT_SIZE__: value = 121, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; From 8d0b0e6ffcad7d6d63ccfc212e230d4cab484fa1 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Fri, 25 Mar 2022 14:44:54 +0200 Subject: [PATCH 1142/2710] Separate machine detection from crt0 and put it in get_tv --- libsrc/atari7800/crt0.s | 27 --------------- libsrc/atari7800/get_tv.s | 69 ++++++++++++++++++++++++++++++--------- 2 files changed, 53 insertions(+), 43 deletions(-) diff --git a/libsrc/atari7800/crt0.s b/libsrc/atari7800/crt0.s index bd8a57525..d7cf307ee 100644 --- a/libsrc/atari7800/crt0.s +++ b/libsrc/atari7800/crt0.s @@ -1,5 +1,4 @@ .export _zonecounter - .export _paldetected .export __STARTUP__ : absolute = 1 .export _exit .import __ROM_START__ @@ -39,29 +38,6 @@ start: jsr zerobss jsr initlib - ; Examine machine type as we need the info early -vboff: lda MSTAT - bmi vboff -vbon: lda MSTAT - bpl vbon -vboff2: lda MSTAT - bmi vboff2 - lda #$00 - sta _paldetected - jmp mtsta -count: sta WSYNC - sta WSYNC - dec _paldetected -mtsta: lda MSTAT - bpl count - lda _paldetected - cmp #$78 - bcc mtntsc - lda #$01 - jmp mtpal -mtntsc: lda #$00 -mtpal: sta _paldetected - ; Call main program (pass empty command line) jsr push0 ; argc jsr push0 ; argv @@ -82,9 +58,6 @@ IRQHandler: .segment "DATA" _zonecounter: .byte 0 -_paldetected: - .byte 0 ; 0 = NTSC, 1 = PAL - .segment "ENCRYPTION" .res 126, $ff ; Reserved for encryption diff --git a/libsrc/atari7800/get_tv.s b/libsrc/atari7800/get_tv.s index 307a5c58d..5438b2b95 100644 --- a/libsrc/atari7800/get_tv.s +++ b/libsrc/atari7800/get_tv.s @@ -1,26 +1,63 @@ ; -; Stefan Haubenthal, 2007-01-21 +; Karri Kaksonen, 2022-03-25 ; -; unsigned char get_tv (void); -; /* Return the video mode the machine is using */ +; unsigned char get_tv (void) ; + .include "atari7800.inc" + .export _get_tv - .include "atari7800.inc" - .include "get_tv.inc" - .importzp tmp1, tmp2 - .import _paldetected +.segment "DATA" -;-------------------------------------------------------------------------- -; _get_tv +_paldetected: + .byte $FF -.proc _get_tv +; --------------------------------------------------------------- +; unsigned char get_tv (void) +; --------------------------------------------------------------- - lda _paldetected - beq ntsc - lda #TV::PAL - rts -ntsc: - lda #TV::NTSC +.segment "CODE" + +.proc _get_tv: near + +.segment "CODE" + + ldx #$00 + lda #$FF + cmp _paldetected + bne L8 +L1: lda $0028 + and #$80 + bne L1 +L2: lda $0028 + and #$80 + beq L2 +L3: lda $0028 + and #$80 + bne L3 + lda #$00 + sta M0001 + jmp L5 +L4: sta $0024 + sta $0024 + dec M0001 +L5: lda $0028 + and #$80 + beq L4 + lda M0001 + cmp #$78 + bcc L6 + lda #$00 + jmp L7 +L6: lda #$01 +L7: sta _paldetected + ldx #$00 +L8: lda _paldetected rts +.segment "BSS" + +M0001: + .res 1,$00 + .endproc + From 4a71a1fbb20117b6ad438481d01c228f1943350a Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Fri, 25 Mar 2022 15:02:43 +0200 Subject: [PATCH 1143/2710] Use proper mnemonics --- libsrc/atari7800/get_tv.s | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/libsrc/atari7800/get_tv.s b/libsrc/atari7800/get_tv.s index 5438b2b95..995b5c652 100644 --- a/libsrc/atari7800/get_tv.s +++ b/libsrc/atari7800/get_tv.s @@ -4,6 +4,7 @@ ; unsigned char get_tv (void) ; .include "atari7800.inc" + .include "get_tv.inc" .export _get_tv .segment "DATA" @@ -25,30 +26,30 @@ _paldetected: lda #$FF cmp _paldetected bne L8 -L1: lda $0028 +L1: lda MSTAT and #$80 bne L1 -L2: lda $0028 +L2: lda MSTAT and #$80 beq L2 -L3: lda $0028 +L3: lda MSTAT and #$80 bne L3 lda #$00 sta M0001 jmp L5 -L4: sta $0024 - sta $0024 +L4: sta MWSYNC + sta MWSYNC dec M0001 -L5: lda $0028 +L5: lda MSTAT and #$80 beq L4 lda M0001 cmp #$78 bcc L6 - lda #$00 + lda #TV::NTSC jmp L7 -L6: lda #$01 +L6: lda #TV::PAL L7: sta _paldetected ldx #$00 L8: lda _paldetected From 5115a1b50f1578fe51b06e66f46d1ec72c364052 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Fri, 25 Mar 2022 15:08:14 +0200 Subject: [PATCH 1144/2710] Export paldetected --- libsrc/atari7800/get_tv.s | 1 + 1 file changed, 1 insertion(+) diff --git a/libsrc/atari7800/get_tv.s b/libsrc/atari7800/get_tv.s index 995b5c652..3eb94d54d 100644 --- a/libsrc/atari7800/get_tv.s +++ b/libsrc/atari7800/get_tv.s @@ -6,6 +6,7 @@ .include "atari7800.inc" .include "get_tv.inc" .export _get_tv + .export _paldetected .segment "DATA" From 2c00f1e898e8d7131856f78fcda4a58fd41414a5 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 31 Mar 2022 07:44:26 +0300 Subject: [PATCH 1145/2710] Add atari7800-stdjoy --- libsrc/atari7800/joy/atari7800-stdjoy.s | 164 ++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 libsrc/atari7800/joy/atari7800-stdjoy.s diff --git a/libsrc/atari7800/joy/atari7800-stdjoy.s b/libsrc/atari7800/joy/atari7800-stdjoy.s new file mode 100644 index 000000000..a2bcd4a3a --- /dev/null +++ b/libsrc/atari7800/joy/atari7800-stdjoy.s @@ -0,0 +1,164 @@ +; +; Standard joystick driver for the Atari 7800. +; This version tries to use 7800 and 2600 joysticks. +; But assumes that both joysticks are of same type. +; +; Modified by Karri Kaksonen, 2022-02-27 +; Ullrich von Bassewitz, 2002-12-20 +; Using code from Steve Schmidtke +; + + .include "zeropage.inc" + + .include "joy-kernel.inc" + .include "joy-error.inc" + .include "atari7800.inc" + + .macpack generic + .macpack module + + +; ------------------------------------------------------------------------ +; Header. Includes jump table + + module_header _atari7800_stdjoy_joy + +; Driver signature + + .byte $6A, $6F, $79 ; "joy" + .byte JOY_API_VERSION ; Driver API version number + +; Library reference + + .addr $0000 + +; Jump table. + + .addr INSTALL + .addr UNINSTALL + .addr COUNT + .addr READ + +; ------------------------------------------------------------------------ +; Constants + +JOY_COUNT = 2 ; Number of joysticks we support + +.code + +; ------------------------------------------------------------------------ +; INSTALL routine. Is called after the driver is loaded into memory. If +; possible, check if the hardware is present and determine the amount of +; memory available. +; Must return an JOY_ERR_xx code in a/x. +; + +INSTALL: + ; Assume 7800 2-button controller, can change + ; to 2600 1-button later + lda #$14 + sta CTLSWB ; enable 2-button 7800 controller 1: set pin 6 to output + ldy #$00 + sty SWCHB ; enable 2-button 7800 controller 2: pull pin 6 (INPT4) high + +reset: + lda #<JOY_ERR_OK + ldx #>JOY_ERR_OK +; rts ; Run into UNINSTALL instead + +; ------------------------------------------------------------------------ +; UNINSTALL routine. Is called before the driver is removed from memory. +; Can do cleanup or whatever. Must not return anything. +; + +UNINSTALL: + rts + + +; ------------------------------------------------------------------------ +; COUNT: Return the total number of available joysticks in a/x. +; + +COUNT: + lda #<JOY_COUNT + ldx #>JOY_COUNT + rts + +; ------------------------------------------------------------------------ +; READ: Read a particular joystick passed in A for 2 fire buttons. + +readbuttons: + ; Y has joystick of interest 0/1 + ; return value: + ; $00: no button, + ; $80: left/B button, + ; $40: right/A button, + ; $c0: both buttons + ; preserves X + tya + beq L5 + ; Joystick 1 processing + ; 7800 joystick 1 buttons + ldy #0 ; ........ + bit INPT2 ; Check for right button + bpl L1 + ldy #2 ; ......2. +L1: bit INPT3 ;Check for left button + bpl L2 + iny ; ......21 +L2: tya + bne L4 ; Joystick worked + ; 2600 Joystick 1 + bit INPT5 + bpl L4 +L3: iny ; .......1 + lda #0 ; Fallback to 2600 joystick mode + sta CTLSWB +L4: tya + ror ; .......2 1 + ror ; 1....... 2 + ror ; 21...... + rts + +L5: ; Joystick 0 processing + ; 7800 joystick 0 buttons + ldy #0 ; ........ + bit INPT0 ; Check for right button + bpl L6 + ldy #2 ; ......2. +L6: bit INPT1 ;Check for left button + bpl L7 + iny ; ......21 +L7: tya + bne L4 ; Joystick worked + ; 2600 Joystick 0 + bit INPT4 + bpl L4 + bmi L3 + +READ: + tay ; Store joystick 0/1 in Y + beq L8 + lda SWCHA + rol ; ...RLDU. + rol ; ..RLDU.. + rol ; .RLDU... - joystick 1 + jmp L9 +L8: lda SWCHA ; Read joystick + ror ; .RLDU... - joystick 0 +L9: tax + jsr readbuttons ; A = 21......, X = .RLDU... + rol ; A = 1 .......2 + tay ; Y = .......2 + txa ; A = .RLDU... + ror ; A = 1.RLDU.. + tax ; X = 1.RLDU.. + tya ; A = .......2 + ror ; A = ........ 2 + txa ; A = 1.RLDU.. + rol ; A = .RLDU..2 1 + rol ; A = RLDU..21 + eor #$F0 ; The direction buttons were inversed + and #$F3 + rts + From 67def0ca0d94d1720d1c5c834f14f8dadadbcfbe Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 31 Mar 2022 08:05:41 +0300 Subject: [PATCH 1146/2710] Fixed logic flaw --- libsrc/atari7800/joy/atari7800-stdjoy.s | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/libsrc/atari7800/joy/atari7800-stdjoy.s b/libsrc/atari7800/joy/atari7800-stdjoy.s index a2bcd4a3a..ec3806dde 100644 --- a/libsrc/atari7800/joy/atari7800-stdjoy.s +++ b/libsrc/atari7800/joy/atari7800-stdjoy.s @@ -91,9 +91,9 @@ readbuttons: ; Y has joystick of interest 0/1 ; return value: ; $00: no button, - ; $80: left/B button, - ; $40: right/A button, - ; $c0: both buttons + ; $01: left/B button, + ; $02: right/A button, + ; $03: both buttons ; preserves X tya beq L5 @@ -114,10 +114,7 @@ L2: tya L3: iny ; .......1 lda #0 ; Fallback to 2600 joystick mode sta CTLSWB -L4: tya - ror ; .......2 1 - ror ; 1....... 2 - ror ; 21...... +L4: tya ; ......21 rts L5: ; Joystick 0 processing @@ -147,8 +144,8 @@ READ: L8: lda SWCHA ; Read joystick ror ; .RLDU... - joystick 0 L9: tax - jsr readbuttons ; A = 21......, X = .RLDU... - rol ; A = 1 .......2 + jsr readbuttons ; A = ......21, X = .RLDU... + ror ; A = .......2 1 tay ; Y = .......2 txa ; A = .RLDU... ror ; A = 1.RLDU.. From 4e8f62fb96b16e5b6b50eeabd980dfcace156f9a Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 31 Mar 2022 09:08:40 +0300 Subject: [PATCH 1147/2710] Add stdjoy driver --- libsrc/atari7800/joy_stat_stddrv.s | 14 ++++++++++++++ libsrc/atari7800/libref.s | 8 ++++++++ 2 files changed, 22 insertions(+) create mode 100644 libsrc/atari7800/joy_stat_stddrv.s create mode 100644 libsrc/atari7800/libref.s diff --git a/libsrc/atari7800/joy_stat_stddrv.s b/libsrc/atari7800/joy_stat_stddrv.s new file mode 100644 index 000000000..eafe0d314 --- /dev/null +++ b/libsrc/atari7800/joy_stat_stddrv.s @@ -0,0 +1,14 @@ +; +; Address of the static standard joystick driver +; +; Oliver Schmidt, 2012-11-01 +; +; const void joy_static_stddrv[]; +; + + .export _joy_static_stddrv + .import _atari7800_stdjoy_joy + +.rodata + +_joy_static_stddrv := _atari7800_stdjoy_joy diff --git a/libsrc/atari7800/libref.s b/libsrc/atari7800/libref.s new file mode 100644 index 000000000..e4afa7eb1 --- /dev/null +++ b/libsrc/atari7800/libref.s @@ -0,0 +1,8 @@ +; +; Oliver Schmidt, 2013-05-31 +; + + .export joy_libref + .import _exit + +joy_libref := _exit From e4193451d4d4f8a58f2fcaeb5b1e394a8719e677 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 31 Mar 2022 09:09:11 +0300 Subject: [PATCH 1148/2710] Add comments --- libsrc/atari7800/joy/atari7800-stdjoy.s | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libsrc/atari7800/joy/atari7800-stdjoy.s b/libsrc/atari7800/joy/atari7800-stdjoy.s index ec3806dde..1ad7bff0d 100644 --- a/libsrc/atari7800/joy/atari7800-stdjoy.s +++ b/libsrc/atari7800/joy/atari7800-stdjoy.s @@ -3,7 +3,7 @@ ; This version tries to use 7800 and 2600 joysticks. ; But assumes that both joysticks are of same type. ; -; Modified by Karri Kaksonen, 2022-02-27 +; Modified by Karri Kaksonen, 2022-03-31 ; Ullrich von Bassewitz, 2002-12-20 ; Using code from Steve Schmidtke ; @@ -107,7 +107,7 @@ L1: bit INPT3 ;Check for left button bpl L2 iny ; ......21 L2: tya - bne L4 ; Joystick worked + bne L4 ; 7800 mode joystick worked ; 2600 Joystick 1 bit INPT5 bpl L4 @@ -127,7 +127,7 @@ L6: bit INPT1 ;Check for left button bpl L7 iny ; ......21 L7: tya - bne L4 ; Joystick worked + bne L4 ; 7800 mode joystick worked ; 2600 Joystick 0 bit INPT4 bpl L4 @@ -136,12 +136,12 @@ L7: tya READ: tay ; Store joystick 0/1 in Y beq L8 - lda SWCHA + lda SWCHA ; Read directions of joystick 1 rol ; ...RLDU. rol ; ..RLDU.. rol ; .RLDU... - joystick 1 jmp L9 -L8: lda SWCHA ; Read joystick +L8: lda SWCHA ; Read directions of joystick 0 ror ; .RLDU... - joystick 0 L9: tax jsr readbuttons ; A = ......21, X = .RLDU... From 26ab64f207774215ac97a52ecd52e050f214f5fe Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 31 Mar 2022 11:04:10 +0300 Subject: [PATCH 1149/2710] Change polarity for 2600 buttons --- libsrc/atari7800/joy/atari7800-stdjoy.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/atari7800/joy/atari7800-stdjoy.s b/libsrc/atari7800/joy/atari7800-stdjoy.s index 1ad7bff0d..00bb57dcf 100644 --- a/libsrc/atari7800/joy/atari7800-stdjoy.s +++ b/libsrc/atari7800/joy/atari7800-stdjoy.s @@ -110,7 +110,7 @@ L2: tya bne L4 ; 7800 mode joystick worked ; 2600 Joystick 1 bit INPT5 - bpl L4 + bmi L4 L3: iny ; .......1 lda #0 ; Fallback to 2600 joystick mode sta CTLSWB @@ -130,8 +130,8 @@ L7: tya bne L4 ; 7800 mode joystick worked ; 2600 Joystick 0 bit INPT4 - bpl L4 - bmi L3 + bmi L4 + bpl L3 READ: tay ; Store joystick 0/1 in Y From 77b300682a6fbfccdc3fc23b0a4bd17226e652ec Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 09:39:46 +0300 Subject: [PATCH 1150/2710] Add basic conio buffer --- asminc/atari7800.inc | 5 +++++ cfg/atari7800.cfg | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/asminc/atari7800.inc b/asminc/atari7800.inc index a7625aa8a..5b725c1c3 100644 --- a/asminc/atari7800.inc +++ b/asminc/atari7800.inc @@ -6,3 +6,8 @@ .include "atari7800_tia.inc" .include "atari7800_riot.inc" .include "atari7800_maria.inc" + +; constants for the conio implementation +charsperline = 20 +screenrows = 28 + diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 4d20ab0d9..835d0b18f 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -10,7 +10,7 @@ SYMBOLS { __ENCRYPT_BOTTOM__: value = $ff7a, type = export; __ENCRYPT_SIZE__: value = $80, type = export; __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; - __INIT_SIZE__: value = 121, type = export; + __INIT_SIZE__: value = 139, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; From c31c7d278214c93a364185412b3054a45df3e7fe Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 09:39:55 +0300 Subject: [PATCH 1151/2710] Add basic conio buffer --- libsrc/atari7800/clrscr.s | 31 +++++ libsrc/atari7800/conio.s | 230 ++++++++++++++++++++++++++++++++ libsrc/atari7800/font160.s | 259 +++++++++++++++++++++++++++++++++++++ 3 files changed, 520 insertions(+) create mode 100644 libsrc/atari7800/clrscr.s create mode 100644 libsrc/atari7800/conio.s create mode 100644 libsrc/atari7800/font160.s diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s new file mode 100644 index 000000000..8d695b706 --- /dev/null +++ b/libsrc/atari7800/clrscr.s @@ -0,0 +1,31 @@ + + .include "atari7800.inc" + + .export _clrscr + + .import CURS_X + .import CURS_Y + .import _screen + .import pushax, __bzero + + .code + + .proc _clrscr + + lda #0 + sta CURS_X + sta CURS_Y + lda #<(_screen) + ldx #>(_screen) + jsr pushax + ldx #>(charsperline * screenrows) + lda #<(charsperline * screenrows) + jmp __bzero + + .endproc + +;------------------------------------------------------------------------------- +; force the init constructor to be imported + + .import initconio +conio_init = initconio diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s new file mode 100644 index 000000000..f50b70cfe --- /dev/null +++ b/libsrc/atari7800/conio.s @@ -0,0 +1,230 @@ +; +; 2022-04-02, Karri Kaksonen +; +; The Atari 7800 has only 4k of RAM. So for a generic conio implementation +; the best alternative is to use indirect tile mapping with a character +; frame buffer +; + + .constructor initconio + .include "atari7800.inc" + .import _font160 + .import _get_tv + .import _clrscr + .export _screen + .export _zones + .export _dll + .export _initconio + .export CURS_X, CURS_Y + + .bss +_screen: + .res charsperline * screenrows + + .data +CURS_X: + .byte 0 +CURS_Y: + .byte 0 + +;---------------------------------------------------------------------------- +; Macros used to generate lists + +.macro DLLentry offset, addr + .byte offset + .byte >addr + .byte <addr +.endmacro + +.macro NullHeader offset, zero + .byte offset + .byte zero +.endmacro + +.macro Header addr, palwidth, hpos + .byte <addr + .byte palwidth + .byte >addr + .byte hpos +.endmacro + +.macro XHeader addr, flags, palwidth, hpos + .byte <addr + .byte flags + .byte >addr + .byte palwidth + .byte hpos +.endmacro + +.macro TextZone row + ; Text + .byte <(_screen + row * charsperline) + .byte $60 + .byte >(_screen + row * charsperline) + .byte 12 + .byte 0 + ; Cursor + .byte 127 + .byte 0 + .byte >_font160 + .byte 0 +.endmacro + +;----------------------------------------------------------------------------- +; The Atari 7800 has only 4k of RAM. So for a generic conio implementation +; the best alternative is to use indirect tile mapping with a character +; frame buffer + .data + +_zones: +zone0: TextZone 0 +nh: NullHeader 0, 0 +zone1: TextZone 1 + NullHeader 0, 0 +zone2: TextZone 2 + NullHeader 0, 0 +zone3: TextZone 3 + NullHeader 0, 0 +zone4: TextZone 4 + NullHeader 0, 0 +zone5: TextZone 5 + NullHeader 0, 0 +zone6: TextZone 6 + NullHeader 0, 0 +zone7: TextZone 7 + NullHeader 0, 0 +zone8: TextZone 8 + NullHeader 0, 0 +zone9: TextZone 9 + NullHeader 0, 0 +zone10: TextZone 10 + NullHeader 0, 0 +zone11: TextZone 11 + NullHeader 0, 0 +zone12: TextZone 12 + NullHeader 0, 0 +zone13: TextZone 13 + NullHeader 0, 0 +zone14: TextZone 14 + NullHeader 0, 0 +zone15: TextZone 15 + NullHeader 0, 0 +zone16: TextZone 16 + NullHeader 0, 0 +zone17: TextZone 17 + NullHeader 0, 0 +zone18: TextZone 18 + NullHeader 0, 0 +zone19: TextZone 19 + NullHeader 0, 0 +zone20: TextZone 20 + NullHeader 0, 0 +zone21: TextZone 21 + NullHeader 0, 0 +zone22: TextZone 22 + NullHeader 0, 0 +zone23: TextZone 23 + NullHeader 0, 0 +zone24: TextZone 24 + NullHeader 0, 0 +zone25: TextZone 25 + NullHeader 0, 0 +zone26: TextZone 26 + NullHeader 0, 0 +zone27: TextZone 27 + NullHeader 0, 0 + +_dll: +PALscanlines: ; 25 lines + DLLentry 15, nh + DLLentry 8, nh + +Topscanlines: ; 9 lines + DLLentry 8, nh + +Displaylines: + DLLentry $80+7, zone0 ; NMI interrupt from end of prev zone + DLLentry 7, zone1 + DLLentry 7, zone2 + DLLentry 7, zone3 + DLLentry 7, zone4 + DLLentry 7, zone5 + DLLentry 7, zone6 + DLLentry 7, zone7 + DLLentry 7, zone8 + DLLentry 7, zone9 + DLLentry 7, zone10 + DLLentry 7, zone11 + DLLentry 7, zone12 + DLLentry 7, zone13 + DLLentry 7, zone14 + DLLentry 7, zone15 + DLLentry 7, zone16 + DLLentry 7, zone17 + DLLentry 7, zone18 + DLLentry 7, zone19 + DLLentry 7, zone20 + DLLentry 7, zone21 + DLLentry 7, zone22 + DLLentry 7, zone23 + DLLentry 7, zone24 + DLLentry 7, zone25 + DLLentry 7, zone26 + DLLentry 7, zone27 + +Bottomscanlines: + DLLentry $80+15, nh ; NMI interrupt at end of display + DLLentry 9, nh + DLLentry 15, nh + DLLentry 8, nh + +;----------------------------------------------------------------------------- +; Set up the screen to 320a mode +; + .segment "ONCE" + +CTRL_MODE160 .set 0 +CTRL_MODEAC .set 3 +CTRL_KANGOFF .set 0 +CTRL_BCBLACK .set 0 +CTRL_CHAR1B .set 0 +CTRL_CHAR2B .set $10 +CTRL_DMAON .set $40 +CTRL_CKOFF .set 0 + +_initconio: +initconio: + jsr _get_tv + bne pal + lda #<Topscanlines + sta DPPL + lda #>Topscanlines + sta DPPH + jmp vblankon +pal: lda #<PALscanlines + sta DPPL + lda #>PALscanlines + sta DPPH + jsr _clrscr +vblankon: + lda MSTAT + bmi vblankon +vblankoff: + lda MSTAT + bpl vblankoff + lda #>_font160 + sta CHBASE + lda #(CTRL_MODE160 | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR2B | CTRL_DMAON | CTRL_CKOFF) + sta CTRL + lda #$00 ; Black background + sta BKGRND + lda #$33 ; Red + sta P0C1 + lda #$c8 ; Green + sta P0C2 + lda #$78 ; Blue + sta P0C3 + lda #$0f ; Cursor gray + sta P1C1 + rts + diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s new file mode 100644 index 000000000..9dbeda92c --- /dev/null +++ b/libsrc/atari7800/font160.s @@ -0,0 +1,259 @@ + .export _font160 + .rodata +_font160: + .byte $0, $0, $0, $0, $41, $41, $14, $0 + .byte $0, $0, $0, $0, $1, $40, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $82, $82, $28, $0, $0, $0, $0, $0 + .byte $2, $80, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $c3, $c3, $3c, $0 + .byte $0, $0, $0, $0, $3, $c0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $15, $15 + .byte $0, $0, $5, $0, $11, $44, $5, $0 + .byte $0, $0, $5, $0, $1, $40, $15, $50 + .byte $55, $50, $55, $50, $15, $40, $1, $54 + .byte $15, $40, $15, $40, $5, $0, $15, $40 + .byte $15, $0, $50, $50, $55, $50, $5, $50 + .byte $55, $40, $55, $54, $55, $0, $5, $54 + .byte $50, $50, $15, $40, $15, $40, $54, $14 + .byte $55, $54, $50, $14, $50, $14, $5, $40 + .byte $55, $0, $1, $50, $54, $14, $15, $40 + .byte $15, $40, $55, $50, $5, $0, $50, $14 + .byte $50, $14, $15, $40, $55, $54, $a, $0 + .byte $22, $88, $a, $0, $0, $0, $a, $0 + .byte $2, $80, $2a, $a0, $aa, $a0, $aa, $a0 + .byte $2a, $80, $2, $a8, $2a, $80, $2a, $80 + .byte $a, $0, $2a, $80, $2a, $0, $a0, $a0 + .byte $aa, $a0, $a, $a0, $aa, $80, $aa, $a8 + .byte $aa, $0, $a, $a8, $a0, $a0, $2a, $80 + .byte $2a, $80, $a8, $28, $aa, $a8, $a0, $28 + .byte $a0, $28, $a, $80, $aa, $0, $2, $a0 + .byte $a8, $28, $2a, $80, $2a, $80, $aa, $a0 + .byte $a, $0, $a0, $28, $a0, $28, $2a, $80 + .byte $aa, $a8, $f, $0, $33, $cc, $f, $0 + .byte $0, $0, $f, $0, $3, $c0, $3f, $f0 + .byte $ff, $f0, $ff, $f0, $3f, $c0, $3, $fc + .byte $3f, $c0, $3f, $c0, $f, $0, $3f, $c0 + .byte $3f, $0, $f0, $f0, $ff, $f0, $f, $f0 + .byte $ff, $c0, $ff, $fc, $ff, $0, $f, $fc + .byte $f0, $f0, $3f, $c0, $3f, $c0, $fc, $3c + .byte $ff, $fc, $f0, $3c, $f0, $3c, $f, $c0 + .byte $ff, $0, $3, $f0, $fc, $3c, $3f, $c0 + .byte $3f, $c0, $ff, $f0, $f, $0, $f0, $3c + .byte $f0, $3c, $3f, $c0, $ff, $fc, $0, $0 + .byte $0, $0, $0, $0, $5, $50, $5, $0 + .byte $0, $0, $5, $0, $1, $40, $54, $14 + .byte $5, $0, $50, $50, $50, $50, $0, $50 + .byte $50, $50, $50, $50, $5, $0, $50, $50 + .byte $1, $40, $50, $50, $14, $14, $14, $14 + .byte $14, $50, $14, $4, $14, $0, $14, $14 + .byte $50, $50, $5, $0, $50, $50, $14, $14 + .byte $14, $14, $50, $14, $50, $14, $14, $50 + .byte $14, $0, $15, $40, $14, $14, $50, $50 + .byte $5, $0, $50, $50, $15, $40, $54, $54 + .byte $14, $50, $5, $0, $14, $14, $0, $0 + .byte $a, $a0, $a, $0, $0, $0, $a, $0 + .byte $2, $80, $a8, $28, $a, $0, $a0, $a0 + .byte $a0, $a0, $0, $a0, $a0, $a0, $a0, $a0 + .byte $a, $0, $a0, $a0, $2, $80, $a0, $a0 + .byte $28, $28, $28, $28, $28, $a0, $28, $8 + .byte $28, $0, $28, $28, $a0, $a0, $a, $0 + .byte $a0, $a0, $28, $28, $28, $28, $a0, $28 + .byte $a0, $28, $28, $a0, $28, $0, $2a, $80 + .byte $28, $28, $a0, $a0, $a, $0, $a0, $a0 + .byte $2a, $80, $a8, $a8, $28, $a0, $a, $0 + .byte $28, $28, $0, $0, $f, $f0, $f, $0 + .byte $0, $0, $f, $0, $3, $c0, $fc, $3c + .byte $f, $0, $f0, $f0, $f0, $f0, $0, $f0 + .byte $f0, $f0, $f0, $f0, $f, $0, $f0, $f0 + .byte $3, $c0, $f0, $f0, $3c, $3c, $3c, $3c + .byte $3c, $f0, $3c, $c, $3c, $0, $3c, $3c + .byte $f0, $f0, $f, $0, $f0, $f0, $3c, $3c + .byte $3c, $3c, $f0, $3c, $f0, $3c, $3c, $f0 + .byte $3c, $0, $3f, $c0, $3c, $3c, $f0, $f0 + .byte $f, $0, $f0, $f0, $3f, $c0, $fc, $fc + .byte $3c, $f0, $f, $0, $3c, $3c, $0, $0 + .byte $0, $0, $5, $0, $54, $15, $0, $0 + .byte $55, $55, $0, $0, $1, $40, $55, $14 + .byte $5, $0, $14, $0, $0, $50, $55, $54 + .byte $0, $50, $50, $50, $5, $0, $50, $50 + .byte $0, $50, $55, $50, $14, $14, $50, $0 + .byte $14, $14, $14, $40, $14, $40, $50, $54 + .byte $50, $50, $5, $0, $50, $50, $14, $50 + .byte $14, $4, $51, $14, $50, $54, $50, $14 + .byte $14, $0, $51, $50, $14, $50, $1, $50 + .byte $5, $0, $50, $50, $50, $50, $55, $54 + .byte $5, $40, $5, $0, $5, $4, $a, $0 + .byte $a8, $2a, $0, $0, $aa, $aa, $0, $0 + .byte $2, $80, $aa, $28, $a, $0, $28, $0 + .byte $0, $a0, $aa, $a8, $0, $a0, $a0, $a0 + .byte $a, $0, $a0, $a0, $0, $a0, $aa, $a0 + .byte $28, $28, $a0, $0, $28, $28, $28, $80 + .byte $28, $80, $a0, $a8, $a0, $a0, $a, $0 + .byte $a0, $a0, $28, $a0, $28, $8, $a2, $28 + .byte $a0, $a8, $a0, $28, $28, $0, $a2, $a0 + .byte $28, $a0, $2, $a0, $a, $0, $a0, $a0 + .byte $a0, $a0, $aa, $a8, $a, $80, $a, $0 + .byte $a, $8, $f, $0, $fc, $3f, $0, $0 + .byte $ff, $ff, $0, $0, $3, $c0, $ff, $3c + .byte $f, $0, $3c, $0, $0, $f0, $ff, $fc + .byte $0, $f0, $f0, $f0, $f, $0, $f0, $f0 + .byte $0, $f0, $ff, $f0, $3c, $3c, $f0, $0 + .byte $3c, $3c, $3c, $c0, $3c, $c0, $f0, $fc + .byte $f0, $f0, $f, $0, $f0, $f0, $3c, $f0 + .byte $3c, $c, $f3, $3c, $f0, $fc, $f0, $3c + .byte $3c, $0, $f3, $f0, $3c, $f0, $3, $f0 + .byte $f, $0, $f0, $f0, $f0, $f0, $ff, $fc + .byte $f, $c0, $f, $0, $f, $c, $0, $0 + .byte $0, $0, $5, $0, $54, $15, $0, $0 + .byte $55, $55, $0, $0, $1, $40, $51, $54 + .byte $5, $0, $5, $40, $5, $40, $50, $50 + .byte $0, $50, $55, $40, $1, $40, $15, $40 + .byte $15, $50, $50, $50, $15, $50, $50, $0 + .byte $14, $14, $15, $40, $15, $40, $50, $0 + .byte $55, $50, $5, $0, $0, $50, $15, $40 + .byte $14, $0, $55, $54, $51, $54, $50, $14 + .byte $15, $50, $50, $50, $15, $50, $15, $0 + .byte $5, $0, $50, $50, $50, $50, $51, $14 + .byte $5, $40, $15, $40, $1, $40, $a, $0 + .byte $a8, $2a, $0, $0, $aa, $aa, $0, $0 + .byte $2, $80, $a2, $a8, $a, $0, $a, $80 + .byte $a, $80, $a0, $a0, $0, $a0, $aa, $80 + .byte $2, $80, $2a, $80, $2a, $a0, $a0, $a0 + .byte $2a, $a0, $a0, $0, $28, $28, $2a, $80 + .byte $2a, $80, $a0, $0, $aa, $a0, $a, $0 + .byte $0, $a0, $2a, $80, $28, $0, $aa, $a8 + .byte $a2, $a8, $a0, $28, $2a, $a0, $a0, $a0 + .byte $2a, $a0, $2a, $0, $a, $0, $a0, $a0 + .byte $a0, $a0, $a2, $28, $a, $80, $2a, $80 + .byte $2, $80, $f, $0, $fc, $3f, $0, $0 + .byte $ff, $ff, $0, $0, $3, $c0, $f3, $fc + .byte $f, $0, $f, $c0, $f, $c0, $f0, $f0 + .byte $0, $f0, $ff, $c0, $3, $c0, $3f, $c0 + .byte $3f, $f0, $f0, $f0, $3f, $f0, $f0, $0 + .byte $3c, $3c, $3f, $c0, $3f, $c0, $f0, $0 + .byte $ff, $f0, $f, $0, $0, $f0, $3f, $c0 + .byte $3c, $0, $ff, $fc, $f3, $fc, $f0, $3c + .byte $3f, $f0, $f0, $f0, $3f, $f0, $3f, $0 + .byte $f, $0, $f0, $f0, $f0, $f0, $f3, $3c + .byte $f, $c0, $3f, $c0, $3, $c0, $0, $0 + .byte $0, $0, $15, $40, $5, $50, $0, $0 + .byte $0, $0, $0, $0, $1, $40, $50, $54 + .byte $5, $0, $0, $50, $0, $50, $14, $50 + .byte $55, $40, $50, $0, $0, $50, $50, $50 + .byte $50, $50, $50, $50, $14, $14, $50, $0 + .byte $14, $14, $14, $40, $14, $40, $50, $0 + .byte $50, $50, $5, $0, $0, $50, $14, $50 + .byte $14, $0, $55, $54, $55, $14, $50, $14 + .byte $14, $14, $50, $50, $14, $14, $54, $0 + .byte $5, $0, $50, $50, $50, $50, $50, $14 + .byte $14, $50, $50, $50, $40, $50, $2a, $80 + .byte $a, $a0, $0, $0, $0, $0, $0, $0 + .byte $2, $80, $a0, $a8, $a, $0, $0, $a0 + .byte $0, $a0, $28, $a0, $aa, $80, $a0, $0 + .byte $0, $a0, $a0, $a0, $a0, $a0, $a0, $a0 + .byte $28, $28, $a0, $0, $28, $28, $28, $80 + .byte $28, $80, $a0, $0, $a0, $a0, $a, $0 + .byte $0, $a0, $28, $a0, $28, $0, $aa, $a8 + .byte $aa, $28, $a0, $28, $28, $28, $a0, $a0 + .byte $28, $28, $a8, $0, $a, $0, $a0, $a0 + .byte $a0, $a0, $a0, $28, $28, $a0, $a0, $a0 + .byte $80, $a0, $3f, $c0, $f, $f0, $0, $0 + .byte $0, $0, $0, $0, $3, $c0, $f0, $fc + .byte $f, $0, $0, $f0, $0, $f0, $3c, $f0 + .byte $ff, $c0, $f0, $0, $0, $f0, $f0, $f0 + .byte $f0, $f0, $f0, $f0, $3c, $3c, $f0, $0 + .byte $3c, $3c, $3c, $c0, $3c, $c0, $f0, $0 + .byte $f0, $f0, $f, $0, $0, $f0, $3c, $f0 + .byte $3c, $0, $ff, $fc, $ff, $3c, $f0, $3c + .byte $3c, $3c, $f0, $f0, $3c, $3c, $fc, $0 + .byte $f, $0, $f0, $f0, $f0, $f0, $f0, $3c + .byte $3c, $f0, $f0, $f0, $c0, $f0, $0, $0 + .byte $0, $0, $15, $40, $11, $44, $0, $0 + .byte $0, $0, $0, $0, $1, $40, $50, $14 + .byte $15, $0, $50, $50, $50, $50, $5, $50 + .byte $50, $0, $14, $0, $50, $50, $50, $50 + .byte $50, $50, $15, $40, $14, $14, $14, $14 + .byte $14, $50, $14, $4, $14, $4, $14, $14 + .byte $50, $50, $5, $0, $0, $50, $14, $14 + .byte $14, $0, $54, $54, $54, $14, $14, $50 + .byte $14, $14, $50, $50, $14, $14, $50, $50 + .byte $45, $10, $50, $50, $50, $50, $50, $14 + .byte $50, $14, $50, $50, $50, $14, $2a, $80 + .byte $22, $88, $0, $0, $0, $0, $0, $0 + .byte $2, $80, $a0, $28, $2a, $0, $a0, $a0 + .byte $a0, $a0, $a, $a0, $a0, $0, $28, $0 + .byte $a0, $a0, $a0, $a0, $a0, $a0, $2a, $80 + .byte $28, $28, $28, $28, $28, $a0, $28, $8 + .byte $28, $8, $28, $28, $a0, $a0, $a, $0 + .byte $0, $a0, $28, $28, $28, $0, $a8, $a8 + .byte $a8, $28, $28, $a0, $28, $28, $a0, $a0 + .byte $28, $28, $a0, $a0, $8a, $20, $a0, $a0 + .byte $a0, $a0, $a0, $28, $a0, $28, $a0, $a0 + .byte $a0, $28, $3f, $c0, $33, $cc, $0, $0 + .byte $0, $0, $0, $0, $3, $c0, $f0, $3c + .byte $3f, $0, $f0, $f0, $f0, $f0, $f, $f0 + .byte $f0, $0, $3c, $0, $f0, $f0, $f0, $f0 + .byte $f0, $f0, $3f, $c0, $3c, $3c, $3c, $3c + .byte $3c, $f0, $3c, $c, $3c, $c, $3c, $3c + .byte $f0, $f0, $f, $0, $0, $f0, $3c, $3c + .byte $3c, $0, $fc, $fc, $fc, $3c, $3c, $f0 + .byte $3c, $3c, $f0, $f0, $3c, $3c, $f0, $f0 + .byte $cf, $30, $f0, $f0, $f0, $f0, $f0, $3c + .byte $f0, $3c, $f0, $f0, $f0, $3c, $0, $0 + .byte $0, $0, $5, $0, $41, $41, $0, $0 + .byte $0, $0, $0, $0, $1, $40, $15, $50 + .byte $5, $0, $15, $40, $15, $40, $1, $50 + .byte $55, $50, $5, $40, $55, $50, $15, $40 + .byte $15, $40, $5, $0, $55, $50, $5, $50 + .byte $55, $40, $55, $54, $55, $54, $5, $50 + .byte $50, $50, $15, $40, $1, $54, $54, $14 + .byte $55, $0, $50, $14, $50, $14, $5, $40 + .byte $55, $50, $15, $40, $55, $50, $15, $40 + .byte $55, $50, $50, $50, $50, $50, $50, $14 + .byte $50, $14, $50, $50, $55, $54, $a, $0 + .byte $82, $82, $0, $0, $0, $0, $0, $0 + .byte $2, $80, $2a, $a0, $a, $0, $2a, $80 + .byte $2a, $80, $2, $a0, $aa, $a0, $a, $80 + .byte $aa, $a0, $2a, $80, $2a, $80, $a, $0 + .byte $aa, $a0, $a, $a0, $aa, $80, $aa, $a8 + .byte $aa, $a8, $a, $a0, $a0, $a0, $2a, $80 + .byte $2, $a8, $a8, $28, $aa, $0, $a0, $28 + .byte $a0, $28, $a, $80, $aa, $a0, $2a, $80 + .byte $aa, $a0, $2a, $80, $aa, $a0, $a0, $a0 + .byte $a0, $a0, $a0, $28, $a0, $28, $a0, $a0 + .byte $aa, $a8, $f, $0, $c3, $c3, $0, $0 + .byte $0, $0, $0, $0, $3, $c0, $3f, $f0 + .byte $f, $0, $3f, $c0, $3f, $c0, $3, $f0 + .byte $ff, $f0, $f, $c0, $ff, $f0, $3f, $c0 + .byte $3f, $c0, $f, $0, $ff, $f0, $f, $f0 + .byte $ff, $c0, $ff, $fc, $ff, $fc, $f, $f0 + .byte $f0, $f0, $3f, $c0, $3, $fc, $fc, $3c + .byte $ff, $0, $f0, $3c, $f0, $3c, $f, $c0 + .byte $ff, $f0, $3f, $c0, $ff, $f0, $3f, $c0 + .byte $ff, $f0, $f0, $f0, $f0, $f0, $f0, $3c + .byte $f0, $3c, $f0, $f0, $ff, $fc, $0, $0 From f8b53e91faba4156f3669fe9f8f03e63157f416e Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 10:04:53 +0300 Subject: [PATCH 1152/2710] Add the font160.png --- libsrc/atari7800/font160.png | Bin 0 -> 2990 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 libsrc/atari7800/font160.png diff --git a/libsrc/atari7800/font160.png b/libsrc/atari7800/font160.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0fa1eba62bd3a1fb784b512db586aed1abe1b5 GIT binary patch literal 2990 zcmV;f3sLlmP)<h;3K|Lk000e1NJLTq00aO4000OC0{{R3l`oLa000HDdQ@0+Qek%> zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bvk}M|-{O1%t0$M=mI3Q4jZ{XuQsqUFKZ}Ar4 zuBoLd8l=or!j$vJ?^%Ashgu&+n~m<hSA5jfdE#Nz*T<hLRei1>AAPre*Iqt<#Ap)S z<@MF(>rNBx?b{DNy3_i;y^Qx89`AuZW_}MScV@=J{u(6O`PEMP9>~w@q5H6}p)P*i z<K6KI<$bRApie~g^}T#;Py<T4VIpBZLQ<dWcts%hWSO|@b7l0aVt7`uf?Jc1lmN(g z>3swED?mSjPcN{4K)>>@!RPtzAwOW*KUnL(enIWm;6D(5nOHs};_qJ^uliFu?=y3c z%=5}_Y6qhIt*8fV`WOZs7a*7CXB~&(Y<RZka2%t~8lZgFs0&As6N8m3q_k;L(s}Md zfe@7s8}7`(^0W;xb`G#a;0OmLo49NlU^4g=5j68>EcDFl&wN1xGjBpyCJaUo{eN+k zzkB&#j*=M{B6<Mj2P?$IR|E*-GIy`&1qvwNytN15kK;{${UWR@RYkW8^FV^LuGbK& z(Kl_$!?U1Y!~N|A#rAsuK!mv)f*}C|wUadJRE^n)fa3r`6OpqhFEBu@@kWrWBAtuz z;5#>dWAyap#+`37ya_}!>8Pgxh9<~TZP1VDfQDw1rmeN!tc}vV%`RPg>%CjQCO1t? ztywp-VQzEC(9uR8HpcKVon7F8&AXcqcb}8X#6%NgP4u5=S-fQFYO60>WBHl^`GiJ` z9u^}!=H@LMHnID*J+|+8s2n)O(bG;pcE<5D6Ix42&6YhaM|#dr*50iCbo>X_=*=2G zOx=F=$r@UV*~buc?WA4Kz!)omak~sa(0n<ogH-u4cR8!hD2m1ivR!V<rpp*8)I;2o zKDqnG+`r<jwDGTa<9}kVT<ZQ0<_f6$nYUlCw(mL@4`Z(?yqH!&^(Fb@EWUKC+4^a! zgheaiG$NR3!TkD!Yh8w-UvOcLfP~tyt+@=d?TSf)dyZnMuuoX*K5YQ-sQBBVP}518 z;{dtK;phy+K_nuUzQD$q$80Uxy=B#6rzPe^zmD>A{Kc_svpFFtTmT3eO7yHi6@xNg zYp-*#blm_zq!>`bDq@&=PS_&P8M7YLyH(jH$U?V^F1uL-gc5pi!%*NUeFu83emXVQ zq5%$%CZCPIU=6fVfc2bk48%qKI0EgBc{_5T=yICP9f_0y`Pv)76ziVSMsy6sKm@Y! z!L|Xf9R&~!N|1uvSzGQ?KR28-QcFmo)8!yb0*$2z#<w3sA-C;F`5-4J%^I=mK<Hi# z0~1mPsF$4O7w=?;P&`lRkpsV!oCgTmv`A4Dmc%?!V;kT^3E4m%ca4mS?HTl%zJzvc z$kMjYQJ`zKBxqz!hk&;0=}vp;T!-TTLP1?SL-n;S>;Vq8QWI4IR(a%sND?bwk$Ubb z$7**8(<YYi4#cXGOQ7t7s$9@}Z>SaceuHWasPEAwvBYw35;;r4W1!8ceiWsOMH-@Z ztj&0v3x;r|Gl3h#wvc)S#S6P9H*A%FH6ex#+b<~~ELx|&)Bs7+)n&@$jco!fV%@qq ziIU0zN4gbq!LE?)3QQJQr%@>d>&(u>D?uiBs7SNwhJkc!<L;gf8Zx*MNJRhEa;(!F zaGeU<8V>1d-0FWgTyx4oJbAh;v||qeJMt4TtlwlhAOT>bheP@(REZ5AGwU~dD9;Pm z175bl%`oJim_R|+i4Mkf(Vkm+9RW?lM-Ri()Hk*;;j&iDMr*B89YqW4xv8t{sJ=I} z41kE|f}QjYFNj;pf(pjD0U9h6)xBXR$w&m1+S`HE`jH4Yb;cSuD%*Fv>l2<7uCYk4 z0ygM$Kc?HZwh+ZmEAX!Z7ITd$iEYh6W%nCZ`lT8~t;CM#0lzXz6YdD&%AYWk0+FEr z;xqsN0flKpLr_UWLm+T+Z)Rz1WdHzpoPCiyNW)MRhW|dKA{B>r5OK&*9mI;Lh@)1a z2o*xD(5i#UO<&NYAxUv@6kH1qJ{GGEF3!3-xC(;c1H{qENzp}0JU1z{i1EPXe*E|R zKlh#s_!||bn!#~E)hr{OObFTBst|fb5I#gOh7pOG`kW}H;8|by)Jt_2=ULu;e^#%O zHyPj)h-aB@Si~E|)0>vgd7n7SN|Hi+PCRPR1&JTIF1!53x#+N;XGV=odY(8+EEGFf z?qF6jRN^V(n4)Tw@6WodaNgpqR%)zuPyWJiURzn_I;}w@v4|yz5Fn$5GAghTr(Gk( zM4HYM9{vHxFOo|pR~d{P3#dYc<oLn=;P-6J!sLXT6ixtLFSh+L1cY{hX5F^Gk8Qho z0tB9cE3NIXHh`H=((7$4b_Dco0~gnAP2K}8cYyvUT{0v`3efTw3c&jreNzsI+yXso z?%Z1EIDG&zG^^ANaBv6=7b$z)<K5kzbNjcaHNPK*t8%Z=X&ZL{000kAOjJbx00930 z06qTzdwc((p`m}bv?l-n010qNS#tmY4#WTe4#WYKD-Ig~000McNliru<^%!+FF6@d zB+UQ-1LH|VK~z}7%~$P_D<KRs&;WG6PysWvaQ)Zxuw=7lFPZoELI^vUj|>u$S42Ne zq^6oAeo~dx8e*wc)cqq3eHHEL*DmyH9I@K?AX;p0ZF>_gxm(>JtP|U(a2%d>y&=+b z&)5IVUGmt0{mrAJ?jITG>u68EcA;P6i1on-(PDG^*qd<4-RcHmo!CBw<M6EOEs<Gf zx&CLFQq~UaZ&?#{|Hwk$M0@(R3;h~LY%V^C7MnZQ-h@l;RyPRi#P%s1hi6^yV68x= zTHgfF!%qN=g@7U?7fd?8dI7YRmEd6#SF4y?Nd}JP7;kG!p9!#A0GWG#6F?6?127f> zijZ6|>HO{m&~{dWhe=$mV{RuIIF@6)?IV9Cz-|F#ne$BmJ^TW|SO_RWa>1nYrx!pw zSqUB{akYuLlVspnj`4P`@|ghGH4s3-{Y?P9k|q%bNAs?W0uG=U$V!N6vmyZ+$peLO z_yYkdw|cJ%V(iLWJmfb4^hy#uzqiA?E($n+VjwFay3L9N7$grA!r>1D=-lePDu}Tw zZ}F1f1kfu<@ciB`@46`90E&UEgqSuf5`ZvLAsqfdfXS`itAZF3{~uI65vFELPy!@F z8w9BYQ%C|@1Z{#U;Od~N!B`Ww1|tBJ!U&+20EKzxr}iR1qD>^*4~LGs4sgaHKsK~N zkWMg#B%npmCa40g4yqcA4RLEQ0zfH@0BQ+Pm}h<-F9KxRM7I5K=(y_uXB`3*LmLE{ z1XD-?S_Ex^D&Xp%s=?S2w+15sl)?z0mH>r$=9l#%K%q?(+wcDbXpjM%y|@n_JCHz# zZwk<A9P9R=z%pi*kQkHHZUR7VstZv4N`L_wz}buY@Ua64g!rZaqsOss4+<<}W(k=w z$>Syf<fgj-^{)h2kO4b;_u+MJ^+Skn3b1Az>-M0)GG>-g7?ZMY0zhu23(##*a&D?A zJ}w^#aB_ek&W8ZBicdL!#2g@waVoeacn)!m1@?`!YGPCoT7bKN8NK>+1SE>{Apou7 zQw|_82Z&>w3T_FWLtJBl{UEJ|7*&K8;3{iIuRa|CiQ;?+K&$wa14zsP;uxobTY~2h z*H~b`NUJ4Am7oC0O*;?(@@&;J`I!0hS^T!X-U2|XdXmIOLLqj&1qk0RqIEPUf)T~m z!~wf$2LeEzt$HROGk-pd-`3Y#07%tOk~l~x#ICmh;oC*Dj^RWwqS%@^U^neR0LZgd z&*Wp~&u8)5`g#ihspd%%7YT*f^%fv}yNK4YoCrn~Tk{eCJ^xhiB=9eO^!#(blfb|D k(euA-w#+~GAAk1eA57`mwI1`)d;kCd07*qoM6N<$f@x=T>Hq)$ literal 0 HcmV?d00001 From 3a21734c68e900c93347f2875fbfe4af80d942a2 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 10:51:45 +0300 Subject: [PATCH 1153/2710] Fix cursor character --- libsrc/atari7800/conio.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index f50b70cfe..3f19ae02e 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -64,7 +64,7 @@ CURS_Y: .byte 12 .byte 0 ; Cursor - .byte 127 + .byte 254 .byte 0 .byte >_font160 .byte 0 From 2388d022aab466464839f5466ebb90fd180e2c2d Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 11:47:37 +0300 Subject: [PATCH 1154/2710] Add the build tools for the font --- libsrc/atari7800/buildfont160.py | 30 ++++++++++++++++++++++++++++ libsrc/atari7800/font160.data | Bin 0 -> 8192 bytes libsrc/atari7800/font160flipped.png | Bin 0 -> 2957 bytes 3 files changed, 30 insertions(+) create mode 100644 libsrc/atari7800/buildfont160.py create mode 100644 libsrc/atari7800/font160.data create mode 100644 libsrc/atari7800/font160flipped.png diff --git a/libsrc/atari7800/buildfont160.py b/libsrc/atari7800/buildfont160.py new file mode 100644 index 000000000..bb944e335 --- /dev/null +++ b/libsrc/atari7800/buildfont160.py @@ -0,0 +1,30 @@ +blen = 0 + +def gb(val): + b = val[0] << 6 + b = b + (val[1] << 4) + b = b + (val[2] << 2) + b = b + val[3] + return '$' + hex(b)[2:4] + +def printline(f, val): + f.write(" .byte " + + gb(val[0:4]) + ', ' + + gb(val[4:8]) + ', ' + + gb(val[8:12]) + ', ' + + gb(val[12:16]) + ', ' + + gb(val[16:20]) + ', ' + + gb(val[20:24]) + ', ' + + gb(val[24:28]) + ', ' + + gb(val[28:32]) + '\n') + +fname='font160' +with open(fname + '.data', 'rb') as f: + data = f.read() +fname= fname + '.s' +with open(fname, 'w') as f: + f.write(" .export _font160\n") + f.write(' .rodata\n') + f.write("_font160:\n") + for i in range(0, int(len(data)/32)): + printline(f, data[i * 32:i * 32 + 32]) diff --git a/libsrc/atari7800/font160.data b/libsrc/atari7800/font160.data new file mode 100644 index 0000000000000000000000000000000000000000..79d2d83c3591585b230651e7c8142a130755a331 GIT binary patch literal 8192 zcmeHJ3v%5s2y~MB-?{7$ke@p30iuZoEXyLl5uQBHxxSv~3lH}*l?eIY^`F1M_w#(? z;eM|{{&)T7FYxm`KX|y`Ymon4|M&&IyoTnn=Hz3--(%jf9M*${HI{%xCxKYe=q6^h zx*a+$08OWn=g@-sOf_NkVO1qqMXT24s@^IntK|~D%$(N^r6XGJOE>SAej58?a`G|Z z?=kOK&NmiVrzL=fN@X7#U6m0R8Lnv4z_G=u<R!1q6!}X}r>7YCs-uXyr=Sms6M)*A z8XL79^GFD0#pt;|Osz_KtU39Z@b{Q^EawLctkV)eL#48hjjqawiwsw^Y2esmRq~S8 zXNvr#r_)o6eAQ7z-BZwq#0fy{O^uCOk9i~nvtsnzAEp*4e_6ipb)io}#~vZiiFp9` zgW4U(7dko9n%hna%EI-Q@)ig!iH_sg!ayVT@GDg@QzV!-K(}ii*sL&D44+elP_5<b z>w7Ltxc!+Pd&wfqbHhlt?&1;dIL@+7sE<=0%lXif=s3>ep%x*x?dz~i?c4xe0>={k z7BR7TsfVOiuJ8L2cT9(O+#c%S?&pS)zUD{q9-)g+k;v1Q@#|)QnOb}ElPnu77C`$t zEJK3M4bbi2xD54bzImyK<hgR&Imnn6E{p|M;<5~g*)y>zfLY`+#hDO+!B8aMU7QfB zlO*vFm4J1PZB&AbKn-o+ark%LDrP=>T1cf~_Z$6rKhr3dbD%J{m@|ec;lg#tN?bPg ze+^Smu|QCj$`nrru!4>6E>6I3g;<u5tzaDi{#IuU9&l|i1Q6nN1T#n*y=8KuMSy(O zN^;&$Wo~3X8s`@CPS>V|>yDMUECXWpm|GOMEHb8eI)EQ+e0Ooer9&)$hp-h*Gc4}x z^lFPO5%}74w#kviHhRm{0ZPMlUSN9ohRl#A#W3+&ua(<gcQ;qM7{2G61Q*Ph#A6~w zvPelWGn2ew2%`?xTmmb$><EO<GG=`~C4{)IWF5FoHQ=A@=wA9mI31!6WIYt4vIu8^ zCW5n}O=`a9xX@V{9i$55Mk~^wli@J!PyiI!Kq{7_K**Fw0ABbkL*Q~Jgh*@g7tf!7 zQleONDZlEV=XOTP7hMP>BC^lLN_Na`_ka-N5agm8>CpjRnCg05Dh@gs>qtSct3d~l zXUC)`vH53L*3UWY4c{^V{0WdvQ@|hnagOu2!!e&?KuIif6sUOi%nK)K;ETt5t~tPn z<l2uHf;kCWO87BLJy&s9go;JxKvulFCOzHlfwzeKtPoS8b8rL=pE0}j`<b?n(`P$! zsmOfc;`2h|Wv+{9&4LCctki{IPQuV`v(#9eXeEaAoY5u^D?f<i3W*rTTh%H|iO#_h zG<?SFR%a%YyQ%HRIq+2U{cWe;|K;$WYX)%RbM40q!JLFGBm85Yq~s)vP_f9KGyWft zeA3h1UM0ve5pPwiFeN$%N6_#YdzyuEH?{pZ2Y&n_{mQt@xW;8U4J+~ClGj_xG)6ri z5tJx&HBT_Nr$8|-NhY*eXGB8p25FT9>yX8Z>B#|@!bUvOXPlqIw3O1OE;bw{IT&>q zj!o|V$8QOM1JN7i$>5#?&=MoBDw*KhntmmK=dP!%L^Pb3R!OiJS<XIfikLFbMl$5u z1-beszb#Wf+Z(UDjB8x8fLoor&*Qx}@_I{|#wa5JA!a1XkUEHOkLlNB_rkdpG%s3C zbdRHnPJ<SFl51V!kyelB=I7{mogX^DW5W^1qpS_Lw`M?NKz}8-YvLYQ6k@uTB_g;J zPBZ@CH|r1r4Z5`D#ik*WO+bGqSY^IIX2KQC<Xta)CssavwuP8$X_ccwRpJKMo@<Zb zzD(47r>@EeR~-SsohZEH1+#JblK=q`64I7X?Bsm{(YvrhCIa&etf#c}-Nm^!?W{bo z_XEJ(mE#Gkk~cXMhFkr&WuoRgbyYsNDhUAYMByDTSk0O>e9oFe)p34ZDT69j8g&cw dVIr_O;fi)S5BOUzvE^7FAAz|Gk3fmn`U9J)83h0U literal 0 HcmV?d00001 diff --git a/libsrc/atari7800/font160flipped.png b/libsrc/atari7800/font160flipped.png new file mode 100644 index 0000000000000000000000000000000000000000..a99a13657addb8e2c0ae3797643869ebea4a87ef GIT binary patch literal 2957 zcmV;83v%>{P)<h;3K|Lk000e1NJLTq00aO4000OA0{{R38gFH8000H$dQ@0+Qek%> zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YuvLrVM{I65^2m&NP$3Y7bzJZVLRCT>==GmT! za4TwQl@`cM5ZC_e&%FM?kCgSQ&0M=`!LRn(Iq>4;_3QVYO1<xIzxwok>A&75F}eg# zdHuC`Jt@%NJ|?^kr}4G_^5+Ztv(Vel&w_GxX1uJ=Mxviz{ZyZY`hLA=cl&JW;Ma3L z18-BFYdnkI7M0ik>vKmnptKq`66P%=<-YsN0y!5;;92iGV;rFc{_Ayj>0=21`QqLO zz@Gv75qx@q{R8@izXzY=86iJlsc)?5_aCTz5B?4Dr;X*^BL4aTP_&=id9KXmnfv8k zR0X2?DC!2A-j>0@0m$W^rf7z%;oa`m(Y!>NpnR2C2HK=f3|8`@N{fP$_WhhRVPfUY zh9~o6x%*s<J5M=0)zc{1q{|Wqlau!)f^L4dh3<X(z279q&WkXV35(H9|39?r-#-3M zyE5m2h;Bgn#tL@v5dq9N%$++%fe^}vw{`>k)*kxHCt*RVV6fdVI~<HMUQ3KdAKH?e z=fiHp^T`F5t!Dv1guNS#f$S?4C26EojM<2Qql2J;<t&v47@*d8!APzm%9pY8*&B0= z?y=lh`E(;Ufrut525!0p$f~tLKUN(YiYBeL*0fpktMwKtTD7UF=}B^7V%3_dnYncf z7q8x2-Q2x<bnb#2*t&M>-g}SWE3i>ut-$y|&)^}Wjy81I@X<$1$Y<8srcRqa`;5g) z7ShDhWy@DzvFX~#6ua)Wb=&sccO<lyk~LduT6*@3ch(+Oe`>$M8a=G>&D0rZ@2sKs zGJ9KsPC99aGcd-Lz_=X-AZR|E6{lMHFn2gBoe>m`VPrepT#F84ps;S@mh{fu2Xnu~ z+tvJ+c;o+K?mE={AIx2#?q}Y<VQrmrZr+T&qVQl^1ksn&Yxc{g#GYfyIiNbNnmZ|C zH7B;F!%N-xa!!TZy9axu?65Vk!FF4=NwCP3Q7y5qCNF$s^1iV_Z0VV{A}TI`H=*y* zYNu&cx>9Y_=1#yEbL`?*&XJY&4g}wG+DzM{)(Fuqhr#Kxdmj84%dWi=njkvcLmJxl z0y39T`l<u^Tk3Oy+3cOm>{&4d`_|Q^4l}?uSBdQb84Va$cEK@iw(CMpzPz;IG(|8{ z&b;nh#zb}*O_4r;H=nSHanw9|scMo8{Rr}Uk4Bao0=(A7PBC=)NWlqE;Y^X`0BWnk zn}LMh;p~!3-QIz*5pabHlyEk+<6^X{uhyoK_K+>U*4cmUEpv2pX^;ezyJX)L6aopj z68^$c1jj*qw}T*9o2w^rhGko=b9O4zppxnxSL0c{6@<r_UDA6%A|!j^coL0V3xWf4 zz$jqtteLT+PSDxv*uF^TXi~rw4$D5lr&Ydz6<rScqiEeW7Y?;KGwHfLlo{5uL3xsm zZmM!}Zp&VB&s=8|B3T4sKkA7y&`=?eW(Y8N=a)h@ffCDeYK*n2I^2`u5IZ0FA?OYi zJRlgafe=FUCf32piNUKzFRPcU8qIA26R3HPqxQa_WS2Amgy4p#5gUm>F32XQ<~Wh0 zxM$^?*Hve~U2_-@Ce^bV56A*yhgZQhi=I4?C+^@9`GC4-iHM2Xpd|MRO%Bv0*UiNC zQ6-^tgDAnJl!ZECRnm>P;jL{JfOdA@K+WLy(kx>K%tU!DN~lJ7COHbSJ#{Ulf@&yA zj1VK6kp)&2q|Rs?@e4;H;N>Z95R<d7vpDKuYZrM4A@s$46$wSYL@Z(S+UP_vqB=N$ zE&`J7f;AUlTLa~eBD6uYgX!a1zmv=<q!(yXn7km589@k>VQYt`5)=uU2lTD>s*Y(R zPER=Nz#N>kdS>7#uZDbnk|{RX%3P8DePb~>64RFtT?d#)qTMI~Xy_@(hBunXkUJ5N z0?QC*27VT5xpYe~Gl+pqcL)aNJJL2X16X~_6wwA=q9HUc#{|SR9LH(-HxX+ggsN+7 zj{pDxglR)VP)S2WAaHVTW@&6?004NLeUUv#!$2IxU(-s9R2=Le;*g;_Sr8R*)G8FA zLZ}s5buhW~3z{?}DK3tJYr(;f#j1mgv#t)Vf*|+-;^^e0=prTlFDbN$@!+^0@9sVB z-T^|h$}}r94rsb<W>QHpmtPgbuLwav1PR1tW*Kvml!ov4x<`PocL|>5f9}uGrxq** z1VrLlW|%hd2J!T!ZE)Tvj<K?=5}y-~nRG$oN3JU#zi}?PEbz>jna#`-$B4yJ7b{)N z%BDs<MI2W(o$`g8$13M7&RVt3+V|uyj285jWv<g4Mhc5qf&>u?>ZqU!oBFCiC&faB z_LDyTA=fXFOCeVUj2sK7L4)l2!T;cQw^ng-!b^%Kfu0w~`4|DhyFjbqIN!&P(>eiy z&%l-5@z<Kb%qQuMjut-x`nQ3L>yD=E0hc?#;FBSnvMU8?3dJJuen#Jv2L^6|-Zihc z_C8J@fGl;Dz5xynfzc9Wulu|^(%sv?XWIS!09-b5o@#co82|tP3{Xr|MF0Q*{{R3z z{{a90{|=bWFaQ7m32;bRa{vGi!~g&e!~vBn4jTXf00(qQO+^Rh1Of;y2w0Eo(f|Mh zlSxEDR7l6ImBEUnIuwSFRV_5q;2ntjVOGJ_z-$F=n7dCwd>`r6Fi#O`6?_Vzw*&W8 z0<{fz|38V<1+(plNjwqp|8o8l5wzD=#X+h`KCQjI=`@~}&->>4`;f--_E}$?XLPlE z`B|s2nmRM%>ZZzeQ#aLuUJN3&nWx##Qd?uVV%2PoGOC_tsf<;O;VoedGuz0wUk$$5 z06_0nT>WzL{n9UupcjWo<JM*Mt2Ev@u6VtAr=4z=RZh-p#_*OfhM8~W$DbD8Yyn^l zJFam%$8j6CR?tg8qz(JF$6eYO0$1X&$1sGU-F7*LI538{gfYxw;ZU0cfK?EImO2VD z)ntrfGwMkRh7`>K!w!&+D8N{SnL<J}?f~F5M4+XPg4}6wPO~}vtOY}g=73`dNJkW4 zyv9r;q1tc&hyz5RrH+Eac?)4+3&YDG7*aF`0y{uDq5u;I%!Zs$wb(8vLp99+fWJ4h zl>z{B>VzmYsma&^05~oRPtbb7Q)M!^+1ALL`l%7$i>xaxumS-7-mP8=0L-ZqqV%E{ z=L-PfxN1B>>lIHYm%**RLEbdat;A7e-)Vsz0Pyz#dsqNqPMr`nY{M2}0RSAg0Z-6+ z!_zrraC>Z#H|@(`04^54Kh;wbKEV<&1$NdD0MpzE6J4;^N@jZjfV|#G25^BXV4&#{ zz}4gTmu5-A7gz$Oz|J}XV46E&q6_v~%j&NHkk@<30Io0v475A~xJCT_)^17o21~#c z*x5h;O!FX2birN^vd0?$<n>W9fE!E!1Lax*uNx^v&{)c&m1l^}Mlg>VASMA|>Z2ym z1d8jn0N|^}Oa@+eQi`DSlt(MC5SxwQ9y35(0>IQqO`r)h*L?xNSDjlNydI<!!4N5r zR^A~t8zDSqfP@5qsgIgK6AWCB1pr?SVG9Mom!Ee4s!Kv@?s?HqkCz(ol-(}WEf$7P zWgy-E{*wV15>Wl}?bjWE?vs#)dtUU@<D~{XXSWM=i-+M;8A$i<uNi<N0X=R%{@ei! zV-nJG&x?L~ywre~>~^7Ui7<RB1L^+ndj=3l;HUwwuLpq6q{=^4to+k#@>y^{1#F#w zRFFPPIR#8t?hgPw1>W8c0KH3<e>t)8FRROE!Tl8QO#*U)^i|3!;QDfZ0N^R`{(b-$ zL#q7SnU#OrLp}@cr$B5IkTaz3Qci&|miq$$Pl5jd@d|0FDrV*a00000NkvXXu0mjf D!48YU literal 0 HcmV?d00001 From c44557665cdf529c9d31901a0082f1d71d89b95f Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 11:48:05 +0300 Subject: [PATCH 1155/2710] Change blue to white --- libsrc/atari7800/conio.s | 4 +--- libsrc/atari7800/font160.png | Bin 2990 -> 2978 bytes 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index 3f19ae02e..4955f2406 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -222,9 +222,7 @@ vblankoff: sta P0C1 lda #$c8 ; Green sta P0C2 - lda #$78 ; Blue + lda #$0f ; White sta P0C3 - lda #$0f ; Cursor gray - sta P1C1 rts diff --git a/libsrc/atari7800/font160.png b/libsrc/atari7800/font160.png index 7a0fa1eba62bd3a1fb784b512db586aed1abe1b5..6ad5fdeaf5deb684c3ddf6efff10e7941d3bc7d5 100644 GIT binary patch delta 2955 zcmV;63v~3Z7or!C7=Ho-0000QZ)I)(00rxMR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3 z004N}tyWo*D=7^8=M-}UBq4;3!y-k@4d(chl->RMEwe?8v8ggefyhiHl=$QKEWhDH zom**YqkHcapXSYZ;%3y>$Df*Nd+Lu*d$)eqUOr!9GzqTq`hRQlb)|`R{r18~cUs@K zm+^kW<2}&F%<lo^&dj(uUxP$DzuKw22l9B`bRYIL)Wxsses_FAdH>dX&?ln$`d_{_ zGy_UUF_AEbkkqFhuL$J+SSGIRsTutUW#T`V=hEMi0FdvN_YL5$0R0F)y}<qf{mQ=v zpXa-W{D5WuV1KRu`T^;$!G9qBGO>I{#NR()`atYwkTcK7jMwUB>p-->74?8kAH$&I z0_5_%)=>;U#l1bnQAVA0gYr{%T_~HJ7_4NWMu#RP#dF=X5n|(D!<BinJZ(daowr<` z+AWl9;&Nnw$<0wjE_t7^&@-<;^KBZK`4GA?VK92=|9^{8{_f#_DJ64Xi0A>7AFL1; z^Mm_^QErW1AcXSGn?3-4lsEnLi?AS7FsKjA0}GsWy@psy-?SwU&w_r6>)Q*8o%aBM z2y-iff$SUAPNLMQ8nY1r#{q&SB4=s5zyPW8L6F=;Iv3-?cW%66^z>!r&bJxf1R_+r z7`SnnAb+bhg?_9JXlSZvQ`N4fqp0ib(p%TwyY*{w)5Myobu%00HiwKhbo60k3?I|k z1s<s0-F&$FoLnX*niy-M|3u5;C95r6ec2kz*W8fLZd-TXw#W884<9+OiPMjras14n z5^#!Wq0z%)gvU&1EhSrO_Ou-7IX_u@v-(r{4}YxDn>Buzy8Y~vHMAD9k0I#ViC)gY z7&ijrb{T-6`EphVwZ@mZ%UN|sQYa%xz1);TmoZS-f>@J2x%<Z4zv8Xv_*cB~KQUJ> zb^ix*1=Rh_+b>u<cc0r2W3Mc{m{vjdCHdkkzS>w*duVHfO)KFvBA98x{Q87zU50kQ z;D5p#0SRf?X}Juuor*~|_Z-Et!9Ht^6FLC+uK1qapr%NgBY@oHaC8RZAQBNvUtnX* zFk4Gb*Q~8rXkuRU>qtMxcZa1;b;6=h0T42zXsnGa24%k1SrOQ}ZU7)s3@Bk2F-$!t zY?0^Ovj+0rsvHxnq8*pE?5<)%D7ytN7=H>prJs$St4Aljr;!Z~qb0{dU$6#RX@m8g za16vnJsg2{Wj>BI(C!jy^X$Zu0r@%y!4&JBqGNXq#6SeH@xgWguSEk83`(#Bw^&E+ zU5^`18Z}Euq0{9cO9GA65R4xWLn7;OEIF_yr<Qf^QwKu#Y8aTXWPp0fS$^?Oc7F)P zGfLk%@TTMpAY{{aN<(7Fp0Vpb1~`#IHn5JnNA9Y9K(Fab=<EYo+VMFGbj_9ojjZVq z(D4@C>8v(a@D4yI$ZKb)zUsmmAaInL$P%#1BLgBy?0iLP++B{F-7T!CSi(CHYm;08 zWe2iyLGN9WEAV}VY7MBL(Iv6Pa(`FZIZMK0pv~Dl8d4RTG(_##oAERk4B<*=0yl_l zVd)hVFPxs-a8v@;gcuHNzodY$t-5_6pKQxP?hWvH&`JR<;5DddPe||V>sfMYpiZ2~ zE~%$&&xAvco!C{Pk8H*(13wT8PBP#gi)@^k9)i<EARP#P#)t%)ltA`r`+v#ZLb{}% zTnm}2z)n>J5jVct!L7UGxZv4g0<iGJ2<~mgp*`DSc86`X0yJ(qVoovuC`d`!z~6jA zKp;@FUBd&BP^$D`9iT8e1bTA_idfrwD`Kbzyc1NKE`{p_QvLY4gW|x4VPpoTMxJ0L zy^jNF8dABVFF}toD81CHPk(F^i(!h`s}~%8D~>#C0d4dFg&QGI%*PuN`|yGh?={!B zs$Nj=G%vkDo##wCfz;g-N35<@9J0nXkS#7Vqw)#(Aix7-2wxTwA*yu13N^KJU~G)Q z)I{SNi^Fv=7h+n#3VEfA&VXMCc4oLDUd9U-oC%f$HTFF?#VknZJbw^t`4dm!AePk% zUV#7r0fcEoLr_UWLm+T+Z)Rz1WdHzpoPCi!NW(xJ#b48kMJf(<5OK&*#leE8h@)1a z2o*xD(5i#UrC-pbAxUv@6kH1qek@iUT%2`va1{i>4-iKuCq)-2@qbC7MT`f>{djlp zarX`o8WpBlp>aUdZGSVJOo-Xss@VOC5CnuVim1#iV@{G%@Eu?G2=MhT&a?c_{W*Ho zyv2ZkNIc67(<a^^p5C+#&ilksR+3fXbK)_RE=c^yb;aX1&PA66o*6YW>3QNPu~_V2 zrGr_?)QG2uW2&Z8zL51;<-EmNtJGNQp8SQ8yuPx`b(%v+Vt)}!kRU=q4P{hdBTlPM ziiI@oCw%;au3sXTLas6xITlcb2HEw4|H1EWt-|DlmlR0=T`!LFF${F?0?oSPd>=bb z^8^S!16O+6Uu^(0pQP8@TI>ku+XgPK+nTZmT<!n^PljyDt`wvx6bium8GTa@=)VPe z*1X<Y`#607GDOr>>IOJC1V)OKz3%hwaA$A-o@w>>11IZpi3fkCs{jB13{Xr|MF0Q* z{{R3z{{a90{|=bWFaQ7m0b)x>L;#2d9Y~Xl2O)n5DlYEstSbNj1C>ccK~zY`tyMv4 z<S-EInTa8ofHxrDmz;!83%LsHK=!Ty`9CJ7u&)qv5`Kjt*T8;7Fjs-MS}i*RdyNJU z?Y1#gbyYPHRrK;g`5cDUR@4sdaImAThS73e5o$XQqZ?giEqVv%)JRrYCGW_U4|>*) zuBLytH~Hpq>U>Sz)J;b}`+Ax^*EON`^E8J!)ZU|a3_;K2wb$~FT=}5q{Tv$l_>ga& zmOeJrFa2_gYiyP^a@`Q>xGrm2QxhY4r<BY}(L^Kf$dwOzF|H|pt{om<Hv+6`iE#iZ zDH2TWp!isIhacco1nf$Y0}be+!`JU0Uj%<x)lE<D8v$N-#5e$yGzq3|(tNzW#}Dvo z0(Pw_fChBY;p@-OF9N*om*>xofM|MR8~{p&1XI5lKG8hj2Y3wuyD^kN1G?z&_4n5o z0nro!D!UWl7#<II9MH67tO|4}H7N870ag(d!T2))4m#RiwRW(WvEK;@43CF9PiTMo zGFA;bw4OA2g#fP!ieUVifIu~EuX;au%sB1@B!<VsT^BTC8LI&u#w-TCLI5yA5sW_* zkf@>U)fgA~UPZ1Y8b>DJ3<9d58Xy2r0879W&;aW}u^lYi0R%u5AmHqvnEbpg1e{?C zSY)UvbVT#a1YAHsJ=GHg0199Um;!$qU_EHIgJ(N{0H^{4Tmlr6pLd0T3rqovObw-; zXkD3rD+p+oW`O`e0W1MiKm)7?!*+;l2M_>NfPia)V)FC85O9SlV3FlN0!CFq`T*}3 z4}(H|s{kimHpE%s4punh?qG!gqy#dfy1OM{)-|LL@PY9#DAczK2-0OkTr_{~V1*0r zj$Q~rN+2`p`&$B5(?I&fE@mT8CgN5BNxE!^tHB+taK+sz3IRw7WJdEKilU0A3L*}J zQvyWv%r$Ib_Y5G(0O{Bq0E##xq}vXN1yo>#YMv@)c$|V3AfjikVGF-!07(W&$L9dh z#2F#oZbB@e0xQ(;R58QTl8k=<5j}GaTf{vBNHRb=F$aJl&IsxD3t|D4F+~B7uNwg^ z<~`<|m;A>+fbCm=DrfU%z!q?23(Y!5aE_fTOAJiTuObeQ*?b6)Zv{{Xgc0jh(~ zn*m!Olr2C<AF@5z9Na^NE%5xg5zu4aYtDJefBXa3z6GdBF>eNJfmA!T0G(pW_F!{x z4^=7(czIDJ1nJw(+nX*S_<i5}_%I~|zw3+R_zzGMX{j7yry&3U002ovPDHLkV1g%6 BTyX#Z delta 2968 zcmV;J3upAA7p@nO7=Hu<0001$FObdv00pvoR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3 z004N}tyfu+EGG>7=M+8yT0rPHAW(#F;Nv@~?wL1l@fP8(sii3zq|8*pl=H{$S$@NZ zS|3H5jqbfyeALx>;$hU+$Db=zeXbuLeYbwsUOs=sXcFAz^?%jo>rNBx?b{DNy3_i; zy^Qx89`AuZW_}MScV@=J{u(6O`PEMP9>~w@q5H6}p)P*i<K6KI<$bRApie~g^}T#; zPy<T4VIpBZLQ<dWcts%hWSO|@b7l0aVt7`uf?Jc1lmN(g>3swED?mSjPcN{4K)>>@ z!RPtzAwOW*KYv*3zkWgO*Wf=8f0<Z5BjWF09IyIQI`1=ckIeJRZfXaj{jI16Z2A}m z9Ty;%=Vu*<;cR%e=WraO&KjV6*Qg6ekQ0NIETpt)Qqp<uL4gpJ4;${x!Sb{XF?J5H zMBoSqC7ZZx8DKK_6cIG@XDsy0>(6{a12b<zS0)Tb4}blCag@J%`CpEb85bgY0ObcO z#Kl(x2;(w$ujmB|DBrxb2jGw6O@I9&tSePTw+r(?g0rsI5UbHQZOOy4pkKrN?FGg5 zdjLR$xf_BZ0Ry#@H0o51*@%GS06`OxvnVexK&|mckgOt|i}Bz)H-2OE^yS8#Z!^3J zL^SEBr+)#4Cdg84(2wbWhGvtdt+n2)jncf$E?s-;y<5K~H%&~fSvRv`Zga@c(MBIO z#_%znUEqPuyPFSppOeePL=$68^q**1ykzNWt1nw)`I-Uwghq=V79%|7<}DjGvHP|? zw(ohU95}_%(@sBj#_=-~T1!dImOU*;dd^SQ-hZtAbo>X_=*=2GOx=F=$r@UV*~buc z?WA4Kz!)omak~sa(0n<ogH-u4cR8!hD2m1ivR!V<rpp*8)I;2oKDqnG+`r<jwDGTa z<9}kVT<ZQ0<_f6$nYUlCw(mL@4`Z(?yqH!&^(Fb@EWUKC+4^a!gheaiG$NR3!TkD! zYkysaqF-=fj(~*Pv8}lbv+asWf_si)sjyF2>^^M(@TmCPp-|IFn&SYu%i-t@#6ct? zmcGEon8$1_*}Y}eVy7kMMZb>nbNt1zY_mBbDO>;u8A|l5Kox^BUu&;(uyox3K%^K@ z!YX2zdQR9P&l$5G)Vo#LCdfj!i!Qra1b>7QdT_%~;3<6vdaiytHP)g54v!|EjlN(F zv{HceoNx@pMg2Ge?TvXma-isPn#~=FlmYqL8^ILop3+8i48%YLvhl&T0k0he5DZF? zg4<bJ?o&TEoHSBPNTJi^AWH&`r3l8iA44Ix?MV3`CnwDsvFkwSUJU~iQU<7(oPXsP z?_`HiJWuJ71HY7<2MF1;NKq7)#5_@B8{k9<*+3q5jf{%z8T6XIgm!Gm(zef0plh}y zXk<-?fVS)DPJ8KGhvNW3L0vmT^|dYR0S>lO6IB9MdE|je5-VSkdhRO6YIh0KCYJCH z#Hx}@pzMRHT+n-Os1^8rgK7<^?|;!HvBYw35;;r4W1!8ceiWsOMH-@Ztj&0v3x;r| zGl3h#wvc)S#S6P9H*A%FH6ex#+b<~~ELx|&)Bs7+)n&@$jco!fV%@qqiIU0zN4gbq z!LE?)3QQJQr%@>d>&(u>D?uiBs7SNwhJkc!<L;gf8Zx*MNJRhEa;(!FaDSZ&+Zqn( zYTW97I9zkeLOgl8Ewp0~0Xy;&F|6NYIv@dHqlZKKC{&3JA2aJWdnnHf*8^U*!Obw_ zo|r&E)`<?rb<v(%dL02x!$%Lp)6_S%FyXRR%tmXiQyoPM>$$0`?5Mssv<!fV=YpN| z4KIjW%7O~Uxd9q16xF?9CV$CD1eMy`fz|qv2sm}d8aFE2cf0Eoo)oUJNU#Dn=yX4( z+qSk4#ZD{muL2fxjVXz3%|T`N8&&$H8bqzcj_3iuGD;Kf2;$10Fp~n2p#b7E0004n zX+uL$Nkc;*aB^>EX>4Tx0C=2zkvmAkP!xv$KBOWQhjtKg$WR@`ihrnxqgJ5^6+*4h zs)NZ*U(lo>NpW!$Tni397OM^}&bm6d3WDGR#L>w~(M3u;Hz~A;@xbMN{P+An_nr&* z8x^LS!Er#<EF+yv2-)1K5PC%rK148v5s8`loG7N?Szq_mOLZ6LS>AnrR<Dvb8Q>F$ zXPItT#2duZo0iUbpMN;YN|Hi+PCRPR1&JTIF1!53x#+N;XGV=odY(8+EEGFf?qF6j zRN^V(n4)Tw@6WodaNgpqR%)zuPyWJiURzn_I;}w@v4|yz5Fn$5GAghTr(Gk(M4HYM z9{vHxFOo|pR~d{P3#dYc<oLn=;P-6J!sLXT6ixtLFSh+L1b>8ffo9#dzmILZc>)BU zfh(=;uQq_0PtxmcEp`O-Z37qAZB5<-E_Z<bCtWfmM+(sL7Ye}p8GTa@h};4_Ywp}y z=Qw=;GBm5y4RCM>3>PVT-Q(TeopbxQr!~JHhO2U~(P<lZ0000FP)t-s00030002Gz z0DF7?p`oFFw*s^$lg$Sqe*`Z%8Biq6000ByNkl<ZSi{X%?U5@X3^ULGbihynGqiC1 z*YvPtvt}=u_xC~wJD86Q5|UR$KTV{jnk0TwmDCzysa4edBMp5O?djJp^lKck+V~(^ zY;J9P6E3-1-5{(J+oy0Go^`z;(sR$(|IA(T*n$1cqoeL08R+Y1e^0-5p<m;O^}z?x zVsrc0n{dh9>IPw**gl2h@T}`Cky&QB{%4s|)(-4%Src{t$U@&ld-}Bt{TfGXE<T7B zn>*LugiG#LHwf#*_9+~PXI<}Ltw5$)-vrRZPXLUCfFdLpOgg`M0koBs;9(M1tC(9! z29D(zZ);1R39wrLf0=uK6F?6?127f>ijZ6|>HO{m&~{dWhe=$mV{RuIIF@6)?IV9C zz-|F#ne$BmJ^TW|SO_RWa>1nYrx!pwSqUB{akYuLlVspnj`4P`@|ghGH4s3-{Y?P9 zk|q%bNAs?W0uG=U$V!N6vmyZ+$peLO_yYkdw|cJ%V(iLWe>~(j0rW}|JioWYyDkbi zfMOskA-c_q1Q;X_6vE*T1nAuAy();YD{t|V-vrPrN$~vMF7LW1-~ft&tb~|0D-wV( zQXw4vK!C}u-m8Kb68|4mJrSm6Oi%(OLmLFC1XD-?S_Ex^D&Xp%s=-(jw+15sl)?z0 zmH>r$=BM@|e?X#5B-;;%j=K(U#vwp9v_X(gFoh(bMbIXw0<I3K8jKBbYcK*pDU1MW z2~e14ejYCZWZFcw{cz~G>i}mR0u)0V1epX=NCH{}ZGtM`>Y%E@*b=t}BLI}b2%we# zg?Z+e^&&u_O%&Vj{{(1|0i3<K4<9>_K!|S&&}tm(fA*ljGG>;L7?ad)0zhu63sC(^ zfB_l6*^B$|u>%Q&_@)4($FXh?3M^x037Ij;<0b&)rn><3uLM|-0Xuv5;dO5HLx^t* zux1?V_MpHrW|mMGld^6CKyIcB&}~t2ZmKChE*}YSa)2PthXAySPdR|Z93YNyD!3(h z4sneIfA)>EYGPCoT7bKN8NK>+1SE>{Apou7Qw|_82Z&>w3T_FWLtJBl{UEJ|7*&K8 z;3{iIuRa|CiQ;?+K&$wa14zsP;uxobTY~2h*H~b`NUJ4Am7oC0O*;?(@@&;J`I!0h zS^T!X-U2|XdXmIOLLqj&1qk0RqIEPUf)T~mf5ZX1X$Jy8o~?Q&A2WYGi{IAQTL4Ja zPm(xDD8#O}0O8w3w2t9KFrwI+IAAyJKmf?IRnO#O=FeyG+xmJ70IB9l5*G=D*!315 ze7lI&v787-6kGEW06qUy?<DXqe)Rlvzmvef_|fyfY_`ll_aA@u=O0Yz+O;0@(R=^^ O3IG5}MNUMnLSTX=s(Qcx From 19dab6bbabbc85f42c9385b59806fbcfd7c2a0b8 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 12:09:15 +0300 Subject: [PATCH 1156/2710] Change blue to white --- libsrc/atari7800/font160.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s index 9dbeda92c..62db40fdd 100644 --- a/libsrc/atari7800/font160.s +++ b/libsrc/atari7800/font160.s @@ -32,7 +32,7 @@ _font160: .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 - .byte $0, $0, $0, $0, $0, $0, $15, $15 + .byte $0, $0, $0, $0, $0, $0, $55, $55 .byte $0, $0, $5, $0, $11, $44, $5, $0 .byte $0, $0, $5, $0, $1, $40, $15, $50 .byte $55, $50, $55, $50, $15, $40, $1, $54 From 2e33185dcb66fc89ba81451a0b5e0a02dea49b83 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 13:01:05 +0300 Subject: [PATCH 1157/2710] Remove clrscr from init --- libsrc/atari7800/conio.s | 2 -- 1 file changed, 2 deletions(-) diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index 4955f2406..2b9062342 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -10,7 +10,6 @@ .include "atari7800.inc" .import _font160 .import _get_tv - .import _clrscr .export _screen .export _zones .export _dll @@ -205,7 +204,6 @@ pal: lda #<PALscanlines sta DPPL lda #>PALscanlines sta DPPH - jsr _clrscr vblankon: lda MSTAT bmi vblankon From 426e93b4bfcfffff4cffcfbb0c14d80668b8130b Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Sat, 2 Apr 2022 12:44:27 +0200 Subject: [PATCH 1158/2710] Fix Gamate CONIO: non-solid characters bug --- libsrc/gamate/cputc.s | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/libsrc/gamate/cputc.s b/libsrc/gamate/cputc.s index 84742cb9d..435bebfad 100644 --- a/libsrc/gamate/cputc.s +++ b/libsrc/gamate/cputc.s @@ -89,28 +89,32 @@ putchar: adc #>(fontdata-$f8) sta ptr3+1 - lda CHARCOLOR - and #1 - beq @skip_plane1 - lda #LCD_XPOS_PLANE1 clc adc CURS_X sta LCD_X - ldy #$f8 + lda CHARCOLOR + and #1 + beq @delete1 + + ldy #$F8 @copylp1: lda (ptr3),y eor RVS sta LCD_DATA iny bne @copylp1 + + beq @skip_delete1 -@skip_plane1: +@delete1: + lda #$00 + sta LCD_DATA + iny + bne @delete1 - lda CHARCOLOR - and #2 - beq @skip_plane2 +@skip_delete1: lda #LCD_XPOS_PLANE2 clc @@ -120,16 +124,29 @@ putchar: ldx CURS_Y lda _plotlo,x sta LCD_Y + + lda CHARCOLOR + and #2 + beq @delete2 + + ldy #$F8 - ldy #$f8 @copylp2: lda (ptr3),y eor RVS sta LCD_DATA iny bne @copylp2 + + beq @skip_delete2 + +@delete2: + lda #$00 + sta LCD_DATA + iny + bne @delete2 -@skip_plane2: +@skip_delete2: pla tax ldy CURS_X From 5040a4b2a10b9c8c3dd3da9d7ac9dce7930e0faa Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 21:28:34 +0300 Subject: [PATCH 1159/2710] Use question mark instead of exclamation mark --- libsrc/atari7800/font160.data | Bin 8192 -> 8192 bytes libsrc/atari7800/font160.png | Bin 2978 -> 2983 bytes libsrc/atari7800/font160.s | 24 ++++++++++++------------ libsrc/atari7800/font160flipped.png | Bin 2957 -> 2979 bytes 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/libsrc/atari7800/font160.data b/libsrc/atari7800/font160.data index 79d2d83c3591585b230651e7c8142a130755a331..08ac1dbe430a08ec7275fe59b0b7b666bff489c7 100644 GIT binary patch delta 131 zcmZp0XmHrTCBV$U$hetTz?YGkfr)8ztRRTN%)EK6Pz>W_0~y}UVj|9rtPBhw$v9DO zFcT=fPArO%jggT7q?u2`i;<0q38F+2$Yy3{02#4PDw>gn5ePQ(%J?v{Fag2lSXm&8 M83;D7l?!GB0Lu3jQ~&?~ delta 133 zcmZp0XmHrTB`}#sgmbg7fIA~I6BEPcSV3P#W@cuF&1;2X7+D#CfMGMAh&LlE6A&<L zjuQnkf$~5F>%^iM*%+WIB)ouZs1ivK8>&Vsnvn&lhG8?Wj1Q0nwm}xe0$U*$%m@JA CP!%Qs diff --git a/libsrc/atari7800/font160.png b/libsrc/atari7800/font160.png index 6ad5fdeaf5deb684c3ddf6efff10e7941d3bc7d5..b7d36b3e64cecce132f337e7bfe5b206cb1941bb 100644 GIT binary patch delta 2845 zcmV+&3*z*m7pE7HBmwS`B_MyY>?RETXBAljk`O}60fDNrgDgJ>ci;Q&8!}bJuD0D6 zgE)gkIe+|~<u@GExtFFky7yjjG;hum52L;gf38&9bNx8lyY;*F^7#>?NpP3fUz@Kx zO|<K`4?eon`o6u4_ZuGXfj(w_4=8tL#>4&^B-;7aPVGIApVve8VPAhkUHrPoyW<ne z`?ubMJ`vT||MIn=8Bp4aiG=wGNqw&46@lCz%f!7sS4KY)$1_VWxV5J%y#V=cdEWs3 z3eb<>(+lh$(69V!@Oi#_$PZZd57zpxUy%M9{0HJM6U%2r{QV1VABg=7a^@bH=e4@o zIuPw|MLl5C$1v!)0J(oWpLLvupW@k`({YYEYk=}yqb{65P7GGEP@_$glFoAv3WV7B zu;I=eEKl1IW9N{|Q@bZ68yMR%z*+DqB53B%Sm>G8pZS6YX5NIZOc;zF`v2lAfA{jg zoFy|ZMDzg44_1hauLuyvW$s?l3xrU<dD92rkMm7`{UR(#wO)VLF3bZ9oOQj1SW4ft zB@fSnev11$7Zls?0RR!^Rs=%=25Ki!>Qs%{h=Ah&K@*X)G+tnURCyyvZX%tF@!&f* zzA<|GvU2C!jNAkwRJs_rfu}%LYYP2X8_>{H(Wa_hO-E7J*`>Fxy?5(3$xRb$rq<1D znA;pO+R)L5jWK_GOlKG5K=tnC!`<iPGBMG_SQGsxS{5%^ZRzUE)>yt~Kt9nzqld)^ zkGXlvMw-}t+aBBZJX8)c#c4-RKX%6PGZR`%$(EWuEk}CJPuAY7{&fBa*67U|KTO?z z_Q@Jri`mBzbkm7m&cGNq0^@cWfS~zuRtL4lm$}PXb%qTolo6y}Zpx<17$|Iqlga`f zf7`dt#lzUkg%{H*a9@%y&f=?$HMJjYjZm}_Y?xr6S?5|Ej@}LV2}Jq`a9}Vw;^q}O z@ogSUWV23Xw4F7N(@jaSst0O{3|hmF<UTN5%m{8nP~-aPToY^RyGv8jI0+<yMmcq4 ztZc047bySSfMVnUNXU+fTthB{6K37me<n-@jAFKI$IX-3M(-yV1R01W;bgF{>W!iT zG1UIku>vd~ES|dppG?CyZWss|H)V~}vTwvYTLG1h1^dyx(xKo6^UF9e3UUdeYMt>8 z;6N?Qj3-vwu2xqvF9Vr=*Id%nbMI+^RnuA)Q@qo`M#uAtGvO302g^SS`r5^Ef3h7c zO|ddiC^Rg~AOqCBZ-fdtnjeG2I;fY`+i5Cs>jTq8k2Z$Ax^TNgyjH(r+Lm$`zvRFj zpmITremo`i^=9%~6^07-s$lU_@o0y1GWa?@!mbH0bm<Qd!(sBwd1ednsp7L)-#l|b z<dDw}q*Q3N5~MZPnAi+3YN!B-e_Si9B(eddlOPIOYF8XkR`A0U1Qwt)9S+ZF4*n2C z_1-ES3+V*yz&!4)q?{Ef%30w<bBeuDh7Dh|D?N+^mqU5Hx}MP{ECg6lbgv&`9Ek0z zUP`Y+B0(3aA$9Zva2M>i%rViOvQ5aPjSWbUF!sha06EMsIZvbsOm+Jde*ly!4C(|% zy|R-HQ)HqY#Rj~rYda1-($}#8>&b#}TLka{{?QJ;FZ)(c7*TudWe10AmvjZ{P)J=D zWjuC}`nU_8uoc=?!j8_l8nzb#WzVj@p<L*H?6aU8fLL>mNN|AUvJiq#wM{5I2V_F4 z8-pONdOC8<h8vLl<s_@ue|^*$ITqn=B&)6rhth%}@1S!KIgrKF6Q*W^<wPORg9<Pe zKDs3v4m}N6VXMtR?qCz8z~ol$kql=Ov;i6oA%xAFA23q$35JCaGUKCc$QYEW3vvT8 zHWGwO^0)xBdJG%<=yyMLb&I-Wvj-?gEq8=}t{Je4a%_(yV~c6VI<TV}$T^tk^sMLB z%7&zdL;wQ9U~0sR0&#W@5Hy}t;gINNFP6k|CN`N!;C})v6eG?X)cpDY00D)Q90nbK zN~KgB>>whTp*mR*6%kyt3Pq?;YK2xEOfLO`CJjl7i=*ILaPVWX>fqw6tAnc`2!4P# zIyou2NQwVT3N2zhIPS;0dyl(!fY7Kg)eMXQs%9DKL|n|~R>j~e0uT_w5N0H1>T{`7 z5}xDh9zMR_#dwzYxj#pbk~bOP6NzVknQmCb8^lwamd<&fIKoPjLVQj<YS0CVAGt2O z{KmQHu)s4TMkYN^93d8q9V~Y+D;X;BBym(xHOd#VE-Re3IIEQ!Yu%H-Fr3#`mbp%I z5D6?|2`Pw>Q9~IOScuW8kzyiE`*9Edfa6b*OD0ztj2sK7LWSh`!T;cQw`O5~V%$v% z$APXF+x{2^g1bPoZrk6-w%t4d{LjFZ*7jE$!1O2S^|ls00(!TBi|e)~?*W%PK>w32 z8ImLUX$pk`@P0<$lmq&1fzX=UTWcSu4?u>xO5OkmhrmdYve!M{-QC&Szh_$g{Q!4? za;d#YsyYAw01Qw}R7C&)0RI4!wFfzW5E?Mql2vm600WjuL_t(Y$E}sYirY#MMay;s zK?Ib5ynkfXX!Ri525BH~-v;S_#H>QTqVY=TD+IF*ykBYXR-l~flI{6`X(LlzZVT?M zdvA-#xqEq$ybj$t6ztF4Aq=7DhM;vJ)M4m`e&~x3=pFjL9wgMEwlntRMK6SZp>M|5 zS9|AiY+@<R*o?<G$8wyb)}>I#d7P(tDr2N~oF+F*bkW%vd-9?e<2<#?+nc@fw6v*` zc4?PW+ETS_N$X0e)3$8uwpJ<8JFTnVB>Cj+j6HeLOKDs4>q7YU^G-mh&!RX0DzzA< zb64vM^(Q{SEBFh0>7jux9ew_P`}!mx)G>blbtfRYMid7?#ff2RMyD&f&wPMa3fP^K z2^#3q(dYL+PXeM#>BpZt0m-+bH~=bM3{$&!UCDpp1H4MW?!BzgK$ng_|Nr|WAbEQq za32Kp3QvbSbU}6o6rcdPtLg0ogj!I9;?D&1Qpo*i2pj|MgMdll>2T+Nk!IY->Y&59 z(b3xph)z(1;?D$3Qp){kj2r{*gMd}x>2SA&X4=Q<p~L&d)7uFEBZ^S`nSfO)xgSkw zNjvQREHVsQT_B+7iVgul0hYiNXh8K)s~v*c0Rm731YCL)lYc+&1Y9r$7U_=T)QHTp z5^#lpax6y#00meAQ=kEV)q_(zM70A1pb7}MPADe--s}WiF$ESGPs`ehY?~5rgMezO z76bqVSOQa^0o8+7J0!IO1fU8CxUDEA|K9Ed+%N?eSuz2IJP8=;0_g+3S3C-e`n>{r z>#89xH9M?uVRr~d04YIc6rW0Y5-__G=>vXJJPL~Xy#gldsv)j_jvZFGvO7j2fRrFJ z%FmTN3D|sv^hI5)MvzRzdj+i4RYTl7JFIYHcS=S8DM4mbUrbR_=u{yBEz}0Y^sF_u z2#*X9%K+<y900XwMp*aU5ernXBBf518KMPeKuphCV~hC60I>|PPRs$|L^Hy=%}6Xz z!HQHmRc445ya6$PJ!_3E(jx=JGQc`12Y?sN2<x^Bu|Vbhu7Gbp?*yEg_mFem@}F;j zJ#GOh`jBr1Zh?Nk1>_L=Y!5Yu_Ne+&zW=%t&@k^g=e*@V-vE2u0#Z&f-wfOW(|!xc zF;3YYY7XsDO_lukb0?r>-doOj%YVKB_P7P4T2sCmxCPcc{T7f@TC+XW9NME=cLlt> v)O#AphppFFw};@zz4PtO?;-e6Zybid+rn;@+ljIp00000NkvXXu0mjfM^;L4 delta 2841 zcmV+!3+D8v7or!CBmwJ@B_My2D=7^8=M-}UBq4;3!y-k@4d(chl->RMEwe?8v8gge zfyhiHl=$QKEWhDHom**YqkHcapXSYZ;%3y>$Df*Nd+Lu*d$)eqUOr!9GzqTq`fKxb zrHOX^_QFSZTHm*q@qWVNJ<!L@?*Zk`%(yvUgG4*O+Nr$<@_5~JANGGW)Wxsses_FA zdH>dX&?ln$`d_{_Gy_UUF_AEbkkqFhuL$J+SSGIRsTutUW#T`V=hEMi0FdvN_YL5$ z0R0F)y}<qf{mQ=vpXa-W{D5WuV6Ff90qL*7e<1!cv3y3v-#=jbK<sCbGtbD3*Xm~L zK(xOV^?*$u!=U2=<nn*K)=>;U#l1bnQAVA0gYr{%T_~HJ7_4NWMu#RP#dF=X5n|(D z!<BinJZ(daowr<`+AWl9;&Nnw$<0wjE_t7^&@-<;^KBZK`4GA?VK92=|BF)o?%{ta zC39bh=mC@;tPmITgZqV1ZjD|bg!0XsJ^+7|H~saCupm`1s1JY40}GsWy@psy-?SwU z&w_r6>)Q*8o%aBM2y-iff$SUAPNLMQ8nY1r#{q&SB4=s5zyPW8L6F=;Iv3-?cW%66 z^z>!r&bJxf1R_+r7`SnnAgeWneyj~>XsT#a)vl(asO#*~Ti4#Z^=op|#G0vfGaKeM zhm1CK^kHKRAJc!?1s<s0-F&$FoLnX*niy-M|3u5;C95r6ec2kz*W8fLZd-TXw#W88 z4<9+OiPMjras14n5^#!Wq0z%)gvU&1EhSrO_Ou-7IX_u@v-(r{53JFfHGY`7{p^!9 zv=+0EA?VtPUe3T6Hv;2!8GxYqa#jbm#+SLvS#?HIC?g6;z1);TmoZS-f|Jbx9)CM` zpW6>(uPnTnRzdb9`Qj|T+E`P2XlsN`E8#REm}$ZM`h;s;hIYT;!W;n!Y1nDG46~hz zNjCQ!#j?RZYmE~+0Qj!>p536PNSY&n+~sg|2I3$R5ldfSW6UsHOHS9UtypMcUi9lo zKgV~6rA~FiqEG=4GNfp%jVuObzJJzP5!kwJ03cEfC}9^dOg$%Tk>}jA2J+pi922af z9hbK3u3|$dy9F*73OuEsjh?GVC%vbU4GyCv$3b7P23l!@^_*}F#6>+Efp%p+jy2Hk z5^D48#F7E|ItRfN>z<-xcMQZp1hVnLb^xzM0}u>KumrbQNA6vZ8%`QEOMghA)8!yb z0*%!Wj2{m}BI|K1Ij|<DmUZt_2SWF17?`kRfO^SUe(_Fr2*oo>-#PH6<P0EW({@Tj zV#%Jd>pliJkwP}Gj=M+hs(nDO=}YMB16kVfISO>mmIRHg=@8KI7TxKrHdpWtKq$y- zXQ;mF!WkfNl$yvAu*xF?B7aHjd_`*9U5=aGEv%_n!aERalUxF22eNWO?_H5A@O_19 z4XB^dC9%bFSJ^pB!egM#**qFj6`M3f?bw^~G#3ovN@oH$h;3o%6%;R=p4@O$0@j2W z4s5@qfUvE)eITD~%R%l9@OjWm0WIJ)sAx|}@9gVYa%!MXoX9Szr+;nFghP&<*j1vB zY{n}CKM)H}GT<JIY@C@Mg40AG9SDBLhy<IIK=x_-$=yP_q@P?1nXAA~RRj??zS_a9 zyX3gw*<k{(@Wcr2ZN;HI+hKNxZM6b4ZaQL4G5{z@N!h^Pd_q7VP_tdb1Cdaw^k5yJ zFggT!a|nu9+j}cwsDB5%6I7Zmh3f@U{rI|r;=qStWCo^2o?s=tj{|8MQn{lqL60&h zz0|8uY!i!NirA|c9DXZ~JZk}M^Z|t%AyCZ68xs5Qf)VdE*SM-)Q1CP_y+NJlOge$o z-4jQwu2mee#x{^GE;FO@3HTtu17iqZ77`(<bifKVwR2!>j5@&7MB^HZ!*wthVp_lo zd8LcafL{o9X1F3=#tRpm36=yk_B}YoEJ)})5Nr7pPvIbz)e2sL0004mlOF~he~Lva z4t5Z6$WX<>f~bh2R-p(LLaorMgUO{|(4-+rad8w}3l4rPRvlcNb#-tR1i=pwM<*vm z7b)?7NufoI2gm(*ckglc4iFj@rdgqJK+|nAolJ<?+^X39iVy^ZF^Z_nEMrcRQt%yL z_XzOyF3z+3&;2=i)x5=kfJi*ce+<(m-XNadv<=St#8Fm~RpN8vF_SJx{K$31<2TMl zmj#{~H8bgX;wZ6L>|mvXS;^Fhr-);!rc=I<^;qS+#aXM=SnHnrg^|3zvdndwLr7u~ zOOPN!K@DY8U?WbePKt#z?I(QvgRWm9mqM;G7&#VDg$CL6ga5(rZmq)Pe}tD5NdR3h zj`J}LbngPqy5oEwJ5KWi2tET>dfQ)Z05hMY*V|g`2<Y1eF0R{}vIku500U2kY|5?_ zq$v~%!220}Qx53A1$x%J-dg)OeE>4lRq6&fI0QzDl)dir?r>*s|DI{}_X8*Ea)}3j zrmFw|01Qw}R7C&)0RI30lez~ue+Vir?(VEB000A(Nkl<ZNXM;JL2BeM5bT+WA(((S zAm5jqgii~(3hY4kt^xT!Ca18k5OWfKg(26#enl`>fwx*MI|F--1`qAFF;sO`H4#<x z@<RC>hSpZp4()KTqpgO~a$ON>I}W28U1cqL2j|pCR#_$Q$dwOz){d^Gf44XJ=5gwL zP2JQ@M?d>|nmyMwq4x7MhdI>VqjwBJ&*Zh&@{U~jpy&M@8v6K<Z=RMuHq<Zua*Atg zmNjzS5bC%tYg$tiBYLNl%u3NjBk#zS4|*}KDSxgV9$z;CtZIpI04OOEOzoifSapXV z;8g_dN|6H%=%T~d?;l?Te^}K`PwyK6UU$Se0F*Qdrf$-FyuQZ|@M;2ftto&8bkX7K z&(ALcyzZCh&y9d+dSV;^N`?eezZgEzJm3d-4FS6`lt2Tz=<xOT*B1fN6ap%{6W|yg z4|g2Uv}LRcbSO0_^a=r15fs7rGXV}d+FrGGu$Zym2?z|2hdWPbfBG_34LY=*G<t;q zuL+7^{F#72HEpkYKY7eJ?gS);$HQG0G-Da70UgFH2E9T6FhUWGKNFCsq3zWe7x`XA zt|b~rCg2PLs-YSn08ju+z!cB`>p`&{EZYGDKoub1?4X$Zye$NrVG3Aes3~+r^UMTX zKtMg!69fPXU<sH4e;QytXtslAJAeSF0t8$F6qBEKg@6l80gFrxrJiVAnSd(@XqIMy z06+mO0aHK&tOvt(h-?QC09Am1Yl33(^S%&pg(+Z><v#*ORYCdy?-&n*LVc?MCtWtg zS>X;=IOFbMg#e@kGNZb?C1BPyqz~|c@h~XVw+aZ-WkXyvf9_y~3+|3y2tZ08GwS<W z0#?&N`ou0~BTy#dRsl)6Y>2DD9jtK0-6;wINC{*{^B{_%il+)94uewyMD)xxY+?5d zAjtsf*c<?gI3uLn4u}O*V1;U)DrR_`f)*g6XRcujzh?kR21v)}0MNu4A>D35ET94_ z)bLa>!_$(Ce*h6Za}8U>Jp)KGKsqr8fFaHZ>Glg^0hKXD0gta60WIb|=A4)O$3KAW zTYxHO^Jc&naAgb7!Mbb@HV5}mVGBIHZv=Fh_ndQH@*n>Iwr>HdgU_1*TOgDzKt~_4 zJ=h%FLxnBy{J9a(W8Q1ddC7nL1K7R=s7Wzz25f;;JGKCwV#@Ylb8rt;DhhacQ6&WF r+s@mYE+P1R-~9M6B?Q0gi{tnYP!nmX9Ac*-00000NkvXXu0mjf0pBfF diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s index 62db40fdd..279fa1d9a 100644 --- a/libsrc/atari7800/font160.s +++ b/libsrc/atari7800/font160.s @@ -129,7 +129,7 @@ _font160: .byte $3c, $0, $f3, $f0, $3c, $f0, $3, $f0 .byte $f, $0, $f0, $f0, $f0, $f0, $ff, $fc .byte $f, $c0, $f, $0, $f, $c, $0, $0 - .byte $0, $0, $5, $0, $54, $15, $0, $0 + .byte $0, $0, $1, $40, $54, $15, $0, $0 .byte $55, $55, $0, $0, $1, $40, $51, $54 .byte $5, $0, $5, $40, $5, $40, $50, $50 .byte $0, $50, $55, $40, $1, $40, $15, $40 @@ -139,7 +139,7 @@ _font160: .byte $14, $0, $55, $54, $51, $54, $50, $14 .byte $15, $50, $50, $50, $15, $50, $15, $0 .byte $5, $0, $50, $50, $50, $50, $51, $14 - .byte $5, $40, $15, $40, $1, $40, $a, $0 + .byte $5, $40, $15, $40, $1, $40, $2, $80 .byte $a8, $2a, $0, $0, $aa, $aa, $0, $0 .byte $2, $80, $a2, $a8, $a, $0, $a, $80 .byte $a, $80, $a0, $a0, $0, $a0, $aa, $80 @@ -150,7 +150,7 @@ _font160: .byte $a2, $a8, $a0, $28, $2a, $a0, $a0, $a0 .byte $2a, $a0, $2a, $0, $a, $0, $a0, $a0 .byte $a0, $a0, $a2, $28, $a, $80, $2a, $80 - .byte $2, $80, $f, $0, $fc, $3f, $0, $0 + .byte $2, $80, $3, $c0, $fc, $3f, $0, $0 .byte $ff, $ff, $0, $0, $3, $c0, $f3, $fc .byte $f, $0, $f, $c0, $f, $c0, $f0, $f0 .byte $0, $f0, $ff, $c0, $3, $c0, $3f, $c0 @@ -161,7 +161,7 @@ _font160: .byte $3f, $f0, $f0, $f0, $3f, $f0, $3f, $0 .byte $f, $0, $f0, $f0, $f0, $f0, $f3, $3c .byte $f, $c0, $3f, $c0, $3, $c0, $0, $0 - .byte $0, $0, $15, $40, $5, $50, $0, $0 + .byte $0, $0, $0, $50, $5, $50, $0, $0 .byte $0, $0, $0, $0, $1, $40, $50, $54 .byte $5, $0, $0, $50, $0, $50, $14, $50 .byte $55, $40, $50, $0, $0, $50, $50, $50 @@ -171,7 +171,7 @@ _font160: .byte $14, $0, $55, $54, $55, $14, $50, $14 .byte $14, $14, $50, $50, $14, $14, $54, $0 .byte $5, $0, $50, $50, $50, $50, $50, $14 - .byte $14, $50, $50, $50, $40, $50, $2a, $80 + .byte $14, $50, $50, $50, $40, $50, $0, $a0 .byte $a, $a0, $0, $0, $0, $0, $0, $0 .byte $2, $80, $a0, $a8, $a, $0, $0, $a0 .byte $0, $a0, $28, $a0, $aa, $80, $a0, $0 @@ -182,7 +182,7 @@ _font160: .byte $aa, $28, $a0, $28, $28, $28, $a0, $a0 .byte $28, $28, $a8, $0, $a, $0, $a0, $a0 .byte $a0, $a0, $a0, $28, $28, $a0, $a0, $a0 - .byte $80, $a0, $3f, $c0, $f, $f0, $0, $0 + .byte $80, $a0, $0, $f0, $f, $f0, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $f0, $fc .byte $f, $0, $0, $f0, $0, $f0, $3c, $f0 .byte $ff, $c0, $f0, $0, $0, $f0, $f0, $f0 @@ -193,7 +193,7 @@ _font160: .byte $3c, $3c, $f0, $f0, $3c, $3c, $fc, $0 .byte $f, $0, $f0, $f0, $f0, $f0, $f0, $3c .byte $3c, $f0, $f0, $f0, $c0, $f0, $0, $0 - .byte $0, $0, $15, $40, $11, $44, $0, $0 + .byte $0, $0, $50, $50, $11, $44, $0, $0 .byte $0, $0, $0, $0, $1, $40, $50, $14 .byte $15, $0, $50, $50, $50, $50, $5, $50 .byte $50, $0, $14, $0, $50, $50, $50, $50 @@ -203,7 +203,7 @@ _font160: .byte $14, $0, $54, $54, $54, $14, $14, $50 .byte $14, $14, $50, $50, $14, $14, $50, $50 .byte $45, $10, $50, $50, $50, $50, $50, $14 - .byte $50, $14, $50, $50, $50, $14, $2a, $80 + .byte $50, $14, $50, $50, $50, $14, $a0, $a0 .byte $22, $88, $0, $0, $0, $0, $0, $0 .byte $2, $80, $a0, $28, $2a, $0, $a0, $a0 .byte $a0, $a0, $a, $a0, $a0, $0, $28, $0 @@ -214,7 +214,7 @@ _font160: .byte $a8, $28, $28, $a0, $28, $28, $a0, $a0 .byte $28, $28, $a0, $a0, $8a, $20, $a0, $a0 .byte $a0, $a0, $a0, $28, $a0, $28, $a0, $a0 - .byte $a0, $28, $3f, $c0, $33, $cc, $0, $0 + .byte $a0, $28, $f0, $f0, $33, $cc, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $f0, $3c .byte $3f, $0, $f0, $f0, $f0, $f0, $f, $f0 .byte $f0, $0, $3c, $0, $f0, $f0, $f0, $f0 @@ -225,7 +225,7 @@ _font160: .byte $3c, $3c, $f0, $f0, $3c, $3c, $f0, $f0 .byte $cf, $30, $f0, $f0, $f0, $f0, $f0, $3c .byte $f0, $3c, $f0, $f0, $f0, $3c, $0, $0 - .byte $0, $0, $5, $0, $41, $41, $0, $0 + .byte $0, $0, $15, $40, $41, $41, $0, $0 .byte $0, $0, $0, $0, $1, $40, $15, $50 .byte $5, $0, $15, $40, $15, $40, $1, $50 .byte $55, $50, $5, $40, $55, $50, $15, $40 @@ -235,7 +235,7 @@ _font160: .byte $55, $0, $50, $14, $50, $14, $5, $40 .byte $55, $50, $15, $40, $55, $50, $15, $40 .byte $55, $50, $50, $50, $50, $50, $50, $14 - .byte $50, $14, $50, $50, $55, $54, $a, $0 + .byte $50, $14, $50, $50, $55, $54, $2a, $80 .byte $82, $82, $0, $0, $0, $0, $0, $0 .byte $2, $80, $2a, $a0, $a, $0, $2a, $80 .byte $2a, $80, $2, $a0, $aa, $a0, $a, $80 @@ -246,7 +246,7 @@ _font160: .byte $a0, $28, $a, $80, $aa, $a0, $2a, $80 .byte $aa, $a0, $2a, $80, $aa, $a0, $a0, $a0 .byte $a0, $a0, $a0, $28, $a0, $28, $a0, $a0 - .byte $aa, $a8, $f, $0, $c3, $c3, $0, $0 + .byte $aa, $a8, $3f, $c0, $c3, $c3, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $3f, $f0 .byte $f, $0, $3f, $c0, $3f, $c0, $3, $f0 .byte $ff, $f0, $f, $c0, $ff, $f0, $3f, $c0 diff --git a/libsrc/atari7800/font160flipped.png b/libsrc/atari7800/font160flipped.png index a99a13657addb8e2c0ae3797643869ebea4a87ef..289f29c47c163c9dd364467d5a4f1d3202433d5f 100644 GIT binary patch delta 2908 zcmV-i3#0Un7o!)DB!BdJR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}tygW9?5Yj? z&nmJ6Bq1a%2Lzmx9c1|_+}(5Mek6JCoV2HHH^v~UN+qW3fBo~6f8ax1xHL8I(R;<G zMGGFd@%sA2bEev!^XJpvtv|Jwua_82f~&lK+IU@Qpk05w@PFw}^XK;B?<ef<fj%?8 z2b4QA<7Ryi67BqIr}iEw_UopH+xJi>zpnZ2_=NKQ&i9~CMD_K%d~aw5l$K&5VctSg zpR>Orko#pBxVGoa=tmN`XYqmy$!Dzq<frBR0QfsVzk*LMuzx|n@}I%y@$MnNVA(&c z^*=u#{WJIv#DCu=mamBT=LZ}g#C`|)oaN{2*Xl;=K(xOV^?*&EVbE~`a(Q0sI1FFK zy*)?Z@H%RO@>R1=97#b8R!*Ttiv}Iq&owC#V&lz*D|50uZ7#;aDVL{q4?1jMY>9)j z<XuG2%wMt4GjBZeB{^nZgsw~&j2`;`!%_a*!@qNsbAR$eL=T|+V1>B&iU46;=I$B2 zKnR^TZ~6fIIo|ZwZ^D99!Js}cI~F+Vd<`*`erQV`o(26B*S8lGTkin?5$09|LjneB zhv2DGHD)6Mjt+tbB4=ql!2qf9LXg}<Iu~Q-J2&1jdit_*=i3Z#0ud@*4BQ~6KvruC z{aABoXn&|^Q`N4fUNm%c>8)$;-TF1TVPehHx|z9!4Hs{&-rd|id<2KU12uYBctniB zWniL#u?G4Nv`n5d+tk^oO`kDGLO$72v!|tJ<XF69!6sH;wtU4Jo63e$?6!6HZQFP3 zaiFy$ryV{0*zpr*e6jXs^|#}1utsmz_+jeyvwttv&|1tsL(sJoy_|tDZUn~dG5|sI z<*Yij#+SLvSq(-~C?iO{+>}L^F;Lhxu^#&3?gw*!iMOKumw4m<#ay}6{Xdv1pze3x z{=nM0buJ&qURiiCt%B@3G}?(`DK~k~Q+Jwg7~k1=HO7>V+Pie@idykhK3E?Z9Nh=c zM1P;z&b9+L>r}k0Q}HTYOUh~eqyy)W-KV41I(>xT8!=G;_EK&}t8RcxsP{70!XidF zNJ1=SRht9SdDjr5GZyjiHQKHqiR&4*_F#Z0X46)JKZD3J0zacjq;2Q{4l6nYE5E@s zxS}nwd1nQqfOeg{3%jWgdeRudRdF__b$>!ib4SJM8#+z&&4o9)i*IB~<Fz9Q@$^A7 zB)jLxYrXS&h9~X18o}RV6eT+wN?cn`j@i@a5mbT(SyoxTfoFfvg|Ub2x#XO_JwT?> zU7Tm9vrE+*@KDgBY1CuL7GDdYkF~et40BOP0}5VPb$@bBHZlf3!7-AgDHYu+pnn_T ztT@Dg^yt#y6I9cnmgZQT1H|gUBxGjD@fd;fB^x+0I6bQ@D6iXP1JPzXXFy7MtZSRw z7xkPf6^cjEjD(b|vDt1*`ts=5cJ#I_S3z}4&_T}vC5Oe)4VyTZFM`ODujm3=ONa`+ zkkKMY|JiQ75i)p4S9mr+QSnY`1AkjBKiLOF*1BVPQhlbtJJOJR7+HCC-QEUL30ZtF z4k{=*m(@np71(4^Zj)v{TAfHSU1RB!H!8rXW<RJWpg-p}xCQ(Oe>GFU*`jjv;&T)N zJX?^fSjLb=Iqov>1Qln)JU|_-p@3Ni<nE~pj#jT3-9)q!fC_q<+%DG3ntvh(_rY{= zlR6w)v<}ZTZk0?J(%lz6J<V+<Ok<ksDXQUu@Fr%bZcwY%8~F}MNsyf4$aBN&pp!g! z@j+#jYmAtvJ-aF7RM~OKx#oaq$&r4Pzz$+#xR-DA-Up4_`xKZdK-@#`rW(n<bN0T% zH#QNdtMw8F+k0mkc7L$j=6_T0Kf#9as#a`<*4#kSu-ic$n+9=Jk^S19o>mJFofEEV z&X6A7=vX6mP9PW+9i<F@fX$Yq8FCY=Jn~usdZVMlvXReqm1(d)#g+_y3&kQA5!s$k z8g#IJQqDq|@BlI`8_SLUW;{LeB*7aXz6@+BaEAi5VSP&>@dH`a@(pja5FS<Catgr! z00D)Q76u-FrBod3AR?HdI$01E5nQwiMW|3}g;pI*F8zWg4M~cNqu^R_@ME#+;Nq;S zgR3A2et<YSIVrkGiT_IqEn+-4?#H`(kGpq((5Nug42%J)W*O;3T+HTH#o#Lf5D>x; zW+Z0nbE#Akp5yBtKEB??c$W9MKSz&}HyPj)iD#LAZdk+{#8aD=&Uv3W!b*}td`>)S z&;^Mfxh}i>#<}RQz%wI8COuCaAr^}rEO#&~87lE4aa2(?$``UOE1b7DtCbpS-IKpC zoYz*CxlVHs2`pj>DTt6!Lm3rVh|#K%Vj@lZaS#81<4=)GCRZ7Z91EyIh2;3b|KNAG zW?^D~+)WC{fvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig^e5@{wiZ1Cdbfd#>$WEE z0hc>K|C25mk|X(P3WWmjen#Jv1Nv@((3;y@Yagc%K!&<X-T()Oz(|p@*FE0d-Pzl} zXIlOJ0C$0Msl7<5IsgCw3{Xr|MF0Q*{{R4!um>xD5F8c6%qFq`00WsxL_t(Y$E}q? zisU#DMZ=k8C`^H;LEaC&5?&4T)?gL%?3Ezj$JDCnQ;1v%pTbbvhPjF$w*t@qk}|6f zP%@U~kTCvF@k1hLudj*^X^ebXdwbLQd0M~joA2*aexCQQ`r@*nYvtR|Ha{CP*ag>M z8aJ4K!L)*2EF!I4%;FYlowb~CYH?Os)tW^b>l9;HC5&O@I{E&q!#6ts82yH8Tu)(K z$F±t}cmwr*jQE_lzGpts<)*WJ3w$p_6CRtaMmg<gLA>G91T0Ook$n)h>>_j&IH zy+lO%c<e_yq)#z&CQV0*Q=Iz!kaJ8EV^}4BjA4{2ht}Q!I0X@CxuYQ47;6=qRZmLr z$k7t8>;UN=1sJC=Qb?%I-vI;-5oo!iAb(oD*KA%tYr!K&OTe=Oq<a)#g2qTAq560S zkS2&g%N+&9^B&{G7N?g<@W{~;i0lCA9tD^*VKkM5YQ+sD85*+y0RG-CPAUM5sS~1q zlu^dI3II4R3UAPQ!CPYsxW%=|oA#-bFp6v&EwBLq{@!mvDgcbB6QcC0S05?>;J9kM zLF*N7CttvAp+nwu&%LBs<Tz-70|4;%5qnqxU`(A5HSN<LQw0DVw+V01dc)f}7H~)E zkvIKIb^Zr{i^K1m)@0!ZmVha+vz7pVnC4cP=z_ggvbYNXl=(plfD23k0~zf51Hd)l z_t$RC!dF-Vrohg60$`eZVWJE6TFVx$08r*fDFCi81q`%e-yZ;O3BSMhdltUK5-<gJ zHWC2SJPH$Cu-B6u=>`C0ewG5@22;R5wU)r)Qc+k(d9?BZvBe1Xa|Vdb0GRrJs0lQI z;=HQ>xYSxKgTtj3K_4iOR^A}C7{Pze0Pz_BQy(>fCeWM@6#$odk7aPU)FK!Y<<ZIq z#1<pO&lw;w17PZ-CeQ>E=Tim1r7`a1d)9vY`2e7XETrY0SN-&OtpQKP?Lyt+VE9}H z^8N2$1%M?1<^A_x4*+`1LOSk$dDTyk*BbC#+%D8D0fx_IAm6|LE&x0U=oo+ec>tK^ zETre2SN-&OtpP8^?Lys>VE9}H^8MdG1wbT$QUeC_`g#X2*j)Kd!^&?KTh4;VDd5@+ zq=EEB>M3A{dVc^|+_=8I-2sd~SN`?H%D-;DoCS|lAaohX3DP&Ir+^<n>-_;>3-kW| zeg`neT>1AiEB}7Pauz&Jfz)RpXGlM!o&s^M_Xhx;0{;VScW#xKq6(w{0000<MNUMn GLSTZDa)18- delta 2898 zcmV-Y3$65{7mXK?B!A_4R9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}tyWpGBsU2B zuT%I40wh4kK?@PSfsgN0b-iuo*`A4TD{5(#7RXEx*Z%9zy#BzCl=Z63T)S$)ulCwG z@Z#n5>-U{Xz3*?o`t*M3zuqS?x&%*o{k3>KDbU|OCcF)&@qe}d^5+Ztv(Vel&w_Gx zX1uJ=Mxviz{ZyZY`hLA=cl&JW;Ma3L18-BFYdnkI7M0ik>vKmnptKq`66P%=<-YsN z0y!5;;92iGV;rFc{_Ayj>0=21`QqLOz@Gv75qx@q{R8@izXzY=86iJlsc)?5_aCTz z5B?4Dr;X*^B7gq+0Z_D`+<C6d<(d2CT~r04`Y7rKo8FeezyZkRo~CGqtKr@5*3rB~ znV@`?Sq9pqP7GG^qDqT`lJ@<aG+|=p&4wrQWV!oXj5|*`Jk`@E*`&)72a}WcC4z2# zw}tL~`@P>J$Igo|lnIN`P5(c%>)$^9PP;PafrxHE`G3X=cJUDb%s9-QJ4S&J%7?dh z1N_z=`pYL_L8@S|-7q^Gj51zJj7A^YlAGtlZo~7*1(&U70YHSk8;pVMD-|Vaq*RRA zh=8Mmpn&Bpl?NE0)_B24t|H2pvGds*bByk>+*tW^BR7GFCMpJQx&+9owLw2t9U6)z zt+v**S%34Z^%g2xwW+G<NpfLg)taf9xpfN{uijkU+`W5r?t&cHx_0Z{dyn8Nuu)*G z!1zGV;31=qHgwqV(ML?kXV%%KPMbdajKxb9(!|nb%U55q>DtH?yY9Ai+xFdeB(#>2 zHCt+0diIQW)*e=WYQMo6J*@G~)EQ^*tfBWZdw*MkPC99aGcd-Lz_=X-AZR|E6{lMH zFn2gBoe>m`VPrepT#F84ps;S@mh{fu2Xnu~+tvJ+c;o+K?mE={AIx2#?q}Y<VQrmr zZr+T&qVQl^1ksn&Yxc{g#GYfyIiNbNnmZ|CH7B;F!%N-xa!!TZy9axu?65Vk!FF4= zNq?}&l~FCRt|l*hWb(eTL2T)nwjwGnfH$G<(Q2n@Rk~7b)aFjW7<266SI&`@_6`K! zbJ|SXqt*z~E{DPCvU?u<7|X7`5}F`7+d~@K_5w1OQTnO_`djLAg4yhy%j{V(1^d?3 zr4BQ|Hdl%50T~S#S9ZZMZMN$|PQJXf;eRwmFjCIE?pwx0b{S2PK7co$u!(WhJbI~W zk_`O_@_LU(mKy@R*2YdTboxla2~gook>vnttHPUsgx=xol1$y+fw2*Ag$k5#Hnrno zw5zYyrjhoLExy*-f9)-EbaQEt1eCjE-xU-B3Ahse!cqjsL43D^AXuBLCvk>lTYs%{ zb}G}LlIk5-<5|2FgvXd&(tAK6Bzxg_5{+C7f&+8FC}8cZnX#iz(AnzPzDVb2Qos}r z%Ra%URlb20T@L!AXx%m!4z)Qm>AF3X8P>Bwd6JE8s&aB}%U*KNTxS#_Sp;D}>WMSZ zP$7_J2rzi(mqIpy63cUHjJ2vd+<%ke5IZ0FA?OYiJRlgafe=FUCf32piNUKzFRPcU z8qIA26R3HPqxQa_WS2Amgy4p#5gUm>F32XQ<~Wh0xM$^?*Hve~U2_-@Ce^bV56A*y zhgZQhi=I4?C+^@9`GC4-iHM2Xpd|MRO%Bv0*UiNCQ6-^tgDAnJl!ZECRe#crxZ$mB z7Jznk-$2da_tGq52h2oyElQ|HcqTatvORSzq=ITFN{kRAn~?=p6{OB+8}SQABH-mI zZV;2Rud_JnVQUw82qE;veH95szC<ix^xEh|F`_y+fGz@(?t(QJU|R#_jv}-{w1es6 zTECObDWn%@Qkc9Tj~PJ-lYe1rho%w~37H4<t@f&pX(LWgIP1V1oV0po;3%(#e14KC zHrdKtk^X&SF*y>`mk(VBm`9@BC;@2bDaeL5n#hnl5sw1P5N8H{7HYY4OE5EtflPM@ z2If1`HZlWPeajTl2412eG%m*k#5EkpY56x1YaxWHYiy4I00D$)Lw`e1Nkc;*aB^>E zX>4Tx0C=2zkv&MmKpe$i(@Kj}9PA+CkfAzR5EXIMDionYs1;guFuC*#nlvOSE{=k0 z!NHHks)LKOt`4q(Aou~|=;Wm6A|?JWDYS_3;J6>}?mh0_0YbCNG%GX?Xu54?Qb{qF zUlqfz2thyu3B+Y)8Gmz<l!ov4x<`PocL|>5f9}uGrxq**1VrLlW|%hd2J!T!ZE)Tv zj<K?=5}y-~nRG$oN3JU#zi}?PEbz>jna#`-$B4yJ7b{)N%BDs<MI2W(o$`g8$13M7 z&RVt3+V|uyj285jWv<g4Mhc5qf&>u?>ZqU!oBFCiC&faB_J5N;{vp>dkxL<01&kaE zs6m75`oaI;cehq?a>7fBCV`$8$N3lm!n;7L;W*#Nj?+2;g3rK}-tpI(z|1G<jgA&S z0{XXsi|dZ2>;acMz~GZ1o3bkfX$r+6@P0<$lm`ZGf!;N*xAs0xAAl@%mA(NE4uR1U zWv~0ZJJQ|TzYS;F{rv!3HgcY7cCs0hvIjYT2rdX%kL=O_00WarL_t(Y$E}sYiljOe zhL2S(G}7Q5i2Gqy!PUTQ1#OtSPeFVi>D4e#5o#5D3Zb_H_f-P54S4@QiPZ(O?TAS{ z5%K?W{u2?j*H^_ss!2Yry}ju)o|e!1=KK4Q#`E@BUz}%jwS4(mr?HwkGvn%}%63zK zH`Rh(3?j9er`gU@TVuFl)ohJ2s-9-4j8%-`Eny5Z+sL<H4Zhg`K<`#u{c`gC(l3pm z7l%mW)@AjpG~PL`c)fb3oo<#@PR?t_@Rl%!nQ!ICpBCS20bmR}u5mlZaT~W*&`Ut1 z4g0poUD_A|SK_e8FodDqb~%SQFow5(gfYxw;ZU0cfK?EImO2VD)ntrfGwMkRh7`>K z!w!&+D8N{SnL<J}?f~F5M4+XPg4}6wPO~}vtOY}g=73`dNJkW4yv9r;q1tc&hyz5R zrH+Eac?)4+3&YDG7*aF`0y{uDq5u;I%!Zs$wb(8vLp99+fWJ4hl>z{B>VznNHL1zi z0suHJ3Qy2_!Bb^2xY^dooBF8{-;1m(EwBOr{@$%#3INQh6QcB@7v~EA;J9i$LF*My zCzrvkzCqqJ&#lB!WZ!9l9RTq60ee^gU{0M7HEhEcVgUdgw*gPkdc)H>WN>?IkvHwj zUjQx^zdzMe5<bBaFa>tj5CGGE+z1n0u-8gvdjWvF-bn^<fhl01=@G!y<M)?lNx~Oc z0;a&uIs#ytJ7J;=_FBv8uK<wOd&vN<Fa->>JOa2y{QlN%N%#g!z!ccoKmbhhAWU?@ zUJtUz8vx|>Q8IuVOaTMsS^}>dDMip&%A=KMh|NYYj~O5)0buH*CeQ?bitDxj;H$<= z23~hkilFn9M=P%on~mTeGeBGdz|==gpb0eBeF4B%om(8d9;6h(5GjvV-XS&{Av|V) zgam-8kD5Re3|x-|0ACGZ3kATJpLYPNOG0YydC^agmm2Vt-7eHE7KTq{Al?7|lK~hK zQ2p}l*ByZFlaPjcUi8y{<D~{XXSWM=i-+M;8A$i<uNi<N0X=R%{@ei!V-nJG&x?L~ zywre~>~^7Ui7<RB1L^+ndj=3l;HUwwuLpq6q{=^4to+k#@>y^{1#F#wRFFPPIR#8t z?hgPw1>W8c0KH3<e>t)8FRROE!Tl8QO#*U)^i|3!;QDfZ0N^P(@cw=P7(=T3+nJSr w+e1DJ?x#R(6Oc2c?@~^IFqZoR08fGc0r3iHsVZjX0ssI207*qoM6N<$g3RoPxc~qF From b3d28dd517c93f8c6f923e6addad10874fa8a20a Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 22:49:28 +0300 Subject: [PATCH 1160/2710] Change order to make decoding easier --- libsrc/atari7800/font160.data | Bin 8192 -> 8192 bytes libsrc/atari7800/font160.png | Bin 2983 -> 2973 bytes libsrc/atari7800/font160.s | 66 ++++++++++++++-------------- libsrc/atari7800/font160flipped.png | Bin 2979 -> 2956 bytes 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/libsrc/atari7800/font160.data b/libsrc/atari7800/font160.data index 08ac1dbe430a08ec7275fe59b0b7b666bff489c7..dfbf65b63f56b90ca4a3837ce4e7e3309ecc4bce 100644 GIT binary patch delta 470 zcmY+AO-chn5QY0qC+24+GMdheMiWV75)c$j$V!x1<N$*w(2Zo}1w@GE1Y=#qP@9|~ zOLGkc1s5*u8Ye;uy67(Iz52SQ@ig{T9#9H$(v#!)Faq76LJ#Qj4EFKrREk+2eT89~ zY|(dU=82EG(s`_Hlx;SK+l33jc?k^P7wt_`5*qpmJzj3b@L*#t;GjH)=h*nK+*QV? ziSN3i?ASUlt5=y+Kr>o;*KHnnJ@}bAPa@(;Ery>t<SDBzwiDEHu>b({p<6ugH!M_! z!jqj13;R<sUhH0@ApGfR#6#0ZLD1<D5ziWZlydC9J-NIJMyM*tY9*!T9UksQw&chZ zN%Vvc&-Npfl$IHqKHX-TRC(1LA@yA{=7?P5^5x+H%63UY=g@7V%g?PI%9cvVG|hu9 IzqQZs3soOQ>Hq)$ delta 588 zcmZ9JPin$Y5XRpmYE7y!)~7@hEd-<>6a|sCyLf_n1iLFef-AvIw_z?~nO%?IuDJ0S z?F~9JN&gPKS<Ga9`M#NLw#{PmFTfa($2ng{IH-p&_a5Xcd+r$H$m1-XC-1xC8sp02 zES*=s>@+T+jGvzfoJ05qux&dusZ1eIG}nc09DL|@Xj7d+Q^8ypw!x3s(xH~IoO(sb z7+Q;yN<g>u6dJ;na5!+?wYaGU^z8lWxE#3eSv=GNI{7mQ3%8QhI8fBcq$*C8q=_Dz zS{0Y#RSmoN?)K>|xB;A5zxFjB>X!w8g_QH{qN;$u^A~q;R;s`-Noj7cq@V(DJxpoW z)q;-Vew5O&w}4imm(>)T%$EtxqcOCKKZ<ri@TC&k^|@YX7WJ}8zEeWS!Gf*I9u*@O lF?{rx=E;~FvPR{o7AD2C8;-#f|FQ@6--_~;Psh<Ud;)*5NNxZC diff --git a/libsrc/atari7800/font160.png b/libsrc/atari7800/font160.png index b7d36b3e64cecce132f337e7bfe5b206cb1941bb..845d91482459f72af2263f7dba0c4c2844fecef6 100644 GIT binary patch delta 2896 zcmX}rcRbXO1IO{to#S-GolV9W*+p?A>(0u|$PS^TBRfKukF)nzWo2H|ykyG`C7~|j z6vrj<waK3S>ihdXzJI;{c|P9%y^47Yc+(|7dbqXyEi1R%X#YUJ>-d`<=v!g_9%zqH z{B-~b{Ytj;xj!w*diYT$5GDc9>46Z-0;2`B*}rP4H>(?kl)KxF`3kVCX~7D%u7C!6 z3~<bcQtPDw$G&q(+~0}ug;(Nfax;OID^E1YlXb;^W%HRuHMg|Qhtlw*)`&abXa(Sp z?WI!fc7G7sdLaV(p8w(6OD(CykchfVVbCuTn#v1%YQw#i&DuhKvL8LQaDE26o0@lh zr4bpnZ?K&$u@aNspa*)k>#V=R_WJ{0nZY5SK`Bn)CvBq*a==d#d0osqs!b}|^<E9r z(42<LkLA^EZL(XpGyT#zz`O3gO90z{5l2o`72(qCHQn2<s~R&rUb6hmm^a}@34jK^ zs>I|cnZK!-81moJsE+=bscD{n(SX%f%<_?bbktU>x|)@Ii$j2CNY>bh{+Cf4D^Wb3 ztHQndX|(EWfgYt_<P}ATx*U2@NL)e3P7?OSWJ^1LZZhJaKuLdxm~fgzr~-9d2zrsq zY(cY0F6fx4Z)BIq$yr_SNJ8F_n{|XGs0VhTuo77_sOr-@<3OpLI{F;-bm16~pctZm zR>Bpndfzy;`m7wve-V8H9hB9{$!bAvNtfWg_txmuI{%3kX<D1pt2MlV4-{pSE8Td8 zA6=e-IJ_}Op_Evekn3#7pr%dv6C*it{YY(rn5uQ{jp65I&Sn>~UBZ{h-Yc{{MHSrf ziV;(C-WR@nCMJOd3<V^4{LFB;Uf?soIP}B+T~D%|--`(vLEfd>Lelnf(_S@3<yoq6 zRo{zdAKKk9VF)=^FHzu>a=3j8`-reDcpi+#gxi1b`#e`HQt=1_mbU3qWTZCzncg-c z`KVn0Y#_d7yp&6;U+6>i8B<GsqmeE%$6I_1u^yaM68m!7nQfDnXJ5fY)gy%;gO8Sf zxt=CA6@~3b)di2JwWqW?g(?m}w;9tD4C4`nWM2gjfu%21&^d$LeQTc5;#|vFros;_ z4TK;O(aYld-NW*rz_ST=k-m%<RhCWHReGQj1=kx+RjJ6&b`_ZLrhHQ2+3TqI>SZNs zGYOHuAP_Vwto6iSU%RK#De_4VlWECcL@!;*0)`OhQR#ewsde#b?Mx1}+WJdq5DtSV zME`Omr+d1_4TB9@qmt1*LY{2VrDL7Pi55Y+*C$VY)oH_nT<LfXT8Og}tH9}(?Hk9- zu_~OLn;flA9&@eNPt#$&3MpY+%4aSJFtSJ(*!M}zGfQF!#+9slC0T+wUKvWfA{;N8 z*e8;S`amaVV76p@wDkr-Gls09OERn@TR1T6pS}F$SyIu-sJV^{a`Ga0J{N*n#2zJ+ zEm_5*OPCSd(MhR4)lEI)xth<P7Fh3un{t~<il29-)a8krHKM(eLh#r^>{NfmUsLGX zq}0bgYYA)xU2pm<ZA7W21M4|=1#xctnMz9!pX=J?Lhz9?%>cs+_lN8f!Lipeaf+iF zaRSnMVqYA4Ylokq(CZSuw&<Zb`-kFPDPGgqA^;rnohf0jat%&caU^9!M1rl}HGH&e z_4|8i(ZJMkc?uU~WwX}QXU+U_@d+!jd)BdeA-$f|8sd^Vf!1*Fyz0;W;8qS!0OlD* z*MI3Vyo!M6xn>b*$L6^WN=c;Sj~P#`Cc@!7izxJ+?pS=V2vwy7HC&ux^zAAZ_W2IY z9=x?CU4f&PN&9%OV+o_Zw^A=<Fmc`Q5Nk2+NkhWx(?+*t<x77clI@-XGW|4~ru}on zxRdW6p^!c2bvonD4aQb5s)wL+xR+7`nH1dMHIgdX%!ows6x#+%QJ^1&OgSFh^*-5r zZ9-FKgK+>_X`1AiV%0aYV?7ilmOQTtQuOsn^QrRz-VC+%^iZXYs~pVsr+nUV%#C(i zUOU|Y3<0j!GKZD6dd3b`qntOK2Fvcb>Beo?ER+?VAT(i?;_eGJqbng&k8}HNemtBk zk?<B%q7RIoT1G(B_3XN<F5=4JN6l{Clf(^GbeNF)w?@4o0D#2cb#*O_bafv{GVy}? zvTRG}sq{zZ>*%~wB{tGJu@-W*^R9t&yvle(D<?rlYE-mHvJITq(^<%g5x2_F{i)aJ zlfLo66{{Plh1UVv6SO<ytqd^+v3OfoR?4k0Qz=e&l?GX+E2zjwMR&gJhaUY#RtV=F zswRQZn!H}IJbNT~=r!RUX)aOd5eMQq{gCE<Uzuj_PBF{%%C4ye^gm_c&<=E7+er=j z<U#Z_=r;{7Jf|biqi#RvYI_zlB{Nl0HkYArP19D*FJMF#Gtwjlx=B}7$_EwvP`q#7 z%^{IsVWG><J(@67_P|}#Y(MezktkK+o{6X(e~KVWiB9z5-s@lV+YPpEft{cU;$&nY zZ_h3tB&r!(vwUu{Cv8Xra`3Sub7ITxL`T2W+-5zGCX}h3n7mN`d=ZkZ-a&sLnpZ8i zi$}ylS0fB2GZ;D>u#>se%ibcz?AW*_V;TUD@3?WVn%dmb+)&d1eyrWwhh*jj)?Gdc zyaND$)xy+T|M&g^0L=%@a8-~~5zY#YIt~B~c}99TYr`J0&1<jkid+OEFX`uW=kyg5 z^UmT}7se3R?H7>;+LFbCl}NQ?V5}&$^C$^zN4#BFIJLo0MqkxXiQ^wgN%%YTCj7m( zYHj`FkQ?y@LOz(3tl1>Ru>d~W-?HAsrTk0c4j!2;;&v__6+*P#anS7Nz~SfJ+@{jJ zt%$8n<vWGmor|-0wxE($cs)Dr<8&SMXPQ$OWIck7>fQcMmEA<-#C&#yS~o_ePaw>f zImjs+LoQ83jf$SEu~Po@PCamjQT{Dv=HubP)g@=3+|gYaZJZQyNnP5-R`VM?oSWEe zHH~JlKobrR*N`1$Aocdj3N)04S_do#CGwk$)_?BtYg5XPjn_Q~_#>g;7QRz;fyzm( zt1T=@GxL51z20>HdEPF$T;2n0rKrDZ9LF^P5mO1ai$L`rXxll2Gt+Z~{g%%GwH}wb zr!BlJI+6fel;G=w8X!%!soiVI)!UpM0v-B3P#_iAb`va*6Ld5eut#-xM~UZvJZKBE zZM)VY0_U74);+xC)dEy8%LkL*mGcIWgGP$~^OGph)GqK{Y%*wx4aIkXhYo|3JrZyQ z3?mKET&uu7E<jMe2LkQjM$)J0IR`DLp!rCI-Zf^LFe=BBhYp3zmlpn~!F^nipvJ$P z;}4gEI{o3shY*y#9S@xelKafzKfeFkUr_8{o%Kg6K*#@R8EB*x%GH{?g8gUOuA)r; z6(Kro2Aj{djEv=64zYz{O-M>*#T4RiG=lk!i2p}O7&wD<QvR)2mbYB~QS-B(qkk*R z@e1>NcQ&YpXxn-8vG>GA{&7)+>bTHj=Ey9pr?SE}Gt$HY2NcI7>^$`B?(`MH4nm?v zoq(i9ahMPMGgR^!65@W$iy2vqL}{<5*zb@T49{bcMJ!m(+c6|sjAO@Bj2KoP2QonJ zqr|2>3sK39!GIB*nIj0oH<gC0y<)+VlOl7{-UnJcx^iZ_WkdT2cT=6QBv7S@^&F#< z8siO5=QMbH^cmCT&DIIn-!CVFmc!=2gXqx^goO}6i{Bp+6NsQp#0#>s!LR0Yj(OG` zqg-vLj;{~?+JRRsagik75YEzZT!u4TBwbTAVL`UHioG)a8XRL<+334N=Zg}3icD6U l+rnBo9$H0BZVm(=vajy=%?0=C)c+0`Fw(!M_d>@t>VI>?KFk0B delta 2899 zcmV-Z3#{~=7pE7HB!BLDR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}tyWpG>?RET zXBAljk`O}60fDNrgDgJ>ci;Q&8!}bJuD0D6gE)gkIe+|~<u@GExtFFky7yjjG;hum z52L;gf38&9bNx8lyY;*F^7#>?NpP3fUz@KxO|<K`4?eon`hUK?jQ1NJ?}0vMeh(;j zX2!$*8YJ5J)lTg_ke}B>_hDZ{UHrPoyW<ne`?ubMJ`vT||MIn=8Bp4aiG=wGNqw&4 z6@lCz%f!7sS4KY)$1_VWxV5J%y#V=cdEWs33eb<>(+lh$(69V!@Oi#_$PZZd57zpx zUy%M9{0HJM6MxHRMEv~=ZXbyK407fkndh~-**XyIZ$&*|)5kFAxB$64pLLvupW@k` z({YYEYk=}yqb{65P7GGEP@_$glFoAv3WV7Bu;I=eEKl1IW9N{|Q@bZ68yMR%z*+Dq zB53B%Sm>G8pZS6YX5NIZOc;zF`v2lAfA{jgoFy|ZM1S-E$`4kEi?0X}#%1na(F=r7 zzIoFJ;E(f7fBhmXNVQ(pF3bZ9oOQj1SW4ftB@fSnev11$7Zls?0RR!^Rs=%=25Ki! z>Qs%{h=Ah&K@*X)G+tnURCyyvZX%tF@!&f*zA<|GvU2C!jNAkwRJs_rfu}%LYYP2X z8_>{H(SN3@T}?+(*V(1FuDy5bH_1&CYo^xCY?#{|GTPA5hmA3OOlKG5K=tnC!`<iP zGBMG_SQGsxS{5%^ZRzUE)>yt~Kt9nzqld)^kGXlvMw-}t+aBBZJX8)c#c4-RKX%6P zGZR`%$(EWuEk}CJPuAY7{&fBa*67U|KTO?z_J7G5T8r7o5OmXtUe3T6Hv;2!8GxYq za#jbm#+SLvS#^dflo6y}Zpx<17$|IqSd%`v`^MbA;;rcTSG@5*F;^~i{|9pg)cwrc zFId~R&c(yn%Y_%yDsW$tFV5ntjWx9&ZH-X05^R`Ypjqcy9gf}&`3Xe&2ykF9IpXFO zIe+nO9!q4iPGz*6HILIxNwKO2YKjb6!;j=XFkH+CZbMMx`srK~YwEj8Q_?sIB!Nab zb!4n;tmqdg|J;CL<N-*?j)`1DE`t+h-Pk5f28?31Y{$)$*+%at7X%rICE;YSuj-AW z0x{J7)3E|9A1t1`0-sF7H*OdR88>B((|@vW#5-F7m5v4b(Y?~4;0E){I4}xw38HG9 z@ebfXEz682R@$ysS28aHnSR$?($sVBX@OPKS{75h)4@i^^NKU!6f6hJKMMNV#d5M8 zEKRX8P$)Dk%OC^Py>EmHIhr4X#5$;#)!S(*aq9!qMUOUyy}EF_L%deMV%nB+7k|Ix zz#X7+L5qGoCHD1Z@>&&!3ihgC@lx?<hjcRdIz7U!2{3f&4-dm(^2~W=3-GDpvsvFf zb3o*f&km$iXtffgHP@Kf3@~b_0Et{HtR%7lq>~^DT54AuP*(8669g8ZG#w7lX%7An zMD^Y(9Si9M?Z7<lt)!e4D9TykLw|FMy-|h@U$iSdj0BfMdAz!w(IzYeSW$GZA7UJc z?W$f%uR|h17pWn2^aF4g?6=G@(VenQ$fb=9NRTl0#x?*s%rH4mqzO!Q`xF3_Dh%ob zM!m9=4O3*I9mNK`tZO?CJ<`{)0qe<va9afM0sherzAyV$PZ&{q>}3asYk!w?1?o^p zT^D6Mc98nG3!bnQ+E&7j&bb=47XoF^uD+pM=zr|9pd5f$bB;)GfaJ0ef={(gC_D#b zLaQ5tAgy{ja?FMsko@H&tJi(h895f=ZX~O&42RN!A@87b5IK;=)Dxy=gXKga&w~mu z6+XHp8xB1USYfNpK<;1@rGLQWR_>7uXA`sm8Vw<Y&6^)EQu7Ihg%2|0qio0+l&TAI z12Q%egiG?c0JM4x8~o^ZKXrABx@5BlC`T=KgnzCXu#0kRk0WD?X~wXl8pt`A==7}T z*2;#YhC~1Y!eDB|ivn?W4iGe+RN;{5W-pe+awayJNZ@}0EEFTo8wb?<`Tzg{g_98m z9)G1&9PA(>n4vmZ5ET(zv<gM2P-=x%9ZW9$f+h_~ii@M*T5#}VvFhOBtgC~oAP9bd zI665gx=4xtOA0MwJUH&hyL*qjcYx5SFx3o<0jg#h=|o)2=2pevD*_M@!VqR8X6kdP zR1%)!>mEM7-o<#9_qjhukCHbT;1h{wnSX9r#2ds@o0iUbpE$xwl0tk=JZjJdi66Nx zyZpwv=&-;uBSt1YPaGi@iybU?Fe@1<@g#9nQ8mgJvMwu}w>Ybn8f)E?zc8HFR+hO= za}WtEVhJgTkWoV!6<CPTs*z$MP5W^V|A6C9kxM358H^kYs6vJ0_`(0+ceiF?Vt?FC z3de!27u)_A27<dlvu@kp$F|)(0sPOvmDcuG8^H7@>Gif2Jpy{Sfs5<5Chq~4J3#-F zE*X*|`DqG;0`PuD-;@LTZh_F6+gocNrw>4ex=P*v2Zz8&k+Ro4-re2V+rMX8{rv!U zfpV$6NUAyj000b7OjJbx009300F$c+IDZftFxiq-a{vGXmPtfGR7l6ImBEVJN)ScM zb_78Llz_Z{WYuW(Aln9MAaCCW>3_tmLcXH$O6V&DvkkmoY4BE{oa&P8`G9F7Q(bNg z?yY-oi^#cqd6B#h-8mHO&)p#mq3DL7bs^MY=!SmiixB7?`o10{)S<RB_T)t`gnyxL z#@APS=W%ReDb3i7$2iAwoTJvIP{(<kr+F%4q<5SqH%oNU*%^ECq8H;lwaeR^z4NrR zsgibSms8qOwQNc2N~qJeZ0ojGDbYKvtKTH~<n4?-dC^O0Tl4Ee`1bQoK&a26H~=cO z7^ZVq>k9QJKENyZ3w!CIfi4|={(t-WBp}o=e*bkRAi72r2SCM%VQNOFE4t5ofL99G zos$U~=+e>W_dibpqD$$=pF07`x1u-zDqajzyLes6f8hhXO2F>Dtk6K0jz0hY`y?QF zdmnHg1oR3|hdXpZb_Nun0J*E_?F58cP=w;o1oTqK{b&dr1MY)>N#W^m=YNrA+{fym z!@1GX+X;wHP=w;o1WZ!O{b-CF1MY)>RpIGyw}ocf$LgWO`^D4S2>>ICQ2d#IRVuk3 zO=(Fx?EWk=3|d_vpy-MY0YCwkz!Yde^-!xFg4zKBPz3~BdK8m?Kko!wFa;Lrj^osb z%(D`3g@AG_M+5)`SOQa^0e{tlQ#(Yp0|cN72)IrtCjZ{-1Y9u%78y^=+KOzO5^#fn zYN-|k00meAQ=kFWgI7BwwF3m83JAEZC?@~j?gZR01r}K{0fjsX80rG)1HM;03X1x@ z0($GJAucsLtZ-p>2u1)YL1q-6N_i46yAtUGeo{ONiu%0*ChMvpu78dlR=Bb|Mk9cf zAT!F(l{^X9e1-HyU93isOvHNytkzXS+&nw1aAS8$MgS>6W>jBHQBvqsAp$Mb2E_EN zHMR(k3=qoz>x3KtwP;3I_uLT+RInnYPL&y=1!q7^&st-P_{adU46shj0pLV4!n(~! zEKtFUR612=h!(s7F@HU4jV;n61H>}GIw=Q$7tILkwhOU9<^8UJZ$Iw@oSFBKbKdfw zZ-6~+0V(>BZw79Ge!m6e5c+HnHHY@7`cl6Cx)aba?>XnZ<v-s5d)xw2PBGsM+yc{n z3&=4}*&b>R?NLpY{P=Sxpk>}$&Uwp!z5({Q1*BS2z8Sa$);#?dkW*T-J=7f9qgr<b xyu8$V8pwyO*H^cP;K#l5?al8Y_)%{hhQHgwZk5}KvKs&Z002ovPDHLkV1hnJWx)Ud diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s index 279fa1d9a..e9c2e46d8 100644 --- a/libsrc/atari7800/font160.s +++ b/libsrc/atari7800/font160.s @@ -1,7 +1,7 @@ .export _font160 .rodata _font160: - .byte $0, $0, $0, $0, $41, $41, $14, $0 + .byte $0, $0, $41, $41, $0, $0, $14, $0 .byte $0, $0, $0, $0, $1, $40, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 @@ -11,8 +11,8 @@ _font160: .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 - .byte $0, $0, $0, $0, $0, $0, $0, $0 - .byte $82, $82, $28, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $82, $82 + .byte $0, $0, $28, $0, $0, $0, $0, $0 .byte $2, $80, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 @@ -22,7 +22,7 @@ _font160: .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 - .byte $0, $0, $0, $0, $c3, $c3, $3c, $0 + .byte $0, $0, $c3, $c3, $0, $0, $3c, $0 .byte $0, $0, $0, $0, $3, $c0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 @@ -32,8 +32,8 @@ _font160: .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 - .byte $0, $0, $0, $0, $0, $0, $55, $55 - .byte $0, $0, $5, $0, $11, $44, $5, $0 + .byte $0, $0, $0, $0, $0, $0, $ff, $ff + .byte $0, $0, $11, $44, $5, $0, $5, $0 .byte $0, $0, $5, $0, $1, $40, $15, $50 .byte $55, $50, $55, $50, $15, $40, $1, $54 .byte $15, $40, $15, $40, $5, $0, $15, $40 @@ -43,8 +43,8 @@ _font160: .byte $55, $54, $50, $14, $50, $14, $5, $40 .byte $55, $0, $1, $50, $54, $14, $15, $40 .byte $15, $40, $55, $50, $5, $0, $50, $14 - .byte $50, $14, $15, $40, $55, $54, $a, $0 - .byte $22, $88, $a, $0, $0, $0, $a, $0 + .byte $50, $14, $15, $40, $55, $54, $22, $88 + .byte $a, $0, $a, $0, $0, $0, $a, $0 .byte $2, $80, $2a, $a0, $aa, $a0, $aa, $a0 .byte $2a, $80, $2, $a8, $2a, $80, $2a, $80 .byte $a, $0, $2a, $80, $2a, $0, $a0, $a0 @@ -54,7 +54,7 @@ _font160: .byte $a0, $28, $a, $80, $aa, $0, $2, $a0 .byte $a8, $28, $2a, $80, $2a, $80, $aa, $a0 .byte $a, $0, $a0, $28, $a0, $28, $2a, $80 - .byte $aa, $a8, $f, $0, $33, $cc, $f, $0 + .byte $aa, $a8, $33, $cc, $f, $0, $f, $0 .byte $0, $0, $f, $0, $3, $c0, $3f, $f0 .byte $ff, $f0, $ff, $f0, $3f, $c0, $3, $fc .byte $3f, $c0, $3f, $c0, $f, $0, $3f, $c0 @@ -65,7 +65,7 @@ _font160: .byte $ff, $0, $3, $f0, $fc, $3c, $3f, $c0 .byte $3f, $c0, $ff, $f0, $f, $0, $f0, $3c .byte $f0, $3c, $3f, $c0, $ff, $fc, $0, $0 - .byte $0, $0, $0, $0, $5, $50, $5, $0 + .byte $0, $0, $5, $50, $0, $0, $5, $0 .byte $0, $0, $5, $0, $1, $40, $54, $14 .byte $5, $0, $50, $50, $50, $50, $0, $50 .byte $50, $50, $50, $50, $5, $0, $50, $50 @@ -75,8 +75,8 @@ _font160: .byte $14, $14, $50, $14, $50, $14, $14, $50 .byte $14, $0, $15, $40, $14, $14, $50, $50 .byte $5, $0, $50, $50, $15, $40, $54, $54 - .byte $14, $50, $5, $0, $14, $14, $0, $0 - .byte $a, $a0, $a, $0, $0, $0, $a, $0 + .byte $14, $50, $5, $0, $14, $14, $a, $a0 + .byte $0, $0, $a, $0, $0, $0, $a, $0 .byte $2, $80, $a8, $28, $a, $0, $a0, $a0 .byte $a0, $a0, $0, $a0, $a0, $a0, $a0, $a0 .byte $a, $0, $a0, $a0, $2, $80, $a0, $a0 @@ -86,7 +86,7 @@ _font160: .byte $a0, $28, $28, $a0, $28, $0, $2a, $80 .byte $28, $28, $a0, $a0, $a, $0, $a0, $a0 .byte $2a, $80, $a8, $a8, $28, $a0, $a, $0 - .byte $28, $28, $0, $0, $f, $f0, $f, $0 + .byte $28, $28, $f, $f0, $0, $0, $f, $0 .byte $0, $0, $f, $0, $3, $c0, $fc, $3c .byte $f, $0, $f0, $f0, $f0, $f0, $0, $f0 .byte $f0, $f0, $f0, $f0, $f, $0, $f0, $f0 @@ -97,7 +97,7 @@ _font160: .byte $3c, $0, $3f, $c0, $3c, $3c, $f0, $f0 .byte $f, $0, $f0, $f0, $3f, $c0, $fc, $fc .byte $3c, $f0, $f, $0, $3c, $3c, $0, $0 - .byte $0, $0, $5, $0, $54, $15, $0, $0 + .byte $0, $0, $54, $15, $5, $0, $0, $0 .byte $55, $55, $0, $0, $1, $40, $55, $14 .byte $5, $0, $14, $0, $0, $50, $55, $54 .byte $0, $50, $50, $50, $5, $0, $50, $50 @@ -107,8 +107,8 @@ _font160: .byte $14, $4, $51, $14, $50, $54, $50, $14 .byte $14, $0, $51, $50, $14, $50, $1, $50 .byte $5, $0, $50, $50, $50, $50, $55, $54 - .byte $5, $40, $5, $0, $5, $4, $a, $0 - .byte $a8, $2a, $0, $0, $aa, $aa, $0, $0 + .byte $5, $40, $5, $0, $5, $4, $a8, $2a + .byte $a, $0, $0, $0, $aa, $aa, $0, $0 .byte $2, $80, $aa, $28, $a, $0, $28, $0 .byte $0, $a0, $aa, $a8, $0, $a0, $a0, $a0 .byte $a, $0, $a0, $a0, $0, $a0, $aa, $a0 @@ -118,7 +118,7 @@ _font160: .byte $a0, $a8, $a0, $28, $28, $0, $a2, $a0 .byte $28, $a0, $2, $a0, $a, $0, $a0, $a0 .byte $a0, $a0, $aa, $a8, $a, $80, $a, $0 - .byte $a, $8, $f, $0, $fc, $3f, $0, $0 + .byte $a, $8, $fc, $3f, $f, $0, $0, $0 .byte $ff, $ff, $0, $0, $3, $c0, $ff, $3c .byte $f, $0, $3c, $0, $0, $f0, $ff, $fc .byte $0, $f0, $f0, $f0, $f, $0, $f0, $f0 @@ -129,7 +129,7 @@ _font160: .byte $3c, $0, $f3, $f0, $3c, $f0, $3, $f0 .byte $f, $0, $f0, $f0, $f0, $f0, $ff, $fc .byte $f, $c0, $f, $0, $f, $c, $0, $0 - .byte $0, $0, $1, $40, $54, $15, $0, $0 + .byte $0, $0, $54, $15, $1, $40, $0, $0 .byte $55, $55, $0, $0, $1, $40, $51, $54 .byte $5, $0, $5, $40, $5, $40, $50, $50 .byte $0, $50, $55, $40, $1, $40, $15, $40 @@ -139,8 +139,8 @@ _font160: .byte $14, $0, $55, $54, $51, $54, $50, $14 .byte $15, $50, $50, $50, $15, $50, $15, $0 .byte $5, $0, $50, $50, $50, $50, $51, $14 - .byte $5, $40, $15, $40, $1, $40, $2, $80 - .byte $a8, $2a, $0, $0, $aa, $aa, $0, $0 + .byte $5, $40, $15, $40, $1, $40, $a8, $2a + .byte $2, $80, $0, $0, $aa, $aa, $0, $0 .byte $2, $80, $a2, $a8, $a, $0, $a, $80 .byte $a, $80, $a0, $a0, $0, $a0, $aa, $80 .byte $2, $80, $2a, $80, $2a, $a0, $a0, $a0 @@ -150,7 +150,7 @@ _font160: .byte $a2, $a8, $a0, $28, $2a, $a0, $a0, $a0 .byte $2a, $a0, $2a, $0, $a, $0, $a0, $a0 .byte $a0, $a0, $a2, $28, $a, $80, $2a, $80 - .byte $2, $80, $3, $c0, $fc, $3f, $0, $0 + .byte $2, $80, $fc, $3f, $3, $c0, $0, $0 .byte $ff, $ff, $0, $0, $3, $c0, $f3, $fc .byte $f, $0, $f, $c0, $f, $c0, $f0, $f0 .byte $0, $f0, $ff, $c0, $3, $c0, $3f, $c0 @@ -161,7 +161,7 @@ _font160: .byte $3f, $f0, $f0, $f0, $3f, $f0, $3f, $0 .byte $f, $0, $f0, $f0, $f0, $f0, $f3, $3c .byte $f, $c0, $3f, $c0, $3, $c0, $0, $0 - .byte $0, $0, $0, $50, $5, $50, $0, $0 + .byte $0, $0, $5, $50, $0, $50, $0, $0 .byte $0, $0, $0, $0, $1, $40, $50, $54 .byte $5, $0, $0, $50, $0, $50, $14, $50 .byte $55, $40, $50, $0, $0, $50, $50, $50 @@ -171,8 +171,8 @@ _font160: .byte $14, $0, $55, $54, $55, $14, $50, $14 .byte $14, $14, $50, $50, $14, $14, $54, $0 .byte $5, $0, $50, $50, $50, $50, $50, $14 - .byte $14, $50, $50, $50, $40, $50, $0, $a0 - .byte $a, $a0, $0, $0, $0, $0, $0, $0 + .byte $14, $50, $50, $50, $40, $50, $a, $a0 + .byte $0, $a0, $0, $0, $0, $0, $0, $0 .byte $2, $80, $a0, $a8, $a, $0, $0, $a0 .byte $0, $a0, $28, $a0, $aa, $80, $a0, $0 .byte $0, $a0, $a0, $a0, $a0, $a0, $a0, $a0 @@ -182,7 +182,7 @@ _font160: .byte $aa, $28, $a0, $28, $28, $28, $a0, $a0 .byte $28, $28, $a8, $0, $a, $0, $a0, $a0 .byte $a0, $a0, $a0, $28, $28, $a0, $a0, $a0 - .byte $80, $a0, $0, $f0, $f, $f0, $0, $0 + .byte $80, $a0, $f, $f0, $0, $f0, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $f0, $fc .byte $f, $0, $0, $f0, $0, $f0, $3c, $f0 .byte $ff, $c0, $f0, $0, $0, $f0, $f0, $f0 @@ -193,7 +193,7 @@ _font160: .byte $3c, $3c, $f0, $f0, $3c, $3c, $fc, $0 .byte $f, $0, $f0, $f0, $f0, $f0, $f0, $3c .byte $3c, $f0, $f0, $f0, $c0, $f0, $0, $0 - .byte $0, $0, $50, $50, $11, $44, $0, $0 + .byte $0, $0, $11, $44, $50, $50, $0, $0 .byte $0, $0, $0, $0, $1, $40, $50, $14 .byte $15, $0, $50, $50, $50, $50, $5, $50 .byte $50, $0, $14, $0, $50, $50, $50, $50 @@ -203,8 +203,8 @@ _font160: .byte $14, $0, $54, $54, $54, $14, $14, $50 .byte $14, $14, $50, $50, $14, $14, $50, $50 .byte $45, $10, $50, $50, $50, $50, $50, $14 - .byte $50, $14, $50, $50, $50, $14, $a0, $a0 - .byte $22, $88, $0, $0, $0, $0, $0, $0 + .byte $50, $14, $50, $50, $50, $14, $22, $88 + .byte $a0, $a0, $0, $0, $0, $0, $0, $0 .byte $2, $80, $a0, $28, $2a, $0, $a0, $a0 .byte $a0, $a0, $a, $a0, $a0, $0, $28, $0 .byte $a0, $a0, $a0, $a0, $a0, $a0, $2a, $80 @@ -214,7 +214,7 @@ _font160: .byte $a8, $28, $28, $a0, $28, $28, $a0, $a0 .byte $28, $28, $a0, $a0, $8a, $20, $a0, $a0 .byte $a0, $a0, $a0, $28, $a0, $28, $a0, $a0 - .byte $a0, $28, $f0, $f0, $33, $cc, $0, $0 + .byte $a0, $28, $33, $cc, $f0, $f0, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $f0, $3c .byte $3f, $0, $f0, $f0, $f0, $f0, $f, $f0 .byte $f0, $0, $3c, $0, $f0, $f0, $f0, $f0 @@ -225,7 +225,7 @@ _font160: .byte $3c, $3c, $f0, $f0, $3c, $3c, $f0, $f0 .byte $cf, $30, $f0, $f0, $f0, $f0, $f0, $3c .byte $f0, $3c, $f0, $f0, $f0, $3c, $0, $0 - .byte $0, $0, $15, $40, $41, $41, $0, $0 + .byte $0, $0, $41, $41, $15, $40, $0, $0 .byte $0, $0, $0, $0, $1, $40, $15, $50 .byte $5, $0, $15, $40, $15, $40, $1, $50 .byte $55, $50, $5, $40, $55, $50, $15, $40 @@ -235,8 +235,8 @@ _font160: .byte $55, $0, $50, $14, $50, $14, $5, $40 .byte $55, $50, $15, $40, $55, $50, $15, $40 .byte $55, $50, $50, $50, $50, $50, $50, $14 - .byte $50, $14, $50, $50, $55, $54, $2a, $80 - .byte $82, $82, $0, $0, $0, $0, $0, $0 + .byte $50, $14, $50, $50, $55, $54, $82, $82 + .byte $2a, $80, $0, $0, $0, $0, $0, $0 .byte $2, $80, $2a, $a0, $a, $0, $2a, $80 .byte $2a, $80, $2, $a0, $aa, $a0, $a, $80 .byte $aa, $a0, $2a, $80, $2a, $80, $a, $0 @@ -246,7 +246,7 @@ _font160: .byte $a0, $28, $a, $80, $aa, $a0, $2a, $80 .byte $aa, $a0, $2a, $80, $aa, $a0, $a0, $a0 .byte $a0, $a0, $a0, $28, $a0, $28, $a0, $a0 - .byte $aa, $a8, $3f, $c0, $c3, $c3, $0, $0 + .byte $aa, $a8, $c3, $c3, $3f, $c0, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $3f, $f0 .byte $f, $0, $3f, $c0, $3f, $c0, $3, $f0 .byte $ff, $f0, $f, $c0, $ff, $f0, $3f, $c0 diff --git a/libsrc/atari7800/font160flipped.png b/libsrc/atari7800/font160flipped.png index 289f29c47c163c9dd364467d5a4f1d3202433d5f..ae237c74bc660ca30a72977999a37b3b54e2e726 100644 GIT binary patch delta 2897 zcmV-X3$FB|7mOE>Bmvx!B_DrTj^#EC{MRXR1alLq<4_xr8|3&Y`MI~5PBH_;hV9p~ zOi@+ElDe$F{@mpc98@Wann!K5UO2RA<HV1+UPrs{bm@J6JM?M&(q7&_Vl)Y!^7_;B z^`u0*eSGlNo%+}I63-isC(zr-Pe3^%Gk(m^Nur%!?W9kjwq8GK3;%zdYUkH;JRR>; zo~u7W?~Jb3-{o_II#8O1frNPp$#vi3m4Td#CGphz&ivM*5(N*E_GAJ;zD(}};Lia4 z2tK{Q{sH}qzXzZ5=^;O0S>ITz-@hRH9{d~PPXo()M*Q^!XtkfF^IUt+*n7QZms){n zeH3+rO>be)u>*3sKdXN@9hc#^-)F-aS6%~@&ud&A=b%OmR(2t!NlBa5{TwuqqVi(L zlX<Y*Z6VH$2e=||gp)SAG?^0MZSX20Xy*4^=pMJ-;|&UoJPBQy5R7iJ|KTkE_VRbm zviCR;(G4iySRpSyB0w64xpPM^5JLOm&2E6-&WHZ%ldvFFFlc`_%z+8!)n6gH(TBF= z=2_6s@O-?W_<RBYB8+WFh6D^;mBe5)moqyNa10QX$ecyFg8?$*i6mJ?Di`PAGd8|) zy8E(m<<ksr0ud%v9NaWXkfmzSk840fX<}+-)!d?3v#e6JTCLUVF}ZYcb@S@(;mtE7 zG%RX(M6}4pP2hil)@t(>t+h-piGdQa68#e`ox61H)@%13z4aWB&(L9`4j(bv$jMVC zY+}~wGiIB)s4O_e(q*eIU$NTC4Xth2x^36(J9gXo&f3H3Pv>v2Mh|OzGj;m;J8Nhy z?r$OJ*ohs^z!)omaX$<|(0n+%f>il1cR0HmqbQ7#q#b{5%A~^>DAYx4o8GzmVD6WA zD;B@R8~+z`<xuy3Fjqj`&%AxZ+C1yrxEXs@;lcD0RNtnQy}=qxXVf`Ig?UXlO2|&i zE)^^9v|QJ{IPmR|;4f<=_kr*Oo!ed&8C5EMM^~SW0#EHcXWvZGmhP5I+TK1h6&C;; z(0Dg(G+ckBRZ=4xYXi#6($^Jx^sTg3q5z*2XZY%>nNph^7Dvcx`(VfjJJ;OM1<}b7 z@~F1T1UybVrgms>)))iq?$-DkZ7V*(xH_9?cL#K1Ub!M6rH<sTbz!M?Us@)NIWFr# zLj*nLeAi-0A8?onG<OE&vJRlCuL|5R1F-^{0hfP5dOWHYq#E5JN<GWW9N1)R1N^!Z zIOPNo)o3H|*0UBh_2m<<4_{ar&<2OPSxXzS29O2nFe(~#_2vfZY1!xl47y|{Fp}4b ziQ>hi8sb15S8_lw1vuOsjvWo`Baa*nqKgWUk-6gH1}UK0MgyXtU8ly1wrlH+y7^i= zi+6uH>8oxmWqUg8(R=5#tu=bJY=Lru59>mmOA_YDh)@UEnb?lFtlDT5lo!OiC#E3- z5{6UkLvm!@i*BC6H&BM3#3XPOmS>L`DQtvlYJiYi!Q#2jddUD$%pfMLqCQ%vEozv8 zOq3zwHtW2V%@ucb#DP?>5Y#k{Itn0<g~fk2Wx$zuqdaSaK(Ly?3h*v_PrGu4Ow4$U zBL@WX8)L)Nz$hxSI7$I14b&xGfVBmu@DM^Gz+ZBv#;^(dx{mXly7LARUnlSjdRNPW zFF_*~f}`fBNnT;F&dAAyq1ttq6h!2Gz#+PaZL=0K1Y4khD|!sF0y~wu+H{r)v;u#C zJ4S~JP`W%B9{~vDf`RnjI<2aZrJe0;Pb5nabfbdG3W9sUs$!uxiWy`^?E>cnrYr62 zpdsEhdad(R4`U5Ib&W8X+Bot#TR(WKMi=}806|nUDBova0MfCw!J^gOplFfxa)zzg zP+CXLVwybq`JiIM4!T%TAoVB+wugWE0fElmj;!Q02XseAgFh2?zOy^b&anN0x1#hL z;4OQgvg!`l$Aqn1uwh<x8UXa8=Sw?*!6Dnn<wj$>;JZWqvCKWeV)+}w7#boxqHhHN z00D$)LqkwWLqi~Na&Km7Y-Iodc$|HaJxIeq9K~PLN<}IT?I7Zip*pqT7vg`YRVYG* zP%E_RU~=gfG-*guTpR`0f`cE6RR<SmT^(EnLGS~_(aA~CMN0f%QfLwD!Ery{-Fw`< z1B6C}X;xqi&~)2OClg{ew<-o-5rBX&Vi=d1Wz0!Z3SGz7J$!t<i}S4R=l&f1YTjai zPb8jYhG`RT5KnK~2Iqa^2rGZdD)BjS%%lqvKXP61_>FVXWr1f#%uIToI6^EIJ6P#p zRx&l>DdMQA>69;IJytnyan>p|*19KuVJNS!EOVXaFp^lr5+sOFP(v9N*of1rlVTxF z`-v|8A=fXFOCeVoj2sK7LWAu3!T;cQw^m_t!b=JzfSwn}`4|C$yFh=l?l|Aaj?+8= z{LjFZ-u71;z|1G<^|ls00tU8$i|e+g>;acMz~GZ1o3bnUX$pk`@P0<$lmo)IK;N3z zTWcSu4?u>xO5Felhrno&ve&!3ySKBqf6uh~`vH}ka<y9}0LTCU01Qw}R7C&)0RI30 zJ^ujz|Njn{&M*J~011=M2OWPCFcxOAqW=H@1Di=iK~zY`t(8G)<T?~ZUsc5rOu)ZE zo_~5IJZk8v!4CAFt3ck5$td(HM2&=3A;`3$w<4&i!2e!JRh0!q#<Kh*jPKFAPa^XA zDx!q#Fv}OUw>J@;N5}Q6zWMPXGUm}KeAPGi9o@HIjWl>R0MMHSS3iFrY(MvNBk08- z(wJpl>>`adhBH<z)+nQzd69#$iZQGb#xSzq-&<+%%@zO#x8WMrqaW5`Z3VqJL|V74 zo8P4M&T+=;%{%RMyKZuHUNeSO!Wc&W=buhGe6s_9DekzYa7t5{LMP}YBGSb@>}i)S z#mJd7?kSFO?7}Xmm_~obuu2%iC}j$bkvjmZAObCS6l4ywF^bKoCnb2~XbBj0fOLxj zj8zyZ)jGKY@ERh}az{b#xH_lVoPO4VM~;?&V+TmLD8P7)k=9+5JAgDo1X}JWD4s%$ zBU>C_M!_RTOCYiXq+1kV(umPm63X_Jzbv%C0sydsS*%n57*l^IM5$TL##R8paaMR! zO3rvYm;!FG4f3XW@&n~>8!fN_0PNs4FBJgB)Co~~)vNOr0B~G1-n5nr-j1$-+kA_> zX`j>7)ucUz9RTq65qnqxU`(A5HHI<7Q~?0Tb;KLAUh#H{1>BxG<W2Wd0nqyez}e#W z=Vs2rXIKKJz|Maf0$`dOVWJE6TFGM108r+8DFDte1q?L%f!;3wE*`(Xwrdu?!V)kA zcGeL9)7%LYU9i_$Hh%$tGCxQGaDgdcpfyeOegSYz`2Em@EIhyxFa>rt5&+XY3KLzh z*Q4y|3IJt(k^<lgQ@}vsW&tC$2pUUywDJP6#R%qe28e&j0GRry2{eJ?ysZGZ)R@`8 z0#0fXbe{5P<qcws5!~kt5SIZk^-&XO0?m0}0dT2vtAhoi)FK!Y<<ZJJ#1<pO&lw;w z17PZ-CeQ>U=Tim1r7?!`y>GwF1AywYkcN9+_0!|E20RtF3w4Wy;d2?t_kaHs0EPtA z_jmUIpof1fq~)Gh{q%UP0nf$lLfztF_*@3^{rlenz>$Fd`6oUAj8hiUanGxMdc4+v zm*RGzZb>kFE(7`g`=bDeBv5L=>uW#X0Q4qT{`tVlKQE@71@}|HHW|nP(if?xfa&Y~ z0I=A%w_&{j7+kLW>yedz-CQ{f?x%onGms;sZ&E=|0XNk90buhVA5*vim}0K{;l#=x v_E^q>`zesR4CDmqyVO%4PW65O;3@Dw*MM*7sN7Y500000NkvXXu0mjf#bI<c delta 2899 zcmV-Z3#{~v7o!)DBmwl1B_Drnmh7qx{Ld<~1SBCOEe8aglO1IFDcs$2=YAx4@0_%! zZ8ydss!AoM?0^09lz-quUAQzg@6mh3r$q}Mxbgb>#B-+Fp7ZC^-mO2im#>!?O@gbu ze%g3lX`o$yyzuEx^XK;B?<ef<fj%?82b4QA<7Ryi67BqIr}iEw_UnJ9huim1C%>-w z?)ZfA{?7NHPek?gyL@kG29%a!B4OS_QlGQGB9QxK8MwCR%;-lFxM%T#3(04#0OY6T z{Q&qoK)-@dFR*_>zw)2K=ke|#zhK!vto1)XApJA=55(UlmamBT=LZ}g#C`|)oaN{2 z*Xl;=K(xOV^?*&EVbFhZ0&;m?>o^Qw#l1a8;P5(Xg7Q_fP8>-=3|3B|MvDd=+Rrs9 z5n|)bhAVTjJZ&z<!6}!gb`LsiU~Gwlv*cYw(9B=4&@*p5^CdZEUWBep7>pkJ|HD!K z+rz(elymYzL=T|+V1>B&iU46;=I$B2KnR^TZ~6fIIo|ZwZ^D0qRKcJ=Fgq4F>U<3` zm40YT9-amL6xX*G6kG2B01@U^1VaJ_YKP#dQ#EEI0*(%X1|nx^Ji!2|@<Nc@L^>B^ z=Q}svF?#y4a_8F&Zvqi2T@2hHr$AO~3jJ7fXlSTtQ`N4fUNm%c>8)$;-TF1TVPehH zx|z9!4Hs{&-raxPJ$wX*zymdUSa?K?!DV2gfw2bq54234GTYSIr%j(RM?yZ?QnRO} zXXIGCWWgp@U$%V38k@?7Q|z{N_ifvE>~WyABc~lb{n+snXMC~tX7#t@Z?Hyh*7#xS z_Omb6&|1tsL(sJoy_|tDZUn~dG5|sI<*Yij#+SLvSq*<iQYa%xz1);VmoZS-HnAT1 z;_e4?e~GuE{+D>;|HWLn)crr0E1>Ro-u}Sax^*re#$H)?F|C5^J2cvfVktLy&r^4r zZy4X%cs0h9j@r9)?220PR6bZA7#!UP&qSZu&b9+L>r}k0Q}HTYOUh~eqyy)W-KV41 zI(>xT8!>-T0QORDMyqasOQ`oU*TN!3IY>e*WmTI4(s|bqqcaxq@HN`5Ac^Z4w)S9v zC}z`Ef<J@EG6FxNNThA(0S+rV1S`M6G`ONIv3X|&qkwjuybHUj4|>uV!BufKr*%R~ zb4SJM8#+z&&4o9)i*IB~<Fz9Q@$^A7B)jLxYrTK-dWI+Mx*EaXV-zJj8%kVTPLA2r z=Mhwb23b~FzJX_d(1o#w?YZQfzCA#u(OsNpr?X4d8}LxjqiNJ*$QEA<p^vq<<P39B zNCOI9SapALPBt<IKfy7Qq$w5MDxe$TtT@Dg^yt#y6I9cnmgZQT1H|gUBxGjD@fd;f zB^!S@GB`b}EGVzrWdqS>J7+*jd8})j+ZXkmDiw-H(Ts$Ytg+c{OZxKY*mm@`EmuKx zOVB~j0wssV(G8n8moI|IlCS6jT1$uuy^zr&NdMVxz7aBbNLP3^KvD5dX#-m=KiLOF z*1BVPQhlbtJJOJR7+HCC-QEUL30ZtF4k~{rI+xW()D_rdQEroFK3bhfF<oQnlQ$~B zsb)W@C!jy)Hn;`+2!AzGz}cd5^x|_A0z6xgt60X6MLF&=@B|fS!#qG8t)YNf2ITIk z3yxN=8Qny*5`YSNncObc%bFqw_rY{=lR6w)v<}ZTZk0?J(%lz6J<V+<Ok<ksDXM?r zg77A0r*2TI)*JZ_NJ)^K;>dHu?4Xl8c=17HlxvKbs6D$W<W$*l$+_l$XvvX&l)w&R zW4M=Z^xg-J+xrxlDL~vq@1`2bzH|1z!Z$V%sH^o72HSgQ8g_rM+vZd7Kf#9as#a`< z*4#kSu-ic$n+9=Jk^S19o>mJFofChqYR-@z-so5(c1|D|6&<Avet^xEq#1G(t32{r z0(zsP!m^Rib(LwbKgE^|ehbAS7ZKT>Pa1Tvep1dtneYHIEgQ>?{$@Nq@+83<AifN2 zDR74ZwPAfrA@KuQ)$(t&5FS<Catgr!00D(*LqkwWLqi~Na&Km7Y-Iodc$||U1`B_s zR2=LeBAB5%Sr8QwT(k;Bs8DK!Rvk<({emV9Ns5c3;979-W3lSs;;gHKs~`w|fH*oi zDY{6B|4RxjVmvtR$GdxvyLW)ls4&$Gi~*`<8R<k^%;r|b;41<U5W)~<BxdS!sZ<i4 z<Le$izTU-nmiM_oM~{*>8Q>F%XPJL)Si~E|Q=68~d7n7KN|Hi+PCRPR1&JTIF1!53 zx#+OKGb2VOJx?4V7K<G$cQ7j%D)A(7R8cj`7qTuZoVPful^Sc^lfN*W*H)IfPIC|m zEMf^Mh>%f385LNF(W;SRB2D{o5C4GUPmxO|R~d{P3#dYc<oLn=;CHuXVPb#WO$x_> zt{2<>7zTp7K(lV!-^aGyJOTXAz?IhaR~x|eC+YRJ7Ci!bw}Ff6wkGcZmpefJlP(#O zBl&3xg#z$?M&FbJ`fh>Hn%i4zAEysMhPq1L00)P_NRhJFJ>K2j+1tNoTK)Y1cY$)L zy-2D$0000CP)t-s00030005Jx2P=ON92LaOCb9qk1DQ!gK~zY`t(8HF<TwyT!<l6$ zOo69C-VePJUJdltU={T2l_1~8)T-%Ih+GMu!cg0Wxr!jS0?+@FGOG?yGM43#F#b>R zLn3IeuZj<8jC@&pd(-)OTEFg_@9$H7p7*c%;<BJ?<=f9TKN~aH1=nC2H<*9Hw1QqN zBCTD_;udM0wVZKkaaLK?nnfDx6k}K=jA7(D`TncJH#-0r{f28?PhnigwG;H>5$XK4 zZef!yc+Z)jx8Swc-MY!i2hA8(31b+AUVi-P@y#9p=6K+m_j8)}dG7_iL`3>{>_<AJ zPcd>PO-G7TocjHcb4(LsSS5dqVU#L|*4_a)1rcbuqafQDYZaSSPfGB}(Gsxi0O=kD z7^g5&NT|-=0R#;ZXt|>xe_FlQY+gTW!6QdYz_SCSdlX=T#z-Tf`gjMBCWt`G9R<bn z9^=For<Y0a$k7sr>;UN=1(-BpG?j#E#SJAH8nXZZ{@yN5DgcbB6QX~VQO3Fo05~oR zZ_s+dTVo5j#kI(r_NkLFifkJ#umJ%6-fuxF0F0><qV%d)A1VOgxN5vX>lJS&U%+jl zL*8`Hy`)*>IB0<b0Pyz_dsqQrOq~!l?b9Ap1ppkk32)GP!`nF)a7XHqH~mX>{s(}I z!|$8cWZ?#ufGM!EmH>a4=2n>Kg1uI<xC;Q3`9TVR3rqn68SMK5z%}6a*KW<iS6Bk3 zz|MLCV48bjq6_v~%NDKxQ07M|0Io0v476h39{_F%zrXi;7QVw0Fa>rt5&+XY3KLzh z*OMIS1^{J#mIB}gQ@}vAmcZdsQCLTLwDJP6#R&Fu28hi7nEHRH2{eJ?ysH4X)LJZq z!=)BMA1IGj-XOLZ!GF#G@fiS9A2op{(3}qy0GE1?WpKFEA{Z0p(aHzJ79+&Z86YtO zVCthL&;%3bQw6}KG4ADi)_(i>0HB5}q~)Gh{q%UP0Z+y4LfztE_*@3^{qJ7|fF%Lt z{r6uF0D8<qI_`gY)lZMt8t`1)F4QdnhR<an-@pGZ06Yok7=QeE0GQ@1r01Sj{q%UP z0WZbvLfw*J_*@3^{og+YKqP@u0|xW@dIvDrT=`AI%5N51&Vt7&;MxqNf%HY{DPV_s ze*jqAxW2vJ0gOIZ{`JJlziz&q1&>o8bQ#DA(l@E6fFD2W{Q+PL^Zx#R2QbH6`S&v` x|9-@B7CcUY)Mp@PNI#^W0&%YQ2LPS|{{w7yZk3p#3Zwu4002ovPDHLkV1oQgdk+8r From 885b360a41e56b056372acadfdd517ede327338e Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Sat, 2 Apr 2022 23:09:05 +0200 Subject: [PATCH 1161/2710] Fix color 1 and 2 (grey/green levels) --- libsrc/gamate/cputc.s | 7 ++++--- util/atari/ataricvt.exe | Bin 0 -> 65526 bytes util/gamate/gamate-fixcart.exe | Bin 0 -> 67781 bytes 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100755 util/atari/ataricvt.exe create mode 100755 util/gamate/gamate-fixcart.exe diff --git a/libsrc/gamate/cputc.s b/libsrc/gamate/cputc.s index 435bebfad..7f407ea00 100644 --- a/libsrc/gamate/cputc.s +++ b/libsrc/gamate/cputc.s @@ -94,11 +94,12 @@ putchar: adc CURS_X sta LCD_X + ldy #$F8 + lda CHARCOLOR and #1 beq @delete1 - ldy #$F8 @copylp1: lda (ptr3),y eor RVS @@ -125,11 +126,11 @@ putchar: lda _plotlo,x sta LCD_Y + ldy #$F8 + lda CHARCOLOR and #2 beq @delete2 - - ldy #$F8 @copylp2: lda (ptr3),y diff --git a/util/atari/ataricvt.exe b/util/atari/ataricvt.exe new file mode 100755 index 0000000000000000000000000000000000000000..78c628e3e6d1719bbbcbe18871bc5b58da420604 GIT binary patch literal 65526 zcmeHw3t(Kub@tqSUg^quS+Zqp<CT%Yfc0L<GT5+sOQ2WuFouMzSJFxrmL+9(<p<Ej z#gO0viPMmVB>oc!<PS+mOIw<fM;kXUCk^dS(=>h27V;-8B(xzdq$K$h|KB%rpSzM} z2&7HJmG0e{GiT1soO9-JXU@#+zwU(a3n2oy&zuqBQT+0X$>-T0M-g1O>C=Vck-R^v zd{pcEv&zwZGwH}eYJNJEI1rgg%+1YbBIC(OYH=<yGZ*O?9Elv5pG?-QT9sdAk{;?5 zqE9Opm%XohTzpxG-|`9Zq_|KsG~X7X11W+VFi~vY^fPz#1I~PFxcMuuqwvA=#vK~V zbyN}{E+fca`$wXS1tEq=|ELg8+eB25e4Y^E2|8jzY><F+d)!I7XF;vWBoAj0es>s; zV%#iiR{DE|*jqE1$RrRH!)^1TfF9?H32~|>r4S!uS?X|;Rv~WJ6$6=?@x__h$(hL} z!T}J(FU9S;VhE{?DnJjFg9RbIG6l1qF-b3-roWg%*h^RLb(Hy=QTda+UH}g1Rd{h@ zvK;Bu1i(@jN8t$J&SHE_;w5M2fhc8j0yr$kX56kTCPZ6py(-9I=I>tI#H+&Xx?;p@ z*dZa$@5j%>xMy)+C_(lkM!aaf^q*RVp9qMO$G<5-_9I5TCdpxOJ>^;lynOuLi`#X@ zh}XPbLXPnn10M7DF$uCCG2(4+k^U>!;AaSU<lRFOWItlW+o8&fsw~8UN$-m`igd() zXF<k}f9Ke@pF8$!@##QS@!FVp`X<CV-BHDC^Os^02;<MwZ#hd?`Yd77X9;^f!oK>2 z6V`?NT(f)R*s~j$W?f92DSvDsCXPKDxb0NYt#3glj(@=p`36Gn*!8#yzhCT)$qW}E z*6|HhXa4%wv-<Hbvj|&Uko!d>CT{y-ri1|jMhR543?ZFwvd{qpx(XdD0Yk1rqIV^q zfBhTd*MDK^glr%GnB4f@BX?yk6y)Et757Q1r!sjKwa4#cc5XYBDL5XeI#d1?l}D8G z%$7UhK7rp8=I_Ji?`P#NN`6O2Rm92!Vn5xB#88$q<#z+a;gsUoOZ9`b704vTd&e89 zs-C_R0>16<i*9`aVz{IH9;9$bAChkmJP3@_?fPd7{uKD>J9ZRLUZ;=Uisu-m+P>{5 zwB~es-JSBMEP`SmA1OY5_14qvJr9F_r`!8Z$)BOe<<IDo@~3J8c~7#ysJM3x5jWf; ze<BadpN^yaImWvEAY7FH<8a>*J51-7=q#@ylfPbc+aJ=mDiVS3t3Z=wsiN=eMYmq& zW7t+RYy*Ae+sv?^5pz|Y8TO=%7d68^FT+~Qum@z=PBZMy(#Q0U7b6$^9SYo0&P0w6 z>5BgGp@KWgN&5H@a7gv|P}v>jBzSzN;*N6CIzA-z9Jzn`Ch+2Pdz6X<Z9m?A^Xc}M z7(A!jcS_A}j}<4#kGp~VSOZ=6*shasq4luq>3e+8m@ig5id>4<e_j`N9Ta!m{s25m z!lz?Ox-lu;<M~qJF(u=pM}fxc^if;JF(u=el5tGQxM%C>m=bVI2{@(%98&_0DFG`| zF(u%b5^zijIHm-A)Ggre|Ln|}<6lrBzHK8s&-?=(tY>!=A1^1rpSgellxJweamm7G zG6Xy#n`#NKI4*ho%mCn1C+-+3J1&|3Or7ZmAxh<$Qqx~>T&lw}&;L~6>&K-WpZTWg z4;+^Qe&$j5Pn<ygyl>lHNDi&VeRawaxGzcvs%jxPe(c$TV_)3x1v5*>p52D}9KB<- zst#;!IrgHj=+;x<%Ao-?4mYxz*OkXa{i)l&dc3Tv=<ZX<ENGn$k~GD4d=*o>pNjr; zF{!_J=Kihl6utXY(I-zG`{K6G7YOp_*o*$f^~aF{NJd$$jw3|`KXVh@;EU7+2mJ(4 zb-R%%t9p7AXvjG-^>OGi5<merAWKhAAOI!Ua5_ln8C>5x4tiEnK37u3a6e-J!)na& zE7L_DEl_rQb!N*+v;Di*{C&XueaQTM#Qc5K{5>Uqr%tFpwr9v*6&f?yXvUazNTTc~ zXU?z#P~a+pQ6pae42MouUif=v%Y!Ce_A@6=*!|(t*Zug+nWwME11!&+zw7;on5jSZ z;#)EsNWYJvSE|s(Z+*4?)EDmhBrsS7^YHWZHUxd|)YJ+1+4DcWf&Pb2oOovak39S# zLl@9=@}gThUVFU8fnN{@CXP%`PfWzq)%7)#v$G-|PbH^k(wSr`K81I<WPE0BY97$Z z<Wg|tvAezfvdGr%fw7At_4PFkHFc4Ox`z6??F}uFtzF5<`BWm(eq{O(-u_f@b;HHE zah9U96zt{Del5<+lgWQ)zAdF2fW3D8d>mk3z7F?>817ObhDSO^4nN;{{kkK^+Fn=x zwU3_uS!O-QB(Ginb2w0D7Dc;pSZFuv+WLY(;C2X^Q!c!p{M?x{ZzE1?p?;gMZB@{B z>`Oqgr-HKMZ8PJwoH}zxPET0zy58o0Yv5SW_s;w;w0^nubStT}8#0YP#Ca6>weEEG z%Vd^KCt{{E^yM>W-sp~($!Ek~ytXbIms2M!+ucYrf?v^I7#S_Bz;pRH9NRL^QN*$8 zz;e8^a3@~^ZqG}=-F6PRTh06y1NREP4?qsbd?=#-y;|Xhs|q8&&iq2X>kEZ}E@QcJ zSUOPfg)?U^1_|;hURZ`_dtm@x%6cd64G4b@zX-4My)nNq&~5C&v&ZO>&(Xpv1l(L0 zAYW#2KLPw8@o_Dew#CC!z?E}R=YabFa95H|73i>BUjc3uzcyd?NCg-y)LX$52CSU7 z=og)Gs2IO|&z%cSo~u$qaNhc`3l;<HD=xo-4LJh-EbbR^>u<u8B<?EQEx7w|zXA6o z?giX8<354=ByL_0;`fud{}lHVChV1_w;lu6iNlF_0(0#%86igCKaiN2WBN~tIL5p2 ziBzU8RtNw4wD`<{g~e1dzK}tYMVEgfF)L@7h4{K3qht(WF$&HkCiXF+_=W|WnZsat zE<wG1-cORaNfrJN2c}ZVq!8Z<OeZrF`x2!4AHf4Q-HFh`e0t_^{6G@0nQ56Xe|TZh z!i|JeNelURwJy-=n;B0fQb)wE`MQ&t{`twp*<?>*ZgMu+3T_fMl$xJtot#W1IV=Ac z{=WIdq!|YoT<dr_w<^7QK_~+a_kDHe@IYr@V}pEq0QuLhUuF(ya#;cW<56!ZG&vUq zoz8(1uLt)YguKISHwoK$<>3Rfk%P%pdS-rZ*XH_~y3LW~+{FCk%-r;@&10io)h(MN z=?s)NF*`q(+_m{gGQIiAEAn?H(&^-Z@!2C0#Ggy=+Ps*WyDUAi4^<>xePCuHHJ_fJ z%2ZFxAGj=$K2US8esknNVs2(Cna=EXCw4`CB(gJ;T1;np@dkU2#2Pm<8X~5X6N{;t z%n{`UAeDU6B9cf>4y9%e&desKlW8l=9ol&q5i=-pU-DpbHZsfSuFZ*b@7%%p{mInk zS}W4d+GQ#3taYcpv(_#I<L*Sk7ZRD7@tIj<Z{=cn(8(>8ft`tkh1r=25SpK}vs77K zJ-RO$>FvOh?d<#^tk_NxC7F)6up{Zkg@yT4CNedjid+Mf`9tZ*Zp;`YBGuJ4DHAC< zi51`8$z7XoN;cHh*GHSSSJyX1o2#RZ6HV2Lrm19gU0us$GMQ|gY@Dk5H5YqceqOep zH6M*l^^Gm#I}+7RlRJ=)sqx9`mSn?Zb)q2}t!rp#n%dErcxCd@a@KrA6Ae=hEy>2} zrpECd)zN6QzIr^dW1@PpdB<cl5lu8F8(UtXeALvRH7E5`&D)zNwl`O|)FtbyqYaHa zs&_Pvk5{)ePS#B|Pu5K)w#%GEWX*sEzI@Tt*PS&dEy=p6?TPw^>hY=ZM#v`FQVmHp zRYzN<CY$OK^-YN#QZ_0lJ8NB9DXT`UN7>Po)LL!H6`X>7?OKup#cB<`pzdVdhw46A z_u0D7*ZpbT*XzDr_k+5h)&=Sd>o?YS*ALfUTR&Bws=u-RmiphQf2h8&p{=2}VW{Ey zhRKHg4XK7B4R39@tKsg3_cwgF;g1_0Yxui{ryG9Q5NIrIj5O9X?riL6>~GxN7;oIy z_@>4i8&5R;uf_)&Ki>EUjh}1$YU6W_7e-kFu84L<`=TS!>!Q=qx#(i_=IC3a4@Lhd z`d88KL|=#oo64KEG)0?sHFY)J()626_cVQ|=_5^#G?h1B+I&m%Z#4gA^ZS}V)cmpL z-)nxn`CpoS+w-^IsutFlEc9zYivxTY;=GS-d{P_}@_k>z)Vq>Te5uq5KY`WTh#AHo z761NnE1XNd);pLJ9$agMb1gVGd>TUzHF)46ac=lmF)gLSxq6%%e(8EE{5gcn_gyoO zDt}L3X@zsOZHtS53jddGD}3*om^8&PqnqVxyxIz1K)5Tq89sq243)oA2#;Ek@mq%5 zC*FlA3fJJs75-oC{1ZqvC^VV5wV1|_wAXJx=b8LS^?}SH25-~Jxnyc)0^USwV&ATr z=9cD2^)&vcC&wezgAI}DskwQM*$&Ll!A%pS3|0iHrw-sfB{7|>o=wh8XZGzv{{T=5 zfQk7z4h}PEKr*SsL^1^jAQStmVP2L=PGsg&)#*%Xeh$fycvcuXnuP=wFm|QW3)SO` zQ&UNx&)k^Y6%`xF@<u*fs;&ouc##u9;>0t;_ZMq7Ldtp|yf~M}n^|%aqoIt@ec|*z z4t~5)J%}OfbVNQRT0ua%C+8Q(XOluN4#c}==M$Owh8Ce~A^9d)LE9XpYDe-D;18=* zCDfaUrrUl=U|k^Can0axhw$IE@m(@jV2X(_1vASMPxl2?o@M#sSkTEdHlT=s{t6}* zjK>#k(BL{*YCSB|&&`Ct0Zm0oJdXF`#4P#be~=```UVHO<3ppvBDj4W^P+O5AfLOa z9g#}$`kWzS->6B>2IKQnQ_WF8LVGLQWj?0xGE9G_@Yig=!nm>Y5J&{$X;V6(cdcdC z&kKY;?0*s=tK;!Q6Z^zR3Z`w(xOi|igG7iqd=9QKi{=;W_0Wg%Hef<5fVqMBMF=(Y zK$z4BIGC7SOp4G)gP%c!08%_K4!z2-q@j=bNd@d0>w~aGc#SG)yl=4m>iDS83yMAk zD#18}FtHyI!WXQ+63H0xwwY<Nz9JmeY3~w<&(ZQP+`L*^zXam@MR>c+K_GzHiNl8` z(*PJs5#p32yk+zj1mY@iJ$+EB!y?>bJO-L&!oL?kp;|niz%9$lwBwlrqAI*ozZ>-% z<;xt1<K04pugJ4X49EdYh=i|{5afV3`{ox@A{>(-U4afvCXR@3s{|n*#6n#b;Wi0D zUI;mo#1u!kU4qIK=#Y%pAwd-;mIQT5&;|vXNl&K1k}e60$Tk&f93IraEAu@ymq<;6 zD?|D8qac&%`S?CL?;*mk%Omh;S$t|Pb7Ucz79-?>(8}U7Y0mzL-Sh`E5u$v43|z^b zO=6=pFLXi+kL#V7khDZIQA!`Yc)bzf$q<<Z)=bSI4^w$pAxu9X;UYYJJ{fzv@RMxl zIt1`G>HFhwZ-NZcXn%wrzEOV%0D<^;BApcBn@X;rdIlij8{xfKB_i@a2Iwb%=aUa+ z*>{`|T9yd^?;#|DCE6quDi#PQefmTgWsN6OskwRN$EQ?Ti>EVq(H7xZpW(yUHy{D? zi{SCBuZ$2~LJ*CR^9d=y1lSyOW6q~b^#W1Z6wggS@bf<XvjxyIEsjQLAvrNKHItmQ zngO{)98RgU>ogNA!fD@{YLq6bfd#NQoteWNTzFBTwE#FVn@r3tE{O0UU;bZ%`c4fc zOE1m>>qeif9We{SN^+Bm*`dW3njnaq6-tkWh3aH-7H^;;{A<3lCqSrAi%%TPpidFu zqbkyngisFQU-#vap`#k=;UN)zz!$z7QT7yA+VG%nHKpI9S&%yMQC}$q+y@ZqV|;26 zeENjXcoy-V@D-qR(`+_=&sY3en0`DdAyeWJU;Yn)fJVblxl6&m6~b}}R(h3SX`bre zhv59%!Lr}>;t}MNHP(NED0H6opa}o(!!O&qC*Y78=u`e@Ex&9J(p|lMoy}3P5Pn`i zj@$;~;QtGyrY=GoerPpC;LU$ZH(G$H*#zs~i+N8WWmNwu%z%jSkEFK{8V$DoxMVL% ziH2Zyd`hYGPh@OVdTIC@{%I*SdIJP8Kfiwl(S?>z^^Q=+3Dh&6wvozQrNs|n>IDb^ zZQ~sPY=x>OlTd)Lwu+3|1`@OLtV6n%M>as^7RN={&}0^%Zq%s)O%@6|#kOpfCNl$l zT9isqtd%^5n9!v;=`Ybr$hU4NFDR8MN>Huw+5M_8YZU?Lk>o{#2v=ybwSpd@Crc-x zedlQf?5Fmq{DR5h^;*$Kz~sHMPM`$mYXyU7j3za!V-ev9R$~C#C-Uz>Tw=QvgdkJ! z6jo_GPVtHGX6-zRwKy&nuOPft`zeB{(d=0+(Mss0e`bCha=TPzK7bl7{o6FzD(J#b zh4nv#M{zub_B7fe3d0>*51Ip62uP(<E2S6y1F~jzDSt?dCngcxt(8_&Cq#%pdw^-` zUiss<`PM@J!ST7pG#U%i7vZ=0D%cN`d?uBd-yfe%u;SkCD`llb4io8#%na;Kq*#vo zib(^Fl^k(60l(o}%YLp(i%%yG97xD+5-t(G!&k)G0nsr%lOcEdwyg#yA-ohy7{1GQ zUKkmLoG{OroI_5~#f$LUeQTs72+qtOf=!HqzeB+npqChR9vHXaClvfJGS?hUs0_c; zS9}pNd=$k)$DNo}(BJeGZwK^t<TjZ>ZAh}c7U6fPyxz+MQ?88Mtq4CL;qIKgTLnDC zfHb&wXd-Q8=C@SPBg`a1oLs&~1$>qPjDwg~oO@Kz7q$34s{?tjYWyD)A&y2_6e-Si z%FjYbe^~juE&p0k{@e$A8F-ZrqCL3Jx1N3i%mt6|hkO;c0(4k}*xb-5iER`issvkM z(_i^q_?XYn4rh(o*S*h2)mmfflDOZ;q*W#!v*J~VReue)tUkg|u%9EWRcxlsO7sH) zpTZ+Voe#l;U#932Mo;g+$Y|?8duKc@0{+MS+YlB|nk(RyjjssWScF{x6hCPMd-?}E z#!xT)-z;Z5KbtjO517M$zF5c+ciy(u|AvsDJ>Jf%E91L&@dB)^@K!UyMVkln>$UZm zlhN2+&On3G3nIT!lYN%Z4kV^$CgS5W>4`;jruo~of)q2Vaoy=a;)eN@$Zt_FUBPDN z2-~4x1)8(OC6~GKFV|Kxv0^PbcaZB|`MWeD0zes3lB-|&ZJMzIfC^16W#zYP`MvON z(5#iI{0_|+2PC3Rachqv+okDmM@g$d1*4Gs9xd-EP_}A(YfFp#Ud^}-{%zW%@?WL= zbsBpLYG(>%>(}zg$EX4((Rkz!C{T+wo|Z~Xv_S>iDPa<8NI_y6-ch)Kmp`l-A3$;) z+CmDe2+Yu^mVZAWJsLJ9#bu_@4d!2il7O3gG*j;R*J`W24zxFD6Nj-#XHt8Ew)w{Z z9@h4uyjXt|`ES&WcEr0`ODxP-QrN5IeFnKds$fbA2?e{=q~9R&r?pjQK<jobYaKBE z1}$%E2^LJXg>-Upavrq+C9ya&s|t9xH&B-SfC{<?g2rpL8fxaxDd0&hvyVM3)G?Ww z!Yj4NPpgo7U3ww%7d6>aKOp?<u>D(*K|dR3*;`W=%(3VtaIT^<_$VjgzXDE)Lv@fa z6LEk6tU*))SrdIEDj&i>4X2;OW*L`)lF`h#zX5;f_wnE@E304lABB6>pW)#mMz8Q6 zgB(I*s8ipv&_klcRlV>+U`x_Z9En^6R!iEN$|qUx8v!YIPKZ=!t^=Ej)F^J%Mv2S9 zsWQoIWT7>PW7<tCqt%OBv=6O}RwsU4`|1*Co26=NMFq^vcRUE<0yE!oU0N#%onbH^ z!XLo=j}%S?98N(*70I;^kB+c5VnC&>)vWmv?PO6orcRhfHzIBEWrQfI2ZXtw1|$y< ztq#wCeCk@ADC$Qzneet{!e<apUVdch@C$E4cs0V8pe@ATLE@am+Q{EujY+JhP}EK6 z-cDe?GXg>0k6TldSX$PsmA2%pm6kngrFmzqH218PX3kn61vx9k2@QV&iiWgur-`)e zxhgGS&P{=idu~c|&rNB|PCIFKUmEI%R(A3I%U4wNW2En=!H;^;07I1iR?x+V@Gl}% zw+%gnR<PFg!0KZcaPmZc+*Ld9cEU+Y;VUj$0vyBW5ftCd1fGGzM;BThJPlVXBMMv; zg;t_jLefsInu33=jQdVe_z?(?nfOcG0aP0QJ4Fb;s5YYLVT4hiv6U4mQM><@Sic(D zU4hr_5!_?~N)J5)3%reQ9o`=`D_lF-0}Kt*MCk9!>Gr)-dJhT%Lj-yQ!l$Z-e-wWI zwFH`4ZF9IC73x=n!&jomy%D#y9@7VYWO2Bj9Jaz=Ar8OySBJy*VdwG`?#E3Xz9*N% z4dk#D{t9vU`@cFIz6*08U%_py34S}5!;R#y75;N__)}G?9qvTKbdhX_FTL~?Uo7*i znprDnsZ3@@EpsIgPb3#;wZnxmEPG*Ur5cmm)tFR(iKBx3-0N(ht6mk-37F_`8f0dI z>A|)1`rEPrFJ)owEK7Ek--ikCBe<VKUE=C)9lF9i?^q%)d(e^R9$e%tIR*+j%VEC$ z3aU?@>LZHjMyUO&?i*a^XPQ|<t6~Yv9!cdbJCZR;;#C_fM82obV|0v&<eH=ZFV;$G z-eFiC*H+}h9#;>yP9`U2xy-S3ZgF-NWG-fwaz|i>x!mT*a+}JxGj0pnOK*X_l^iC8 z;^xv@AXCVNFXfj@Z-E<2PfLik^cHy6TC(P1J#fEPU&nbUbA4<EQn@4$_}~66I5t=d zavw)z<>7)HafIJmcMCiaCMg2cx?A9*!Af8RMEC=MAAwV6-u=jslTP4cegh$w1|WX9 zzFGWscth44OK{ujuTylk;DU8!&shM)_TX@NJIDqZFZf${<Y~U~`T1E9{0=?7FxC<i zluwY^E11Pn^g+=Qx<v0rWA29l@NPXDUzq0@IJ7PA&k;%ZGgvcAW5yBl63GQjhDvb2 zKb@LiT!6)+2-Qf4?nkURYztHI^pOMONHkO{0}A{E!a(wf9Z)9&iv1Xl!tmIWYP}39 zlR;T2H^`t08RVqiD4`qtoM*_)98AjTNfC-laKt~CoJJkD!A%leCG(11fD`daEMaES zBGjytX<Pjs;C2bT*uN0RbR^!4Cz6v`g$uPv@Ff6)Bk^&RYk_kPp&b%_sUH(BZuH9} zcpJc8^vfl@nq)Ae3bv=`L};f3))3hN?vlV-nd>a#SID3`Gsv63l`^c}3UlbiWI%%q z$SPZ_3~Drky!6^+Skwx0=(Wp$CQLbSxf}}!8+q1EsO{QO%;?{-jyfMwEBfKPWKf>< z))ag*G;dq*Ry;Sl7T@=3`tOyZ`}5OCb9z2C1Gejr7+2v9TKLsmwb1{-cr*M@`qiAa z(Erd_3;(zM6E|?~9h#|sDxZ4(w10x_ik!dGKW$K}pY<!<*FRJG0=&;v%ud9Sl+gdA z{1|9#)kIKcdaQR~6ssM1RW%p0K#ny)-u88}h_Y1D8X)g;7hQ-P8|^)<!y<p9CM$38 zRRl?<<Zsf-*aQXlNYGIG2#gByN3^y3;YZ`C*4~XZimtWxUQkeUCo+h3%UpXmE?Ccn zvI2YU-H7TH=sx^vLBMEUO&`4bg|S_>LIJ<E_HJx9$PeAG>WHzuOg004x%O^sUr%4L zA8YSMi?I<@%0%#YkyiL99@X&6Hj8OvMO;)FJN56#gt<P>wRhu+JW^n*$2D}!MjBU2 z2y#G(TzfZS5`;WRBrcd6trApVg7AuJv`Gl^LL|BNZnR5KnF7hRccVjsDoiX%s#AhC zD3DrvH@YM&BC3awIbAab^((nHghg+;_HGR2(+_}a?cI1?9)U+I?6r4eB%gc`T7|Xx zZtRwjfF{C}(ID_8hdk@=#`t?>Vsib;m?)(WNpbnzm<*9$;0~AHjj6m3kU|Y}X-uC_ z-rg>Pq#FKhJb0VrgTD`VEmvo`l%yLs>i-u2znT*@ZYp8Tfmbf?88@p$ME;MVd>WP- zeDc8@`&box*8nbpA%vW7E=j}!2A1C+$1GvpbH=T{;5IBPY<m2yzNfJB%)97iV9|>m z8NlvEF9VBSq@A_sWnj_k^O%{;S@bfn=tTv~S@bfn=tUlR7QGBCda*j1i(Up6y%s<< zYthTVq8B^beOZfM1{S>t&tCL0u;@j&d(q3lq8F#hk9rop3@mzaf;DT=%fO-+^LlUA zqL+b1FA~mK^fIvM#egLiy$mdRF(_xz%fO-+1D06yGO*~yAlIUofkiK7=`peCxexjZ zAx3Kv%fKSmzoQHUnA86T7O{MohCFPWVZ6_`8Cnr>mZqoxh@ng}447n)H~`8d!+=S~ ze$a%}0ia0+AZ3I=;DB&t5Rmf;DNrUE223(Yqu6bdVZbD#6d5U_t}ShnVZbDV@#@Uw z)1)w9lJOSwB2l+Vh5?fdqP4h8G7OkxaJCi8=cY-90h0_inlTH)wi6~9jM<?~G7Okx z5CwW@n`9U;$!GwfKHDV2II1E+F=3>^x@o{9gB4+vd_N=%m}FFdrF&LcCK(27GT0>a zXcnkW7%<9UweJHAg8*feVZbV*4XHihTV+{g7%<DI0xzGGAS4F6j6R^iE+fbWLDu;H z;9S2`<Np$wF>Cx^Ate8AP><H&oG%v&K|YpU1YaZyowXhm5nK<y9LjdUAzLM%@{d}6 z*-h9c8OHPa4~p0(EePX<QnP)6HvCXB87&}q^Pkd<jzO7Z7%%4i4pK(1AWbriA4zW^ zS~-;T$0d)Tfao7AlMLf0GB)}GX_8_5w3KDuV4GwZX!_XXMJQvKWEe2XU;|fWnPeC+ z$sn(`LRD#!0V}mtWXv|pB*TD72H60WgGq(~lMH47>V_2r111?P6m$wE83s%;$TaAa zG|4bvk`YBr=#n(aFkq5FzA2Lo111@y1l6)kG7OkxkO1_^G|4bvl0gXc$TZ0?V3NW2 z7qoiJF9s<FOfrg~4tq_L3<D+^_aal1a!p+>_!}_EU=sn8jHeNo*e<~nWD1_bf_axT z$uMA&L9v#aCK<+7O`k$c)szSWHW~ENFKsXk*kmxT0n;YKfK7&M1VoV98Z5)3)V9em zIxy6e)KCn_1x6Y4f|@kSFkqBHziE_Vz$oLhpj{xs{E?jr`yXiE+flBs15;|_I^}08 zE&XBT|98v3R)i@pHg__7qX?4>TOG?!dYdhOg(zX0A(<tD1P9q1l(0scEbAt4J04*c z@C|TCN<LBO-hF8_`qxr3!((Wxe%(R}ivoN7ovZZW$Ne8cnBQEjg_jHk7i=s6*r$LJ zB#n@@N+14aIpYPX>3Pn|g7b>GYIhmsFY9zE2D(c6PXgq#TLvEkMDQO-==*qJoS{a? z7=r5$=^TUmxuCB9cF_?OLipt%<ahFAhp+g&7dW!?A^F^-669!IB}h~sUrEihh#%&$ z4DYfdiUQZFgL`c=Qdp)>u12!+L}060xW>qfFe4TOEG%3rVF3l3OwJ}@2UA#)Ukejy z-3=t}Iteat;^XzV@I2!p5G{6q@i@WjCAiE(g76LbJAq!|fvXrBWyl8Tfnx)JREtWr z66%-<#u~Q*MikJt15nUv2Wn$pu3+)@(ZS((U+>5$QOmT|94QvY;~j2rxdI3O94Xef zU)w#}HxeIe?HK93u2Ym4#`mCJC+kb&SC3pfGTPZ6AMNe$6a~e*0>#(D%3tf7KQu(k zh2kp%d7LT`TF=b%zWPyEGhyX4pkI%=6p*k61#49>T^JsU#cct92n5fMUp+R`IUFCs zyHaOIyrXrrRXpl1?g$jG!)^<0IGIkS4kjn-MR8X^e-m_2XuVw8Pc1HFR07>9XS$8s zAc}heI-{4Z>X=C%p#5{ZG=eVfRhdT5X%TJ|#a9LNOMr~N(?hv!CXp7!R|oRfqDT+> zRXrtQ1KS5QxU%A227uJ;|APYNl%%*1YKKxb5-mD{8JFbb7)sQ^<4%j;6s$T3xDY>k zOXV0GP2qrSdM5o1b>=b<OsQyi8dpZYuRjmWZNEmn5f1eZbPX#1*nqUpRuGLC-JPSO zJ;R-?9RsZppU(s-1V4QvoukT!^C_gyg&s7~cXtkt^bQWlbV7uYV0?Fdynk?PU^G73 z+Sb=O0t-fj$dXIp>GTeD4$BTB&!iNGo^=fO?(U2a4R?0+?m@JCGf3tl-Zj?OCk%pm z2YN^2oqO6lhenb12n;a+L~$GvGC!*bMj;5krgs2Y>xSA7UmKSNE_6l84K0#!M~7Qs z2sJv`-3_CrVi%~jeH1wrB?Ot&hk84J83!r2L@7f$_mIG7ykoGx73sGQbVw$M)iPRt zM_=zirzn%2o=zCg4~&j<wu^ECSenk^;eo+;*YIFJslqonEY?_oLxUr|dr-RevEkm) zYvZk>qr<&zW0*l%YhjG^^!K&3iVDj=h73w#Bgo%63)=05o@YVZdIw<2)hX5!&@(uA zwb(#c>u~pOv5~IMf!#yme7ZV1+s3+)k-jdmiT;sm2ij$R2X>1H0a@)wr9?vUa0s#- zGQ_WG9fksRi_KQZ5Y!-kb?3F>0uv%RA*$%>+ymJU4G*?=j*N&cRt#_&+wWWZAc3np z2gHShlZ7;9BcY23!0Zgw0rj92;@nD5`|i<rKfr@Sqa)&CLi*4!+K@{KfyyY}Uuwlb z;Z0G)CAJaV+6S_6rN8~HL!z2MI9#9_g1Uw~J6*6^!jPxVfl*OMH!@9kJ>8uH9dtLC z@PUz$k<KB}XnKdPp&X;8uN&2{Lp0F`epA71#gW?H%n;V94yX!wD7Kq1K{h^gO-FoW zxLvfkVBNz*61IadyRxAYwPUZ1rAXbZXxQ{|8Ih21PbZ2D>2#r~AWy{Q3{Z7~EOY9L z*vXLo);(_6E)iO?Q7gSacoQ1GQdcK09xScb^bk5|&1E213IjoQTG<AIr7#fuIN)vr z!BQ9q66Q7#EQNs}VL1kZr7#d=Vzz-`DGUS+0Bi%nQWyws0>Cs7EQNs}hYyZ{U?~g) zdjN482$sS?@HwPs8VHucKyV5umVsa?3<USXZy5-d!a$IIkAYw*3<NoZa~TMh!a$H9 zw}D_O3<L>t3<OJIAV`R9AXo|m!COJzF%T?;f#7jKyas}$Fc5q{BH9Lmr7#eD6lfj; z!BQ9qeg#0sK(G`Bf`5$u*=-<L3IoA$3=)pI3<OJIAV`>FAXo|m!9N47+nc%Hq!d<x zKZI{dtH4rN1+r92SOu2CDv&`QtH4rN1rnHR6<GQvtvI%cQ#6jXs3?V1Acy1+h#-H0 zPh)T?-xVo)^If?Z&JqgWN5XiKfm7m8{1Rp&Mj61tI)yIZ41A;~A0pTfV35Nz8JB{Q z(ag9D@Q2@v2X8sN@M9Vp?vmff!$pi<5j>1>LAV9O6pBQRwndNwXbJoW3kbtM=7-$% z{W(PCPLW8P`$w^GW13Bt{hLoGgNm>+WUbnWAE;RkQKVK*)z-3q_o-1|(Sm|<c?8=M zlj3>bs<(lHZU;>4!>R1z1qCj!!9>Qu`G*Q#d_gbw(7fo2UpG)+@5)k?@XmwcV^EWa zaj$0f#066`hZnK*lEhIB$v7VS#gB5L)^E?j0-^r^kssNFOq9eFIH2gP{;^Nb&P08) zqU4}~khTLkQP~l}pMaAs6Nfm>h1vG>eo?len1=b`%{0{=$KtZk|HT(3XNo4q#dm%A zR0B~Yr-i@gD`Nn5<z0s##}KT%sEBH`14PA|HJb4PLN9wGqG{*7A^)G?xtyN!;)TfX zNM;AVNU$$8e<+@5k1~6I1BBI#f;R4B_%Y1I*fkZJT$~j_LZv41^~v{bq6U9#!8Thk zA6=r7=>>U=SjkR?upX$8;5PWnaE|7YxdcuzL2-{@PeWo7Z}XQGQ1#Zq0(%DASw*YP zx)Ah7_Qu4zxHPI3?Q$tH=;xW)ATo?GCf+^bLnEDI9fRnb*a@5OHl3^Z!gE$6bg*~{ z>M{`>OJM-7mcVsbqE!bTxy)q;HnG|uUy+!oiZ3K*8e5v<u%DKjGNgTS0@mE3=))xq zl_<5WemiqcDO!8S`fOM%D%d*iW2^<#RIv++C)PzYS?J>gXI07b$iMjsv5WluFcCOC zuNsK+EW`9B27aD_QVMbcze*ahS5&Y1D+?~pGbeVp5bIfsmMHfco6*vD^=8nbs8nMm z3z&sQOW(^@Mx&)~Vr4X1`rf_-+7)KrWQ)X;r%E-=_$;#j5Rv&Nbfs9c3p{L$^Eg*5 zR>!ZKObi_yzS^z-;vb1Ed9xY1Db`fuQSXW|n-in>0#A&!nC}v`PK>$44OvN$dM6{X z+Ng@Kb{`^DyCNN0D$<SKNU}7SI+0i!@m?!8D(e@!f{}Ics2wcxd65&0d<y35@2o_G z%+wYa#vz6A|7?tyT_bR`mt`cXU59y3v!Xa)7>QC#EK?QjWGiewuiJDdS@2HLwg^ux zm4_d4z+!{gg6Ww>@rGi;u7sc8q1du`D3PX#2fiQiH^}N9z(#Rj7$}Vi>co3si?p6* z)-B?~yH>{p>)gjJSe<D9Tfp)GlQ?yV`4iME8j-#pGjc`08b+j_!c6rGxUC}}9*4Q3 zX#?uZvg7eBX&&UuHtg|vZF78X6KTts6e-vy(qWoNBduHm9bdM!QgJ|6i~qj6Hr^;> znI_Yq>o%G8xviS8TT7D8rC&0%dk}9%eoZU67t~7aIZ-t70pH{PDj)hibLJFYS~X)h zVq*!wnt>Aj83J@`=G6Dia>gsmB&OR3IUCW|Is)5;0JpFP-d%VMVVV;V?;q<M?NyT} zogE<WvnN~2cVkLxV65Ma8`ONEbr6n**V4}Zq0wuVbAU4+8iBnHm=oo16eYs%a1^gJ z{B6N-6u<4)V(uHim}WtK=xU?kfG%OZBSWpD?L9E_0bIS(=1Y{pK}@XBh1~SE;+3<2 zp0R<e2L`Vh5Uc3v=xp!pZ|xI>^z>q?O=7@Nq8trqdl?5ATP;yq@Ma_dEuvfkKz5CS zz_pexDVPenFby>V9*K4I@c4xD=oo43>TDezZoO8lr?*|XH_*+wqz=py4S=5;3FsSQ zInP(lYv|rYw|ZN}>lNI5{U_}$^w3m8`Yxo86H#&!Ge%!q-(Z_)rHilrt^J}+xd(?^ zyE{d@6M&cL!M3Y9+eh)nB(VoMKWTzG2_h*A&_zId7Z!5(+sF6y9y-k_G{iKM>kTj_ zJSrz=is;{sWHA4OStxiECosK2#A`8KhL<?H!N$(v-PEz8^!E1kb#_B&XU@2M{jDQc z14B_Ay>_UR0C<JYjV^Law^pQG0xb;J;<1J`q6ZFHHT=@WhX`{^L0%d|o#doCdQq@W z1pU#yF$+GNOr$ZA`w%dLetyWo#2><f0Bd8=&u==cU2-&tOfc!7zl!m=uMbub$;0CN z639<5RG3|k>o7`0`Y!WIB(bhzc9z>D1fZrfR*wzK2wR7@OIh{(%$uKi5$BoY5*hn! zOGG54Hez4y!-JI*OI;@B9A10O^DvP;yr1Ae%Cm%7i4U!bp$9_MKKVBw9NH)Oh8{75 zA&SK=nCXYOY{H!R-l?x2LmXn`*kHLi0>1%2aPX`9->D<S&J|hZ&5I4Oa<CU?|2!vi z@M-jh`6>s80m$IacV**F_-`l7%FDg*oW#8$g^k{(h&~Pf!?+6`23d0UMs~62levon zzX8Y|A!5~c@T7PO3Q!t4K9Yr~)d5|Vr*I2!{uDT?$Sxw&<O?OSBuX)o?8OMtPKFXv zuH@plR97-^!gT3{!)D4*Weg(N{YUZgu68)QX1lD;4tmvXmv>>A_z3R35GV#;;$f)D zayzxM2OLZ6$#RT=gRlzCG6r61pVl(lzZ^T)bKAp(jY)0nF^?6!gOyVaR_@x!?<v{a zyL^3W*zw+yHiEq)mvh|g6}AT<=1}EvkiywVuymi~u!N~2eH%+W?&n^(yZ}#5adwL3 zn@wL<E7$=fOAy*g|Gr)vGbM^wF%32`W*bnFHzWZ80Msg*D9xXeAV_c<a=^OuRn#Tz zS7RvskHtc8$MgbpnEWq93+7vX5&&J8g{hqs+c<9kemxI<t@+j9*VCBLV6jhuUs3Su zjo{ZW{D`r&KkpG^75`O7j1{@8oX`1)u~n+=3E`E88`4)Td*WC)>%_5e&WU5;8%y7c z+U}e<7FH*YtqX)d?EgMOimeR}2W<~GI50@aQ+Uq6Wo}nLPY-`6?^5)?*vO%#g~Qn= zj)gxO{8L2mo;Vi%n4eVa6UX$d6UXwhPaM-PSU-Sd@@=bUJ*t0GrYk2<_2$*|Asd)x z%|3BV_ntVWdrlnFw>u|}=`F_JgG!n3&*LY=%{bq~Ez8QZVT&xP^qu<s0a;+v>RHb@ zaSZ0g9Ll&)9Mf}89Mf}79Mf}89Mf}89Mf}89MhLLaZI;P99zE##^{<psQ*aj+q8Pt zhw|wM%Uo8^`s?xtJX&H~J&(u(C$$pG=6N^$0rSMMJdEKacQ#=sjM}D!6&!tBA4Pz9 z;+Q^BN*}y5dDcBAj_Ff**CI^cD6=?yJ{gM>$4E9bg9mSuzJCtx^C1Ie@~q#ee*ggU z#4+7_;+SroIF|P*DA{L$=aUas9ruZ2e}a%rw#l;&ljjuLGRwSG&pvTXhk0uW$C$Qx zD<EZrIOeT@oKJ{p-l{Kk;+PKe)~{i9tPJLX%b2(7IVX<kOPx5TFLC0S4)fN326e~0 zRfl;iYe&pw-l}^~9MfUmN))$ws}A$l?}3nG-m1gAm5S|{x9Z*#$8?yt-j67I3`-ke z-Ad{AXck1CI7R{Y0c0Du!nXA%i1&n#N6J|zj(rUaBu`3+JaH_D=`L8d`YCrQ*mtv| zb_6TEt`o-&Avo_nP=G)3;t?b_(+mFxiNX?n(}N=XpNC(zb>D+SYM^=I7^fPY_P{o8 z)t}ezL2h~CnC?1pOn03)re~cvrh88u)7>YI=|3)+M=3D{XPLL^-V?|4pO&)Vj(MvN z^H!>N#58Z!Vctq*uCmNqb(pul4*<)&6$jz1B4cdxRvqT8WP>tq)nVSsEGY9<-E-oY zo^|4w4)fN(N6Ze>yj6#JEBU6(TXmSXl9J23RnIwbOwT!SOow?Z`zgn~Rfl=&C&A>s zrg^Il^VT;)XD1!=RvqT8?2Yz`ypJF*v0Vy6kSTZy3ue^PT1kg_E5%x9nz!m(wF1;& z)4ElMbt}E}OY2rW>%=h~)~&J)5PmAG|1)?L+SaXlhjxu5CXHKl7`M_3V$!%(hjA<Y zrg5w8J#lOrA*Sw?;>58FQ9;;Z@MS@rIHoUs;+VeliDNo8UyueGD=aW2a7wLt6q%0A z7wqStE8Y{w^rcQ5)4eB->DYX+1{sB%+$WCd*nA-+L9pwbFCCjN2w&itU9PjdbZovL z{4g?Soj9gr^F=c<d=%|1wwjqIj_KHZ(FN%3-V?|4WlkK^vH608A7Do0xnfwNMOP(s zY`$Q?Lk#eqIHqIs1%n=8Cfz5F>DYY1fX_0(d*Yam%@+*%qI2Sy?mcmgMUmn(PaI<* zq~APoY`5iKD@t+V*fDsO4q}H7HfzvNfVrlpW3$G)05VS;qf-(yPaI<_Z2BY5;p0et zb~vlezV3ZKs@7^}TL+UC@>sOLx8hZZf`5ivRv+Of*v}54fX%d7i3A#C|8ww%sPpCU z$rOD!6f5h*vC9#*!ii)3Bt{zU6UP{Dxf93ovrin$uahT^6?!a+jCze{Ik^prjAc$7 zGhk5k>&&R@#4!T~MTEHxiVPSO5td_6WWb<^iP;841`LX70k92<3>Xyk0ALyv889f? z1FvIH1Y>yPO@O!!ieLfnK5@)|LD4&aVi^<}Fethke#@Z9fI$)c9)lty_rx({i4(_+ zoD;{4>=VZf7!-X1<Q;<|0|rI3(Dxb?889e%6S!m>6d5omdJ1SBgCYY4MR|CibPS3N z7!(a7p4*_vSmMMnBj?010|rHfpp|ptm;u`&+T|~4TVyPM;+V12iDSmHCyp6Qoj7K| zwun77P8{QpKMD@W6UXEMaMT6!FfblIRzPJiPaNxqQ{qq^+$WA*&j5~Ds06Ym`bbnh zg#RF%eh!;uTnfs4&ewb44{^@~Z&_J!;@D}p3!cEkMT}nI|4qn29wPPw3q2%?T-D2M zmG38xL_Qy^mb5jMPqN;}!{^*NAyUvj@Tj1uh^49ItTt|WlvhCsj{HSO!Pry?pUl%{ zYcifV)>?JJ*$y=NT@u*Iha_;p5=#Q58dI|7GqjUs`@{w&`F$|qUvZaBiLIpYBHTa3 zU4?b-vW?_U&>!0y6I-6ZR0uP=1=Awsa+W+0!Y^jY87wY*9^w567vg$G!hF#d{D!mU zi&i>tULHHoV>7H<9yZU94pq<2j89MCjQS-`ix(RW*jcvVF30@dFJO(>J2RTI7<`V4 zyi2bvyVjrezz`}yo`2>rY;|~2Ki@BBaL%Os#KZHNhK@<wgRs%DfzJ3ydrzl4$I=BG zY8@W!g@G}Q$gvnYByDrC+N!x?jld9TX)K=?Yh<VoM$Dizf>m5QRV!{+Uu(Ba2Ip{M z-8bN1^bhXdgLPgzMt^7jAk5kOdq?`Yu#5FWMhH0wU05fLxAzZ8)AP1r9P8N=Z{!M? zO=2kw><-h<jxjRGOpahB*-NOkZ_JgH$ajKU+uO&m431^#_~6)RHx|viX-z(Yb!VFd z?1uXWyT>}Qy31gc7Q0HE;Lf4moZwYXFpJvP*@`%Y4sd8}q$jS}B#Im`>Gwfe2t@~M zXP{$n4BHhHxWoZl*n>k@<jz3`bhQJ;E*b1o863u%^4I`22@DRPL$~8FbhvYLY#5ss z${ldm;Mj2dsxio^ueTqj*=w92aC#K>@yHZbc{?Fwa;B|w0BhgvP)97J+r<0YVX!SV zpuz#l?HDlS@9nx4tLru{nbkYcj#YguwcAjviFbBmqfJK_jsK+pMzHp7hr>!f-r7Be zA&3oX<sv@$9`C}oqSlU%VXVj7p(A~RFuRA`@#x3VuaE@R=$8&|!HT^dqR0XrmiaK! zBkgvn4-p5)6bshL!4pWK(g~8x8jef*1u%SwMHy)WcLqn=#AXK%HK(<&w;NUjvano$ zCx4-caZB4q#03sM**4PJ(}lMmJFBva^^JDGuD}Cp8x<Ei5LKYA);>@`^C3&r*54~G za-nowHHOUxV*{uLeHgLX)CSQc^>)SE2eIt{W90#Hu@h!8s;d(x_KHg!c;}uWZZ~Od z8xfZ}Q0BF#R|>bQ7cAT64H|I;ReOWFxN%`f)HqOVxrn#aHMVSL#&~2fc2Lwh!QIf& zVbxxa#IbQ9K7#7ohk>SDECR={XG8J7ZxD3@3MQ>g>X*ZU1W^|(v<5HQP-{CZ8{(#3 zkW)5hqZgBA57?K4jFH|5CN4a=VqWTCSP>uE1Cxs;Cy*6n7@0=vO>G?EmIfGRh~~4P z$SpTS+P)+brK<K&jlf*r$%gDAJQbj8NUA_5jv^I198Aho8HdE(7?&-Hp;7~Z%bj3Z zNry&y#=6=t4`}B=X;ze{vdG3q?#SBZgfrdl*3q8MVR3~6Rk3hFQ&)d$9EY1g3gXJ_ z;D)AVS8&W7ya!>+X+`T<5WR}gmV@c)a@#$D$f~U+9i9;8#L~1*C&cU|u7N=p+dI+a z1hw{E(|Rp7HKCtHuMFPAQ9VSrgP`g*o0&fBQtEL6MtXX?M(ahd1G%n~jS#jqp%$yO z20Fx5PB_}A{y~Vwtj=s?#nn!5S1XzlwUG{!r?yaC-9h{sY#i$p{Z1fNI^JI&-`(39 zhu#l3Ap?VKmxfw<hq<3m3_2m!poPOC)%gs$0?j<WPPQxJb-5uuy=oXV>;#zwBKyRM z16Bf*-`9~<51ZTVQc)H6wD)wki7_t_m~~>e17kT<U6H%nu5m(?-kS9Y-6A)??Qw$5 zu@e~D(JOm(@SP3bwGN6Zq!hcj&H-C;dYxI)*E>O-=<DOVDd@2w?1se4u3e%&h)-OP zm$Sndlk!tip7H9fzT2(wYU?nDbnF_<@vG?{B0J2%sT<VN2Kzy#B7u9TziI?3{cR)H zVC$M1a7uv8MiB1-mI<cr=cff{lZPYf6HAUIqp#QwGLL)5SuYl{G|RNW5gY7$3@V>? zXY$A;-zCLYVW=MXE~kp{-eYjx&%I~4mXk_=xi>7=5hkPXEc$}C;oS*~PK;iVSA%EJ zuP0(6bRL|mOn?Bub7`xDU%$+_Jh;Q?UEPACOMF4m%bnvz!l(?;6)-Uj3nREjMUenx zSJQe|Yd{QFB4#Z}=v6rS;R?f#cd5Ky;j4HvzV4P^u3fZF;Tfwnzit>v6ciY-K&DU` zHZy@Y^Hs!VP+^UB<vL`rG9Q7Jt1eo%Q-X_nv|rQSB2z84sR2P}oRZbZ-%flnuGGw^ zEE^{CR5BqZ%Yv0z$r?K<^HF%DTfQ3G+b)wisSK0W8Vd)+Wu&zw+7^Aa;or1=Q;Aj@ zDqf43stYB@)`4Rv{CR6h!Y<o-NzwLhKyC|-pcB4PX5R%kA1M~9a3zpU<>Dd~CSoI^ zILun5nULw-Y;sB_MOG_LUEl>PV3ixlV#F$LL=sylEWC;<=2Dv+LFTH3CD~vuM?zi= z2|Kda-6_xMZ_`YH<{@2??+tVcVOSC^aARDw&dK_!pi3uNh(bq0ih2Z<h2@c0m73B3 zqWPQ>x->qwM8TyKrW{_QDwb_TWbKg}sdPE86=K?eS`xIImuy|JS`*!BP4XNOp%F2g z5O2*cu-gE$MOkGgtXefx>_S+M+s)jSP&y%sRMlQ>HGK`0Xn>1VT`notDB4n+u35=e zvvG_fa+#!OX_6vXZt6&7scfrMRa+y0g_lXx%F;PBOr*Tl171C+TlKZV!!qQ2T~<oe z+ViZGDxk@gg;w14R+ZeKiWab1I(H+Z+Q{>>Ta!(y<zq)sna3PP6b%WGEnj7^)gx^7 zsRq1K@{Y(>D<dJ5`kW4C?p!x18)#2sqe{QUQzqZqKWsxYYBoD0cTsKy+<G|#h=WI+ z=5$Ur_Lq2@+e=j=yzN5N%W9O-)7GL-^fs-vnDG;J-gdO!)D+oCY=8i;wFcc99F0w~ zosXIbQnxn1n6oLMU11pDk!rP7zM9Rnlm<fMx0^DPT`d@7kUyAo^dtwo9Xr5WP%<^{ zGFb>$hjO{8IkHw!ohH`Zp&2B#(@p_-cQk639YN+rN#F__*9E+ijd08kF{wC>Y-@HS z+vWi%F}6FshgI3#jjS47sCEE64O%K2vYO_~q8*i}<y7;q-AL%(4kgdh9~W|dHUX6# z!z>Q!pG2P1*{xV*qOuh@J;f^a6t`&W*jW@>y+%>4G8QW>EAh5MPHSPdLTbR_YW~Us zkgZ!+n0~njXo`J}(`Bx8Ysi)B$e0SZjI1%yIyX=iQ_0$DEwV-i>sfBIup8WInDudE zjZ#Du#?3NzcutG#lPsw8SuKs<k^*8WAqH~U7gTjQq_`Ni8(EWWx@>t|Y|A4eM{HRG z1V@g{RBk%H8X*Udl9VNKqM8Xv)qfSnypHVhv&&}4q$_o^(?Ja=u!g#;yxLS~N43Va zMb;>&SP=<ZOfRvBIs;kgA_uZeM-61n!LI~JUY1#ssw|bFQq`s0s*h`O*|}ErjTK64 z>%0x`c}~MjrN*$=+xBwct9u5%$h2pid%hayq9Za9&8iUbw$GJrHFt)Hp5d=s`>n3Y z)_zA3sytecdbP!A3NCat1wvb@C6m>*GA!Sc*u8_(Ar?JgjbMVRm15nfEa_dX1_`04 z=w5wUrJv|{>5$Ew!)m@x=$5wUDTd^G+diWb8eCuvj^O_Jt`8!5Pz1z0el<<|N#QE~ zU?hZBNxC+L=ivS*?!UtQ|8Ud%onQBQ7Pn8^<SR1zures#f`>+HB;Pym@V_6Az(aI> z5|7~L_&AM6=+Eim@rj`z4iNU?Xe@!#-h%$sK`m4g^uIIoIsFs-gIE8A&xbr*3+l{b zBYv06qVGCbUA!B&%#Qy{aN)y7KrZ1!CUc?$$&@(B><YnjF$8iwCh?kOiN760zKUBC z_ep!uDC(`E`!MO^b<C%o6Rkf$#OH7;S`iE$#Ot{oMCOs7+IR`Ho<Kw%z@=z)!zFIP zL(zKtrP1Qh>I&S7)*M{oqj)G<{Ct9)uajUdh4Gim@vER2hAwZyeIIT=Y-ldQeLL=N z;V#7hXFu+*;r>tDwD*x|u1~-v9>hcY9AS^+;s0Aa0^j0;-|!2*fJX>zw+Lf+FG6ei z*n~&mB0O|C;ek<?$m7S@^7{A~<s*rQK1bIfK7Jh!?RGr!@5Uo^KOVt{`1k`n3@He1 z-S+<-N^dIV_N#+hI*6w~bnO~{{w=|^A%C$JH1-9{{Bu_UdMH>N0(NLI>-U4E|K4DM z8Loa023JY{!C<f)#2EF8pdo)_!4ea7xnGskArtQglhmRae=%5S##c!!2Fs=Y{$M#K zw6xGI!2<s73`X$dyCoP7JrTSJPX9N9Vg9TRUhMH*;_+?s_|6tq?ZK>d`O1Rp=##nf zb*~9V;41OweL5KNAIby^cY+!Iyq&9qMP@lH)~a$H46c*#51M@Ypvi~(f*U3LGiWzf zqg4I}-}3F%LH}9=`wKM)D)niPpa9N?2pfXM{uD)MiS8Uk2C{2jeQAY05G>dU`G8ki z=(qU%5g&S*&mS!H@D-vBdIHsm^|Nca`suI3u?_oizaO`(d!etv#lg1FR^#E@#K%Q^ zMEQ_af?E#3M=i87<g3Pc6L264{*e9w{^<CaMZhneQ*`a&<13*lLV_Xsf}yMUyoHae z9>UWX`gcBc;^)c0yb#gzh!W6i_>|y)1Y8xm1^dTPzU$2LZC|#0k08_E$Gr*GGO~RB zLAb;ncxdk-OcrP_%uW2Itm0G;=!_5M!CIe5y=FP;z6)TY@<!aMrF=ULR{jzX)lzcP z(>m2^s2<_>O?pR`qZgirIn0M}e;xOaa9_L{S;hSfZkfia-ZDhK3lHr+JbWL+!~aP< z0;lQv3qJl9kKniX_%0ryAJFv^x&nB?Rav9ujw&xZ+Tvh-Ur_7e6Edt1=7+Sag4(fQ zey?P5hnel2%Vpbt0|=kQ{dL?jn}HYL5}R?Tg?2F>z9v2ZdF}e|&4D<+F2YX-VYvmL z_~zlTJjN%2Gf5(^zg}d0m(&h6&x+0RGlrL*ecF<Tau(8mZwCDj&t2_eI#ruaP1H^% z#}}t-mE~V`V-5bQ>ua%xF1@&5LThPHSTiBc9%ZJvrMY@xqFPb%Qh4>EdNQh#fxTZX z4E}1fGE`q*J2N*iyEvItXj#GOBkAhY{Cq|h(nPF1)YyP;`wEK>WS3byH@~u&S3}B@ zwWv(UjKvY<s|5skQ#q+UkiY?ObI6fN_LWZo<$8svdsuCkK+=Edx@4*p4sV-GPSxxa z_#g`CD>uG+G?l<d=hYFv2pmtOlbQ4+TsA0`#F-BO@WU^JgAk6zf=e+Hj<aj4w=h&0 z6*2zHqU+S7pR<hK63c?WbheqFME<2{A6^#ETm^JFU#fPQQR{yhn$e$!O)TIqqO7^~ z*G#qH)#PwasxP?)x^n4qzD#Xud^O9O)jxWQ{!)wmQt@j|-mri!=h@lxN@loriLDeh z6R+YB$irS$0bjKtfj#J8x6Q6^h0)ThmXTL(Y_i1IO6gpdQv6~^d2%c1D>b<DYKS#} ze2K#^#gr9gUORE=rP<@>aefI>*1&U${*tTwGBs{FaP}C{9!c6mL}yH><bW}udz6VG zr44rmnBcM;MrMsK<)=aI(IvjTdl()i5jf^D*qEh4Gqd=(Wnz-23ESv!sAHf_NMc3~ zRQXbc@#>|Q;yCH4nQ6GeSa~*Z3NIb-s@<$`plk?&18V+~`O1A`@_e*kuFm46RNR;F z`a#`wbHwd-Ylo!=FzKXnD1jW3-yDG)&fXDuYpRtZj~jedyO1o7d2;bmbFA>QD4w<P zd>JyZI6@g%Znq51&gHDk{anSZT}USvC+Dl>an{w7iw6!Ic{OW`C$BGWw7pb*Uq&Hv za$>y(JEuavnv8fQWvEn^wQYsr3^g??;j?P?t2X?x$6>Ep3UYMtict3|%F7&m$ib${ z4$i=_jva-9Ed{eXba#_*mZ>4+Q1;w*|DV-`JHr8$8k+H?r#zrO)%Eo?4K;O`2!%dT zoz%|~@0K3qEUi+JvYXzYGlrR=ni{F*YUohQGx^V&&N*boB&>c|QW6D|rpITiaT-Y~ z4Yw2cKYVule}3^MQADm6+n2Qc35X3iNj9+Ioqla3@PhvZKYcIwKN8f20v`$faY!36 z@dIUF)Bv-C9tp}Ip9pMtO!L)!5Fw8Qef1v{i&^Oe>OP_2#Ld7TX!rQ=E3ZJ^M*#}} zb~j)uPl3Ao0Mh}x6EI!Swntroy0>ef9JpKiC;9tN8aA{K1)kS#1LADpHs8HICXCM^ zxC$5$7pT+%;!-OKi{P*1Z;kwLEDZKg`k$Q<Vp=n2zO%S7XZke}!GdpApy_?H8%NY+ zl7}-k1gq2<Hz?8M$+>FehiH|btHu5$DA(XCk5&xEUJ8fdrV?T66mh<UwR9NtWL^Ku z^uv+}I2)H-p#Hdt19K(dMDWZ-<Jr%=n1WxsA5SdTXI)=5{WPxdYkcNje_?`Pt^gdK zW1D+D1yBq(HQ%pA@yxxRH9;^f15OK`UPf9{u0@C`<s;MRP^YUQ?eXNa8C{;-!Pt@x zmTAXtU<hlX<UBn%-a!6HuBh6$36K*2o=rEJfD^+lactdCv6$z7LVQ>(xUO8?pjn#t z%GHexUIf!e{@CTx_QB_6bxq1qM8#)*KPC5i3LxsV!hwoqT^67D9S_B4e9kg8gAZM! zBQ-DijstfwjrGLRwaKbGJi!(J;ExsC`L*~%uCO#q;+S=ZTsd3a=?8t4AJX9mlZfrT zo`Uyw+{=}n*yQuQxRoAC^AY%*%i>QvK#D(8iTz0@oUYumGcR5SSaiA(vJ#!ch|1W0 zZFxFZp97tv=Rjxh9O&GB4s=){?Rtt4t+gBpu)JOm8Yd*3v+Iw-Vc8>ym!<Qj%D)o& z!?u?#u4;S#5ebp1_hQ@27FV^sk9z}6AKTst?v>i!`+=j{-s|DY)m65uY)w_Wx*eR# zy`BQ-ByOe8%eSjf07vOFalE7~J$ws7l)TJk3a*2?u6>C1Fz%J=yTYNoyy=kCD_P$u zulr%JrQ|h^#BzB^dHt&`FYL5l;-b7_xL1-F*{0;x2W)cFdr@8$=w_6>F3K%D!k@xT ztyxK4#fYuswGG%_QkJ~lgAk9rxL)bHjv(48+$+gT;rwFc6~x|vmE_e9=BWC$yu9|J zoGZzz4`p9TURQ$2E6EFoAg?H|oxoX1UcZApd*sCzQ`hwypz%2FmE@&xelhZz#)guW z<n`Wjkk?U^b0vA*gR-wAuPIdVmE_d|I>-{*pXJ*_wq+~H>ojP1<i!<S*Y$qTcoO$Y z@=`dz7<qja+j>`$*Z0psUiYG$E6Ix=h+9cscVT?ElDuX?XC-;v4V;za^?#9PB`*r; zFA>9gJp{;exL1;w!lAr)1Ug5-&Smvq5rELGm}3&}IKdjvJL6SvxJ8Zq*QI!6Rr30y zDj_0Pkp0X4s}p^SY7f`&B_`+kf?3jHg!tuqK@N)eI6$XxuO!nt6iUhTUX*=n4xujt z!nZ*6KFASX?!|ua5foX;JxH<TTu%XVFY>*T+)n{V$-M(H%z~QKtbUO13`*|q1u!Sc z?;^YoL@4*A-Y<yx0&v*Vas<IV;Q}Y>@Z&%V0bz^cK=|F5y(VQiaW&wFTyt=C0Wt)y z)H?gUK;?(>+JclzWL)cE=~xT^Qe7&~mX1MbR9adYT)7u@>}ja5(y=qBjT>{2sAK%1 zqSCRyMSgNG>exPjm5y;IK<-5ydlL6bI>t{JDjl=15y^E?fB4x$r9ZbWnV+YC^9_Wo zq(1>LQ0dRjh+#_BOv}=r^`PVEkF|JbBH`zH(AaB9aEaVl?|KS{@&Yrnu9qTHzT->% zSt2cxrA+^&+mdM?3Po)1MVaz5SxTnw_6C|h%8ONMC3*2%PfA{Vr-lk;U6dEU52fTa zwPdcJ0*($ot|YIcw!Byyy`(I8v43~k`CAdgd(8l{a1QcPIFy$+9a4Lx<<)q#C9gUp zwzRzXDJCVaOT7g$eUw)Ou~(88ziXuAHG~+{e(yzj@jFOLUY)sxNBC2?cb<d1xH(qU zuO;MV&Yd2WvY_m1X85{Zwf#k;Nj<V5P4~d(fkb<<A<eoI%bf4!s9R~m@-r}Y>Svib ziJb$T+pSWZg-*vg&^d7qbb8K#&OPTqhi^bD@#o%ipfhw1bRIkhI-}=6hpi3JP%Gh( zF8r96)dIZ9ro#a0p!a$&Ag3gq$ddE?@x>Z;?IMPosXz}+T~)D|I(vHWaO<VC2{vWz zLD0#)*oIH^*=+)5o!GN_FSg<Q+?Z+;>T^m-Z1&4f;g_-f8oxQ7d$HZ1hOg9a@cUk> z-S|Vq;7&O2^<{Xu0=Cjx0KXfi+LjBv9j-}^`CUM1R_Y75zh1R1F~mRtT$iN@Hv_zq zhO=Q|>?JkIl)G-><hK068f%e=sV!zZ7DWy{tya@xNXG+-a@^s8G=CCwOo-Wz@y&m^ zQtX>c97ux3VVllWX5Zr6ej&bMLoDreX1@`Xb-fhrwM$C2WnE?)-oWvuEQK6-dIfFb zM4ddFkS152&9d{Yf4Q>%7nCb{yIn4C?I#<oQvA)zINM{EZg8`I)@5lg-$+&2bBz&R zy|U-FG|V1bq<3L}XW-YbC6H<Ay7yv>!~^YBi}ZePpy^|4vlr!3txW}dxk|*9M;=nI zTALpDs7c<7qZA%!uUe95E)j%3h5G@!C0TwYi|=WQ&oGy<Rt%H)N|||`LU;vKShhA2 z_J06bK&F;^XMCllQ;hP-wq?n3sx>J)hZ;MtTtu#asXSAHEK4rVw^6QJWx0q$4bR1S z3eZP^r`qQwxawLH2P%6{a}_2AA0iTBt#^aGx6S0JQnnj*ZTbdccp%YRvmwn-fR2gt zbEV#rlltS?X+@7_Lz@5e6-u46E1r_N+e6i-<hGg34?3wUoCahti_V?dkm$~A$o6Nm z=`@`~tmY?dI<cu_B2!bx7Z`k&TuRyO2cOHKe8P@p^#!qPNb|EcWO>TZ=TN@ej%88q z$c8k(XhW8#{Qq(&pR{9Hl>4$F%@ua6<teiYc%^)AHl65DHl(@g94K=(!%O*rY&y}= zY)CWTmsPCg^UQa1FXacb=|uNrLz?-1u@dEi9Lf)6(}}(z8`AuSbD&(DL;2xsI?=t^ zkmkvApj?(i`H^fo(aCH`^TIh$uE?SMXf~bbzHCS{N4YEUnSGpBf}hQ%6P?Y5G@m#J z%8?w(r?Tlp7qTJECs(E%&1A=F`eHU@dzF)V3OmXX&I^MF^fK{<#mvOMMCx{=rRG-| z_5;Lt3^)5P{NO646Bm67vdM(79aE4RK<)$sLCS>e0)#SEl;cyd!9|#Q?~a%_R|ChI zmr!)BHz@<v#F+)eo1deA+>3C^OU2?E8ZRe5UnJzH8}bAp#cs$8Ik74Oz!4D_oy!3s z(4l;d#37!Q`b-YwrX0u}fK(v{dvlfN`-mes7BL~e4TyS^vLK%)j=TWTaGZ+duL&}L z{?^2CDF1T~<at0G9>(L>P0kJ-w8{9iswF9}<siuB7<LXFoJq~kMF4ct;-RRI1LDY{ zo3U^?9OJiZy^z~X2%(A_?*YWBaSHOkJvecG@Csjp_tN=f4&|>&NX(V`-vMH^5{fcU zUvtVuiXj#Vmy_o;fP4iIr(Bl;a*qdc1t3p&AXfpRW~eL)@@O|+4&}E2;>dzw9|k0b zU*=Bb@b>^YDs{txoC2g6wFy5a&SP|%mrumw%BJkFUE>(U^Wm&ZQT{hT)Lc`<r1LXC zVhD6fdLEok>T!Gn6T9QYQQ(<%IX-n@9%pB40BI(mC|^thxSW#i^g!a%N!i*Q_2h67 zI93~_=-h6`;*Wy7-$RFKd>N1v_;ql;VLF}E|HTsvpLCSPQ1fF}*(=cyT78pBs}>M7 zS83t20m2I9P`(C`2R*6Z0LUp1<Om>ldLVBD<Zc@hM|GMs^%+33r0)aHV-Ak_4a<9N z&J&YsgWi_*^EqjK6A-GnljrYC2%%P58qVeuBId#=<Y|3?Ik7eXauN`S&zAu5fCthl z=>UXF@o)f;i0M<12|ykO#G#WiV>xMk91v@4qhkFbAmluK3i2g07U}ym7{fp#v#);y z4xtX^ADXcoNEolzWx#Rrvzag4=H=5OaOF~N0gkukUS-B|C{KClR4z&9CQmH1#&d}q zfM{MmZ3|qvslUrZc~cG!=^XOVxiANZNqiJ^zJXt-?4L6!JEiy$Al{O$=fnms2dC47 z5UQjz=7wmS0r!@I{Z7Ku?_7|Ba|3A9B==#sz<IkGc_I<crAo|A<BN5scV=#C-f}0# z$5Y9JmT#5^=$KgPOv-W+j6FY&e|}<iCXGGJvdwJAXN6#)n^{~C@oQ%0`ms6F1zIu9 ztjw*L1!-nnb>odUy2^>xyR#?WHQd_YiBFt$_YR<C!2YIGavIr8rW7~ut$8-{*ffO3 z%pG7svm>Z!`5Ju3R~63OT1Df2VeO^1Y!$Ns_1S=iY(OKDbx|}wG8t>JnQk*V7mJ%; zQ51CP<Tj7&nNKArhae%-Ih;(S=k0)=#N6a;(n-%YREX6hTlDd~pu-Nr-29xGs28<E zB`BlC7n0o86i+SA$xl4X4WB&tOf0#1(kiR7S#8O!YABTwBfnk*A$lbh=k6&{qxMiW zH#Olnc|;f<8^FiE@U5wl&asX`d={v0upQsS!)J^@AkN7la0N1?w+qAQzM1h<B6TDd zWn}lqVBnoNoUpzrAIC?K0hu|lu$W59FU-KlP3bnVIA|`UWx-7-C<5OW>}1l~nI~!v zB@_E=K!F{pYHQ%j6)hA%jn(*Ok(hw?LWO50(y}bv3m>1KVh$$uOO3&)bMYM79Gxyt z+)E^tOea$Zlal;_#0~SQczSUhn;kRB1M!2&RC)%7+mVelpN=1%broJgW|n}ct{HJA zk6`&=h6A7@_!xL%GC8T#4O*pYQFk)aKR>xRn^Y>=s$`NSblG0T_hHNwR}<C94kq~A z2`{e#rXJzb-imemumRoSoGC73V<<I0(K<N^cBCnS9EdHy>{bGGXKKDCD|?DJ3$83m zwJ={8ZFVl0qZkZ6XXe2A`Lu`UGY1mW$v8L7OA#m%^XZwx@dHVWZSb*jP)a8!G8B^Z zAHeYh#O(vKO*L0Mm2tC`Ujn@f-rG8A<;m1doCTIl;j8GmT86%8c`aLBB6g*;)WrRb zCM8)bM6q$g%8{vr6AoLm4p)p*LGZOmJoh8h$yvA)5D@!9sG~O_PvwPn<P;FYis7qA zGCS-O7?&-rVpYA_l&aLAXp?6BmH|tVUzVV1Ma*}Sc$|w>9s%3hXtpLC7o1~W6=`#5 zY&AfxhKh-@8OYH^G;8b)?7FK6nePQ)FIC5B8kKG_0&98<J*L86vc`KGVHMTe6nm<# zyUkK6l5wRR?`5@VL#<)$up2X~ouq8Ok6FGW)7%_lYdO?}ZM>s_Djdg@fG_ez&Wt#% zUdM99dgxrWMrB7%?69p&&&T&!9d+*DMKyw^Y*fSGZl2X)C-JG-#I))vr1~vU8^8rQ zd*Rg<K;6{=r3XZ{Ne&0y>2b`RLqbK!&72&z=3q-<WHnSddX1jU8*%w6vwVxA`T!Sg T_vr5|?RUmj1HKw~^CA8}rG&Fa literal 0 HcmV?d00001 diff --git a/util/gamate/gamate-fixcart.exe b/util/gamate/gamate-fixcart.exe new file mode 100755 index 0000000000000000000000000000000000000000..8d9d698683a9c262e463f92af677e136e301b674 GIT binary patch literal 67781 zcmeIb3t$~bbvHhHpDV4bmnB<{?fBY}6DP4`J+2;3?BvRNC$c2;aGXF`UrAT8uq+8( z$&ZkNixY@z9;O5uAccgae*y%WmJ|Y{#U%mrNL!btke0MfXlNbC_hD#~h5+^V`_1h0 zUdfgr;olZk+Pynx&YU@O&Y8!~oSof%!!Z#QLWFRhIU~eF_~nt1*Rx*^Av%A}7xKk} zIe)eGA+77L)(-3*PsgTbrp9KHdt<}N$;qkN*ib4qGdCF<pNzHi^vCv2jif4<EXggm zNcXl1(WMoND?ZphB)%rZ>3|SViHkKu3#=EpKw5_rFi~ioG5nG{h5;wv8czPo;}Aj! zd^@eNT!(~+DO@IC8XVS-3QXgN0yreZDTj!PlGkHG<S~PU5UV`kbKTw#x+J~OQ8}AB zFpJ1%bX*E?vaA{T?-F8H<w$ZiiKqll7KLRN`8YjCLWtv)GYat~##iAaEz<QI36QBA znj4=O86T-58~{nLgaP+RAZAlsg?CXly*Np4nS$BZgrt{FGh9U(?c!bbaftklTLmG# zX`G~Y0Zz}6kmX3v3<D;0aR@gNoEPHs90`e+nwSEj)XgzOvfSk!B-|#1*tV%!732W< zy9+1rF2?CO62z<7EFsVD!OsIYCva|%Am@@GUc6d{k1xSb3`D7m+a<`kB#2ihB`j{F zekmO4_oEJqyh#wRzCqp}<~0F4@^`-kIhO?S8X9HzYU-dDcxCwgv;;Yq1o1Yj@}eq3 z&KA9|Iw<lc0X!Qrc;x$spE-T_xxy2n@<YoL;?xh3=0r<5+2$|RBoN1+Q$IRO+`pbB z?mK6R`zGSP{>U-=06*95=s*12D&|?05NAsB-k1=Fp9|f3yx^9%fQciII58!NIl8q_ z#or@#B_zWINOfdY`I+w=eojB~RTg2r2Xc>yCB&^S&K5Bu#3Z5e#$M#}Z5BF&NKc^? zMG(kM$n>45=U@AJ^TtO;kIDA&FDQ*4KKRbriv{KPT-n`{>hakeo7%~{$<D3EXY-DP z%FmSQibs?aB|F+u9s^#2T!D#G;~<9c862n9<K7m9{5`Y&{^<ljXVyPp{XS^@K5qR! zVf{X7{XT5{K4bl!vVKonzdx71qsP>r&5xyNaC@o~JV175N*@BIs~N@C`G%p&G8B&H zbo6!Q<)_{OgSz#*1-Cp2wI3}#jvS75K^)DY`zVEG{fh>F^4Ln8ID80K9w!dpg6kly zsCnbbvIKsro|Hc&RS@%${=y^IZaC505i4d?SC#zfO~{{tUinkLk-8>XV3ZZY(oZz6 z(&bMqCVyH^F9Y!KF<_JdKzloh`=f~iy!{GqOXF1Pw+e3k979WDF@(MjG+CB%hQ3vB z%M}5}ZLs22F;u$Iiu*5OE~&EOo|5U}R@|3mT%#3tuZ-Jb#l2aEnBS4YqovI0NN?z9 zDKk0Jt1J3Pdh?E!lJt>Y;E?K(-jbuGBzUB^>}V-z9qE<z3f!N16J&9sIZnex?K;wY z^NHrh1Og|Tx5%2*oTy4t9&FoQs^Q%o&fT53WAh5d^5)bZ1Yj|bmOTV6#cRK;i+Ao5 zM{m0q0j1#+38meH)b5d7squu;@u5RN<8k7UqvM3qaYE@hp>*7_;Y30yIH44rPzp{c z1t*k(6{&<$a6&0Kp%k1@3O?jj@Q?oM%$XyPC>7tj8i8m32^ZGuqlHIGDeq@5A^_#- zU3El?@Yz`c9+X{(gqIzWGJduj@X=#OdrOW;;Xhktg+Yi~dA8UJ=N*ye@a*%yQ26>0 zsmEu(ZG}Teq=KJ)2;pOFFYey53z|dgbaz7Cgzj$P4XSEBB!2k0yu**Kdc<Ps@N*l{ zzQm6XlvhE_jfY<f6x?zgQrX{)#^@%tZFiL>MD_7ozkZ~oyx{iZM@mWSM3|(hz9UPR z+dVY&Q-!4d(wTc25h!@y@q*7DKm6#%FXsu$=kQCxxs^wd14zbMt&Si^L_hl`+(RzX z7F_gWK-KM*6*-?802(+4Q=f#5A_Ej~6(fcbffB4b5hj$4;t!92o}E>|lT{(^pEZEt zX)$HK;L!$UwpVA?KWepuU$cH6vwokmexJ8~U$TA$+U{dkYdLz1?HSlBM`IRad3KR? zXrkn2XU?$0QQ&fdQ6paaY#w;DdExJw^(QU5?AMMRL;umQI^d%>=AF9mWl;GYT`PFk z(@019eN_o@v^m5q)*|wr4Is?+=$k6u?WQ3N$p?^5gv)`&<3u=S-C5>w>~0bu;x~VK z=8Ps0?^y-V-9$WmT)T(ATh9~-vF~w-3ntu5K$2<y7-<zDa9HqJNrmutXTaB6dF^-L zK)MEjqc{G%`uNu$IT~cDXI}!~wV_ih5WynvK#?Iw{b+)n=cyWkt?n^`d#^N)9eehh z|LFtKV2-0};K6%&^V`dBCGcAb%qxN6gJWaE!)Cgox^iS<LYU@EYHU0`o0>64@eH3b z$0tXp03Auq2M5KubaE_pMQnXK_S(_$iPVj`V&?K8F+4RlF)}$Do0?8dUJ<)wefknU z{<JqYUlH5T-aU9}th&0grm`wlQ&m%4)lkzI+t8L8nVLz)nh%cc$4r5WuBf>*JI#D_ z=7aq*w11oCm($6AXSvO18-V@x$d*6=pcOb*C2*Dq(bwP7Kl+(vH(!0j=YN08CAt53 z?bG|e%Q50_kN-UqfSTo@-P9+vn{{nvUMO@Ml+3wKo=<)0%$c_nqbXm%HLz_-IB@tY zKoJY2+i0b0JbvbkoW`=#wY@#~w$R~l;61sIG<~({L=&kr8#0eBq<IMVo4on#k=ZPm z56AxG?*XK{i0PX1V|*B`!g>E!&zz~Dq1t)39}Wh7lKYiMkYy9*7Z&23Q);C79B9Vy zOPT}uWw<V!#^&P*q_OM9LiBCihtC7|uJgdXWf8a=P%M^lH*l}wa~ouIIDjGsKcMBW zx+XssXwA*n+aAdewHXVQgXwvWJaXpDrTC?s%={8uoAW~m(gwERoJIU;{35<8@cP{R zP`j}c*AAmYUI+5a5pi>Vh;o_08GrQ5nK1EjER?q`!!qE?=aNO>{v3RqOE<I~mMI3h zar`=R*(nX6Ctq)ZOc-%)-X^}{mP4iZ?|a=c?eg~c4C)TTcX(i@0n^{;;&|^?0lpFE z7MvY8cj6quIg9fU&f9U`hw~wv$8kP}^KqO{;yi`(G|rcB3gnT8Glp{`P9BZ;ZNqs3 z&It?l>&|Z_2EM}wl4cTXHRH1=Bf?{;*_l*o5+Nb_5#E~|pXB}1!o>L59G;o2N>m|y zm1d4|^ji;O`k-cx@135TNtx5LEJ|B&I5{C#FNFA35F>C5c`?GCO%CrS5%IVU8=u5L zd@{+p@qCcvaWV&lD?^H>w$SMC#8f&3kk}g<1$)Ed_K?h4d>}MBJp&q}i2D%k=MeWt zp;7RUb~7}ZPNnvU{|N7Oco~jNPo>8Xn0r%zjgQH4y)EL95V7b?%0~VZtqpX##)oE- zGY7@*1lm)x+owk6CQ=>A$&ravlMtUJtaoN=xM^f$CdE~vzYTUxB}c3@z>w=ew6$0G zR1#GWG$o+zJ+E!;>u&9;t&vYV$ojX3R|1+`Rzg2`$P48PE89=lT^5{p9XNL)=G|8N zNZ6LE5A2<Y?Muz1$EPN@uB)!BS{F-A4o{7YPmXO}H#pE%(YP*_o`ta_C#EJ-Th|>- zrPp13RqmE#I-S}(G;uJ7^pokW>*i)AuSgH?hDoL?_KpwFOr@trXDf!M_Fj=p@2%Wd zy)L#lIXOO>O3&`_W_DF>EVgBKW-dM3i6_`a602RuWJs7!4bRPt&mL4k0A^BeoI@6= zk=~i{eR$3tOQr2NZ*1!UB%DQwyHfj76R`<ix2{X3J16%|?Mcn7+hix&vS~qzTQ+%f z-?GUm1k-Lo!Kah6<3r;UVDH?;@}W~&ih(W3>FJ5_VGx>{bXZzjQ8BPP73*xllKsTg zeyrG!5G9q4d9Y*Yx#{Vtnc3Lr)J*I;piJ#g$97=GAQ`Kua7bB5sS&LBcaCgb_oh@$ zRdsc|uA!p3E?!>|uN|(dNY;&}Dypg)M^dR&?MUrt)$e%3^UL$na8^EQ>#A!Thc+iG z>P9w$kI|u#ipEsUNJX+H9<QpYsT<u~n|x*XXgn()@np?tO=GIIqONvmb45HJudWzM zZXT`}soy*jPsWq=soKU@h>yzZvvN{BTHjDV+)!W9Se2@-h}YC^uGm~RG*r=8J5n`T zKT<W4Y>=G9WX*sD{_?7+t~x6xjj5{9hGcb3#n9+bEp(G=tbnHKD&mc!BXw2D>bm4+ zsT;+~mQ5b3lvQJs&)CtFY_i*ut2q1g+hbk{6e=HzysA5^K3etJs)wt-T=k8rZ&f{0 z_2a5vRE4VZt5;XISNBz4Up-oVQ}suyKT-Xs)nBOoa`iW=zg7K@)!(cBLG@3nSJk|^ z=1*%rUvs?XuWBBz`EJekYM!lmvE~;wp<1K1w6?N#OYJqaJ8MU4XKUYDd#v`uwfEOP zSo`O-U#<O{+9ztCuKhu+h%bqk#8<}G$2Y|{$9KiwAOFMnz41@S|1AD+{E_%K;@^q? zbNu`9=i)EMSJhS2wbl*RrRwJDZmoM?-Mw|6s{3r+PwE2odVO*I^7``nTkAhm|C9Qc z>jMqB4aE%?G^}e#G+fs(({NM6T@4R3e7oVPh95VaX$UpuG!`|kZoHzgwXv`9#>O`^ zzPIu5#(CxQzZ}SC9?ttX&PRm_A)ogpOg$3?#8--)_~L|!S#kVP>F+7E<GBRSv4VZ5 z`0#Q&o@?{j@naZrsKEml?X%;*j%g_s&(-|w_{&$?@w*T&pKC1!RQ{)~w&S__x!yxS z#s7P|9e;9JLfFrhB%$JKueIZ!LcAxr6+etA48>m+Tn8}Zca9R=1;l$_Z^t_k|4nZG z5}FMQO)|e6Q}eOr>V`$n&c`bD&dy=*HkO)9&5REtn4B5jy>-04u|8HYhX1jVp;$#v zO{`*ca*AWNy;GC8rwiIFX89{d_u{z#>jxDRsmZa~-CNN=05k)@@YEy+hqGxwW@nPa zsTte=GQ6h(?uE0d;n}H~iuCNv)FiSY@r*chG}B2eU~EmNrz?i$Mn_XXAHONJH7-_D z^0mBpOkEF!@t`Ea#4%?@;BS|&hL-hEbZ#<@C!y2`Mnkhg4@A?uIr#BI^)QC8V=;M= zXn7%dKQc8pG?5Z|VaRNom`cu8*E9-Uiwy5h&WJMlW+7K6QILROROKq6{!BF82}=Si zLgAL{diq*K@SUsQD^rC=nF({SSeAHtAgp+n<ukFMGh17OB8Ik?F|)8~&N-l-6|&TN zROX+}M6d=;MUiRZ*)=&qIR)<{iNUU(?sl_xpihJwR*)CPnSy-jl4c|-#v|@51^aqU zN;YgxjgHpG0g3Ed+bsDQ#lt7Vv-!W{gcZh3#rr`bY^E*kMBclctX~j{{88{J#4I(< z{lmM($MVLUz>v6aDWgP$9MY*Y%Ay6uN<H$?oK=|k3gOv)Y7R<`+#4k|0`?^*=29Z^ z@$eUsAcP$E4#BQwS<=WSf}{d*4R%4<BDzeK)a>eMzSbNNdS1cjK_zTL3B!AkAbQct ztC5XiZW|w?=*yyU{e;YSlAfQ@`lSpZ*F7TIAUOzyFq?2-|414DLm7feO(IyrU|z^n zkt-R3Q5_J`M&mJ1DG|Y4_=#-7<w=~ftjyb--7CtYTlCvezfr!~y(XS5MD(g0yTpL( z#RNw5Y6$@c#MwPHHzT463DOm4?@02Xh&D+O_#hVQvWRYz5b#3C!4wQT+AKjO3bbFQ zYmuNb3rm7pC1{lbji*P_5J{Va#blcbGmiG?KahNnP9|r@AeG)+hEb4_^pv?<&NGPU zYjOxYRAP=!&K{gjrA0rbAhZ&5Jk8k~v4i1|CL+|&%fOY=StC~4^E$`0=#buuiN}zs zR5M)65Q2ET5z&zdg$2=!PJ)NgoNExLUx;`S9lMZ%y-fs3HgW?Zcv|#>Chpfj2WhlF zLXY00zZ-y%Ih4d~P4rDgSJ6B}(C|$N-mEeaxt{>^Q@{(z3t0{v;f0<)BKW6>iD8MB z6HtjzG!@W?qbRGHnwgoL0zUy|%9@#;#e=qpP6Uhq#=ap5n3{u(Cjupe=n{ftgj`5S z9ww<KVH=YHU78n&%BFa77>b_?=nv<?&NLH^&~$2ed~`fDVmAYFi8wl=@~+Y>u!yDu z%PLTsxCRlx<9K`$b7;{yh1Lk*@I)#(IX5k$`vbY(0rf2!N|v6R0M<<bSvwLogq7q? zDrJjiPS-&ZH!GA5%(For6L<m@(ccM_JPATwnmN307JZ6{9#V;VC4_p2{%#<L0v*tx z?ENBoZy<U*lI+a0t>M1FQfj|LvmsUD<AGu-xC<cEM{{%za{5%jcn;~F4CJA7V{A75 zG*I|(4i-!#WK=vD$bAtAXf%S<yHxDkpe&DKWl$-W?#aR3h|awYBKx!-kD!38vB6_R z;q3_@iU@uNVcFI_i5qEw0Tq7E4$Jl+-PYOFiaE*Y==1s!a2qlq{}+laTZA>dXg5WW z&40>!v;d<MN!GuYa-K%csQz5(7tx=}U_LAwVtu)27fOkSU}9)gne@+OYE*jZ_#OR4 zF)ex(6frfmXB^3emP_-FQO8Ntvw*gm#$2wM`!V$bgpjuSC;%H^s+_3=xg`|LMv#y* zo>5)Pp%`Ftb3-C(Xp#k(8*M62lZAp!u`OGoNoHVAbJ7S3wW7z661Frc!$n#V<<<`4 z1*H;238pnPu}2kVxgr2NlCr1~(K1c8R<I-VWa$*F?*c84{nSpyFN7RjsTF(-Lf$3o z1WItBme+&EXhgF+77>kM)dis4BKHoYCAP;v2(lDUWfhwy)hD9sv<s-#LQ@)EUUY-@ z3q;eR*|S`x6*0*0_|y>ecDZ6cgc>fx8#UP~=psmi4c?DSp*e&0G~Oukqb*tongdw~ zXr)yvW)R`MvSzlaa6~hcBZzL-iYsUnBEp}Yz_e_y^yIC9<*<K9d~z<0#)9-k^zDH% z_QNDUJ2N}A$DByA;@%c0W~Bs&$@K8-IQ&keT8;z?Ndt|Q9C5f2zZY1}ey&_I$C7*Z zCS^B?I}tq^C}8b?>X@G;kaq+&E`=naycv`*`p&=wQ7{TUVV*HH2~N<(i|D%o%cLd< zo}JncpBM#yw}MZ@E-~udJ7mL;Dfj^}S07I*hTjt?yaWs%Lh;aXCnps2_XC9ufZhgf zQ?sZIDYn-l`d-EBUCeOC!^rK5@Vyf5<>Y-T;(kV?A-(;>X`7k%tEdObBw}1H|3F1N z%m}7IN;}ORD(X?q+--LtA5e||V<N)QD2pQ1xk80m2pNv5aJwB|E=o^-I53N#vO%;5 zcL!E7On|k(5dCPN>=u9yhzOe--b!MtMT927R@e%!Jsmw92(rUjX7zO+4A8WeS+*qZ z2{3EL#A9~4GO^@4xR=#O1PKmugtdgtv{i|IOyJYFL}>F7yuu-K3<#s6v%7zwsk^z= zG({+QGPn_OA!WG&LD~3<u!BX|RX_=nMz~{pPs<?cW$@djOc!Lcrt2YV_|FFmIpWUQ zxb*)bChUy2bE-=C>|HnwZ!0|240Dm>zT9eUWg+Co?s6O!l%5v3wVLd+gtj+1Ha=_) zji-m_(3$2oXn8YaRO8yv-sBsmW<+kIg6Rr2K1tYS1<TXiWhl86m3yVOl$jN3smXm@ zo66m)88HA#kds`Y%H5_Jn*k`(<g!t2vzFV5;3~~t3CeBJj3Gc`+9+S`Qe@jS{aq+& zIjCS1lG~x>90JM)jZbZ9k=v;mw<5ez8&TnFRJclGPeJRPLD{xzIh12u0aIu^a=R6% zQ5#B2BPLppf^Cs7iPfth2@TIETx84b(~J)zyB2MF2CE2UXh6%o2apa8FQ%E2DRhIm z*P$ek=1$Ghd+znxl5YX+b=vR&EQ(pwUZ<^l8NdVDZj=}6T_X4On$e7OH*3l1aa#+! zw45)3`$Gz*w2)M=TP*rDB6mz%at5?+(=yiGa^IlkY$$@`ur{4e&5cZ<7N8`yWF}Mr zZ}&&avhP(<cR<m2tX4zK+(`wzQ=8q*o)+eqni<6-wa87Yn7cf7A#&$5*;C&ug6yz^ z>%m}<jkD~nX$#g^^fKHop)mxgClR~~w-SfuAYm3_HzQbsXauq*21rz1L~snZK@OW` zS}IB=v(o+^!jaG5!c$h(pa?#M`z3#ci-#D4B6t{jhzz1mea}XZh$2t*!UKV$$slng zasfmwX={p4iayW}QeIAoly9xoT830BZqWva%fhKLNj5UjYQ$mfP3K0d7H`!)dTz8T z@w?jB=RsR1O<OC-BQxLkA&84CzUA7nRunnIXkJ7xg!vz-oHE?F1rg;W*W5SI&)SFq zm9|{7=S#FZ3raC{!aUlMXnkN-h=OWB$o&`~Ie=(YxQ66a*Q!LpcEnQ%Z(ksO9PyOp z$L5c}_*TSMAbuX&Li{5%&PlA*{Qb?C#CjS<U4!mT6emOsKlk9&)FhUcF>9sGJ8Pw7 z&RS{ySu4#uYo%GUR>(ol3UNXsn1rDruk2|eEpx6)3t4khpyQpJ(!6t1+Je(gn$wp? zw!<ph`1}<pD0mt92kF?O9yA~jWxr*-<3$AL5UV?m8A8ij?gZeau@yKuBG>fP4m_Q3 zl2QZ;3+4eQFnR>VH#380aTDMjS{+;sPb(wxJQRgiq}fW+?p!j8@N${<JtBWOlt(81 z4rd6JCior^!7r+fD2O4B_AJEfkrS=^{}Agp!@A4xxZRJFLO|(ZXAptE@vXx1qh`lz zcXj|n!!!~4`%>Nq-Xnwign=OfgCP-6)gw57aPWEpEvt4U+>8qK8zSMW(c|8P(_WA1 zf;=)LTulkv@vo4CKk%C);kzS3jN(jKHhf36gli~aJN^}t@Q;3TB>YayfqV_8y(aif zwuEabVLSd;l<?=vRXf~@hUpU74qtxxE52CfTQ##+&Sqw3$JH`d>cDVnnqE6x7{js` zrdBF2$z6d-1-K|G*sr|K2D<7|A)SPa4yQrJhnXMl=3jqXFyed`=FYNYxAsR^l6?^8 zF4QHi?pC2I%<+#Uaxw=UIo`oV&b(uwh`SsX*j`5S$x(eoA@33EJgNtJRs@-6#?Y!z z0y9TaISY<tERuNC#tKp3)CEkA5s_ST4F2tMNzFeD%i-FJT-f94;f9ga@C27RHcZY< zOn}U#WGQ<DW?0K@K`gf^zTI(K#94X^?OMxWQpB{D-a@naT=-I9x%3vgsrZD1*h_Dr z_b#VsF4aT#Xw_AmhqBhk#-WwVLZSaJ*oK=`_JZ6ekyr(|AV(Y#wAbB2_eM#I0JZKG z`gnLPFhU~wVZaaKRwwU4Fy!VF`b5w`%;h1dU#@Q!z6-&KJ;xH>xb$08oujyLRmo`^ zpu`^TD{ThZFw=$Kk4ugg7@C@z5aI7L5Qt(eF-iS|$zI+BmZJBG#>i!QI~wyK6o6;z z33GaiW8lcfoWDjQ5uC-ESsF8rn3qURV=`2NL&33`skv!*Jc>xAgy=z}GT~b|W2O)8 z9YUs&O)?@cNFW>}4>}Q5GNLeu;V7JgeYsZ4s1g~Kk#miVDw9!e?zIxSD#&?;+3|fT zIXx*NaS4tECsSjn;|{n^g3BeZcnfgY9KjOiY+6L>bqZ}m&<AXgz)OSECZ;3tWIUW2 z!75y&QGzc67!omuP_AjtIYc%~_~k)Nym-;Ckl>8~`_ZqI@CuT_j4H&Qo)nQS5?D!O z7r0ddH%YEDh+ie6s;nq~23O0tYCF!Qmyi)PG9sgFO){$1it^LjCgb9EoJ+4+M$}=- zfy?DsKv?~LR;_K<4`4?B=nC3=M6KvY-zlSV?5C#in_+ny!?)nN+Ozn+OVj_f7~Nlx zPMTv=Gvg4u{-ALUo}fig%~cEi&x|)C{8UiQX$$>x#&U$82@b!3bMLTB{qwoB^HafL zwkvY}PXB^It9~x1Y+wIk@e2r^E}IxOk(JQ@vh*-$Y|unlGCkPYJ%H7Yobt*`Ss>RN zAg5u4ETSxx^ajZJ(j^yzW23pFsZZpt)@0=^yoMktl-xC137eqsP6_I5?uS!BZojsC z55j0X)!MtUOwqO1-t+Pb-T?;DZdq&Z#ziZ+P?qPcy&G}84BbaiEeII(OBq6Nk1!f! zD-;UaYwt#bL3!vwRY#1564?v{<=VT^u#%y|AlBZEMq@Rol!)-3Ag|~lTq+QjZ5H#! zinu5@w&>rN8FPJ{YwyNYIi$c=k89|djWn*75O6?<TzfYX5(FM35*N&kCJD;3KzKwo zwn+$hA(C8sH<~4=M1kbmyU`*+Wfqns)ha=&6iBVT8*LI66BWH+PS=bc{c5faVbNQz zy&Ju`3<Ka<dpBN_L*St@XYJkS&!rrMR%Wlh8#^Q<q=_hX)B}7eA>aDDG4uhMnOwgz zhKm_OR$P8JMk16Kq{HQRV>IW(q)<sNjj;<U+uKB#RHL89g{MV6{2APD;_57yl62!H z{a*nHsyR{PO+~CZ2+HL><7SnK$bA{cr(vlfATQ)Nz^V|q4sa2UAm&1ANg@$4u>5`! zvxHTrjavfYjaXJ#bMkG0r}2WBf6>dpq8B?dfW3=e1{S?YJ7dwyz@pce3#o&QMK1%3 zUNo?*MK1%3UX+n<(aXT17ptSS=w)EhYZ_ED7QGBCda<M3ow4X;V9|^4%tbE)i(Z6# z7rhKDdU2ZkkZ;k;z@ir?STh#A3@mz)*Sj(ny$mdRk#N?cmw`nuM$EJ5Wnj^ZQCW*# z1{S>-G0&oxfkiJyc^174EP9cp$Hbb`9|`0`jrJmzfkmvJpbP|9)Bgq*u>zQeJm9!t zd@!&MRuOZTrf2|2p<FTyxMYwx0Lmr9fJ??6(1g|jpi2fIC4@lXfN*6HkP8XPQ!W_> zTrx<b(Cd<6z$K#?jFiyU=6A_3;F7^~RhA{CgaMa~x1bk^dtEXNxMUEm(c_X~z$JsT ztyn&{Trv!}WU$dp*bugzaLHiG7Uhy*z$JqyutUcs!+=Xh4G48PE*Zull?a9jCk@t3 z11=e?2m_S+eqq2RqYNV5xx{wKFyNEHCZR*KK~=(lQwFPj7ho6!D5neqUK!hv+mnGM zwpWG$w~TVg@+k>IX7J1C0t);x!fX&^jsFkM^}99x@4$>z<NqEpxlf=TEyF%<9u$HC zEV~H5L=@g`@}Y?EN`&Q5wgoq`RSKx^fE||IgyWK7Jg@&4`>q7B7G=CpY_(6Yh8Lxf z(E>s?|0(a$F({V|<E5NGM$YIJq)UeJQyI)hD~FQ4T=XCci2lKL$uNE<Q=>1CE*Zuz zidp7Wj!TAtrjJctj5>x(h5?rhHgM&(ONIfL49aQ)OqDJf@KRes!ECf$G7Pw6Pz*3R zxMUb`$sh|bH>@BSaLHhyU{i3(FyN9wp~0S{ONIfLj5t!lmZVFD0hbKQO}S(kaLFJg zn3nC5VZbGW1Yk#&ONIfL3_@T>mP>{Kmkd6?pw%P47^E0*$tZw1?2>f?C4fuDU0`ZN zuBpofe*-QVY$D*2aSCaP?NK~Img1=_xOYjH3<EA1RBN&2l3{Gn^iiZ#O^GnzlffXv z(g(wUPX>7nSw0yCd@^JsAi}iPa0xEOj!%Zsf}x(IhGIZ3aLQm1)TC2}0jCUxEvF0v zP8kn_cAkjxM|LLce_(y@Lb<*LOlgfPRG6)_3`bS?Cw6$bh*Do{?qvLG5hWS6I(C@! z*4g1QQN%Vw3QL3u4zoEZVvV#!)=pppE>RZnb-0m~0wUl0hNMv&Tu#f34x+94T^lJX z@|^W|uF^+O20w<lptV|yAO#93I9LL(&jTe)8WDSyKKkuarVG>3bKI2$_Yrf+juPr$ z*6Cslbd~m>0x00L3;{-n@IR5zk8r^_Lye9x1lRA^IR+1ML0$iJ!9f&41mz&)k8@>* zujIT7II{E+d0nG2<Y--GNYnryNv*tyA6<pZd!2+L&$H^_UE7T1m*^u)ku6?9osq3- z{xTycMn-H1M3}!^!a@o*lA1`t4<^4XcN1KsbuW;(D<nA2O^?Ul{0odrK(x>WnkK<3 zCAh>#g78(jTYz5XgR2y)Wy~trf$IZ+Tnmb|BHEY*#u~Q*#uU);15nTk7wTYMsbFUF zKu@39)!9El)DmqeM~eBT+2RG4DscF(kz;l9_3Z;){bp}dOMmALt)j><ehBlrv%1*4 zw*UJ6f!6KjK<D;Wkyp4iRCqnS{I#yB{k`;DD7-q9!>IzHb&QYgt{#9l6IM<``i-bd zAqlHduqFl5h2f)ExGfZnfZ&DZwS)bweP%zNm0DZOmZpIw@ldd^B~-WqZ(C@6sdQ>) zUuvXU6t;!*H^K&m*2$&)nYrm%l|j4WOm}c=L}5orXY!IIE#v9E^nY%aPSAy&ifQzm zHsM-Pcuh#Z49Ms^eU!J2C)1+v+EDIt6zPGWs;5M(Vf%mvS619B0FajbHz;6MNea7Q zb|_^n(c=A>aY>B~qC_p+?zZra;qrZe3-MoXSv!cEx@br?JtM)IDr*@Cu2gh9HI>uv zYcGIso3B$(guR{JZ9OVH*e(6D6+|OOd+WeJM_+4GOLr607qCDIA;?gF>wpSje+n7$ zpocB=9j$%+oju($p9o<jXzr*sxAzQo510c@+qzo&;lYR)S#qg7ox$GLKG|X9Sd>iI zSxaB%j#jg`ueGgnCz9n_QIZR@ZLq6L7zA~8cMh1XJDXd32atC^95Dezaa<CTpCtsN z5CmV>*$vj(VfKC3o3g<9o<!NP1v2eGUlSam2721t;nY;<0W~!bfKyRKkVU<>vjvzY zNa0QtGp2PX2@IGmJ=>d*e^Ymh6oObPlWlM5>g;Y6B{I;_3g`Lmf&SKJQAz+y)7sb9 z-D9@(^=v0qgnIhKGCQ)jr@wP2O4mHt*Ew*#*)%ZF*ST#FGbqb#jQ)=8UE7*OnH?Sk zgOXT3_*-E^+r7{WZ0NSmZn$!_ij@R(^z>XSR`IT>uYHGD&AZm_9lhd0-nF!D8*B$7 zU2S3w!~NHHH%orIcZe7P8STefiG<=|6KpwTFt2Osg8{XRb#_cI%)q?1^?GrU1(A{v z<qWm%gzkI$dYW7N`^9=Y1tg8v*_*ncfoog4#l?hEgmh*jp-TwB><rBT^`Hsr+(1zC zjsbH!z&*VK{o+zWy3jB>kjn^x$tc-hZl^%uEmh-AY$Uj;3uH}YzuTL7MFoMl@qj7` zYU^ul^}sd}2A*2G2SgR`!8GrydEeUI!uuKv-re8d-`Xo`tzhqU)MMNVwWAugh&qNK zZyLB`IMUkd8N*uD0#l(3MT3<RWX;~|TFm~wX3^+@wfFT(*k;0<%7#kRjCXBpLuzM5 z!%H7m5D6J~w4%t+P8*sE%0yhr2vsL2GPkaXEsWXTw9^aQDkAeXYQ^`2--O1m*we|2 z`--bIJ%SEe^Ee0=!$FXpR;GhsF&qRx3Aoomuow=4gn1nVi{T(hSeAoeF&qS$nd2Z> z3<p620LMYF7!HDK0I(bci{T*1;e+cSSPTcj4nVvPg2iwUJdOM;2f<=E2#x~9b`UIv zgWw*7Z3n?(I0!QAa}X?sgCK`+9tXi<I0zEtbr39ugCJq9gJ3Zn1PO5*1dHJycniq8 z4uZvS5Ih2i-$Ae#4uT&-LdQX{7!HCD0nO(iSPTcjuL0;f2o}RZ@GsCmdmRLe;UGAK zLBb)AgJ3Zn1POB;1dHJy_*bBHTRq=5DTY_ziwMo@6<7?fK$dDAufSq>1v1L#6<7?f zKmxP90*l|M6(-hjipKR86~*uh<dFPc5#~?$6b6^_S&_Q8o|Ox6TSVmtNEi<?xRp3m zzl2$caYk^kPNmByg8=EtiwJKAFwEhZOiRVcWLDZ~grgt8g{K@|1ThVb`=Za_;vvSM z2p_<>Alisw3RR*;+ak;Xv;_W>4TR$#`Jr?Je+^Z6b0pHb?E_f2vD_w0{%=61fC{iO zWUtzYAFEjnQJ_{%)vIMc38+zD!L)*Mc?7Q|ro{7sC2t1>-H909ja~W03ksa)fQgKO z^NR{zcu^<cp?N7_-q2lL?O`cSc<Vm#37E+PIG2(=anb1bfjKO_q_9;(3cJzF>=8fB zN?P5Jg#|+Y0U|$j2w5n}QAj}1S^9E7&t#&yUQu$<KuFsRP82&L{4+?had<zcxiH(F z-Xls@71A+3x{j{8Ls(oE`o9OFluW_!koZ9$mu4Ue<h1Y)10{^WTX{F&$8`iNEhwNF zZ3a=XY?)@ffY>Wuk7U{fugm=x1g>P@0y7`{_Rns{7b$knOzk&ko8x5f2_P(G60~uj zz>i@q#x5(<<l?Ld6Dlo{k57STh#G#`hOM(<0p5wV%rDIC!iu&qhV?+jgf}8wf_*d( zPA0L735t6V)4RzLJk4K`N7GvY5A1Qg&MKO8)`f788=J2%rBk(NmP?W0Aonl_kv@zu z@$6yt_O}kU^q_BICu}|2v@YQT&smYs!QvsP%|diNg#o-)0#{&(R&7e;ahL60!)g-_ za#QSbb2>F%+gNYHe_FnjA^nq+@a7f;e^gYn7NwTeZ%fv$K+BJ=%!DQ4g016jrkX}g z6<c9=Vns}og+4-XMwPsP@|zkKTPfc^A_Ax9RReK>?U-K2$S*TeYC%rmmrE!1vWg{t zZ^Oj}*2M05Vm)Wm5~Y4;GkW?iT?blJm1?YH0W;9(>3hYw(dg-$JU1FWeQ%ow?JA2m z*&=awsA5es9tQjO6PZs!SBqs^A;Vge+qq(~+Pq;T*}JdrTCe?!e<rq+%{thoSXO~c zwI{_yR*J%ld?}V=zDsO!Q%ok`kdXzcw=xl{jj9OCcOy}SC(-`-65ZraBujI-n~0?m zAF#PmtY7Mh2J7M>CtC7(i5m?*1v&diI};(9TJOQwuP}b@U?iLxf$g_!CsFMN%zIiD z#RbDjlvZN9s%UpM!RPaaHSeGZ-XpfnA+U+Y!w-32u|cfIr1zY7T_IstBh2rRte@MT zOw+{!-w$~LtnLJC0O!TC#R);1_yhPNt)!cEqqz7NOA~^1?vpmGN;G$tBt$M?5~m6& ze}<YxC(_qqMy}vD!-@3sn5ljNr@iIFNw_;&KA?dNKc2w6?m>Y}$DV-SHz(kAk+z*l zk%QwR9i@vj^2&D531oUJ6^3-R_#b%Z>YHRL%VipLy)M%MuU8Y^){>;N=@<3x=)sdw zP}7R;0<~giP85xNC~z`Z9zefm&72}guVxHK94rA?Jy4?mg$UiAISqWfl<7)llVi<2 zoQ>Gl)DPc<5MN;py)XYT;xsqH+&<Vf(5WU*T3bLq;7qob?!c5*_uzIbZCDFLRzNu# z9!p!d_YPdIZo4`2p%K_wgE>+D#!({t_Qml?!{0^>NAcTyJ?6ggi)j|{!@F&C9MC1K zv%j}#pt%EXK7gx7+FXg!(}Rf>-hrFWCOmTHF)-MDZFkRg-C_v?Ev?O++nc&XJ_DVY zYLghaDN;8zXnUCkj4hQYjd(JWfJRX&0U*0fL2$R6cTzEByu&n9KV&3UFu?5-F5pdn zQ(J3OUtiPpVkLvk>V6gPIhWLeS)y*pb2R~7y)5U2>h?O`ui?FVTE*iP?)msn+Upsh ztA-3+%n&D{<RoT-p>16~+e8!Z_~_rXU2IeLJ$+5>t)khDz{7OUwrg6O2k^usv3oc_ zX@Ob^A}JftMnH2L7IOI8#pm@7-da;=NNHu)8DdHV6enj27~X+wF#m&DC<K%wFug*= z>oHx1hdACtjIDh;Xk&*M?Ck1lZHLm%obiOVH}zi&3`KR|`rcLo5EMFJbdj%gYX#b6 zu)^pjT$Zs$bl^r-ji9{aMMU{ZK~5S&oz#fh>QJywgo7=+5;nXql}uwK_fcSmg9#Vj ziv<DJ#&D3|*jPUAXb?;=>u@m6bbPN5UJ$7Rf}dUr2O9w_v$`D5hLK401M*5Fv7%*S zg0D#kK&{(EHC|Xo+zLEh%BmkEZ$a`RF0jZYXPx~gk&u+O5&OyjF07nb>as8=@z`VS zSqb*=e1Z)i&k|>6etcO1JrJt)olk&pWVe(Xdc+8ZD7LuZrXS(52{{YAM_>6Bq#-u8 z4VEuQ;5QTm4u19EdvwG&Tv1ehUL1(c!Ab1>b6Rrn1@wlwih~0H%;L=Tu<;IrZzIg+ z<t_y7#JOq)FM3-l`U1ia;LMAGNlNx6cCqM_`4$I$L*XEM9<gK)@l;RV&DPDwG7z;Y zpsVuazYjRy0P+%wi>c`Hg_77Br5Z{0Qp9L?Mv_vml;V&yR|;_0y3_N&3`9vobYKv{ z?mv!)clCzDZ+(~5-a)Ur@A6hG6CcER5(>rOOFRHmS?Eoz%mK$d?_{~oz+rfWW;g@S z_ny`QuYb9Iu8Vtz3oj;ZV~=^b;N7g8YOwOo)%?Dd^LkgHOAR|dP_&I;|Hx&LFMCCu zL5MX}ISEqO`v{)yBOI16cjWJ2iIYLT3zrk(&MEGjV!2k+m(dEg0LfN_c4u&RC$^aq zg-e(Rn;5GND9Y)TfDiy`l}!}qj!F<TxDgz%E`1$!N&C$hO8;}A5PW0$DcCUOpN|$S zu<#@Rx-c74yHjlByaD9(Jmj_PH$z^hFrmR>+q=QN9`gFNZ!xy~SKVT)?EkMV#tJ-M z&Wqk+Y>8@nB6#HC3+YQ1+;J?LvEx`YYsazZO~r3RZFhGZi>e*RR)nH|6#Nll3hfsh z_BjE*;J_#$ci}mMJL`4z3-stmb1p~!ix)Z6v~V<Y$Fb<g!{0yx|BhqPPXtND*>OzI z*l{c;bH_3LqLtmqCfD(L*5mrOWxjF(Rj*&l5ZJ&pYvzt)x_`$p-M8bI-r(*yrZ*bj z1(gyJoWf6pFXQ|Wrz|V;hA*-x*SF~Rgk*s&uV+1L$1%7Ub1388aZJzNaZJzJaZJzN zaZJzNaZJzNaZI0Q$1&aBact!r1fy$ukN#81x8?P$_vSJTk$JqH_1EMOc&NzndhVAS zPHIKA&+`t3L)MOCIT*u9>8!z<FzPietl;QF`T!!V9mn+HVulc;%d_s=aZDf0xgK%) zYRTf*g%m7y93$DtI4(Rb`oT%uUkDv2muLMZ{lfrQJC5o89mjNg$FZEx!^j>6UO--0 zb-X){{Uu`7I4;jRT%Kppmf7yDdghK}I^0`}IL36`TLCE{#C2~4<U&F$_f~zr9mjOI zw|*0|V<m78T)@3m&)RWJpKr%8eV!f1bhx+v8>qYPtvcLWSvwLQ_g3A%<CqTjR-$;_ zTXnd%{t$#*_f{S5tu$=cy;b+`IHtqB^&TYIY1q~P?^bHRL$e`r$1y6n3n0h26~3)M zL%Jse+)~coaqOE|AbCnc<c?!uOn1SvHAuZn#lDXnwX0Ye^z1mcAJI8~00a1QKORBy zWqJ|(2vJy~Z~IV0@XH9xw(f_xkrrs}IL4_)w>@y&TlMGlJHRb>9Me5Jj_IBq$MlRH z$8`UWW4d?8G5zJDDU=dZaJGA^?%#1t|3xti?z*??aBrn~$1L|&9qz3(=5pJ;Rfl`) z2LZ6%Td@(|5(>s~Z`I-6N--$+RvqrGWI?&N>b@Pv^o$+Hbhx*E7b#mT_f{S5t(2Q` zZ`I-6N=hF0Ry}LSF+FR?F&*x$?5AA!RvqrGpM{WjS?;Ym+*@A{n;mi8TXnd%vNzf- zaz2K%#P%2nL6+jFEVxliZzUb>tyF8i<=(1q(DG1&E$>zx-mMHWEWKOxj2*{xc(=+n zKm=*9!7t*H?|8TBE!uUGm~?K{;oQm~h)L&G9nP%`Th6Vzf5)*g#8|dhj2*`=Mg?Ju z!G{I4<Cs4Gj$``#JC5mi`GPdiSYd%FiCt=~t;lq|e8GMWw&LG$OrLMZG2Or8n2wh( zmVr^|$-Cp2j+ZZ_CJ6TI^QGhE3&N+lXP0L$FC8ym5Pks6**lKuc=@6p3?D*!i&xF8 z9mjOMe9;EzZT=m{^aXYt)A8~J3ExXb<i289qD5CFbi91Qi2E7g-*HUG%NLA#kW6}a z9Mkdg1tT72gn!2|9WP%n>QQ&cG2Or87>gp+Y3(@1LddYS<Jb;6yj&Dx$Fai*DjUQb zK6qJ!VFIi*JsmG=ycZyA$1&bYV%CmhY=y0G>@+@t6l909)avU#7@%n_bzkdX)<SNJ z_FX$&naKM$+{@}Cf&>TILFBQSwknZ8gB(1KaD+Brijd4PfK9P7b{xABap%}^Y&(gO zhIhv?rdw#ovE0lZ$8yz<WBERhBBNU4UQS+zB4dFa#|$_W{Vo~x>^Nq?p@=ZALy-Z8 zBEqs9iVQduF*C=Z$bdu9CIB3VA_ERZ9ROGkMFt#-b|UCH6u}wZcq1TQhaz~udv_c& z;865#px6#Y1{{iRN7!~KGT>0eu+O2$$lh_xm}kc^BWuSoBXh?w0}e%>0(sY=$bdr; zJ@ow!MFt#--Uul<4n+nWik=3V&!NbGLs1T%CtZgk0}e%fNauAZGUnNF%*fht%z#5t zK4@j_IA*}Nh<^F=`W6`r?>J`6x8s<x;ErR)d^?UA@GW9bjUC7M6O2Owa>p^b0UT|? z+6;`FkLA%AtR2U;<5uF(9K1V@-N*=zS!e{ZCI(1UUPN#oZi5^)%d}LKcb~5hAROU4 z6Fg;Q#g1bqaG&=iE*@eGis0`<4{{T+AKT~=QQ)awUa$NhaU}AE5VfSODLyIs05_lW zazdoAv*A%*K><s%mb2P8<yKyKMcDEe9R*X<AOe!7b@pUDaqP9~yt8d+^d}^+g%?TS zqIs4CiZ$kB&u3_Nmh2X*nB|Wkg#UxHWK?V*g_m&uBF=KGbC;~9bi%=1yAoo3*Ybp9 zbUmg;O64qhD1u+ik~3OdJc9V`ARxqzOoaKO_4tiu%om+&!+E*wJh#oTPr2DVKRQ$~ zF+Malj6Le-*)3kIHcH`|gtHX$d%uP?V*ku&)?)A?7kTGjS@x_y>!Ds$f}G&^0r={0 zr+z+Pj$@xm`H6?;H4Pn;wi9s!gWauWe{)Bx+{e-b>uu^A=!AnYoXD{l+ADo?vD&J6 zQuV_TX@0DLAFIE&3r@_S)Q?qMCs#XdTUS%N%m({#V%<07Vr=i(u@mdOPKxcV+k4>7 zzP+=5I~R7be#it77oiR7q-OK>Ug>(itq<FJc9^wX0dq*qhk>`l^s{61_mIhctR(vh zHFXVovJ$y&bW?NlAeO<gEN%7-4zy#@yq(_U{aAN)NWgEntEYXi6|1|9MrrX@i5uP8 z+nE);#EoWAyIPx&Cf^124)%ALN=%}_1(SXkw1rr7zzzc~J%e~%L4k{0u#Mf*i$(4% zWI&g?P`o9B_f&fNu%<lNjh6&^y3wIKX&BqrIxyIWmljH0a9ht{pLxw7^wib49j@8S z+$czT0RHh{3ah-WP%<U6t+g9#-_0;bETlWcyPDy!EiItT1<Kbk;L6|Gc0E?t9b5{l zv%49q`dDgrpjZ=cZO4l?Ep2rEmkQ{|+Pf1EFL|@6eGo$s2h_wxe9GNy!)rxNEiHXm zk9T7GyL#Yu5542E9b3Ob6Ii34Ke`bs_D+l<3v_tq!%2^{o25O(TpUX+SSN=}poO(= zloVE<Dg759@Lm?Be;cIJ)4xrubMa7fnz}mM;YA<|%LRDK7lvrs*48gBa`7p){-%yL zJpDMV$|}}1&;q{#A8gxzxY&iL0<|@DfdZNjS)y&*JH;g)l$L7-@$$i7H>yDwMr;nX z9yCdvZDw;1UOT{8xm#T7##w@DYsHSe;xZTBy0e$Bn>20f7ni$G^4ifUmD|<{k!|!x z^?RZ!{84RuaiLdKx=_4wVK!FPHa3tkZW)X>C^os#?Xb~4)n4|ScyYn(NA>N(K+`D} zfrEHwL&?9Z2XzAmCcR9m7s7%DQ5S5q8b4ZZQ!_jpOv^4PDF?IGk4d)&yq5&VNUt9g z7e21YOBEa|%-)@Fxu|m^SwZ^1G+J+3V?SSMfMbTJKMRU{<%UQN^CD5J>K&?nxa+%Y z$S%TH0or<{3AAD>QnA^^q)wG{i0Q?+VqOfD8wgzKM$1at+ut$Rwhi-u4hPDz;@p)* zHa_x=tgUW5^KEY$=xFW3Cq6S$VTY!+?M)^&H-Q$!)tS*Xb@iU;gg1I8;uf-srn4aW z4P#ptrl-qo_C<nK$4Xj!G33Oyv{pC9>Ljj%Ll@gS(dI@qbzRqVJzi=;KZ{-&vN2IT zM7xWi>NcC1F1)4G;YRd#bhZsti%u7ELn|90yw-$Ttn%t^5!bl!Xrs3GKs8o%W+N-E zb)(yw(3Geb=`eZfsK?VCnAhROu~xC&jigDN+pEnTolPd}zT1uI?qR#s+tk^|_xVJR z8)FYzI4n|~Pp>D^;_)@IT@kOzj_K%B!=OGl$|?}WC;DBmQlR|4j;wlkx!oxhO>t*) zNBcH0=m!F`O6+i9EQhKq^6j?k+!$r;Ry{(u$d})Cy3y9y2?A~Dl)XCS&Ia##7ey6P zs$JaRf^9v$#wzJ+-KbXd_2v#LdaxI7L*ilADNz^HCvL>U*#V46`6(&ic=eXRZT5Jz zsSiUsc8%8f)e84g9M<5}3u@d3|3T&=fjeoxY6L37+xoA=t7~e&DFKp=FrEW!7fe0K zPYX_@4#d<amRwK9K%o<5ZTF77UTkFPmT7}y4%qz|R4)C_<d#c;%L=c-P(AbmP8H#~ z$Kbl3_nqZUoKynL`@(V+VKNE#qR)Ffo}IAh#N>H7mAHn38<GhTxd69IEI<qZ-=QrL zLH!Ej%J62Rb7>>CE(wH1C*K?|5XRaN??M)aVPk}ssU#8rb~UYYsRqR8TBO_r5_&nd zez?jA;#n%EQv}N1jIX=pmTH%*P<X~tEvOp?G6e-D%#%5+jap3L$$Sa18I@nDUA+Pf zuFXZ{+9j8)*doCN9op|`Z;`ncI@ExmGfmM_@V5nDj4QSnm1V<Zp2{Y|Y+0}pJ6mJ( z+FTSK`Iaul>upy^PS!?AYnhD$;xf_lB5l3C)CjIwxu!@fjubA(Ox49wVk;mq6#jzc zB;k~8rKIQtSApAnBkabnmh5`~7b3@e6|WSsrc_*l!o(az6o;&>wKB4T>nushtSD+F zsf+wz1uXXhS&T&4O~_(Bm4!!fC0tsQtH^A#ur(XbmPo{JAyHTNx;N)Z{q35i&>Z9| za{ZBRAq-oid0vc5R=BJ$343gkg~)d;q@Y94SXds3wN_IWK(v5cLXX8~mnb}c#?-@a zsfq;~5m|erMJihkZGf6qp_YW5<|Wfs?AAoLTaz4DMQB8<Cd6N}^PD!oYEhP08LL(e z6+0iE<4!YoHH=P(0#&t_+D%{0S~S3gsxB9mYE*5pL)WTgOW8Qak+?+Cvn@#xEVXQ8 zZLw^tR8?Chf%#WR)V0NvXqZTOxevT_Qn%}CnNMWkd__i1wAu^ooXTLyYxC{2EA1+| zN);_+w{+e{MzxU_X0|44RLjSXU~LXLj42utAX~n*g?5jyE}$ClwNiFOwp$qqS*uU# z5ayN@BeH?^H8!gB>wRSkEdSg#G^19tLvoj7SHKNdLV?(L)NM{DWn+Jtzq!3!HNqP& zM!l>+8GUUn`b2-zx(PFWnA21Zwx!}~%Ti<~u?h;nt2OA>a8p|++xfVKAZ=?EoH^@4 z+Es=D8L3uV@l|i-r7RE@-(cxXcC`?YLHS_P(U%?YHgAS-LCIq03RwtGhjOK5IkHyK zoQ78%)eMr_;^Y9{U5nc4B#^u)4P52mdVp865l%QU78SRVZOUw9xA_1{jm>WFVOMr< zBdbOisvUq#!?wvr?525b!REE7<uvoC(@5z44kgF79}jYFCIQ8cVHF4UPa;q1>{jeD z(b)3bo?;1minnSj*jeP;y+%Q{F%~K-EAqEOZfjw+LTbR_Y5qz=(5=^2n187cXsLaf z+hs2ITFBKaD3~&@j_fhf3NKI<Q|a1nEiy(1D_L%<u&cazSoLvrr7}bm#w#**cy5av zkRn(cuv?m-tp%h~N(^O-FRbcvL`gB~G_sc1blLKF#Fj%uj@U8=2(BK<RCYdrN+Ac2 zl9a7-qFNb9(|;AlysqwYGs|Yktk>#Rr-K@hXAgCk_^m15NotR43+z!)p&}Bsg<fP6 zbqBJrMGj<{j~d8YgI@`dvMjMRwYFHQN>!IqyFM<<7Uy!+H<l^2t?)Oz7q|^GjT*yV zf7{D}ukIW8f@$A4_d+$!MMq>IT2&$DZ=ctC&D<R#`i8$=>$kfm$NF7EDEC=C>eYI; zDY)3v6bNm;mP}ULwNd$$#O@uEj<Dz<dju0!trY9V+M>>-YLF0#i}s~gtPK(!4;`|Z zb4AU^3Ej5#93_xkf7@rQg$3u?gCpGkYR5;AJS;+D3cs4B{Vab8e=rilqa^RvL??0o zah!jT^XE9}{?4y^J%=-(tqBwuU04|uZ^1>QH&Wo;xCB3hOXz;yeHNGSmv}jWOXRP4 z$L$j%VQe5Az}8p-yS;^jOT${EC>(rG<V*Ue_=lkWsXzccTo3AGu@=AcvKY7lUKj7f zDcK2r1$X$c5s-^`QP~tDn<6)xtr55`MnJB^B3`*5@ppm9*KtbX0qGAKN4-^aW2B46 zv4FNHT7QOwr*SG;F$^BWYxz2e<dL7+I1gG+A|W^6QncD}C*F#SqQ#F&oChrqt**kU zXiefyd>j`=i=R($Xx$0nQW<}@ki7Eh;pp;4oOk04!iVNEoVVfp9?oJ6aQ5K*CeHuF zNq--i=gK7R#C^DEUn1-zF2R4mCG<UB_zl1C3%Eqkc8e&6_ad^Kmo>PAF2O~Y6CN0K zi5z~6EvJi@0bWwL=##wL&&%)PqTPl|?(Mil?!hH|KQDiViy;-kSGR-zh|*g|*>G)G zONVg{My_8L%zbNkc_dh<g^k_elHlYufbI_$Mt~ie%lQ3>6}~H+XT_`Eec>fCye}Ls z1u-VQDs0H#M7YR8UFcV3wco;fgGFl2N<SCQx6-RD=E9{id{4L(6Ixp2t>HZWZVAWm z6L@Pl8hJ8&32uYm4oCU3G<>NqbeS)-(HA;fT!jyFlP6RXUcr#$D$u?x9K&5vFy{;5 zSaAPrIDZR-5zN`LG+bbn!xpV7*S_!y3IB*Cw~ttIxI4UB!oP@iV<}1%yzec~EDZ;j zBRZI`K~Xbb@F@!5T&S=nTo|083T@RbLS-Pk?A6y+<ip{-Ezl2SrA6M)>rZ*n)4cw8 zzDpn<ZP1gbMy#K03)RnH6}D~IgY!c;W!;N>6L%bJ3vDSbfi=8b!b_YNSta<&A>^n< zwnPFI*lz+iU?CXMKg=H;AF~Jr<?Sf%cJlJI$S5J<2t(n>HN3u+muv3FH4ym;uR8H_ zWMoc+=s83Q>6N@na7Y5KiM$o>kD+`wSmkS2uzU}K=^x=-QwZkSKLvYmCywHx{Q+UJ zKzs=-Sj;L;^MK6+;2x}XS=1{Rq8_*iE-J65rwl0v-bII%zr#hflzi!Fg=#fakMJ3b z-ob_FMaSR{^HH4N!ueC2mtq8Q6z8)zWgbg9OOW`TxM+9d68Hoz!O!9nI>EcY<>eo6 z34f25AK()CG4FoHyAU356>Id|QRQVvTNuvm3Tqv_LWkAi+=zBfSUVif?UX`pvDn_S z5Zl2wfbg9-zlBq>8F~SCVjVWM&@RO#P{#`(zdinYOTfg}Mfm9;EVtkj-`pIQ+xWz= zCrRwJH;Rn!k~-1WUa=Wrrts5qc3bjM&OrL_EujD9+-;gm&umK13~w4q4b6>hQl5Vm zwUzj*sNRHk=+bl37IYK+2`h)i*^`XdH`Z574_7EkehRN%QXiu#8~FQeg2UgY42G(! zH;qpYPt1*^6k0}f`e3?ZW@>6y7Scl8w7<3n-}V)@94IcUcwTvB2(OZqrD#!^z>F;s z71{&{cvGBg+MC1%aFgK3BKykcfO5S;)P16MN+9W<zb#oNh0WVWQlpi-1wM!Z`syBE zJsM5oqw{KuUqlWi)2Z3?2<{xvObUBG0KgBw5Dr4v77KSukhnR!wfYM~lTiuH|0%Xk zJNgyN=r6G>`1y;?`XuuIi1y)^l9{J~p4;=aE-PvE|Ac1rR}m8n`0FTZcKx+-t$8&i zoR#Z&*FX=Kp4(s2nrdIovS##;zM`LRvCkKOlO-D#&~tlsF};!uZ<^;-ipt?vaR}rS zud0Br+K|8*bg<iI*LRN5(yPYED>pWoXKbZxF2g8(y`wz&D(NdVxbs_xJ%BvV;g=H1 zId#5i`0~p$$InCj5~Qqwi%NdpRepgQw-7jUjOdIcogtz-CRBRBn9w`Q#E{Z~y8}!} zSq>vJ#+UNbpw8$LU*0`{fYJzVCTH<tmWrL7z{f3<Biv2cLC1~S2HJuo$K^nk4^<ei zUVb^YlO7!(!#xBm_XeK9LkEKDZC2c%Y>2`Q%>2CN%J;_P{%HTRI*aqExaaZsLEH68 z#Cz|x4%-gk(n;e`3fV8eIRZVLy(9A1R69p*H~6Y{AsG_$adEyJEBp+KXKg%x2_4uH zp$_bOuMW;G<qYP2rQ&XyPN(KZrYhui))gajd-ooEHEWBH*I#b5Js-cnL?N;`u^)ro zT_ImhLA;VWR3^*Xc8=i;Ej1(Kvs(76HvDnMVXs;aa&+*DQ1=_kFFE><gH6Q__Q0{X z9fg6-2Xi`fZ<BDAsUdJEdv2%y&*;M4;eg5w&G`IN9x$JZ>gvjx$|_8R!k%bO>Svy3 zOCNHERjEXoP4BOm!eXehQkuCMI&9*e{AbN)5v*8*)elQbq7c&9&_o4xBbiC#-i`cU zK0E%uzjz}kBG-$ZL;C)N#47A08(Q_Apw=IHA^1X&p%;Q53v0chkA?ptqV-$&p^`^6 zz?`TD!!jx$LaQFr0#zSD%!A=T^+&{9Mn0jcPife3GxTTL9Rd8xBUJTqz(RoC4w&L8 zRCPCCI$-YrOc(U+QAeoiT^cBdZrA=r{{D-G7utJ6&ug~=aUyhU;I05O#^(?`1q_Lc zRBj=0xt)bg@Hg_eQhqoV4tps5f1MFxOtWUbGo&$Tg*6ewf^SBo6@0T7M^w(H4$L|b ztWs-yL5VI;?olZ}M61GFEe_5@xe{M_v{Nwkd^n7^j0mqz5$7vdONT>G#_@+%7@kDH zSv~Ip^(QSHxGMoChHEw&_kQNV9D>?CxMI0J<M^r-rgKG5<2C#ETMGnt1>kTW+w9|M zfF^L#@`GAD8v&5#EGS&dfYXSpUy!zzHzCH-^1(55sACn-_E2ifN-lTqU}{MR%d|sp zU<_-blsp62-a!6Hsi@kx29RR_p3OGufRn%}aU9!FsmSxcAU!-5JV&-|&@Ih>WZT9n zKY|sae4KJ=yAkq>x^l)fL?vf_KPCHk8lbyyDjb+t#$n5O8{kUL*ewh@X;t9UNW=U% zC=PQjog7PXd#{BhCZB_Vdx#Ew0yWN&m`X*7U4(cge^TXPON?@2`R1!Bw!|nWRh!@v zlX2M6NC2)%dRYdB3T{UU6o<^K2BB=}KMm9e9Xi<(BPD9*E}YWpv;o{@Xvb=!+7P3p zI-1-A33?B^wYdvi;2-?3bi8v9TRYbPbS^sgErL$>BIrD@2s(X>p!3io=-_SGbC&D) zBIwY^>Rj^q+9K%i!&~Q~b8-=Mh898RiAB&ET?Cz{7D0!N;<?IoY7unUr=E+>=|#|a zn?uKXfXe8?Uke(nQVX@ucHL1ptUEE409X4spSEQq60!Ep*Zz<mdusO2s;B;EaF*S& zv!`bNoQL0_b`sa@gFST&XD-h9cm`Oor@jZL>ZxzU9XazK?1kC)s$RH((#krX2IOlv zReKoEiYI{W*z-75J4PHoDZBmoFk+P6twk-antP7jNETa!z7!72?$3v$UTJ;Z1NT0q zuOVcXEko+-|2X<$OO$<3UkRM&(ig?1^wkAyO4EN(Uu77SD1BX$U3kPljq~R?&!w*o zNUiimtM!wz_4QfA`1HlqZO?HK$*LBiFNO2#(N`F6lAKFl%@B^NUkmGN7s`1qeRZMy z=hD~J5c0Y7RRucd($@fR&ZV!v2G2fyaT>#O{2pi|7NIYN^Xt*q7+ya*m%cu*2z?zw zInSl9I~Jj@QB?7B>1$*W`Z}}-ef=AF_UVi3{hs4PpurDvoU8v*IKLi!eH|}>pG#jq zT7<stLOIW+FMdw&T=nancv3i*zNmMwg#KdT{_Fll=!?()N?%mc-y!5bNMqL`^rdjf z4>!!`w-4RJ?!RIHft1z1`^O3PvkY5q_DDg^9}kc`INrD%6C6rke_k#`OhtIE?7v#k zr>ORD86SDGjz_GL@`))ZpCYqR#3undj`LhPWnZ9ldKb#RA&byg0pXkh&!FZ!p!@LH z4?c(@E4_!aJ4(bqjq@?^eJ;Io{H)s57NoEWiaQ>5Ke!HHrFZXgslws)2Z+B5L|9K3 z8vDHfoGrkW`cg?DiG&Z54+yz%arl)Xe!fw*05Vk#Abg^Cakc_-96^O+k7*S@l;L{h zTqM)l7u&`X03h+aJli(L8YA=4N^qBb(8f-|gq4k*L2X=}g+v?U_cxV|{R8;PK4@dR z0aiA~_eQc0+SpS#&t+qjn6fb&8;Lvz?S~)9RQ7Yry!<>(d<f@U_CpOR`?(nji0vM> z{ak?@T>G(?dR@F5LF1&Y!Fjl`b*gZvF9<W^I3JyMAg$7A1`#Vro&I~ft<x?PirD^x zI^{>zluqC0kF-M67pv5{^u;fODSh$D877o*P+$C-n9|qiJQ7m%J-!Hi-Qnnqt*4)q zt*`3<cH8+|kivhA1M<`&^rdj9FMmFy_Dbuk_F7wC98J!zFMha7>FaWTfvgbq6+`NC z>5E^%Qu^ve3R=JapuYIkETym3?7}1dX`H(kp|3~JrY~!z{j}5tYhUF!=QGP2jv*E8 z$br-yN5}_>lXoAap5r<TV$Hm920>ZE!ZUA9?q`{KGZ#VUCA$=7p)<S)IxGUvV0E+t z-noZu;bV)Sqc4Kao<-0pTm+q|MbIf*1fBFE=)@L5=a@r>vg7Og{^J9HR7pCqc~^zZ zxymZ0*oBi?fE`-4s!~xq>{<Q8t@CLU9Lm~#pp$*D4Il1u+62rxp+aUHY{U6+I@Kmr zXO)uZ?3bU$FH;A#3kk|P*lr|%cdmAWUxQQa#^;cN?@juTuOi6xQZ@GDHTz)O!mrG! zw&fy!hijpe-#bwnMxJfVe;PQd?@j;{1@IhpP2n@xxmtkfvssj-_X9RgcFQm9u~rOu zS=M5;W6yv?B=odndBE{O;&&q62dQs!Q(5iU$InuV-IK|^DbTpXp))$Wdv0<MW+&ae ztWq4ZOM#fo<9w{wDd~K4RM~4d-jwB%BTv7gt#&@{@@zrsJUm-v|J+&1Zr93RW4Yq2 zuc}=B+E01fr6{u{uPunvK<ia>Sf~7lZN1-g%AW1I^6Hg6yQLv_Y?0oJ0iJ>1pq2#F zv~~Z%7KxufP%YAj{E=3Ot<5f!OSLwbKFX-MMC0r?KWU&^8;*A=DgVKigr7f9ElC^{ zvyZ0%Ite+emLz)>&zAEra8xUSl?Z!%IfZZ9S;uk2SAmFZZ6xe(067j07kXxVrL|*^ z3Kx1leGXhX9BS;mvIW9*PsKAe$g*VPu*G^@mWw#F-fWzw0VUpoQngwepveQhr?pI- zKo|+x9$MZJF_8DSna=@1)(fXLl>o;FiQfwvK1lt9o9b7}{gg{bwPSUKS-IbpmHQ2D zs$VJhr(8N#?w<BgL9*M-`o_#uHDJ&$pSt@qA#u)T_+;2{b0(d|q^e)#$R{zHO3qeR z(Nysfd#Po`bHkx5$`54b9#3RK>NhTe@-11EAIzi^Z^?wzZ&?K8+p;J>lu0LUw@l7+ zN`1#7D8D0%^21q_yD}m5I~PIu_AJVeX3~idWJ2m^7eSfN-9Brn`&uTQ_|8m7{h>ur z=19*^`LRqo@z-TS>Th2J<-4*dpUk8a-<1iezi$zg@6Dq8cqX0rNG7EIp+!)>FN^XM znRMd2Ga>cI7eSd%L4G+unMo%;kqN2i9IQ&UaP58|i}F*MbmG&Qkow0LLHWTf%Fkrd ziO*(2>YrQ$<%hB;pUR{YKadHjKeY(T4`)$+E|X6D=1fTa=|xaJo<;d|CY|`9Oi2Ap zi=g~y7UkzN>BMizgwzWs)xx&%H3!EY8^4rECw^Ndq(09{wJ_z!92}eS&ok-7-;oKa zk2$Fprpytezou{y<b%YIWl`Sfq*{=2{PxUL*n>BNa>L^eoyr;Pr-2kabetS-3GrjZ zzl4(^{NN~55i+D8Yb*$RVFjrK<Vg@gb{1qSAa^0C)*Z}Iyl;RwHER^JaIOW8J*yTF z<~VZ`B8HP=HbwbHD=z>n$OIsM4i5qHHN;bfDizm+dAJ-tO2{EE<Vivby^t5OQmqXE z2OPO{t^|ZY7jm7%A)cN4coyVMS&*ZE#F4@+>D_>+xq_HgicbTgW(I7?mmNBQXv>hE z689hfVBsjr=IHd??643|Il3VBzxi+oc^;5c_;qE-A-pSR)4XA1qIVxr<q^=z@td7{ zIS2lZRPk=*zVVr<$tnQdl5PQxJ?>Td8el3Mu2e^}Air-xh^JEB>w}p50HA3y+C%5T zEIMD8kc0>42|yl4D!1&<0AjZ!DzBHB$|)D~C}e?fxID)Iu}9P@RUIIwf#Xu%2FP(A zWDpR0l&exD0bvqVcW^Ie2*Kgz^<h9<?J(|PKoa;R4MpecfSmNz%I^Te0W^LroPXu5 zb)XKK%E$Hr$68=NGuS(3^a%$-<p1!cA_QCV2{i{BvnZDWV$VV-eyRa+`7uYaQPw0N z4rLSH7RFo0Ld}`mbP`C#QIpk@n4^2AuuIWK<mr~83phNKeDHk~8QOrWi(~q5h;RoW zc6+Ee{G^4$9|idf+}a}<1^K3h<Lcr?KpsR2H&qByCjl2{IUzVK4rfxbs4*mQwfq|3 zJP#a~jtPjG`M0Gp0|+axOZn}9ob;voARw%oE*)-LdcP0nbAUYLgM0&!2ONlrsykxU zCIBsIu#LCp7-21=V=1;RUvsr%ePg)LSFRV4%IzJ@(cy`ybV?j|QjvZL`=UOBUzg{l zfcSa71dt~j9CH+3#>PA(M@_B_>wv?G>dL2ELI`CkOl2B^t(R*XyChD+lWH#@><(Ny zZvx~|KwJ)w0P>U%@_s-b^FclZh<zyg`2rv@fEZGczp-%KymU-oJ&brauQEWM^Fhi1 zp(VI<YB=d7j~IFfxVq5@GLCD3L#UhAu$4+dOz4xxDx9u-W`Sdme-zJe1*8NxE{A_; z(P8R<7Q;0=_s;;w-)eouO6BtNw2#i(dFj09ONG8^GWiA|T1P-zkGt&L^EtU_9oU`` zcYYkw+3%xsaW)RO1q75&TdviWgR(u31RGOLra0}xxx&ibE$J*Eerdcv3+K26A=^sw zC%q7DT{eg4sgu5*`l2kH?}J8VYBz>uoZYXKyWC-~!{p=`zJh86$0tXp?EB=<&`fHd z9h%^#Y!+5}cE-LX81Ip~;i=(?@ig|ukbO!sK2<l1mp$gDg?Zih<aWI9?*W}N&kW|y z$%1@!rTnIwZt|29y<2OC+1A&zy%nF$Z13zw`-XRBXHsKeGc}{6VUA9+8^nvK_~yAc z!iHuhP>Xk!_%^&MoX6W-*!y$X9?hA6>P$dQCZHDCdMH{SE>1K$LU)9mjl~TWP!tS{ zC~a;7H#L(Q>4k=@+rCsXJ>^7nBqv8EQf_{ZJ5!<>Y%#<==nl9DlT(vcrhe2Gm7z># zPN(>)tT{6`IXk{L1(|YR5ila=eIeg2tNQ}<ystl_R7#EfA|90J*ObXOaz&+jFSov~ z4xcDNg1*6Sd{7eKFYIp}Z0W(L=DK>C@r_k{8V>|aP9Z}o&>@3ucwFfkADT(d98AQS z*!zJo1cwhK@s74^3QTiyFCgQ4r{`u;@~dSCaibH5m<gKGX<2X!3W~sY6g!f#-}V-j z`%}q1m7u@@f@+Tt%2q85K#g~YccW$u!+K%D<HKoL7VfWNPK}a-;XTq~u#>5oMVsUK zg^Bx#%%sw(nSCiqesA&(Q!{3IZU`^X&!+a8`%*LMacr1MF>;4M^T33s@Cq_M4@3<x zkY?l{78%Dm_&aFIEnY^HxxuRV&W14CQ?uKrM&>3`%0!!#PBN4(+beT7Mu(<a&H_7F z2JmDoWv-rwkn6(sU>TKZi(of)IB~^j=?*;g&P)wAjf_AxY3d^j;wUq-$v{OKovO^> zRS9a^!><jo1%;&}2!1N<llb^vyf<fZ8y2YmSw_n+<$cCxwWgU)4bM_t$%*l?$-UV8 zhUvPdk|UPEE9uI#nbklEP!78+DfsQavuVH@HrghOM~BqRWO5?g_|QcyY<vsr#;L2e zP`sZ5R0_9al=y~ijx5_8b_JXz8rTg!OpNOuFrAvfeG;l-7YTduXJlgNEB8=9l&^lH z?qwAgqm#aC`)4;h8~-j?a#ho-t=3lM4D%bY<S8SNqf!J|7@jY$1*xla)-#@IatYjL z29Cj6tq;c$i)37pwub+<_B{<7Gi9@pWxZ$y*?Ty3T@kXLk5E+Fl-rcbg3APK84_q4 z>@s=uA(2oUv)c@RGp?j)4b~h&zP4SVs0S8Q9jjrL4T85xRHioTVbttoz1)Us2^QV9 zlIAOET93N6D&?cF9d&RF+jYS3tf~XsV}IhBwTj0!Tac-IV9wMVMzQCmHuWfuPrcjh zaJG&Ob9&0$ZI24FM@p*2wG^w`A#Y!xcIz@nCz4~TUy=oP#4XKwo*IXY<y4cu1b}+0 z8H53dY7kxNdUNL^K^6&>Ae&V=V$Q;r{ARR_nWAPV>QA_E?OV82Q$3D{ws+upmfm94 Mu?jx9`1uh34=rG${{R30 literal 0 HcmV?d00001 From 2414a832d71630fd5fef3fea51daebcf0ac6c99c Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Sat, 2 Apr 2022 23:47:36 +0200 Subject: [PATCH 1162/2710] Make the intermediate gray/green levels available --- include/gamate.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/gamate.h b/include/gamate.h index 8b9790e39..bc6de3f98 100644 --- a/include/gamate.h +++ b/include/gamate.h @@ -145,6 +145,8 @@ /* constants for the conio implementation */ #define COLOR_BLACK 0x03 +#define COLOR_GRAY2 0x02 +#define COLOR_GRAY1 0x01 #define COLOR_WHITE 0x00 #define CH_HLINE 1 From b7ba02d76fc27ec287eedb8c173e2b91cf9adf7b Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Sat, 2 Apr 2022 23:58:35 +0200 Subject: [PATCH 1163/2710] Remove executables --- util/atari/ataricvt.exe | Bin 65526 -> 0 bytes util/gamate/gamate-fixcart.exe | Bin 67781 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100755 util/atari/ataricvt.exe delete mode 100755 util/gamate/gamate-fixcart.exe diff --git a/util/atari/ataricvt.exe b/util/atari/ataricvt.exe deleted file mode 100755 index 78c628e3e6d1719bbbcbe18871bc5b58da420604..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65526 zcmeHw3t(Kub@tqSUg^quS+Zqp<CT%Yfc0L<GT5+sOQ2WuFouMzSJFxrmL+9(<p<Ej z#gO0viPMmVB>oc!<PS+mOIw<fM;kXUCk^dS(=>h27V;-8B(xzdq$K$h|KB%rpSzM} z2&7HJmG0e{GiT1soO9-JXU@#+zwU(a3n2oy&zuqBQT+0X$>-T0M-g1O>C=Vck-R^v zd{pcEv&zwZGwH}eYJNJEI1rgg%+1YbBIC(OYH=<yGZ*O?9Elv5pG?-QT9sdAk{;?5 zqE9Opm%XohTzpxG-|`9Zq_|KsG~X7X11W+VFi~vY^fPz#1I~PFxcMuuqwvA=#vK~V zbyN}{E+fca`$wXS1tEq=|ELg8+eB25e4Y^E2|8jzY><F+d)!I7XF;vWBoAj0es>s; zV%#iiR{DE|*jqE1$RrRH!)^1TfF9?H32~|>r4S!uS?X|;Rv~WJ6$6=?@x__h$(hL} z!T}J(FU9S;VhE{?DnJjFg9RbIG6l1qF-b3-roWg%*h^RLb(Hy=QTda+UH}g1Rd{h@ zvK;Bu1i(@jN8t$J&SHE_;w5M2fhc8j0yr$kX56kTCPZ6py(-9I=I>tI#H+&Xx?;p@ z*dZa$@5j%>xMy)+C_(lkM!aaf^q*RVp9qMO$G<5-_9I5TCdpxOJ>^;lynOuLi`#X@ zh}XPbLXPnn10M7DF$uCCG2(4+k^U>!;AaSU<lRFOWItlW+o8&fsw~8UN$-m`igd() zXF<k}f9Ke@pF8$!@##QS@!FVp`X<CV-BHDC^Os^02;<MwZ#hd?`Yd77X9;^f!oK>2 z6V`?NT(f)R*s~j$W?f92DSvDsCXPKDxb0NYt#3glj(@=p`36Gn*!8#yzhCT)$qW}E z*6|HhXa4%wv-<Hbvj|&Uko!d>CT{y-ri1|jMhR543?ZFwvd{qpx(XdD0Yk1rqIV^q zfBhTd*MDK^glr%GnB4f@BX?yk6y)Et757Q1r!sjKwa4#cc5XYBDL5XeI#d1?l}D8G z%$7UhK7rp8=I_Ji?`P#NN`6O2Rm92!Vn5xB#88$q<#z+a;gsUoOZ9`b704vTd&e89 zs-C_R0>16<i*9`aVz{IH9;9$bAChkmJP3@_?fPd7{uKD>J9ZRLUZ;=Uisu-m+P>{5 zwB~es-JSBMEP`SmA1OY5_14qvJr9F_r`!8Z$)BOe<<IDo@~3J8c~7#ysJM3x5jWf; ze<BadpN^yaImWvEAY7FH<8a>*J51-7=q#@ylfPbc+aJ=mDiVS3t3Z=wsiN=eMYmq& zW7t+RYy*Ae+sv?^5pz|Y8TO=%7d68^FT+~Qum@z=PBZMy(#Q0U7b6$^9SYo0&P0w6 z>5BgGp@KWgN&5H@a7gv|P}v>jBzSzN;*N6CIzA-z9Jzn`Ch+2Pdz6X<Z9m?A^Xc}M z7(A!jcS_A}j}<4#kGp~VSOZ=6*shasq4luq>3e+8m@ig5id>4<e_j`N9Ta!m{s25m z!lz?Ox-lu;<M~qJF(u=pM}fxc^if;JF(u=el5tGQxM%C>m=bVI2{@(%98&_0DFG`| zF(u%b5^zijIHm-A)Ggre|Ln|}<6lrBzHK8s&-?=(tY>!=A1^1rpSgellxJweamm7G zG6Xy#n`#NKI4*ho%mCn1C+-+3J1&|3Or7ZmAxh<$Qqx~>T&lw}&;L~6>&K-WpZTWg z4;+^Qe&$j5Pn<ygyl>lHNDi&VeRawaxGzcvs%jxPe(c$TV_)3x1v5*>p52D}9KB<- zst#;!IrgHj=+;x<%Ao-?4mYxz*OkXa{i)l&dc3Tv=<ZX<ENGn$k~GD4d=*o>pNjr; zF{!_J=Kihl6utXY(I-zG`{K6G7YOp_*o*$f^~aF{NJd$$jw3|`KXVh@;EU7+2mJ(4 zb-R%%t9p7AXvjG-^>OGi5<merAWKhAAOI!Ua5_ln8C>5x4tiEnK37u3a6e-J!)na& zE7L_DEl_rQb!N*+v;Di*{C&XueaQTM#Qc5K{5>Uqr%tFpwr9v*6&f?yXvUazNTTc~ zXU?z#P~a+pQ6pae42MouUif=v%Y!Ce_A@6=*!|(t*Zug+nWwME11!&+zw7;on5jSZ z;#)EsNWYJvSE|s(Z+*4?)EDmhBrsS7^YHWZHUxd|)YJ+1+4DcWf&Pb2oOovak39S# zLl@9=@}gThUVFU8fnN{@CXP%`PfWzq)%7)#v$G-|PbH^k(wSr`K81I<WPE0BY97$Z z<Wg|tvAezfvdGr%fw7At_4PFkHFc4Ox`z6??F}uFtzF5<`BWm(eq{O(-u_f@b;HHE zah9U96zt{Del5<+lgWQ)zAdF2fW3D8d>mk3z7F?>817ObhDSO^4nN;{{kkK^+Fn=x zwU3_uS!O-QB(Ginb2w0D7Dc;pSZFuv+WLY(;C2X^Q!c!p{M?x{ZzE1?p?;gMZB@{B z>`Oqgr-HKMZ8PJwoH}zxPET0zy58o0Yv5SW_s;w;w0^nubStT}8#0YP#Ca6>weEEG z%Vd^KCt{{E^yM>W-sp~($!Ek~ytXbIms2M!+ucYrf?v^I7#S_Bz;pRH9NRL^QN*$8 zz;e8^a3@~^ZqG}=-F6PRTh06y1NREP4?qsbd?=#-y;|Xhs|q8&&iq2X>kEZ}E@QcJ zSUOPfg)?U^1_|;hURZ`_dtm@x%6cd64G4b@zX-4My)nNq&~5C&v&ZO>&(Xpv1l(L0 zAYW#2KLPw8@o_Dew#CC!z?E}R=YabFa95H|73i>BUjc3uzcyd?NCg-y)LX$52CSU7 z=og)Gs2IO|&z%cSo~u$qaNhc`3l;<HD=xo-4LJh-EbbR^>u<u8B<?EQEx7w|zXA6o z?giX8<354=ByL_0;`fud{}lHVChV1_w;lu6iNlF_0(0#%86igCKaiN2WBN~tIL5p2 ziBzU8RtNw4wD`<{g~e1dzK}tYMVEgfF)L@7h4{K3qht(WF$&HkCiXF+_=W|WnZsat zE<wG1-cORaNfrJN2c}ZVq!8Z<OeZrF`x2!4AHf4Q-HFh`e0t_^{6G@0nQ56Xe|TZh z!i|JeNelURwJy-=n;B0fQb)wE`MQ&t{`twp*<?>*ZgMu+3T_fMl$xJtot#W1IV=Ac z{=WIdq!|YoT<dr_w<^7QK_~+a_kDHe@IYr@V}pEq0QuLhUuF(ya#;cW<56!ZG&vUq zoz8(1uLt)YguKISHwoK$<>3Rfk%P%pdS-rZ*XH_~y3LW~+{FCk%-r;@&10io)h(MN z=?s)NF*`q(+_m{gGQIiAEAn?H(&^-Z@!2C0#Ggy=+Ps*WyDUAi4^<>xePCuHHJ_fJ z%2ZFxAGj=$K2US8esknNVs2(Cna=EXCw4`CB(gJ;T1;np@dkU2#2Pm<8X~5X6N{;t z%n{`UAeDU6B9cf>4y9%e&desKlW8l=9ol&q5i=-pU-DpbHZsfSuFZ*b@7%%p{mInk zS}W4d+GQ#3taYcpv(_#I<L*Sk7ZRD7@tIj<Z{=cn(8(>8ft`tkh1r=25SpK}vs77K zJ-RO$>FvOh?d<#^tk_NxC7F)6up{Zkg@yT4CNedjid+Mf`9tZ*Zp;`YBGuJ4DHAC< zi51`8$z7XoN;cHh*GHSSSJyX1o2#RZ6HV2Lrm19gU0us$GMQ|gY@Dk5H5YqceqOep zH6M*l^^Gm#I}+7RlRJ=)sqx9`mSn?Zb)q2}t!rp#n%dErcxCd@a@KrA6Ae=hEy>2} zrpECd)zN6QzIr^dW1@PpdB<cl5lu8F8(UtXeALvRH7E5`&D)zNwl`O|)FtbyqYaHa zs&_Pvk5{)ePS#B|Pu5K)w#%GEWX*sEzI@Tt*PS&dEy=p6?TPw^>hY=ZM#v`FQVmHp zRYzN<CY$OK^-YN#QZ_0lJ8NB9DXT`UN7>Po)LL!H6`X>7?OKup#cB<`pzdVdhw46A z_u0D7*ZpbT*XzDr_k+5h)&=Sd>o?YS*ALfUTR&Bws=u-RmiphQf2h8&p{=2}VW{Ey zhRKHg4XK7B4R39@tKsg3_cwgF;g1_0Yxui{ryG9Q5NIrIj5O9X?riL6>~GxN7;oIy z_@>4i8&5R;uf_)&Ki>EUjh}1$YU6W_7e-kFu84L<`=TS!>!Q=qx#(i_=IC3a4@Lhd z`d88KL|=#oo64KEG)0?sHFY)J()626_cVQ|=_5^#G?h1B+I&m%Z#4gA^ZS}V)cmpL z-)nxn`CpoS+w-^IsutFlEc9zYivxTY;=GS-d{P_}@_k>z)Vq>Te5uq5KY`WTh#AHo z761NnE1XNd);pLJ9$agMb1gVGd>TUzHF)46ac=lmF)gLSxq6%%e(8EE{5gcn_gyoO zDt}L3X@zsOZHtS53jddGD}3*om^8&PqnqVxyxIz1K)5Tq89sq243)oA2#;Ek@mq%5 zC*FlA3fJJs75-oC{1ZqvC^VV5wV1|_wAXJx=b8LS^?}SH25-~Jxnyc)0^USwV&ATr z=9cD2^)&vcC&wezgAI}DskwQM*$&Ll!A%pS3|0iHrw-sfB{7|>o=wh8XZGzv{{T=5 zfQk7z4h}PEKr*SsL^1^jAQStmVP2L=PGsg&)#*%Xeh$fycvcuXnuP=wFm|QW3)SO` zQ&UNx&)k^Y6%`xF@<u*fs;&ouc##u9;>0t;_ZMq7Ldtp|yf~M}n^|%aqoIt@ec|*z z4t~5)J%}OfbVNQRT0ua%C+8Q(XOluN4#c}==M$Owh8Ce~A^9d)LE9XpYDe-D;18=* zCDfaUrrUl=U|k^Can0axhw$IE@m(@jV2X(_1vASMPxl2?o@M#sSkTEdHlT=s{t6}* zjK>#k(BL{*YCSB|&&`Ct0Zm0oJdXF`#4P#be~=```UVHO<3ppvBDj4W^P+O5AfLOa z9g#}$`kWzS->6B>2IKQnQ_WF8LVGLQWj?0xGE9G_@Yig=!nm>Y5J&{$X;V6(cdcdC z&kKY;?0*s=tK;!Q6Z^zR3Z`w(xOi|igG7iqd=9QKi{=;W_0Wg%Hef<5fVqMBMF=(Y zK$z4BIGC7SOp4G)gP%c!08%_K4!z2-q@j=bNd@d0>w~aGc#SG)yl=4m>iDS83yMAk zD#18}FtHyI!WXQ+63H0xwwY<Nz9JmeY3~w<&(ZQP+`L*^zXam@MR>c+K_GzHiNl8` z(*PJs5#p32yk+zj1mY@iJ$+EB!y?>bJO-L&!oL?kp;|niz%9$lwBwlrqAI*ozZ>-% z<;xt1<K04pugJ4X49EdYh=i|{5afV3`{ox@A{>(-U4afvCXR@3s{|n*#6n#b;Wi0D zUI;mo#1u!kU4qIK=#Y%pAwd-;mIQT5&;|vXNl&K1k}e60$Tk&f93IraEAu@ymq<;6 zD?|D8qac&%`S?CL?;*mk%Omh;S$t|Pb7Ucz79-?>(8}U7Y0mzL-Sh`E5u$v43|z^b zO=6=pFLXi+kL#V7khDZIQA!`Yc)bzf$q<<Z)=bSI4^w$pAxu9X;UYYJJ{fzv@RMxl zIt1`G>HFhwZ-NZcXn%wrzEOV%0D<^;BApcBn@X;rdIlij8{xfKB_i@a2Iwb%=aUa+ z*>{`|T9yd^?;#|DCE6quDi#PQefmTgWsN6OskwRN$EQ?Ti>EVq(H7xZpW(yUHy{D? zi{SCBuZ$2~LJ*CR^9d=y1lSyOW6q~b^#W1Z6wggS@bf<XvjxyIEsjQLAvrNKHItmQ zngO{)98RgU>ogNA!fD@{YLq6bfd#NQoteWNTzFBTwE#FVn@r3tE{O0UU;bZ%`c4fc zOE1m>>qeif9We{SN^+Bm*`dW3njnaq6-tkWh3aH-7H^;;{A<3lCqSrAi%%TPpidFu zqbkyngisFQU-#vap`#k=;UN)zz!$z7QT7yA+VG%nHKpI9S&%yMQC}$q+y@ZqV|;26 zeENjXcoy-V@D-qR(`+_=&sY3en0`DdAyeWJU;Yn)fJVblxl6&m6~b}}R(h3SX`bre zhv59%!Lr}>;t}MNHP(NED0H6opa}o(!!O&qC*Y78=u`e@Ex&9J(p|lMoy}3P5Pn`i zj@$;~;QtGyrY=GoerPpC;LU$ZH(G$H*#zs~i+N8WWmNwu%z%jSkEFK{8V$DoxMVL% ziH2Zyd`hYGPh@OVdTIC@{%I*SdIJP8Kfiwl(S?>z^^Q=+3Dh&6wvozQrNs|n>IDb^ zZQ~sPY=x>OlTd)Lwu+3|1`@OLtV6n%M>as^7RN={&}0^%Zq%s)O%@6|#kOpfCNl$l zT9isqtd%^5n9!v;=`Ybr$hU4NFDR8MN>Huw+5M_8YZU?Lk>o{#2v=ybwSpd@Crc-x zedlQf?5Fmq{DR5h^;*$Kz~sHMPM`$mYXyU7j3za!V-ev9R$~C#C-Uz>Tw=QvgdkJ! z6jo_GPVtHGX6-zRwKy&nuOPft`zeB{(d=0+(Mss0e`bCha=TPzK7bl7{o6FzD(J#b zh4nv#M{zub_B7fe3d0>*51Ip62uP(<E2S6y1F~jzDSt?dCngcxt(8_&Cq#%pdw^-` zUiss<`PM@J!ST7pG#U%i7vZ=0D%cN`d?uBd-yfe%u;SkCD`llb4io8#%na;Kq*#vo zib(^Fl^k(60l(o}%YLp(i%%yG97xD+5-t(G!&k)G0nsr%lOcEdwyg#yA-ohy7{1GQ zUKkmLoG{OroI_5~#f$LUeQTs72+qtOf=!HqzeB+npqChR9vHXaClvfJGS?hUs0_c; zS9}pNd=$k)$DNo}(BJeGZwK^t<TjZ>ZAh}c7U6fPyxz+MQ?88Mtq4CL;qIKgTLnDC zfHb&wXd-Q8=C@SPBg`a1oLs&~1$>qPjDwg~oO@Kz7q$34s{?tjYWyD)A&y2_6e-Si z%FjYbe^~juE&p0k{@e$A8F-ZrqCL3Jx1N3i%mt6|hkO;c0(4k}*xb-5iER`issvkM z(_i^q_?XYn4rh(o*S*h2)mmfflDOZ;q*W#!v*J~VReue)tUkg|u%9EWRcxlsO7sH) zpTZ+Voe#l;U#932Mo;g+$Y|?8duKc@0{+MS+YlB|nk(RyjjssWScF{x6hCPMd-?}E z#!xT)-z;Z5KbtjO517M$zF5c+ciy(u|AvsDJ>Jf%E91L&@dB)^@K!UyMVkln>$UZm zlhN2+&On3G3nIT!lYN%Z4kV^$CgS5W>4`;jruo~of)q2Vaoy=a;)eN@$Zt_FUBPDN z2-~4x1)8(OC6~GKFV|Kxv0^PbcaZB|`MWeD0zes3lB-|&ZJMzIfC^16W#zYP`MvON z(5#iI{0_|+2PC3Rachqv+okDmM@g$d1*4Gs9xd-EP_}A(YfFp#Ud^}-{%zW%@?WL= zbsBpLYG(>%>(}zg$EX4((Rkz!C{T+wo|Z~Xv_S>iDPa<8NI_y6-ch)Kmp`l-A3$;) z+CmDe2+Yu^mVZAWJsLJ9#bu_@4d!2il7O3gG*j;R*J`W24zxFD6Nj-#XHt8Ew)w{Z z9@h4uyjXt|`ES&WcEr0`ODxP-QrN5IeFnKds$fbA2?e{=q~9R&r?pjQK<jobYaKBE z1}$%E2^LJXg>-Upavrq+C9ya&s|t9xH&B-SfC{<?g2rpL8fxaxDd0&hvyVM3)G?Ww z!Yj4NPpgo7U3ww%7d6>aKOp?<u>D(*K|dR3*;`W=%(3VtaIT^<_$VjgzXDE)Lv@fa z6LEk6tU*))SrdIEDj&i>4X2;OW*L`)lF`h#zX5;f_wnE@E304lABB6>pW)#mMz8Q6 zgB(I*s8ipv&_klcRlV>+U`x_Z9En^6R!iEN$|qUx8v!YIPKZ=!t^=Ej)F^J%Mv2S9 zsWQoIWT7>PW7<tCqt%OBv=6O}RwsU4`|1*Co26=NMFq^vcRUE<0yE!oU0N#%onbH^ z!XLo=j}%S?98N(*70I;^kB+c5VnC&>)vWmv?PO6orcRhfHzIBEWrQfI2ZXtw1|$y< ztq#wCeCk@ADC$Qzneet{!e<apUVdch@C$E4cs0V8pe@ATLE@am+Q{EujY+JhP}EK6 z-cDe?GXg>0k6TldSX$PsmA2%pm6kngrFmzqH218PX3kn61vx9k2@QV&iiWgur-`)e zxhgGS&P{=idu~c|&rNB|PCIFKUmEI%R(A3I%U4wNW2En=!H;^;07I1iR?x+V@Gl}% zw+%gnR<PFg!0KZcaPmZc+*Ld9cEU+Y;VUj$0vyBW5ftCd1fGGzM;BThJPlVXBMMv; zg;t_jLefsInu33=jQdVe_z?(?nfOcG0aP0QJ4Fb;s5YYLVT4hiv6U4mQM><@Sic(D zU4hr_5!_?~N)J5)3%reQ9o`=`D_lF-0}Kt*MCk9!>Gr)-dJhT%Lj-yQ!l$Z-e-wWI zwFH`4ZF9IC73x=n!&jomy%D#y9@7VYWO2Bj9Jaz=Ar8OySBJy*VdwG`?#E3Xz9*N% z4dk#D{t9vU`@cFIz6*08U%_py34S}5!;R#y75;N__)}G?9qvTKbdhX_FTL~?Uo7*i znprDnsZ3@@EpsIgPb3#;wZnxmEPG*Ur5cmm)tFR(iKBx3-0N(ht6mk-37F_`8f0dI z>A|)1`rEPrFJ)owEK7Ek--ikCBe<VKUE=C)9lF9i?^q%)d(e^R9$e%tIR*+j%VEC$ z3aU?@>LZHjMyUO&?i*a^XPQ|<t6~Yv9!cdbJCZR;;#C_fM82obV|0v&<eH=ZFV;$G z-eFiC*H+}h9#;>yP9`U2xy-S3ZgF-NWG-fwaz|i>x!mT*a+}JxGj0pnOK*X_l^iC8 z;^xv@AXCVNFXfj@Z-E<2PfLik^cHy6TC(P1J#fEPU&nbUbA4<EQn@4$_}~66I5t=d zavw)z<>7)HafIJmcMCiaCMg2cx?A9*!Af8RMEC=MAAwV6-u=jslTP4cegh$w1|WX9 zzFGWscth44OK{ujuTylk;DU8!&shM)_TX@NJIDqZFZf${<Y~U~`T1E9{0=?7FxC<i zluwY^E11Pn^g+=Qx<v0rWA29l@NPXDUzq0@IJ7PA&k;%ZGgvcAW5yBl63GQjhDvb2 zKb@LiT!6)+2-Qf4?nkURYztHI^pOMONHkO{0}A{E!a(wf9Z)9&iv1Xl!tmIWYP}39 zlR;T2H^`t08RVqiD4`qtoM*_)98AjTNfC-laKt~CoJJkD!A%leCG(11fD`daEMaES zBGjytX<Pjs;C2bT*uN0RbR^!4Cz6v`g$uPv@Ff6)Bk^&RYk_kPp&b%_sUH(BZuH9} zcpJc8^vfl@nq)Ae3bv=`L};f3))3hN?vlV-nd>a#SID3`Gsv63l`^c}3UlbiWI%%q z$SPZ_3~Drky!6^+Skwx0=(Wp$CQLbSxf}}!8+q1EsO{QO%;?{-jyfMwEBfKPWKf>< z))ag*G;dq*Ry;Sl7T@=3`tOyZ`}5OCb9z2C1Gejr7+2v9TKLsmwb1{-cr*M@`qiAa z(Erd_3;(zM6E|?~9h#|sDxZ4(w10x_ik!dGKW$K}pY<!<*FRJG0=&;v%ud9Sl+gdA z{1|9#)kIKcdaQR~6ssM1RW%p0K#ny)-u88}h_Y1D8X)g;7hQ-P8|^)<!y<p9CM$38 zRRl?<<Zsf-*aQXlNYGIG2#gByN3^y3;YZ`C*4~XZimtWxUQkeUCo+h3%UpXmE?Ccn zvI2YU-H7TH=sx^vLBMEUO&`4bg|S_>LIJ<E_HJx9$PeAG>WHzuOg004x%O^sUr%4L zA8YSMi?I<@%0%#YkyiL99@X&6Hj8OvMO;)FJN56#gt<P>wRhu+JW^n*$2D}!MjBU2 z2y#G(TzfZS5`;WRBrcd6trApVg7AuJv`Gl^LL|BNZnR5KnF7hRccVjsDoiX%s#AhC zD3DrvH@YM&BC3awIbAab^((nHghg+;_HGR2(+_}a?cI1?9)U+I?6r4eB%gc`T7|Xx zZtRwjfF{C}(ID_8hdk@=#`t?>Vsib;m?)(WNpbnzm<*9$;0~AHjj6m3kU|Y}X-uC_ z-rg>Pq#FKhJb0VrgTD`VEmvo`l%yLs>i-u2znT*@ZYp8Tfmbf?88@p$ME;MVd>WP- zeDc8@`&box*8nbpA%vW7E=j}!2A1C+$1GvpbH=T{;5IBPY<m2yzNfJB%)97iV9|>m z8NlvEF9VBSq@A_sWnj_k^O%{;S@bfn=tTv~S@bfn=tUlR7QGBCda*j1i(Up6y%s<< zYthTVq8B^beOZfM1{S>t&tCL0u;@j&d(q3lq8F#hk9rop3@mzaf;DT=%fO-+^LlUA zqL+b1FA~mK^fIvM#egLiy$mdRF(_xz%fO-+1D06yGO*~yAlIUofkiK7=`peCxexjZ zAx3Kv%fKSmzoQHUnA86T7O{MohCFPWVZ6_`8Cnr>mZqoxh@ng}447n)H~`8d!+=S~ ze$a%}0ia0+AZ3I=;DB&t5Rmf;DNrUE223(Yqu6bdVZbD#6d5U_t}ShnVZbDV@#@Uw z)1)w9lJOSwB2l+Vh5?fdqP4h8G7OkxaJCi8=cY-90h0_inlTH)wi6~9jM<?~G7Okx z5CwW@n`9U;$!GwfKHDV2II1E+F=3>^x@o{9gB4+vd_N=%m}FFdrF&LcCK(27GT0>a zXcnkW7%<9UweJHAg8*feVZbV*4XHihTV+{g7%<DI0xzGGAS4F6j6R^iE+fbWLDu;H z;9S2`<Np$wF>Cx^Ate8AP><H&oG%v&K|YpU1YaZyowXhm5nK<y9LjdUAzLM%@{d}6 z*-h9c8OHPa4~p0(EePX<QnP)6HvCXB87&}q^Pkd<jzO7Z7%%4i4pK(1AWbriA4zW^ zS~-;T$0d)Tfao7AlMLf0GB)}GX_8_5w3KDuV4GwZX!_XXMJQvKWEe2XU;|fWnPeC+ z$sn(`LRD#!0V}mtWXv|pB*TD72H60WgGq(~lMH47>V_2r111?P6m$wE83s%;$TaAa zG|4bvk`YBr=#n(aFkq5FzA2Lo111@y1l6)kG7OkxkO1_^G|4bvl0gXc$TZ0?V3NW2 z7qoiJF9s<FOfrg~4tq_L3<D+^_aal1a!p+>_!}_EU=sn8jHeNo*e<~nWD1_bf_axT z$uMA&L9v#aCK<+7O`k$c)szSWHW~ENFKsXk*kmxT0n;YKfK7&M1VoV98Z5)3)V9em zIxy6e)KCn_1x6Y4f|@kSFkqBHziE_Vz$oLhpj{xs{E?jr`yXiE+flBs15;|_I^}08 zE&XBT|98v3R)i@pHg__7qX?4>TOG?!dYdhOg(zX0A(<tD1P9q1l(0scEbAt4J04*c z@C|TCN<LBO-hF8_`qxr3!((Wxe%(R}ivoN7ovZZW$Ne8cnBQEjg_jHk7i=s6*r$LJ zB#n@@N+14aIpYPX>3Pn|g7b>GYIhmsFY9zE2D(c6PXgq#TLvEkMDQO-==*qJoS{a? z7=r5$=^TUmxuCB9cF_?OLipt%<ahFAhp+g&7dW!?A^F^-669!IB}h~sUrEihh#%&$ z4DYfdiUQZFgL`c=Qdp)>u12!+L}060xW>qfFe4TOEG%3rVF3l3OwJ}@2UA#)Ukejy z-3=t}Iteat;^XzV@I2!p5G{6q@i@WjCAiE(g76LbJAq!|fvXrBWyl8Tfnx)JREtWr z66%-<#u~Q*MikJt15nUv2Wn$pu3+)@(ZS((U+>5$QOmT|94QvY;~j2rxdI3O94Xef zU)w#}HxeIe?HK93u2Ym4#`mCJC+kb&SC3pfGTPZ6AMNe$6a~e*0>#(D%3tf7KQu(k zh2kp%d7LT`TF=b%zWPyEGhyX4pkI%=6p*k61#49>T^JsU#cct92n5fMUp+R`IUFCs zyHaOIyrXrrRXpl1?g$jG!)^<0IGIkS4kjn-MR8X^e-m_2XuVw8Pc1HFR07>9XS$8s zAc}heI-{4Z>X=C%p#5{ZG=eVfRhdT5X%TJ|#a9LNOMr~N(?hv!CXp7!R|oRfqDT+> zRXrtQ1KS5QxU%A227uJ;|APYNl%%*1YKKxb5-mD{8JFbb7)sQ^<4%j;6s$T3xDY>k zOXV0GP2qrSdM5o1b>=b<OsQyi8dpZYuRjmWZNEmn5f1eZbPX#1*nqUpRuGLC-JPSO zJ;R-?9RsZppU(s-1V4QvoukT!^C_gyg&s7~cXtkt^bQWlbV7uYV0?Fdynk?PU^G73 z+Sb=O0t-fj$dXIp>GTeD4$BTB&!iNGo^=fO?(U2a4R?0+?m@JCGf3tl-Zj?OCk%pm z2YN^2oqO6lhenb12n;a+L~$GvGC!*bMj;5krgs2Y>xSA7UmKSNE_6l84K0#!M~7Qs z2sJv`-3_CrVi%~jeH1wrB?Ot&hk84J83!r2L@7f$_mIG7ykoGx73sGQbVw$M)iPRt zM_=zirzn%2o=zCg4~&j<wu^ECSenk^;eo+;*YIFJslqonEY?_oLxUr|dr-RevEkm) zYvZk>qr<&zW0*l%YhjG^^!K&3iVDj=h73w#Bgo%63)=05o@YVZdIw<2)hX5!&@(uA zwb(#c>u~pOv5~IMf!#yme7ZV1+s3+)k-jdmiT;sm2ij$R2X>1H0a@)wr9?vUa0s#- zGQ_WG9fksRi_KQZ5Y!-kb?3F>0uv%RA*$%>+ymJU4G*?=j*N&cRt#_&+wWWZAc3np z2gHShlZ7;9BcY23!0Zgw0rj92;@nD5`|i<rKfr@Sqa)&CLi*4!+K@{KfyyY}Uuwlb z;Z0G)CAJaV+6S_6rN8~HL!z2MI9#9_g1Uw~J6*6^!jPxVfl*OMH!@9kJ>8uH9dtLC z@PUz$k<KB}XnKdPp&X;8uN&2{Lp0F`epA71#gW?H%n;V94yX!wD7Kq1K{h^gO-FoW zxLvfkVBNz*61IadyRxAYwPUZ1rAXbZXxQ{|8Ih21PbZ2D>2#r~AWy{Q3{Z7~EOY9L z*vXLo);(_6E)iO?Q7gSacoQ1GQdcK09xScb^bk5|&1E213IjoQTG<AIr7#fuIN)vr z!BQ9q66Q7#EQNs}VL1kZr7#d=Vzz-`DGUS+0Bi%nQWyws0>Cs7EQNs}hYyZ{U?~g) zdjN482$sS?@HwPs8VHucKyV5umVsa?3<USXZy5-d!a$IIkAYw*3<NoZa~TMh!a$H9 zw}D_O3<L>t3<OJIAV`R9AXo|m!COJzF%T?;f#7jKyas}$Fc5q{BH9Lmr7#eD6lfj; z!BQ9qeg#0sK(G`Bf`5$u*=-<L3IoA$3=)pI3<OJIAV`>FAXo|m!9N47+nc%Hq!d<x zKZI{dtH4rN1+r92SOu2CDv&`QtH4rN1rnHR6<GQvtvI%cQ#6jXs3?V1Acy1+h#-H0 zPh)T?-xVo)^If?Z&JqgWN5XiKfm7m8{1Rp&Mj61tI)yIZ41A;~A0pTfV35Nz8JB{Q z(ag9D@Q2@v2X8sN@M9Vp?vmff!$pi<5j>1>LAV9O6pBQRwndNwXbJoW3kbtM=7-$% z{W(PCPLW8P`$w^GW13Bt{hLoGgNm>+WUbnWAE;RkQKVK*)z-3q_o-1|(Sm|<c?8=M zlj3>bs<(lHZU;>4!>R1z1qCj!!9>Qu`G*Q#d_gbw(7fo2UpG)+@5)k?@XmwcV^EWa zaj$0f#066`hZnK*lEhIB$v7VS#gB5L)^E?j0-^r^kssNFOq9eFIH2gP{;^Nb&P08) zqU4}~khTLkQP~l}pMaAs6Nfm>h1vG>eo?len1=b`%{0{=$KtZk|HT(3XNo4q#dm%A zR0B~Yr-i@gD`Nn5<z0s##}KT%sEBH`14PA|HJb4PLN9wGqG{*7A^)G?xtyN!;)TfX zNM;AVNU$$8e<+@5k1~6I1BBI#f;R4B_%Y1I*fkZJT$~j_LZv41^~v{bq6U9#!8Thk zA6=r7=>>U=SjkR?upX$8;5PWnaE|7YxdcuzL2-{@PeWo7Z}XQGQ1#Zq0(%DASw*YP zx)Ah7_Qu4zxHPI3?Q$tH=;xW)ATo?GCf+^bLnEDI9fRnb*a@5OHl3^Z!gE$6bg*~{ z>M{`>OJM-7mcVsbqE!bTxy)q;HnG|uUy+!oiZ3K*8e5v<u%DKjGNgTS0@mE3=))xq zl_<5WemiqcDO!8S`fOM%D%d*iW2^<#RIv++C)PzYS?J>gXI07b$iMjsv5WluFcCOC zuNsK+EW`9B27aD_QVMbcze*ahS5&Y1D+?~pGbeVp5bIfsmMHfco6*vD^=8nbs8nMm z3z&sQOW(^@Mx&)~Vr4X1`rf_-+7)KrWQ)X;r%E-=_$;#j5Rv&Nbfs9c3p{L$^Eg*5 zR>!ZKObi_yzS^z-;vb1Ed9xY1Db`fuQSXW|n-in>0#A&!nC}v`PK>$44OvN$dM6{X z+Ng@Kb{`^DyCNN0D$<SKNU}7SI+0i!@m?!8D(e@!f{}Ics2wcxd65&0d<y35@2o_G z%+wYa#vz6A|7?tyT_bR`mt`cXU59y3v!Xa)7>QC#EK?QjWGiewuiJDdS@2HLwg^ux zm4_d4z+!{gg6Ww>@rGi;u7sc8q1du`D3PX#2fiQiH^}N9z(#Rj7$}Vi>co3si?p6* z)-B?~yH>{p>)gjJSe<D9Tfp)GlQ?yV`4iME8j-#pGjc`08b+j_!c6rGxUC}}9*4Q3 zX#?uZvg7eBX&&UuHtg|vZF78X6KTts6e-vy(qWoNBduHm9bdM!QgJ|6i~qj6Hr^;> znI_Yq>o%G8xviS8TT7D8rC&0%dk}9%eoZU67t~7aIZ-t70pH{PDj)hibLJFYS~X)h zVq*!wnt>Aj83J@`=G6Dia>gsmB&OR3IUCW|Is)5;0JpFP-d%VMVVV;V?;q<M?NyT} zogE<WvnN~2cVkLxV65Ma8`ONEbr6n**V4}Zq0wuVbAU4+8iBnHm=oo16eYs%a1^gJ z{B6N-6u<4)V(uHim}WtK=xU?kfG%OZBSWpD?L9E_0bIS(=1Y{pK}@XBh1~SE;+3<2 zp0R<e2L`Vh5Uc3v=xp!pZ|xI>^z>q?O=7@Nq8trqdl?5ATP;yq@Ma_dEuvfkKz5CS zz_pexDVPenFby>V9*K4I@c4xD=oo43>TDezZoO8lr?*|XH_*+wqz=py4S=5;3FsSQ zInP(lYv|rYw|ZN}>lNI5{U_}$^w3m8`Yxo86H#&!Ge%!q-(Z_)rHilrt^J}+xd(?^ zyE{d@6M&cL!M3Y9+eh)nB(VoMKWTzG2_h*A&_zId7Z!5(+sF6y9y-k_G{iKM>kTj_ zJSrz=is;{sWHA4OStxiECosK2#A`8KhL<?H!N$(v-PEz8^!E1kb#_B&XU@2M{jDQc z14B_Ay>_UR0C<JYjV^Law^pQG0xb;J;<1J`q6ZFHHT=@WhX`{^L0%d|o#doCdQq@W z1pU#yF$+GNOr$ZA`w%dLetyWo#2><f0Bd8=&u==cU2-&tOfc!7zl!m=uMbub$;0CN z639<5RG3|k>o7`0`Y!WIB(bhzc9z>D1fZrfR*wzK2wR7@OIh{(%$uKi5$BoY5*hn! zOGG54Hez4y!-JI*OI;@B9A10O^DvP;yr1Ae%Cm%7i4U!bp$9_MKKVBw9NH)Oh8{75 zA&SK=nCXYOY{H!R-l?x2LmXn`*kHLi0>1%2aPX`9->D<S&J|hZ&5I4Oa<CU?|2!vi z@M-jh`6>s80m$IacV**F_-`l7%FDg*oW#8$g^k{(h&~Pf!?+6`23d0UMs~62levon zzX8Y|A!5~c@T7PO3Q!t4K9Yr~)d5|Vr*I2!{uDT?$Sxw&<O?OSBuX)o?8OMtPKFXv zuH@plR97-^!gT3{!)D4*Weg(N{YUZgu68)QX1lD;4tmvXmv>>A_z3R35GV#;;$f)D zayzxM2OLZ6$#RT=gRlzCG6r61pVl(lzZ^T)bKAp(jY)0nF^?6!gOyVaR_@x!?<v{a zyL^3W*zw+yHiEq)mvh|g6}AT<=1}EvkiywVuymi~u!N~2eH%+W?&n^(yZ}#5adwL3 zn@wL<E7$=fOAy*g|Gr)vGbM^wF%32`W*bnFHzWZ80Msg*D9xXeAV_c<a=^OuRn#Tz zS7RvskHtc8$MgbpnEWq93+7vX5&&J8g{hqs+c<9kemxI<t@+j9*VCBLV6jhuUs3Su zjo{ZW{D`r&KkpG^75`O7j1{@8oX`1)u~n+=3E`E88`4)Td*WC)>%_5e&WU5;8%y7c z+U}e<7FH*YtqX)d?EgMOimeR}2W<~GI50@aQ+Uq6Wo}nLPY-`6?^5)?*vO%#g~Qn= zj)gxO{8L2mo;Vi%n4eVa6UX$d6UXwhPaM-PSU-Sd@@=bUJ*t0GrYk2<_2$*|Asd)x z%|3BV_ntVWdrlnFw>u|}=`F_JgG!n3&*LY=%{bq~Ez8QZVT&xP^qu<s0a;+v>RHb@ zaSZ0g9Ll&)9Mf}89Mf}79Mf}89Mf}89Mf}89MhLLaZI;P99zE##^{<psQ*aj+q8Pt zhw|wM%Uo8^`s?xtJX&H~J&(u(C$$pG=6N^$0rSMMJdEKacQ#=sjM}D!6&!tBA4Pz9 z;+Q^BN*}y5dDcBAj_Ff**CI^cD6=?yJ{gM>$4E9bg9mSuzJCtx^C1Ie@~q#ee*ggU z#4+7_;+SroIF|P*DA{L$=aUas9ruZ2e}a%rw#l;&ljjuLGRwSG&pvTXhk0uW$C$Qx zD<EZrIOeT@oKJ{p-l{Kk;+PKe)~{i9tPJLX%b2(7IVX<kOPx5TFLC0S4)fN326e~0 zRfl;iYe&pw-l}^~9MfUmN))$ws}A$l?}3nG-m1gAm5S|{x9Z*#$8?yt-j67I3`-ke z-Ad{AXck1CI7R{Y0c0Du!nXA%i1&n#N6J|zj(rUaBu`3+JaH_D=`L8d`YCrQ*mtv| zb_6TEt`o-&Avo_nP=G)3;t?b_(+mFxiNX?n(}N=XpNC(zb>D+SYM^=I7^fPY_P{o8 z)t}ezL2h~CnC?1pOn03)re~cvrh88u)7>YI=|3)+M=3D{XPLL^-V?|4pO&)Vj(MvN z^H!>N#58Z!Vctq*uCmNqb(pul4*<)&6$jz1B4cdxRvqT8WP>tq)nVSsEGY9<-E-oY zo^|4w4)fN(N6Ze>yj6#JEBU6(TXmSXl9J23RnIwbOwT!SOow?Z`zgn~Rfl=&C&A>s zrg^Il^VT;)XD1!=RvqT8?2Yz`ypJF*v0Vy6kSTZy3ue^PT1kg_E5%x9nz!m(wF1;& z)4ElMbt}E}OY2rW>%=h~)~&J)5PmAG|1)?L+SaXlhjxu5CXHKl7`M_3V$!%(hjA<Y zrg5w8J#lOrA*Sw?;>58FQ9;;Z@MS@rIHoUs;+VeliDNo8UyueGD=aW2a7wLt6q%0A z7wqStE8Y{w^rcQ5)4eB->DYX+1{sB%+$WCd*nA-+L9pwbFCCjN2w&itU9PjdbZovL z{4g?Soj9gr^F=c<d=%|1wwjqIj_KHZ(FN%3-V?|4WlkK^vH608A7Do0xnfwNMOP(s zY`$Q?Lk#eqIHqIs1%n=8Cfz5F>DYY1fX_0(d*Yam%@+*%qI2Sy?mcmgMUmn(PaI<* zq~APoY`5iKD@t+V*fDsO4q}H7HfzvNfVrlpW3$G)05VS;qf-(yPaI<_Z2BY5;p0et zb~vlezV3ZKs@7^}TL+UC@>sOLx8hZZf`5ivRv+Of*v}54fX%d7i3A#C|8ww%sPpCU z$rOD!6f5h*vC9#*!ii)3Bt{zU6UP{Dxf93ovrin$uahT^6?!a+jCze{Ik^prjAc$7 zGhk5k>&&R@#4!T~MTEHxiVPSO5td_6WWb<^iP;841`LX70k92<3>Xyk0ALyv889f? z1FvIH1Y>yPO@O!!ieLfnK5@)|LD4&aVi^<}Fethke#@Z9fI$)c9)lty_rx({i4(_+ zoD;{4>=VZf7!-X1<Q;<|0|rI3(Dxb?889e%6S!m>6d5omdJ1SBgCYY4MR|CibPS3N z7!(a7p4*_vSmMMnBj?010|rHfpp|ptm;u`&+T|~4TVyPM;+V12iDSmHCyp6Qoj7K| zwun77P8{QpKMD@W6UXEMaMT6!FfblIRzPJiPaNxqQ{qq^+$WA*&j5~Ds06Ym`bbnh zg#RF%eh!;uTnfs4&ewb44{^@~Z&_J!;@D}p3!cEkMT}nI|4qn29wPPw3q2%?T-D2M zmG38xL_Qy^mb5jMPqN;}!{^*NAyUvj@Tj1uh^49ItTt|WlvhCsj{HSO!Pry?pUl%{ zYcifV)>?JJ*$y=NT@u*Iha_;p5=#Q58dI|7GqjUs`@{w&`F$|qUvZaBiLIpYBHTa3 zU4?b-vW?_U&>!0y6I-6ZR0uP=1=Awsa+W+0!Y^jY87wY*9^w567vg$G!hF#d{D!mU zi&i>tULHHoV>7H<9yZU94pq<2j89MCjQS-`ix(RW*jcvVF30@dFJO(>J2RTI7<`V4 zyi2bvyVjrezz`}yo`2>rY;|~2Ki@BBaL%Os#KZHNhK@<wgRs%DfzJ3ydrzl4$I=BG zY8@W!g@G}Q$gvnYByDrC+N!x?jld9TX)K=?Yh<VoM$Dizf>m5QRV!{+Uu(Ba2Ip{M z-8bN1^bhXdgLPgzMt^7jAk5kOdq?`Yu#5FWMhH0wU05fLxAzZ8)AP1r9P8N=Z{!M? zO=2kw><-h<jxjRGOpahB*-NOkZ_JgH$ajKU+uO&m431^#_~6)RHx|viX-z(Yb!VFd z?1uXWyT>}Qy31gc7Q0HE;Lf4moZwYXFpJvP*@`%Y4sd8}q$jS}B#Im`>Gwfe2t@~M zXP{$n4BHhHxWoZl*n>k@<jz3`bhQJ;E*b1o863u%^4I`22@DRPL$~8FbhvYLY#5ss z${ldm;Mj2dsxio^ueTqj*=w92aC#K>@yHZbc{?Fwa;B|w0BhgvP)97J+r<0YVX!SV zpuz#l?HDlS@9nx4tLru{nbkYcj#YguwcAjviFbBmqfJK_jsK+pMzHp7hr>!f-r7Be zA&3oX<sv@$9`C}oqSlU%VXVj7p(A~RFuRA`@#x3VuaE@R=$8&|!HT^dqR0XrmiaK! zBkgvn4-p5)6bshL!4pWK(g~8x8jef*1u%SwMHy)WcLqn=#AXK%HK(<&w;NUjvano$ zCx4-caZB4q#03sM**4PJ(}lMmJFBva^^JDGuD}Cp8x<Ei5LKYA);>@`^C3&r*54~G za-nowHHOUxV*{uLeHgLX)CSQc^>)SE2eIt{W90#Hu@h!8s;d(x_KHg!c;}uWZZ~Od z8xfZ}Q0BF#R|>bQ7cAT64H|I;ReOWFxN%`f)HqOVxrn#aHMVSL#&~2fc2Lwh!QIf& zVbxxa#IbQ9K7#7ohk>SDECR={XG8J7ZxD3@3MQ>g>X*ZU1W^|(v<5HQP-{CZ8{(#3 zkW)5hqZgBA57?K4jFH|5CN4a=VqWTCSP>uE1Cxs;Cy*6n7@0=vO>G?EmIfGRh~~4P z$SpTS+P)+brK<K&jlf*r$%gDAJQbj8NUA_5jv^I198Aho8HdE(7?&-Hp;7~Z%bj3Z zNry&y#=6=t4`}B=X;ze{vdG3q?#SBZgfrdl*3q8MVR3~6Rk3hFQ&)d$9EY1g3gXJ_ z;D)AVS8&W7ya!>+X+`T<5WR}gmV@c)a@#$D$f~U+9i9;8#L~1*C&cU|u7N=p+dI+a z1hw{E(|Rp7HKCtHuMFPAQ9VSrgP`g*o0&fBQtEL6MtXX?M(ahd1G%n~jS#jqp%$yO z20Fx5PB_}A{y~Vwtj=s?#nn!5S1XzlwUG{!r?yaC-9h{sY#i$p{Z1fNI^JI&-`(39 zhu#l3Ap?VKmxfw<hq<3m3_2m!poPOC)%gs$0?j<WPPQxJb-5uuy=oXV>;#zwBKyRM z16Bf*-`9~<51ZTVQc)H6wD)wki7_t_m~~>e17kT<U6H%nu5m(?-kS9Y-6A)??Qw$5 zu@e~D(JOm(@SP3bwGN6Zq!hcj&H-C;dYxI)*E>O-=<DOVDd@2w?1se4u3e%&h)-OP zm$Sndlk!tip7H9fzT2(wYU?nDbnF_<@vG?{B0J2%sT<VN2Kzy#B7u9TziI?3{cR)H zVC$M1a7uv8MiB1-mI<cr=cff{lZPYf6HAUIqp#QwGLL)5SuYl{G|RNW5gY7$3@V>? zXY$A;-zCLYVW=MXE~kp{-eYjx&%I~4mXk_=xi>7=5hkPXEc$}C;oS*~PK;iVSA%EJ zuP0(6bRL|mOn?Bub7`xDU%$+_Jh;Q?UEPACOMF4m%bnvz!l(?;6)-Uj3nREjMUenx zSJQe|Yd{QFB4#Z}=v6rS;R?f#cd5Ky;j4HvzV4P^u3fZF;Tfwnzit>v6ciY-K&DU` zHZy@Y^Hs!VP+^UB<vL`rG9Q7Jt1eo%Q-X_nv|rQSB2z84sR2P}oRZbZ-%flnuGGw^ zEE^{CR5BqZ%Yv0z$r?K<^HF%DTfQ3G+b)wisSK0W8Vd)+Wu&zw+7^Aa;or1=Q;Aj@ zDqf43stYB@)`4Rv{CR6h!Y<o-NzwLhKyC|-pcB4PX5R%kA1M~9a3zpU<>Dd~CSoI^ zILun5nULw-Y;sB_MOG_LUEl>PV3ixlV#F$LL=sylEWC;<=2Dv+LFTH3CD~vuM?zi= z2|Kda-6_xMZ_`YH<{@2??+tVcVOSC^aARDw&dK_!pi3uNh(bq0ih2Z<h2@c0m73B3 zqWPQ>x->qwM8TyKrW{_QDwb_TWbKg}sdPE86=K?eS`xIImuy|JS`*!BP4XNOp%F2g z5O2*cu-gE$MOkGgtXefx>_S+M+s)jSP&y%sRMlQ>HGK`0Xn>1VT`notDB4n+u35=e zvvG_fa+#!OX_6vXZt6&7scfrMRa+y0g_lXx%F;PBOr*Tl171C+TlKZV!!qQ2T~<oe z+ViZGDxk@gg;w14R+ZeKiWab1I(H+Z+Q{>>Ta!(y<zq)sna3PP6b%WGEnj7^)gx^7 zsRq1K@{Y(>D<dJ5`kW4C?p!x18)#2sqe{QUQzqZqKWsxYYBoD0cTsKy+<G|#h=WI+ z=5$Ur_Lq2@+e=j=yzN5N%W9O-)7GL-^fs-vnDG;J-gdO!)D+oCY=8i;wFcc99F0w~ zosXIbQnxn1n6oLMU11pDk!rP7zM9Rnlm<fMx0^DPT`d@7kUyAo^dtwo9Xr5WP%<^{ zGFb>$hjO{8IkHw!ohH`Zp&2B#(@p_-cQk639YN+rN#F__*9E+ijd08kF{wC>Y-@HS z+vWi%F}6FshgI3#jjS47sCEE64O%K2vYO_~q8*i}<y7;q-AL%(4kgdh9~W|dHUX6# z!z>Q!pG2P1*{xV*qOuh@J;f^a6t`&W*jW@>y+%>4G8QW>EAh5MPHSPdLTbR_YW~Us zkgZ!+n0~njXo`J}(`Bx8Ysi)B$e0SZjI1%yIyX=iQ_0$DEwV-i>sfBIup8WInDudE zjZ#Du#?3NzcutG#lPsw8SuKs<k^*8WAqH~U7gTjQq_`Ni8(EWWx@>t|Y|A4eM{HRG z1V@g{RBk%H8X*Udl9VNKqM8Xv)qfSnypHVhv&&}4q$_o^(?Ja=u!g#;yxLS~N43Va zMb;>&SP=<ZOfRvBIs;kgA_uZeM-61n!LI~JUY1#ssw|bFQq`s0s*h`O*|}ErjTK64 z>%0x`c}~MjrN*$=+xBwct9u5%$h2pid%hayq9Za9&8iUbw$GJrHFt)Hp5d=s`>n3Y z)_zA3sytecdbP!A3NCat1wvb@C6m>*GA!Sc*u8_(Ar?JgjbMVRm15nfEa_dX1_`04 z=w5wUrJv|{>5$Ew!)m@x=$5wUDTd^G+diWb8eCuvj^O_Jt`8!5Pz1z0el<<|N#QE~ zU?hZBNxC+L=ivS*?!UtQ|8Ud%onQBQ7Pn8^<SR1zures#f`>+HB;Pym@V_6Az(aI> z5|7~L_&AM6=+Eim@rj`z4iNU?Xe@!#-h%$sK`m4g^uIIoIsFs-gIE8A&xbr*3+l{b zBYv06qVGCbUA!B&%#Qy{aN)y7KrZ1!CUc?$$&@(B><YnjF$8iwCh?kOiN760zKUBC z_ep!uDC(`E`!MO^b<C%o6Rkf$#OH7;S`iE$#Ot{oMCOs7+IR`Ho<Kw%z@=z)!zFIP zL(zKtrP1Qh>I&S7)*M{oqj)G<{Ct9)uajUdh4Gim@vER2hAwZyeIIT=Y-ldQeLL=N z;V#7hXFu+*;r>tDwD*x|u1~-v9>hcY9AS^+;s0Aa0^j0;-|!2*fJX>zw+Lf+FG6ei z*n~&mB0O|C;ek<?$m7S@^7{A~<s*rQK1bIfK7Jh!?RGr!@5Uo^KOVt{`1k`n3@He1 z-S+<-N^dIV_N#+hI*6w~bnO~{{w=|^A%C$JH1-9{{Bu_UdMH>N0(NLI>-U4E|K4DM z8Loa023JY{!C<f)#2EF8pdo)_!4ea7xnGskArtQglhmRae=%5S##c!!2Fs=Y{$M#K zw6xGI!2<s73`X$dyCoP7JrTSJPX9N9Vg9TRUhMH*;_+?s_|6tq?ZK>d`O1Rp=##nf zb*~9V;41OweL5KNAIby^cY+!Iyq&9qMP@lH)~a$H46c*#51M@Ypvi~(f*U3LGiWzf zqg4I}-}3F%LH}9=`wKM)D)niPpa9N?2pfXM{uD)MiS8Uk2C{2jeQAY05G>dU`G8ki z=(qU%5g&S*&mS!H@D-vBdIHsm^|Nca`suI3u?_oizaO`(d!etv#lg1FR^#E@#K%Q^ zMEQ_af?E#3M=i87<g3Pc6L264{*e9w{^<CaMZhneQ*`a&<13*lLV_Xsf}yMUyoHae z9>UWX`gcBc;^)c0yb#gzh!W6i_>|y)1Y8xm1^dTPzU$2LZC|#0k08_E$Gr*GGO~RB zLAb;ncxdk-OcrP_%uW2Itm0G;=!_5M!CIe5y=FP;z6)TY@<!aMrF=ULR{jzX)lzcP z(>m2^s2<_>O?pR`qZgirIn0M}e;xOaa9_L{S;hSfZkfia-ZDhK3lHr+JbWL+!~aP< z0;lQv3qJl9kKniX_%0ryAJFv^x&nB?Rav9ujw&xZ+Tvh-Ur_7e6Edt1=7+Sag4(fQ zey?P5hnel2%Vpbt0|=kQ{dL?jn}HYL5}R?Tg?2F>z9v2ZdF}e|&4D<+F2YX-VYvmL z_~zlTJjN%2Gf5(^zg}d0m(&h6&x+0RGlrL*ecF<Tau(8mZwCDj&t2_eI#ruaP1H^% z#}}t-mE~V`V-5bQ>ua%xF1@&5LThPHSTiBc9%ZJvrMY@xqFPb%Qh4>EdNQh#fxTZX z4E}1fGE`q*J2N*iyEvItXj#GOBkAhY{Cq|h(nPF1)YyP;`wEK>WS3byH@~u&S3}B@ zwWv(UjKvY<s|5skQ#q+UkiY?ObI6fN_LWZo<$8svdsuCkK+=Edx@4*p4sV-GPSxxa z_#g`CD>uG+G?l<d=hYFv2pmtOlbQ4+TsA0`#F-BO@WU^JgAk6zf=e+Hj<aj4w=h&0 z6*2zHqU+S7pR<hK63c?WbheqFME<2{A6^#ETm^JFU#fPQQR{yhn$e$!O)TIqqO7^~ z*G#qH)#PwasxP?)x^n4qzD#Xud^O9O)jxWQ{!)wmQt@j|-mri!=h@lxN@loriLDeh z6R+YB$irS$0bjKtfj#J8x6Q6^h0)ThmXTL(Y_i1IO6gpdQv6~^d2%c1D>b<DYKS#} ze2K#^#gr9gUORE=rP<@>aefI>*1&U${*tTwGBs{FaP}C{9!c6mL}yH><bW}udz6VG zr44rmnBcM;MrMsK<)=aI(IvjTdl()i5jf^D*qEh4Gqd=(Wnz-23ESv!sAHf_NMc3~ zRQXbc@#>|Q;yCH4nQ6GeSa~*Z3NIb-s@<$`plk?&18V+~`O1A`@_e*kuFm46RNR;F z`a#`wbHwd-Ylo!=FzKXnD1jW3-yDG)&fXDuYpRtZj~jedyO1o7d2;bmbFA>QD4w<P zd>JyZI6@g%Znq51&gHDk{anSZT}USvC+Dl>an{w7iw6!Ic{OW`C$BGWw7pb*Uq&Hv za$>y(JEuavnv8fQWvEn^wQYsr3^g??;j?P?t2X?x$6>Ep3UYMtict3|%F7&m$ib${ z4$i=_jva-9Ed{eXba#_*mZ>4+Q1;w*|DV-`JHr8$8k+H?r#zrO)%Eo?4K;O`2!%dT zoz%|~@0K3qEUi+JvYXzYGlrR=ni{F*YUohQGx^V&&N*boB&>c|QW6D|rpITiaT-Y~ z4Yw2cKYVule}3^MQADm6+n2Qc35X3iNj9+Ioqla3@PhvZKYcIwKN8f20v`$faY!36 z@dIUF)Bv-C9tp}Ip9pMtO!L)!5Fw8Qef1v{i&^Oe>OP_2#Ld7TX!rQ=E3ZJ^M*#}} zb~j)uPl3Ao0Mh}x6EI!Swntroy0>ef9JpKiC;9tN8aA{K1)kS#1LADpHs8HICXCM^ zxC$5$7pT+%;!-OKi{P*1Z;kwLEDZKg`k$Q<Vp=n2zO%S7XZke}!GdpApy_?H8%NY+ zl7}-k1gq2<Hz?8M$+>FehiH|btHu5$DA(XCk5&xEUJ8fdrV?T66mh<UwR9NtWL^Ku z^uv+}I2)H-p#Hdt19K(dMDWZ-<Jr%=n1WxsA5SdTXI)=5{WPxdYkcNje_?`Pt^gdK zW1D+D1yBq(HQ%pA@yxxRH9;^f15OK`UPf9{u0@C`<s;MRP^YUQ?eXNa8C{;-!Pt@x zmTAXtU<hlX<UBn%-a!6HuBh6$36K*2o=rEJfD^+lactdCv6$z7LVQ>(xUO8?pjn#t z%GHexUIf!e{@CTx_QB_6bxq1qM8#)*KPC5i3LxsV!hwoqT^67D9S_B4e9kg8gAZM! zBQ-DijstfwjrGLRwaKbGJi!(J;ExsC`L*~%uCO#q;+S=ZTsd3a=?8t4AJX9mlZfrT zo`Uyw+{=}n*yQuQxRoAC^AY%*%i>QvK#D(8iTz0@oUYumGcR5SSaiA(vJ#!ch|1W0 zZFxFZp97tv=Rjxh9O&GB4s=){?Rtt4t+gBpu)JOm8Yd*3v+Iw-Vc8>ym!<Qj%D)o& z!?u?#u4;S#5ebp1_hQ@27FV^sk9z}6AKTst?v>i!`+=j{-s|DY)m65uY)w_Wx*eR# zy`BQ-ByOe8%eSjf07vOFalE7~J$ws7l)TJk3a*2?u6>C1Fz%J=yTYNoyy=kCD_P$u zulr%JrQ|h^#BzB^dHt&`FYL5l;-b7_xL1-F*{0;x2W)cFdr@8$=w_6>F3K%D!k@xT ztyxK4#fYuswGG%_QkJ~lgAk9rxL)bHjv(48+$+gT;rwFc6~x|vmE_e9=BWC$yu9|J zoGZzz4`p9TURQ$2E6EFoAg?H|oxoX1UcZApd*sCzQ`hwypz%2FmE@&xelhZz#)guW z<n`Wjkk?U^b0vA*gR-wAuPIdVmE_d|I>-{*pXJ*_wq+~H>ojP1<i!<S*Y$qTcoO$Y z@=`dz7<qja+j>`$*Z0psUiYG$E6Ix=h+9cscVT?ElDuX?XC-;v4V;za^?#9PB`*r; zFA>9gJp{;exL1;w!lAr)1Ug5-&Smvq5rELGm}3&}IKdjvJL6SvxJ8Zq*QI!6Rr30y zDj_0Pkp0X4s}p^SY7f`&B_`+kf?3jHg!tuqK@N)eI6$XxuO!nt6iUhTUX*=n4xujt z!nZ*6KFASX?!|ua5foX;JxH<TTu%XVFY>*T+)n{V$-M(H%z~QKtbUO13`*|q1u!Sc z?;^YoL@4*A-Y<yx0&v*Vas<IV;Q}Y>@Z&%V0bz^cK=|F5y(VQiaW&wFTyt=C0Wt)y z)H?gUK;?(>+JclzWL)cE=~xT^Qe7&~mX1MbR9adYT)7u@>}ja5(y=qBjT>{2sAK%1 zqSCRyMSgNG>exPjm5y;IK<-5ydlL6bI>t{JDjl=15y^E?fB4x$r9ZbWnV+YC^9_Wo zq(1>LQ0dRjh+#_BOv}=r^`PVEkF|JbBH`zH(AaB9aEaVl?|KS{@&Yrnu9qTHzT->% zSt2cxrA+^&+mdM?3Po)1MVaz5SxTnw_6C|h%8ONMC3*2%PfA{Vr-lk;U6dEU52fTa zwPdcJ0*($ot|YIcw!Byyy`(I8v43~k`CAdgd(8l{a1QcPIFy$+9a4Lx<<)q#C9gUp zwzRzXDJCVaOT7g$eUw)Ou~(88ziXuAHG~+{e(yzj@jFOLUY)sxNBC2?cb<d1xH(qU zuO;MV&Yd2WvY_m1X85{Zwf#k;Nj<V5P4~d(fkb<<A<eoI%bf4!s9R~m@-r}Y>Svib ziJb$T+pSWZg-*vg&^d7qbb8K#&OPTqhi^bD@#o%ipfhw1bRIkhI-}=6hpi3JP%Gh( zF8r96)dIZ9ro#a0p!a$&Ag3gq$ddE?@x>Z;?IMPosXz}+T~)D|I(vHWaO<VC2{vWz zLD0#)*oIH^*=+)5o!GN_FSg<Q+?Z+;>T^m-Z1&4f;g_-f8oxQ7d$HZ1hOg9a@cUk> z-S|Vq;7&O2^<{Xu0=Cjx0KXfi+LjBv9j-}^`CUM1R_Y75zh1R1F~mRtT$iN@Hv_zq zhO=Q|>?JkIl)G-><hK068f%e=sV!zZ7DWy{tya@xNXG+-a@^s8G=CCwOo-Wz@y&m^ zQtX>c97ux3VVllWX5Zr6ej&bMLoDreX1@`Xb-fhrwM$C2WnE?)-oWvuEQK6-dIfFb zM4ddFkS152&9d{Yf4Q>%7nCb{yIn4C?I#<oQvA)zINM{EZg8`I)@5lg-$+&2bBz&R zy|U-FG|V1bq<3L}XW-YbC6H<Ay7yv>!~^YBi}ZePpy^|4vlr!3txW}dxk|*9M;=nI zTALpDs7c<7qZA%!uUe95E)j%3h5G@!C0TwYi|=WQ&oGy<Rt%H)N|||`LU;vKShhA2 z_J06bK&F;^XMCllQ;hP-wq?n3sx>J)hZ;MtTtu#asXSAHEK4rVw^6QJWx0q$4bR1S z3eZP^r`qQwxawLH2P%6{a}_2AA0iTBt#^aGx6S0JQnnj*ZTbdccp%YRvmwn-fR2gt zbEV#rlltS?X+@7_Lz@5e6-u46E1r_N+e6i-<hGg34?3wUoCahti_V?dkm$~A$o6Nm z=`@`~tmY?dI<cu_B2!bx7Z`k&TuRyO2cOHKe8P@p^#!qPNb|EcWO>TZ=TN@ej%88q z$c8k(XhW8#{Qq(&pR{9Hl>4$F%@ua6<teiYc%^)AHl65DHl(@g94K=(!%O*rY&y}= zY)CWTmsPCg^UQa1FXacb=|uNrLz?-1u@dEi9Lf)6(}}(z8`AuSbD&(DL;2xsI?=t^ zkmkvApj?(i`H^fo(aCH`^TIh$uE?SMXf~bbzHCS{N4YEUnSGpBf}hQ%6P?Y5G@m#J z%8?w(r?Tlp7qTJECs(E%&1A=F`eHU@dzF)V3OmXX&I^MF^fK{<#mvOMMCx{=rRG-| z_5;Lt3^)5P{NO646Bm67vdM(79aE4RK<)$sLCS>e0)#SEl;cyd!9|#Q?~a%_R|ChI zmr!)BHz@<v#F+)eo1deA+>3C^OU2?E8ZRe5UnJzH8}bAp#cs$8Ik74Oz!4D_oy!3s z(4l;d#37!Q`b-YwrX0u}fK(v{dvlfN`-mes7BL~e4TyS^vLK%)j=TWTaGZ+duL&}L z{?^2CDF1T~<at0G9>(L>P0kJ-w8{9iswF9}<siuB7<LXFoJq~kMF4ct;-RRI1LDY{ zo3U^?9OJiZy^z~X2%(A_?*YWBaSHOkJvecG@Csjp_tN=f4&|>&NX(V`-vMH^5{fcU zUvtVuiXj#Vmy_o;fP4iIr(Bl;a*qdc1t3p&AXfpRW~eL)@@O|+4&}E2;>dzw9|k0b zU*=Bb@b>^YDs{txoC2g6wFy5a&SP|%mrumw%BJkFUE>(U^Wm&ZQT{hT)Lc`<r1LXC zVhD6fdLEok>T!Gn6T9QYQQ(<%IX-n@9%pB40BI(mC|^thxSW#i^g!a%N!i*Q_2h67 zI93~_=-h6`;*Wy7-$RFKd>N1v_;ql;VLF}E|HTsvpLCSPQ1fF}*(=cyT78pBs}>M7 zS83t20m2I9P`(C`2R*6Z0LUp1<Om>ldLVBD<Zc@hM|GMs^%+33r0)aHV-Ak_4a<9N z&J&YsgWi_*^EqjK6A-GnljrYC2%%P58qVeuBId#=<Y|3?Ik7eXauN`S&zAu5fCthl z=>UXF@o)f;i0M<12|ykO#G#WiV>xMk91v@4qhkFbAmluK3i2g07U}ym7{fp#v#);y z4xtX^ADXcoNEolzWx#Rrvzag4=H=5OaOF~N0gkukUS-B|C{KClR4z&9CQmH1#&d}q zfM{MmZ3|qvslUrZc~cG!=^XOVxiANZNqiJ^zJXt-?4L6!JEiy$Al{O$=fnms2dC47 z5UQjz=7wmS0r!@I{Z7Ku?_7|Ba|3A9B==#sz<IkGc_I<crAo|A<BN5scV=#C-f}0# z$5Y9JmT#5^=$KgPOv-W+j6FY&e|}<iCXGGJvdwJAXN6#)n^{~C@oQ%0`ms6F1zIu9 ztjw*L1!-nnb>odUy2^>xyR#?WHQd_YiBFt$_YR<C!2YIGavIr8rW7~ut$8-{*ffO3 z%pG7svm>Z!`5Ju3R~63OT1Df2VeO^1Y!$Ns_1S=iY(OKDbx|}wG8t>JnQk*V7mJ%; zQ51CP<Tj7&nNKArhae%-Ih;(S=k0)=#N6a;(n-%YREX6hTlDd~pu-Nr-29xGs28<E zB`BlC7n0o86i+SA$xl4X4WB&tOf0#1(kiR7S#8O!YABTwBfnk*A$lbh=k6&{qxMiW zH#Olnc|;f<8^FiE@U5wl&asX`d={v0upQsS!)J^@AkN7la0N1?w+qAQzM1h<B6TDd zWn}lqVBnoNoUpzrAIC?K0hu|lu$W59FU-KlP3bnVIA|`UWx-7-C<5OW>}1l~nI~!v zB@_E=K!F{pYHQ%j6)hA%jn(*Ok(hw?LWO50(y}bv3m>1KVh$$uOO3&)bMYM79Gxyt z+)E^tOea$Zlal;_#0~SQczSUhn;kRB1M!2&RC)%7+mVelpN=1%broJgW|n}ct{HJA zk6`&=h6A7@_!xL%GC8T#4O*pYQFk)aKR>xRn^Y>=s$`NSblG0T_hHNwR}<C94kq~A z2`{e#rXJzb-imemumRoSoGC73V<<I0(K<N^cBCnS9EdHy>{bGGXKKDCD|?DJ3$83m zwJ={8ZFVl0qZkZ6XXe2A`Lu`UGY1mW$v8L7OA#m%^XZwx@dHVWZSb*jP)a8!G8B^Z zAHeYh#O(vKO*L0Mm2tC`Ujn@f-rG8A<;m1doCTIl;j8GmT86%8c`aLBB6g*;)WrRb zCM8)bM6q$g%8{vr6AoLm4p)p*LGZOmJoh8h$yvA)5D@!9sG~O_PvwPn<P;FYis7qA zGCS-O7?&-rVpYA_l&aLAXp?6BmH|tVUzVV1Ma*}Sc$|w>9s%3hXtpLC7o1~W6=`#5 zY&AfxhKh-@8OYH^G;8b)?7FK6nePQ)FIC5B8kKG_0&98<J*L86vc`KGVHMTe6nm<# zyUkK6l5wRR?`5@VL#<)$up2X~ouq8Ok6FGW)7%_lYdO?}ZM>s_Djdg@fG_ez&Wt#% zUdM99dgxrWMrB7%?69p&&&T&!9d+*DMKyw^Y*fSGZl2X)C-JG-#I))vr1~vU8^8rQ zd*Rg<K;6{=r3XZ{Ne&0y>2b`RLqbK!&72&z=3q-<WHnSddX1jU8*%w6vwVxA`T!Sg T_vr5|?RUmj1HKw~^CA8}rG&Fa diff --git a/util/gamate/gamate-fixcart.exe b/util/gamate/gamate-fixcart.exe deleted file mode 100755 index 8d9d698683a9c262e463f92af677e136e301b674..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67781 zcmeIb3t$~bbvHhHpDV4bmnB<{?fBY}6DP4`J+2;3?BvRNC$c2;aGXF`UrAT8uq+8( z$&ZkNixY@z9;O5uAccgae*y%WmJ|Y{#U%mrNL!btke0MfXlNbC_hD#~h5+^V`_1h0 zUdfgr;olZk+Pynx&YU@O&Y8!~oSof%!!Z#QLWFRhIU~eF_~nt1*Rx*^Av%A}7xKk} zIe)eGA+77L)(-3*PsgTbrp9KHdt<}N$;qkN*ib4qGdCF<pNzHi^vCv2jif4<EXggm zNcXl1(WMoND?ZphB)%rZ>3|SViHkKu3#=EpKw5_rFi~ioG5nG{h5;wv8czPo;}Aj! zd^@eNT!(~+DO@IC8XVS-3QXgN0yreZDTj!PlGkHG<S~PU5UV`kbKTw#x+J~OQ8}AB zFpJ1%bX*E?vaA{T?-F8H<w$ZiiKqll7KLRN`8YjCLWtv)GYat~##iAaEz<QI36QBA znj4=O86T-58~{nLgaP+RAZAlsg?CXly*Np4nS$BZgrt{FGh9U(?c!bbaftklTLmG# zX`G~Y0Zz}6kmX3v3<D;0aR@gNoEPHs90`e+nwSEj)XgzOvfSk!B-|#1*tV%!732W< zy9+1rF2?CO62z<7EFsVD!OsIYCva|%Am@@GUc6d{k1xSb3`D7m+a<`kB#2ihB`j{F zekmO4_oEJqyh#wRzCqp}<~0F4@^`-kIhO?S8X9HzYU-dDcxCwgv;;Yq1o1Yj@}eq3 z&KA9|Iw<lc0X!Qrc;x$spE-T_xxy2n@<YoL;?xh3=0r<5+2$|RBoN1+Q$IRO+`pbB z?mK6R`zGSP{>U-=06*95=s*12D&|?05NAsB-k1=Fp9|f3yx^9%fQciII58!NIl8q_ z#or@#B_zWINOfdY`I+w=eojB~RTg2r2Xc>yCB&^S&K5Bu#3Z5e#$M#}Z5BF&NKc^? zMG(kM$n>45=U@AJ^TtO;kIDA&FDQ*4KKRbriv{KPT-n`{>hakeo7%~{$<D3EXY-DP z%FmSQibs?aB|F+u9s^#2T!D#G;~<9c862n9<K7m9{5`Y&{^<ljXVyPp{XS^@K5qR! zVf{X7{XT5{K4bl!vVKonzdx71qsP>r&5xyNaC@o~JV175N*@BIs~N@C`G%p&G8B&H zbo6!Q<)_{OgSz#*1-Cp2wI3}#jvS75K^)DY`zVEG{fh>F^4Ln8ID80K9w!dpg6kly zsCnbbvIKsro|Hc&RS@%${=y^IZaC505i4d?SC#zfO~{{tUinkLk-8>XV3ZZY(oZz6 z(&bMqCVyH^F9Y!KF<_JdKzloh`=f~iy!{GqOXF1Pw+e3k979WDF@(MjG+CB%hQ3vB z%M}5}ZLs22F;u$Iiu*5OE~&EOo|5U}R@|3mT%#3tuZ-Jb#l2aEnBS4YqovI0NN?z9 zDKk0Jt1J3Pdh?E!lJt>Y;E?K(-jbuGBzUB^>}V-z9qE<z3f!N16J&9sIZnex?K;wY z^NHrh1Og|Tx5%2*oTy4t9&FoQs^Q%o&fT53WAh5d^5)bZ1Yj|bmOTV6#cRK;i+Ao5 zM{m0q0j1#+38meH)b5d7squu;@u5RN<8k7UqvM3qaYE@hp>*7_;Y30yIH44rPzp{c z1t*k(6{&<$a6&0Kp%k1@3O?jj@Q?oM%$XyPC>7tj8i8m32^ZGuqlHIGDeq@5A^_#- zU3El?@Yz`c9+X{(gqIzWGJduj@X=#OdrOW;;Xhktg+Yi~dA8UJ=N*ye@a*%yQ26>0 zsmEu(ZG}Teq=KJ)2;pOFFYey53z|dgbaz7Cgzj$P4XSEBB!2k0yu**Kdc<Ps@N*l{ zzQm6XlvhE_jfY<f6x?zgQrX{)#^@%tZFiL>MD_7ozkZ~oyx{iZM@mWSM3|(hz9UPR z+dVY&Q-!4d(wTc25h!@y@q*7DKm6#%FXsu$=kQCxxs^wd14zbMt&Si^L_hl`+(RzX z7F_gWK-KM*6*-?802(+4Q=f#5A_Ej~6(fcbffB4b5hj$4;t!92o}E>|lT{(^pEZEt zX)$HK;L!$UwpVA?KWepuU$cH6vwokmexJ8~U$TA$+U{dkYdLz1?HSlBM`IRad3KR? zXrkn2XU?$0QQ&fdQ6paaY#w;DdExJw^(QU5?AMMRL;umQI^d%>=AF9mWl;GYT`PFk z(@019eN_o@v^m5q)*|wr4Is?+=$k6u?WQ3N$p?^5gv)`&<3u=S-C5>w>~0bu;x~VK z=8Ps0?^y-V-9$WmT)T(ATh9~-vF~w-3ntu5K$2<y7-<zDa9HqJNrmutXTaB6dF^-L zK)MEjqc{G%`uNu$IT~cDXI}!~wV_ih5WynvK#?Iw{b+)n=cyWkt?n^`d#^N)9eehh z|LFtKV2-0};K6%&^V`dBCGcAb%qxN6gJWaE!)Cgox^iS<LYU@EYHU0`o0>64@eH3b z$0tXp03Auq2M5KubaE_pMQnXK_S(_$iPVj`V&?K8F+4RlF)}$Do0?8dUJ<)wefknU z{<JqYUlH5T-aU9}th&0grm`wlQ&m%4)lkzI+t8L8nVLz)nh%cc$4r5WuBf>*JI#D_ z=7aq*w11oCm($6AXSvO18-V@x$d*6=pcOb*C2*Dq(bwP7Kl+(vH(!0j=YN08CAt53 z?bG|e%Q50_kN-UqfSTo@-P9+vn{{nvUMO@Ml+3wKo=<)0%$c_nqbXm%HLz_-IB@tY zKoJY2+i0b0JbvbkoW`=#wY@#~w$R~l;61sIG<~({L=&kr8#0eBq<IMVo4on#k=ZPm z56AxG?*XK{i0PX1V|*B`!g>E!&zz~Dq1t)39}Wh7lKYiMkYy9*7Z&23Q);C79B9Vy zOPT}uWw<V!#^&P*q_OM9LiBCihtC7|uJgdXWf8a=P%M^lH*l}wa~ouIIDjGsKcMBW zx+XssXwA*n+aAdewHXVQgXwvWJaXpDrTC?s%={8uoAW~m(gwERoJIU;{35<8@cP{R zP`j}c*AAmYUI+5a5pi>Vh;o_08GrQ5nK1EjER?q`!!qE?=aNO>{v3RqOE<I~mMI3h zar`=R*(nX6Ctq)ZOc-%)-X^}{mP4iZ?|a=c?eg~c4C)TTcX(i@0n^{;;&|^?0lpFE z7MvY8cj6quIg9fU&f9U`hw~wv$8kP}^KqO{;yi`(G|rcB3gnT8Glp{`P9BZ;ZNqs3 z&It?l>&|Z_2EM}wl4cTXHRH1=Bf?{;*_l*o5+Nb_5#E~|pXB}1!o>L59G;o2N>m|y zm1d4|^ji;O`k-cx@135TNtx5LEJ|B&I5{C#FNFA35F>C5c`?GCO%CrS5%IVU8=u5L zd@{+p@qCcvaWV&lD?^H>w$SMC#8f&3kk}g<1$)Ed_K?h4d>}MBJp&q}i2D%k=MeWt zp;7RUb~7}ZPNnvU{|N7Oco~jNPo>8Xn0r%zjgQH4y)EL95V7b?%0~VZtqpX##)oE- zGY7@*1lm)x+owk6CQ=>A$&ravlMtUJtaoN=xM^f$CdE~vzYTUxB}c3@z>w=ew6$0G zR1#GWG$o+zJ+E!;>u&9;t&vYV$ojX3R|1+`Rzg2`$P48PE89=lT^5{p9XNL)=G|8N zNZ6LE5A2<Y?Muz1$EPN@uB)!BS{F-A4o{7YPmXO}H#pE%(YP*_o`ta_C#EJ-Th|>- zrPp13RqmE#I-S}(G;uJ7^pokW>*i)AuSgH?hDoL?_KpwFOr@trXDf!M_Fj=p@2%Wd zy)L#lIXOO>O3&`_W_DF>EVgBKW-dM3i6_`a602RuWJs7!4bRPt&mL4k0A^BeoI@6= zk=~i{eR$3tOQr2NZ*1!UB%DQwyHfj76R`<ix2{X3J16%|?Mcn7+hix&vS~qzTQ+%f z-?GUm1k-Lo!Kah6<3r;UVDH?;@}W~&ih(W3>FJ5_VGx>{bXZzjQ8BPP73*xllKsTg zeyrG!5G9q4d9Y*Yx#{Vtnc3Lr)J*I;piJ#g$97=GAQ`Kua7bB5sS&LBcaCgb_oh@$ zRdsc|uA!p3E?!>|uN|(dNY;&}Dypg)M^dR&?MUrt)$e%3^UL$na8^EQ>#A!Thc+iG z>P9w$kI|u#ipEsUNJX+H9<QpYsT<u~n|x*XXgn()@np?tO=GIIqONvmb45HJudWzM zZXT`}soy*jPsWq=soKU@h>yzZvvN{BTHjDV+)!W9Se2@-h}YC^uGm~RG*r=8J5n`T zKT<W4Y>=G9WX*sD{_?7+t~x6xjj5{9hGcb3#n9+bEp(G=tbnHKD&mc!BXw2D>bm4+ zsT;+~mQ5b3lvQJs&)CtFY_i*ut2q1g+hbk{6e=HzysA5^K3etJs)wt-T=k8rZ&f{0 z_2a5vRE4VZt5;XISNBz4Up-oVQ}suyKT-Xs)nBOoa`iW=zg7K@)!(cBLG@3nSJk|^ z=1*%rUvs?XuWBBz`EJekYM!lmvE~;wp<1K1w6?N#OYJqaJ8MU4XKUYDd#v`uwfEOP zSo`O-U#<O{+9ztCuKhu+h%bqk#8<}G$2Y|{$9KiwAOFMnz41@S|1AD+{E_%K;@^q? zbNu`9=i)EMSJhS2wbl*RrRwJDZmoM?-Mw|6s{3r+PwE2odVO*I^7``nTkAhm|C9Qc z>jMqB4aE%?G^}e#G+fs(({NM6T@4R3e7oVPh95VaX$UpuG!`|kZoHzgwXv`9#>O`^ zzPIu5#(CxQzZ}SC9?ttX&PRm_A)ogpOg$3?#8--)_~L|!S#kVP>F+7E<GBRSv4VZ5 z`0#Q&o@?{j@naZrsKEml?X%;*j%g_s&(-|w_{&$?@w*T&pKC1!RQ{)~w&S__x!yxS z#s7P|9e;9JLfFrhB%$JKueIZ!LcAxr6+etA48>m+Tn8}Zca9R=1;l$_Z^t_k|4nZG z5}FMQO)|e6Q}eOr>V`$n&c`bD&dy=*HkO)9&5REtn4B5jy>-04u|8HYhX1jVp;$#v zO{`*ca*AWNy;GC8rwiIFX89{d_u{z#>jxDRsmZa~-CNN=05k)@@YEy+hqGxwW@nPa zsTte=GQ6h(?uE0d;n}H~iuCNv)FiSY@r*chG}B2eU~EmNrz?i$Mn_XXAHONJH7-_D z^0mBpOkEF!@t`Ea#4%?@;BS|&hL-hEbZ#<@C!y2`Mnkhg4@A?uIr#BI^)QC8V=;M= zXn7%dKQc8pG?5Z|VaRNom`cu8*E9-Uiwy5h&WJMlW+7K6QILROROKq6{!BF82}=Si zLgAL{diq*K@SUsQD^rC=nF({SSeAHtAgp+n<ukFMGh17OB8Ik?F|)8~&N-l-6|&TN zROX+}M6d=;MUiRZ*)=&qIR)<{iNUU(?sl_xpihJwR*)CPnSy-jl4c|-#v|@51^aqU zN;YgxjgHpG0g3Ed+bsDQ#lt7Vv-!W{gcZh3#rr`bY^E*kMBclctX~j{{88{J#4I(< z{lmM($MVLUz>v6aDWgP$9MY*Y%Ay6uN<H$?oK=|k3gOv)Y7R<`+#4k|0`?^*=29Z^ z@$eUsAcP$E4#BQwS<=WSf}{d*4R%4<BDzeK)a>eMzSbNNdS1cjK_zTL3B!AkAbQct ztC5XiZW|w?=*yyU{e;YSlAfQ@`lSpZ*F7TIAUOzyFq?2-|414DLm7feO(IyrU|z^n zkt-R3Q5_J`M&mJ1DG|Y4_=#-7<w=~ftjyb--7CtYTlCvezfr!~y(XS5MD(g0yTpL( z#RNw5Y6$@c#MwPHHzT463DOm4?@02Xh&D+O_#hVQvWRYz5b#3C!4wQT+AKjO3bbFQ zYmuNb3rm7pC1{lbji*P_5J{Va#blcbGmiG?KahNnP9|r@AeG)+hEb4_^pv?<&NGPU zYjOxYRAP=!&K{gjrA0rbAhZ&5Jk8k~v4i1|CL+|&%fOY=StC~4^E$`0=#buuiN}zs zR5M)65Q2ET5z&zdg$2=!PJ)NgoNExLUx;`S9lMZ%y-fs3HgW?Zcv|#>Chpfj2WhlF zLXY00zZ-y%Ih4d~P4rDgSJ6B}(C|$N-mEeaxt{>^Q@{(z3t0{v;f0<)BKW6>iD8MB z6HtjzG!@W?qbRGHnwgoL0zUy|%9@#;#e=qpP6Uhq#=ap5n3{u(Cjupe=n{ftgj`5S z9ww<KVH=YHU78n&%BFa77>b_?=nv<?&NLH^&~$2ed~`fDVmAYFi8wl=@~+Y>u!yDu z%PLTsxCRlx<9K`$b7;{yh1Lk*@I)#(IX5k$`vbY(0rf2!N|v6R0M<<bSvwLogq7q? zDrJjiPS-&ZH!GA5%(For6L<m@(ccM_JPATwnmN307JZ6{9#V;VC4_p2{%#<L0v*tx z?ENBoZy<U*lI+a0t>M1FQfj|LvmsUD<AGu-xC<cEM{{%za{5%jcn;~F4CJA7V{A75 zG*I|(4i-!#WK=vD$bAtAXf%S<yHxDkpe&DKWl$-W?#aR3h|awYBKx!-kD!38vB6_R z;q3_@iU@uNVcFI_i5qEw0Tq7E4$Jl+-PYOFiaE*Y==1s!a2qlq{}+laTZA>dXg5WW z&40>!v;d<MN!GuYa-K%csQz5(7tx=}U_LAwVtu)27fOkSU}9)gne@+OYE*jZ_#OR4 zF)ex(6frfmXB^3emP_-FQO8Ntvw*gm#$2wM`!V$bgpjuSC;%H^s+_3=xg`|LMv#y* zo>5)Pp%`Ftb3-C(Xp#k(8*M62lZAp!u`OGoNoHVAbJ7S3wW7z661Frc!$n#V<<<`4 z1*H;238pnPu}2kVxgr2NlCr1~(K1c8R<I-VWa$*F?*c84{nSpyFN7RjsTF(-Lf$3o z1WItBme+&EXhgF+77>kM)dis4BKHoYCAP;v2(lDUWfhwy)hD9sv<s-#LQ@)EUUY-@ z3q;eR*|S`x6*0*0_|y>ecDZ6cgc>fx8#UP~=psmi4c?DSp*e&0G~Oukqb*tongdw~ zXr)yvW)R`MvSzlaa6~hcBZzL-iYsUnBEp}Yz_e_y^yIC9<*<K9d~z<0#)9-k^zDH% z_QNDUJ2N}A$DByA;@%c0W~Bs&$@K8-IQ&keT8;z?Ndt|Q9C5f2zZY1}ey&_I$C7*Z zCS^B?I}tq^C}8b?>X@G;kaq+&E`=naycv`*`p&=wQ7{TUVV*HH2~N<(i|D%o%cLd< zo}JncpBM#yw}MZ@E-~udJ7mL;Dfj^}S07I*hTjt?yaWs%Lh;aXCnps2_XC9ufZhgf zQ?sZIDYn-l`d-EBUCeOC!^rK5@Vyf5<>Y-T;(kV?A-(;>X`7k%tEdObBw}1H|3F1N z%m}7IN;}ORD(X?q+--LtA5e||V<N)QD2pQ1xk80m2pNv5aJwB|E=o^-I53N#vO%;5 zcL!E7On|k(5dCPN>=u9yhzOe--b!MtMT927R@e%!Jsmw92(rUjX7zO+4A8WeS+*qZ z2{3EL#A9~4GO^@4xR=#O1PKmugtdgtv{i|IOyJYFL}>F7yuu-K3<#s6v%7zwsk^z= zG({+QGPn_OA!WG&LD~3<u!BX|RX_=nMz~{pPs<?cW$@djOc!Lcrt2YV_|FFmIpWUQ zxb*)bChUy2bE-=C>|HnwZ!0|240Dm>zT9eUWg+Co?s6O!l%5v3wVLd+gtj+1Ha=_) zji-m_(3$2oXn8YaRO8yv-sBsmW<+kIg6Rr2K1tYS1<TXiWhl86m3yVOl$jN3smXm@ zo66m)88HA#kds`Y%H5_Jn*k`(<g!t2vzFV5;3~~t3CeBJj3Gc`+9+S`Qe@jS{aq+& zIjCS1lG~x>90JM)jZbZ9k=v;mw<5ez8&TnFRJclGPeJRPLD{xzIh12u0aIu^a=R6% zQ5#B2BPLppf^Cs7iPfth2@TIETx84b(~J)zyB2MF2CE2UXh6%o2apa8FQ%E2DRhIm z*P$ek=1$Ghd+znxl5YX+b=vR&EQ(pwUZ<^l8NdVDZj=}6T_X4On$e7OH*3l1aa#+! zw45)3`$Gz*w2)M=TP*rDB6mz%at5?+(=yiGa^IlkY$$@`ur{4e&5cZ<7N8`yWF}Mr zZ}&&avhP(<cR<m2tX4zK+(`wzQ=8q*o)+eqni<6-wa87Yn7cf7A#&$5*;C&ug6yz^ z>%m}<jkD~nX$#g^^fKHop)mxgClR~~w-SfuAYm3_HzQbsXauq*21rz1L~snZK@OW` zS}IB=v(o+^!jaG5!c$h(pa?#M`z3#ci-#D4B6t{jhzz1mea}XZh$2t*!UKV$$slng zasfmwX={p4iayW}QeIAoly9xoT830BZqWva%fhKLNj5UjYQ$mfP3K0d7H`!)dTz8T z@w?jB=RsR1O<OC-BQxLkA&84CzUA7nRunnIXkJ7xg!vz-oHE?F1rg;W*W5SI&)SFq zm9|{7=S#FZ3raC{!aUlMXnkN-h=OWB$o&`~Ie=(YxQ66a*Q!LpcEnQ%Z(ksO9PyOp z$L5c}_*TSMAbuX&Li{5%&PlA*{Qb?C#CjS<U4!mT6emOsKlk9&)FhUcF>9sGJ8Pw7 z&RS{ySu4#uYo%GUR>(ol3UNXsn1rDruk2|eEpx6)3t4khpyQpJ(!6t1+Je(gn$wp? zw!<ph`1}<pD0mt92kF?O9yA~jWxr*-<3$AL5UV?m8A8ij?gZeau@yKuBG>fP4m_Q3 zl2QZ;3+4eQFnR>VH#380aTDMjS{+;sPb(wxJQRgiq}fW+?p!j8@N${<JtBWOlt(81 z4rd6JCior^!7r+fD2O4B_AJEfkrS=^{}Agp!@A4xxZRJFLO|(ZXAptE@vXx1qh`lz zcXj|n!!!~4`%>Nq-Xnwign=OfgCP-6)gw57aPWEpEvt4U+>8qK8zSMW(c|8P(_WA1 zf;=)LTulkv@vo4CKk%C);kzS3jN(jKHhf36gli~aJN^}t@Q;3TB>YayfqV_8y(aif zwuEabVLSd;l<?=vRXf~@hUpU74qtxxE52CfTQ##+&Sqw3$JH`d>cDVnnqE6x7{js` zrdBF2$z6d-1-K|G*sr|K2D<7|A)SPa4yQrJhnXMl=3jqXFyed`=FYNYxAsR^l6?^8 zF4QHi?pC2I%<+#Uaxw=UIo`oV&b(uwh`SsX*j`5S$x(eoA@33EJgNtJRs@-6#?Y!z z0y9TaISY<tERuNC#tKp3)CEkA5s_ST4F2tMNzFeD%i-FJT-f94;f9ga@C27RHcZY< zOn}U#WGQ<DW?0K@K`gf^zTI(K#94X^?OMxWQpB{D-a@naT=-I9x%3vgsrZD1*h_Dr z_b#VsF4aT#Xw_AmhqBhk#-WwVLZSaJ*oK=`_JZ6ekyr(|AV(Y#wAbB2_eM#I0JZKG z`gnLPFhU~wVZaaKRwwU4Fy!VF`b5w`%;h1dU#@Q!z6-&KJ;xH>xb$08oujyLRmo`^ zpu`^TD{ThZFw=$Kk4ugg7@C@z5aI7L5Qt(eF-iS|$zI+BmZJBG#>i!QI~wyK6o6;z z33GaiW8lcfoWDjQ5uC-ESsF8rn3qURV=`2NL&33`skv!*Jc>xAgy=z}GT~b|W2O)8 z9YUs&O)?@cNFW>}4>}Q5GNLeu;V7JgeYsZ4s1g~Kk#miVDw9!e?zIxSD#&?;+3|fT zIXx*NaS4tECsSjn;|{n^g3BeZcnfgY9KjOiY+6L>bqZ}m&<AXgz)OSECZ;3tWIUW2 z!75y&QGzc67!omuP_AjtIYc%~_~k)Nym-;Ckl>8~`_ZqI@CuT_j4H&Qo)nQS5?D!O z7r0ddH%YEDh+ie6s;nq~23O0tYCF!Qmyi)PG9sgFO){$1it^LjCgb9EoJ+4+M$}=- zfy?DsKv?~LR;_K<4`4?B=nC3=M6KvY-zlSV?5C#in_+ny!?)nN+Ozn+OVj_f7~Nlx zPMTv=Gvg4u{-ALUo}fig%~cEi&x|)C{8UiQX$$>x#&U$82@b!3bMLTB{qwoB^HafL zwkvY}PXB^It9~x1Y+wIk@e2r^E}IxOk(JQ@vh*-$Y|unlGCkPYJ%H7Yobt*`Ss>RN zAg5u4ETSxx^ajZJ(j^yzW23pFsZZpt)@0=^yoMktl-xC137eqsP6_I5?uS!BZojsC z55j0X)!MtUOwqO1-t+Pb-T?;DZdq&Z#ziZ+P?qPcy&G}84BbaiEeII(OBq6Nk1!f! zD-;UaYwt#bL3!vwRY#1564?v{<=VT^u#%y|AlBZEMq@Rol!)-3Ag|~lTq+QjZ5H#! zinu5@w&>rN8FPJ{YwyNYIi$c=k89|djWn*75O6?<TzfYX5(FM35*N&kCJD;3KzKwo zwn+$hA(C8sH<~4=M1kbmyU`*+Wfqns)ha=&6iBVT8*LI66BWH+PS=bc{c5faVbNQz zy&Ju`3<Ka<dpBN_L*St@XYJkS&!rrMR%Wlh8#^Q<q=_hX)B}7eA>aDDG4uhMnOwgz zhKm_OR$P8JMk16Kq{HQRV>IW(q)<sNjj;<U+uKB#RHL89g{MV6{2APD;_57yl62!H z{a*nHsyR{PO+~CZ2+HL><7SnK$bA{cr(vlfATQ)Nz^V|q4sa2UAm&1ANg@$4u>5`! zvxHTrjavfYjaXJ#bMkG0r}2WBf6>dpq8B?dfW3=e1{S?YJ7dwyz@pce3#o&QMK1%3 zUNo?*MK1%3UX+n<(aXT17ptSS=w)EhYZ_ED7QGBCda<M3ow4X;V9|^4%tbE)i(Z6# z7rhKDdU2ZkkZ;k;z@ir?STh#A3@mz)*Sj(ny$mdRk#N?cmw`nuM$EJ5Wnj^ZQCW*# z1{S>-G0&oxfkiJyc^174EP9cp$Hbb`9|`0`jrJmzfkmvJpbP|9)Bgq*u>zQeJm9!t zd@!&MRuOZTrf2|2p<FTyxMYwx0Lmr9fJ??6(1g|jpi2fIC4@lXfN*6HkP8XPQ!W_> zTrx<b(Cd<6z$K#?jFiyU=6A_3;F7^~RhA{CgaMa~x1bk^dtEXNxMUEm(c_X~z$JsT ztyn&{Trv!}WU$dp*bugzaLHiG7Uhy*z$JqyutUcs!+=Xh4G48PE*Zull?a9jCk@t3 z11=e?2m_S+eqq2RqYNV5xx{wKFyNEHCZR*KK~=(lQwFPj7ho6!D5neqUK!hv+mnGM zwpWG$w~TVg@+k>IX7J1C0t);x!fX&^jsFkM^}99x@4$>z<NqEpxlf=TEyF%<9u$HC zEV~H5L=@g`@}Y?EN`&Q5wgoq`RSKx^fE||IgyWK7Jg@&4`>q7B7G=CpY_(6Yh8Lxf z(E>s?|0(a$F({V|<E5NGM$YIJq)UeJQyI)hD~FQ4T=XCci2lKL$uNE<Q=>1CE*Zuz zidp7Wj!TAtrjJctj5>x(h5?rhHgM&(ONIfL49aQ)OqDJf@KRes!ECf$G7Pw6Pz*3R zxMUb`$sh|bH>@BSaLHhyU{i3(FyN9wp~0S{ONIfLj5t!lmZVFD0hbKQO}S(kaLFJg zn3nC5VZbGW1Yk#&ONIfL3_@T>mP>{Kmkd6?pw%P47^E0*$tZw1?2>f?C4fuDU0`ZN zuBpofe*-QVY$D*2aSCaP?NK~Img1=_xOYjH3<EA1RBN&2l3{Gn^iiZ#O^GnzlffXv z(g(wUPX>7nSw0yCd@^JsAi}iPa0xEOj!%Zsf}x(IhGIZ3aLQm1)TC2}0jCUxEvF0v zP8kn_cAkjxM|LLce_(y@Lb<*LOlgfPRG6)_3`bS?Cw6$bh*Do{?qvLG5hWS6I(C@! z*4g1QQN%Vw3QL3u4zoEZVvV#!)=pppE>RZnb-0m~0wUl0hNMv&Tu#f34x+94T^lJX z@|^W|uF^+O20w<lptV|yAO#93I9LL(&jTe)8WDSyKKkuarVG>3bKI2$_Yrf+juPr$ z*6Cslbd~m>0x00L3;{-n@IR5zk8r^_Lye9x1lRA^IR+1ML0$iJ!9f&41mz&)k8@>* zujIT7II{E+d0nG2<Y--GNYnryNv*tyA6<pZd!2+L&$H^_UE7T1m*^u)ku6?9osq3- z{xTycMn-H1M3}!^!a@o*lA1`t4<^4XcN1KsbuW;(D<nA2O^?Ul{0odrK(x>WnkK<3 zCAh>#g78(jTYz5XgR2y)Wy~trf$IZ+Tnmb|BHEY*#u~Q*#uU);15nTk7wTYMsbFUF zKu@39)!9El)DmqeM~eBT+2RG4DscF(kz;l9_3Z;){bp}dOMmALt)j><ehBlrv%1*4 zw*UJ6f!6KjK<D;Wkyp4iRCqnS{I#yB{k`;DD7-q9!>IzHb&QYgt{#9l6IM<``i-bd zAqlHduqFl5h2f)ExGfZnfZ&DZwS)bweP%zNm0DZOmZpIw@ldd^B~-WqZ(C@6sdQ>) zUuvXU6t;!*H^K&m*2$&)nYrm%l|j4WOm}c=L}5orXY!IIE#v9E^nY%aPSAy&ifQzm zHsM-Pcuh#Z49Ms^eU!J2C)1+v+EDIt6zPGWs;5M(Vf%mvS619B0FajbHz;6MNea7Q zb|_^n(c=A>aY>B~qC_p+?zZra;qrZe3-MoXSv!cEx@br?JtM)IDr*@Cu2gh9HI>uv zYcGIso3B$(guR{JZ9OVH*e(6D6+|OOd+WeJM_+4GOLr607qCDIA;?gF>wpSje+n7$ zpocB=9j$%+oju($p9o<jXzr*sxAzQo510c@+qzo&;lYR)S#qg7ox$GLKG|X9Sd>iI zSxaB%j#jg`ueGgnCz9n_QIZR@ZLq6L7zA~8cMh1XJDXd32atC^95Dezaa<CTpCtsN z5CmV>*$vj(VfKC3o3g<9o<!NP1v2eGUlSam2721t;nY;<0W~!bfKyRKkVU<>vjvzY zNa0QtGp2PX2@IGmJ=>d*e^Ymh6oObPlWlM5>g;Y6B{I;_3g`Lmf&SKJQAz+y)7sb9 z-D9@(^=v0qgnIhKGCQ)jr@wP2O4mHt*Ew*#*)%ZF*ST#FGbqb#jQ)=8UE7*OnH?Sk zgOXT3_*-E^+r7{WZ0NSmZn$!_ij@R(^z>XSR`IT>uYHGD&AZm_9lhd0-nF!D8*B$7 zU2S3w!~NHHH%orIcZe7P8STefiG<=|6KpwTFt2Osg8{XRb#_cI%)q?1^?GrU1(A{v z<qWm%gzkI$dYW7N`^9=Y1tg8v*_*ncfoog4#l?hEgmh*jp-TwB><rBT^`Hsr+(1zC zjsbH!z&*VK{o+zWy3jB>kjn^x$tc-hZl^%uEmh-AY$Uj;3uH}YzuTL7MFoMl@qj7` zYU^ul^}sd}2A*2G2SgR`!8GrydEeUI!uuKv-re8d-`Xo`tzhqU)MMNVwWAugh&qNK zZyLB`IMUkd8N*uD0#l(3MT3<RWX;~|TFm~wX3^+@wfFT(*k;0<%7#kRjCXBpLuzM5 z!%H7m5D6J~w4%t+P8*sE%0yhr2vsL2GPkaXEsWXTw9^aQDkAeXYQ^`2--O1m*we|2 z`--bIJ%SEe^Ee0=!$FXpR;GhsF&qRx3Aoomuow=4gn1nVi{T(hSeAoeF&qS$nd2Z> z3<p620LMYF7!HDK0I(bci{T*1;e+cSSPTcj4nVvPg2iwUJdOM;2f<=E2#x~9b`UIv zgWw*7Z3n?(I0!QAa}X?sgCK`+9tXi<I0zEtbr39ugCJq9gJ3Zn1PO5*1dHJycniq8 z4uZvS5Ih2i-$Ae#4uT&-LdQX{7!HCD0nO(iSPTcjuL0;f2o}RZ@GsCmdmRLe;UGAK zLBb)AgJ3Zn1POB;1dHJy_*bBHTRq=5DTY_ziwMo@6<7?fK$dDAufSq>1v1L#6<7?f zKmxP90*l|M6(-hjipKR86~*uh<dFPc5#~?$6b6^_S&_Q8o|Ox6TSVmtNEi<?xRp3m zzl2$caYk^kPNmByg8=EtiwJKAFwEhZOiRVcWLDZ~grgt8g{K@|1ThVb`=Za_;vvSM z2p_<>Alisw3RR*;+ak;Xv;_W>4TR$#`Jr?Je+^Z6b0pHb?E_f2vD_w0{%=61fC{iO zWUtzYAFEjnQJ_{%)vIMc38+zD!L)*Mc?7Q|ro{7sC2t1>-H909ja~W03ksa)fQgKO z^NR{zcu^<cp?N7_-q2lL?O`cSc<Vm#37E+PIG2(=anb1bfjKO_q_9;(3cJzF>=8fB zN?P5Jg#|+Y0U|$j2w5n}QAj}1S^9E7&t#&yUQu$<KuFsRP82&L{4+?had<zcxiH(F z-Xls@71A+3x{j{8Ls(oE`o9OFluW_!koZ9$mu4Ue<h1Y)10{^WTX{F&$8`iNEhwNF zZ3a=XY?)@ffY>Wuk7U{fugm=x1g>P@0y7`{_Rns{7b$knOzk&ko8x5f2_P(G60~uj zz>i@q#x5(<<l?Ld6Dlo{k57STh#G#`hOM(<0p5wV%rDIC!iu&qhV?+jgf}8wf_*d( zPA0L735t6V)4RzLJk4K`N7GvY5A1Qg&MKO8)`f788=J2%rBk(NmP?W0Aonl_kv@zu z@$6yt_O}kU^q_BICu}|2v@YQT&smYs!QvsP%|diNg#o-)0#{&(R&7e;ahL60!)g-_ za#QSbb2>F%+gNYHe_FnjA^nq+@a7f;e^gYn7NwTeZ%fv$K+BJ=%!DQ4g016jrkX}g z6<c9=Vns}og+4-XMwPsP@|zkKTPfc^A_Ax9RReK>?U-K2$S*TeYC%rmmrE!1vWg{t zZ^Oj}*2M05Vm)Wm5~Y4;GkW?iT?blJm1?YH0W;9(>3hYw(dg-$JU1FWeQ%ow?JA2m z*&=awsA5es9tQjO6PZs!SBqs^A;Vge+qq(~+Pq;T*}JdrTCe?!e<rq+%{thoSXO~c zwI{_yR*J%ld?}V=zDsO!Q%ok`kdXzcw=xl{jj9OCcOy}SC(-`-65ZraBujI-n~0?m zAF#PmtY7Mh2J7M>CtC7(i5m?*1v&diI};(9TJOQwuP}b@U?iLxf$g_!CsFMN%zIiD z#RbDjlvZN9s%UpM!RPaaHSeGZ-XpfnA+U+Y!w-32u|cfIr1zY7T_IstBh2rRte@MT zOw+{!-w$~LtnLJC0O!TC#R);1_yhPNt)!cEqqz7NOA~^1?vpmGN;G$tBt$M?5~m6& ze}<YxC(_qqMy}vD!-@3sn5ljNr@iIFNw_;&KA?dNKc2w6?m>Y}$DV-SHz(kAk+z*l zk%QwR9i@vj^2&D531oUJ6^3-R_#b%Z>YHRL%VipLy)M%MuU8Y^){>;N=@<3x=)sdw zP}7R;0<~giP85xNC~z`Z9zefm&72}guVxHK94rA?Jy4?mg$UiAISqWfl<7)llVi<2 zoQ>Gl)DPc<5MN;py)XYT;xsqH+&<Vf(5WU*T3bLq;7qob?!c5*_uzIbZCDFLRzNu# z9!p!d_YPdIZo4`2p%K_wgE>+D#!({t_Qml?!{0^>NAcTyJ?6ggi)j|{!@F&C9MC1K zv%j}#pt%EXK7gx7+FXg!(}Rf>-hrFWCOmTHF)-MDZFkRg-C_v?Ev?O++nc&XJ_DVY zYLghaDN;8zXnUCkj4hQYjd(JWfJRX&0U*0fL2$R6cTzEByu&n9KV&3UFu?5-F5pdn zQ(J3OUtiPpVkLvk>V6gPIhWLeS)y*pb2R~7y)5U2>h?O`ui?FVTE*iP?)msn+Upsh ztA-3+%n&D{<RoT-p>16~+e8!Z_~_rXU2IeLJ$+5>t)khDz{7OUwrg6O2k^usv3oc_ zX@Ob^A}JftMnH2L7IOI8#pm@7-da;=NNHu)8DdHV6enj27~X+wF#m&DC<K%wFug*= z>oHx1hdACtjIDh;Xk&*M?Ck1lZHLm%obiOVH}zi&3`KR|`rcLo5EMFJbdj%gYX#b6 zu)^pjT$Zs$bl^r-ji9{aMMU{ZK~5S&oz#fh>QJywgo7=+5;nXql}uwK_fcSmg9#Vj ziv<DJ#&D3|*jPUAXb?;=>u@m6bbPN5UJ$7Rf}dUr2O9w_v$`D5hLK401M*5Fv7%*S zg0D#kK&{(EHC|Xo+zLEh%BmkEZ$a`RF0jZYXPx~gk&u+O5&OyjF07nb>as8=@z`VS zSqb*=e1Z)i&k|>6etcO1JrJt)olk&pWVe(Xdc+8ZD7LuZrXS(52{{YAM_>6Bq#-u8 z4VEuQ;5QTm4u19EdvwG&Tv1ehUL1(c!Ab1>b6Rrn1@wlwih~0H%;L=Tu<;IrZzIg+ z<t_y7#JOq)FM3-l`U1ia;LMAGNlNx6cCqM_`4$I$L*XEM9<gK)@l;RV&DPDwG7z;Y zpsVuazYjRy0P+%wi>c`Hg_77Br5Z{0Qp9L?Mv_vml;V&yR|;_0y3_N&3`9vobYKv{ z?mv!)clCzDZ+(~5-a)Ur@A6hG6CcER5(>rOOFRHmS?Eoz%mK$d?_{~oz+rfWW;g@S z_ny`QuYb9Iu8Vtz3oj;ZV~=^b;N7g8YOwOo)%?Dd^LkgHOAR|dP_&I;|Hx&LFMCCu zL5MX}ISEqO`v{)yBOI16cjWJ2iIYLT3zrk(&MEGjV!2k+m(dEg0LfN_c4u&RC$^aq zg-e(Rn;5GND9Y)TfDiy`l}!}qj!F<TxDgz%E`1$!N&C$hO8;}A5PW0$DcCUOpN|$S zu<#@Rx-c74yHjlByaD9(Jmj_PH$z^hFrmR>+q=QN9`gFNZ!xy~SKVT)?EkMV#tJ-M z&Wqk+Y>8@nB6#HC3+YQ1+;J?LvEx`YYsazZO~r3RZFhGZi>e*RR)nH|6#Nll3hfsh z_BjE*;J_#$ci}mMJL`4z3-stmb1p~!ix)Z6v~V<Y$Fb<g!{0yx|BhqPPXtND*>OzI z*l{c;bH_3LqLtmqCfD(L*5mrOWxjF(Rj*&l5ZJ&pYvzt)x_`$p-M8bI-r(*yrZ*bj z1(gyJoWf6pFXQ|Wrz|V;hA*-x*SF~Rgk*s&uV+1L$1%7Ub1388aZJzNaZJzJaZJzN zaZJzNaZJzNaZI0Q$1&aBact!r1fy$ukN#81x8?P$_vSJTk$JqH_1EMOc&NzndhVAS zPHIKA&+`t3L)MOCIT*u9>8!z<FzPietl;QF`T!!V9mn+HVulc;%d_s=aZDf0xgK%) zYRTf*g%m7y93$DtI4(Rb`oT%uUkDv2muLMZ{lfrQJC5o89mjNg$FZEx!^j>6UO--0 zb-X){{Uu`7I4;jRT%Kppmf7yDdghK}I^0`}IL36`TLCE{#C2~4<U&F$_f~zr9mjOI zw|*0|V<m78T)@3m&)RWJpKr%8eV!f1bhx+v8>qYPtvcLWSvwLQ_g3A%<CqTjR-$;_ zTXnd%{t$#*_f{S5tu$=cy;b+`IHtqB^&TYIY1q~P?^bHRL$e`r$1y6n3n0h26~3)M zL%Jse+)~coaqOE|AbCnc<c?!uOn1SvHAuZn#lDXnwX0Ye^z1mcAJI8~00a1QKORBy zWqJ|(2vJy~Z~IV0@XH9xw(f_xkrrs}IL4_)w>@y&TlMGlJHRb>9Me5Jj_IBq$MlRH z$8`UWW4d?8G5zJDDU=dZaJGA^?%#1t|3xti?z*??aBrn~$1L|&9qz3(=5pJ;Rfl`) z2LZ6%Td@(|5(>s~Z`I-6N--$+RvqrGWI?&N>b@Pv^o$+Hbhx*E7b#mT_f{S5t(2Q` zZ`I-6N=hF0Ry}LSF+FR?F&*x$?5AA!RvqrGpM{WjS?;Ym+*@A{n;mi8TXnd%vNzf- zaz2K%#P%2nL6+jFEVxliZzUb>tyF8i<=(1q(DG1&E$>zx-mMHWEWKOxj2*{xc(=+n zKm=*9!7t*H?|8TBE!uUGm~?K{;oQm~h)L&G9nP%`Th6Vzf5)*g#8|dhj2*`=Mg?Ju z!G{I4<Cs4Gj$``#JC5mi`GPdiSYd%FiCt=~t;lq|e8GMWw&LG$OrLMZG2Or8n2wh( zmVr^|$-Cp2j+ZZ_CJ6TI^QGhE3&N+lXP0L$FC8ym5Pks6**lKuc=@6p3?D*!i&xF8 z9mjOMe9;EzZT=m{^aXYt)A8~J3ExXb<i289qD5CFbi91Qi2E7g-*HUG%NLA#kW6}a z9Mkdg1tT72gn!2|9WP%n>QQ&cG2Or87>gp+Y3(@1LddYS<Jb;6yj&Dx$Fai*DjUQb zK6qJ!VFIi*JsmG=ycZyA$1&bYV%CmhY=y0G>@+@t6l909)avU#7@%n_bzkdX)<SNJ z_FX$&naKM$+{@}Cf&>TILFBQSwknZ8gB(1KaD+Brijd4PfK9P7b{xABap%}^Y&(gO zhIhv?rdw#ovE0lZ$8yz<WBERhBBNU4UQS+zB4dFa#|$_W{Vo~x>^Nq?p@=ZALy-Z8 zBEqs9iVQduF*C=Z$bdu9CIB3VA_ERZ9ROGkMFt#-b|UCH6u}wZcq1TQhaz~udv_c& z;865#px6#Y1{{iRN7!~KGT>0eu+O2$$lh_xm}kc^BWuSoBXh?w0}e%>0(sY=$bdr; zJ@ow!MFt#--Uul<4n+nWik=3V&!NbGLs1T%CtZgk0}e%fNauAZGUnNF%*fht%z#5t zK4@j_IA*}Nh<^F=`W6`r?>J`6x8s<x;ErR)d^?UA@GW9bjUC7M6O2Owa>p^b0UT|? z+6;`FkLA%AtR2U;<5uF(9K1V@-N*=zS!e{ZCI(1UUPN#oZi5^)%d}LKcb~5hAROU4 z6Fg;Q#g1bqaG&=iE*@eGis0`<4{{T+AKT~=QQ)awUa$NhaU}AE5VfSODLyIs05_lW zazdoAv*A%*K><s%mb2P8<yKyKMcDEe9R*X<AOe!7b@pUDaqP9~yt8d+^d}^+g%?TS zqIs4CiZ$kB&u3_Nmh2X*nB|Wkg#UxHWK?V*g_m&uBF=KGbC;~9bi%=1yAoo3*Ybp9 zbUmg;O64qhD1u+ik~3OdJc9V`ARxqzOoaKO_4tiu%om+&!+E*wJh#oTPr2DVKRQ$~ zF+Malj6Le-*)3kIHcH`|gtHX$d%uP?V*ku&)?)A?7kTGjS@x_y>!Ds$f}G&^0r={0 zr+z+Pj$@xm`H6?;H4Pn;wi9s!gWauWe{)Bx+{e-b>uu^A=!AnYoXD{l+ADo?vD&J6 zQuV_TX@0DLAFIE&3r@_S)Q?qMCs#XdTUS%N%m({#V%<07Vr=i(u@mdOPKxcV+k4>7 zzP+=5I~R7be#it77oiR7q-OK>Ug>(itq<FJc9^wX0dq*qhk>`l^s{61_mIhctR(vh zHFXVovJ$y&bW?NlAeO<gEN%7-4zy#@yq(_U{aAN)NWgEntEYXi6|1|9MrrX@i5uP8 z+nE);#EoWAyIPx&Cf^124)%ALN=%}_1(SXkw1rr7zzzc~J%e~%L4k{0u#Mf*i$(4% zWI&g?P`o9B_f&fNu%<lNjh6&^y3wIKX&BqrIxyIWmljH0a9ht{pLxw7^wib49j@8S z+$czT0RHh{3ah-WP%<U6t+g9#-_0;bETlWcyPDy!EiItT1<Kbk;L6|Gc0E?t9b5{l zv%49q`dDgrpjZ=cZO4l?Ep2rEmkQ{|+Pf1EFL|@6eGo$s2h_wxe9GNy!)rxNEiHXm zk9T7GyL#Yu5542E9b3Ob6Ii34Ke`bs_D+l<3v_tq!%2^{o25O(TpUX+SSN=}poO(= zloVE<Dg759@Lm?Be;cIJ)4xrubMa7fnz}mM;YA<|%LRDK7lvrs*48gBa`7p){-%yL zJpDMV$|}}1&;q{#A8gxzxY&iL0<|@DfdZNjS)y&*JH;g)l$L7-@$$i7H>yDwMr;nX z9yCdvZDw;1UOT{8xm#T7##w@DYsHSe;xZTBy0e$Bn>20f7ni$G^4ifUmD|<{k!|!x z^?RZ!{84RuaiLdKx=_4wVK!FPHa3tkZW)X>C^os#?Xb~4)n4|ScyYn(NA>N(K+`D} zfrEHwL&?9Z2XzAmCcR9m7s7%DQ5S5q8b4ZZQ!_jpOv^4PDF?IGk4d)&yq5&VNUt9g z7e21YOBEa|%-)@Fxu|m^SwZ^1G+J+3V?SSMfMbTJKMRU{<%UQN^CD5J>K&?nxa+%Y z$S%TH0or<{3AAD>QnA^^q)wG{i0Q?+VqOfD8wgzKM$1at+ut$Rwhi-u4hPDz;@p)* zHa_x=tgUW5^KEY$=xFW3Cq6S$VTY!+?M)^&H-Q$!)tS*Xb@iU;gg1I8;uf-srn4aW z4P#ptrl-qo_C<nK$4Xj!G33Oyv{pC9>Ljj%Ll@gS(dI@qbzRqVJzi=;KZ{-&vN2IT zM7xWi>NcC1F1)4G;YRd#bhZsti%u7ELn|90yw-$Ttn%t^5!bl!Xrs3GKs8o%W+N-E zb)(yw(3Geb=`eZfsK?VCnAhROu~xC&jigDN+pEnTolPd}zT1uI?qR#s+tk^|_xVJR z8)FYzI4n|~Pp>D^;_)@IT@kOzj_K%B!=OGl$|?}WC;DBmQlR|4j;wlkx!oxhO>t*) zNBcH0=m!F`O6+i9EQhKq^6j?k+!$r;Ry{(u$d})Cy3y9y2?A~Dl)XCS&Ia##7ey6P zs$JaRf^9v$#wzJ+-KbXd_2v#LdaxI7L*ilADNz^HCvL>U*#V46`6(&ic=eXRZT5Jz zsSiUsc8%8f)e84g9M<5}3u@d3|3T&=fjeoxY6L37+xoA=t7~e&DFKp=FrEW!7fe0K zPYX_@4#d<amRwK9K%o<5ZTF77UTkFPmT7}y4%qz|R4)C_<d#c;%L=c-P(AbmP8H#~ z$Kbl3_nqZUoKynL`@(V+VKNE#qR)Ffo}IAh#N>H7mAHn38<GhTxd69IEI<qZ-=QrL zLH!Ej%J62Rb7>>CE(wH1C*K?|5XRaN??M)aVPk}ssU#8rb~UYYsRqR8TBO_r5_&nd zez?jA;#n%EQv}N1jIX=pmTH%*P<X~tEvOp?G6e-D%#%5+jap3L$$Sa18I@nDUA+Pf zuFXZ{+9j8)*doCN9op|`Z;`ncI@ExmGfmM_@V5nDj4QSnm1V<Zp2{Y|Y+0}pJ6mJ( z+FTSK`Iaul>upy^PS!?AYnhD$;xf_lB5l3C)CjIwxu!@fjubA(Ox49wVk;mq6#jzc zB;k~8rKIQtSApAnBkabnmh5`~7b3@e6|WSsrc_*l!o(az6o;&>wKB4T>nushtSD+F zsf+wz1uXXhS&T&4O~_(Bm4!!fC0tsQtH^A#ur(XbmPo{JAyHTNx;N)Z{q35i&>Z9| za{ZBRAq-oid0vc5R=BJ$343gkg~)d;q@Y94SXds3wN_IWK(v5cLXX8~mnb}c#?-@a zsfq;~5m|erMJihkZGf6qp_YW5<|Wfs?AAoLTaz4DMQB8<Cd6N}^PD!oYEhP08LL(e z6+0iE<4!YoHH=P(0#&t_+D%{0S~S3gsxB9mYE*5pL)WTgOW8Qak+?+Cvn@#xEVXQ8 zZLw^tR8?Chf%#WR)V0NvXqZTOxevT_Qn%}CnNMWkd__i1wAu^ooXTLyYxC{2EA1+| zN);_+w{+e{MzxU_X0|44RLjSXU~LXLj42utAX~n*g?5jyE}$ClwNiFOwp$qqS*uU# z5ayN@BeH?^H8!gB>wRSkEdSg#G^19tLvoj7SHKNdLV?(L)NM{DWn+Jtzq!3!HNqP& zM!l>+8GUUn`b2-zx(PFWnA21Zwx!}~%Ti<~u?h;nt2OA>a8p|++xfVKAZ=?EoH^@4 z+Es=D8L3uV@l|i-r7RE@-(cxXcC`?YLHS_P(U%?YHgAS-LCIq03RwtGhjOK5IkHyK zoQ78%)eMr_;^Y9{U5nc4B#^u)4P52mdVp865l%QU78SRVZOUw9xA_1{jm>WFVOMr< zBdbOisvUq#!?wvr?525b!REE7<uvoC(@5z44kgF79}jYFCIQ8cVHF4UPa;q1>{jeD z(b)3bo?;1minnSj*jeP;y+%Q{F%~K-EAqEOZfjw+LTbR_Y5qz=(5=^2n187cXsLaf z+hs2ITFBKaD3~&@j_fhf3NKI<Q|a1nEiy(1D_L%<u&cazSoLvrr7}bm#w#**cy5av zkRn(cuv?m-tp%h~N(^O-FRbcvL`gB~G_sc1blLKF#Fj%uj@U8=2(BK<RCYdrN+Ac2 zl9a7-qFNb9(|;AlysqwYGs|Yktk>#Rr-K@hXAgCk_^m15NotR43+z!)p&}Bsg<fP6 zbqBJrMGj<{j~d8YgI@`dvMjMRwYFHQN>!IqyFM<<7Uy!+H<l^2t?)Oz7q|^GjT*yV zf7{D}ukIW8f@$A4_d+$!MMq>IT2&$DZ=ctC&D<R#`i8$=>$kfm$NF7EDEC=C>eYI; zDY)3v6bNm;mP}ULwNd$$#O@uEj<Dz<dju0!trY9V+M>>-YLF0#i}s~gtPK(!4;`|Z zb4AU^3Ej5#93_xkf7@rQg$3u?gCpGkYR5;AJS;+D3cs4B{Vab8e=rilqa^RvL??0o zah!jT^XE9}{?4y^J%=-(tqBwuU04|uZ^1>QH&Wo;xCB3hOXz;yeHNGSmv}jWOXRP4 z$L$j%VQe5Az}8p-yS;^jOT${EC>(rG<V*Ue_=lkWsXzccTo3AGu@=AcvKY7lUKj7f zDcK2r1$X$c5s-^`QP~tDn<6)xtr55`MnJB^B3`*5@ppm9*KtbX0qGAKN4-^aW2B46 zv4FNHT7QOwr*SG;F$^BWYxz2e<dL7+I1gG+A|W^6QncD}C*F#SqQ#F&oChrqt**kU zXiefyd>j`=i=R($Xx$0nQW<}@ki7Eh;pp;4oOk04!iVNEoVVfp9?oJ6aQ5K*CeHuF zNq--i=gK7R#C^DEUn1-zF2R4mCG<UB_zl1C3%Eqkc8e&6_ad^Kmo>PAF2O~Y6CN0K zi5z~6EvJi@0bWwL=##wL&&%)PqTPl|?(Mil?!hH|KQDiViy;-kSGR-zh|*g|*>G)G zONVg{My_8L%zbNkc_dh<g^k_elHlYufbI_$Mt~ie%lQ3>6}~H+XT_`Eec>fCye}Ls z1u-VQDs0H#M7YR8UFcV3wco;fgGFl2N<SCQx6-RD=E9{id{4L(6Ixp2t>HZWZVAWm z6L@Pl8hJ8&32uYm4oCU3G<>NqbeS)-(HA;fT!jyFlP6RXUcr#$D$u?x9K&5vFy{;5 zSaAPrIDZR-5zN`LG+bbn!xpV7*S_!y3IB*Cw~ttIxI4UB!oP@iV<}1%yzec~EDZ;j zBRZI`K~Xbb@F@!5T&S=nTo|083T@RbLS-Pk?A6y+<ip{-Ezl2SrA6M)>rZ*n)4cw8 zzDpn<ZP1gbMy#K03)RnH6}D~IgY!c;W!;N>6L%bJ3vDSbfi=8b!b_YNSta<&A>^n< zwnPFI*lz+iU?CXMKg=H;AF~Jr<?Sf%cJlJI$S5J<2t(n>HN3u+muv3FH4ym;uR8H_ zWMoc+=s83Q>6N@na7Y5KiM$o>kD+`wSmkS2uzU}K=^x=-QwZkSKLvYmCywHx{Q+UJ zKzs=-Sj;L;^MK6+;2x}XS=1{Rq8_*iE-J65rwl0v-bII%zr#hflzi!Fg=#fakMJ3b z-ob_FMaSR{^HH4N!ueC2mtq8Q6z8)zWgbg9OOW`TxM+9d68Hoz!O!9nI>EcY<>eo6 z34f25AK()CG4FoHyAU356>Id|QRQVvTNuvm3Tqv_LWkAi+=zBfSUVif?UX`pvDn_S z5Zl2wfbg9-zlBq>8F~SCVjVWM&@RO#P{#`(zdinYOTfg}Mfm9;EVtkj-`pIQ+xWz= zCrRwJH;Rn!k~-1WUa=Wrrts5qc3bjM&OrL_EujD9+-;gm&umK13~w4q4b6>hQl5Vm zwUzj*sNRHk=+bl37IYK+2`h)i*^`XdH`Z574_7EkehRN%QXiu#8~FQeg2UgY42G(! zH;qpYPt1*^6k0}f`e3?ZW@>6y7Scl8w7<3n-}V)@94IcUcwTvB2(OZqrD#!^z>F;s z71{&{cvGBg+MC1%aFgK3BKykcfO5S;)P16MN+9W<zb#oNh0WVWQlpi-1wM!Z`syBE zJsM5oqw{KuUqlWi)2Z3?2<{xvObUBG0KgBw5Dr4v77KSukhnR!wfYM~lTiuH|0%Xk zJNgyN=r6G>`1y;?`XuuIi1y)^l9{J~p4;=aE-PvE|Ac1rR}m8n`0FTZcKx+-t$8&i zoR#Z&*FX=Kp4(s2nrdIovS##;zM`LRvCkKOlO-D#&~tlsF};!uZ<^;-ipt?vaR}rS zud0Br+K|8*bg<iI*LRN5(yPYED>pWoXKbZxF2g8(y`wz&D(NdVxbs_xJ%BvV;g=H1 zId#5i`0~p$$InCj5~Qqwi%NdpRepgQw-7jUjOdIcogtz-CRBRBn9w`Q#E{Z~y8}!} zSq>vJ#+UNbpw8$LU*0`{fYJzVCTH<tmWrL7z{f3<Biv2cLC1~S2HJuo$K^nk4^<ei zUVb^YlO7!(!#xBm_XeK9LkEKDZC2c%Y>2`Q%>2CN%J;_P{%HTRI*aqExaaZsLEH68 z#Cz|x4%-gk(n;e`3fV8eIRZVLy(9A1R69p*H~6Y{AsG_$adEyJEBp+KXKg%x2_4uH zp$_bOuMW;G<qYP2rQ&XyPN(KZrYhui))gajd-ooEHEWBH*I#b5Js-cnL?N;`u^)ro zT_ImhLA;VWR3^*Xc8=i;Ej1(Kvs(76HvDnMVXs;aa&+*DQ1=_kFFE><gH6Q__Q0{X z9fg6-2Xi`fZ<BDAsUdJEdv2%y&*;M4;eg5w&G`IN9x$JZ>gvjx$|_8R!k%bO>Svy3 zOCNHERjEXoP4BOm!eXehQkuCMI&9*e{AbN)5v*8*)elQbq7c&9&_o4xBbiC#-i`cU zK0E%uzjz}kBG-$ZL;C)N#47A08(Q_Apw=IHA^1X&p%;Q53v0chkA?ptqV-$&p^`^6 zz?`TD!!jx$LaQFr0#zSD%!A=T^+&{9Mn0jcPife3GxTTL9Rd8xBUJTqz(RoC4w&L8 zRCPCCI$-YrOc(U+QAeoiT^cBdZrA=r{{D-G7utJ6&ug~=aUyhU;I05O#^(?`1q_Lc zRBj=0xt)bg@Hg_eQhqoV4tps5f1MFxOtWUbGo&$Tg*6ewf^SBo6@0T7M^w(H4$L|b ztWs-yL5VI;?olZ}M61GFEe_5@xe{M_v{Nwkd^n7^j0mqz5$7vdONT>G#_@+%7@kDH zSv~Ip^(QSHxGMoChHEw&_kQNV9D>?CxMI0J<M^r-rgKG5<2C#ETMGnt1>kTW+w9|M zfF^L#@`GAD8v&5#EGS&dfYXSpUy!zzHzCH-^1(55sACn-_E2ifN-lTqU}{MR%d|sp zU<_-blsp62-a!6Hsi@kx29RR_p3OGufRn%}aU9!FsmSxcAU!-5JV&-|&@Ih>WZT9n zKY|sae4KJ=yAkq>x^l)fL?vf_KPCHk8lbyyDjb+t#$n5O8{kUL*ewh@X;t9UNW=U% zC=PQjog7PXd#{BhCZB_Vdx#Ew0yWN&m`X*7U4(cge^TXPON?@2`R1!Bw!|nWRh!@v zlX2M6NC2)%dRYdB3T{UU6o<^K2BB=}KMm9e9Xi<(BPD9*E}YWpv;o{@Xvb=!+7P3p zI-1-A33?B^wYdvi;2-?3bi8v9TRYbPbS^sgErL$>BIrD@2s(X>p!3io=-_SGbC&D) zBIwY^>Rj^q+9K%i!&~Q~b8-=Mh898RiAB&ET?Cz{7D0!N;<?IoY7unUr=E+>=|#|a zn?uKXfXe8?Uke(nQVX@ucHL1ptUEE409X4spSEQq60!Ep*Zz<mdusO2s;B;EaF*S& zv!`bNoQL0_b`sa@gFST&XD-h9cm`Oor@jZL>ZxzU9XazK?1kC)s$RH((#krX2IOlv zReKoEiYI{W*z-75J4PHoDZBmoFk+P6twk-antP7jNETa!z7!72?$3v$UTJ;Z1NT0q zuOVcXEko+-|2X<$OO$<3UkRM&(ig?1^wkAyO4EN(Uu77SD1BX$U3kPljq~R?&!w*o zNUiimtM!wz_4QfA`1HlqZO?HK$*LBiFNO2#(N`F6lAKFl%@B^NUkmGN7s`1qeRZMy z=hD~J5c0Y7RRucd($@fR&ZV!v2G2fyaT>#O{2pi|7NIYN^Xt*q7+ya*m%cu*2z?zw zInSl9I~Jj@QB?7B>1$*W`Z}}-ef=AF_UVi3{hs4PpurDvoU8v*IKLi!eH|}>pG#jq zT7<stLOIW+FMdw&T=nancv3i*zNmMwg#KdT{_Fll=!?()N?%mc-y!5bNMqL`^rdjf z4>!!`w-4RJ?!RIHft1z1`^O3PvkY5q_DDg^9}kc`INrD%6C6rke_k#`OhtIE?7v#k zr>ORD86SDGjz_GL@`))ZpCYqR#3undj`LhPWnZ9ldKb#RA&byg0pXkh&!FZ!p!@LH z4?c(@E4_!aJ4(bqjq@?^eJ;Io{H)s57NoEWiaQ>5Ke!HHrFZXgslws)2Z+B5L|9K3 z8vDHfoGrkW`cg?DiG&Z54+yz%arl)Xe!fw*05Vk#Abg^Cakc_-96^O+k7*S@l;L{h zTqM)l7u&`X03h+aJli(L8YA=4N^qBb(8f-|gq4k*L2X=}g+v?U_cxV|{R8;PK4@dR z0aiA~_eQc0+SpS#&t+qjn6fb&8;Lvz?S~)9RQ7Yry!<>(d<f@U_CpOR`?(nji0vM> z{ak?@T>G(?dR@F5LF1&Y!Fjl`b*gZvF9<W^I3JyMAg$7A1`#Vro&I~ft<x?PirD^x zI^{>zluqC0kF-M67pv5{^u;fODSh$D877o*P+$C-n9|qiJQ7m%J-!Hi-Qnnqt*4)q zt*`3<cH8+|kivhA1M<`&^rdj9FMmFy_Dbuk_F7wC98J!zFMha7>FaWTfvgbq6+`NC z>5E^%Qu^ve3R=JapuYIkETym3?7}1dX`H(kp|3~JrY~!z{j}5tYhUF!=QGP2jv*E8 z$br-yN5}_>lXoAap5r<TV$Hm920>ZE!ZUA9?q`{KGZ#VUCA$=7p)<S)IxGUvV0E+t z-noZu;bV)Sqc4Kao<-0pTm+q|MbIf*1fBFE=)@L5=a@r>vg7Og{^J9HR7pCqc~^zZ zxymZ0*oBi?fE`-4s!~xq>{<Q8t@CLU9Lm~#pp$*D4Il1u+62rxp+aUHY{U6+I@Kmr zXO)uZ?3bU$FH;A#3kk|P*lr|%cdmAWUxQQa#^;cN?@juTuOi6xQZ@GDHTz)O!mrG! zw&fy!hijpe-#bwnMxJfVe;PQd?@j;{1@IhpP2n@xxmtkfvssj-_X9RgcFQm9u~rOu zS=M5;W6yv?B=odndBE{O;&&q62dQs!Q(5iU$InuV-IK|^DbTpXp))$Wdv0<MW+&ae ztWq4ZOM#fo<9w{wDd~K4RM~4d-jwB%BTv7gt#&@{@@zrsJUm-v|J+&1Zr93RW4Yq2 zuc}=B+E01fr6{u{uPunvK<ia>Sf~7lZN1-g%AW1I^6Hg6yQLv_Y?0oJ0iJ>1pq2#F zv~~Z%7KxufP%YAj{E=3Ot<5f!OSLwbKFX-MMC0r?KWU&^8;*A=DgVKigr7f9ElC^{ zvyZ0%Ite+emLz)>&zAEra8xUSl?Z!%IfZZ9S;uk2SAmFZZ6xe(067j07kXxVrL|*^ z3Kx1leGXhX9BS;mvIW9*PsKAe$g*VPu*G^@mWw#F-fWzw0VUpoQngwepveQhr?pI- zKo|+x9$MZJF_8DSna=@1)(fXLl>o;FiQfwvK1lt9o9b7}{gg{bwPSUKS-IbpmHQ2D zs$VJhr(8N#?w<BgL9*M-`o_#uHDJ&$pSt@qA#u)T_+;2{b0(d|q^e)#$R{zHO3qeR z(Nysfd#Po`bHkx5$`54b9#3RK>NhTe@-11EAIzi^Z^?wzZ&?K8+p;J>lu0LUw@l7+ zN`1#7D8D0%^21q_yD}m5I~PIu_AJVeX3~idWJ2m^7eSfN-9Brn`&uTQ_|8m7{h>ur z=19*^`LRqo@z-TS>Th2J<-4*dpUk8a-<1iezi$zg@6Dq8cqX0rNG7EIp+!)>FN^XM znRMd2Ga>cI7eSd%L4G+unMo%;kqN2i9IQ&UaP58|i}F*MbmG&Qkow0LLHWTf%Fkrd ziO*(2>YrQ$<%hB;pUR{YKadHjKeY(T4`)$+E|X6D=1fTa=|xaJo<;d|CY|`9Oi2Ap zi=g~y7UkzN>BMizgwzWs)xx&%H3!EY8^4rECw^Ndq(09{wJ_z!92}eS&ok-7-;oKa zk2$Fprpytezou{y<b%YIWl`Sfq*{=2{PxUL*n>BNa>L^eoyr;Pr-2kabetS-3GrjZ zzl4(^{NN~55i+D8Yb*$RVFjrK<Vg@gb{1qSAa^0C)*Z}Iyl;RwHER^JaIOW8J*yTF z<~VZ`B8HP=HbwbHD=z>n$OIsM4i5qHHN;bfDizm+dAJ-tO2{EE<Vivby^t5OQmqXE z2OPO{t^|ZY7jm7%A)cN4coyVMS&*ZE#F4@+>D_>+xq_HgicbTgW(I7?mmNBQXv>hE z689hfVBsjr=IHd??643|Il3VBzxi+oc^;5c_;qE-A-pSR)4XA1qIVxr<q^=z@td7{ zIS2lZRPk=*zVVr<$tnQdl5PQxJ?>Td8el3Mu2e^}Air-xh^JEB>w}p50HA3y+C%5T zEIMD8kc0>42|yl4D!1&<0AjZ!DzBHB$|)D~C}e?fxID)Iu}9P@RUIIwf#Xu%2FP(A zWDpR0l&exD0bvqVcW^Ie2*Kgz^<h9<?J(|PKoa;R4MpecfSmNz%I^Te0W^LroPXu5 zb)XKK%E$Hr$68=NGuS(3^a%$-<p1!cA_QCV2{i{BvnZDWV$VV-eyRa+`7uYaQPw0N z4rLSH7RFo0Ld}`mbP`C#QIpk@n4^2AuuIWK<mr~83phNKeDHk~8QOrWi(~q5h;RoW zc6+Ee{G^4$9|idf+}a}<1^K3h<Lcr?KpsR2H&qByCjl2{IUzVK4rfxbs4*mQwfq|3 zJP#a~jtPjG`M0Gp0|+axOZn}9ob;voARw%oE*)-LdcP0nbAUYLgM0&!2ONlrsykxU zCIBsIu#LCp7-21=V=1;RUvsr%ePg)LSFRV4%IzJ@(cy`ybV?j|QjvZL`=UOBUzg{l zfcSa71dt~j9CH+3#>PA(M@_B_>wv?G>dL2ELI`CkOl2B^t(R*XyChD+lWH#@><(Ny zZvx~|KwJ)w0P>U%@_s-b^FclZh<zyg`2rv@fEZGczp-%KymU-oJ&brauQEWM^Fhi1 zp(VI<YB=d7j~IFfxVq5@GLCD3L#UhAu$4+dOz4xxDx9u-W`Sdme-zJe1*8NxE{A_; z(P8R<7Q;0=_s;;w-)eouO6BtNw2#i(dFj09ONG8^GWiA|T1P-zkGt&L^EtU_9oU`` zcYYkw+3%xsaW)RO1q75&TdviWgR(u31RGOLra0}xxx&ibE$J*Eerdcv3+K26A=^sw zC%q7DT{eg4sgu5*`l2kH?}J8VYBz>uoZYXKyWC-~!{p=`zJh86$0tXp?EB=<&`fHd z9h%^#Y!+5}cE-LX81Ip~;i=(?@ig|ukbO!sK2<l1mp$gDg?Zih<aWI9?*W}N&kW|y z$%1@!rTnIwZt|29y<2OC+1A&zy%nF$Z13zw`-XRBXHsKeGc}{6VUA9+8^nvK_~yAc z!iHuhP>Xk!_%^&MoX6W-*!y$X9?hA6>P$dQCZHDCdMH{SE>1K$LU)9mjl~TWP!tS{ zC~a;7H#L(Q>4k=@+rCsXJ>^7nBqv8EQf_{ZJ5!<>Y%#<==nl9DlT(vcrhe2Gm7z># zPN(>)tT{6`IXk{L1(|YR5ila=eIeg2tNQ}<ystl_R7#EfA|90J*ObXOaz&+jFSov~ z4xcDNg1*6Sd{7eKFYIp}Z0W(L=DK>C@r_k{8V>|aP9Z}o&>@3ucwFfkADT(d98AQS z*!zJo1cwhK@s74^3QTiyFCgQ4r{`u;@~dSCaibH5m<gKGX<2X!3W~sY6g!f#-}V-j z`%}q1m7u@@f@+Tt%2q85K#g~YccW$u!+K%D<HKoL7VfWNPK}a-;XTq~u#>5oMVsUK zg^Bx#%%sw(nSCiqesA&(Q!{3IZU`^X&!+a8`%*LMacr1MF>;4M^T33s@Cq_M4@3<x zkY?l{78%Dm_&aFIEnY^HxxuRV&W14CQ?uKrM&>3`%0!!#PBN4(+beT7Mu(<a&H_7F z2JmDoWv-rwkn6(sU>TKZi(of)IB~^j=?*;g&P)wAjf_AxY3d^j;wUq-$v{OKovO^> zRS9a^!><jo1%;&}2!1N<llb^vyf<fZ8y2YmSw_n+<$cCxwWgU)4bM_t$%*l?$-UV8 zhUvPdk|UPEE9uI#nbklEP!78+DfsQavuVH@HrghOM~BqRWO5?g_|QcyY<vsr#;L2e zP`sZ5R0_9al=y~ijx5_8b_JXz8rTg!OpNOuFrAvfeG;l-7YTduXJlgNEB8=9l&^lH z?qwAgqm#aC`)4;h8~-j?a#ho-t=3lM4D%bY<S8SNqf!J|7@jY$1*xla)-#@IatYjL z29Cj6tq;c$i)37pwub+<_B{<7Gi9@pWxZ$y*?Ty3T@kXLk5E+Fl-rcbg3APK84_q4 z>@s=uA(2oUv)c@RGp?j)4b~h&zP4SVs0S8Q9jjrL4T85xRHioTVbttoz1)Us2^QV9 zlIAOET93N6D&?cF9d&RF+jYS3tf~XsV}IhBwTj0!Tac-IV9wMVMzQCmHuWfuPrcjh zaJG&Ob9&0$ZI24FM@p*2wG^w`A#Y!xcIz@nCz4~TUy=oP#4XKwo*IXY<y4cu1b}+0 z8H53dY7kxNdUNL^K^6&>Ae&V=V$Q;r{ARR_nWAPV>QA_E?OV82Q$3D{ws+upmfm94 Mu?jx9`1uh34=rG${{R30 From 4121c64295fcf8943171b8eddf4e550c2d19cf86 Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Sun, 3 Apr 2022 00:02:00 +0200 Subject: [PATCH 1164/2710] Ignore executables in util directory --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index ad4d26c3f..9112484b8 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ /testwrk/ /wrk/ /cc65.zip +/util/atari/*.exe +/util/gamate/*.exe + From d0e9ceb2b583bf40338880e16b5908b599eb9038 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 3 Apr 2022 00:06:45 +0200 Subject: [PATCH 1165/2710] Some clean-up One exit() too much file is not optional --- util/gamate/gamate-fixcart.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/util/gamate/gamate-fixcart.c b/util/gamate/gamate-fixcart.c index ba09ac083..65c0c5311 100644 --- a/util/gamate/gamate-fixcart.c +++ b/util/gamate/gamate-fixcart.c @@ -1,4 +1,3 @@ - #include <stdlib.h> #include <stdio.h> @@ -7,8 +6,7 @@ unsigned int n, i, c; void usage(char *arg) { - printf("usage: %s [file]\n", arg); - exit(-1); + printf("usage: %s file\n", arg); } int main(int argc, char *argv[]) { @@ -33,5 +31,5 @@ int main(int argc, char *argv[]) { fputc((n >> 8) & 0xff, in); fclose(in); - return (0); + return 0; } From 91a5eb3770e3c8efc6600ad3e3ec28f50d83a9bb Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 3 Apr 2022 08:21:31 +0200 Subject: [PATCH 1166/2710] Fixed documentation typo --- doc/intro.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/intro.sgml b/doc/intro.sgml index 5d1889d76..4713de136 100644 --- a/doc/intro.sgml +++ b/doc/intro.sgml @@ -500,7 +500,7 @@ prompt. Before you can run the cartridge image produced by the linker, the binary has to be patched using the <bf/gamate-fixcart/ tool that is included in the cc65 -package in the util/gamata directory. +package in the util/gamate/ directory. <tscreen><verb> gamate-fixcart <image.bin> From b65084b459bd3116b18fe1776d421461f31e9480 Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Sun, 3 Apr 2022 15:28:37 +0200 Subject: [PATCH 1167/2710] Use lsr --- libsrc/gamate/cputc.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/gamate/cputc.s b/libsrc/gamate/cputc.s index 7f407ea00..b972535c5 100644 --- a/libsrc/gamate/cputc.s +++ b/libsrc/gamate/cputc.s @@ -97,8 +97,8 @@ putchar: ldy #$F8 lda CHARCOLOR - and #1 - beq @delete1 + lsr + bcc @delete1 @copylp1: lda (ptr3),y From 412fd70404e00947c035bfd00c74d72a3ba1a179 Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Sun, 3 Apr 2022 17:23:36 +0200 Subject: [PATCH 1168/2710] Optimize delete cycles --- libsrc/gamate/cputc.s | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libsrc/gamate/cputc.s b/libsrc/gamate/cputc.s index b972535c5..d80e8b41a 100644 --- a/libsrc/gamate/cputc.s +++ b/libsrc/gamate/cputc.s @@ -111,9 +111,10 @@ putchar: @delete1: lda #$00 +@del1: sta LCD_DATA iny - bne @delete1 + bne @del1 @skip_delete1: @@ -143,9 +144,10 @@ putchar: @delete2: lda #$00 +@del2: sta LCD_DATA iny - bne @delete2 + bne @del2 @skip_delete2: pla From 6017671fd9dc937d26146036bffe795feaa00ed5 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 4 Apr 2022 10:50:38 +0300 Subject: [PATCH 1169/2710] Don't set cursor in clrscr --- libsrc/atari7800/clrscr.s | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s index 8d695b706..4d3873499 100644 --- a/libsrc/atari7800/clrscr.s +++ b/libsrc/atari7800/clrscr.s @@ -3,18 +3,13 @@ .export _clrscr - .import CURS_X - .import CURS_Y .import _screen - .import pushax, __bzero + .import pusha0,pushax, __bzero .code .proc _clrscr - lda #0 - sta CURS_X - sta CURS_Y lda #<(_screen) ldx #>(_screen) jsr pushax From 0e6b490c8b4c6938a667d91d215fd68cd4057393 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 4 Apr 2022 10:51:13 +0300 Subject: [PATCH 1170/2710] Remove cursor from conio init --- libsrc/atari7800/conio.s | 7 ------- 1 file changed, 7 deletions(-) diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index 2b9062342..5852c1103 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -14,18 +14,11 @@ .export _zones .export _dll .export _initconio - .export CURS_X, CURS_Y .bss _screen: .res charsperline * screenrows - .data -CURS_X: - .byte 0 -CURS_Y: - .byte 0 - ;---------------------------------------------------------------------------- ; Macros used to generate lists From 04a13cf9491d5753c72a2dafe5adb2f8d056fde4 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 4 Apr 2022 10:51:43 +0300 Subject: [PATCH 1171/2710] Add cursor processing --- libsrc/atari7800/setcursor.s | 169 +++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 libsrc/atari7800/setcursor.s diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s new file mode 100644 index 000000000..9f8765656 --- /dev/null +++ b/libsrc/atari7800/setcursor.s @@ -0,0 +1,169 @@ +; +; 2022-04-03, Karri Kaksonen +; +; setcursor (unsigned char on); +; +; The Atari 7800 does not have a hw cursor. +; This module emulates a cursor to be used with the conio +; implementation. +; +; The actual cursor display is included in the conio dll +; but every scanline has the element silenced by default +; at the end of every zone. +; +; The way the cursor works is to silence it before the cursor +; position changes and enable it afterwards. +; +; In order to get some performance we have a pointer to the +; cursor header structure. This structure is always at the +; end of the zone. So the pointer changes when CURS_Y changes. +; +; There is so many dependencies that it makes sense to +; deal with all CURS_X, CURS_Y stuff in this file and +; definitely not allow direct access to the variables. +; + + .export _cursor_visible + .export _cursorzone + .export _gotoxy, _gotox, _gotoy, wherex, wherey + .constructor init_cursor + + .importzp ptr1, sp + .import _zones + .import pusha, incsp1, pusha0, pushax, popax, tosumula0, incax5 + .include "atari7800.inc" + + .macpack generic + + .data +CURS_X: + .byte 0 +CURS_Y: + .byte 0 +_cursor_visible: + .byte 1 + + .bss +_cursorzone: + .res 2 + + .code + +;----------------------------------------------------------------------------- +; Calculate cursorzone address +; You also need to set the cursorzone to point to the correct cursor Header +; at the end of line CURS_Y. +; Offset to cursor zone 5. To next line offset 11 +; cursorzone points to _zones + CURS_Y * 11 + 5 +; A = CURS_Y +calccursorzone: + jsr pusha0 + lda #11 + jsr tosumula0 + jsr incax5 + clc + adc #<_zones + sta _cursorzone ; calculate new cursorzone + sta ptr1 + txa + adc #>_zones + sta _cursorzone+1 + sta ptr1+1 + rts + +;----------------------------------------------------------------------------- +; Set cursor to Y position. +; You also need to set the cursorzone to point to the correct cursor Header +; at the end of line CURS_Y. +; Offset to cursor zone 5. To next line offset 11 +; cursorzone points to _zones + CURS_Y * 11 + 5 +; +; cursorzone[1] = 0 when not CURS_Y, 30 if CURS_Y +; +; Disable cursor +; cursorzone[1] = 0 +; +; Enable cursor +; if showcursor cursorzone[1] = 30 +; +_gotoy: pha + lda CURS_Y + jsr calccursorzone + ldy #1 + lda #0 + sta (ptr1),y ; disable cursor + pla + sta CURS_Y + jsr calccursorzone + lda _cursor_visible + beq L2 + lda #30 ; enable cursor +L2: ldy #1 + sta (ptr1),y + rts + +;----------------------------------------------------------------------------- +; Set cursor to X position. +; You also need to set the hpos offset to the correct value on this line +; cursorzone[3] = 8 * CURS_X +; +_gotox: tay + lda _cursorzone + ldx _cursorzone+1 + sta ptr1 + stx ptr1+1 + tya + ldy #3 + clc + rol + rol + rol + sta (ptr1),y + rts + +;----------------------------------------------------------------------------- +; Set cursor to desired position (X,Y) +; + .proc _gotoxy + + jsr _gotoy + jsr popax + jsr _gotox + rts + .endproc + +;----------------------------------------------------------------------------- +; Get cursor X position +; + .proc wherex + + lda CURS_X + jsr pusha0 + rts + .endproc + +;----------------------------------------------------------------------------- +; Get cursor Y position +; + .proc wherey + + lda CURS_Y + jsr pusha0 + rts + .endproc + +;----------------------------------------------------------------------------- +; Initialize cursorzone at startup +; Offset to cursor zone 5. +; +; .segment "ONCE" +init_cursor: + lda #0 + jsr calccursorzone + rts + +;----------------------------------------------------------------------------- +; force the init constructor to be imported + + .import initconio +conio_init = initconio From 37456219eb211d672702ebbd0872f1017dd22dc4 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 4 Apr 2022 10:52:04 +0300 Subject: [PATCH 1172/2710] Add space to config --- cfg/atari7800.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 835d0b18f..72922e52e 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -10,7 +10,7 @@ SYMBOLS { __ENCRYPT_BOTTOM__: value = $ff7a, type = export; __ENCRYPT_SIZE__: value = $80, type = export; __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; - __INIT_SIZE__: value = 139, type = export; + __INIT_SIZE__: value = 139+9, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; From c7cb201070140c4f8a33b0cf06128b32d44f0c7c Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 4 Apr 2022 15:17:26 +0300 Subject: [PATCH 1173/2710] Remove export --- libsrc/atari7800/conio.s | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index 5852c1103..777de004b 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -13,7 +13,6 @@ .export _screen .export _zones .export _dll - .export _initconio .bss _screen: @@ -184,8 +183,11 @@ CTRL_CHAR2B .set $10 CTRL_DMAON .set $40 CTRL_CKOFF .set 0 -_initconio: -initconio: +;----------------------------------------------------------------------------- +; Initialize the conio display lists and zones +; + .proc initconio + jsr _get_tv bne pal lda #<Topscanlines @@ -217,3 +219,5 @@ vblankoff: sta P0C3 rts + .endproc + From 43a1c2478497155fe4249cd44e521770bfac5bf7 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 4 Apr 2022 15:18:13 +0300 Subject: [PATCH 1174/2710] Add setcursor method --- libsrc/atari7800/setcursor.s | 42 ++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 9f8765656..37ead5ca6 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -23,9 +23,9 @@ ; definitely not allow direct access to the variables. ; - .export _cursor_visible - .export _cursorzone + .export _setcursor .export _gotoxy, _gotox, _gotoy, wherex, wherey + .export CURS_X, CURS_Y .constructor init_cursor .importzp ptr1, sp @@ -36,6 +36,10 @@ .macpack generic .data +;----------------------------------------------------------------------------- +; The variables used by cursor functions +; + CURS_X: .byte 0 CURS_Y: @@ -49,6 +53,18 @@ _cursorzone: .code +;----------------------------------------------------------------------------- +; Enable/disable cursor +; + .proc _setcursor + + ldx _cursor_visible + sta _cursor_visible + txa + rts + + .endproc + ;----------------------------------------------------------------------------- ; Calculate cursorzone address ; You also need to set the cursorzone to point to the correct cursor Header @@ -56,7 +72,8 @@ _cursorzone: ; Offset to cursor zone 5. To next line offset 11 ; cursorzone points to _zones + CURS_Y * 11 + 5 ; A = CURS_Y -calccursorzone: + .proc calccursorzone + jsr pusha0 lda #11 jsr tosumula0 @@ -71,6 +88,8 @@ calccursorzone: sta ptr1+1 rts + .endproc + ;----------------------------------------------------------------------------- ; Set cursor to Y position. ; You also need to set the cursorzone to point to the correct cursor Header @@ -86,7 +105,9 @@ calccursorzone: ; Enable cursor ; if showcursor cursorzone[1] = 30 ; -_gotoy: pha + .proc _gotoy + + pha lda CURS_Y jsr calccursorzone ldy #1 @@ -96,18 +117,23 @@ _gotoy: pha sta CURS_Y jsr calccursorzone lda _cursor_visible - beq L2 + beq @L1 lda #30 ; enable cursor -L2: ldy #1 +@L1: ldy #1 sta (ptr1),y rts + .endproc + ;----------------------------------------------------------------------------- ; Set cursor to X position. ; You also need to set the hpos offset to the correct value on this line ; cursorzone[3] = 8 * CURS_X ; -_gotox: tay + .proc _gotox + + sta CURS_X + tay lda _cursorzone ldx _cursorzone+1 sta ptr1 @@ -121,6 +147,8 @@ _gotox: tay sta (ptr1),y rts + .endproc + ;----------------------------------------------------------------------------- ; Set cursor to desired position (X,Y) ; From 90fc16ff1c811ab7b0e6193195d6d8fc35eea1c3 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 4 Apr 2022 15:18:40 +0300 Subject: [PATCH 1175/2710] Add cputc method --- libsrc/atari7800/cputc.s | 144 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 libsrc/atari7800/cputc.s diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s new file mode 100644 index 000000000..5f4346868 --- /dev/null +++ b/libsrc/atari7800/cputc.s @@ -0,0 +1,144 @@ +; +; Mark Keates, Christian Groessler, Piotr Fusik, Karri Kaksonen +; +; void cputcxy (unsigned char x, unsigned char y, char c); +; void cputc (char c); +; + + .export _cputc + .export _textcolor + .import _gotoxy, _gotox, _gotoy, tosaddax, tosumula0, pusha0 + .import pushax + .import _screen + .importzp ptr1 + .import CURS_X, CURS_Y + + .include "atari7800.inc" + + .data +;----------------------------------------------------------------------------- +; Holder of the text colour offset +; 0 = red, 42 = green, 82 = white +; +txtcolor: + .byte 0 + + .code + +;----------------------------------------------------------------------------- +; Change the text colour +; +; Logical colour names are +; 0 = red +; 1 = green +; 2 = white +; +; The routine will also return the previous textcolor +; + .proc _textcolor + + beq @L2 + sec + sbc #1 + beq @L1 + lda #82 + jmp @L2 +@L1: lda #42 +@L2: ldy txtcolor + sta txtcolor + tya + bne @L3 + rts +@L3: sec + sbc #42 + bne @L4 + lda #1 + rts +@L4: lda #2 + rts + .endproc + +;----------------------------------------------------------------------------- +; Put a character on screen +; +; The code will handle newlines that wrap to start of screen +; + .proc _cputc + + cmp #$0A ; LF + beq @L3 + cmp #$20 ; ' ' + beq @L1 + + jsr @L5 +@L1: + lda CURS_X + cmp #(charsperline-1) + bne @L2 + jmp @L3 +@L2: + clc + adc #1 + jmp _gotox + +@L3: + lda #0 + jsr _gotox + lda CURS_Y + cmp #(screenrows-1) + bne @L4 + lda #0 + jmp _gotoy +@L4: + clc + adc #1 + jmp _gotoy + +@L5: + cmp #$3F ; '?' + bne @L6 + lda #$01 + jmp @L10 +@L6: + cmp #$7C ; '|' + bne @L7 + lda #$05 + jmp @L10 +@L7: + cmp #$41 ; >= 'A' + bcc @L8 + and #$5F + sec + sbc #($41 - 16) + jmp @L10 +@L8: + sec + sbc #($2A) +@L10: + sec + adc txtcolor + asl + pha + + lda CURS_Y + jsr pusha0 + lda #charsperline + jsr tosumula0 + clc + adc CURS_X + bcc @L11 + inx +@L11: jsr pushax + lda #<(_screen) + ldx #>(_screen) + jsr tosaddax + sta ptr1 + stx ptr1+1 + + pla + ldy #0 + sta (ptr1),y + rts + + .endproc + From 6b16b9919254f857c60f0f199deb307ea729db12 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 5 Apr 2022 10:35:59 +0300 Subject: [PATCH 1176/2710] Fix conflicts with some conio routines --- include/atari7800.h | 2 ++ libsrc/atari7800/cputc.s | 8 ++++---- libsrc/atari7800/setcursor.s | 21 ++++++++++++--------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/include/atari7800.h b/include/atari7800.h index 4fdaacfcc..3cbeedb8b 100644 --- a/include/atari7800.h +++ b/include/atari7800.h @@ -52,6 +52,8 @@ /* No support for dynamically loadable drivers */ #define DYN_DRV 0 +extern unsigned char get_tv(void); /* get TV system */ + #include <_tia.h> #define TIA (*(struct __tia*)0x0000) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 5f4346868..3cf8e9de1 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -10,7 +10,7 @@ .import _gotoxy, _gotox, _gotoy, tosaddax, tosumula0, pusha0 .import pushax .import _screen - .importzp ptr1 + .importzp ptr3 .import CURS_X, CURS_Y .include "atari7800.inc" @@ -132,12 +132,12 @@ txtcolor: lda #<(_screen) ldx #>(_screen) jsr tosaddax - sta ptr1 - stx ptr1+1 + sta ptr3 + stx ptr3+1 pla ldy #0 - sta (ptr1),y + sta (ptr3),y rts .endproc diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 37ead5ca6..b283fdff0 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -24,11 +24,11 @@ ; .export _setcursor - .export _gotoxy, _gotox, _gotoy, wherex, wherey + .export gotoxy, _gotoxy, _gotox, _gotoy, wherex, wherey .export CURS_X, CURS_Y .constructor init_cursor - .importzp ptr1, sp + .importzp ptr3, sp .import _zones .import pusha, incsp1, pusha0, pushax, popax, tosumula0, incax5 .include "atari7800.inc" @@ -81,11 +81,11 @@ _cursorzone: clc adc #<_zones sta _cursorzone ; calculate new cursorzone - sta ptr1 + sta ptr3 txa adc #>_zones sta _cursorzone+1 - sta ptr1+1 + sta ptr3+1 rts .endproc @@ -112,7 +112,7 @@ _cursorzone: jsr calccursorzone ldy #1 lda #0 - sta (ptr1),y ; disable cursor + sta (ptr3),y ; disable cursor pla sta CURS_Y jsr calccursorzone @@ -120,7 +120,7 @@ _cursorzone: beq @L1 lda #30 ; enable cursor @L1: ldy #1 - sta (ptr1),y + sta (ptr3),y rts .endproc @@ -136,15 +136,15 @@ _cursorzone: tay lda _cursorzone ldx _cursorzone+1 - sta ptr1 - stx ptr1+1 + sta ptr3 + stx ptr3+1 tya ldy #3 clc rol rol rol - sta (ptr1),y + sta (ptr3),y rts .endproc @@ -160,6 +160,9 @@ _cursorzone: rts .endproc + .proc gotoxy + jmp _gotoxy + .endproc ;----------------------------------------------------------------------------- ; Get cursor X position ; From 97fd42063b1dd0aea71fd5416061c92b64d1a95d Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 5 Apr 2022 10:42:58 +0300 Subject: [PATCH 1177/2710] Align font to 256 bytes --- libsrc/atari7800/buildfont160.py | 1 + libsrc/atari7800/font160.s | 1 + 2 files changed, 2 insertions(+) diff --git a/libsrc/atari7800/buildfont160.py b/libsrc/atari7800/buildfont160.py index bb944e335..30ee02695 100644 --- a/libsrc/atari7800/buildfont160.py +++ b/libsrc/atari7800/buildfont160.py @@ -25,6 +25,7 @@ fname= fname + '.s' with open(fname, 'w') as f: f.write(" .export _font160\n") f.write(' .rodata\n') + f.write(' .align 256\n') f.write("_font160:\n") for i in range(0, int(len(data)/32)): printline(f, data[i * 32:i * 32 + 32]) diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s index e9c2e46d8..e5ebbede2 100644 --- a/libsrc/atari7800/font160.s +++ b/libsrc/atari7800/font160.s @@ -1,5 +1,6 @@ .export _font160 .rodata + .align 256 _font160: .byte $0, $0, $41, $41, $0, $0, $14, $0 .byte $0, $0, $0, $0, $1, $40, $0, $0 From d5dcea65b77c5f3598bf07d86a420afe431a5d4c Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 5 Apr 2022 11:13:18 +0300 Subject: [PATCH 1178/2710] Allocate own zp pointer for conio implementation --- libsrc/atari7800/extzp.inc | 11 +++++++++++ libsrc/atari7800/extzp.s | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 libsrc/atari7800/extzp.inc create mode 100644 libsrc/atari7800/extzp.s diff --git a/libsrc/atari7800/extzp.inc b/libsrc/atari7800/extzp.inc new file mode 100644 index 000000000..7b24ce0d9 --- /dev/null +++ b/libsrc/atari7800/extzp.inc @@ -0,0 +1,11 @@ +; +; extzp.inc for the Atari 7800 +; +; Karri Kaksonen, 2022-04-05 +; +; Assembler include file that imports the runtime zero page locations used +; by the atari7800 runtime, ready for usage in asm code. +; + + .global ptr7800: zp + diff --git a/libsrc/atari7800/extzp.s b/libsrc/atari7800/extzp.s new file mode 100644 index 000000000..384731941 --- /dev/null +++ b/libsrc/atari7800/extzp.s @@ -0,0 +1,11 @@ +; +; Karri Kaksonen, 2022-04-05 +; +; zeropage locations for exclusive use by the library +; + + .include "extzp.inc" + + .segment "EXTZP" : zeropage + +ptr7800: .res 2 From 9caf7cefd8327082ed1eda1c1421b040e0e278ee Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 5 Apr 2022 11:13:38 +0300 Subject: [PATCH 1179/2710] Allocate own zp pointer for conio implementation --- cfg/atari7800.cfg | 1 + libsrc/atari7800/cputc.s | 8 ++++---- libsrc/atari7800/setcursor.s | 17 +++++++++-------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 72922e52e..04216f3bd 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -39,6 +39,7 @@ MEMORY { SEGMENTS { ZEROPAGE: load = ZP, type = zp; + EXTZP: load = ZP, type = zp; EXEHDR: load = HEADER, type = ro, optional = yes; STARTUP: load = ROMS, type = ro, define = yes; ONCE: load = ROMS, type = ro, define = yes; diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 3cf8e9de1..f7614e528 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -10,10 +10,10 @@ .import _gotoxy, _gotox, _gotoy, tosaddax, tosumula0, pusha0 .import pushax .import _screen - .importzp ptr3 .import CURS_X, CURS_Y .include "atari7800.inc" + .include "extzp.inc" .data ;----------------------------------------------------------------------------- @@ -132,12 +132,12 @@ txtcolor: lda #<(_screen) ldx #>(_screen) jsr tosaddax - sta ptr3 - stx ptr3+1 + sta ptr7800 + stx ptr7800+1 pla ldy #0 - sta (ptr3),y + sta (ptr7800),y rts .endproc diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index b283fdff0..4400798c3 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -28,10 +28,11 @@ .export CURS_X, CURS_Y .constructor init_cursor - .importzp ptr3, sp + .importzp sp .import _zones .import pusha, incsp1, pusha0, pushax, popax, tosumula0, incax5 .include "atari7800.inc" + .include "extzp.inc" .macpack generic @@ -81,11 +82,11 @@ _cursorzone: clc adc #<_zones sta _cursorzone ; calculate new cursorzone - sta ptr3 + sta ptr7800 txa adc #>_zones sta _cursorzone+1 - sta ptr3+1 + sta ptr7800+1 rts .endproc @@ -112,7 +113,7 @@ _cursorzone: jsr calccursorzone ldy #1 lda #0 - sta (ptr3),y ; disable cursor + sta (ptr7800),y ; disable cursor pla sta CURS_Y jsr calccursorzone @@ -120,7 +121,7 @@ _cursorzone: beq @L1 lda #30 ; enable cursor @L1: ldy #1 - sta (ptr3),y + sta (ptr7800),y rts .endproc @@ -136,15 +137,15 @@ _cursorzone: tay lda _cursorzone ldx _cursorzone+1 - sta ptr3 - stx ptr3+1 + sta ptr7800 + stx ptr7800+1 tya ldy #3 clc rol rol rol - sta (ptr3),y + sta (ptr7800),y rts .endproc From b6e18e14d54f602538befe077359bead3d324957 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Wed, 6 Apr 2022 13:27:47 +0300 Subject: [PATCH 1180/2710] Add local multiply routine --- libsrc/atari7800/cputc.s | 128 ++++++++++++++++++++++--------------- libsrc/atari7800/extzp.inc | 2 + libsrc/atari7800/extzp.s | 2 + 3 files changed, 82 insertions(+), 50 deletions(-) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index f7614e528..18904adfb 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -7,7 +7,7 @@ .export _cputc .export _textcolor - .import _gotoxy, _gotox, _gotoy, tosaddax, tosumula0, pusha0 + .import _gotoxy, _gotox, _gotoy, tosaddax, pusha0 .import pushax .import _screen .import CURS_X, CURS_Y @@ -18,13 +18,39 @@ .data ;----------------------------------------------------------------------------- ; Holder of the text colour offset -; 0 = red, 42 = green, 82 = white +; 0 = red, 42 = green, 84 = white ; txtcolor: .byte 0 .code +;--------------------------------------------------------------------------- +; 8x16 routine + +umula0: + ldy #8 ; Number of bits + lda #0 + lsr ptr7800 ; Get first bit into carry +@L0: bcc @L1 + + clc + adc ptrtmp + tax + lda ptrtmp+1 ; hi byte of left op + adc ptr7800+1 + sta ptr7800+1 + txa + +@L1: ror ptr7800+1 + ror a + ror ptr7800 + dey + bne @L0 + tax + lda ptr7800 ; Load the result + rts + ;----------------------------------------------------------------------------- ; Change the text colour ; @@ -41,21 +67,21 @@ txtcolor: sec sbc #1 beq @L1 - lda #82 + lda #84 jmp @L2 @L1: lda #42 @L2: ldy txtcolor - sta txtcolor + sta txtcolor ; Store new textcolor tya bne @L3 - rts + rts ; Old colour was 0 @L3: sec sbc #42 bne @L4 lda #1 - rts + rts ; Old colour was 1 @L4: lda #2 - rts + rts ; Old colour was 2 .endproc ;----------------------------------------------------------------------------- @@ -66,79 +92,81 @@ txtcolor: .proc _cputc cmp #$0A ; LF - beq @L3 - cmp #$20 ; ' ' - beq @L1 - - jsr @L5 -@L1: - lda CURS_X - cmp #(charsperline-1) - bne @L2 - jmp @L3 -@L2: - clc - adc #1 - jmp _gotox - -@L3: - lda #0 + bne @L4 +@L1: lda #0 ; newline jsr _gotox lda CURS_Y cmp #(screenrows-1) - bne @L4 + bne @L2 lda #0 - jmp _gotoy -@L4: - clc + beq @L3 +@L2: clc adc #1 - jmp _gotoy +@L3: jmp _gotoy +@L4: + cmp #$20 ; ' ' + bne @L5 + lda #$00 + jmp @L10 @L5: cmp #$3F ; '?' bne @L6 - lda #$01 - jmp @L10 + lda #$02 + jmp @L9 @L6: cmp #$7C ; '|' bne @L7 - lda #$05 - jmp @L10 + lda #$06 + jmp @L9 @L7: cmp #$41 ; >= 'A' bcc @L8 - and #$5F + and #$5F ; make upper case sec - sbc #($41 - 16) - jmp @L10 + sbc #($41 - 17) + jmp @L9 @L8: - sec - sbc #($2A) -@L10: - sec + sec ; >= '*' + sbc #($2A - 1) +@L9: + clc adc txtcolor +@L10: asl pha - lda CURS_Y - jsr pusha0 + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + lda CURS_Y ; Find position on screen buffer + sta ptr7800 lda #charsperline - jsr tosumula0 + sta ptrtmp + jsr umula0 clc adc CURS_X bcc @L11 inx -@L11: jsr pushax - lda #<(_screen) - ldx #>(_screen) - jsr tosaddax +@L11: adc #<(_screen) sta ptr7800 - stx ptr7800+1 + bcc @L12 + inx +@L12: clc + txa + adc #>(_screen) + sta ptr7800+1 - pla + pla ; Print character on screen ldy #0 sta (ptr7800),y - rts + + lda CURS_X ; Increment cursor + cmp #(charsperline-1) + beq @L1 + clc + adc #1 + jmp _gotox .endproc diff --git a/libsrc/atari7800/extzp.inc b/libsrc/atari7800/extzp.inc index 7b24ce0d9..ac1dd7e41 100644 --- a/libsrc/atari7800/extzp.inc +++ b/libsrc/atari7800/extzp.inc @@ -8,4 +8,6 @@ ; .global ptr7800: zp + .global ptrtmp: zp + .global cursorzone: zp diff --git a/libsrc/atari7800/extzp.s b/libsrc/atari7800/extzp.s index 384731941..376674268 100644 --- a/libsrc/atari7800/extzp.s +++ b/libsrc/atari7800/extzp.s @@ -9,3 +9,5 @@ .segment "EXTZP" : zeropage ptr7800: .res 2 +ptrtmp: .res 2 +cursorzone: .res 2 From 3f8c29d303ebf2b59b26759cdf3b883fe94713a8 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Wed, 6 Apr 2022 14:08:03 +0300 Subject: [PATCH 1181/2710] Use local multiply for cursorzone calculations --- libsrc/atari7800/cputc.s | 2 +- libsrc/atari7800/setcursor.s | 68 ++++++++++++++++++++++++------------ 2 files changed, 46 insertions(+), 24 deletions(-) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 18904adfb..773227c8a 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -7,7 +7,7 @@ .export _cputc .export _textcolor - .import _gotoxy, _gotox, _gotoy, tosaddax, pusha0 + .import _gotoxy, _gotox, _gotoy, pusha0 .import pushax .import _screen .import CURS_X, CURS_Y diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 4400798c3..dda92f060 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -30,7 +30,7 @@ .importzp sp .import _zones - .import pusha, incsp1, pusha0, pushax, popax, tosumula0, incax5 + .import pusha, incsp1, pusha0, pushax, popax .include "atari7800.inc" .include "extzp.inc" @@ -48,12 +48,34 @@ CURS_Y: _cursor_visible: .byte 1 - .bss -_cursorzone: - .res 2 - .code +;--------------------------------------------------------------------------- +; 8x16 routine + +umula0: + ldy #8 ; Number of bits + lda #0 + lsr ptr7800 ; Get first bit into carry +@L0: bcc @L1 + + clc + adc ptrtmp + tax + lda ptrtmp+1 ; hi byte of left op + adc ptr7800+1 + sta ptr7800+1 + txa + +@L1: ror ptr7800+1 + ror a + ror ptr7800 + dey + bne @L0 + tax + lda ptr7800 ; Load the result + rts + ;----------------------------------------------------------------------------- ; Enable/disable cursor ; @@ -75,18 +97,23 @@ _cursorzone: ; A = CURS_Y .proc calccursorzone - jsr pusha0 - lda #11 - jsr tosumula0 - jsr incax5 - clc - adc #<_zones - sta _cursorzone ; calculate new cursorzone sta ptr7800 + lda #11 + sta ptrtmp + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + jsr umula0 + clc + adc #5 + bcc @L1 + inx +@L1: clc + adc #<_zones + sta cursorzone ; calculate new cursorzone txa adc #>_zones - sta _cursorzone+1 - sta ptr7800+1 + sta cursorzone+1 rts .endproc @@ -113,7 +140,7 @@ _cursorzone: jsr calccursorzone ldy #1 lda #0 - sta (ptr7800),y ; disable cursor + sta (cursorzone),y ; disable cursor pla sta CURS_Y jsr calccursorzone @@ -121,7 +148,7 @@ _cursorzone: beq @L1 lda #30 ; enable cursor @L1: ldy #1 - sta (ptr7800),y + sta (cursorzone),y rts .endproc @@ -134,18 +161,12 @@ _cursorzone: .proc _gotox sta CURS_X - tay - lda _cursorzone - ldx _cursorzone+1 - sta ptr7800 - stx ptr7800+1 - tya ldy #3 clc rol rol rol - sta (ptr7800),y + sta (cursorzone),y rts .endproc @@ -162,6 +183,7 @@ _cursorzone: .endproc .proc gotoxy + jsr popax jmp _gotoxy .endproc ;----------------------------------------------------------------------------- From 6b5c858b2069345532f64f3214721429ac91b2d9 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 7 Apr 2022 07:22:19 +0300 Subject: [PATCH 1182/2710] Cleanup --- libsrc/atari7800/clrscr.s | 23 ++++++++++++++++++----- libsrc/atari7800/cputc.s | 4 ++-- libsrc/atari7800/setcursor.s | 8 +++----- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s index 4d3873499..36af7cce2 100644 --- a/libsrc/atari7800/clrscr.s +++ b/libsrc/atari7800/clrscr.s @@ -4,7 +4,8 @@ .export _clrscr .import _screen - .import pusha0,pushax, __bzero + .import pusha0,pushax + .include "extzp.inc" .code @@ -12,10 +13,22 @@ lda #<(_screen) ldx #>(_screen) - jsr pushax - ldx #>(charsperline * screenrows) - lda #<(charsperline * screenrows) - jmp __bzero + sta ptr7800 + stx ptr7800+1 + ldx #screenrows +@L1: ldy #charsperline + lda #0 +@L2: sta (ptr7800),y + dey + bne @L2 + lda ptr7800 + clc + adc #charsperline + bcc @L3 + inc ptr7800+1 +@L3: dex + bne @L1 + rts .endproc diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 773227c8a..d954921ff 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -152,8 +152,8 @@ umula0: sta ptr7800 bcc @L12 inx -@L12: clc - txa +@L12: txa + clc adc #>(_screen) sta ptr7800+1 diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index dda92f060..81a89144b 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -24,7 +24,7 @@ ; .export _setcursor - .export gotoxy, _gotoxy, _gotox, _gotoy, wherex, wherey + .export gotoxy, _gotoxy, _gotox, _gotoy, _wherex, _wherey .export CURS_X, CURS_Y .constructor init_cursor @@ -189,20 +189,18 @@ umula0: ;----------------------------------------------------------------------------- ; Get cursor X position ; - .proc wherex + .proc _wherex lda CURS_X - jsr pusha0 rts .endproc ;----------------------------------------------------------------------------- ; Get cursor Y position ; - .proc wherey + .proc _wherey lda CURS_Y - jsr pusha0 rts .endproc From 2fb0f6b47d33ca5f5a659a4928041b988a0ce292 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 7 Apr 2022 07:46:28 +0300 Subject: [PATCH 1183/2710] Fix screen index bug --- libsrc/atari7800/cputc.s | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index d954921ff..8aeb8b9c4 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -38,6 +38,7 @@ umula0: adc ptrtmp tax lda ptrtmp+1 ; hi byte of left op + clc adc ptr7800+1 sta ptr7800+1 txa @@ -148,7 +149,8 @@ umula0: adc CURS_X bcc @L11 inx -@L11: adc #<(_screen) +@L11: clc + adc #<(_screen) sta ptr7800 bcc @L12 inx From 7ba7c6f69ac854177f52ab261a1325206b0caf95 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 7 Apr 2022 08:17:36 +0300 Subject: [PATCH 1184/2710] Add blinking cursor --- cfg/atari7800.cfg | 2 +- libsrc/atari7800/setcursor.s | 24 +++++++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 04216f3bd..160d1e58e 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -10,7 +10,7 @@ SYMBOLS { __ENCRYPT_BOTTOM__: value = $ff7a, type = export; __ENCRYPT_SIZE__: value = $80, type = export; __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; - __INIT_SIZE__: value = 139+9, type = export; + __INIT_SIZE__: value = 154, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 81a89144b..0b49fe097 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -27,6 +27,7 @@ .export gotoxy, _gotoxy, _gotox, _gotoy, _wherex, _wherey .export CURS_X, CURS_Y .constructor init_cursor + .interruptor blink_cursor .importzp sp .import _zones @@ -47,6 +48,8 @@ CURS_Y: .byte 0 _cursor_visible: .byte 1 +blink_time: + .byte 140 .code @@ -208,7 +211,26 @@ umula0: ; Initialize cursorzone at startup ; Offset to cursor zone 5. ; -; .segment "ONCE" + .proc blink_cursor + inc blink_time + bne @L3 + lda #140 + sta blink_time + ldy #0 + lda (cursorzone),y + bne @L1 + lda #254 + bne @L2 +@L1: lda #0 +@L2: sta (cursorzone),y +@L3: rts + .endproc + +;----------------------------------------------------------------------------- +; Initialize cursorzone at startup +; Offset to cursor zone 5. +; + .segment "ONCE" init_cursor: lda #0 jsr calccursorzone From a05f5137793889dbb4c35e31e996f4ec608dbbf0 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 9 Apr 2022 07:37:07 +0300 Subject: [PATCH 1185/2710] Remove duplicate code --- libsrc/atari7800/setcursor.s | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 0b49fe097..69cd5f126 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -23,7 +23,6 @@ ; definitely not allow direct access to the variables. ; - .export _setcursor .export gotoxy, _gotoxy, _gotox, _gotoy, _wherex, _wherey .export CURS_X, CURS_Y .constructor init_cursor @@ -31,6 +30,7 @@ .importzp sp .import _zones + .import cursor .import pusha, incsp1, pusha0, pushax, popax .include "atari7800.inc" .include "extzp.inc" @@ -46,8 +46,6 @@ CURS_X: .byte 0 CURS_Y: .byte 0 -_cursor_visible: - .byte 1 blink_time: .byte 140 @@ -79,18 +77,6 @@ umula0: lda ptr7800 ; Load the result rts -;----------------------------------------------------------------------------- -; Enable/disable cursor -; - .proc _setcursor - - ldx _cursor_visible - sta _cursor_visible - txa - rts - - .endproc - ;----------------------------------------------------------------------------- ; Calculate cursorzone address ; You also need to set the cursorzone to point to the correct cursor Header @@ -147,7 +133,7 @@ umula0: pla sta CURS_Y jsr calccursorzone - lda _cursor_visible + lda cursor beq @L1 lda #30 ; enable cursor @L1: ldy #1 From d287a0afa101ca21e44a200b565725d8710c7b34 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sun, 10 Apr 2022 14:43:18 +0300 Subject: [PATCH 1186/2710] Change order of gotox gotoy for correct x after newline --- libsrc/atari7800/cputc.s | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 8aeb8b9c4..e1af2765c 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -94,16 +94,16 @@ umula0: cmp #$0A ; LF bne @L4 -@L1: lda #0 ; newline - jsr _gotox - lda CURS_Y +@L1: lda CURS_Y ; newline cmp #(screenrows-1) bne @L2 lda #0 beq @L3 @L2: clc adc #1 -@L3: jmp _gotoy +@L3: jsr _gotoy + lda #0 + jmp _gotox @L4: cmp #$20 ; ' ' From 18e27d61625a545f5d0ac6dac4a8470f15257809 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sun, 10 Apr 2022 19:35:29 +0300 Subject: [PATCH 1187/2710] Change attributes on gotoxy --- libsrc/atari7800/setcursor.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 69cd5f126..34c7562ab 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -31,7 +31,7 @@ .importzp sp .import _zones .import cursor - .import pusha, incsp1, pusha0, pushax, popax + .import pusha, incsp1, pusha0, pushax, popa .include "atari7800.inc" .include "extzp.inc" @@ -166,13 +166,13 @@ umula0: .proc _gotoxy jsr _gotoy - jsr popax + jsr popa jsr _gotox rts .endproc .proc gotoxy - jsr popax + jsr popa jmp _gotoxy .endproc ;----------------------------------------------------------------------------- From 5c648d545d16619c8a40e057716dfb534104ed24 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 14 Apr 2022 21:52:57 +0300 Subject: [PATCH 1188/2710] Import conio automatically --- libsrc/atari7800/cputc.s | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index e1af2765c..607940332 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -172,3 +172,8 @@ umula0: .endproc +;------------------------------------------------------------------------------- +; force the init constructor to be imported + + .import initconio +conio_init = initconio From f74ce463b2cda253568b48ea6f23c5469984652b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 15:24:41 +0200 Subject: [PATCH 1189/2710] add gitignores --- util/.gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 util/.gitignore diff --git a/util/.gitignore b/util/.gitignore new file mode 100644 index 000000000..4da436acb --- /dev/null +++ b/util/.gitignore @@ -0,0 +1,3 @@ +/atari/ataricvt +/gamate/gamate-fixcart +/zlib/deflater From e385ec1b5ed4c32b97111ca74e072a67ba838263 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 16:17:50 +0200 Subject: [PATCH 1190/2710] Create Contributing.md Starting to move info hidden elsewhere into this file --- Contributing.md | 89 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 Contributing.md diff --git a/Contributing.md b/Contributing.md new file mode 100644 index 000000000..1aeae7786 --- /dev/null +++ b/Contributing.md @@ -0,0 +1,89 @@ +This document contains all kinds of information that you should know if you want to contribute to the cc65 project. Before you start, please read all of it. If something is not clear to you, please ask - this document is an ongoing effort and may well be incomplete. + +(''Note:'' The word "must" indicates a requirement. The word "should" indicates a recomendation.) + +# generally + +* You must obey these rules when contributing new code or documentation to cc65. We are well aware that not all existing code may respect all rules outlined here - but this is no reason for you not to respect them. +* One commit/patch/PR per issue. Do not mix several things unless they are very closely related. + +# Codestyle rules + +## All Sources + +* TAB characters must be expanded to spaces. +* All text files must end with new-line characters. Don't leave the last line "dangling". +* 80 characters is the desired maximum width of files. But, it isn't a "strong" rule; sometimes, you will want to type longer lines, in order to keep the parts of expressions or comments together on the same line. +* You should avoid typing non-ASCII characters. +* If you change "normal" source code into comments, then you must add a comment about why that code is a comment. +* When you want to create a comment from several lines of code, you should use preprocessor lines, instead of ```/* */``` or "```;```". Example: +<pre> +#if 0 + one (); + two (); + three = two () + one (); +#endif +</pre> +* You should type upper case characters for hex values. +* When you type zero-page addresses in hexadecimal, you should type two hex characters (after the hex prefix). When you type non-zero-page addresses in hex, you should type four hex characters. +* When you type lists of addresses, it is a good idea to sort them in ascending numerical order. That makes it easier for readers to build mental pictures of where things are in an address space. And, it is easier to see how big the variables and buffers are. Example: +<pre> +xCoord := $0703 +yCoord := $0705 ; (this address implies that xCoord is 16 bits) +cmdbuf := $0706 ; (this address implies that yCoord is 8 bits) +cmdlen := $0786 ; (this address implies that cmdbuf is 128 bytes) +color := $0787 +</pre> + +## C Sources + +* Your files should obey the C89 standard. +* All declarations in a block must be at the beginning of that block. +* You should put a blank line between a list of local variable declarations and the first line of code. +* You must use ANSI C comments (```/* */```); you must not use C++ comments (```//```). +* The normal indentation width should be four spaces. +* When a function's argument list wraps around to a next line, you should indent that next line by either the normal width or enough spaces to align it with the arguments on the previous line. +* When you add functions to an existing file, you should separate them by the same number of blank lines that separate the functions that already are in that file. + +(The next two rules will be changed at some time in the future; but, for now:) + +* You must separate function names and parameter/argument lists by one space. +* When declaring/defining pointers, you must put the asterisk (```*```) next to the data type, with a space between it and the variable's name. Examples: +<pre> + int* namedPtr[5]; + char* nextLine (FILE* f); +</pre> + +## Assembly Sources + +* Op-code mnemonics must have lower-case letters. The names of instruction macroes may have upper-case letters. +* Hexadecimal number constants should be used except where decimal or binary numbers make much more sense in that constant's context. +* Hexadecimal letters should be upper-case. +* When you set two registers or two memory locations to an immediate 16-bit zero, you should use the expressions ```#<$0000``` and ```#>$0000``` (they make it obvious where you are putting the lower and upper bytes). +* If a function is declared to return a char-sized value, it actually must return an integer-sized value. (When cc65 promotes a returned value, it sometimes assumes that the value already is an integer.) +* Functions, that are intended for a platform's system library, should be optimized as much as possible. +* Sometimes, there must be a trade-off between size and speed. If you think that a library function won't be used often, then you should make it small. Otherwise, you should make it fast. +* Comments that are put on the right side of instructions must be aligned (start in the same character columns). +* Assembly source fields (label, operation, operand, comment) should start ''after'' character columns that are multiples of eight (such as 1, 9, 17, 33, and 41). + +## LinuxDoc Sources + +* TAB characters must be expanded to spaces. +* All text files must end with new-line characters. Don't leave the last line "dangling". +* 80 characters is the desired maximum width of files. +* You should avoid typing non-ASCII characters. + +* You should put blank lines between LinuxDoc sections: + * Three blank lines between ```<sect>``` sections. + * Two blank lines between ```<sect1>``` sections. + * One blank line between other sections. + +# Documentation rules + +## User manual (LinuxDoc) + +* This is the primary documentation. + +## Wiki + +* The Wiki is strictly for additional information that does not fit into the regular user manual (LinuxDoc). The wiki must not duplicate any information that is present in the user manual From 72e548fa84af596ecc268f658d5f5152ecc38b7c Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 16:20:48 +0200 Subject: [PATCH 1191/2710] Update README.md link Contributing.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 009fca78b..fa23b1be2 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,9 @@ [Documentation](https://cc65.github.io/doc) -[Wiki](https://github.com/cc65/wiki/wiki) +[Contributing](Contributing.md) to the CC65 project. + +The [Wiki](https://github.com/cc65/wiki/wiki) contains extra info that does not fit into the regular documentation. [![Snapshot Build](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml/badge.svg?branch=master)](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml) From 3dd9ed0414a3fcfc695a70dad14f6f0499dfcb3b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 17:36:25 +0200 Subject: [PATCH 1192/2710] remove literal TABs --- doc/using-make.sgml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/using-make.sgml b/doc/using-make.sgml index e324b7484..9898e9626 100644 --- a/doc/using-make.sgml +++ b/doc/using-make.sgml @@ -76,13 +76,13 @@ ifneq ($(MAKECMDGOALS),clean) endif %.o: %.c - $(CC) -c $(CFLAGS) -o $@ $< + $(CC) -c $(CFLAGS) -o $@ $< $(PROGRAM): $(SOURCES:.c=.o) - $(CC) $(LDFLAGS) -o $@ $^ + $(CC) $(LDFLAGS) -o $@ $^ clean: - $(RM) $(SOURCES:.c=.o) $(SOURCES:.c=.d) $(PROGRAM) $(PROGRAM).map + $(RM) $(SOURCES:.c=.o) $(SOURCES:.c=.d) $(PROGRAM) $(PROGRAM).map </verb></tscreen> <bf/Important:/ When using the sample Makefile above via copy & paste it is From 81e804ed7f27a8aa23a5db55b0ed1a6eda37360b Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 19:15:06 +0300 Subject: [PATCH 1193/2710] Split files --- libsrc/atari7800/buildfont160.py | 31 ---------------------------- libsrc/atari7800/font160.png | Bin 2973 -> 0 bytes libsrc/atari7800/font160flipped.png | Bin 2956 -> 0 bytes libsrc/atari7800/wherex.s | 18 ++++++++++++++++ libsrc/atari7800/wherey.s | 19 +++++++++++++++++ 5 files changed, 37 insertions(+), 31 deletions(-) delete mode 100644 libsrc/atari7800/buildfont160.py delete mode 100644 libsrc/atari7800/font160.png delete mode 100644 libsrc/atari7800/font160flipped.png create mode 100644 libsrc/atari7800/wherex.s create mode 100644 libsrc/atari7800/wherey.s diff --git a/libsrc/atari7800/buildfont160.py b/libsrc/atari7800/buildfont160.py deleted file mode 100644 index 30ee02695..000000000 --- a/libsrc/atari7800/buildfont160.py +++ /dev/null @@ -1,31 +0,0 @@ -blen = 0 - -def gb(val): - b = val[0] << 6 - b = b + (val[1] << 4) - b = b + (val[2] << 2) - b = b + val[3] - return '$' + hex(b)[2:4] - -def printline(f, val): - f.write(" .byte " + - gb(val[0:4]) + ', ' + - gb(val[4:8]) + ', ' + - gb(val[8:12]) + ', ' + - gb(val[12:16]) + ', ' + - gb(val[16:20]) + ', ' + - gb(val[20:24]) + ', ' + - gb(val[24:28]) + ', ' + - gb(val[28:32]) + '\n') - -fname='font160' -with open(fname + '.data', 'rb') as f: - data = f.read() -fname= fname + '.s' -with open(fname, 'w') as f: - f.write(" .export _font160\n") - f.write(' .rodata\n') - f.write(' .align 256\n') - f.write("_font160:\n") - for i in range(0, int(len(data)/32)): - printline(f, data[i * 32:i * 32 + 32]) diff --git a/libsrc/atari7800/font160.png b/libsrc/atari7800/font160.png deleted file mode 100644 index 845d91482459f72af2263f7dba0c4c2844fecef6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2973 zcmYk-c|6qZ769<yEDU3tv70Po$zBvgvd!4n4B0~{X~@2WCX9W5RkrM{)=75RLrEwR zqZlSBubu3&T)p?+&%J+~=RD{6d_U*EbDl)}C4Ck+3Jw4Oi=lyz1pq)#t^flVa&n@4 z+`IvRjuvKV8))Hj8|~}wbAxcp4ILQj>xOm<A>06fkgsGLuluv&%!ePP{GnnXtzHnR z+&`LMlkKazYKy92aD}VQgg1(5T?1OMeKkUF9|FUCD6?E1wC}%=#PyvNUwAd1D)Ym? zYW0a4dAh#juWVk^sFv3Dg%B#CxGnt7H)_Gpo#isk4&MlHn|?U>J>SFiml_g@!Qu6n zL&0Cd)fE@_RYv=&S~LZGq(8cA;C%G<w$$%>OTsg(-(b61W5uRDBizt)-RFJfcHSR& zOAU{B4NGtUzo?t-paZ^Qq1Pom<C?`qd!B2dYU;Bv*@?XR?JYLT4*FxQ1A_D3yM&Ho z(%7l$B3zoSx@*S`Wh2PrW%JK;c~dS!eqjGsRhaxFvp2O<Bfi^eHPOE^)y?uR=`mZ2 zm_O2uj@oWhRk4t5wexci&YBq0{W6YYCW+>AR=U<ajaHs3&>0#KdNm|KSqZr$AS$P2 zBMyCHyseo(KOKHhprE@;N;q3gtk!ZO>O?BC2FxWnp<`ygk)0x^=d>e^#AFS)n8%m` zdZGG-RfyVQWv{*;c0*M&N1vmfE;0fM^1-_2#hlT~_l;6(&dVTum(VxS0a;xf%y@EZ zx){&Bw}!7a_)e`#QrjI~trPUTz(}iH$)<CB=!y*Z;m!G>p;8NDa=jH<-Kye=p$xfU ztgb*r*|P5D=<{+%Q~hkGuw}C6Ds^983CB`7W<t*U!kbS|k4nG{MHIXJ%CNgp;I*(c z^3(TSZ?cWgizzBm)~N<BZhfVBzXqf9EY+yG|3!-z_3nfqh#aevh&rPfW}Ct`CTJaT zF(MihX8XPW^L&X=<s(d4yY`Tj#Fj7p+a?4rr5k__#@9}kacT?*e5g5RV$Nqc)@^DZ z$P0;e<De9?t+b!pF>ZbKH6l^@NbcwGqm^Ulv!v#t(BDz@L1QW%DQylR@`K<Vy7UBt zcz7Y%Th0x&{G}Q^ub2DVlDn)V*L;q?@B>pLF+fQ8is<j2QCZZpDOaKXj2G4B%{P>K z!D0nB8qZWK$<B2b81tljQsUn4to-U>A#F7clGR5A%n52d@zvGrZE}cw(o1hr`WMMV zTf6`g>^Lr&Pc*SCIjfn;u2R=<865$Gg5;u)?aArx&T*p=jT+<P(Y*rhtkGo?T`VMg zfcA~)(_gjP37qK!HEOV<0yFCD%Z^Q!3ak<b#}<3rlgFGJ4YM?8pIk~Pr{Xz%6djY8 zo^8Lx0)se)XjH|#Uz)|A<B_4jBgFoqnQbbWqziO$_-Bj9M_X<Z)nmv?+QkO-WV{{Z z_xUSdo+TBXj+*b(mys1B@H!Dq!}o_WS(BCAx&`TWwNe_+^ia;ZujTWl`8PP=W?W{H z;uoBU>hnZRo6sIf!31m}c4i>_uNib*QtD%`^#s;}?l=ABR>BmM!Ht}|{5TiBOoio# z&$VrGL4-)D767u!^&z{If8w=Nocy?297<A0<cob@-RLtUdPB_H8a*;^`%tty#bXv* z1dMq9C}pd54oX<HFU|%D1zEgn{Ak|h^Y`+So{9a+3@*UJYQ4GNlHujj6J}D+oPEn; zdP8wruv6+3TFuV=nlIObz#JS3>K;YYed#s21_$XlXOXCk3tW0-#l<X->CUVr!eHD> zNc5eaSVE8xMX3}yT9RV;?HU&P`3}`Ka9y$zM=6)|^4!1@$NK_PFK5tm-tQD?HR?@6 zz#7uVccf*@e!`P&o&r(>RI0k|bA!0k?;jx%y%)8*;w}uwR??{kqjR{HQ~l}XTwt~0 zO4$tXM9~!MMss0c0E$Rq3F>~IY_>k7F11NF2(B_ovQM$-AKSGYi4sX(P#)6NEnY}n z@biS!HPAv7GOn>R*q-rv$38#aV}AW?BQOFuU(Xy>*zTP;Sc`JpbQmtb=b|0AX|-5h zc#7DJS&qBU--50JNj%OSu=@FMx>U?lM1eLqer5#@Qq{5PslJ4(fE~5C^h}dBmC>OB zuHTw;MgRa5L(ta78)|F+ch{e6`24%~)D60^{BN#~80kv0E~97CA6=}c@ywK3NovL7 zW$G53{pWcU2?iDp{B)G4XrW{)7>~Q7fCC+F4bt<e&+wD3(ZN-Vo5;o2ewtI%JCkjY z7`<46wKMZj;Dm_;hpSSfH2qa%WTd<+Z}vmC0YeM8V=qOWNNh{qs9c#l;y?75a*Z?- zD|Cw^aQGn1e7@4p-JM~O>62bp@f&!`#IEV@xW1bj@X3wjt~X#3R(L^6mRr?!-r4#* zW=3kJw0u58?z+0QijUuzG-j+>BEm(os!BGX;HUh3+a7kY1Uz1wk83<(r2K)au<7r_ zvq!=dxqHUKHhd}kOr=`UOZ%^nX}24#UHrR@;in@Dd3yJFK~XK(+La5_y=fzApo5Q{ znN!;~r#c5D=C>NS)xq=)q~yhh=S!e$)lS+2;k+7|Jpw!yycVuEodM};#7^f@u6PQS zuwmnxji>-DzVqh28cIuROJi+g#K*e*-=NGq|N1MZfp;fgFf-o7Quibu1AzK5aD05s zn)5;aqz1Vf>+1jsbOHt^1*5NlT>t>E_WTJ@rVQ(;lSf#fp{XwHClt&f4`T*Lu>b%h z&rk<vY0yiydhPLDo|9<kA^Du<n7(Rk)>RVgL>KJ5^CI#<Q@muj3ZcRn5i3mTI!Z#@ zkZu<i&TK-;X=`dqaeRX*34e#&g1z@tu4{N4d^5g4zzdU-HJ2nm;m1q;TiTPfoPSx= z&MmW5)W)f^Qh>TQY5HsM@bg}7b6MVY`1Y3KokGv9r8xp?KxrGSferU@wx04U%^?)D z5zb2S?0BclW-N4SAv;{92cy)F3iW0PaLC4x%My{}!l!F36hFOF_5VR9`xf)#<Ke-z zWk;aG-c=B7loWGWRno~?{TnQdi_~H<i-zFQ#KXgNL}xkW_UbA)go@k%%!kGDn+-R9 z?el34RWMH0KL_|C!QU3YQ?!AqX^m^GObAo60f<gty6*x{w@fb20k%rmS2>RTIslKU zis%pm>pal3u?u6M<p}z$Tmb6au5iubJ@B1LfHji;^+7F=Cf(fOvFz+=#s&h9d><^3 zh-|-A5yx+DhO$L=dPa%nL~x_=raLxmMMREyVXSLd>#Ieue3lm`y*uX(AOnsR{ijVL zs<{L8U1U07nH9;a&rO4Z${(Se0fR^bH0K)d8|TL_+Y17Bav^B5w48(1GvIs#T<1Ci zRS=ou&P@Y@7Rn0$PY3X;{YSI^(K29%KicRJgtWEcrqP3PpV|FSzxL%9`H#-}qvgPp zf3y@h(gNvh$yLerD{W6+YT&8>4f+F{&$)t#<yZ-}hGLD270OG7NGE6vbAm|!Mu-#S zpm>6qR<@n~K?`%AqfZcqrP3_ll@;tJ+<p<w_@30nHz^EPo)mb@5SfK_SCrdfKp5k3 zKuJu(?nC#UE^h(sFeqx=0Z3{Rg?hn0gT<dAK(34)42U`eQgb84c9#q>xQIm*F=07w z#}rdz>^q-gM6j|r2<SdiWX8P^ncNfv7{VCX13<hpX^6V3c&3~bsnfPz;JWeEb33h@ znn$=>s&u9PN=3{U=p0n&Zn`_B!Q!LOnXGKJO+o*DIUTSPIv;TmJsu3l3lKH<eBm+v z@S&-Ael}LvwVbXA_gcoGYaNuyjp5^6SoJbzvG^O}c^ap|56)t36BR*z*0=I~Qod^J z6B^m*yCWBi61|Fy*IL>`+t?pkL``oE1|71k?fT3I4QMr-OfF!kdr9YomUGm<0Q_P~ AuK)l5 diff --git a/libsrc/atari7800/font160flipped.png b/libsrc/atari7800/font160flipped.png deleted file mode 100644 index ae237c74bc660ca30a72977999a37b3b54e2e726..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2956 zcmV;73v={|P)<h;3K|Lk000e1NJLTq00aO4000OA0{{R38gFH8000HtdQ@0+Qek%> zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bvj^#EC{MRXR1alLq<4_xr8|3&Y`MI~5PBH_; zhV9p~Oi@+ElDe$F{@mpc98@Wann!K5UO2RA<HV1+UPrs{bm@J6JM?M&(q7&_Vl)Y! z^7_;B^`u0*eSGlNo%+}I63-isC(zr-Pe3^%Gk(m^Nur%!?W9kjwq8GK3;&#I=ht&Q z9q&}0t3N^SjIP(;<#U5NP@0B;gn0?cb>HKaft-sa@zndy{MMop1rL(;WCB3GOz#8W z&j9@hKE1&H0sV`=2cPrlAwOVQ-&m{PzaaY_{2Ss=1Iv3x{PhKBwV$T*Tzk*hd%b3t zT7hVN6m^45Z(-1}19G`Pt2iB(;kVys!x>jz1C-BeTpj12MhsSVA*D%4o7VjtG?1e5 zV#kwtu-t7S&W#7SB5;J0HoG*L65ws{Dk5m+_gv^6x836n3XD7nU6~M!ZnFR3EdTcM zch0i+I1tedDBoBiFFqnb8i%=aM=uaU`{B)QfZxuC{_B&lAXPAEH_U+v=G9*zy3vQW z<mOq>&+vS_p!j?O03wWSNQMLqT$RLNG?z0w5pWC;l*pV#xq|^R<B23$MJgBP;4?P9 zak~4maplttZvqh}RUF(jNsy&#(2r|CLuq1aX4TxHShK8BwOXy!>oK`>adq?R?%~Zd zBs45)cto_w#!cXX)@t(>t+h-piGdQa68#e`ox61H)@%13z4aWB&(L9`4j(bv$jMVC zY+}~wGiIB)s4O_e(q*eIU$NTC4Xth2x^36(J9gXo&f3H3Pv>v2Mh|OzGj;m;J8Nhy z?r$OJ*ohs^z!)omaX$<|(0n+%f>il1cR0HmqbQ7#q#bU`q{A2})J1HY-nsi=?w5Eg z7Qe(B{}*%RQ1^c@S3up*ynVykJnP)J8GBXX!SoVT-=>tk!5U0w)Hz3mc}+M<$WF>G z6)W$wT-Uug@a>S`FKZ<Cf$#&J+g=qJRVsZ)SD%amPwhNs-%Qb#?v_j1-aa!G7XTd4 zcsFe{T%}b~BO7Z2%FNQ&6?^opv{s@3pA~2L>Z+Min;aHL$ZGpw$Ot>v+|UKl$r19X zw#o!NPCKS{XmHjT1MKeB_!@01KEb#;n`n0jbYot*A|a)Y<gRsLsdislCX6{Q>p?>V zJ>`7YVo4uxm<cp@2IaC2psKG5+%E&M0-6DrLV7%^7Ni>8Axb^V%pBNcYy<qd6FB7r z5Y=cS@Yb^yHTC5auMb~X8PEoYx>-vbu?CO@>M$xAb@k>3>S@{N0}Q%kCNPrMiizUI zq#EKt9anNdFa<c=9F83g>?4mH4Wf$*kde9K;sz<8+C~GSpk1fNineR(jk@_-JBxQY z>8oxmWqUg8(R=5#tu=bJY=Lru59>mmOA_YDh)@UEnb?lFtlDT5lo!OiC#E3-5{6Uk zLvm!@i*BC6H&BM3#3XPOmS>L`DQtvlYJiYi!Q#2jddUD$%pfMLqCQ%vEozv8Oq3zw zHtW2V%@ucb#DP?>5Y#k{Itn0<g~c~zz?pcXJZpnMu$sUM@Gg5#yK;t1%y^6=2L$pP zW5d+IC@Ql!N&zSh)FobkwFRf}5JDorUvj3#unGIRj`N(l^9B)LC-4h;SIdGgK_eD| zqvohdUSY7#$jODF+I5!{MC5(IA-accvlcQ0TcCg|dJM7xJC(ZHbe0LU0)RV4hYC=- zJQ*JW2;_o+^xitHs*t6f?QBmZOAvIUg31bld%&t<p*M;dWJc`*=LDuJ?d+f--Zgry z^HdLG4Lx;@Fqqmn@;O^Sc&kPi`~v_%R5K{wXI}u)v9-aX)!m?Ik@a$ht=LdnN6liI zJo@>dV#5x)SWzJLC<wNP`T>E?-j1x~H3xJ@M}t2TcD}Pa%+9d=g14gd8{jQ_pt9-? z*vEveT(DtYbs7NlqvuOIfx#i$$K^(2yWqP+{;|wG!D9Iv!WbGNJfd#}0004mX+uL$ zNkc;*aB^>EX>4Tx0C=2zkv&MmKpe$i(@I4u4(%Y~kfA!Y;1}YkRVYG*P%E_RU~=gf zG-*guTpR`0f`cE6RR<SmT^(EnLGS~_(aA~CMN0f%QfLwD!Ery{-Fw`<1B6C}X;xqi z&~)2OClg{ew<-o-5rBX&Vi=d1Wz0!Z3SGz7J$!t<i}S4R=l&f1YTjaiPb8jYhG`RT z5KnK~2Iqa^2rJ1d@i}qKqze*1a$WKGjdRgufoDd{OnRO;LM#?LSm|I^GBx5U;;5?W zlrLmGRyl8R)+#mDx+i~OD6g+9bDicel32tNB#2N@Lm3s=h|{W*Vj)fYi7x&j*DsMv zAy*lU91EyIgY5dj|KNAGR$+3&O9~}`o)^dY7y*L2K(p>R-^Y&AJOTXAz?I(iR~x|0 zC+YRJ7Ciz6wt<W5wx;X>mpj1VlOdb3EBR>(g#z$?M&FbJ!nZ)*n%7%vAEysMhPq1K z00)P_XpyqlyS%%%v$ucGwEFu2m78+4TO|O<0000CP)t-s00030002Gz0RR904w%j` z00009a7bBm000ie000ie0hKEb8vp<R2XskIMF-{t0uwM6X0oFH000A<Nkl<ZNXM;} zL2BeW6h&WE#Sl!uzd@dVdL%q*=&8XD^q;Fh-jB&B^eRM+gjXTRw4t{msHwpJUP)Dz z1w_WO{3ML;(YsF~^7<;GgzYfP7qz!H5uHcJ^{c-5@gXwi(J6e@H}@Ugw_lAkcs2mg zn*~=tA8bGOb0g@*Akvs+UhE=`HHI@*E!HTbnt73fv5GOQ62>sH-``tl@y!+h2DjlF z)}tTRVQmGyI7C{vt()JZ_0Dm|>&-jubh~bHbY3%tRl*oX{^y@gI()MOfGO^{rf^DA zm_jG$B_h(rJ?v?hF2%^1H0~*maqPk_r<g{@uu2%iC}j$bkvjmZAObCS6l4ywF^bKo zCnb2~XbBj0fOLxjj8zyZ)jGKY@ERh}az{b#xH_lVoPO4VM~;?&V+TmLD8P7)k=9+5 zJAgDo1X}JWD4s%$BU>C_M!_RTOCYiXq+1kV(umPm63X_Jzbv%C0sydsS*%n57*i)i zsaeg&Rsg_pR(MlN&UibR0&cMl@}_z61LbcUEwBLq?BF&p6#&N62~m30tMe5Aa9lLr zw3Z9rj;?^)e2ctkpVQRUq&<Zl0Pyz_dsqQrOq~!lhB3rc0RYE!#2d6;@pg&@+@3n* zP4`j((EA0z+2Z%-X3oNASOTWN&Kd$>nj2xF3-(&cV$T3j=6fjs&M*ZGH2Z<xF90qc zzrVI?7QVs~Fa>tj5dhQN2@_qg*IG7z0e~_;NC9wxDPW*AP4s>Na83CA(1k2Kz!ES8 zb~X|K(>w|jU9i`q?CA;sWqy(Z;0jZ~K;dQqBee(`OL?^N0<pyi=5q#!$pD!8s0lQI z;=HW@xYU^0zyeNc5p<sNXypxJixJ%C3=o$AF!fOrXadc7UjcBbbE|^|qSPW76Xns$ zJH!?v#LpQZF#}-gqbAS<Bj-~Ez@;&U^1W}r%maYxvyg^+UiH)CwFW#Dw+nTPh2e7< z$oGH$6aa<<)c1Gy0HB8~q~)Gh{q%UP0nf$lLfztF_*@3^{rlenz>$Fd`6oUAj8hiU zanGxMdc4+vm*RGzZb>kFE(7`g`=bDeBv5L=>uW#X0Q4qT{`tVlKQE@71@}|HHW|nP z(if?xfa&Y~0I=A%w_&{j7+kLW>yedz-CQ{f?x%onGms;sZ&FVIH`Mz9VDldzQ@8<` zVy^t*#L6G`Sk8j`DUiAh<OJ!v)Kef%^?m^0DeynnfN$xj+*N-70000<MNUMnLSTY| C8harC diff --git a/libsrc/atari7800/wherex.s b/libsrc/atari7800/wherex.s new file mode 100644 index 000000000..3215302ac --- /dev/null +++ b/libsrc/atari7800/wherex.s @@ -0,0 +1,18 @@ +; +; 2022-04-16, Karri Kaksonen +; +; unsigned char wherex() +; + + .export _wherex + .import CURS_X + +;----------------------------------------------------------------------------- +; Get cursor X position +; + .proc _wherex + + lda CURS_X + rts + .endproc + diff --git a/libsrc/atari7800/wherey.s b/libsrc/atari7800/wherey.s new file mode 100644 index 000000000..2223f29ac --- /dev/null +++ b/libsrc/atari7800/wherey.s @@ -0,0 +1,19 @@ +; +; 2022-04-16, Karri Kaksonen +; +; unsigned char wherey() +; + + .export _wherey + .import CURS_Y + +;----------------------------------------------------------------------------- +; Get cursor Y position +; + .proc _wherey + + ldx #0 + lda CURS_Y + rts + .endproc + From cdc6e1c61f87933a0a3142057a47b5d77488f95e Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 19:15:19 +0300 Subject: [PATCH 1194/2710] Split files --- libsrc/atari7800/cputc.s | 186 +++++++++++++++++------------------ libsrc/atari7800/setcursor.s | 181 +++++++++++++++------------------- libsrc/atari7800/wherex.s | 11 ++- 3 files changed, 181 insertions(+), 197 deletions(-) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 607940332..7266190ee 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -6,31 +6,31 @@ ; .export _cputc - .export _textcolor - .import _gotoxy, _gotox, _gotoy, pusha0 - .import pushax - .import _screen - .import CURS_X, CURS_Y + .export _textcolor + .import _gotoxy, gotox, gotoy, pusha0 + .import pushax + .import _screen + .import CURS_X, CURS_Y .include "atari7800.inc" .include "extzp.inc" - .data + .data ;----------------------------------------------------------------------------- ; Holder of the text colour offset ; 0 = red, 42 = green, 84 = white ; txtcolor: - .byte 0 + .byte 0 - .code + .code ;--------------------------------------------------------------------------- ; 8x16 routine umula0: ldy #8 ; Number of bits - lda #0 + lda #0 lsr ptr7800 ; Get first bit into carry @L0: bcc @L1 @@ -38,7 +38,7 @@ umula0: adc ptrtmp tax lda ptrtmp+1 ; hi byte of left op - clc + clc adc ptr7800+1 sta ptr7800+1 txa @@ -64,25 +64,25 @@ umula0: ; .proc _textcolor - beq @L2 - sec - sbc #1 - beq @L1 - lda #84 - jmp @L2 -@L1: lda #42 -@L2: ldy txtcolor - sta txtcolor ; Store new textcolor - tya - bne @L3 - rts ; Old colour was 0 -@L3: sec - sbc #42 - bne @L4 - lda #1 - rts ; Old colour was 1 -@L4: lda #2 - rts ; Old colour was 2 + beq @L2 + sec + sbc #1 + beq @L1 + lda #84 + jmp @L2 +@L1: lda #42 +@L2: ldy txtcolor + sta txtcolor ; Store new textcolor + tya + bne @L3 + rts ; Old colour was 0 +@L3: sec + sbc #42 + bne @L4 + lda #1 + rts ; Old colour was 1 +@L4: lda #2 + rts ; Old colour was 2 .endproc ;----------------------------------------------------------------------------- @@ -92,83 +92,83 @@ umula0: ; .proc _cputc - cmp #$0A ; LF + cmp #$0A ; LF bne @L4 -@L1: lda CURS_Y ; newline - cmp #(screenrows-1) +@L1: lda CURS_Y ; newline + cmp #(screenrows-1) bne @L2 - lda #0 - beq @L3 -@L2: clc - adc #1 -@L3: jsr _gotoy - lda #0 - jmp _gotox + lda #0 + beq @L3 +@L2: clc + adc #1 +@L3: jsr gotoy + lda #0 + jmp gotox @L4: - cmp #$20 ; ' ' - bne @L5 - lda #$00 - jmp @L10 + cmp #$20 ; ' ' + bne @L5 + lda #$00 + jmp @L10 @L5: - cmp #$3F ; '?' - bne @L6 - lda #$02 - jmp @L9 + cmp #$3F ; '?' + bne @L6 + lda #$02 + jmp @L9 @L6: - cmp #$7C ; '|' - bne @L7 - lda #$06 - jmp @L9 + cmp #$7C ; '|' + bne @L7 + lda #$06 + jmp @L9 @L7: - cmp #$41 ; >= 'A' - bcc @L8 - and #$5F ; make upper case - sec - sbc #($41 - 17) - jmp @L9 + cmp #$41 ; >= 'A' + bcc @L8 + and #$5F ; make upper case + sec + sbc #($41 - 17) + jmp @L9 @L8: - sec ; >= '*' - sbc #($2A - 1) + sec ; >= '*' + sbc #($2A - 1) @L9: - clc - adc txtcolor + clc + adc txtcolor @L10: - asl - pha + asl + pha - lda #0 - sta ptr7800+1 - sta ptrtmp+1 - lda CURS_Y ; Find position on screen buffer - sta ptr7800 - lda #charsperline - sta ptrtmp - jsr umula0 - clc - adc CURS_X - bcc @L11 - inx -@L11: clc - adc #<(_screen) - sta ptr7800 - bcc @L12 - inx -@L12: txa - clc - adc #>(_screen) - sta ptr7800+1 + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + lda CURS_Y ; Find position on screen buffer + sta ptr7800 + lda #charsperline + sta ptrtmp + jsr umula0 + clc + adc CURS_X + bcc @L11 + inx +@L11: clc + adc #<(_screen) + sta ptr7800 + bcc @L12 + inx +@L12: txa + clc + adc #>(_screen) + sta ptr7800+1 - pla ; Print character on screen - ldy #0 - sta (ptr7800),y + pla ; Print character on screen + ldy #0 + sta (ptr7800),y - lda CURS_X ; Increment cursor - cmp #(charsperline-1) - beq @L1 - clc - adc #1 - jmp _gotox + lda CURS_X ; Increment cursor + cmp #(charsperline-1) + beq @L1 + clc + adc #1 + jmp gotox .endproc diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 34c7562ab..30151820a 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -23,40 +23,40 @@ ; definitely not allow direct access to the variables. ; - .export gotoxy, _gotoxy, _gotox, _gotoy, _wherex, _wherey - .export CURS_X, CURS_Y + .export gotoxy, _gotoxy, gotox, gotoy + .export CURS_X, CURS_Y .constructor init_cursor .interruptor blink_cursor - .importzp sp - .import _zones - .import cursor - .import pusha, incsp1, pusha0, pushax, popa + .importzp sp + .import _zones + .import cursor + .import pusha, incsp1, pusha0, pushax, popa .include "atari7800.inc" .include "extzp.inc" .macpack generic - .data + .data ;----------------------------------------------------------------------------- ; The variables used by cursor functions ; CURS_X: - .byte 0 + .byte 0 CURS_Y: - .byte 0 + .byte 0 blink_time: - .byte 140 + .byte 140 - .code + .code ;--------------------------------------------------------------------------- ; 8x16 routine umula0: ldy #8 ; Number of bits - lda #0 + lda #0 lsr ptr7800 ; Get first bit into carry @L0: bcc @L1 @@ -86,24 +86,24 @@ umula0: ; A = CURS_Y .proc calccursorzone - sta ptr7800 - lda #11 - sta ptrtmp - lda #0 - sta ptr7800+1 - sta ptrtmp+1 - jsr umula0 - clc - adc #5 - bcc @L1 - inx -@L1: clc - adc #<_zones - sta cursorzone ; calculate new cursorzone - txa - adc #>_zones - sta cursorzone+1 - rts + sta ptr7800 + lda #11 + sta ptrtmp + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + jsr umula0 + clc + adc #5 + bcc @L1 + inx +@L1: clc + adc #<_zones + sta cursorzone ; calculate new cursorzone + txa + adc #>_zones + sta cursorzone+1 + rts .endproc @@ -122,23 +122,23 @@ umula0: ; Enable cursor ; if showcursor cursorzone[1] = 30 ; - .proc _gotoy + .proc gotoy - pha - lda CURS_Y - jsr calccursorzone - ldy #1 - lda #0 - sta (cursorzone),y ; disable cursor - pla - sta CURS_Y - jsr calccursorzone - lda cursor - beq @L1 - lda #30 ; enable cursor -@L1: ldy #1 - sta (cursorzone),y - rts + pha + lda CURS_Y + jsr calccursorzone + ldy #1 + lda #0 + sta (cursorzone),y ; disable cursor + pla + sta CURS_Y + jsr calccursorzone + lda cursor + beq @L1 + lda #30 ; enable cursor +@L1: ldy #1 + sta (cursorzone),y + rts .endproc @@ -147,70 +147,53 @@ umula0: ; You also need to set the hpos offset to the correct value on this line ; cursorzone[3] = 8 * CURS_X ; - .proc _gotox + .proc gotox - sta CURS_X - ldy #3 - clc - rol - rol - rol - sta (cursorzone),y - rts + sta CURS_X + ldy #3 + clc + rol + rol + rol + sta (cursorzone),y + rts .endproc ;----------------------------------------------------------------------------- ; Set cursor to desired position (X,Y) ; - .proc _gotoxy + .proc _gotoxy - jsr _gotoy - jsr popa - jsr _gotox - rts - .endproc + jsr gotoy + jsr popa + jsr gotox + rts + .endproc - .proc gotoxy - jsr popa - jmp _gotoxy - .endproc -;----------------------------------------------------------------------------- -; Get cursor X position -; - .proc _wherex - - lda CURS_X - rts - .endproc - -;----------------------------------------------------------------------------- -; Get cursor Y position -; - .proc _wherey - - lda CURS_Y - rts - .endproc + .proc gotoxy + jsr popa + jmp _gotoxy + .endproc ;----------------------------------------------------------------------------- ; Initialize cursorzone at startup ; Offset to cursor zone 5. ; - .proc blink_cursor - inc blink_time - bne @L3 - lda #140 - sta blink_time - ldy #0 - lda (cursorzone),y - bne @L1 - lda #254 - bne @L2 -@L1: lda #0 -@L2: sta (cursorzone),y -@L3: rts - .endproc + .proc blink_cursor + inc blink_time + bne @L3 + lda #140 + sta blink_time + ldy #0 + lda (cursorzone),y + bne @L1 + lda #254 + bne @L2 +@L1: lda #0 +@L2: sta (cursorzone),y +@L3: rts + .endproc ;----------------------------------------------------------------------------- ; Initialize cursorzone at startup @@ -218,9 +201,9 @@ umula0: ; .segment "ONCE" init_cursor: - lda #0 - jsr calccursorzone - rts + lda #0 + jsr calccursorzone + rts ;----------------------------------------------------------------------------- ; force the init constructor to be imported diff --git a/libsrc/atari7800/wherex.s b/libsrc/atari7800/wherex.s index 3215302ac..f90105c46 100644 --- a/libsrc/atari7800/wherex.s +++ b/libsrc/atari7800/wherex.s @@ -5,14 +5,15 @@ ; .export _wherex - .import CURS_X + .import CURS_X ;----------------------------------------------------------------------------- ; Get cursor X position ; - .proc _wherex + .proc _wherex - lda CURS_X - rts - .endproc + ldx #0 + lda CURS_X + rts + .endproc From 2eb20b3e8a707f22b168f74eccad7c9e28bea392 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 18:16:14 +0200 Subject: [PATCH 1195/2710] remove a bunch of TABs --- libsrc/atari7800/clock.s | 18 ++-- libsrc/atari7800/clocks_per_sec.s | 14 +-- libsrc/atari7800/crt0.s | 24 ++--- libsrc/atari7800/exehdr.s | 34 +++--- libsrc/atari7800/get_tv.s | 86 +++++++-------- libsrc/atari7800/irq.s | 6 +- libsrc/atari7800/joy/atari7800-stdjoy.s | 134 ++++++++++++------------ libsrc/lynx/bootldr.s | 2 +- samples/sym1/symNotepad.c | 26 ++--- test/val/bug1696.c | 20 ++-- 10 files changed, 182 insertions(+), 182 deletions(-) diff --git a/libsrc/atari7800/clock.s b/libsrc/atari7800/clock.s index 3b259cfcf..03ae1e970 100644 --- a/libsrc/atari7800/clock.s +++ b/libsrc/atari7800/clock.s @@ -9,12 +9,12 @@ .constructor init_clock .import sreg: zp - .import _zonecounter + .import _zonecounter .include "atari7800.inc" .macpack generic - .code + .code ;----------------------------------------------------------------------------- ; Read the clock counter. @@ -38,9 +38,9 @@ ; _zonecounter == 1 (from 1st visible scanline to last visible scanline) ; update_clock: - lda _zonecounter - and #01 - beq @L1 + lda _zonecounter + and #01 + beq @L1 inc clock_count bne @L1 inc clock_count+1 @@ -54,10 +54,10 @@ update_clock: ; .segment "ONCE" init_clock: - lda #0 - sta clock_count+2 - sta clock_count+1 - sta clock_count + lda #0 + sta clock_count+2 + sta clock_count+1 + sta clock_count rts ;----------------------------------------------------------------------------- diff --git a/libsrc/atari7800/clocks_per_sec.s b/libsrc/atari7800/clocks_per_sec.s index dc09c4396..e2c7d9d8d 100644 --- a/libsrc/atari7800/clocks_per_sec.s +++ b/libsrc/atari7800/clocks_per_sec.s @@ -7,12 +7,12 @@ .export __clocks_per_sec .import sreg: zp - .import _paldetected + .import _paldetected .include "atari7800.inc" .macpack generic - .code + .code ;----------------------------------------------------------------------------- ; Return the number of clock ticks in one second. @@ -20,15 +20,15 @@ .proc __clocks_per_sec lda #0 - tax + tax sta sreg ; return 32 bits sta sreg+1 lda _paldetected - bne pal - lda #60 ; NTSC - 60Hz - rts + bne pal + lda #60 ; NTSC - 60Hz + rts pal: - lda #50 ; PAL - 50Hz + lda #50 ; PAL - 50Hz rts .endproc diff --git a/libsrc/atari7800/crt0.s b/libsrc/atari7800/crt0.s index d7cf307ee..cefe16730 100644 --- a/libsrc/atari7800/crt0.s +++ b/libsrc/atari7800/crt0.s @@ -1,14 +1,14 @@ - .export _zonecounter - .export __STARTUP__ : absolute = 1 - .export _exit - .import __ROM_START__ - .import __RAM3_START__, __RAM3_SIZE__ - .import initlib, donelib - .import zerobss, copydata - .import IRQStub - .import push0, _main - .include "atari7800.inc" - .include "zeropage.inc" + .export _zonecounter + .export __STARTUP__ : absolute = 1 + .export _exit + .import __ROM_START__ + .import __RAM3_START__, __RAM3_SIZE__ + .import initlib, donelib + .import zerobss, copydata + .import IRQStub + .import push0, _main + .include "atari7800.inc" + .include "zeropage.inc" INPTCTRL = $01 @@ -50,7 +50,7 @@ _exit: NMIHandler: inc _zonecounter - jmp IRQStub + jmp IRQStub IRQHandler: rti diff --git a/libsrc/atari7800/exehdr.s b/libsrc/atari7800/exehdr.s index 618164cd4..99e62e3d6 100644 --- a/libsrc/atari7800/exehdr.s +++ b/libsrc/atari7800/exehdr.s @@ -4,15 +4,15 @@ ; This header contains data for emulators ; .export __EXEHDR__: absolute = 1 - .import __CARTSIZE__ + .import __CARTSIZE__ ; ------------------------------------------------------------------------ ; EXE header - .segment "EXEHDR" - .byte 3 ; version - .byte 'A','T','A','R','I','7','8','0','0',' ',' ',' ',' ',' ',' ',' ' - .byte 'G','a','m','e',' ','n','a','m','e',0,0,0,0,0,0,0 - .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - .byte 0,0,>__CARTSIZE__,0 ; Set the cart size in the cfg file + .segment "EXEHDR" + .byte 3 ; version + .byte 'A','T','A','R','I','7','8','0','0',' ',' ',' ',' ',' ',' ',' ' + .byte 'G','a','m','e',' ','n','a','m','e',0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,>__CARTSIZE__,0 ; Set the cart size in the cfg file ; bit 0 - pokey at 4000 ; bit 1 - supergame bank switched ; bit 2 - supergame ram at $4000 @@ -28,19 +28,19 @@ ; bit 12 - souper ; bit 13-15 - Special ; 0 = Normal cart - .byte 0,0 ; 0 = Normal cart - .byte 1 ; 1 = Joystick, 2 = lightgun - .byte 0 ; No joystick 2 - .byte 0 ; bit0 = 0:NTSC,1:PAL bit1 = 0:component,1:composite - .byte 0 ; Save data peripheral - 1 byte (version 2) + .byte 0,0 ; 0 = Normal cart + .byte 1 ; 1 = Joystick, 2 = lightgun + .byte 0 ; No joystick 2 + .byte 0 ; bit0 = 0:NTSC,1:PAL bit1 = 0:component,1:composite + .byte 0 ; Save data peripheral - 1 byte (version 2) ; 0 = None / unknown (default) ; 1 = High Score Cart (HSC) ; 2 = SaveKey - .byte 0 ; 63 Expansion module + .byte 0 ; 63 Expansion module ; 0 = No expansion module (default on all currently released games) ; 1 = Expansion module required - .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - .byte 0,0,0,0,0,0,0,0 - .byte 'A','C','T','U','A','L',' ','C','A','R','T',' ','D','A','T','A',' ','S','T','A','R','T','S',' ','H','E','R','E' + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0 + .byte 'A','C','T','U','A','L',' ','C','A','R','T',' ','D','A','T','A',' ','S','T','A','R','T','S',' ','H','E','R','E' diff --git a/libsrc/atari7800/get_tv.s b/libsrc/atari7800/get_tv.s index 3eb94d54d..12c54f807 100644 --- a/libsrc/atari7800/get_tv.s +++ b/libsrc/atari7800/get_tv.s @@ -3,63 +3,63 @@ ; ; unsigned char get_tv (void) ; - .include "atari7800.inc" - .include "get_tv.inc" - .export _get_tv - .export _paldetected + .include "atari7800.inc" + .include "get_tv.inc" + .export _get_tv + .export _paldetected -.segment "DATA" +.segment "DATA" _paldetected: - .byte $FF + .byte $FF ; --------------------------------------------------------------- ; unsigned char get_tv (void) ; --------------------------------------------------------------- -.segment "CODE" +.segment "CODE" -.proc _get_tv: near +.proc _get_tv: near -.segment "CODE" +.segment "CODE" - ldx #$00 - lda #$FF - cmp _paldetected - bne L8 -L1: lda MSTAT - and #$80 - bne L1 -L2: lda MSTAT - and #$80 - beq L2 -L3: lda MSTAT - and #$80 - bne L3 - lda #$00 - sta M0001 - jmp L5 -L4: sta MWSYNC - sta MWSYNC - dec M0001 -L5: lda MSTAT - and #$80 - beq L4 - lda M0001 - cmp #$78 - bcc L6 - lda #TV::NTSC - jmp L7 -L6: lda #TV::PAL -L7: sta _paldetected - ldx #$00 -L8: lda _paldetected - rts + ldx #$00 + lda #$FF + cmp _paldetected + bne L8 +L1: lda MSTAT + and #$80 + bne L1 +L2: lda MSTAT + and #$80 + beq L2 +L3: lda MSTAT + and #$80 + bne L3 + lda #$00 + sta M0001 + jmp L5 +L4: sta MWSYNC + sta MWSYNC + dec M0001 +L5: lda MSTAT + and #$80 + beq L4 + lda M0001 + cmp #$78 + bcc L6 + lda #TV::NTSC + jmp L7 +L6: lda #TV::PAL +L7: sta _paldetected + ldx #$00 +L8: lda _paldetected + rts -.segment "BSS" +.segment "BSS" M0001: - .res 1,$00 + .res 1,$00 .endproc diff --git a/libsrc/atari7800/irq.s b/libsrc/atari7800/irq.s index ed315a1b7..3cfc74541 100644 --- a/libsrc/atari7800/irq.s +++ b/libsrc/atari7800/irq.s @@ -8,7 +8,7 @@ .include "atari7800.inc" - .code + .code ; ------------------------------------------------------------------------ initirq: @@ -27,10 +27,10 @@ IRQStub: tya pha jsr callirq ; Call the functions - pla + pla tay pla tax -@L1: pla +@L1: pla rti diff --git a/libsrc/atari7800/joy/atari7800-stdjoy.s b/libsrc/atari7800/joy/atari7800-stdjoy.s index 00bb57dcf..cea6625a4 100644 --- a/libsrc/atari7800/joy/atari7800-stdjoy.s +++ b/libsrc/atari7800/joy/atari7800-stdjoy.s @@ -88,74 +88,74 @@ COUNT: ; READ: Read a particular joystick passed in A for 2 fire buttons. readbuttons: - ; Y has joystick of interest 0/1 - ; return value: - ; $00: no button, - ; $01: left/B button, - ; $02: right/A button, - ; $03: both buttons - ; preserves X - tya - beq L5 - ; Joystick 1 processing - ; 7800 joystick 1 buttons - ldy #0 ; ........ - bit INPT2 ; Check for right button - bpl L1 - ldy #2 ; ......2. -L1: bit INPT3 ;Check for left button - bpl L2 - iny ; ......21 -L2: tya - bne L4 ; 7800 mode joystick worked - ; 2600 Joystick 1 - bit INPT5 - bmi L4 -L3: iny ; .......1 - lda #0 ; Fallback to 2600 joystick mode - sta CTLSWB -L4: tya ; ......21 - rts + ; Y has joystick of interest 0/1 + ; return value: + ; $00: no button, + ; $01: left/B button, + ; $02: right/A button, + ; $03: both buttons + ; preserves X + tya + beq L5 + ; Joystick 1 processing + ; 7800 joystick 1 buttons + ldy #0 ; ........ + bit INPT2 ; Check for right button + bpl L1 + ldy #2 ; ......2. +L1: bit INPT3 ;Check for left button + bpl L2 + iny ; ......21 +L2: tya + bne L4 ; 7800 mode joystick worked + ; 2600 Joystick 1 + bit INPT5 + bmi L4 +L3: iny ; .......1 + lda #0 ; Fallback to 2600 joystick mode + sta CTLSWB +L4: tya ; ......21 + rts -L5: ; Joystick 0 processing - ; 7800 joystick 0 buttons - ldy #0 ; ........ - bit INPT0 ; Check for right button - bpl L6 - ldy #2 ; ......2. -L6: bit INPT1 ;Check for left button - bpl L7 - iny ; ......21 -L7: tya - bne L4 ; 7800 mode joystick worked - ; 2600 Joystick 0 - bit INPT4 - bmi L4 - bpl L3 +L5: ; Joystick 0 processing + ; 7800 joystick 0 buttons + ldy #0 ; ........ + bit INPT0 ; Check for right button + bpl L6 + ldy #2 ; ......2. +L6: bit INPT1 ;Check for left button + bpl L7 + iny ; ......21 +L7: tya + bne L4 ; 7800 mode joystick worked + ; 2600 Joystick 0 + bit INPT4 + bmi L4 + bpl L3 READ: - tay ; Store joystick 0/1 in Y - beq L8 - lda SWCHA ; Read directions of joystick 1 - rol ; ...RLDU. - rol ; ..RLDU.. - rol ; .RLDU... - joystick 1 - jmp L9 -L8: lda SWCHA ; Read directions of joystick 0 - ror ; .RLDU... - joystick 0 -L9: tax - jsr readbuttons ; A = ......21, X = .RLDU... - ror ; A = .......2 1 - tay ; Y = .......2 - txa ; A = .RLDU... - ror ; A = 1.RLDU.. - tax ; X = 1.RLDU.. - tya ; A = .......2 - ror ; A = ........ 2 - txa ; A = 1.RLDU.. - rol ; A = .RLDU..2 1 - rol ; A = RLDU..21 - eor #$F0 ; The direction buttons were inversed - and #$F3 - rts + tay ; Store joystick 0/1 in Y + beq L8 + lda SWCHA ; Read directions of joystick 1 + rol ; ...RLDU. + rol ; ..RLDU.. + rol ; .RLDU... - joystick 1 + jmp L9 +L8: lda SWCHA ; Read directions of joystick 0 + ror ; .RLDU... - joystick 0 +L9: tax + jsr readbuttons ; A = ......21, X = .RLDU... + ror ; A = .......2 1 + tay ; Y = .......2 + txa ; A = .RLDU... + ror ; A = 1.RLDU.. + tax ; X = 1.RLDU.. + tya ; A = .......2 + ror ; A = ........ 2 + txa ; A = 1.RLDU.. + rol ; A = .RLDU..2 1 + rol ; A = RLDU..21 + eor #$F0 ; The direction buttons were inversed + and #$F3 + rts diff --git a/libsrc/lynx/bootldr.s b/libsrc/lynx/bootldr.s index 58f04afc6..c8b4ca402 100644 --- a/libsrc/lynx/bootldr.s +++ b/libsrc/lynx/bootldr.s @@ -61,7 +61,7 @@ ; 00 00 00 00 ; spares ; 00 ; End of encrypted header mark ; -; .reloc +; .reloc ;********************************** ; After compilation, encryption and obfuscation it turns into this. ;********************************** diff --git a/samples/sym1/symNotepad.c b/samples/sym1/symNotepad.c index 1d0541ab6..6fb6db902 100644 --- a/samples/sym1/symNotepad.c +++ b/samples/sym1/symNotepad.c @@ -68,7 +68,7 @@ int main (void) { } else { memset ( tapio, 0, TAPIO_MAX_SIZE ); - } + } while ( running ) { @@ -138,21 +138,21 @@ int main (void) { } else { - for ( l = 0; l <= heap_size; l++ ) { - buffer[l] = tapio[l]; - } + for ( l = 0; l <= heap_size; l++ ) { + buffer[l] = tapio[l]; + } - p = strlen ( buffer ); + p = strlen ( buffer ); - putchar ( '\r' ); - for ( l = 0; l < 25; l++ ) { - putchar ( '\n' ); - } - puts ("===================== Sym-1 Notepad ====================\n"); + putchar ( '\r' ); + for ( l = 0; l < 25; l++ ) { + putchar ( '\n' ); + } + puts ("===================== Sym-1 Notepad ====================\n"); - for ( l = 0; l <= p; l++ ) { - putchar ( buffer[l] ); - } + for ( l = 0; l <= p; l++ ) { + putchar ( buffer[l] ); + } } } else if ( c == 0x03 ) { // Clear diff --git a/test/val/bug1696.c b/test/val/bug1696.c index c31dc257b..72cf9cc7e 100644 --- a/test/val/bug1696.c +++ b/test/val/bug1696.c @@ -29,16 +29,16 @@ static unsigned char failures = 0; int main(void) { - unsigned int x = 65535; - unsigned short y = 65535; - if (!(x > 1L)) { - printf("x = %ld but x > 1L failed\n", (long)x); - ++failures; - } - if (!(y == 65535L)) { - printf("y = %ld but y == 65535L failed\n", (long)y); - ++failures; - } + unsigned int x = 65535; + unsigned short y = 65535; + if (!(x > 1L)) { + printf("x = %ld but x > 1L failed\n", (long)x); + ++failures; + } + if (!(y == 65535L)) { + printf("y = %ld but y == 65535L failed\n", (long)y); + ++failures; + } printf("failures: %u\n", failures); return failures; } From 4b492ed4e56a449d3439ea892631b121bbeb66bd Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 18:18:51 +0200 Subject: [PATCH 1196/2710] added TAB checker script, to be added to the PR checker action --- .github/checks/Makefile | 7 +++++++ .github/checks/tabs.sh | 16 ++++++++++++++++ Makefile | 5 ++++- 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 .github/checks/Makefile create mode 100755 .github/checks/tabs.sh diff --git a/.github/checks/Makefile b/.github/checks/Makefile new file mode 100644 index 000000000..3e85c0fd7 --- /dev/null +++ b/.github/checks/Makefile @@ -0,0 +1,7 @@ + +.PHONY: tabs + +check: tabs + +tabs: tabs.sh + @./tabs.sh diff --git a/.github/checks/tabs.sh b/.github/checks/tabs.sh new file mode 100755 index 000000000..ad10dfe14 --- /dev/null +++ b/.github/checks/tabs.sh @@ -0,0 +1,16 @@ +#! /bin/bash +OLDCWD=`pwd` +SCRIPT_PATH=`dirname $0` +cd $SCRIPT_PATH/../../ + +FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l $'\t' | grep -v "libwrk/" | grep -v "testwrk/"` + +cd $OLDCWD + +if [ x"$FILES"x != xx ]; then + echo "error: found TABs in the following files:" + for n in $FILES; do + echo $n + done + exit -1 +fi diff --git a/Makefile b/Makefile index 540c214fc..f565727e6 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples test util +.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples test util check .SUFFIXES: @@ -24,6 +24,9 @@ samples: test: @$(MAKE) -C test --no-print-directory $@ +check: + @$(MAKE) -C .github/checks --no-print-directory $@ + util: @$(MAKE) -C util --no-print-directory $@ From 4c5875706408f36dbfca755c9422101339f7f5b9 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 18:21:57 +0200 Subject: [PATCH 1197/2710] run style checks on PR --- .github/workflows/build-on-pull-request.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 6ab8543de..e9176f8c4 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -21,6 +21,9 @@ jobs: - name: Checkout Source uses: actions/checkout@v2 + - name: Do some simple style checks + shell: bash + run: make -j2 check - name: Build the tools. shell: bash run: make -j2 bin USER_CFLAGS=-Werror From fd6662bb6499f7c1be5152aca38c2fd811d8ef18 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 18:32:49 +0200 Subject: [PATCH 1198/2710] add check action also to the snapshot build --- .github/workflows/snapshot-on-push-master.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index fb4b3aa13..47abc3564 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -46,6 +46,9 @@ jobs: - name: Checkout Source uses: actions/checkout@v2 + - name: Do some simple style checks + shell: bash + run: make -j2 check - name: Build the tools. shell: bash run: | From 8cacfa70d5dc99077f08bdc77f45afaf0162b943 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 19:51:48 +0200 Subject: [PATCH 1199/2710] add missing newline to a bunch of files --- libsrc/apple2/color.s | 2 +- libsrc/geos-cbm/system/initdoneio.s | 4 ++-- libsrc/geos-cbm/system/tobasic.s | 2 +- libsrc/geos-common/memory/crc.s | 1 - libsrc/geos-common/menuicon/doicons.s | 2 +- libsrc/geos-common/menuicon/domenu.s | 2 +- libsrc/geos-common/menuicon/dopreviousmenu.s | 2 +- libsrc/geos-common/menuicon/gotofirstmenu.s | 2 +- libsrc/geos-common/menuicon/recoverallmenus.s | 2 +- libsrc/geos-common/menuicon/recovermenu.s | 2 +- libsrc/geos-common/menuicon/redomenu.s | 2 +- .../geos-common/mousesprite/clearmousemode.s | 2 +- libsrc/geos-common/mousesprite/disablsprite.s | 2 +- libsrc/geos-common/mousesprite/drawsprite.s | 2 +- libsrc/geos-common/mousesprite/enablsprite.s | 2 +- .../geos-common/mousesprite/inittextprompt.s | 2 +- libsrc/geos-common/mousesprite/mouseoff.s | 2 +- libsrc/geos-common/mousesprite/mouseup.s | 2 +- libsrc/geos-common/mousesprite/possprite.s | 2 +- .../geos-common/mousesprite/startmousemode.s | 2 +- libsrc/geos-common/system/callroutine.s | 2 +- libsrc/geos-common/system/firstinit.s | 2 +- libsrc/geos-common/system/panic.s | 2 +- libsrc/osic1p/osiscreen.inc | 23 ++++++++++--------- test/err/cc65091001.c | 2 +- test/ref/cc65070303.c | 2 +- test/ref/cc65080227.c | 2 +- test/ref/cc65101209.c | 2 +- test/ref/cc65101216.c | 2 +- test/val/cc65091020.c | 2 +- 30 files changed, 41 insertions(+), 41 deletions(-) diff --git a/libsrc/apple2/color.s b/libsrc/apple2/color.s index 3b0c5b6d4..c54207288 100644 --- a/libsrc/apple2/color.s +++ b/libsrc/apple2/color.s @@ -13,4 +13,4 @@ _textcolor := return1 _bgcolor := return0 -_bordercolor := return0 \ No newline at end of file +_bordercolor := return0 diff --git a/libsrc/geos-cbm/system/initdoneio.s b/libsrc/geos-cbm/system/initdoneio.s index b5e51524a..4b8762bad 100644 --- a/libsrc/geos-cbm/system/initdoneio.s +++ b/libsrc/geos-cbm/system/initdoneio.s @@ -11,5 +11,5 @@ .include "jumptab.inc" _InitForIO = InitForIO - -_DoneWithIO = DoneWithIO \ No newline at end of file + +_DoneWithIO = DoneWithIO diff --git a/libsrc/geos-cbm/system/tobasic.s b/libsrc/geos-cbm/system/tobasic.s index cb47da531..59bdc2936 100644 --- a/libsrc/geos-cbm/system/tobasic.s +++ b/libsrc/geos-cbm/system/tobasic.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_ToBASIC = ToBASIC \ No newline at end of file +_ToBASIC = ToBASIC diff --git a/libsrc/geos-common/memory/crc.s b/libsrc/geos-common/memory/crc.s index 9ec2feb0c..94ab98f34 100644 --- a/libsrc/geos-common/memory/crc.s +++ b/libsrc/geos-common/memory/crc.s @@ -17,4 +17,3 @@ _CRC: lda r2L ldx r2H rts - \ No newline at end of file diff --git a/libsrc/geos-common/menuicon/doicons.s b/libsrc/geos-common/menuicon/doicons.s index 5ddf06d01..b0456e67f 100644 --- a/libsrc/geos-common/menuicon/doicons.s +++ b/libsrc/geos-common/menuicon/doicons.s @@ -13,4 +13,4 @@ _DoIcons: sta r0L stx r0H - jmp DoIcons \ No newline at end of file + jmp DoIcons diff --git a/libsrc/geos-common/menuicon/domenu.s b/libsrc/geos-common/menuicon/domenu.s index 1624a3852..43a2b5a0c 100644 --- a/libsrc/geos-common/menuicon/domenu.s +++ b/libsrc/geos-common/menuicon/domenu.s @@ -14,4 +14,4 @@ _DoMenu: sta r0L stx r0H lda #0 - jmp DoMenu \ No newline at end of file + jmp DoMenu diff --git a/libsrc/geos-common/menuicon/dopreviousmenu.s b/libsrc/geos-common/menuicon/dopreviousmenu.s index 5ac19b57a..1a92e1fe1 100644 --- a/libsrc/geos-common/menuicon/dopreviousmenu.s +++ b/libsrc/geos-common/menuicon/dopreviousmenu.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_DoPreviousMenu = DoPreviousMenu \ No newline at end of file +_DoPreviousMenu = DoPreviousMenu diff --git a/libsrc/geos-common/menuicon/gotofirstmenu.s b/libsrc/geos-common/menuicon/gotofirstmenu.s index b5f2306db..a8d00b132 100644 --- a/libsrc/geos-common/menuicon/gotofirstmenu.s +++ b/libsrc/geos-common/menuicon/gotofirstmenu.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_GotoFirstMenu = GotoFirstMenu \ No newline at end of file +_GotoFirstMenu = GotoFirstMenu diff --git a/libsrc/geos-common/menuicon/recoverallmenus.s b/libsrc/geos-common/menuicon/recoverallmenus.s index 03a8368bf..0420e88be 100644 --- a/libsrc/geos-common/menuicon/recoverallmenus.s +++ b/libsrc/geos-common/menuicon/recoverallmenus.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_RecoverAllMenus = RecoverAllMenus \ No newline at end of file +_RecoverAllMenus = RecoverAllMenus diff --git a/libsrc/geos-common/menuicon/recovermenu.s b/libsrc/geos-common/menuicon/recovermenu.s index 638d03d16..a8a6870c7 100644 --- a/libsrc/geos-common/menuicon/recovermenu.s +++ b/libsrc/geos-common/menuicon/recovermenu.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_RecoverMenu = RecoverMenu \ No newline at end of file +_RecoverMenu = RecoverMenu diff --git a/libsrc/geos-common/menuicon/redomenu.s b/libsrc/geos-common/menuicon/redomenu.s index 44d62e807..818102f8b 100644 --- a/libsrc/geos-common/menuicon/redomenu.s +++ b/libsrc/geos-common/menuicon/redomenu.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_ReDoMenu = ReDoMenu \ No newline at end of file +_ReDoMenu = ReDoMenu diff --git a/libsrc/geos-common/mousesprite/clearmousemode.s b/libsrc/geos-common/mousesprite/clearmousemode.s index 01e659567..635a0fcd4 100644 --- a/libsrc/geos-common/mousesprite/clearmousemode.s +++ b/libsrc/geos-common/mousesprite/clearmousemode.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_ClearMouseMode = ClearMouseMode \ No newline at end of file +_ClearMouseMode = ClearMouseMode diff --git a/libsrc/geos-common/mousesprite/disablsprite.s b/libsrc/geos-common/mousesprite/disablsprite.s index 95d298094..e6c769e29 100644 --- a/libsrc/geos-common/mousesprite/disablsprite.s +++ b/libsrc/geos-common/mousesprite/disablsprite.s @@ -12,4 +12,4 @@ _DisablSprite: sta r3L - jmp DisablSprite \ No newline at end of file + jmp DisablSprite diff --git a/libsrc/geos-common/mousesprite/drawsprite.s b/libsrc/geos-common/mousesprite/drawsprite.s index 0f4d611c0..90382c63c 100644 --- a/libsrc/geos-common/mousesprite/drawsprite.s +++ b/libsrc/geos-common/mousesprite/drawsprite.s @@ -16,4 +16,4 @@ _DrawSprite: stx r4H jsr popa sta r3L - jmp DrawSprite \ No newline at end of file + jmp DrawSprite diff --git a/libsrc/geos-common/mousesprite/enablsprite.s b/libsrc/geos-common/mousesprite/enablsprite.s index a271d2cdb..404a7cb05 100644 --- a/libsrc/geos-common/mousesprite/enablsprite.s +++ b/libsrc/geos-common/mousesprite/enablsprite.s @@ -12,4 +12,4 @@ _EnablSprite: sta r3L - jmp EnablSprite \ No newline at end of file + jmp EnablSprite diff --git a/libsrc/geos-common/mousesprite/inittextprompt.s b/libsrc/geos-common/mousesprite/inittextprompt.s index 2fc5e58fc..e0c4cc1cd 100644 --- a/libsrc/geos-common/mousesprite/inittextprompt.s +++ b/libsrc/geos-common/mousesprite/inittextprompt.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_InitTextPrompt = InitTextPrompt \ No newline at end of file +_InitTextPrompt = InitTextPrompt diff --git a/libsrc/geos-common/mousesprite/mouseoff.s b/libsrc/geos-common/mousesprite/mouseoff.s index a918bb612..b48d30807 100644 --- a/libsrc/geos-common/mousesprite/mouseoff.s +++ b/libsrc/geos-common/mousesprite/mouseoff.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_MouseOff = MouseOff \ No newline at end of file +_MouseOff = MouseOff diff --git a/libsrc/geos-common/mousesprite/mouseup.s b/libsrc/geos-common/mousesprite/mouseup.s index 45b4e83c2..8f7b4e0f6 100644 --- a/libsrc/geos-common/mousesprite/mouseup.s +++ b/libsrc/geos-common/mousesprite/mouseup.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_MouseUp = MouseUp \ No newline at end of file +_MouseUp = MouseUp diff --git a/libsrc/geos-common/mousesprite/possprite.s b/libsrc/geos-common/mousesprite/possprite.s index 24e8bd14c..5543cb3c6 100644 --- a/libsrc/geos-common/mousesprite/possprite.s +++ b/libsrc/geos-common/mousesprite/possprite.s @@ -26,4 +26,4 @@ _PosSprite: sta r5L jsr popa sta r3L - jmp PosSprite \ No newline at end of file + jmp PosSprite diff --git a/libsrc/geos-common/mousesprite/startmousemode.s b/libsrc/geos-common/mousesprite/startmousemode.s index 06a547714..26d969744 100644 --- a/libsrc/geos-common/mousesprite/startmousemode.s +++ b/libsrc/geos-common/mousesprite/startmousemode.s @@ -11,4 +11,4 @@ _StartMouseMode: clc - jmp StartMouseMode \ No newline at end of file + jmp StartMouseMode diff --git a/libsrc/geos-common/system/callroutine.s b/libsrc/geos-common/system/callroutine.s index 54de4cac7..3213d507e 100644 --- a/libsrc/geos-common/system/callroutine.s +++ b/libsrc/geos-common/system/callroutine.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_CallRoutine = CallRoutine \ No newline at end of file +_CallRoutine = CallRoutine diff --git a/libsrc/geos-common/system/firstinit.s b/libsrc/geos-common/system/firstinit.s index c0695ee47..617ecf4d6 100644 --- a/libsrc/geos-common/system/firstinit.s +++ b/libsrc/geos-common/system/firstinit.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_FirstInit = FirstInit \ No newline at end of file +_FirstInit = FirstInit diff --git a/libsrc/geos-common/system/panic.s b/libsrc/geos-common/system/panic.s index 9ea916023..d34b74a5a 100644 --- a/libsrc/geos-common/system/panic.s +++ b/libsrc/geos-common/system/panic.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_Panic = Panic \ No newline at end of file +_Panic = Panic diff --git a/libsrc/osic1p/osiscreen.inc b/libsrc/osic1p/osiscreen.inc index 9399d7eee..ee2e52174 100644 --- a/libsrc/osic1p/osiscreen.inc +++ b/libsrc/osic1p/osiscreen.inc @@ -3,7 +3,7 @@ ; .include "extzp.inc" - + .linecont + ; @@ -13,7 +13,7 @@ ; Macro implementation of internal screensize ; function for given width and height in ; characters - + .export screensize .proc screensize @@ -34,11 +34,11 @@ lda #<ScrBase ; Fill whole video RAM with blanks by calling ldx #>ScrBase ; memset appropriately jsr pushax - + lda #' ' ldx #$00 jsr pushax - + lda #<ScrRamSize ldx #>ScrRamSize jsr _memset @@ -46,7 +46,7 @@ lda #$00 ; Cursor in upper left corner sta CURS_X sta CURS_Y - + jmp plot ; Set the cursor position .endproc @@ -112,12 +112,12 @@ newline: lda #<(ScrBase + ScrFirstChar) ldx #>(ScrBase + ScrFirstChar) jsr pushax - + ; Scroll source address lda #<(ScrBase + ScrFirstChar + ScrollDist) ldx #>(ScrBase + ScrFirstChar + ScrollDist) jsr pushax - + ; Number of characters to move lda #<ScrollLength ldx #>ScrollLength @@ -129,7 +129,7 @@ newline: sta ptr1 lda #>(ScrBase + ScrFirstChar + ScrollLength) sta ptr1+1 - + ldy #ScrWidth ; Fill last line with blanks lda #' ' clrln: sta (ptr1),y @@ -150,7 +150,7 @@ putchar: ldy CURS_X sta (SCREEN_PTR),y ; Set char rts - + .endmacro .macro osi_screen_funcs ScrBase, ScrRamSize, ScrFirstChar, \ @@ -167,12 +167,13 @@ ScrTabLo: .repeat ScrHeight, I .byte <(ScrBase + ScrFirstChar + I * ScrollDist) .endrep - + ScrTabHi: .repeat ScrHeight, I .byte >(ScrBase + ScrFirstChar + I * ScrollDist) .endrep + .code osi_cputfuncs ScrBase, ScrFirstChar, ScrWidth, ScrHeight, \ @@ -180,4 +181,4 @@ osi_cputfuncs ScrBase, ScrFirstChar, ScrWidth, ScrHeight, \ osi_screensize ScrWidth, ScrHeight osi_clrscr ScrBase, ScrRamSize -.endmacro \ No newline at end of file +.endmacro diff --git a/test/err/cc65091001.c b/test/err/cc65091001.c index 65ce6ec83..8bcf158ac 100644 --- a/test/err/cc65091001.c +++ b/test/err/cc65091001.c @@ -27,4 +27,4 @@ int main() { printf("it works :)\n"); return 0; -} \ No newline at end of file +} diff --git a/test/ref/cc65070303.c b/test/ref/cc65070303.c index 6dbceeefc..049f14c40 100644 --- a/test/ref/cc65070303.c +++ b/test/ref/cc65070303.c @@ -35,4 +35,4 @@ seems to work. greetings,    Andreas -*/ \ No newline at end of file +*/ diff --git a/test/ref/cc65080227.c b/test/ref/cc65080227.c index 78afbb2c2..b6d068b2a 100644 --- a/test/ref/cc65080227.c +++ b/test/ref/cc65080227.c @@ -36,4 +36,4 @@ int main(void) 000023r 1 A4 rr ldy sreg 000025r 1 8C rr rr sty _b+2 000028r 1 8C rr rr sty _b+3 ; lost 4th BYTE ! -*/ \ No newline at end of file +*/ diff --git a/test/ref/cc65101209.c b/test/ref/cc65101209.c index c14543640..daeab8509 100644 --- a/test/ref/cc65101209.c +++ b/test/ref/cc65101209.c @@ -35,4 +35,4 @@ So testing with 999 gives: 999 mod 999 is 0 This seems to be systematic. -*/ \ No newline at end of file +*/ diff --git a/test/ref/cc65101216.c b/test/ref/cc65101216.c index eaaf0b3e4..1f6101afa 100644 --- a/test/ref/cc65101216.c +++ b/test/ref/cc65101216.c @@ -24,4 +24,4 @@ int main() printf("a / b = %d", c); return 0; -} \ No newline at end of file +} diff --git a/test/val/cc65091020.c b/test/val/cc65091020.c index d23b70a06..8f6b11761 100644 --- a/test/val/cc65091020.c +++ b/test/val/cc65091020.c @@ -24,4 +24,4 @@ int main() { return 0; } -/* Assert fails. (SVN rev 4381) */ \ No newline at end of file +/* Assert fails. (SVN rev 4381) */ From c977afe0b82884c32030e0e4d8764bd9e3a481c8 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 19:59:25 +0200 Subject: [PATCH 1200/2710] add comment explaining what the empty file is about --- libsrc/cx16/cpeeks.s | 1 + 1 file changed, 1 insertion(+) diff --git a/libsrc/cx16/cpeeks.s b/libsrc/cx16/cpeeks.s index e69de29bb..281cbd75d 100644 --- a/libsrc/cx16/cpeeks.s +++ b/libsrc/cx16/cpeeks.s @@ -0,0 +1 @@ +; empty file to prevent cbm/cpeeks.s being pulled into the cx16 lib From eb04ce8190260e6add52730f35fba3fe864bf5be Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 20:00:10 +0200 Subject: [PATCH 1201/2710] add more style checks --- .github/checks/Makefile | 10 +++++++++- .github/checks/lastline.sh | 22 ++++++++++++++++++++++ .github/checks/spaces.sh | 16 ++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100755 .github/checks/lastline.sh create mode 100755 .github/checks/spaces.sh diff --git a/.github/checks/Makefile b/.github/checks/Makefile index 3e85c0fd7..827606d01 100644 --- a/.github/checks/Makefile +++ b/.github/checks/Makefile @@ -1,7 +1,15 @@ .PHONY: tabs -check: tabs +check: tabs lastline tabs: tabs.sh @./tabs.sh + +lastline: lastline.sh + @./lastline.sh + +# checks that will currently fail (on a lot of files), so they are not included +# in the general "check" action +spaces: spaces.sh + @./spaces.sh diff --git a/.github/checks/lastline.sh b/.github/checks/lastline.sh new file mode 100755 index 000000000..d455481d1 --- /dev/null +++ b/.github/checks/lastline.sh @@ -0,0 +1,22 @@ +#! /bin/bash +OLDCWD=`pwd` +SCRIPT_PATH=`dirname $0` +cd $SCRIPT_PATH/../../ + +nl=' +' +nl=$'\n' +FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | while read f; do + t=$(tail -c2 $f; printf x); r1="${nl}$"; + [[ ${t%x} =~ $r1 ]] || echo "$f" +done` + +cd $OLDCWD + +if [ x"$FILES"x != xx ]; then + echo "error: found following files that have no newline at the end:" + for n in $FILES; do + echo $n + done + exit -1 +fi diff --git a/.github/checks/spaces.sh b/.github/checks/spaces.sh new file mode 100755 index 000000000..309ba9ac1 --- /dev/null +++ b/.github/checks/spaces.sh @@ -0,0 +1,16 @@ +#! /bin/bash +OLDCWD=`pwd` +SCRIPT_PATH=`dirname $0` +cd $SCRIPT_PATH/../../ + +FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l ' $' | grep -v "libwrk/" | grep -v "testwrk/"` + +cd $OLDCWD + +if [ x"$FILES"x != xx ]; then + echo "error: found dangling spaces in the following files:" + for n in $FILES; do + echo $n + done + exit -1 +fi From 422d245cab2dc16f10b58a5cbc66b60b80237644 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 21:13:51 +0300 Subject: [PATCH 1202/2710] Split files --- libsrc/atari7800/clrscr.s | 48 ++++++++++++++--------------- libsrc/atari7800/cputc.s | 44 ++------------------------- libsrc/atari7800/setcursor.s | 27 +---------------- libsrc/atari7800/textcolor.s | 58 ++++++++++++++++++++++++++++++++++++ 4 files changed, 85 insertions(+), 92 deletions(-) create mode 100644 libsrc/atari7800/textcolor.s diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s index 36af7cce2..b5b3a1ebf 100644 --- a/libsrc/atari7800/clrscr.s +++ b/libsrc/atari7800/clrscr.s @@ -3,34 +3,34 @@ .export _clrscr - .import _screen - .import pusha0,pushax - .include "extzp.inc" + .import _screen + .import pusha0,pushax + .include "extzp.inc" - .code + .code - .proc _clrscr + .proc _clrscr - lda #<(_screen) - ldx #>(_screen) - sta ptr7800 - stx ptr7800+1 - ldx #screenrows -@L1: ldy #charsperline - lda #0 -@L2: sta (ptr7800),y - dey - bne @L2 - lda ptr7800 - clc - adc #charsperline - bcc @L3 - inc ptr7800+1 -@L3: dex - bne @L1 - rts + lda #<(_screen) + ldx #>(_screen) + sta ptr7800 + stx ptr7800+1 + ldx #screenrows +@L1: ldy #charsperline + lda #0 +@L2: sta (ptr7800),y + dey + bne @L2 + lda ptr7800 + clc + adc #charsperline + bcc @L3 + inc ptr7800+1 +@L3: dex + bne @L1 + rts - .endproc + .endproc ;------------------------------------------------------------------------------- ; force the init constructor to be imported diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 7266190ee..4d2b8dbf6 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -6,23 +6,16 @@ ; .export _cputc - .export _textcolor + .export umula0 .import _gotoxy, gotox, gotoy, pusha0 .import pushax .import _screen .import CURS_X, CURS_Y + .import txtcolor .include "atari7800.inc" .include "extzp.inc" - .data -;----------------------------------------------------------------------------- -; Holder of the text colour offset -; 0 = red, 42 = green, 84 = white -; -txtcolor: - .byte 0 - .code ;--------------------------------------------------------------------------- @@ -52,39 +45,6 @@ umula0: lda ptr7800 ; Load the result rts -;----------------------------------------------------------------------------- -; Change the text colour -; -; Logical colour names are -; 0 = red -; 1 = green -; 2 = white -; -; The routine will also return the previous textcolor -; - .proc _textcolor - - beq @L2 - sec - sbc #1 - beq @L1 - lda #84 - jmp @L2 -@L1: lda #42 -@L2: ldy txtcolor - sta txtcolor ; Store new textcolor - tya - bne @L3 - rts ; Old colour was 0 -@L3: sec - sbc #42 - bne @L4 - lda #1 - rts ; Old colour was 1 -@L4: lda #2 - rts ; Old colour was 2 - .endproc - ;----------------------------------------------------------------------------- ; Put a character on screen ; diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 30151820a..caaa9c1d5 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -32,6 +32,7 @@ .import _zones .import cursor .import pusha, incsp1, pusha0, pushax, popa + .import umula0 .include "atari7800.inc" .include "extzp.inc" @@ -51,32 +52,6 @@ blink_time: .code -;--------------------------------------------------------------------------- -; 8x16 routine - -umula0: - ldy #8 ; Number of bits - lda #0 - lsr ptr7800 ; Get first bit into carry -@L0: bcc @L1 - - clc - adc ptrtmp - tax - lda ptrtmp+1 ; hi byte of left op - adc ptr7800+1 - sta ptr7800+1 - txa - -@L1: ror ptr7800+1 - ror a - ror ptr7800 - dey - bne @L0 - tax - lda ptr7800 ; Load the result - rts - ;----------------------------------------------------------------------------- ; Calculate cursorzone address ; You also need to set the cursorzone to point to the correct cursor Header diff --git a/libsrc/atari7800/textcolor.s b/libsrc/atari7800/textcolor.s new file mode 100644 index 000000000..6ccbcf491 --- /dev/null +++ b/libsrc/atari7800/textcolor.s @@ -0,0 +1,58 @@ +; +; Karri Kaksonen, 2022-04-16 +; +; + + .export _textcolor + .export txtcolor + + .include "atari7800.inc" + + .data +;----------------------------------------------------------------------------- +; Holder of the text colour offset +; 0 = red, 42 = green, 84 = white +; +txtcolor: + .byte 0 + + .code + +;----------------------------------------------------------------------------- +; Change the text colour +; +; Logical colour names are +; 0 = red +; 1 = green +; 2 = white +; +; The routine will also return the previous textcolor +; + .proc _textcolor + + beq @L2 + sec + sbc #1 + beq @L1 + lda #84 + jmp @L2 +@L1: lda #42 +@L2: ldy txtcolor + sta txtcolor ; Store new textcolor + tya + bne @L3 + rts ; Old colour was 0 +@L3: sec + sbc #42 + bne @L4 + lda #1 + rts ; Old colour was 1 +@L4: lda #2 + rts ; Old colour was 2 + .endproc + +;------------------------------------------------------------------------------- +; force the init constructor to be imported + + .import initconio +conio_init = initconio From ce4d1e0e54c010ef58b634120bf40cad7ae37e8b Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 21:21:27 +0300 Subject: [PATCH 1203/2710] Remove obsolete file and fix tabs --- asminc/atari7800.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/asminc/atari7800.inc b/asminc/atari7800.inc index 5b725c1c3..93e990870 100644 --- a/asminc/atari7800.inc +++ b/asminc/atari7800.inc @@ -8,6 +8,6 @@ .include "atari7800_maria.inc" ; constants for the conio implementation -charsperline = 20 -screenrows = 28 +charsperline = 20 +screenrows = 28 From ecd1040e070e7dff3e4ce21b12f805b8c4abad09 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 21:21:35 +0300 Subject: [PATCH 1204/2710] Remove obsolete file and fix tabs --- libsrc/atari7800/font160.data | Bin 8192 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 libsrc/atari7800/font160.data diff --git a/libsrc/atari7800/font160.data b/libsrc/atari7800/font160.data deleted file mode 100644 index dfbf65b63f56b90ca4a3837ce4e7e3309ecc4bce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 zcmeHI3zpk32uybGf9En^;lxP~(CV!P48sWL3Gd^f^?W>@cpNHfaB;x<zy9(I{5&2% zcuGTbzdmQ~`Tr#P`*{4~>B}R!U!ODg{C^Vt_3Fz%G5?tCjCX7pjpaPCz`j}nDme+n zis&$%c&ySo8E}y5yBvvRee%SrYr+JIn6Ek=4L*xdVBIlTF0tT5$VV4p0Kv>f>V-Fz zKbU{ae8xK#)mV+?{9pmSS^_BuLFE>xkwX=!hu%c=dAbhLX%S@8>MRM{F%(5OE1X(( zZe6I&0xcVz32UihKrnMhkEe)Ep<m2DW<KK`i)yUKa(KUiVjW8$1xcvf0yT12E%nfw zh%QgpK{_phY+9WqVLOJR2xo;;%Z{xJwOOELqcdSGRSXDb?&$Fp(J2JdW#xVc)NN1X zp+T6rsTUB5Ja?EB&n_=|OD-a|<Y_a>T?}SQ+B$I(wlGM>UVJsnR0I$lK)!2ZCNI+F zrM?#(+FY8#M9A-ihh-q)njJ-9zG8=Y;Smm(atUlp!1sxPj~(BXw?3LMfo0|=7mV-a z`Q16@39Nq4oKHsmY+mYn(J78iQ`qptOn6wz)9k1!m9LoavzteQ?cxL&TO8jf20qp~ zL1(9jZ9Tzak*klF^!%m<Ip)`Hehf-T+Pu_5axdTI-umS5RlrI-HurxGQ&6!q7N<<{ zhk0@-**L{y9s;>l%qAv2wD0pz4Q-Gi86jRrFaw;zd@x$k+`y#`)~a81f?bT*XYTSE zFp_|CDdO(28DsCDslmLQGSKp5fKQwp_*3r$eaMA47HPzX_I>`Tp-p9|WiPVTwru#c zI4K8S+lWRRCXJ{YoDO}Ld+U+G!dPG_GGv^0U0a5w1XZcbV`Ao+mZ&Q4Q%p{dMZusx zK2!y1hQ&QQz1d=itukYHo#yCBHdrCHuL%3~;Ty7(^OkOq9l}2gGr_?)7nw=lb6s)K z&zQsub6Lrq0_vQQXHnFN@>gs*bp#xMtpbHfNM7{tIIJ#%0{>)>E?<4s;UFJplrlJH zJ^hI6zF0XMFZ-FmL9}qmu@a9xV-k<akYtfcmHgxlPw4TYQ$FxjOLhcsj?zopK#?{W z{d7m-fUzPX@_8(93>FKmyE*pz5$SuZ0?fo*a9m|>N)gIMKafbk7hTa7i4g1(5$x(D z#GxF8Qp;{4fDT-jJay3qiLmyLzA-YvVutn6Wq+$quSM19imJ$dKO#P!k~yA-UN#Tb zV7TL77Soyo4NADF3&EU(q3s!Z^8-XHF|6mT|NkMVGveup92l!C-VY<ojdd*+biqJd zYMWX=4yb*mNTr$sXyoQg?`>yVGk}|a*zrOzCt-zzXZ)^~azkJdDi+yu*8l%I{nke` zEX1)UrUYSZe&U{(r@4XBlBP|NTH01*U~=Qp?d{?{*9>S-!nzE=1m+M<4qV~)Hp%iA z*>l$a|66N!&Dz;w#moFF(HtB>htHU&x!b?@YMD!KIJZmx8hek6zdO9%-8?A0|DFX* zK`=_NV9m*%8H}3fw}hUB$yZR`Il~7~%G*goz7I7RA6}_;68mRK$;Bc7FE%v<IdYmi z+~Y5c>2Cf%$-95XY0C9Isg|8rUSiX42aToLl*bpqg{>!`uFF43$oJW`+uwC5_0JO8 z#Ue;e`S|S+a9lF8Uw%yw8t%JiHDl?}go!c}RAWI(-mU5HiK**Zm@Wn7AtdA-XO(}F zgF#0R3H198f!=g^y3dGQEQ;XAZXA8=m2sTA%PYNeFTV2N;qGe!U=pUD0N^IbcD!K9 zSO;+VY)T>FNyO$raLGqPjnZRee!FCxmc<8o*MEw^d3^x5cI70PiJH61E3MXUcjdvu zUDpJ_BuqU4z)g_tc)^sh4&d_HltRLjh|PiEl8=PirN_wpcF8y`ix2Xy{}hAs`T%h4 z%1JO+eC{%@v|78}l?M-ZUlRb6F!clgH$k@J1yja4fXio73JFglHV1-BJ`!q|9wYPH YCF8U#KFGWNQw+}Q1HiQ_7eO`i2mhTJ6#xJL From 702045cce1ba9842b0fc80375784d01e7181b6fa Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 21:22:44 +0300 Subject: [PATCH 1205/2710] Fix tabs --- libsrc/atari7800/conio.s | 316 +++++++++++++++++++-------------------- 1 file changed, 158 insertions(+), 158 deletions(-) diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index 777de004b..ad1c4a976 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -8,11 +8,11 @@ .constructor initconio .include "atari7800.inc" - .import _font160 - .import _get_tv - .export _screen - .export _zones - .export _dll + .import _font160 + .import _get_tv + .export _screen + .export _zones + .export _dll .bss _screen: @@ -22,43 +22,43 @@ _screen: ; Macros used to generate lists .macro DLLentry offset, addr - .byte offset - .byte >addr - .byte <addr + .byte offset + .byte >addr + .byte <addr .endmacro .macro NullHeader offset, zero - .byte offset - .byte zero + .byte offset + .byte zero .endmacro .macro Header addr, palwidth, hpos - .byte <addr - .byte palwidth - .byte >addr - .byte hpos + .byte <addr + .byte palwidth + .byte >addr + .byte hpos .endmacro .macro XHeader addr, flags, palwidth, hpos - .byte <addr - .byte flags - .byte >addr - .byte palwidth - .byte hpos + .byte <addr + .byte flags + .byte >addr + .byte palwidth + .byte hpos .endmacro .macro TextZone row - ; Text - .byte <(_screen + row * charsperline) - .byte $60 - .byte >(_screen + row * charsperline) - .byte 12 - .byte 0 - ; Cursor - .byte 254 - .byte 0 - .byte >_font160 - .byte 0 + ; Text + .byte <(_screen + row * charsperline) + .byte $60 + .byte >(_screen + row * charsperline) + .byte 12 + .byte 0 + ; Cursor + .byte 254 + .byte 0 + .byte >_font160 + .byte 0 .endmacro ;----------------------------------------------------------------------------- @@ -68,155 +68,155 @@ _screen: .data _zones: -zone0: TextZone 0 -nh: NullHeader 0, 0 -zone1: TextZone 1 - NullHeader 0, 0 -zone2: TextZone 2 - NullHeader 0, 0 -zone3: TextZone 3 - NullHeader 0, 0 -zone4: TextZone 4 - NullHeader 0, 0 -zone5: TextZone 5 - NullHeader 0, 0 -zone6: TextZone 6 - NullHeader 0, 0 -zone7: TextZone 7 - NullHeader 0, 0 -zone8: TextZone 8 - NullHeader 0, 0 -zone9: TextZone 9 - NullHeader 0, 0 -zone10: TextZone 10 - NullHeader 0, 0 -zone11: TextZone 11 - NullHeader 0, 0 -zone12: TextZone 12 - NullHeader 0, 0 -zone13: TextZone 13 - NullHeader 0, 0 -zone14: TextZone 14 - NullHeader 0, 0 -zone15: TextZone 15 - NullHeader 0, 0 -zone16: TextZone 16 - NullHeader 0, 0 -zone17: TextZone 17 - NullHeader 0, 0 -zone18: TextZone 18 - NullHeader 0, 0 -zone19: TextZone 19 - NullHeader 0, 0 -zone20: TextZone 20 - NullHeader 0, 0 -zone21: TextZone 21 - NullHeader 0, 0 -zone22: TextZone 22 - NullHeader 0, 0 -zone23: TextZone 23 - NullHeader 0, 0 -zone24: TextZone 24 - NullHeader 0, 0 -zone25: TextZone 25 - NullHeader 0, 0 -zone26: TextZone 26 - NullHeader 0, 0 -zone27: TextZone 27 - NullHeader 0, 0 +zone0: TextZone 0 +nh: NullHeader 0, 0 +zone1: TextZone 1 + NullHeader 0, 0 +zone2: TextZone 2 + NullHeader 0, 0 +zone3: TextZone 3 + NullHeader 0, 0 +zone4: TextZone 4 + NullHeader 0, 0 +zone5: TextZone 5 + NullHeader 0, 0 +zone6: TextZone 6 + NullHeader 0, 0 +zone7: TextZone 7 + NullHeader 0, 0 +zone8: TextZone 8 + NullHeader 0, 0 +zone9: TextZone 9 + NullHeader 0, 0 +zone10: TextZone 10 + NullHeader 0, 0 +zone11: TextZone 11 + NullHeader 0, 0 +zone12: TextZone 12 + NullHeader 0, 0 +zone13: TextZone 13 + NullHeader 0, 0 +zone14: TextZone 14 + NullHeader 0, 0 +zone15: TextZone 15 + NullHeader 0, 0 +zone16: TextZone 16 + NullHeader 0, 0 +zone17: TextZone 17 + NullHeader 0, 0 +zone18: TextZone 18 + NullHeader 0, 0 +zone19: TextZone 19 + NullHeader 0, 0 +zone20: TextZone 20 + NullHeader 0, 0 +zone21: TextZone 21 + NullHeader 0, 0 +zone22: TextZone 22 + NullHeader 0, 0 +zone23: TextZone 23 + NullHeader 0, 0 +zone24: TextZone 24 + NullHeader 0, 0 +zone25: TextZone 25 + NullHeader 0, 0 +zone26: TextZone 26 + NullHeader 0, 0 +zone27: TextZone 27 + NullHeader 0, 0 _dll: -PALscanlines: ; 25 lines - DLLentry 15, nh - DLLentry 8, nh +PALscanlines: ; 25 lines + DLLentry 15, nh + DLLentry 8, nh -Topscanlines: ; 9 lines - DLLentry 8, nh +Topscanlines: ; 9 lines + DLLentry 8, nh Displaylines: - DLLentry $80+7, zone0 ; NMI interrupt from end of prev zone - DLLentry 7, zone1 - DLLentry 7, zone2 - DLLentry 7, zone3 - DLLentry 7, zone4 - DLLentry 7, zone5 - DLLentry 7, zone6 - DLLentry 7, zone7 - DLLentry 7, zone8 - DLLentry 7, zone9 - DLLentry 7, zone10 - DLLentry 7, zone11 - DLLentry 7, zone12 - DLLentry 7, zone13 - DLLentry 7, zone14 - DLLentry 7, zone15 - DLLentry 7, zone16 - DLLentry 7, zone17 - DLLentry 7, zone18 - DLLentry 7, zone19 - DLLentry 7, zone20 - DLLentry 7, zone21 - DLLentry 7, zone22 - DLLentry 7, zone23 - DLLentry 7, zone24 - DLLentry 7, zone25 - DLLentry 7, zone26 - DLLentry 7, zone27 + DLLentry $80+7, zone0 ; NMI interrupt from end of prev zone + DLLentry 7, zone1 + DLLentry 7, zone2 + DLLentry 7, zone3 + DLLentry 7, zone4 + DLLentry 7, zone5 + DLLentry 7, zone6 + DLLentry 7, zone7 + DLLentry 7, zone8 + DLLentry 7, zone9 + DLLentry 7, zone10 + DLLentry 7, zone11 + DLLentry 7, zone12 + DLLentry 7, zone13 + DLLentry 7, zone14 + DLLentry 7, zone15 + DLLentry 7, zone16 + DLLentry 7, zone17 + DLLentry 7, zone18 + DLLentry 7, zone19 + DLLentry 7, zone20 + DLLentry 7, zone21 + DLLentry 7, zone22 + DLLentry 7, zone23 + DLLentry 7, zone24 + DLLentry 7, zone25 + DLLentry 7, zone26 + DLLentry 7, zone27 Bottomscanlines: - DLLentry $80+15, nh ; NMI interrupt at end of display - DLLentry 9, nh - DLLentry 15, nh - DLLentry 8, nh + DLLentry $80+15, nh ; NMI interrupt at end of display + DLLentry 9, nh + DLLentry 15, nh + DLLentry 8, nh ;----------------------------------------------------------------------------- ; Set up the screen to 320a mode ; .segment "ONCE" -CTRL_MODE160 .set 0 -CTRL_MODEAC .set 3 -CTRL_KANGOFF .set 0 -CTRL_BCBLACK .set 0 -CTRL_CHAR1B .set 0 -CTRL_CHAR2B .set $10 -CTRL_DMAON .set $40 -CTRL_CKOFF .set 0 +CTRL_MODE160 .set 0 +CTRL_MODEAC .set 3 +CTRL_KANGOFF .set 0 +CTRL_BCBLACK .set 0 +CTRL_CHAR1B .set 0 +CTRL_CHAR2B .set $10 +CTRL_DMAON .set $40 +CTRL_CKOFF .set 0 ;----------------------------------------------------------------------------- ; Initialize the conio display lists and zones ; .proc initconio - jsr _get_tv - bne pal - lda #<Topscanlines - sta DPPL - lda #>Topscanlines - sta DPPH - jmp vblankon -pal: lda #<PALscanlines - sta DPPL - lda #>PALscanlines - sta DPPH + jsr _get_tv + bne pal + lda #<Topscanlines + sta DPPL + lda #>Topscanlines + sta DPPH + jmp vblankon +pal: lda #<PALscanlines + sta DPPL + lda #>PALscanlines + sta DPPH vblankon: - lda MSTAT - bmi vblankon + lda MSTAT + bmi vblankon vblankoff: - lda MSTAT - bpl vblankoff - lda #>_font160 - sta CHBASE - lda #(CTRL_MODE160 | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR2B | CTRL_DMAON | CTRL_CKOFF) - sta CTRL - lda #$00 ; Black background - sta BKGRND - lda #$33 ; Red - sta P0C1 - lda #$c8 ; Green - sta P0C2 - lda #$0f ; White - sta P0C3 + lda MSTAT + bpl vblankoff + lda #>_font160 + sta CHBASE + lda #(CTRL_MODE160 | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR2B | CTRL_DMAON | CTRL_CKOFF) + sta CTRL + lda #$00 ; Black background + sta BKGRND + lda #$33 ; Red + sta P0C1 + lda #$c8 ; Green + sta P0C2 + lda #$0f ; White + sta P0C3 rts .endproc From 1585a0532a876474f8caa89618e20104971d38c5 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 21:32:22 +0300 Subject: [PATCH 1206/2710] Add x=0 to textcolor --- libsrc/atari7800/textcolor.s | 1 + 1 file changed, 1 insertion(+) diff --git a/libsrc/atari7800/textcolor.s b/libsrc/atari7800/textcolor.s index 6ccbcf491..be98ed340 100644 --- a/libsrc/atari7800/textcolor.s +++ b/libsrc/atari7800/textcolor.s @@ -39,6 +39,7 @@ txtcolor: @L1: lda #42 @L2: ldy txtcolor sta txtcolor ; Store new textcolor + ldx #0 tya bne @L3 rts ; Old colour was 0 From 1486886e13366a470b54f1573756683371fc8505 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 21:48:57 +0300 Subject: [PATCH 1207/2710] Add info --- libsrc/atari7800/font160.s | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s index e5ebbede2..00b62c36a 100644 --- a/libsrc/atari7800/font160.s +++ b/libsrc/atari7800/font160.s @@ -1,3 +1,21 @@ +; The internal font structure for Atari7800 needs a full set of 128 +; characters. Each character is 16 x 8 bits. +; The font consists of 8 rows of data: +: row7 +; row6 +; row5 +; row4 +; row3 +; row2 +; row1 +; row0 +; Each row is 256 bytes long +; As we have 2 bits per pixel we need 2 bytes to represent +; one character. So we can fit 128 characters in this font +; When you later use the font you must address the characters as +; 0, 2, 4, 6, ... 254 +; Odd indices cannot be used. + .export _font160 .rodata .align 256 From 9fecf0b2cc70f08743120b396478f0b45ed58abb Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 21:54:52 +0300 Subject: [PATCH 1208/2710] Add info --- libsrc/atari7800/font160.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s index 00b62c36a..69c5774ab 100644 --- a/libsrc/atari7800/font160.s +++ b/libsrc/atari7800/font160.s @@ -1,7 +1,7 @@ ; The internal font structure for Atari7800 needs a full set of 128 ; characters. Each character is 16 x 8 bits. ; The font consists of 8 rows of data: -: row7 +; row7 ; row6 ; row5 ; row4 From 945291fd69d9eed21a4ccd1b1859423222d0a250 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 22:08:03 +0200 Subject: [PATCH 1209/2710] updated a bit --- Contributing.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Contributing.md b/Contributing.md index 1aeae7786..c8681c7ee 100644 --- a/Contributing.md +++ b/Contributing.md @@ -11,8 +11,19 @@ This document contains all kinds of information that you should know if you want ## All Sources +### TABs and spaces + +This is an ongoing controversial topic - everyone knows that. However, the following is how we do it :) + * TAB characters must be expanded to spaces. +* 4 spaces per indention level (rather than 8) are preferred, especially if there are many different levels. +* No extra spaces at the end of lines. * All text files must end with new-line characters. Don't leave the last line "dangling". + +The (bash) scipts used to check the above rules can be found in ```.github/check``` + +### misc + * 80 characters is the desired maximum width of files. But, it isn't a "strong" rule; sometimes, you will want to type longer lines, in order to keep the parts of expressions or comments together on the same line. * You should avoid typing non-ASCII characters. * If you change "normal" source code into comments, then you must add a comment about why that code is a comment. @@ -78,6 +89,19 @@ color := $0787 * Two blank lines between ```<sect1>``` sections. * One blank line between other sections. +# Library implementation rules + +* By default the toolchain must output a "standard" binary for the platform, no emulator formats, no extra headers used by tools. If the resulting binaries can not be run as is on emulators or eg flash cartridges, the process of converting them to something that can be used with these should be documented in the user manual. +* Generally every function should live in a seperate source file - unless the functions are so closely related that splitting makes no sense. +* Source files should not contain commented out code - if they do, there should be a comment that explains why that commented out code exists. + +# Makefile rules + +* Makefiles must generally work on both *nix (ba)sh and windows cmd.exe. +* Makefiles must not use external tools that are not provided by the cc65 toolchain itself. + +The only exception to the above are actions that are exclusive to the github actions - those may rely on bash and/or linux tools. + # Documentation rules ## User manual (LinuxDoc) From bfb8568a5f45e9138bd3850be22675615c650265 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:04:58 +0200 Subject: [PATCH 1210/2710] remove dangling spaces --- asminc/_file.inc | 2 +- asminc/atari5200.inc | 14 ++++++------ asminc/atari_antic.inc | 14 ++++++------ asminc/em-kernel.inc | 2 +- asminc/errno.inc | 2 +- asminc/lynx.inc | 16 ++++++------- asminc/opcodes.inc | 34 +++++++++++++-------------- asminc/telestrat.inc | 48 +++++++++++++++++++-------------------- asminc/tgi-vectorfont.inc | 2 +- asminc/utsname.inc | 2 +- asminc/zeropage.inc | 2 +- 11 files changed, 69 insertions(+), 69 deletions(-) diff --git a/asminc/_file.inc b/asminc/_file.inc index 2f9938a3e..a9ac1e34a 100644 --- a/asminc/_file.inc +++ b/asminc/_file.inc @@ -24,4 +24,4 @@ _FPUSHBACK = $08 ; File table .global __filetab - + diff --git a/asminc/atari5200.inc b/asminc/atari5200.inc index a17268de2..b560c06af 100644 --- a/asminc/atari5200.inc +++ b/asminc/atari5200.inc @@ -7,7 +7,7 @@ ;------------------------------------------------------------------------- ; ATASCII CHARACTER DEFS ;------------------------------------------------------------------------- - + ATEOL = $9B ; END-OF-LINE, used by CONIO ;------------------------------------------------------------------------- @@ -27,9 +27,9 @@ CH_VLINE = $01 ; exclamation mark POKMSK = $00 ; Mask for Pokey IRQ enable RTCLOK = $01 ; 60 hz. clock -JUMP = $01 +JUMP = $01 CRITIC = $03 ; Critical section -ATRACT = $04 ; Attract Mode +ATRACT = $04 ; Attract Mode SDLSTL = $05 ; DLISTL Shadow SDLSTH = $06 ; DLISTH " @@ -66,20 +66,20 @@ SAVMSC = $1B ; pointer to screen memory (conio) ;------------------------------------------------------------------------- ;Interrupt Vectors - -VIMIRQ = $0200 ; Immediate IRQ + +VIMIRQ = $0200 ; Immediate IRQ ; Preset $FC03 (SYSIRQ) VVBLKI = $0202 ; Vblank immediate ; Preset $FCB8 (SYSVBL) VVBLKD = $0204 ; Vblank deferred ; Preset $FCB2 (XITVBL) -VDSLST = $0206 ; Display List +VDSLST = $0206 ; Display List ; Preset $FEA1 (OSDLI) VKYBDI = $0208 ; Keyboard immediate ; Preset $FD02 (SYSKBD) VKYBDF = $020A ; Deferred Keyboard ; Preset $FCB2 (XITVBL) -VTRIGR = $020C ; Soft Trigger +VTRIGR = $020C ; Soft Trigger VBRKOP = $020E ; BRK Opcode VSERIN = $0210 ; Serial in Ready VSEROR = $0212 ; Serial Out Ready diff --git a/asminc/atari_antic.inc b/asminc/atari_antic.inc index a4557c7b4..9a097e05a 100644 --- a/asminc/atari_antic.inc +++ b/asminc/atari_antic.inc @@ -76,13 +76,13 @@ DL_CHR20x8x2 = 6 ; colour (duochrome per character), 20 character DL_CHR20x16x2 = 7 ; colour (duochrome per character), 20 character & 16 scanlines per mode line (GR. 2) DL_MAP40x8x4 = 8 ; colour, 40 pixel & 8 scanlines per mode line (GR. 3) -DL_MAP80x4x2 = 9 ; 'duochrome', 80 pixel & 4 scanlines per mode line (GR.4) -DL_MAP80x4x4 = 10 ; colour, 80 pixel & 4 scanlines per mode line (GR.5) -DL_MAP160x2x2 = 11 ; 'duochrome', 160 pixel & 2 scanlines per mode line (GR.6) -DL_MAP160x1x2 = 12 ; 'duochrome', 160 pixel & 1 scanline per mode line (GR.14) -DL_MAP160x2x4 = 13 ; 4 colours, 160 pixel & 2 scanlines per mode line (GR.7) -DL_MAP160x1x4 = 14 ; 4 colours, 160 pixel & 1 scanline per mode line (GR.15) -DL_MAP320x1x1 = 15 ; monochrome, 320 pixel & 1 scanline per mode line (GR.8) +DL_MAP80x4x2 = 9 ; 'duochrome', 80 pixel & 4 scanlines per mode line (GR.4) +DL_MAP80x4x4 = 10 ; colour, 80 pixel & 4 scanlines per mode line (GR.5) +DL_MAP160x2x2 = 11 ; 'duochrome', 160 pixel & 2 scanlines per mode line (GR.6) +DL_MAP160x1x2 = 12 ; 'duochrome', 160 pixel & 1 scanline per mode line (GR.14) +DL_MAP160x2x4 = 13 ; 4 colours, 160 pixel & 2 scanlines per mode line (GR.7) +DL_MAP160x1x4 = 14 ; 4 colours, 160 pixel & 1 scanline per mode line (GR.15) +DL_MAP320x1x1 = 15 ; monochrome, 320 pixel & 1 scanline per mode line (GR.8) ; modifiers on mode lines... diff --git a/asminc/em-kernel.inc b/asminc/em-kernel.inc index 889ffba98..9e89b6f4e 100644 --- a/asminc/em-kernel.inc +++ b/asminc/em-kernel.inc @@ -75,7 +75,7 @@ EMD_API_VERSION = $02 ;------------------------------------------------------------------------------ ; Driver entry points - + .global emd_install .global emd_uninstall .global emd_pagecount diff --git a/asminc/errno.inc b/asminc/errno.inc index 6e5cce42b..1efe88cda 100644 --- a/asminc/errno.inc +++ b/asminc/errno.inc @@ -1,4 +1,4 @@ -; +; ; Ullrich von Bassewitz, 16.05.2000 ; diff --git a/asminc/lynx.inc b/asminc/lynx.inc index 81a60bf2e..403d15d07 100644 --- a/asminc/lynx.inc +++ b/asminc/lynx.inc @@ -135,35 +135,35 @@ STIMCTLB = $FD1F TIM0BKUP = $FD00 TIM0CTLA = $FD01 TIM0CNT = $FD02 -TIM0CTLB = $FD03 +TIM0CTLB = $FD03 TIM1BKUP = $FD04 TIM1CTLA = $FD05 TIM1CNT = $FD06 -TIM1CTLB = $FD07 +TIM1CTLB = $FD07 TIM2BKUP = $FD08 TIM2CTLA = $FD09 TIM2CNT = $FD0A -TIM2CTLB = $FD0B +TIM2CTLB = $FD0B TIM3BKUP = $FD0C TIM3CTLA = $FD0D TIM3CNT = $FD0E -TIM3CTLB = $FD0F +TIM3CTLB = $FD0F TIM4BKUP = $FD10 TIM4CTLA = $FD11 TIM4CNT = $FD12 -TIM4CTLB = $FD13 +TIM4CTLB = $FD13 TIM5BKUP = $FD14 TIM5CTLA = $FD15 TIM5CNT = $FD16 -TIM5CTLB = $FD17 +TIM5CTLB = $FD17 TIM6BKUP = $FD18 TIM6CTLA = $FD19 TIM6CNT = $FD1A -TIM6CTLB = $FD1B +TIM6CTLB = $FD1B TIM7BKUP = $FD1C TIM7CTLA = $FD1D TIM7CNT = $FD1E -TIM7CTLB = $FD1F +TIM7CTLB = $FD1F ; Mikey Audio diff --git a/asminc/opcodes.inc b/asminc/opcodes.inc index e6b7e73df..b610360e1 100644 --- a/asminc/opcodes.inc +++ b/asminc/opcodes.inc @@ -3,23 +3,23 @@ ; ; Christian Krüger, latest change: 18-Sep-2010 ; -; This software is provided 'as-is', without any expressed or implied -; warranty. In no event will the authors be held liable for any damages -; arising from the use of this software. -; -; Permission is granted to anyone to use this software for any purpose, -; including commercial applications, and to alter it and redistribute it -; freely, subject to the following restrictions: -; -; 1. The origin of this software must not be misrepresented; you must not -; claim that you wrote the original software. If you use this software -; in a product, an acknowledgment in the product documentation would be -; appreciated but is not required. -; 2. Altered source versions must be plainly marked as such, and must not -; be misrepresented as being the original software. -; 3. This notice may not be removed or altered from any source -; distribution. -; +; This software is provided 'as-is', without any expressed or implied +; warranty. In no event will the authors be held liable for any damages +; arising from the use of this software. +; +; Permission is granted to anyone to use this software for any purpose, +; including commercial applications, and to alter it and redistribute it +; freely, subject to the following restrictions: +; +; 1. The origin of this software must not be misrepresented; you must not +; claim that you wrote the original software. If you use this software +; in a product, an acknowledgment in the product documentation would be +; appreciated but is not required. +; 2. Altered source versions must be plainly marked as such, and must not +; be misrepresented as being the original software. +; 3. This notice may not be removed or altered from any source +; distribution. +; ; Opcode-Table ; ------------ diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index 79ac2d566..703dbaa3b 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -17,7 +17,7 @@ FNAME_LEN = 11 ; Maximum length of file-name ; --------------------------------------------------------------------------- ; I/O Identifier ; Theses identifers are used for channel management -; +; XKBD = $80 ; Keyboard XRSE = $83 ; RS232 in @@ -87,27 +87,27 @@ HRSFB := $57 VABKP1 := $58 ; RS232T -; b0-b3 : speed +; b0-b3 : speed ; 1111 => 19200 bps (please note that telestrat can't handle this speed without stopping all IRQ except ACIA's one) ; 1100 => 9600 bps (default from TELEMON) -; 1110 => 4800 bps -; 1010 => 2400 bps -; 1000 => 1200 bps -; 0111 => 600 bps -; 0110 => 300 bps -; 0101 => 150 bps -; 0010 => 75 bps +; 1110 => 4800 bps +; 1010 => 2400 bps +; 1000 => 1200 bps +; 0111 => 600 bps +; 0110 => 300 bps +; 0101 => 150 bps +; 0010 => 75 bps ; b4 : 0 external clock, 1 internal clock ; b6-b5 : 00 8 bits ; 01 7 bits ; 10 6 bits ; 11 5 bits -; b7 : 0 a stop +; b7 : 0 a stop RS232T := $59 -; RS232C +; RS232C ; b0-b3 : 0 ; b4 : 1 if echo ; b5 : 1 if parity @@ -218,7 +218,7 @@ SCREEN := $BB80 ; TELEMON primitives (2.4 & 3.x) -; all values are used to call bank 7 of telestrat cardridge. It works with 'brk value' +; all values are used to call bank 7 of telestrat cardridge. It works with 'brk value' XOP0 = $00 ; Open device on channel 0 XOP1 = $01 ; Open device on channel 1 XOP2 = $02 ; Open device on channel 2 @@ -281,8 +281,8 @@ XWRCLK = $3E ; Displays clock in the address in A & Y registe XSONPS = $40 ; Send data to PSG register (14 values) XOUPS = $42 ; Send Oups sound into PSG XPLAY = $43 ; Play a sound -XSOUND = $44 -XMUSIC = $45 +XSOUND = $44 +XMUSIC = $45 XZAP = $46 ; Send Zap sound to PSG XSHOOT = $47 @@ -303,13 +303,13 @@ XFWR = $4E ; Put a char on the first screen. Only available ; Keyboard primitives XALLKB = $50 ; Read Keyboard, and populate KBDCOL XKBDAS = $51 ; Ascii conversion -XGOKBD = $52 ; Swap keyboard type (Qwerty, French ...) +XGOKBD = $52 ; Swap keyboard type (Qwerty, French ...) ; Buffer management XECRBU = $54 ; Write A or AY in the buffer XLISBU = $55 ; Read A or AY in the buffer XTSTBU = $56 -XVIDBU = $57 ; Flush the buffer +XVIDBU = $57 ; Flush the buffer XINIBU = $58 ; Initialize the buffer X XDEFBU = $59 ; Reset all value of the buffer XBUSY = $5A ; Test if the buffer is empty @@ -328,7 +328,7 @@ XMSAVE = $61 ; Write a file to Minitel XFREE = $62 ; Only in TELEMON 3.x (bank 7 of Orix) -; Next Minitel primitives +; Next Minitel primitives XWCXFI = $63 ; Wait connection XLIGNE = $64 ; XDECON = $65 ; Minitel disconnection @@ -340,7 +340,7 @@ XHRSSE = $8C ; Set hires position cursor XDRAWA = $8D ; Draw a line absolute XDRAWR = $8E ; Draw a line (relative) XCIRCL = $8F ; Draw a circle -XCURSE = $90 ; Plot a pixel +XCURSE = $90 ; Plot a pixel XCURMO = $91 ; Move to x,y pos in Hires XPAPER = $92 XINK = $93 @@ -358,8 +358,8 @@ XPING = $9D ; Send Ping sound to PSG PWD_PTR = $00 ; --------------------------------------------------------------------------- -; -BUFTRV := $100 +; +BUFTRV := $100 ; --------------------------------------------------------------------------- @@ -377,7 +377,7 @@ TIMES := $211 TIMEM := $212 TIMEH := $213 FLGCLK := $214 -FLGCLK_FLAG := $215 +FLGCLK_FLAG := $215 FLGCUR := $216 ; Cursor management flag ; screens position managements @@ -466,7 +466,7 @@ DESALO := $52D FISALO := $52F EXSALO := $531 EXTDEF := $55D ; Default extension. At the start of telemon, it's set to ".COM" -BUFEDT := $590 ; Buffer edition +BUFEDT := $590 ; Buffer edition MAX_BUFEDT_LENGTH=110 @@ -480,7 +480,7 @@ BUFBUF := $c080 ; --------------------------------------------------------------------------- ; Stratsed vectors -; Stratsed is the main OS for Telestrat +; Stratsed is the main OS for Telestrat XMERGE := $FF0E XFST := $FF11 XSPUT := $FF14 @@ -532,7 +532,7 @@ XPMAP := $FFA7 XRWTS := $FFAA ; --------------------------------------------------------------------------- -; MACRO +; MACRO .macro BRK_TELEMON value .byte $00,value diff --git a/asminc/tgi-vectorfont.inc b/asminc/tgi-vectorfont.inc index ffe6ac686..124fe93cc 100644 --- a/asminc/tgi-vectorfont.inc +++ b/asminc/tgi-vectorfont.inc @@ -54,7 +54,7 @@ TGI_VF_CCOUNT = (TGI_VF_LASTCHAR - TGI_VF_FIRSTCHAR + 1) ; Font data loaded directly from file .struct TGI_VECTORFONT TOP .byte ; Height of char - BOTTOM .byte ; Descender + BOTTOM .byte ; Descender HEIGHT .byte ; Maximum char height WIDTHS .byte ::TGI_VF_CCOUNT ; Char widths CHARS .word ::TGI_VF_CCOUNT ; Pointer to character defs diff --git a/asminc/utsname.inc b/asminc/utsname.inc index 2c7052ce1..6d978dd21 100644 --- a/asminc/utsname.inc +++ b/asminc/utsname.inc @@ -33,7 +33,7 @@ -; Struct utsname +; Struct utsname .struct utsname sysname .byte 17 nodename .byte 9 diff --git a/asminc/zeropage.inc b/asminc/zeropage.inc index 1ba035868..6627d86b6 100644 --- a/asminc/zeropage.inc +++ b/asminc/zeropage.inc @@ -12,7 +12,7 @@ .globalzp ptr1, ptr2, ptr3, ptr4 .globalzp tmp1, tmp2, tmp3, tmp4 .globalzp regbank - + ; The size of the register bank regbanksize = 6 From 680f0c17f5175d4b67e276345b9d72b19ada525d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:05:10 +0200 Subject: [PATCH 1211/2710] remove dangling spaces --- doc/atari5200.sgml | 4 ++-- doc/ca65.sgml | 2 +- doc/da65.sgml | 10 +++++----- doc/geos.sgml | 2 +- doc/intro.sgml | 4 ++-- doc/lynx.sgml | 2 +- doc/sim65.sgml | 2 +- doc/sym1.sgml | 4 ++-- doc/telestrat.sgml | 14 +++++++------- 9 files changed, 22 insertions(+), 22 deletions(-) diff --git a/doc/atari5200.sgml b/doc/atari5200.sgml index 599ffe3c9..29e6aadb3 100644 --- a/doc/atari5200.sgml +++ b/doc/atari5200.sgml @@ -84,7 +84,7 @@ The names are the usual ones you can find in system reference manuals. Example: tics = OS.rtclok[1] // get ticks ... </verb></tscreen> - + <sect1>Atari 5200 specific functions<p> <itemize> @@ -221,7 +221,7 @@ you cannot use any of the following functions (and a few others): <sect1>CAR format<p> -AtariROMMaker (<url url="https://www.wudsn.com/index.php/productions-atari800/tools/atarirommaker"> ) +AtariROMMaker (<url url="https://www.wudsn.com/index.php/productions-atari800/tools/atarirommaker"> ) can be used to create a <tt/.CAR/ file from the binary ROM image cc65 generates. This might be more convenient when working with emulators. diff --git a/doc/ca65.sgml b/doc/ca65.sgml index c0ebe3688..19fd3aa2a 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -3622,7 +3622,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE" <sect1><tt>.PDTV</tt><label id=".PDTV"><p> - Enable the 6502DTV instruction set. This is a superset of the 6502 + Enable the 6502DTV instruction set. This is a superset of the 6502 instruction set. See: <tt><ref id=".P02" name=".P02"></tt> diff --git a/doc/da65.sgml b/doc/da65.sgml index 1702694a0..bf074a667 100644 --- a/doc/da65.sgml +++ b/doc/da65.sgml @@ -119,9 +119,9 @@ Here is a description of all the command line options: <item>4510 </itemize> - 6502x is for the NMOS 6502 with unofficial opcodes. 6502dtv is for the - emulated CPU of the C64DTV device. huc6280 is the CPU of the PC engine. - 4510 is the CPU of the Commodore C65. Support for the 65816 currently + 6502x is for the NMOS 6502 with unofficial opcodes. 6502dtv is for the + emulated CPU of the C64DTV device. huc6280 is the CPU of the PC engine. + 4510 is the CPU of the Commodore C65. Support for the 65816 currently is not available. @@ -253,8 +253,8 @@ for this CPU. Invalid opcodes are translated into <tt/.byte/ commands. With the command line option <tt><ref id="option--cpu" name="--cpu"></tt>, the disassembler may be told to recognize either the 65SC02 or 65C02 CPUs. The latter understands the same opcodes as the former, plus 16 additional bit -manipulation and bit test-and-branch commands. Using 6502x as CPU the illegal -opcodes of 6502 CPU are detected and displayed. 6502dtv setting recognizes the +manipulation and bit test-and-branch commands. Using 6502x as CPU the illegal +opcodes of 6502 CPU are detected and displayed. 6502dtv setting recognizes the emulated CPU instructons of the C64DTV device. diff --git a/doc/geos.sgml b/doc/geos.sgml index c3601e741..8a43d134b 100644 --- a/doc/geos.sgml +++ b/doc/geos.sgml @@ -1332,7 +1332,7 @@ This function returns the GEOS Kernal version combined (by logical OR) with the <p> This function returns the PAL/NTSC flag combined (by logical OR) with the 40/80 columns flag. This is not the best way to check if the screen has 40 or 80 columns since a PAL/NTSC check is always -performed and it can take as long as a full raster frame. If you just want to know if the +performed and it can take as long as a full raster frame. If you just want to know if the screen has 40 or 80 columns use the expression <tt/graphMode & 0x80/ which returns <tt/0/ for 40 columns and <tt/0x80/ for 80 columns. Remember that this value can be changed during runtime. It is unclear if this will work for GEOS 64 so you probably do not want to test diff --git a/doc/intro.sgml b/doc/intro.sgml index 4713de136..1eebe24c4 100644 --- a/doc/intro.sgml +++ b/doc/intro.sgml @@ -410,7 +410,7 @@ Available at <url url="https://github.com/commanderx16/x16-emulator/releases">: Emulates the Commander X16 Single Board Computer, with sound, SD card images, -VGA and NTSC video, and a NES game controller emulation. Includes a monitor. +VGA and NTSC video, and a NES game controller emulation. Includes a monitor. It runs on all SDL2 platforms. Compile the tutorial with @@ -459,7 +459,7 @@ Substitute the name of a Commodore computer for that <tt/<sys>/: Start the desired version of the emulator (CBM610 programs run on the CBM II [<tt/xcbm2/] emulator). -Choose <bf>File>Autostart disk/tape image...</bf>, choose your executable, +Choose <bf>File>Autostart disk/tape image...</bf>, choose your executable, and click <bf/OK/. The file has a 14-byte header which corresponds to a PRG-format BASIC program, diff --git a/doc/lynx.sgml b/doc/lynx.sgml index 0eef70535..76cfb377c 100644 --- a/doc/lynx.sgml +++ b/doc/lynx.sgml @@ -36,7 +36,7 @@ Here is a small traditional Hello World program for the Atari Lynx. <tscreen><verb> #include <lynx.h> #include <tgi.h> -#include <6502.h> +#include <6502.h> void main(void) { tgi_install(tgi_static_stddrv); diff --git a/doc/sim65.sgml b/doc/sim65.sgml index 075d95849..310de4667 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -112,7 +112,7 @@ For a C test compiled and linked with <tt/--target sim6502/ the command line arguments to <tt/sim65/ will be passed to <tt/main/, and the return value from <tt/main/ will become sim65's exit code. The <tt/exit/ function may also be used to terminate with an exit code. - + Exit codes are limited to 8 bits. The standard C library high level file input and output is functional. diff --git a/doc/sym1.sgml b/doc/sym1.sgml index b97f94720..0d4cc8a20 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -48,7 +48,7 @@ using 4k config run in the memory range of $200 - $0FFF. The 32k this range to $7FFF. Memory above 32k can be used to extend the heap, as described below. The starting memory location and entry point for running the program is $200, so when the program is transferred to the Sym-1, it is executed by typing 'g 200'. The system returns control -back to the monitor ROM when the program terminates, providing the '.' prompt. +back to the monitor ROM when the program terminates, providing the '.' prompt. Special locations: @@ -58,7 +58,7 @@ Special locations: <tag/Stack/ The C runtime stack is located at $0FFF on 4kb Syms, or at $7FFF for 32kb systems. - The stack always grows downwards. + The stack always grows downwards. <tag/Heap/ The C heap is located at the end of the program and grows towards the C runtime stack. Extended diff --git a/doc/telestrat.sgml b/doc/telestrat.sgml index 385bd69f9..e12846091 100644 --- a/doc/telestrat.sgml +++ b/doc/telestrat.sgml @@ -192,9 +192,9 @@ port cardridge. Telemon 2.4 returns in keyboard buffer the direction of the joysticks. This means that if you get input from keyboard by conio cgetc function, you will get direction from joysticks. -Anyway, if you don't want to use ROM, you can use joysticks standard drivers in your code. +Anyway, if you don't want to use ROM, you can use joysticks standard drivers in your code. -The standard driver manages two joysticks. Only one button is managed for these joysticks. +The standard driver manages two joysticks. Only one button is managed for these joysticks. Telestrat can handle one button for the left port, and three buttons for the right port (but this port was designed for a mouse). @@ -217,7 +217,7 @@ RS232 port with Telemon calls (see XSOUT primitive for example) Telemon 3.0 handles fopen, fread, fclose primitives. It means that this function will crash the Telestrat because Telemon 2.4 does not have these primitives. By the way, Telemon 3.0 uses an extension "ch376 card" which -handles sdcard and FAT 32 usb key. In the next version of Telemon, FT DOS, +handles sdcard and FAT 32 usb key. In the next version of Telemon, FT DOS, Sedoric, Stratsed will be handled in these 3 primitives (fopen, fread, fclose). <itemize> @@ -227,10 +227,10 @@ Sedoric, Stratsed will be handled in these 3 primitives (fopen, fread, fclose). </itemize> <sect1>conio<p> -Functions textcolor and bgcolor are available only with Telemon 3.0 (Orix). -Telemon 2.4 primitives can't handle any change of colors in text mode except with XINK or -XPAPER primitives which put on the first and second columns ink and paper attributes. -The only way to change color on the same line for text is to handle it in pure assembly +Functions textcolor and bgcolor are available only with Telemon 3.0 (Orix). +Telemon 2.4 primitives can't handle any change of colors in text mode except with XINK or +XPAPER primitives which put on the first and second columns ink and paper attributes. +The only way to change color on the same line for text is to handle it in pure assembly without systems calls. <sect>Other hints<p> From 3c1641e3e31925f6f686b5f29312d5f12b166a93 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:05:19 +0200 Subject: [PATCH 1212/2710] remove dangling spaces --- include/_antic.h | 2 +- include/_atari5200os.h | 16 ++-- include/_atarios.h | 210 ++++++++++++++++++++--------------------- include/_pokey.h | 4 +- include/accelerator.h | 2 +- include/apple2.h | 4 +- include/dbg.h | 4 +- include/errno.h | 2 +- include/geos/gmemory.h | 2 +- include/stdlib.h | 4 +- include/sys/utsname.h | 2 +- 11 files changed, 126 insertions(+), 126 deletions(-) diff --git a/include/_antic.h b/include/_antic.h index 717f7f820..742237332 100644 --- a/include/_antic.h +++ b/include/_antic.h @@ -137,7 +137,7 @@ struct __antic { ** Called during every vertical blank; see SYSVBV, VVBLKI, CRITIC, and VVBLKD, ** as well as the SETVBV routine. */ -#define NMIEN_VBI 0x40 +#define NMIEN_VBI 0x40 /* [Reset] key pressed */ #define NMIEN_RESET 0x20 diff --git a/include/_atari5200os.h b/include/_atari5200os.h index db0f7f0c9..5bba43016 100644 --- a/include/_atari5200os.h +++ b/include/_atari5200os.h @@ -31,19 +31,19 @@ struct __os { /*Page zero*/ - unsigned char pokmsk; // = $00 System mask for POKEY IRQ enable + unsigned char pokmsk; // = $00 System mask for POKEY IRQ enable unsigned char rtclok[2]; // = $01,$02 Real time clock - unsigned char critic; // = $03 Critical section flag + unsigned char critic; // = $03 Critical section flag unsigned char atract; // = $04 Attract mode counter - + union { struct { unsigned char sdlstl; // = $05 Save display list LO unsigned char sdlsth; // = $06 Save display list HI }; void* sdlst; // = $05,$06 Display list shadow - }; - + }; + unsigned char sdmctl; // = $07 DMACTL shadow unsigned char pcolr0; // = $08 PM color 0 unsigned char pcolr1; // = $09 PM color 1 @@ -55,10 +55,10 @@ struct __os { unsigned char color3; // = $0F PF color 3 unsigned char color4; // = $10 PF color 4 unsigned char _free_1[0xEF]; // = $11-$FF User space - + /*Stack*/ unsigned char stack[0x100]; // = $100-$1FF Stack - + /*Page 2 OS variables*/ void (*vinter)(void); // = $200 Immediate IRQ vector void (*vvblki)(void); // = $202 Immediate VBI vector @@ -74,7 +74,7 @@ struct __os { void (*vtimr1)(void); // = $216 POKEY timer 1 IRQ vector void (*vtimr2)(void); // = $218 POKEY timer 2 IRQ vector void (*vtimr4)(void); // = $21A POKEY timer 4 IRQ vector - + }; #endif diff --git a/include/_atarios.h b/include/_atarios.h index 986092659..ec33b98c9 100644 --- a/include/_atarios.h +++ b/include/_atarios.h @@ -66,7 +66,7 @@ struct __dcb { unsigned char dtimlo; /* device timeout in seconds */ unsigned char dunuse; /* - unused - */ unsigned int dbyt; /* # of bytes to transfer */ - union { + union { struct { unsigned char daux1; /* 1st command auxiliary byte */ unsigned char daux2; /* 2nd command auxiliary byte */ @@ -167,28 +167,28 @@ struct __os { #ifdef OSA unsigned char* linzbs; // = $00/$01 LINBUG RAM (WILL BE REPLACED BY MONITOR RAM) -#else +#else unsigned char linflg; // = $00 LNBUG FLAG (0 = NOT LNBUG) unsigned char ngflag; // = $01 MEMORY STATUS (0 = FAILURE) -#endif +#endif unsigned char* casini; // = $02/$03 CASSETTE INIT LOCATION unsigned char* ramlo; // = $04/$05 RAM POINTER FOR MEMORY TEST - -#ifdef OSA + +#ifdef OSA unsigned char tramsz; // = $06 FLAG FOR LEFT CARTRIDGE unsigned char tstdat; // = $07 FLAG FOR RIGHT CARTRIDGE -#else +#else unsigned char trnsmz; // = $06 TEMPORARY REGISTER FOR RAM SIZE unsigned char tstdat; // = $07 UNUSED (NOT TOUCHED DURING RESET/COLD START) #endif - - // Cleared upon Coldstart only - + + // Cleared upon Coldstart only + unsigned char warmst; // = $08 WARM START FLAG - unsigned char bootq; // = $09 SUCCESSFUL BOOT FLAG + unsigned char bootq; // = $09 SUCCESSFUL BOOT FLAG void (*dosvec)(void); // = $0A/$0B DISK SOFTWARE START VECTOR void (*dosini)(void); // = $0C/$0D DISK SOFTWARE INIT ADDRESS - unsigned char* appmhi; // = $0E/$0F APPLICATIONS MEMORY HI LIMIT + unsigned char* appmhi; // = $0E/$0F APPLICATIONS MEMORY HI LIMIT // Cleared upon Coldstart or Warmstart @@ -199,26 +199,26 @@ struct __os { unsigned char iccomt; // = $17 COMMAND FOR VECTOR unsigned char* dskfms; // = $18/$19 DISK FILE MANAGER POINTER unsigned char* dskutl; // = $1A/$1B DISK UTILITIES POINTER -#ifdef OSA +#ifdef OSA unsigned char ptimot; // = $1C PRINTER TIME OUT REGISTER unsigned char pbpnt; // = $1D PRINT BUFFER POINTER unsigned char pbufsz; // = $1E PRINT BUFFER SIZE unsigned char ptemp; // = $1F TEMPORARY REGISTER -#else +#else unsigned char abufpt[4]; // = $1C-$1F ACMI BUFFER POINTER AREA -#endif +#endif iocb_t ziocb; // = $20-$2F ZERO PAGE I/O CONTROL BLOCK - + unsigned char status; // = $30 INTERNAL STATUS STORAGE unsigned char chksum; // = $31 CHECKSUM (SINGLE BYTE SUM WITH CARRY) unsigned char* bufr; // = $32/$33 POINTER TO DATA BUFFER unsigned char* bfen; // = $34/$35 NEXT BYTE PAST END OF THE DATA BUFFER LO -#ifdef OSA +#ifdef OSA unsigned char cretry; // = $36 NUMBER OF COMMAND FRAME RETRIES unsigned char dretry; // = $37 NUMBER OF DEVICE RETRIES -#else +#else unsigned int ltemp; // = $36/$37 LOADER TEMPORARY -#endif +#endif unsigned char bufrfl; // = $38 DATA BUFFER FULL FLAG unsigned char recvdn; // = $39 RECEIVE DONE FLAG unsigned char xmtdon; // = $3A TRANSMISSION DONE FLAG @@ -227,22 +227,22 @@ struct __os { unsigned char bptr; // = $3D CASSETTE BUFFER POINTER unsigned char ftype; // = $3E CASSETTE IRG TYPE unsigned char feof; // = $3F CASSETTE EOF FLAG (0 // = QUIET) - + unsigned char freq; // = $40 CASSETTE BEEP COUNTER unsigned char soundr; // = $41 NOISY I/0 FLAG. (ZERO IS QUIET) unsigned char critic; // = $42 DEFINES CRITICAL SECTION (CRITICAL IF NON-Z) dos2x_t fmszpg; // = $43-$49 DISK FILE MANAGER SYSTEM ZERO PAGE -#ifdef OSA +#ifdef OSA unsigned char ckey; // = $4A FLAG SET WHEN GAME START PRESSED unsigned char cassbt; // = $4B CASSETTE BOOT FLAG -#else +#else void* zchain; // = $4A/$4B HANDLER LINKAGE CHAIN POINTER -#endif +#endif unsigned char dstat; // = $4C DISPLAY STATUS unsigned char atract; // = $4D ATRACT FLAG unsigned char drkmsk; // = $4E DARK ATRACT MASK unsigned char colrsh; // = $4F ATRACT COLOR SHIFTER (EOR'ED WITH PLAYFIELD - + unsigned char tmpchr; // = $50 TEMPORARY CHARACTER unsigned char hold1; // = $51 TEMPORARY unsigned char lmargn; // = $52 LEFT MARGIN (NORMALLY 2, CC65 C STARTUP CODE SETS IT TO 0) @@ -255,68 +255,68 @@ struct __os { unsigned int oldcol; // = $5B/$5C PRIOR COLUMN unsigned char oldchr; // = $5D DATA UNDER CURSOR unsigned char* oldadr; // = $5E/$5F SAVED CURSOR MEMORY ADDRESS - -#ifdef OSA + +#ifdef OSA unsigned char newrow; // = $60 POINT DRAW GOES TO unsigned int newcol; // = $61/$62 COLUMN DRAW GOES TO -#else +#else unsigned char* fkdef; // = $60/$61 FUNCTION KEY DEFINITION TABLE unsigned char palnts; // = $62 PAL/NTSC INDICATOR (0 // = NTSC) -#endif +#endif unsigned char logcol; // = $63 POINTS AT COLUMN IN LOGICAL LINE unsigned char* adress; // = $64/$65 TEMPORARY ADDRESS - unsigned int mlttmp; // = $66/$67 TEMPORARY / FIRST BYTE IS USED IN OPEN AS TEMP - unsigned int savadr; // = $68/$69 SAVED ADDRESS + unsigned int mlttmp; // = $66/$67 TEMPORARY / FIRST BYTE IS USED IN OPEN AS TEMP + unsigned int savadr; // = $68/$69 SAVED ADDRESS unsigned char ramtop; // = $6A RAM SIZE DEFINED BY POWER ON LOGIC unsigned char bufcnt; // = $6B BUFFER COUNT unsigned char* bufstr; // = $6C/$6D EDITOR GETCH POINTER unsigned char bitmsk; // = $6E BIT MASK unsigned char shfamt; // = $6F SHIFT AMOUNT FOR PIXEL JUSTIFUCATION - + unsigned int rowac; // = $70/$71 DRAW WORKING ROW unsigned int colac; // = $72/$73 DRAW WORKING COLUMN unsigned char* endpt; // = $74/$75 END POINT unsigned char deltar; // = $76 ROW DIFFERENCE unsigned int deltac; // = $77/$78 COLUMN DIFFERENCE -#ifdef OSA - unsigned char rowinc; // = $79 ROWINC +#ifdef OSA + unsigned char rowinc; // = $79 ROWINC unsigned char colinc; // = $7A COLINC -#else +#else unsigned char* keydef; // = $79/$7A 2-BYTE KEY DEFINITION TABLE ADDRESS -#endif +#endif unsigned char swpflg; // = $7B NON-0 1F TXT AND REGULAR RAM IS SWAPPED unsigned char holdch; // = $7C CH IS MOVED HERE IN KGETCH BEFORE CNTL & SH unsigned char insdat; // = $7D 1-BYTE TEMPORARY unsigned int countr; // = $7E/$7F 2-BYTE DRAW ITERATION COUNT - + unsigned char _free_1[0xD4-0x7F-1]; // USER SPACE - + // Floating Point Package Page Zero Address Equates - fpreg_t fpreg[4]; // = $D4-$EB 4 REGSITERS, ACCCESS LIKE "fpreg[FPIDX_R0].fr" - unsigned char frx; // = $EC 1-BYTE TEMPORARY + fpreg_t fpreg[4]; // = $D4-$EB 4 REGSITERS, ACCCESS LIKE "fpreg[FPIDX_R0].fr" + unsigned char frx; // = $EC 1-BYTE TEMPORARY unsigned char eexp; // = $ED VALUE OF EXP -#ifdef OS_REV2 +#ifdef OS_REV2 unsigned char frsign; // = $EE ##REV2## 1-BYTE FLOATING POINT SIGN unsigned char plycnt; // = $EF ##REV2## 1-BYTE POLYNOMIAL DEGREE unsigned char sgnflg; // = $F0 ##REV2## 1-BYTE SIGN FLAG unsigned char xfmflg; // = $F1 ##REV2## 1-BYTE TRANSFORM FLAG -#else +#else unsigned char nsign; // = $EE SIGN OF # unsigned char esign; // = $EF SIGN OF EXPONENT unsigned char fchrflg; // = $F0 1ST CHAR FLAG unsigned char digrt; // = $F1 # OF DIGITS RIGHT OF DECIMAL -#endif +#endif unsigned char cix; // = $F2 CURRENT INPUT INDEX - unsigned char* inbuff; // = $F3/$F4 POINTS TO USER'S LINE INPUT BUFFER + unsigned char* inbuff; // = $F3/$F4 POINTS TO USER'S LINE INPUT BUFFER unsigned int ztemp1; // = $F5/$F6 2-BYTE TEMPORARY unsigned int ztemp4; // = $F7/$F8 2-BYTE TEMPORARY unsigned int ztemp3; // = $F9/$FA 2-BYTE TEMPORARY - - union { + + union { unsigned char degflg; // = $FB ##OLD## SAME AS RADFLG unsigned char radflg; // = $FB ##OLD## 0=RADIANS, 6=DEGREES }; - + fpreg_t* flptr; // = $FC/$FD 2-BYTE FLOATING POINT NUMBER POINTER fpreg_t* fptr2; // = $FE/$FF 2-BYTE FLOATING POINT NUMBER POINTER @@ -356,28 +356,28 @@ struct __os { union { struct { unsigned char sdlstl; // = $0230 SAVE DISPLAY LIST LOW BYTE - unsigned char sdlsth; // = $0231 SAVE DISPLAY LIST HI BYTE + unsigned char sdlsth; // = $0231 SAVE DISPLAY LIST HI BYTE }; void* sdlst; // = $0230/$0231 (same as above as pointer) }; unsigned char sskctl; // = $0232 SKCTL REGISTER RAM -#ifdef OSA +#ifdef OSA unsigned char _spare_1; // = $0233 No OS use. #else unsigned char lcount; // = $0233 ##1200xl## 1-byte relocating loader record -#endif +#endif unsigned char lpenh; // = $0234 LIGHT PEN HORIZONTAL VALUE unsigned char lpenv; // = $0235 LIGHT PEN VERTICAL VALUE void (*brkky)(void); // = $0236/$0237 BREAK KEY VECTOR -#ifdef OSA +#ifdef OSA unsigned char spare2[2]; // = $0238/$0239 No OS use. -#else +#else void (*vpirq)(void); // = $0238/$0239 ##rev2## 2-byte parallel device IRQ vector -#endif +#endif unsigned char cdevic; // = $023A COMMAND FRAME BUFFER - DEVICE unsigned char ccomnd; // = $023B COMMAND union { - struct { + struct { unsigned char caux1; // = $023C COMMAND AUX BYTE 1 unsigned char caux2; // = $023D COMMAND AUX BYTE 2 }; @@ -389,15 +389,15 @@ struct __os { unsigned char dbsect; // = $0241 NUMBER OF DISK BOOT SECTORS unsigned char* bootad; // = $0242/$0243 ADDRESS WHERE DISK BOOT LOADER WILL BE PUT unsigned char coldst; // = $0244 COLDSTART FLAG (1=IN MIDDLE OF COLDSTART> -#ifdef OSA +#ifdef OSA unsigned char spare3; // = $0245 No OS use. -#else +#else unsigned char reclen; // = $0245 ##1200xl## 1-byte relocating loader record length -#endif +#endif unsigned char dsktim; // = $0246 DISK TIME OUT REGISTER -#ifdef OSA +#ifdef OSA unsigned char linbuf[40]; // = $0247-$026E ##old## CHAR LINE BUFFER -#else +#else unsigned char pdvmsk; // = $0247 ##rev2## 1-byte parallel device selection mask unsigned char shpdvs; // = $0248 ##rev2## 1-byte PDVS (parallel device select) unsigned char pdimsk; // = $0249 ##rev2## 1-byte parallel device IRQ selection @@ -409,7 +409,7 @@ struct __os { unsigned char vsflag; // = $026C ##1200xl## 1-byte fine vertical scroll count unsigned char keydis; // = $026D ##1200xl## 1-byte keyboard disable unsigned char fine; // = $026E ##1200xl## 1-byte fine scrolling mode -#endif +#endif unsigned char gprior; // = $026F GLOBAL PRIORITY CELL unsigned char paddl0; // = $0270 1-BYTE POTENTIOMETER 0 unsigned char paddl1; // = $0271 1-BYTE POTENTIOMETER 1 @@ -435,30 +435,30 @@ struct __os { unsigned char strig1; // = $0285 1-BYTE JOYSTICK TRIGGER 1 unsigned char strig2; // = $0286 1-BYTE JOYSTICK TRIGGER 2 unsigned char strig3; // = $0287 1-BYTE JOYSTICK TRIGGER 3 -#ifdef OSA +#ifdef OSA unsigned char cstat; // = $0288 ##old## cassette status register -#else +#else unsigned char hibyte; // = $0288 ##1200xl## 1-byte relocating loader high byte -#endif +#endif unsigned char wmode; // = $0289 1-byte cassette WRITE mode unsigned char blim; // = $028A 1-byte cassette buffer limit #ifdef OSA unsigned char _reserved_2[5]; // = $028B-$028F RESERVED -#else +#else unsigned char imask; // = $028B ##rev2## (not used) void (*jveck)(void); // = $028C/$028D 2-byte jump vector unsigned newadr; // = $028E/028F ##1200xl## 2-byte relocating address -#endif +#endif unsigned char txtrow; // = $0290 TEXT ROWCRS unsigned txtcol; // = $0291/$0292 TEXT COLCRS unsigned char tindex; // = $0293 TEXT INDEX unsigned char* txtmsc; // = $0294/$0295 FOOLS CONVRT INTO NEW MSC unsigned char txtold[6]; // = $0296-$029B OLDROW & OLDCOL FOR TEXT (AND THEN SOME) -#ifdef OSA +#ifdef OSA unsigned char tmpx1; // = $029C ##old## 1--byte temporary register -#else +#else unsigned char cretry; // = $029C ##1200xl## 1-byte number of command frame retries -#endif +#endif unsigned char hold3; // = $029D 1-byte temporary unsigned char subtmp; // = $029E 1-byte temporary unsigned char hold2; // = $029F 1-byte (not used) @@ -473,41 +473,41 @@ struct __os { unsigned tmpcol; // = $02B9/$02BA 2-byte temporary column unsigned char scrflg; // = $02BB SET IF SCROLL OCCURS unsigned char hold4; // = $02BC TEMP CELL USED IN DRAW ONLY -#ifdef OSA +#ifdef OSA unsigned char hold5; // = $02BD ##old## DITTO -#else +#else unsigned char dretry; // = $02BD ##1200xl## 1-byte number of device retries -#endif +#endif unsigned char shflok; // = $02BE 1-byte shift/control lock flags unsigned char botscr; // = $02BF BOTTOM OF SCREEN 24 NORM 4 SPLIT unsigned char pcolr0; // = $02C0 1-byte player-missile 0 color/luminance unsigned char pcolr1; // = $02C1 1-byte player-missile 1 color/luminance unsigned char pcolr2; // = $02C2 1-byte player-missile 2 color/luminance - unsigned char pcolr3; // = $02C3 1-byte player-missile 3 color/luminance + unsigned char pcolr3; // = $02C3 1-byte player-missile 3 color/luminance unsigned char color0; // = $02C4 1-byte playfield 0 color/luminance unsigned char color1; // = $02C5 1-byte playfield 1 color/luminance unsigned char color2; // = $02C6 1-byte playfield 2 color/luminance unsigned char color3; // = $02C7 1-byte playfield 3 color/luminance unsigned char color4; // = $02C8 1-byte background color/luminance -#ifdef OSA +#ifdef OSA unsigned char _spare_2[23]; // = $02C9-$02DF No OS use. #else union { unsigned char parmbl[6]; // = $02C9 ##rev2## 6-byte relocating loader parameter - struct { + struct { void (*runadr)(void); // = $02C9 ##1200xl## 2-byte run address unsigned int hiused; // = $02CB ##1200xl## 2-byte highest non-zero page address unsigned int zhiuse; // = $02CD ##1200xl## 2-byte highest zero page address - }; - }; - union { + }; + }; + union { unsigned char oldpar[6]; // = $02CF ##rev2## 6-byte relocating loader parameter - struct { + struct { void (*gbytea)(void); // = $02CF ##1200xl## 2-byte GET-BYTE routine address unsigned int loadad; // = $02D1 ##1200xl## 2-byte non-zero page load address unsigned int zloada; // = $02D3 ##1200xl## 2-byte zero page load address - }; - }; + }; + }; unsigned int dsctln; // = $02D5 ##1200xl## 2-byte disk sector length unsigned int acmisr; // = $02D7 ##1200xl## 2-byte ACMI interrupt service routine unsigned char krpdel; // = $02D9 ##1200xl## 1-byte auto-repeat delay @@ -517,78 +517,78 @@ struct __os { unsigned char dmasav; // = $02DD ##1200xl## 1-byte SDMCTL save/restore unsigned char pbpnt; // = $02DE ##1200xl## 1-byte printer buffer pointer unsigned char pbufsz; // = $02DF ##1200xl## 1-byte printer buffer size -#endif - union { +#endif + union { unsigned char glbabs[4]; // = $02E0-$02E3 byte global variables for non-DOS users - struct { + struct { void (*runad)(void); // = $02E0 ##map## 2-byte binary file run address void (*initad)(void); // = $02E2 ##map## 2-byte binary file initialization address - }; - }; + }; + }; unsigned char ramsiz; // = $02E4 RAM SIZE (HI BYTE ONLY) void* memtop; // = $02E5 TOP OF AVAILABLE USER MEMORY void* memlo; // = $02E7 BOTTOM OF AVAILABLE USER MEMORY -#ifdef OSA +#ifdef OSA unsigned char _spare_3; // = $02E9 No OS use. -#else +#else unsigned char hndlod; // = $02E9 ##1200xl## 1-byte user load flag -#endif +#endif unsigned char dvstat[4]; // = $02EA-$02ED STATUS BUFFER - union { + union { unsigned int cbaud; // = $02EE/$02EF 2-byte cassette baud rate - struct { + struct { unsigned char cbaudl; // = $02EE 1-byte low cassette baud rate unsigned char cbaudh; // = $02EF 1-byte high cassette baud rate - }; - }; + }; + }; unsigned char crsinh; // = $02F0 CURSOR INHIBIT (00 = CURSOR ON) unsigned char keydel; // = $02F1 KEY DELAY unsigned char ch1; // = $02F2 1-byte prior keyboard character unsigned char chact; // = $02F3 CHACTL REGISTER RAM unsigned char chbas; // = $02F4 CHBAS REGISTER RAM -#ifdef OSA +#ifdef OSA unsigned char _spare_4[5]; // = $02F5-$02F9 No OS use. -#else +#else unsigned char newrow; // = $02F5 ##1200xl## 1-byte draw destination row unsigned int newcol; // = $02F6/$02F7 ##1200xl## 2-byte draw destination column unsigned char rowinc; // = $02F8 ##1200xl## 1-byte draw row increment unsigned char colinc; // = $02F9 ##1200xl## 1-byte draw column increment -#endif +#endif unsigned char char_; // = $02FA 1-byte internal character (naming changed due to do keyword conflict) unsigned char atachr; // = $02FB ATASCII CHARACTER unsigned char ch; // = $02FC GLOBAL VARIABLE FOR KEYBOARD unsigned char fildat; // = $02FD RIGHT FILL DATA <DRAW> unsigned char dspflg; // = $02FE DISPLAY FLAG DISPLAY CNTLS IF NON-ZERO unsigned char ssflag; // = $02FF START/STOP FLAG FOR PAGING (CNTL 1). CLEARE - + // --- Page 3 --- dcb_t dcb; // = $0300-$030B DEVICE CONTROL BLOCK unsigned int timer1; // = $030C/$030D INITIAL TIMER VALUE -#ifdef OSA +#ifdef OSA unsigned char addcor; // = $030E ##old## ADDITION CORRECTION -#else +#else unsigned char jmpers; // = $030E ##1200xl## 1-byte jumper options -#endif +#endif unsigned char casflg; // = $030F CASSETTE MODE WHEN SET unsigned int timer2; // = $0310/$0311 2-byte final baud rate timer value unsigned char temp1; // = $0312 TEMPORARY STORAGE REGISTER -#ifdef OSA +#ifdef OSA unsigned char _spare_5; // = $0313 unused unsigned char temp2; // = $0314 ##old## TEMPORARY STORAGE REGISTER -#else +#else unsigned char temp2; // = $0313 ##1200xl## 1-byte temporary unsigned char ptimot; // = $0314 ##1200xl## 1-byte printer timeout -#endif +#endif unsigned char temp3; // = $0315 TEMPORARY STORAGE REGISTER unsigned char savio; // = $0316 SAVE SERIAL IN DATA PORT unsigned char timflg; // = $0317 TIME OUT FLAG FOR BAUD RATE CORRECTION unsigned char stackp; // = $0318 SIO STACK POINTER SAVE CELL unsigned char tstat; // = $0319 TEMPORARY STATUS HOLDER -#ifdef OSA +#ifdef OSA hatabs_t hatabs[12]; // = $031A-$033D handler address table unsigned int zeropad; // = $033E/$033F zero padding -#else +#else hatabs_t hatabs[11]; // = $031A-$033A handler address table unsigned int zeropad; // = $033B/$033C zero padding unsigned char pupbt1; // = $033D ##1200xl## 1-byte power-up validation byte 1 @@ -598,9 +598,9 @@ struct __os { iocb_t iocb[8]; // = $0340-$03BF 8 I/O Control Blocks unsigned char prnbuf[40]; // = $03C0-$3E7 PRINTER BUFFER -#ifdef OSA +#ifdef OSA unsigned char _spare_6[151]; // = $03E8-$047F unused -#else +#else unsigned char superf; // = $03E8 ##1200xl## 1-byte editor super function flag unsigned char ckey; // = $03E9 ##1200xl## 1-byte cassette boot request flag unsigned char cassbt; // = $03EA ##1200xl## 1-byte cassette boot flag @@ -639,7 +639,7 @@ struct __basic { void* starp; // = $8C/$8D ADDRESS FOR THE STRING AND ARRAY TABLE void* runstk; // = $8E/$8F ADDRESS OF THE RUNTIME STACK void* memtop; // = $90/$91 POINTER TO THE TOP OF BASIC MEMORY - + unsigned char _internal_1[0xBA-0x91-1]; // INTERNAL DATA unsigned int stopln; // = $BA/$BB LINE WHERE A PROGRAM WAS STOPPED diff --git a/include/_pokey.h b/include/_pokey.h index 88d6949aa..15af4919e 100644 --- a/include/_pokey.h +++ b/include/_pokey.h @@ -131,7 +131,7 @@ struct __pokey_write { #define SKCTL_KEYBOARD_SCANNING 0x02 /* Enable keyboard scanning circuit */ /* Fast pot scan -** The pot scan counter completes its sequence in two TV line times instead of +** The pot scan counter completes its sequence in two TV line times instead of ** one frame time (228 scan lines). Not as accurate as the normal pot scan */ #define SKCTL_FAST_POT_SCAN 0x04 @@ -204,7 +204,7 @@ struct __pokey_read { #define SKSTAT_DATA_READ_INGORING_SHIFTREG 0x10 /* Data can be read directly from the serial input port, ignoring the shift register. */ #define SKSTAT_KEYBOARD_OVERRUN 0x20 /* Keyboard over-run; Reset BITs 7, 6 and 5 (latches) to 1, using SKREST */ #define SKSTAT_INPUT_OVERRUN 0x40 /* Serial data input over-run. Reset latches as above. */ -#define SKSTAT_INPUT_FRAMEERROR 0x80 /* Serial data input frame error caused by missing or extra bits. Reset latches as above. */ +#define SKSTAT_INPUT_FRAMEERROR 0x80 /* Serial data input frame error caused by missing or extra bits. Reset latches as above. */ /* KBCODE, internal keyboard codes for Atari 8-bit computers, diff --git a/include/accelerator.h b/include/accelerator.h index fdd2ebaf7..b5d8d0194 100644 --- a/include/accelerator.h +++ b/include/accelerator.h @@ -180,7 +180,7 @@ unsigned char detect_c128 (void); unsigned char __fastcall__ set_chameleon_speed (unsigned char speed); /* Set the speed of the C64 Chameleon cartridge, the following inputs - * are accepted: + * are accepted: * SPEED_SLOW : 1 Mhz mode * SPEED_1X : 1 Mhz mode * SPEED_2X : 2 Mhz mode diff --git a/include/apple2.h b/include/apple2.h index 57d7086ce..015e8f378 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -159,11 +159,11 @@ extern struct { unsigned day :5; unsigned mon :4; unsigned year :7; - } createdate; /* Current date: 0 */ + } createdate; /* Current date: 0 */ struct { unsigned char min; unsigned char hour; - } createtime; /* Current time: 0 */ + } createtime; /* Current time: 0 */ } _datetime; /* The addresses of the static drivers */ diff --git a/include/dbg.h b/include/dbg.h index 7b4f67e31..4cca826ec 100644 --- a/include/dbg.h +++ b/include/dbg.h @@ -39,7 +39,7 @@ ** are declared here. ** ** To use the debugger, just call DbgInit in your application. Once it has -** been called, the debugger will catch any BRK opcode. Use the BREAK macro +** been called, the debugger will catch any BRK opcode. Use the BREAK macro ** defined below to insert breakpoints into your code. ** ** There are currently a lot of things that cannot be debugged, graphical @@ -121,4 +121,4 @@ void __fastcall__ DbgInit (unsigned unused); - + diff --git a/include/errno.h b/include/errno.h index ae76b6c05..92d304938 100644 --- a/include/errno.h +++ b/include/errno.h @@ -84,7 +84,7 @@ extern int _errno; int __fastcall__ _osmaperrno (unsigned char oserror); -/* Map an operating system specific error code (for example from _oserror) +/* Map an operating system specific error code (for example from _oserror) ** into one of the E... codes above. It is user callable. */ diff --git a/include/geos/gmemory.h b/include/geos/gmemory.h index ba8e9f211..1e9ca83b4 100644 --- a/include/geos/gmemory.h +++ b/include/geos/gmemory.h @@ -12,7 +12,7 @@ void __fastcall__ CopyString(char *dest, const char *source); char __fastcall__ CmpString(const char *dest, const char *source); void __fastcall__ CopyFString(char len, char *dest, const char *source); -char __fastcall__ CmpFString(char len, char *dest, const char *source); +char __fastcall__ CmpFString(char len, char *dest, const char *source); unsigned __fastcall__ CRC(const char *buffer, unsigned len); void* __fastcall__ ClearRam(char *dest, unsigned len); diff --git a/include/stdlib.h b/include/stdlib.h index b929e8f02..99151317f 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -52,8 +52,8 @@ typedef unsigned size_t; /* Those non-standard cc65 exit constants definitions are in addition ** to the EXIT_SUCCESS and EXIT_FAILURE constants, which should not be -** redefined -*/ +** redefined +*/ #define EXIT_ASSERT 2 #define EXIT_ABORT 3 diff --git a/include/sys/utsname.h b/include/sys/utsname.h index a601d9eed..fdd87dec3 100644 --- a/include/sys/utsname.h +++ b/include/sys/utsname.h @@ -41,7 +41,7 @@ /*****************************************************************************/ /* Data */ /*****************************************************************************/ - + /* From f8f901b05e0bed721192132d85e50d14d2068adb Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:06:22 +0200 Subject: [PATCH 1213/2710] remove dangling spaces --- libsrc/apple2/exec.s | 2 +- libsrc/apple2/iobuf.s | 2 +- libsrc/apple2/mcbdefault.s | 4 +- libsrc/apple2/mou/a2.stdmou.s | 16 +++--- libsrc/apple2/opendir.c | 2 +- libsrc/apple2/write.s | 2 +- libsrc/atari/break.s | 2 +- libsrc/atari/cclear.s | 2 +- libsrc/atari/ctype.s | 2 +- libsrc/atari/cvline.s | 2 +- libsrc/atari/diopncls.s | 2 +- libsrc/atari/dioqsize.s | 2 +- libsrc/atari/doesclrscr.s | 2 +- libsrc/atari/emd/atr130.s | 50 +++++++++---------- libsrc/atari/mcbtxtchar.s | 2 +- libsrc/atari/randomize.s | 2 +- libsrc/atari/revers.s | 2 +- libsrc/atari/shadow_ram_handlers.s | 6 +-- libsrc/atari/system_check.s | 2 +- libsrc/atari/xlmemchk.inc | 2 +- libsrc/atari5200/conioscreen.s | 2 +- libsrc/atari5200/cvline.s | 2 +- libsrc/atari5200/extra/conioscreen-20x12.s | 2 +- libsrc/atari5200/joy/atr5200std.s | 2 +- libsrc/atari5200/randomize.s | 2 +- libsrc/atari5200/y2k.inc | 14 +++--- libsrc/atari7800/crt0.s | 6 +-- libsrc/atari7800/joy/atari7800-stdjoy.s | 2 +- libsrc/atmos/cclear.s | 4 +- libsrc/atmos/ctype.s | 2 +- libsrc/c128/emd/c128-vdc.s | 18 +++---- libsrc/c64/sysuname.s | 2 +- libsrc/cbm/cbm_save.c | 4 +- libsrc/cbm/ctype.s | 2 +- libsrc/cbm/opendir.c | 2 +- libsrc/cbm610/revers.s | 2 +- libsrc/common/_heap.s | 2 +- libsrc/common/_heapmaxavail.s | 2 +- libsrc/common/_longminstr.c | 4 +- libsrc/common/_seterrno.s | 2 +- libsrc/common/abort.c | 2 +- libsrc/common/ctypemask.s | 2 +- libsrc/common/divt.s | 4 +- libsrc/common/doesclrscr.s | 2 +- libsrc/common/fread.s | 2 +- libsrc/common/free.s | 2 +- libsrc/common/fsetpos.c | 2 +- libsrc/common/fwrite.s | 2 +- libsrc/common/getcwd.s | 2 +- libsrc/common/ltoa.s | 6 +-- libsrc/common/memcpy.s | 2 +- libsrc/common/memset.s | 4 +- libsrc/common/mul20.s | 4 +- libsrc/common/mul40.s | 4 +- libsrc/common/putenv.s | 2 +- libsrc/common/raise.s | 6 +-- libsrc/common/rewind.c | 2 +- libsrc/common/strcspn.s | 2 +- libsrc/common/strncat.s | 6 +-- libsrc/common/strrchr.s | 4 +- libsrc/common/ungetc.s | 2 +- libsrc/common/vsprintf.s | 2 +- libsrc/conio/cputs.s | 2 +- libsrc/conio/scrsize.s | 4 +- libsrc/creativision/_scrsize.s | 6 +-- libsrc/creativision/boxchars.inc | 10 ++-- libsrc/dbg/asmtab.s | 2 +- libsrc/dbg/dbg.c | 6 +-- libsrc/dbg/dbgdasm.s | 2 +- libsrc/em/em_load.s | 2 +- libsrc/gamate/cputc.s | 14 +++--- libsrc/geos-apple/disk/exitturbo.s | 4 +- libsrc/geos-cbm/disk/changediskdevice.s | 2 +- libsrc/geos-cbm/disk/chkdkgeos.s | 2 +- libsrc/geos-cbm/disk/dio_cts.s | 16 +++--- libsrc/geos-cbm/disk/dio_openclose.s | 4 +- libsrc/geos-cbm/disk/dio_stc.s | 48 +++++++++--------- libsrc/geos-cbm/disk/enterturbo.s | 2 +- libsrc/geos-cbm/disk/exitturbo.s | 2 +- libsrc/geos-cbm/disk/findbambit.s | 2 +- libsrc/geos-cbm/disk/newdisk.s | 2 +- libsrc/geos-cbm/disk/purgeturbo.s | 2 +- libsrc/geos-cbm/disk/readblock.s | 2 +- libsrc/geos-cbm/disk/readbuff.s | 2 +- libsrc/geos-cbm/disk/verwriteblock.s | 2 +- libsrc/geos-cbm/disk/writeblock.s | 2 +- libsrc/geos-cbm/disk/writebuff.s | 2 +- libsrc/geos-cbm/emd/geos-vdc.s | 36 ++++++------- libsrc/geos-cbm/file/followchain.s | 2 +- libsrc/geos-cbm/graph/setnewmode.s | 2 +- libsrc/geos-cbm/system/setdevice.s | 2 +- libsrc/geos-cbm/tgi/geos-tgi.s | 6 +-- libsrc/geos-common/common/zerobss.s | 2 +- libsrc/geos-common/conio/_scrsize.s | 4 +- libsrc/geos-common/conio/cputc.s | 2 +- libsrc/geos-common/conio/cvline.s | 2 +- libsrc/geos-common/disk/blkalloc.s | 2 +- libsrc/geos-common/disk/calcblksfree.s | 2 +- libsrc/geos-common/disk/freeblock.s | 2 +- libsrc/geos-common/disk/getblock.s | 2 +- libsrc/geos-common/disk/getptrcurdknm.s | 4 +- libsrc/geos-common/disk/nxtblkalloc.s | 2 +- libsrc/geos-common/disk/opendisk.s | 2 +- libsrc/geos-common/disk/putblock.s | 2 +- libsrc/geos-common/disk/putdirhead.s | 2 +- libsrc/geos-common/disk/setnextfree.s | 2 +- libsrc/geos-common/dlgbox/rstrfrmdialogue.s | 2 +- libsrc/geos-common/drivers/fio_module.s | 8 +-- libsrc/geos-common/drivers/geos-stdmou.s | 2 +- libsrc/geos-common/file/appendrecord.s | 2 +- libsrc/geos-common/file/closerecordfile.s | 2 +- libsrc/geos-common/file/deletefile.s | 2 +- libsrc/geos-common/file/deleterecord.s | 2 +- libsrc/geos-common/file/findfile.s | 2 +- libsrc/geos-common/file/freefile.s | 2 +- libsrc/geos-common/file/getfhdrinfo.s | 2 +- libsrc/geos-common/file/getfile.s | 2 +- libsrc/geos-common/file/openrecordfile.s | 2 +- libsrc/geos-common/file/pointrecord.s | 2 +- libsrc/geos-common/file/readfile.s | 2 +- libsrc/geos-common/file/readrecord.s | 2 +- libsrc/geos-common/file/writerecord.s | 2 +- libsrc/geos-common/geosmac.inc | 4 +- libsrc/geos-common/graph/bitotherclip.s | 2 +- libsrc/geos-common/graph/framerectangle.s | 2 +- libsrc/geos-common/graph/imprintrectangle.s | 4 +- libsrc/geos-common/graph/invertline.s | 2 +- libsrc/geos-common/graph/invertrectangle.s | 2 +- libsrc/geos-common/graph/recoverline.s | 2 +- libsrc/geos-common/graph/recoverrectangle.s | 4 +- libsrc/geos-common/graph/rectangle.s | 2 +- libsrc/geos-common/graph/testpoint.s | 2 +- libsrc/geos-common/graph/verticalline.s | 4 +- .../geos-common/mousesprite/ismseinregion.s | 2 +- libsrc/geos-common/process/processblock.s | 4 +- libsrc/geos-common/process/processfreeze.s | 4 +- .../process/processinitrestartenable.s | 4 +- libsrc/joystick/joy_load.s | 2 +- libsrc/lynx/bllhdr.s | 2 +- libsrc/lynx/bootldr.s | 2 +- libsrc/lynx/cgetc.s | 2 +- libsrc/lynx/eeprom.s | 2 +- libsrc/lynx/eeprom46.s | 2 +- libsrc/lynx/eeprom66.s | 2 +- libsrc/lynx/eeprom86.s | 2 +- libsrc/lynx/exec.s | 2 +- libsrc/lynx/kbhit.s | 2 +- libsrc/lynx/lynx-cart.s | 6 +-- libsrc/mouse/mouse_load.s | 2 +- libsrc/mouse/mouse_move.s | 2 +- libsrc/nes/cclear.s | 2 +- libsrc/nes/chline.s | 2 +- libsrc/nes/gotoy.s | 2 +- libsrc/nes/ppubuf.s | 2 +- libsrc/nes/sysuname.s | 2 +- libsrc/osic1p/cclear.s | 2 +- libsrc/pce/cclear.s | 2 +- libsrc/plus4/randomize.s | 2 +- libsrc/runtime/add.s | 4 +- libsrc/runtime/aslax1.s | 2 +- libsrc/runtime/decsp1.s | 2 +- libsrc/runtime/incsp1.s | 2 +- libsrc/runtime/incsp3.s | 2 +- libsrc/runtime/incsp4.s | 2 +- libsrc/runtime/incsp5.s | 2 +- libsrc/runtime/incsp6.s | 2 +- libsrc/runtime/incsp7.s | 2 +- libsrc/runtime/land.s | 6 +-- libsrc/runtime/ldauisp.s | 2 +- libsrc/runtime/leave.s | 2 +- libsrc/runtime/leq.s | 2 +- libsrc/runtime/lmod.s | 2 +- libsrc/runtime/lmul.s | 6 +-- libsrc/runtime/lor.s | 6 +-- libsrc/runtime/lpop.s | 2 +- libsrc/runtime/lpush.s | 4 +- libsrc/runtime/lrsub.s | 2 +- libsrc/runtime/lsub.s | 2 +- libsrc/runtime/lsubeq.s | 10 ++-- libsrc/runtime/ltest.s | 2 +- libsrc/runtime/ludiv.s | 2 +- libsrc/runtime/lumod.s | 2 +- libsrc/runtime/lxor.s | 2 +- libsrc/runtime/mul.s | 4 +- libsrc/runtime/mulax3.s | 2 +- libsrc/runtime/or.s | 2 +- libsrc/runtime/pushaff.s | 2 +- libsrc/runtime/pushax.s | 2 +- libsrc/runtime/return0.s | 2 +- libsrc/runtime/return1.s | 2 +- libsrc/runtime/swap.s | 6 +-- libsrc/runtime/umod.s | 2 +- libsrc/runtime/umul16x16r32.s | 2 +- libsrc/sym1/read.s | 2 +- libsrc/sym1/write.s | 2 +- libsrc/telestrat/cclear.s | 4 +- libsrc/telestrat/chline.s | 4 +- libsrc/telestrat/clrscr.s | 8 +-- libsrc/telestrat/cputc.s | 12 ++--- libsrc/telestrat/gotoxy.s | 4 +- libsrc/telestrat/joy/telestrat.s | 12 ++--- libsrc/telestrat/orixhdr.s | 2 +- libsrc/telestrat/sound.s | 2 +- libsrc/telestrat/syschdir.s | 6 +-- libsrc/telestrat/sysmkdir.s | 8 +-- libsrc/telestrat/tgi/telestrat-228-200-3.s | 38 +++++++------- libsrc/telestrat/tgi/telestrat-240-200-2.s | 44 ++++++++-------- libsrc/tgi/tgi_gettextheight.s | 2 +- libsrc/tgi/tgi_imulround.s | 4 +- libsrc/tgi/tgi_lineto.s | 2 +- libsrc/tgi/tgi_outtext.s | 2 +- libsrc/tgi/tgidrv_line.inc | 2 +- 212 files changed, 432 insertions(+), 432 deletions(-) diff --git a/libsrc/apple2/exec.s b/libsrc/apple2/exec.s index 9212ecb8a..0ff4bc6f0 100644 --- a/libsrc/apple2/exec.s +++ b/libsrc/apple2/exec.s @@ -18,7 +18,7 @@ typerr: lda #$4A ; "Incompatible file format" ; Cleanup name oserr: jsr popname ; Preserves A - + ; Set __oserror jmp __mappederrno diff --git a/libsrc/apple2/iobuf.s b/libsrc/apple2/iobuf.s index 77433ce61..f5aacb74a 100644 --- a/libsrc/apple2/iobuf.s +++ b/libsrc/apple2/iobuf.s @@ -2,7 +2,7 @@ ; Oliver Schmidt, 10.9.2009 ; ; Default ProDOS 8 I/O buffer management -; +; .export iobuf_alloc, iobuf_free .import _posix_memalign, _free diff --git a/libsrc/apple2/mcbdefault.s b/libsrc/apple2/mcbdefault.s index c24c5df56..556a9d8fb 100644 --- a/libsrc/apple2/mcbdefault.s +++ b/libsrc/apple2/mcbdefault.s @@ -8,13 +8,13 @@ ; .export _mouse_def_callbacks - + .include "apple2.inc" ; ------------------------------------------------------------------------ .bss - + backup: .res 1 visible:.res 1 diff --git a/libsrc/apple2/mou/a2.stdmou.s b/libsrc/apple2/mou/a2.stdmou.s index c3d10f057..dfc69a942 100644 --- a/libsrc/apple2/mou/a2.stdmou.s +++ b/libsrc/apple2/mou/a2.stdmou.s @@ -152,7 +152,7 @@ next: inc ptr1+1 sta xparam+1 sta jump+2 - ; Disable interrupts now because setting the slot number makes + ; Disable interrupts now because setting the slot number makes ; the IRQ handler (maybe called due to some non-mouse IRQ) try ; calling the firmware which isn't correctly set up yet sei @@ -167,7 +167,7 @@ next: inc ptr1+1 asl asl sta yparam+1 - + ; The AppleMouse II Card needs the ROM switched in ; to be able to detect an Apple //e and use RDVBL bit $C082 @@ -175,7 +175,7 @@ next: inc ptr1+1 ; Reset mouse hardware ldx #INITMOUSE jsr firmware - + ; Switch in LC bank 2 for R/O bit $C080 @@ -236,12 +236,12 @@ UNINSTALL: SETBOX: sta ptr1 stx ptr1+1 - + ; Set x clamps ldx #$00 ldy #MOUSE_BOX::MINX jsr :+ - + ; Set y clamps ldx #$01 ldy #MOUSE_BOX::MINY @@ -257,7 +257,7 @@ SETBOX: sta pos1_lo iny lda (ptr1),y - sta box,y + sta box,y sta pos1_hi ; Skip one word @@ -267,11 +267,11 @@ SETBOX: ; Set high clamp iny lda (ptr1),y - sta box,y + sta box,y sta pos2_lo iny lda (ptr1),y - sta box,y + sta box,y sta pos2_hi txa diff --git a/libsrc/apple2/opendir.c b/libsrc/apple2/opendir.c index 040593118..1144d8511 100644 --- a/libsrc/apple2/opendir.c +++ b/libsrc/apple2/opendir.c @@ -57,7 +57,7 @@ extern char _cwd[FILENAME_MAX]; -DIR* __fastcall__ opendir (register const char* name) +DIR* __fastcall__ opendir (register const char* name) { register DIR* dir; diff --git a/libsrc/apple2/write.s b/libsrc/apple2/write.s index 21f4a45a4..d9dd73ca9 100644 --- a/libsrc/apple2/write.s +++ b/libsrc/apple2/write.s @@ -111,4 +111,4 @@ errno: jmp __directerrno ; Set __oserror oserr: jmp __mappederrno - + diff --git a/libsrc/atari/break.s b/libsrc/atari/break.s index 0cfba1c5a..ae4c8e007 100644 --- a/libsrc/atari/break.s +++ b/libsrc/atari/break.s @@ -63,7 +63,7 @@ L1: lda #<brk_handler ; Set the break vector to our routine lda #$00 sta oldvec ; Clear the old vector stx oldvec+1 -@L9: rts +@L9: rts .endproc diff --git a/libsrc/atari/cclear.s b/libsrc/atari/cclear.s index 7fe3f0f1b..3d3b841cf 100644 --- a/libsrc/atari/cclear.s +++ b/libsrc/atari/cclear.s @@ -17,7 +17,7 @@ _cclearxy: _cclear: cmp #0 ; Is the length zero? beq L9 ; Jump if done - sta tmp1 + sta tmp1 L1: lda #0 ; Blank - screen code jsr cputdirect ; Direct output dec tmp1 diff --git a/libsrc/atari/ctype.s b/libsrc/atari/ctype.s index 2f219f8c3..ca2d3a67f 100644 --- a/libsrc/atari/ctype.s +++ b/libsrc/atari/ctype.s @@ -12,7 +12,7 @@ .include "ctypetable.inc" .export __ctypeidx - + ; The tables are readonly, put them into the rodata segment .rodata diff --git a/libsrc/atari/cvline.s b/libsrc/atari/cvline.s index 735e47dd2..96ceef5c1 100644 --- a/libsrc/atari/cvline.s +++ b/libsrc/atari/cvline.s @@ -5,7 +5,7 @@ ; void cvline (unsigned char length); ; .include "atari.inc" - + .export _cvlinexy, _cvline .import gotoxy, putchar, setcursor .importzp tmp1 diff --git a/libsrc/atari/diopncls.s b/libsrc/atari/diopncls.s index 2cdeba78b..528c0fad8 100644 --- a/libsrc/atari/diopncls.s +++ b/libsrc/atari/diopncls.s @@ -137,7 +137,7 @@ _dio_open: iny lda #1 -finish: sta (ptr2),y ; set default sector size +finish: sta (ptr2),y ; set default sector size fini2: lda ptr2 ldx ptr2+1 rts diff --git a/libsrc/atari/dioqsize.s b/libsrc/atari/dioqsize.s index f26667af7..caef0588f 100644 --- a/libsrc/atari/dioqsize.s +++ b/libsrc/atari/dioqsize.s @@ -12,7 +12,7 @@ .proc _dio_query_sectsize sta ptr1 ; handle - stx ptr1+1 + stx ptr1+1 lda #0 sta __oserror diff --git a/libsrc/atari/doesclrscr.s b/libsrc/atari/doesclrscr.s index f937f9ac5..4b2f30b2a 100644 --- a/libsrc/atari/doesclrscr.s +++ b/libsrc/atari/doesclrscr.s @@ -12,7 +12,7 @@ .ifdef __ATARIXL__ _doesclrscrafterexit = return1 ; the c65 runtime always clears the screen at program termination -.else +.else _doesclrscrafterexit: jsr __is_cmdline_dos ; currently (unless a DOS behaving differently is popping up) eor #$01 ; we can get by with the inverse of __is_cmdline_dos diff --git a/libsrc/atari/emd/atr130.s b/libsrc/atari/emd/atr130.s index f2d5777d5..7f4d51590 100644 --- a/libsrc/atari/emd/atr130.s +++ b/libsrc/atari/emd/atr130.s @@ -11,7 +11,7 @@ ; Bit 2: bank control ; Bit 1: BASIC on/off ; Bit 0: OS RAM on/off -; +; ; Masks: %11100011 $E3 Bank 0 ; %11100111 $E7 Bank 1 ; %11101011 $EB Bank 2 @@ -67,7 +67,7 @@ ; Constants BANK = $4000 ; bank window -STACK = $0100 ; stack location +STACK = $0100 ; stack location PAGES = 256 ; 4 x 16k banks @@ -93,17 +93,17 @@ stacktest: sei @2: sta $4000 ; restore cli rts -stacktest_end: +stacktest_end: stackcopy: sei ; disable interrupts @1: dex ; pre-decrement (full page x=0) ldy #$FF ; this will be replaced STACK+3 - sty $D301 ; set bank + sty $D301 ; set bank lda $FF00,x ; address to copy from STACK+8,+9 ldy #$FF ; this will be replaced STACK+11 - sty $D301 + sty $D301 sta $FF00,x ; address to copy to STACK+16,+17 - cpx #0 + cpx #0 bne @1 ldy #$FF ; portb_save STACK+23 sty $D301 @@ -122,7 +122,7 @@ stackcopy_byte: sei sty $D301 cli rts -stackcopy_byte_end: +stackcopy_byte_end: .data @@ -186,14 +186,14 @@ setpage: INSTALL: lda $D301 ; save state of portb sta portb_save - tay + tay jsr install_test ; doesn't touch Y sty STACK+13 lda $4000 ; test for extended memory jsr STACK - bcs @1 + bcs @1 lda #EM_ERR_OK rts @1: lda #EM_ERR_NO_DEVICE @@ -242,7 +242,7 @@ MAP: jsr setpage ; extract the bank/page lda banks,x sta STACK+3 ; set bank to copy from ; lda ptr1 -; sta STACK+8 +; sta STACK+8 lda ptr1+1 sta STACK+9 ; set copy from address lda portb_save @@ -251,10 +251,10 @@ MAP: jsr setpage ; extract the bank/page lda ptr2 sta STACK+16 lda ptr2+1 - sta STACK+17 ; set copy to address + sta STACK+17 ; set copy to address ldx #0 ; full page copy - jsr STACK ; do the copy! + jsr STACK ; do the copy! ; Return the memory window @@ -298,7 +298,7 @@ COMMIT: lda curpage ; Get the current page sta STACK+3 ; set bank to copy from sta STACK+23 ; set final portb restore lda ptr1 - sta STACK+8 + sta STACK+8 lda ptr1+1 sta STACK+9 ; set copy from address ldx curbank @@ -307,10 +307,10 @@ COMMIT: lda curpage ; Get the current page ;lda ptr2 ;sta STACK+16 lda ptr2+1 - sta STACK+17 ; set copy to address + sta STACK+17 ; set copy to address ldx #0 ; full page copy - jsr STACK ; do the copy! + jsr STACK ; do the copy! commit_done: rts @@ -329,7 +329,7 @@ COPYFROM: ldy #EM_COPY::OFFS lda (ptr3),y - sta STACK+7 ; offset goes into BANK low + sta STACK+7 ; offset goes into BANK low ldy #EM_COPY::PAGE lda (ptr3),y @@ -357,9 +357,9 @@ COPYFROM: add #>BANK ; add to BANK address sta STACK+8 ; current page in bank ldx curbank - lda banks,x - sta STACK+2 ; set bank in stack - lda portb_save + lda banks,x + sta STACK+2 ; set bank in stack + lda portb_save sta STACK+10 ; set bank restore in stack sta STACK+18 ; set final restore too @@ -399,7 +399,7 @@ copyfrom_copy: bne @3 inc STACK+16 -@3: jmp copyfrom_copy ; copy another byte +@3: jmp copyfrom_copy ; copy another byte done: rts @@ -418,7 +418,7 @@ COPYTO: ldy #EM_COPY::OFFS lda (ptr3),y - sta STACK+15 ; offset goes into BANK low + sta STACK+15 ; offset goes into BANK low ldy #EM_COPY::PAGE lda (ptr3),y @@ -446,9 +446,9 @@ COPYTO: add #>BANK ; add to BANK address sta STACK+16 ; current page in bank ldx curbank - lda banks,x - sta STACK+10 ; set bank in stack - lda portb_save + lda banks,x + sta STACK+10 ; set bank in stack + lda portb_save sta STACK+2 ; set bank restore in stack sta STACK+18 ; set final restore too @@ -488,5 +488,5 @@ copyto_copy: bne @3 inc STACK+8 -@3: jmp copyto_copy ; copy another byte +@3: jmp copyto_copy ; copy another byte diff --git a/libsrc/atari/mcbtxtchar.s b/libsrc/atari/mcbtxtchar.s index 4ff79c651..95dd1651a 100644 --- a/libsrc/atari/mcbtxtchar.s +++ b/libsrc/atari/mcbtxtchar.s @@ -74,7 +74,7 @@ prep: jsr getcursor ; Get character at cursor position cmp #mouse_txt_char ; "mouse" character bne overwr ; no, probably program has overwritten it - lda backup ; + lda backup ; jmp setcursor ; Draw character overwr: sta backup rts diff --git a/libsrc/atari/randomize.s b/libsrc/atari/randomize.s index ed4400b55..915fee3bd 100644 --- a/libsrc/atari/randomize.s +++ b/libsrc/atari/randomize.s @@ -10,7 +10,7 @@ .include "atari.inc" -__randomize: +__randomize: ldx VCOUNT ; Use vertical line counter as high byte lda RTCLOK+2 ; Use clock as low byte jmp _srand ; Initialize generator diff --git a/libsrc/atari/revers.s b/libsrc/atari/revers.s index 719503940..23126a88f 100644 --- a/libsrc/atari/revers.s +++ b/libsrc/atari/revers.s @@ -4,7 +4,7 @@ ; unsigned char revers (unsigned char onoff); ; .include "atari.inc" - + .export _revers .export _revflag diff --git a/libsrc/atari/shadow_ram_handlers.s b/libsrc/atari/shadow_ram_handlers.s index a8ba611b6..eaea35195 100644 --- a/libsrc/atari/shadow_ram_handlers.s +++ b/libsrc/atari/shadow_ram_handlers.s @@ -737,9 +737,9 @@ fn_cont:jsr get_fn_len lda #0 sta ICBLH,x jsr chk_CIO_buf - pla + pla sta ICBLH,x - pla + pla sta ICBLL,x pla tay @@ -756,7 +756,7 @@ chk_CIO_buf: lda ICBAH,x cmp #$c0 bcc @cont -@ret: +@ret: .ifdef DEBUG jsr CIO_buf_noti .endif diff --git a/libsrc/atari/system_check.s b/libsrc/atari/system_check.s index df7c433a4..762fc954f 100644 --- a/libsrc/atari/system_check.s +++ b/libsrc/atari/system_check.s @@ -93,7 +93,7 @@ sdnobw: lda DOS+1 ; SD version ldy #31 ; offset for OSRMFLG lda (DOSVEC),y ; get OSRMFLG bne sdcrts1 - + sdcrts0:clc rts sdcrts1:sec diff --git a/libsrc/atari/xlmemchk.inc b/libsrc/atari/xlmemchk.inc index f8be1c137..ecb874799 100644 --- a/libsrc/atari/xlmemchk.inc +++ b/libsrc/atari/xlmemchk.inc @@ -7,7 +7,7 @@ ; It calculates the value to put into RAMTOP for a subsequent ; "GRAPHICS 0" call, and the lowest address which will be used ; by the screen memory afterwards. -; +; ; inputs: ; __STARTADDRESS__ - load address of the program ; outputs: diff --git a/libsrc/atari5200/conioscreen.s b/libsrc/atari5200/conioscreen.s index 1311e874c..8c78fd44f 100644 --- a/libsrc/atari5200/conioscreen.s +++ b/libsrc/atari5200/conioscreen.s @@ -74,7 +74,7 @@ conio_color: .res 1 dlist: .repeat 3 .byte DL_BLK8 .endrepeat - + .byte DL_CHR20x8x2 | DL_LMS .word SCREEN_BUF diff --git a/libsrc/atari5200/cvline.s b/libsrc/atari5200/cvline.s index 204d90382..b4b3f1a3e 100644 --- a/libsrc/atari5200/cvline.s +++ b/libsrc/atari5200/cvline.s @@ -5,7 +5,7 @@ ; void cvline (unsigned char length); ; .include "atari5200.inc" - + .export _cvlinexy, _cvline .import gotoxy, putchar .importzp tmp1 diff --git a/libsrc/atari5200/extra/conioscreen-20x12.s b/libsrc/atari5200/extra/conioscreen-20x12.s index e591bf05a..aeb11cb43 100644 --- a/libsrc/atari5200/extra/conioscreen-20x12.s +++ b/libsrc/atari5200/extra/conioscreen-20x12.s @@ -74,7 +74,7 @@ conio_color: .res 1 dlist: .repeat 3 .byte DL_BLK8 .endrepeat - + .byte DL_CHR20x16x2 | DL_LMS .word SCREEN_BUF diff --git a/libsrc/atari5200/joy/atr5200std.s b/libsrc/atari5200/joy/atr5200std.s index 989bc5ee0..fb7946bea 100644 --- a/libsrc/atari5200/joy/atr5200std.s +++ b/libsrc/atari5200/joy/atr5200std.s @@ -44,7 +44,7 @@ ; INSTALL: - lda #$04 ; enable POT input from the joystick ports, see section "GTIA" in + lda #$04 ; enable POT input from the joystick ports, see section "GTIA" in sta CONSOL ; http://www.atarimuseum.com/videogames/consoles/5200/conv_to_5200.html lda #JOY_ERR_OK ldx #0 diff --git a/libsrc/atari5200/randomize.s b/libsrc/atari5200/randomize.s index ef462827e..978ccf3f3 100644 --- a/libsrc/atari5200/randomize.s +++ b/libsrc/atari5200/randomize.s @@ -10,7 +10,7 @@ .include "atari5200.inc" -__randomize: +__randomize: ldx VCOUNT ; Use vertical line counter as high byte lda RTCLOK+1 ; Use clock as low byte jmp _srand ; Initialize generator diff --git a/libsrc/atari5200/y2k.inc b/libsrc/atari5200/y2k.inc index f8531451c..9f7917cd3 100644 --- a/libsrc/atari5200/y2k.inc +++ b/libsrc/atari5200/y2k.inc @@ -9,16 +9,16 @@ Y2K LDY #$00 ; Copy BIOS opening screen to RAM CPX #$E8 ; Is this a 4 port? BNE Y2K0 ; Jump if not LDA #$42 ; Yes, 4 port system -Y2K0 STA TEMPL -Y2K1 LDA (TEMPL),Y +Y2K0 STA TEMPL +Y2K1 LDA (TEMPL),Y STA $0600,Y - INY + INY BNE Y2K1 LDY #$50 INC TEMPH -Y2K2 LDA (TEMPL),Y +Y2K2 LDA (TEMPL),Y STA $0700,Y - DEY + DEY BPL Y2K2 LDA #$D4 ; Point to copyright string STA $0724 @@ -26,8 +26,8 @@ Y2K2 LDA (TEMPL),Y STA $0725 LDX #$0B ; Store NOP's @ end LDA #$EA -Y2K3 STA $0732,X - DEX +Y2K3 STA $0732,X + DEX BPL Y2K3 LDA #$60 ; Store RTS opcode @ end STA $0750 diff --git a/libsrc/atari7800/crt0.s b/libsrc/atari7800/crt0.s index cefe16730..e791179f3 100644 --- a/libsrc/atari7800/crt0.s +++ b/libsrc/atari7800/crt0.s @@ -19,7 +19,7 @@ start: sei ; Initialize 6502 cld lda #$07 ; Lock machine in 7800 mode - sta INPTCTRL + sta INPTCTRL lda #$7f ; DMA off sta CTRL ldx #0 ; OFFSET must always be 0 @@ -28,7 +28,7 @@ start: dex ; Stack pointer = $ff txs - ; Set up parameter stack + ; Set up parameter stack lda #<(__RAM3_START__ + __RAM3_SIZE__) sta sp lda #>(__RAM3_START__ + __RAM3_SIZE__) @@ -48,7 +48,7 @@ _exit: jsr donelib jmp start -NMIHandler: +NMIHandler: inc _zonecounter jmp IRQStub diff --git a/libsrc/atari7800/joy/atari7800-stdjoy.s b/libsrc/atari7800/joy/atari7800-stdjoy.s index cea6625a4..d76e1d105 100644 --- a/libsrc/atari7800/joy/atari7800-stdjoy.s +++ b/libsrc/atari7800/joy/atari7800-stdjoy.s @@ -85,7 +85,7 @@ COUNT: rts ; ------------------------------------------------------------------------ -; READ: Read a particular joystick passed in A for 2 fire buttons. +; READ: Read a particular joystick passed in A for 2 fire buttons. readbuttons: ; Y has joystick of interest 0/1 diff --git a/libsrc/atmos/cclear.s b/libsrc/atmos/cclear.s index 9d356a8ab..f6416363c 100644 --- a/libsrc/atmos/cclear.s +++ b/libsrc/atmos/cclear.s @@ -6,7 +6,7 @@ ; .export _cclearxy, _cclear - .import setscrptr + .import setscrptr .import rvs .import popax .importzp ptr2 @@ -25,7 +25,7 @@ _cclear: tax ; Is the length zero? beq @L9 ; Jump if done jsr setscrptr ; Set ptr2 to screen, won't use X - lda #' ' + lda #' ' ora rvs @L1: sta (ptr2),y ; Write one char iny ; Next char diff --git a/libsrc/atmos/ctype.s b/libsrc/atmos/ctype.s index 90a3baa6e..57ad8c1a3 100644 --- a/libsrc/atmos/ctype.s +++ b/libsrc/atmos/ctype.s @@ -119,7 +119,7 @@ __ctypeidx: ct_mix CT_NONE_IDX, CT_NONE_IDX ; 186/ba ___________, 187/bb ___________ ct_mix CT_NONE_IDX, CT_NONE_IDX ; 188/bc ___________, 189/bd ___________ ct_mix CT_NONE_IDX, CT_NONE_IDX ; 190/be ___________, 191/bf ___________ - + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 192/c0 ___________, 193/c1 ___________ ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 194/c2 ___________, 195/c3 ___________ ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 196/c4 ___________, 197/c5 ___________ diff --git a/libsrc/c128/emd/c128-vdc.s b/libsrc/c128/emd/c128-vdc.s index e294ddc18..accb82154 100644 --- a/libsrc/c128/emd/c128-vdc.s +++ b/libsrc/c128/emd/c128-vdc.s @@ -73,7 +73,7 @@ INSTALL: lda #$ff sta curpage sta curpage+1 - + ; do test for VDC presence here??? ldx #VDC_CSET ; determine size of RAM... jsr vdcgetreg @@ -97,29 +97,29 @@ INSTALL: jsr vdcputbyte ; restore original value of test byte ldx #0 ; prepare x with hi of default pagecount - + lda ptr1 ; do bytes match? cmp ptr1+1 bne @have64k lda ptr2 cmp ptr2+1 bne @have64k - + lda #64 ; assumes x = 0, here -> p.c = 64 bne @setpagecnt -@have64k: +@have64k: txa ; assumes x = 0, here inx ; so that a/x becomes 0/1 -> p.c. = 256 -@setpagecnt: +@setpagecnt: sta pagecount stx pagecount+1 txa - bne @keep64kBit - + bne @keep64kBit + ldx #VDC_CSET ; restore 16/64k flag - lda vdc_cset_save - jsr vdcputreg + lda vdc_cset_save + jsr vdcputreg @keep64kBit: lda #<EM_ERR_OK ldx #>EM_ERR_OK diff --git a/libsrc/c64/sysuname.s b/libsrc/c64/sysuname.s index 2d185a1c8..1903986c9 100644 --- a/libsrc/c64/sysuname.s +++ b/libsrc/c64/sysuname.s @@ -12,7 +12,7 @@ ;-------------------------------------------------------------------------- ; Data. We define a fixed utsname struct here and just copy it. - + .rodata utsdata: diff --git a/libsrc/cbm/cbm_save.c b/libsrc/cbm/cbm_save.c index 7f774b1b6..2e22b89fc 100644 --- a/libsrc/cbm/cbm_save.c +++ b/libsrc/cbm/cbm_save.c @@ -12,9 +12,9 @@ /* saves a memory area from start to end-1 to a file. */ -unsigned char __fastcall__ cbm_save (const char* name, +unsigned char __fastcall__ cbm_save (const char* name, unsigned char device, - const void* data, + const void* data, unsigned int size) { cbm_k_setlfs(0, device, 0); diff --git a/libsrc/cbm/ctype.s b/libsrc/cbm/ctype.s index 7388f68b8..a66905fe7 100644 --- a/libsrc/cbm/ctype.s +++ b/libsrc/cbm/ctype.s @@ -13,7 +13,7 @@ .include "ctypetable.inc" .export __ctypeidx - + ; The tables are readonly, put them into the rodata segment .rodata diff --git a/libsrc/cbm/opendir.c b/libsrc/cbm/opendir.c index b39e6b77e..87b9ab73d 100644 --- a/libsrc/cbm/opendir.c +++ b/libsrc/cbm/opendir.c @@ -38,7 +38,7 @@ DIR* __fastcall__ opendir (register const char* name) d.fd = open (d.name, O_RDONLY); if (d.fd >= 0) { - /* Skip the load address */ + /* Skip the load address */ if (_dirread (&d, buf, sizeof (buf))) { /* Allocate memory for the DIR structure returned */ diff --git a/libsrc/cbm610/revers.s b/libsrc/cbm610/revers.s index eb44f0282..78b8a0591 100644 --- a/libsrc/cbm610/revers.s +++ b/libsrc/cbm610/revers.s @@ -9,7 +9,7 @@ .import RVS: zp .include "cbm610.inc" - + .proc _revers diff --git a/libsrc/common/_heap.s b/libsrc/common/_heap.s index e2470577a..4ec8c80cd 100644 --- a/libsrc/common/_heap.s +++ b/libsrc/common/_heap.s @@ -39,4 +39,4 @@ initheap: sta __heapend+1 rts - + diff --git a/libsrc/common/_heapmaxavail.s b/libsrc/common/_heapmaxavail.s index 4d44fadc1..19ae18b8d 100644 --- a/libsrc/common/_heapmaxavail.s +++ b/libsrc/common/_heapmaxavail.s @@ -6,7 +6,7 @@ ; size_t _heapmaxavail (void); ; ; - + .importzp ptr1, ptr2 .export __heapmaxavail diff --git a/libsrc/common/_longminstr.c b/libsrc/common/_longminstr.c index ffc35aa77..28a19f39b 100644 --- a/libsrc/common/_longminstr.c +++ b/libsrc/common/_longminstr.c @@ -1,9 +1,9 @@ /* ** Ullrich von Bassewitz, 2012-11-26 ** -** Minimum value of a long. Is used in ascii conversions, since this value +** Minimum value of a long. Is used in ascii conversions, since this value ** has no positive counterpart than can be represented in 32 bits. In C, -** since the compiler will convert to the correct character set for the +** since the compiler will convert to the correct character set for the ** target platform. */ diff --git a/libsrc/common/_seterrno.s b/libsrc/common/_seterrno.s index e35c0b342..79021143a 100644 --- a/libsrc/common/_seterrno.s +++ b/libsrc/common/_seterrno.s @@ -2,7 +2,7 @@ ; Ullrich von Bassewitz, 2004-05-13 ; ; __seterrno: Will set __errno to the value in A and return zero in A. Other -; registers aren't changed. The function is C callable, but +; registers aren't changed. The function is C callable, but ; currently only called from asm code. ; diff --git a/libsrc/common/abort.c b/libsrc/common/abort.c index 1dda559bb..1100d33a3 100644 --- a/libsrc/common/abort.c +++ b/libsrc/common/abort.c @@ -7,7 +7,7 @@ #include <stdio.h> -#include <stdlib.h> +#include <stdlib.h> #include <signal.h> diff --git a/libsrc/common/ctypemask.s b/libsrc/common/ctypemask.s index b518a10c0..9238f24e9 100644 --- a/libsrc/common/ctypemask.s +++ b/libsrc/common/ctypemask.s @@ -9,7 +9,7 @@ ; ; ctypemask(int c) ; -; converts a character to test via the is*-functions to the matching ctype-masks +; converts a character to test via the is*-functions to the matching ctype-masks ; If c is out of the 8-bit range, the function returns with carry set and accu cleared. ; Return value is in accu and x has to be always clear when returning ; (makes calling code shorter)! diff --git a/libsrc/common/divt.s b/libsrc/common/divt.s index 914eb569d..7f2b4e1bb 100644 --- a/libsrc/common/divt.s +++ b/libsrc/common/divt.s @@ -18,10 +18,10 @@ .importzp sreg, ptr1, tmp1 _div: jsr tosdivax ; Division-operator does most of the work - + ldy sreg ; low byte remainder from sreg sta sreg ; store low byte quotient to sreg - + lda sreg+1 ; high byte remainder from sreg stx sreg+1 ; store high byte quotient to sreg diff --git a/libsrc/common/doesclrscr.s b/libsrc/common/doesclrscr.s index 49ce2fd12..14d9ab804 100644 --- a/libsrc/common/doesclrscr.s +++ b/libsrc/common/doesclrscr.s @@ -7,6 +7,6 @@ ; .export _doesclrscrafterexit - .import return0 + .import return0 _doesclrscrafterexit = return0 diff --git a/libsrc/common/fread.s b/libsrc/common/fread.s index 91d692985..c0733994e 100644 --- a/libsrc/common/fread.s +++ b/libsrc/common/fread.s @@ -161,7 +161,7 @@ bne @L8 ; Error in read. Set the stream error flag and bail out. errno has already -; been set by read(). On entry to label @L7, X must be zero. +; been set by read(). On entry to label @L7, X must be zero. inx ; X = 0 lda #_FERROR diff --git a/libsrc/common/free.s b/libsrc/common/free.s index 00b5e63f8..53796303c 100644 --- a/libsrc/common/free.s +++ b/libsrc/common/free.s @@ -274,7 +274,7 @@ _free: sta ptr2 ; } ; } ; -; +; ; On entry, ptr2 must contain a pointer to the block, which must be at least ; HEAP_MIN_BLOCKSIZE bytes in size, and ptr1 contains the total size of the ; block. diff --git a/libsrc/common/fsetpos.c b/libsrc/common/fsetpos.c index 14690f520..a0cf8d31f 100644 --- a/libsrc/common/fsetpos.c +++ b/libsrc/common/fsetpos.c @@ -21,4 +21,4 @@ int __fastcall__ fsetpos (FILE* f, const fpos_t *pos) return fseek (f, (fpos_t)*pos, SEEK_SET); } - + diff --git a/libsrc/common/fwrite.s b/libsrc/common/fwrite.s index dc0bad1b6..b0fa7ec42 100644 --- a/libsrc/common/fwrite.s +++ b/libsrc/common/fwrite.s @@ -19,7 +19,7 @@ ; ------------------------------------------------------------------------ ; Code - + .proc _fwrite ; Save file and place it into ptr1 diff --git a/libsrc/common/getcwd.s b/libsrc/common/getcwd.s index 4bfc0a5b6..9b856ea7c 100644 --- a/libsrc/common/getcwd.s +++ b/libsrc/common/getcwd.s @@ -53,7 +53,7 @@ overflow: lda #<ERANGE jsr __seterrno ; Returns 0 in A tax ; Return zero - rts + rts ; Success, return buf diff --git a/libsrc/common/ltoa.s b/libsrc/common/ltoa.s index d8d8c988d..78e43e23f 100644 --- a/libsrc/common/ltoa.s +++ b/libsrc/common/ltoa.s @@ -56,7 +56,7 @@ L1: lda __longminstr,y ; copy -2147483648 dey bpl L1 jmp L10 - + ; Check if the value is negative. If so, write a - sign and negate the ; number. @@ -66,7 +66,7 @@ L2: txa ; get high byte .if (.cpu .bitand CPU_ISET_65SC02) sta (ptr2) -.else +.else ldy #0 sta (ptr2),y ; store sign .endif @@ -79,7 +79,7 @@ L3: lda ptr1 ; negate val ldx ptr1+1 jsr negeax - + sta ptr1 stx ptr1+1 jmp ultoa diff --git a/libsrc/common/memcpy.s b/libsrc/common/memcpy.s index 1ee53be07..fd090c788 100644 --- a/libsrc/common/memcpy.s +++ b/libsrc/common/memcpy.s @@ -67,7 +67,7 @@ memcpy_getparams: ; IMPORTANT! Function has to leave with Y=0! jsr popptr1 ; save src to ptr1 ; save dest to ptr2 - iny ; Y=0 guaranteed by popptr1, we need '1' here... + iny ; Y=0 guaranteed by popptr1, we need '1' here... ; (direct stack access is three cycles faster ; (total cycle count with return)) lda (sp),y diff --git a/libsrc/common/memset.s b/libsrc/common/memset.s index 96f5d9e11..a57a90e5c 100644 --- a/libsrc/common/memset.s +++ b/libsrc/common/memset.s @@ -87,7 +87,7 @@ L3: dey sta (ptr1),y ; set bytes in low sta (ptr2),y ; and high section bne L3 ; flags still up to date from dey! -leave: +leave: jmp popax ; Pop ptr and return as result - + diff --git a/libsrc/common/mul20.s b/libsrc/common/mul20.s index 5b3bbf830..ba29b94dd 100644 --- a/libsrc/common/mul20.s +++ b/libsrc/common/mul20.s @@ -9,7 +9,7 @@ ; ; ; unsigned int __fastcall__ mul20(unsigned char value); -; +; ; REMARKS: Function is defined to return with carry-flag cleared @@ -34,7 +34,7 @@ mul5: adc tmp4 ; * 5 inx ; yes, correct... mul10: stx tmp4 ; continue with classic shifting... - + asl a ; * 10 rol tmp4 diff --git a/libsrc/common/mul40.s b/libsrc/common/mul40.s index 07d6164b5..06780a6e0 100644 --- a/libsrc/common/mul40.s +++ b/libsrc/common/mul40.s @@ -9,7 +9,7 @@ ; ; ; unsigned int __fastcall__ mul40(unsigned char value); -; +; ; REMARKS: Function is defined to return with carry-flag cleared @@ -34,7 +34,7 @@ mul5: adc tmp4 ; * 5 inx ; yes, correct... mul10: stx tmp4 ; continue with classic shifting... - + asl a ; * 10 rol tmp4 diff --git a/libsrc/common/putenv.s b/libsrc/common/putenv.s index 7e44a7cd8..c68d20a32 100644 --- a/libsrc/common/putenv.s +++ b/libsrc/common/putenv.s @@ -185,4 +185,4 @@ error: jsr __seterrno name: .addr 0 ; Pointer to name newsize: .byte 0 ; New environment size - + diff --git a/libsrc/common/raise.s b/libsrc/common/raise.s index db96cdcd0..07898ef90 100644 --- a/libsrc/common/raise.s +++ b/libsrc/common/raise.s @@ -28,9 +28,9 @@ _raise: sta jmpvec+1 lda sigtable+1,x sta jmpvec+2 - + ; Reset the signal handler to SIG_DFL (I don't like this because it may -; introduce race conditions, but it's the simplest way to satisfy the +; introduce race conditions, but it's the simplest way to satisfy the ; standard). lda #<__sig_dfl @@ -51,4 +51,4 @@ _raise: invalidsig: rts - + diff --git a/libsrc/common/rewind.c b/libsrc/common/rewind.c index a4cdfa97c..333230b74 100644 --- a/libsrc/common/rewind.c +++ b/libsrc/common/rewind.c @@ -22,4 +22,4 @@ void __fastcall__ rewind (FILE* f) clearerr(f); } - + diff --git a/libsrc/common/strcspn.s b/libsrc/common/strcspn.s index 9cf159218..4bb01479a 100644 --- a/libsrc/common/strcspn.s +++ b/libsrc/common/strcspn.s @@ -20,7 +20,7 @@ _strcspn: sta tmp1 ; tmp1 = strlen of test chars jsr popptr1 ; get and save s1 to ptr1 - + ldx #0 ; low counter byte stx tmp2 ; high counter byte diff --git a/libsrc/common/strncat.s b/libsrc/common/strncat.s index 060378442..75572db7c 100644 --- a/libsrc/common/strncat.s +++ b/libsrc/common/strncat.s @@ -9,19 +9,19 @@ .import popax, popptr1 .importzp ptr1, ptr2, ptr3, tmp1, tmp2 .macpack cpu - + _strncat: inx stx tmp2 tax inx stx tmp1 ; save count with each byte incremented separately - + jsr popptr1 ; get src jsr popax ; get dest sta ptr3 ; remember for function return - stx ptr3+1 + stx ptr3+1 stx ptr2+1 tay ; low byte as offset in Y .if (.cpu .bitand ::CPU_ISET_65SC02) diff --git a/libsrc/common/strrchr.s b/libsrc/common/strrchr.s index 3e4fb0810..2858337b5 100644 --- a/libsrc/common/strrchr.s +++ b/libsrc/common/strrchr.s @@ -16,8 +16,8 @@ _strrchr: stx ptr1+1 ldx #0 ; default function result is NULL, X is high byte... stx tmp2 ; tmp2 is low-byte - stx ptr1 ; low-byte of source string is in Y, so clear real one... - + stx ptr1 ; low-byte of source string is in Y, so clear real one... + testChar: lda (ptr1),y ; get char beq finished ; jump if end of string diff --git a/libsrc/common/ungetc.s b/libsrc/common/ungetc.s index 386c450a8..88595068c 100644 --- a/libsrc/common/ungetc.s +++ b/libsrc/common/ungetc.s @@ -68,4 +68,4 @@ error: lda #EINVAL rts .endproc - + diff --git a/libsrc/common/vsprintf.s b/libsrc/common/vsprintf.s index eb47dae18..b4cb9c419 100644 --- a/libsrc/common/vsprintf.s +++ b/libsrc/common/vsprintf.s @@ -30,7 +30,7 @@ _vsprintf: ldy #2 jsr staxysp -; Contine by jumping to vsnprintf, which expects ap on the CPU stack and will +; Contine by jumping to vsnprintf, which expects ap on the CPU stack and will ; cleanup the C stack jmp vsnprintf diff --git a/libsrc/conio/cputs.s b/libsrc/conio/cputs.s index ef7c65462..41191a0b0 100644 --- a/libsrc/conio/cputs.s +++ b/libsrc/conio/cputs.s @@ -8,7 +8,7 @@ .export _cputsxy, _cputs .import gotoxy, _cputc .importzp ptr1, tmp1 - + _cputsxy: sta ptr1 ; Save s for later stx ptr1+1 diff --git a/libsrc/conio/scrsize.s b/libsrc/conio/scrsize.s index 014b6f08b..834c14820 100644 --- a/libsrc/conio/scrsize.s +++ b/libsrc/conio/scrsize.s @@ -10,7 +10,7 @@ .import screensize .importzp ptr1, ptr2 - .macpack cpu + .macpack cpu .proc _screensize @@ -29,7 +29,7 @@ sta (ptr2),y txa sta (ptr1),y -.endif +.endif rts .endproc diff --git a/libsrc/creativision/_scrsize.s b/libsrc/creativision/_scrsize.s index 9e4ce53c7..b1b05efea 100644 --- a/libsrc/creativision/_scrsize.s +++ b/libsrc/creativision/_scrsize.s @@ -3,13 +3,13 @@ ;* .export screensize - + .include "creativision.inc" - + .proc screensize ldx #SCREEN_COLS ldy #SCREEN_ROWS rts - + .endproc diff --git a/libsrc/creativision/boxchars.inc b/libsrc/creativision/boxchars.inc index 45484a5d2..5fbb3409d 100644 --- a/libsrc/creativision/boxchars.inc +++ b/libsrc/creativision/boxchars.inc @@ -2,7 +2,7 @@ boxchars: ; Vertical Line - .byte $18 + .byte $18 .byte $18 .byte $18 .byte $18 @@ -29,7 +29,7 @@ boxchars: .byte $18 .byte $18 .byte $18 - .byte $18 + .byte $18 ; Top Right .byte $00 @@ -39,7 +39,7 @@ boxchars: .byte $18 .byte $18 .byte $18 - .byte $18 + .byte $18 ; Bottom Left .byte $18 @@ -49,7 +49,7 @@ boxchars: .byte $00 .byte $00 .byte $00 - .byte $00 + .byte $00 ; Bottom Right .byte $18 @@ -59,4 +59,4 @@ boxchars: .byte $00 .byte $00 .byte $00 - .byte $00 + .byte $00 diff --git a/libsrc/dbg/asmtab.s b/libsrc/dbg/asmtab.s index 3d27aea1f..fdeedaa48 100644 --- a/libsrc/dbg/asmtab.s +++ b/libsrc/dbg/asmtab.s @@ -57,5 +57,5 @@ MnemoTab2: .byte $C4,$CA,$26,$48,$44,$44,$A2,$C8 - + diff --git a/libsrc/dbg/dbg.c b/libsrc/dbg/dbg.c index 27f2086eb..832ed0a20 100644 --- a/libsrc/dbg/dbg.c +++ b/libsrc/dbg/dbg.c @@ -1579,12 +1579,12 @@ void DbgEntry (void) case 'q': /* Quit program */ clrscr (); - + /* Exit intentionally with error because one may - ** say that DbgEntry is always abnormal. + ** say that DbgEntry is always abnormal. */ exit (EXIT_FAILURE); - + } } } diff --git a/libsrc/dbg/dbgdasm.s b/libsrc/dbg/dbgdasm.s index 9899c0add..cd1287a8a 100644 --- a/libsrc/dbg/dbgdasm.s +++ b/libsrc/dbg/dbgdasm.s @@ -77,7 +77,7 @@ disassret: inx ; Adjust for opcode byte txa ldx #$00 ; Clear high byte - rts + rts ; ------------------------------------------------------------------------- ; Helper functions diff --git a/libsrc/em/em_load.s b/libsrc/em/em_load.s index 1e4a364e2..39abbc8a5 100644 --- a/libsrc/em/em_load.s +++ b/libsrc/em/em_load.s @@ -29,7 +29,7 @@ ctrl: .addr _read .res 2 ; MODULE .res 2 ; MODULE_SIZE .res 2 ; MODULE_ID - + ;---------------------------------------------------------------------------- ; Code diff --git a/libsrc/gamate/cputc.s b/libsrc/gamate/cputc.s index d80e8b41a..a5d591d1e 100644 --- a/libsrc/gamate/cputc.s +++ b/libsrc/gamate/cputc.s @@ -97,7 +97,7 @@ putchar: ldy #$F8 lda CHARCOLOR - lsr + lsr bcc @delete1 @copylp1: @@ -106,7 +106,7 @@ putchar: sta LCD_DATA iny bne @copylp1 - + beq @skip_delete1 @delete1: @@ -126,9 +126,9 @@ putchar: ldx CURS_Y lda _plotlo,x sta LCD_Y - - ldy #$F8 - + + ldy #$F8 + lda CHARCOLOR and #2 beq @delete2 @@ -139,9 +139,9 @@ putchar: sta LCD_DATA iny bne @copylp2 - + beq @skip_delete2 - + @delete2: lda #$00 @del2: diff --git a/libsrc/geos-apple/disk/exitturbo.s b/libsrc/geos-apple/disk/exitturbo.s index 7098a56c4..14164d2e9 100644 --- a/libsrc/geos-apple/disk/exitturbo.s +++ b/libsrc/geos-apple/disk/exitturbo.s @@ -9,5 +9,5 @@ .import return0 _ExitTurbo = return0 - - + + diff --git a/libsrc/geos-cbm/disk/changediskdevice.s b/libsrc/geos-cbm/disk/changediskdevice.s index c3035deee..dd9c91609 100644 --- a/libsrc/geos-cbm/disk/changediskdevice.s +++ b/libsrc/geos-cbm/disk/changediskdevice.s @@ -9,7 +9,7 @@ .import setoserror .include "jumptab.inc" - + _ChangeDiskDevice: jsr ChangeDiskDevice jmp setoserror diff --git a/libsrc/geos-cbm/disk/chkdkgeos.s b/libsrc/geos-cbm/disk/chkdkgeos.s index c2b4821a4..a091916d7 100644 --- a/libsrc/geos-cbm/disk/chkdkgeos.s +++ b/libsrc/geos-cbm/disk/chkdkgeos.s @@ -10,7 +10,7 @@ .include "jumptab.inc" .include "geossym.inc" - + _ChkDkGEOS: jsr ChkDkGEOS jsr setoserror diff --git a/libsrc/geos-cbm/disk/dio_cts.s b/libsrc/geos-cbm/disk/dio_cts.s index 043e1f8d8..478181b69 100644 --- a/libsrc/geos-cbm/disk/dio_cts.s +++ b/libsrc/geos-cbm/disk/dio_cts.s @@ -20,21 +20,21 @@ _dio_phys_to_log: sta ptr1 stx ptr1+1 ; pointer to result - + jsr popax sta ptr2 stx ptr2+1 ; pointer to input structure - + jsr popax sta ptr3 stx ptr3+1 ; pointer to handle - + ldy #sst_flag lda (ptr3),y and #128 beq _inv_hand ; handle not open or invalid - - + + ldy #diopp_head lda (ptr2),y bne _inv_data ; there is only head 0 @@ -66,7 +66,7 @@ _dio_phys_to_log: beq dio_cts1571 cmp #DRV_1581 beq dio_cts1581 - + lda #INCOMPATIBLE ; unsupported device ldx #0 beq ret @@ -78,10 +78,10 @@ dio_ctsend: dey lda tmp1 sta (ptr1),y - + ldx #0 txa -ret: +ret: sta __oserror rts ; return success diff --git a/libsrc/geos-cbm/disk/dio_openclose.s b/libsrc/geos-cbm/disk/dio_openclose.s index 72e3e32e9..327503017 100644 --- a/libsrc/geos-cbm/disk/dio_openclose.s +++ b/libsrc/geos-cbm/disk/dio_openclose.s @@ -45,7 +45,7 @@ _dio_open: asl a ; make index from drive id asl a tax - + lda #0 sta sectsizetab+sst_sectsize,x lda #128 @@ -54,7 +54,7 @@ _dio_open: sta sectsizetab+sst_sectsize+1,x tya sta sectsizetab+sst_driveno,x - + stx tmp1 lda #<sectsizetab clc diff --git a/libsrc/geos-cbm/disk/dio_stc.s b/libsrc/geos-cbm/disk/dio_stc.s index 7398edb63..469df93ca 100644 --- a/libsrc/geos-cbm/disk/dio_stc.s +++ b/libsrc/geos-cbm/disk/dio_stc.s @@ -20,15 +20,15 @@ _dio_log_to_phys: ; check device type sta ptr1 stx ptr1+1 ; pointer to result (struct dio_phys_pos) - + jsr popax sta ptr2 stx ptr2+1 ; pointer to input structure (pointer to int) - + jsr popax sta ptr3 stx ptr3+1 ; pointer to handle - + ldy #sst_flag lda (ptr3),y and #128 @@ -42,18 +42,18 @@ _dio_log_to_phys: sta (ptr1),y ; track <256 ldy #diopp_sector+1 sta (ptr1),y ; sector <256 - + ldy #0 lda (ptr2),y sta tmp1 - iny + iny lda (ptr2),y sta tmp2 ; get drive info ldy #sst_driveno lda (ptr3),y - tay + tay lda driveType,y and #%00001111 ; remove ramDisk flags cmp #DRV_1541 @@ -62,7 +62,7 @@ _dio_log_to_phys: beq dio_stc1571 cmp #DRV_1581 beq dio_stc1581 - + lda #INCOMPATIBLE ; unsupported device ldx #0 beq _ret @@ -74,10 +74,10 @@ dio_stcend: ldy #diopp_sector lda tmp2 sta (ptr1),y - + ldx #0 - txa -_ret: + txa +_ret: sta __oserror rts ; return success @@ -107,14 +107,14 @@ _nxt: bcc _found cpx #35 bne _loop41 beq _inv_data - -_found: + +_found: lda tmp1 - sec + sec sbc sectab_1541_l,x sta tmp2 -_fndend: - inx +_fndend: + inx stx tmp1 jmp dio_stcend @@ -128,9 +128,9 @@ dio_stc1571: lda tmp1 cmp #<683 _if71: bcc dio_stc1541 - + lda tmp1 - sec + sec sbc #<683 sta tmp1 lda tmp2 @@ -139,10 +139,10 @@ _if71: bcc dio_stc1541 jsr dio_stc1541 ; will fall through here tay bne _ret ; result beyond track 70 - + ldy #diopp_track lda (ptr1),y - clc + clc adc #35 sta (ptr1),y lda #0 @@ -153,26 +153,26 @@ _if71: bcc dio_stc1541 ; - the remainder is sector dio_stc1581: ldx #0 ; index=(track-1) -_loop81: +_loop81: lda tmp2 bne _sub81 lda tmp1 cmp #40 bcc _got81 _sub81: lda tmp1 - sec + sec sbc #40 sta tmp1 lda tmp2 sbc #0 sta tmp2 - inx + inx cpx #80 bne _loop81 beq _inv_data - + _got81: lda tmp1 sta tmp2 - inx + inx stx tmp1 jmp dio_stcend diff --git a/libsrc/geos-cbm/disk/enterturbo.s b/libsrc/geos-cbm/disk/enterturbo.s index 777822bae..31864e32f 100644 --- a/libsrc/geos-cbm/disk/enterturbo.s +++ b/libsrc/geos-cbm/disk/enterturbo.s @@ -8,5 +8,5 @@ .export _EnterTurbo .include "jumptab.inc" - + _EnterTurbo = EnterTurbo diff --git a/libsrc/geos-cbm/disk/exitturbo.s b/libsrc/geos-cbm/disk/exitturbo.s index ab894aeff..5a37b4682 100644 --- a/libsrc/geos-cbm/disk/exitturbo.s +++ b/libsrc/geos-cbm/disk/exitturbo.s @@ -8,5 +8,5 @@ .export _ExitTurbo .include "jumptab.inc" - + _ExitTurbo = ExitTurbo diff --git a/libsrc/geos-cbm/disk/findbambit.s b/libsrc/geos-cbm/disk/findbambit.s index 3bb566f4d..3a6ffab21 100644 --- a/libsrc/geos-cbm/disk/findbambit.s +++ b/libsrc/geos-cbm/disk/findbambit.s @@ -12,7 +12,7 @@ .include "jumptab.inc" .include "geossym.inc" - + _FindBAMBit: jsr gettrse sta r6L diff --git a/libsrc/geos-cbm/disk/newdisk.s b/libsrc/geos-cbm/disk/newdisk.s index 30c7283ae..99e39604f 100644 --- a/libsrc/geos-cbm/disk/newdisk.s +++ b/libsrc/geos-cbm/disk/newdisk.s @@ -9,7 +9,7 @@ .import setoserror .include "jumptab.inc" - + _NewDisk: jsr NewDisk jmp setoserror diff --git a/libsrc/geos-cbm/disk/purgeturbo.s b/libsrc/geos-cbm/disk/purgeturbo.s index f0a293423..26b61a4fd 100644 --- a/libsrc/geos-cbm/disk/purgeturbo.s +++ b/libsrc/geos-cbm/disk/purgeturbo.s @@ -8,5 +8,5 @@ .export _PurgeTurbo .include "jumptab.inc" - + _PurgeTurbo = PurgeTurbo diff --git a/libsrc/geos-cbm/disk/readblock.s b/libsrc/geos-cbm/disk/readblock.s index 977860d91..d9a25f254 100644 --- a/libsrc/geos-cbm/disk/readblock.s +++ b/libsrc/geos-cbm/disk/readblock.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "geossym.inc" - + _ReadBlock: sta r4L stx r4H diff --git a/libsrc/geos-cbm/disk/readbuff.s b/libsrc/geos-cbm/disk/readbuff.s index 149eae1b9..0c0c90108 100644 --- a/libsrc/geos-cbm/disk/readbuff.s +++ b/libsrc/geos-cbm/disk/readbuff.s @@ -11,7 +11,7 @@ .include "diskdrv.inc" .include "geossym.inc" - + _ReadBuff: jsr gettrse sta r1L diff --git a/libsrc/geos-cbm/disk/verwriteblock.s b/libsrc/geos-cbm/disk/verwriteblock.s index 74243f13f..bb4eabdda 100644 --- a/libsrc/geos-cbm/disk/verwriteblock.s +++ b/libsrc/geos-cbm/disk/verwriteblock.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "geossym.inc" - + _VerWriteBlock: sta r4L stx r4H diff --git a/libsrc/geos-cbm/disk/writeblock.s b/libsrc/geos-cbm/disk/writeblock.s index c5a3b3f7a..7b257e79c 100644 --- a/libsrc/geos-cbm/disk/writeblock.s +++ b/libsrc/geos-cbm/disk/writeblock.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "geossym.inc" - + _WriteBlock: sta r4L stx r4H diff --git a/libsrc/geos-cbm/disk/writebuff.s b/libsrc/geos-cbm/disk/writebuff.s index 34e7b137b..52194ebb1 100644 --- a/libsrc/geos-cbm/disk/writebuff.s +++ b/libsrc/geos-cbm/disk/writebuff.s @@ -11,7 +11,7 @@ .include "diskdrv.inc" .include "geossym.inc" - + _WriteBuff: jsr gettrse sta r1L diff --git a/libsrc/geos-cbm/emd/geos-vdc.s b/libsrc/geos-cbm/emd/geos-vdc.s index 791d2a0a8..27316e1a0 100644 --- a/libsrc/geos-cbm/emd/geos-vdc.s +++ b/libsrc/geos-cbm/emd/geos-vdc.s @@ -82,54 +82,54 @@ INSTALL: pha lda #$35 sta $01 - + ldx #VDC_CSET ; determine size of RAM... jsr vdcgetreg sta tmp1 ora #%00010000 jsr vdcputreg ; turn on 64k - + jsr settestadr1 ; save original value of test byte jsr vdcgetbyte sta tmp2 - + lda #$55 ; write $55 here ldy #ptr1 jsr test64k ; read it here and there lda #$aa ; write $aa here ldy #ptr2 jsr test64k ; read it here and there - + jsr settestadr1 lda tmp2 jsr vdcputbyte ; restore original value of test byte - + lda ptr1 ; do bytes match? cmp ptr1+1 bne @have64k lda ptr2 cmp ptr2+1 bne @have64k - + ldx #VDC_CSET lda tmp1 jsr vdcputreg ; restore 16/64k flag jmp @endok ; and leave default values for 16k - -@have64k: + +@have64k: lda #<256 ldx #>256 sta pagecount stx pagecount+1 -@endok: +@endok: pla sta $01 plp lda #<EM_ERR_OK ldx #>EM_ERR_OK - rts - -test64k: + rts + +test64k: sta tmp1 sty ptr3 lda #0 @@ -186,14 +186,14 @@ MAP: sta curpage sta ptr1+1 ldy #0 sty ptr1 - + lda #<window sta ptr2 lda #>window sta ptr2+1 - + jsr transferin - + lda #<window ldx #>window rts @@ -299,7 +299,7 @@ COPYFROM: bne @L1 ; Copy the remainder of the page - + @L2: ldy #EM_COPY::COUNT lda (ptr3),y ; Get bytes in last page beq @L4 @@ -391,9 +391,9 @@ vdcgetreg: @L0: bit VDC_ADDR_REG bpl @L0 lda VDC_DATA_REG - rts + rts -vdcputbyte: +vdcputbyte: ldx #VDC_DATA vdcputreg: stx VDC_ADDR_REG diff --git a/libsrc/geos-cbm/file/followchain.s b/libsrc/geos-cbm/file/followchain.s index df20bcaac..9b882d59a 100644 --- a/libsrc/geos-cbm/file/followchain.s +++ b/libsrc/geos-cbm/file/followchain.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "geossym.inc" - + _FollowChain: sta r3L stx r3H diff --git a/libsrc/geos-cbm/graph/setnewmode.s b/libsrc/geos-cbm/graph/setnewmode.s index 1d63cf78e..56fc123f7 100644 --- a/libsrc/geos-cbm/graph/setnewmode.s +++ b/libsrc/geos-cbm/graph/setnewmode.s @@ -9,7 +9,7 @@ .include "jumptab.inc" .include "geossym.inc" - + _SetNewMode: lda graphMode eor #$80 diff --git a/libsrc/geos-cbm/system/setdevice.s b/libsrc/geos-cbm/system/setdevice.s index 37a162303..a67c10228 100644 --- a/libsrc/geos-cbm/system/setdevice.s +++ b/libsrc/geos-cbm/system/setdevice.s @@ -8,5 +8,5 @@ .export _SetDevice .include "jumptab.inc" - + _SetDevice = SetDevice diff --git a/libsrc/geos-cbm/tgi/geos-tgi.s b/libsrc/geos-cbm/tgi/geos-tgi.s index 08927e6c1..c04742fb6 100644 --- a/libsrc/geos-cbm/tgi/geos-tgi.s +++ b/libsrc/geos-cbm/tgi/geos-tgi.s @@ -93,7 +93,7 @@ Y2 = ptr4 SCRBASE: .res 1 ; High byte of screen base (64k VDC only) -ERROR: +ERROR: .res 1 ; Error code PALETTE: .res 2 ; The current palette @@ -199,9 +199,9 @@ INSTALL: @endok: lda #0 sta SCRBASE ; draw page 0 as default - rts + rts -test64k: +test64k: sta tmp1 sty ptr3 lda #0 diff --git a/libsrc/geos-common/common/zerobss.s b/libsrc/geos-common/common/zerobss.s index 48fc5a89a..85d3e03eb 100644 --- a/libsrc/geos-common/common/zerobss.s +++ b/libsrc/geos-common/common/zerobss.s @@ -7,7 +7,7 @@ .export zerobss .import __BSS_RUN__, __BSS_SIZE__ - + .include "jumptab.inc" .include "geossym.inc" diff --git a/libsrc/geos-common/conio/_scrsize.s b/libsrc/geos-common/conio/_scrsize.s index 494182b9d..ffb17dec6 100644 --- a/libsrc/geos-common/conio/_scrsize.s +++ b/libsrc/geos-common/conio/_scrsize.s @@ -11,7 +11,7 @@ .importzp cursor_r, cursor_c .import _cursor .constructor initscrsize - + .include "geossym.inc" .segment "ONCE" @@ -38,7 +38,7 @@ L1: lda #40 ; 40 columns (more or less) .code -screensize: +screensize: ldx xsize ldy ysize rts diff --git a/libsrc/geos-common/conio/cputc.s b/libsrc/geos-common/conio/cputc.s index 014c2ed0b..af4194312 100644 --- a/libsrc/geos-common/conio/cputc.s +++ b/libsrc/geos-common/conio/cputc.s @@ -19,7 +19,7 @@ ; ESC_GRAPHICS, ESC_RULER, GOTOX, GOTOY, GOTOXY, NEWCARDSET, all 1..8 ; ; note that there are conflicts between control characters and keyboard: -; HOME = KEY_ENTER, KEY_HOME = REV_ON, +; HOME = KEY_ENTER, KEY_HOME = REV_ON, ; UPLINE = ?, KEY_UPARROW = GOTOY, ... .export _cputcxy, _cputc diff --git a/libsrc/geos-common/conio/cvline.s b/libsrc/geos-common/conio/cvline.s index c12b8764b..9aa3d3eee 100644 --- a/libsrc/geos-common/conio/cvline.s +++ b/libsrc/geos-common/conio/cvline.s @@ -18,7 +18,7 @@ _cvlinexy: jsr gotoxy ; Call this one, will pop params pla ; Restore the length -_cvline: +_cvline: cmp #0 ; Is the length zero? beq L9 ; Jump if done tax diff --git a/libsrc/geos-common/disk/blkalloc.s b/libsrc/geos-common/disk/blkalloc.s index 6bfcb312c..bace80098 100644 --- a/libsrc/geos-common/disk/blkalloc.s +++ b/libsrc/geos-common/disk/blkalloc.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _BlkAlloc: sta r2L stx r2H diff --git a/libsrc/geos-common/disk/calcblksfree.s b/libsrc/geos-common/disk/calcblksfree.s index 5d7b98aba..7e1bb4f52 100644 --- a/libsrc/geos-common/disk/calcblksfree.s +++ b/libsrc/geos-common/disk/calcblksfree.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _CalcBlksFree: lda #<curDirHead ldx #>curDirHead diff --git a/libsrc/geos-common/disk/freeblock.s b/libsrc/geos-common/disk/freeblock.s index cd8b08d2f..da9a83f86 100644 --- a/libsrc/geos-common/disk/freeblock.s +++ b/libsrc/geos-common/disk/freeblock.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _FreeBlock: jsr gettrse sta r6L diff --git a/libsrc/geos-common/disk/getblock.s b/libsrc/geos-common/disk/getblock.s index cef7ece6f..bb1690827 100644 --- a/libsrc/geos-common/disk/getblock.s +++ b/libsrc/geos-common/disk/getblock.s @@ -12,7 +12,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _GetBlock: sta r4L stx r4H diff --git a/libsrc/geos-common/disk/getptrcurdknm.s b/libsrc/geos-common/disk/getptrcurdknm.s index 7a99225ef..d92e5d91e 100644 --- a/libsrc/geos-common/disk/getptrcurdknm.s +++ b/libsrc/geos-common/disk/getptrcurdknm.s @@ -12,8 +12,8 @@ .include "jumptab.inc" .include "geossym.inc" - -_GetPtrCurDkNm: + +_GetPtrCurDkNm: sta ptr3 stx ptr3+1 ldx #ptr4 diff --git a/libsrc/geos-common/disk/nxtblkalloc.s b/libsrc/geos-common/disk/nxtblkalloc.s index 7427f3de0..560eb0945 100644 --- a/libsrc/geos-common/disk/nxtblkalloc.s +++ b/libsrc/geos-common/disk/nxtblkalloc.s @@ -13,7 +13,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _NxtBlkAlloc: sta r2L stx r2H diff --git a/libsrc/geos-common/disk/opendisk.s b/libsrc/geos-common/disk/opendisk.s index 66bd24d30..9de5fb1d7 100644 --- a/libsrc/geos-common/disk/opendisk.s +++ b/libsrc/geos-common/disk/opendisk.s @@ -10,7 +10,7 @@ .include "jumptab.inc" .include "diskdrv.inc" - + _OpenDisk: jsr OpenDisk jmp setoserror diff --git a/libsrc/geos-common/disk/putblock.s b/libsrc/geos-common/disk/putblock.s index df1af9f19..4c17274e1 100644 --- a/libsrc/geos-common/disk/putblock.s +++ b/libsrc/geos-common/disk/putblock.s @@ -12,7 +12,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _PutBlock: sta r4L stx r4H diff --git a/libsrc/geos-common/disk/putdirhead.s b/libsrc/geos-common/disk/putdirhead.s index 411b64307..afd7f9b39 100644 --- a/libsrc/geos-common/disk/putdirhead.s +++ b/libsrc/geos-common/disk/putdirhead.s @@ -10,7 +10,7 @@ .include "jumptab.inc" .include "diskdrv.inc" - + _PutDirHead: jsr PutDirHead jmp setoserror diff --git a/libsrc/geos-common/disk/setnextfree.s b/libsrc/geos-common/disk/setnextfree.s index 410532cea..b24f16f6f 100644 --- a/libsrc/geos-common/disk/setnextfree.s +++ b/libsrc/geos-common/disk/setnextfree.s @@ -12,7 +12,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _SetNextFree: jsr gettrse sta r3L diff --git a/libsrc/geos-common/dlgbox/rstrfrmdialogue.s b/libsrc/geos-common/dlgbox/rstrfrmdialogue.s index efee17465..9119770a0 100644 --- a/libsrc/geos-common/dlgbox/rstrfrmdialogue.s +++ b/libsrc/geos-common/dlgbox/rstrfrmdialogue.s @@ -8,5 +8,5 @@ .export _RstrFrmDialogue .include "jumptab.inc" - + _RstrFrmDialogue = RstrFrmDialogue diff --git a/libsrc/geos-common/drivers/fio_module.s b/libsrc/geos-common/drivers/fio_module.s index 937ef292e..1314fc4c5 100644 --- a/libsrc/geos-common/drivers/fio_module.s +++ b/libsrc/geos-common/drivers/fio_module.s @@ -38,21 +38,21 @@ _open: jsr popax ; Get flags sta tmp1 jsr popptr1 ; Get name - + lda filedesc ; is there a file already open? bne @alreadyopen - + lda tmp1 ; check open mode and #(O_RDWR | O_CREAT) cmp #O_RDONLY ; only O_RDONLY is valid bne @badmode - + lda ptr1 ldx ptr1+1 jsr _FindFile ; try to find the file tax bne @oserror - + lda dirEntryBuf + OFF_DE_TR_SC ; tr&se for ReadByte (r1) sta f_track lda dirEntryBuf + OFF_DE_TR_SC + 1 diff --git a/libsrc/geos-common/drivers/geos-stdmou.s b/libsrc/geos-common/drivers/geos-stdmou.s index 7e544ba82..88bbc7df9 100644 --- a/libsrc/geos-common/drivers/geos-stdmou.s +++ b/libsrc/geos-common/drivers/geos-stdmou.s @@ -5,7 +5,7 @@ ; ; Driver for GEOS standard input device interface ; - + .export _mouse_init, _mouse_done .export _mouse_hide, _mouse_show .export _mouse_box diff --git a/libsrc/geos-common/file/appendrecord.s b/libsrc/geos-common/file/appendrecord.s index 2a7864a13..1ec1e8869 100644 --- a/libsrc/geos-common/file/appendrecord.s +++ b/libsrc/geos-common/file/appendrecord.s @@ -10,7 +10,7 @@ .include "jumptab.inc" .include "diskdrv.inc" - + _AppendRecord: jsr AppendRecord diff --git a/libsrc/geos-common/file/closerecordfile.s b/libsrc/geos-common/file/closerecordfile.s index ee0778d7b..1c8b19b01 100644 --- a/libsrc/geos-common/file/closerecordfile.s +++ b/libsrc/geos-common/file/closerecordfile.s @@ -10,7 +10,7 @@ .include "jumptab.inc" .include "diskdrv.inc" - + _CloseRecordFile: jsr CloseRecordFile jmp setoserror diff --git a/libsrc/geos-common/file/deletefile.s b/libsrc/geos-common/file/deletefile.s index 730569e55..b9d994142 100644 --- a/libsrc/geos-common/file/deletefile.s +++ b/libsrc/geos-common/file/deletefile.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _DeleteFile: sta r0L stx r0H diff --git a/libsrc/geos-common/file/deleterecord.s b/libsrc/geos-common/file/deleterecord.s index 7ffe5d739..fac73f665 100644 --- a/libsrc/geos-common/file/deleterecord.s +++ b/libsrc/geos-common/file/deleterecord.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _DeleteRecord: jsr DeleteRecord jmp setoserror diff --git a/libsrc/geos-common/file/findfile.s b/libsrc/geos-common/file/findfile.s index 0f58e99e6..285e8d650 100644 --- a/libsrc/geos-common/file/findfile.s +++ b/libsrc/geos-common/file/findfile.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _FindFile: sta r6L stx r6H diff --git a/libsrc/geos-common/file/freefile.s b/libsrc/geos-common/file/freefile.s index 791f3f31c..03a8b9d88 100644 --- a/libsrc/geos-common/file/freefile.s +++ b/libsrc/geos-common/file/freefile.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _FreeFile: sta r9L stx r9H diff --git a/libsrc/geos-common/file/getfhdrinfo.s b/libsrc/geos-common/file/getfhdrinfo.s index a9a843e74..1503b1cf1 100644 --- a/libsrc/geos-common/file/getfhdrinfo.s +++ b/libsrc/geos-common/file/getfhdrinfo.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _GetFHdrInfo: sta r9L stx r9H diff --git a/libsrc/geos-common/file/getfile.s b/libsrc/geos-common/file/getfile.s index 9c8011542..24f87e859 100644 --- a/libsrc/geos-common/file/getfile.s +++ b/libsrc/geos-common/file/getfile.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _GetFile: sta r3L stx r3H diff --git a/libsrc/geos-common/file/openrecordfile.s b/libsrc/geos-common/file/openrecordfile.s index cdab3dd6c..cba5d7c08 100644 --- a/libsrc/geos-common/file/openrecordfile.s +++ b/libsrc/geos-common/file/openrecordfile.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _OpenRecordFile: sta r0L stx r0H diff --git a/libsrc/geos-common/file/pointrecord.s b/libsrc/geos-common/file/pointrecord.s index 82b88c4c6..29294737d 100644 --- a/libsrc/geos-common/file/pointrecord.s +++ b/libsrc/geos-common/file/pointrecord.s @@ -10,7 +10,7 @@ .include "jumptab.inc" .include "diskdrv.inc" - + _PointRecord: jsr PointRecord jmp setoserror diff --git a/libsrc/geos-common/file/readfile.s b/libsrc/geos-common/file/readfile.s index 3b43cffd4..d8b941cde 100644 --- a/libsrc/geos-common/file/readfile.s +++ b/libsrc/geos-common/file/readfile.s @@ -12,7 +12,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _ReadFile: sta r2L stx r2H diff --git a/libsrc/geos-common/file/readrecord.s b/libsrc/geos-common/file/readrecord.s index dd464e0b1..be155c718 100644 --- a/libsrc/geos-common/file/readrecord.s +++ b/libsrc/geos-common/file/readrecord.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _ReadRecord: sta r2L stx r2H diff --git a/libsrc/geos-common/file/writerecord.s b/libsrc/geos-common/file/writerecord.s index e0d4c86d4..33b5fef31 100644 --- a/libsrc/geos-common/file/writerecord.s +++ b/libsrc/geos-common/file/writerecord.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _WriteRecord: sta r2L stx r2H diff --git a/libsrc/geos-common/geosmac.inc b/libsrc/geos-common/geosmac.inc index 5ce20ff7f..6398b7a0b 100644 --- a/libsrc/geos-common/geosmac.inc +++ b/libsrc/geos-common/geosmac.inc @@ -136,7 +136,7 @@ Skip: ;------------------------------------------------------------------------- .macro CmpW source, dest -.local Skip +.local Skip CmpB source+1, dest+1 bne Skip CmpB source+0, dest+0 @@ -203,7 +203,7 @@ Skip: .macro rmb bitNumber, dest pha - lda #(1 << bitNumber) ^ $ff + lda #(1 << bitNumber) ^ $ff and dest sta dest pla diff --git a/libsrc/geos-common/graph/bitotherclip.s b/libsrc/geos-common/graph/bitotherclip.s index ef849f6d7..020139da8 100644 --- a/libsrc/geos-common/graph/bitotherclip.s +++ b/libsrc/geos-common/graph/bitotherclip.s @@ -3,7 +3,7 @@ ; ; 21.12.99 -; void BitOtherClip (void *proc1, void* proc2, char skipl, char skipr, int skipy, +; void BitOtherClip (void *proc1, void* proc2, char skipl, char skipr, int skipy, ; struct iconpic *myGfx); ; both proc1, proc2 should be: char __fastcall something (void); diff --git a/libsrc/geos-common/graph/framerectangle.s b/libsrc/geos-common/graph/framerectangle.s index c5f9de04c..eb3ea8df6 100644 --- a/libsrc/geos-common/graph/framerectangle.s +++ b/libsrc/geos-common/graph/framerectangle.s @@ -8,5 +8,5 @@ .export _FrameRectangle .include "jumptab.inc" - + _FrameRectangle = FrameRectangle diff --git a/libsrc/geos-common/graph/imprintrectangle.s b/libsrc/geos-common/graph/imprintrectangle.s index fc327e9d3..08b28690d 100644 --- a/libsrc/geos-common/graph/imprintrectangle.s +++ b/libsrc/geos-common/graph/imprintrectangle.s @@ -4,10 +4,10 @@ ; 21.12.99 ; void ImprintRectangle (void); - + .export _ImprintRectangle .include "jumptab.inc" - + _ImprintRectangle = ImprintRectangle diff --git a/libsrc/geos-common/graph/invertline.s b/libsrc/geos-common/graph/invertline.s index baa4a6e5a..72fb87afb 100644 --- a/libsrc/geos-common/graph/invertline.s +++ b/libsrc/geos-common/graph/invertline.s @@ -9,7 +9,7 @@ .export _InvertLine .include "jumptab.inc" - + _InvertLine: jsr HLineRegs jmp InvertLine diff --git a/libsrc/geos-common/graph/invertrectangle.s b/libsrc/geos-common/graph/invertrectangle.s index 084187255..52750a8e9 100644 --- a/libsrc/geos-common/graph/invertrectangle.s +++ b/libsrc/geos-common/graph/invertrectangle.s @@ -6,7 +6,7 @@ ; void InvertRectangle (void); .export _InvertRectangle - + .include "jumptab.inc" _InvertRectangle = InvertRectangle diff --git a/libsrc/geos-common/graph/recoverline.s b/libsrc/geos-common/graph/recoverline.s index edc366114..8214242d3 100644 --- a/libsrc/geos-common/graph/recoverline.s +++ b/libsrc/geos-common/graph/recoverline.s @@ -7,7 +7,7 @@ .import HLineRegs .export _RecoverLine - + .include "jumptab.inc" _RecoverLine: diff --git a/libsrc/geos-common/graph/recoverrectangle.s b/libsrc/geos-common/graph/recoverrectangle.s index 009ca81eb..2e494fcbe 100644 --- a/libsrc/geos-common/graph/recoverrectangle.s +++ b/libsrc/geos-common/graph/recoverrectangle.s @@ -4,10 +4,10 @@ ; 29.10.99 ; void RecoverRectangle (void); - + .export _RecoverRectangle .include "jumptab.inc" - + _RecoverRectangle = RecoverRectangle diff --git a/libsrc/geos-common/graph/rectangle.s b/libsrc/geos-common/graph/rectangle.s index a9351c47e..6dc283024 100644 --- a/libsrc/geos-common/graph/rectangle.s +++ b/libsrc/geos-common/graph/rectangle.s @@ -6,7 +6,7 @@ ; void Rectangle (void); .export _Rectangle - + .include "jumptab.inc" _Rectangle = Rectangle diff --git a/libsrc/geos-common/graph/testpoint.s b/libsrc/geos-common/graph/testpoint.s index f2dfb7b5d..ad1dd3fee 100644 --- a/libsrc/geos-common/graph/testpoint.s +++ b/libsrc/geos-common/graph/testpoint.s @@ -10,7 +10,7 @@ .export _TestPoint .include "jumptab.inc" - + _TestPoint: jsr PointRegs jsr TestPoint diff --git a/libsrc/geos-common/graph/verticalline.s b/libsrc/geos-common/graph/verticalline.s index 01fb0b725..1ec89a9d7 100644 --- a/libsrc/geos-common/graph/verticalline.s +++ b/libsrc/geos-common/graph/verticalline.s @@ -5,12 +5,12 @@ ; void VerticalLine (char pattern, char ystart, char yend, int x); - .import popa + .import popa .export _VerticalLine .include "jumptab.inc" .include "geossym.inc" - + _VerticalLine: stx r4H sta r4L diff --git a/libsrc/geos-common/mousesprite/ismseinregion.s b/libsrc/geos-common/mousesprite/ismseinregion.s index 0617490c5..da14c9fe8 100644 --- a/libsrc/geos-common/mousesprite/ismseinregion.s +++ b/libsrc/geos-common/mousesprite/ismseinregion.s @@ -7,7 +7,7 @@ .import _InitDrawWindow .export _IsMseInRegion - + .include "jumptab.inc" _IsMseInRegion: diff --git a/libsrc/geos-common/process/processblock.s b/libsrc/geos-common/process/processblock.s index 84ead5993..17f07f28c 100644 --- a/libsrc/geos-common/process/processblock.s +++ b/libsrc/geos-common/process/processblock.s @@ -12,11 +12,11 @@ .export _UnblockProcess .include "jumptab.inc" - + _BlockProcess: tax jmp BlockProcess - + _UnblockProcess: tax jmp UnblockProcess diff --git a/libsrc/geos-common/process/processfreeze.s b/libsrc/geos-common/process/processfreeze.s index bda914bdc..e77bec2d7 100644 --- a/libsrc/geos-common/process/processfreeze.s +++ b/libsrc/geos-common/process/processfreeze.s @@ -10,11 +10,11 @@ .export _UnfreezeProcess .include "jumptab.inc" - + _FreezeProcess: tax jmp FreezeProcess - + _UnfreezeProcess: tax jmp UnfreezeProcess diff --git a/libsrc/geos-common/process/processinitrestartenable.s b/libsrc/geos-common/process/processinitrestartenable.s index 800c2dc5f..73f030d56 100644 --- a/libsrc/geos-common/process/processinitrestartenable.s +++ b/libsrc/geos-common/process/processinitrestartenable.s @@ -20,11 +20,11 @@ _InitProcesses: stx r0H jsr popa jmp InitProcesses - + _RestartProcess: tax jmp RestartProcess - + _EnableProcess: tax jmp EnableProcess diff --git a/libsrc/joystick/joy_load.s b/libsrc/joystick/joy_load.s index 7115f5d07..97ba7a0cd 100644 --- a/libsrc/joystick/joy_load.s +++ b/libsrc/joystick/joy_load.s @@ -87,7 +87,7 @@ ctrl: .addr _read ; Check the driver signature, install the driver. c is already on stack and ; will get removed by joy_install(). -; Res = joy_install (ctrl.module); +; Res = joy_install (ctrl.module); lda ctrl + MOD_CTRL::MODULE ldx ctrl + MOD_CTRL::MODULE+1 diff --git a/libsrc/lynx/bllhdr.s b/libsrc/lynx/bllhdr.s index 07ed06ffb..c34d7b53b 100644 --- a/libsrc/lynx/bllhdr.s +++ b/libsrc/lynx/bllhdr.s @@ -6,7 +6,7 @@ .import __BSS_LOAD__ .import __MAIN_START__ .export __BLLHDR__: absolute = 1 - + ; ------------------------------------------------------------------------ ; BLL header (BLL header) diff --git a/libsrc/lynx/bootldr.s b/libsrc/lynx/bootldr.s index c8b4ca402..ddc24faed 100644 --- a/libsrc/lynx/bootldr.s +++ b/libsrc/lynx/bootldr.s @@ -155,7 +155,7 @@ secreadbyte0: bne exit ;********************************** -; Select a block +; Select a block ;********************************** seclynxblock: pha diff --git a/libsrc/lynx/cgetc.s b/libsrc/lynx/cgetc.s index 362371ec3..d940b2b94 100644 --- a/libsrc/lynx/cgetc.s +++ b/libsrc/lynx/cgetc.s @@ -19,7 +19,7 @@ ; and Opt1 + Opt2 pressed '3'. ; So the keyboard returns '1', '2', '3', 'P', 'R', 'F' or '?'. -_cgetc: +_cgetc: jsr _kbhit ; Check for char available beq _cgetc ora KBSTL diff --git a/libsrc/lynx/eeprom.s b/libsrc/lynx/eeprom.s index 978220cfd..fb0247e90 100644 --- a/libsrc/lynx/eeprom.s +++ b/libsrc/lynx/eeprom.s @@ -252,4 +252,4 @@ EEloop4: rts - + diff --git a/libsrc/lynx/eeprom46.s b/libsrc/lynx/eeprom46.s index 55d9037c0..2b2277e45 100644 --- a/libsrc/lynx/eeprom46.s +++ b/libsrc/lynx/eeprom46.s @@ -4,7 +4,7 @@ ; ; created : 11.05.95 ; last modified : -; +; ; 16.02.96 leaner (thanks to Harry) ; 12.03.96 test for busy after write and erase (well, Harry ;)) ) ; 22.08.97 ported to ra65 for use with cc65 diff --git a/libsrc/lynx/eeprom66.s b/libsrc/lynx/eeprom66.s index 680db8166..6511cf8af 100644 --- a/libsrc/lynx/eeprom66.s +++ b/libsrc/lynx/eeprom66.s @@ -4,7 +4,7 @@ ; ; created : 11.05.95 ; last modified : -; +; ; 16.02.96 leaner (thanks to Harry) ; 12.03.96 test for busy after write and erase (well, Harry ;)) ) ; 22.08.97 ported to ra65 for use with cc65 diff --git a/libsrc/lynx/eeprom86.s b/libsrc/lynx/eeprom86.s index f753b73c3..73b342fae 100644 --- a/libsrc/lynx/eeprom86.s +++ b/libsrc/lynx/eeprom86.s @@ -4,7 +4,7 @@ ; ; created : 11.05.95 ; last modified : -; +; ; 16.02.96 leaner (thanks to Harry) ; 12.03.96 test for busy after write and erase (well, Harry ;)) ) ; 22.08.97 ported to ra65 for use with cc65 diff --git a/libsrc/lynx/exec.s b/libsrc/lynx/exec.s index c0a630a72..307475f1d 100644 --- a/libsrc/lynx/exec.s +++ b/libsrc/lynx/exec.s @@ -6,7 +6,7 @@ ; ; lynx_exec is often used in compilation carts when you run small demos ; created with various (non-cc65) compilers. -; +; ; void lynx_exec(int fileno) ; .importzp _FileDestAddr diff --git a/libsrc/lynx/kbhit.s b/libsrc/lynx/kbhit.s index 90d9061cd..d5b3d1cde 100644 --- a/libsrc/lynx/kbhit.s +++ b/libsrc/lynx/kbhit.s @@ -30,7 +30,7 @@ KBNPR: .byte 0 .code _kbhit: lda KBEDG - bne L1 + bne L1 lda $FCB0 ; Read the Opt buttons and #$0c sta KBTMP diff --git a/libsrc/lynx/lynx-cart.s b/libsrc/lynx/lynx-cart.s index 86e907348..94edff677 100644 --- a/libsrc/lynx/lynx-cart.s +++ b/libsrc/lynx/lynx-cart.s @@ -6,7 +6,7 @@ ; ; Ported to cc65 (http://www.cc65.org) by ; Shawn Jefferson, June 2004 -; +; ; This version by Karri Kaksonen, December 2010 ; ; Helper stuff for the cartridge file functions. This version can deal @@ -16,7 +16,7 @@ .include "lynx.inc" .include "extzp.inc" .export lynxskip0, lynxread0 - .export lynxblock + .export lynxblock .import __BLOCKSIZE__ .code @@ -60,7 +60,7 @@ readbyte0: bne exit ;********************************** -; Select a block +; Select a block ;********************************** lynxblock: pha diff --git a/libsrc/mouse/mouse_load.s b/libsrc/mouse/mouse_load.s index 347250843..a3a3f284d 100644 --- a/libsrc/mouse/mouse_load.s +++ b/libsrc/mouse/mouse_load.s @@ -1,4 +1,4 @@ -; +; ; Ullrich von Bassewitz, 2006-06-05 ; ; unsigned char __fastcall__ mouse_load_driver (const struct mouse_callbacks* c, diff --git a/libsrc/mouse/mouse_move.s b/libsrc/mouse/mouse_move.s index b25716b37..4d809109c 100644 --- a/libsrc/mouse/mouse_move.s +++ b/libsrc/mouse/mouse_move.s @@ -10,7 +10,7 @@ ; .import incsp2 - .import ptr1: zp + .import ptr1: zp .include "mouse-kernel.inc" diff --git a/libsrc/nes/cclear.s b/libsrc/nes/cclear.s index 7a2413826..93f5c7c9a 100644 --- a/libsrc/nes/cclear.s +++ b/libsrc/nes/cclear.s @@ -17,7 +17,7 @@ _cclearxy: _cclear: cmp #0 ; Is the length zero? beq L9 ; Jump if done - sta tmp1 + sta tmp1 L1: lda #$20 ; Blank - screen code jsr cputdirect ; Direct output dec tmp1 diff --git a/libsrc/nes/chline.s b/libsrc/nes/chline.s index d68a77df9..fff229575 100644 --- a/libsrc/nes/chline.s +++ b/libsrc/nes/chline.s @@ -10,7 +10,7 @@ .importzp tmp1 .include "nes.inc" - + _chlinexy: pha ; Save the length jsr gotoxy ; Call this one, will pop params diff --git a/libsrc/nes/gotoy.s b/libsrc/nes/gotoy.s index cfd913f2e..a36e77964 100644 --- a/libsrc/nes/gotoy.s +++ b/libsrc/nes/gotoy.s @@ -19,4 +19,4 @@ .endproc - + diff --git a/libsrc/nes/ppubuf.s b/libsrc/nes/ppubuf.s index 3708b93c1..f08fc1a71 100644 --- a/libsrc/nes/ppubuf.s +++ b/libsrc/nes/ppubuf.s @@ -101,7 +101,7 @@ @end: stx ringread sty ringcount - rts + rts .endproc diff --git a/libsrc/nes/sysuname.s b/libsrc/nes/sysuname.s index 2606d1a60..fcab503e1 100644 --- a/libsrc/nes/sysuname.s +++ b/libsrc/nes/sysuname.s @@ -35,5 +35,5 @@ utsdata: ; machine .asciiz "NES" - + diff --git a/libsrc/osic1p/cclear.s b/libsrc/osic1p/cclear.s index f7e9b2984..e399f14a9 100644 --- a/libsrc/osic1p/cclear.s +++ b/libsrc/osic1p/cclear.s @@ -20,7 +20,7 @@ _cclearxy: _cclear: cmp #0 ; Is the length zero? beq L9 ; Jump if done - sta tmp1 + sta tmp1 L1: lda #' ' jsr cputdirect ; Direct output dec tmp1 diff --git a/libsrc/pce/cclear.s b/libsrc/pce/cclear.s index 14b9d0e8b..e6277eed0 100644 --- a/libsrc/pce/cclear.s +++ b/libsrc/pce/cclear.s @@ -17,7 +17,7 @@ _cclearxy: _cclear: cmp #0 ; Is the length zero? beq L9 ; Jump if done - sta tmp1 + sta tmp1 L1: lda #$20 ; Blank - screen code jsr cputdirect ; Direct output dec tmp1 diff --git a/libsrc/plus4/randomize.s b/libsrc/plus4/randomize.s index 2a7f6a44b..796ad118b 100644 --- a/libsrc/plus4/randomize.s +++ b/libsrc/plus4/randomize.s @@ -11,7 +11,7 @@ .include "plus4.inc" -__randomize: +__randomize: ldx TED_VLINELO ; Use TED rasterline as high byte lda TIME+2 ; Use 60HZ clock as low byte jmp _srand ; Initialize generator diff --git a/libsrc/runtime/add.s b/libsrc/runtime/add.s index e644671c0..a4658cc13 100644 --- a/libsrc/runtime/add.s +++ b/libsrc/runtime/add.s @@ -33,13 +33,13 @@ hiadd: txa ; (19) inc sp+1 ; (-1+5) done: tya ; (36) -.else +.else ldy #0 ; (4) adc (sp),y ; (9) lo byte iny ; (11) sta tmp1 ; (14) save it - txa ; (16) + txa ; (16) adc (sp),y ; (21) hi byte tax ; (23) clc ; (25) diff --git a/libsrc/runtime/aslax1.s b/libsrc/runtime/aslax1.s index 14f0be3cc..97ac71c45 100644 --- a/libsrc/runtime/aslax1.s +++ b/libsrc/runtime/aslax1.s @@ -6,7 +6,7 @@ .export aslax1, shlax1 .importzp tmp1 - + aslax1: shlax1: stx tmp1 asl A diff --git a/libsrc/runtime/decsp1.s b/libsrc/runtime/decsp1.s index 5aa7fa204..3c673664a 100644 --- a/libsrc/runtime/decsp1.s +++ b/libsrc/runtime/decsp1.s @@ -20,4 +20,4 @@ - + diff --git a/libsrc/runtime/incsp1.s b/libsrc/runtime/incsp1.s index 43c92dc82..2272e200f 100644 --- a/libsrc/runtime/incsp1.s +++ b/libsrc/runtime/incsp1.s @@ -19,4 +19,4 @@ - + diff --git a/libsrc/runtime/incsp3.s b/libsrc/runtime/incsp3.s index 29067a55e..f54b13920 100644 --- a/libsrc/runtime/incsp3.s +++ b/libsrc/runtime/incsp3.s @@ -17,4 +17,4 @@ - + diff --git a/libsrc/runtime/incsp4.s b/libsrc/runtime/incsp4.s index 51e9229bb..736438fce 100644 --- a/libsrc/runtime/incsp4.s +++ b/libsrc/runtime/incsp4.s @@ -17,4 +17,4 @@ - + diff --git a/libsrc/runtime/incsp5.s b/libsrc/runtime/incsp5.s index 164c62524..55cf780d4 100644 --- a/libsrc/runtime/incsp5.s +++ b/libsrc/runtime/incsp5.s @@ -17,4 +17,4 @@ - + diff --git a/libsrc/runtime/incsp6.s b/libsrc/runtime/incsp6.s index 1a393840e..94c536e7c 100644 --- a/libsrc/runtime/incsp6.s +++ b/libsrc/runtime/incsp6.s @@ -17,4 +17,4 @@ - + diff --git a/libsrc/runtime/incsp7.s b/libsrc/runtime/incsp7.s index 8a5838137..be8784ecb 100644 --- a/libsrc/runtime/incsp7.s +++ b/libsrc/runtime/incsp7.s @@ -17,4 +17,4 @@ - + diff --git a/libsrc/runtime/land.s b/libsrc/runtime/land.s index 6ea4e5bcb..8e21ebb60 100644 --- a/libsrc/runtime/land.s +++ b/libsrc/runtime/land.s @@ -10,7 +10,7 @@ .importzp sp, sreg, tmp1 .macpack cpu - + tosand0ax: .if (.cpu .bitand ::CPU_ISET_65SC02) stz sreg @@ -19,7 +19,7 @@ tosand0ax: ldy #$00 sty sreg sty sreg+1 -.endif +.endif tosandeax: .if (.cpu .bitand ::CPU_ISET_65SC02) @@ -29,7 +29,7 @@ tosandeax: ldy #0 and (sp),y ; byte 0 iny -.endif +.endif sta tmp1 txa and (sp),y ; byte 1 diff --git a/libsrc/runtime/ldauisp.s b/libsrc/runtime/ldauisp.s index 1afcf2487..54f4d1bd1 100644 --- a/libsrc/runtime/ldauisp.s +++ b/libsrc/runtime/ldauisp.s @@ -21,4 +21,4 @@ ldauiysp: lda (ptr1),y rts - + diff --git a/libsrc/runtime/leave.s b/libsrc/runtime/leave.s index 4a9ff7994..95dcdec9d 100644 --- a/libsrc/runtime/leave.s +++ b/libsrc/runtime/leave.s @@ -1,4 +1,4 @@ -; +; ; Ullrich von Bassewitz, 06.08.1998 ; Christian Krueger, 11-Mar-2017, added 65SC02 optimization ; diff --git a/libsrc/runtime/leq.s b/libsrc/runtime/leq.s index 44316aa08..ac9894b53 100644 --- a/libsrc/runtime/leq.s +++ b/libsrc/runtime/leq.s @@ -7,7 +7,7 @@ .export toseqeax .import toslcmp, booleq -toseqeax: +toseqeax: jsr toslcmp ; Set flags jmp booleq ; Convert to boolean diff --git a/libsrc/runtime/lmod.s b/libsrc/runtime/lmod.s index caeb0c4f6..b8e796dea 100644 --- a/libsrc/runtime/lmod.s +++ b/libsrc/runtime/lmod.s @@ -23,7 +23,7 @@ tosmod0ax: sty sreg+1 .endif -tosmodeax: +tosmodeax: jsr poplsargs ; Get arguments from stack, adjust sign jsr udiv32 ; Do the division, remainder is in (ptr2:tmp3:tmp4) diff --git a/libsrc/runtime/lmul.s b/libsrc/runtime/lmul.s index d3c34637c..90d5f1e97 100644 --- a/libsrc/runtime/lmul.s +++ b/libsrc/runtime/lmul.s @@ -17,10 +17,10 @@ tosumul0ax: stz sreg stz sreg+1 .else - ldy #$00 + ldy #$00 sty sreg sty sreg+1 -.endif +.endif tosmuleax: tosumuleax: @@ -29,7 +29,7 @@ mul32: sta ptr1 .if (.cpu .bitand ::CPU_ISET_65SC02) lda (sp) ldy #1 -.else +.else ldy #0 lda (sp),y iny diff --git a/libsrc/runtime/lor.s b/libsrc/runtime/lor.s index 94ab3c890..f2204b981 100644 --- a/libsrc/runtime/lor.s +++ b/libsrc/runtime/lor.s @@ -8,7 +8,7 @@ .export tosor0ax, tosoreax .import addysp1 .importzp sp, sreg, tmp1 - + .macpack cpu tosor0ax: @@ -19,7 +19,7 @@ tosor0ax: ldy #$00 sty sreg sty sreg+1 -.endif +.endif tosoreax: .if (.cpu .bitand ::CPU_ISET_65SC02) @@ -29,7 +29,7 @@ tosoreax: ldy #0 ora (sp),y ; byte 0 iny -.endif +.endif sta tmp1 txa ora (sp),y ; byte 1 diff --git a/libsrc/runtime/lpop.s b/libsrc/runtime/lpop.s index ffff5ffc1..a90ea5fcb 100644 --- a/libsrc/runtime/lpop.s +++ b/libsrc/runtime/lpop.s @@ -22,7 +22,7 @@ popeax: ldy #3 tax .if (.cpu .bitand ::CPU_ISET_65SC02) lda (sp) -.else +.else dey lda (sp),y .endif diff --git a/libsrc/runtime/lpush.s b/libsrc/runtime/lpush.s index 4fed77f05..0bc67b523 100644 --- a/libsrc/runtime/lpush.s +++ b/libsrc/runtime/lpush.s @@ -41,9 +41,9 @@ pusheax: pla .if (.cpu .bitand ::CPU_ISET_65SC02) sta (sp) -.else +.else dey sta (sp),y -.endif +.endif rts diff --git a/libsrc/runtime/lrsub.s b/libsrc/runtime/lrsub.s index 928164f40..5e8d0b543 100644 --- a/libsrc/runtime/lrsub.s +++ b/libsrc/runtime/lrsub.s @@ -29,7 +29,7 @@ tosrsubeax: .if (.cpu .bitand ::CPU_ISET_65SC02) sbc (sp) ldy #1 -.else +.else ldy #0 sbc (sp),y ; byte 0 iny diff --git a/libsrc/runtime/lsub.s b/libsrc/runtime/lsub.s index 6f80491ca..4c50ded14 100644 --- a/libsrc/runtime/lsub.s +++ b/libsrc/runtime/lsub.s @@ -21,7 +21,7 @@ tossub0ax: ldy #$00 sty sreg sty sreg+1 -.endif +.endif tossubeax: sec diff --git a/libsrc/runtime/lsubeq.s b/libsrc/runtime/lsubeq.s index 5e3d25783..b16ab18e1 100644 --- a/libsrc/runtime/lsubeq.s +++ b/libsrc/runtime/lsubeq.s @@ -1,4 +1,4 @@ -; +; ; Ullrich von Bassewitz, 07.04.2000 ; Christian Krueger, 12-Mar-2017, added 65SC02 optimization ; @@ -22,19 +22,19 @@ lsubeqa: stx sreg+1 lsubeq: sty ptr1+1 ; Store high byte of address - + sec eor #$FF .if (.cpu .bitand ::CPU_ISET_65SC02) adc (ptr1) ; Subtract byte 0 sta (ptr1) - ldy #$01 ; Address byte 1 + ldy #$01 ; Address byte 1 .else ldy #$00 ; Address low byte adc (ptr1),y ; Subtract byte 0 sta (ptr1),y - iny ; Address byte 1 - .endif + iny ; Address byte 1 + .endif pha ; Save byte 0 of result for later txa eor #$FF diff --git a/libsrc/runtime/ltest.s b/libsrc/runtime/ltest.s index 6027b8dd4..d0caf2197 100644 --- a/libsrc/runtime/ltest.s +++ b/libsrc/runtime/ltest.s @@ -17,6 +17,6 @@ utsteax: beq L9 tya ldy #1 ; Force NE -L9: rts +L9: rts diff --git a/libsrc/runtime/ludiv.s b/libsrc/runtime/ludiv.s index 8a3126d72..e2e27371e 100644 --- a/libsrc/runtime/ludiv.s +++ b/libsrc/runtime/ludiv.s @@ -21,7 +21,7 @@ tosudiv0ax: sty sreg+1 .endif -tosudiveax: +tosudiveax: jsr getlop ; Get the paramameters jsr udiv32 ; Do the division lda ptr1 ; Result is in ptr1:sreg diff --git a/libsrc/runtime/lumod.s b/libsrc/runtime/lumod.s index 241801a90..09909c0c9 100644 --- a/libsrc/runtime/lumod.s +++ b/libsrc/runtime/lumod.s @@ -11,7 +11,7 @@ .macpack cpu -tosumod0ax: +tosumod0ax: .if (.cpu .bitand ::CPU_ISET_65SC02) stz sreg stz sreg+1 diff --git a/libsrc/runtime/lxor.s b/libsrc/runtime/lxor.s index 4ec9a4129..a92a59959 100644 --- a/libsrc/runtime/lxor.s +++ b/libsrc/runtime/lxor.s @@ -25,7 +25,7 @@ tosxoreax: .if (.cpu .bitand ::CPU_ISET_65SC02) eor (sp) ; byte 0 ldy #1 -.else +.else ldy #0 eor (sp),y ; byte 0 iny diff --git a/libsrc/runtime/mul.s b/libsrc/runtime/mul.s index 087e639fc..68cdea0c6 100644 --- a/libsrc/runtime/mul.s +++ b/libsrc/runtime/mul.s @@ -23,7 +23,7 @@ tosumulax: ; Do ptr4:ptr4+1 * ptr1:ptr1+1 --> AX - tya ; A = 0 + tya ; A = 0 ldy ptr1+1 ; check if lhs is 8 bit only beq @L4 ; -> we can do 8x16 after swap sta tmp1 @@ -36,7 +36,7 @@ tosumulax: clc adc ptr1 tax - lda ptr1+1 ; Hi byte of left op + lda ptr1+1 ; Hi byte of left op adc tmp1 sta tmp1 txa diff --git a/libsrc/runtime/mulax3.s b/libsrc/runtime/mulax3.s index 513ba723e..342379605 100644 --- a/libsrc/runtime/mulax3.s +++ b/libsrc/runtime/mulax3.s @@ -7,7 +7,7 @@ .export mulax3 .importzp ptr1 - + .proc mulax3 sta ptr1 diff --git a/libsrc/runtime/or.s b/libsrc/runtime/or.s index 1c2c4125e..735f30f61 100644 --- a/libsrc/runtime/or.s +++ b/libsrc/runtime/or.s @@ -21,7 +21,7 @@ tosorax: ldy #0 ora (sp),y iny -.endif +.endif sta tmp1 txa ora (sp),y diff --git a/libsrc/runtime/pushaff.s b/libsrc/runtime/pushaff.s index 08d988bb2..ae2142b0e 100644 --- a/libsrc/runtime/pushaff.s +++ b/libsrc/runtime/pushaff.s @@ -17,4 +17,4 @@ .endproc - + diff --git a/libsrc/runtime/pushax.s b/libsrc/runtime/pushax.s index cba313c2f..ac181b994 100644 --- a/libsrc/runtime/pushax.s +++ b/libsrc/runtime/pushax.s @@ -30,6 +30,6 @@ pusha0: ldx #0 pla ; (31) dey ; (33) sta (sp),y ; (38) - rts ; (44) + rts ; (44) .endproc diff --git a/libsrc/runtime/return0.s b/libsrc/runtime/return0.s index c061e013c..331f3334f 100644 --- a/libsrc/runtime/return0.s +++ b/libsrc/runtime/return0.s @@ -17,4 +17,4 @@ - + diff --git a/libsrc/runtime/return1.s b/libsrc/runtime/return1.s index 76153f3e1..e39cdf74e 100644 --- a/libsrc/runtime/return1.s +++ b/libsrc/runtime/return1.s @@ -17,4 +17,4 @@ - + diff --git a/libsrc/runtime/swap.s b/libsrc/runtime/swap.s index d4a74df5f..5358e08d3 100644 --- a/libsrc/runtime/swap.s +++ b/libsrc/runtime/swap.s @@ -23,13 +23,13 @@ swapstk: tay lda ptr4 sta (sp) - tya -.else + tya +.else dey lda (sp),y pha lda ptr4 sta (sp),y pla -.endif +.endif rts ; whew! diff --git a/libsrc/runtime/umod.s b/libsrc/runtime/umod.s index 5788d569e..205df59d7 100644 --- a/libsrc/runtime/umod.s +++ b/libsrc/runtime/umod.s @@ -25,4 +25,4 @@ tosumodax: ldx sreg+1 rts - + diff --git a/libsrc/runtime/umul16x16r32.s b/libsrc/runtime/umul16x16r32.s index cd2dae351..cfcf82d9e 100644 --- a/libsrc/runtime/umul16x16r32.s +++ b/libsrc/runtime/umul16x16r32.s @@ -12,7 +12,7 @@ ;--------------------------------------------------------------------------- ; 16x16 => 32 unsigned multiplication routine. Because the overhead for a -; 16x16 => 16 unsigned multiplication routine is small, we will tag it with +; 16x16 => 16 unsigned multiplication routine is small, we will tag it with ; the matching labels, as well. ; ; routine LHS RHS result result also in diff --git a/libsrc/sym1/read.s b/libsrc/sym1/read.s index c041664da..5f6a71144 100644 --- a/libsrc/sym1/read.s +++ b/libsrc/sym1/read.s @@ -48,6 +48,6 @@ putch: ldy #$00 ; Put char into return buffer done: lda ptr3 ldx ptr3+1 - rts ; Return count + rts ; Return count .endproc diff --git a/libsrc/sym1/write.s b/libsrc/sym1/write.s index dbe738468..008902e58 100644 --- a/libsrc/sym1/write.s +++ b/libsrc/sym1/write.s @@ -13,7 +13,7 @@ .proc _write - sta ptr3 + sta ptr3 stx ptr3+1 ; Count in ptr3 inx stx ptr2+1 ; Increment and store in ptr2 diff --git a/libsrc/telestrat/cclear.s b/libsrc/telestrat/cclear.s index b9fce4708..804381e89 100644 --- a/libsrc/telestrat/cclear.s +++ b/libsrc/telestrat/cclear.s @@ -6,9 +6,9 @@ ; .export _cclearxy, _cclear - .import update_adscr, display_conio + .import update_adscr, display_conio - .importzp tmp1 + .importzp tmp1 .import popax .include "telestrat.inc" diff --git a/libsrc/telestrat/chline.s b/libsrc/telestrat/chline.s index 91f3bdc9f..cd7628eca 100644 --- a/libsrc/telestrat/chline.s +++ b/libsrc/telestrat/chline.s @@ -4,7 +4,7 @@ ; .export _chlinexy, _chline - + .import rvs, display_conio, update_adscr .import popax @@ -22,7 +22,7 @@ _chlinexy: _chline: tax ; Is the length zero? beq @L9 ; Jump if done -@L1: +@L1: lda #'-' ; Horizontal line screen code ora rvs diff --git a/libsrc/telestrat/clrscr.s b/libsrc/telestrat/clrscr.s index c02c26647..749e40b8f 100644 --- a/libsrc/telestrat/clrscr.s +++ b/libsrc/telestrat/clrscr.s @@ -4,7 +4,7 @@ .export _clrscr .import OLD_CHARCOLOR, OLD_BGCOLOR, BGCOLOR, CHARCOLOR - + .include "telestrat.inc" .proc _clrscr @@ -35,13 +35,13 @@ ldx #$00 stx SCRY stx SCRX - + stx OLD_BGCOLOR ; Black stx BGCOLOR - + ldx #$07 ; White stx OLD_CHARCOLOR stx CHARCOLOR - + rts .endproc diff --git a/libsrc/telestrat/cputc.s b/libsrc/telestrat/cputc.s index 16b13f8cd..13714b32d 100644 --- a/libsrc/telestrat/cputc.s +++ b/libsrc/telestrat/cputc.s @@ -6,7 +6,7 @@ .export _cputc, _cputcxy, cputdirect, display_conio .export CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR - + .import update_adscr .import popax @@ -19,13 +19,13 @@ _cputcxy: sta SCRY ; Store Y stx SCRX ; Store X jsr update_adscr - pla + pla _cputc: cmp #$0D bne @not_CR ldy #$00 - sty SCRX + sty SCRX rts @not_CR: cmp #$0A @@ -80,10 +80,10 @@ do_not_change_color: sty SCRX inc SCRY - + jmp update_adscr - -@no_inc: + +@no_inc: sty SCRX rts .endproc diff --git a/libsrc/telestrat/gotoxy.s b/libsrc/telestrat/gotoxy.s index 3fbdc25e0..c0907a623 100644 --- a/libsrc/telestrat/gotoxy.s +++ b/libsrc/telestrat/gotoxy.s @@ -19,7 +19,7 @@ gotoxy: jsr popa ; Get Y ; In telemon, there is a position for the prompt, and another for the cursor. sta SCRY - + jsr popa sta SCRX @@ -48,6 +48,6 @@ skip: sta ADSCR dey bne loop -out: +out: rts .endproc diff --git a/libsrc/telestrat/joy/telestrat.s b/libsrc/telestrat/joy/telestrat.s index e4a6d94f2..0f5d28651 100644 --- a/libsrc/telestrat/joy/telestrat.s +++ b/libsrc/telestrat/joy/telestrat.s @@ -52,7 +52,7 @@ INSTALL: lda #%11000000 sta VIA2::DDRB sta VIA2::PRB - ; We could detect joysticks because with previous command bit0,1,2,3,4 should be set to 1 after + ; We could detect joysticks because with previous command bit0,1,2,3,4 should be set to 1 after ; But if some one press fire or press direction, we could reach others values which could break joystick detection. lda #<JOY_ERR_OK ldx #>JOY_ERR_OK @@ -83,7 +83,7 @@ COUNT: ; PB7 and PB6 select right or left port ; When PB7 and PB6 are high, it controls two CA3083 (2 NPN transistors array) bases. ; In that case, PB0 to PB4 are set to high (it means no action are pressed) -; When the user press something then bit will be set to 0. +; When the user press something then bit will be set to 0. ; Bit 0 is right ; Bit 1 is left ; Bit 2 is fire @@ -94,18 +94,18 @@ READ: lda VIA2::PRB and #%01111111 - ora #%01000000 + ora #%01000000 sta VIA2::PRB ; then read lda VIA2::PRB eor #%01011111 - + rts -right: +right: lda VIA2::PRB and #%10111111 ora #%10000000 - sta VIA2::PRB + sta VIA2::PRB ; then read lda VIA2::PRB diff --git a/libsrc/telestrat/orixhdr.s b/libsrc/telestrat/orixhdr.s index 58e93efbb..78d6c945a 100644 --- a/libsrc/telestrat/orixhdr.s +++ b/libsrc/telestrat/orixhdr.s @@ -24,7 +24,7 @@ .byte $01 ; Version of the header .byte $00,%00000000 ; 6502 only .byte $00,$00 ; Type of language - .byte $00,$00 ; OS version + .byte $00,$00 ; OS version .byte $00 ; Reserved .byte $00 ; Auto or not diff --git a/libsrc/telestrat/sound.s b/libsrc/telestrat/sound.s index 3718debd4..2a786a452 100644 --- a/libsrc/telestrat/sound.s +++ b/libsrc/telestrat/sound.s @@ -33,7 +33,7 @@ sound_bip_keyboard: rts .endproc -.proc _zap +.proc _zap BRK_TELEMON XZAP rts .endproc diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index 09763bdbb..6257880b8 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -11,7 +11,7 @@ .include "telestrat.inc" .include "zeropage.inc" - + __syschdir: ; Throw away all parameters except the name @@ -24,9 +24,9 @@ __syschdir: stx tmp1 ldy tmp1 - + ; Call telemon primitive - + BRK_TELEMON(XPUTCWD) jmp initcwd ; Update cwd diff --git a/libsrc/telestrat/sysmkdir.s b/libsrc/telestrat/sysmkdir.s index 26d97c4b0..259be8d7c 100644 --- a/libsrc/telestrat/sysmkdir.s +++ b/libsrc/telestrat/sysmkdir.s @@ -9,7 +9,7 @@ .include "telestrat.inc" .include "zeropage.inc" - + __sysmkdir: ; Throw away all parameters except the name @@ -19,11 +19,11 @@ __sysmkdir: ; Get name jsr popax - + ; Call telemon primitive - + BRK_TELEMON(XMKDIR) - + rts diff --git a/libsrc/telestrat/tgi/telestrat-228-200-3.s b/libsrc/telestrat/tgi/telestrat-228-200-3.s index 7eda27bc9..402e04e7e 100644 --- a/libsrc/telestrat/tgi/telestrat-228-200-3.s +++ b/libsrc/telestrat/tgi/telestrat-228-200-3.s @@ -107,7 +107,7 @@ INIT: ; Switch into graphics mode. BRK_TELEMON(XHIRES) - + ; Done, reset the error code. lda #TGI_ERR_OK @@ -255,18 +255,18 @@ GETDEFPALETTE: SETPIXEL: lda #$80 - + SETPIXELSETMODE: sta HRSFB lda X1 sta HRS1 lda Y1 sta HRS2 - - + + BRK_TELEMON(XCURSE) - + rts ; ------------------------------------------------------------------------ @@ -291,7 +291,7 @@ LINE: sta HRS1 lda Y1 sta HRS2 - + lda X2 sta HRS3 lda Y2 @@ -300,14 +300,14 @@ LINE: lda X1+1 sta HRS1+1 - lda Y1+1 + lda Y1+1 sta HRS2+1 lda X2+1 sta HRS3+1 - - lda Y2+1 - sta HRS4+1 + + lda Y2+1 + sta HRS4+1 lda #$FF sta HRSPAT @@ -315,12 +315,12 @@ LINE: BRK_TELEMON(XDRAWA) rts - - + + CIRCLE: ; not done yet rts - + ; ------------------------------------------------------------------------ ; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where ; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4, using the current drawing color. @@ -364,11 +364,11 @@ OUTTEXT: ; put hires cursor in X & Y lda #$00 jsr SETPIXELSETMODE - - + + ; count the length of the string ldy #$00 -loop: +loop: lda (ptr3),y beq out iny @@ -376,10 +376,10 @@ loop: out: ; XSCHAR routine from telemon needs to have the length of the string in X register ; copy Y register to X register. It could be optimized in 65C02 with TYX - tya + tya tax - + lda ptr3 ; XSCHAR needs in A and Y the address of the string - ldy ptr3+1 + ldy ptr3+1 BRK_TELEMON(XSCHAR) rts diff --git a/libsrc/telestrat/tgi/telestrat-240-200-2.s b/libsrc/telestrat/tgi/telestrat-240-200-2.s index 7a6bb8a4c..d619fc6f1 100644 --- a/libsrc/telestrat/tgi/telestrat-240-200-2.s +++ b/libsrc/telestrat/tgi/telestrat-240-200-2.s @@ -124,7 +124,7 @@ INIT: ; Switch into graphics mode BRK_TELEMON(XHIRES) - + ; Done, reset the error code lda #TGI_ERR_OK @@ -247,17 +247,17 @@ GETDEFPALETTE: ; SETPIXEL: - lda #$80 ; curset on -SETPIXELSETMODE: + lda #$80 ; curset on +SETPIXELSETMODE: sta HRSFB - + lda X1 sta HRS1 lda Y1 sta HRS2 - - - + + + BRK_TELEMON(XCURSE) rts @@ -289,19 +289,19 @@ LINE: sta HRS3 lda Y2 sta HRS4 - + lda X1+1 sta HRS1+1 - lda Y1+1 + lda Y1+1 sta HRS2+1 lda X2+1 sta HRS3+1 - - lda Y2+1 - sta HRS4+1 + + lda Y2+1 + sta HRS4+1 lda #$FF sta HRSPAT @@ -309,11 +309,11 @@ LINE: BRK_TELEMON(XDRAWA) rts - -CIRCLE: + +CIRCLE: ; not done yet - rts - + rts + ; ------------------------------------------------------------------------ ; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where ; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color. @@ -357,11 +357,11 @@ OUTTEXT: ; put hires cursor in X & Y lda #$00 jsr SETPIXELSETMODE - - + + ; count the length of the string ldy #$00 -loop: +loop: lda (ptr3),y beq out iny @@ -369,10 +369,10 @@ loop: out: ; XSCHAR routine from telemon needs to have the length of the string in X register ; copy Y register to X register. It could be optimized in 65C02 with TYX - tya + tya tax - + lda ptr3 ; XSCHAR needs in A and Y the address of the string - ldy ptr3+1 + ldy ptr3+1 BRK_TELEMON(XSCHAR) rts diff --git a/libsrc/tgi/tgi_gettextheight.s b/libsrc/tgi/tgi_gettextheight.s index 38df6a69a..bd05386c1 100644 --- a/libsrc/tgi/tgi_gettextheight.s +++ b/libsrc/tgi/tgi_gettextheight.s @@ -15,7 +15,7 @@ ; */ ; -.proc _tgi_gettextheight +.proc _tgi_gettextheight ldy _tgi_font bne @L2 ; Jump if vector font diff --git a/libsrc/tgi/tgi_imulround.s b/libsrc/tgi/tgi_imulround.s index 112f2930f..7b7f25b78 100644 --- a/libsrc/tgi/tgi_imulround.s +++ b/libsrc/tgi/tgi_imulround.s @@ -1,7 +1,7 @@ ; ; Ullrich von Bassewitz, 2009-11-05 ; -; Helper function for graphics functions: Multiply two values, one being +; Helper function for graphics functions: Multiply two values, one being ; an 8.8 fixed point one, and return the rounded and scaled result. ; ; The module has two entry points: One is C callable and expects the @@ -60,4 +60,4 @@ tgi_imulround: tya rts - + diff --git a/libsrc/tgi/tgi_lineto.s b/libsrc/tgi/tgi_lineto.s index abe4b3f96..6934bfe2c 100644 --- a/libsrc/tgi/tgi_lineto.s +++ b/libsrc/tgi/tgi_lineto.s @@ -17,7 +17,7 @@ @L1: lda _tgi_curx,y sta tgi_clip_x1,y dey - bpl @L1 + bpl @L1 pla jsr tgi_linepop ; Pop x2/y2 jmp tgi_clippedline ; Call the line clipper diff --git a/libsrc/tgi/tgi_outtext.s b/libsrc/tgi/tgi_outtext.s index 079cea3af..e0a3c6d25 100644 --- a/libsrc/tgi/tgi_outtext.s +++ b/libsrc/tgi/tgi_outtext.s @@ -125,7 +125,7 @@ VectorFont: jsr MoveCursor ; Move the graphics cursor ; Next char in string - + inc text bne @L1 inc text+1 diff --git a/libsrc/tgi/tgidrv_line.inc b/libsrc/tgi/tgidrv_line.inc index e904b5117..5fd6b229e 100644 --- a/libsrc/tgi/tgidrv_line.inc +++ b/libsrc/tgi/tgidrv_line.inc @@ -269,7 +269,7 @@ abs: ; A/Y := abs (A/Y) cpy #$00 bpl :+ - + ; A/Y := neg (A/Y) neg: clc eor #$FF From 299f967527a2ca9d8aa9bca4d641d41d0c518ef5 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:06:45 +0200 Subject: [PATCH 1214/2710] remove dangling spaces --- samples/geos/dialog.c | 4 ++-- samples/geos/filesel.c | 6 +++--- samples/geos/geosconio.c | 10 +++++----- samples/geos/geosver.c | 2 +- samples/geos/hello1.c | 8 ++++---- samples/geos/hello2.c | 12 ++++++------ samples/geos/overlay-demo.c | 2 +- samples/geos/rmvprot.c | 8 ++++---- samples/sym1/symDisplay.c | 4 ++-- samples/sym1/symExtendedMemory.c | 2 +- samples/sym1/symIO.c | 4 ++-- 11 files changed, 31 insertions(+), 31 deletions(-) diff --git a/samples/geos/dialog.c b/samples/geos/dialog.c index 27199a493..c3231e855 100644 --- a/samples/geos/dialog.c +++ b/samples/geos/dialog.c @@ -1,4 +1,4 @@ -/* Note: +/* Note: ** This is just a sample piece of code that shows how to use some structs - ** it may not even run. */ @@ -28,5 +28,5 @@ static const dlgBoxStr myDialog = { void main (void) { - DoDlgBox (&myDialog); + DoDlgBox (&myDialog); } diff --git a/samples/geos/filesel.c b/samples/geos/filesel.c index c0a591eb9..fcca258bb 100644 --- a/samples/geos/filesel.c +++ b/samples/geos/filesel.c @@ -1,11 +1,11 @@ /* GEOSLib example - + using DlgBoxFileSelect - + Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl> - + 26.12.1999 */ diff --git a/samples/geos/geosconio.c b/samples/geos/geosconio.c index 963fa06a0..55acac38e 100644 --- a/samples/geos/geosconio.c +++ b/samples/geos/geosconio.c @@ -9,16 +9,16 @@ void main(void) char ch; DlgBoxOk("Now the screen will be", "cleared."); - + clrscr(); - + DlgBoxOk("Now a character will be", "written at 20,20"); - + gotoxy(20, 20); cputc('A'); DlgBoxOk("Now a string will be", "written at 0,1"); - + cputsxy(0, 1, CBOLDON "Just" COUTLINEON "a " CITALICON "string." CPLAINTEXT ); DlgBoxOk("Write text and finish it", "with a dot."); @@ -31,7 +31,7 @@ void main(void) cursor(0); DlgBoxOk("Seems that it is all for conio.", "Let's test mouse routines."); - + mouse_init(1); cputsxy(0, 2, CBOLDON "Now you can't see mouse (press any key)" CPLAINTEXT); mouse_hide(); diff --git a/samples/geos/geosver.c b/samples/geos/geosver.c index 3d68798a2..fa8351e0d 100644 --- a/samples/geos/geosver.c +++ b/samples/geos/geosver.c @@ -57,6 +57,6 @@ void main (void) } Sleep(10*50); - + return; } diff --git a/samples/geos/hello1.c b/samples/geos/hello1.c index 8dc13d5b4..bd51dd1b9 100644 --- a/samples/geos/hello1.c +++ b/samples/geos/hello1.c @@ -1,11 +1,11 @@ /* GEOSLib example - + Hello, world example - with DBox - + Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl> - + 26.12.1999 */ @@ -18,7 +18,7 @@ void main (void) DlgBoxOk(CBOLDON "Hello, world" CPLAINTEXT, "This is written in C!"); - + // Normal apps exit from main into system's mainloop, and app finish // when user selects it from icons or menu, but here we want to exit // immediately. diff --git a/samples/geos/hello2.c b/samples/geos/hello2.c index 3f148b0b8..ae93fa1a4 100644 --- a/samples/geos/hello2.c +++ b/samples/geos/hello2.c @@ -1,11 +1,11 @@ /* GEOSLib example - + Hello, world example - using graphic functions - + Maciej 'YTM/Alliance' Witkowiak <ytm@friko.onet.pl> - + 26.12.1999 */ @@ -25,18 +25,18 @@ void main (void) SetPattern(0); InitDrawWindow(&wholeScreen); Rectangle(); - + // Now some texts PutString(COUTLINEON "This is compiled using cc65!" CPLAINTEXT, 20, 10); PutString(CBOLDON "This is bold", 30, 10); PutString(CULINEON "and this is bold and underline!", 40, 10); PutString(CPLAINTEXT "This is plain text", 50, 10); - + // Wait for 5 secs... // Note that this is multitasking sleep, and if there are any icons/menus onscreen, // they would be usable, in this case you have only pointer usable Sleep(5*50); - + // Normal apps exit from main into system's mainloop, and app finish // when user selects it from icons or menu, but here we want to exit // immediately. diff --git a/samples/geos/overlay-demo.c b/samples/geos/overlay-demo.c index a37f6bdcb..73ab0e3c0 100644 --- a/samples/geos/overlay-demo.c +++ b/samples/geos/overlay-demo.c @@ -33,7 +33,7 @@ void foo(void) { /* Functions resident in an overlay can access all program variables and ** constants at any time without any precautions because those are never - ** placed in overlays. The string constant "One" is an example for such + ** placed in overlays. The string constant "One" is an example for such ** a constant resident in the main program. */ show("One"); diff --git a/samples/geos/rmvprot.c b/samples/geos/rmvprot.c index 4f8798f98..152f6cf0f 100644 --- a/samples/geos/rmvprot.c +++ b/samples/geos/rmvprot.c @@ -1,12 +1,12 @@ /* GEOSLib example - + This small application removes GEOS disk write protection tag. e.g. boot disk is always protected after boot-up - + Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl> - + 21.03.2000 */ @@ -60,7 +60,7 @@ void main(void) { // Here we clear the screen. Not really needed anyway... GraphicsString(&clearScreen); - + // Get the name of current disk to show it in dialog box GetPtrCurDkNm(diskName); diff --git a/samples/sym1/symDisplay.c b/samples/sym1/symDisplay.c index dce39f6b9..43d18f911 100644 --- a/samples/sym1/symDisplay.c +++ b/samples/sym1/symDisplay.c @@ -14,7 +14,7 @@ int main (void) { int flashes = 255; int displayable = 1; int e = 0; - int r = 0; + int r = 0; int d = 0; int i = 0; int l = 0; @@ -40,7 +40,7 @@ int main (void) { puts ("\n\nHow many times (0 for forever) to repeat?"); c = getchar(); if ( (c >= '0') && (c <= '9') ) {// between 1 and 9 loops allowed - z = 1; // a number was pressed + z = 1; // a number was pressed t = c - '0'; // convert char to int puts ("\n\nLook at the front panel.\n"); } diff --git a/samples/sym1/symExtendedMemory.c b/samples/sym1/symExtendedMemory.c index cc01da353..897276e6f 100644 --- a/samples/sym1/symExtendedMemory.c +++ b/samples/sym1/symExtendedMemory.c @@ -72,7 +72,7 @@ int main (void) { error = 0; } } - segment += 0x1000; // Increment to next segment + segment += 0x1000; // Increment to next segment } segment[0] = 0x00; // Check beginning of top memory segment diff --git a/samples/sym1/symIO.c b/samples/sym1/symIO.c index 50fefc303..bb46dc3df 100644 --- a/samples/sym1/symIO.c +++ b/samples/sym1/symIO.c @@ -52,7 +52,7 @@ int main (void) { ior3b = VIA3.prb; puts ("================== Digital I/O Status =================="); - puts (" Port1A Port1B Port2A Port2B Port3A Port3B" ); + puts (" Port1A Port1B Port2A Port2B Port3A Port3B" ); printf ("DDR %02X %02X %02X %02X %02X %02X\n\r",ddr1a,ddr1b,ddr2a,ddr2b,ddr3a,ddr3b); printf ("IOR %02X %02X %02X %02X %02X %02X\n\r",ior1a,ior1b,ior2a,ior2b,ior3a,ior3b); puts ("========================================================\n"); @@ -75,7 +75,7 @@ int main (void) { cmd[strlen(cmd)-1] = '\0'; if ( strncasecmp(cmd, "quit", 4) == 0 ) { - going = 0; + going = 0; } else if ( strncasecmp(cmd, "help", 4) == 0 ) { instr = 1; From 3c1bb85b8ea7417f31ccd915119a8e71c50f2f3d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:07:09 +0200 Subject: [PATCH 1215/2710] remove dangling spaces --- src/ar65/del.h | 2 +- src/ca65/anonname.c | 2 +- src/ca65/anonname.h | 2 +- src/ca65/easw16.c | 2 +- src/ca65/easw16.h | 2 +- src/ca65/instr.c | 10 +++++----- src/ca65/instr.h | 2 +- src/ca65/istack.c | 2 +- src/ca65/macro.h | 2 +- src/ca65/options.c | 2 +- src/ca65/span.c | 4 ++-- src/ca65/studyexpr.h | 2 +- src/ca65/symbol.c | 2 +- src/ca65/ulabel.c | 4 ++-- src/cc65/codeent.c | 2 +- src/cc65/datatype.c | 2 +- src/cc65/declare.c | 2 +- src/cc65/expr.c | 2 +- src/cl65/error.c | 2 +- src/cl65/main.c | 4 ++-- src/co65/convert.h | 2 +- src/co65/error.c | 2 +- src/co65/model.c | 2 +- src/common/debugflag.c | 2 +- src/common/debugflag.h | 2 +- src/common/filepos.c | 2 +- src/common/searchpath.c | 4 ++-- src/common/strstack.c | 4 ++-- src/common/strutil.c | 4 ++-- src/common/va_copy.h | 2 +- src/common/xsprintf.c | 2 +- src/common/xsprintf.h | 6 +++--- src/da65/comments.c | 2 +- src/da65/opc6502dtv.h | 2 +- src/da65/opc6502x.h | 2 +- src/da65/opctable.h | 2 +- src/dbginfo/dbginfo.h | 2 +- src/ld65/condes.c | 2 +- src/ld65/fragment.h | 2 +- src/ld65/mapfile.c | 2 +- src/od65/dump.c | 2 +- src/od65/fileio.c | 2 +- src/sim65/6502.c | 8 ++++---- src/sp65/bin.c | 2 +- src/sp65/color.h | 2 +- src/sp65/geosbitmap.h | 6 +++--- src/sp65/koala.c | 2 +- src/sp65/lynxsprite.h | 2 +- src/sp65/vic2sprite.c | 2 +- src/sp65/vic2sprite.h | 2 +- 50 files changed, 67 insertions(+), 67 deletions(-) diff --git a/src/ar65/del.h b/src/ar65/del.h index 6100fe60a..dd45d0ec5 100644 --- a/src/ar65/del.h +++ b/src/ar65/del.h @@ -49,6 +49,6 @@ void DelObjFiles (int argc, char* argv []); -/* End of del.h */ +/* End of del.h */ #endif diff --git a/src/ca65/anonname.c b/src/ca65/anonname.c index 90b73fcab..fca20c8cd 100644 --- a/src/ca65/anonname.c +++ b/src/ca65/anonname.c @@ -72,7 +72,7 @@ StrBuf* AnonName (StrBuf* Buf, const char* Spec) int IsAnonName (const StrBuf* Name) /* Check if the given symbol name is that of an anonymous symbol */ -{ +{ if (SB_GetLen (Name) < sizeof (AnonTag) - 1) { /* Too short */ return 0; diff --git a/src/ca65/anonname.h b/src/ca65/anonname.h index 142cd9f87..7d5671c68 100644 --- a/src/ca65/anonname.h +++ b/src/ca65/anonname.h @@ -58,7 +58,7 @@ StrBuf* AnonName (StrBuf* Buf, const char* Spec); int IsAnonName (const StrBuf* Name); /* Check if the given symbol name is that of an anonymous symbol */ - + /* End of anonname.h */ diff --git a/src/ca65/easw16.c b/src/ca65/easw16.c index 578a25734..081828991 100644 --- a/src/ca65/easw16.c +++ b/src/ca65/easw16.c @@ -147,4 +147,4 @@ void GetSweet16EA (EffAddr* A) } - + diff --git a/src/ca65/easw16.h b/src/ca65/easw16.h index b8b06d466..03a48c437 100644 --- a/src/ca65/easw16.h +++ b/src/ca65/easw16.h @@ -65,4 +65,4 @@ void GetSweet16EA (EffAddr* A); - + diff --git a/src/ca65/instr.c b/src/ca65/instr.c index faeff2026..834edfb5f 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -303,9 +303,9 @@ static const struct { } }; -/* Instruction table for the 6502 with DTV extra opcodes (DTV) and +/* Instruction table for the 6502 with DTV extra opcodes (DTV) and ** those illegal instructions (X) which are supported by DTV. -** Note: illegals opcodes which contain more subinstructions +** Note: illegals opcodes which contain more subinstructions ** (ASO, DCM, LSE, LXA, SBX and SHS) are not enlisted. */ static const struct { @@ -1207,9 +1207,9 @@ static int EvalEA (const InsDesc* Ins, EffAddr* A) } else { ED.AddrSize = DataAddrSize; /* If the default address size of the data segment is unequal - ** to zero page addressing, but zero page addressing is - ** allowed by the instruction, mark all symbols in the - ** expression tree. This mark will be checked at end of + ** to zero page addressing, but zero page addressing is + ** allowed by the instruction, mark all symbols in the + ** expression tree. This mark will be checked at end of ** assembly, and a warning is issued, if a zero page symbol ** was guessed wrong here. */ diff --git a/src/ca65/instr.h b/src/ca65/instr.h index 0a1a5e13d..fe18d2110 100644 --- a/src/ca65/instr.h +++ b/src/ca65/instr.h @@ -101,7 +101,7 @@ /* Bitmask for all FAR operations */ #define AM65_ALL_FAR (AM65_ABS_LONG | AM65_ABS_LONG_X) - + /* Bitmask for all immediate operations */ #define AM65_ALL_IMM (AM65_IMM_ACCU | AM65_IMM_INDEX | AM65_IMM_IMPLICIT | AM65_IMM_IMPLICIT_WORD) diff --git a/src/ca65/istack.c b/src/ca65/istack.c index 8cda7dd2f..7a95e7e8c 100644 --- a/src/ca65/istack.c +++ b/src/ca65/istack.c @@ -81,7 +81,7 @@ void PushInput (int (*Func) (void*), void* Data, const char* Desc) /* Check for a stack overflow */ if (ICount > ISTACK_MAX) { Fatal ("Maximum input stack nesting exceeded"); - } + } /* Create a new stack element */ E = xmalloc (sizeof (*E)); diff --git a/src/ca65/macro.h b/src/ca65/macro.h index bb7b817a8..7f4335706 100644 --- a/src/ca65/macro.h +++ b/src/ca65/macro.h @@ -62,7 +62,7 @@ struct StrBuf; struct Macro; typedef struct Macro Macro; - + /*****************************************************************************/ /* Code */ diff --git a/src/ca65/options.c b/src/ca65/options.c index c71296a57..84d7148be 100644 --- a/src/ca65/options.c +++ b/src/ca65/options.c @@ -182,4 +182,4 @@ void WriteOptions (void) - + diff --git a/src/ca65/span.c b/src/ca65/span.c index a4faea121..5ab3fc955 100644 --- a/src/ca65/span.c +++ b/src/ca65/span.c @@ -204,7 +204,7 @@ static Span* MergeSpan (Span* S) void SetSpanType (Span* S, const StrBuf* Type) /* Set the generic type of the span to Type */ -{ +{ /* Ignore the call if we won't generate debug infos */ if (DbgSyms) { S->Type = GetStrBufId (Type); @@ -354,7 +354,7 @@ static int CollectSpans (void* Entry, void* Data) return 0; } - + void WriteSpans (void) /* Write all spans to the object file */ diff --git a/src/ca65/studyexpr.h b/src/ca65/studyexpr.h index 389bce5a3..a81f6c9c8 100644 --- a/src/ca65/studyexpr.h +++ b/src/ca65/studyexpr.h @@ -36,7 +36,7 @@ #ifndef STUDYEXPR_H #define STUDYEXPR_H - + /* common */ #include "exprdefs.h" diff --git a/src/ca65/symbol.c b/src/ca65/symbol.c index 3b06fd1a2..f1c259082 100644 --- a/src/ca65/symbol.c +++ b/src/ca65/symbol.c @@ -187,7 +187,7 @@ SymEntry* ParseScopedSymName (SymFindAction Action) ** may not expect NULL to be returned if Action contains SYM_ALLOC_NEW, ** create a new symbol. */ - if (Action & SYM_ALLOC_NEW) { + if (Action & SYM_ALLOC_NEW) { Sym = NewSymEntry (&Ident, SF_NONE); } else { Sym = 0; diff --git a/src/ca65/ulabel.c b/src/ca65/ulabel.c index 9712f4942..1127c3743 100644 --- a/src/ca65/ulabel.c +++ b/src/ca65/ulabel.c @@ -160,7 +160,7 @@ void ULabDef (void) */ ULabel* L = CollAtUnchecked (&ULabList, ULabDefCount); CHECK (L->Val == 0); - L->Val = GenCurrentPC (); + L->Val = GenCurrentPC (); ReleaseFullLineInfo (&L->LineInfos); GetFullLineInfo (&L->LineInfos); } else { @@ -200,7 +200,7 @@ ExprNode* ULabResolve (unsigned Index) void ULabDone (void) -/* Run through all unnamed labels, check for anomalies and errors and do +/* Run through all unnamed labels, check for anomalies and errors and do ** necessary cleanups. */ { diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 0a1b917db..62118d80c 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -1781,7 +1781,7 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) if (RegValIsKnown (In->RegX)) { Out->RegX = (In->RegX ^ 0xFF); } - } else if (strncmp (E->Arg, "asrax", 5) == 0 || + } else if (strncmp (E->Arg, "asrax", 5) == 0 || strncmp (E->Arg, "shrax", 5) == 0) { if (RegValIsKnown (In->RegX)) { if (In->RegX == 0x00 || In->RegX == 0xFF) { diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index e5d3f8d96..cc313bd21 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1105,7 +1105,7 @@ Type* NewBitFieldType (const Type* T, unsigned BitOffs, unsigned BitWidth) /* The type specifier must be integeral */ CHECK (IsClassInt (T)); - + /* Allocate the new type string */ P = TypeAlloc (3); diff --git a/src/cc65/declare.c b/src/cc65/declare.c index fa4c52818..017a69874 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2267,7 +2267,7 @@ static void DefineBitFieldData (StructInitData* SI) static void DefineStrData (Literal* Lit, unsigned Count) -{ +{ /* Translate into target charset */ TranslateLiteral (Lit); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index ab48a4554..7343702ea 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3786,7 +3786,7 @@ static void hieOr (ExprDesc *Expr) /* Load false only if the result is not true */ g_getimmed (CF_INT | CF_CONST, 0, 0); /* Load FALSE */ g_falsejump (CF_NONE, DoneLab); - + /* Load the true value */ g_defcodelabel (TrueLab); g_getimmed (CF_INT | CF_CONST, 1, 0); /* Load TRUE */ diff --git a/src/cl65/error.c b/src/cl65/error.c index ee2adcfcc..9c234681f 100644 --- a/src/cl65/error.c +++ b/src/cl65/error.c @@ -39,7 +39,7 @@ /* common */ #include "cmdline.h" - + /* cl65 */ #include "global.h" #include "error.h" diff --git a/src/cl65/main.c b/src/cl65/main.c index 023e111e0..e032baee4 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -1503,7 +1503,7 @@ int main (int argc, char* argv []) case 'E': /* Forward -E to compiler */ - CmdAddArg (&CC65, Arg); + CmdAddArg (&CC65, Arg); DisableAssemblingAndLinking (); break; @@ -1513,7 +1513,7 @@ int main (int argc, char* argv []) OptAsmArgs (Arg, GetArg (&I, 3)); } else if (Arg[2] == 'c' && Arg[3] == '\0') { /* -Wc: Pass options to compiler */ - /* Remember -Wc sub arguments in cc65 arg struct */ + /* Remember -Wc sub arguments in cc65 arg struct */ OptCCArgs (Arg, GetArg (&I, 3)); } else if (Arg[2] == 'l' && Arg[3] == '\0') { /* -Wl: Pass options to linker */ diff --git a/src/co65/convert.h b/src/co65/convert.h index 8c7782ff3..5045acedd 100644 --- a/src/co65/convert.h +++ b/src/co65/convert.h @@ -56,7 +56,7 @@ struct O65Data; void Convert (const struct O65Data* D); -/* Convert the o65 file in D */ +/* Convert the o65 file in D */ diff --git a/src/co65/error.c b/src/co65/error.c index 1fa099c94..dc3e4e73b 100644 --- a/src/co65/error.c +++ b/src/co65/error.c @@ -81,7 +81,7 @@ void Error (const char* Format, ...) void Internal (const char* Format, ...) /* Print an internal error message and die */ { - va_list ap; + va_list ap; va_start (ap, Format); fprintf (stderr, "%s: Internal error: ", ProgName); vfprintf (stderr, Format, ap); diff --git a/src/co65/model.c b/src/co65/model.c index bb815cd15..2206993bf 100644 --- a/src/co65/model.c +++ b/src/co65/model.c @@ -53,7 +53,7 @@ O65Model Model = O65_MODEL_NONE; /* Name table */ static const char* const NameTable[O65_MODEL_COUNT] = { - "none", + "none", "os/a65", "lunix", "cc65-module" diff --git a/src/common/debugflag.c b/src/common/debugflag.c index 7d2e80009..0a452ae36 100644 --- a/src/common/debugflag.c +++ b/src/common/debugflag.c @@ -32,7 +32,7 @@ /*****************************************************************************/ - + /* common */ #include "debugflag.h" diff --git a/src/common/debugflag.h b/src/common/debugflag.h index d325a9eb9..39034044e 100644 --- a/src/common/debugflag.h +++ b/src/common/debugflag.h @@ -31,7 +31,7 @@ /* */ /*****************************************************************************/ - + #ifndef DEBUGFLAG_H #define DEBUGFLAG_H diff --git a/src/common/filepos.c b/src/common/filepos.c index 51488ffe5..b2cac79e1 100644 --- a/src/common/filepos.c +++ b/src/common/filepos.c @@ -60,7 +60,7 @@ int CompareFilePos (const FilePos* P1, const FilePos* P2) ** compare rates file index over line over column. */ { - if (P1->Name > P2->Name) { + if (P1->Name > P2->Name) { return 1; } else if (P1->Name < P2->Name) { return -1; diff --git a/src/common/searchpath.c b/src/common/searchpath.c index ca7017e6f..70237a1c9 100644 --- a/src/common/searchpath.c +++ b/src/common/searchpath.c @@ -210,9 +210,9 @@ int PushSearchPath (SearchPaths* P, const char* NewPath) ** that it's not already there. If the path is already at the first position, ** return zero, otherwise return a non zero value. */ -{ +{ /* Generate a clean copy of NewPath */ - char* Path = CleanupPath (NewPath); + char* Path = CleanupPath (NewPath); /* If we have paths, check if Path is already at position zero */ if (CollCount (P) > 0 && strcmp (CollConstAt (P, 0), Path) == 0) { diff --git a/src/common/strstack.c b/src/common/strstack.c index 29dd10426..6b9fb0f8b 100644 --- a/src/common/strstack.c +++ b/src/common/strstack.c @@ -32,12 +32,12 @@ /*****************************************************************************/ - + /* common */ #include "check.h" #include "strstack.h" #include "xmalloc.h" - + /*****************************************************************************/ diff --git a/src/common/strutil.c b/src/common/strutil.c index dabed34cd..60284e860 100644 --- a/src/common/strutil.c +++ b/src/common/strutil.c @@ -66,7 +66,7 @@ char* StrCopy (char* Dest, size_t DestSize, const char* Source) int StrCaseCmp (const char* S1, const char* S2) -/* Compare two strings ignoring case */ +/* Compare two strings ignoring case */ { int Diff; while ((Diff = toupper (*S1) - toupper (*S2)) == 0 && *S1) { @@ -77,4 +77,4 @@ int StrCaseCmp (const char* S1, const char* S2) } - + diff --git a/src/common/va_copy.h b/src/common/va_copy.h index 4aa2428db..413d96bdd 100644 --- a/src/common/va_copy.h +++ b/src/common/va_copy.h @@ -41,7 +41,7 @@ #include <stdarg.h> - + /* No action if we have a working va_copy */ #if !defined(va_copy) diff --git a/src/common/xsprintf.c b/src/common/xsprintf.c index 5994bb604..a3fbc676b 100644 --- a/src/common/xsprintf.c +++ b/src/common/xsprintf.c @@ -580,7 +580,7 @@ int xvsnprintf (char* Buf, size_t Size, const char* Format, va_list ap) CHECK (S != 0); /* Handle the length by using a precision */ if ((P.Flags & fPrec) != 0) { - /* Precision already specified, use length of string + /* Precision already specified, use length of string ** if less. */ if ((unsigned) P.Prec > SB_GetLen (S)) { diff --git a/src/common/xsprintf.h b/src/common/xsprintf.h index a37b71914..4d32a7410 100644 --- a/src/common/xsprintf.h +++ b/src/common/xsprintf.h @@ -33,9 +33,9 @@ -/* We need a way to output a StrBuf, but on the other side, we don't want to -** switch off gcc's printf format string checking. So we cheat as follows: -** %m (which is a gcc extension and doesn't take an argument) switches %p +/* We need a way to output a StrBuf, but on the other side, we don't want to +** switch off gcc's printf format string checking. So we cheat as follows: +** %m (which is a gcc extension and doesn't take an argument) switches %p ** between outputting a pointer and a string buf. This works just one time, ** so each StrBuf needs in fact a %m%p spec. There's no way to apply a width ** and precision to such a StrBuf, but *not* using %p would bring up a warning diff --git a/src/da65/comments.c b/src/da65/comments.c index cf0b9d4e9..7c671131f 100644 --- a/src/da65/comments.c +++ b/src/da65/comments.c @@ -36,7 +36,7 @@ /* common */ #include "xmalloc.h" -/* da65 */ +/* da65 */ #include "attrtab.h" #include "comments.h" #include "error.h" diff --git a/src/da65/opc6502dtv.h b/src/da65/opc6502dtv.h index e63e4e44c..33b485029 100644 --- a/src/da65/opc6502dtv.h +++ b/src/da65/opc6502dtv.h @@ -58,4 +58,4 @@ extern const OpcDesc OpcTable_6502DTV[256]; - + diff --git a/src/da65/opc6502x.h b/src/da65/opc6502x.h index e086f87ae..23cd9068c 100644 --- a/src/da65/opc6502x.h +++ b/src/da65/opc6502x.h @@ -58,4 +58,4 @@ extern const OpcDesc OpcTable_6502X[256]; - + diff --git a/src/da65/opctable.h b/src/da65/opctable.h index 69a64db9c..7c871f7b0 100644 --- a/src/da65/opctable.h +++ b/src/da65/opctable.h @@ -38,7 +38,7 @@ -/* common */ +/* common */ #include "cpu.h" /* da65 */ diff --git a/src/dbginfo/dbginfo.h b/src/dbginfo/dbginfo.h index 7317e575f..38d891e7c 100644 --- a/src/dbginfo/dbginfo.h +++ b/src/dbginfo/dbginfo.h @@ -135,7 +135,7 @@ struct cc65_csymdata { unsigned char csym_kind; /* Kind of c symbol */ unsigned char csym_sc; /* Storage class of c symbol */ int csym_offs; /* Offset for auto and register */ - unsigned type_id; /* Id of the data type */ + unsigned type_id; /* Id of the data type */ unsigned symbol_id; /* Attached asm symbol if any */ unsigned scope_id; /* Scope of c symbol */ const char* csym_name; /* Name of the symbol */ diff --git a/src/ld65/condes.c b/src/ld65/condes.c index d8c378211..734b64ebd 100644 --- a/src/ld65/condes.c +++ b/src/ld65/condes.c @@ -281,7 +281,7 @@ const ConDesImport* ConDesGetImport (unsigned Type) /* Check the parameters */ PRECONDITION (Type <= CD_TYPE_MAX); - /* Return the import */ + /* Return the import */ Import = &ConDes[Type].Import; return (Import->Name != INVALID_STRING_ID)? Import : 0; } diff --git a/src/ld65/fragment.h b/src/ld65/fragment.h index 7d6dd9201..34eb5b695 100644 --- a/src/ld65/fragment.h +++ b/src/ld65/fragment.h @@ -100,7 +100,7 @@ INLINE const char* GetFragmentSourceName (const Fragment* F) #if defined(HAVE_INLINE) INLINE unsigned GetFragmentSourceLine (const Fragment* F) /* Return the source file line for this fragment */ -{ +{ return GetSourceLineFromList (&F->LineInfos); } #else diff --git a/src/ld65/mapfile.c b/src/ld65/mapfile.c index 7fec986ff..10d65960e 100644 --- a/src/ld65/mapfile.c +++ b/src/ld65/mapfile.c @@ -93,7 +93,7 @@ void CreateMapFile (int ShortMap) ** requested */ if (VerboseMap || S->Size > 0) { - fprintf (F, + fprintf (F, " %-17s Offs=%06lX Size=%06lX " "Align=%05lX Fill=%04lX\n", GetString (S->Seg->Name), S->Offs, S->Size, diff --git a/src/od65/dump.c b/src/od65/dump.c index 2f538fe1d..1a8c4dbb1 100644 --- a/src/od65/dump.c +++ b/src/od65/dump.c @@ -933,7 +933,7 @@ void DumpObjSegSize (FILE* F, unsigned long Offset) unsigned Len = strlen (Name); /* Skip segment flags, read size */ - (void) ReadVar (F); + (void) ReadVar (F); Size = ReadVar (F); /* Skip alignment, type and fragment count */ diff --git a/src/od65/fileio.c b/src/od65/fileio.c index a8d31c730..1689c4734 100644 --- a/src/od65/fileio.c +++ b/src/od65/fileio.c @@ -53,7 +53,7 @@ void FileSetPos (FILE* F, unsigned long Pos) /* Seek to the given absolute position, fail on errors */ -{ +{ if (fseek (F, Pos, SEEK_SET) != 0) { Error ("Cannot seek: %s", strerror (errno)); } diff --git a/src/sim65/6502.c b/src/sim65/6502.c index b3c06293a..6c23b0dfc 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -1270,8 +1270,8 @@ static void OPC_6502_6C (void) Cycles = 6; Regs.PC = MemReadWord(Lo); } - - ParaVirtHooks (&Regs); + + ParaVirtHooks (&Regs); } @@ -1283,7 +1283,7 @@ static void OPC_65C02_6C (void) Cycles = 5; Regs.PC = MemReadWord (MemReadWord (Regs.PC+1)); - ParaVirtHooks (&Regs); + ParaVirtHooks (&Regs); } @@ -1439,7 +1439,7 @@ static void OPC_65SC02_7C (void) Adr = MemReadWord (PC+1); Regs.PC = MemReadWord(Adr+Regs.XR); - ParaVirtHooks (&Regs); + ParaVirtHooks (&Regs); } diff --git a/src/sp65/bin.c b/src/sp65/bin.c index a3f856340..93e6a456a 100644 --- a/src/sp65/bin.c +++ b/src/sp65/bin.c @@ -53,7 +53,7 @@ -void WriteBinFile (const StrBuf* Data, const Collection* A, +void WriteBinFile (const StrBuf* Data, const Collection* A, const Bitmap* B attribute ((unused))) /* Write the contents of Data to the given file in binary format */ { diff --git a/src/sp65/color.h b/src/sp65/color.h index 31688bff4..6d898ab2e 100644 --- a/src/sp65/color.h +++ b/src/sp65/color.h @@ -60,7 +60,7 @@ struct Color { /*****************************************************************************/ - + #if defined(HAVE_INLINE) INLINE Color RGB (unsigned char R, unsigned char G, unsigned char B) diff --git a/src/sp65/geosbitmap.h b/src/sp65/geosbitmap.h index 759030224..8f9f09a29 100644 --- a/src/sp65/geosbitmap.h +++ b/src/sp65/geosbitmap.h @@ -54,8 +54,8 @@ StrBuf* GenGeosBitmap (const Bitmap* B, const Collection* A); -/* Generate binary output in GEOS compacted bitmap format for the bitmap B. -** The output is stored in a string buffer (which is actually a dynamic char +/* Generate binary output in GEOS compacted bitmap format for the bitmap B. +** The output is stored in a string buffer (which is actually a dynamic char ** array) and returned. */ @@ -67,4 +67,4 @@ StrBuf* GenGeosBitmap (const Bitmap* B, const Collection* A); - + diff --git a/src/sp65/koala.c b/src/sp65/koala.c index e2122c781..688e37f61 100644 --- a/src/sp65/koala.c +++ b/src/sp65/koala.c @@ -94,7 +94,7 @@ StrBuf* GenKoala (const Bitmap* B, const Collection* A attribute ((unused))) /* Add $4400 as load address */ SB_AppendChar (D, 0x00); SB_AppendChar (D, 0x44); - + /* TODO: The actual work ;-) */ (void) Screen; diff --git a/src/sp65/lynxsprite.h b/src/sp65/lynxsprite.h index 4f9a9f07d..fe686ec8e 100644 --- a/src/sp65/lynxsprite.h +++ b/src/sp65/lynxsprite.h @@ -54,7 +54,7 @@ StrBuf* GenLynxSprite (const Bitmap* B, const Collection* A); -/* Generate binary output in packed Lynx sprite format for the bitmap B. The output +/* Generate binary output in packed Lynx sprite format for the bitmap B. The output ** is stored in a string buffer (which is actually a dynamic char array) and ** returned. */ diff --git a/src/sp65/vic2sprite.c b/src/sp65/vic2sprite.c index 94a9ad499..4ea71b562 100644 --- a/src/sp65/vic2sprite.c +++ b/src/sp65/vic2sprite.c @@ -83,7 +83,7 @@ static enum Mode GetMode (const Collection* A) } else { Error ("Invalid value for attribute 'mode'"); } - } + } return smAuto; } diff --git a/src/sp65/vic2sprite.h b/src/sp65/vic2sprite.h index b6c839c7c..ce2f078e4 100644 --- a/src/sp65/vic2sprite.h +++ b/src/sp65/vic2sprite.h @@ -54,7 +54,7 @@ StrBuf* GenVic2Sprite (const Bitmap* B, const Collection* A); -/* Generate binary output in VICII sprite format for the bitmap B. The output +/* Generate binary output in VICII sprite format for the bitmap B. The output ** is stored in a string buffer (which is actually a dynamic char array) and ** returned. */ From 1be54d13bc0602c7bb3a466fa44fb9640cec762e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:07:20 +0200 Subject: [PATCH 1216/2710] remove dangling spaces --- targettest/cpeek-test.c | 4 ++-- targettest/gamate/audiotest.s | 2 +- targettest/minimal.c | 2 +- targettest/uname-test.c | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/targettest/cpeek-test.c b/targettest/cpeek-test.c index 1777bce4a..4c1aadcb2 100644 --- a/targettest/cpeek-test.c +++ b/targettest/cpeek-test.c @@ -294,8 +294,8 @@ int main (void) revers(0); cputc('x'); chBack (); c1 = cpeekrevers(); chForth(); revers(1); cputc('X'); chBack (); c2 = cpeekrevers(); chForth(); cputc('\n'); cputc('\r'); - revers(c1); cputc('o'); - revers(c2); cputc('O'); + revers(c1); cputc('o'); + revers(c2); cputc('O'); /* test cpeeks() */ revers(0); diff --git a/targettest/gamate/audiotest.s b/targettest/gamate/audiotest.s index f40199994..4f1496789 100644 --- a/targettest/gamate/audiotest.s +++ b/targettest/gamate/audiotest.s @@ -155,7 +155,7 @@ nocursor: .proc printy ldy #0 -loop1: +loop1: tya pha asl diff --git a/targettest/minimal.c b/targettest/minimal.c index 65ec37a97..f950a5d13 100644 --- a/targettest/minimal.c +++ b/targettest/minimal.c @@ -1,4 +1,4 @@ - + /* this is a minimal / empty c program, any supported target that has some * sort of C support should be able to link this. Failure indicates a problem * with the crt0 or the linker config of the respective target */ diff --git a/targettest/uname-test.c b/targettest/uname-test.c index b0733d0bd..2851da19c 100644 --- a/targettest/uname-test.c +++ b/targettest/uname-test.c @@ -4,7 +4,7 @@ int main (void) -{ +{ /* Get the uname data */ struct utsname buf; if (uname (&buf) != 0) { @@ -12,7 +12,7 @@ int main (void) return EXIT_FAILURE; } - /* Print it */ + /* Print it */ printf ("sysname: \"%s\"\n", buf.sysname); printf ("nodename: \"%s\"\n", buf.nodename); printf ("release: \"%s\"\n", buf.release); From 0129622383d2d8226ad0ad2e25b412f0fc2d7c21 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:07:52 +0200 Subject: [PATCH 1217/2710] remove dangling spaces --- test/err/bug1098.c | 2 +- test/err/bug1098a.c | 2 +- test/err/bug1098b.c | 2 +- test/err/pr1110.c | 4 +- test/misc/bug1265.c | 4 +- test/misc/sitest.c | 10 +- test/ref/array.c | 2 +- test/ref/cc65070303.c | 2 +- test/ref/cc65080227.c | 2 +- test/ref/cc65080328.c | 2 +- test/ref/cc65090111.c | 2 +- test/ref/cc65090124.c | 6 +- test/ref/cc65090726.c | 4 +- test/ref/cc65101209.c | 2 +- test/ref/cf.c | 2 +- test/ref/strptr.c | 18 ++-- test/ref/struct.c | 2 +- test/ref/switch2.c | 6 +- test/ref/yacc.c | 174 +++++++++++++++++----------------- test/ref/yacc2.c | 22 ++--- test/val/bug1075.c | 2 +- test/val/bug1178.c | 4 +- test/val/bug1181.c | 4 +- test/val/bug1438.c | 2 +- test/val/bug1552.c | 2 +- test/val/call1.c | 4 +- test/val/compare10.c | 10 +- test/val/compare5.c | 4 +- test/val/compare6.c | 6 +- test/val/compare7.c | 8 +- test/val/compare8.c | 12 +-- test/val/compare9.c | 10 +- test/val/constexpr.c | 2 +- test/val/cq22.c | 2 +- test/val/cq241.c | 2 +- test/val/cq243.c | 2 +- test/val/cq244.c | 2 +- test/val/cq25.c | 2 +- test/val/cq26.c | 2 +- test/val/cq4.c | 2 +- test/val/cq61.c | 2 +- test/val/cq626.c | 2 +- test/val/cq71.c | 2 +- test/val/cq714.c | 2 +- test/val/cq714b.c | 2 +- test/val/cq715.c | 2 +- test/val/cq72.c | 2 +- test/val/cq7813.c | 2 +- test/val/cq81.c | 2 +- test/val/cq84.c | 2 +- test/val/cq85.c | 2 +- test/val/cq86.c | 2 +- test/val/cq88.c | 2 +- test/val/duffs-device.c | 10 +- test/val/lib_common_ctype.c | 8 +- test/val/lib_common_memmove.c | 4 +- test/val/lib_common_mulxx.c | 2 +- test/val/lib_common_strcat.c | 8 +- test/val/lib_common_strchr.c | 2 +- test/val/lib_common_strcspn.c | 2 +- test/val/lib_common_strncat.c | 8 +- test/val/lib_common_strrchr.c | 2 +- test/val/lib_common_strspn.c | 2 +- test/val/mult1.c | 32 +++---- test/val/or1.c | 22 ++--- test/val/postdec-16-16.c | 26 ++--- test/val/postdec-16-8.c | 26 ++--- test/val/postdec-8-16.c | 26 ++--- test/val/postdec-8-8.c | 26 ++--- test/val/postinc-16-16.c | 26 ++--- test/val/postinc-16-8.c | 26 ++--- test/val/postinc-8-16.c | 26 ++--- test/val/postinc-8-8.c | 26 ++--- test/val/pptest4.c | 2 +- test/val/pptest5.c | 2 +- test/val/pr1423.c | 2 +- test/val/predec-16-16.c | 26 ++--- test/val/predec-16-8.c | 26 ++--- test/val/predec-8-16.c | 26 ++--- test/val/predec-8-8.c | 26 ++--- test/val/preinc-16-16.c | 26 ++--- test/val/preinc-16-8.c | 26 ++--- test/val/preinc-8-16.c | 26 ++--- test/val/preinc-8-8.c | 26 ++--- test/val/static-fwd-decl.c | 2 +- test/val/strnicmp-test.c | 4 +- test/val/switch2.c | 2 +- test/val/time-test.c | 2 +- test/val/xor.c | 4 +- 89 files changed, 459 insertions(+), 459 deletions(-) diff --git a/test/err/bug1098.c b/test/err/bug1098.c index c49296245..eddbce3f1 100644 --- a/test/err/bug1098.c +++ b/test/err/bug1098.c @@ -1,7 +1,7 @@ /* bug #1098 Empty enumerator-list */ -/* The C Standard requires that something exists between the braces for +/* The C Standard requires that something exists between the braces for * enum, struct, and union. */ enum { diff --git a/test/err/bug1098a.c b/test/err/bug1098a.c index 63c1c8da0..aed750267 100644 --- a/test/err/bug1098a.c +++ b/test/err/bug1098a.c @@ -1,7 +1,7 @@ /* bug #1098 Empty enumerator-list */ -/* The C Standard requires that something exists between the braces for +/* The C Standard requires that something exists between the braces for * enum, struct, and union. */ struct { diff --git a/test/err/bug1098b.c b/test/err/bug1098b.c index ebd3e94c8..5f6d8b0f2 100644 --- a/test/err/bug1098b.c +++ b/test/err/bug1098b.c @@ -1,7 +1,7 @@ /* bug #1098 Empty enumerator-list */ -/* The C Standard requires that something exists between the braces for +/* The C Standard requires that something exists between the braces for * enum, struct, and union. */ union { diff --git a/test/err/pr1110.c b/test/err/pr1110.c index 86955c720..671abf9a4 100644 --- a/test/err/pr1110.c +++ b/test/err/pr1110.c @@ -1,5 +1,5 @@ -/* pr #1110 - not only should the current test case for #975 compile and work, +/* pr #1110 - not only should the current test case for #975 compile and work, * but also the code piece below fail to compile and generate errors like commented: */ static const unsigned char array[3]; /* OK */ @@ -7,7 +7,7 @@ static const unsigned char array[] = { 0, 1, 2 }; /* OK - complete definition* static const unsigned char array[3]; /* OK */ static const unsigned char array[]; /* OK */ static const unsigned char array[] = { 1, 2, 3 }; /* Error - redefinition */ -static const unsigned char array[4]; /* Error - conflicting size */ +static const unsigned char array[4]; /* Error - conflicting size */ int main(void) { diff --git a/test/misc/bug1265.c b/test/misc/bug1265.c index 36d1459a7..7c34a25b7 100644 --- a/test/misc/bug1265.c +++ b/test/misc/bug1265.c @@ -17,7 +17,7 @@ int main (void) { x = 1234; n = f1 (x); sprintf (str2, "%p\n", &x); - + if (strcmp(str1, str2)) { puts("not equal"); failures++; @@ -31,7 +31,7 @@ int main (void) { x = 2345; n = f2 (x); sprintf (str2, "%p\n", &x); - + if (strcmp(str1, str2)) { puts("not equal"); failures++; diff --git a/test/misc/sitest.c b/test/misc/sitest.c index 2f1d7df4d..6c8a6f1e2 100644 --- a/test/misc/sitest.c +++ b/test/misc/sitest.c @@ -106,7 +106,7 @@ int main() { int status = 0; /* exit status to be returned */ - + /* <stdint.h> features: */ printf("CHAR_BIT=%u\n", (unsigned)CHAR_BIT ); @@ -526,12 +526,12 @@ main() { else /* for trailing semicolon */ #else - + #define SCAN(buf,fs,var,exp) #define PRINT(fs,var,exp) #endif - + #ifdef SCNo32 SCAN(in_dn, SCNo32, int32, 9); @@ -586,7 +586,7 @@ main() { #endif #if 0 - + #ifdef INT16_MAX { INT16_MAX, INT16_MAX, }, { -INT16_MAX, INT16_MAX, }, @@ -830,7 +830,7 @@ main() { } #endif } - + { char *endptr; wchar_t *wendptr; diff --git a/test/ref/array.c b/test/ref/array.c index 96bf22c3a..19265ef90 100644 --- a/test/ref/array.c +++ b/test/ref/array.c @@ -29,7 +29,7 @@ main() { p[j] = x[i][j]; } g(z, y); - + return 0; } diff --git a/test/ref/cc65070303.c b/test/ref/cc65070303.c index 049f14c40..6cf2e9dc7 100644 --- a/test/ref/cc65070303.c +++ b/test/ref/cc65070303.c @@ -27,7 +27,7 @@ int main(int argc, char* argv[]) test.c(20): Error: Incompatible pointer types for   APtr=&(Bs[7].Data[1]); -My experience in C is very limited, but as this works both in MSVC and +My experience in C is very limited, but as this works both in MSVC and the 8 bit Z80 compiler i originally used, i guess its an bug in CC65. As a workaround, an typecast via  APtr=(TypA*)&(Bs[7].Data[1]); diff --git a/test/ref/cc65080227.c b/test/ref/cc65080227.c index b6d068b2a..86d5ee331 100644 --- a/test/ref/cc65080227.c +++ b/test/ref/cc65080227.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! + !!DESCRIPTION!! !!ORIGIN!! testsuite !!LICENCE!! Public Domain !!AUTHOR!! diff --git a/test/ref/cc65080328.c b/test/ref/cc65080328.c index 630638f3d..7e26ea20a 100644 --- a/test/ref/cc65080328.c +++ b/test/ref/cc65080328.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! + !!DESCRIPTION!! !!ORIGIN!! testsuite !!LICENCE!! Public Domain !!AUTHOR!! diff --git a/test/ref/cc65090111.c b/test/ref/cc65090111.c index be889a608..30b2b3cd0 100644 --- a/test/ref/cc65090111.c +++ b/test/ref/cc65090111.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! + !!DESCRIPTION!! !!ORIGIN!! testsuite !!LICENCE!! Public Domain !!AUTHOR!! diff --git a/test/ref/cc65090124.c b/test/ref/cc65090124.c index 3a75b28fa..910dc1195 100644 --- a/test/ref/cc65090124.c +++ b/test/ref/cc65090124.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! + !!DESCRIPTION!! !!ORIGIN!! testsuite !!LICENCE!! Public Domain !!AUTHOR!! @@ -8,7 +8,7 @@ #include <stdio.h> /* -there is a bug in the preprocessor (i think) ... the following works +there is a bug in the preprocessor (i think) ... the following works (compiles) correctly: unsigned long fs,fd,a; @@ -32,7 +32,7 @@ int main(void) fs=(func((fd/a),(func(2,0x0082c90f)))); } -i get "Error: ')' expected" on that line. (this is with the snapshot, freshly +i get "Error: ')' expected" on that line. (this is with the snapshot, freshly compiled 5 minutes ago) */ diff --git a/test/ref/cc65090726.c b/test/ref/cc65090726.c index 609594dc4..f22b9c203 100644 --- a/test/ref/cc65090726.c +++ b/test/ref/cc65090726.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! + !!DESCRIPTION!! !!ORIGIN!! testsuite !!LICENCE!! Public Domain !!AUTHOR!! @@ -36,7 +36,7 @@ void Proc1(RecordPtr PtrParIn) Proc3((*(PtrParIn->PtrComp)).PtrComp); Proc3(NextRecord.PtrComp); #endif - + #undef NextRecord } diff --git a/test/ref/cc65101209.c b/test/ref/cc65101209.c index daeab8509..eba209d1d 100644 --- a/test/ref/cc65101209.c +++ b/test/ref/cc65101209.c @@ -34,5 +34,5 @@ So testing with 999 gives: 231 mod 999 is 0 999 mod 999 is 0 -This seems to be systematic. +This seems to be systematic. */ diff --git a/test/ref/cf.c b/test/ref/cf.c index bb0c13e8b..6001009ce 100644 --- a/test/ref/cf.c +++ b/test/ref/cf.c @@ -67,7 +67,7 @@ char *argv[]; } printf("input:\n\n"); - + nc = 0; while ((c = GETCHAR()) != -1) { diff --git a/test/ref/strptr.c b/test/ref/strptr.c index 152c1bb48..d596e19d1 100644 --- a/test/ref/strptr.c +++ b/test/ref/strptr.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! + !!DESCRIPTION!! !!ORIGIN!! testsuite !!LICENCE!! Public Domain !!AUTHOR!! Groepaz/Hitmen @@ -24,7 +24,7 @@ FILE *outfile=NULL; #else #endif - + #include <stdio.h> #include <stdlib.h> #include <fcntl.h> @@ -65,17 +65,17 @@ static unsigned char ch; /* basic line-link / file-length */ memcpy(buffer,b1,4); - - dir->off=dir->off+4; + + dir->off=dir->off+4; entry.d_reclen=254*(buffer[2]+(buffer[3]<<8)); /* read file entry */ memcpy(buffer,b2,0x10); - - dir->off=dir->off+i; + + dir->off=dir->off+i; printf("Xreaddir: '%s'\n",buffer); - + /* skip until either quote (file) or b (blocks free => end) */ i=0;ii=0; while(i==0){ @@ -113,9 +113,9 @@ int main(void) char mydirname[XNAME_MAX+1]="."; XDIR mydir; struct Xdirent *mydirent; - + printf("start\n"); - + if((mydirent=Xreaddir(&mydir))==NULL) { printf("NULL\n"); diff --git a/test/ref/struct.c b/test/ref/struct.c index 15fae62fc..e5957f265 100644 --- a/test/ref/struct.c +++ b/test/ref/struct.c @@ -246,7 +246,7 @@ rect screen = ); test1(); - + for (i = 0; i < sizeof pts/sizeof pts[0]; i++) { printf("(%d,%d) is ", pts[i].x, (x = makepoint(pts[i].x, pts[i].y)).y); diff --git a/test/ref/switch2.c b/test/ref/switch2.c index 78d383b52..0e52775e4 100644 --- a/test/ref/switch2.c +++ b/test/ref/switch2.c @@ -169,7 +169,7 @@ void testdefault2(unsigned char i) { case 170: break; - + case 18: break; case 19: @@ -215,12 +215,12 @@ int main(void) { testlimits(32767); testlimits(-32768); testlimits(-1); - + testdefault1(1); testdefault1(2); testdefault1(3); testdefault1(4); - + testdefault2(1); testdefault2(2); testdefault2(3); diff --git a/test/ref/yacc.c b/test/ref/yacc.c index 776e4f93d..3831b67fd 100644 --- a/test/ref/yacc.c +++ b/test/ref/yacc.c @@ -70,7 +70,7 @@ int yytchar; #define yyout outfile extern int yylineno; -struct yysvf +struct yysvf { struct yywork *yystoff; struct yysvf *yyother; @@ -150,7 +150,7 @@ yyfussy: } } - + #ifdef YYDEBUG fprintf(yyout,"yylex: return 0\n"); #endif @@ -164,9 +164,9 @@ int yyvstop[] = }; # define YYTYPE char -struct yywork -{ - YYTYPE verify, advance; +struct yywork +{ + YYTYPE verify, advance; } yycrank[] = { {0,0}, {0,0}, {1,3}, {0,0}, @@ -178,12 +178,12 @@ struct yywork {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, - + {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, - + {0,0}, {1,5}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, @@ -193,17 +193,17 @@ struct yywork {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {0,0}, {0,0}, {0,0}, - + {0,0}, {0,0}, {0,0}, {0,0}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, - + {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {0,0}, {0,0}, - + {0,0}, {0,0}, {6,8}, {0,0}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, @@ -240,7 +240,7 @@ struct yywork }; /* -struct yysvf +struct yysvf { struct yywork *yystoff; struct yysvf *yyother; @@ -281,27 +281,27 @@ char yymatch[] = #endif 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , - + 011 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , - + '0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' , '0' ,'0' ,01 ,01 ,01 ,01 ,01 ,01 , - + /* 0x40 (ascii) @A... (petscii) @a... */ 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , - + 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,'A' , - + /* 0x60 (ascii) @a... */ 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , - + 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,01 , - + #ifdef CHARSETHACK /* 0x80 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, @@ -312,10 +312,10 @@ char yymatch[] = /* 0xc0 (petcii) @A... */ 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , - + 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,01 , - + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, @@ -354,9 +354,9 @@ yylook() int debug; # endif */ - + char *yylastch; - + /* start off machines */ /* @@ -372,11 +372,11 @@ yylook() # else #define debug 0 #endif - + #ifdef YYDEBUG fprintf(yyout,"yylook()\n"); # endif - + if (!yymorfg) yylastch = yytext; else @@ -388,7 +388,7 @@ yylook() #ifdef YYDEBUG fprintf(yyout,"yylook: yymorfg=%d\n",yymorfg); # endif - + for(;;) { #ifdef YYDEBUG @@ -400,7 +400,7 @@ yylook() if (yyprevious==YYNEWLINE) yystate++; testbreak=0; - + for (;;) { # ifdef LEXDEBUG @@ -412,12 +412,12 @@ yylook() exit(EXIT_FAILURE); } testbreak++; - + yyt = yystate->yystoff; /* fprintf(yyout,"yylook: yyt offs: %02x\n",yyt-yycrank); */ - + if(yyt == yycrank) { /* may not be any transitions */ yyz = yystate->yyother; @@ -430,7 +430,7 @@ yylook() fprintf(yyout,"yylook: input "); printchar("yych",yych); # endif - + tryagain: # ifdef LEXDEBUG @@ -440,7 +440,7 @@ yylook() yyr = yyt; /* fprintf(yyout,"yylook: yyr offs: %02x\n",yyr-yycrank); */ - + if ( yyt > yycrank) { yyt = yyr + yych; @@ -467,7 +467,7 @@ yylook() } # ifdef YYOPTIM else if(yyt < yycrank) /* r < yycrank */ - { + { yyt = yyr = yycrank+(yycrank-yyt); # ifdef LEXDEBUG fprintf(yyout,"yylook: compressed state\n"); @@ -492,7 +492,7 @@ yylook() fprintf(yyout,"yylook: continue (2)\n"); # endif goto contin; - + } # ifdef LEXDEBUG /* @@ -509,12 +509,12 @@ yylook() */ fprintf(yyout,"yylook: try fall back character\n"); # endif - if(yyt <= yytop && yyt->verify+yysvec == yystate) + if(yyt <= yytop && yyt->verify+yysvec == yystate) { # ifdef LEXDEBUG fprintf(yyout,"yylook: (2a)\n"); # endif - + if(yyt->advance+yysvec == YYLERR) /* error transition */ { # ifdef LEXDEBUG @@ -531,7 +531,7 @@ yylook() fprintf(yyout,"yylook: continue (3)\n"); # endif goto contin; - + } # ifdef LEXDEBUG fprintf(yyout,"yylook: (2)\n"); @@ -578,7 +578,7 @@ yylook() { yyolsp = lsp; if(yyextra[*yyfnd]) /* must backup */ - { + { while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate) { lsp--; @@ -630,7 +630,7 @@ yylook() # endif } - + yyback(p, m) int *p; { @@ -648,25 +648,25 @@ yyback(p, m) yyinput() { int out=input(); - + #ifdef YYDEBUG fprintf(yyout,"yylook: input "); printchar("out",out); -#endif +#endif return(out); } yyoutput(c) - int c; + int c; { output(c); } yyunput(c) - int c; + int c; { unput(c); } -main() +main() { printf("main start\n"); infile = fopen("yacc.in","rb"); @@ -681,8 +681,8 @@ main() } /* yyerror - issue error message */ -yyerror(s) -char *s; +yyerror(s) +char *s; { printf("[%s]\n", s); } @@ -722,39 +722,39 @@ short yyact[]= 0, 0, 0, 0, 0, 0, 0, 6, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 6 + 0, 0, 0, 0, 0, 0, 0, 4, 6 }; short yypact[]= { -1000, -9,-1000, 5, -7, -59,-1000,-1000,-1000, -40, -29, -40, -40,-1000,-1000, -40, -40, -40, -40, -38, - -35, -38, -38,-1000,-1000,-1000 + -35, -38, -38,-1000,-1000,-1000 }; short yypgo[]= { - 0, 21, 20, 17, 11 + 0, 21, 20, 17, 11 }; short yyr1[]= { 0, 1, 1, 1, 1, 2, 4, 4, 4, 4, - 4, 4, 4, 4, 3 + 4, 4, 4, 4, 3 }; short yyr2[]= { 0, 0, 2, 3, 3, 3, 3, 3, 3, 3, - 2, 3, 1, 1, 1 + 2, 3, 1, 1, 1 }; short yychk[]= { -1000, -1, 10, -2, 256, -3, 257, 10, 10, 61, -4, 45, 40, -3, 258, 43, 45, 42, 47, -4, - -4, -4, -4, -4, -4, 41 + -4, -4, -4, -4, -4, 41 }; short yydef[]= { 1, -2, 2, 0, 0, 0, 14, 3, 4, 0, 5, 0, 0, 12, 13, 0, 0, 0, 0, 10, - 0, 6, 7, 8, 9, 11 + 0, 6, 7, 8, 9, 11 }; # define YYFLAG -1000 @@ -774,7 +774,7 @@ int yychar = -1; /* current input token number */ int yynerrs = 0; /* number of errors */ short yyerrflag = 0; /* error recovery flag */ -yyparse() +yyparse() { short yys[YYMAXDEPTH]; short yyj, yym; @@ -820,23 +820,23 @@ yyparse() #ifdef YYDEBUG printf("yyparse: yynewstate (1)\n"); #endif - + if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0; #ifdef YYDEBUG - + printf("yyparse: yynewstate yyn=%d ",yyn); printchar("yychar",yychar); #endif - + if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault; #ifdef YYDEBUG printf("yyparse: yynewstate (2)\n"); #endif - + if( yychk[ yyn=yyact[ yyn ] ] == yychar ) /* valid shift */ - { + { yychar = -1; yyval = yylval; yystate = yyn; @@ -872,9 +872,9 @@ yyparse() #ifdef YYDEBUG printf("yyparse: yyn=%d yyerrflag=%d\n",yyn,yyerrflag); #endif - + if( yyn == 0 ) /* error */ - { + { /* error ... attempt to resume parsing */ switch( yyerrflag ){ @@ -942,65 +942,65 @@ yyparse() yyn = yyr1[yyn]; yyj = yypgo[yyn] + *yyps + 1; if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]]; - + switch(yym) { case 4: - { - yyerrok; + { + yyerrok; } break; case 5: - { + { printf("[STORE]\n"); - } + } break; case 6: - { + { printf("[ADD]\n"); - } + } break; case 7: - { + { printf("[NEG]\n[ADD]\n"); - } + } break; case 8: - { + { printf("[MUL]\n"); - } + } break; case 9: - { + { printf("[DIV]\n"); - } + } break; case 10: - { - printf("[NEG]\n"); - } + { + printf("[NEG]\n"); + } break; case 12: - { - printf("[LOAD]\n"); - } + { + printf("[LOAD]\n"); + } break; case 13: - { + { printf("[PUSH %s]\n", yytext); - } + } break; case 14: - { + { printf("[%s]\n", yytext); - } + } break; } - + goto yystack; /* stack new state and value */ } - -int yywrap() -{ - return 1; + +int yywrap() +{ + return 1; } diff --git a/test/ref/yacc2.c b/test/ref/yacc2.c index 3b4819c55..33288b25d 100644 --- a/test/ref/yacc2.c +++ b/test/ref/yacc2.c @@ -8,9 +8,9 @@ #include <stdio.h> # define YYTYPE char -struct yywork -{ - YYTYPE verify, advance; +struct yywork +{ + YYTYPE verify, advance; } yycrank[] = { {0,0}, {0,0}, {1,3}, {0,0}, @@ -22,12 +22,12 @@ struct yywork {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, - + {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, - + {0,0}, {1,5}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, @@ -37,17 +37,17 @@ struct yywork {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {0,0}, {0,0}, {0,0}, - + {0,0}, {0,0}, {0,0}, {0,0}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, - + {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {0,0}, {0,0}, - + {0,0}, {0,0}, {6,8}, {0,0}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, @@ -90,7 +90,7 @@ int yyvstop[] = 0,4,0,3,4,0,2,4,0,1,4,0,2,0,1,0,0 }; -struct yysvf +struct yysvf { struct yywork *yystoff; struct yysvf *yyother; @@ -157,7 +157,7 @@ void subtest3(void) yyt=yycrank; yystate=yysvec; - + bogus(); if(yyt <= yytop && yyt->verify+yysvec == yystate) { @@ -173,7 +173,7 @@ void subtest3(void) short yyr2[]= { 0, 0, 2, 3, 3, 3, 3, 3, 3, 3, - 2, 3, 1, 1, 1 + 2, 3, 1, 1, 1 }; // yyps -= yyr2[yyn]; diff --git a/test/val/bug1075.c b/test/val/bug1075.c index 6ff5ec8e7..3e259fd22 100644 --- a/test/val/bug1075.c +++ b/test/val/bug1075.c @@ -8,7 +8,7 @@ long rhs; int test(void) { - /* the whole lhs is errorneously treated as an absolute address (integer + /* the whole lhs is errorneously treated as an absolute address (integer constant) neglecting its dereference */ return *(char *)0xD77C + rhs; } diff --git a/test/val/bug1178.c b/test/val/bug1178.c index 043767e4c..7fb7e7803 100644 --- a/test/val/bug1178.c +++ b/test/val/bug1178.c @@ -41,7 +41,7 @@ void dotest1(void) StructArray1[0] = test1; - printf ("test1: %d, %d, %d, %d, %d\n", + printf ("test1: %d, %d, %d, %d, %d\n", (int)StructArray1[0].a, (int)StructArray1[0].b, (int)StructArray1[0].c, (int)StructArray1[0].d, (int)StructArray1[0].e); if ((StructArray1[0].a != 42) || @@ -62,7 +62,7 @@ void dotest2(void) StructArray2[0] = test2; - printf ("test2: %d, %d, %d, %d, %d\n", + printf ("test2: %d, %d, %d, %d, %d\n", (int)StructArray2[0].a, (int)StructArray2[0].b, (int)StructArray2[0].c, (int)StructArray2[0].d); if ((StructArray2[0].a != 42) || diff --git a/test/val/bug1181.c b/test/val/bug1181.c index 4ea2d54bf..077707d94 100644 --- a/test/val/bug1181.c +++ b/test/val/bug1181.c @@ -1,5 +1,5 @@ -/* bug #1181 - Testing struct member against NULL is broken */ +/* bug #1181 - Testing struct member against NULL is broken */ #include <stdio.h> #include <stdlib.h> @@ -52,7 +52,7 @@ MENUITEM optionsitems_menu[] = { static MENU optionsmenu_menu = { &optionsitems_menu[0], -}; +}; unsigned char __fastcall__ menu_getnumitems(MENU *menu) { diff --git a/test/val/bug1438.c b/test/val/bug1438.c index 3894f87f1..9c8f7a8ce 100644 --- a/test/val/bug1438.c +++ b/test/val/bug1438.c @@ -1,5 +1,5 @@ -/* Issue #1438 fix #1439 - crash in cc65, related to delayed post-counting +/* Issue #1438 fix #1439 - crash in cc65, related to delayed post-counting this is an odd issue, the compile would crash *sometimes*, perhaps in one of ten compilation runs. diff --git a/test/val/bug1552.c b/test/val/bug1552.c index 42f39eec6..92ad902bd 100644 --- a/test/val/bug1552.c +++ b/test/val/bug1552.c @@ -23,7 +23,7 @@ int execute(TREPTR argt, int execflg, int *pf1, int *pf2) { register TREPTR t; int type; - switch (type) + switch (type) { case 6: { diff --git a/test/val/call1.c b/test/val/call1.c index c7ac920b3..d09ae0dec 100644 --- a/test/val/call1.c +++ b/test/val/call1.c @@ -70,7 +70,7 @@ call5 (unsigned int k) return (k); } -unsigned char +unsigned char call6a(unsigned char uc) { if(uc>uchar1) @@ -85,7 +85,7 @@ call6(unsigned char uc) return(call6a(uc)); } -unsigned int +unsigned int call7a(unsigned int ui) { if(ui) diff --git a/test/val/compare10.c b/test/val/compare10.c index 861a02d64..742213851 100644 --- a/test/val/compare10.c +++ b/test/val/compare10.c @@ -59,7 +59,7 @@ void c_char_gte_lit1(unsigned char expected_result) if(char0 >= 0x7e) result |= 0x10; - + if(char0 >= 0x7f) result |= 0x20; @@ -138,10 +138,10 @@ void c_int_gte_lit1(unsigned char expected_result) if(int0 >= 0x0101) result |= 0x10; - + if(int0 >= 0x01ff) result |= 0x20; - + if(int0 >= 0x0200) result |= 0x40; @@ -226,10 +226,10 @@ void c_int_gte_lit2(unsigned char expected_result) if(int0 >= -0x0101) result |= 0x10; - + if(int0 >= -0x0100) result |= 0x20; - + if(int0 >= -0xff) result |= 0x40; diff --git a/test/val/compare5.c b/test/val/compare5.c index f1d94d537..cf51fac89 100644 --- a/test/val/compare5.c +++ b/test/val/compare5.c @@ -284,7 +284,7 @@ void c_ifelse1(void) void c_minus1(void) { printf("long0:%ld long1:%ld\n",long0,long1); - + printf("(long0 != -1)\n"); if(long0 != -1) { @@ -432,7 +432,7 @@ main (void) success = failures; done (); - + printf("failures: %d\n",failures); return failures; diff --git a/test/val/compare6.c b/test/val/compare6.c index 85f16a1c4..bad411c0c 100644 --- a/test/val/compare6.c +++ b/test/val/compare6.c @@ -60,7 +60,7 @@ void c_char(void) if(char1 || !char0) failures++; - if((char0 >5 ) && (char0 < 10)) + if((char0 >5 ) && (char0 < 10)) failures++; char0 +=5; /* char0 = 6 now */ @@ -100,7 +100,7 @@ void c_int(void) if(int1 || !int0) failures++; - if((int0 >5 ) && (int0 < 10)) + if((int0 >5 ) && (int0 < 10)) failures++; int0 +=5; /* int0 = 6 now */ @@ -140,7 +140,7 @@ void c_long(void) if(long1 || !long0) failures++; - if((long0 >5 ) && (long0 < 10)) + if((long0 >5 ) && (long0 < 10)) failures++; long0 +=5; /* long0 = 6 now */ diff --git a/test/val/compare7.c b/test/val/compare7.c index 6c9636dec..d88952f62 100644 --- a/test/val/compare7.c +++ b/test/val/compare7.c @@ -129,10 +129,10 @@ void c_int_lt_lit1(unsigned char expected_result) if(int0 < 0x0101) result |= 0x10; - + if(int0 < 0x01ff) result |= 0x20; - + if(int0 < 0x0200) result |= 0x40; @@ -214,10 +214,10 @@ void c_int_lt_lit2(unsigned char expected_result) if(int0 < -0x0101) result |= 0x10; - + if(int0 < -0x0100) result |= 0x20; - + if(int0 < -0xff) result |= 0x40; diff --git a/test/val/compare8.c b/test/val/compare8.c index 0abff8c69..2621dad1d 100644 --- a/test/val/compare8.c +++ b/test/val/compare8.c @@ -59,10 +59,10 @@ void c_char_gt_lit1(unsigned char expected_result) if(char0 > 0x7e) result |= 0x10; - + if(char0 > 0x7f) result |= 0x20; - + if(result != expected_result) failures++; } @@ -132,10 +132,10 @@ void c_int_gt_lit1(unsigned char expected_result) if(int0 > 0x0101) result |= 0x10; - + if(int0 > 0x01ff) result |= 0x20; - + if(int0 > 0x0200) result |= 0x40; @@ -220,10 +220,10 @@ void c_int_gt_lit2(unsigned char expected_result) if(int0 > -0x0101) result |= 0x10; - + if(int0 > -0x0100) result |= 0x20; - + if(int0 > -0xff) result |= 0x40; diff --git a/test/val/compare9.c b/test/val/compare9.c index 4a3714199..a498c15cb 100644 --- a/test/val/compare9.c +++ b/test/val/compare9.c @@ -54,7 +54,7 @@ void c_char_lte_lit1(unsigned char expected_result) if(char0 <= 0x7f) result |= 0x10; - + if(result != expected_result) failures++; } @@ -124,10 +124,10 @@ void c_int_lte_lit1(unsigned char expected_result) if(int0 <= 0x0101) result |= 0x10; - + if(int0 <= 0x01ff) result |= 0x20; - + if(int0 <= 0x0200) result |= 0x40; @@ -209,10 +209,10 @@ void c_int_lte_lit2(unsigned char expected_result) if(int0 <= -0x0101) result |= 0x10; - + if(int0 <= -0x0100) result |= 0x20; - + if(int0 <= -0xff) result |= 0x40; diff --git a/test/val/constexpr.c b/test/val/constexpr.c index 4338717f4..c66946a19 100644 --- a/test/val/constexpr.c +++ b/test/val/constexpr.c @@ -8,7 +8,7 @@ if they are being compiled/evaluated correctly. related: pr #1424 - More compile-time constant expressions regarding object addresses -issue #1196 - Constant expressions in general +issue #1196 - Constant expressions in general */ diff --git a/test/val/cq22.c b/test/val/cq22.c index 015b7bf77..20048fa2c 100644 --- a/test/val/cq22.c +++ b/test/val/cq22.c @@ -125,7 +125,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq241.c b/test/val/cq241.c index 1f66a378c..611b5a376 100644 --- a/test/val/cq241.c +++ b/test/val/cq241.c @@ -267,7 +267,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq243.c b/test/val/cq243.c index aaec9a8ea..8aba7dfe8 100644 --- a/test/val/cq243.c +++ b/test/val/cq243.c @@ -245,7 +245,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq244.c b/test/val/cq244.c index 9f4704f36..896ddb75b 100644 --- a/test/val/cq244.c +++ b/test/val/cq244.c @@ -140,7 +140,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq25.c b/test/val/cq25.c index bfdade957..7cacebf0a 100644 --- a/test/val/cq25.c +++ b/test/val/cq25.c @@ -152,7 +152,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq26.c b/test/val/cq26.c index 239411f1c..1c88dfed6 100644 --- a/test/val/cq26.c +++ b/test/val/cq26.c @@ -197,7 +197,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq4.c b/test/val/cq4.c index a8b6b1d52..205f62c88 100644 --- a/test/val/cq4.c +++ b/test/val/cq4.c @@ -344,7 +344,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq61.c b/test/val/cq61.c index fc4d1d95f..c16b64066 100644 --- a/test/val/cq61.c +++ b/test/val/cq61.c @@ -167,7 +167,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq626.c b/test/val/cq626.c index a8b05c8f2..b7c592d58 100644 --- a/test/val/cq626.c +++ b/test/val/cq626.c @@ -318,7 +318,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq71.c b/test/val/cq71.c index f7167c728..725a40e88 100644 --- a/test/val/cq71.c +++ b/test/val/cq71.c @@ -221,7 +221,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq714.c b/test/val/cq714.c index d7a878033..c36c992aa 100644 --- a/test/val/cq714.c +++ b/test/val/cq714.c @@ -1776,7 +1776,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq714b.c b/test/val/cq714b.c index 9538281b8..19b58628c 100644 --- a/test/val/cq714b.c +++ b/test/val/cq714b.c @@ -997,7 +997,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq715.c b/test/val/cq715.c index 0fe864159..2e7e22d85 100644 --- a/test/val/cq715.c +++ b/test/val/cq715.c @@ -132,7 +132,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq72.c b/test/val/cq72.c index 421177a0b..6b8026576 100644 --- a/test/val/cq72.c +++ b/test/val/cq72.c @@ -326,7 +326,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq7813.c b/test/val/cq7813.c index 9d4308a3e..d6c9b445f 100644 --- a/test/val/cq7813.c +++ b/test/val/cq7813.c @@ -362,7 +362,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq81.c b/test/val/cq81.c index 85e1ac1d6..1e83a2e04 100644 --- a/test/val/cq81.c +++ b/test/val/cq81.c @@ -708,7 +708,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq84.c b/test/val/cq84.c index 64429e300..c1f62913e 100644 --- a/test/val/cq84.c +++ b/test/val/cq84.c @@ -249,7 +249,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq85.c b/test/val/cq85.c index 49423e7de..81a99c960 100644 --- a/test/val/cq85.c +++ b/test/val/cq85.c @@ -294,7 +294,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq86.c b/test/val/cq86.c index 9c850662a..90cfa0b7c 100644 --- a/test/val/cq86.c +++ b/test/val/cq86.c @@ -209,7 +209,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq88.c b/test/val/cq88.c index ef742824e..a9af7bef7 100644 --- a/test/val/cq88.c +++ b/test/val/cq88.c @@ -165,7 +165,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/duffs-device.c b/test/val/duffs-device.c index effb33bb2..eb91e244f 100644 --- a/test/val/duffs-device.c +++ b/test/val/duffs-device.c @@ -1,6 +1,6 @@ /* !!DESCRIPTION!! Implementation of Duff's device (loop unrolling). - !!ORIGIN!! + !!ORIGIN!! !!LICENCE!! GPL, read COPYING.GPL */ @@ -34,7 +34,7 @@ int acmp(char* a, char* b, int count) return 0; } -void duffit (char* to, char* from, int count) +void duffit (char* to, char* from, int count) { int n = (count + 7) / 8; @@ -55,14 +55,14 @@ int main(void) { char a[ASIZE] = {1}; char b[ASIZE] = {2}; - + /* a and b should be different */ if(!acmp(a, b, ASIZE)) { failures++; } - + duffit(a, b, ASIZE); - + /* a and b should be the same */ if(acmp(a, b, ASIZE)) { failures++; diff --git a/test/val/lib_common_ctype.c b/test/val/lib_common_ctype.c index 39c92953b..281ee454e 100644 --- a/test/val/lib_common_ctype.c +++ b/test/val/lib_common_ctype.c @@ -16,7 +16,7 @@ #define NUMTESTS 257 -typedef struct +typedef struct { bool isalnum; bool isalpha; @@ -30,7 +30,7 @@ typedef struct bool isspace; bool isupper; bool isxdigit; - bool isblank; + bool isblank; } CTypeClassifications; @@ -89,7 +89,7 @@ CTypeClassifications testSet[NUMTESTS] = {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2D {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2E {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2F - + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 30 {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 31 {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 32 @@ -123,7 +123,7 @@ CTypeClassifications testSet[NUMTESTS] = {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4D {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4E {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4F - + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 50 {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 51 {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 52 diff --git a/test/val/lib_common_memmove.c b/test/val/lib_common_memmove.c index 6b2273e78..cf81bc404 100644 --- a/test/val/lib_common_memmove.c +++ b/test/val/lib_common_memmove.c @@ -10,7 +10,7 @@ TEST { unsigned i, v; char* p; - + for (i=0; i < BufferSize; ++i) Buffer[i+1] = (i%128); @@ -35,7 +35,7 @@ TEST ASSERT_AreEqual(i%128, (unsigned)Buffer[i+2], "%u", "Unexpected value in buffer at position %u!" COMMA i+2); } - v = Buffer[BufferSize+1]; // rember value of first untouched end-byte + v = Buffer[BufferSize+1]; // rember value of first untouched end-byte // copy downwards p = memmove(Buffer+1, Buffer+2, BufferSize); diff --git a/test/val/lib_common_mulxx.c b/test/val/lib_common_mulxx.c index cf5f089e9..e5afb3f0e 100644 --- a/test/val/lib_common_mulxx.c +++ b/test/val/lib_common_mulxx.c @@ -4,7 +4,7 @@ TEST { unsigned i; - + for (i=0; i < 256; ++i) { ASSERT_AreEqual(i*20, mul20(i), "%u", "Invalid 'mul20(%u)' calculation!" COMMA i); diff --git a/test/val/lib_common_strcat.c b/test/val/lib_common_strcat.c index 1872053a4..3947c5130 100644 --- a/test/val/lib_common_strcat.c +++ b/test/val/lib_common_strcat.c @@ -11,7 +11,7 @@ TEST { unsigned i,j; char* p; - + for (i=0; i < SourceStringSize; ++i) SourceString[i] = (i%128)+1; @@ -23,13 +23,13 @@ TEST DestinationString[0] = 0; ASSERT_AreEqual(0, strlen(DestinationString), "%u", "Destination string initialization or 'strlen()' problem!"); - + /* Test concatenation to empty buffer */ strcat(DestinationString, SourceString); - + ASSERT_AreEqual(SourceStringSize, strlen(DestinationString), "%u", "Unexpected string length while string concatenation to empty buffer!"); - + /* Test concatenation to non empty buffer */ p = strcat(DestinationString, SourceString); diff --git a/test/val/lib_common_strchr.c b/test/val/lib_common_strchr.c index a48d287e5..6f2db258a 100644 --- a/test/val/lib_common_strchr.c +++ b/test/val/lib_common_strchr.c @@ -1,7 +1,7 @@ #include <string.h> #include "unittest.h" - + /* Test string. Must NOT have duplicate characters! */ static char S[] = "Helo wrd!\n"; diff --git a/test/val/lib_common_strcspn.c b/test/val/lib_common_strcspn.c index f289ddb95..1adb19671 100644 --- a/test/val/lib_common_strcspn.c +++ b/test/val/lib_common_strcspn.c @@ -11,7 +11,7 @@ static char* TestChars="1234567890"; // we like to find numbe TEST { unsigned i; - + for (i=0; i < EstimatedStringSize; ++i) EstimatedString[i] = (i%26)+'A'; // put ABCD... into the string to be estimated diff --git a/test/val/lib_common_strncat.c b/test/val/lib_common_strncat.c index a6f92ac05..54cf0e3e5 100644 --- a/test/val/lib_common_strncat.c +++ b/test/val/lib_common_strncat.c @@ -11,7 +11,7 @@ TEST { unsigned i; char* p; - + for (i=0; i < SourceStringSize; ++i) SourceString[i] = (i%128)+1; @@ -23,13 +23,13 @@ TEST DestinationString[0] = 0; ASSERT_AreEqual(0, strlen(DestinationString), "%u", "Destination string initialization or 'strlen()' problem!"); - + /* Test "unlimted" concatenation to empty buffer */ strncat(DestinationString, SourceString, 1024); - + ASSERT_AreEqual(SourceStringSize, strlen(DestinationString), "%u", "Unexpected string length while string concatenation to empty buffer!"); - + /* Test limited concatenation to non empty buffer */ p = strncat(DestinationString, SourceString, 128); diff --git a/test/val/lib_common_strrchr.c b/test/val/lib_common_strrchr.c index a72c44db9..840ec2b7c 100644 --- a/test/val/lib_common_strrchr.c +++ b/test/val/lib_common_strrchr.c @@ -1,6 +1,6 @@ #include <string.h> #include "unittest.h" - + static char TestString[] = "01234567890123456789"; // two times the same string static char Found[256]; diff --git a/test/val/lib_common_strspn.c b/test/val/lib_common_strspn.c index 96a006469..b7b4c1d85 100644 --- a/test/val/lib_common_strspn.c +++ b/test/val/lib_common_strspn.c @@ -10,7 +10,7 @@ static char* TestChars="1234567890"; // we like to find numbe TEST { unsigned i; - + for (i=0; i < EstimatedStringSize; ++i) EstimatedString[i] = (i%10)+'0'; // put 0123... into the string to be estimated diff --git a/test/val/mult1.c b/test/val/mult1.c index 831bde7ec..6d491a427 100644 --- a/test/val/mult1.c +++ b/test/val/mult1.c @@ -48,23 +48,23 @@ void m2(unsigned char uc) void m3(unsigned char uc) { volatile unsigned char vuc; - + /* uchar = uchar * lit */ /* testing literal multiply with same source and destination */ vuc = uc; - uc2 = 0; - uc1 = vuc; uc1 = uc1*1; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*2; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*3; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*4; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc2 = 0; + uc1 = vuc; uc1 = uc1*1; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*2; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*3; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*4; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*5; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*6; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*7; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*8; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*6; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*7; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*8; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*9; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*10; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*11; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*12; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*10; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*11; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*12; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*13; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*14; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*15; if( uc1 != (uc2+=TESTLIT) ) failures++; @@ -75,17 +75,17 @@ void m3(unsigned char uc) uc1 = vuc; uc1 = uc1*20; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*21; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*22; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*23; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*23; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*24; if( uc1 != (uc2+=TESTLIT) ) failures++; - + uc1 = vuc; uc1 = uc1*31; if( uc1 != ((31*TESTLIT) & 0xff) ) failures++; uc1 = vuc; uc1 = uc1*32; if( uc1 != ((32*TESTLIT) & 0xff) ) failures++; uc1 = vuc; uc1 = uc1*64; if( uc1 != ((64*TESTLIT) & 0xff) ) failures++; uc1 = vuc; uc1 = uc1*128;if( uc1 != ((128*TESTLIT)& 0xff) ) failures++; /* testing literal multiply with different source and destination */ - uc1 = vuc*1; if( uc1 != ((1*TESTLIT) & 0xff) ) failures++; - uc1 = vuc*2; if( uc1 != ((2*TESTLIT) & 0xff) ) failures++; + uc1 = vuc*1; if( uc1 != ((1*TESTLIT) & 0xff) ) failures++; + uc1 = vuc*2; if( uc1 != ((2*TESTLIT) & 0xff) ) failures++; uc1 = vuc*4; if( uc1 != ((4*TESTLIT) & 0xff) ) failures++; } diff --git a/test/val/or1.c b/test/val/or1.c index 9e41d7a39..b5f550331 100644 --- a/test/val/or1.c +++ b/test/val/or1.c @@ -57,23 +57,23 @@ void or_lit2uint(void) failures++; uint0 |= 1; - if(uint0 != 1) + if(uint0 != 1) failures++; uint0 |= 2; - if(uint0 != 3) + if(uint0 != 3) failures++; uint0 |= 0x100; - if(uint0 != 0x103) + if(uint0 != 0x103) failures++; uint0 |= 0x102; - if(uint0 != 0x103) + if(uint0 != 0x103) failures++; uint0 |= 0x303; - if(uint0 != 0x303) + if(uint0 != 0x303) failures++; } @@ -83,27 +83,27 @@ void or_lit2ulong(void) failures++; ulong0 |= 1; - if(ulong0 != 1) + if(ulong0 != 1) failures++; ulong0 |= 2; - if(ulong0 != 3) + if(ulong0 != 3) failures++; ulong0 |= 0x100; - if(ulong0 != 0x103) + if(ulong0 != 0x103) failures++; ulong0 |= 0x102; - if(ulong0 != 0x103) + if(ulong0 != 0x103) failures++; ulong0 |= 0x303; - if(ulong0 != 0x303) + if(ulong0 != 0x303) failures++; ulong0 |= 0x80000000; - if(ulong0 != 0x80000303) + if(ulong0 != 0x80000303) failures++; } diff --git a/test/val/postdec-16-16.c b/test/val/postdec-16-16.c index e55b5765f..bb4475959 100644 --- a/test/val/postdec-16-16.c +++ b/test/val/postdec-16-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 3; static unsigned short u16r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/postdec-16-8.c b/test/val/postdec-16-8.c index 76a64d769..d2a5bab3b 100644 --- a/test/val/postdec-16-8.c +++ b/test/val/postdec-16-8.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 3; static unsigned char u8r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/postdec-8-16.c b/test/val/postdec-8-16.c index f7716ae89..7eeda2dcc 100644 --- a/test/val/postdec-8-16.c +++ b/test/val/postdec-8-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 3; static unsigned short u16r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/postdec-8-8.c b/test/val/postdec-8-8.c index b620c46dc..38470cb14 100644 --- a/test/val/postdec-8-8.c +++ b/test/val/postdec-8-8.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 3; static unsigned char u8r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/postinc-16-16.c b/test/val/postinc-16-16.c index 286e0364b..4a122e51f 100644 --- a/test/val/postinc-16-16.c +++ b/test/val/postinc-16-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 1; static unsigned short u16r = 3; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/postinc-16-8.c b/test/val/postinc-16-8.c index dd0a03d6c..a604ab34c 100644 --- a/test/val/postinc-16-8.c +++ b/test/val/postinc-16-8.c @@ -1,12 +1,12 @@ #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -26,9 +26,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 1; static unsigned char u8r = 3; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = 0; @@ -40,17 +40,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -60,13 +60,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/postinc-8-16.c b/test/val/postinc-8-16.c index 57e934ced..7ac57e9da 100644 --- a/test/val/postinc-8-16.c +++ b/test/val/postinc-8-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 1; static unsigned short u16r = 3; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/postinc-8-8.c b/test/val/postinc-8-8.c index b168af8df..97c8aa9f7 100644 --- a/test/val/postinc-8-8.c +++ b/test/val/postinc-8-8.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 1; static unsigned char u8r = 3; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/pptest4.c b/test/val/pptest4.c index 827be7200..6c0891661 100644 --- a/test/val/pptest4.c +++ b/test/val/pptest4.c @@ -2,7 +2,7 @@ /* preprocessor test #4 */ #define t(x,y,z) x ## y ## z -int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,), +int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,), t(10,,), t(,11,), t(,,12), t(,,) }; int e[] = { 123, 45, 67, 89, 10, 11, 12, }; diff --git a/test/val/pptest5.c b/test/val/pptest5.c index 82f642c8e..0b9db291d 100644 --- a/test/val/pptest5.c +++ b/test/val/pptest5.c @@ -1,7 +1,7 @@ /* preprocessor test #5 */ -#define t(x,y,z) x ## y ## z +#define t(x,y,z) x ## y ## z int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,), t(10,,), t(,11,), t(,,12), t(,,) }; diff --git a/test/val/pr1423.c b/test/val/pr1423.c index 3135b64a3..47f0f0610 100644 --- a/test/val/pr1423.c +++ b/test/val/pr1423.c @@ -10,7 +10,7 @@ void test1(void) } fails++; return; -} +} void test2(void) { diff --git a/test/val/predec-16-16.c b/test/val/predec-16-16.c index 7d70b1208..a8c1658e4 100644 --- a/test/val/predec-16-16.c +++ b/test/val/predec-16-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 3; static unsigned short u16r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/predec-16-8.c b/test/val/predec-16-8.c index 69a0a3e28..a0e77da89 100644 --- a/test/val/predec-16-8.c +++ b/test/val/predec-16-8.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 3; static unsigned char u8r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/predec-8-16.c b/test/val/predec-8-16.c index 750312215..353f819d2 100644 --- a/test/val/predec-8-16.c +++ b/test/val/predec-8-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 3; static unsigned short u16r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/predec-8-8.c b/test/val/predec-8-8.c index d1069b39e..e468c9426 100644 --- a/test/val/predec-8-8.c +++ b/test/val/predec-8-8.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 3; static unsigned char u8r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/preinc-16-16.c b/test/val/preinc-16-16.c index d9c6dbf62..b600b6533 100644 --- a/test/val/preinc-16-16.c +++ b/test/val/preinc-16-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 3; static unsigned short u16r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/preinc-16-8.c b/test/val/preinc-16-8.c index 97a5dd306..a7bc5d53a 100644 --- a/test/val/preinc-16-8.c +++ b/test/val/preinc-16-8.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 3; static unsigned char u8r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/preinc-8-16.c b/test/val/preinc-8-16.c index 3c3a9b479..2b4104df5 100644 --- a/test/val/preinc-8-16.c +++ b/test/val/preinc-8-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 3; static unsigned short u16r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/preinc-8-8.c b/test/val/preinc-8-8.c index a700bfc48..9f6ec35a9 100644 --- a/test/val/preinc-8-8.c +++ b/test/val/preinc-8-8.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 3; static unsigned char u8r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/static-fwd-decl.c b/test/val/static-fwd-decl.c index 420640d97..a133e930f 100644 --- a/test/val/static-fwd-decl.c +++ b/test/val/static-fwd-decl.c @@ -15,7 +15,7 @@ typedef struct _DIRMENU { const char *name; struct _DIRMENU *dest; -} DIRMENU; +} DIRMENU; static DIRMENU rmenu; diff --git a/test/val/strnicmp-test.c b/test/val/strnicmp-test.c index 6376a39bb..e6e5a3b04 100644 --- a/test/val/strnicmp-test.c +++ b/test/val/strnicmp-test.c @@ -71,9 +71,9 @@ int main(void) ret = do_test("", "", 5); printresult(ret); - + printf("fails: %d\n", fails); - + #if defined(__CC65__) && !defined(__SIM6502__) && !defined(__SIM65C02__) cgetc(); #endif diff --git a/test/val/switch2.c b/test/val/switch2.c index 65c24eeda..eff06ce12 100644 --- a/test/val/switch2.c +++ b/test/val/switch2.c @@ -1,6 +1,6 @@ /* !!DESCRIPTION!! Testing empty bodied switch statements. - !!ORIGIN!! + !!ORIGIN!! !!LICENCE!! GPL, read COPYING.GPL */ diff --git a/test/val/time-test.c b/test/val/time-test.c index 304238fa0..db086410d 100644 --- a/test/val/time-test.c +++ b/test/val/time-test.c @@ -46,7 +46,7 @@ int main (void) sprintf (result, "%08lX - %s\n", t, buf); printf (result); if (strcmp(result, EXPECTSTR) != 0) { fails++; } - + printf("fails: %d\n", fails); return fails; diff --git a/test/val/xor.c b/test/val/xor.c index 2a346023e..98bd5faf1 100644 --- a/test/val/xor.c +++ b/test/val/xor.c @@ -31,12 +31,12 @@ void xor_chars_0_1(void) void xor_if(void) { - if(achar0 ^ achar1) + if(achar0 ^ achar1) failures++; achar0 ^= 0xff; - if( !(achar0 ^ achar1) ) + if( !(achar0 ^ achar1) ) failures++; } From 92e16432f792a5b358df68588980efb5b993fb1b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:08:04 +0200 Subject: [PATCH 1218/2710] remove dangling spaces --- util/atari/ataricvt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/atari/ataricvt.c b/util/atari/ataricvt.c index 104d4f6de..23ad5a24a 100644 --- a/util/atari/ataricvt.c +++ b/util/atari/ataricvt.c @@ -8,7 +8,7 @@ int main (void) putchar ('\n'); } else if (C == 0x7F) { putchar ('\t'); - } else { + } else { putchar (C); } } From 4e3bba0c3f7f67c1b05a11c4373c8daf61e8c257 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:08:21 +0200 Subject: [PATCH 1219/2710] also check spaces at end of lines --- .github/checks/Makefile | 8 +++----- Contributing.md | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/checks/Makefile b/.github/checks/Makefile index 827606d01..662477790 100644 --- a/.github/checks/Makefile +++ b/.github/checks/Makefile @@ -1,15 +1,13 @@ .PHONY: tabs -check: tabs lastline +check: tabs lastline spaces tabs: tabs.sh @./tabs.sh - + lastline: lastline.sh @./lastline.sh - -# checks that will currently fail (on a lot of files), so they are not included -# in the general "check" action + spaces: spaces.sh @./spaces.sh diff --git a/Contributing.md b/Contributing.md index c8681c7ee..6258ce523 100644 --- a/Contributing.md +++ b/Contributing.md @@ -20,7 +20,7 @@ This is an ongoing controversial topic - everyone knows that. However, the follo * No extra spaces at the end of lines. * All text files must end with new-line characters. Don't leave the last line "dangling". -The (bash) scipts used to check the above rules can be found in ```.github/check``` +The (bash) scipts used to check the above rules can be found in ```.github/check```. You can also run all checks using ```make check```. ### misc From e9fec5e3fe4569b5c018aa6b9aa5d72572e16480 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 17:12:52 +0200 Subject: [PATCH 1220/2710] define CHECK_PATH rather than leaving it open --- .github/checks/lastline.sh | 2 ++ .github/checks/spaces.sh | 2 ++ .github/checks/tabs.sh | 2 ++ 3 files changed, 6 insertions(+) diff --git a/.github/checks/lastline.sh b/.github/checks/lastline.sh index d455481d1..464f1774a 100755 --- a/.github/checks/lastline.sh +++ b/.github/checks/lastline.sh @@ -1,6 +1,8 @@ #! /bin/bash OLDCWD=`pwd` SCRIPT_PATH=`dirname $0` +CHECK_PATH=. + cd $SCRIPT_PATH/../../ nl=' diff --git a/.github/checks/spaces.sh b/.github/checks/spaces.sh index 309ba9ac1..71bdd877f 100755 --- a/.github/checks/spaces.sh +++ b/.github/checks/spaces.sh @@ -1,6 +1,8 @@ #! /bin/bash OLDCWD=`pwd` SCRIPT_PATH=`dirname $0` +CHECK_PATH=. + cd $SCRIPT_PATH/../../ FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l ' $' | grep -v "libwrk/" | grep -v "testwrk/"` diff --git a/.github/checks/tabs.sh b/.github/checks/tabs.sh index ad10dfe14..db2b61eac 100755 --- a/.github/checks/tabs.sh +++ b/.github/checks/tabs.sh @@ -1,6 +1,8 @@ #! /bin/bash OLDCWD=`pwd` SCRIPT_PATH=`dirname $0` +CHECK_PATH=. + cd $SCRIPT_PATH/../../ FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l $'\t' | grep -v "libwrk/" | grep -v "testwrk/"` From b2319f35787a227af0dda65ffaddf1c6c273102e Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 17 Apr 2022 14:45:33 -0400 Subject: [PATCH 1221/2710] Made all of the Makefile's rules be phony. --- .github/checks/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/checks/Makefile b/.github/checks/Makefile index 662477790..dc42d14ca 100644 --- a/.github/checks/Makefile +++ b/.github/checks/Makefile @@ -1,5 +1,5 @@ -.PHONY: tabs +.PHONY: check tabs lastline spaces check: tabs lastline spaces From 86ca11222a905a122773029da44223bea0171490 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 17 Apr 2022 14:47:19 -0400 Subject: [PATCH 1222/2710] Fixed and tightenned the find commands' expressions. --- .github/checks/lastline.sh | 2 +- .github/checks/spaces.sh | 2 +- .github/checks/tabs.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/checks/lastline.sh b/.github/checks/lastline.sh index 464f1774a..797b6acfd 100755 --- a/.github/checks/lastline.sh +++ b/.github/checks/lastline.sh @@ -8,7 +8,7 @@ cd $SCRIPT_PATH/../../ nl=' ' nl=$'\n' -FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | while read f; do +FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | while read f; do t=$(tail -c2 $f; printf x); r1="${nl}$"; [[ ${t%x} =~ $r1 ]] || echo "$f" done` diff --git a/.github/checks/spaces.sh b/.github/checks/spaces.sh index 71bdd877f..02a03ff58 100755 --- a/.github/checks/spaces.sh +++ b/.github/checks/spaces.sh @@ -5,7 +5,7 @@ CHECK_PATH=. cd $SCRIPT_PATH/../../ -FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l ' $' | grep -v "libwrk/" | grep -v "testwrk/"` +FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l ' $' | grep -v "libwrk/" | grep -v "testwrk/"` cd $OLDCWD diff --git a/.github/checks/tabs.sh b/.github/checks/tabs.sh index db2b61eac..3823eb370 100755 --- a/.github/checks/tabs.sh +++ b/.github/checks/tabs.sh @@ -5,7 +5,7 @@ CHECK_PATH=. cd $SCRIPT_PATH/../../ -FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l $'\t' | grep -v "libwrk/" | grep -v "testwrk/"` +FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l $'\t' | grep -v "libwrk/" | grep -v "testwrk/"` cd $OLDCWD From a4e1cf9a0a62bddcc660ae339062e047b8ddf21c Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 17 Apr 2022 15:08:42 -0400 Subject: [PATCH 1223/2710] Moved a constant expression out of a loop. --- .github/checks/lastline.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/checks/lastline.sh b/.github/checks/lastline.sh index 797b6acfd..406814ff4 100755 --- a/.github/checks/lastline.sh +++ b/.github/checks/lastline.sh @@ -8,8 +8,9 @@ cd $SCRIPT_PATH/../../ nl=' ' nl=$'\n' +r1="${nl}$" FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | while read f; do - t=$(tail -c2 $f; printf x); r1="${nl}$"; + t=$(tail -c2 $f; printf x) [[ ${t%x} =~ $r1 ]] || echo "$f" done` From 58392982035b609189f93dedc94fe5a759240225 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 17 Apr 2022 16:10:28 -0400 Subject: [PATCH 1224/2710] Remove work directory paths _before_ checking for style errors. --- .github/checks/spaces.sh | 2 +- .github/checks/tabs.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/checks/spaces.sh b/.github/checks/spaces.sh index 02a03ff58..e133d1e47 100755 --- a/.github/checks/spaces.sh +++ b/.github/checks/spaces.sh @@ -5,7 +5,7 @@ CHECK_PATH=. cd $SCRIPT_PATH/../../ -FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l ' $' | grep -v "libwrk/" | grep -v "testwrk/"` +FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l ' $'` cd $OLDCWD diff --git a/.github/checks/tabs.sh b/.github/checks/tabs.sh index 3823eb370..87350efd9 100755 --- a/.github/checks/tabs.sh +++ b/.github/checks/tabs.sh @@ -5,7 +5,7 @@ CHECK_PATH=. cd $SCRIPT_PATH/../../ -FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l $'\t' | grep -v "libwrk/" | grep -v "testwrk/"` +FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l $'\t'` cd $OLDCWD From 2cdccd5e8a9784ef642014818ae99fa50254e723 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 17 Apr 2022 19:06:35 -0400 Subject: [PATCH 1225/2710] Oops, forgot to check macros. --- .github/checks/lastline.sh | 2 +- .github/checks/spaces.sh | 2 +- .github/checks/tabs.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/checks/lastline.sh b/.github/checks/lastline.sh index 406814ff4..851a2cfc4 100755 --- a/.github/checks/lastline.sh +++ b/.github/checks/lastline.sh @@ -9,7 +9,7 @@ nl=' ' nl=$'\n' r1="${nl}$" -FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | while read f; do +FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | while read f; do t=$(tail -c2 $f; printf x) [[ ${t%x} =~ $r1 ]] || echo "$f" done` diff --git a/.github/checks/spaces.sh b/.github/checks/spaces.sh index e133d1e47..d695beaba 100755 --- a/.github/checks/spaces.sh +++ b/.github/checks/spaces.sh @@ -5,7 +5,7 @@ CHECK_PATH=. cd $SCRIPT_PATH/../../ -FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l ' $'` +FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l ' $'` cd $OLDCWD diff --git a/.github/checks/tabs.sh b/.github/checks/tabs.sh index 87350efd9..16f0280ae 100755 --- a/.github/checks/tabs.sh +++ b/.github/checks/tabs.sh @@ -5,7 +5,7 @@ CHECK_PATH=. cd $SCRIPT_PATH/../../ -FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l $'\t'` +FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l $'\t'` cd $OLDCWD From 4fc12701102b5b331e7252ea213ace05d0144b53 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 11:59:06 +0300 Subject: [PATCH 1226/2710] Add mono conio files --- libsrc/atari7800/extra/mono.s | 28 + libsrc/atari7800/mono_clrscr.s | 39 + libsrc/atari7800/mono_conio.s | 227 ++++ libsrc/atari7800/mono_cputc.s | 102 ++ libsrc/atari7800/mono_font.s | 2052 +++++++++++++++++++++++++++++ libsrc/atari7800/mono_setcursor.s | 208 +++ 6 files changed, 2656 insertions(+) create mode 100644 libsrc/atari7800/extra/mono.s create mode 100644 libsrc/atari7800/mono_clrscr.s create mode 100644 libsrc/atari7800/mono_conio.s create mode 100644 libsrc/atari7800/mono_cputc.s create mode 100644 libsrc/atari7800/mono_font.s create mode 100644 libsrc/atari7800/mono_setcursor.s diff --git a/libsrc/atari7800/extra/mono.s b/libsrc/atari7800/extra/mono.s new file mode 100644 index 000000000..5d99fc02a --- /dev/null +++ b/libsrc/atari7800/extra/mono.s @@ -0,0 +1,28 @@ +; +; Groepaz/Hitmen, 19.10.2015 +; +; import/overload stubs for the monochrome conio implementation +; + + ; mono_conio.s + .import _mono_screen + .export _screen := _mono_screen + + ; mono_clrscr.s + .import _mono_clrscr + .export _clrscr := _mono_clrscr + + ; mono_cputc.s + .import _mono_cputc + .export _cputc := _mono_cputc + + ; mono_font.s + .import _mono_font + .export _font := _mono_font + + ; mono_setcursor.s + .import mono_gotoxy + .export gotoxy := mono_gotoxy + .import _mono_gotoxy + .export _gotoxy := _mono_gotoxy + diff --git a/libsrc/atari7800/mono_clrscr.s b/libsrc/atari7800/mono_clrscr.s new file mode 100644 index 000000000..e6137d684 --- /dev/null +++ b/libsrc/atari7800/mono_clrscr.s @@ -0,0 +1,39 @@ + + .include "atari7800.inc" + + .export _mono_clrscr + + .import _screen + .import pusha0,pushax + .include "extzp.inc" + + .code + + .proc _mono_clrscr + + lda #<_screen + ldx #>_screen + sta ptr7800 + stx ptr7800+1 + ldx #screenrows +@L1: ldy #mono_charsperline + lda #0 +@L2: sta (ptr7800),y + dey + bne @L2 + lda ptr7800 + clc + adc #mono_charsperline + bcc @L3 + inc ptr7800+1 +@L3: dex + bne @L1 + rts + + .endproc + +;------------------------------------------------------------------------------- +; force the init constructor to be imported + + .import mono_initconio +conio_init = mono_initconio diff --git a/libsrc/atari7800/mono_conio.s b/libsrc/atari7800/mono_conio.s new file mode 100644 index 000000000..51ecc93b8 --- /dev/null +++ b/libsrc/atari7800/mono_conio.s @@ -0,0 +1,227 @@ +; +; 2022-04-02, Karri Kaksonen +; +; The Atari 7800 has only 4k of RAM. So for a generic conio implementation +; the best alternative is to use indirect tile mapping with a character +; frame buffer +; + + .constructor mono_initconio + .include "atari7800.inc" + .include "extzp.inc" + .import _mono_font + .import _get_tv + .export _mono_screen + .export _mono_zones + .export _mono_dll + + .bss +_mono_screen: + .res mono_charsperline * screenrows + +;---------------------------------------------------------------------------- +; Macros used to generate lists + +.macro DLLentry offset, addr + .byte offset + .byte >addr + .byte <addr +.endmacro + +.macro NullHeader offset, zero + .byte offset + .byte zero +.endmacro + +.macro Header addr, palwidth, hpos + .byte <addr + .byte palwidth + .byte >addr + .byte hpos +.endmacro + +.macro XHeader addr, flags, palwidth, hpos + .byte <addr + .byte flags + .byte >addr + .byte palwidth + .byte hpos +.endmacro + +.macro TextZone row + ; Text + .byte <(_mono_screen + 2 * row * charsperline) + .byte $60 + .byte >(_mono_screen + 2 * row * charsperline) + .byte 12 + .byte 0 + .byte <(_mono_screen + 2 * row * charsperline + charsperline) + .byte $60 + .byte >(_mono_screen + 2 * row * charsperline + charsperline) + .byte 12 + .byte 80 + ; Cursor + .byte 95 + .byte 0 + .byte >_mono_font + .byte 0 +.endmacro + +;----------------------------------------------------------------------------- +; The Atari 7800 has only 4k of RAM. So for a generic conio implementation +; the best alternative is to use indirect tile mapping with a character +; frame buffer + .data + +_mono_zones: +zone0: TextZone 0 +nh: NullHeader 0, 0 +zone1: TextZone 1 + NullHeader 0, 0 +zone2: TextZone 2 + NullHeader 0, 0 +zone3: TextZone 3 + NullHeader 0, 0 +zone4: TextZone 4 + NullHeader 0, 0 +zone5: TextZone 5 + NullHeader 0, 0 +zone6: TextZone 6 + NullHeader 0, 0 +zone7: TextZone 7 + NullHeader 0, 0 +zone8: TextZone 8 + NullHeader 0, 0 +zone9: TextZone 9 + NullHeader 0, 0 +zone10: TextZone 10 + NullHeader 0, 0 +zone11: TextZone 11 + NullHeader 0, 0 +zone12: TextZone 12 + NullHeader 0, 0 +zone13: TextZone 13 + NullHeader 0, 0 +zone14: TextZone 14 + NullHeader 0, 0 +zone15: TextZone 15 + NullHeader 0, 0 +zone16: TextZone 16 + NullHeader 0, 0 +zone17: TextZone 17 + NullHeader 0, 0 +zone18: TextZone 18 + NullHeader 0, 0 +zone19: TextZone 19 + NullHeader 0, 0 +zone20: TextZone 20 + NullHeader 0, 0 +zone21: TextZone 21 + NullHeader 0, 0 +zone22: TextZone 22 + NullHeader 0, 0 +zone23: TextZone 23 + NullHeader 0, 0 +zone24: TextZone 24 + NullHeader 0, 0 +zone25: TextZone 25 + NullHeader 0, 0 +zone26: TextZone 26 + NullHeader 0, 0 +zone27: TextZone 27 + NullHeader 0, 0 + +_mono_dll: +PALscanlines: ; 25 lines + DLLentry 15, nh + DLLentry 8, nh + +Topscanlines: ; 9 lines + DLLentry 8, nh + +Displaylines: + DLLentry $80+7, zone0 ; NMI interrupt from end of prev zone + DLLentry 7, zone1 + DLLentry 7, zone2 + DLLentry 7, zone3 + DLLentry 7, zone4 + DLLentry 7, zone5 + DLLentry 7, zone6 + DLLentry 7, zone7 + DLLentry 7, zone8 + DLLentry 7, zone9 + DLLentry 7, zone10 + DLLentry 7, zone11 + DLLentry 7, zone12 + DLLentry 7, zone13 + DLLentry 7, zone14 + DLLentry 7, zone15 + DLLentry 7, zone16 + DLLentry 7, zone17 + DLLentry 7, zone18 + DLLentry 7, zone19 + DLLentry 7, zone20 + DLLentry 7, zone21 + DLLentry 7, zone22 + DLLentry 7, zone23 + DLLentry 7, zone24 + DLLentry 7, zone25 + DLLentry 7, zone26 + DLLentry 7, zone27 + +Bottomscanlines: + DLLentry $80+15, nh ; NMI interrupt at end of display + DLLentry 9, nh + DLLentry 15, nh + DLLentry 8, nh + +;----------------------------------------------------------------------------- +; Set up the screen to 320a mode +; + .segment "ONCE" + +CTRL_MODE160 .set 0 +CTRL_MODEAC .set 3 +CTRL_KANGOFF .set 0 +CTRL_BCBLACK .set 0 +CTRL_CHAR1B .set 0 +CTRL_CHAR2B .set $10 +CTRL_DMAON .set $40 +CTRL_CKOFF .set 0 + +;----------------------------------------------------------------------------- +; Initialize the conio display lists and zones +; + .proc mono_initconio + + jsr _get_tv + bne pal + lda #<Topscanlines + sta DPPL + lda #>Topscanlines + sta DPPH + jmp vblankon +pal: lda #<PALscanlines + sta DPPL + lda #>PALscanlines + sta DPPH +vblankon: + lda MSTAT + bmi vblankon +vblankoff: + lda MSTAT + bpl vblankoff + lda #>_mono_font + sta CHBASE + lda #(CTRL_MODEAC | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR1B | CTRL_DMAON | CTRL_CKOFF) + sta CTRL + lda #$00 ; Black background + sta BKGRND + sta CURS_X + sta CURS_Y + lda #$0f ; White + sta P0C1 + rts + + .endproc + diff --git a/libsrc/atari7800/mono_cputc.s b/libsrc/atari7800/mono_cputc.s new file mode 100644 index 000000000..5735749ea --- /dev/null +++ b/libsrc/atari7800/mono_cputc.s @@ -0,0 +1,102 @@ +; +; Mark Keates, Christian Groessler, Piotr Fusik, Karri Kaksonen +; +; void cputcxy (unsigned char x, unsigned char y, char c); +; void cputc (char c); +; + + .export _mono_cputc + .import _mono_gotoxy, _mono_gotox, _mono_gotoy, pusha0 + .import pushax + .import _mono_screen + + .include "atari7800.inc" + .include "extzp.inc" + + .code + +;--------------------------------------------------------------------------- +; 8x16 routine + +umula0: + ldy #8 ; Number of bits + lda #0 + lsr ptr7800 ; Get first bit into carry +@L0: bcc @L1 + + clc + adc ptrtmp + tax + lda ptrtmp+1 ; hi byte of left op + clc + adc ptr7800+1 + sta ptr7800+1 + txa + +@L1: ror ptr7800+1 + ror a + ror ptr7800 + dey + bne @L0 + tax + lda ptr7800 ; Load the result + rts + +;----------------------------------------------------------------------------- +; Put a character on screen +; +; The code will handle newlines that wrap to start of screen +; + .proc _mono_cputc + + cmp #$0A ; LF + bne @L4 +@L1: lda #0 ; newline + jsr _mono_gotox + lda CURS_Y + cmp #(screenrows-1) + bne @L2 + lda #0 + beq @L3 +@L2: clc + adc #1 +@L3: jmp _mono_gotoy + +@L4: + pha + + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + lda CURS_Y ; Find position on screen buffer + sta ptr7800 + lda #mono_charsperline + sta ptrtmp + jsr umula0 + clc + adc CURS_X + bcc @L11 + inx +@L11: clc + adc #<(_mono_screen) + sta ptr7800 + bcc @L12 + inx +@L12: txa + clc + adc #>(_mono_screen) + sta ptr7800+1 + + pla ; Print character on screen + ldy #0 + sta (ptr7800),y + + lda CURS_X ; Increment cursor + cmp #(mono_charsperline-1) + beq @L1 + clc + adc #1 + jmp _mono_gotox + + .endproc + diff --git a/libsrc/atari7800/mono_font.s b/libsrc/atari7800/mono_font.s new file mode 100644 index 000000000..3c828544a --- /dev/null +++ b/libsrc/atari7800/mono_font.s @@ -0,0 +1,2052 @@ + .export _mono_font + .segment "RODATA" + .align 256 +_mono_font: + .byte $00 + .byte $7e + .byte $7e + .byte $00 + .byte $00 + .byte $7c + .byte $7c + .byte $00 + .byte $ff + .byte $00 + .byte $ff + .byte $78 + .byte $18 + .byte $e0 + .byte $c0 + .byte $99 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $ff + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $60 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $60 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $ff + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f8 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f0 + .byte $1e + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f8 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $38 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f8 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $30 + .byte $c7 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $0f + .byte $03 + .byte $00 + .byte $00 + .byte $00 + .byte $88 + .byte $aa + .byte $ee + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $36 + .byte $36 + .byte $36 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $fc + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $1c + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $81 + .byte $ff + .byte $10 + .byte $10 + .byte $38 + .byte $38 + .byte $00 + .byte $ff + .byte $3c + .byte $c3 + .byte $cc + .byte $7e + .byte $f0 + .byte $e6 + .byte $5a + .byte $80 + .byte $02 + .byte $3c + .byte $66 + .byte $1b + .byte $cc + .byte $7e + .byte $18 + .byte $18 + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $6c + .byte $30 + .byte $c6 + .byte $76 + .byte $00 + .byte $18 + .byte $60 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $30 + .byte $80 + .byte $7c + .byte $fc + .byte $fc + .byte $78 + .byte $1e + .byte $78 + .byte $78 + .byte $30 + .byte $78 + .byte $70 + .byte $30 + .byte $30 + .byte $18 + .byte $00 + .byte $60 + .byte $30 + .byte $78 + .byte $cc + .byte $fc + .byte $3c + .byte $f8 + .byte $fe + .byte $f0 + .byte $3e + .byte $cc + .byte $78 + .byte $78 + .byte $e6 + .byte $fe + .byte $c6 + .byte $c6 + .byte $38 + .byte $f0 + .byte $1c + .byte $e6 + .byte $78 + .byte $78 + .byte $fc + .byte $30 + .byte $c6 + .byte $c6 + .byte $78 + .byte $fe + .byte $78 + .byte $02 + .byte $78 + .byte $00 + .byte $00 + .byte $00 + .byte $76 + .byte $dc + .byte $78 + .byte $76 + .byte $78 + .byte $f0 + .byte $0c + .byte $e6 + .byte $78 + .byte $cc + .byte $e6 + .byte $78 + .byte $c6 + .byte $cc + .byte $78 + .byte $60 + .byte $0c + .byte $f0 + .byte $f8 + .byte $18 + .byte $76 + .byte $30 + .byte $6c + .byte $c6 + .byte $0c + .byte $fc + .byte $1c + .byte $18 + .byte $e0 + .byte $00 + .byte $fe + .byte $0c + .byte $7e + .byte $78 + .byte $3f + .byte $7e + .byte $7e + .byte $7e + .byte $0c + .byte $3c + .byte $78 + .byte $78 + .byte $78 + .byte $3c + .byte $78 + .byte $c6 + .byte $cc + .byte $fc + .byte $7f + .byte $ce + .byte $78 + .byte $78 + .byte $78 + .byte $7e + .byte $7e + .byte $0c + .byte $18 + .byte $78 + .byte $18 + .byte $fc + .byte $30 + .byte $c6 + .byte $d8 + .byte $7e + .byte $78 + .byte $78 + .byte $7e + .byte $cc + .byte $cc + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $cc + .byte $cf + .byte $18 + .byte $00 + .byte $00 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $36 + .byte $36 + .byte $36 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $76 + .byte $c0 + .byte $c0 + .byte $6c + .byte $fc + .byte $70 + .byte $60 + .byte $18 + .byte $30 + .byte $38 + .byte $ee + .byte $78 + .byte $00 + .byte $60 + .byte $38 + .byte $cc + .byte $00 + .byte $fc + .byte $fc + .byte $fc + .byte $18 + .byte $d8 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $3c + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $99 + .byte $e7 + .byte $38 + .byte $38 + .byte $7c + .byte $7c + .byte $18 + .byte $e7 + .byte $66 + .byte $99 + .byte $cc + .byte $18 + .byte $70 + .byte $67 + .byte $3c + .byte $e0 + .byte $0e + .byte $7e + .byte $00 + .byte $1b + .byte $38 + .byte $7e + .byte $3c + .byte $18 + .byte $3c + .byte $18 + .byte $30 + .byte $fe + .byte $24 + .byte $ff + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $6c + .byte $f8 + .byte $66 + .byte $cc + .byte $00 + .byte $30 + .byte $30 + .byte $66 + .byte $30 + .byte $30 + .byte $00 + .byte $30 + .byte $c0 + .byte $e6 + .byte $30 + .byte $cc + .byte $cc + .byte $0c + .byte $cc + .byte $cc + .byte $30 + .byte $cc + .byte $18 + .byte $30 + .byte $30 + .byte $30 + .byte $fc + .byte $30 + .byte $00 + .byte $c0 + .byte $cc + .byte $66 + .byte $66 + .byte $6c + .byte $62 + .byte $60 + .byte $66 + .byte $cc + .byte $30 + .byte $cc + .byte $66 + .byte $66 + .byte $c6 + .byte $c6 + .byte $6c + .byte $60 + .byte $78 + .byte $66 + .byte $cc + .byte $30 + .byte $cc + .byte $78 + .byte $ee + .byte $6c + .byte $30 + .byte $66 + .byte $60 + .byte $06 + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $cc + .byte $66 + .byte $cc + .byte $cc + .byte $c0 + .byte $60 + .byte $7c + .byte $66 + .byte $30 + .byte $cc + .byte $6c + .byte $30 + .byte $d6 + .byte $cc + .byte $cc + .byte $7c + .byte $7c + .byte $60 + .byte $0c + .byte $34 + .byte $cc + .byte $78 + .byte $fe + .byte $6c + .byte $7c + .byte $64 + .byte $30 + .byte $18 + .byte $30 + .byte $00 + .byte $c6 + .byte $18 + .byte $cc + .byte $c0 + .byte $66 + .byte $cc + .byte $cc + .byte $cc + .byte $78 + .byte $60 + .byte $c0 + .byte $c0 + .byte $30 + .byte $18 + .byte $30 + .byte $c6 + .byte $fc + .byte $60 + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $7c + .byte $3c + .byte $cc + .byte $7e + .byte $e6 + .byte $fc + .byte $cf + .byte $18 + .byte $cc + .byte $30 + .byte $cc + .byte $cc + .byte $cc + .byte $dc + .byte $7e + .byte $7c + .byte $cc + .byte $c0 + .byte $0c + .byte $66 + .byte $6f + .byte $18 + .byte $33 + .byte $cc + .byte $88 + .byte $aa + .byte $77 + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $36 + .byte $36 + .byte $36 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $dc + .byte $f8 + .byte $c0 + .byte $6c + .byte $cc + .byte $d8 + .byte $7c + .byte $18 + .byte $78 + .byte $6c + .byte $6c + .byte $cc + .byte $7e + .byte $7e + .byte $60 + .byte $cc + .byte $fc + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $d8 + .byte $30 + .byte $dc + .byte $00 + .byte $00 + .byte $00 + .byte $6c + .byte $00 + .byte $00 + .byte $3c + .byte $00 + .byte $00 + .byte $bd + .byte $c3 + .byte $7c + .byte $7c + .byte $fe + .byte $fe + .byte $3c + .byte $c3 + .byte $42 + .byte $bd + .byte $cc + .byte $3c + .byte $30 + .byte $63 + .byte $e7 + .byte $f8 + .byte $3e + .byte $18 + .byte $66 + .byte $1b + .byte $6c + .byte $7e + .byte $7e + .byte $18 + .byte $7e + .byte $0c + .byte $60 + .byte $c0 + .byte $66 + .byte $ff + .byte $3c + .byte $00 + .byte $30 + .byte $00 + .byte $fe + .byte $0c + .byte $30 + .byte $dc + .byte $00 + .byte $60 + .byte $18 + .byte $3c + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $60 + .byte $f6 + .byte $30 + .byte $60 + .byte $0c + .byte $fe + .byte $0c + .byte $cc + .byte $30 + .byte $cc + .byte $0c + .byte $00 + .byte $00 + .byte $60 + .byte $00 + .byte $18 + .byte $30 + .byte $de + .byte $fc + .byte $66 + .byte $c0 + .byte $66 + .byte $68 + .byte $68 + .byte $ce + .byte $cc + .byte $30 + .byte $cc + .byte $6c + .byte $62 + .byte $d6 + .byte $ce + .byte $c6 + .byte $60 + .byte $dc + .byte $6c + .byte $1c + .byte $30 + .byte $cc + .byte $cc + .byte $fe + .byte $38 + .byte $30 + .byte $32 + .byte $60 + .byte $0c + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $7c + .byte $66 + .byte $c0 + .byte $cc + .byte $fc + .byte $60 + .byte $cc + .byte $66 + .byte $30 + .byte $0c + .byte $78 + .byte $30 + .byte $fe + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $66 + .byte $78 + .byte $30 + .byte $cc + .byte $cc + .byte $fe + .byte $38 + .byte $cc + .byte $30 + .byte $30 + .byte $18 + .byte $30 + .byte $00 + .byte $c6 + .byte $78 + .byte $cc + .byte $fc + .byte $3e + .byte $7c + .byte $7c + .byte $7c + .byte $c0 + .byte $7e + .byte $fc + .byte $fc + .byte $30 + .byte $18 + .byte $30 + .byte $fe + .byte $cc + .byte $78 + .byte $7f + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $c0 + .byte $60 + .byte $30 + .byte $c6 + .byte $18 + .byte $7c + .byte $30 + .byte $cc + .byte $cc + .byte $cc + .byte $fc + .byte $00 + .byte $00 + .byte $c0 + .byte $c0 + .byte $0c + .byte $33 + .byte $37 + .byte $18 + .byte $66 + .byte $66 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $f8 + .byte $f8 + .byte $f6 + .byte $fe + .byte $f8 + .byte $f6 + .byte $36 + .byte $f6 + .byte $fe + .byte $fe + .byte $f8 + .byte $f8 + .byte $1f + .byte $ff + .byte $ff + .byte $1f + .byte $ff + .byte $ff + .byte $1f + .byte $37 + .byte $3f + .byte $37 + .byte $ff + .byte $f7 + .byte $37 + .byte $ff + .byte $f7 + .byte $ff + .byte $ff + .byte $ff + .byte $ff + .byte $3f + .byte $1f + .byte $1f + .byte $3f + .byte $ff + .byte $ff + .byte $f8 + .byte $1f + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $c8 + .byte $cc + .byte $c0 + .byte $6c + .byte $60 + .byte $d8 + .byte $66 + .byte $18 + .byte $cc + .byte $c6 + .byte $6c + .byte $cc + .byte $db + .byte $db + .byte $c0 + .byte $cc + .byte $00 + .byte $30 + .byte $60 + .byte $18 + .byte $18 + .byte $18 + .byte $00 + .byte $76 + .byte $00 + .byte $18 + .byte $18 + .byte $ec + .byte $6c + .byte $78 + .byte $3c + .byte $00 + .byte $00 + .byte $81 + .byte $ff + .byte $fe + .byte $fe + .byte $fe + .byte $7c + .byte $3c + .byte $c3 + .byte $42 + .byte $bd + .byte $7d + .byte $66 + .byte $30 + .byte $63 + .byte $e7 + .byte $fe + .byte $fe + .byte $18 + .byte $66 + .byte $7b + .byte $6c + .byte $00 + .byte $18 + .byte $18 + .byte $18 + .byte $fe + .byte $fe + .byte $c0 + .byte $ff + .byte $7e + .byte $7e + .byte $00 + .byte $30 + .byte $00 + .byte $6c + .byte $78 + .byte $18 + .byte $76 + .byte $00 + .byte $60 + .byte $18 + .byte $ff + .byte $fc + .byte $00 + .byte $fc + .byte $00 + .byte $30 + .byte $de + .byte $30 + .byte $38 + .byte $38 + .byte $cc + .byte $0c + .byte $f8 + .byte $18 + .byte $78 + .byte $7c + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $0c + .byte $18 + .byte $de + .byte $cc + .byte $7c + .byte $c0 + .byte $66 + .byte $78 + .byte $78 + .byte $c0 + .byte $fc + .byte $30 + .byte $0c + .byte $78 + .byte $60 + .byte $fe + .byte $de + .byte $c6 + .byte $7c + .byte $cc + .byte $7c + .byte $70 + .byte $30 + .byte $cc + .byte $cc + .byte $d6 + .byte $38 + .byte $78 + .byte $18 + .byte $60 + .byte $18 + .byte $18 + .byte $c6 + .byte $00 + .byte $00 + .byte $0c + .byte $7c + .byte $cc + .byte $7c + .byte $cc + .byte $f0 + .byte $cc + .byte $76 + .byte $30 + .byte $0c + .byte $6c + .byte $30 + .byte $fe + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $76 + .byte $c0 + .byte $30 + .byte $cc + .byte $cc + .byte $d6 + .byte $6c + .byte $cc + .byte $98 + .byte $e0 + .byte $00 + .byte $1c + .byte $00 + .byte $6c + .byte $cc + .byte $cc + .byte $cc + .byte $06 + .byte $0c + .byte $0c + .byte $0c + .byte $c0 + .byte $66 + .byte $cc + .byte $cc + .byte $30 + .byte $18 + .byte $30 + .byte $c6 + .byte $78 + .byte $60 + .byte $0c + .byte $fe + .byte $78 + .byte $78 + .byte $78 + .byte $cc + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $c0 + .byte $f0 + .byte $fc + .byte $fa + .byte $3c + .byte $0c + .byte $30 + .byte $78 + .byte $cc + .byte $f8 + .byte $ec + .byte $3e + .byte $38 + .byte $60 + .byte $fc + .byte $fc + .byte $de + .byte $db + .byte $18 + .byte $cc + .byte $33 + .byte $88 + .byte $aa + .byte $ee + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $18 + .byte $06 + .byte $36 + .byte $06 + .byte $06 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $30 + .byte $30 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $dc + .byte $f8 + .byte $c0 + .byte $6c + .byte $30 + .byte $d8 + .byte $66 + .byte $18 + .byte $cc + .byte $fe + .byte $c6 + .byte $7c + .byte $db + .byte $db + .byte $f8 + .byte $cc + .byte $fc + .byte $30 + .byte $30 + .byte $30 + .byte $18 + .byte $18 + .byte $fc + .byte $00 + .byte $38 + .byte $18 + .byte $00 + .byte $0c + .byte $6c + .byte $60 + .byte $3c + .byte $00 + .byte $00 + .byte $a5 + .byte $db + .byte $fe + .byte $7c + .byte $38 + .byte $38 + .byte $18 + .byte $e7 + .byte $66 + .byte $99 + .byte $0f + .byte $66 + .byte $3f + .byte $7f + .byte $3c + .byte $f8 + .byte $3e + .byte $7e + .byte $66 + .byte $db + .byte $38 + .byte $00 + .byte $7e + .byte $7e + .byte $18 + .byte $0c + .byte $60 + .byte $c0 + .byte $66 + .byte $3c + .byte $ff + .byte $00 + .byte $78 + .byte $6c + .byte $fe + .byte $c0 + .byte $cc + .byte $38 + .byte $c0 + .byte $60 + .byte $18 + .byte $3c + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $ce + .byte $30 + .byte $0c + .byte $0c + .byte $6c + .byte $f8 + .byte $c0 + .byte $0c + .byte $cc + .byte $cc + .byte $30 + .byte $30 + .byte $60 + .byte $fc + .byte $18 + .byte $0c + .byte $de + .byte $cc + .byte $66 + .byte $c0 + .byte $66 + .byte $68 + .byte $68 + .byte $c0 + .byte $cc + .byte $30 + .byte $0c + .byte $6c + .byte $60 + .byte $fe + .byte $f6 + .byte $c6 + .byte $66 + .byte $cc + .byte $66 + .byte $e0 + .byte $30 + .byte $cc + .byte $cc + .byte $c6 + .byte $6c + .byte $cc + .byte $8c + .byte $60 + .byte $30 + .byte $18 + .byte $6c + .byte $00 + .byte $18 + .byte $78 + .byte $60 + .byte $78 + .byte $0c + .byte $78 + .byte $60 + .byte $76 + .byte $6c + .byte $70 + .byte $0c + .byte $66 + .byte $30 + .byte $cc + .byte $f8 + .byte $78 + .byte $dc + .byte $76 + .byte $dc + .byte $7c + .byte $7c + .byte $cc + .byte $cc + .byte $c6 + .byte $c6 + .byte $cc + .byte $fc + .byte $30 + .byte $18 + .byte $30 + .byte $00 + .byte $38 + .byte $c0 + .byte $00 + .byte $78 + .byte $3c + .byte $78 + .byte $78 + .byte $78 + .byte $78 + .byte $3c + .byte $78 + .byte $78 + .byte $70 + .byte $38 + .byte $70 + .byte $6c + .byte $00 + .byte $fc + .byte $7f + .byte $cc + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $3c + .byte $cc + .byte $7e + .byte $64 + .byte $78 + .byte $cc + .byte $18 + .byte $78 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $cc + .byte $6c + .byte $6c + .byte $30 + .byte $00 + .byte $00 + .byte $cc + .byte $cc + .byte $00 + .byte $66 + .byte $66 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $18 + .byte $f8 + .byte $36 + .byte $00 + .byte $f8 + .byte $f6 + .byte $36 + .byte $fe + .byte $f6 + .byte $36 + .byte $f8 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $1f + .byte $36 + .byte $37 + .byte $3f + .byte $f7 + .byte $ff + .byte $37 + .byte $ff + .byte $f7 + .byte $ff + .byte $36 + .byte $ff + .byte $00 + .byte $36 + .byte $1f + .byte $1f + .byte $00 + .byte $36 + .byte $ff + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $76 + .byte $cc + .byte $cc + .byte $6c + .byte $60 + .byte $7e + .byte $66 + .byte $dc + .byte $78 + .byte $c6 + .byte $c6 + .byte $18 + .byte $7e + .byte $7e + .byte $c0 + .byte $cc + .byte $00 + .byte $fc + .byte $18 + .byte $60 + .byte $1b + .byte $18 + .byte $00 + .byte $dc + .byte $6c + .byte $00 + .byte $00 + .byte $0c + .byte $6c + .byte $30 + .byte $3c + .byte $00 + .byte $00 + .byte $81 + .byte $ff + .byte $fe + .byte $38 + .byte $7c + .byte $10 + .byte $00 + .byte $ff + .byte $3c + .byte $c3 + .byte $07 + .byte $66 + .byte $33 + .byte $63 + .byte $5a + .byte $e0 + .byte $0e + .byte $3c + .byte $66 + .byte $db + .byte $63 + .byte $00 + .byte $3c + .byte $3c + .byte $18 + .byte $18 + .byte $30 + .byte $00 + .byte $24 + .byte $18 + .byte $ff + .byte $00 + .byte $78 + .byte $6c + .byte $6c + .byte $7c + .byte $c6 + .byte $6c + .byte $60 + .byte $30 + .byte $30 + .byte $66 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $0c + .byte $c6 + .byte $70 + .byte $cc + .byte $cc + .byte $3c + .byte $c0 + .byte $60 + .byte $cc + .byte $cc + .byte $cc + .byte $30 + .byte $30 + .byte $30 + .byte $00 + .byte $30 + .byte $cc + .byte $c6 + .byte $78 + .byte $66 + .byte $66 + .byte $6c + .byte $62 + .byte $62 + .byte $66 + .byte $cc + .byte $30 + .byte $0c + .byte $66 + .byte $60 + .byte $ee + .byte $e6 + .byte $6c + .byte $66 + .byte $cc + .byte $66 + .byte $cc + .byte $b4 + .byte $cc + .byte $cc + .byte $c6 + .byte $c6 + .byte $cc + .byte $c6 + .byte $60 + .byte $60 + .byte $18 + .byte $38 + .byte $00 + .byte $30 + .byte $00 + .byte $60 + .byte $00 + .byte $0c + .byte $00 + .byte $6c + .byte $00 + .byte $60 + .byte $00 + .byte $00 + .byte $60 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $18 + .byte $30 + .byte $dc + .byte $10 + .byte $cc + .byte $cc + .byte $00 + .byte $c3 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $c3 + .byte $00 + .byte $00 + .byte $00 + .byte $c6 + .byte $00 + .byte $38 + .byte $30 + .byte $00 + .byte $00 + .byte $6c + .byte $cc + .byte $cc + .byte $e0 + .byte $cc + .byte $e0 + .byte $cc + .byte $18 + .byte $00 + .byte $18 + .byte $6c + .byte $cc + .byte $cc + .byte $1b + .byte $00 + .byte $00 + .byte $1c + .byte $1c + .byte $f8 + .byte $00 + .byte $6c + .byte $6c + .byte $00 + .byte $00 + .byte $00 + .byte $c6 + .byte $c6 + .byte $18 + .byte $33 + .byte $cc + .byte $88 + .byte $aa + .byte $77 + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $00 + .byte $78 + .byte $fc + .byte $fe + .byte $cc + .byte $00 + .byte $66 + .byte $76 + .byte $30 + .byte $6c + .byte $6c + .byte $30 + .byte $00 + .byte $0c + .byte $60 + .byte $cc + .byte $fc + .byte $30 + .byte $30 + .byte $30 + .byte $1b + .byte $18 + .byte $30 + .byte $76 + .byte $6c + .byte $00 + .byte $00 + .byte $0c + .byte $6c + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $7e + .byte $7e + .byte $6c + .byte $10 + .byte $38 + .byte $10 + .byte $00 + .byte $ff + .byte $00 + .byte $ff + .byte $0f + .byte $3c + .byte $3f + .byte $7f + .byte $99 + .byte $80 + .byte $02 + .byte $18 + .byte $66 + .byte $7f + .byte $3e + .byte $00 + .byte $18 + .byte $18 + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $6c + .byte $6c + .byte $30 + .byte $00 + .byte $38 + .byte $60 + .byte $18 + .byte $60 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $06 + .byte $7c + .byte $30 + .byte $78 + .byte $78 + .byte $1c + .byte $fc + .byte $38 + .byte $fc + .byte $78 + .byte $78 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $60 + .byte $78 + .byte $7c + .byte $30 + .byte $fc + .byte $3c + .byte $f8 + .byte $fe + .byte $fe + .byte $3c + .byte $cc + .byte $78 + .byte $1e + .byte $e6 + .byte $f0 + .byte $c6 + .byte $c6 + .byte $38 + .byte $fc + .byte $78 + .byte $fc + .byte $78 + .byte $fc + .byte $cc + .byte $cc + .byte $c6 + .byte $c6 + .byte $cc + .byte $fe + .byte $78 + .byte $c0 + .byte $78 + .byte $10 + .byte $00 + .byte $30 + .byte $00 + .byte $e0 + .byte $00 + .byte $1c + .byte $00 + .byte $38 + .byte $00 + .byte $e0 + .byte $30 + .byte $0c + .byte $e0 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $10 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $1c + .byte $18 + .byte $e0 + .byte $76 + .byte $00 + .byte $78 + .byte $00 + .byte $1c + .byte $7e + .byte $cc + .byte $e0 + .byte $30 + .byte $00 + .byte $7e + .byte $cc + .byte $e0 + .byte $cc + .byte $7c + .byte $e0 + .byte $c6 + .byte $30 + .byte $1c + .byte $00 + .byte $3e + .byte $78 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $c3 + .byte $cc + .byte $18 + .byte $38 + .byte $cc + .byte $f8 + .byte $0e + .byte $1c + .byte $38 + .byte $00 + .byte $00 + .byte $00 + .byte $fc + .byte $3c + .byte $38 + .byte $30 + .byte $00 + .byte $00 + .byte $c3 + .byte $c3 + .byte $18 + .byte $00 + .byte $00 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $fc + .byte $00 + .byte $00 + .byte $00 + .byte $fc + .byte $38 + .byte $38 + .byte $1c + .byte $00 + .byte $06 + .byte $38 + .byte $78 + .byte $00 + .byte $30 + .byte $60 + .byte $18 + .byte $0e + .byte $18 + .byte $30 + .byte $00 + .byte $38 + .byte $00 + .byte $00 + .byte $0f + .byte $78 + .byte $70 + .byte $00 + .byte $00 diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s new file mode 100644 index 000000000..c75ff16f3 --- /dev/null +++ b/libsrc/atari7800/mono_setcursor.s @@ -0,0 +1,208 @@ +; +; 2022-04-03, Karri Kaksonen +; +; setcursor (unsigned char on); +; +; The Atari 7800 does not have a hw cursor. +; This module emulates a cursor to be used with the conio +; implementation. +; +; The actual cursor display is included in the conio dll +; but every scanline has the element silenced by default +; at the end of every zone. +; +; The way the cursor works is to silence it before the cursor +; position changes and enable it afterwards. +; +; In order to get some performance we have a pointer to the +; cursor header structure. This structure is always at the +; end of the zone. So the pointer changes when CURS_Y changes. +; +; There is so many dependencies that it makes sense to +; deal with all CURS_X, CURS_Y stuff in this file and +; definitely not allow direct access to the variables. +; + + .export mono_gotoxy, _mono_gotoxy, _mono_gotox, _mono_gotoy + .constructor mono_init_cursor + .interruptor mono_blink_cursor + + .importzp sp + .import _mono_zones + .import cursor + .import pusha, incsp1, pusha0, pushax, popa + .include "atari7800.inc" + .include "extzp.inc" + + .macpack generic + + .data +;----------------------------------------------------------------------------- +; The variables used by cursor functions +; + +blink_time: + .byte 140 + + .code + +;--------------------------------------------------------------------------- +; 8x16 routine + +umula0: + ldy #8 ; Number of bits + lda #0 + lsr ptr7800 ; Get first bit into carry +@L0: bcc @L1 + + clc + adc ptrtmp + tax + lda ptrtmp+1 ; hi byte of left op + adc ptr7800+1 + sta ptr7800+1 + txa + +@L1: ror ptr7800+1 + ror a + ror ptr7800 + dey + bne @L0 + tax + lda ptr7800 ; Load the result + rts + +;----------------------------------------------------------------------------- +; Calculate cursorzone address +; You also need to set the cursorzone to point to the correct cursor Header +; at the end of line CURS_Y. +; Offset to cursor zone 5. To next line offset 11 +; cursorzone points to _mono_zones + CURS_Y * 16 + 10 +; A = CURS_Y + .proc calccursorzone + + sta ptr7800 + lda #16 + sta ptrtmp + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + jsr umula0 + clc + adc #10 + bcc @L1 + inx +@L1: clc + adc #<_mono_zones + sta cursorzone ; calculate new cursorzone + txa + clc + adc #>_mono_zones + sta cursorzone+1 + rts + + .endproc + +;----------------------------------------------------------------------------- +; Set cursor to Y position. +; You also need to set the cursorzone to point to the correct cursor Header +; at the end of line CURS_Y. +; Offset to cursor zone 5. To next line offset 11 +; cursorzone points to _mono_zones + CURS_Y * 11 + 5 +; +; cursorzone[1] = 0 when not CURS_Y, 31 if CURS_Y +; +; Disable cursor +; cursorzone[1] = 0 +; +; Enable cursor +; if showcursor cursorzone[1] = 31 +; + .proc _mono_gotoy + + pha + lda CURS_Y + jsr calccursorzone + ldy #1 + lda #0 + sta (cursorzone),y ; disable cursor + pla + sta CURS_Y + jsr calccursorzone + lda cursor + beq @L1 + lda #31 ; enable cursor +@L1: ldy #1 + sta (cursorzone),y + rts + + .endproc + +;----------------------------------------------------------------------------- +; Set cursor to X position. +; You also need to set the hpos offset to the correct value on this line +; cursorzone[3] = 4 * CURS_X? +; + .proc _mono_gotox + + sta CURS_X + ldy #3 + clc + rol + rol + sta (cursorzone),y + rts + + .endproc + +;----------------------------------------------------------------------------- +; Set cursor to desired position (X,Y) +; + .proc _mono_gotoxy + + jsr _mono_gotoy + jsr popa + jsr _mono_gotox + rts + .endproc + + .proc mono_gotoxy + jsr popa + jmp _mono_gotoxy + .endproc + +;----------------------------------------------------------------------------- +; Initialize cursorzone at startup +; Offset to cursor zone 5. +; + .proc mono_blink_cursor + inc blink_time + bne @L3 + lda #140 + sta blink_time + ldy #0 + lda (cursorzone),y + cmp #32 + bne @L1 + lda #95 + bne @L2 +@L1: lda #32 +@L2: sta (cursorzone),y +@L3: rts + .endproc + +;----------------------------------------------------------------------------- +; Initialize cursorzone at startup +; Offset to cursor zone 5. +; + .segment "ONCE" +mono_init_cursor: + lda #0 + jsr calccursorzone + rts + +;----------------------------------------------------------------------------- +; force the init constructor to be imported + + .import mono_initconio +conio_init = mono_initconio From 45c4f7d46f7aad9a4d8e0edc2e5c23c81d51ce45 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 11:59:54 +0300 Subject: [PATCH 1227/2710] Add mono conio files --- asminc/atari7800.inc | 1 + cfg/atari7800.cfg | 2 +- libsrc/atari7800/clrscr.s | 4 ++-- libsrc/atari7800/conio.s | 9 ++++++--- libsrc/atari7800/cputc.s | 1 - libsrc/atari7800/extzp.inc | 2 ++ libsrc/atari7800/extzp.s | 2 ++ libsrc/atari7800/font160.s | 4 ++-- libsrc/atari7800/setcursor.s | 5 ----- libsrc/atari7800/textcolor.s | 6 ------ libsrc/atari7800/wherex.s | 2 +- libsrc/atari7800/wherey.s | 2 +- 12 files changed, 18 insertions(+), 22 deletions(-) diff --git a/asminc/atari7800.inc b/asminc/atari7800.inc index 93e990870..0f109ba64 100644 --- a/asminc/atari7800.inc +++ b/asminc/atari7800.inc @@ -8,6 +8,7 @@ .include "atari7800_maria.inc" ; constants for the conio implementation +mono_charsperline = 40 charsperline = 20 screenrows = 28 diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 160d1e58e..1eed534f3 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -10,7 +10,7 @@ SYMBOLS { __ENCRYPT_BOTTOM__: value = $ff7a, type = export; __ENCRYPT_SIZE__: value = $80, type = export; __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; - __INIT_SIZE__: value = 154, type = export; + __INIT_SIZE__: value = 156, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s index b5b3a1ebf..9d063fad6 100644 --- a/libsrc/atari7800/clrscr.s +++ b/libsrc/atari7800/clrscr.s @@ -11,8 +11,8 @@ .proc _clrscr - lda #<(_screen) - ldx #>(_screen) + lda #<_screen + ldx #>_screen sta ptr7800 stx ptr7800+1 ldx #screenrows diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index ad1c4a976..5b60f39fe 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -8,7 +8,8 @@ .constructor initconio .include "atari7800.inc" - .import _font160 + .include "extzp.inc" + .import _font .import _get_tv .export _screen .export _zones @@ -57,7 +58,7 @@ _screen: ; Cursor .byte 254 .byte 0 - .byte >_font160 + .byte >_font .byte 0 .endmacro @@ -205,12 +206,14 @@ vblankon: vblankoff: lda MSTAT bpl vblankoff - lda #>_font160 + lda #>_font sta CHBASE lda #(CTRL_MODE160 | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR2B | CTRL_DMAON | CTRL_CKOFF) sta CTRL lda #$00 ; Black background sta BKGRND + sta CURS_X + sta CURS_Y lda #$33 ; Red sta P0C1 lda #$c8 ; Green diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 4d2b8dbf6..fb95277d2 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -10,7 +10,6 @@ .import _gotoxy, gotox, gotoy, pusha0 .import pushax .import _screen - .import CURS_X, CURS_Y .import txtcolor .include "atari7800.inc" diff --git a/libsrc/atari7800/extzp.inc b/libsrc/atari7800/extzp.inc index ac1dd7e41..5990b5c86 100644 --- a/libsrc/atari7800/extzp.inc +++ b/libsrc/atari7800/extzp.inc @@ -10,4 +10,6 @@ .global ptr7800: zp .global ptrtmp: zp .global cursorzone: zp + .global CURS_X: zp + .global CURS_Y: zp diff --git a/libsrc/atari7800/extzp.s b/libsrc/atari7800/extzp.s index 376674268..a79ede01a 100644 --- a/libsrc/atari7800/extzp.s +++ b/libsrc/atari7800/extzp.s @@ -11,3 +11,5 @@ ptr7800: .res 2 ptrtmp: .res 2 cursorzone: .res 2 +CURS_X: .res 1 +CURS_Y: .res 1 diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s index 69c5774ab..07be43c4d 100644 --- a/libsrc/atari7800/font160.s +++ b/libsrc/atari7800/font160.s @@ -16,10 +16,10 @@ ; 0, 2, 4, 6, ... 254 ; Odd indices cannot be used. - .export _font160 + .export _font .rodata .align 256 -_font160: +_font: .byte $0, $0, $41, $41, $0, $0, $14, $0 .byte $0, $0, $0, $0, $1, $40, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index caaa9c1d5..99e051cff 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -24,7 +24,6 @@ ; .export gotoxy, _gotoxy, gotox, gotoy - .export CURS_X, CURS_Y .constructor init_cursor .interruptor blink_cursor @@ -43,10 +42,6 @@ ; The variables used by cursor functions ; -CURS_X: - .byte 0 -CURS_Y: - .byte 0 blink_time: .byte 140 diff --git a/libsrc/atari7800/textcolor.s b/libsrc/atari7800/textcolor.s index be98ed340..1f8efced5 100644 --- a/libsrc/atari7800/textcolor.s +++ b/libsrc/atari7800/textcolor.s @@ -51,9 +51,3 @@ txtcolor: @L4: lda #2 rts ; Old colour was 2 .endproc - -;------------------------------------------------------------------------------- -; force the init constructor to be imported - - .import initconio -conio_init = initconio diff --git a/libsrc/atari7800/wherex.s b/libsrc/atari7800/wherex.s index f90105c46..4926f1479 100644 --- a/libsrc/atari7800/wherex.s +++ b/libsrc/atari7800/wherex.s @@ -5,7 +5,7 @@ ; .export _wherex - .import CURS_X + .include "extzp.inc" ;----------------------------------------------------------------------------- ; Get cursor X position diff --git a/libsrc/atari7800/wherey.s b/libsrc/atari7800/wherey.s index 2223f29ac..f105975c0 100644 --- a/libsrc/atari7800/wherey.s +++ b/libsrc/atari7800/wherey.s @@ -5,7 +5,7 @@ ; .export _wherey - .import CURS_Y + .include "extzp.inc" ;----------------------------------------------------------------------------- ; Get cursor Y position From dbd39c63a9368f38d570911e08f14c8964ea1bd1 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 12:05:36 +0300 Subject: [PATCH 1228/2710] Fix tabs --- libsrc/atari7800/mono_clrscr.s | 48 +- libsrc/atari7800/mono_conio.s | 322 +-- libsrc/atari7800/mono_cputc.s | 92 +- libsrc/atari7800/mono_font.s | 4102 ++++++++++++++--------------- libsrc/atari7800/mono_setcursor.s | 154 +- 5 files changed, 2359 insertions(+), 2359 deletions(-) diff --git a/libsrc/atari7800/mono_clrscr.s b/libsrc/atari7800/mono_clrscr.s index e6137d684..cdf12bf4d 100644 --- a/libsrc/atari7800/mono_clrscr.s +++ b/libsrc/atari7800/mono_clrscr.s @@ -3,34 +3,34 @@ .export _mono_clrscr - .import _screen - .import pusha0,pushax - .include "extzp.inc" + .import _screen + .import pusha0,pushax + .include "extzp.inc" - .code + .code - .proc _mono_clrscr + .proc _mono_clrscr - lda #<_screen - ldx #>_screen - sta ptr7800 - stx ptr7800+1 - ldx #screenrows -@L1: ldy #mono_charsperline - lda #0 -@L2: sta (ptr7800),y - dey - bne @L2 - lda ptr7800 - clc - adc #mono_charsperline - bcc @L3 - inc ptr7800+1 -@L3: dex - bne @L1 - rts + lda #<_screen + ldx #>_screen + sta ptr7800 + stx ptr7800+1 + ldx #screenrows +@L1: ldy #mono_charsperline + lda #0 +@L2: sta (ptr7800),y + dey + bne @L2 + lda ptr7800 + clc + adc #mono_charsperline + bcc @L3 + inc ptr7800+1 +@L3: dex + bne @L1 + rts - .endproc + .endproc ;------------------------------------------------------------------------------- ; force the init constructor to be imported diff --git a/libsrc/atari7800/mono_conio.s b/libsrc/atari7800/mono_conio.s index 51ecc93b8..cd79af128 100644 --- a/libsrc/atari7800/mono_conio.s +++ b/libsrc/atari7800/mono_conio.s @@ -9,11 +9,11 @@ .constructor mono_initconio .include "atari7800.inc" .include "extzp.inc" - .import _mono_font - .import _get_tv - .export _mono_screen - .export _mono_zones - .export _mono_dll + .import _mono_font + .import _get_tv + .export _mono_screen + .export _mono_zones + .export _mono_dll .bss _mono_screen: @@ -23,48 +23,48 @@ _mono_screen: ; Macros used to generate lists .macro DLLentry offset, addr - .byte offset - .byte >addr - .byte <addr + .byte offset + .byte >addr + .byte <addr .endmacro .macro NullHeader offset, zero - .byte offset - .byte zero + .byte offset + .byte zero .endmacro .macro Header addr, palwidth, hpos - .byte <addr - .byte palwidth - .byte >addr - .byte hpos + .byte <addr + .byte palwidth + .byte >addr + .byte hpos .endmacro .macro XHeader addr, flags, palwidth, hpos - .byte <addr - .byte flags - .byte >addr - .byte palwidth - .byte hpos + .byte <addr + .byte flags + .byte >addr + .byte palwidth + .byte hpos .endmacro .macro TextZone row - ; Text - .byte <(_mono_screen + 2 * row * charsperline) - .byte $60 - .byte >(_mono_screen + 2 * row * charsperline) - .byte 12 - .byte 0 - .byte <(_mono_screen + 2 * row * charsperline + charsperline) - .byte $60 - .byte >(_mono_screen + 2 * row * charsperline + charsperline) - .byte 12 - .byte 80 - ; Cursor - .byte 95 - .byte 0 - .byte >_mono_font - .byte 0 + ; Text + .byte <(_mono_screen + 2 * row * charsperline) + .byte $60 + .byte >(_mono_screen + 2 * row * charsperline) + .byte 12 + .byte 0 + .byte <(_mono_screen + 2 * row * charsperline + charsperline) + .byte $60 + .byte >(_mono_screen + 2 * row * charsperline + charsperline) + .byte 12 + .byte 80 + ; Cursor + .byte 95 + .byte 0 + .byte >_mono_font + .byte 0 .endmacro ;----------------------------------------------------------------------------- @@ -74,153 +74,153 @@ _mono_screen: .data _mono_zones: -zone0: TextZone 0 -nh: NullHeader 0, 0 -zone1: TextZone 1 - NullHeader 0, 0 -zone2: TextZone 2 - NullHeader 0, 0 -zone3: TextZone 3 - NullHeader 0, 0 -zone4: TextZone 4 - NullHeader 0, 0 -zone5: TextZone 5 - NullHeader 0, 0 -zone6: TextZone 6 - NullHeader 0, 0 -zone7: TextZone 7 - NullHeader 0, 0 -zone8: TextZone 8 - NullHeader 0, 0 -zone9: TextZone 9 - NullHeader 0, 0 -zone10: TextZone 10 - NullHeader 0, 0 -zone11: TextZone 11 - NullHeader 0, 0 -zone12: TextZone 12 - NullHeader 0, 0 -zone13: TextZone 13 - NullHeader 0, 0 -zone14: TextZone 14 - NullHeader 0, 0 -zone15: TextZone 15 - NullHeader 0, 0 -zone16: TextZone 16 - NullHeader 0, 0 -zone17: TextZone 17 - NullHeader 0, 0 -zone18: TextZone 18 - NullHeader 0, 0 -zone19: TextZone 19 - NullHeader 0, 0 -zone20: TextZone 20 - NullHeader 0, 0 -zone21: TextZone 21 - NullHeader 0, 0 -zone22: TextZone 22 - NullHeader 0, 0 -zone23: TextZone 23 - NullHeader 0, 0 -zone24: TextZone 24 - NullHeader 0, 0 -zone25: TextZone 25 - NullHeader 0, 0 -zone26: TextZone 26 - NullHeader 0, 0 -zone27: TextZone 27 - NullHeader 0, 0 +zone0: TextZone 0 +nh: NullHeader 0, 0 +zone1: TextZone 1 + NullHeader 0, 0 +zone2: TextZone 2 + NullHeader 0, 0 +zone3: TextZone 3 + NullHeader 0, 0 +zone4: TextZone 4 + NullHeader 0, 0 +zone5: TextZone 5 + NullHeader 0, 0 +zone6: TextZone 6 + NullHeader 0, 0 +zone7: TextZone 7 + NullHeader 0, 0 +zone8: TextZone 8 + NullHeader 0, 0 +zone9: TextZone 9 + NullHeader 0, 0 +zone10: TextZone 10 + NullHeader 0, 0 +zone11: TextZone 11 + NullHeader 0, 0 +zone12: TextZone 12 + NullHeader 0, 0 +zone13: TextZone 13 + NullHeader 0, 0 +zone14: TextZone 14 + NullHeader 0, 0 +zone15: TextZone 15 + NullHeader 0, 0 +zone16: TextZone 16 + NullHeader 0, 0 +zone17: TextZone 17 + NullHeader 0, 0 +zone18: TextZone 18 + NullHeader 0, 0 +zone19: TextZone 19 + NullHeader 0, 0 +zone20: TextZone 20 + NullHeader 0, 0 +zone21: TextZone 21 + NullHeader 0, 0 +zone22: TextZone 22 + NullHeader 0, 0 +zone23: TextZone 23 + NullHeader 0, 0 +zone24: TextZone 24 + NullHeader 0, 0 +zone25: TextZone 25 + NullHeader 0, 0 +zone26: TextZone 26 + NullHeader 0, 0 +zone27: TextZone 27 + NullHeader 0, 0 _mono_dll: -PALscanlines: ; 25 lines - DLLentry 15, nh - DLLentry 8, nh +PALscanlines: ; 25 lines + DLLentry 15, nh + DLLentry 8, nh -Topscanlines: ; 9 lines - DLLentry 8, nh +Topscanlines: ; 9 lines + DLLentry 8, nh Displaylines: - DLLentry $80+7, zone0 ; NMI interrupt from end of prev zone - DLLentry 7, zone1 - DLLentry 7, zone2 - DLLentry 7, zone3 - DLLentry 7, zone4 - DLLentry 7, zone5 - DLLentry 7, zone6 - DLLentry 7, zone7 - DLLentry 7, zone8 - DLLentry 7, zone9 - DLLentry 7, zone10 - DLLentry 7, zone11 - DLLentry 7, zone12 - DLLentry 7, zone13 - DLLentry 7, zone14 - DLLentry 7, zone15 - DLLentry 7, zone16 - DLLentry 7, zone17 - DLLentry 7, zone18 - DLLentry 7, zone19 - DLLentry 7, zone20 - DLLentry 7, zone21 - DLLentry 7, zone22 - DLLentry 7, zone23 - DLLentry 7, zone24 - DLLentry 7, zone25 - DLLentry 7, zone26 - DLLentry 7, zone27 + DLLentry $80+7, zone0 ; NMI interrupt from end of prev zone + DLLentry 7, zone1 + DLLentry 7, zone2 + DLLentry 7, zone3 + DLLentry 7, zone4 + DLLentry 7, zone5 + DLLentry 7, zone6 + DLLentry 7, zone7 + DLLentry 7, zone8 + DLLentry 7, zone9 + DLLentry 7, zone10 + DLLentry 7, zone11 + DLLentry 7, zone12 + DLLentry 7, zone13 + DLLentry 7, zone14 + DLLentry 7, zone15 + DLLentry 7, zone16 + DLLentry 7, zone17 + DLLentry 7, zone18 + DLLentry 7, zone19 + DLLentry 7, zone20 + DLLentry 7, zone21 + DLLentry 7, zone22 + DLLentry 7, zone23 + DLLentry 7, zone24 + DLLentry 7, zone25 + DLLentry 7, zone26 + DLLentry 7, zone27 Bottomscanlines: - DLLentry $80+15, nh ; NMI interrupt at end of display - DLLentry 9, nh - DLLentry 15, nh - DLLentry 8, nh + DLLentry $80+15, nh ; NMI interrupt at end of display + DLLentry 9, nh + DLLentry 15, nh + DLLentry 8, nh ;----------------------------------------------------------------------------- ; Set up the screen to 320a mode ; .segment "ONCE" -CTRL_MODE160 .set 0 -CTRL_MODEAC .set 3 -CTRL_KANGOFF .set 0 -CTRL_BCBLACK .set 0 -CTRL_CHAR1B .set 0 -CTRL_CHAR2B .set $10 -CTRL_DMAON .set $40 -CTRL_CKOFF .set 0 +CTRL_MODE160 .set 0 +CTRL_MODEAC .set 3 +CTRL_KANGOFF .set 0 +CTRL_BCBLACK .set 0 +CTRL_CHAR1B .set 0 +CTRL_CHAR2B .set $10 +CTRL_DMAON .set $40 +CTRL_CKOFF .set 0 ;----------------------------------------------------------------------------- ; Initialize the conio display lists and zones ; .proc mono_initconio - jsr _get_tv - bne pal - lda #<Topscanlines - sta DPPL - lda #>Topscanlines - sta DPPH - jmp vblankon -pal: lda #<PALscanlines - sta DPPL - lda #>PALscanlines - sta DPPH + jsr _get_tv + bne pal + lda #<Topscanlines + sta DPPL + lda #>Topscanlines + sta DPPH + jmp vblankon +pal: lda #<PALscanlines + sta DPPL + lda #>PALscanlines + sta DPPH vblankon: - lda MSTAT - bmi vblankon + lda MSTAT + bmi vblankon vblankoff: - lda MSTAT - bpl vblankoff - lda #>_mono_font - sta CHBASE - lda #(CTRL_MODEAC | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR1B | CTRL_DMAON | CTRL_CKOFF) - sta CTRL - lda #$00 ; Black background - sta BKGRND - sta CURS_X - sta CURS_Y - lda #$0f ; White - sta P0C1 + lda MSTAT + bpl vblankoff + lda #>_mono_font + sta CHBASE + lda #(CTRL_MODEAC | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR1B | CTRL_DMAON | CTRL_CKOFF) + sta CTRL + lda #$00 ; Black background + sta BKGRND + sta CURS_X + sta CURS_Y + lda #$0f ; White + sta P0C1 rts .endproc diff --git a/libsrc/atari7800/mono_cputc.s b/libsrc/atari7800/mono_cputc.s index 5735749ea..4a7e5638c 100644 --- a/libsrc/atari7800/mono_cputc.s +++ b/libsrc/atari7800/mono_cputc.s @@ -7,20 +7,20 @@ .export _mono_cputc .import _mono_gotoxy, _mono_gotox, _mono_gotoy, pusha0 - .import pushax - .import _mono_screen + .import pushax + .import _mono_screen .include "atari7800.inc" .include "extzp.inc" - .code + .code ;--------------------------------------------------------------------------- ; 8x16 routine umula0: ldy #8 ; Number of bits - lda #0 + lda #0 lsr ptr7800 ; Get first bit into carry @L0: bcc @L1 @@ -28,7 +28,7 @@ umula0: adc ptrtmp tax lda ptrtmp+1 ; hi byte of left op - clc + clc adc ptr7800+1 sta ptr7800+1 txa @@ -49,54 +49,54 @@ umula0: ; .proc _mono_cputc - cmp #$0A ; LF + cmp #$0A ; LF bne @L4 -@L1: lda #0 ; newline - jsr _mono_gotox - lda CURS_Y - cmp #(screenrows-1) +@L1: lda #0 ; newline + jsr _mono_gotox + lda CURS_Y + cmp #(screenrows-1) bne @L2 - lda #0 - beq @L3 -@L2: clc - adc #1 -@L3: jmp _mono_gotoy + lda #0 + beq @L3 +@L2: clc + adc #1 +@L3: jmp _mono_gotoy @L4: - pha + pha - lda #0 - sta ptr7800+1 - sta ptrtmp+1 - lda CURS_Y ; Find position on screen buffer - sta ptr7800 - lda #mono_charsperline - sta ptrtmp - jsr umula0 - clc - adc CURS_X - bcc @L11 - inx -@L11: clc - adc #<(_mono_screen) - sta ptr7800 - bcc @L12 - inx -@L12: txa - clc - adc #>(_mono_screen) - sta ptr7800+1 + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + lda CURS_Y ; Find position on screen buffer + sta ptr7800 + lda #mono_charsperline + sta ptrtmp + jsr umula0 + clc + adc CURS_X + bcc @L11 + inx +@L11: clc + adc #<(_mono_screen) + sta ptr7800 + bcc @L12 + inx +@L12: txa + clc + adc #>(_mono_screen) + sta ptr7800+1 - pla ; Print character on screen - ldy #0 - sta (ptr7800),y + pla ; Print character on screen + ldy #0 + sta (ptr7800),y - lda CURS_X ; Increment cursor - cmp #(mono_charsperline-1) - beq @L1 - clc - adc #1 - jmp _mono_gotox + lda CURS_X ; Increment cursor + cmp #(mono_charsperline-1) + beq @L1 + clc + adc #1 + jmp _mono_gotox .endproc diff --git a/libsrc/atari7800/mono_font.s b/libsrc/atari7800/mono_font.s index 3c828544a..d07266989 100644 --- a/libsrc/atari7800/mono_font.s +++ b/libsrc/atari7800/mono_font.s @@ -1,2052 +1,2052 @@ - .export _mono_font - .segment "RODATA" - .align 256 + .export _mono_font + .segment "RODATA" + .align 256 _mono_font: - .byte $00 - .byte $7e - .byte $7e - .byte $00 - .byte $00 - .byte $7c - .byte $7c - .byte $00 - .byte $ff - .byte $00 - .byte $ff - .byte $78 - .byte $18 - .byte $e0 - .byte $c0 - .byte $99 - .byte $00 - .byte $00 - .byte $18 - .byte $00 - .byte $00 - .byte $78 - .byte $00 - .byte $ff - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $60 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $60 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $ff - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $f8 - .byte $00 - .byte $00 - .byte $78 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $f0 - .byte $1e - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $f8 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $78 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $38 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $f8 - .byte $00 - .byte $00 - .byte $18 - .byte $00 - .byte $30 - .byte $c7 - .byte $70 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $0f - .byte $03 - .byte $00 - .byte $00 - .byte $00 - .byte $88 - .byte $aa - .byte $ee - .byte $18 - .byte $18 - .byte $18 - .byte $36 - .byte $36 - .byte $18 - .byte $36 - .byte $36 - .byte $36 - .byte $00 - .byte $00 - .byte $00 - .byte $18 - .byte $00 - .byte $00 - .byte $18 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $36 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $00 - .byte $18 - .byte $36 - .byte $00 - .byte $00 - .byte $18 - .byte $36 - .byte $36 - .byte $18 - .byte $00 - .byte $18 - .byte $ff - .byte $ff - .byte $f0 - .byte $0f - .byte $00 - .byte $00 - .byte $c0 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $c0 - .byte $00 - .byte $fc - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $c0 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $18 - .byte $70 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $1c - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $81 - .byte $ff - .byte $10 - .byte $10 - .byte $38 - .byte $38 - .byte $00 - .byte $ff - .byte $3c - .byte $c3 - .byte $cc - .byte $7e - .byte $f0 - .byte $e6 - .byte $5a - .byte $80 - .byte $02 - .byte $3c - .byte $66 - .byte $1b - .byte $cc - .byte $7e - .byte $18 - .byte $18 - .byte $18 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $30 - .byte $00 - .byte $6c - .byte $30 - .byte $c6 - .byte $76 - .byte $00 - .byte $18 - .byte $60 - .byte $00 - .byte $00 - .byte $30 - .byte $00 - .byte $30 - .byte $80 - .byte $7c - .byte $fc - .byte $fc - .byte $78 - .byte $1e - .byte $78 - .byte $78 - .byte $30 - .byte $78 - .byte $70 - .byte $30 - .byte $30 - .byte $18 - .byte $00 - .byte $60 - .byte $30 - .byte $78 - .byte $cc - .byte $fc - .byte $3c - .byte $f8 - .byte $fe - .byte $f0 - .byte $3e - .byte $cc - .byte $78 - .byte $78 - .byte $e6 - .byte $fe - .byte $c6 - .byte $c6 - .byte $38 - .byte $f0 - .byte $1c - .byte $e6 - .byte $78 - .byte $78 - .byte $fc - .byte $30 - .byte $c6 - .byte $c6 - .byte $78 - .byte $fe - .byte $78 - .byte $02 - .byte $78 - .byte $00 - .byte $00 - .byte $00 - .byte $76 - .byte $dc - .byte $78 - .byte $76 - .byte $78 - .byte $f0 - .byte $0c - .byte $e6 - .byte $78 - .byte $cc - .byte $e6 - .byte $78 - .byte $c6 - .byte $cc - .byte $78 - .byte $60 - .byte $0c - .byte $f0 - .byte $f8 - .byte $18 - .byte $76 - .byte $30 - .byte $6c - .byte $c6 - .byte $0c - .byte $fc - .byte $1c - .byte $18 - .byte $e0 - .byte $00 - .byte $fe - .byte $0c - .byte $7e - .byte $78 - .byte $3f - .byte $7e - .byte $7e - .byte $7e - .byte $0c - .byte $3c - .byte $78 - .byte $78 - .byte $78 - .byte $3c - .byte $78 - .byte $c6 - .byte $cc - .byte $fc - .byte $7f - .byte $ce - .byte $78 - .byte $78 - .byte $78 - .byte $7e - .byte $7e - .byte $0c - .byte $18 - .byte $78 - .byte $18 - .byte $fc - .byte $30 - .byte $c6 - .byte $d8 - .byte $7e - .byte $78 - .byte $78 - .byte $7e - .byte $cc - .byte $cc - .byte $00 - .byte $00 - .byte $78 - .byte $00 - .byte $00 - .byte $cc - .byte $cf - .byte $18 - .byte $00 - .byte $00 - .byte $22 - .byte $55 - .byte $db - .byte $18 - .byte $18 - .byte $18 - .byte $36 - .byte $36 - .byte $18 - .byte $36 - .byte $36 - .byte $36 - .byte $00 - .byte $00 - .byte $00 - .byte $18 - .byte $00 - .byte $00 - .byte $18 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $36 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $00 - .byte $18 - .byte $36 - .byte $00 - .byte $00 - .byte $18 - .byte $36 - .byte $36 - .byte $18 - .byte $00 - .byte $18 - .byte $ff - .byte $ff - .byte $f0 - .byte $0f - .byte $00 - .byte $76 - .byte $c0 - .byte $c0 - .byte $6c - .byte $fc - .byte $70 - .byte $60 - .byte $18 - .byte $30 - .byte $38 - .byte $ee - .byte $78 - .byte $00 - .byte $60 - .byte $38 - .byte $cc - .byte $00 - .byte $fc - .byte $fc - .byte $fc - .byte $18 - .byte $d8 - .byte $30 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $3c - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $99 - .byte $e7 - .byte $38 - .byte $38 - .byte $7c - .byte $7c - .byte $18 - .byte $e7 - .byte $66 - .byte $99 - .byte $cc - .byte $18 - .byte $70 - .byte $67 - .byte $3c - .byte $e0 - .byte $0e - .byte $7e - .byte $00 - .byte $1b - .byte $38 - .byte $7e - .byte $3c - .byte $18 - .byte $3c - .byte $18 - .byte $30 - .byte $fe - .byte $24 - .byte $ff - .byte $18 - .byte $00 - .byte $00 - .byte $00 - .byte $6c - .byte $f8 - .byte $66 - .byte $cc - .byte $00 - .byte $30 - .byte $30 - .byte $66 - .byte $30 - .byte $30 - .byte $00 - .byte $30 - .byte $c0 - .byte $e6 - .byte $30 - .byte $cc - .byte $cc - .byte $0c - .byte $cc - .byte $cc - .byte $30 - .byte $cc - .byte $18 - .byte $30 - .byte $30 - .byte $30 - .byte $fc - .byte $30 - .byte $00 - .byte $c0 - .byte $cc - .byte $66 - .byte $66 - .byte $6c - .byte $62 - .byte $60 - .byte $66 - .byte $cc - .byte $30 - .byte $cc - .byte $66 - .byte $66 - .byte $c6 - .byte $c6 - .byte $6c - .byte $60 - .byte $78 - .byte $66 - .byte $cc - .byte $30 - .byte $cc - .byte $78 - .byte $ee - .byte $6c - .byte $30 - .byte $66 - .byte $60 - .byte $06 - .byte $18 - .byte $00 - .byte $00 - .byte $00 - .byte $cc - .byte $66 - .byte $cc - .byte $cc - .byte $c0 - .byte $60 - .byte $7c - .byte $66 - .byte $30 - .byte $cc - .byte $6c - .byte $30 - .byte $d6 - .byte $cc - .byte $cc - .byte $7c - .byte $7c - .byte $60 - .byte $0c - .byte $34 - .byte $cc - .byte $78 - .byte $fe - .byte $6c - .byte $7c - .byte $64 - .byte $30 - .byte $18 - .byte $30 - .byte $00 - .byte $c6 - .byte $18 - .byte $cc - .byte $c0 - .byte $66 - .byte $cc - .byte $cc - .byte $cc - .byte $78 - .byte $60 - .byte $c0 - .byte $c0 - .byte $30 - .byte $18 - .byte $30 - .byte $c6 - .byte $fc - .byte $60 - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $7c - .byte $3c - .byte $cc - .byte $7e - .byte $e6 - .byte $fc - .byte $cf - .byte $18 - .byte $cc - .byte $30 - .byte $cc - .byte $cc - .byte $cc - .byte $dc - .byte $7e - .byte $7c - .byte $cc - .byte $c0 - .byte $0c - .byte $66 - .byte $6f - .byte $18 - .byte $33 - .byte $cc - .byte $88 - .byte $aa - .byte $77 - .byte $18 - .byte $18 - .byte $18 - .byte $36 - .byte $36 - .byte $18 - .byte $36 - .byte $36 - .byte $36 - .byte $00 - .byte $00 - .byte $00 - .byte $18 - .byte $00 - .byte $00 - .byte $18 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $36 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $00 - .byte $18 - .byte $36 - .byte $00 - .byte $00 - .byte $18 - .byte $36 - .byte $36 - .byte $18 - .byte $00 - .byte $18 - .byte $ff - .byte $ff - .byte $f0 - .byte $0f - .byte $00 - .byte $dc - .byte $f8 - .byte $c0 - .byte $6c - .byte $cc - .byte $d8 - .byte $7c - .byte $18 - .byte $78 - .byte $6c - .byte $6c - .byte $cc - .byte $7e - .byte $7e - .byte $60 - .byte $cc - .byte $fc - .byte $00 - .byte $00 - .byte $00 - .byte $18 - .byte $d8 - .byte $30 - .byte $dc - .byte $00 - .byte $00 - .byte $00 - .byte $6c - .byte $00 - .byte $00 - .byte $3c - .byte $00 - .byte $00 - .byte $bd - .byte $c3 - .byte $7c - .byte $7c - .byte $fe - .byte $fe - .byte $3c - .byte $c3 - .byte $42 - .byte $bd - .byte $cc - .byte $3c - .byte $30 - .byte $63 - .byte $e7 - .byte $f8 - .byte $3e - .byte $18 - .byte $66 - .byte $1b - .byte $6c - .byte $7e - .byte $7e - .byte $18 - .byte $7e - .byte $0c - .byte $60 - .byte $c0 - .byte $66 - .byte $ff - .byte $3c - .byte $00 - .byte $30 - .byte $00 - .byte $fe - .byte $0c - .byte $30 - .byte $dc - .byte $00 - .byte $60 - .byte $18 - .byte $3c - .byte $30 - .byte $00 - .byte $00 - .byte $00 - .byte $60 - .byte $f6 - .byte $30 - .byte $60 - .byte $0c - .byte $fe - .byte $0c - .byte $cc - .byte $30 - .byte $cc - .byte $0c - .byte $00 - .byte $00 - .byte $60 - .byte $00 - .byte $18 - .byte $30 - .byte $de - .byte $fc - .byte $66 - .byte $c0 - .byte $66 - .byte $68 - .byte $68 - .byte $ce - .byte $cc - .byte $30 - .byte $cc - .byte $6c - .byte $62 - .byte $d6 - .byte $ce - .byte $c6 - .byte $60 - .byte $dc - .byte $6c - .byte $1c - .byte $30 - .byte $cc - .byte $cc - .byte $fe - .byte $38 - .byte $30 - .byte $32 - .byte $60 - .byte $0c - .byte $18 - .byte $00 - .byte $00 - .byte $00 - .byte $7c - .byte $66 - .byte $c0 - .byte $cc - .byte $fc - .byte $60 - .byte $cc - .byte $66 - .byte $30 - .byte $0c - .byte $78 - .byte $30 - .byte $fe - .byte $cc - .byte $cc - .byte $66 - .byte $cc - .byte $66 - .byte $78 - .byte $30 - .byte $cc - .byte $cc - .byte $fe - .byte $38 - .byte $cc - .byte $30 - .byte $30 - .byte $18 - .byte $30 - .byte $00 - .byte $c6 - .byte $78 - .byte $cc - .byte $fc - .byte $3e - .byte $7c - .byte $7c - .byte $7c - .byte $c0 - .byte $7e - .byte $fc - .byte $fc - .byte $30 - .byte $18 - .byte $30 - .byte $fe - .byte $cc - .byte $78 - .byte $7f - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $66 - .byte $cc - .byte $c0 - .byte $60 - .byte $30 - .byte $c6 - .byte $18 - .byte $7c - .byte $30 - .byte $cc - .byte $cc - .byte $cc - .byte $fc - .byte $00 - .byte $00 - .byte $c0 - .byte $c0 - .byte $0c - .byte $33 - .byte $37 - .byte $18 - .byte $66 - .byte $66 - .byte $22 - .byte $55 - .byte $db - .byte $18 - .byte $f8 - .byte $f8 - .byte $f6 - .byte $fe - .byte $f8 - .byte $f6 - .byte $36 - .byte $f6 - .byte $fe - .byte $fe - .byte $f8 - .byte $f8 - .byte $1f - .byte $ff - .byte $ff - .byte $1f - .byte $ff - .byte $ff - .byte $1f - .byte $37 - .byte $3f - .byte $37 - .byte $ff - .byte $f7 - .byte $37 - .byte $ff - .byte $f7 - .byte $ff - .byte $ff - .byte $ff - .byte $ff - .byte $3f - .byte $1f - .byte $1f - .byte $3f - .byte $ff - .byte $ff - .byte $f8 - .byte $1f - .byte $ff - .byte $ff - .byte $f0 - .byte $0f - .byte $00 - .byte $c8 - .byte $cc - .byte $c0 - .byte $6c - .byte $60 - .byte $d8 - .byte $66 - .byte $18 - .byte $cc - .byte $c6 - .byte $6c - .byte $cc - .byte $db - .byte $db - .byte $c0 - .byte $cc - .byte $00 - .byte $30 - .byte $60 - .byte $18 - .byte $18 - .byte $18 - .byte $00 - .byte $76 - .byte $00 - .byte $18 - .byte $18 - .byte $ec - .byte $6c - .byte $78 - .byte $3c - .byte $00 - .byte $00 - .byte $81 - .byte $ff - .byte $fe - .byte $fe - .byte $fe - .byte $7c - .byte $3c - .byte $c3 - .byte $42 - .byte $bd - .byte $7d - .byte $66 - .byte $30 - .byte $63 - .byte $e7 - .byte $fe - .byte $fe - .byte $18 - .byte $66 - .byte $7b - .byte $6c - .byte $00 - .byte $18 - .byte $18 - .byte $18 - .byte $fe - .byte $fe - .byte $c0 - .byte $ff - .byte $7e - .byte $7e - .byte $00 - .byte $30 - .byte $00 - .byte $6c - .byte $78 - .byte $18 - .byte $76 - .byte $00 - .byte $60 - .byte $18 - .byte $ff - .byte $fc - .byte $00 - .byte $fc - .byte $00 - .byte $30 - .byte $de - .byte $30 - .byte $38 - .byte $38 - .byte $cc - .byte $0c - .byte $f8 - .byte $18 - .byte $78 - .byte $7c - .byte $00 - .byte $00 - .byte $c0 - .byte $00 - .byte $0c - .byte $18 - .byte $de - .byte $cc - .byte $7c - .byte $c0 - .byte $66 - .byte $78 - .byte $78 - .byte $c0 - .byte $fc - .byte $30 - .byte $0c - .byte $78 - .byte $60 - .byte $fe - .byte $de - .byte $c6 - .byte $7c - .byte $cc - .byte $7c - .byte $70 - .byte $30 - .byte $cc - .byte $cc - .byte $d6 - .byte $38 - .byte $78 - .byte $18 - .byte $60 - .byte $18 - .byte $18 - .byte $c6 - .byte $00 - .byte $00 - .byte $0c - .byte $7c - .byte $cc - .byte $7c - .byte $cc - .byte $f0 - .byte $cc - .byte $76 - .byte $30 - .byte $0c - .byte $6c - .byte $30 - .byte $fe - .byte $cc - .byte $cc - .byte $66 - .byte $cc - .byte $76 - .byte $c0 - .byte $30 - .byte $cc - .byte $cc - .byte $d6 - .byte $6c - .byte $cc - .byte $98 - .byte $e0 - .byte $00 - .byte $1c - .byte $00 - .byte $6c - .byte $cc - .byte $cc - .byte $cc - .byte $06 - .byte $0c - .byte $0c - .byte $0c - .byte $c0 - .byte $66 - .byte $cc - .byte $cc - .byte $30 - .byte $18 - .byte $30 - .byte $c6 - .byte $78 - .byte $60 - .byte $0c - .byte $fe - .byte $78 - .byte $78 - .byte $78 - .byte $cc - .byte $cc - .byte $cc - .byte $66 - .byte $cc - .byte $c0 - .byte $f0 - .byte $fc - .byte $fa - .byte $3c - .byte $0c - .byte $30 - .byte $78 - .byte $cc - .byte $f8 - .byte $ec - .byte $3e - .byte $38 - .byte $60 - .byte $fc - .byte $fc - .byte $de - .byte $db - .byte $18 - .byte $cc - .byte $33 - .byte $88 - .byte $aa - .byte $ee - .byte $18 - .byte $18 - .byte $18 - .byte $36 - .byte $00 - .byte $18 - .byte $06 - .byte $36 - .byte $06 - .byte $06 - .byte $36 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $00 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $36 - .byte $30 - .byte $30 - .byte $00 - .byte $00 - .byte $30 - .byte $00 - .byte $00 - .byte $00 - .byte $36 - .byte $00 - .byte $00 - .byte $36 - .byte $18 - .byte $18 - .byte $00 - .byte $36 - .byte $18 - .byte $18 - .byte $00 - .byte $ff - .byte $00 - .byte $f0 - .byte $0f - .byte $ff - .byte $dc - .byte $f8 - .byte $c0 - .byte $6c - .byte $30 - .byte $d8 - .byte $66 - .byte $18 - .byte $cc - .byte $fe - .byte $c6 - .byte $7c - .byte $db - .byte $db - .byte $f8 - .byte $cc - .byte $fc - .byte $30 - .byte $30 - .byte $30 - .byte $18 - .byte $18 - .byte $fc - .byte $00 - .byte $38 - .byte $18 - .byte $00 - .byte $0c - .byte $6c - .byte $60 - .byte $3c - .byte $00 - .byte $00 - .byte $a5 - .byte $db - .byte $fe - .byte $7c - .byte $38 - .byte $38 - .byte $18 - .byte $e7 - .byte $66 - .byte $99 - .byte $0f - .byte $66 - .byte $3f - .byte $7f - .byte $3c - .byte $f8 - .byte $3e - .byte $7e - .byte $66 - .byte $db - .byte $38 - .byte $00 - .byte $7e - .byte $7e - .byte $18 - .byte $0c - .byte $60 - .byte $c0 - .byte $66 - .byte $3c - .byte $ff - .byte $00 - .byte $78 - .byte $6c - .byte $fe - .byte $c0 - .byte $cc - .byte $38 - .byte $c0 - .byte $60 - .byte $18 - .byte $3c - .byte $30 - .byte $00 - .byte $00 - .byte $00 - .byte $18 - .byte $ce - .byte $30 - .byte $0c - .byte $0c - .byte $6c - .byte $f8 - .byte $c0 - .byte $0c - .byte $cc - .byte $cc - .byte $30 - .byte $30 - .byte $60 - .byte $fc - .byte $18 - .byte $0c - .byte $de - .byte $cc - .byte $66 - .byte $c0 - .byte $66 - .byte $68 - .byte $68 - .byte $c0 - .byte $cc - .byte $30 - .byte $0c - .byte $6c - .byte $60 - .byte $fe - .byte $f6 - .byte $c6 - .byte $66 - .byte $cc - .byte $66 - .byte $e0 - .byte $30 - .byte $cc - .byte $cc - .byte $c6 - .byte $6c - .byte $cc - .byte $8c - .byte $60 - .byte $30 - .byte $18 - .byte $6c - .byte $00 - .byte $18 - .byte $78 - .byte $60 - .byte $78 - .byte $0c - .byte $78 - .byte $60 - .byte $76 - .byte $6c - .byte $70 - .byte $0c - .byte $66 - .byte $30 - .byte $cc - .byte $f8 - .byte $78 - .byte $dc - .byte $76 - .byte $dc - .byte $7c - .byte $7c - .byte $cc - .byte $cc - .byte $c6 - .byte $c6 - .byte $cc - .byte $fc - .byte $30 - .byte $18 - .byte $30 - .byte $00 - .byte $38 - .byte $c0 - .byte $00 - .byte $78 - .byte $3c - .byte $78 - .byte $78 - .byte $78 - .byte $78 - .byte $3c - .byte $78 - .byte $78 - .byte $70 - .byte $38 - .byte $70 - .byte $6c - .byte $00 - .byte $fc - .byte $7f - .byte $cc - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $3c - .byte $cc - .byte $7e - .byte $64 - .byte $78 - .byte $cc - .byte $18 - .byte $78 - .byte $70 - .byte $00 - .byte $00 - .byte $00 - .byte $cc - .byte $6c - .byte $6c - .byte $30 - .byte $00 - .byte $00 - .byte $cc - .byte $cc - .byte $00 - .byte $66 - .byte $66 - .byte $22 - .byte $55 - .byte $db - .byte $18 - .byte $18 - .byte $f8 - .byte $36 - .byte $00 - .byte $f8 - .byte $f6 - .byte $36 - .byte $fe - .byte $f6 - .byte $36 - .byte $f8 - .byte $00 - .byte $18 - .byte $18 - .byte $00 - .byte $18 - .byte $00 - .byte $18 - .byte $1f - .byte $36 - .byte $37 - .byte $3f - .byte $f7 - .byte $ff - .byte $37 - .byte $ff - .byte $f7 - .byte $ff - .byte $36 - .byte $ff - .byte $00 - .byte $36 - .byte $1f - .byte $1f - .byte $00 - .byte $36 - .byte $ff - .byte $18 - .byte $00 - .byte $ff - .byte $00 - .byte $f0 - .byte $0f - .byte $ff - .byte $76 - .byte $cc - .byte $cc - .byte $6c - .byte $60 - .byte $7e - .byte $66 - .byte $dc - .byte $78 - .byte $c6 - .byte $c6 - .byte $18 - .byte $7e - .byte $7e - .byte $c0 - .byte $cc - .byte $00 - .byte $fc - .byte $18 - .byte $60 - .byte $1b - .byte $18 - .byte $00 - .byte $dc - .byte $6c - .byte $00 - .byte $00 - .byte $0c - .byte $6c - .byte $30 - .byte $3c - .byte $00 - .byte $00 - .byte $81 - .byte $ff - .byte $fe - .byte $38 - .byte $7c - .byte $10 - .byte $00 - .byte $ff - .byte $3c - .byte $c3 - .byte $07 - .byte $66 - .byte $33 - .byte $63 - .byte $5a - .byte $e0 - .byte $0e - .byte $3c - .byte $66 - .byte $db - .byte $63 - .byte $00 - .byte $3c - .byte $3c - .byte $18 - .byte $18 - .byte $30 - .byte $00 - .byte $24 - .byte $18 - .byte $ff - .byte $00 - .byte $78 - .byte $6c - .byte $6c - .byte $7c - .byte $c6 - .byte $6c - .byte $60 - .byte $30 - .byte $30 - .byte $66 - .byte $30 - .byte $00 - .byte $00 - .byte $00 - .byte $0c - .byte $c6 - .byte $70 - .byte $cc - .byte $cc - .byte $3c - .byte $c0 - .byte $60 - .byte $cc - .byte $cc - .byte $cc - .byte $30 - .byte $30 - .byte $30 - .byte $00 - .byte $30 - .byte $cc - .byte $c6 - .byte $78 - .byte $66 - .byte $66 - .byte $6c - .byte $62 - .byte $62 - .byte $66 - .byte $cc - .byte $30 - .byte $0c - .byte $66 - .byte $60 - .byte $ee - .byte $e6 - .byte $6c - .byte $66 - .byte $cc - .byte $66 - .byte $cc - .byte $b4 - .byte $cc - .byte $cc - .byte $c6 - .byte $c6 - .byte $cc - .byte $c6 - .byte $60 - .byte $60 - .byte $18 - .byte $38 - .byte $00 - .byte $30 - .byte $00 - .byte $60 - .byte $00 - .byte $0c - .byte $00 - .byte $6c - .byte $00 - .byte $60 - .byte $00 - .byte $00 - .byte $60 - .byte $30 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $30 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $30 - .byte $18 - .byte $30 - .byte $dc - .byte $10 - .byte $cc - .byte $cc - .byte $00 - .byte $c3 - .byte $00 - .byte $00 - .byte $30 - .byte $00 - .byte $c3 - .byte $00 - .byte $00 - .byte $00 - .byte $c6 - .byte $00 - .byte $38 - .byte $30 - .byte $00 - .byte $00 - .byte $6c - .byte $cc - .byte $cc - .byte $e0 - .byte $cc - .byte $e0 - .byte $cc - .byte $18 - .byte $00 - .byte $18 - .byte $6c - .byte $cc - .byte $cc - .byte $1b - .byte $00 - .byte $00 - .byte $1c - .byte $1c - .byte $f8 - .byte $00 - .byte $6c - .byte $6c - .byte $00 - .byte $00 - .byte $00 - .byte $c6 - .byte $c6 - .byte $18 - .byte $33 - .byte $cc - .byte $88 - .byte $aa - .byte $77 - .byte $18 - .byte $18 - .byte $18 - .byte $36 - .byte $00 - .byte $00 - .byte $36 - .byte $36 - .byte $00 - .byte $36 - .byte $36 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $00 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $36 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $36 - .byte $18 - .byte $36 - .byte $00 - .byte $00 - .byte $36 - .byte $18 - .byte $00 - .byte $00 - .byte $36 - .byte $18 - .byte $18 - .byte $00 - .byte $ff - .byte $00 - .byte $f0 - .byte $0f - .byte $ff - .byte $00 - .byte $78 - .byte $fc - .byte $fe - .byte $cc - .byte $00 - .byte $66 - .byte $76 - .byte $30 - .byte $6c - .byte $6c - .byte $30 - .byte $00 - .byte $0c - .byte $60 - .byte $cc - .byte $fc - .byte $30 - .byte $30 - .byte $30 - .byte $1b - .byte $18 - .byte $30 - .byte $76 - .byte $6c - .byte $00 - .byte $00 - .byte $0c - .byte $6c - .byte $18 - .byte $00 - .byte $00 - .byte $00 - .byte $7e - .byte $7e - .byte $6c - .byte $10 - .byte $38 - .byte $10 - .byte $00 - .byte $ff - .byte $00 - .byte $ff - .byte $0f - .byte $3c - .byte $3f - .byte $7f - .byte $99 - .byte $80 - .byte $02 - .byte $18 - .byte $66 - .byte $7f - .byte $3e - .byte $00 - .byte $18 - .byte $18 - .byte $18 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $30 - .byte $6c - .byte $6c - .byte $30 - .byte $00 - .byte $38 - .byte $60 - .byte $18 - .byte $60 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $06 - .byte $7c - .byte $30 - .byte $78 - .byte $78 - .byte $1c - .byte $fc - .byte $38 - .byte $fc - .byte $78 - .byte $78 - .byte $00 - .byte $00 - .byte $18 - .byte $00 - .byte $60 - .byte $78 - .byte $7c - .byte $30 - .byte $fc - .byte $3c - .byte $f8 - .byte $fe - .byte $fe - .byte $3c - .byte $cc - .byte $78 - .byte $1e - .byte $e6 - .byte $f0 - .byte $c6 - .byte $c6 - .byte $38 - .byte $fc - .byte $78 - .byte $fc - .byte $78 - .byte $fc - .byte $cc - .byte $cc - .byte $c6 - .byte $c6 - .byte $cc - .byte $fe - .byte $78 - .byte $c0 - .byte $78 - .byte $10 - .byte $00 - .byte $30 - .byte $00 - .byte $e0 - .byte $00 - .byte $1c - .byte $00 - .byte $38 - .byte $00 - .byte $e0 - .byte $30 - .byte $0c - .byte $e0 - .byte $70 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $10 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $1c - .byte $18 - .byte $e0 - .byte $76 - .byte $00 - .byte $78 - .byte $00 - .byte $1c - .byte $7e - .byte $cc - .byte $e0 - .byte $30 - .byte $00 - .byte $7e - .byte $cc - .byte $e0 - .byte $cc - .byte $7c - .byte $e0 - .byte $c6 - .byte $30 - .byte $1c - .byte $00 - .byte $3e - .byte $78 - .byte $00 - .byte $00 - .byte $78 - .byte $00 - .byte $00 - .byte $c3 - .byte $cc - .byte $18 - .byte $38 - .byte $cc - .byte $f8 - .byte $0e - .byte $1c - .byte $38 - .byte $00 - .byte $00 - .byte $00 - .byte $fc - .byte $3c - .byte $38 - .byte $30 - .byte $00 - .byte $00 - .byte $c3 - .byte $c3 - .byte $18 - .byte $00 - .byte $00 - .byte $22 - .byte $55 - .byte $db - .byte $18 - .byte $18 - .byte $18 - .byte $36 - .byte $00 - .byte $00 - .byte $36 - .byte $36 - .byte $00 - .byte $36 - .byte $36 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $00 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $36 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $36 - .byte $18 - .byte $36 - .byte $00 - .byte $00 - .byte $36 - .byte $18 - .byte $00 - .byte $00 - .byte $36 - .byte $18 - .byte $18 - .byte $00 - .byte $ff - .byte $00 - .byte $f0 - .byte $0f - .byte $ff - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $fc - .byte $00 - .byte $00 - .byte $00 - .byte $fc - .byte $38 - .byte $38 - .byte $1c - .byte $00 - .byte $06 - .byte $38 - .byte $78 - .byte $00 - .byte $30 - .byte $60 - .byte $18 - .byte $0e - .byte $18 - .byte $30 - .byte $00 - .byte $38 - .byte $00 - .byte $00 - .byte $0f - .byte $78 - .byte $70 - .byte $00 - .byte $00 + .byte $00 + .byte $7e + .byte $7e + .byte $00 + .byte $00 + .byte $7c + .byte $7c + .byte $00 + .byte $ff + .byte $00 + .byte $ff + .byte $78 + .byte $18 + .byte $e0 + .byte $c0 + .byte $99 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $ff + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $60 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $60 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $ff + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f8 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f0 + .byte $1e + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f8 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $38 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f8 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $30 + .byte $c7 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $0f + .byte $03 + .byte $00 + .byte $00 + .byte $00 + .byte $88 + .byte $aa + .byte $ee + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $36 + .byte $36 + .byte $36 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $fc + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $1c + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $81 + .byte $ff + .byte $10 + .byte $10 + .byte $38 + .byte $38 + .byte $00 + .byte $ff + .byte $3c + .byte $c3 + .byte $cc + .byte $7e + .byte $f0 + .byte $e6 + .byte $5a + .byte $80 + .byte $02 + .byte $3c + .byte $66 + .byte $1b + .byte $cc + .byte $7e + .byte $18 + .byte $18 + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $6c + .byte $30 + .byte $c6 + .byte $76 + .byte $00 + .byte $18 + .byte $60 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $30 + .byte $80 + .byte $7c + .byte $fc + .byte $fc + .byte $78 + .byte $1e + .byte $78 + .byte $78 + .byte $30 + .byte $78 + .byte $70 + .byte $30 + .byte $30 + .byte $18 + .byte $00 + .byte $60 + .byte $30 + .byte $78 + .byte $cc + .byte $fc + .byte $3c + .byte $f8 + .byte $fe + .byte $f0 + .byte $3e + .byte $cc + .byte $78 + .byte $78 + .byte $e6 + .byte $fe + .byte $c6 + .byte $c6 + .byte $38 + .byte $f0 + .byte $1c + .byte $e6 + .byte $78 + .byte $78 + .byte $fc + .byte $30 + .byte $c6 + .byte $c6 + .byte $78 + .byte $fe + .byte $78 + .byte $02 + .byte $78 + .byte $00 + .byte $00 + .byte $00 + .byte $76 + .byte $dc + .byte $78 + .byte $76 + .byte $78 + .byte $f0 + .byte $0c + .byte $e6 + .byte $78 + .byte $cc + .byte $e6 + .byte $78 + .byte $c6 + .byte $cc + .byte $78 + .byte $60 + .byte $0c + .byte $f0 + .byte $f8 + .byte $18 + .byte $76 + .byte $30 + .byte $6c + .byte $c6 + .byte $0c + .byte $fc + .byte $1c + .byte $18 + .byte $e0 + .byte $00 + .byte $fe + .byte $0c + .byte $7e + .byte $78 + .byte $3f + .byte $7e + .byte $7e + .byte $7e + .byte $0c + .byte $3c + .byte $78 + .byte $78 + .byte $78 + .byte $3c + .byte $78 + .byte $c6 + .byte $cc + .byte $fc + .byte $7f + .byte $ce + .byte $78 + .byte $78 + .byte $78 + .byte $7e + .byte $7e + .byte $0c + .byte $18 + .byte $78 + .byte $18 + .byte $fc + .byte $30 + .byte $c6 + .byte $d8 + .byte $7e + .byte $78 + .byte $78 + .byte $7e + .byte $cc + .byte $cc + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $cc + .byte $cf + .byte $18 + .byte $00 + .byte $00 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $36 + .byte $36 + .byte $36 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $76 + .byte $c0 + .byte $c0 + .byte $6c + .byte $fc + .byte $70 + .byte $60 + .byte $18 + .byte $30 + .byte $38 + .byte $ee + .byte $78 + .byte $00 + .byte $60 + .byte $38 + .byte $cc + .byte $00 + .byte $fc + .byte $fc + .byte $fc + .byte $18 + .byte $d8 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $3c + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $99 + .byte $e7 + .byte $38 + .byte $38 + .byte $7c + .byte $7c + .byte $18 + .byte $e7 + .byte $66 + .byte $99 + .byte $cc + .byte $18 + .byte $70 + .byte $67 + .byte $3c + .byte $e0 + .byte $0e + .byte $7e + .byte $00 + .byte $1b + .byte $38 + .byte $7e + .byte $3c + .byte $18 + .byte $3c + .byte $18 + .byte $30 + .byte $fe + .byte $24 + .byte $ff + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $6c + .byte $f8 + .byte $66 + .byte $cc + .byte $00 + .byte $30 + .byte $30 + .byte $66 + .byte $30 + .byte $30 + .byte $00 + .byte $30 + .byte $c0 + .byte $e6 + .byte $30 + .byte $cc + .byte $cc + .byte $0c + .byte $cc + .byte $cc + .byte $30 + .byte $cc + .byte $18 + .byte $30 + .byte $30 + .byte $30 + .byte $fc + .byte $30 + .byte $00 + .byte $c0 + .byte $cc + .byte $66 + .byte $66 + .byte $6c + .byte $62 + .byte $60 + .byte $66 + .byte $cc + .byte $30 + .byte $cc + .byte $66 + .byte $66 + .byte $c6 + .byte $c6 + .byte $6c + .byte $60 + .byte $78 + .byte $66 + .byte $cc + .byte $30 + .byte $cc + .byte $78 + .byte $ee + .byte $6c + .byte $30 + .byte $66 + .byte $60 + .byte $06 + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $cc + .byte $66 + .byte $cc + .byte $cc + .byte $c0 + .byte $60 + .byte $7c + .byte $66 + .byte $30 + .byte $cc + .byte $6c + .byte $30 + .byte $d6 + .byte $cc + .byte $cc + .byte $7c + .byte $7c + .byte $60 + .byte $0c + .byte $34 + .byte $cc + .byte $78 + .byte $fe + .byte $6c + .byte $7c + .byte $64 + .byte $30 + .byte $18 + .byte $30 + .byte $00 + .byte $c6 + .byte $18 + .byte $cc + .byte $c0 + .byte $66 + .byte $cc + .byte $cc + .byte $cc + .byte $78 + .byte $60 + .byte $c0 + .byte $c0 + .byte $30 + .byte $18 + .byte $30 + .byte $c6 + .byte $fc + .byte $60 + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $7c + .byte $3c + .byte $cc + .byte $7e + .byte $e6 + .byte $fc + .byte $cf + .byte $18 + .byte $cc + .byte $30 + .byte $cc + .byte $cc + .byte $cc + .byte $dc + .byte $7e + .byte $7c + .byte $cc + .byte $c0 + .byte $0c + .byte $66 + .byte $6f + .byte $18 + .byte $33 + .byte $cc + .byte $88 + .byte $aa + .byte $77 + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $36 + .byte $36 + .byte $36 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $dc + .byte $f8 + .byte $c0 + .byte $6c + .byte $cc + .byte $d8 + .byte $7c + .byte $18 + .byte $78 + .byte $6c + .byte $6c + .byte $cc + .byte $7e + .byte $7e + .byte $60 + .byte $cc + .byte $fc + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $d8 + .byte $30 + .byte $dc + .byte $00 + .byte $00 + .byte $00 + .byte $6c + .byte $00 + .byte $00 + .byte $3c + .byte $00 + .byte $00 + .byte $bd + .byte $c3 + .byte $7c + .byte $7c + .byte $fe + .byte $fe + .byte $3c + .byte $c3 + .byte $42 + .byte $bd + .byte $cc + .byte $3c + .byte $30 + .byte $63 + .byte $e7 + .byte $f8 + .byte $3e + .byte $18 + .byte $66 + .byte $1b + .byte $6c + .byte $7e + .byte $7e + .byte $18 + .byte $7e + .byte $0c + .byte $60 + .byte $c0 + .byte $66 + .byte $ff + .byte $3c + .byte $00 + .byte $30 + .byte $00 + .byte $fe + .byte $0c + .byte $30 + .byte $dc + .byte $00 + .byte $60 + .byte $18 + .byte $3c + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $60 + .byte $f6 + .byte $30 + .byte $60 + .byte $0c + .byte $fe + .byte $0c + .byte $cc + .byte $30 + .byte $cc + .byte $0c + .byte $00 + .byte $00 + .byte $60 + .byte $00 + .byte $18 + .byte $30 + .byte $de + .byte $fc + .byte $66 + .byte $c0 + .byte $66 + .byte $68 + .byte $68 + .byte $ce + .byte $cc + .byte $30 + .byte $cc + .byte $6c + .byte $62 + .byte $d6 + .byte $ce + .byte $c6 + .byte $60 + .byte $dc + .byte $6c + .byte $1c + .byte $30 + .byte $cc + .byte $cc + .byte $fe + .byte $38 + .byte $30 + .byte $32 + .byte $60 + .byte $0c + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $7c + .byte $66 + .byte $c0 + .byte $cc + .byte $fc + .byte $60 + .byte $cc + .byte $66 + .byte $30 + .byte $0c + .byte $78 + .byte $30 + .byte $fe + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $66 + .byte $78 + .byte $30 + .byte $cc + .byte $cc + .byte $fe + .byte $38 + .byte $cc + .byte $30 + .byte $30 + .byte $18 + .byte $30 + .byte $00 + .byte $c6 + .byte $78 + .byte $cc + .byte $fc + .byte $3e + .byte $7c + .byte $7c + .byte $7c + .byte $c0 + .byte $7e + .byte $fc + .byte $fc + .byte $30 + .byte $18 + .byte $30 + .byte $fe + .byte $cc + .byte $78 + .byte $7f + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $c0 + .byte $60 + .byte $30 + .byte $c6 + .byte $18 + .byte $7c + .byte $30 + .byte $cc + .byte $cc + .byte $cc + .byte $fc + .byte $00 + .byte $00 + .byte $c0 + .byte $c0 + .byte $0c + .byte $33 + .byte $37 + .byte $18 + .byte $66 + .byte $66 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $f8 + .byte $f8 + .byte $f6 + .byte $fe + .byte $f8 + .byte $f6 + .byte $36 + .byte $f6 + .byte $fe + .byte $fe + .byte $f8 + .byte $f8 + .byte $1f + .byte $ff + .byte $ff + .byte $1f + .byte $ff + .byte $ff + .byte $1f + .byte $37 + .byte $3f + .byte $37 + .byte $ff + .byte $f7 + .byte $37 + .byte $ff + .byte $f7 + .byte $ff + .byte $ff + .byte $ff + .byte $ff + .byte $3f + .byte $1f + .byte $1f + .byte $3f + .byte $ff + .byte $ff + .byte $f8 + .byte $1f + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $c8 + .byte $cc + .byte $c0 + .byte $6c + .byte $60 + .byte $d8 + .byte $66 + .byte $18 + .byte $cc + .byte $c6 + .byte $6c + .byte $cc + .byte $db + .byte $db + .byte $c0 + .byte $cc + .byte $00 + .byte $30 + .byte $60 + .byte $18 + .byte $18 + .byte $18 + .byte $00 + .byte $76 + .byte $00 + .byte $18 + .byte $18 + .byte $ec + .byte $6c + .byte $78 + .byte $3c + .byte $00 + .byte $00 + .byte $81 + .byte $ff + .byte $fe + .byte $fe + .byte $fe + .byte $7c + .byte $3c + .byte $c3 + .byte $42 + .byte $bd + .byte $7d + .byte $66 + .byte $30 + .byte $63 + .byte $e7 + .byte $fe + .byte $fe + .byte $18 + .byte $66 + .byte $7b + .byte $6c + .byte $00 + .byte $18 + .byte $18 + .byte $18 + .byte $fe + .byte $fe + .byte $c0 + .byte $ff + .byte $7e + .byte $7e + .byte $00 + .byte $30 + .byte $00 + .byte $6c + .byte $78 + .byte $18 + .byte $76 + .byte $00 + .byte $60 + .byte $18 + .byte $ff + .byte $fc + .byte $00 + .byte $fc + .byte $00 + .byte $30 + .byte $de + .byte $30 + .byte $38 + .byte $38 + .byte $cc + .byte $0c + .byte $f8 + .byte $18 + .byte $78 + .byte $7c + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $0c + .byte $18 + .byte $de + .byte $cc + .byte $7c + .byte $c0 + .byte $66 + .byte $78 + .byte $78 + .byte $c0 + .byte $fc + .byte $30 + .byte $0c + .byte $78 + .byte $60 + .byte $fe + .byte $de + .byte $c6 + .byte $7c + .byte $cc + .byte $7c + .byte $70 + .byte $30 + .byte $cc + .byte $cc + .byte $d6 + .byte $38 + .byte $78 + .byte $18 + .byte $60 + .byte $18 + .byte $18 + .byte $c6 + .byte $00 + .byte $00 + .byte $0c + .byte $7c + .byte $cc + .byte $7c + .byte $cc + .byte $f0 + .byte $cc + .byte $76 + .byte $30 + .byte $0c + .byte $6c + .byte $30 + .byte $fe + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $76 + .byte $c0 + .byte $30 + .byte $cc + .byte $cc + .byte $d6 + .byte $6c + .byte $cc + .byte $98 + .byte $e0 + .byte $00 + .byte $1c + .byte $00 + .byte $6c + .byte $cc + .byte $cc + .byte $cc + .byte $06 + .byte $0c + .byte $0c + .byte $0c + .byte $c0 + .byte $66 + .byte $cc + .byte $cc + .byte $30 + .byte $18 + .byte $30 + .byte $c6 + .byte $78 + .byte $60 + .byte $0c + .byte $fe + .byte $78 + .byte $78 + .byte $78 + .byte $cc + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $c0 + .byte $f0 + .byte $fc + .byte $fa + .byte $3c + .byte $0c + .byte $30 + .byte $78 + .byte $cc + .byte $f8 + .byte $ec + .byte $3e + .byte $38 + .byte $60 + .byte $fc + .byte $fc + .byte $de + .byte $db + .byte $18 + .byte $cc + .byte $33 + .byte $88 + .byte $aa + .byte $ee + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $18 + .byte $06 + .byte $36 + .byte $06 + .byte $06 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $30 + .byte $30 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $dc + .byte $f8 + .byte $c0 + .byte $6c + .byte $30 + .byte $d8 + .byte $66 + .byte $18 + .byte $cc + .byte $fe + .byte $c6 + .byte $7c + .byte $db + .byte $db + .byte $f8 + .byte $cc + .byte $fc + .byte $30 + .byte $30 + .byte $30 + .byte $18 + .byte $18 + .byte $fc + .byte $00 + .byte $38 + .byte $18 + .byte $00 + .byte $0c + .byte $6c + .byte $60 + .byte $3c + .byte $00 + .byte $00 + .byte $a5 + .byte $db + .byte $fe + .byte $7c + .byte $38 + .byte $38 + .byte $18 + .byte $e7 + .byte $66 + .byte $99 + .byte $0f + .byte $66 + .byte $3f + .byte $7f + .byte $3c + .byte $f8 + .byte $3e + .byte $7e + .byte $66 + .byte $db + .byte $38 + .byte $00 + .byte $7e + .byte $7e + .byte $18 + .byte $0c + .byte $60 + .byte $c0 + .byte $66 + .byte $3c + .byte $ff + .byte $00 + .byte $78 + .byte $6c + .byte $fe + .byte $c0 + .byte $cc + .byte $38 + .byte $c0 + .byte $60 + .byte $18 + .byte $3c + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $ce + .byte $30 + .byte $0c + .byte $0c + .byte $6c + .byte $f8 + .byte $c0 + .byte $0c + .byte $cc + .byte $cc + .byte $30 + .byte $30 + .byte $60 + .byte $fc + .byte $18 + .byte $0c + .byte $de + .byte $cc + .byte $66 + .byte $c0 + .byte $66 + .byte $68 + .byte $68 + .byte $c0 + .byte $cc + .byte $30 + .byte $0c + .byte $6c + .byte $60 + .byte $fe + .byte $f6 + .byte $c6 + .byte $66 + .byte $cc + .byte $66 + .byte $e0 + .byte $30 + .byte $cc + .byte $cc + .byte $c6 + .byte $6c + .byte $cc + .byte $8c + .byte $60 + .byte $30 + .byte $18 + .byte $6c + .byte $00 + .byte $18 + .byte $78 + .byte $60 + .byte $78 + .byte $0c + .byte $78 + .byte $60 + .byte $76 + .byte $6c + .byte $70 + .byte $0c + .byte $66 + .byte $30 + .byte $cc + .byte $f8 + .byte $78 + .byte $dc + .byte $76 + .byte $dc + .byte $7c + .byte $7c + .byte $cc + .byte $cc + .byte $c6 + .byte $c6 + .byte $cc + .byte $fc + .byte $30 + .byte $18 + .byte $30 + .byte $00 + .byte $38 + .byte $c0 + .byte $00 + .byte $78 + .byte $3c + .byte $78 + .byte $78 + .byte $78 + .byte $78 + .byte $3c + .byte $78 + .byte $78 + .byte $70 + .byte $38 + .byte $70 + .byte $6c + .byte $00 + .byte $fc + .byte $7f + .byte $cc + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $3c + .byte $cc + .byte $7e + .byte $64 + .byte $78 + .byte $cc + .byte $18 + .byte $78 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $cc + .byte $6c + .byte $6c + .byte $30 + .byte $00 + .byte $00 + .byte $cc + .byte $cc + .byte $00 + .byte $66 + .byte $66 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $18 + .byte $f8 + .byte $36 + .byte $00 + .byte $f8 + .byte $f6 + .byte $36 + .byte $fe + .byte $f6 + .byte $36 + .byte $f8 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $1f + .byte $36 + .byte $37 + .byte $3f + .byte $f7 + .byte $ff + .byte $37 + .byte $ff + .byte $f7 + .byte $ff + .byte $36 + .byte $ff + .byte $00 + .byte $36 + .byte $1f + .byte $1f + .byte $00 + .byte $36 + .byte $ff + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $76 + .byte $cc + .byte $cc + .byte $6c + .byte $60 + .byte $7e + .byte $66 + .byte $dc + .byte $78 + .byte $c6 + .byte $c6 + .byte $18 + .byte $7e + .byte $7e + .byte $c0 + .byte $cc + .byte $00 + .byte $fc + .byte $18 + .byte $60 + .byte $1b + .byte $18 + .byte $00 + .byte $dc + .byte $6c + .byte $00 + .byte $00 + .byte $0c + .byte $6c + .byte $30 + .byte $3c + .byte $00 + .byte $00 + .byte $81 + .byte $ff + .byte $fe + .byte $38 + .byte $7c + .byte $10 + .byte $00 + .byte $ff + .byte $3c + .byte $c3 + .byte $07 + .byte $66 + .byte $33 + .byte $63 + .byte $5a + .byte $e0 + .byte $0e + .byte $3c + .byte $66 + .byte $db + .byte $63 + .byte $00 + .byte $3c + .byte $3c + .byte $18 + .byte $18 + .byte $30 + .byte $00 + .byte $24 + .byte $18 + .byte $ff + .byte $00 + .byte $78 + .byte $6c + .byte $6c + .byte $7c + .byte $c6 + .byte $6c + .byte $60 + .byte $30 + .byte $30 + .byte $66 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $0c + .byte $c6 + .byte $70 + .byte $cc + .byte $cc + .byte $3c + .byte $c0 + .byte $60 + .byte $cc + .byte $cc + .byte $cc + .byte $30 + .byte $30 + .byte $30 + .byte $00 + .byte $30 + .byte $cc + .byte $c6 + .byte $78 + .byte $66 + .byte $66 + .byte $6c + .byte $62 + .byte $62 + .byte $66 + .byte $cc + .byte $30 + .byte $0c + .byte $66 + .byte $60 + .byte $ee + .byte $e6 + .byte $6c + .byte $66 + .byte $cc + .byte $66 + .byte $cc + .byte $b4 + .byte $cc + .byte $cc + .byte $c6 + .byte $c6 + .byte $cc + .byte $c6 + .byte $60 + .byte $60 + .byte $18 + .byte $38 + .byte $00 + .byte $30 + .byte $00 + .byte $60 + .byte $00 + .byte $0c + .byte $00 + .byte $6c + .byte $00 + .byte $60 + .byte $00 + .byte $00 + .byte $60 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $18 + .byte $30 + .byte $dc + .byte $10 + .byte $cc + .byte $cc + .byte $00 + .byte $c3 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $c3 + .byte $00 + .byte $00 + .byte $00 + .byte $c6 + .byte $00 + .byte $38 + .byte $30 + .byte $00 + .byte $00 + .byte $6c + .byte $cc + .byte $cc + .byte $e0 + .byte $cc + .byte $e0 + .byte $cc + .byte $18 + .byte $00 + .byte $18 + .byte $6c + .byte $cc + .byte $cc + .byte $1b + .byte $00 + .byte $00 + .byte $1c + .byte $1c + .byte $f8 + .byte $00 + .byte $6c + .byte $6c + .byte $00 + .byte $00 + .byte $00 + .byte $c6 + .byte $c6 + .byte $18 + .byte $33 + .byte $cc + .byte $88 + .byte $aa + .byte $77 + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $00 + .byte $78 + .byte $fc + .byte $fe + .byte $cc + .byte $00 + .byte $66 + .byte $76 + .byte $30 + .byte $6c + .byte $6c + .byte $30 + .byte $00 + .byte $0c + .byte $60 + .byte $cc + .byte $fc + .byte $30 + .byte $30 + .byte $30 + .byte $1b + .byte $18 + .byte $30 + .byte $76 + .byte $6c + .byte $00 + .byte $00 + .byte $0c + .byte $6c + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $7e + .byte $7e + .byte $6c + .byte $10 + .byte $38 + .byte $10 + .byte $00 + .byte $ff + .byte $00 + .byte $ff + .byte $0f + .byte $3c + .byte $3f + .byte $7f + .byte $99 + .byte $80 + .byte $02 + .byte $18 + .byte $66 + .byte $7f + .byte $3e + .byte $00 + .byte $18 + .byte $18 + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $6c + .byte $6c + .byte $30 + .byte $00 + .byte $38 + .byte $60 + .byte $18 + .byte $60 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $06 + .byte $7c + .byte $30 + .byte $78 + .byte $78 + .byte $1c + .byte $fc + .byte $38 + .byte $fc + .byte $78 + .byte $78 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $60 + .byte $78 + .byte $7c + .byte $30 + .byte $fc + .byte $3c + .byte $f8 + .byte $fe + .byte $fe + .byte $3c + .byte $cc + .byte $78 + .byte $1e + .byte $e6 + .byte $f0 + .byte $c6 + .byte $c6 + .byte $38 + .byte $fc + .byte $78 + .byte $fc + .byte $78 + .byte $fc + .byte $cc + .byte $cc + .byte $c6 + .byte $c6 + .byte $cc + .byte $fe + .byte $78 + .byte $c0 + .byte $78 + .byte $10 + .byte $00 + .byte $30 + .byte $00 + .byte $e0 + .byte $00 + .byte $1c + .byte $00 + .byte $38 + .byte $00 + .byte $e0 + .byte $30 + .byte $0c + .byte $e0 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $10 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $1c + .byte $18 + .byte $e0 + .byte $76 + .byte $00 + .byte $78 + .byte $00 + .byte $1c + .byte $7e + .byte $cc + .byte $e0 + .byte $30 + .byte $00 + .byte $7e + .byte $cc + .byte $e0 + .byte $cc + .byte $7c + .byte $e0 + .byte $c6 + .byte $30 + .byte $1c + .byte $00 + .byte $3e + .byte $78 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $c3 + .byte $cc + .byte $18 + .byte $38 + .byte $cc + .byte $f8 + .byte $0e + .byte $1c + .byte $38 + .byte $00 + .byte $00 + .byte $00 + .byte $fc + .byte $3c + .byte $38 + .byte $30 + .byte $00 + .byte $00 + .byte $c3 + .byte $c3 + .byte $18 + .byte $00 + .byte $00 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $fc + .byte $00 + .byte $00 + .byte $00 + .byte $fc + .byte $38 + .byte $38 + .byte $1c + .byte $00 + .byte $06 + .byte $38 + .byte $78 + .byte $00 + .byte $30 + .byte $60 + .byte $18 + .byte $0e + .byte $18 + .byte $30 + .byte $00 + .byte $38 + .byte $00 + .byte $00 + .byte $0f + .byte $78 + .byte $70 + .byte $00 + .byte $00 diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s index c75ff16f3..060f45cde 100644 --- a/libsrc/atari7800/mono_setcursor.s +++ b/libsrc/atari7800/mono_setcursor.s @@ -27,31 +27,31 @@ .constructor mono_init_cursor .interruptor mono_blink_cursor - .importzp sp - .import _mono_zones - .import cursor - .import pusha, incsp1, pusha0, pushax, popa + .importzp sp + .import _mono_zones + .import cursor + .import pusha, incsp1, pusha0, pushax, popa .include "atari7800.inc" .include "extzp.inc" .macpack generic - .data + .data ;----------------------------------------------------------------------------- ; The variables used by cursor functions ; blink_time: - .byte 140 + .byte 140 - .code + .code ;--------------------------------------------------------------------------- ; 8x16 routine umula0: ldy #8 ; Number of bits - lda #0 + lda #0 lsr ptr7800 ; Get first bit into carry @L0: bcc @L1 @@ -81,25 +81,25 @@ umula0: ; A = CURS_Y .proc calccursorzone - sta ptr7800 - lda #16 - sta ptrtmp - lda #0 - sta ptr7800+1 - sta ptrtmp+1 - jsr umula0 - clc - adc #10 - bcc @L1 - inx -@L1: clc - adc #<_mono_zones - sta cursorzone ; calculate new cursorzone - txa - clc - adc #>_mono_zones - sta cursorzone+1 - rts + sta ptr7800 + lda #16 + sta ptrtmp + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + jsr umula0 + clc + adc #10 + bcc @L1 + inx +@L1: clc + adc #<_mono_zones + sta cursorzone ; calculate new cursorzone + txa + clc + adc #>_mono_zones + sta cursorzone+1 + rts .endproc @@ -120,21 +120,21 @@ umula0: ; .proc _mono_gotoy - pha - lda CURS_Y - jsr calccursorzone - ldy #1 - lda #0 - sta (cursorzone),y ; disable cursor - pla - sta CURS_Y - jsr calccursorzone - lda cursor - beq @L1 - lda #31 ; enable cursor -@L1: ldy #1 - sta (cursorzone),y - rts + pha + lda CURS_Y + jsr calccursorzone + ldy #1 + lda #0 + sta (cursorzone),y ; disable cursor + pla + sta CURS_Y + jsr calccursorzone + lda cursor + beq @L1 + lda #31 ; enable cursor +@L1: ldy #1 + sta (cursorzone),y + rts .endproc @@ -145,51 +145,51 @@ umula0: ; .proc _mono_gotox - sta CURS_X - ldy #3 - clc - rol - rol - sta (cursorzone),y - rts + sta CURS_X + ldy #3 + clc + rol + rol + sta (cursorzone),y + rts .endproc ;----------------------------------------------------------------------------- ; Set cursor to desired position (X,Y) ; - .proc _mono_gotoxy + .proc _mono_gotoxy - jsr _mono_gotoy - jsr popa - jsr _mono_gotox - rts - .endproc + jsr _mono_gotoy + jsr popa + jsr _mono_gotox + rts + .endproc - .proc mono_gotoxy - jsr popa - jmp _mono_gotoxy - .endproc + .proc mono_gotoxy + jsr popa + jmp _mono_gotoxy + .endproc ;----------------------------------------------------------------------------- ; Initialize cursorzone at startup ; Offset to cursor zone 5. ; - .proc mono_blink_cursor - inc blink_time - bne @L3 - lda #140 - sta blink_time - ldy #0 - lda (cursorzone),y - cmp #32 - bne @L1 - lda #95 - bne @L2 -@L1: lda #32 -@L2: sta (cursorzone),y -@L3: rts - .endproc + .proc mono_blink_cursor + inc blink_time + bne @L3 + lda #140 + sta blink_time + ldy #0 + lda (cursorzone),y + cmp #32 + bne @L1 + lda #95 + bne @L2 +@L1: lda #32 +@L2: sta (cursorzone),y +@L3: rts + .endproc ;----------------------------------------------------------------------------- ; Initialize cursorzone at startup @@ -197,9 +197,9 @@ umula0: ; .segment "ONCE" mono_init_cursor: - lda #0 - jsr calccursorzone - rts + lda #0 + jsr calccursorzone + rts ;----------------------------------------------------------------------------- ; force the init constructor to be imported From b195c10a4ccf7b4cfb7182974c28488bab80937c Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 12:09:19 +0300 Subject: [PATCH 1229/2710] Fix tabs --- libsrc/atari7800/clrscr.s | 4 ++-- libsrc/atari7800/conio.s | 4 ++-- libsrc/atari7800/extzp.s | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s index 9d063fad6..7ce690af4 100644 --- a/libsrc/atari7800/clrscr.s +++ b/libsrc/atari7800/clrscr.s @@ -11,8 +11,8 @@ .proc _clrscr - lda #<_screen - ldx #>_screen + lda #<_screen + ldx #>_screen sta ptr7800 stx ptr7800+1 ldx #screenrows diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index 5b60f39fe..1240c2e5d 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -212,8 +212,8 @@ vblankoff: sta CTRL lda #$00 ; Black background sta BKGRND - sta CURS_X - sta CURS_Y + sta CURS_X + sta CURS_Y lda #$33 ; Red sta P0C1 lda #$c8 ; Green diff --git a/libsrc/atari7800/extzp.s b/libsrc/atari7800/extzp.s index a79ede01a..8e8b73459 100644 --- a/libsrc/atari7800/extzp.s +++ b/libsrc/atari7800/extzp.s @@ -11,5 +11,5 @@ ptr7800: .res 2 ptrtmp: .res 2 cursorzone: .res 2 -CURS_X: .res 1 -CURS_Y: .res 1 +CURS_X: .res 1 +CURS_Y: .res 1 From 53337f81712ef8088d00817621e4cba476834b0e Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 12:12:30 +0300 Subject: [PATCH 1230/2710] Fix wrong screen in --- libsrc/atari7800/mono_clrscr.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/atari7800/mono_clrscr.s b/libsrc/atari7800/mono_clrscr.s index cdf12bf4d..c4ab34369 100644 --- a/libsrc/atari7800/mono_clrscr.s +++ b/libsrc/atari7800/mono_clrscr.s @@ -3,7 +3,7 @@ .export _mono_clrscr - .import _screen + .import _momo_screen .import pusha0,pushax .include "extzp.inc" @@ -11,8 +11,8 @@ .proc _mono_clrscr - lda #<_screen - ldx #>_screen + lda #<_momo_screen + ldx #>_momo_screen sta ptr7800 stx ptr7800+1 ldx #screenrows From 20ce50e8dbf4908dc9788ad9b5b217629e51df23 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 12:21:12 +0300 Subject: [PATCH 1231/2710] Use consisten line lenght values --- libsrc/atari7800/mono_conio.s | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/atari7800/mono_conio.s b/libsrc/atari7800/mono_conio.s index cd79af128..c51d7ff59 100644 --- a/libsrc/atari7800/mono_conio.s +++ b/libsrc/atari7800/mono_conio.s @@ -50,14 +50,14 @@ _mono_screen: .macro TextZone row ; Text - .byte <(_mono_screen + 2 * row * charsperline) + .byte <(_mono_screen + row * mono_charsperline) .byte $60 - .byte >(_mono_screen + 2 * row * charsperline) + .byte >(_mono_screen + row * mono_charsperline) .byte 12 .byte 0 - .byte <(_mono_screen + 2 * row * charsperline + charsperline) + .byte <(_mono_screen + row * mono_charsperline + 20) .byte $60 - .byte >(_mono_screen + 2 * row * charsperline + charsperline) + .byte >(_mono_screen + row * mono_charsperline + 20) .byte 12 .byte 80 ; Cursor From 33f12acbc95cfe08ba696e2615b4c0813eb46f57 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 12:26:21 +0300 Subject: [PATCH 1232/2710] Fix typo --- libsrc/atari7800/mono_clrscr.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/atari7800/mono_clrscr.s b/libsrc/atari7800/mono_clrscr.s index c4ab34369..a700aadc1 100644 --- a/libsrc/atari7800/mono_clrscr.s +++ b/libsrc/atari7800/mono_clrscr.s @@ -3,7 +3,7 @@ .export _mono_clrscr - .import _momo_screen + .import _mono_screen .import pusha0,pushax .include "extzp.inc" @@ -11,8 +11,8 @@ .proc _mono_clrscr - lda #<_momo_screen - ldx #>_momo_screen + lda #<_mono_screen + ldx #>_mono_screen sta ptr7800 stx ptr7800+1 ldx #screenrows From 6671a92a8edbdadfa904923c98c665431ea199db Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 13:49:29 +0300 Subject: [PATCH 1233/2710] Not sharing umula0 and fix cursor bug --- libsrc/atari7800/cputc.s | 3 +-- libsrc/atari7800/mono_cputc.s | 8 ++++---- libsrc/atari7800/mono_setcursor.s | 11 +++++------ libsrc/atari7800/setcursor.s | 28 +++++++++++++++++++++++++++- 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index fb95277d2..9ec84bfe5 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -6,8 +6,7 @@ ; .export _cputc - .export umula0 - .import _gotoxy, gotox, gotoy, pusha0 + .import gotox, gotoy, pusha0 .import pushax .import _screen .import txtcolor diff --git a/libsrc/atari7800/mono_cputc.s b/libsrc/atari7800/mono_cputc.s index 4a7e5638c..aa6787e05 100644 --- a/libsrc/atari7800/mono_cputc.s +++ b/libsrc/atari7800/mono_cputc.s @@ -6,7 +6,7 @@ ; .export _mono_cputc - .import _mono_gotoxy, _mono_gotox, _mono_gotoy, pusha0 + .import mono_gotox, mono_gotoy, pusha0 .import pushax .import _mono_screen @@ -52,7 +52,7 @@ umula0: cmp #$0A ; LF bne @L4 @L1: lda #0 ; newline - jsr _mono_gotox + jsr mono_gotox lda CURS_Y cmp #(screenrows-1) bne @L2 @@ -60,7 +60,7 @@ umula0: beq @L3 @L2: clc adc #1 -@L3: jmp _mono_gotoy +@L3: jmp mono_gotoy @L4: pha @@ -96,7 +96,7 @@ umula0: beq @L1 clc adc #1 - jmp _mono_gotox + jmp mono_gotox .endproc diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s index 060f45cde..fa02b1744 100644 --- a/libsrc/atari7800/mono_setcursor.s +++ b/libsrc/atari7800/mono_setcursor.s @@ -23,7 +23,7 @@ ; definitely not allow direct access to the variables. ; - .export mono_gotoxy, _mono_gotoxy, _mono_gotox, _mono_gotoy + .export mono_gotoxy, _mono_gotoxy, mono_gotox, mono_gotoy .constructor mono_init_cursor .interruptor mono_blink_cursor @@ -96,7 +96,6 @@ umula0: adc #<_mono_zones sta cursorzone ; calculate new cursorzone txa - clc adc #>_mono_zones sta cursorzone+1 rts @@ -118,7 +117,7 @@ umula0: ; Enable cursor ; if showcursor cursorzone[1] = 31 ; - .proc _mono_gotoy + .proc mono_gotoy pha lda CURS_Y @@ -143,7 +142,7 @@ umula0: ; You also need to set the hpos offset to the correct value on this line ; cursorzone[3] = 4 * CURS_X? ; - .proc _mono_gotox + .proc mono_gotox sta CURS_X ldy #3 @@ -160,9 +159,9 @@ umula0: ; .proc _mono_gotoxy - jsr _mono_gotoy + jsr mono_gotoy jsr popa - jsr _mono_gotox + jsr mono_gotox rts .endproc diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 99e051cff..d94eb8094 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -31,7 +31,6 @@ .import _zones .import cursor .import pusha, incsp1, pusha0, pushax, popa - .import umula0 .include "atari7800.inc" .include "extzp.inc" @@ -47,6 +46,33 @@ blink_time: .code +;--------------------------------------------------------------------------- +; 8x16 routine + +umula0: + ldy #8 ; Number of bits + lda #0 + lsr ptr7800 ; Get first bit into carry +@L0: bcc @L1 + + clc + adc ptrtmp + tax + lda ptrtmp+1 ; hi byte of left op + clc + adc ptr7800+1 + sta ptr7800+1 + txa + +@L1: ror ptr7800+1 + ror a + ror ptr7800 + dey + bne @L0 + tax + lda ptr7800 ; Load the result + rts + ;----------------------------------------------------------------------------- ; Calculate cursorzone address ; You also need to set the cursorzone to point to the correct cursor Header From ece6f10588da52de804ad8d834fabdbbe98d3a0e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 18 Apr 2022 17:43:56 +0200 Subject: [PATCH 1234/2710] remove dangling spaces when changing the checker scripts and/or directly comitting to git head, please make sure to also run the checks first so you don't break the autobuilds --- asminc/atari.mac | 2 +- samples/atari2600/Makefile | 2 +- samples/cbm/Makefile | 2 +- samples/geos/Makefile | 2 +- samples/supervision/Makefile | 2 +- samples/tutorial/Makefile | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/asminc/atari.mac b/asminc/atari.mac index 8e76888d7..3916254d0 100644 --- a/asminc/atari.mac +++ b/asminc/atari.mac @@ -1,5 +1,5 @@ ; Convert characters to screen codes - + ; Helper macro that converts and outputs one character .macro _scrcode char .if (char >= 0) .and (char <= 31) diff --git a/samples/atari2600/Makefile b/samples/atari2600/Makefile index a02ec9e80..bd2ebc41a 100644 --- a/samples/atari2600/Makefile +++ b/samples/atari2600/Makefile @@ -31,7 +31,7 @@ else CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) SP := $(if $(wildcard ../../bin/sp65*),../../bin/sp65,sp65) -endif +endif EXELIST_atari2600 = \ hello diff --git a/samples/cbm/Makefile b/samples/cbm/Makefile index 989710932..03387a061 100644 --- a/samples/cbm/Makefile +++ b/samples/cbm/Makefile @@ -31,7 +31,7 @@ else CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) SP := $(if $(wildcard ../../bin/sp65*),../../bin/sp65,sp65) -endif +endif ifneq ($(filter disk samples.%,$(MAKECMDGOALS)),) ifdef CC65_HOME diff --git a/samples/geos/Makefile b/samples/geos/Makefile index 04de0aaa3..1fc49a873 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -44,7 +44,7 @@ else CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) SP := $(if $(wildcard ../../bin/sp65*),../../bin/sp65,sp65) -endif +endif DIRLIST = grc diff --git a/samples/supervision/Makefile b/samples/supervision/Makefile index 5829b3f01..097329384 100644 --- a/samples/supervision/Makefile +++ b/samples/supervision/Makefile @@ -31,7 +31,7 @@ else CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) SP := $(if $(wildcard ../../bin/sp65*),../../bin/sp65,sp65) -endif +endif EXELIST_supervision = \ hello diff --git a/samples/tutorial/Makefile b/samples/tutorial/Makefile index 67dd84003..eb8627c29 100644 --- a/samples/tutorial/Makefile +++ b/samples/tutorial/Makefile @@ -29,7 +29,7 @@ else CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) -endif +endif EXELIST_atari2600 = \ notavailable From 47366cbbf6df00d73c154bd9360e70937d03a703 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Mon, 18 Apr 2022 17:49:12 +0200 Subject: [PATCH 1235/2710] use jmp instead of jsr/rts --- libsrc/atari7800/mono_setcursor.s | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s index fa02b1744..42f9bf466 100644 --- a/libsrc/atari7800/mono_setcursor.s +++ b/libsrc/atari7800/mono_setcursor.s @@ -161,8 +161,8 @@ umula0: jsr mono_gotoy jsr popa - jsr mono_gotox - rts + jmp mono_gotox + .endproc .proc mono_gotoxy @@ -197,8 +197,8 @@ umula0: .segment "ONCE" mono_init_cursor: lda #0 - jsr calccursorzone - rts + jmp calccursorzone + ;----------------------------------------------------------------------------- ; force the init constructor to be imported From 6ea1f8ee85a6a0fa1a346a8613abd2051bfc8aaf Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 18 Apr 2022 19:25:48 -0400 Subject: [PATCH 1236/2710] Made the style-check scripts send their file lists to stderr. A complete list will be shown before make shows its error message. There will be less confusion about which lines are in the list. --- .github/checks/lastline.sh | 4 ++-- .github/checks/spaces.sh | 4 ++-- .github/checks/tabs.sh | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/checks/lastline.sh b/.github/checks/lastline.sh index 851a2cfc4..d80d2fb57 100755 --- a/.github/checks/lastline.sh +++ b/.github/checks/lastline.sh @@ -17,9 +17,9 @@ done` cd $OLDCWD if [ x"$FILES"x != xx ]; then - echo "error: found following files that have no newline at the end:" + echo "error: found following files that have no newline at the end:" >&2 for n in $FILES; do - echo $n + echo $n >&2 done exit -1 fi diff --git a/.github/checks/spaces.sh b/.github/checks/spaces.sh index d695beaba..945e9acc3 100755 --- a/.github/checks/spaces.sh +++ b/.github/checks/spaces.sh @@ -10,9 +10,9 @@ FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cf cd $OLDCWD if [ x"$FILES"x != xx ]; then - echo "error: found dangling spaces in the following files:" + echo "error: found dangling spaces in the following files:" >&2 for n in $FILES; do - echo $n + echo $n >&2 done exit -1 fi diff --git a/.github/checks/tabs.sh b/.github/checks/tabs.sh index 16f0280ae..1c32def17 100755 --- a/.github/checks/tabs.sh +++ b/.github/checks/tabs.sh @@ -10,9 +10,9 @@ FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) - cd $OLDCWD if [ x"$FILES"x != xx ]; then - echo "error: found TABs in the following files:" + echo "error: found TABs in the following files:" >&2 for n in $FILES; do - echo $n + echo $n >&2 done exit -1 fi From 6a9eeeb5b0b295faf2f1369cacb642bbc4f3f83c Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 19 Apr 2022 10:31:51 +0300 Subject: [PATCH 1237/2710] Rename font --- libsrc/atari7800/{font160.s => conio_font.s} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename libsrc/atari7800/{font160.s => conio_font.s} (100%) diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/conio_font.s similarity index 100% rename from libsrc/atari7800/font160.s rename to libsrc/atari7800/conio_font.s From 890a181ae506a3ca4d1fc138e56d793c102d880e Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 19 Apr 2022 10:32:22 +0300 Subject: [PATCH 1238/2710] Add color setup --- libsrc/atari7800/mono_conio.s | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libsrc/atari7800/mono_conio.s b/libsrc/atari7800/mono_conio.s index c51d7ff59..63849aea7 100644 --- a/libsrc/atari7800/mono_conio.s +++ b/libsrc/atari7800/mono_conio.s @@ -219,8 +219,12 @@ vblankoff: sta BKGRND sta CURS_X sta CURS_Y - lda #$0f ; White + lda #$33 ; Red sta P0C1 + lda #$c8 ; Green + sta P0C2 + lda #$0f ; White + sta P0C3 rts .endproc From eed8cec726b6e80ef7701a25c2611fba49181391 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 19 Apr 2022 10:33:58 +0300 Subject: [PATCH 1239/2710] Add documentation --- libsrc/atari7800/mono_font.s | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libsrc/atari7800/mono_font.s b/libsrc/atari7800/mono_font.s index d07266989..74307ccfb 100644 --- a/libsrc/atari7800/mono_font.s +++ b/libsrc/atari7800/mono_font.s @@ -1,3 +1,16 @@ +; The internal font structure for Atari7800 needs a full set of 256 +; characters. Each character is 8 x 8 bits. +; The font consists of 8 rows of data: +; row7 +; row6 +; row5 +; row4 +; row3 +; row2 +; row1 +; row0 +; Each row is 256 bytes long + .export _mono_font .segment "RODATA" .align 256 From 26787ba3800f87a889ab937fb081203f7c8d71ed Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 19 Apr 2022 20:01:47 +0300 Subject: [PATCH 1240/2710] Fix race condition --- libsrc/atari7800/clrscr.s | 22 +++++----------------- libsrc/atari7800/conio.s | 6 +++--- libsrc/atari7800/conio_font.s | 4 ++-- libsrc/atari7800/mono_clrscr.s | 22 +++++----------------- libsrc/atari7800/mono_setcursor.s | 10 ++++++++-- libsrc/atari7800/setcursor.s | 7 ++++++- 6 files changed, 29 insertions(+), 42 deletions(-) diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s index 7ce690af4..f9d4938b0 100644 --- a/libsrc/atari7800/clrscr.s +++ b/libsrc/atari7800/clrscr.s @@ -4,7 +4,7 @@ .export _clrscr .import _screen - .import pusha0,pushax + .import pushax, __bzero .include "extzp.inc" .code @@ -13,22 +13,10 @@ lda #<_screen ldx #>_screen - sta ptr7800 - stx ptr7800+1 - ldx #screenrows -@L1: ldy #charsperline - lda #0 -@L2: sta (ptr7800),y - dey - bne @L2 - lda ptr7800 - clc - adc #charsperline - bcc @L3 - inc ptr7800+1 -@L3: dex - bne @L1 - rts + jsr pushax + ldx #>(charsperline * screenrows) + lda #<(charsperline * screenrows) + jmp __bzero .endproc diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index 1240c2e5d..92cc7d8b1 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -9,7 +9,7 @@ .constructor initconio .include "atari7800.inc" .include "extzp.inc" - .import _font + .import _conio_font .import _get_tv .export _screen .export _zones @@ -58,7 +58,7 @@ _screen: ; Cursor .byte 254 .byte 0 - .byte >_font + .byte >_conio_font .byte 0 .endmacro @@ -206,7 +206,7 @@ vblankon: vblankoff: lda MSTAT bpl vblankoff - lda #>_font + lda #>_conio_font sta CHBASE lda #(CTRL_MODE160 | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR2B | CTRL_DMAON | CTRL_CKOFF) sta CTRL diff --git a/libsrc/atari7800/conio_font.s b/libsrc/atari7800/conio_font.s index 07be43c4d..829e3e2ce 100644 --- a/libsrc/atari7800/conio_font.s +++ b/libsrc/atari7800/conio_font.s @@ -16,10 +16,10 @@ ; 0, 2, 4, 6, ... 254 ; Odd indices cannot be used. - .export _font + .export _conio_font .rodata .align 256 -_font: +_conio_font: .byte $0, $0, $41, $41, $0, $0, $14, $0 .byte $0, $0, $0, $0, $1, $40, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 diff --git a/libsrc/atari7800/mono_clrscr.s b/libsrc/atari7800/mono_clrscr.s index a700aadc1..19f1fdfd6 100644 --- a/libsrc/atari7800/mono_clrscr.s +++ b/libsrc/atari7800/mono_clrscr.s @@ -4,7 +4,7 @@ .export _mono_clrscr .import _mono_screen - .import pusha0,pushax + .import pushax, __bzero .include "extzp.inc" .code @@ -13,22 +13,10 @@ lda #<_mono_screen ldx #>_mono_screen - sta ptr7800 - stx ptr7800+1 - ldx #screenrows -@L1: ldy #mono_charsperline - lda #0 -@L2: sta (ptr7800),y - dey - bne @L2 - lda ptr7800 - clc - adc #mono_charsperline - bcc @L3 - inc ptr7800+1 -@L3: dex - bne @L1 - rts + jsr pushax + ldx #>(mono_charsperline * screenrows) + lda #<(mono_charsperline * screenrows) + jmp __bzero .endproc diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s index 42f9bf466..06d1f10d8 100644 --- a/libsrc/atari7800/mono_setcursor.s +++ b/libsrc/atari7800/mono_setcursor.s @@ -42,7 +42,7 @@ ; blink_time: - .byte 140 + .byte 255 .code @@ -175,6 +175,9 @@ umula0: ; Offset to cursor zone 5. ; .proc mono_blink_cursor + lda blink_time + cmp #255 + beq @L3 inc blink_time bne @L3 lda #140 @@ -197,7 +200,10 @@ umula0: .segment "ONCE" mono_init_cursor: lda #0 - jmp calccursorzone + jsr calccursorzone + lda #0 + sta blink_time + rts ;----------------------------------------------------------------------------- diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index d94eb8094..9ccc20ab6 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -42,7 +42,7 @@ ; blink_time: - .byte 140 + .byte 255 .code @@ -177,6 +177,9 @@ umula0: ; Offset to cursor zone 5. ; .proc blink_cursor + lda blink_time + cmp #255 + beq @L3 inc blink_time bne @L3 lda #140 @@ -199,6 +202,8 @@ umula0: init_cursor: lda #0 jsr calccursorzone + lda #0 + sta blink_time rts ;----------------------------------------------------------------------------- From fc244f6b955180c8e62cf1f2c444e4d11ed3af9c Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 19 Apr 2022 21:31:16 +0300 Subject: [PATCH 1241/2710] Too much time in irq fix --- libsrc/atari7800/mono_setcursor.s | 5 +---- libsrc/atari7800/setcursor.s | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s index 06d1f10d8..7253d4a40 100644 --- a/libsrc/atari7800/mono_setcursor.s +++ b/libsrc/atari7800/mono_setcursor.s @@ -42,7 +42,7 @@ ; blink_time: - .byte 255 + .byte 140 .code @@ -175,9 +175,6 @@ umula0: ; Offset to cursor zone 5. ; .proc mono_blink_cursor - lda blink_time - cmp #255 - beq @L3 inc blink_time bne @L3 lda #140 diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 9ccc20ab6..a475d0416 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -42,7 +42,7 @@ ; blink_time: - .byte 255 + .byte 140 .code @@ -177,9 +177,6 @@ umula0: ; Offset to cursor zone 5. ; .proc blink_cursor - lda blink_time - cmp #255 - beq @L3 inc blink_time bne @L3 lda #140 From 89fcb0d4044d1efff0828e97c05742aba89d356f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 20 Apr 2022 00:11:24 +0200 Subject: [PATCH 1242/2710] typo --- src/ca65/expr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ca65/expr.h b/src/ca65/expr.h index b18fabb01..c098aa1e2 100644 --- a/src/ca65/expr.h +++ b/src/ca65/expr.h @@ -172,7 +172,7 @@ ExprNode* FuncHiByte (void); /* Handle the .HIBYTE builtin function */ ExprNode* MakeBoundedExpr (ExprNode* Expr, unsigned Size); -/* Force the given expression into a specific size of ForceRange is true */ +/* Force the given expression into a specific size if ForceRange is true */ ExprNode* BoundedExpr (ExprNode* (*ExprFunc) (void), unsigned Size); /* Parse an expression and force it within a given size if ForceRange is true */ From 8d0098b8182166949b54c4bf45c03bb1f9ce23b3 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 20 Apr 2022 00:12:03 +0200 Subject: [PATCH 1243/2710] more descriptive error message --- src/ca65/segment.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ca65/segment.c b/src/ca65/segment.c index fa4e97dd0..26b568711 100644 --- a/src/ca65/segment.c +++ b/src/ca65/segment.c @@ -417,7 +417,7 @@ void SegDone (void) if ((F->Len == 1 && ED.AddrSize > ADDR_SIZE_ZP) || (F->Len == 2 && ED.AddrSize > ADDR_SIZE_ABS) || (F->Len == 3 && ED.AddrSize > ADDR_SIZE_FAR)) { - LIError (&F->LI, "Range error"); + LIError (&F->LI, "Range error (Address size %u does not match fragment size %u)", ED.AddrSize, F->Len); } } From f64bf76ae8628776fb09c94987873d7a4bcfb5dc Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 20 Apr 2022 00:13:34 +0200 Subject: [PATCH 1244/2710] special case for evaluating the AND operator, this should fix the problems described in issue #1538 --- src/ca65/studyexpr.c | 58 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/src/ca65/studyexpr.c b/src/ca65/studyexpr.c index 2a345a07c..565a98ecc 100644 --- a/src/ca65/studyexpr.c +++ b/src/ca65/studyexpr.c @@ -43,6 +43,7 @@ /* ca65 */ #include "error.h" +#include "expr.h" #include "segment.h" #include "studyexpr.h" #include "symtab.h" @@ -187,6 +188,57 @@ static void ED_MergeAddrSize (ExprDesc* ED, const ExprDesc* Right) } +static void ED_MergeAddrSizeAND (ExprNode* Expr, ExprDesc* ED, const ExprDesc* Right) +/* Merge the address sizes of two expressions into ED, special case for AND operator */ +{ + int ConstL, ConstR; + long Val, ValR; + + if (ED->AddrSize == ADDR_SIZE_DEFAULT) { + /* If ED is valid, ADDR_SIZE_DEFAULT gets always overridden, otherwise + ** it takes precedence over anything else. + */ + if (ED_IsValid (ED)) { + ED->AddrSize = Right->AddrSize; + } + } else if (Right->AddrSize == ADDR_SIZE_DEFAULT) { + /* If Right is valid, ADDR_SIZE_DEFAULT gets always overridden, + ** otherwise it takes precedence over anything else. + */ + if (!ED_IsValid (Right)) { + ED->AddrSize = Right->AddrSize; + } + } else { + /* Neither ED nor Right has a default address size, use the smaller of + ** the two. + */ + if (Right->AddrSize < ED->AddrSize) { + ED->AddrSize = Right->AddrSize; + } + } + /* Check if either side of the expression is constant */ + ConstL = IsConstExpr (Expr->Left, &Val); + ConstR = IsConstExpr (Expr->Right, &ValR); + if (!ConstL && !ConstR) { + /* If neither part of the expression is constant, the above is all we can do */ + return; + } + /* Use the constant side of the expression */ + if (ConstR) { + Val = ValR; + } + /* Figure out the size of the constant value and use that as expression size */ + if (IsByteRange (Val)) { + ED->AddrSize = ADDR_SIZE_ZP; + } else if (IsWordRange (Val)) { + ED->AddrSize = ADDR_SIZE_ABS; + } else if (IsFarRange (Val)) { + ED->AddrSize = ADDR_SIZE_FAR; + } else { + ED->AddrSize = ADDR_SIZE_DEFAULT; + } +} + static ED_SymRef* ED_FindSymRef (ExprDesc* ED, SymEntry* Sym) /* Find a symbol reference and return it. Return NULL if the reference does @@ -489,7 +541,11 @@ static void StudyBinaryExpr (ExprNode* Expr, ExprDesc* D) /* Merge references and update address size */ ED_MergeRefs (D, &Right); - ED_MergeAddrSize (D, &Right); + if (Expr->Op == EXPR_AND) { + ED_MergeAddrSizeAND (Expr, D, &Right); + } else { + ED_MergeAddrSize (D, &Right); + } } From 3ad83f21911588dc9e0c06a33fa60a929a81c444 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Wed, 20 Apr 2022 12:49:30 +0200 Subject: [PATCH 1245/2710] typo --- Contributing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Contributing.md b/Contributing.md index 6258ce523..fd1e2fcbc 100644 --- a/Contributing.md +++ b/Contributing.md @@ -20,7 +20,7 @@ This is an ongoing controversial topic - everyone knows that. However, the follo * No extra spaces at the end of lines. * All text files must end with new-line characters. Don't leave the last line "dangling". -The (bash) scipts used to check the above rules can be found in ```.github/check```. You can also run all checks using ```make check```. +The (bash) scripts used to check the above rules can be found in ```.github/check```. You can also run all checks using ```make check```. ### misc From a0280d49176d666374d4b47012f5b38d70789c17 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 20 Apr 2022 12:53:34 +0200 Subject: [PATCH 1246/2710] Also handle the case when the non constant side of the AND expression is known to have a smaller size than the constant side of the expression. --- src/ca65/studyexpr.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/ca65/studyexpr.c b/src/ca65/studyexpr.c index 565a98ecc..463d00c98 100644 --- a/src/ca65/studyexpr.c +++ b/src/ca65/studyexpr.c @@ -192,6 +192,7 @@ static void ED_MergeAddrSizeAND (ExprNode* Expr, ExprDesc* ED, const ExprDesc* R /* Merge the address sizes of two expressions into ED, special case for AND operator */ { int ConstL, ConstR; + int Size, ConstSize; long Val, ValR; if (ED->AddrSize == ADDR_SIZE_DEFAULT) { @@ -223,19 +224,33 @@ static void ED_MergeAddrSizeAND (ExprNode* Expr, ExprDesc* ED, const ExprDesc* R /* If neither part of the expression is constant, the above is all we can do */ return; } - /* Use the constant side of the expression */ + /* We start assuming the left side is constant, left value is in Val, right + size in Size */ + Size = Right->AddrSize; + /* Now check if the right side is constant, and if so put the right value + into Val and the Left size into Size. */ if (ConstR) { Val = ValR; + Size = ED->AddrSize; } - /* Figure out the size of the constant value and use that as expression size */ + /* Figure out the size of the constant value */ if (IsByteRange (Val)) { - ED->AddrSize = ADDR_SIZE_ZP; + ConstSize = ADDR_SIZE_ZP; } else if (IsWordRange (Val)) { - ED->AddrSize = ADDR_SIZE_ABS; + ConstSize = ADDR_SIZE_ABS; } else if (IsFarRange (Val)) { - ED->AddrSize = ADDR_SIZE_FAR; + ConstSize = ADDR_SIZE_FAR; } else { - ED->AddrSize = ADDR_SIZE_DEFAULT; + ConstSize = ADDR_SIZE_DEFAULT; + } + + if (Size == ADDR_SIZE_DEFAULT) { + ED->AddrSize = ConstSize; + } else if (ConstSize == ADDR_SIZE_DEFAULT) { + ED->AddrSize = Size; + } else { + /* use the smaller of the two sizes */ + ED->AddrSize = (ConstSize < Size) ? ConstSize : Size; } } From 451acb3423d503fc37995cc2cb79bb259138863b Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Wed, 20 Apr 2022 14:28:34 +0200 Subject: [PATCH 1247/2710] Update Contributing.md --- Contributing.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Contributing.md b/Contributing.md index 6258ce523..8528997df 100644 --- a/Contributing.md +++ b/Contributing.md @@ -68,6 +68,7 @@ color := $0787 ## Assembly Sources * Op-code mnemonics must have lower-case letters. The names of instruction macroes may have upper-case letters. +* Op-codes must use their official and commonly used mnemonics, ie bcc and bcs and not bgt and blt * Hexadecimal number constants should be used except where decimal or binary numbers make much more sense in that constant's context. * Hexadecimal letters should be upper-case. * When you set two registers or two memory locations to an immediate 16-bit zero, you should use the expressions ```#<$0000``` and ```#>$0000``` (they make it obvious where you are putting the lower and upper bytes). From 99919d2899c93700970efad5eff253fa28db21e2 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 20 Apr 2022 14:50:42 +0200 Subject: [PATCH 1248/2710] added a testprogram to check for some of the edge cases --- test/asm/Makefile | 2 +- test/asm/readme.txt | 7 +++ test/asm/val/Makefile | 58 +++++++++++++++++++ test/asm/val/bug1538.s | 99 ++++++++++++++++++++++++++++++++ test/asm/val/sim6502-asmtest.cfg | 35 +++++++++++ 5 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 test/asm/val/Makefile create mode 100644 test/asm/val/bug1538.s create mode 100644 test/asm/val/sim6502-asmtest.cfg diff --git a/test/asm/Makefile b/test/asm/Makefile index b35c30c9f..82a0ba0e9 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -12,7 +12,7 @@ endif WORKDIR = ../testwrk/asm -SUBDIRS = cpudetect opcodes listing +SUBDIRS = cpudetect opcodes listing val .PHONY: all continue mostlyclean clean diff --git a/test/asm/readme.txt b/test/asm/readme.txt index 18354bb47..787f2951e 100644 --- a/test/asm/readme.txt +++ b/test/asm/readme.txt @@ -17,3 +17,10 @@ Overall tests: -------------- These go into listing/. Refer to listing/readme.txt + +Val: +---- + +Works very much like the /val directory used to test the compiler - individual +tests are run in the simulator and should exit with an exit code of 0 when they +pass, or either -1 or a number indicating what part of the test failed on error. diff --git a/test/asm/val/Makefile b/test/asm/val/Makefile new file mode 100644 index 000000000..01094b0cd --- /dev/null +++ b/test/asm/val/Makefile @@ -0,0 +1,58 @@ +# Makefile for the regression tests that return an error code on failure + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + S = $(subst /,\,/) + NULLDEV = nul: + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /s /q $(subst /,\,$1) +else + S = / + NULLDEV = /dev/null + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +ifdef QUIET + .SILENT: + NULLOUT = >$(NULLDEV) + NULLERR = 2>$(NULLDEV) +endif + +SIM65FLAGS = -x 5000000000 + +CA65 := $(if $(wildcard ../../../bin/ca65*),..$S..$S..$Sbin$Sca65,ca65) +LD65 := $(if $(wildcard ../../../bin/ld65*),..$S..$S..$Sbin$Sld65,ld65) +SIM65 := $(if $(wildcard ../../../bin/sim65*),..$S..$S..$Sbin$Ssim65,sim65) + +WORKDIR = ../../testwrk/asm/val + +.PHONY: all clean + +SOURCES := $(wildcard *.s) +TESTS = $(SOURCES:%.s=$(WORKDIR)/%.6502.prg) +TESTS += $(SOURCES:%.s=$(WORKDIR)/%.65c02.prg) + +all: $(TESTS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +define PRG_template + +$(WORKDIR)/%.$1.prg: %.s | $(WORKDIR) + $(if $(QUIET),echo asm/val/$$*.$1.prg) + $(CA65) -t sim$1 -o $$(@:.prg=.o) $$< $(NULLERR) + $(LD65) -C sim6502-asmtest.cfg -o $$@ $$(@:.prg=.o) sim$1.lib $(NULLERR) + $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) + +endef # PRG_template + +$(eval $(call PRG_template,6502)) +$(eval $(call PRG_template,65c02)) + +clean: + @$(call RMDIR,$(WORKDIR)) diff --git a/test/asm/val/bug1538.s b/test/asm/val/bug1538.s new file mode 100644 index 000000000..ca9a8b6e5 --- /dev/null +++ b/test/asm/val/bug1538.s @@ -0,0 +1,99 @@ + + .macpack longbranch + + .import _exit + .export _main + +offset1 = ($123456 + ((.bank(_main)) * $2345)) ; should produce $123456 + ($23 * $2345) = 1706c5 + +_main: + ldx #1 ; test counter + + ;--------------------------------------------------------------------- + ; first check if we can still force an 16bit address although we are + ; ANDing with a 8bit value +test1: +test1a: bit a:$1234 & $ff ; should produce 00 34 + lda test1a+1 + cmp #$34 + jne exiterror + + inx + lda test1a+2 + cmp #$00 + jne exiterror + + inx +test1b: bit a:$34 & $ff ; should produce 00 34 + lda test1b+1 + cmp #$34 + jne exiterror + + inx + lda test1b+2 + cmp #$00 + jne exiterror + + ;--------------------------------------------------------------------- + ; the original bug report, use an expression that contains a non constant + ; part (.bank(_main)) and limit it to 8bit size by ANDing with $ff +test2: + inx + lda #(offset1 >> 0) & $ff + cmp #$c5 + jne exiterror + + inx + lda #(offset1 >> 8) & $ff + cmp #$06 + jne exiterror + + inx + lda #(offset1 >> 16) & $ff + cmp #$17 + jne exiterror + + ;--------------------------------------------------------------------- + ; import a zeropage symbol (1 byte size) and then AND with a constant + ; 16bit value - it should not turn into a 16bit address +test3: + jmp test3chk + .importzp tmp1 +test3a: .byte tmp1 ; verify its 8bit +test3b: .byte tmp1 & $ff ; AND with $ff should work of course +test3c: .byte tmp1 & $ffff ; AND with $ffff should not change size +test3d: .word tmp1 & $ffffff ; AND with $ffffff should not change size +test3chk: + inx + lda test3a + cmp #tmp1 + jne exiterror + + inx + lda test3b + cmp #tmp1 + jne exiterror + + inx + lda test3c + cmp #tmp1 + jne exiterror + + inx + lda test3d + cmp #tmp1 + jne exiterror + + inx + lda test3d+1 + cmp #$00 + jne exiterror + + ;--------------------------------------------------------------------- + ; exit OK + ldx #0 +exiterror: + txa + ldx #0 + jmp _exit + diff --git a/test/asm/val/sim6502-asmtest.cfg b/test/asm/val/sim6502-asmtest.cfg new file mode 100644 index 000000000..a969fb044 --- /dev/null +++ b/test/asm/val/sim6502-asmtest.cfg @@ -0,0 +1,35 @@ +SYMBOLS { + __EXEHDR__: type = import; + __STACKSIZE__: type = weak, value = $0800; # 2k stack +} +MEMORY { + ZP: file = "", start = $0000, size = $0100; + HEADER: file = %O, start = $0000, size = $000C; + MAIN: file = %O, define = yes, start = $0200, size = $FDF0 - __STACKSIZE__, BANK = $23; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + EXEHDR: load = HEADER, type = ro; + STARTUP: load = MAIN, type = ro; + LOWCODE: load = MAIN, type = ro, optional = yes; + ONCE: load = MAIN, type = ro, optional = yes; + CODE: load = MAIN, type = ro; + RODATA: load = MAIN, type = ro; + DATA: load = MAIN, type = rw; + BSS: load = MAIN, 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__; +} From fd02cbed9db46a5481f8a88ce5b570afc4301c4d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 20 Apr 2022 14:54:44 +0200 Subject: [PATCH 1249/2710] fix workdir path --- test/asm/val/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/asm/val/Makefile b/test/asm/val/Makefile index 01094b0cd..91dae9afd 100644 --- a/test/asm/val/Makefile +++ b/test/asm/val/Makefile @@ -28,7 +28,7 @@ CA65 := $(if $(wildcard ../../../bin/ca65*),..$S..$S..$Sbin$Sca65,ca65) LD65 := $(if $(wildcard ../../../bin/ld65*),..$S..$S..$Sbin$Sld65,ld65) SIM65 := $(if $(wildcard ../../../bin/sim65*),..$S..$S..$Sbin$Ssim65,sim65) -WORKDIR = ../../testwrk/asm/val +WORKDIR = ../../../testwrk/asm/val .PHONY: all clean From 23831f08deb7b945523482110312e2a7f6978299 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 21 Apr 2022 14:50:48 +0200 Subject: [PATCH 1250/2710] const value should never have default size, use 32bit instead --- src/ca65/studyexpr.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ca65/studyexpr.c b/src/ca65/studyexpr.c index 463d00c98..40e9b7aab 100644 --- a/src/ca65/studyexpr.c +++ b/src/ca65/studyexpr.c @@ -241,13 +241,11 @@ static void ED_MergeAddrSizeAND (ExprNode* Expr, ExprDesc* ED, const ExprDesc* R } else if (IsFarRange (Val)) { ConstSize = ADDR_SIZE_FAR; } else { - ConstSize = ADDR_SIZE_DEFAULT; + ConstSize = ADDR_SIZE_LONG; } if (Size == ADDR_SIZE_DEFAULT) { ED->AddrSize = ConstSize; - } else if (ConstSize == ADDR_SIZE_DEFAULT) { - ED->AddrSize = Size; } else { /* use the smaller of the two sizes */ ED->AddrSize = (ConstSize < Size) ? ConstSize : Size; From c6decc7bb84adcdd272c252721ab6f207baf297e Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 21 Apr 2022 21:54:33 +0300 Subject: [PATCH 1251/2710] Move cursor IRQ processing to when the screen is being drawn --- libsrc/atari7800/mono_setcursor.s | 4 ++++ libsrc/atari7800/setcursor.s | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s index 7253d4a40..52a5a997a 100644 --- a/libsrc/atari7800/mono_setcursor.s +++ b/libsrc/atari7800/mono_setcursor.s @@ -28,6 +28,7 @@ .interruptor mono_blink_cursor .importzp sp + .import _zonecounter .import _mono_zones .import cursor .import pusha, incsp1, pusha0, pushax, popa @@ -175,6 +176,9 @@ umula0: ; Offset to cursor zone 5. ; .proc mono_blink_cursor + lda _zonecounter + and #01 + beq @L3 inc blink_time bne @L3 lda #140 diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index a475d0416..c0bf1252b 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -28,6 +28,7 @@ .interruptor blink_cursor .importzp sp + .import _zonecounter .import _zones .import cursor .import pusha, incsp1, pusha0, pushax, popa @@ -177,6 +178,9 @@ umula0: ; Offset to cursor zone 5. ; .proc blink_cursor + lda _zonecounter + and #01 + beq @L3 inc blink_time bne @L3 lda #140 From f4260ed7bcce782d7d6f4eb39d12ee9a58e5f002 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Fri, 22 Apr 2022 06:51:35 +0300 Subject: [PATCH 1252/2710] Speed up the cursor a bit --- libsrc/atari7800/mono_setcursor.s | 4 ++-- libsrc/atari7800/setcursor.s | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s index 52a5a997a..02e0308f6 100644 --- a/libsrc/atari7800/mono_setcursor.s +++ b/libsrc/atari7800/mono_setcursor.s @@ -43,7 +43,7 @@ ; blink_time: - .byte 140 + .byte 200 .code @@ -181,7 +181,7 @@ umula0: beq @L3 inc blink_time bne @L3 - lda #140 + lda #200 sta blink_time ldy #0 lda (cursorzone),y diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index c0bf1252b..f438de24f 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -43,7 +43,7 @@ ; blink_time: - .byte 140 + .byte 200 .code @@ -183,7 +183,7 @@ umula0: beq @L3 inc blink_time bne @L3 - lda #140 + lda #200 sta blink_time ldy #0 lda (cursorzone),y From c48df98145c10f5bf083e0c1a2350705a504c090 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sun, 24 Apr 2022 00:39:04 +0200 Subject: [PATCH 1253/2710] missing fd_management and cleaning --- asminc/telestrat.inc | 30 ++++++++++++----------- libsrc/telestrat/close.s | 18 +++++++------- libsrc/telestrat/read.s | 51 +++++++++++++++++++++------------------- libsrc/telestrat/write.s | 10 +++++--- 4 files changed, 59 insertions(+), 50 deletions(-) diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index 703dbaa3b..38dfa31ca 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -1,7 +1,7 @@ ; ; Oric TELEMON definition -; TELEMON 2.4 & TELEMON 3.x -; For TELEMON 3.x check http://orix.oric.org +; TELEMON 2.4 & Orix +; For TOrix check http://orix.oric.org ; ; --------------------------------------------------------------------------- @@ -59,7 +59,7 @@ SCRNB := $28 ; Id of the current window ADKBD := $2A ; Address ASCII conversion table -PTR_READ_DEST := $2C ; Used for XFREAD and XWRITE only in TELEMON 3.x +PTR_READ_DEST := $2C ; Used for XFREAD and XWRITE only in Orix ADCLK := $40 ; Address for clock display TIMEUS := $42 @@ -249,10 +249,10 @@ XHIRES = $1A XEFFHI = $1B ; Clear hires screen XFILLM = $1C XMINMA = $1F -XVARS = $24 ; Only in TELEMON 3.x, in TELEMON 2.4, it's XNOMFI ($24) +XVARS = $24 ; Only in Orix, in TELEMON 2.4, it's XNOMFI ($24) XCRLF = $25 ; Jump a line and return to the beginning of the line XDECAY = $26 -XFREAD = $27 ; Only in TELEMON 3.x (bank 7 of Orix) +XFREAD = $27 ; Only in Orix XBINDX = $28 ; Convert a number into hex and displays on channel 0 XDECIM = $29 XHEXA = $2A ; Convert a number into hex @@ -261,7 +261,7 @@ XEDT = $2D ; Launch editor XINSER = $2E XSCELG = $2F ; Search a line in editor mode -XOPEN = $30 ; Only in TELEMON 3.x (bank 7 of Orix) +XOPEN = $30 ; Only in Orix XECRPR = $33 ; Displays prompt XCOSCR = $34 ; Switch off cursor XCSSCR = $35 ; Switch on cursor @@ -269,8 +269,8 @@ XSCRSE = $36 XSCROH = $37 ; Scroll up text screen XSCROB = $38 ; Scroll down text screen XSCRNE = $39 ; Load charset from rom to ram -XCLOSE = $3A ; Only in TELEMON 3.x close file (bank 7 of Orix) -XFWRITE = $3B ; Only in TELEMON 3.x write file (bank 7 of Orix) +XCLOSE = $3A ; Only in Orix close file +XFWRITE = $3B ; Only in Orix write file ; Clock primitive XRECLK = $3C ; Reset clock @@ -291,14 +291,14 @@ XGETCWD = $48 ; Get current CWD XPUTCWD = $49 ; Chdir ; File management -XMKDIR = $4B ; Create a folder. Only available in TELEMON 3.x (bank 7 of Orix) +XMKDIR = $4B ; Create a folder. Only available in Orix XHCHRS = $4C ; Hard copy hires ; File management -XRM = $4D ; Remove a folder or a file. Only available in TELEMON 3.x (bank 7 of Orix) +XRM = $4D ; Remove a folder or a file. Only available in Orix -XFWR = $4E ; Put a char on the first screen. Only available in TELEMON 3.x (bank 7 of Orix) +XFWR = $4E ; Put a char on the first screen. Only available in Orix ; Keyboard primitives XALLKB = $50 ; Read Keyboard, and populate KBDCOL @@ -314,7 +314,7 @@ XINIBU = $58 ; Initialize the buffer X XDEFBU = $59 ; Reset all value of the buffer XBUSY = $5A ; Test if the buffer is empty -XMALLOC = $5B ; Only in TELEMON 3.x (bank 7 of Orix) +XMALLOC = $5B ; Only in Orix ; RS232 primitives XSDUMP = $5C ; RS232 input dump @@ -326,7 +326,9 @@ XSSAVE = $5F ; Write a file to RS232 XMLOAD = $60 ; Read a file from Minitel XMSAVE = $61 ; Write a file to Minitel -XFREE = $62 ; Only in TELEMON 3.x (bank 7 of Orix) +XFREE = $62 ; Only in Orix + +XEXEC = $63 ; Only in Orix ; Next Minitel primitives XWCXFI = $63 ; Wait connection @@ -334,7 +336,7 @@ XLIGNE = $64 ; XDECON = $65 ; Minitel disconnection XMOUT = $66 ; Send a byte to minitel (from A) -XSOUT = $67 ; Send accumulator value (A) to RS232, available in TELEMON 2.4 & 3.x : if RS232 buffer is full, the Oric Telestrat freezes +XSOUT = $67 ; Send accumulator value (A) to RS232, available in TELEMON 2.4 : if RS232 buffer is full, the Oric Telestrat freezes XHRSSE = $8C ; Set hires position cursor XDRAWA = $8D ; Draw a line absolute diff --git a/libsrc/telestrat/close.s b/libsrc/telestrat/close.s index 17f6327f0..53186ff42 100644 --- a/libsrc/telestrat/close.s +++ b/libsrc/telestrat/close.s @@ -1,16 +1,16 @@ ; jede jede@oric.org 2017-01-22 - .export _close + .export _close - .import addysp,popax + .import addysp,popax - .include "zeropage.inc" - .include "telestrat.inc" - .include "errno.inc" - .include "fcntl.inc" + .include "zeropage.inc" + .include "telestrat.inc" + .include "errno.inc" + .include "fcntl.inc" -; int open (const char* name, int flags, ...); /* May take a mode argument */ +; int __fastcall__ close (int fd); .proc _close - BRK_TELEMON XCLOSE ; launch primitive ROM - rts + BRK_TELEMON XCLOSE ; Launch primitive ROM + rts .endproc diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index db764fc84..d2bfcc5f5 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -2,38 +2,41 @@ ; jede jede@oric.org 2017-01-22 ; - .export _read + .export _read - .import popax + .import popax - .include "zeropage.inc" - .include "telestrat.inc" + .include "zeropage.inc" + .include "telestrat.inc" ;int read (int fd, void* buf, unsigned count); .proc _read - sta ptr1 ; Count - stx ptr1+1 ; Count - jsr popax ; Get buf + sta ptr1 ; count + stx ptr1+1 ; count + jsr popax ; get buf - sta PTR_READ_DEST - stx PTR_READ_DEST+1 - sta ptr2 ; In order to calculate nb of bytes read - stx ptr2+1 ; + sta PTR_READ_DEST + stx PTR_READ_DEST+1 + sta ptr2 ; in order to calculate nb of bytes read + stx ptr2+1 + jsr popax ; get FD - lda ptr1 ; - ldy ptr1+1 ; - BRK_TELEMON XFREAD ; calls telemon30 routine - ; Compute nb of bytes read - lda PTR_READ_DEST+1 - sec - sbc ptr2+1 - tax - lda PTR_READ_DEST - sec - sbc ptr2 - ; Here A and X contains number of bytes read - rts + tax ; send FD to X + + lda ptr1 + ldy ptr1+1 + BRK_TELEMON XFREAD + ; compute nb of bytes read + lda PTR_READ_DEST+1 + sec + sbc ptr2+1 + tax + lda PTR_READ_DEST + sec + sbc ptr2 + ; here A and X contains number of bytes read + rts .endproc diff --git a/libsrc/telestrat/write.s b/libsrc/telestrat/write.s index 215db3e52..2ce2657ac 100644 --- a/libsrc/telestrat/write.s +++ b/libsrc/telestrat/write.s @@ -3,8 +3,8 @@ .export _write .import popax, popptr1 - .importzp ptr1, ptr2, ptr3, tmp1 + .include "zeropage.inc" .include "telestrat.inc" ; int write (int fd, const void* buf, int count); @@ -20,7 +20,10 @@ stx ptr2 ; save count with each byte incremented separately jsr popptr1 ; get buf - jsr popax ; get fd and discard + + jsr popax ; get fd + + sta tmp1 ; save fd ; if fd=0001 then it stdout cpx #0 @@ -37,6 +40,7 @@ next: sta PTR_READ_DEST+1 lda ptr3 ldy ptr3+1 + ldx tmp1 ; send fd in X BRK_TELEMON XFWRITE ; compute nb of bytes written @@ -74,7 +78,7 @@ L3: inc ptr1+1 jmp L1 - ; No error, return count + ; no error, return count L9: lda ptr3 ldx ptr3+1 From 8c26b837ef68324f09798fe31f5d29e48a2752fe Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sun, 24 Apr 2022 00:41:12 +0200 Subject: [PATCH 1254/2710] fix typo --- asminc/telestrat.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index 38dfa31ca..682696887 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -1,7 +1,7 @@ ; ; Oric TELEMON definition ; TELEMON 2.4 & Orix -; For TOrix check http://orix.oric.org +; For Orix check http://orix.oric.org ; ; --------------------------------------------------------------------------- From 8f402433153833610b61fc113fc6568803f52de4 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sun, 24 Apr 2022 15:15:10 +0200 Subject: [PATCH 1255/2710] fix spaces --- libsrc/telestrat/read.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index d2bfcc5f5..f31909f45 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -20,15 +20,15 @@ sta PTR_READ_DEST stx PTR_READ_DEST+1 sta ptr2 ; in order to calculate nb of bytes read - stx ptr2+1 + stx ptr2+1 jsr popax ; get FD tax ; send FD to X lda ptr1 - ldy ptr1+1 - BRK_TELEMON XFREAD + ldy ptr1+1 + BRK_TELEMON XFREAD ; compute nb of bytes read lda PTR_READ_DEST+1 sec From d8482fbd5773d3260f4f95f8da94297e8152c1cf Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Mon, 25 Apr 2022 14:58:38 +0000 Subject: [PATCH 1256/2710] build: allow the user to specify make V=1 for verbose build it's often required to see the full commandline when things go wrong. the standard way for Makefile-only based buildsystems and autoconf is to pass V=1 to make. --- src/Makefile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index c8028204b..c37af1d32 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2,6 +2,12 @@ ifneq ($(shell echo),) CMD_EXE = 1 endif +ifneq ($(V),1) + Q=@ +else + Q= +endif + PROGS = ar65 \ ca65 \ cc65 \ @@ -147,7 +153,7 @@ endef # PROG_template ../wrk/%.o: %.c @echo $< - @$(CC) -c $(CFLAGS) -o $@ $< + $(Q)$(CC) -c $(CFLAGS) -o $@ $< ../bin: @$(call MKDIR,$@) From bf1ef6157c65fc56db9cf24cab813f384a9dd2e6 Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Mon, 25 Apr 2022 16:52:46 +0000 Subject: [PATCH 1257/2710] build: properly quote strings passed as cpp macros until now, the strings intended to be hardcoded into the binary, such as directory names and build id, were passed unquoted, which means they're interpreted by the preprocessor as C tokens, rather than strings, which can result in all sorts of "interesting" behaviour such as interpreting paths starting with // as C++-style comment. this was then worked around using a stringize macro which turned the tokens into a string (if they happened to be in a compatible format). adresses #1726 --- src/Makefile | 6 +++--- src/ca65/incpath.c | 2 +- src/cc65/incpath.c | 2 +- src/cl65/main.c | 2 +- src/common/version.c | 2 +- src/ld65/filepath.c | 6 +++--- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Makefile b/src/Makefile index c37af1d32..75b92394e 100644 --- a/src/Makefile +++ b/src/Makefile @@ -68,9 +68,9 @@ $(info BUILD_ID: $(BUILD_ID)) CFLAGS += -MMD -MP -O3 -I common \ -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) \ - -DCA65_INC="$(CA65_INC)" -DCC65_INC="$(CC65_INC)" -DCL65_TGT="$(CL65_TGT)" \ - -DLD65_LIB="$(LD65_LIB)" -DLD65_OBJ="$(LD65_OBJ)" -DLD65_CFG="$(LD65_CFG)" \ - -DBUILD_ID="$(BUILD_ID)" + -DCA65_INC="\"$(CA65_INC)\"" -DCC65_INC="\"$(CC65_INC)\"" -DCL65_TGT="\"$(CL65_TGT)\"" \ + -DLD65_LIB="\"$(LD65_LIB)\"" -DLD65_OBJ="\"$(LD65_OBJ)\"" -DLD65_CFG="\"$(LD65_CFG)\"" \ + -DBUILD_ID="\"$(BUILD_ID)\"" LDLIBS += -lm diff --git a/src/ca65/incpath.c b/src/ca65/incpath.c index ff21b175d..42e54b2da 100644 --- a/src/ca65/incpath.c +++ b/src/ca65/incpath.c @@ -76,7 +76,7 @@ void FinishIncludePaths (void) /* Add some compiled-in search paths if defined at compile time. */ #if defined(CA65_INC) && !defined(_WIN32) - AddSearchPath (IncSearchPath, STRINGIZE (CA65_INC)); + AddSearchPath (IncSearchPath, CA65_INC); #endif /* Add paths relative to the parent directory of the Windows binary. */ diff --git a/src/cc65/incpath.c b/src/cc65/incpath.c index ab164d5ca..d32614cf9 100644 --- a/src/cc65/incpath.c +++ b/src/cc65/incpath.c @@ -77,7 +77,7 @@ void FinishIncludePaths (void) /* Add some compiled-in search paths if defined at compile time. */ #if defined(CC65_INC) && !defined(_WIN32) - AddSearchPath (SysIncSearchPath, STRINGIZE (CC65_INC)); + AddSearchPath (SysIncSearchPath, CC65_INC); #endif /* Add paths relative to the parent directory of the Windows binary. */ diff --git a/src/cl65/main.c b/src/cl65/main.c index e032baee4..701355904 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -1216,7 +1216,7 @@ static void OptPrintTargetPath (const char* Opt attribute ((unused)), SearchPaths* TargetPaths = NewSearchPath (); AddSubSearchPathFromEnv (TargetPaths, "CC65_HOME", "target"); #if defined(CL65_TGT) && !defined(_WIN32) - AddSearchPath (TargetPaths, STRINGIZE (CL65_TGT)); + AddSearchPath (TargetPaths, CL65_TGT); #endif AddSubSearchPathFromWinBin (TargetPaths, "target"); diff --git a/src/common/version.c b/src/common/version.c index 992be45ee..2f19f0466 100644 --- a/src/common/version.c +++ b/src/common/version.c @@ -62,7 +62,7 @@ const char* GetVersionAsString (void) { static char Buf[60]; #if defined(BUILD_ID) - xsnprintf (Buf, sizeof (Buf), "%u.%u - %s", VER_MAJOR, VER_MINOR, STRINGIZE (BUILD_ID)); + xsnprintf (Buf, sizeof (Buf), "%u.%u - %s", VER_MAJOR, VER_MINOR, BUILD_ID); #else xsnprintf (Buf, sizeof (Buf), "%u.%u", VER_MAJOR, VER_MINOR); #endif diff --git a/src/ld65/filepath.c b/src/ld65/filepath.c index 17cd451de..f722ad34b 100644 --- a/src/ld65/filepath.c +++ b/src/ld65/filepath.c @@ -89,13 +89,13 @@ void InitSearchPaths (void) /* Add some compiled-in search paths if defined at compile time. */ #if defined(LD65_LIB) && !defined(_WIN32) - AddSearchPath (LibDefaultPath, STRINGIZE (LD65_LIB)); + AddSearchPath (LibDefaultPath, LD65_LIB); #endif #if defined(LD65_OBJ) && !defined(_WIN32) - AddSearchPath (ObjDefaultPath, STRINGIZE (LD65_OBJ)); + AddSearchPath (ObjDefaultPath, LD65_OBJ); #endif #if defined(LD65_CFG) && !defined(_WIN32) - AddSearchPath (CfgDefaultPath, STRINGIZE (LD65_CFG)); + AddSearchPath (CfgDefaultPath, LD65_CFG); #endif /* Add paths relative to the parent directory of the Windows binary. */ From 13081e0989e8076b2441a3e6d7512f9739777587 Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:12:09 +0000 Subject: [PATCH 1258/2710] remove orphaned STRINGIZE macro --- src/common/searchpath.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/common/searchpath.h b/src/common/searchpath.h index 974886a67..f078c0799 100644 --- a/src/common/searchpath.h +++ b/src/common/searchpath.h @@ -48,10 +48,6 @@ -/* Convert argument to C string */ -#define _STRINGIZE(arg) #arg -#define STRINGIZE(arg) _STRINGIZE(arg) - /* A search path is a pointer to the list */ typedef struct Collection SearchPaths; From e9597e872101604e382468235cdba69a1ab8bf6b Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 26 Apr 2022 00:40:16 +0200 Subject: [PATCH 1259/2710] cgetc export data now --- libsrc/telestrat/cgetc.s | 34 ++++++++++++++++++++++++---------- libsrc/telestrat/kbhit.s | 20 ++++++++++++++++---- 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/libsrc/telestrat/cgetc.s b/libsrc/telestrat/cgetc.s index cad8814af..e77ed794b 100644 --- a/libsrc/telestrat/cgetc.s +++ b/libsrc/telestrat/cgetc.s @@ -5,24 +5,38 @@ .import cursor + .export store_char + .include "telestrat.inc" .proc _cgetc - ; this routine could be quicker if we wrote in page 2 variables, - ; but it's better to use telemon routine in that case, because telemon can manage 4 I/O - ldx cursor ; if cursor equal to 0, then switch off cursor + ; This routine could be quicker if we wrote in page 2 variables, + ; But it's better to use telemon routine in that case, because telemon can manage 4 I/O + ldx cursor ; If cursor equal to 0, then switch off cursor beq switchoff_cursor ldx #$00 ; x is the first screen - BRK_TELEMON(XCSSCR) ; display cursor - jmp loop ; could be replaced by a bne/beq but 'jmp' is cleaner than a bne/beq which could expect some matters + BRK_TELEMON(XCSSCR) ; Display cursor + jmp start ; Could be replaced by a bne/beq but 'jmp' is cleaner than a bne/beq which could expect some matters switchoff_cursor: - ; at this step X is equal to $00, X must be set, because it's the id of the screen (telestrat can handle 4 virtuals screen) - BRK_TELEMON(XCOSCR) ; switch off cursor + ; At this step X is equal to $00, X must be set, because it's the id of the screen (telestrat can handle 4 virtuals screen) + BRK_TELEMON(XCOSCR) ; Switch off cursor -loop: - BRK_TELEMON XRD0 ; waits until key is pressed - bcs loop + +start: + lda store_char ; Does kbhit store a value in store_char ? + bne @out ; Yes, we returns A and we reset store_char +@wait_key: + BRK_TELEMON XRD0 ; Waits until key is pressed + bcs @wait_key + ldx #$00 + rts +@out: + ldx #$00 + stx store_char rts .endproc +.data +store_char: + .byte 0 diff --git a/libsrc/telestrat/kbhit.s b/libsrc/telestrat/kbhit.s index 54e4bf4d8..da2c8b587 100644 --- a/libsrc/telestrat/kbhit.s +++ b/libsrc/telestrat/kbhit.s @@ -6,12 +6,24 @@ .export _kbhit + .import store_char + .include "telestrat.inc" _kbhit: - BRK_TELEMON XRD0 + lda store_char ; Check if a key has been detected previously + beq @call_telemon ; No, calls Telemon routine + lda #$01 ; There is a key pressed previously, return 1 ldx #$00 - txa - rol - eor #$01 + rts +@call_telemon: + BRK_TELEMON XRD0 + + ldx #$00 + bcs @no_char_action + sta store_char + lda #$01 + rts +@no_char_action: + tax rts From 1281032f33125c541ff5aac0906fd97a390890b7 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 26 Apr 2022 10:23:38 +0200 Subject: [PATCH 1260/2710] FIX space --- libsrc/telestrat/kbhit.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/kbhit.s b/libsrc/telestrat/kbhit.s index da2c8b587..9af696e24 100644 --- a/libsrc/telestrat/kbhit.s +++ b/libsrc/telestrat/kbhit.s @@ -11,7 +11,7 @@ .include "telestrat.inc" _kbhit: - lda store_char ; Check if a key has been detected previously + lda store_char ; Check if a key has been detected previously beq @call_telemon ; No, calls Telemon routine lda #$01 ; There is a key pressed previously, return 1 ldx #$00 From 4474ed2668444238cf06207cb13a06711d11855f Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 26 Apr 2022 11:10:07 +0200 Subject: [PATCH 1261/2710] fix space --- libsrc/telestrat/kbhit.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/kbhit.s b/libsrc/telestrat/kbhit.s index 9af696e24..aea345036 100644 --- a/libsrc/telestrat/kbhit.s +++ b/libsrc/telestrat/kbhit.s @@ -16,7 +16,7 @@ _kbhit: lda #$01 ; There is a key pressed previously, return 1 ldx #$00 rts -@call_telemon: +@call_telemon: BRK_TELEMON XRD0 ldx #$00 From 4bfd57153f4b9733bec6684d2a25af60cb277df5 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 26 Apr 2022 14:14:27 +0200 Subject: [PATCH 1262/2710] fix bss --- libsrc/telestrat/cgetc.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/cgetc.s b/libsrc/telestrat/cgetc.s index e77ed794b..b76c62ee0 100644 --- a/libsrc/telestrat/cgetc.s +++ b/libsrc/telestrat/cgetc.s @@ -37,6 +37,6 @@ start: stx store_char rts .endproc -.data +.bss store_char: .byte 0 From a3ae28a81c0ed8e016f08aa1f91111a3f3184911 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 26 Apr 2022 17:07:57 +0200 Subject: [PATCH 1263/2710] added a test that must fail --- test/asm/Makefile | 2 +- test/asm/err/Makefile | 45 ++++++++++++++++++++++++++++++++++++++++ test/asm/err/bug1538-1.s | 3 +++ test/asm/readme.txt | 8 ++++++- 4 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 test/asm/err/Makefile create mode 100644 test/asm/err/bug1538-1.s diff --git a/test/asm/Makefile b/test/asm/Makefile index 82a0ba0e9..3481dae78 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -12,7 +12,7 @@ endif WORKDIR = ../testwrk/asm -SUBDIRS = cpudetect opcodes listing val +SUBDIRS = cpudetect opcodes listing val err .PHONY: all continue mostlyclean clean diff --git a/test/asm/err/Makefile b/test/asm/err/Makefile new file mode 100644 index 000000000..6d2430d34 --- /dev/null +++ b/test/asm/err/Makefile @@ -0,0 +1,45 @@ +# Makefile for the tests that MUST NOT compile + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + S = $(subst /,\,/) + NOT = - # Hack + NULLDEV = nul: + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /s /q $(subst /,\,$1) +else + S = / + NOT = ! + NULLDEV = /dev/null + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +ifdef QUIET + .SILENT: + NULLERR = 2>$(NULLDEV) +endif + +CA65 := $(if $(wildcard ../../../bin/ca65*),..$S..$S..$Sbin$Sca65,ca65) + +WORKDIR = ../../../testwrk/asm/err + +.PHONY: all clean + +SOURCES := $(wildcard *.s) +TESTS = $(patsubst %.s,$(WORKDIR)/%.prg,$(SOURCES)) + +all: $(TESTS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +$(WORKDIR)/%.prg: %.s | $(WORKDIR) + $(if $(QUIET),echo asm/err/$*.s) + $(NOT) $(CA65) -o $@ $< $(NULLERR) + +clean: + @$(call RMDIR,$(WORKDIR)) diff --git a/test/asm/err/bug1538-1.s b/test/asm/err/bug1538-1.s new file mode 100644 index 000000000..334d19c4c --- /dev/null +++ b/test/asm/err/bug1538-1.s @@ -0,0 +1,3 @@ + + ; this should produce a range error + .byte $1234 & $ffff diff --git a/test/asm/readme.txt b/test/asm/readme.txt index 787f2951e..c3198c12a 100644 --- a/test/asm/readme.txt +++ b/test/asm/readme.txt @@ -18,9 +18,15 @@ Overall tests: These go into listing/. Refer to listing/readme.txt -Val: +val: ---- Works very much like the /val directory used to test the compiler - individual tests are run in the simulator and should exit with an exit code of 0 when they pass, or either -1 or a number indicating what part of the test failed on error. + +err: +---- + +Works very much like the /err directory used to test the compiler - individual +tests are assembled and MUST NOT assemble without error. From f7a5f6ed734b8a60d38efbae18c939db32262dac Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 26 Apr 2022 17:08:19 +0200 Subject: [PATCH 1264/2710] test some more cases that should not change size --- test/asm/val/bug1538.s | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/test/asm/val/bug1538.s b/test/asm/val/bug1538.s index ca9a8b6e5..95aa89e34 100644 --- a/test/asm/val/bug1538.s +++ b/test/asm/val/bug1538.s @@ -62,7 +62,10 @@ test3: test3a: .byte tmp1 ; verify its 8bit test3b: .byte tmp1 & $ff ; AND with $ff should work of course test3c: .byte tmp1 & $ffff ; AND with $ffff should not change size -test3d: .word tmp1 & $ffffff ; AND with $ffffff should not change size +test3d: .byte tmp1 & $ffffff ; AND with $ffffff should not change size +test3e: .byte tmp1 & $ffffffff ; AND with $ffffffff should not change size +test3f: .word tmp1 & $ffffff ; AND with $ffffff should not change size +test3g: .word tmp1 & $ffffffff ; AND with $ffffffff should not change size test3chk: inx lda test3a @@ -85,7 +88,27 @@ test3chk: jne exiterror inx - lda test3d+1 + lda test3e + cmp #tmp1 + jne exiterror + + inx + lda test3f + cmp #tmp1 + jne exiterror + + inx + lda test3f+1 + cmp #$00 + jne exiterror + + inx + lda test3g + cmp #tmp1 + jne exiterror + + inx + lda test3g+1 cmp #$00 jne exiterror From ba5859f7243076a90fd0eaa8376b85911b7a75b3 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Wed, 27 Apr 2022 14:25:46 +0200 Subject: [PATCH 1265/2710] Update README.md --- README.md | 83 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index fa23b1be2..1bbeb5909 100644 --- a/README.md +++ b/README.md @@ -1,47 +1,48 @@ -[Windows Snapshot](https://sourceforge.net/projects/cc65/files/cc65-snapshot-win32.zip) - -[Linux Snapshot DEB and RPM](https://software.opensuse.org//download.html?project=home%3Astrik&package=cc65) - -[Documentation](https://cc65.github.io/doc) - -[Contributing](Contributing.md) to the CC65 project. - -The [Wiki](https://github.com/cc65/wiki/wiki) contains extra info that does not fit into the regular documentation. - -[![Snapshot Build](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml/badge.svg?branch=master)](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml) +# About cc65 cc65 is a complete cross development package for 65(C)02 systems, including a powerful macro assembler, a C compiler, linker, librarian and several -other tools. +other tools. cc65 has C and runtime library support for many of the old 6502 machines. +For details look at the [Website](https://cc65.github.io). -cc65 has C and runtime library support for many of the old 6502 machines, -including +## People -- the following Commodore machines: - - VIC20 - - C16/C116 and Plus/4 - - C64 - - C128 - - CBM 510 (aka P500) - - the 600/700 family - - newer PET machines (not 2001). -- the Apple ]\[+ and successors. -- the Atari 8-bit machines. -- the Atari 2600 console. -- the Atari 5200 console. -- the Atari 7800 console. -- GEOS for the C64, C128 and Apple //e. -- the Bit Corporation Gamate console. -- the NEC PC-Engine (aka TurboGrafx-16) console. -- the Nintendo Entertainment System (NES) console. -- the Watara Supervision console. -- the VTech Creativision console. -- the Oric Atmos. -- the Oric Telestrat. -- the Lynx console. -- the Ohio Scientific Challenger 1P. -- the Commander X16. -- the Synertek Systems Sym-1. +Core team members: -The libraries are fairly portable, so creating a version for other 6502s -shouldn't be too much work. +* [Christian Groessler](https://github.com/groessler): Atari, Atari5200, and CreatiVision library Maintainer +* [dqh](https://github.com/dqh-au): GHA help +* [Greg King](https://github.com/greg-king5): all around hackery +* [groepaz](https://github.com/mrdudz): CBM libary, Project Maintainer +* [Oliver Schmidt](https://github.com/oliverschmidt): Apple II library Maintainer + +External contributors: + +* [acqn](https://github.com/acqn): various compiler fixes +* [jedeoric](https://github.com/jedeoric): Telestrat target +* [jmr](https://github.com/jmr): compiler fixes +* [karrika](https://github.com/karrika): Atari 7800 target +* [Stephan Mühlstrasser](https://github.com/smuehlst): osic1p target + +*(The above list is incomplete, if you feel left out - please speak up or add yourself in a PR)* + +For a complete list look at the [full team list](https://github.com/orgs/cc65/teams) or the list of [all contributors](https://github.com/cc65/cc65/graphs/contributors) + +# Contact + +For general discussion, questions, etc subscribe to the [mailing list](https://cc65.github.io/mailing-lists.html) or use the [github discussions](https://github.com/cc65/cc65/discussions). + +# Documentation + +* The main [Documentation](https://cc65.github.io/doc) for users and developers + +* Info on [Contributing](Contributing.md) to the CC65 project. Please read this before working on something you want to contribute, and before reporting bugs. + +* The [Wiki](https://github.com/cc65/wiki/wiki) contains some extra info that does not fit into the regular documentation. + +# Downloads + +* [Windows Snapshot](https://sourceforge.net/projects/cc65/files/cc65-snapshot-win32.zip) + +* [Linux Snapshot DEB and RPM](https://software.opensuse.org//download.html?project=home%3Astrik&package=cc65) + +[![Snapshot Build](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml/badge.svg?branch=master)](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml) From 8669710c0f9909f8b3b825e3d0693b98563979fd Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Wed, 27 Apr 2022 16:17:04 +0000 Subject: [PATCH 1266/2710] build: allow empty prefix there was some concern that this will break windows' way of doing file lookups relatively from the binary, rather than via hardcoded locations, but so far each occurence adding e.g. "CA65_INC" to the pathsearch is already shielded with an #ifndef _WIN32. addressing #1726 --- doc/Makefile | 1 - libsrc/Makefile | 1 - samples/Makefile | 1 - src/Makefile | 3 +-- 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/doc/Makefile b/doc/Makefile index bb8f551ad..bfdf0cce3 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -46,7 +46,6 @@ clean: $(RM) -r ../html ../info install: - $(if $(PREFIX),,$(error variable "PREFIX" must be set)) ifeq ($(wildcard ../html),../html) $(INSTALL) -d $(DESTDIR)$(htmldir) $(INSTALL) -m0644 ../html/*.* $(DESTDIR)$(htmldir) diff --git a/libsrc/Makefile b/libsrc/Makefile index 177314bdf..2018de801 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -96,7 +96,6 @@ INSTALL = install define INSTALL_recipe -$(if $(PREFIX),,$(error variable "PREFIX" must be set)) $(INSTALL) -d $(DESTDIR)$(datadir)/$(dir) $(INSTALL) -m0644 ../$(dir)/*.* $(DESTDIR)$(datadir)/$(dir) diff --git a/samples/Makefile b/samples/Makefile index 9732cfac7..01ad6f983 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -525,7 +525,6 @@ INSTALL = install samplesdir = $(PREFIX)/share/cc65/samples install: - $(if $(PREFIX),,$(error variable "PREFIX" must be set)) $(INSTALL) -d $(DESTDIR)$(samplesdir) $(INSTALL) -d $(DESTDIR)$(samplesdir)/geos $(INSTALL) -d $(DESTDIR)$(samplesdir)/tutorial diff --git a/src/Makefile b/src/Makefile index 75b92394e..8356d0001 100644 --- a/src/Makefile +++ b/src/Makefile @@ -26,7 +26,7 @@ PROGS = ar65 \ .SUFFIXES: bindir := $(PREFIX)/bin -datadir := $(if $(PREFIX),$(PREFIX)/share/cc65,$(abspath ..)) +datadir := $(PREFIX)/share/cc65 CA65_INC = $(datadir)/asminc CC65_INC = $(datadir)/include @@ -111,7 +111,6 @@ $(RM) /usr/local/bin/$(prog) endef # UNAVAIL_recipe install: - $(if $(PREFIX),,$(error variable "PREFIX" must be set)) $(INSTALL) -d $(DESTDIR)$(bindir) $(INSTALL) ../bin/* $(DESTDIR)$(bindir) From 75ee10478e732c93ad18ecb8e48e6305b12d166d Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Thu, 28 Apr 2022 15:14:34 +0200 Subject: [PATCH 1267/2710] Update Contributing.md --- Contributing.md | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/Contributing.md b/Contributing.md index 8528997df..cf4daa9e6 100644 --- a/Contributing.md +++ b/Contributing.md @@ -48,16 +48,36 @@ color := $0787 ## C Sources +The following is still very incomplete - if in doubt please look at existing sourcefiles and adapt to the existing style + * Your files should obey the C89 standard. +* The normal indentation width should be four spaces. +* You must use ANSI C comments (```/* */```); you must not use C++ comments (```//```). +* When you add functions to an existing file, you should separate them by the same number of blank lines that separate the functions that already are in that file. +* All function declarations must be followed by a comment block that tells at least briefly what the function does, what the parameters are, and what is returned. This comment must sit between the declaration and the function body, like this: +<pre> +int foo(int bar) +/* Add 1 to bar, takes bar and returns the result */ +{ + return bar + 1; +} +</pre> +* When a function's argument list wraps around to a next line, you should indent that next line by either the normal width or enough spaces to align it with the arguments on the previous line. * All declarations in a block must be at the beginning of that block. * You should put a blank line between a list of local variable declarations and the first line of code. -* You must use ANSI C comments (```/* */```); you must not use C++ comments (```//```). -* The normal indentation width should be four spaces. -* When a function's argument list wraps around to a next line, you should indent that next line by either the normal width or enough spaces to align it with the arguments on the previous line. -* When you add functions to an existing file, you should separate them by the same number of blank lines that separate the functions that already are in that file. - -(The next two rules will be changed at some time in the future; but, for now:) - +* Always use curly braces even for single statements after ```if```, and the single statement should go into a new line. +* Use "cuddling" braces, ie the opening brace goes in the same line as the ```if```: +<pre> +if (foo > 42) { + bar = 23; +} +</pre> +* Should the ```if``` statement be followed by an empty conditional block, there should be a comment telling why this is the case +<pre> +if (check()) { + /* nothing happened, do nothing */ +} +</pre> * You must separate function names and parameter/argument lists by one space. * When declaring/defining pointers, you must put the asterisk (```*```) next to the data type, with a space between it and the variable's name. Examples: <pre> From b32c12dd831a85d9d15b57dde64e83fcf3513f15 Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Wed, 27 Apr 2022 17:33:41 +0000 Subject: [PATCH 1268/2710] implement AddSubSearchPathFromWinBin() counterpart for unix this looks up paths relative to the binary used to start the specific application. --- src/common/searchpath.c | 138 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 126 insertions(+), 12 deletions(-) diff --git a/src/common/searchpath.c b/src/common/searchpath.c index 70237a1c9..ac507d924 100644 --- a/src/common/searchpath.c +++ b/src/common/searchpath.c @@ -44,6 +44,12 @@ #else /* Anyone else */ # include <unistd.h> +# include <stdio.h> +# include <limits.h> +# ifndef PATH_MAX +# define PATH_MAX 4096 +# endif +# include "cmdline.h" #endif /* common */ @@ -157,18 +163,127 @@ void AddSubSearchPathFromEnv (SearchPaths* P, const char* EnvVar, const char* Su SB_Done (&Dir); } +#ifdef _WIN32 +#define PATHSEP "\\" +#undef PATH_MAX +#define PATH_MAX _MAX_PATH +#else +#define PATHSEP "/" + +/* + on POSIX-compatible operating system, a binary can be started in + 3 distinct ways: + + 1) using absolute path; in which case argv[0] starts with '/' + 2) using relative path; in which case argv[0] contains '/', but + does not start with it. e.g.: ./ca65 ; bin/cc65 + 3) using PATH environment variable, which is a colon-separated + list of directories which will be searched for a command + name used unprefixed. see execlp() and execvp() in man 3p exec: + +> The argument file is used to construct a pathname that identifies the new +> process image file. If the file argument contains a <slash> character, +> the file argument shall be used as the pathname for this file. +> Otherwise, the path prefix for this file is obtained by a search of the +> directories passed as the environment variable PATH (see the Base +> Definitions volume of POSIX.1*2008, Chapter 8, Environment Variables). +> If this environment variable is not present, the results of the search +> are implementation-defined. + +*/ + + + +static int SearchPathBin(const char* bin, char* buf, size_t buflen) +/* search colon-separated list of paths in PATH environment variable +** for the full path of argv[0]. +** returns 1 if successfull, in which case buf will contain the full path. +** bin = binary name (from argv[0]), buf = work buffer, buflen = sizeof buf +*/ +{ + char* p = getenv ("PATH"); + char* o; + size_t l; + + if (!p) { + return 0; + } + for (;;) { + o = buf; + l = buflen; + while (l && *p && *p != ':') { + *(o++) = *(p++); + l--; + } + snprintf (o, l, "/%s", bin); + if (access (buf, X_OK) == 0) { + return 1; + } + if (*p == ':') { + p++; + } else if (!p) { + break; + } + } + return 0; +} + + + +static char* MyDirname(char* in) +/* returns the dirname() part of a filename. +** the passed string is modified in place, then returned. +*/ +{ + char* p = strrchr (in, '/'); + + if (p) { + *p = 0; + } + return in; +} + + + +static char* GetProgPath(char* pathbuf, char* a0) +/* search for the full path of the binary using the argv[0] parameter +** passed to int main(), according to the description above. +** if the binary was started using a relative path, realpath(3p) will +** turn the relative path into an absolute path with pwd resolved, and +** gratuitous path components such as "./" or ".." removed. +** +** argument "pathbuf" is a work buffer of size PATH_MAX, +** "a0" the original argv[0]. +** returns pathbuf with the full path of the binary, minus the binary +** name itself. +*/ +{ + if (a0[0] == '/') { + strcpy (pathbuf, a0); + } else if (a0[0] == '.' || strrchr (a0, '/')) { + /* realpath returns the work buffer passed to it, so checking the + return value is superfluous. gcc11 warns anyway. */ + if (realpath (a0, pathbuf)) {} + } else { + SearchPathBin (a0, pathbuf, PATH_MAX); + } + return MyDirname(pathbuf); +} + +#endif + void AddSubSearchPathFromWinBin (SearchPaths* P, const char* SubDir) { /* Windows only: ** Add a search path from the running binary, adding a subdirectory to ** the parent directory of the directory containing the binary. */ -#if defined(_WIN32) - - char Dir[_MAX_PATH]; char* Ptr; + char Dir[PATH_MAX]; + +#if defined(_WIN32) if (GetModuleFileName (NULL, Dir, _MAX_PATH) == 0) { return; @@ -181,12 +296,18 @@ void AddSubSearchPathFromWinBin (SearchPaths* P, const char* SubDir) } *Ptr = '\0'; +#else + + GetProgPath(Dir, ArgVec[0]); + +#endif + /* Check for 'bin' directory */ - Ptr = strrchr (Dir, '\\'); + Ptr = strrchr (Dir, PATHSEP[0]); if (Ptr == 0) { return; } - if (strcmp (Ptr++, "\\bin") != 0) { + if (strcmp (Ptr++, PATHSEP "bin") != 0) { return; } @@ -195,13 +316,6 @@ void AddSubSearchPathFromWinBin (SearchPaths* P, const char* SubDir) /* Add the search path */ AddSearchPath (P, Dir); - -#else - - (void) P; - (void) SubDir; - -#endif } From d78672a4b437f894d6ec44a6bef087237310e767 Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Wed, 27 Apr 2022 21:11:01 +0000 Subject: [PATCH 1269/2710] rename AddSubSearchPathFromWinBin to AddSubSearchPathFromBin --- src/ca65/incpath.c | 2 +- src/cc65/incpath.c | 2 +- src/cl65/main.c | 2 +- src/common/searchpath.c | 2 +- src/common/searchpath.h | 5 ++--- src/ld65/filepath.c | 6 +++--- 6 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/ca65/incpath.c b/src/ca65/incpath.c index 42e54b2da..8ea67df6f 100644 --- a/src/ca65/incpath.c +++ b/src/ca65/incpath.c @@ -80,5 +80,5 @@ void FinishIncludePaths (void) #endif /* Add paths relative to the parent directory of the Windows binary. */ - AddSubSearchPathFromWinBin (IncSearchPath, "asminc"); + AddSubSearchPathFromBin (IncSearchPath, "asminc"); } diff --git a/src/cc65/incpath.c b/src/cc65/incpath.c index d32614cf9..85f6e070b 100644 --- a/src/cc65/incpath.c +++ b/src/cc65/incpath.c @@ -81,5 +81,5 @@ void FinishIncludePaths (void) #endif /* Add paths relative to the parent directory of the Windows binary. */ - AddSubSearchPathFromWinBin (SysIncSearchPath, "include"); + AddSubSearchPathFromBin (SysIncSearchPath, "include"); } diff --git a/src/cl65/main.c b/src/cl65/main.c index 701355904..5d84fb625 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -1218,7 +1218,7 @@ static void OptPrintTargetPath (const char* Opt attribute ((unused)), #if defined(CL65_TGT) && !defined(_WIN32) AddSearchPath (TargetPaths, CL65_TGT); #endif - AddSubSearchPathFromWinBin (TargetPaths, "target"); + AddSubSearchPathFromBin (TargetPaths, "target"); TargetPath = GetSearchPath (TargetPaths, 0); while (*TargetPath) { diff --git a/src/common/searchpath.c b/src/common/searchpath.c index ac507d924..f1ee0b6e2 100644 --- a/src/common/searchpath.c +++ b/src/common/searchpath.c @@ -274,7 +274,7 @@ static char* GetProgPath(char* pathbuf, char* a0) #endif -void AddSubSearchPathFromWinBin (SearchPaths* P, const char* SubDir) +void AddSubSearchPathFromBin (SearchPaths* P, const char* SubDir) { /* Windows only: ** Add a search path from the running binary, adding a subdirectory to diff --git a/src/common/searchpath.h b/src/common/searchpath.h index f078c0799..371388d38 100644 --- a/src/common/searchpath.h +++ b/src/common/searchpath.h @@ -75,9 +75,8 @@ void AddSubSearchPathFromEnv (SearchPaths* P, const char* EnvVar, const char* Su ** the environment variable value. */ -void AddSubSearchPathFromWinBin (SearchPaths* P, const char* SubDir); -/* Windows only: -** Add a search path from the running binary, adding a subdirectory to +void AddSubSearchPathFromBin (SearchPaths* P, const char* SubDir); +/* Add a search path from the running binary, adding a subdirectory to ** the parent directory of the directory containing the binary. */ diff --git a/src/ld65/filepath.c b/src/ld65/filepath.c index f722ad34b..1ceb2333e 100644 --- a/src/ld65/filepath.c +++ b/src/ld65/filepath.c @@ -99,7 +99,7 @@ void InitSearchPaths (void) #endif /* Add paths relative to the parent directory of the Windows binary. */ - AddSubSearchPathFromWinBin (LibDefaultPath, "lib"); - AddSubSearchPathFromWinBin (ObjDefaultPath, "lib"); - AddSubSearchPathFromWinBin (CfgDefaultPath, "cfg"); + AddSubSearchPathFromBin (LibDefaultPath, "lib"); + AddSubSearchPathFromBin (ObjDefaultPath, "lib"); + AddSubSearchPathFromBin (CfgDefaultPath, "cfg"); } From a5e69e7ea6a7990d827ecee121583dfb797833ee Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 2 Apr 2022 09:39:35 -0400 Subject: [PATCH 1270/2710] Upgraded the cx16 library to the Commander X16 Kernal ROM's prerelease 39. --- asminc/cbm_kernal.inc | 9 +++- asminc/cx16.inc | 104 ++++++++++++++++++++----------------- cfg/cx16-asm.cfg | 2 - doc/cx16.sgml | 26 ++++++---- include/cx16.h | 37 +++++++++---- libsrc/cx16/cgetc.s | 7 ++- libsrc/cx16/cpeekc.s | 9 +++- libsrc/cx16/cpeekcolor.s | 9 +++- libsrc/cx16/cpeekrevers.s | 9 +++- libsrc/cx16/cputc.s | 10 ++-- libsrc/cx16/crt0.s | 43 +++------------ libsrc/cx16/joy/cx16-std.s | 13 ++--- libsrc/cx16/kbhit.s | 11 ++-- libsrc/cx16/kernal.s | 11 ++-- libsrc/cx16/mou/cx16-std.s | 5 +- libsrc/cx16/tgi/cx320p1.s | 31 +++++------ libsrc/cx16/videomode.s | 36 +++++++------ libsrc/cx16/waitvsync.s | 8 +-- 18 files changed, 208 insertions(+), 172 deletions(-) diff --git a/asminc/cbm_kernal.inc b/asminc/cbm_kernal.inc index 5f41c6267..4d78cf93f 100644 --- a/asminc/cbm_kernal.inc +++ b/asminc/cbm_kernal.inc @@ -7,8 +7,13 @@ .if .def(__CX16__) ; CX16 extended jump table + KBDBUF_PEEK := $FEBD + KBDBUF_GET_MODIFIERS := $FEC0 + KBDBUF_PUT := $FEC3 + I2C_READ_BYTE := $FEC6 + I2C_WRITE_BYTE := $FEC9 + CX_MONITOR := $FECC ENTROPY_GET := $FECF - KEYBRD_BUF_PUT := $FED2 CONSOLE_SET_PAGE_MSG := $FED5 CONSOLE_PUT_IMAGE := $FED8 CONSOLE_INIT := $FEDB @@ -52,7 +57,7 @@ CLOCK_GET_DATE_TIME := $FF50 JOYSTICK_SCAN := $FF53 JOYSTICK_GET := $FF56 - SCREEN_SET_MODE := $FF5F + SCREEN_MODE := $FF5F SCREEN_SET_CHARSET := $FF62 MOUSE_CONFIG := $FF68 MOUSE_GET := $FF6B diff --git a/asminc/cx16.inc b/asminc/cx16.inc index 4d9ce89db..bf43e70c4 100644 --- a/asminc/cx16.inc +++ b/asminc/cx16.inc @@ -1,5 +1,5 @@ ; -; CX16 r38 definitions +; CX16 r39 definitions ; ; --------------------------------------------------------------------------- @@ -106,6 +106,10 @@ PI ; --------------------------------------------------------------------------- ; Zero page +; Banking registers +RAM_BANK := $00 +ROM_BANK := $01 + ; GEOS and graphics pseudo-registers .struct gREG .org $02 @@ -226,7 +230,7 @@ PI ; Kernal KTEMP2 := $80 ; 2 bytes for temporary storage IMPARM := $82 ; Pointer for PRIMM function -FNAM := $8C ; Pointer to filename +FNAM := $8A ; Pointer to filename ; BASIC TXTPTR := $EE ; Pointer into BASIC source code @@ -236,14 +240,13 @@ TXTPTR := $EE ; Pointer into BASIC source code BASIC_BUF := $0200 ; Location of command-line BASIC_BUF_LEN = 81 ; Maximum length of command-line -SCREEN_MODE := $0261 ; Current screen mode (set by SCREEN_SET_MODE) SCREEN_PTR := $0262 ; Pointer to current row on text screen (16 bits) -STATUS := $0286 ; Status from previous I/O operation -IN_DEV := $028A ; Current input device number -OUT_DEV := $028B ; Current output device number -FNAM_LEN := $028E ; Length of filename -SECADR := $0290 ; Secondary address -DEVNUM := $0291 ; Device number +STATUS := $0289 ; Status from previous I/O operation +IN_DEV := $028D ; Current input device number +OUT_DEV := $028E ; Current output device number +FNAM_LEN := $0291 ; Length of filename +SECADR := $0293 ; Secondary address +DEVNUM := $0294 ; Device number CURS_COLOR := $0373 ; Color under the cursor CHARCOLOR := $0376 ; Cursor's color nybbles (high: background, low: foreground) RVS := $0377 ; Reverse flag @@ -270,6 +273,42 @@ NMIVec := $0318 ; --------------------------------------------------------------------------- ; I/O locations +; 65C22 Versatile Interface Adapter +.struct VIA1 ; Versatile Interface Adapter + .org $9F00 + PRB .byte ; mouse, LED, VIC bus (Port Register B) + PRA .byte ; keyboard, controllers (Port Register A) + DDRB .byte ; (Data Direction Register B) + DDRA .byte ; (Data Direction Register A) + T1 .word ; (Timer 1) + T1L .word ; (Timer 1 Latch) + T2 .word ; (Timer 2) + SR .byte ; (Shift Register) + ACR .byte ; (Auxiliary Control Register) + PCR .byte ; (Peripheral Control Register) + IFR .byte ; (Interrupt Flags Register) + IER .byte ; (Interrupt Enable Register) + PRA2 .byte ; keyboard, controllers (PRA without handshake) +.endstruct + +; 65C22 Versatile Interface Adapter +.struct VIA2 + .org $9F10 + PRB .byte + PRA .byte + DDRB .byte + DDRA .byte + T1 .word + T1L .word + T2 .word + SR .byte + ACR .byte + PCR .byte + IFR .byte + IER .byte + PRA2 .byte +.endstruct + ; Video Enhanced Retro Adapter ; Has audio and SPI. .scope VERA @@ -498,44 +537,16 @@ NMIVec := $0318 .endstruct .endscope -; 65C22 -.struct VIA1 ; Versatile Interface Adapter - .org $9F60 - PRB .byte ; ROM bank, IEC (Port Register B) - PRA .byte ; RAM bank (Port Register A) - DDRB .byte ; (Data Direction Register B) - DDRA .byte ; (Data Direction Register A) - T1 .word ; (Timer 1) - T1L .word ; (Timer 1 Latch) - T2 .word ; (Timer 2) - SR .byte ; (Shift Register) - ACR .byte ; (Auxiliary Control Register) - PCR .byte ; (Peripheral Control Register) - IFR .byte ; (Interrupt Flags Register) - IER .byte ; (Interrupt Enable Register) - PRA2 .byte ; RAM bank (Port Register A without handshaking) +; YM2151 audio chip +.struct YM2151 + .org $9F40 + .union + STATUS .byte + ADDR .byte + .endunion + DATA .byte .endstruct -; 65C22 -.struct VIA2 - .org $9F70 - PRB .byte ; Mouse communication ? - PRA .byte ; NES controller communication - DDRB .byte - DDRA .byte - T1 .word - T1L .word - T2 .word - SR .byte - ACR .byte - PCR .byte - IFR .byte - IER .byte - PRA2 .byte -.endstruct - -; Real-Time Clock - ; X16 Emulator device ; This device doesn't exist on the real machine. .struct EMULATOR @@ -556,8 +567,7 @@ NMIVec := $0318 ; --------------------------------------------------------------------------- ; Banked RAM and ROM -KEY_COUNT := $A00A ; (bank 0) Number of keys in input buffer -TIMER := $A037 ; (bank 0) 60 Hz. timer (3 bytes, big-endian) +TIMER := $A03B ; (bank 0) 60 Hz. timer (3 bytes, big-endian) .struct BANK .org $A000 diff --git a/cfg/cx16-asm.cfg b/cfg/cx16-asm.cfg index 92c9d96f7..1b1cce8ec 100644 --- a/cfg/cx16-asm.cfg +++ b/cfg/cx16-asm.cfg @@ -1,5 +1,3 @@ -# Assembly configuration for R38 - FEATURES { STARTADDRESS: default = $0801; } diff --git a/doc/cx16.sgml b/doc/cx16.sgml index 9e743064f..78a51206b 100644 --- a/doc/cx16.sgml +++ b/doc/cx16.sgml @@ -200,15 +200,23 @@ access to hardware located in the address space. Some variables are structures, accessing the struct fields will access the chip registers. <descrip> - <tag><tt/VERA/</tag> - The <tt/VERA/ structure allows access - to the Video Enhanced Retro Adapter chip. + + <tag><tt/RAM_BANK/</tag> + A register that controls which bank of high RAM is visible in the + <tt/BANK_RAM/ window. + + <tag><tt/ROM_BANK/</tag> + A register that controls which bank of ROM is active at the moment. <tag><tt/VIA1, VIA2/</tag> Access to the two VIA (Versatile Interface Adapter) chips is available via the <tt/VIA1/ and <tt/VIA2/ variables. The structure behind those variables is explained in <tt/_6522.h/. + <tag><tt/VERA/</tag> + The <tt/VERA/ structure allows access + to the Video Enhanced Retro Adapter chip. + <tag><tt/BANK_RAM/</tag> A character array that mirrors the eight-Kibibyte window, at $A000, into banked RAM. @@ -219,7 +227,7 @@ structures, accessing the struct fields will access the chip registers. <sect>Loadable drivers<p> The names in the parentheses denote the symbols to be used for static linking -of the drivers. The names fit into the 8.3 character limit of the SD-Card's +of the drivers. The names fit into the old 8.3-character limit of the SD-Card's FAT32 file-system. @@ -230,7 +238,7 @@ point to <tt/cx320p1.tgi (cx320p1_tgi)/. <descrip> <tag><tt/cx320p1.tgi (cx320p1_tgi)/</tag> - This driver features a resolution of 320 across and 200 down with 256 colors, + This driver features a resolution of 320 across and 240 down with 256 colors, and a slightly adjustable palette (the order of the colors can be changed in a way that's compatible with some of the other color drivers). </descrip><p> @@ -248,10 +256,10 @@ point to <tt/cx16-std.joy (cx16_std_joy)/. <descrip> <tag><tt/cx16-std.joy (cx16_std_joy)/</tag> - Supports up to two NES (and SNES) controllers connected to the joystick ports - of the CX16. It reads the four directions, and the <bf/A/, <bf/B/, - <bf/Select/, and <bf/Start/ buttons. Buttons <bf/A/ and <bf/B/ are - the first and second fire buttons. + Supports the keyboard emulation of a controller and up to four SNES (and NES) + controllers connected to the joystick ports of the CX16. It reads the four + directions, and the <bf/A/, <bf/B/, <bf/Select/, and <bf/Start/ buttons. + Buttons <bf/A/ and <bf/B/ are the first and second fire buttons. </descrip><p> diff --git a/include/cx16.h b/include/cx16.h index 179021e84..615131f01 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -3,7 +3,7 @@ /* cx16.h */ /* */ /* CX16 system-specific definitions */ -/* For prerelease 38 */ +/* For prerelease 39 */ /* */ /* */ /* This software is provided "as-is", without any expressed or implied */ @@ -172,11 +172,16 @@ enum { }; /* Video modes for videomode() */ -#define VIDEOMODE_40x30 0x00 -#define VIDEOMODE_80x60 0x02 -#define VIDEOMODE_40COL VIDEOMODE_40x30 +#define VIDEOMODE_80x60 0x00 +#define VIDEOMODE_80x30 0x01 +#define VIDEOMODE_40x60 0x02 +#define VIDEOMODE_40x30 0x03 +#define VIDEOMODE_40x15 0x04 +#define VIDEOMODE_20x30 0x05 +#define VIDEOMODE_20x15 0x06 #define VIDEOMODE_80COL VIDEOMODE_80x60 -#define VIDEOMODE_320x200 0x80 +#define VIDEOMODE_40COL VIDEOMODE_40x30 +#define VIDEOMODE_320x240 0x80 #define VIDEOMODE_SWAP (-1) /* VERA's address increment/decrement numbers */ @@ -224,6 +229,13 @@ enum { /* Define hardware. */ +#define RAM_BANK (*(unsigned char *)0x00) +#define ROM_BANK (*(unsigned char *)0x01) + +#include <_6522.h> +#define VIA1 (*(volatile struct __6522 *)0x9F00) +#define VIA2 (*(volatile struct __6522 *)0x9F10) + /* A structure with the Video Enhanced Retro Adapter's external registers */ struct __vera { unsigned short address; /* Address for data ports */ @@ -274,12 +286,15 @@ struct __vera { }; #define VERA (*(volatile struct __vera *)0x9F20) -#include <_6522.h> -#define VIA1 (*(volatile struct __6522 *)0x9F60) -#define VIA2 (*(volatile struct __6522 *)0x9F70) - -#define RAM_BANK (VIA1.pra) -#define ROM_BANK (VIA1.prb) +/* Audio chip */ +struct __ym2151 { + union { + unsigned char reg; /* Register number for data */ + unsigned char status; /* Busy flag */ + }; + unsigned char data; +}; +#define YM2151 (*(volatile struct __ym2151 *)0x9F40) /* A structure with the x16emu's settings registers */ struct __emul { diff --git a/libsrc/cx16/cgetc.s b/libsrc/cx16/cgetc.s index 2372b431a..b4354197f 100644 --- a/libsrc/cx16/cgetc.s +++ b/libsrc/cx16/cgetc.s @@ -1,5 +1,5 @@ ; -; 2019-12-22, Greg King +; 2022-03-29, Greg King ; ; char cgetc (void); ; /* Return a character from the keyboard. */ @@ -13,6 +13,8 @@ .macpack generic +screen_addr := $1B000 ; VRAM address of text screen + _cgetc: jsr _kbhit bnz L3 ; Jump if there are already chars waiting @@ -57,8 +59,9 @@ setcursor: stz VERA::CTRL ; Use port 0 lda CURS_Y + add #<(>screen_addr) sta VERA::ADDR+1 ; Set row number - lda #VERA::INC1 ; Increment address by one + lda #VERA::INC1 | ^screen_addr ; Increment address by one sta VERA::ADDR+2 lda CURS_X ; Get character column asl a diff --git a/libsrc/cx16/cpeekc.s b/libsrc/cx16/cpeekc.s index 6756d995a..9f4b3b296 100644 --- a/libsrc/cx16/cpeekc.s +++ b/libsrc/cx16/cpeekc.s @@ -1,6 +1,6 @@ ; ; 2016-02-28, Groepaz -; 2020-04-29, Greg King +; 2022-03-29, Greg King ; ; char cpeekc (void); ; /* Return the character from the current cursor position. */ @@ -9,13 +9,18 @@ .export _cpeekc .include "cx16.inc" + .macpack generic +screen_addr := $1B000 ; VRAM address of text screen + _cpeekc: stz VERA::CTRL ; use port 0 lda CURS_Y + add #<(>screen_addr) sta VERA::ADDR+1 ; set row number - stz VERA::ADDR+2 + lda #^screen_addr + sta VERA::ADDR+2 lda CURS_X ; get character column asl a ; each character has two bytes sta VERA::ADDR diff --git a/libsrc/cx16/cpeekcolor.s b/libsrc/cx16/cpeekcolor.s index 9c167b07a..668f2a0da 100644 --- a/libsrc/cx16/cpeekcolor.s +++ b/libsrc/cx16/cpeekcolor.s @@ -1,5 +1,5 @@ ; -; 2020-04-30, Greg King +; 2022-03-29, Greg King ; ; unsigned char cpeekcolor (void); ; /* Return the colors from the current cursor position. */ @@ -8,8 +8,11 @@ .export _cpeekcolor .include "cx16.inc" + .macpack generic +screen_addr := $1B000 ; VRAM address of text screen + _cpeekcolor: php lda CURS_FLAG ; is the cursor currently off? @@ -22,8 +25,10 @@ _cpeekcolor: @L1: stz VERA::CTRL ; use port 0 lda CURS_Y + add #<(>screen_addr) sta VERA::ADDR+1 ; set row number - stz VERA::ADDR+2 + lda #^screen_addr + sta VERA::ADDR+2 lda CURS_X ; get character column sec ; color attribute is second byte rol a diff --git a/libsrc/cx16/cpeekrevers.s b/libsrc/cx16/cpeekrevers.s index fd7428779..1d10a2654 100644 --- a/libsrc/cx16/cpeekrevers.s +++ b/libsrc/cx16/cpeekrevers.s @@ -1,6 +1,6 @@ ; ; 2016-02-28, Groepaz -; 2020-04-30, Greg King +; 2022-03-29, Greg King ; ; unsigned char cpeekrevers (void); ; /* Return the reverse attribute from the current cursor position. @@ -11,8 +11,11 @@ .export _cpeekrevers .include "cx16.inc" + .macpack generic +screen_addr := $1B000 ; VRAM address of text screen + _cpeekrevers: php lda CURS_FLAG ; is the cursor currently off? @@ -25,8 +28,10 @@ _cpeekrevers: @L1: stz VERA::CTRL ; use port 0 lda CURS_Y + add #<(>screen_addr) sta VERA::ADDR+1 ; set row number - stz VERA::ADDR+2 + lda #^screen_addr + sta VERA::ADDR+2 lda CURS_X ; get character column asl a ; each character has two bytes sta VERA::ADDR diff --git a/libsrc/cx16/cputc.s b/libsrc/cx16/cputc.s index 4a7034e59..22327d25a 100644 --- a/libsrc/cx16/cputc.s +++ b/libsrc/cx16/cputc.s @@ -11,8 +11,11 @@ .import gotoxy, PLOT .include "cx16.inc" + .macpack generic +screen_addr := $1B000 ; VRAM address of text screen + ; Move to a cursor position, then print a character. _cputcxy: @@ -79,16 +82,17 @@ putchar: tax stz VERA::CTRL ; Use port 0 lda CURS_Y + add #<(>screen_addr) sta VERA::ADDR+1 ; Set row number - lda #VERA::INC1 ; Address increments by one + lda #VERA::INC1 | ^screen_addr ; Address increments by one sta VERA::ADDR+2 ldy CURS_X ; Get character column into .Y tya asl a ; Each character has two bytes sta VERA::ADDR - stx VERA::DATA0 + stx VERA::DATA0 ; Put the character lda CHARCOLOR - sta VERA::DATA0 + sta VERA::DATA0 ; Put its colors rts diff --git a/libsrc/cx16/crt0.s b/libsrc/cx16/crt0.s index be83927fc..e37a64a7c 100644 --- a/libsrc/cx16/crt0.s +++ b/libsrc/cx16/crt0.s @@ -1,5 +1,5 @@ ; -; Start-up code for cc65 (CX16 r35 version) +; Start-up code for cc65 (CX16 r39 version) ; .export _exit @@ -20,7 +20,7 @@ .segment "STARTUP" Start: tsx - stx spsave ; Save the system stack ptr + stx spsave ; Save the system stack ptr. ; Save space by putting some of the start-up code in the ONCE segment ; which will be re-used by the BSS segment, the heap, and the C stack. @@ -46,26 +46,14 @@ _exit: jsr donelib -.if 0 ; (We don't need to preserve zero-page space for cc65's variables.) -; Copy back the zero-page stuff. - - ldx #zpspace-1 -L2: lda zpsave,x - sta sp,x - dex - bpl L2 -.endif - ; Restore the system stuff. ldx spsave txs ; Restore stack pointer ldx ramsave - stx VIA1::PRA ; Restore former RAM bank - lda VIA1::PRB - and #<~$07 - ora #$04 - sta VIA1::PRB ; Change back to BASIC ROM + stx RAM_BANK ; Restore former RAM bank + lda #$04 + sta ROM_BANK ; Change back to BASIC ROM ; Back to BASIC. @@ -79,26 +67,14 @@ L2: lda zpsave,x init: ; Change from BASIC's ROM to Kernal's ROM. - lda VIA1::PRB - and #<~$07 - sta VIA1::PRB + stz ROM_BANK ; Change to the second RAM bank. - lda VIA1::PRA + lda RAM_BANK sta ramsave ; Save the current RAM bank number lda #$01 - sta VIA1::PRA - -.if 0 ; (We don't need to preserve zero-page space for cc65's variables.) -; Save the zero-page locations that we need. - - ldx #zpspace-1 -L1: lda sp,x - sta zpsave,x - dex - bpl L1 -.endif + sta RAM_BANK ; Set up the stack. @@ -125,6 +101,3 @@ L1: lda sp,x ramsave: .res 1 spsave: .res 1 -.if 0 -zpsave: .res zpspace -.endif diff --git a/libsrc/cx16/joy/cx16-std.s b/libsrc/cx16/joy/cx16-std.s index 5c10c0592..a40fcb061 100644 --- a/libsrc/cx16/joy/cx16-std.s +++ b/libsrc/cx16/joy/cx16-std.s @@ -2,7 +2,7 @@ ; Standard joystick driver for the CX16. ; May be installed multiple times when statically linked to an application. ; -; 2019-12-24, Greg King +; 2021-04-07, Greg King ; .include "joy-kernel.inc" @@ -41,7 +41,7 @@ ; ------------------------------------------------------------------------ ; Constant -JOY_COUNT = 2 ; Number of joysticks we support +JOY_COUNT = $05 ; Number of joysticks we support ; ------------------------------------------------------------------------ ; Data. @@ -51,8 +51,7 @@ JOY_COUNT = 2 ; Number of joysticks we support ; ------------------------------------------------------------------------ ; INSTALL routine -- is called after the driver is loaded into memory. -; If possible, check if the hardware is present, and determine the amount -; of memory available. +; If possible, check if the hardware is present. ; Must return a JOY_ERR_xx code in .XA . INSTALL: @@ -77,8 +76,10 @@ COUNT: lda #<JOY_COUNT ; ------------------------------------------------------------------------ ; READ: Read a particular joystick passed in .A . -READ: and #%00000001 - jsr JOYSTICK_GET +READ: cmp #JOY_COUNT + blt :+ + lda #$00 +: jsr JOYSTICK_GET sta tmp1 txa bit #%00001110 ; Is it NES or SNES controller? diff --git a/libsrc/cx16/kbhit.s b/libsrc/cx16/kbhit.s index d7e22efd1..3cfe351a9 100644 --- a/libsrc/cx16/kbhit.s +++ b/libsrc/cx16/kbhit.s @@ -1,5 +1,5 @@ ; -; 2020-01-08, Greg King +; 2022-03-28, Greg King ; ; unsigned char kbhit (void); ; /* Returns non-zero (true) if a typed character is waiting. */ @@ -7,14 +7,11 @@ .export _kbhit - .include "cx16.inc" + .import KBDBUF_PEEK .proc _kbhit - ldy VIA1::PRA ; (KEY_COUNT is in RAM bank 0) - stz VIA1::PRA - lda KEY_COUNT ; Get number of characters - sty VIA1::PRA - tax ; High byte of return (only its zero/nonzero ... + jsr KBDBUF_PEEK + txa ; Low byte of return (only its zero/nonzero ... rts ; ... state matters) .endproc diff --git a/libsrc/cx16/kernal.s b/libsrc/cx16/kernal.s index a252569e5..40bcfed11 100644 --- a/libsrc/cx16/kernal.s +++ b/libsrc/cx16/kernal.s @@ -1,13 +1,18 @@ ; -; 2020-04-27, Greg King +; 2022-03-28, Greg King ; ; CX16 Kernal functions ; .include "cbm_kernal.inc" + .export KBDBUF_PEEK + .export KBDBUF_GET_MODIFIERS + .export KBDBUF_PUT + .export I2C_READ_BYTE + .export I2C_WRITE_BYTE + .export CX_MONITOR .export ENTROPY_GET - .export KEYBRD_BUF_PUT .export CONSOLE_SET_PAGE_MSG .export CONSOLE_PUT_IMAGE .export CONSOLE_INIT @@ -50,7 +55,7 @@ .export CLOCK_GET_DATE_TIME .export JOYSTICK_SCAN .export JOYSTICK_GET - .export SCREEN_SET_MODE + .export SCREEN_MODE .export SCREEN_SET_CHARSET .export MOUSE_CONFIG .export MOUSE_GET diff --git a/libsrc/cx16/mou/cx16-std.s b/libsrc/cx16/mou/cx16-std.s index 0d046bbc2..3af7d2eb3 100644 --- a/libsrc/cx16/mou/cx16-std.s +++ b/libsrc/cx16/mou/cx16-std.s @@ -1,7 +1,7 @@ ; ; Driver for the Commander X16 Kernal's mouse driver. ; -; 2019-12-25, Greg King +; 2022-03-28, Greg King ; .include "zeropage.inc" @@ -118,7 +118,8 @@ INSTALL: dex bpl @L1 - ldx #$00 ; Don't change sprite's scale + sec ; Get screen geometry + jsr SCREEN_MODE lda #$01 ; Create sprite jsr MOUSE_CONFIG diff --git a/libsrc/cx16/tgi/cx320p1.s b/libsrc/cx16/tgi/cx320p1.s index 1ad5c2cbd..2fcd9adf3 100644 --- a/libsrc/cx16/tgi/cx320p1.s +++ b/libsrc/cx16/tgi/cx320p1.s @@ -1,8 +1,8 @@ ; -; Graphics driver for the 320 pixels across, 200 pixels down, 256 colors mode +; Graphics driver for the 320 pixels across, 240 pixels down, 256 colors mode ; on the Commander X16 ; -; 2020-07-02, Greg King <gregdk@users.sf.net> +; 2022-03-30, Greg King <gregdk@users.sf.net> ; .include "zeropage.inc" @@ -39,7 +39,7 @@ .byte TGI_API_VERSION ; TGI API version number .addr $0000 ; Library reference .word 320 ; X resolution - .word 200 ; Y resolution + .word 240 ; Y resolution .byte <$0100 ; Number of drawing colors .byte 1 ; Number of screens available .byte 8 ; System font X size @@ -100,7 +100,7 @@ palette: .res $0100 bcolor := palette + 0 ; Background color color: .res 1 ; Stroke and fill index -mode: .res 1 ; Old text mode +text_mode: .res 1 ; Old text mode .data @@ -152,13 +152,15 @@ INIT: stz error ; #TGI_ERR_OK ; Save the current text mode. - lda SCREEN_MODE - sta mode + sec + jsr SCREEN_MODE + sta text_mode -; Switch into (320 x 200 x 256) graphics mode. +; Switch into (320 x 240 x 256) graphics mode. lda #GRAPH320 - jmp SCREEN_SET_MODE + clc + jmp SCREEN_MODE ; ------------------------------------------------------------------------ ; DONE: Will be called to switch the graphics device back into text mode. @@ -168,16 +170,9 @@ INIT: stz error ; #TGI_ERR_OK ; Must set an error code: NO DONE: -; Work around a prerelease 37 Kernal bug. -; VERA (graphics) layer 0 isn't disabled by SCREEN_SET_MODE. - - stz VERA::CTRL - lda VERA::DISP::VIDEO - and #<~VERA::DISP::ENABLE::LAYER0 - sta VERA::DISP::VIDEO - - lda mode - jmp SCREEN_SET_MODE + lda text_mode + clc + jmp SCREEN_MODE ; ------------------------------------------------------------------------ ; GETERROR: Return the error code in .A, and clear it. diff --git a/libsrc/cx16/videomode.s b/libsrc/cx16/videomode.s index 8fe797449..998316858 100644 --- a/libsrc/cx16/videomode.s +++ b/libsrc/cx16/videomode.s @@ -1,10 +1,15 @@ ; -; 2020-01-06, Greg King +; 2022-03-28, Greg King ; ; /* Video mode defines */ -; #define VIDEOMODE_40x30 0x00 -; #define VIDEOMODE_80x60 0x02 -; #define VIDEOMODE_320x200 0x80 +; #define VIDEOMODE_80x60 0x00 +; #define VIDEOMODE_80x30 0x01 +; #define VIDEOMODE_40x60 0x02 +; #define VIDEOMODE_40x30 0x03 +; #define VIDEOMODE_40x15 0x04 +; #define VIDEOMODE_20x30 0x05 +; #define VIDEOMODE_20x15 0x06 +; #define VIDEOMODE_320x240 0x80 ; #define VIDEOMODE_SWAP (-1) ; ; signed char __fastcall__ videomode (signed char Mode); @@ -16,25 +21,26 @@ .export _videomode - .import SCREEN_SET_MODE - .include "cx16.inc" + .import SCREEN_MODE .proc _videomode - ldx SCREEN_MODE ; Get old mode - phx - - jsr SCREEN_SET_MODE + sec ; Get old mode + pha + jsr SCREEN_MODE + plx + pha ; Save old mode + txa + clc ; Set new mode + jsr SCREEN_MODE pla ; Get back old mode ldx #>$0000 ; Clear high byte - bcs @L1 - rts + bcc @L1 -; The new mode is invalid. Go back to the old one. Return -1. +; The new mode is invalid. Return -1. -@L1: sta SCREEN_MODE dex txa - rts +@L1: rts .endproc diff --git a/libsrc/cx16/waitvsync.s b/libsrc/cx16/waitvsync.s index 6316a0483..dc0509223 100644 --- a/libsrc/cx16/waitvsync.s +++ b/libsrc/cx16/waitvsync.s @@ -1,5 +1,5 @@ ; -; 2020-01-08, Greg King +; 2021-04-01, Greg King ; ; void waitvsync (void); ; /* Wait for the start of the next video field. */ @@ -12,10 +12,10 @@ .include "cx16.inc" _waitvsync: - ldx VIA1::PRA ; (TIMER is in RAM bank 0) - stz VIA1::PRA + ldx RAM_BANK ; (TIMER is in RAM bank 0) + stz RAM_BANK lda TIMER + 2 : cmp TIMER + 2 beq :- ; Wait for next jiffy - stx VIA1::PRA + stx RAM_BANK rts From 74f92564c396464bad44cb94881bd9c0ac525f48 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Sat, 30 Apr 2022 15:01:58 +0200 Subject: [PATCH 1271/2710] Try reading from /proc/self first on linux, this is needed to make the edgy "make avail" work --- src/common/searchpath.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/common/searchpath.c b/src/common/searchpath.c index f1ee0b6e2..ebf14106f 100644 --- a/src/common/searchpath.c +++ b/src/common/searchpath.c @@ -296,10 +296,23 @@ void AddSubSearchPathFromBin (SearchPaths* P, const char* SubDir) } *Ptr = '\0'; +#elif defined(__linux__) + + /* reading from proc will return the real location, excluding symlinked + pathes - which is needed for certain edgy cases */ + if (readlink("/proc/self/exe", Dir, sizeof(Dir) - 1) < 0) { + GetProgPath(Dir, ArgVec[0]); + } else { + /* Remove binary name */ + Ptr = strrchr (Dir, PATHSEP[0]); + if (Ptr == 0) { + return; + } + *Ptr = '\0'; + } + #else - GetProgPath(Dir, ArgVec[0]); - #endif /* Check for 'bin' directory */ From 20dd6fd8724597d02923440afb81f189a0eae2a5 Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Mon, 2 May 2022 08:22:21 +0000 Subject: [PATCH 1272/2710] change GetProgPath() to return full & resolved binary path GetProgPath() now resolves the path derived from argv[0] always via realpath(3p) to its real location in the filesystem, and returns the path including binary name, effectively making it work like windows' GetModuleFileName(), so we can re-use the existing code to strip the trailing binary name. since symlinks are now always resolved, we no longer need the special case code for linux to use /proc/self/exe for this purpose. --- src/common/searchpath.c | 73 ++++++++++++++--------------------------- 1 file changed, 24 insertions(+), 49 deletions(-) diff --git a/src/common/searchpath.c b/src/common/searchpath.c index ebf14106f..fc23f47cb 100644 --- a/src/common/searchpath.c +++ b/src/common/searchpath.c @@ -232,44 +232,32 @@ static int SearchPathBin(const char* bin, char* buf, size_t buflen) -static char* MyDirname(char* in) -/* returns the dirname() part of a filename. -** the passed string is modified in place, then returned. -*/ -{ - char* p = strrchr (in, '/'); - - if (p) { - *p = 0; - } - return in; -} - - - static char* GetProgPath(char* pathbuf, char* a0) /* search for the full path of the binary using the argv[0] parameter ** passed to int main(), according to the description above. -** if the binary was started using a relative path, realpath(3p) will -** turn the relative path into an absolute path with pwd resolved, and -** gratuitous path components such as "./" or ".." removed. +** +** the binary name will be passed to realpath(3p) to have all symlinks +** resolved and gratuitous path components like "../" removed. ** ** argument "pathbuf" is a work buffer of size PATH_MAX, ** "a0" the original argv[0]. -** returns pathbuf with the full path of the binary, minus the binary -** name itself. +** returns pathbuf with the full path of the binary. */ { - if (a0[0] == '/') { - strcpy (pathbuf, a0); - } else if (a0[0] == '.' || strrchr (a0, '/')) { - /* realpath returns the work buffer passed to it, so checking the - return value is superfluous. gcc11 warns anyway. */ - if (realpath (a0, pathbuf)) {} - } else { - SearchPathBin (a0, pathbuf, PATH_MAX); + char tmp[PATH_MAX]; + + if (!strchr(a0, '/')) { + /* path doesn't contain directory separator, so it was looked up + via PATH environment variable */ + SearchPathBin (a0, tmp, PATH_MAX); + a0 = tmp; } - return MyDirname(pathbuf); + + /* realpath returns the work buffer passed to it, so checking the + return value is superfluous. gcc11 warns anyway. */ + if (realpath (a0, pathbuf)) {} + + return pathbuf; } #endif @@ -289,32 +277,19 @@ void AddSubSearchPathFromBin (SearchPaths* P, const char* SubDir) return; } +#else + + GetProgPath(Dir, ArgVec[0]); + +#endif + /* Remove binary name */ - Ptr = strrchr (Dir, '\\'); + Ptr = strrchr (Dir, PATHSEP[0]); if (Ptr == 0) { return; } *Ptr = '\0'; -#elif defined(__linux__) - - /* reading from proc will return the real location, excluding symlinked - pathes - which is needed for certain edgy cases */ - if (readlink("/proc/self/exe", Dir, sizeof(Dir) - 1) < 0) { - GetProgPath(Dir, ArgVec[0]); - } else { - /* Remove binary name */ - Ptr = strrchr (Dir, PATHSEP[0]); - if (Ptr == 0) { - return; - } - *Ptr = '\0'; - } - -#else - GetProgPath(Dir, ArgVec[0]); -#endif - /* Check for 'bin' directory */ Ptr = strrchr (Dir, PATHSEP[0]); if (Ptr == 0) { From f34bd59660729276fb79641168bf25e0aa1afc4c Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 2 May 2022 11:44:47 -0500 Subject: [PATCH 1273/2710] Added myself as an external contributor for the Sym-1 target --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1bbeb5909..530efdfdb 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ External contributors: * [jmr](https://github.com/jmr): compiler fixes * [karrika](https://github.com/karrika): Atari 7800 target * [Stephan Mühlstrasser](https://github.com/smuehlst): osic1p target +* [Wayne Parham](https://github.com/WayneParham): Sym-1 target *(The above list is incomplete, if you feel left out - please speak up or add yourself in a PR)* From 71cec58d86172aa86d3d1b578eea0d44a51a2f95 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Thu, 5 May 2022 14:24:02 +0200 Subject: [PATCH 1274/2710] Adjust comments --- src/common/searchpath.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/common/searchpath.c b/src/common/searchpath.c index fc23f47cb..3628dab5c 100644 --- a/src/common/searchpath.c +++ b/src/common/searchpath.c @@ -263,11 +263,14 @@ static char* GetProgPath(char* pathbuf, char* a0) #endif void AddSubSearchPathFromBin (SearchPaths* P, const char* SubDir) -{ -/* Windows only: -** Add a search path from the running binary, adding a subdirectory to +/* Add a search path from the running binary, adding a subdirectory to ** the parent directory of the directory containing the binary. +** +** currently this will work on POSIX systems and on Windows. Should +** we run into build errors on systems that are neither, we must add +** another exception below. */ +{ char* Ptr; char Dir[PATH_MAX]; @@ -277,7 +280,7 @@ void AddSubSearchPathFromBin (SearchPaths* P, const char* SubDir) return; } -#else +#else /* POSIX */ GetProgPath(Dir, ArgVec[0]); From 348ea815b0beca2ac7c8ab293caf4e0c01ca5dc5 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Thu, 5 May 2022 22:43:06 +0200 Subject: [PATCH 1275/2710] fix mkdir --- libsrc/telestrat/sysmkdir.s | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libsrc/telestrat/sysmkdir.s b/libsrc/telestrat/sysmkdir.s index 259be8d7c..0ca897c17 100644 --- a/libsrc/telestrat/sysmkdir.s +++ b/libsrc/telestrat/sysmkdir.s @@ -3,6 +3,8 @@ ; ; unsigned char _sysmkdir (const char* name, ...); ; +; This routine only works with Orix + .export __sysmkdir .import addysp, popax @@ -10,7 +12,6 @@ .include "telestrat.inc" .include "zeropage.inc" - __sysmkdir: ; Throw away all parameters except the name dey @@ -20,11 +21,13 @@ __sysmkdir: ; Get name jsr popax - ; Call telemon primitive + stx tmp1 + ldy tmp1 + ldx #$00 ; X register is used to set if all folders must be created + + ; Call telemon primitive + BRK_TELEMON(XMKDIR) rts - - - From 47743d5fcff1c1e04bd015660d3f73d2a9fa108f Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Thu, 5 May 2022 22:50:37 +0200 Subject: [PATCH 1276/2710] fix space --- libsrc/telestrat/sysmkdir.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/sysmkdir.s b/libsrc/telestrat/sysmkdir.s index 0ca897c17..6b0d62264 100644 --- a/libsrc/telestrat/sysmkdir.s +++ b/libsrc/telestrat/sysmkdir.s @@ -27,7 +27,7 @@ __sysmkdir: ldx #$00 ; X register is used to set if all folders must be created ; Call telemon primitive - + BRK_TELEMON(XMKDIR) rts From 8bdc3b092cf0066f3fa1a09c9604133b98c743f2 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Fri, 6 May 2022 22:13:33 +0200 Subject: [PATCH 1277/2710] Update Contributing.md --- Contributing.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Contributing.md b/Contributing.md index 18243b3bb..acaa396b1 100644 --- a/Contributing.md +++ b/Contributing.md @@ -51,6 +51,9 @@ color := $0787 The following is still very incomplete - if in doubt please look at existing sourcefiles and adapt to the existing style * Your files should obey the C89 standard. +* We generally have a "no warnings" policy +* Warnings must not be hidden by using typecasts - fix the code instead + * In printf-style functions use the PRIX64 (and similar) macros to deal with 64bit values * The normal indentation width should be four spaces. * You must use ANSI C comments (```/* */```); you must not use C++ comments (```//```). * When you add functions to an existing file, you should separate them by the same number of blank lines that separate the functions that already are in that file. From e0ae8ddc68d8a4f41d003ba81f38e667c240978f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 13:18:27 +0200 Subject: [PATCH 1278/2710] add sourcelines to the generated asm for easier inspection, redirect output of sim65, including cycle count, into a seperate .out file per program --- test/val/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/val/Makefile b/test/val/Makefile index 1a9fa9a45..acac670cb 100644 --- a/test/val/Makefile +++ b/test/val/Makefile @@ -22,7 +22,7 @@ ifdef QUIET NULLERR = 2>$(NULLDEV) endif -SIM65FLAGS = -x 5000000000 +SIM65FLAGS = -x 5000000000 -c CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) CA65 := $(if $(wildcard ../../bin/ca65*),..$S..$Sbin$Sca65,ca65) @@ -48,10 +48,10 @@ define PRG_template $(WORKDIR)/%.$1.$2.prg: %.c | $(WORKDIR) $(if $(QUIET),echo val/$$*.$1.$2.prg) - $(CC65) -t sim$2 $$(CC65FLAGS) -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CC65) -t sim$2 $$(CC65FLAGS) --add-source -$1 -o $$(@:.prg=.s) $$< $(NULLERR) $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) - $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) + $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/$$@.out endef # PRG_template From e6b9a4b2924f6e2bbb5f6e1c62e8c2e5cc7423e8 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 13:19:32 +0200 Subject: [PATCH 1279/2710] test related to issue #1652, shows regression broken by #1231 and the case that #1231 improved. --- test/val/bug1652-optimizer.c | 122 +++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 test/val/bug1652-optimizer.c diff --git a/test/val/bug1652-optimizer.c b/test/val/bug1652-optimizer.c new file mode 100644 index 000000000..7926ef770 --- /dev/null +++ b/test/val/bug1652-optimizer.c @@ -0,0 +1,122 @@ + +/* #1652 - Regression in code optimization */ + +#include <stdlib.h> + +/* better before pr#1231 + +before: + + jsr pusha + ldy #$01 + ldx #$00 + lda (sp),y + beq L0005 + lda (sp,x) + beq L0005 + txa + jmp incsp2 ; <-- +L0005: tya + jmp incsp2 + +after: + + jsr pusha + ldy #$01 + ldx #$00 + lda (sp),y + beq L0004 + lda (sp,x) + beq L0004 + txa + jmp L0001 ; <-- +L0004: tya +L0001: jmp incsp2 + +*/ + +int foo(unsigned char bar, unsigned char baz) +{ + return (bar == 0 || baz == 0); +} + +/* worse before pr#1231 + +before: +; +; y = 1; +; + lda #$01 + sta _y +; +; (*tablePtr)[y][x] = 83; +; + ldx #$00 + lda _y + jsr aslax2 + clc + adc _tablePtr + pha + txa + adc _tablePtr+1 + tax + pla + clc + adc _x + bcc L0019 + inx +L0019: + sta ptr1 + stx ptr1+1 + lda #$53 + ldy #$00 + sta (ptr1),y + +after: + +; +; y = 1; +; + lda #$01 + sta _y +; +; (*tablePtr)[y][x] = 83; +; + ldx #$00 + lda _y + jsr aslax2 + clc + adc _tablePtr + sta ptr1 + txa + adc _tablePtr+1 + sta ptr1+1 + ldy _x + lda #$53 + sta (ptr1),y +*/ + +typedef unsigned char array_t[4][4]; + +static array_t table = { + {12, 13, 14, 15}, + { 8, 9, 10, 11}, + { 4, 5, 6, 7}, + { 0, 1, 2, 3} +}; +static array_t *tablePtr = &table; + +static unsigned char y = 0, x; + +void pointed_array(void) +{ + x = 3; + y = 1; + (*tablePtr)[y][x] = 83; +} + +int main(void) +{ + pointed_array(); + return foo(2, 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} From 5813fd81d383f3e0520a41197ffa44b92b272cb9 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 13:20:18 +0200 Subject: [PATCH 1280/2710] add extra optimizer step that replaces BRA by JMP if the target is external --- src/cc65/coptjmp.c | 31 +++++++++++++++++++++++++++++++ src/cc65/coptjmp.h | 3 +++ 2 files changed, 34 insertions(+) diff --git a/src/cc65/coptjmp.c b/src/cc65/coptjmp.c index dd092a5ad..9dd4a29c5 100644 --- a/src/cc65/coptjmp.c +++ b/src/cc65/coptjmp.c @@ -194,6 +194,37 @@ unsigned OptBranchDist (CodeSeg* S) +unsigned OptBranchDist2 (CodeSeg* S) +/* Change BRA to JMP if target is an external symbol */ +{ + unsigned Changes = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + if ((CPUIsets[CPU] & (CPU_ISET_65SC02 |CPU_ISET_6502DTV)) != 0 && /* CPU has BRA */ + (E->Info & OF_UBRA) != 0 && /* is a unconditional branch */ + E->JumpTo == NULL) { /* target is extern */ + /* BRA jumps to external symbol and must be replaced by a JMP on the 65C02 CPU */ + CE_ReplaceOPC (E, OP65_JMP); + ++Changes; + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + /*****************************************************************************/ /* Replace jumps to RTS by RTS */ /*****************************************************************************/ diff --git a/src/cc65/coptjmp.h b/src/cc65/coptjmp.h index 4cb7a2792..8df53415d 100644 --- a/src/cc65/coptjmp.h +++ b/src/cc65/coptjmp.h @@ -52,6 +52,9 @@ unsigned OptBranchDist (CodeSeg* S); /* Change branches for the distance needed. */ +unsigned OptBranchDist2 (CodeSeg* S); +/* If BRA points to an external symbol, change it to JMP */ + unsigned OptRTSJumps1 (CodeSeg* S); /* Replace jumps to RTS by RTS */ From 43af562ce1edce52eaa33fd88ce980c27517c45a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 13:22:10 +0200 Subject: [PATCH 1281/2710] At the end of the optimizer run, remove jump cascades again. fixes the regression reported in #1652 --- src/cc65/codeopt.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index 29fa79d26..9c90a0e5f 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -117,6 +117,7 @@ static OptFunc DOptBNegAX3 = { OptBNegAX3, "OptBNegAX3", 100, 0, static OptFunc DOptBNegAX4 = { OptBNegAX4, "OptBNegAX4", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptBoolTrans = { OptBoolTrans, "OptBoolTrans", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptBranchDist = { OptBranchDist, "OptBranchDist", 0, 0, 0, 0, 0, 0 }; +static OptFunc DOptBranchDist2 = { OptBranchDist2, "OptBranchDist2", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptCmp1 = { OptCmp1, "OptCmp1", 42, 0, 0, 0, 0, 0 }; static OptFunc DOptCmp2 = { OptCmp2, "OptCmp2", 85, 0, 0, 0, 0, 0 }; static OptFunc DOptCmp3 = { OptCmp3, "OptCmp3", 75, 0, 0, 0, 0, 0 }; @@ -222,6 +223,7 @@ static OptFunc* OptFuncs[] = { &DOptBNegAX4, &DOptBoolTrans, &DOptBranchDist, + &DOptBranchDist2, &DOptCmp1, &DOptCmp2, &DOptCmp3, @@ -849,6 +851,10 @@ static unsigned RunOptGroup7 (CodeSeg* S) /* Replace JSR followed by RTS to JMP */ C += RunOptFunc (S, &DOptRTS, 1); + /* Replace JMP/BRA to JMP by direct JMP */ + C += RunOptFunc (S, &DOptJumpCascades, 1); + C += RunOptFunc (S, &DOptBranchDist2, 1); + Changes += C; /* If we had changes, we must run dead code elimination again, ** since the changes may have introduced dead code. From fc4faa582a7831e9849dbd4e8d6b4b437535f791 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 18:46:12 +0200 Subject: [PATCH 1282/2710] Update Contributing.md --- Contributing.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Contributing.md b/Contributing.md index acaa396b1..9572dd6e0 100644 --- a/Contributing.md +++ b/Contributing.md @@ -2,6 +2,8 @@ This document contains all kinds of information that you should know if you want (''Note:'' The word "must" indicates a requirement. The word "should" indicates a recomendation.) +*this is work in progress and is constantly updated - if in doubt, please ask* + # generally * You must obey these rules when contributing new code or documentation to cc65. We are well aware that not all existing code may respect all rules outlined here - but this is no reason for you not to respect them. @@ -88,6 +90,21 @@ if (check()) { char* nextLine (FILE* f); </pre> +### Header files + +Headers that belong to the standard library (libc) must conform with the C standard. That means: +* all non standard functions, or functions that only exist in a certain standard, should be in #ifdefs + * the same is true for macros or typedefs +<pre> +#if __CC65_STD__ == __CC65_STD_C99__ +/* stuff that only exists in C99 here */ +#endif +#if __CC65_STD__ == __CC65_STD_CC65__ +/* non standard stuff here */ +#endif +</pre> +You can refer to Annex B of the ISO C99 standard ([here](https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf) is the draft). + ## Assembly Sources * Op-code mnemonics must have lower-case letters. The names of instruction macroes may have upper-case letters. @@ -135,3 +152,10 @@ The only exception to the above are actions that are exclusive to the github act ## Wiki * The Wiki is strictly for additional information that does not fit into the regular user manual (LinuxDoc). The wiki must not duplicate any information that is present in the user manual + +# Roadmap / TODOs / open Ends + +## Test suite + +* specific tests to check the optimizer (rather than the codegenerator) are needed. +* we need more specific tests to check standard conformance of the library headers From 1c34d798beb55771f13b72bd3fba8d58e7d65cca Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 19:27:32 +0200 Subject: [PATCH 1283/2710] Update Contributing.md --- Contributing.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Contributing.md b/Contributing.md index 9572dd6e0..5861a9c2e 100644 --- a/Contributing.md +++ b/Contributing.md @@ -155,6 +155,10 @@ The only exception to the above are actions that are exclusive to the github act # Roadmap / TODOs / open Ends +## Documentation + +* the printf family of function does not completely implement all printf modifiers and does not behave as expected in some cases - all this should be documented in detail + ## Test suite * specific tests to check the optimizer (rather than the codegenerator) are needed. From d0ac06c9b0487e60e96e00033412abacf76c9244 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 18:47:55 +0200 Subject: [PATCH 1284/2710] must include stdarg.h to use varargs --- libsrc/geos-common/dlgbox/messagebox.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libsrc/geos-common/dlgbox/messagebox.c b/libsrc/geos-common/dlgbox/messagebox.c index fd4a5cd11..141a84b89 100644 --- a/libsrc/geos-common/dlgbox/messagebox.c +++ b/libsrc/geos-common/dlgbox/messagebox.c @@ -7,6 +7,7 @@ #include <geos.h> #include <stdio.h> +#include <stdarg.h> void _mbprintout(void); From 3640beaa46b9ab58ce137cd44df6cb78c7b4518b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 18:49:48 +0200 Subject: [PATCH 1285/2710] fix some header files to conform with C99 hopefully, should fix issue #1670 --- include/ctype.h | 6 ++++-- include/limits.h | 5 +++-- include/stdio.h | 50 +++++++++++++++++++++++++++++++++++------------- include/string.h | 15 ++++++++++----- include/time.h | 38 +++++++++++++++++++----------------- 5 files changed, 74 insertions(+), 40 deletions(-) diff --git a/include/ctype.h b/include/ctype.h index d842228e9..6e299f859 100644 --- a/include/ctype.h +++ b/include/ctype.h @@ -57,7 +57,9 @@ /* Character classification functions */ int __fastcall__ isalnum (int c); int __fastcall__ isalpha (int c); -int __fastcall__ isascii (int c); +#if __CC65_STD__ >= __CC65_STD_CC65__ +int __fastcall__ isascii (int c); /* non standard */ +#endif int __fastcall__ iscntrl (int c); int __fastcall__ isdigit (int c); int __fastcall__ isgraph (int c); @@ -75,7 +77,7 @@ int __fastcall__ toupper (int c); /* Always external */ int __fastcall__ tolower (int c); /* Always external */ #if __CC65_STD__ >= __CC65_STD_CC65__ -unsigned char __fastcall__ toascii (unsigned char c); +unsigned char __fastcall__ toascii (unsigned char c); /* non standard */ /* Convert a target-specific character to ASCII. */ #endif diff --git a/include/limits.h b/include/limits.h index 531c6bef2..43328f4bd 100644 --- a/include/limits.h +++ b/include/limits.h @@ -37,7 +37,6 @@ #define _LIMITS_H - #define CHAR_BIT 8 #define SCHAR_MIN ((signed char) 0x80) @@ -63,7 +62,9 @@ #define ULONG_MAX 4294967295UL +#if __CC65_STD__ >= __CC65_STD_CC65__ /* These defines that are platform dependent */ +/* FILENAME_MAX in stdlib.h is defined as the same value as PATH_MAX */ #if defined(__APPLE2__) # define PATH_MAX (64+1) #elif defined(__ATARI__) @@ -77,7 +78,7 @@ #else # define PATH_MAX (16+1) #endif - +#endif /* __CC65_STD__ >= __CC65_STD_CC65__ */ /* End of limits.h */ #endif diff --git a/include/stdio.h b/include/stdio.h index 916affe71..84a991a98 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -37,12 +37,21 @@ #define _STDIO_H +/* NULL pointer */ +#ifndef _HAVE_NULL +#define NULL 0 +#define _HAVE_NULL +#endif -#include <stddef.h> -#include <stdarg.h> -#include <limits.h> - +/* size_t is needed */ +#ifndef _HAVE_size_t +#define _HAVE_size_t +typedef unsigned size_t; +#endif +/* stdio.h should not define va_list, so we use an equivalent type in the + compiler namespace instead */ +typedef unsigned char* __va_list; /* Types */ typedef struct _FILE FILE; @@ -65,9 +74,24 @@ extern FILE* stderr; #define SEEK_SET 2 #define TMP_MAX 256 -#define FILENAME_MAX PATH_MAX -#define L_tmpnam FILENAME_MAX +/* These defines that are platform dependent */ +/* FILENAME_MAX is defined as the same value as PATH_MAX in limits.h, but we + are not allowed to include limits.h here */ +#if defined(__APPLE2__) +# define FILENAME_MAX (64+1) +#elif defined(__ATARI__) +# define FILENAME_MAX (63+1) +#elif defined(__CBM__) +# define FILENAME_MAX (255) /* should be 256+1, see libsrc/common/_cmd.s why it's not */ +#elif defined(__LUNIX__) +# define FILENAME_MAX (80+1) +#elif defined(__TELESTRAT__) +# define FILENAME_MAX (50+1) +#else +# define FILENAME_MAX (16+1) +#endif +#define L_tmpnam FILENAME_MAX /*****************************************************************************/ @@ -107,17 +131,17 @@ int __fastcall__ rename (const char* oldname, const char* newname); int snprintf (char* buf, size_t size, const char* format, ...); int sprintf (char* buf, const char* format, ...); int __fastcall__ ungetc (int c, FILE* f); -int __fastcall__ vfprintf (FILE* f, const char* format, va_list ap); -int __fastcall__ vprintf (const char* format, va_list ap); -int __fastcall__ vsnprintf (char* buf, size_t size, const char* format, va_list ap); -int __fastcall__ vsprintf (char* buf, const char* format, va_list ap); +int __fastcall__ vfprintf (FILE* f, const char* format, __va_list ap); +int __fastcall__ vprintf (const char* format, __va_list ap); +int __fastcall__ vsnprintf (char* buf, size_t size, const char* format, __va_list ap); +int __fastcall__ vsprintf (char* buf, const char* format, __va_list ap); int scanf (const char* format, ...); int fscanf (FILE* f, const char* format, ...); int sscanf (const char* s, const char* format, ...); -int __fastcall__ vscanf (const char* format, va_list ap); -int __fastcall__ vsscanf (const char* s, const char* format, va_list ap); -int __fastcall__ vfscanf (FILE* f, const char* format, va_list ap); +int __fastcall__ vscanf (const char* format, __va_list ap); +int __fastcall__ vsscanf (const char* s, const char* format, __va_list ap); +int __fastcall__ vfscanf (FILE* f, const char* format, __va_list ap); #if __CC65_STD__ == __CC65_STD_CC65__ FILE* __fastcall__ fdopen (int fd, const char* mode); /* Unix */ diff --git a/include/string.h b/include/string.h index 83970493e..1bd83b385 100644 --- a/include/string.h +++ b/include/string.h @@ -36,11 +36,17 @@ #ifndef _STRING_H #define _STRING_H +/* NULL pointer */ +#ifndef _HAVE_NULL +#define NULL 0 +#define _HAVE_NULL +#endif - -#include <stddef.h> - - +/* size_t is needed */ +#ifndef _HAVE_size_t +#define _HAVE_size_t +typedef unsigned size_t; +#endif char* __fastcall__ strcat (char* dest, const char* src); char* __fastcall__ strchr (const char* s, int c); @@ -90,6 +96,5 @@ const char* __fastcall__ _stroserror (unsigned char errcode); /* Map an operating system error number to an error message. */ - /* End of string.h */ #endif diff --git a/include/time.h b/include/time.h index ca7ee385f..99bb1c8e3 100644 --- a/include/time.h +++ b/include/time.h @@ -52,7 +52,6 @@ typedef unsigned size_t; typedef unsigned long time_t; typedef unsigned long clock_t; -typedef unsigned char clockid_t; /* Structure for broken down time */ struct tm { @@ -67,22 +66,6 @@ struct tm { int tm_isdst; }; -/* Structure for seconds and nanoseconds */ -struct timespec { - time_t tv_sec; - long tv_nsec; -}; - -/* Timezone representation, default is UTC */ -extern struct _timezone { - char daylight; /* True if daylight savings time active */ - long timezone; /* Number of seconds behind UTC */ - char tzname[5]; /* Name of timezone, e.g. CET */ - char dstname[5]; /* Name when daylight true, e.g. CEST */ -} _tz; - - - #if defined(__ATARI5200__) # define CLOCKS_PER_SEC 60 #elif defined(__ATMOS__) @@ -109,7 +92,6 @@ extern struct _timezone { clock_t _clocks_per_sec (void); # define CLOCKS_PER_SEC _clocks_per_sec() #endif -#define CLK_TCK CLOCKS_PER_SEC #define CLOCK_REALTIME 0 @@ -125,12 +107,32 @@ size_t __fastcall__ strftime (char* buf, size_t bufsize, const char* format, con time_t __fastcall__ time (time_t* t); +#if __CC65_STD__ >= __CC65_STD_CC65__ + +typedef unsigned char clockid_t; + +/* Structure for seconds and nanoseconds */ +struct timespec { + time_t tv_sec; + long tv_nsec; +}; + +/* Timezone representation, default is UTC */ +extern struct _timezone { + char daylight; /* True if daylight savings time active */ + long timezone; /* Number of seconds behind UTC */ + char tzname[5]; /* Name of timezone, e.g. CET */ + char dstname[5]; /* Name when daylight true, e.g. CEST */ +} _tz; + +#define CLK_TCK CLOCKS_PER_SEC /* POSIX function prototypes */ int __fastcall__ clock_getres (clockid_t clock_id, struct timespec *res); int __fastcall__ clock_gettime (clockid_t clock_id, struct timespec *tp); int __fastcall__ clock_settime (clockid_t clock_id, const struct timespec *tp); +#endif /* End of time.h */ From 1abb5f473408dd70b17c860a50f3ebbe186bf48d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 19:29:27 +0200 Subject: [PATCH 1286/2710] Add a directory for tests that exercise the supported C standard differences. As a first test added the snippet given in issue #1670 --- test/readme.txt | 7 +++++ test/standard/Makefile | 63 +++++++++++++++++++++++++++++++++++++++++ test/standard/bug1670.c | 33 +++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 test/standard/Makefile create mode 100644 test/standard/bug1670.c diff --git a/test/readme.txt b/test/readme.txt index 49ae363cc..dd87ea9df 100644 --- a/test/readme.txt +++ b/test/readme.txt @@ -12,6 +12,13 @@ compiler is working as expected (when the tests behave as described): /val - The bulk of tests are contained here, individual tests should exit with an exit code of EXIT_SUCCESS when they pass, or EXIT_FAILURE on error. +/standard - like the tests in /val, the tests must exit with EXIT_SUCCESS on + success. Unlike the tests in /val these are not compiled for every + combination of optimizer options, but instead always with -Osir and then + for each supported C-standard (C89, C99, CC65). The goal is to use these + to check for regressions in standard conformance of the compiler and the + library. + /ref - These tests produce output that must be compared with reference output. /err - contains tests that MUST NOT compile diff --git a/test/standard/Makefile b/test/standard/Makefile new file mode 100644 index 000000000..054623b79 --- /dev/null +++ b/test/standard/Makefile @@ -0,0 +1,63 @@ +# Makefile for the regression tests that return an error code on failure + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + S = $(subst /,\,/) + NULLDEV = nul: + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /s /q $(subst /,\,$1) +else + S = / + NULLDEV = /dev/null + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +ifdef QUIET + .SILENT: + NULLOUT = >$(NULLDEV) + NULLERR = 2>$(NULLDEV) +endif + +SIM65FLAGS = -x 5000000000 -c + +CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) +CA65 := $(if $(wildcard ../../bin/ca65*),..$S..$Sbin$Sca65,ca65) +LD65 := $(if $(wildcard ../../bin/ld65*),..$S..$Sbin$Sld65,ld65) +SIM65 := $(if $(wildcard ../../bin/sim65*),..$S..$Sbin$Ssim65,sim65) + +WORKDIR = ../../testwrk/standard + +OPTIONS = c89 c99 cc65 + +.PHONY: all clean + +SOURCES := $(wildcard *.c) +TESTS = $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).6502.prg)) +#TESTS += $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).65c02.prg)) + +all: $(TESTS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +define PRG_template + +$(WORKDIR)/%.$1.$2.prg: %.c | $(WORKDIR) + $(if $(QUIET),echo standard/$$*.$1.$2.prg) + $(CC65) -t sim$2 $$(CC65FLAGS) -Osir --add-source --standard $1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) + $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/$$@.out + +endef # PRG_template + +$(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option),6502))) + +#$(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option),65c02))) + +clean: + @$(call RMDIR,$(WORKDIR)) diff --git a/test/standard/bug1670.c b/test/standard/bug1670.c new file mode 100644 index 000000000..038b40067 --- /dev/null +++ b/test/standard/bug1670.c @@ -0,0 +1,33 @@ + +/* #1670 - Standard headers contain non standard identifiers in C89/C99 mode */ + +#include <stdlib.h> +#include <stdio.h> +#include <time.h> + +#if __CC65_STD__ != __CC65_STD_CC65__ +/* implement our own clock_gettime, using a different signature than the POSIX one */ +const char* clock_gettime(void) +{ + static char buf[32]; + struct tm *my_tm; +#if 0 + /* FIXME: this will not work in the simulator */ + time_t t = time(NULL); +#else + time_t t = 0x12345678; +#endif + my_tm = localtime(&t); + printf("%2d:%2d:%2d\n", my_tm->tm_hour, my_tm->tm_min, my_tm->tm_sec); + strftime(buf, sizeof(buf), "<%H:%M:%S>", my_tm); + return buf; +} +#endif + +int main(void) +{ +#if __CC65_STD__ != __CC65_STD_CC65__ + printf("The time is %s\n", clock_gettime()); +#endif + return EXIT_SUCCESS; +} From b6ffa4af64914ed9b5805321a68576e3a785931b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 9 May 2022 21:26:45 +0200 Subject: [PATCH 1287/2710] Fix endless loop on expanding a recursive macro, fixed issue #1678, patch by kugelfuhr --- src/ca65/macro.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/ca65/macro.c b/src/ca65/macro.c index 0bdc89b5b..d9f1f385c 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -801,9 +801,6 @@ static void StartExpClassic (MacExp* E) { token_t Term; - /* Skip the macro name */ - NextTok (); - /* Does this invocation have any arguments? */ if (!TokIsSep (CurTok.Tok)) { @@ -887,9 +884,6 @@ static void StartExpDefine (MacExp* E) */ unsigned Count = E->M->ParamCount; - /* Skip the current token */ - NextTok (); - /* Read the actual parameters */ while (Count--) { TokNode* Last; @@ -965,14 +959,19 @@ static void StartExpDefine (MacExp* E) void MacExpandStart (Macro* M) /* Start expanding a macro */ { + FilePos Pos; MacExp* E; /* Check the argument */ PRECONDITION (M && (M->Style != MAC_STYLE_DEFINE || DisableDefines == 0)); + /* Remember the current file position, then skip the macro name token */ + Pos = CurTok.Pos; + NextTok (); + /* We cannot expand an incomplete macro */ if (M->Incomplete) { - Error ("Cannot expand an incomplete macro"); + PError (&Pos, "Cannot expand an incomplete macro"); return; } @@ -980,7 +979,7 @@ void MacExpandStart (Macro* M) ** to force an endless loop and assembler crash. */ if (MacExpansions >= MAX_MACEXPANSIONS) { - Error ("Too many nested macro expansions"); + PError (&Pos, "Too many nested macro expansions"); return; } From 1c3d386e09468b679f207a75b88cb0d8086e9ac5 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 9 May 2022 21:27:21 +0200 Subject: [PATCH 1288/2710] simple test related to #1678 --- test/asm/err/bug1678.s | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 test/asm/err/bug1678.s diff --git a/test/asm/err/bug1678.s b/test/asm/err/bug1678.s new file mode 100644 index 000000000..d91e52214 --- /dev/null +++ b/test/asm/err/bug1678.s @@ -0,0 +1,22 @@ + +; #1678 Endless loop printing error messages + + .macpack longbranch + + .import _exit + .export _main + +.macro foo + foo +.endmacro + +.struct bar + foo +.endstruct + +_main: + ; exit OK + lda #0 + ldx #0 + jmp _exit + From f67fb3b326b01c404c05edcb77783be19e0554c6 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 10 May 2022 01:12:13 +0200 Subject: [PATCH 1289/2710] define __CC65__ as ((VER_MAJOR * 0x100) + VER_MINOR), fixes issue #1667 --- src/common/version.c | 46 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/common/version.c b/src/common/version.c index 2f19f0466..2ebb58b0a 100644 --- a/src/common/version.c +++ b/src/common/version.c @@ -49,7 +49,46 @@ #define VER_MAJOR 2U #define VER_MINOR 19U - +/* + * Note: until 2.19 the __CC65__ macro was defined as (VER_MAJOR * 0x100) + VER_MINOR * 0x10 + * which resulted in broken values starting at version 2.16 of the compiler: + * + * version __CC65__ identifies as + * + * 2.0 0x0200 2.0 + * 2.1 0x0210 2.16 + * 2.2 0x0220 2.32 + * 2.3 0x0230 2.48 + * 2.4 0x0240 2.64 + * 2.5 0x0250 2.80 + * 2.6 0x0260 2.96 + * 2.7 0x0270 2.112 + * 2.8 0x0280 2.128 + * 2.9 0x0290 2.144 + * 2.10 0x02a0 2.160 + * 2.11 0x02b0 2.176 + * 2.12 0x02c0 2.192 + * 2.13 0x02d0 2.208 + * 2.14 0x02e0 2.224 + * 2.15 0x02f0 2.240 + * 2.16 0x0300 3.0 + * 2.17 0x0310 3.16 + * 2.18 0x0320 3.32 + * 2.19 0x0330 3.48 + * 2.19-git 0x0213 2.19 + * + * to keep damage low(er), we should do the following: + * + * - bump to 3.1 (skip 3.0) before 2.32 + * - bump to 4.0 before 3.16 + * + * That way at least each value is unique, and checking compiler version(s) can + * still work to some degree, should it really be necessary. + * + * Some preprocessor kludges can be used to still check for greater or lesser + * versions - see the checkversion program in the samples directory. + * + */ /*****************************************************************************/ /* Code */ @@ -74,5 +113,8 @@ const char* GetVersionAsString (void) unsigned GetVersionAsNumber (void) /* Returns the version number as a combined unsigned for use in a #define */ { - return ((VER_MAJOR * 0x100) + (VER_MINOR * 0x10)); +#if VER_MINOR >= 0x100 +#error "VER_MINOR must be smaller than 0x100 - time to bump the major version!" +#endif + return ((VER_MAJOR * 0x100) + VER_MINOR); } From 1b73ffb8ae8e096453c4acb7a09d802a50fca245 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 10 May 2022 01:13:24 +0200 Subject: [PATCH 1290/2710] document changes to __CC65__ --- doc/cc65.sgml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 67323931c..43039f713 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1102,8 +1102,20 @@ The compiler defines several macros at startup: <tag><tt>__CC65__</tt></tag> This macro is always defined. Its value is the version number of the - compiler in hex. For example, version 2.14 of the compiler has this macro - defined as <tt/0x02E0/. + compiler in hex: <tt>(VER_MAJOR * 0x100) + VER_MINOR</tt>. The upper 8 bits + are the major-, the lower 8 bits are the minor version. For example, version + 47.11 of the compiler would have this macro defined as <tt/0x2f0b/. + + Note: until 2.19 this macro was defined as <tt>(VER_MAJOR * 0x100) + VER_MINOR * 0x10</tt> - + which resulted in broken values starting at version 2.16 of the compiler. For + this reason the value of this macro is considered purely informal - you should + not use it to check for a specific compiler version and use different code + according to the detected version - please update your code to work with the + recent version of the compiler instead (There is very little reason to not use + the most recent version - and even less to support older versions in your code). + + Should you still insist on doing this for some reason - look at <tt>checkversion.c</tt> + in the samples directory for some preprocessor kludges that might help. <tag><tt>__CC65_STD__</tt></tag> From 8062f8d029a11fd5b6c9fbc4408da3b0e8294872 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 10 May 2022 01:16:19 +0200 Subject: [PATCH 1291/2710] sample program that demonstrates how to compare the value of __CC65__ for any version of the compiler --- samples/Makefile | 19 +++++++++++++++++++ samples/checkversion.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 samples/checkversion.c diff --git a/samples/Makefile b/samples/Makefile index 01ad6f983..70e5ff760 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -161,6 +161,7 @@ DIRLIST = tutorial geos atari2600 atari5200 apple2 gamate lynx supervision sym1 EXELIST_apple2 = \ ascii \ + checkversion \ diodemo \ enumdevdir \ gunzip65 \ @@ -177,6 +178,7 @@ EXELIST_apple2enh = $(EXELIST_apple2) EXELIST_atari = \ ascii \ + checkversion \ gunzip65 \ hello \ mandelbrot \ @@ -197,6 +199,7 @@ EXELIST_atari5200 = \ EXELIST_atmos = \ ascii \ + checkversion \ hello \ mandelbrot \ sieve \ @@ -207,6 +210,7 @@ EXELIST_bbc = \ EXELIST_c64 = \ ascii \ + checkversion \ enumdevdir \ gunzip65 \ hello \ @@ -220,6 +224,7 @@ EXELIST_c64 = \ EXELIST_c128 = \ ascii \ + checkversion \ enumdevdir \ gunzip65 \ hello \ @@ -231,12 +236,14 @@ EXELIST_c128 = \ EXELIST_c16 = \ ascii \ + checkversion \ enumdevdir \ tinyshell \ hello EXELIST_cbm510 = \ ascii \ + checkversion \ gunzip65 \ hello \ mousedemo \ @@ -245,6 +252,7 @@ EXELIST_cbm510 = \ EXELIST_cbm610 = \ ascii \ + checkversion \ gunzip65 \ hello \ tinyshell \ @@ -252,10 +260,12 @@ EXELIST_cbm610 = \ EXELIST_creativision = \ ascii \ + checkversion \ hello EXELIST_cx16 = \ ascii \ + checkversion \ enumdevdir \ gunzip65 \ hello \ @@ -266,10 +276,12 @@ EXELIST_cx16 = \ tgidemo EXELIST_gamate = \ + checkversion \ hello EXELIST_geos-cbm = \ ascii \ + checkversion \ diodemo EXELIST_geos-apple = \ @@ -282,16 +294,19 @@ EXELIST_lynx = \ notavailable EXELIST_nes = \ + checkversion \ hello EXELIST_osic1p = \ notavailable EXELIST_pce = \ + checkversion \ hello EXELIST_pet = \ ascii \ + checkversion \ enumdevdir \ hello \ tinyshell \ @@ -299,6 +314,7 @@ EXELIST_pet = \ EXELIST_plus4 = \ ascii \ + checkversion \ enumdevdir \ gunzip65 \ hello \ @@ -306,6 +322,7 @@ EXELIST_plus4 = \ sieve EXELIST_sim6502 = \ + checkversion \ gunzip65 EXELIST_sim65c02 = $(EXELIST_sim6502) @@ -318,6 +335,7 @@ EXELIST_sym1 = \ EXELIST_telestrat = \ ascii \ + checkversion \ gunzip65 \ hello \ mandelbrot \ @@ -326,6 +344,7 @@ EXELIST_telestrat = \ EXELIST_vic20 = \ ascii \ + checkversion \ enumdevdir \ hello \ mandelbrot \ diff --git a/samples/checkversion.c b/samples/checkversion.c new file mode 100644 index 000000000..1d3494a87 --- /dev/null +++ b/samples/checkversion.c @@ -0,0 +1,40 @@ + +/* Until 2.19 the __CC65__ macro was defined as (VER_MAJOR * 0x100) + (VER_MINOR * 0x10), + * which caused it to contain broken values in compiler releases 2.16 to 2.19. The + * macro was fixed some time after 2.19 to (VER_MAJOR * 0x100) + VER_MINOR. + * + * The following strategy can be used to still compare for less or greater versions, + * should this really be necessary or wanted - it is not recommended afterall. + */ + +#include <stdio.h> +#include <stdlib.h> + +#if ((__CC65__ & 0xff00) > 3) || ((__CC65__ & 0x000f) > 0) +/* compiler version is 2.19-git or higher */ +# define VER_MAJOR ((__CC65__ >> 8) & 0xff) +# define VER_MINOR (__CC65__ & 0xff) +#elif ((__CC65__ & 0xff00) == 3) +/* broken values in version 2.16 - 2.19-git before the bug was fixed */ +# define VER_MAJOR 2 +# define VER_MINOR (((__CC65__ >> 4) & 0x0f) + 16) +#else +/* values before 2.16 */ +# define VER_MAJOR ((__CC65__ >> 8) & 0xff) +# define VER_MINOR ((__CC65__ >> 4) & 0x0f) +#endif + +/* define a new value that will work for comparing all versions */ +#define VERSION ((VER_MAJOR << 8) + VER_MINOR) + +int main(void) +{ + printf("__CC65__ defined as %04x\n", __CC65__); + printf("compiler version is %u.%u\n", VER_MAJOR, VER_MINOR); + if (__CC65__ == VERSION) { + printf("__CC65__ is defined correctly as (VER_MAJOR * 0x100) + VER_MINOR\n"); + return EXIT_SUCCESS; + } + printf("__CC65__ is incorrectly defined as (VER_MAJOR * 0x100) + (VER_MINOR * 0x10)\n"); + return EXIT_FAILURE; +} From 8328bbf51dd5ac9adaa8adea6001afa1a95b3aa9 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Tue, 10 May 2022 01:56:52 +0200 Subject: [PATCH 1292/2710] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 530efdfdb..e917a13e0 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,8 @@ For a complete list look at the [full team list](https://github.com/orgs/cc65/te For general discussion, questions, etc subscribe to the [mailing list](https://cc65.github.io/mailing-lists.html) or use the [github discussions](https://github.com/cc65/cc65/discussions). +Some of us may also be around on IRC [#cc65](https://web.libera.chat/#cc65) on libera.chat + # Documentation * The main [Documentation](https://cc65.github.io/doc) for users and developers From 2fdb1e6b0d8620b740b2655a8b5d6d89a558a285 Mon Sep 17 00:00:00 2001 From: compyx <b.wassink@ziggo.nl> Date: Tue, 17 May 2022 10:05:25 +0200 Subject: [PATCH 1293/2710] Fix set but unused variable --- src/cc65/codeopt.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index 9c90a0e5f..440b10751 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -397,7 +397,6 @@ static void ReadOptStats (const char* Name) /* Read the optimizer statistics file */ { char Buf [256]; - unsigned Lines; /* Try to open the file */ FILE* F = fopen (Name, "r"); @@ -407,7 +406,6 @@ static void ReadOptStats (const char* Name) } /* Read and parse the lines */ - Lines = 0; while (fgets (Buf, sizeof (Buf), F) != 0) { char* B; @@ -419,9 +417,6 @@ static void ReadOptStats (const char* Name) unsigned long TotalRuns; unsigned long TotalChanges; - /* Count lines */ - ++Lines; - /* Remove trailing white space including the line terminator */ B = Buf; Len = strlen (B); From 4674b09421b23b3d98dfd62950d97f57f3a034ee Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 17 May 2022 13:25:12 +0200 Subject: [PATCH 1294/2710] clean and mostlyclean should also clean the test and targettest directories --- Makefile | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f565727e6..4f57ef7cc 100644 --- a/Makefile +++ b/Makefile @@ -2,13 +2,22 @@ .SUFFIXES: -all mostlyclean clean install zip: +all install zip: @$(MAKE) -C src --no-print-directory $@ @$(MAKE) -C libsrc --no-print-directory $@ @$(MAKE) -C doc --no-print-directory $@ @$(MAKE) -C util --no-print-directory $@ @$(MAKE) -C samples --no-print-directory $@ +mostlyclean clean: + @$(MAKE) -C src --no-print-directory $@ + @$(MAKE) -C libsrc --no-print-directory $@ + @$(MAKE) -C doc --no-print-directory $@ + @$(MAKE) -C util --no-print-directory $@ + @$(MAKE) -C samples --no-print-directory $@ + @$(MAKE) -C test --no-print-directory $@ + @$(MAKE) -C targettest --no-print-directory $@ + avail unavail bin: @$(MAKE) -C src --no-print-directory $@ From 1a5852ab91b568c0ef2ef321b70773a65a7143ec Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 17 May 2022 13:52:30 +0200 Subject: [PATCH 1295/2710] don't try to build the checkversion sample for targets that do not have printf --- samples/Makefile | 4 ---- 1 file changed, 4 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index 70e5ff760..4007e3522 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -260,7 +260,6 @@ EXELIST_cbm610 = \ EXELIST_creativision = \ ascii \ - checkversion \ hello EXELIST_cx16 = \ @@ -276,7 +275,6 @@ EXELIST_cx16 = \ tgidemo EXELIST_gamate = \ - checkversion \ hello EXELIST_geos-cbm = \ @@ -294,14 +292,12 @@ EXELIST_lynx = \ notavailable EXELIST_nes = \ - checkversion \ hello EXELIST_osic1p = \ notavailable EXELIST_pce = \ - checkversion \ hello EXELIST_pet = \ From 75441afb719b638e2c6bbf564477e78e7db11161 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 17 May 2022 14:30:41 +0200 Subject: [PATCH 1296/2710] rename the "check" target to "checkstyle". also created a new "check" target which runs all tests, as it is common with GNU programs --- .github/workflows/build-on-pull-request.yml | 2 +- .github/workflows/snapshot-on-push-master.yml | 2 +- Makefile | 23 +++++++++++++------ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index e9176f8c4..0ba0c6a1f 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -23,7 +23,7 @@ jobs: - name: Do some simple style checks shell: bash - run: make -j2 check + run: make -j2 checkstyle - name: Build the tools. shell: bash run: make -j2 bin USER_CFLAGS=-Werror diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 47abc3564..5c36ef7f1 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -48,7 +48,7 @@ jobs: - name: Do some simple style checks shell: bash - run: make -j2 check + run: make -j2 checkstyle - name: Build the tools. shell: bash run: | diff --git a/Makefile b/Makefile index 4f57ef7cc..e8b73e86b 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples test util check +.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples test util checkstyle check .SUFFIXES: @@ -30,12 +30,6 @@ doc html info: samples: @$(MAKE) -C samples --no-print-directory $@ -test: - @$(MAKE) -C test --no-print-directory $@ - -check: - @$(MAKE) -C .github/checks --no-print-directory $@ - util: @$(MAKE) -C util --no-print-directory $@ @@ -44,3 +38,18 @@ util: %: @$(MAKE) -C libsrc --no-print-directory $@ + +# check the code style +checkstyle: + @$(MAKE) -C .github/checks --no-print-directory $@ + +# simple "test" target, only run regression tests for c64 target +test: + @$(MAKE) -C test --no-print-directory $@ + +# GNU "check" target, which runs all tests +check: + @$(MAKE) -C .github/checks --no-print-directory $@ + @$(MAKE) test + @$(MAKE) -C targettest platforms --no-print-directory + @$(MAKE) -C samples platforms --no-print-directory From 0f291aee86022ed220b421ef2169f099cf4f24a8 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 17 May 2022 14:39:35 +0200 Subject: [PATCH 1297/2710] rename the actual checkstyle target too :) --- .github/checks/Makefile | 2 +- Makefile | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/checks/Makefile b/.github/checks/Makefile index dc42d14ca..52d6611aa 100644 --- a/.github/checks/Makefile +++ b/.github/checks/Makefile @@ -1,7 +1,7 @@ .PHONY: check tabs lastline spaces -check: tabs lastline spaces +checkstyle: tabs lastline spaces tabs: tabs.sh @./tabs.sh diff --git a/Makefile b/Makefile index e8b73e86b..909de81ec 100644 --- a/Makefile +++ b/Makefile @@ -49,7 +49,7 @@ test: # GNU "check" target, which runs all tests check: - @$(MAKE) -C .github/checks --no-print-directory $@ + @$(MAKE) -C .github/checks checkstyle --no-print-directory @$(MAKE) test - @$(MAKE) -C targettest platforms --no-print-directory - @$(MAKE) -C samples platforms --no-print-directory + @$(MAKE) -C targettest platforms --no-print-directory + @$(MAKE) -C samples platforms --no-print-directory From 91199c57e812558eee8c079817efb660ec32f90f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 17 May 2022 15:28:21 +0200 Subject: [PATCH 1298/2710] remove +x flag --- libsrc/gamate/vga.s | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 libsrc/gamate/vga.s diff --git a/libsrc/gamate/vga.s b/libsrc/gamate/vga.s old mode 100755 new mode 100644 From d30fc65dd59b7b9be9159fbcd257f5c42405f762 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 17 May 2022 15:28:41 +0200 Subject: [PATCH 1299/2710] add check for +x flag --- .github/checks/Makefile | 7 +++++-- .github/checks/noexec.sh | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100755 .github/checks/noexec.sh diff --git a/.github/checks/Makefile b/.github/checks/Makefile index 52d6611aa..18cc153d4 100644 --- a/.github/checks/Makefile +++ b/.github/checks/Makefile @@ -1,7 +1,7 @@ -.PHONY: check tabs lastline spaces +.PHONY: checkstyle tabs lastline spaces noexec -checkstyle: tabs lastline spaces +checkstyle: tabs lastline spaces noexec tabs: tabs.sh @./tabs.sh @@ -11,3 +11,6 @@ lastline: lastline.sh spaces: spaces.sh @./spaces.sh + +noexec: noexec.sh + @./noexec.sh diff --git a/.github/checks/noexec.sh b/.github/checks/noexec.sh new file mode 100755 index 000000000..c76ae481d --- /dev/null +++ b/.github/checks/noexec.sh @@ -0,0 +1,18 @@ +#! /bin/bash +OLDCWD=`pwd` +SCRIPT_PATH=`dirname $0` +CHECK_PATH=. + +cd $SCRIPT_PATH/../../ + +FILES=`find $CHECK_PATH -executable -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print` + +cd $OLDCWD + +if [ x"$FILES"x != xx ]; then + echo "error: executable flag is set for the following files:" >&2 + for n in $FILES; do + echo $n >&2 + done + exit -1 +fi From 93e94c8dea8575a012e9e2d58e0bc97ed7028118 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Wed, 18 May 2022 05:09:48 -0400 Subject: [PATCH 1300/2710] Fixed a multi-line comment. The left border is thicker in cc65 than it is in VICE. --- src/common/version.c | 78 ++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/src/common/version.c b/src/common/version.c index 2ebb58b0a..270eab118 100644 --- a/src/common/version.c +++ b/src/common/version.c @@ -50,45 +50,45 @@ #define VER_MINOR 19U /* - * Note: until 2.19 the __CC65__ macro was defined as (VER_MAJOR * 0x100) + VER_MINOR * 0x10 - * which resulted in broken values starting at version 2.16 of the compiler: - * - * version __CC65__ identifies as - * - * 2.0 0x0200 2.0 - * 2.1 0x0210 2.16 - * 2.2 0x0220 2.32 - * 2.3 0x0230 2.48 - * 2.4 0x0240 2.64 - * 2.5 0x0250 2.80 - * 2.6 0x0260 2.96 - * 2.7 0x0270 2.112 - * 2.8 0x0280 2.128 - * 2.9 0x0290 2.144 - * 2.10 0x02a0 2.160 - * 2.11 0x02b0 2.176 - * 2.12 0x02c0 2.192 - * 2.13 0x02d0 2.208 - * 2.14 0x02e0 2.224 - * 2.15 0x02f0 2.240 - * 2.16 0x0300 3.0 - * 2.17 0x0310 3.16 - * 2.18 0x0320 3.32 - * 2.19 0x0330 3.48 - * 2.19-git 0x0213 2.19 - * - * to keep damage low(er), we should do the following: - * - * - bump to 3.1 (skip 3.0) before 2.32 - * - bump to 4.0 before 3.16 - * - * That way at least each value is unique, and checking compiler version(s) can - * still work to some degree, should it really be necessary. - * - * Some preprocessor kludges can be used to still check for greater or lesser - * versions - see the checkversion program in the samples directory. - * - */ +** Note: until 2.19 the __CC65__ macro was defined as (VER_MAJOR * 0x100) + VER_MINOR * 0x10 +** which resulted in broken values starting at version 2.16 of the compiler: +** +** version __CC65__ identifies as +** +** 2.0 0x0200 2.0 +** 2.1 0x0210 2.16 +** 2.2 0x0220 2.32 +** 2.3 0x0230 2.48 +** 2.4 0x0240 2.64 +** 2.5 0x0250 2.80 +** 2.6 0x0260 2.96 +** 2.7 0x0270 2.112 +** 2.8 0x0280 2.128 +** 2.9 0x0290 2.144 +** 2.10 0x02a0 2.160 +** 2.11 0x02b0 2.176 +** 2.12 0x02c0 2.192 +** 2.13 0x02d0 2.208 +** 2.14 0x02e0 2.224 +** 2.15 0x02f0 2.240 +** 2.16 0x0300 3.0 +** 2.17 0x0310 3.16 +** 2.18 0x0320 3.32 +** 2.19 0x0330 3.48 +** 2.19-git 0x0213 2.19 +** +** to keep damage low(er), we should do the following: +** +** - bump to 3.1 (skip 3.0) before 2.32 +** - bump to 4.0 before 3.16 +** +** That way at least each value is unique, and checking compiler version(s) can +** still work to some degree, should it really be necessary. +** +** Some preprocessor kludges can be used to still check for greater or lesser +** versions - see the checkversion program in the samples directory. +** +*/ /*****************************************************************************/ /* Code */ From 44257b9b4a04e0764087574c8100815775613821 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChlstrasser?= <stephan.muehlstrasser@web.de> Date: Wed, 18 May 2022 18:57:52 +0200 Subject: [PATCH 1301/2710] Fix switched meaning of '\n' and '\r' When conio was implemented for the osic1p target, the cbm target was used as a blueprint. But it was overlooked that the cbm target encodes CR as 0x0A and LF as 0x0D, while the osic1p target uses the ASCII encoding of CR and LF. Therefore conio output of '\n' moved the active position to the start of the line and '\r' moved the active position to the next line. This change implements the correct semantics of '\n' and '\r' in conio for the osic1p target. Fixes #1747. --- libsrc/osic1p/osiscreen.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/osic1p/osiscreen.inc b/libsrc/osic1p/osiscreen.inc index ee2e52174..509b4cf79 100644 --- a/libsrc/osic1p/osiscreen.inc +++ b/libsrc/osic1p/osiscreen.inc @@ -78,13 +78,13 @@ _cputcxy: ; Plot a character - also used as internal function -_cputc: cmp #$0A ; CR? +_cputc: cmp #$0D ; CR? bne L1 lda #0 sta CURS_X beq plot ; Recalculate pointers -L1: cmp #$0D ; LF? +L1: cmp #$0A ; LF? beq newline ; Recalculate pointers cputdirect: From 94e7b118703798a0fde36d35f7c1a6209dd33e17 Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Mon, 30 May 2022 12:22:02 +0000 Subject: [PATCH 1302/2710] cl65: fix regression in --print-target-path since the "empty prefix means run from current dir" hack was removed, cl65 --print-target-path no longer prints the path relative to the binary, but the hardcoded library path which points to prefix, because the code adds the hardcoded path first to the pathsearch, but then actually only returns the first entry rather than looking whether the path exists. closes #1754 --- src/cl65/main.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/cl65/main.c b/src/cl65/main.c index 5d84fb625..67e9444f4 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -1212,6 +1212,7 @@ static void OptPrintTargetPath (const char* Opt attribute ((unused)), /* Print the target file path */ { char* TargetPath; + char* tmp; SearchPaths* TargetPaths = NewSearchPath (); AddSubSearchPathFromEnv (TargetPaths, "CC65_HOME", "target"); @@ -1220,7 +1221,15 @@ static void OptPrintTargetPath (const char* Opt attribute ((unused)), #endif AddSubSearchPathFromBin (TargetPaths, "target"); - TargetPath = GetSearchPath (TargetPaths, 0); + TargetPath = SearchFile (TargetPaths, "."); + if (!TargetPath) { + fprintf (stderr, "%s: error - could not determine target path\n", ProgName); + exit (EXIT_FAILURE); + } + tmp = strrchr(TargetPath, '.'); + if (tmp) { + *(--tmp) = 0; + } while (*TargetPath) { if (*TargetPath == ' ') { /* Escape spaces */ From c2b8479ea3f3b435fde8da360b229c96c0dccf62 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Mon, 30 May 2022 17:10:33 +0200 Subject: [PATCH 1303/2710] Fixed typo --- include/serial.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/include/serial.h b/include/serial.h index 58943d507..35d7b8f66 100644 --- a/include/serial.h +++ b/include/serial.h @@ -148,7 +148,7 @@ unsigned char __fastcall__ ser_open (const struct ser_params* params); /* "Open" the port by setting the port parameters and enable interrupts. */ unsigned char ser_close (void); -/* "Close" the port. Clear buffers and and disable interrupts. */ +/* "Close" the port. Clear buffers and disable interrupts. */ unsigned char __fastcall__ ser_get (char* b); /* Get a character from the serial port. If no characters are available, the @@ -171,6 +171,3 @@ unsigned char __fastcall__ ser_ioctl (unsigned char code, void* data); /* End of serial.h */ #endif - - - From e6e93f3d18dd0ca86225f7e23d4385431f4ef731 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Fri, 3 Jun 2022 12:36:04 +0200 Subject: [PATCH 1304/2710] Fixed term #1553 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e917a13e0..536e59243 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # About cc65 cc65 is a complete cross development package for 65(C)02 systems, including -a powerful macro assembler, a C compiler, linker, librarian and several +a powerful macro assembler, a C compiler, linker, archiver and several other tools. cc65 has C and runtime library support for many of the old 6502 machines. For details look at the [Website](https://cc65.github.io). From 799aec23a64c9f11fa2591f5e8dc7a93ee298430 Mon Sep 17 00:00:00 2001 From: Dave Plummer <dave@daveandnikki.com> Date: Sat, 4 Jun 2022 13:00:48 -0700 Subject: [PATCH 1305/2710] Add KIM-1 Support --- asminc/kim1.inc | 28 +++++++++++++++++ cfg/kim1.cfg | 41 ++++++++++++++++++++++++ include/kim1.h | 67 ++++++++++++++++++++++++++++++++++++++++ libsrc/Makefile | 1 + libsrc/kim1/crt0.s | 47 ++++++++++++++++++++++++++++ libsrc/kim1/ctype.s | 5 +++ libsrc/kim1/read.s | 51 ++++++++++++++++++++++++++++++ libsrc/kim1/tapeio.s | 39 +++++++++++++++++++++++ libsrc/kim1/write.s | 49 +++++++++++++++++++++++++++++ samples/Makefile | 6 +++- samples/kim1/Makefile | 56 +++++++++++++++++++++++++++++++++ samples/kim1/kimHello | Bin 0 -> 2789 bytes samples/kim1/kimHello.c | 24 ++++++++++++++ src/ca65/main.c | 4 +++ src/cc65/main.c | 4 +++ src/common/target.c | 2 ++ src/common/target.h | 1 + targettest/Makefile | 1 + 18 files changed, 425 insertions(+), 1 deletion(-) create mode 100644 asminc/kim1.inc create mode 100644 cfg/kim1.cfg create mode 100644 include/kim1.h create mode 100644 libsrc/kim1/crt0.s create mode 100644 libsrc/kim1/ctype.s create mode 100644 libsrc/kim1/read.s create mode 100644 libsrc/kim1/tapeio.s create mode 100644 libsrc/kim1/write.s create mode 100644 samples/kim1/Makefile create mode 100644 samples/kim1/kimHello create mode 100644 samples/kim1/kimHello.c diff --git a/asminc/kim1.inc b/asminc/kim1.inc new file mode 100644 index 000000000..f0d1555a7 --- /dev/null +++ b/asminc/kim1.inc @@ -0,0 +1,28 @@ +; --------------------------------------------------------------------------- +; +; KIM-1 definitions +; +; --------------------------------------------------------------------------- + + +RAMSTART := $0200 ; Entry point + +; --------------------------------------------------------------------------- +; Monitor Functions +; --------------------------------------------------------------------------- + + +OUTCHR := $1EA0 ; Output character +INTCHR := $1E5A ; Input character without case conversion +DUMPT := $1800 ; Dump memory to tape +LOADT := $1873 ; Load memory from tape +SAL := $17F5 ; Tape load address low +SAH := $17F6 ; Tape load address high +EAL := $17F7 ; Tape address end low +EAH := $17F8 ; Tape address end high +ID := $17F9 ; Tape Identification number + +; --------------------------------------------------------------------------- +; System Memory +; --------------------------------------------------------------------------- + diff --git a/cfg/kim1.cfg b/cfg/kim1.cfg new file mode 100644 index 000000000..69636065e --- /dev/null +++ b/cfg/kim1.cfg @@ -0,0 +1,41 @@ +# kim1.cfg (4k) +# +# for unexpanded Kim-1 +# +# ld65 --config kim1.cfg -o <prog>.bin <prog>.o + +FEATURES { + STARTADDRESS: default = $0200; + CONDES: segment = STARTUP, + type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__; +} + +SYMBOLS { + __STACKSIZE__: type = weak, value = $0080; # 128 byte program stack + __STARTADDRESS__: type = export, value = %S; +} + +MEMORY { + ZP: file = %O, define = yes, start = $0000, size = $00EE; + CPUSTACK: file = "", define = yes, start = $0100, size = $0100; + RAM: file = %O, define = yes, start = %S, size = $1000 - %S - __STACKSIZE__; + MAINROM: file = "", define = yes, start = $E000, size = $1000; + TOP: file = "", define = yes, start = $F000, size = $1000; +} + +SEGMENTS { + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; + BSS: load = RAM, type = bss, define = yes; +} + diff --git a/include/kim1.h b/include/kim1.h new file mode 100644 index 000000000..52e690c9d --- /dev/null +++ b/include/kim1.h @@ -0,0 +1,67 @@ +/*****************************************************************************/ +/* */ +/* kim1.h */ +/* */ +/* Kim-1 system-specific definitions */ +/* */ +/* */ +/* */ +/* (C) 2022 Dave Plummer */ +/* Email: davepl@davepl.com */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + +#ifndef _KIM1_H +#define _KIM1_H + +/* Check for errors */ +#if !defined(__KIM1__) +# error This module may only be used when compiling for the Kim-1! +#endif + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + +/*****************************************************************************/ +/* Hardware */ +/*****************************************************************************/ + + +// Todo (davepl) +// +// #include <_6530.h> +// #define RIOT3 (*(struct __6530*)0x1700) // U25 +// #define RIOT2 (*(struct __6530*)0x1740) // U28 + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + +/* Read from tape */ +int __fastcall__ loadt (unsigned char); + +/* Write to tape */ +int __fastcall__ dumpt (unsigned char, const void*, const void*); + +/* End of sym1.h */ +#endif diff --git a/libsrc/Makefile b/libsrc/Makefile index 2018de801..627897d9b 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -27,6 +27,7 @@ TARGETS = apple2 \ $(CBMS) \ $(GEOS) \ gamate \ + kim1 \ lynx \ nes \ none \ diff --git a/libsrc/kim1/crt0.s b/libsrc/kim1/crt0.s new file mode 100644 index 000000000..7e7dd485b --- /dev/null +++ b/libsrc/kim1/crt0.s @@ -0,0 +1,47 @@ +; +; Startup code for cc65 (kim-1 version) +; + + .export _init, _exit + .export __STARTUP__ : absolute = 1 ; Mark as startup + + .import _main + .import initlib, donelib, copydata, zerobss + .import __RAM_START__, __RAM_SIZE__ ; Linker generated + .import __STACKSIZE__ ; Linker generated + + .include "zeropage.inc" + .include "kim1.inc" + + +; Place the startup code in a special segment + +.segment "STARTUP" + + +; A little light housekeeping + +_init: cld ; Clear decimal mode + +; Set cc65 argument stack pointer + + lda #<(__RAM_START__ + __RAM_SIZE__) + sta sp + lda #>(__RAM_START__ + __RAM_SIZE__) + sta sp+1 + +; Initialize memory storage + + jsr zerobss ; Clear BSS segment + jsr copydata ; Initialize DATA segment + jsr initlib ; Run constructors + +; Call main() + + jsr _main + +; Back from main (this is also the _exit entry). There may be a more elegant way to9 +; return to the monitor on the Kim-1, but I don't know it! + +_exit: brk + diff --git a/libsrc/kim1/ctype.s b/libsrc/kim1/ctype.s new file mode 100644 index 000000000..1301965eb --- /dev/null +++ b/libsrc/kim1/ctype.s @@ -0,0 +1,5 @@ +; Character specification table. +; +; uses the "common" definition + + .include "ctype_common.inc" diff --git a/libsrc/kim1/read.s b/libsrc/kim1/read.s new file mode 100644 index 000000000..5566a9f27 --- /dev/null +++ b/libsrc/kim1/read.s @@ -0,0 +1,51 @@ +; +; int __fastcall__ read (int fd, void* buf, unsigned count); +; + +.include "kim1.inc" + +.import popax, popptr1 +.importzp ptr1, ptr2, ptr3 + +.export _read + +.proc _read + + sta ptr3 + stx ptr3+1 ; Count in ptr3 + inx + stx ptr2+1 ; Increment and store in ptr2 + tax + inx + stx ptr2 + jsr popptr1 ; Buffer address in ptr1 + jsr popax + +begin: dec ptr2 + bne getch + dec ptr2+1 + beq done ; If buffer full, return + +getch: jsr INTCHR ; Get character using Monitor ROM call + ;jsr OUTCHR ; Echo it + and #$7F ; Clear top bit + cmp #$07 ; Check for '\a' + bne chkcr ; ...if BEL character + ;jsr BEEP ; Make beep sound TODO +chkcr: cmp #$0D ; Check for '\r' + bne putch ; ...if CR character + lda #$0A ; Replace with '\n' + jsr OUTCHR ; and echo it + +putch: ldy #$00 ; Put char into return buffer + sta (ptr1),y + inc ptr1 ; Increment pointer + bne begin + inc ptr1+1 + bne begin + +done: lda ptr3 + ldx ptr3+1 + rts ; Return count + +.endproc diff --git a/libsrc/kim1/tapeio.s b/libsrc/kim1/tapeio.s new file mode 100644 index 000000000..4a16d6b9c --- /dev/null +++ b/libsrc/kim1/tapeio.s @@ -0,0 +1,39 @@ +; +; int __fastcall__ loadt (unsigned char id); +; int __fastcall__ dumpt (unsigned char id, void* start_addr, void* end_addr); +; + +.include "kim1.inc" + +.import popa, popax, return0, return1 + +.export _loadt, _dumpt + +.segment "CODE" + +.proc _loadt: near + + sta ID ; Tape record ID to P1L + jsr LOADT ; Read data from tape + bcs error + jmp return0 ; Return 0 if sucessful +error: jmp return1 ; or 1 if not + +.endproc + +.proc _dumpt: near + + sta EAL ; End address + stx EAH + jsr popax + sta SAL ; Start address + stx SAH + jsr popa + sta ID ; Tape Record ID + ldx #$00 + jsr DUMPT ; Write data to tape + bcs error + jmp return0 ; Return 0 if sucessful +error: jmp return1 ; or 1 if not + +.endproc diff --git a/libsrc/kim1/write.s b/libsrc/kim1/write.s new file mode 100644 index 000000000..216f5031c --- /dev/null +++ b/libsrc/kim1/write.s @@ -0,0 +1,49 @@ +; +; int __fastcall__ write (int fd, const void* buf, int count); +; + +.include "kim1.inc" + +.import popax, popptr1 +.importzp ptr1, ptr2, ptr3 + +.export _write + +.proc _write + + sta ptr3 + stx ptr3+1 ; Count in ptr3 + inx + stx ptr2+1 ; Increment and store in ptr2 + tax + inx + stx ptr2 + jsr popptr1 ; Buffer address in ptr1 + jsr popax + +begin: dec ptr2 + bne outch + dec ptr2+1 + beq done + +outch: ldy #0 + lda (ptr1),y + jsr OUTCHR ; Send character using Monitor call + cmp #$07 ; Check for '\a' + bne chklf ; ...if BEL character +;jsr BEEP ; Make beep sound +chklf: cmp #$0A ; Check for 'n' + bne next ; ...if LF character + lda #$0D ; Add a carriage return + jsr OUTCHR + +next: inc ptr1 + bne begin + inc ptr1+1 + jmp begin + +done: lda ptr3 + ldx ptr3+1 + rts ; Return count + +.endproc diff --git a/samples/Makefile b/samples/Makefile index 4007e3522..cec4bed89 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -154,7 +154,7 @@ endif # Lists of subdirectories # disasm depends on cpp -DIRLIST = tutorial geos atari2600 atari5200 apple2 gamate lynx supervision sym1 cbm +DIRLIST = tutorial geos atari2600 atari5200 apple2 gamate lynx supervision sym1 kim1 cbm # -------------------------------------------------------------------------- # Lists of executables @@ -329,6 +329,9 @@ EXELIST_supervision = \ EXELIST_sym1 = \ notavailable +EXELIST_kim1 = \ + notavailable + EXELIST_telestrat = \ ascii \ checkversion \ @@ -395,6 +398,7 @@ TARGETS := \ creativision \ cx16 \ gamate \ + kim1 \ lunix \ lynx \ nes \ diff --git a/samples/kim1/Makefile b/samples/kim1/Makefile new file mode 100644 index 000000000..89600ad5a --- /dev/null +++ b/samples/kim1/Makefile @@ -0,0 +1,56 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= kim1 + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) +endif + +EXELIST_kim1 = \ + kimHello.bin + +ifneq ($(EXELIST_$(SYS)),) +samples: $(EXELIST_$(SYS)) +else +samples: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: kim1 tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'samples' message + @echo > $(NULLDEV) +endif + +kimHello.bin: kimHello.c + $(CL) -t kim1 -O -o kimHello.bin kimHello.c + +clean: + @$(DEL) kimHello.bin 2>$(NULLDEV) diff --git a/samples/kim1/kimHello b/samples/kim1/kimHello new file mode 100644 index 0000000000000000000000000000000000000000..5842567557dc9f321409d269970f08832b736d86 GIT binary patch literal 2789 zcmbVOTWl2989p<!moqbGW`|^LuiKKGv;}Gss1s;#q)H_X&?OpGQAIB5O9zD|Yicfy zTZvX`id4^PyYa5P4=B(o(lGL@m@VsitJ2o0P$RXt9weHRms}Kq2*Qh942&^glRj+! zGd2QM>PwHj|K(i1^Ur@f{@6caBR^#e^evV4CFt9Pc8bVHbVBy0T$R2rJ0ktL?4Nib zo8J=YZ<8)^P!)bIYN9})f5+@!{>KkCxqxB*K%{?2S`KP<wmO;E>arRkDPJQrCHdD} z0@!q1Hct~T-8U=R>2Yzg!)n|iY!z*Y=9&Z-6I^_pQ(G)ZbVziBX1ZQ%rU7*b56R8W zzS-W9rvhdCYxE5<>*1Q5z-yyl4%@htlkG^!b8X~<mOOr*@3BrTk{gTU_!6=FC6{FO zFOm^q#(ZD)GPQ1C^niF{p0K4Gw+LIXz}^PY#xxBqZs^)riVI-(5T;$23X+G-@8E}& zBF;MTi8MMsO^U{1-cA=f=wFg{XQ7L;OrhIHC##t$_-kg$e<Ym#iFlnh_PT7Ddn;6f zHDPj!-D!2P`D2+}r`<UM?(3Vzw&Hb7%eER<!Zq}G!ijs`RaEpcoXDJDPE<~mDx#+e zeO;_G)s3H-CP&lfj3p~r!@z5tg2U*KMDtgYk6iWLIdabU92PdPcx8@+-NBO}TqmIs zP!MjAFd2M>$(5S~j+uJQr9m%C)In)>Rzec2U&e!Iy&9tvVtJlaZjs>yGJKl==tlO% zXy-%Q-io#@kV>@SXK-OY><E4wt_t>rI55LlFu+v5UA_}tI20RRB<@m$XfCNhAl?vz z*O?A!QC=cGD&HgK$#}2_4)wDQE^2_eqDvcKzUV$#xl8D8#8IhNJ$09aiQy$4dPkw( zl=z_otb=D4E^yChsu-eC#o(0SAX^8=PTeG7SGHipjkp+>v<0Hw1`NNKE{b^vuV5Tv znu{uT$PBp0Kg`wzgN$(7hz7RuOMb#sIwHcIJEJ=fgQ2gno@@ial?cm!4FLHT1GeOY z!%SYuxB&&ugE=eeD@s|{Dk-h8Y)Hr00-4jb#%*%)dP*BlRCH}PrS&!D$#q?;H*OI= z3-PV*Y?p7563}_lm?KQ0-4gw(1Y*cVz%Lsb_;HnHO=UC3a>z!Ia6;a4+Lw-ui%@Ig zkOU<cCjCxVH2(}`^Nx*uV#~l4;Hum7+qU7LnNVxusxrmyw&a$|!j{2qT9**(c(Hy) zB_r_{VPtwz^)raL$m#>rtWm_oNnsLM9_pKo!Oem-DMU)*zQWrOa$|I>LVuZn7Le%? z!UWJnm~h)AlO{pNp$>ErstQ_C2IlG~GW5Lci}Xqo&O<{IsGxu;$pD32=9iL}+H7^u zX5Ac5j#V=pCz8c#<{VdCbOL2z2H8-l$nMUYA0*3<Xg01qszJI4P23|e**7Ro)Xfi* zpvKrdWD#}|H&~`uWhcprOfMv9h~aKMKumGspgW5BNP@ngf)yFCBHiG?jYl=;000d3 zVCHcYzLy?V0Kf4&GB!@kTA~FGYY7&&3|b*-p)d|V$!Z}!D*>*P;ACapa#1FSvZb6* z&s&+D?S3H(nb42wp2(RkdQ!xtyanM{j&+s}CmhL>cq0*kl&UCStRl-ccnebss!a+S zJt%Vx8nZ>ej%(7W@t(q-^TfCu$86Q5BTRGDiQ8&bDH==WUvbG;?Qd{URcR?;zsmbC z4U@d`%(pQB_~2~nBi_H)ifg6yXN{5Aw9&#vHg|I3iVDpgfT0N4Cl1P2l~9^uOCG6d z7E8FOWU<eAh^_Em?;=-2(YP7$*^#Re{}kwY%hpTb#zG2AKQ=0d>mX%~9jU$gh?>da zx+muh+bHcd_U(naBAfN}TFNrF$OU;6*YpA&(j9C*FWWjl@4yFytL@Z|2d7hZs<bz? zkDt9(_jC)EBmj;k?(hj76I+I$+1UJBayYFunq=(v{3-NMO~~v|Yw!+5%?OeJf{XbI zchncuQ)vx?>I>$1-l@<i6yqekzYr8&Jiwrhqb#o>(MIr=3XX6;Y7of>)5}T24^F|l z#REB0Q0p@VWjUUc3X4su;S==xk5T8bo?iq>h60VneFaoFhFh3@+LGBvk?&8ZvrTj~ zod>kj9bD`H(c&56f^khH#8d2EOPyi2k6HY?_zEwPFiratJt9;w?x)ao*&IO5cuGx$ zbhY&;LUdG#9%~=jl4I0T;p03v)~}W7XLV1SPK{t&DoyM47A_Up6<f5T<?+~A9TG?9 ziE{%cp@OdRe>9>}Y<xz>E)&`trCnTRNqAu{5T<!Jv;P7Cv9$jpDPJT|ZdvGuFm;hQ zViT1=BmM>WMvyKOpFlOxSER-TGIo*tPY<r<-w8g89H@W;HBi8Lms+y9OO3qePp@=Q zbkaqk!u{~?mVA!geXlo+b8XSu_0vN+x|<I49{_e>4?Xl|Zg7xp|L(5s-+PK48p!P) z%xzQ@q-1jg0|)7=2j3jn^90wGUHRPyemKbG-lw10wD}v)Zs~jO`ES3lZTpT5&pf?( z%jUjK&u;ERNDzsv7+YU**j^a5Vv)0G$Y^<N;seB&UVeGam+ub|p{?7trB~e_0y?y^ z{r_eUKQBl?f`CNfzro%izb5Yz6QS}Xsr-YK&y&hONpYgxE`PMlJ|x4R5ZZ1#Z8l>e JbXnmD{{hxi-7)|G literal 0 HcmV?d00001 diff --git a/samples/kim1/kimHello.c b/samples/kim1/kimHello.c new file mode 100644 index 000000000..dcbfb4e67 --- /dev/null +++ b/samples/kim1/kimHello.c @@ -0,0 +1,24 @@ +// -------------------------------------------------------------------------- +// Hello World for Kim-1 +// +// Dave Plummer based on Sym-1 sample by Wayne Parham +// +// davepl@davepl.com +// -------------------------------------------------------------------------- + +#include <stdio.h> +#include <kim1.h> + +int main (void) +{ + char str[100]; + char c = 0x00; + + printf ("\nHello World!\n\n"); + printf ("Type a line and press ENTER, please.\n\n"); + + gets( str ); + + printf ("\n\nThanks: %s\n\n", str); + return 0; +} diff --git a/src/ca65/main.c b/src/ca65/main.c index b1ef3a3db..4146aaf11 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -342,6 +342,10 @@ static void SetSys (const char* Sys) NewSymbol ("__SYM1__", 1); break; + case TGT_KIM1: + NewSymbol ("__KIM1__", 1); + break; + default: AbEnd ("Invalid target name: '%s'", Sys); diff --git a/src/cc65/main.c b/src/cc65/main.c index c08616efa..f800ac43e 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -299,6 +299,10 @@ static void SetSys (const char* Sys) DefineNumericMacro ("__SYM1__", 1); break; + case TGT_KIM1: + DefineNumericMacro ("__KIM1__", 1); + break; + default: AbEnd ("Unknown target system '%s'", Sys); } diff --git a/src/common/target.c b/src/common/target.c index 4a851034a..ad62990bd 100644 --- a/src/common/target.c +++ b/src/common/target.c @@ -163,6 +163,7 @@ static const TargetEntry TargetMap[] = { { "geos", TGT_GEOS_CBM }, { "geos-apple", TGT_GEOS_APPLE }, { "geos-cbm", TGT_GEOS_CBM }, + { "kim1", TGT_KIM1 }, { "lunix", TGT_LUNIX }, { "lynx", TGT_LYNX }, { "module", TGT_MODULE }, @@ -219,6 +220,7 @@ static const TargetProperties PropertyTable[TGT_COUNT] = { { "c65", CPU_4510, BINFMT_BINARY, CTPET }, { "cx16", CPU_65C02, BINFMT_BINARY, CTPET }, { "sym1", CPU_6502, BINFMT_BINARY, CTNone }, + { "kim1", CPU_6502, BINFMT_BINARY, CTNone }, }; /* Target system */ diff --git a/src/common/target.h b/src/common/target.h index 7087048e2..7439fa621 100644 --- a/src/common/target.h +++ b/src/common/target.h @@ -87,6 +87,7 @@ typedef enum { TGT_C65, TGT_CX16, TGT_SYM1, + TGT_KIM1, // Added at end so as not to shift existing entries TGT_COUNT /* Number of target systems */ } target_t; diff --git a/targettest/Makefile b/targettest/Makefile index 0450bfd4e..23463ccd9 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -742,6 +742,7 @@ TARGETS := \ creativision \ cx16 \ gamate \ + kim1 \ lunix \ lynx \ nes \ From 5aa75ae81f07724ef8c16d61e42b74a20296acae Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 6 Jun 2022 14:01:16 +0200 Subject: [PATCH 1306/2710] handle loadaddr the same as with the other CBM targets --- cfg/vic20-asm.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/vic20-asm.cfg b/cfg/vic20-asm.cfg index 7ab70888c..286a7f95c 100644 --- a/cfg/vic20-asm.cfg +++ b/cfg/vic20-asm.cfg @@ -6,7 +6,7 @@ SYMBOLS { } MEMORY { ZP: file = "", start = $0002, size = $001A, define = yes; - LOADADDR: file = %O, start = $1001, size = $0002; + LOADADDR: file = %O, start = %S - 2, size = $0002; MAIN: file = %O, start = %S, size = $0DF3 - %S; } SEGMENTS { From 8f9777d9e0d34b4be32ff09750980138d61e9e01 Mon Sep 17 00:00:00 2001 From: Dave Plummer <dave@daveandnikki.com> Date: Mon, 6 Jun 2022 15:14:01 -0700 Subject: [PATCH 1307/2710] Fix ushot overflow, capitalization --- cfg/kim1-60k.cfg | 41 +++++++++++++ include/kim1.h | 4 +- libsrc/kim1/crt0.s | 2 +- samples/kim1/Makefile | 8 ++- samples/kim1/kimSieve.c | 125 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 176 insertions(+), 4 deletions(-) create mode 100644 cfg/kim1-60k.cfg create mode 100644 samples/kim1/kimSieve.c diff --git a/cfg/kim1-60k.cfg b/cfg/kim1-60k.cfg new file mode 100644 index 000000000..a6704d9dd --- /dev/null +++ b/cfg/kim1-60k.cfg @@ -0,0 +1,41 @@ +# kim1.cfg (4k) +# +# for unexpanded Kim-1 +# +# ld65 --config kim1.cfg -o <prog>.bin <prog>.o + +FEATURES { + STARTADDRESS: default = $2000; + CONDES: segment = STARTUP, + type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__; +} + +SYMBOLS { + __STACKSIZE__: type = weak, value = $0080; # 128 byte program stack + __STARTADDRESS__: type = export, value = %S; +} + +MEMORY { + ZP: file = %O, define = yes, start = $0000, size = $00EE; + CPUSTACK: file = "", define = yes, start = $0100, size = $0100; + RAM: file = %O, define = yes, start = %S, size = $E000 - %S - __STACKSIZE__; + MAINROM: file = "", define = yes, start = $E000, size = $1000; + TOP: file = "", define = yes, start = $F000, size = $1000; +} + +SEGMENTS { + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; + BSS: load = RAM, type = bss, define = yes; +} + diff --git a/include/kim1.h b/include/kim1.h index 52e690c9d..bb616f7a0 100644 --- a/include/kim1.h +++ b/include/kim1.h @@ -2,7 +2,7 @@ /* */ /* kim1.h */ /* */ -/* Kim-1 system-specific definitions */ +/* KIM-1 system-specific definitions */ /* */ /* */ /* */ @@ -33,7 +33,7 @@ /* Check for errors */ #if !defined(__KIM1__) -# error This module may only be used when compiling for the Kim-1! +# error This module may only be used when compiling for the KIM-1! #endif diff --git a/libsrc/kim1/crt0.s b/libsrc/kim1/crt0.s index 7e7dd485b..aefdc3545 100644 --- a/libsrc/kim1/crt0.s +++ b/libsrc/kim1/crt0.s @@ -1,5 +1,5 @@ ; -; Startup code for cc65 (kim-1 version) +; Startup code for cc65 (KIM-1 version) ; .export _init, _exit diff --git a/samples/kim1/Makefile b/samples/kim1/Makefile index 89600ad5a..74c415fdc 100644 --- a/samples/kim1/Makefile +++ b/samples/kim1/Makefile @@ -32,7 +32,8 @@ else endif EXELIST_kim1 = \ - kimHello.bin + kimHello.bin \ + kimSieve.bin ifneq ($(EXELIST_$(SYS)),) samples: $(EXELIST_$(SYS)) @@ -49,8 +50,13 @@ else @echo > $(NULLDEV) endif +kimSieve.bin: kimSieve.c + $(CL) -t kim1 -C kim1-60k.cfg -O -o kimSieve.bin kimSieve.c + kimHello.bin: kimHello.c $(CL) -t kim1 -O -o kimHello.bin kimHello.c clean: + @$(DEL) kimSieve.bin 2>$(NULLDEV) @$(DEL) kimHello.bin 2>$(NULLDEV) + diff --git a/samples/kim1/kimSieve.c b/samples/kim1/kimSieve.c new file mode 100644 index 000000000..29cd7c7e9 --- /dev/null +++ b/samples/kim1/kimSieve.c @@ -0,0 +1,125 @@ +#include <stdio.h> +#include <stdlib.h> + +typedef unsigned char byte; +typedef unsigned short int ushort; +typedef unsigned long int ulong; + +#define LIMIT 100000L + +// BITARRAY +// +// My bit-access macros pre-divide by two on the presumption that you'll never +// try try access both odd and even bits! + +#define GETBIT(array, bit) (array[bit >> 4] & (1 << ((bit >> 1) & 7))) +#define SETBIT(array, bit) (array[bit >> 4] |= (1 << ((bit >> 1) & 7))) +#define CLRBIT(array, bit) (array[bit >> 4] &= ~(1 << ((bit >> 1) & 7))) + +// RepeatChar +// +// Outputs a given character N times + +void RepeatChar(char c, size_t count) +{ + while (count--) + putc(c, stdout); +} + +// sqrti +// +// Binary search integer square root + +ushort sqrti(ulong num) +{ + long i; + ulong ret = 0; + + for(i = 15; i >= 0; i--) + { + ulong temp = ret | (1L << (ulong)i); + if(temp * temp <= num) + { + ret = temp; + } + } + return ret; +} + +// main() +// +// CC65 main function receives no parameters + +int main(void) +{ + // CC65 cannot mix code and data so we have to declare all variables here in the function prolog + + ulong iNumber; + ushort currentFactor; + ulong numBytesAllocated, rootOfLimit; + byte *array; + ulong countOfPrimes; + + rootOfLimit = sqrti(LIMIT); + puts("\r\n\r\n"); + RepeatChar('*', 70); + puts("\r\n** Prime Number Sieve - Dave Plummer 2022 **"); + RepeatChar('*', 70); + + printf("\r\n\r\nCalculating primes to %ld using a sqrt of %ld...\r\n", LIMIT, rootOfLimit); + + // Calculate how much memory should be allocated + + numBytesAllocated = (LIMIT + 15) / 16; + array = malloc(numBytesAllocated); + if (!array) + { + printf("Unable to allocate %ld bytes for %ld bits\r\n", numBytesAllocated, LIMIT); + return 0; + } + else + { + printf("Allocated %ld bytes for %ld slots\r\n", numBytesAllocated, LIMIT); + + // Preset all the bits to true + + for (iNumber = 0; iNumber < numBytesAllocated; iNumber++) + array[iNumber] = 0xFF; + } + + // Search for next unmarked factor + + currentFactor = 3; + while (currentFactor <= rootOfLimit) + { + ulong num, n; + + for (num = currentFactor; num <= LIMIT; num += 2) + { + if (GETBIT(array, num)) + { + currentFactor = num; + break; + } + } + + for (n = (ulong) currentFactor * currentFactor; n <= LIMIT; n += currentFactor * 2) + CLRBIT(array, n); + + currentFactor += 2; + } + + // Display results + // + // printf("The following primes were found at or below %ld:\r\n2, ", LIMIT); + + countOfPrimes = 1; + for (iNumber = 3; iNumber <= LIMIT; iNumber += 2) + if (GETBIT(array, iNumber)) + countOfPrimes++; + + printf("[END: Count = %ld]\r\n", countOfPrimes); + + free(array); + return 1; +} From 46541237e0d238ad635a53b09f39764c3b4fd173 Mon Sep 17 00:00:00 2001 From: David W Plummer <davepl@davepl.com> Date: Mon, 6 Jun 2022 15:17:19 -0700 Subject: [PATCH 1308/2710] Add to contributor list for KIM-1 target --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e917a13e0..f011af83c 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,7 @@ External contributors: * [karrika](https://github.com/karrika): Atari 7800 target * [Stephan Mühlstrasser](https://github.com/smuehlst): osic1p target * [Wayne Parham](https://github.com/WayneParham): Sym-1 target +* [Dave Plummeer](https://github.com/davepl): KIM-1 target *(The above list is incomplete, if you feel left out - please speak up or add yourself in a PR)* From db44d59f7c99e602ff9619893bcaa6c0f319c216 Mon Sep 17 00:00:00 2001 From: David W Plummer <davepl@davepl.com> Date: Mon, 6 Jun 2022 15:17:39 -0700 Subject: [PATCH 1309/2710] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f011af83c..287520320 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ External contributors: * [karrika](https://github.com/karrika): Atari 7800 target * [Stephan Mühlstrasser](https://github.com/smuehlst): osic1p target * [Wayne Parham](https://github.com/WayneParham): Sym-1 target -* [Dave Plummeer](https://github.com/davepl): KIM-1 target +* [Dave Plummer](https://github.com/davepl): KIM-1 target *(The above list is incomplete, if you feel left out - please speak up or add yourself in a PR)* From 3ef8dd3c0c873a0a77f3e51877cff11e81ec3dd9 Mon Sep 17 00:00:00 2001 From: Kevin Pulo <kev@pulo.com.au> Date: Thu, 16 Jun 2022 15:06:02 +1000 Subject: [PATCH 1310/2710] lynx: fix TGI_COLOR_DARKBROWN --- include/lynx.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/lynx.h b/include/lynx.h index c0b89eef7..63bab3508 100644 --- a/include/lynx.h +++ b/include/lynx.h @@ -83,7 +83,7 @@ #define TGI_COLOR_YELLOW COLOR_YELLOW #define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN #define TGI_COLOR_GREEN COLOR_GREEN -#define TGI_COLOR_DARKBROWN COLOR_DARKBROWN +#define TGI_COLOR_DARKBROWN COLOR_BROWN #define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE From 48ae6716addecfcc0deccd6f5bb5c1411d81f2d5 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Thu, 16 Jun 2022 20:57:53 +0200 Subject: [PATCH 1311/2710] Some test cases for ca65 --- .../listing/001-macro-simple-listing.list-ref | 20 + test/asm/listing/001-macro-simple-listing.s | 16 + .../listing/002-macro-param-listing.list-ref | 20 + test/asm/listing/002-macro-param-listing.s | 16 + test/asm/listing/010-paramcount.err-ref | 15 + .../{paramcount.s => 010-paramcount.s} | 0 test/asm/listing/020-asciiz.bin-ref | Bin 0 -> 100 bytes test/asm/listing/020-asciiz.list-ref | 30 + test/asm/listing/020-asciiz.s | 14 + test/asm/listing/100-byte.bin-ref | Bin 0 -> 4390 bytes test/asm/listing/100-byte.list-ref | 3652 +++++++++ test/asm/listing/100-byte.s | 3526 +++++++++ test/asm/listing/101-byt.bin-ref | Bin 0 -> 4390 bytes test/asm/listing/101-byt.list-ref | 3652 +++++++++ test/asm/listing/101-byt.s | 3526 +++++++++ test/asm/listing/102-word.bin-ref | Bin 0 -> 14270 bytes test/asm/listing/102-word.list-ref | 6226 +++++++++++++++ test/asm/listing/102-word.s | 6076 +++++++++++++++ test/asm/listing/103-dbyt.bin-ref | Bin 0 -> 14270 bytes test/asm/listing/103-dbyt.list-ref | 6226 +++++++++++++++ test/asm/listing/103-dbyt.s | 6076 +++++++++++++++ test/asm/listing/104-dword.bin-ref | Bin 0 -> 23192 bytes test/asm/listing/104-dword.list-ref | 5006 ++++++++++++ test/asm/listing/104-dword.s | 4874 ++++++++++++ test/asm/listing/105-faraddr.bin-ref | Bin 0 -> 24543 bytes test/asm/listing/105-faraddr.list-ref | 6921 +++++++++++++++++ test/asm/listing/105-faraddr.s | 6717 ++++++++++++++++ test/asm/listing/106-hibytes.bin-ref | Bin 0 -> 7135 bytes test/asm/listing/106-hibytes.list-ref | 6226 +++++++++++++++ test/asm/listing/106-hibytes.s | 6076 +++++++++++++++ test/asm/listing/107-lobytes.bin-ref | Bin 0 -> 7135 bytes test/asm/listing/107-lobytes.list-ref | 6226 +++++++++++++++ test/asm/listing/107-lobytes.s | 6076 +++++++++++++++ test/asm/listing/Makefile | 14 +- 34 files changed, 87224 insertions(+), 3 deletions(-) create mode 100644 test/asm/listing/001-macro-simple-listing.list-ref create mode 100644 test/asm/listing/001-macro-simple-listing.s create mode 100644 test/asm/listing/002-macro-param-listing.list-ref create mode 100644 test/asm/listing/002-macro-param-listing.s create mode 100644 test/asm/listing/010-paramcount.err-ref rename test/asm/listing/{paramcount.s => 010-paramcount.s} (100%) create mode 100644 test/asm/listing/020-asciiz.bin-ref create mode 100644 test/asm/listing/020-asciiz.list-ref create mode 100644 test/asm/listing/020-asciiz.s create mode 100644 test/asm/listing/100-byte.bin-ref create mode 100644 test/asm/listing/100-byte.list-ref create mode 100644 test/asm/listing/100-byte.s create mode 100644 test/asm/listing/101-byt.bin-ref create mode 100644 test/asm/listing/101-byt.list-ref create mode 100644 test/asm/listing/101-byt.s create mode 100644 test/asm/listing/102-word.bin-ref create mode 100644 test/asm/listing/102-word.list-ref create mode 100644 test/asm/listing/102-word.s create mode 100644 test/asm/listing/103-dbyt.bin-ref create mode 100644 test/asm/listing/103-dbyt.list-ref create mode 100644 test/asm/listing/103-dbyt.s create mode 100644 test/asm/listing/104-dword.bin-ref create mode 100644 test/asm/listing/104-dword.list-ref create mode 100644 test/asm/listing/104-dword.s create mode 100644 test/asm/listing/105-faraddr.bin-ref create mode 100644 test/asm/listing/105-faraddr.list-ref create mode 100644 test/asm/listing/105-faraddr.s create mode 100644 test/asm/listing/106-hibytes.bin-ref create mode 100644 test/asm/listing/106-hibytes.list-ref create mode 100644 test/asm/listing/106-hibytes.s create mode 100644 test/asm/listing/107-lobytes.bin-ref create mode 100644 test/asm/listing/107-lobytes.list-ref create mode 100644 test/asm/listing/107-lobytes.s diff --git a/test/asm/listing/001-macro-simple-listing.list-ref b/test/asm/listing/001-macro-simple-listing.list-ref new file mode 100644 index 000000000..72849ea11 --- /dev/null +++ b/test/asm/listing/001-macro-simple-listing.list-ref @@ -0,0 +1,20 @@ +Main file : 001-macro-simple-listing.s +Current file: 001-macro-simple-listing.s + +000000r 1 ; 2022-01-17 Spiro Trikaliotis +000000r 1 +000000r 1 .macro TESTER +000000r 1 lda #2 +000000r 1 .endmacro +000000r 1 +000000r 1 test: +000000r 1 A2 00 ldx #0 +000002r 1 A9 02 TESTER +000004r 1 A2 0F ldx #15 +000006r 1 A9 02 TESTER +000008r 1 E8 inx +000009r 1 A9 02 TESTER +00000Br 1 A9 02 TESTER +00000Dr 1 CA dex +00000Er 1 60 rts +00000Er 1 diff --git a/test/asm/listing/001-macro-simple-listing.s b/test/asm/listing/001-macro-simple-listing.s new file mode 100644 index 000000000..272863de7 --- /dev/null +++ b/test/asm/listing/001-macro-simple-listing.s @@ -0,0 +1,16 @@ +; 2022-01-17 Spiro Trikaliotis + +.macro TESTER + lda #2 +.endmacro + +test: + ldx #0 + TESTER + ldx #15 + TESTER + inx + TESTER + TESTER + dex + rts diff --git a/test/asm/listing/002-macro-param-listing.list-ref b/test/asm/listing/002-macro-param-listing.list-ref new file mode 100644 index 000000000..25d67d504 --- /dev/null +++ b/test/asm/listing/002-macro-param-listing.list-ref @@ -0,0 +1,20 @@ +Main file : 002-macro-param-listing.s +Current file: 002-macro-param-listing.s + +000000r 1 ; 2022-01-17 Spiro Trikaliotis +000000r 1 +000000r 1 .macro TESTER val +000000r 1 lda #val +000000r 1 .endmacro +000000r 1 +000000r 1 test: +000000r 1 A2 00 ldx #0 +000002r 1 A9 01 TESTER 1 +000004r 1 A2 0F ldx #15 +000006r 1 A9 02 TESTER 2 +000008r 1 E8 inx +000009r 1 A9 03 TESTER 3 +00000Br 1 A9 04 TESTER 4 +00000Dr 1 CA dex +00000Er 1 60 rts +00000Er 1 diff --git a/test/asm/listing/002-macro-param-listing.s b/test/asm/listing/002-macro-param-listing.s new file mode 100644 index 000000000..3d4b1b921 --- /dev/null +++ b/test/asm/listing/002-macro-param-listing.s @@ -0,0 +1,16 @@ +; 2022-01-17 Spiro Trikaliotis + +.macro TESTER val + lda #val +.endmacro + +test: + ldx #0 + TESTER 1 + ldx #15 + TESTER 2 + inx + TESTER 3 + TESTER 4 + dex + rts diff --git a/test/asm/listing/010-paramcount.err-ref b/test/asm/listing/010-paramcount.err-ref new file mode 100644 index 000000000..a66162eb5 --- /dev/null +++ b/test/asm/listing/010-paramcount.err-ref @@ -0,0 +1,15 @@ + .paramcount = 3 + .paramcount = 5 +010-paramcount.s:18: Warning: User warning: r1 is blank! +010-paramcount.s:14: Note: Macro was defined here +010-paramcount.s:8: Note: Macro was defined here + .paramcount = 3 + .paramcount = 5 +010-paramcount.s:19: Warning: User warning: r1 is blank! +010-paramcount.s:14: Note: Macro was defined here +010-paramcount.s:8: Note: Macro was defined here + .paramcount = 1 + .paramcount = 5 +010-paramcount.s:20: Warning: User warning: r1 is blank! +010-paramcount.s:14: Note: Macro was defined here +010-paramcount.s:8: Note: Macro was defined here diff --git a/test/asm/listing/paramcount.s b/test/asm/listing/010-paramcount.s similarity index 100% rename from test/asm/listing/paramcount.s rename to test/asm/listing/010-paramcount.s diff --git a/test/asm/listing/020-asciiz.bin-ref b/test/asm/listing/020-asciiz.bin-ref new file mode 100644 index 0000000000000000000000000000000000000000..11e154baab2639b95934f009a2b16caecf68e17d GIT binary patch literal 100 qcmZSZNX^N~R|wB9%1L3s!B+58NX%6zNi8nP%u8p$r3zUbRR;i=J|U9; literal 0 HcmV?d00001 diff --git a/test/asm/listing/020-asciiz.list-ref b/test/asm/listing/020-asciiz.list-ref new file mode 100644 index 000000000..25196a9ed --- /dev/null +++ b/test/asm/listing/020-asciiz.list-ref @@ -0,0 +1,30 @@ +Main file : 020-asciiz.s +Current file: 020-asciiz.s + +000000r 1 ; 2022-06-15 Spiro Trikaliotis +000000r 1 +000000r 1 +000000r 1 ; upper case pseudo-op +000000r 1 00 .ASCIIZ "" +000001r 1 48 65 6C 6C .ASCIIZ "Hello World" +000005r 1 6F 20 57 6F +000009r 1 72 6C 64 00 +00000Dr 1 48 65 6C 6C .ASCIIZ "Hello ","World" +000011r 1 6F 20 57 6F +000015r 1 72 6C 64 00 +000019r 1 48 65 6C 6C .ASCIIZ "Hello ","World"," ","I"," ","am"," ","testing" +00001Dr 1 6F 20 57 6F +000021r 1 72 6C 64 20 +000032r 1 +000032r 1 ; lower case pseudo-op +000032r 1 00 .asciiz "" +000033r 1 48 65 6C 6C .asciiz "Hello World" +000037r 1 6F 20 57 6F +00003Br 1 72 6C 64 00 +00003Fr 1 48 65 6C 6C .asciiz "Hello ","World" +000043r 1 6F 20 57 6F +000047r 1 72 6C 64 00 +00004Br 1 48 65 6C 6C .asciiz "Hello ","World"," ","I"," ","am"," ","testing" +00004Fr 1 6F 20 57 6F +000053r 1 72 6C 64 20 +000063r 1 diff --git a/test/asm/listing/020-asciiz.s b/test/asm/listing/020-asciiz.s new file mode 100644 index 000000000..dc02059eb --- /dev/null +++ b/test/asm/listing/020-asciiz.s @@ -0,0 +1,14 @@ +; 2022-06-15 Spiro Trikaliotis + + + ; upper case pseudo-op + .ASCIIZ "" + .ASCIIZ "Hello World" + .ASCIIZ "Hello ","World" + .ASCIIZ "Hello ","World"," ","I"," ","am"," ","testing" + + ; lower case pseudo-op + .asciiz "" + .asciiz "Hello World" + .asciiz "Hello ","World" + .asciiz "Hello ","World"," ","I"," ","am"," ","testing" diff --git a/test/asm/listing/100-byte.bin-ref b/test/asm/listing/100-byte.bin-ref new file mode 100644 index 0000000000000000000000000000000000000000..7deb4dffd90f773f70d6ddd872e73d3a59536355 GIT binary patch literal 4390 zcmZQzWMXDvWn<^y<l^Sx<>MC+6cQE@6%&_`l#-T_m6KOcR8m$^Ra4i{)Y8_`)zddH zG%_|ZH8Z!cw6eCbwX=6{baHlab#wRd^z!!c_45x13<?ej4GWKmjEatljf+o6OiE5k zO-s+n%*xKm&C4$+EGjN3Ei136tg5c5t*dWnY-(<4ZENr7?CS36?dzW~anj@|Q>RUz zF>}`JIdkXDU$Ah|;w4L$Enl&6)#^2C*R9{Mant54TeofBv2)k%J$v`<KXCBS;Uh<n z9Y1mM)af&4&z-+;@zUihSFc^aar4&gJ9qEhfAH|p<0ns_J%91?)$2EJ-@X6v@zduo zU%!3-@$=X3KY#!IXBhSWX#9_+|Iz$ETK<ie|D*NaX#GFh{uyomjkbSBO#7e4{hQJ5 z#c20(BzLcAoV^qjkq0Nx#wO5)CeTJE&;}+@$0fK0nFSM*svM&XELW{swfY|b-;7jQ literal 0 HcmV?d00001 diff --git a/test/asm/listing/100-byte.list-ref b/test/asm/listing/100-byte.list-ref new file mode 100644 index 000000000..2ee0df392 --- /dev/null +++ b/test/asm/listing/100-byte.list-ref @@ -0,0 +1,3652 @@ +Main file : 100-byte.s +Current file: 100-byte.s + +000000r 1 ; 2022-06-15 Spiro Trikaliotis +000000r 1 +000000r 1 +000000r 1 ; upper case pseudo-op +000000r 1 00 .BYTE 0 +000001r 1 01 .BYTE 1 +000002r 1 02 .BYTE 2 +000003r 1 03 .BYTE 3 +000004r 1 04 .BYTE 4 +000005r 1 05 .BYTE 5 +000006r 1 06 .BYTE 6 +000007r 1 07 .BYTE 7 +000008r 1 08 .BYTE 8 +000009r 1 09 .BYTE 9 +00000Ar 1 0A .BYTE 10 +00000Br 1 0B .BYTE 11 +00000Cr 1 0C .BYTE 12 +00000Dr 1 0D .BYTE 13 +00000Er 1 0E .BYTE 14 +00000Fr 1 0F .BYTE 15 +000010r 1 10 .BYTE 16 +000011r 1 11 .BYTE 17 +000012r 1 12 .BYTE 18 +000013r 1 13 .BYTE 19 +000014r 1 14 .BYTE 20 +000015r 1 15 .BYTE 21 +000016r 1 16 .BYTE 22 +000017r 1 17 .BYTE 23 +000018r 1 18 .BYTE 24 +000019r 1 19 .BYTE 25 +00001Ar 1 1A .BYTE 26 +00001Br 1 1B .BYTE 27 +00001Cr 1 1C .BYTE 28 +00001Dr 1 1D .BYTE 29 +00001Er 1 1E .BYTE 30 +00001Fr 1 1F .BYTE 31 +000020r 1 20 .BYTE 32 +000021r 1 21 .BYTE 33 +000022r 1 22 .BYTE 34 +000023r 1 23 .BYTE 35 +000024r 1 24 .BYTE 36 +000025r 1 25 .BYTE 37 +000026r 1 26 .BYTE 38 +000027r 1 27 .BYTE 39 +000028r 1 28 .BYTE 40 +000029r 1 29 .BYTE 41 +00002Ar 1 2A .BYTE 42 +00002Br 1 2B .BYTE 43 +00002Cr 1 2C .BYTE 44 +00002Dr 1 2D .BYTE 45 +00002Er 1 2E .BYTE 46 +00002Fr 1 2F .BYTE 47 +000030r 1 30 .BYTE 48 +000031r 1 31 .BYTE 49 +000032r 1 32 .BYTE 50 +000033r 1 33 .BYTE 51 +000034r 1 34 .BYTE 52 +000035r 1 35 .BYTE 53 +000036r 1 36 .BYTE 54 +000037r 1 37 .BYTE 55 +000038r 1 38 .BYTE 56 +000039r 1 39 .BYTE 57 +00003Ar 1 3A .BYTE 58 +00003Br 1 3B .BYTE 59 +00003Cr 1 3C .BYTE 60 +00003Dr 1 3D .BYTE 61 +00003Er 1 3E .BYTE 62 +00003Fr 1 3F .BYTE 63 +000040r 1 40 .BYTE 64 +000041r 1 41 .BYTE 65 +000042r 1 42 .BYTE 66 +000043r 1 43 .BYTE 67 +000044r 1 44 .BYTE 68 +000045r 1 45 .BYTE 69 +000046r 1 46 .BYTE 70 +000047r 1 47 .BYTE 71 +000048r 1 48 .BYTE 72 +000049r 1 49 .BYTE 73 +00004Ar 1 4A .BYTE 74 +00004Br 1 4B .BYTE 75 +00004Cr 1 4C .BYTE 76 +00004Dr 1 4D .BYTE 77 +00004Er 1 4E .BYTE 78 +00004Fr 1 4F .BYTE 79 +000050r 1 50 .BYTE 80 +000051r 1 51 .BYTE 81 +000052r 1 52 .BYTE 82 +000053r 1 53 .BYTE 83 +000054r 1 54 .BYTE 84 +000055r 1 55 .BYTE 85 +000056r 1 56 .BYTE 86 +000057r 1 57 .BYTE 87 +000058r 1 58 .BYTE 88 +000059r 1 59 .BYTE 89 +00005Ar 1 5A .BYTE 90 +00005Br 1 5B .BYTE 91 +00005Cr 1 5C .BYTE 92 +00005Dr 1 5D .BYTE 93 +00005Er 1 5E .BYTE 94 +00005Fr 1 5F .BYTE 95 +000060r 1 60 .BYTE 96 +000061r 1 61 .BYTE 97 +000062r 1 62 .BYTE 98 +000063r 1 63 .BYTE 99 +000064r 1 64 .BYTE 100 +000065r 1 65 .BYTE 101 +000066r 1 66 .BYTE 102 +000067r 1 67 .BYTE 103 +000068r 1 68 .BYTE 104 +000069r 1 69 .BYTE 105 +00006Ar 1 6A .BYTE 106 +00006Br 1 6B .BYTE 107 +00006Cr 1 6C .BYTE 108 +00006Dr 1 6D .BYTE 109 +00006Er 1 6E .BYTE 110 +00006Fr 1 6F .BYTE 111 +000070r 1 70 .BYTE 112 +000071r 1 71 .BYTE 113 +000072r 1 72 .BYTE 114 +000073r 1 73 .BYTE 115 +000074r 1 74 .BYTE 116 +000075r 1 75 .BYTE 117 +000076r 1 76 .BYTE 118 +000077r 1 77 .BYTE 119 +000078r 1 78 .BYTE 120 +000079r 1 79 .BYTE 121 +00007Ar 1 7A .BYTE 122 +00007Br 1 7B .BYTE 123 +00007Cr 1 7C .BYTE 124 +00007Dr 1 7D .BYTE 125 +00007Er 1 7E .BYTE 126 +00007Fr 1 7F .BYTE 127 +000080r 1 80 .BYTE 128 +000081r 1 81 .BYTE 129 +000082r 1 82 .BYTE 130 +000083r 1 83 .BYTE 131 +000084r 1 84 .BYTE 132 +000085r 1 85 .BYTE 133 +000086r 1 86 .BYTE 134 +000087r 1 87 .BYTE 135 +000088r 1 88 .BYTE 136 +000089r 1 89 .BYTE 137 +00008Ar 1 8A .BYTE 138 +00008Br 1 8B .BYTE 139 +00008Cr 1 8C .BYTE 140 +00008Dr 1 8D .BYTE 141 +00008Er 1 8E .BYTE 142 +00008Fr 1 8F .BYTE 143 +000090r 1 90 .BYTE 144 +000091r 1 91 .BYTE 145 +000092r 1 92 .BYTE 146 +000093r 1 93 .BYTE 147 +000094r 1 94 .BYTE 148 +000095r 1 95 .BYTE 149 +000096r 1 96 .BYTE 150 +000097r 1 97 .BYTE 151 +000098r 1 98 .BYTE 152 +000099r 1 99 .BYTE 153 +00009Ar 1 9A .BYTE 154 +00009Br 1 9B .BYTE 155 +00009Cr 1 9C .BYTE 156 +00009Dr 1 9D .BYTE 157 +00009Er 1 9E .BYTE 158 +00009Fr 1 9F .BYTE 159 +0000A0r 1 A0 .BYTE 160 +0000A1r 1 A1 .BYTE 161 +0000A2r 1 A2 .BYTE 162 +0000A3r 1 A3 .BYTE 163 +0000A4r 1 A4 .BYTE 164 +0000A5r 1 A5 .BYTE 165 +0000A6r 1 A6 .BYTE 166 +0000A7r 1 A7 .BYTE 167 +0000A8r 1 A8 .BYTE 168 +0000A9r 1 A9 .BYTE 169 +0000AAr 1 AA .BYTE 170 +0000ABr 1 AB .BYTE 171 +0000ACr 1 AC .BYTE 172 +0000ADr 1 AD .BYTE 173 +0000AEr 1 AE .BYTE 174 +0000AFr 1 AF .BYTE 175 +0000B0r 1 B0 .BYTE 176 +0000B1r 1 B1 .BYTE 177 +0000B2r 1 B2 .BYTE 178 +0000B3r 1 B3 .BYTE 179 +0000B4r 1 B4 .BYTE 180 +0000B5r 1 B5 .BYTE 181 +0000B6r 1 B6 .BYTE 182 +0000B7r 1 B7 .BYTE 183 +0000B8r 1 B8 .BYTE 184 +0000B9r 1 B9 .BYTE 185 +0000BAr 1 BA .BYTE 186 +0000BBr 1 BB .BYTE 187 +0000BCr 1 BC .BYTE 188 +0000BDr 1 BD .BYTE 189 +0000BEr 1 BE .BYTE 190 +0000BFr 1 BF .BYTE 191 +0000C0r 1 C0 .BYTE 192 +0000C1r 1 C1 .BYTE 193 +0000C2r 1 C2 .BYTE 194 +0000C3r 1 C3 .BYTE 195 +0000C4r 1 C4 .BYTE 196 +0000C5r 1 C5 .BYTE 197 +0000C6r 1 C6 .BYTE 198 +0000C7r 1 C7 .BYTE 199 +0000C8r 1 C8 .BYTE 200 +0000C9r 1 C9 .BYTE 201 +0000CAr 1 CA .BYTE 202 +0000CBr 1 CB .BYTE 203 +0000CCr 1 CC .BYTE 204 +0000CDr 1 CD .BYTE 205 +0000CEr 1 CE .BYTE 206 +0000CFr 1 CF .BYTE 207 +0000D0r 1 D0 .BYTE 208 +0000D1r 1 D1 .BYTE 209 +0000D2r 1 D2 .BYTE 210 +0000D3r 1 D3 .BYTE 211 +0000D4r 1 D4 .BYTE 212 +0000D5r 1 D5 .BYTE 213 +0000D6r 1 D6 .BYTE 214 +0000D7r 1 D7 .BYTE 215 +0000D8r 1 D8 .BYTE 216 +0000D9r 1 D9 .BYTE 217 +0000DAr 1 DA .BYTE 218 +0000DBr 1 DB .BYTE 219 +0000DCr 1 DC .BYTE 220 +0000DDr 1 DD .BYTE 221 +0000DEr 1 DE .BYTE 222 +0000DFr 1 DF .BYTE 223 +0000E0r 1 E0 .BYTE 224 +0000E1r 1 E1 .BYTE 225 +0000E2r 1 E2 .BYTE 226 +0000E3r 1 E3 .BYTE 227 +0000E4r 1 E4 .BYTE 228 +0000E5r 1 E5 .BYTE 229 +0000E6r 1 E6 .BYTE 230 +0000E7r 1 E7 .BYTE 231 +0000E8r 1 E8 .BYTE 232 +0000E9r 1 E9 .BYTE 233 +0000EAr 1 EA .BYTE 234 +0000EBr 1 EB .BYTE 235 +0000ECr 1 EC .BYTE 236 +0000EDr 1 ED .BYTE 237 +0000EEr 1 EE .BYTE 238 +0000EFr 1 EF .BYTE 239 +0000F0r 1 F0 .BYTE 240 +0000F1r 1 F1 .BYTE 241 +0000F2r 1 F2 .BYTE 242 +0000F3r 1 F3 .BYTE 243 +0000F4r 1 F4 .BYTE 244 +0000F5r 1 F5 .BYTE 245 +0000F6r 1 F6 .BYTE 246 +0000F7r 1 F7 .BYTE 247 +0000F8r 1 F8 .BYTE 248 +0000F9r 1 F9 .BYTE 249 +0000FAr 1 FA .BYTE 250 +0000FBr 1 FB .BYTE 251 +0000FCr 1 FC .BYTE 252 +0000FDr 1 FD .BYTE 253 +0000FEr 1 FE .BYTE 254 +0000FFr 1 FF .BYTE 255 +000100r 1 +000100r 1 ; lower case pseudo-op +000100r 1 00 .byte 0 +000101r 1 01 .byte 1 +000102r 1 02 .byte 2 +000103r 1 03 .byte 3 +000104r 1 04 .byte 4 +000105r 1 05 .byte 5 +000106r 1 06 .byte 6 +000107r 1 07 .byte 7 +000108r 1 08 .byte 8 +000109r 1 09 .byte 9 +00010Ar 1 0A .byte 10 +00010Br 1 0B .byte 11 +00010Cr 1 0C .byte 12 +00010Dr 1 0D .byte 13 +00010Er 1 0E .byte 14 +00010Fr 1 0F .byte 15 +000110r 1 10 .byte 16 +000111r 1 11 .byte 17 +000112r 1 12 .byte 18 +000113r 1 13 .byte 19 +000114r 1 14 .byte 20 +000115r 1 15 .byte 21 +000116r 1 16 .byte 22 +000117r 1 17 .byte 23 +000118r 1 18 .byte 24 +000119r 1 19 .byte 25 +00011Ar 1 1A .byte 26 +00011Br 1 1B .byte 27 +00011Cr 1 1C .byte 28 +00011Dr 1 1D .byte 29 +00011Er 1 1E .byte 30 +00011Fr 1 1F .byte 31 +000120r 1 20 .byte 32 +000121r 1 21 .byte 33 +000122r 1 22 .byte 34 +000123r 1 23 .byte 35 +000124r 1 24 .byte 36 +000125r 1 25 .byte 37 +000126r 1 26 .byte 38 +000127r 1 27 .byte 39 +000128r 1 28 .byte 40 +000129r 1 29 .byte 41 +00012Ar 1 2A .byte 42 +00012Br 1 2B .byte 43 +00012Cr 1 2C .byte 44 +00012Dr 1 2D .byte 45 +00012Er 1 2E .byte 46 +00012Fr 1 2F .byte 47 +000130r 1 30 .byte 48 +000131r 1 31 .byte 49 +000132r 1 32 .byte 50 +000133r 1 33 .byte 51 +000134r 1 34 .byte 52 +000135r 1 35 .byte 53 +000136r 1 36 .byte 54 +000137r 1 37 .byte 55 +000138r 1 38 .byte 56 +000139r 1 39 .byte 57 +00013Ar 1 3A .byte 58 +00013Br 1 3B .byte 59 +00013Cr 1 3C .byte 60 +00013Dr 1 3D .byte 61 +00013Er 1 3E .byte 62 +00013Fr 1 3F .byte 63 +000140r 1 40 .byte 64 +000141r 1 41 .byte 65 +000142r 1 42 .byte 66 +000143r 1 43 .byte 67 +000144r 1 44 .byte 68 +000145r 1 45 .byte 69 +000146r 1 46 .byte 70 +000147r 1 47 .byte 71 +000148r 1 48 .byte 72 +000149r 1 49 .byte 73 +00014Ar 1 4A .byte 74 +00014Br 1 4B .byte 75 +00014Cr 1 4C .byte 76 +00014Dr 1 4D .byte 77 +00014Er 1 4E .byte 78 +00014Fr 1 4F .byte 79 +000150r 1 50 .byte 80 +000151r 1 51 .byte 81 +000152r 1 52 .byte 82 +000153r 1 53 .byte 83 +000154r 1 54 .byte 84 +000155r 1 55 .byte 85 +000156r 1 56 .byte 86 +000157r 1 57 .byte 87 +000158r 1 58 .byte 88 +000159r 1 59 .byte 89 +00015Ar 1 5A .byte 90 +00015Br 1 5B .byte 91 +00015Cr 1 5C .byte 92 +00015Dr 1 5D .byte 93 +00015Er 1 5E .byte 94 +00015Fr 1 5F .byte 95 +000160r 1 60 .byte 96 +000161r 1 61 .byte 97 +000162r 1 62 .byte 98 +000163r 1 63 .byte 99 +000164r 1 64 .byte 100 +000165r 1 65 .byte 101 +000166r 1 66 .byte 102 +000167r 1 67 .byte 103 +000168r 1 68 .byte 104 +000169r 1 69 .byte 105 +00016Ar 1 6A .byte 106 +00016Br 1 6B .byte 107 +00016Cr 1 6C .byte 108 +00016Dr 1 6D .byte 109 +00016Er 1 6E .byte 110 +00016Fr 1 6F .byte 111 +000170r 1 70 .byte 112 +000171r 1 71 .byte 113 +000172r 1 72 .byte 114 +000173r 1 73 .byte 115 +000174r 1 74 .byte 116 +000175r 1 75 .byte 117 +000176r 1 76 .byte 118 +000177r 1 77 .byte 119 +000178r 1 78 .byte 120 +000179r 1 79 .byte 121 +00017Ar 1 7A .byte 122 +00017Br 1 7B .byte 123 +00017Cr 1 7C .byte 124 +00017Dr 1 7D .byte 125 +00017Er 1 7E .byte 126 +00017Fr 1 7F .byte 127 +000180r 1 80 .byte 128 +000181r 1 81 .byte 129 +000182r 1 82 .byte 130 +000183r 1 83 .byte 131 +000184r 1 84 .byte 132 +000185r 1 85 .byte 133 +000186r 1 86 .byte 134 +000187r 1 87 .byte 135 +000188r 1 88 .byte 136 +000189r 1 89 .byte 137 +00018Ar 1 8A .byte 138 +00018Br 1 8B .byte 139 +00018Cr 1 8C .byte 140 +00018Dr 1 8D .byte 141 +00018Er 1 8E .byte 142 +00018Fr 1 8F .byte 143 +000190r 1 90 .byte 144 +000191r 1 91 .byte 145 +000192r 1 92 .byte 146 +000193r 1 93 .byte 147 +000194r 1 94 .byte 148 +000195r 1 95 .byte 149 +000196r 1 96 .byte 150 +000197r 1 97 .byte 151 +000198r 1 98 .byte 152 +000199r 1 99 .byte 153 +00019Ar 1 9A .byte 154 +00019Br 1 9B .byte 155 +00019Cr 1 9C .byte 156 +00019Dr 1 9D .byte 157 +00019Er 1 9E .byte 158 +00019Fr 1 9F .byte 159 +0001A0r 1 A0 .byte 160 +0001A1r 1 A1 .byte 161 +0001A2r 1 A2 .byte 162 +0001A3r 1 A3 .byte 163 +0001A4r 1 A4 .byte 164 +0001A5r 1 A5 .byte 165 +0001A6r 1 A6 .byte 166 +0001A7r 1 A7 .byte 167 +0001A8r 1 A8 .byte 168 +0001A9r 1 A9 .byte 169 +0001AAr 1 AA .byte 170 +0001ABr 1 AB .byte 171 +0001ACr 1 AC .byte 172 +0001ADr 1 AD .byte 173 +0001AEr 1 AE .byte 174 +0001AFr 1 AF .byte 175 +0001B0r 1 B0 .byte 176 +0001B1r 1 B1 .byte 177 +0001B2r 1 B2 .byte 178 +0001B3r 1 B3 .byte 179 +0001B4r 1 B4 .byte 180 +0001B5r 1 B5 .byte 181 +0001B6r 1 B6 .byte 182 +0001B7r 1 B7 .byte 183 +0001B8r 1 B8 .byte 184 +0001B9r 1 B9 .byte 185 +0001BAr 1 BA .byte 186 +0001BBr 1 BB .byte 187 +0001BCr 1 BC .byte 188 +0001BDr 1 BD .byte 189 +0001BEr 1 BE .byte 190 +0001BFr 1 BF .byte 191 +0001C0r 1 C0 .byte 192 +0001C1r 1 C1 .byte 193 +0001C2r 1 C2 .byte 194 +0001C3r 1 C3 .byte 195 +0001C4r 1 C4 .byte 196 +0001C5r 1 C5 .byte 197 +0001C6r 1 C6 .byte 198 +0001C7r 1 C7 .byte 199 +0001C8r 1 C8 .byte 200 +0001C9r 1 C9 .byte 201 +0001CAr 1 CA .byte 202 +0001CBr 1 CB .byte 203 +0001CCr 1 CC .byte 204 +0001CDr 1 CD .byte 205 +0001CEr 1 CE .byte 206 +0001CFr 1 CF .byte 207 +0001D0r 1 D0 .byte 208 +0001D1r 1 D1 .byte 209 +0001D2r 1 D2 .byte 210 +0001D3r 1 D3 .byte 211 +0001D4r 1 D4 .byte 212 +0001D5r 1 D5 .byte 213 +0001D6r 1 D6 .byte 214 +0001D7r 1 D7 .byte 215 +0001D8r 1 D8 .byte 216 +0001D9r 1 D9 .byte 217 +0001DAr 1 DA .byte 218 +0001DBr 1 DB .byte 219 +0001DCr 1 DC .byte 220 +0001DDr 1 DD .byte 221 +0001DEr 1 DE .byte 222 +0001DFr 1 DF .byte 223 +0001E0r 1 E0 .byte 224 +0001E1r 1 E1 .byte 225 +0001E2r 1 E2 .byte 226 +0001E3r 1 E3 .byte 227 +0001E4r 1 E4 .byte 228 +0001E5r 1 E5 .byte 229 +0001E6r 1 E6 .byte 230 +0001E7r 1 E7 .byte 231 +0001E8r 1 E8 .byte 232 +0001E9r 1 E9 .byte 233 +0001EAr 1 EA .byte 234 +0001EBr 1 EB .byte 235 +0001ECr 1 EC .byte 236 +0001EDr 1 ED .byte 237 +0001EEr 1 EE .byte 238 +0001EFr 1 EF .byte 239 +0001F0r 1 F0 .byte 240 +0001F1r 1 F1 .byte 241 +0001F2r 1 F2 .byte 242 +0001F3r 1 F3 .byte 243 +0001F4r 1 F4 .byte 244 +0001F5r 1 F5 .byte 245 +0001F6r 1 F6 .byte 246 +0001F7r 1 F7 .byte 247 +0001F8r 1 F8 .byte 248 +0001F9r 1 F9 .byte 249 +0001FAr 1 FA .byte 250 +0001FBr 1 FB .byte 251 +0001FCr 1 FC .byte 252 +0001FDr 1 FD .byte 253 +0001FEr 1 FE .byte 254 +0001FFr 1 FF .byte 255 +000200r 1 +000200r 1 ; hex values +000200r 1 00 .byte $0 +000201r 1 01 .byte $1 +000202r 1 02 .byte $2 +000203r 1 03 .byte $3 +000204r 1 04 .byte $4 +000205r 1 05 .byte $5 +000206r 1 06 .byte $6 +000207r 1 07 .byte $7 +000208r 1 08 .byte $8 +000209r 1 09 .byte $9 +00020Ar 1 0A .byte $a +00020Br 1 0B .byte $b +00020Cr 1 0C .byte $c +00020Dr 1 0D .byte $d +00020Er 1 0E .byte $e +00020Fr 1 0F .byte $f +000210r 1 10 .byte $10 +000211r 1 11 .byte $11 +000212r 1 12 .byte $12 +000213r 1 13 .byte $13 +000214r 1 14 .byte $14 +000215r 1 15 .byte $15 +000216r 1 16 .byte $16 +000217r 1 17 .byte $17 +000218r 1 18 .byte $18 +000219r 1 19 .byte $19 +00021Ar 1 1A .byte $1a +00021Br 1 1B .byte $1b +00021Cr 1 1C .byte $1c +00021Dr 1 1D .byte $1d +00021Er 1 1E .byte $1e +00021Fr 1 1F .byte $1f +000220r 1 20 .byte $20 +000221r 1 21 .byte $21 +000222r 1 22 .byte $22 +000223r 1 23 .byte $23 +000224r 1 24 .byte $24 +000225r 1 25 .byte $25 +000226r 1 26 .byte $26 +000227r 1 27 .byte $27 +000228r 1 28 .byte $28 +000229r 1 29 .byte $29 +00022Ar 1 2A .byte $2a +00022Br 1 2B .byte $2b +00022Cr 1 2C .byte $2c +00022Dr 1 2D .byte $2d +00022Er 1 2E .byte $2e +00022Fr 1 2F .byte $2f +000230r 1 30 .byte $30 +000231r 1 31 .byte $31 +000232r 1 32 .byte $32 +000233r 1 33 .byte $33 +000234r 1 34 .byte $34 +000235r 1 35 .byte $35 +000236r 1 36 .byte $36 +000237r 1 37 .byte $37 +000238r 1 38 .byte $38 +000239r 1 39 .byte $39 +00023Ar 1 3A .byte $3a +00023Br 1 3B .byte $3b +00023Cr 1 3C .byte $3c +00023Dr 1 3D .byte $3d +00023Er 1 3E .byte $3e +00023Fr 1 3F .byte $3f +000240r 1 40 .byte $40 +000241r 1 41 .byte $41 +000242r 1 42 .byte $42 +000243r 1 43 .byte $43 +000244r 1 44 .byte $44 +000245r 1 45 .byte $45 +000246r 1 46 .byte $46 +000247r 1 47 .byte $47 +000248r 1 48 .byte $48 +000249r 1 49 .byte $49 +00024Ar 1 4A .byte $4a +00024Br 1 4B .byte $4b +00024Cr 1 4C .byte $4c +00024Dr 1 4D .byte $4d +00024Er 1 4E .byte $4e +00024Fr 1 4F .byte $4f +000250r 1 50 .byte $50 +000251r 1 51 .byte $51 +000252r 1 52 .byte $52 +000253r 1 53 .byte $53 +000254r 1 54 .byte $54 +000255r 1 55 .byte $55 +000256r 1 56 .byte $56 +000257r 1 57 .byte $57 +000258r 1 58 .byte $58 +000259r 1 59 .byte $59 +00025Ar 1 5A .byte $5a +00025Br 1 5B .byte $5b +00025Cr 1 5C .byte $5c +00025Dr 1 5D .byte $5d +00025Er 1 5E .byte $5e +00025Fr 1 5F .byte $5f +000260r 1 60 .byte $60 +000261r 1 61 .byte $61 +000262r 1 62 .byte $62 +000263r 1 63 .byte $63 +000264r 1 64 .byte $64 +000265r 1 65 .byte $65 +000266r 1 66 .byte $66 +000267r 1 67 .byte $67 +000268r 1 68 .byte $68 +000269r 1 69 .byte $69 +00026Ar 1 6A .byte $6a +00026Br 1 6B .byte $6b +00026Cr 1 6C .byte $6c +00026Dr 1 6D .byte $6d +00026Er 1 6E .byte $6e +00026Fr 1 6F .byte $6f +000270r 1 70 .byte $70 +000271r 1 71 .byte $71 +000272r 1 72 .byte $72 +000273r 1 73 .byte $73 +000274r 1 74 .byte $74 +000275r 1 75 .byte $75 +000276r 1 76 .byte $76 +000277r 1 77 .byte $77 +000278r 1 78 .byte $78 +000279r 1 79 .byte $79 +00027Ar 1 7A .byte $7a +00027Br 1 7B .byte $7b +00027Cr 1 7C .byte $7c +00027Dr 1 7D .byte $7d +00027Er 1 7E .byte $7e +00027Fr 1 7F .byte $7f +000280r 1 80 .byte $80 +000281r 1 81 .byte $81 +000282r 1 82 .byte $82 +000283r 1 83 .byte $83 +000284r 1 84 .byte $84 +000285r 1 85 .byte $85 +000286r 1 86 .byte $86 +000287r 1 87 .byte $87 +000288r 1 88 .byte $88 +000289r 1 89 .byte $89 +00028Ar 1 8A .byte $8a +00028Br 1 8B .byte $8b +00028Cr 1 8C .byte $8c +00028Dr 1 8D .byte $8d +00028Er 1 8E .byte $8e +00028Fr 1 8F .byte $8f +000290r 1 90 .byte $90 +000291r 1 91 .byte $91 +000292r 1 92 .byte $92 +000293r 1 93 .byte $93 +000294r 1 94 .byte $94 +000295r 1 95 .byte $95 +000296r 1 96 .byte $96 +000297r 1 97 .byte $97 +000298r 1 98 .byte $98 +000299r 1 99 .byte $99 +00029Ar 1 9A .byte $9a +00029Br 1 9B .byte $9b +00029Cr 1 9C .byte $9c +00029Dr 1 9D .byte $9d +00029Er 1 9E .byte $9e +00029Fr 1 9F .byte $9f +0002A0r 1 A0 .byte $a0 +0002A1r 1 A1 .byte $a1 +0002A2r 1 A2 .byte $a2 +0002A3r 1 A3 .byte $a3 +0002A4r 1 A4 .byte $a4 +0002A5r 1 A5 .byte $a5 +0002A6r 1 A6 .byte $a6 +0002A7r 1 A7 .byte $a7 +0002A8r 1 A8 .byte $a8 +0002A9r 1 A9 .byte $a9 +0002AAr 1 AA .byte $aa +0002ABr 1 AB .byte $ab +0002ACr 1 AC .byte $ac +0002ADr 1 AD .byte $ad +0002AEr 1 AE .byte $ae +0002AFr 1 AF .byte $af +0002B0r 1 B0 .byte $b0 +0002B1r 1 B1 .byte $b1 +0002B2r 1 B2 .byte $b2 +0002B3r 1 B3 .byte $b3 +0002B4r 1 B4 .byte $b4 +0002B5r 1 B5 .byte $b5 +0002B6r 1 B6 .byte $b6 +0002B7r 1 B7 .byte $b7 +0002B8r 1 B8 .byte $b8 +0002B9r 1 B9 .byte $b9 +0002BAr 1 BA .byte $ba +0002BBr 1 BB .byte $bb +0002BCr 1 BC .byte $bc +0002BDr 1 BD .byte $bd +0002BEr 1 BE .byte $be +0002BFr 1 BF .byte $bf +0002C0r 1 C0 .byte $c0 +0002C1r 1 C1 .byte $c1 +0002C2r 1 C2 .byte $c2 +0002C3r 1 C3 .byte $c3 +0002C4r 1 C4 .byte $c4 +0002C5r 1 C5 .byte $c5 +0002C6r 1 C6 .byte $c6 +0002C7r 1 C7 .byte $c7 +0002C8r 1 C8 .byte $c8 +0002C9r 1 C9 .byte $c9 +0002CAr 1 CA .byte $ca +0002CBr 1 CB .byte $cb +0002CCr 1 CC .byte $cc +0002CDr 1 CD .byte $cd +0002CEr 1 CE .byte $ce +0002CFr 1 CF .byte $cf +0002D0r 1 D0 .byte $d0 +0002D1r 1 D1 .byte $d1 +0002D2r 1 D2 .byte $d2 +0002D3r 1 D3 .byte $d3 +0002D4r 1 D4 .byte $d4 +0002D5r 1 D5 .byte $d5 +0002D6r 1 D6 .byte $d6 +0002D7r 1 D7 .byte $d7 +0002D8r 1 D8 .byte $d8 +0002D9r 1 D9 .byte $d9 +0002DAr 1 DA .byte $da +0002DBr 1 DB .byte $db +0002DCr 1 DC .byte $dc +0002DDr 1 DD .byte $dd +0002DEr 1 DE .byte $de +0002DFr 1 DF .byte $df +0002E0r 1 E0 .byte $e0 +0002E1r 1 E1 .byte $e1 +0002E2r 1 E2 .byte $e2 +0002E3r 1 E3 .byte $e3 +0002E4r 1 E4 .byte $e4 +0002E5r 1 E5 .byte $e5 +0002E6r 1 E6 .byte $e6 +0002E7r 1 E7 .byte $e7 +0002E8r 1 E8 .byte $e8 +0002E9r 1 E9 .byte $e9 +0002EAr 1 EA .byte $ea +0002EBr 1 EB .byte $eb +0002ECr 1 EC .byte $ec +0002EDr 1 ED .byte $ed +0002EEr 1 EE .byte $ee +0002EFr 1 EF .byte $ef +0002F0r 1 F0 .byte $f0 +0002F1r 1 F1 .byte $f1 +0002F2r 1 F2 .byte $f2 +0002F3r 1 F3 .byte $f3 +0002F4r 1 F4 .byte $f4 +0002F5r 1 F5 .byte $f5 +0002F6r 1 F6 .byte $f6 +0002F7r 1 F7 .byte $f7 +0002F8r 1 F8 .byte $f8 +0002F9r 1 F9 .byte $f9 +0002FAr 1 FA .byte $fa +0002FBr 1 FB .byte $fb +0002FCr 1 FC .byte $fc +0002FDr 1 FD .byte $fd +0002FEr 1 FE .byte $fe +0002FFr 1 FF .byte $ff +000300r 1 +000300r 1 ; hex values, uppercase +000300r 1 00 .byte $0 +000301r 1 01 .byte $1 +000302r 1 02 .byte $2 +000303r 1 03 .byte $3 +000304r 1 04 .byte $4 +000305r 1 05 .byte $5 +000306r 1 06 .byte $6 +000307r 1 07 .byte $7 +000308r 1 08 .byte $8 +000309r 1 09 .byte $9 +00030Ar 1 0A .byte $A +00030Br 1 0B .byte $B +00030Cr 1 0C .byte $C +00030Dr 1 0D .byte $D +00030Er 1 0E .byte $E +00030Fr 1 0F .byte $F +000310r 1 10 .byte $10 +000311r 1 11 .byte $11 +000312r 1 12 .byte $12 +000313r 1 13 .byte $13 +000314r 1 14 .byte $14 +000315r 1 15 .byte $15 +000316r 1 16 .byte $16 +000317r 1 17 .byte $17 +000318r 1 18 .byte $18 +000319r 1 19 .byte $19 +00031Ar 1 1A .byte $1A +00031Br 1 1B .byte $1B +00031Cr 1 1C .byte $1C +00031Dr 1 1D .byte $1D +00031Er 1 1E .byte $1E +00031Fr 1 1F .byte $1F +000320r 1 20 .byte $20 +000321r 1 21 .byte $21 +000322r 1 22 .byte $22 +000323r 1 23 .byte $23 +000324r 1 24 .byte $24 +000325r 1 25 .byte $25 +000326r 1 26 .byte $26 +000327r 1 27 .byte $27 +000328r 1 28 .byte $28 +000329r 1 29 .byte $29 +00032Ar 1 2A .byte $2A +00032Br 1 2B .byte $2B +00032Cr 1 2C .byte $2C +00032Dr 1 2D .byte $2D +00032Er 1 2E .byte $2E +00032Fr 1 2F .byte $2F +000330r 1 30 .byte $30 +000331r 1 31 .byte $31 +000332r 1 32 .byte $32 +000333r 1 33 .byte $33 +000334r 1 34 .byte $34 +000335r 1 35 .byte $35 +000336r 1 36 .byte $36 +000337r 1 37 .byte $37 +000338r 1 38 .byte $38 +000339r 1 39 .byte $39 +00033Ar 1 3A .byte $3A +00033Br 1 3B .byte $3B +00033Cr 1 3C .byte $3C +00033Dr 1 3D .byte $3D +00033Er 1 3E .byte $3E +00033Fr 1 3F .byte $3F +000340r 1 40 .byte $40 +000341r 1 41 .byte $41 +000342r 1 42 .byte $42 +000343r 1 43 .byte $43 +000344r 1 44 .byte $44 +000345r 1 45 .byte $45 +000346r 1 46 .byte $46 +000347r 1 47 .byte $47 +000348r 1 48 .byte $48 +000349r 1 49 .byte $49 +00034Ar 1 4A .byte $4A +00034Br 1 4B .byte $4B +00034Cr 1 4C .byte $4C +00034Dr 1 4D .byte $4D +00034Er 1 4E .byte $4E +00034Fr 1 4F .byte $4F +000350r 1 50 .byte $50 +000351r 1 51 .byte $51 +000352r 1 52 .byte $52 +000353r 1 53 .byte $53 +000354r 1 54 .byte $54 +000355r 1 55 .byte $55 +000356r 1 56 .byte $56 +000357r 1 57 .byte $57 +000358r 1 58 .byte $58 +000359r 1 59 .byte $59 +00035Ar 1 5A .byte $5A +00035Br 1 5B .byte $5B +00035Cr 1 5C .byte $5C +00035Dr 1 5D .byte $5D +00035Er 1 5E .byte $5E +00035Fr 1 5F .byte $5F +000360r 1 60 .byte $60 +000361r 1 61 .byte $61 +000362r 1 62 .byte $62 +000363r 1 63 .byte $63 +000364r 1 64 .byte $64 +000365r 1 65 .byte $65 +000366r 1 66 .byte $66 +000367r 1 67 .byte $67 +000368r 1 68 .byte $68 +000369r 1 69 .byte $69 +00036Ar 1 6A .byte $6A +00036Br 1 6B .byte $6B +00036Cr 1 6C .byte $6C +00036Dr 1 6D .byte $6D +00036Er 1 6E .byte $6E +00036Fr 1 6F .byte $6F +000370r 1 70 .byte $70 +000371r 1 71 .byte $71 +000372r 1 72 .byte $72 +000373r 1 73 .byte $73 +000374r 1 74 .byte $74 +000375r 1 75 .byte $75 +000376r 1 76 .byte $76 +000377r 1 77 .byte $77 +000378r 1 78 .byte $78 +000379r 1 79 .byte $79 +00037Ar 1 7A .byte $7A +00037Br 1 7B .byte $7B +00037Cr 1 7C .byte $7C +00037Dr 1 7D .byte $7D +00037Er 1 7E .byte $7E +00037Fr 1 7F .byte $7F +000380r 1 80 .byte $80 +000381r 1 81 .byte $81 +000382r 1 82 .byte $82 +000383r 1 83 .byte $83 +000384r 1 84 .byte $84 +000385r 1 85 .byte $85 +000386r 1 86 .byte $86 +000387r 1 87 .byte $87 +000388r 1 88 .byte $88 +000389r 1 89 .byte $89 +00038Ar 1 8A .byte $8A +00038Br 1 8B .byte $8B +00038Cr 1 8C .byte $8C +00038Dr 1 8D .byte $8D +00038Er 1 8E .byte $8E +00038Fr 1 8F .byte $8F +000390r 1 90 .byte $90 +000391r 1 91 .byte $91 +000392r 1 92 .byte $92 +000393r 1 93 .byte $93 +000394r 1 94 .byte $94 +000395r 1 95 .byte $95 +000396r 1 96 .byte $96 +000397r 1 97 .byte $97 +000398r 1 98 .byte $98 +000399r 1 99 .byte $99 +00039Ar 1 9A .byte $9A +00039Br 1 9B .byte $9B +00039Cr 1 9C .byte $9C +00039Dr 1 9D .byte $9D +00039Er 1 9E .byte $9E +00039Fr 1 9F .byte $9F +0003A0r 1 A0 .byte $A0 +0003A1r 1 A1 .byte $A1 +0003A2r 1 A2 .byte $A2 +0003A3r 1 A3 .byte $A3 +0003A4r 1 A4 .byte $A4 +0003A5r 1 A5 .byte $A5 +0003A6r 1 A6 .byte $A6 +0003A7r 1 A7 .byte $A7 +0003A8r 1 A8 .byte $A8 +0003A9r 1 A9 .byte $A9 +0003AAr 1 AA .byte $AA +0003ABr 1 AB .byte $AB +0003ACr 1 AC .byte $AC +0003ADr 1 AD .byte $AD +0003AEr 1 AE .byte $AE +0003AFr 1 AF .byte $AF +0003B0r 1 B0 .byte $B0 +0003B1r 1 B1 .byte $B1 +0003B2r 1 B2 .byte $B2 +0003B3r 1 B3 .byte $B3 +0003B4r 1 B4 .byte $B4 +0003B5r 1 B5 .byte $B5 +0003B6r 1 B6 .byte $B6 +0003B7r 1 B7 .byte $B7 +0003B8r 1 B8 .byte $B8 +0003B9r 1 B9 .byte $B9 +0003BAr 1 BA .byte $BA +0003BBr 1 BB .byte $BB +0003BCr 1 BC .byte $BC +0003BDr 1 BD .byte $BD +0003BEr 1 BE .byte $BE +0003BFr 1 BF .byte $BF +0003C0r 1 C0 .byte $C0 +0003C1r 1 C1 .byte $C1 +0003C2r 1 C2 .byte $C2 +0003C3r 1 C3 .byte $C3 +0003C4r 1 C4 .byte $C4 +0003C5r 1 C5 .byte $C5 +0003C6r 1 C6 .byte $C6 +0003C7r 1 C7 .byte $C7 +0003C8r 1 C8 .byte $C8 +0003C9r 1 C9 .byte $C9 +0003CAr 1 CA .byte $CA +0003CBr 1 CB .byte $CB +0003CCr 1 CC .byte $CC +0003CDr 1 CD .byte $CD +0003CEr 1 CE .byte $CE +0003CFr 1 CF .byte $CF +0003D0r 1 D0 .byte $D0 +0003D1r 1 D1 .byte $D1 +0003D2r 1 D2 .byte $D2 +0003D3r 1 D3 .byte $D3 +0003D4r 1 D4 .byte $D4 +0003D5r 1 D5 .byte $D5 +0003D6r 1 D6 .byte $D6 +0003D7r 1 D7 .byte $D7 +0003D8r 1 D8 .byte $D8 +0003D9r 1 D9 .byte $D9 +0003DAr 1 DA .byte $DA +0003DBr 1 DB .byte $DB +0003DCr 1 DC .byte $DC +0003DDr 1 DD .byte $DD +0003DEr 1 DE .byte $DE +0003DFr 1 DF .byte $DF +0003E0r 1 E0 .byte $E0 +0003E1r 1 E1 .byte $E1 +0003E2r 1 E2 .byte $E2 +0003E3r 1 E3 .byte $E3 +0003E4r 1 E4 .byte $E4 +0003E5r 1 E5 .byte $E5 +0003E6r 1 E6 .byte $E6 +0003E7r 1 E7 .byte $E7 +0003E8r 1 E8 .byte $E8 +0003E9r 1 E9 .byte $E9 +0003EAr 1 EA .byte $EA +0003EBr 1 EB .byte $EB +0003ECr 1 EC .byte $EC +0003EDr 1 ED .byte $ED +0003EEr 1 EE .byte $EE +0003EFr 1 EF .byte $EF +0003F0r 1 F0 .byte $F0 +0003F1r 1 F1 .byte $F1 +0003F2r 1 F2 .byte $F2 +0003F3r 1 F3 .byte $F3 +0003F4r 1 F4 .byte $F4 +0003F5r 1 F5 .byte $F5 +0003F6r 1 F6 .byte $F6 +0003F7r 1 F7 .byte $F7 +0003F8r 1 F8 .byte $F8 +0003F9r 1 F9 .byte $F9 +0003FAr 1 FA .byte $FA +0003FBr 1 FB .byte $FB +0003FCr 1 FC .byte $FC +0003FDr 1 FD .byte $FD +0003FEr 1 FE .byte $FE +0003FFr 1 FF .byte $FF +000400r 1 +000400r 1 ; 2-digit hex values +000400r 1 00 .byte $00 +000401r 1 01 .byte $01 +000402r 1 02 .byte $02 +000403r 1 03 .byte $03 +000404r 1 04 .byte $04 +000405r 1 05 .byte $05 +000406r 1 06 .byte $06 +000407r 1 07 .byte $07 +000408r 1 08 .byte $08 +000409r 1 09 .byte $09 +00040Ar 1 0A .byte $0a +00040Br 1 0B .byte $0b +00040Cr 1 0C .byte $0c +00040Dr 1 0D .byte $0d +00040Er 1 0E .byte $0e +00040Fr 1 0F .byte $0f +000410r 1 10 .byte $10 +000411r 1 11 .byte $11 +000412r 1 12 .byte $12 +000413r 1 13 .byte $13 +000414r 1 14 .byte $14 +000415r 1 15 .byte $15 +000416r 1 16 .byte $16 +000417r 1 17 .byte $17 +000418r 1 18 .byte $18 +000419r 1 19 .byte $19 +00041Ar 1 1A .byte $1a +00041Br 1 1B .byte $1b +00041Cr 1 1C .byte $1c +00041Dr 1 1D .byte $1d +00041Er 1 1E .byte $1e +00041Fr 1 1F .byte $1f +000420r 1 20 .byte $20 +000421r 1 21 .byte $21 +000422r 1 22 .byte $22 +000423r 1 23 .byte $23 +000424r 1 24 .byte $24 +000425r 1 25 .byte $25 +000426r 1 26 .byte $26 +000427r 1 27 .byte $27 +000428r 1 28 .byte $28 +000429r 1 29 .byte $29 +00042Ar 1 2A .byte $2a +00042Br 1 2B .byte $2b +00042Cr 1 2C .byte $2c +00042Dr 1 2D .byte $2d +00042Er 1 2E .byte $2e +00042Fr 1 2F .byte $2f +000430r 1 30 .byte $30 +000431r 1 31 .byte $31 +000432r 1 32 .byte $32 +000433r 1 33 .byte $33 +000434r 1 34 .byte $34 +000435r 1 35 .byte $35 +000436r 1 36 .byte $36 +000437r 1 37 .byte $37 +000438r 1 38 .byte $38 +000439r 1 39 .byte $39 +00043Ar 1 3A .byte $3a +00043Br 1 3B .byte $3b +00043Cr 1 3C .byte $3c +00043Dr 1 3D .byte $3d +00043Er 1 3E .byte $3e +00043Fr 1 3F .byte $3f +000440r 1 40 .byte $40 +000441r 1 41 .byte $41 +000442r 1 42 .byte $42 +000443r 1 43 .byte $43 +000444r 1 44 .byte $44 +000445r 1 45 .byte $45 +000446r 1 46 .byte $46 +000447r 1 47 .byte $47 +000448r 1 48 .byte $48 +000449r 1 49 .byte $49 +00044Ar 1 4A .byte $4a +00044Br 1 4B .byte $4b +00044Cr 1 4C .byte $4c +00044Dr 1 4D .byte $4d +00044Er 1 4E .byte $4e +00044Fr 1 4F .byte $4f +000450r 1 50 .byte $50 +000451r 1 51 .byte $51 +000452r 1 52 .byte $52 +000453r 1 53 .byte $53 +000454r 1 54 .byte $54 +000455r 1 55 .byte $55 +000456r 1 56 .byte $56 +000457r 1 57 .byte $57 +000458r 1 58 .byte $58 +000459r 1 59 .byte $59 +00045Ar 1 5A .byte $5a +00045Br 1 5B .byte $5b +00045Cr 1 5C .byte $5c +00045Dr 1 5D .byte $5d +00045Er 1 5E .byte $5e +00045Fr 1 5F .byte $5f +000460r 1 60 .byte $60 +000461r 1 61 .byte $61 +000462r 1 62 .byte $62 +000463r 1 63 .byte $63 +000464r 1 64 .byte $64 +000465r 1 65 .byte $65 +000466r 1 66 .byte $66 +000467r 1 67 .byte $67 +000468r 1 68 .byte $68 +000469r 1 69 .byte $69 +00046Ar 1 6A .byte $6a +00046Br 1 6B .byte $6b +00046Cr 1 6C .byte $6c +00046Dr 1 6D .byte $6d +00046Er 1 6E .byte $6e +00046Fr 1 6F .byte $6f +000470r 1 70 .byte $70 +000471r 1 71 .byte $71 +000472r 1 72 .byte $72 +000473r 1 73 .byte $73 +000474r 1 74 .byte $74 +000475r 1 75 .byte $75 +000476r 1 76 .byte $76 +000477r 1 77 .byte $77 +000478r 1 78 .byte $78 +000479r 1 79 .byte $79 +00047Ar 1 7A .byte $7a +00047Br 1 7B .byte $7b +00047Cr 1 7C .byte $7c +00047Dr 1 7D .byte $7d +00047Er 1 7E .byte $7e +00047Fr 1 7F .byte $7f +000480r 1 80 .byte $80 +000481r 1 81 .byte $81 +000482r 1 82 .byte $82 +000483r 1 83 .byte $83 +000484r 1 84 .byte $84 +000485r 1 85 .byte $85 +000486r 1 86 .byte $86 +000487r 1 87 .byte $87 +000488r 1 88 .byte $88 +000489r 1 89 .byte $89 +00048Ar 1 8A .byte $8a +00048Br 1 8B .byte $8b +00048Cr 1 8C .byte $8c +00048Dr 1 8D .byte $8d +00048Er 1 8E .byte $8e +00048Fr 1 8F .byte $8f +000490r 1 90 .byte $90 +000491r 1 91 .byte $91 +000492r 1 92 .byte $92 +000493r 1 93 .byte $93 +000494r 1 94 .byte $94 +000495r 1 95 .byte $95 +000496r 1 96 .byte $96 +000497r 1 97 .byte $97 +000498r 1 98 .byte $98 +000499r 1 99 .byte $99 +00049Ar 1 9A .byte $9a +00049Br 1 9B .byte $9b +00049Cr 1 9C .byte $9c +00049Dr 1 9D .byte $9d +00049Er 1 9E .byte $9e +00049Fr 1 9F .byte $9f +0004A0r 1 A0 .byte $a0 +0004A1r 1 A1 .byte $a1 +0004A2r 1 A2 .byte $a2 +0004A3r 1 A3 .byte $a3 +0004A4r 1 A4 .byte $a4 +0004A5r 1 A5 .byte $a5 +0004A6r 1 A6 .byte $a6 +0004A7r 1 A7 .byte $a7 +0004A8r 1 A8 .byte $a8 +0004A9r 1 A9 .byte $a9 +0004AAr 1 AA .byte $aa +0004ABr 1 AB .byte $ab +0004ACr 1 AC .byte $ac +0004ADr 1 AD .byte $ad +0004AEr 1 AE .byte $ae +0004AFr 1 AF .byte $af +0004B0r 1 B0 .byte $b0 +0004B1r 1 B1 .byte $b1 +0004B2r 1 B2 .byte $b2 +0004B3r 1 B3 .byte $b3 +0004B4r 1 B4 .byte $b4 +0004B5r 1 B5 .byte $b5 +0004B6r 1 B6 .byte $b6 +0004B7r 1 B7 .byte $b7 +0004B8r 1 B8 .byte $b8 +0004B9r 1 B9 .byte $b9 +0004BAr 1 BA .byte $ba +0004BBr 1 BB .byte $bb +0004BCr 1 BC .byte $bc +0004BDr 1 BD .byte $bd +0004BEr 1 BE .byte $be +0004BFr 1 BF .byte $bf +0004C0r 1 C0 .byte $c0 +0004C1r 1 C1 .byte $c1 +0004C2r 1 C2 .byte $c2 +0004C3r 1 C3 .byte $c3 +0004C4r 1 C4 .byte $c4 +0004C5r 1 C5 .byte $c5 +0004C6r 1 C6 .byte $c6 +0004C7r 1 C7 .byte $c7 +0004C8r 1 C8 .byte $c8 +0004C9r 1 C9 .byte $c9 +0004CAr 1 CA .byte $ca +0004CBr 1 CB .byte $cb +0004CCr 1 CC .byte $cc +0004CDr 1 CD .byte $cd +0004CEr 1 CE .byte $ce +0004CFr 1 CF .byte $cf +0004D0r 1 D0 .byte $d0 +0004D1r 1 D1 .byte $d1 +0004D2r 1 D2 .byte $d2 +0004D3r 1 D3 .byte $d3 +0004D4r 1 D4 .byte $d4 +0004D5r 1 D5 .byte $d5 +0004D6r 1 D6 .byte $d6 +0004D7r 1 D7 .byte $d7 +0004D8r 1 D8 .byte $d8 +0004D9r 1 D9 .byte $d9 +0004DAr 1 DA .byte $da +0004DBr 1 DB .byte $db +0004DCr 1 DC .byte $dc +0004DDr 1 DD .byte $dd +0004DEr 1 DE .byte $de +0004DFr 1 DF .byte $df +0004E0r 1 E0 .byte $e0 +0004E1r 1 E1 .byte $e1 +0004E2r 1 E2 .byte $e2 +0004E3r 1 E3 .byte $e3 +0004E4r 1 E4 .byte $e4 +0004E5r 1 E5 .byte $e5 +0004E6r 1 E6 .byte $e6 +0004E7r 1 E7 .byte $e7 +0004E8r 1 E8 .byte $e8 +0004E9r 1 E9 .byte $e9 +0004EAr 1 EA .byte $ea +0004EBr 1 EB .byte $eb +0004ECr 1 EC .byte $ec +0004EDr 1 ED .byte $ed +0004EEr 1 EE .byte $ee +0004EFr 1 EF .byte $ef +0004F0r 1 F0 .byte $f0 +0004F1r 1 F1 .byte $f1 +0004F2r 1 F2 .byte $f2 +0004F3r 1 F3 .byte $f3 +0004F4r 1 F4 .byte $f4 +0004F5r 1 F5 .byte $f5 +0004F6r 1 F6 .byte $f6 +0004F7r 1 F7 .byte $f7 +0004F8r 1 F8 .byte $f8 +0004F9r 1 F9 .byte $f9 +0004FAr 1 FA .byte $fa +0004FBr 1 FB .byte $fb +0004FCr 1 FC .byte $fc +0004FDr 1 FD .byte $fd +0004FEr 1 FE .byte $fe +0004FFr 1 FF .byte $ff +000500r 1 +000500r 1 ; 2-digit hex values, uppercase +000500r 1 00 .byte $00 +000501r 1 01 .byte $01 +000502r 1 02 .byte $02 +000503r 1 03 .byte $03 +000504r 1 04 .byte $04 +000505r 1 05 .byte $05 +000506r 1 06 .byte $06 +000507r 1 07 .byte $07 +000508r 1 08 .byte $08 +000509r 1 09 .byte $09 +00050Ar 1 0A .byte $0A +00050Br 1 0B .byte $0B +00050Cr 1 0C .byte $0C +00050Dr 1 0D .byte $0D +00050Er 1 0E .byte $0E +00050Fr 1 0F .byte $0F +000510r 1 10 .byte $10 +000511r 1 11 .byte $11 +000512r 1 12 .byte $12 +000513r 1 13 .byte $13 +000514r 1 14 .byte $14 +000515r 1 15 .byte $15 +000516r 1 16 .byte $16 +000517r 1 17 .byte $17 +000518r 1 18 .byte $18 +000519r 1 19 .byte $19 +00051Ar 1 1A .byte $1A +00051Br 1 1B .byte $1B +00051Cr 1 1C .byte $1C +00051Dr 1 1D .byte $1D +00051Er 1 1E .byte $1E +00051Fr 1 1F .byte $1F +000520r 1 20 .byte $20 +000521r 1 21 .byte $21 +000522r 1 22 .byte $22 +000523r 1 23 .byte $23 +000524r 1 24 .byte $24 +000525r 1 25 .byte $25 +000526r 1 26 .byte $26 +000527r 1 27 .byte $27 +000528r 1 28 .byte $28 +000529r 1 29 .byte $29 +00052Ar 1 2A .byte $2A +00052Br 1 2B .byte $2B +00052Cr 1 2C .byte $2C +00052Dr 1 2D .byte $2D +00052Er 1 2E .byte $2E +00052Fr 1 2F .byte $2F +000530r 1 30 .byte $30 +000531r 1 31 .byte $31 +000532r 1 32 .byte $32 +000533r 1 33 .byte $33 +000534r 1 34 .byte $34 +000535r 1 35 .byte $35 +000536r 1 36 .byte $36 +000537r 1 37 .byte $37 +000538r 1 38 .byte $38 +000539r 1 39 .byte $39 +00053Ar 1 3A .byte $3A +00053Br 1 3B .byte $3B +00053Cr 1 3C .byte $3C +00053Dr 1 3D .byte $3D +00053Er 1 3E .byte $3E +00053Fr 1 3F .byte $3F +000540r 1 40 .byte $40 +000541r 1 41 .byte $41 +000542r 1 42 .byte $42 +000543r 1 43 .byte $43 +000544r 1 44 .byte $44 +000545r 1 45 .byte $45 +000546r 1 46 .byte $46 +000547r 1 47 .byte $47 +000548r 1 48 .byte $48 +000549r 1 49 .byte $49 +00054Ar 1 4A .byte $4A +00054Br 1 4B .byte $4B +00054Cr 1 4C .byte $4C +00054Dr 1 4D .byte $4D +00054Er 1 4E .byte $4E +00054Fr 1 4F .byte $4F +000550r 1 50 .byte $50 +000551r 1 51 .byte $51 +000552r 1 52 .byte $52 +000553r 1 53 .byte $53 +000554r 1 54 .byte $54 +000555r 1 55 .byte $55 +000556r 1 56 .byte $56 +000557r 1 57 .byte $57 +000558r 1 58 .byte $58 +000559r 1 59 .byte $59 +00055Ar 1 5A .byte $5A +00055Br 1 5B .byte $5B +00055Cr 1 5C .byte $5C +00055Dr 1 5D .byte $5D +00055Er 1 5E .byte $5E +00055Fr 1 5F .byte $5F +000560r 1 60 .byte $60 +000561r 1 61 .byte $61 +000562r 1 62 .byte $62 +000563r 1 63 .byte $63 +000564r 1 64 .byte $64 +000565r 1 65 .byte $65 +000566r 1 66 .byte $66 +000567r 1 67 .byte $67 +000568r 1 68 .byte $68 +000569r 1 69 .byte $69 +00056Ar 1 6A .byte $6A +00056Br 1 6B .byte $6B +00056Cr 1 6C .byte $6C +00056Dr 1 6D .byte $6D +00056Er 1 6E .byte $6E +00056Fr 1 6F .byte $6F +000570r 1 70 .byte $70 +000571r 1 71 .byte $71 +000572r 1 72 .byte $72 +000573r 1 73 .byte $73 +000574r 1 74 .byte $74 +000575r 1 75 .byte $75 +000576r 1 76 .byte $76 +000577r 1 77 .byte $77 +000578r 1 78 .byte $78 +000579r 1 79 .byte $79 +00057Ar 1 7A .byte $7A +00057Br 1 7B .byte $7B +00057Cr 1 7C .byte $7C +00057Dr 1 7D .byte $7D +00057Er 1 7E .byte $7E +00057Fr 1 7F .byte $7F +000580r 1 80 .byte $80 +000581r 1 81 .byte $81 +000582r 1 82 .byte $82 +000583r 1 83 .byte $83 +000584r 1 84 .byte $84 +000585r 1 85 .byte $85 +000586r 1 86 .byte $86 +000587r 1 87 .byte $87 +000588r 1 88 .byte $88 +000589r 1 89 .byte $89 +00058Ar 1 8A .byte $8A +00058Br 1 8B .byte $8B +00058Cr 1 8C .byte $8C +00058Dr 1 8D .byte $8D +00058Er 1 8E .byte $8E +00058Fr 1 8F .byte $8F +000590r 1 90 .byte $90 +000591r 1 91 .byte $91 +000592r 1 92 .byte $92 +000593r 1 93 .byte $93 +000594r 1 94 .byte $94 +000595r 1 95 .byte $95 +000596r 1 96 .byte $96 +000597r 1 97 .byte $97 +000598r 1 98 .byte $98 +000599r 1 99 .byte $99 +00059Ar 1 9A .byte $9A +00059Br 1 9B .byte $9B +00059Cr 1 9C .byte $9C +00059Dr 1 9D .byte $9D +00059Er 1 9E .byte $9E +00059Fr 1 9F .byte $9F +0005A0r 1 A0 .byte $A0 +0005A1r 1 A1 .byte $A1 +0005A2r 1 A2 .byte $A2 +0005A3r 1 A3 .byte $A3 +0005A4r 1 A4 .byte $A4 +0005A5r 1 A5 .byte $A5 +0005A6r 1 A6 .byte $A6 +0005A7r 1 A7 .byte $A7 +0005A8r 1 A8 .byte $A8 +0005A9r 1 A9 .byte $A9 +0005AAr 1 AA .byte $AA +0005ABr 1 AB .byte $AB +0005ACr 1 AC .byte $AC +0005ADr 1 AD .byte $AD +0005AEr 1 AE .byte $AE +0005AFr 1 AF .byte $AF +0005B0r 1 B0 .byte $B0 +0005B1r 1 B1 .byte $B1 +0005B2r 1 B2 .byte $B2 +0005B3r 1 B3 .byte $B3 +0005B4r 1 B4 .byte $B4 +0005B5r 1 B5 .byte $B5 +0005B6r 1 B6 .byte $B6 +0005B7r 1 B7 .byte $B7 +0005B8r 1 B8 .byte $B8 +0005B9r 1 B9 .byte $B9 +0005BAr 1 BA .byte $BA +0005BBr 1 BB .byte $BB +0005BCr 1 BC .byte $BC +0005BDr 1 BD .byte $BD +0005BEr 1 BE .byte $BE +0005BFr 1 BF .byte $BF +0005C0r 1 C0 .byte $C0 +0005C1r 1 C1 .byte $C1 +0005C2r 1 C2 .byte $C2 +0005C3r 1 C3 .byte $C3 +0005C4r 1 C4 .byte $C4 +0005C5r 1 C5 .byte $C5 +0005C6r 1 C6 .byte $C6 +0005C7r 1 C7 .byte $C7 +0005C8r 1 C8 .byte $C8 +0005C9r 1 C9 .byte $C9 +0005CAr 1 CA .byte $CA +0005CBr 1 CB .byte $CB +0005CCr 1 CC .byte $CC +0005CDr 1 CD .byte $CD +0005CEr 1 CE .byte $CE +0005CFr 1 CF .byte $CF +0005D0r 1 D0 .byte $D0 +0005D1r 1 D1 .byte $D1 +0005D2r 1 D2 .byte $D2 +0005D3r 1 D3 .byte $D3 +0005D4r 1 D4 .byte $D4 +0005D5r 1 D5 .byte $D5 +0005D6r 1 D6 .byte $D6 +0005D7r 1 D7 .byte $D7 +0005D8r 1 D8 .byte $D8 +0005D9r 1 D9 .byte $D9 +0005DAr 1 DA .byte $DA +0005DBr 1 DB .byte $DB +0005DCr 1 DC .byte $DC +0005DDr 1 DD .byte $DD +0005DEr 1 DE .byte $DE +0005DFr 1 DF .byte $DF +0005E0r 1 E0 .byte $E0 +0005E1r 1 E1 .byte $E1 +0005E2r 1 E2 .byte $E2 +0005E3r 1 E3 .byte $E3 +0005E4r 1 E4 .byte $E4 +0005E5r 1 E5 .byte $E5 +0005E6r 1 E6 .byte $E6 +0005E7r 1 E7 .byte $E7 +0005E8r 1 E8 .byte $E8 +0005E9r 1 E9 .byte $E9 +0005EAr 1 EA .byte $EA +0005EBr 1 EB .byte $EB +0005ECr 1 EC .byte $EC +0005EDr 1 ED .byte $ED +0005EEr 1 EE .byte $EE +0005EFr 1 EF .byte $EF +0005F0r 1 F0 .byte $F0 +0005F1r 1 F1 .byte $F1 +0005F2r 1 F2 .byte $F2 +0005F3r 1 F3 .byte $F3 +0005F4r 1 F4 .byte $F4 +0005F5r 1 F5 .byte $F5 +0005F6r 1 F6 .byte $F6 +0005F7r 1 F7 .byte $F7 +0005F8r 1 F8 .byte $F8 +0005F9r 1 F9 .byte $F9 +0005FAr 1 FA .byte $FA +0005FBr 1 FB .byte $FB +0005FCr 1 FC .byte $FC +0005FDr 1 FD .byte $FD +0005FEr 1 FE .byte $FE +0005FFr 1 FF .byte $FF +000600r 1 +000600r 1 ; alternative hex values +000600r 1 00 .byte 0h +000601r 1 01 .byte 1h +000602r 1 02 .byte 2h +000603r 1 03 .byte 3h +000604r 1 04 .byte 4h +000605r 1 05 .byte 5h +000606r 1 06 .byte 6h +000607r 1 07 .byte 7h +000608r 1 08 .byte 8h +000609r 1 09 .byte 9h +00060Ar 1 0A .byte 0ah +00060Br 1 0B .byte 0bh +00060Cr 1 0C .byte 0ch +00060Dr 1 0D .byte 0dh +00060Er 1 0E .byte 0eh +00060Fr 1 0F .byte 0fh +000610r 1 10 .byte 10h +000611r 1 11 .byte 11h +000612r 1 12 .byte 12h +000613r 1 13 .byte 13h +000614r 1 14 .byte 14h +000615r 1 15 .byte 15h +000616r 1 16 .byte 16h +000617r 1 17 .byte 17h +000618r 1 18 .byte 18h +000619r 1 19 .byte 19h +00061Ar 1 1A .byte 1ah +00061Br 1 1B .byte 1bh +00061Cr 1 1C .byte 1ch +00061Dr 1 1D .byte 1dh +00061Er 1 1E .byte 1eh +00061Fr 1 1F .byte 1fh +000620r 1 20 .byte 20h +000621r 1 21 .byte 21h +000622r 1 22 .byte 22h +000623r 1 23 .byte 23h +000624r 1 24 .byte 24h +000625r 1 25 .byte 25h +000626r 1 26 .byte 26h +000627r 1 27 .byte 27h +000628r 1 28 .byte 28h +000629r 1 29 .byte 29h +00062Ar 1 2A .byte 2ah +00062Br 1 2B .byte 2bh +00062Cr 1 2C .byte 2ch +00062Dr 1 2D .byte 2dh +00062Er 1 2E .byte 2eh +00062Fr 1 2F .byte 2fh +000630r 1 30 .byte 30h +000631r 1 31 .byte 31h +000632r 1 32 .byte 32h +000633r 1 33 .byte 33h +000634r 1 34 .byte 34h +000635r 1 35 .byte 35h +000636r 1 36 .byte 36h +000637r 1 37 .byte 37h +000638r 1 38 .byte 38h +000639r 1 39 .byte 39h +00063Ar 1 3A .byte 3ah +00063Br 1 3B .byte 3bh +00063Cr 1 3C .byte 3ch +00063Dr 1 3D .byte 3dh +00063Er 1 3E .byte 3eh +00063Fr 1 3F .byte 3fh +000640r 1 40 .byte 40h +000641r 1 41 .byte 41h +000642r 1 42 .byte 42h +000643r 1 43 .byte 43h +000644r 1 44 .byte 44h +000645r 1 45 .byte 45h +000646r 1 46 .byte 46h +000647r 1 47 .byte 47h +000648r 1 48 .byte 48h +000649r 1 49 .byte 49h +00064Ar 1 4A .byte 4ah +00064Br 1 4B .byte 4bh +00064Cr 1 4C .byte 4ch +00064Dr 1 4D .byte 4dh +00064Er 1 4E .byte 4eh +00064Fr 1 4F .byte 4fh +000650r 1 50 .byte 50h +000651r 1 51 .byte 51h +000652r 1 52 .byte 52h +000653r 1 53 .byte 53h +000654r 1 54 .byte 54h +000655r 1 55 .byte 55h +000656r 1 56 .byte 56h +000657r 1 57 .byte 57h +000658r 1 58 .byte 58h +000659r 1 59 .byte 59h +00065Ar 1 5A .byte 5ah +00065Br 1 5B .byte 5bh +00065Cr 1 5C .byte 5ch +00065Dr 1 5D .byte 5dh +00065Er 1 5E .byte 5eh +00065Fr 1 5F .byte 5fh +000660r 1 60 .byte 60h +000661r 1 61 .byte 61h +000662r 1 62 .byte 62h +000663r 1 63 .byte 63h +000664r 1 64 .byte 64h +000665r 1 65 .byte 65h +000666r 1 66 .byte 66h +000667r 1 67 .byte 67h +000668r 1 68 .byte 68h +000669r 1 69 .byte 69h +00066Ar 1 6A .byte 6ah +00066Br 1 6B .byte 6bh +00066Cr 1 6C .byte 6ch +00066Dr 1 6D .byte 6dh +00066Er 1 6E .byte 6eh +00066Fr 1 6F .byte 6fh +000670r 1 70 .byte 70h +000671r 1 71 .byte 71h +000672r 1 72 .byte 72h +000673r 1 73 .byte 73h +000674r 1 74 .byte 74h +000675r 1 75 .byte 75h +000676r 1 76 .byte 76h +000677r 1 77 .byte 77h +000678r 1 78 .byte 78h +000679r 1 79 .byte 79h +00067Ar 1 7A .byte 7ah +00067Br 1 7B .byte 7bh +00067Cr 1 7C .byte 7ch +00067Dr 1 7D .byte 7dh +00067Er 1 7E .byte 7eh +00067Fr 1 7F .byte 7fh +000680r 1 80 .byte 80h +000681r 1 81 .byte 81h +000682r 1 82 .byte 82h +000683r 1 83 .byte 83h +000684r 1 84 .byte 84h +000685r 1 85 .byte 85h +000686r 1 86 .byte 86h +000687r 1 87 .byte 87h +000688r 1 88 .byte 88h +000689r 1 89 .byte 89h +00068Ar 1 8A .byte 8ah +00068Br 1 8B .byte 8bh +00068Cr 1 8C .byte 8ch +00068Dr 1 8D .byte 8dh +00068Er 1 8E .byte 8eh +00068Fr 1 8F .byte 8fh +000690r 1 90 .byte 90h +000691r 1 91 .byte 91h +000692r 1 92 .byte 92h +000693r 1 93 .byte 93h +000694r 1 94 .byte 94h +000695r 1 95 .byte 95h +000696r 1 96 .byte 96h +000697r 1 97 .byte 97h +000698r 1 98 .byte 98h +000699r 1 99 .byte 99h +00069Ar 1 9A .byte 9ah +00069Br 1 9B .byte 9bh +00069Cr 1 9C .byte 9ch +00069Dr 1 9D .byte 9dh +00069Er 1 9E .byte 9eh +00069Fr 1 9F .byte 9fh +0006A0r 1 A0 .byte 0a0h +0006A1r 1 A1 .byte 0a1h +0006A2r 1 A2 .byte 0a2h +0006A3r 1 A3 .byte 0a3h +0006A4r 1 A4 .byte 0a4h +0006A5r 1 A5 .byte 0a5h +0006A6r 1 A6 .byte 0a6h +0006A7r 1 A7 .byte 0a7h +0006A8r 1 A8 .byte 0a8h +0006A9r 1 A9 .byte 0a9h +0006AAr 1 AA .byte 0aah +0006ABr 1 AB .byte 0abh +0006ACr 1 AC .byte 0ach +0006ADr 1 AD .byte 0adh +0006AEr 1 AE .byte 0aeh +0006AFr 1 AF .byte 0afh +0006B0r 1 B0 .byte 0b0h +0006B1r 1 B1 .byte 0b1h +0006B2r 1 B2 .byte 0b2h +0006B3r 1 B3 .byte 0b3h +0006B4r 1 B4 .byte 0b4h +0006B5r 1 B5 .byte 0b5h +0006B6r 1 B6 .byte 0b6h +0006B7r 1 B7 .byte 0b7h +0006B8r 1 B8 .byte 0b8h +0006B9r 1 B9 .byte 0b9h +0006BAr 1 BA .byte 0bah +0006BBr 1 BB .byte 0bbh +0006BCr 1 BC .byte 0bch +0006BDr 1 BD .byte 0bdh +0006BEr 1 BE .byte 0beh +0006BFr 1 BF .byte 0bfh +0006C0r 1 C0 .byte 0c0h +0006C1r 1 C1 .byte 0c1h +0006C2r 1 C2 .byte 0c2h +0006C3r 1 C3 .byte 0c3h +0006C4r 1 C4 .byte 0c4h +0006C5r 1 C5 .byte 0c5h +0006C6r 1 C6 .byte 0c6h +0006C7r 1 C7 .byte 0c7h +0006C8r 1 C8 .byte 0c8h +0006C9r 1 C9 .byte 0c9h +0006CAr 1 CA .byte 0cah +0006CBr 1 CB .byte 0cbh +0006CCr 1 CC .byte 0cch +0006CDr 1 CD .byte 0cdh +0006CEr 1 CE .byte 0ceh +0006CFr 1 CF .byte 0cfh +0006D0r 1 D0 .byte 0d0h +0006D1r 1 D1 .byte 0d1h +0006D2r 1 D2 .byte 0d2h +0006D3r 1 D3 .byte 0d3h +0006D4r 1 D4 .byte 0d4h +0006D5r 1 D5 .byte 0d5h +0006D6r 1 D6 .byte 0d6h +0006D7r 1 D7 .byte 0d7h +0006D8r 1 D8 .byte 0d8h +0006D9r 1 D9 .byte 0d9h +0006DAr 1 DA .byte 0dah +0006DBr 1 DB .byte 0dbh +0006DCr 1 DC .byte 0dch +0006DDr 1 DD .byte 0ddh +0006DEr 1 DE .byte 0deh +0006DFr 1 DF .byte 0dfh +0006E0r 1 E0 .byte 0e0h +0006E1r 1 E1 .byte 0e1h +0006E2r 1 E2 .byte 0e2h +0006E3r 1 E3 .byte 0e3h +0006E4r 1 E4 .byte 0e4h +0006E5r 1 E5 .byte 0e5h +0006E6r 1 E6 .byte 0e6h +0006E7r 1 E7 .byte 0e7h +0006E8r 1 E8 .byte 0e8h +0006E9r 1 E9 .byte 0e9h +0006EAr 1 EA .byte 0eah +0006EBr 1 EB .byte 0ebh +0006ECr 1 EC .byte 0ech +0006EDr 1 ED .byte 0edh +0006EEr 1 EE .byte 0eeh +0006EFr 1 EF .byte 0efh +0006F0r 1 F0 .byte 0f0h +0006F1r 1 F1 .byte 0f1h +0006F2r 1 F2 .byte 0f2h +0006F3r 1 F3 .byte 0f3h +0006F4r 1 F4 .byte 0f4h +0006F5r 1 F5 .byte 0f5h +0006F6r 1 F6 .byte 0f6h +0006F7r 1 F7 .byte 0f7h +0006F8r 1 F8 .byte 0f8h +0006F9r 1 F9 .byte 0f9h +0006FAr 1 FA .byte 0fah +0006FBr 1 FB .byte 0fbh +0006FCr 1 FC .byte 0fch +0006FDr 1 FD .byte 0fdh +0006FEr 1 FE .byte 0feh +0006FFr 1 FF .byte 0ffh +000700r 1 +000700r 1 ; alternative hex values, uppercase +000700r 1 00 .byte 0h +000701r 1 01 .byte 1h +000702r 1 02 .byte 2h +000703r 1 03 .byte 3h +000704r 1 04 .byte 4h +000705r 1 05 .byte 5h +000706r 1 06 .byte 6h +000707r 1 07 .byte 7h +000708r 1 08 .byte 8h +000709r 1 09 .byte 9h +00070Ar 1 0A .byte 0Ah +00070Br 1 0B .byte 0Bh +00070Cr 1 0C .byte 0Ch +00070Dr 1 0D .byte 0Dh +00070Er 1 0E .byte 0Eh +00070Fr 1 0F .byte 0Fh +000710r 1 10 .byte 10h +000711r 1 11 .byte 11h +000712r 1 12 .byte 12h +000713r 1 13 .byte 13h +000714r 1 14 .byte 14h +000715r 1 15 .byte 15h +000716r 1 16 .byte 16h +000717r 1 17 .byte 17h +000718r 1 18 .byte 18h +000719r 1 19 .byte 19h +00071Ar 1 1A .byte 1Ah +00071Br 1 1B .byte 1Bh +00071Cr 1 1C .byte 1Ch +00071Dr 1 1D .byte 1Dh +00071Er 1 1E .byte 1Eh +00071Fr 1 1F .byte 1Fh +000720r 1 20 .byte 20h +000721r 1 21 .byte 21h +000722r 1 22 .byte 22h +000723r 1 23 .byte 23h +000724r 1 24 .byte 24h +000725r 1 25 .byte 25h +000726r 1 26 .byte 26h +000727r 1 27 .byte 27h +000728r 1 28 .byte 28h +000729r 1 29 .byte 29h +00072Ar 1 2A .byte 2Ah +00072Br 1 2B .byte 2Bh +00072Cr 1 2C .byte 2Ch +00072Dr 1 2D .byte 2Dh +00072Er 1 2E .byte 2Eh +00072Fr 1 2F .byte 2Fh +000730r 1 30 .byte 30h +000731r 1 31 .byte 31h +000732r 1 32 .byte 32h +000733r 1 33 .byte 33h +000734r 1 34 .byte 34h +000735r 1 35 .byte 35h +000736r 1 36 .byte 36h +000737r 1 37 .byte 37h +000738r 1 38 .byte 38h +000739r 1 39 .byte 39h +00073Ar 1 3A .byte 3Ah +00073Br 1 3B .byte 3Bh +00073Cr 1 3C .byte 3Ch +00073Dr 1 3D .byte 3Dh +00073Er 1 3E .byte 3Eh +00073Fr 1 3F .byte 3Fh +000740r 1 40 .byte 40h +000741r 1 41 .byte 41h +000742r 1 42 .byte 42h +000743r 1 43 .byte 43h +000744r 1 44 .byte 44h +000745r 1 45 .byte 45h +000746r 1 46 .byte 46h +000747r 1 47 .byte 47h +000748r 1 48 .byte 48h +000749r 1 49 .byte 49h +00074Ar 1 4A .byte 4Ah +00074Br 1 4B .byte 4Bh +00074Cr 1 4C .byte 4Ch +00074Dr 1 4D .byte 4Dh +00074Er 1 4E .byte 4Eh +00074Fr 1 4F .byte 4Fh +000750r 1 50 .byte 50h +000751r 1 51 .byte 51h +000752r 1 52 .byte 52h +000753r 1 53 .byte 53h +000754r 1 54 .byte 54h +000755r 1 55 .byte 55h +000756r 1 56 .byte 56h +000757r 1 57 .byte 57h +000758r 1 58 .byte 58h +000759r 1 59 .byte 59h +00075Ar 1 5A .byte 5Ah +00075Br 1 5B .byte 5Bh +00075Cr 1 5C .byte 5Ch +00075Dr 1 5D .byte 5Dh +00075Er 1 5E .byte 5Eh +00075Fr 1 5F .byte 5Fh +000760r 1 60 .byte 60h +000761r 1 61 .byte 61h +000762r 1 62 .byte 62h +000763r 1 63 .byte 63h +000764r 1 64 .byte 64h +000765r 1 65 .byte 65h +000766r 1 66 .byte 66h +000767r 1 67 .byte 67h +000768r 1 68 .byte 68h +000769r 1 69 .byte 69h +00076Ar 1 6A .byte 6Ah +00076Br 1 6B .byte 6Bh +00076Cr 1 6C .byte 6Ch +00076Dr 1 6D .byte 6Dh +00076Er 1 6E .byte 6Eh +00076Fr 1 6F .byte 6Fh +000770r 1 70 .byte 70h +000771r 1 71 .byte 71h +000772r 1 72 .byte 72h +000773r 1 73 .byte 73h +000774r 1 74 .byte 74h +000775r 1 75 .byte 75h +000776r 1 76 .byte 76h +000777r 1 77 .byte 77h +000778r 1 78 .byte 78h +000779r 1 79 .byte 79h +00077Ar 1 7A .byte 7Ah +00077Br 1 7B .byte 7Bh +00077Cr 1 7C .byte 7Ch +00077Dr 1 7D .byte 7Dh +00077Er 1 7E .byte 7Eh +00077Fr 1 7F .byte 7Fh +000780r 1 80 .byte 80h +000781r 1 81 .byte 81h +000782r 1 82 .byte 82h +000783r 1 83 .byte 83h +000784r 1 84 .byte 84h +000785r 1 85 .byte 85h +000786r 1 86 .byte 86h +000787r 1 87 .byte 87h +000788r 1 88 .byte 88h +000789r 1 89 .byte 89h +00078Ar 1 8A .byte 8Ah +00078Br 1 8B .byte 8Bh +00078Cr 1 8C .byte 8Ch +00078Dr 1 8D .byte 8Dh +00078Er 1 8E .byte 8Eh +00078Fr 1 8F .byte 8Fh +000790r 1 90 .byte 90h +000791r 1 91 .byte 91h +000792r 1 92 .byte 92h +000793r 1 93 .byte 93h +000794r 1 94 .byte 94h +000795r 1 95 .byte 95h +000796r 1 96 .byte 96h +000797r 1 97 .byte 97h +000798r 1 98 .byte 98h +000799r 1 99 .byte 99h +00079Ar 1 9A .byte 9Ah +00079Br 1 9B .byte 9Bh +00079Cr 1 9C .byte 9Ch +00079Dr 1 9D .byte 9Dh +00079Er 1 9E .byte 9Eh +00079Fr 1 9F .byte 9Fh +0007A0r 1 A0 .byte 0A0h +0007A1r 1 A1 .byte 0A1h +0007A2r 1 A2 .byte 0A2h +0007A3r 1 A3 .byte 0A3h +0007A4r 1 A4 .byte 0A4h +0007A5r 1 A5 .byte 0A5h +0007A6r 1 A6 .byte 0A6h +0007A7r 1 A7 .byte 0A7h +0007A8r 1 A8 .byte 0A8h +0007A9r 1 A9 .byte 0A9h +0007AAr 1 AA .byte 0AAh +0007ABr 1 AB .byte 0ABh +0007ACr 1 AC .byte 0ACh +0007ADr 1 AD .byte 0ADh +0007AEr 1 AE .byte 0AEh +0007AFr 1 AF .byte 0AFh +0007B0r 1 B0 .byte 0B0h +0007B1r 1 B1 .byte 0B1h +0007B2r 1 B2 .byte 0B2h +0007B3r 1 B3 .byte 0B3h +0007B4r 1 B4 .byte 0B4h +0007B5r 1 B5 .byte 0B5h +0007B6r 1 B6 .byte 0B6h +0007B7r 1 B7 .byte 0B7h +0007B8r 1 B8 .byte 0B8h +0007B9r 1 B9 .byte 0B9h +0007BAr 1 BA .byte 0BAh +0007BBr 1 BB .byte 0BBh +0007BCr 1 BC .byte 0BCh +0007BDr 1 BD .byte 0BDh +0007BEr 1 BE .byte 0BEh +0007BFr 1 BF .byte 0BFh +0007C0r 1 C0 .byte 0C0h +0007C1r 1 C1 .byte 0C1h +0007C2r 1 C2 .byte 0C2h +0007C3r 1 C3 .byte 0C3h +0007C4r 1 C4 .byte 0C4h +0007C5r 1 C5 .byte 0C5h +0007C6r 1 C6 .byte 0C6h +0007C7r 1 C7 .byte 0C7h +0007C8r 1 C8 .byte 0C8h +0007C9r 1 C9 .byte 0C9h +0007CAr 1 CA .byte 0CAh +0007CBr 1 CB .byte 0CBh +0007CCr 1 CC .byte 0CCh +0007CDr 1 CD .byte 0CDh +0007CEr 1 CE .byte 0CEh +0007CFr 1 CF .byte 0CFh +0007D0r 1 D0 .byte 0D0h +0007D1r 1 D1 .byte 0D1h +0007D2r 1 D2 .byte 0D2h +0007D3r 1 D3 .byte 0D3h +0007D4r 1 D4 .byte 0D4h +0007D5r 1 D5 .byte 0D5h +0007D6r 1 D6 .byte 0D6h +0007D7r 1 D7 .byte 0D7h +0007D8r 1 D8 .byte 0D8h +0007D9r 1 D9 .byte 0D9h +0007DAr 1 DA .byte 0DAh +0007DBr 1 DB .byte 0DBh +0007DCr 1 DC .byte 0DCh +0007DDr 1 DD .byte 0DDh +0007DEr 1 DE .byte 0DEh +0007DFr 1 DF .byte 0DFh +0007E0r 1 E0 .byte 0E0h +0007E1r 1 E1 .byte 0E1h +0007E2r 1 E2 .byte 0E2h +0007E3r 1 E3 .byte 0E3h +0007E4r 1 E4 .byte 0E4h +0007E5r 1 E5 .byte 0E5h +0007E6r 1 E6 .byte 0E6h +0007E7r 1 E7 .byte 0E7h +0007E8r 1 E8 .byte 0E8h +0007E9r 1 E9 .byte 0E9h +0007EAr 1 EA .byte 0EAh +0007EBr 1 EB .byte 0EBh +0007ECr 1 EC .byte 0ECh +0007EDr 1 ED .byte 0EDh +0007EEr 1 EE .byte 0EEh +0007EFr 1 EF .byte 0EFh +0007F0r 1 F0 .byte 0F0h +0007F1r 1 F1 .byte 0F1h +0007F2r 1 F2 .byte 0F2h +0007F3r 1 F3 .byte 0F3h +0007F4r 1 F4 .byte 0F4h +0007F5r 1 F5 .byte 0F5h +0007F6r 1 F6 .byte 0F6h +0007F7r 1 F7 .byte 0F7h +0007F8r 1 F8 .byte 0F8h +0007F9r 1 F9 .byte 0F9h +0007FAr 1 FA .byte 0FAh +0007FBr 1 FB .byte 0FBh +0007FCr 1 FC .byte 0FCh +0007FDr 1 FD .byte 0FDh +0007FEr 1 FE .byte 0FEh +0007FFr 1 FF .byte 0FFh +000800r 1 +000800r 1 ; alternative 2-digit hex values +000800r 1 00 .byte 00h +000801r 1 01 .byte 01h +000802r 1 02 .byte 02h +000803r 1 03 .byte 03h +000804r 1 04 .byte 04h +000805r 1 05 .byte 05h +000806r 1 06 .byte 06h +000807r 1 07 .byte 07h +000808r 1 08 .byte 08h +000809r 1 09 .byte 09h +00080Ar 1 0A .byte 0ah +00080Br 1 0B .byte 0bh +00080Cr 1 0C .byte 0ch +00080Dr 1 0D .byte 0dh +00080Er 1 0E .byte 0eh +00080Fr 1 0F .byte 0fh +000810r 1 10 .byte 10h +000811r 1 11 .byte 11h +000812r 1 12 .byte 12h +000813r 1 13 .byte 13h +000814r 1 14 .byte 14h +000815r 1 15 .byte 15h +000816r 1 16 .byte 16h +000817r 1 17 .byte 17h +000818r 1 18 .byte 18h +000819r 1 19 .byte 19h +00081Ar 1 1A .byte 1ah +00081Br 1 1B .byte 1bh +00081Cr 1 1C .byte 1ch +00081Dr 1 1D .byte 1dh +00081Er 1 1E .byte 1eh +00081Fr 1 1F .byte 1fh +000820r 1 20 .byte 20h +000821r 1 21 .byte 21h +000822r 1 22 .byte 22h +000823r 1 23 .byte 23h +000824r 1 24 .byte 24h +000825r 1 25 .byte 25h +000826r 1 26 .byte 26h +000827r 1 27 .byte 27h +000828r 1 28 .byte 28h +000829r 1 29 .byte 29h +00082Ar 1 2A .byte 2ah +00082Br 1 2B .byte 2bh +00082Cr 1 2C .byte 2ch +00082Dr 1 2D .byte 2dh +00082Er 1 2E .byte 2eh +00082Fr 1 2F .byte 2fh +000830r 1 30 .byte 30h +000831r 1 31 .byte 31h +000832r 1 32 .byte 32h +000833r 1 33 .byte 33h +000834r 1 34 .byte 34h +000835r 1 35 .byte 35h +000836r 1 36 .byte 36h +000837r 1 37 .byte 37h +000838r 1 38 .byte 38h +000839r 1 39 .byte 39h +00083Ar 1 3A .byte 3ah +00083Br 1 3B .byte 3bh +00083Cr 1 3C .byte 3ch +00083Dr 1 3D .byte 3dh +00083Er 1 3E .byte 3eh +00083Fr 1 3F .byte 3fh +000840r 1 40 .byte 40h +000841r 1 41 .byte 41h +000842r 1 42 .byte 42h +000843r 1 43 .byte 43h +000844r 1 44 .byte 44h +000845r 1 45 .byte 45h +000846r 1 46 .byte 46h +000847r 1 47 .byte 47h +000848r 1 48 .byte 48h +000849r 1 49 .byte 49h +00084Ar 1 4A .byte 4ah +00084Br 1 4B .byte 4bh +00084Cr 1 4C .byte 4ch +00084Dr 1 4D .byte 4dh +00084Er 1 4E .byte 4eh +00084Fr 1 4F .byte 4fh +000850r 1 50 .byte 50h +000851r 1 51 .byte 51h +000852r 1 52 .byte 52h +000853r 1 53 .byte 53h +000854r 1 54 .byte 54h +000855r 1 55 .byte 55h +000856r 1 56 .byte 56h +000857r 1 57 .byte 57h +000858r 1 58 .byte 58h +000859r 1 59 .byte 59h +00085Ar 1 5A .byte 5ah +00085Br 1 5B .byte 5bh +00085Cr 1 5C .byte 5ch +00085Dr 1 5D .byte 5dh +00085Er 1 5E .byte 5eh +00085Fr 1 5F .byte 5fh +000860r 1 60 .byte 60h +000861r 1 61 .byte 61h +000862r 1 62 .byte 62h +000863r 1 63 .byte 63h +000864r 1 64 .byte 64h +000865r 1 65 .byte 65h +000866r 1 66 .byte 66h +000867r 1 67 .byte 67h +000868r 1 68 .byte 68h +000869r 1 69 .byte 69h +00086Ar 1 6A .byte 6ah +00086Br 1 6B .byte 6bh +00086Cr 1 6C .byte 6ch +00086Dr 1 6D .byte 6dh +00086Er 1 6E .byte 6eh +00086Fr 1 6F .byte 6fh +000870r 1 70 .byte 70h +000871r 1 71 .byte 71h +000872r 1 72 .byte 72h +000873r 1 73 .byte 73h +000874r 1 74 .byte 74h +000875r 1 75 .byte 75h +000876r 1 76 .byte 76h +000877r 1 77 .byte 77h +000878r 1 78 .byte 78h +000879r 1 79 .byte 79h +00087Ar 1 7A .byte 7ah +00087Br 1 7B .byte 7bh +00087Cr 1 7C .byte 7ch +00087Dr 1 7D .byte 7dh +00087Er 1 7E .byte 7eh +00087Fr 1 7F .byte 7fh +000880r 1 80 .byte 80h +000881r 1 81 .byte 81h +000882r 1 82 .byte 82h +000883r 1 83 .byte 83h +000884r 1 84 .byte 84h +000885r 1 85 .byte 85h +000886r 1 86 .byte 86h +000887r 1 87 .byte 87h +000888r 1 88 .byte 88h +000889r 1 89 .byte 89h +00088Ar 1 8A .byte 8ah +00088Br 1 8B .byte 8bh +00088Cr 1 8C .byte 8ch +00088Dr 1 8D .byte 8dh +00088Er 1 8E .byte 8eh +00088Fr 1 8F .byte 8fh +000890r 1 90 .byte 90h +000891r 1 91 .byte 91h +000892r 1 92 .byte 92h +000893r 1 93 .byte 93h +000894r 1 94 .byte 94h +000895r 1 95 .byte 95h +000896r 1 96 .byte 96h +000897r 1 97 .byte 97h +000898r 1 98 .byte 98h +000899r 1 99 .byte 99h +00089Ar 1 9A .byte 9ah +00089Br 1 9B .byte 9bh +00089Cr 1 9C .byte 9ch +00089Dr 1 9D .byte 9dh +00089Er 1 9E .byte 9eh +00089Fr 1 9F .byte 9fh +0008A0r 1 A0 .byte 0a0h +0008A1r 1 A1 .byte 0a1h +0008A2r 1 A2 .byte 0a2h +0008A3r 1 A3 .byte 0a3h +0008A4r 1 A4 .byte 0a4h +0008A5r 1 A5 .byte 0a5h +0008A6r 1 A6 .byte 0a6h +0008A7r 1 A7 .byte 0a7h +0008A8r 1 A8 .byte 0a8h +0008A9r 1 A9 .byte 0a9h +0008AAr 1 AA .byte 0aah +0008ABr 1 AB .byte 0abh +0008ACr 1 AC .byte 0ach +0008ADr 1 AD .byte 0adh +0008AEr 1 AE .byte 0aeh +0008AFr 1 AF .byte 0afh +0008B0r 1 B0 .byte 0b0h +0008B1r 1 B1 .byte 0b1h +0008B2r 1 B2 .byte 0b2h +0008B3r 1 B3 .byte 0b3h +0008B4r 1 B4 .byte 0b4h +0008B5r 1 B5 .byte 0b5h +0008B6r 1 B6 .byte 0b6h +0008B7r 1 B7 .byte 0b7h +0008B8r 1 B8 .byte 0b8h +0008B9r 1 B9 .byte 0b9h +0008BAr 1 BA .byte 0bah +0008BBr 1 BB .byte 0bbh +0008BCr 1 BC .byte 0bch +0008BDr 1 BD .byte 0bdh +0008BEr 1 BE .byte 0beh +0008BFr 1 BF .byte 0bfh +0008C0r 1 C0 .byte 0c0h +0008C1r 1 C1 .byte 0c1h +0008C2r 1 C2 .byte 0c2h +0008C3r 1 C3 .byte 0c3h +0008C4r 1 C4 .byte 0c4h +0008C5r 1 C5 .byte 0c5h +0008C6r 1 C6 .byte 0c6h +0008C7r 1 C7 .byte 0c7h +0008C8r 1 C8 .byte 0c8h +0008C9r 1 C9 .byte 0c9h +0008CAr 1 CA .byte 0cah +0008CBr 1 CB .byte 0cbh +0008CCr 1 CC .byte 0cch +0008CDr 1 CD .byte 0cdh +0008CEr 1 CE .byte 0ceh +0008CFr 1 CF .byte 0cfh +0008D0r 1 D0 .byte 0d0h +0008D1r 1 D1 .byte 0d1h +0008D2r 1 D2 .byte 0d2h +0008D3r 1 D3 .byte 0d3h +0008D4r 1 D4 .byte 0d4h +0008D5r 1 D5 .byte 0d5h +0008D6r 1 D6 .byte 0d6h +0008D7r 1 D7 .byte 0d7h +0008D8r 1 D8 .byte 0d8h +0008D9r 1 D9 .byte 0d9h +0008DAr 1 DA .byte 0dah +0008DBr 1 DB .byte 0dbh +0008DCr 1 DC .byte 0dch +0008DDr 1 DD .byte 0ddh +0008DEr 1 DE .byte 0deh +0008DFr 1 DF .byte 0dfh +0008E0r 1 E0 .byte 0e0h +0008E1r 1 E1 .byte 0e1h +0008E2r 1 E2 .byte 0e2h +0008E3r 1 E3 .byte 0e3h +0008E4r 1 E4 .byte 0e4h +0008E5r 1 E5 .byte 0e5h +0008E6r 1 E6 .byte 0e6h +0008E7r 1 E7 .byte 0e7h +0008E8r 1 E8 .byte 0e8h +0008E9r 1 E9 .byte 0e9h +0008EAr 1 EA .byte 0eah +0008EBr 1 EB .byte 0ebh +0008ECr 1 EC .byte 0ech +0008EDr 1 ED .byte 0edh +0008EEr 1 EE .byte 0eeh +0008EFr 1 EF .byte 0efh +0008F0r 1 F0 .byte 0f0h +0008F1r 1 F1 .byte 0f1h +0008F2r 1 F2 .byte 0f2h +0008F3r 1 F3 .byte 0f3h +0008F4r 1 F4 .byte 0f4h +0008F5r 1 F5 .byte 0f5h +0008F6r 1 F6 .byte 0f6h +0008F7r 1 F7 .byte 0f7h +0008F8r 1 F8 .byte 0f8h +0008F9r 1 F9 .byte 0f9h +0008FAr 1 FA .byte 0fah +0008FBr 1 FB .byte 0fbh +0008FCr 1 FC .byte 0fch +0008FDr 1 FD .byte 0fdh +0008FEr 1 FE .byte 0feh +0008FFr 1 FF .byte 0ffh +000900r 1 +000900r 1 ; alternative 2-digit hex values, uppercase +000900r 1 00 .byte 00h +000901r 1 01 .byte 01h +000902r 1 02 .byte 02h +000903r 1 03 .byte 03h +000904r 1 04 .byte 04h +000905r 1 05 .byte 05h +000906r 1 06 .byte 06h +000907r 1 07 .byte 07h +000908r 1 08 .byte 08h +000909r 1 09 .byte 09h +00090Ar 1 0A .byte 0Ah +00090Br 1 0B .byte 0Bh +00090Cr 1 0C .byte 0Ch +00090Dr 1 0D .byte 0Dh +00090Er 1 0E .byte 0Eh +00090Fr 1 0F .byte 0Fh +000910r 1 10 .byte 10h +000911r 1 11 .byte 11h +000912r 1 12 .byte 12h +000913r 1 13 .byte 13h +000914r 1 14 .byte 14h +000915r 1 15 .byte 15h +000916r 1 16 .byte 16h +000917r 1 17 .byte 17h +000918r 1 18 .byte 18h +000919r 1 19 .byte 19h +00091Ar 1 1A .byte 1Ah +00091Br 1 1B .byte 1Bh +00091Cr 1 1C .byte 1Ch +00091Dr 1 1D .byte 1Dh +00091Er 1 1E .byte 1Eh +00091Fr 1 1F .byte 1Fh +000920r 1 20 .byte 20h +000921r 1 21 .byte 21h +000922r 1 22 .byte 22h +000923r 1 23 .byte 23h +000924r 1 24 .byte 24h +000925r 1 25 .byte 25h +000926r 1 26 .byte 26h +000927r 1 27 .byte 27h +000928r 1 28 .byte 28h +000929r 1 29 .byte 29h +00092Ar 1 2A .byte 2Ah +00092Br 1 2B .byte 2Bh +00092Cr 1 2C .byte 2Ch +00092Dr 1 2D .byte 2Dh +00092Er 1 2E .byte 2Eh +00092Fr 1 2F .byte 2Fh +000930r 1 30 .byte 30h +000931r 1 31 .byte 31h +000932r 1 32 .byte 32h +000933r 1 33 .byte 33h +000934r 1 34 .byte 34h +000935r 1 35 .byte 35h +000936r 1 36 .byte 36h +000937r 1 37 .byte 37h +000938r 1 38 .byte 38h +000939r 1 39 .byte 39h +00093Ar 1 3A .byte 3Ah +00093Br 1 3B .byte 3Bh +00093Cr 1 3C .byte 3Ch +00093Dr 1 3D .byte 3Dh +00093Er 1 3E .byte 3Eh +00093Fr 1 3F .byte 3Fh +000940r 1 40 .byte 40h +000941r 1 41 .byte 41h +000942r 1 42 .byte 42h +000943r 1 43 .byte 43h +000944r 1 44 .byte 44h +000945r 1 45 .byte 45h +000946r 1 46 .byte 46h +000947r 1 47 .byte 47h +000948r 1 48 .byte 48h +000949r 1 49 .byte 49h +00094Ar 1 4A .byte 4Ah +00094Br 1 4B .byte 4Bh +00094Cr 1 4C .byte 4Ch +00094Dr 1 4D .byte 4Dh +00094Er 1 4E .byte 4Eh +00094Fr 1 4F .byte 4Fh +000950r 1 50 .byte 50h +000951r 1 51 .byte 51h +000952r 1 52 .byte 52h +000953r 1 53 .byte 53h +000954r 1 54 .byte 54h +000955r 1 55 .byte 55h +000956r 1 56 .byte 56h +000957r 1 57 .byte 57h +000958r 1 58 .byte 58h +000959r 1 59 .byte 59h +00095Ar 1 5A .byte 5Ah +00095Br 1 5B .byte 5Bh +00095Cr 1 5C .byte 5Ch +00095Dr 1 5D .byte 5Dh +00095Er 1 5E .byte 5Eh +00095Fr 1 5F .byte 5Fh +000960r 1 60 .byte 60h +000961r 1 61 .byte 61h +000962r 1 62 .byte 62h +000963r 1 63 .byte 63h +000964r 1 64 .byte 64h +000965r 1 65 .byte 65h +000966r 1 66 .byte 66h +000967r 1 67 .byte 67h +000968r 1 68 .byte 68h +000969r 1 69 .byte 69h +00096Ar 1 6A .byte 6Ah +00096Br 1 6B .byte 6Bh +00096Cr 1 6C .byte 6Ch +00096Dr 1 6D .byte 6Dh +00096Er 1 6E .byte 6Eh +00096Fr 1 6F .byte 6Fh +000970r 1 70 .byte 70h +000971r 1 71 .byte 71h +000972r 1 72 .byte 72h +000973r 1 73 .byte 73h +000974r 1 74 .byte 74h +000975r 1 75 .byte 75h +000976r 1 76 .byte 76h +000977r 1 77 .byte 77h +000978r 1 78 .byte 78h +000979r 1 79 .byte 79h +00097Ar 1 7A .byte 7Ah +00097Br 1 7B .byte 7Bh +00097Cr 1 7C .byte 7Ch +00097Dr 1 7D .byte 7Dh +00097Er 1 7E .byte 7Eh +00097Fr 1 7F .byte 7Fh +000980r 1 80 .byte 80h +000981r 1 81 .byte 81h +000982r 1 82 .byte 82h +000983r 1 83 .byte 83h +000984r 1 84 .byte 84h +000985r 1 85 .byte 85h +000986r 1 86 .byte 86h +000987r 1 87 .byte 87h +000988r 1 88 .byte 88h +000989r 1 89 .byte 89h +00098Ar 1 8A .byte 8Ah +00098Br 1 8B .byte 8Bh +00098Cr 1 8C .byte 8Ch +00098Dr 1 8D .byte 8Dh +00098Er 1 8E .byte 8Eh +00098Fr 1 8F .byte 8Fh +000990r 1 90 .byte 90h +000991r 1 91 .byte 91h +000992r 1 92 .byte 92h +000993r 1 93 .byte 93h +000994r 1 94 .byte 94h +000995r 1 95 .byte 95h +000996r 1 96 .byte 96h +000997r 1 97 .byte 97h +000998r 1 98 .byte 98h +000999r 1 99 .byte 99h +00099Ar 1 9A .byte 9Ah +00099Br 1 9B .byte 9Bh +00099Cr 1 9C .byte 9Ch +00099Dr 1 9D .byte 9Dh +00099Er 1 9E .byte 9Eh +00099Fr 1 9F .byte 9Fh +0009A0r 1 A0 .byte 0A0h +0009A1r 1 A1 .byte 0A1h +0009A2r 1 A2 .byte 0A2h +0009A3r 1 A3 .byte 0A3h +0009A4r 1 A4 .byte 0A4h +0009A5r 1 A5 .byte 0A5h +0009A6r 1 A6 .byte 0A6h +0009A7r 1 A7 .byte 0A7h +0009A8r 1 A8 .byte 0A8h +0009A9r 1 A9 .byte 0A9h +0009AAr 1 AA .byte 0AAh +0009ABr 1 AB .byte 0ABh +0009ACr 1 AC .byte 0ACh +0009ADr 1 AD .byte 0ADh +0009AEr 1 AE .byte 0AEh +0009AFr 1 AF .byte 0AFh +0009B0r 1 B0 .byte 0B0h +0009B1r 1 B1 .byte 0B1h +0009B2r 1 B2 .byte 0B2h +0009B3r 1 B3 .byte 0B3h +0009B4r 1 B4 .byte 0B4h +0009B5r 1 B5 .byte 0B5h +0009B6r 1 B6 .byte 0B6h +0009B7r 1 B7 .byte 0B7h +0009B8r 1 B8 .byte 0B8h +0009B9r 1 B9 .byte 0B9h +0009BAr 1 BA .byte 0BAh +0009BBr 1 BB .byte 0BBh +0009BCr 1 BC .byte 0BCh +0009BDr 1 BD .byte 0BDh +0009BEr 1 BE .byte 0BEh +0009BFr 1 BF .byte 0BFh +0009C0r 1 C0 .byte 0C0h +0009C1r 1 C1 .byte 0C1h +0009C2r 1 C2 .byte 0C2h +0009C3r 1 C3 .byte 0C3h +0009C4r 1 C4 .byte 0C4h +0009C5r 1 C5 .byte 0C5h +0009C6r 1 C6 .byte 0C6h +0009C7r 1 C7 .byte 0C7h +0009C8r 1 C8 .byte 0C8h +0009C9r 1 C9 .byte 0C9h +0009CAr 1 CA .byte 0CAh +0009CBr 1 CB .byte 0CBh +0009CCr 1 CC .byte 0CCh +0009CDr 1 CD .byte 0CDh +0009CEr 1 CE .byte 0CEh +0009CFr 1 CF .byte 0CFh +0009D0r 1 D0 .byte 0D0h +0009D1r 1 D1 .byte 0D1h +0009D2r 1 D2 .byte 0D2h +0009D3r 1 D3 .byte 0D3h +0009D4r 1 D4 .byte 0D4h +0009D5r 1 D5 .byte 0D5h +0009D6r 1 D6 .byte 0D6h +0009D7r 1 D7 .byte 0D7h +0009D8r 1 D8 .byte 0D8h +0009D9r 1 D9 .byte 0D9h +0009DAr 1 DA .byte 0DAh +0009DBr 1 DB .byte 0DBh +0009DCr 1 DC .byte 0DCh +0009DDr 1 DD .byte 0DDh +0009DEr 1 DE .byte 0DEh +0009DFr 1 DF .byte 0DFh +0009E0r 1 E0 .byte 0E0h +0009E1r 1 E1 .byte 0E1h +0009E2r 1 E2 .byte 0E2h +0009E3r 1 E3 .byte 0E3h +0009E4r 1 E4 .byte 0E4h +0009E5r 1 E5 .byte 0E5h +0009E6r 1 E6 .byte 0E6h +0009E7r 1 E7 .byte 0E7h +0009E8r 1 E8 .byte 0E8h +0009E9r 1 E9 .byte 0E9h +0009EAr 1 EA .byte 0EAh +0009EBr 1 EB .byte 0EBh +0009ECr 1 EC .byte 0ECh +0009EDr 1 ED .byte 0EDh +0009EEr 1 EE .byte 0EEh +0009EFr 1 EF .byte 0EFh +0009F0r 1 F0 .byte 0F0h +0009F1r 1 F1 .byte 0F1h +0009F2r 1 F2 .byte 0F2h +0009F3r 1 F3 .byte 0F3h +0009F4r 1 F4 .byte 0F4h +0009F5r 1 F5 .byte 0F5h +0009F6r 1 F6 .byte 0F6h +0009F7r 1 F7 .byte 0F7h +0009F8r 1 F8 .byte 0F8h +0009F9r 1 F9 .byte 0F9h +0009FAr 1 FA .byte 0FAh +0009FBr 1 FB .byte 0FBh +0009FCr 1 FC .byte 0FCh +0009FDr 1 FD .byte 0FDh +0009FEr 1 FE .byte 0FEh +0009FFr 1 FF .byte 0FFh +000A00r 1 +000A00r 1 ; alternative hex values, always leading zero +000A00r 1 00 .byte 00h +000A01r 1 01 .byte 01h +000A02r 1 02 .byte 02h +000A03r 1 03 .byte 03h +000A04r 1 04 .byte 04h +000A05r 1 05 .byte 05h +000A06r 1 06 .byte 06h +000A07r 1 07 .byte 07h +000A08r 1 08 .byte 08h +000A09r 1 09 .byte 09h +000A0Ar 1 0A .byte 0ah +000A0Br 1 0B .byte 0bh +000A0Cr 1 0C .byte 0ch +000A0Dr 1 0D .byte 0dh +000A0Er 1 0E .byte 0eh +000A0Fr 1 0F .byte 0fh +000A10r 1 10 .byte 010h +000A11r 1 11 .byte 011h +000A12r 1 12 .byte 012h +000A13r 1 13 .byte 013h +000A14r 1 14 .byte 014h +000A15r 1 15 .byte 015h +000A16r 1 16 .byte 016h +000A17r 1 17 .byte 017h +000A18r 1 18 .byte 018h +000A19r 1 19 .byte 019h +000A1Ar 1 1A .byte 01ah +000A1Br 1 1B .byte 01bh +000A1Cr 1 1C .byte 01ch +000A1Dr 1 1D .byte 01dh +000A1Er 1 1E .byte 01eh +000A1Fr 1 1F .byte 01fh +000A20r 1 20 .byte 020h +000A21r 1 21 .byte 021h +000A22r 1 22 .byte 022h +000A23r 1 23 .byte 023h +000A24r 1 24 .byte 024h +000A25r 1 25 .byte 025h +000A26r 1 26 .byte 026h +000A27r 1 27 .byte 027h +000A28r 1 28 .byte 028h +000A29r 1 29 .byte 029h +000A2Ar 1 2A .byte 02ah +000A2Br 1 2B .byte 02bh +000A2Cr 1 2C .byte 02ch +000A2Dr 1 2D .byte 02dh +000A2Er 1 2E .byte 02eh +000A2Fr 1 2F .byte 02fh +000A30r 1 30 .byte 030h +000A31r 1 31 .byte 031h +000A32r 1 32 .byte 032h +000A33r 1 33 .byte 033h +000A34r 1 34 .byte 034h +000A35r 1 35 .byte 035h +000A36r 1 36 .byte 036h +000A37r 1 37 .byte 037h +000A38r 1 38 .byte 038h +000A39r 1 39 .byte 039h +000A3Ar 1 3A .byte 03ah +000A3Br 1 3B .byte 03bh +000A3Cr 1 3C .byte 03ch +000A3Dr 1 3D .byte 03dh +000A3Er 1 3E .byte 03eh +000A3Fr 1 3F .byte 03fh +000A40r 1 40 .byte 040h +000A41r 1 41 .byte 041h +000A42r 1 42 .byte 042h +000A43r 1 43 .byte 043h +000A44r 1 44 .byte 044h +000A45r 1 45 .byte 045h +000A46r 1 46 .byte 046h +000A47r 1 47 .byte 047h +000A48r 1 48 .byte 048h +000A49r 1 49 .byte 049h +000A4Ar 1 4A .byte 04ah +000A4Br 1 4B .byte 04bh +000A4Cr 1 4C .byte 04ch +000A4Dr 1 4D .byte 04dh +000A4Er 1 4E .byte 04eh +000A4Fr 1 4F .byte 04fh +000A50r 1 50 .byte 050h +000A51r 1 51 .byte 051h +000A52r 1 52 .byte 052h +000A53r 1 53 .byte 053h +000A54r 1 54 .byte 054h +000A55r 1 55 .byte 055h +000A56r 1 56 .byte 056h +000A57r 1 57 .byte 057h +000A58r 1 58 .byte 058h +000A59r 1 59 .byte 059h +000A5Ar 1 5A .byte 05ah +000A5Br 1 5B .byte 05bh +000A5Cr 1 5C .byte 05ch +000A5Dr 1 5D .byte 05dh +000A5Er 1 5E .byte 05eh +000A5Fr 1 5F .byte 05fh +000A60r 1 60 .byte 060h +000A61r 1 61 .byte 061h +000A62r 1 62 .byte 062h +000A63r 1 63 .byte 063h +000A64r 1 64 .byte 064h +000A65r 1 65 .byte 065h +000A66r 1 66 .byte 066h +000A67r 1 67 .byte 067h +000A68r 1 68 .byte 068h +000A69r 1 69 .byte 069h +000A6Ar 1 6A .byte 06ah +000A6Br 1 6B .byte 06bh +000A6Cr 1 6C .byte 06ch +000A6Dr 1 6D .byte 06dh +000A6Er 1 6E .byte 06eh +000A6Fr 1 6F .byte 06fh +000A70r 1 70 .byte 070h +000A71r 1 71 .byte 071h +000A72r 1 72 .byte 072h +000A73r 1 73 .byte 073h +000A74r 1 74 .byte 074h +000A75r 1 75 .byte 075h +000A76r 1 76 .byte 076h +000A77r 1 77 .byte 077h +000A78r 1 78 .byte 078h +000A79r 1 79 .byte 079h +000A7Ar 1 7A .byte 07ah +000A7Br 1 7B .byte 07bh +000A7Cr 1 7C .byte 07ch +000A7Dr 1 7D .byte 07dh +000A7Er 1 7E .byte 07eh +000A7Fr 1 7F .byte 07fh +000A80r 1 80 .byte 080h +000A81r 1 81 .byte 081h +000A82r 1 82 .byte 082h +000A83r 1 83 .byte 083h +000A84r 1 84 .byte 084h +000A85r 1 85 .byte 085h +000A86r 1 86 .byte 086h +000A87r 1 87 .byte 087h +000A88r 1 88 .byte 088h +000A89r 1 89 .byte 089h +000A8Ar 1 8A .byte 08ah +000A8Br 1 8B .byte 08bh +000A8Cr 1 8C .byte 08ch +000A8Dr 1 8D .byte 08dh +000A8Er 1 8E .byte 08eh +000A8Fr 1 8F .byte 08fh +000A90r 1 90 .byte 090h +000A91r 1 91 .byte 091h +000A92r 1 92 .byte 092h +000A93r 1 93 .byte 093h +000A94r 1 94 .byte 094h +000A95r 1 95 .byte 095h +000A96r 1 96 .byte 096h +000A97r 1 97 .byte 097h +000A98r 1 98 .byte 098h +000A99r 1 99 .byte 099h +000A9Ar 1 9A .byte 09ah +000A9Br 1 9B .byte 09bh +000A9Cr 1 9C .byte 09ch +000A9Dr 1 9D .byte 09dh +000A9Er 1 9E .byte 09eh +000A9Fr 1 9F .byte 09fh +000AA0r 1 A0 .byte 0a0h +000AA1r 1 A1 .byte 0a1h +000AA2r 1 A2 .byte 0a2h +000AA3r 1 A3 .byte 0a3h +000AA4r 1 A4 .byte 0a4h +000AA5r 1 A5 .byte 0a5h +000AA6r 1 A6 .byte 0a6h +000AA7r 1 A7 .byte 0a7h +000AA8r 1 A8 .byte 0a8h +000AA9r 1 A9 .byte 0a9h +000AAAr 1 AA .byte 0aah +000AABr 1 AB .byte 0abh +000AACr 1 AC .byte 0ach +000AADr 1 AD .byte 0adh +000AAEr 1 AE .byte 0aeh +000AAFr 1 AF .byte 0afh +000AB0r 1 B0 .byte 0b0h +000AB1r 1 B1 .byte 0b1h +000AB2r 1 B2 .byte 0b2h +000AB3r 1 B3 .byte 0b3h +000AB4r 1 B4 .byte 0b4h +000AB5r 1 B5 .byte 0b5h +000AB6r 1 B6 .byte 0b6h +000AB7r 1 B7 .byte 0b7h +000AB8r 1 B8 .byte 0b8h +000AB9r 1 B9 .byte 0b9h +000ABAr 1 BA .byte 0bah +000ABBr 1 BB .byte 0bbh +000ABCr 1 BC .byte 0bch +000ABDr 1 BD .byte 0bdh +000ABEr 1 BE .byte 0beh +000ABFr 1 BF .byte 0bfh +000AC0r 1 C0 .byte 0c0h +000AC1r 1 C1 .byte 0c1h +000AC2r 1 C2 .byte 0c2h +000AC3r 1 C3 .byte 0c3h +000AC4r 1 C4 .byte 0c4h +000AC5r 1 C5 .byte 0c5h +000AC6r 1 C6 .byte 0c6h +000AC7r 1 C7 .byte 0c7h +000AC8r 1 C8 .byte 0c8h +000AC9r 1 C9 .byte 0c9h +000ACAr 1 CA .byte 0cah +000ACBr 1 CB .byte 0cbh +000ACCr 1 CC .byte 0cch +000ACDr 1 CD .byte 0cdh +000ACEr 1 CE .byte 0ceh +000ACFr 1 CF .byte 0cfh +000AD0r 1 D0 .byte 0d0h +000AD1r 1 D1 .byte 0d1h +000AD2r 1 D2 .byte 0d2h +000AD3r 1 D3 .byte 0d3h +000AD4r 1 D4 .byte 0d4h +000AD5r 1 D5 .byte 0d5h +000AD6r 1 D6 .byte 0d6h +000AD7r 1 D7 .byte 0d7h +000AD8r 1 D8 .byte 0d8h +000AD9r 1 D9 .byte 0d9h +000ADAr 1 DA .byte 0dah +000ADBr 1 DB .byte 0dbh +000ADCr 1 DC .byte 0dch +000ADDr 1 DD .byte 0ddh +000ADEr 1 DE .byte 0deh +000ADFr 1 DF .byte 0dfh +000AE0r 1 E0 .byte 0e0h +000AE1r 1 E1 .byte 0e1h +000AE2r 1 E2 .byte 0e2h +000AE3r 1 E3 .byte 0e3h +000AE4r 1 E4 .byte 0e4h +000AE5r 1 E5 .byte 0e5h +000AE6r 1 E6 .byte 0e6h +000AE7r 1 E7 .byte 0e7h +000AE8r 1 E8 .byte 0e8h +000AE9r 1 E9 .byte 0e9h +000AEAr 1 EA .byte 0eah +000AEBr 1 EB .byte 0ebh +000AECr 1 EC .byte 0ech +000AEDr 1 ED .byte 0edh +000AEEr 1 EE .byte 0eeh +000AEFr 1 EF .byte 0efh +000AF0r 1 F0 .byte 0f0h +000AF1r 1 F1 .byte 0f1h +000AF2r 1 F2 .byte 0f2h +000AF3r 1 F3 .byte 0f3h +000AF4r 1 F4 .byte 0f4h +000AF5r 1 F5 .byte 0f5h +000AF6r 1 F6 .byte 0f6h +000AF7r 1 F7 .byte 0f7h +000AF8r 1 F8 .byte 0f8h +000AF9r 1 F9 .byte 0f9h +000AFAr 1 FA .byte 0fah +000AFBr 1 FB .byte 0fbh +000AFCr 1 FC .byte 0fch +000AFDr 1 FD .byte 0fdh +000AFEr 1 FE .byte 0feh +000AFFr 1 FF .byte 0ffh +000B00r 1 +000B00r 1 ; binary values, variable length +000B00r 1 00 .byte %0 +000B01r 1 01 .byte %1 +000B02r 1 02 .byte %10 +000B03r 1 03 .byte %11 +000B04r 1 04 .byte %100 +000B05r 1 05 .byte %101 +000B06r 1 06 .byte %110 +000B07r 1 07 .byte %111 +000B08r 1 08 .byte %1000 +000B09r 1 09 .byte %1001 +000B0Ar 1 0A .byte %1010 +000B0Br 1 0B .byte %1011 +000B0Cr 1 0C .byte %1100 +000B0Dr 1 0D .byte %1101 +000B0Er 1 0E .byte %1110 +000B0Fr 1 0F .byte %1111 +000B10r 1 10 .byte %10000 +000B11r 1 11 .byte %10001 +000B12r 1 12 .byte %10010 +000B13r 1 13 .byte %10011 +000B14r 1 14 .byte %10100 +000B15r 1 15 .byte %10101 +000B16r 1 16 .byte %10110 +000B17r 1 17 .byte %10111 +000B18r 1 18 .byte %11000 +000B19r 1 19 .byte %11001 +000B1Ar 1 1A .byte %11010 +000B1Br 1 1B .byte %11011 +000B1Cr 1 1C .byte %11100 +000B1Dr 1 1D .byte %11101 +000B1Er 1 1E .byte %11110 +000B1Fr 1 1F .byte %11111 +000B20r 1 20 .byte %100000 +000B21r 1 21 .byte %100001 +000B22r 1 22 .byte %100010 +000B23r 1 23 .byte %100011 +000B24r 1 24 .byte %100100 +000B25r 1 25 .byte %100101 +000B26r 1 26 .byte %100110 +000B27r 1 27 .byte %100111 +000B28r 1 28 .byte %101000 +000B29r 1 29 .byte %101001 +000B2Ar 1 2A .byte %101010 +000B2Br 1 2B .byte %101011 +000B2Cr 1 2C .byte %101100 +000B2Dr 1 2D .byte %101101 +000B2Er 1 2E .byte %101110 +000B2Fr 1 2F .byte %101111 +000B30r 1 30 .byte %110000 +000B31r 1 31 .byte %110001 +000B32r 1 32 .byte %110010 +000B33r 1 33 .byte %110011 +000B34r 1 34 .byte %110100 +000B35r 1 35 .byte %110101 +000B36r 1 36 .byte %110110 +000B37r 1 37 .byte %110111 +000B38r 1 38 .byte %111000 +000B39r 1 39 .byte %111001 +000B3Ar 1 3A .byte %111010 +000B3Br 1 3B .byte %111011 +000B3Cr 1 3C .byte %111100 +000B3Dr 1 3D .byte %111101 +000B3Er 1 3E .byte %111110 +000B3Fr 1 3F .byte %111111 +000B40r 1 40 .byte %1000000 +000B41r 1 41 .byte %1000001 +000B42r 1 42 .byte %1000010 +000B43r 1 43 .byte %1000011 +000B44r 1 44 .byte %1000100 +000B45r 1 45 .byte %1000101 +000B46r 1 46 .byte %1000110 +000B47r 1 47 .byte %1000111 +000B48r 1 48 .byte %1001000 +000B49r 1 49 .byte %1001001 +000B4Ar 1 4A .byte %1001010 +000B4Br 1 4B .byte %1001011 +000B4Cr 1 4C .byte %1001100 +000B4Dr 1 4D .byte %1001101 +000B4Er 1 4E .byte %1001110 +000B4Fr 1 4F .byte %1001111 +000B50r 1 50 .byte %1010000 +000B51r 1 51 .byte %1010001 +000B52r 1 52 .byte %1010010 +000B53r 1 53 .byte %1010011 +000B54r 1 54 .byte %1010100 +000B55r 1 55 .byte %1010101 +000B56r 1 56 .byte %1010110 +000B57r 1 57 .byte %1010111 +000B58r 1 58 .byte %1011000 +000B59r 1 59 .byte %1011001 +000B5Ar 1 5A .byte %1011010 +000B5Br 1 5B .byte %1011011 +000B5Cr 1 5C .byte %1011100 +000B5Dr 1 5D .byte %1011101 +000B5Er 1 5E .byte %1011110 +000B5Fr 1 5F .byte %1011111 +000B60r 1 60 .byte %1100000 +000B61r 1 61 .byte %1100001 +000B62r 1 62 .byte %1100010 +000B63r 1 63 .byte %1100011 +000B64r 1 64 .byte %1100100 +000B65r 1 65 .byte %1100101 +000B66r 1 66 .byte %1100110 +000B67r 1 67 .byte %1100111 +000B68r 1 68 .byte %1101000 +000B69r 1 69 .byte %1101001 +000B6Ar 1 6A .byte %1101010 +000B6Br 1 6B .byte %1101011 +000B6Cr 1 6C .byte %1101100 +000B6Dr 1 6D .byte %1101101 +000B6Er 1 6E .byte %1101110 +000B6Fr 1 6F .byte %1101111 +000B70r 1 70 .byte %1110000 +000B71r 1 71 .byte %1110001 +000B72r 1 72 .byte %1110010 +000B73r 1 73 .byte %1110011 +000B74r 1 74 .byte %1110100 +000B75r 1 75 .byte %1110101 +000B76r 1 76 .byte %1110110 +000B77r 1 77 .byte %1110111 +000B78r 1 78 .byte %1111000 +000B79r 1 79 .byte %1111001 +000B7Ar 1 7A .byte %1111010 +000B7Br 1 7B .byte %1111011 +000B7Cr 1 7C .byte %1111100 +000B7Dr 1 7D .byte %1111101 +000B7Er 1 7E .byte %1111110 +000B7Fr 1 7F .byte %1111111 +000B80r 1 80 .byte %10000000 +000B81r 1 81 .byte %10000001 +000B82r 1 82 .byte %10000010 +000B83r 1 83 .byte %10000011 +000B84r 1 84 .byte %10000100 +000B85r 1 85 .byte %10000101 +000B86r 1 86 .byte %10000110 +000B87r 1 87 .byte %10000111 +000B88r 1 88 .byte %10001000 +000B89r 1 89 .byte %10001001 +000B8Ar 1 8A .byte %10001010 +000B8Br 1 8B .byte %10001011 +000B8Cr 1 8C .byte %10001100 +000B8Dr 1 8D .byte %10001101 +000B8Er 1 8E .byte %10001110 +000B8Fr 1 8F .byte %10001111 +000B90r 1 90 .byte %10010000 +000B91r 1 91 .byte %10010001 +000B92r 1 92 .byte %10010010 +000B93r 1 93 .byte %10010011 +000B94r 1 94 .byte %10010100 +000B95r 1 95 .byte %10010101 +000B96r 1 96 .byte %10010110 +000B97r 1 97 .byte %10010111 +000B98r 1 98 .byte %10011000 +000B99r 1 99 .byte %10011001 +000B9Ar 1 9A .byte %10011010 +000B9Br 1 9B .byte %10011011 +000B9Cr 1 9C .byte %10011100 +000B9Dr 1 9D .byte %10011101 +000B9Er 1 9E .byte %10011110 +000B9Fr 1 9F .byte %10011111 +000BA0r 1 A0 .byte %10100000 +000BA1r 1 A1 .byte %10100001 +000BA2r 1 A2 .byte %10100010 +000BA3r 1 A3 .byte %10100011 +000BA4r 1 A4 .byte %10100100 +000BA5r 1 A5 .byte %10100101 +000BA6r 1 A6 .byte %10100110 +000BA7r 1 A7 .byte %10100111 +000BA8r 1 A8 .byte %10101000 +000BA9r 1 A9 .byte %10101001 +000BAAr 1 AA .byte %10101010 +000BABr 1 AB .byte %10101011 +000BACr 1 AC .byte %10101100 +000BADr 1 AD .byte %10101101 +000BAEr 1 AE .byte %10101110 +000BAFr 1 AF .byte %10101111 +000BB0r 1 B0 .byte %10110000 +000BB1r 1 B1 .byte %10110001 +000BB2r 1 B2 .byte %10110010 +000BB3r 1 B3 .byte %10110011 +000BB4r 1 B4 .byte %10110100 +000BB5r 1 B5 .byte %10110101 +000BB6r 1 B6 .byte %10110110 +000BB7r 1 B7 .byte %10110111 +000BB8r 1 B8 .byte %10111000 +000BB9r 1 B9 .byte %10111001 +000BBAr 1 BA .byte %10111010 +000BBBr 1 BB .byte %10111011 +000BBCr 1 BC .byte %10111100 +000BBDr 1 BD .byte %10111101 +000BBEr 1 BE .byte %10111110 +000BBFr 1 BF .byte %10111111 +000BC0r 1 C0 .byte %11000000 +000BC1r 1 C1 .byte %11000001 +000BC2r 1 C2 .byte %11000010 +000BC3r 1 C3 .byte %11000011 +000BC4r 1 C4 .byte %11000100 +000BC5r 1 C5 .byte %11000101 +000BC6r 1 C6 .byte %11000110 +000BC7r 1 C7 .byte %11000111 +000BC8r 1 C8 .byte %11001000 +000BC9r 1 C9 .byte %11001001 +000BCAr 1 CA .byte %11001010 +000BCBr 1 CB .byte %11001011 +000BCCr 1 CC .byte %11001100 +000BCDr 1 CD .byte %11001101 +000BCEr 1 CE .byte %11001110 +000BCFr 1 CF .byte %11001111 +000BD0r 1 D0 .byte %11010000 +000BD1r 1 D1 .byte %11010001 +000BD2r 1 D2 .byte %11010010 +000BD3r 1 D3 .byte %11010011 +000BD4r 1 D4 .byte %11010100 +000BD5r 1 D5 .byte %11010101 +000BD6r 1 D6 .byte %11010110 +000BD7r 1 D7 .byte %11010111 +000BD8r 1 D8 .byte %11011000 +000BD9r 1 D9 .byte %11011001 +000BDAr 1 DA .byte %11011010 +000BDBr 1 DB .byte %11011011 +000BDCr 1 DC .byte %11011100 +000BDDr 1 DD .byte %11011101 +000BDEr 1 DE .byte %11011110 +000BDFr 1 DF .byte %11011111 +000BE0r 1 E0 .byte %11100000 +000BE1r 1 E1 .byte %11100001 +000BE2r 1 E2 .byte %11100010 +000BE3r 1 E3 .byte %11100011 +000BE4r 1 E4 .byte %11100100 +000BE5r 1 E5 .byte %11100101 +000BE6r 1 E6 .byte %11100110 +000BE7r 1 E7 .byte %11100111 +000BE8r 1 E8 .byte %11101000 +000BE9r 1 E9 .byte %11101001 +000BEAr 1 EA .byte %11101010 +000BEBr 1 EB .byte %11101011 +000BECr 1 EC .byte %11101100 +000BEDr 1 ED .byte %11101101 +000BEEr 1 EE .byte %11101110 +000BEFr 1 EF .byte %11101111 +000BF0r 1 F0 .byte %11110000 +000BF1r 1 F1 .byte %11110001 +000BF2r 1 F2 .byte %11110010 +000BF3r 1 F3 .byte %11110011 +000BF4r 1 F4 .byte %11110100 +000BF5r 1 F5 .byte %11110101 +000BF6r 1 F6 .byte %11110110 +000BF7r 1 F7 .byte %11110111 +000BF8r 1 F8 .byte %11111000 +000BF9r 1 F9 .byte %11111001 +000BFAr 1 FA .byte %11111010 +000BFBr 1 FB .byte %11111011 +000BFCr 1 FC .byte %11111100 +000BFDr 1 FD .byte %11111101 +000BFEr 1 FE .byte %11111110 +000BFFr 1 FF .byte %11111111 +000C00r 1 +000C00r 1 ; binary values, full length +000C00r 1 00 .byte %00000000 +000C01r 1 01 .byte %00000001 +000C02r 1 02 .byte %00000010 +000C03r 1 03 .byte %00000011 +000C04r 1 04 .byte %00000100 +000C05r 1 05 .byte %00000101 +000C06r 1 06 .byte %00000110 +000C07r 1 07 .byte %00000111 +000C08r 1 08 .byte %00001000 +000C09r 1 09 .byte %00001001 +000C0Ar 1 0A .byte %00001010 +000C0Br 1 0B .byte %00001011 +000C0Cr 1 0C .byte %00001100 +000C0Dr 1 0D .byte %00001101 +000C0Er 1 0E .byte %00001110 +000C0Fr 1 0F .byte %00001111 +000C10r 1 10 .byte %00010000 +000C11r 1 11 .byte %00010001 +000C12r 1 12 .byte %00010010 +000C13r 1 13 .byte %00010011 +000C14r 1 14 .byte %00010100 +000C15r 1 15 .byte %00010101 +000C16r 1 16 .byte %00010110 +000C17r 1 17 .byte %00010111 +000C18r 1 18 .byte %00011000 +000C19r 1 19 .byte %00011001 +000C1Ar 1 1A .byte %00011010 +000C1Br 1 1B .byte %00011011 +000C1Cr 1 1C .byte %00011100 +000C1Dr 1 1D .byte %00011101 +000C1Er 1 1E .byte %00011110 +000C1Fr 1 1F .byte %00011111 +000C20r 1 20 .byte %00100000 +000C21r 1 21 .byte %00100001 +000C22r 1 22 .byte %00100010 +000C23r 1 23 .byte %00100011 +000C24r 1 24 .byte %00100100 +000C25r 1 25 .byte %00100101 +000C26r 1 26 .byte %00100110 +000C27r 1 27 .byte %00100111 +000C28r 1 28 .byte %00101000 +000C29r 1 29 .byte %00101001 +000C2Ar 1 2A .byte %00101010 +000C2Br 1 2B .byte %00101011 +000C2Cr 1 2C .byte %00101100 +000C2Dr 1 2D .byte %00101101 +000C2Er 1 2E .byte %00101110 +000C2Fr 1 2F .byte %00101111 +000C30r 1 30 .byte %00110000 +000C31r 1 31 .byte %00110001 +000C32r 1 32 .byte %00110010 +000C33r 1 33 .byte %00110011 +000C34r 1 34 .byte %00110100 +000C35r 1 35 .byte %00110101 +000C36r 1 36 .byte %00110110 +000C37r 1 37 .byte %00110111 +000C38r 1 38 .byte %00111000 +000C39r 1 39 .byte %00111001 +000C3Ar 1 3A .byte %00111010 +000C3Br 1 3B .byte %00111011 +000C3Cr 1 3C .byte %00111100 +000C3Dr 1 3D .byte %00111101 +000C3Er 1 3E .byte %00111110 +000C3Fr 1 3F .byte %00111111 +000C40r 1 40 .byte %01000000 +000C41r 1 41 .byte %01000001 +000C42r 1 42 .byte %01000010 +000C43r 1 43 .byte %01000011 +000C44r 1 44 .byte %01000100 +000C45r 1 45 .byte %01000101 +000C46r 1 46 .byte %01000110 +000C47r 1 47 .byte %01000111 +000C48r 1 48 .byte %01001000 +000C49r 1 49 .byte %01001001 +000C4Ar 1 4A .byte %01001010 +000C4Br 1 4B .byte %01001011 +000C4Cr 1 4C .byte %01001100 +000C4Dr 1 4D .byte %01001101 +000C4Er 1 4E .byte %01001110 +000C4Fr 1 4F .byte %01001111 +000C50r 1 50 .byte %01010000 +000C51r 1 51 .byte %01010001 +000C52r 1 52 .byte %01010010 +000C53r 1 53 .byte %01010011 +000C54r 1 54 .byte %01010100 +000C55r 1 55 .byte %01010101 +000C56r 1 56 .byte %01010110 +000C57r 1 57 .byte %01010111 +000C58r 1 58 .byte %01011000 +000C59r 1 59 .byte %01011001 +000C5Ar 1 5A .byte %01011010 +000C5Br 1 5B .byte %01011011 +000C5Cr 1 5C .byte %01011100 +000C5Dr 1 5D .byte %01011101 +000C5Er 1 5E .byte %01011110 +000C5Fr 1 5F .byte %01011111 +000C60r 1 60 .byte %01100000 +000C61r 1 61 .byte %01100001 +000C62r 1 62 .byte %01100010 +000C63r 1 63 .byte %01100011 +000C64r 1 64 .byte %01100100 +000C65r 1 65 .byte %01100101 +000C66r 1 66 .byte %01100110 +000C67r 1 67 .byte %01100111 +000C68r 1 68 .byte %01101000 +000C69r 1 69 .byte %01101001 +000C6Ar 1 6A .byte %01101010 +000C6Br 1 6B .byte %01101011 +000C6Cr 1 6C .byte %01101100 +000C6Dr 1 6D .byte %01101101 +000C6Er 1 6E .byte %01101110 +000C6Fr 1 6F .byte %01101111 +000C70r 1 70 .byte %01110000 +000C71r 1 71 .byte %01110001 +000C72r 1 72 .byte %01110010 +000C73r 1 73 .byte %01110011 +000C74r 1 74 .byte %01110100 +000C75r 1 75 .byte %01110101 +000C76r 1 76 .byte %01110110 +000C77r 1 77 .byte %01110111 +000C78r 1 78 .byte %01111000 +000C79r 1 79 .byte %01111001 +000C7Ar 1 7A .byte %01111010 +000C7Br 1 7B .byte %01111011 +000C7Cr 1 7C .byte %01111100 +000C7Dr 1 7D .byte %01111101 +000C7Er 1 7E .byte %01111110 +000C7Fr 1 7F .byte %01111111 +000C80r 1 80 .byte %10000000 +000C81r 1 81 .byte %10000001 +000C82r 1 82 .byte %10000010 +000C83r 1 83 .byte %10000011 +000C84r 1 84 .byte %10000100 +000C85r 1 85 .byte %10000101 +000C86r 1 86 .byte %10000110 +000C87r 1 87 .byte %10000111 +000C88r 1 88 .byte %10001000 +000C89r 1 89 .byte %10001001 +000C8Ar 1 8A .byte %10001010 +000C8Br 1 8B .byte %10001011 +000C8Cr 1 8C .byte %10001100 +000C8Dr 1 8D .byte %10001101 +000C8Er 1 8E .byte %10001110 +000C8Fr 1 8F .byte %10001111 +000C90r 1 90 .byte %10010000 +000C91r 1 91 .byte %10010001 +000C92r 1 92 .byte %10010010 +000C93r 1 93 .byte %10010011 +000C94r 1 94 .byte %10010100 +000C95r 1 95 .byte %10010101 +000C96r 1 96 .byte %10010110 +000C97r 1 97 .byte %10010111 +000C98r 1 98 .byte %10011000 +000C99r 1 99 .byte %10011001 +000C9Ar 1 9A .byte %10011010 +000C9Br 1 9B .byte %10011011 +000C9Cr 1 9C .byte %10011100 +000C9Dr 1 9D .byte %10011101 +000C9Er 1 9E .byte %10011110 +000C9Fr 1 9F .byte %10011111 +000CA0r 1 A0 .byte %10100000 +000CA1r 1 A1 .byte %10100001 +000CA2r 1 A2 .byte %10100010 +000CA3r 1 A3 .byte %10100011 +000CA4r 1 A4 .byte %10100100 +000CA5r 1 A5 .byte %10100101 +000CA6r 1 A6 .byte %10100110 +000CA7r 1 A7 .byte %10100111 +000CA8r 1 A8 .byte %10101000 +000CA9r 1 A9 .byte %10101001 +000CAAr 1 AA .byte %10101010 +000CABr 1 AB .byte %10101011 +000CACr 1 AC .byte %10101100 +000CADr 1 AD .byte %10101101 +000CAEr 1 AE .byte %10101110 +000CAFr 1 AF .byte %10101111 +000CB0r 1 B0 .byte %10110000 +000CB1r 1 B1 .byte %10110001 +000CB2r 1 B2 .byte %10110010 +000CB3r 1 B3 .byte %10110011 +000CB4r 1 B4 .byte %10110100 +000CB5r 1 B5 .byte %10110101 +000CB6r 1 B6 .byte %10110110 +000CB7r 1 B7 .byte %10110111 +000CB8r 1 B8 .byte %10111000 +000CB9r 1 B9 .byte %10111001 +000CBAr 1 BA .byte %10111010 +000CBBr 1 BB .byte %10111011 +000CBCr 1 BC .byte %10111100 +000CBDr 1 BD .byte %10111101 +000CBEr 1 BE .byte %10111110 +000CBFr 1 BF .byte %10111111 +000CC0r 1 C0 .byte %11000000 +000CC1r 1 C1 .byte %11000001 +000CC2r 1 C2 .byte %11000010 +000CC3r 1 C3 .byte %11000011 +000CC4r 1 C4 .byte %11000100 +000CC5r 1 C5 .byte %11000101 +000CC6r 1 C6 .byte %11000110 +000CC7r 1 C7 .byte %11000111 +000CC8r 1 C8 .byte %11001000 +000CC9r 1 C9 .byte %11001001 +000CCAr 1 CA .byte %11001010 +000CCBr 1 CB .byte %11001011 +000CCCr 1 CC .byte %11001100 +000CCDr 1 CD .byte %11001101 +000CCEr 1 CE .byte %11001110 +000CCFr 1 CF .byte %11001111 +000CD0r 1 D0 .byte %11010000 +000CD1r 1 D1 .byte %11010001 +000CD2r 1 D2 .byte %11010010 +000CD3r 1 D3 .byte %11010011 +000CD4r 1 D4 .byte %11010100 +000CD5r 1 D5 .byte %11010101 +000CD6r 1 D6 .byte %11010110 +000CD7r 1 D7 .byte %11010111 +000CD8r 1 D8 .byte %11011000 +000CD9r 1 D9 .byte %11011001 +000CDAr 1 DA .byte %11011010 +000CDBr 1 DB .byte %11011011 +000CDCr 1 DC .byte %11011100 +000CDDr 1 DD .byte %11011101 +000CDEr 1 DE .byte %11011110 +000CDFr 1 DF .byte %11011111 +000CE0r 1 E0 .byte %11100000 +000CE1r 1 E1 .byte %11100001 +000CE2r 1 E2 .byte %11100010 +000CE3r 1 E3 .byte %11100011 +000CE4r 1 E4 .byte %11100100 +000CE5r 1 E5 .byte %11100101 +000CE6r 1 E6 .byte %11100110 +000CE7r 1 E7 .byte %11100111 +000CE8r 1 E8 .byte %11101000 +000CE9r 1 E9 .byte %11101001 +000CEAr 1 EA .byte %11101010 +000CEBr 1 EB .byte %11101011 +000CECr 1 EC .byte %11101100 +000CEDr 1 ED .byte %11101101 +000CEEr 1 EE .byte %11101110 +000CEFr 1 EF .byte %11101111 +000CF0r 1 F0 .byte %11110000 +000CF1r 1 F1 .byte %11110001 +000CF2r 1 F2 .byte %11110010 +000CF3r 1 F3 .byte %11110011 +000CF4r 1 F4 .byte %11110100 +000CF5r 1 F5 .byte %11110101 +000CF6r 1 F6 .byte %11110110 +000CF7r 1 F7 .byte %11110111 +000CF8r 1 F8 .byte %11111000 +000CF9r 1 F9 .byte %11111001 +000CFAr 1 FA .byte %11111010 +000CFBr 1 FB .byte %11111011 +000CFCr 1 FC .byte %11111100 +000CFDr 1 FD .byte %11111101 +000CFEr 1 FE .byte %11111110 +000CFFr 1 FF .byte %11111111 +000D00r 1 +000D00r 1 ; some character values +000D00r 1 20 .byte ' ' +000D01r 1 21 .byte '!' +000D02r 1 22 .byte '"' +000D03r 1 23 .byte '#' +000D04r 1 24 .byte '$' +000D05r 1 25 .byte '%' +000D06r 1 26 .byte '&' +000D07r 1 27 .byte ''' +000D08r 1 28 .byte '(' +000D09r 1 29 .byte ')' +000D0Ar 1 2A .byte '*' +000D0Br 1 2B .byte '+' +000D0Cr 1 2C .byte ',' +000D0Dr 1 2D .byte '-' +000D0Er 1 2E .byte '.' +000D0Fr 1 2F .byte '/' +000D10r 1 30 .byte '0' +000D11r 1 31 .byte '1' +000D12r 1 32 .byte '2' +000D13r 1 33 .byte '3' +000D14r 1 34 .byte '4' +000D15r 1 35 .byte '5' +000D16r 1 36 .byte '6' +000D17r 1 37 .byte '7' +000D18r 1 38 .byte '8' +000D19r 1 39 .byte '9' +000D1Ar 1 3A .byte ':' +000D1Br 1 3B .byte ';' +000D1Cr 1 3C .byte '<' +000D1Dr 1 3D .byte '=' +000D1Er 1 3E .byte '>' +000D1Fr 1 3F .byte '?' +000D20r 1 40 .byte '@' +000D21r 1 41 .byte 'A' +000D22r 1 42 .byte 'B' +000D23r 1 43 .byte 'C' +000D24r 1 44 .byte 'D' +000D25r 1 45 .byte 'E' +000D26r 1 46 .byte 'F' +000D27r 1 47 .byte 'G' +000D28r 1 48 .byte 'H' +000D29r 1 49 .byte 'I' +000D2Ar 1 4A .byte 'J' +000D2Br 1 4B .byte 'K' +000D2Cr 1 4C .byte 'L' +000D2Dr 1 4D .byte 'M' +000D2Er 1 4E .byte 'N' +000D2Fr 1 4F .byte 'O' +000D30r 1 50 .byte 'P' +000D31r 1 51 .byte 'Q' +000D32r 1 52 .byte 'R' +000D33r 1 53 .byte 'S' +000D34r 1 54 .byte 'T' +000D35r 1 55 .byte 'U' +000D36r 1 56 .byte 'V' +000D37r 1 57 .byte 'W' +000D38r 1 58 .byte 'X' +000D39r 1 59 .byte 'Y' +000D3Ar 1 5A .byte 'Z' +000D3Br 1 5B .byte '[' +000D3Cr 1 5C .byte '\' +000D3Dr 1 5D .byte ']' +000D3Er 1 5E .byte '^' +000D3Fr 1 5F .byte '_' +000D40r 1 60 .byte '`' +000D41r 1 61 .byte 'a' +000D42r 1 62 .byte 'b' +000D43r 1 63 .byte 'c' +000D44r 1 64 .byte 'd' +000D45r 1 65 .byte 'e' +000D46r 1 66 .byte 'f' +000D47r 1 67 .byte 'g' +000D48r 1 68 .byte 'h' +000D49r 1 69 .byte 'i' +000D4Ar 1 6A .byte 'j' +000D4Br 1 6B .byte 'k' +000D4Cr 1 6C .byte 'l' +000D4Dr 1 6D .byte 'm' +000D4Er 1 6E .byte 'n' +000D4Fr 1 6F .byte 'o' +000D50r 1 70 .byte 'p' +000D51r 1 71 .byte 'q' +000D52r 1 72 .byte 'r' +000D53r 1 73 .byte 's' +000D54r 1 74 .byte 't' +000D55r 1 75 .byte 'u' +000D56r 1 76 .byte 'v' +000D57r 1 77 .byte 'w' +000D58r 1 78 .byte 'x' +000D59r 1 79 .byte 'y' +000D5Ar 1 7A .byte 'z' +000D5Br 1 7B .byte '{' +000D5Cr 1 7C .byte '|' +000D5Dr 1 7D .byte '}' +000D5Er 1 7E .byte '~' +000D5Fr 1 +000D5Fr 1 ; multiple values on one line, decimal +000D5Fr 1 00 01 02 03 .byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +000D63r 1 04 05 06 07 +000D67r 1 08 09 0A 0B +000D6Fr 1 10 11 12 13 .byte 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +000D73r 1 14 15 16 17 +000D77r 1 18 19 1A 1B +000D7Fr 1 20 21 22 23 .byte 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 +000D83r 1 24 25 26 27 +000D87r 1 28 29 2A 2B +000D8Fr 1 30 31 32 33 .byte 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 +000D93r 1 34 35 36 37 +000D97r 1 38 39 3A 3B +000D9Fr 1 40 41 42 43 .byte 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 +000DA3r 1 44 45 46 47 +000DA7r 1 48 49 4A 4B +000DAFr 1 50 51 52 53 .byte 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95 +000DB3r 1 54 55 56 57 +000DB7r 1 58 59 5A 5B +000DBFr 1 60 61 62 63 .byte 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 +000DC3r 1 64 65 66 67 +000DC7r 1 68 69 6A 6B +000DCFr 1 70 71 72 73 .byte 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +000DD3r 1 74 75 76 77 +000DD7r 1 78 79 7A 7B +000DDFr 1 80 81 82 83 .byte 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +000DE3r 1 84 85 86 87 +000DE7r 1 88 89 8A 8B +000DEFr 1 90 91 92 93 .byte 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 +000DF3r 1 94 95 96 97 +000DF7r 1 98 99 9A 9B +000DFFr 1 A0 A1 A2 A3 .byte 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 +000E03r 1 A4 A5 A6 A7 +000E07r 1 A8 A9 AA AB +000E0Fr 1 B0 B1 B2 B3 .byte 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 +000E13r 1 B4 B5 B6 B7 +000E17r 1 B8 B9 BA BB +000E1Fr 1 C0 C1 C2 C3 .byte 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 +000E23r 1 C4 C5 C6 C7 +000E27r 1 C8 C9 CA CB +000E2Fr 1 D0 D1 D2 D3 .byte 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 +000E33r 1 D4 D5 D6 D7 +000E37r 1 D8 D9 DA DB +000E3Fr 1 E0 E1 E2 E3 .byte 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 +000E43r 1 E4 E5 E6 E7 +000E47r 1 E8 E9 EA EB +000E4Fr 1 F0 F1 F2 F3 .byte 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +000E53r 1 F4 F5 F6 F7 +000E57r 1 F8 F9 FA FB +000E5Fr 1 +000E5Fr 1 ; multiple values on one line, hex +000E5Fr 1 00 01 02 03 .byte $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +000E63r 1 04 05 06 07 +000E67r 1 08 09 0A 0B +000E6Fr 1 10 11 12 13 .byte $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +000E73r 1 14 15 16 17 +000E77r 1 18 19 1A 1B +000E7Fr 1 20 21 22 23 .byte $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f +000E83r 1 24 25 26 27 +000E87r 1 28 29 2A 2B +000E8Fr 1 30 31 32 33 .byte $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f +000E93r 1 34 35 36 37 +000E97r 1 38 39 3A 3B +000E9Fr 1 40 41 42 43 .byte $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f +000EA3r 1 44 45 46 47 +000EA7r 1 48 49 4A 4B +000EAFr 1 50 51 52 53 .byte $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$5b,$5c,$5d,$5e,$5f +000EB3r 1 54 55 56 57 +000EB7r 1 58 59 5A 5B +000EBFr 1 60 61 62 63 .byte $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f +000EC3r 1 64 65 66 67 +000EC7r 1 68 69 6A 6B +000ECFr 1 70 71 72 73 .byte $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +000ED3r 1 74 75 76 77 +000ED7r 1 78 79 7A 7B +000EDFr 1 80 81 82 83 .byte $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +000EE3r 1 84 85 86 87 +000EE7r 1 88 89 8A 8B +000EEFr 1 90 91 92 93 .byte $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f +000EF3r 1 94 95 96 97 +000EF7r 1 98 99 9A 9B +000EFFr 1 A0 A1 A2 A3 .byte $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af +000F03r 1 A4 A5 A6 A7 +000F07r 1 A8 A9 AA AB +000F0Fr 1 B0 B1 B2 B3 .byte $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf +000F13r 1 B4 B5 B6 B7 +000F17r 1 B8 B9 BA BB +000F1Fr 1 C0 C1 C2 C3 .byte $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf +000F23r 1 C4 C5 C6 C7 +000F27r 1 C8 C9 CA CB +000F2Fr 1 D0 D1 D2 D3 .byte $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df +000F33r 1 D4 D5 D6 D7 +000F37r 1 D8 D9 DA DB +000F3Fr 1 E0 E1 E2 E3 .byte $e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef +000F43r 1 E4 E5 E6 E7 +000F47r 1 E8 E9 EA EB +000F4Fr 1 F0 F1 F2 F3 .byte $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +000F53r 1 F4 F5 F6 F7 +000F57r 1 F8 F9 FA FB +000F5Fr 1 +000F5Fr 1 ; multiple values on one line, alternative hex +000F5Fr 1 00 01 02 03 .byte 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +000F63r 1 04 05 06 07 +000F67r 1 08 09 0A 0B +000F6Fr 1 10 11 12 13 .byte 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +000F73r 1 14 15 16 17 +000F77r 1 18 19 1A 1B +000F7Fr 1 20 21 22 23 .byte 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,2ah,2bh,2ch,2dh,2eh,2fh +000F83r 1 24 25 26 27 +000F87r 1 28 29 2A 2B +000F8Fr 1 30 31 32 33 .byte 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,3ah,3bh,3ch,3dh,3eh,3fh +000F93r 1 34 35 36 37 +000F97r 1 38 39 3A 3B +000F9Fr 1 40 41 42 43 .byte 40h,41h,42h,43h,44h,45h,46h,47h,48h,49h,4ah,4bh,4ch,4dh,4eh,4fh +000FA3r 1 44 45 46 47 +000FA7r 1 48 49 4A 4B +000FAFr 1 50 51 52 53 .byte 50h,51h,52h,53h,54h,55h,56h,57h,58h,59h,5ah,5bh,5ch,5dh,5eh,5fh +000FB3r 1 54 55 56 57 +000FB7r 1 58 59 5A 5B +000FBFr 1 60 61 62 63 .byte 60h,61h,62h,63h,64h,65h,66h,67h,68h,69h,6ah,6bh,6ch,6dh,6eh,6fh +000FC3r 1 64 65 66 67 +000FC7r 1 68 69 6A 6B +000FCFr 1 70 71 72 73 .byte 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +000FD3r 1 74 75 76 77 +000FD7r 1 78 79 7A 7B +000FDFr 1 80 81 82 83 .byte 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +000FE3r 1 84 85 86 87 +000FE7r 1 88 89 8A 8B +000FEFr 1 90 91 92 93 .byte 90h,91h,92h,93h,94h,95h,96h,97h,98h,99h,9ah,9bh,9ch,9dh,9eh,9fh +000FF3r 1 94 95 96 97 +000FF7r 1 98 99 9A 9B +000FFFr 1 A0 A1 A2 A3 .byte 0a0h,0a1h,0a2h,0a3h,0a4h,0a5h,0a6h,0a7h,0a8h,0a9h,0aah,0abh,0ach,0adh,0aeh,0afh +001003r 1 A4 A5 A6 A7 +001007r 1 A8 A9 AA AB +00100Fr 1 B0 B1 B2 B3 .byte 0b0h,0b1h,0b2h,0b3h,0b4h,0b5h,0b6h,0b7h,0b8h,0b9h,0bah,0bbh,0bch,0bdh,0beh,0bfh +001013r 1 B4 B5 B6 B7 +001017r 1 B8 B9 BA BB +00101Fr 1 C0 C1 C2 C3 .byte 0c0h,0c1h,0c2h,0c3h,0c4h,0c5h,0c6h,0c7h,0c8h,0c9h,0cah,0cbh,0cch,0cdh,0ceh,0cfh +001023r 1 C4 C5 C6 C7 +001027r 1 C8 C9 CA CB +00102Fr 1 D0 D1 D2 D3 .byte 0d0h,0d1h,0d2h,0d3h,0d4h,0d5h,0d6h,0d7h,0d8h,0d9h,0dah,0dbh,0dch,0ddh,0deh,0dfh +001033r 1 D4 D5 D6 D7 +001037r 1 D8 D9 DA DB +00103Fr 1 E0 E1 E2 E3 .byte 0e0h,0e1h,0e2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0e9h,0eah,0ebh,0ech,0edh,0eeh,0efh +001043r 1 E4 E5 E6 E7 +001047r 1 E8 E9 EA EB +00104Fr 1 F0 F1 F2 F3 .byte 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +001053r 1 F4 F5 F6 F7 +001057r 1 F8 F9 FA FB +00105Fr 1 +00105Fr 1 ; multiple values on one line, characters +00105Fr 1 20 21 22 23 .byte ' ','!','"','#','$','%','&',''','(',')','*','+',',','-','.','/' +001063r 1 24 25 26 27 +001067r 1 28 29 2A 2B +00106Fr 1 30 31 32 33 .byte '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?' +001073r 1 34 35 36 37 +001077r 1 38 39 3A 3B +00107Fr 1 40 41 42 43 .byte '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O' +001083r 1 44 45 46 47 +001087r 1 48 49 4A 4B +00108Fr 1 50 51 52 53 .byte 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_' +001093r 1 54 55 56 57 +001097r 1 58 59 5A 5B +00109Fr 1 60 61 62 63 .byte '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o' +0010A3r 1 64 65 66 67 +0010A7r 1 68 69 6A 6B +0010AFr 1 70 71 72 73 .byte 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~' +0010B3r 1 74 75 76 77 +0010B7r 1 78 79 7A 7B +0010BEr 1 +0010BEr 1 ; some character strings +0010BEr 1 20 21 23 24 .byte " !#$%&'()*+,-." +0010C2r 1 25 26 27 28 +0010C6r 1 29 2A 2B 2C +0010CCr 1 30 31 32 33 .byte "0123456789:;<=>" +0010D0r 1 34 35 36 37 +0010D4r 1 38 39 3A 3B +0010DBr 1 40 41 42 43 .byte "@ABCDEFGHIJKLMN" +0010DFr 1 44 45 46 47 +0010E3r 1 48 49 4A 4B +0010EAr 1 50 51 52 53 .byte "PQRSTUVWXYZ[\]^" +0010EEr 1 54 55 56 57 +0010F2r 1 58 59 5A 5B +0010F9r 1 60 61 62 63 .byte "`abcdefghijklmn" +0010FDr 1 64 65 66 67 +001101r 1 68 69 6A 6B +001108r 1 70 71 72 73 .byte "pqrstuvwxyz{|}" +00110Cr 1 74 75 76 77 +001110r 1 78 79 7A 7B +001116r 1 +001116r 1 ; mix some variants +001116r 1 0B 11 03 11 .byte 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +00111Ar 1 61 62 7A 41 +00111Er 1 5A 30 39 AA +001125r 1 diff --git a/test/asm/listing/100-byte.s b/test/asm/listing/100-byte.s new file mode 100644 index 000000000..17c8b7235 --- /dev/null +++ b/test/asm/listing/100-byte.s @@ -0,0 +1,3526 @@ +; 2022-06-15 Spiro Trikaliotis + + + ; upper case pseudo-op + .BYTE 0 + .BYTE 1 + .BYTE 2 + .BYTE 3 + .BYTE 4 + .BYTE 5 + .BYTE 6 + .BYTE 7 + .BYTE 8 + .BYTE 9 + .BYTE 10 + .BYTE 11 + .BYTE 12 + .BYTE 13 + .BYTE 14 + .BYTE 15 + .BYTE 16 + .BYTE 17 + .BYTE 18 + .BYTE 19 + .BYTE 20 + .BYTE 21 + .BYTE 22 + .BYTE 23 + .BYTE 24 + .BYTE 25 + .BYTE 26 + .BYTE 27 + .BYTE 28 + .BYTE 29 + .BYTE 30 + .BYTE 31 + .BYTE 32 + .BYTE 33 + .BYTE 34 + .BYTE 35 + .BYTE 36 + .BYTE 37 + .BYTE 38 + .BYTE 39 + .BYTE 40 + .BYTE 41 + .BYTE 42 + .BYTE 43 + .BYTE 44 + .BYTE 45 + .BYTE 46 + .BYTE 47 + .BYTE 48 + .BYTE 49 + .BYTE 50 + .BYTE 51 + .BYTE 52 + .BYTE 53 + .BYTE 54 + .BYTE 55 + .BYTE 56 + .BYTE 57 + .BYTE 58 + .BYTE 59 + .BYTE 60 + .BYTE 61 + .BYTE 62 + .BYTE 63 + .BYTE 64 + .BYTE 65 + .BYTE 66 + .BYTE 67 + .BYTE 68 + .BYTE 69 + .BYTE 70 + .BYTE 71 + .BYTE 72 + .BYTE 73 + .BYTE 74 + .BYTE 75 + .BYTE 76 + .BYTE 77 + .BYTE 78 + .BYTE 79 + .BYTE 80 + .BYTE 81 + .BYTE 82 + .BYTE 83 + .BYTE 84 + .BYTE 85 + .BYTE 86 + .BYTE 87 + .BYTE 88 + .BYTE 89 + .BYTE 90 + .BYTE 91 + .BYTE 92 + .BYTE 93 + .BYTE 94 + .BYTE 95 + .BYTE 96 + .BYTE 97 + .BYTE 98 + .BYTE 99 + .BYTE 100 + .BYTE 101 + .BYTE 102 + .BYTE 103 + .BYTE 104 + .BYTE 105 + .BYTE 106 + .BYTE 107 + .BYTE 108 + .BYTE 109 + .BYTE 110 + .BYTE 111 + .BYTE 112 + .BYTE 113 + .BYTE 114 + .BYTE 115 + .BYTE 116 + .BYTE 117 + .BYTE 118 + .BYTE 119 + .BYTE 120 + .BYTE 121 + .BYTE 122 + .BYTE 123 + .BYTE 124 + .BYTE 125 + .BYTE 126 + .BYTE 127 + .BYTE 128 + .BYTE 129 + .BYTE 130 + .BYTE 131 + .BYTE 132 + .BYTE 133 + .BYTE 134 + .BYTE 135 + .BYTE 136 + .BYTE 137 + .BYTE 138 + .BYTE 139 + .BYTE 140 + .BYTE 141 + .BYTE 142 + .BYTE 143 + .BYTE 144 + .BYTE 145 + .BYTE 146 + .BYTE 147 + .BYTE 148 + .BYTE 149 + .BYTE 150 + .BYTE 151 + .BYTE 152 + .BYTE 153 + .BYTE 154 + .BYTE 155 + .BYTE 156 + .BYTE 157 + .BYTE 158 + .BYTE 159 + .BYTE 160 + .BYTE 161 + .BYTE 162 + .BYTE 163 + .BYTE 164 + .BYTE 165 + .BYTE 166 + .BYTE 167 + .BYTE 168 + .BYTE 169 + .BYTE 170 + .BYTE 171 + .BYTE 172 + .BYTE 173 + .BYTE 174 + .BYTE 175 + .BYTE 176 + .BYTE 177 + .BYTE 178 + .BYTE 179 + .BYTE 180 + .BYTE 181 + .BYTE 182 + .BYTE 183 + .BYTE 184 + .BYTE 185 + .BYTE 186 + .BYTE 187 + .BYTE 188 + .BYTE 189 + .BYTE 190 + .BYTE 191 + .BYTE 192 + .BYTE 193 + .BYTE 194 + .BYTE 195 + .BYTE 196 + .BYTE 197 + .BYTE 198 + .BYTE 199 + .BYTE 200 + .BYTE 201 + .BYTE 202 + .BYTE 203 + .BYTE 204 + .BYTE 205 + .BYTE 206 + .BYTE 207 + .BYTE 208 + .BYTE 209 + .BYTE 210 + .BYTE 211 + .BYTE 212 + .BYTE 213 + .BYTE 214 + .BYTE 215 + .BYTE 216 + .BYTE 217 + .BYTE 218 + .BYTE 219 + .BYTE 220 + .BYTE 221 + .BYTE 222 + .BYTE 223 + .BYTE 224 + .BYTE 225 + .BYTE 226 + .BYTE 227 + .BYTE 228 + .BYTE 229 + .BYTE 230 + .BYTE 231 + .BYTE 232 + .BYTE 233 + .BYTE 234 + .BYTE 235 + .BYTE 236 + .BYTE 237 + .BYTE 238 + .BYTE 239 + .BYTE 240 + .BYTE 241 + .BYTE 242 + .BYTE 243 + .BYTE 244 + .BYTE 245 + .BYTE 246 + .BYTE 247 + .BYTE 248 + .BYTE 249 + .BYTE 250 + .BYTE 251 + .BYTE 252 + .BYTE 253 + .BYTE 254 + .BYTE 255 + + ; lower case pseudo-op + .byte 0 + .byte 1 + .byte 2 + .byte 3 + .byte 4 + .byte 5 + .byte 6 + .byte 7 + .byte 8 + .byte 9 + .byte 10 + .byte 11 + .byte 12 + .byte 13 + .byte 14 + .byte 15 + .byte 16 + .byte 17 + .byte 18 + .byte 19 + .byte 20 + .byte 21 + .byte 22 + .byte 23 + .byte 24 + .byte 25 + .byte 26 + .byte 27 + .byte 28 + .byte 29 + .byte 30 + .byte 31 + .byte 32 + .byte 33 + .byte 34 + .byte 35 + .byte 36 + .byte 37 + .byte 38 + .byte 39 + .byte 40 + .byte 41 + .byte 42 + .byte 43 + .byte 44 + .byte 45 + .byte 46 + .byte 47 + .byte 48 + .byte 49 + .byte 50 + .byte 51 + .byte 52 + .byte 53 + .byte 54 + .byte 55 + .byte 56 + .byte 57 + .byte 58 + .byte 59 + .byte 60 + .byte 61 + .byte 62 + .byte 63 + .byte 64 + .byte 65 + .byte 66 + .byte 67 + .byte 68 + .byte 69 + .byte 70 + .byte 71 + .byte 72 + .byte 73 + .byte 74 + .byte 75 + .byte 76 + .byte 77 + .byte 78 + .byte 79 + .byte 80 + .byte 81 + .byte 82 + .byte 83 + .byte 84 + .byte 85 + .byte 86 + .byte 87 + .byte 88 + .byte 89 + .byte 90 + .byte 91 + .byte 92 + .byte 93 + .byte 94 + .byte 95 + .byte 96 + .byte 97 + .byte 98 + .byte 99 + .byte 100 + .byte 101 + .byte 102 + .byte 103 + .byte 104 + .byte 105 + .byte 106 + .byte 107 + .byte 108 + .byte 109 + .byte 110 + .byte 111 + .byte 112 + .byte 113 + .byte 114 + .byte 115 + .byte 116 + .byte 117 + .byte 118 + .byte 119 + .byte 120 + .byte 121 + .byte 122 + .byte 123 + .byte 124 + .byte 125 + .byte 126 + .byte 127 + .byte 128 + .byte 129 + .byte 130 + .byte 131 + .byte 132 + .byte 133 + .byte 134 + .byte 135 + .byte 136 + .byte 137 + .byte 138 + .byte 139 + .byte 140 + .byte 141 + .byte 142 + .byte 143 + .byte 144 + .byte 145 + .byte 146 + .byte 147 + .byte 148 + .byte 149 + .byte 150 + .byte 151 + .byte 152 + .byte 153 + .byte 154 + .byte 155 + .byte 156 + .byte 157 + .byte 158 + .byte 159 + .byte 160 + .byte 161 + .byte 162 + .byte 163 + .byte 164 + .byte 165 + .byte 166 + .byte 167 + .byte 168 + .byte 169 + .byte 170 + .byte 171 + .byte 172 + .byte 173 + .byte 174 + .byte 175 + .byte 176 + .byte 177 + .byte 178 + .byte 179 + .byte 180 + .byte 181 + .byte 182 + .byte 183 + .byte 184 + .byte 185 + .byte 186 + .byte 187 + .byte 188 + .byte 189 + .byte 190 + .byte 191 + .byte 192 + .byte 193 + .byte 194 + .byte 195 + .byte 196 + .byte 197 + .byte 198 + .byte 199 + .byte 200 + .byte 201 + .byte 202 + .byte 203 + .byte 204 + .byte 205 + .byte 206 + .byte 207 + .byte 208 + .byte 209 + .byte 210 + .byte 211 + .byte 212 + .byte 213 + .byte 214 + .byte 215 + .byte 216 + .byte 217 + .byte 218 + .byte 219 + .byte 220 + .byte 221 + .byte 222 + .byte 223 + .byte 224 + .byte 225 + .byte 226 + .byte 227 + .byte 228 + .byte 229 + .byte 230 + .byte 231 + .byte 232 + .byte 233 + .byte 234 + .byte 235 + .byte 236 + .byte 237 + .byte 238 + .byte 239 + .byte 240 + .byte 241 + .byte 242 + .byte 243 + .byte 244 + .byte 245 + .byte 246 + .byte 247 + .byte 248 + .byte 249 + .byte 250 + .byte 251 + .byte 252 + .byte 253 + .byte 254 + .byte 255 + + ; hex values + .byte $0 + .byte $1 + .byte $2 + .byte $3 + .byte $4 + .byte $5 + .byte $6 + .byte $7 + .byte $8 + .byte $9 + .byte $a + .byte $b + .byte $c + .byte $d + .byte $e + .byte $f + .byte $10 + .byte $11 + .byte $12 + .byte $13 + .byte $14 + .byte $15 + .byte $16 + .byte $17 + .byte $18 + .byte $19 + .byte $1a + .byte $1b + .byte $1c + .byte $1d + .byte $1e + .byte $1f + .byte $20 + .byte $21 + .byte $22 + .byte $23 + .byte $24 + .byte $25 + .byte $26 + .byte $27 + .byte $28 + .byte $29 + .byte $2a + .byte $2b + .byte $2c + .byte $2d + .byte $2e + .byte $2f + .byte $30 + .byte $31 + .byte $32 + .byte $33 + .byte $34 + .byte $35 + .byte $36 + .byte $37 + .byte $38 + .byte $39 + .byte $3a + .byte $3b + .byte $3c + .byte $3d + .byte $3e + .byte $3f + .byte $40 + .byte $41 + .byte $42 + .byte $43 + .byte $44 + .byte $45 + .byte $46 + .byte $47 + .byte $48 + .byte $49 + .byte $4a + .byte $4b + .byte $4c + .byte $4d + .byte $4e + .byte $4f + .byte $50 + .byte $51 + .byte $52 + .byte $53 + .byte $54 + .byte $55 + .byte $56 + .byte $57 + .byte $58 + .byte $59 + .byte $5a + .byte $5b + .byte $5c + .byte $5d + .byte $5e + .byte $5f + .byte $60 + .byte $61 + .byte $62 + .byte $63 + .byte $64 + .byte $65 + .byte $66 + .byte $67 + .byte $68 + .byte $69 + .byte $6a + .byte $6b + .byte $6c + .byte $6d + .byte $6e + .byte $6f + .byte $70 + .byte $71 + .byte $72 + .byte $73 + .byte $74 + .byte $75 + .byte $76 + .byte $77 + .byte $78 + .byte $79 + .byte $7a + .byte $7b + .byte $7c + .byte $7d + .byte $7e + .byte $7f + .byte $80 + .byte $81 + .byte $82 + .byte $83 + .byte $84 + .byte $85 + .byte $86 + .byte $87 + .byte $88 + .byte $89 + .byte $8a + .byte $8b + .byte $8c + .byte $8d + .byte $8e + .byte $8f + .byte $90 + .byte $91 + .byte $92 + .byte $93 + .byte $94 + .byte $95 + .byte $96 + .byte $97 + .byte $98 + .byte $99 + .byte $9a + .byte $9b + .byte $9c + .byte $9d + .byte $9e + .byte $9f + .byte $a0 + .byte $a1 + .byte $a2 + .byte $a3 + .byte $a4 + .byte $a5 + .byte $a6 + .byte $a7 + .byte $a8 + .byte $a9 + .byte $aa + .byte $ab + .byte $ac + .byte $ad + .byte $ae + .byte $af + .byte $b0 + .byte $b1 + .byte $b2 + .byte $b3 + .byte $b4 + .byte $b5 + .byte $b6 + .byte $b7 + .byte $b8 + .byte $b9 + .byte $ba + .byte $bb + .byte $bc + .byte $bd + .byte $be + .byte $bf + .byte $c0 + .byte $c1 + .byte $c2 + .byte $c3 + .byte $c4 + .byte $c5 + .byte $c6 + .byte $c7 + .byte $c8 + .byte $c9 + .byte $ca + .byte $cb + .byte $cc + .byte $cd + .byte $ce + .byte $cf + .byte $d0 + .byte $d1 + .byte $d2 + .byte $d3 + .byte $d4 + .byte $d5 + .byte $d6 + .byte $d7 + .byte $d8 + .byte $d9 + .byte $da + .byte $db + .byte $dc + .byte $dd + .byte $de + .byte $df + .byte $e0 + .byte $e1 + .byte $e2 + .byte $e3 + .byte $e4 + .byte $e5 + .byte $e6 + .byte $e7 + .byte $e8 + .byte $e9 + .byte $ea + .byte $eb + .byte $ec + .byte $ed + .byte $ee + .byte $ef + .byte $f0 + .byte $f1 + .byte $f2 + .byte $f3 + .byte $f4 + .byte $f5 + .byte $f6 + .byte $f7 + .byte $f8 + .byte $f9 + .byte $fa + .byte $fb + .byte $fc + .byte $fd + .byte $fe + .byte $ff + + ; hex values, uppercase + .byte $0 + .byte $1 + .byte $2 + .byte $3 + .byte $4 + .byte $5 + .byte $6 + .byte $7 + .byte $8 + .byte $9 + .byte $A + .byte $B + .byte $C + .byte $D + .byte $E + .byte $F + .byte $10 + .byte $11 + .byte $12 + .byte $13 + .byte $14 + .byte $15 + .byte $16 + .byte $17 + .byte $18 + .byte $19 + .byte $1A + .byte $1B + .byte $1C + .byte $1D + .byte $1E + .byte $1F + .byte $20 + .byte $21 + .byte $22 + .byte $23 + .byte $24 + .byte $25 + .byte $26 + .byte $27 + .byte $28 + .byte $29 + .byte $2A + .byte $2B + .byte $2C + .byte $2D + .byte $2E + .byte $2F + .byte $30 + .byte $31 + .byte $32 + .byte $33 + .byte $34 + .byte $35 + .byte $36 + .byte $37 + .byte $38 + .byte $39 + .byte $3A + .byte $3B + .byte $3C + .byte $3D + .byte $3E + .byte $3F + .byte $40 + .byte $41 + .byte $42 + .byte $43 + .byte $44 + .byte $45 + .byte $46 + .byte $47 + .byte $48 + .byte $49 + .byte $4A + .byte $4B + .byte $4C + .byte $4D + .byte $4E + .byte $4F + .byte $50 + .byte $51 + .byte $52 + .byte $53 + .byte $54 + .byte $55 + .byte $56 + .byte $57 + .byte $58 + .byte $59 + .byte $5A + .byte $5B + .byte $5C + .byte $5D + .byte $5E + .byte $5F + .byte $60 + .byte $61 + .byte $62 + .byte $63 + .byte $64 + .byte $65 + .byte $66 + .byte $67 + .byte $68 + .byte $69 + .byte $6A + .byte $6B + .byte $6C + .byte $6D + .byte $6E + .byte $6F + .byte $70 + .byte $71 + .byte $72 + .byte $73 + .byte $74 + .byte $75 + .byte $76 + .byte $77 + .byte $78 + .byte $79 + .byte $7A + .byte $7B + .byte $7C + .byte $7D + .byte $7E + .byte $7F + .byte $80 + .byte $81 + .byte $82 + .byte $83 + .byte $84 + .byte $85 + .byte $86 + .byte $87 + .byte $88 + .byte $89 + .byte $8A + .byte $8B + .byte $8C + .byte $8D + .byte $8E + .byte $8F + .byte $90 + .byte $91 + .byte $92 + .byte $93 + .byte $94 + .byte $95 + .byte $96 + .byte $97 + .byte $98 + .byte $99 + .byte $9A + .byte $9B + .byte $9C + .byte $9D + .byte $9E + .byte $9F + .byte $A0 + .byte $A1 + .byte $A2 + .byte $A3 + .byte $A4 + .byte $A5 + .byte $A6 + .byte $A7 + .byte $A8 + .byte $A9 + .byte $AA + .byte $AB + .byte $AC + .byte $AD + .byte $AE + .byte $AF + .byte $B0 + .byte $B1 + .byte $B2 + .byte $B3 + .byte $B4 + .byte $B5 + .byte $B6 + .byte $B7 + .byte $B8 + .byte $B9 + .byte $BA + .byte $BB + .byte $BC + .byte $BD + .byte $BE + .byte $BF + .byte $C0 + .byte $C1 + .byte $C2 + .byte $C3 + .byte $C4 + .byte $C5 + .byte $C6 + .byte $C7 + .byte $C8 + .byte $C9 + .byte $CA + .byte $CB + .byte $CC + .byte $CD + .byte $CE + .byte $CF + .byte $D0 + .byte $D1 + .byte $D2 + .byte $D3 + .byte $D4 + .byte $D5 + .byte $D6 + .byte $D7 + .byte $D8 + .byte $D9 + .byte $DA + .byte $DB + .byte $DC + .byte $DD + .byte $DE + .byte $DF + .byte $E0 + .byte $E1 + .byte $E2 + .byte $E3 + .byte $E4 + .byte $E5 + .byte $E6 + .byte $E7 + .byte $E8 + .byte $E9 + .byte $EA + .byte $EB + .byte $EC + .byte $ED + .byte $EE + .byte $EF + .byte $F0 + .byte $F1 + .byte $F2 + .byte $F3 + .byte $F4 + .byte $F5 + .byte $F6 + .byte $F7 + .byte $F8 + .byte $F9 + .byte $FA + .byte $FB + .byte $FC + .byte $FD + .byte $FE + .byte $FF + + ; 2-digit hex values + .byte $00 + .byte $01 + .byte $02 + .byte $03 + .byte $04 + .byte $05 + .byte $06 + .byte $07 + .byte $08 + .byte $09 + .byte $0a + .byte $0b + .byte $0c + .byte $0d + .byte $0e + .byte $0f + .byte $10 + .byte $11 + .byte $12 + .byte $13 + .byte $14 + .byte $15 + .byte $16 + .byte $17 + .byte $18 + .byte $19 + .byte $1a + .byte $1b + .byte $1c + .byte $1d + .byte $1e + .byte $1f + .byte $20 + .byte $21 + .byte $22 + .byte $23 + .byte $24 + .byte $25 + .byte $26 + .byte $27 + .byte $28 + .byte $29 + .byte $2a + .byte $2b + .byte $2c + .byte $2d + .byte $2e + .byte $2f + .byte $30 + .byte $31 + .byte $32 + .byte $33 + .byte $34 + .byte $35 + .byte $36 + .byte $37 + .byte $38 + .byte $39 + .byte $3a + .byte $3b + .byte $3c + .byte $3d + .byte $3e + .byte $3f + .byte $40 + .byte $41 + .byte $42 + .byte $43 + .byte $44 + .byte $45 + .byte $46 + .byte $47 + .byte $48 + .byte $49 + .byte $4a + .byte $4b + .byte $4c + .byte $4d + .byte $4e + .byte $4f + .byte $50 + .byte $51 + .byte $52 + .byte $53 + .byte $54 + .byte $55 + .byte $56 + .byte $57 + .byte $58 + .byte $59 + .byte $5a + .byte $5b + .byte $5c + .byte $5d + .byte $5e + .byte $5f + .byte $60 + .byte $61 + .byte $62 + .byte $63 + .byte $64 + .byte $65 + .byte $66 + .byte $67 + .byte $68 + .byte $69 + .byte $6a + .byte $6b + .byte $6c + .byte $6d + .byte $6e + .byte $6f + .byte $70 + .byte $71 + .byte $72 + .byte $73 + .byte $74 + .byte $75 + .byte $76 + .byte $77 + .byte $78 + .byte $79 + .byte $7a + .byte $7b + .byte $7c + .byte $7d + .byte $7e + .byte $7f + .byte $80 + .byte $81 + .byte $82 + .byte $83 + .byte $84 + .byte $85 + .byte $86 + .byte $87 + .byte $88 + .byte $89 + .byte $8a + .byte $8b + .byte $8c + .byte $8d + .byte $8e + .byte $8f + .byte $90 + .byte $91 + .byte $92 + .byte $93 + .byte $94 + .byte $95 + .byte $96 + .byte $97 + .byte $98 + .byte $99 + .byte $9a + .byte $9b + .byte $9c + .byte $9d + .byte $9e + .byte $9f + .byte $a0 + .byte $a1 + .byte $a2 + .byte $a3 + .byte $a4 + .byte $a5 + .byte $a6 + .byte $a7 + .byte $a8 + .byte $a9 + .byte $aa + .byte $ab + .byte $ac + .byte $ad + .byte $ae + .byte $af + .byte $b0 + .byte $b1 + .byte $b2 + .byte $b3 + .byte $b4 + .byte $b5 + .byte $b6 + .byte $b7 + .byte $b8 + .byte $b9 + .byte $ba + .byte $bb + .byte $bc + .byte $bd + .byte $be + .byte $bf + .byte $c0 + .byte $c1 + .byte $c2 + .byte $c3 + .byte $c4 + .byte $c5 + .byte $c6 + .byte $c7 + .byte $c8 + .byte $c9 + .byte $ca + .byte $cb + .byte $cc + .byte $cd + .byte $ce + .byte $cf + .byte $d0 + .byte $d1 + .byte $d2 + .byte $d3 + .byte $d4 + .byte $d5 + .byte $d6 + .byte $d7 + .byte $d8 + .byte $d9 + .byte $da + .byte $db + .byte $dc + .byte $dd + .byte $de + .byte $df + .byte $e0 + .byte $e1 + .byte $e2 + .byte $e3 + .byte $e4 + .byte $e5 + .byte $e6 + .byte $e7 + .byte $e8 + .byte $e9 + .byte $ea + .byte $eb + .byte $ec + .byte $ed + .byte $ee + .byte $ef + .byte $f0 + .byte $f1 + .byte $f2 + .byte $f3 + .byte $f4 + .byte $f5 + .byte $f6 + .byte $f7 + .byte $f8 + .byte $f9 + .byte $fa + .byte $fb + .byte $fc + .byte $fd + .byte $fe + .byte $ff + + ; 2-digit hex values, uppercase + .byte $00 + .byte $01 + .byte $02 + .byte $03 + .byte $04 + .byte $05 + .byte $06 + .byte $07 + .byte $08 + .byte $09 + .byte $0A + .byte $0B + .byte $0C + .byte $0D + .byte $0E + .byte $0F + .byte $10 + .byte $11 + .byte $12 + .byte $13 + .byte $14 + .byte $15 + .byte $16 + .byte $17 + .byte $18 + .byte $19 + .byte $1A + .byte $1B + .byte $1C + .byte $1D + .byte $1E + .byte $1F + .byte $20 + .byte $21 + .byte $22 + .byte $23 + .byte $24 + .byte $25 + .byte $26 + .byte $27 + .byte $28 + .byte $29 + .byte $2A + .byte $2B + .byte $2C + .byte $2D + .byte $2E + .byte $2F + .byte $30 + .byte $31 + .byte $32 + .byte $33 + .byte $34 + .byte $35 + .byte $36 + .byte $37 + .byte $38 + .byte $39 + .byte $3A + .byte $3B + .byte $3C + .byte $3D + .byte $3E + .byte $3F + .byte $40 + .byte $41 + .byte $42 + .byte $43 + .byte $44 + .byte $45 + .byte $46 + .byte $47 + .byte $48 + .byte $49 + .byte $4A + .byte $4B + .byte $4C + .byte $4D + .byte $4E + .byte $4F + .byte $50 + .byte $51 + .byte $52 + .byte $53 + .byte $54 + .byte $55 + .byte $56 + .byte $57 + .byte $58 + .byte $59 + .byte $5A + .byte $5B + .byte $5C + .byte $5D + .byte $5E + .byte $5F + .byte $60 + .byte $61 + .byte $62 + .byte $63 + .byte $64 + .byte $65 + .byte $66 + .byte $67 + .byte $68 + .byte $69 + .byte $6A + .byte $6B + .byte $6C + .byte $6D + .byte $6E + .byte $6F + .byte $70 + .byte $71 + .byte $72 + .byte $73 + .byte $74 + .byte $75 + .byte $76 + .byte $77 + .byte $78 + .byte $79 + .byte $7A + .byte $7B + .byte $7C + .byte $7D + .byte $7E + .byte $7F + .byte $80 + .byte $81 + .byte $82 + .byte $83 + .byte $84 + .byte $85 + .byte $86 + .byte $87 + .byte $88 + .byte $89 + .byte $8A + .byte $8B + .byte $8C + .byte $8D + .byte $8E + .byte $8F + .byte $90 + .byte $91 + .byte $92 + .byte $93 + .byte $94 + .byte $95 + .byte $96 + .byte $97 + .byte $98 + .byte $99 + .byte $9A + .byte $9B + .byte $9C + .byte $9D + .byte $9E + .byte $9F + .byte $A0 + .byte $A1 + .byte $A2 + .byte $A3 + .byte $A4 + .byte $A5 + .byte $A6 + .byte $A7 + .byte $A8 + .byte $A9 + .byte $AA + .byte $AB + .byte $AC + .byte $AD + .byte $AE + .byte $AF + .byte $B0 + .byte $B1 + .byte $B2 + .byte $B3 + .byte $B4 + .byte $B5 + .byte $B6 + .byte $B7 + .byte $B8 + .byte $B9 + .byte $BA + .byte $BB + .byte $BC + .byte $BD + .byte $BE + .byte $BF + .byte $C0 + .byte $C1 + .byte $C2 + .byte $C3 + .byte $C4 + .byte $C5 + .byte $C6 + .byte $C7 + .byte $C8 + .byte $C9 + .byte $CA + .byte $CB + .byte $CC + .byte $CD + .byte $CE + .byte $CF + .byte $D0 + .byte $D1 + .byte $D2 + .byte $D3 + .byte $D4 + .byte $D5 + .byte $D6 + .byte $D7 + .byte $D8 + .byte $D9 + .byte $DA + .byte $DB + .byte $DC + .byte $DD + .byte $DE + .byte $DF + .byte $E0 + .byte $E1 + .byte $E2 + .byte $E3 + .byte $E4 + .byte $E5 + .byte $E6 + .byte $E7 + .byte $E8 + .byte $E9 + .byte $EA + .byte $EB + .byte $EC + .byte $ED + .byte $EE + .byte $EF + .byte $F0 + .byte $F1 + .byte $F2 + .byte $F3 + .byte $F4 + .byte $F5 + .byte $F6 + .byte $F7 + .byte $F8 + .byte $F9 + .byte $FA + .byte $FB + .byte $FC + .byte $FD + .byte $FE + .byte $FF + + ; alternative hex values + .byte 0h + .byte 1h + .byte 2h + .byte 3h + .byte 4h + .byte 5h + .byte 6h + .byte 7h + .byte 8h + .byte 9h + .byte 0ah + .byte 0bh + .byte 0ch + .byte 0dh + .byte 0eh + .byte 0fh + .byte 10h + .byte 11h + .byte 12h + .byte 13h + .byte 14h + .byte 15h + .byte 16h + .byte 17h + .byte 18h + .byte 19h + .byte 1ah + .byte 1bh + .byte 1ch + .byte 1dh + .byte 1eh + .byte 1fh + .byte 20h + .byte 21h + .byte 22h + .byte 23h + .byte 24h + .byte 25h + .byte 26h + .byte 27h + .byte 28h + .byte 29h + .byte 2ah + .byte 2bh + .byte 2ch + .byte 2dh + .byte 2eh + .byte 2fh + .byte 30h + .byte 31h + .byte 32h + .byte 33h + .byte 34h + .byte 35h + .byte 36h + .byte 37h + .byte 38h + .byte 39h + .byte 3ah + .byte 3bh + .byte 3ch + .byte 3dh + .byte 3eh + .byte 3fh + .byte 40h + .byte 41h + .byte 42h + .byte 43h + .byte 44h + .byte 45h + .byte 46h + .byte 47h + .byte 48h + .byte 49h + .byte 4ah + .byte 4bh + .byte 4ch + .byte 4dh + .byte 4eh + .byte 4fh + .byte 50h + .byte 51h + .byte 52h + .byte 53h + .byte 54h + .byte 55h + .byte 56h + .byte 57h + .byte 58h + .byte 59h + .byte 5ah + .byte 5bh + .byte 5ch + .byte 5dh + .byte 5eh + .byte 5fh + .byte 60h + .byte 61h + .byte 62h + .byte 63h + .byte 64h + .byte 65h + .byte 66h + .byte 67h + .byte 68h + .byte 69h + .byte 6ah + .byte 6bh + .byte 6ch + .byte 6dh + .byte 6eh + .byte 6fh + .byte 70h + .byte 71h + .byte 72h + .byte 73h + .byte 74h + .byte 75h + .byte 76h + .byte 77h + .byte 78h + .byte 79h + .byte 7ah + .byte 7bh + .byte 7ch + .byte 7dh + .byte 7eh + .byte 7fh + .byte 80h + .byte 81h + .byte 82h + .byte 83h + .byte 84h + .byte 85h + .byte 86h + .byte 87h + .byte 88h + .byte 89h + .byte 8ah + .byte 8bh + .byte 8ch + .byte 8dh + .byte 8eh + .byte 8fh + .byte 90h + .byte 91h + .byte 92h + .byte 93h + .byte 94h + .byte 95h + .byte 96h + .byte 97h + .byte 98h + .byte 99h + .byte 9ah + .byte 9bh + .byte 9ch + .byte 9dh + .byte 9eh + .byte 9fh + .byte 0a0h + .byte 0a1h + .byte 0a2h + .byte 0a3h + .byte 0a4h + .byte 0a5h + .byte 0a6h + .byte 0a7h + .byte 0a8h + .byte 0a9h + .byte 0aah + .byte 0abh + .byte 0ach + .byte 0adh + .byte 0aeh + .byte 0afh + .byte 0b0h + .byte 0b1h + .byte 0b2h + .byte 0b3h + .byte 0b4h + .byte 0b5h + .byte 0b6h + .byte 0b7h + .byte 0b8h + .byte 0b9h + .byte 0bah + .byte 0bbh + .byte 0bch + .byte 0bdh + .byte 0beh + .byte 0bfh + .byte 0c0h + .byte 0c1h + .byte 0c2h + .byte 0c3h + .byte 0c4h + .byte 0c5h + .byte 0c6h + .byte 0c7h + .byte 0c8h + .byte 0c9h + .byte 0cah + .byte 0cbh + .byte 0cch + .byte 0cdh + .byte 0ceh + .byte 0cfh + .byte 0d0h + .byte 0d1h + .byte 0d2h + .byte 0d3h + .byte 0d4h + .byte 0d5h + .byte 0d6h + .byte 0d7h + .byte 0d8h + .byte 0d9h + .byte 0dah + .byte 0dbh + .byte 0dch + .byte 0ddh + .byte 0deh + .byte 0dfh + .byte 0e0h + .byte 0e1h + .byte 0e2h + .byte 0e3h + .byte 0e4h + .byte 0e5h + .byte 0e6h + .byte 0e7h + .byte 0e8h + .byte 0e9h + .byte 0eah + .byte 0ebh + .byte 0ech + .byte 0edh + .byte 0eeh + .byte 0efh + .byte 0f0h + .byte 0f1h + .byte 0f2h + .byte 0f3h + .byte 0f4h + .byte 0f5h + .byte 0f6h + .byte 0f7h + .byte 0f8h + .byte 0f9h + .byte 0fah + .byte 0fbh + .byte 0fch + .byte 0fdh + .byte 0feh + .byte 0ffh + + ; alternative hex values, uppercase + .byte 0h + .byte 1h + .byte 2h + .byte 3h + .byte 4h + .byte 5h + .byte 6h + .byte 7h + .byte 8h + .byte 9h + .byte 0Ah + .byte 0Bh + .byte 0Ch + .byte 0Dh + .byte 0Eh + .byte 0Fh + .byte 10h + .byte 11h + .byte 12h + .byte 13h + .byte 14h + .byte 15h + .byte 16h + .byte 17h + .byte 18h + .byte 19h + .byte 1Ah + .byte 1Bh + .byte 1Ch + .byte 1Dh + .byte 1Eh + .byte 1Fh + .byte 20h + .byte 21h + .byte 22h + .byte 23h + .byte 24h + .byte 25h + .byte 26h + .byte 27h + .byte 28h + .byte 29h + .byte 2Ah + .byte 2Bh + .byte 2Ch + .byte 2Dh + .byte 2Eh + .byte 2Fh + .byte 30h + .byte 31h + .byte 32h + .byte 33h + .byte 34h + .byte 35h + .byte 36h + .byte 37h + .byte 38h + .byte 39h + .byte 3Ah + .byte 3Bh + .byte 3Ch + .byte 3Dh + .byte 3Eh + .byte 3Fh + .byte 40h + .byte 41h + .byte 42h + .byte 43h + .byte 44h + .byte 45h + .byte 46h + .byte 47h + .byte 48h + .byte 49h + .byte 4Ah + .byte 4Bh + .byte 4Ch + .byte 4Dh + .byte 4Eh + .byte 4Fh + .byte 50h + .byte 51h + .byte 52h + .byte 53h + .byte 54h + .byte 55h + .byte 56h + .byte 57h + .byte 58h + .byte 59h + .byte 5Ah + .byte 5Bh + .byte 5Ch + .byte 5Dh + .byte 5Eh + .byte 5Fh + .byte 60h + .byte 61h + .byte 62h + .byte 63h + .byte 64h + .byte 65h + .byte 66h + .byte 67h + .byte 68h + .byte 69h + .byte 6Ah + .byte 6Bh + .byte 6Ch + .byte 6Dh + .byte 6Eh + .byte 6Fh + .byte 70h + .byte 71h + .byte 72h + .byte 73h + .byte 74h + .byte 75h + .byte 76h + .byte 77h + .byte 78h + .byte 79h + .byte 7Ah + .byte 7Bh + .byte 7Ch + .byte 7Dh + .byte 7Eh + .byte 7Fh + .byte 80h + .byte 81h + .byte 82h + .byte 83h + .byte 84h + .byte 85h + .byte 86h + .byte 87h + .byte 88h + .byte 89h + .byte 8Ah + .byte 8Bh + .byte 8Ch + .byte 8Dh + .byte 8Eh + .byte 8Fh + .byte 90h + .byte 91h + .byte 92h + .byte 93h + .byte 94h + .byte 95h + .byte 96h + .byte 97h + .byte 98h + .byte 99h + .byte 9Ah + .byte 9Bh + .byte 9Ch + .byte 9Dh + .byte 9Eh + .byte 9Fh + .byte 0A0h + .byte 0A1h + .byte 0A2h + .byte 0A3h + .byte 0A4h + .byte 0A5h + .byte 0A6h + .byte 0A7h + .byte 0A8h + .byte 0A9h + .byte 0AAh + .byte 0ABh + .byte 0ACh + .byte 0ADh + .byte 0AEh + .byte 0AFh + .byte 0B0h + .byte 0B1h + .byte 0B2h + .byte 0B3h + .byte 0B4h + .byte 0B5h + .byte 0B6h + .byte 0B7h + .byte 0B8h + .byte 0B9h + .byte 0BAh + .byte 0BBh + .byte 0BCh + .byte 0BDh + .byte 0BEh + .byte 0BFh + .byte 0C0h + .byte 0C1h + .byte 0C2h + .byte 0C3h + .byte 0C4h + .byte 0C5h + .byte 0C6h + .byte 0C7h + .byte 0C8h + .byte 0C9h + .byte 0CAh + .byte 0CBh + .byte 0CCh + .byte 0CDh + .byte 0CEh + .byte 0CFh + .byte 0D0h + .byte 0D1h + .byte 0D2h + .byte 0D3h + .byte 0D4h + .byte 0D5h + .byte 0D6h + .byte 0D7h + .byte 0D8h + .byte 0D9h + .byte 0DAh + .byte 0DBh + .byte 0DCh + .byte 0DDh + .byte 0DEh + .byte 0DFh + .byte 0E0h + .byte 0E1h + .byte 0E2h + .byte 0E3h + .byte 0E4h + .byte 0E5h + .byte 0E6h + .byte 0E7h + .byte 0E8h + .byte 0E9h + .byte 0EAh + .byte 0EBh + .byte 0ECh + .byte 0EDh + .byte 0EEh + .byte 0EFh + .byte 0F0h + .byte 0F1h + .byte 0F2h + .byte 0F3h + .byte 0F4h + .byte 0F5h + .byte 0F6h + .byte 0F7h + .byte 0F8h + .byte 0F9h + .byte 0FAh + .byte 0FBh + .byte 0FCh + .byte 0FDh + .byte 0FEh + .byte 0FFh + + ; alternative 2-digit hex values + .byte 00h + .byte 01h + .byte 02h + .byte 03h + .byte 04h + .byte 05h + .byte 06h + .byte 07h + .byte 08h + .byte 09h + .byte 0ah + .byte 0bh + .byte 0ch + .byte 0dh + .byte 0eh + .byte 0fh + .byte 10h + .byte 11h + .byte 12h + .byte 13h + .byte 14h + .byte 15h + .byte 16h + .byte 17h + .byte 18h + .byte 19h + .byte 1ah + .byte 1bh + .byte 1ch + .byte 1dh + .byte 1eh + .byte 1fh + .byte 20h + .byte 21h + .byte 22h + .byte 23h + .byte 24h + .byte 25h + .byte 26h + .byte 27h + .byte 28h + .byte 29h + .byte 2ah + .byte 2bh + .byte 2ch + .byte 2dh + .byte 2eh + .byte 2fh + .byte 30h + .byte 31h + .byte 32h + .byte 33h + .byte 34h + .byte 35h + .byte 36h + .byte 37h + .byte 38h + .byte 39h + .byte 3ah + .byte 3bh + .byte 3ch + .byte 3dh + .byte 3eh + .byte 3fh + .byte 40h + .byte 41h + .byte 42h + .byte 43h + .byte 44h + .byte 45h + .byte 46h + .byte 47h + .byte 48h + .byte 49h + .byte 4ah + .byte 4bh + .byte 4ch + .byte 4dh + .byte 4eh + .byte 4fh + .byte 50h + .byte 51h + .byte 52h + .byte 53h + .byte 54h + .byte 55h + .byte 56h + .byte 57h + .byte 58h + .byte 59h + .byte 5ah + .byte 5bh + .byte 5ch + .byte 5dh + .byte 5eh + .byte 5fh + .byte 60h + .byte 61h + .byte 62h + .byte 63h + .byte 64h + .byte 65h + .byte 66h + .byte 67h + .byte 68h + .byte 69h + .byte 6ah + .byte 6bh + .byte 6ch + .byte 6dh + .byte 6eh + .byte 6fh + .byte 70h + .byte 71h + .byte 72h + .byte 73h + .byte 74h + .byte 75h + .byte 76h + .byte 77h + .byte 78h + .byte 79h + .byte 7ah + .byte 7bh + .byte 7ch + .byte 7dh + .byte 7eh + .byte 7fh + .byte 80h + .byte 81h + .byte 82h + .byte 83h + .byte 84h + .byte 85h + .byte 86h + .byte 87h + .byte 88h + .byte 89h + .byte 8ah + .byte 8bh + .byte 8ch + .byte 8dh + .byte 8eh + .byte 8fh + .byte 90h + .byte 91h + .byte 92h + .byte 93h + .byte 94h + .byte 95h + .byte 96h + .byte 97h + .byte 98h + .byte 99h + .byte 9ah + .byte 9bh + .byte 9ch + .byte 9dh + .byte 9eh + .byte 9fh + .byte 0a0h + .byte 0a1h + .byte 0a2h + .byte 0a3h + .byte 0a4h + .byte 0a5h + .byte 0a6h + .byte 0a7h + .byte 0a8h + .byte 0a9h + .byte 0aah + .byte 0abh + .byte 0ach + .byte 0adh + .byte 0aeh + .byte 0afh + .byte 0b0h + .byte 0b1h + .byte 0b2h + .byte 0b3h + .byte 0b4h + .byte 0b5h + .byte 0b6h + .byte 0b7h + .byte 0b8h + .byte 0b9h + .byte 0bah + .byte 0bbh + .byte 0bch + .byte 0bdh + .byte 0beh + .byte 0bfh + .byte 0c0h + .byte 0c1h + .byte 0c2h + .byte 0c3h + .byte 0c4h + .byte 0c5h + .byte 0c6h + .byte 0c7h + .byte 0c8h + .byte 0c9h + .byte 0cah + .byte 0cbh + .byte 0cch + .byte 0cdh + .byte 0ceh + .byte 0cfh + .byte 0d0h + .byte 0d1h + .byte 0d2h + .byte 0d3h + .byte 0d4h + .byte 0d5h + .byte 0d6h + .byte 0d7h + .byte 0d8h + .byte 0d9h + .byte 0dah + .byte 0dbh + .byte 0dch + .byte 0ddh + .byte 0deh + .byte 0dfh + .byte 0e0h + .byte 0e1h + .byte 0e2h + .byte 0e3h + .byte 0e4h + .byte 0e5h + .byte 0e6h + .byte 0e7h + .byte 0e8h + .byte 0e9h + .byte 0eah + .byte 0ebh + .byte 0ech + .byte 0edh + .byte 0eeh + .byte 0efh + .byte 0f0h + .byte 0f1h + .byte 0f2h + .byte 0f3h + .byte 0f4h + .byte 0f5h + .byte 0f6h + .byte 0f7h + .byte 0f8h + .byte 0f9h + .byte 0fah + .byte 0fbh + .byte 0fch + .byte 0fdh + .byte 0feh + .byte 0ffh + + ; alternative 2-digit hex values, uppercase + .byte 00h + .byte 01h + .byte 02h + .byte 03h + .byte 04h + .byte 05h + .byte 06h + .byte 07h + .byte 08h + .byte 09h + .byte 0Ah + .byte 0Bh + .byte 0Ch + .byte 0Dh + .byte 0Eh + .byte 0Fh + .byte 10h + .byte 11h + .byte 12h + .byte 13h + .byte 14h + .byte 15h + .byte 16h + .byte 17h + .byte 18h + .byte 19h + .byte 1Ah + .byte 1Bh + .byte 1Ch + .byte 1Dh + .byte 1Eh + .byte 1Fh + .byte 20h + .byte 21h + .byte 22h + .byte 23h + .byte 24h + .byte 25h + .byte 26h + .byte 27h + .byte 28h + .byte 29h + .byte 2Ah + .byte 2Bh + .byte 2Ch + .byte 2Dh + .byte 2Eh + .byte 2Fh + .byte 30h + .byte 31h + .byte 32h + .byte 33h + .byte 34h + .byte 35h + .byte 36h + .byte 37h + .byte 38h + .byte 39h + .byte 3Ah + .byte 3Bh + .byte 3Ch + .byte 3Dh + .byte 3Eh + .byte 3Fh + .byte 40h + .byte 41h + .byte 42h + .byte 43h + .byte 44h + .byte 45h + .byte 46h + .byte 47h + .byte 48h + .byte 49h + .byte 4Ah + .byte 4Bh + .byte 4Ch + .byte 4Dh + .byte 4Eh + .byte 4Fh + .byte 50h + .byte 51h + .byte 52h + .byte 53h + .byte 54h + .byte 55h + .byte 56h + .byte 57h + .byte 58h + .byte 59h + .byte 5Ah + .byte 5Bh + .byte 5Ch + .byte 5Dh + .byte 5Eh + .byte 5Fh + .byte 60h + .byte 61h + .byte 62h + .byte 63h + .byte 64h + .byte 65h + .byte 66h + .byte 67h + .byte 68h + .byte 69h + .byte 6Ah + .byte 6Bh + .byte 6Ch + .byte 6Dh + .byte 6Eh + .byte 6Fh + .byte 70h + .byte 71h + .byte 72h + .byte 73h + .byte 74h + .byte 75h + .byte 76h + .byte 77h + .byte 78h + .byte 79h + .byte 7Ah + .byte 7Bh + .byte 7Ch + .byte 7Dh + .byte 7Eh + .byte 7Fh + .byte 80h + .byte 81h + .byte 82h + .byte 83h + .byte 84h + .byte 85h + .byte 86h + .byte 87h + .byte 88h + .byte 89h + .byte 8Ah + .byte 8Bh + .byte 8Ch + .byte 8Dh + .byte 8Eh + .byte 8Fh + .byte 90h + .byte 91h + .byte 92h + .byte 93h + .byte 94h + .byte 95h + .byte 96h + .byte 97h + .byte 98h + .byte 99h + .byte 9Ah + .byte 9Bh + .byte 9Ch + .byte 9Dh + .byte 9Eh + .byte 9Fh + .byte 0A0h + .byte 0A1h + .byte 0A2h + .byte 0A3h + .byte 0A4h + .byte 0A5h + .byte 0A6h + .byte 0A7h + .byte 0A8h + .byte 0A9h + .byte 0AAh + .byte 0ABh + .byte 0ACh + .byte 0ADh + .byte 0AEh + .byte 0AFh + .byte 0B0h + .byte 0B1h + .byte 0B2h + .byte 0B3h + .byte 0B4h + .byte 0B5h + .byte 0B6h + .byte 0B7h + .byte 0B8h + .byte 0B9h + .byte 0BAh + .byte 0BBh + .byte 0BCh + .byte 0BDh + .byte 0BEh + .byte 0BFh + .byte 0C0h + .byte 0C1h + .byte 0C2h + .byte 0C3h + .byte 0C4h + .byte 0C5h + .byte 0C6h + .byte 0C7h + .byte 0C8h + .byte 0C9h + .byte 0CAh + .byte 0CBh + .byte 0CCh + .byte 0CDh + .byte 0CEh + .byte 0CFh + .byte 0D0h + .byte 0D1h + .byte 0D2h + .byte 0D3h + .byte 0D4h + .byte 0D5h + .byte 0D6h + .byte 0D7h + .byte 0D8h + .byte 0D9h + .byte 0DAh + .byte 0DBh + .byte 0DCh + .byte 0DDh + .byte 0DEh + .byte 0DFh + .byte 0E0h + .byte 0E1h + .byte 0E2h + .byte 0E3h + .byte 0E4h + .byte 0E5h + .byte 0E6h + .byte 0E7h + .byte 0E8h + .byte 0E9h + .byte 0EAh + .byte 0EBh + .byte 0ECh + .byte 0EDh + .byte 0EEh + .byte 0EFh + .byte 0F0h + .byte 0F1h + .byte 0F2h + .byte 0F3h + .byte 0F4h + .byte 0F5h + .byte 0F6h + .byte 0F7h + .byte 0F8h + .byte 0F9h + .byte 0FAh + .byte 0FBh + .byte 0FCh + .byte 0FDh + .byte 0FEh + .byte 0FFh + + ; alternative hex values, always leading zero + .byte 00h + .byte 01h + .byte 02h + .byte 03h + .byte 04h + .byte 05h + .byte 06h + .byte 07h + .byte 08h + .byte 09h + .byte 0ah + .byte 0bh + .byte 0ch + .byte 0dh + .byte 0eh + .byte 0fh + .byte 010h + .byte 011h + .byte 012h + .byte 013h + .byte 014h + .byte 015h + .byte 016h + .byte 017h + .byte 018h + .byte 019h + .byte 01ah + .byte 01bh + .byte 01ch + .byte 01dh + .byte 01eh + .byte 01fh + .byte 020h + .byte 021h + .byte 022h + .byte 023h + .byte 024h + .byte 025h + .byte 026h + .byte 027h + .byte 028h + .byte 029h + .byte 02ah + .byte 02bh + .byte 02ch + .byte 02dh + .byte 02eh + .byte 02fh + .byte 030h + .byte 031h + .byte 032h + .byte 033h + .byte 034h + .byte 035h + .byte 036h + .byte 037h + .byte 038h + .byte 039h + .byte 03ah + .byte 03bh + .byte 03ch + .byte 03dh + .byte 03eh + .byte 03fh + .byte 040h + .byte 041h + .byte 042h + .byte 043h + .byte 044h + .byte 045h + .byte 046h + .byte 047h + .byte 048h + .byte 049h + .byte 04ah + .byte 04bh + .byte 04ch + .byte 04dh + .byte 04eh + .byte 04fh + .byte 050h + .byte 051h + .byte 052h + .byte 053h + .byte 054h + .byte 055h + .byte 056h + .byte 057h + .byte 058h + .byte 059h + .byte 05ah + .byte 05bh + .byte 05ch + .byte 05dh + .byte 05eh + .byte 05fh + .byte 060h + .byte 061h + .byte 062h + .byte 063h + .byte 064h + .byte 065h + .byte 066h + .byte 067h + .byte 068h + .byte 069h + .byte 06ah + .byte 06bh + .byte 06ch + .byte 06dh + .byte 06eh + .byte 06fh + .byte 070h + .byte 071h + .byte 072h + .byte 073h + .byte 074h + .byte 075h + .byte 076h + .byte 077h + .byte 078h + .byte 079h + .byte 07ah + .byte 07bh + .byte 07ch + .byte 07dh + .byte 07eh + .byte 07fh + .byte 080h + .byte 081h + .byte 082h + .byte 083h + .byte 084h + .byte 085h + .byte 086h + .byte 087h + .byte 088h + .byte 089h + .byte 08ah + .byte 08bh + .byte 08ch + .byte 08dh + .byte 08eh + .byte 08fh + .byte 090h + .byte 091h + .byte 092h + .byte 093h + .byte 094h + .byte 095h + .byte 096h + .byte 097h + .byte 098h + .byte 099h + .byte 09ah + .byte 09bh + .byte 09ch + .byte 09dh + .byte 09eh + .byte 09fh + .byte 0a0h + .byte 0a1h + .byte 0a2h + .byte 0a3h + .byte 0a4h + .byte 0a5h + .byte 0a6h + .byte 0a7h + .byte 0a8h + .byte 0a9h + .byte 0aah + .byte 0abh + .byte 0ach + .byte 0adh + .byte 0aeh + .byte 0afh + .byte 0b0h + .byte 0b1h + .byte 0b2h + .byte 0b3h + .byte 0b4h + .byte 0b5h + .byte 0b6h + .byte 0b7h + .byte 0b8h + .byte 0b9h + .byte 0bah + .byte 0bbh + .byte 0bch + .byte 0bdh + .byte 0beh + .byte 0bfh + .byte 0c0h + .byte 0c1h + .byte 0c2h + .byte 0c3h + .byte 0c4h + .byte 0c5h + .byte 0c6h + .byte 0c7h + .byte 0c8h + .byte 0c9h + .byte 0cah + .byte 0cbh + .byte 0cch + .byte 0cdh + .byte 0ceh + .byte 0cfh + .byte 0d0h + .byte 0d1h + .byte 0d2h + .byte 0d3h + .byte 0d4h + .byte 0d5h + .byte 0d6h + .byte 0d7h + .byte 0d8h + .byte 0d9h + .byte 0dah + .byte 0dbh + .byte 0dch + .byte 0ddh + .byte 0deh + .byte 0dfh + .byte 0e0h + .byte 0e1h + .byte 0e2h + .byte 0e3h + .byte 0e4h + .byte 0e5h + .byte 0e6h + .byte 0e7h + .byte 0e8h + .byte 0e9h + .byte 0eah + .byte 0ebh + .byte 0ech + .byte 0edh + .byte 0eeh + .byte 0efh + .byte 0f0h + .byte 0f1h + .byte 0f2h + .byte 0f3h + .byte 0f4h + .byte 0f5h + .byte 0f6h + .byte 0f7h + .byte 0f8h + .byte 0f9h + .byte 0fah + .byte 0fbh + .byte 0fch + .byte 0fdh + .byte 0feh + .byte 0ffh + + ; binary values, variable length + .byte %0 + .byte %1 + .byte %10 + .byte %11 + .byte %100 + .byte %101 + .byte %110 + .byte %111 + .byte %1000 + .byte %1001 + .byte %1010 + .byte %1011 + .byte %1100 + .byte %1101 + .byte %1110 + .byte %1111 + .byte %10000 + .byte %10001 + .byte %10010 + .byte %10011 + .byte %10100 + .byte %10101 + .byte %10110 + .byte %10111 + .byte %11000 + .byte %11001 + .byte %11010 + .byte %11011 + .byte %11100 + .byte %11101 + .byte %11110 + .byte %11111 + .byte %100000 + .byte %100001 + .byte %100010 + .byte %100011 + .byte %100100 + .byte %100101 + .byte %100110 + .byte %100111 + .byte %101000 + .byte %101001 + .byte %101010 + .byte %101011 + .byte %101100 + .byte %101101 + .byte %101110 + .byte %101111 + .byte %110000 + .byte %110001 + .byte %110010 + .byte %110011 + .byte %110100 + .byte %110101 + .byte %110110 + .byte %110111 + .byte %111000 + .byte %111001 + .byte %111010 + .byte %111011 + .byte %111100 + .byte %111101 + .byte %111110 + .byte %111111 + .byte %1000000 + .byte %1000001 + .byte %1000010 + .byte %1000011 + .byte %1000100 + .byte %1000101 + .byte %1000110 + .byte %1000111 + .byte %1001000 + .byte %1001001 + .byte %1001010 + .byte %1001011 + .byte %1001100 + .byte %1001101 + .byte %1001110 + .byte %1001111 + .byte %1010000 + .byte %1010001 + .byte %1010010 + .byte %1010011 + .byte %1010100 + .byte %1010101 + .byte %1010110 + .byte %1010111 + .byte %1011000 + .byte %1011001 + .byte %1011010 + .byte %1011011 + .byte %1011100 + .byte %1011101 + .byte %1011110 + .byte %1011111 + .byte %1100000 + .byte %1100001 + .byte %1100010 + .byte %1100011 + .byte %1100100 + .byte %1100101 + .byte %1100110 + .byte %1100111 + .byte %1101000 + .byte %1101001 + .byte %1101010 + .byte %1101011 + .byte %1101100 + .byte %1101101 + .byte %1101110 + .byte %1101111 + .byte %1110000 + .byte %1110001 + .byte %1110010 + .byte %1110011 + .byte %1110100 + .byte %1110101 + .byte %1110110 + .byte %1110111 + .byte %1111000 + .byte %1111001 + .byte %1111010 + .byte %1111011 + .byte %1111100 + .byte %1111101 + .byte %1111110 + .byte %1111111 + .byte %10000000 + .byte %10000001 + .byte %10000010 + .byte %10000011 + .byte %10000100 + .byte %10000101 + .byte %10000110 + .byte %10000111 + .byte %10001000 + .byte %10001001 + .byte %10001010 + .byte %10001011 + .byte %10001100 + .byte %10001101 + .byte %10001110 + .byte %10001111 + .byte %10010000 + .byte %10010001 + .byte %10010010 + .byte %10010011 + .byte %10010100 + .byte %10010101 + .byte %10010110 + .byte %10010111 + .byte %10011000 + .byte %10011001 + .byte %10011010 + .byte %10011011 + .byte %10011100 + .byte %10011101 + .byte %10011110 + .byte %10011111 + .byte %10100000 + .byte %10100001 + .byte %10100010 + .byte %10100011 + .byte %10100100 + .byte %10100101 + .byte %10100110 + .byte %10100111 + .byte %10101000 + .byte %10101001 + .byte %10101010 + .byte %10101011 + .byte %10101100 + .byte %10101101 + .byte %10101110 + .byte %10101111 + .byte %10110000 + .byte %10110001 + .byte %10110010 + .byte %10110011 + .byte %10110100 + .byte %10110101 + .byte %10110110 + .byte %10110111 + .byte %10111000 + .byte %10111001 + .byte %10111010 + .byte %10111011 + .byte %10111100 + .byte %10111101 + .byte %10111110 + .byte %10111111 + .byte %11000000 + .byte %11000001 + .byte %11000010 + .byte %11000011 + .byte %11000100 + .byte %11000101 + .byte %11000110 + .byte %11000111 + .byte %11001000 + .byte %11001001 + .byte %11001010 + .byte %11001011 + .byte %11001100 + .byte %11001101 + .byte %11001110 + .byte %11001111 + .byte %11010000 + .byte %11010001 + .byte %11010010 + .byte %11010011 + .byte %11010100 + .byte %11010101 + .byte %11010110 + .byte %11010111 + .byte %11011000 + .byte %11011001 + .byte %11011010 + .byte %11011011 + .byte %11011100 + .byte %11011101 + .byte %11011110 + .byte %11011111 + .byte %11100000 + .byte %11100001 + .byte %11100010 + .byte %11100011 + .byte %11100100 + .byte %11100101 + .byte %11100110 + .byte %11100111 + .byte %11101000 + .byte %11101001 + .byte %11101010 + .byte %11101011 + .byte %11101100 + .byte %11101101 + .byte %11101110 + .byte %11101111 + .byte %11110000 + .byte %11110001 + .byte %11110010 + .byte %11110011 + .byte %11110100 + .byte %11110101 + .byte %11110110 + .byte %11110111 + .byte %11111000 + .byte %11111001 + .byte %11111010 + .byte %11111011 + .byte %11111100 + .byte %11111101 + .byte %11111110 + .byte %11111111 + + ; binary values, full length + .byte %00000000 + .byte %00000001 + .byte %00000010 + .byte %00000011 + .byte %00000100 + .byte %00000101 + .byte %00000110 + .byte %00000111 + .byte %00001000 + .byte %00001001 + .byte %00001010 + .byte %00001011 + .byte %00001100 + .byte %00001101 + .byte %00001110 + .byte %00001111 + .byte %00010000 + .byte %00010001 + .byte %00010010 + .byte %00010011 + .byte %00010100 + .byte %00010101 + .byte %00010110 + .byte %00010111 + .byte %00011000 + .byte %00011001 + .byte %00011010 + .byte %00011011 + .byte %00011100 + .byte %00011101 + .byte %00011110 + .byte %00011111 + .byte %00100000 + .byte %00100001 + .byte %00100010 + .byte %00100011 + .byte %00100100 + .byte %00100101 + .byte %00100110 + .byte %00100111 + .byte %00101000 + .byte %00101001 + .byte %00101010 + .byte %00101011 + .byte %00101100 + .byte %00101101 + .byte %00101110 + .byte %00101111 + .byte %00110000 + .byte %00110001 + .byte %00110010 + .byte %00110011 + .byte %00110100 + .byte %00110101 + .byte %00110110 + .byte %00110111 + .byte %00111000 + .byte %00111001 + .byte %00111010 + .byte %00111011 + .byte %00111100 + .byte %00111101 + .byte %00111110 + .byte %00111111 + .byte %01000000 + .byte %01000001 + .byte %01000010 + .byte %01000011 + .byte %01000100 + .byte %01000101 + .byte %01000110 + .byte %01000111 + .byte %01001000 + .byte %01001001 + .byte %01001010 + .byte %01001011 + .byte %01001100 + .byte %01001101 + .byte %01001110 + .byte %01001111 + .byte %01010000 + .byte %01010001 + .byte %01010010 + .byte %01010011 + .byte %01010100 + .byte %01010101 + .byte %01010110 + .byte %01010111 + .byte %01011000 + .byte %01011001 + .byte %01011010 + .byte %01011011 + .byte %01011100 + .byte %01011101 + .byte %01011110 + .byte %01011111 + .byte %01100000 + .byte %01100001 + .byte %01100010 + .byte %01100011 + .byte %01100100 + .byte %01100101 + .byte %01100110 + .byte %01100111 + .byte %01101000 + .byte %01101001 + .byte %01101010 + .byte %01101011 + .byte %01101100 + .byte %01101101 + .byte %01101110 + .byte %01101111 + .byte %01110000 + .byte %01110001 + .byte %01110010 + .byte %01110011 + .byte %01110100 + .byte %01110101 + .byte %01110110 + .byte %01110111 + .byte %01111000 + .byte %01111001 + .byte %01111010 + .byte %01111011 + .byte %01111100 + .byte %01111101 + .byte %01111110 + .byte %01111111 + .byte %10000000 + .byte %10000001 + .byte %10000010 + .byte %10000011 + .byte %10000100 + .byte %10000101 + .byte %10000110 + .byte %10000111 + .byte %10001000 + .byte %10001001 + .byte %10001010 + .byte %10001011 + .byte %10001100 + .byte %10001101 + .byte %10001110 + .byte %10001111 + .byte %10010000 + .byte %10010001 + .byte %10010010 + .byte %10010011 + .byte %10010100 + .byte %10010101 + .byte %10010110 + .byte %10010111 + .byte %10011000 + .byte %10011001 + .byte %10011010 + .byte %10011011 + .byte %10011100 + .byte %10011101 + .byte %10011110 + .byte %10011111 + .byte %10100000 + .byte %10100001 + .byte %10100010 + .byte %10100011 + .byte %10100100 + .byte %10100101 + .byte %10100110 + .byte %10100111 + .byte %10101000 + .byte %10101001 + .byte %10101010 + .byte %10101011 + .byte %10101100 + .byte %10101101 + .byte %10101110 + .byte %10101111 + .byte %10110000 + .byte %10110001 + .byte %10110010 + .byte %10110011 + .byte %10110100 + .byte %10110101 + .byte %10110110 + .byte %10110111 + .byte %10111000 + .byte %10111001 + .byte %10111010 + .byte %10111011 + .byte %10111100 + .byte %10111101 + .byte %10111110 + .byte %10111111 + .byte %11000000 + .byte %11000001 + .byte %11000010 + .byte %11000011 + .byte %11000100 + .byte %11000101 + .byte %11000110 + .byte %11000111 + .byte %11001000 + .byte %11001001 + .byte %11001010 + .byte %11001011 + .byte %11001100 + .byte %11001101 + .byte %11001110 + .byte %11001111 + .byte %11010000 + .byte %11010001 + .byte %11010010 + .byte %11010011 + .byte %11010100 + .byte %11010101 + .byte %11010110 + .byte %11010111 + .byte %11011000 + .byte %11011001 + .byte %11011010 + .byte %11011011 + .byte %11011100 + .byte %11011101 + .byte %11011110 + .byte %11011111 + .byte %11100000 + .byte %11100001 + .byte %11100010 + .byte %11100011 + .byte %11100100 + .byte %11100101 + .byte %11100110 + .byte %11100111 + .byte %11101000 + .byte %11101001 + .byte %11101010 + .byte %11101011 + .byte %11101100 + .byte %11101101 + .byte %11101110 + .byte %11101111 + .byte %11110000 + .byte %11110001 + .byte %11110010 + .byte %11110011 + .byte %11110100 + .byte %11110101 + .byte %11110110 + .byte %11110111 + .byte %11111000 + .byte %11111001 + .byte %11111010 + .byte %11111011 + .byte %11111100 + .byte %11111101 + .byte %11111110 + .byte %11111111 + + ; some character values + .byte ' ' + .byte '!' + .byte '"' + .byte '#' + .byte '$' + .byte '%' + .byte '&' + .byte ''' + .byte '(' + .byte ')' + .byte '*' + .byte '+' + .byte ',' + .byte '-' + .byte '.' + .byte '/' + .byte '0' + .byte '1' + .byte '2' + .byte '3' + .byte '4' + .byte '5' + .byte '6' + .byte '7' + .byte '8' + .byte '9' + .byte ':' + .byte ';' + .byte '<' + .byte '=' + .byte '>' + .byte '?' + .byte '@' + .byte 'A' + .byte 'B' + .byte 'C' + .byte 'D' + .byte 'E' + .byte 'F' + .byte 'G' + .byte 'H' + .byte 'I' + .byte 'J' + .byte 'K' + .byte 'L' + .byte 'M' + .byte 'N' + .byte 'O' + .byte 'P' + .byte 'Q' + .byte 'R' + .byte 'S' + .byte 'T' + .byte 'U' + .byte 'V' + .byte 'W' + .byte 'X' + .byte 'Y' + .byte 'Z' + .byte '[' + .byte '\' + .byte ']' + .byte '^' + .byte '_' + .byte '`' + .byte 'a' + .byte 'b' + .byte 'c' + .byte 'd' + .byte 'e' + .byte 'f' + .byte 'g' + .byte 'h' + .byte 'i' + .byte 'j' + .byte 'k' + .byte 'l' + .byte 'm' + .byte 'n' + .byte 'o' + .byte 'p' + .byte 'q' + .byte 'r' + .byte 's' + .byte 't' + .byte 'u' + .byte 'v' + .byte 'w' + .byte 'x' + .byte 'y' + .byte 'z' + .byte '{' + .byte '|' + .byte '}' + .byte '~' + + ; multiple values on one line, decimal + .byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .byte 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .byte 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 + .byte 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 + .byte 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 + .byte 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95 + .byte 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 + .byte 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .byte 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .byte 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 + .byte 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 + .byte 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 + .byte 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 + .byte 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 + .byte 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 + .byte 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + + ; multiple values on one line, hex + .byte $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .byte $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .byte $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f + .byte $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f + .byte $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f + .byte $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$5b,$5c,$5d,$5e,$5f + .byte $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f + .byte $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .byte $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .byte $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f + .byte $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af + .byte $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf + .byte $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf + .byte $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df + .byte $e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef + .byte $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + + ; multiple values on one line, alternative hex + .byte 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .byte 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .byte 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,2ah,2bh,2ch,2dh,2eh,2fh + .byte 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,3ah,3bh,3ch,3dh,3eh,3fh + .byte 40h,41h,42h,43h,44h,45h,46h,47h,48h,49h,4ah,4bh,4ch,4dh,4eh,4fh + .byte 50h,51h,52h,53h,54h,55h,56h,57h,58h,59h,5ah,5bh,5ch,5dh,5eh,5fh + .byte 60h,61h,62h,63h,64h,65h,66h,67h,68h,69h,6ah,6bh,6ch,6dh,6eh,6fh + .byte 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .byte 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .byte 90h,91h,92h,93h,94h,95h,96h,97h,98h,99h,9ah,9bh,9ch,9dh,9eh,9fh + .byte 0a0h,0a1h,0a2h,0a3h,0a4h,0a5h,0a6h,0a7h,0a8h,0a9h,0aah,0abh,0ach,0adh,0aeh,0afh + .byte 0b0h,0b1h,0b2h,0b3h,0b4h,0b5h,0b6h,0b7h,0b8h,0b9h,0bah,0bbh,0bch,0bdh,0beh,0bfh + .byte 0c0h,0c1h,0c2h,0c3h,0c4h,0c5h,0c6h,0c7h,0c8h,0c9h,0cah,0cbh,0cch,0cdh,0ceh,0cfh + .byte 0d0h,0d1h,0d2h,0d3h,0d4h,0d5h,0d6h,0d7h,0d8h,0d9h,0dah,0dbh,0dch,0ddh,0deh,0dfh + .byte 0e0h,0e1h,0e2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0e9h,0eah,0ebh,0ech,0edh,0eeh,0efh + .byte 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + + ; multiple values on one line, characters + .byte ' ','!','"','#','$','%','&',''','(',')','*','+',',','-','.','/' + .byte '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?' + .byte '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O' + .byte 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_' + .byte '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o' + .byte 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~' + + ; some character strings + .byte " !#$%&'()*+,-." + .byte "0123456789:;<=>" + .byte "@ABCDEFGHIJKLMN" + .byte "PQRSTUVWXYZ[\]^" + .byte "`abcdefghijklmn" + .byte "pqrstuvwxyz{|}" + + ; mix some variants + .byte 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/101-byt.bin-ref b/test/asm/listing/101-byt.bin-ref new file mode 100644 index 0000000000000000000000000000000000000000..7deb4dffd90f773f70d6ddd872e73d3a59536355 GIT binary patch literal 4390 zcmZQzWMXDvWn<^y<l^Sx<>MC+6cQE@6%&_`l#-T_m6KOcR8m$^Ra4i{)Y8_`)zddH zG%_|ZH8Z!cw6eCbwX=6{baHlab#wRd^z!!c_45x13<?ej4GWKmjEatljf+o6OiE5k zO-s+n%*xKm&C4$+EGjN3Ei136tg5c5t*dWnY-(<4ZENr7?CS36?dzW~anj@|Q>RUz zF>}`JIdkXDU$Ah|;w4L$Enl&6)#^2C*R9{Mant54TeofBv2)k%J$v`<KXCBS;Uh<n z9Y1mM)af&4&z-+;@zUihSFc^aar4&gJ9qEhfAH|p<0ns_J%91?)$2EJ-@X6v@zduo zU%!3-@$=X3KY#!IXBhSWX#9_+|Iz$ETK<ie|D*NaX#GFh{uyomjkbSBO#7e4{hQJ5 z#c20(BzLcAoV^qjkq0Nx#wO5)CeTJE&;}+@$0fK0nFSM*svM&XELW{swfY|b-;7jQ literal 0 HcmV?d00001 diff --git a/test/asm/listing/101-byt.list-ref b/test/asm/listing/101-byt.list-ref new file mode 100644 index 000000000..3109ade61 --- /dev/null +++ b/test/asm/listing/101-byt.list-ref @@ -0,0 +1,3652 @@ +Main file : 101-byt.s +Current file: 101-byt.s + +000000r 1 ; 2022-06-15 Spiro Trikaliotis +000000r 1 +000000r 1 +000000r 1 ; upper case pseudo-op +000000r 1 00 .BYT 0 +000001r 1 01 .BYT 1 +000002r 1 02 .BYT 2 +000003r 1 03 .BYT 3 +000004r 1 04 .BYT 4 +000005r 1 05 .BYT 5 +000006r 1 06 .BYT 6 +000007r 1 07 .BYT 7 +000008r 1 08 .BYT 8 +000009r 1 09 .BYT 9 +00000Ar 1 0A .BYT 10 +00000Br 1 0B .BYT 11 +00000Cr 1 0C .BYT 12 +00000Dr 1 0D .BYT 13 +00000Er 1 0E .BYT 14 +00000Fr 1 0F .BYT 15 +000010r 1 10 .BYT 16 +000011r 1 11 .BYT 17 +000012r 1 12 .BYT 18 +000013r 1 13 .BYT 19 +000014r 1 14 .BYT 20 +000015r 1 15 .BYT 21 +000016r 1 16 .BYT 22 +000017r 1 17 .BYT 23 +000018r 1 18 .BYT 24 +000019r 1 19 .BYT 25 +00001Ar 1 1A .BYT 26 +00001Br 1 1B .BYT 27 +00001Cr 1 1C .BYT 28 +00001Dr 1 1D .BYT 29 +00001Er 1 1E .BYT 30 +00001Fr 1 1F .BYT 31 +000020r 1 20 .BYT 32 +000021r 1 21 .BYT 33 +000022r 1 22 .BYT 34 +000023r 1 23 .BYT 35 +000024r 1 24 .BYT 36 +000025r 1 25 .BYT 37 +000026r 1 26 .BYT 38 +000027r 1 27 .BYT 39 +000028r 1 28 .BYT 40 +000029r 1 29 .BYT 41 +00002Ar 1 2A .BYT 42 +00002Br 1 2B .BYT 43 +00002Cr 1 2C .BYT 44 +00002Dr 1 2D .BYT 45 +00002Er 1 2E .BYT 46 +00002Fr 1 2F .BYT 47 +000030r 1 30 .BYT 48 +000031r 1 31 .BYT 49 +000032r 1 32 .BYT 50 +000033r 1 33 .BYT 51 +000034r 1 34 .BYT 52 +000035r 1 35 .BYT 53 +000036r 1 36 .BYT 54 +000037r 1 37 .BYT 55 +000038r 1 38 .BYT 56 +000039r 1 39 .BYT 57 +00003Ar 1 3A .BYT 58 +00003Br 1 3B .BYT 59 +00003Cr 1 3C .BYT 60 +00003Dr 1 3D .BYT 61 +00003Er 1 3E .BYT 62 +00003Fr 1 3F .BYT 63 +000040r 1 40 .BYT 64 +000041r 1 41 .BYT 65 +000042r 1 42 .BYT 66 +000043r 1 43 .BYT 67 +000044r 1 44 .BYT 68 +000045r 1 45 .BYT 69 +000046r 1 46 .BYT 70 +000047r 1 47 .BYT 71 +000048r 1 48 .BYT 72 +000049r 1 49 .BYT 73 +00004Ar 1 4A .BYT 74 +00004Br 1 4B .BYT 75 +00004Cr 1 4C .BYT 76 +00004Dr 1 4D .BYT 77 +00004Er 1 4E .BYT 78 +00004Fr 1 4F .BYT 79 +000050r 1 50 .BYT 80 +000051r 1 51 .BYT 81 +000052r 1 52 .BYT 82 +000053r 1 53 .BYT 83 +000054r 1 54 .BYT 84 +000055r 1 55 .BYT 85 +000056r 1 56 .BYT 86 +000057r 1 57 .BYT 87 +000058r 1 58 .BYT 88 +000059r 1 59 .BYT 89 +00005Ar 1 5A .BYT 90 +00005Br 1 5B .BYT 91 +00005Cr 1 5C .BYT 92 +00005Dr 1 5D .BYT 93 +00005Er 1 5E .BYT 94 +00005Fr 1 5F .BYT 95 +000060r 1 60 .BYT 96 +000061r 1 61 .BYT 97 +000062r 1 62 .BYT 98 +000063r 1 63 .BYT 99 +000064r 1 64 .BYT 100 +000065r 1 65 .BYT 101 +000066r 1 66 .BYT 102 +000067r 1 67 .BYT 103 +000068r 1 68 .BYT 104 +000069r 1 69 .BYT 105 +00006Ar 1 6A .BYT 106 +00006Br 1 6B .BYT 107 +00006Cr 1 6C .BYT 108 +00006Dr 1 6D .BYT 109 +00006Er 1 6E .BYT 110 +00006Fr 1 6F .BYT 111 +000070r 1 70 .BYT 112 +000071r 1 71 .BYT 113 +000072r 1 72 .BYT 114 +000073r 1 73 .BYT 115 +000074r 1 74 .BYT 116 +000075r 1 75 .BYT 117 +000076r 1 76 .BYT 118 +000077r 1 77 .BYT 119 +000078r 1 78 .BYT 120 +000079r 1 79 .BYT 121 +00007Ar 1 7A .BYT 122 +00007Br 1 7B .BYT 123 +00007Cr 1 7C .BYT 124 +00007Dr 1 7D .BYT 125 +00007Er 1 7E .BYT 126 +00007Fr 1 7F .BYT 127 +000080r 1 80 .BYT 128 +000081r 1 81 .BYT 129 +000082r 1 82 .BYT 130 +000083r 1 83 .BYT 131 +000084r 1 84 .BYT 132 +000085r 1 85 .BYT 133 +000086r 1 86 .BYT 134 +000087r 1 87 .BYT 135 +000088r 1 88 .BYT 136 +000089r 1 89 .BYT 137 +00008Ar 1 8A .BYT 138 +00008Br 1 8B .BYT 139 +00008Cr 1 8C .BYT 140 +00008Dr 1 8D .BYT 141 +00008Er 1 8E .BYT 142 +00008Fr 1 8F .BYT 143 +000090r 1 90 .BYT 144 +000091r 1 91 .BYT 145 +000092r 1 92 .BYT 146 +000093r 1 93 .BYT 147 +000094r 1 94 .BYT 148 +000095r 1 95 .BYT 149 +000096r 1 96 .BYT 150 +000097r 1 97 .BYT 151 +000098r 1 98 .BYT 152 +000099r 1 99 .BYT 153 +00009Ar 1 9A .BYT 154 +00009Br 1 9B .BYT 155 +00009Cr 1 9C .BYT 156 +00009Dr 1 9D .BYT 157 +00009Er 1 9E .BYT 158 +00009Fr 1 9F .BYT 159 +0000A0r 1 A0 .BYT 160 +0000A1r 1 A1 .BYT 161 +0000A2r 1 A2 .BYT 162 +0000A3r 1 A3 .BYT 163 +0000A4r 1 A4 .BYT 164 +0000A5r 1 A5 .BYT 165 +0000A6r 1 A6 .BYT 166 +0000A7r 1 A7 .BYT 167 +0000A8r 1 A8 .BYT 168 +0000A9r 1 A9 .BYT 169 +0000AAr 1 AA .BYT 170 +0000ABr 1 AB .BYT 171 +0000ACr 1 AC .BYT 172 +0000ADr 1 AD .BYT 173 +0000AEr 1 AE .BYT 174 +0000AFr 1 AF .BYT 175 +0000B0r 1 B0 .BYT 176 +0000B1r 1 B1 .BYT 177 +0000B2r 1 B2 .BYT 178 +0000B3r 1 B3 .BYT 179 +0000B4r 1 B4 .BYT 180 +0000B5r 1 B5 .BYT 181 +0000B6r 1 B6 .BYT 182 +0000B7r 1 B7 .BYT 183 +0000B8r 1 B8 .BYT 184 +0000B9r 1 B9 .BYT 185 +0000BAr 1 BA .BYT 186 +0000BBr 1 BB .BYT 187 +0000BCr 1 BC .BYT 188 +0000BDr 1 BD .BYT 189 +0000BEr 1 BE .BYT 190 +0000BFr 1 BF .BYT 191 +0000C0r 1 C0 .BYT 192 +0000C1r 1 C1 .BYT 193 +0000C2r 1 C2 .BYT 194 +0000C3r 1 C3 .BYT 195 +0000C4r 1 C4 .BYT 196 +0000C5r 1 C5 .BYT 197 +0000C6r 1 C6 .BYT 198 +0000C7r 1 C7 .BYT 199 +0000C8r 1 C8 .BYT 200 +0000C9r 1 C9 .BYT 201 +0000CAr 1 CA .BYT 202 +0000CBr 1 CB .BYT 203 +0000CCr 1 CC .BYT 204 +0000CDr 1 CD .BYT 205 +0000CEr 1 CE .BYT 206 +0000CFr 1 CF .BYT 207 +0000D0r 1 D0 .BYT 208 +0000D1r 1 D1 .BYT 209 +0000D2r 1 D2 .BYT 210 +0000D3r 1 D3 .BYT 211 +0000D4r 1 D4 .BYT 212 +0000D5r 1 D5 .BYT 213 +0000D6r 1 D6 .BYT 214 +0000D7r 1 D7 .BYT 215 +0000D8r 1 D8 .BYT 216 +0000D9r 1 D9 .BYT 217 +0000DAr 1 DA .BYT 218 +0000DBr 1 DB .BYT 219 +0000DCr 1 DC .BYT 220 +0000DDr 1 DD .BYT 221 +0000DEr 1 DE .BYT 222 +0000DFr 1 DF .BYT 223 +0000E0r 1 E0 .BYT 224 +0000E1r 1 E1 .BYT 225 +0000E2r 1 E2 .BYT 226 +0000E3r 1 E3 .BYT 227 +0000E4r 1 E4 .BYT 228 +0000E5r 1 E5 .BYT 229 +0000E6r 1 E6 .BYT 230 +0000E7r 1 E7 .BYT 231 +0000E8r 1 E8 .BYT 232 +0000E9r 1 E9 .BYT 233 +0000EAr 1 EA .BYT 234 +0000EBr 1 EB .BYT 235 +0000ECr 1 EC .BYT 236 +0000EDr 1 ED .BYT 237 +0000EEr 1 EE .BYT 238 +0000EFr 1 EF .BYT 239 +0000F0r 1 F0 .BYT 240 +0000F1r 1 F1 .BYT 241 +0000F2r 1 F2 .BYT 242 +0000F3r 1 F3 .BYT 243 +0000F4r 1 F4 .BYT 244 +0000F5r 1 F5 .BYT 245 +0000F6r 1 F6 .BYT 246 +0000F7r 1 F7 .BYT 247 +0000F8r 1 F8 .BYT 248 +0000F9r 1 F9 .BYT 249 +0000FAr 1 FA .BYT 250 +0000FBr 1 FB .BYT 251 +0000FCr 1 FC .BYT 252 +0000FDr 1 FD .BYT 253 +0000FEr 1 FE .BYT 254 +0000FFr 1 FF .BYT 255 +000100r 1 +000100r 1 ; lower case pseudo-op +000100r 1 00 .byt 0 +000101r 1 01 .byt 1 +000102r 1 02 .byt 2 +000103r 1 03 .byt 3 +000104r 1 04 .byt 4 +000105r 1 05 .byt 5 +000106r 1 06 .byt 6 +000107r 1 07 .byt 7 +000108r 1 08 .byt 8 +000109r 1 09 .byt 9 +00010Ar 1 0A .byt 10 +00010Br 1 0B .byt 11 +00010Cr 1 0C .byt 12 +00010Dr 1 0D .byt 13 +00010Er 1 0E .byt 14 +00010Fr 1 0F .byt 15 +000110r 1 10 .byt 16 +000111r 1 11 .byt 17 +000112r 1 12 .byt 18 +000113r 1 13 .byt 19 +000114r 1 14 .byt 20 +000115r 1 15 .byt 21 +000116r 1 16 .byt 22 +000117r 1 17 .byt 23 +000118r 1 18 .byt 24 +000119r 1 19 .byt 25 +00011Ar 1 1A .byt 26 +00011Br 1 1B .byt 27 +00011Cr 1 1C .byt 28 +00011Dr 1 1D .byt 29 +00011Er 1 1E .byt 30 +00011Fr 1 1F .byt 31 +000120r 1 20 .byt 32 +000121r 1 21 .byt 33 +000122r 1 22 .byt 34 +000123r 1 23 .byt 35 +000124r 1 24 .byt 36 +000125r 1 25 .byt 37 +000126r 1 26 .byt 38 +000127r 1 27 .byt 39 +000128r 1 28 .byt 40 +000129r 1 29 .byt 41 +00012Ar 1 2A .byt 42 +00012Br 1 2B .byt 43 +00012Cr 1 2C .byt 44 +00012Dr 1 2D .byt 45 +00012Er 1 2E .byt 46 +00012Fr 1 2F .byt 47 +000130r 1 30 .byt 48 +000131r 1 31 .byt 49 +000132r 1 32 .byt 50 +000133r 1 33 .byt 51 +000134r 1 34 .byt 52 +000135r 1 35 .byt 53 +000136r 1 36 .byt 54 +000137r 1 37 .byt 55 +000138r 1 38 .byt 56 +000139r 1 39 .byt 57 +00013Ar 1 3A .byt 58 +00013Br 1 3B .byt 59 +00013Cr 1 3C .byt 60 +00013Dr 1 3D .byt 61 +00013Er 1 3E .byt 62 +00013Fr 1 3F .byt 63 +000140r 1 40 .byt 64 +000141r 1 41 .byt 65 +000142r 1 42 .byt 66 +000143r 1 43 .byt 67 +000144r 1 44 .byt 68 +000145r 1 45 .byt 69 +000146r 1 46 .byt 70 +000147r 1 47 .byt 71 +000148r 1 48 .byt 72 +000149r 1 49 .byt 73 +00014Ar 1 4A .byt 74 +00014Br 1 4B .byt 75 +00014Cr 1 4C .byt 76 +00014Dr 1 4D .byt 77 +00014Er 1 4E .byt 78 +00014Fr 1 4F .byt 79 +000150r 1 50 .byt 80 +000151r 1 51 .byt 81 +000152r 1 52 .byt 82 +000153r 1 53 .byt 83 +000154r 1 54 .byt 84 +000155r 1 55 .byt 85 +000156r 1 56 .byt 86 +000157r 1 57 .byt 87 +000158r 1 58 .byt 88 +000159r 1 59 .byt 89 +00015Ar 1 5A .byt 90 +00015Br 1 5B .byt 91 +00015Cr 1 5C .byt 92 +00015Dr 1 5D .byt 93 +00015Er 1 5E .byt 94 +00015Fr 1 5F .byt 95 +000160r 1 60 .byt 96 +000161r 1 61 .byt 97 +000162r 1 62 .byt 98 +000163r 1 63 .byt 99 +000164r 1 64 .byt 100 +000165r 1 65 .byt 101 +000166r 1 66 .byt 102 +000167r 1 67 .byt 103 +000168r 1 68 .byt 104 +000169r 1 69 .byt 105 +00016Ar 1 6A .byt 106 +00016Br 1 6B .byt 107 +00016Cr 1 6C .byt 108 +00016Dr 1 6D .byt 109 +00016Er 1 6E .byt 110 +00016Fr 1 6F .byt 111 +000170r 1 70 .byt 112 +000171r 1 71 .byt 113 +000172r 1 72 .byt 114 +000173r 1 73 .byt 115 +000174r 1 74 .byt 116 +000175r 1 75 .byt 117 +000176r 1 76 .byt 118 +000177r 1 77 .byt 119 +000178r 1 78 .byt 120 +000179r 1 79 .byt 121 +00017Ar 1 7A .byt 122 +00017Br 1 7B .byt 123 +00017Cr 1 7C .byt 124 +00017Dr 1 7D .byt 125 +00017Er 1 7E .byt 126 +00017Fr 1 7F .byt 127 +000180r 1 80 .byt 128 +000181r 1 81 .byt 129 +000182r 1 82 .byt 130 +000183r 1 83 .byt 131 +000184r 1 84 .byt 132 +000185r 1 85 .byt 133 +000186r 1 86 .byt 134 +000187r 1 87 .byt 135 +000188r 1 88 .byt 136 +000189r 1 89 .byt 137 +00018Ar 1 8A .byt 138 +00018Br 1 8B .byt 139 +00018Cr 1 8C .byt 140 +00018Dr 1 8D .byt 141 +00018Er 1 8E .byt 142 +00018Fr 1 8F .byt 143 +000190r 1 90 .byt 144 +000191r 1 91 .byt 145 +000192r 1 92 .byt 146 +000193r 1 93 .byt 147 +000194r 1 94 .byt 148 +000195r 1 95 .byt 149 +000196r 1 96 .byt 150 +000197r 1 97 .byt 151 +000198r 1 98 .byt 152 +000199r 1 99 .byt 153 +00019Ar 1 9A .byt 154 +00019Br 1 9B .byt 155 +00019Cr 1 9C .byt 156 +00019Dr 1 9D .byt 157 +00019Er 1 9E .byt 158 +00019Fr 1 9F .byt 159 +0001A0r 1 A0 .byt 160 +0001A1r 1 A1 .byt 161 +0001A2r 1 A2 .byt 162 +0001A3r 1 A3 .byt 163 +0001A4r 1 A4 .byt 164 +0001A5r 1 A5 .byt 165 +0001A6r 1 A6 .byt 166 +0001A7r 1 A7 .byt 167 +0001A8r 1 A8 .byt 168 +0001A9r 1 A9 .byt 169 +0001AAr 1 AA .byt 170 +0001ABr 1 AB .byt 171 +0001ACr 1 AC .byt 172 +0001ADr 1 AD .byt 173 +0001AEr 1 AE .byt 174 +0001AFr 1 AF .byt 175 +0001B0r 1 B0 .byt 176 +0001B1r 1 B1 .byt 177 +0001B2r 1 B2 .byt 178 +0001B3r 1 B3 .byt 179 +0001B4r 1 B4 .byt 180 +0001B5r 1 B5 .byt 181 +0001B6r 1 B6 .byt 182 +0001B7r 1 B7 .byt 183 +0001B8r 1 B8 .byt 184 +0001B9r 1 B9 .byt 185 +0001BAr 1 BA .byt 186 +0001BBr 1 BB .byt 187 +0001BCr 1 BC .byt 188 +0001BDr 1 BD .byt 189 +0001BEr 1 BE .byt 190 +0001BFr 1 BF .byt 191 +0001C0r 1 C0 .byt 192 +0001C1r 1 C1 .byt 193 +0001C2r 1 C2 .byt 194 +0001C3r 1 C3 .byt 195 +0001C4r 1 C4 .byt 196 +0001C5r 1 C5 .byt 197 +0001C6r 1 C6 .byt 198 +0001C7r 1 C7 .byt 199 +0001C8r 1 C8 .byt 200 +0001C9r 1 C9 .byt 201 +0001CAr 1 CA .byt 202 +0001CBr 1 CB .byt 203 +0001CCr 1 CC .byt 204 +0001CDr 1 CD .byt 205 +0001CEr 1 CE .byt 206 +0001CFr 1 CF .byt 207 +0001D0r 1 D0 .byt 208 +0001D1r 1 D1 .byt 209 +0001D2r 1 D2 .byt 210 +0001D3r 1 D3 .byt 211 +0001D4r 1 D4 .byt 212 +0001D5r 1 D5 .byt 213 +0001D6r 1 D6 .byt 214 +0001D7r 1 D7 .byt 215 +0001D8r 1 D8 .byt 216 +0001D9r 1 D9 .byt 217 +0001DAr 1 DA .byt 218 +0001DBr 1 DB .byt 219 +0001DCr 1 DC .byt 220 +0001DDr 1 DD .byt 221 +0001DEr 1 DE .byt 222 +0001DFr 1 DF .byt 223 +0001E0r 1 E0 .byt 224 +0001E1r 1 E1 .byt 225 +0001E2r 1 E2 .byt 226 +0001E3r 1 E3 .byt 227 +0001E4r 1 E4 .byt 228 +0001E5r 1 E5 .byt 229 +0001E6r 1 E6 .byt 230 +0001E7r 1 E7 .byt 231 +0001E8r 1 E8 .byt 232 +0001E9r 1 E9 .byt 233 +0001EAr 1 EA .byt 234 +0001EBr 1 EB .byt 235 +0001ECr 1 EC .byt 236 +0001EDr 1 ED .byt 237 +0001EEr 1 EE .byt 238 +0001EFr 1 EF .byt 239 +0001F0r 1 F0 .byt 240 +0001F1r 1 F1 .byt 241 +0001F2r 1 F2 .byt 242 +0001F3r 1 F3 .byt 243 +0001F4r 1 F4 .byt 244 +0001F5r 1 F5 .byt 245 +0001F6r 1 F6 .byt 246 +0001F7r 1 F7 .byt 247 +0001F8r 1 F8 .byt 248 +0001F9r 1 F9 .byt 249 +0001FAr 1 FA .byt 250 +0001FBr 1 FB .byt 251 +0001FCr 1 FC .byt 252 +0001FDr 1 FD .byt 253 +0001FEr 1 FE .byt 254 +0001FFr 1 FF .byt 255 +000200r 1 +000200r 1 ; hex values +000200r 1 00 .byt $0 +000201r 1 01 .byt $1 +000202r 1 02 .byt $2 +000203r 1 03 .byt $3 +000204r 1 04 .byt $4 +000205r 1 05 .byt $5 +000206r 1 06 .byt $6 +000207r 1 07 .byt $7 +000208r 1 08 .byt $8 +000209r 1 09 .byt $9 +00020Ar 1 0A .byt $a +00020Br 1 0B .byt $b +00020Cr 1 0C .byt $c +00020Dr 1 0D .byt $d +00020Er 1 0E .byt $e +00020Fr 1 0F .byt $f +000210r 1 10 .byt $10 +000211r 1 11 .byt $11 +000212r 1 12 .byt $12 +000213r 1 13 .byt $13 +000214r 1 14 .byt $14 +000215r 1 15 .byt $15 +000216r 1 16 .byt $16 +000217r 1 17 .byt $17 +000218r 1 18 .byt $18 +000219r 1 19 .byt $19 +00021Ar 1 1A .byt $1a +00021Br 1 1B .byt $1b +00021Cr 1 1C .byt $1c +00021Dr 1 1D .byt $1d +00021Er 1 1E .byt $1e +00021Fr 1 1F .byt $1f +000220r 1 20 .byt $20 +000221r 1 21 .byt $21 +000222r 1 22 .byt $22 +000223r 1 23 .byt $23 +000224r 1 24 .byt $24 +000225r 1 25 .byt $25 +000226r 1 26 .byt $26 +000227r 1 27 .byt $27 +000228r 1 28 .byt $28 +000229r 1 29 .byt $29 +00022Ar 1 2A .byt $2a +00022Br 1 2B .byt $2b +00022Cr 1 2C .byt $2c +00022Dr 1 2D .byt $2d +00022Er 1 2E .byt $2e +00022Fr 1 2F .byt $2f +000230r 1 30 .byt $30 +000231r 1 31 .byt $31 +000232r 1 32 .byt $32 +000233r 1 33 .byt $33 +000234r 1 34 .byt $34 +000235r 1 35 .byt $35 +000236r 1 36 .byt $36 +000237r 1 37 .byt $37 +000238r 1 38 .byt $38 +000239r 1 39 .byt $39 +00023Ar 1 3A .byt $3a +00023Br 1 3B .byt $3b +00023Cr 1 3C .byt $3c +00023Dr 1 3D .byt $3d +00023Er 1 3E .byt $3e +00023Fr 1 3F .byt $3f +000240r 1 40 .byt $40 +000241r 1 41 .byt $41 +000242r 1 42 .byt $42 +000243r 1 43 .byt $43 +000244r 1 44 .byt $44 +000245r 1 45 .byt $45 +000246r 1 46 .byt $46 +000247r 1 47 .byt $47 +000248r 1 48 .byt $48 +000249r 1 49 .byt $49 +00024Ar 1 4A .byt $4a +00024Br 1 4B .byt $4b +00024Cr 1 4C .byt $4c +00024Dr 1 4D .byt $4d +00024Er 1 4E .byt $4e +00024Fr 1 4F .byt $4f +000250r 1 50 .byt $50 +000251r 1 51 .byt $51 +000252r 1 52 .byt $52 +000253r 1 53 .byt $53 +000254r 1 54 .byt $54 +000255r 1 55 .byt $55 +000256r 1 56 .byt $56 +000257r 1 57 .byt $57 +000258r 1 58 .byt $58 +000259r 1 59 .byt $59 +00025Ar 1 5A .byt $5a +00025Br 1 5B .byt $5b +00025Cr 1 5C .byt $5c +00025Dr 1 5D .byt $5d +00025Er 1 5E .byt $5e +00025Fr 1 5F .byt $5f +000260r 1 60 .byt $60 +000261r 1 61 .byt $61 +000262r 1 62 .byt $62 +000263r 1 63 .byt $63 +000264r 1 64 .byt $64 +000265r 1 65 .byt $65 +000266r 1 66 .byt $66 +000267r 1 67 .byt $67 +000268r 1 68 .byt $68 +000269r 1 69 .byt $69 +00026Ar 1 6A .byt $6a +00026Br 1 6B .byt $6b +00026Cr 1 6C .byt $6c +00026Dr 1 6D .byt $6d +00026Er 1 6E .byt $6e +00026Fr 1 6F .byt $6f +000270r 1 70 .byt $70 +000271r 1 71 .byt $71 +000272r 1 72 .byt $72 +000273r 1 73 .byt $73 +000274r 1 74 .byt $74 +000275r 1 75 .byt $75 +000276r 1 76 .byt $76 +000277r 1 77 .byt $77 +000278r 1 78 .byt $78 +000279r 1 79 .byt $79 +00027Ar 1 7A .byt $7a +00027Br 1 7B .byt $7b +00027Cr 1 7C .byt $7c +00027Dr 1 7D .byt $7d +00027Er 1 7E .byt $7e +00027Fr 1 7F .byt $7f +000280r 1 80 .byt $80 +000281r 1 81 .byt $81 +000282r 1 82 .byt $82 +000283r 1 83 .byt $83 +000284r 1 84 .byt $84 +000285r 1 85 .byt $85 +000286r 1 86 .byt $86 +000287r 1 87 .byt $87 +000288r 1 88 .byt $88 +000289r 1 89 .byt $89 +00028Ar 1 8A .byt $8a +00028Br 1 8B .byt $8b +00028Cr 1 8C .byt $8c +00028Dr 1 8D .byt $8d +00028Er 1 8E .byt $8e +00028Fr 1 8F .byt $8f +000290r 1 90 .byt $90 +000291r 1 91 .byt $91 +000292r 1 92 .byt $92 +000293r 1 93 .byt $93 +000294r 1 94 .byt $94 +000295r 1 95 .byt $95 +000296r 1 96 .byt $96 +000297r 1 97 .byt $97 +000298r 1 98 .byt $98 +000299r 1 99 .byt $99 +00029Ar 1 9A .byt $9a +00029Br 1 9B .byt $9b +00029Cr 1 9C .byt $9c +00029Dr 1 9D .byt $9d +00029Er 1 9E .byt $9e +00029Fr 1 9F .byt $9f +0002A0r 1 A0 .byt $a0 +0002A1r 1 A1 .byt $a1 +0002A2r 1 A2 .byt $a2 +0002A3r 1 A3 .byt $a3 +0002A4r 1 A4 .byt $a4 +0002A5r 1 A5 .byt $a5 +0002A6r 1 A6 .byt $a6 +0002A7r 1 A7 .byt $a7 +0002A8r 1 A8 .byt $a8 +0002A9r 1 A9 .byt $a9 +0002AAr 1 AA .byt $aa +0002ABr 1 AB .byt $ab +0002ACr 1 AC .byt $ac +0002ADr 1 AD .byt $ad +0002AEr 1 AE .byt $ae +0002AFr 1 AF .byt $af +0002B0r 1 B0 .byt $b0 +0002B1r 1 B1 .byt $b1 +0002B2r 1 B2 .byt $b2 +0002B3r 1 B3 .byt $b3 +0002B4r 1 B4 .byt $b4 +0002B5r 1 B5 .byt $b5 +0002B6r 1 B6 .byt $b6 +0002B7r 1 B7 .byt $b7 +0002B8r 1 B8 .byt $b8 +0002B9r 1 B9 .byt $b9 +0002BAr 1 BA .byt $ba +0002BBr 1 BB .byt $bb +0002BCr 1 BC .byt $bc +0002BDr 1 BD .byt $bd +0002BEr 1 BE .byt $be +0002BFr 1 BF .byt $bf +0002C0r 1 C0 .byt $c0 +0002C1r 1 C1 .byt $c1 +0002C2r 1 C2 .byt $c2 +0002C3r 1 C3 .byt $c3 +0002C4r 1 C4 .byt $c4 +0002C5r 1 C5 .byt $c5 +0002C6r 1 C6 .byt $c6 +0002C7r 1 C7 .byt $c7 +0002C8r 1 C8 .byt $c8 +0002C9r 1 C9 .byt $c9 +0002CAr 1 CA .byt $ca +0002CBr 1 CB .byt $cb +0002CCr 1 CC .byt $cc +0002CDr 1 CD .byt $cd +0002CEr 1 CE .byt $ce +0002CFr 1 CF .byt $cf +0002D0r 1 D0 .byt $d0 +0002D1r 1 D1 .byt $d1 +0002D2r 1 D2 .byt $d2 +0002D3r 1 D3 .byt $d3 +0002D4r 1 D4 .byt $d4 +0002D5r 1 D5 .byt $d5 +0002D6r 1 D6 .byt $d6 +0002D7r 1 D7 .byt $d7 +0002D8r 1 D8 .byt $d8 +0002D9r 1 D9 .byt $d9 +0002DAr 1 DA .byt $da +0002DBr 1 DB .byt $db +0002DCr 1 DC .byt $dc +0002DDr 1 DD .byt $dd +0002DEr 1 DE .byt $de +0002DFr 1 DF .byt $df +0002E0r 1 E0 .byt $e0 +0002E1r 1 E1 .byt $e1 +0002E2r 1 E2 .byt $e2 +0002E3r 1 E3 .byt $e3 +0002E4r 1 E4 .byt $e4 +0002E5r 1 E5 .byt $e5 +0002E6r 1 E6 .byt $e6 +0002E7r 1 E7 .byt $e7 +0002E8r 1 E8 .byt $e8 +0002E9r 1 E9 .byt $e9 +0002EAr 1 EA .byt $ea +0002EBr 1 EB .byt $eb +0002ECr 1 EC .byt $ec +0002EDr 1 ED .byt $ed +0002EEr 1 EE .byt $ee +0002EFr 1 EF .byt $ef +0002F0r 1 F0 .byt $f0 +0002F1r 1 F1 .byt $f1 +0002F2r 1 F2 .byt $f2 +0002F3r 1 F3 .byt $f3 +0002F4r 1 F4 .byt $f4 +0002F5r 1 F5 .byt $f5 +0002F6r 1 F6 .byt $f6 +0002F7r 1 F7 .byt $f7 +0002F8r 1 F8 .byt $f8 +0002F9r 1 F9 .byt $f9 +0002FAr 1 FA .byt $fa +0002FBr 1 FB .byt $fb +0002FCr 1 FC .byt $fc +0002FDr 1 FD .byt $fd +0002FEr 1 FE .byt $fe +0002FFr 1 FF .byt $ff +000300r 1 +000300r 1 ; hex values, uppercase +000300r 1 00 .byt $0 +000301r 1 01 .byt $1 +000302r 1 02 .byt $2 +000303r 1 03 .byt $3 +000304r 1 04 .byt $4 +000305r 1 05 .byt $5 +000306r 1 06 .byt $6 +000307r 1 07 .byt $7 +000308r 1 08 .byt $8 +000309r 1 09 .byt $9 +00030Ar 1 0A .byt $A +00030Br 1 0B .byt $B +00030Cr 1 0C .byt $C +00030Dr 1 0D .byt $D +00030Er 1 0E .byt $E +00030Fr 1 0F .byt $F +000310r 1 10 .byt $10 +000311r 1 11 .byt $11 +000312r 1 12 .byt $12 +000313r 1 13 .byt $13 +000314r 1 14 .byt $14 +000315r 1 15 .byt $15 +000316r 1 16 .byt $16 +000317r 1 17 .byt $17 +000318r 1 18 .byt $18 +000319r 1 19 .byt $19 +00031Ar 1 1A .byt $1A +00031Br 1 1B .byt $1B +00031Cr 1 1C .byt $1C +00031Dr 1 1D .byt $1D +00031Er 1 1E .byt $1E +00031Fr 1 1F .byt $1F +000320r 1 20 .byt $20 +000321r 1 21 .byt $21 +000322r 1 22 .byt $22 +000323r 1 23 .byt $23 +000324r 1 24 .byt $24 +000325r 1 25 .byt $25 +000326r 1 26 .byt $26 +000327r 1 27 .byt $27 +000328r 1 28 .byt $28 +000329r 1 29 .byt $29 +00032Ar 1 2A .byt $2A +00032Br 1 2B .byt $2B +00032Cr 1 2C .byt $2C +00032Dr 1 2D .byt $2D +00032Er 1 2E .byt $2E +00032Fr 1 2F .byt $2F +000330r 1 30 .byt $30 +000331r 1 31 .byt $31 +000332r 1 32 .byt $32 +000333r 1 33 .byt $33 +000334r 1 34 .byt $34 +000335r 1 35 .byt $35 +000336r 1 36 .byt $36 +000337r 1 37 .byt $37 +000338r 1 38 .byt $38 +000339r 1 39 .byt $39 +00033Ar 1 3A .byt $3A +00033Br 1 3B .byt $3B +00033Cr 1 3C .byt $3C +00033Dr 1 3D .byt $3D +00033Er 1 3E .byt $3E +00033Fr 1 3F .byt $3F +000340r 1 40 .byt $40 +000341r 1 41 .byt $41 +000342r 1 42 .byt $42 +000343r 1 43 .byt $43 +000344r 1 44 .byt $44 +000345r 1 45 .byt $45 +000346r 1 46 .byt $46 +000347r 1 47 .byt $47 +000348r 1 48 .byt $48 +000349r 1 49 .byt $49 +00034Ar 1 4A .byt $4A +00034Br 1 4B .byt $4B +00034Cr 1 4C .byt $4C +00034Dr 1 4D .byt $4D +00034Er 1 4E .byt $4E +00034Fr 1 4F .byt $4F +000350r 1 50 .byt $50 +000351r 1 51 .byt $51 +000352r 1 52 .byt $52 +000353r 1 53 .byt $53 +000354r 1 54 .byt $54 +000355r 1 55 .byt $55 +000356r 1 56 .byt $56 +000357r 1 57 .byt $57 +000358r 1 58 .byt $58 +000359r 1 59 .byt $59 +00035Ar 1 5A .byt $5A +00035Br 1 5B .byt $5B +00035Cr 1 5C .byt $5C +00035Dr 1 5D .byt $5D +00035Er 1 5E .byt $5E +00035Fr 1 5F .byt $5F +000360r 1 60 .byt $60 +000361r 1 61 .byt $61 +000362r 1 62 .byt $62 +000363r 1 63 .byt $63 +000364r 1 64 .byt $64 +000365r 1 65 .byt $65 +000366r 1 66 .byt $66 +000367r 1 67 .byt $67 +000368r 1 68 .byt $68 +000369r 1 69 .byt $69 +00036Ar 1 6A .byt $6A +00036Br 1 6B .byt $6B +00036Cr 1 6C .byt $6C +00036Dr 1 6D .byt $6D +00036Er 1 6E .byt $6E +00036Fr 1 6F .byt $6F +000370r 1 70 .byt $70 +000371r 1 71 .byt $71 +000372r 1 72 .byt $72 +000373r 1 73 .byt $73 +000374r 1 74 .byt $74 +000375r 1 75 .byt $75 +000376r 1 76 .byt $76 +000377r 1 77 .byt $77 +000378r 1 78 .byt $78 +000379r 1 79 .byt $79 +00037Ar 1 7A .byt $7A +00037Br 1 7B .byt $7B +00037Cr 1 7C .byt $7C +00037Dr 1 7D .byt $7D +00037Er 1 7E .byt $7E +00037Fr 1 7F .byt $7F +000380r 1 80 .byt $80 +000381r 1 81 .byt $81 +000382r 1 82 .byt $82 +000383r 1 83 .byt $83 +000384r 1 84 .byt $84 +000385r 1 85 .byt $85 +000386r 1 86 .byt $86 +000387r 1 87 .byt $87 +000388r 1 88 .byt $88 +000389r 1 89 .byt $89 +00038Ar 1 8A .byt $8A +00038Br 1 8B .byt $8B +00038Cr 1 8C .byt $8C +00038Dr 1 8D .byt $8D +00038Er 1 8E .byt $8E +00038Fr 1 8F .byt $8F +000390r 1 90 .byt $90 +000391r 1 91 .byt $91 +000392r 1 92 .byt $92 +000393r 1 93 .byt $93 +000394r 1 94 .byt $94 +000395r 1 95 .byt $95 +000396r 1 96 .byt $96 +000397r 1 97 .byt $97 +000398r 1 98 .byt $98 +000399r 1 99 .byt $99 +00039Ar 1 9A .byt $9A +00039Br 1 9B .byt $9B +00039Cr 1 9C .byt $9C +00039Dr 1 9D .byt $9D +00039Er 1 9E .byt $9E +00039Fr 1 9F .byt $9F +0003A0r 1 A0 .byt $A0 +0003A1r 1 A1 .byt $A1 +0003A2r 1 A2 .byt $A2 +0003A3r 1 A3 .byt $A3 +0003A4r 1 A4 .byt $A4 +0003A5r 1 A5 .byt $A5 +0003A6r 1 A6 .byt $A6 +0003A7r 1 A7 .byt $A7 +0003A8r 1 A8 .byt $A8 +0003A9r 1 A9 .byt $A9 +0003AAr 1 AA .byt $AA +0003ABr 1 AB .byt $AB +0003ACr 1 AC .byt $AC +0003ADr 1 AD .byt $AD +0003AEr 1 AE .byt $AE +0003AFr 1 AF .byt $AF +0003B0r 1 B0 .byt $B0 +0003B1r 1 B1 .byt $B1 +0003B2r 1 B2 .byt $B2 +0003B3r 1 B3 .byt $B3 +0003B4r 1 B4 .byt $B4 +0003B5r 1 B5 .byt $B5 +0003B6r 1 B6 .byt $B6 +0003B7r 1 B7 .byt $B7 +0003B8r 1 B8 .byt $B8 +0003B9r 1 B9 .byt $B9 +0003BAr 1 BA .byt $BA +0003BBr 1 BB .byt $BB +0003BCr 1 BC .byt $BC +0003BDr 1 BD .byt $BD +0003BEr 1 BE .byt $BE +0003BFr 1 BF .byt $BF +0003C0r 1 C0 .byt $C0 +0003C1r 1 C1 .byt $C1 +0003C2r 1 C2 .byt $C2 +0003C3r 1 C3 .byt $C3 +0003C4r 1 C4 .byt $C4 +0003C5r 1 C5 .byt $C5 +0003C6r 1 C6 .byt $C6 +0003C7r 1 C7 .byt $C7 +0003C8r 1 C8 .byt $C8 +0003C9r 1 C9 .byt $C9 +0003CAr 1 CA .byt $CA +0003CBr 1 CB .byt $CB +0003CCr 1 CC .byt $CC +0003CDr 1 CD .byt $CD +0003CEr 1 CE .byt $CE +0003CFr 1 CF .byt $CF +0003D0r 1 D0 .byt $D0 +0003D1r 1 D1 .byt $D1 +0003D2r 1 D2 .byt $D2 +0003D3r 1 D3 .byt $D3 +0003D4r 1 D4 .byt $D4 +0003D5r 1 D5 .byt $D5 +0003D6r 1 D6 .byt $D6 +0003D7r 1 D7 .byt $D7 +0003D8r 1 D8 .byt $D8 +0003D9r 1 D9 .byt $D9 +0003DAr 1 DA .byt $DA +0003DBr 1 DB .byt $DB +0003DCr 1 DC .byt $DC +0003DDr 1 DD .byt $DD +0003DEr 1 DE .byt $DE +0003DFr 1 DF .byt $DF +0003E0r 1 E0 .byt $E0 +0003E1r 1 E1 .byt $E1 +0003E2r 1 E2 .byt $E2 +0003E3r 1 E3 .byt $E3 +0003E4r 1 E4 .byt $E4 +0003E5r 1 E5 .byt $E5 +0003E6r 1 E6 .byt $E6 +0003E7r 1 E7 .byt $E7 +0003E8r 1 E8 .byt $E8 +0003E9r 1 E9 .byt $E9 +0003EAr 1 EA .byt $EA +0003EBr 1 EB .byt $EB +0003ECr 1 EC .byt $EC +0003EDr 1 ED .byt $ED +0003EEr 1 EE .byt $EE +0003EFr 1 EF .byt $EF +0003F0r 1 F0 .byt $F0 +0003F1r 1 F1 .byt $F1 +0003F2r 1 F2 .byt $F2 +0003F3r 1 F3 .byt $F3 +0003F4r 1 F4 .byt $F4 +0003F5r 1 F5 .byt $F5 +0003F6r 1 F6 .byt $F6 +0003F7r 1 F7 .byt $F7 +0003F8r 1 F8 .byt $F8 +0003F9r 1 F9 .byt $F9 +0003FAr 1 FA .byt $FA +0003FBr 1 FB .byt $FB +0003FCr 1 FC .byt $FC +0003FDr 1 FD .byt $FD +0003FEr 1 FE .byt $FE +0003FFr 1 FF .byt $FF +000400r 1 +000400r 1 ; 2-digit hex values +000400r 1 00 .byt $00 +000401r 1 01 .byt $01 +000402r 1 02 .byt $02 +000403r 1 03 .byt $03 +000404r 1 04 .byt $04 +000405r 1 05 .byt $05 +000406r 1 06 .byt $06 +000407r 1 07 .byt $07 +000408r 1 08 .byt $08 +000409r 1 09 .byt $09 +00040Ar 1 0A .byt $0a +00040Br 1 0B .byt $0b +00040Cr 1 0C .byt $0c +00040Dr 1 0D .byt $0d +00040Er 1 0E .byt $0e +00040Fr 1 0F .byt $0f +000410r 1 10 .byt $10 +000411r 1 11 .byt $11 +000412r 1 12 .byt $12 +000413r 1 13 .byt $13 +000414r 1 14 .byt $14 +000415r 1 15 .byt $15 +000416r 1 16 .byt $16 +000417r 1 17 .byt $17 +000418r 1 18 .byt $18 +000419r 1 19 .byt $19 +00041Ar 1 1A .byt $1a +00041Br 1 1B .byt $1b +00041Cr 1 1C .byt $1c +00041Dr 1 1D .byt $1d +00041Er 1 1E .byt $1e +00041Fr 1 1F .byt $1f +000420r 1 20 .byt $20 +000421r 1 21 .byt $21 +000422r 1 22 .byt $22 +000423r 1 23 .byt $23 +000424r 1 24 .byt $24 +000425r 1 25 .byt $25 +000426r 1 26 .byt $26 +000427r 1 27 .byt $27 +000428r 1 28 .byt $28 +000429r 1 29 .byt $29 +00042Ar 1 2A .byt $2a +00042Br 1 2B .byt $2b +00042Cr 1 2C .byt $2c +00042Dr 1 2D .byt $2d +00042Er 1 2E .byt $2e +00042Fr 1 2F .byt $2f +000430r 1 30 .byt $30 +000431r 1 31 .byt $31 +000432r 1 32 .byt $32 +000433r 1 33 .byt $33 +000434r 1 34 .byt $34 +000435r 1 35 .byt $35 +000436r 1 36 .byt $36 +000437r 1 37 .byt $37 +000438r 1 38 .byt $38 +000439r 1 39 .byt $39 +00043Ar 1 3A .byt $3a +00043Br 1 3B .byt $3b +00043Cr 1 3C .byt $3c +00043Dr 1 3D .byt $3d +00043Er 1 3E .byt $3e +00043Fr 1 3F .byt $3f +000440r 1 40 .byt $40 +000441r 1 41 .byt $41 +000442r 1 42 .byt $42 +000443r 1 43 .byt $43 +000444r 1 44 .byt $44 +000445r 1 45 .byt $45 +000446r 1 46 .byt $46 +000447r 1 47 .byt $47 +000448r 1 48 .byt $48 +000449r 1 49 .byt $49 +00044Ar 1 4A .byt $4a +00044Br 1 4B .byt $4b +00044Cr 1 4C .byt $4c +00044Dr 1 4D .byt $4d +00044Er 1 4E .byt $4e +00044Fr 1 4F .byt $4f +000450r 1 50 .byt $50 +000451r 1 51 .byt $51 +000452r 1 52 .byt $52 +000453r 1 53 .byt $53 +000454r 1 54 .byt $54 +000455r 1 55 .byt $55 +000456r 1 56 .byt $56 +000457r 1 57 .byt $57 +000458r 1 58 .byt $58 +000459r 1 59 .byt $59 +00045Ar 1 5A .byt $5a +00045Br 1 5B .byt $5b +00045Cr 1 5C .byt $5c +00045Dr 1 5D .byt $5d +00045Er 1 5E .byt $5e +00045Fr 1 5F .byt $5f +000460r 1 60 .byt $60 +000461r 1 61 .byt $61 +000462r 1 62 .byt $62 +000463r 1 63 .byt $63 +000464r 1 64 .byt $64 +000465r 1 65 .byt $65 +000466r 1 66 .byt $66 +000467r 1 67 .byt $67 +000468r 1 68 .byt $68 +000469r 1 69 .byt $69 +00046Ar 1 6A .byt $6a +00046Br 1 6B .byt $6b +00046Cr 1 6C .byt $6c +00046Dr 1 6D .byt $6d +00046Er 1 6E .byt $6e +00046Fr 1 6F .byt $6f +000470r 1 70 .byt $70 +000471r 1 71 .byt $71 +000472r 1 72 .byt $72 +000473r 1 73 .byt $73 +000474r 1 74 .byt $74 +000475r 1 75 .byt $75 +000476r 1 76 .byt $76 +000477r 1 77 .byt $77 +000478r 1 78 .byt $78 +000479r 1 79 .byt $79 +00047Ar 1 7A .byt $7a +00047Br 1 7B .byt $7b +00047Cr 1 7C .byt $7c +00047Dr 1 7D .byt $7d +00047Er 1 7E .byt $7e +00047Fr 1 7F .byt $7f +000480r 1 80 .byt $80 +000481r 1 81 .byt $81 +000482r 1 82 .byt $82 +000483r 1 83 .byt $83 +000484r 1 84 .byt $84 +000485r 1 85 .byt $85 +000486r 1 86 .byt $86 +000487r 1 87 .byt $87 +000488r 1 88 .byt $88 +000489r 1 89 .byt $89 +00048Ar 1 8A .byt $8a +00048Br 1 8B .byt $8b +00048Cr 1 8C .byt $8c +00048Dr 1 8D .byt $8d +00048Er 1 8E .byt $8e +00048Fr 1 8F .byt $8f +000490r 1 90 .byt $90 +000491r 1 91 .byt $91 +000492r 1 92 .byt $92 +000493r 1 93 .byt $93 +000494r 1 94 .byt $94 +000495r 1 95 .byt $95 +000496r 1 96 .byt $96 +000497r 1 97 .byt $97 +000498r 1 98 .byt $98 +000499r 1 99 .byt $99 +00049Ar 1 9A .byt $9a +00049Br 1 9B .byt $9b +00049Cr 1 9C .byt $9c +00049Dr 1 9D .byt $9d +00049Er 1 9E .byt $9e +00049Fr 1 9F .byt $9f +0004A0r 1 A0 .byt $a0 +0004A1r 1 A1 .byt $a1 +0004A2r 1 A2 .byt $a2 +0004A3r 1 A3 .byt $a3 +0004A4r 1 A4 .byt $a4 +0004A5r 1 A5 .byt $a5 +0004A6r 1 A6 .byt $a6 +0004A7r 1 A7 .byt $a7 +0004A8r 1 A8 .byt $a8 +0004A9r 1 A9 .byt $a9 +0004AAr 1 AA .byt $aa +0004ABr 1 AB .byt $ab +0004ACr 1 AC .byt $ac +0004ADr 1 AD .byt $ad +0004AEr 1 AE .byt $ae +0004AFr 1 AF .byt $af +0004B0r 1 B0 .byt $b0 +0004B1r 1 B1 .byt $b1 +0004B2r 1 B2 .byt $b2 +0004B3r 1 B3 .byt $b3 +0004B4r 1 B4 .byt $b4 +0004B5r 1 B5 .byt $b5 +0004B6r 1 B6 .byt $b6 +0004B7r 1 B7 .byt $b7 +0004B8r 1 B8 .byt $b8 +0004B9r 1 B9 .byt $b9 +0004BAr 1 BA .byt $ba +0004BBr 1 BB .byt $bb +0004BCr 1 BC .byt $bc +0004BDr 1 BD .byt $bd +0004BEr 1 BE .byt $be +0004BFr 1 BF .byt $bf +0004C0r 1 C0 .byt $c0 +0004C1r 1 C1 .byt $c1 +0004C2r 1 C2 .byt $c2 +0004C3r 1 C3 .byt $c3 +0004C4r 1 C4 .byt $c4 +0004C5r 1 C5 .byt $c5 +0004C6r 1 C6 .byt $c6 +0004C7r 1 C7 .byt $c7 +0004C8r 1 C8 .byt $c8 +0004C9r 1 C9 .byt $c9 +0004CAr 1 CA .byt $ca +0004CBr 1 CB .byt $cb +0004CCr 1 CC .byt $cc +0004CDr 1 CD .byt $cd +0004CEr 1 CE .byt $ce +0004CFr 1 CF .byt $cf +0004D0r 1 D0 .byt $d0 +0004D1r 1 D1 .byt $d1 +0004D2r 1 D2 .byt $d2 +0004D3r 1 D3 .byt $d3 +0004D4r 1 D4 .byt $d4 +0004D5r 1 D5 .byt $d5 +0004D6r 1 D6 .byt $d6 +0004D7r 1 D7 .byt $d7 +0004D8r 1 D8 .byt $d8 +0004D9r 1 D9 .byt $d9 +0004DAr 1 DA .byt $da +0004DBr 1 DB .byt $db +0004DCr 1 DC .byt $dc +0004DDr 1 DD .byt $dd +0004DEr 1 DE .byt $de +0004DFr 1 DF .byt $df +0004E0r 1 E0 .byt $e0 +0004E1r 1 E1 .byt $e1 +0004E2r 1 E2 .byt $e2 +0004E3r 1 E3 .byt $e3 +0004E4r 1 E4 .byt $e4 +0004E5r 1 E5 .byt $e5 +0004E6r 1 E6 .byt $e6 +0004E7r 1 E7 .byt $e7 +0004E8r 1 E8 .byt $e8 +0004E9r 1 E9 .byt $e9 +0004EAr 1 EA .byt $ea +0004EBr 1 EB .byt $eb +0004ECr 1 EC .byt $ec +0004EDr 1 ED .byt $ed +0004EEr 1 EE .byt $ee +0004EFr 1 EF .byt $ef +0004F0r 1 F0 .byt $f0 +0004F1r 1 F1 .byt $f1 +0004F2r 1 F2 .byt $f2 +0004F3r 1 F3 .byt $f3 +0004F4r 1 F4 .byt $f4 +0004F5r 1 F5 .byt $f5 +0004F6r 1 F6 .byt $f6 +0004F7r 1 F7 .byt $f7 +0004F8r 1 F8 .byt $f8 +0004F9r 1 F9 .byt $f9 +0004FAr 1 FA .byt $fa +0004FBr 1 FB .byt $fb +0004FCr 1 FC .byt $fc +0004FDr 1 FD .byt $fd +0004FEr 1 FE .byt $fe +0004FFr 1 FF .byt $ff +000500r 1 +000500r 1 ; 2-digit hex values, uppercase +000500r 1 00 .byt $00 +000501r 1 01 .byt $01 +000502r 1 02 .byt $02 +000503r 1 03 .byt $03 +000504r 1 04 .byt $04 +000505r 1 05 .byt $05 +000506r 1 06 .byt $06 +000507r 1 07 .byt $07 +000508r 1 08 .byt $08 +000509r 1 09 .byt $09 +00050Ar 1 0A .byt $0A +00050Br 1 0B .byt $0B +00050Cr 1 0C .byt $0C +00050Dr 1 0D .byt $0D +00050Er 1 0E .byt $0E +00050Fr 1 0F .byt $0F +000510r 1 10 .byt $10 +000511r 1 11 .byt $11 +000512r 1 12 .byt $12 +000513r 1 13 .byt $13 +000514r 1 14 .byt $14 +000515r 1 15 .byt $15 +000516r 1 16 .byt $16 +000517r 1 17 .byt $17 +000518r 1 18 .byt $18 +000519r 1 19 .byt $19 +00051Ar 1 1A .byt $1A +00051Br 1 1B .byt $1B +00051Cr 1 1C .byt $1C +00051Dr 1 1D .byt $1D +00051Er 1 1E .byt $1E +00051Fr 1 1F .byt $1F +000520r 1 20 .byt $20 +000521r 1 21 .byt $21 +000522r 1 22 .byt $22 +000523r 1 23 .byt $23 +000524r 1 24 .byt $24 +000525r 1 25 .byt $25 +000526r 1 26 .byt $26 +000527r 1 27 .byt $27 +000528r 1 28 .byt $28 +000529r 1 29 .byt $29 +00052Ar 1 2A .byt $2A +00052Br 1 2B .byt $2B +00052Cr 1 2C .byt $2C +00052Dr 1 2D .byt $2D +00052Er 1 2E .byt $2E +00052Fr 1 2F .byt $2F +000530r 1 30 .byt $30 +000531r 1 31 .byt $31 +000532r 1 32 .byt $32 +000533r 1 33 .byt $33 +000534r 1 34 .byt $34 +000535r 1 35 .byt $35 +000536r 1 36 .byt $36 +000537r 1 37 .byt $37 +000538r 1 38 .byt $38 +000539r 1 39 .byt $39 +00053Ar 1 3A .byt $3A +00053Br 1 3B .byt $3B +00053Cr 1 3C .byt $3C +00053Dr 1 3D .byt $3D +00053Er 1 3E .byt $3E +00053Fr 1 3F .byt $3F +000540r 1 40 .byt $40 +000541r 1 41 .byt $41 +000542r 1 42 .byt $42 +000543r 1 43 .byt $43 +000544r 1 44 .byt $44 +000545r 1 45 .byt $45 +000546r 1 46 .byt $46 +000547r 1 47 .byt $47 +000548r 1 48 .byt $48 +000549r 1 49 .byt $49 +00054Ar 1 4A .byt $4A +00054Br 1 4B .byt $4B +00054Cr 1 4C .byt $4C +00054Dr 1 4D .byt $4D +00054Er 1 4E .byt $4E +00054Fr 1 4F .byt $4F +000550r 1 50 .byt $50 +000551r 1 51 .byt $51 +000552r 1 52 .byt $52 +000553r 1 53 .byt $53 +000554r 1 54 .byt $54 +000555r 1 55 .byt $55 +000556r 1 56 .byt $56 +000557r 1 57 .byt $57 +000558r 1 58 .byt $58 +000559r 1 59 .byt $59 +00055Ar 1 5A .byt $5A +00055Br 1 5B .byt $5B +00055Cr 1 5C .byt $5C +00055Dr 1 5D .byt $5D +00055Er 1 5E .byt $5E +00055Fr 1 5F .byt $5F +000560r 1 60 .byt $60 +000561r 1 61 .byt $61 +000562r 1 62 .byt $62 +000563r 1 63 .byt $63 +000564r 1 64 .byt $64 +000565r 1 65 .byt $65 +000566r 1 66 .byt $66 +000567r 1 67 .byt $67 +000568r 1 68 .byt $68 +000569r 1 69 .byt $69 +00056Ar 1 6A .byt $6A +00056Br 1 6B .byt $6B +00056Cr 1 6C .byt $6C +00056Dr 1 6D .byt $6D +00056Er 1 6E .byt $6E +00056Fr 1 6F .byt $6F +000570r 1 70 .byt $70 +000571r 1 71 .byt $71 +000572r 1 72 .byt $72 +000573r 1 73 .byt $73 +000574r 1 74 .byt $74 +000575r 1 75 .byt $75 +000576r 1 76 .byt $76 +000577r 1 77 .byt $77 +000578r 1 78 .byt $78 +000579r 1 79 .byt $79 +00057Ar 1 7A .byt $7A +00057Br 1 7B .byt $7B +00057Cr 1 7C .byt $7C +00057Dr 1 7D .byt $7D +00057Er 1 7E .byt $7E +00057Fr 1 7F .byt $7F +000580r 1 80 .byt $80 +000581r 1 81 .byt $81 +000582r 1 82 .byt $82 +000583r 1 83 .byt $83 +000584r 1 84 .byt $84 +000585r 1 85 .byt $85 +000586r 1 86 .byt $86 +000587r 1 87 .byt $87 +000588r 1 88 .byt $88 +000589r 1 89 .byt $89 +00058Ar 1 8A .byt $8A +00058Br 1 8B .byt $8B +00058Cr 1 8C .byt $8C +00058Dr 1 8D .byt $8D +00058Er 1 8E .byt $8E +00058Fr 1 8F .byt $8F +000590r 1 90 .byt $90 +000591r 1 91 .byt $91 +000592r 1 92 .byt $92 +000593r 1 93 .byt $93 +000594r 1 94 .byt $94 +000595r 1 95 .byt $95 +000596r 1 96 .byt $96 +000597r 1 97 .byt $97 +000598r 1 98 .byt $98 +000599r 1 99 .byt $99 +00059Ar 1 9A .byt $9A +00059Br 1 9B .byt $9B +00059Cr 1 9C .byt $9C +00059Dr 1 9D .byt $9D +00059Er 1 9E .byt $9E +00059Fr 1 9F .byt $9F +0005A0r 1 A0 .byt $A0 +0005A1r 1 A1 .byt $A1 +0005A2r 1 A2 .byt $A2 +0005A3r 1 A3 .byt $A3 +0005A4r 1 A4 .byt $A4 +0005A5r 1 A5 .byt $A5 +0005A6r 1 A6 .byt $A6 +0005A7r 1 A7 .byt $A7 +0005A8r 1 A8 .byt $A8 +0005A9r 1 A9 .byt $A9 +0005AAr 1 AA .byt $AA +0005ABr 1 AB .byt $AB +0005ACr 1 AC .byt $AC +0005ADr 1 AD .byt $AD +0005AEr 1 AE .byt $AE +0005AFr 1 AF .byt $AF +0005B0r 1 B0 .byt $B0 +0005B1r 1 B1 .byt $B1 +0005B2r 1 B2 .byt $B2 +0005B3r 1 B3 .byt $B3 +0005B4r 1 B4 .byt $B4 +0005B5r 1 B5 .byt $B5 +0005B6r 1 B6 .byt $B6 +0005B7r 1 B7 .byt $B7 +0005B8r 1 B8 .byt $B8 +0005B9r 1 B9 .byt $B9 +0005BAr 1 BA .byt $BA +0005BBr 1 BB .byt $BB +0005BCr 1 BC .byt $BC +0005BDr 1 BD .byt $BD +0005BEr 1 BE .byt $BE +0005BFr 1 BF .byt $BF +0005C0r 1 C0 .byt $C0 +0005C1r 1 C1 .byt $C1 +0005C2r 1 C2 .byt $C2 +0005C3r 1 C3 .byt $C3 +0005C4r 1 C4 .byt $C4 +0005C5r 1 C5 .byt $C5 +0005C6r 1 C6 .byt $C6 +0005C7r 1 C7 .byt $C7 +0005C8r 1 C8 .byt $C8 +0005C9r 1 C9 .byt $C9 +0005CAr 1 CA .byt $CA +0005CBr 1 CB .byt $CB +0005CCr 1 CC .byt $CC +0005CDr 1 CD .byt $CD +0005CEr 1 CE .byt $CE +0005CFr 1 CF .byt $CF +0005D0r 1 D0 .byt $D0 +0005D1r 1 D1 .byt $D1 +0005D2r 1 D2 .byt $D2 +0005D3r 1 D3 .byt $D3 +0005D4r 1 D4 .byt $D4 +0005D5r 1 D5 .byt $D5 +0005D6r 1 D6 .byt $D6 +0005D7r 1 D7 .byt $D7 +0005D8r 1 D8 .byt $D8 +0005D9r 1 D9 .byt $D9 +0005DAr 1 DA .byt $DA +0005DBr 1 DB .byt $DB +0005DCr 1 DC .byt $DC +0005DDr 1 DD .byt $DD +0005DEr 1 DE .byt $DE +0005DFr 1 DF .byt $DF +0005E0r 1 E0 .byt $E0 +0005E1r 1 E1 .byt $E1 +0005E2r 1 E2 .byt $E2 +0005E3r 1 E3 .byt $E3 +0005E4r 1 E4 .byt $E4 +0005E5r 1 E5 .byt $E5 +0005E6r 1 E6 .byt $E6 +0005E7r 1 E7 .byt $E7 +0005E8r 1 E8 .byt $E8 +0005E9r 1 E9 .byt $E9 +0005EAr 1 EA .byt $EA +0005EBr 1 EB .byt $EB +0005ECr 1 EC .byt $EC +0005EDr 1 ED .byt $ED +0005EEr 1 EE .byt $EE +0005EFr 1 EF .byt $EF +0005F0r 1 F0 .byt $F0 +0005F1r 1 F1 .byt $F1 +0005F2r 1 F2 .byt $F2 +0005F3r 1 F3 .byt $F3 +0005F4r 1 F4 .byt $F4 +0005F5r 1 F5 .byt $F5 +0005F6r 1 F6 .byt $F6 +0005F7r 1 F7 .byt $F7 +0005F8r 1 F8 .byt $F8 +0005F9r 1 F9 .byt $F9 +0005FAr 1 FA .byt $FA +0005FBr 1 FB .byt $FB +0005FCr 1 FC .byt $FC +0005FDr 1 FD .byt $FD +0005FEr 1 FE .byt $FE +0005FFr 1 FF .byt $FF +000600r 1 +000600r 1 ; alternative hex values +000600r 1 00 .byt 0h +000601r 1 01 .byt 1h +000602r 1 02 .byt 2h +000603r 1 03 .byt 3h +000604r 1 04 .byt 4h +000605r 1 05 .byt 5h +000606r 1 06 .byt 6h +000607r 1 07 .byt 7h +000608r 1 08 .byt 8h +000609r 1 09 .byt 9h +00060Ar 1 0A .byt 0ah +00060Br 1 0B .byt 0bh +00060Cr 1 0C .byt 0ch +00060Dr 1 0D .byt 0dh +00060Er 1 0E .byt 0eh +00060Fr 1 0F .byt 0fh +000610r 1 10 .byt 10h +000611r 1 11 .byt 11h +000612r 1 12 .byt 12h +000613r 1 13 .byt 13h +000614r 1 14 .byt 14h +000615r 1 15 .byt 15h +000616r 1 16 .byt 16h +000617r 1 17 .byt 17h +000618r 1 18 .byt 18h +000619r 1 19 .byt 19h +00061Ar 1 1A .byt 1ah +00061Br 1 1B .byt 1bh +00061Cr 1 1C .byt 1ch +00061Dr 1 1D .byt 1dh +00061Er 1 1E .byt 1eh +00061Fr 1 1F .byt 1fh +000620r 1 20 .byt 20h +000621r 1 21 .byt 21h +000622r 1 22 .byt 22h +000623r 1 23 .byt 23h +000624r 1 24 .byt 24h +000625r 1 25 .byt 25h +000626r 1 26 .byt 26h +000627r 1 27 .byt 27h +000628r 1 28 .byt 28h +000629r 1 29 .byt 29h +00062Ar 1 2A .byt 2ah +00062Br 1 2B .byt 2bh +00062Cr 1 2C .byt 2ch +00062Dr 1 2D .byt 2dh +00062Er 1 2E .byt 2eh +00062Fr 1 2F .byt 2fh +000630r 1 30 .byt 30h +000631r 1 31 .byt 31h +000632r 1 32 .byt 32h +000633r 1 33 .byt 33h +000634r 1 34 .byt 34h +000635r 1 35 .byt 35h +000636r 1 36 .byt 36h +000637r 1 37 .byt 37h +000638r 1 38 .byt 38h +000639r 1 39 .byt 39h +00063Ar 1 3A .byt 3ah +00063Br 1 3B .byt 3bh +00063Cr 1 3C .byt 3ch +00063Dr 1 3D .byt 3dh +00063Er 1 3E .byt 3eh +00063Fr 1 3F .byt 3fh +000640r 1 40 .byt 40h +000641r 1 41 .byt 41h +000642r 1 42 .byt 42h +000643r 1 43 .byt 43h +000644r 1 44 .byt 44h +000645r 1 45 .byt 45h +000646r 1 46 .byt 46h +000647r 1 47 .byt 47h +000648r 1 48 .byt 48h +000649r 1 49 .byt 49h +00064Ar 1 4A .byt 4ah +00064Br 1 4B .byt 4bh +00064Cr 1 4C .byt 4ch +00064Dr 1 4D .byt 4dh +00064Er 1 4E .byt 4eh +00064Fr 1 4F .byt 4fh +000650r 1 50 .byt 50h +000651r 1 51 .byt 51h +000652r 1 52 .byt 52h +000653r 1 53 .byt 53h +000654r 1 54 .byt 54h +000655r 1 55 .byt 55h +000656r 1 56 .byt 56h +000657r 1 57 .byt 57h +000658r 1 58 .byt 58h +000659r 1 59 .byt 59h +00065Ar 1 5A .byt 5ah +00065Br 1 5B .byt 5bh +00065Cr 1 5C .byt 5ch +00065Dr 1 5D .byt 5dh +00065Er 1 5E .byt 5eh +00065Fr 1 5F .byt 5fh +000660r 1 60 .byt 60h +000661r 1 61 .byt 61h +000662r 1 62 .byt 62h +000663r 1 63 .byt 63h +000664r 1 64 .byt 64h +000665r 1 65 .byt 65h +000666r 1 66 .byt 66h +000667r 1 67 .byt 67h +000668r 1 68 .byt 68h +000669r 1 69 .byt 69h +00066Ar 1 6A .byt 6ah +00066Br 1 6B .byt 6bh +00066Cr 1 6C .byt 6ch +00066Dr 1 6D .byt 6dh +00066Er 1 6E .byt 6eh +00066Fr 1 6F .byt 6fh +000670r 1 70 .byt 70h +000671r 1 71 .byt 71h +000672r 1 72 .byt 72h +000673r 1 73 .byt 73h +000674r 1 74 .byt 74h +000675r 1 75 .byt 75h +000676r 1 76 .byt 76h +000677r 1 77 .byt 77h +000678r 1 78 .byt 78h +000679r 1 79 .byt 79h +00067Ar 1 7A .byt 7ah +00067Br 1 7B .byt 7bh +00067Cr 1 7C .byt 7ch +00067Dr 1 7D .byt 7dh +00067Er 1 7E .byt 7eh +00067Fr 1 7F .byt 7fh +000680r 1 80 .byt 80h +000681r 1 81 .byt 81h +000682r 1 82 .byt 82h +000683r 1 83 .byt 83h +000684r 1 84 .byt 84h +000685r 1 85 .byt 85h +000686r 1 86 .byt 86h +000687r 1 87 .byt 87h +000688r 1 88 .byt 88h +000689r 1 89 .byt 89h +00068Ar 1 8A .byt 8ah +00068Br 1 8B .byt 8bh +00068Cr 1 8C .byt 8ch +00068Dr 1 8D .byt 8dh +00068Er 1 8E .byt 8eh +00068Fr 1 8F .byt 8fh +000690r 1 90 .byt 90h +000691r 1 91 .byt 91h +000692r 1 92 .byt 92h +000693r 1 93 .byt 93h +000694r 1 94 .byt 94h +000695r 1 95 .byt 95h +000696r 1 96 .byt 96h +000697r 1 97 .byt 97h +000698r 1 98 .byt 98h +000699r 1 99 .byt 99h +00069Ar 1 9A .byt 9ah +00069Br 1 9B .byt 9bh +00069Cr 1 9C .byt 9ch +00069Dr 1 9D .byt 9dh +00069Er 1 9E .byt 9eh +00069Fr 1 9F .byt 9fh +0006A0r 1 A0 .byt 0a0h +0006A1r 1 A1 .byt 0a1h +0006A2r 1 A2 .byt 0a2h +0006A3r 1 A3 .byt 0a3h +0006A4r 1 A4 .byt 0a4h +0006A5r 1 A5 .byt 0a5h +0006A6r 1 A6 .byt 0a6h +0006A7r 1 A7 .byt 0a7h +0006A8r 1 A8 .byt 0a8h +0006A9r 1 A9 .byt 0a9h +0006AAr 1 AA .byt 0aah +0006ABr 1 AB .byt 0abh +0006ACr 1 AC .byt 0ach +0006ADr 1 AD .byt 0adh +0006AEr 1 AE .byt 0aeh +0006AFr 1 AF .byt 0afh +0006B0r 1 B0 .byt 0b0h +0006B1r 1 B1 .byt 0b1h +0006B2r 1 B2 .byt 0b2h +0006B3r 1 B3 .byt 0b3h +0006B4r 1 B4 .byt 0b4h +0006B5r 1 B5 .byt 0b5h +0006B6r 1 B6 .byt 0b6h +0006B7r 1 B7 .byt 0b7h +0006B8r 1 B8 .byt 0b8h +0006B9r 1 B9 .byt 0b9h +0006BAr 1 BA .byt 0bah +0006BBr 1 BB .byt 0bbh +0006BCr 1 BC .byt 0bch +0006BDr 1 BD .byt 0bdh +0006BEr 1 BE .byt 0beh +0006BFr 1 BF .byt 0bfh +0006C0r 1 C0 .byt 0c0h +0006C1r 1 C1 .byt 0c1h +0006C2r 1 C2 .byt 0c2h +0006C3r 1 C3 .byt 0c3h +0006C4r 1 C4 .byt 0c4h +0006C5r 1 C5 .byt 0c5h +0006C6r 1 C6 .byt 0c6h +0006C7r 1 C7 .byt 0c7h +0006C8r 1 C8 .byt 0c8h +0006C9r 1 C9 .byt 0c9h +0006CAr 1 CA .byt 0cah +0006CBr 1 CB .byt 0cbh +0006CCr 1 CC .byt 0cch +0006CDr 1 CD .byt 0cdh +0006CEr 1 CE .byt 0ceh +0006CFr 1 CF .byt 0cfh +0006D0r 1 D0 .byt 0d0h +0006D1r 1 D1 .byt 0d1h +0006D2r 1 D2 .byt 0d2h +0006D3r 1 D3 .byt 0d3h +0006D4r 1 D4 .byt 0d4h +0006D5r 1 D5 .byt 0d5h +0006D6r 1 D6 .byt 0d6h +0006D7r 1 D7 .byt 0d7h +0006D8r 1 D8 .byt 0d8h +0006D9r 1 D9 .byt 0d9h +0006DAr 1 DA .byt 0dah +0006DBr 1 DB .byt 0dbh +0006DCr 1 DC .byt 0dch +0006DDr 1 DD .byt 0ddh +0006DEr 1 DE .byt 0deh +0006DFr 1 DF .byt 0dfh +0006E0r 1 E0 .byt 0e0h +0006E1r 1 E1 .byt 0e1h +0006E2r 1 E2 .byt 0e2h +0006E3r 1 E3 .byt 0e3h +0006E4r 1 E4 .byt 0e4h +0006E5r 1 E5 .byt 0e5h +0006E6r 1 E6 .byt 0e6h +0006E7r 1 E7 .byt 0e7h +0006E8r 1 E8 .byt 0e8h +0006E9r 1 E9 .byt 0e9h +0006EAr 1 EA .byt 0eah +0006EBr 1 EB .byt 0ebh +0006ECr 1 EC .byt 0ech +0006EDr 1 ED .byt 0edh +0006EEr 1 EE .byt 0eeh +0006EFr 1 EF .byt 0efh +0006F0r 1 F0 .byt 0f0h +0006F1r 1 F1 .byt 0f1h +0006F2r 1 F2 .byt 0f2h +0006F3r 1 F3 .byt 0f3h +0006F4r 1 F4 .byt 0f4h +0006F5r 1 F5 .byt 0f5h +0006F6r 1 F6 .byt 0f6h +0006F7r 1 F7 .byt 0f7h +0006F8r 1 F8 .byt 0f8h +0006F9r 1 F9 .byt 0f9h +0006FAr 1 FA .byt 0fah +0006FBr 1 FB .byt 0fbh +0006FCr 1 FC .byt 0fch +0006FDr 1 FD .byt 0fdh +0006FEr 1 FE .byt 0feh +0006FFr 1 FF .byt 0ffh +000700r 1 +000700r 1 ; alternative hex values, uppercase +000700r 1 00 .byt 0h +000701r 1 01 .byt 1h +000702r 1 02 .byt 2h +000703r 1 03 .byt 3h +000704r 1 04 .byt 4h +000705r 1 05 .byt 5h +000706r 1 06 .byt 6h +000707r 1 07 .byt 7h +000708r 1 08 .byt 8h +000709r 1 09 .byt 9h +00070Ar 1 0A .byt 0Ah +00070Br 1 0B .byt 0Bh +00070Cr 1 0C .byt 0Ch +00070Dr 1 0D .byt 0Dh +00070Er 1 0E .byt 0Eh +00070Fr 1 0F .byt 0Fh +000710r 1 10 .byt 10h +000711r 1 11 .byt 11h +000712r 1 12 .byt 12h +000713r 1 13 .byt 13h +000714r 1 14 .byt 14h +000715r 1 15 .byt 15h +000716r 1 16 .byt 16h +000717r 1 17 .byt 17h +000718r 1 18 .byt 18h +000719r 1 19 .byt 19h +00071Ar 1 1A .byt 1Ah +00071Br 1 1B .byt 1Bh +00071Cr 1 1C .byt 1Ch +00071Dr 1 1D .byt 1Dh +00071Er 1 1E .byt 1Eh +00071Fr 1 1F .byt 1Fh +000720r 1 20 .byt 20h +000721r 1 21 .byt 21h +000722r 1 22 .byt 22h +000723r 1 23 .byt 23h +000724r 1 24 .byt 24h +000725r 1 25 .byt 25h +000726r 1 26 .byt 26h +000727r 1 27 .byt 27h +000728r 1 28 .byt 28h +000729r 1 29 .byt 29h +00072Ar 1 2A .byt 2Ah +00072Br 1 2B .byt 2Bh +00072Cr 1 2C .byt 2Ch +00072Dr 1 2D .byt 2Dh +00072Er 1 2E .byt 2Eh +00072Fr 1 2F .byt 2Fh +000730r 1 30 .byt 30h +000731r 1 31 .byt 31h +000732r 1 32 .byt 32h +000733r 1 33 .byt 33h +000734r 1 34 .byt 34h +000735r 1 35 .byt 35h +000736r 1 36 .byt 36h +000737r 1 37 .byt 37h +000738r 1 38 .byt 38h +000739r 1 39 .byt 39h +00073Ar 1 3A .byt 3Ah +00073Br 1 3B .byt 3Bh +00073Cr 1 3C .byt 3Ch +00073Dr 1 3D .byt 3Dh +00073Er 1 3E .byt 3Eh +00073Fr 1 3F .byt 3Fh +000740r 1 40 .byt 40h +000741r 1 41 .byt 41h +000742r 1 42 .byt 42h +000743r 1 43 .byt 43h +000744r 1 44 .byt 44h +000745r 1 45 .byt 45h +000746r 1 46 .byt 46h +000747r 1 47 .byt 47h +000748r 1 48 .byt 48h +000749r 1 49 .byt 49h +00074Ar 1 4A .byt 4Ah +00074Br 1 4B .byt 4Bh +00074Cr 1 4C .byt 4Ch +00074Dr 1 4D .byt 4Dh +00074Er 1 4E .byt 4Eh +00074Fr 1 4F .byt 4Fh +000750r 1 50 .byt 50h +000751r 1 51 .byt 51h +000752r 1 52 .byt 52h +000753r 1 53 .byt 53h +000754r 1 54 .byt 54h +000755r 1 55 .byt 55h +000756r 1 56 .byt 56h +000757r 1 57 .byt 57h +000758r 1 58 .byt 58h +000759r 1 59 .byt 59h +00075Ar 1 5A .byt 5Ah +00075Br 1 5B .byt 5Bh +00075Cr 1 5C .byt 5Ch +00075Dr 1 5D .byt 5Dh +00075Er 1 5E .byt 5Eh +00075Fr 1 5F .byt 5Fh +000760r 1 60 .byt 60h +000761r 1 61 .byt 61h +000762r 1 62 .byt 62h +000763r 1 63 .byt 63h +000764r 1 64 .byt 64h +000765r 1 65 .byt 65h +000766r 1 66 .byt 66h +000767r 1 67 .byt 67h +000768r 1 68 .byt 68h +000769r 1 69 .byt 69h +00076Ar 1 6A .byt 6Ah +00076Br 1 6B .byt 6Bh +00076Cr 1 6C .byt 6Ch +00076Dr 1 6D .byt 6Dh +00076Er 1 6E .byt 6Eh +00076Fr 1 6F .byt 6Fh +000770r 1 70 .byt 70h +000771r 1 71 .byt 71h +000772r 1 72 .byt 72h +000773r 1 73 .byt 73h +000774r 1 74 .byt 74h +000775r 1 75 .byt 75h +000776r 1 76 .byt 76h +000777r 1 77 .byt 77h +000778r 1 78 .byt 78h +000779r 1 79 .byt 79h +00077Ar 1 7A .byt 7Ah +00077Br 1 7B .byt 7Bh +00077Cr 1 7C .byt 7Ch +00077Dr 1 7D .byt 7Dh +00077Er 1 7E .byt 7Eh +00077Fr 1 7F .byt 7Fh +000780r 1 80 .byt 80h +000781r 1 81 .byt 81h +000782r 1 82 .byt 82h +000783r 1 83 .byt 83h +000784r 1 84 .byt 84h +000785r 1 85 .byt 85h +000786r 1 86 .byt 86h +000787r 1 87 .byt 87h +000788r 1 88 .byt 88h +000789r 1 89 .byt 89h +00078Ar 1 8A .byt 8Ah +00078Br 1 8B .byt 8Bh +00078Cr 1 8C .byt 8Ch +00078Dr 1 8D .byt 8Dh +00078Er 1 8E .byt 8Eh +00078Fr 1 8F .byt 8Fh +000790r 1 90 .byt 90h +000791r 1 91 .byt 91h +000792r 1 92 .byt 92h +000793r 1 93 .byt 93h +000794r 1 94 .byt 94h +000795r 1 95 .byt 95h +000796r 1 96 .byt 96h +000797r 1 97 .byt 97h +000798r 1 98 .byt 98h +000799r 1 99 .byt 99h +00079Ar 1 9A .byt 9Ah +00079Br 1 9B .byt 9Bh +00079Cr 1 9C .byt 9Ch +00079Dr 1 9D .byt 9Dh +00079Er 1 9E .byt 9Eh +00079Fr 1 9F .byt 9Fh +0007A0r 1 A0 .byt 0A0h +0007A1r 1 A1 .byt 0A1h +0007A2r 1 A2 .byt 0A2h +0007A3r 1 A3 .byt 0A3h +0007A4r 1 A4 .byt 0A4h +0007A5r 1 A5 .byt 0A5h +0007A6r 1 A6 .byt 0A6h +0007A7r 1 A7 .byt 0A7h +0007A8r 1 A8 .byt 0A8h +0007A9r 1 A9 .byt 0A9h +0007AAr 1 AA .byt 0AAh +0007ABr 1 AB .byt 0ABh +0007ACr 1 AC .byt 0ACh +0007ADr 1 AD .byt 0ADh +0007AEr 1 AE .byt 0AEh +0007AFr 1 AF .byt 0AFh +0007B0r 1 B0 .byt 0B0h +0007B1r 1 B1 .byt 0B1h +0007B2r 1 B2 .byt 0B2h +0007B3r 1 B3 .byt 0B3h +0007B4r 1 B4 .byt 0B4h +0007B5r 1 B5 .byt 0B5h +0007B6r 1 B6 .byt 0B6h +0007B7r 1 B7 .byt 0B7h +0007B8r 1 B8 .byt 0B8h +0007B9r 1 B9 .byt 0B9h +0007BAr 1 BA .byt 0BAh +0007BBr 1 BB .byt 0BBh +0007BCr 1 BC .byt 0BCh +0007BDr 1 BD .byt 0BDh +0007BEr 1 BE .byt 0BEh +0007BFr 1 BF .byt 0BFh +0007C0r 1 C0 .byt 0C0h +0007C1r 1 C1 .byt 0C1h +0007C2r 1 C2 .byt 0C2h +0007C3r 1 C3 .byt 0C3h +0007C4r 1 C4 .byt 0C4h +0007C5r 1 C5 .byt 0C5h +0007C6r 1 C6 .byt 0C6h +0007C7r 1 C7 .byt 0C7h +0007C8r 1 C8 .byt 0C8h +0007C9r 1 C9 .byt 0C9h +0007CAr 1 CA .byt 0CAh +0007CBr 1 CB .byt 0CBh +0007CCr 1 CC .byt 0CCh +0007CDr 1 CD .byt 0CDh +0007CEr 1 CE .byt 0CEh +0007CFr 1 CF .byt 0CFh +0007D0r 1 D0 .byt 0D0h +0007D1r 1 D1 .byt 0D1h +0007D2r 1 D2 .byt 0D2h +0007D3r 1 D3 .byt 0D3h +0007D4r 1 D4 .byt 0D4h +0007D5r 1 D5 .byt 0D5h +0007D6r 1 D6 .byt 0D6h +0007D7r 1 D7 .byt 0D7h +0007D8r 1 D8 .byt 0D8h +0007D9r 1 D9 .byt 0D9h +0007DAr 1 DA .byt 0DAh +0007DBr 1 DB .byt 0DBh +0007DCr 1 DC .byt 0DCh +0007DDr 1 DD .byt 0DDh +0007DEr 1 DE .byt 0DEh +0007DFr 1 DF .byt 0DFh +0007E0r 1 E0 .byt 0E0h +0007E1r 1 E1 .byt 0E1h +0007E2r 1 E2 .byt 0E2h +0007E3r 1 E3 .byt 0E3h +0007E4r 1 E4 .byt 0E4h +0007E5r 1 E5 .byt 0E5h +0007E6r 1 E6 .byt 0E6h +0007E7r 1 E7 .byt 0E7h +0007E8r 1 E8 .byt 0E8h +0007E9r 1 E9 .byt 0E9h +0007EAr 1 EA .byt 0EAh +0007EBr 1 EB .byt 0EBh +0007ECr 1 EC .byt 0ECh +0007EDr 1 ED .byt 0EDh +0007EEr 1 EE .byt 0EEh +0007EFr 1 EF .byt 0EFh +0007F0r 1 F0 .byt 0F0h +0007F1r 1 F1 .byt 0F1h +0007F2r 1 F2 .byt 0F2h +0007F3r 1 F3 .byt 0F3h +0007F4r 1 F4 .byt 0F4h +0007F5r 1 F5 .byt 0F5h +0007F6r 1 F6 .byt 0F6h +0007F7r 1 F7 .byt 0F7h +0007F8r 1 F8 .byt 0F8h +0007F9r 1 F9 .byt 0F9h +0007FAr 1 FA .byt 0FAh +0007FBr 1 FB .byt 0FBh +0007FCr 1 FC .byt 0FCh +0007FDr 1 FD .byt 0FDh +0007FEr 1 FE .byt 0FEh +0007FFr 1 FF .byt 0FFh +000800r 1 +000800r 1 ; alternative 2-digit hex values +000800r 1 00 .byt 00h +000801r 1 01 .byt 01h +000802r 1 02 .byt 02h +000803r 1 03 .byt 03h +000804r 1 04 .byt 04h +000805r 1 05 .byt 05h +000806r 1 06 .byt 06h +000807r 1 07 .byt 07h +000808r 1 08 .byt 08h +000809r 1 09 .byt 09h +00080Ar 1 0A .byt 0ah +00080Br 1 0B .byt 0bh +00080Cr 1 0C .byt 0ch +00080Dr 1 0D .byt 0dh +00080Er 1 0E .byt 0eh +00080Fr 1 0F .byt 0fh +000810r 1 10 .byt 10h +000811r 1 11 .byt 11h +000812r 1 12 .byt 12h +000813r 1 13 .byt 13h +000814r 1 14 .byt 14h +000815r 1 15 .byt 15h +000816r 1 16 .byt 16h +000817r 1 17 .byt 17h +000818r 1 18 .byt 18h +000819r 1 19 .byt 19h +00081Ar 1 1A .byt 1ah +00081Br 1 1B .byt 1bh +00081Cr 1 1C .byt 1ch +00081Dr 1 1D .byt 1dh +00081Er 1 1E .byt 1eh +00081Fr 1 1F .byt 1fh +000820r 1 20 .byt 20h +000821r 1 21 .byt 21h +000822r 1 22 .byt 22h +000823r 1 23 .byt 23h +000824r 1 24 .byt 24h +000825r 1 25 .byt 25h +000826r 1 26 .byt 26h +000827r 1 27 .byt 27h +000828r 1 28 .byt 28h +000829r 1 29 .byt 29h +00082Ar 1 2A .byt 2ah +00082Br 1 2B .byt 2bh +00082Cr 1 2C .byt 2ch +00082Dr 1 2D .byt 2dh +00082Er 1 2E .byt 2eh +00082Fr 1 2F .byt 2fh +000830r 1 30 .byt 30h +000831r 1 31 .byt 31h +000832r 1 32 .byt 32h +000833r 1 33 .byt 33h +000834r 1 34 .byt 34h +000835r 1 35 .byt 35h +000836r 1 36 .byt 36h +000837r 1 37 .byt 37h +000838r 1 38 .byt 38h +000839r 1 39 .byt 39h +00083Ar 1 3A .byt 3ah +00083Br 1 3B .byt 3bh +00083Cr 1 3C .byt 3ch +00083Dr 1 3D .byt 3dh +00083Er 1 3E .byt 3eh +00083Fr 1 3F .byt 3fh +000840r 1 40 .byt 40h +000841r 1 41 .byt 41h +000842r 1 42 .byt 42h +000843r 1 43 .byt 43h +000844r 1 44 .byt 44h +000845r 1 45 .byt 45h +000846r 1 46 .byt 46h +000847r 1 47 .byt 47h +000848r 1 48 .byt 48h +000849r 1 49 .byt 49h +00084Ar 1 4A .byt 4ah +00084Br 1 4B .byt 4bh +00084Cr 1 4C .byt 4ch +00084Dr 1 4D .byt 4dh +00084Er 1 4E .byt 4eh +00084Fr 1 4F .byt 4fh +000850r 1 50 .byt 50h +000851r 1 51 .byt 51h +000852r 1 52 .byt 52h +000853r 1 53 .byt 53h +000854r 1 54 .byt 54h +000855r 1 55 .byt 55h +000856r 1 56 .byt 56h +000857r 1 57 .byt 57h +000858r 1 58 .byt 58h +000859r 1 59 .byt 59h +00085Ar 1 5A .byt 5ah +00085Br 1 5B .byt 5bh +00085Cr 1 5C .byt 5ch +00085Dr 1 5D .byt 5dh +00085Er 1 5E .byt 5eh +00085Fr 1 5F .byt 5fh +000860r 1 60 .byt 60h +000861r 1 61 .byt 61h +000862r 1 62 .byt 62h +000863r 1 63 .byt 63h +000864r 1 64 .byt 64h +000865r 1 65 .byt 65h +000866r 1 66 .byt 66h +000867r 1 67 .byt 67h +000868r 1 68 .byt 68h +000869r 1 69 .byt 69h +00086Ar 1 6A .byt 6ah +00086Br 1 6B .byt 6bh +00086Cr 1 6C .byt 6ch +00086Dr 1 6D .byt 6dh +00086Er 1 6E .byt 6eh +00086Fr 1 6F .byt 6fh +000870r 1 70 .byt 70h +000871r 1 71 .byt 71h +000872r 1 72 .byt 72h +000873r 1 73 .byt 73h +000874r 1 74 .byt 74h +000875r 1 75 .byt 75h +000876r 1 76 .byt 76h +000877r 1 77 .byt 77h +000878r 1 78 .byt 78h +000879r 1 79 .byt 79h +00087Ar 1 7A .byt 7ah +00087Br 1 7B .byt 7bh +00087Cr 1 7C .byt 7ch +00087Dr 1 7D .byt 7dh +00087Er 1 7E .byt 7eh +00087Fr 1 7F .byt 7fh +000880r 1 80 .byt 80h +000881r 1 81 .byt 81h +000882r 1 82 .byt 82h +000883r 1 83 .byt 83h +000884r 1 84 .byt 84h +000885r 1 85 .byt 85h +000886r 1 86 .byt 86h +000887r 1 87 .byt 87h +000888r 1 88 .byt 88h +000889r 1 89 .byt 89h +00088Ar 1 8A .byt 8ah +00088Br 1 8B .byt 8bh +00088Cr 1 8C .byt 8ch +00088Dr 1 8D .byt 8dh +00088Er 1 8E .byt 8eh +00088Fr 1 8F .byt 8fh +000890r 1 90 .byt 90h +000891r 1 91 .byt 91h +000892r 1 92 .byt 92h +000893r 1 93 .byt 93h +000894r 1 94 .byt 94h +000895r 1 95 .byt 95h +000896r 1 96 .byt 96h +000897r 1 97 .byt 97h +000898r 1 98 .byt 98h +000899r 1 99 .byt 99h +00089Ar 1 9A .byt 9ah +00089Br 1 9B .byt 9bh +00089Cr 1 9C .byt 9ch +00089Dr 1 9D .byt 9dh +00089Er 1 9E .byt 9eh +00089Fr 1 9F .byt 9fh +0008A0r 1 A0 .byt 0a0h +0008A1r 1 A1 .byt 0a1h +0008A2r 1 A2 .byt 0a2h +0008A3r 1 A3 .byt 0a3h +0008A4r 1 A4 .byt 0a4h +0008A5r 1 A5 .byt 0a5h +0008A6r 1 A6 .byt 0a6h +0008A7r 1 A7 .byt 0a7h +0008A8r 1 A8 .byt 0a8h +0008A9r 1 A9 .byt 0a9h +0008AAr 1 AA .byt 0aah +0008ABr 1 AB .byt 0abh +0008ACr 1 AC .byt 0ach +0008ADr 1 AD .byt 0adh +0008AEr 1 AE .byt 0aeh +0008AFr 1 AF .byt 0afh +0008B0r 1 B0 .byt 0b0h +0008B1r 1 B1 .byt 0b1h +0008B2r 1 B2 .byt 0b2h +0008B3r 1 B3 .byt 0b3h +0008B4r 1 B4 .byt 0b4h +0008B5r 1 B5 .byt 0b5h +0008B6r 1 B6 .byt 0b6h +0008B7r 1 B7 .byt 0b7h +0008B8r 1 B8 .byt 0b8h +0008B9r 1 B9 .byt 0b9h +0008BAr 1 BA .byt 0bah +0008BBr 1 BB .byt 0bbh +0008BCr 1 BC .byt 0bch +0008BDr 1 BD .byt 0bdh +0008BEr 1 BE .byt 0beh +0008BFr 1 BF .byt 0bfh +0008C0r 1 C0 .byt 0c0h +0008C1r 1 C1 .byt 0c1h +0008C2r 1 C2 .byt 0c2h +0008C3r 1 C3 .byt 0c3h +0008C4r 1 C4 .byt 0c4h +0008C5r 1 C5 .byt 0c5h +0008C6r 1 C6 .byt 0c6h +0008C7r 1 C7 .byt 0c7h +0008C8r 1 C8 .byt 0c8h +0008C9r 1 C9 .byt 0c9h +0008CAr 1 CA .byt 0cah +0008CBr 1 CB .byt 0cbh +0008CCr 1 CC .byt 0cch +0008CDr 1 CD .byt 0cdh +0008CEr 1 CE .byt 0ceh +0008CFr 1 CF .byt 0cfh +0008D0r 1 D0 .byt 0d0h +0008D1r 1 D1 .byt 0d1h +0008D2r 1 D2 .byt 0d2h +0008D3r 1 D3 .byt 0d3h +0008D4r 1 D4 .byt 0d4h +0008D5r 1 D5 .byt 0d5h +0008D6r 1 D6 .byt 0d6h +0008D7r 1 D7 .byt 0d7h +0008D8r 1 D8 .byt 0d8h +0008D9r 1 D9 .byt 0d9h +0008DAr 1 DA .byt 0dah +0008DBr 1 DB .byt 0dbh +0008DCr 1 DC .byt 0dch +0008DDr 1 DD .byt 0ddh +0008DEr 1 DE .byt 0deh +0008DFr 1 DF .byt 0dfh +0008E0r 1 E0 .byt 0e0h +0008E1r 1 E1 .byt 0e1h +0008E2r 1 E2 .byt 0e2h +0008E3r 1 E3 .byt 0e3h +0008E4r 1 E4 .byt 0e4h +0008E5r 1 E5 .byt 0e5h +0008E6r 1 E6 .byt 0e6h +0008E7r 1 E7 .byt 0e7h +0008E8r 1 E8 .byt 0e8h +0008E9r 1 E9 .byt 0e9h +0008EAr 1 EA .byt 0eah +0008EBr 1 EB .byt 0ebh +0008ECr 1 EC .byt 0ech +0008EDr 1 ED .byt 0edh +0008EEr 1 EE .byt 0eeh +0008EFr 1 EF .byt 0efh +0008F0r 1 F0 .byt 0f0h +0008F1r 1 F1 .byt 0f1h +0008F2r 1 F2 .byt 0f2h +0008F3r 1 F3 .byt 0f3h +0008F4r 1 F4 .byt 0f4h +0008F5r 1 F5 .byt 0f5h +0008F6r 1 F6 .byt 0f6h +0008F7r 1 F7 .byt 0f7h +0008F8r 1 F8 .byt 0f8h +0008F9r 1 F9 .byt 0f9h +0008FAr 1 FA .byt 0fah +0008FBr 1 FB .byt 0fbh +0008FCr 1 FC .byt 0fch +0008FDr 1 FD .byt 0fdh +0008FEr 1 FE .byt 0feh +0008FFr 1 FF .byt 0ffh +000900r 1 +000900r 1 ; alternative 2-digit hex values, uppercase +000900r 1 00 .byt 00h +000901r 1 01 .byt 01h +000902r 1 02 .byt 02h +000903r 1 03 .byt 03h +000904r 1 04 .byt 04h +000905r 1 05 .byt 05h +000906r 1 06 .byt 06h +000907r 1 07 .byt 07h +000908r 1 08 .byt 08h +000909r 1 09 .byt 09h +00090Ar 1 0A .byt 0Ah +00090Br 1 0B .byt 0Bh +00090Cr 1 0C .byt 0Ch +00090Dr 1 0D .byt 0Dh +00090Er 1 0E .byt 0Eh +00090Fr 1 0F .byt 0Fh +000910r 1 10 .byt 10h +000911r 1 11 .byt 11h +000912r 1 12 .byt 12h +000913r 1 13 .byt 13h +000914r 1 14 .byt 14h +000915r 1 15 .byt 15h +000916r 1 16 .byt 16h +000917r 1 17 .byt 17h +000918r 1 18 .byt 18h +000919r 1 19 .byt 19h +00091Ar 1 1A .byt 1Ah +00091Br 1 1B .byt 1Bh +00091Cr 1 1C .byt 1Ch +00091Dr 1 1D .byt 1Dh +00091Er 1 1E .byt 1Eh +00091Fr 1 1F .byt 1Fh +000920r 1 20 .byt 20h +000921r 1 21 .byt 21h +000922r 1 22 .byt 22h +000923r 1 23 .byt 23h +000924r 1 24 .byt 24h +000925r 1 25 .byt 25h +000926r 1 26 .byt 26h +000927r 1 27 .byt 27h +000928r 1 28 .byt 28h +000929r 1 29 .byt 29h +00092Ar 1 2A .byt 2Ah +00092Br 1 2B .byt 2Bh +00092Cr 1 2C .byt 2Ch +00092Dr 1 2D .byt 2Dh +00092Er 1 2E .byt 2Eh +00092Fr 1 2F .byt 2Fh +000930r 1 30 .byt 30h +000931r 1 31 .byt 31h +000932r 1 32 .byt 32h +000933r 1 33 .byt 33h +000934r 1 34 .byt 34h +000935r 1 35 .byt 35h +000936r 1 36 .byt 36h +000937r 1 37 .byt 37h +000938r 1 38 .byt 38h +000939r 1 39 .byt 39h +00093Ar 1 3A .byt 3Ah +00093Br 1 3B .byt 3Bh +00093Cr 1 3C .byt 3Ch +00093Dr 1 3D .byt 3Dh +00093Er 1 3E .byt 3Eh +00093Fr 1 3F .byt 3Fh +000940r 1 40 .byt 40h +000941r 1 41 .byt 41h +000942r 1 42 .byt 42h +000943r 1 43 .byt 43h +000944r 1 44 .byt 44h +000945r 1 45 .byt 45h +000946r 1 46 .byt 46h +000947r 1 47 .byt 47h +000948r 1 48 .byt 48h +000949r 1 49 .byt 49h +00094Ar 1 4A .byt 4Ah +00094Br 1 4B .byt 4Bh +00094Cr 1 4C .byt 4Ch +00094Dr 1 4D .byt 4Dh +00094Er 1 4E .byt 4Eh +00094Fr 1 4F .byt 4Fh +000950r 1 50 .byt 50h +000951r 1 51 .byt 51h +000952r 1 52 .byt 52h +000953r 1 53 .byt 53h +000954r 1 54 .byt 54h +000955r 1 55 .byt 55h +000956r 1 56 .byt 56h +000957r 1 57 .byt 57h +000958r 1 58 .byt 58h +000959r 1 59 .byt 59h +00095Ar 1 5A .byt 5Ah +00095Br 1 5B .byt 5Bh +00095Cr 1 5C .byt 5Ch +00095Dr 1 5D .byt 5Dh +00095Er 1 5E .byt 5Eh +00095Fr 1 5F .byt 5Fh +000960r 1 60 .byt 60h +000961r 1 61 .byt 61h +000962r 1 62 .byt 62h +000963r 1 63 .byt 63h +000964r 1 64 .byt 64h +000965r 1 65 .byt 65h +000966r 1 66 .byt 66h +000967r 1 67 .byt 67h +000968r 1 68 .byt 68h +000969r 1 69 .byt 69h +00096Ar 1 6A .byt 6Ah +00096Br 1 6B .byt 6Bh +00096Cr 1 6C .byt 6Ch +00096Dr 1 6D .byt 6Dh +00096Er 1 6E .byt 6Eh +00096Fr 1 6F .byt 6Fh +000970r 1 70 .byt 70h +000971r 1 71 .byt 71h +000972r 1 72 .byt 72h +000973r 1 73 .byt 73h +000974r 1 74 .byt 74h +000975r 1 75 .byt 75h +000976r 1 76 .byt 76h +000977r 1 77 .byt 77h +000978r 1 78 .byt 78h +000979r 1 79 .byt 79h +00097Ar 1 7A .byt 7Ah +00097Br 1 7B .byt 7Bh +00097Cr 1 7C .byt 7Ch +00097Dr 1 7D .byt 7Dh +00097Er 1 7E .byt 7Eh +00097Fr 1 7F .byt 7Fh +000980r 1 80 .byt 80h +000981r 1 81 .byt 81h +000982r 1 82 .byt 82h +000983r 1 83 .byt 83h +000984r 1 84 .byt 84h +000985r 1 85 .byt 85h +000986r 1 86 .byt 86h +000987r 1 87 .byt 87h +000988r 1 88 .byt 88h +000989r 1 89 .byt 89h +00098Ar 1 8A .byt 8Ah +00098Br 1 8B .byt 8Bh +00098Cr 1 8C .byt 8Ch +00098Dr 1 8D .byt 8Dh +00098Er 1 8E .byt 8Eh +00098Fr 1 8F .byt 8Fh +000990r 1 90 .byt 90h +000991r 1 91 .byt 91h +000992r 1 92 .byt 92h +000993r 1 93 .byt 93h +000994r 1 94 .byt 94h +000995r 1 95 .byt 95h +000996r 1 96 .byt 96h +000997r 1 97 .byt 97h +000998r 1 98 .byt 98h +000999r 1 99 .byt 99h +00099Ar 1 9A .byt 9Ah +00099Br 1 9B .byt 9Bh +00099Cr 1 9C .byt 9Ch +00099Dr 1 9D .byt 9Dh +00099Er 1 9E .byt 9Eh +00099Fr 1 9F .byt 9Fh +0009A0r 1 A0 .byt 0A0h +0009A1r 1 A1 .byt 0A1h +0009A2r 1 A2 .byt 0A2h +0009A3r 1 A3 .byt 0A3h +0009A4r 1 A4 .byt 0A4h +0009A5r 1 A5 .byt 0A5h +0009A6r 1 A6 .byt 0A6h +0009A7r 1 A7 .byt 0A7h +0009A8r 1 A8 .byt 0A8h +0009A9r 1 A9 .byt 0A9h +0009AAr 1 AA .byt 0AAh +0009ABr 1 AB .byt 0ABh +0009ACr 1 AC .byt 0ACh +0009ADr 1 AD .byt 0ADh +0009AEr 1 AE .byt 0AEh +0009AFr 1 AF .byt 0AFh +0009B0r 1 B0 .byt 0B0h +0009B1r 1 B1 .byt 0B1h +0009B2r 1 B2 .byt 0B2h +0009B3r 1 B3 .byt 0B3h +0009B4r 1 B4 .byt 0B4h +0009B5r 1 B5 .byt 0B5h +0009B6r 1 B6 .byt 0B6h +0009B7r 1 B7 .byt 0B7h +0009B8r 1 B8 .byt 0B8h +0009B9r 1 B9 .byt 0B9h +0009BAr 1 BA .byt 0BAh +0009BBr 1 BB .byt 0BBh +0009BCr 1 BC .byt 0BCh +0009BDr 1 BD .byt 0BDh +0009BEr 1 BE .byt 0BEh +0009BFr 1 BF .byt 0BFh +0009C0r 1 C0 .byt 0C0h +0009C1r 1 C1 .byt 0C1h +0009C2r 1 C2 .byt 0C2h +0009C3r 1 C3 .byt 0C3h +0009C4r 1 C4 .byt 0C4h +0009C5r 1 C5 .byt 0C5h +0009C6r 1 C6 .byt 0C6h +0009C7r 1 C7 .byt 0C7h +0009C8r 1 C8 .byt 0C8h +0009C9r 1 C9 .byt 0C9h +0009CAr 1 CA .byt 0CAh +0009CBr 1 CB .byt 0CBh +0009CCr 1 CC .byt 0CCh +0009CDr 1 CD .byt 0CDh +0009CEr 1 CE .byt 0CEh +0009CFr 1 CF .byt 0CFh +0009D0r 1 D0 .byt 0D0h +0009D1r 1 D1 .byt 0D1h +0009D2r 1 D2 .byt 0D2h +0009D3r 1 D3 .byt 0D3h +0009D4r 1 D4 .byt 0D4h +0009D5r 1 D5 .byt 0D5h +0009D6r 1 D6 .byt 0D6h +0009D7r 1 D7 .byt 0D7h +0009D8r 1 D8 .byt 0D8h +0009D9r 1 D9 .byt 0D9h +0009DAr 1 DA .byt 0DAh +0009DBr 1 DB .byt 0DBh +0009DCr 1 DC .byt 0DCh +0009DDr 1 DD .byt 0DDh +0009DEr 1 DE .byt 0DEh +0009DFr 1 DF .byt 0DFh +0009E0r 1 E0 .byt 0E0h +0009E1r 1 E1 .byt 0E1h +0009E2r 1 E2 .byt 0E2h +0009E3r 1 E3 .byt 0E3h +0009E4r 1 E4 .byt 0E4h +0009E5r 1 E5 .byt 0E5h +0009E6r 1 E6 .byt 0E6h +0009E7r 1 E7 .byt 0E7h +0009E8r 1 E8 .byt 0E8h +0009E9r 1 E9 .byt 0E9h +0009EAr 1 EA .byt 0EAh +0009EBr 1 EB .byt 0EBh +0009ECr 1 EC .byt 0ECh +0009EDr 1 ED .byt 0EDh +0009EEr 1 EE .byt 0EEh +0009EFr 1 EF .byt 0EFh +0009F0r 1 F0 .byt 0F0h +0009F1r 1 F1 .byt 0F1h +0009F2r 1 F2 .byt 0F2h +0009F3r 1 F3 .byt 0F3h +0009F4r 1 F4 .byt 0F4h +0009F5r 1 F5 .byt 0F5h +0009F6r 1 F6 .byt 0F6h +0009F7r 1 F7 .byt 0F7h +0009F8r 1 F8 .byt 0F8h +0009F9r 1 F9 .byt 0F9h +0009FAr 1 FA .byt 0FAh +0009FBr 1 FB .byt 0FBh +0009FCr 1 FC .byt 0FCh +0009FDr 1 FD .byt 0FDh +0009FEr 1 FE .byt 0FEh +0009FFr 1 FF .byt 0FFh +000A00r 1 +000A00r 1 ; alternative hex values, always leading zero +000A00r 1 00 .byt 00h +000A01r 1 01 .byt 01h +000A02r 1 02 .byt 02h +000A03r 1 03 .byt 03h +000A04r 1 04 .byt 04h +000A05r 1 05 .byt 05h +000A06r 1 06 .byt 06h +000A07r 1 07 .byt 07h +000A08r 1 08 .byt 08h +000A09r 1 09 .byt 09h +000A0Ar 1 0A .byt 0ah +000A0Br 1 0B .byt 0bh +000A0Cr 1 0C .byt 0ch +000A0Dr 1 0D .byt 0dh +000A0Er 1 0E .byt 0eh +000A0Fr 1 0F .byt 0fh +000A10r 1 10 .byt 010h +000A11r 1 11 .byt 011h +000A12r 1 12 .byt 012h +000A13r 1 13 .byt 013h +000A14r 1 14 .byt 014h +000A15r 1 15 .byt 015h +000A16r 1 16 .byt 016h +000A17r 1 17 .byt 017h +000A18r 1 18 .byt 018h +000A19r 1 19 .byt 019h +000A1Ar 1 1A .byt 01ah +000A1Br 1 1B .byt 01bh +000A1Cr 1 1C .byt 01ch +000A1Dr 1 1D .byt 01dh +000A1Er 1 1E .byt 01eh +000A1Fr 1 1F .byt 01fh +000A20r 1 20 .byt 020h +000A21r 1 21 .byt 021h +000A22r 1 22 .byt 022h +000A23r 1 23 .byt 023h +000A24r 1 24 .byt 024h +000A25r 1 25 .byt 025h +000A26r 1 26 .byt 026h +000A27r 1 27 .byt 027h +000A28r 1 28 .byt 028h +000A29r 1 29 .byt 029h +000A2Ar 1 2A .byt 02ah +000A2Br 1 2B .byt 02bh +000A2Cr 1 2C .byt 02ch +000A2Dr 1 2D .byt 02dh +000A2Er 1 2E .byt 02eh +000A2Fr 1 2F .byt 02fh +000A30r 1 30 .byt 030h +000A31r 1 31 .byt 031h +000A32r 1 32 .byt 032h +000A33r 1 33 .byt 033h +000A34r 1 34 .byt 034h +000A35r 1 35 .byt 035h +000A36r 1 36 .byt 036h +000A37r 1 37 .byt 037h +000A38r 1 38 .byt 038h +000A39r 1 39 .byt 039h +000A3Ar 1 3A .byt 03ah +000A3Br 1 3B .byt 03bh +000A3Cr 1 3C .byt 03ch +000A3Dr 1 3D .byt 03dh +000A3Er 1 3E .byt 03eh +000A3Fr 1 3F .byt 03fh +000A40r 1 40 .byt 040h +000A41r 1 41 .byt 041h +000A42r 1 42 .byt 042h +000A43r 1 43 .byt 043h +000A44r 1 44 .byt 044h +000A45r 1 45 .byt 045h +000A46r 1 46 .byt 046h +000A47r 1 47 .byt 047h +000A48r 1 48 .byt 048h +000A49r 1 49 .byt 049h +000A4Ar 1 4A .byt 04ah +000A4Br 1 4B .byt 04bh +000A4Cr 1 4C .byt 04ch +000A4Dr 1 4D .byt 04dh +000A4Er 1 4E .byt 04eh +000A4Fr 1 4F .byt 04fh +000A50r 1 50 .byt 050h +000A51r 1 51 .byt 051h +000A52r 1 52 .byt 052h +000A53r 1 53 .byt 053h +000A54r 1 54 .byt 054h +000A55r 1 55 .byt 055h +000A56r 1 56 .byt 056h +000A57r 1 57 .byt 057h +000A58r 1 58 .byt 058h +000A59r 1 59 .byt 059h +000A5Ar 1 5A .byt 05ah +000A5Br 1 5B .byt 05bh +000A5Cr 1 5C .byt 05ch +000A5Dr 1 5D .byt 05dh +000A5Er 1 5E .byt 05eh +000A5Fr 1 5F .byt 05fh +000A60r 1 60 .byt 060h +000A61r 1 61 .byt 061h +000A62r 1 62 .byt 062h +000A63r 1 63 .byt 063h +000A64r 1 64 .byt 064h +000A65r 1 65 .byt 065h +000A66r 1 66 .byt 066h +000A67r 1 67 .byt 067h +000A68r 1 68 .byt 068h +000A69r 1 69 .byt 069h +000A6Ar 1 6A .byt 06ah +000A6Br 1 6B .byt 06bh +000A6Cr 1 6C .byt 06ch +000A6Dr 1 6D .byt 06dh +000A6Er 1 6E .byt 06eh +000A6Fr 1 6F .byt 06fh +000A70r 1 70 .byt 070h +000A71r 1 71 .byt 071h +000A72r 1 72 .byt 072h +000A73r 1 73 .byt 073h +000A74r 1 74 .byt 074h +000A75r 1 75 .byt 075h +000A76r 1 76 .byt 076h +000A77r 1 77 .byt 077h +000A78r 1 78 .byt 078h +000A79r 1 79 .byt 079h +000A7Ar 1 7A .byt 07ah +000A7Br 1 7B .byt 07bh +000A7Cr 1 7C .byt 07ch +000A7Dr 1 7D .byt 07dh +000A7Er 1 7E .byt 07eh +000A7Fr 1 7F .byt 07fh +000A80r 1 80 .byt 080h +000A81r 1 81 .byt 081h +000A82r 1 82 .byt 082h +000A83r 1 83 .byt 083h +000A84r 1 84 .byt 084h +000A85r 1 85 .byt 085h +000A86r 1 86 .byt 086h +000A87r 1 87 .byt 087h +000A88r 1 88 .byt 088h +000A89r 1 89 .byt 089h +000A8Ar 1 8A .byt 08ah +000A8Br 1 8B .byt 08bh +000A8Cr 1 8C .byt 08ch +000A8Dr 1 8D .byt 08dh +000A8Er 1 8E .byt 08eh +000A8Fr 1 8F .byt 08fh +000A90r 1 90 .byt 090h +000A91r 1 91 .byt 091h +000A92r 1 92 .byt 092h +000A93r 1 93 .byt 093h +000A94r 1 94 .byt 094h +000A95r 1 95 .byt 095h +000A96r 1 96 .byt 096h +000A97r 1 97 .byt 097h +000A98r 1 98 .byt 098h +000A99r 1 99 .byt 099h +000A9Ar 1 9A .byt 09ah +000A9Br 1 9B .byt 09bh +000A9Cr 1 9C .byt 09ch +000A9Dr 1 9D .byt 09dh +000A9Er 1 9E .byt 09eh +000A9Fr 1 9F .byt 09fh +000AA0r 1 A0 .byt 0a0h +000AA1r 1 A1 .byt 0a1h +000AA2r 1 A2 .byt 0a2h +000AA3r 1 A3 .byt 0a3h +000AA4r 1 A4 .byt 0a4h +000AA5r 1 A5 .byt 0a5h +000AA6r 1 A6 .byt 0a6h +000AA7r 1 A7 .byt 0a7h +000AA8r 1 A8 .byt 0a8h +000AA9r 1 A9 .byt 0a9h +000AAAr 1 AA .byt 0aah +000AABr 1 AB .byt 0abh +000AACr 1 AC .byt 0ach +000AADr 1 AD .byt 0adh +000AAEr 1 AE .byt 0aeh +000AAFr 1 AF .byt 0afh +000AB0r 1 B0 .byt 0b0h +000AB1r 1 B1 .byt 0b1h +000AB2r 1 B2 .byt 0b2h +000AB3r 1 B3 .byt 0b3h +000AB4r 1 B4 .byt 0b4h +000AB5r 1 B5 .byt 0b5h +000AB6r 1 B6 .byt 0b6h +000AB7r 1 B7 .byt 0b7h +000AB8r 1 B8 .byt 0b8h +000AB9r 1 B9 .byt 0b9h +000ABAr 1 BA .byt 0bah +000ABBr 1 BB .byt 0bbh +000ABCr 1 BC .byt 0bch +000ABDr 1 BD .byt 0bdh +000ABEr 1 BE .byt 0beh +000ABFr 1 BF .byt 0bfh +000AC0r 1 C0 .byt 0c0h +000AC1r 1 C1 .byt 0c1h +000AC2r 1 C2 .byt 0c2h +000AC3r 1 C3 .byt 0c3h +000AC4r 1 C4 .byt 0c4h +000AC5r 1 C5 .byt 0c5h +000AC6r 1 C6 .byt 0c6h +000AC7r 1 C7 .byt 0c7h +000AC8r 1 C8 .byt 0c8h +000AC9r 1 C9 .byt 0c9h +000ACAr 1 CA .byt 0cah +000ACBr 1 CB .byt 0cbh +000ACCr 1 CC .byt 0cch +000ACDr 1 CD .byt 0cdh +000ACEr 1 CE .byt 0ceh +000ACFr 1 CF .byt 0cfh +000AD0r 1 D0 .byt 0d0h +000AD1r 1 D1 .byt 0d1h +000AD2r 1 D2 .byt 0d2h +000AD3r 1 D3 .byt 0d3h +000AD4r 1 D4 .byt 0d4h +000AD5r 1 D5 .byt 0d5h +000AD6r 1 D6 .byt 0d6h +000AD7r 1 D7 .byt 0d7h +000AD8r 1 D8 .byt 0d8h +000AD9r 1 D9 .byt 0d9h +000ADAr 1 DA .byt 0dah +000ADBr 1 DB .byt 0dbh +000ADCr 1 DC .byt 0dch +000ADDr 1 DD .byt 0ddh +000ADEr 1 DE .byt 0deh +000ADFr 1 DF .byt 0dfh +000AE0r 1 E0 .byt 0e0h +000AE1r 1 E1 .byt 0e1h +000AE2r 1 E2 .byt 0e2h +000AE3r 1 E3 .byt 0e3h +000AE4r 1 E4 .byt 0e4h +000AE5r 1 E5 .byt 0e5h +000AE6r 1 E6 .byt 0e6h +000AE7r 1 E7 .byt 0e7h +000AE8r 1 E8 .byt 0e8h +000AE9r 1 E9 .byt 0e9h +000AEAr 1 EA .byt 0eah +000AEBr 1 EB .byt 0ebh +000AECr 1 EC .byt 0ech +000AEDr 1 ED .byt 0edh +000AEEr 1 EE .byt 0eeh +000AEFr 1 EF .byt 0efh +000AF0r 1 F0 .byt 0f0h +000AF1r 1 F1 .byt 0f1h +000AF2r 1 F2 .byt 0f2h +000AF3r 1 F3 .byt 0f3h +000AF4r 1 F4 .byt 0f4h +000AF5r 1 F5 .byt 0f5h +000AF6r 1 F6 .byt 0f6h +000AF7r 1 F7 .byt 0f7h +000AF8r 1 F8 .byt 0f8h +000AF9r 1 F9 .byt 0f9h +000AFAr 1 FA .byt 0fah +000AFBr 1 FB .byt 0fbh +000AFCr 1 FC .byt 0fch +000AFDr 1 FD .byt 0fdh +000AFEr 1 FE .byt 0feh +000AFFr 1 FF .byt 0ffh +000B00r 1 +000B00r 1 ; binary values, variable length +000B00r 1 00 .byt %0 +000B01r 1 01 .byt %1 +000B02r 1 02 .byt %10 +000B03r 1 03 .byt %11 +000B04r 1 04 .byt %100 +000B05r 1 05 .byt %101 +000B06r 1 06 .byt %110 +000B07r 1 07 .byt %111 +000B08r 1 08 .byt %1000 +000B09r 1 09 .byt %1001 +000B0Ar 1 0A .byt %1010 +000B0Br 1 0B .byt %1011 +000B0Cr 1 0C .byt %1100 +000B0Dr 1 0D .byt %1101 +000B0Er 1 0E .byt %1110 +000B0Fr 1 0F .byt %1111 +000B10r 1 10 .byt %10000 +000B11r 1 11 .byt %10001 +000B12r 1 12 .byt %10010 +000B13r 1 13 .byt %10011 +000B14r 1 14 .byt %10100 +000B15r 1 15 .byt %10101 +000B16r 1 16 .byt %10110 +000B17r 1 17 .byt %10111 +000B18r 1 18 .byt %11000 +000B19r 1 19 .byt %11001 +000B1Ar 1 1A .byt %11010 +000B1Br 1 1B .byt %11011 +000B1Cr 1 1C .byt %11100 +000B1Dr 1 1D .byt %11101 +000B1Er 1 1E .byt %11110 +000B1Fr 1 1F .byt %11111 +000B20r 1 20 .byt %100000 +000B21r 1 21 .byt %100001 +000B22r 1 22 .byt %100010 +000B23r 1 23 .byt %100011 +000B24r 1 24 .byt %100100 +000B25r 1 25 .byt %100101 +000B26r 1 26 .byt %100110 +000B27r 1 27 .byt %100111 +000B28r 1 28 .byt %101000 +000B29r 1 29 .byt %101001 +000B2Ar 1 2A .byt %101010 +000B2Br 1 2B .byt %101011 +000B2Cr 1 2C .byt %101100 +000B2Dr 1 2D .byt %101101 +000B2Er 1 2E .byt %101110 +000B2Fr 1 2F .byt %101111 +000B30r 1 30 .byt %110000 +000B31r 1 31 .byt %110001 +000B32r 1 32 .byt %110010 +000B33r 1 33 .byt %110011 +000B34r 1 34 .byt %110100 +000B35r 1 35 .byt %110101 +000B36r 1 36 .byt %110110 +000B37r 1 37 .byt %110111 +000B38r 1 38 .byt %111000 +000B39r 1 39 .byt %111001 +000B3Ar 1 3A .byt %111010 +000B3Br 1 3B .byt %111011 +000B3Cr 1 3C .byt %111100 +000B3Dr 1 3D .byt %111101 +000B3Er 1 3E .byt %111110 +000B3Fr 1 3F .byt %111111 +000B40r 1 40 .byt %1000000 +000B41r 1 41 .byt %1000001 +000B42r 1 42 .byt %1000010 +000B43r 1 43 .byt %1000011 +000B44r 1 44 .byt %1000100 +000B45r 1 45 .byt %1000101 +000B46r 1 46 .byt %1000110 +000B47r 1 47 .byt %1000111 +000B48r 1 48 .byt %1001000 +000B49r 1 49 .byt %1001001 +000B4Ar 1 4A .byt %1001010 +000B4Br 1 4B .byt %1001011 +000B4Cr 1 4C .byt %1001100 +000B4Dr 1 4D .byt %1001101 +000B4Er 1 4E .byt %1001110 +000B4Fr 1 4F .byt %1001111 +000B50r 1 50 .byt %1010000 +000B51r 1 51 .byt %1010001 +000B52r 1 52 .byt %1010010 +000B53r 1 53 .byt %1010011 +000B54r 1 54 .byt %1010100 +000B55r 1 55 .byt %1010101 +000B56r 1 56 .byt %1010110 +000B57r 1 57 .byt %1010111 +000B58r 1 58 .byt %1011000 +000B59r 1 59 .byt %1011001 +000B5Ar 1 5A .byt %1011010 +000B5Br 1 5B .byt %1011011 +000B5Cr 1 5C .byt %1011100 +000B5Dr 1 5D .byt %1011101 +000B5Er 1 5E .byt %1011110 +000B5Fr 1 5F .byt %1011111 +000B60r 1 60 .byt %1100000 +000B61r 1 61 .byt %1100001 +000B62r 1 62 .byt %1100010 +000B63r 1 63 .byt %1100011 +000B64r 1 64 .byt %1100100 +000B65r 1 65 .byt %1100101 +000B66r 1 66 .byt %1100110 +000B67r 1 67 .byt %1100111 +000B68r 1 68 .byt %1101000 +000B69r 1 69 .byt %1101001 +000B6Ar 1 6A .byt %1101010 +000B6Br 1 6B .byt %1101011 +000B6Cr 1 6C .byt %1101100 +000B6Dr 1 6D .byt %1101101 +000B6Er 1 6E .byt %1101110 +000B6Fr 1 6F .byt %1101111 +000B70r 1 70 .byt %1110000 +000B71r 1 71 .byt %1110001 +000B72r 1 72 .byt %1110010 +000B73r 1 73 .byt %1110011 +000B74r 1 74 .byt %1110100 +000B75r 1 75 .byt %1110101 +000B76r 1 76 .byt %1110110 +000B77r 1 77 .byt %1110111 +000B78r 1 78 .byt %1111000 +000B79r 1 79 .byt %1111001 +000B7Ar 1 7A .byt %1111010 +000B7Br 1 7B .byt %1111011 +000B7Cr 1 7C .byt %1111100 +000B7Dr 1 7D .byt %1111101 +000B7Er 1 7E .byt %1111110 +000B7Fr 1 7F .byt %1111111 +000B80r 1 80 .byt %10000000 +000B81r 1 81 .byt %10000001 +000B82r 1 82 .byt %10000010 +000B83r 1 83 .byt %10000011 +000B84r 1 84 .byt %10000100 +000B85r 1 85 .byt %10000101 +000B86r 1 86 .byt %10000110 +000B87r 1 87 .byt %10000111 +000B88r 1 88 .byt %10001000 +000B89r 1 89 .byt %10001001 +000B8Ar 1 8A .byt %10001010 +000B8Br 1 8B .byt %10001011 +000B8Cr 1 8C .byt %10001100 +000B8Dr 1 8D .byt %10001101 +000B8Er 1 8E .byt %10001110 +000B8Fr 1 8F .byt %10001111 +000B90r 1 90 .byt %10010000 +000B91r 1 91 .byt %10010001 +000B92r 1 92 .byt %10010010 +000B93r 1 93 .byt %10010011 +000B94r 1 94 .byt %10010100 +000B95r 1 95 .byt %10010101 +000B96r 1 96 .byt %10010110 +000B97r 1 97 .byt %10010111 +000B98r 1 98 .byt %10011000 +000B99r 1 99 .byt %10011001 +000B9Ar 1 9A .byt %10011010 +000B9Br 1 9B .byt %10011011 +000B9Cr 1 9C .byt %10011100 +000B9Dr 1 9D .byt %10011101 +000B9Er 1 9E .byt %10011110 +000B9Fr 1 9F .byt %10011111 +000BA0r 1 A0 .byt %10100000 +000BA1r 1 A1 .byt %10100001 +000BA2r 1 A2 .byt %10100010 +000BA3r 1 A3 .byt %10100011 +000BA4r 1 A4 .byt %10100100 +000BA5r 1 A5 .byt %10100101 +000BA6r 1 A6 .byt %10100110 +000BA7r 1 A7 .byt %10100111 +000BA8r 1 A8 .byt %10101000 +000BA9r 1 A9 .byt %10101001 +000BAAr 1 AA .byt %10101010 +000BABr 1 AB .byt %10101011 +000BACr 1 AC .byt %10101100 +000BADr 1 AD .byt %10101101 +000BAEr 1 AE .byt %10101110 +000BAFr 1 AF .byt %10101111 +000BB0r 1 B0 .byt %10110000 +000BB1r 1 B1 .byt %10110001 +000BB2r 1 B2 .byt %10110010 +000BB3r 1 B3 .byt %10110011 +000BB4r 1 B4 .byt %10110100 +000BB5r 1 B5 .byt %10110101 +000BB6r 1 B6 .byt %10110110 +000BB7r 1 B7 .byt %10110111 +000BB8r 1 B8 .byt %10111000 +000BB9r 1 B9 .byt %10111001 +000BBAr 1 BA .byt %10111010 +000BBBr 1 BB .byt %10111011 +000BBCr 1 BC .byt %10111100 +000BBDr 1 BD .byt %10111101 +000BBEr 1 BE .byt %10111110 +000BBFr 1 BF .byt %10111111 +000BC0r 1 C0 .byt %11000000 +000BC1r 1 C1 .byt %11000001 +000BC2r 1 C2 .byt %11000010 +000BC3r 1 C3 .byt %11000011 +000BC4r 1 C4 .byt %11000100 +000BC5r 1 C5 .byt %11000101 +000BC6r 1 C6 .byt %11000110 +000BC7r 1 C7 .byt %11000111 +000BC8r 1 C8 .byt %11001000 +000BC9r 1 C9 .byt %11001001 +000BCAr 1 CA .byt %11001010 +000BCBr 1 CB .byt %11001011 +000BCCr 1 CC .byt %11001100 +000BCDr 1 CD .byt %11001101 +000BCEr 1 CE .byt %11001110 +000BCFr 1 CF .byt %11001111 +000BD0r 1 D0 .byt %11010000 +000BD1r 1 D1 .byt %11010001 +000BD2r 1 D2 .byt %11010010 +000BD3r 1 D3 .byt %11010011 +000BD4r 1 D4 .byt %11010100 +000BD5r 1 D5 .byt %11010101 +000BD6r 1 D6 .byt %11010110 +000BD7r 1 D7 .byt %11010111 +000BD8r 1 D8 .byt %11011000 +000BD9r 1 D9 .byt %11011001 +000BDAr 1 DA .byt %11011010 +000BDBr 1 DB .byt %11011011 +000BDCr 1 DC .byt %11011100 +000BDDr 1 DD .byt %11011101 +000BDEr 1 DE .byt %11011110 +000BDFr 1 DF .byt %11011111 +000BE0r 1 E0 .byt %11100000 +000BE1r 1 E1 .byt %11100001 +000BE2r 1 E2 .byt %11100010 +000BE3r 1 E3 .byt %11100011 +000BE4r 1 E4 .byt %11100100 +000BE5r 1 E5 .byt %11100101 +000BE6r 1 E6 .byt %11100110 +000BE7r 1 E7 .byt %11100111 +000BE8r 1 E8 .byt %11101000 +000BE9r 1 E9 .byt %11101001 +000BEAr 1 EA .byt %11101010 +000BEBr 1 EB .byt %11101011 +000BECr 1 EC .byt %11101100 +000BEDr 1 ED .byt %11101101 +000BEEr 1 EE .byt %11101110 +000BEFr 1 EF .byt %11101111 +000BF0r 1 F0 .byt %11110000 +000BF1r 1 F1 .byt %11110001 +000BF2r 1 F2 .byt %11110010 +000BF3r 1 F3 .byt %11110011 +000BF4r 1 F4 .byt %11110100 +000BF5r 1 F5 .byt %11110101 +000BF6r 1 F6 .byt %11110110 +000BF7r 1 F7 .byt %11110111 +000BF8r 1 F8 .byt %11111000 +000BF9r 1 F9 .byt %11111001 +000BFAr 1 FA .byt %11111010 +000BFBr 1 FB .byt %11111011 +000BFCr 1 FC .byt %11111100 +000BFDr 1 FD .byt %11111101 +000BFEr 1 FE .byt %11111110 +000BFFr 1 FF .byt %11111111 +000C00r 1 +000C00r 1 ; binary values, full length +000C00r 1 00 .byt %00000000 +000C01r 1 01 .byt %00000001 +000C02r 1 02 .byt %00000010 +000C03r 1 03 .byt %00000011 +000C04r 1 04 .byt %00000100 +000C05r 1 05 .byt %00000101 +000C06r 1 06 .byt %00000110 +000C07r 1 07 .byt %00000111 +000C08r 1 08 .byt %00001000 +000C09r 1 09 .byt %00001001 +000C0Ar 1 0A .byt %00001010 +000C0Br 1 0B .byt %00001011 +000C0Cr 1 0C .byt %00001100 +000C0Dr 1 0D .byt %00001101 +000C0Er 1 0E .byt %00001110 +000C0Fr 1 0F .byt %00001111 +000C10r 1 10 .byt %00010000 +000C11r 1 11 .byt %00010001 +000C12r 1 12 .byt %00010010 +000C13r 1 13 .byt %00010011 +000C14r 1 14 .byt %00010100 +000C15r 1 15 .byt %00010101 +000C16r 1 16 .byt %00010110 +000C17r 1 17 .byt %00010111 +000C18r 1 18 .byt %00011000 +000C19r 1 19 .byt %00011001 +000C1Ar 1 1A .byt %00011010 +000C1Br 1 1B .byt %00011011 +000C1Cr 1 1C .byt %00011100 +000C1Dr 1 1D .byt %00011101 +000C1Er 1 1E .byt %00011110 +000C1Fr 1 1F .byt %00011111 +000C20r 1 20 .byt %00100000 +000C21r 1 21 .byt %00100001 +000C22r 1 22 .byt %00100010 +000C23r 1 23 .byt %00100011 +000C24r 1 24 .byt %00100100 +000C25r 1 25 .byt %00100101 +000C26r 1 26 .byt %00100110 +000C27r 1 27 .byt %00100111 +000C28r 1 28 .byt %00101000 +000C29r 1 29 .byt %00101001 +000C2Ar 1 2A .byt %00101010 +000C2Br 1 2B .byt %00101011 +000C2Cr 1 2C .byt %00101100 +000C2Dr 1 2D .byt %00101101 +000C2Er 1 2E .byt %00101110 +000C2Fr 1 2F .byt %00101111 +000C30r 1 30 .byt %00110000 +000C31r 1 31 .byt %00110001 +000C32r 1 32 .byt %00110010 +000C33r 1 33 .byt %00110011 +000C34r 1 34 .byt %00110100 +000C35r 1 35 .byt %00110101 +000C36r 1 36 .byt %00110110 +000C37r 1 37 .byt %00110111 +000C38r 1 38 .byt %00111000 +000C39r 1 39 .byt %00111001 +000C3Ar 1 3A .byt %00111010 +000C3Br 1 3B .byt %00111011 +000C3Cr 1 3C .byt %00111100 +000C3Dr 1 3D .byt %00111101 +000C3Er 1 3E .byt %00111110 +000C3Fr 1 3F .byt %00111111 +000C40r 1 40 .byt %01000000 +000C41r 1 41 .byt %01000001 +000C42r 1 42 .byt %01000010 +000C43r 1 43 .byt %01000011 +000C44r 1 44 .byt %01000100 +000C45r 1 45 .byt %01000101 +000C46r 1 46 .byt %01000110 +000C47r 1 47 .byt %01000111 +000C48r 1 48 .byt %01001000 +000C49r 1 49 .byt %01001001 +000C4Ar 1 4A .byt %01001010 +000C4Br 1 4B .byt %01001011 +000C4Cr 1 4C .byt %01001100 +000C4Dr 1 4D .byt %01001101 +000C4Er 1 4E .byt %01001110 +000C4Fr 1 4F .byt %01001111 +000C50r 1 50 .byt %01010000 +000C51r 1 51 .byt %01010001 +000C52r 1 52 .byt %01010010 +000C53r 1 53 .byt %01010011 +000C54r 1 54 .byt %01010100 +000C55r 1 55 .byt %01010101 +000C56r 1 56 .byt %01010110 +000C57r 1 57 .byt %01010111 +000C58r 1 58 .byt %01011000 +000C59r 1 59 .byt %01011001 +000C5Ar 1 5A .byt %01011010 +000C5Br 1 5B .byt %01011011 +000C5Cr 1 5C .byt %01011100 +000C5Dr 1 5D .byt %01011101 +000C5Er 1 5E .byt %01011110 +000C5Fr 1 5F .byt %01011111 +000C60r 1 60 .byt %01100000 +000C61r 1 61 .byt %01100001 +000C62r 1 62 .byt %01100010 +000C63r 1 63 .byt %01100011 +000C64r 1 64 .byt %01100100 +000C65r 1 65 .byt %01100101 +000C66r 1 66 .byt %01100110 +000C67r 1 67 .byt %01100111 +000C68r 1 68 .byt %01101000 +000C69r 1 69 .byt %01101001 +000C6Ar 1 6A .byt %01101010 +000C6Br 1 6B .byt %01101011 +000C6Cr 1 6C .byt %01101100 +000C6Dr 1 6D .byt %01101101 +000C6Er 1 6E .byt %01101110 +000C6Fr 1 6F .byt %01101111 +000C70r 1 70 .byt %01110000 +000C71r 1 71 .byt %01110001 +000C72r 1 72 .byt %01110010 +000C73r 1 73 .byt %01110011 +000C74r 1 74 .byt %01110100 +000C75r 1 75 .byt %01110101 +000C76r 1 76 .byt %01110110 +000C77r 1 77 .byt %01110111 +000C78r 1 78 .byt %01111000 +000C79r 1 79 .byt %01111001 +000C7Ar 1 7A .byt %01111010 +000C7Br 1 7B .byt %01111011 +000C7Cr 1 7C .byt %01111100 +000C7Dr 1 7D .byt %01111101 +000C7Er 1 7E .byt %01111110 +000C7Fr 1 7F .byt %01111111 +000C80r 1 80 .byt %10000000 +000C81r 1 81 .byt %10000001 +000C82r 1 82 .byt %10000010 +000C83r 1 83 .byt %10000011 +000C84r 1 84 .byt %10000100 +000C85r 1 85 .byt %10000101 +000C86r 1 86 .byt %10000110 +000C87r 1 87 .byt %10000111 +000C88r 1 88 .byt %10001000 +000C89r 1 89 .byt %10001001 +000C8Ar 1 8A .byt %10001010 +000C8Br 1 8B .byt %10001011 +000C8Cr 1 8C .byt %10001100 +000C8Dr 1 8D .byt %10001101 +000C8Er 1 8E .byt %10001110 +000C8Fr 1 8F .byt %10001111 +000C90r 1 90 .byt %10010000 +000C91r 1 91 .byt %10010001 +000C92r 1 92 .byt %10010010 +000C93r 1 93 .byt %10010011 +000C94r 1 94 .byt %10010100 +000C95r 1 95 .byt %10010101 +000C96r 1 96 .byt %10010110 +000C97r 1 97 .byt %10010111 +000C98r 1 98 .byt %10011000 +000C99r 1 99 .byt %10011001 +000C9Ar 1 9A .byt %10011010 +000C9Br 1 9B .byt %10011011 +000C9Cr 1 9C .byt %10011100 +000C9Dr 1 9D .byt %10011101 +000C9Er 1 9E .byt %10011110 +000C9Fr 1 9F .byt %10011111 +000CA0r 1 A0 .byt %10100000 +000CA1r 1 A1 .byt %10100001 +000CA2r 1 A2 .byt %10100010 +000CA3r 1 A3 .byt %10100011 +000CA4r 1 A4 .byt %10100100 +000CA5r 1 A5 .byt %10100101 +000CA6r 1 A6 .byt %10100110 +000CA7r 1 A7 .byt %10100111 +000CA8r 1 A8 .byt %10101000 +000CA9r 1 A9 .byt %10101001 +000CAAr 1 AA .byt %10101010 +000CABr 1 AB .byt %10101011 +000CACr 1 AC .byt %10101100 +000CADr 1 AD .byt %10101101 +000CAEr 1 AE .byt %10101110 +000CAFr 1 AF .byt %10101111 +000CB0r 1 B0 .byt %10110000 +000CB1r 1 B1 .byt %10110001 +000CB2r 1 B2 .byt %10110010 +000CB3r 1 B3 .byt %10110011 +000CB4r 1 B4 .byt %10110100 +000CB5r 1 B5 .byt %10110101 +000CB6r 1 B6 .byt %10110110 +000CB7r 1 B7 .byt %10110111 +000CB8r 1 B8 .byt %10111000 +000CB9r 1 B9 .byt %10111001 +000CBAr 1 BA .byt %10111010 +000CBBr 1 BB .byt %10111011 +000CBCr 1 BC .byt %10111100 +000CBDr 1 BD .byt %10111101 +000CBEr 1 BE .byt %10111110 +000CBFr 1 BF .byt %10111111 +000CC0r 1 C0 .byt %11000000 +000CC1r 1 C1 .byt %11000001 +000CC2r 1 C2 .byt %11000010 +000CC3r 1 C3 .byt %11000011 +000CC4r 1 C4 .byt %11000100 +000CC5r 1 C5 .byt %11000101 +000CC6r 1 C6 .byt %11000110 +000CC7r 1 C7 .byt %11000111 +000CC8r 1 C8 .byt %11001000 +000CC9r 1 C9 .byt %11001001 +000CCAr 1 CA .byt %11001010 +000CCBr 1 CB .byt %11001011 +000CCCr 1 CC .byt %11001100 +000CCDr 1 CD .byt %11001101 +000CCEr 1 CE .byt %11001110 +000CCFr 1 CF .byt %11001111 +000CD0r 1 D0 .byt %11010000 +000CD1r 1 D1 .byt %11010001 +000CD2r 1 D2 .byt %11010010 +000CD3r 1 D3 .byt %11010011 +000CD4r 1 D4 .byt %11010100 +000CD5r 1 D5 .byt %11010101 +000CD6r 1 D6 .byt %11010110 +000CD7r 1 D7 .byt %11010111 +000CD8r 1 D8 .byt %11011000 +000CD9r 1 D9 .byt %11011001 +000CDAr 1 DA .byt %11011010 +000CDBr 1 DB .byt %11011011 +000CDCr 1 DC .byt %11011100 +000CDDr 1 DD .byt %11011101 +000CDEr 1 DE .byt %11011110 +000CDFr 1 DF .byt %11011111 +000CE0r 1 E0 .byt %11100000 +000CE1r 1 E1 .byt %11100001 +000CE2r 1 E2 .byt %11100010 +000CE3r 1 E3 .byt %11100011 +000CE4r 1 E4 .byt %11100100 +000CE5r 1 E5 .byt %11100101 +000CE6r 1 E6 .byt %11100110 +000CE7r 1 E7 .byt %11100111 +000CE8r 1 E8 .byt %11101000 +000CE9r 1 E9 .byt %11101001 +000CEAr 1 EA .byt %11101010 +000CEBr 1 EB .byt %11101011 +000CECr 1 EC .byt %11101100 +000CEDr 1 ED .byt %11101101 +000CEEr 1 EE .byt %11101110 +000CEFr 1 EF .byt %11101111 +000CF0r 1 F0 .byt %11110000 +000CF1r 1 F1 .byt %11110001 +000CF2r 1 F2 .byt %11110010 +000CF3r 1 F3 .byt %11110011 +000CF4r 1 F4 .byt %11110100 +000CF5r 1 F5 .byt %11110101 +000CF6r 1 F6 .byt %11110110 +000CF7r 1 F7 .byt %11110111 +000CF8r 1 F8 .byt %11111000 +000CF9r 1 F9 .byt %11111001 +000CFAr 1 FA .byt %11111010 +000CFBr 1 FB .byt %11111011 +000CFCr 1 FC .byt %11111100 +000CFDr 1 FD .byt %11111101 +000CFEr 1 FE .byt %11111110 +000CFFr 1 FF .byt %11111111 +000D00r 1 +000D00r 1 ; some character values +000D00r 1 20 .byt ' ' +000D01r 1 21 .byt '!' +000D02r 1 22 .byt '"' +000D03r 1 23 .byt '#' +000D04r 1 24 .byt '$' +000D05r 1 25 .byt '%' +000D06r 1 26 .byt '&' +000D07r 1 27 .byt ''' +000D08r 1 28 .byt '(' +000D09r 1 29 .byt ')' +000D0Ar 1 2A .byt '*' +000D0Br 1 2B .byt '+' +000D0Cr 1 2C .byt ',' +000D0Dr 1 2D .byt '-' +000D0Er 1 2E .byt '.' +000D0Fr 1 2F .byt '/' +000D10r 1 30 .byt '0' +000D11r 1 31 .byt '1' +000D12r 1 32 .byt '2' +000D13r 1 33 .byt '3' +000D14r 1 34 .byt '4' +000D15r 1 35 .byt '5' +000D16r 1 36 .byt '6' +000D17r 1 37 .byt '7' +000D18r 1 38 .byt '8' +000D19r 1 39 .byt '9' +000D1Ar 1 3A .byt ':' +000D1Br 1 3B .byt ';' +000D1Cr 1 3C .byt '<' +000D1Dr 1 3D .byt '=' +000D1Er 1 3E .byt '>' +000D1Fr 1 3F .byt '?' +000D20r 1 40 .byt '@' +000D21r 1 41 .byt 'A' +000D22r 1 42 .byt 'B' +000D23r 1 43 .byt 'C' +000D24r 1 44 .byt 'D' +000D25r 1 45 .byt 'E' +000D26r 1 46 .byt 'F' +000D27r 1 47 .byt 'G' +000D28r 1 48 .byt 'H' +000D29r 1 49 .byt 'I' +000D2Ar 1 4A .byt 'J' +000D2Br 1 4B .byt 'K' +000D2Cr 1 4C .byt 'L' +000D2Dr 1 4D .byt 'M' +000D2Er 1 4E .byt 'N' +000D2Fr 1 4F .byt 'O' +000D30r 1 50 .byt 'P' +000D31r 1 51 .byt 'Q' +000D32r 1 52 .byt 'R' +000D33r 1 53 .byt 'S' +000D34r 1 54 .byt 'T' +000D35r 1 55 .byt 'U' +000D36r 1 56 .byt 'V' +000D37r 1 57 .byt 'W' +000D38r 1 58 .byt 'X' +000D39r 1 59 .byt 'Y' +000D3Ar 1 5A .byt 'Z' +000D3Br 1 5B .byt '[' +000D3Cr 1 5C .byt '\' +000D3Dr 1 5D .byt ']' +000D3Er 1 5E .byt '^' +000D3Fr 1 5F .byt '_' +000D40r 1 60 .byt '`' +000D41r 1 61 .byt 'a' +000D42r 1 62 .byt 'b' +000D43r 1 63 .byt 'c' +000D44r 1 64 .byt 'd' +000D45r 1 65 .byt 'e' +000D46r 1 66 .byt 'f' +000D47r 1 67 .byt 'g' +000D48r 1 68 .byt 'h' +000D49r 1 69 .byt 'i' +000D4Ar 1 6A .byt 'j' +000D4Br 1 6B .byt 'k' +000D4Cr 1 6C .byt 'l' +000D4Dr 1 6D .byt 'm' +000D4Er 1 6E .byt 'n' +000D4Fr 1 6F .byt 'o' +000D50r 1 70 .byt 'p' +000D51r 1 71 .byt 'q' +000D52r 1 72 .byt 'r' +000D53r 1 73 .byt 's' +000D54r 1 74 .byt 't' +000D55r 1 75 .byt 'u' +000D56r 1 76 .byt 'v' +000D57r 1 77 .byt 'w' +000D58r 1 78 .byt 'x' +000D59r 1 79 .byt 'y' +000D5Ar 1 7A .byt 'z' +000D5Br 1 7B .byt '{' +000D5Cr 1 7C .byt '|' +000D5Dr 1 7D .byt '}' +000D5Er 1 7E .byt '~' +000D5Fr 1 +000D5Fr 1 ; multiple values on one line, decimal +000D5Fr 1 00 01 02 03 .byt 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +000D63r 1 04 05 06 07 +000D67r 1 08 09 0A 0B +000D6Fr 1 10 11 12 13 .byt 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +000D73r 1 14 15 16 17 +000D77r 1 18 19 1A 1B +000D7Fr 1 20 21 22 23 .byt 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 +000D83r 1 24 25 26 27 +000D87r 1 28 29 2A 2B +000D8Fr 1 30 31 32 33 .byt 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 +000D93r 1 34 35 36 37 +000D97r 1 38 39 3A 3B +000D9Fr 1 40 41 42 43 .byt 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 +000DA3r 1 44 45 46 47 +000DA7r 1 48 49 4A 4B +000DAFr 1 50 51 52 53 .byt 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95 +000DB3r 1 54 55 56 57 +000DB7r 1 58 59 5A 5B +000DBFr 1 60 61 62 63 .byt 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 +000DC3r 1 64 65 66 67 +000DC7r 1 68 69 6A 6B +000DCFr 1 70 71 72 73 .byt 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +000DD3r 1 74 75 76 77 +000DD7r 1 78 79 7A 7B +000DDFr 1 80 81 82 83 .byt 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +000DE3r 1 84 85 86 87 +000DE7r 1 88 89 8A 8B +000DEFr 1 90 91 92 93 .byt 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 +000DF3r 1 94 95 96 97 +000DF7r 1 98 99 9A 9B +000DFFr 1 A0 A1 A2 A3 .byt 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 +000E03r 1 A4 A5 A6 A7 +000E07r 1 A8 A9 AA AB +000E0Fr 1 B0 B1 B2 B3 .byt 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 +000E13r 1 B4 B5 B6 B7 +000E17r 1 B8 B9 BA BB +000E1Fr 1 C0 C1 C2 C3 .byt 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 +000E23r 1 C4 C5 C6 C7 +000E27r 1 C8 C9 CA CB +000E2Fr 1 D0 D1 D2 D3 .byt 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 +000E33r 1 D4 D5 D6 D7 +000E37r 1 D8 D9 DA DB +000E3Fr 1 E0 E1 E2 E3 .byt 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 +000E43r 1 E4 E5 E6 E7 +000E47r 1 E8 E9 EA EB +000E4Fr 1 F0 F1 F2 F3 .byt 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +000E53r 1 F4 F5 F6 F7 +000E57r 1 F8 F9 FA FB +000E5Fr 1 +000E5Fr 1 ; multiple values on one line, hex +000E5Fr 1 00 01 02 03 .byt $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +000E63r 1 04 05 06 07 +000E67r 1 08 09 0A 0B +000E6Fr 1 10 11 12 13 .byt $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +000E73r 1 14 15 16 17 +000E77r 1 18 19 1A 1B +000E7Fr 1 20 21 22 23 .byt $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f +000E83r 1 24 25 26 27 +000E87r 1 28 29 2A 2B +000E8Fr 1 30 31 32 33 .byt $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f +000E93r 1 34 35 36 37 +000E97r 1 38 39 3A 3B +000E9Fr 1 40 41 42 43 .byt $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f +000EA3r 1 44 45 46 47 +000EA7r 1 48 49 4A 4B +000EAFr 1 50 51 52 53 .byt $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$5b,$5c,$5d,$5e,$5f +000EB3r 1 54 55 56 57 +000EB7r 1 58 59 5A 5B +000EBFr 1 60 61 62 63 .byt $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f +000EC3r 1 64 65 66 67 +000EC7r 1 68 69 6A 6B +000ECFr 1 70 71 72 73 .byt $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +000ED3r 1 74 75 76 77 +000ED7r 1 78 79 7A 7B +000EDFr 1 80 81 82 83 .byt $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +000EE3r 1 84 85 86 87 +000EE7r 1 88 89 8A 8B +000EEFr 1 90 91 92 93 .byt $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f +000EF3r 1 94 95 96 97 +000EF7r 1 98 99 9A 9B +000EFFr 1 A0 A1 A2 A3 .byt $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af +000F03r 1 A4 A5 A6 A7 +000F07r 1 A8 A9 AA AB +000F0Fr 1 B0 B1 B2 B3 .byt $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf +000F13r 1 B4 B5 B6 B7 +000F17r 1 B8 B9 BA BB +000F1Fr 1 C0 C1 C2 C3 .byt $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf +000F23r 1 C4 C5 C6 C7 +000F27r 1 C8 C9 CA CB +000F2Fr 1 D0 D1 D2 D3 .byt $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df +000F33r 1 D4 D5 D6 D7 +000F37r 1 D8 D9 DA DB +000F3Fr 1 E0 E1 E2 E3 .byt $e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef +000F43r 1 E4 E5 E6 E7 +000F47r 1 E8 E9 EA EB +000F4Fr 1 F0 F1 F2 F3 .byt $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +000F53r 1 F4 F5 F6 F7 +000F57r 1 F8 F9 FA FB +000F5Fr 1 +000F5Fr 1 ; multiple values on one line, alternative hex +000F5Fr 1 00 01 02 03 .byt 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +000F63r 1 04 05 06 07 +000F67r 1 08 09 0A 0B +000F6Fr 1 10 11 12 13 .byt 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +000F73r 1 14 15 16 17 +000F77r 1 18 19 1A 1B +000F7Fr 1 20 21 22 23 .byt 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,2ah,2bh,2ch,2dh,2eh,2fh +000F83r 1 24 25 26 27 +000F87r 1 28 29 2A 2B +000F8Fr 1 30 31 32 33 .byt 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,3ah,3bh,3ch,3dh,3eh,3fh +000F93r 1 34 35 36 37 +000F97r 1 38 39 3A 3B +000F9Fr 1 40 41 42 43 .byt 40h,41h,42h,43h,44h,45h,46h,47h,48h,49h,4ah,4bh,4ch,4dh,4eh,4fh +000FA3r 1 44 45 46 47 +000FA7r 1 48 49 4A 4B +000FAFr 1 50 51 52 53 .byt 50h,51h,52h,53h,54h,55h,56h,57h,58h,59h,5ah,5bh,5ch,5dh,5eh,5fh +000FB3r 1 54 55 56 57 +000FB7r 1 58 59 5A 5B +000FBFr 1 60 61 62 63 .byt 60h,61h,62h,63h,64h,65h,66h,67h,68h,69h,6ah,6bh,6ch,6dh,6eh,6fh +000FC3r 1 64 65 66 67 +000FC7r 1 68 69 6A 6B +000FCFr 1 70 71 72 73 .byt 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +000FD3r 1 74 75 76 77 +000FD7r 1 78 79 7A 7B +000FDFr 1 80 81 82 83 .byt 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +000FE3r 1 84 85 86 87 +000FE7r 1 88 89 8A 8B +000FEFr 1 90 91 92 93 .byt 90h,91h,92h,93h,94h,95h,96h,97h,98h,99h,9ah,9bh,9ch,9dh,9eh,9fh +000FF3r 1 94 95 96 97 +000FF7r 1 98 99 9A 9B +000FFFr 1 A0 A1 A2 A3 .byt 0a0h,0a1h,0a2h,0a3h,0a4h,0a5h,0a6h,0a7h,0a8h,0a9h,0aah,0abh,0ach,0adh,0aeh,0afh +001003r 1 A4 A5 A6 A7 +001007r 1 A8 A9 AA AB +00100Fr 1 B0 B1 B2 B3 .byt 0b0h,0b1h,0b2h,0b3h,0b4h,0b5h,0b6h,0b7h,0b8h,0b9h,0bah,0bbh,0bch,0bdh,0beh,0bfh +001013r 1 B4 B5 B6 B7 +001017r 1 B8 B9 BA BB +00101Fr 1 C0 C1 C2 C3 .byt 0c0h,0c1h,0c2h,0c3h,0c4h,0c5h,0c6h,0c7h,0c8h,0c9h,0cah,0cbh,0cch,0cdh,0ceh,0cfh +001023r 1 C4 C5 C6 C7 +001027r 1 C8 C9 CA CB +00102Fr 1 D0 D1 D2 D3 .byt 0d0h,0d1h,0d2h,0d3h,0d4h,0d5h,0d6h,0d7h,0d8h,0d9h,0dah,0dbh,0dch,0ddh,0deh,0dfh +001033r 1 D4 D5 D6 D7 +001037r 1 D8 D9 DA DB +00103Fr 1 E0 E1 E2 E3 .byt 0e0h,0e1h,0e2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0e9h,0eah,0ebh,0ech,0edh,0eeh,0efh +001043r 1 E4 E5 E6 E7 +001047r 1 E8 E9 EA EB +00104Fr 1 F0 F1 F2 F3 .byt 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +001053r 1 F4 F5 F6 F7 +001057r 1 F8 F9 FA FB +00105Fr 1 +00105Fr 1 ; multiple values on one line, characters +00105Fr 1 20 21 22 23 .byt ' ','!','"','#','$','%','&',''','(',')','*','+',',','-','.','/' +001063r 1 24 25 26 27 +001067r 1 28 29 2A 2B +00106Fr 1 30 31 32 33 .byt '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?' +001073r 1 34 35 36 37 +001077r 1 38 39 3A 3B +00107Fr 1 40 41 42 43 .byt '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O' +001083r 1 44 45 46 47 +001087r 1 48 49 4A 4B +00108Fr 1 50 51 52 53 .byt 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_' +001093r 1 54 55 56 57 +001097r 1 58 59 5A 5B +00109Fr 1 60 61 62 63 .byt '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o' +0010A3r 1 64 65 66 67 +0010A7r 1 68 69 6A 6B +0010AFr 1 70 71 72 73 .byt 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~' +0010B3r 1 74 75 76 77 +0010B7r 1 78 79 7A 7B +0010BEr 1 +0010BEr 1 ; some character strings +0010BEr 1 20 21 23 24 .byt " !#$%&'()*+,-." +0010C2r 1 25 26 27 28 +0010C6r 1 29 2A 2B 2C +0010CCr 1 30 31 32 33 .byt "0123456789:;<=>" +0010D0r 1 34 35 36 37 +0010D4r 1 38 39 3A 3B +0010DBr 1 40 41 42 43 .byt "@ABCDEFGHIJKLMN" +0010DFr 1 44 45 46 47 +0010E3r 1 48 49 4A 4B +0010EAr 1 50 51 52 53 .byt "PQRSTUVWXYZ[\]^" +0010EEr 1 54 55 56 57 +0010F2r 1 58 59 5A 5B +0010F9r 1 60 61 62 63 .byt "`abcdefghijklmn" +0010FDr 1 64 65 66 67 +001101r 1 68 69 6A 6B +001108r 1 70 71 72 73 .byt "pqrstuvwxyz{|}" +00110Cr 1 74 75 76 77 +001110r 1 78 79 7A 7B +001116r 1 +001116r 1 ; mix some variants +001116r 1 0B 11 03 11 .byt 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +00111Ar 1 61 62 7A 41 +00111Er 1 5A 30 39 AA +001125r 1 diff --git a/test/asm/listing/101-byt.s b/test/asm/listing/101-byt.s new file mode 100644 index 000000000..a27334eef --- /dev/null +++ b/test/asm/listing/101-byt.s @@ -0,0 +1,3526 @@ +; 2022-06-15 Spiro Trikaliotis + + + ; upper case pseudo-op + .BYT 0 + .BYT 1 + .BYT 2 + .BYT 3 + .BYT 4 + .BYT 5 + .BYT 6 + .BYT 7 + .BYT 8 + .BYT 9 + .BYT 10 + .BYT 11 + .BYT 12 + .BYT 13 + .BYT 14 + .BYT 15 + .BYT 16 + .BYT 17 + .BYT 18 + .BYT 19 + .BYT 20 + .BYT 21 + .BYT 22 + .BYT 23 + .BYT 24 + .BYT 25 + .BYT 26 + .BYT 27 + .BYT 28 + .BYT 29 + .BYT 30 + .BYT 31 + .BYT 32 + .BYT 33 + .BYT 34 + .BYT 35 + .BYT 36 + .BYT 37 + .BYT 38 + .BYT 39 + .BYT 40 + .BYT 41 + .BYT 42 + .BYT 43 + .BYT 44 + .BYT 45 + .BYT 46 + .BYT 47 + .BYT 48 + .BYT 49 + .BYT 50 + .BYT 51 + .BYT 52 + .BYT 53 + .BYT 54 + .BYT 55 + .BYT 56 + .BYT 57 + .BYT 58 + .BYT 59 + .BYT 60 + .BYT 61 + .BYT 62 + .BYT 63 + .BYT 64 + .BYT 65 + .BYT 66 + .BYT 67 + .BYT 68 + .BYT 69 + .BYT 70 + .BYT 71 + .BYT 72 + .BYT 73 + .BYT 74 + .BYT 75 + .BYT 76 + .BYT 77 + .BYT 78 + .BYT 79 + .BYT 80 + .BYT 81 + .BYT 82 + .BYT 83 + .BYT 84 + .BYT 85 + .BYT 86 + .BYT 87 + .BYT 88 + .BYT 89 + .BYT 90 + .BYT 91 + .BYT 92 + .BYT 93 + .BYT 94 + .BYT 95 + .BYT 96 + .BYT 97 + .BYT 98 + .BYT 99 + .BYT 100 + .BYT 101 + .BYT 102 + .BYT 103 + .BYT 104 + .BYT 105 + .BYT 106 + .BYT 107 + .BYT 108 + .BYT 109 + .BYT 110 + .BYT 111 + .BYT 112 + .BYT 113 + .BYT 114 + .BYT 115 + .BYT 116 + .BYT 117 + .BYT 118 + .BYT 119 + .BYT 120 + .BYT 121 + .BYT 122 + .BYT 123 + .BYT 124 + .BYT 125 + .BYT 126 + .BYT 127 + .BYT 128 + .BYT 129 + .BYT 130 + .BYT 131 + .BYT 132 + .BYT 133 + .BYT 134 + .BYT 135 + .BYT 136 + .BYT 137 + .BYT 138 + .BYT 139 + .BYT 140 + .BYT 141 + .BYT 142 + .BYT 143 + .BYT 144 + .BYT 145 + .BYT 146 + .BYT 147 + .BYT 148 + .BYT 149 + .BYT 150 + .BYT 151 + .BYT 152 + .BYT 153 + .BYT 154 + .BYT 155 + .BYT 156 + .BYT 157 + .BYT 158 + .BYT 159 + .BYT 160 + .BYT 161 + .BYT 162 + .BYT 163 + .BYT 164 + .BYT 165 + .BYT 166 + .BYT 167 + .BYT 168 + .BYT 169 + .BYT 170 + .BYT 171 + .BYT 172 + .BYT 173 + .BYT 174 + .BYT 175 + .BYT 176 + .BYT 177 + .BYT 178 + .BYT 179 + .BYT 180 + .BYT 181 + .BYT 182 + .BYT 183 + .BYT 184 + .BYT 185 + .BYT 186 + .BYT 187 + .BYT 188 + .BYT 189 + .BYT 190 + .BYT 191 + .BYT 192 + .BYT 193 + .BYT 194 + .BYT 195 + .BYT 196 + .BYT 197 + .BYT 198 + .BYT 199 + .BYT 200 + .BYT 201 + .BYT 202 + .BYT 203 + .BYT 204 + .BYT 205 + .BYT 206 + .BYT 207 + .BYT 208 + .BYT 209 + .BYT 210 + .BYT 211 + .BYT 212 + .BYT 213 + .BYT 214 + .BYT 215 + .BYT 216 + .BYT 217 + .BYT 218 + .BYT 219 + .BYT 220 + .BYT 221 + .BYT 222 + .BYT 223 + .BYT 224 + .BYT 225 + .BYT 226 + .BYT 227 + .BYT 228 + .BYT 229 + .BYT 230 + .BYT 231 + .BYT 232 + .BYT 233 + .BYT 234 + .BYT 235 + .BYT 236 + .BYT 237 + .BYT 238 + .BYT 239 + .BYT 240 + .BYT 241 + .BYT 242 + .BYT 243 + .BYT 244 + .BYT 245 + .BYT 246 + .BYT 247 + .BYT 248 + .BYT 249 + .BYT 250 + .BYT 251 + .BYT 252 + .BYT 253 + .BYT 254 + .BYT 255 + + ; lower case pseudo-op + .byt 0 + .byt 1 + .byt 2 + .byt 3 + .byt 4 + .byt 5 + .byt 6 + .byt 7 + .byt 8 + .byt 9 + .byt 10 + .byt 11 + .byt 12 + .byt 13 + .byt 14 + .byt 15 + .byt 16 + .byt 17 + .byt 18 + .byt 19 + .byt 20 + .byt 21 + .byt 22 + .byt 23 + .byt 24 + .byt 25 + .byt 26 + .byt 27 + .byt 28 + .byt 29 + .byt 30 + .byt 31 + .byt 32 + .byt 33 + .byt 34 + .byt 35 + .byt 36 + .byt 37 + .byt 38 + .byt 39 + .byt 40 + .byt 41 + .byt 42 + .byt 43 + .byt 44 + .byt 45 + .byt 46 + .byt 47 + .byt 48 + .byt 49 + .byt 50 + .byt 51 + .byt 52 + .byt 53 + .byt 54 + .byt 55 + .byt 56 + .byt 57 + .byt 58 + .byt 59 + .byt 60 + .byt 61 + .byt 62 + .byt 63 + .byt 64 + .byt 65 + .byt 66 + .byt 67 + .byt 68 + .byt 69 + .byt 70 + .byt 71 + .byt 72 + .byt 73 + .byt 74 + .byt 75 + .byt 76 + .byt 77 + .byt 78 + .byt 79 + .byt 80 + .byt 81 + .byt 82 + .byt 83 + .byt 84 + .byt 85 + .byt 86 + .byt 87 + .byt 88 + .byt 89 + .byt 90 + .byt 91 + .byt 92 + .byt 93 + .byt 94 + .byt 95 + .byt 96 + .byt 97 + .byt 98 + .byt 99 + .byt 100 + .byt 101 + .byt 102 + .byt 103 + .byt 104 + .byt 105 + .byt 106 + .byt 107 + .byt 108 + .byt 109 + .byt 110 + .byt 111 + .byt 112 + .byt 113 + .byt 114 + .byt 115 + .byt 116 + .byt 117 + .byt 118 + .byt 119 + .byt 120 + .byt 121 + .byt 122 + .byt 123 + .byt 124 + .byt 125 + .byt 126 + .byt 127 + .byt 128 + .byt 129 + .byt 130 + .byt 131 + .byt 132 + .byt 133 + .byt 134 + .byt 135 + .byt 136 + .byt 137 + .byt 138 + .byt 139 + .byt 140 + .byt 141 + .byt 142 + .byt 143 + .byt 144 + .byt 145 + .byt 146 + .byt 147 + .byt 148 + .byt 149 + .byt 150 + .byt 151 + .byt 152 + .byt 153 + .byt 154 + .byt 155 + .byt 156 + .byt 157 + .byt 158 + .byt 159 + .byt 160 + .byt 161 + .byt 162 + .byt 163 + .byt 164 + .byt 165 + .byt 166 + .byt 167 + .byt 168 + .byt 169 + .byt 170 + .byt 171 + .byt 172 + .byt 173 + .byt 174 + .byt 175 + .byt 176 + .byt 177 + .byt 178 + .byt 179 + .byt 180 + .byt 181 + .byt 182 + .byt 183 + .byt 184 + .byt 185 + .byt 186 + .byt 187 + .byt 188 + .byt 189 + .byt 190 + .byt 191 + .byt 192 + .byt 193 + .byt 194 + .byt 195 + .byt 196 + .byt 197 + .byt 198 + .byt 199 + .byt 200 + .byt 201 + .byt 202 + .byt 203 + .byt 204 + .byt 205 + .byt 206 + .byt 207 + .byt 208 + .byt 209 + .byt 210 + .byt 211 + .byt 212 + .byt 213 + .byt 214 + .byt 215 + .byt 216 + .byt 217 + .byt 218 + .byt 219 + .byt 220 + .byt 221 + .byt 222 + .byt 223 + .byt 224 + .byt 225 + .byt 226 + .byt 227 + .byt 228 + .byt 229 + .byt 230 + .byt 231 + .byt 232 + .byt 233 + .byt 234 + .byt 235 + .byt 236 + .byt 237 + .byt 238 + .byt 239 + .byt 240 + .byt 241 + .byt 242 + .byt 243 + .byt 244 + .byt 245 + .byt 246 + .byt 247 + .byt 248 + .byt 249 + .byt 250 + .byt 251 + .byt 252 + .byt 253 + .byt 254 + .byt 255 + + ; hex values + .byt $0 + .byt $1 + .byt $2 + .byt $3 + .byt $4 + .byt $5 + .byt $6 + .byt $7 + .byt $8 + .byt $9 + .byt $a + .byt $b + .byt $c + .byt $d + .byt $e + .byt $f + .byt $10 + .byt $11 + .byt $12 + .byt $13 + .byt $14 + .byt $15 + .byt $16 + .byt $17 + .byt $18 + .byt $19 + .byt $1a + .byt $1b + .byt $1c + .byt $1d + .byt $1e + .byt $1f + .byt $20 + .byt $21 + .byt $22 + .byt $23 + .byt $24 + .byt $25 + .byt $26 + .byt $27 + .byt $28 + .byt $29 + .byt $2a + .byt $2b + .byt $2c + .byt $2d + .byt $2e + .byt $2f + .byt $30 + .byt $31 + .byt $32 + .byt $33 + .byt $34 + .byt $35 + .byt $36 + .byt $37 + .byt $38 + .byt $39 + .byt $3a + .byt $3b + .byt $3c + .byt $3d + .byt $3e + .byt $3f + .byt $40 + .byt $41 + .byt $42 + .byt $43 + .byt $44 + .byt $45 + .byt $46 + .byt $47 + .byt $48 + .byt $49 + .byt $4a + .byt $4b + .byt $4c + .byt $4d + .byt $4e + .byt $4f + .byt $50 + .byt $51 + .byt $52 + .byt $53 + .byt $54 + .byt $55 + .byt $56 + .byt $57 + .byt $58 + .byt $59 + .byt $5a + .byt $5b + .byt $5c + .byt $5d + .byt $5e + .byt $5f + .byt $60 + .byt $61 + .byt $62 + .byt $63 + .byt $64 + .byt $65 + .byt $66 + .byt $67 + .byt $68 + .byt $69 + .byt $6a + .byt $6b + .byt $6c + .byt $6d + .byt $6e + .byt $6f + .byt $70 + .byt $71 + .byt $72 + .byt $73 + .byt $74 + .byt $75 + .byt $76 + .byt $77 + .byt $78 + .byt $79 + .byt $7a + .byt $7b + .byt $7c + .byt $7d + .byt $7e + .byt $7f + .byt $80 + .byt $81 + .byt $82 + .byt $83 + .byt $84 + .byt $85 + .byt $86 + .byt $87 + .byt $88 + .byt $89 + .byt $8a + .byt $8b + .byt $8c + .byt $8d + .byt $8e + .byt $8f + .byt $90 + .byt $91 + .byt $92 + .byt $93 + .byt $94 + .byt $95 + .byt $96 + .byt $97 + .byt $98 + .byt $99 + .byt $9a + .byt $9b + .byt $9c + .byt $9d + .byt $9e + .byt $9f + .byt $a0 + .byt $a1 + .byt $a2 + .byt $a3 + .byt $a4 + .byt $a5 + .byt $a6 + .byt $a7 + .byt $a8 + .byt $a9 + .byt $aa + .byt $ab + .byt $ac + .byt $ad + .byt $ae + .byt $af + .byt $b0 + .byt $b1 + .byt $b2 + .byt $b3 + .byt $b4 + .byt $b5 + .byt $b6 + .byt $b7 + .byt $b8 + .byt $b9 + .byt $ba + .byt $bb + .byt $bc + .byt $bd + .byt $be + .byt $bf + .byt $c0 + .byt $c1 + .byt $c2 + .byt $c3 + .byt $c4 + .byt $c5 + .byt $c6 + .byt $c7 + .byt $c8 + .byt $c9 + .byt $ca + .byt $cb + .byt $cc + .byt $cd + .byt $ce + .byt $cf + .byt $d0 + .byt $d1 + .byt $d2 + .byt $d3 + .byt $d4 + .byt $d5 + .byt $d6 + .byt $d7 + .byt $d8 + .byt $d9 + .byt $da + .byt $db + .byt $dc + .byt $dd + .byt $de + .byt $df + .byt $e0 + .byt $e1 + .byt $e2 + .byt $e3 + .byt $e4 + .byt $e5 + .byt $e6 + .byt $e7 + .byt $e8 + .byt $e9 + .byt $ea + .byt $eb + .byt $ec + .byt $ed + .byt $ee + .byt $ef + .byt $f0 + .byt $f1 + .byt $f2 + .byt $f3 + .byt $f4 + .byt $f5 + .byt $f6 + .byt $f7 + .byt $f8 + .byt $f9 + .byt $fa + .byt $fb + .byt $fc + .byt $fd + .byt $fe + .byt $ff + + ; hex values, uppercase + .byt $0 + .byt $1 + .byt $2 + .byt $3 + .byt $4 + .byt $5 + .byt $6 + .byt $7 + .byt $8 + .byt $9 + .byt $A + .byt $B + .byt $C + .byt $D + .byt $E + .byt $F + .byt $10 + .byt $11 + .byt $12 + .byt $13 + .byt $14 + .byt $15 + .byt $16 + .byt $17 + .byt $18 + .byt $19 + .byt $1A + .byt $1B + .byt $1C + .byt $1D + .byt $1E + .byt $1F + .byt $20 + .byt $21 + .byt $22 + .byt $23 + .byt $24 + .byt $25 + .byt $26 + .byt $27 + .byt $28 + .byt $29 + .byt $2A + .byt $2B + .byt $2C + .byt $2D + .byt $2E + .byt $2F + .byt $30 + .byt $31 + .byt $32 + .byt $33 + .byt $34 + .byt $35 + .byt $36 + .byt $37 + .byt $38 + .byt $39 + .byt $3A + .byt $3B + .byt $3C + .byt $3D + .byt $3E + .byt $3F + .byt $40 + .byt $41 + .byt $42 + .byt $43 + .byt $44 + .byt $45 + .byt $46 + .byt $47 + .byt $48 + .byt $49 + .byt $4A + .byt $4B + .byt $4C + .byt $4D + .byt $4E + .byt $4F + .byt $50 + .byt $51 + .byt $52 + .byt $53 + .byt $54 + .byt $55 + .byt $56 + .byt $57 + .byt $58 + .byt $59 + .byt $5A + .byt $5B + .byt $5C + .byt $5D + .byt $5E + .byt $5F + .byt $60 + .byt $61 + .byt $62 + .byt $63 + .byt $64 + .byt $65 + .byt $66 + .byt $67 + .byt $68 + .byt $69 + .byt $6A + .byt $6B + .byt $6C + .byt $6D + .byt $6E + .byt $6F + .byt $70 + .byt $71 + .byt $72 + .byt $73 + .byt $74 + .byt $75 + .byt $76 + .byt $77 + .byt $78 + .byt $79 + .byt $7A + .byt $7B + .byt $7C + .byt $7D + .byt $7E + .byt $7F + .byt $80 + .byt $81 + .byt $82 + .byt $83 + .byt $84 + .byt $85 + .byt $86 + .byt $87 + .byt $88 + .byt $89 + .byt $8A + .byt $8B + .byt $8C + .byt $8D + .byt $8E + .byt $8F + .byt $90 + .byt $91 + .byt $92 + .byt $93 + .byt $94 + .byt $95 + .byt $96 + .byt $97 + .byt $98 + .byt $99 + .byt $9A + .byt $9B + .byt $9C + .byt $9D + .byt $9E + .byt $9F + .byt $A0 + .byt $A1 + .byt $A2 + .byt $A3 + .byt $A4 + .byt $A5 + .byt $A6 + .byt $A7 + .byt $A8 + .byt $A9 + .byt $AA + .byt $AB + .byt $AC + .byt $AD + .byt $AE + .byt $AF + .byt $B0 + .byt $B1 + .byt $B2 + .byt $B3 + .byt $B4 + .byt $B5 + .byt $B6 + .byt $B7 + .byt $B8 + .byt $B9 + .byt $BA + .byt $BB + .byt $BC + .byt $BD + .byt $BE + .byt $BF + .byt $C0 + .byt $C1 + .byt $C2 + .byt $C3 + .byt $C4 + .byt $C5 + .byt $C6 + .byt $C7 + .byt $C8 + .byt $C9 + .byt $CA + .byt $CB + .byt $CC + .byt $CD + .byt $CE + .byt $CF + .byt $D0 + .byt $D1 + .byt $D2 + .byt $D3 + .byt $D4 + .byt $D5 + .byt $D6 + .byt $D7 + .byt $D8 + .byt $D9 + .byt $DA + .byt $DB + .byt $DC + .byt $DD + .byt $DE + .byt $DF + .byt $E0 + .byt $E1 + .byt $E2 + .byt $E3 + .byt $E4 + .byt $E5 + .byt $E6 + .byt $E7 + .byt $E8 + .byt $E9 + .byt $EA + .byt $EB + .byt $EC + .byt $ED + .byt $EE + .byt $EF + .byt $F0 + .byt $F1 + .byt $F2 + .byt $F3 + .byt $F4 + .byt $F5 + .byt $F6 + .byt $F7 + .byt $F8 + .byt $F9 + .byt $FA + .byt $FB + .byt $FC + .byt $FD + .byt $FE + .byt $FF + + ; 2-digit hex values + .byt $00 + .byt $01 + .byt $02 + .byt $03 + .byt $04 + .byt $05 + .byt $06 + .byt $07 + .byt $08 + .byt $09 + .byt $0a + .byt $0b + .byt $0c + .byt $0d + .byt $0e + .byt $0f + .byt $10 + .byt $11 + .byt $12 + .byt $13 + .byt $14 + .byt $15 + .byt $16 + .byt $17 + .byt $18 + .byt $19 + .byt $1a + .byt $1b + .byt $1c + .byt $1d + .byt $1e + .byt $1f + .byt $20 + .byt $21 + .byt $22 + .byt $23 + .byt $24 + .byt $25 + .byt $26 + .byt $27 + .byt $28 + .byt $29 + .byt $2a + .byt $2b + .byt $2c + .byt $2d + .byt $2e + .byt $2f + .byt $30 + .byt $31 + .byt $32 + .byt $33 + .byt $34 + .byt $35 + .byt $36 + .byt $37 + .byt $38 + .byt $39 + .byt $3a + .byt $3b + .byt $3c + .byt $3d + .byt $3e + .byt $3f + .byt $40 + .byt $41 + .byt $42 + .byt $43 + .byt $44 + .byt $45 + .byt $46 + .byt $47 + .byt $48 + .byt $49 + .byt $4a + .byt $4b + .byt $4c + .byt $4d + .byt $4e + .byt $4f + .byt $50 + .byt $51 + .byt $52 + .byt $53 + .byt $54 + .byt $55 + .byt $56 + .byt $57 + .byt $58 + .byt $59 + .byt $5a + .byt $5b + .byt $5c + .byt $5d + .byt $5e + .byt $5f + .byt $60 + .byt $61 + .byt $62 + .byt $63 + .byt $64 + .byt $65 + .byt $66 + .byt $67 + .byt $68 + .byt $69 + .byt $6a + .byt $6b + .byt $6c + .byt $6d + .byt $6e + .byt $6f + .byt $70 + .byt $71 + .byt $72 + .byt $73 + .byt $74 + .byt $75 + .byt $76 + .byt $77 + .byt $78 + .byt $79 + .byt $7a + .byt $7b + .byt $7c + .byt $7d + .byt $7e + .byt $7f + .byt $80 + .byt $81 + .byt $82 + .byt $83 + .byt $84 + .byt $85 + .byt $86 + .byt $87 + .byt $88 + .byt $89 + .byt $8a + .byt $8b + .byt $8c + .byt $8d + .byt $8e + .byt $8f + .byt $90 + .byt $91 + .byt $92 + .byt $93 + .byt $94 + .byt $95 + .byt $96 + .byt $97 + .byt $98 + .byt $99 + .byt $9a + .byt $9b + .byt $9c + .byt $9d + .byt $9e + .byt $9f + .byt $a0 + .byt $a1 + .byt $a2 + .byt $a3 + .byt $a4 + .byt $a5 + .byt $a6 + .byt $a7 + .byt $a8 + .byt $a9 + .byt $aa + .byt $ab + .byt $ac + .byt $ad + .byt $ae + .byt $af + .byt $b0 + .byt $b1 + .byt $b2 + .byt $b3 + .byt $b4 + .byt $b5 + .byt $b6 + .byt $b7 + .byt $b8 + .byt $b9 + .byt $ba + .byt $bb + .byt $bc + .byt $bd + .byt $be + .byt $bf + .byt $c0 + .byt $c1 + .byt $c2 + .byt $c3 + .byt $c4 + .byt $c5 + .byt $c6 + .byt $c7 + .byt $c8 + .byt $c9 + .byt $ca + .byt $cb + .byt $cc + .byt $cd + .byt $ce + .byt $cf + .byt $d0 + .byt $d1 + .byt $d2 + .byt $d3 + .byt $d4 + .byt $d5 + .byt $d6 + .byt $d7 + .byt $d8 + .byt $d9 + .byt $da + .byt $db + .byt $dc + .byt $dd + .byt $de + .byt $df + .byt $e0 + .byt $e1 + .byt $e2 + .byt $e3 + .byt $e4 + .byt $e5 + .byt $e6 + .byt $e7 + .byt $e8 + .byt $e9 + .byt $ea + .byt $eb + .byt $ec + .byt $ed + .byt $ee + .byt $ef + .byt $f0 + .byt $f1 + .byt $f2 + .byt $f3 + .byt $f4 + .byt $f5 + .byt $f6 + .byt $f7 + .byt $f8 + .byt $f9 + .byt $fa + .byt $fb + .byt $fc + .byt $fd + .byt $fe + .byt $ff + + ; 2-digit hex values, uppercase + .byt $00 + .byt $01 + .byt $02 + .byt $03 + .byt $04 + .byt $05 + .byt $06 + .byt $07 + .byt $08 + .byt $09 + .byt $0A + .byt $0B + .byt $0C + .byt $0D + .byt $0E + .byt $0F + .byt $10 + .byt $11 + .byt $12 + .byt $13 + .byt $14 + .byt $15 + .byt $16 + .byt $17 + .byt $18 + .byt $19 + .byt $1A + .byt $1B + .byt $1C + .byt $1D + .byt $1E + .byt $1F + .byt $20 + .byt $21 + .byt $22 + .byt $23 + .byt $24 + .byt $25 + .byt $26 + .byt $27 + .byt $28 + .byt $29 + .byt $2A + .byt $2B + .byt $2C + .byt $2D + .byt $2E + .byt $2F + .byt $30 + .byt $31 + .byt $32 + .byt $33 + .byt $34 + .byt $35 + .byt $36 + .byt $37 + .byt $38 + .byt $39 + .byt $3A + .byt $3B + .byt $3C + .byt $3D + .byt $3E + .byt $3F + .byt $40 + .byt $41 + .byt $42 + .byt $43 + .byt $44 + .byt $45 + .byt $46 + .byt $47 + .byt $48 + .byt $49 + .byt $4A + .byt $4B + .byt $4C + .byt $4D + .byt $4E + .byt $4F + .byt $50 + .byt $51 + .byt $52 + .byt $53 + .byt $54 + .byt $55 + .byt $56 + .byt $57 + .byt $58 + .byt $59 + .byt $5A + .byt $5B + .byt $5C + .byt $5D + .byt $5E + .byt $5F + .byt $60 + .byt $61 + .byt $62 + .byt $63 + .byt $64 + .byt $65 + .byt $66 + .byt $67 + .byt $68 + .byt $69 + .byt $6A + .byt $6B + .byt $6C + .byt $6D + .byt $6E + .byt $6F + .byt $70 + .byt $71 + .byt $72 + .byt $73 + .byt $74 + .byt $75 + .byt $76 + .byt $77 + .byt $78 + .byt $79 + .byt $7A + .byt $7B + .byt $7C + .byt $7D + .byt $7E + .byt $7F + .byt $80 + .byt $81 + .byt $82 + .byt $83 + .byt $84 + .byt $85 + .byt $86 + .byt $87 + .byt $88 + .byt $89 + .byt $8A + .byt $8B + .byt $8C + .byt $8D + .byt $8E + .byt $8F + .byt $90 + .byt $91 + .byt $92 + .byt $93 + .byt $94 + .byt $95 + .byt $96 + .byt $97 + .byt $98 + .byt $99 + .byt $9A + .byt $9B + .byt $9C + .byt $9D + .byt $9E + .byt $9F + .byt $A0 + .byt $A1 + .byt $A2 + .byt $A3 + .byt $A4 + .byt $A5 + .byt $A6 + .byt $A7 + .byt $A8 + .byt $A9 + .byt $AA + .byt $AB + .byt $AC + .byt $AD + .byt $AE + .byt $AF + .byt $B0 + .byt $B1 + .byt $B2 + .byt $B3 + .byt $B4 + .byt $B5 + .byt $B6 + .byt $B7 + .byt $B8 + .byt $B9 + .byt $BA + .byt $BB + .byt $BC + .byt $BD + .byt $BE + .byt $BF + .byt $C0 + .byt $C1 + .byt $C2 + .byt $C3 + .byt $C4 + .byt $C5 + .byt $C6 + .byt $C7 + .byt $C8 + .byt $C9 + .byt $CA + .byt $CB + .byt $CC + .byt $CD + .byt $CE + .byt $CF + .byt $D0 + .byt $D1 + .byt $D2 + .byt $D3 + .byt $D4 + .byt $D5 + .byt $D6 + .byt $D7 + .byt $D8 + .byt $D9 + .byt $DA + .byt $DB + .byt $DC + .byt $DD + .byt $DE + .byt $DF + .byt $E0 + .byt $E1 + .byt $E2 + .byt $E3 + .byt $E4 + .byt $E5 + .byt $E6 + .byt $E7 + .byt $E8 + .byt $E9 + .byt $EA + .byt $EB + .byt $EC + .byt $ED + .byt $EE + .byt $EF + .byt $F0 + .byt $F1 + .byt $F2 + .byt $F3 + .byt $F4 + .byt $F5 + .byt $F6 + .byt $F7 + .byt $F8 + .byt $F9 + .byt $FA + .byt $FB + .byt $FC + .byt $FD + .byt $FE + .byt $FF + + ; alternative hex values + .byt 0h + .byt 1h + .byt 2h + .byt 3h + .byt 4h + .byt 5h + .byt 6h + .byt 7h + .byt 8h + .byt 9h + .byt 0ah + .byt 0bh + .byt 0ch + .byt 0dh + .byt 0eh + .byt 0fh + .byt 10h + .byt 11h + .byt 12h + .byt 13h + .byt 14h + .byt 15h + .byt 16h + .byt 17h + .byt 18h + .byt 19h + .byt 1ah + .byt 1bh + .byt 1ch + .byt 1dh + .byt 1eh + .byt 1fh + .byt 20h + .byt 21h + .byt 22h + .byt 23h + .byt 24h + .byt 25h + .byt 26h + .byt 27h + .byt 28h + .byt 29h + .byt 2ah + .byt 2bh + .byt 2ch + .byt 2dh + .byt 2eh + .byt 2fh + .byt 30h + .byt 31h + .byt 32h + .byt 33h + .byt 34h + .byt 35h + .byt 36h + .byt 37h + .byt 38h + .byt 39h + .byt 3ah + .byt 3bh + .byt 3ch + .byt 3dh + .byt 3eh + .byt 3fh + .byt 40h + .byt 41h + .byt 42h + .byt 43h + .byt 44h + .byt 45h + .byt 46h + .byt 47h + .byt 48h + .byt 49h + .byt 4ah + .byt 4bh + .byt 4ch + .byt 4dh + .byt 4eh + .byt 4fh + .byt 50h + .byt 51h + .byt 52h + .byt 53h + .byt 54h + .byt 55h + .byt 56h + .byt 57h + .byt 58h + .byt 59h + .byt 5ah + .byt 5bh + .byt 5ch + .byt 5dh + .byt 5eh + .byt 5fh + .byt 60h + .byt 61h + .byt 62h + .byt 63h + .byt 64h + .byt 65h + .byt 66h + .byt 67h + .byt 68h + .byt 69h + .byt 6ah + .byt 6bh + .byt 6ch + .byt 6dh + .byt 6eh + .byt 6fh + .byt 70h + .byt 71h + .byt 72h + .byt 73h + .byt 74h + .byt 75h + .byt 76h + .byt 77h + .byt 78h + .byt 79h + .byt 7ah + .byt 7bh + .byt 7ch + .byt 7dh + .byt 7eh + .byt 7fh + .byt 80h + .byt 81h + .byt 82h + .byt 83h + .byt 84h + .byt 85h + .byt 86h + .byt 87h + .byt 88h + .byt 89h + .byt 8ah + .byt 8bh + .byt 8ch + .byt 8dh + .byt 8eh + .byt 8fh + .byt 90h + .byt 91h + .byt 92h + .byt 93h + .byt 94h + .byt 95h + .byt 96h + .byt 97h + .byt 98h + .byt 99h + .byt 9ah + .byt 9bh + .byt 9ch + .byt 9dh + .byt 9eh + .byt 9fh + .byt 0a0h + .byt 0a1h + .byt 0a2h + .byt 0a3h + .byt 0a4h + .byt 0a5h + .byt 0a6h + .byt 0a7h + .byt 0a8h + .byt 0a9h + .byt 0aah + .byt 0abh + .byt 0ach + .byt 0adh + .byt 0aeh + .byt 0afh + .byt 0b0h + .byt 0b1h + .byt 0b2h + .byt 0b3h + .byt 0b4h + .byt 0b5h + .byt 0b6h + .byt 0b7h + .byt 0b8h + .byt 0b9h + .byt 0bah + .byt 0bbh + .byt 0bch + .byt 0bdh + .byt 0beh + .byt 0bfh + .byt 0c0h + .byt 0c1h + .byt 0c2h + .byt 0c3h + .byt 0c4h + .byt 0c5h + .byt 0c6h + .byt 0c7h + .byt 0c8h + .byt 0c9h + .byt 0cah + .byt 0cbh + .byt 0cch + .byt 0cdh + .byt 0ceh + .byt 0cfh + .byt 0d0h + .byt 0d1h + .byt 0d2h + .byt 0d3h + .byt 0d4h + .byt 0d5h + .byt 0d6h + .byt 0d7h + .byt 0d8h + .byt 0d9h + .byt 0dah + .byt 0dbh + .byt 0dch + .byt 0ddh + .byt 0deh + .byt 0dfh + .byt 0e0h + .byt 0e1h + .byt 0e2h + .byt 0e3h + .byt 0e4h + .byt 0e5h + .byt 0e6h + .byt 0e7h + .byt 0e8h + .byt 0e9h + .byt 0eah + .byt 0ebh + .byt 0ech + .byt 0edh + .byt 0eeh + .byt 0efh + .byt 0f0h + .byt 0f1h + .byt 0f2h + .byt 0f3h + .byt 0f4h + .byt 0f5h + .byt 0f6h + .byt 0f7h + .byt 0f8h + .byt 0f9h + .byt 0fah + .byt 0fbh + .byt 0fch + .byt 0fdh + .byt 0feh + .byt 0ffh + + ; alternative hex values, uppercase + .byt 0h + .byt 1h + .byt 2h + .byt 3h + .byt 4h + .byt 5h + .byt 6h + .byt 7h + .byt 8h + .byt 9h + .byt 0Ah + .byt 0Bh + .byt 0Ch + .byt 0Dh + .byt 0Eh + .byt 0Fh + .byt 10h + .byt 11h + .byt 12h + .byt 13h + .byt 14h + .byt 15h + .byt 16h + .byt 17h + .byt 18h + .byt 19h + .byt 1Ah + .byt 1Bh + .byt 1Ch + .byt 1Dh + .byt 1Eh + .byt 1Fh + .byt 20h + .byt 21h + .byt 22h + .byt 23h + .byt 24h + .byt 25h + .byt 26h + .byt 27h + .byt 28h + .byt 29h + .byt 2Ah + .byt 2Bh + .byt 2Ch + .byt 2Dh + .byt 2Eh + .byt 2Fh + .byt 30h + .byt 31h + .byt 32h + .byt 33h + .byt 34h + .byt 35h + .byt 36h + .byt 37h + .byt 38h + .byt 39h + .byt 3Ah + .byt 3Bh + .byt 3Ch + .byt 3Dh + .byt 3Eh + .byt 3Fh + .byt 40h + .byt 41h + .byt 42h + .byt 43h + .byt 44h + .byt 45h + .byt 46h + .byt 47h + .byt 48h + .byt 49h + .byt 4Ah + .byt 4Bh + .byt 4Ch + .byt 4Dh + .byt 4Eh + .byt 4Fh + .byt 50h + .byt 51h + .byt 52h + .byt 53h + .byt 54h + .byt 55h + .byt 56h + .byt 57h + .byt 58h + .byt 59h + .byt 5Ah + .byt 5Bh + .byt 5Ch + .byt 5Dh + .byt 5Eh + .byt 5Fh + .byt 60h + .byt 61h + .byt 62h + .byt 63h + .byt 64h + .byt 65h + .byt 66h + .byt 67h + .byt 68h + .byt 69h + .byt 6Ah + .byt 6Bh + .byt 6Ch + .byt 6Dh + .byt 6Eh + .byt 6Fh + .byt 70h + .byt 71h + .byt 72h + .byt 73h + .byt 74h + .byt 75h + .byt 76h + .byt 77h + .byt 78h + .byt 79h + .byt 7Ah + .byt 7Bh + .byt 7Ch + .byt 7Dh + .byt 7Eh + .byt 7Fh + .byt 80h + .byt 81h + .byt 82h + .byt 83h + .byt 84h + .byt 85h + .byt 86h + .byt 87h + .byt 88h + .byt 89h + .byt 8Ah + .byt 8Bh + .byt 8Ch + .byt 8Dh + .byt 8Eh + .byt 8Fh + .byt 90h + .byt 91h + .byt 92h + .byt 93h + .byt 94h + .byt 95h + .byt 96h + .byt 97h + .byt 98h + .byt 99h + .byt 9Ah + .byt 9Bh + .byt 9Ch + .byt 9Dh + .byt 9Eh + .byt 9Fh + .byt 0A0h + .byt 0A1h + .byt 0A2h + .byt 0A3h + .byt 0A4h + .byt 0A5h + .byt 0A6h + .byt 0A7h + .byt 0A8h + .byt 0A9h + .byt 0AAh + .byt 0ABh + .byt 0ACh + .byt 0ADh + .byt 0AEh + .byt 0AFh + .byt 0B0h + .byt 0B1h + .byt 0B2h + .byt 0B3h + .byt 0B4h + .byt 0B5h + .byt 0B6h + .byt 0B7h + .byt 0B8h + .byt 0B9h + .byt 0BAh + .byt 0BBh + .byt 0BCh + .byt 0BDh + .byt 0BEh + .byt 0BFh + .byt 0C0h + .byt 0C1h + .byt 0C2h + .byt 0C3h + .byt 0C4h + .byt 0C5h + .byt 0C6h + .byt 0C7h + .byt 0C8h + .byt 0C9h + .byt 0CAh + .byt 0CBh + .byt 0CCh + .byt 0CDh + .byt 0CEh + .byt 0CFh + .byt 0D0h + .byt 0D1h + .byt 0D2h + .byt 0D3h + .byt 0D4h + .byt 0D5h + .byt 0D6h + .byt 0D7h + .byt 0D8h + .byt 0D9h + .byt 0DAh + .byt 0DBh + .byt 0DCh + .byt 0DDh + .byt 0DEh + .byt 0DFh + .byt 0E0h + .byt 0E1h + .byt 0E2h + .byt 0E3h + .byt 0E4h + .byt 0E5h + .byt 0E6h + .byt 0E7h + .byt 0E8h + .byt 0E9h + .byt 0EAh + .byt 0EBh + .byt 0ECh + .byt 0EDh + .byt 0EEh + .byt 0EFh + .byt 0F0h + .byt 0F1h + .byt 0F2h + .byt 0F3h + .byt 0F4h + .byt 0F5h + .byt 0F6h + .byt 0F7h + .byt 0F8h + .byt 0F9h + .byt 0FAh + .byt 0FBh + .byt 0FCh + .byt 0FDh + .byt 0FEh + .byt 0FFh + + ; alternative 2-digit hex values + .byt 00h + .byt 01h + .byt 02h + .byt 03h + .byt 04h + .byt 05h + .byt 06h + .byt 07h + .byt 08h + .byt 09h + .byt 0ah + .byt 0bh + .byt 0ch + .byt 0dh + .byt 0eh + .byt 0fh + .byt 10h + .byt 11h + .byt 12h + .byt 13h + .byt 14h + .byt 15h + .byt 16h + .byt 17h + .byt 18h + .byt 19h + .byt 1ah + .byt 1bh + .byt 1ch + .byt 1dh + .byt 1eh + .byt 1fh + .byt 20h + .byt 21h + .byt 22h + .byt 23h + .byt 24h + .byt 25h + .byt 26h + .byt 27h + .byt 28h + .byt 29h + .byt 2ah + .byt 2bh + .byt 2ch + .byt 2dh + .byt 2eh + .byt 2fh + .byt 30h + .byt 31h + .byt 32h + .byt 33h + .byt 34h + .byt 35h + .byt 36h + .byt 37h + .byt 38h + .byt 39h + .byt 3ah + .byt 3bh + .byt 3ch + .byt 3dh + .byt 3eh + .byt 3fh + .byt 40h + .byt 41h + .byt 42h + .byt 43h + .byt 44h + .byt 45h + .byt 46h + .byt 47h + .byt 48h + .byt 49h + .byt 4ah + .byt 4bh + .byt 4ch + .byt 4dh + .byt 4eh + .byt 4fh + .byt 50h + .byt 51h + .byt 52h + .byt 53h + .byt 54h + .byt 55h + .byt 56h + .byt 57h + .byt 58h + .byt 59h + .byt 5ah + .byt 5bh + .byt 5ch + .byt 5dh + .byt 5eh + .byt 5fh + .byt 60h + .byt 61h + .byt 62h + .byt 63h + .byt 64h + .byt 65h + .byt 66h + .byt 67h + .byt 68h + .byt 69h + .byt 6ah + .byt 6bh + .byt 6ch + .byt 6dh + .byt 6eh + .byt 6fh + .byt 70h + .byt 71h + .byt 72h + .byt 73h + .byt 74h + .byt 75h + .byt 76h + .byt 77h + .byt 78h + .byt 79h + .byt 7ah + .byt 7bh + .byt 7ch + .byt 7dh + .byt 7eh + .byt 7fh + .byt 80h + .byt 81h + .byt 82h + .byt 83h + .byt 84h + .byt 85h + .byt 86h + .byt 87h + .byt 88h + .byt 89h + .byt 8ah + .byt 8bh + .byt 8ch + .byt 8dh + .byt 8eh + .byt 8fh + .byt 90h + .byt 91h + .byt 92h + .byt 93h + .byt 94h + .byt 95h + .byt 96h + .byt 97h + .byt 98h + .byt 99h + .byt 9ah + .byt 9bh + .byt 9ch + .byt 9dh + .byt 9eh + .byt 9fh + .byt 0a0h + .byt 0a1h + .byt 0a2h + .byt 0a3h + .byt 0a4h + .byt 0a5h + .byt 0a6h + .byt 0a7h + .byt 0a8h + .byt 0a9h + .byt 0aah + .byt 0abh + .byt 0ach + .byt 0adh + .byt 0aeh + .byt 0afh + .byt 0b0h + .byt 0b1h + .byt 0b2h + .byt 0b3h + .byt 0b4h + .byt 0b5h + .byt 0b6h + .byt 0b7h + .byt 0b8h + .byt 0b9h + .byt 0bah + .byt 0bbh + .byt 0bch + .byt 0bdh + .byt 0beh + .byt 0bfh + .byt 0c0h + .byt 0c1h + .byt 0c2h + .byt 0c3h + .byt 0c4h + .byt 0c5h + .byt 0c6h + .byt 0c7h + .byt 0c8h + .byt 0c9h + .byt 0cah + .byt 0cbh + .byt 0cch + .byt 0cdh + .byt 0ceh + .byt 0cfh + .byt 0d0h + .byt 0d1h + .byt 0d2h + .byt 0d3h + .byt 0d4h + .byt 0d5h + .byt 0d6h + .byt 0d7h + .byt 0d8h + .byt 0d9h + .byt 0dah + .byt 0dbh + .byt 0dch + .byt 0ddh + .byt 0deh + .byt 0dfh + .byt 0e0h + .byt 0e1h + .byt 0e2h + .byt 0e3h + .byt 0e4h + .byt 0e5h + .byt 0e6h + .byt 0e7h + .byt 0e8h + .byt 0e9h + .byt 0eah + .byt 0ebh + .byt 0ech + .byt 0edh + .byt 0eeh + .byt 0efh + .byt 0f0h + .byt 0f1h + .byt 0f2h + .byt 0f3h + .byt 0f4h + .byt 0f5h + .byt 0f6h + .byt 0f7h + .byt 0f8h + .byt 0f9h + .byt 0fah + .byt 0fbh + .byt 0fch + .byt 0fdh + .byt 0feh + .byt 0ffh + + ; alternative 2-digit hex values, uppercase + .byt 00h + .byt 01h + .byt 02h + .byt 03h + .byt 04h + .byt 05h + .byt 06h + .byt 07h + .byt 08h + .byt 09h + .byt 0Ah + .byt 0Bh + .byt 0Ch + .byt 0Dh + .byt 0Eh + .byt 0Fh + .byt 10h + .byt 11h + .byt 12h + .byt 13h + .byt 14h + .byt 15h + .byt 16h + .byt 17h + .byt 18h + .byt 19h + .byt 1Ah + .byt 1Bh + .byt 1Ch + .byt 1Dh + .byt 1Eh + .byt 1Fh + .byt 20h + .byt 21h + .byt 22h + .byt 23h + .byt 24h + .byt 25h + .byt 26h + .byt 27h + .byt 28h + .byt 29h + .byt 2Ah + .byt 2Bh + .byt 2Ch + .byt 2Dh + .byt 2Eh + .byt 2Fh + .byt 30h + .byt 31h + .byt 32h + .byt 33h + .byt 34h + .byt 35h + .byt 36h + .byt 37h + .byt 38h + .byt 39h + .byt 3Ah + .byt 3Bh + .byt 3Ch + .byt 3Dh + .byt 3Eh + .byt 3Fh + .byt 40h + .byt 41h + .byt 42h + .byt 43h + .byt 44h + .byt 45h + .byt 46h + .byt 47h + .byt 48h + .byt 49h + .byt 4Ah + .byt 4Bh + .byt 4Ch + .byt 4Dh + .byt 4Eh + .byt 4Fh + .byt 50h + .byt 51h + .byt 52h + .byt 53h + .byt 54h + .byt 55h + .byt 56h + .byt 57h + .byt 58h + .byt 59h + .byt 5Ah + .byt 5Bh + .byt 5Ch + .byt 5Dh + .byt 5Eh + .byt 5Fh + .byt 60h + .byt 61h + .byt 62h + .byt 63h + .byt 64h + .byt 65h + .byt 66h + .byt 67h + .byt 68h + .byt 69h + .byt 6Ah + .byt 6Bh + .byt 6Ch + .byt 6Dh + .byt 6Eh + .byt 6Fh + .byt 70h + .byt 71h + .byt 72h + .byt 73h + .byt 74h + .byt 75h + .byt 76h + .byt 77h + .byt 78h + .byt 79h + .byt 7Ah + .byt 7Bh + .byt 7Ch + .byt 7Dh + .byt 7Eh + .byt 7Fh + .byt 80h + .byt 81h + .byt 82h + .byt 83h + .byt 84h + .byt 85h + .byt 86h + .byt 87h + .byt 88h + .byt 89h + .byt 8Ah + .byt 8Bh + .byt 8Ch + .byt 8Dh + .byt 8Eh + .byt 8Fh + .byt 90h + .byt 91h + .byt 92h + .byt 93h + .byt 94h + .byt 95h + .byt 96h + .byt 97h + .byt 98h + .byt 99h + .byt 9Ah + .byt 9Bh + .byt 9Ch + .byt 9Dh + .byt 9Eh + .byt 9Fh + .byt 0A0h + .byt 0A1h + .byt 0A2h + .byt 0A3h + .byt 0A4h + .byt 0A5h + .byt 0A6h + .byt 0A7h + .byt 0A8h + .byt 0A9h + .byt 0AAh + .byt 0ABh + .byt 0ACh + .byt 0ADh + .byt 0AEh + .byt 0AFh + .byt 0B0h + .byt 0B1h + .byt 0B2h + .byt 0B3h + .byt 0B4h + .byt 0B5h + .byt 0B6h + .byt 0B7h + .byt 0B8h + .byt 0B9h + .byt 0BAh + .byt 0BBh + .byt 0BCh + .byt 0BDh + .byt 0BEh + .byt 0BFh + .byt 0C0h + .byt 0C1h + .byt 0C2h + .byt 0C3h + .byt 0C4h + .byt 0C5h + .byt 0C6h + .byt 0C7h + .byt 0C8h + .byt 0C9h + .byt 0CAh + .byt 0CBh + .byt 0CCh + .byt 0CDh + .byt 0CEh + .byt 0CFh + .byt 0D0h + .byt 0D1h + .byt 0D2h + .byt 0D3h + .byt 0D4h + .byt 0D5h + .byt 0D6h + .byt 0D7h + .byt 0D8h + .byt 0D9h + .byt 0DAh + .byt 0DBh + .byt 0DCh + .byt 0DDh + .byt 0DEh + .byt 0DFh + .byt 0E0h + .byt 0E1h + .byt 0E2h + .byt 0E3h + .byt 0E4h + .byt 0E5h + .byt 0E6h + .byt 0E7h + .byt 0E8h + .byt 0E9h + .byt 0EAh + .byt 0EBh + .byt 0ECh + .byt 0EDh + .byt 0EEh + .byt 0EFh + .byt 0F0h + .byt 0F1h + .byt 0F2h + .byt 0F3h + .byt 0F4h + .byt 0F5h + .byt 0F6h + .byt 0F7h + .byt 0F8h + .byt 0F9h + .byt 0FAh + .byt 0FBh + .byt 0FCh + .byt 0FDh + .byt 0FEh + .byt 0FFh + + ; alternative hex values, always leading zero + .byt 00h + .byt 01h + .byt 02h + .byt 03h + .byt 04h + .byt 05h + .byt 06h + .byt 07h + .byt 08h + .byt 09h + .byt 0ah + .byt 0bh + .byt 0ch + .byt 0dh + .byt 0eh + .byt 0fh + .byt 010h + .byt 011h + .byt 012h + .byt 013h + .byt 014h + .byt 015h + .byt 016h + .byt 017h + .byt 018h + .byt 019h + .byt 01ah + .byt 01bh + .byt 01ch + .byt 01dh + .byt 01eh + .byt 01fh + .byt 020h + .byt 021h + .byt 022h + .byt 023h + .byt 024h + .byt 025h + .byt 026h + .byt 027h + .byt 028h + .byt 029h + .byt 02ah + .byt 02bh + .byt 02ch + .byt 02dh + .byt 02eh + .byt 02fh + .byt 030h + .byt 031h + .byt 032h + .byt 033h + .byt 034h + .byt 035h + .byt 036h + .byt 037h + .byt 038h + .byt 039h + .byt 03ah + .byt 03bh + .byt 03ch + .byt 03dh + .byt 03eh + .byt 03fh + .byt 040h + .byt 041h + .byt 042h + .byt 043h + .byt 044h + .byt 045h + .byt 046h + .byt 047h + .byt 048h + .byt 049h + .byt 04ah + .byt 04bh + .byt 04ch + .byt 04dh + .byt 04eh + .byt 04fh + .byt 050h + .byt 051h + .byt 052h + .byt 053h + .byt 054h + .byt 055h + .byt 056h + .byt 057h + .byt 058h + .byt 059h + .byt 05ah + .byt 05bh + .byt 05ch + .byt 05dh + .byt 05eh + .byt 05fh + .byt 060h + .byt 061h + .byt 062h + .byt 063h + .byt 064h + .byt 065h + .byt 066h + .byt 067h + .byt 068h + .byt 069h + .byt 06ah + .byt 06bh + .byt 06ch + .byt 06dh + .byt 06eh + .byt 06fh + .byt 070h + .byt 071h + .byt 072h + .byt 073h + .byt 074h + .byt 075h + .byt 076h + .byt 077h + .byt 078h + .byt 079h + .byt 07ah + .byt 07bh + .byt 07ch + .byt 07dh + .byt 07eh + .byt 07fh + .byt 080h + .byt 081h + .byt 082h + .byt 083h + .byt 084h + .byt 085h + .byt 086h + .byt 087h + .byt 088h + .byt 089h + .byt 08ah + .byt 08bh + .byt 08ch + .byt 08dh + .byt 08eh + .byt 08fh + .byt 090h + .byt 091h + .byt 092h + .byt 093h + .byt 094h + .byt 095h + .byt 096h + .byt 097h + .byt 098h + .byt 099h + .byt 09ah + .byt 09bh + .byt 09ch + .byt 09dh + .byt 09eh + .byt 09fh + .byt 0a0h + .byt 0a1h + .byt 0a2h + .byt 0a3h + .byt 0a4h + .byt 0a5h + .byt 0a6h + .byt 0a7h + .byt 0a8h + .byt 0a9h + .byt 0aah + .byt 0abh + .byt 0ach + .byt 0adh + .byt 0aeh + .byt 0afh + .byt 0b0h + .byt 0b1h + .byt 0b2h + .byt 0b3h + .byt 0b4h + .byt 0b5h + .byt 0b6h + .byt 0b7h + .byt 0b8h + .byt 0b9h + .byt 0bah + .byt 0bbh + .byt 0bch + .byt 0bdh + .byt 0beh + .byt 0bfh + .byt 0c0h + .byt 0c1h + .byt 0c2h + .byt 0c3h + .byt 0c4h + .byt 0c5h + .byt 0c6h + .byt 0c7h + .byt 0c8h + .byt 0c9h + .byt 0cah + .byt 0cbh + .byt 0cch + .byt 0cdh + .byt 0ceh + .byt 0cfh + .byt 0d0h + .byt 0d1h + .byt 0d2h + .byt 0d3h + .byt 0d4h + .byt 0d5h + .byt 0d6h + .byt 0d7h + .byt 0d8h + .byt 0d9h + .byt 0dah + .byt 0dbh + .byt 0dch + .byt 0ddh + .byt 0deh + .byt 0dfh + .byt 0e0h + .byt 0e1h + .byt 0e2h + .byt 0e3h + .byt 0e4h + .byt 0e5h + .byt 0e6h + .byt 0e7h + .byt 0e8h + .byt 0e9h + .byt 0eah + .byt 0ebh + .byt 0ech + .byt 0edh + .byt 0eeh + .byt 0efh + .byt 0f0h + .byt 0f1h + .byt 0f2h + .byt 0f3h + .byt 0f4h + .byt 0f5h + .byt 0f6h + .byt 0f7h + .byt 0f8h + .byt 0f9h + .byt 0fah + .byt 0fbh + .byt 0fch + .byt 0fdh + .byt 0feh + .byt 0ffh + + ; binary values, variable length + .byt %0 + .byt %1 + .byt %10 + .byt %11 + .byt %100 + .byt %101 + .byt %110 + .byt %111 + .byt %1000 + .byt %1001 + .byt %1010 + .byt %1011 + .byt %1100 + .byt %1101 + .byt %1110 + .byt %1111 + .byt %10000 + .byt %10001 + .byt %10010 + .byt %10011 + .byt %10100 + .byt %10101 + .byt %10110 + .byt %10111 + .byt %11000 + .byt %11001 + .byt %11010 + .byt %11011 + .byt %11100 + .byt %11101 + .byt %11110 + .byt %11111 + .byt %100000 + .byt %100001 + .byt %100010 + .byt %100011 + .byt %100100 + .byt %100101 + .byt %100110 + .byt %100111 + .byt %101000 + .byt %101001 + .byt %101010 + .byt %101011 + .byt %101100 + .byt %101101 + .byt %101110 + .byt %101111 + .byt %110000 + .byt %110001 + .byt %110010 + .byt %110011 + .byt %110100 + .byt %110101 + .byt %110110 + .byt %110111 + .byt %111000 + .byt %111001 + .byt %111010 + .byt %111011 + .byt %111100 + .byt %111101 + .byt %111110 + .byt %111111 + .byt %1000000 + .byt %1000001 + .byt %1000010 + .byt %1000011 + .byt %1000100 + .byt %1000101 + .byt %1000110 + .byt %1000111 + .byt %1001000 + .byt %1001001 + .byt %1001010 + .byt %1001011 + .byt %1001100 + .byt %1001101 + .byt %1001110 + .byt %1001111 + .byt %1010000 + .byt %1010001 + .byt %1010010 + .byt %1010011 + .byt %1010100 + .byt %1010101 + .byt %1010110 + .byt %1010111 + .byt %1011000 + .byt %1011001 + .byt %1011010 + .byt %1011011 + .byt %1011100 + .byt %1011101 + .byt %1011110 + .byt %1011111 + .byt %1100000 + .byt %1100001 + .byt %1100010 + .byt %1100011 + .byt %1100100 + .byt %1100101 + .byt %1100110 + .byt %1100111 + .byt %1101000 + .byt %1101001 + .byt %1101010 + .byt %1101011 + .byt %1101100 + .byt %1101101 + .byt %1101110 + .byt %1101111 + .byt %1110000 + .byt %1110001 + .byt %1110010 + .byt %1110011 + .byt %1110100 + .byt %1110101 + .byt %1110110 + .byt %1110111 + .byt %1111000 + .byt %1111001 + .byt %1111010 + .byt %1111011 + .byt %1111100 + .byt %1111101 + .byt %1111110 + .byt %1111111 + .byt %10000000 + .byt %10000001 + .byt %10000010 + .byt %10000011 + .byt %10000100 + .byt %10000101 + .byt %10000110 + .byt %10000111 + .byt %10001000 + .byt %10001001 + .byt %10001010 + .byt %10001011 + .byt %10001100 + .byt %10001101 + .byt %10001110 + .byt %10001111 + .byt %10010000 + .byt %10010001 + .byt %10010010 + .byt %10010011 + .byt %10010100 + .byt %10010101 + .byt %10010110 + .byt %10010111 + .byt %10011000 + .byt %10011001 + .byt %10011010 + .byt %10011011 + .byt %10011100 + .byt %10011101 + .byt %10011110 + .byt %10011111 + .byt %10100000 + .byt %10100001 + .byt %10100010 + .byt %10100011 + .byt %10100100 + .byt %10100101 + .byt %10100110 + .byt %10100111 + .byt %10101000 + .byt %10101001 + .byt %10101010 + .byt %10101011 + .byt %10101100 + .byt %10101101 + .byt %10101110 + .byt %10101111 + .byt %10110000 + .byt %10110001 + .byt %10110010 + .byt %10110011 + .byt %10110100 + .byt %10110101 + .byt %10110110 + .byt %10110111 + .byt %10111000 + .byt %10111001 + .byt %10111010 + .byt %10111011 + .byt %10111100 + .byt %10111101 + .byt %10111110 + .byt %10111111 + .byt %11000000 + .byt %11000001 + .byt %11000010 + .byt %11000011 + .byt %11000100 + .byt %11000101 + .byt %11000110 + .byt %11000111 + .byt %11001000 + .byt %11001001 + .byt %11001010 + .byt %11001011 + .byt %11001100 + .byt %11001101 + .byt %11001110 + .byt %11001111 + .byt %11010000 + .byt %11010001 + .byt %11010010 + .byt %11010011 + .byt %11010100 + .byt %11010101 + .byt %11010110 + .byt %11010111 + .byt %11011000 + .byt %11011001 + .byt %11011010 + .byt %11011011 + .byt %11011100 + .byt %11011101 + .byt %11011110 + .byt %11011111 + .byt %11100000 + .byt %11100001 + .byt %11100010 + .byt %11100011 + .byt %11100100 + .byt %11100101 + .byt %11100110 + .byt %11100111 + .byt %11101000 + .byt %11101001 + .byt %11101010 + .byt %11101011 + .byt %11101100 + .byt %11101101 + .byt %11101110 + .byt %11101111 + .byt %11110000 + .byt %11110001 + .byt %11110010 + .byt %11110011 + .byt %11110100 + .byt %11110101 + .byt %11110110 + .byt %11110111 + .byt %11111000 + .byt %11111001 + .byt %11111010 + .byt %11111011 + .byt %11111100 + .byt %11111101 + .byt %11111110 + .byt %11111111 + + ; binary values, full length + .byt %00000000 + .byt %00000001 + .byt %00000010 + .byt %00000011 + .byt %00000100 + .byt %00000101 + .byt %00000110 + .byt %00000111 + .byt %00001000 + .byt %00001001 + .byt %00001010 + .byt %00001011 + .byt %00001100 + .byt %00001101 + .byt %00001110 + .byt %00001111 + .byt %00010000 + .byt %00010001 + .byt %00010010 + .byt %00010011 + .byt %00010100 + .byt %00010101 + .byt %00010110 + .byt %00010111 + .byt %00011000 + .byt %00011001 + .byt %00011010 + .byt %00011011 + .byt %00011100 + .byt %00011101 + .byt %00011110 + .byt %00011111 + .byt %00100000 + .byt %00100001 + .byt %00100010 + .byt %00100011 + .byt %00100100 + .byt %00100101 + .byt %00100110 + .byt %00100111 + .byt %00101000 + .byt %00101001 + .byt %00101010 + .byt %00101011 + .byt %00101100 + .byt %00101101 + .byt %00101110 + .byt %00101111 + .byt %00110000 + .byt %00110001 + .byt %00110010 + .byt %00110011 + .byt %00110100 + .byt %00110101 + .byt %00110110 + .byt %00110111 + .byt %00111000 + .byt %00111001 + .byt %00111010 + .byt %00111011 + .byt %00111100 + .byt %00111101 + .byt %00111110 + .byt %00111111 + .byt %01000000 + .byt %01000001 + .byt %01000010 + .byt %01000011 + .byt %01000100 + .byt %01000101 + .byt %01000110 + .byt %01000111 + .byt %01001000 + .byt %01001001 + .byt %01001010 + .byt %01001011 + .byt %01001100 + .byt %01001101 + .byt %01001110 + .byt %01001111 + .byt %01010000 + .byt %01010001 + .byt %01010010 + .byt %01010011 + .byt %01010100 + .byt %01010101 + .byt %01010110 + .byt %01010111 + .byt %01011000 + .byt %01011001 + .byt %01011010 + .byt %01011011 + .byt %01011100 + .byt %01011101 + .byt %01011110 + .byt %01011111 + .byt %01100000 + .byt %01100001 + .byt %01100010 + .byt %01100011 + .byt %01100100 + .byt %01100101 + .byt %01100110 + .byt %01100111 + .byt %01101000 + .byt %01101001 + .byt %01101010 + .byt %01101011 + .byt %01101100 + .byt %01101101 + .byt %01101110 + .byt %01101111 + .byt %01110000 + .byt %01110001 + .byt %01110010 + .byt %01110011 + .byt %01110100 + .byt %01110101 + .byt %01110110 + .byt %01110111 + .byt %01111000 + .byt %01111001 + .byt %01111010 + .byt %01111011 + .byt %01111100 + .byt %01111101 + .byt %01111110 + .byt %01111111 + .byt %10000000 + .byt %10000001 + .byt %10000010 + .byt %10000011 + .byt %10000100 + .byt %10000101 + .byt %10000110 + .byt %10000111 + .byt %10001000 + .byt %10001001 + .byt %10001010 + .byt %10001011 + .byt %10001100 + .byt %10001101 + .byt %10001110 + .byt %10001111 + .byt %10010000 + .byt %10010001 + .byt %10010010 + .byt %10010011 + .byt %10010100 + .byt %10010101 + .byt %10010110 + .byt %10010111 + .byt %10011000 + .byt %10011001 + .byt %10011010 + .byt %10011011 + .byt %10011100 + .byt %10011101 + .byt %10011110 + .byt %10011111 + .byt %10100000 + .byt %10100001 + .byt %10100010 + .byt %10100011 + .byt %10100100 + .byt %10100101 + .byt %10100110 + .byt %10100111 + .byt %10101000 + .byt %10101001 + .byt %10101010 + .byt %10101011 + .byt %10101100 + .byt %10101101 + .byt %10101110 + .byt %10101111 + .byt %10110000 + .byt %10110001 + .byt %10110010 + .byt %10110011 + .byt %10110100 + .byt %10110101 + .byt %10110110 + .byt %10110111 + .byt %10111000 + .byt %10111001 + .byt %10111010 + .byt %10111011 + .byt %10111100 + .byt %10111101 + .byt %10111110 + .byt %10111111 + .byt %11000000 + .byt %11000001 + .byt %11000010 + .byt %11000011 + .byt %11000100 + .byt %11000101 + .byt %11000110 + .byt %11000111 + .byt %11001000 + .byt %11001001 + .byt %11001010 + .byt %11001011 + .byt %11001100 + .byt %11001101 + .byt %11001110 + .byt %11001111 + .byt %11010000 + .byt %11010001 + .byt %11010010 + .byt %11010011 + .byt %11010100 + .byt %11010101 + .byt %11010110 + .byt %11010111 + .byt %11011000 + .byt %11011001 + .byt %11011010 + .byt %11011011 + .byt %11011100 + .byt %11011101 + .byt %11011110 + .byt %11011111 + .byt %11100000 + .byt %11100001 + .byt %11100010 + .byt %11100011 + .byt %11100100 + .byt %11100101 + .byt %11100110 + .byt %11100111 + .byt %11101000 + .byt %11101001 + .byt %11101010 + .byt %11101011 + .byt %11101100 + .byt %11101101 + .byt %11101110 + .byt %11101111 + .byt %11110000 + .byt %11110001 + .byt %11110010 + .byt %11110011 + .byt %11110100 + .byt %11110101 + .byt %11110110 + .byt %11110111 + .byt %11111000 + .byt %11111001 + .byt %11111010 + .byt %11111011 + .byt %11111100 + .byt %11111101 + .byt %11111110 + .byt %11111111 + + ; some character values + .byt ' ' + .byt '!' + .byt '"' + .byt '#' + .byt '$' + .byt '%' + .byt '&' + .byt ''' + .byt '(' + .byt ')' + .byt '*' + .byt '+' + .byt ',' + .byt '-' + .byt '.' + .byt '/' + .byt '0' + .byt '1' + .byt '2' + .byt '3' + .byt '4' + .byt '5' + .byt '6' + .byt '7' + .byt '8' + .byt '9' + .byt ':' + .byt ';' + .byt '<' + .byt '=' + .byt '>' + .byt '?' + .byt '@' + .byt 'A' + .byt 'B' + .byt 'C' + .byt 'D' + .byt 'E' + .byt 'F' + .byt 'G' + .byt 'H' + .byt 'I' + .byt 'J' + .byt 'K' + .byt 'L' + .byt 'M' + .byt 'N' + .byt 'O' + .byt 'P' + .byt 'Q' + .byt 'R' + .byt 'S' + .byt 'T' + .byt 'U' + .byt 'V' + .byt 'W' + .byt 'X' + .byt 'Y' + .byt 'Z' + .byt '[' + .byt '\' + .byt ']' + .byt '^' + .byt '_' + .byt '`' + .byt 'a' + .byt 'b' + .byt 'c' + .byt 'd' + .byt 'e' + .byt 'f' + .byt 'g' + .byt 'h' + .byt 'i' + .byt 'j' + .byt 'k' + .byt 'l' + .byt 'm' + .byt 'n' + .byt 'o' + .byt 'p' + .byt 'q' + .byt 'r' + .byt 's' + .byt 't' + .byt 'u' + .byt 'v' + .byt 'w' + .byt 'x' + .byt 'y' + .byt 'z' + .byt '{' + .byt '|' + .byt '}' + .byt '~' + + ; multiple values on one line, decimal + .byt 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .byt 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .byt 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 + .byt 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 + .byt 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 + .byt 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95 + .byt 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 + .byt 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .byt 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .byt 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 + .byt 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 + .byt 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 + .byt 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 + .byt 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 + .byt 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 + .byt 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + + ; multiple values on one line, hex + .byt $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .byt $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .byt $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f + .byt $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f + .byt $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f + .byt $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$5b,$5c,$5d,$5e,$5f + .byt $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f + .byt $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .byt $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .byt $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f + .byt $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af + .byt $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf + .byt $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf + .byt $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df + .byt $e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef + .byt $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + + ; multiple values on one line, alternative hex + .byt 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .byt 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .byt 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,2ah,2bh,2ch,2dh,2eh,2fh + .byt 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,3ah,3bh,3ch,3dh,3eh,3fh + .byt 40h,41h,42h,43h,44h,45h,46h,47h,48h,49h,4ah,4bh,4ch,4dh,4eh,4fh + .byt 50h,51h,52h,53h,54h,55h,56h,57h,58h,59h,5ah,5bh,5ch,5dh,5eh,5fh + .byt 60h,61h,62h,63h,64h,65h,66h,67h,68h,69h,6ah,6bh,6ch,6dh,6eh,6fh + .byt 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .byt 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .byt 90h,91h,92h,93h,94h,95h,96h,97h,98h,99h,9ah,9bh,9ch,9dh,9eh,9fh + .byt 0a0h,0a1h,0a2h,0a3h,0a4h,0a5h,0a6h,0a7h,0a8h,0a9h,0aah,0abh,0ach,0adh,0aeh,0afh + .byt 0b0h,0b1h,0b2h,0b3h,0b4h,0b5h,0b6h,0b7h,0b8h,0b9h,0bah,0bbh,0bch,0bdh,0beh,0bfh + .byt 0c0h,0c1h,0c2h,0c3h,0c4h,0c5h,0c6h,0c7h,0c8h,0c9h,0cah,0cbh,0cch,0cdh,0ceh,0cfh + .byt 0d0h,0d1h,0d2h,0d3h,0d4h,0d5h,0d6h,0d7h,0d8h,0d9h,0dah,0dbh,0dch,0ddh,0deh,0dfh + .byt 0e0h,0e1h,0e2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0e9h,0eah,0ebh,0ech,0edh,0eeh,0efh + .byt 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + + ; multiple values on one line, characters + .byt ' ','!','"','#','$','%','&',''','(',')','*','+',',','-','.','/' + .byt '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?' + .byt '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O' + .byt 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_' + .byt '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o' + .byt 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~' + + ; some character strings + .byt " !#$%&'()*+,-." + .byt "0123456789:;<=>" + .byt "@ABCDEFGHIJKLMN" + .byt "PQRSTUVWXYZ[\]^" + .byt "`abcdefghijklmn" + .byt "pqrstuvwxyz{|}" + + ; mix some variants + .byt 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/102-word.bin-ref b/test/asm/listing/102-word.bin-ref new file mode 100644 index 0000000000000000000000000000000000000000..4a0e0747f1c177da50c5c08b1881010f647683f3 GIT binary patch literal 14270 zcmeI3N7C&y5QSSe=QcUR7ML<*8_Zw@<P0{MM_htDhJm~Tc?WWlvwU;D(#`pbADA$M z$NxrDm&<dzO0Dib=Q{ulGLVHF<e>mXC_x!2P=y-Qp#caU+y=M99q=?f1JA;9@I1T# zFTzXkGQ0w>!fWt4ya8{54*|RdZ^JwAF1!ctgM~RPU<oT&!v?mngFPJJ2q!qh1snil zEW@(wEBqS2!Ef<9{2qV6AMq#r8GpfF@i)|%ViQ}~#twF|hkYF25Jx!12~Kf_1})BU zflFNB8aKGb9q#dfM?B#fFX*m5op~8A>*c(>SMZ8n$+Q04U-(OZ<*)sXzx8+i-aq(9 z|Ky+ji|?*}f(4l%8{~p~PzZ`aDJTb(pc*uJi??})cX^NZ`G61kh>!V%Px*`+Zuy)q z_>!;qns4})@A#e{_>rIZnP0f$5V9~6X2V>V4+~*2EQRH;5>~@nSPvT^hE35DZP5{3 z(Gz_!5JNE%V=)m^F%w2uF&7K56f3b78?hBTu@?t%6en>O7vTg%EXqXLC>Q0ULR5@O zQ8}ta)u<NLqeg^LQ?_JVc4SxfWM2;CP>$qSPUKY1q>)z6<w7pyO0MNbZskty<v||h zNuK3JItek0GjTS~#re1p7voY~jw^9BuEq7Z5o6p`E!9>X)m1&!R|7RvBQ;hNHB~cZ zlvQ)JP)oH^Yqe2ZwNra_P)BuAXLV6dLBf(ul1*|+J}D%{q?DACN>WW~Nj+&Km^5`u zw{=H%bx-&8Ko9jukM%@P^-LRW^;|FXQm^z{Z}e90^j;tIQJ?f#U$oPZvNV%s(_ETQ z3u!SerRB7eR?}KqPa7$wP17=M(=lDsGkr5KLo+gCGci*$GsajmHw&{gE3-Bmvo$-j zHwSYxCv!Fz;|y44Gd62;Hg5~IXiK(iE4FHDwr(31ZPT?}+jU&m^<3W#+|Z5O*iGEj z&75)8&E3K+-O8=q#%<ls?cKp0-N~KZ#koHU1gI*hDyb@|DydgeucTf{y^<zanqX;y zrM;5&O4=)FuOzjH)E-iMNP{H}mNZz>V96OFXM~&)@+--&B)^jUN}>peA|Q%@C<0=8 zi0vV^hlo2O?ufV};*L02;$Z);9PFKN7u*f^z`bxE+z$`HgYXbM43FF-wf+Ho2shv( z_!vHcPvJB8{9kkIIhJPyR%9hsW))UtHCAU0hV0fe>}9XwRlS;5_ZlAlXQI6p)PqKV z!FAd7>(c4h<<GB60$i6Nzb++ytGW`M|C>v6(E0x>VL|8r@2Mra|8F+CMEC#oQbPZ9 h|5vZlciF4=NqFiiZTC1l0gu9C@Wr3cmsd%;-vKte&?o=^ literal 0 HcmV?d00001 diff --git a/test/asm/listing/102-word.list-ref b/test/asm/listing/102-word.list-ref new file mode 100644 index 000000000..255db3714 --- /dev/null +++ b/test/asm/listing/102-word.list-ref @@ -0,0 +1,6226 @@ +Main file : 102-word.s +Current file: 102-word.s + +000000r 1 ; 2022-06-15 Spiro Trikaliotis +000000r 1 +000000r 1 +000000r 1 ; upper case pseudo-op +000000r 1 00 00 .WORD 0 +000002r 1 01 00 .WORD 1 +000004r 1 02 00 .WORD 2 +000006r 1 03 00 .WORD 3 +000008r 1 04 00 .WORD 4 +00000Ar 1 05 00 .WORD 5 +00000Cr 1 06 00 .WORD 6 +00000Er 1 07 00 .WORD 7 +000010r 1 08 00 .WORD 8 +000012r 1 09 00 .WORD 9 +000014r 1 0A 00 .WORD 10 +000016r 1 0B 00 .WORD 11 +000018r 1 0C 00 .WORD 12 +00001Ar 1 0D 00 .WORD 13 +00001Cr 1 0E 00 .WORD 14 +00001Er 1 0F 00 .WORD 15 +000020r 1 10 00 .WORD 16 +000022r 1 11 00 .WORD 17 +000024r 1 12 00 .WORD 18 +000026r 1 13 00 .WORD 19 +000028r 1 70 00 .WORD 112 +00002Ar 1 71 00 .WORD 113 +00002Cr 1 72 00 .WORD 114 +00002Er 1 73 00 .WORD 115 +000030r 1 74 00 .WORD 116 +000032r 1 75 00 .WORD 117 +000034r 1 76 00 .WORD 118 +000036r 1 77 00 .WORD 119 +000038r 1 78 00 .WORD 120 +00003Ar 1 79 00 .WORD 121 +00003Cr 1 7A 00 .WORD 122 +00003Er 1 7B 00 .WORD 123 +000040r 1 7C 00 .WORD 124 +000042r 1 7D 00 .WORD 125 +000044r 1 7E 00 .WORD 126 +000046r 1 7F 00 .WORD 127 +000048r 1 80 00 .WORD 128 +00004Ar 1 81 00 .WORD 129 +00004Cr 1 82 00 .WORD 130 +00004Er 1 83 00 .WORD 131 +000050r 1 84 00 .WORD 132 +000052r 1 85 00 .WORD 133 +000054r 1 86 00 .WORD 134 +000056r 1 F0 00 .WORD 240 +000058r 1 F1 00 .WORD 241 +00005Ar 1 F2 00 .WORD 242 +00005Cr 1 F3 00 .WORD 243 +00005Er 1 F4 00 .WORD 244 +000060r 1 F5 00 .WORD 245 +000062r 1 F6 00 .WORD 246 +000064r 1 F7 00 .WORD 247 +000066r 1 F8 00 .WORD 248 +000068r 1 F9 00 .WORD 249 +00006Ar 1 FA 00 .WORD 250 +00006Cr 1 FB 00 .WORD 251 +00006Er 1 FC 00 .WORD 252 +000070r 1 FD 00 .WORD 253 +000072r 1 FE 00 .WORD 254 +000074r 1 FF 00 .WORD 255 +000076r 1 00 01 .WORD 256 +000078r 1 01 01 .WORD 257 +00007Ar 1 02 01 .WORD 258 +00007Cr 1 03 01 .WORD 259 +00007Er 1 D2 0F .WORD 4050 +000080r 1 D3 0F .WORD 4051 +000082r 1 D4 0F .WORD 4052 +000084r 1 D5 0F .WORD 4053 +000086r 1 D6 0F .WORD 4054 +000088r 1 D7 0F .WORD 4055 +00008Ar 1 D8 0F .WORD 4056 +00008Cr 1 D9 0F .WORD 4057 +00008Er 1 DA 0F .WORD 4058 +000090r 1 DB 0F .WORD 4059 +000092r 1 DC 0F .WORD 4060 +000094r 1 DD 0F .WORD 4061 +000096r 1 DE 0F .WORD 4062 +000098r 1 DF 0F .WORD 4063 +00009Ar 1 E0 0F .WORD 4064 +00009Cr 1 E1 0F .WORD 4065 +00009Er 1 E2 0F .WORD 4066 +0000A0r 1 E3 0F .WORD 4067 +0000A2r 1 E4 0F .WORD 4068 +0000A4r 1 E5 0F .WORD 4069 +0000A6r 1 E6 0F .WORD 4070 +0000A8r 1 E7 0F .WORD 4071 +0000AAr 1 E8 0F .WORD 4072 +0000ACr 1 E9 0F .WORD 4073 +0000AEr 1 EA 0F .WORD 4074 +0000B0r 1 EB 0F .WORD 4075 +0000B2r 1 EC 0F .WORD 4076 +0000B4r 1 ED 0F .WORD 4077 +0000B6r 1 EE 0F .WORD 4078 +0000B8r 1 EF 0F .WORD 4079 +0000BAr 1 F0 0F .WORD 4080 +0000BCr 1 F1 0F .WORD 4081 +0000BEr 1 F2 0F .WORD 4082 +0000C0r 1 F3 0F .WORD 4083 +0000C2r 1 F4 0F .WORD 4084 +0000C4r 1 F5 0F .WORD 4085 +0000C6r 1 F6 0F .WORD 4086 +0000C8r 1 F7 0F .WORD 4087 +0000CAr 1 F8 0F .WORD 4088 +0000CCr 1 F9 0F .WORD 4089 +0000CEr 1 FA 0F .WORD 4090 +0000D0r 1 FB 0F .WORD 4091 +0000D2r 1 FC 0F .WORD 4092 +0000D4r 1 FD 0F .WORD 4093 +0000D6r 1 FE 0F .WORD 4094 +0000D8r 1 FF 0F .WORD 4095 +0000DAr 1 00 10 .WORD 4096 +0000DCr 1 01 10 .WORD 4097 +0000DEr 1 02 10 .WORD 4098 +0000E0r 1 03 10 .WORD 4099 +0000E2r 1 04 10 .WORD 4100 +0000E4r 1 05 10 .WORD 4101 +0000E6r 1 06 10 .WORD 4102 +0000E8r 1 07 10 .WORD 4103 +0000EAr 1 08 10 .WORD 4104 +0000ECr 1 F0 7F .WORD 32752 +0000EEr 1 F1 7F .WORD 32753 +0000F0r 1 F2 7F .WORD 32754 +0000F2r 1 F3 7F .WORD 32755 +0000F4r 1 F4 7F .WORD 32756 +0000F6r 1 F5 7F .WORD 32757 +0000F8r 1 F6 7F .WORD 32758 +0000FAr 1 F7 7F .WORD 32759 +0000FCr 1 F8 7F .WORD 32760 +0000FEr 1 F9 7F .WORD 32761 +000100r 1 FA 7F .WORD 32762 +000102r 1 FB 7F .WORD 32763 +000104r 1 FC 7F .WORD 32764 +000106r 1 FD 7F .WORD 32765 +000108r 1 FE 7F .WORD 32766 +00010Ar 1 FF 7F .WORD 32767 +00010Cr 1 00 80 .WORD 32768 +00010Er 1 01 80 .WORD 32769 +000110r 1 02 80 .WORD 32770 +000112r 1 03 80 .WORD 32771 +000114r 1 04 80 .WORD 32772 +000116r 1 05 80 .WORD 32773 +000118r 1 06 80 .WORD 32774 +00011Ar 1 07 80 .WORD 32775 +00011Cr 1 08 80 .WORD 32776 +00011Er 1 09 80 .WORD 32777 +000120r 1 0A 80 .WORD 32778 +000122r 1 0B 80 .WORD 32779 +000124r 1 E1 9F .WORD 40929 +000126r 1 E2 9F .WORD 40930 +000128r 1 E3 9F .WORD 40931 +00012Ar 1 E4 9F .WORD 40932 +00012Cr 1 E5 9F .WORD 40933 +00012Er 1 E6 9F .WORD 40934 +000130r 1 E7 9F .WORD 40935 +000132r 1 E8 9F .WORD 40936 +000134r 1 E9 9F .WORD 40937 +000136r 1 EA 9F .WORD 40938 +000138r 1 EB 9F .WORD 40939 +00013Ar 1 EC 9F .WORD 40940 +00013Cr 1 ED 9F .WORD 40941 +00013Er 1 EE 9F .WORD 40942 +000140r 1 EF 9F .WORD 40943 +000142r 1 F0 9F .WORD 40944 +000144r 1 F1 9F .WORD 40945 +000146r 1 F2 9F .WORD 40946 +000148r 1 F3 9F .WORD 40947 +00014Ar 1 F4 9F .WORD 40948 +00014Cr 1 F5 9F .WORD 40949 +00014Er 1 F6 9F .WORD 40950 +000150r 1 F7 9F .WORD 40951 +000152r 1 F8 9F .WORD 40952 +000154r 1 F9 9F .WORD 40953 +000156r 1 FA 9F .WORD 40954 +000158r 1 FB 9F .WORD 40955 +00015Ar 1 FC 9F .WORD 40956 +00015Cr 1 FD 9F .WORD 40957 +00015Er 1 FE 9F .WORD 40958 +000160r 1 FF 9F .WORD 40959 +000162r 1 00 A0 .WORD 40960 +000164r 1 01 A0 .WORD 40961 +000166r 1 02 A0 .WORD 40962 +000168r 1 03 A0 .WORD 40963 +00016Ar 1 04 A0 .WORD 40964 +00016Cr 1 05 A0 .WORD 40965 +00016Er 1 06 A0 .WORD 40966 +000170r 1 07 A0 .WORD 40967 +000172r 1 08 A0 .WORD 40968 +000174r 1 09 A0 .WORD 40969 +000176r 1 0A A0 .WORD 40970 +000178r 1 0B A0 .WORD 40971 +00017Ar 1 0C A0 .WORD 40972 +00017Cr 1 0D A0 .WORD 40973 +00017Er 1 0E A0 .WORD 40974 +000180r 1 0F A0 .WORD 40975 +000182r 1 E1 AF .WORD 45025 +000184r 1 E2 AF .WORD 45026 +000186r 1 E3 AF .WORD 45027 +000188r 1 E4 AF .WORD 45028 +00018Ar 1 E5 AF .WORD 45029 +00018Cr 1 E6 AF .WORD 45030 +00018Er 1 E7 AF .WORD 45031 +000190r 1 E8 AF .WORD 45032 +000192r 1 E9 AF .WORD 45033 +000194r 1 EA AF .WORD 45034 +000196r 1 EB AF .WORD 45035 +000198r 1 EC AF .WORD 45036 +00019Ar 1 ED AF .WORD 45037 +00019Cr 1 EE AF .WORD 45038 +00019Er 1 EF AF .WORD 45039 +0001A0r 1 F0 AF .WORD 45040 +0001A2r 1 F1 AF .WORD 45041 +0001A4r 1 F2 AF .WORD 45042 +0001A6r 1 F3 AF .WORD 45043 +0001A8r 1 F4 AF .WORD 45044 +0001AAr 1 F5 AF .WORD 45045 +0001ACr 1 F6 AF .WORD 45046 +0001AEr 1 F7 AF .WORD 45047 +0001B0r 1 F8 AF .WORD 45048 +0001B2r 1 F9 AF .WORD 45049 +0001B4r 1 FA AF .WORD 45050 +0001B6r 1 FB AF .WORD 45051 +0001B8r 1 FC AF .WORD 45052 +0001BAr 1 FD AF .WORD 45053 +0001BCr 1 FE AF .WORD 45054 +0001BEr 1 FF AF .WORD 45055 +0001C0r 1 00 B0 .WORD 45056 +0001C2r 1 01 B0 .WORD 45057 +0001C4r 1 02 B0 .WORD 45058 +0001C6r 1 03 B0 .WORD 45059 +0001C8r 1 04 B0 .WORD 45060 +0001CAr 1 05 B0 .WORD 45061 +0001CCr 1 06 B0 .WORD 45062 +0001CEr 1 07 B0 .WORD 45063 +0001D0r 1 08 B0 .WORD 45064 +0001D2r 1 09 B0 .WORD 45065 +0001D4r 1 0A B0 .WORD 45066 +0001D6r 1 0B B0 .WORD 45067 +0001D8r 1 0C B0 .WORD 45068 +0001DAr 1 0D B0 .WORD 45069 +0001DCr 1 0E B0 .WORD 45070 +0001DEr 1 0F B0 .WORD 45071 +0001E0r 1 E1 BF .WORD 49121 +0001E2r 1 E2 BF .WORD 49122 +0001E4r 1 E3 BF .WORD 49123 +0001E6r 1 E4 BF .WORD 49124 +0001E8r 1 E5 BF .WORD 49125 +0001EAr 1 E6 BF .WORD 49126 +0001ECr 1 E7 BF .WORD 49127 +0001EEr 1 E8 BF .WORD 49128 +0001F0r 1 E9 BF .WORD 49129 +0001F2r 1 EA BF .WORD 49130 +0001F4r 1 EB BF .WORD 49131 +0001F6r 1 EC BF .WORD 49132 +0001F8r 1 ED BF .WORD 49133 +0001FAr 1 EE BF .WORD 49134 +0001FCr 1 EF BF .WORD 49135 +0001FEr 1 F0 BF .WORD 49136 +000200r 1 F1 BF .WORD 49137 +000202r 1 F2 BF .WORD 49138 +000204r 1 F3 BF .WORD 49139 +000206r 1 F4 BF .WORD 49140 +000208r 1 F5 BF .WORD 49141 +00020Ar 1 F6 BF .WORD 49142 +00020Cr 1 F7 BF .WORD 49143 +00020Er 1 F8 BF .WORD 49144 +000210r 1 F9 BF .WORD 49145 +000212r 1 FA BF .WORD 49146 +000214r 1 FB BF .WORD 49147 +000216r 1 FC BF .WORD 49148 +000218r 1 FD BF .WORD 49149 +00021Ar 1 FE BF .WORD 49150 +00021Cr 1 FF BF .WORD 49151 +00021Er 1 00 C0 .WORD 49152 +000220r 1 01 C0 .WORD 49153 +000222r 1 02 C0 .WORD 49154 +000224r 1 03 C0 .WORD 49155 +000226r 1 04 C0 .WORD 49156 +000228r 1 05 C0 .WORD 49157 +00022Ar 1 06 C0 .WORD 49158 +00022Cr 1 07 C0 .WORD 49159 +00022Er 1 08 C0 .WORD 49160 +000230r 1 09 C0 .WORD 49161 +000232r 1 0A C0 .WORD 49162 +000234r 1 0B C0 .WORD 49163 +000236r 1 0C C0 .WORD 49164 +000238r 1 0D C0 .WORD 49165 +00023Ar 1 0E C0 .WORD 49166 +00023Cr 1 0F C0 .WORD 49167 +00023Er 1 E1 CF .WORD 53217 +000240r 1 E2 CF .WORD 53218 +000242r 1 E3 CF .WORD 53219 +000244r 1 E4 CF .WORD 53220 +000246r 1 E5 CF .WORD 53221 +000248r 1 E6 CF .WORD 53222 +00024Ar 1 E7 CF .WORD 53223 +00024Cr 1 E8 CF .WORD 53224 +00024Er 1 E9 CF .WORD 53225 +000250r 1 EA CF .WORD 53226 +000252r 1 EB CF .WORD 53227 +000254r 1 EC CF .WORD 53228 +000256r 1 ED CF .WORD 53229 +000258r 1 EE CF .WORD 53230 +00025Ar 1 EF CF .WORD 53231 +00025Cr 1 F0 CF .WORD 53232 +00025Er 1 F1 CF .WORD 53233 +000260r 1 F2 CF .WORD 53234 +000262r 1 F3 CF .WORD 53235 +000264r 1 F4 CF .WORD 53236 +000266r 1 F5 CF .WORD 53237 +000268r 1 F6 CF .WORD 53238 +00026Ar 1 F7 CF .WORD 53239 +00026Cr 1 F8 CF .WORD 53240 +00026Er 1 F9 CF .WORD 53241 +000270r 1 FA CF .WORD 53242 +000272r 1 FB CF .WORD 53243 +000274r 1 FC CF .WORD 53244 +000276r 1 FD CF .WORD 53245 +000278r 1 FE CF .WORD 53246 +00027Ar 1 FF CF .WORD 53247 +00027Cr 1 00 D0 .WORD 53248 +00027Er 1 01 D0 .WORD 53249 +000280r 1 02 D0 .WORD 53250 +000282r 1 03 D0 .WORD 53251 +000284r 1 04 D0 .WORD 53252 +000286r 1 05 D0 .WORD 53253 +000288r 1 06 D0 .WORD 53254 +00028Ar 1 07 D0 .WORD 53255 +00028Cr 1 08 D0 .WORD 53256 +00028Er 1 09 D0 .WORD 53257 +000290r 1 0A D0 .WORD 53258 +000292r 1 0B D0 .WORD 53259 +000294r 1 0C D0 .WORD 53260 +000296r 1 0D D0 .WORD 53261 +000298r 1 0E D0 .WORD 53262 +00029Ar 1 0F D0 .WORD 53263 +00029Cr 1 E1 DF .WORD 57313 +00029Er 1 E2 DF .WORD 57314 +0002A0r 1 E3 DF .WORD 57315 +0002A2r 1 E4 DF .WORD 57316 +0002A4r 1 E5 DF .WORD 57317 +0002A6r 1 E6 DF .WORD 57318 +0002A8r 1 E7 DF .WORD 57319 +0002AAr 1 E8 DF .WORD 57320 +0002ACr 1 E9 DF .WORD 57321 +0002AEr 1 EA DF .WORD 57322 +0002B0r 1 EB DF .WORD 57323 +0002B2r 1 EC DF .WORD 57324 +0002B4r 1 ED DF .WORD 57325 +0002B6r 1 EE DF .WORD 57326 +0002B8r 1 EF DF .WORD 57327 +0002BAr 1 F0 DF .WORD 57328 +0002BCr 1 F1 DF .WORD 57329 +0002BEr 1 F2 DF .WORD 57330 +0002C0r 1 F3 DF .WORD 57331 +0002C2r 1 F4 DF .WORD 57332 +0002C4r 1 F5 DF .WORD 57333 +0002C6r 1 F6 DF .WORD 57334 +0002C8r 1 F7 DF .WORD 57335 +0002CAr 1 F8 DF .WORD 57336 +0002CCr 1 F9 DF .WORD 57337 +0002CEr 1 FA DF .WORD 57338 +0002D0r 1 FB DF .WORD 57339 +0002D2r 1 FC DF .WORD 57340 +0002D4r 1 FD DF .WORD 57341 +0002D6r 1 FE DF .WORD 57342 +0002D8r 1 FF DF .WORD 57343 +0002DAr 1 00 E0 .WORD 57344 +0002DCr 1 01 E0 .WORD 57345 +0002DEr 1 02 E0 .WORD 57346 +0002E0r 1 03 E0 .WORD 57347 +0002E2r 1 04 E0 .WORD 57348 +0002E4r 1 05 E0 .WORD 57349 +0002E6r 1 06 E0 .WORD 57350 +0002E8r 1 07 E0 .WORD 57351 +0002EAr 1 08 E0 .WORD 57352 +0002ECr 1 09 E0 .WORD 57353 +0002EEr 1 0A E0 .WORD 57354 +0002F0r 1 0B E0 .WORD 57355 +0002F2r 1 0C E0 .WORD 57356 +0002F4r 1 0D E0 .WORD 57357 +0002F6r 1 0E E0 .WORD 57358 +0002F8r 1 0F E0 .WORD 57359 +0002FAr 1 E1 EF .WORD 61409 +0002FCr 1 E2 EF .WORD 61410 +0002FEr 1 E3 EF .WORD 61411 +000300r 1 E4 EF .WORD 61412 +000302r 1 E5 EF .WORD 61413 +000304r 1 E6 EF .WORD 61414 +000306r 1 E7 EF .WORD 61415 +000308r 1 E8 EF .WORD 61416 +00030Ar 1 E9 EF .WORD 61417 +00030Cr 1 EA EF .WORD 61418 +00030Er 1 EB EF .WORD 61419 +000310r 1 EC EF .WORD 61420 +000312r 1 ED EF .WORD 61421 +000314r 1 EE EF .WORD 61422 +000316r 1 EF EF .WORD 61423 +000318r 1 F0 EF .WORD 61424 +00031Ar 1 F1 EF .WORD 61425 +00031Cr 1 F2 EF .WORD 61426 +00031Er 1 F3 EF .WORD 61427 +000320r 1 F4 EF .WORD 61428 +000322r 1 F5 EF .WORD 61429 +000324r 1 F6 EF .WORD 61430 +000326r 1 F7 EF .WORD 61431 +000328r 1 F8 EF .WORD 61432 +00032Ar 1 F9 EF .WORD 61433 +00032Cr 1 FA EF .WORD 61434 +00032Er 1 FB EF .WORD 61435 +000330r 1 FC EF .WORD 61436 +000332r 1 FD EF .WORD 61437 +000334r 1 FE EF .WORD 61438 +000336r 1 FF EF .WORD 61439 +000338r 1 00 F0 .WORD 61440 +00033Ar 1 01 F0 .WORD 61441 +00033Cr 1 02 F0 .WORD 61442 +00033Er 1 03 F0 .WORD 61443 +000340r 1 04 F0 .WORD 61444 +000342r 1 05 F0 .WORD 61445 +000344r 1 06 F0 .WORD 61446 +000346r 1 07 F0 .WORD 61447 +000348r 1 08 F0 .WORD 61448 +00034Ar 1 09 F0 .WORD 61449 +00034Cr 1 0A F0 .WORD 61450 +00034Er 1 0B F0 .WORD 61451 +000350r 1 0C F0 .WORD 61452 +000352r 1 0D F0 .WORD 61453 +000354r 1 0E F0 .WORD 61454 +000356r 1 0F F0 .WORD 61455 +000358r 1 E1 FF .WORD 65505 +00035Ar 1 E2 FF .WORD 65506 +00035Cr 1 E3 FF .WORD 65507 +00035Er 1 E4 FF .WORD 65508 +000360r 1 E5 FF .WORD 65509 +000362r 1 E6 FF .WORD 65510 +000364r 1 E7 FF .WORD 65511 +000366r 1 E8 FF .WORD 65512 +000368r 1 E9 FF .WORD 65513 +00036Ar 1 EA FF .WORD 65514 +00036Cr 1 EB FF .WORD 65515 +00036Er 1 EC FF .WORD 65516 +000370r 1 ED FF .WORD 65517 +000372r 1 EE FF .WORD 65518 +000374r 1 EF FF .WORD 65519 +000376r 1 F0 FF .WORD 65520 +000378r 1 F1 FF .WORD 65521 +00037Ar 1 F2 FF .WORD 65522 +00037Cr 1 F3 FF .WORD 65523 +00037Er 1 F4 FF .WORD 65524 +000380r 1 F5 FF .WORD 65525 +000382r 1 F6 FF .WORD 65526 +000384r 1 F7 FF .WORD 65527 +000386r 1 F8 FF .WORD 65528 +000388r 1 F9 FF .WORD 65529 +00038Ar 1 FA FF .WORD 65530 +00038Cr 1 FB FF .WORD 65531 +00038Er 1 FC FF .WORD 65532 +000390r 1 FD FF .WORD 65533 +000392r 1 FE FF .WORD 65534 +000394r 1 FF FF .WORD 65535 +000396r 1 +000396r 1 ; lower case pseudo-op +000396r 1 00 00 .word 0 +000398r 1 01 00 .word 1 +00039Ar 1 02 00 .word 2 +00039Cr 1 03 00 .word 3 +00039Er 1 04 00 .word 4 +0003A0r 1 05 00 .word 5 +0003A2r 1 06 00 .word 6 +0003A4r 1 07 00 .word 7 +0003A6r 1 08 00 .word 8 +0003A8r 1 09 00 .word 9 +0003AAr 1 0A 00 .word 10 +0003ACr 1 0B 00 .word 11 +0003AEr 1 0C 00 .word 12 +0003B0r 1 0D 00 .word 13 +0003B2r 1 0E 00 .word 14 +0003B4r 1 0F 00 .word 15 +0003B6r 1 10 00 .word 16 +0003B8r 1 11 00 .word 17 +0003BAr 1 12 00 .word 18 +0003BCr 1 13 00 .word 19 +0003BEr 1 70 00 .word 112 +0003C0r 1 71 00 .word 113 +0003C2r 1 72 00 .word 114 +0003C4r 1 73 00 .word 115 +0003C6r 1 74 00 .word 116 +0003C8r 1 75 00 .word 117 +0003CAr 1 76 00 .word 118 +0003CCr 1 77 00 .word 119 +0003CEr 1 78 00 .word 120 +0003D0r 1 79 00 .word 121 +0003D2r 1 7A 00 .word 122 +0003D4r 1 7B 00 .word 123 +0003D6r 1 7C 00 .word 124 +0003D8r 1 7D 00 .word 125 +0003DAr 1 7E 00 .word 126 +0003DCr 1 7F 00 .word 127 +0003DEr 1 80 00 .word 128 +0003E0r 1 81 00 .word 129 +0003E2r 1 82 00 .word 130 +0003E4r 1 83 00 .word 131 +0003E6r 1 84 00 .word 132 +0003E8r 1 85 00 .word 133 +0003EAr 1 86 00 .word 134 +0003ECr 1 F0 00 .word 240 +0003EEr 1 F1 00 .word 241 +0003F0r 1 F2 00 .word 242 +0003F2r 1 F3 00 .word 243 +0003F4r 1 F4 00 .word 244 +0003F6r 1 F5 00 .word 245 +0003F8r 1 F6 00 .word 246 +0003FAr 1 F7 00 .word 247 +0003FCr 1 F8 00 .word 248 +0003FEr 1 F9 00 .word 249 +000400r 1 FA 00 .word 250 +000402r 1 FB 00 .word 251 +000404r 1 FC 00 .word 252 +000406r 1 FD 00 .word 253 +000408r 1 FE 00 .word 254 +00040Ar 1 FF 00 .word 255 +00040Cr 1 00 01 .word 256 +00040Er 1 01 01 .word 257 +000410r 1 02 01 .word 258 +000412r 1 03 01 .word 259 +000414r 1 D2 0F .word 4050 +000416r 1 D3 0F .word 4051 +000418r 1 D4 0F .word 4052 +00041Ar 1 D5 0F .word 4053 +00041Cr 1 D6 0F .word 4054 +00041Er 1 D7 0F .word 4055 +000420r 1 D8 0F .word 4056 +000422r 1 D9 0F .word 4057 +000424r 1 DA 0F .word 4058 +000426r 1 DB 0F .word 4059 +000428r 1 DC 0F .word 4060 +00042Ar 1 DD 0F .word 4061 +00042Cr 1 DE 0F .word 4062 +00042Er 1 DF 0F .word 4063 +000430r 1 E0 0F .word 4064 +000432r 1 E1 0F .word 4065 +000434r 1 E2 0F .word 4066 +000436r 1 E3 0F .word 4067 +000438r 1 E4 0F .word 4068 +00043Ar 1 E5 0F .word 4069 +00043Cr 1 E6 0F .word 4070 +00043Er 1 E7 0F .word 4071 +000440r 1 E8 0F .word 4072 +000442r 1 E9 0F .word 4073 +000444r 1 EA 0F .word 4074 +000446r 1 EB 0F .word 4075 +000448r 1 EC 0F .word 4076 +00044Ar 1 ED 0F .word 4077 +00044Cr 1 EE 0F .word 4078 +00044Er 1 EF 0F .word 4079 +000450r 1 F0 0F .word 4080 +000452r 1 F1 0F .word 4081 +000454r 1 F2 0F .word 4082 +000456r 1 F3 0F .word 4083 +000458r 1 F4 0F .word 4084 +00045Ar 1 F5 0F .word 4085 +00045Cr 1 F6 0F .word 4086 +00045Er 1 F7 0F .word 4087 +000460r 1 F8 0F .word 4088 +000462r 1 F9 0F .word 4089 +000464r 1 FA 0F .word 4090 +000466r 1 FB 0F .word 4091 +000468r 1 FC 0F .word 4092 +00046Ar 1 FD 0F .word 4093 +00046Cr 1 FE 0F .word 4094 +00046Er 1 FF 0F .word 4095 +000470r 1 00 10 .word 4096 +000472r 1 01 10 .word 4097 +000474r 1 02 10 .word 4098 +000476r 1 03 10 .word 4099 +000478r 1 04 10 .word 4100 +00047Ar 1 05 10 .word 4101 +00047Cr 1 06 10 .word 4102 +00047Er 1 07 10 .word 4103 +000480r 1 08 10 .word 4104 +000482r 1 F0 7F .word 32752 +000484r 1 F1 7F .word 32753 +000486r 1 F2 7F .word 32754 +000488r 1 F3 7F .word 32755 +00048Ar 1 F4 7F .word 32756 +00048Cr 1 F5 7F .word 32757 +00048Er 1 F6 7F .word 32758 +000490r 1 F7 7F .word 32759 +000492r 1 F8 7F .word 32760 +000494r 1 F9 7F .word 32761 +000496r 1 FA 7F .word 32762 +000498r 1 FB 7F .word 32763 +00049Ar 1 FC 7F .word 32764 +00049Cr 1 FD 7F .word 32765 +00049Er 1 FE 7F .word 32766 +0004A0r 1 FF 7F .word 32767 +0004A2r 1 00 80 .word 32768 +0004A4r 1 01 80 .word 32769 +0004A6r 1 02 80 .word 32770 +0004A8r 1 03 80 .word 32771 +0004AAr 1 04 80 .word 32772 +0004ACr 1 05 80 .word 32773 +0004AEr 1 06 80 .word 32774 +0004B0r 1 07 80 .word 32775 +0004B2r 1 08 80 .word 32776 +0004B4r 1 09 80 .word 32777 +0004B6r 1 0A 80 .word 32778 +0004B8r 1 0B 80 .word 32779 +0004BAr 1 E1 9F .word 40929 +0004BCr 1 E2 9F .word 40930 +0004BEr 1 E3 9F .word 40931 +0004C0r 1 E4 9F .word 40932 +0004C2r 1 E5 9F .word 40933 +0004C4r 1 E6 9F .word 40934 +0004C6r 1 E7 9F .word 40935 +0004C8r 1 E8 9F .word 40936 +0004CAr 1 E9 9F .word 40937 +0004CCr 1 EA 9F .word 40938 +0004CEr 1 EB 9F .word 40939 +0004D0r 1 EC 9F .word 40940 +0004D2r 1 ED 9F .word 40941 +0004D4r 1 EE 9F .word 40942 +0004D6r 1 EF 9F .word 40943 +0004D8r 1 F0 9F .word 40944 +0004DAr 1 F1 9F .word 40945 +0004DCr 1 F2 9F .word 40946 +0004DEr 1 F3 9F .word 40947 +0004E0r 1 F4 9F .word 40948 +0004E2r 1 F5 9F .word 40949 +0004E4r 1 F6 9F .word 40950 +0004E6r 1 F7 9F .word 40951 +0004E8r 1 F8 9F .word 40952 +0004EAr 1 F9 9F .word 40953 +0004ECr 1 FA 9F .word 40954 +0004EEr 1 FB 9F .word 40955 +0004F0r 1 FC 9F .word 40956 +0004F2r 1 FD 9F .word 40957 +0004F4r 1 FE 9F .word 40958 +0004F6r 1 FF 9F .word 40959 +0004F8r 1 00 A0 .word 40960 +0004FAr 1 01 A0 .word 40961 +0004FCr 1 02 A0 .word 40962 +0004FEr 1 03 A0 .word 40963 +000500r 1 04 A0 .word 40964 +000502r 1 05 A0 .word 40965 +000504r 1 06 A0 .word 40966 +000506r 1 07 A0 .word 40967 +000508r 1 08 A0 .word 40968 +00050Ar 1 09 A0 .word 40969 +00050Cr 1 0A A0 .word 40970 +00050Er 1 0B A0 .word 40971 +000510r 1 0C A0 .word 40972 +000512r 1 0D A0 .word 40973 +000514r 1 0E A0 .word 40974 +000516r 1 0F A0 .word 40975 +000518r 1 E1 AF .word 45025 +00051Ar 1 E2 AF .word 45026 +00051Cr 1 E3 AF .word 45027 +00051Er 1 E4 AF .word 45028 +000520r 1 E5 AF .word 45029 +000522r 1 E6 AF .word 45030 +000524r 1 E7 AF .word 45031 +000526r 1 E8 AF .word 45032 +000528r 1 E9 AF .word 45033 +00052Ar 1 EA AF .word 45034 +00052Cr 1 EB AF .word 45035 +00052Er 1 EC AF .word 45036 +000530r 1 ED AF .word 45037 +000532r 1 EE AF .word 45038 +000534r 1 EF AF .word 45039 +000536r 1 F0 AF .word 45040 +000538r 1 F1 AF .word 45041 +00053Ar 1 F2 AF .word 45042 +00053Cr 1 F3 AF .word 45043 +00053Er 1 F4 AF .word 45044 +000540r 1 F5 AF .word 45045 +000542r 1 F6 AF .word 45046 +000544r 1 F7 AF .word 45047 +000546r 1 F8 AF .word 45048 +000548r 1 F9 AF .word 45049 +00054Ar 1 FA AF .word 45050 +00054Cr 1 FB AF .word 45051 +00054Er 1 FC AF .word 45052 +000550r 1 FD AF .word 45053 +000552r 1 FE AF .word 45054 +000554r 1 FF AF .word 45055 +000556r 1 00 B0 .word 45056 +000558r 1 01 B0 .word 45057 +00055Ar 1 02 B0 .word 45058 +00055Cr 1 03 B0 .word 45059 +00055Er 1 04 B0 .word 45060 +000560r 1 05 B0 .word 45061 +000562r 1 06 B0 .word 45062 +000564r 1 07 B0 .word 45063 +000566r 1 08 B0 .word 45064 +000568r 1 09 B0 .word 45065 +00056Ar 1 0A B0 .word 45066 +00056Cr 1 0B B0 .word 45067 +00056Er 1 0C B0 .word 45068 +000570r 1 0D B0 .word 45069 +000572r 1 0E B0 .word 45070 +000574r 1 0F B0 .word 45071 +000576r 1 E1 BF .word 49121 +000578r 1 E2 BF .word 49122 +00057Ar 1 E3 BF .word 49123 +00057Cr 1 E4 BF .word 49124 +00057Er 1 E5 BF .word 49125 +000580r 1 E6 BF .word 49126 +000582r 1 E7 BF .word 49127 +000584r 1 E8 BF .word 49128 +000586r 1 E9 BF .word 49129 +000588r 1 EA BF .word 49130 +00058Ar 1 EB BF .word 49131 +00058Cr 1 EC BF .word 49132 +00058Er 1 ED BF .word 49133 +000590r 1 EE BF .word 49134 +000592r 1 EF BF .word 49135 +000594r 1 F0 BF .word 49136 +000596r 1 F1 BF .word 49137 +000598r 1 F2 BF .word 49138 +00059Ar 1 F3 BF .word 49139 +00059Cr 1 F4 BF .word 49140 +00059Er 1 F5 BF .word 49141 +0005A0r 1 F6 BF .word 49142 +0005A2r 1 F7 BF .word 49143 +0005A4r 1 F8 BF .word 49144 +0005A6r 1 F9 BF .word 49145 +0005A8r 1 FA BF .word 49146 +0005AAr 1 FB BF .word 49147 +0005ACr 1 FC BF .word 49148 +0005AEr 1 FD BF .word 49149 +0005B0r 1 FE BF .word 49150 +0005B2r 1 FF BF .word 49151 +0005B4r 1 00 C0 .word 49152 +0005B6r 1 01 C0 .word 49153 +0005B8r 1 02 C0 .word 49154 +0005BAr 1 03 C0 .word 49155 +0005BCr 1 04 C0 .word 49156 +0005BEr 1 05 C0 .word 49157 +0005C0r 1 06 C0 .word 49158 +0005C2r 1 07 C0 .word 49159 +0005C4r 1 08 C0 .word 49160 +0005C6r 1 09 C0 .word 49161 +0005C8r 1 0A C0 .word 49162 +0005CAr 1 0B C0 .word 49163 +0005CCr 1 0C C0 .word 49164 +0005CEr 1 0D C0 .word 49165 +0005D0r 1 0E C0 .word 49166 +0005D2r 1 0F C0 .word 49167 +0005D4r 1 E1 CF .word 53217 +0005D6r 1 E2 CF .word 53218 +0005D8r 1 E3 CF .word 53219 +0005DAr 1 E4 CF .word 53220 +0005DCr 1 E5 CF .word 53221 +0005DEr 1 E6 CF .word 53222 +0005E0r 1 E7 CF .word 53223 +0005E2r 1 E8 CF .word 53224 +0005E4r 1 E9 CF .word 53225 +0005E6r 1 EA CF .word 53226 +0005E8r 1 EB CF .word 53227 +0005EAr 1 EC CF .word 53228 +0005ECr 1 ED CF .word 53229 +0005EEr 1 EE CF .word 53230 +0005F0r 1 EF CF .word 53231 +0005F2r 1 F0 CF .word 53232 +0005F4r 1 F1 CF .word 53233 +0005F6r 1 F2 CF .word 53234 +0005F8r 1 F3 CF .word 53235 +0005FAr 1 F4 CF .word 53236 +0005FCr 1 F5 CF .word 53237 +0005FEr 1 F6 CF .word 53238 +000600r 1 F7 CF .word 53239 +000602r 1 F8 CF .word 53240 +000604r 1 F9 CF .word 53241 +000606r 1 FA CF .word 53242 +000608r 1 FB CF .word 53243 +00060Ar 1 FC CF .word 53244 +00060Cr 1 FD CF .word 53245 +00060Er 1 FE CF .word 53246 +000610r 1 FF CF .word 53247 +000612r 1 00 D0 .word 53248 +000614r 1 01 D0 .word 53249 +000616r 1 02 D0 .word 53250 +000618r 1 03 D0 .word 53251 +00061Ar 1 04 D0 .word 53252 +00061Cr 1 05 D0 .word 53253 +00061Er 1 06 D0 .word 53254 +000620r 1 07 D0 .word 53255 +000622r 1 08 D0 .word 53256 +000624r 1 09 D0 .word 53257 +000626r 1 0A D0 .word 53258 +000628r 1 0B D0 .word 53259 +00062Ar 1 0C D0 .word 53260 +00062Cr 1 0D D0 .word 53261 +00062Er 1 0E D0 .word 53262 +000630r 1 0F D0 .word 53263 +000632r 1 E1 DF .word 57313 +000634r 1 E2 DF .word 57314 +000636r 1 E3 DF .word 57315 +000638r 1 E4 DF .word 57316 +00063Ar 1 E5 DF .word 57317 +00063Cr 1 E6 DF .word 57318 +00063Er 1 E7 DF .word 57319 +000640r 1 E8 DF .word 57320 +000642r 1 E9 DF .word 57321 +000644r 1 EA DF .word 57322 +000646r 1 EB DF .word 57323 +000648r 1 EC DF .word 57324 +00064Ar 1 ED DF .word 57325 +00064Cr 1 EE DF .word 57326 +00064Er 1 EF DF .word 57327 +000650r 1 F0 DF .word 57328 +000652r 1 F1 DF .word 57329 +000654r 1 F2 DF .word 57330 +000656r 1 F3 DF .word 57331 +000658r 1 F4 DF .word 57332 +00065Ar 1 F5 DF .word 57333 +00065Cr 1 F6 DF .word 57334 +00065Er 1 F7 DF .word 57335 +000660r 1 F8 DF .word 57336 +000662r 1 F9 DF .word 57337 +000664r 1 FA DF .word 57338 +000666r 1 FB DF .word 57339 +000668r 1 FC DF .word 57340 +00066Ar 1 FD DF .word 57341 +00066Cr 1 FE DF .word 57342 +00066Er 1 FF DF .word 57343 +000670r 1 00 E0 .word 57344 +000672r 1 01 E0 .word 57345 +000674r 1 02 E0 .word 57346 +000676r 1 03 E0 .word 57347 +000678r 1 04 E0 .word 57348 +00067Ar 1 05 E0 .word 57349 +00067Cr 1 06 E0 .word 57350 +00067Er 1 07 E0 .word 57351 +000680r 1 08 E0 .word 57352 +000682r 1 09 E0 .word 57353 +000684r 1 0A E0 .word 57354 +000686r 1 0B E0 .word 57355 +000688r 1 0C E0 .word 57356 +00068Ar 1 0D E0 .word 57357 +00068Cr 1 0E E0 .word 57358 +00068Er 1 0F E0 .word 57359 +000690r 1 E1 EF .word 61409 +000692r 1 E2 EF .word 61410 +000694r 1 E3 EF .word 61411 +000696r 1 E4 EF .word 61412 +000698r 1 E5 EF .word 61413 +00069Ar 1 E6 EF .word 61414 +00069Cr 1 E7 EF .word 61415 +00069Er 1 E8 EF .word 61416 +0006A0r 1 E9 EF .word 61417 +0006A2r 1 EA EF .word 61418 +0006A4r 1 EB EF .word 61419 +0006A6r 1 EC EF .word 61420 +0006A8r 1 ED EF .word 61421 +0006AAr 1 EE EF .word 61422 +0006ACr 1 EF EF .word 61423 +0006AEr 1 F0 EF .word 61424 +0006B0r 1 F1 EF .word 61425 +0006B2r 1 F2 EF .word 61426 +0006B4r 1 F3 EF .word 61427 +0006B6r 1 F4 EF .word 61428 +0006B8r 1 F5 EF .word 61429 +0006BAr 1 F6 EF .word 61430 +0006BCr 1 F7 EF .word 61431 +0006BEr 1 F8 EF .word 61432 +0006C0r 1 F9 EF .word 61433 +0006C2r 1 FA EF .word 61434 +0006C4r 1 FB EF .word 61435 +0006C6r 1 FC EF .word 61436 +0006C8r 1 FD EF .word 61437 +0006CAr 1 FE EF .word 61438 +0006CCr 1 FF EF .word 61439 +0006CEr 1 00 F0 .word 61440 +0006D0r 1 01 F0 .word 61441 +0006D2r 1 02 F0 .word 61442 +0006D4r 1 03 F0 .word 61443 +0006D6r 1 04 F0 .word 61444 +0006D8r 1 05 F0 .word 61445 +0006DAr 1 06 F0 .word 61446 +0006DCr 1 07 F0 .word 61447 +0006DEr 1 08 F0 .word 61448 +0006E0r 1 09 F0 .word 61449 +0006E2r 1 0A F0 .word 61450 +0006E4r 1 0B F0 .word 61451 +0006E6r 1 0C F0 .word 61452 +0006E8r 1 0D F0 .word 61453 +0006EAr 1 0E F0 .word 61454 +0006ECr 1 0F F0 .word 61455 +0006EEr 1 E1 FF .word 65505 +0006F0r 1 E2 FF .word 65506 +0006F2r 1 E3 FF .word 65507 +0006F4r 1 E4 FF .word 65508 +0006F6r 1 E5 FF .word 65509 +0006F8r 1 E6 FF .word 65510 +0006FAr 1 E7 FF .word 65511 +0006FCr 1 E8 FF .word 65512 +0006FEr 1 E9 FF .word 65513 +000700r 1 EA FF .word 65514 +000702r 1 EB FF .word 65515 +000704r 1 EC FF .word 65516 +000706r 1 ED FF .word 65517 +000708r 1 EE FF .word 65518 +00070Ar 1 EF FF .word 65519 +00070Cr 1 F0 FF .word 65520 +00070Er 1 F1 FF .word 65521 +000710r 1 F2 FF .word 65522 +000712r 1 F3 FF .word 65523 +000714r 1 F4 FF .word 65524 +000716r 1 F5 FF .word 65525 +000718r 1 F6 FF .word 65526 +00071Ar 1 F7 FF .word 65527 +00071Cr 1 F8 FF .word 65528 +00071Er 1 F9 FF .word 65529 +000720r 1 FA FF .word 65530 +000722r 1 FB FF .word 65531 +000724r 1 FC FF .word 65532 +000726r 1 FD FF .word 65533 +000728r 1 FE FF .word 65534 +00072Ar 1 FF FF .word 65535 +00072Cr 1 +00072Cr 1 ; hex values +00072Cr 1 00 00 .word $0 +00072Er 1 01 00 .word $1 +000730r 1 02 00 .word $2 +000732r 1 03 00 .word $3 +000734r 1 04 00 .word $4 +000736r 1 05 00 .word $5 +000738r 1 06 00 .word $6 +00073Ar 1 07 00 .word $7 +00073Cr 1 08 00 .word $8 +00073Er 1 09 00 .word $9 +000740r 1 0A 00 .word $a +000742r 1 0B 00 .word $b +000744r 1 0C 00 .word $c +000746r 1 0D 00 .word $d +000748r 1 0E 00 .word $e +00074Ar 1 0F 00 .word $f +00074Cr 1 10 00 .word $10 +00074Er 1 11 00 .word $11 +000750r 1 12 00 .word $12 +000752r 1 13 00 .word $13 +000754r 1 70 00 .word $70 +000756r 1 71 00 .word $71 +000758r 1 72 00 .word $72 +00075Ar 1 73 00 .word $73 +00075Cr 1 74 00 .word $74 +00075Er 1 75 00 .word $75 +000760r 1 76 00 .word $76 +000762r 1 77 00 .word $77 +000764r 1 78 00 .word $78 +000766r 1 79 00 .word $79 +000768r 1 7A 00 .word $7a +00076Ar 1 7B 00 .word $7b +00076Cr 1 7C 00 .word $7c +00076Er 1 7D 00 .word $7d +000770r 1 7E 00 .word $7e +000772r 1 7F 00 .word $7f +000774r 1 80 00 .word $80 +000776r 1 81 00 .word $81 +000778r 1 82 00 .word $82 +00077Ar 1 83 00 .word $83 +00077Cr 1 84 00 .word $84 +00077Er 1 85 00 .word $85 +000780r 1 86 00 .word $86 +000782r 1 F0 00 .word $f0 +000784r 1 F1 00 .word $f1 +000786r 1 F2 00 .word $f2 +000788r 1 F3 00 .word $f3 +00078Ar 1 F4 00 .word $f4 +00078Cr 1 F5 00 .word $f5 +00078Er 1 F6 00 .word $f6 +000790r 1 F7 00 .word $f7 +000792r 1 F8 00 .word $f8 +000794r 1 F9 00 .word $f9 +000796r 1 FA 00 .word $fa +000798r 1 FB 00 .word $fb +00079Ar 1 FC 00 .word $fc +00079Cr 1 FD 00 .word $fd +00079Er 1 FE 00 .word $fe +0007A0r 1 FF 00 .word $ff +0007A2r 1 00 01 .word $100 +0007A4r 1 01 01 .word $101 +0007A6r 1 02 01 .word $102 +0007A8r 1 03 01 .word $103 +0007AAr 1 D2 0F .word $fd2 +0007ACr 1 D3 0F .word $fd3 +0007AEr 1 D4 0F .word $fd4 +0007B0r 1 D5 0F .word $fd5 +0007B2r 1 D6 0F .word $fd6 +0007B4r 1 D7 0F .word $fd7 +0007B6r 1 D8 0F .word $fd8 +0007B8r 1 D9 0F .word $fd9 +0007BAr 1 DA 0F .word $fda +0007BCr 1 DB 0F .word $fdb +0007BEr 1 DC 0F .word $fdc +0007C0r 1 DD 0F .word $fdd +0007C2r 1 DE 0F .word $fde +0007C4r 1 DF 0F .word $fdf +0007C6r 1 E0 0F .word $fe0 +0007C8r 1 E1 0F .word $fe1 +0007CAr 1 E2 0F .word $fe2 +0007CCr 1 E3 0F .word $fe3 +0007CEr 1 E4 0F .word $fe4 +0007D0r 1 E5 0F .word $fe5 +0007D2r 1 E6 0F .word $fe6 +0007D4r 1 E7 0F .word $fe7 +0007D6r 1 E8 0F .word $fe8 +0007D8r 1 E9 0F .word $fe9 +0007DAr 1 EA 0F .word $fea +0007DCr 1 EB 0F .word $feb +0007DEr 1 EC 0F .word $fec +0007E0r 1 ED 0F .word $fed +0007E2r 1 EE 0F .word $fee +0007E4r 1 EF 0F .word $fef +0007E6r 1 F0 0F .word $ff0 +0007E8r 1 F1 0F .word $ff1 +0007EAr 1 F2 0F .word $ff2 +0007ECr 1 F3 0F .word $ff3 +0007EEr 1 F4 0F .word $ff4 +0007F0r 1 F5 0F .word $ff5 +0007F2r 1 F6 0F .word $ff6 +0007F4r 1 F7 0F .word $ff7 +0007F6r 1 F8 0F .word $ff8 +0007F8r 1 F9 0F .word $ff9 +0007FAr 1 FA 0F .word $ffa +0007FCr 1 FB 0F .word $ffb +0007FEr 1 FC 0F .word $ffc +000800r 1 FD 0F .word $ffd +000802r 1 FE 0F .word $ffe +000804r 1 FF 0F .word $fff +000806r 1 00 10 .word $1000 +000808r 1 01 10 .word $1001 +00080Ar 1 02 10 .word $1002 +00080Cr 1 03 10 .word $1003 +00080Er 1 04 10 .word $1004 +000810r 1 05 10 .word $1005 +000812r 1 06 10 .word $1006 +000814r 1 07 10 .word $1007 +000816r 1 08 10 .word $1008 +000818r 1 F0 7F .word $7ff0 +00081Ar 1 F1 7F .word $7ff1 +00081Cr 1 F2 7F .word $7ff2 +00081Er 1 F3 7F .word $7ff3 +000820r 1 F4 7F .word $7ff4 +000822r 1 F5 7F .word $7ff5 +000824r 1 F6 7F .word $7ff6 +000826r 1 F7 7F .word $7ff7 +000828r 1 F8 7F .word $7ff8 +00082Ar 1 F9 7F .word $7ff9 +00082Cr 1 FA 7F .word $7ffa +00082Er 1 FB 7F .word $7ffb +000830r 1 FC 7F .word $7ffc +000832r 1 FD 7F .word $7ffd +000834r 1 FE 7F .word $7ffe +000836r 1 FF 7F .word $7fff +000838r 1 00 80 .word $8000 +00083Ar 1 01 80 .word $8001 +00083Cr 1 02 80 .word $8002 +00083Er 1 03 80 .word $8003 +000840r 1 04 80 .word $8004 +000842r 1 05 80 .word $8005 +000844r 1 06 80 .word $8006 +000846r 1 07 80 .word $8007 +000848r 1 08 80 .word $8008 +00084Ar 1 09 80 .word $8009 +00084Cr 1 0A 80 .word $800a +00084Er 1 0B 80 .word $800b +000850r 1 E1 9F .word $9fe1 +000852r 1 E2 9F .word $9fe2 +000854r 1 E3 9F .word $9fe3 +000856r 1 E4 9F .word $9fe4 +000858r 1 E5 9F .word $9fe5 +00085Ar 1 E6 9F .word $9fe6 +00085Cr 1 E7 9F .word $9fe7 +00085Er 1 E8 9F .word $9fe8 +000860r 1 E9 9F .word $9fe9 +000862r 1 EA 9F .word $9fea +000864r 1 EB 9F .word $9feb +000866r 1 EC 9F .word $9fec +000868r 1 ED 9F .word $9fed +00086Ar 1 EE 9F .word $9fee +00086Cr 1 EF 9F .word $9fef +00086Er 1 F0 9F .word $9ff0 +000870r 1 F1 9F .word $9ff1 +000872r 1 F2 9F .word $9ff2 +000874r 1 F3 9F .word $9ff3 +000876r 1 F4 9F .word $9ff4 +000878r 1 F5 9F .word $9ff5 +00087Ar 1 F6 9F .word $9ff6 +00087Cr 1 F7 9F .word $9ff7 +00087Er 1 F8 9F .word $9ff8 +000880r 1 F9 9F .word $9ff9 +000882r 1 FA 9F .word $9ffa +000884r 1 FB 9F .word $9ffb +000886r 1 FC 9F .word $9ffc +000888r 1 FD 9F .word $9ffd +00088Ar 1 FE 9F .word $9ffe +00088Cr 1 FF 9F .word $9fff +00088Er 1 00 A0 .word $a000 +000890r 1 01 A0 .word $a001 +000892r 1 02 A0 .word $a002 +000894r 1 03 A0 .word $a003 +000896r 1 04 A0 .word $a004 +000898r 1 05 A0 .word $a005 +00089Ar 1 06 A0 .word $a006 +00089Cr 1 07 A0 .word $a007 +00089Er 1 08 A0 .word $a008 +0008A0r 1 09 A0 .word $a009 +0008A2r 1 0A A0 .word $a00a +0008A4r 1 0B A0 .word $a00b +0008A6r 1 0C A0 .word $a00c +0008A8r 1 0D A0 .word $a00d +0008AAr 1 0E A0 .word $a00e +0008ACr 1 0F A0 .word $a00f +0008AEr 1 E1 AF .word $afe1 +0008B0r 1 E2 AF .word $afe2 +0008B2r 1 E3 AF .word $afe3 +0008B4r 1 E4 AF .word $afe4 +0008B6r 1 E5 AF .word $afe5 +0008B8r 1 E6 AF .word $afe6 +0008BAr 1 E7 AF .word $afe7 +0008BCr 1 E8 AF .word $afe8 +0008BEr 1 E9 AF .word $afe9 +0008C0r 1 EA AF .word $afea +0008C2r 1 EB AF .word $afeb +0008C4r 1 EC AF .word $afec +0008C6r 1 ED AF .word $afed +0008C8r 1 EE AF .word $afee +0008CAr 1 EF AF .word $afef +0008CCr 1 F0 AF .word $aff0 +0008CEr 1 F1 AF .word $aff1 +0008D0r 1 F2 AF .word $aff2 +0008D2r 1 F3 AF .word $aff3 +0008D4r 1 F4 AF .word $aff4 +0008D6r 1 F5 AF .word $aff5 +0008D8r 1 F6 AF .word $aff6 +0008DAr 1 F7 AF .word $aff7 +0008DCr 1 F8 AF .word $aff8 +0008DEr 1 F9 AF .word $aff9 +0008E0r 1 FA AF .word $affa +0008E2r 1 FB AF .word $affb +0008E4r 1 FC AF .word $affc +0008E6r 1 FD AF .word $affd +0008E8r 1 FE AF .word $affe +0008EAr 1 FF AF .word $afff +0008ECr 1 00 B0 .word $b000 +0008EEr 1 01 B0 .word $b001 +0008F0r 1 02 B0 .word $b002 +0008F2r 1 03 B0 .word $b003 +0008F4r 1 04 B0 .word $b004 +0008F6r 1 05 B0 .word $b005 +0008F8r 1 06 B0 .word $b006 +0008FAr 1 07 B0 .word $b007 +0008FCr 1 08 B0 .word $b008 +0008FEr 1 09 B0 .word $b009 +000900r 1 0A B0 .word $b00a +000902r 1 0B B0 .word $b00b +000904r 1 0C B0 .word $b00c +000906r 1 0D B0 .word $b00d +000908r 1 0E B0 .word $b00e +00090Ar 1 0F B0 .word $b00f +00090Cr 1 E1 BF .word $bfe1 +00090Er 1 E2 BF .word $bfe2 +000910r 1 E3 BF .word $bfe3 +000912r 1 E4 BF .word $bfe4 +000914r 1 E5 BF .word $bfe5 +000916r 1 E6 BF .word $bfe6 +000918r 1 E7 BF .word $bfe7 +00091Ar 1 E8 BF .word $bfe8 +00091Cr 1 E9 BF .word $bfe9 +00091Er 1 EA BF .word $bfea +000920r 1 EB BF .word $bfeb +000922r 1 EC BF .word $bfec +000924r 1 ED BF .word $bfed +000926r 1 EE BF .word $bfee +000928r 1 EF BF .word $bfef +00092Ar 1 F0 BF .word $bff0 +00092Cr 1 F1 BF .word $bff1 +00092Er 1 F2 BF .word $bff2 +000930r 1 F3 BF .word $bff3 +000932r 1 F4 BF .word $bff4 +000934r 1 F5 BF .word $bff5 +000936r 1 F6 BF .word $bff6 +000938r 1 F7 BF .word $bff7 +00093Ar 1 F8 BF .word $bff8 +00093Cr 1 F9 BF .word $bff9 +00093Er 1 FA BF .word $bffa +000940r 1 FB BF .word $bffb +000942r 1 FC BF .word $bffc +000944r 1 FD BF .word $bffd +000946r 1 FE BF .word $bffe +000948r 1 FF BF .word $bfff +00094Ar 1 00 C0 .word $c000 +00094Cr 1 01 C0 .word $c001 +00094Er 1 02 C0 .word $c002 +000950r 1 03 C0 .word $c003 +000952r 1 04 C0 .word $c004 +000954r 1 05 C0 .word $c005 +000956r 1 06 C0 .word $c006 +000958r 1 07 C0 .word $c007 +00095Ar 1 08 C0 .word $c008 +00095Cr 1 09 C0 .word $c009 +00095Er 1 0A C0 .word $c00a +000960r 1 0B C0 .word $c00b +000962r 1 0C C0 .word $c00c +000964r 1 0D C0 .word $c00d +000966r 1 0E C0 .word $c00e +000968r 1 0F C0 .word $c00f +00096Ar 1 E1 CF .word $cfe1 +00096Cr 1 E2 CF .word $cfe2 +00096Er 1 E3 CF .word $cfe3 +000970r 1 E4 CF .word $cfe4 +000972r 1 E5 CF .word $cfe5 +000974r 1 E6 CF .word $cfe6 +000976r 1 E7 CF .word $cfe7 +000978r 1 E8 CF .word $cfe8 +00097Ar 1 E9 CF .word $cfe9 +00097Cr 1 EA CF .word $cfea +00097Er 1 EB CF .word $cfeb +000980r 1 EC CF .word $cfec +000982r 1 ED CF .word $cfed +000984r 1 EE CF .word $cfee +000986r 1 EF CF .word $cfef +000988r 1 F0 CF .word $cff0 +00098Ar 1 F1 CF .word $cff1 +00098Cr 1 F2 CF .word $cff2 +00098Er 1 F3 CF .word $cff3 +000990r 1 F4 CF .word $cff4 +000992r 1 F5 CF .word $cff5 +000994r 1 F6 CF .word $cff6 +000996r 1 F7 CF .word $cff7 +000998r 1 F8 CF .word $cff8 +00099Ar 1 F9 CF .word $cff9 +00099Cr 1 FA CF .word $cffa +00099Er 1 FB CF .word $cffb +0009A0r 1 FC CF .word $cffc +0009A2r 1 FD CF .word $cffd +0009A4r 1 FE CF .word $cffe +0009A6r 1 FF CF .word $cfff +0009A8r 1 00 D0 .word $d000 +0009AAr 1 01 D0 .word $d001 +0009ACr 1 02 D0 .word $d002 +0009AEr 1 03 D0 .word $d003 +0009B0r 1 04 D0 .word $d004 +0009B2r 1 05 D0 .word $d005 +0009B4r 1 06 D0 .word $d006 +0009B6r 1 07 D0 .word $d007 +0009B8r 1 08 D0 .word $d008 +0009BAr 1 09 D0 .word $d009 +0009BCr 1 0A D0 .word $d00a +0009BEr 1 0B D0 .word $d00b +0009C0r 1 0C D0 .word $d00c +0009C2r 1 0D D0 .word $d00d +0009C4r 1 0E D0 .word $d00e +0009C6r 1 0F D0 .word $d00f +0009C8r 1 E1 DF .word $dfe1 +0009CAr 1 E2 DF .word $dfe2 +0009CCr 1 E3 DF .word $dfe3 +0009CEr 1 E4 DF .word $dfe4 +0009D0r 1 E5 DF .word $dfe5 +0009D2r 1 E6 DF .word $dfe6 +0009D4r 1 E7 DF .word $dfe7 +0009D6r 1 E8 DF .word $dfe8 +0009D8r 1 E9 DF .word $dfe9 +0009DAr 1 EA DF .word $dfea +0009DCr 1 EB DF .word $dfeb +0009DEr 1 EC DF .word $dfec +0009E0r 1 ED DF .word $dfed +0009E2r 1 EE DF .word $dfee +0009E4r 1 EF DF .word $dfef +0009E6r 1 F0 DF .word $dff0 +0009E8r 1 F1 DF .word $dff1 +0009EAr 1 F2 DF .word $dff2 +0009ECr 1 F3 DF .word $dff3 +0009EEr 1 F4 DF .word $dff4 +0009F0r 1 F5 DF .word $dff5 +0009F2r 1 F6 DF .word $dff6 +0009F4r 1 F7 DF .word $dff7 +0009F6r 1 F8 DF .word $dff8 +0009F8r 1 F9 DF .word $dff9 +0009FAr 1 FA DF .word $dffa +0009FCr 1 FB DF .word $dffb +0009FEr 1 FC DF .word $dffc +000A00r 1 FD DF .word $dffd +000A02r 1 FE DF .word $dffe +000A04r 1 FF DF .word $dfff +000A06r 1 00 E0 .word $e000 +000A08r 1 01 E0 .word $e001 +000A0Ar 1 02 E0 .word $e002 +000A0Cr 1 03 E0 .word $e003 +000A0Er 1 04 E0 .word $e004 +000A10r 1 05 E0 .word $e005 +000A12r 1 06 E0 .word $e006 +000A14r 1 07 E0 .word $e007 +000A16r 1 08 E0 .word $e008 +000A18r 1 09 E0 .word $e009 +000A1Ar 1 0A E0 .word $e00a +000A1Cr 1 0B E0 .word $e00b +000A1Er 1 0C E0 .word $e00c +000A20r 1 0D E0 .word $e00d +000A22r 1 0E E0 .word $e00e +000A24r 1 0F E0 .word $e00f +000A26r 1 E1 EF .word $efe1 +000A28r 1 E2 EF .word $efe2 +000A2Ar 1 E3 EF .word $efe3 +000A2Cr 1 E4 EF .word $efe4 +000A2Er 1 E5 EF .word $efe5 +000A30r 1 E6 EF .word $efe6 +000A32r 1 E7 EF .word $efe7 +000A34r 1 E8 EF .word $efe8 +000A36r 1 E9 EF .word $efe9 +000A38r 1 EA EF .word $efea +000A3Ar 1 EB EF .word $efeb +000A3Cr 1 EC EF .word $efec +000A3Er 1 ED EF .word $efed +000A40r 1 EE EF .word $efee +000A42r 1 EF EF .word $efef +000A44r 1 F0 EF .word $eff0 +000A46r 1 F1 EF .word $eff1 +000A48r 1 F2 EF .word $eff2 +000A4Ar 1 F3 EF .word $eff3 +000A4Cr 1 F4 EF .word $eff4 +000A4Er 1 F5 EF .word $eff5 +000A50r 1 F6 EF .word $eff6 +000A52r 1 F7 EF .word $eff7 +000A54r 1 F8 EF .word $eff8 +000A56r 1 F9 EF .word $eff9 +000A58r 1 FA EF .word $effa +000A5Ar 1 FB EF .word $effb +000A5Cr 1 FC EF .word $effc +000A5Er 1 FD EF .word $effd +000A60r 1 FE EF .word $effe +000A62r 1 FF EF .word $efff +000A64r 1 00 F0 .word $f000 +000A66r 1 01 F0 .word $f001 +000A68r 1 02 F0 .word $f002 +000A6Ar 1 03 F0 .word $f003 +000A6Cr 1 04 F0 .word $f004 +000A6Er 1 05 F0 .word $f005 +000A70r 1 06 F0 .word $f006 +000A72r 1 07 F0 .word $f007 +000A74r 1 08 F0 .word $f008 +000A76r 1 09 F0 .word $f009 +000A78r 1 0A F0 .word $f00a +000A7Ar 1 0B F0 .word $f00b +000A7Cr 1 0C F0 .word $f00c +000A7Er 1 0D F0 .word $f00d +000A80r 1 0E F0 .word $f00e +000A82r 1 0F F0 .word $f00f +000A84r 1 E1 FF .word $ffe1 +000A86r 1 E2 FF .word $ffe2 +000A88r 1 E3 FF .word $ffe3 +000A8Ar 1 E4 FF .word $ffe4 +000A8Cr 1 E5 FF .word $ffe5 +000A8Er 1 E6 FF .word $ffe6 +000A90r 1 E7 FF .word $ffe7 +000A92r 1 E8 FF .word $ffe8 +000A94r 1 E9 FF .word $ffe9 +000A96r 1 EA FF .word $ffea +000A98r 1 EB FF .word $ffeb +000A9Ar 1 EC FF .word $ffec +000A9Cr 1 ED FF .word $ffed +000A9Er 1 EE FF .word $ffee +000AA0r 1 EF FF .word $ffef +000AA2r 1 F0 FF .word $fff0 +000AA4r 1 F1 FF .word $fff1 +000AA6r 1 F2 FF .word $fff2 +000AA8r 1 F3 FF .word $fff3 +000AAAr 1 F4 FF .word $fff4 +000AACr 1 F5 FF .word $fff5 +000AAEr 1 F6 FF .word $fff6 +000AB0r 1 F7 FF .word $fff7 +000AB2r 1 F8 FF .word $fff8 +000AB4r 1 F9 FF .word $fff9 +000AB6r 1 FA FF .word $fffa +000AB8r 1 FB FF .word $fffb +000ABAr 1 FC FF .word $fffc +000ABCr 1 FD FF .word $fffd +000ABEr 1 FE FF .word $fffe +000AC0r 1 FF FF .word $ffff +000AC2r 1 +000AC2r 1 ; hex values, uppercase +000AC2r 1 00 00 .word $0 +000AC4r 1 01 00 .word $1 +000AC6r 1 02 00 .word $2 +000AC8r 1 03 00 .word $3 +000ACAr 1 04 00 .word $4 +000ACCr 1 05 00 .word $5 +000ACEr 1 06 00 .word $6 +000AD0r 1 07 00 .word $7 +000AD2r 1 08 00 .word $8 +000AD4r 1 09 00 .word $9 +000AD6r 1 0A 00 .word $A +000AD8r 1 0B 00 .word $B +000ADAr 1 0C 00 .word $C +000ADCr 1 0D 00 .word $D +000ADEr 1 0E 00 .word $E +000AE0r 1 0F 00 .word $F +000AE2r 1 10 00 .word $10 +000AE4r 1 11 00 .word $11 +000AE6r 1 12 00 .word $12 +000AE8r 1 13 00 .word $13 +000AEAr 1 70 00 .word $70 +000AECr 1 71 00 .word $71 +000AEEr 1 72 00 .word $72 +000AF0r 1 73 00 .word $73 +000AF2r 1 74 00 .word $74 +000AF4r 1 75 00 .word $75 +000AF6r 1 76 00 .word $76 +000AF8r 1 77 00 .word $77 +000AFAr 1 78 00 .word $78 +000AFCr 1 79 00 .word $79 +000AFEr 1 7A 00 .word $7A +000B00r 1 7B 00 .word $7B +000B02r 1 7C 00 .word $7C +000B04r 1 7D 00 .word $7D +000B06r 1 7E 00 .word $7E +000B08r 1 7F 00 .word $7F +000B0Ar 1 80 00 .word $80 +000B0Cr 1 81 00 .word $81 +000B0Er 1 82 00 .word $82 +000B10r 1 83 00 .word $83 +000B12r 1 84 00 .word $84 +000B14r 1 85 00 .word $85 +000B16r 1 86 00 .word $86 +000B18r 1 F0 00 .word $F0 +000B1Ar 1 F1 00 .word $F1 +000B1Cr 1 F2 00 .word $F2 +000B1Er 1 F3 00 .word $F3 +000B20r 1 F4 00 .word $F4 +000B22r 1 F5 00 .word $F5 +000B24r 1 F6 00 .word $F6 +000B26r 1 F7 00 .word $F7 +000B28r 1 F8 00 .word $F8 +000B2Ar 1 F9 00 .word $F9 +000B2Cr 1 FA 00 .word $FA +000B2Er 1 FB 00 .word $FB +000B30r 1 FC 00 .word $FC +000B32r 1 FD 00 .word $FD +000B34r 1 FE 00 .word $FE +000B36r 1 FF 00 .word $FF +000B38r 1 00 01 .word $100 +000B3Ar 1 01 01 .word $101 +000B3Cr 1 02 01 .word $102 +000B3Er 1 03 01 .word $103 +000B40r 1 D2 0F .word $FD2 +000B42r 1 D3 0F .word $FD3 +000B44r 1 D4 0F .word $FD4 +000B46r 1 D5 0F .word $FD5 +000B48r 1 D6 0F .word $FD6 +000B4Ar 1 D7 0F .word $FD7 +000B4Cr 1 D8 0F .word $FD8 +000B4Er 1 D9 0F .word $FD9 +000B50r 1 DA 0F .word $FDA +000B52r 1 DB 0F .word $FDB +000B54r 1 DC 0F .word $FDC +000B56r 1 DD 0F .word $FDD +000B58r 1 DE 0F .word $FDE +000B5Ar 1 DF 0F .word $FDF +000B5Cr 1 E0 0F .word $FE0 +000B5Er 1 E1 0F .word $FE1 +000B60r 1 E2 0F .word $FE2 +000B62r 1 E3 0F .word $FE3 +000B64r 1 E4 0F .word $FE4 +000B66r 1 E5 0F .word $FE5 +000B68r 1 E6 0F .word $FE6 +000B6Ar 1 E7 0F .word $FE7 +000B6Cr 1 E8 0F .word $FE8 +000B6Er 1 E9 0F .word $FE9 +000B70r 1 EA 0F .word $FEA +000B72r 1 EB 0F .word $FEB +000B74r 1 EC 0F .word $FEC +000B76r 1 ED 0F .word $FED +000B78r 1 EE 0F .word $FEE +000B7Ar 1 EF 0F .word $FEF +000B7Cr 1 F0 0F .word $FF0 +000B7Er 1 F1 0F .word $FF1 +000B80r 1 F2 0F .word $FF2 +000B82r 1 F3 0F .word $FF3 +000B84r 1 F4 0F .word $FF4 +000B86r 1 F5 0F .word $FF5 +000B88r 1 F6 0F .word $FF6 +000B8Ar 1 F7 0F .word $FF7 +000B8Cr 1 F8 0F .word $FF8 +000B8Er 1 F9 0F .word $FF9 +000B90r 1 FA 0F .word $FFA +000B92r 1 FB 0F .word $FFB +000B94r 1 FC 0F .word $FFC +000B96r 1 FD 0F .word $FFD +000B98r 1 FE 0F .word $FFE +000B9Ar 1 FF 0F .word $FFF +000B9Cr 1 00 10 .word $1000 +000B9Er 1 01 10 .word $1001 +000BA0r 1 02 10 .word $1002 +000BA2r 1 03 10 .word $1003 +000BA4r 1 04 10 .word $1004 +000BA6r 1 05 10 .word $1005 +000BA8r 1 06 10 .word $1006 +000BAAr 1 07 10 .word $1007 +000BACr 1 08 10 .word $1008 +000BAEr 1 F0 7F .word $7FF0 +000BB0r 1 F1 7F .word $7FF1 +000BB2r 1 F2 7F .word $7FF2 +000BB4r 1 F3 7F .word $7FF3 +000BB6r 1 F4 7F .word $7FF4 +000BB8r 1 F5 7F .word $7FF5 +000BBAr 1 F6 7F .word $7FF6 +000BBCr 1 F7 7F .word $7FF7 +000BBEr 1 F8 7F .word $7FF8 +000BC0r 1 F9 7F .word $7FF9 +000BC2r 1 FA 7F .word $7FFA +000BC4r 1 FB 7F .word $7FFB +000BC6r 1 FC 7F .word $7FFC +000BC8r 1 FD 7F .word $7FFD +000BCAr 1 FE 7F .word $7FFE +000BCCr 1 FF 7F .word $7FFF +000BCEr 1 00 80 .word $8000 +000BD0r 1 01 80 .word $8001 +000BD2r 1 02 80 .word $8002 +000BD4r 1 03 80 .word $8003 +000BD6r 1 04 80 .word $8004 +000BD8r 1 05 80 .word $8005 +000BDAr 1 06 80 .word $8006 +000BDCr 1 07 80 .word $8007 +000BDEr 1 08 80 .word $8008 +000BE0r 1 09 80 .word $8009 +000BE2r 1 0A 80 .word $800A +000BE4r 1 0B 80 .word $800B +000BE6r 1 E1 9F .word $9FE1 +000BE8r 1 E2 9F .word $9FE2 +000BEAr 1 E3 9F .word $9FE3 +000BECr 1 E4 9F .word $9FE4 +000BEEr 1 E5 9F .word $9FE5 +000BF0r 1 E6 9F .word $9FE6 +000BF2r 1 E7 9F .word $9FE7 +000BF4r 1 E8 9F .word $9FE8 +000BF6r 1 E9 9F .word $9FE9 +000BF8r 1 EA 9F .word $9FEA +000BFAr 1 EB 9F .word $9FEB +000BFCr 1 EC 9F .word $9FEC +000BFEr 1 ED 9F .word $9FED +000C00r 1 EE 9F .word $9FEE +000C02r 1 EF 9F .word $9FEF +000C04r 1 F0 9F .word $9FF0 +000C06r 1 F1 9F .word $9FF1 +000C08r 1 F2 9F .word $9FF2 +000C0Ar 1 F3 9F .word $9FF3 +000C0Cr 1 F4 9F .word $9FF4 +000C0Er 1 F5 9F .word $9FF5 +000C10r 1 F6 9F .word $9FF6 +000C12r 1 F7 9F .word $9FF7 +000C14r 1 F8 9F .word $9FF8 +000C16r 1 F9 9F .word $9FF9 +000C18r 1 FA 9F .word $9FFA +000C1Ar 1 FB 9F .word $9FFB +000C1Cr 1 FC 9F .word $9FFC +000C1Er 1 FD 9F .word $9FFD +000C20r 1 FE 9F .word $9FFE +000C22r 1 FF 9F .word $9FFF +000C24r 1 00 A0 .word $A000 +000C26r 1 01 A0 .word $A001 +000C28r 1 02 A0 .word $A002 +000C2Ar 1 03 A0 .word $A003 +000C2Cr 1 04 A0 .word $A004 +000C2Er 1 05 A0 .word $A005 +000C30r 1 06 A0 .word $A006 +000C32r 1 07 A0 .word $A007 +000C34r 1 08 A0 .word $A008 +000C36r 1 09 A0 .word $A009 +000C38r 1 0A A0 .word $A00A +000C3Ar 1 0B A0 .word $A00B +000C3Cr 1 0C A0 .word $A00C +000C3Er 1 0D A0 .word $A00D +000C40r 1 0E A0 .word $A00E +000C42r 1 0F A0 .word $A00F +000C44r 1 E1 AF .word $AFE1 +000C46r 1 E2 AF .word $AFE2 +000C48r 1 E3 AF .word $AFE3 +000C4Ar 1 E4 AF .word $AFE4 +000C4Cr 1 E5 AF .word $AFE5 +000C4Er 1 E6 AF .word $AFE6 +000C50r 1 E7 AF .word $AFE7 +000C52r 1 E8 AF .word $AFE8 +000C54r 1 E9 AF .word $AFE9 +000C56r 1 EA AF .word $AFEA +000C58r 1 EB AF .word $AFEB +000C5Ar 1 EC AF .word $AFEC +000C5Cr 1 ED AF .word $AFED +000C5Er 1 EE AF .word $AFEE +000C60r 1 EF AF .word $AFEF +000C62r 1 F0 AF .word $AFF0 +000C64r 1 F1 AF .word $AFF1 +000C66r 1 F2 AF .word $AFF2 +000C68r 1 F3 AF .word $AFF3 +000C6Ar 1 F4 AF .word $AFF4 +000C6Cr 1 F5 AF .word $AFF5 +000C6Er 1 F6 AF .word $AFF6 +000C70r 1 F7 AF .word $AFF7 +000C72r 1 F8 AF .word $AFF8 +000C74r 1 F9 AF .word $AFF9 +000C76r 1 FA AF .word $AFFA +000C78r 1 FB AF .word $AFFB +000C7Ar 1 FC AF .word $AFFC +000C7Cr 1 FD AF .word $AFFD +000C7Er 1 FE AF .word $AFFE +000C80r 1 FF AF .word $AFFF +000C82r 1 00 B0 .word $B000 +000C84r 1 01 B0 .word $B001 +000C86r 1 02 B0 .word $B002 +000C88r 1 03 B0 .word $B003 +000C8Ar 1 04 B0 .word $B004 +000C8Cr 1 05 B0 .word $B005 +000C8Er 1 06 B0 .word $B006 +000C90r 1 07 B0 .word $B007 +000C92r 1 08 B0 .word $B008 +000C94r 1 09 B0 .word $B009 +000C96r 1 0A B0 .word $B00A +000C98r 1 0B B0 .word $B00B +000C9Ar 1 0C B0 .word $B00C +000C9Cr 1 0D B0 .word $B00D +000C9Er 1 0E B0 .word $B00E +000CA0r 1 0F B0 .word $B00F +000CA2r 1 E1 BF .word $BFE1 +000CA4r 1 E2 BF .word $BFE2 +000CA6r 1 E3 BF .word $BFE3 +000CA8r 1 E4 BF .word $BFE4 +000CAAr 1 E5 BF .word $BFE5 +000CACr 1 E6 BF .word $BFE6 +000CAEr 1 E7 BF .word $BFE7 +000CB0r 1 E8 BF .word $BFE8 +000CB2r 1 E9 BF .word $BFE9 +000CB4r 1 EA BF .word $BFEA +000CB6r 1 EB BF .word $BFEB +000CB8r 1 EC BF .word $BFEC +000CBAr 1 ED BF .word $BFED +000CBCr 1 EE BF .word $BFEE +000CBEr 1 EF BF .word $BFEF +000CC0r 1 F0 BF .word $BFF0 +000CC2r 1 F1 BF .word $BFF1 +000CC4r 1 F2 BF .word $BFF2 +000CC6r 1 F3 BF .word $BFF3 +000CC8r 1 F4 BF .word $BFF4 +000CCAr 1 F5 BF .word $BFF5 +000CCCr 1 F6 BF .word $BFF6 +000CCEr 1 F7 BF .word $BFF7 +000CD0r 1 F8 BF .word $BFF8 +000CD2r 1 F9 BF .word $BFF9 +000CD4r 1 FA BF .word $BFFA +000CD6r 1 FB BF .word $BFFB +000CD8r 1 FC BF .word $BFFC +000CDAr 1 FD BF .word $BFFD +000CDCr 1 FE BF .word $BFFE +000CDEr 1 FF BF .word $BFFF +000CE0r 1 00 C0 .word $C000 +000CE2r 1 01 C0 .word $C001 +000CE4r 1 02 C0 .word $C002 +000CE6r 1 03 C0 .word $C003 +000CE8r 1 04 C0 .word $C004 +000CEAr 1 05 C0 .word $C005 +000CECr 1 06 C0 .word $C006 +000CEEr 1 07 C0 .word $C007 +000CF0r 1 08 C0 .word $C008 +000CF2r 1 09 C0 .word $C009 +000CF4r 1 0A C0 .word $C00A +000CF6r 1 0B C0 .word $C00B +000CF8r 1 0C C0 .word $C00C +000CFAr 1 0D C0 .word $C00D +000CFCr 1 0E C0 .word $C00E +000CFEr 1 0F C0 .word $C00F +000D00r 1 E1 CF .word $CFE1 +000D02r 1 E2 CF .word $CFE2 +000D04r 1 E3 CF .word $CFE3 +000D06r 1 E4 CF .word $CFE4 +000D08r 1 E5 CF .word $CFE5 +000D0Ar 1 E6 CF .word $CFE6 +000D0Cr 1 E7 CF .word $CFE7 +000D0Er 1 E8 CF .word $CFE8 +000D10r 1 E9 CF .word $CFE9 +000D12r 1 EA CF .word $CFEA +000D14r 1 EB CF .word $CFEB +000D16r 1 EC CF .word $CFEC +000D18r 1 ED CF .word $CFED +000D1Ar 1 EE CF .word $CFEE +000D1Cr 1 EF CF .word $CFEF +000D1Er 1 F0 CF .word $CFF0 +000D20r 1 F1 CF .word $CFF1 +000D22r 1 F2 CF .word $CFF2 +000D24r 1 F3 CF .word $CFF3 +000D26r 1 F4 CF .word $CFF4 +000D28r 1 F5 CF .word $CFF5 +000D2Ar 1 F6 CF .word $CFF6 +000D2Cr 1 F7 CF .word $CFF7 +000D2Er 1 F8 CF .word $CFF8 +000D30r 1 F9 CF .word $CFF9 +000D32r 1 FA CF .word $CFFA +000D34r 1 FB CF .word $CFFB +000D36r 1 FC CF .word $CFFC +000D38r 1 FD CF .word $CFFD +000D3Ar 1 FE CF .word $CFFE +000D3Cr 1 FF CF .word $CFFF +000D3Er 1 00 D0 .word $D000 +000D40r 1 01 D0 .word $D001 +000D42r 1 02 D0 .word $D002 +000D44r 1 03 D0 .word $D003 +000D46r 1 04 D0 .word $D004 +000D48r 1 05 D0 .word $D005 +000D4Ar 1 06 D0 .word $D006 +000D4Cr 1 07 D0 .word $D007 +000D4Er 1 08 D0 .word $D008 +000D50r 1 09 D0 .word $D009 +000D52r 1 0A D0 .word $D00A +000D54r 1 0B D0 .word $D00B +000D56r 1 0C D0 .word $D00C +000D58r 1 0D D0 .word $D00D +000D5Ar 1 0E D0 .word $D00E +000D5Cr 1 0F D0 .word $D00F +000D5Er 1 E1 DF .word $DFE1 +000D60r 1 E2 DF .word $DFE2 +000D62r 1 E3 DF .word $DFE3 +000D64r 1 E4 DF .word $DFE4 +000D66r 1 E5 DF .word $DFE5 +000D68r 1 E6 DF .word $DFE6 +000D6Ar 1 E7 DF .word $DFE7 +000D6Cr 1 E8 DF .word $DFE8 +000D6Er 1 E9 DF .word $DFE9 +000D70r 1 EA DF .word $DFEA +000D72r 1 EB DF .word $DFEB +000D74r 1 EC DF .word $DFEC +000D76r 1 ED DF .word $DFED +000D78r 1 EE DF .word $DFEE +000D7Ar 1 EF DF .word $DFEF +000D7Cr 1 F0 DF .word $DFF0 +000D7Er 1 F1 DF .word $DFF1 +000D80r 1 F2 DF .word $DFF2 +000D82r 1 F3 DF .word $DFF3 +000D84r 1 F4 DF .word $DFF4 +000D86r 1 F5 DF .word $DFF5 +000D88r 1 F6 DF .word $DFF6 +000D8Ar 1 F7 DF .word $DFF7 +000D8Cr 1 F8 DF .word $DFF8 +000D8Er 1 F9 DF .word $DFF9 +000D90r 1 FA DF .word $DFFA +000D92r 1 FB DF .word $DFFB +000D94r 1 FC DF .word $DFFC +000D96r 1 FD DF .word $DFFD +000D98r 1 FE DF .word $DFFE +000D9Ar 1 FF DF .word $DFFF +000D9Cr 1 00 E0 .word $E000 +000D9Er 1 01 E0 .word $E001 +000DA0r 1 02 E0 .word $E002 +000DA2r 1 03 E0 .word $E003 +000DA4r 1 04 E0 .word $E004 +000DA6r 1 05 E0 .word $E005 +000DA8r 1 06 E0 .word $E006 +000DAAr 1 07 E0 .word $E007 +000DACr 1 08 E0 .word $E008 +000DAEr 1 09 E0 .word $E009 +000DB0r 1 0A E0 .word $E00A +000DB2r 1 0B E0 .word $E00B +000DB4r 1 0C E0 .word $E00C +000DB6r 1 0D E0 .word $E00D +000DB8r 1 0E E0 .word $E00E +000DBAr 1 0F E0 .word $E00F +000DBCr 1 E1 EF .word $EFE1 +000DBEr 1 E2 EF .word $EFE2 +000DC0r 1 E3 EF .word $EFE3 +000DC2r 1 E4 EF .word $EFE4 +000DC4r 1 E5 EF .word $EFE5 +000DC6r 1 E6 EF .word $EFE6 +000DC8r 1 E7 EF .word $EFE7 +000DCAr 1 E8 EF .word $EFE8 +000DCCr 1 E9 EF .word $EFE9 +000DCEr 1 EA EF .word $EFEA +000DD0r 1 EB EF .word $EFEB +000DD2r 1 EC EF .word $EFEC +000DD4r 1 ED EF .word $EFED +000DD6r 1 EE EF .word $EFEE +000DD8r 1 EF EF .word $EFEF +000DDAr 1 F0 EF .word $EFF0 +000DDCr 1 F1 EF .word $EFF1 +000DDEr 1 F2 EF .word $EFF2 +000DE0r 1 F3 EF .word $EFF3 +000DE2r 1 F4 EF .word $EFF4 +000DE4r 1 F5 EF .word $EFF5 +000DE6r 1 F6 EF .word $EFF6 +000DE8r 1 F7 EF .word $EFF7 +000DEAr 1 F8 EF .word $EFF8 +000DECr 1 F9 EF .word $EFF9 +000DEEr 1 FA EF .word $EFFA +000DF0r 1 FB EF .word $EFFB +000DF2r 1 FC EF .word $EFFC +000DF4r 1 FD EF .word $EFFD +000DF6r 1 FE EF .word $EFFE +000DF8r 1 FF EF .word $EFFF +000DFAr 1 00 F0 .word $F000 +000DFCr 1 01 F0 .word $F001 +000DFEr 1 02 F0 .word $F002 +000E00r 1 03 F0 .word $F003 +000E02r 1 04 F0 .word $F004 +000E04r 1 05 F0 .word $F005 +000E06r 1 06 F0 .word $F006 +000E08r 1 07 F0 .word $F007 +000E0Ar 1 08 F0 .word $F008 +000E0Cr 1 09 F0 .word $F009 +000E0Er 1 0A F0 .word $F00A +000E10r 1 0B F0 .word $F00B +000E12r 1 0C F0 .word $F00C +000E14r 1 0D F0 .word $F00D +000E16r 1 0E F0 .word $F00E +000E18r 1 0F F0 .word $F00F +000E1Ar 1 E1 FF .word $FFE1 +000E1Cr 1 E2 FF .word $FFE2 +000E1Er 1 E3 FF .word $FFE3 +000E20r 1 E4 FF .word $FFE4 +000E22r 1 E5 FF .word $FFE5 +000E24r 1 E6 FF .word $FFE6 +000E26r 1 E7 FF .word $FFE7 +000E28r 1 E8 FF .word $FFE8 +000E2Ar 1 E9 FF .word $FFE9 +000E2Cr 1 EA FF .word $FFEA +000E2Er 1 EB FF .word $FFEB +000E30r 1 EC FF .word $FFEC +000E32r 1 ED FF .word $FFED +000E34r 1 EE FF .word $FFEE +000E36r 1 EF FF .word $FFEF +000E38r 1 F0 FF .word $FFF0 +000E3Ar 1 F1 FF .word $FFF1 +000E3Cr 1 F2 FF .word $FFF2 +000E3Er 1 F3 FF .word $FFF3 +000E40r 1 F4 FF .word $FFF4 +000E42r 1 F5 FF .word $FFF5 +000E44r 1 F6 FF .word $FFF6 +000E46r 1 F7 FF .word $FFF7 +000E48r 1 F8 FF .word $FFF8 +000E4Ar 1 F9 FF .word $FFF9 +000E4Cr 1 FA FF .word $FFFA +000E4Er 1 FB FF .word $FFFB +000E50r 1 FC FF .word $FFFC +000E52r 1 FD FF .word $FFFD +000E54r 1 FE FF .word $FFFE +000E56r 1 FF FF .word $FFFF +000E58r 1 +000E58r 1 ; 4-digit hex values +000E58r 1 00 00 .word $0000 +000E5Ar 1 01 00 .word $0001 +000E5Cr 1 02 00 .word $0002 +000E5Er 1 03 00 .word $0003 +000E60r 1 04 00 .word $0004 +000E62r 1 05 00 .word $0005 +000E64r 1 06 00 .word $0006 +000E66r 1 07 00 .word $0007 +000E68r 1 08 00 .word $0008 +000E6Ar 1 09 00 .word $0009 +000E6Cr 1 0A 00 .word $000a +000E6Er 1 0B 00 .word $000b +000E70r 1 0C 00 .word $000c +000E72r 1 0D 00 .word $000d +000E74r 1 0E 00 .word $000e +000E76r 1 0F 00 .word $000f +000E78r 1 10 00 .word $0010 +000E7Ar 1 11 00 .word $0011 +000E7Cr 1 12 00 .word $0012 +000E7Er 1 13 00 .word $0013 +000E80r 1 70 00 .word $0070 +000E82r 1 71 00 .word $0071 +000E84r 1 72 00 .word $0072 +000E86r 1 73 00 .word $0073 +000E88r 1 74 00 .word $0074 +000E8Ar 1 75 00 .word $0075 +000E8Cr 1 76 00 .word $0076 +000E8Er 1 77 00 .word $0077 +000E90r 1 78 00 .word $0078 +000E92r 1 79 00 .word $0079 +000E94r 1 7A 00 .word $007a +000E96r 1 7B 00 .word $007b +000E98r 1 7C 00 .word $007c +000E9Ar 1 7D 00 .word $007d +000E9Cr 1 7E 00 .word $007e +000E9Er 1 7F 00 .word $007f +000EA0r 1 80 00 .word $0080 +000EA2r 1 81 00 .word $0081 +000EA4r 1 82 00 .word $0082 +000EA6r 1 83 00 .word $0083 +000EA8r 1 84 00 .word $0084 +000EAAr 1 85 00 .word $0085 +000EACr 1 86 00 .word $0086 +000EAEr 1 F0 00 .word $00f0 +000EB0r 1 F1 00 .word $00f1 +000EB2r 1 F2 00 .word $00f2 +000EB4r 1 F3 00 .word $00f3 +000EB6r 1 F4 00 .word $00f4 +000EB8r 1 F5 00 .word $00f5 +000EBAr 1 F6 00 .word $00f6 +000EBCr 1 F7 00 .word $00f7 +000EBEr 1 F8 00 .word $00f8 +000EC0r 1 F9 00 .word $00f9 +000EC2r 1 FA 00 .word $00fa +000EC4r 1 FB 00 .word $00fb +000EC6r 1 FC 00 .word $00fc +000EC8r 1 FD 00 .word $00fd +000ECAr 1 FE 00 .word $00fe +000ECCr 1 FF 00 .word $00ff +000ECEr 1 00 01 .word $0100 +000ED0r 1 01 01 .word $0101 +000ED2r 1 02 01 .word $0102 +000ED4r 1 03 01 .word $0103 +000ED6r 1 D2 0F .word $0fd2 +000ED8r 1 D3 0F .word $0fd3 +000EDAr 1 D4 0F .word $0fd4 +000EDCr 1 D5 0F .word $0fd5 +000EDEr 1 D6 0F .word $0fd6 +000EE0r 1 D7 0F .word $0fd7 +000EE2r 1 D8 0F .word $0fd8 +000EE4r 1 D9 0F .word $0fd9 +000EE6r 1 DA 0F .word $0fda +000EE8r 1 DB 0F .word $0fdb +000EEAr 1 DC 0F .word $0fdc +000EECr 1 DD 0F .word $0fdd +000EEEr 1 DE 0F .word $0fde +000EF0r 1 DF 0F .word $0fdf +000EF2r 1 E0 0F .word $0fe0 +000EF4r 1 E1 0F .word $0fe1 +000EF6r 1 E2 0F .word $0fe2 +000EF8r 1 E3 0F .word $0fe3 +000EFAr 1 E4 0F .word $0fe4 +000EFCr 1 E5 0F .word $0fe5 +000EFEr 1 E6 0F .word $0fe6 +000F00r 1 E7 0F .word $0fe7 +000F02r 1 E8 0F .word $0fe8 +000F04r 1 E9 0F .word $0fe9 +000F06r 1 EA 0F .word $0fea +000F08r 1 EB 0F .word $0feb +000F0Ar 1 EC 0F .word $0fec +000F0Cr 1 ED 0F .word $0fed +000F0Er 1 EE 0F .word $0fee +000F10r 1 EF 0F .word $0fef +000F12r 1 F0 0F .word $0ff0 +000F14r 1 F1 0F .word $0ff1 +000F16r 1 F2 0F .word $0ff2 +000F18r 1 F3 0F .word $0ff3 +000F1Ar 1 F4 0F .word $0ff4 +000F1Cr 1 F5 0F .word $0ff5 +000F1Er 1 F6 0F .word $0ff6 +000F20r 1 F7 0F .word $0ff7 +000F22r 1 F8 0F .word $0ff8 +000F24r 1 F9 0F .word $0ff9 +000F26r 1 FA 0F .word $0ffa +000F28r 1 FB 0F .word $0ffb +000F2Ar 1 FC 0F .word $0ffc +000F2Cr 1 FD 0F .word $0ffd +000F2Er 1 FE 0F .word $0ffe +000F30r 1 FF 0F .word $0fff +000F32r 1 00 10 .word $1000 +000F34r 1 01 10 .word $1001 +000F36r 1 02 10 .word $1002 +000F38r 1 03 10 .word $1003 +000F3Ar 1 04 10 .word $1004 +000F3Cr 1 05 10 .word $1005 +000F3Er 1 06 10 .word $1006 +000F40r 1 07 10 .word $1007 +000F42r 1 08 10 .word $1008 +000F44r 1 F0 7F .word $7ff0 +000F46r 1 F1 7F .word $7ff1 +000F48r 1 F2 7F .word $7ff2 +000F4Ar 1 F3 7F .word $7ff3 +000F4Cr 1 F4 7F .word $7ff4 +000F4Er 1 F5 7F .word $7ff5 +000F50r 1 F6 7F .word $7ff6 +000F52r 1 F7 7F .word $7ff7 +000F54r 1 F8 7F .word $7ff8 +000F56r 1 F9 7F .word $7ff9 +000F58r 1 FA 7F .word $7ffa +000F5Ar 1 FB 7F .word $7ffb +000F5Cr 1 FC 7F .word $7ffc +000F5Er 1 FD 7F .word $7ffd +000F60r 1 FE 7F .word $7ffe +000F62r 1 FF 7F .word $7fff +000F64r 1 00 80 .word $8000 +000F66r 1 01 80 .word $8001 +000F68r 1 02 80 .word $8002 +000F6Ar 1 03 80 .word $8003 +000F6Cr 1 04 80 .word $8004 +000F6Er 1 05 80 .word $8005 +000F70r 1 06 80 .word $8006 +000F72r 1 07 80 .word $8007 +000F74r 1 08 80 .word $8008 +000F76r 1 09 80 .word $8009 +000F78r 1 0A 80 .word $800a +000F7Ar 1 0B 80 .word $800b +000F7Cr 1 E1 9F .word $9fe1 +000F7Er 1 E2 9F .word $9fe2 +000F80r 1 E3 9F .word $9fe3 +000F82r 1 E4 9F .word $9fe4 +000F84r 1 E5 9F .word $9fe5 +000F86r 1 E6 9F .word $9fe6 +000F88r 1 E7 9F .word $9fe7 +000F8Ar 1 E8 9F .word $9fe8 +000F8Cr 1 E9 9F .word $9fe9 +000F8Er 1 EA 9F .word $9fea +000F90r 1 EB 9F .word $9feb +000F92r 1 EC 9F .word $9fec +000F94r 1 ED 9F .word $9fed +000F96r 1 EE 9F .word $9fee +000F98r 1 EF 9F .word $9fef +000F9Ar 1 F0 9F .word $9ff0 +000F9Cr 1 F1 9F .word $9ff1 +000F9Er 1 F2 9F .word $9ff2 +000FA0r 1 F3 9F .word $9ff3 +000FA2r 1 F4 9F .word $9ff4 +000FA4r 1 F5 9F .word $9ff5 +000FA6r 1 F6 9F .word $9ff6 +000FA8r 1 F7 9F .word $9ff7 +000FAAr 1 F8 9F .word $9ff8 +000FACr 1 F9 9F .word $9ff9 +000FAEr 1 FA 9F .word $9ffa +000FB0r 1 FB 9F .word $9ffb +000FB2r 1 FC 9F .word $9ffc +000FB4r 1 FD 9F .word $9ffd +000FB6r 1 FE 9F .word $9ffe +000FB8r 1 FF 9F .word $9fff +000FBAr 1 00 A0 .word $a000 +000FBCr 1 01 A0 .word $a001 +000FBEr 1 02 A0 .word $a002 +000FC0r 1 03 A0 .word $a003 +000FC2r 1 04 A0 .word $a004 +000FC4r 1 05 A0 .word $a005 +000FC6r 1 06 A0 .word $a006 +000FC8r 1 07 A0 .word $a007 +000FCAr 1 08 A0 .word $a008 +000FCCr 1 09 A0 .word $a009 +000FCEr 1 0A A0 .word $a00a +000FD0r 1 0B A0 .word $a00b +000FD2r 1 0C A0 .word $a00c +000FD4r 1 0D A0 .word $a00d +000FD6r 1 0E A0 .word $a00e +000FD8r 1 0F A0 .word $a00f +000FDAr 1 E1 AF .word $afe1 +000FDCr 1 E2 AF .word $afe2 +000FDEr 1 E3 AF .word $afe3 +000FE0r 1 E4 AF .word $afe4 +000FE2r 1 E5 AF .word $afe5 +000FE4r 1 E6 AF .word $afe6 +000FE6r 1 E7 AF .word $afe7 +000FE8r 1 E8 AF .word $afe8 +000FEAr 1 E9 AF .word $afe9 +000FECr 1 EA AF .word $afea +000FEEr 1 EB AF .word $afeb +000FF0r 1 EC AF .word $afec +000FF2r 1 ED AF .word $afed +000FF4r 1 EE AF .word $afee +000FF6r 1 EF AF .word $afef +000FF8r 1 F0 AF .word $aff0 +000FFAr 1 F1 AF .word $aff1 +000FFCr 1 F2 AF .word $aff2 +000FFEr 1 F3 AF .word $aff3 +001000r 1 F4 AF .word $aff4 +001002r 1 F5 AF .word $aff5 +001004r 1 F6 AF .word $aff6 +001006r 1 F7 AF .word $aff7 +001008r 1 F8 AF .word $aff8 +00100Ar 1 F9 AF .word $aff9 +00100Cr 1 FA AF .word $affa +00100Er 1 FB AF .word $affb +001010r 1 FC AF .word $affc +001012r 1 FD AF .word $affd +001014r 1 FE AF .word $affe +001016r 1 FF AF .word $afff +001018r 1 00 B0 .word $b000 +00101Ar 1 01 B0 .word $b001 +00101Cr 1 02 B0 .word $b002 +00101Er 1 03 B0 .word $b003 +001020r 1 04 B0 .word $b004 +001022r 1 05 B0 .word $b005 +001024r 1 06 B0 .word $b006 +001026r 1 07 B0 .word $b007 +001028r 1 08 B0 .word $b008 +00102Ar 1 09 B0 .word $b009 +00102Cr 1 0A B0 .word $b00a +00102Er 1 0B B0 .word $b00b +001030r 1 0C B0 .word $b00c +001032r 1 0D B0 .word $b00d +001034r 1 0E B0 .word $b00e +001036r 1 0F B0 .word $b00f +001038r 1 E1 BF .word $bfe1 +00103Ar 1 E2 BF .word $bfe2 +00103Cr 1 E3 BF .word $bfe3 +00103Er 1 E4 BF .word $bfe4 +001040r 1 E5 BF .word $bfe5 +001042r 1 E6 BF .word $bfe6 +001044r 1 E7 BF .word $bfe7 +001046r 1 E8 BF .word $bfe8 +001048r 1 E9 BF .word $bfe9 +00104Ar 1 EA BF .word $bfea +00104Cr 1 EB BF .word $bfeb +00104Er 1 EC BF .word $bfec +001050r 1 ED BF .word $bfed +001052r 1 EE BF .word $bfee +001054r 1 EF BF .word $bfef +001056r 1 F0 BF .word $bff0 +001058r 1 F1 BF .word $bff1 +00105Ar 1 F2 BF .word $bff2 +00105Cr 1 F3 BF .word $bff3 +00105Er 1 F4 BF .word $bff4 +001060r 1 F5 BF .word $bff5 +001062r 1 F6 BF .word $bff6 +001064r 1 F7 BF .word $bff7 +001066r 1 F8 BF .word $bff8 +001068r 1 F9 BF .word $bff9 +00106Ar 1 FA BF .word $bffa +00106Cr 1 FB BF .word $bffb +00106Er 1 FC BF .word $bffc +001070r 1 FD BF .word $bffd +001072r 1 FE BF .word $bffe +001074r 1 FF BF .word $bfff +001076r 1 00 C0 .word $c000 +001078r 1 01 C0 .word $c001 +00107Ar 1 02 C0 .word $c002 +00107Cr 1 03 C0 .word $c003 +00107Er 1 04 C0 .word $c004 +001080r 1 05 C0 .word $c005 +001082r 1 06 C0 .word $c006 +001084r 1 07 C0 .word $c007 +001086r 1 08 C0 .word $c008 +001088r 1 09 C0 .word $c009 +00108Ar 1 0A C0 .word $c00a +00108Cr 1 0B C0 .word $c00b +00108Er 1 0C C0 .word $c00c +001090r 1 0D C0 .word $c00d +001092r 1 0E C0 .word $c00e +001094r 1 0F C0 .word $c00f +001096r 1 E1 CF .word $cfe1 +001098r 1 E2 CF .word $cfe2 +00109Ar 1 E3 CF .word $cfe3 +00109Cr 1 E4 CF .word $cfe4 +00109Er 1 E5 CF .word $cfe5 +0010A0r 1 E6 CF .word $cfe6 +0010A2r 1 E7 CF .word $cfe7 +0010A4r 1 E8 CF .word $cfe8 +0010A6r 1 E9 CF .word $cfe9 +0010A8r 1 EA CF .word $cfea +0010AAr 1 EB CF .word $cfeb +0010ACr 1 EC CF .word $cfec +0010AEr 1 ED CF .word $cfed +0010B0r 1 EE CF .word $cfee +0010B2r 1 EF CF .word $cfef +0010B4r 1 F0 CF .word $cff0 +0010B6r 1 F1 CF .word $cff1 +0010B8r 1 F2 CF .word $cff2 +0010BAr 1 F3 CF .word $cff3 +0010BCr 1 F4 CF .word $cff4 +0010BEr 1 F5 CF .word $cff5 +0010C0r 1 F6 CF .word $cff6 +0010C2r 1 F7 CF .word $cff7 +0010C4r 1 F8 CF .word $cff8 +0010C6r 1 F9 CF .word $cff9 +0010C8r 1 FA CF .word $cffa +0010CAr 1 FB CF .word $cffb +0010CCr 1 FC CF .word $cffc +0010CEr 1 FD CF .word $cffd +0010D0r 1 FE CF .word $cffe +0010D2r 1 FF CF .word $cfff +0010D4r 1 00 D0 .word $d000 +0010D6r 1 01 D0 .word $d001 +0010D8r 1 02 D0 .word $d002 +0010DAr 1 03 D0 .word $d003 +0010DCr 1 04 D0 .word $d004 +0010DEr 1 05 D0 .word $d005 +0010E0r 1 06 D0 .word $d006 +0010E2r 1 07 D0 .word $d007 +0010E4r 1 08 D0 .word $d008 +0010E6r 1 09 D0 .word $d009 +0010E8r 1 0A D0 .word $d00a +0010EAr 1 0B D0 .word $d00b +0010ECr 1 0C D0 .word $d00c +0010EEr 1 0D D0 .word $d00d +0010F0r 1 0E D0 .word $d00e +0010F2r 1 0F D0 .word $d00f +0010F4r 1 E1 DF .word $dfe1 +0010F6r 1 E2 DF .word $dfe2 +0010F8r 1 E3 DF .word $dfe3 +0010FAr 1 E4 DF .word $dfe4 +0010FCr 1 E5 DF .word $dfe5 +0010FEr 1 E6 DF .word $dfe6 +001100r 1 E7 DF .word $dfe7 +001102r 1 E8 DF .word $dfe8 +001104r 1 E9 DF .word $dfe9 +001106r 1 EA DF .word $dfea +001108r 1 EB DF .word $dfeb +00110Ar 1 EC DF .word $dfec +00110Cr 1 ED DF .word $dfed +00110Er 1 EE DF .word $dfee +001110r 1 EF DF .word $dfef +001112r 1 F0 DF .word $dff0 +001114r 1 F1 DF .word $dff1 +001116r 1 F2 DF .word $dff2 +001118r 1 F3 DF .word $dff3 +00111Ar 1 F4 DF .word $dff4 +00111Cr 1 F5 DF .word $dff5 +00111Er 1 F6 DF .word $dff6 +001120r 1 F7 DF .word $dff7 +001122r 1 F8 DF .word $dff8 +001124r 1 F9 DF .word $dff9 +001126r 1 FA DF .word $dffa +001128r 1 FB DF .word $dffb +00112Ar 1 FC DF .word $dffc +00112Cr 1 FD DF .word $dffd +00112Er 1 FE DF .word $dffe +001130r 1 FF DF .word $dfff +001132r 1 00 E0 .word $e000 +001134r 1 01 E0 .word $e001 +001136r 1 02 E0 .word $e002 +001138r 1 03 E0 .word $e003 +00113Ar 1 04 E0 .word $e004 +00113Cr 1 05 E0 .word $e005 +00113Er 1 06 E0 .word $e006 +001140r 1 07 E0 .word $e007 +001142r 1 08 E0 .word $e008 +001144r 1 09 E0 .word $e009 +001146r 1 0A E0 .word $e00a +001148r 1 0B E0 .word $e00b +00114Ar 1 0C E0 .word $e00c +00114Cr 1 0D E0 .word $e00d +00114Er 1 0E E0 .word $e00e +001150r 1 0F E0 .word $e00f +001152r 1 E1 EF .word $efe1 +001154r 1 E2 EF .word $efe2 +001156r 1 E3 EF .word $efe3 +001158r 1 E4 EF .word $efe4 +00115Ar 1 E5 EF .word $efe5 +00115Cr 1 E6 EF .word $efe6 +00115Er 1 E7 EF .word $efe7 +001160r 1 E8 EF .word $efe8 +001162r 1 E9 EF .word $efe9 +001164r 1 EA EF .word $efea +001166r 1 EB EF .word $efeb +001168r 1 EC EF .word $efec +00116Ar 1 ED EF .word $efed +00116Cr 1 EE EF .word $efee +00116Er 1 EF EF .word $efef +001170r 1 F0 EF .word $eff0 +001172r 1 F1 EF .word $eff1 +001174r 1 F2 EF .word $eff2 +001176r 1 F3 EF .word $eff3 +001178r 1 F4 EF .word $eff4 +00117Ar 1 F5 EF .word $eff5 +00117Cr 1 F6 EF .word $eff6 +00117Er 1 F7 EF .word $eff7 +001180r 1 F8 EF .word $eff8 +001182r 1 F9 EF .word $eff9 +001184r 1 FA EF .word $effa +001186r 1 FB EF .word $effb +001188r 1 FC EF .word $effc +00118Ar 1 FD EF .word $effd +00118Cr 1 FE EF .word $effe +00118Er 1 FF EF .word $efff +001190r 1 00 F0 .word $f000 +001192r 1 01 F0 .word $f001 +001194r 1 02 F0 .word $f002 +001196r 1 03 F0 .word $f003 +001198r 1 04 F0 .word $f004 +00119Ar 1 05 F0 .word $f005 +00119Cr 1 06 F0 .word $f006 +00119Er 1 07 F0 .word $f007 +0011A0r 1 08 F0 .word $f008 +0011A2r 1 09 F0 .word $f009 +0011A4r 1 0A F0 .word $f00a +0011A6r 1 0B F0 .word $f00b +0011A8r 1 0C F0 .word $f00c +0011AAr 1 0D F0 .word $f00d +0011ACr 1 0E F0 .word $f00e +0011AEr 1 0F F0 .word $f00f +0011B0r 1 E1 FF .word $ffe1 +0011B2r 1 E2 FF .word $ffe2 +0011B4r 1 E3 FF .word $ffe3 +0011B6r 1 E4 FF .word $ffe4 +0011B8r 1 E5 FF .word $ffe5 +0011BAr 1 E6 FF .word $ffe6 +0011BCr 1 E7 FF .word $ffe7 +0011BEr 1 E8 FF .word $ffe8 +0011C0r 1 E9 FF .word $ffe9 +0011C2r 1 EA FF .word $ffea +0011C4r 1 EB FF .word $ffeb +0011C6r 1 EC FF .word $ffec +0011C8r 1 ED FF .word $ffed +0011CAr 1 EE FF .word $ffee +0011CCr 1 EF FF .word $ffef +0011CEr 1 F0 FF .word $fff0 +0011D0r 1 F1 FF .word $fff1 +0011D2r 1 F2 FF .word $fff2 +0011D4r 1 F3 FF .word $fff3 +0011D6r 1 F4 FF .word $fff4 +0011D8r 1 F5 FF .word $fff5 +0011DAr 1 F6 FF .word $fff6 +0011DCr 1 F7 FF .word $fff7 +0011DEr 1 F8 FF .word $fff8 +0011E0r 1 F9 FF .word $fff9 +0011E2r 1 FA FF .word $fffa +0011E4r 1 FB FF .word $fffb +0011E6r 1 FC FF .word $fffc +0011E8r 1 FD FF .word $fffd +0011EAr 1 FE FF .word $fffe +0011ECr 1 FF FF .word $ffff +0011EEr 1 +0011EEr 1 ; 4-digit hex values, uppercase +0011EEr 1 00 00 .word $0000 +0011F0r 1 01 00 .word $0001 +0011F2r 1 02 00 .word $0002 +0011F4r 1 03 00 .word $0003 +0011F6r 1 04 00 .word $0004 +0011F8r 1 05 00 .word $0005 +0011FAr 1 06 00 .word $0006 +0011FCr 1 07 00 .word $0007 +0011FEr 1 08 00 .word $0008 +001200r 1 09 00 .word $0009 +001202r 1 0A 00 .word $000A +001204r 1 0B 00 .word $000B +001206r 1 0C 00 .word $000C +001208r 1 0D 00 .word $000D +00120Ar 1 0E 00 .word $000E +00120Cr 1 0F 00 .word $000F +00120Er 1 10 00 .word $0010 +001210r 1 11 00 .word $0011 +001212r 1 12 00 .word $0012 +001214r 1 13 00 .word $0013 +001216r 1 70 00 .word $0070 +001218r 1 71 00 .word $0071 +00121Ar 1 72 00 .word $0072 +00121Cr 1 73 00 .word $0073 +00121Er 1 74 00 .word $0074 +001220r 1 75 00 .word $0075 +001222r 1 76 00 .word $0076 +001224r 1 77 00 .word $0077 +001226r 1 78 00 .word $0078 +001228r 1 79 00 .word $0079 +00122Ar 1 7A 00 .word $007A +00122Cr 1 7B 00 .word $007B +00122Er 1 7C 00 .word $007C +001230r 1 7D 00 .word $007D +001232r 1 7E 00 .word $007E +001234r 1 7F 00 .word $007F +001236r 1 80 00 .word $0080 +001238r 1 81 00 .word $0081 +00123Ar 1 82 00 .word $0082 +00123Cr 1 83 00 .word $0083 +00123Er 1 84 00 .word $0084 +001240r 1 85 00 .word $0085 +001242r 1 86 00 .word $0086 +001244r 1 F0 00 .word $00F0 +001246r 1 F1 00 .word $00F1 +001248r 1 F2 00 .word $00F2 +00124Ar 1 F3 00 .word $00F3 +00124Cr 1 F4 00 .word $00F4 +00124Er 1 F5 00 .word $00F5 +001250r 1 F6 00 .word $00F6 +001252r 1 F7 00 .word $00F7 +001254r 1 F8 00 .word $00F8 +001256r 1 F9 00 .word $00F9 +001258r 1 FA 00 .word $00FA +00125Ar 1 FB 00 .word $00FB +00125Cr 1 FC 00 .word $00FC +00125Er 1 FD 00 .word $00FD +001260r 1 FE 00 .word $00FE +001262r 1 FF 00 .word $00FF +001264r 1 00 01 .word $0100 +001266r 1 01 01 .word $0101 +001268r 1 02 01 .word $0102 +00126Ar 1 03 01 .word $0103 +00126Cr 1 D2 0F .word $0FD2 +00126Er 1 D3 0F .word $0FD3 +001270r 1 D4 0F .word $0FD4 +001272r 1 D5 0F .word $0FD5 +001274r 1 D6 0F .word $0FD6 +001276r 1 D7 0F .word $0FD7 +001278r 1 D8 0F .word $0FD8 +00127Ar 1 D9 0F .word $0FD9 +00127Cr 1 DA 0F .word $0FDA +00127Er 1 DB 0F .word $0FDB +001280r 1 DC 0F .word $0FDC +001282r 1 DD 0F .word $0FDD +001284r 1 DE 0F .word $0FDE +001286r 1 DF 0F .word $0FDF +001288r 1 E0 0F .word $0FE0 +00128Ar 1 E1 0F .word $0FE1 +00128Cr 1 E2 0F .word $0FE2 +00128Er 1 E3 0F .word $0FE3 +001290r 1 E4 0F .word $0FE4 +001292r 1 E5 0F .word $0FE5 +001294r 1 E6 0F .word $0FE6 +001296r 1 E7 0F .word $0FE7 +001298r 1 E8 0F .word $0FE8 +00129Ar 1 E9 0F .word $0FE9 +00129Cr 1 EA 0F .word $0FEA +00129Er 1 EB 0F .word $0FEB +0012A0r 1 EC 0F .word $0FEC +0012A2r 1 ED 0F .word $0FED +0012A4r 1 EE 0F .word $0FEE +0012A6r 1 EF 0F .word $0FEF +0012A8r 1 F0 0F .word $0FF0 +0012AAr 1 F1 0F .word $0FF1 +0012ACr 1 F2 0F .word $0FF2 +0012AEr 1 F3 0F .word $0FF3 +0012B0r 1 F4 0F .word $0FF4 +0012B2r 1 F5 0F .word $0FF5 +0012B4r 1 F6 0F .word $0FF6 +0012B6r 1 F7 0F .word $0FF7 +0012B8r 1 F8 0F .word $0FF8 +0012BAr 1 F9 0F .word $0FF9 +0012BCr 1 FA 0F .word $0FFA +0012BEr 1 FB 0F .word $0FFB +0012C0r 1 FC 0F .word $0FFC +0012C2r 1 FD 0F .word $0FFD +0012C4r 1 FE 0F .word $0FFE +0012C6r 1 FF 0F .word $0FFF +0012C8r 1 00 10 .word $1000 +0012CAr 1 01 10 .word $1001 +0012CCr 1 02 10 .word $1002 +0012CEr 1 03 10 .word $1003 +0012D0r 1 04 10 .word $1004 +0012D2r 1 05 10 .word $1005 +0012D4r 1 06 10 .word $1006 +0012D6r 1 07 10 .word $1007 +0012D8r 1 08 10 .word $1008 +0012DAr 1 F0 7F .word $7FF0 +0012DCr 1 F1 7F .word $7FF1 +0012DEr 1 F2 7F .word $7FF2 +0012E0r 1 F3 7F .word $7FF3 +0012E2r 1 F4 7F .word $7FF4 +0012E4r 1 F5 7F .word $7FF5 +0012E6r 1 F6 7F .word $7FF6 +0012E8r 1 F7 7F .word $7FF7 +0012EAr 1 F8 7F .word $7FF8 +0012ECr 1 F9 7F .word $7FF9 +0012EEr 1 FA 7F .word $7FFA +0012F0r 1 FB 7F .word $7FFB +0012F2r 1 FC 7F .word $7FFC +0012F4r 1 FD 7F .word $7FFD +0012F6r 1 FE 7F .word $7FFE +0012F8r 1 FF 7F .word $7FFF +0012FAr 1 00 80 .word $8000 +0012FCr 1 01 80 .word $8001 +0012FEr 1 02 80 .word $8002 +001300r 1 03 80 .word $8003 +001302r 1 04 80 .word $8004 +001304r 1 05 80 .word $8005 +001306r 1 06 80 .word $8006 +001308r 1 07 80 .word $8007 +00130Ar 1 08 80 .word $8008 +00130Cr 1 09 80 .word $8009 +00130Er 1 0A 80 .word $800A +001310r 1 0B 80 .word $800B +001312r 1 E1 9F .word $9FE1 +001314r 1 E2 9F .word $9FE2 +001316r 1 E3 9F .word $9FE3 +001318r 1 E4 9F .word $9FE4 +00131Ar 1 E5 9F .word $9FE5 +00131Cr 1 E6 9F .word $9FE6 +00131Er 1 E7 9F .word $9FE7 +001320r 1 E8 9F .word $9FE8 +001322r 1 E9 9F .word $9FE9 +001324r 1 EA 9F .word $9FEA +001326r 1 EB 9F .word $9FEB +001328r 1 EC 9F .word $9FEC +00132Ar 1 ED 9F .word $9FED +00132Cr 1 EE 9F .word $9FEE +00132Er 1 EF 9F .word $9FEF +001330r 1 F0 9F .word $9FF0 +001332r 1 F1 9F .word $9FF1 +001334r 1 F2 9F .word $9FF2 +001336r 1 F3 9F .word $9FF3 +001338r 1 F4 9F .word $9FF4 +00133Ar 1 F5 9F .word $9FF5 +00133Cr 1 F6 9F .word $9FF6 +00133Er 1 F7 9F .word $9FF7 +001340r 1 F8 9F .word $9FF8 +001342r 1 F9 9F .word $9FF9 +001344r 1 FA 9F .word $9FFA +001346r 1 FB 9F .word $9FFB +001348r 1 FC 9F .word $9FFC +00134Ar 1 FD 9F .word $9FFD +00134Cr 1 FE 9F .word $9FFE +00134Er 1 FF 9F .word $9FFF +001350r 1 00 A0 .word $A000 +001352r 1 01 A0 .word $A001 +001354r 1 02 A0 .word $A002 +001356r 1 03 A0 .word $A003 +001358r 1 04 A0 .word $A004 +00135Ar 1 05 A0 .word $A005 +00135Cr 1 06 A0 .word $A006 +00135Er 1 07 A0 .word $A007 +001360r 1 08 A0 .word $A008 +001362r 1 09 A0 .word $A009 +001364r 1 0A A0 .word $A00A +001366r 1 0B A0 .word $A00B +001368r 1 0C A0 .word $A00C +00136Ar 1 0D A0 .word $A00D +00136Cr 1 0E A0 .word $A00E +00136Er 1 0F A0 .word $A00F +001370r 1 E1 AF .word $AFE1 +001372r 1 E2 AF .word $AFE2 +001374r 1 E3 AF .word $AFE3 +001376r 1 E4 AF .word $AFE4 +001378r 1 E5 AF .word $AFE5 +00137Ar 1 E6 AF .word $AFE6 +00137Cr 1 E7 AF .word $AFE7 +00137Er 1 E8 AF .word $AFE8 +001380r 1 E9 AF .word $AFE9 +001382r 1 EA AF .word $AFEA +001384r 1 EB AF .word $AFEB +001386r 1 EC AF .word $AFEC +001388r 1 ED AF .word $AFED +00138Ar 1 EE AF .word $AFEE +00138Cr 1 EF AF .word $AFEF +00138Er 1 F0 AF .word $AFF0 +001390r 1 F1 AF .word $AFF1 +001392r 1 F2 AF .word $AFF2 +001394r 1 F3 AF .word $AFF3 +001396r 1 F4 AF .word $AFF4 +001398r 1 F5 AF .word $AFF5 +00139Ar 1 F6 AF .word $AFF6 +00139Cr 1 F7 AF .word $AFF7 +00139Er 1 F8 AF .word $AFF8 +0013A0r 1 F9 AF .word $AFF9 +0013A2r 1 FA AF .word $AFFA +0013A4r 1 FB AF .word $AFFB +0013A6r 1 FC AF .word $AFFC +0013A8r 1 FD AF .word $AFFD +0013AAr 1 FE AF .word $AFFE +0013ACr 1 FF AF .word $AFFF +0013AEr 1 00 B0 .word $B000 +0013B0r 1 01 B0 .word $B001 +0013B2r 1 02 B0 .word $B002 +0013B4r 1 03 B0 .word $B003 +0013B6r 1 04 B0 .word $B004 +0013B8r 1 05 B0 .word $B005 +0013BAr 1 06 B0 .word $B006 +0013BCr 1 07 B0 .word $B007 +0013BEr 1 08 B0 .word $B008 +0013C0r 1 09 B0 .word $B009 +0013C2r 1 0A B0 .word $B00A +0013C4r 1 0B B0 .word $B00B +0013C6r 1 0C B0 .word $B00C +0013C8r 1 0D B0 .word $B00D +0013CAr 1 0E B0 .word $B00E +0013CCr 1 0F B0 .word $B00F +0013CEr 1 E1 BF .word $BFE1 +0013D0r 1 E2 BF .word $BFE2 +0013D2r 1 E3 BF .word $BFE3 +0013D4r 1 E4 BF .word $BFE4 +0013D6r 1 E5 BF .word $BFE5 +0013D8r 1 E6 BF .word $BFE6 +0013DAr 1 E7 BF .word $BFE7 +0013DCr 1 E8 BF .word $BFE8 +0013DEr 1 E9 BF .word $BFE9 +0013E0r 1 EA BF .word $BFEA +0013E2r 1 EB BF .word $BFEB +0013E4r 1 EC BF .word $BFEC +0013E6r 1 ED BF .word $BFED +0013E8r 1 EE BF .word $BFEE +0013EAr 1 EF BF .word $BFEF +0013ECr 1 F0 BF .word $BFF0 +0013EEr 1 F1 BF .word $BFF1 +0013F0r 1 F2 BF .word $BFF2 +0013F2r 1 F3 BF .word $BFF3 +0013F4r 1 F4 BF .word $BFF4 +0013F6r 1 F5 BF .word $BFF5 +0013F8r 1 F6 BF .word $BFF6 +0013FAr 1 F7 BF .word $BFF7 +0013FCr 1 F8 BF .word $BFF8 +0013FEr 1 F9 BF .word $BFF9 +001400r 1 FA BF .word $BFFA +001402r 1 FB BF .word $BFFB +001404r 1 FC BF .word $BFFC +001406r 1 FD BF .word $BFFD +001408r 1 FE BF .word $BFFE +00140Ar 1 FF BF .word $BFFF +00140Cr 1 00 C0 .word $C000 +00140Er 1 01 C0 .word $C001 +001410r 1 02 C0 .word $C002 +001412r 1 03 C0 .word $C003 +001414r 1 04 C0 .word $C004 +001416r 1 05 C0 .word $C005 +001418r 1 06 C0 .word $C006 +00141Ar 1 07 C0 .word $C007 +00141Cr 1 08 C0 .word $C008 +00141Er 1 09 C0 .word $C009 +001420r 1 0A C0 .word $C00A +001422r 1 0B C0 .word $C00B +001424r 1 0C C0 .word $C00C +001426r 1 0D C0 .word $C00D +001428r 1 0E C0 .word $C00E +00142Ar 1 0F C0 .word $C00F +00142Cr 1 E1 CF .word $CFE1 +00142Er 1 E2 CF .word $CFE2 +001430r 1 E3 CF .word $CFE3 +001432r 1 E4 CF .word $CFE4 +001434r 1 E5 CF .word $CFE5 +001436r 1 E6 CF .word $CFE6 +001438r 1 E7 CF .word $CFE7 +00143Ar 1 E8 CF .word $CFE8 +00143Cr 1 E9 CF .word $CFE9 +00143Er 1 EA CF .word $CFEA +001440r 1 EB CF .word $CFEB +001442r 1 EC CF .word $CFEC +001444r 1 ED CF .word $CFED +001446r 1 EE CF .word $CFEE +001448r 1 EF CF .word $CFEF +00144Ar 1 F0 CF .word $CFF0 +00144Cr 1 F1 CF .word $CFF1 +00144Er 1 F2 CF .word $CFF2 +001450r 1 F3 CF .word $CFF3 +001452r 1 F4 CF .word $CFF4 +001454r 1 F5 CF .word $CFF5 +001456r 1 F6 CF .word $CFF6 +001458r 1 F7 CF .word $CFF7 +00145Ar 1 F8 CF .word $CFF8 +00145Cr 1 F9 CF .word $CFF9 +00145Er 1 FA CF .word $CFFA +001460r 1 FB CF .word $CFFB +001462r 1 FC CF .word $CFFC +001464r 1 FD CF .word $CFFD +001466r 1 FE CF .word $CFFE +001468r 1 FF CF .word $CFFF +00146Ar 1 00 D0 .word $D000 +00146Cr 1 01 D0 .word $D001 +00146Er 1 02 D0 .word $D002 +001470r 1 03 D0 .word $D003 +001472r 1 04 D0 .word $D004 +001474r 1 05 D0 .word $D005 +001476r 1 06 D0 .word $D006 +001478r 1 07 D0 .word $D007 +00147Ar 1 08 D0 .word $D008 +00147Cr 1 09 D0 .word $D009 +00147Er 1 0A D0 .word $D00A +001480r 1 0B D0 .word $D00B +001482r 1 0C D0 .word $D00C +001484r 1 0D D0 .word $D00D +001486r 1 0E D0 .word $D00E +001488r 1 0F D0 .word $D00F +00148Ar 1 E1 DF .word $DFE1 +00148Cr 1 E2 DF .word $DFE2 +00148Er 1 E3 DF .word $DFE3 +001490r 1 E4 DF .word $DFE4 +001492r 1 E5 DF .word $DFE5 +001494r 1 E6 DF .word $DFE6 +001496r 1 E7 DF .word $DFE7 +001498r 1 E8 DF .word $DFE8 +00149Ar 1 E9 DF .word $DFE9 +00149Cr 1 EA DF .word $DFEA +00149Er 1 EB DF .word $DFEB +0014A0r 1 EC DF .word $DFEC +0014A2r 1 ED DF .word $DFED +0014A4r 1 EE DF .word $DFEE +0014A6r 1 EF DF .word $DFEF +0014A8r 1 F0 DF .word $DFF0 +0014AAr 1 F1 DF .word $DFF1 +0014ACr 1 F2 DF .word $DFF2 +0014AEr 1 F3 DF .word $DFF3 +0014B0r 1 F4 DF .word $DFF4 +0014B2r 1 F5 DF .word $DFF5 +0014B4r 1 F6 DF .word $DFF6 +0014B6r 1 F7 DF .word $DFF7 +0014B8r 1 F8 DF .word $DFF8 +0014BAr 1 F9 DF .word $DFF9 +0014BCr 1 FA DF .word $DFFA +0014BEr 1 FB DF .word $DFFB +0014C0r 1 FC DF .word $DFFC +0014C2r 1 FD DF .word $DFFD +0014C4r 1 FE DF .word $DFFE +0014C6r 1 FF DF .word $DFFF +0014C8r 1 00 E0 .word $E000 +0014CAr 1 01 E0 .word $E001 +0014CCr 1 02 E0 .word $E002 +0014CEr 1 03 E0 .word $E003 +0014D0r 1 04 E0 .word $E004 +0014D2r 1 05 E0 .word $E005 +0014D4r 1 06 E0 .word $E006 +0014D6r 1 07 E0 .word $E007 +0014D8r 1 08 E0 .word $E008 +0014DAr 1 09 E0 .word $E009 +0014DCr 1 0A E0 .word $E00A +0014DEr 1 0B E0 .word $E00B +0014E0r 1 0C E0 .word $E00C +0014E2r 1 0D E0 .word $E00D +0014E4r 1 0E E0 .word $E00E +0014E6r 1 0F E0 .word $E00F +0014E8r 1 E1 EF .word $EFE1 +0014EAr 1 E2 EF .word $EFE2 +0014ECr 1 E3 EF .word $EFE3 +0014EEr 1 E4 EF .word $EFE4 +0014F0r 1 E5 EF .word $EFE5 +0014F2r 1 E6 EF .word $EFE6 +0014F4r 1 E7 EF .word $EFE7 +0014F6r 1 E8 EF .word $EFE8 +0014F8r 1 E9 EF .word $EFE9 +0014FAr 1 EA EF .word $EFEA +0014FCr 1 EB EF .word $EFEB +0014FEr 1 EC EF .word $EFEC +001500r 1 ED EF .word $EFED +001502r 1 EE EF .word $EFEE +001504r 1 EF EF .word $EFEF +001506r 1 F0 EF .word $EFF0 +001508r 1 F1 EF .word $EFF1 +00150Ar 1 F2 EF .word $EFF2 +00150Cr 1 F3 EF .word $EFF3 +00150Er 1 F4 EF .word $EFF4 +001510r 1 F5 EF .word $EFF5 +001512r 1 F6 EF .word $EFF6 +001514r 1 F7 EF .word $EFF7 +001516r 1 F8 EF .word $EFF8 +001518r 1 F9 EF .word $EFF9 +00151Ar 1 FA EF .word $EFFA +00151Cr 1 FB EF .word $EFFB +00151Er 1 FC EF .word $EFFC +001520r 1 FD EF .word $EFFD +001522r 1 FE EF .word $EFFE +001524r 1 FF EF .word $EFFF +001526r 1 00 F0 .word $F000 +001528r 1 01 F0 .word $F001 +00152Ar 1 02 F0 .word $F002 +00152Cr 1 03 F0 .word $F003 +00152Er 1 04 F0 .word $F004 +001530r 1 05 F0 .word $F005 +001532r 1 06 F0 .word $F006 +001534r 1 07 F0 .word $F007 +001536r 1 08 F0 .word $F008 +001538r 1 09 F0 .word $F009 +00153Ar 1 0A F0 .word $F00A +00153Cr 1 0B F0 .word $F00B +00153Er 1 0C F0 .word $F00C +001540r 1 0D F0 .word $F00D +001542r 1 0E F0 .word $F00E +001544r 1 0F F0 .word $F00F +001546r 1 E1 FF .word $FFE1 +001548r 1 E2 FF .word $FFE2 +00154Ar 1 E3 FF .word $FFE3 +00154Cr 1 E4 FF .word $FFE4 +00154Er 1 E5 FF .word $FFE5 +001550r 1 E6 FF .word $FFE6 +001552r 1 E7 FF .word $FFE7 +001554r 1 E8 FF .word $FFE8 +001556r 1 E9 FF .word $FFE9 +001558r 1 EA FF .word $FFEA +00155Ar 1 EB FF .word $FFEB +00155Cr 1 EC FF .word $FFEC +00155Er 1 ED FF .word $FFED +001560r 1 EE FF .word $FFEE +001562r 1 EF FF .word $FFEF +001564r 1 F0 FF .word $FFF0 +001566r 1 F1 FF .word $FFF1 +001568r 1 F2 FF .word $FFF2 +00156Ar 1 F3 FF .word $FFF3 +00156Cr 1 F4 FF .word $FFF4 +00156Er 1 F5 FF .word $FFF5 +001570r 1 F6 FF .word $FFF6 +001572r 1 F7 FF .word $FFF7 +001574r 1 F8 FF .word $FFF8 +001576r 1 F9 FF .word $FFF9 +001578r 1 FA FF .word $FFFA +00157Ar 1 FB FF .word $FFFB +00157Cr 1 FC FF .word $FFFC +00157Er 1 FD FF .word $FFFD +001580r 1 FE FF .word $FFFE +001582r 1 FF FF .word $FFFF +001584r 1 +001584r 1 ; alternative hex values +001584r 1 00 00 .word 0h +001586r 1 01 00 .word 1h +001588r 1 02 00 .word 2h +00158Ar 1 03 00 .word 3h +00158Cr 1 04 00 .word 4h +00158Er 1 05 00 .word 5h +001590r 1 06 00 .word 6h +001592r 1 07 00 .word 7h +001594r 1 08 00 .word 8h +001596r 1 09 00 .word 9h +001598r 1 0A 00 .word 0ah +00159Ar 1 0B 00 .word 0bh +00159Cr 1 0C 00 .word 0ch +00159Er 1 0D 00 .word 0dh +0015A0r 1 0E 00 .word 0eh +0015A2r 1 0F 00 .word 0fh +0015A4r 1 10 00 .word 10h +0015A6r 1 11 00 .word 11h +0015A8r 1 12 00 .word 12h +0015AAr 1 13 00 .word 13h +0015ACr 1 70 00 .word 70h +0015AEr 1 71 00 .word 71h +0015B0r 1 72 00 .word 72h +0015B2r 1 73 00 .word 73h +0015B4r 1 74 00 .word 74h +0015B6r 1 75 00 .word 75h +0015B8r 1 76 00 .word 76h +0015BAr 1 77 00 .word 77h +0015BCr 1 78 00 .word 78h +0015BEr 1 79 00 .word 79h +0015C0r 1 7A 00 .word 7ah +0015C2r 1 7B 00 .word 7bh +0015C4r 1 7C 00 .word 7ch +0015C6r 1 7D 00 .word 7dh +0015C8r 1 7E 00 .word 7eh +0015CAr 1 7F 00 .word 7fh +0015CCr 1 80 00 .word 80h +0015CEr 1 81 00 .word 81h +0015D0r 1 82 00 .word 82h +0015D2r 1 83 00 .word 83h +0015D4r 1 84 00 .word 84h +0015D6r 1 85 00 .word 85h +0015D8r 1 86 00 .word 86h +0015DAr 1 F0 00 .word 0f0h +0015DCr 1 F1 00 .word 0f1h +0015DEr 1 F2 00 .word 0f2h +0015E0r 1 F3 00 .word 0f3h +0015E2r 1 F4 00 .word 0f4h +0015E4r 1 F5 00 .word 0f5h +0015E6r 1 F6 00 .word 0f6h +0015E8r 1 F7 00 .word 0f7h +0015EAr 1 F8 00 .word 0f8h +0015ECr 1 F9 00 .word 0f9h +0015EEr 1 FA 00 .word 0fah +0015F0r 1 FB 00 .word 0fbh +0015F2r 1 FC 00 .word 0fch +0015F4r 1 FD 00 .word 0fdh +0015F6r 1 FE 00 .word 0feh +0015F8r 1 FF 00 .word 0ffh +0015FAr 1 00 01 .word 100h +0015FCr 1 01 01 .word 101h +0015FEr 1 02 01 .word 102h +001600r 1 03 01 .word 103h +001602r 1 D2 0F .word 0fd2h +001604r 1 D3 0F .word 0fd3h +001606r 1 D4 0F .word 0fd4h +001608r 1 D5 0F .word 0fd5h +00160Ar 1 D6 0F .word 0fd6h +00160Cr 1 D7 0F .word 0fd7h +00160Er 1 D8 0F .word 0fd8h +001610r 1 D9 0F .word 0fd9h +001612r 1 DA 0F .word 0fdah +001614r 1 DB 0F .word 0fdbh +001616r 1 DC 0F .word 0fdch +001618r 1 DD 0F .word 0fddh +00161Ar 1 DE 0F .word 0fdeh +00161Cr 1 DF 0F .word 0fdfh +00161Er 1 E0 0F .word 0fe0h +001620r 1 E1 0F .word 0fe1h +001622r 1 E2 0F .word 0fe2h +001624r 1 E3 0F .word 0fe3h +001626r 1 E4 0F .word 0fe4h +001628r 1 E5 0F .word 0fe5h +00162Ar 1 E6 0F .word 0fe6h +00162Cr 1 E7 0F .word 0fe7h +00162Er 1 E8 0F .word 0fe8h +001630r 1 E9 0F .word 0fe9h +001632r 1 EA 0F .word 0feah +001634r 1 EB 0F .word 0febh +001636r 1 EC 0F .word 0fech +001638r 1 ED 0F .word 0fedh +00163Ar 1 EE 0F .word 0feeh +00163Cr 1 EF 0F .word 0fefh +00163Er 1 F0 0F .word 0ff0h +001640r 1 F1 0F .word 0ff1h +001642r 1 F2 0F .word 0ff2h +001644r 1 F3 0F .word 0ff3h +001646r 1 F4 0F .word 0ff4h +001648r 1 F5 0F .word 0ff5h +00164Ar 1 F6 0F .word 0ff6h +00164Cr 1 F7 0F .word 0ff7h +00164Er 1 F8 0F .word 0ff8h +001650r 1 F9 0F .word 0ff9h +001652r 1 FA 0F .word 0ffah +001654r 1 FB 0F .word 0ffbh +001656r 1 FC 0F .word 0ffch +001658r 1 FD 0F .word 0ffdh +00165Ar 1 FE 0F .word 0ffeh +00165Cr 1 FF 0F .word 0fffh +00165Er 1 00 10 .word 1000h +001660r 1 01 10 .word 1001h +001662r 1 02 10 .word 1002h +001664r 1 03 10 .word 1003h +001666r 1 04 10 .word 1004h +001668r 1 05 10 .word 1005h +00166Ar 1 06 10 .word 1006h +00166Cr 1 07 10 .word 1007h +00166Er 1 08 10 .word 1008h +001670r 1 F0 7F .word 7ff0h +001672r 1 F1 7F .word 7ff1h +001674r 1 F2 7F .word 7ff2h +001676r 1 F3 7F .word 7ff3h +001678r 1 F4 7F .word 7ff4h +00167Ar 1 F5 7F .word 7ff5h +00167Cr 1 F6 7F .word 7ff6h +00167Er 1 F7 7F .word 7ff7h +001680r 1 F8 7F .word 7ff8h +001682r 1 F9 7F .word 7ff9h +001684r 1 FA 7F .word 7ffah +001686r 1 FB 7F .word 7ffbh +001688r 1 FC 7F .word 7ffch +00168Ar 1 FD 7F .word 7ffdh +00168Cr 1 FE 7F .word 7ffeh +00168Er 1 FF 7F .word 7fffh +001690r 1 00 80 .word 8000h +001692r 1 01 80 .word 8001h +001694r 1 02 80 .word 8002h +001696r 1 03 80 .word 8003h +001698r 1 04 80 .word 8004h +00169Ar 1 05 80 .word 8005h +00169Cr 1 06 80 .word 8006h +00169Er 1 07 80 .word 8007h +0016A0r 1 08 80 .word 8008h +0016A2r 1 09 80 .word 8009h +0016A4r 1 0A 80 .word 800ah +0016A6r 1 0B 80 .word 800bh +0016A8r 1 E1 9F .word 9fe1h +0016AAr 1 E2 9F .word 9fe2h +0016ACr 1 E3 9F .word 9fe3h +0016AEr 1 E4 9F .word 9fe4h +0016B0r 1 E5 9F .word 9fe5h +0016B2r 1 E6 9F .word 9fe6h +0016B4r 1 E7 9F .word 9fe7h +0016B6r 1 E8 9F .word 9fe8h +0016B8r 1 E9 9F .word 9fe9h +0016BAr 1 EA 9F .word 9feah +0016BCr 1 EB 9F .word 9febh +0016BEr 1 EC 9F .word 9fech +0016C0r 1 ED 9F .word 9fedh +0016C2r 1 EE 9F .word 9feeh +0016C4r 1 EF 9F .word 9fefh +0016C6r 1 F0 9F .word 9ff0h +0016C8r 1 F1 9F .word 9ff1h +0016CAr 1 F2 9F .word 9ff2h +0016CCr 1 F3 9F .word 9ff3h +0016CEr 1 F4 9F .word 9ff4h +0016D0r 1 F5 9F .word 9ff5h +0016D2r 1 F6 9F .word 9ff6h +0016D4r 1 F7 9F .word 9ff7h +0016D6r 1 F8 9F .word 9ff8h +0016D8r 1 F9 9F .word 9ff9h +0016DAr 1 FA 9F .word 9ffah +0016DCr 1 FB 9F .word 9ffbh +0016DEr 1 FC 9F .word 9ffch +0016E0r 1 FD 9F .word 9ffdh +0016E2r 1 FE 9F .word 9ffeh +0016E4r 1 FF 9F .word 9fffh +0016E6r 1 00 A0 .word 0a000h +0016E8r 1 01 A0 .word 0a001h +0016EAr 1 02 A0 .word 0a002h +0016ECr 1 03 A0 .word 0a003h +0016EEr 1 04 A0 .word 0a004h +0016F0r 1 05 A0 .word 0a005h +0016F2r 1 06 A0 .word 0a006h +0016F4r 1 07 A0 .word 0a007h +0016F6r 1 08 A0 .word 0a008h +0016F8r 1 09 A0 .word 0a009h +0016FAr 1 0A A0 .word 0a00ah +0016FCr 1 0B A0 .word 0a00bh +0016FEr 1 0C A0 .word 0a00ch +001700r 1 0D A0 .word 0a00dh +001702r 1 0E A0 .word 0a00eh +001704r 1 0F A0 .word 0a00fh +001706r 1 E1 AF .word 0afe1h +001708r 1 E2 AF .word 0afe2h +00170Ar 1 E3 AF .word 0afe3h +00170Cr 1 E4 AF .word 0afe4h +00170Er 1 E5 AF .word 0afe5h +001710r 1 E6 AF .word 0afe6h +001712r 1 E7 AF .word 0afe7h +001714r 1 E8 AF .word 0afe8h +001716r 1 E9 AF .word 0afe9h +001718r 1 EA AF .word 0afeah +00171Ar 1 EB AF .word 0afebh +00171Cr 1 EC AF .word 0afech +00171Er 1 ED AF .word 0afedh +001720r 1 EE AF .word 0afeeh +001722r 1 EF AF .word 0afefh +001724r 1 F0 AF .word 0aff0h +001726r 1 F1 AF .word 0aff1h +001728r 1 F2 AF .word 0aff2h +00172Ar 1 F3 AF .word 0aff3h +00172Cr 1 F4 AF .word 0aff4h +00172Er 1 F5 AF .word 0aff5h +001730r 1 F6 AF .word 0aff6h +001732r 1 F7 AF .word 0aff7h +001734r 1 F8 AF .word 0aff8h +001736r 1 F9 AF .word 0aff9h +001738r 1 FA AF .word 0affah +00173Ar 1 FB AF .word 0affbh +00173Cr 1 FC AF .word 0affch +00173Er 1 FD AF .word 0affdh +001740r 1 FE AF .word 0affeh +001742r 1 FF AF .word 0afffh +001744r 1 00 B0 .word 0b000h +001746r 1 01 B0 .word 0b001h +001748r 1 02 B0 .word 0b002h +00174Ar 1 03 B0 .word 0b003h +00174Cr 1 04 B0 .word 0b004h +00174Er 1 05 B0 .word 0b005h +001750r 1 06 B0 .word 0b006h +001752r 1 07 B0 .word 0b007h +001754r 1 08 B0 .word 0b008h +001756r 1 09 B0 .word 0b009h +001758r 1 0A B0 .word 0b00ah +00175Ar 1 0B B0 .word 0b00bh +00175Cr 1 0C B0 .word 0b00ch +00175Er 1 0D B0 .word 0b00dh +001760r 1 0E B0 .word 0b00eh +001762r 1 0F B0 .word 0b00fh +001764r 1 E1 BF .word 0bfe1h +001766r 1 E2 BF .word 0bfe2h +001768r 1 E3 BF .word 0bfe3h +00176Ar 1 E4 BF .word 0bfe4h +00176Cr 1 E5 BF .word 0bfe5h +00176Er 1 E6 BF .word 0bfe6h +001770r 1 E7 BF .word 0bfe7h +001772r 1 E8 BF .word 0bfe8h +001774r 1 E9 BF .word 0bfe9h +001776r 1 EA BF .word 0bfeah +001778r 1 EB BF .word 0bfebh +00177Ar 1 EC BF .word 0bfech +00177Cr 1 ED BF .word 0bfedh +00177Er 1 EE BF .word 0bfeeh +001780r 1 EF BF .word 0bfefh +001782r 1 F0 BF .word 0bff0h +001784r 1 F1 BF .word 0bff1h +001786r 1 F2 BF .word 0bff2h +001788r 1 F3 BF .word 0bff3h +00178Ar 1 F4 BF .word 0bff4h +00178Cr 1 F5 BF .word 0bff5h +00178Er 1 F6 BF .word 0bff6h +001790r 1 F7 BF .word 0bff7h +001792r 1 F8 BF .word 0bff8h +001794r 1 F9 BF .word 0bff9h +001796r 1 FA BF .word 0bffah +001798r 1 FB BF .word 0bffbh +00179Ar 1 FC BF .word 0bffch +00179Cr 1 FD BF .word 0bffdh +00179Er 1 FE BF .word 0bffeh +0017A0r 1 FF BF .word 0bfffh +0017A2r 1 00 C0 .word 0c000h +0017A4r 1 01 C0 .word 0c001h +0017A6r 1 02 C0 .word 0c002h +0017A8r 1 03 C0 .word 0c003h +0017AAr 1 04 C0 .word 0c004h +0017ACr 1 05 C0 .word 0c005h +0017AEr 1 06 C0 .word 0c006h +0017B0r 1 07 C0 .word 0c007h +0017B2r 1 08 C0 .word 0c008h +0017B4r 1 09 C0 .word 0c009h +0017B6r 1 0A C0 .word 0c00ah +0017B8r 1 0B C0 .word 0c00bh +0017BAr 1 0C C0 .word 0c00ch +0017BCr 1 0D C0 .word 0c00dh +0017BEr 1 0E C0 .word 0c00eh +0017C0r 1 0F C0 .word 0c00fh +0017C2r 1 E1 CF .word 0cfe1h +0017C4r 1 E2 CF .word 0cfe2h +0017C6r 1 E3 CF .word 0cfe3h +0017C8r 1 E4 CF .word 0cfe4h +0017CAr 1 E5 CF .word 0cfe5h +0017CCr 1 E6 CF .word 0cfe6h +0017CEr 1 E7 CF .word 0cfe7h +0017D0r 1 E8 CF .word 0cfe8h +0017D2r 1 E9 CF .word 0cfe9h +0017D4r 1 EA CF .word 0cfeah +0017D6r 1 EB CF .word 0cfebh +0017D8r 1 EC CF .word 0cfech +0017DAr 1 ED CF .word 0cfedh +0017DCr 1 EE CF .word 0cfeeh +0017DEr 1 EF CF .word 0cfefh +0017E0r 1 F0 CF .word 0cff0h +0017E2r 1 F1 CF .word 0cff1h +0017E4r 1 F2 CF .word 0cff2h +0017E6r 1 F3 CF .word 0cff3h +0017E8r 1 F4 CF .word 0cff4h +0017EAr 1 F5 CF .word 0cff5h +0017ECr 1 F6 CF .word 0cff6h +0017EEr 1 F7 CF .word 0cff7h +0017F0r 1 F8 CF .word 0cff8h +0017F2r 1 F9 CF .word 0cff9h +0017F4r 1 FA CF .word 0cffah +0017F6r 1 FB CF .word 0cffbh +0017F8r 1 FC CF .word 0cffch +0017FAr 1 FD CF .word 0cffdh +0017FCr 1 FE CF .word 0cffeh +0017FEr 1 FF CF .word 0cfffh +001800r 1 00 D0 .word 0d000h +001802r 1 01 D0 .word 0d001h +001804r 1 02 D0 .word 0d002h +001806r 1 03 D0 .word 0d003h +001808r 1 04 D0 .word 0d004h +00180Ar 1 05 D0 .word 0d005h +00180Cr 1 06 D0 .word 0d006h +00180Er 1 07 D0 .word 0d007h +001810r 1 08 D0 .word 0d008h +001812r 1 09 D0 .word 0d009h +001814r 1 0A D0 .word 0d00ah +001816r 1 0B D0 .word 0d00bh +001818r 1 0C D0 .word 0d00ch +00181Ar 1 0D D0 .word 0d00dh +00181Cr 1 0E D0 .word 0d00eh +00181Er 1 0F D0 .word 0d00fh +001820r 1 E1 DF .word 0dfe1h +001822r 1 E2 DF .word 0dfe2h +001824r 1 E3 DF .word 0dfe3h +001826r 1 E4 DF .word 0dfe4h +001828r 1 E5 DF .word 0dfe5h +00182Ar 1 E6 DF .word 0dfe6h +00182Cr 1 E7 DF .word 0dfe7h +00182Er 1 E8 DF .word 0dfe8h +001830r 1 E9 DF .word 0dfe9h +001832r 1 EA DF .word 0dfeah +001834r 1 EB DF .word 0dfebh +001836r 1 EC DF .word 0dfech +001838r 1 ED DF .word 0dfedh +00183Ar 1 EE DF .word 0dfeeh +00183Cr 1 EF DF .word 0dfefh +00183Er 1 F0 DF .word 0dff0h +001840r 1 F1 DF .word 0dff1h +001842r 1 F2 DF .word 0dff2h +001844r 1 F3 DF .word 0dff3h +001846r 1 F4 DF .word 0dff4h +001848r 1 F5 DF .word 0dff5h +00184Ar 1 F6 DF .word 0dff6h +00184Cr 1 F7 DF .word 0dff7h +00184Er 1 F8 DF .word 0dff8h +001850r 1 F9 DF .word 0dff9h +001852r 1 FA DF .word 0dffah +001854r 1 FB DF .word 0dffbh +001856r 1 FC DF .word 0dffch +001858r 1 FD DF .word 0dffdh +00185Ar 1 FE DF .word 0dffeh +00185Cr 1 FF DF .word 0dfffh +00185Er 1 00 E0 .word 0e000h +001860r 1 01 E0 .word 0e001h +001862r 1 02 E0 .word 0e002h +001864r 1 03 E0 .word 0e003h +001866r 1 04 E0 .word 0e004h +001868r 1 05 E0 .word 0e005h +00186Ar 1 06 E0 .word 0e006h +00186Cr 1 07 E0 .word 0e007h +00186Er 1 08 E0 .word 0e008h +001870r 1 09 E0 .word 0e009h +001872r 1 0A E0 .word 0e00ah +001874r 1 0B E0 .word 0e00bh +001876r 1 0C E0 .word 0e00ch +001878r 1 0D E0 .word 0e00dh +00187Ar 1 0E E0 .word 0e00eh +00187Cr 1 0F E0 .word 0e00fh +00187Er 1 E1 EF .word 0efe1h +001880r 1 E2 EF .word 0efe2h +001882r 1 E3 EF .word 0efe3h +001884r 1 E4 EF .word 0efe4h +001886r 1 E5 EF .word 0efe5h +001888r 1 E6 EF .word 0efe6h +00188Ar 1 E7 EF .word 0efe7h +00188Cr 1 E8 EF .word 0efe8h +00188Er 1 E9 EF .word 0efe9h +001890r 1 EA EF .word 0efeah +001892r 1 EB EF .word 0efebh +001894r 1 EC EF .word 0efech +001896r 1 ED EF .word 0efedh +001898r 1 EE EF .word 0efeeh +00189Ar 1 EF EF .word 0efefh +00189Cr 1 F0 EF .word 0eff0h +00189Er 1 F1 EF .word 0eff1h +0018A0r 1 F2 EF .word 0eff2h +0018A2r 1 F3 EF .word 0eff3h +0018A4r 1 F4 EF .word 0eff4h +0018A6r 1 F5 EF .word 0eff5h +0018A8r 1 F6 EF .word 0eff6h +0018AAr 1 F7 EF .word 0eff7h +0018ACr 1 F8 EF .word 0eff8h +0018AEr 1 F9 EF .word 0eff9h +0018B0r 1 FA EF .word 0effah +0018B2r 1 FB EF .word 0effbh +0018B4r 1 FC EF .word 0effch +0018B6r 1 FD EF .word 0effdh +0018B8r 1 FE EF .word 0effeh +0018BAr 1 FF EF .word 0efffh +0018BCr 1 00 F0 .word 0f000h +0018BEr 1 01 F0 .word 0f001h +0018C0r 1 02 F0 .word 0f002h +0018C2r 1 03 F0 .word 0f003h +0018C4r 1 04 F0 .word 0f004h +0018C6r 1 05 F0 .word 0f005h +0018C8r 1 06 F0 .word 0f006h +0018CAr 1 07 F0 .word 0f007h +0018CCr 1 08 F0 .word 0f008h +0018CEr 1 09 F0 .word 0f009h +0018D0r 1 0A F0 .word 0f00ah +0018D2r 1 0B F0 .word 0f00bh +0018D4r 1 0C F0 .word 0f00ch +0018D6r 1 0D F0 .word 0f00dh +0018D8r 1 0E F0 .word 0f00eh +0018DAr 1 0F F0 .word 0f00fh +0018DCr 1 E1 FF .word 0ffe1h +0018DEr 1 E2 FF .word 0ffe2h +0018E0r 1 E3 FF .word 0ffe3h +0018E2r 1 E4 FF .word 0ffe4h +0018E4r 1 E5 FF .word 0ffe5h +0018E6r 1 E6 FF .word 0ffe6h +0018E8r 1 E7 FF .word 0ffe7h +0018EAr 1 E8 FF .word 0ffe8h +0018ECr 1 E9 FF .word 0ffe9h +0018EEr 1 EA FF .word 0ffeah +0018F0r 1 EB FF .word 0ffebh +0018F2r 1 EC FF .word 0ffech +0018F4r 1 ED FF .word 0ffedh +0018F6r 1 EE FF .word 0ffeeh +0018F8r 1 EF FF .word 0ffefh +0018FAr 1 F0 FF .word 0fff0h +0018FCr 1 F1 FF .word 0fff1h +0018FEr 1 F2 FF .word 0fff2h +001900r 1 F3 FF .word 0fff3h +001902r 1 F4 FF .word 0fff4h +001904r 1 F5 FF .word 0fff5h +001906r 1 F6 FF .word 0fff6h +001908r 1 F7 FF .word 0fff7h +00190Ar 1 F8 FF .word 0fff8h +00190Cr 1 F9 FF .word 0fff9h +00190Er 1 FA FF .word 0fffah +001910r 1 FB FF .word 0fffbh +001912r 1 FC FF .word 0fffch +001914r 1 FD FF .word 0fffdh +001916r 1 FE FF .word 0fffeh +001918r 1 FF FF .word 0ffffh +00191Ar 1 +00191Ar 1 ; alternative hex values, uppercase +00191Ar 1 00 00 .word 0h +00191Cr 1 01 00 .word 1h +00191Er 1 02 00 .word 2h +001920r 1 03 00 .word 3h +001922r 1 04 00 .word 4h +001924r 1 05 00 .word 5h +001926r 1 06 00 .word 6h +001928r 1 07 00 .word 7h +00192Ar 1 08 00 .word 8h +00192Cr 1 09 00 .word 9h +00192Er 1 0A 00 .word 0Ah +001930r 1 0B 00 .word 0Bh +001932r 1 0C 00 .word 0Ch +001934r 1 0D 00 .word 0Dh +001936r 1 0E 00 .word 0Eh +001938r 1 0F 00 .word 0Fh +00193Ar 1 10 00 .word 10h +00193Cr 1 11 00 .word 11h +00193Er 1 12 00 .word 12h +001940r 1 13 00 .word 13h +001942r 1 70 00 .word 70h +001944r 1 71 00 .word 71h +001946r 1 72 00 .word 72h +001948r 1 73 00 .word 73h +00194Ar 1 74 00 .word 74h +00194Cr 1 75 00 .word 75h +00194Er 1 76 00 .word 76h +001950r 1 77 00 .word 77h +001952r 1 78 00 .word 78h +001954r 1 79 00 .word 79h +001956r 1 7A 00 .word 7Ah +001958r 1 7B 00 .word 7Bh +00195Ar 1 7C 00 .word 7Ch +00195Cr 1 7D 00 .word 7Dh +00195Er 1 7E 00 .word 7Eh +001960r 1 7F 00 .word 7Fh +001962r 1 80 00 .word 80h +001964r 1 81 00 .word 81h +001966r 1 82 00 .word 82h +001968r 1 83 00 .word 83h +00196Ar 1 84 00 .word 84h +00196Cr 1 85 00 .word 85h +00196Er 1 86 00 .word 86h +001970r 1 F0 00 .word 0F0h +001972r 1 F1 00 .word 0F1h +001974r 1 F2 00 .word 0F2h +001976r 1 F3 00 .word 0F3h +001978r 1 F4 00 .word 0F4h +00197Ar 1 F5 00 .word 0F5h +00197Cr 1 F6 00 .word 0F6h +00197Er 1 F7 00 .word 0F7h +001980r 1 F8 00 .word 0F8h +001982r 1 F9 00 .word 0F9h +001984r 1 FA 00 .word 0FAh +001986r 1 FB 00 .word 0FBh +001988r 1 FC 00 .word 0FCh +00198Ar 1 FD 00 .word 0FDh +00198Cr 1 FE 00 .word 0FEh +00198Er 1 FF 00 .word 0FFh +001990r 1 00 01 .word 100h +001992r 1 01 01 .word 101h +001994r 1 02 01 .word 102h +001996r 1 03 01 .word 103h +001998r 1 D2 0F .word 0FD2h +00199Ar 1 D3 0F .word 0FD3h +00199Cr 1 D4 0F .word 0FD4h +00199Er 1 D5 0F .word 0FD5h +0019A0r 1 D6 0F .word 0FD6h +0019A2r 1 D7 0F .word 0FD7h +0019A4r 1 D8 0F .word 0FD8h +0019A6r 1 D9 0F .word 0FD9h +0019A8r 1 DA 0F .word 0FDAh +0019AAr 1 DB 0F .word 0FDBh +0019ACr 1 DC 0F .word 0FDCh +0019AEr 1 DD 0F .word 0FDDh +0019B0r 1 DE 0F .word 0FDEh +0019B2r 1 DF 0F .word 0FDFh +0019B4r 1 E0 0F .word 0FE0h +0019B6r 1 E1 0F .word 0FE1h +0019B8r 1 E2 0F .word 0FE2h +0019BAr 1 E3 0F .word 0FE3h +0019BCr 1 E4 0F .word 0FE4h +0019BEr 1 E5 0F .word 0FE5h +0019C0r 1 E6 0F .word 0FE6h +0019C2r 1 E7 0F .word 0FE7h +0019C4r 1 E8 0F .word 0FE8h +0019C6r 1 E9 0F .word 0FE9h +0019C8r 1 EA 0F .word 0FEAh +0019CAr 1 EB 0F .word 0FEBh +0019CCr 1 EC 0F .word 0FECh +0019CEr 1 ED 0F .word 0FEDh +0019D0r 1 EE 0F .word 0FEEh +0019D2r 1 EF 0F .word 0FEFh +0019D4r 1 F0 0F .word 0FF0h +0019D6r 1 F1 0F .word 0FF1h +0019D8r 1 F2 0F .word 0FF2h +0019DAr 1 F3 0F .word 0FF3h +0019DCr 1 F4 0F .word 0FF4h +0019DEr 1 F5 0F .word 0FF5h +0019E0r 1 F6 0F .word 0FF6h +0019E2r 1 F7 0F .word 0FF7h +0019E4r 1 F8 0F .word 0FF8h +0019E6r 1 F9 0F .word 0FF9h +0019E8r 1 FA 0F .word 0FFAh +0019EAr 1 FB 0F .word 0FFBh +0019ECr 1 FC 0F .word 0FFCh +0019EEr 1 FD 0F .word 0FFDh +0019F0r 1 FE 0F .word 0FFEh +0019F2r 1 FF 0F .word 0FFFh +0019F4r 1 00 10 .word 1000h +0019F6r 1 01 10 .word 1001h +0019F8r 1 02 10 .word 1002h +0019FAr 1 03 10 .word 1003h +0019FCr 1 04 10 .word 1004h +0019FEr 1 05 10 .word 1005h +001A00r 1 06 10 .word 1006h +001A02r 1 07 10 .word 1007h +001A04r 1 08 10 .word 1008h +001A06r 1 F0 7F .word 7FF0h +001A08r 1 F1 7F .word 7FF1h +001A0Ar 1 F2 7F .word 7FF2h +001A0Cr 1 F3 7F .word 7FF3h +001A0Er 1 F4 7F .word 7FF4h +001A10r 1 F5 7F .word 7FF5h +001A12r 1 F6 7F .word 7FF6h +001A14r 1 F7 7F .word 7FF7h +001A16r 1 F8 7F .word 7FF8h +001A18r 1 F9 7F .word 7FF9h +001A1Ar 1 FA 7F .word 7FFAh +001A1Cr 1 FB 7F .word 7FFBh +001A1Er 1 FC 7F .word 7FFCh +001A20r 1 FD 7F .word 7FFDh +001A22r 1 FE 7F .word 7FFEh +001A24r 1 FF 7F .word 7FFFh +001A26r 1 00 80 .word 8000h +001A28r 1 01 80 .word 8001h +001A2Ar 1 02 80 .word 8002h +001A2Cr 1 03 80 .word 8003h +001A2Er 1 04 80 .word 8004h +001A30r 1 05 80 .word 8005h +001A32r 1 06 80 .word 8006h +001A34r 1 07 80 .word 8007h +001A36r 1 08 80 .word 8008h +001A38r 1 09 80 .word 8009h +001A3Ar 1 0A 80 .word 800Ah +001A3Cr 1 0B 80 .word 800Bh +001A3Er 1 E1 9F .word 9FE1h +001A40r 1 E2 9F .word 9FE2h +001A42r 1 E3 9F .word 9FE3h +001A44r 1 E4 9F .word 9FE4h +001A46r 1 E5 9F .word 9FE5h +001A48r 1 E6 9F .word 9FE6h +001A4Ar 1 E7 9F .word 9FE7h +001A4Cr 1 E8 9F .word 9FE8h +001A4Er 1 E9 9F .word 9FE9h +001A50r 1 EA 9F .word 9FEAh +001A52r 1 EB 9F .word 9FEBh +001A54r 1 EC 9F .word 9FECh +001A56r 1 ED 9F .word 9FEDh +001A58r 1 EE 9F .word 9FEEh +001A5Ar 1 EF 9F .word 9FEFh +001A5Cr 1 F0 9F .word 9FF0h +001A5Er 1 F1 9F .word 9FF1h +001A60r 1 F2 9F .word 9FF2h +001A62r 1 F3 9F .word 9FF3h +001A64r 1 F4 9F .word 9FF4h +001A66r 1 F5 9F .word 9FF5h +001A68r 1 F6 9F .word 9FF6h +001A6Ar 1 F7 9F .word 9FF7h +001A6Cr 1 F8 9F .word 9FF8h +001A6Er 1 F9 9F .word 9FF9h +001A70r 1 FA 9F .word 9FFAh +001A72r 1 FB 9F .word 9FFBh +001A74r 1 FC 9F .word 9FFCh +001A76r 1 FD 9F .word 9FFDh +001A78r 1 FE 9F .word 9FFEh +001A7Ar 1 FF 9F .word 9FFFh +001A7Cr 1 00 A0 .word 0A000h +001A7Er 1 01 A0 .word 0A001h +001A80r 1 02 A0 .word 0A002h +001A82r 1 03 A0 .word 0A003h +001A84r 1 04 A0 .word 0A004h +001A86r 1 05 A0 .word 0A005h +001A88r 1 06 A0 .word 0A006h +001A8Ar 1 07 A0 .word 0A007h +001A8Cr 1 08 A0 .word 0A008h +001A8Er 1 09 A0 .word 0A009h +001A90r 1 0A A0 .word 0A00Ah +001A92r 1 0B A0 .word 0A00Bh +001A94r 1 0C A0 .word 0A00Ch +001A96r 1 0D A0 .word 0A00Dh +001A98r 1 0E A0 .word 0A00Eh +001A9Ar 1 0F A0 .word 0A00Fh +001A9Cr 1 E1 AF .word 0AFE1h +001A9Er 1 E2 AF .word 0AFE2h +001AA0r 1 E3 AF .word 0AFE3h +001AA2r 1 E4 AF .word 0AFE4h +001AA4r 1 E5 AF .word 0AFE5h +001AA6r 1 E6 AF .word 0AFE6h +001AA8r 1 E7 AF .word 0AFE7h +001AAAr 1 E8 AF .word 0AFE8h +001AACr 1 E9 AF .word 0AFE9h +001AAEr 1 EA AF .word 0AFEAh +001AB0r 1 EB AF .word 0AFEBh +001AB2r 1 EC AF .word 0AFECh +001AB4r 1 ED AF .word 0AFEDh +001AB6r 1 EE AF .word 0AFEEh +001AB8r 1 EF AF .word 0AFEFh +001ABAr 1 F0 AF .word 0AFF0h +001ABCr 1 F1 AF .word 0AFF1h +001ABEr 1 F2 AF .word 0AFF2h +001AC0r 1 F3 AF .word 0AFF3h +001AC2r 1 F4 AF .word 0AFF4h +001AC4r 1 F5 AF .word 0AFF5h +001AC6r 1 F6 AF .word 0AFF6h +001AC8r 1 F7 AF .word 0AFF7h +001ACAr 1 F8 AF .word 0AFF8h +001ACCr 1 F9 AF .word 0AFF9h +001ACEr 1 FA AF .word 0AFFAh +001AD0r 1 FB AF .word 0AFFBh +001AD2r 1 FC AF .word 0AFFCh +001AD4r 1 FD AF .word 0AFFDh +001AD6r 1 FE AF .word 0AFFEh +001AD8r 1 FF AF .word 0AFFFh +001ADAr 1 00 B0 .word 0B000h +001ADCr 1 01 B0 .word 0B001h +001ADEr 1 02 B0 .word 0B002h +001AE0r 1 03 B0 .word 0B003h +001AE2r 1 04 B0 .word 0B004h +001AE4r 1 05 B0 .word 0B005h +001AE6r 1 06 B0 .word 0B006h +001AE8r 1 07 B0 .word 0B007h +001AEAr 1 08 B0 .word 0B008h +001AECr 1 09 B0 .word 0B009h +001AEEr 1 0A B0 .word 0B00Ah +001AF0r 1 0B B0 .word 0B00Bh +001AF2r 1 0C B0 .word 0B00Ch +001AF4r 1 0D B0 .word 0B00Dh +001AF6r 1 0E B0 .word 0B00Eh +001AF8r 1 0F B0 .word 0B00Fh +001AFAr 1 E1 BF .word 0BFE1h +001AFCr 1 E2 BF .word 0BFE2h +001AFEr 1 E3 BF .word 0BFE3h +001B00r 1 E4 BF .word 0BFE4h +001B02r 1 E5 BF .word 0BFE5h +001B04r 1 E6 BF .word 0BFE6h +001B06r 1 E7 BF .word 0BFE7h +001B08r 1 E8 BF .word 0BFE8h +001B0Ar 1 E9 BF .word 0BFE9h +001B0Cr 1 EA BF .word 0BFEAh +001B0Er 1 EB BF .word 0BFEBh +001B10r 1 EC BF .word 0BFECh +001B12r 1 ED BF .word 0BFEDh +001B14r 1 EE BF .word 0BFEEh +001B16r 1 EF BF .word 0BFEFh +001B18r 1 F0 BF .word 0BFF0h +001B1Ar 1 F1 BF .word 0BFF1h +001B1Cr 1 F2 BF .word 0BFF2h +001B1Er 1 F3 BF .word 0BFF3h +001B20r 1 F4 BF .word 0BFF4h +001B22r 1 F5 BF .word 0BFF5h +001B24r 1 F6 BF .word 0BFF6h +001B26r 1 F7 BF .word 0BFF7h +001B28r 1 F8 BF .word 0BFF8h +001B2Ar 1 F9 BF .word 0BFF9h +001B2Cr 1 FA BF .word 0BFFAh +001B2Er 1 FB BF .word 0BFFBh +001B30r 1 FC BF .word 0BFFCh +001B32r 1 FD BF .word 0BFFDh +001B34r 1 FE BF .word 0BFFEh +001B36r 1 FF BF .word 0BFFFh +001B38r 1 00 C0 .word 0C000h +001B3Ar 1 01 C0 .word 0C001h +001B3Cr 1 02 C0 .word 0C002h +001B3Er 1 03 C0 .word 0C003h +001B40r 1 04 C0 .word 0C004h +001B42r 1 05 C0 .word 0C005h +001B44r 1 06 C0 .word 0C006h +001B46r 1 07 C0 .word 0C007h +001B48r 1 08 C0 .word 0C008h +001B4Ar 1 09 C0 .word 0C009h +001B4Cr 1 0A C0 .word 0C00Ah +001B4Er 1 0B C0 .word 0C00Bh +001B50r 1 0C C0 .word 0C00Ch +001B52r 1 0D C0 .word 0C00Dh +001B54r 1 0E C0 .word 0C00Eh +001B56r 1 0F C0 .word 0C00Fh +001B58r 1 E1 CF .word 0CFE1h +001B5Ar 1 E2 CF .word 0CFE2h +001B5Cr 1 E3 CF .word 0CFE3h +001B5Er 1 E4 CF .word 0CFE4h +001B60r 1 E5 CF .word 0CFE5h +001B62r 1 E6 CF .word 0CFE6h +001B64r 1 E7 CF .word 0CFE7h +001B66r 1 E8 CF .word 0CFE8h +001B68r 1 E9 CF .word 0CFE9h +001B6Ar 1 EA CF .word 0CFEAh +001B6Cr 1 EB CF .word 0CFEBh +001B6Er 1 EC CF .word 0CFECh +001B70r 1 ED CF .word 0CFEDh +001B72r 1 EE CF .word 0CFEEh +001B74r 1 EF CF .word 0CFEFh +001B76r 1 F0 CF .word 0CFF0h +001B78r 1 F1 CF .word 0CFF1h +001B7Ar 1 F2 CF .word 0CFF2h +001B7Cr 1 F3 CF .word 0CFF3h +001B7Er 1 F4 CF .word 0CFF4h +001B80r 1 F5 CF .word 0CFF5h +001B82r 1 F6 CF .word 0CFF6h +001B84r 1 F7 CF .word 0CFF7h +001B86r 1 F8 CF .word 0CFF8h +001B88r 1 F9 CF .word 0CFF9h +001B8Ar 1 FA CF .word 0CFFAh +001B8Cr 1 FB CF .word 0CFFBh +001B8Er 1 FC CF .word 0CFFCh +001B90r 1 FD CF .word 0CFFDh +001B92r 1 FE CF .word 0CFFEh +001B94r 1 FF CF .word 0CFFFh +001B96r 1 00 D0 .word 0D000h +001B98r 1 01 D0 .word 0D001h +001B9Ar 1 02 D0 .word 0D002h +001B9Cr 1 03 D0 .word 0D003h +001B9Er 1 04 D0 .word 0D004h +001BA0r 1 05 D0 .word 0D005h +001BA2r 1 06 D0 .word 0D006h +001BA4r 1 07 D0 .word 0D007h +001BA6r 1 08 D0 .word 0D008h +001BA8r 1 09 D0 .word 0D009h +001BAAr 1 0A D0 .word 0D00Ah +001BACr 1 0B D0 .word 0D00Bh +001BAEr 1 0C D0 .word 0D00Ch +001BB0r 1 0D D0 .word 0D00Dh +001BB2r 1 0E D0 .word 0D00Eh +001BB4r 1 0F D0 .word 0D00Fh +001BB6r 1 E1 DF .word 0DFE1h +001BB8r 1 E2 DF .word 0DFE2h +001BBAr 1 E3 DF .word 0DFE3h +001BBCr 1 E4 DF .word 0DFE4h +001BBEr 1 E5 DF .word 0DFE5h +001BC0r 1 E6 DF .word 0DFE6h +001BC2r 1 E7 DF .word 0DFE7h +001BC4r 1 E8 DF .word 0DFE8h +001BC6r 1 E9 DF .word 0DFE9h +001BC8r 1 EA DF .word 0DFEAh +001BCAr 1 EB DF .word 0DFEBh +001BCCr 1 EC DF .word 0DFECh +001BCEr 1 ED DF .word 0DFEDh +001BD0r 1 EE DF .word 0DFEEh +001BD2r 1 EF DF .word 0DFEFh +001BD4r 1 F0 DF .word 0DFF0h +001BD6r 1 F1 DF .word 0DFF1h +001BD8r 1 F2 DF .word 0DFF2h +001BDAr 1 F3 DF .word 0DFF3h +001BDCr 1 F4 DF .word 0DFF4h +001BDEr 1 F5 DF .word 0DFF5h +001BE0r 1 F6 DF .word 0DFF6h +001BE2r 1 F7 DF .word 0DFF7h +001BE4r 1 F8 DF .word 0DFF8h +001BE6r 1 F9 DF .word 0DFF9h +001BE8r 1 FA DF .word 0DFFAh +001BEAr 1 FB DF .word 0DFFBh +001BECr 1 FC DF .word 0DFFCh +001BEEr 1 FD DF .word 0DFFDh +001BF0r 1 FE DF .word 0DFFEh +001BF2r 1 FF DF .word 0DFFFh +001BF4r 1 00 E0 .word 0E000h +001BF6r 1 01 E0 .word 0E001h +001BF8r 1 02 E0 .word 0E002h +001BFAr 1 03 E0 .word 0E003h +001BFCr 1 04 E0 .word 0E004h +001BFEr 1 05 E0 .word 0E005h +001C00r 1 06 E0 .word 0E006h +001C02r 1 07 E0 .word 0E007h +001C04r 1 08 E0 .word 0E008h +001C06r 1 09 E0 .word 0E009h +001C08r 1 0A E0 .word 0E00Ah +001C0Ar 1 0B E0 .word 0E00Bh +001C0Cr 1 0C E0 .word 0E00Ch +001C0Er 1 0D E0 .word 0E00Dh +001C10r 1 0E E0 .word 0E00Eh +001C12r 1 0F E0 .word 0E00Fh +001C14r 1 E1 EF .word 0EFE1h +001C16r 1 E2 EF .word 0EFE2h +001C18r 1 E3 EF .word 0EFE3h +001C1Ar 1 E4 EF .word 0EFE4h +001C1Cr 1 E5 EF .word 0EFE5h +001C1Er 1 E6 EF .word 0EFE6h +001C20r 1 E7 EF .word 0EFE7h +001C22r 1 E8 EF .word 0EFE8h +001C24r 1 E9 EF .word 0EFE9h +001C26r 1 EA EF .word 0EFEAh +001C28r 1 EB EF .word 0EFEBh +001C2Ar 1 EC EF .word 0EFECh +001C2Cr 1 ED EF .word 0EFEDh +001C2Er 1 EE EF .word 0EFEEh +001C30r 1 EF EF .word 0EFEFh +001C32r 1 F0 EF .word 0EFF0h +001C34r 1 F1 EF .word 0EFF1h +001C36r 1 F2 EF .word 0EFF2h +001C38r 1 F3 EF .word 0EFF3h +001C3Ar 1 F4 EF .word 0EFF4h +001C3Cr 1 F5 EF .word 0EFF5h +001C3Er 1 F6 EF .word 0EFF6h +001C40r 1 F7 EF .word 0EFF7h +001C42r 1 F8 EF .word 0EFF8h +001C44r 1 F9 EF .word 0EFF9h +001C46r 1 FA EF .word 0EFFAh +001C48r 1 FB EF .word 0EFFBh +001C4Ar 1 FC EF .word 0EFFCh +001C4Cr 1 FD EF .word 0EFFDh +001C4Er 1 FE EF .word 0EFFEh +001C50r 1 FF EF .word 0EFFFh +001C52r 1 00 F0 .word 0F000h +001C54r 1 01 F0 .word 0F001h +001C56r 1 02 F0 .word 0F002h +001C58r 1 03 F0 .word 0F003h +001C5Ar 1 04 F0 .word 0F004h +001C5Cr 1 05 F0 .word 0F005h +001C5Er 1 06 F0 .word 0F006h +001C60r 1 07 F0 .word 0F007h +001C62r 1 08 F0 .word 0F008h +001C64r 1 09 F0 .word 0F009h +001C66r 1 0A F0 .word 0F00Ah +001C68r 1 0B F0 .word 0F00Bh +001C6Ar 1 0C F0 .word 0F00Ch +001C6Cr 1 0D F0 .word 0F00Dh +001C6Er 1 0E F0 .word 0F00Eh +001C70r 1 0F F0 .word 0F00Fh +001C72r 1 E1 FF .word 0FFE1h +001C74r 1 E2 FF .word 0FFE2h +001C76r 1 E3 FF .word 0FFE3h +001C78r 1 E4 FF .word 0FFE4h +001C7Ar 1 E5 FF .word 0FFE5h +001C7Cr 1 E6 FF .word 0FFE6h +001C7Er 1 E7 FF .word 0FFE7h +001C80r 1 E8 FF .word 0FFE8h +001C82r 1 E9 FF .word 0FFE9h +001C84r 1 EA FF .word 0FFEAh +001C86r 1 EB FF .word 0FFEBh +001C88r 1 EC FF .word 0FFECh +001C8Ar 1 ED FF .word 0FFEDh +001C8Cr 1 EE FF .word 0FFEEh +001C8Er 1 EF FF .word 0FFEFh +001C90r 1 F0 FF .word 0FFF0h +001C92r 1 F1 FF .word 0FFF1h +001C94r 1 F2 FF .word 0FFF2h +001C96r 1 F3 FF .word 0FFF3h +001C98r 1 F4 FF .word 0FFF4h +001C9Ar 1 F5 FF .word 0FFF5h +001C9Cr 1 F6 FF .word 0FFF6h +001C9Er 1 F7 FF .word 0FFF7h +001CA0r 1 F8 FF .word 0FFF8h +001CA2r 1 F9 FF .word 0FFF9h +001CA4r 1 FA FF .word 0FFFAh +001CA6r 1 FB FF .word 0FFFBh +001CA8r 1 FC FF .word 0FFFCh +001CAAr 1 FD FF .word 0FFFDh +001CACr 1 FE FF .word 0FFFEh +001CAEr 1 FF FF .word 0FFFFh +001CB0r 1 +001CB0r 1 ; alternative 4-digit hex values +001CB0r 1 00 00 .word 0000h +001CB2r 1 01 00 .word 0001h +001CB4r 1 02 00 .word 0002h +001CB6r 1 03 00 .word 0003h +001CB8r 1 04 00 .word 0004h +001CBAr 1 05 00 .word 0005h +001CBCr 1 06 00 .word 0006h +001CBEr 1 07 00 .word 0007h +001CC0r 1 08 00 .word 0008h +001CC2r 1 09 00 .word 0009h +001CC4r 1 0A 00 .word 000ah +001CC6r 1 0B 00 .word 000bh +001CC8r 1 0C 00 .word 000ch +001CCAr 1 0D 00 .word 000dh +001CCCr 1 0E 00 .word 000eh +001CCEr 1 0F 00 .word 000fh +001CD0r 1 10 00 .word 0010h +001CD2r 1 11 00 .word 0011h +001CD4r 1 12 00 .word 0012h +001CD6r 1 13 00 .word 0013h +001CD8r 1 70 00 .word 0070h +001CDAr 1 71 00 .word 0071h +001CDCr 1 72 00 .word 0072h +001CDEr 1 73 00 .word 0073h +001CE0r 1 74 00 .word 0074h +001CE2r 1 75 00 .word 0075h +001CE4r 1 76 00 .word 0076h +001CE6r 1 77 00 .word 0077h +001CE8r 1 78 00 .word 0078h +001CEAr 1 79 00 .word 0079h +001CECr 1 7A 00 .word 007ah +001CEEr 1 7B 00 .word 007bh +001CF0r 1 7C 00 .word 007ch +001CF2r 1 7D 00 .word 007dh +001CF4r 1 7E 00 .word 007eh +001CF6r 1 7F 00 .word 007fh +001CF8r 1 80 00 .word 0080h +001CFAr 1 81 00 .word 0081h +001CFCr 1 82 00 .word 0082h +001CFEr 1 83 00 .word 0083h +001D00r 1 84 00 .word 0084h +001D02r 1 85 00 .word 0085h +001D04r 1 86 00 .word 0086h +001D06r 1 F0 00 .word 00f0h +001D08r 1 F1 00 .word 00f1h +001D0Ar 1 F2 00 .word 00f2h +001D0Cr 1 F3 00 .word 00f3h +001D0Er 1 F4 00 .word 00f4h +001D10r 1 F5 00 .word 00f5h +001D12r 1 F6 00 .word 00f6h +001D14r 1 F7 00 .word 00f7h +001D16r 1 F8 00 .word 00f8h +001D18r 1 F9 00 .word 00f9h +001D1Ar 1 FA 00 .word 00fah +001D1Cr 1 FB 00 .word 00fbh +001D1Er 1 FC 00 .word 00fch +001D20r 1 FD 00 .word 00fdh +001D22r 1 FE 00 .word 00feh +001D24r 1 FF 00 .word 00ffh +001D26r 1 00 01 .word 0100h +001D28r 1 01 01 .word 0101h +001D2Ar 1 02 01 .word 0102h +001D2Cr 1 03 01 .word 0103h +001D2Er 1 D2 0F .word 0fd2h +001D30r 1 D3 0F .word 0fd3h +001D32r 1 D4 0F .word 0fd4h +001D34r 1 D5 0F .word 0fd5h +001D36r 1 D6 0F .word 0fd6h +001D38r 1 D7 0F .word 0fd7h +001D3Ar 1 D8 0F .word 0fd8h +001D3Cr 1 D9 0F .word 0fd9h +001D3Er 1 DA 0F .word 0fdah +001D40r 1 DB 0F .word 0fdbh +001D42r 1 DC 0F .word 0fdch +001D44r 1 DD 0F .word 0fddh +001D46r 1 DE 0F .word 0fdeh +001D48r 1 DF 0F .word 0fdfh +001D4Ar 1 E0 0F .word 0fe0h +001D4Cr 1 E1 0F .word 0fe1h +001D4Er 1 E2 0F .word 0fe2h +001D50r 1 E3 0F .word 0fe3h +001D52r 1 E4 0F .word 0fe4h +001D54r 1 E5 0F .word 0fe5h +001D56r 1 E6 0F .word 0fe6h +001D58r 1 E7 0F .word 0fe7h +001D5Ar 1 E8 0F .word 0fe8h +001D5Cr 1 E9 0F .word 0fe9h +001D5Er 1 EA 0F .word 0feah +001D60r 1 EB 0F .word 0febh +001D62r 1 EC 0F .word 0fech +001D64r 1 ED 0F .word 0fedh +001D66r 1 EE 0F .word 0feeh +001D68r 1 EF 0F .word 0fefh +001D6Ar 1 F0 0F .word 0ff0h +001D6Cr 1 F1 0F .word 0ff1h +001D6Er 1 F2 0F .word 0ff2h +001D70r 1 F3 0F .word 0ff3h +001D72r 1 F4 0F .word 0ff4h +001D74r 1 F5 0F .word 0ff5h +001D76r 1 F6 0F .word 0ff6h +001D78r 1 F7 0F .word 0ff7h +001D7Ar 1 F8 0F .word 0ff8h +001D7Cr 1 F9 0F .word 0ff9h +001D7Er 1 FA 0F .word 0ffah +001D80r 1 FB 0F .word 0ffbh +001D82r 1 FC 0F .word 0ffch +001D84r 1 FD 0F .word 0ffdh +001D86r 1 FE 0F .word 0ffeh +001D88r 1 FF 0F .word 0fffh +001D8Ar 1 00 10 .word 1000h +001D8Cr 1 01 10 .word 1001h +001D8Er 1 02 10 .word 1002h +001D90r 1 03 10 .word 1003h +001D92r 1 04 10 .word 1004h +001D94r 1 05 10 .word 1005h +001D96r 1 06 10 .word 1006h +001D98r 1 07 10 .word 1007h +001D9Ar 1 08 10 .word 1008h +001D9Cr 1 F0 7F .word 7ff0h +001D9Er 1 F1 7F .word 7ff1h +001DA0r 1 F2 7F .word 7ff2h +001DA2r 1 F3 7F .word 7ff3h +001DA4r 1 F4 7F .word 7ff4h +001DA6r 1 F5 7F .word 7ff5h +001DA8r 1 F6 7F .word 7ff6h +001DAAr 1 F7 7F .word 7ff7h +001DACr 1 F8 7F .word 7ff8h +001DAEr 1 F9 7F .word 7ff9h +001DB0r 1 FA 7F .word 7ffah +001DB2r 1 FB 7F .word 7ffbh +001DB4r 1 FC 7F .word 7ffch +001DB6r 1 FD 7F .word 7ffdh +001DB8r 1 FE 7F .word 7ffeh +001DBAr 1 FF 7F .word 7fffh +001DBCr 1 00 80 .word 8000h +001DBEr 1 01 80 .word 8001h +001DC0r 1 02 80 .word 8002h +001DC2r 1 03 80 .word 8003h +001DC4r 1 04 80 .word 8004h +001DC6r 1 05 80 .word 8005h +001DC8r 1 06 80 .word 8006h +001DCAr 1 07 80 .word 8007h +001DCCr 1 08 80 .word 8008h +001DCEr 1 09 80 .word 8009h +001DD0r 1 0A 80 .word 800ah +001DD2r 1 0B 80 .word 800bh +001DD4r 1 E1 9F .word 9fe1h +001DD6r 1 E2 9F .word 9fe2h +001DD8r 1 E3 9F .word 9fe3h +001DDAr 1 E4 9F .word 9fe4h +001DDCr 1 E5 9F .word 9fe5h +001DDEr 1 E6 9F .word 9fe6h +001DE0r 1 E7 9F .word 9fe7h +001DE2r 1 E8 9F .word 9fe8h +001DE4r 1 E9 9F .word 9fe9h +001DE6r 1 EA 9F .word 9feah +001DE8r 1 EB 9F .word 9febh +001DEAr 1 EC 9F .word 9fech +001DECr 1 ED 9F .word 9fedh +001DEEr 1 EE 9F .word 9feeh +001DF0r 1 EF 9F .word 9fefh +001DF2r 1 F0 9F .word 9ff0h +001DF4r 1 F1 9F .word 9ff1h +001DF6r 1 F2 9F .word 9ff2h +001DF8r 1 F3 9F .word 9ff3h +001DFAr 1 F4 9F .word 9ff4h +001DFCr 1 F5 9F .word 9ff5h +001DFEr 1 F6 9F .word 9ff6h +001E00r 1 F7 9F .word 9ff7h +001E02r 1 F8 9F .word 9ff8h +001E04r 1 F9 9F .word 9ff9h +001E06r 1 FA 9F .word 9ffah +001E08r 1 FB 9F .word 9ffbh +001E0Ar 1 FC 9F .word 9ffch +001E0Cr 1 FD 9F .word 9ffdh +001E0Er 1 FE 9F .word 9ffeh +001E10r 1 FF 9F .word 9fffh +001E12r 1 00 A0 .word 0a000h +001E14r 1 01 A0 .word 0a001h +001E16r 1 02 A0 .word 0a002h +001E18r 1 03 A0 .word 0a003h +001E1Ar 1 04 A0 .word 0a004h +001E1Cr 1 05 A0 .word 0a005h +001E1Er 1 06 A0 .word 0a006h +001E20r 1 07 A0 .word 0a007h +001E22r 1 08 A0 .word 0a008h +001E24r 1 09 A0 .word 0a009h +001E26r 1 0A A0 .word 0a00ah +001E28r 1 0B A0 .word 0a00bh +001E2Ar 1 0C A0 .word 0a00ch +001E2Cr 1 0D A0 .word 0a00dh +001E2Er 1 0E A0 .word 0a00eh +001E30r 1 0F A0 .word 0a00fh +001E32r 1 E1 AF .word 0afe1h +001E34r 1 E2 AF .word 0afe2h +001E36r 1 E3 AF .word 0afe3h +001E38r 1 E4 AF .word 0afe4h +001E3Ar 1 E5 AF .word 0afe5h +001E3Cr 1 E6 AF .word 0afe6h +001E3Er 1 E7 AF .word 0afe7h +001E40r 1 E8 AF .word 0afe8h +001E42r 1 E9 AF .word 0afe9h +001E44r 1 EA AF .word 0afeah +001E46r 1 EB AF .word 0afebh +001E48r 1 EC AF .word 0afech +001E4Ar 1 ED AF .word 0afedh +001E4Cr 1 EE AF .word 0afeeh +001E4Er 1 EF AF .word 0afefh +001E50r 1 F0 AF .word 0aff0h +001E52r 1 F1 AF .word 0aff1h +001E54r 1 F2 AF .word 0aff2h +001E56r 1 F3 AF .word 0aff3h +001E58r 1 F4 AF .word 0aff4h +001E5Ar 1 F5 AF .word 0aff5h +001E5Cr 1 F6 AF .word 0aff6h +001E5Er 1 F7 AF .word 0aff7h +001E60r 1 F8 AF .word 0aff8h +001E62r 1 F9 AF .word 0aff9h +001E64r 1 FA AF .word 0affah +001E66r 1 FB AF .word 0affbh +001E68r 1 FC AF .word 0affch +001E6Ar 1 FD AF .word 0affdh +001E6Cr 1 FE AF .word 0affeh +001E6Er 1 FF AF .word 0afffh +001E70r 1 00 B0 .word 0b000h +001E72r 1 01 B0 .word 0b001h +001E74r 1 02 B0 .word 0b002h +001E76r 1 03 B0 .word 0b003h +001E78r 1 04 B0 .word 0b004h +001E7Ar 1 05 B0 .word 0b005h +001E7Cr 1 06 B0 .word 0b006h +001E7Er 1 07 B0 .word 0b007h +001E80r 1 08 B0 .word 0b008h +001E82r 1 09 B0 .word 0b009h +001E84r 1 0A B0 .word 0b00ah +001E86r 1 0B B0 .word 0b00bh +001E88r 1 0C B0 .word 0b00ch +001E8Ar 1 0D B0 .word 0b00dh +001E8Cr 1 0E B0 .word 0b00eh +001E8Er 1 0F B0 .word 0b00fh +001E90r 1 E1 BF .word 0bfe1h +001E92r 1 E2 BF .word 0bfe2h +001E94r 1 E3 BF .word 0bfe3h +001E96r 1 E4 BF .word 0bfe4h +001E98r 1 E5 BF .word 0bfe5h +001E9Ar 1 E6 BF .word 0bfe6h +001E9Cr 1 E7 BF .word 0bfe7h +001E9Er 1 E8 BF .word 0bfe8h +001EA0r 1 E9 BF .word 0bfe9h +001EA2r 1 EA BF .word 0bfeah +001EA4r 1 EB BF .word 0bfebh +001EA6r 1 EC BF .word 0bfech +001EA8r 1 ED BF .word 0bfedh +001EAAr 1 EE BF .word 0bfeeh +001EACr 1 EF BF .word 0bfefh +001EAEr 1 F0 BF .word 0bff0h +001EB0r 1 F1 BF .word 0bff1h +001EB2r 1 F2 BF .word 0bff2h +001EB4r 1 F3 BF .word 0bff3h +001EB6r 1 F4 BF .word 0bff4h +001EB8r 1 F5 BF .word 0bff5h +001EBAr 1 F6 BF .word 0bff6h +001EBCr 1 F7 BF .word 0bff7h +001EBEr 1 F8 BF .word 0bff8h +001EC0r 1 F9 BF .word 0bff9h +001EC2r 1 FA BF .word 0bffah +001EC4r 1 FB BF .word 0bffbh +001EC6r 1 FC BF .word 0bffch +001EC8r 1 FD BF .word 0bffdh +001ECAr 1 FE BF .word 0bffeh +001ECCr 1 FF BF .word 0bfffh +001ECEr 1 00 C0 .word 0c000h +001ED0r 1 01 C0 .word 0c001h +001ED2r 1 02 C0 .word 0c002h +001ED4r 1 03 C0 .word 0c003h +001ED6r 1 04 C0 .word 0c004h +001ED8r 1 05 C0 .word 0c005h +001EDAr 1 06 C0 .word 0c006h +001EDCr 1 07 C0 .word 0c007h +001EDEr 1 08 C0 .word 0c008h +001EE0r 1 09 C0 .word 0c009h +001EE2r 1 0A C0 .word 0c00ah +001EE4r 1 0B C0 .word 0c00bh +001EE6r 1 0C C0 .word 0c00ch +001EE8r 1 0D C0 .word 0c00dh +001EEAr 1 0E C0 .word 0c00eh +001EECr 1 0F C0 .word 0c00fh +001EEEr 1 E1 CF .word 0cfe1h +001EF0r 1 E2 CF .word 0cfe2h +001EF2r 1 E3 CF .word 0cfe3h +001EF4r 1 E4 CF .word 0cfe4h +001EF6r 1 E5 CF .word 0cfe5h +001EF8r 1 E6 CF .word 0cfe6h +001EFAr 1 E7 CF .word 0cfe7h +001EFCr 1 E8 CF .word 0cfe8h +001EFEr 1 E9 CF .word 0cfe9h +001F00r 1 EA CF .word 0cfeah +001F02r 1 EB CF .word 0cfebh +001F04r 1 EC CF .word 0cfech +001F06r 1 ED CF .word 0cfedh +001F08r 1 EE CF .word 0cfeeh +001F0Ar 1 EF CF .word 0cfefh +001F0Cr 1 F0 CF .word 0cff0h +001F0Er 1 F1 CF .word 0cff1h +001F10r 1 F2 CF .word 0cff2h +001F12r 1 F3 CF .word 0cff3h +001F14r 1 F4 CF .word 0cff4h +001F16r 1 F5 CF .word 0cff5h +001F18r 1 F6 CF .word 0cff6h +001F1Ar 1 F7 CF .word 0cff7h +001F1Cr 1 F8 CF .word 0cff8h +001F1Er 1 F9 CF .word 0cff9h +001F20r 1 FA CF .word 0cffah +001F22r 1 FB CF .word 0cffbh +001F24r 1 FC CF .word 0cffch +001F26r 1 FD CF .word 0cffdh +001F28r 1 FE CF .word 0cffeh +001F2Ar 1 FF CF .word 0cfffh +001F2Cr 1 00 D0 .word 0d000h +001F2Er 1 01 D0 .word 0d001h +001F30r 1 02 D0 .word 0d002h +001F32r 1 03 D0 .word 0d003h +001F34r 1 04 D0 .word 0d004h +001F36r 1 05 D0 .word 0d005h +001F38r 1 06 D0 .word 0d006h +001F3Ar 1 07 D0 .word 0d007h +001F3Cr 1 08 D0 .word 0d008h +001F3Er 1 09 D0 .word 0d009h +001F40r 1 0A D0 .word 0d00ah +001F42r 1 0B D0 .word 0d00bh +001F44r 1 0C D0 .word 0d00ch +001F46r 1 0D D0 .word 0d00dh +001F48r 1 0E D0 .word 0d00eh +001F4Ar 1 0F D0 .word 0d00fh +001F4Cr 1 E1 DF .word 0dfe1h +001F4Er 1 E2 DF .word 0dfe2h +001F50r 1 E3 DF .word 0dfe3h +001F52r 1 E4 DF .word 0dfe4h +001F54r 1 E5 DF .word 0dfe5h +001F56r 1 E6 DF .word 0dfe6h +001F58r 1 E7 DF .word 0dfe7h +001F5Ar 1 E8 DF .word 0dfe8h +001F5Cr 1 E9 DF .word 0dfe9h +001F5Er 1 EA DF .word 0dfeah +001F60r 1 EB DF .word 0dfebh +001F62r 1 EC DF .word 0dfech +001F64r 1 ED DF .word 0dfedh +001F66r 1 EE DF .word 0dfeeh +001F68r 1 EF DF .word 0dfefh +001F6Ar 1 F0 DF .word 0dff0h +001F6Cr 1 F1 DF .word 0dff1h +001F6Er 1 F2 DF .word 0dff2h +001F70r 1 F3 DF .word 0dff3h +001F72r 1 F4 DF .word 0dff4h +001F74r 1 F5 DF .word 0dff5h +001F76r 1 F6 DF .word 0dff6h +001F78r 1 F7 DF .word 0dff7h +001F7Ar 1 F8 DF .word 0dff8h +001F7Cr 1 F9 DF .word 0dff9h +001F7Er 1 FA DF .word 0dffah +001F80r 1 FB DF .word 0dffbh +001F82r 1 FC DF .word 0dffch +001F84r 1 FD DF .word 0dffdh +001F86r 1 FE DF .word 0dffeh +001F88r 1 FF DF .word 0dfffh +001F8Ar 1 00 E0 .word 0e000h +001F8Cr 1 01 E0 .word 0e001h +001F8Er 1 02 E0 .word 0e002h +001F90r 1 03 E0 .word 0e003h +001F92r 1 04 E0 .word 0e004h +001F94r 1 05 E0 .word 0e005h +001F96r 1 06 E0 .word 0e006h +001F98r 1 07 E0 .word 0e007h +001F9Ar 1 08 E0 .word 0e008h +001F9Cr 1 09 E0 .word 0e009h +001F9Er 1 0A E0 .word 0e00ah +001FA0r 1 0B E0 .word 0e00bh +001FA2r 1 0C E0 .word 0e00ch +001FA4r 1 0D E0 .word 0e00dh +001FA6r 1 0E E0 .word 0e00eh +001FA8r 1 0F E0 .word 0e00fh +001FAAr 1 E1 EF .word 0efe1h +001FACr 1 E2 EF .word 0efe2h +001FAEr 1 E3 EF .word 0efe3h +001FB0r 1 E4 EF .word 0efe4h +001FB2r 1 E5 EF .word 0efe5h +001FB4r 1 E6 EF .word 0efe6h +001FB6r 1 E7 EF .word 0efe7h +001FB8r 1 E8 EF .word 0efe8h +001FBAr 1 E9 EF .word 0efe9h +001FBCr 1 EA EF .word 0efeah +001FBEr 1 EB EF .word 0efebh +001FC0r 1 EC EF .word 0efech +001FC2r 1 ED EF .word 0efedh +001FC4r 1 EE EF .word 0efeeh +001FC6r 1 EF EF .word 0efefh +001FC8r 1 F0 EF .word 0eff0h +001FCAr 1 F1 EF .word 0eff1h +001FCCr 1 F2 EF .word 0eff2h +001FCEr 1 F3 EF .word 0eff3h +001FD0r 1 F4 EF .word 0eff4h +001FD2r 1 F5 EF .word 0eff5h +001FD4r 1 F6 EF .word 0eff6h +001FD6r 1 F7 EF .word 0eff7h +001FD8r 1 F8 EF .word 0eff8h +001FDAr 1 F9 EF .word 0eff9h +001FDCr 1 FA EF .word 0effah +001FDEr 1 FB EF .word 0effbh +001FE0r 1 FC EF .word 0effch +001FE2r 1 FD EF .word 0effdh +001FE4r 1 FE EF .word 0effeh +001FE6r 1 FF EF .word 0efffh +001FE8r 1 00 F0 .word 0f000h +001FEAr 1 01 F0 .word 0f001h +001FECr 1 02 F0 .word 0f002h +001FEEr 1 03 F0 .word 0f003h +001FF0r 1 04 F0 .word 0f004h +001FF2r 1 05 F0 .word 0f005h +001FF4r 1 06 F0 .word 0f006h +001FF6r 1 07 F0 .word 0f007h +001FF8r 1 08 F0 .word 0f008h +001FFAr 1 09 F0 .word 0f009h +001FFCr 1 0A F0 .word 0f00ah +001FFEr 1 0B F0 .word 0f00bh +002000r 1 0C F0 .word 0f00ch +002002r 1 0D F0 .word 0f00dh +002004r 1 0E F0 .word 0f00eh +002006r 1 0F F0 .word 0f00fh +002008r 1 E1 FF .word 0ffe1h +00200Ar 1 E2 FF .word 0ffe2h +00200Cr 1 E3 FF .word 0ffe3h +00200Er 1 E4 FF .word 0ffe4h +002010r 1 E5 FF .word 0ffe5h +002012r 1 E6 FF .word 0ffe6h +002014r 1 E7 FF .word 0ffe7h +002016r 1 E8 FF .word 0ffe8h +002018r 1 E9 FF .word 0ffe9h +00201Ar 1 EA FF .word 0ffeah +00201Cr 1 EB FF .word 0ffebh +00201Er 1 EC FF .word 0ffech +002020r 1 ED FF .word 0ffedh +002022r 1 EE FF .word 0ffeeh +002024r 1 EF FF .word 0ffefh +002026r 1 F0 FF .word 0fff0h +002028r 1 F1 FF .word 0fff1h +00202Ar 1 F2 FF .word 0fff2h +00202Cr 1 F3 FF .word 0fff3h +00202Er 1 F4 FF .word 0fff4h +002030r 1 F5 FF .word 0fff5h +002032r 1 F6 FF .word 0fff6h +002034r 1 F7 FF .word 0fff7h +002036r 1 F8 FF .word 0fff8h +002038r 1 F9 FF .word 0fff9h +00203Ar 1 FA FF .word 0fffah +00203Cr 1 FB FF .word 0fffbh +00203Er 1 FC FF .word 0fffch +002040r 1 FD FF .word 0fffdh +002042r 1 FE FF .word 0fffeh +002044r 1 FF FF .word 0ffffh +002046r 1 +002046r 1 ; alternative 4-digit hex values, uppercase +002046r 1 00 00 .word 0000h +002048r 1 01 00 .word 0001h +00204Ar 1 02 00 .word 0002h +00204Cr 1 03 00 .word 0003h +00204Er 1 04 00 .word 0004h +002050r 1 05 00 .word 0005h +002052r 1 06 00 .word 0006h +002054r 1 07 00 .word 0007h +002056r 1 08 00 .word 0008h +002058r 1 09 00 .word 0009h +00205Ar 1 0A 00 .word 000Ah +00205Cr 1 0B 00 .word 000Bh +00205Er 1 0C 00 .word 000Ch +002060r 1 0D 00 .word 000Dh +002062r 1 0E 00 .word 000Eh +002064r 1 0F 00 .word 000Fh +002066r 1 10 00 .word 0010h +002068r 1 11 00 .word 0011h +00206Ar 1 12 00 .word 0012h +00206Cr 1 13 00 .word 0013h +00206Er 1 70 00 .word 0070h +002070r 1 71 00 .word 0071h +002072r 1 72 00 .word 0072h +002074r 1 73 00 .word 0073h +002076r 1 74 00 .word 0074h +002078r 1 75 00 .word 0075h +00207Ar 1 76 00 .word 0076h +00207Cr 1 77 00 .word 0077h +00207Er 1 78 00 .word 0078h +002080r 1 79 00 .word 0079h +002082r 1 7A 00 .word 007Ah +002084r 1 7B 00 .word 007Bh +002086r 1 7C 00 .word 007Ch +002088r 1 7D 00 .word 007Dh +00208Ar 1 7E 00 .word 007Eh +00208Cr 1 7F 00 .word 007Fh +00208Er 1 80 00 .word 0080h +002090r 1 81 00 .word 0081h +002092r 1 82 00 .word 0082h +002094r 1 83 00 .word 0083h +002096r 1 84 00 .word 0084h +002098r 1 85 00 .word 0085h +00209Ar 1 86 00 .word 0086h +00209Cr 1 F0 00 .word 00F0h +00209Er 1 F1 00 .word 00F1h +0020A0r 1 F2 00 .word 00F2h +0020A2r 1 F3 00 .word 00F3h +0020A4r 1 F4 00 .word 00F4h +0020A6r 1 F5 00 .word 00F5h +0020A8r 1 F6 00 .word 00F6h +0020AAr 1 F7 00 .word 00F7h +0020ACr 1 F8 00 .word 00F8h +0020AEr 1 F9 00 .word 00F9h +0020B0r 1 FA 00 .word 00FAh +0020B2r 1 FB 00 .word 00FBh +0020B4r 1 FC 00 .word 00FCh +0020B6r 1 FD 00 .word 00FDh +0020B8r 1 FE 00 .word 00FEh +0020BAr 1 FF 00 .word 00FFh +0020BCr 1 00 01 .word 0100h +0020BEr 1 01 01 .word 0101h +0020C0r 1 02 01 .word 0102h +0020C2r 1 03 01 .word 0103h +0020C4r 1 D2 0F .word 0FD2h +0020C6r 1 D3 0F .word 0FD3h +0020C8r 1 D4 0F .word 0FD4h +0020CAr 1 D5 0F .word 0FD5h +0020CCr 1 D6 0F .word 0FD6h +0020CEr 1 D7 0F .word 0FD7h +0020D0r 1 D8 0F .word 0FD8h +0020D2r 1 D9 0F .word 0FD9h +0020D4r 1 DA 0F .word 0FDAh +0020D6r 1 DB 0F .word 0FDBh +0020D8r 1 DC 0F .word 0FDCh +0020DAr 1 DD 0F .word 0FDDh +0020DCr 1 DE 0F .word 0FDEh +0020DEr 1 DF 0F .word 0FDFh +0020E0r 1 E0 0F .word 0FE0h +0020E2r 1 E1 0F .word 0FE1h +0020E4r 1 E2 0F .word 0FE2h +0020E6r 1 E3 0F .word 0FE3h +0020E8r 1 E4 0F .word 0FE4h +0020EAr 1 E5 0F .word 0FE5h +0020ECr 1 E6 0F .word 0FE6h +0020EEr 1 E7 0F .word 0FE7h +0020F0r 1 E8 0F .word 0FE8h +0020F2r 1 E9 0F .word 0FE9h +0020F4r 1 EA 0F .word 0FEAh +0020F6r 1 EB 0F .word 0FEBh +0020F8r 1 EC 0F .word 0FECh +0020FAr 1 ED 0F .word 0FEDh +0020FCr 1 EE 0F .word 0FEEh +0020FEr 1 EF 0F .word 0FEFh +002100r 1 F0 0F .word 0FF0h +002102r 1 F1 0F .word 0FF1h +002104r 1 F2 0F .word 0FF2h +002106r 1 F3 0F .word 0FF3h +002108r 1 F4 0F .word 0FF4h +00210Ar 1 F5 0F .word 0FF5h +00210Cr 1 F6 0F .word 0FF6h +00210Er 1 F7 0F .word 0FF7h +002110r 1 F8 0F .word 0FF8h +002112r 1 F9 0F .word 0FF9h +002114r 1 FA 0F .word 0FFAh +002116r 1 FB 0F .word 0FFBh +002118r 1 FC 0F .word 0FFCh +00211Ar 1 FD 0F .word 0FFDh +00211Cr 1 FE 0F .word 0FFEh +00211Er 1 FF 0F .word 0FFFh +002120r 1 00 10 .word 1000h +002122r 1 01 10 .word 1001h +002124r 1 02 10 .word 1002h +002126r 1 03 10 .word 1003h +002128r 1 04 10 .word 1004h +00212Ar 1 05 10 .word 1005h +00212Cr 1 06 10 .word 1006h +00212Er 1 07 10 .word 1007h +002130r 1 08 10 .word 1008h +002132r 1 F0 7F .word 7FF0h +002134r 1 F1 7F .word 7FF1h +002136r 1 F2 7F .word 7FF2h +002138r 1 F3 7F .word 7FF3h +00213Ar 1 F4 7F .word 7FF4h +00213Cr 1 F5 7F .word 7FF5h +00213Er 1 F6 7F .word 7FF6h +002140r 1 F7 7F .word 7FF7h +002142r 1 F8 7F .word 7FF8h +002144r 1 F9 7F .word 7FF9h +002146r 1 FA 7F .word 7FFAh +002148r 1 FB 7F .word 7FFBh +00214Ar 1 FC 7F .word 7FFCh +00214Cr 1 FD 7F .word 7FFDh +00214Er 1 FE 7F .word 7FFEh +002150r 1 FF 7F .word 7FFFh +002152r 1 00 80 .word 8000h +002154r 1 01 80 .word 8001h +002156r 1 02 80 .word 8002h +002158r 1 03 80 .word 8003h +00215Ar 1 04 80 .word 8004h +00215Cr 1 05 80 .word 8005h +00215Er 1 06 80 .word 8006h +002160r 1 07 80 .word 8007h +002162r 1 08 80 .word 8008h +002164r 1 09 80 .word 8009h +002166r 1 0A 80 .word 800Ah +002168r 1 0B 80 .word 800Bh +00216Ar 1 E1 9F .word 9FE1h +00216Cr 1 E2 9F .word 9FE2h +00216Er 1 E3 9F .word 9FE3h +002170r 1 E4 9F .word 9FE4h +002172r 1 E5 9F .word 9FE5h +002174r 1 E6 9F .word 9FE6h +002176r 1 E7 9F .word 9FE7h +002178r 1 E8 9F .word 9FE8h +00217Ar 1 E9 9F .word 9FE9h +00217Cr 1 EA 9F .word 9FEAh +00217Er 1 EB 9F .word 9FEBh +002180r 1 EC 9F .word 9FECh +002182r 1 ED 9F .word 9FEDh +002184r 1 EE 9F .word 9FEEh +002186r 1 EF 9F .word 9FEFh +002188r 1 F0 9F .word 9FF0h +00218Ar 1 F1 9F .word 9FF1h +00218Cr 1 F2 9F .word 9FF2h +00218Er 1 F3 9F .word 9FF3h +002190r 1 F4 9F .word 9FF4h +002192r 1 F5 9F .word 9FF5h +002194r 1 F6 9F .word 9FF6h +002196r 1 F7 9F .word 9FF7h +002198r 1 F8 9F .word 9FF8h +00219Ar 1 F9 9F .word 9FF9h +00219Cr 1 FA 9F .word 9FFAh +00219Er 1 FB 9F .word 9FFBh +0021A0r 1 FC 9F .word 9FFCh +0021A2r 1 FD 9F .word 9FFDh +0021A4r 1 FE 9F .word 9FFEh +0021A6r 1 FF 9F .word 9FFFh +0021A8r 1 00 A0 .word 0A000h +0021AAr 1 01 A0 .word 0A001h +0021ACr 1 02 A0 .word 0A002h +0021AEr 1 03 A0 .word 0A003h +0021B0r 1 04 A0 .word 0A004h +0021B2r 1 05 A0 .word 0A005h +0021B4r 1 06 A0 .word 0A006h +0021B6r 1 07 A0 .word 0A007h +0021B8r 1 08 A0 .word 0A008h +0021BAr 1 09 A0 .word 0A009h +0021BCr 1 0A A0 .word 0A00Ah +0021BEr 1 0B A0 .word 0A00Bh +0021C0r 1 0C A0 .word 0A00Ch +0021C2r 1 0D A0 .word 0A00Dh +0021C4r 1 0E A0 .word 0A00Eh +0021C6r 1 0F A0 .word 0A00Fh +0021C8r 1 E1 AF .word 0AFE1h +0021CAr 1 E2 AF .word 0AFE2h +0021CCr 1 E3 AF .word 0AFE3h +0021CEr 1 E4 AF .word 0AFE4h +0021D0r 1 E5 AF .word 0AFE5h +0021D2r 1 E6 AF .word 0AFE6h +0021D4r 1 E7 AF .word 0AFE7h +0021D6r 1 E8 AF .word 0AFE8h +0021D8r 1 E9 AF .word 0AFE9h +0021DAr 1 EA AF .word 0AFEAh +0021DCr 1 EB AF .word 0AFEBh +0021DEr 1 EC AF .word 0AFECh +0021E0r 1 ED AF .word 0AFEDh +0021E2r 1 EE AF .word 0AFEEh +0021E4r 1 EF AF .word 0AFEFh +0021E6r 1 F0 AF .word 0AFF0h +0021E8r 1 F1 AF .word 0AFF1h +0021EAr 1 F2 AF .word 0AFF2h +0021ECr 1 F3 AF .word 0AFF3h +0021EEr 1 F4 AF .word 0AFF4h +0021F0r 1 F5 AF .word 0AFF5h +0021F2r 1 F6 AF .word 0AFF6h +0021F4r 1 F7 AF .word 0AFF7h +0021F6r 1 F8 AF .word 0AFF8h +0021F8r 1 F9 AF .word 0AFF9h +0021FAr 1 FA AF .word 0AFFAh +0021FCr 1 FB AF .word 0AFFBh +0021FEr 1 FC AF .word 0AFFCh +002200r 1 FD AF .word 0AFFDh +002202r 1 FE AF .word 0AFFEh +002204r 1 FF AF .word 0AFFFh +002206r 1 00 B0 .word 0B000h +002208r 1 01 B0 .word 0B001h +00220Ar 1 02 B0 .word 0B002h +00220Cr 1 03 B0 .word 0B003h +00220Er 1 04 B0 .word 0B004h +002210r 1 05 B0 .word 0B005h +002212r 1 06 B0 .word 0B006h +002214r 1 07 B0 .word 0B007h +002216r 1 08 B0 .word 0B008h +002218r 1 09 B0 .word 0B009h +00221Ar 1 0A B0 .word 0B00Ah +00221Cr 1 0B B0 .word 0B00Bh +00221Er 1 0C B0 .word 0B00Ch +002220r 1 0D B0 .word 0B00Dh +002222r 1 0E B0 .word 0B00Eh +002224r 1 0F B0 .word 0B00Fh +002226r 1 E1 BF .word 0BFE1h +002228r 1 E2 BF .word 0BFE2h +00222Ar 1 E3 BF .word 0BFE3h +00222Cr 1 E4 BF .word 0BFE4h +00222Er 1 E5 BF .word 0BFE5h +002230r 1 E6 BF .word 0BFE6h +002232r 1 E7 BF .word 0BFE7h +002234r 1 E8 BF .word 0BFE8h +002236r 1 E9 BF .word 0BFE9h +002238r 1 EA BF .word 0BFEAh +00223Ar 1 EB BF .word 0BFEBh +00223Cr 1 EC BF .word 0BFECh +00223Er 1 ED BF .word 0BFEDh +002240r 1 EE BF .word 0BFEEh +002242r 1 EF BF .word 0BFEFh +002244r 1 F0 BF .word 0BFF0h +002246r 1 F1 BF .word 0BFF1h +002248r 1 F2 BF .word 0BFF2h +00224Ar 1 F3 BF .word 0BFF3h +00224Cr 1 F4 BF .word 0BFF4h +00224Er 1 F5 BF .word 0BFF5h +002250r 1 F6 BF .word 0BFF6h +002252r 1 F7 BF .word 0BFF7h +002254r 1 F8 BF .word 0BFF8h +002256r 1 F9 BF .word 0BFF9h +002258r 1 FA BF .word 0BFFAh +00225Ar 1 FB BF .word 0BFFBh +00225Cr 1 FC BF .word 0BFFCh +00225Er 1 FD BF .word 0BFFDh +002260r 1 FE BF .word 0BFFEh +002262r 1 FF BF .word 0BFFFh +002264r 1 00 C0 .word 0C000h +002266r 1 01 C0 .word 0C001h +002268r 1 02 C0 .word 0C002h +00226Ar 1 03 C0 .word 0C003h +00226Cr 1 04 C0 .word 0C004h +00226Er 1 05 C0 .word 0C005h +002270r 1 06 C0 .word 0C006h +002272r 1 07 C0 .word 0C007h +002274r 1 08 C0 .word 0C008h +002276r 1 09 C0 .word 0C009h +002278r 1 0A C0 .word 0C00Ah +00227Ar 1 0B C0 .word 0C00Bh +00227Cr 1 0C C0 .word 0C00Ch +00227Er 1 0D C0 .word 0C00Dh +002280r 1 0E C0 .word 0C00Eh +002282r 1 0F C0 .word 0C00Fh +002284r 1 E1 CF .word 0CFE1h +002286r 1 E2 CF .word 0CFE2h +002288r 1 E3 CF .word 0CFE3h +00228Ar 1 E4 CF .word 0CFE4h +00228Cr 1 E5 CF .word 0CFE5h +00228Er 1 E6 CF .word 0CFE6h +002290r 1 E7 CF .word 0CFE7h +002292r 1 E8 CF .word 0CFE8h +002294r 1 E9 CF .word 0CFE9h +002296r 1 EA CF .word 0CFEAh +002298r 1 EB CF .word 0CFEBh +00229Ar 1 EC CF .word 0CFECh +00229Cr 1 ED CF .word 0CFEDh +00229Er 1 EE CF .word 0CFEEh +0022A0r 1 EF CF .word 0CFEFh +0022A2r 1 F0 CF .word 0CFF0h +0022A4r 1 F1 CF .word 0CFF1h +0022A6r 1 F2 CF .word 0CFF2h +0022A8r 1 F3 CF .word 0CFF3h +0022AAr 1 F4 CF .word 0CFF4h +0022ACr 1 F5 CF .word 0CFF5h +0022AEr 1 F6 CF .word 0CFF6h +0022B0r 1 F7 CF .word 0CFF7h +0022B2r 1 F8 CF .word 0CFF8h +0022B4r 1 F9 CF .word 0CFF9h +0022B6r 1 FA CF .word 0CFFAh +0022B8r 1 FB CF .word 0CFFBh +0022BAr 1 FC CF .word 0CFFCh +0022BCr 1 FD CF .word 0CFFDh +0022BEr 1 FE CF .word 0CFFEh +0022C0r 1 FF CF .word 0CFFFh +0022C2r 1 00 D0 .word 0D000h +0022C4r 1 01 D0 .word 0D001h +0022C6r 1 02 D0 .word 0D002h +0022C8r 1 03 D0 .word 0D003h +0022CAr 1 04 D0 .word 0D004h +0022CCr 1 05 D0 .word 0D005h +0022CEr 1 06 D0 .word 0D006h +0022D0r 1 07 D0 .word 0D007h +0022D2r 1 08 D0 .word 0D008h +0022D4r 1 09 D0 .word 0D009h +0022D6r 1 0A D0 .word 0D00Ah +0022D8r 1 0B D0 .word 0D00Bh +0022DAr 1 0C D0 .word 0D00Ch +0022DCr 1 0D D0 .word 0D00Dh +0022DEr 1 0E D0 .word 0D00Eh +0022E0r 1 0F D0 .word 0D00Fh +0022E2r 1 E1 DF .word 0DFE1h +0022E4r 1 E2 DF .word 0DFE2h +0022E6r 1 E3 DF .word 0DFE3h +0022E8r 1 E4 DF .word 0DFE4h +0022EAr 1 E5 DF .word 0DFE5h +0022ECr 1 E6 DF .word 0DFE6h +0022EEr 1 E7 DF .word 0DFE7h +0022F0r 1 E8 DF .word 0DFE8h +0022F2r 1 E9 DF .word 0DFE9h +0022F4r 1 EA DF .word 0DFEAh +0022F6r 1 EB DF .word 0DFEBh +0022F8r 1 EC DF .word 0DFECh +0022FAr 1 ED DF .word 0DFEDh +0022FCr 1 EE DF .word 0DFEEh +0022FEr 1 EF DF .word 0DFEFh +002300r 1 F0 DF .word 0DFF0h +002302r 1 F1 DF .word 0DFF1h +002304r 1 F2 DF .word 0DFF2h +002306r 1 F3 DF .word 0DFF3h +002308r 1 F4 DF .word 0DFF4h +00230Ar 1 F5 DF .word 0DFF5h +00230Cr 1 F6 DF .word 0DFF6h +00230Er 1 F7 DF .word 0DFF7h +002310r 1 F8 DF .word 0DFF8h +002312r 1 F9 DF .word 0DFF9h +002314r 1 FA DF .word 0DFFAh +002316r 1 FB DF .word 0DFFBh +002318r 1 FC DF .word 0DFFCh +00231Ar 1 FD DF .word 0DFFDh +00231Cr 1 FE DF .word 0DFFEh +00231Er 1 FF DF .word 0DFFFh +002320r 1 00 E0 .word 0E000h +002322r 1 01 E0 .word 0E001h +002324r 1 02 E0 .word 0E002h +002326r 1 03 E0 .word 0E003h +002328r 1 04 E0 .word 0E004h +00232Ar 1 05 E0 .word 0E005h +00232Cr 1 06 E0 .word 0E006h +00232Er 1 07 E0 .word 0E007h +002330r 1 08 E0 .word 0E008h +002332r 1 09 E0 .word 0E009h +002334r 1 0A E0 .word 0E00Ah +002336r 1 0B E0 .word 0E00Bh +002338r 1 0C E0 .word 0E00Ch +00233Ar 1 0D E0 .word 0E00Dh +00233Cr 1 0E E0 .word 0E00Eh +00233Er 1 0F E0 .word 0E00Fh +002340r 1 E1 EF .word 0EFE1h +002342r 1 E2 EF .word 0EFE2h +002344r 1 E3 EF .word 0EFE3h +002346r 1 E4 EF .word 0EFE4h +002348r 1 E5 EF .word 0EFE5h +00234Ar 1 E6 EF .word 0EFE6h +00234Cr 1 E7 EF .word 0EFE7h +00234Er 1 E8 EF .word 0EFE8h +002350r 1 E9 EF .word 0EFE9h +002352r 1 EA EF .word 0EFEAh +002354r 1 EB EF .word 0EFEBh +002356r 1 EC EF .word 0EFECh +002358r 1 ED EF .word 0EFEDh +00235Ar 1 EE EF .word 0EFEEh +00235Cr 1 EF EF .word 0EFEFh +00235Er 1 F0 EF .word 0EFF0h +002360r 1 F1 EF .word 0EFF1h +002362r 1 F2 EF .word 0EFF2h +002364r 1 F3 EF .word 0EFF3h +002366r 1 F4 EF .word 0EFF4h +002368r 1 F5 EF .word 0EFF5h +00236Ar 1 F6 EF .word 0EFF6h +00236Cr 1 F7 EF .word 0EFF7h +00236Er 1 F8 EF .word 0EFF8h +002370r 1 F9 EF .word 0EFF9h +002372r 1 FA EF .word 0EFFAh +002374r 1 FB EF .word 0EFFBh +002376r 1 FC EF .word 0EFFCh +002378r 1 FD EF .word 0EFFDh +00237Ar 1 FE EF .word 0EFFEh +00237Cr 1 FF EF .word 0EFFFh +00237Er 1 00 F0 .word 0F000h +002380r 1 01 F0 .word 0F001h +002382r 1 02 F0 .word 0F002h +002384r 1 03 F0 .word 0F003h +002386r 1 04 F0 .word 0F004h +002388r 1 05 F0 .word 0F005h +00238Ar 1 06 F0 .word 0F006h +00238Cr 1 07 F0 .word 0F007h +00238Er 1 08 F0 .word 0F008h +002390r 1 09 F0 .word 0F009h +002392r 1 0A F0 .word 0F00Ah +002394r 1 0B F0 .word 0F00Bh +002396r 1 0C F0 .word 0F00Ch +002398r 1 0D F0 .word 0F00Dh +00239Ar 1 0E F0 .word 0F00Eh +00239Cr 1 0F F0 .word 0F00Fh +00239Er 1 E1 FF .word 0FFE1h +0023A0r 1 E2 FF .word 0FFE2h +0023A2r 1 E3 FF .word 0FFE3h +0023A4r 1 E4 FF .word 0FFE4h +0023A6r 1 E5 FF .word 0FFE5h +0023A8r 1 E6 FF .word 0FFE6h +0023AAr 1 E7 FF .word 0FFE7h +0023ACr 1 E8 FF .word 0FFE8h +0023AEr 1 E9 FF .word 0FFE9h +0023B0r 1 EA FF .word 0FFEAh +0023B2r 1 EB FF .word 0FFEBh +0023B4r 1 EC FF .word 0FFECh +0023B6r 1 ED FF .word 0FFEDh +0023B8r 1 EE FF .word 0FFEEh +0023BAr 1 EF FF .word 0FFEFh +0023BCr 1 F0 FF .word 0FFF0h +0023BEr 1 F1 FF .word 0FFF1h +0023C0r 1 F2 FF .word 0FFF2h +0023C2r 1 F3 FF .word 0FFF3h +0023C4r 1 F4 FF .word 0FFF4h +0023C6r 1 F5 FF .word 0FFF5h +0023C8r 1 F6 FF .word 0FFF6h +0023CAr 1 F7 FF .word 0FFF7h +0023CCr 1 F8 FF .word 0FFF8h +0023CEr 1 F9 FF .word 0FFF9h +0023D0r 1 FA FF .word 0FFFAh +0023D2r 1 FB FF .word 0FFFBh +0023D4r 1 FC FF .word 0FFFCh +0023D6r 1 FD FF .word 0FFFDh +0023D8r 1 FE FF .word 0FFFEh +0023DAr 1 FF FF .word 0FFFFh +0023DCr 1 +0023DCr 1 ; alternative hex values, always leading zero +0023DCr 1 00 00 .word 00h +0023DEr 1 01 00 .word 01h +0023E0r 1 02 00 .word 02h +0023E2r 1 03 00 .word 03h +0023E4r 1 04 00 .word 04h +0023E6r 1 05 00 .word 05h +0023E8r 1 06 00 .word 06h +0023EAr 1 07 00 .word 07h +0023ECr 1 08 00 .word 08h +0023EEr 1 09 00 .word 09h +0023F0r 1 0A 00 .word 0ah +0023F2r 1 0B 00 .word 0bh +0023F4r 1 0C 00 .word 0ch +0023F6r 1 0D 00 .word 0dh +0023F8r 1 0E 00 .word 0eh +0023FAr 1 0F 00 .word 0fh +0023FCr 1 10 00 .word 010h +0023FEr 1 11 00 .word 011h +002400r 1 12 00 .word 012h +002402r 1 13 00 .word 013h +002404r 1 70 00 .word 070h +002406r 1 71 00 .word 071h +002408r 1 72 00 .word 072h +00240Ar 1 73 00 .word 073h +00240Cr 1 74 00 .word 074h +00240Er 1 75 00 .word 075h +002410r 1 76 00 .word 076h +002412r 1 77 00 .word 077h +002414r 1 78 00 .word 078h +002416r 1 79 00 .word 079h +002418r 1 7A 00 .word 07ah +00241Ar 1 7B 00 .word 07bh +00241Cr 1 7C 00 .word 07ch +00241Er 1 7D 00 .word 07dh +002420r 1 7E 00 .word 07eh +002422r 1 7F 00 .word 07fh +002424r 1 80 00 .word 080h +002426r 1 81 00 .word 081h +002428r 1 82 00 .word 082h +00242Ar 1 83 00 .word 083h +00242Cr 1 84 00 .word 084h +00242Er 1 85 00 .word 085h +002430r 1 86 00 .word 086h +002432r 1 F0 00 .word 0f0h +002434r 1 F1 00 .word 0f1h +002436r 1 F2 00 .word 0f2h +002438r 1 F3 00 .word 0f3h +00243Ar 1 F4 00 .word 0f4h +00243Cr 1 F5 00 .word 0f5h +00243Er 1 F6 00 .word 0f6h +002440r 1 F7 00 .word 0f7h +002442r 1 F8 00 .word 0f8h +002444r 1 F9 00 .word 0f9h +002446r 1 FA 00 .word 0fah +002448r 1 FB 00 .word 0fbh +00244Ar 1 FC 00 .word 0fch +00244Cr 1 FD 00 .word 0fdh +00244Er 1 FE 00 .word 0feh +002450r 1 FF 00 .word 0ffh +002452r 1 00 01 .word 0100h +002454r 1 01 01 .word 0101h +002456r 1 02 01 .word 0102h +002458r 1 03 01 .word 0103h +00245Ar 1 D2 0F .word 0fd2h +00245Cr 1 D3 0F .word 0fd3h +00245Er 1 D4 0F .word 0fd4h +002460r 1 D5 0F .word 0fd5h +002462r 1 D6 0F .word 0fd6h +002464r 1 D7 0F .word 0fd7h +002466r 1 D8 0F .word 0fd8h +002468r 1 D9 0F .word 0fd9h +00246Ar 1 DA 0F .word 0fdah +00246Cr 1 DB 0F .word 0fdbh +00246Er 1 DC 0F .word 0fdch +002470r 1 DD 0F .word 0fddh +002472r 1 DE 0F .word 0fdeh +002474r 1 DF 0F .word 0fdfh +002476r 1 E0 0F .word 0fe0h +002478r 1 E1 0F .word 0fe1h +00247Ar 1 E2 0F .word 0fe2h +00247Cr 1 E3 0F .word 0fe3h +00247Er 1 E4 0F .word 0fe4h +002480r 1 E5 0F .word 0fe5h +002482r 1 E6 0F .word 0fe6h +002484r 1 E7 0F .word 0fe7h +002486r 1 E8 0F .word 0fe8h +002488r 1 E9 0F .word 0fe9h +00248Ar 1 EA 0F .word 0feah +00248Cr 1 EB 0F .word 0febh +00248Er 1 EC 0F .word 0fech +002490r 1 ED 0F .word 0fedh +002492r 1 EE 0F .word 0feeh +002494r 1 EF 0F .word 0fefh +002496r 1 F0 0F .word 0ff0h +002498r 1 F1 0F .word 0ff1h +00249Ar 1 F2 0F .word 0ff2h +00249Cr 1 F3 0F .word 0ff3h +00249Er 1 F4 0F .word 0ff4h +0024A0r 1 F5 0F .word 0ff5h +0024A2r 1 F6 0F .word 0ff6h +0024A4r 1 F7 0F .word 0ff7h +0024A6r 1 F8 0F .word 0ff8h +0024A8r 1 F9 0F .word 0ff9h +0024AAr 1 FA 0F .word 0ffah +0024ACr 1 FB 0F .word 0ffbh +0024AEr 1 FC 0F .word 0ffch +0024B0r 1 FD 0F .word 0ffdh +0024B2r 1 FE 0F .word 0ffeh +0024B4r 1 FF 0F .word 0fffh +0024B6r 1 00 10 .word 01000h +0024B8r 1 01 10 .word 01001h +0024BAr 1 02 10 .word 01002h +0024BCr 1 03 10 .word 01003h +0024BEr 1 04 10 .word 01004h +0024C0r 1 05 10 .word 01005h +0024C2r 1 06 10 .word 01006h +0024C4r 1 07 10 .word 01007h +0024C6r 1 08 10 .word 01008h +0024C8r 1 F0 7F .word 07ff0h +0024CAr 1 F1 7F .word 07ff1h +0024CCr 1 F2 7F .word 07ff2h +0024CEr 1 F3 7F .word 07ff3h +0024D0r 1 F4 7F .word 07ff4h +0024D2r 1 F5 7F .word 07ff5h +0024D4r 1 F6 7F .word 07ff6h +0024D6r 1 F7 7F .word 07ff7h +0024D8r 1 F8 7F .word 07ff8h +0024DAr 1 F9 7F .word 07ff9h +0024DCr 1 FA 7F .word 07ffah +0024DEr 1 FB 7F .word 07ffbh +0024E0r 1 FC 7F .word 07ffch +0024E2r 1 FD 7F .word 07ffdh +0024E4r 1 FE 7F .word 07ffeh +0024E6r 1 FF 7F .word 07fffh +0024E8r 1 00 80 .word 08000h +0024EAr 1 01 80 .word 08001h +0024ECr 1 02 80 .word 08002h +0024EEr 1 03 80 .word 08003h +0024F0r 1 04 80 .word 08004h +0024F2r 1 05 80 .word 08005h +0024F4r 1 06 80 .word 08006h +0024F6r 1 07 80 .word 08007h +0024F8r 1 08 80 .word 08008h +0024FAr 1 09 80 .word 08009h +0024FCr 1 0A 80 .word 0800ah +0024FEr 1 0B 80 .word 0800bh +002500r 1 E1 9F .word 09fe1h +002502r 1 E2 9F .word 09fe2h +002504r 1 E3 9F .word 09fe3h +002506r 1 E4 9F .word 09fe4h +002508r 1 E5 9F .word 09fe5h +00250Ar 1 E6 9F .word 09fe6h +00250Cr 1 E7 9F .word 09fe7h +00250Er 1 E8 9F .word 09fe8h +002510r 1 E9 9F .word 09fe9h +002512r 1 EA 9F .word 09feah +002514r 1 EB 9F .word 09febh +002516r 1 EC 9F .word 09fech +002518r 1 ED 9F .word 09fedh +00251Ar 1 EE 9F .word 09feeh +00251Cr 1 EF 9F .word 09fefh +00251Er 1 F0 9F .word 09ff0h +002520r 1 F1 9F .word 09ff1h +002522r 1 F2 9F .word 09ff2h +002524r 1 F3 9F .word 09ff3h +002526r 1 F4 9F .word 09ff4h +002528r 1 F5 9F .word 09ff5h +00252Ar 1 F6 9F .word 09ff6h +00252Cr 1 F7 9F .word 09ff7h +00252Er 1 F8 9F .word 09ff8h +002530r 1 F9 9F .word 09ff9h +002532r 1 FA 9F .word 09ffah +002534r 1 FB 9F .word 09ffbh +002536r 1 FC 9F .word 09ffch +002538r 1 FD 9F .word 09ffdh +00253Ar 1 FE 9F .word 09ffeh +00253Cr 1 FF 9F .word 09fffh +00253Er 1 00 A0 .word 0a000h +002540r 1 01 A0 .word 0a001h +002542r 1 02 A0 .word 0a002h +002544r 1 03 A0 .word 0a003h +002546r 1 04 A0 .word 0a004h +002548r 1 05 A0 .word 0a005h +00254Ar 1 06 A0 .word 0a006h +00254Cr 1 07 A0 .word 0a007h +00254Er 1 08 A0 .word 0a008h +002550r 1 09 A0 .word 0a009h +002552r 1 0A A0 .word 0a00ah +002554r 1 0B A0 .word 0a00bh +002556r 1 0C A0 .word 0a00ch +002558r 1 0D A0 .word 0a00dh +00255Ar 1 0E A0 .word 0a00eh +00255Cr 1 0F A0 .word 0a00fh +00255Er 1 E1 AF .word 0afe1h +002560r 1 E2 AF .word 0afe2h +002562r 1 E3 AF .word 0afe3h +002564r 1 E4 AF .word 0afe4h +002566r 1 E5 AF .word 0afe5h +002568r 1 E6 AF .word 0afe6h +00256Ar 1 E7 AF .word 0afe7h +00256Cr 1 E8 AF .word 0afe8h +00256Er 1 E9 AF .word 0afe9h +002570r 1 EA AF .word 0afeah +002572r 1 EB AF .word 0afebh +002574r 1 EC AF .word 0afech +002576r 1 ED AF .word 0afedh +002578r 1 EE AF .word 0afeeh +00257Ar 1 EF AF .word 0afefh +00257Cr 1 F0 AF .word 0aff0h +00257Er 1 F1 AF .word 0aff1h +002580r 1 F2 AF .word 0aff2h +002582r 1 F3 AF .word 0aff3h +002584r 1 F4 AF .word 0aff4h +002586r 1 F5 AF .word 0aff5h +002588r 1 F6 AF .word 0aff6h +00258Ar 1 F7 AF .word 0aff7h +00258Cr 1 F8 AF .word 0aff8h +00258Er 1 F9 AF .word 0aff9h +002590r 1 FA AF .word 0affah +002592r 1 FB AF .word 0affbh +002594r 1 FC AF .word 0affch +002596r 1 FD AF .word 0affdh +002598r 1 FE AF .word 0affeh +00259Ar 1 FF AF .word 0afffh +00259Cr 1 00 B0 .word 0b000h +00259Er 1 01 B0 .word 0b001h +0025A0r 1 02 B0 .word 0b002h +0025A2r 1 03 B0 .word 0b003h +0025A4r 1 04 B0 .word 0b004h +0025A6r 1 05 B0 .word 0b005h +0025A8r 1 06 B0 .word 0b006h +0025AAr 1 07 B0 .word 0b007h +0025ACr 1 08 B0 .word 0b008h +0025AEr 1 09 B0 .word 0b009h +0025B0r 1 0A B0 .word 0b00ah +0025B2r 1 0B B0 .word 0b00bh +0025B4r 1 0C B0 .word 0b00ch +0025B6r 1 0D B0 .word 0b00dh +0025B8r 1 0E B0 .word 0b00eh +0025BAr 1 0F B0 .word 0b00fh +0025BCr 1 E1 BF .word 0bfe1h +0025BEr 1 E2 BF .word 0bfe2h +0025C0r 1 E3 BF .word 0bfe3h +0025C2r 1 E4 BF .word 0bfe4h +0025C4r 1 E5 BF .word 0bfe5h +0025C6r 1 E6 BF .word 0bfe6h +0025C8r 1 E7 BF .word 0bfe7h +0025CAr 1 E8 BF .word 0bfe8h +0025CCr 1 E9 BF .word 0bfe9h +0025CEr 1 EA BF .word 0bfeah +0025D0r 1 EB BF .word 0bfebh +0025D2r 1 EC BF .word 0bfech +0025D4r 1 ED BF .word 0bfedh +0025D6r 1 EE BF .word 0bfeeh +0025D8r 1 EF BF .word 0bfefh +0025DAr 1 F0 BF .word 0bff0h +0025DCr 1 F1 BF .word 0bff1h +0025DEr 1 F2 BF .word 0bff2h +0025E0r 1 F3 BF .word 0bff3h +0025E2r 1 F4 BF .word 0bff4h +0025E4r 1 F5 BF .word 0bff5h +0025E6r 1 F6 BF .word 0bff6h +0025E8r 1 F7 BF .word 0bff7h +0025EAr 1 F8 BF .word 0bff8h +0025ECr 1 F9 BF .word 0bff9h +0025EEr 1 FA BF .word 0bffah +0025F0r 1 FB BF .word 0bffbh +0025F2r 1 FC BF .word 0bffch +0025F4r 1 FD BF .word 0bffdh +0025F6r 1 FE BF .word 0bffeh +0025F8r 1 FF BF .word 0bfffh +0025FAr 1 00 C0 .word 0c000h +0025FCr 1 01 C0 .word 0c001h +0025FEr 1 02 C0 .word 0c002h +002600r 1 03 C0 .word 0c003h +002602r 1 04 C0 .word 0c004h +002604r 1 05 C0 .word 0c005h +002606r 1 06 C0 .word 0c006h +002608r 1 07 C0 .word 0c007h +00260Ar 1 08 C0 .word 0c008h +00260Cr 1 09 C0 .word 0c009h +00260Er 1 0A C0 .word 0c00ah +002610r 1 0B C0 .word 0c00bh +002612r 1 0C C0 .word 0c00ch +002614r 1 0D C0 .word 0c00dh +002616r 1 0E C0 .word 0c00eh +002618r 1 0F C0 .word 0c00fh +00261Ar 1 E1 CF .word 0cfe1h +00261Cr 1 E2 CF .word 0cfe2h +00261Er 1 E3 CF .word 0cfe3h +002620r 1 E4 CF .word 0cfe4h +002622r 1 E5 CF .word 0cfe5h +002624r 1 E6 CF .word 0cfe6h +002626r 1 E7 CF .word 0cfe7h +002628r 1 E8 CF .word 0cfe8h +00262Ar 1 E9 CF .word 0cfe9h +00262Cr 1 EA CF .word 0cfeah +00262Er 1 EB CF .word 0cfebh +002630r 1 EC CF .word 0cfech +002632r 1 ED CF .word 0cfedh +002634r 1 EE CF .word 0cfeeh +002636r 1 EF CF .word 0cfefh +002638r 1 F0 CF .word 0cff0h +00263Ar 1 F1 CF .word 0cff1h +00263Cr 1 F2 CF .word 0cff2h +00263Er 1 F3 CF .word 0cff3h +002640r 1 F4 CF .word 0cff4h +002642r 1 F5 CF .word 0cff5h +002644r 1 F6 CF .word 0cff6h +002646r 1 F7 CF .word 0cff7h +002648r 1 F8 CF .word 0cff8h +00264Ar 1 F9 CF .word 0cff9h +00264Cr 1 FA CF .word 0cffah +00264Er 1 FB CF .word 0cffbh +002650r 1 FC CF .word 0cffch +002652r 1 FD CF .word 0cffdh +002654r 1 FE CF .word 0cffeh +002656r 1 FF CF .word 0cfffh +002658r 1 00 D0 .word 0d000h +00265Ar 1 01 D0 .word 0d001h +00265Cr 1 02 D0 .word 0d002h +00265Er 1 03 D0 .word 0d003h +002660r 1 04 D0 .word 0d004h +002662r 1 05 D0 .word 0d005h +002664r 1 06 D0 .word 0d006h +002666r 1 07 D0 .word 0d007h +002668r 1 08 D0 .word 0d008h +00266Ar 1 09 D0 .word 0d009h +00266Cr 1 0A D0 .word 0d00ah +00266Er 1 0B D0 .word 0d00bh +002670r 1 0C D0 .word 0d00ch +002672r 1 0D D0 .word 0d00dh +002674r 1 0E D0 .word 0d00eh +002676r 1 0F D0 .word 0d00fh +002678r 1 E1 DF .word 0dfe1h +00267Ar 1 E2 DF .word 0dfe2h +00267Cr 1 E3 DF .word 0dfe3h +00267Er 1 E4 DF .word 0dfe4h +002680r 1 E5 DF .word 0dfe5h +002682r 1 E6 DF .word 0dfe6h +002684r 1 E7 DF .word 0dfe7h +002686r 1 E8 DF .word 0dfe8h +002688r 1 E9 DF .word 0dfe9h +00268Ar 1 EA DF .word 0dfeah +00268Cr 1 EB DF .word 0dfebh +00268Er 1 EC DF .word 0dfech +002690r 1 ED DF .word 0dfedh +002692r 1 EE DF .word 0dfeeh +002694r 1 EF DF .word 0dfefh +002696r 1 F0 DF .word 0dff0h +002698r 1 F1 DF .word 0dff1h +00269Ar 1 F2 DF .word 0dff2h +00269Cr 1 F3 DF .word 0dff3h +00269Er 1 F4 DF .word 0dff4h +0026A0r 1 F5 DF .word 0dff5h +0026A2r 1 F6 DF .word 0dff6h +0026A4r 1 F7 DF .word 0dff7h +0026A6r 1 F8 DF .word 0dff8h +0026A8r 1 F9 DF .word 0dff9h +0026AAr 1 FA DF .word 0dffah +0026ACr 1 FB DF .word 0dffbh +0026AEr 1 FC DF .word 0dffch +0026B0r 1 FD DF .word 0dffdh +0026B2r 1 FE DF .word 0dffeh +0026B4r 1 FF DF .word 0dfffh +0026B6r 1 00 E0 .word 0e000h +0026B8r 1 01 E0 .word 0e001h +0026BAr 1 02 E0 .word 0e002h +0026BCr 1 03 E0 .word 0e003h +0026BEr 1 04 E0 .word 0e004h +0026C0r 1 05 E0 .word 0e005h +0026C2r 1 06 E0 .word 0e006h +0026C4r 1 07 E0 .word 0e007h +0026C6r 1 08 E0 .word 0e008h +0026C8r 1 09 E0 .word 0e009h +0026CAr 1 0A E0 .word 0e00ah +0026CCr 1 0B E0 .word 0e00bh +0026CEr 1 0C E0 .word 0e00ch +0026D0r 1 0D E0 .word 0e00dh +0026D2r 1 0E E0 .word 0e00eh +0026D4r 1 0F E0 .word 0e00fh +0026D6r 1 E1 EF .word 0efe1h +0026D8r 1 E2 EF .word 0efe2h +0026DAr 1 E3 EF .word 0efe3h +0026DCr 1 E4 EF .word 0efe4h +0026DEr 1 E5 EF .word 0efe5h +0026E0r 1 E6 EF .word 0efe6h +0026E2r 1 E7 EF .word 0efe7h +0026E4r 1 E8 EF .word 0efe8h +0026E6r 1 E9 EF .word 0efe9h +0026E8r 1 EA EF .word 0efeah +0026EAr 1 EB EF .word 0efebh +0026ECr 1 EC EF .word 0efech +0026EEr 1 ED EF .word 0efedh +0026F0r 1 EE EF .word 0efeeh +0026F2r 1 EF EF .word 0efefh +0026F4r 1 F0 EF .word 0eff0h +0026F6r 1 F1 EF .word 0eff1h +0026F8r 1 F2 EF .word 0eff2h +0026FAr 1 F3 EF .word 0eff3h +0026FCr 1 F4 EF .word 0eff4h +0026FEr 1 F5 EF .word 0eff5h +002700r 1 F6 EF .word 0eff6h +002702r 1 F7 EF .word 0eff7h +002704r 1 F8 EF .word 0eff8h +002706r 1 F9 EF .word 0eff9h +002708r 1 FA EF .word 0effah +00270Ar 1 FB EF .word 0effbh +00270Cr 1 FC EF .word 0effch +00270Er 1 FD EF .word 0effdh +002710r 1 FE EF .word 0effeh +002712r 1 FF EF .word 0efffh +002714r 1 00 F0 .word 0f000h +002716r 1 01 F0 .word 0f001h +002718r 1 02 F0 .word 0f002h +00271Ar 1 03 F0 .word 0f003h +00271Cr 1 04 F0 .word 0f004h +00271Er 1 05 F0 .word 0f005h +002720r 1 06 F0 .word 0f006h +002722r 1 07 F0 .word 0f007h +002724r 1 08 F0 .word 0f008h +002726r 1 09 F0 .word 0f009h +002728r 1 0A F0 .word 0f00ah +00272Ar 1 0B F0 .word 0f00bh +00272Cr 1 0C F0 .word 0f00ch +00272Er 1 0D F0 .word 0f00dh +002730r 1 0E F0 .word 0f00eh +002732r 1 0F F0 .word 0f00fh +002734r 1 E1 FF .word 0ffe1h +002736r 1 E2 FF .word 0ffe2h +002738r 1 E3 FF .word 0ffe3h +00273Ar 1 E4 FF .word 0ffe4h +00273Cr 1 E5 FF .word 0ffe5h +00273Er 1 E6 FF .word 0ffe6h +002740r 1 E7 FF .word 0ffe7h +002742r 1 E8 FF .word 0ffe8h +002744r 1 E9 FF .word 0ffe9h +002746r 1 EA FF .word 0ffeah +002748r 1 EB FF .word 0ffebh +00274Ar 1 EC FF .word 0ffech +00274Cr 1 ED FF .word 0ffedh +00274Er 1 EE FF .word 0ffeeh +002750r 1 EF FF .word 0ffefh +002752r 1 F0 FF .word 0fff0h +002754r 1 F1 FF .word 0fff1h +002756r 1 F2 FF .word 0fff2h +002758r 1 F3 FF .word 0fff3h +00275Ar 1 F4 FF .word 0fff4h +00275Cr 1 F5 FF .word 0fff5h +00275Er 1 F6 FF .word 0fff6h +002760r 1 F7 FF .word 0fff7h +002762r 1 F8 FF .word 0fff8h +002764r 1 F9 FF .word 0fff9h +002766r 1 FA FF .word 0fffah +002768r 1 FB FF .word 0fffbh +00276Ar 1 FC FF .word 0fffch +00276Cr 1 FD FF .word 0fffdh +00276Er 1 FE FF .word 0fffeh +002770r 1 FF FF .word 0ffffh +002772r 1 +002772r 1 ; binary values, variable length +002772r 1 00 00 .word %0 +002774r 1 01 00 .word %01 +002776r 1 02 00 .word %010 +002778r 1 03 00 .word %011 +00277Ar 1 04 00 .word %0100 +00277Cr 1 05 00 .word %0101 +00277Er 1 06 00 .word %0110 +002780r 1 07 00 .word %0111 +002782r 1 08 00 .word %01000 +002784r 1 09 00 .word %01001 +002786r 1 0A 00 .word %01010 +002788r 1 0B 00 .word %01011 +00278Ar 1 0C 00 .word %01100 +00278Cr 1 0D 00 .word %01101 +00278Er 1 0E 00 .word %01110 +002790r 1 0F 00 .word %01111 +002792r 1 10 00 .word %010000 +002794r 1 11 00 .word %010001 +002796r 1 12 00 .word %010010 +002798r 1 13 00 .word %010011 +00279Ar 1 70 00 .word %01110000 +00279Cr 1 71 00 .word %01110001 +00279Er 1 72 00 .word %01110010 +0027A0r 1 73 00 .word %01110011 +0027A2r 1 74 00 .word %01110100 +0027A4r 1 75 00 .word %01110101 +0027A6r 1 76 00 .word %01110110 +0027A8r 1 77 00 .word %01110111 +0027AAr 1 78 00 .word %01111000 +0027ACr 1 79 00 .word %01111001 +0027AEr 1 7A 00 .word %01111010 +0027B0r 1 7B 00 .word %01111011 +0027B2r 1 7C 00 .word %01111100 +0027B4r 1 7D 00 .word %01111101 +0027B6r 1 7E 00 .word %01111110 +0027B8r 1 7F 00 .word %01111111 +0027BAr 1 80 00 .word %010000000 +0027BCr 1 81 00 .word %010000001 +0027BEr 1 82 00 .word %010000010 +0027C0r 1 83 00 .word %010000011 +0027C2r 1 84 00 .word %010000100 +0027C4r 1 85 00 .word %010000101 +0027C6r 1 86 00 .word %010000110 +0027C8r 1 F0 00 .word %011110000 +0027CAr 1 F1 00 .word %011110001 +0027CCr 1 F2 00 .word %011110010 +0027CEr 1 F3 00 .word %011110011 +0027D0r 1 F4 00 .word %011110100 +0027D2r 1 F5 00 .word %011110101 +0027D4r 1 F6 00 .word %011110110 +0027D6r 1 F7 00 .word %011110111 +0027D8r 1 F8 00 .word %011111000 +0027DAr 1 F9 00 .word %011111001 +0027DCr 1 FA 00 .word %011111010 +0027DEr 1 FB 00 .word %011111011 +0027E0r 1 FC 00 .word %011111100 +0027E2r 1 FD 00 .word %011111101 +0027E4r 1 FE 00 .word %011111110 +0027E6r 1 FF 00 .word %011111111 +0027E8r 1 00 01 .word %100000000 +0027EAr 1 01 01 .word %100000001 +0027ECr 1 02 01 .word %100000010 +0027EEr 1 03 01 .word %100000011 +0027F0r 1 D2 0F .word %111111010010 +0027F2r 1 D3 0F .word %111111010011 +0027F4r 1 D4 0F .word %111111010100 +0027F6r 1 D5 0F .word %111111010101 +0027F8r 1 D6 0F .word %111111010110 +0027FAr 1 D7 0F .word %111111010111 +0027FCr 1 D8 0F .word %111111011000 +0027FEr 1 D9 0F .word %111111011001 +002800r 1 DA 0F .word %111111011010 +002802r 1 DB 0F .word %111111011011 +002804r 1 DC 0F .word %111111011100 +002806r 1 DD 0F .word %111111011101 +002808r 1 DE 0F .word %111111011110 +00280Ar 1 DF 0F .word %111111011111 +00280Cr 1 E0 0F .word %111111100000 +00280Er 1 E1 0F .word %111111100001 +002810r 1 E2 0F .word %111111100010 +002812r 1 E3 0F .word %111111100011 +002814r 1 E4 0F .word %111111100100 +002816r 1 E5 0F .word %111111100101 +002818r 1 E6 0F .word %111111100110 +00281Ar 1 E7 0F .word %111111100111 +00281Cr 1 E8 0F .word %111111101000 +00281Er 1 E9 0F .word %111111101001 +002820r 1 EA 0F .word %111111101010 +002822r 1 EB 0F .word %111111101011 +002824r 1 EC 0F .word %111111101100 +002826r 1 ED 0F .word %111111101101 +002828r 1 EE 0F .word %111111101110 +00282Ar 1 EF 0F .word %111111101111 +00282Cr 1 F0 0F .word %111111110000 +00282Er 1 F1 0F .word %111111110001 +002830r 1 F2 0F .word %111111110010 +002832r 1 F3 0F .word %111111110011 +002834r 1 F4 0F .word %111111110100 +002836r 1 F5 0F .word %111111110101 +002838r 1 F6 0F .word %111111110110 +00283Ar 1 F7 0F .word %111111110111 +00283Cr 1 F8 0F .word %111111111000 +00283Er 1 F9 0F .word %111111111001 +002840r 1 FA 0F .word %111111111010 +002842r 1 FB 0F .word %111111111011 +002844r 1 FC 0F .word %111111111100 +002846r 1 FD 0F .word %111111111101 +002848r 1 FE 0F .word %111111111110 +00284Ar 1 FF 0F .word %111111111111 +00284Cr 1 00 10 .word %1000000000000 +00284Er 1 01 10 .word %1000000000001 +002850r 1 02 10 .word %1000000000010 +002852r 1 03 10 .word %1000000000011 +002854r 1 04 10 .word %1000000000100 +002856r 1 05 10 .word %1000000000101 +002858r 1 06 10 .word %1000000000110 +00285Ar 1 07 10 .word %1000000000111 +00285Cr 1 08 10 .word %1000000001000 +00285Er 1 F0 7F .word %111111111110000 +002860r 1 F1 7F .word %111111111110001 +002862r 1 F2 7F .word %111111111110010 +002864r 1 F3 7F .word %111111111110011 +002866r 1 F4 7F .word %111111111110100 +002868r 1 F5 7F .word %111111111110101 +00286Ar 1 F6 7F .word %111111111110110 +00286Cr 1 F7 7F .word %111111111110111 +00286Er 1 F8 7F .word %111111111111000 +002870r 1 F9 7F .word %111111111111001 +002872r 1 FA 7F .word %111111111111010 +002874r 1 FB 7F .word %111111111111011 +002876r 1 FC 7F .word %111111111111100 +002878r 1 FD 7F .word %111111111111101 +00287Ar 1 FE 7F .word %111111111111110 +00287Cr 1 FF 7F .word %111111111111111 +00287Er 1 00 80 .word %1000000000000000 +002880r 1 01 80 .word %1000000000000001 +002882r 1 02 80 .word %1000000000000010 +002884r 1 03 80 .word %1000000000000011 +002886r 1 04 80 .word %1000000000000100 +002888r 1 05 80 .word %1000000000000101 +00288Ar 1 06 80 .word %1000000000000110 +00288Cr 1 07 80 .word %1000000000000111 +00288Er 1 08 80 .word %1000000000001000 +002890r 1 09 80 .word %1000000000001001 +002892r 1 0A 80 .word %1000000000001010 +002894r 1 0B 80 .word %1000000000001011 +002896r 1 E1 9F .word %1001111111100001 +002898r 1 E2 9F .word %1001111111100010 +00289Ar 1 E3 9F .word %1001111111100011 +00289Cr 1 E4 9F .word %1001111111100100 +00289Er 1 E5 9F .word %1001111111100101 +0028A0r 1 E6 9F .word %1001111111100110 +0028A2r 1 E7 9F .word %1001111111100111 +0028A4r 1 E8 9F .word %1001111111101000 +0028A6r 1 E9 9F .word %1001111111101001 +0028A8r 1 EA 9F .word %1001111111101010 +0028AAr 1 EB 9F .word %1001111111101011 +0028ACr 1 EC 9F .word %1001111111101100 +0028AEr 1 ED 9F .word %1001111111101101 +0028B0r 1 EE 9F .word %1001111111101110 +0028B2r 1 EF 9F .word %1001111111101111 +0028B4r 1 F0 9F .word %1001111111110000 +0028B6r 1 F1 9F .word %1001111111110001 +0028B8r 1 F2 9F .word %1001111111110010 +0028BAr 1 F3 9F .word %1001111111110011 +0028BCr 1 F4 9F .word %1001111111110100 +0028BEr 1 F5 9F .word %1001111111110101 +0028C0r 1 F6 9F .word %1001111111110110 +0028C2r 1 F7 9F .word %1001111111110111 +0028C4r 1 F8 9F .word %1001111111111000 +0028C6r 1 F9 9F .word %1001111111111001 +0028C8r 1 FA 9F .word %1001111111111010 +0028CAr 1 FB 9F .word %1001111111111011 +0028CCr 1 FC 9F .word %1001111111111100 +0028CEr 1 FD 9F .word %1001111111111101 +0028D0r 1 FE 9F .word %1001111111111110 +0028D2r 1 FF 9F .word %1001111111111111 +0028D4r 1 00 A0 .word %1010000000000000 +0028D6r 1 01 A0 .word %1010000000000001 +0028D8r 1 02 A0 .word %1010000000000010 +0028DAr 1 03 A0 .word %1010000000000011 +0028DCr 1 04 A0 .word %1010000000000100 +0028DEr 1 05 A0 .word %1010000000000101 +0028E0r 1 06 A0 .word %1010000000000110 +0028E2r 1 07 A0 .word %1010000000000111 +0028E4r 1 08 A0 .word %1010000000001000 +0028E6r 1 09 A0 .word %1010000000001001 +0028E8r 1 0A A0 .word %1010000000001010 +0028EAr 1 0B A0 .word %1010000000001011 +0028ECr 1 0C A0 .word %1010000000001100 +0028EEr 1 0D A0 .word %1010000000001101 +0028F0r 1 0E A0 .word %1010000000001110 +0028F2r 1 0F A0 .word %1010000000001111 +0028F4r 1 E1 AF .word %1010111111100001 +0028F6r 1 E2 AF .word %1010111111100010 +0028F8r 1 E3 AF .word %1010111111100011 +0028FAr 1 E4 AF .word %1010111111100100 +0028FCr 1 E5 AF .word %1010111111100101 +0028FEr 1 E6 AF .word %1010111111100110 +002900r 1 E7 AF .word %1010111111100111 +002902r 1 E8 AF .word %1010111111101000 +002904r 1 E9 AF .word %1010111111101001 +002906r 1 EA AF .word %1010111111101010 +002908r 1 EB AF .word %1010111111101011 +00290Ar 1 EC AF .word %1010111111101100 +00290Cr 1 ED AF .word %1010111111101101 +00290Er 1 EE AF .word %1010111111101110 +002910r 1 EF AF .word %1010111111101111 +002912r 1 F0 AF .word %1010111111110000 +002914r 1 F1 AF .word %1010111111110001 +002916r 1 F2 AF .word %1010111111110010 +002918r 1 F3 AF .word %1010111111110011 +00291Ar 1 F4 AF .word %1010111111110100 +00291Cr 1 F5 AF .word %1010111111110101 +00291Er 1 F6 AF .word %1010111111110110 +002920r 1 F7 AF .word %1010111111110111 +002922r 1 F8 AF .word %1010111111111000 +002924r 1 F9 AF .word %1010111111111001 +002926r 1 FA AF .word %1010111111111010 +002928r 1 FB AF .word %1010111111111011 +00292Ar 1 FC AF .word %1010111111111100 +00292Cr 1 FD AF .word %1010111111111101 +00292Er 1 FE AF .word %1010111111111110 +002930r 1 FF AF .word %1010111111111111 +002932r 1 00 B0 .word %1011000000000000 +002934r 1 01 B0 .word %1011000000000001 +002936r 1 02 B0 .word %1011000000000010 +002938r 1 03 B0 .word %1011000000000011 +00293Ar 1 04 B0 .word %1011000000000100 +00293Cr 1 05 B0 .word %1011000000000101 +00293Er 1 06 B0 .word %1011000000000110 +002940r 1 07 B0 .word %1011000000000111 +002942r 1 08 B0 .word %1011000000001000 +002944r 1 09 B0 .word %1011000000001001 +002946r 1 0A B0 .word %1011000000001010 +002948r 1 0B B0 .word %1011000000001011 +00294Ar 1 0C B0 .word %1011000000001100 +00294Cr 1 0D B0 .word %1011000000001101 +00294Er 1 0E B0 .word %1011000000001110 +002950r 1 0F B0 .word %1011000000001111 +002952r 1 E1 BF .word %1011111111100001 +002954r 1 E2 BF .word %1011111111100010 +002956r 1 E3 BF .word %1011111111100011 +002958r 1 E4 BF .word %1011111111100100 +00295Ar 1 E5 BF .word %1011111111100101 +00295Cr 1 E6 BF .word %1011111111100110 +00295Er 1 E7 BF .word %1011111111100111 +002960r 1 E8 BF .word %1011111111101000 +002962r 1 E9 BF .word %1011111111101001 +002964r 1 EA BF .word %1011111111101010 +002966r 1 EB BF .word %1011111111101011 +002968r 1 EC BF .word %1011111111101100 +00296Ar 1 ED BF .word %1011111111101101 +00296Cr 1 EE BF .word %1011111111101110 +00296Er 1 EF BF .word %1011111111101111 +002970r 1 F0 BF .word %1011111111110000 +002972r 1 F1 BF .word %1011111111110001 +002974r 1 F2 BF .word %1011111111110010 +002976r 1 F3 BF .word %1011111111110011 +002978r 1 F4 BF .word %1011111111110100 +00297Ar 1 F5 BF .word %1011111111110101 +00297Cr 1 F6 BF .word %1011111111110110 +00297Er 1 F7 BF .word %1011111111110111 +002980r 1 F8 BF .word %1011111111111000 +002982r 1 F9 BF .word %1011111111111001 +002984r 1 FA BF .word %1011111111111010 +002986r 1 FB BF .word %1011111111111011 +002988r 1 FC BF .word %1011111111111100 +00298Ar 1 FD BF .word %1011111111111101 +00298Cr 1 FE BF .word %1011111111111110 +00298Er 1 FF BF .word %1011111111111111 +002990r 1 00 C0 .word %1100000000000000 +002992r 1 01 C0 .word %1100000000000001 +002994r 1 02 C0 .word %1100000000000010 +002996r 1 03 C0 .word %1100000000000011 +002998r 1 04 C0 .word %1100000000000100 +00299Ar 1 05 C0 .word %1100000000000101 +00299Cr 1 06 C0 .word %1100000000000110 +00299Er 1 07 C0 .word %1100000000000111 +0029A0r 1 08 C0 .word %1100000000001000 +0029A2r 1 09 C0 .word %1100000000001001 +0029A4r 1 0A C0 .word %1100000000001010 +0029A6r 1 0B C0 .word %1100000000001011 +0029A8r 1 0C C0 .word %1100000000001100 +0029AAr 1 0D C0 .word %1100000000001101 +0029ACr 1 0E C0 .word %1100000000001110 +0029AEr 1 0F C0 .word %1100000000001111 +0029B0r 1 E1 CF .word %1100111111100001 +0029B2r 1 E2 CF .word %1100111111100010 +0029B4r 1 E3 CF .word %1100111111100011 +0029B6r 1 E4 CF .word %1100111111100100 +0029B8r 1 E5 CF .word %1100111111100101 +0029BAr 1 E6 CF .word %1100111111100110 +0029BCr 1 E7 CF .word %1100111111100111 +0029BEr 1 E8 CF .word %1100111111101000 +0029C0r 1 E9 CF .word %1100111111101001 +0029C2r 1 EA CF .word %1100111111101010 +0029C4r 1 EB CF .word %1100111111101011 +0029C6r 1 EC CF .word %1100111111101100 +0029C8r 1 ED CF .word %1100111111101101 +0029CAr 1 EE CF .word %1100111111101110 +0029CCr 1 EF CF .word %1100111111101111 +0029CEr 1 F0 CF .word %1100111111110000 +0029D0r 1 F1 CF .word %1100111111110001 +0029D2r 1 F2 CF .word %1100111111110010 +0029D4r 1 F3 CF .word %1100111111110011 +0029D6r 1 F4 CF .word %1100111111110100 +0029D8r 1 F5 CF .word %1100111111110101 +0029DAr 1 F6 CF .word %1100111111110110 +0029DCr 1 F7 CF .word %1100111111110111 +0029DEr 1 F8 CF .word %1100111111111000 +0029E0r 1 F9 CF .word %1100111111111001 +0029E2r 1 FA CF .word %1100111111111010 +0029E4r 1 FB CF .word %1100111111111011 +0029E6r 1 FC CF .word %1100111111111100 +0029E8r 1 FD CF .word %1100111111111101 +0029EAr 1 FE CF .word %1100111111111110 +0029ECr 1 FF CF .word %1100111111111111 +0029EEr 1 00 D0 .word %1101000000000000 +0029F0r 1 01 D0 .word %1101000000000001 +0029F2r 1 02 D0 .word %1101000000000010 +0029F4r 1 03 D0 .word %1101000000000011 +0029F6r 1 04 D0 .word %1101000000000100 +0029F8r 1 05 D0 .word %1101000000000101 +0029FAr 1 06 D0 .word %1101000000000110 +0029FCr 1 07 D0 .word %1101000000000111 +0029FEr 1 08 D0 .word %1101000000001000 +002A00r 1 09 D0 .word %1101000000001001 +002A02r 1 0A D0 .word %1101000000001010 +002A04r 1 0B D0 .word %1101000000001011 +002A06r 1 0C D0 .word %1101000000001100 +002A08r 1 0D D0 .word %1101000000001101 +002A0Ar 1 0E D0 .word %1101000000001110 +002A0Cr 1 0F D0 .word %1101000000001111 +002A0Er 1 E1 DF .word %1101111111100001 +002A10r 1 E2 DF .word %1101111111100010 +002A12r 1 E3 DF .word %1101111111100011 +002A14r 1 E4 DF .word %1101111111100100 +002A16r 1 E5 DF .word %1101111111100101 +002A18r 1 E6 DF .word %1101111111100110 +002A1Ar 1 E7 DF .word %1101111111100111 +002A1Cr 1 E8 DF .word %1101111111101000 +002A1Er 1 E9 DF .word %1101111111101001 +002A20r 1 EA DF .word %1101111111101010 +002A22r 1 EB DF .word %1101111111101011 +002A24r 1 EC DF .word %1101111111101100 +002A26r 1 ED DF .word %1101111111101101 +002A28r 1 EE DF .word %1101111111101110 +002A2Ar 1 EF DF .word %1101111111101111 +002A2Cr 1 F0 DF .word %1101111111110000 +002A2Er 1 F1 DF .word %1101111111110001 +002A30r 1 F2 DF .word %1101111111110010 +002A32r 1 F3 DF .word %1101111111110011 +002A34r 1 F4 DF .word %1101111111110100 +002A36r 1 F5 DF .word %1101111111110101 +002A38r 1 F6 DF .word %1101111111110110 +002A3Ar 1 F7 DF .word %1101111111110111 +002A3Cr 1 F8 DF .word %1101111111111000 +002A3Er 1 F9 DF .word %1101111111111001 +002A40r 1 FA DF .word %1101111111111010 +002A42r 1 FB DF .word %1101111111111011 +002A44r 1 FC DF .word %1101111111111100 +002A46r 1 FD DF .word %1101111111111101 +002A48r 1 FE DF .word %1101111111111110 +002A4Ar 1 FF DF .word %1101111111111111 +002A4Cr 1 00 E0 .word %1110000000000000 +002A4Er 1 01 E0 .word %1110000000000001 +002A50r 1 02 E0 .word %1110000000000010 +002A52r 1 03 E0 .word %1110000000000011 +002A54r 1 04 E0 .word %1110000000000100 +002A56r 1 05 E0 .word %1110000000000101 +002A58r 1 06 E0 .word %1110000000000110 +002A5Ar 1 07 E0 .word %1110000000000111 +002A5Cr 1 08 E0 .word %1110000000001000 +002A5Er 1 09 E0 .word %1110000000001001 +002A60r 1 0A E0 .word %1110000000001010 +002A62r 1 0B E0 .word %1110000000001011 +002A64r 1 0C E0 .word %1110000000001100 +002A66r 1 0D E0 .word %1110000000001101 +002A68r 1 0E E0 .word %1110000000001110 +002A6Ar 1 0F E0 .word %1110000000001111 +002A6Cr 1 E1 EF .word %1110111111100001 +002A6Er 1 E2 EF .word %1110111111100010 +002A70r 1 E3 EF .word %1110111111100011 +002A72r 1 E4 EF .word %1110111111100100 +002A74r 1 E5 EF .word %1110111111100101 +002A76r 1 E6 EF .word %1110111111100110 +002A78r 1 E7 EF .word %1110111111100111 +002A7Ar 1 E8 EF .word %1110111111101000 +002A7Cr 1 E9 EF .word %1110111111101001 +002A7Er 1 EA EF .word %1110111111101010 +002A80r 1 EB EF .word %1110111111101011 +002A82r 1 EC EF .word %1110111111101100 +002A84r 1 ED EF .word %1110111111101101 +002A86r 1 EE EF .word %1110111111101110 +002A88r 1 EF EF .word %1110111111101111 +002A8Ar 1 F0 EF .word %1110111111110000 +002A8Cr 1 F1 EF .word %1110111111110001 +002A8Er 1 F2 EF .word %1110111111110010 +002A90r 1 F3 EF .word %1110111111110011 +002A92r 1 F4 EF .word %1110111111110100 +002A94r 1 F5 EF .word %1110111111110101 +002A96r 1 F6 EF .word %1110111111110110 +002A98r 1 F7 EF .word %1110111111110111 +002A9Ar 1 F8 EF .word %1110111111111000 +002A9Cr 1 F9 EF .word %1110111111111001 +002A9Er 1 FA EF .word %1110111111111010 +002AA0r 1 FB EF .word %1110111111111011 +002AA2r 1 FC EF .word %1110111111111100 +002AA4r 1 FD EF .word %1110111111111101 +002AA6r 1 FE EF .word %1110111111111110 +002AA8r 1 FF EF .word %1110111111111111 +002AAAr 1 00 F0 .word %1111000000000000 +002AACr 1 01 F0 .word %1111000000000001 +002AAEr 1 02 F0 .word %1111000000000010 +002AB0r 1 03 F0 .word %1111000000000011 +002AB2r 1 04 F0 .word %1111000000000100 +002AB4r 1 05 F0 .word %1111000000000101 +002AB6r 1 06 F0 .word %1111000000000110 +002AB8r 1 07 F0 .word %1111000000000111 +002ABAr 1 08 F0 .word %1111000000001000 +002ABCr 1 09 F0 .word %1111000000001001 +002ABEr 1 0A F0 .word %1111000000001010 +002AC0r 1 0B F0 .word %1111000000001011 +002AC2r 1 0C F0 .word %1111000000001100 +002AC4r 1 0D F0 .word %1111000000001101 +002AC6r 1 0E F0 .word %1111000000001110 +002AC8r 1 0F F0 .word %1111000000001111 +002ACAr 1 E1 FF .word %1111111111100001 +002ACCr 1 E2 FF .word %1111111111100010 +002ACEr 1 E3 FF .word %1111111111100011 +002AD0r 1 E4 FF .word %1111111111100100 +002AD2r 1 E5 FF .word %1111111111100101 +002AD4r 1 E6 FF .word %1111111111100110 +002AD6r 1 E7 FF .word %1111111111100111 +002AD8r 1 E8 FF .word %1111111111101000 +002ADAr 1 E9 FF .word %1111111111101001 +002ADCr 1 EA FF .word %1111111111101010 +002ADEr 1 EB FF .word %1111111111101011 +002AE0r 1 EC FF .word %1111111111101100 +002AE2r 1 ED FF .word %1111111111101101 +002AE4r 1 EE FF .word %1111111111101110 +002AE6r 1 EF FF .word %1111111111101111 +002AE8r 1 F0 FF .word %1111111111110000 +002AEAr 1 F1 FF .word %1111111111110001 +002AECr 1 F2 FF .word %1111111111110010 +002AEEr 1 F3 FF .word %1111111111110011 +002AF0r 1 F4 FF .word %1111111111110100 +002AF2r 1 F5 FF .word %1111111111110101 +002AF4r 1 F6 FF .word %1111111111110110 +002AF6r 1 F7 FF .word %1111111111110111 +002AF8r 1 F8 FF .word %1111111111111000 +002AFAr 1 F9 FF .word %1111111111111001 +002AFCr 1 FA FF .word %1111111111111010 +002AFEr 1 FB FF .word %1111111111111011 +002B00r 1 FC FF .word %1111111111111100 +002B02r 1 FD FF .word %1111111111111101 +002B04r 1 FE FF .word %1111111111111110 +002B06r 1 FF FF .word %1111111111111111 +002B08r 1 +002B08r 1 ; binary values, full length +002B08r 1 00 00 .word %0000000000000000 +002B0Ar 1 01 00 .word %0000000000000001 +002B0Cr 1 02 00 .word %0000000000000010 +002B0Er 1 03 00 .word %0000000000000011 +002B10r 1 04 00 .word %0000000000000100 +002B12r 1 05 00 .word %0000000000000101 +002B14r 1 06 00 .word %0000000000000110 +002B16r 1 07 00 .word %0000000000000111 +002B18r 1 08 00 .word %0000000000001000 +002B1Ar 1 09 00 .word %0000000000001001 +002B1Cr 1 0A 00 .word %0000000000001010 +002B1Er 1 0B 00 .word %0000000000001011 +002B20r 1 0C 00 .word %0000000000001100 +002B22r 1 0D 00 .word %0000000000001101 +002B24r 1 0E 00 .word %0000000000001110 +002B26r 1 0F 00 .word %0000000000001111 +002B28r 1 10 00 .word %0000000000010000 +002B2Ar 1 11 00 .word %0000000000010001 +002B2Cr 1 12 00 .word %0000000000010010 +002B2Er 1 13 00 .word %0000000000010011 +002B30r 1 70 00 .word %0000000001110000 +002B32r 1 71 00 .word %0000000001110001 +002B34r 1 72 00 .word %0000000001110010 +002B36r 1 73 00 .word %0000000001110011 +002B38r 1 74 00 .word %0000000001110100 +002B3Ar 1 75 00 .word %0000000001110101 +002B3Cr 1 76 00 .word %0000000001110110 +002B3Er 1 77 00 .word %0000000001110111 +002B40r 1 78 00 .word %0000000001111000 +002B42r 1 79 00 .word %0000000001111001 +002B44r 1 7A 00 .word %0000000001111010 +002B46r 1 7B 00 .word %0000000001111011 +002B48r 1 7C 00 .word %0000000001111100 +002B4Ar 1 7D 00 .word %0000000001111101 +002B4Cr 1 7E 00 .word %0000000001111110 +002B4Er 1 7F 00 .word %0000000001111111 +002B50r 1 80 00 .word %0000000010000000 +002B52r 1 81 00 .word %0000000010000001 +002B54r 1 82 00 .word %0000000010000010 +002B56r 1 83 00 .word %0000000010000011 +002B58r 1 84 00 .word %0000000010000100 +002B5Ar 1 85 00 .word %0000000010000101 +002B5Cr 1 86 00 .word %0000000010000110 +002B5Er 1 F0 00 .word %0000000011110000 +002B60r 1 F1 00 .word %0000000011110001 +002B62r 1 F2 00 .word %0000000011110010 +002B64r 1 F3 00 .word %0000000011110011 +002B66r 1 F4 00 .word %0000000011110100 +002B68r 1 F5 00 .word %0000000011110101 +002B6Ar 1 F6 00 .word %0000000011110110 +002B6Cr 1 F7 00 .word %0000000011110111 +002B6Er 1 F8 00 .word %0000000011111000 +002B70r 1 F9 00 .word %0000000011111001 +002B72r 1 FA 00 .word %0000000011111010 +002B74r 1 FB 00 .word %0000000011111011 +002B76r 1 FC 00 .word %0000000011111100 +002B78r 1 FD 00 .word %0000000011111101 +002B7Ar 1 FE 00 .word %0000000011111110 +002B7Cr 1 FF 00 .word %0000000011111111 +002B7Er 1 00 01 .word %0000000100000000 +002B80r 1 01 01 .word %0000000100000001 +002B82r 1 02 01 .word %0000000100000010 +002B84r 1 03 01 .word %0000000100000011 +002B86r 1 D2 0F .word %0000111111010010 +002B88r 1 D3 0F .word %0000111111010011 +002B8Ar 1 D4 0F .word %0000111111010100 +002B8Cr 1 D5 0F .word %0000111111010101 +002B8Er 1 D6 0F .word %0000111111010110 +002B90r 1 D7 0F .word %0000111111010111 +002B92r 1 D8 0F .word %0000111111011000 +002B94r 1 D9 0F .word %0000111111011001 +002B96r 1 DA 0F .word %0000111111011010 +002B98r 1 DB 0F .word %0000111111011011 +002B9Ar 1 DC 0F .word %0000111111011100 +002B9Cr 1 DD 0F .word %0000111111011101 +002B9Er 1 DE 0F .word %0000111111011110 +002BA0r 1 DF 0F .word %0000111111011111 +002BA2r 1 E0 0F .word %0000111111100000 +002BA4r 1 E1 0F .word %0000111111100001 +002BA6r 1 E2 0F .word %0000111111100010 +002BA8r 1 E3 0F .word %0000111111100011 +002BAAr 1 E4 0F .word %0000111111100100 +002BACr 1 E5 0F .word %0000111111100101 +002BAEr 1 E6 0F .word %0000111111100110 +002BB0r 1 E7 0F .word %0000111111100111 +002BB2r 1 E8 0F .word %0000111111101000 +002BB4r 1 E9 0F .word %0000111111101001 +002BB6r 1 EA 0F .word %0000111111101010 +002BB8r 1 EB 0F .word %0000111111101011 +002BBAr 1 EC 0F .word %0000111111101100 +002BBCr 1 ED 0F .word %0000111111101101 +002BBEr 1 EE 0F .word %0000111111101110 +002BC0r 1 EF 0F .word %0000111111101111 +002BC2r 1 F0 0F .word %0000111111110000 +002BC4r 1 F1 0F .word %0000111111110001 +002BC6r 1 F2 0F .word %0000111111110010 +002BC8r 1 F3 0F .word %0000111111110011 +002BCAr 1 F4 0F .word %0000111111110100 +002BCCr 1 F5 0F .word %0000111111110101 +002BCEr 1 F6 0F .word %0000111111110110 +002BD0r 1 F7 0F .word %0000111111110111 +002BD2r 1 F8 0F .word %0000111111111000 +002BD4r 1 F9 0F .word %0000111111111001 +002BD6r 1 FA 0F .word %0000111111111010 +002BD8r 1 FB 0F .word %0000111111111011 +002BDAr 1 FC 0F .word %0000111111111100 +002BDCr 1 FD 0F .word %0000111111111101 +002BDEr 1 FE 0F .word %0000111111111110 +002BE0r 1 FF 0F .word %0000111111111111 +002BE2r 1 00 10 .word %0001000000000000 +002BE4r 1 01 10 .word %0001000000000001 +002BE6r 1 02 10 .word %0001000000000010 +002BE8r 1 03 10 .word %0001000000000011 +002BEAr 1 04 10 .word %0001000000000100 +002BECr 1 05 10 .word %0001000000000101 +002BEEr 1 06 10 .word %0001000000000110 +002BF0r 1 07 10 .word %0001000000000111 +002BF2r 1 08 10 .word %0001000000001000 +002BF4r 1 F0 7F .word %0111111111110000 +002BF6r 1 F1 7F .word %0111111111110001 +002BF8r 1 F2 7F .word %0111111111110010 +002BFAr 1 F3 7F .word %0111111111110011 +002BFCr 1 F4 7F .word %0111111111110100 +002BFEr 1 F5 7F .word %0111111111110101 +002C00r 1 F6 7F .word %0111111111110110 +002C02r 1 F7 7F .word %0111111111110111 +002C04r 1 F8 7F .word %0111111111111000 +002C06r 1 F9 7F .word %0111111111111001 +002C08r 1 FA 7F .word %0111111111111010 +002C0Ar 1 FB 7F .word %0111111111111011 +002C0Cr 1 FC 7F .word %0111111111111100 +002C0Er 1 FD 7F .word %0111111111111101 +002C10r 1 FE 7F .word %0111111111111110 +002C12r 1 FF 7F .word %0111111111111111 +002C14r 1 00 80 .word %1000000000000000 +002C16r 1 01 80 .word %1000000000000001 +002C18r 1 02 80 .word %1000000000000010 +002C1Ar 1 03 80 .word %1000000000000011 +002C1Cr 1 04 80 .word %1000000000000100 +002C1Er 1 05 80 .word %1000000000000101 +002C20r 1 06 80 .word %1000000000000110 +002C22r 1 07 80 .word %1000000000000111 +002C24r 1 08 80 .word %1000000000001000 +002C26r 1 09 80 .word %1000000000001001 +002C28r 1 0A 80 .word %1000000000001010 +002C2Ar 1 0B 80 .word %1000000000001011 +002C2Cr 1 E1 9F .word %1001111111100001 +002C2Er 1 E2 9F .word %1001111111100010 +002C30r 1 E3 9F .word %1001111111100011 +002C32r 1 E4 9F .word %1001111111100100 +002C34r 1 E5 9F .word %1001111111100101 +002C36r 1 E6 9F .word %1001111111100110 +002C38r 1 E7 9F .word %1001111111100111 +002C3Ar 1 E8 9F .word %1001111111101000 +002C3Cr 1 E9 9F .word %1001111111101001 +002C3Er 1 EA 9F .word %1001111111101010 +002C40r 1 EB 9F .word %1001111111101011 +002C42r 1 EC 9F .word %1001111111101100 +002C44r 1 ED 9F .word %1001111111101101 +002C46r 1 EE 9F .word %1001111111101110 +002C48r 1 EF 9F .word %1001111111101111 +002C4Ar 1 F0 9F .word %1001111111110000 +002C4Cr 1 F1 9F .word %1001111111110001 +002C4Er 1 F2 9F .word %1001111111110010 +002C50r 1 F3 9F .word %1001111111110011 +002C52r 1 F4 9F .word %1001111111110100 +002C54r 1 F5 9F .word %1001111111110101 +002C56r 1 F6 9F .word %1001111111110110 +002C58r 1 F7 9F .word %1001111111110111 +002C5Ar 1 F8 9F .word %1001111111111000 +002C5Cr 1 F9 9F .word %1001111111111001 +002C5Er 1 FA 9F .word %1001111111111010 +002C60r 1 FB 9F .word %1001111111111011 +002C62r 1 FC 9F .word %1001111111111100 +002C64r 1 FD 9F .word %1001111111111101 +002C66r 1 FE 9F .word %1001111111111110 +002C68r 1 FF 9F .word %1001111111111111 +002C6Ar 1 00 A0 .word %1010000000000000 +002C6Cr 1 01 A0 .word %1010000000000001 +002C6Er 1 02 A0 .word %1010000000000010 +002C70r 1 03 A0 .word %1010000000000011 +002C72r 1 04 A0 .word %1010000000000100 +002C74r 1 05 A0 .word %1010000000000101 +002C76r 1 06 A0 .word %1010000000000110 +002C78r 1 07 A0 .word %1010000000000111 +002C7Ar 1 08 A0 .word %1010000000001000 +002C7Cr 1 09 A0 .word %1010000000001001 +002C7Er 1 0A A0 .word %1010000000001010 +002C80r 1 0B A0 .word %1010000000001011 +002C82r 1 0C A0 .word %1010000000001100 +002C84r 1 0D A0 .word %1010000000001101 +002C86r 1 0E A0 .word %1010000000001110 +002C88r 1 0F A0 .word %1010000000001111 +002C8Ar 1 E1 AF .word %1010111111100001 +002C8Cr 1 E2 AF .word %1010111111100010 +002C8Er 1 E3 AF .word %1010111111100011 +002C90r 1 E4 AF .word %1010111111100100 +002C92r 1 E5 AF .word %1010111111100101 +002C94r 1 E6 AF .word %1010111111100110 +002C96r 1 E7 AF .word %1010111111100111 +002C98r 1 E8 AF .word %1010111111101000 +002C9Ar 1 E9 AF .word %1010111111101001 +002C9Cr 1 EA AF .word %1010111111101010 +002C9Er 1 EB AF .word %1010111111101011 +002CA0r 1 EC AF .word %1010111111101100 +002CA2r 1 ED AF .word %1010111111101101 +002CA4r 1 EE AF .word %1010111111101110 +002CA6r 1 EF AF .word %1010111111101111 +002CA8r 1 F0 AF .word %1010111111110000 +002CAAr 1 F1 AF .word %1010111111110001 +002CACr 1 F2 AF .word %1010111111110010 +002CAEr 1 F3 AF .word %1010111111110011 +002CB0r 1 F4 AF .word %1010111111110100 +002CB2r 1 F5 AF .word %1010111111110101 +002CB4r 1 F6 AF .word %1010111111110110 +002CB6r 1 F7 AF .word %1010111111110111 +002CB8r 1 F8 AF .word %1010111111111000 +002CBAr 1 F9 AF .word %1010111111111001 +002CBCr 1 FA AF .word %1010111111111010 +002CBEr 1 FB AF .word %1010111111111011 +002CC0r 1 FC AF .word %1010111111111100 +002CC2r 1 FD AF .word %1010111111111101 +002CC4r 1 FE AF .word %1010111111111110 +002CC6r 1 FF AF .word %1010111111111111 +002CC8r 1 00 B0 .word %1011000000000000 +002CCAr 1 01 B0 .word %1011000000000001 +002CCCr 1 02 B0 .word %1011000000000010 +002CCEr 1 03 B0 .word %1011000000000011 +002CD0r 1 04 B0 .word %1011000000000100 +002CD2r 1 05 B0 .word %1011000000000101 +002CD4r 1 06 B0 .word %1011000000000110 +002CD6r 1 07 B0 .word %1011000000000111 +002CD8r 1 08 B0 .word %1011000000001000 +002CDAr 1 09 B0 .word %1011000000001001 +002CDCr 1 0A B0 .word %1011000000001010 +002CDEr 1 0B B0 .word %1011000000001011 +002CE0r 1 0C B0 .word %1011000000001100 +002CE2r 1 0D B0 .word %1011000000001101 +002CE4r 1 0E B0 .word %1011000000001110 +002CE6r 1 0F B0 .word %1011000000001111 +002CE8r 1 E1 BF .word %1011111111100001 +002CEAr 1 E2 BF .word %1011111111100010 +002CECr 1 E3 BF .word %1011111111100011 +002CEEr 1 E4 BF .word %1011111111100100 +002CF0r 1 E5 BF .word %1011111111100101 +002CF2r 1 E6 BF .word %1011111111100110 +002CF4r 1 E7 BF .word %1011111111100111 +002CF6r 1 E8 BF .word %1011111111101000 +002CF8r 1 E9 BF .word %1011111111101001 +002CFAr 1 EA BF .word %1011111111101010 +002CFCr 1 EB BF .word %1011111111101011 +002CFEr 1 EC BF .word %1011111111101100 +002D00r 1 ED BF .word %1011111111101101 +002D02r 1 EE BF .word %1011111111101110 +002D04r 1 EF BF .word %1011111111101111 +002D06r 1 F0 BF .word %1011111111110000 +002D08r 1 F1 BF .word %1011111111110001 +002D0Ar 1 F2 BF .word %1011111111110010 +002D0Cr 1 F3 BF .word %1011111111110011 +002D0Er 1 F4 BF .word %1011111111110100 +002D10r 1 F5 BF .word %1011111111110101 +002D12r 1 F6 BF .word %1011111111110110 +002D14r 1 F7 BF .word %1011111111110111 +002D16r 1 F8 BF .word %1011111111111000 +002D18r 1 F9 BF .word %1011111111111001 +002D1Ar 1 FA BF .word %1011111111111010 +002D1Cr 1 FB BF .word %1011111111111011 +002D1Er 1 FC BF .word %1011111111111100 +002D20r 1 FD BF .word %1011111111111101 +002D22r 1 FE BF .word %1011111111111110 +002D24r 1 FF BF .word %1011111111111111 +002D26r 1 00 C0 .word %1100000000000000 +002D28r 1 01 C0 .word %1100000000000001 +002D2Ar 1 02 C0 .word %1100000000000010 +002D2Cr 1 03 C0 .word %1100000000000011 +002D2Er 1 04 C0 .word %1100000000000100 +002D30r 1 05 C0 .word %1100000000000101 +002D32r 1 06 C0 .word %1100000000000110 +002D34r 1 07 C0 .word %1100000000000111 +002D36r 1 08 C0 .word %1100000000001000 +002D38r 1 09 C0 .word %1100000000001001 +002D3Ar 1 0A C0 .word %1100000000001010 +002D3Cr 1 0B C0 .word %1100000000001011 +002D3Er 1 0C C0 .word %1100000000001100 +002D40r 1 0D C0 .word %1100000000001101 +002D42r 1 0E C0 .word %1100000000001110 +002D44r 1 0F C0 .word %1100000000001111 +002D46r 1 E1 CF .word %1100111111100001 +002D48r 1 E2 CF .word %1100111111100010 +002D4Ar 1 E3 CF .word %1100111111100011 +002D4Cr 1 E4 CF .word %1100111111100100 +002D4Er 1 E5 CF .word %1100111111100101 +002D50r 1 E6 CF .word %1100111111100110 +002D52r 1 E7 CF .word %1100111111100111 +002D54r 1 E8 CF .word %1100111111101000 +002D56r 1 E9 CF .word %1100111111101001 +002D58r 1 EA CF .word %1100111111101010 +002D5Ar 1 EB CF .word %1100111111101011 +002D5Cr 1 EC CF .word %1100111111101100 +002D5Er 1 ED CF .word %1100111111101101 +002D60r 1 EE CF .word %1100111111101110 +002D62r 1 EF CF .word %1100111111101111 +002D64r 1 F0 CF .word %1100111111110000 +002D66r 1 F1 CF .word %1100111111110001 +002D68r 1 F2 CF .word %1100111111110010 +002D6Ar 1 F3 CF .word %1100111111110011 +002D6Cr 1 F4 CF .word %1100111111110100 +002D6Er 1 F5 CF .word %1100111111110101 +002D70r 1 F6 CF .word %1100111111110110 +002D72r 1 F7 CF .word %1100111111110111 +002D74r 1 F8 CF .word %1100111111111000 +002D76r 1 F9 CF .word %1100111111111001 +002D78r 1 FA CF .word %1100111111111010 +002D7Ar 1 FB CF .word %1100111111111011 +002D7Cr 1 FC CF .word %1100111111111100 +002D7Er 1 FD CF .word %1100111111111101 +002D80r 1 FE CF .word %1100111111111110 +002D82r 1 FF CF .word %1100111111111111 +002D84r 1 00 D0 .word %1101000000000000 +002D86r 1 01 D0 .word %1101000000000001 +002D88r 1 02 D0 .word %1101000000000010 +002D8Ar 1 03 D0 .word %1101000000000011 +002D8Cr 1 04 D0 .word %1101000000000100 +002D8Er 1 05 D0 .word %1101000000000101 +002D90r 1 06 D0 .word %1101000000000110 +002D92r 1 07 D0 .word %1101000000000111 +002D94r 1 08 D0 .word %1101000000001000 +002D96r 1 09 D0 .word %1101000000001001 +002D98r 1 0A D0 .word %1101000000001010 +002D9Ar 1 0B D0 .word %1101000000001011 +002D9Cr 1 0C D0 .word %1101000000001100 +002D9Er 1 0D D0 .word %1101000000001101 +002DA0r 1 0E D0 .word %1101000000001110 +002DA2r 1 0F D0 .word %1101000000001111 +002DA4r 1 E1 DF .word %1101111111100001 +002DA6r 1 E2 DF .word %1101111111100010 +002DA8r 1 E3 DF .word %1101111111100011 +002DAAr 1 E4 DF .word %1101111111100100 +002DACr 1 E5 DF .word %1101111111100101 +002DAEr 1 E6 DF .word %1101111111100110 +002DB0r 1 E7 DF .word %1101111111100111 +002DB2r 1 E8 DF .word %1101111111101000 +002DB4r 1 E9 DF .word %1101111111101001 +002DB6r 1 EA DF .word %1101111111101010 +002DB8r 1 EB DF .word %1101111111101011 +002DBAr 1 EC DF .word %1101111111101100 +002DBCr 1 ED DF .word %1101111111101101 +002DBEr 1 EE DF .word %1101111111101110 +002DC0r 1 EF DF .word %1101111111101111 +002DC2r 1 F0 DF .word %1101111111110000 +002DC4r 1 F1 DF .word %1101111111110001 +002DC6r 1 F2 DF .word %1101111111110010 +002DC8r 1 F3 DF .word %1101111111110011 +002DCAr 1 F4 DF .word %1101111111110100 +002DCCr 1 F5 DF .word %1101111111110101 +002DCEr 1 F6 DF .word %1101111111110110 +002DD0r 1 F7 DF .word %1101111111110111 +002DD2r 1 F8 DF .word %1101111111111000 +002DD4r 1 F9 DF .word %1101111111111001 +002DD6r 1 FA DF .word %1101111111111010 +002DD8r 1 FB DF .word %1101111111111011 +002DDAr 1 FC DF .word %1101111111111100 +002DDCr 1 FD DF .word %1101111111111101 +002DDEr 1 FE DF .word %1101111111111110 +002DE0r 1 FF DF .word %1101111111111111 +002DE2r 1 00 E0 .word %1110000000000000 +002DE4r 1 01 E0 .word %1110000000000001 +002DE6r 1 02 E0 .word %1110000000000010 +002DE8r 1 03 E0 .word %1110000000000011 +002DEAr 1 04 E0 .word %1110000000000100 +002DECr 1 05 E0 .word %1110000000000101 +002DEEr 1 06 E0 .word %1110000000000110 +002DF0r 1 07 E0 .word %1110000000000111 +002DF2r 1 08 E0 .word %1110000000001000 +002DF4r 1 09 E0 .word %1110000000001001 +002DF6r 1 0A E0 .word %1110000000001010 +002DF8r 1 0B E0 .word %1110000000001011 +002DFAr 1 0C E0 .word %1110000000001100 +002DFCr 1 0D E0 .word %1110000000001101 +002DFEr 1 0E E0 .word %1110000000001110 +002E00r 1 0F E0 .word %1110000000001111 +002E02r 1 E1 EF .word %1110111111100001 +002E04r 1 E2 EF .word %1110111111100010 +002E06r 1 E3 EF .word %1110111111100011 +002E08r 1 E4 EF .word %1110111111100100 +002E0Ar 1 E5 EF .word %1110111111100101 +002E0Cr 1 E6 EF .word %1110111111100110 +002E0Er 1 E7 EF .word %1110111111100111 +002E10r 1 E8 EF .word %1110111111101000 +002E12r 1 E9 EF .word %1110111111101001 +002E14r 1 EA EF .word %1110111111101010 +002E16r 1 EB EF .word %1110111111101011 +002E18r 1 EC EF .word %1110111111101100 +002E1Ar 1 ED EF .word %1110111111101101 +002E1Cr 1 EE EF .word %1110111111101110 +002E1Er 1 EF EF .word %1110111111101111 +002E20r 1 F0 EF .word %1110111111110000 +002E22r 1 F1 EF .word %1110111111110001 +002E24r 1 F2 EF .word %1110111111110010 +002E26r 1 F3 EF .word %1110111111110011 +002E28r 1 F4 EF .word %1110111111110100 +002E2Ar 1 F5 EF .word %1110111111110101 +002E2Cr 1 F6 EF .word %1110111111110110 +002E2Er 1 F7 EF .word %1110111111110111 +002E30r 1 F8 EF .word %1110111111111000 +002E32r 1 F9 EF .word %1110111111111001 +002E34r 1 FA EF .word %1110111111111010 +002E36r 1 FB EF .word %1110111111111011 +002E38r 1 FC EF .word %1110111111111100 +002E3Ar 1 FD EF .word %1110111111111101 +002E3Cr 1 FE EF .word %1110111111111110 +002E3Er 1 FF EF .word %1110111111111111 +002E40r 1 00 F0 .word %1111000000000000 +002E42r 1 01 F0 .word %1111000000000001 +002E44r 1 02 F0 .word %1111000000000010 +002E46r 1 03 F0 .word %1111000000000011 +002E48r 1 04 F0 .word %1111000000000100 +002E4Ar 1 05 F0 .word %1111000000000101 +002E4Cr 1 06 F0 .word %1111000000000110 +002E4Er 1 07 F0 .word %1111000000000111 +002E50r 1 08 F0 .word %1111000000001000 +002E52r 1 09 F0 .word %1111000000001001 +002E54r 1 0A F0 .word %1111000000001010 +002E56r 1 0B F0 .word %1111000000001011 +002E58r 1 0C F0 .word %1111000000001100 +002E5Ar 1 0D F0 .word %1111000000001101 +002E5Cr 1 0E F0 .word %1111000000001110 +002E5Er 1 0F F0 .word %1111000000001111 +002E60r 1 E1 FF .word %1111111111100001 +002E62r 1 E2 FF .word %1111111111100010 +002E64r 1 E3 FF .word %1111111111100011 +002E66r 1 E4 FF .word %1111111111100100 +002E68r 1 E5 FF .word %1111111111100101 +002E6Ar 1 E6 FF .word %1111111111100110 +002E6Cr 1 E7 FF .word %1111111111100111 +002E6Er 1 E8 FF .word %1111111111101000 +002E70r 1 E9 FF .word %1111111111101001 +002E72r 1 EA FF .word %1111111111101010 +002E74r 1 EB FF .word %1111111111101011 +002E76r 1 EC FF .word %1111111111101100 +002E78r 1 ED FF .word %1111111111101101 +002E7Ar 1 EE FF .word %1111111111101110 +002E7Cr 1 EF FF .word %1111111111101111 +002E7Er 1 F0 FF .word %1111111111110000 +002E80r 1 F1 FF .word %1111111111110001 +002E82r 1 F2 FF .word %1111111111110010 +002E84r 1 F3 FF .word %1111111111110011 +002E86r 1 F4 FF .word %1111111111110100 +002E88r 1 F5 FF .word %1111111111110101 +002E8Ar 1 F6 FF .word %1111111111110110 +002E8Cr 1 F7 FF .word %1111111111110111 +002E8Er 1 F8 FF .word %1111111111111000 +002E90r 1 F9 FF .word %1111111111111001 +002E92r 1 FA FF .word %1111111111111010 +002E94r 1 FB FF .word %1111111111111011 +002E96r 1 FC FF .word %1111111111111100 +002E98r 1 FD FF .word %1111111111111101 +002E9Ar 1 FE FF .word %1111111111111110 +002E9Cr 1 FF FF .word %1111111111111111 +002E9Er 1 +002E9Er 1 ; multiple values on one line, decimal +002E9Er 1 00 00 01 00 .word 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +002EA2r 1 02 00 03 00 +002EA6r 1 04 00 05 00 +002EBEr 1 10 00 11 00 .word 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +002EC2r 1 12 00 13 00 +002EC6r 1 14 00 15 00 +002EDEr 1 70 00 71 00 .word 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +002EE2r 1 72 00 73 00 +002EE6r 1 74 00 75 00 +002EFEr 1 80 00 81 00 .word 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +002F02r 1 82 00 83 00 +002F06r 1 84 00 85 00 +002F1Er 1 F0 00 F1 00 .word 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +002F22r 1 F2 00 F3 00 +002F26r 1 F4 00 F5 00 +002F3Er 1 00 01 01 01 .word 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 +002F42r 1 02 01 03 01 +002F46r 1 04 01 05 01 +002F5Er 1 E0 0F E1 0F .word 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 +002F62r 1 E2 0F E3 0F +002F66r 1 E4 0F E5 0F +002F7Er 1 F0 0F F1 0F .word 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 +002F82r 1 F2 0F F3 0F +002F86r 1 F4 0F F5 0F +002F9Er 1 00 10 01 10 .word 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 +002FA2r 1 02 10 03 10 +002FA6r 1 04 10 05 10 +002FBEr 1 F0 7F F1 7F .word 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 +002FC2r 1 F2 7F F3 7F +002FC6r 1 F4 7F F5 7F +002FDEr 1 00 80 01 80 .word 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 +002FE2r 1 02 80 03 80 +002FE6r 1 04 80 05 80 +002FFEr 1 F0 9F F1 9F .word 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 +003002r 1 F2 9F F3 9F +003006r 1 F4 9F F5 9F +00301Er 1 00 A0 01 A0 .word 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 +003022r 1 02 A0 03 A0 +003026r 1 04 A0 05 A0 +00303Er 1 F0 AF F1 AF .word 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 +003042r 1 F2 AF F3 AF +003046r 1 F4 AF F5 AF +00305Er 1 00 B0 01 B0 .word 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 +003062r 1 02 B0 03 B0 +003066r 1 04 B0 05 B0 +00307Er 1 F0 BF F1 BF .word 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 +003082r 1 F2 BF F3 BF +003086r 1 F4 BF F5 BF +00309Er 1 00 C0 01 C0 .word 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 +0030A2r 1 02 C0 03 C0 +0030A6r 1 04 C0 05 C0 +0030BEr 1 F0 CF F1 CF .word 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 +0030C2r 1 F2 CF F3 CF +0030C6r 1 F4 CF F5 CF +0030DEr 1 00 D0 01 D0 .word 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 +0030E2r 1 02 D0 03 D0 +0030E6r 1 04 D0 05 D0 +0030FEr 1 F0 DF F1 DF .word 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 +003102r 1 F2 DF F3 DF +003106r 1 F4 DF F5 DF +00311Er 1 00 E0 01 E0 .word 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 +003122r 1 02 E0 03 E0 +003126r 1 04 E0 05 E0 +00313Er 1 F0 EF F1 EF .word 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 +003142r 1 F2 EF F3 EF +003146r 1 F4 EF F5 EF +00315Er 1 00 F0 01 F0 .word 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 +003162r 1 02 F0 03 F0 +003166r 1 04 F0 05 F0 +00317Er 1 F0 FF F1 FF .word 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 +003182r 1 F2 FF F3 FF +003186r 1 F4 FF F5 FF +00319Er 1 +00319Er 1 ; multiple values on one line, hex +00319Er 1 00 00 01 00 .word $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +0031A2r 1 02 00 03 00 +0031A6r 1 04 00 05 00 +0031BEr 1 10 00 11 00 .word $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +0031C2r 1 12 00 13 00 +0031C6r 1 14 00 15 00 +0031DEr 1 70 00 71 00 .word $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +0031E2r 1 72 00 73 00 +0031E6r 1 74 00 75 00 +0031FEr 1 80 00 81 00 .word $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +003202r 1 82 00 83 00 +003206r 1 84 00 85 00 +00321Er 1 F0 00 F1 00 .word $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +003222r 1 F2 00 F3 00 +003226r 1 F4 00 F5 00 +00323Er 1 00 01 01 01 .word $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f +003242r 1 02 01 03 01 +003246r 1 04 01 05 01 +00325Er 1 E0 0F E1 0F .word $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef +003262r 1 E2 0F E3 0F +003266r 1 E4 0F E5 0F +00327Er 1 F0 0F F1 0F .word $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff +003282r 1 F2 0F F3 0F +003286r 1 F4 0F F5 0F +00329Er 1 00 10 01 10 .word $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f +0032A2r 1 02 10 03 10 +0032A6r 1 04 10 05 10 +0032BEr 1 F0 7F F1 7F .word $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff +0032C2r 1 F2 7F F3 7F +0032C6r 1 F4 7F F5 7F +0032DEr 1 00 80 01 80 .word $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f +0032E2r 1 02 80 03 80 +0032E6r 1 04 80 05 80 +0032FEr 1 F0 9F F1 9F .word $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff +003302r 1 F2 9F F3 9F +003306r 1 F4 9F F5 9F +00331Er 1 00 A0 01 A0 .word $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f +003322r 1 02 A0 03 A0 +003326r 1 04 A0 05 A0 +00333Er 1 F0 AF F1 AF .word $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff +003342r 1 F2 AF F3 AF +003346r 1 F4 AF F5 AF +00335Er 1 00 B0 01 B0 .word $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f +003362r 1 02 B0 03 B0 +003366r 1 04 B0 05 B0 +00337Er 1 F0 BF F1 BF .word $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff +003382r 1 F2 BF F3 BF +003386r 1 F4 BF F5 BF +00339Er 1 00 C0 01 C0 .word $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f +0033A2r 1 02 C0 03 C0 +0033A6r 1 04 C0 05 C0 +0033BEr 1 F0 CF F1 CF .word $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff +0033C2r 1 F2 CF F3 CF +0033C6r 1 F4 CF F5 CF +0033DEr 1 00 D0 01 D0 .word $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f +0033E2r 1 02 D0 03 D0 +0033E6r 1 04 D0 05 D0 +0033FEr 1 F0 DF F1 DF .word $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff +003402r 1 F2 DF F3 DF +003406r 1 F4 DF F5 DF +00341Er 1 00 E0 01 E0 .word $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f +003422r 1 02 E0 03 E0 +003426r 1 04 E0 05 E0 +00343Er 1 F0 EF F1 EF .word $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff +003442r 1 F2 EF F3 EF +003446r 1 F4 EF F5 EF +00345Er 1 00 F0 01 F0 .word $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f +003462r 1 02 F0 03 F0 +003466r 1 04 F0 05 F0 +00347Er 1 F0 FF F1 FF .word $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff +003482r 1 F2 FF F3 FF +003486r 1 F4 FF F5 FF +00349Er 1 +00349Er 1 ; multiple values on one line, alternative hex +00349Er 1 00 00 01 00 .word 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +0034A2r 1 02 00 03 00 +0034A6r 1 04 00 05 00 +0034BEr 1 10 00 11 00 .word 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +0034C2r 1 12 00 13 00 +0034C6r 1 14 00 15 00 +0034DEr 1 70 00 71 00 .word 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +0034E2r 1 72 00 73 00 +0034E6r 1 74 00 75 00 +0034FEr 1 80 00 81 00 .word 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +003502r 1 82 00 83 00 +003506r 1 84 00 85 00 +00351Er 1 F0 00 F1 00 .word 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +003522r 1 F2 00 F3 00 +003526r 1 F4 00 F5 00 +00353Er 1 00 01 01 01 .word 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh +003542r 1 02 01 03 01 +003546r 1 04 01 05 01 +00355Er 1 E0 0F E1 0F .word 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh +003562r 1 E2 0F E3 0F +003566r 1 E4 0F E5 0F +00357Er 1 F0 0F F1 0F .word 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh +003582r 1 F2 0F F3 0F +003586r 1 F4 0F F5 0F +00359Er 1 00 10 01 10 .word 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh +0035A2r 1 02 10 03 10 +0035A6r 1 04 10 05 10 +0035BEr 1 F0 7F F1 7F .word 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh +0035C2r 1 F2 7F F3 7F +0035C6r 1 F4 7F F5 7F +0035DEr 1 00 80 01 80 .word 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh +0035E2r 1 02 80 03 80 +0035E6r 1 04 80 05 80 +0035FEr 1 F0 9F F1 9F .word 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh +003602r 1 F2 9F F3 9F +003606r 1 F4 9F F5 9F +00361Er 1 00 A0 01 A0 .word 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh +003622r 1 02 A0 03 A0 +003626r 1 04 A0 05 A0 +00363Er 1 F0 AF F1 AF .word 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh +003642r 1 F2 AF F3 AF +003646r 1 F4 AF F5 AF +00365Er 1 00 B0 01 B0 .word 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh +003662r 1 02 B0 03 B0 +003666r 1 04 B0 05 B0 +00367Er 1 F0 BF F1 BF .word 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh +003682r 1 F2 BF F3 BF +003686r 1 F4 BF F5 BF +00369Er 1 00 C0 01 C0 .word 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh +0036A2r 1 02 C0 03 C0 +0036A6r 1 04 C0 05 C0 +0036BEr 1 F0 CF F1 CF .word 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh +0036C2r 1 F2 CF F3 CF +0036C6r 1 F4 CF F5 CF +0036DEr 1 00 D0 01 D0 .word 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh +0036E2r 1 02 D0 03 D0 +0036E6r 1 04 D0 05 D0 +0036FEr 1 F0 DF F1 DF .word 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh +003702r 1 F2 DF F3 DF +003706r 1 F4 DF F5 DF +00371Er 1 00 E0 01 E0 .word 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh +003722r 1 02 E0 03 E0 +003726r 1 04 E0 05 E0 +00373Er 1 F0 EF F1 EF .word 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh +003742r 1 F2 EF F3 EF +003746r 1 F4 EF F5 EF +00375Er 1 00 F0 01 F0 .word 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh +003762r 1 02 F0 03 F0 +003766r 1 04 F0 05 F0 +00377Er 1 F0 FF F1 FF .word 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh +003782r 1 F2 FF F3 FF +003786r 1 F4 FF F5 FF +00379Er 1 +00379Er 1 ; mix some variants +00379Er 1 0B 00 11 00 .word 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +0037A2r 1 03 00 11 00 +0037A6r 1 61 00 62 00 +0037BCr 1 diff --git a/test/asm/listing/102-word.s b/test/asm/listing/102-word.s new file mode 100644 index 000000000..5cb297c5d --- /dev/null +++ b/test/asm/listing/102-word.s @@ -0,0 +1,6076 @@ +; 2022-06-15 Spiro Trikaliotis + + + ; upper case pseudo-op + .WORD 0 + .WORD 1 + .WORD 2 + .WORD 3 + .WORD 4 + .WORD 5 + .WORD 6 + .WORD 7 + .WORD 8 + .WORD 9 + .WORD 10 + .WORD 11 + .WORD 12 + .WORD 13 + .WORD 14 + .WORD 15 + .WORD 16 + .WORD 17 + .WORD 18 + .WORD 19 + .WORD 112 + .WORD 113 + .WORD 114 + .WORD 115 + .WORD 116 + .WORD 117 + .WORD 118 + .WORD 119 + .WORD 120 + .WORD 121 + .WORD 122 + .WORD 123 + .WORD 124 + .WORD 125 + .WORD 126 + .WORD 127 + .WORD 128 + .WORD 129 + .WORD 130 + .WORD 131 + .WORD 132 + .WORD 133 + .WORD 134 + .WORD 240 + .WORD 241 + .WORD 242 + .WORD 243 + .WORD 244 + .WORD 245 + .WORD 246 + .WORD 247 + .WORD 248 + .WORD 249 + .WORD 250 + .WORD 251 + .WORD 252 + .WORD 253 + .WORD 254 + .WORD 255 + .WORD 256 + .WORD 257 + .WORD 258 + .WORD 259 + .WORD 4050 + .WORD 4051 + .WORD 4052 + .WORD 4053 + .WORD 4054 + .WORD 4055 + .WORD 4056 + .WORD 4057 + .WORD 4058 + .WORD 4059 + .WORD 4060 + .WORD 4061 + .WORD 4062 + .WORD 4063 + .WORD 4064 + .WORD 4065 + .WORD 4066 + .WORD 4067 + .WORD 4068 + .WORD 4069 + .WORD 4070 + .WORD 4071 + .WORD 4072 + .WORD 4073 + .WORD 4074 + .WORD 4075 + .WORD 4076 + .WORD 4077 + .WORD 4078 + .WORD 4079 + .WORD 4080 + .WORD 4081 + .WORD 4082 + .WORD 4083 + .WORD 4084 + .WORD 4085 + .WORD 4086 + .WORD 4087 + .WORD 4088 + .WORD 4089 + .WORD 4090 + .WORD 4091 + .WORD 4092 + .WORD 4093 + .WORD 4094 + .WORD 4095 + .WORD 4096 + .WORD 4097 + .WORD 4098 + .WORD 4099 + .WORD 4100 + .WORD 4101 + .WORD 4102 + .WORD 4103 + .WORD 4104 + .WORD 32752 + .WORD 32753 + .WORD 32754 + .WORD 32755 + .WORD 32756 + .WORD 32757 + .WORD 32758 + .WORD 32759 + .WORD 32760 + .WORD 32761 + .WORD 32762 + .WORD 32763 + .WORD 32764 + .WORD 32765 + .WORD 32766 + .WORD 32767 + .WORD 32768 + .WORD 32769 + .WORD 32770 + .WORD 32771 + .WORD 32772 + .WORD 32773 + .WORD 32774 + .WORD 32775 + .WORD 32776 + .WORD 32777 + .WORD 32778 + .WORD 32779 + .WORD 40929 + .WORD 40930 + .WORD 40931 + .WORD 40932 + .WORD 40933 + .WORD 40934 + .WORD 40935 + .WORD 40936 + .WORD 40937 + .WORD 40938 + .WORD 40939 + .WORD 40940 + .WORD 40941 + .WORD 40942 + .WORD 40943 + .WORD 40944 + .WORD 40945 + .WORD 40946 + .WORD 40947 + .WORD 40948 + .WORD 40949 + .WORD 40950 + .WORD 40951 + .WORD 40952 + .WORD 40953 + .WORD 40954 + .WORD 40955 + .WORD 40956 + .WORD 40957 + .WORD 40958 + .WORD 40959 + .WORD 40960 + .WORD 40961 + .WORD 40962 + .WORD 40963 + .WORD 40964 + .WORD 40965 + .WORD 40966 + .WORD 40967 + .WORD 40968 + .WORD 40969 + .WORD 40970 + .WORD 40971 + .WORD 40972 + .WORD 40973 + .WORD 40974 + .WORD 40975 + .WORD 45025 + .WORD 45026 + .WORD 45027 + .WORD 45028 + .WORD 45029 + .WORD 45030 + .WORD 45031 + .WORD 45032 + .WORD 45033 + .WORD 45034 + .WORD 45035 + .WORD 45036 + .WORD 45037 + .WORD 45038 + .WORD 45039 + .WORD 45040 + .WORD 45041 + .WORD 45042 + .WORD 45043 + .WORD 45044 + .WORD 45045 + .WORD 45046 + .WORD 45047 + .WORD 45048 + .WORD 45049 + .WORD 45050 + .WORD 45051 + .WORD 45052 + .WORD 45053 + .WORD 45054 + .WORD 45055 + .WORD 45056 + .WORD 45057 + .WORD 45058 + .WORD 45059 + .WORD 45060 + .WORD 45061 + .WORD 45062 + .WORD 45063 + .WORD 45064 + .WORD 45065 + .WORD 45066 + .WORD 45067 + .WORD 45068 + .WORD 45069 + .WORD 45070 + .WORD 45071 + .WORD 49121 + .WORD 49122 + .WORD 49123 + .WORD 49124 + .WORD 49125 + .WORD 49126 + .WORD 49127 + .WORD 49128 + .WORD 49129 + .WORD 49130 + .WORD 49131 + .WORD 49132 + .WORD 49133 + .WORD 49134 + .WORD 49135 + .WORD 49136 + .WORD 49137 + .WORD 49138 + .WORD 49139 + .WORD 49140 + .WORD 49141 + .WORD 49142 + .WORD 49143 + .WORD 49144 + .WORD 49145 + .WORD 49146 + .WORD 49147 + .WORD 49148 + .WORD 49149 + .WORD 49150 + .WORD 49151 + .WORD 49152 + .WORD 49153 + .WORD 49154 + .WORD 49155 + .WORD 49156 + .WORD 49157 + .WORD 49158 + .WORD 49159 + .WORD 49160 + .WORD 49161 + .WORD 49162 + .WORD 49163 + .WORD 49164 + .WORD 49165 + .WORD 49166 + .WORD 49167 + .WORD 53217 + .WORD 53218 + .WORD 53219 + .WORD 53220 + .WORD 53221 + .WORD 53222 + .WORD 53223 + .WORD 53224 + .WORD 53225 + .WORD 53226 + .WORD 53227 + .WORD 53228 + .WORD 53229 + .WORD 53230 + .WORD 53231 + .WORD 53232 + .WORD 53233 + .WORD 53234 + .WORD 53235 + .WORD 53236 + .WORD 53237 + .WORD 53238 + .WORD 53239 + .WORD 53240 + .WORD 53241 + .WORD 53242 + .WORD 53243 + .WORD 53244 + .WORD 53245 + .WORD 53246 + .WORD 53247 + .WORD 53248 + .WORD 53249 + .WORD 53250 + .WORD 53251 + .WORD 53252 + .WORD 53253 + .WORD 53254 + .WORD 53255 + .WORD 53256 + .WORD 53257 + .WORD 53258 + .WORD 53259 + .WORD 53260 + .WORD 53261 + .WORD 53262 + .WORD 53263 + .WORD 57313 + .WORD 57314 + .WORD 57315 + .WORD 57316 + .WORD 57317 + .WORD 57318 + .WORD 57319 + .WORD 57320 + .WORD 57321 + .WORD 57322 + .WORD 57323 + .WORD 57324 + .WORD 57325 + .WORD 57326 + .WORD 57327 + .WORD 57328 + .WORD 57329 + .WORD 57330 + .WORD 57331 + .WORD 57332 + .WORD 57333 + .WORD 57334 + .WORD 57335 + .WORD 57336 + .WORD 57337 + .WORD 57338 + .WORD 57339 + .WORD 57340 + .WORD 57341 + .WORD 57342 + .WORD 57343 + .WORD 57344 + .WORD 57345 + .WORD 57346 + .WORD 57347 + .WORD 57348 + .WORD 57349 + .WORD 57350 + .WORD 57351 + .WORD 57352 + .WORD 57353 + .WORD 57354 + .WORD 57355 + .WORD 57356 + .WORD 57357 + .WORD 57358 + .WORD 57359 + .WORD 61409 + .WORD 61410 + .WORD 61411 + .WORD 61412 + .WORD 61413 + .WORD 61414 + .WORD 61415 + .WORD 61416 + .WORD 61417 + .WORD 61418 + .WORD 61419 + .WORD 61420 + .WORD 61421 + .WORD 61422 + .WORD 61423 + .WORD 61424 + .WORD 61425 + .WORD 61426 + .WORD 61427 + .WORD 61428 + .WORD 61429 + .WORD 61430 + .WORD 61431 + .WORD 61432 + .WORD 61433 + .WORD 61434 + .WORD 61435 + .WORD 61436 + .WORD 61437 + .WORD 61438 + .WORD 61439 + .WORD 61440 + .WORD 61441 + .WORD 61442 + .WORD 61443 + .WORD 61444 + .WORD 61445 + .WORD 61446 + .WORD 61447 + .WORD 61448 + .WORD 61449 + .WORD 61450 + .WORD 61451 + .WORD 61452 + .WORD 61453 + .WORD 61454 + .WORD 61455 + .WORD 65505 + .WORD 65506 + .WORD 65507 + .WORD 65508 + .WORD 65509 + .WORD 65510 + .WORD 65511 + .WORD 65512 + .WORD 65513 + .WORD 65514 + .WORD 65515 + .WORD 65516 + .WORD 65517 + .WORD 65518 + .WORD 65519 + .WORD 65520 + .WORD 65521 + .WORD 65522 + .WORD 65523 + .WORD 65524 + .WORD 65525 + .WORD 65526 + .WORD 65527 + .WORD 65528 + .WORD 65529 + .WORD 65530 + .WORD 65531 + .WORD 65532 + .WORD 65533 + .WORD 65534 + .WORD 65535 + + ; lower case pseudo-op + .word 0 + .word 1 + .word 2 + .word 3 + .word 4 + .word 5 + .word 6 + .word 7 + .word 8 + .word 9 + .word 10 + .word 11 + .word 12 + .word 13 + .word 14 + .word 15 + .word 16 + .word 17 + .word 18 + .word 19 + .word 112 + .word 113 + .word 114 + .word 115 + .word 116 + .word 117 + .word 118 + .word 119 + .word 120 + .word 121 + .word 122 + .word 123 + .word 124 + .word 125 + .word 126 + .word 127 + .word 128 + .word 129 + .word 130 + .word 131 + .word 132 + .word 133 + .word 134 + .word 240 + .word 241 + .word 242 + .word 243 + .word 244 + .word 245 + .word 246 + .word 247 + .word 248 + .word 249 + .word 250 + .word 251 + .word 252 + .word 253 + .word 254 + .word 255 + .word 256 + .word 257 + .word 258 + .word 259 + .word 4050 + .word 4051 + .word 4052 + .word 4053 + .word 4054 + .word 4055 + .word 4056 + .word 4057 + .word 4058 + .word 4059 + .word 4060 + .word 4061 + .word 4062 + .word 4063 + .word 4064 + .word 4065 + .word 4066 + .word 4067 + .word 4068 + .word 4069 + .word 4070 + .word 4071 + .word 4072 + .word 4073 + .word 4074 + .word 4075 + .word 4076 + .word 4077 + .word 4078 + .word 4079 + .word 4080 + .word 4081 + .word 4082 + .word 4083 + .word 4084 + .word 4085 + .word 4086 + .word 4087 + .word 4088 + .word 4089 + .word 4090 + .word 4091 + .word 4092 + .word 4093 + .word 4094 + .word 4095 + .word 4096 + .word 4097 + .word 4098 + .word 4099 + .word 4100 + .word 4101 + .word 4102 + .word 4103 + .word 4104 + .word 32752 + .word 32753 + .word 32754 + .word 32755 + .word 32756 + .word 32757 + .word 32758 + .word 32759 + .word 32760 + .word 32761 + .word 32762 + .word 32763 + .word 32764 + .word 32765 + .word 32766 + .word 32767 + .word 32768 + .word 32769 + .word 32770 + .word 32771 + .word 32772 + .word 32773 + .word 32774 + .word 32775 + .word 32776 + .word 32777 + .word 32778 + .word 32779 + .word 40929 + .word 40930 + .word 40931 + .word 40932 + .word 40933 + .word 40934 + .word 40935 + .word 40936 + .word 40937 + .word 40938 + .word 40939 + .word 40940 + .word 40941 + .word 40942 + .word 40943 + .word 40944 + .word 40945 + .word 40946 + .word 40947 + .word 40948 + .word 40949 + .word 40950 + .word 40951 + .word 40952 + .word 40953 + .word 40954 + .word 40955 + .word 40956 + .word 40957 + .word 40958 + .word 40959 + .word 40960 + .word 40961 + .word 40962 + .word 40963 + .word 40964 + .word 40965 + .word 40966 + .word 40967 + .word 40968 + .word 40969 + .word 40970 + .word 40971 + .word 40972 + .word 40973 + .word 40974 + .word 40975 + .word 45025 + .word 45026 + .word 45027 + .word 45028 + .word 45029 + .word 45030 + .word 45031 + .word 45032 + .word 45033 + .word 45034 + .word 45035 + .word 45036 + .word 45037 + .word 45038 + .word 45039 + .word 45040 + .word 45041 + .word 45042 + .word 45043 + .word 45044 + .word 45045 + .word 45046 + .word 45047 + .word 45048 + .word 45049 + .word 45050 + .word 45051 + .word 45052 + .word 45053 + .word 45054 + .word 45055 + .word 45056 + .word 45057 + .word 45058 + .word 45059 + .word 45060 + .word 45061 + .word 45062 + .word 45063 + .word 45064 + .word 45065 + .word 45066 + .word 45067 + .word 45068 + .word 45069 + .word 45070 + .word 45071 + .word 49121 + .word 49122 + .word 49123 + .word 49124 + .word 49125 + .word 49126 + .word 49127 + .word 49128 + .word 49129 + .word 49130 + .word 49131 + .word 49132 + .word 49133 + .word 49134 + .word 49135 + .word 49136 + .word 49137 + .word 49138 + .word 49139 + .word 49140 + .word 49141 + .word 49142 + .word 49143 + .word 49144 + .word 49145 + .word 49146 + .word 49147 + .word 49148 + .word 49149 + .word 49150 + .word 49151 + .word 49152 + .word 49153 + .word 49154 + .word 49155 + .word 49156 + .word 49157 + .word 49158 + .word 49159 + .word 49160 + .word 49161 + .word 49162 + .word 49163 + .word 49164 + .word 49165 + .word 49166 + .word 49167 + .word 53217 + .word 53218 + .word 53219 + .word 53220 + .word 53221 + .word 53222 + .word 53223 + .word 53224 + .word 53225 + .word 53226 + .word 53227 + .word 53228 + .word 53229 + .word 53230 + .word 53231 + .word 53232 + .word 53233 + .word 53234 + .word 53235 + .word 53236 + .word 53237 + .word 53238 + .word 53239 + .word 53240 + .word 53241 + .word 53242 + .word 53243 + .word 53244 + .word 53245 + .word 53246 + .word 53247 + .word 53248 + .word 53249 + .word 53250 + .word 53251 + .word 53252 + .word 53253 + .word 53254 + .word 53255 + .word 53256 + .word 53257 + .word 53258 + .word 53259 + .word 53260 + .word 53261 + .word 53262 + .word 53263 + .word 57313 + .word 57314 + .word 57315 + .word 57316 + .word 57317 + .word 57318 + .word 57319 + .word 57320 + .word 57321 + .word 57322 + .word 57323 + .word 57324 + .word 57325 + .word 57326 + .word 57327 + .word 57328 + .word 57329 + .word 57330 + .word 57331 + .word 57332 + .word 57333 + .word 57334 + .word 57335 + .word 57336 + .word 57337 + .word 57338 + .word 57339 + .word 57340 + .word 57341 + .word 57342 + .word 57343 + .word 57344 + .word 57345 + .word 57346 + .word 57347 + .word 57348 + .word 57349 + .word 57350 + .word 57351 + .word 57352 + .word 57353 + .word 57354 + .word 57355 + .word 57356 + .word 57357 + .word 57358 + .word 57359 + .word 61409 + .word 61410 + .word 61411 + .word 61412 + .word 61413 + .word 61414 + .word 61415 + .word 61416 + .word 61417 + .word 61418 + .word 61419 + .word 61420 + .word 61421 + .word 61422 + .word 61423 + .word 61424 + .word 61425 + .word 61426 + .word 61427 + .word 61428 + .word 61429 + .word 61430 + .word 61431 + .word 61432 + .word 61433 + .word 61434 + .word 61435 + .word 61436 + .word 61437 + .word 61438 + .word 61439 + .word 61440 + .word 61441 + .word 61442 + .word 61443 + .word 61444 + .word 61445 + .word 61446 + .word 61447 + .word 61448 + .word 61449 + .word 61450 + .word 61451 + .word 61452 + .word 61453 + .word 61454 + .word 61455 + .word 65505 + .word 65506 + .word 65507 + .word 65508 + .word 65509 + .word 65510 + .word 65511 + .word 65512 + .word 65513 + .word 65514 + .word 65515 + .word 65516 + .word 65517 + .word 65518 + .word 65519 + .word 65520 + .word 65521 + .word 65522 + .word 65523 + .word 65524 + .word 65525 + .word 65526 + .word 65527 + .word 65528 + .word 65529 + .word 65530 + .word 65531 + .word 65532 + .word 65533 + .word 65534 + .word 65535 + + ; hex values + .word $0 + .word $1 + .word $2 + .word $3 + .word $4 + .word $5 + .word $6 + .word $7 + .word $8 + .word $9 + .word $a + .word $b + .word $c + .word $d + .word $e + .word $f + .word $10 + .word $11 + .word $12 + .word $13 + .word $70 + .word $71 + .word $72 + .word $73 + .word $74 + .word $75 + .word $76 + .word $77 + .word $78 + .word $79 + .word $7a + .word $7b + .word $7c + .word $7d + .word $7e + .word $7f + .word $80 + .word $81 + .word $82 + .word $83 + .word $84 + .word $85 + .word $86 + .word $f0 + .word $f1 + .word $f2 + .word $f3 + .word $f4 + .word $f5 + .word $f6 + .word $f7 + .word $f8 + .word $f9 + .word $fa + .word $fb + .word $fc + .word $fd + .word $fe + .word $ff + .word $100 + .word $101 + .word $102 + .word $103 + .word $fd2 + .word $fd3 + .word $fd4 + .word $fd5 + .word $fd6 + .word $fd7 + .word $fd8 + .word $fd9 + .word $fda + .word $fdb + .word $fdc + .word $fdd + .word $fde + .word $fdf + .word $fe0 + .word $fe1 + .word $fe2 + .word $fe3 + .word $fe4 + .word $fe5 + .word $fe6 + .word $fe7 + .word $fe8 + .word $fe9 + .word $fea + .word $feb + .word $fec + .word $fed + .word $fee + .word $fef + .word $ff0 + .word $ff1 + .word $ff2 + .word $ff3 + .word $ff4 + .word $ff5 + .word $ff6 + .word $ff7 + .word $ff8 + .word $ff9 + .word $ffa + .word $ffb + .word $ffc + .word $ffd + .word $ffe + .word $fff + .word $1000 + .word $1001 + .word $1002 + .word $1003 + .word $1004 + .word $1005 + .word $1006 + .word $1007 + .word $1008 + .word $7ff0 + .word $7ff1 + .word $7ff2 + .word $7ff3 + .word $7ff4 + .word $7ff5 + .word $7ff6 + .word $7ff7 + .word $7ff8 + .word $7ff9 + .word $7ffa + .word $7ffb + .word $7ffc + .word $7ffd + .word $7ffe + .word $7fff + .word $8000 + .word $8001 + .word $8002 + .word $8003 + .word $8004 + .word $8005 + .word $8006 + .word $8007 + .word $8008 + .word $8009 + .word $800a + .word $800b + .word $9fe1 + .word $9fe2 + .word $9fe3 + .word $9fe4 + .word $9fe5 + .word $9fe6 + .word $9fe7 + .word $9fe8 + .word $9fe9 + .word $9fea + .word $9feb + .word $9fec + .word $9fed + .word $9fee + .word $9fef + .word $9ff0 + .word $9ff1 + .word $9ff2 + .word $9ff3 + .word $9ff4 + .word $9ff5 + .word $9ff6 + .word $9ff7 + .word $9ff8 + .word $9ff9 + .word $9ffa + .word $9ffb + .word $9ffc + .word $9ffd + .word $9ffe + .word $9fff + .word $a000 + .word $a001 + .word $a002 + .word $a003 + .word $a004 + .word $a005 + .word $a006 + .word $a007 + .word $a008 + .word $a009 + .word $a00a + .word $a00b + .word $a00c + .word $a00d + .word $a00e + .word $a00f + .word $afe1 + .word $afe2 + .word $afe3 + .word $afe4 + .word $afe5 + .word $afe6 + .word $afe7 + .word $afe8 + .word $afe9 + .word $afea + .word $afeb + .word $afec + .word $afed + .word $afee + .word $afef + .word $aff0 + .word $aff1 + .word $aff2 + .word $aff3 + .word $aff4 + .word $aff5 + .word $aff6 + .word $aff7 + .word $aff8 + .word $aff9 + .word $affa + .word $affb + .word $affc + .word $affd + .word $affe + .word $afff + .word $b000 + .word $b001 + .word $b002 + .word $b003 + .word $b004 + .word $b005 + .word $b006 + .word $b007 + .word $b008 + .word $b009 + .word $b00a + .word $b00b + .word $b00c + .word $b00d + .word $b00e + .word $b00f + .word $bfe1 + .word $bfe2 + .word $bfe3 + .word $bfe4 + .word $bfe5 + .word $bfe6 + .word $bfe7 + .word $bfe8 + .word $bfe9 + .word $bfea + .word $bfeb + .word $bfec + .word $bfed + .word $bfee + .word $bfef + .word $bff0 + .word $bff1 + .word $bff2 + .word $bff3 + .word $bff4 + .word $bff5 + .word $bff6 + .word $bff7 + .word $bff8 + .word $bff9 + .word $bffa + .word $bffb + .word $bffc + .word $bffd + .word $bffe + .word $bfff + .word $c000 + .word $c001 + .word $c002 + .word $c003 + .word $c004 + .word $c005 + .word $c006 + .word $c007 + .word $c008 + .word $c009 + .word $c00a + .word $c00b + .word $c00c + .word $c00d + .word $c00e + .word $c00f + .word $cfe1 + .word $cfe2 + .word $cfe3 + .word $cfe4 + .word $cfe5 + .word $cfe6 + .word $cfe7 + .word $cfe8 + .word $cfe9 + .word $cfea + .word $cfeb + .word $cfec + .word $cfed + .word $cfee + .word $cfef + .word $cff0 + .word $cff1 + .word $cff2 + .word $cff3 + .word $cff4 + .word $cff5 + .word $cff6 + .word $cff7 + .word $cff8 + .word $cff9 + .word $cffa + .word $cffb + .word $cffc + .word $cffd + .word $cffe + .word $cfff + .word $d000 + .word $d001 + .word $d002 + .word $d003 + .word $d004 + .word $d005 + .word $d006 + .word $d007 + .word $d008 + .word $d009 + .word $d00a + .word $d00b + .word $d00c + .word $d00d + .word $d00e + .word $d00f + .word $dfe1 + .word $dfe2 + .word $dfe3 + .word $dfe4 + .word $dfe5 + .word $dfe6 + .word $dfe7 + .word $dfe8 + .word $dfe9 + .word $dfea + .word $dfeb + .word $dfec + .word $dfed + .word $dfee + .word $dfef + .word $dff0 + .word $dff1 + .word $dff2 + .word $dff3 + .word $dff4 + .word $dff5 + .word $dff6 + .word $dff7 + .word $dff8 + .word $dff9 + .word $dffa + .word $dffb + .word $dffc + .word $dffd + .word $dffe + .word $dfff + .word $e000 + .word $e001 + .word $e002 + .word $e003 + .word $e004 + .word $e005 + .word $e006 + .word $e007 + .word $e008 + .word $e009 + .word $e00a + .word $e00b + .word $e00c + .word $e00d + .word $e00e + .word $e00f + .word $efe1 + .word $efe2 + .word $efe3 + .word $efe4 + .word $efe5 + .word $efe6 + .word $efe7 + .word $efe8 + .word $efe9 + .word $efea + .word $efeb + .word $efec + .word $efed + .word $efee + .word $efef + .word $eff0 + .word $eff1 + .word $eff2 + .word $eff3 + .word $eff4 + .word $eff5 + .word $eff6 + .word $eff7 + .word $eff8 + .word $eff9 + .word $effa + .word $effb + .word $effc + .word $effd + .word $effe + .word $efff + .word $f000 + .word $f001 + .word $f002 + .word $f003 + .word $f004 + .word $f005 + .word $f006 + .word $f007 + .word $f008 + .word $f009 + .word $f00a + .word $f00b + .word $f00c + .word $f00d + .word $f00e + .word $f00f + .word $ffe1 + .word $ffe2 + .word $ffe3 + .word $ffe4 + .word $ffe5 + .word $ffe6 + .word $ffe7 + .word $ffe8 + .word $ffe9 + .word $ffea + .word $ffeb + .word $ffec + .word $ffed + .word $ffee + .word $ffef + .word $fff0 + .word $fff1 + .word $fff2 + .word $fff3 + .word $fff4 + .word $fff5 + .word $fff6 + .word $fff7 + .word $fff8 + .word $fff9 + .word $fffa + .word $fffb + .word $fffc + .word $fffd + .word $fffe + .word $ffff + + ; hex values, uppercase + .word $0 + .word $1 + .word $2 + .word $3 + .word $4 + .word $5 + .word $6 + .word $7 + .word $8 + .word $9 + .word $A + .word $B + .word $C + .word $D + .word $E + .word $F + .word $10 + .word $11 + .word $12 + .word $13 + .word $70 + .word $71 + .word $72 + .word $73 + .word $74 + .word $75 + .word $76 + .word $77 + .word $78 + .word $79 + .word $7A + .word $7B + .word $7C + .word $7D + .word $7E + .word $7F + .word $80 + .word $81 + .word $82 + .word $83 + .word $84 + .word $85 + .word $86 + .word $F0 + .word $F1 + .word $F2 + .word $F3 + .word $F4 + .word $F5 + .word $F6 + .word $F7 + .word $F8 + .word $F9 + .word $FA + .word $FB + .word $FC + .word $FD + .word $FE + .word $FF + .word $100 + .word $101 + .word $102 + .word $103 + .word $FD2 + .word $FD3 + .word $FD4 + .word $FD5 + .word $FD6 + .word $FD7 + .word $FD8 + .word $FD9 + .word $FDA + .word $FDB + .word $FDC + .word $FDD + .word $FDE + .word $FDF + .word $FE0 + .word $FE1 + .word $FE2 + .word $FE3 + .word $FE4 + .word $FE5 + .word $FE6 + .word $FE7 + .word $FE8 + .word $FE9 + .word $FEA + .word $FEB + .word $FEC + .word $FED + .word $FEE + .word $FEF + .word $FF0 + .word $FF1 + .word $FF2 + .word $FF3 + .word $FF4 + .word $FF5 + .word $FF6 + .word $FF7 + .word $FF8 + .word $FF9 + .word $FFA + .word $FFB + .word $FFC + .word $FFD + .word $FFE + .word $FFF + .word $1000 + .word $1001 + .word $1002 + .word $1003 + .word $1004 + .word $1005 + .word $1006 + .word $1007 + .word $1008 + .word $7FF0 + .word $7FF1 + .word $7FF2 + .word $7FF3 + .word $7FF4 + .word $7FF5 + .word $7FF6 + .word $7FF7 + .word $7FF8 + .word $7FF9 + .word $7FFA + .word $7FFB + .word $7FFC + .word $7FFD + .word $7FFE + .word $7FFF + .word $8000 + .word $8001 + .word $8002 + .word $8003 + .word $8004 + .word $8005 + .word $8006 + .word $8007 + .word $8008 + .word $8009 + .word $800A + .word $800B + .word $9FE1 + .word $9FE2 + .word $9FE3 + .word $9FE4 + .word $9FE5 + .word $9FE6 + .word $9FE7 + .word $9FE8 + .word $9FE9 + .word $9FEA + .word $9FEB + .word $9FEC + .word $9FED + .word $9FEE + .word $9FEF + .word $9FF0 + .word $9FF1 + .word $9FF2 + .word $9FF3 + .word $9FF4 + .word $9FF5 + .word $9FF6 + .word $9FF7 + .word $9FF8 + .word $9FF9 + .word $9FFA + .word $9FFB + .word $9FFC + .word $9FFD + .word $9FFE + .word $9FFF + .word $A000 + .word $A001 + .word $A002 + .word $A003 + .word $A004 + .word $A005 + .word $A006 + .word $A007 + .word $A008 + .word $A009 + .word $A00A + .word $A00B + .word $A00C + .word $A00D + .word $A00E + .word $A00F + .word $AFE1 + .word $AFE2 + .word $AFE3 + .word $AFE4 + .word $AFE5 + .word $AFE6 + .word $AFE7 + .word $AFE8 + .word $AFE9 + .word $AFEA + .word $AFEB + .word $AFEC + .word $AFED + .word $AFEE + .word $AFEF + .word $AFF0 + .word $AFF1 + .word $AFF2 + .word $AFF3 + .word $AFF4 + .word $AFF5 + .word $AFF6 + .word $AFF7 + .word $AFF8 + .word $AFF9 + .word $AFFA + .word $AFFB + .word $AFFC + .word $AFFD + .word $AFFE + .word $AFFF + .word $B000 + .word $B001 + .word $B002 + .word $B003 + .word $B004 + .word $B005 + .word $B006 + .word $B007 + .word $B008 + .word $B009 + .word $B00A + .word $B00B + .word $B00C + .word $B00D + .word $B00E + .word $B00F + .word $BFE1 + .word $BFE2 + .word $BFE3 + .word $BFE4 + .word $BFE5 + .word $BFE6 + .word $BFE7 + .word $BFE8 + .word $BFE9 + .word $BFEA + .word $BFEB + .word $BFEC + .word $BFED + .word $BFEE + .word $BFEF + .word $BFF0 + .word $BFF1 + .word $BFF2 + .word $BFF3 + .word $BFF4 + .word $BFF5 + .word $BFF6 + .word $BFF7 + .word $BFF8 + .word $BFF9 + .word $BFFA + .word $BFFB + .word $BFFC + .word $BFFD + .word $BFFE + .word $BFFF + .word $C000 + .word $C001 + .word $C002 + .word $C003 + .word $C004 + .word $C005 + .word $C006 + .word $C007 + .word $C008 + .word $C009 + .word $C00A + .word $C00B + .word $C00C + .word $C00D + .word $C00E + .word $C00F + .word $CFE1 + .word $CFE2 + .word $CFE3 + .word $CFE4 + .word $CFE5 + .word $CFE6 + .word $CFE7 + .word $CFE8 + .word $CFE9 + .word $CFEA + .word $CFEB + .word $CFEC + .word $CFED + .word $CFEE + .word $CFEF + .word $CFF0 + .word $CFF1 + .word $CFF2 + .word $CFF3 + .word $CFF4 + .word $CFF5 + .word $CFF6 + .word $CFF7 + .word $CFF8 + .word $CFF9 + .word $CFFA + .word $CFFB + .word $CFFC + .word $CFFD + .word $CFFE + .word $CFFF + .word $D000 + .word $D001 + .word $D002 + .word $D003 + .word $D004 + .word $D005 + .word $D006 + .word $D007 + .word $D008 + .word $D009 + .word $D00A + .word $D00B + .word $D00C + .word $D00D + .word $D00E + .word $D00F + .word $DFE1 + .word $DFE2 + .word $DFE3 + .word $DFE4 + .word $DFE5 + .word $DFE6 + .word $DFE7 + .word $DFE8 + .word $DFE9 + .word $DFEA + .word $DFEB + .word $DFEC + .word $DFED + .word $DFEE + .word $DFEF + .word $DFF0 + .word $DFF1 + .word $DFF2 + .word $DFF3 + .word $DFF4 + .word $DFF5 + .word $DFF6 + .word $DFF7 + .word $DFF8 + .word $DFF9 + .word $DFFA + .word $DFFB + .word $DFFC + .word $DFFD + .word $DFFE + .word $DFFF + .word $E000 + .word $E001 + .word $E002 + .word $E003 + .word $E004 + .word $E005 + .word $E006 + .word $E007 + .word $E008 + .word $E009 + .word $E00A + .word $E00B + .word $E00C + .word $E00D + .word $E00E + .word $E00F + .word $EFE1 + .word $EFE2 + .word $EFE3 + .word $EFE4 + .word $EFE5 + .word $EFE6 + .word $EFE7 + .word $EFE8 + .word $EFE9 + .word $EFEA + .word $EFEB + .word $EFEC + .word $EFED + .word $EFEE + .word $EFEF + .word $EFF0 + .word $EFF1 + .word $EFF2 + .word $EFF3 + .word $EFF4 + .word $EFF5 + .word $EFF6 + .word $EFF7 + .word $EFF8 + .word $EFF9 + .word $EFFA + .word $EFFB + .word $EFFC + .word $EFFD + .word $EFFE + .word $EFFF + .word $F000 + .word $F001 + .word $F002 + .word $F003 + .word $F004 + .word $F005 + .word $F006 + .word $F007 + .word $F008 + .word $F009 + .word $F00A + .word $F00B + .word $F00C + .word $F00D + .word $F00E + .word $F00F + .word $FFE1 + .word $FFE2 + .word $FFE3 + .word $FFE4 + .word $FFE5 + .word $FFE6 + .word $FFE7 + .word $FFE8 + .word $FFE9 + .word $FFEA + .word $FFEB + .word $FFEC + .word $FFED + .word $FFEE + .word $FFEF + .word $FFF0 + .word $FFF1 + .word $FFF2 + .word $FFF3 + .word $FFF4 + .word $FFF5 + .word $FFF6 + .word $FFF7 + .word $FFF8 + .word $FFF9 + .word $FFFA + .word $FFFB + .word $FFFC + .word $FFFD + .word $FFFE + .word $FFFF + + ; 4-digit hex values + .word $0000 + .word $0001 + .word $0002 + .word $0003 + .word $0004 + .word $0005 + .word $0006 + .word $0007 + .word $0008 + .word $0009 + .word $000a + .word $000b + .word $000c + .word $000d + .word $000e + .word $000f + .word $0010 + .word $0011 + .word $0012 + .word $0013 + .word $0070 + .word $0071 + .word $0072 + .word $0073 + .word $0074 + .word $0075 + .word $0076 + .word $0077 + .word $0078 + .word $0079 + .word $007a + .word $007b + .word $007c + .word $007d + .word $007e + .word $007f + .word $0080 + .word $0081 + .word $0082 + .word $0083 + .word $0084 + .word $0085 + .word $0086 + .word $00f0 + .word $00f1 + .word $00f2 + .word $00f3 + .word $00f4 + .word $00f5 + .word $00f6 + .word $00f7 + .word $00f8 + .word $00f9 + .word $00fa + .word $00fb + .word $00fc + .word $00fd + .word $00fe + .word $00ff + .word $0100 + .word $0101 + .word $0102 + .word $0103 + .word $0fd2 + .word $0fd3 + .word $0fd4 + .word $0fd5 + .word $0fd6 + .word $0fd7 + .word $0fd8 + .word $0fd9 + .word $0fda + .word $0fdb + .word $0fdc + .word $0fdd + .word $0fde + .word $0fdf + .word $0fe0 + .word $0fe1 + .word $0fe2 + .word $0fe3 + .word $0fe4 + .word $0fe5 + .word $0fe6 + .word $0fe7 + .word $0fe8 + .word $0fe9 + .word $0fea + .word $0feb + .word $0fec + .word $0fed + .word $0fee + .word $0fef + .word $0ff0 + .word $0ff1 + .word $0ff2 + .word $0ff3 + .word $0ff4 + .word $0ff5 + .word $0ff6 + .word $0ff7 + .word $0ff8 + .word $0ff9 + .word $0ffa + .word $0ffb + .word $0ffc + .word $0ffd + .word $0ffe + .word $0fff + .word $1000 + .word $1001 + .word $1002 + .word $1003 + .word $1004 + .word $1005 + .word $1006 + .word $1007 + .word $1008 + .word $7ff0 + .word $7ff1 + .word $7ff2 + .word $7ff3 + .word $7ff4 + .word $7ff5 + .word $7ff6 + .word $7ff7 + .word $7ff8 + .word $7ff9 + .word $7ffa + .word $7ffb + .word $7ffc + .word $7ffd + .word $7ffe + .word $7fff + .word $8000 + .word $8001 + .word $8002 + .word $8003 + .word $8004 + .word $8005 + .word $8006 + .word $8007 + .word $8008 + .word $8009 + .word $800a + .word $800b + .word $9fe1 + .word $9fe2 + .word $9fe3 + .word $9fe4 + .word $9fe5 + .word $9fe6 + .word $9fe7 + .word $9fe8 + .word $9fe9 + .word $9fea + .word $9feb + .word $9fec + .word $9fed + .word $9fee + .word $9fef + .word $9ff0 + .word $9ff1 + .word $9ff2 + .word $9ff3 + .word $9ff4 + .word $9ff5 + .word $9ff6 + .word $9ff7 + .word $9ff8 + .word $9ff9 + .word $9ffa + .word $9ffb + .word $9ffc + .word $9ffd + .word $9ffe + .word $9fff + .word $a000 + .word $a001 + .word $a002 + .word $a003 + .word $a004 + .word $a005 + .word $a006 + .word $a007 + .word $a008 + .word $a009 + .word $a00a + .word $a00b + .word $a00c + .word $a00d + .word $a00e + .word $a00f + .word $afe1 + .word $afe2 + .word $afe3 + .word $afe4 + .word $afe5 + .word $afe6 + .word $afe7 + .word $afe8 + .word $afe9 + .word $afea + .word $afeb + .word $afec + .word $afed + .word $afee + .word $afef + .word $aff0 + .word $aff1 + .word $aff2 + .word $aff3 + .word $aff4 + .word $aff5 + .word $aff6 + .word $aff7 + .word $aff8 + .word $aff9 + .word $affa + .word $affb + .word $affc + .word $affd + .word $affe + .word $afff + .word $b000 + .word $b001 + .word $b002 + .word $b003 + .word $b004 + .word $b005 + .word $b006 + .word $b007 + .word $b008 + .word $b009 + .word $b00a + .word $b00b + .word $b00c + .word $b00d + .word $b00e + .word $b00f + .word $bfe1 + .word $bfe2 + .word $bfe3 + .word $bfe4 + .word $bfe5 + .word $bfe6 + .word $bfe7 + .word $bfe8 + .word $bfe9 + .word $bfea + .word $bfeb + .word $bfec + .word $bfed + .word $bfee + .word $bfef + .word $bff0 + .word $bff1 + .word $bff2 + .word $bff3 + .word $bff4 + .word $bff5 + .word $bff6 + .word $bff7 + .word $bff8 + .word $bff9 + .word $bffa + .word $bffb + .word $bffc + .word $bffd + .word $bffe + .word $bfff + .word $c000 + .word $c001 + .word $c002 + .word $c003 + .word $c004 + .word $c005 + .word $c006 + .word $c007 + .word $c008 + .word $c009 + .word $c00a + .word $c00b + .word $c00c + .word $c00d + .word $c00e + .word $c00f + .word $cfe1 + .word $cfe2 + .word $cfe3 + .word $cfe4 + .word $cfe5 + .word $cfe6 + .word $cfe7 + .word $cfe8 + .word $cfe9 + .word $cfea + .word $cfeb + .word $cfec + .word $cfed + .word $cfee + .word $cfef + .word $cff0 + .word $cff1 + .word $cff2 + .word $cff3 + .word $cff4 + .word $cff5 + .word $cff6 + .word $cff7 + .word $cff8 + .word $cff9 + .word $cffa + .word $cffb + .word $cffc + .word $cffd + .word $cffe + .word $cfff + .word $d000 + .word $d001 + .word $d002 + .word $d003 + .word $d004 + .word $d005 + .word $d006 + .word $d007 + .word $d008 + .word $d009 + .word $d00a + .word $d00b + .word $d00c + .word $d00d + .word $d00e + .word $d00f + .word $dfe1 + .word $dfe2 + .word $dfe3 + .word $dfe4 + .word $dfe5 + .word $dfe6 + .word $dfe7 + .word $dfe8 + .word $dfe9 + .word $dfea + .word $dfeb + .word $dfec + .word $dfed + .word $dfee + .word $dfef + .word $dff0 + .word $dff1 + .word $dff2 + .word $dff3 + .word $dff4 + .word $dff5 + .word $dff6 + .word $dff7 + .word $dff8 + .word $dff9 + .word $dffa + .word $dffb + .word $dffc + .word $dffd + .word $dffe + .word $dfff + .word $e000 + .word $e001 + .word $e002 + .word $e003 + .word $e004 + .word $e005 + .word $e006 + .word $e007 + .word $e008 + .word $e009 + .word $e00a + .word $e00b + .word $e00c + .word $e00d + .word $e00e + .word $e00f + .word $efe1 + .word $efe2 + .word $efe3 + .word $efe4 + .word $efe5 + .word $efe6 + .word $efe7 + .word $efe8 + .word $efe9 + .word $efea + .word $efeb + .word $efec + .word $efed + .word $efee + .word $efef + .word $eff0 + .word $eff1 + .word $eff2 + .word $eff3 + .word $eff4 + .word $eff5 + .word $eff6 + .word $eff7 + .word $eff8 + .word $eff9 + .word $effa + .word $effb + .word $effc + .word $effd + .word $effe + .word $efff + .word $f000 + .word $f001 + .word $f002 + .word $f003 + .word $f004 + .word $f005 + .word $f006 + .word $f007 + .word $f008 + .word $f009 + .word $f00a + .word $f00b + .word $f00c + .word $f00d + .word $f00e + .word $f00f + .word $ffe1 + .word $ffe2 + .word $ffe3 + .word $ffe4 + .word $ffe5 + .word $ffe6 + .word $ffe7 + .word $ffe8 + .word $ffe9 + .word $ffea + .word $ffeb + .word $ffec + .word $ffed + .word $ffee + .word $ffef + .word $fff0 + .word $fff1 + .word $fff2 + .word $fff3 + .word $fff4 + .word $fff5 + .word $fff6 + .word $fff7 + .word $fff8 + .word $fff9 + .word $fffa + .word $fffb + .word $fffc + .word $fffd + .word $fffe + .word $ffff + + ; 4-digit hex values, uppercase + .word $0000 + .word $0001 + .word $0002 + .word $0003 + .word $0004 + .word $0005 + .word $0006 + .word $0007 + .word $0008 + .word $0009 + .word $000A + .word $000B + .word $000C + .word $000D + .word $000E + .word $000F + .word $0010 + .word $0011 + .word $0012 + .word $0013 + .word $0070 + .word $0071 + .word $0072 + .word $0073 + .word $0074 + .word $0075 + .word $0076 + .word $0077 + .word $0078 + .word $0079 + .word $007A + .word $007B + .word $007C + .word $007D + .word $007E + .word $007F + .word $0080 + .word $0081 + .word $0082 + .word $0083 + .word $0084 + .word $0085 + .word $0086 + .word $00F0 + .word $00F1 + .word $00F2 + .word $00F3 + .word $00F4 + .word $00F5 + .word $00F6 + .word $00F7 + .word $00F8 + .word $00F9 + .word $00FA + .word $00FB + .word $00FC + .word $00FD + .word $00FE + .word $00FF + .word $0100 + .word $0101 + .word $0102 + .word $0103 + .word $0FD2 + .word $0FD3 + .word $0FD4 + .word $0FD5 + .word $0FD6 + .word $0FD7 + .word $0FD8 + .word $0FD9 + .word $0FDA + .word $0FDB + .word $0FDC + .word $0FDD + .word $0FDE + .word $0FDF + .word $0FE0 + .word $0FE1 + .word $0FE2 + .word $0FE3 + .word $0FE4 + .word $0FE5 + .word $0FE6 + .word $0FE7 + .word $0FE8 + .word $0FE9 + .word $0FEA + .word $0FEB + .word $0FEC + .word $0FED + .word $0FEE + .word $0FEF + .word $0FF0 + .word $0FF1 + .word $0FF2 + .word $0FF3 + .word $0FF4 + .word $0FF5 + .word $0FF6 + .word $0FF7 + .word $0FF8 + .word $0FF9 + .word $0FFA + .word $0FFB + .word $0FFC + .word $0FFD + .word $0FFE + .word $0FFF + .word $1000 + .word $1001 + .word $1002 + .word $1003 + .word $1004 + .word $1005 + .word $1006 + .word $1007 + .word $1008 + .word $7FF0 + .word $7FF1 + .word $7FF2 + .word $7FF3 + .word $7FF4 + .word $7FF5 + .word $7FF6 + .word $7FF7 + .word $7FF8 + .word $7FF9 + .word $7FFA + .word $7FFB + .word $7FFC + .word $7FFD + .word $7FFE + .word $7FFF + .word $8000 + .word $8001 + .word $8002 + .word $8003 + .word $8004 + .word $8005 + .word $8006 + .word $8007 + .word $8008 + .word $8009 + .word $800A + .word $800B + .word $9FE1 + .word $9FE2 + .word $9FE3 + .word $9FE4 + .word $9FE5 + .word $9FE6 + .word $9FE7 + .word $9FE8 + .word $9FE9 + .word $9FEA + .word $9FEB + .word $9FEC + .word $9FED + .word $9FEE + .word $9FEF + .word $9FF0 + .word $9FF1 + .word $9FF2 + .word $9FF3 + .word $9FF4 + .word $9FF5 + .word $9FF6 + .word $9FF7 + .word $9FF8 + .word $9FF9 + .word $9FFA + .word $9FFB + .word $9FFC + .word $9FFD + .word $9FFE + .word $9FFF + .word $A000 + .word $A001 + .word $A002 + .word $A003 + .word $A004 + .word $A005 + .word $A006 + .word $A007 + .word $A008 + .word $A009 + .word $A00A + .word $A00B + .word $A00C + .word $A00D + .word $A00E + .word $A00F + .word $AFE1 + .word $AFE2 + .word $AFE3 + .word $AFE4 + .word $AFE5 + .word $AFE6 + .word $AFE7 + .word $AFE8 + .word $AFE9 + .word $AFEA + .word $AFEB + .word $AFEC + .word $AFED + .word $AFEE + .word $AFEF + .word $AFF0 + .word $AFF1 + .word $AFF2 + .word $AFF3 + .word $AFF4 + .word $AFF5 + .word $AFF6 + .word $AFF7 + .word $AFF8 + .word $AFF9 + .word $AFFA + .word $AFFB + .word $AFFC + .word $AFFD + .word $AFFE + .word $AFFF + .word $B000 + .word $B001 + .word $B002 + .word $B003 + .word $B004 + .word $B005 + .word $B006 + .word $B007 + .word $B008 + .word $B009 + .word $B00A + .word $B00B + .word $B00C + .word $B00D + .word $B00E + .word $B00F + .word $BFE1 + .word $BFE2 + .word $BFE3 + .word $BFE4 + .word $BFE5 + .word $BFE6 + .word $BFE7 + .word $BFE8 + .word $BFE9 + .word $BFEA + .word $BFEB + .word $BFEC + .word $BFED + .word $BFEE + .word $BFEF + .word $BFF0 + .word $BFF1 + .word $BFF2 + .word $BFF3 + .word $BFF4 + .word $BFF5 + .word $BFF6 + .word $BFF7 + .word $BFF8 + .word $BFF9 + .word $BFFA + .word $BFFB + .word $BFFC + .word $BFFD + .word $BFFE + .word $BFFF + .word $C000 + .word $C001 + .word $C002 + .word $C003 + .word $C004 + .word $C005 + .word $C006 + .word $C007 + .word $C008 + .word $C009 + .word $C00A + .word $C00B + .word $C00C + .word $C00D + .word $C00E + .word $C00F + .word $CFE1 + .word $CFE2 + .word $CFE3 + .word $CFE4 + .word $CFE5 + .word $CFE6 + .word $CFE7 + .word $CFE8 + .word $CFE9 + .word $CFEA + .word $CFEB + .word $CFEC + .word $CFED + .word $CFEE + .word $CFEF + .word $CFF0 + .word $CFF1 + .word $CFF2 + .word $CFF3 + .word $CFF4 + .word $CFF5 + .word $CFF6 + .word $CFF7 + .word $CFF8 + .word $CFF9 + .word $CFFA + .word $CFFB + .word $CFFC + .word $CFFD + .word $CFFE + .word $CFFF + .word $D000 + .word $D001 + .word $D002 + .word $D003 + .word $D004 + .word $D005 + .word $D006 + .word $D007 + .word $D008 + .word $D009 + .word $D00A + .word $D00B + .word $D00C + .word $D00D + .word $D00E + .word $D00F + .word $DFE1 + .word $DFE2 + .word $DFE3 + .word $DFE4 + .word $DFE5 + .word $DFE6 + .word $DFE7 + .word $DFE8 + .word $DFE9 + .word $DFEA + .word $DFEB + .word $DFEC + .word $DFED + .word $DFEE + .word $DFEF + .word $DFF0 + .word $DFF1 + .word $DFF2 + .word $DFF3 + .word $DFF4 + .word $DFF5 + .word $DFF6 + .word $DFF7 + .word $DFF8 + .word $DFF9 + .word $DFFA + .word $DFFB + .word $DFFC + .word $DFFD + .word $DFFE + .word $DFFF + .word $E000 + .word $E001 + .word $E002 + .word $E003 + .word $E004 + .word $E005 + .word $E006 + .word $E007 + .word $E008 + .word $E009 + .word $E00A + .word $E00B + .word $E00C + .word $E00D + .word $E00E + .word $E00F + .word $EFE1 + .word $EFE2 + .word $EFE3 + .word $EFE4 + .word $EFE5 + .word $EFE6 + .word $EFE7 + .word $EFE8 + .word $EFE9 + .word $EFEA + .word $EFEB + .word $EFEC + .word $EFED + .word $EFEE + .word $EFEF + .word $EFF0 + .word $EFF1 + .word $EFF2 + .word $EFF3 + .word $EFF4 + .word $EFF5 + .word $EFF6 + .word $EFF7 + .word $EFF8 + .word $EFF9 + .word $EFFA + .word $EFFB + .word $EFFC + .word $EFFD + .word $EFFE + .word $EFFF + .word $F000 + .word $F001 + .word $F002 + .word $F003 + .word $F004 + .word $F005 + .word $F006 + .word $F007 + .word $F008 + .word $F009 + .word $F00A + .word $F00B + .word $F00C + .word $F00D + .word $F00E + .word $F00F + .word $FFE1 + .word $FFE2 + .word $FFE3 + .word $FFE4 + .word $FFE5 + .word $FFE6 + .word $FFE7 + .word $FFE8 + .word $FFE9 + .word $FFEA + .word $FFEB + .word $FFEC + .word $FFED + .word $FFEE + .word $FFEF + .word $FFF0 + .word $FFF1 + .word $FFF2 + .word $FFF3 + .word $FFF4 + .word $FFF5 + .word $FFF6 + .word $FFF7 + .word $FFF8 + .word $FFF9 + .word $FFFA + .word $FFFB + .word $FFFC + .word $FFFD + .word $FFFE + .word $FFFF + + ; alternative hex values + .word 0h + .word 1h + .word 2h + .word 3h + .word 4h + .word 5h + .word 6h + .word 7h + .word 8h + .word 9h + .word 0ah + .word 0bh + .word 0ch + .word 0dh + .word 0eh + .word 0fh + .word 10h + .word 11h + .word 12h + .word 13h + .word 70h + .word 71h + .word 72h + .word 73h + .word 74h + .word 75h + .word 76h + .word 77h + .word 78h + .word 79h + .word 7ah + .word 7bh + .word 7ch + .word 7dh + .word 7eh + .word 7fh + .word 80h + .word 81h + .word 82h + .word 83h + .word 84h + .word 85h + .word 86h + .word 0f0h + .word 0f1h + .word 0f2h + .word 0f3h + .word 0f4h + .word 0f5h + .word 0f6h + .word 0f7h + .word 0f8h + .word 0f9h + .word 0fah + .word 0fbh + .word 0fch + .word 0fdh + .word 0feh + .word 0ffh + .word 100h + .word 101h + .word 102h + .word 103h + .word 0fd2h + .word 0fd3h + .word 0fd4h + .word 0fd5h + .word 0fd6h + .word 0fd7h + .word 0fd8h + .word 0fd9h + .word 0fdah + .word 0fdbh + .word 0fdch + .word 0fddh + .word 0fdeh + .word 0fdfh + .word 0fe0h + .word 0fe1h + .word 0fe2h + .word 0fe3h + .word 0fe4h + .word 0fe5h + .word 0fe6h + .word 0fe7h + .word 0fe8h + .word 0fe9h + .word 0feah + .word 0febh + .word 0fech + .word 0fedh + .word 0feeh + .word 0fefh + .word 0ff0h + .word 0ff1h + .word 0ff2h + .word 0ff3h + .word 0ff4h + .word 0ff5h + .word 0ff6h + .word 0ff7h + .word 0ff8h + .word 0ff9h + .word 0ffah + .word 0ffbh + .word 0ffch + .word 0ffdh + .word 0ffeh + .word 0fffh + .word 1000h + .word 1001h + .word 1002h + .word 1003h + .word 1004h + .word 1005h + .word 1006h + .word 1007h + .word 1008h + .word 7ff0h + .word 7ff1h + .word 7ff2h + .word 7ff3h + .word 7ff4h + .word 7ff5h + .word 7ff6h + .word 7ff7h + .word 7ff8h + .word 7ff9h + .word 7ffah + .word 7ffbh + .word 7ffch + .word 7ffdh + .word 7ffeh + .word 7fffh + .word 8000h + .word 8001h + .word 8002h + .word 8003h + .word 8004h + .word 8005h + .word 8006h + .word 8007h + .word 8008h + .word 8009h + .word 800ah + .word 800bh + .word 9fe1h + .word 9fe2h + .word 9fe3h + .word 9fe4h + .word 9fe5h + .word 9fe6h + .word 9fe7h + .word 9fe8h + .word 9fe9h + .word 9feah + .word 9febh + .word 9fech + .word 9fedh + .word 9feeh + .word 9fefh + .word 9ff0h + .word 9ff1h + .word 9ff2h + .word 9ff3h + .word 9ff4h + .word 9ff5h + .word 9ff6h + .word 9ff7h + .word 9ff8h + .word 9ff9h + .word 9ffah + .word 9ffbh + .word 9ffch + .word 9ffdh + .word 9ffeh + .word 9fffh + .word 0a000h + .word 0a001h + .word 0a002h + .word 0a003h + .word 0a004h + .word 0a005h + .word 0a006h + .word 0a007h + .word 0a008h + .word 0a009h + .word 0a00ah + .word 0a00bh + .word 0a00ch + .word 0a00dh + .word 0a00eh + .word 0a00fh + .word 0afe1h + .word 0afe2h + .word 0afe3h + .word 0afe4h + .word 0afe5h + .word 0afe6h + .word 0afe7h + .word 0afe8h + .word 0afe9h + .word 0afeah + .word 0afebh + .word 0afech + .word 0afedh + .word 0afeeh + .word 0afefh + .word 0aff0h + .word 0aff1h + .word 0aff2h + .word 0aff3h + .word 0aff4h + .word 0aff5h + .word 0aff6h + .word 0aff7h + .word 0aff8h + .word 0aff9h + .word 0affah + .word 0affbh + .word 0affch + .word 0affdh + .word 0affeh + .word 0afffh + .word 0b000h + .word 0b001h + .word 0b002h + .word 0b003h + .word 0b004h + .word 0b005h + .word 0b006h + .word 0b007h + .word 0b008h + .word 0b009h + .word 0b00ah + .word 0b00bh + .word 0b00ch + .word 0b00dh + .word 0b00eh + .word 0b00fh + .word 0bfe1h + .word 0bfe2h + .word 0bfe3h + .word 0bfe4h + .word 0bfe5h + .word 0bfe6h + .word 0bfe7h + .word 0bfe8h + .word 0bfe9h + .word 0bfeah + .word 0bfebh + .word 0bfech + .word 0bfedh + .word 0bfeeh + .word 0bfefh + .word 0bff0h + .word 0bff1h + .word 0bff2h + .word 0bff3h + .word 0bff4h + .word 0bff5h + .word 0bff6h + .word 0bff7h + .word 0bff8h + .word 0bff9h + .word 0bffah + .word 0bffbh + .word 0bffch + .word 0bffdh + .word 0bffeh + .word 0bfffh + .word 0c000h + .word 0c001h + .word 0c002h + .word 0c003h + .word 0c004h + .word 0c005h + .word 0c006h + .word 0c007h + .word 0c008h + .word 0c009h + .word 0c00ah + .word 0c00bh + .word 0c00ch + .word 0c00dh + .word 0c00eh + .word 0c00fh + .word 0cfe1h + .word 0cfe2h + .word 0cfe3h + .word 0cfe4h + .word 0cfe5h + .word 0cfe6h + .word 0cfe7h + .word 0cfe8h + .word 0cfe9h + .word 0cfeah + .word 0cfebh + .word 0cfech + .word 0cfedh + .word 0cfeeh + .word 0cfefh + .word 0cff0h + .word 0cff1h + .word 0cff2h + .word 0cff3h + .word 0cff4h + .word 0cff5h + .word 0cff6h + .word 0cff7h + .word 0cff8h + .word 0cff9h + .word 0cffah + .word 0cffbh + .word 0cffch + .word 0cffdh + .word 0cffeh + .word 0cfffh + .word 0d000h + .word 0d001h + .word 0d002h + .word 0d003h + .word 0d004h + .word 0d005h + .word 0d006h + .word 0d007h + .word 0d008h + .word 0d009h + .word 0d00ah + .word 0d00bh + .word 0d00ch + .word 0d00dh + .word 0d00eh + .word 0d00fh + .word 0dfe1h + .word 0dfe2h + .word 0dfe3h + .word 0dfe4h + .word 0dfe5h + .word 0dfe6h + .word 0dfe7h + .word 0dfe8h + .word 0dfe9h + .word 0dfeah + .word 0dfebh + .word 0dfech + .word 0dfedh + .word 0dfeeh + .word 0dfefh + .word 0dff0h + .word 0dff1h + .word 0dff2h + .word 0dff3h + .word 0dff4h + .word 0dff5h + .word 0dff6h + .word 0dff7h + .word 0dff8h + .word 0dff9h + .word 0dffah + .word 0dffbh + .word 0dffch + .word 0dffdh + .word 0dffeh + .word 0dfffh + .word 0e000h + .word 0e001h + .word 0e002h + .word 0e003h + .word 0e004h + .word 0e005h + .word 0e006h + .word 0e007h + .word 0e008h + .word 0e009h + .word 0e00ah + .word 0e00bh + .word 0e00ch + .word 0e00dh + .word 0e00eh + .word 0e00fh + .word 0efe1h + .word 0efe2h + .word 0efe3h + .word 0efe4h + .word 0efe5h + .word 0efe6h + .word 0efe7h + .word 0efe8h + .word 0efe9h + .word 0efeah + .word 0efebh + .word 0efech + .word 0efedh + .word 0efeeh + .word 0efefh + .word 0eff0h + .word 0eff1h + .word 0eff2h + .word 0eff3h + .word 0eff4h + .word 0eff5h + .word 0eff6h + .word 0eff7h + .word 0eff8h + .word 0eff9h + .word 0effah + .word 0effbh + .word 0effch + .word 0effdh + .word 0effeh + .word 0efffh + .word 0f000h + .word 0f001h + .word 0f002h + .word 0f003h + .word 0f004h + .word 0f005h + .word 0f006h + .word 0f007h + .word 0f008h + .word 0f009h + .word 0f00ah + .word 0f00bh + .word 0f00ch + .word 0f00dh + .word 0f00eh + .word 0f00fh + .word 0ffe1h + .word 0ffe2h + .word 0ffe3h + .word 0ffe4h + .word 0ffe5h + .word 0ffe6h + .word 0ffe7h + .word 0ffe8h + .word 0ffe9h + .word 0ffeah + .word 0ffebh + .word 0ffech + .word 0ffedh + .word 0ffeeh + .word 0ffefh + .word 0fff0h + .word 0fff1h + .word 0fff2h + .word 0fff3h + .word 0fff4h + .word 0fff5h + .word 0fff6h + .word 0fff7h + .word 0fff8h + .word 0fff9h + .word 0fffah + .word 0fffbh + .word 0fffch + .word 0fffdh + .word 0fffeh + .word 0ffffh + + ; alternative hex values, uppercase + .word 0h + .word 1h + .word 2h + .word 3h + .word 4h + .word 5h + .word 6h + .word 7h + .word 8h + .word 9h + .word 0Ah + .word 0Bh + .word 0Ch + .word 0Dh + .word 0Eh + .word 0Fh + .word 10h + .word 11h + .word 12h + .word 13h + .word 70h + .word 71h + .word 72h + .word 73h + .word 74h + .word 75h + .word 76h + .word 77h + .word 78h + .word 79h + .word 7Ah + .word 7Bh + .word 7Ch + .word 7Dh + .word 7Eh + .word 7Fh + .word 80h + .word 81h + .word 82h + .word 83h + .word 84h + .word 85h + .word 86h + .word 0F0h + .word 0F1h + .word 0F2h + .word 0F3h + .word 0F4h + .word 0F5h + .word 0F6h + .word 0F7h + .word 0F8h + .word 0F9h + .word 0FAh + .word 0FBh + .word 0FCh + .word 0FDh + .word 0FEh + .word 0FFh + .word 100h + .word 101h + .word 102h + .word 103h + .word 0FD2h + .word 0FD3h + .word 0FD4h + .word 0FD5h + .word 0FD6h + .word 0FD7h + .word 0FD8h + .word 0FD9h + .word 0FDAh + .word 0FDBh + .word 0FDCh + .word 0FDDh + .word 0FDEh + .word 0FDFh + .word 0FE0h + .word 0FE1h + .word 0FE2h + .word 0FE3h + .word 0FE4h + .word 0FE5h + .word 0FE6h + .word 0FE7h + .word 0FE8h + .word 0FE9h + .word 0FEAh + .word 0FEBh + .word 0FECh + .word 0FEDh + .word 0FEEh + .word 0FEFh + .word 0FF0h + .word 0FF1h + .word 0FF2h + .word 0FF3h + .word 0FF4h + .word 0FF5h + .word 0FF6h + .word 0FF7h + .word 0FF8h + .word 0FF9h + .word 0FFAh + .word 0FFBh + .word 0FFCh + .word 0FFDh + .word 0FFEh + .word 0FFFh + .word 1000h + .word 1001h + .word 1002h + .word 1003h + .word 1004h + .word 1005h + .word 1006h + .word 1007h + .word 1008h + .word 7FF0h + .word 7FF1h + .word 7FF2h + .word 7FF3h + .word 7FF4h + .word 7FF5h + .word 7FF6h + .word 7FF7h + .word 7FF8h + .word 7FF9h + .word 7FFAh + .word 7FFBh + .word 7FFCh + .word 7FFDh + .word 7FFEh + .word 7FFFh + .word 8000h + .word 8001h + .word 8002h + .word 8003h + .word 8004h + .word 8005h + .word 8006h + .word 8007h + .word 8008h + .word 8009h + .word 800Ah + .word 800Bh + .word 9FE1h + .word 9FE2h + .word 9FE3h + .word 9FE4h + .word 9FE5h + .word 9FE6h + .word 9FE7h + .word 9FE8h + .word 9FE9h + .word 9FEAh + .word 9FEBh + .word 9FECh + .word 9FEDh + .word 9FEEh + .word 9FEFh + .word 9FF0h + .word 9FF1h + .word 9FF2h + .word 9FF3h + .word 9FF4h + .word 9FF5h + .word 9FF6h + .word 9FF7h + .word 9FF8h + .word 9FF9h + .word 9FFAh + .word 9FFBh + .word 9FFCh + .word 9FFDh + .word 9FFEh + .word 9FFFh + .word 0A000h + .word 0A001h + .word 0A002h + .word 0A003h + .word 0A004h + .word 0A005h + .word 0A006h + .word 0A007h + .word 0A008h + .word 0A009h + .word 0A00Ah + .word 0A00Bh + .word 0A00Ch + .word 0A00Dh + .word 0A00Eh + .word 0A00Fh + .word 0AFE1h + .word 0AFE2h + .word 0AFE3h + .word 0AFE4h + .word 0AFE5h + .word 0AFE6h + .word 0AFE7h + .word 0AFE8h + .word 0AFE9h + .word 0AFEAh + .word 0AFEBh + .word 0AFECh + .word 0AFEDh + .word 0AFEEh + .word 0AFEFh + .word 0AFF0h + .word 0AFF1h + .word 0AFF2h + .word 0AFF3h + .word 0AFF4h + .word 0AFF5h + .word 0AFF6h + .word 0AFF7h + .word 0AFF8h + .word 0AFF9h + .word 0AFFAh + .word 0AFFBh + .word 0AFFCh + .word 0AFFDh + .word 0AFFEh + .word 0AFFFh + .word 0B000h + .word 0B001h + .word 0B002h + .word 0B003h + .word 0B004h + .word 0B005h + .word 0B006h + .word 0B007h + .word 0B008h + .word 0B009h + .word 0B00Ah + .word 0B00Bh + .word 0B00Ch + .word 0B00Dh + .word 0B00Eh + .word 0B00Fh + .word 0BFE1h + .word 0BFE2h + .word 0BFE3h + .word 0BFE4h + .word 0BFE5h + .word 0BFE6h + .word 0BFE7h + .word 0BFE8h + .word 0BFE9h + .word 0BFEAh + .word 0BFEBh + .word 0BFECh + .word 0BFEDh + .word 0BFEEh + .word 0BFEFh + .word 0BFF0h + .word 0BFF1h + .word 0BFF2h + .word 0BFF3h + .word 0BFF4h + .word 0BFF5h + .word 0BFF6h + .word 0BFF7h + .word 0BFF8h + .word 0BFF9h + .word 0BFFAh + .word 0BFFBh + .word 0BFFCh + .word 0BFFDh + .word 0BFFEh + .word 0BFFFh + .word 0C000h + .word 0C001h + .word 0C002h + .word 0C003h + .word 0C004h + .word 0C005h + .word 0C006h + .word 0C007h + .word 0C008h + .word 0C009h + .word 0C00Ah + .word 0C00Bh + .word 0C00Ch + .word 0C00Dh + .word 0C00Eh + .word 0C00Fh + .word 0CFE1h + .word 0CFE2h + .word 0CFE3h + .word 0CFE4h + .word 0CFE5h + .word 0CFE6h + .word 0CFE7h + .word 0CFE8h + .word 0CFE9h + .word 0CFEAh + .word 0CFEBh + .word 0CFECh + .word 0CFEDh + .word 0CFEEh + .word 0CFEFh + .word 0CFF0h + .word 0CFF1h + .word 0CFF2h + .word 0CFF3h + .word 0CFF4h + .word 0CFF5h + .word 0CFF6h + .word 0CFF7h + .word 0CFF8h + .word 0CFF9h + .word 0CFFAh + .word 0CFFBh + .word 0CFFCh + .word 0CFFDh + .word 0CFFEh + .word 0CFFFh + .word 0D000h + .word 0D001h + .word 0D002h + .word 0D003h + .word 0D004h + .word 0D005h + .word 0D006h + .word 0D007h + .word 0D008h + .word 0D009h + .word 0D00Ah + .word 0D00Bh + .word 0D00Ch + .word 0D00Dh + .word 0D00Eh + .word 0D00Fh + .word 0DFE1h + .word 0DFE2h + .word 0DFE3h + .word 0DFE4h + .word 0DFE5h + .word 0DFE6h + .word 0DFE7h + .word 0DFE8h + .word 0DFE9h + .word 0DFEAh + .word 0DFEBh + .word 0DFECh + .word 0DFEDh + .word 0DFEEh + .word 0DFEFh + .word 0DFF0h + .word 0DFF1h + .word 0DFF2h + .word 0DFF3h + .word 0DFF4h + .word 0DFF5h + .word 0DFF6h + .word 0DFF7h + .word 0DFF8h + .word 0DFF9h + .word 0DFFAh + .word 0DFFBh + .word 0DFFCh + .word 0DFFDh + .word 0DFFEh + .word 0DFFFh + .word 0E000h + .word 0E001h + .word 0E002h + .word 0E003h + .word 0E004h + .word 0E005h + .word 0E006h + .word 0E007h + .word 0E008h + .word 0E009h + .word 0E00Ah + .word 0E00Bh + .word 0E00Ch + .word 0E00Dh + .word 0E00Eh + .word 0E00Fh + .word 0EFE1h + .word 0EFE2h + .word 0EFE3h + .word 0EFE4h + .word 0EFE5h + .word 0EFE6h + .word 0EFE7h + .word 0EFE8h + .word 0EFE9h + .word 0EFEAh + .word 0EFEBh + .word 0EFECh + .word 0EFEDh + .word 0EFEEh + .word 0EFEFh + .word 0EFF0h + .word 0EFF1h + .word 0EFF2h + .word 0EFF3h + .word 0EFF4h + .word 0EFF5h + .word 0EFF6h + .word 0EFF7h + .word 0EFF8h + .word 0EFF9h + .word 0EFFAh + .word 0EFFBh + .word 0EFFCh + .word 0EFFDh + .word 0EFFEh + .word 0EFFFh + .word 0F000h + .word 0F001h + .word 0F002h + .word 0F003h + .word 0F004h + .word 0F005h + .word 0F006h + .word 0F007h + .word 0F008h + .word 0F009h + .word 0F00Ah + .word 0F00Bh + .word 0F00Ch + .word 0F00Dh + .word 0F00Eh + .word 0F00Fh + .word 0FFE1h + .word 0FFE2h + .word 0FFE3h + .word 0FFE4h + .word 0FFE5h + .word 0FFE6h + .word 0FFE7h + .word 0FFE8h + .word 0FFE9h + .word 0FFEAh + .word 0FFEBh + .word 0FFECh + .word 0FFEDh + .word 0FFEEh + .word 0FFEFh + .word 0FFF0h + .word 0FFF1h + .word 0FFF2h + .word 0FFF3h + .word 0FFF4h + .word 0FFF5h + .word 0FFF6h + .word 0FFF7h + .word 0FFF8h + .word 0FFF9h + .word 0FFFAh + .word 0FFFBh + .word 0FFFCh + .word 0FFFDh + .word 0FFFEh + .word 0FFFFh + + ; alternative 4-digit hex values + .word 0000h + .word 0001h + .word 0002h + .word 0003h + .word 0004h + .word 0005h + .word 0006h + .word 0007h + .word 0008h + .word 0009h + .word 000ah + .word 000bh + .word 000ch + .word 000dh + .word 000eh + .word 000fh + .word 0010h + .word 0011h + .word 0012h + .word 0013h + .word 0070h + .word 0071h + .word 0072h + .word 0073h + .word 0074h + .word 0075h + .word 0076h + .word 0077h + .word 0078h + .word 0079h + .word 007ah + .word 007bh + .word 007ch + .word 007dh + .word 007eh + .word 007fh + .word 0080h + .word 0081h + .word 0082h + .word 0083h + .word 0084h + .word 0085h + .word 0086h + .word 00f0h + .word 00f1h + .word 00f2h + .word 00f3h + .word 00f4h + .word 00f5h + .word 00f6h + .word 00f7h + .word 00f8h + .word 00f9h + .word 00fah + .word 00fbh + .word 00fch + .word 00fdh + .word 00feh + .word 00ffh + .word 0100h + .word 0101h + .word 0102h + .word 0103h + .word 0fd2h + .word 0fd3h + .word 0fd4h + .word 0fd5h + .word 0fd6h + .word 0fd7h + .word 0fd8h + .word 0fd9h + .word 0fdah + .word 0fdbh + .word 0fdch + .word 0fddh + .word 0fdeh + .word 0fdfh + .word 0fe0h + .word 0fe1h + .word 0fe2h + .word 0fe3h + .word 0fe4h + .word 0fe5h + .word 0fe6h + .word 0fe7h + .word 0fe8h + .word 0fe9h + .word 0feah + .word 0febh + .word 0fech + .word 0fedh + .word 0feeh + .word 0fefh + .word 0ff0h + .word 0ff1h + .word 0ff2h + .word 0ff3h + .word 0ff4h + .word 0ff5h + .word 0ff6h + .word 0ff7h + .word 0ff8h + .word 0ff9h + .word 0ffah + .word 0ffbh + .word 0ffch + .word 0ffdh + .word 0ffeh + .word 0fffh + .word 1000h + .word 1001h + .word 1002h + .word 1003h + .word 1004h + .word 1005h + .word 1006h + .word 1007h + .word 1008h + .word 7ff0h + .word 7ff1h + .word 7ff2h + .word 7ff3h + .word 7ff4h + .word 7ff5h + .word 7ff6h + .word 7ff7h + .word 7ff8h + .word 7ff9h + .word 7ffah + .word 7ffbh + .word 7ffch + .word 7ffdh + .word 7ffeh + .word 7fffh + .word 8000h + .word 8001h + .word 8002h + .word 8003h + .word 8004h + .word 8005h + .word 8006h + .word 8007h + .word 8008h + .word 8009h + .word 800ah + .word 800bh + .word 9fe1h + .word 9fe2h + .word 9fe3h + .word 9fe4h + .word 9fe5h + .word 9fe6h + .word 9fe7h + .word 9fe8h + .word 9fe9h + .word 9feah + .word 9febh + .word 9fech + .word 9fedh + .word 9feeh + .word 9fefh + .word 9ff0h + .word 9ff1h + .word 9ff2h + .word 9ff3h + .word 9ff4h + .word 9ff5h + .word 9ff6h + .word 9ff7h + .word 9ff8h + .word 9ff9h + .word 9ffah + .word 9ffbh + .word 9ffch + .word 9ffdh + .word 9ffeh + .word 9fffh + .word 0a000h + .word 0a001h + .word 0a002h + .word 0a003h + .word 0a004h + .word 0a005h + .word 0a006h + .word 0a007h + .word 0a008h + .word 0a009h + .word 0a00ah + .word 0a00bh + .word 0a00ch + .word 0a00dh + .word 0a00eh + .word 0a00fh + .word 0afe1h + .word 0afe2h + .word 0afe3h + .word 0afe4h + .word 0afe5h + .word 0afe6h + .word 0afe7h + .word 0afe8h + .word 0afe9h + .word 0afeah + .word 0afebh + .word 0afech + .word 0afedh + .word 0afeeh + .word 0afefh + .word 0aff0h + .word 0aff1h + .word 0aff2h + .word 0aff3h + .word 0aff4h + .word 0aff5h + .word 0aff6h + .word 0aff7h + .word 0aff8h + .word 0aff9h + .word 0affah + .word 0affbh + .word 0affch + .word 0affdh + .word 0affeh + .word 0afffh + .word 0b000h + .word 0b001h + .word 0b002h + .word 0b003h + .word 0b004h + .word 0b005h + .word 0b006h + .word 0b007h + .word 0b008h + .word 0b009h + .word 0b00ah + .word 0b00bh + .word 0b00ch + .word 0b00dh + .word 0b00eh + .word 0b00fh + .word 0bfe1h + .word 0bfe2h + .word 0bfe3h + .word 0bfe4h + .word 0bfe5h + .word 0bfe6h + .word 0bfe7h + .word 0bfe8h + .word 0bfe9h + .word 0bfeah + .word 0bfebh + .word 0bfech + .word 0bfedh + .word 0bfeeh + .word 0bfefh + .word 0bff0h + .word 0bff1h + .word 0bff2h + .word 0bff3h + .word 0bff4h + .word 0bff5h + .word 0bff6h + .word 0bff7h + .word 0bff8h + .word 0bff9h + .word 0bffah + .word 0bffbh + .word 0bffch + .word 0bffdh + .word 0bffeh + .word 0bfffh + .word 0c000h + .word 0c001h + .word 0c002h + .word 0c003h + .word 0c004h + .word 0c005h + .word 0c006h + .word 0c007h + .word 0c008h + .word 0c009h + .word 0c00ah + .word 0c00bh + .word 0c00ch + .word 0c00dh + .word 0c00eh + .word 0c00fh + .word 0cfe1h + .word 0cfe2h + .word 0cfe3h + .word 0cfe4h + .word 0cfe5h + .word 0cfe6h + .word 0cfe7h + .word 0cfe8h + .word 0cfe9h + .word 0cfeah + .word 0cfebh + .word 0cfech + .word 0cfedh + .word 0cfeeh + .word 0cfefh + .word 0cff0h + .word 0cff1h + .word 0cff2h + .word 0cff3h + .word 0cff4h + .word 0cff5h + .word 0cff6h + .word 0cff7h + .word 0cff8h + .word 0cff9h + .word 0cffah + .word 0cffbh + .word 0cffch + .word 0cffdh + .word 0cffeh + .word 0cfffh + .word 0d000h + .word 0d001h + .word 0d002h + .word 0d003h + .word 0d004h + .word 0d005h + .word 0d006h + .word 0d007h + .word 0d008h + .word 0d009h + .word 0d00ah + .word 0d00bh + .word 0d00ch + .word 0d00dh + .word 0d00eh + .word 0d00fh + .word 0dfe1h + .word 0dfe2h + .word 0dfe3h + .word 0dfe4h + .word 0dfe5h + .word 0dfe6h + .word 0dfe7h + .word 0dfe8h + .word 0dfe9h + .word 0dfeah + .word 0dfebh + .word 0dfech + .word 0dfedh + .word 0dfeeh + .word 0dfefh + .word 0dff0h + .word 0dff1h + .word 0dff2h + .word 0dff3h + .word 0dff4h + .word 0dff5h + .word 0dff6h + .word 0dff7h + .word 0dff8h + .word 0dff9h + .word 0dffah + .word 0dffbh + .word 0dffch + .word 0dffdh + .word 0dffeh + .word 0dfffh + .word 0e000h + .word 0e001h + .word 0e002h + .word 0e003h + .word 0e004h + .word 0e005h + .word 0e006h + .word 0e007h + .word 0e008h + .word 0e009h + .word 0e00ah + .word 0e00bh + .word 0e00ch + .word 0e00dh + .word 0e00eh + .word 0e00fh + .word 0efe1h + .word 0efe2h + .word 0efe3h + .word 0efe4h + .word 0efe5h + .word 0efe6h + .word 0efe7h + .word 0efe8h + .word 0efe9h + .word 0efeah + .word 0efebh + .word 0efech + .word 0efedh + .word 0efeeh + .word 0efefh + .word 0eff0h + .word 0eff1h + .word 0eff2h + .word 0eff3h + .word 0eff4h + .word 0eff5h + .word 0eff6h + .word 0eff7h + .word 0eff8h + .word 0eff9h + .word 0effah + .word 0effbh + .word 0effch + .word 0effdh + .word 0effeh + .word 0efffh + .word 0f000h + .word 0f001h + .word 0f002h + .word 0f003h + .word 0f004h + .word 0f005h + .word 0f006h + .word 0f007h + .word 0f008h + .word 0f009h + .word 0f00ah + .word 0f00bh + .word 0f00ch + .word 0f00dh + .word 0f00eh + .word 0f00fh + .word 0ffe1h + .word 0ffe2h + .word 0ffe3h + .word 0ffe4h + .word 0ffe5h + .word 0ffe6h + .word 0ffe7h + .word 0ffe8h + .word 0ffe9h + .word 0ffeah + .word 0ffebh + .word 0ffech + .word 0ffedh + .word 0ffeeh + .word 0ffefh + .word 0fff0h + .word 0fff1h + .word 0fff2h + .word 0fff3h + .word 0fff4h + .word 0fff5h + .word 0fff6h + .word 0fff7h + .word 0fff8h + .word 0fff9h + .word 0fffah + .word 0fffbh + .word 0fffch + .word 0fffdh + .word 0fffeh + .word 0ffffh + + ; alternative 4-digit hex values, uppercase + .word 0000h + .word 0001h + .word 0002h + .word 0003h + .word 0004h + .word 0005h + .word 0006h + .word 0007h + .word 0008h + .word 0009h + .word 000Ah + .word 000Bh + .word 000Ch + .word 000Dh + .word 000Eh + .word 000Fh + .word 0010h + .word 0011h + .word 0012h + .word 0013h + .word 0070h + .word 0071h + .word 0072h + .word 0073h + .word 0074h + .word 0075h + .word 0076h + .word 0077h + .word 0078h + .word 0079h + .word 007Ah + .word 007Bh + .word 007Ch + .word 007Dh + .word 007Eh + .word 007Fh + .word 0080h + .word 0081h + .word 0082h + .word 0083h + .word 0084h + .word 0085h + .word 0086h + .word 00F0h + .word 00F1h + .word 00F2h + .word 00F3h + .word 00F4h + .word 00F5h + .word 00F6h + .word 00F7h + .word 00F8h + .word 00F9h + .word 00FAh + .word 00FBh + .word 00FCh + .word 00FDh + .word 00FEh + .word 00FFh + .word 0100h + .word 0101h + .word 0102h + .word 0103h + .word 0FD2h + .word 0FD3h + .word 0FD4h + .word 0FD5h + .word 0FD6h + .word 0FD7h + .word 0FD8h + .word 0FD9h + .word 0FDAh + .word 0FDBh + .word 0FDCh + .word 0FDDh + .word 0FDEh + .word 0FDFh + .word 0FE0h + .word 0FE1h + .word 0FE2h + .word 0FE3h + .word 0FE4h + .word 0FE5h + .word 0FE6h + .word 0FE7h + .word 0FE8h + .word 0FE9h + .word 0FEAh + .word 0FEBh + .word 0FECh + .word 0FEDh + .word 0FEEh + .word 0FEFh + .word 0FF0h + .word 0FF1h + .word 0FF2h + .word 0FF3h + .word 0FF4h + .word 0FF5h + .word 0FF6h + .word 0FF7h + .word 0FF8h + .word 0FF9h + .word 0FFAh + .word 0FFBh + .word 0FFCh + .word 0FFDh + .word 0FFEh + .word 0FFFh + .word 1000h + .word 1001h + .word 1002h + .word 1003h + .word 1004h + .word 1005h + .word 1006h + .word 1007h + .word 1008h + .word 7FF0h + .word 7FF1h + .word 7FF2h + .word 7FF3h + .word 7FF4h + .word 7FF5h + .word 7FF6h + .word 7FF7h + .word 7FF8h + .word 7FF9h + .word 7FFAh + .word 7FFBh + .word 7FFCh + .word 7FFDh + .word 7FFEh + .word 7FFFh + .word 8000h + .word 8001h + .word 8002h + .word 8003h + .word 8004h + .word 8005h + .word 8006h + .word 8007h + .word 8008h + .word 8009h + .word 800Ah + .word 800Bh + .word 9FE1h + .word 9FE2h + .word 9FE3h + .word 9FE4h + .word 9FE5h + .word 9FE6h + .word 9FE7h + .word 9FE8h + .word 9FE9h + .word 9FEAh + .word 9FEBh + .word 9FECh + .word 9FEDh + .word 9FEEh + .word 9FEFh + .word 9FF0h + .word 9FF1h + .word 9FF2h + .word 9FF3h + .word 9FF4h + .word 9FF5h + .word 9FF6h + .word 9FF7h + .word 9FF8h + .word 9FF9h + .word 9FFAh + .word 9FFBh + .word 9FFCh + .word 9FFDh + .word 9FFEh + .word 9FFFh + .word 0A000h + .word 0A001h + .word 0A002h + .word 0A003h + .word 0A004h + .word 0A005h + .word 0A006h + .word 0A007h + .word 0A008h + .word 0A009h + .word 0A00Ah + .word 0A00Bh + .word 0A00Ch + .word 0A00Dh + .word 0A00Eh + .word 0A00Fh + .word 0AFE1h + .word 0AFE2h + .word 0AFE3h + .word 0AFE4h + .word 0AFE5h + .word 0AFE6h + .word 0AFE7h + .word 0AFE8h + .word 0AFE9h + .word 0AFEAh + .word 0AFEBh + .word 0AFECh + .word 0AFEDh + .word 0AFEEh + .word 0AFEFh + .word 0AFF0h + .word 0AFF1h + .word 0AFF2h + .word 0AFF3h + .word 0AFF4h + .word 0AFF5h + .word 0AFF6h + .word 0AFF7h + .word 0AFF8h + .word 0AFF9h + .word 0AFFAh + .word 0AFFBh + .word 0AFFCh + .word 0AFFDh + .word 0AFFEh + .word 0AFFFh + .word 0B000h + .word 0B001h + .word 0B002h + .word 0B003h + .word 0B004h + .word 0B005h + .word 0B006h + .word 0B007h + .word 0B008h + .word 0B009h + .word 0B00Ah + .word 0B00Bh + .word 0B00Ch + .word 0B00Dh + .word 0B00Eh + .word 0B00Fh + .word 0BFE1h + .word 0BFE2h + .word 0BFE3h + .word 0BFE4h + .word 0BFE5h + .word 0BFE6h + .word 0BFE7h + .word 0BFE8h + .word 0BFE9h + .word 0BFEAh + .word 0BFEBh + .word 0BFECh + .word 0BFEDh + .word 0BFEEh + .word 0BFEFh + .word 0BFF0h + .word 0BFF1h + .word 0BFF2h + .word 0BFF3h + .word 0BFF4h + .word 0BFF5h + .word 0BFF6h + .word 0BFF7h + .word 0BFF8h + .word 0BFF9h + .word 0BFFAh + .word 0BFFBh + .word 0BFFCh + .word 0BFFDh + .word 0BFFEh + .word 0BFFFh + .word 0C000h + .word 0C001h + .word 0C002h + .word 0C003h + .word 0C004h + .word 0C005h + .word 0C006h + .word 0C007h + .word 0C008h + .word 0C009h + .word 0C00Ah + .word 0C00Bh + .word 0C00Ch + .word 0C00Dh + .word 0C00Eh + .word 0C00Fh + .word 0CFE1h + .word 0CFE2h + .word 0CFE3h + .word 0CFE4h + .word 0CFE5h + .word 0CFE6h + .word 0CFE7h + .word 0CFE8h + .word 0CFE9h + .word 0CFEAh + .word 0CFEBh + .word 0CFECh + .word 0CFEDh + .word 0CFEEh + .word 0CFEFh + .word 0CFF0h + .word 0CFF1h + .word 0CFF2h + .word 0CFF3h + .word 0CFF4h + .word 0CFF5h + .word 0CFF6h + .word 0CFF7h + .word 0CFF8h + .word 0CFF9h + .word 0CFFAh + .word 0CFFBh + .word 0CFFCh + .word 0CFFDh + .word 0CFFEh + .word 0CFFFh + .word 0D000h + .word 0D001h + .word 0D002h + .word 0D003h + .word 0D004h + .word 0D005h + .word 0D006h + .word 0D007h + .word 0D008h + .word 0D009h + .word 0D00Ah + .word 0D00Bh + .word 0D00Ch + .word 0D00Dh + .word 0D00Eh + .word 0D00Fh + .word 0DFE1h + .word 0DFE2h + .word 0DFE3h + .word 0DFE4h + .word 0DFE5h + .word 0DFE6h + .word 0DFE7h + .word 0DFE8h + .word 0DFE9h + .word 0DFEAh + .word 0DFEBh + .word 0DFECh + .word 0DFEDh + .word 0DFEEh + .word 0DFEFh + .word 0DFF0h + .word 0DFF1h + .word 0DFF2h + .word 0DFF3h + .word 0DFF4h + .word 0DFF5h + .word 0DFF6h + .word 0DFF7h + .word 0DFF8h + .word 0DFF9h + .word 0DFFAh + .word 0DFFBh + .word 0DFFCh + .word 0DFFDh + .word 0DFFEh + .word 0DFFFh + .word 0E000h + .word 0E001h + .word 0E002h + .word 0E003h + .word 0E004h + .word 0E005h + .word 0E006h + .word 0E007h + .word 0E008h + .word 0E009h + .word 0E00Ah + .word 0E00Bh + .word 0E00Ch + .word 0E00Dh + .word 0E00Eh + .word 0E00Fh + .word 0EFE1h + .word 0EFE2h + .word 0EFE3h + .word 0EFE4h + .word 0EFE5h + .word 0EFE6h + .word 0EFE7h + .word 0EFE8h + .word 0EFE9h + .word 0EFEAh + .word 0EFEBh + .word 0EFECh + .word 0EFEDh + .word 0EFEEh + .word 0EFEFh + .word 0EFF0h + .word 0EFF1h + .word 0EFF2h + .word 0EFF3h + .word 0EFF4h + .word 0EFF5h + .word 0EFF6h + .word 0EFF7h + .word 0EFF8h + .word 0EFF9h + .word 0EFFAh + .word 0EFFBh + .word 0EFFCh + .word 0EFFDh + .word 0EFFEh + .word 0EFFFh + .word 0F000h + .word 0F001h + .word 0F002h + .word 0F003h + .word 0F004h + .word 0F005h + .word 0F006h + .word 0F007h + .word 0F008h + .word 0F009h + .word 0F00Ah + .word 0F00Bh + .word 0F00Ch + .word 0F00Dh + .word 0F00Eh + .word 0F00Fh + .word 0FFE1h + .word 0FFE2h + .word 0FFE3h + .word 0FFE4h + .word 0FFE5h + .word 0FFE6h + .word 0FFE7h + .word 0FFE8h + .word 0FFE9h + .word 0FFEAh + .word 0FFEBh + .word 0FFECh + .word 0FFEDh + .word 0FFEEh + .word 0FFEFh + .word 0FFF0h + .word 0FFF1h + .word 0FFF2h + .word 0FFF3h + .word 0FFF4h + .word 0FFF5h + .word 0FFF6h + .word 0FFF7h + .word 0FFF8h + .word 0FFF9h + .word 0FFFAh + .word 0FFFBh + .word 0FFFCh + .word 0FFFDh + .word 0FFFEh + .word 0FFFFh + + ; alternative hex values, always leading zero + .word 00h + .word 01h + .word 02h + .word 03h + .word 04h + .word 05h + .word 06h + .word 07h + .word 08h + .word 09h + .word 0ah + .word 0bh + .word 0ch + .word 0dh + .word 0eh + .word 0fh + .word 010h + .word 011h + .word 012h + .word 013h + .word 070h + .word 071h + .word 072h + .word 073h + .word 074h + .word 075h + .word 076h + .word 077h + .word 078h + .word 079h + .word 07ah + .word 07bh + .word 07ch + .word 07dh + .word 07eh + .word 07fh + .word 080h + .word 081h + .word 082h + .word 083h + .word 084h + .word 085h + .word 086h + .word 0f0h + .word 0f1h + .word 0f2h + .word 0f3h + .word 0f4h + .word 0f5h + .word 0f6h + .word 0f7h + .word 0f8h + .word 0f9h + .word 0fah + .word 0fbh + .word 0fch + .word 0fdh + .word 0feh + .word 0ffh + .word 0100h + .word 0101h + .word 0102h + .word 0103h + .word 0fd2h + .word 0fd3h + .word 0fd4h + .word 0fd5h + .word 0fd6h + .word 0fd7h + .word 0fd8h + .word 0fd9h + .word 0fdah + .word 0fdbh + .word 0fdch + .word 0fddh + .word 0fdeh + .word 0fdfh + .word 0fe0h + .word 0fe1h + .word 0fe2h + .word 0fe3h + .word 0fe4h + .word 0fe5h + .word 0fe6h + .word 0fe7h + .word 0fe8h + .word 0fe9h + .word 0feah + .word 0febh + .word 0fech + .word 0fedh + .word 0feeh + .word 0fefh + .word 0ff0h + .word 0ff1h + .word 0ff2h + .word 0ff3h + .word 0ff4h + .word 0ff5h + .word 0ff6h + .word 0ff7h + .word 0ff8h + .word 0ff9h + .word 0ffah + .word 0ffbh + .word 0ffch + .word 0ffdh + .word 0ffeh + .word 0fffh + .word 01000h + .word 01001h + .word 01002h + .word 01003h + .word 01004h + .word 01005h + .word 01006h + .word 01007h + .word 01008h + .word 07ff0h + .word 07ff1h + .word 07ff2h + .word 07ff3h + .word 07ff4h + .word 07ff5h + .word 07ff6h + .word 07ff7h + .word 07ff8h + .word 07ff9h + .word 07ffah + .word 07ffbh + .word 07ffch + .word 07ffdh + .word 07ffeh + .word 07fffh + .word 08000h + .word 08001h + .word 08002h + .word 08003h + .word 08004h + .word 08005h + .word 08006h + .word 08007h + .word 08008h + .word 08009h + .word 0800ah + .word 0800bh + .word 09fe1h + .word 09fe2h + .word 09fe3h + .word 09fe4h + .word 09fe5h + .word 09fe6h + .word 09fe7h + .word 09fe8h + .word 09fe9h + .word 09feah + .word 09febh + .word 09fech + .word 09fedh + .word 09feeh + .word 09fefh + .word 09ff0h + .word 09ff1h + .word 09ff2h + .word 09ff3h + .word 09ff4h + .word 09ff5h + .word 09ff6h + .word 09ff7h + .word 09ff8h + .word 09ff9h + .word 09ffah + .word 09ffbh + .word 09ffch + .word 09ffdh + .word 09ffeh + .word 09fffh + .word 0a000h + .word 0a001h + .word 0a002h + .word 0a003h + .word 0a004h + .word 0a005h + .word 0a006h + .word 0a007h + .word 0a008h + .word 0a009h + .word 0a00ah + .word 0a00bh + .word 0a00ch + .word 0a00dh + .word 0a00eh + .word 0a00fh + .word 0afe1h + .word 0afe2h + .word 0afe3h + .word 0afe4h + .word 0afe5h + .word 0afe6h + .word 0afe7h + .word 0afe8h + .word 0afe9h + .word 0afeah + .word 0afebh + .word 0afech + .word 0afedh + .word 0afeeh + .word 0afefh + .word 0aff0h + .word 0aff1h + .word 0aff2h + .word 0aff3h + .word 0aff4h + .word 0aff5h + .word 0aff6h + .word 0aff7h + .word 0aff8h + .word 0aff9h + .word 0affah + .word 0affbh + .word 0affch + .word 0affdh + .word 0affeh + .word 0afffh + .word 0b000h + .word 0b001h + .word 0b002h + .word 0b003h + .word 0b004h + .word 0b005h + .word 0b006h + .word 0b007h + .word 0b008h + .word 0b009h + .word 0b00ah + .word 0b00bh + .word 0b00ch + .word 0b00dh + .word 0b00eh + .word 0b00fh + .word 0bfe1h + .word 0bfe2h + .word 0bfe3h + .word 0bfe4h + .word 0bfe5h + .word 0bfe6h + .word 0bfe7h + .word 0bfe8h + .word 0bfe9h + .word 0bfeah + .word 0bfebh + .word 0bfech + .word 0bfedh + .word 0bfeeh + .word 0bfefh + .word 0bff0h + .word 0bff1h + .word 0bff2h + .word 0bff3h + .word 0bff4h + .word 0bff5h + .word 0bff6h + .word 0bff7h + .word 0bff8h + .word 0bff9h + .word 0bffah + .word 0bffbh + .word 0bffch + .word 0bffdh + .word 0bffeh + .word 0bfffh + .word 0c000h + .word 0c001h + .word 0c002h + .word 0c003h + .word 0c004h + .word 0c005h + .word 0c006h + .word 0c007h + .word 0c008h + .word 0c009h + .word 0c00ah + .word 0c00bh + .word 0c00ch + .word 0c00dh + .word 0c00eh + .word 0c00fh + .word 0cfe1h + .word 0cfe2h + .word 0cfe3h + .word 0cfe4h + .word 0cfe5h + .word 0cfe6h + .word 0cfe7h + .word 0cfe8h + .word 0cfe9h + .word 0cfeah + .word 0cfebh + .word 0cfech + .word 0cfedh + .word 0cfeeh + .word 0cfefh + .word 0cff0h + .word 0cff1h + .word 0cff2h + .word 0cff3h + .word 0cff4h + .word 0cff5h + .word 0cff6h + .word 0cff7h + .word 0cff8h + .word 0cff9h + .word 0cffah + .word 0cffbh + .word 0cffch + .word 0cffdh + .word 0cffeh + .word 0cfffh + .word 0d000h + .word 0d001h + .word 0d002h + .word 0d003h + .word 0d004h + .word 0d005h + .word 0d006h + .word 0d007h + .word 0d008h + .word 0d009h + .word 0d00ah + .word 0d00bh + .word 0d00ch + .word 0d00dh + .word 0d00eh + .word 0d00fh + .word 0dfe1h + .word 0dfe2h + .word 0dfe3h + .word 0dfe4h + .word 0dfe5h + .word 0dfe6h + .word 0dfe7h + .word 0dfe8h + .word 0dfe9h + .word 0dfeah + .word 0dfebh + .word 0dfech + .word 0dfedh + .word 0dfeeh + .word 0dfefh + .word 0dff0h + .word 0dff1h + .word 0dff2h + .word 0dff3h + .word 0dff4h + .word 0dff5h + .word 0dff6h + .word 0dff7h + .word 0dff8h + .word 0dff9h + .word 0dffah + .word 0dffbh + .word 0dffch + .word 0dffdh + .word 0dffeh + .word 0dfffh + .word 0e000h + .word 0e001h + .word 0e002h + .word 0e003h + .word 0e004h + .word 0e005h + .word 0e006h + .word 0e007h + .word 0e008h + .word 0e009h + .word 0e00ah + .word 0e00bh + .word 0e00ch + .word 0e00dh + .word 0e00eh + .word 0e00fh + .word 0efe1h + .word 0efe2h + .word 0efe3h + .word 0efe4h + .word 0efe5h + .word 0efe6h + .word 0efe7h + .word 0efe8h + .word 0efe9h + .word 0efeah + .word 0efebh + .word 0efech + .word 0efedh + .word 0efeeh + .word 0efefh + .word 0eff0h + .word 0eff1h + .word 0eff2h + .word 0eff3h + .word 0eff4h + .word 0eff5h + .word 0eff6h + .word 0eff7h + .word 0eff8h + .word 0eff9h + .word 0effah + .word 0effbh + .word 0effch + .word 0effdh + .word 0effeh + .word 0efffh + .word 0f000h + .word 0f001h + .word 0f002h + .word 0f003h + .word 0f004h + .word 0f005h + .word 0f006h + .word 0f007h + .word 0f008h + .word 0f009h + .word 0f00ah + .word 0f00bh + .word 0f00ch + .word 0f00dh + .word 0f00eh + .word 0f00fh + .word 0ffe1h + .word 0ffe2h + .word 0ffe3h + .word 0ffe4h + .word 0ffe5h + .word 0ffe6h + .word 0ffe7h + .word 0ffe8h + .word 0ffe9h + .word 0ffeah + .word 0ffebh + .word 0ffech + .word 0ffedh + .word 0ffeeh + .word 0ffefh + .word 0fff0h + .word 0fff1h + .word 0fff2h + .word 0fff3h + .word 0fff4h + .word 0fff5h + .word 0fff6h + .word 0fff7h + .word 0fff8h + .word 0fff9h + .word 0fffah + .word 0fffbh + .word 0fffch + .word 0fffdh + .word 0fffeh + .word 0ffffh + + ; binary values, variable length + .word %0 + .word %01 + .word %010 + .word %011 + .word %0100 + .word %0101 + .word %0110 + .word %0111 + .word %01000 + .word %01001 + .word %01010 + .word %01011 + .word %01100 + .word %01101 + .word %01110 + .word %01111 + .word %010000 + .word %010001 + .word %010010 + .word %010011 + .word %01110000 + .word %01110001 + .word %01110010 + .word %01110011 + .word %01110100 + .word %01110101 + .word %01110110 + .word %01110111 + .word %01111000 + .word %01111001 + .word %01111010 + .word %01111011 + .word %01111100 + .word %01111101 + .word %01111110 + .word %01111111 + .word %010000000 + .word %010000001 + .word %010000010 + .word %010000011 + .word %010000100 + .word %010000101 + .word %010000110 + .word %011110000 + .word %011110001 + .word %011110010 + .word %011110011 + .word %011110100 + .word %011110101 + .word %011110110 + .word %011110111 + .word %011111000 + .word %011111001 + .word %011111010 + .word %011111011 + .word %011111100 + .word %011111101 + .word %011111110 + .word %011111111 + .word %100000000 + .word %100000001 + .word %100000010 + .word %100000011 + .word %111111010010 + .word %111111010011 + .word %111111010100 + .word %111111010101 + .word %111111010110 + .word %111111010111 + .word %111111011000 + .word %111111011001 + .word %111111011010 + .word %111111011011 + .word %111111011100 + .word %111111011101 + .word %111111011110 + .word %111111011111 + .word %111111100000 + .word %111111100001 + .word %111111100010 + .word %111111100011 + .word %111111100100 + .word %111111100101 + .word %111111100110 + .word %111111100111 + .word %111111101000 + .word %111111101001 + .word %111111101010 + .word %111111101011 + .word %111111101100 + .word %111111101101 + .word %111111101110 + .word %111111101111 + .word %111111110000 + .word %111111110001 + .word %111111110010 + .word %111111110011 + .word %111111110100 + .word %111111110101 + .word %111111110110 + .word %111111110111 + .word %111111111000 + .word %111111111001 + .word %111111111010 + .word %111111111011 + .word %111111111100 + .word %111111111101 + .word %111111111110 + .word %111111111111 + .word %1000000000000 + .word %1000000000001 + .word %1000000000010 + .word %1000000000011 + .word %1000000000100 + .word %1000000000101 + .word %1000000000110 + .word %1000000000111 + .word %1000000001000 + .word %111111111110000 + .word %111111111110001 + .word %111111111110010 + .word %111111111110011 + .word %111111111110100 + .word %111111111110101 + .word %111111111110110 + .word %111111111110111 + .word %111111111111000 + .word %111111111111001 + .word %111111111111010 + .word %111111111111011 + .word %111111111111100 + .word %111111111111101 + .word %111111111111110 + .word %111111111111111 + .word %1000000000000000 + .word %1000000000000001 + .word %1000000000000010 + .word %1000000000000011 + .word %1000000000000100 + .word %1000000000000101 + .word %1000000000000110 + .word %1000000000000111 + .word %1000000000001000 + .word %1000000000001001 + .word %1000000000001010 + .word %1000000000001011 + .word %1001111111100001 + .word %1001111111100010 + .word %1001111111100011 + .word %1001111111100100 + .word %1001111111100101 + .word %1001111111100110 + .word %1001111111100111 + .word %1001111111101000 + .word %1001111111101001 + .word %1001111111101010 + .word %1001111111101011 + .word %1001111111101100 + .word %1001111111101101 + .word %1001111111101110 + .word %1001111111101111 + .word %1001111111110000 + .word %1001111111110001 + .word %1001111111110010 + .word %1001111111110011 + .word %1001111111110100 + .word %1001111111110101 + .word %1001111111110110 + .word %1001111111110111 + .word %1001111111111000 + .word %1001111111111001 + .word %1001111111111010 + .word %1001111111111011 + .word %1001111111111100 + .word %1001111111111101 + .word %1001111111111110 + .word %1001111111111111 + .word %1010000000000000 + .word %1010000000000001 + .word %1010000000000010 + .word %1010000000000011 + .word %1010000000000100 + .word %1010000000000101 + .word %1010000000000110 + .word %1010000000000111 + .word %1010000000001000 + .word %1010000000001001 + .word %1010000000001010 + .word %1010000000001011 + .word %1010000000001100 + .word %1010000000001101 + .word %1010000000001110 + .word %1010000000001111 + .word %1010111111100001 + .word %1010111111100010 + .word %1010111111100011 + .word %1010111111100100 + .word %1010111111100101 + .word %1010111111100110 + .word %1010111111100111 + .word %1010111111101000 + .word %1010111111101001 + .word %1010111111101010 + .word %1010111111101011 + .word %1010111111101100 + .word %1010111111101101 + .word %1010111111101110 + .word %1010111111101111 + .word %1010111111110000 + .word %1010111111110001 + .word %1010111111110010 + .word %1010111111110011 + .word %1010111111110100 + .word %1010111111110101 + .word %1010111111110110 + .word %1010111111110111 + .word %1010111111111000 + .word %1010111111111001 + .word %1010111111111010 + .word %1010111111111011 + .word %1010111111111100 + .word %1010111111111101 + .word %1010111111111110 + .word %1010111111111111 + .word %1011000000000000 + .word %1011000000000001 + .word %1011000000000010 + .word %1011000000000011 + .word %1011000000000100 + .word %1011000000000101 + .word %1011000000000110 + .word %1011000000000111 + .word %1011000000001000 + .word %1011000000001001 + .word %1011000000001010 + .word %1011000000001011 + .word %1011000000001100 + .word %1011000000001101 + .word %1011000000001110 + .word %1011000000001111 + .word %1011111111100001 + .word %1011111111100010 + .word %1011111111100011 + .word %1011111111100100 + .word %1011111111100101 + .word %1011111111100110 + .word %1011111111100111 + .word %1011111111101000 + .word %1011111111101001 + .word %1011111111101010 + .word %1011111111101011 + .word %1011111111101100 + .word %1011111111101101 + .word %1011111111101110 + .word %1011111111101111 + .word %1011111111110000 + .word %1011111111110001 + .word %1011111111110010 + .word %1011111111110011 + .word %1011111111110100 + .word %1011111111110101 + .word %1011111111110110 + .word %1011111111110111 + .word %1011111111111000 + .word %1011111111111001 + .word %1011111111111010 + .word %1011111111111011 + .word %1011111111111100 + .word %1011111111111101 + .word %1011111111111110 + .word %1011111111111111 + .word %1100000000000000 + .word %1100000000000001 + .word %1100000000000010 + .word %1100000000000011 + .word %1100000000000100 + .word %1100000000000101 + .word %1100000000000110 + .word %1100000000000111 + .word %1100000000001000 + .word %1100000000001001 + .word %1100000000001010 + .word %1100000000001011 + .word %1100000000001100 + .word %1100000000001101 + .word %1100000000001110 + .word %1100000000001111 + .word %1100111111100001 + .word %1100111111100010 + .word %1100111111100011 + .word %1100111111100100 + .word %1100111111100101 + .word %1100111111100110 + .word %1100111111100111 + .word %1100111111101000 + .word %1100111111101001 + .word %1100111111101010 + .word %1100111111101011 + .word %1100111111101100 + .word %1100111111101101 + .word %1100111111101110 + .word %1100111111101111 + .word %1100111111110000 + .word %1100111111110001 + .word %1100111111110010 + .word %1100111111110011 + .word %1100111111110100 + .word %1100111111110101 + .word %1100111111110110 + .word %1100111111110111 + .word %1100111111111000 + .word %1100111111111001 + .word %1100111111111010 + .word %1100111111111011 + .word %1100111111111100 + .word %1100111111111101 + .word %1100111111111110 + .word %1100111111111111 + .word %1101000000000000 + .word %1101000000000001 + .word %1101000000000010 + .word %1101000000000011 + .word %1101000000000100 + .word %1101000000000101 + .word %1101000000000110 + .word %1101000000000111 + .word %1101000000001000 + .word %1101000000001001 + .word %1101000000001010 + .word %1101000000001011 + .word %1101000000001100 + .word %1101000000001101 + .word %1101000000001110 + .word %1101000000001111 + .word %1101111111100001 + .word %1101111111100010 + .word %1101111111100011 + .word %1101111111100100 + .word %1101111111100101 + .word %1101111111100110 + .word %1101111111100111 + .word %1101111111101000 + .word %1101111111101001 + .word %1101111111101010 + .word %1101111111101011 + .word %1101111111101100 + .word %1101111111101101 + .word %1101111111101110 + .word %1101111111101111 + .word %1101111111110000 + .word %1101111111110001 + .word %1101111111110010 + .word %1101111111110011 + .word %1101111111110100 + .word %1101111111110101 + .word %1101111111110110 + .word %1101111111110111 + .word %1101111111111000 + .word %1101111111111001 + .word %1101111111111010 + .word %1101111111111011 + .word %1101111111111100 + .word %1101111111111101 + .word %1101111111111110 + .word %1101111111111111 + .word %1110000000000000 + .word %1110000000000001 + .word %1110000000000010 + .word %1110000000000011 + .word %1110000000000100 + .word %1110000000000101 + .word %1110000000000110 + .word %1110000000000111 + .word %1110000000001000 + .word %1110000000001001 + .word %1110000000001010 + .word %1110000000001011 + .word %1110000000001100 + .word %1110000000001101 + .word %1110000000001110 + .word %1110000000001111 + .word %1110111111100001 + .word %1110111111100010 + .word %1110111111100011 + .word %1110111111100100 + .word %1110111111100101 + .word %1110111111100110 + .word %1110111111100111 + .word %1110111111101000 + .word %1110111111101001 + .word %1110111111101010 + .word %1110111111101011 + .word %1110111111101100 + .word %1110111111101101 + .word %1110111111101110 + .word %1110111111101111 + .word %1110111111110000 + .word %1110111111110001 + .word %1110111111110010 + .word %1110111111110011 + .word %1110111111110100 + .word %1110111111110101 + .word %1110111111110110 + .word %1110111111110111 + .word %1110111111111000 + .word %1110111111111001 + .word %1110111111111010 + .word %1110111111111011 + .word %1110111111111100 + .word %1110111111111101 + .word %1110111111111110 + .word %1110111111111111 + .word %1111000000000000 + .word %1111000000000001 + .word %1111000000000010 + .word %1111000000000011 + .word %1111000000000100 + .word %1111000000000101 + .word %1111000000000110 + .word %1111000000000111 + .word %1111000000001000 + .word %1111000000001001 + .word %1111000000001010 + .word %1111000000001011 + .word %1111000000001100 + .word %1111000000001101 + .word %1111000000001110 + .word %1111000000001111 + .word %1111111111100001 + .word %1111111111100010 + .word %1111111111100011 + .word %1111111111100100 + .word %1111111111100101 + .word %1111111111100110 + .word %1111111111100111 + .word %1111111111101000 + .word %1111111111101001 + .word %1111111111101010 + .word %1111111111101011 + .word %1111111111101100 + .word %1111111111101101 + .word %1111111111101110 + .word %1111111111101111 + .word %1111111111110000 + .word %1111111111110001 + .word %1111111111110010 + .word %1111111111110011 + .word %1111111111110100 + .word %1111111111110101 + .word %1111111111110110 + .word %1111111111110111 + .word %1111111111111000 + .word %1111111111111001 + .word %1111111111111010 + .word %1111111111111011 + .word %1111111111111100 + .word %1111111111111101 + .word %1111111111111110 + .word %1111111111111111 + + ; binary values, full length + .word %0000000000000000 + .word %0000000000000001 + .word %0000000000000010 + .word %0000000000000011 + .word %0000000000000100 + .word %0000000000000101 + .word %0000000000000110 + .word %0000000000000111 + .word %0000000000001000 + .word %0000000000001001 + .word %0000000000001010 + .word %0000000000001011 + .word %0000000000001100 + .word %0000000000001101 + .word %0000000000001110 + .word %0000000000001111 + .word %0000000000010000 + .word %0000000000010001 + .word %0000000000010010 + .word %0000000000010011 + .word %0000000001110000 + .word %0000000001110001 + .word %0000000001110010 + .word %0000000001110011 + .word %0000000001110100 + .word %0000000001110101 + .word %0000000001110110 + .word %0000000001110111 + .word %0000000001111000 + .word %0000000001111001 + .word %0000000001111010 + .word %0000000001111011 + .word %0000000001111100 + .word %0000000001111101 + .word %0000000001111110 + .word %0000000001111111 + .word %0000000010000000 + .word %0000000010000001 + .word %0000000010000010 + .word %0000000010000011 + .word %0000000010000100 + .word %0000000010000101 + .word %0000000010000110 + .word %0000000011110000 + .word %0000000011110001 + .word %0000000011110010 + .word %0000000011110011 + .word %0000000011110100 + .word %0000000011110101 + .word %0000000011110110 + .word %0000000011110111 + .word %0000000011111000 + .word %0000000011111001 + .word %0000000011111010 + .word %0000000011111011 + .word %0000000011111100 + .word %0000000011111101 + .word %0000000011111110 + .word %0000000011111111 + .word %0000000100000000 + .word %0000000100000001 + .word %0000000100000010 + .word %0000000100000011 + .word %0000111111010010 + .word %0000111111010011 + .word %0000111111010100 + .word %0000111111010101 + .word %0000111111010110 + .word %0000111111010111 + .word %0000111111011000 + .word %0000111111011001 + .word %0000111111011010 + .word %0000111111011011 + .word %0000111111011100 + .word %0000111111011101 + .word %0000111111011110 + .word %0000111111011111 + .word %0000111111100000 + .word %0000111111100001 + .word %0000111111100010 + .word %0000111111100011 + .word %0000111111100100 + .word %0000111111100101 + .word %0000111111100110 + .word %0000111111100111 + .word %0000111111101000 + .word %0000111111101001 + .word %0000111111101010 + .word %0000111111101011 + .word %0000111111101100 + .word %0000111111101101 + .word %0000111111101110 + .word %0000111111101111 + .word %0000111111110000 + .word %0000111111110001 + .word %0000111111110010 + .word %0000111111110011 + .word %0000111111110100 + .word %0000111111110101 + .word %0000111111110110 + .word %0000111111110111 + .word %0000111111111000 + .word %0000111111111001 + .word %0000111111111010 + .word %0000111111111011 + .word %0000111111111100 + .word %0000111111111101 + .word %0000111111111110 + .word %0000111111111111 + .word %0001000000000000 + .word %0001000000000001 + .word %0001000000000010 + .word %0001000000000011 + .word %0001000000000100 + .word %0001000000000101 + .word %0001000000000110 + .word %0001000000000111 + .word %0001000000001000 + .word %0111111111110000 + .word %0111111111110001 + .word %0111111111110010 + .word %0111111111110011 + .word %0111111111110100 + .word %0111111111110101 + .word %0111111111110110 + .word %0111111111110111 + .word %0111111111111000 + .word %0111111111111001 + .word %0111111111111010 + .word %0111111111111011 + .word %0111111111111100 + .word %0111111111111101 + .word %0111111111111110 + .word %0111111111111111 + .word %1000000000000000 + .word %1000000000000001 + .word %1000000000000010 + .word %1000000000000011 + .word %1000000000000100 + .word %1000000000000101 + .word %1000000000000110 + .word %1000000000000111 + .word %1000000000001000 + .word %1000000000001001 + .word %1000000000001010 + .word %1000000000001011 + .word %1001111111100001 + .word %1001111111100010 + .word %1001111111100011 + .word %1001111111100100 + .word %1001111111100101 + .word %1001111111100110 + .word %1001111111100111 + .word %1001111111101000 + .word %1001111111101001 + .word %1001111111101010 + .word %1001111111101011 + .word %1001111111101100 + .word %1001111111101101 + .word %1001111111101110 + .word %1001111111101111 + .word %1001111111110000 + .word %1001111111110001 + .word %1001111111110010 + .word %1001111111110011 + .word %1001111111110100 + .word %1001111111110101 + .word %1001111111110110 + .word %1001111111110111 + .word %1001111111111000 + .word %1001111111111001 + .word %1001111111111010 + .word %1001111111111011 + .word %1001111111111100 + .word %1001111111111101 + .word %1001111111111110 + .word %1001111111111111 + .word %1010000000000000 + .word %1010000000000001 + .word %1010000000000010 + .word %1010000000000011 + .word %1010000000000100 + .word %1010000000000101 + .word %1010000000000110 + .word %1010000000000111 + .word %1010000000001000 + .word %1010000000001001 + .word %1010000000001010 + .word %1010000000001011 + .word %1010000000001100 + .word %1010000000001101 + .word %1010000000001110 + .word %1010000000001111 + .word %1010111111100001 + .word %1010111111100010 + .word %1010111111100011 + .word %1010111111100100 + .word %1010111111100101 + .word %1010111111100110 + .word %1010111111100111 + .word %1010111111101000 + .word %1010111111101001 + .word %1010111111101010 + .word %1010111111101011 + .word %1010111111101100 + .word %1010111111101101 + .word %1010111111101110 + .word %1010111111101111 + .word %1010111111110000 + .word %1010111111110001 + .word %1010111111110010 + .word %1010111111110011 + .word %1010111111110100 + .word %1010111111110101 + .word %1010111111110110 + .word %1010111111110111 + .word %1010111111111000 + .word %1010111111111001 + .word %1010111111111010 + .word %1010111111111011 + .word %1010111111111100 + .word %1010111111111101 + .word %1010111111111110 + .word %1010111111111111 + .word %1011000000000000 + .word %1011000000000001 + .word %1011000000000010 + .word %1011000000000011 + .word %1011000000000100 + .word %1011000000000101 + .word %1011000000000110 + .word %1011000000000111 + .word %1011000000001000 + .word %1011000000001001 + .word %1011000000001010 + .word %1011000000001011 + .word %1011000000001100 + .word %1011000000001101 + .word %1011000000001110 + .word %1011000000001111 + .word %1011111111100001 + .word %1011111111100010 + .word %1011111111100011 + .word %1011111111100100 + .word %1011111111100101 + .word %1011111111100110 + .word %1011111111100111 + .word %1011111111101000 + .word %1011111111101001 + .word %1011111111101010 + .word %1011111111101011 + .word %1011111111101100 + .word %1011111111101101 + .word %1011111111101110 + .word %1011111111101111 + .word %1011111111110000 + .word %1011111111110001 + .word %1011111111110010 + .word %1011111111110011 + .word %1011111111110100 + .word %1011111111110101 + .word %1011111111110110 + .word %1011111111110111 + .word %1011111111111000 + .word %1011111111111001 + .word %1011111111111010 + .word %1011111111111011 + .word %1011111111111100 + .word %1011111111111101 + .word %1011111111111110 + .word %1011111111111111 + .word %1100000000000000 + .word %1100000000000001 + .word %1100000000000010 + .word %1100000000000011 + .word %1100000000000100 + .word %1100000000000101 + .word %1100000000000110 + .word %1100000000000111 + .word %1100000000001000 + .word %1100000000001001 + .word %1100000000001010 + .word %1100000000001011 + .word %1100000000001100 + .word %1100000000001101 + .word %1100000000001110 + .word %1100000000001111 + .word %1100111111100001 + .word %1100111111100010 + .word %1100111111100011 + .word %1100111111100100 + .word %1100111111100101 + .word %1100111111100110 + .word %1100111111100111 + .word %1100111111101000 + .word %1100111111101001 + .word %1100111111101010 + .word %1100111111101011 + .word %1100111111101100 + .word %1100111111101101 + .word %1100111111101110 + .word %1100111111101111 + .word %1100111111110000 + .word %1100111111110001 + .word %1100111111110010 + .word %1100111111110011 + .word %1100111111110100 + .word %1100111111110101 + .word %1100111111110110 + .word %1100111111110111 + .word %1100111111111000 + .word %1100111111111001 + .word %1100111111111010 + .word %1100111111111011 + .word %1100111111111100 + .word %1100111111111101 + .word %1100111111111110 + .word %1100111111111111 + .word %1101000000000000 + .word %1101000000000001 + .word %1101000000000010 + .word %1101000000000011 + .word %1101000000000100 + .word %1101000000000101 + .word %1101000000000110 + .word %1101000000000111 + .word %1101000000001000 + .word %1101000000001001 + .word %1101000000001010 + .word %1101000000001011 + .word %1101000000001100 + .word %1101000000001101 + .word %1101000000001110 + .word %1101000000001111 + .word %1101111111100001 + .word %1101111111100010 + .word %1101111111100011 + .word %1101111111100100 + .word %1101111111100101 + .word %1101111111100110 + .word %1101111111100111 + .word %1101111111101000 + .word %1101111111101001 + .word %1101111111101010 + .word %1101111111101011 + .word %1101111111101100 + .word %1101111111101101 + .word %1101111111101110 + .word %1101111111101111 + .word %1101111111110000 + .word %1101111111110001 + .word %1101111111110010 + .word %1101111111110011 + .word %1101111111110100 + .word %1101111111110101 + .word %1101111111110110 + .word %1101111111110111 + .word %1101111111111000 + .word %1101111111111001 + .word %1101111111111010 + .word %1101111111111011 + .word %1101111111111100 + .word %1101111111111101 + .word %1101111111111110 + .word %1101111111111111 + .word %1110000000000000 + .word %1110000000000001 + .word %1110000000000010 + .word %1110000000000011 + .word %1110000000000100 + .word %1110000000000101 + .word %1110000000000110 + .word %1110000000000111 + .word %1110000000001000 + .word %1110000000001001 + .word %1110000000001010 + .word %1110000000001011 + .word %1110000000001100 + .word %1110000000001101 + .word %1110000000001110 + .word %1110000000001111 + .word %1110111111100001 + .word %1110111111100010 + .word %1110111111100011 + .word %1110111111100100 + .word %1110111111100101 + .word %1110111111100110 + .word %1110111111100111 + .word %1110111111101000 + .word %1110111111101001 + .word %1110111111101010 + .word %1110111111101011 + .word %1110111111101100 + .word %1110111111101101 + .word %1110111111101110 + .word %1110111111101111 + .word %1110111111110000 + .word %1110111111110001 + .word %1110111111110010 + .word %1110111111110011 + .word %1110111111110100 + .word %1110111111110101 + .word %1110111111110110 + .word %1110111111110111 + .word %1110111111111000 + .word %1110111111111001 + .word %1110111111111010 + .word %1110111111111011 + .word %1110111111111100 + .word %1110111111111101 + .word %1110111111111110 + .word %1110111111111111 + .word %1111000000000000 + .word %1111000000000001 + .word %1111000000000010 + .word %1111000000000011 + .word %1111000000000100 + .word %1111000000000101 + .word %1111000000000110 + .word %1111000000000111 + .word %1111000000001000 + .word %1111000000001001 + .word %1111000000001010 + .word %1111000000001011 + .word %1111000000001100 + .word %1111000000001101 + .word %1111000000001110 + .word %1111000000001111 + .word %1111111111100001 + .word %1111111111100010 + .word %1111111111100011 + .word %1111111111100100 + .word %1111111111100101 + .word %1111111111100110 + .word %1111111111100111 + .word %1111111111101000 + .word %1111111111101001 + .word %1111111111101010 + .word %1111111111101011 + .word %1111111111101100 + .word %1111111111101101 + .word %1111111111101110 + .word %1111111111101111 + .word %1111111111110000 + .word %1111111111110001 + .word %1111111111110010 + .word %1111111111110011 + .word %1111111111110100 + .word %1111111111110101 + .word %1111111111110110 + .word %1111111111110111 + .word %1111111111111000 + .word %1111111111111001 + .word %1111111111111010 + .word %1111111111111011 + .word %1111111111111100 + .word %1111111111111101 + .word %1111111111111110 + .word %1111111111111111 + + ; multiple values on one line, decimal + .word 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .word 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .word 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .word 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .word 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + .word 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 + .word 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 + .word 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 + .word 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 + .word 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 + .word 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 + .word 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 + .word 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 + .word 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 + .word 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 + .word 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 + .word 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 + .word 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 + .word 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 + .word 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 + .word 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 + .word 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 + .word 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 + .word 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 + + ; multiple values on one line, hex + .word $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .word $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .word $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .word $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .word $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + .word $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f + .word $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef + .word $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff + .word $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f + .word $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff + .word $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f + .word $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff + .word $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f + .word $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff + .word $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f + .word $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff + .word $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f + .word $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff + .word $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f + .word $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff + .word $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f + .word $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff + .word $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f + .word $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff + + ; multiple values on one line, alternative hex + .word 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .word 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .word 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .word 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .word 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + .word 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh + .word 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh + .word 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh + .word 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh + .word 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh + .word 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh + .word 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh + .word 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh + .word 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh + .word 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh + .word 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh + .word 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh + .word 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh + .word 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh + .word 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh + .word 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh + .word 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh + .word 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh + .word 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh + + ; mix some variants + .word 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/103-dbyt.bin-ref b/test/asm/listing/103-dbyt.bin-ref new file mode 100644 index 0000000000000000000000000000000000000000..6bfb6f7382f702d3bee637917a41da06519037da GIT binary patch literal 14270 zcmeI3N3!)a5QSSe=QcUR7ML<*8_Zw@<P0`B!xH2%4CEciJCKW<<(u=BZq8S{q8KoP z$NNWAmrFy>)aveYz5@UZGLVHF<e>mXC_x!2P=y-Qp#caU+y=M99q=?f1JA;9@I1T# zFTzXkGQ0w>!fWt4ya8{54*|RdZ^JwAF1!ctgM~RPU<oT&!v?mngFPJJ2q!qh1sns$ zScYZsYy1Yk#qaQY`~iQ&pYUh=1%Jig@ORXhViQ}~#twF|hkYF25Jx!12~Kf_1})BU zflFNB8aKGb9q#dfM?B#fFX%k*n3wUgUe3#V1+VCpeCyBsg}?My{@UO8TYu;8{eyq> zPyX4z_%48e1(_fl<br%q2#P@|C<m3G%A35!+q}cOyvO@|z=wRq$9%%4e8vs8e9jkq z$ya>MH+;)?e9sU3$WQ#tFWiL?vM>{7!(5mT3t=%Vh2^jkR>N9Y4;vwhrf7+_=!mZ9 ziM|+!p%{s=n24#E2_vkSi-lN<l~{|7*ovLli-S0dlQ@fua1lf-%0$^H7v-ZuRE$bd zIjTg}s20_uMuf5{Te2-XvMYPCF9&icM{+DDaw=!iNGs=ZA(wI`*K#AbawqrlAdm7S z&+;N&3^9u{aW>Ay`M3}l<5FCXD{(ch#r3!mqiU*_YO9Xws-Ehrff}lj8moz#s+ls% zs<~RIrCO=A+NiDCsl7U=qdKXxx+s@G!jepqO>#*-DI~?Dl$4W7QcY?}J!vGUo4Tdj zx}&?gr~7)KhkB&PdZMR#rj53Gt`~Z#S9+~CdaHMOuMhgDPx`Dc+NF@PG?Ql2T$)b{ zX)!IO<+PGk(^^_j8!4KmX_>a^n6BxWz8RRI8JV$}n5mf=W2~8*g;|=FS(}a7nw{C3 zgE^X$Ih%`d7A&(Fo3%Ncw*_0YC0n)?TeUS?w+)M~=~}MsI<D(_uI~nJ=tgerCT{9x z?&^0pcMG?4E4OwVw{<(WcL#TLCwF!i=YXn`s*<Xbs*-vo^-AiM)GKL%r3scMSlTOT zucW<__DWKFNbMoDhcsByU`c}|4VIh{az@A*A-|IRO7bhouOy0qC<3Agh$0}ihu9us zdx*Fr;*N+rBJPNTB@Xug%)#CXcfs9o58Mm)!Ts<6JO~fL!|=#8sr3)wL-+_jhEL#A z_zXUWFa9mZ&T=fz3arRVtjsE`%4)368VvE4Gwfd3t9Vtf=GDE1hyH&g+Jjn94;lg9 zm|edqoqp39^`?aRO&Ri=QsTFY1E>3ctwaai|GyFzbpQXJTB7&=y4fXq|8JHO`lt85 ddX>J*UY#f5sjIZz<M0GL3Xj2;e|}%V<qztJ&?o=^ literal 0 HcmV?d00001 diff --git a/test/asm/listing/103-dbyt.list-ref b/test/asm/listing/103-dbyt.list-ref new file mode 100644 index 000000000..27fa2f4ef --- /dev/null +++ b/test/asm/listing/103-dbyt.list-ref @@ -0,0 +1,6226 @@ +Main file : 103-dbyt.s +Current file: 103-dbyt.s + +000000r 1 ; 2022-06-15 Spiro Trikaliotis +000000r 1 +000000r 1 +000000r 1 ; upper case pseudo-op +000000r 1 00 00 .DBYT 0 +000002r 1 00 01 .DBYT 1 +000004r 1 00 02 .DBYT 2 +000006r 1 00 03 .DBYT 3 +000008r 1 00 04 .DBYT 4 +00000Ar 1 00 05 .DBYT 5 +00000Cr 1 00 06 .DBYT 6 +00000Er 1 00 07 .DBYT 7 +000010r 1 00 08 .DBYT 8 +000012r 1 00 09 .DBYT 9 +000014r 1 00 0A .DBYT 10 +000016r 1 00 0B .DBYT 11 +000018r 1 00 0C .DBYT 12 +00001Ar 1 00 0D .DBYT 13 +00001Cr 1 00 0E .DBYT 14 +00001Er 1 00 0F .DBYT 15 +000020r 1 00 10 .DBYT 16 +000022r 1 00 11 .DBYT 17 +000024r 1 00 12 .DBYT 18 +000026r 1 00 13 .DBYT 19 +000028r 1 00 70 .DBYT 112 +00002Ar 1 00 71 .DBYT 113 +00002Cr 1 00 72 .DBYT 114 +00002Er 1 00 73 .DBYT 115 +000030r 1 00 74 .DBYT 116 +000032r 1 00 75 .DBYT 117 +000034r 1 00 76 .DBYT 118 +000036r 1 00 77 .DBYT 119 +000038r 1 00 78 .DBYT 120 +00003Ar 1 00 79 .DBYT 121 +00003Cr 1 00 7A .DBYT 122 +00003Er 1 00 7B .DBYT 123 +000040r 1 00 7C .DBYT 124 +000042r 1 00 7D .DBYT 125 +000044r 1 00 7E .DBYT 126 +000046r 1 00 7F .DBYT 127 +000048r 1 00 80 .DBYT 128 +00004Ar 1 00 81 .DBYT 129 +00004Cr 1 00 82 .DBYT 130 +00004Er 1 00 83 .DBYT 131 +000050r 1 00 84 .DBYT 132 +000052r 1 00 85 .DBYT 133 +000054r 1 00 86 .DBYT 134 +000056r 1 00 F0 .DBYT 240 +000058r 1 00 F1 .DBYT 241 +00005Ar 1 00 F2 .DBYT 242 +00005Cr 1 00 F3 .DBYT 243 +00005Er 1 00 F4 .DBYT 244 +000060r 1 00 F5 .DBYT 245 +000062r 1 00 F6 .DBYT 246 +000064r 1 00 F7 .DBYT 247 +000066r 1 00 F8 .DBYT 248 +000068r 1 00 F9 .DBYT 249 +00006Ar 1 00 FA .DBYT 250 +00006Cr 1 00 FB .DBYT 251 +00006Er 1 00 FC .DBYT 252 +000070r 1 00 FD .DBYT 253 +000072r 1 00 FE .DBYT 254 +000074r 1 00 FF .DBYT 255 +000076r 1 01 00 .DBYT 256 +000078r 1 01 01 .DBYT 257 +00007Ar 1 01 02 .DBYT 258 +00007Cr 1 01 03 .DBYT 259 +00007Er 1 0F D2 .DBYT 4050 +000080r 1 0F D3 .DBYT 4051 +000082r 1 0F D4 .DBYT 4052 +000084r 1 0F D5 .DBYT 4053 +000086r 1 0F D6 .DBYT 4054 +000088r 1 0F D7 .DBYT 4055 +00008Ar 1 0F D8 .DBYT 4056 +00008Cr 1 0F D9 .DBYT 4057 +00008Er 1 0F DA .DBYT 4058 +000090r 1 0F DB .DBYT 4059 +000092r 1 0F DC .DBYT 4060 +000094r 1 0F DD .DBYT 4061 +000096r 1 0F DE .DBYT 4062 +000098r 1 0F DF .DBYT 4063 +00009Ar 1 0F E0 .DBYT 4064 +00009Cr 1 0F E1 .DBYT 4065 +00009Er 1 0F E2 .DBYT 4066 +0000A0r 1 0F E3 .DBYT 4067 +0000A2r 1 0F E4 .DBYT 4068 +0000A4r 1 0F E5 .DBYT 4069 +0000A6r 1 0F E6 .DBYT 4070 +0000A8r 1 0F E7 .DBYT 4071 +0000AAr 1 0F E8 .DBYT 4072 +0000ACr 1 0F E9 .DBYT 4073 +0000AEr 1 0F EA .DBYT 4074 +0000B0r 1 0F EB .DBYT 4075 +0000B2r 1 0F EC .DBYT 4076 +0000B4r 1 0F ED .DBYT 4077 +0000B6r 1 0F EE .DBYT 4078 +0000B8r 1 0F EF .DBYT 4079 +0000BAr 1 0F F0 .DBYT 4080 +0000BCr 1 0F F1 .DBYT 4081 +0000BEr 1 0F F2 .DBYT 4082 +0000C0r 1 0F F3 .DBYT 4083 +0000C2r 1 0F F4 .DBYT 4084 +0000C4r 1 0F F5 .DBYT 4085 +0000C6r 1 0F F6 .DBYT 4086 +0000C8r 1 0F F7 .DBYT 4087 +0000CAr 1 0F F8 .DBYT 4088 +0000CCr 1 0F F9 .DBYT 4089 +0000CEr 1 0F FA .DBYT 4090 +0000D0r 1 0F FB .DBYT 4091 +0000D2r 1 0F FC .DBYT 4092 +0000D4r 1 0F FD .DBYT 4093 +0000D6r 1 0F FE .DBYT 4094 +0000D8r 1 0F FF .DBYT 4095 +0000DAr 1 10 00 .DBYT 4096 +0000DCr 1 10 01 .DBYT 4097 +0000DEr 1 10 02 .DBYT 4098 +0000E0r 1 10 03 .DBYT 4099 +0000E2r 1 10 04 .DBYT 4100 +0000E4r 1 10 05 .DBYT 4101 +0000E6r 1 10 06 .DBYT 4102 +0000E8r 1 10 07 .DBYT 4103 +0000EAr 1 10 08 .DBYT 4104 +0000ECr 1 7F F0 .DBYT 32752 +0000EEr 1 7F F1 .DBYT 32753 +0000F0r 1 7F F2 .DBYT 32754 +0000F2r 1 7F F3 .DBYT 32755 +0000F4r 1 7F F4 .DBYT 32756 +0000F6r 1 7F F5 .DBYT 32757 +0000F8r 1 7F F6 .DBYT 32758 +0000FAr 1 7F F7 .DBYT 32759 +0000FCr 1 7F F8 .DBYT 32760 +0000FEr 1 7F F9 .DBYT 32761 +000100r 1 7F FA .DBYT 32762 +000102r 1 7F FB .DBYT 32763 +000104r 1 7F FC .DBYT 32764 +000106r 1 7F FD .DBYT 32765 +000108r 1 7F FE .DBYT 32766 +00010Ar 1 7F FF .DBYT 32767 +00010Cr 1 80 00 .DBYT 32768 +00010Er 1 80 01 .DBYT 32769 +000110r 1 80 02 .DBYT 32770 +000112r 1 80 03 .DBYT 32771 +000114r 1 80 04 .DBYT 32772 +000116r 1 80 05 .DBYT 32773 +000118r 1 80 06 .DBYT 32774 +00011Ar 1 80 07 .DBYT 32775 +00011Cr 1 80 08 .DBYT 32776 +00011Er 1 80 09 .DBYT 32777 +000120r 1 80 0A .DBYT 32778 +000122r 1 80 0B .DBYT 32779 +000124r 1 9F E1 .DBYT 40929 +000126r 1 9F E2 .DBYT 40930 +000128r 1 9F E3 .DBYT 40931 +00012Ar 1 9F E4 .DBYT 40932 +00012Cr 1 9F E5 .DBYT 40933 +00012Er 1 9F E6 .DBYT 40934 +000130r 1 9F E7 .DBYT 40935 +000132r 1 9F E8 .DBYT 40936 +000134r 1 9F E9 .DBYT 40937 +000136r 1 9F EA .DBYT 40938 +000138r 1 9F EB .DBYT 40939 +00013Ar 1 9F EC .DBYT 40940 +00013Cr 1 9F ED .DBYT 40941 +00013Er 1 9F EE .DBYT 40942 +000140r 1 9F EF .DBYT 40943 +000142r 1 9F F0 .DBYT 40944 +000144r 1 9F F1 .DBYT 40945 +000146r 1 9F F2 .DBYT 40946 +000148r 1 9F F3 .DBYT 40947 +00014Ar 1 9F F4 .DBYT 40948 +00014Cr 1 9F F5 .DBYT 40949 +00014Er 1 9F F6 .DBYT 40950 +000150r 1 9F F7 .DBYT 40951 +000152r 1 9F F8 .DBYT 40952 +000154r 1 9F F9 .DBYT 40953 +000156r 1 9F FA .DBYT 40954 +000158r 1 9F FB .DBYT 40955 +00015Ar 1 9F FC .DBYT 40956 +00015Cr 1 9F FD .DBYT 40957 +00015Er 1 9F FE .DBYT 40958 +000160r 1 9F FF .DBYT 40959 +000162r 1 A0 00 .DBYT 40960 +000164r 1 A0 01 .DBYT 40961 +000166r 1 A0 02 .DBYT 40962 +000168r 1 A0 03 .DBYT 40963 +00016Ar 1 A0 04 .DBYT 40964 +00016Cr 1 A0 05 .DBYT 40965 +00016Er 1 A0 06 .DBYT 40966 +000170r 1 A0 07 .DBYT 40967 +000172r 1 A0 08 .DBYT 40968 +000174r 1 A0 09 .DBYT 40969 +000176r 1 A0 0A .DBYT 40970 +000178r 1 A0 0B .DBYT 40971 +00017Ar 1 A0 0C .DBYT 40972 +00017Cr 1 A0 0D .DBYT 40973 +00017Er 1 A0 0E .DBYT 40974 +000180r 1 A0 0F .DBYT 40975 +000182r 1 AF E1 .DBYT 45025 +000184r 1 AF E2 .DBYT 45026 +000186r 1 AF E3 .DBYT 45027 +000188r 1 AF E4 .DBYT 45028 +00018Ar 1 AF E5 .DBYT 45029 +00018Cr 1 AF E6 .DBYT 45030 +00018Er 1 AF E7 .DBYT 45031 +000190r 1 AF E8 .DBYT 45032 +000192r 1 AF E9 .DBYT 45033 +000194r 1 AF EA .DBYT 45034 +000196r 1 AF EB .DBYT 45035 +000198r 1 AF EC .DBYT 45036 +00019Ar 1 AF ED .DBYT 45037 +00019Cr 1 AF EE .DBYT 45038 +00019Er 1 AF EF .DBYT 45039 +0001A0r 1 AF F0 .DBYT 45040 +0001A2r 1 AF F1 .DBYT 45041 +0001A4r 1 AF F2 .DBYT 45042 +0001A6r 1 AF F3 .DBYT 45043 +0001A8r 1 AF F4 .DBYT 45044 +0001AAr 1 AF F5 .DBYT 45045 +0001ACr 1 AF F6 .DBYT 45046 +0001AEr 1 AF F7 .DBYT 45047 +0001B0r 1 AF F8 .DBYT 45048 +0001B2r 1 AF F9 .DBYT 45049 +0001B4r 1 AF FA .DBYT 45050 +0001B6r 1 AF FB .DBYT 45051 +0001B8r 1 AF FC .DBYT 45052 +0001BAr 1 AF FD .DBYT 45053 +0001BCr 1 AF FE .DBYT 45054 +0001BEr 1 AF FF .DBYT 45055 +0001C0r 1 B0 00 .DBYT 45056 +0001C2r 1 B0 01 .DBYT 45057 +0001C4r 1 B0 02 .DBYT 45058 +0001C6r 1 B0 03 .DBYT 45059 +0001C8r 1 B0 04 .DBYT 45060 +0001CAr 1 B0 05 .DBYT 45061 +0001CCr 1 B0 06 .DBYT 45062 +0001CEr 1 B0 07 .DBYT 45063 +0001D0r 1 B0 08 .DBYT 45064 +0001D2r 1 B0 09 .DBYT 45065 +0001D4r 1 B0 0A .DBYT 45066 +0001D6r 1 B0 0B .DBYT 45067 +0001D8r 1 B0 0C .DBYT 45068 +0001DAr 1 B0 0D .DBYT 45069 +0001DCr 1 B0 0E .DBYT 45070 +0001DEr 1 B0 0F .DBYT 45071 +0001E0r 1 BF E1 .DBYT 49121 +0001E2r 1 BF E2 .DBYT 49122 +0001E4r 1 BF E3 .DBYT 49123 +0001E6r 1 BF E4 .DBYT 49124 +0001E8r 1 BF E5 .DBYT 49125 +0001EAr 1 BF E6 .DBYT 49126 +0001ECr 1 BF E7 .DBYT 49127 +0001EEr 1 BF E8 .DBYT 49128 +0001F0r 1 BF E9 .DBYT 49129 +0001F2r 1 BF EA .DBYT 49130 +0001F4r 1 BF EB .DBYT 49131 +0001F6r 1 BF EC .DBYT 49132 +0001F8r 1 BF ED .DBYT 49133 +0001FAr 1 BF EE .DBYT 49134 +0001FCr 1 BF EF .DBYT 49135 +0001FEr 1 BF F0 .DBYT 49136 +000200r 1 BF F1 .DBYT 49137 +000202r 1 BF F2 .DBYT 49138 +000204r 1 BF F3 .DBYT 49139 +000206r 1 BF F4 .DBYT 49140 +000208r 1 BF F5 .DBYT 49141 +00020Ar 1 BF F6 .DBYT 49142 +00020Cr 1 BF F7 .DBYT 49143 +00020Er 1 BF F8 .DBYT 49144 +000210r 1 BF F9 .DBYT 49145 +000212r 1 BF FA .DBYT 49146 +000214r 1 BF FB .DBYT 49147 +000216r 1 BF FC .DBYT 49148 +000218r 1 BF FD .DBYT 49149 +00021Ar 1 BF FE .DBYT 49150 +00021Cr 1 BF FF .DBYT 49151 +00021Er 1 C0 00 .DBYT 49152 +000220r 1 C0 01 .DBYT 49153 +000222r 1 C0 02 .DBYT 49154 +000224r 1 C0 03 .DBYT 49155 +000226r 1 C0 04 .DBYT 49156 +000228r 1 C0 05 .DBYT 49157 +00022Ar 1 C0 06 .DBYT 49158 +00022Cr 1 C0 07 .DBYT 49159 +00022Er 1 C0 08 .DBYT 49160 +000230r 1 C0 09 .DBYT 49161 +000232r 1 C0 0A .DBYT 49162 +000234r 1 C0 0B .DBYT 49163 +000236r 1 C0 0C .DBYT 49164 +000238r 1 C0 0D .DBYT 49165 +00023Ar 1 C0 0E .DBYT 49166 +00023Cr 1 C0 0F .DBYT 49167 +00023Er 1 CF E1 .DBYT 53217 +000240r 1 CF E2 .DBYT 53218 +000242r 1 CF E3 .DBYT 53219 +000244r 1 CF E4 .DBYT 53220 +000246r 1 CF E5 .DBYT 53221 +000248r 1 CF E6 .DBYT 53222 +00024Ar 1 CF E7 .DBYT 53223 +00024Cr 1 CF E8 .DBYT 53224 +00024Er 1 CF E9 .DBYT 53225 +000250r 1 CF EA .DBYT 53226 +000252r 1 CF EB .DBYT 53227 +000254r 1 CF EC .DBYT 53228 +000256r 1 CF ED .DBYT 53229 +000258r 1 CF EE .DBYT 53230 +00025Ar 1 CF EF .DBYT 53231 +00025Cr 1 CF F0 .DBYT 53232 +00025Er 1 CF F1 .DBYT 53233 +000260r 1 CF F2 .DBYT 53234 +000262r 1 CF F3 .DBYT 53235 +000264r 1 CF F4 .DBYT 53236 +000266r 1 CF F5 .DBYT 53237 +000268r 1 CF F6 .DBYT 53238 +00026Ar 1 CF F7 .DBYT 53239 +00026Cr 1 CF F8 .DBYT 53240 +00026Er 1 CF F9 .DBYT 53241 +000270r 1 CF FA .DBYT 53242 +000272r 1 CF FB .DBYT 53243 +000274r 1 CF FC .DBYT 53244 +000276r 1 CF FD .DBYT 53245 +000278r 1 CF FE .DBYT 53246 +00027Ar 1 CF FF .DBYT 53247 +00027Cr 1 D0 00 .DBYT 53248 +00027Er 1 D0 01 .DBYT 53249 +000280r 1 D0 02 .DBYT 53250 +000282r 1 D0 03 .DBYT 53251 +000284r 1 D0 04 .DBYT 53252 +000286r 1 D0 05 .DBYT 53253 +000288r 1 D0 06 .DBYT 53254 +00028Ar 1 D0 07 .DBYT 53255 +00028Cr 1 D0 08 .DBYT 53256 +00028Er 1 D0 09 .DBYT 53257 +000290r 1 D0 0A .DBYT 53258 +000292r 1 D0 0B .DBYT 53259 +000294r 1 D0 0C .DBYT 53260 +000296r 1 D0 0D .DBYT 53261 +000298r 1 D0 0E .DBYT 53262 +00029Ar 1 D0 0F .DBYT 53263 +00029Cr 1 DF E1 .DBYT 57313 +00029Er 1 DF E2 .DBYT 57314 +0002A0r 1 DF E3 .DBYT 57315 +0002A2r 1 DF E4 .DBYT 57316 +0002A4r 1 DF E5 .DBYT 57317 +0002A6r 1 DF E6 .DBYT 57318 +0002A8r 1 DF E7 .DBYT 57319 +0002AAr 1 DF E8 .DBYT 57320 +0002ACr 1 DF E9 .DBYT 57321 +0002AEr 1 DF EA .DBYT 57322 +0002B0r 1 DF EB .DBYT 57323 +0002B2r 1 DF EC .DBYT 57324 +0002B4r 1 DF ED .DBYT 57325 +0002B6r 1 DF EE .DBYT 57326 +0002B8r 1 DF EF .DBYT 57327 +0002BAr 1 DF F0 .DBYT 57328 +0002BCr 1 DF F1 .DBYT 57329 +0002BEr 1 DF F2 .DBYT 57330 +0002C0r 1 DF F3 .DBYT 57331 +0002C2r 1 DF F4 .DBYT 57332 +0002C4r 1 DF F5 .DBYT 57333 +0002C6r 1 DF F6 .DBYT 57334 +0002C8r 1 DF F7 .DBYT 57335 +0002CAr 1 DF F8 .DBYT 57336 +0002CCr 1 DF F9 .DBYT 57337 +0002CEr 1 DF FA .DBYT 57338 +0002D0r 1 DF FB .DBYT 57339 +0002D2r 1 DF FC .DBYT 57340 +0002D4r 1 DF FD .DBYT 57341 +0002D6r 1 DF FE .DBYT 57342 +0002D8r 1 DF FF .DBYT 57343 +0002DAr 1 E0 00 .DBYT 57344 +0002DCr 1 E0 01 .DBYT 57345 +0002DEr 1 E0 02 .DBYT 57346 +0002E0r 1 E0 03 .DBYT 57347 +0002E2r 1 E0 04 .DBYT 57348 +0002E4r 1 E0 05 .DBYT 57349 +0002E6r 1 E0 06 .DBYT 57350 +0002E8r 1 E0 07 .DBYT 57351 +0002EAr 1 E0 08 .DBYT 57352 +0002ECr 1 E0 09 .DBYT 57353 +0002EEr 1 E0 0A .DBYT 57354 +0002F0r 1 E0 0B .DBYT 57355 +0002F2r 1 E0 0C .DBYT 57356 +0002F4r 1 E0 0D .DBYT 57357 +0002F6r 1 E0 0E .DBYT 57358 +0002F8r 1 E0 0F .DBYT 57359 +0002FAr 1 EF E1 .DBYT 61409 +0002FCr 1 EF E2 .DBYT 61410 +0002FEr 1 EF E3 .DBYT 61411 +000300r 1 EF E4 .DBYT 61412 +000302r 1 EF E5 .DBYT 61413 +000304r 1 EF E6 .DBYT 61414 +000306r 1 EF E7 .DBYT 61415 +000308r 1 EF E8 .DBYT 61416 +00030Ar 1 EF E9 .DBYT 61417 +00030Cr 1 EF EA .DBYT 61418 +00030Er 1 EF EB .DBYT 61419 +000310r 1 EF EC .DBYT 61420 +000312r 1 EF ED .DBYT 61421 +000314r 1 EF EE .DBYT 61422 +000316r 1 EF EF .DBYT 61423 +000318r 1 EF F0 .DBYT 61424 +00031Ar 1 EF F1 .DBYT 61425 +00031Cr 1 EF F2 .DBYT 61426 +00031Er 1 EF F3 .DBYT 61427 +000320r 1 EF F4 .DBYT 61428 +000322r 1 EF F5 .DBYT 61429 +000324r 1 EF F6 .DBYT 61430 +000326r 1 EF F7 .DBYT 61431 +000328r 1 EF F8 .DBYT 61432 +00032Ar 1 EF F9 .DBYT 61433 +00032Cr 1 EF FA .DBYT 61434 +00032Er 1 EF FB .DBYT 61435 +000330r 1 EF FC .DBYT 61436 +000332r 1 EF FD .DBYT 61437 +000334r 1 EF FE .DBYT 61438 +000336r 1 EF FF .DBYT 61439 +000338r 1 F0 00 .DBYT 61440 +00033Ar 1 F0 01 .DBYT 61441 +00033Cr 1 F0 02 .DBYT 61442 +00033Er 1 F0 03 .DBYT 61443 +000340r 1 F0 04 .DBYT 61444 +000342r 1 F0 05 .DBYT 61445 +000344r 1 F0 06 .DBYT 61446 +000346r 1 F0 07 .DBYT 61447 +000348r 1 F0 08 .DBYT 61448 +00034Ar 1 F0 09 .DBYT 61449 +00034Cr 1 F0 0A .DBYT 61450 +00034Er 1 F0 0B .DBYT 61451 +000350r 1 F0 0C .DBYT 61452 +000352r 1 F0 0D .DBYT 61453 +000354r 1 F0 0E .DBYT 61454 +000356r 1 F0 0F .DBYT 61455 +000358r 1 FF E1 .DBYT 65505 +00035Ar 1 FF E2 .DBYT 65506 +00035Cr 1 FF E3 .DBYT 65507 +00035Er 1 FF E4 .DBYT 65508 +000360r 1 FF E5 .DBYT 65509 +000362r 1 FF E6 .DBYT 65510 +000364r 1 FF E7 .DBYT 65511 +000366r 1 FF E8 .DBYT 65512 +000368r 1 FF E9 .DBYT 65513 +00036Ar 1 FF EA .DBYT 65514 +00036Cr 1 FF EB .DBYT 65515 +00036Er 1 FF EC .DBYT 65516 +000370r 1 FF ED .DBYT 65517 +000372r 1 FF EE .DBYT 65518 +000374r 1 FF EF .DBYT 65519 +000376r 1 FF F0 .DBYT 65520 +000378r 1 FF F1 .DBYT 65521 +00037Ar 1 FF F2 .DBYT 65522 +00037Cr 1 FF F3 .DBYT 65523 +00037Er 1 FF F4 .DBYT 65524 +000380r 1 FF F5 .DBYT 65525 +000382r 1 FF F6 .DBYT 65526 +000384r 1 FF F7 .DBYT 65527 +000386r 1 FF F8 .DBYT 65528 +000388r 1 FF F9 .DBYT 65529 +00038Ar 1 FF FA .DBYT 65530 +00038Cr 1 FF FB .DBYT 65531 +00038Er 1 FF FC .DBYT 65532 +000390r 1 FF FD .DBYT 65533 +000392r 1 FF FE .DBYT 65534 +000394r 1 FF FF .DBYT 65535 +000396r 1 +000396r 1 ; lower case pseudo-op +000396r 1 00 00 .dbyt 0 +000398r 1 00 01 .dbyt 1 +00039Ar 1 00 02 .dbyt 2 +00039Cr 1 00 03 .dbyt 3 +00039Er 1 00 04 .dbyt 4 +0003A0r 1 00 05 .dbyt 5 +0003A2r 1 00 06 .dbyt 6 +0003A4r 1 00 07 .dbyt 7 +0003A6r 1 00 08 .dbyt 8 +0003A8r 1 00 09 .dbyt 9 +0003AAr 1 00 0A .dbyt 10 +0003ACr 1 00 0B .dbyt 11 +0003AEr 1 00 0C .dbyt 12 +0003B0r 1 00 0D .dbyt 13 +0003B2r 1 00 0E .dbyt 14 +0003B4r 1 00 0F .dbyt 15 +0003B6r 1 00 10 .dbyt 16 +0003B8r 1 00 11 .dbyt 17 +0003BAr 1 00 12 .dbyt 18 +0003BCr 1 00 13 .dbyt 19 +0003BEr 1 00 70 .dbyt 112 +0003C0r 1 00 71 .dbyt 113 +0003C2r 1 00 72 .dbyt 114 +0003C4r 1 00 73 .dbyt 115 +0003C6r 1 00 74 .dbyt 116 +0003C8r 1 00 75 .dbyt 117 +0003CAr 1 00 76 .dbyt 118 +0003CCr 1 00 77 .dbyt 119 +0003CEr 1 00 78 .dbyt 120 +0003D0r 1 00 79 .dbyt 121 +0003D2r 1 00 7A .dbyt 122 +0003D4r 1 00 7B .dbyt 123 +0003D6r 1 00 7C .dbyt 124 +0003D8r 1 00 7D .dbyt 125 +0003DAr 1 00 7E .dbyt 126 +0003DCr 1 00 7F .dbyt 127 +0003DEr 1 00 80 .dbyt 128 +0003E0r 1 00 81 .dbyt 129 +0003E2r 1 00 82 .dbyt 130 +0003E4r 1 00 83 .dbyt 131 +0003E6r 1 00 84 .dbyt 132 +0003E8r 1 00 85 .dbyt 133 +0003EAr 1 00 86 .dbyt 134 +0003ECr 1 00 F0 .dbyt 240 +0003EEr 1 00 F1 .dbyt 241 +0003F0r 1 00 F2 .dbyt 242 +0003F2r 1 00 F3 .dbyt 243 +0003F4r 1 00 F4 .dbyt 244 +0003F6r 1 00 F5 .dbyt 245 +0003F8r 1 00 F6 .dbyt 246 +0003FAr 1 00 F7 .dbyt 247 +0003FCr 1 00 F8 .dbyt 248 +0003FEr 1 00 F9 .dbyt 249 +000400r 1 00 FA .dbyt 250 +000402r 1 00 FB .dbyt 251 +000404r 1 00 FC .dbyt 252 +000406r 1 00 FD .dbyt 253 +000408r 1 00 FE .dbyt 254 +00040Ar 1 00 FF .dbyt 255 +00040Cr 1 01 00 .dbyt 256 +00040Er 1 01 01 .dbyt 257 +000410r 1 01 02 .dbyt 258 +000412r 1 01 03 .dbyt 259 +000414r 1 0F D2 .dbyt 4050 +000416r 1 0F D3 .dbyt 4051 +000418r 1 0F D4 .dbyt 4052 +00041Ar 1 0F D5 .dbyt 4053 +00041Cr 1 0F D6 .dbyt 4054 +00041Er 1 0F D7 .dbyt 4055 +000420r 1 0F D8 .dbyt 4056 +000422r 1 0F D9 .dbyt 4057 +000424r 1 0F DA .dbyt 4058 +000426r 1 0F DB .dbyt 4059 +000428r 1 0F DC .dbyt 4060 +00042Ar 1 0F DD .dbyt 4061 +00042Cr 1 0F DE .dbyt 4062 +00042Er 1 0F DF .dbyt 4063 +000430r 1 0F E0 .dbyt 4064 +000432r 1 0F E1 .dbyt 4065 +000434r 1 0F E2 .dbyt 4066 +000436r 1 0F E3 .dbyt 4067 +000438r 1 0F E4 .dbyt 4068 +00043Ar 1 0F E5 .dbyt 4069 +00043Cr 1 0F E6 .dbyt 4070 +00043Er 1 0F E7 .dbyt 4071 +000440r 1 0F E8 .dbyt 4072 +000442r 1 0F E9 .dbyt 4073 +000444r 1 0F EA .dbyt 4074 +000446r 1 0F EB .dbyt 4075 +000448r 1 0F EC .dbyt 4076 +00044Ar 1 0F ED .dbyt 4077 +00044Cr 1 0F EE .dbyt 4078 +00044Er 1 0F EF .dbyt 4079 +000450r 1 0F F0 .dbyt 4080 +000452r 1 0F F1 .dbyt 4081 +000454r 1 0F F2 .dbyt 4082 +000456r 1 0F F3 .dbyt 4083 +000458r 1 0F F4 .dbyt 4084 +00045Ar 1 0F F5 .dbyt 4085 +00045Cr 1 0F F6 .dbyt 4086 +00045Er 1 0F F7 .dbyt 4087 +000460r 1 0F F8 .dbyt 4088 +000462r 1 0F F9 .dbyt 4089 +000464r 1 0F FA .dbyt 4090 +000466r 1 0F FB .dbyt 4091 +000468r 1 0F FC .dbyt 4092 +00046Ar 1 0F FD .dbyt 4093 +00046Cr 1 0F FE .dbyt 4094 +00046Er 1 0F FF .dbyt 4095 +000470r 1 10 00 .dbyt 4096 +000472r 1 10 01 .dbyt 4097 +000474r 1 10 02 .dbyt 4098 +000476r 1 10 03 .dbyt 4099 +000478r 1 10 04 .dbyt 4100 +00047Ar 1 10 05 .dbyt 4101 +00047Cr 1 10 06 .dbyt 4102 +00047Er 1 10 07 .dbyt 4103 +000480r 1 10 08 .dbyt 4104 +000482r 1 7F F0 .dbyt 32752 +000484r 1 7F F1 .dbyt 32753 +000486r 1 7F F2 .dbyt 32754 +000488r 1 7F F3 .dbyt 32755 +00048Ar 1 7F F4 .dbyt 32756 +00048Cr 1 7F F5 .dbyt 32757 +00048Er 1 7F F6 .dbyt 32758 +000490r 1 7F F7 .dbyt 32759 +000492r 1 7F F8 .dbyt 32760 +000494r 1 7F F9 .dbyt 32761 +000496r 1 7F FA .dbyt 32762 +000498r 1 7F FB .dbyt 32763 +00049Ar 1 7F FC .dbyt 32764 +00049Cr 1 7F FD .dbyt 32765 +00049Er 1 7F FE .dbyt 32766 +0004A0r 1 7F FF .dbyt 32767 +0004A2r 1 80 00 .dbyt 32768 +0004A4r 1 80 01 .dbyt 32769 +0004A6r 1 80 02 .dbyt 32770 +0004A8r 1 80 03 .dbyt 32771 +0004AAr 1 80 04 .dbyt 32772 +0004ACr 1 80 05 .dbyt 32773 +0004AEr 1 80 06 .dbyt 32774 +0004B0r 1 80 07 .dbyt 32775 +0004B2r 1 80 08 .dbyt 32776 +0004B4r 1 80 09 .dbyt 32777 +0004B6r 1 80 0A .dbyt 32778 +0004B8r 1 80 0B .dbyt 32779 +0004BAr 1 9F E1 .dbyt 40929 +0004BCr 1 9F E2 .dbyt 40930 +0004BEr 1 9F E3 .dbyt 40931 +0004C0r 1 9F E4 .dbyt 40932 +0004C2r 1 9F E5 .dbyt 40933 +0004C4r 1 9F E6 .dbyt 40934 +0004C6r 1 9F E7 .dbyt 40935 +0004C8r 1 9F E8 .dbyt 40936 +0004CAr 1 9F E9 .dbyt 40937 +0004CCr 1 9F EA .dbyt 40938 +0004CEr 1 9F EB .dbyt 40939 +0004D0r 1 9F EC .dbyt 40940 +0004D2r 1 9F ED .dbyt 40941 +0004D4r 1 9F EE .dbyt 40942 +0004D6r 1 9F EF .dbyt 40943 +0004D8r 1 9F F0 .dbyt 40944 +0004DAr 1 9F F1 .dbyt 40945 +0004DCr 1 9F F2 .dbyt 40946 +0004DEr 1 9F F3 .dbyt 40947 +0004E0r 1 9F F4 .dbyt 40948 +0004E2r 1 9F F5 .dbyt 40949 +0004E4r 1 9F F6 .dbyt 40950 +0004E6r 1 9F F7 .dbyt 40951 +0004E8r 1 9F F8 .dbyt 40952 +0004EAr 1 9F F9 .dbyt 40953 +0004ECr 1 9F FA .dbyt 40954 +0004EEr 1 9F FB .dbyt 40955 +0004F0r 1 9F FC .dbyt 40956 +0004F2r 1 9F FD .dbyt 40957 +0004F4r 1 9F FE .dbyt 40958 +0004F6r 1 9F FF .dbyt 40959 +0004F8r 1 A0 00 .dbyt 40960 +0004FAr 1 A0 01 .dbyt 40961 +0004FCr 1 A0 02 .dbyt 40962 +0004FEr 1 A0 03 .dbyt 40963 +000500r 1 A0 04 .dbyt 40964 +000502r 1 A0 05 .dbyt 40965 +000504r 1 A0 06 .dbyt 40966 +000506r 1 A0 07 .dbyt 40967 +000508r 1 A0 08 .dbyt 40968 +00050Ar 1 A0 09 .dbyt 40969 +00050Cr 1 A0 0A .dbyt 40970 +00050Er 1 A0 0B .dbyt 40971 +000510r 1 A0 0C .dbyt 40972 +000512r 1 A0 0D .dbyt 40973 +000514r 1 A0 0E .dbyt 40974 +000516r 1 A0 0F .dbyt 40975 +000518r 1 AF E1 .dbyt 45025 +00051Ar 1 AF E2 .dbyt 45026 +00051Cr 1 AF E3 .dbyt 45027 +00051Er 1 AF E4 .dbyt 45028 +000520r 1 AF E5 .dbyt 45029 +000522r 1 AF E6 .dbyt 45030 +000524r 1 AF E7 .dbyt 45031 +000526r 1 AF E8 .dbyt 45032 +000528r 1 AF E9 .dbyt 45033 +00052Ar 1 AF EA .dbyt 45034 +00052Cr 1 AF EB .dbyt 45035 +00052Er 1 AF EC .dbyt 45036 +000530r 1 AF ED .dbyt 45037 +000532r 1 AF EE .dbyt 45038 +000534r 1 AF EF .dbyt 45039 +000536r 1 AF F0 .dbyt 45040 +000538r 1 AF F1 .dbyt 45041 +00053Ar 1 AF F2 .dbyt 45042 +00053Cr 1 AF F3 .dbyt 45043 +00053Er 1 AF F4 .dbyt 45044 +000540r 1 AF F5 .dbyt 45045 +000542r 1 AF F6 .dbyt 45046 +000544r 1 AF F7 .dbyt 45047 +000546r 1 AF F8 .dbyt 45048 +000548r 1 AF F9 .dbyt 45049 +00054Ar 1 AF FA .dbyt 45050 +00054Cr 1 AF FB .dbyt 45051 +00054Er 1 AF FC .dbyt 45052 +000550r 1 AF FD .dbyt 45053 +000552r 1 AF FE .dbyt 45054 +000554r 1 AF FF .dbyt 45055 +000556r 1 B0 00 .dbyt 45056 +000558r 1 B0 01 .dbyt 45057 +00055Ar 1 B0 02 .dbyt 45058 +00055Cr 1 B0 03 .dbyt 45059 +00055Er 1 B0 04 .dbyt 45060 +000560r 1 B0 05 .dbyt 45061 +000562r 1 B0 06 .dbyt 45062 +000564r 1 B0 07 .dbyt 45063 +000566r 1 B0 08 .dbyt 45064 +000568r 1 B0 09 .dbyt 45065 +00056Ar 1 B0 0A .dbyt 45066 +00056Cr 1 B0 0B .dbyt 45067 +00056Er 1 B0 0C .dbyt 45068 +000570r 1 B0 0D .dbyt 45069 +000572r 1 B0 0E .dbyt 45070 +000574r 1 B0 0F .dbyt 45071 +000576r 1 BF E1 .dbyt 49121 +000578r 1 BF E2 .dbyt 49122 +00057Ar 1 BF E3 .dbyt 49123 +00057Cr 1 BF E4 .dbyt 49124 +00057Er 1 BF E5 .dbyt 49125 +000580r 1 BF E6 .dbyt 49126 +000582r 1 BF E7 .dbyt 49127 +000584r 1 BF E8 .dbyt 49128 +000586r 1 BF E9 .dbyt 49129 +000588r 1 BF EA .dbyt 49130 +00058Ar 1 BF EB .dbyt 49131 +00058Cr 1 BF EC .dbyt 49132 +00058Er 1 BF ED .dbyt 49133 +000590r 1 BF EE .dbyt 49134 +000592r 1 BF EF .dbyt 49135 +000594r 1 BF F0 .dbyt 49136 +000596r 1 BF F1 .dbyt 49137 +000598r 1 BF F2 .dbyt 49138 +00059Ar 1 BF F3 .dbyt 49139 +00059Cr 1 BF F4 .dbyt 49140 +00059Er 1 BF F5 .dbyt 49141 +0005A0r 1 BF F6 .dbyt 49142 +0005A2r 1 BF F7 .dbyt 49143 +0005A4r 1 BF F8 .dbyt 49144 +0005A6r 1 BF F9 .dbyt 49145 +0005A8r 1 BF FA .dbyt 49146 +0005AAr 1 BF FB .dbyt 49147 +0005ACr 1 BF FC .dbyt 49148 +0005AEr 1 BF FD .dbyt 49149 +0005B0r 1 BF FE .dbyt 49150 +0005B2r 1 BF FF .dbyt 49151 +0005B4r 1 C0 00 .dbyt 49152 +0005B6r 1 C0 01 .dbyt 49153 +0005B8r 1 C0 02 .dbyt 49154 +0005BAr 1 C0 03 .dbyt 49155 +0005BCr 1 C0 04 .dbyt 49156 +0005BEr 1 C0 05 .dbyt 49157 +0005C0r 1 C0 06 .dbyt 49158 +0005C2r 1 C0 07 .dbyt 49159 +0005C4r 1 C0 08 .dbyt 49160 +0005C6r 1 C0 09 .dbyt 49161 +0005C8r 1 C0 0A .dbyt 49162 +0005CAr 1 C0 0B .dbyt 49163 +0005CCr 1 C0 0C .dbyt 49164 +0005CEr 1 C0 0D .dbyt 49165 +0005D0r 1 C0 0E .dbyt 49166 +0005D2r 1 C0 0F .dbyt 49167 +0005D4r 1 CF E1 .dbyt 53217 +0005D6r 1 CF E2 .dbyt 53218 +0005D8r 1 CF E3 .dbyt 53219 +0005DAr 1 CF E4 .dbyt 53220 +0005DCr 1 CF E5 .dbyt 53221 +0005DEr 1 CF E6 .dbyt 53222 +0005E0r 1 CF E7 .dbyt 53223 +0005E2r 1 CF E8 .dbyt 53224 +0005E4r 1 CF E9 .dbyt 53225 +0005E6r 1 CF EA .dbyt 53226 +0005E8r 1 CF EB .dbyt 53227 +0005EAr 1 CF EC .dbyt 53228 +0005ECr 1 CF ED .dbyt 53229 +0005EEr 1 CF EE .dbyt 53230 +0005F0r 1 CF EF .dbyt 53231 +0005F2r 1 CF F0 .dbyt 53232 +0005F4r 1 CF F1 .dbyt 53233 +0005F6r 1 CF F2 .dbyt 53234 +0005F8r 1 CF F3 .dbyt 53235 +0005FAr 1 CF F4 .dbyt 53236 +0005FCr 1 CF F5 .dbyt 53237 +0005FEr 1 CF F6 .dbyt 53238 +000600r 1 CF F7 .dbyt 53239 +000602r 1 CF F8 .dbyt 53240 +000604r 1 CF F9 .dbyt 53241 +000606r 1 CF FA .dbyt 53242 +000608r 1 CF FB .dbyt 53243 +00060Ar 1 CF FC .dbyt 53244 +00060Cr 1 CF FD .dbyt 53245 +00060Er 1 CF FE .dbyt 53246 +000610r 1 CF FF .dbyt 53247 +000612r 1 D0 00 .dbyt 53248 +000614r 1 D0 01 .dbyt 53249 +000616r 1 D0 02 .dbyt 53250 +000618r 1 D0 03 .dbyt 53251 +00061Ar 1 D0 04 .dbyt 53252 +00061Cr 1 D0 05 .dbyt 53253 +00061Er 1 D0 06 .dbyt 53254 +000620r 1 D0 07 .dbyt 53255 +000622r 1 D0 08 .dbyt 53256 +000624r 1 D0 09 .dbyt 53257 +000626r 1 D0 0A .dbyt 53258 +000628r 1 D0 0B .dbyt 53259 +00062Ar 1 D0 0C .dbyt 53260 +00062Cr 1 D0 0D .dbyt 53261 +00062Er 1 D0 0E .dbyt 53262 +000630r 1 D0 0F .dbyt 53263 +000632r 1 DF E1 .dbyt 57313 +000634r 1 DF E2 .dbyt 57314 +000636r 1 DF E3 .dbyt 57315 +000638r 1 DF E4 .dbyt 57316 +00063Ar 1 DF E5 .dbyt 57317 +00063Cr 1 DF E6 .dbyt 57318 +00063Er 1 DF E7 .dbyt 57319 +000640r 1 DF E8 .dbyt 57320 +000642r 1 DF E9 .dbyt 57321 +000644r 1 DF EA .dbyt 57322 +000646r 1 DF EB .dbyt 57323 +000648r 1 DF EC .dbyt 57324 +00064Ar 1 DF ED .dbyt 57325 +00064Cr 1 DF EE .dbyt 57326 +00064Er 1 DF EF .dbyt 57327 +000650r 1 DF F0 .dbyt 57328 +000652r 1 DF F1 .dbyt 57329 +000654r 1 DF F2 .dbyt 57330 +000656r 1 DF F3 .dbyt 57331 +000658r 1 DF F4 .dbyt 57332 +00065Ar 1 DF F5 .dbyt 57333 +00065Cr 1 DF F6 .dbyt 57334 +00065Er 1 DF F7 .dbyt 57335 +000660r 1 DF F8 .dbyt 57336 +000662r 1 DF F9 .dbyt 57337 +000664r 1 DF FA .dbyt 57338 +000666r 1 DF FB .dbyt 57339 +000668r 1 DF FC .dbyt 57340 +00066Ar 1 DF FD .dbyt 57341 +00066Cr 1 DF FE .dbyt 57342 +00066Er 1 DF FF .dbyt 57343 +000670r 1 E0 00 .dbyt 57344 +000672r 1 E0 01 .dbyt 57345 +000674r 1 E0 02 .dbyt 57346 +000676r 1 E0 03 .dbyt 57347 +000678r 1 E0 04 .dbyt 57348 +00067Ar 1 E0 05 .dbyt 57349 +00067Cr 1 E0 06 .dbyt 57350 +00067Er 1 E0 07 .dbyt 57351 +000680r 1 E0 08 .dbyt 57352 +000682r 1 E0 09 .dbyt 57353 +000684r 1 E0 0A .dbyt 57354 +000686r 1 E0 0B .dbyt 57355 +000688r 1 E0 0C .dbyt 57356 +00068Ar 1 E0 0D .dbyt 57357 +00068Cr 1 E0 0E .dbyt 57358 +00068Er 1 E0 0F .dbyt 57359 +000690r 1 EF E1 .dbyt 61409 +000692r 1 EF E2 .dbyt 61410 +000694r 1 EF E3 .dbyt 61411 +000696r 1 EF E4 .dbyt 61412 +000698r 1 EF E5 .dbyt 61413 +00069Ar 1 EF E6 .dbyt 61414 +00069Cr 1 EF E7 .dbyt 61415 +00069Er 1 EF E8 .dbyt 61416 +0006A0r 1 EF E9 .dbyt 61417 +0006A2r 1 EF EA .dbyt 61418 +0006A4r 1 EF EB .dbyt 61419 +0006A6r 1 EF EC .dbyt 61420 +0006A8r 1 EF ED .dbyt 61421 +0006AAr 1 EF EE .dbyt 61422 +0006ACr 1 EF EF .dbyt 61423 +0006AEr 1 EF F0 .dbyt 61424 +0006B0r 1 EF F1 .dbyt 61425 +0006B2r 1 EF F2 .dbyt 61426 +0006B4r 1 EF F3 .dbyt 61427 +0006B6r 1 EF F4 .dbyt 61428 +0006B8r 1 EF F5 .dbyt 61429 +0006BAr 1 EF F6 .dbyt 61430 +0006BCr 1 EF F7 .dbyt 61431 +0006BEr 1 EF F8 .dbyt 61432 +0006C0r 1 EF F9 .dbyt 61433 +0006C2r 1 EF FA .dbyt 61434 +0006C4r 1 EF FB .dbyt 61435 +0006C6r 1 EF FC .dbyt 61436 +0006C8r 1 EF FD .dbyt 61437 +0006CAr 1 EF FE .dbyt 61438 +0006CCr 1 EF FF .dbyt 61439 +0006CEr 1 F0 00 .dbyt 61440 +0006D0r 1 F0 01 .dbyt 61441 +0006D2r 1 F0 02 .dbyt 61442 +0006D4r 1 F0 03 .dbyt 61443 +0006D6r 1 F0 04 .dbyt 61444 +0006D8r 1 F0 05 .dbyt 61445 +0006DAr 1 F0 06 .dbyt 61446 +0006DCr 1 F0 07 .dbyt 61447 +0006DEr 1 F0 08 .dbyt 61448 +0006E0r 1 F0 09 .dbyt 61449 +0006E2r 1 F0 0A .dbyt 61450 +0006E4r 1 F0 0B .dbyt 61451 +0006E6r 1 F0 0C .dbyt 61452 +0006E8r 1 F0 0D .dbyt 61453 +0006EAr 1 F0 0E .dbyt 61454 +0006ECr 1 F0 0F .dbyt 61455 +0006EEr 1 FF E1 .dbyt 65505 +0006F0r 1 FF E2 .dbyt 65506 +0006F2r 1 FF E3 .dbyt 65507 +0006F4r 1 FF E4 .dbyt 65508 +0006F6r 1 FF E5 .dbyt 65509 +0006F8r 1 FF E6 .dbyt 65510 +0006FAr 1 FF E7 .dbyt 65511 +0006FCr 1 FF E8 .dbyt 65512 +0006FEr 1 FF E9 .dbyt 65513 +000700r 1 FF EA .dbyt 65514 +000702r 1 FF EB .dbyt 65515 +000704r 1 FF EC .dbyt 65516 +000706r 1 FF ED .dbyt 65517 +000708r 1 FF EE .dbyt 65518 +00070Ar 1 FF EF .dbyt 65519 +00070Cr 1 FF F0 .dbyt 65520 +00070Er 1 FF F1 .dbyt 65521 +000710r 1 FF F2 .dbyt 65522 +000712r 1 FF F3 .dbyt 65523 +000714r 1 FF F4 .dbyt 65524 +000716r 1 FF F5 .dbyt 65525 +000718r 1 FF F6 .dbyt 65526 +00071Ar 1 FF F7 .dbyt 65527 +00071Cr 1 FF F8 .dbyt 65528 +00071Er 1 FF F9 .dbyt 65529 +000720r 1 FF FA .dbyt 65530 +000722r 1 FF FB .dbyt 65531 +000724r 1 FF FC .dbyt 65532 +000726r 1 FF FD .dbyt 65533 +000728r 1 FF FE .dbyt 65534 +00072Ar 1 FF FF .dbyt 65535 +00072Cr 1 +00072Cr 1 ; hex values +00072Cr 1 00 00 .dbyt $0 +00072Er 1 00 01 .dbyt $1 +000730r 1 00 02 .dbyt $2 +000732r 1 00 03 .dbyt $3 +000734r 1 00 04 .dbyt $4 +000736r 1 00 05 .dbyt $5 +000738r 1 00 06 .dbyt $6 +00073Ar 1 00 07 .dbyt $7 +00073Cr 1 00 08 .dbyt $8 +00073Er 1 00 09 .dbyt $9 +000740r 1 00 0A .dbyt $a +000742r 1 00 0B .dbyt $b +000744r 1 00 0C .dbyt $c +000746r 1 00 0D .dbyt $d +000748r 1 00 0E .dbyt $e +00074Ar 1 00 0F .dbyt $f +00074Cr 1 00 10 .dbyt $10 +00074Er 1 00 11 .dbyt $11 +000750r 1 00 12 .dbyt $12 +000752r 1 00 13 .dbyt $13 +000754r 1 00 70 .dbyt $70 +000756r 1 00 71 .dbyt $71 +000758r 1 00 72 .dbyt $72 +00075Ar 1 00 73 .dbyt $73 +00075Cr 1 00 74 .dbyt $74 +00075Er 1 00 75 .dbyt $75 +000760r 1 00 76 .dbyt $76 +000762r 1 00 77 .dbyt $77 +000764r 1 00 78 .dbyt $78 +000766r 1 00 79 .dbyt $79 +000768r 1 00 7A .dbyt $7a +00076Ar 1 00 7B .dbyt $7b +00076Cr 1 00 7C .dbyt $7c +00076Er 1 00 7D .dbyt $7d +000770r 1 00 7E .dbyt $7e +000772r 1 00 7F .dbyt $7f +000774r 1 00 80 .dbyt $80 +000776r 1 00 81 .dbyt $81 +000778r 1 00 82 .dbyt $82 +00077Ar 1 00 83 .dbyt $83 +00077Cr 1 00 84 .dbyt $84 +00077Er 1 00 85 .dbyt $85 +000780r 1 00 86 .dbyt $86 +000782r 1 00 F0 .dbyt $f0 +000784r 1 00 F1 .dbyt $f1 +000786r 1 00 F2 .dbyt $f2 +000788r 1 00 F3 .dbyt $f3 +00078Ar 1 00 F4 .dbyt $f4 +00078Cr 1 00 F5 .dbyt $f5 +00078Er 1 00 F6 .dbyt $f6 +000790r 1 00 F7 .dbyt $f7 +000792r 1 00 F8 .dbyt $f8 +000794r 1 00 F9 .dbyt $f9 +000796r 1 00 FA .dbyt $fa +000798r 1 00 FB .dbyt $fb +00079Ar 1 00 FC .dbyt $fc +00079Cr 1 00 FD .dbyt $fd +00079Er 1 00 FE .dbyt $fe +0007A0r 1 00 FF .dbyt $ff +0007A2r 1 01 00 .dbyt $100 +0007A4r 1 01 01 .dbyt $101 +0007A6r 1 01 02 .dbyt $102 +0007A8r 1 01 03 .dbyt $103 +0007AAr 1 0F D2 .dbyt $fd2 +0007ACr 1 0F D3 .dbyt $fd3 +0007AEr 1 0F D4 .dbyt $fd4 +0007B0r 1 0F D5 .dbyt $fd5 +0007B2r 1 0F D6 .dbyt $fd6 +0007B4r 1 0F D7 .dbyt $fd7 +0007B6r 1 0F D8 .dbyt $fd8 +0007B8r 1 0F D9 .dbyt $fd9 +0007BAr 1 0F DA .dbyt $fda +0007BCr 1 0F DB .dbyt $fdb +0007BEr 1 0F DC .dbyt $fdc +0007C0r 1 0F DD .dbyt $fdd +0007C2r 1 0F DE .dbyt $fde +0007C4r 1 0F DF .dbyt $fdf +0007C6r 1 0F E0 .dbyt $fe0 +0007C8r 1 0F E1 .dbyt $fe1 +0007CAr 1 0F E2 .dbyt $fe2 +0007CCr 1 0F E3 .dbyt $fe3 +0007CEr 1 0F E4 .dbyt $fe4 +0007D0r 1 0F E5 .dbyt $fe5 +0007D2r 1 0F E6 .dbyt $fe6 +0007D4r 1 0F E7 .dbyt $fe7 +0007D6r 1 0F E8 .dbyt $fe8 +0007D8r 1 0F E9 .dbyt $fe9 +0007DAr 1 0F EA .dbyt $fea +0007DCr 1 0F EB .dbyt $feb +0007DEr 1 0F EC .dbyt $fec +0007E0r 1 0F ED .dbyt $fed +0007E2r 1 0F EE .dbyt $fee +0007E4r 1 0F EF .dbyt $fef +0007E6r 1 0F F0 .dbyt $ff0 +0007E8r 1 0F F1 .dbyt $ff1 +0007EAr 1 0F F2 .dbyt $ff2 +0007ECr 1 0F F3 .dbyt $ff3 +0007EEr 1 0F F4 .dbyt $ff4 +0007F0r 1 0F F5 .dbyt $ff5 +0007F2r 1 0F F6 .dbyt $ff6 +0007F4r 1 0F F7 .dbyt $ff7 +0007F6r 1 0F F8 .dbyt $ff8 +0007F8r 1 0F F9 .dbyt $ff9 +0007FAr 1 0F FA .dbyt $ffa +0007FCr 1 0F FB .dbyt $ffb +0007FEr 1 0F FC .dbyt $ffc +000800r 1 0F FD .dbyt $ffd +000802r 1 0F FE .dbyt $ffe +000804r 1 0F FF .dbyt $fff +000806r 1 10 00 .dbyt $1000 +000808r 1 10 01 .dbyt $1001 +00080Ar 1 10 02 .dbyt $1002 +00080Cr 1 10 03 .dbyt $1003 +00080Er 1 10 04 .dbyt $1004 +000810r 1 10 05 .dbyt $1005 +000812r 1 10 06 .dbyt $1006 +000814r 1 10 07 .dbyt $1007 +000816r 1 10 08 .dbyt $1008 +000818r 1 7F F0 .dbyt $7ff0 +00081Ar 1 7F F1 .dbyt $7ff1 +00081Cr 1 7F F2 .dbyt $7ff2 +00081Er 1 7F F3 .dbyt $7ff3 +000820r 1 7F F4 .dbyt $7ff4 +000822r 1 7F F5 .dbyt $7ff5 +000824r 1 7F F6 .dbyt $7ff6 +000826r 1 7F F7 .dbyt $7ff7 +000828r 1 7F F8 .dbyt $7ff8 +00082Ar 1 7F F9 .dbyt $7ff9 +00082Cr 1 7F FA .dbyt $7ffa +00082Er 1 7F FB .dbyt $7ffb +000830r 1 7F FC .dbyt $7ffc +000832r 1 7F FD .dbyt $7ffd +000834r 1 7F FE .dbyt $7ffe +000836r 1 7F FF .dbyt $7fff +000838r 1 80 00 .dbyt $8000 +00083Ar 1 80 01 .dbyt $8001 +00083Cr 1 80 02 .dbyt $8002 +00083Er 1 80 03 .dbyt $8003 +000840r 1 80 04 .dbyt $8004 +000842r 1 80 05 .dbyt $8005 +000844r 1 80 06 .dbyt $8006 +000846r 1 80 07 .dbyt $8007 +000848r 1 80 08 .dbyt $8008 +00084Ar 1 80 09 .dbyt $8009 +00084Cr 1 80 0A .dbyt $800a +00084Er 1 80 0B .dbyt $800b +000850r 1 9F E1 .dbyt $9fe1 +000852r 1 9F E2 .dbyt $9fe2 +000854r 1 9F E3 .dbyt $9fe3 +000856r 1 9F E4 .dbyt $9fe4 +000858r 1 9F E5 .dbyt $9fe5 +00085Ar 1 9F E6 .dbyt $9fe6 +00085Cr 1 9F E7 .dbyt $9fe7 +00085Er 1 9F E8 .dbyt $9fe8 +000860r 1 9F E9 .dbyt $9fe9 +000862r 1 9F EA .dbyt $9fea +000864r 1 9F EB .dbyt $9feb +000866r 1 9F EC .dbyt $9fec +000868r 1 9F ED .dbyt $9fed +00086Ar 1 9F EE .dbyt $9fee +00086Cr 1 9F EF .dbyt $9fef +00086Er 1 9F F0 .dbyt $9ff0 +000870r 1 9F F1 .dbyt $9ff1 +000872r 1 9F F2 .dbyt $9ff2 +000874r 1 9F F3 .dbyt $9ff3 +000876r 1 9F F4 .dbyt $9ff4 +000878r 1 9F F5 .dbyt $9ff5 +00087Ar 1 9F F6 .dbyt $9ff6 +00087Cr 1 9F F7 .dbyt $9ff7 +00087Er 1 9F F8 .dbyt $9ff8 +000880r 1 9F F9 .dbyt $9ff9 +000882r 1 9F FA .dbyt $9ffa +000884r 1 9F FB .dbyt $9ffb +000886r 1 9F FC .dbyt $9ffc +000888r 1 9F FD .dbyt $9ffd +00088Ar 1 9F FE .dbyt $9ffe +00088Cr 1 9F FF .dbyt $9fff +00088Er 1 A0 00 .dbyt $a000 +000890r 1 A0 01 .dbyt $a001 +000892r 1 A0 02 .dbyt $a002 +000894r 1 A0 03 .dbyt $a003 +000896r 1 A0 04 .dbyt $a004 +000898r 1 A0 05 .dbyt $a005 +00089Ar 1 A0 06 .dbyt $a006 +00089Cr 1 A0 07 .dbyt $a007 +00089Er 1 A0 08 .dbyt $a008 +0008A0r 1 A0 09 .dbyt $a009 +0008A2r 1 A0 0A .dbyt $a00a +0008A4r 1 A0 0B .dbyt $a00b +0008A6r 1 A0 0C .dbyt $a00c +0008A8r 1 A0 0D .dbyt $a00d +0008AAr 1 A0 0E .dbyt $a00e +0008ACr 1 A0 0F .dbyt $a00f +0008AEr 1 AF E1 .dbyt $afe1 +0008B0r 1 AF E2 .dbyt $afe2 +0008B2r 1 AF E3 .dbyt $afe3 +0008B4r 1 AF E4 .dbyt $afe4 +0008B6r 1 AF E5 .dbyt $afe5 +0008B8r 1 AF E6 .dbyt $afe6 +0008BAr 1 AF E7 .dbyt $afe7 +0008BCr 1 AF E8 .dbyt $afe8 +0008BEr 1 AF E9 .dbyt $afe9 +0008C0r 1 AF EA .dbyt $afea +0008C2r 1 AF EB .dbyt $afeb +0008C4r 1 AF EC .dbyt $afec +0008C6r 1 AF ED .dbyt $afed +0008C8r 1 AF EE .dbyt $afee +0008CAr 1 AF EF .dbyt $afef +0008CCr 1 AF F0 .dbyt $aff0 +0008CEr 1 AF F1 .dbyt $aff1 +0008D0r 1 AF F2 .dbyt $aff2 +0008D2r 1 AF F3 .dbyt $aff3 +0008D4r 1 AF F4 .dbyt $aff4 +0008D6r 1 AF F5 .dbyt $aff5 +0008D8r 1 AF F6 .dbyt $aff6 +0008DAr 1 AF F7 .dbyt $aff7 +0008DCr 1 AF F8 .dbyt $aff8 +0008DEr 1 AF F9 .dbyt $aff9 +0008E0r 1 AF FA .dbyt $affa +0008E2r 1 AF FB .dbyt $affb +0008E4r 1 AF FC .dbyt $affc +0008E6r 1 AF FD .dbyt $affd +0008E8r 1 AF FE .dbyt $affe +0008EAr 1 AF FF .dbyt $afff +0008ECr 1 B0 00 .dbyt $b000 +0008EEr 1 B0 01 .dbyt $b001 +0008F0r 1 B0 02 .dbyt $b002 +0008F2r 1 B0 03 .dbyt $b003 +0008F4r 1 B0 04 .dbyt $b004 +0008F6r 1 B0 05 .dbyt $b005 +0008F8r 1 B0 06 .dbyt $b006 +0008FAr 1 B0 07 .dbyt $b007 +0008FCr 1 B0 08 .dbyt $b008 +0008FEr 1 B0 09 .dbyt $b009 +000900r 1 B0 0A .dbyt $b00a +000902r 1 B0 0B .dbyt $b00b +000904r 1 B0 0C .dbyt $b00c +000906r 1 B0 0D .dbyt $b00d +000908r 1 B0 0E .dbyt $b00e +00090Ar 1 B0 0F .dbyt $b00f +00090Cr 1 BF E1 .dbyt $bfe1 +00090Er 1 BF E2 .dbyt $bfe2 +000910r 1 BF E3 .dbyt $bfe3 +000912r 1 BF E4 .dbyt $bfe4 +000914r 1 BF E5 .dbyt $bfe5 +000916r 1 BF E6 .dbyt $bfe6 +000918r 1 BF E7 .dbyt $bfe7 +00091Ar 1 BF E8 .dbyt $bfe8 +00091Cr 1 BF E9 .dbyt $bfe9 +00091Er 1 BF EA .dbyt $bfea +000920r 1 BF EB .dbyt $bfeb +000922r 1 BF EC .dbyt $bfec +000924r 1 BF ED .dbyt $bfed +000926r 1 BF EE .dbyt $bfee +000928r 1 BF EF .dbyt $bfef +00092Ar 1 BF F0 .dbyt $bff0 +00092Cr 1 BF F1 .dbyt $bff1 +00092Er 1 BF F2 .dbyt $bff2 +000930r 1 BF F3 .dbyt $bff3 +000932r 1 BF F4 .dbyt $bff4 +000934r 1 BF F5 .dbyt $bff5 +000936r 1 BF F6 .dbyt $bff6 +000938r 1 BF F7 .dbyt $bff7 +00093Ar 1 BF F8 .dbyt $bff8 +00093Cr 1 BF F9 .dbyt $bff9 +00093Er 1 BF FA .dbyt $bffa +000940r 1 BF FB .dbyt $bffb +000942r 1 BF FC .dbyt $bffc +000944r 1 BF FD .dbyt $bffd +000946r 1 BF FE .dbyt $bffe +000948r 1 BF FF .dbyt $bfff +00094Ar 1 C0 00 .dbyt $c000 +00094Cr 1 C0 01 .dbyt $c001 +00094Er 1 C0 02 .dbyt $c002 +000950r 1 C0 03 .dbyt $c003 +000952r 1 C0 04 .dbyt $c004 +000954r 1 C0 05 .dbyt $c005 +000956r 1 C0 06 .dbyt $c006 +000958r 1 C0 07 .dbyt $c007 +00095Ar 1 C0 08 .dbyt $c008 +00095Cr 1 C0 09 .dbyt $c009 +00095Er 1 C0 0A .dbyt $c00a +000960r 1 C0 0B .dbyt $c00b +000962r 1 C0 0C .dbyt $c00c +000964r 1 C0 0D .dbyt $c00d +000966r 1 C0 0E .dbyt $c00e +000968r 1 C0 0F .dbyt $c00f +00096Ar 1 CF E1 .dbyt $cfe1 +00096Cr 1 CF E2 .dbyt $cfe2 +00096Er 1 CF E3 .dbyt $cfe3 +000970r 1 CF E4 .dbyt $cfe4 +000972r 1 CF E5 .dbyt $cfe5 +000974r 1 CF E6 .dbyt $cfe6 +000976r 1 CF E7 .dbyt $cfe7 +000978r 1 CF E8 .dbyt $cfe8 +00097Ar 1 CF E9 .dbyt $cfe9 +00097Cr 1 CF EA .dbyt $cfea +00097Er 1 CF EB .dbyt $cfeb +000980r 1 CF EC .dbyt $cfec +000982r 1 CF ED .dbyt $cfed +000984r 1 CF EE .dbyt $cfee +000986r 1 CF EF .dbyt $cfef +000988r 1 CF F0 .dbyt $cff0 +00098Ar 1 CF F1 .dbyt $cff1 +00098Cr 1 CF F2 .dbyt $cff2 +00098Er 1 CF F3 .dbyt $cff3 +000990r 1 CF F4 .dbyt $cff4 +000992r 1 CF F5 .dbyt $cff5 +000994r 1 CF F6 .dbyt $cff6 +000996r 1 CF F7 .dbyt $cff7 +000998r 1 CF F8 .dbyt $cff8 +00099Ar 1 CF F9 .dbyt $cff9 +00099Cr 1 CF FA .dbyt $cffa +00099Er 1 CF FB .dbyt $cffb +0009A0r 1 CF FC .dbyt $cffc +0009A2r 1 CF FD .dbyt $cffd +0009A4r 1 CF FE .dbyt $cffe +0009A6r 1 CF FF .dbyt $cfff +0009A8r 1 D0 00 .dbyt $d000 +0009AAr 1 D0 01 .dbyt $d001 +0009ACr 1 D0 02 .dbyt $d002 +0009AEr 1 D0 03 .dbyt $d003 +0009B0r 1 D0 04 .dbyt $d004 +0009B2r 1 D0 05 .dbyt $d005 +0009B4r 1 D0 06 .dbyt $d006 +0009B6r 1 D0 07 .dbyt $d007 +0009B8r 1 D0 08 .dbyt $d008 +0009BAr 1 D0 09 .dbyt $d009 +0009BCr 1 D0 0A .dbyt $d00a +0009BEr 1 D0 0B .dbyt $d00b +0009C0r 1 D0 0C .dbyt $d00c +0009C2r 1 D0 0D .dbyt $d00d +0009C4r 1 D0 0E .dbyt $d00e +0009C6r 1 D0 0F .dbyt $d00f +0009C8r 1 DF E1 .dbyt $dfe1 +0009CAr 1 DF E2 .dbyt $dfe2 +0009CCr 1 DF E3 .dbyt $dfe3 +0009CEr 1 DF E4 .dbyt $dfe4 +0009D0r 1 DF E5 .dbyt $dfe5 +0009D2r 1 DF E6 .dbyt $dfe6 +0009D4r 1 DF E7 .dbyt $dfe7 +0009D6r 1 DF E8 .dbyt $dfe8 +0009D8r 1 DF E9 .dbyt $dfe9 +0009DAr 1 DF EA .dbyt $dfea +0009DCr 1 DF EB .dbyt $dfeb +0009DEr 1 DF EC .dbyt $dfec +0009E0r 1 DF ED .dbyt $dfed +0009E2r 1 DF EE .dbyt $dfee +0009E4r 1 DF EF .dbyt $dfef +0009E6r 1 DF F0 .dbyt $dff0 +0009E8r 1 DF F1 .dbyt $dff1 +0009EAr 1 DF F2 .dbyt $dff2 +0009ECr 1 DF F3 .dbyt $dff3 +0009EEr 1 DF F4 .dbyt $dff4 +0009F0r 1 DF F5 .dbyt $dff5 +0009F2r 1 DF F6 .dbyt $dff6 +0009F4r 1 DF F7 .dbyt $dff7 +0009F6r 1 DF F8 .dbyt $dff8 +0009F8r 1 DF F9 .dbyt $dff9 +0009FAr 1 DF FA .dbyt $dffa +0009FCr 1 DF FB .dbyt $dffb +0009FEr 1 DF FC .dbyt $dffc +000A00r 1 DF FD .dbyt $dffd +000A02r 1 DF FE .dbyt $dffe +000A04r 1 DF FF .dbyt $dfff +000A06r 1 E0 00 .dbyt $e000 +000A08r 1 E0 01 .dbyt $e001 +000A0Ar 1 E0 02 .dbyt $e002 +000A0Cr 1 E0 03 .dbyt $e003 +000A0Er 1 E0 04 .dbyt $e004 +000A10r 1 E0 05 .dbyt $e005 +000A12r 1 E0 06 .dbyt $e006 +000A14r 1 E0 07 .dbyt $e007 +000A16r 1 E0 08 .dbyt $e008 +000A18r 1 E0 09 .dbyt $e009 +000A1Ar 1 E0 0A .dbyt $e00a +000A1Cr 1 E0 0B .dbyt $e00b +000A1Er 1 E0 0C .dbyt $e00c +000A20r 1 E0 0D .dbyt $e00d +000A22r 1 E0 0E .dbyt $e00e +000A24r 1 E0 0F .dbyt $e00f +000A26r 1 EF E1 .dbyt $efe1 +000A28r 1 EF E2 .dbyt $efe2 +000A2Ar 1 EF E3 .dbyt $efe3 +000A2Cr 1 EF E4 .dbyt $efe4 +000A2Er 1 EF E5 .dbyt $efe5 +000A30r 1 EF E6 .dbyt $efe6 +000A32r 1 EF E7 .dbyt $efe7 +000A34r 1 EF E8 .dbyt $efe8 +000A36r 1 EF E9 .dbyt $efe9 +000A38r 1 EF EA .dbyt $efea +000A3Ar 1 EF EB .dbyt $efeb +000A3Cr 1 EF EC .dbyt $efec +000A3Er 1 EF ED .dbyt $efed +000A40r 1 EF EE .dbyt $efee +000A42r 1 EF EF .dbyt $efef +000A44r 1 EF F0 .dbyt $eff0 +000A46r 1 EF F1 .dbyt $eff1 +000A48r 1 EF F2 .dbyt $eff2 +000A4Ar 1 EF F3 .dbyt $eff3 +000A4Cr 1 EF F4 .dbyt $eff4 +000A4Er 1 EF F5 .dbyt $eff5 +000A50r 1 EF F6 .dbyt $eff6 +000A52r 1 EF F7 .dbyt $eff7 +000A54r 1 EF F8 .dbyt $eff8 +000A56r 1 EF F9 .dbyt $eff9 +000A58r 1 EF FA .dbyt $effa +000A5Ar 1 EF FB .dbyt $effb +000A5Cr 1 EF FC .dbyt $effc +000A5Er 1 EF FD .dbyt $effd +000A60r 1 EF FE .dbyt $effe +000A62r 1 EF FF .dbyt $efff +000A64r 1 F0 00 .dbyt $f000 +000A66r 1 F0 01 .dbyt $f001 +000A68r 1 F0 02 .dbyt $f002 +000A6Ar 1 F0 03 .dbyt $f003 +000A6Cr 1 F0 04 .dbyt $f004 +000A6Er 1 F0 05 .dbyt $f005 +000A70r 1 F0 06 .dbyt $f006 +000A72r 1 F0 07 .dbyt $f007 +000A74r 1 F0 08 .dbyt $f008 +000A76r 1 F0 09 .dbyt $f009 +000A78r 1 F0 0A .dbyt $f00a +000A7Ar 1 F0 0B .dbyt $f00b +000A7Cr 1 F0 0C .dbyt $f00c +000A7Er 1 F0 0D .dbyt $f00d +000A80r 1 F0 0E .dbyt $f00e +000A82r 1 F0 0F .dbyt $f00f +000A84r 1 FF E1 .dbyt $ffe1 +000A86r 1 FF E2 .dbyt $ffe2 +000A88r 1 FF E3 .dbyt $ffe3 +000A8Ar 1 FF E4 .dbyt $ffe4 +000A8Cr 1 FF E5 .dbyt $ffe5 +000A8Er 1 FF E6 .dbyt $ffe6 +000A90r 1 FF E7 .dbyt $ffe7 +000A92r 1 FF E8 .dbyt $ffe8 +000A94r 1 FF E9 .dbyt $ffe9 +000A96r 1 FF EA .dbyt $ffea +000A98r 1 FF EB .dbyt $ffeb +000A9Ar 1 FF EC .dbyt $ffec +000A9Cr 1 FF ED .dbyt $ffed +000A9Er 1 FF EE .dbyt $ffee +000AA0r 1 FF EF .dbyt $ffef +000AA2r 1 FF F0 .dbyt $fff0 +000AA4r 1 FF F1 .dbyt $fff1 +000AA6r 1 FF F2 .dbyt $fff2 +000AA8r 1 FF F3 .dbyt $fff3 +000AAAr 1 FF F4 .dbyt $fff4 +000AACr 1 FF F5 .dbyt $fff5 +000AAEr 1 FF F6 .dbyt $fff6 +000AB0r 1 FF F7 .dbyt $fff7 +000AB2r 1 FF F8 .dbyt $fff8 +000AB4r 1 FF F9 .dbyt $fff9 +000AB6r 1 FF FA .dbyt $fffa +000AB8r 1 FF FB .dbyt $fffb +000ABAr 1 FF FC .dbyt $fffc +000ABCr 1 FF FD .dbyt $fffd +000ABEr 1 FF FE .dbyt $fffe +000AC0r 1 FF FF .dbyt $ffff +000AC2r 1 +000AC2r 1 ; hex values, uppercase +000AC2r 1 00 00 .dbyt $0 +000AC4r 1 00 01 .dbyt $1 +000AC6r 1 00 02 .dbyt $2 +000AC8r 1 00 03 .dbyt $3 +000ACAr 1 00 04 .dbyt $4 +000ACCr 1 00 05 .dbyt $5 +000ACEr 1 00 06 .dbyt $6 +000AD0r 1 00 07 .dbyt $7 +000AD2r 1 00 08 .dbyt $8 +000AD4r 1 00 09 .dbyt $9 +000AD6r 1 00 0A .dbyt $A +000AD8r 1 00 0B .dbyt $B +000ADAr 1 00 0C .dbyt $C +000ADCr 1 00 0D .dbyt $D +000ADEr 1 00 0E .dbyt $E +000AE0r 1 00 0F .dbyt $F +000AE2r 1 00 10 .dbyt $10 +000AE4r 1 00 11 .dbyt $11 +000AE6r 1 00 12 .dbyt $12 +000AE8r 1 00 13 .dbyt $13 +000AEAr 1 00 70 .dbyt $70 +000AECr 1 00 71 .dbyt $71 +000AEEr 1 00 72 .dbyt $72 +000AF0r 1 00 73 .dbyt $73 +000AF2r 1 00 74 .dbyt $74 +000AF4r 1 00 75 .dbyt $75 +000AF6r 1 00 76 .dbyt $76 +000AF8r 1 00 77 .dbyt $77 +000AFAr 1 00 78 .dbyt $78 +000AFCr 1 00 79 .dbyt $79 +000AFEr 1 00 7A .dbyt $7A +000B00r 1 00 7B .dbyt $7B +000B02r 1 00 7C .dbyt $7C +000B04r 1 00 7D .dbyt $7D +000B06r 1 00 7E .dbyt $7E +000B08r 1 00 7F .dbyt $7F +000B0Ar 1 00 80 .dbyt $80 +000B0Cr 1 00 81 .dbyt $81 +000B0Er 1 00 82 .dbyt $82 +000B10r 1 00 83 .dbyt $83 +000B12r 1 00 84 .dbyt $84 +000B14r 1 00 85 .dbyt $85 +000B16r 1 00 86 .dbyt $86 +000B18r 1 00 F0 .dbyt $F0 +000B1Ar 1 00 F1 .dbyt $F1 +000B1Cr 1 00 F2 .dbyt $F2 +000B1Er 1 00 F3 .dbyt $F3 +000B20r 1 00 F4 .dbyt $F4 +000B22r 1 00 F5 .dbyt $F5 +000B24r 1 00 F6 .dbyt $F6 +000B26r 1 00 F7 .dbyt $F7 +000B28r 1 00 F8 .dbyt $F8 +000B2Ar 1 00 F9 .dbyt $F9 +000B2Cr 1 00 FA .dbyt $FA +000B2Er 1 00 FB .dbyt $FB +000B30r 1 00 FC .dbyt $FC +000B32r 1 00 FD .dbyt $FD +000B34r 1 00 FE .dbyt $FE +000B36r 1 00 FF .dbyt $FF +000B38r 1 01 00 .dbyt $100 +000B3Ar 1 01 01 .dbyt $101 +000B3Cr 1 01 02 .dbyt $102 +000B3Er 1 01 03 .dbyt $103 +000B40r 1 0F D2 .dbyt $FD2 +000B42r 1 0F D3 .dbyt $FD3 +000B44r 1 0F D4 .dbyt $FD4 +000B46r 1 0F D5 .dbyt $FD5 +000B48r 1 0F D6 .dbyt $FD6 +000B4Ar 1 0F D7 .dbyt $FD7 +000B4Cr 1 0F D8 .dbyt $FD8 +000B4Er 1 0F D9 .dbyt $FD9 +000B50r 1 0F DA .dbyt $FDA +000B52r 1 0F DB .dbyt $FDB +000B54r 1 0F DC .dbyt $FDC +000B56r 1 0F DD .dbyt $FDD +000B58r 1 0F DE .dbyt $FDE +000B5Ar 1 0F DF .dbyt $FDF +000B5Cr 1 0F E0 .dbyt $FE0 +000B5Er 1 0F E1 .dbyt $FE1 +000B60r 1 0F E2 .dbyt $FE2 +000B62r 1 0F E3 .dbyt $FE3 +000B64r 1 0F E4 .dbyt $FE4 +000B66r 1 0F E5 .dbyt $FE5 +000B68r 1 0F E6 .dbyt $FE6 +000B6Ar 1 0F E7 .dbyt $FE7 +000B6Cr 1 0F E8 .dbyt $FE8 +000B6Er 1 0F E9 .dbyt $FE9 +000B70r 1 0F EA .dbyt $FEA +000B72r 1 0F EB .dbyt $FEB +000B74r 1 0F EC .dbyt $FEC +000B76r 1 0F ED .dbyt $FED +000B78r 1 0F EE .dbyt $FEE +000B7Ar 1 0F EF .dbyt $FEF +000B7Cr 1 0F F0 .dbyt $FF0 +000B7Er 1 0F F1 .dbyt $FF1 +000B80r 1 0F F2 .dbyt $FF2 +000B82r 1 0F F3 .dbyt $FF3 +000B84r 1 0F F4 .dbyt $FF4 +000B86r 1 0F F5 .dbyt $FF5 +000B88r 1 0F F6 .dbyt $FF6 +000B8Ar 1 0F F7 .dbyt $FF7 +000B8Cr 1 0F F8 .dbyt $FF8 +000B8Er 1 0F F9 .dbyt $FF9 +000B90r 1 0F FA .dbyt $FFA +000B92r 1 0F FB .dbyt $FFB +000B94r 1 0F FC .dbyt $FFC +000B96r 1 0F FD .dbyt $FFD +000B98r 1 0F FE .dbyt $FFE +000B9Ar 1 0F FF .dbyt $FFF +000B9Cr 1 10 00 .dbyt $1000 +000B9Er 1 10 01 .dbyt $1001 +000BA0r 1 10 02 .dbyt $1002 +000BA2r 1 10 03 .dbyt $1003 +000BA4r 1 10 04 .dbyt $1004 +000BA6r 1 10 05 .dbyt $1005 +000BA8r 1 10 06 .dbyt $1006 +000BAAr 1 10 07 .dbyt $1007 +000BACr 1 10 08 .dbyt $1008 +000BAEr 1 7F F0 .dbyt $7FF0 +000BB0r 1 7F F1 .dbyt $7FF1 +000BB2r 1 7F F2 .dbyt $7FF2 +000BB4r 1 7F F3 .dbyt $7FF3 +000BB6r 1 7F F4 .dbyt $7FF4 +000BB8r 1 7F F5 .dbyt $7FF5 +000BBAr 1 7F F6 .dbyt $7FF6 +000BBCr 1 7F F7 .dbyt $7FF7 +000BBEr 1 7F F8 .dbyt $7FF8 +000BC0r 1 7F F9 .dbyt $7FF9 +000BC2r 1 7F FA .dbyt $7FFA +000BC4r 1 7F FB .dbyt $7FFB +000BC6r 1 7F FC .dbyt $7FFC +000BC8r 1 7F FD .dbyt $7FFD +000BCAr 1 7F FE .dbyt $7FFE +000BCCr 1 7F FF .dbyt $7FFF +000BCEr 1 80 00 .dbyt $8000 +000BD0r 1 80 01 .dbyt $8001 +000BD2r 1 80 02 .dbyt $8002 +000BD4r 1 80 03 .dbyt $8003 +000BD6r 1 80 04 .dbyt $8004 +000BD8r 1 80 05 .dbyt $8005 +000BDAr 1 80 06 .dbyt $8006 +000BDCr 1 80 07 .dbyt $8007 +000BDEr 1 80 08 .dbyt $8008 +000BE0r 1 80 09 .dbyt $8009 +000BE2r 1 80 0A .dbyt $800A +000BE4r 1 80 0B .dbyt $800B +000BE6r 1 9F E1 .dbyt $9FE1 +000BE8r 1 9F E2 .dbyt $9FE2 +000BEAr 1 9F E3 .dbyt $9FE3 +000BECr 1 9F E4 .dbyt $9FE4 +000BEEr 1 9F E5 .dbyt $9FE5 +000BF0r 1 9F E6 .dbyt $9FE6 +000BF2r 1 9F E7 .dbyt $9FE7 +000BF4r 1 9F E8 .dbyt $9FE8 +000BF6r 1 9F E9 .dbyt $9FE9 +000BF8r 1 9F EA .dbyt $9FEA +000BFAr 1 9F EB .dbyt $9FEB +000BFCr 1 9F EC .dbyt $9FEC +000BFEr 1 9F ED .dbyt $9FED +000C00r 1 9F EE .dbyt $9FEE +000C02r 1 9F EF .dbyt $9FEF +000C04r 1 9F F0 .dbyt $9FF0 +000C06r 1 9F F1 .dbyt $9FF1 +000C08r 1 9F F2 .dbyt $9FF2 +000C0Ar 1 9F F3 .dbyt $9FF3 +000C0Cr 1 9F F4 .dbyt $9FF4 +000C0Er 1 9F F5 .dbyt $9FF5 +000C10r 1 9F F6 .dbyt $9FF6 +000C12r 1 9F F7 .dbyt $9FF7 +000C14r 1 9F F8 .dbyt $9FF8 +000C16r 1 9F F9 .dbyt $9FF9 +000C18r 1 9F FA .dbyt $9FFA +000C1Ar 1 9F FB .dbyt $9FFB +000C1Cr 1 9F FC .dbyt $9FFC +000C1Er 1 9F FD .dbyt $9FFD +000C20r 1 9F FE .dbyt $9FFE +000C22r 1 9F FF .dbyt $9FFF +000C24r 1 A0 00 .dbyt $A000 +000C26r 1 A0 01 .dbyt $A001 +000C28r 1 A0 02 .dbyt $A002 +000C2Ar 1 A0 03 .dbyt $A003 +000C2Cr 1 A0 04 .dbyt $A004 +000C2Er 1 A0 05 .dbyt $A005 +000C30r 1 A0 06 .dbyt $A006 +000C32r 1 A0 07 .dbyt $A007 +000C34r 1 A0 08 .dbyt $A008 +000C36r 1 A0 09 .dbyt $A009 +000C38r 1 A0 0A .dbyt $A00A +000C3Ar 1 A0 0B .dbyt $A00B +000C3Cr 1 A0 0C .dbyt $A00C +000C3Er 1 A0 0D .dbyt $A00D +000C40r 1 A0 0E .dbyt $A00E +000C42r 1 A0 0F .dbyt $A00F +000C44r 1 AF E1 .dbyt $AFE1 +000C46r 1 AF E2 .dbyt $AFE2 +000C48r 1 AF E3 .dbyt $AFE3 +000C4Ar 1 AF E4 .dbyt $AFE4 +000C4Cr 1 AF E5 .dbyt $AFE5 +000C4Er 1 AF E6 .dbyt $AFE6 +000C50r 1 AF E7 .dbyt $AFE7 +000C52r 1 AF E8 .dbyt $AFE8 +000C54r 1 AF E9 .dbyt $AFE9 +000C56r 1 AF EA .dbyt $AFEA +000C58r 1 AF EB .dbyt $AFEB +000C5Ar 1 AF EC .dbyt $AFEC +000C5Cr 1 AF ED .dbyt $AFED +000C5Er 1 AF EE .dbyt $AFEE +000C60r 1 AF EF .dbyt $AFEF +000C62r 1 AF F0 .dbyt $AFF0 +000C64r 1 AF F1 .dbyt $AFF1 +000C66r 1 AF F2 .dbyt $AFF2 +000C68r 1 AF F3 .dbyt $AFF3 +000C6Ar 1 AF F4 .dbyt $AFF4 +000C6Cr 1 AF F5 .dbyt $AFF5 +000C6Er 1 AF F6 .dbyt $AFF6 +000C70r 1 AF F7 .dbyt $AFF7 +000C72r 1 AF F8 .dbyt $AFF8 +000C74r 1 AF F9 .dbyt $AFF9 +000C76r 1 AF FA .dbyt $AFFA +000C78r 1 AF FB .dbyt $AFFB +000C7Ar 1 AF FC .dbyt $AFFC +000C7Cr 1 AF FD .dbyt $AFFD +000C7Er 1 AF FE .dbyt $AFFE +000C80r 1 AF FF .dbyt $AFFF +000C82r 1 B0 00 .dbyt $B000 +000C84r 1 B0 01 .dbyt $B001 +000C86r 1 B0 02 .dbyt $B002 +000C88r 1 B0 03 .dbyt $B003 +000C8Ar 1 B0 04 .dbyt $B004 +000C8Cr 1 B0 05 .dbyt $B005 +000C8Er 1 B0 06 .dbyt $B006 +000C90r 1 B0 07 .dbyt $B007 +000C92r 1 B0 08 .dbyt $B008 +000C94r 1 B0 09 .dbyt $B009 +000C96r 1 B0 0A .dbyt $B00A +000C98r 1 B0 0B .dbyt $B00B +000C9Ar 1 B0 0C .dbyt $B00C +000C9Cr 1 B0 0D .dbyt $B00D +000C9Er 1 B0 0E .dbyt $B00E +000CA0r 1 B0 0F .dbyt $B00F +000CA2r 1 BF E1 .dbyt $BFE1 +000CA4r 1 BF E2 .dbyt $BFE2 +000CA6r 1 BF E3 .dbyt $BFE3 +000CA8r 1 BF E4 .dbyt $BFE4 +000CAAr 1 BF E5 .dbyt $BFE5 +000CACr 1 BF E6 .dbyt $BFE6 +000CAEr 1 BF E7 .dbyt $BFE7 +000CB0r 1 BF E8 .dbyt $BFE8 +000CB2r 1 BF E9 .dbyt $BFE9 +000CB4r 1 BF EA .dbyt $BFEA +000CB6r 1 BF EB .dbyt $BFEB +000CB8r 1 BF EC .dbyt $BFEC +000CBAr 1 BF ED .dbyt $BFED +000CBCr 1 BF EE .dbyt $BFEE +000CBEr 1 BF EF .dbyt $BFEF +000CC0r 1 BF F0 .dbyt $BFF0 +000CC2r 1 BF F1 .dbyt $BFF1 +000CC4r 1 BF F2 .dbyt $BFF2 +000CC6r 1 BF F3 .dbyt $BFF3 +000CC8r 1 BF F4 .dbyt $BFF4 +000CCAr 1 BF F5 .dbyt $BFF5 +000CCCr 1 BF F6 .dbyt $BFF6 +000CCEr 1 BF F7 .dbyt $BFF7 +000CD0r 1 BF F8 .dbyt $BFF8 +000CD2r 1 BF F9 .dbyt $BFF9 +000CD4r 1 BF FA .dbyt $BFFA +000CD6r 1 BF FB .dbyt $BFFB +000CD8r 1 BF FC .dbyt $BFFC +000CDAr 1 BF FD .dbyt $BFFD +000CDCr 1 BF FE .dbyt $BFFE +000CDEr 1 BF FF .dbyt $BFFF +000CE0r 1 C0 00 .dbyt $C000 +000CE2r 1 C0 01 .dbyt $C001 +000CE4r 1 C0 02 .dbyt $C002 +000CE6r 1 C0 03 .dbyt $C003 +000CE8r 1 C0 04 .dbyt $C004 +000CEAr 1 C0 05 .dbyt $C005 +000CECr 1 C0 06 .dbyt $C006 +000CEEr 1 C0 07 .dbyt $C007 +000CF0r 1 C0 08 .dbyt $C008 +000CF2r 1 C0 09 .dbyt $C009 +000CF4r 1 C0 0A .dbyt $C00A +000CF6r 1 C0 0B .dbyt $C00B +000CF8r 1 C0 0C .dbyt $C00C +000CFAr 1 C0 0D .dbyt $C00D +000CFCr 1 C0 0E .dbyt $C00E +000CFEr 1 C0 0F .dbyt $C00F +000D00r 1 CF E1 .dbyt $CFE1 +000D02r 1 CF E2 .dbyt $CFE2 +000D04r 1 CF E3 .dbyt $CFE3 +000D06r 1 CF E4 .dbyt $CFE4 +000D08r 1 CF E5 .dbyt $CFE5 +000D0Ar 1 CF E6 .dbyt $CFE6 +000D0Cr 1 CF E7 .dbyt $CFE7 +000D0Er 1 CF E8 .dbyt $CFE8 +000D10r 1 CF E9 .dbyt $CFE9 +000D12r 1 CF EA .dbyt $CFEA +000D14r 1 CF EB .dbyt $CFEB +000D16r 1 CF EC .dbyt $CFEC +000D18r 1 CF ED .dbyt $CFED +000D1Ar 1 CF EE .dbyt $CFEE +000D1Cr 1 CF EF .dbyt $CFEF +000D1Er 1 CF F0 .dbyt $CFF0 +000D20r 1 CF F1 .dbyt $CFF1 +000D22r 1 CF F2 .dbyt $CFF2 +000D24r 1 CF F3 .dbyt $CFF3 +000D26r 1 CF F4 .dbyt $CFF4 +000D28r 1 CF F5 .dbyt $CFF5 +000D2Ar 1 CF F6 .dbyt $CFF6 +000D2Cr 1 CF F7 .dbyt $CFF7 +000D2Er 1 CF F8 .dbyt $CFF8 +000D30r 1 CF F9 .dbyt $CFF9 +000D32r 1 CF FA .dbyt $CFFA +000D34r 1 CF FB .dbyt $CFFB +000D36r 1 CF FC .dbyt $CFFC +000D38r 1 CF FD .dbyt $CFFD +000D3Ar 1 CF FE .dbyt $CFFE +000D3Cr 1 CF FF .dbyt $CFFF +000D3Er 1 D0 00 .dbyt $D000 +000D40r 1 D0 01 .dbyt $D001 +000D42r 1 D0 02 .dbyt $D002 +000D44r 1 D0 03 .dbyt $D003 +000D46r 1 D0 04 .dbyt $D004 +000D48r 1 D0 05 .dbyt $D005 +000D4Ar 1 D0 06 .dbyt $D006 +000D4Cr 1 D0 07 .dbyt $D007 +000D4Er 1 D0 08 .dbyt $D008 +000D50r 1 D0 09 .dbyt $D009 +000D52r 1 D0 0A .dbyt $D00A +000D54r 1 D0 0B .dbyt $D00B +000D56r 1 D0 0C .dbyt $D00C +000D58r 1 D0 0D .dbyt $D00D +000D5Ar 1 D0 0E .dbyt $D00E +000D5Cr 1 D0 0F .dbyt $D00F +000D5Er 1 DF E1 .dbyt $DFE1 +000D60r 1 DF E2 .dbyt $DFE2 +000D62r 1 DF E3 .dbyt $DFE3 +000D64r 1 DF E4 .dbyt $DFE4 +000D66r 1 DF E5 .dbyt $DFE5 +000D68r 1 DF E6 .dbyt $DFE6 +000D6Ar 1 DF E7 .dbyt $DFE7 +000D6Cr 1 DF E8 .dbyt $DFE8 +000D6Er 1 DF E9 .dbyt $DFE9 +000D70r 1 DF EA .dbyt $DFEA +000D72r 1 DF EB .dbyt $DFEB +000D74r 1 DF EC .dbyt $DFEC +000D76r 1 DF ED .dbyt $DFED +000D78r 1 DF EE .dbyt $DFEE +000D7Ar 1 DF EF .dbyt $DFEF +000D7Cr 1 DF F0 .dbyt $DFF0 +000D7Er 1 DF F1 .dbyt $DFF1 +000D80r 1 DF F2 .dbyt $DFF2 +000D82r 1 DF F3 .dbyt $DFF3 +000D84r 1 DF F4 .dbyt $DFF4 +000D86r 1 DF F5 .dbyt $DFF5 +000D88r 1 DF F6 .dbyt $DFF6 +000D8Ar 1 DF F7 .dbyt $DFF7 +000D8Cr 1 DF F8 .dbyt $DFF8 +000D8Er 1 DF F9 .dbyt $DFF9 +000D90r 1 DF FA .dbyt $DFFA +000D92r 1 DF FB .dbyt $DFFB +000D94r 1 DF FC .dbyt $DFFC +000D96r 1 DF FD .dbyt $DFFD +000D98r 1 DF FE .dbyt $DFFE +000D9Ar 1 DF FF .dbyt $DFFF +000D9Cr 1 E0 00 .dbyt $E000 +000D9Er 1 E0 01 .dbyt $E001 +000DA0r 1 E0 02 .dbyt $E002 +000DA2r 1 E0 03 .dbyt $E003 +000DA4r 1 E0 04 .dbyt $E004 +000DA6r 1 E0 05 .dbyt $E005 +000DA8r 1 E0 06 .dbyt $E006 +000DAAr 1 E0 07 .dbyt $E007 +000DACr 1 E0 08 .dbyt $E008 +000DAEr 1 E0 09 .dbyt $E009 +000DB0r 1 E0 0A .dbyt $E00A +000DB2r 1 E0 0B .dbyt $E00B +000DB4r 1 E0 0C .dbyt $E00C +000DB6r 1 E0 0D .dbyt $E00D +000DB8r 1 E0 0E .dbyt $E00E +000DBAr 1 E0 0F .dbyt $E00F +000DBCr 1 EF E1 .dbyt $EFE1 +000DBEr 1 EF E2 .dbyt $EFE2 +000DC0r 1 EF E3 .dbyt $EFE3 +000DC2r 1 EF E4 .dbyt $EFE4 +000DC4r 1 EF E5 .dbyt $EFE5 +000DC6r 1 EF E6 .dbyt $EFE6 +000DC8r 1 EF E7 .dbyt $EFE7 +000DCAr 1 EF E8 .dbyt $EFE8 +000DCCr 1 EF E9 .dbyt $EFE9 +000DCEr 1 EF EA .dbyt $EFEA +000DD0r 1 EF EB .dbyt $EFEB +000DD2r 1 EF EC .dbyt $EFEC +000DD4r 1 EF ED .dbyt $EFED +000DD6r 1 EF EE .dbyt $EFEE +000DD8r 1 EF EF .dbyt $EFEF +000DDAr 1 EF F0 .dbyt $EFF0 +000DDCr 1 EF F1 .dbyt $EFF1 +000DDEr 1 EF F2 .dbyt $EFF2 +000DE0r 1 EF F3 .dbyt $EFF3 +000DE2r 1 EF F4 .dbyt $EFF4 +000DE4r 1 EF F5 .dbyt $EFF5 +000DE6r 1 EF F6 .dbyt $EFF6 +000DE8r 1 EF F7 .dbyt $EFF7 +000DEAr 1 EF F8 .dbyt $EFF8 +000DECr 1 EF F9 .dbyt $EFF9 +000DEEr 1 EF FA .dbyt $EFFA +000DF0r 1 EF FB .dbyt $EFFB +000DF2r 1 EF FC .dbyt $EFFC +000DF4r 1 EF FD .dbyt $EFFD +000DF6r 1 EF FE .dbyt $EFFE +000DF8r 1 EF FF .dbyt $EFFF +000DFAr 1 F0 00 .dbyt $F000 +000DFCr 1 F0 01 .dbyt $F001 +000DFEr 1 F0 02 .dbyt $F002 +000E00r 1 F0 03 .dbyt $F003 +000E02r 1 F0 04 .dbyt $F004 +000E04r 1 F0 05 .dbyt $F005 +000E06r 1 F0 06 .dbyt $F006 +000E08r 1 F0 07 .dbyt $F007 +000E0Ar 1 F0 08 .dbyt $F008 +000E0Cr 1 F0 09 .dbyt $F009 +000E0Er 1 F0 0A .dbyt $F00A +000E10r 1 F0 0B .dbyt $F00B +000E12r 1 F0 0C .dbyt $F00C +000E14r 1 F0 0D .dbyt $F00D +000E16r 1 F0 0E .dbyt $F00E +000E18r 1 F0 0F .dbyt $F00F +000E1Ar 1 FF E1 .dbyt $FFE1 +000E1Cr 1 FF E2 .dbyt $FFE2 +000E1Er 1 FF E3 .dbyt $FFE3 +000E20r 1 FF E4 .dbyt $FFE4 +000E22r 1 FF E5 .dbyt $FFE5 +000E24r 1 FF E6 .dbyt $FFE6 +000E26r 1 FF E7 .dbyt $FFE7 +000E28r 1 FF E8 .dbyt $FFE8 +000E2Ar 1 FF E9 .dbyt $FFE9 +000E2Cr 1 FF EA .dbyt $FFEA +000E2Er 1 FF EB .dbyt $FFEB +000E30r 1 FF EC .dbyt $FFEC +000E32r 1 FF ED .dbyt $FFED +000E34r 1 FF EE .dbyt $FFEE +000E36r 1 FF EF .dbyt $FFEF +000E38r 1 FF F0 .dbyt $FFF0 +000E3Ar 1 FF F1 .dbyt $FFF1 +000E3Cr 1 FF F2 .dbyt $FFF2 +000E3Er 1 FF F3 .dbyt $FFF3 +000E40r 1 FF F4 .dbyt $FFF4 +000E42r 1 FF F5 .dbyt $FFF5 +000E44r 1 FF F6 .dbyt $FFF6 +000E46r 1 FF F7 .dbyt $FFF7 +000E48r 1 FF F8 .dbyt $FFF8 +000E4Ar 1 FF F9 .dbyt $FFF9 +000E4Cr 1 FF FA .dbyt $FFFA +000E4Er 1 FF FB .dbyt $FFFB +000E50r 1 FF FC .dbyt $FFFC +000E52r 1 FF FD .dbyt $FFFD +000E54r 1 FF FE .dbyt $FFFE +000E56r 1 FF FF .dbyt $FFFF +000E58r 1 +000E58r 1 ; 4-digit hex values +000E58r 1 00 00 .dbyt $0000 +000E5Ar 1 00 01 .dbyt $0001 +000E5Cr 1 00 02 .dbyt $0002 +000E5Er 1 00 03 .dbyt $0003 +000E60r 1 00 04 .dbyt $0004 +000E62r 1 00 05 .dbyt $0005 +000E64r 1 00 06 .dbyt $0006 +000E66r 1 00 07 .dbyt $0007 +000E68r 1 00 08 .dbyt $0008 +000E6Ar 1 00 09 .dbyt $0009 +000E6Cr 1 00 0A .dbyt $000a +000E6Er 1 00 0B .dbyt $000b +000E70r 1 00 0C .dbyt $000c +000E72r 1 00 0D .dbyt $000d +000E74r 1 00 0E .dbyt $000e +000E76r 1 00 0F .dbyt $000f +000E78r 1 00 10 .dbyt $0010 +000E7Ar 1 00 11 .dbyt $0011 +000E7Cr 1 00 12 .dbyt $0012 +000E7Er 1 00 13 .dbyt $0013 +000E80r 1 00 70 .dbyt $0070 +000E82r 1 00 71 .dbyt $0071 +000E84r 1 00 72 .dbyt $0072 +000E86r 1 00 73 .dbyt $0073 +000E88r 1 00 74 .dbyt $0074 +000E8Ar 1 00 75 .dbyt $0075 +000E8Cr 1 00 76 .dbyt $0076 +000E8Er 1 00 77 .dbyt $0077 +000E90r 1 00 78 .dbyt $0078 +000E92r 1 00 79 .dbyt $0079 +000E94r 1 00 7A .dbyt $007a +000E96r 1 00 7B .dbyt $007b +000E98r 1 00 7C .dbyt $007c +000E9Ar 1 00 7D .dbyt $007d +000E9Cr 1 00 7E .dbyt $007e +000E9Er 1 00 7F .dbyt $007f +000EA0r 1 00 80 .dbyt $0080 +000EA2r 1 00 81 .dbyt $0081 +000EA4r 1 00 82 .dbyt $0082 +000EA6r 1 00 83 .dbyt $0083 +000EA8r 1 00 84 .dbyt $0084 +000EAAr 1 00 85 .dbyt $0085 +000EACr 1 00 86 .dbyt $0086 +000EAEr 1 00 F0 .dbyt $00f0 +000EB0r 1 00 F1 .dbyt $00f1 +000EB2r 1 00 F2 .dbyt $00f2 +000EB4r 1 00 F3 .dbyt $00f3 +000EB6r 1 00 F4 .dbyt $00f4 +000EB8r 1 00 F5 .dbyt $00f5 +000EBAr 1 00 F6 .dbyt $00f6 +000EBCr 1 00 F7 .dbyt $00f7 +000EBEr 1 00 F8 .dbyt $00f8 +000EC0r 1 00 F9 .dbyt $00f9 +000EC2r 1 00 FA .dbyt $00fa +000EC4r 1 00 FB .dbyt $00fb +000EC6r 1 00 FC .dbyt $00fc +000EC8r 1 00 FD .dbyt $00fd +000ECAr 1 00 FE .dbyt $00fe +000ECCr 1 00 FF .dbyt $00ff +000ECEr 1 01 00 .dbyt $0100 +000ED0r 1 01 01 .dbyt $0101 +000ED2r 1 01 02 .dbyt $0102 +000ED4r 1 01 03 .dbyt $0103 +000ED6r 1 0F D2 .dbyt $0fd2 +000ED8r 1 0F D3 .dbyt $0fd3 +000EDAr 1 0F D4 .dbyt $0fd4 +000EDCr 1 0F D5 .dbyt $0fd5 +000EDEr 1 0F D6 .dbyt $0fd6 +000EE0r 1 0F D7 .dbyt $0fd7 +000EE2r 1 0F D8 .dbyt $0fd8 +000EE4r 1 0F D9 .dbyt $0fd9 +000EE6r 1 0F DA .dbyt $0fda +000EE8r 1 0F DB .dbyt $0fdb +000EEAr 1 0F DC .dbyt $0fdc +000EECr 1 0F DD .dbyt $0fdd +000EEEr 1 0F DE .dbyt $0fde +000EF0r 1 0F DF .dbyt $0fdf +000EF2r 1 0F E0 .dbyt $0fe0 +000EF4r 1 0F E1 .dbyt $0fe1 +000EF6r 1 0F E2 .dbyt $0fe2 +000EF8r 1 0F E3 .dbyt $0fe3 +000EFAr 1 0F E4 .dbyt $0fe4 +000EFCr 1 0F E5 .dbyt $0fe5 +000EFEr 1 0F E6 .dbyt $0fe6 +000F00r 1 0F E7 .dbyt $0fe7 +000F02r 1 0F E8 .dbyt $0fe8 +000F04r 1 0F E9 .dbyt $0fe9 +000F06r 1 0F EA .dbyt $0fea +000F08r 1 0F EB .dbyt $0feb +000F0Ar 1 0F EC .dbyt $0fec +000F0Cr 1 0F ED .dbyt $0fed +000F0Er 1 0F EE .dbyt $0fee +000F10r 1 0F EF .dbyt $0fef +000F12r 1 0F F0 .dbyt $0ff0 +000F14r 1 0F F1 .dbyt $0ff1 +000F16r 1 0F F2 .dbyt $0ff2 +000F18r 1 0F F3 .dbyt $0ff3 +000F1Ar 1 0F F4 .dbyt $0ff4 +000F1Cr 1 0F F5 .dbyt $0ff5 +000F1Er 1 0F F6 .dbyt $0ff6 +000F20r 1 0F F7 .dbyt $0ff7 +000F22r 1 0F F8 .dbyt $0ff8 +000F24r 1 0F F9 .dbyt $0ff9 +000F26r 1 0F FA .dbyt $0ffa +000F28r 1 0F FB .dbyt $0ffb +000F2Ar 1 0F FC .dbyt $0ffc +000F2Cr 1 0F FD .dbyt $0ffd +000F2Er 1 0F FE .dbyt $0ffe +000F30r 1 0F FF .dbyt $0fff +000F32r 1 10 00 .dbyt $1000 +000F34r 1 10 01 .dbyt $1001 +000F36r 1 10 02 .dbyt $1002 +000F38r 1 10 03 .dbyt $1003 +000F3Ar 1 10 04 .dbyt $1004 +000F3Cr 1 10 05 .dbyt $1005 +000F3Er 1 10 06 .dbyt $1006 +000F40r 1 10 07 .dbyt $1007 +000F42r 1 10 08 .dbyt $1008 +000F44r 1 7F F0 .dbyt $7ff0 +000F46r 1 7F F1 .dbyt $7ff1 +000F48r 1 7F F2 .dbyt $7ff2 +000F4Ar 1 7F F3 .dbyt $7ff3 +000F4Cr 1 7F F4 .dbyt $7ff4 +000F4Er 1 7F F5 .dbyt $7ff5 +000F50r 1 7F F6 .dbyt $7ff6 +000F52r 1 7F F7 .dbyt $7ff7 +000F54r 1 7F F8 .dbyt $7ff8 +000F56r 1 7F F9 .dbyt $7ff9 +000F58r 1 7F FA .dbyt $7ffa +000F5Ar 1 7F FB .dbyt $7ffb +000F5Cr 1 7F FC .dbyt $7ffc +000F5Er 1 7F FD .dbyt $7ffd +000F60r 1 7F FE .dbyt $7ffe +000F62r 1 7F FF .dbyt $7fff +000F64r 1 80 00 .dbyt $8000 +000F66r 1 80 01 .dbyt $8001 +000F68r 1 80 02 .dbyt $8002 +000F6Ar 1 80 03 .dbyt $8003 +000F6Cr 1 80 04 .dbyt $8004 +000F6Er 1 80 05 .dbyt $8005 +000F70r 1 80 06 .dbyt $8006 +000F72r 1 80 07 .dbyt $8007 +000F74r 1 80 08 .dbyt $8008 +000F76r 1 80 09 .dbyt $8009 +000F78r 1 80 0A .dbyt $800a +000F7Ar 1 80 0B .dbyt $800b +000F7Cr 1 9F E1 .dbyt $9fe1 +000F7Er 1 9F E2 .dbyt $9fe2 +000F80r 1 9F E3 .dbyt $9fe3 +000F82r 1 9F E4 .dbyt $9fe4 +000F84r 1 9F E5 .dbyt $9fe5 +000F86r 1 9F E6 .dbyt $9fe6 +000F88r 1 9F E7 .dbyt $9fe7 +000F8Ar 1 9F E8 .dbyt $9fe8 +000F8Cr 1 9F E9 .dbyt $9fe9 +000F8Er 1 9F EA .dbyt $9fea +000F90r 1 9F EB .dbyt $9feb +000F92r 1 9F EC .dbyt $9fec +000F94r 1 9F ED .dbyt $9fed +000F96r 1 9F EE .dbyt $9fee +000F98r 1 9F EF .dbyt $9fef +000F9Ar 1 9F F0 .dbyt $9ff0 +000F9Cr 1 9F F1 .dbyt $9ff1 +000F9Er 1 9F F2 .dbyt $9ff2 +000FA0r 1 9F F3 .dbyt $9ff3 +000FA2r 1 9F F4 .dbyt $9ff4 +000FA4r 1 9F F5 .dbyt $9ff5 +000FA6r 1 9F F6 .dbyt $9ff6 +000FA8r 1 9F F7 .dbyt $9ff7 +000FAAr 1 9F F8 .dbyt $9ff8 +000FACr 1 9F F9 .dbyt $9ff9 +000FAEr 1 9F FA .dbyt $9ffa +000FB0r 1 9F FB .dbyt $9ffb +000FB2r 1 9F FC .dbyt $9ffc +000FB4r 1 9F FD .dbyt $9ffd +000FB6r 1 9F FE .dbyt $9ffe +000FB8r 1 9F FF .dbyt $9fff +000FBAr 1 A0 00 .dbyt $a000 +000FBCr 1 A0 01 .dbyt $a001 +000FBEr 1 A0 02 .dbyt $a002 +000FC0r 1 A0 03 .dbyt $a003 +000FC2r 1 A0 04 .dbyt $a004 +000FC4r 1 A0 05 .dbyt $a005 +000FC6r 1 A0 06 .dbyt $a006 +000FC8r 1 A0 07 .dbyt $a007 +000FCAr 1 A0 08 .dbyt $a008 +000FCCr 1 A0 09 .dbyt $a009 +000FCEr 1 A0 0A .dbyt $a00a +000FD0r 1 A0 0B .dbyt $a00b +000FD2r 1 A0 0C .dbyt $a00c +000FD4r 1 A0 0D .dbyt $a00d +000FD6r 1 A0 0E .dbyt $a00e +000FD8r 1 A0 0F .dbyt $a00f +000FDAr 1 AF E1 .dbyt $afe1 +000FDCr 1 AF E2 .dbyt $afe2 +000FDEr 1 AF E3 .dbyt $afe3 +000FE0r 1 AF E4 .dbyt $afe4 +000FE2r 1 AF E5 .dbyt $afe5 +000FE4r 1 AF E6 .dbyt $afe6 +000FE6r 1 AF E7 .dbyt $afe7 +000FE8r 1 AF E8 .dbyt $afe8 +000FEAr 1 AF E9 .dbyt $afe9 +000FECr 1 AF EA .dbyt $afea +000FEEr 1 AF EB .dbyt $afeb +000FF0r 1 AF EC .dbyt $afec +000FF2r 1 AF ED .dbyt $afed +000FF4r 1 AF EE .dbyt $afee +000FF6r 1 AF EF .dbyt $afef +000FF8r 1 AF F0 .dbyt $aff0 +000FFAr 1 AF F1 .dbyt $aff1 +000FFCr 1 AF F2 .dbyt $aff2 +000FFEr 1 AF F3 .dbyt $aff3 +001000r 1 AF F4 .dbyt $aff4 +001002r 1 AF F5 .dbyt $aff5 +001004r 1 AF F6 .dbyt $aff6 +001006r 1 AF F7 .dbyt $aff7 +001008r 1 AF F8 .dbyt $aff8 +00100Ar 1 AF F9 .dbyt $aff9 +00100Cr 1 AF FA .dbyt $affa +00100Er 1 AF FB .dbyt $affb +001010r 1 AF FC .dbyt $affc +001012r 1 AF FD .dbyt $affd +001014r 1 AF FE .dbyt $affe +001016r 1 AF FF .dbyt $afff +001018r 1 B0 00 .dbyt $b000 +00101Ar 1 B0 01 .dbyt $b001 +00101Cr 1 B0 02 .dbyt $b002 +00101Er 1 B0 03 .dbyt $b003 +001020r 1 B0 04 .dbyt $b004 +001022r 1 B0 05 .dbyt $b005 +001024r 1 B0 06 .dbyt $b006 +001026r 1 B0 07 .dbyt $b007 +001028r 1 B0 08 .dbyt $b008 +00102Ar 1 B0 09 .dbyt $b009 +00102Cr 1 B0 0A .dbyt $b00a +00102Er 1 B0 0B .dbyt $b00b +001030r 1 B0 0C .dbyt $b00c +001032r 1 B0 0D .dbyt $b00d +001034r 1 B0 0E .dbyt $b00e +001036r 1 B0 0F .dbyt $b00f +001038r 1 BF E1 .dbyt $bfe1 +00103Ar 1 BF E2 .dbyt $bfe2 +00103Cr 1 BF E3 .dbyt $bfe3 +00103Er 1 BF E4 .dbyt $bfe4 +001040r 1 BF E5 .dbyt $bfe5 +001042r 1 BF E6 .dbyt $bfe6 +001044r 1 BF E7 .dbyt $bfe7 +001046r 1 BF E8 .dbyt $bfe8 +001048r 1 BF E9 .dbyt $bfe9 +00104Ar 1 BF EA .dbyt $bfea +00104Cr 1 BF EB .dbyt $bfeb +00104Er 1 BF EC .dbyt $bfec +001050r 1 BF ED .dbyt $bfed +001052r 1 BF EE .dbyt $bfee +001054r 1 BF EF .dbyt $bfef +001056r 1 BF F0 .dbyt $bff0 +001058r 1 BF F1 .dbyt $bff1 +00105Ar 1 BF F2 .dbyt $bff2 +00105Cr 1 BF F3 .dbyt $bff3 +00105Er 1 BF F4 .dbyt $bff4 +001060r 1 BF F5 .dbyt $bff5 +001062r 1 BF F6 .dbyt $bff6 +001064r 1 BF F7 .dbyt $bff7 +001066r 1 BF F8 .dbyt $bff8 +001068r 1 BF F9 .dbyt $bff9 +00106Ar 1 BF FA .dbyt $bffa +00106Cr 1 BF FB .dbyt $bffb +00106Er 1 BF FC .dbyt $bffc +001070r 1 BF FD .dbyt $bffd +001072r 1 BF FE .dbyt $bffe +001074r 1 BF FF .dbyt $bfff +001076r 1 C0 00 .dbyt $c000 +001078r 1 C0 01 .dbyt $c001 +00107Ar 1 C0 02 .dbyt $c002 +00107Cr 1 C0 03 .dbyt $c003 +00107Er 1 C0 04 .dbyt $c004 +001080r 1 C0 05 .dbyt $c005 +001082r 1 C0 06 .dbyt $c006 +001084r 1 C0 07 .dbyt $c007 +001086r 1 C0 08 .dbyt $c008 +001088r 1 C0 09 .dbyt $c009 +00108Ar 1 C0 0A .dbyt $c00a +00108Cr 1 C0 0B .dbyt $c00b +00108Er 1 C0 0C .dbyt $c00c +001090r 1 C0 0D .dbyt $c00d +001092r 1 C0 0E .dbyt $c00e +001094r 1 C0 0F .dbyt $c00f +001096r 1 CF E1 .dbyt $cfe1 +001098r 1 CF E2 .dbyt $cfe2 +00109Ar 1 CF E3 .dbyt $cfe3 +00109Cr 1 CF E4 .dbyt $cfe4 +00109Er 1 CF E5 .dbyt $cfe5 +0010A0r 1 CF E6 .dbyt $cfe6 +0010A2r 1 CF E7 .dbyt $cfe7 +0010A4r 1 CF E8 .dbyt $cfe8 +0010A6r 1 CF E9 .dbyt $cfe9 +0010A8r 1 CF EA .dbyt $cfea +0010AAr 1 CF EB .dbyt $cfeb +0010ACr 1 CF EC .dbyt $cfec +0010AEr 1 CF ED .dbyt $cfed +0010B0r 1 CF EE .dbyt $cfee +0010B2r 1 CF EF .dbyt $cfef +0010B4r 1 CF F0 .dbyt $cff0 +0010B6r 1 CF F1 .dbyt $cff1 +0010B8r 1 CF F2 .dbyt $cff2 +0010BAr 1 CF F3 .dbyt $cff3 +0010BCr 1 CF F4 .dbyt $cff4 +0010BEr 1 CF F5 .dbyt $cff5 +0010C0r 1 CF F6 .dbyt $cff6 +0010C2r 1 CF F7 .dbyt $cff7 +0010C4r 1 CF F8 .dbyt $cff8 +0010C6r 1 CF F9 .dbyt $cff9 +0010C8r 1 CF FA .dbyt $cffa +0010CAr 1 CF FB .dbyt $cffb +0010CCr 1 CF FC .dbyt $cffc +0010CEr 1 CF FD .dbyt $cffd +0010D0r 1 CF FE .dbyt $cffe +0010D2r 1 CF FF .dbyt $cfff +0010D4r 1 D0 00 .dbyt $d000 +0010D6r 1 D0 01 .dbyt $d001 +0010D8r 1 D0 02 .dbyt $d002 +0010DAr 1 D0 03 .dbyt $d003 +0010DCr 1 D0 04 .dbyt $d004 +0010DEr 1 D0 05 .dbyt $d005 +0010E0r 1 D0 06 .dbyt $d006 +0010E2r 1 D0 07 .dbyt $d007 +0010E4r 1 D0 08 .dbyt $d008 +0010E6r 1 D0 09 .dbyt $d009 +0010E8r 1 D0 0A .dbyt $d00a +0010EAr 1 D0 0B .dbyt $d00b +0010ECr 1 D0 0C .dbyt $d00c +0010EEr 1 D0 0D .dbyt $d00d +0010F0r 1 D0 0E .dbyt $d00e +0010F2r 1 D0 0F .dbyt $d00f +0010F4r 1 DF E1 .dbyt $dfe1 +0010F6r 1 DF E2 .dbyt $dfe2 +0010F8r 1 DF E3 .dbyt $dfe3 +0010FAr 1 DF E4 .dbyt $dfe4 +0010FCr 1 DF E5 .dbyt $dfe5 +0010FEr 1 DF E6 .dbyt $dfe6 +001100r 1 DF E7 .dbyt $dfe7 +001102r 1 DF E8 .dbyt $dfe8 +001104r 1 DF E9 .dbyt $dfe9 +001106r 1 DF EA .dbyt $dfea +001108r 1 DF EB .dbyt $dfeb +00110Ar 1 DF EC .dbyt $dfec +00110Cr 1 DF ED .dbyt $dfed +00110Er 1 DF EE .dbyt $dfee +001110r 1 DF EF .dbyt $dfef +001112r 1 DF F0 .dbyt $dff0 +001114r 1 DF F1 .dbyt $dff1 +001116r 1 DF F2 .dbyt $dff2 +001118r 1 DF F3 .dbyt $dff3 +00111Ar 1 DF F4 .dbyt $dff4 +00111Cr 1 DF F5 .dbyt $dff5 +00111Er 1 DF F6 .dbyt $dff6 +001120r 1 DF F7 .dbyt $dff7 +001122r 1 DF F8 .dbyt $dff8 +001124r 1 DF F9 .dbyt $dff9 +001126r 1 DF FA .dbyt $dffa +001128r 1 DF FB .dbyt $dffb +00112Ar 1 DF FC .dbyt $dffc +00112Cr 1 DF FD .dbyt $dffd +00112Er 1 DF FE .dbyt $dffe +001130r 1 DF FF .dbyt $dfff +001132r 1 E0 00 .dbyt $e000 +001134r 1 E0 01 .dbyt $e001 +001136r 1 E0 02 .dbyt $e002 +001138r 1 E0 03 .dbyt $e003 +00113Ar 1 E0 04 .dbyt $e004 +00113Cr 1 E0 05 .dbyt $e005 +00113Er 1 E0 06 .dbyt $e006 +001140r 1 E0 07 .dbyt $e007 +001142r 1 E0 08 .dbyt $e008 +001144r 1 E0 09 .dbyt $e009 +001146r 1 E0 0A .dbyt $e00a +001148r 1 E0 0B .dbyt $e00b +00114Ar 1 E0 0C .dbyt $e00c +00114Cr 1 E0 0D .dbyt $e00d +00114Er 1 E0 0E .dbyt $e00e +001150r 1 E0 0F .dbyt $e00f +001152r 1 EF E1 .dbyt $efe1 +001154r 1 EF E2 .dbyt $efe2 +001156r 1 EF E3 .dbyt $efe3 +001158r 1 EF E4 .dbyt $efe4 +00115Ar 1 EF E5 .dbyt $efe5 +00115Cr 1 EF E6 .dbyt $efe6 +00115Er 1 EF E7 .dbyt $efe7 +001160r 1 EF E8 .dbyt $efe8 +001162r 1 EF E9 .dbyt $efe9 +001164r 1 EF EA .dbyt $efea +001166r 1 EF EB .dbyt $efeb +001168r 1 EF EC .dbyt $efec +00116Ar 1 EF ED .dbyt $efed +00116Cr 1 EF EE .dbyt $efee +00116Er 1 EF EF .dbyt $efef +001170r 1 EF F0 .dbyt $eff0 +001172r 1 EF F1 .dbyt $eff1 +001174r 1 EF F2 .dbyt $eff2 +001176r 1 EF F3 .dbyt $eff3 +001178r 1 EF F4 .dbyt $eff4 +00117Ar 1 EF F5 .dbyt $eff5 +00117Cr 1 EF F6 .dbyt $eff6 +00117Er 1 EF F7 .dbyt $eff7 +001180r 1 EF F8 .dbyt $eff8 +001182r 1 EF F9 .dbyt $eff9 +001184r 1 EF FA .dbyt $effa +001186r 1 EF FB .dbyt $effb +001188r 1 EF FC .dbyt $effc +00118Ar 1 EF FD .dbyt $effd +00118Cr 1 EF FE .dbyt $effe +00118Er 1 EF FF .dbyt $efff +001190r 1 F0 00 .dbyt $f000 +001192r 1 F0 01 .dbyt $f001 +001194r 1 F0 02 .dbyt $f002 +001196r 1 F0 03 .dbyt $f003 +001198r 1 F0 04 .dbyt $f004 +00119Ar 1 F0 05 .dbyt $f005 +00119Cr 1 F0 06 .dbyt $f006 +00119Er 1 F0 07 .dbyt $f007 +0011A0r 1 F0 08 .dbyt $f008 +0011A2r 1 F0 09 .dbyt $f009 +0011A4r 1 F0 0A .dbyt $f00a +0011A6r 1 F0 0B .dbyt $f00b +0011A8r 1 F0 0C .dbyt $f00c +0011AAr 1 F0 0D .dbyt $f00d +0011ACr 1 F0 0E .dbyt $f00e +0011AEr 1 F0 0F .dbyt $f00f +0011B0r 1 FF E1 .dbyt $ffe1 +0011B2r 1 FF E2 .dbyt $ffe2 +0011B4r 1 FF E3 .dbyt $ffe3 +0011B6r 1 FF E4 .dbyt $ffe4 +0011B8r 1 FF E5 .dbyt $ffe5 +0011BAr 1 FF E6 .dbyt $ffe6 +0011BCr 1 FF E7 .dbyt $ffe7 +0011BEr 1 FF E8 .dbyt $ffe8 +0011C0r 1 FF E9 .dbyt $ffe9 +0011C2r 1 FF EA .dbyt $ffea +0011C4r 1 FF EB .dbyt $ffeb +0011C6r 1 FF EC .dbyt $ffec +0011C8r 1 FF ED .dbyt $ffed +0011CAr 1 FF EE .dbyt $ffee +0011CCr 1 FF EF .dbyt $ffef +0011CEr 1 FF F0 .dbyt $fff0 +0011D0r 1 FF F1 .dbyt $fff1 +0011D2r 1 FF F2 .dbyt $fff2 +0011D4r 1 FF F3 .dbyt $fff3 +0011D6r 1 FF F4 .dbyt $fff4 +0011D8r 1 FF F5 .dbyt $fff5 +0011DAr 1 FF F6 .dbyt $fff6 +0011DCr 1 FF F7 .dbyt $fff7 +0011DEr 1 FF F8 .dbyt $fff8 +0011E0r 1 FF F9 .dbyt $fff9 +0011E2r 1 FF FA .dbyt $fffa +0011E4r 1 FF FB .dbyt $fffb +0011E6r 1 FF FC .dbyt $fffc +0011E8r 1 FF FD .dbyt $fffd +0011EAr 1 FF FE .dbyt $fffe +0011ECr 1 FF FF .dbyt $ffff +0011EEr 1 +0011EEr 1 ; 4-digit hex values, uppercase +0011EEr 1 00 00 .dbyt $0000 +0011F0r 1 00 01 .dbyt $0001 +0011F2r 1 00 02 .dbyt $0002 +0011F4r 1 00 03 .dbyt $0003 +0011F6r 1 00 04 .dbyt $0004 +0011F8r 1 00 05 .dbyt $0005 +0011FAr 1 00 06 .dbyt $0006 +0011FCr 1 00 07 .dbyt $0007 +0011FEr 1 00 08 .dbyt $0008 +001200r 1 00 09 .dbyt $0009 +001202r 1 00 0A .dbyt $000A +001204r 1 00 0B .dbyt $000B +001206r 1 00 0C .dbyt $000C +001208r 1 00 0D .dbyt $000D +00120Ar 1 00 0E .dbyt $000E +00120Cr 1 00 0F .dbyt $000F +00120Er 1 00 10 .dbyt $0010 +001210r 1 00 11 .dbyt $0011 +001212r 1 00 12 .dbyt $0012 +001214r 1 00 13 .dbyt $0013 +001216r 1 00 70 .dbyt $0070 +001218r 1 00 71 .dbyt $0071 +00121Ar 1 00 72 .dbyt $0072 +00121Cr 1 00 73 .dbyt $0073 +00121Er 1 00 74 .dbyt $0074 +001220r 1 00 75 .dbyt $0075 +001222r 1 00 76 .dbyt $0076 +001224r 1 00 77 .dbyt $0077 +001226r 1 00 78 .dbyt $0078 +001228r 1 00 79 .dbyt $0079 +00122Ar 1 00 7A .dbyt $007A +00122Cr 1 00 7B .dbyt $007B +00122Er 1 00 7C .dbyt $007C +001230r 1 00 7D .dbyt $007D +001232r 1 00 7E .dbyt $007E +001234r 1 00 7F .dbyt $007F +001236r 1 00 80 .dbyt $0080 +001238r 1 00 81 .dbyt $0081 +00123Ar 1 00 82 .dbyt $0082 +00123Cr 1 00 83 .dbyt $0083 +00123Er 1 00 84 .dbyt $0084 +001240r 1 00 85 .dbyt $0085 +001242r 1 00 86 .dbyt $0086 +001244r 1 00 F0 .dbyt $00F0 +001246r 1 00 F1 .dbyt $00F1 +001248r 1 00 F2 .dbyt $00F2 +00124Ar 1 00 F3 .dbyt $00F3 +00124Cr 1 00 F4 .dbyt $00F4 +00124Er 1 00 F5 .dbyt $00F5 +001250r 1 00 F6 .dbyt $00F6 +001252r 1 00 F7 .dbyt $00F7 +001254r 1 00 F8 .dbyt $00F8 +001256r 1 00 F9 .dbyt $00F9 +001258r 1 00 FA .dbyt $00FA +00125Ar 1 00 FB .dbyt $00FB +00125Cr 1 00 FC .dbyt $00FC +00125Er 1 00 FD .dbyt $00FD +001260r 1 00 FE .dbyt $00FE +001262r 1 00 FF .dbyt $00FF +001264r 1 01 00 .dbyt $0100 +001266r 1 01 01 .dbyt $0101 +001268r 1 01 02 .dbyt $0102 +00126Ar 1 01 03 .dbyt $0103 +00126Cr 1 0F D2 .dbyt $0FD2 +00126Er 1 0F D3 .dbyt $0FD3 +001270r 1 0F D4 .dbyt $0FD4 +001272r 1 0F D5 .dbyt $0FD5 +001274r 1 0F D6 .dbyt $0FD6 +001276r 1 0F D7 .dbyt $0FD7 +001278r 1 0F D8 .dbyt $0FD8 +00127Ar 1 0F D9 .dbyt $0FD9 +00127Cr 1 0F DA .dbyt $0FDA +00127Er 1 0F DB .dbyt $0FDB +001280r 1 0F DC .dbyt $0FDC +001282r 1 0F DD .dbyt $0FDD +001284r 1 0F DE .dbyt $0FDE +001286r 1 0F DF .dbyt $0FDF +001288r 1 0F E0 .dbyt $0FE0 +00128Ar 1 0F E1 .dbyt $0FE1 +00128Cr 1 0F E2 .dbyt $0FE2 +00128Er 1 0F E3 .dbyt $0FE3 +001290r 1 0F E4 .dbyt $0FE4 +001292r 1 0F E5 .dbyt $0FE5 +001294r 1 0F E6 .dbyt $0FE6 +001296r 1 0F E7 .dbyt $0FE7 +001298r 1 0F E8 .dbyt $0FE8 +00129Ar 1 0F E9 .dbyt $0FE9 +00129Cr 1 0F EA .dbyt $0FEA +00129Er 1 0F EB .dbyt $0FEB +0012A0r 1 0F EC .dbyt $0FEC +0012A2r 1 0F ED .dbyt $0FED +0012A4r 1 0F EE .dbyt $0FEE +0012A6r 1 0F EF .dbyt $0FEF +0012A8r 1 0F F0 .dbyt $0FF0 +0012AAr 1 0F F1 .dbyt $0FF1 +0012ACr 1 0F F2 .dbyt $0FF2 +0012AEr 1 0F F3 .dbyt $0FF3 +0012B0r 1 0F F4 .dbyt $0FF4 +0012B2r 1 0F F5 .dbyt $0FF5 +0012B4r 1 0F F6 .dbyt $0FF6 +0012B6r 1 0F F7 .dbyt $0FF7 +0012B8r 1 0F F8 .dbyt $0FF8 +0012BAr 1 0F F9 .dbyt $0FF9 +0012BCr 1 0F FA .dbyt $0FFA +0012BEr 1 0F FB .dbyt $0FFB +0012C0r 1 0F FC .dbyt $0FFC +0012C2r 1 0F FD .dbyt $0FFD +0012C4r 1 0F FE .dbyt $0FFE +0012C6r 1 0F FF .dbyt $0FFF +0012C8r 1 10 00 .dbyt $1000 +0012CAr 1 10 01 .dbyt $1001 +0012CCr 1 10 02 .dbyt $1002 +0012CEr 1 10 03 .dbyt $1003 +0012D0r 1 10 04 .dbyt $1004 +0012D2r 1 10 05 .dbyt $1005 +0012D4r 1 10 06 .dbyt $1006 +0012D6r 1 10 07 .dbyt $1007 +0012D8r 1 10 08 .dbyt $1008 +0012DAr 1 7F F0 .dbyt $7FF0 +0012DCr 1 7F F1 .dbyt $7FF1 +0012DEr 1 7F F2 .dbyt $7FF2 +0012E0r 1 7F F3 .dbyt $7FF3 +0012E2r 1 7F F4 .dbyt $7FF4 +0012E4r 1 7F F5 .dbyt $7FF5 +0012E6r 1 7F F6 .dbyt $7FF6 +0012E8r 1 7F F7 .dbyt $7FF7 +0012EAr 1 7F F8 .dbyt $7FF8 +0012ECr 1 7F F9 .dbyt $7FF9 +0012EEr 1 7F FA .dbyt $7FFA +0012F0r 1 7F FB .dbyt $7FFB +0012F2r 1 7F FC .dbyt $7FFC +0012F4r 1 7F FD .dbyt $7FFD +0012F6r 1 7F FE .dbyt $7FFE +0012F8r 1 7F FF .dbyt $7FFF +0012FAr 1 80 00 .dbyt $8000 +0012FCr 1 80 01 .dbyt $8001 +0012FEr 1 80 02 .dbyt $8002 +001300r 1 80 03 .dbyt $8003 +001302r 1 80 04 .dbyt $8004 +001304r 1 80 05 .dbyt $8005 +001306r 1 80 06 .dbyt $8006 +001308r 1 80 07 .dbyt $8007 +00130Ar 1 80 08 .dbyt $8008 +00130Cr 1 80 09 .dbyt $8009 +00130Er 1 80 0A .dbyt $800A +001310r 1 80 0B .dbyt $800B +001312r 1 9F E1 .dbyt $9FE1 +001314r 1 9F E2 .dbyt $9FE2 +001316r 1 9F E3 .dbyt $9FE3 +001318r 1 9F E4 .dbyt $9FE4 +00131Ar 1 9F E5 .dbyt $9FE5 +00131Cr 1 9F E6 .dbyt $9FE6 +00131Er 1 9F E7 .dbyt $9FE7 +001320r 1 9F E8 .dbyt $9FE8 +001322r 1 9F E9 .dbyt $9FE9 +001324r 1 9F EA .dbyt $9FEA +001326r 1 9F EB .dbyt $9FEB +001328r 1 9F EC .dbyt $9FEC +00132Ar 1 9F ED .dbyt $9FED +00132Cr 1 9F EE .dbyt $9FEE +00132Er 1 9F EF .dbyt $9FEF +001330r 1 9F F0 .dbyt $9FF0 +001332r 1 9F F1 .dbyt $9FF1 +001334r 1 9F F2 .dbyt $9FF2 +001336r 1 9F F3 .dbyt $9FF3 +001338r 1 9F F4 .dbyt $9FF4 +00133Ar 1 9F F5 .dbyt $9FF5 +00133Cr 1 9F F6 .dbyt $9FF6 +00133Er 1 9F F7 .dbyt $9FF7 +001340r 1 9F F8 .dbyt $9FF8 +001342r 1 9F F9 .dbyt $9FF9 +001344r 1 9F FA .dbyt $9FFA +001346r 1 9F FB .dbyt $9FFB +001348r 1 9F FC .dbyt $9FFC +00134Ar 1 9F FD .dbyt $9FFD +00134Cr 1 9F FE .dbyt $9FFE +00134Er 1 9F FF .dbyt $9FFF +001350r 1 A0 00 .dbyt $A000 +001352r 1 A0 01 .dbyt $A001 +001354r 1 A0 02 .dbyt $A002 +001356r 1 A0 03 .dbyt $A003 +001358r 1 A0 04 .dbyt $A004 +00135Ar 1 A0 05 .dbyt $A005 +00135Cr 1 A0 06 .dbyt $A006 +00135Er 1 A0 07 .dbyt $A007 +001360r 1 A0 08 .dbyt $A008 +001362r 1 A0 09 .dbyt $A009 +001364r 1 A0 0A .dbyt $A00A +001366r 1 A0 0B .dbyt $A00B +001368r 1 A0 0C .dbyt $A00C +00136Ar 1 A0 0D .dbyt $A00D +00136Cr 1 A0 0E .dbyt $A00E +00136Er 1 A0 0F .dbyt $A00F +001370r 1 AF E1 .dbyt $AFE1 +001372r 1 AF E2 .dbyt $AFE2 +001374r 1 AF E3 .dbyt $AFE3 +001376r 1 AF E4 .dbyt $AFE4 +001378r 1 AF E5 .dbyt $AFE5 +00137Ar 1 AF E6 .dbyt $AFE6 +00137Cr 1 AF E7 .dbyt $AFE7 +00137Er 1 AF E8 .dbyt $AFE8 +001380r 1 AF E9 .dbyt $AFE9 +001382r 1 AF EA .dbyt $AFEA +001384r 1 AF EB .dbyt $AFEB +001386r 1 AF EC .dbyt $AFEC +001388r 1 AF ED .dbyt $AFED +00138Ar 1 AF EE .dbyt $AFEE +00138Cr 1 AF EF .dbyt $AFEF +00138Er 1 AF F0 .dbyt $AFF0 +001390r 1 AF F1 .dbyt $AFF1 +001392r 1 AF F2 .dbyt $AFF2 +001394r 1 AF F3 .dbyt $AFF3 +001396r 1 AF F4 .dbyt $AFF4 +001398r 1 AF F5 .dbyt $AFF5 +00139Ar 1 AF F6 .dbyt $AFF6 +00139Cr 1 AF F7 .dbyt $AFF7 +00139Er 1 AF F8 .dbyt $AFF8 +0013A0r 1 AF F9 .dbyt $AFF9 +0013A2r 1 AF FA .dbyt $AFFA +0013A4r 1 AF FB .dbyt $AFFB +0013A6r 1 AF FC .dbyt $AFFC +0013A8r 1 AF FD .dbyt $AFFD +0013AAr 1 AF FE .dbyt $AFFE +0013ACr 1 AF FF .dbyt $AFFF +0013AEr 1 B0 00 .dbyt $B000 +0013B0r 1 B0 01 .dbyt $B001 +0013B2r 1 B0 02 .dbyt $B002 +0013B4r 1 B0 03 .dbyt $B003 +0013B6r 1 B0 04 .dbyt $B004 +0013B8r 1 B0 05 .dbyt $B005 +0013BAr 1 B0 06 .dbyt $B006 +0013BCr 1 B0 07 .dbyt $B007 +0013BEr 1 B0 08 .dbyt $B008 +0013C0r 1 B0 09 .dbyt $B009 +0013C2r 1 B0 0A .dbyt $B00A +0013C4r 1 B0 0B .dbyt $B00B +0013C6r 1 B0 0C .dbyt $B00C +0013C8r 1 B0 0D .dbyt $B00D +0013CAr 1 B0 0E .dbyt $B00E +0013CCr 1 B0 0F .dbyt $B00F +0013CEr 1 BF E1 .dbyt $BFE1 +0013D0r 1 BF E2 .dbyt $BFE2 +0013D2r 1 BF E3 .dbyt $BFE3 +0013D4r 1 BF E4 .dbyt $BFE4 +0013D6r 1 BF E5 .dbyt $BFE5 +0013D8r 1 BF E6 .dbyt $BFE6 +0013DAr 1 BF E7 .dbyt $BFE7 +0013DCr 1 BF E8 .dbyt $BFE8 +0013DEr 1 BF E9 .dbyt $BFE9 +0013E0r 1 BF EA .dbyt $BFEA +0013E2r 1 BF EB .dbyt $BFEB +0013E4r 1 BF EC .dbyt $BFEC +0013E6r 1 BF ED .dbyt $BFED +0013E8r 1 BF EE .dbyt $BFEE +0013EAr 1 BF EF .dbyt $BFEF +0013ECr 1 BF F0 .dbyt $BFF0 +0013EEr 1 BF F1 .dbyt $BFF1 +0013F0r 1 BF F2 .dbyt $BFF2 +0013F2r 1 BF F3 .dbyt $BFF3 +0013F4r 1 BF F4 .dbyt $BFF4 +0013F6r 1 BF F5 .dbyt $BFF5 +0013F8r 1 BF F6 .dbyt $BFF6 +0013FAr 1 BF F7 .dbyt $BFF7 +0013FCr 1 BF F8 .dbyt $BFF8 +0013FEr 1 BF F9 .dbyt $BFF9 +001400r 1 BF FA .dbyt $BFFA +001402r 1 BF FB .dbyt $BFFB +001404r 1 BF FC .dbyt $BFFC +001406r 1 BF FD .dbyt $BFFD +001408r 1 BF FE .dbyt $BFFE +00140Ar 1 BF FF .dbyt $BFFF +00140Cr 1 C0 00 .dbyt $C000 +00140Er 1 C0 01 .dbyt $C001 +001410r 1 C0 02 .dbyt $C002 +001412r 1 C0 03 .dbyt $C003 +001414r 1 C0 04 .dbyt $C004 +001416r 1 C0 05 .dbyt $C005 +001418r 1 C0 06 .dbyt $C006 +00141Ar 1 C0 07 .dbyt $C007 +00141Cr 1 C0 08 .dbyt $C008 +00141Er 1 C0 09 .dbyt $C009 +001420r 1 C0 0A .dbyt $C00A +001422r 1 C0 0B .dbyt $C00B +001424r 1 C0 0C .dbyt $C00C +001426r 1 C0 0D .dbyt $C00D +001428r 1 C0 0E .dbyt $C00E +00142Ar 1 C0 0F .dbyt $C00F +00142Cr 1 CF E1 .dbyt $CFE1 +00142Er 1 CF E2 .dbyt $CFE2 +001430r 1 CF E3 .dbyt $CFE3 +001432r 1 CF E4 .dbyt $CFE4 +001434r 1 CF E5 .dbyt $CFE5 +001436r 1 CF E6 .dbyt $CFE6 +001438r 1 CF E7 .dbyt $CFE7 +00143Ar 1 CF E8 .dbyt $CFE8 +00143Cr 1 CF E9 .dbyt $CFE9 +00143Er 1 CF EA .dbyt $CFEA +001440r 1 CF EB .dbyt $CFEB +001442r 1 CF EC .dbyt $CFEC +001444r 1 CF ED .dbyt $CFED +001446r 1 CF EE .dbyt $CFEE +001448r 1 CF EF .dbyt $CFEF +00144Ar 1 CF F0 .dbyt $CFF0 +00144Cr 1 CF F1 .dbyt $CFF1 +00144Er 1 CF F2 .dbyt $CFF2 +001450r 1 CF F3 .dbyt $CFF3 +001452r 1 CF F4 .dbyt $CFF4 +001454r 1 CF F5 .dbyt $CFF5 +001456r 1 CF F6 .dbyt $CFF6 +001458r 1 CF F7 .dbyt $CFF7 +00145Ar 1 CF F8 .dbyt $CFF8 +00145Cr 1 CF F9 .dbyt $CFF9 +00145Er 1 CF FA .dbyt $CFFA +001460r 1 CF FB .dbyt $CFFB +001462r 1 CF FC .dbyt $CFFC +001464r 1 CF FD .dbyt $CFFD +001466r 1 CF FE .dbyt $CFFE +001468r 1 CF FF .dbyt $CFFF +00146Ar 1 D0 00 .dbyt $D000 +00146Cr 1 D0 01 .dbyt $D001 +00146Er 1 D0 02 .dbyt $D002 +001470r 1 D0 03 .dbyt $D003 +001472r 1 D0 04 .dbyt $D004 +001474r 1 D0 05 .dbyt $D005 +001476r 1 D0 06 .dbyt $D006 +001478r 1 D0 07 .dbyt $D007 +00147Ar 1 D0 08 .dbyt $D008 +00147Cr 1 D0 09 .dbyt $D009 +00147Er 1 D0 0A .dbyt $D00A +001480r 1 D0 0B .dbyt $D00B +001482r 1 D0 0C .dbyt $D00C +001484r 1 D0 0D .dbyt $D00D +001486r 1 D0 0E .dbyt $D00E +001488r 1 D0 0F .dbyt $D00F +00148Ar 1 DF E1 .dbyt $DFE1 +00148Cr 1 DF E2 .dbyt $DFE2 +00148Er 1 DF E3 .dbyt $DFE3 +001490r 1 DF E4 .dbyt $DFE4 +001492r 1 DF E5 .dbyt $DFE5 +001494r 1 DF E6 .dbyt $DFE6 +001496r 1 DF E7 .dbyt $DFE7 +001498r 1 DF E8 .dbyt $DFE8 +00149Ar 1 DF E9 .dbyt $DFE9 +00149Cr 1 DF EA .dbyt $DFEA +00149Er 1 DF EB .dbyt $DFEB +0014A0r 1 DF EC .dbyt $DFEC +0014A2r 1 DF ED .dbyt $DFED +0014A4r 1 DF EE .dbyt $DFEE +0014A6r 1 DF EF .dbyt $DFEF +0014A8r 1 DF F0 .dbyt $DFF0 +0014AAr 1 DF F1 .dbyt $DFF1 +0014ACr 1 DF F2 .dbyt $DFF2 +0014AEr 1 DF F3 .dbyt $DFF3 +0014B0r 1 DF F4 .dbyt $DFF4 +0014B2r 1 DF F5 .dbyt $DFF5 +0014B4r 1 DF F6 .dbyt $DFF6 +0014B6r 1 DF F7 .dbyt $DFF7 +0014B8r 1 DF F8 .dbyt $DFF8 +0014BAr 1 DF F9 .dbyt $DFF9 +0014BCr 1 DF FA .dbyt $DFFA +0014BEr 1 DF FB .dbyt $DFFB +0014C0r 1 DF FC .dbyt $DFFC +0014C2r 1 DF FD .dbyt $DFFD +0014C4r 1 DF FE .dbyt $DFFE +0014C6r 1 DF FF .dbyt $DFFF +0014C8r 1 E0 00 .dbyt $E000 +0014CAr 1 E0 01 .dbyt $E001 +0014CCr 1 E0 02 .dbyt $E002 +0014CEr 1 E0 03 .dbyt $E003 +0014D0r 1 E0 04 .dbyt $E004 +0014D2r 1 E0 05 .dbyt $E005 +0014D4r 1 E0 06 .dbyt $E006 +0014D6r 1 E0 07 .dbyt $E007 +0014D8r 1 E0 08 .dbyt $E008 +0014DAr 1 E0 09 .dbyt $E009 +0014DCr 1 E0 0A .dbyt $E00A +0014DEr 1 E0 0B .dbyt $E00B +0014E0r 1 E0 0C .dbyt $E00C +0014E2r 1 E0 0D .dbyt $E00D +0014E4r 1 E0 0E .dbyt $E00E +0014E6r 1 E0 0F .dbyt $E00F +0014E8r 1 EF E1 .dbyt $EFE1 +0014EAr 1 EF E2 .dbyt $EFE2 +0014ECr 1 EF E3 .dbyt $EFE3 +0014EEr 1 EF E4 .dbyt $EFE4 +0014F0r 1 EF E5 .dbyt $EFE5 +0014F2r 1 EF E6 .dbyt $EFE6 +0014F4r 1 EF E7 .dbyt $EFE7 +0014F6r 1 EF E8 .dbyt $EFE8 +0014F8r 1 EF E9 .dbyt $EFE9 +0014FAr 1 EF EA .dbyt $EFEA +0014FCr 1 EF EB .dbyt $EFEB +0014FEr 1 EF EC .dbyt $EFEC +001500r 1 EF ED .dbyt $EFED +001502r 1 EF EE .dbyt $EFEE +001504r 1 EF EF .dbyt $EFEF +001506r 1 EF F0 .dbyt $EFF0 +001508r 1 EF F1 .dbyt $EFF1 +00150Ar 1 EF F2 .dbyt $EFF2 +00150Cr 1 EF F3 .dbyt $EFF3 +00150Er 1 EF F4 .dbyt $EFF4 +001510r 1 EF F5 .dbyt $EFF5 +001512r 1 EF F6 .dbyt $EFF6 +001514r 1 EF F7 .dbyt $EFF7 +001516r 1 EF F8 .dbyt $EFF8 +001518r 1 EF F9 .dbyt $EFF9 +00151Ar 1 EF FA .dbyt $EFFA +00151Cr 1 EF FB .dbyt $EFFB +00151Er 1 EF FC .dbyt $EFFC +001520r 1 EF FD .dbyt $EFFD +001522r 1 EF FE .dbyt $EFFE +001524r 1 EF FF .dbyt $EFFF +001526r 1 F0 00 .dbyt $F000 +001528r 1 F0 01 .dbyt $F001 +00152Ar 1 F0 02 .dbyt $F002 +00152Cr 1 F0 03 .dbyt $F003 +00152Er 1 F0 04 .dbyt $F004 +001530r 1 F0 05 .dbyt $F005 +001532r 1 F0 06 .dbyt $F006 +001534r 1 F0 07 .dbyt $F007 +001536r 1 F0 08 .dbyt $F008 +001538r 1 F0 09 .dbyt $F009 +00153Ar 1 F0 0A .dbyt $F00A +00153Cr 1 F0 0B .dbyt $F00B +00153Er 1 F0 0C .dbyt $F00C +001540r 1 F0 0D .dbyt $F00D +001542r 1 F0 0E .dbyt $F00E +001544r 1 F0 0F .dbyt $F00F +001546r 1 FF E1 .dbyt $FFE1 +001548r 1 FF E2 .dbyt $FFE2 +00154Ar 1 FF E3 .dbyt $FFE3 +00154Cr 1 FF E4 .dbyt $FFE4 +00154Er 1 FF E5 .dbyt $FFE5 +001550r 1 FF E6 .dbyt $FFE6 +001552r 1 FF E7 .dbyt $FFE7 +001554r 1 FF E8 .dbyt $FFE8 +001556r 1 FF E9 .dbyt $FFE9 +001558r 1 FF EA .dbyt $FFEA +00155Ar 1 FF EB .dbyt $FFEB +00155Cr 1 FF EC .dbyt $FFEC +00155Er 1 FF ED .dbyt $FFED +001560r 1 FF EE .dbyt $FFEE +001562r 1 FF EF .dbyt $FFEF +001564r 1 FF F0 .dbyt $FFF0 +001566r 1 FF F1 .dbyt $FFF1 +001568r 1 FF F2 .dbyt $FFF2 +00156Ar 1 FF F3 .dbyt $FFF3 +00156Cr 1 FF F4 .dbyt $FFF4 +00156Er 1 FF F5 .dbyt $FFF5 +001570r 1 FF F6 .dbyt $FFF6 +001572r 1 FF F7 .dbyt $FFF7 +001574r 1 FF F8 .dbyt $FFF8 +001576r 1 FF F9 .dbyt $FFF9 +001578r 1 FF FA .dbyt $FFFA +00157Ar 1 FF FB .dbyt $FFFB +00157Cr 1 FF FC .dbyt $FFFC +00157Er 1 FF FD .dbyt $FFFD +001580r 1 FF FE .dbyt $FFFE +001582r 1 FF FF .dbyt $FFFF +001584r 1 +001584r 1 ; alternative hex values +001584r 1 00 00 .dbyt 0h +001586r 1 00 01 .dbyt 1h +001588r 1 00 02 .dbyt 2h +00158Ar 1 00 03 .dbyt 3h +00158Cr 1 00 04 .dbyt 4h +00158Er 1 00 05 .dbyt 5h +001590r 1 00 06 .dbyt 6h +001592r 1 00 07 .dbyt 7h +001594r 1 00 08 .dbyt 8h +001596r 1 00 09 .dbyt 9h +001598r 1 00 0A .dbyt 0ah +00159Ar 1 00 0B .dbyt 0bh +00159Cr 1 00 0C .dbyt 0ch +00159Er 1 00 0D .dbyt 0dh +0015A0r 1 00 0E .dbyt 0eh +0015A2r 1 00 0F .dbyt 0fh +0015A4r 1 00 10 .dbyt 10h +0015A6r 1 00 11 .dbyt 11h +0015A8r 1 00 12 .dbyt 12h +0015AAr 1 00 13 .dbyt 13h +0015ACr 1 00 70 .dbyt 70h +0015AEr 1 00 71 .dbyt 71h +0015B0r 1 00 72 .dbyt 72h +0015B2r 1 00 73 .dbyt 73h +0015B4r 1 00 74 .dbyt 74h +0015B6r 1 00 75 .dbyt 75h +0015B8r 1 00 76 .dbyt 76h +0015BAr 1 00 77 .dbyt 77h +0015BCr 1 00 78 .dbyt 78h +0015BEr 1 00 79 .dbyt 79h +0015C0r 1 00 7A .dbyt 7ah +0015C2r 1 00 7B .dbyt 7bh +0015C4r 1 00 7C .dbyt 7ch +0015C6r 1 00 7D .dbyt 7dh +0015C8r 1 00 7E .dbyt 7eh +0015CAr 1 00 7F .dbyt 7fh +0015CCr 1 00 80 .dbyt 80h +0015CEr 1 00 81 .dbyt 81h +0015D0r 1 00 82 .dbyt 82h +0015D2r 1 00 83 .dbyt 83h +0015D4r 1 00 84 .dbyt 84h +0015D6r 1 00 85 .dbyt 85h +0015D8r 1 00 86 .dbyt 86h +0015DAr 1 00 F0 .dbyt 0f0h +0015DCr 1 00 F1 .dbyt 0f1h +0015DEr 1 00 F2 .dbyt 0f2h +0015E0r 1 00 F3 .dbyt 0f3h +0015E2r 1 00 F4 .dbyt 0f4h +0015E4r 1 00 F5 .dbyt 0f5h +0015E6r 1 00 F6 .dbyt 0f6h +0015E8r 1 00 F7 .dbyt 0f7h +0015EAr 1 00 F8 .dbyt 0f8h +0015ECr 1 00 F9 .dbyt 0f9h +0015EEr 1 00 FA .dbyt 0fah +0015F0r 1 00 FB .dbyt 0fbh +0015F2r 1 00 FC .dbyt 0fch +0015F4r 1 00 FD .dbyt 0fdh +0015F6r 1 00 FE .dbyt 0feh +0015F8r 1 00 FF .dbyt 0ffh +0015FAr 1 01 00 .dbyt 100h +0015FCr 1 01 01 .dbyt 101h +0015FEr 1 01 02 .dbyt 102h +001600r 1 01 03 .dbyt 103h +001602r 1 0F D2 .dbyt 0fd2h +001604r 1 0F D3 .dbyt 0fd3h +001606r 1 0F D4 .dbyt 0fd4h +001608r 1 0F D5 .dbyt 0fd5h +00160Ar 1 0F D6 .dbyt 0fd6h +00160Cr 1 0F D7 .dbyt 0fd7h +00160Er 1 0F D8 .dbyt 0fd8h +001610r 1 0F D9 .dbyt 0fd9h +001612r 1 0F DA .dbyt 0fdah +001614r 1 0F DB .dbyt 0fdbh +001616r 1 0F DC .dbyt 0fdch +001618r 1 0F DD .dbyt 0fddh +00161Ar 1 0F DE .dbyt 0fdeh +00161Cr 1 0F DF .dbyt 0fdfh +00161Er 1 0F E0 .dbyt 0fe0h +001620r 1 0F E1 .dbyt 0fe1h +001622r 1 0F E2 .dbyt 0fe2h +001624r 1 0F E3 .dbyt 0fe3h +001626r 1 0F E4 .dbyt 0fe4h +001628r 1 0F E5 .dbyt 0fe5h +00162Ar 1 0F E6 .dbyt 0fe6h +00162Cr 1 0F E7 .dbyt 0fe7h +00162Er 1 0F E8 .dbyt 0fe8h +001630r 1 0F E9 .dbyt 0fe9h +001632r 1 0F EA .dbyt 0feah +001634r 1 0F EB .dbyt 0febh +001636r 1 0F EC .dbyt 0fech +001638r 1 0F ED .dbyt 0fedh +00163Ar 1 0F EE .dbyt 0feeh +00163Cr 1 0F EF .dbyt 0fefh +00163Er 1 0F F0 .dbyt 0ff0h +001640r 1 0F F1 .dbyt 0ff1h +001642r 1 0F F2 .dbyt 0ff2h +001644r 1 0F F3 .dbyt 0ff3h +001646r 1 0F F4 .dbyt 0ff4h +001648r 1 0F F5 .dbyt 0ff5h +00164Ar 1 0F F6 .dbyt 0ff6h +00164Cr 1 0F F7 .dbyt 0ff7h +00164Er 1 0F F8 .dbyt 0ff8h +001650r 1 0F F9 .dbyt 0ff9h +001652r 1 0F FA .dbyt 0ffah +001654r 1 0F FB .dbyt 0ffbh +001656r 1 0F FC .dbyt 0ffch +001658r 1 0F FD .dbyt 0ffdh +00165Ar 1 0F FE .dbyt 0ffeh +00165Cr 1 0F FF .dbyt 0fffh +00165Er 1 10 00 .dbyt 1000h +001660r 1 10 01 .dbyt 1001h +001662r 1 10 02 .dbyt 1002h +001664r 1 10 03 .dbyt 1003h +001666r 1 10 04 .dbyt 1004h +001668r 1 10 05 .dbyt 1005h +00166Ar 1 10 06 .dbyt 1006h +00166Cr 1 10 07 .dbyt 1007h +00166Er 1 10 08 .dbyt 1008h +001670r 1 7F F0 .dbyt 7ff0h +001672r 1 7F F1 .dbyt 7ff1h +001674r 1 7F F2 .dbyt 7ff2h +001676r 1 7F F3 .dbyt 7ff3h +001678r 1 7F F4 .dbyt 7ff4h +00167Ar 1 7F F5 .dbyt 7ff5h +00167Cr 1 7F F6 .dbyt 7ff6h +00167Er 1 7F F7 .dbyt 7ff7h +001680r 1 7F F8 .dbyt 7ff8h +001682r 1 7F F9 .dbyt 7ff9h +001684r 1 7F FA .dbyt 7ffah +001686r 1 7F FB .dbyt 7ffbh +001688r 1 7F FC .dbyt 7ffch +00168Ar 1 7F FD .dbyt 7ffdh +00168Cr 1 7F FE .dbyt 7ffeh +00168Er 1 7F FF .dbyt 7fffh +001690r 1 80 00 .dbyt 8000h +001692r 1 80 01 .dbyt 8001h +001694r 1 80 02 .dbyt 8002h +001696r 1 80 03 .dbyt 8003h +001698r 1 80 04 .dbyt 8004h +00169Ar 1 80 05 .dbyt 8005h +00169Cr 1 80 06 .dbyt 8006h +00169Er 1 80 07 .dbyt 8007h +0016A0r 1 80 08 .dbyt 8008h +0016A2r 1 80 09 .dbyt 8009h +0016A4r 1 80 0A .dbyt 800ah +0016A6r 1 80 0B .dbyt 800bh +0016A8r 1 9F E1 .dbyt 9fe1h +0016AAr 1 9F E2 .dbyt 9fe2h +0016ACr 1 9F E3 .dbyt 9fe3h +0016AEr 1 9F E4 .dbyt 9fe4h +0016B0r 1 9F E5 .dbyt 9fe5h +0016B2r 1 9F E6 .dbyt 9fe6h +0016B4r 1 9F E7 .dbyt 9fe7h +0016B6r 1 9F E8 .dbyt 9fe8h +0016B8r 1 9F E9 .dbyt 9fe9h +0016BAr 1 9F EA .dbyt 9feah +0016BCr 1 9F EB .dbyt 9febh +0016BEr 1 9F EC .dbyt 9fech +0016C0r 1 9F ED .dbyt 9fedh +0016C2r 1 9F EE .dbyt 9feeh +0016C4r 1 9F EF .dbyt 9fefh +0016C6r 1 9F F0 .dbyt 9ff0h +0016C8r 1 9F F1 .dbyt 9ff1h +0016CAr 1 9F F2 .dbyt 9ff2h +0016CCr 1 9F F3 .dbyt 9ff3h +0016CEr 1 9F F4 .dbyt 9ff4h +0016D0r 1 9F F5 .dbyt 9ff5h +0016D2r 1 9F F6 .dbyt 9ff6h +0016D4r 1 9F F7 .dbyt 9ff7h +0016D6r 1 9F F8 .dbyt 9ff8h +0016D8r 1 9F F9 .dbyt 9ff9h +0016DAr 1 9F FA .dbyt 9ffah +0016DCr 1 9F FB .dbyt 9ffbh +0016DEr 1 9F FC .dbyt 9ffch +0016E0r 1 9F FD .dbyt 9ffdh +0016E2r 1 9F FE .dbyt 9ffeh +0016E4r 1 9F FF .dbyt 9fffh +0016E6r 1 A0 00 .dbyt 0a000h +0016E8r 1 A0 01 .dbyt 0a001h +0016EAr 1 A0 02 .dbyt 0a002h +0016ECr 1 A0 03 .dbyt 0a003h +0016EEr 1 A0 04 .dbyt 0a004h +0016F0r 1 A0 05 .dbyt 0a005h +0016F2r 1 A0 06 .dbyt 0a006h +0016F4r 1 A0 07 .dbyt 0a007h +0016F6r 1 A0 08 .dbyt 0a008h +0016F8r 1 A0 09 .dbyt 0a009h +0016FAr 1 A0 0A .dbyt 0a00ah +0016FCr 1 A0 0B .dbyt 0a00bh +0016FEr 1 A0 0C .dbyt 0a00ch +001700r 1 A0 0D .dbyt 0a00dh +001702r 1 A0 0E .dbyt 0a00eh +001704r 1 A0 0F .dbyt 0a00fh +001706r 1 AF E1 .dbyt 0afe1h +001708r 1 AF E2 .dbyt 0afe2h +00170Ar 1 AF E3 .dbyt 0afe3h +00170Cr 1 AF E4 .dbyt 0afe4h +00170Er 1 AF E5 .dbyt 0afe5h +001710r 1 AF E6 .dbyt 0afe6h +001712r 1 AF E7 .dbyt 0afe7h +001714r 1 AF E8 .dbyt 0afe8h +001716r 1 AF E9 .dbyt 0afe9h +001718r 1 AF EA .dbyt 0afeah +00171Ar 1 AF EB .dbyt 0afebh +00171Cr 1 AF EC .dbyt 0afech +00171Er 1 AF ED .dbyt 0afedh +001720r 1 AF EE .dbyt 0afeeh +001722r 1 AF EF .dbyt 0afefh +001724r 1 AF F0 .dbyt 0aff0h +001726r 1 AF F1 .dbyt 0aff1h +001728r 1 AF F2 .dbyt 0aff2h +00172Ar 1 AF F3 .dbyt 0aff3h +00172Cr 1 AF F4 .dbyt 0aff4h +00172Er 1 AF F5 .dbyt 0aff5h +001730r 1 AF F6 .dbyt 0aff6h +001732r 1 AF F7 .dbyt 0aff7h +001734r 1 AF F8 .dbyt 0aff8h +001736r 1 AF F9 .dbyt 0aff9h +001738r 1 AF FA .dbyt 0affah +00173Ar 1 AF FB .dbyt 0affbh +00173Cr 1 AF FC .dbyt 0affch +00173Er 1 AF FD .dbyt 0affdh +001740r 1 AF FE .dbyt 0affeh +001742r 1 AF FF .dbyt 0afffh +001744r 1 B0 00 .dbyt 0b000h +001746r 1 B0 01 .dbyt 0b001h +001748r 1 B0 02 .dbyt 0b002h +00174Ar 1 B0 03 .dbyt 0b003h +00174Cr 1 B0 04 .dbyt 0b004h +00174Er 1 B0 05 .dbyt 0b005h +001750r 1 B0 06 .dbyt 0b006h +001752r 1 B0 07 .dbyt 0b007h +001754r 1 B0 08 .dbyt 0b008h +001756r 1 B0 09 .dbyt 0b009h +001758r 1 B0 0A .dbyt 0b00ah +00175Ar 1 B0 0B .dbyt 0b00bh +00175Cr 1 B0 0C .dbyt 0b00ch +00175Er 1 B0 0D .dbyt 0b00dh +001760r 1 B0 0E .dbyt 0b00eh +001762r 1 B0 0F .dbyt 0b00fh +001764r 1 BF E1 .dbyt 0bfe1h +001766r 1 BF E2 .dbyt 0bfe2h +001768r 1 BF E3 .dbyt 0bfe3h +00176Ar 1 BF E4 .dbyt 0bfe4h +00176Cr 1 BF E5 .dbyt 0bfe5h +00176Er 1 BF E6 .dbyt 0bfe6h +001770r 1 BF E7 .dbyt 0bfe7h +001772r 1 BF E8 .dbyt 0bfe8h +001774r 1 BF E9 .dbyt 0bfe9h +001776r 1 BF EA .dbyt 0bfeah +001778r 1 BF EB .dbyt 0bfebh +00177Ar 1 BF EC .dbyt 0bfech +00177Cr 1 BF ED .dbyt 0bfedh +00177Er 1 BF EE .dbyt 0bfeeh +001780r 1 BF EF .dbyt 0bfefh +001782r 1 BF F0 .dbyt 0bff0h +001784r 1 BF F1 .dbyt 0bff1h +001786r 1 BF F2 .dbyt 0bff2h +001788r 1 BF F3 .dbyt 0bff3h +00178Ar 1 BF F4 .dbyt 0bff4h +00178Cr 1 BF F5 .dbyt 0bff5h +00178Er 1 BF F6 .dbyt 0bff6h +001790r 1 BF F7 .dbyt 0bff7h +001792r 1 BF F8 .dbyt 0bff8h +001794r 1 BF F9 .dbyt 0bff9h +001796r 1 BF FA .dbyt 0bffah +001798r 1 BF FB .dbyt 0bffbh +00179Ar 1 BF FC .dbyt 0bffch +00179Cr 1 BF FD .dbyt 0bffdh +00179Er 1 BF FE .dbyt 0bffeh +0017A0r 1 BF FF .dbyt 0bfffh +0017A2r 1 C0 00 .dbyt 0c000h +0017A4r 1 C0 01 .dbyt 0c001h +0017A6r 1 C0 02 .dbyt 0c002h +0017A8r 1 C0 03 .dbyt 0c003h +0017AAr 1 C0 04 .dbyt 0c004h +0017ACr 1 C0 05 .dbyt 0c005h +0017AEr 1 C0 06 .dbyt 0c006h +0017B0r 1 C0 07 .dbyt 0c007h +0017B2r 1 C0 08 .dbyt 0c008h +0017B4r 1 C0 09 .dbyt 0c009h +0017B6r 1 C0 0A .dbyt 0c00ah +0017B8r 1 C0 0B .dbyt 0c00bh +0017BAr 1 C0 0C .dbyt 0c00ch +0017BCr 1 C0 0D .dbyt 0c00dh +0017BEr 1 C0 0E .dbyt 0c00eh +0017C0r 1 C0 0F .dbyt 0c00fh +0017C2r 1 CF E1 .dbyt 0cfe1h +0017C4r 1 CF E2 .dbyt 0cfe2h +0017C6r 1 CF E3 .dbyt 0cfe3h +0017C8r 1 CF E4 .dbyt 0cfe4h +0017CAr 1 CF E5 .dbyt 0cfe5h +0017CCr 1 CF E6 .dbyt 0cfe6h +0017CEr 1 CF E7 .dbyt 0cfe7h +0017D0r 1 CF E8 .dbyt 0cfe8h +0017D2r 1 CF E9 .dbyt 0cfe9h +0017D4r 1 CF EA .dbyt 0cfeah +0017D6r 1 CF EB .dbyt 0cfebh +0017D8r 1 CF EC .dbyt 0cfech +0017DAr 1 CF ED .dbyt 0cfedh +0017DCr 1 CF EE .dbyt 0cfeeh +0017DEr 1 CF EF .dbyt 0cfefh +0017E0r 1 CF F0 .dbyt 0cff0h +0017E2r 1 CF F1 .dbyt 0cff1h +0017E4r 1 CF F2 .dbyt 0cff2h +0017E6r 1 CF F3 .dbyt 0cff3h +0017E8r 1 CF F4 .dbyt 0cff4h +0017EAr 1 CF F5 .dbyt 0cff5h +0017ECr 1 CF F6 .dbyt 0cff6h +0017EEr 1 CF F7 .dbyt 0cff7h +0017F0r 1 CF F8 .dbyt 0cff8h +0017F2r 1 CF F9 .dbyt 0cff9h +0017F4r 1 CF FA .dbyt 0cffah +0017F6r 1 CF FB .dbyt 0cffbh +0017F8r 1 CF FC .dbyt 0cffch +0017FAr 1 CF FD .dbyt 0cffdh +0017FCr 1 CF FE .dbyt 0cffeh +0017FEr 1 CF FF .dbyt 0cfffh +001800r 1 D0 00 .dbyt 0d000h +001802r 1 D0 01 .dbyt 0d001h +001804r 1 D0 02 .dbyt 0d002h +001806r 1 D0 03 .dbyt 0d003h +001808r 1 D0 04 .dbyt 0d004h +00180Ar 1 D0 05 .dbyt 0d005h +00180Cr 1 D0 06 .dbyt 0d006h +00180Er 1 D0 07 .dbyt 0d007h +001810r 1 D0 08 .dbyt 0d008h +001812r 1 D0 09 .dbyt 0d009h +001814r 1 D0 0A .dbyt 0d00ah +001816r 1 D0 0B .dbyt 0d00bh +001818r 1 D0 0C .dbyt 0d00ch +00181Ar 1 D0 0D .dbyt 0d00dh +00181Cr 1 D0 0E .dbyt 0d00eh +00181Er 1 D0 0F .dbyt 0d00fh +001820r 1 DF E1 .dbyt 0dfe1h +001822r 1 DF E2 .dbyt 0dfe2h +001824r 1 DF E3 .dbyt 0dfe3h +001826r 1 DF E4 .dbyt 0dfe4h +001828r 1 DF E5 .dbyt 0dfe5h +00182Ar 1 DF E6 .dbyt 0dfe6h +00182Cr 1 DF E7 .dbyt 0dfe7h +00182Er 1 DF E8 .dbyt 0dfe8h +001830r 1 DF E9 .dbyt 0dfe9h +001832r 1 DF EA .dbyt 0dfeah +001834r 1 DF EB .dbyt 0dfebh +001836r 1 DF EC .dbyt 0dfech +001838r 1 DF ED .dbyt 0dfedh +00183Ar 1 DF EE .dbyt 0dfeeh +00183Cr 1 DF EF .dbyt 0dfefh +00183Er 1 DF F0 .dbyt 0dff0h +001840r 1 DF F1 .dbyt 0dff1h +001842r 1 DF F2 .dbyt 0dff2h +001844r 1 DF F3 .dbyt 0dff3h +001846r 1 DF F4 .dbyt 0dff4h +001848r 1 DF F5 .dbyt 0dff5h +00184Ar 1 DF F6 .dbyt 0dff6h +00184Cr 1 DF F7 .dbyt 0dff7h +00184Er 1 DF F8 .dbyt 0dff8h +001850r 1 DF F9 .dbyt 0dff9h +001852r 1 DF FA .dbyt 0dffah +001854r 1 DF FB .dbyt 0dffbh +001856r 1 DF FC .dbyt 0dffch +001858r 1 DF FD .dbyt 0dffdh +00185Ar 1 DF FE .dbyt 0dffeh +00185Cr 1 DF FF .dbyt 0dfffh +00185Er 1 E0 00 .dbyt 0e000h +001860r 1 E0 01 .dbyt 0e001h +001862r 1 E0 02 .dbyt 0e002h +001864r 1 E0 03 .dbyt 0e003h +001866r 1 E0 04 .dbyt 0e004h +001868r 1 E0 05 .dbyt 0e005h +00186Ar 1 E0 06 .dbyt 0e006h +00186Cr 1 E0 07 .dbyt 0e007h +00186Er 1 E0 08 .dbyt 0e008h +001870r 1 E0 09 .dbyt 0e009h +001872r 1 E0 0A .dbyt 0e00ah +001874r 1 E0 0B .dbyt 0e00bh +001876r 1 E0 0C .dbyt 0e00ch +001878r 1 E0 0D .dbyt 0e00dh +00187Ar 1 E0 0E .dbyt 0e00eh +00187Cr 1 E0 0F .dbyt 0e00fh +00187Er 1 EF E1 .dbyt 0efe1h +001880r 1 EF E2 .dbyt 0efe2h +001882r 1 EF E3 .dbyt 0efe3h +001884r 1 EF E4 .dbyt 0efe4h +001886r 1 EF E5 .dbyt 0efe5h +001888r 1 EF E6 .dbyt 0efe6h +00188Ar 1 EF E7 .dbyt 0efe7h +00188Cr 1 EF E8 .dbyt 0efe8h +00188Er 1 EF E9 .dbyt 0efe9h +001890r 1 EF EA .dbyt 0efeah +001892r 1 EF EB .dbyt 0efebh +001894r 1 EF EC .dbyt 0efech +001896r 1 EF ED .dbyt 0efedh +001898r 1 EF EE .dbyt 0efeeh +00189Ar 1 EF EF .dbyt 0efefh +00189Cr 1 EF F0 .dbyt 0eff0h +00189Er 1 EF F1 .dbyt 0eff1h +0018A0r 1 EF F2 .dbyt 0eff2h +0018A2r 1 EF F3 .dbyt 0eff3h +0018A4r 1 EF F4 .dbyt 0eff4h +0018A6r 1 EF F5 .dbyt 0eff5h +0018A8r 1 EF F6 .dbyt 0eff6h +0018AAr 1 EF F7 .dbyt 0eff7h +0018ACr 1 EF F8 .dbyt 0eff8h +0018AEr 1 EF F9 .dbyt 0eff9h +0018B0r 1 EF FA .dbyt 0effah +0018B2r 1 EF FB .dbyt 0effbh +0018B4r 1 EF FC .dbyt 0effch +0018B6r 1 EF FD .dbyt 0effdh +0018B8r 1 EF FE .dbyt 0effeh +0018BAr 1 EF FF .dbyt 0efffh +0018BCr 1 F0 00 .dbyt 0f000h +0018BEr 1 F0 01 .dbyt 0f001h +0018C0r 1 F0 02 .dbyt 0f002h +0018C2r 1 F0 03 .dbyt 0f003h +0018C4r 1 F0 04 .dbyt 0f004h +0018C6r 1 F0 05 .dbyt 0f005h +0018C8r 1 F0 06 .dbyt 0f006h +0018CAr 1 F0 07 .dbyt 0f007h +0018CCr 1 F0 08 .dbyt 0f008h +0018CEr 1 F0 09 .dbyt 0f009h +0018D0r 1 F0 0A .dbyt 0f00ah +0018D2r 1 F0 0B .dbyt 0f00bh +0018D4r 1 F0 0C .dbyt 0f00ch +0018D6r 1 F0 0D .dbyt 0f00dh +0018D8r 1 F0 0E .dbyt 0f00eh +0018DAr 1 F0 0F .dbyt 0f00fh +0018DCr 1 FF E1 .dbyt 0ffe1h +0018DEr 1 FF E2 .dbyt 0ffe2h +0018E0r 1 FF E3 .dbyt 0ffe3h +0018E2r 1 FF E4 .dbyt 0ffe4h +0018E4r 1 FF E5 .dbyt 0ffe5h +0018E6r 1 FF E6 .dbyt 0ffe6h +0018E8r 1 FF E7 .dbyt 0ffe7h +0018EAr 1 FF E8 .dbyt 0ffe8h +0018ECr 1 FF E9 .dbyt 0ffe9h +0018EEr 1 FF EA .dbyt 0ffeah +0018F0r 1 FF EB .dbyt 0ffebh +0018F2r 1 FF EC .dbyt 0ffech +0018F4r 1 FF ED .dbyt 0ffedh +0018F6r 1 FF EE .dbyt 0ffeeh +0018F8r 1 FF EF .dbyt 0ffefh +0018FAr 1 FF F0 .dbyt 0fff0h +0018FCr 1 FF F1 .dbyt 0fff1h +0018FEr 1 FF F2 .dbyt 0fff2h +001900r 1 FF F3 .dbyt 0fff3h +001902r 1 FF F4 .dbyt 0fff4h +001904r 1 FF F5 .dbyt 0fff5h +001906r 1 FF F6 .dbyt 0fff6h +001908r 1 FF F7 .dbyt 0fff7h +00190Ar 1 FF F8 .dbyt 0fff8h +00190Cr 1 FF F9 .dbyt 0fff9h +00190Er 1 FF FA .dbyt 0fffah +001910r 1 FF FB .dbyt 0fffbh +001912r 1 FF FC .dbyt 0fffch +001914r 1 FF FD .dbyt 0fffdh +001916r 1 FF FE .dbyt 0fffeh +001918r 1 FF FF .dbyt 0ffffh +00191Ar 1 +00191Ar 1 ; alternative hex values, uppercase +00191Ar 1 00 00 .dbyt 0h +00191Cr 1 00 01 .dbyt 1h +00191Er 1 00 02 .dbyt 2h +001920r 1 00 03 .dbyt 3h +001922r 1 00 04 .dbyt 4h +001924r 1 00 05 .dbyt 5h +001926r 1 00 06 .dbyt 6h +001928r 1 00 07 .dbyt 7h +00192Ar 1 00 08 .dbyt 8h +00192Cr 1 00 09 .dbyt 9h +00192Er 1 00 0A .dbyt 0Ah +001930r 1 00 0B .dbyt 0Bh +001932r 1 00 0C .dbyt 0Ch +001934r 1 00 0D .dbyt 0Dh +001936r 1 00 0E .dbyt 0Eh +001938r 1 00 0F .dbyt 0Fh +00193Ar 1 00 10 .dbyt 10h +00193Cr 1 00 11 .dbyt 11h +00193Er 1 00 12 .dbyt 12h +001940r 1 00 13 .dbyt 13h +001942r 1 00 70 .dbyt 70h +001944r 1 00 71 .dbyt 71h +001946r 1 00 72 .dbyt 72h +001948r 1 00 73 .dbyt 73h +00194Ar 1 00 74 .dbyt 74h +00194Cr 1 00 75 .dbyt 75h +00194Er 1 00 76 .dbyt 76h +001950r 1 00 77 .dbyt 77h +001952r 1 00 78 .dbyt 78h +001954r 1 00 79 .dbyt 79h +001956r 1 00 7A .dbyt 7Ah +001958r 1 00 7B .dbyt 7Bh +00195Ar 1 00 7C .dbyt 7Ch +00195Cr 1 00 7D .dbyt 7Dh +00195Er 1 00 7E .dbyt 7Eh +001960r 1 00 7F .dbyt 7Fh +001962r 1 00 80 .dbyt 80h +001964r 1 00 81 .dbyt 81h +001966r 1 00 82 .dbyt 82h +001968r 1 00 83 .dbyt 83h +00196Ar 1 00 84 .dbyt 84h +00196Cr 1 00 85 .dbyt 85h +00196Er 1 00 86 .dbyt 86h +001970r 1 00 F0 .dbyt 0F0h +001972r 1 00 F1 .dbyt 0F1h +001974r 1 00 F2 .dbyt 0F2h +001976r 1 00 F3 .dbyt 0F3h +001978r 1 00 F4 .dbyt 0F4h +00197Ar 1 00 F5 .dbyt 0F5h +00197Cr 1 00 F6 .dbyt 0F6h +00197Er 1 00 F7 .dbyt 0F7h +001980r 1 00 F8 .dbyt 0F8h +001982r 1 00 F9 .dbyt 0F9h +001984r 1 00 FA .dbyt 0FAh +001986r 1 00 FB .dbyt 0FBh +001988r 1 00 FC .dbyt 0FCh +00198Ar 1 00 FD .dbyt 0FDh +00198Cr 1 00 FE .dbyt 0FEh +00198Er 1 00 FF .dbyt 0FFh +001990r 1 01 00 .dbyt 100h +001992r 1 01 01 .dbyt 101h +001994r 1 01 02 .dbyt 102h +001996r 1 01 03 .dbyt 103h +001998r 1 0F D2 .dbyt 0FD2h +00199Ar 1 0F D3 .dbyt 0FD3h +00199Cr 1 0F D4 .dbyt 0FD4h +00199Er 1 0F D5 .dbyt 0FD5h +0019A0r 1 0F D6 .dbyt 0FD6h +0019A2r 1 0F D7 .dbyt 0FD7h +0019A4r 1 0F D8 .dbyt 0FD8h +0019A6r 1 0F D9 .dbyt 0FD9h +0019A8r 1 0F DA .dbyt 0FDAh +0019AAr 1 0F DB .dbyt 0FDBh +0019ACr 1 0F DC .dbyt 0FDCh +0019AEr 1 0F DD .dbyt 0FDDh +0019B0r 1 0F DE .dbyt 0FDEh +0019B2r 1 0F DF .dbyt 0FDFh +0019B4r 1 0F E0 .dbyt 0FE0h +0019B6r 1 0F E1 .dbyt 0FE1h +0019B8r 1 0F E2 .dbyt 0FE2h +0019BAr 1 0F E3 .dbyt 0FE3h +0019BCr 1 0F E4 .dbyt 0FE4h +0019BEr 1 0F E5 .dbyt 0FE5h +0019C0r 1 0F E6 .dbyt 0FE6h +0019C2r 1 0F E7 .dbyt 0FE7h +0019C4r 1 0F E8 .dbyt 0FE8h +0019C6r 1 0F E9 .dbyt 0FE9h +0019C8r 1 0F EA .dbyt 0FEAh +0019CAr 1 0F EB .dbyt 0FEBh +0019CCr 1 0F EC .dbyt 0FECh +0019CEr 1 0F ED .dbyt 0FEDh +0019D0r 1 0F EE .dbyt 0FEEh +0019D2r 1 0F EF .dbyt 0FEFh +0019D4r 1 0F F0 .dbyt 0FF0h +0019D6r 1 0F F1 .dbyt 0FF1h +0019D8r 1 0F F2 .dbyt 0FF2h +0019DAr 1 0F F3 .dbyt 0FF3h +0019DCr 1 0F F4 .dbyt 0FF4h +0019DEr 1 0F F5 .dbyt 0FF5h +0019E0r 1 0F F6 .dbyt 0FF6h +0019E2r 1 0F F7 .dbyt 0FF7h +0019E4r 1 0F F8 .dbyt 0FF8h +0019E6r 1 0F F9 .dbyt 0FF9h +0019E8r 1 0F FA .dbyt 0FFAh +0019EAr 1 0F FB .dbyt 0FFBh +0019ECr 1 0F FC .dbyt 0FFCh +0019EEr 1 0F FD .dbyt 0FFDh +0019F0r 1 0F FE .dbyt 0FFEh +0019F2r 1 0F FF .dbyt 0FFFh +0019F4r 1 10 00 .dbyt 1000h +0019F6r 1 10 01 .dbyt 1001h +0019F8r 1 10 02 .dbyt 1002h +0019FAr 1 10 03 .dbyt 1003h +0019FCr 1 10 04 .dbyt 1004h +0019FEr 1 10 05 .dbyt 1005h +001A00r 1 10 06 .dbyt 1006h +001A02r 1 10 07 .dbyt 1007h +001A04r 1 10 08 .dbyt 1008h +001A06r 1 7F F0 .dbyt 7FF0h +001A08r 1 7F F1 .dbyt 7FF1h +001A0Ar 1 7F F2 .dbyt 7FF2h +001A0Cr 1 7F F3 .dbyt 7FF3h +001A0Er 1 7F F4 .dbyt 7FF4h +001A10r 1 7F F5 .dbyt 7FF5h +001A12r 1 7F F6 .dbyt 7FF6h +001A14r 1 7F F7 .dbyt 7FF7h +001A16r 1 7F F8 .dbyt 7FF8h +001A18r 1 7F F9 .dbyt 7FF9h +001A1Ar 1 7F FA .dbyt 7FFAh +001A1Cr 1 7F FB .dbyt 7FFBh +001A1Er 1 7F FC .dbyt 7FFCh +001A20r 1 7F FD .dbyt 7FFDh +001A22r 1 7F FE .dbyt 7FFEh +001A24r 1 7F FF .dbyt 7FFFh +001A26r 1 80 00 .dbyt 8000h +001A28r 1 80 01 .dbyt 8001h +001A2Ar 1 80 02 .dbyt 8002h +001A2Cr 1 80 03 .dbyt 8003h +001A2Er 1 80 04 .dbyt 8004h +001A30r 1 80 05 .dbyt 8005h +001A32r 1 80 06 .dbyt 8006h +001A34r 1 80 07 .dbyt 8007h +001A36r 1 80 08 .dbyt 8008h +001A38r 1 80 09 .dbyt 8009h +001A3Ar 1 80 0A .dbyt 800Ah +001A3Cr 1 80 0B .dbyt 800Bh +001A3Er 1 9F E1 .dbyt 9FE1h +001A40r 1 9F E2 .dbyt 9FE2h +001A42r 1 9F E3 .dbyt 9FE3h +001A44r 1 9F E4 .dbyt 9FE4h +001A46r 1 9F E5 .dbyt 9FE5h +001A48r 1 9F E6 .dbyt 9FE6h +001A4Ar 1 9F E7 .dbyt 9FE7h +001A4Cr 1 9F E8 .dbyt 9FE8h +001A4Er 1 9F E9 .dbyt 9FE9h +001A50r 1 9F EA .dbyt 9FEAh +001A52r 1 9F EB .dbyt 9FEBh +001A54r 1 9F EC .dbyt 9FECh +001A56r 1 9F ED .dbyt 9FEDh +001A58r 1 9F EE .dbyt 9FEEh +001A5Ar 1 9F EF .dbyt 9FEFh +001A5Cr 1 9F F0 .dbyt 9FF0h +001A5Er 1 9F F1 .dbyt 9FF1h +001A60r 1 9F F2 .dbyt 9FF2h +001A62r 1 9F F3 .dbyt 9FF3h +001A64r 1 9F F4 .dbyt 9FF4h +001A66r 1 9F F5 .dbyt 9FF5h +001A68r 1 9F F6 .dbyt 9FF6h +001A6Ar 1 9F F7 .dbyt 9FF7h +001A6Cr 1 9F F8 .dbyt 9FF8h +001A6Er 1 9F F9 .dbyt 9FF9h +001A70r 1 9F FA .dbyt 9FFAh +001A72r 1 9F FB .dbyt 9FFBh +001A74r 1 9F FC .dbyt 9FFCh +001A76r 1 9F FD .dbyt 9FFDh +001A78r 1 9F FE .dbyt 9FFEh +001A7Ar 1 9F FF .dbyt 9FFFh +001A7Cr 1 A0 00 .dbyt 0A000h +001A7Er 1 A0 01 .dbyt 0A001h +001A80r 1 A0 02 .dbyt 0A002h +001A82r 1 A0 03 .dbyt 0A003h +001A84r 1 A0 04 .dbyt 0A004h +001A86r 1 A0 05 .dbyt 0A005h +001A88r 1 A0 06 .dbyt 0A006h +001A8Ar 1 A0 07 .dbyt 0A007h +001A8Cr 1 A0 08 .dbyt 0A008h +001A8Er 1 A0 09 .dbyt 0A009h +001A90r 1 A0 0A .dbyt 0A00Ah +001A92r 1 A0 0B .dbyt 0A00Bh +001A94r 1 A0 0C .dbyt 0A00Ch +001A96r 1 A0 0D .dbyt 0A00Dh +001A98r 1 A0 0E .dbyt 0A00Eh +001A9Ar 1 A0 0F .dbyt 0A00Fh +001A9Cr 1 AF E1 .dbyt 0AFE1h +001A9Er 1 AF E2 .dbyt 0AFE2h +001AA0r 1 AF E3 .dbyt 0AFE3h +001AA2r 1 AF E4 .dbyt 0AFE4h +001AA4r 1 AF E5 .dbyt 0AFE5h +001AA6r 1 AF E6 .dbyt 0AFE6h +001AA8r 1 AF E7 .dbyt 0AFE7h +001AAAr 1 AF E8 .dbyt 0AFE8h +001AACr 1 AF E9 .dbyt 0AFE9h +001AAEr 1 AF EA .dbyt 0AFEAh +001AB0r 1 AF EB .dbyt 0AFEBh +001AB2r 1 AF EC .dbyt 0AFECh +001AB4r 1 AF ED .dbyt 0AFEDh +001AB6r 1 AF EE .dbyt 0AFEEh +001AB8r 1 AF EF .dbyt 0AFEFh +001ABAr 1 AF F0 .dbyt 0AFF0h +001ABCr 1 AF F1 .dbyt 0AFF1h +001ABEr 1 AF F2 .dbyt 0AFF2h +001AC0r 1 AF F3 .dbyt 0AFF3h +001AC2r 1 AF F4 .dbyt 0AFF4h +001AC4r 1 AF F5 .dbyt 0AFF5h +001AC6r 1 AF F6 .dbyt 0AFF6h +001AC8r 1 AF F7 .dbyt 0AFF7h +001ACAr 1 AF F8 .dbyt 0AFF8h +001ACCr 1 AF F9 .dbyt 0AFF9h +001ACEr 1 AF FA .dbyt 0AFFAh +001AD0r 1 AF FB .dbyt 0AFFBh +001AD2r 1 AF FC .dbyt 0AFFCh +001AD4r 1 AF FD .dbyt 0AFFDh +001AD6r 1 AF FE .dbyt 0AFFEh +001AD8r 1 AF FF .dbyt 0AFFFh +001ADAr 1 B0 00 .dbyt 0B000h +001ADCr 1 B0 01 .dbyt 0B001h +001ADEr 1 B0 02 .dbyt 0B002h +001AE0r 1 B0 03 .dbyt 0B003h +001AE2r 1 B0 04 .dbyt 0B004h +001AE4r 1 B0 05 .dbyt 0B005h +001AE6r 1 B0 06 .dbyt 0B006h +001AE8r 1 B0 07 .dbyt 0B007h +001AEAr 1 B0 08 .dbyt 0B008h +001AECr 1 B0 09 .dbyt 0B009h +001AEEr 1 B0 0A .dbyt 0B00Ah +001AF0r 1 B0 0B .dbyt 0B00Bh +001AF2r 1 B0 0C .dbyt 0B00Ch +001AF4r 1 B0 0D .dbyt 0B00Dh +001AF6r 1 B0 0E .dbyt 0B00Eh +001AF8r 1 B0 0F .dbyt 0B00Fh +001AFAr 1 BF E1 .dbyt 0BFE1h +001AFCr 1 BF E2 .dbyt 0BFE2h +001AFEr 1 BF E3 .dbyt 0BFE3h +001B00r 1 BF E4 .dbyt 0BFE4h +001B02r 1 BF E5 .dbyt 0BFE5h +001B04r 1 BF E6 .dbyt 0BFE6h +001B06r 1 BF E7 .dbyt 0BFE7h +001B08r 1 BF E8 .dbyt 0BFE8h +001B0Ar 1 BF E9 .dbyt 0BFE9h +001B0Cr 1 BF EA .dbyt 0BFEAh +001B0Er 1 BF EB .dbyt 0BFEBh +001B10r 1 BF EC .dbyt 0BFECh +001B12r 1 BF ED .dbyt 0BFEDh +001B14r 1 BF EE .dbyt 0BFEEh +001B16r 1 BF EF .dbyt 0BFEFh +001B18r 1 BF F0 .dbyt 0BFF0h +001B1Ar 1 BF F1 .dbyt 0BFF1h +001B1Cr 1 BF F2 .dbyt 0BFF2h +001B1Er 1 BF F3 .dbyt 0BFF3h +001B20r 1 BF F4 .dbyt 0BFF4h +001B22r 1 BF F5 .dbyt 0BFF5h +001B24r 1 BF F6 .dbyt 0BFF6h +001B26r 1 BF F7 .dbyt 0BFF7h +001B28r 1 BF F8 .dbyt 0BFF8h +001B2Ar 1 BF F9 .dbyt 0BFF9h +001B2Cr 1 BF FA .dbyt 0BFFAh +001B2Er 1 BF FB .dbyt 0BFFBh +001B30r 1 BF FC .dbyt 0BFFCh +001B32r 1 BF FD .dbyt 0BFFDh +001B34r 1 BF FE .dbyt 0BFFEh +001B36r 1 BF FF .dbyt 0BFFFh +001B38r 1 C0 00 .dbyt 0C000h +001B3Ar 1 C0 01 .dbyt 0C001h +001B3Cr 1 C0 02 .dbyt 0C002h +001B3Er 1 C0 03 .dbyt 0C003h +001B40r 1 C0 04 .dbyt 0C004h +001B42r 1 C0 05 .dbyt 0C005h +001B44r 1 C0 06 .dbyt 0C006h +001B46r 1 C0 07 .dbyt 0C007h +001B48r 1 C0 08 .dbyt 0C008h +001B4Ar 1 C0 09 .dbyt 0C009h +001B4Cr 1 C0 0A .dbyt 0C00Ah +001B4Er 1 C0 0B .dbyt 0C00Bh +001B50r 1 C0 0C .dbyt 0C00Ch +001B52r 1 C0 0D .dbyt 0C00Dh +001B54r 1 C0 0E .dbyt 0C00Eh +001B56r 1 C0 0F .dbyt 0C00Fh +001B58r 1 CF E1 .dbyt 0CFE1h +001B5Ar 1 CF E2 .dbyt 0CFE2h +001B5Cr 1 CF E3 .dbyt 0CFE3h +001B5Er 1 CF E4 .dbyt 0CFE4h +001B60r 1 CF E5 .dbyt 0CFE5h +001B62r 1 CF E6 .dbyt 0CFE6h +001B64r 1 CF E7 .dbyt 0CFE7h +001B66r 1 CF E8 .dbyt 0CFE8h +001B68r 1 CF E9 .dbyt 0CFE9h +001B6Ar 1 CF EA .dbyt 0CFEAh +001B6Cr 1 CF EB .dbyt 0CFEBh +001B6Er 1 CF EC .dbyt 0CFECh +001B70r 1 CF ED .dbyt 0CFEDh +001B72r 1 CF EE .dbyt 0CFEEh +001B74r 1 CF EF .dbyt 0CFEFh +001B76r 1 CF F0 .dbyt 0CFF0h +001B78r 1 CF F1 .dbyt 0CFF1h +001B7Ar 1 CF F2 .dbyt 0CFF2h +001B7Cr 1 CF F3 .dbyt 0CFF3h +001B7Er 1 CF F4 .dbyt 0CFF4h +001B80r 1 CF F5 .dbyt 0CFF5h +001B82r 1 CF F6 .dbyt 0CFF6h +001B84r 1 CF F7 .dbyt 0CFF7h +001B86r 1 CF F8 .dbyt 0CFF8h +001B88r 1 CF F9 .dbyt 0CFF9h +001B8Ar 1 CF FA .dbyt 0CFFAh +001B8Cr 1 CF FB .dbyt 0CFFBh +001B8Er 1 CF FC .dbyt 0CFFCh +001B90r 1 CF FD .dbyt 0CFFDh +001B92r 1 CF FE .dbyt 0CFFEh +001B94r 1 CF FF .dbyt 0CFFFh +001B96r 1 D0 00 .dbyt 0D000h +001B98r 1 D0 01 .dbyt 0D001h +001B9Ar 1 D0 02 .dbyt 0D002h +001B9Cr 1 D0 03 .dbyt 0D003h +001B9Er 1 D0 04 .dbyt 0D004h +001BA0r 1 D0 05 .dbyt 0D005h +001BA2r 1 D0 06 .dbyt 0D006h +001BA4r 1 D0 07 .dbyt 0D007h +001BA6r 1 D0 08 .dbyt 0D008h +001BA8r 1 D0 09 .dbyt 0D009h +001BAAr 1 D0 0A .dbyt 0D00Ah +001BACr 1 D0 0B .dbyt 0D00Bh +001BAEr 1 D0 0C .dbyt 0D00Ch +001BB0r 1 D0 0D .dbyt 0D00Dh +001BB2r 1 D0 0E .dbyt 0D00Eh +001BB4r 1 D0 0F .dbyt 0D00Fh +001BB6r 1 DF E1 .dbyt 0DFE1h +001BB8r 1 DF E2 .dbyt 0DFE2h +001BBAr 1 DF E3 .dbyt 0DFE3h +001BBCr 1 DF E4 .dbyt 0DFE4h +001BBEr 1 DF E5 .dbyt 0DFE5h +001BC0r 1 DF E6 .dbyt 0DFE6h +001BC2r 1 DF E7 .dbyt 0DFE7h +001BC4r 1 DF E8 .dbyt 0DFE8h +001BC6r 1 DF E9 .dbyt 0DFE9h +001BC8r 1 DF EA .dbyt 0DFEAh +001BCAr 1 DF EB .dbyt 0DFEBh +001BCCr 1 DF EC .dbyt 0DFECh +001BCEr 1 DF ED .dbyt 0DFEDh +001BD0r 1 DF EE .dbyt 0DFEEh +001BD2r 1 DF EF .dbyt 0DFEFh +001BD4r 1 DF F0 .dbyt 0DFF0h +001BD6r 1 DF F1 .dbyt 0DFF1h +001BD8r 1 DF F2 .dbyt 0DFF2h +001BDAr 1 DF F3 .dbyt 0DFF3h +001BDCr 1 DF F4 .dbyt 0DFF4h +001BDEr 1 DF F5 .dbyt 0DFF5h +001BE0r 1 DF F6 .dbyt 0DFF6h +001BE2r 1 DF F7 .dbyt 0DFF7h +001BE4r 1 DF F8 .dbyt 0DFF8h +001BE6r 1 DF F9 .dbyt 0DFF9h +001BE8r 1 DF FA .dbyt 0DFFAh +001BEAr 1 DF FB .dbyt 0DFFBh +001BECr 1 DF FC .dbyt 0DFFCh +001BEEr 1 DF FD .dbyt 0DFFDh +001BF0r 1 DF FE .dbyt 0DFFEh +001BF2r 1 DF FF .dbyt 0DFFFh +001BF4r 1 E0 00 .dbyt 0E000h +001BF6r 1 E0 01 .dbyt 0E001h +001BF8r 1 E0 02 .dbyt 0E002h +001BFAr 1 E0 03 .dbyt 0E003h +001BFCr 1 E0 04 .dbyt 0E004h +001BFEr 1 E0 05 .dbyt 0E005h +001C00r 1 E0 06 .dbyt 0E006h +001C02r 1 E0 07 .dbyt 0E007h +001C04r 1 E0 08 .dbyt 0E008h +001C06r 1 E0 09 .dbyt 0E009h +001C08r 1 E0 0A .dbyt 0E00Ah +001C0Ar 1 E0 0B .dbyt 0E00Bh +001C0Cr 1 E0 0C .dbyt 0E00Ch +001C0Er 1 E0 0D .dbyt 0E00Dh +001C10r 1 E0 0E .dbyt 0E00Eh +001C12r 1 E0 0F .dbyt 0E00Fh +001C14r 1 EF E1 .dbyt 0EFE1h +001C16r 1 EF E2 .dbyt 0EFE2h +001C18r 1 EF E3 .dbyt 0EFE3h +001C1Ar 1 EF E4 .dbyt 0EFE4h +001C1Cr 1 EF E5 .dbyt 0EFE5h +001C1Er 1 EF E6 .dbyt 0EFE6h +001C20r 1 EF E7 .dbyt 0EFE7h +001C22r 1 EF E8 .dbyt 0EFE8h +001C24r 1 EF E9 .dbyt 0EFE9h +001C26r 1 EF EA .dbyt 0EFEAh +001C28r 1 EF EB .dbyt 0EFEBh +001C2Ar 1 EF EC .dbyt 0EFECh +001C2Cr 1 EF ED .dbyt 0EFEDh +001C2Er 1 EF EE .dbyt 0EFEEh +001C30r 1 EF EF .dbyt 0EFEFh +001C32r 1 EF F0 .dbyt 0EFF0h +001C34r 1 EF F1 .dbyt 0EFF1h +001C36r 1 EF F2 .dbyt 0EFF2h +001C38r 1 EF F3 .dbyt 0EFF3h +001C3Ar 1 EF F4 .dbyt 0EFF4h +001C3Cr 1 EF F5 .dbyt 0EFF5h +001C3Er 1 EF F6 .dbyt 0EFF6h +001C40r 1 EF F7 .dbyt 0EFF7h +001C42r 1 EF F8 .dbyt 0EFF8h +001C44r 1 EF F9 .dbyt 0EFF9h +001C46r 1 EF FA .dbyt 0EFFAh +001C48r 1 EF FB .dbyt 0EFFBh +001C4Ar 1 EF FC .dbyt 0EFFCh +001C4Cr 1 EF FD .dbyt 0EFFDh +001C4Er 1 EF FE .dbyt 0EFFEh +001C50r 1 EF FF .dbyt 0EFFFh +001C52r 1 F0 00 .dbyt 0F000h +001C54r 1 F0 01 .dbyt 0F001h +001C56r 1 F0 02 .dbyt 0F002h +001C58r 1 F0 03 .dbyt 0F003h +001C5Ar 1 F0 04 .dbyt 0F004h +001C5Cr 1 F0 05 .dbyt 0F005h +001C5Er 1 F0 06 .dbyt 0F006h +001C60r 1 F0 07 .dbyt 0F007h +001C62r 1 F0 08 .dbyt 0F008h +001C64r 1 F0 09 .dbyt 0F009h +001C66r 1 F0 0A .dbyt 0F00Ah +001C68r 1 F0 0B .dbyt 0F00Bh +001C6Ar 1 F0 0C .dbyt 0F00Ch +001C6Cr 1 F0 0D .dbyt 0F00Dh +001C6Er 1 F0 0E .dbyt 0F00Eh +001C70r 1 F0 0F .dbyt 0F00Fh +001C72r 1 FF E1 .dbyt 0FFE1h +001C74r 1 FF E2 .dbyt 0FFE2h +001C76r 1 FF E3 .dbyt 0FFE3h +001C78r 1 FF E4 .dbyt 0FFE4h +001C7Ar 1 FF E5 .dbyt 0FFE5h +001C7Cr 1 FF E6 .dbyt 0FFE6h +001C7Er 1 FF E7 .dbyt 0FFE7h +001C80r 1 FF E8 .dbyt 0FFE8h +001C82r 1 FF E9 .dbyt 0FFE9h +001C84r 1 FF EA .dbyt 0FFEAh +001C86r 1 FF EB .dbyt 0FFEBh +001C88r 1 FF EC .dbyt 0FFECh +001C8Ar 1 FF ED .dbyt 0FFEDh +001C8Cr 1 FF EE .dbyt 0FFEEh +001C8Er 1 FF EF .dbyt 0FFEFh +001C90r 1 FF F0 .dbyt 0FFF0h +001C92r 1 FF F1 .dbyt 0FFF1h +001C94r 1 FF F2 .dbyt 0FFF2h +001C96r 1 FF F3 .dbyt 0FFF3h +001C98r 1 FF F4 .dbyt 0FFF4h +001C9Ar 1 FF F5 .dbyt 0FFF5h +001C9Cr 1 FF F6 .dbyt 0FFF6h +001C9Er 1 FF F7 .dbyt 0FFF7h +001CA0r 1 FF F8 .dbyt 0FFF8h +001CA2r 1 FF F9 .dbyt 0FFF9h +001CA4r 1 FF FA .dbyt 0FFFAh +001CA6r 1 FF FB .dbyt 0FFFBh +001CA8r 1 FF FC .dbyt 0FFFCh +001CAAr 1 FF FD .dbyt 0FFFDh +001CACr 1 FF FE .dbyt 0FFFEh +001CAEr 1 FF FF .dbyt 0FFFFh +001CB0r 1 +001CB0r 1 ; alternative 4-digit hex values +001CB0r 1 00 00 .dbyt 0000h +001CB2r 1 00 01 .dbyt 0001h +001CB4r 1 00 02 .dbyt 0002h +001CB6r 1 00 03 .dbyt 0003h +001CB8r 1 00 04 .dbyt 0004h +001CBAr 1 00 05 .dbyt 0005h +001CBCr 1 00 06 .dbyt 0006h +001CBEr 1 00 07 .dbyt 0007h +001CC0r 1 00 08 .dbyt 0008h +001CC2r 1 00 09 .dbyt 0009h +001CC4r 1 00 0A .dbyt 000ah +001CC6r 1 00 0B .dbyt 000bh +001CC8r 1 00 0C .dbyt 000ch +001CCAr 1 00 0D .dbyt 000dh +001CCCr 1 00 0E .dbyt 000eh +001CCEr 1 00 0F .dbyt 000fh +001CD0r 1 00 10 .dbyt 0010h +001CD2r 1 00 11 .dbyt 0011h +001CD4r 1 00 12 .dbyt 0012h +001CD6r 1 00 13 .dbyt 0013h +001CD8r 1 00 70 .dbyt 0070h +001CDAr 1 00 71 .dbyt 0071h +001CDCr 1 00 72 .dbyt 0072h +001CDEr 1 00 73 .dbyt 0073h +001CE0r 1 00 74 .dbyt 0074h +001CE2r 1 00 75 .dbyt 0075h +001CE4r 1 00 76 .dbyt 0076h +001CE6r 1 00 77 .dbyt 0077h +001CE8r 1 00 78 .dbyt 0078h +001CEAr 1 00 79 .dbyt 0079h +001CECr 1 00 7A .dbyt 007ah +001CEEr 1 00 7B .dbyt 007bh +001CF0r 1 00 7C .dbyt 007ch +001CF2r 1 00 7D .dbyt 007dh +001CF4r 1 00 7E .dbyt 007eh +001CF6r 1 00 7F .dbyt 007fh +001CF8r 1 00 80 .dbyt 0080h +001CFAr 1 00 81 .dbyt 0081h +001CFCr 1 00 82 .dbyt 0082h +001CFEr 1 00 83 .dbyt 0083h +001D00r 1 00 84 .dbyt 0084h +001D02r 1 00 85 .dbyt 0085h +001D04r 1 00 86 .dbyt 0086h +001D06r 1 00 F0 .dbyt 00f0h +001D08r 1 00 F1 .dbyt 00f1h +001D0Ar 1 00 F2 .dbyt 00f2h +001D0Cr 1 00 F3 .dbyt 00f3h +001D0Er 1 00 F4 .dbyt 00f4h +001D10r 1 00 F5 .dbyt 00f5h +001D12r 1 00 F6 .dbyt 00f6h +001D14r 1 00 F7 .dbyt 00f7h +001D16r 1 00 F8 .dbyt 00f8h +001D18r 1 00 F9 .dbyt 00f9h +001D1Ar 1 00 FA .dbyt 00fah +001D1Cr 1 00 FB .dbyt 00fbh +001D1Er 1 00 FC .dbyt 00fch +001D20r 1 00 FD .dbyt 00fdh +001D22r 1 00 FE .dbyt 00feh +001D24r 1 00 FF .dbyt 00ffh +001D26r 1 01 00 .dbyt 0100h +001D28r 1 01 01 .dbyt 0101h +001D2Ar 1 01 02 .dbyt 0102h +001D2Cr 1 01 03 .dbyt 0103h +001D2Er 1 0F D2 .dbyt 0fd2h +001D30r 1 0F D3 .dbyt 0fd3h +001D32r 1 0F D4 .dbyt 0fd4h +001D34r 1 0F D5 .dbyt 0fd5h +001D36r 1 0F D6 .dbyt 0fd6h +001D38r 1 0F D7 .dbyt 0fd7h +001D3Ar 1 0F D8 .dbyt 0fd8h +001D3Cr 1 0F D9 .dbyt 0fd9h +001D3Er 1 0F DA .dbyt 0fdah +001D40r 1 0F DB .dbyt 0fdbh +001D42r 1 0F DC .dbyt 0fdch +001D44r 1 0F DD .dbyt 0fddh +001D46r 1 0F DE .dbyt 0fdeh +001D48r 1 0F DF .dbyt 0fdfh +001D4Ar 1 0F E0 .dbyt 0fe0h +001D4Cr 1 0F E1 .dbyt 0fe1h +001D4Er 1 0F E2 .dbyt 0fe2h +001D50r 1 0F E3 .dbyt 0fe3h +001D52r 1 0F E4 .dbyt 0fe4h +001D54r 1 0F E5 .dbyt 0fe5h +001D56r 1 0F E6 .dbyt 0fe6h +001D58r 1 0F E7 .dbyt 0fe7h +001D5Ar 1 0F E8 .dbyt 0fe8h +001D5Cr 1 0F E9 .dbyt 0fe9h +001D5Er 1 0F EA .dbyt 0feah +001D60r 1 0F EB .dbyt 0febh +001D62r 1 0F EC .dbyt 0fech +001D64r 1 0F ED .dbyt 0fedh +001D66r 1 0F EE .dbyt 0feeh +001D68r 1 0F EF .dbyt 0fefh +001D6Ar 1 0F F0 .dbyt 0ff0h +001D6Cr 1 0F F1 .dbyt 0ff1h +001D6Er 1 0F F2 .dbyt 0ff2h +001D70r 1 0F F3 .dbyt 0ff3h +001D72r 1 0F F4 .dbyt 0ff4h +001D74r 1 0F F5 .dbyt 0ff5h +001D76r 1 0F F6 .dbyt 0ff6h +001D78r 1 0F F7 .dbyt 0ff7h +001D7Ar 1 0F F8 .dbyt 0ff8h +001D7Cr 1 0F F9 .dbyt 0ff9h +001D7Er 1 0F FA .dbyt 0ffah +001D80r 1 0F FB .dbyt 0ffbh +001D82r 1 0F FC .dbyt 0ffch +001D84r 1 0F FD .dbyt 0ffdh +001D86r 1 0F FE .dbyt 0ffeh +001D88r 1 0F FF .dbyt 0fffh +001D8Ar 1 10 00 .dbyt 1000h +001D8Cr 1 10 01 .dbyt 1001h +001D8Er 1 10 02 .dbyt 1002h +001D90r 1 10 03 .dbyt 1003h +001D92r 1 10 04 .dbyt 1004h +001D94r 1 10 05 .dbyt 1005h +001D96r 1 10 06 .dbyt 1006h +001D98r 1 10 07 .dbyt 1007h +001D9Ar 1 10 08 .dbyt 1008h +001D9Cr 1 7F F0 .dbyt 7ff0h +001D9Er 1 7F F1 .dbyt 7ff1h +001DA0r 1 7F F2 .dbyt 7ff2h +001DA2r 1 7F F3 .dbyt 7ff3h +001DA4r 1 7F F4 .dbyt 7ff4h +001DA6r 1 7F F5 .dbyt 7ff5h +001DA8r 1 7F F6 .dbyt 7ff6h +001DAAr 1 7F F7 .dbyt 7ff7h +001DACr 1 7F F8 .dbyt 7ff8h +001DAEr 1 7F F9 .dbyt 7ff9h +001DB0r 1 7F FA .dbyt 7ffah +001DB2r 1 7F FB .dbyt 7ffbh +001DB4r 1 7F FC .dbyt 7ffch +001DB6r 1 7F FD .dbyt 7ffdh +001DB8r 1 7F FE .dbyt 7ffeh +001DBAr 1 7F FF .dbyt 7fffh +001DBCr 1 80 00 .dbyt 8000h +001DBEr 1 80 01 .dbyt 8001h +001DC0r 1 80 02 .dbyt 8002h +001DC2r 1 80 03 .dbyt 8003h +001DC4r 1 80 04 .dbyt 8004h +001DC6r 1 80 05 .dbyt 8005h +001DC8r 1 80 06 .dbyt 8006h +001DCAr 1 80 07 .dbyt 8007h +001DCCr 1 80 08 .dbyt 8008h +001DCEr 1 80 09 .dbyt 8009h +001DD0r 1 80 0A .dbyt 800ah +001DD2r 1 80 0B .dbyt 800bh +001DD4r 1 9F E1 .dbyt 9fe1h +001DD6r 1 9F E2 .dbyt 9fe2h +001DD8r 1 9F E3 .dbyt 9fe3h +001DDAr 1 9F E4 .dbyt 9fe4h +001DDCr 1 9F E5 .dbyt 9fe5h +001DDEr 1 9F E6 .dbyt 9fe6h +001DE0r 1 9F E7 .dbyt 9fe7h +001DE2r 1 9F E8 .dbyt 9fe8h +001DE4r 1 9F E9 .dbyt 9fe9h +001DE6r 1 9F EA .dbyt 9feah +001DE8r 1 9F EB .dbyt 9febh +001DEAr 1 9F EC .dbyt 9fech +001DECr 1 9F ED .dbyt 9fedh +001DEEr 1 9F EE .dbyt 9feeh +001DF0r 1 9F EF .dbyt 9fefh +001DF2r 1 9F F0 .dbyt 9ff0h +001DF4r 1 9F F1 .dbyt 9ff1h +001DF6r 1 9F F2 .dbyt 9ff2h +001DF8r 1 9F F3 .dbyt 9ff3h +001DFAr 1 9F F4 .dbyt 9ff4h +001DFCr 1 9F F5 .dbyt 9ff5h +001DFEr 1 9F F6 .dbyt 9ff6h +001E00r 1 9F F7 .dbyt 9ff7h +001E02r 1 9F F8 .dbyt 9ff8h +001E04r 1 9F F9 .dbyt 9ff9h +001E06r 1 9F FA .dbyt 9ffah +001E08r 1 9F FB .dbyt 9ffbh +001E0Ar 1 9F FC .dbyt 9ffch +001E0Cr 1 9F FD .dbyt 9ffdh +001E0Er 1 9F FE .dbyt 9ffeh +001E10r 1 9F FF .dbyt 9fffh +001E12r 1 A0 00 .dbyt 0a000h +001E14r 1 A0 01 .dbyt 0a001h +001E16r 1 A0 02 .dbyt 0a002h +001E18r 1 A0 03 .dbyt 0a003h +001E1Ar 1 A0 04 .dbyt 0a004h +001E1Cr 1 A0 05 .dbyt 0a005h +001E1Er 1 A0 06 .dbyt 0a006h +001E20r 1 A0 07 .dbyt 0a007h +001E22r 1 A0 08 .dbyt 0a008h +001E24r 1 A0 09 .dbyt 0a009h +001E26r 1 A0 0A .dbyt 0a00ah +001E28r 1 A0 0B .dbyt 0a00bh +001E2Ar 1 A0 0C .dbyt 0a00ch +001E2Cr 1 A0 0D .dbyt 0a00dh +001E2Er 1 A0 0E .dbyt 0a00eh +001E30r 1 A0 0F .dbyt 0a00fh +001E32r 1 AF E1 .dbyt 0afe1h +001E34r 1 AF E2 .dbyt 0afe2h +001E36r 1 AF E3 .dbyt 0afe3h +001E38r 1 AF E4 .dbyt 0afe4h +001E3Ar 1 AF E5 .dbyt 0afe5h +001E3Cr 1 AF E6 .dbyt 0afe6h +001E3Er 1 AF E7 .dbyt 0afe7h +001E40r 1 AF E8 .dbyt 0afe8h +001E42r 1 AF E9 .dbyt 0afe9h +001E44r 1 AF EA .dbyt 0afeah +001E46r 1 AF EB .dbyt 0afebh +001E48r 1 AF EC .dbyt 0afech +001E4Ar 1 AF ED .dbyt 0afedh +001E4Cr 1 AF EE .dbyt 0afeeh +001E4Er 1 AF EF .dbyt 0afefh +001E50r 1 AF F0 .dbyt 0aff0h +001E52r 1 AF F1 .dbyt 0aff1h +001E54r 1 AF F2 .dbyt 0aff2h +001E56r 1 AF F3 .dbyt 0aff3h +001E58r 1 AF F4 .dbyt 0aff4h +001E5Ar 1 AF F5 .dbyt 0aff5h +001E5Cr 1 AF F6 .dbyt 0aff6h +001E5Er 1 AF F7 .dbyt 0aff7h +001E60r 1 AF F8 .dbyt 0aff8h +001E62r 1 AF F9 .dbyt 0aff9h +001E64r 1 AF FA .dbyt 0affah +001E66r 1 AF FB .dbyt 0affbh +001E68r 1 AF FC .dbyt 0affch +001E6Ar 1 AF FD .dbyt 0affdh +001E6Cr 1 AF FE .dbyt 0affeh +001E6Er 1 AF FF .dbyt 0afffh +001E70r 1 B0 00 .dbyt 0b000h +001E72r 1 B0 01 .dbyt 0b001h +001E74r 1 B0 02 .dbyt 0b002h +001E76r 1 B0 03 .dbyt 0b003h +001E78r 1 B0 04 .dbyt 0b004h +001E7Ar 1 B0 05 .dbyt 0b005h +001E7Cr 1 B0 06 .dbyt 0b006h +001E7Er 1 B0 07 .dbyt 0b007h +001E80r 1 B0 08 .dbyt 0b008h +001E82r 1 B0 09 .dbyt 0b009h +001E84r 1 B0 0A .dbyt 0b00ah +001E86r 1 B0 0B .dbyt 0b00bh +001E88r 1 B0 0C .dbyt 0b00ch +001E8Ar 1 B0 0D .dbyt 0b00dh +001E8Cr 1 B0 0E .dbyt 0b00eh +001E8Er 1 B0 0F .dbyt 0b00fh +001E90r 1 BF E1 .dbyt 0bfe1h +001E92r 1 BF E2 .dbyt 0bfe2h +001E94r 1 BF E3 .dbyt 0bfe3h +001E96r 1 BF E4 .dbyt 0bfe4h +001E98r 1 BF E5 .dbyt 0bfe5h +001E9Ar 1 BF E6 .dbyt 0bfe6h +001E9Cr 1 BF E7 .dbyt 0bfe7h +001E9Er 1 BF E8 .dbyt 0bfe8h +001EA0r 1 BF E9 .dbyt 0bfe9h +001EA2r 1 BF EA .dbyt 0bfeah +001EA4r 1 BF EB .dbyt 0bfebh +001EA6r 1 BF EC .dbyt 0bfech +001EA8r 1 BF ED .dbyt 0bfedh +001EAAr 1 BF EE .dbyt 0bfeeh +001EACr 1 BF EF .dbyt 0bfefh +001EAEr 1 BF F0 .dbyt 0bff0h +001EB0r 1 BF F1 .dbyt 0bff1h +001EB2r 1 BF F2 .dbyt 0bff2h +001EB4r 1 BF F3 .dbyt 0bff3h +001EB6r 1 BF F4 .dbyt 0bff4h +001EB8r 1 BF F5 .dbyt 0bff5h +001EBAr 1 BF F6 .dbyt 0bff6h +001EBCr 1 BF F7 .dbyt 0bff7h +001EBEr 1 BF F8 .dbyt 0bff8h +001EC0r 1 BF F9 .dbyt 0bff9h +001EC2r 1 BF FA .dbyt 0bffah +001EC4r 1 BF FB .dbyt 0bffbh +001EC6r 1 BF FC .dbyt 0bffch +001EC8r 1 BF FD .dbyt 0bffdh +001ECAr 1 BF FE .dbyt 0bffeh +001ECCr 1 BF FF .dbyt 0bfffh +001ECEr 1 C0 00 .dbyt 0c000h +001ED0r 1 C0 01 .dbyt 0c001h +001ED2r 1 C0 02 .dbyt 0c002h +001ED4r 1 C0 03 .dbyt 0c003h +001ED6r 1 C0 04 .dbyt 0c004h +001ED8r 1 C0 05 .dbyt 0c005h +001EDAr 1 C0 06 .dbyt 0c006h +001EDCr 1 C0 07 .dbyt 0c007h +001EDEr 1 C0 08 .dbyt 0c008h +001EE0r 1 C0 09 .dbyt 0c009h +001EE2r 1 C0 0A .dbyt 0c00ah +001EE4r 1 C0 0B .dbyt 0c00bh +001EE6r 1 C0 0C .dbyt 0c00ch +001EE8r 1 C0 0D .dbyt 0c00dh +001EEAr 1 C0 0E .dbyt 0c00eh +001EECr 1 C0 0F .dbyt 0c00fh +001EEEr 1 CF E1 .dbyt 0cfe1h +001EF0r 1 CF E2 .dbyt 0cfe2h +001EF2r 1 CF E3 .dbyt 0cfe3h +001EF4r 1 CF E4 .dbyt 0cfe4h +001EF6r 1 CF E5 .dbyt 0cfe5h +001EF8r 1 CF E6 .dbyt 0cfe6h +001EFAr 1 CF E7 .dbyt 0cfe7h +001EFCr 1 CF E8 .dbyt 0cfe8h +001EFEr 1 CF E9 .dbyt 0cfe9h +001F00r 1 CF EA .dbyt 0cfeah +001F02r 1 CF EB .dbyt 0cfebh +001F04r 1 CF EC .dbyt 0cfech +001F06r 1 CF ED .dbyt 0cfedh +001F08r 1 CF EE .dbyt 0cfeeh +001F0Ar 1 CF EF .dbyt 0cfefh +001F0Cr 1 CF F0 .dbyt 0cff0h +001F0Er 1 CF F1 .dbyt 0cff1h +001F10r 1 CF F2 .dbyt 0cff2h +001F12r 1 CF F3 .dbyt 0cff3h +001F14r 1 CF F4 .dbyt 0cff4h +001F16r 1 CF F5 .dbyt 0cff5h +001F18r 1 CF F6 .dbyt 0cff6h +001F1Ar 1 CF F7 .dbyt 0cff7h +001F1Cr 1 CF F8 .dbyt 0cff8h +001F1Er 1 CF F9 .dbyt 0cff9h +001F20r 1 CF FA .dbyt 0cffah +001F22r 1 CF FB .dbyt 0cffbh +001F24r 1 CF FC .dbyt 0cffch +001F26r 1 CF FD .dbyt 0cffdh +001F28r 1 CF FE .dbyt 0cffeh +001F2Ar 1 CF FF .dbyt 0cfffh +001F2Cr 1 D0 00 .dbyt 0d000h +001F2Er 1 D0 01 .dbyt 0d001h +001F30r 1 D0 02 .dbyt 0d002h +001F32r 1 D0 03 .dbyt 0d003h +001F34r 1 D0 04 .dbyt 0d004h +001F36r 1 D0 05 .dbyt 0d005h +001F38r 1 D0 06 .dbyt 0d006h +001F3Ar 1 D0 07 .dbyt 0d007h +001F3Cr 1 D0 08 .dbyt 0d008h +001F3Er 1 D0 09 .dbyt 0d009h +001F40r 1 D0 0A .dbyt 0d00ah +001F42r 1 D0 0B .dbyt 0d00bh +001F44r 1 D0 0C .dbyt 0d00ch +001F46r 1 D0 0D .dbyt 0d00dh +001F48r 1 D0 0E .dbyt 0d00eh +001F4Ar 1 D0 0F .dbyt 0d00fh +001F4Cr 1 DF E1 .dbyt 0dfe1h +001F4Er 1 DF E2 .dbyt 0dfe2h +001F50r 1 DF E3 .dbyt 0dfe3h +001F52r 1 DF E4 .dbyt 0dfe4h +001F54r 1 DF E5 .dbyt 0dfe5h +001F56r 1 DF E6 .dbyt 0dfe6h +001F58r 1 DF E7 .dbyt 0dfe7h +001F5Ar 1 DF E8 .dbyt 0dfe8h +001F5Cr 1 DF E9 .dbyt 0dfe9h +001F5Er 1 DF EA .dbyt 0dfeah +001F60r 1 DF EB .dbyt 0dfebh +001F62r 1 DF EC .dbyt 0dfech +001F64r 1 DF ED .dbyt 0dfedh +001F66r 1 DF EE .dbyt 0dfeeh +001F68r 1 DF EF .dbyt 0dfefh +001F6Ar 1 DF F0 .dbyt 0dff0h +001F6Cr 1 DF F1 .dbyt 0dff1h +001F6Er 1 DF F2 .dbyt 0dff2h +001F70r 1 DF F3 .dbyt 0dff3h +001F72r 1 DF F4 .dbyt 0dff4h +001F74r 1 DF F5 .dbyt 0dff5h +001F76r 1 DF F6 .dbyt 0dff6h +001F78r 1 DF F7 .dbyt 0dff7h +001F7Ar 1 DF F8 .dbyt 0dff8h +001F7Cr 1 DF F9 .dbyt 0dff9h +001F7Er 1 DF FA .dbyt 0dffah +001F80r 1 DF FB .dbyt 0dffbh +001F82r 1 DF FC .dbyt 0dffch +001F84r 1 DF FD .dbyt 0dffdh +001F86r 1 DF FE .dbyt 0dffeh +001F88r 1 DF FF .dbyt 0dfffh +001F8Ar 1 E0 00 .dbyt 0e000h +001F8Cr 1 E0 01 .dbyt 0e001h +001F8Er 1 E0 02 .dbyt 0e002h +001F90r 1 E0 03 .dbyt 0e003h +001F92r 1 E0 04 .dbyt 0e004h +001F94r 1 E0 05 .dbyt 0e005h +001F96r 1 E0 06 .dbyt 0e006h +001F98r 1 E0 07 .dbyt 0e007h +001F9Ar 1 E0 08 .dbyt 0e008h +001F9Cr 1 E0 09 .dbyt 0e009h +001F9Er 1 E0 0A .dbyt 0e00ah +001FA0r 1 E0 0B .dbyt 0e00bh +001FA2r 1 E0 0C .dbyt 0e00ch +001FA4r 1 E0 0D .dbyt 0e00dh +001FA6r 1 E0 0E .dbyt 0e00eh +001FA8r 1 E0 0F .dbyt 0e00fh +001FAAr 1 EF E1 .dbyt 0efe1h +001FACr 1 EF E2 .dbyt 0efe2h +001FAEr 1 EF E3 .dbyt 0efe3h +001FB0r 1 EF E4 .dbyt 0efe4h +001FB2r 1 EF E5 .dbyt 0efe5h +001FB4r 1 EF E6 .dbyt 0efe6h +001FB6r 1 EF E7 .dbyt 0efe7h +001FB8r 1 EF E8 .dbyt 0efe8h +001FBAr 1 EF E9 .dbyt 0efe9h +001FBCr 1 EF EA .dbyt 0efeah +001FBEr 1 EF EB .dbyt 0efebh +001FC0r 1 EF EC .dbyt 0efech +001FC2r 1 EF ED .dbyt 0efedh +001FC4r 1 EF EE .dbyt 0efeeh +001FC6r 1 EF EF .dbyt 0efefh +001FC8r 1 EF F0 .dbyt 0eff0h +001FCAr 1 EF F1 .dbyt 0eff1h +001FCCr 1 EF F2 .dbyt 0eff2h +001FCEr 1 EF F3 .dbyt 0eff3h +001FD0r 1 EF F4 .dbyt 0eff4h +001FD2r 1 EF F5 .dbyt 0eff5h +001FD4r 1 EF F6 .dbyt 0eff6h +001FD6r 1 EF F7 .dbyt 0eff7h +001FD8r 1 EF F8 .dbyt 0eff8h +001FDAr 1 EF F9 .dbyt 0eff9h +001FDCr 1 EF FA .dbyt 0effah +001FDEr 1 EF FB .dbyt 0effbh +001FE0r 1 EF FC .dbyt 0effch +001FE2r 1 EF FD .dbyt 0effdh +001FE4r 1 EF FE .dbyt 0effeh +001FE6r 1 EF FF .dbyt 0efffh +001FE8r 1 F0 00 .dbyt 0f000h +001FEAr 1 F0 01 .dbyt 0f001h +001FECr 1 F0 02 .dbyt 0f002h +001FEEr 1 F0 03 .dbyt 0f003h +001FF0r 1 F0 04 .dbyt 0f004h +001FF2r 1 F0 05 .dbyt 0f005h +001FF4r 1 F0 06 .dbyt 0f006h +001FF6r 1 F0 07 .dbyt 0f007h +001FF8r 1 F0 08 .dbyt 0f008h +001FFAr 1 F0 09 .dbyt 0f009h +001FFCr 1 F0 0A .dbyt 0f00ah +001FFEr 1 F0 0B .dbyt 0f00bh +002000r 1 F0 0C .dbyt 0f00ch +002002r 1 F0 0D .dbyt 0f00dh +002004r 1 F0 0E .dbyt 0f00eh +002006r 1 F0 0F .dbyt 0f00fh +002008r 1 FF E1 .dbyt 0ffe1h +00200Ar 1 FF E2 .dbyt 0ffe2h +00200Cr 1 FF E3 .dbyt 0ffe3h +00200Er 1 FF E4 .dbyt 0ffe4h +002010r 1 FF E5 .dbyt 0ffe5h +002012r 1 FF E6 .dbyt 0ffe6h +002014r 1 FF E7 .dbyt 0ffe7h +002016r 1 FF E8 .dbyt 0ffe8h +002018r 1 FF E9 .dbyt 0ffe9h +00201Ar 1 FF EA .dbyt 0ffeah +00201Cr 1 FF EB .dbyt 0ffebh +00201Er 1 FF EC .dbyt 0ffech +002020r 1 FF ED .dbyt 0ffedh +002022r 1 FF EE .dbyt 0ffeeh +002024r 1 FF EF .dbyt 0ffefh +002026r 1 FF F0 .dbyt 0fff0h +002028r 1 FF F1 .dbyt 0fff1h +00202Ar 1 FF F2 .dbyt 0fff2h +00202Cr 1 FF F3 .dbyt 0fff3h +00202Er 1 FF F4 .dbyt 0fff4h +002030r 1 FF F5 .dbyt 0fff5h +002032r 1 FF F6 .dbyt 0fff6h +002034r 1 FF F7 .dbyt 0fff7h +002036r 1 FF F8 .dbyt 0fff8h +002038r 1 FF F9 .dbyt 0fff9h +00203Ar 1 FF FA .dbyt 0fffah +00203Cr 1 FF FB .dbyt 0fffbh +00203Er 1 FF FC .dbyt 0fffch +002040r 1 FF FD .dbyt 0fffdh +002042r 1 FF FE .dbyt 0fffeh +002044r 1 FF FF .dbyt 0ffffh +002046r 1 +002046r 1 ; alternative 4-digit hex values, uppercase +002046r 1 00 00 .dbyt 0000h +002048r 1 00 01 .dbyt 0001h +00204Ar 1 00 02 .dbyt 0002h +00204Cr 1 00 03 .dbyt 0003h +00204Er 1 00 04 .dbyt 0004h +002050r 1 00 05 .dbyt 0005h +002052r 1 00 06 .dbyt 0006h +002054r 1 00 07 .dbyt 0007h +002056r 1 00 08 .dbyt 0008h +002058r 1 00 09 .dbyt 0009h +00205Ar 1 00 0A .dbyt 000Ah +00205Cr 1 00 0B .dbyt 000Bh +00205Er 1 00 0C .dbyt 000Ch +002060r 1 00 0D .dbyt 000Dh +002062r 1 00 0E .dbyt 000Eh +002064r 1 00 0F .dbyt 000Fh +002066r 1 00 10 .dbyt 0010h +002068r 1 00 11 .dbyt 0011h +00206Ar 1 00 12 .dbyt 0012h +00206Cr 1 00 13 .dbyt 0013h +00206Er 1 00 70 .dbyt 0070h +002070r 1 00 71 .dbyt 0071h +002072r 1 00 72 .dbyt 0072h +002074r 1 00 73 .dbyt 0073h +002076r 1 00 74 .dbyt 0074h +002078r 1 00 75 .dbyt 0075h +00207Ar 1 00 76 .dbyt 0076h +00207Cr 1 00 77 .dbyt 0077h +00207Er 1 00 78 .dbyt 0078h +002080r 1 00 79 .dbyt 0079h +002082r 1 00 7A .dbyt 007Ah +002084r 1 00 7B .dbyt 007Bh +002086r 1 00 7C .dbyt 007Ch +002088r 1 00 7D .dbyt 007Dh +00208Ar 1 00 7E .dbyt 007Eh +00208Cr 1 00 7F .dbyt 007Fh +00208Er 1 00 80 .dbyt 0080h +002090r 1 00 81 .dbyt 0081h +002092r 1 00 82 .dbyt 0082h +002094r 1 00 83 .dbyt 0083h +002096r 1 00 84 .dbyt 0084h +002098r 1 00 85 .dbyt 0085h +00209Ar 1 00 86 .dbyt 0086h +00209Cr 1 00 F0 .dbyt 00F0h +00209Er 1 00 F1 .dbyt 00F1h +0020A0r 1 00 F2 .dbyt 00F2h +0020A2r 1 00 F3 .dbyt 00F3h +0020A4r 1 00 F4 .dbyt 00F4h +0020A6r 1 00 F5 .dbyt 00F5h +0020A8r 1 00 F6 .dbyt 00F6h +0020AAr 1 00 F7 .dbyt 00F7h +0020ACr 1 00 F8 .dbyt 00F8h +0020AEr 1 00 F9 .dbyt 00F9h +0020B0r 1 00 FA .dbyt 00FAh +0020B2r 1 00 FB .dbyt 00FBh +0020B4r 1 00 FC .dbyt 00FCh +0020B6r 1 00 FD .dbyt 00FDh +0020B8r 1 00 FE .dbyt 00FEh +0020BAr 1 00 FF .dbyt 00FFh +0020BCr 1 01 00 .dbyt 0100h +0020BEr 1 01 01 .dbyt 0101h +0020C0r 1 01 02 .dbyt 0102h +0020C2r 1 01 03 .dbyt 0103h +0020C4r 1 0F D2 .dbyt 0FD2h +0020C6r 1 0F D3 .dbyt 0FD3h +0020C8r 1 0F D4 .dbyt 0FD4h +0020CAr 1 0F D5 .dbyt 0FD5h +0020CCr 1 0F D6 .dbyt 0FD6h +0020CEr 1 0F D7 .dbyt 0FD7h +0020D0r 1 0F D8 .dbyt 0FD8h +0020D2r 1 0F D9 .dbyt 0FD9h +0020D4r 1 0F DA .dbyt 0FDAh +0020D6r 1 0F DB .dbyt 0FDBh +0020D8r 1 0F DC .dbyt 0FDCh +0020DAr 1 0F DD .dbyt 0FDDh +0020DCr 1 0F DE .dbyt 0FDEh +0020DEr 1 0F DF .dbyt 0FDFh +0020E0r 1 0F E0 .dbyt 0FE0h +0020E2r 1 0F E1 .dbyt 0FE1h +0020E4r 1 0F E2 .dbyt 0FE2h +0020E6r 1 0F E3 .dbyt 0FE3h +0020E8r 1 0F E4 .dbyt 0FE4h +0020EAr 1 0F E5 .dbyt 0FE5h +0020ECr 1 0F E6 .dbyt 0FE6h +0020EEr 1 0F E7 .dbyt 0FE7h +0020F0r 1 0F E8 .dbyt 0FE8h +0020F2r 1 0F E9 .dbyt 0FE9h +0020F4r 1 0F EA .dbyt 0FEAh +0020F6r 1 0F EB .dbyt 0FEBh +0020F8r 1 0F EC .dbyt 0FECh +0020FAr 1 0F ED .dbyt 0FEDh +0020FCr 1 0F EE .dbyt 0FEEh +0020FEr 1 0F EF .dbyt 0FEFh +002100r 1 0F F0 .dbyt 0FF0h +002102r 1 0F F1 .dbyt 0FF1h +002104r 1 0F F2 .dbyt 0FF2h +002106r 1 0F F3 .dbyt 0FF3h +002108r 1 0F F4 .dbyt 0FF4h +00210Ar 1 0F F5 .dbyt 0FF5h +00210Cr 1 0F F6 .dbyt 0FF6h +00210Er 1 0F F7 .dbyt 0FF7h +002110r 1 0F F8 .dbyt 0FF8h +002112r 1 0F F9 .dbyt 0FF9h +002114r 1 0F FA .dbyt 0FFAh +002116r 1 0F FB .dbyt 0FFBh +002118r 1 0F FC .dbyt 0FFCh +00211Ar 1 0F FD .dbyt 0FFDh +00211Cr 1 0F FE .dbyt 0FFEh +00211Er 1 0F FF .dbyt 0FFFh +002120r 1 10 00 .dbyt 1000h +002122r 1 10 01 .dbyt 1001h +002124r 1 10 02 .dbyt 1002h +002126r 1 10 03 .dbyt 1003h +002128r 1 10 04 .dbyt 1004h +00212Ar 1 10 05 .dbyt 1005h +00212Cr 1 10 06 .dbyt 1006h +00212Er 1 10 07 .dbyt 1007h +002130r 1 10 08 .dbyt 1008h +002132r 1 7F F0 .dbyt 7FF0h +002134r 1 7F F1 .dbyt 7FF1h +002136r 1 7F F2 .dbyt 7FF2h +002138r 1 7F F3 .dbyt 7FF3h +00213Ar 1 7F F4 .dbyt 7FF4h +00213Cr 1 7F F5 .dbyt 7FF5h +00213Er 1 7F F6 .dbyt 7FF6h +002140r 1 7F F7 .dbyt 7FF7h +002142r 1 7F F8 .dbyt 7FF8h +002144r 1 7F F9 .dbyt 7FF9h +002146r 1 7F FA .dbyt 7FFAh +002148r 1 7F FB .dbyt 7FFBh +00214Ar 1 7F FC .dbyt 7FFCh +00214Cr 1 7F FD .dbyt 7FFDh +00214Er 1 7F FE .dbyt 7FFEh +002150r 1 7F FF .dbyt 7FFFh +002152r 1 80 00 .dbyt 8000h +002154r 1 80 01 .dbyt 8001h +002156r 1 80 02 .dbyt 8002h +002158r 1 80 03 .dbyt 8003h +00215Ar 1 80 04 .dbyt 8004h +00215Cr 1 80 05 .dbyt 8005h +00215Er 1 80 06 .dbyt 8006h +002160r 1 80 07 .dbyt 8007h +002162r 1 80 08 .dbyt 8008h +002164r 1 80 09 .dbyt 8009h +002166r 1 80 0A .dbyt 800Ah +002168r 1 80 0B .dbyt 800Bh +00216Ar 1 9F E1 .dbyt 9FE1h +00216Cr 1 9F E2 .dbyt 9FE2h +00216Er 1 9F E3 .dbyt 9FE3h +002170r 1 9F E4 .dbyt 9FE4h +002172r 1 9F E5 .dbyt 9FE5h +002174r 1 9F E6 .dbyt 9FE6h +002176r 1 9F E7 .dbyt 9FE7h +002178r 1 9F E8 .dbyt 9FE8h +00217Ar 1 9F E9 .dbyt 9FE9h +00217Cr 1 9F EA .dbyt 9FEAh +00217Er 1 9F EB .dbyt 9FEBh +002180r 1 9F EC .dbyt 9FECh +002182r 1 9F ED .dbyt 9FEDh +002184r 1 9F EE .dbyt 9FEEh +002186r 1 9F EF .dbyt 9FEFh +002188r 1 9F F0 .dbyt 9FF0h +00218Ar 1 9F F1 .dbyt 9FF1h +00218Cr 1 9F F2 .dbyt 9FF2h +00218Er 1 9F F3 .dbyt 9FF3h +002190r 1 9F F4 .dbyt 9FF4h +002192r 1 9F F5 .dbyt 9FF5h +002194r 1 9F F6 .dbyt 9FF6h +002196r 1 9F F7 .dbyt 9FF7h +002198r 1 9F F8 .dbyt 9FF8h +00219Ar 1 9F F9 .dbyt 9FF9h +00219Cr 1 9F FA .dbyt 9FFAh +00219Er 1 9F FB .dbyt 9FFBh +0021A0r 1 9F FC .dbyt 9FFCh +0021A2r 1 9F FD .dbyt 9FFDh +0021A4r 1 9F FE .dbyt 9FFEh +0021A6r 1 9F FF .dbyt 9FFFh +0021A8r 1 A0 00 .dbyt 0A000h +0021AAr 1 A0 01 .dbyt 0A001h +0021ACr 1 A0 02 .dbyt 0A002h +0021AEr 1 A0 03 .dbyt 0A003h +0021B0r 1 A0 04 .dbyt 0A004h +0021B2r 1 A0 05 .dbyt 0A005h +0021B4r 1 A0 06 .dbyt 0A006h +0021B6r 1 A0 07 .dbyt 0A007h +0021B8r 1 A0 08 .dbyt 0A008h +0021BAr 1 A0 09 .dbyt 0A009h +0021BCr 1 A0 0A .dbyt 0A00Ah +0021BEr 1 A0 0B .dbyt 0A00Bh +0021C0r 1 A0 0C .dbyt 0A00Ch +0021C2r 1 A0 0D .dbyt 0A00Dh +0021C4r 1 A0 0E .dbyt 0A00Eh +0021C6r 1 A0 0F .dbyt 0A00Fh +0021C8r 1 AF E1 .dbyt 0AFE1h +0021CAr 1 AF E2 .dbyt 0AFE2h +0021CCr 1 AF E3 .dbyt 0AFE3h +0021CEr 1 AF E4 .dbyt 0AFE4h +0021D0r 1 AF E5 .dbyt 0AFE5h +0021D2r 1 AF E6 .dbyt 0AFE6h +0021D4r 1 AF E7 .dbyt 0AFE7h +0021D6r 1 AF E8 .dbyt 0AFE8h +0021D8r 1 AF E9 .dbyt 0AFE9h +0021DAr 1 AF EA .dbyt 0AFEAh +0021DCr 1 AF EB .dbyt 0AFEBh +0021DEr 1 AF EC .dbyt 0AFECh +0021E0r 1 AF ED .dbyt 0AFEDh +0021E2r 1 AF EE .dbyt 0AFEEh +0021E4r 1 AF EF .dbyt 0AFEFh +0021E6r 1 AF F0 .dbyt 0AFF0h +0021E8r 1 AF F1 .dbyt 0AFF1h +0021EAr 1 AF F2 .dbyt 0AFF2h +0021ECr 1 AF F3 .dbyt 0AFF3h +0021EEr 1 AF F4 .dbyt 0AFF4h +0021F0r 1 AF F5 .dbyt 0AFF5h +0021F2r 1 AF F6 .dbyt 0AFF6h +0021F4r 1 AF F7 .dbyt 0AFF7h +0021F6r 1 AF F8 .dbyt 0AFF8h +0021F8r 1 AF F9 .dbyt 0AFF9h +0021FAr 1 AF FA .dbyt 0AFFAh +0021FCr 1 AF FB .dbyt 0AFFBh +0021FEr 1 AF FC .dbyt 0AFFCh +002200r 1 AF FD .dbyt 0AFFDh +002202r 1 AF FE .dbyt 0AFFEh +002204r 1 AF FF .dbyt 0AFFFh +002206r 1 B0 00 .dbyt 0B000h +002208r 1 B0 01 .dbyt 0B001h +00220Ar 1 B0 02 .dbyt 0B002h +00220Cr 1 B0 03 .dbyt 0B003h +00220Er 1 B0 04 .dbyt 0B004h +002210r 1 B0 05 .dbyt 0B005h +002212r 1 B0 06 .dbyt 0B006h +002214r 1 B0 07 .dbyt 0B007h +002216r 1 B0 08 .dbyt 0B008h +002218r 1 B0 09 .dbyt 0B009h +00221Ar 1 B0 0A .dbyt 0B00Ah +00221Cr 1 B0 0B .dbyt 0B00Bh +00221Er 1 B0 0C .dbyt 0B00Ch +002220r 1 B0 0D .dbyt 0B00Dh +002222r 1 B0 0E .dbyt 0B00Eh +002224r 1 B0 0F .dbyt 0B00Fh +002226r 1 BF E1 .dbyt 0BFE1h +002228r 1 BF E2 .dbyt 0BFE2h +00222Ar 1 BF E3 .dbyt 0BFE3h +00222Cr 1 BF E4 .dbyt 0BFE4h +00222Er 1 BF E5 .dbyt 0BFE5h +002230r 1 BF E6 .dbyt 0BFE6h +002232r 1 BF E7 .dbyt 0BFE7h +002234r 1 BF E8 .dbyt 0BFE8h +002236r 1 BF E9 .dbyt 0BFE9h +002238r 1 BF EA .dbyt 0BFEAh +00223Ar 1 BF EB .dbyt 0BFEBh +00223Cr 1 BF EC .dbyt 0BFECh +00223Er 1 BF ED .dbyt 0BFEDh +002240r 1 BF EE .dbyt 0BFEEh +002242r 1 BF EF .dbyt 0BFEFh +002244r 1 BF F0 .dbyt 0BFF0h +002246r 1 BF F1 .dbyt 0BFF1h +002248r 1 BF F2 .dbyt 0BFF2h +00224Ar 1 BF F3 .dbyt 0BFF3h +00224Cr 1 BF F4 .dbyt 0BFF4h +00224Er 1 BF F5 .dbyt 0BFF5h +002250r 1 BF F6 .dbyt 0BFF6h +002252r 1 BF F7 .dbyt 0BFF7h +002254r 1 BF F8 .dbyt 0BFF8h +002256r 1 BF F9 .dbyt 0BFF9h +002258r 1 BF FA .dbyt 0BFFAh +00225Ar 1 BF FB .dbyt 0BFFBh +00225Cr 1 BF FC .dbyt 0BFFCh +00225Er 1 BF FD .dbyt 0BFFDh +002260r 1 BF FE .dbyt 0BFFEh +002262r 1 BF FF .dbyt 0BFFFh +002264r 1 C0 00 .dbyt 0C000h +002266r 1 C0 01 .dbyt 0C001h +002268r 1 C0 02 .dbyt 0C002h +00226Ar 1 C0 03 .dbyt 0C003h +00226Cr 1 C0 04 .dbyt 0C004h +00226Er 1 C0 05 .dbyt 0C005h +002270r 1 C0 06 .dbyt 0C006h +002272r 1 C0 07 .dbyt 0C007h +002274r 1 C0 08 .dbyt 0C008h +002276r 1 C0 09 .dbyt 0C009h +002278r 1 C0 0A .dbyt 0C00Ah +00227Ar 1 C0 0B .dbyt 0C00Bh +00227Cr 1 C0 0C .dbyt 0C00Ch +00227Er 1 C0 0D .dbyt 0C00Dh +002280r 1 C0 0E .dbyt 0C00Eh +002282r 1 C0 0F .dbyt 0C00Fh +002284r 1 CF E1 .dbyt 0CFE1h +002286r 1 CF E2 .dbyt 0CFE2h +002288r 1 CF E3 .dbyt 0CFE3h +00228Ar 1 CF E4 .dbyt 0CFE4h +00228Cr 1 CF E5 .dbyt 0CFE5h +00228Er 1 CF E6 .dbyt 0CFE6h +002290r 1 CF E7 .dbyt 0CFE7h +002292r 1 CF E8 .dbyt 0CFE8h +002294r 1 CF E9 .dbyt 0CFE9h +002296r 1 CF EA .dbyt 0CFEAh +002298r 1 CF EB .dbyt 0CFEBh +00229Ar 1 CF EC .dbyt 0CFECh +00229Cr 1 CF ED .dbyt 0CFEDh +00229Er 1 CF EE .dbyt 0CFEEh +0022A0r 1 CF EF .dbyt 0CFEFh +0022A2r 1 CF F0 .dbyt 0CFF0h +0022A4r 1 CF F1 .dbyt 0CFF1h +0022A6r 1 CF F2 .dbyt 0CFF2h +0022A8r 1 CF F3 .dbyt 0CFF3h +0022AAr 1 CF F4 .dbyt 0CFF4h +0022ACr 1 CF F5 .dbyt 0CFF5h +0022AEr 1 CF F6 .dbyt 0CFF6h +0022B0r 1 CF F7 .dbyt 0CFF7h +0022B2r 1 CF F8 .dbyt 0CFF8h +0022B4r 1 CF F9 .dbyt 0CFF9h +0022B6r 1 CF FA .dbyt 0CFFAh +0022B8r 1 CF FB .dbyt 0CFFBh +0022BAr 1 CF FC .dbyt 0CFFCh +0022BCr 1 CF FD .dbyt 0CFFDh +0022BEr 1 CF FE .dbyt 0CFFEh +0022C0r 1 CF FF .dbyt 0CFFFh +0022C2r 1 D0 00 .dbyt 0D000h +0022C4r 1 D0 01 .dbyt 0D001h +0022C6r 1 D0 02 .dbyt 0D002h +0022C8r 1 D0 03 .dbyt 0D003h +0022CAr 1 D0 04 .dbyt 0D004h +0022CCr 1 D0 05 .dbyt 0D005h +0022CEr 1 D0 06 .dbyt 0D006h +0022D0r 1 D0 07 .dbyt 0D007h +0022D2r 1 D0 08 .dbyt 0D008h +0022D4r 1 D0 09 .dbyt 0D009h +0022D6r 1 D0 0A .dbyt 0D00Ah +0022D8r 1 D0 0B .dbyt 0D00Bh +0022DAr 1 D0 0C .dbyt 0D00Ch +0022DCr 1 D0 0D .dbyt 0D00Dh +0022DEr 1 D0 0E .dbyt 0D00Eh +0022E0r 1 D0 0F .dbyt 0D00Fh +0022E2r 1 DF E1 .dbyt 0DFE1h +0022E4r 1 DF E2 .dbyt 0DFE2h +0022E6r 1 DF E3 .dbyt 0DFE3h +0022E8r 1 DF E4 .dbyt 0DFE4h +0022EAr 1 DF E5 .dbyt 0DFE5h +0022ECr 1 DF E6 .dbyt 0DFE6h +0022EEr 1 DF E7 .dbyt 0DFE7h +0022F0r 1 DF E8 .dbyt 0DFE8h +0022F2r 1 DF E9 .dbyt 0DFE9h +0022F4r 1 DF EA .dbyt 0DFEAh +0022F6r 1 DF EB .dbyt 0DFEBh +0022F8r 1 DF EC .dbyt 0DFECh +0022FAr 1 DF ED .dbyt 0DFEDh +0022FCr 1 DF EE .dbyt 0DFEEh +0022FEr 1 DF EF .dbyt 0DFEFh +002300r 1 DF F0 .dbyt 0DFF0h +002302r 1 DF F1 .dbyt 0DFF1h +002304r 1 DF F2 .dbyt 0DFF2h +002306r 1 DF F3 .dbyt 0DFF3h +002308r 1 DF F4 .dbyt 0DFF4h +00230Ar 1 DF F5 .dbyt 0DFF5h +00230Cr 1 DF F6 .dbyt 0DFF6h +00230Er 1 DF F7 .dbyt 0DFF7h +002310r 1 DF F8 .dbyt 0DFF8h +002312r 1 DF F9 .dbyt 0DFF9h +002314r 1 DF FA .dbyt 0DFFAh +002316r 1 DF FB .dbyt 0DFFBh +002318r 1 DF FC .dbyt 0DFFCh +00231Ar 1 DF FD .dbyt 0DFFDh +00231Cr 1 DF FE .dbyt 0DFFEh +00231Er 1 DF FF .dbyt 0DFFFh +002320r 1 E0 00 .dbyt 0E000h +002322r 1 E0 01 .dbyt 0E001h +002324r 1 E0 02 .dbyt 0E002h +002326r 1 E0 03 .dbyt 0E003h +002328r 1 E0 04 .dbyt 0E004h +00232Ar 1 E0 05 .dbyt 0E005h +00232Cr 1 E0 06 .dbyt 0E006h +00232Er 1 E0 07 .dbyt 0E007h +002330r 1 E0 08 .dbyt 0E008h +002332r 1 E0 09 .dbyt 0E009h +002334r 1 E0 0A .dbyt 0E00Ah +002336r 1 E0 0B .dbyt 0E00Bh +002338r 1 E0 0C .dbyt 0E00Ch +00233Ar 1 E0 0D .dbyt 0E00Dh +00233Cr 1 E0 0E .dbyt 0E00Eh +00233Er 1 E0 0F .dbyt 0E00Fh +002340r 1 EF E1 .dbyt 0EFE1h +002342r 1 EF E2 .dbyt 0EFE2h +002344r 1 EF E3 .dbyt 0EFE3h +002346r 1 EF E4 .dbyt 0EFE4h +002348r 1 EF E5 .dbyt 0EFE5h +00234Ar 1 EF E6 .dbyt 0EFE6h +00234Cr 1 EF E7 .dbyt 0EFE7h +00234Er 1 EF E8 .dbyt 0EFE8h +002350r 1 EF E9 .dbyt 0EFE9h +002352r 1 EF EA .dbyt 0EFEAh +002354r 1 EF EB .dbyt 0EFEBh +002356r 1 EF EC .dbyt 0EFECh +002358r 1 EF ED .dbyt 0EFEDh +00235Ar 1 EF EE .dbyt 0EFEEh +00235Cr 1 EF EF .dbyt 0EFEFh +00235Er 1 EF F0 .dbyt 0EFF0h +002360r 1 EF F1 .dbyt 0EFF1h +002362r 1 EF F2 .dbyt 0EFF2h +002364r 1 EF F3 .dbyt 0EFF3h +002366r 1 EF F4 .dbyt 0EFF4h +002368r 1 EF F5 .dbyt 0EFF5h +00236Ar 1 EF F6 .dbyt 0EFF6h +00236Cr 1 EF F7 .dbyt 0EFF7h +00236Er 1 EF F8 .dbyt 0EFF8h +002370r 1 EF F9 .dbyt 0EFF9h +002372r 1 EF FA .dbyt 0EFFAh +002374r 1 EF FB .dbyt 0EFFBh +002376r 1 EF FC .dbyt 0EFFCh +002378r 1 EF FD .dbyt 0EFFDh +00237Ar 1 EF FE .dbyt 0EFFEh +00237Cr 1 EF FF .dbyt 0EFFFh +00237Er 1 F0 00 .dbyt 0F000h +002380r 1 F0 01 .dbyt 0F001h +002382r 1 F0 02 .dbyt 0F002h +002384r 1 F0 03 .dbyt 0F003h +002386r 1 F0 04 .dbyt 0F004h +002388r 1 F0 05 .dbyt 0F005h +00238Ar 1 F0 06 .dbyt 0F006h +00238Cr 1 F0 07 .dbyt 0F007h +00238Er 1 F0 08 .dbyt 0F008h +002390r 1 F0 09 .dbyt 0F009h +002392r 1 F0 0A .dbyt 0F00Ah +002394r 1 F0 0B .dbyt 0F00Bh +002396r 1 F0 0C .dbyt 0F00Ch +002398r 1 F0 0D .dbyt 0F00Dh +00239Ar 1 F0 0E .dbyt 0F00Eh +00239Cr 1 F0 0F .dbyt 0F00Fh +00239Er 1 FF E1 .dbyt 0FFE1h +0023A0r 1 FF E2 .dbyt 0FFE2h +0023A2r 1 FF E3 .dbyt 0FFE3h +0023A4r 1 FF E4 .dbyt 0FFE4h +0023A6r 1 FF E5 .dbyt 0FFE5h +0023A8r 1 FF E6 .dbyt 0FFE6h +0023AAr 1 FF E7 .dbyt 0FFE7h +0023ACr 1 FF E8 .dbyt 0FFE8h +0023AEr 1 FF E9 .dbyt 0FFE9h +0023B0r 1 FF EA .dbyt 0FFEAh +0023B2r 1 FF EB .dbyt 0FFEBh +0023B4r 1 FF EC .dbyt 0FFECh +0023B6r 1 FF ED .dbyt 0FFEDh +0023B8r 1 FF EE .dbyt 0FFEEh +0023BAr 1 FF EF .dbyt 0FFEFh +0023BCr 1 FF F0 .dbyt 0FFF0h +0023BEr 1 FF F1 .dbyt 0FFF1h +0023C0r 1 FF F2 .dbyt 0FFF2h +0023C2r 1 FF F3 .dbyt 0FFF3h +0023C4r 1 FF F4 .dbyt 0FFF4h +0023C6r 1 FF F5 .dbyt 0FFF5h +0023C8r 1 FF F6 .dbyt 0FFF6h +0023CAr 1 FF F7 .dbyt 0FFF7h +0023CCr 1 FF F8 .dbyt 0FFF8h +0023CEr 1 FF F9 .dbyt 0FFF9h +0023D0r 1 FF FA .dbyt 0FFFAh +0023D2r 1 FF FB .dbyt 0FFFBh +0023D4r 1 FF FC .dbyt 0FFFCh +0023D6r 1 FF FD .dbyt 0FFFDh +0023D8r 1 FF FE .dbyt 0FFFEh +0023DAr 1 FF FF .dbyt 0FFFFh +0023DCr 1 +0023DCr 1 ; alternative hex values, always leading zero +0023DCr 1 00 00 .dbyt 00h +0023DEr 1 00 01 .dbyt 01h +0023E0r 1 00 02 .dbyt 02h +0023E2r 1 00 03 .dbyt 03h +0023E4r 1 00 04 .dbyt 04h +0023E6r 1 00 05 .dbyt 05h +0023E8r 1 00 06 .dbyt 06h +0023EAr 1 00 07 .dbyt 07h +0023ECr 1 00 08 .dbyt 08h +0023EEr 1 00 09 .dbyt 09h +0023F0r 1 00 0A .dbyt 0ah +0023F2r 1 00 0B .dbyt 0bh +0023F4r 1 00 0C .dbyt 0ch +0023F6r 1 00 0D .dbyt 0dh +0023F8r 1 00 0E .dbyt 0eh +0023FAr 1 00 0F .dbyt 0fh +0023FCr 1 00 10 .dbyt 010h +0023FEr 1 00 11 .dbyt 011h +002400r 1 00 12 .dbyt 012h +002402r 1 00 13 .dbyt 013h +002404r 1 00 70 .dbyt 070h +002406r 1 00 71 .dbyt 071h +002408r 1 00 72 .dbyt 072h +00240Ar 1 00 73 .dbyt 073h +00240Cr 1 00 74 .dbyt 074h +00240Er 1 00 75 .dbyt 075h +002410r 1 00 76 .dbyt 076h +002412r 1 00 77 .dbyt 077h +002414r 1 00 78 .dbyt 078h +002416r 1 00 79 .dbyt 079h +002418r 1 00 7A .dbyt 07ah +00241Ar 1 00 7B .dbyt 07bh +00241Cr 1 00 7C .dbyt 07ch +00241Er 1 00 7D .dbyt 07dh +002420r 1 00 7E .dbyt 07eh +002422r 1 00 7F .dbyt 07fh +002424r 1 00 80 .dbyt 080h +002426r 1 00 81 .dbyt 081h +002428r 1 00 82 .dbyt 082h +00242Ar 1 00 83 .dbyt 083h +00242Cr 1 00 84 .dbyt 084h +00242Er 1 00 85 .dbyt 085h +002430r 1 00 86 .dbyt 086h +002432r 1 00 F0 .dbyt 0f0h +002434r 1 00 F1 .dbyt 0f1h +002436r 1 00 F2 .dbyt 0f2h +002438r 1 00 F3 .dbyt 0f3h +00243Ar 1 00 F4 .dbyt 0f4h +00243Cr 1 00 F5 .dbyt 0f5h +00243Er 1 00 F6 .dbyt 0f6h +002440r 1 00 F7 .dbyt 0f7h +002442r 1 00 F8 .dbyt 0f8h +002444r 1 00 F9 .dbyt 0f9h +002446r 1 00 FA .dbyt 0fah +002448r 1 00 FB .dbyt 0fbh +00244Ar 1 00 FC .dbyt 0fch +00244Cr 1 00 FD .dbyt 0fdh +00244Er 1 00 FE .dbyt 0feh +002450r 1 00 FF .dbyt 0ffh +002452r 1 01 00 .dbyt 0100h +002454r 1 01 01 .dbyt 0101h +002456r 1 01 02 .dbyt 0102h +002458r 1 01 03 .dbyt 0103h +00245Ar 1 0F D2 .dbyt 0fd2h +00245Cr 1 0F D3 .dbyt 0fd3h +00245Er 1 0F D4 .dbyt 0fd4h +002460r 1 0F D5 .dbyt 0fd5h +002462r 1 0F D6 .dbyt 0fd6h +002464r 1 0F D7 .dbyt 0fd7h +002466r 1 0F D8 .dbyt 0fd8h +002468r 1 0F D9 .dbyt 0fd9h +00246Ar 1 0F DA .dbyt 0fdah +00246Cr 1 0F DB .dbyt 0fdbh +00246Er 1 0F DC .dbyt 0fdch +002470r 1 0F DD .dbyt 0fddh +002472r 1 0F DE .dbyt 0fdeh +002474r 1 0F DF .dbyt 0fdfh +002476r 1 0F E0 .dbyt 0fe0h +002478r 1 0F E1 .dbyt 0fe1h +00247Ar 1 0F E2 .dbyt 0fe2h +00247Cr 1 0F E3 .dbyt 0fe3h +00247Er 1 0F E4 .dbyt 0fe4h +002480r 1 0F E5 .dbyt 0fe5h +002482r 1 0F E6 .dbyt 0fe6h +002484r 1 0F E7 .dbyt 0fe7h +002486r 1 0F E8 .dbyt 0fe8h +002488r 1 0F E9 .dbyt 0fe9h +00248Ar 1 0F EA .dbyt 0feah +00248Cr 1 0F EB .dbyt 0febh +00248Er 1 0F EC .dbyt 0fech +002490r 1 0F ED .dbyt 0fedh +002492r 1 0F EE .dbyt 0feeh +002494r 1 0F EF .dbyt 0fefh +002496r 1 0F F0 .dbyt 0ff0h +002498r 1 0F F1 .dbyt 0ff1h +00249Ar 1 0F F2 .dbyt 0ff2h +00249Cr 1 0F F3 .dbyt 0ff3h +00249Er 1 0F F4 .dbyt 0ff4h +0024A0r 1 0F F5 .dbyt 0ff5h +0024A2r 1 0F F6 .dbyt 0ff6h +0024A4r 1 0F F7 .dbyt 0ff7h +0024A6r 1 0F F8 .dbyt 0ff8h +0024A8r 1 0F F9 .dbyt 0ff9h +0024AAr 1 0F FA .dbyt 0ffah +0024ACr 1 0F FB .dbyt 0ffbh +0024AEr 1 0F FC .dbyt 0ffch +0024B0r 1 0F FD .dbyt 0ffdh +0024B2r 1 0F FE .dbyt 0ffeh +0024B4r 1 0F FF .dbyt 0fffh +0024B6r 1 10 00 .dbyt 01000h +0024B8r 1 10 01 .dbyt 01001h +0024BAr 1 10 02 .dbyt 01002h +0024BCr 1 10 03 .dbyt 01003h +0024BEr 1 10 04 .dbyt 01004h +0024C0r 1 10 05 .dbyt 01005h +0024C2r 1 10 06 .dbyt 01006h +0024C4r 1 10 07 .dbyt 01007h +0024C6r 1 10 08 .dbyt 01008h +0024C8r 1 7F F0 .dbyt 07ff0h +0024CAr 1 7F F1 .dbyt 07ff1h +0024CCr 1 7F F2 .dbyt 07ff2h +0024CEr 1 7F F3 .dbyt 07ff3h +0024D0r 1 7F F4 .dbyt 07ff4h +0024D2r 1 7F F5 .dbyt 07ff5h +0024D4r 1 7F F6 .dbyt 07ff6h +0024D6r 1 7F F7 .dbyt 07ff7h +0024D8r 1 7F F8 .dbyt 07ff8h +0024DAr 1 7F F9 .dbyt 07ff9h +0024DCr 1 7F FA .dbyt 07ffah +0024DEr 1 7F FB .dbyt 07ffbh +0024E0r 1 7F FC .dbyt 07ffch +0024E2r 1 7F FD .dbyt 07ffdh +0024E4r 1 7F FE .dbyt 07ffeh +0024E6r 1 7F FF .dbyt 07fffh +0024E8r 1 80 00 .dbyt 08000h +0024EAr 1 80 01 .dbyt 08001h +0024ECr 1 80 02 .dbyt 08002h +0024EEr 1 80 03 .dbyt 08003h +0024F0r 1 80 04 .dbyt 08004h +0024F2r 1 80 05 .dbyt 08005h +0024F4r 1 80 06 .dbyt 08006h +0024F6r 1 80 07 .dbyt 08007h +0024F8r 1 80 08 .dbyt 08008h +0024FAr 1 80 09 .dbyt 08009h +0024FCr 1 80 0A .dbyt 0800ah +0024FEr 1 80 0B .dbyt 0800bh +002500r 1 9F E1 .dbyt 09fe1h +002502r 1 9F E2 .dbyt 09fe2h +002504r 1 9F E3 .dbyt 09fe3h +002506r 1 9F E4 .dbyt 09fe4h +002508r 1 9F E5 .dbyt 09fe5h +00250Ar 1 9F E6 .dbyt 09fe6h +00250Cr 1 9F E7 .dbyt 09fe7h +00250Er 1 9F E8 .dbyt 09fe8h +002510r 1 9F E9 .dbyt 09fe9h +002512r 1 9F EA .dbyt 09feah +002514r 1 9F EB .dbyt 09febh +002516r 1 9F EC .dbyt 09fech +002518r 1 9F ED .dbyt 09fedh +00251Ar 1 9F EE .dbyt 09feeh +00251Cr 1 9F EF .dbyt 09fefh +00251Er 1 9F F0 .dbyt 09ff0h +002520r 1 9F F1 .dbyt 09ff1h +002522r 1 9F F2 .dbyt 09ff2h +002524r 1 9F F3 .dbyt 09ff3h +002526r 1 9F F4 .dbyt 09ff4h +002528r 1 9F F5 .dbyt 09ff5h +00252Ar 1 9F F6 .dbyt 09ff6h +00252Cr 1 9F F7 .dbyt 09ff7h +00252Er 1 9F F8 .dbyt 09ff8h +002530r 1 9F F9 .dbyt 09ff9h +002532r 1 9F FA .dbyt 09ffah +002534r 1 9F FB .dbyt 09ffbh +002536r 1 9F FC .dbyt 09ffch +002538r 1 9F FD .dbyt 09ffdh +00253Ar 1 9F FE .dbyt 09ffeh +00253Cr 1 9F FF .dbyt 09fffh +00253Er 1 A0 00 .dbyt 0a000h +002540r 1 A0 01 .dbyt 0a001h +002542r 1 A0 02 .dbyt 0a002h +002544r 1 A0 03 .dbyt 0a003h +002546r 1 A0 04 .dbyt 0a004h +002548r 1 A0 05 .dbyt 0a005h +00254Ar 1 A0 06 .dbyt 0a006h +00254Cr 1 A0 07 .dbyt 0a007h +00254Er 1 A0 08 .dbyt 0a008h +002550r 1 A0 09 .dbyt 0a009h +002552r 1 A0 0A .dbyt 0a00ah +002554r 1 A0 0B .dbyt 0a00bh +002556r 1 A0 0C .dbyt 0a00ch +002558r 1 A0 0D .dbyt 0a00dh +00255Ar 1 A0 0E .dbyt 0a00eh +00255Cr 1 A0 0F .dbyt 0a00fh +00255Er 1 AF E1 .dbyt 0afe1h +002560r 1 AF E2 .dbyt 0afe2h +002562r 1 AF E3 .dbyt 0afe3h +002564r 1 AF E4 .dbyt 0afe4h +002566r 1 AF E5 .dbyt 0afe5h +002568r 1 AF E6 .dbyt 0afe6h +00256Ar 1 AF E7 .dbyt 0afe7h +00256Cr 1 AF E8 .dbyt 0afe8h +00256Er 1 AF E9 .dbyt 0afe9h +002570r 1 AF EA .dbyt 0afeah +002572r 1 AF EB .dbyt 0afebh +002574r 1 AF EC .dbyt 0afech +002576r 1 AF ED .dbyt 0afedh +002578r 1 AF EE .dbyt 0afeeh +00257Ar 1 AF EF .dbyt 0afefh +00257Cr 1 AF F0 .dbyt 0aff0h +00257Er 1 AF F1 .dbyt 0aff1h +002580r 1 AF F2 .dbyt 0aff2h +002582r 1 AF F3 .dbyt 0aff3h +002584r 1 AF F4 .dbyt 0aff4h +002586r 1 AF F5 .dbyt 0aff5h +002588r 1 AF F6 .dbyt 0aff6h +00258Ar 1 AF F7 .dbyt 0aff7h +00258Cr 1 AF F8 .dbyt 0aff8h +00258Er 1 AF F9 .dbyt 0aff9h +002590r 1 AF FA .dbyt 0affah +002592r 1 AF FB .dbyt 0affbh +002594r 1 AF FC .dbyt 0affch +002596r 1 AF FD .dbyt 0affdh +002598r 1 AF FE .dbyt 0affeh +00259Ar 1 AF FF .dbyt 0afffh +00259Cr 1 B0 00 .dbyt 0b000h +00259Er 1 B0 01 .dbyt 0b001h +0025A0r 1 B0 02 .dbyt 0b002h +0025A2r 1 B0 03 .dbyt 0b003h +0025A4r 1 B0 04 .dbyt 0b004h +0025A6r 1 B0 05 .dbyt 0b005h +0025A8r 1 B0 06 .dbyt 0b006h +0025AAr 1 B0 07 .dbyt 0b007h +0025ACr 1 B0 08 .dbyt 0b008h +0025AEr 1 B0 09 .dbyt 0b009h +0025B0r 1 B0 0A .dbyt 0b00ah +0025B2r 1 B0 0B .dbyt 0b00bh +0025B4r 1 B0 0C .dbyt 0b00ch +0025B6r 1 B0 0D .dbyt 0b00dh +0025B8r 1 B0 0E .dbyt 0b00eh +0025BAr 1 B0 0F .dbyt 0b00fh +0025BCr 1 BF E1 .dbyt 0bfe1h +0025BEr 1 BF E2 .dbyt 0bfe2h +0025C0r 1 BF E3 .dbyt 0bfe3h +0025C2r 1 BF E4 .dbyt 0bfe4h +0025C4r 1 BF E5 .dbyt 0bfe5h +0025C6r 1 BF E6 .dbyt 0bfe6h +0025C8r 1 BF E7 .dbyt 0bfe7h +0025CAr 1 BF E8 .dbyt 0bfe8h +0025CCr 1 BF E9 .dbyt 0bfe9h +0025CEr 1 BF EA .dbyt 0bfeah +0025D0r 1 BF EB .dbyt 0bfebh +0025D2r 1 BF EC .dbyt 0bfech +0025D4r 1 BF ED .dbyt 0bfedh +0025D6r 1 BF EE .dbyt 0bfeeh +0025D8r 1 BF EF .dbyt 0bfefh +0025DAr 1 BF F0 .dbyt 0bff0h +0025DCr 1 BF F1 .dbyt 0bff1h +0025DEr 1 BF F2 .dbyt 0bff2h +0025E0r 1 BF F3 .dbyt 0bff3h +0025E2r 1 BF F4 .dbyt 0bff4h +0025E4r 1 BF F5 .dbyt 0bff5h +0025E6r 1 BF F6 .dbyt 0bff6h +0025E8r 1 BF F7 .dbyt 0bff7h +0025EAr 1 BF F8 .dbyt 0bff8h +0025ECr 1 BF F9 .dbyt 0bff9h +0025EEr 1 BF FA .dbyt 0bffah +0025F0r 1 BF FB .dbyt 0bffbh +0025F2r 1 BF FC .dbyt 0bffch +0025F4r 1 BF FD .dbyt 0bffdh +0025F6r 1 BF FE .dbyt 0bffeh +0025F8r 1 BF FF .dbyt 0bfffh +0025FAr 1 C0 00 .dbyt 0c000h +0025FCr 1 C0 01 .dbyt 0c001h +0025FEr 1 C0 02 .dbyt 0c002h +002600r 1 C0 03 .dbyt 0c003h +002602r 1 C0 04 .dbyt 0c004h +002604r 1 C0 05 .dbyt 0c005h +002606r 1 C0 06 .dbyt 0c006h +002608r 1 C0 07 .dbyt 0c007h +00260Ar 1 C0 08 .dbyt 0c008h +00260Cr 1 C0 09 .dbyt 0c009h +00260Er 1 C0 0A .dbyt 0c00ah +002610r 1 C0 0B .dbyt 0c00bh +002612r 1 C0 0C .dbyt 0c00ch +002614r 1 C0 0D .dbyt 0c00dh +002616r 1 C0 0E .dbyt 0c00eh +002618r 1 C0 0F .dbyt 0c00fh +00261Ar 1 CF E1 .dbyt 0cfe1h +00261Cr 1 CF E2 .dbyt 0cfe2h +00261Er 1 CF E3 .dbyt 0cfe3h +002620r 1 CF E4 .dbyt 0cfe4h +002622r 1 CF E5 .dbyt 0cfe5h +002624r 1 CF E6 .dbyt 0cfe6h +002626r 1 CF E7 .dbyt 0cfe7h +002628r 1 CF E8 .dbyt 0cfe8h +00262Ar 1 CF E9 .dbyt 0cfe9h +00262Cr 1 CF EA .dbyt 0cfeah +00262Er 1 CF EB .dbyt 0cfebh +002630r 1 CF EC .dbyt 0cfech +002632r 1 CF ED .dbyt 0cfedh +002634r 1 CF EE .dbyt 0cfeeh +002636r 1 CF EF .dbyt 0cfefh +002638r 1 CF F0 .dbyt 0cff0h +00263Ar 1 CF F1 .dbyt 0cff1h +00263Cr 1 CF F2 .dbyt 0cff2h +00263Er 1 CF F3 .dbyt 0cff3h +002640r 1 CF F4 .dbyt 0cff4h +002642r 1 CF F5 .dbyt 0cff5h +002644r 1 CF F6 .dbyt 0cff6h +002646r 1 CF F7 .dbyt 0cff7h +002648r 1 CF F8 .dbyt 0cff8h +00264Ar 1 CF F9 .dbyt 0cff9h +00264Cr 1 CF FA .dbyt 0cffah +00264Er 1 CF FB .dbyt 0cffbh +002650r 1 CF FC .dbyt 0cffch +002652r 1 CF FD .dbyt 0cffdh +002654r 1 CF FE .dbyt 0cffeh +002656r 1 CF FF .dbyt 0cfffh +002658r 1 D0 00 .dbyt 0d000h +00265Ar 1 D0 01 .dbyt 0d001h +00265Cr 1 D0 02 .dbyt 0d002h +00265Er 1 D0 03 .dbyt 0d003h +002660r 1 D0 04 .dbyt 0d004h +002662r 1 D0 05 .dbyt 0d005h +002664r 1 D0 06 .dbyt 0d006h +002666r 1 D0 07 .dbyt 0d007h +002668r 1 D0 08 .dbyt 0d008h +00266Ar 1 D0 09 .dbyt 0d009h +00266Cr 1 D0 0A .dbyt 0d00ah +00266Er 1 D0 0B .dbyt 0d00bh +002670r 1 D0 0C .dbyt 0d00ch +002672r 1 D0 0D .dbyt 0d00dh +002674r 1 D0 0E .dbyt 0d00eh +002676r 1 D0 0F .dbyt 0d00fh +002678r 1 DF E1 .dbyt 0dfe1h +00267Ar 1 DF E2 .dbyt 0dfe2h +00267Cr 1 DF E3 .dbyt 0dfe3h +00267Er 1 DF E4 .dbyt 0dfe4h +002680r 1 DF E5 .dbyt 0dfe5h +002682r 1 DF E6 .dbyt 0dfe6h +002684r 1 DF E7 .dbyt 0dfe7h +002686r 1 DF E8 .dbyt 0dfe8h +002688r 1 DF E9 .dbyt 0dfe9h +00268Ar 1 DF EA .dbyt 0dfeah +00268Cr 1 DF EB .dbyt 0dfebh +00268Er 1 DF EC .dbyt 0dfech +002690r 1 DF ED .dbyt 0dfedh +002692r 1 DF EE .dbyt 0dfeeh +002694r 1 DF EF .dbyt 0dfefh +002696r 1 DF F0 .dbyt 0dff0h +002698r 1 DF F1 .dbyt 0dff1h +00269Ar 1 DF F2 .dbyt 0dff2h +00269Cr 1 DF F3 .dbyt 0dff3h +00269Er 1 DF F4 .dbyt 0dff4h +0026A0r 1 DF F5 .dbyt 0dff5h +0026A2r 1 DF F6 .dbyt 0dff6h +0026A4r 1 DF F7 .dbyt 0dff7h +0026A6r 1 DF F8 .dbyt 0dff8h +0026A8r 1 DF F9 .dbyt 0dff9h +0026AAr 1 DF FA .dbyt 0dffah +0026ACr 1 DF FB .dbyt 0dffbh +0026AEr 1 DF FC .dbyt 0dffch +0026B0r 1 DF FD .dbyt 0dffdh +0026B2r 1 DF FE .dbyt 0dffeh +0026B4r 1 DF FF .dbyt 0dfffh +0026B6r 1 E0 00 .dbyt 0e000h +0026B8r 1 E0 01 .dbyt 0e001h +0026BAr 1 E0 02 .dbyt 0e002h +0026BCr 1 E0 03 .dbyt 0e003h +0026BEr 1 E0 04 .dbyt 0e004h +0026C0r 1 E0 05 .dbyt 0e005h +0026C2r 1 E0 06 .dbyt 0e006h +0026C4r 1 E0 07 .dbyt 0e007h +0026C6r 1 E0 08 .dbyt 0e008h +0026C8r 1 E0 09 .dbyt 0e009h +0026CAr 1 E0 0A .dbyt 0e00ah +0026CCr 1 E0 0B .dbyt 0e00bh +0026CEr 1 E0 0C .dbyt 0e00ch +0026D0r 1 E0 0D .dbyt 0e00dh +0026D2r 1 E0 0E .dbyt 0e00eh +0026D4r 1 E0 0F .dbyt 0e00fh +0026D6r 1 EF E1 .dbyt 0efe1h +0026D8r 1 EF E2 .dbyt 0efe2h +0026DAr 1 EF E3 .dbyt 0efe3h +0026DCr 1 EF E4 .dbyt 0efe4h +0026DEr 1 EF E5 .dbyt 0efe5h +0026E0r 1 EF E6 .dbyt 0efe6h +0026E2r 1 EF E7 .dbyt 0efe7h +0026E4r 1 EF E8 .dbyt 0efe8h +0026E6r 1 EF E9 .dbyt 0efe9h +0026E8r 1 EF EA .dbyt 0efeah +0026EAr 1 EF EB .dbyt 0efebh +0026ECr 1 EF EC .dbyt 0efech +0026EEr 1 EF ED .dbyt 0efedh +0026F0r 1 EF EE .dbyt 0efeeh +0026F2r 1 EF EF .dbyt 0efefh +0026F4r 1 EF F0 .dbyt 0eff0h +0026F6r 1 EF F1 .dbyt 0eff1h +0026F8r 1 EF F2 .dbyt 0eff2h +0026FAr 1 EF F3 .dbyt 0eff3h +0026FCr 1 EF F4 .dbyt 0eff4h +0026FEr 1 EF F5 .dbyt 0eff5h +002700r 1 EF F6 .dbyt 0eff6h +002702r 1 EF F7 .dbyt 0eff7h +002704r 1 EF F8 .dbyt 0eff8h +002706r 1 EF F9 .dbyt 0eff9h +002708r 1 EF FA .dbyt 0effah +00270Ar 1 EF FB .dbyt 0effbh +00270Cr 1 EF FC .dbyt 0effch +00270Er 1 EF FD .dbyt 0effdh +002710r 1 EF FE .dbyt 0effeh +002712r 1 EF FF .dbyt 0efffh +002714r 1 F0 00 .dbyt 0f000h +002716r 1 F0 01 .dbyt 0f001h +002718r 1 F0 02 .dbyt 0f002h +00271Ar 1 F0 03 .dbyt 0f003h +00271Cr 1 F0 04 .dbyt 0f004h +00271Er 1 F0 05 .dbyt 0f005h +002720r 1 F0 06 .dbyt 0f006h +002722r 1 F0 07 .dbyt 0f007h +002724r 1 F0 08 .dbyt 0f008h +002726r 1 F0 09 .dbyt 0f009h +002728r 1 F0 0A .dbyt 0f00ah +00272Ar 1 F0 0B .dbyt 0f00bh +00272Cr 1 F0 0C .dbyt 0f00ch +00272Er 1 F0 0D .dbyt 0f00dh +002730r 1 F0 0E .dbyt 0f00eh +002732r 1 F0 0F .dbyt 0f00fh +002734r 1 FF E1 .dbyt 0ffe1h +002736r 1 FF E2 .dbyt 0ffe2h +002738r 1 FF E3 .dbyt 0ffe3h +00273Ar 1 FF E4 .dbyt 0ffe4h +00273Cr 1 FF E5 .dbyt 0ffe5h +00273Er 1 FF E6 .dbyt 0ffe6h +002740r 1 FF E7 .dbyt 0ffe7h +002742r 1 FF E8 .dbyt 0ffe8h +002744r 1 FF E9 .dbyt 0ffe9h +002746r 1 FF EA .dbyt 0ffeah +002748r 1 FF EB .dbyt 0ffebh +00274Ar 1 FF EC .dbyt 0ffech +00274Cr 1 FF ED .dbyt 0ffedh +00274Er 1 FF EE .dbyt 0ffeeh +002750r 1 FF EF .dbyt 0ffefh +002752r 1 FF F0 .dbyt 0fff0h +002754r 1 FF F1 .dbyt 0fff1h +002756r 1 FF F2 .dbyt 0fff2h +002758r 1 FF F3 .dbyt 0fff3h +00275Ar 1 FF F4 .dbyt 0fff4h +00275Cr 1 FF F5 .dbyt 0fff5h +00275Er 1 FF F6 .dbyt 0fff6h +002760r 1 FF F7 .dbyt 0fff7h +002762r 1 FF F8 .dbyt 0fff8h +002764r 1 FF F9 .dbyt 0fff9h +002766r 1 FF FA .dbyt 0fffah +002768r 1 FF FB .dbyt 0fffbh +00276Ar 1 FF FC .dbyt 0fffch +00276Cr 1 FF FD .dbyt 0fffdh +00276Er 1 FF FE .dbyt 0fffeh +002770r 1 FF FF .dbyt 0ffffh +002772r 1 +002772r 1 ; binary values, variable length +002772r 1 00 00 .dbyt %0 +002774r 1 00 01 .dbyt %01 +002776r 1 00 02 .dbyt %010 +002778r 1 00 03 .dbyt %011 +00277Ar 1 00 04 .dbyt %0100 +00277Cr 1 00 05 .dbyt %0101 +00277Er 1 00 06 .dbyt %0110 +002780r 1 00 07 .dbyt %0111 +002782r 1 00 08 .dbyt %01000 +002784r 1 00 09 .dbyt %01001 +002786r 1 00 0A .dbyt %01010 +002788r 1 00 0B .dbyt %01011 +00278Ar 1 00 0C .dbyt %01100 +00278Cr 1 00 0D .dbyt %01101 +00278Er 1 00 0E .dbyt %01110 +002790r 1 00 0F .dbyt %01111 +002792r 1 00 10 .dbyt %010000 +002794r 1 00 11 .dbyt %010001 +002796r 1 00 12 .dbyt %010010 +002798r 1 00 13 .dbyt %010011 +00279Ar 1 00 70 .dbyt %01110000 +00279Cr 1 00 71 .dbyt %01110001 +00279Er 1 00 72 .dbyt %01110010 +0027A0r 1 00 73 .dbyt %01110011 +0027A2r 1 00 74 .dbyt %01110100 +0027A4r 1 00 75 .dbyt %01110101 +0027A6r 1 00 76 .dbyt %01110110 +0027A8r 1 00 77 .dbyt %01110111 +0027AAr 1 00 78 .dbyt %01111000 +0027ACr 1 00 79 .dbyt %01111001 +0027AEr 1 00 7A .dbyt %01111010 +0027B0r 1 00 7B .dbyt %01111011 +0027B2r 1 00 7C .dbyt %01111100 +0027B4r 1 00 7D .dbyt %01111101 +0027B6r 1 00 7E .dbyt %01111110 +0027B8r 1 00 7F .dbyt %01111111 +0027BAr 1 00 80 .dbyt %010000000 +0027BCr 1 00 81 .dbyt %010000001 +0027BEr 1 00 82 .dbyt %010000010 +0027C0r 1 00 83 .dbyt %010000011 +0027C2r 1 00 84 .dbyt %010000100 +0027C4r 1 00 85 .dbyt %010000101 +0027C6r 1 00 86 .dbyt %010000110 +0027C8r 1 00 F0 .dbyt %011110000 +0027CAr 1 00 F1 .dbyt %011110001 +0027CCr 1 00 F2 .dbyt %011110010 +0027CEr 1 00 F3 .dbyt %011110011 +0027D0r 1 00 F4 .dbyt %011110100 +0027D2r 1 00 F5 .dbyt %011110101 +0027D4r 1 00 F6 .dbyt %011110110 +0027D6r 1 00 F7 .dbyt %011110111 +0027D8r 1 00 F8 .dbyt %011111000 +0027DAr 1 00 F9 .dbyt %011111001 +0027DCr 1 00 FA .dbyt %011111010 +0027DEr 1 00 FB .dbyt %011111011 +0027E0r 1 00 FC .dbyt %011111100 +0027E2r 1 00 FD .dbyt %011111101 +0027E4r 1 00 FE .dbyt %011111110 +0027E6r 1 00 FF .dbyt %011111111 +0027E8r 1 01 00 .dbyt %100000000 +0027EAr 1 01 01 .dbyt %100000001 +0027ECr 1 01 02 .dbyt %100000010 +0027EEr 1 01 03 .dbyt %100000011 +0027F0r 1 0F D2 .dbyt %111111010010 +0027F2r 1 0F D3 .dbyt %111111010011 +0027F4r 1 0F D4 .dbyt %111111010100 +0027F6r 1 0F D5 .dbyt %111111010101 +0027F8r 1 0F D6 .dbyt %111111010110 +0027FAr 1 0F D7 .dbyt %111111010111 +0027FCr 1 0F D8 .dbyt %111111011000 +0027FEr 1 0F D9 .dbyt %111111011001 +002800r 1 0F DA .dbyt %111111011010 +002802r 1 0F DB .dbyt %111111011011 +002804r 1 0F DC .dbyt %111111011100 +002806r 1 0F DD .dbyt %111111011101 +002808r 1 0F DE .dbyt %111111011110 +00280Ar 1 0F DF .dbyt %111111011111 +00280Cr 1 0F E0 .dbyt %111111100000 +00280Er 1 0F E1 .dbyt %111111100001 +002810r 1 0F E2 .dbyt %111111100010 +002812r 1 0F E3 .dbyt %111111100011 +002814r 1 0F E4 .dbyt %111111100100 +002816r 1 0F E5 .dbyt %111111100101 +002818r 1 0F E6 .dbyt %111111100110 +00281Ar 1 0F E7 .dbyt %111111100111 +00281Cr 1 0F E8 .dbyt %111111101000 +00281Er 1 0F E9 .dbyt %111111101001 +002820r 1 0F EA .dbyt %111111101010 +002822r 1 0F EB .dbyt %111111101011 +002824r 1 0F EC .dbyt %111111101100 +002826r 1 0F ED .dbyt %111111101101 +002828r 1 0F EE .dbyt %111111101110 +00282Ar 1 0F EF .dbyt %111111101111 +00282Cr 1 0F F0 .dbyt %111111110000 +00282Er 1 0F F1 .dbyt %111111110001 +002830r 1 0F F2 .dbyt %111111110010 +002832r 1 0F F3 .dbyt %111111110011 +002834r 1 0F F4 .dbyt %111111110100 +002836r 1 0F F5 .dbyt %111111110101 +002838r 1 0F F6 .dbyt %111111110110 +00283Ar 1 0F F7 .dbyt %111111110111 +00283Cr 1 0F F8 .dbyt %111111111000 +00283Er 1 0F F9 .dbyt %111111111001 +002840r 1 0F FA .dbyt %111111111010 +002842r 1 0F FB .dbyt %111111111011 +002844r 1 0F FC .dbyt %111111111100 +002846r 1 0F FD .dbyt %111111111101 +002848r 1 0F FE .dbyt %111111111110 +00284Ar 1 0F FF .dbyt %111111111111 +00284Cr 1 10 00 .dbyt %1000000000000 +00284Er 1 10 01 .dbyt %1000000000001 +002850r 1 10 02 .dbyt %1000000000010 +002852r 1 10 03 .dbyt %1000000000011 +002854r 1 10 04 .dbyt %1000000000100 +002856r 1 10 05 .dbyt %1000000000101 +002858r 1 10 06 .dbyt %1000000000110 +00285Ar 1 10 07 .dbyt %1000000000111 +00285Cr 1 10 08 .dbyt %1000000001000 +00285Er 1 7F F0 .dbyt %111111111110000 +002860r 1 7F F1 .dbyt %111111111110001 +002862r 1 7F F2 .dbyt %111111111110010 +002864r 1 7F F3 .dbyt %111111111110011 +002866r 1 7F F4 .dbyt %111111111110100 +002868r 1 7F F5 .dbyt %111111111110101 +00286Ar 1 7F F6 .dbyt %111111111110110 +00286Cr 1 7F F7 .dbyt %111111111110111 +00286Er 1 7F F8 .dbyt %111111111111000 +002870r 1 7F F9 .dbyt %111111111111001 +002872r 1 7F FA .dbyt %111111111111010 +002874r 1 7F FB .dbyt %111111111111011 +002876r 1 7F FC .dbyt %111111111111100 +002878r 1 7F FD .dbyt %111111111111101 +00287Ar 1 7F FE .dbyt %111111111111110 +00287Cr 1 7F FF .dbyt %111111111111111 +00287Er 1 80 00 .dbyt %1000000000000000 +002880r 1 80 01 .dbyt %1000000000000001 +002882r 1 80 02 .dbyt %1000000000000010 +002884r 1 80 03 .dbyt %1000000000000011 +002886r 1 80 04 .dbyt %1000000000000100 +002888r 1 80 05 .dbyt %1000000000000101 +00288Ar 1 80 06 .dbyt %1000000000000110 +00288Cr 1 80 07 .dbyt %1000000000000111 +00288Er 1 80 08 .dbyt %1000000000001000 +002890r 1 80 09 .dbyt %1000000000001001 +002892r 1 80 0A .dbyt %1000000000001010 +002894r 1 80 0B .dbyt %1000000000001011 +002896r 1 9F E1 .dbyt %1001111111100001 +002898r 1 9F E2 .dbyt %1001111111100010 +00289Ar 1 9F E3 .dbyt %1001111111100011 +00289Cr 1 9F E4 .dbyt %1001111111100100 +00289Er 1 9F E5 .dbyt %1001111111100101 +0028A0r 1 9F E6 .dbyt %1001111111100110 +0028A2r 1 9F E7 .dbyt %1001111111100111 +0028A4r 1 9F E8 .dbyt %1001111111101000 +0028A6r 1 9F E9 .dbyt %1001111111101001 +0028A8r 1 9F EA .dbyt %1001111111101010 +0028AAr 1 9F EB .dbyt %1001111111101011 +0028ACr 1 9F EC .dbyt %1001111111101100 +0028AEr 1 9F ED .dbyt %1001111111101101 +0028B0r 1 9F EE .dbyt %1001111111101110 +0028B2r 1 9F EF .dbyt %1001111111101111 +0028B4r 1 9F F0 .dbyt %1001111111110000 +0028B6r 1 9F F1 .dbyt %1001111111110001 +0028B8r 1 9F F2 .dbyt %1001111111110010 +0028BAr 1 9F F3 .dbyt %1001111111110011 +0028BCr 1 9F F4 .dbyt %1001111111110100 +0028BEr 1 9F F5 .dbyt %1001111111110101 +0028C0r 1 9F F6 .dbyt %1001111111110110 +0028C2r 1 9F F7 .dbyt %1001111111110111 +0028C4r 1 9F F8 .dbyt %1001111111111000 +0028C6r 1 9F F9 .dbyt %1001111111111001 +0028C8r 1 9F FA .dbyt %1001111111111010 +0028CAr 1 9F FB .dbyt %1001111111111011 +0028CCr 1 9F FC .dbyt %1001111111111100 +0028CEr 1 9F FD .dbyt %1001111111111101 +0028D0r 1 9F FE .dbyt %1001111111111110 +0028D2r 1 9F FF .dbyt %1001111111111111 +0028D4r 1 A0 00 .dbyt %1010000000000000 +0028D6r 1 A0 01 .dbyt %1010000000000001 +0028D8r 1 A0 02 .dbyt %1010000000000010 +0028DAr 1 A0 03 .dbyt %1010000000000011 +0028DCr 1 A0 04 .dbyt %1010000000000100 +0028DEr 1 A0 05 .dbyt %1010000000000101 +0028E0r 1 A0 06 .dbyt %1010000000000110 +0028E2r 1 A0 07 .dbyt %1010000000000111 +0028E4r 1 A0 08 .dbyt %1010000000001000 +0028E6r 1 A0 09 .dbyt %1010000000001001 +0028E8r 1 A0 0A .dbyt %1010000000001010 +0028EAr 1 A0 0B .dbyt %1010000000001011 +0028ECr 1 A0 0C .dbyt %1010000000001100 +0028EEr 1 A0 0D .dbyt %1010000000001101 +0028F0r 1 A0 0E .dbyt %1010000000001110 +0028F2r 1 A0 0F .dbyt %1010000000001111 +0028F4r 1 AF E1 .dbyt %1010111111100001 +0028F6r 1 AF E2 .dbyt %1010111111100010 +0028F8r 1 AF E3 .dbyt %1010111111100011 +0028FAr 1 AF E4 .dbyt %1010111111100100 +0028FCr 1 AF E5 .dbyt %1010111111100101 +0028FEr 1 AF E6 .dbyt %1010111111100110 +002900r 1 AF E7 .dbyt %1010111111100111 +002902r 1 AF E8 .dbyt %1010111111101000 +002904r 1 AF E9 .dbyt %1010111111101001 +002906r 1 AF EA .dbyt %1010111111101010 +002908r 1 AF EB .dbyt %1010111111101011 +00290Ar 1 AF EC .dbyt %1010111111101100 +00290Cr 1 AF ED .dbyt %1010111111101101 +00290Er 1 AF EE .dbyt %1010111111101110 +002910r 1 AF EF .dbyt %1010111111101111 +002912r 1 AF F0 .dbyt %1010111111110000 +002914r 1 AF F1 .dbyt %1010111111110001 +002916r 1 AF F2 .dbyt %1010111111110010 +002918r 1 AF F3 .dbyt %1010111111110011 +00291Ar 1 AF F4 .dbyt %1010111111110100 +00291Cr 1 AF F5 .dbyt %1010111111110101 +00291Er 1 AF F6 .dbyt %1010111111110110 +002920r 1 AF F7 .dbyt %1010111111110111 +002922r 1 AF F8 .dbyt %1010111111111000 +002924r 1 AF F9 .dbyt %1010111111111001 +002926r 1 AF FA .dbyt %1010111111111010 +002928r 1 AF FB .dbyt %1010111111111011 +00292Ar 1 AF FC .dbyt %1010111111111100 +00292Cr 1 AF FD .dbyt %1010111111111101 +00292Er 1 AF FE .dbyt %1010111111111110 +002930r 1 AF FF .dbyt %1010111111111111 +002932r 1 B0 00 .dbyt %1011000000000000 +002934r 1 B0 01 .dbyt %1011000000000001 +002936r 1 B0 02 .dbyt %1011000000000010 +002938r 1 B0 03 .dbyt %1011000000000011 +00293Ar 1 B0 04 .dbyt %1011000000000100 +00293Cr 1 B0 05 .dbyt %1011000000000101 +00293Er 1 B0 06 .dbyt %1011000000000110 +002940r 1 B0 07 .dbyt %1011000000000111 +002942r 1 B0 08 .dbyt %1011000000001000 +002944r 1 B0 09 .dbyt %1011000000001001 +002946r 1 B0 0A .dbyt %1011000000001010 +002948r 1 B0 0B .dbyt %1011000000001011 +00294Ar 1 B0 0C .dbyt %1011000000001100 +00294Cr 1 B0 0D .dbyt %1011000000001101 +00294Er 1 B0 0E .dbyt %1011000000001110 +002950r 1 B0 0F .dbyt %1011000000001111 +002952r 1 BF E1 .dbyt %1011111111100001 +002954r 1 BF E2 .dbyt %1011111111100010 +002956r 1 BF E3 .dbyt %1011111111100011 +002958r 1 BF E4 .dbyt %1011111111100100 +00295Ar 1 BF E5 .dbyt %1011111111100101 +00295Cr 1 BF E6 .dbyt %1011111111100110 +00295Er 1 BF E7 .dbyt %1011111111100111 +002960r 1 BF E8 .dbyt %1011111111101000 +002962r 1 BF E9 .dbyt %1011111111101001 +002964r 1 BF EA .dbyt %1011111111101010 +002966r 1 BF EB .dbyt %1011111111101011 +002968r 1 BF EC .dbyt %1011111111101100 +00296Ar 1 BF ED .dbyt %1011111111101101 +00296Cr 1 BF EE .dbyt %1011111111101110 +00296Er 1 BF EF .dbyt %1011111111101111 +002970r 1 BF F0 .dbyt %1011111111110000 +002972r 1 BF F1 .dbyt %1011111111110001 +002974r 1 BF F2 .dbyt %1011111111110010 +002976r 1 BF F3 .dbyt %1011111111110011 +002978r 1 BF F4 .dbyt %1011111111110100 +00297Ar 1 BF F5 .dbyt %1011111111110101 +00297Cr 1 BF F6 .dbyt %1011111111110110 +00297Er 1 BF F7 .dbyt %1011111111110111 +002980r 1 BF F8 .dbyt %1011111111111000 +002982r 1 BF F9 .dbyt %1011111111111001 +002984r 1 BF FA .dbyt %1011111111111010 +002986r 1 BF FB .dbyt %1011111111111011 +002988r 1 BF FC .dbyt %1011111111111100 +00298Ar 1 BF FD .dbyt %1011111111111101 +00298Cr 1 BF FE .dbyt %1011111111111110 +00298Er 1 BF FF .dbyt %1011111111111111 +002990r 1 C0 00 .dbyt %1100000000000000 +002992r 1 C0 01 .dbyt %1100000000000001 +002994r 1 C0 02 .dbyt %1100000000000010 +002996r 1 C0 03 .dbyt %1100000000000011 +002998r 1 C0 04 .dbyt %1100000000000100 +00299Ar 1 C0 05 .dbyt %1100000000000101 +00299Cr 1 C0 06 .dbyt %1100000000000110 +00299Er 1 C0 07 .dbyt %1100000000000111 +0029A0r 1 C0 08 .dbyt %1100000000001000 +0029A2r 1 C0 09 .dbyt %1100000000001001 +0029A4r 1 C0 0A .dbyt %1100000000001010 +0029A6r 1 C0 0B .dbyt %1100000000001011 +0029A8r 1 C0 0C .dbyt %1100000000001100 +0029AAr 1 C0 0D .dbyt %1100000000001101 +0029ACr 1 C0 0E .dbyt %1100000000001110 +0029AEr 1 C0 0F .dbyt %1100000000001111 +0029B0r 1 CF E1 .dbyt %1100111111100001 +0029B2r 1 CF E2 .dbyt %1100111111100010 +0029B4r 1 CF E3 .dbyt %1100111111100011 +0029B6r 1 CF E4 .dbyt %1100111111100100 +0029B8r 1 CF E5 .dbyt %1100111111100101 +0029BAr 1 CF E6 .dbyt %1100111111100110 +0029BCr 1 CF E7 .dbyt %1100111111100111 +0029BEr 1 CF E8 .dbyt %1100111111101000 +0029C0r 1 CF E9 .dbyt %1100111111101001 +0029C2r 1 CF EA .dbyt %1100111111101010 +0029C4r 1 CF EB .dbyt %1100111111101011 +0029C6r 1 CF EC .dbyt %1100111111101100 +0029C8r 1 CF ED .dbyt %1100111111101101 +0029CAr 1 CF EE .dbyt %1100111111101110 +0029CCr 1 CF EF .dbyt %1100111111101111 +0029CEr 1 CF F0 .dbyt %1100111111110000 +0029D0r 1 CF F1 .dbyt %1100111111110001 +0029D2r 1 CF F2 .dbyt %1100111111110010 +0029D4r 1 CF F3 .dbyt %1100111111110011 +0029D6r 1 CF F4 .dbyt %1100111111110100 +0029D8r 1 CF F5 .dbyt %1100111111110101 +0029DAr 1 CF F6 .dbyt %1100111111110110 +0029DCr 1 CF F7 .dbyt %1100111111110111 +0029DEr 1 CF F8 .dbyt %1100111111111000 +0029E0r 1 CF F9 .dbyt %1100111111111001 +0029E2r 1 CF FA .dbyt %1100111111111010 +0029E4r 1 CF FB .dbyt %1100111111111011 +0029E6r 1 CF FC .dbyt %1100111111111100 +0029E8r 1 CF FD .dbyt %1100111111111101 +0029EAr 1 CF FE .dbyt %1100111111111110 +0029ECr 1 CF FF .dbyt %1100111111111111 +0029EEr 1 D0 00 .dbyt %1101000000000000 +0029F0r 1 D0 01 .dbyt %1101000000000001 +0029F2r 1 D0 02 .dbyt %1101000000000010 +0029F4r 1 D0 03 .dbyt %1101000000000011 +0029F6r 1 D0 04 .dbyt %1101000000000100 +0029F8r 1 D0 05 .dbyt %1101000000000101 +0029FAr 1 D0 06 .dbyt %1101000000000110 +0029FCr 1 D0 07 .dbyt %1101000000000111 +0029FEr 1 D0 08 .dbyt %1101000000001000 +002A00r 1 D0 09 .dbyt %1101000000001001 +002A02r 1 D0 0A .dbyt %1101000000001010 +002A04r 1 D0 0B .dbyt %1101000000001011 +002A06r 1 D0 0C .dbyt %1101000000001100 +002A08r 1 D0 0D .dbyt %1101000000001101 +002A0Ar 1 D0 0E .dbyt %1101000000001110 +002A0Cr 1 D0 0F .dbyt %1101000000001111 +002A0Er 1 DF E1 .dbyt %1101111111100001 +002A10r 1 DF E2 .dbyt %1101111111100010 +002A12r 1 DF E3 .dbyt %1101111111100011 +002A14r 1 DF E4 .dbyt %1101111111100100 +002A16r 1 DF E5 .dbyt %1101111111100101 +002A18r 1 DF E6 .dbyt %1101111111100110 +002A1Ar 1 DF E7 .dbyt %1101111111100111 +002A1Cr 1 DF E8 .dbyt %1101111111101000 +002A1Er 1 DF E9 .dbyt %1101111111101001 +002A20r 1 DF EA .dbyt %1101111111101010 +002A22r 1 DF EB .dbyt %1101111111101011 +002A24r 1 DF EC .dbyt %1101111111101100 +002A26r 1 DF ED .dbyt %1101111111101101 +002A28r 1 DF EE .dbyt %1101111111101110 +002A2Ar 1 DF EF .dbyt %1101111111101111 +002A2Cr 1 DF F0 .dbyt %1101111111110000 +002A2Er 1 DF F1 .dbyt %1101111111110001 +002A30r 1 DF F2 .dbyt %1101111111110010 +002A32r 1 DF F3 .dbyt %1101111111110011 +002A34r 1 DF F4 .dbyt %1101111111110100 +002A36r 1 DF F5 .dbyt %1101111111110101 +002A38r 1 DF F6 .dbyt %1101111111110110 +002A3Ar 1 DF F7 .dbyt %1101111111110111 +002A3Cr 1 DF F8 .dbyt %1101111111111000 +002A3Er 1 DF F9 .dbyt %1101111111111001 +002A40r 1 DF FA .dbyt %1101111111111010 +002A42r 1 DF FB .dbyt %1101111111111011 +002A44r 1 DF FC .dbyt %1101111111111100 +002A46r 1 DF FD .dbyt %1101111111111101 +002A48r 1 DF FE .dbyt %1101111111111110 +002A4Ar 1 DF FF .dbyt %1101111111111111 +002A4Cr 1 E0 00 .dbyt %1110000000000000 +002A4Er 1 E0 01 .dbyt %1110000000000001 +002A50r 1 E0 02 .dbyt %1110000000000010 +002A52r 1 E0 03 .dbyt %1110000000000011 +002A54r 1 E0 04 .dbyt %1110000000000100 +002A56r 1 E0 05 .dbyt %1110000000000101 +002A58r 1 E0 06 .dbyt %1110000000000110 +002A5Ar 1 E0 07 .dbyt %1110000000000111 +002A5Cr 1 E0 08 .dbyt %1110000000001000 +002A5Er 1 E0 09 .dbyt %1110000000001001 +002A60r 1 E0 0A .dbyt %1110000000001010 +002A62r 1 E0 0B .dbyt %1110000000001011 +002A64r 1 E0 0C .dbyt %1110000000001100 +002A66r 1 E0 0D .dbyt %1110000000001101 +002A68r 1 E0 0E .dbyt %1110000000001110 +002A6Ar 1 E0 0F .dbyt %1110000000001111 +002A6Cr 1 EF E1 .dbyt %1110111111100001 +002A6Er 1 EF E2 .dbyt %1110111111100010 +002A70r 1 EF E3 .dbyt %1110111111100011 +002A72r 1 EF E4 .dbyt %1110111111100100 +002A74r 1 EF E5 .dbyt %1110111111100101 +002A76r 1 EF E6 .dbyt %1110111111100110 +002A78r 1 EF E7 .dbyt %1110111111100111 +002A7Ar 1 EF E8 .dbyt %1110111111101000 +002A7Cr 1 EF E9 .dbyt %1110111111101001 +002A7Er 1 EF EA .dbyt %1110111111101010 +002A80r 1 EF EB .dbyt %1110111111101011 +002A82r 1 EF EC .dbyt %1110111111101100 +002A84r 1 EF ED .dbyt %1110111111101101 +002A86r 1 EF EE .dbyt %1110111111101110 +002A88r 1 EF EF .dbyt %1110111111101111 +002A8Ar 1 EF F0 .dbyt %1110111111110000 +002A8Cr 1 EF F1 .dbyt %1110111111110001 +002A8Er 1 EF F2 .dbyt %1110111111110010 +002A90r 1 EF F3 .dbyt %1110111111110011 +002A92r 1 EF F4 .dbyt %1110111111110100 +002A94r 1 EF F5 .dbyt %1110111111110101 +002A96r 1 EF F6 .dbyt %1110111111110110 +002A98r 1 EF F7 .dbyt %1110111111110111 +002A9Ar 1 EF F8 .dbyt %1110111111111000 +002A9Cr 1 EF F9 .dbyt %1110111111111001 +002A9Er 1 EF FA .dbyt %1110111111111010 +002AA0r 1 EF FB .dbyt %1110111111111011 +002AA2r 1 EF FC .dbyt %1110111111111100 +002AA4r 1 EF FD .dbyt %1110111111111101 +002AA6r 1 EF FE .dbyt %1110111111111110 +002AA8r 1 EF FF .dbyt %1110111111111111 +002AAAr 1 F0 00 .dbyt %1111000000000000 +002AACr 1 F0 01 .dbyt %1111000000000001 +002AAEr 1 F0 02 .dbyt %1111000000000010 +002AB0r 1 F0 03 .dbyt %1111000000000011 +002AB2r 1 F0 04 .dbyt %1111000000000100 +002AB4r 1 F0 05 .dbyt %1111000000000101 +002AB6r 1 F0 06 .dbyt %1111000000000110 +002AB8r 1 F0 07 .dbyt %1111000000000111 +002ABAr 1 F0 08 .dbyt %1111000000001000 +002ABCr 1 F0 09 .dbyt %1111000000001001 +002ABEr 1 F0 0A .dbyt %1111000000001010 +002AC0r 1 F0 0B .dbyt %1111000000001011 +002AC2r 1 F0 0C .dbyt %1111000000001100 +002AC4r 1 F0 0D .dbyt %1111000000001101 +002AC6r 1 F0 0E .dbyt %1111000000001110 +002AC8r 1 F0 0F .dbyt %1111000000001111 +002ACAr 1 FF E1 .dbyt %1111111111100001 +002ACCr 1 FF E2 .dbyt %1111111111100010 +002ACEr 1 FF E3 .dbyt %1111111111100011 +002AD0r 1 FF E4 .dbyt %1111111111100100 +002AD2r 1 FF E5 .dbyt %1111111111100101 +002AD4r 1 FF E6 .dbyt %1111111111100110 +002AD6r 1 FF E7 .dbyt %1111111111100111 +002AD8r 1 FF E8 .dbyt %1111111111101000 +002ADAr 1 FF E9 .dbyt %1111111111101001 +002ADCr 1 FF EA .dbyt %1111111111101010 +002ADEr 1 FF EB .dbyt %1111111111101011 +002AE0r 1 FF EC .dbyt %1111111111101100 +002AE2r 1 FF ED .dbyt %1111111111101101 +002AE4r 1 FF EE .dbyt %1111111111101110 +002AE6r 1 FF EF .dbyt %1111111111101111 +002AE8r 1 FF F0 .dbyt %1111111111110000 +002AEAr 1 FF F1 .dbyt %1111111111110001 +002AECr 1 FF F2 .dbyt %1111111111110010 +002AEEr 1 FF F3 .dbyt %1111111111110011 +002AF0r 1 FF F4 .dbyt %1111111111110100 +002AF2r 1 FF F5 .dbyt %1111111111110101 +002AF4r 1 FF F6 .dbyt %1111111111110110 +002AF6r 1 FF F7 .dbyt %1111111111110111 +002AF8r 1 FF F8 .dbyt %1111111111111000 +002AFAr 1 FF F9 .dbyt %1111111111111001 +002AFCr 1 FF FA .dbyt %1111111111111010 +002AFEr 1 FF FB .dbyt %1111111111111011 +002B00r 1 FF FC .dbyt %1111111111111100 +002B02r 1 FF FD .dbyt %1111111111111101 +002B04r 1 FF FE .dbyt %1111111111111110 +002B06r 1 FF FF .dbyt %1111111111111111 +002B08r 1 +002B08r 1 ; binary values, full length +002B08r 1 00 00 .dbyt %0000000000000000 +002B0Ar 1 00 01 .dbyt %0000000000000001 +002B0Cr 1 00 02 .dbyt %0000000000000010 +002B0Er 1 00 03 .dbyt %0000000000000011 +002B10r 1 00 04 .dbyt %0000000000000100 +002B12r 1 00 05 .dbyt %0000000000000101 +002B14r 1 00 06 .dbyt %0000000000000110 +002B16r 1 00 07 .dbyt %0000000000000111 +002B18r 1 00 08 .dbyt %0000000000001000 +002B1Ar 1 00 09 .dbyt %0000000000001001 +002B1Cr 1 00 0A .dbyt %0000000000001010 +002B1Er 1 00 0B .dbyt %0000000000001011 +002B20r 1 00 0C .dbyt %0000000000001100 +002B22r 1 00 0D .dbyt %0000000000001101 +002B24r 1 00 0E .dbyt %0000000000001110 +002B26r 1 00 0F .dbyt %0000000000001111 +002B28r 1 00 10 .dbyt %0000000000010000 +002B2Ar 1 00 11 .dbyt %0000000000010001 +002B2Cr 1 00 12 .dbyt %0000000000010010 +002B2Er 1 00 13 .dbyt %0000000000010011 +002B30r 1 00 70 .dbyt %0000000001110000 +002B32r 1 00 71 .dbyt %0000000001110001 +002B34r 1 00 72 .dbyt %0000000001110010 +002B36r 1 00 73 .dbyt %0000000001110011 +002B38r 1 00 74 .dbyt %0000000001110100 +002B3Ar 1 00 75 .dbyt %0000000001110101 +002B3Cr 1 00 76 .dbyt %0000000001110110 +002B3Er 1 00 77 .dbyt %0000000001110111 +002B40r 1 00 78 .dbyt %0000000001111000 +002B42r 1 00 79 .dbyt %0000000001111001 +002B44r 1 00 7A .dbyt %0000000001111010 +002B46r 1 00 7B .dbyt %0000000001111011 +002B48r 1 00 7C .dbyt %0000000001111100 +002B4Ar 1 00 7D .dbyt %0000000001111101 +002B4Cr 1 00 7E .dbyt %0000000001111110 +002B4Er 1 00 7F .dbyt %0000000001111111 +002B50r 1 00 80 .dbyt %0000000010000000 +002B52r 1 00 81 .dbyt %0000000010000001 +002B54r 1 00 82 .dbyt %0000000010000010 +002B56r 1 00 83 .dbyt %0000000010000011 +002B58r 1 00 84 .dbyt %0000000010000100 +002B5Ar 1 00 85 .dbyt %0000000010000101 +002B5Cr 1 00 86 .dbyt %0000000010000110 +002B5Er 1 00 F0 .dbyt %0000000011110000 +002B60r 1 00 F1 .dbyt %0000000011110001 +002B62r 1 00 F2 .dbyt %0000000011110010 +002B64r 1 00 F3 .dbyt %0000000011110011 +002B66r 1 00 F4 .dbyt %0000000011110100 +002B68r 1 00 F5 .dbyt %0000000011110101 +002B6Ar 1 00 F6 .dbyt %0000000011110110 +002B6Cr 1 00 F7 .dbyt %0000000011110111 +002B6Er 1 00 F8 .dbyt %0000000011111000 +002B70r 1 00 F9 .dbyt %0000000011111001 +002B72r 1 00 FA .dbyt %0000000011111010 +002B74r 1 00 FB .dbyt %0000000011111011 +002B76r 1 00 FC .dbyt %0000000011111100 +002B78r 1 00 FD .dbyt %0000000011111101 +002B7Ar 1 00 FE .dbyt %0000000011111110 +002B7Cr 1 00 FF .dbyt %0000000011111111 +002B7Er 1 01 00 .dbyt %0000000100000000 +002B80r 1 01 01 .dbyt %0000000100000001 +002B82r 1 01 02 .dbyt %0000000100000010 +002B84r 1 01 03 .dbyt %0000000100000011 +002B86r 1 0F D2 .dbyt %0000111111010010 +002B88r 1 0F D3 .dbyt %0000111111010011 +002B8Ar 1 0F D4 .dbyt %0000111111010100 +002B8Cr 1 0F D5 .dbyt %0000111111010101 +002B8Er 1 0F D6 .dbyt %0000111111010110 +002B90r 1 0F D7 .dbyt %0000111111010111 +002B92r 1 0F D8 .dbyt %0000111111011000 +002B94r 1 0F D9 .dbyt %0000111111011001 +002B96r 1 0F DA .dbyt %0000111111011010 +002B98r 1 0F DB .dbyt %0000111111011011 +002B9Ar 1 0F DC .dbyt %0000111111011100 +002B9Cr 1 0F DD .dbyt %0000111111011101 +002B9Er 1 0F DE .dbyt %0000111111011110 +002BA0r 1 0F DF .dbyt %0000111111011111 +002BA2r 1 0F E0 .dbyt %0000111111100000 +002BA4r 1 0F E1 .dbyt %0000111111100001 +002BA6r 1 0F E2 .dbyt %0000111111100010 +002BA8r 1 0F E3 .dbyt %0000111111100011 +002BAAr 1 0F E4 .dbyt %0000111111100100 +002BACr 1 0F E5 .dbyt %0000111111100101 +002BAEr 1 0F E6 .dbyt %0000111111100110 +002BB0r 1 0F E7 .dbyt %0000111111100111 +002BB2r 1 0F E8 .dbyt %0000111111101000 +002BB4r 1 0F E9 .dbyt %0000111111101001 +002BB6r 1 0F EA .dbyt %0000111111101010 +002BB8r 1 0F EB .dbyt %0000111111101011 +002BBAr 1 0F EC .dbyt %0000111111101100 +002BBCr 1 0F ED .dbyt %0000111111101101 +002BBEr 1 0F EE .dbyt %0000111111101110 +002BC0r 1 0F EF .dbyt %0000111111101111 +002BC2r 1 0F F0 .dbyt %0000111111110000 +002BC4r 1 0F F1 .dbyt %0000111111110001 +002BC6r 1 0F F2 .dbyt %0000111111110010 +002BC8r 1 0F F3 .dbyt %0000111111110011 +002BCAr 1 0F F4 .dbyt %0000111111110100 +002BCCr 1 0F F5 .dbyt %0000111111110101 +002BCEr 1 0F F6 .dbyt %0000111111110110 +002BD0r 1 0F F7 .dbyt %0000111111110111 +002BD2r 1 0F F8 .dbyt %0000111111111000 +002BD4r 1 0F F9 .dbyt %0000111111111001 +002BD6r 1 0F FA .dbyt %0000111111111010 +002BD8r 1 0F FB .dbyt %0000111111111011 +002BDAr 1 0F FC .dbyt %0000111111111100 +002BDCr 1 0F FD .dbyt %0000111111111101 +002BDEr 1 0F FE .dbyt %0000111111111110 +002BE0r 1 0F FF .dbyt %0000111111111111 +002BE2r 1 10 00 .dbyt %0001000000000000 +002BE4r 1 10 01 .dbyt %0001000000000001 +002BE6r 1 10 02 .dbyt %0001000000000010 +002BE8r 1 10 03 .dbyt %0001000000000011 +002BEAr 1 10 04 .dbyt %0001000000000100 +002BECr 1 10 05 .dbyt %0001000000000101 +002BEEr 1 10 06 .dbyt %0001000000000110 +002BF0r 1 10 07 .dbyt %0001000000000111 +002BF2r 1 10 08 .dbyt %0001000000001000 +002BF4r 1 7F F0 .dbyt %0111111111110000 +002BF6r 1 7F F1 .dbyt %0111111111110001 +002BF8r 1 7F F2 .dbyt %0111111111110010 +002BFAr 1 7F F3 .dbyt %0111111111110011 +002BFCr 1 7F F4 .dbyt %0111111111110100 +002BFEr 1 7F F5 .dbyt %0111111111110101 +002C00r 1 7F F6 .dbyt %0111111111110110 +002C02r 1 7F F7 .dbyt %0111111111110111 +002C04r 1 7F F8 .dbyt %0111111111111000 +002C06r 1 7F F9 .dbyt %0111111111111001 +002C08r 1 7F FA .dbyt %0111111111111010 +002C0Ar 1 7F FB .dbyt %0111111111111011 +002C0Cr 1 7F FC .dbyt %0111111111111100 +002C0Er 1 7F FD .dbyt %0111111111111101 +002C10r 1 7F FE .dbyt %0111111111111110 +002C12r 1 7F FF .dbyt %0111111111111111 +002C14r 1 80 00 .dbyt %1000000000000000 +002C16r 1 80 01 .dbyt %1000000000000001 +002C18r 1 80 02 .dbyt %1000000000000010 +002C1Ar 1 80 03 .dbyt %1000000000000011 +002C1Cr 1 80 04 .dbyt %1000000000000100 +002C1Er 1 80 05 .dbyt %1000000000000101 +002C20r 1 80 06 .dbyt %1000000000000110 +002C22r 1 80 07 .dbyt %1000000000000111 +002C24r 1 80 08 .dbyt %1000000000001000 +002C26r 1 80 09 .dbyt %1000000000001001 +002C28r 1 80 0A .dbyt %1000000000001010 +002C2Ar 1 80 0B .dbyt %1000000000001011 +002C2Cr 1 9F E1 .dbyt %1001111111100001 +002C2Er 1 9F E2 .dbyt %1001111111100010 +002C30r 1 9F E3 .dbyt %1001111111100011 +002C32r 1 9F E4 .dbyt %1001111111100100 +002C34r 1 9F E5 .dbyt %1001111111100101 +002C36r 1 9F E6 .dbyt %1001111111100110 +002C38r 1 9F E7 .dbyt %1001111111100111 +002C3Ar 1 9F E8 .dbyt %1001111111101000 +002C3Cr 1 9F E9 .dbyt %1001111111101001 +002C3Er 1 9F EA .dbyt %1001111111101010 +002C40r 1 9F EB .dbyt %1001111111101011 +002C42r 1 9F EC .dbyt %1001111111101100 +002C44r 1 9F ED .dbyt %1001111111101101 +002C46r 1 9F EE .dbyt %1001111111101110 +002C48r 1 9F EF .dbyt %1001111111101111 +002C4Ar 1 9F F0 .dbyt %1001111111110000 +002C4Cr 1 9F F1 .dbyt %1001111111110001 +002C4Er 1 9F F2 .dbyt %1001111111110010 +002C50r 1 9F F3 .dbyt %1001111111110011 +002C52r 1 9F F4 .dbyt %1001111111110100 +002C54r 1 9F F5 .dbyt %1001111111110101 +002C56r 1 9F F6 .dbyt %1001111111110110 +002C58r 1 9F F7 .dbyt %1001111111110111 +002C5Ar 1 9F F8 .dbyt %1001111111111000 +002C5Cr 1 9F F9 .dbyt %1001111111111001 +002C5Er 1 9F FA .dbyt %1001111111111010 +002C60r 1 9F FB .dbyt %1001111111111011 +002C62r 1 9F FC .dbyt %1001111111111100 +002C64r 1 9F FD .dbyt %1001111111111101 +002C66r 1 9F FE .dbyt %1001111111111110 +002C68r 1 9F FF .dbyt %1001111111111111 +002C6Ar 1 A0 00 .dbyt %1010000000000000 +002C6Cr 1 A0 01 .dbyt %1010000000000001 +002C6Er 1 A0 02 .dbyt %1010000000000010 +002C70r 1 A0 03 .dbyt %1010000000000011 +002C72r 1 A0 04 .dbyt %1010000000000100 +002C74r 1 A0 05 .dbyt %1010000000000101 +002C76r 1 A0 06 .dbyt %1010000000000110 +002C78r 1 A0 07 .dbyt %1010000000000111 +002C7Ar 1 A0 08 .dbyt %1010000000001000 +002C7Cr 1 A0 09 .dbyt %1010000000001001 +002C7Er 1 A0 0A .dbyt %1010000000001010 +002C80r 1 A0 0B .dbyt %1010000000001011 +002C82r 1 A0 0C .dbyt %1010000000001100 +002C84r 1 A0 0D .dbyt %1010000000001101 +002C86r 1 A0 0E .dbyt %1010000000001110 +002C88r 1 A0 0F .dbyt %1010000000001111 +002C8Ar 1 AF E1 .dbyt %1010111111100001 +002C8Cr 1 AF E2 .dbyt %1010111111100010 +002C8Er 1 AF E3 .dbyt %1010111111100011 +002C90r 1 AF E4 .dbyt %1010111111100100 +002C92r 1 AF E5 .dbyt %1010111111100101 +002C94r 1 AF E6 .dbyt %1010111111100110 +002C96r 1 AF E7 .dbyt %1010111111100111 +002C98r 1 AF E8 .dbyt %1010111111101000 +002C9Ar 1 AF E9 .dbyt %1010111111101001 +002C9Cr 1 AF EA .dbyt %1010111111101010 +002C9Er 1 AF EB .dbyt %1010111111101011 +002CA0r 1 AF EC .dbyt %1010111111101100 +002CA2r 1 AF ED .dbyt %1010111111101101 +002CA4r 1 AF EE .dbyt %1010111111101110 +002CA6r 1 AF EF .dbyt %1010111111101111 +002CA8r 1 AF F0 .dbyt %1010111111110000 +002CAAr 1 AF F1 .dbyt %1010111111110001 +002CACr 1 AF F2 .dbyt %1010111111110010 +002CAEr 1 AF F3 .dbyt %1010111111110011 +002CB0r 1 AF F4 .dbyt %1010111111110100 +002CB2r 1 AF F5 .dbyt %1010111111110101 +002CB4r 1 AF F6 .dbyt %1010111111110110 +002CB6r 1 AF F7 .dbyt %1010111111110111 +002CB8r 1 AF F8 .dbyt %1010111111111000 +002CBAr 1 AF F9 .dbyt %1010111111111001 +002CBCr 1 AF FA .dbyt %1010111111111010 +002CBEr 1 AF FB .dbyt %1010111111111011 +002CC0r 1 AF FC .dbyt %1010111111111100 +002CC2r 1 AF FD .dbyt %1010111111111101 +002CC4r 1 AF FE .dbyt %1010111111111110 +002CC6r 1 AF FF .dbyt %1010111111111111 +002CC8r 1 B0 00 .dbyt %1011000000000000 +002CCAr 1 B0 01 .dbyt %1011000000000001 +002CCCr 1 B0 02 .dbyt %1011000000000010 +002CCEr 1 B0 03 .dbyt %1011000000000011 +002CD0r 1 B0 04 .dbyt %1011000000000100 +002CD2r 1 B0 05 .dbyt %1011000000000101 +002CD4r 1 B0 06 .dbyt %1011000000000110 +002CD6r 1 B0 07 .dbyt %1011000000000111 +002CD8r 1 B0 08 .dbyt %1011000000001000 +002CDAr 1 B0 09 .dbyt %1011000000001001 +002CDCr 1 B0 0A .dbyt %1011000000001010 +002CDEr 1 B0 0B .dbyt %1011000000001011 +002CE0r 1 B0 0C .dbyt %1011000000001100 +002CE2r 1 B0 0D .dbyt %1011000000001101 +002CE4r 1 B0 0E .dbyt %1011000000001110 +002CE6r 1 B0 0F .dbyt %1011000000001111 +002CE8r 1 BF E1 .dbyt %1011111111100001 +002CEAr 1 BF E2 .dbyt %1011111111100010 +002CECr 1 BF E3 .dbyt %1011111111100011 +002CEEr 1 BF E4 .dbyt %1011111111100100 +002CF0r 1 BF E5 .dbyt %1011111111100101 +002CF2r 1 BF E6 .dbyt %1011111111100110 +002CF4r 1 BF E7 .dbyt %1011111111100111 +002CF6r 1 BF E8 .dbyt %1011111111101000 +002CF8r 1 BF E9 .dbyt %1011111111101001 +002CFAr 1 BF EA .dbyt %1011111111101010 +002CFCr 1 BF EB .dbyt %1011111111101011 +002CFEr 1 BF EC .dbyt %1011111111101100 +002D00r 1 BF ED .dbyt %1011111111101101 +002D02r 1 BF EE .dbyt %1011111111101110 +002D04r 1 BF EF .dbyt %1011111111101111 +002D06r 1 BF F0 .dbyt %1011111111110000 +002D08r 1 BF F1 .dbyt %1011111111110001 +002D0Ar 1 BF F2 .dbyt %1011111111110010 +002D0Cr 1 BF F3 .dbyt %1011111111110011 +002D0Er 1 BF F4 .dbyt %1011111111110100 +002D10r 1 BF F5 .dbyt %1011111111110101 +002D12r 1 BF F6 .dbyt %1011111111110110 +002D14r 1 BF F7 .dbyt %1011111111110111 +002D16r 1 BF F8 .dbyt %1011111111111000 +002D18r 1 BF F9 .dbyt %1011111111111001 +002D1Ar 1 BF FA .dbyt %1011111111111010 +002D1Cr 1 BF FB .dbyt %1011111111111011 +002D1Er 1 BF FC .dbyt %1011111111111100 +002D20r 1 BF FD .dbyt %1011111111111101 +002D22r 1 BF FE .dbyt %1011111111111110 +002D24r 1 BF FF .dbyt %1011111111111111 +002D26r 1 C0 00 .dbyt %1100000000000000 +002D28r 1 C0 01 .dbyt %1100000000000001 +002D2Ar 1 C0 02 .dbyt %1100000000000010 +002D2Cr 1 C0 03 .dbyt %1100000000000011 +002D2Er 1 C0 04 .dbyt %1100000000000100 +002D30r 1 C0 05 .dbyt %1100000000000101 +002D32r 1 C0 06 .dbyt %1100000000000110 +002D34r 1 C0 07 .dbyt %1100000000000111 +002D36r 1 C0 08 .dbyt %1100000000001000 +002D38r 1 C0 09 .dbyt %1100000000001001 +002D3Ar 1 C0 0A .dbyt %1100000000001010 +002D3Cr 1 C0 0B .dbyt %1100000000001011 +002D3Er 1 C0 0C .dbyt %1100000000001100 +002D40r 1 C0 0D .dbyt %1100000000001101 +002D42r 1 C0 0E .dbyt %1100000000001110 +002D44r 1 C0 0F .dbyt %1100000000001111 +002D46r 1 CF E1 .dbyt %1100111111100001 +002D48r 1 CF E2 .dbyt %1100111111100010 +002D4Ar 1 CF E3 .dbyt %1100111111100011 +002D4Cr 1 CF E4 .dbyt %1100111111100100 +002D4Er 1 CF E5 .dbyt %1100111111100101 +002D50r 1 CF E6 .dbyt %1100111111100110 +002D52r 1 CF E7 .dbyt %1100111111100111 +002D54r 1 CF E8 .dbyt %1100111111101000 +002D56r 1 CF E9 .dbyt %1100111111101001 +002D58r 1 CF EA .dbyt %1100111111101010 +002D5Ar 1 CF EB .dbyt %1100111111101011 +002D5Cr 1 CF EC .dbyt %1100111111101100 +002D5Er 1 CF ED .dbyt %1100111111101101 +002D60r 1 CF EE .dbyt %1100111111101110 +002D62r 1 CF EF .dbyt %1100111111101111 +002D64r 1 CF F0 .dbyt %1100111111110000 +002D66r 1 CF F1 .dbyt %1100111111110001 +002D68r 1 CF F2 .dbyt %1100111111110010 +002D6Ar 1 CF F3 .dbyt %1100111111110011 +002D6Cr 1 CF F4 .dbyt %1100111111110100 +002D6Er 1 CF F5 .dbyt %1100111111110101 +002D70r 1 CF F6 .dbyt %1100111111110110 +002D72r 1 CF F7 .dbyt %1100111111110111 +002D74r 1 CF F8 .dbyt %1100111111111000 +002D76r 1 CF F9 .dbyt %1100111111111001 +002D78r 1 CF FA .dbyt %1100111111111010 +002D7Ar 1 CF FB .dbyt %1100111111111011 +002D7Cr 1 CF FC .dbyt %1100111111111100 +002D7Er 1 CF FD .dbyt %1100111111111101 +002D80r 1 CF FE .dbyt %1100111111111110 +002D82r 1 CF FF .dbyt %1100111111111111 +002D84r 1 D0 00 .dbyt %1101000000000000 +002D86r 1 D0 01 .dbyt %1101000000000001 +002D88r 1 D0 02 .dbyt %1101000000000010 +002D8Ar 1 D0 03 .dbyt %1101000000000011 +002D8Cr 1 D0 04 .dbyt %1101000000000100 +002D8Er 1 D0 05 .dbyt %1101000000000101 +002D90r 1 D0 06 .dbyt %1101000000000110 +002D92r 1 D0 07 .dbyt %1101000000000111 +002D94r 1 D0 08 .dbyt %1101000000001000 +002D96r 1 D0 09 .dbyt %1101000000001001 +002D98r 1 D0 0A .dbyt %1101000000001010 +002D9Ar 1 D0 0B .dbyt %1101000000001011 +002D9Cr 1 D0 0C .dbyt %1101000000001100 +002D9Er 1 D0 0D .dbyt %1101000000001101 +002DA0r 1 D0 0E .dbyt %1101000000001110 +002DA2r 1 D0 0F .dbyt %1101000000001111 +002DA4r 1 DF E1 .dbyt %1101111111100001 +002DA6r 1 DF E2 .dbyt %1101111111100010 +002DA8r 1 DF E3 .dbyt %1101111111100011 +002DAAr 1 DF E4 .dbyt %1101111111100100 +002DACr 1 DF E5 .dbyt %1101111111100101 +002DAEr 1 DF E6 .dbyt %1101111111100110 +002DB0r 1 DF E7 .dbyt %1101111111100111 +002DB2r 1 DF E8 .dbyt %1101111111101000 +002DB4r 1 DF E9 .dbyt %1101111111101001 +002DB6r 1 DF EA .dbyt %1101111111101010 +002DB8r 1 DF EB .dbyt %1101111111101011 +002DBAr 1 DF EC .dbyt %1101111111101100 +002DBCr 1 DF ED .dbyt %1101111111101101 +002DBEr 1 DF EE .dbyt %1101111111101110 +002DC0r 1 DF EF .dbyt %1101111111101111 +002DC2r 1 DF F0 .dbyt %1101111111110000 +002DC4r 1 DF F1 .dbyt %1101111111110001 +002DC6r 1 DF F2 .dbyt %1101111111110010 +002DC8r 1 DF F3 .dbyt %1101111111110011 +002DCAr 1 DF F4 .dbyt %1101111111110100 +002DCCr 1 DF F5 .dbyt %1101111111110101 +002DCEr 1 DF F6 .dbyt %1101111111110110 +002DD0r 1 DF F7 .dbyt %1101111111110111 +002DD2r 1 DF F8 .dbyt %1101111111111000 +002DD4r 1 DF F9 .dbyt %1101111111111001 +002DD6r 1 DF FA .dbyt %1101111111111010 +002DD8r 1 DF FB .dbyt %1101111111111011 +002DDAr 1 DF FC .dbyt %1101111111111100 +002DDCr 1 DF FD .dbyt %1101111111111101 +002DDEr 1 DF FE .dbyt %1101111111111110 +002DE0r 1 DF FF .dbyt %1101111111111111 +002DE2r 1 E0 00 .dbyt %1110000000000000 +002DE4r 1 E0 01 .dbyt %1110000000000001 +002DE6r 1 E0 02 .dbyt %1110000000000010 +002DE8r 1 E0 03 .dbyt %1110000000000011 +002DEAr 1 E0 04 .dbyt %1110000000000100 +002DECr 1 E0 05 .dbyt %1110000000000101 +002DEEr 1 E0 06 .dbyt %1110000000000110 +002DF0r 1 E0 07 .dbyt %1110000000000111 +002DF2r 1 E0 08 .dbyt %1110000000001000 +002DF4r 1 E0 09 .dbyt %1110000000001001 +002DF6r 1 E0 0A .dbyt %1110000000001010 +002DF8r 1 E0 0B .dbyt %1110000000001011 +002DFAr 1 E0 0C .dbyt %1110000000001100 +002DFCr 1 E0 0D .dbyt %1110000000001101 +002DFEr 1 E0 0E .dbyt %1110000000001110 +002E00r 1 E0 0F .dbyt %1110000000001111 +002E02r 1 EF E1 .dbyt %1110111111100001 +002E04r 1 EF E2 .dbyt %1110111111100010 +002E06r 1 EF E3 .dbyt %1110111111100011 +002E08r 1 EF E4 .dbyt %1110111111100100 +002E0Ar 1 EF E5 .dbyt %1110111111100101 +002E0Cr 1 EF E6 .dbyt %1110111111100110 +002E0Er 1 EF E7 .dbyt %1110111111100111 +002E10r 1 EF E8 .dbyt %1110111111101000 +002E12r 1 EF E9 .dbyt %1110111111101001 +002E14r 1 EF EA .dbyt %1110111111101010 +002E16r 1 EF EB .dbyt %1110111111101011 +002E18r 1 EF EC .dbyt %1110111111101100 +002E1Ar 1 EF ED .dbyt %1110111111101101 +002E1Cr 1 EF EE .dbyt %1110111111101110 +002E1Er 1 EF EF .dbyt %1110111111101111 +002E20r 1 EF F0 .dbyt %1110111111110000 +002E22r 1 EF F1 .dbyt %1110111111110001 +002E24r 1 EF F2 .dbyt %1110111111110010 +002E26r 1 EF F3 .dbyt %1110111111110011 +002E28r 1 EF F4 .dbyt %1110111111110100 +002E2Ar 1 EF F5 .dbyt %1110111111110101 +002E2Cr 1 EF F6 .dbyt %1110111111110110 +002E2Er 1 EF F7 .dbyt %1110111111110111 +002E30r 1 EF F8 .dbyt %1110111111111000 +002E32r 1 EF F9 .dbyt %1110111111111001 +002E34r 1 EF FA .dbyt %1110111111111010 +002E36r 1 EF FB .dbyt %1110111111111011 +002E38r 1 EF FC .dbyt %1110111111111100 +002E3Ar 1 EF FD .dbyt %1110111111111101 +002E3Cr 1 EF FE .dbyt %1110111111111110 +002E3Er 1 EF FF .dbyt %1110111111111111 +002E40r 1 F0 00 .dbyt %1111000000000000 +002E42r 1 F0 01 .dbyt %1111000000000001 +002E44r 1 F0 02 .dbyt %1111000000000010 +002E46r 1 F0 03 .dbyt %1111000000000011 +002E48r 1 F0 04 .dbyt %1111000000000100 +002E4Ar 1 F0 05 .dbyt %1111000000000101 +002E4Cr 1 F0 06 .dbyt %1111000000000110 +002E4Er 1 F0 07 .dbyt %1111000000000111 +002E50r 1 F0 08 .dbyt %1111000000001000 +002E52r 1 F0 09 .dbyt %1111000000001001 +002E54r 1 F0 0A .dbyt %1111000000001010 +002E56r 1 F0 0B .dbyt %1111000000001011 +002E58r 1 F0 0C .dbyt %1111000000001100 +002E5Ar 1 F0 0D .dbyt %1111000000001101 +002E5Cr 1 F0 0E .dbyt %1111000000001110 +002E5Er 1 F0 0F .dbyt %1111000000001111 +002E60r 1 FF E1 .dbyt %1111111111100001 +002E62r 1 FF E2 .dbyt %1111111111100010 +002E64r 1 FF E3 .dbyt %1111111111100011 +002E66r 1 FF E4 .dbyt %1111111111100100 +002E68r 1 FF E5 .dbyt %1111111111100101 +002E6Ar 1 FF E6 .dbyt %1111111111100110 +002E6Cr 1 FF E7 .dbyt %1111111111100111 +002E6Er 1 FF E8 .dbyt %1111111111101000 +002E70r 1 FF E9 .dbyt %1111111111101001 +002E72r 1 FF EA .dbyt %1111111111101010 +002E74r 1 FF EB .dbyt %1111111111101011 +002E76r 1 FF EC .dbyt %1111111111101100 +002E78r 1 FF ED .dbyt %1111111111101101 +002E7Ar 1 FF EE .dbyt %1111111111101110 +002E7Cr 1 FF EF .dbyt %1111111111101111 +002E7Er 1 FF F0 .dbyt %1111111111110000 +002E80r 1 FF F1 .dbyt %1111111111110001 +002E82r 1 FF F2 .dbyt %1111111111110010 +002E84r 1 FF F3 .dbyt %1111111111110011 +002E86r 1 FF F4 .dbyt %1111111111110100 +002E88r 1 FF F5 .dbyt %1111111111110101 +002E8Ar 1 FF F6 .dbyt %1111111111110110 +002E8Cr 1 FF F7 .dbyt %1111111111110111 +002E8Er 1 FF F8 .dbyt %1111111111111000 +002E90r 1 FF F9 .dbyt %1111111111111001 +002E92r 1 FF FA .dbyt %1111111111111010 +002E94r 1 FF FB .dbyt %1111111111111011 +002E96r 1 FF FC .dbyt %1111111111111100 +002E98r 1 FF FD .dbyt %1111111111111101 +002E9Ar 1 FF FE .dbyt %1111111111111110 +002E9Cr 1 FF FF .dbyt %1111111111111111 +002E9Er 1 +002E9Er 1 ; multiple values on one line, decimal +002E9Er 1 00 00 00 01 .dbyt 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +002EA2r 1 00 02 00 03 +002EA6r 1 00 04 00 05 +002EBEr 1 00 10 00 11 .dbyt 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +002EC2r 1 00 12 00 13 +002EC6r 1 00 14 00 15 +002EDEr 1 00 70 00 71 .dbyt 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +002EE2r 1 00 72 00 73 +002EE6r 1 00 74 00 75 +002EFEr 1 00 80 00 81 .dbyt 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +002F02r 1 00 82 00 83 +002F06r 1 00 84 00 85 +002F1Er 1 00 F0 00 F1 .dbyt 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +002F22r 1 00 F2 00 F3 +002F26r 1 00 F4 00 F5 +002F3Er 1 01 00 01 01 .dbyt 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 +002F42r 1 01 02 01 03 +002F46r 1 01 04 01 05 +002F5Er 1 0F E0 0F E1 .dbyt 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 +002F62r 1 0F E2 0F E3 +002F66r 1 0F E4 0F E5 +002F7Er 1 0F F0 0F F1 .dbyt 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 +002F82r 1 0F F2 0F F3 +002F86r 1 0F F4 0F F5 +002F9Er 1 10 00 10 01 .dbyt 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 +002FA2r 1 10 02 10 03 +002FA6r 1 10 04 10 05 +002FBEr 1 7F F0 7F F1 .dbyt 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 +002FC2r 1 7F F2 7F F3 +002FC6r 1 7F F4 7F F5 +002FDEr 1 80 00 80 01 .dbyt 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 +002FE2r 1 80 02 80 03 +002FE6r 1 80 04 80 05 +002FFEr 1 9F F0 9F F1 .dbyt 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 +003002r 1 9F F2 9F F3 +003006r 1 9F F4 9F F5 +00301Er 1 A0 00 A0 01 .dbyt 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 +003022r 1 A0 02 A0 03 +003026r 1 A0 04 A0 05 +00303Er 1 AF F0 AF F1 .dbyt 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 +003042r 1 AF F2 AF F3 +003046r 1 AF F4 AF F5 +00305Er 1 B0 00 B0 01 .dbyt 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 +003062r 1 B0 02 B0 03 +003066r 1 B0 04 B0 05 +00307Er 1 BF F0 BF F1 .dbyt 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 +003082r 1 BF F2 BF F3 +003086r 1 BF F4 BF F5 +00309Er 1 C0 00 C0 01 .dbyt 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 +0030A2r 1 C0 02 C0 03 +0030A6r 1 C0 04 C0 05 +0030BEr 1 CF F0 CF F1 .dbyt 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 +0030C2r 1 CF F2 CF F3 +0030C6r 1 CF F4 CF F5 +0030DEr 1 D0 00 D0 01 .dbyt 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 +0030E2r 1 D0 02 D0 03 +0030E6r 1 D0 04 D0 05 +0030FEr 1 DF F0 DF F1 .dbyt 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 +003102r 1 DF F2 DF F3 +003106r 1 DF F4 DF F5 +00311Er 1 E0 00 E0 01 .dbyt 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 +003122r 1 E0 02 E0 03 +003126r 1 E0 04 E0 05 +00313Er 1 EF F0 EF F1 .dbyt 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 +003142r 1 EF F2 EF F3 +003146r 1 EF F4 EF F5 +00315Er 1 F0 00 F0 01 .dbyt 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 +003162r 1 F0 02 F0 03 +003166r 1 F0 04 F0 05 +00317Er 1 FF F0 FF F1 .dbyt 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 +003182r 1 FF F2 FF F3 +003186r 1 FF F4 FF F5 +00319Er 1 +00319Er 1 ; multiple values on one line, hex +00319Er 1 00 00 00 01 .dbyt $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +0031A2r 1 00 02 00 03 +0031A6r 1 00 04 00 05 +0031BEr 1 00 10 00 11 .dbyt $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +0031C2r 1 00 12 00 13 +0031C6r 1 00 14 00 15 +0031DEr 1 00 70 00 71 .dbyt $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +0031E2r 1 00 72 00 73 +0031E6r 1 00 74 00 75 +0031FEr 1 00 80 00 81 .dbyt $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +003202r 1 00 82 00 83 +003206r 1 00 84 00 85 +00321Er 1 00 F0 00 F1 .dbyt $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +003222r 1 00 F2 00 F3 +003226r 1 00 F4 00 F5 +00323Er 1 01 00 01 01 .dbyt $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f +003242r 1 01 02 01 03 +003246r 1 01 04 01 05 +00325Er 1 0F E0 0F E1 .dbyt $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef +003262r 1 0F E2 0F E3 +003266r 1 0F E4 0F E5 +00327Er 1 0F F0 0F F1 .dbyt $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff +003282r 1 0F F2 0F F3 +003286r 1 0F F4 0F F5 +00329Er 1 10 00 10 01 .dbyt $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f +0032A2r 1 10 02 10 03 +0032A6r 1 10 04 10 05 +0032BEr 1 7F F0 7F F1 .dbyt $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff +0032C2r 1 7F F2 7F F3 +0032C6r 1 7F F4 7F F5 +0032DEr 1 80 00 80 01 .dbyt $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f +0032E2r 1 80 02 80 03 +0032E6r 1 80 04 80 05 +0032FEr 1 9F F0 9F F1 .dbyt $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff +003302r 1 9F F2 9F F3 +003306r 1 9F F4 9F F5 +00331Er 1 A0 00 A0 01 .dbyt $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f +003322r 1 A0 02 A0 03 +003326r 1 A0 04 A0 05 +00333Er 1 AF F0 AF F1 .dbyt $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff +003342r 1 AF F2 AF F3 +003346r 1 AF F4 AF F5 +00335Er 1 B0 00 B0 01 .dbyt $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f +003362r 1 B0 02 B0 03 +003366r 1 B0 04 B0 05 +00337Er 1 BF F0 BF F1 .dbyt $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff +003382r 1 BF F2 BF F3 +003386r 1 BF F4 BF F5 +00339Er 1 C0 00 C0 01 .dbyt $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f +0033A2r 1 C0 02 C0 03 +0033A6r 1 C0 04 C0 05 +0033BEr 1 CF F0 CF F1 .dbyt $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff +0033C2r 1 CF F2 CF F3 +0033C6r 1 CF F4 CF F5 +0033DEr 1 D0 00 D0 01 .dbyt $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f +0033E2r 1 D0 02 D0 03 +0033E6r 1 D0 04 D0 05 +0033FEr 1 DF F0 DF F1 .dbyt $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff +003402r 1 DF F2 DF F3 +003406r 1 DF F4 DF F5 +00341Er 1 E0 00 E0 01 .dbyt $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f +003422r 1 E0 02 E0 03 +003426r 1 E0 04 E0 05 +00343Er 1 EF F0 EF F1 .dbyt $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff +003442r 1 EF F2 EF F3 +003446r 1 EF F4 EF F5 +00345Er 1 F0 00 F0 01 .dbyt $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f +003462r 1 F0 02 F0 03 +003466r 1 F0 04 F0 05 +00347Er 1 FF F0 FF F1 .dbyt $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff +003482r 1 FF F2 FF F3 +003486r 1 FF F4 FF F5 +00349Er 1 +00349Er 1 ; multiple values on one line, alternative hex +00349Er 1 00 00 00 01 .dbyt 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +0034A2r 1 00 02 00 03 +0034A6r 1 00 04 00 05 +0034BEr 1 00 10 00 11 .dbyt 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +0034C2r 1 00 12 00 13 +0034C6r 1 00 14 00 15 +0034DEr 1 00 70 00 71 .dbyt 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +0034E2r 1 00 72 00 73 +0034E6r 1 00 74 00 75 +0034FEr 1 00 80 00 81 .dbyt 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +003502r 1 00 82 00 83 +003506r 1 00 84 00 85 +00351Er 1 00 F0 00 F1 .dbyt 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +003522r 1 00 F2 00 F3 +003526r 1 00 F4 00 F5 +00353Er 1 01 00 01 01 .dbyt 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh +003542r 1 01 02 01 03 +003546r 1 01 04 01 05 +00355Er 1 0F E0 0F E1 .dbyt 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh +003562r 1 0F E2 0F E3 +003566r 1 0F E4 0F E5 +00357Er 1 0F F0 0F F1 .dbyt 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh +003582r 1 0F F2 0F F3 +003586r 1 0F F4 0F F5 +00359Er 1 10 00 10 01 .dbyt 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh +0035A2r 1 10 02 10 03 +0035A6r 1 10 04 10 05 +0035BEr 1 7F F0 7F F1 .dbyt 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh +0035C2r 1 7F F2 7F F3 +0035C6r 1 7F F4 7F F5 +0035DEr 1 80 00 80 01 .dbyt 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh +0035E2r 1 80 02 80 03 +0035E6r 1 80 04 80 05 +0035FEr 1 9F F0 9F F1 .dbyt 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh +003602r 1 9F F2 9F F3 +003606r 1 9F F4 9F F5 +00361Er 1 A0 00 A0 01 .dbyt 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh +003622r 1 A0 02 A0 03 +003626r 1 A0 04 A0 05 +00363Er 1 AF F0 AF F1 .dbyt 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh +003642r 1 AF F2 AF F3 +003646r 1 AF F4 AF F5 +00365Er 1 B0 00 B0 01 .dbyt 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh +003662r 1 B0 02 B0 03 +003666r 1 B0 04 B0 05 +00367Er 1 BF F0 BF F1 .dbyt 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh +003682r 1 BF F2 BF F3 +003686r 1 BF F4 BF F5 +00369Er 1 C0 00 C0 01 .dbyt 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh +0036A2r 1 C0 02 C0 03 +0036A6r 1 C0 04 C0 05 +0036BEr 1 CF F0 CF F1 .dbyt 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh +0036C2r 1 CF F2 CF F3 +0036C6r 1 CF F4 CF F5 +0036DEr 1 D0 00 D0 01 .dbyt 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh +0036E2r 1 D0 02 D0 03 +0036E6r 1 D0 04 D0 05 +0036FEr 1 DF F0 DF F1 .dbyt 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh +003702r 1 DF F2 DF F3 +003706r 1 DF F4 DF F5 +00371Er 1 E0 00 E0 01 .dbyt 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh +003722r 1 E0 02 E0 03 +003726r 1 E0 04 E0 05 +00373Er 1 EF F0 EF F1 .dbyt 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh +003742r 1 EF F2 EF F3 +003746r 1 EF F4 EF F5 +00375Er 1 F0 00 F0 01 .dbyt 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh +003762r 1 F0 02 F0 03 +003766r 1 F0 04 F0 05 +00377Er 1 FF F0 FF F1 .dbyt 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh +003782r 1 FF F2 FF F3 +003786r 1 FF F4 FF F5 +00379Er 1 +00379Er 1 ; mix some variants +00379Er 1 00 0B 00 11 .dbyt 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +0037A2r 1 00 03 00 11 +0037A6r 1 00 61 00 62 +0037BCr 1 diff --git a/test/asm/listing/103-dbyt.s b/test/asm/listing/103-dbyt.s new file mode 100644 index 000000000..1c415b6b0 --- /dev/null +++ b/test/asm/listing/103-dbyt.s @@ -0,0 +1,6076 @@ +; 2022-06-15 Spiro Trikaliotis + + + ; upper case pseudo-op + .DBYT 0 + .DBYT 1 + .DBYT 2 + .DBYT 3 + .DBYT 4 + .DBYT 5 + .DBYT 6 + .DBYT 7 + .DBYT 8 + .DBYT 9 + .DBYT 10 + .DBYT 11 + .DBYT 12 + .DBYT 13 + .DBYT 14 + .DBYT 15 + .DBYT 16 + .DBYT 17 + .DBYT 18 + .DBYT 19 + .DBYT 112 + .DBYT 113 + .DBYT 114 + .DBYT 115 + .DBYT 116 + .DBYT 117 + .DBYT 118 + .DBYT 119 + .DBYT 120 + .DBYT 121 + .DBYT 122 + .DBYT 123 + .DBYT 124 + .DBYT 125 + .DBYT 126 + .DBYT 127 + .DBYT 128 + .DBYT 129 + .DBYT 130 + .DBYT 131 + .DBYT 132 + .DBYT 133 + .DBYT 134 + .DBYT 240 + .DBYT 241 + .DBYT 242 + .DBYT 243 + .DBYT 244 + .DBYT 245 + .DBYT 246 + .DBYT 247 + .DBYT 248 + .DBYT 249 + .DBYT 250 + .DBYT 251 + .DBYT 252 + .DBYT 253 + .DBYT 254 + .DBYT 255 + .DBYT 256 + .DBYT 257 + .DBYT 258 + .DBYT 259 + .DBYT 4050 + .DBYT 4051 + .DBYT 4052 + .DBYT 4053 + .DBYT 4054 + .DBYT 4055 + .DBYT 4056 + .DBYT 4057 + .DBYT 4058 + .DBYT 4059 + .DBYT 4060 + .DBYT 4061 + .DBYT 4062 + .DBYT 4063 + .DBYT 4064 + .DBYT 4065 + .DBYT 4066 + .DBYT 4067 + .DBYT 4068 + .DBYT 4069 + .DBYT 4070 + .DBYT 4071 + .DBYT 4072 + .DBYT 4073 + .DBYT 4074 + .DBYT 4075 + .DBYT 4076 + .DBYT 4077 + .DBYT 4078 + .DBYT 4079 + .DBYT 4080 + .DBYT 4081 + .DBYT 4082 + .DBYT 4083 + .DBYT 4084 + .DBYT 4085 + .DBYT 4086 + .DBYT 4087 + .DBYT 4088 + .DBYT 4089 + .DBYT 4090 + .DBYT 4091 + .DBYT 4092 + .DBYT 4093 + .DBYT 4094 + .DBYT 4095 + .DBYT 4096 + .DBYT 4097 + .DBYT 4098 + .DBYT 4099 + .DBYT 4100 + .DBYT 4101 + .DBYT 4102 + .DBYT 4103 + .DBYT 4104 + .DBYT 32752 + .DBYT 32753 + .DBYT 32754 + .DBYT 32755 + .DBYT 32756 + .DBYT 32757 + .DBYT 32758 + .DBYT 32759 + .DBYT 32760 + .DBYT 32761 + .DBYT 32762 + .DBYT 32763 + .DBYT 32764 + .DBYT 32765 + .DBYT 32766 + .DBYT 32767 + .DBYT 32768 + .DBYT 32769 + .DBYT 32770 + .DBYT 32771 + .DBYT 32772 + .DBYT 32773 + .DBYT 32774 + .DBYT 32775 + .DBYT 32776 + .DBYT 32777 + .DBYT 32778 + .DBYT 32779 + .DBYT 40929 + .DBYT 40930 + .DBYT 40931 + .DBYT 40932 + .DBYT 40933 + .DBYT 40934 + .DBYT 40935 + .DBYT 40936 + .DBYT 40937 + .DBYT 40938 + .DBYT 40939 + .DBYT 40940 + .DBYT 40941 + .DBYT 40942 + .DBYT 40943 + .DBYT 40944 + .DBYT 40945 + .DBYT 40946 + .DBYT 40947 + .DBYT 40948 + .DBYT 40949 + .DBYT 40950 + .DBYT 40951 + .DBYT 40952 + .DBYT 40953 + .DBYT 40954 + .DBYT 40955 + .DBYT 40956 + .DBYT 40957 + .DBYT 40958 + .DBYT 40959 + .DBYT 40960 + .DBYT 40961 + .DBYT 40962 + .DBYT 40963 + .DBYT 40964 + .DBYT 40965 + .DBYT 40966 + .DBYT 40967 + .DBYT 40968 + .DBYT 40969 + .DBYT 40970 + .DBYT 40971 + .DBYT 40972 + .DBYT 40973 + .DBYT 40974 + .DBYT 40975 + .DBYT 45025 + .DBYT 45026 + .DBYT 45027 + .DBYT 45028 + .DBYT 45029 + .DBYT 45030 + .DBYT 45031 + .DBYT 45032 + .DBYT 45033 + .DBYT 45034 + .DBYT 45035 + .DBYT 45036 + .DBYT 45037 + .DBYT 45038 + .DBYT 45039 + .DBYT 45040 + .DBYT 45041 + .DBYT 45042 + .DBYT 45043 + .DBYT 45044 + .DBYT 45045 + .DBYT 45046 + .DBYT 45047 + .DBYT 45048 + .DBYT 45049 + .DBYT 45050 + .DBYT 45051 + .DBYT 45052 + .DBYT 45053 + .DBYT 45054 + .DBYT 45055 + .DBYT 45056 + .DBYT 45057 + .DBYT 45058 + .DBYT 45059 + .DBYT 45060 + .DBYT 45061 + .DBYT 45062 + .DBYT 45063 + .DBYT 45064 + .DBYT 45065 + .DBYT 45066 + .DBYT 45067 + .DBYT 45068 + .DBYT 45069 + .DBYT 45070 + .DBYT 45071 + .DBYT 49121 + .DBYT 49122 + .DBYT 49123 + .DBYT 49124 + .DBYT 49125 + .DBYT 49126 + .DBYT 49127 + .DBYT 49128 + .DBYT 49129 + .DBYT 49130 + .DBYT 49131 + .DBYT 49132 + .DBYT 49133 + .DBYT 49134 + .DBYT 49135 + .DBYT 49136 + .DBYT 49137 + .DBYT 49138 + .DBYT 49139 + .DBYT 49140 + .DBYT 49141 + .DBYT 49142 + .DBYT 49143 + .DBYT 49144 + .DBYT 49145 + .DBYT 49146 + .DBYT 49147 + .DBYT 49148 + .DBYT 49149 + .DBYT 49150 + .DBYT 49151 + .DBYT 49152 + .DBYT 49153 + .DBYT 49154 + .DBYT 49155 + .DBYT 49156 + .DBYT 49157 + .DBYT 49158 + .DBYT 49159 + .DBYT 49160 + .DBYT 49161 + .DBYT 49162 + .DBYT 49163 + .DBYT 49164 + .DBYT 49165 + .DBYT 49166 + .DBYT 49167 + .DBYT 53217 + .DBYT 53218 + .DBYT 53219 + .DBYT 53220 + .DBYT 53221 + .DBYT 53222 + .DBYT 53223 + .DBYT 53224 + .DBYT 53225 + .DBYT 53226 + .DBYT 53227 + .DBYT 53228 + .DBYT 53229 + .DBYT 53230 + .DBYT 53231 + .DBYT 53232 + .DBYT 53233 + .DBYT 53234 + .DBYT 53235 + .DBYT 53236 + .DBYT 53237 + .DBYT 53238 + .DBYT 53239 + .DBYT 53240 + .DBYT 53241 + .DBYT 53242 + .DBYT 53243 + .DBYT 53244 + .DBYT 53245 + .DBYT 53246 + .DBYT 53247 + .DBYT 53248 + .DBYT 53249 + .DBYT 53250 + .DBYT 53251 + .DBYT 53252 + .DBYT 53253 + .DBYT 53254 + .DBYT 53255 + .DBYT 53256 + .DBYT 53257 + .DBYT 53258 + .DBYT 53259 + .DBYT 53260 + .DBYT 53261 + .DBYT 53262 + .DBYT 53263 + .DBYT 57313 + .DBYT 57314 + .DBYT 57315 + .DBYT 57316 + .DBYT 57317 + .DBYT 57318 + .DBYT 57319 + .DBYT 57320 + .DBYT 57321 + .DBYT 57322 + .DBYT 57323 + .DBYT 57324 + .DBYT 57325 + .DBYT 57326 + .DBYT 57327 + .DBYT 57328 + .DBYT 57329 + .DBYT 57330 + .DBYT 57331 + .DBYT 57332 + .DBYT 57333 + .DBYT 57334 + .DBYT 57335 + .DBYT 57336 + .DBYT 57337 + .DBYT 57338 + .DBYT 57339 + .DBYT 57340 + .DBYT 57341 + .DBYT 57342 + .DBYT 57343 + .DBYT 57344 + .DBYT 57345 + .DBYT 57346 + .DBYT 57347 + .DBYT 57348 + .DBYT 57349 + .DBYT 57350 + .DBYT 57351 + .DBYT 57352 + .DBYT 57353 + .DBYT 57354 + .DBYT 57355 + .DBYT 57356 + .DBYT 57357 + .DBYT 57358 + .DBYT 57359 + .DBYT 61409 + .DBYT 61410 + .DBYT 61411 + .DBYT 61412 + .DBYT 61413 + .DBYT 61414 + .DBYT 61415 + .DBYT 61416 + .DBYT 61417 + .DBYT 61418 + .DBYT 61419 + .DBYT 61420 + .DBYT 61421 + .DBYT 61422 + .DBYT 61423 + .DBYT 61424 + .DBYT 61425 + .DBYT 61426 + .DBYT 61427 + .DBYT 61428 + .DBYT 61429 + .DBYT 61430 + .DBYT 61431 + .DBYT 61432 + .DBYT 61433 + .DBYT 61434 + .DBYT 61435 + .DBYT 61436 + .DBYT 61437 + .DBYT 61438 + .DBYT 61439 + .DBYT 61440 + .DBYT 61441 + .DBYT 61442 + .DBYT 61443 + .DBYT 61444 + .DBYT 61445 + .DBYT 61446 + .DBYT 61447 + .DBYT 61448 + .DBYT 61449 + .DBYT 61450 + .DBYT 61451 + .DBYT 61452 + .DBYT 61453 + .DBYT 61454 + .DBYT 61455 + .DBYT 65505 + .DBYT 65506 + .DBYT 65507 + .DBYT 65508 + .DBYT 65509 + .DBYT 65510 + .DBYT 65511 + .DBYT 65512 + .DBYT 65513 + .DBYT 65514 + .DBYT 65515 + .DBYT 65516 + .DBYT 65517 + .DBYT 65518 + .DBYT 65519 + .DBYT 65520 + .DBYT 65521 + .DBYT 65522 + .DBYT 65523 + .DBYT 65524 + .DBYT 65525 + .DBYT 65526 + .DBYT 65527 + .DBYT 65528 + .DBYT 65529 + .DBYT 65530 + .DBYT 65531 + .DBYT 65532 + .DBYT 65533 + .DBYT 65534 + .DBYT 65535 + + ; lower case pseudo-op + .dbyt 0 + .dbyt 1 + .dbyt 2 + .dbyt 3 + .dbyt 4 + .dbyt 5 + .dbyt 6 + .dbyt 7 + .dbyt 8 + .dbyt 9 + .dbyt 10 + .dbyt 11 + .dbyt 12 + .dbyt 13 + .dbyt 14 + .dbyt 15 + .dbyt 16 + .dbyt 17 + .dbyt 18 + .dbyt 19 + .dbyt 112 + .dbyt 113 + .dbyt 114 + .dbyt 115 + .dbyt 116 + .dbyt 117 + .dbyt 118 + .dbyt 119 + .dbyt 120 + .dbyt 121 + .dbyt 122 + .dbyt 123 + .dbyt 124 + .dbyt 125 + .dbyt 126 + .dbyt 127 + .dbyt 128 + .dbyt 129 + .dbyt 130 + .dbyt 131 + .dbyt 132 + .dbyt 133 + .dbyt 134 + .dbyt 240 + .dbyt 241 + .dbyt 242 + .dbyt 243 + .dbyt 244 + .dbyt 245 + .dbyt 246 + .dbyt 247 + .dbyt 248 + .dbyt 249 + .dbyt 250 + .dbyt 251 + .dbyt 252 + .dbyt 253 + .dbyt 254 + .dbyt 255 + .dbyt 256 + .dbyt 257 + .dbyt 258 + .dbyt 259 + .dbyt 4050 + .dbyt 4051 + .dbyt 4052 + .dbyt 4053 + .dbyt 4054 + .dbyt 4055 + .dbyt 4056 + .dbyt 4057 + .dbyt 4058 + .dbyt 4059 + .dbyt 4060 + .dbyt 4061 + .dbyt 4062 + .dbyt 4063 + .dbyt 4064 + .dbyt 4065 + .dbyt 4066 + .dbyt 4067 + .dbyt 4068 + .dbyt 4069 + .dbyt 4070 + .dbyt 4071 + .dbyt 4072 + .dbyt 4073 + .dbyt 4074 + .dbyt 4075 + .dbyt 4076 + .dbyt 4077 + .dbyt 4078 + .dbyt 4079 + .dbyt 4080 + .dbyt 4081 + .dbyt 4082 + .dbyt 4083 + .dbyt 4084 + .dbyt 4085 + .dbyt 4086 + .dbyt 4087 + .dbyt 4088 + .dbyt 4089 + .dbyt 4090 + .dbyt 4091 + .dbyt 4092 + .dbyt 4093 + .dbyt 4094 + .dbyt 4095 + .dbyt 4096 + .dbyt 4097 + .dbyt 4098 + .dbyt 4099 + .dbyt 4100 + .dbyt 4101 + .dbyt 4102 + .dbyt 4103 + .dbyt 4104 + .dbyt 32752 + .dbyt 32753 + .dbyt 32754 + .dbyt 32755 + .dbyt 32756 + .dbyt 32757 + .dbyt 32758 + .dbyt 32759 + .dbyt 32760 + .dbyt 32761 + .dbyt 32762 + .dbyt 32763 + .dbyt 32764 + .dbyt 32765 + .dbyt 32766 + .dbyt 32767 + .dbyt 32768 + .dbyt 32769 + .dbyt 32770 + .dbyt 32771 + .dbyt 32772 + .dbyt 32773 + .dbyt 32774 + .dbyt 32775 + .dbyt 32776 + .dbyt 32777 + .dbyt 32778 + .dbyt 32779 + .dbyt 40929 + .dbyt 40930 + .dbyt 40931 + .dbyt 40932 + .dbyt 40933 + .dbyt 40934 + .dbyt 40935 + .dbyt 40936 + .dbyt 40937 + .dbyt 40938 + .dbyt 40939 + .dbyt 40940 + .dbyt 40941 + .dbyt 40942 + .dbyt 40943 + .dbyt 40944 + .dbyt 40945 + .dbyt 40946 + .dbyt 40947 + .dbyt 40948 + .dbyt 40949 + .dbyt 40950 + .dbyt 40951 + .dbyt 40952 + .dbyt 40953 + .dbyt 40954 + .dbyt 40955 + .dbyt 40956 + .dbyt 40957 + .dbyt 40958 + .dbyt 40959 + .dbyt 40960 + .dbyt 40961 + .dbyt 40962 + .dbyt 40963 + .dbyt 40964 + .dbyt 40965 + .dbyt 40966 + .dbyt 40967 + .dbyt 40968 + .dbyt 40969 + .dbyt 40970 + .dbyt 40971 + .dbyt 40972 + .dbyt 40973 + .dbyt 40974 + .dbyt 40975 + .dbyt 45025 + .dbyt 45026 + .dbyt 45027 + .dbyt 45028 + .dbyt 45029 + .dbyt 45030 + .dbyt 45031 + .dbyt 45032 + .dbyt 45033 + .dbyt 45034 + .dbyt 45035 + .dbyt 45036 + .dbyt 45037 + .dbyt 45038 + .dbyt 45039 + .dbyt 45040 + .dbyt 45041 + .dbyt 45042 + .dbyt 45043 + .dbyt 45044 + .dbyt 45045 + .dbyt 45046 + .dbyt 45047 + .dbyt 45048 + .dbyt 45049 + .dbyt 45050 + .dbyt 45051 + .dbyt 45052 + .dbyt 45053 + .dbyt 45054 + .dbyt 45055 + .dbyt 45056 + .dbyt 45057 + .dbyt 45058 + .dbyt 45059 + .dbyt 45060 + .dbyt 45061 + .dbyt 45062 + .dbyt 45063 + .dbyt 45064 + .dbyt 45065 + .dbyt 45066 + .dbyt 45067 + .dbyt 45068 + .dbyt 45069 + .dbyt 45070 + .dbyt 45071 + .dbyt 49121 + .dbyt 49122 + .dbyt 49123 + .dbyt 49124 + .dbyt 49125 + .dbyt 49126 + .dbyt 49127 + .dbyt 49128 + .dbyt 49129 + .dbyt 49130 + .dbyt 49131 + .dbyt 49132 + .dbyt 49133 + .dbyt 49134 + .dbyt 49135 + .dbyt 49136 + .dbyt 49137 + .dbyt 49138 + .dbyt 49139 + .dbyt 49140 + .dbyt 49141 + .dbyt 49142 + .dbyt 49143 + .dbyt 49144 + .dbyt 49145 + .dbyt 49146 + .dbyt 49147 + .dbyt 49148 + .dbyt 49149 + .dbyt 49150 + .dbyt 49151 + .dbyt 49152 + .dbyt 49153 + .dbyt 49154 + .dbyt 49155 + .dbyt 49156 + .dbyt 49157 + .dbyt 49158 + .dbyt 49159 + .dbyt 49160 + .dbyt 49161 + .dbyt 49162 + .dbyt 49163 + .dbyt 49164 + .dbyt 49165 + .dbyt 49166 + .dbyt 49167 + .dbyt 53217 + .dbyt 53218 + .dbyt 53219 + .dbyt 53220 + .dbyt 53221 + .dbyt 53222 + .dbyt 53223 + .dbyt 53224 + .dbyt 53225 + .dbyt 53226 + .dbyt 53227 + .dbyt 53228 + .dbyt 53229 + .dbyt 53230 + .dbyt 53231 + .dbyt 53232 + .dbyt 53233 + .dbyt 53234 + .dbyt 53235 + .dbyt 53236 + .dbyt 53237 + .dbyt 53238 + .dbyt 53239 + .dbyt 53240 + .dbyt 53241 + .dbyt 53242 + .dbyt 53243 + .dbyt 53244 + .dbyt 53245 + .dbyt 53246 + .dbyt 53247 + .dbyt 53248 + .dbyt 53249 + .dbyt 53250 + .dbyt 53251 + .dbyt 53252 + .dbyt 53253 + .dbyt 53254 + .dbyt 53255 + .dbyt 53256 + .dbyt 53257 + .dbyt 53258 + .dbyt 53259 + .dbyt 53260 + .dbyt 53261 + .dbyt 53262 + .dbyt 53263 + .dbyt 57313 + .dbyt 57314 + .dbyt 57315 + .dbyt 57316 + .dbyt 57317 + .dbyt 57318 + .dbyt 57319 + .dbyt 57320 + .dbyt 57321 + .dbyt 57322 + .dbyt 57323 + .dbyt 57324 + .dbyt 57325 + .dbyt 57326 + .dbyt 57327 + .dbyt 57328 + .dbyt 57329 + .dbyt 57330 + .dbyt 57331 + .dbyt 57332 + .dbyt 57333 + .dbyt 57334 + .dbyt 57335 + .dbyt 57336 + .dbyt 57337 + .dbyt 57338 + .dbyt 57339 + .dbyt 57340 + .dbyt 57341 + .dbyt 57342 + .dbyt 57343 + .dbyt 57344 + .dbyt 57345 + .dbyt 57346 + .dbyt 57347 + .dbyt 57348 + .dbyt 57349 + .dbyt 57350 + .dbyt 57351 + .dbyt 57352 + .dbyt 57353 + .dbyt 57354 + .dbyt 57355 + .dbyt 57356 + .dbyt 57357 + .dbyt 57358 + .dbyt 57359 + .dbyt 61409 + .dbyt 61410 + .dbyt 61411 + .dbyt 61412 + .dbyt 61413 + .dbyt 61414 + .dbyt 61415 + .dbyt 61416 + .dbyt 61417 + .dbyt 61418 + .dbyt 61419 + .dbyt 61420 + .dbyt 61421 + .dbyt 61422 + .dbyt 61423 + .dbyt 61424 + .dbyt 61425 + .dbyt 61426 + .dbyt 61427 + .dbyt 61428 + .dbyt 61429 + .dbyt 61430 + .dbyt 61431 + .dbyt 61432 + .dbyt 61433 + .dbyt 61434 + .dbyt 61435 + .dbyt 61436 + .dbyt 61437 + .dbyt 61438 + .dbyt 61439 + .dbyt 61440 + .dbyt 61441 + .dbyt 61442 + .dbyt 61443 + .dbyt 61444 + .dbyt 61445 + .dbyt 61446 + .dbyt 61447 + .dbyt 61448 + .dbyt 61449 + .dbyt 61450 + .dbyt 61451 + .dbyt 61452 + .dbyt 61453 + .dbyt 61454 + .dbyt 61455 + .dbyt 65505 + .dbyt 65506 + .dbyt 65507 + .dbyt 65508 + .dbyt 65509 + .dbyt 65510 + .dbyt 65511 + .dbyt 65512 + .dbyt 65513 + .dbyt 65514 + .dbyt 65515 + .dbyt 65516 + .dbyt 65517 + .dbyt 65518 + .dbyt 65519 + .dbyt 65520 + .dbyt 65521 + .dbyt 65522 + .dbyt 65523 + .dbyt 65524 + .dbyt 65525 + .dbyt 65526 + .dbyt 65527 + .dbyt 65528 + .dbyt 65529 + .dbyt 65530 + .dbyt 65531 + .dbyt 65532 + .dbyt 65533 + .dbyt 65534 + .dbyt 65535 + + ; hex values + .dbyt $0 + .dbyt $1 + .dbyt $2 + .dbyt $3 + .dbyt $4 + .dbyt $5 + .dbyt $6 + .dbyt $7 + .dbyt $8 + .dbyt $9 + .dbyt $a + .dbyt $b + .dbyt $c + .dbyt $d + .dbyt $e + .dbyt $f + .dbyt $10 + .dbyt $11 + .dbyt $12 + .dbyt $13 + .dbyt $70 + .dbyt $71 + .dbyt $72 + .dbyt $73 + .dbyt $74 + .dbyt $75 + .dbyt $76 + .dbyt $77 + .dbyt $78 + .dbyt $79 + .dbyt $7a + .dbyt $7b + .dbyt $7c + .dbyt $7d + .dbyt $7e + .dbyt $7f + .dbyt $80 + .dbyt $81 + .dbyt $82 + .dbyt $83 + .dbyt $84 + .dbyt $85 + .dbyt $86 + .dbyt $f0 + .dbyt $f1 + .dbyt $f2 + .dbyt $f3 + .dbyt $f4 + .dbyt $f5 + .dbyt $f6 + .dbyt $f7 + .dbyt $f8 + .dbyt $f9 + .dbyt $fa + .dbyt $fb + .dbyt $fc + .dbyt $fd + .dbyt $fe + .dbyt $ff + .dbyt $100 + .dbyt $101 + .dbyt $102 + .dbyt $103 + .dbyt $fd2 + .dbyt $fd3 + .dbyt $fd4 + .dbyt $fd5 + .dbyt $fd6 + .dbyt $fd7 + .dbyt $fd8 + .dbyt $fd9 + .dbyt $fda + .dbyt $fdb + .dbyt $fdc + .dbyt $fdd + .dbyt $fde + .dbyt $fdf + .dbyt $fe0 + .dbyt $fe1 + .dbyt $fe2 + .dbyt $fe3 + .dbyt $fe4 + .dbyt $fe5 + .dbyt $fe6 + .dbyt $fe7 + .dbyt $fe8 + .dbyt $fe9 + .dbyt $fea + .dbyt $feb + .dbyt $fec + .dbyt $fed + .dbyt $fee + .dbyt $fef + .dbyt $ff0 + .dbyt $ff1 + .dbyt $ff2 + .dbyt $ff3 + .dbyt $ff4 + .dbyt $ff5 + .dbyt $ff6 + .dbyt $ff7 + .dbyt $ff8 + .dbyt $ff9 + .dbyt $ffa + .dbyt $ffb + .dbyt $ffc + .dbyt $ffd + .dbyt $ffe + .dbyt $fff + .dbyt $1000 + .dbyt $1001 + .dbyt $1002 + .dbyt $1003 + .dbyt $1004 + .dbyt $1005 + .dbyt $1006 + .dbyt $1007 + .dbyt $1008 + .dbyt $7ff0 + .dbyt $7ff1 + .dbyt $7ff2 + .dbyt $7ff3 + .dbyt $7ff4 + .dbyt $7ff5 + .dbyt $7ff6 + .dbyt $7ff7 + .dbyt $7ff8 + .dbyt $7ff9 + .dbyt $7ffa + .dbyt $7ffb + .dbyt $7ffc + .dbyt $7ffd + .dbyt $7ffe + .dbyt $7fff + .dbyt $8000 + .dbyt $8001 + .dbyt $8002 + .dbyt $8003 + .dbyt $8004 + .dbyt $8005 + .dbyt $8006 + .dbyt $8007 + .dbyt $8008 + .dbyt $8009 + .dbyt $800a + .dbyt $800b + .dbyt $9fe1 + .dbyt $9fe2 + .dbyt $9fe3 + .dbyt $9fe4 + .dbyt $9fe5 + .dbyt $9fe6 + .dbyt $9fe7 + .dbyt $9fe8 + .dbyt $9fe9 + .dbyt $9fea + .dbyt $9feb + .dbyt $9fec + .dbyt $9fed + .dbyt $9fee + .dbyt $9fef + .dbyt $9ff0 + .dbyt $9ff1 + .dbyt $9ff2 + .dbyt $9ff3 + .dbyt $9ff4 + .dbyt $9ff5 + .dbyt $9ff6 + .dbyt $9ff7 + .dbyt $9ff8 + .dbyt $9ff9 + .dbyt $9ffa + .dbyt $9ffb + .dbyt $9ffc + .dbyt $9ffd + .dbyt $9ffe + .dbyt $9fff + .dbyt $a000 + .dbyt $a001 + .dbyt $a002 + .dbyt $a003 + .dbyt $a004 + .dbyt $a005 + .dbyt $a006 + .dbyt $a007 + .dbyt $a008 + .dbyt $a009 + .dbyt $a00a + .dbyt $a00b + .dbyt $a00c + .dbyt $a00d + .dbyt $a00e + .dbyt $a00f + .dbyt $afe1 + .dbyt $afe2 + .dbyt $afe3 + .dbyt $afe4 + .dbyt $afe5 + .dbyt $afe6 + .dbyt $afe7 + .dbyt $afe8 + .dbyt $afe9 + .dbyt $afea + .dbyt $afeb + .dbyt $afec + .dbyt $afed + .dbyt $afee + .dbyt $afef + .dbyt $aff0 + .dbyt $aff1 + .dbyt $aff2 + .dbyt $aff3 + .dbyt $aff4 + .dbyt $aff5 + .dbyt $aff6 + .dbyt $aff7 + .dbyt $aff8 + .dbyt $aff9 + .dbyt $affa + .dbyt $affb + .dbyt $affc + .dbyt $affd + .dbyt $affe + .dbyt $afff + .dbyt $b000 + .dbyt $b001 + .dbyt $b002 + .dbyt $b003 + .dbyt $b004 + .dbyt $b005 + .dbyt $b006 + .dbyt $b007 + .dbyt $b008 + .dbyt $b009 + .dbyt $b00a + .dbyt $b00b + .dbyt $b00c + .dbyt $b00d + .dbyt $b00e + .dbyt $b00f + .dbyt $bfe1 + .dbyt $bfe2 + .dbyt $bfe3 + .dbyt $bfe4 + .dbyt $bfe5 + .dbyt $bfe6 + .dbyt $bfe7 + .dbyt $bfe8 + .dbyt $bfe9 + .dbyt $bfea + .dbyt $bfeb + .dbyt $bfec + .dbyt $bfed + .dbyt $bfee + .dbyt $bfef + .dbyt $bff0 + .dbyt $bff1 + .dbyt $bff2 + .dbyt $bff3 + .dbyt $bff4 + .dbyt $bff5 + .dbyt $bff6 + .dbyt $bff7 + .dbyt $bff8 + .dbyt $bff9 + .dbyt $bffa + .dbyt $bffb + .dbyt $bffc + .dbyt $bffd + .dbyt $bffe + .dbyt $bfff + .dbyt $c000 + .dbyt $c001 + .dbyt $c002 + .dbyt $c003 + .dbyt $c004 + .dbyt $c005 + .dbyt $c006 + .dbyt $c007 + .dbyt $c008 + .dbyt $c009 + .dbyt $c00a + .dbyt $c00b + .dbyt $c00c + .dbyt $c00d + .dbyt $c00e + .dbyt $c00f + .dbyt $cfe1 + .dbyt $cfe2 + .dbyt $cfe3 + .dbyt $cfe4 + .dbyt $cfe5 + .dbyt $cfe6 + .dbyt $cfe7 + .dbyt $cfe8 + .dbyt $cfe9 + .dbyt $cfea + .dbyt $cfeb + .dbyt $cfec + .dbyt $cfed + .dbyt $cfee + .dbyt $cfef + .dbyt $cff0 + .dbyt $cff1 + .dbyt $cff2 + .dbyt $cff3 + .dbyt $cff4 + .dbyt $cff5 + .dbyt $cff6 + .dbyt $cff7 + .dbyt $cff8 + .dbyt $cff9 + .dbyt $cffa + .dbyt $cffb + .dbyt $cffc + .dbyt $cffd + .dbyt $cffe + .dbyt $cfff + .dbyt $d000 + .dbyt $d001 + .dbyt $d002 + .dbyt $d003 + .dbyt $d004 + .dbyt $d005 + .dbyt $d006 + .dbyt $d007 + .dbyt $d008 + .dbyt $d009 + .dbyt $d00a + .dbyt $d00b + .dbyt $d00c + .dbyt $d00d + .dbyt $d00e + .dbyt $d00f + .dbyt $dfe1 + .dbyt $dfe2 + .dbyt $dfe3 + .dbyt $dfe4 + .dbyt $dfe5 + .dbyt $dfe6 + .dbyt $dfe7 + .dbyt $dfe8 + .dbyt $dfe9 + .dbyt $dfea + .dbyt $dfeb + .dbyt $dfec + .dbyt $dfed + .dbyt $dfee + .dbyt $dfef + .dbyt $dff0 + .dbyt $dff1 + .dbyt $dff2 + .dbyt $dff3 + .dbyt $dff4 + .dbyt $dff5 + .dbyt $dff6 + .dbyt $dff7 + .dbyt $dff8 + .dbyt $dff9 + .dbyt $dffa + .dbyt $dffb + .dbyt $dffc + .dbyt $dffd + .dbyt $dffe + .dbyt $dfff + .dbyt $e000 + .dbyt $e001 + .dbyt $e002 + .dbyt $e003 + .dbyt $e004 + .dbyt $e005 + .dbyt $e006 + .dbyt $e007 + .dbyt $e008 + .dbyt $e009 + .dbyt $e00a + .dbyt $e00b + .dbyt $e00c + .dbyt $e00d + .dbyt $e00e + .dbyt $e00f + .dbyt $efe1 + .dbyt $efe2 + .dbyt $efe3 + .dbyt $efe4 + .dbyt $efe5 + .dbyt $efe6 + .dbyt $efe7 + .dbyt $efe8 + .dbyt $efe9 + .dbyt $efea + .dbyt $efeb + .dbyt $efec + .dbyt $efed + .dbyt $efee + .dbyt $efef + .dbyt $eff0 + .dbyt $eff1 + .dbyt $eff2 + .dbyt $eff3 + .dbyt $eff4 + .dbyt $eff5 + .dbyt $eff6 + .dbyt $eff7 + .dbyt $eff8 + .dbyt $eff9 + .dbyt $effa + .dbyt $effb + .dbyt $effc + .dbyt $effd + .dbyt $effe + .dbyt $efff + .dbyt $f000 + .dbyt $f001 + .dbyt $f002 + .dbyt $f003 + .dbyt $f004 + .dbyt $f005 + .dbyt $f006 + .dbyt $f007 + .dbyt $f008 + .dbyt $f009 + .dbyt $f00a + .dbyt $f00b + .dbyt $f00c + .dbyt $f00d + .dbyt $f00e + .dbyt $f00f + .dbyt $ffe1 + .dbyt $ffe2 + .dbyt $ffe3 + .dbyt $ffe4 + .dbyt $ffe5 + .dbyt $ffe6 + .dbyt $ffe7 + .dbyt $ffe8 + .dbyt $ffe9 + .dbyt $ffea + .dbyt $ffeb + .dbyt $ffec + .dbyt $ffed + .dbyt $ffee + .dbyt $ffef + .dbyt $fff0 + .dbyt $fff1 + .dbyt $fff2 + .dbyt $fff3 + .dbyt $fff4 + .dbyt $fff5 + .dbyt $fff6 + .dbyt $fff7 + .dbyt $fff8 + .dbyt $fff9 + .dbyt $fffa + .dbyt $fffb + .dbyt $fffc + .dbyt $fffd + .dbyt $fffe + .dbyt $ffff + + ; hex values, uppercase + .dbyt $0 + .dbyt $1 + .dbyt $2 + .dbyt $3 + .dbyt $4 + .dbyt $5 + .dbyt $6 + .dbyt $7 + .dbyt $8 + .dbyt $9 + .dbyt $A + .dbyt $B + .dbyt $C + .dbyt $D + .dbyt $E + .dbyt $F + .dbyt $10 + .dbyt $11 + .dbyt $12 + .dbyt $13 + .dbyt $70 + .dbyt $71 + .dbyt $72 + .dbyt $73 + .dbyt $74 + .dbyt $75 + .dbyt $76 + .dbyt $77 + .dbyt $78 + .dbyt $79 + .dbyt $7A + .dbyt $7B + .dbyt $7C + .dbyt $7D + .dbyt $7E + .dbyt $7F + .dbyt $80 + .dbyt $81 + .dbyt $82 + .dbyt $83 + .dbyt $84 + .dbyt $85 + .dbyt $86 + .dbyt $F0 + .dbyt $F1 + .dbyt $F2 + .dbyt $F3 + .dbyt $F4 + .dbyt $F5 + .dbyt $F6 + .dbyt $F7 + .dbyt $F8 + .dbyt $F9 + .dbyt $FA + .dbyt $FB + .dbyt $FC + .dbyt $FD + .dbyt $FE + .dbyt $FF + .dbyt $100 + .dbyt $101 + .dbyt $102 + .dbyt $103 + .dbyt $FD2 + .dbyt $FD3 + .dbyt $FD4 + .dbyt $FD5 + .dbyt $FD6 + .dbyt $FD7 + .dbyt $FD8 + .dbyt $FD9 + .dbyt $FDA + .dbyt $FDB + .dbyt $FDC + .dbyt $FDD + .dbyt $FDE + .dbyt $FDF + .dbyt $FE0 + .dbyt $FE1 + .dbyt $FE2 + .dbyt $FE3 + .dbyt $FE4 + .dbyt $FE5 + .dbyt $FE6 + .dbyt $FE7 + .dbyt $FE8 + .dbyt $FE9 + .dbyt $FEA + .dbyt $FEB + .dbyt $FEC + .dbyt $FED + .dbyt $FEE + .dbyt $FEF + .dbyt $FF0 + .dbyt $FF1 + .dbyt $FF2 + .dbyt $FF3 + .dbyt $FF4 + .dbyt $FF5 + .dbyt $FF6 + .dbyt $FF7 + .dbyt $FF8 + .dbyt $FF9 + .dbyt $FFA + .dbyt $FFB + .dbyt $FFC + .dbyt $FFD + .dbyt $FFE + .dbyt $FFF + .dbyt $1000 + .dbyt $1001 + .dbyt $1002 + .dbyt $1003 + .dbyt $1004 + .dbyt $1005 + .dbyt $1006 + .dbyt $1007 + .dbyt $1008 + .dbyt $7FF0 + .dbyt $7FF1 + .dbyt $7FF2 + .dbyt $7FF3 + .dbyt $7FF4 + .dbyt $7FF5 + .dbyt $7FF6 + .dbyt $7FF7 + .dbyt $7FF8 + .dbyt $7FF9 + .dbyt $7FFA + .dbyt $7FFB + .dbyt $7FFC + .dbyt $7FFD + .dbyt $7FFE + .dbyt $7FFF + .dbyt $8000 + .dbyt $8001 + .dbyt $8002 + .dbyt $8003 + .dbyt $8004 + .dbyt $8005 + .dbyt $8006 + .dbyt $8007 + .dbyt $8008 + .dbyt $8009 + .dbyt $800A + .dbyt $800B + .dbyt $9FE1 + .dbyt $9FE2 + .dbyt $9FE3 + .dbyt $9FE4 + .dbyt $9FE5 + .dbyt $9FE6 + .dbyt $9FE7 + .dbyt $9FE8 + .dbyt $9FE9 + .dbyt $9FEA + .dbyt $9FEB + .dbyt $9FEC + .dbyt $9FED + .dbyt $9FEE + .dbyt $9FEF + .dbyt $9FF0 + .dbyt $9FF1 + .dbyt $9FF2 + .dbyt $9FF3 + .dbyt $9FF4 + .dbyt $9FF5 + .dbyt $9FF6 + .dbyt $9FF7 + .dbyt $9FF8 + .dbyt $9FF9 + .dbyt $9FFA + .dbyt $9FFB + .dbyt $9FFC + .dbyt $9FFD + .dbyt $9FFE + .dbyt $9FFF + .dbyt $A000 + .dbyt $A001 + .dbyt $A002 + .dbyt $A003 + .dbyt $A004 + .dbyt $A005 + .dbyt $A006 + .dbyt $A007 + .dbyt $A008 + .dbyt $A009 + .dbyt $A00A + .dbyt $A00B + .dbyt $A00C + .dbyt $A00D + .dbyt $A00E + .dbyt $A00F + .dbyt $AFE1 + .dbyt $AFE2 + .dbyt $AFE3 + .dbyt $AFE4 + .dbyt $AFE5 + .dbyt $AFE6 + .dbyt $AFE7 + .dbyt $AFE8 + .dbyt $AFE9 + .dbyt $AFEA + .dbyt $AFEB + .dbyt $AFEC + .dbyt $AFED + .dbyt $AFEE + .dbyt $AFEF + .dbyt $AFF0 + .dbyt $AFF1 + .dbyt $AFF2 + .dbyt $AFF3 + .dbyt $AFF4 + .dbyt $AFF5 + .dbyt $AFF6 + .dbyt $AFF7 + .dbyt $AFF8 + .dbyt $AFF9 + .dbyt $AFFA + .dbyt $AFFB + .dbyt $AFFC + .dbyt $AFFD + .dbyt $AFFE + .dbyt $AFFF + .dbyt $B000 + .dbyt $B001 + .dbyt $B002 + .dbyt $B003 + .dbyt $B004 + .dbyt $B005 + .dbyt $B006 + .dbyt $B007 + .dbyt $B008 + .dbyt $B009 + .dbyt $B00A + .dbyt $B00B + .dbyt $B00C + .dbyt $B00D + .dbyt $B00E + .dbyt $B00F + .dbyt $BFE1 + .dbyt $BFE2 + .dbyt $BFE3 + .dbyt $BFE4 + .dbyt $BFE5 + .dbyt $BFE6 + .dbyt $BFE7 + .dbyt $BFE8 + .dbyt $BFE9 + .dbyt $BFEA + .dbyt $BFEB + .dbyt $BFEC + .dbyt $BFED + .dbyt $BFEE + .dbyt $BFEF + .dbyt $BFF0 + .dbyt $BFF1 + .dbyt $BFF2 + .dbyt $BFF3 + .dbyt $BFF4 + .dbyt $BFF5 + .dbyt $BFF6 + .dbyt $BFF7 + .dbyt $BFF8 + .dbyt $BFF9 + .dbyt $BFFA + .dbyt $BFFB + .dbyt $BFFC + .dbyt $BFFD + .dbyt $BFFE + .dbyt $BFFF + .dbyt $C000 + .dbyt $C001 + .dbyt $C002 + .dbyt $C003 + .dbyt $C004 + .dbyt $C005 + .dbyt $C006 + .dbyt $C007 + .dbyt $C008 + .dbyt $C009 + .dbyt $C00A + .dbyt $C00B + .dbyt $C00C + .dbyt $C00D + .dbyt $C00E + .dbyt $C00F + .dbyt $CFE1 + .dbyt $CFE2 + .dbyt $CFE3 + .dbyt $CFE4 + .dbyt $CFE5 + .dbyt $CFE6 + .dbyt $CFE7 + .dbyt $CFE8 + .dbyt $CFE9 + .dbyt $CFEA + .dbyt $CFEB + .dbyt $CFEC + .dbyt $CFED + .dbyt $CFEE + .dbyt $CFEF + .dbyt $CFF0 + .dbyt $CFF1 + .dbyt $CFF2 + .dbyt $CFF3 + .dbyt $CFF4 + .dbyt $CFF5 + .dbyt $CFF6 + .dbyt $CFF7 + .dbyt $CFF8 + .dbyt $CFF9 + .dbyt $CFFA + .dbyt $CFFB + .dbyt $CFFC + .dbyt $CFFD + .dbyt $CFFE + .dbyt $CFFF + .dbyt $D000 + .dbyt $D001 + .dbyt $D002 + .dbyt $D003 + .dbyt $D004 + .dbyt $D005 + .dbyt $D006 + .dbyt $D007 + .dbyt $D008 + .dbyt $D009 + .dbyt $D00A + .dbyt $D00B + .dbyt $D00C + .dbyt $D00D + .dbyt $D00E + .dbyt $D00F + .dbyt $DFE1 + .dbyt $DFE2 + .dbyt $DFE3 + .dbyt $DFE4 + .dbyt $DFE5 + .dbyt $DFE6 + .dbyt $DFE7 + .dbyt $DFE8 + .dbyt $DFE9 + .dbyt $DFEA + .dbyt $DFEB + .dbyt $DFEC + .dbyt $DFED + .dbyt $DFEE + .dbyt $DFEF + .dbyt $DFF0 + .dbyt $DFF1 + .dbyt $DFF2 + .dbyt $DFF3 + .dbyt $DFF4 + .dbyt $DFF5 + .dbyt $DFF6 + .dbyt $DFF7 + .dbyt $DFF8 + .dbyt $DFF9 + .dbyt $DFFA + .dbyt $DFFB + .dbyt $DFFC + .dbyt $DFFD + .dbyt $DFFE + .dbyt $DFFF + .dbyt $E000 + .dbyt $E001 + .dbyt $E002 + .dbyt $E003 + .dbyt $E004 + .dbyt $E005 + .dbyt $E006 + .dbyt $E007 + .dbyt $E008 + .dbyt $E009 + .dbyt $E00A + .dbyt $E00B + .dbyt $E00C + .dbyt $E00D + .dbyt $E00E + .dbyt $E00F + .dbyt $EFE1 + .dbyt $EFE2 + .dbyt $EFE3 + .dbyt $EFE4 + .dbyt $EFE5 + .dbyt $EFE6 + .dbyt $EFE7 + .dbyt $EFE8 + .dbyt $EFE9 + .dbyt $EFEA + .dbyt $EFEB + .dbyt $EFEC + .dbyt $EFED + .dbyt $EFEE + .dbyt $EFEF + .dbyt $EFF0 + .dbyt $EFF1 + .dbyt $EFF2 + .dbyt $EFF3 + .dbyt $EFF4 + .dbyt $EFF5 + .dbyt $EFF6 + .dbyt $EFF7 + .dbyt $EFF8 + .dbyt $EFF9 + .dbyt $EFFA + .dbyt $EFFB + .dbyt $EFFC + .dbyt $EFFD + .dbyt $EFFE + .dbyt $EFFF + .dbyt $F000 + .dbyt $F001 + .dbyt $F002 + .dbyt $F003 + .dbyt $F004 + .dbyt $F005 + .dbyt $F006 + .dbyt $F007 + .dbyt $F008 + .dbyt $F009 + .dbyt $F00A + .dbyt $F00B + .dbyt $F00C + .dbyt $F00D + .dbyt $F00E + .dbyt $F00F + .dbyt $FFE1 + .dbyt $FFE2 + .dbyt $FFE3 + .dbyt $FFE4 + .dbyt $FFE5 + .dbyt $FFE6 + .dbyt $FFE7 + .dbyt $FFE8 + .dbyt $FFE9 + .dbyt $FFEA + .dbyt $FFEB + .dbyt $FFEC + .dbyt $FFED + .dbyt $FFEE + .dbyt $FFEF + .dbyt $FFF0 + .dbyt $FFF1 + .dbyt $FFF2 + .dbyt $FFF3 + .dbyt $FFF4 + .dbyt $FFF5 + .dbyt $FFF6 + .dbyt $FFF7 + .dbyt $FFF8 + .dbyt $FFF9 + .dbyt $FFFA + .dbyt $FFFB + .dbyt $FFFC + .dbyt $FFFD + .dbyt $FFFE + .dbyt $FFFF + + ; 4-digit hex values + .dbyt $0000 + .dbyt $0001 + .dbyt $0002 + .dbyt $0003 + .dbyt $0004 + .dbyt $0005 + .dbyt $0006 + .dbyt $0007 + .dbyt $0008 + .dbyt $0009 + .dbyt $000a + .dbyt $000b + .dbyt $000c + .dbyt $000d + .dbyt $000e + .dbyt $000f + .dbyt $0010 + .dbyt $0011 + .dbyt $0012 + .dbyt $0013 + .dbyt $0070 + .dbyt $0071 + .dbyt $0072 + .dbyt $0073 + .dbyt $0074 + .dbyt $0075 + .dbyt $0076 + .dbyt $0077 + .dbyt $0078 + .dbyt $0079 + .dbyt $007a + .dbyt $007b + .dbyt $007c + .dbyt $007d + .dbyt $007e + .dbyt $007f + .dbyt $0080 + .dbyt $0081 + .dbyt $0082 + .dbyt $0083 + .dbyt $0084 + .dbyt $0085 + .dbyt $0086 + .dbyt $00f0 + .dbyt $00f1 + .dbyt $00f2 + .dbyt $00f3 + .dbyt $00f4 + .dbyt $00f5 + .dbyt $00f6 + .dbyt $00f7 + .dbyt $00f8 + .dbyt $00f9 + .dbyt $00fa + .dbyt $00fb + .dbyt $00fc + .dbyt $00fd + .dbyt $00fe + .dbyt $00ff + .dbyt $0100 + .dbyt $0101 + .dbyt $0102 + .dbyt $0103 + .dbyt $0fd2 + .dbyt $0fd3 + .dbyt $0fd4 + .dbyt $0fd5 + .dbyt $0fd6 + .dbyt $0fd7 + .dbyt $0fd8 + .dbyt $0fd9 + .dbyt $0fda + .dbyt $0fdb + .dbyt $0fdc + .dbyt $0fdd + .dbyt $0fde + .dbyt $0fdf + .dbyt $0fe0 + .dbyt $0fe1 + .dbyt $0fe2 + .dbyt $0fe3 + .dbyt $0fe4 + .dbyt $0fe5 + .dbyt $0fe6 + .dbyt $0fe7 + .dbyt $0fe8 + .dbyt $0fe9 + .dbyt $0fea + .dbyt $0feb + .dbyt $0fec + .dbyt $0fed + .dbyt $0fee + .dbyt $0fef + .dbyt $0ff0 + .dbyt $0ff1 + .dbyt $0ff2 + .dbyt $0ff3 + .dbyt $0ff4 + .dbyt $0ff5 + .dbyt $0ff6 + .dbyt $0ff7 + .dbyt $0ff8 + .dbyt $0ff9 + .dbyt $0ffa + .dbyt $0ffb + .dbyt $0ffc + .dbyt $0ffd + .dbyt $0ffe + .dbyt $0fff + .dbyt $1000 + .dbyt $1001 + .dbyt $1002 + .dbyt $1003 + .dbyt $1004 + .dbyt $1005 + .dbyt $1006 + .dbyt $1007 + .dbyt $1008 + .dbyt $7ff0 + .dbyt $7ff1 + .dbyt $7ff2 + .dbyt $7ff3 + .dbyt $7ff4 + .dbyt $7ff5 + .dbyt $7ff6 + .dbyt $7ff7 + .dbyt $7ff8 + .dbyt $7ff9 + .dbyt $7ffa + .dbyt $7ffb + .dbyt $7ffc + .dbyt $7ffd + .dbyt $7ffe + .dbyt $7fff + .dbyt $8000 + .dbyt $8001 + .dbyt $8002 + .dbyt $8003 + .dbyt $8004 + .dbyt $8005 + .dbyt $8006 + .dbyt $8007 + .dbyt $8008 + .dbyt $8009 + .dbyt $800a + .dbyt $800b + .dbyt $9fe1 + .dbyt $9fe2 + .dbyt $9fe3 + .dbyt $9fe4 + .dbyt $9fe5 + .dbyt $9fe6 + .dbyt $9fe7 + .dbyt $9fe8 + .dbyt $9fe9 + .dbyt $9fea + .dbyt $9feb + .dbyt $9fec + .dbyt $9fed + .dbyt $9fee + .dbyt $9fef + .dbyt $9ff0 + .dbyt $9ff1 + .dbyt $9ff2 + .dbyt $9ff3 + .dbyt $9ff4 + .dbyt $9ff5 + .dbyt $9ff6 + .dbyt $9ff7 + .dbyt $9ff8 + .dbyt $9ff9 + .dbyt $9ffa + .dbyt $9ffb + .dbyt $9ffc + .dbyt $9ffd + .dbyt $9ffe + .dbyt $9fff + .dbyt $a000 + .dbyt $a001 + .dbyt $a002 + .dbyt $a003 + .dbyt $a004 + .dbyt $a005 + .dbyt $a006 + .dbyt $a007 + .dbyt $a008 + .dbyt $a009 + .dbyt $a00a + .dbyt $a00b + .dbyt $a00c + .dbyt $a00d + .dbyt $a00e + .dbyt $a00f + .dbyt $afe1 + .dbyt $afe2 + .dbyt $afe3 + .dbyt $afe4 + .dbyt $afe5 + .dbyt $afe6 + .dbyt $afe7 + .dbyt $afe8 + .dbyt $afe9 + .dbyt $afea + .dbyt $afeb + .dbyt $afec + .dbyt $afed + .dbyt $afee + .dbyt $afef + .dbyt $aff0 + .dbyt $aff1 + .dbyt $aff2 + .dbyt $aff3 + .dbyt $aff4 + .dbyt $aff5 + .dbyt $aff6 + .dbyt $aff7 + .dbyt $aff8 + .dbyt $aff9 + .dbyt $affa + .dbyt $affb + .dbyt $affc + .dbyt $affd + .dbyt $affe + .dbyt $afff + .dbyt $b000 + .dbyt $b001 + .dbyt $b002 + .dbyt $b003 + .dbyt $b004 + .dbyt $b005 + .dbyt $b006 + .dbyt $b007 + .dbyt $b008 + .dbyt $b009 + .dbyt $b00a + .dbyt $b00b + .dbyt $b00c + .dbyt $b00d + .dbyt $b00e + .dbyt $b00f + .dbyt $bfe1 + .dbyt $bfe2 + .dbyt $bfe3 + .dbyt $bfe4 + .dbyt $bfe5 + .dbyt $bfe6 + .dbyt $bfe7 + .dbyt $bfe8 + .dbyt $bfe9 + .dbyt $bfea + .dbyt $bfeb + .dbyt $bfec + .dbyt $bfed + .dbyt $bfee + .dbyt $bfef + .dbyt $bff0 + .dbyt $bff1 + .dbyt $bff2 + .dbyt $bff3 + .dbyt $bff4 + .dbyt $bff5 + .dbyt $bff6 + .dbyt $bff7 + .dbyt $bff8 + .dbyt $bff9 + .dbyt $bffa + .dbyt $bffb + .dbyt $bffc + .dbyt $bffd + .dbyt $bffe + .dbyt $bfff + .dbyt $c000 + .dbyt $c001 + .dbyt $c002 + .dbyt $c003 + .dbyt $c004 + .dbyt $c005 + .dbyt $c006 + .dbyt $c007 + .dbyt $c008 + .dbyt $c009 + .dbyt $c00a + .dbyt $c00b + .dbyt $c00c + .dbyt $c00d + .dbyt $c00e + .dbyt $c00f + .dbyt $cfe1 + .dbyt $cfe2 + .dbyt $cfe3 + .dbyt $cfe4 + .dbyt $cfe5 + .dbyt $cfe6 + .dbyt $cfe7 + .dbyt $cfe8 + .dbyt $cfe9 + .dbyt $cfea + .dbyt $cfeb + .dbyt $cfec + .dbyt $cfed + .dbyt $cfee + .dbyt $cfef + .dbyt $cff0 + .dbyt $cff1 + .dbyt $cff2 + .dbyt $cff3 + .dbyt $cff4 + .dbyt $cff5 + .dbyt $cff6 + .dbyt $cff7 + .dbyt $cff8 + .dbyt $cff9 + .dbyt $cffa + .dbyt $cffb + .dbyt $cffc + .dbyt $cffd + .dbyt $cffe + .dbyt $cfff + .dbyt $d000 + .dbyt $d001 + .dbyt $d002 + .dbyt $d003 + .dbyt $d004 + .dbyt $d005 + .dbyt $d006 + .dbyt $d007 + .dbyt $d008 + .dbyt $d009 + .dbyt $d00a + .dbyt $d00b + .dbyt $d00c + .dbyt $d00d + .dbyt $d00e + .dbyt $d00f + .dbyt $dfe1 + .dbyt $dfe2 + .dbyt $dfe3 + .dbyt $dfe4 + .dbyt $dfe5 + .dbyt $dfe6 + .dbyt $dfe7 + .dbyt $dfe8 + .dbyt $dfe9 + .dbyt $dfea + .dbyt $dfeb + .dbyt $dfec + .dbyt $dfed + .dbyt $dfee + .dbyt $dfef + .dbyt $dff0 + .dbyt $dff1 + .dbyt $dff2 + .dbyt $dff3 + .dbyt $dff4 + .dbyt $dff5 + .dbyt $dff6 + .dbyt $dff7 + .dbyt $dff8 + .dbyt $dff9 + .dbyt $dffa + .dbyt $dffb + .dbyt $dffc + .dbyt $dffd + .dbyt $dffe + .dbyt $dfff + .dbyt $e000 + .dbyt $e001 + .dbyt $e002 + .dbyt $e003 + .dbyt $e004 + .dbyt $e005 + .dbyt $e006 + .dbyt $e007 + .dbyt $e008 + .dbyt $e009 + .dbyt $e00a + .dbyt $e00b + .dbyt $e00c + .dbyt $e00d + .dbyt $e00e + .dbyt $e00f + .dbyt $efe1 + .dbyt $efe2 + .dbyt $efe3 + .dbyt $efe4 + .dbyt $efe5 + .dbyt $efe6 + .dbyt $efe7 + .dbyt $efe8 + .dbyt $efe9 + .dbyt $efea + .dbyt $efeb + .dbyt $efec + .dbyt $efed + .dbyt $efee + .dbyt $efef + .dbyt $eff0 + .dbyt $eff1 + .dbyt $eff2 + .dbyt $eff3 + .dbyt $eff4 + .dbyt $eff5 + .dbyt $eff6 + .dbyt $eff7 + .dbyt $eff8 + .dbyt $eff9 + .dbyt $effa + .dbyt $effb + .dbyt $effc + .dbyt $effd + .dbyt $effe + .dbyt $efff + .dbyt $f000 + .dbyt $f001 + .dbyt $f002 + .dbyt $f003 + .dbyt $f004 + .dbyt $f005 + .dbyt $f006 + .dbyt $f007 + .dbyt $f008 + .dbyt $f009 + .dbyt $f00a + .dbyt $f00b + .dbyt $f00c + .dbyt $f00d + .dbyt $f00e + .dbyt $f00f + .dbyt $ffe1 + .dbyt $ffe2 + .dbyt $ffe3 + .dbyt $ffe4 + .dbyt $ffe5 + .dbyt $ffe6 + .dbyt $ffe7 + .dbyt $ffe8 + .dbyt $ffe9 + .dbyt $ffea + .dbyt $ffeb + .dbyt $ffec + .dbyt $ffed + .dbyt $ffee + .dbyt $ffef + .dbyt $fff0 + .dbyt $fff1 + .dbyt $fff2 + .dbyt $fff3 + .dbyt $fff4 + .dbyt $fff5 + .dbyt $fff6 + .dbyt $fff7 + .dbyt $fff8 + .dbyt $fff9 + .dbyt $fffa + .dbyt $fffb + .dbyt $fffc + .dbyt $fffd + .dbyt $fffe + .dbyt $ffff + + ; 4-digit hex values, uppercase + .dbyt $0000 + .dbyt $0001 + .dbyt $0002 + .dbyt $0003 + .dbyt $0004 + .dbyt $0005 + .dbyt $0006 + .dbyt $0007 + .dbyt $0008 + .dbyt $0009 + .dbyt $000A + .dbyt $000B + .dbyt $000C + .dbyt $000D + .dbyt $000E + .dbyt $000F + .dbyt $0010 + .dbyt $0011 + .dbyt $0012 + .dbyt $0013 + .dbyt $0070 + .dbyt $0071 + .dbyt $0072 + .dbyt $0073 + .dbyt $0074 + .dbyt $0075 + .dbyt $0076 + .dbyt $0077 + .dbyt $0078 + .dbyt $0079 + .dbyt $007A + .dbyt $007B + .dbyt $007C + .dbyt $007D + .dbyt $007E + .dbyt $007F + .dbyt $0080 + .dbyt $0081 + .dbyt $0082 + .dbyt $0083 + .dbyt $0084 + .dbyt $0085 + .dbyt $0086 + .dbyt $00F0 + .dbyt $00F1 + .dbyt $00F2 + .dbyt $00F3 + .dbyt $00F4 + .dbyt $00F5 + .dbyt $00F6 + .dbyt $00F7 + .dbyt $00F8 + .dbyt $00F9 + .dbyt $00FA + .dbyt $00FB + .dbyt $00FC + .dbyt $00FD + .dbyt $00FE + .dbyt $00FF + .dbyt $0100 + .dbyt $0101 + .dbyt $0102 + .dbyt $0103 + .dbyt $0FD2 + .dbyt $0FD3 + .dbyt $0FD4 + .dbyt $0FD5 + .dbyt $0FD6 + .dbyt $0FD7 + .dbyt $0FD8 + .dbyt $0FD9 + .dbyt $0FDA + .dbyt $0FDB + .dbyt $0FDC + .dbyt $0FDD + .dbyt $0FDE + .dbyt $0FDF + .dbyt $0FE0 + .dbyt $0FE1 + .dbyt $0FE2 + .dbyt $0FE3 + .dbyt $0FE4 + .dbyt $0FE5 + .dbyt $0FE6 + .dbyt $0FE7 + .dbyt $0FE8 + .dbyt $0FE9 + .dbyt $0FEA + .dbyt $0FEB + .dbyt $0FEC + .dbyt $0FED + .dbyt $0FEE + .dbyt $0FEF + .dbyt $0FF0 + .dbyt $0FF1 + .dbyt $0FF2 + .dbyt $0FF3 + .dbyt $0FF4 + .dbyt $0FF5 + .dbyt $0FF6 + .dbyt $0FF7 + .dbyt $0FF8 + .dbyt $0FF9 + .dbyt $0FFA + .dbyt $0FFB + .dbyt $0FFC + .dbyt $0FFD + .dbyt $0FFE + .dbyt $0FFF + .dbyt $1000 + .dbyt $1001 + .dbyt $1002 + .dbyt $1003 + .dbyt $1004 + .dbyt $1005 + .dbyt $1006 + .dbyt $1007 + .dbyt $1008 + .dbyt $7FF0 + .dbyt $7FF1 + .dbyt $7FF2 + .dbyt $7FF3 + .dbyt $7FF4 + .dbyt $7FF5 + .dbyt $7FF6 + .dbyt $7FF7 + .dbyt $7FF8 + .dbyt $7FF9 + .dbyt $7FFA + .dbyt $7FFB + .dbyt $7FFC + .dbyt $7FFD + .dbyt $7FFE + .dbyt $7FFF + .dbyt $8000 + .dbyt $8001 + .dbyt $8002 + .dbyt $8003 + .dbyt $8004 + .dbyt $8005 + .dbyt $8006 + .dbyt $8007 + .dbyt $8008 + .dbyt $8009 + .dbyt $800A + .dbyt $800B + .dbyt $9FE1 + .dbyt $9FE2 + .dbyt $9FE3 + .dbyt $9FE4 + .dbyt $9FE5 + .dbyt $9FE6 + .dbyt $9FE7 + .dbyt $9FE8 + .dbyt $9FE9 + .dbyt $9FEA + .dbyt $9FEB + .dbyt $9FEC + .dbyt $9FED + .dbyt $9FEE + .dbyt $9FEF + .dbyt $9FF0 + .dbyt $9FF1 + .dbyt $9FF2 + .dbyt $9FF3 + .dbyt $9FF4 + .dbyt $9FF5 + .dbyt $9FF6 + .dbyt $9FF7 + .dbyt $9FF8 + .dbyt $9FF9 + .dbyt $9FFA + .dbyt $9FFB + .dbyt $9FFC + .dbyt $9FFD + .dbyt $9FFE + .dbyt $9FFF + .dbyt $A000 + .dbyt $A001 + .dbyt $A002 + .dbyt $A003 + .dbyt $A004 + .dbyt $A005 + .dbyt $A006 + .dbyt $A007 + .dbyt $A008 + .dbyt $A009 + .dbyt $A00A + .dbyt $A00B + .dbyt $A00C + .dbyt $A00D + .dbyt $A00E + .dbyt $A00F + .dbyt $AFE1 + .dbyt $AFE2 + .dbyt $AFE3 + .dbyt $AFE4 + .dbyt $AFE5 + .dbyt $AFE6 + .dbyt $AFE7 + .dbyt $AFE8 + .dbyt $AFE9 + .dbyt $AFEA + .dbyt $AFEB + .dbyt $AFEC + .dbyt $AFED + .dbyt $AFEE + .dbyt $AFEF + .dbyt $AFF0 + .dbyt $AFF1 + .dbyt $AFF2 + .dbyt $AFF3 + .dbyt $AFF4 + .dbyt $AFF5 + .dbyt $AFF6 + .dbyt $AFF7 + .dbyt $AFF8 + .dbyt $AFF9 + .dbyt $AFFA + .dbyt $AFFB + .dbyt $AFFC + .dbyt $AFFD + .dbyt $AFFE + .dbyt $AFFF + .dbyt $B000 + .dbyt $B001 + .dbyt $B002 + .dbyt $B003 + .dbyt $B004 + .dbyt $B005 + .dbyt $B006 + .dbyt $B007 + .dbyt $B008 + .dbyt $B009 + .dbyt $B00A + .dbyt $B00B + .dbyt $B00C + .dbyt $B00D + .dbyt $B00E + .dbyt $B00F + .dbyt $BFE1 + .dbyt $BFE2 + .dbyt $BFE3 + .dbyt $BFE4 + .dbyt $BFE5 + .dbyt $BFE6 + .dbyt $BFE7 + .dbyt $BFE8 + .dbyt $BFE9 + .dbyt $BFEA + .dbyt $BFEB + .dbyt $BFEC + .dbyt $BFED + .dbyt $BFEE + .dbyt $BFEF + .dbyt $BFF0 + .dbyt $BFF1 + .dbyt $BFF2 + .dbyt $BFF3 + .dbyt $BFF4 + .dbyt $BFF5 + .dbyt $BFF6 + .dbyt $BFF7 + .dbyt $BFF8 + .dbyt $BFF9 + .dbyt $BFFA + .dbyt $BFFB + .dbyt $BFFC + .dbyt $BFFD + .dbyt $BFFE + .dbyt $BFFF + .dbyt $C000 + .dbyt $C001 + .dbyt $C002 + .dbyt $C003 + .dbyt $C004 + .dbyt $C005 + .dbyt $C006 + .dbyt $C007 + .dbyt $C008 + .dbyt $C009 + .dbyt $C00A + .dbyt $C00B + .dbyt $C00C + .dbyt $C00D + .dbyt $C00E + .dbyt $C00F + .dbyt $CFE1 + .dbyt $CFE2 + .dbyt $CFE3 + .dbyt $CFE4 + .dbyt $CFE5 + .dbyt $CFE6 + .dbyt $CFE7 + .dbyt $CFE8 + .dbyt $CFE9 + .dbyt $CFEA + .dbyt $CFEB + .dbyt $CFEC + .dbyt $CFED + .dbyt $CFEE + .dbyt $CFEF + .dbyt $CFF0 + .dbyt $CFF1 + .dbyt $CFF2 + .dbyt $CFF3 + .dbyt $CFF4 + .dbyt $CFF5 + .dbyt $CFF6 + .dbyt $CFF7 + .dbyt $CFF8 + .dbyt $CFF9 + .dbyt $CFFA + .dbyt $CFFB + .dbyt $CFFC + .dbyt $CFFD + .dbyt $CFFE + .dbyt $CFFF + .dbyt $D000 + .dbyt $D001 + .dbyt $D002 + .dbyt $D003 + .dbyt $D004 + .dbyt $D005 + .dbyt $D006 + .dbyt $D007 + .dbyt $D008 + .dbyt $D009 + .dbyt $D00A + .dbyt $D00B + .dbyt $D00C + .dbyt $D00D + .dbyt $D00E + .dbyt $D00F + .dbyt $DFE1 + .dbyt $DFE2 + .dbyt $DFE3 + .dbyt $DFE4 + .dbyt $DFE5 + .dbyt $DFE6 + .dbyt $DFE7 + .dbyt $DFE8 + .dbyt $DFE9 + .dbyt $DFEA + .dbyt $DFEB + .dbyt $DFEC + .dbyt $DFED + .dbyt $DFEE + .dbyt $DFEF + .dbyt $DFF0 + .dbyt $DFF1 + .dbyt $DFF2 + .dbyt $DFF3 + .dbyt $DFF4 + .dbyt $DFF5 + .dbyt $DFF6 + .dbyt $DFF7 + .dbyt $DFF8 + .dbyt $DFF9 + .dbyt $DFFA + .dbyt $DFFB + .dbyt $DFFC + .dbyt $DFFD + .dbyt $DFFE + .dbyt $DFFF + .dbyt $E000 + .dbyt $E001 + .dbyt $E002 + .dbyt $E003 + .dbyt $E004 + .dbyt $E005 + .dbyt $E006 + .dbyt $E007 + .dbyt $E008 + .dbyt $E009 + .dbyt $E00A + .dbyt $E00B + .dbyt $E00C + .dbyt $E00D + .dbyt $E00E + .dbyt $E00F + .dbyt $EFE1 + .dbyt $EFE2 + .dbyt $EFE3 + .dbyt $EFE4 + .dbyt $EFE5 + .dbyt $EFE6 + .dbyt $EFE7 + .dbyt $EFE8 + .dbyt $EFE9 + .dbyt $EFEA + .dbyt $EFEB + .dbyt $EFEC + .dbyt $EFED + .dbyt $EFEE + .dbyt $EFEF + .dbyt $EFF0 + .dbyt $EFF1 + .dbyt $EFF2 + .dbyt $EFF3 + .dbyt $EFF4 + .dbyt $EFF5 + .dbyt $EFF6 + .dbyt $EFF7 + .dbyt $EFF8 + .dbyt $EFF9 + .dbyt $EFFA + .dbyt $EFFB + .dbyt $EFFC + .dbyt $EFFD + .dbyt $EFFE + .dbyt $EFFF + .dbyt $F000 + .dbyt $F001 + .dbyt $F002 + .dbyt $F003 + .dbyt $F004 + .dbyt $F005 + .dbyt $F006 + .dbyt $F007 + .dbyt $F008 + .dbyt $F009 + .dbyt $F00A + .dbyt $F00B + .dbyt $F00C + .dbyt $F00D + .dbyt $F00E + .dbyt $F00F + .dbyt $FFE1 + .dbyt $FFE2 + .dbyt $FFE3 + .dbyt $FFE4 + .dbyt $FFE5 + .dbyt $FFE6 + .dbyt $FFE7 + .dbyt $FFE8 + .dbyt $FFE9 + .dbyt $FFEA + .dbyt $FFEB + .dbyt $FFEC + .dbyt $FFED + .dbyt $FFEE + .dbyt $FFEF + .dbyt $FFF0 + .dbyt $FFF1 + .dbyt $FFF2 + .dbyt $FFF3 + .dbyt $FFF4 + .dbyt $FFF5 + .dbyt $FFF6 + .dbyt $FFF7 + .dbyt $FFF8 + .dbyt $FFF9 + .dbyt $FFFA + .dbyt $FFFB + .dbyt $FFFC + .dbyt $FFFD + .dbyt $FFFE + .dbyt $FFFF + + ; alternative hex values + .dbyt 0h + .dbyt 1h + .dbyt 2h + .dbyt 3h + .dbyt 4h + .dbyt 5h + .dbyt 6h + .dbyt 7h + .dbyt 8h + .dbyt 9h + .dbyt 0ah + .dbyt 0bh + .dbyt 0ch + .dbyt 0dh + .dbyt 0eh + .dbyt 0fh + .dbyt 10h + .dbyt 11h + .dbyt 12h + .dbyt 13h + .dbyt 70h + .dbyt 71h + .dbyt 72h + .dbyt 73h + .dbyt 74h + .dbyt 75h + .dbyt 76h + .dbyt 77h + .dbyt 78h + .dbyt 79h + .dbyt 7ah + .dbyt 7bh + .dbyt 7ch + .dbyt 7dh + .dbyt 7eh + .dbyt 7fh + .dbyt 80h + .dbyt 81h + .dbyt 82h + .dbyt 83h + .dbyt 84h + .dbyt 85h + .dbyt 86h + .dbyt 0f0h + .dbyt 0f1h + .dbyt 0f2h + .dbyt 0f3h + .dbyt 0f4h + .dbyt 0f5h + .dbyt 0f6h + .dbyt 0f7h + .dbyt 0f8h + .dbyt 0f9h + .dbyt 0fah + .dbyt 0fbh + .dbyt 0fch + .dbyt 0fdh + .dbyt 0feh + .dbyt 0ffh + .dbyt 100h + .dbyt 101h + .dbyt 102h + .dbyt 103h + .dbyt 0fd2h + .dbyt 0fd3h + .dbyt 0fd4h + .dbyt 0fd5h + .dbyt 0fd6h + .dbyt 0fd7h + .dbyt 0fd8h + .dbyt 0fd9h + .dbyt 0fdah + .dbyt 0fdbh + .dbyt 0fdch + .dbyt 0fddh + .dbyt 0fdeh + .dbyt 0fdfh + .dbyt 0fe0h + .dbyt 0fe1h + .dbyt 0fe2h + .dbyt 0fe3h + .dbyt 0fe4h + .dbyt 0fe5h + .dbyt 0fe6h + .dbyt 0fe7h + .dbyt 0fe8h + .dbyt 0fe9h + .dbyt 0feah + .dbyt 0febh + .dbyt 0fech + .dbyt 0fedh + .dbyt 0feeh + .dbyt 0fefh + .dbyt 0ff0h + .dbyt 0ff1h + .dbyt 0ff2h + .dbyt 0ff3h + .dbyt 0ff4h + .dbyt 0ff5h + .dbyt 0ff6h + .dbyt 0ff7h + .dbyt 0ff8h + .dbyt 0ff9h + .dbyt 0ffah + .dbyt 0ffbh + .dbyt 0ffch + .dbyt 0ffdh + .dbyt 0ffeh + .dbyt 0fffh + .dbyt 1000h + .dbyt 1001h + .dbyt 1002h + .dbyt 1003h + .dbyt 1004h + .dbyt 1005h + .dbyt 1006h + .dbyt 1007h + .dbyt 1008h + .dbyt 7ff0h + .dbyt 7ff1h + .dbyt 7ff2h + .dbyt 7ff3h + .dbyt 7ff4h + .dbyt 7ff5h + .dbyt 7ff6h + .dbyt 7ff7h + .dbyt 7ff8h + .dbyt 7ff9h + .dbyt 7ffah + .dbyt 7ffbh + .dbyt 7ffch + .dbyt 7ffdh + .dbyt 7ffeh + .dbyt 7fffh + .dbyt 8000h + .dbyt 8001h + .dbyt 8002h + .dbyt 8003h + .dbyt 8004h + .dbyt 8005h + .dbyt 8006h + .dbyt 8007h + .dbyt 8008h + .dbyt 8009h + .dbyt 800ah + .dbyt 800bh + .dbyt 9fe1h + .dbyt 9fe2h + .dbyt 9fe3h + .dbyt 9fe4h + .dbyt 9fe5h + .dbyt 9fe6h + .dbyt 9fe7h + .dbyt 9fe8h + .dbyt 9fe9h + .dbyt 9feah + .dbyt 9febh + .dbyt 9fech + .dbyt 9fedh + .dbyt 9feeh + .dbyt 9fefh + .dbyt 9ff0h + .dbyt 9ff1h + .dbyt 9ff2h + .dbyt 9ff3h + .dbyt 9ff4h + .dbyt 9ff5h + .dbyt 9ff6h + .dbyt 9ff7h + .dbyt 9ff8h + .dbyt 9ff9h + .dbyt 9ffah + .dbyt 9ffbh + .dbyt 9ffch + .dbyt 9ffdh + .dbyt 9ffeh + .dbyt 9fffh + .dbyt 0a000h + .dbyt 0a001h + .dbyt 0a002h + .dbyt 0a003h + .dbyt 0a004h + .dbyt 0a005h + .dbyt 0a006h + .dbyt 0a007h + .dbyt 0a008h + .dbyt 0a009h + .dbyt 0a00ah + .dbyt 0a00bh + .dbyt 0a00ch + .dbyt 0a00dh + .dbyt 0a00eh + .dbyt 0a00fh + .dbyt 0afe1h + .dbyt 0afe2h + .dbyt 0afe3h + .dbyt 0afe4h + .dbyt 0afe5h + .dbyt 0afe6h + .dbyt 0afe7h + .dbyt 0afe8h + .dbyt 0afe9h + .dbyt 0afeah + .dbyt 0afebh + .dbyt 0afech + .dbyt 0afedh + .dbyt 0afeeh + .dbyt 0afefh + .dbyt 0aff0h + .dbyt 0aff1h + .dbyt 0aff2h + .dbyt 0aff3h + .dbyt 0aff4h + .dbyt 0aff5h + .dbyt 0aff6h + .dbyt 0aff7h + .dbyt 0aff8h + .dbyt 0aff9h + .dbyt 0affah + .dbyt 0affbh + .dbyt 0affch + .dbyt 0affdh + .dbyt 0affeh + .dbyt 0afffh + .dbyt 0b000h + .dbyt 0b001h + .dbyt 0b002h + .dbyt 0b003h + .dbyt 0b004h + .dbyt 0b005h + .dbyt 0b006h + .dbyt 0b007h + .dbyt 0b008h + .dbyt 0b009h + .dbyt 0b00ah + .dbyt 0b00bh + .dbyt 0b00ch + .dbyt 0b00dh + .dbyt 0b00eh + .dbyt 0b00fh + .dbyt 0bfe1h + .dbyt 0bfe2h + .dbyt 0bfe3h + .dbyt 0bfe4h + .dbyt 0bfe5h + .dbyt 0bfe6h + .dbyt 0bfe7h + .dbyt 0bfe8h + .dbyt 0bfe9h + .dbyt 0bfeah + .dbyt 0bfebh + .dbyt 0bfech + .dbyt 0bfedh + .dbyt 0bfeeh + .dbyt 0bfefh + .dbyt 0bff0h + .dbyt 0bff1h + .dbyt 0bff2h + .dbyt 0bff3h + .dbyt 0bff4h + .dbyt 0bff5h + .dbyt 0bff6h + .dbyt 0bff7h + .dbyt 0bff8h + .dbyt 0bff9h + .dbyt 0bffah + .dbyt 0bffbh + .dbyt 0bffch + .dbyt 0bffdh + .dbyt 0bffeh + .dbyt 0bfffh + .dbyt 0c000h + .dbyt 0c001h + .dbyt 0c002h + .dbyt 0c003h + .dbyt 0c004h + .dbyt 0c005h + .dbyt 0c006h + .dbyt 0c007h + .dbyt 0c008h + .dbyt 0c009h + .dbyt 0c00ah + .dbyt 0c00bh + .dbyt 0c00ch + .dbyt 0c00dh + .dbyt 0c00eh + .dbyt 0c00fh + .dbyt 0cfe1h + .dbyt 0cfe2h + .dbyt 0cfe3h + .dbyt 0cfe4h + .dbyt 0cfe5h + .dbyt 0cfe6h + .dbyt 0cfe7h + .dbyt 0cfe8h + .dbyt 0cfe9h + .dbyt 0cfeah + .dbyt 0cfebh + .dbyt 0cfech + .dbyt 0cfedh + .dbyt 0cfeeh + .dbyt 0cfefh + .dbyt 0cff0h + .dbyt 0cff1h + .dbyt 0cff2h + .dbyt 0cff3h + .dbyt 0cff4h + .dbyt 0cff5h + .dbyt 0cff6h + .dbyt 0cff7h + .dbyt 0cff8h + .dbyt 0cff9h + .dbyt 0cffah + .dbyt 0cffbh + .dbyt 0cffch + .dbyt 0cffdh + .dbyt 0cffeh + .dbyt 0cfffh + .dbyt 0d000h + .dbyt 0d001h + .dbyt 0d002h + .dbyt 0d003h + .dbyt 0d004h + .dbyt 0d005h + .dbyt 0d006h + .dbyt 0d007h + .dbyt 0d008h + .dbyt 0d009h + .dbyt 0d00ah + .dbyt 0d00bh + .dbyt 0d00ch + .dbyt 0d00dh + .dbyt 0d00eh + .dbyt 0d00fh + .dbyt 0dfe1h + .dbyt 0dfe2h + .dbyt 0dfe3h + .dbyt 0dfe4h + .dbyt 0dfe5h + .dbyt 0dfe6h + .dbyt 0dfe7h + .dbyt 0dfe8h + .dbyt 0dfe9h + .dbyt 0dfeah + .dbyt 0dfebh + .dbyt 0dfech + .dbyt 0dfedh + .dbyt 0dfeeh + .dbyt 0dfefh + .dbyt 0dff0h + .dbyt 0dff1h + .dbyt 0dff2h + .dbyt 0dff3h + .dbyt 0dff4h + .dbyt 0dff5h + .dbyt 0dff6h + .dbyt 0dff7h + .dbyt 0dff8h + .dbyt 0dff9h + .dbyt 0dffah + .dbyt 0dffbh + .dbyt 0dffch + .dbyt 0dffdh + .dbyt 0dffeh + .dbyt 0dfffh + .dbyt 0e000h + .dbyt 0e001h + .dbyt 0e002h + .dbyt 0e003h + .dbyt 0e004h + .dbyt 0e005h + .dbyt 0e006h + .dbyt 0e007h + .dbyt 0e008h + .dbyt 0e009h + .dbyt 0e00ah + .dbyt 0e00bh + .dbyt 0e00ch + .dbyt 0e00dh + .dbyt 0e00eh + .dbyt 0e00fh + .dbyt 0efe1h + .dbyt 0efe2h + .dbyt 0efe3h + .dbyt 0efe4h + .dbyt 0efe5h + .dbyt 0efe6h + .dbyt 0efe7h + .dbyt 0efe8h + .dbyt 0efe9h + .dbyt 0efeah + .dbyt 0efebh + .dbyt 0efech + .dbyt 0efedh + .dbyt 0efeeh + .dbyt 0efefh + .dbyt 0eff0h + .dbyt 0eff1h + .dbyt 0eff2h + .dbyt 0eff3h + .dbyt 0eff4h + .dbyt 0eff5h + .dbyt 0eff6h + .dbyt 0eff7h + .dbyt 0eff8h + .dbyt 0eff9h + .dbyt 0effah + .dbyt 0effbh + .dbyt 0effch + .dbyt 0effdh + .dbyt 0effeh + .dbyt 0efffh + .dbyt 0f000h + .dbyt 0f001h + .dbyt 0f002h + .dbyt 0f003h + .dbyt 0f004h + .dbyt 0f005h + .dbyt 0f006h + .dbyt 0f007h + .dbyt 0f008h + .dbyt 0f009h + .dbyt 0f00ah + .dbyt 0f00bh + .dbyt 0f00ch + .dbyt 0f00dh + .dbyt 0f00eh + .dbyt 0f00fh + .dbyt 0ffe1h + .dbyt 0ffe2h + .dbyt 0ffe3h + .dbyt 0ffe4h + .dbyt 0ffe5h + .dbyt 0ffe6h + .dbyt 0ffe7h + .dbyt 0ffe8h + .dbyt 0ffe9h + .dbyt 0ffeah + .dbyt 0ffebh + .dbyt 0ffech + .dbyt 0ffedh + .dbyt 0ffeeh + .dbyt 0ffefh + .dbyt 0fff0h + .dbyt 0fff1h + .dbyt 0fff2h + .dbyt 0fff3h + .dbyt 0fff4h + .dbyt 0fff5h + .dbyt 0fff6h + .dbyt 0fff7h + .dbyt 0fff8h + .dbyt 0fff9h + .dbyt 0fffah + .dbyt 0fffbh + .dbyt 0fffch + .dbyt 0fffdh + .dbyt 0fffeh + .dbyt 0ffffh + + ; alternative hex values, uppercase + .dbyt 0h + .dbyt 1h + .dbyt 2h + .dbyt 3h + .dbyt 4h + .dbyt 5h + .dbyt 6h + .dbyt 7h + .dbyt 8h + .dbyt 9h + .dbyt 0Ah + .dbyt 0Bh + .dbyt 0Ch + .dbyt 0Dh + .dbyt 0Eh + .dbyt 0Fh + .dbyt 10h + .dbyt 11h + .dbyt 12h + .dbyt 13h + .dbyt 70h + .dbyt 71h + .dbyt 72h + .dbyt 73h + .dbyt 74h + .dbyt 75h + .dbyt 76h + .dbyt 77h + .dbyt 78h + .dbyt 79h + .dbyt 7Ah + .dbyt 7Bh + .dbyt 7Ch + .dbyt 7Dh + .dbyt 7Eh + .dbyt 7Fh + .dbyt 80h + .dbyt 81h + .dbyt 82h + .dbyt 83h + .dbyt 84h + .dbyt 85h + .dbyt 86h + .dbyt 0F0h + .dbyt 0F1h + .dbyt 0F2h + .dbyt 0F3h + .dbyt 0F4h + .dbyt 0F5h + .dbyt 0F6h + .dbyt 0F7h + .dbyt 0F8h + .dbyt 0F9h + .dbyt 0FAh + .dbyt 0FBh + .dbyt 0FCh + .dbyt 0FDh + .dbyt 0FEh + .dbyt 0FFh + .dbyt 100h + .dbyt 101h + .dbyt 102h + .dbyt 103h + .dbyt 0FD2h + .dbyt 0FD3h + .dbyt 0FD4h + .dbyt 0FD5h + .dbyt 0FD6h + .dbyt 0FD7h + .dbyt 0FD8h + .dbyt 0FD9h + .dbyt 0FDAh + .dbyt 0FDBh + .dbyt 0FDCh + .dbyt 0FDDh + .dbyt 0FDEh + .dbyt 0FDFh + .dbyt 0FE0h + .dbyt 0FE1h + .dbyt 0FE2h + .dbyt 0FE3h + .dbyt 0FE4h + .dbyt 0FE5h + .dbyt 0FE6h + .dbyt 0FE7h + .dbyt 0FE8h + .dbyt 0FE9h + .dbyt 0FEAh + .dbyt 0FEBh + .dbyt 0FECh + .dbyt 0FEDh + .dbyt 0FEEh + .dbyt 0FEFh + .dbyt 0FF0h + .dbyt 0FF1h + .dbyt 0FF2h + .dbyt 0FF3h + .dbyt 0FF4h + .dbyt 0FF5h + .dbyt 0FF6h + .dbyt 0FF7h + .dbyt 0FF8h + .dbyt 0FF9h + .dbyt 0FFAh + .dbyt 0FFBh + .dbyt 0FFCh + .dbyt 0FFDh + .dbyt 0FFEh + .dbyt 0FFFh + .dbyt 1000h + .dbyt 1001h + .dbyt 1002h + .dbyt 1003h + .dbyt 1004h + .dbyt 1005h + .dbyt 1006h + .dbyt 1007h + .dbyt 1008h + .dbyt 7FF0h + .dbyt 7FF1h + .dbyt 7FF2h + .dbyt 7FF3h + .dbyt 7FF4h + .dbyt 7FF5h + .dbyt 7FF6h + .dbyt 7FF7h + .dbyt 7FF8h + .dbyt 7FF9h + .dbyt 7FFAh + .dbyt 7FFBh + .dbyt 7FFCh + .dbyt 7FFDh + .dbyt 7FFEh + .dbyt 7FFFh + .dbyt 8000h + .dbyt 8001h + .dbyt 8002h + .dbyt 8003h + .dbyt 8004h + .dbyt 8005h + .dbyt 8006h + .dbyt 8007h + .dbyt 8008h + .dbyt 8009h + .dbyt 800Ah + .dbyt 800Bh + .dbyt 9FE1h + .dbyt 9FE2h + .dbyt 9FE3h + .dbyt 9FE4h + .dbyt 9FE5h + .dbyt 9FE6h + .dbyt 9FE7h + .dbyt 9FE8h + .dbyt 9FE9h + .dbyt 9FEAh + .dbyt 9FEBh + .dbyt 9FECh + .dbyt 9FEDh + .dbyt 9FEEh + .dbyt 9FEFh + .dbyt 9FF0h + .dbyt 9FF1h + .dbyt 9FF2h + .dbyt 9FF3h + .dbyt 9FF4h + .dbyt 9FF5h + .dbyt 9FF6h + .dbyt 9FF7h + .dbyt 9FF8h + .dbyt 9FF9h + .dbyt 9FFAh + .dbyt 9FFBh + .dbyt 9FFCh + .dbyt 9FFDh + .dbyt 9FFEh + .dbyt 9FFFh + .dbyt 0A000h + .dbyt 0A001h + .dbyt 0A002h + .dbyt 0A003h + .dbyt 0A004h + .dbyt 0A005h + .dbyt 0A006h + .dbyt 0A007h + .dbyt 0A008h + .dbyt 0A009h + .dbyt 0A00Ah + .dbyt 0A00Bh + .dbyt 0A00Ch + .dbyt 0A00Dh + .dbyt 0A00Eh + .dbyt 0A00Fh + .dbyt 0AFE1h + .dbyt 0AFE2h + .dbyt 0AFE3h + .dbyt 0AFE4h + .dbyt 0AFE5h + .dbyt 0AFE6h + .dbyt 0AFE7h + .dbyt 0AFE8h + .dbyt 0AFE9h + .dbyt 0AFEAh + .dbyt 0AFEBh + .dbyt 0AFECh + .dbyt 0AFEDh + .dbyt 0AFEEh + .dbyt 0AFEFh + .dbyt 0AFF0h + .dbyt 0AFF1h + .dbyt 0AFF2h + .dbyt 0AFF3h + .dbyt 0AFF4h + .dbyt 0AFF5h + .dbyt 0AFF6h + .dbyt 0AFF7h + .dbyt 0AFF8h + .dbyt 0AFF9h + .dbyt 0AFFAh + .dbyt 0AFFBh + .dbyt 0AFFCh + .dbyt 0AFFDh + .dbyt 0AFFEh + .dbyt 0AFFFh + .dbyt 0B000h + .dbyt 0B001h + .dbyt 0B002h + .dbyt 0B003h + .dbyt 0B004h + .dbyt 0B005h + .dbyt 0B006h + .dbyt 0B007h + .dbyt 0B008h + .dbyt 0B009h + .dbyt 0B00Ah + .dbyt 0B00Bh + .dbyt 0B00Ch + .dbyt 0B00Dh + .dbyt 0B00Eh + .dbyt 0B00Fh + .dbyt 0BFE1h + .dbyt 0BFE2h + .dbyt 0BFE3h + .dbyt 0BFE4h + .dbyt 0BFE5h + .dbyt 0BFE6h + .dbyt 0BFE7h + .dbyt 0BFE8h + .dbyt 0BFE9h + .dbyt 0BFEAh + .dbyt 0BFEBh + .dbyt 0BFECh + .dbyt 0BFEDh + .dbyt 0BFEEh + .dbyt 0BFEFh + .dbyt 0BFF0h + .dbyt 0BFF1h + .dbyt 0BFF2h + .dbyt 0BFF3h + .dbyt 0BFF4h + .dbyt 0BFF5h + .dbyt 0BFF6h + .dbyt 0BFF7h + .dbyt 0BFF8h + .dbyt 0BFF9h + .dbyt 0BFFAh + .dbyt 0BFFBh + .dbyt 0BFFCh + .dbyt 0BFFDh + .dbyt 0BFFEh + .dbyt 0BFFFh + .dbyt 0C000h + .dbyt 0C001h + .dbyt 0C002h + .dbyt 0C003h + .dbyt 0C004h + .dbyt 0C005h + .dbyt 0C006h + .dbyt 0C007h + .dbyt 0C008h + .dbyt 0C009h + .dbyt 0C00Ah + .dbyt 0C00Bh + .dbyt 0C00Ch + .dbyt 0C00Dh + .dbyt 0C00Eh + .dbyt 0C00Fh + .dbyt 0CFE1h + .dbyt 0CFE2h + .dbyt 0CFE3h + .dbyt 0CFE4h + .dbyt 0CFE5h + .dbyt 0CFE6h + .dbyt 0CFE7h + .dbyt 0CFE8h + .dbyt 0CFE9h + .dbyt 0CFEAh + .dbyt 0CFEBh + .dbyt 0CFECh + .dbyt 0CFEDh + .dbyt 0CFEEh + .dbyt 0CFEFh + .dbyt 0CFF0h + .dbyt 0CFF1h + .dbyt 0CFF2h + .dbyt 0CFF3h + .dbyt 0CFF4h + .dbyt 0CFF5h + .dbyt 0CFF6h + .dbyt 0CFF7h + .dbyt 0CFF8h + .dbyt 0CFF9h + .dbyt 0CFFAh + .dbyt 0CFFBh + .dbyt 0CFFCh + .dbyt 0CFFDh + .dbyt 0CFFEh + .dbyt 0CFFFh + .dbyt 0D000h + .dbyt 0D001h + .dbyt 0D002h + .dbyt 0D003h + .dbyt 0D004h + .dbyt 0D005h + .dbyt 0D006h + .dbyt 0D007h + .dbyt 0D008h + .dbyt 0D009h + .dbyt 0D00Ah + .dbyt 0D00Bh + .dbyt 0D00Ch + .dbyt 0D00Dh + .dbyt 0D00Eh + .dbyt 0D00Fh + .dbyt 0DFE1h + .dbyt 0DFE2h + .dbyt 0DFE3h + .dbyt 0DFE4h + .dbyt 0DFE5h + .dbyt 0DFE6h + .dbyt 0DFE7h + .dbyt 0DFE8h + .dbyt 0DFE9h + .dbyt 0DFEAh + .dbyt 0DFEBh + .dbyt 0DFECh + .dbyt 0DFEDh + .dbyt 0DFEEh + .dbyt 0DFEFh + .dbyt 0DFF0h + .dbyt 0DFF1h + .dbyt 0DFF2h + .dbyt 0DFF3h + .dbyt 0DFF4h + .dbyt 0DFF5h + .dbyt 0DFF6h + .dbyt 0DFF7h + .dbyt 0DFF8h + .dbyt 0DFF9h + .dbyt 0DFFAh + .dbyt 0DFFBh + .dbyt 0DFFCh + .dbyt 0DFFDh + .dbyt 0DFFEh + .dbyt 0DFFFh + .dbyt 0E000h + .dbyt 0E001h + .dbyt 0E002h + .dbyt 0E003h + .dbyt 0E004h + .dbyt 0E005h + .dbyt 0E006h + .dbyt 0E007h + .dbyt 0E008h + .dbyt 0E009h + .dbyt 0E00Ah + .dbyt 0E00Bh + .dbyt 0E00Ch + .dbyt 0E00Dh + .dbyt 0E00Eh + .dbyt 0E00Fh + .dbyt 0EFE1h + .dbyt 0EFE2h + .dbyt 0EFE3h + .dbyt 0EFE4h + .dbyt 0EFE5h + .dbyt 0EFE6h + .dbyt 0EFE7h + .dbyt 0EFE8h + .dbyt 0EFE9h + .dbyt 0EFEAh + .dbyt 0EFEBh + .dbyt 0EFECh + .dbyt 0EFEDh + .dbyt 0EFEEh + .dbyt 0EFEFh + .dbyt 0EFF0h + .dbyt 0EFF1h + .dbyt 0EFF2h + .dbyt 0EFF3h + .dbyt 0EFF4h + .dbyt 0EFF5h + .dbyt 0EFF6h + .dbyt 0EFF7h + .dbyt 0EFF8h + .dbyt 0EFF9h + .dbyt 0EFFAh + .dbyt 0EFFBh + .dbyt 0EFFCh + .dbyt 0EFFDh + .dbyt 0EFFEh + .dbyt 0EFFFh + .dbyt 0F000h + .dbyt 0F001h + .dbyt 0F002h + .dbyt 0F003h + .dbyt 0F004h + .dbyt 0F005h + .dbyt 0F006h + .dbyt 0F007h + .dbyt 0F008h + .dbyt 0F009h + .dbyt 0F00Ah + .dbyt 0F00Bh + .dbyt 0F00Ch + .dbyt 0F00Dh + .dbyt 0F00Eh + .dbyt 0F00Fh + .dbyt 0FFE1h + .dbyt 0FFE2h + .dbyt 0FFE3h + .dbyt 0FFE4h + .dbyt 0FFE5h + .dbyt 0FFE6h + .dbyt 0FFE7h + .dbyt 0FFE8h + .dbyt 0FFE9h + .dbyt 0FFEAh + .dbyt 0FFEBh + .dbyt 0FFECh + .dbyt 0FFEDh + .dbyt 0FFEEh + .dbyt 0FFEFh + .dbyt 0FFF0h + .dbyt 0FFF1h + .dbyt 0FFF2h + .dbyt 0FFF3h + .dbyt 0FFF4h + .dbyt 0FFF5h + .dbyt 0FFF6h + .dbyt 0FFF7h + .dbyt 0FFF8h + .dbyt 0FFF9h + .dbyt 0FFFAh + .dbyt 0FFFBh + .dbyt 0FFFCh + .dbyt 0FFFDh + .dbyt 0FFFEh + .dbyt 0FFFFh + + ; alternative 4-digit hex values + .dbyt 0000h + .dbyt 0001h + .dbyt 0002h + .dbyt 0003h + .dbyt 0004h + .dbyt 0005h + .dbyt 0006h + .dbyt 0007h + .dbyt 0008h + .dbyt 0009h + .dbyt 000ah + .dbyt 000bh + .dbyt 000ch + .dbyt 000dh + .dbyt 000eh + .dbyt 000fh + .dbyt 0010h + .dbyt 0011h + .dbyt 0012h + .dbyt 0013h + .dbyt 0070h + .dbyt 0071h + .dbyt 0072h + .dbyt 0073h + .dbyt 0074h + .dbyt 0075h + .dbyt 0076h + .dbyt 0077h + .dbyt 0078h + .dbyt 0079h + .dbyt 007ah + .dbyt 007bh + .dbyt 007ch + .dbyt 007dh + .dbyt 007eh + .dbyt 007fh + .dbyt 0080h + .dbyt 0081h + .dbyt 0082h + .dbyt 0083h + .dbyt 0084h + .dbyt 0085h + .dbyt 0086h + .dbyt 00f0h + .dbyt 00f1h + .dbyt 00f2h + .dbyt 00f3h + .dbyt 00f4h + .dbyt 00f5h + .dbyt 00f6h + .dbyt 00f7h + .dbyt 00f8h + .dbyt 00f9h + .dbyt 00fah + .dbyt 00fbh + .dbyt 00fch + .dbyt 00fdh + .dbyt 00feh + .dbyt 00ffh + .dbyt 0100h + .dbyt 0101h + .dbyt 0102h + .dbyt 0103h + .dbyt 0fd2h + .dbyt 0fd3h + .dbyt 0fd4h + .dbyt 0fd5h + .dbyt 0fd6h + .dbyt 0fd7h + .dbyt 0fd8h + .dbyt 0fd9h + .dbyt 0fdah + .dbyt 0fdbh + .dbyt 0fdch + .dbyt 0fddh + .dbyt 0fdeh + .dbyt 0fdfh + .dbyt 0fe0h + .dbyt 0fe1h + .dbyt 0fe2h + .dbyt 0fe3h + .dbyt 0fe4h + .dbyt 0fe5h + .dbyt 0fe6h + .dbyt 0fe7h + .dbyt 0fe8h + .dbyt 0fe9h + .dbyt 0feah + .dbyt 0febh + .dbyt 0fech + .dbyt 0fedh + .dbyt 0feeh + .dbyt 0fefh + .dbyt 0ff0h + .dbyt 0ff1h + .dbyt 0ff2h + .dbyt 0ff3h + .dbyt 0ff4h + .dbyt 0ff5h + .dbyt 0ff6h + .dbyt 0ff7h + .dbyt 0ff8h + .dbyt 0ff9h + .dbyt 0ffah + .dbyt 0ffbh + .dbyt 0ffch + .dbyt 0ffdh + .dbyt 0ffeh + .dbyt 0fffh + .dbyt 1000h + .dbyt 1001h + .dbyt 1002h + .dbyt 1003h + .dbyt 1004h + .dbyt 1005h + .dbyt 1006h + .dbyt 1007h + .dbyt 1008h + .dbyt 7ff0h + .dbyt 7ff1h + .dbyt 7ff2h + .dbyt 7ff3h + .dbyt 7ff4h + .dbyt 7ff5h + .dbyt 7ff6h + .dbyt 7ff7h + .dbyt 7ff8h + .dbyt 7ff9h + .dbyt 7ffah + .dbyt 7ffbh + .dbyt 7ffch + .dbyt 7ffdh + .dbyt 7ffeh + .dbyt 7fffh + .dbyt 8000h + .dbyt 8001h + .dbyt 8002h + .dbyt 8003h + .dbyt 8004h + .dbyt 8005h + .dbyt 8006h + .dbyt 8007h + .dbyt 8008h + .dbyt 8009h + .dbyt 800ah + .dbyt 800bh + .dbyt 9fe1h + .dbyt 9fe2h + .dbyt 9fe3h + .dbyt 9fe4h + .dbyt 9fe5h + .dbyt 9fe6h + .dbyt 9fe7h + .dbyt 9fe8h + .dbyt 9fe9h + .dbyt 9feah + .dbyt 9febh + .dbyt 9fech + .dbyt 9fedh + .dbyt 9feeh + .dbyt 9fefh + .dbyt 9ff0h + .dbyt 9ff1h + .dbyt 9ff2h + .dbyt 9ff3h + .dbyt 9ff4h + .dbyt 9ff5h + .dbyt 9ff6h + .dbyt 9ff7h + .dbyt 9ff8h + .dbyt 9ff9h + .dbyt 9ffah + .dbyt 9ffbh + .dbyt 9ffch + .dbyt 9ffdh + .dbyt 9ffeh + .dbyt 9fffh + .dbyt 0a000h + .dbyt 0a001h + .dbyt 0a002h + .dbyt 0a003h + .dbyt 0a004h + .dbyt 0a005h + .dbyt 0a006h + .dbyt 0a007h + .dbyt 0a008h + .dbyt 0a009h + .dbyt 0a00ah + .dbyt 0a00bh + .dbyt 0a00ch + .dbyt 0a00dh + .dbyt 0a00eh + .dbyt 0a00fh + .dbyt 0afe1h + .dbyt 0afe2h + .dbyt 0afe3h + .dbyt 0afe4h + .dbyt 0afe5h + .dbyt 0afe6h + .dbyt 0afe7h + .dbyt 0afe8h + .dbyt 0afe9h + .dbyt 0afeah + .dbyt 0afebh + .dbyt 0afech + .dbyt 0afedh + .dbyt 0afeeh + .dbyt 0afefh + .dbyt 0aff0h + .dbyt 0aff1h + .dbyt 0aff2h + .dbyt 0aff3h + .dbyt 0aff4h + .dbyt 0aff5h + .dbyt 0aff6h + .dbyt 0aff7h + .dbyt 0aff8h + .dbyt 0aff9h + .dbyt 0affah + .dbyt 0affbh + .dbyt 0affch + .dbyt 0affdh + .dbyt 0affeh + .dbyt 0afffh + .dbyt 0b000h + .dbyt 0b001h + .dbyt 0b002h + .dbyt 0b003h + .dbyt 0b004h + .dbyt 0b005h + .dbyt 0b006h + .dbyt 0b007h + .dbyt 0b008h + .dbyt 0b009h + .dbyt 0b00ah + .dbyt 0b00bh + .dbyt 0b00ch + .dbyt 0b00dh + .dbyt 0b00eh + .dbyt 0b00fh + .dbyt 0bfe1h + .dbyt 0bfe2h + .dbyt 0bfe3h + .dbyt 0bfe4h + .dbyt 0bfe5h + .dbyt 0bfe6h + .dbyt 0bfe7h + .dbyt 0bfe8h + .dbyt 0bfe9h + .dbyt 0bfeah + .dbyt 0bfebh + .dbyt 0bfech + .dbyt 0bfedh + .dbyt 0bfeeh + .dbyt 0bfefh + .dbyt 0bff0h + .dbyt 0bff1h + .dbyt 0bff2h + .dbyt 0bff3h + .dbyt 0bff4h + .dbyt 0bff5h + .dbyt 0bff6h + .dbyt 0bff7h + .dbyt 0bff8h + .dbyt 0bff9h + .dbyt 0bffah + .dbyt 0bffbh + .dbyt 0bffch + .dbyt 0bffdh + .dbyt 0bffeh + .dbyt 0bfffh + .dbyt 0c000h + .dbyt 0c001h + .dbyt 0c002h + .dbyt 0c003h + .dbyt 0c004h + .dbyt 0c005h + .dbyt 0c006h + .dbyt 0c007h + .dbyt 0c008h + .dbyt 0c009h + .dbyt 0c00ah + .dbyt 0c00bh + .dbyt 0c00ch + .dbyt 0c00dh + .dbyt 0c00eh + .dbyt 0c00fh + .dbyt 0cfe1h + .dbyt 0cfe2h + .dbyt 0cfe3h + .dbyt 0cfe4h + .dbyt 0cfe5h + .dbyt 0cfe6h + .dbyt 0cfe7h + .dbyt 0cfe8h + .dbyt 0cfe9h + .dbyt 0cfeah + .dbyt 0cfebh + .dbyt 0cfech + .dbyt 0cfedh + .dbyt 0cfeeh + .dbyt 0cfefh + .dbyt 0cff0h + .dbyt 0cff1h + .dbyt 0cff2h + .dbyt 0cff3h + .dbyt 0cff4h + .dbyt 0cff5h + .dbyt 0cff6h + .dbyt 0cff7h + .dbyt 0cff8h + .dbyt 0cff9h + .dbyt 0cffah + .dbyt 0cffbh + .dbyt 0cffch + .dbyt 0cffdh + .dbyt 0cffeh + .dbyt 0cfffh + .dbyt 0d000h + .dbyt 0d001h + .dbyt 0d002h + .dbyt 0d003h + .dbyt 0d004h + .dbyt 0d005h + .dbyt 0d006h + .dbyt 0d007h + .dbyt 0d008h + .dbyt 0d009h + .dbyt 0d00ah + .dbyt 0d00bh + .dbyt 0d00ch + .dbyt 0d00dh + .dbyt 0d00eh + .dbyt 0d00fh + .dbyt 0dfe1h + .dbyt 0dfe2h + .dbyt 0dfe3h + .dbyt 0dfe4h + .dbyt 0dfe5h + .dbyt 0dfe6h + .dbyt 0dfe7h + .dbyt 0dfe8h + .dbyt 0dfe9h + .dbyt 0dfeah + .dbyt 0dfebh + .dbyt 0dfech + .dbyt 0dfedh + .dbyt 0dfeeh + .dbyt 0dfefh + .dbyt 0dff0h + .dbyt 0dff1h + .dbyt 0dff2h + .dbyt 0dff3h + .dbyt 0dff4h + .dbyt 0dff5h + .dbyt 0dff6h + .dbyt 0dff7h + .dbyt 0dff8h + .dbyt 0dff9h + .dbyt 0dffah + .dbyt 0dffbh + .dbyt 0dffch + .dbyt 0dffdh + .dbyt 0dffeh + .dbyt 0dfffh + .dbyt 0e000h + .dbyt 0e001h + .dbyt 0e002h + .dbyt 0e003h + .dbyt 0e004h + .dbyt 0e005h + .dbyt 0e006h + .dbyt 0e007h + .dbyt 0e008h + .dbyt 0e009h + .dbyt 0e00ah + .dbyt 0e00bh + .dbyt 0e00ch + .dbyt 0e00dh + .dbyt 0e00eh + .dbyt 0e00fh + .dbyt 0efe1h + .dbyt 0efe2h + .dbyt 0efe3h + .dbyt 0efe4h + .dbyt 0efe5h + .dbyt 0efe6h + .dbyt 0efe7h + .dbyt 0efe8h + .dbyt 0efe9h + .dbyt 0efeah + .dbyt 0efebh + .dbyt 0efech + .dbyt 0efedh + .dbyt 0efeeh + .dbyt 0efefh + .dbyt 0eff0h + .dbyt 0eff1h + .dbyt 0eff2h + .dbyt 0eff3h + .dbyt 0eff4h + .dbyt 0eff5h + .dbyt 0eff6h + .dbyt 0eff7h + .dbyt 0eff8h + .dbyt 0eff9h + .dbyt 0effah + .dbyt 0effbh + .dbyt 0effch + .dbyt 0effdh + .dbyt 0effeh + .dbyt 0efffh + .dbyt 0f000h + .dbyt 0f001h + .dbyt 0f002h + .dbyt 0f003h + .dbyt 0f004h + .dbyt 0f005h + .dbyt 0f006h + .dbyt 0f007h + .dbyt 0f008h + .dbyt 0f009h + .dbyt 0f00ah + .dbyt 0f00bh + .dbyt 0f00ch + .dbyt 0f00dh + .dbyt 0f00eh + .dbyt 0f00fh + .dbyt 0ffe1h + .dbyt 0ffe2h + .dbyt 0ffe3h + .dbyt 0ffe4h + .dbyt 0ffe5h + .dbyt 0ffe6h + .dbyt 0ffe7h + .dbyt 0ffe8h + .dbyt 0ffe9h + .dbyt 0ffeah + .dbyt 0ffebh + .dbyt 0ffech + .dbyt 0ffedh + .dbyt 0ffeeh + .dbyt 0ffefh + .dbyt 0fff0h + .dbyt 0fff1h + .dbyt 0fff2h + .dbyt 0fff3h + .dbyt 0fff4h + .dbyt 0fff5h + .dbyt 0fff6h + .dbyt 0fff7h + .dbyt 0fff8h + .dbyt 0fff9h + .dbyt 0fffah + .dbyt 0fffbh + .dbyt 0fffch + .dbyt 0fffdh + .dbyt 0fffeh + .dbyt 0ffffh + + ; alternative 4-digit hex values, uppercase + .dbyt 0000h + .dbyt 0001h + .dbyt 0002h + .dbyt 0003h + .dbyt 0004h + .dbyt 0005h + .dbyt 0006h + .dbyt 0007h + .dbyt 0008h + .dbyt 0009h + .dbyt 000Ah + .dbyt 000Bh + .dbyt 000Ch + .dbyt 000Dh + .dbyt 000Eh + .dbyt 000Fh + .dbyt 0010h + .dbyt 0011h + .dbyt 0012h + .dbyt 0013h + .dbyt 0070h + .dbyt 0071h + .dbyt 0072h + .dbyt 0073h + .dbyt 0074h + .dbyt 0075h + .dbyt 0076h + .dbyt 0077h + .dbyt 0078h + .dbyt 0079h + .dbyt 007Ah + .dbyt 007Bh + .dbyt 007Ch + .dbyt 007Dh + .dbyt 007Eh + .dbyt 007Fh + .dbyt 0080h + .dbyt 0081h + .dbyt 0082h + .dbyt 0083h + .dbyt 0084h + .dbyt 0085h + .dbyt 0086h + .dbyt 00F0h + .dbyt 00F1h + .dbyt 00F2h + .dbyt 00F3h + .dbyt 00F4h + .dbyt 00F5h + .dbyt 00F6h + .dbyt 00F7h + .dbyt 00F8h + .dbyt 00F9h + .dbyt 00FAh + .dbyt 00FBh + .dbyt 00FCh + .dbyt 00FDh + .dbyt 00FEh + .dbyt 00FFh + .dbyt 0100h + .dbyt 0101h + .dbyt 0102h + .dbyt 0103h + .dbyt 0FD2h + .dbyt 0FD3h + .dbyt 0FD4h + .dbyt 0FD5h + .dbyt 0FD6h + .dbyt 0FD7h + .dbyt 0FD8h + .dbyt 0FD9h + .dbyt 0FDAh + .dbyt 0FDBh + .dbyt 0FDCh + .dbyt 0FDDh + .dbyt 0FDEh + .dbyt 0FDFh + .dbyt 0FE0h + .dbyt 0FE1h + .dbyt 0FE2h + .dbyt 0FE3h + .dbyt 0FE4h + .dbyt 0FE5h + .dbyt 0FE6h + .dbyt 0FE7h + .dbyt 0FE8h + .dbyt 0FE9h + .dbyt 0FEAh + .dbyt 0FEBh + .dbyt 0FECh + .dbyt 0FEDh + .dbyt 0FEEh + .dbyt 0FEFh + .dbyt 0FF0h + .dbyt 0FF1h + .dbyt 0FF2h + .dbyt 0FF3h + .dbyt 0FF4h + .dbyt 0FF5h + .dbyt 0FF6h + .dbyt 0FF7h + .dbyt 0FF8h + .dbyt 0FF9h + .dbyt 0FFAh + .dbyt 0FFBh + .dbyt 0FFCh + .dbyt 0FFDh + .dbyt 0FFEh + .dbyt 0FFFh + .dbyt 1000h + .dbyt 1001h + .dbyt 1002h + .dbyt 1003h + .dbyt 1004h + .dbyt 1005h + .dbyt 1006h + .dbyt 1007h + .dbyt 1008h + .dbyt 7FF0h + .dbyt 7FF1h + .dbyt 7FF2h + .dbyt 7FF3h + .dbyt 7FF4h + .dbyt 7FF5h + .dbyt 7FF6h + .dbyt 7FF7h + .dbyt 7FF8h + .dbyt 7FF9h + .dbyt 7FFAh + .dbyt 7FFBh + .dbyt 7FFCh + .dbyt 7FFDh + .dbyt 7FFEh + .dbyt 7FFFh + .dbyt 8000h + .dbyt 8001h + .dbyt 8002h + .dbyt 8003h + .dbyt 8004h + .dbyt 8005h + .dbyt 8006h + .dbyt 8007h + .dbyt 8008h + .dbyt 8009h + .dbyt 800Ah + .dbyt 800Bh + .dbyt 9FE1h + .dbyt 9FE2h + .dbyt 9FE3h + .dbyt 9FE4h + .dbyt 9FE5h + .dbyt 9FE6h + .dbyt 9FE7h + .dbyt 9FE8h + .dbyt 9FE9h + .dbyt 9FEAh + .dbyt 9FEBh + .dbyt 9FECh + .dbyt 9FEDh + .dbyt 9FEEh + .dbyt 9FEFh + .dbyt 9FF0h + .dbyt 9FF1h + .dbyt 9FF2h + .dbyt 9FF3h + .dbyt 9FF4h + .dbyt 9FF5h + .dbyt 9FF6h + .dbyt 9FF7h + .dbyt 9FF8h + .dbyt 9FF9h + .dbyt 9FFAh + .dbyt 9FFBh + .dbyt 9FFCh + .dbyt 9FFDh + .dbyt 9FFEh + .dbyt 9FFFh + .dbyt 0A000h + .dbyt 0A001h + .dbyt 0A002h + .dbyt 0A003h + .dbyt 0A004h + .dbyt 0A005h + .dbyt 0A006h + .dbyt 0A007h + .dbyt 0A008h + .dbyt 0A009h + .dbyt 0A00Ah + .dbyt 0A00Bh + .dbyt 0A00Ch + .dbyt 0A00Dh + .dbyt 0A00Eh + .dbyt 0A00Fh + .dbyt 0AFE1h + .dbyt 0AFE2h + .dbyt 0AFE3h + .dbyt 0AFE4h + .dbyt 0AFE5h + .dbyt 0AFE6h + .dbyt 0AFE7h + .dbyt 0AFE8h + .dbyt 0AFE9h + .dbyt 0AFEAh + .dbyt 0AFEBh + .dbyt 0AFECh + .dbyt 0AFEDh + .dbyt 0AFEEh + .dbyt 0AFEFh + .dbyt 0AFF0h + .dbyt 0AFF1h + .dbyt 0AFF2h + .dbyt 0AFF3h + .dbyt 0AFF4h + .dbyt 0AFF5h + .dbyt 0AFF6h + .dbyt 0AFF7h + .dbyt 0AFF8h + .dbyt 0AFF9h + .dbyt 0AFFAh + .dbyt 0AFFBh + .dbyt 0AFFCh + .dbyt 0AFFDh + .dbyt 0AFFEh + .dbyt 0AFFFh + .dbyt 0B000h + .dbyt 0B001h + .dbyt 0B002h + .dbyt 0B003h + .dbyt 0B004h + .dbyt 0B005h + .dbyt 0B006h + .dbyt 0B007h + .dbyt 0B008h + .dbyt 0B009h + .dbyt 0B00Ah + .dbyt 0B00Bh + .dbyt 0B00Ch + .dbyt 0B00Dh + .dbyt 0B00Eh + .dbyt 0B00Fh + .dbyt 0BFE1h + .dbyt 0BFE2h + .dbyt 0BFE3h + .dbyt 0BFE4h + .dbyt 0BFE5h + .dbyt 0BFE6h + .dbyt 0BFE7h + .dbyt 0BFE8h + .dbyt 0BFE9h + .dbyt 0BFEAh + .dbyt 0BFEBh + .dbyt 0BFECh + .dbyt 0BFEDh + .dbyt 0BFEEh + .dbyt 0BFEFh + .dbyt 0BFF0h + .dbyt 0BFF1h + .dbyt 0BFF2h + .dbyt 0BFF3h + .dbyt 0BFF4h + .dbyt 0BFF5h + .dbyt 0BFF6h + .dbyt 0BFF7h + .dbyt 0BFF8h + .dbyt 0BFF9h + .dbyt 0BFFAh + .dbyt 0BFFBh + .dbyt 0BFFCh + .dbyt 0BFFDh + .dbyt 0BFFEh + .dbyt 0BFFFh + .dbyt 0C000h + .dbyt 0C001h + .dbyt 0C002h + .dbyt 0C003h + .dbyt 0C004h + .dbyt 0C005h + .dbyt 0C006h + .dbyt 0C007h + .dbyt 0C008h + .dbyt 0C009h + .dbyt 0C00Ah + .dbyt 0C00Bh + .dbyt 0C00Ch + .dbyt 0C00Dh + .dbyt 0C00Eh + .dbyt 0C00Fh + .dbyt 0CFE1h + .dbyt 0CFE2h + .dbyt 0CFE3h + .dbyt 0CFE4h + .dbyt 0CFE5h + .dbyt 0CFE6h + .dbyt 0CFE7h + .dbyt 0CFE8h + .dbyt 0CFE9h + .dbyt 0CFEAh + .dbyt 0CFEBh + .dbyt 0CFECh + .dbyt 0CFEDh + .dbyt 0CFEEh + .dbyt 0CFEFh + .dbyt 0CFF0h + .dbyt 0CFF1h + .dbyt 0CFF2h + .dbyt 0CFF3h + .dbyt 0CFF4h + .dbyt 0CFF5h + .dbyt 0CFF6h + .dbyt 0CFF7h + .dbyt 0CFF8h + .dbyt 0CFF9h + .dbyt 0CFFAh + .dbyt 0CFFBh + .dbyt 0CFFCh + .dbyt 0CFFDh + .dbyt 0CFFEh + .dbyt 0CFFFh + .dbyt 0D000h + .dbyt 0D001h + .dbyt 0D002h + .dbyt 0D003h + .dbyt 0D004h + .dbyt 0D005h + .dbyt 0D006h + .dbyt 0D007h + .dbyt 0D008h + .dbyt 0D009h + .dbyt 0D00Ah + .dbyt 0D00Bh + .dbyt 0D00Ch + .dbyt 0D00Dh + .dbyt 0D00Eh + .dbyt 0D00Fh + .dbyt 0DFE1h + .dbyt 0DFE2h + .dbyt 0DFE3h + .dbyt 0DFE4h + .dbyt 0DFE5h + .dbyt 0DFE6h + .dbyt 0DFE7h + .dbyt 0DFE8h + .dbyt 0DFE9h + .dbyt 0DFEAh + .dbyt 0DFEBh + .dbyt 0DFECh + .dbyt 0DFEDh + .dbyt 0DFEEh + .dbyt 0DFEFh + .dbyt 0DFF0h + .dbyt 0DFF1h + .dbyt 0DFF2h + .dbyt 0DFF3h + .dbyt 0DFF4h + .dbyt 0DFF5h + .dbyt 0DFF6h + .dbyt 0DFF7h + .dbyt 0DFF8h + .dbyt 0DFF9h + .dbyt 0DFFAh + .dbyt 0DFFBh + .dbyt 0DFFCh + .dbyt 0DFFDh + .dbyt 0DFFEh + .dbyt 0DFFFh + .dbyt 0E000h + .dbyt 0E001h + .dbyt 0E002h + .dbyt 0E003h + .dbyt 0E004h + .dbyt 0E005h + .dbyt 0E006h + .dbyt 0E007h + .dbyt 0E008h + .dbyt 0E009h + .dbyt 0E00Ah + .dbyt 0E00Bh + .dbyt 0E00Ch + .dbyt 0E00Dh + .dbyt 0E00Eh + .dbyt 0E00Fh + .dbyt 0EFE1h + .dbyt 0EFE2h + .dbyt 0EFE3h + .dbyt 0EFE4h + .dbyt 0EFE5h + .dbyt 0EFE6h + .dbyt 0EFE7h + .dbyt 0EFE8h + .dbyt 0EFE9h + .dbyt 0EFEAh + .dbyt 0EFEBh + .dbyt 0EFECh + .dbyt 0EFEDh + .dbyt 0EFEEh + .dbyt 0EFEFh + .dbyt 0EFF0h + .dbyt 0EFF1h + .dbyt 0EFF2h + .dbyt 0EFF3h + .dbyt 0EFF4h + .dbyt 0EFF5h + .dbyt 0EFF6h + .dbyt 0EFF7h + .dbyt 0EFF8h + .dbyt 0EFF9h + .dbyt 0EFFAh + .dbyt 0EFFBh + .dbyt 0EFFCh + .dbyt 0EFFDh + .dbyt 0EFFEh + .dbyt 0EFFFh + .dbyt 0F000h + .dbyt 0F001h + .dbyt 0F002h + .dbyt 0F003h + .dbyt 0F004h + .dbyt 0F005h + .dbyt 0F006h + .dbyt 0F007h + .dbyt 0F008h + .dbyt 0F009h + .dbyt 0F00Ah + .dbyt 0F00Bh + .dbyt 0F00Ch + .dbyt 0F00Dh + .dbyt 0F00Eh + .dbyt 0F00Fh + .dbyt 0FFE1h + .dbyt 0FFE2h + .dbyt 0FFE3h + .dbyt 0FFE4h + .dbyt 0FFE5h + .dbyt 0FFE6h + .dbyt 0FFE7h + .dbyt 0FFE8h + .dbyt 0FFE9h + .dbyt 0FFEAh + .dbyt 0FFEBh + .dbyt 0FFECh + .dbyt 0FFEDh + .dbyt 0FFEEh + .dbyt 0FFEFh + .dbyt 0FFF0h + .dbyt 0FFF1h + .dbyt 0FFF2h + .dbyt 0FFF3h + .dbyt 0FFF4h + .dbyt 0FFF5h + .dbyt 0FFF6h + .dbyt 0FFF7h + .dbyt 0FFF8h + .dbyt 0FFF9h + .dbyt 0FFFAh + .dbyt 0FFFBh + .dbyt 0FFFCh + .dbyt 0FFFDh + .dbyt 0FFFEh + .dbyt 0FFFFh + + ; alternative hex values, always leading zero + .dbyt 00h + .dbyt 01h + .dbyt 02h + .dbyt 03h + .dbyt 04h + .dbyt 05h + .dbyt 06h + .dbyt 07h + .dbyt 08h + .dbyt 09h + .dbyt 0ah + .dbyt 0bh + .dbyt 0ch + .dbyt 0dh + .dbyt 0eh + .dbyt 0fh + .dbyt 010h + .dbyt 011h + .dbyt 012h + .dbyt 013h + .dbyt 070h + .dbyt 071h + .dbyt 072h + .dbyt 073h + .dbyt 074h + .dbyt 075h + .dbyt 076h + .dbyt 077h + .dbyt 078h + .dbyt 079h + .dbyt 07ah + .dbyt 07bh + .dbyt 07ch + .dbyt 07dh + .dbyt 07eh + .dbyt 07fh + .dbyt 080h + .dbyt 081h + .dbyt 082h + .dbyt 083h + .dbyt 084h + .dbyt 085h + .dbyt 086h + .dbyt 0f0h + .dbyt 0f1h + .dbyt 0f2h + .dbyt 0f3h + .dbyt 0f4h + .dbyt 0f5h + .dbyt 0f6h + .dbyt 0f7h + .dbyt 0f8h + .dbyt 0f9h + .dbyt 0fah + .dbyt 0fbh + .dbyt 0fch + .dbyt 0fdh + .dbyt 0feh + .dbyt 0ffh + .dbyt 0100h + .dbyt 0101h + .dbyt 0102h + .dbyt 0103h + .dbyt 0fd2h + .dbyt 0fd3h + .dbyt 0fd4h + .dbyt 0fd5h + .dbyt 0fd6h + .dbyt 0fd7h + .dbyt 0fd8h + .dbyt 0fd9h + .dbyt 0fdah + .dbyt 0fdbh + .dbyt 0fdch + .dbyt 0fddh + .dbyt 0fdeh + .dbyt 0fdfh + .dbyt 0fe0h + .dbyt 0fe1h + .dbyt 0fe2h + .dbyt 0fe3h + .dbyt 0fe4h + .dbyt 0fe5h + .dbyt 0fe6h + .dbyt 0fe7h + .dbyt 0fe8h + .dbyt 0fe9h + .dbyt 0feah + .dbyt 0febh + .dbyt 0fech + .dbyt 0fedh + .dbyt 0feeh + .dbyt 0fefh + .dbyt 0ff0h + .dbyt 0ff1h + .dbyt 0ff2h + .dbyt 0ff3h + .dbyt 0ff4h + .dbyt 0ff5h + .dbyt 0ff6h + .dbyt 0ff7h + .dbyt 0ff8h + .dbyt 0ff9h + .dbyt 0ffah + .dbyt 0ffbh + .dbyt 0ffch + .dbyt 0ffdh + .dbyt 0ffeh + .dbyt 0fffh + .dbyt 01000h + .dbyt 01001h + .dbyt 01002h + .dbyt 01003h + .dbyt 01004h + .dbyt 01005h + .dbyt 01006h + .dbyt 01007h + .dbyt 01008h + .dbyt 07ff0h + .dbyt 07ff1h + .dbyt 07ff2h + .dbyt 07ff3h + .dbyt 07ff4h + .dbyt 07ff5h + .dbyt 07ff6h + .dbyt 07ff7h + .dbyt 07ff8h + .dbyt 07ff9h + .dbyt 07ffah + .dbyt 07ffbh + .dbyt 07ffch + .dbyt 07ffdh + .dbyt 07ffeh + .dbyt 07fffh + .dbyt 08000h + .dbyt 08001h + .dbyt 08002h + .dbyt 08003h + .dbyt 08004h + .dbyt 08005h + .dbyt 08006h + .dbyt 08007h + .dbyt 08008h + .dbyt 08009h + .dbyt 0800ah + .dbyt 0800bh + .dbyt 09fe1h + .dbyt 09fe2h + .dbyt 09fe3h + .dbyt 09fe4h + .dbyt 09fe5h + .dbyt 09fe6h + .dbyt 09fe7h + .dbyt 09fe8h + .dbyt 09fe9h + .dbyt 09feah + .dbyt 09febh + .dbyt 09fech + .dbyt 09fedh + .dbyt 09feeh + .dbyt 09fefh + .dbyt 09ff0h + .dbyt 09ff1h + .dbyt 09ff2h + .dbyt 09ff3h + .dbyt 09ff4h + .dbyt 09ff5h + .dbyt 09ff6h + .dbyt 09ff7h + .dbyt 09ff8h + .dbyt 09ff9h + .dbyt 09ffah + .dbyt 09ffbh + .dbyt 09ffch + .dbyt 09ffdh + .dbyt 09ffeh + .dbyt 09fffh + .dbyt 0a000h + .dbyt 0a001h + .dbyt 0a002h + .dbyt 0a003h + .dbyt 0a004h + .dbyt 0a005h + .dbyt 0a006h + .dbyt 0a007h + .dbyt 0a008h + .dbyt 0a009h + .dbyt 0a00ah + .dbyt 0a00bh + .dbyt 0a00ch + .dbyt 0a00dh + .dbyt 0a00eh + .dbyt 0a00fh + .dbyt 0afe1h + .dbyt 0afe2h + .dbyt 0afe3h + .dbyt 0afe4h + .dbyt 0afe5h + .dbyt 0afe6h + .dbyt 0afe7h + .dbyt 0afe8h + .dbyt 0afe9h + .dbyt 0afeah + .dbyt 0afebh + .dbyt 0afech + .dbyt 0afedh + .dbyt 0afeeh + .dbyt 0afefh + .dbyt 0aff0h + .dbyt 0aff1h + .dbyt 0aff2h + .dbyt 0aff3h + .dbyt 0aff4h + .dbyt 0aff5h + .dbyt 0aff6h + .dbyt 0aff7h + .dbyt 0aff8h + .dbyt 0aff9h + .dbyt 0affah + .dbyt 0affbh + .dbyt 0affch + .dbyt 0affdh + .dbyt 0affeh + .dbyt 0afffh + .dbyt 0b000h + .dbyt 0b001h + .dbyt 0b002h + .dbyt 0b003h + .dbyt 0b004h + .dbyt 0b005h + .dbyt 0b006h + .dbyt 0b007h + .dbyt 0b008h + .dbyt 0b009h + .dbyt 0b00ah + .dbyt 0b00bh + .dbyt 0b00ch + .dbyt 0b00dh + .dbyt 0b00eh + .dbyt 0b00fh + .dbyt 0bfe1h + .dbyt 0bfe2h + .dbyt 0bfe3h + .dbyt 0bfe4h + .dbyt 0bfe5h + .dbyt 0bfe6h + .dbyt 0bfe7h + .dbyt 0bfe8h + .dbyt 0bfe9h + .dbyt 0bfeah + .dbyt 0bfebh + .dbyt 0bfech + .dbyt 0bfedh + .dbyt 0bfeeh + .dbyt 0bfefh + .dbyt 0bff0h + .dbyt 0bff1h + .dbyt 0bff2h + .dbyt 0bff3h + .dbyt 0bff4h + .dbyt 0bff5h + .dbyt 0bff6h + .dbyt 0bff7h + .dbyt 0bff8h + .dbyt 0bff9h + .dbyt 0bffah + .dbyt 0bffbh + .dbyt 0bffch + .dbyt 0bffdh + .dbyt 0bffeh + .dbyt 0bfffh + .dbyt 0c000h + .dbyt 0c001h + .dbyt 0c002h + .dbyt 0c003h + .dbyt 0c004h + .dbyt 0c005h + .dbyt 0c006h + .dbyt 0c007h + .dbyt 0c008h + .dbyt 0c009h + .dbyt 0c00ah + .dbyt 0c00bh + .dbyt 0c00ch + .dbyt 0c00dh + .dbyt 0c00eh + .dbyt 0c00fh + .dbyt 0cfe1h + .dbyt 0cfe2h + .dbyt 0cfe3h + .dbyt 0cfe4h + .dbyt 0cfe5h + .dbyt 0cfe6h + .dbyt 0cfe7h + .dbyt 0cfe8h + .dbyt 0cfe9h + .dbyt 0cfeah + .dbyt 0cfebh + .dbyt 0cfech + .dbyt 0cfedh + .dbyt 0cfeeh + .dbyt 0cfefh + .dbyt 0cff0h + .dbyt 0cff1h + .dbyt 0cff2h + .dbyt 0cff3h + .dbyt 0cff4h + .dbyt 0cff5h + .dbyt 0cff6h + .dbyt 0cff7h + .dbyt 0cff8h + .dbyt 0cff9h + .dbyt 0cffah + .dbyt 0cffbh + .dbyt 0cffch + .dbyt 0cffdh + .dbyt 0cffeh + .dbyt 0cfffh + .dbyt 0d000h + .dbyt 0d001h + .dbyt 0d002h + .dbyt 0d003h + .dbyt 0d004h + .dbyt 0d005h + .dbyt 0d006h + .dbyt 0d007h + .dbyt 0d008h + .dbyt 0d009h + .dbyt 0d00ah + .dbyt 0d00bh + .dbyt 0d00ch + .dbyt 0d00dh + .dbyt 0d00eh + .dbyt 0d00fh + .dbyt 0dfe1h + .dbyt 0dfe2h + .dbyt 0dfe3h + .dbyt 0dfe4h + .dbyt 0dfe5h + .dbyt 0dfe6h + .dbyt 0dfe7h + .dbyt 0dfe8h + .dbyt 0dfe9h + .dbyt 0dfeah + .dbyt 0dfebh + .dbyt 0dfech + .dbyt 0dfedh + .dbyt 0dfeeh + .dbyt 0dfefh + .dbyt 0dff0h + .dbyt 0dff1h + .dbyt 0dff2h + .dbyt 0dff3h + .dbyt 0dff4h + .dbyt 0dff5h + .dbyt 0dff6h + .dbyt 0dff7h + .dbyt 0dff8h + .dbyt 0dff9h + .dbyt 0dffah + .dbyt 0dffbh + .dbyt 0dffch + .dbyt 0dffdh + .dbyt 0dffeh + .dbyt 0dfffh + .dbyt 0e000h + .dbyt 0e001h + .dbyt 0e002h + .dbyt 0e003h + .dbyt 0e004h + .dbyt 0e005h + .dbyt 0e006h + .dbyt 0e007h + .dbyt 0e008h + .dbyt 0e009h + .dbyt 0e00ah + .dbyt 0e00bh + .dbyt 0e00ch + .dbyt 0e00dh + .dbyt 0e00eh + .dbyt 0e00fh + .dbyt 0efe1h + .dbyt 0efe2h + .dbyt 0efe3h + .dbyt 0efe4h + .dbyt 0efe5h + .dbyt 0efe6h + .dbyt 0efe7h + .dbyt 0efe8h + .dbyt 0efe9h + .dbyt 0efeah + .dbyt 0efebh + .dbyt 0efech + .dbyt 0efedh + .dbyt 0efeeh + .dbyt 0efefh + .dbyt 0eff0h + .dbyt 0eff1h + .dbyt 0eff2h + .dbyt 0eff3h + .dbyt 0eff4h + .dbyt 0eff5h + .dbyt 0eff6h + .dbyt 0eff7h + .dbyt 0eff8h + .dbyt 0eff9h + .dbyt 0effah + .dbyt 0effbh + .dbyt 0effch + .dbyt 0effdh + .dbyt 0effeh + .dbyt 0efffh + .dbyt 0f000h + .dbyt 0f001h + .dbyt 0f002h + .dbyt 0f003h + .dbyt 0f004h + .dbyt 0f005h + .dbyt 0f006h + .dbyt 0f007h + .dbyt 0f008h + .dbyt 0f009h + .dbyt 0f00ah + .dbyt 0f00bh + .dbyt 0f00ch + .dbyt 0f00dh + .dbyt 0f00eh + .dbyt 0f00fh + .dbyt 0ffe1h + .dbyt 0ffe2h + .dbyt 0ffe3h + .dbyt 0ffe4h + .dbyt 0ffe5h + .dbyt 0ffe6h + .dbyt 0ffe7h + .dbyt 0ffe8h + .dbyt 0ffe9h + .dbyt 0ffeah + .dbyt 0ffebh + .dbyt 0ffech + .dbyt 0ffedh + .dbyt 0ffeeh + .dbyt 0ffefh + .dbyt 0fff0h + .dbyt 0fff1h + .dbyt 0fff2h + .dbyt 0fff3h + .dbyt 0fff4h + .dbyt 0fff5h + .dbyt 0fff6h + .dbyt 0fff7h + .dbyt 0fff8h + .dbyt 0fff9h + .dbyt 0fffah + .dbyt 0fffbh + .dbyt 0fffch + .dbyt 0fffdh + .dbyt 0fffeh + .dbyt 0ffffh + + ; binary values, variable length + .dbyt %0 + .dbyt %01 + .dbyt %010 + .dbyt %011 + .dbyt %0100 + .dbyt %0101 + .dbyt %0110 + .dbyt %0111 + .dbyt %01000 + .dbyt %01001 + .dbyt %01010 + .dbyt %01011 + .dbyt %01100 + .dbyt %01101 + .dbyt %01110 + .dbyt %01111 + .dbyt %010000 + .dbyt %010001 + .dbyt %010010 + .dbyt %010011 + .dbyt %01110000 + .dbyt %01110001 + .dbyt %01110010 + .dbyt %01110011 + .dbyt %01110100 + .dbyt %01110101 + .dbyt %01110110 + .dbyt %01110111 + .dbyt %01111000 + .dbyt %01111001 + .dbyt %01111010 + .dbyt %01111011 + .dbyt %01111100 + .dbyt %01111101 + .dbyt %01111110 + .dbyt %01111111 + .dbyt %010000000 + .dbyt %010000001 + .dbyt %010000010 + .dbyt %010000011 + .dbyt %010000100 + .dbyt %010000101 + .dbyt %010000110 + .dbyt %011110000 + .dbyt %011110001 + .dbyt %011110010 + .dbyt %011110011 + .dbyt %011110100 + .dbyt %011110101 + .dbyt %011110110 + .dbyt %011110111 + .dbyt %011111000 + .dbyt %011111001 + .dbyt %011111010 + .dbyt %011111011 + .dbyt %011111100 + .dbyt %011111101 + .dbyt %011111110 + .dbyt %011111111 + .dbyt %100000000 + .dbyt %100000001 + .dbyt %100000010 + .dbyt %100000011 + .dbyt %111111010010 + .dbyt %111111010011 + .dbyt %111111010100 + .dbyt %111111010101 + .dbyt %111111010110 + .dbyt %111111010111 + .dbyt %111111011000 + .dbyt %111111011001 + .dbyt %111111011010 + .dbyt %111111011011 + .dbyt %111111011100 + .dbyt %111111011101 + .dbyt %111111011110 + .dbyt %111111011111 + .dbyt %111111100000 + .dbyt %111111100001 + .dbyt %111111100010 + .dbyt %111111100011 + .dbyt %111111100100 + .dbyt %111111100101 + .dbyt %111111100110 + .dbyt %111111100111 + .dbyt %111111101000 + .dbyt %111111101001 + .dbyt %111111101010 + .dbyt %111111101011 + .dbyt %111111101100 + .dbyt %111111101101 + .dbyt %111111101110 + .dbyt %111111101111 + .dbyt %111111110000 + .dbyt %111111110001 + .dbyt %111111110010 + .dbyt %111111110011 + .dbyt %111111110100 + .dbyt %111111110101 + .dbyt %111111110110 + .dbyt %111111110111 + .dbyt %111111111000 + .dbyt %111111111001 + .dbyt %111111111010 + .dbyt %111111111011 + .dbyt %111111111100 + .dbyt %111111111101 + .dbyt %111111111110 + .dbyt %111111111111 + .dbyt %1000000000000 + .dbyt %1000000000001 + .dbyt %1000000000010 + .dbyt %1000000000011 + .dbyt %1000000000100 + .dbyt %1000000000101 + .dbyt %1000000000110 + .dbyt %1000000000111 + .dbyt %1000000001000 + .dbyt %111111111110000 + .dbyt %111111111110001 + .dbyt %111111111110010 + .dbyt %111111111110011 + .dbyt %111111111110100 + .dbyt %111111111110101 + .dbyt %111111111110110 + .dbyt %111111111110111 + .dbyt %111111111111000 + .dbyt %111111111111001 + .dbyt %111111111111010 + .dbyt %111111111111011 + .dbyt %111111111111100 + .dbyt %111111111111101 + .dbyt %111111111111110 + .dbyt %111111111111111 + .dbyt %1000000000000000 + .dbyt %1000000000000001 + .dbyt %1000000000000010 + .dbyt %1000000000000011 + .dbyt %1000000000000100 + .dbyt %1000000000000101 + .dbyt %1000000000000110 + .dbyt %1000000000000111 + .dbyt %1000000000001000 + .dbyt %1000000000001001 + .dbyt %1000000000001010 + .dbyt %1000000000001011 + .dbyt %1001111111100001 + .dbyt %1001111111100010 + .dbyt %1001111111100011 + .dbyt %1001111111100100 + .dbyt %1001111111100101 + .dbyt %1001111111100110 + .dbyt %1001111111100111 + .dbyt %1001111111101000 + .dbyt %1001111111101001 + .dbyt %1001111111101010 + .dbyt %1001111111101011 + .dbyt %1001111111101100 + .dbyt %1001111111101101 + .dbyt %1001111111101110 + .dbyt %1001111111101111 + .dbyt %1001111111110000 + .dbyt %1001111111110001 + .dbyt %1001111111110010 + .dbyt %1001111111110011 + .dbyt %1001111111110100 + .dbyt %1001111111110101 + .dbyt %1001111111110110 + .dbyt %1001111111110111 + .dbyt %1001111111111000 + .dbyt %1001111111111001 + .dbyt %1001111111111010 + .dbyt %1001111111111011 + .dbyt %1001111111111100 + .dbyt %1001111111111101 + .dbyt %1001111111111110 + .dbyt %1001111111111111 + .dbyt %1010000000000000 + .dbyt %1010000000000001 + .dbyt %1010000000000010 + .dbyt %1010000000000011 + .dbyt %1010000000000100 + .dbyt %1010000000000101 + .dbyt %1010000000000110 + .dbyt %1010000000000111 + .dbyt %1010000000001000 + .dbyt %1010000000001001 + .dbyt %1010000000001010 + .dbyt %1010000000001011 + .dbyt %1010000000001100 + .dbyt %1010000000001101 + .dbyt %1010000000001110 + .dbyt %1010000000001111 + .dbyt %1010111111100001 + .dbyt %1010111111100010 + .dbyt %1010111111100011 + .dbyt %1010111111100100 + .dbyt %1010111111100101 + .dbyt %1010111111100110 + .dbyt %1010111111100111 + .dbyt %1010111111101000 + .dbyt %1010111111101001 + .dbyt %1010111111101010 + .dbyt %1010111111101011 + .dbyt %1010111111101100 + .dbyt %1010111111101101 + .dbyt %1010111111101110 + .dbyt %1010111111101111 + .dbyt %1010111111110000 + .dbyt %1010111111110001 + .dbyt %1010111111110010 + .dbyt %1010111111110011 + .dbyt %1010111111110100 + .dbyt %1010111111110101 + .dbyt %1010111111110110 + .dbyt %1010111111110111 + .dbyt %1010111111111000 + .dbyt %1010111111111001 + .dbyt %1010111111111010 + .dbyt %1010111111111011 + .dbyt %1010111111111100 + .dbyt %1010111111111101 + .dbyt %1010111111111110 + .dbyt %1010111111111111 + .dbyt %1011000000000000 + .dbyt %1011000000000001 + .dbyt %1011000000000010 + .dbyt %1011000000000011 + .dbyt %1011000000000100 + .dbyt %1011000000000101 + .dbyt %1011000000000110 + .dbyt %1011000000000111 + .dbyt %1011000000001000 + .dbyt %1011000000001001 + .dbyt %1011000000001010 + .dbyt %1011000000001011 + .dbyt %1011000000001100 + .dbyt %1011000000001101 + .dbyt %1011000000001110 + .dbyt %1011000000001111 + .dbyt %1011111111100001 + .dbyt %1011111111100010 + .dbyt %1011111111100011 + .dbyt %1011111111100100 + .dbyt %1011111111100101 + .dbyt %1011111111100110 + .dbyt %1011111111100111 + .dbyt %1011111111101000 + .dbyt %1011111111101001 + .dbyt %1011111111101010 + .dbyt %1011111111101011 + .dbyt %1011111111101100 + .dbyt %1011111111101101 + .dbyt %1011111111101110 + .dbyt %1011111111101111 + .dbyt %1011111111110000 + .dbyt %1011111111110001 + .dbyt %1011111111110010 + .dbyt %1011111111110011 + .dbyt %1011111111110100 + .dbyt %1011111111110101 + .dbyt %1011111111110110 + .dbyt %1011111111110111 + .dbyt %1011111111111000 + .dbyt %1011111111111001 + .dbyt %1011111111111010 + .dbyt %1011111111111011 + .dbyt %1011111111111100 + .dbyt %1011111111111101 + .dbyt %1011111111111110 + .dbyt %1011111111111111 + .dbyt %1100000000000000 + .dbyt %1100000000000001 + .dbyt %1100000000000010 + .dbyt %1100000000000011 + .dbyt %1100000000000100 + .dbyt %1100000000000101 + .dbyt %1100000000000110 + .dbyt %1100000000000111 + .dbyt %1100000000001000 + .dbyt %1100000000001001 + .dbyt %1100000000001010 + .dbyt %1100000000001011 + .dbyt %1100000000001100 + .dbyt %1100000000001101 + .dbyt %1100000000001110 + .dbyt %1100000000001111 + .dbyt %1100111111100001 + .dbyt %1100111111100010 + .dbyt %1100111111100011 + .dbyt %1100111111100100 + .dbyt %1100111111100101 + .dbyt %1100111111100110 + .dbyt %1100111111100111 + .dbyt %1100111111101000 + .dbyt %1100111111101001 + .dbyt %1100111111101010 + .dbyt %1100111111101011 + .dbyt %1100111111101100 + .dbyt %1100111111101101 + .dbyt %1100111111101110 + .dbyt %1100111111101111 + .dbyt %1100111111110000 + .dbyt %1100111111110001 + .dbyt %1100111111110010 + .dbyt %1100111111110011 + .dbyt %1100111111110100 + .dbyt %1100111111110101 + .dbyt %1100111111110110 + .dbyt %1100111111110111 + .dbyt %1100111111111000 + .dbyt %1100111111111001 + .dbyt %1100111111111010 + .dbyt %1100111111111011 + .dbyt %1100111111111100 + .dbyt %1100111111111101 + .dbyt %1100111111111110 + .dbyt %1100111111111111 + .dbyt %1101000000000000 + .dbyt %1101000000000001 + .dbyt %1101000000000010 + .dbyt %1101000000000011 + .dbyt %1101000000000100 + .dbyt %1101000000000101 + .dbyt %1101000000000110 + .dbyt %1101000000000111 + .dbyt %1101000000001000 + .dbyt %1101000000001001 + .dbyt %1101000000001010 + .dbyt %1101000000001011 + .dbyt %1101000000001100 + .dbyt %1101000000001101 + .dbyt %1101000000001110 + .dbyt %1101000000001111 + .dbyt %1101111111100001 + .dbyt %1101111111100010 + .dbyt %1101111111100011 + .dbyt %1101111111100100 + .dbyt %1101111111100101 + .dbyt %1101111111100110 + .dbyt %1101111111100111 + .dbyt %1101111111101000 + .dbyt %1101111111101001 + .dbyt %1101111111101010 + .dbyt %1101111111101011 + .dbyt %1101111111101100 + .dbyt %1101111111101101 + .dbyt %1101111111101110 + .dbyt %1101111111101111 + .dbyt %1101111111110000 + .dbyt %1101111111110001 + .dbyt %1101111111110010 + .dbyt %1101111111110011 + .dbyt %1101111111110100 + .dbyt %1101111111110101 + .dbyt %1101111111110110 + .dbyt %1101111111110111 + .dbyt %1101111111111000 + .dbyt %1101111111111001 + .dbyt %1101111111111010 + .dbyt %1101111111111011 + .dbyt %1101111111111100 + .dbyt %1101111111111101 + .dbyt %1101111111111110 + .dbyt %1101111111111111 + .dbyt %1110000000000000 + .dbyt %1110000000000001 + .dbyt %1110000000000010 + .dbyt %1110000000000011 + .dbyt %1110000000000100 + .dbyt %1110000000000101 + .dbyt %1110000000000110 + .dbyt %1110000000000111 + .dbyt %1110000000001000 + .dbyt %1110000000001001 + .dbyt %1110000000001010 + .dbyt %1110000000001011 + .dbyt %1110000000001100 + .dbyt %1110000000001101 + .dbyt %1110000000001110 + .dbyt %1110000000001111 + .dbyt %1110111111100001 + .dbyt %1110111111100010 + .dbyt %1110111111100011 + .dbyt %1110111111100100 + .dbyt %1110111111100101 + .dbyt %1110111111100110 + .dbyt %1110111111100111 + .dbyt %1110111111101000 + .dbyt %1110111111101001 + .dbyt %1110111111101010 + .dbyt %1110111111101011 + .dbyt %1110111111101100 + .dbyt %1110111111101101 + .dbyt %1110111111101110 + .dbyt %1110111111101111 + .dbyt %1110111111110000 + .dbyt %1110111111110001 + .dbyt %1110111111110010 + .dbyt %1110111111110011 + .dbyt %1110111111110100 + .dbyt %1110111111110101 + .dbyt %1110111111110110 + .dbyt %1110111111110111 + .dbyt %1110111111111000 + .dbyt %1110111111111001 + .dbyt %1110111111111010 + .dbyt %1110111111111011 + .dbyt %1110111111111100 + .dbyt %1110111111111101 + .dbyt %1110111111111110 + .dbyt %1110111111111111 + .dbyt %1111000000000000 + .dbyt %1111000000000001 + .dbyt %1111000000000010 + .dbyt %1111000000000011 + .dbyt %1111000000000100 + .dbyt %1111000000000101 + .dbyt %1111000000000110 + .dbyt %1111000000000111 + .dbyt %1111000000001000 + .dbyt %1111000000001001 + .dbyt %1111000000001010 + .dbyt %1111000000001011 + .dbyt %1111000000001100 + .dbyt %1111000000001101 + .dbyt %1111000000001110 + .dbyt %1111000000001111 + .dbyt %1111111111100001 + .dbyt %1111111111100010 + .dbyt %1111111111100011 + .dbyt %1111111111100100 + .dbyt %1111111111100101 + .dbyt %1111111111100110 + .dbyt %1111111111100111 + .dbyt %1111111111101000 + .dbyt %1111111111101001 + .dbyt %1111111111101010 + .dbyt %1111111111101011 + .dbyt %1111111111101100 + .dbyt %1111111111101101 + .dbyt %1111111111101110 + .dbyt %1111111111101111 + .dbyt %1111111111110000 + .dbyt %1111111111110001 + .dbyt %1111111111110010 + .dbyt %1111111111110011 + .dbyt %1111111111110100 + .dbyt %1111111111110101 + .dbyt %1111111111110110 + .dbyt %1111111111110111 + .dbyt %1111111111111000 + .dbyt %1111111111111001 + .dbyt %1111111111111010 + .dbyt %1111111111111011 + .dbyt %1111111111111100 + .dbyt %1111111111111101 + .dbyt %1111111111111110 + .dbyt %1111111111111111 + + ; binary values, full length + .dbyt %0000000000000000 + .dbyt %0000000000000001 + .dbyt %0000000000000010 + .dbyt %0000000000000011 + .dbyt %0000000000000100 + .dbyt %0000000000000101 + .dbyt %0000000000000110 + .dbyt %0000000000000111 + .dbyt %0000000000001000 + .dbyt %0000000000001001 + .dbyt %0000000000001010 + .dbyt %0000000000001011 + .dbyt %0000000000001100 + .dbyt %0000000000001101 + .dbyt %0000000000001110 + .dbyt %0000000000001111 + .dbyt %0000000000010000 + .dbyt %0000000000010001 + .dbyt %0000000000010010 + .dbyt %0000000000010011 + .dbyt %0000000001110000 + .dbyt %0000000001110001 + .dbyt %0000000001110010 + .dbyt %0000000001110011 + .dbyt %0000000001110100 + .dbyt %0000000001110101 + .dbyt %0000000001110110 + .dbyt %0000000001110111 + .dbyt %0000000001111000 + .dbyt %0000000001111001 + .dbyt %0000000001111010 + .dbyt %0000000001111011 + .dbyt %0000000001111100 + .dbyt %0000000001111101 + .dbyt %0000000001111110 + .dbyt %0000000001111111 + .dbyt %0000000010000000 + .dbyt %0000000010000001 + .dbyt %0000000010000010 + .dbyt %0000000010000011 + .dbyt %0000000010000100 + .dbyt %0000000010000101 + .dbyt %0000000010000110 + .dbyt %0000000011110000 + .dbyt %0000000011110001 + .dbyt %0000000011110010 + .dbyt %0000000011110011 + .dbyt %0000000011110100 + .dbyt %0000000011110101 + .dbyt %0000000011110110 + .dbyt %0000000011110111 + .dbyt %0000000011111000 + .dbyt %0000000011111001 + .dbyt %0000000011111010 + .dbyt %0000000011111011 + .dbyt %0000000011111100 + .dbyt %0000000011111101 + .dbyt %0000000011111110 + .dbyt %0000000011111111 + .dbyt %0000000100000000 + .dbyt %0000000100000001 + .dbyt %0000000100000010 + .dbyt %0000000100000011 + .dbyt %0000111111010010 + .dbyt %0000111111010011 + .dbyt %0000111111010100 + .dbyt %0000111111010101 + .dbyt %0000111111010110 + .dbyt %0000111111010111 + .dbyt %0000111111011000 + .dbyt %0000111111011001 + .dbyt %0000111111011010 + .dbyt %0000111111011011 + .dbyt %0000111111011100 + .dbyt %0000111111011101 + .dbyt %0000111111011110 + .dbyt %0000111111011111 + .dbyt %0000111111100000 + .dbyt %0000111111100001 + .dbyt %0000111111100010 + .dbyt %0000111111100011 + .dbyt %0000111111100100 + .dbyt %0000111111100101 + .dbyt %0000111111100110 + .dbyt %0000111111100111 + .dbyt %0000111111101000 + .dbyt %0000111111101001 + .dbyt %0000111111101010 + .dbyt %0000111111101011 + .dbyt %0000111111101100 + .dbyt %0000111111101101 + .dbyt %0000111111101110 + .dbyt %0000111111101111 + .dbyt %0000111111110000 + .dbyt %0000111111110001 + .dbyt %0000111111110010 + .dbyt %0000111111110011 + .dbyt %0000111111110100 + .dbyt %0000111111110101 + .dbyt %0000111111110110 + .dbyt %0000111111110111 + .dbyt %0000111111111000 + .dbyt %0000111111111001 + .dbyt %0000111111111010 + .dbyt %0000111111111011 + .dbyt %0000111111111100 + .dbyt %0000111111111101 + .dbyt %0000111111111110 + .dbyt %0000111111111111 + .dbyt %0001000000000000 + .dbyt %0001000000000001 + .dbyt %0001000000000010 + .dbyt %0001000000000011 + .dbyt %0001000000000100 + .dbyt %0001000000000101 + .dbyt %0001000000000110 + .dbyt %0001000000000111 + .dbyt %0001000000001000 + .dbyt %0111111111110000 + .dbyt %0111111111110001 + .dbyt %0111111111110010 + .dbyt %0111111111110011 + .dbyt %0111111111110100 + .dbyt %0111111111110101 + .dbyt %0111111111110110 + .dbyt %0111111111110111 + .dbyt %0111111111111000 + .dbyt %0111111111111001 + .dbyt %0111111111111010 + .dbyt %0111111111111011 + .dbyt %0111111111111100 + .dbyt %0111111111111101 + .dbyt %0111111111111110 + .dbyt %0111111111111111 + .dbyt %1000000000000000 + .dbyt %1000000000000001 + .dbyt %1000000000000010 + .dbyt %1000000000000011 + .dbyt %1000000000000100 + .dbyt %1000000000000101 + .dbyt %1000000000000110 + .dbyt %1000000000000111 + .dbyt %1000000000001000 + .dbyt %1000000000001001 + .dbyt %1000000000001010 + .dbyt %1000000000001011 + .dbyt %1001111111100001 + .dbyt %1001111111100010 + .dbyt %1001111111100011 + .dbyt %1001111111100100 + .dbyt %1001111111100101 + .dbyt %1001111111100110 + .dbyt %1001111111100111 + .dbyt %1001111111101000 + .dbyt %1001111111101001 + .dbyt %1001111111101010 + .dbyt %1001111111101011 + .dbyt %1001111111101100 + .dbyt %1001111111101101 + .dbyt %1001111111101110 + .dbyt %1001111111101111 + .dbyt %1001111111110000 + .dbyt %1001111111110001 + .dbyt %1001111111110010 + .dbyt %1001111111110011 + .dbyt %1001111111110100 + .dbyt %1001111111110101 + .dbyt %1001111111110110 + .dbyt %1001111111110111 + .dbyt %1001111111111000 + .dbyt %1001111111111001 + .dbyt %1001111111111010 + .dbyt %1001111111111011 + .dbyt %1001111111111100 + .dbyt %1001111111111101 + .dbyt %1001111111111110 + .dbyt %1001111111111111 + .dbyt %1010000000000000 + .dbyt %1010000000000001 + .dbyt %1010000000000010 + .dbyt %1010000000000011 + .dbyt %1010000000000100 + .dbyt %1010000000000101 + .dbyt %1010000000000110 + .dbyt %1010000000000111 + .dbyt %1010000000001000 + .dbyt %1010000000001001 + .dbyt %1010000000001010 + .dbyt %1010000000001011 + .dbyt %1010000000001100 + .dbyt %1010000000001101 + .dbyt %1010000000001110 + .dbyt %1010000000001111 + .dbyt %1010111111100001 + .dbyt %1010111111100010 + .dbyt %1010111111100011 + .dbyt %1010111111100100 + .dbyt %1010111111100101 + .dbyt %1010111111100110 + .dbyt %1010111111100111 + .dbyt %1010111111101000 + .dbyt %1010111111101001 + .dbyt %1010111111101010 + .dbyt %1010111111101011 + .dbyt %1010111111101100 + .dbyt %1010111111101101 + .dbyt %1010111111101110 + .dbyt %1010111111101111 + .dbyt %1010111111110000 + .dbyt %1010111111110001 + .dbyt %1010111111110010 + .dbyt %1010111111110011 + .dbyt %1010111111110100 + .dbyt %1010111111110101 + .dbyt %1010111111110110 + .dbyt %1010111111110111 + .dbyt %1010111111111000 + .dbyt %1010111111111001 + .dbyt %1010111111111010 + .dbyt %1010111111111011 + .dbyt %1010111111111100 + .dbyt %1010111111111101 + .dbyt %1010111111111110 + .dbyt %1010111111111111 + .dbyt %1011000000000000 + .dbyt %1011000000000001 + .dbyt %1011000000000010 + .dbyt %1011000000000011 + .dbyt %1011000000000100 + .dbyt %1011000000000101 + .dbyt %1011000000000110 + .dbyt %1011000000000111 + .dbyt %1011000000001000 + .dbyt %1011000000001001 + .dbyt %1011000000001010 + .dbyt %1011000000001011 + .dbyt %1011000000001100 + .dbyt %1011000000001101 + .dbyt %1011000000001110 + .dbyt %1011000000001111 + .dbyt %1011111111100001 + .dbyt %1011111111100010 + .dbyt %1011111111100011 + .dbyt %1011111111100100 + .dbyt %1011111111100101 + .dbyt %1011111111100110 + .dbyt %1011111111100111 + .dbyt %1011111111101000 + .dbyt %1011111111101001 + .dbyt %1011111111101010 + .dbyt %1011111111101011 + .dbyt %1011111111101100 + .dbyt %1011111111101101 + .dbyt %1011111111101110 + .dbyt %1011111111101111 + .dbyt %1011111111110000 + .dbyt %1011111111110001 + .dbyt %1011111111110010 + .dbyt %1011111111110011 + .dbyt %1011111111110100 + .dbyt %1011111111110101 + .dbyt %1011111111110110 + .dbyt %1011111111110111 + .dbyt %1011111111111000 + .dbyt %1011111111111001 + .dbyt %1011111111111010 + .dbyt %1011111111111011 + .dbyt %1011111111111100 + .dbyt %1011111111111101 + .dbyt %1011111111111110 + .dbyt %1011111111111111 + .dbyt %1100000000000000 + .dbyt %1100000000000001 + .dbyt %1100000000000010 + .dbyt %1100000000000011 + .dbyt %1100000000000100 + .dbyt %1100000000000101 + .dbyt %1100000000000110 + .dbyt %1100000000000111 + .dbyt %1100000000001000 + .dbyt %1100000000001001 + .dbyt %1100000000001010 + .dbyt %1100000000001011 + .dbyt %1100000000001100 + .dbyt %1100000000001101 + .dbyt %1100000000001110 + .dbyt %1100000000001111 + .dbyt %1100111111100001 + .dbyt %1100111111100010 + .dbyt %1100111111100011 + .dbyt %1100111111100100 + .dbyt %1100111111100101 + .dbyt %1100111111100110 + .dbyt %1100111111100111 + .dbyt %1100111111101000 + .dbyt %1100111111101001 + .dbyt %1100111111101010 + .dbyt %1100111111101011 + .dbyt %1100111111101100 + .dbyt %1100111111101101 + .dbyt %1100111111101110 + .dbyt %1100111111101111 + .dbyt %1100111111110000 + .dbyt %1100111111110001 + .dbyt %1100111111110010 + .dbyt %1100111111110011 + .dbyt %1100111111110100 + .dbyt %1100111111110101 + .dbyt %1100111111110110 + .dbyt %1100111111110111 + .dbyt %1100111111111000 + .dbyt %1100111111111001 + .dbyt %1100111111111010 + .dbyt %1100111111111011 + .dbyt %1100111111111100 + .dbyt %1100111111111101 + .dbyt %1100111111111110 + .dbyt %1100111111111111 + .dbyt %1101000000000000 + .dbyt %1101000000000001 + .dbyt %1101000000000010 + .dbyt %1101000000000011 + .dbyt %1101000000000100 + .dbyt %1101000000000101 + .dbyt %1101000000000110 + .dbyt %1101000000000111 + .dbyt %1101000000001000 + .dbyt %1101000000001001 + .dbyt %1101000000001010 + .dbyt %1101000000001011 + .dbyt %1101000000001100 + .dbyt %1101000000001101 + .dbyt %1101000000001110 + .dbyt %1101000000001111 + .dbyt %1101111111100001 + .dbyt %1101111111100010 + .dbyt %1101111111100011 + .dbyt %1101111111100100 + .dbyt %1101111111100101 + .dbyt %1101111111100110 + .dbyt %1101111111100111 + .dbyt %1101111111101000 + .dbyt %1101111111101001 + .dbyt %1101111111101010 + .dbyt %1101111111101011 + .dbyt %1101111111101100 + .dbyt %1101111111101101 + .dbyt %1101111111101110 + .dbyt %1101111111101111 + .dbyt %1101111111110000 + .dbyt %1101111111110001 + .dbyt %1101111111110010 + .dbyt %1101111111110011 + .dbyt %1101111111110100 + .dbyt %1101111111110101 + .dbyt %1101111111110110 + .dbyt %1101111111110111 + .dbyt %1101111111111000 + .dbyt %1101111111111001 + .dbyt %1101111111111010 + .dbyt %1101111111111011 + .dbyt %1101111111111100 + .dbyt %1101111111111101 + .dbyt %1101111111111110 + .dbyt %1101111111111111 + .dbyt %1110000000000000 + .dbyt %1110000000000001 + .dbyt %1110000000000010 + .dbyt %1110000000000011 + .dbyt %1110000000000100 + .dbyt %1110000000000101 + .dbyt %1110000000000110 + .dbyt %1110000000000111 + .dbyt %1110000000001000 + .dbyt %1110000000001001 + .dbyt %1110000000001010 + .dbyt %1110000000001011 + .dbyt %1110000000001100 + .dbyt %1110000000001101 + .dbyt %1110000000001110 + .dbyt %1110000000001111 + .dbyt %1110111111100001 + .dbyt %1110111111100010 + .dbyt %1110111111100011 + .dbyt %1110111111100100 + .dbyt %1110111111100101 + .dbyt %1110111111100110 + .dbyt %1110111111100111 + .dbyt %1110111111101000 + .dbyt %1110111111101001 + .dbyt %1110111111101010 + .dbyt %1110111111101011 + .dbyt %1110111111101100 + .dbyt %1110111111101101 + .dbyt %1110111111101110 + .dbyt %1110111111101111 + .dbyt %1110111111110000 + .dbyt %1110111111110001 + .dbyt %1110111111110010 + .dbyt %1110111111110011 + .dbyt %1110111111110100 + .dbyt %1110111111110101 + .dbyt %1110111111110110 + .dbyt %1110111111110111 + .dbyt %1110111111111000 + .dbyt %1110111111111001 + .dbyt %1110111111111010 + .dbyt %1110111111111011 + .dbyt %1110111111111100 + .dbyt %1110111111111101 + .dbyt %1110111111111110 + .dbyt %1110111111111111 + .dbyt %1111000000000000 + .dbyt %1111000000000001 + .dbyt %1111000000000010 + .dbyt %1111000000000011 + .dbyt %1111000000000100 + .dbyt %1111000000000101 + .dbyt %1111000000000110 + .dbyt %1111000000000111 + .dbyt %1111000000001000 + .dbyt %1111000000001001 + .dbyt %1111000000001010 + .dbyt %1111000000001011 + .dbyt %1111000000001100 + .dbyt %1111000000001101 + .dbyt %1111000000001110 + .dbyt %1111000000001111 + .dbyt %1111111111100001 + .dbyt %1111111111100010 + .dbyt %1111111111100011 + .dbyt %1111111111100100 + .dbyt %1111111111100101 + .dbyt %1111111111100110 + .dbyt %1111111111100111 + .dbyt %1111111111101000 + .dbyt %1111111111101001 + .dbyt %1111111111101010 + .dbyt %1111111111101011 + .dbyt %1111111111101100 + .dbyt %1111111111101101 + .dbyt %1111111111101110 + .dbyt %1111111111101111 + .dbyt %1111111111110000 + .dbyt %1111111111110001 + .dbyt %1111111111110010 + .dbyt %1111111111110011 + .dbyt %1111111111110100 + .dbyt %1111111111110101 + .dbyt %1111111111110110 + .dbyt %1111111111110111 + .dbyt %1111111111111000 + .dbyt %1111111111111001 + .dbyt %1111111111111010 + .dbyt %1111111111111011 + .dbyt %1111111111111100 + .dbyt %1111111111111101 + .dbyt %1111111111111110 + .dbyt %1111111111111111 + + ; multiple values on one line, decimal + .dbyt 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .dbyt 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .dbyt 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .dbyt 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .dbyt 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + .dbyt 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 + .dbyt 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 + .dbyt 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 + .dbyt 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 + .dbyt 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 + .dbyt 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 + .dbyt 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 + .dbyt 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 + .dbyt 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 + .dbyt 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 + .dbyt 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 + .dbyt 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 + .dbyt 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 + .dbyt 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 + .dbyt 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 + .dbyt 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 + .dbyt 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 + .dbyt 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 + .dbyt 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 + + ; multiple values on one line, hex + .dbyt $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .dbyt $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .dbyt $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .dbyt $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .dbyt $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + .dbyt $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f + .dbyt $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef + .dbyt $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff + .dbyt $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f + .dbyt $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff + .dbyt $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f + .dbyt $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff + .dbyt $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f + .dbyt $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff + .dbyt $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f + .dbyt $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff + .dbyt $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f + .dbyt $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff + .dbyt $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f + .dbyt $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff + .dbyt $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f + .dbyt $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff + .dbyt $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f + .dbyt $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff + + ; multiple values on one line, alternative hex + .dbyt 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .dbyt 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .dbyt 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .dbyt 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .dbyt 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + .dbyt 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh + .dbyt 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh + .dbyt 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh + .dbyt 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh + .dbyt 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh + .dbyt 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh + .dbyt 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh + .dbyt 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh + .dbyt 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh + .dbyt 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh + .dbyt 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh + .dbyt 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh + .dbyt 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh + .dbyt 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh + .dbyt 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh + .dbyt 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh + .dbyt 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh + .dbyt 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh + .dbyt 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh + + ; mix some variants + .dbyt 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/104-dword.bin-ref b/test/asm/listing/104-dword.bin-ref new file mode 100644 index 0000000000000000000000000000000000000000..8a9db7bf03fadcde7a560f476453e8635ed1b58d GIT binary patch literal 23192 zcmeI)$97v)6b4{f#Z9u6&^xcdlp(Ld44xo#2qlN!;Suf`!vLOz-idMVk}X@!(&clQ zz<^N_!eHC$^U}!wwJhy*wC_2)QmIsCs8XX&gIVU7XMshUv{+)9HW#?aZQRZ!p5keq z;aQ&Jd0yZ}Ug9z@^9rx>8dpfX&KtbRTfEIXbm(%#F+EN=rO$vNBgULDVM@vQA38&o z8ejPXzUCXg<vYIT2Y%!ye&!c`<u`ukDl7cKDr>B>!6sX5v%@ZX>~p{&9l9KGOpg;z z=`&!+h%skOm{M~7q|Z>LMx6$;%rQ^LliB5nV|tu$N}mBkMvOUQ!jzKpf5Z$`YSd{k z%N+A8ut<}Y!t=o@Ypk=uCR=Q?!!CR5bHE`Tx*Ty#j}uPmGhoPwF=tGeQc}sTl`1vr zG?-<Mc@|itNsA?xX|wW$YiE@;*4bc_Ew<TVmp%45;E)bojyR^r38(ZKFl5A-GbT(a zseI|$sZyg(gIVU7XMshUv{+)9HY=rTXO%V9*<h0`w%K8qJ@z@^kPcmrIHt!5r}P;x zWW<;=CQK=D<=4Kee%7edV3s-NSzwVSEtXiOO{XlcbUEUf9w(gAXTXpVW6qc`rNjj! zZ{wtPCABNnQM;1bmDH}Jb|tkdsa;9!N@`b9yOP?K+Q={D7xD}Fh5SN(A-|Ac$S>p< z@(cNe{6c;qzmQ+Z&+@bUEI-T7^0WLbKg-YZv-~VS%g^$&{477qFXfl=OZlbzQhq7F zlwZm(<(KkH`KA0)ekuRj*I)kuuN@EMSL9dZd;Yz4h}s>syOyGMN9~T<9kn~w-LdYD zb$6`0W8EF=ZlCddK8T))&q^13Rw8;P(KCsjN%TyjXA(V==$S;nJNn(x?~Z$w?h(0B z5%((NUS-^?jC+-FuQGZjvCky-nZ!Pm*k=;^Ok$5<#om$`szlEudM42`iJnRHOrmEJ z`@3U*ckJ(u{oQdk$KGpuOQL5IJ(K8}M9(C8CebsAo=KdmjB}N7t}@QVJBwm(Nt}s~ zGx2dIKF-9)nRxRToXLrvN%TxAIp&$fJd>Dba=r6R?odzf<Sy>!9`5Bn?&kp><RKpB z5;tph)w_Q8d%VvFe8@+9%qM(GhZ{NHs%|(<gIVU7XMshUv{+)9Hdn33|L=3H7WC5> zY0_eeW!n7LGp|}nKFhSZ)pM+F^(?AeJx|I|r0bpu<z<vEVxC<x&n~GUNexMANK!+R z8j{qIq=qClB&i`u4M}Q9l7HPZq2y=zS$>wE<!AX>ewLr*XZcxvmY?Nk`B{EG9|~3R z<*j_fW<o^`jT(A0=LSX%{pUQtsG(6qFR9<L4*h@6SB-V(zt2;Rb!e<Z%{#p|7y5iI bsr78-37+IKkMTH<@F<`C&F3DU&ujh@Q=dmu literal 0 HcmV?d00001 diff --git a/test/asm/listing/104-dword.list-ref b/test/asm/listing/104-dword.list-ref new file mode 100644 index 000000000..1416aaa22 --- /dev/null +++ b/test/asm/listing/104-dword.list-ref @@ -0,0 +1,5006 @@ +Main file : 104-dword.s +Current file: 104-dword.s + +000000r 1 ; 2022-06-15 Spiro Trikaliotis +000000r 1 +000000r 1 +000000r 1 ; upper case pseudo-op +000000r 1 00 00 00 00 .DWORD 0 +000004r 1 01 00 00 00 .DWORD 1 +000008r 1 02 00 00 00 .DWORD 2 +00000Cr 1 03 00 00 00 .DWORD 3 +000010r 1 04 00 00 00 .DWORD 4 +000014r 1 05 00 00 00 .DWORD 5 +000018r 1 06 00 00 00 .DWORD 6 +00001Cr 1 07 00 00 00 .DWORD 7 +000020r 1 08 00 00 00 .DWORD 8 +000024r 1 09 00 00 00 .DWORD 9 +000028r 1 0A 00 00 00 .DWORD 10 +00002Cr 1 0B 00 00 00 .DWORD 11 +000030r 1 0C 00 00 00 .DWORD 12 +000034r 1 0D 00 00 00 .DWORD 13 +000038r 1 0E 00 00 00 .DWORD 14 +00003Cr 1 0F 00 00 00 .DWORD 15 +000040r 1 10 00 00 00 .DWORD 16 +000044r 1 11 00 00 00 .DWORD 17 +000048r 1 12 00 00 00 .DWORD 18 +00004Cr 1 13 00 00 00 .DWORD 19 +000050r 1 70 00 00 00 .DWORD 112 +000054r 1 71 00 00 00 .DWORD 113 +000058r 1 72 00 00 00 .DWORD 114 +00005Cr 1 73 00 00 00 .DWORD 115 +000060r 1 74 00 00 00 .DWORD 116 +000064r 1 75 00 00 00 .DWORD 117 +000068r 1 76 00 00 00 .DWORD 118 +00006Cr 1 77 00 00 00 .DWORD 119 +000070r 1 78 00 00 00 .DWORD 120 +000074r 1 79 00 00 00 .DWORD 121 +000078r 1 7A 00 00 00 .DWORD 122 +00007Cr 1 7B 00 00 00 .DWORD 123 +000080r 1 7C 00 00 00 .DWORD 124 +000084r 1 7D 00 00 00 .DWORD 125 +000088r 1 7E 00 00 00 .DWORD 126 +00008Cr 1 7F 00 00 00 .DWORD 127 +000090r 1 80 00 00 00 .DWORD 128 +000094r 1 81 00 00 00 .DWORD 129 +000098r 1 82 00 00 00 .DWORD 130 +00009Cr 1 83 00 00 00 .DWORD 131 +0000A0r 1 84 00 00 00 .DWORD 132 +0000A4r 1 85 00 00 00 .DWORD 133 +0000A8r 1 86 00 00 00 .DWORD 134 +0000ACr 1 F0 00 00 00 .DWORD 240 +0000B0r 1 F1 00 00 00 .DWORD 241 +0000B4r 1 F2 00 00 00 .DWORD 242 +0000B8r 1 F3 00 00 00 .DWORD 243 +0000BCr 1 F4 00 00 00 .DWORD 244 +0000C0r 1 F5 00 00 00 .DWORD 245 +0000C4r 1 F6 00 00 00 .DWORD 246 +0000C8r 1 F7 00 00 00 .DWORD 247 +0000CCr 1 F8 00 00 00 .DWORD 248 +0000D0r 1 F9 00 00 00 .DWORD 249 +0000D4r 1 FA 00 00 00 .DWORD 250 +0000D8r 1 FB 00 00 00 .DWORD 251 +0000DCr 1 FC 00 00 00 .DWORD 252 +0000E0r 1 FD 00 00 00 .DWORD 253 +0000E4r 1 FE 00 00 00 .DWORD 254 +0000E8r 1 FF 00 00 00 .DWORD 255 +0000ECr 1 00 01 00 00 .DWORD 256 +0000F0r 1 01 01 00 00 .DWORD 257 +0000F4r 1 02 01 00 00 .DWORD 258 +0000F8r 1 03 01 00 00 .DWORD 259 +0000FCr 1 D2 0F 00 00 .DWORD 4050 +000100r 1 D3 0F 00 00 .DWORD 4051 +000104r 1 D4 0F 00 00 .DWORD 4052 +000108r 1 D5 0F 00 00 .DWORD 4053 +00010Cr 1 D6 0F 00 00 .DWORD 4054 +000110r 1 D7 0F 00 00 .DWORD 4055 +000114r 1 D8 0F 00 00 .DWORD 4056 +000118r 1 D9 0F 00 00 .DWORD 4057 +00011Cr 1 DA 0F 00 00 .DWORD 4058 +000120r 1 DB 0F 00 00 .DWORD 4059 +000124r 1 DC 0F 00 00 .DWORD 4060 +000128r 1 DD 0F 00 00 .DWORD 4061 +00012Cr 1 DE 0F 00 00 .DWORD 4062 +000130r 1 DF 0F 00 00 .DWORD 4063 +000134r 1 E0 0F 00 00 .DWORD 4064 +000138r 1 E1 0F 00 00 .DWORD 4065 +00013Cr 1 E2 0F 00 00 .DWORD 4066 +000140r 1 E3 0F 00 00 .DWORD 4067 +000144r 1 E4 0F 00 00 .DWORD 4068 +000148r 1 E5 0F 00 00 .DWORD 4069 +00014Cr 1 E6 0F 00 00 .DWORD 4070 +000150r 1 E7 0F 00 00 .DWORD 4071 +000154r 1 E8 0F 00 00 .DWORD 4072 +000158r 1 E9 0F 00 00 .DWORD 4073 +00015Cr 1 EA 0F 00 00 .DWORD 4074 +000160r 1 EB 0F 00 00 .DWORD 4075 +000164r 1 EC 0F 00 00 .DWORD 4076 +000168r 1 ED 0F 00 00 .DWORD 4077 +00016Cr 1 EE 0F 00 00 .DWORD 4078 +000170r 1 EF 0F 00 00 .DWORD 4079 +000174r 1 F0 0F 00 00 .DWORD 4080 +000178r 1 F1 0F 00 00 .DWORD 4081 +00017Cr 1 F2 0F 00 00 .DWORD 4082 +000180r 1 F3 0F 00 00 .DWORD 4083 +000184r 1 F4 0F 00 00 .DWORD 4084 +000188r 1 F5 0F 00 00 .DWORD 4085 +00018Cr 1 F6 0F 00 00 .DWORD 4086 +000190r 1 F7 0F 00 00 .DWORD 4087 +000194r 1 F8 0F 00 00 .DWORD 4088 +000198r 1 F9 0F 00 00 .DWORD 4089 +00019Cr 1 FA 0F 00 00 .DWORD 4090 +0001A0r 1 FB 0F 00 00 .DWORD 4091 +0001A4r 1 FC 0F 00 00 .DWORD 4092 +0001A8r 1 FD 0F 00 00 .DWORD 4093 +0001ACr 1 FE 0F 00 00 .DWORD 4094 +0001B0r 1 FF 0F 00 00 .DWORD 4095 +0001B4r 1 00 10 00 00 .DWORD 4096 +0001B8r 1 01 10 00 00 .DWORD 4097 +0001BCr 1 02 10 00 00 .DWORD 4098 +0001C0r 1 03 10 00 00 .DWORD 4099 +0001C4r 1 04 10 00 00 .DWORD 4100 +0001C8r 1 05 10 00 00 .DWORD 4101 +0001CCr 1 06 10 00 00 .DWORD 4102 +0001D0r 1 07 10 00 00 .DWORD 4103 +0001D4r 1 08 10 00 00 .DWORD 4104 +0001D8r 1 F0 7F 00 00 .DWORD 32752 +0001DCr 1 F1 7F 00 00 .DWORD 32753 +0001E0r 1 F2 7F 00 00 .DWORD 32754 +0001E4r 1 F3 7F 00 00 .DWORD 32755 +0001E8r 1 F4 7F 00 00 .DWORD 32756 +0001ECr 1 F5 7F 00 00 .DWORD 32757 +0001F0r 1 F6 7F 00 00 .DWORD 32758 +0001F4r 1 F7 7F 00 00 .DWORD 32759 +0001F8r 1 F8 7F 00 00 .DWORD 32760 +0001FCr 1 F9 7F 00 00 .DWORD 32761 +000200r 1 FA 7F 00 00 .DWORD 32762 +000204r 1 FB 7F 00 00 .DWORD 32763 +000208r 1 FC 7F 00 00 .DWORD 32764 +00020Cr 1 FD 7F 00 00 .DWORD 32765 +000210r 1 FE 7F 00 00 .DWORD 32766 +000214r 1 FF 7F 00 00 .DWORD 32767 +000218r 1 00 80 00 00 .DWORD 32768 +00021Cr 1 01 80 00 00 .DWORD 32769 +000220r 1 02 80 00 00 .DWORD 32770 +000224r 1 03 80 00 00 .DWORD 32771 +000228r 1 04 80 00 00 .DWORD 32772 +00022Cr 1 05 80 00 00 .DWORD 32773 +000230r 1 06 80 00 00 .DWORD 32774 +000234r 1 07 80 00 00 .DWORD 32775 +000238r 1 08 80 00 00 .DWORD 32776 +00023Cr 1 09 80 00 00 .DWORD 32777 +000240r 1 0A 80 00 00 .DWORD 32778 +000244r 1 0B 80 00 00 .DWORD 32779 +000248r 1 E1 9F 00 00 .DWORD 40929 +00024Cr 1 E2 9F 00 00 .DWORD 40930 +000250r 1 E3 9F 00 00 .DWORD 40931 +000254r 1 E4 9F 00 00 .DWORD 40932 +000258r 1 E5 9F 00 00 .DWORD 40933 +00025Cr 1 E6 9F 00 00 .DWORD 40934 +000260r 1 E7 9F 00 00 .DWORD 40935 +000264r 1 E8 9F 00 00 .DWORD 40936 +000268r 1 E9 9F 00 00 .DWORD 40937 +00026Cr 1 EA 9F 00 00 .DWORD 40938 +000270r 1 EB 9F 00 00 .DWORD 40939 +000274r 1 EC 9F 00 00 .DWORD 40940 +000278r 1 ED 9F 00 00 .DWORD 40941 +00027Cr 1 EE 9F 00 00 .DWORD 40942 +000280r 1 EF 9F 00 00 .DWORD 40943 +000284r 1 F0 9F 00 00 .DWORD 40944 +000288r 1 F1 9F 00 00 .DWORD 40945 +00028Cr 1 F2 9F 00 00 .DWORD 40946 +000290r 1 F3 9F 00 00 .DWORD 40947 +000294r 1 F4 9F 00 00 .DWORD 40948 +000298r 1 F5 9F 00 00 .DWORD 40949 +00029Cr 1 F6 9F 00 00 .DWORD 40950 +0002A0r 1 F7 9F 00 00 .DWORD 40951 +0002A4r 1 F8 9F 00 00 .DWORD 40952 +0002A8r 1 F9 9F 00 00 .DWORD 40953 +0002ACr 1 FA 9F 00 00 .DWORD 40954 +0002B0r 1 FB 9F 00 00 .DWORD 40955 +0002B4r 1 FC 9F 00 00 .DWORD 40956 +0002B8r 1 FD 9F 00 00 .DWORD 40957 +0002BCr 1 FE 9F 00 00 .DWORD 40958 +0002C0r 1 FF 9F 00 00 .DWORD 40959 +0002C4r 1 00 A0 00 00 .DWORD 40960 +0002C8r 1 01 A0 00 00 .DWORD 40961 +0002CCr 1 02 A0 00 00 .DWORD 40962 +0002D0r 1 03 A0 00 00 .DWORD 40963 +0002D4r 1 04 A0 00 00 .DWORD 40964 +0002D8r 1 05 A0 00 00 .DWORD 40965 +0002DCr 1 06 A0 00 00 .DWORD 40966 +0002E0r 1 07 A0 00 00 .DWORD 40967 +0002E4r 1 08 A0 00 00 .DWORD 40968 +0002E8r 1 09 A0 00 00 .DWORD 40969 +0002ECr 1 0A A0 00 00 .DWORD 40970 +0002F0r 1 0B A0 00 00 .DWORD 40971 +0002F4r 1 0C A0 00 00 .DWORD 40972 +0002F8r 1 0D A0 00 00 .DWORD 40973 +0002FCr 1 0E A0 00 00 .DWORD 40974 +000300r 1 0F A0 00 00 .DWORD 40975 +000304r 1 E1 AF 00 00 .DWORD 45025 +000308r 1 E2 AF 00 00 .DWORD 45026 +00030Cr 1 E3 AF 00 00 .DWORD 45027 +000310r 1 E4 AF 00 00 .DWORD 45028 +000314r 1 E5 AF 00 00 .DWORD 45029 +000318r 1 E6 AF 00 00 .DWORD 45030 +00031Cr 1 E7 AF 00 00 .DWORD 45031 +000320r 1 E8 AF 00 00 .DWORD 45032 +000324r 1 E9 AF 00 00 .DWORD 45033 +000328r 1 EA AF 00 00 .DWORD 45034 +00032Cr 1 EB AF 00 00 .DWORD 45035 +000330r 1 EC AF 00 00 .DWORD 45036 +000334r 1 ED AF 00 00 .DWORD 45037 +000338r 1 EE AF 00 00 .DWORD 45038 +00033Cr 1 EF AF 00 00 .DWORD 45039 +000340r 1 F0 AF 00 00 .DWORD 45040 +000344r 1 F1 AF 00 00 .DWORD 45041 +000348r 1 F2 AF 00 00 .DWORD 45042 +00034Cr 1 F3 AF 00 00 .DWORD 45043 +000350r 1 F4 AF 00 00 .DWORD 45044 +000354r 1 F5 AF 00 00 .DWORD 45045 +000358r 1 F6 AF 00 00 .DWORD 45046 +00035Cr 1 F7 AF 00 00 .DWORD 45047 +000360r 1 F8 AF 00 00 .DWORD 45048 +000364r 1 F9 AF 00 00 .DWORD 45049 +000368r 1 FA AF 00 00 .DWORD 45050 +00036Cr 1 FB AF 00 00 .DWORD 45051 +000370r 1 FC AF 00 00 .DWORD 45052 +000374r 1 FD AF 00 00 .DWORD 45053 +000378r 1 FE AF 00 00 .DWORD 45054 +00037Cr 1 FF AF 00 00 .DWORD 45055 +000380r 1 00 B0 00 00 .DWORD 45056 +000384r 1 01 B0 00 00 .DWORD 45057 +000388r 1 02 B0 00 00 .DWORD 45058 +00038Cr 1 03 B0 00 00 .DWORD 45059 +000390r 1 04 B0 00 00 .DWORD 45060 +000394r 1 05 B0 00 00 .DWORD 45061 +000398r 1 06 B0 00 00 .DWORD 45062 +00039Cr 1 07 B0 00 00 .DWORD 45063 +0003A0r 1 08 B0 00 00 .DWORD 45064 +0003A4r 1 09 B0 00 00 .DWORD 45065 +0003A8r 1 0A B0 00 00 .DWORD 45066 +0003ACr 1 0B B0 00 00 .DWORD 45067 +0003B0r 1 0C B0 00 00 .DWORD 45068 +0003B4r 1 0D B0 00 00 .DWORD 45069 +0003B8r 1 0E B0 00 00 .DWORD 45070 +0003BCr 1 0F B0 00 00 .DWORD 45071 +0003C0r 1 E1 FF 00 00 .DWORD 65505 +0003C4r 1 E2 FF 00 00 .DWORD 65506 +0003C8r 1 E3 FF 00 00 .DWORD 65507 +0003CCr 1 E4 FF 00 00 .DWORD 65508 +0003D0r 1 E5 FF 00 00 .DWORD 65509 +0003D4r 1 E6 FF 00 00 .DWORD 65510 +0003D8r 1 E7 FF 00 00 .DWORD 65511 +0003DCr 1 E8 FF 00 00 .DWORD 65512 +0003E0r 1 E9 FF 00 00 .DWORD 65513 +0003E4r 1 EA FF 00 00 .DWORD 65514 +0003E8r 1 EB FF 00 00 .DWORD 65515 +0003ECr 1 EC FF 00 00 .DWORD 65516 +0003F0r 1 ED FF 00 00 .DWORD 65517 +0003F4r 1 EE FF 00 00 .DWORD 65518 +0003F8r 1 EF FF 00 00 .DWORD 65519 +0003FCr 1 F0 FF 00 00 .DWORD 65520 +000400r 1 F1 FF 00 00 .DWORD 65521 +000404r 1 F2 FF 00 00 .DWORD 65522 +000408r 1 F3 FF 00 00 .DWORD 65523 +00040Cr 1 F4 FF 00 00 .DWORD 65524 +000410r 1 F5 FF 00 00 .DWORD 65525 +000414r 1 F6 FF 00 00 .DWORD 65526 +000418r 1 F7 FF 00 00 .DWORD 65527 +00041Cr 1 F8 FF 00 00 .DWORD 65528 +000420r 1 F9 FF 00 00 .DWORD 65529 +000424r 1 FA FF 00 00 .DWORD 65530 +000428r 1 FB FF 00 00 .DWORD 65531 +00042Cr 1 FC FF 00 00 .DWORD 65532 +000430r 1 FD FF 00 00 .DWORD 65533 +000434r 1 FE FF 00 00 .DWORD 65534 +000438r 1 FF FF 00 00 .DWORD 65535 +00043Cr 1 00 00 01 00 .DWORD 65536 +000440r 1 01 00 01 00 .DWORD 65537 +000444r 1 02 00 01 00 .DWORD 65538 +000448r 1 03 00 01 00 .DWORD 65539 +00044Cr 1 04 00 01 00 .DWORD 65540 +000450r 1 05 00 01 00 .DWORD 65541 +000454r 1 06 00 01 00 .DWORD 65542 +000458r 1 07 00 01 00 .DWORD 65543 +00045Cr 1 08 00 01 00 .DWORD 65544 +000460r 1 09 00 01 00 .DWORD 65545 +000464r 1 0A 00 01 00 .DWORD 65546 +000468r 1 0B 00 01 00 .DWORD 65547 +00046Cr 1 0C 00 01 00 .DWORD 65548 +000470r 1 0D 00 01 00 .DWORD 65549 +000474r 1 0E 00 01 00 .DWORD 65550 +000478r 1 0F 00 01 00 .DWORD 65551 +00047Cr 1 F0 FF FF 7F .DWORD 2147483632 +000480r 1 F1 FF FF 7F .DWORD 2147483633 +000484r 1 F2 FF FF 7F .DWORD 2147483634 +000488r 1 F3 FF FF 7F .DWORD 2147483635 +00048Cr 1 F4 FF FF 7F .DWORD 2147483636 +000490r 1 F5 FF FF 7F .DWORD 2147483637 +000494r 1 F6 FF FF 7F .DWORD 2147483638 +000498r 1 F7 FF FF 7F .DWORD 2147483639 +00049Cr 1 F8 FF FF 7F .DWORD 2147483640 +0004A0r 1 F9 FF FF 7F .DWORD 2147483641 +0004A4r 1 FA FF FF 7F .DWORD 2147483642 +0004A8r 1 FB FF FF 7F .DWORD 2147483643 +0004ACr 1 FC FF FF 7F .DWORD 2147483644 +0004B0r 1 FD FF FF 7F .DWORD 2147483645 +0004B4r 1 FE FF FF 7F .DWORD 2147483646 +0004B8r 1 FF FF FF 7F .DWORD 2147483647 +0004BCr 1 00 00 00 80 .DWORD 2147483648 +0004C0r 1 01 00 00 80 .DWORD 2147483649 +0004C4r 1 02 00 00 80 .DWORD 2147483650 +0004C8r 1 03 00 00 80 .DWORD 2147483651 +0004CCr 1 04 00 00 80 .DWORD 2147483652 +0004D0r 1 05 00 00 80 .DWORD 2147483653 +0004D4r 1 06 00 00 80 .DWORD 2147483654 +0004D8r 1 07 00 00 80 .DWORD 2147483655 +0004DCr 1 08 00 00 80 .DWORD 2147483656 +0004E0r 1 09 00 00 80 .DWORD 2147483657 +0004E4r 1 0A 00 00 80 .DWORD 2147483658 +0004E8r 1 0B 00 00 80 .DWORD 2147483659 +0004ECr 1 0C 00 00 80 .DWORD 2147483660 +0004F0r 1 0D 00 00 80 .DWORD 2147483661 +0004F4r 1 0E 00 00 80 .DWORD 2147483662 +0004F8r 1 0F 00 00 80 .DWORD 2147483663 +0004FCr 1 F0 FF FF 9F .DWORD 2684354544 +000500r 1 F1 FF FF 9F .DWORD 2684354545 +000504r 1 F2 FF FF 9F .DWORD 2684354546 +000508r 1 F3 FF FF 9F .DWORD 2684354547 +00050Cr 1 F4 FF FF 9F .DWORD 2684354548 +000510r 1 F5 FF FF 9F .DWORD 2684354549 +000514r 1 F6 FF FF 9F .DWORD 2684354550 +000518r 1 F7 FF FF 9F .DWORD 2684354551 +00051Cr 1 F8 FF FF 9F .DWORD 2684354552 +000520r 1 F9 FF FF 9F .DWORD 2684354553 +000524r 1 FA FF FF 9F .DWORD 2684354554 +000528r 1 FB FF FF 9F .DWORD 2684354555 +00052Cr 1 FC FF FF 9F .DWORD 2684354556 +000530r 1 FD FF FF 9F .DWORD 2684354557 +000534r 1 FE FF FF 9F .DWORD 2684354558 +000538r 1 FF FF FF 9F .DWORD 2684354559 +00053Cr 1 00 00 00 A0 .DWORD 2684354560 +000540r 1 01 00 00 A0 .DWORD 2684354561 +000544r 1 02 00 00 A0 .DWORD 2684354562 +000548r 1 03 00 00 A0 .DWORD 2684354563 +00054Cr 1 04 00 00 A0 .DWORD 2684354564 +000550r 1 05 00 00 A0 .DWORD 2684354565 +000554r 1 06 00 00 A0 .DWORD 2684354566 +000558r 1 07 00 00 A0 .DWORD 2684354567 +00055Cr 1 08 00 00 A0 .DWORD 2684354568 +000560r 1 09 00 00 A0 .DWORD 2684354569 +000564r 1 0A 00 00 A0 .DWORD 2684354570 +000568r 1 0B 00 00 A0 .DWORD 2684354571 +00056Cr 1 0C 00 00 A0 .DWORD 2684354572 +000570r 1 0D 00 00 A0 .DWORD 2684354573 +000574r 1 0E 00 00 A0 .DWORD 2684354574 +000578r 1 0F 00 00 A0 .DWORD 2684354575 +00057Cr 1 F0 FF FF FF .DWORD 4294967280 +000580r 1 F1 FF FF FF .DWORD 4294967281 +000584r 1 F2 FF FF FF .DWORD 4294967282 +000588r 1 F3 FF FF FF .DWORD 4294967283 +00058Cr 1 F4 FF FF FF .DWORD 4294967284 +000590r 1 F5 FF FF FF .DWORD 4294967285 +000594r 1 F6 FF FF FF .DWORD 4294967286 +000598r 1 F7 FF FF FF .DWORD 4294967287 +00059Cr 1 F8 FF FF FF .DWORD 4294967288 +0005A0r 1 F9 FF FF FF .DWORD 4294967289 +0005A4r 1 FA FF FF FF .DWORD 4294967290 +0005A8r 1 FB FF FF FF .DWORD 4294967291 +0005ACr 1 FC FF FF FF .DWORD 4294967292 +0005B0r 1 FD FF FF FF .DWORD 4294967293 +0005B4r 1 FE FF FF FF .DWORD 4294967294 +0005B8r 1 FF FF FF FF .DWORD 4294967295 +0005BCr 1 +0005BCr 1 ; lower case pseudo-op +0005BCr 1 00 00 00 00 .dword 0 +0005C0r 1 01 00 00 00 .dword 1 +0005C4r 1 02 00 00 00 .dword 2 +0005C8r 1 03 00 00 00 .dword 3 +0005CCr 1 04 00 00 00 .dword 4 +0005D0r 1 05 00 00 00 .dword 5 +0005D4r 1 06 00 00 00 .dword 6 +0005D8r 1 07 00 00 00 .dword 7 +0005DCr 1 08 00 00 00 .dword 8 +0005E0r 1 09 00 00 00 .dword 9 +0005E4r 1 0A 00 00 00 .dword 10 +0005E8r 1 0B 00 00 00 .dword 11 +0005ECr 1 0C 00 00 00 .dword 12 +0005F0r 1 0D 00 00 00 .dword 13 +0005F4r 1 0E 00 00 00 .dword 14 +0005F8r 1 0F 00 00 00 .dword 15 +0005FCr 1 10 00 00 00 .dword 16 +000600r 1 11 00 00 00 .dword 17 +000604r 1 12 00 00 00 .dword 18 +000608r 1 13 00 00 00 .dword 19 +00060Cr 1 70 00 00 00 .dword 112 +000610r 1 71 00 00 00 .dword 113 +000614r 1 72 00 00 00 .dword 114 +000618r 1 73 00 00 00 .dword 115 +00061Cr 1 74 00 00 00 .dword 116 +000620r 1 75 00 00 00 .dword 117 +000624r 1 76 00 00 00 .dword 118 +000628r 1 77 00 00 00 .dword 119 +00062Cr 1 78 00 00 00 .dword 120 +000630r 1 79 00 00 00 .dword 121 +000634r 1 7A 00 00 00 .dword 122 +000638r 1 7B 00 00 00 .dword 123 +00063Cr 1 7C 00 00 00 .dword 124 +000640r 1 7D 00 00 00 .dword 125 +000644r 1 7E 00 00 00 .dword 126 +000648r 1 7F 00 00 00 .dword 127 +00064Cr 1 80 00 00 00 .dword 128 +000650r 1 81 00 00 00 .dword 129 +000654r 1 82 00 00 00 .dword 130 +000658r 1 83 00 00 00 .dword 131 +00065Cr 1 84 00 00 00 .dword 132 +000660r 1 85 00 00 00 .dword 133 +000664r 1 86 00 00 00 .dword 134 +000668r 1 F0 00 00 00 .dword 240 +00066Cr 1 F1 00 00 00 .dword 241 +000670r 1 F2 00 00 00 .dword 242 +000674r 1 F3 00 00 00 .dword 243 +000678r 1 F4 00 00 00 .dword 244 +00067Cr 1 F5 00 00 00 .dword 245 +000680r 1 F6 00 00 00 .dword 246 +000684r 1 F7 00 00 00 .dword 247 +000688r 1 F8 00 00 00 .dword 248 +00068Cr 1 F9 00 00 00 .dword 249 +000690r 1 FA 00 00 00 .dword 250 +000694r 1 FB 00 00 00 .dword 251 +000698r 1 FC 00 00 00 .dword 252 +00069Cr 1 FD 00 00 00 .dword 253 +0006A0r 1 FE 00 00 00 .dword 254 +0006A4r 1 FF 00 00 00 .dword 255 +0006A8r 1 00 01 00 00 .dword 256 +0006ACr 1 01 01 00 00 .dword 257 +0006B0r 1 02 01 00 00 .dword 258 +0006B4r 1 03 01 00 00 .dword 259 +0006B8r 1 D2 0F 00 00 .dword 4050 +0006BCr 1 D3 0F 00 00 .dword 4051 +0006C0r 1 D4 0F 00 00 .dword 4052 +0006C4r 1 D5 0F 00 00 .dword 4053 +0006C8r 1 D6 0F 00 00 .dword 4054 +0006CCr 1 D7 0F 00 00 .dword 4055 +0006D0r 1 D8 0F 00 00 .dword 4056 +0006D4r 1 D9 0F 00 00 .dword 4057 +0006D8r 1 DA 0F 00 00 .dword 4058 +0006DCr 1 DB 0F 00 00 .dword 4059 +0006E0r 1 DC 0F 00 00 .dword 4060 +0006E4r 1 DD 0F 00 00 .dword 4061 +0006E8r 1 DE 0F 00 00 .dword 4062 +0006ECr 1 DF 0F 00 00 .dword 4063 +0006F0r 1 E0 0F 00 00 .dword 4064 +0006F4r 1 E1 0F 00 00 .dword 4065 +0006F8r 1 E2 0F 00 00 .dword 4066 +0006FCr 1 E3 0F 00 00 .dword 4067 +000700r 1 E4 0F 00 00 .dword 4068 +000704r 1 E5 0F 00 00 .dword 4069 +000708r 1 E6 0F 00 00 .dword 4070 +00070Cr 1 E7 0F 00 00 .dword 4071 +000710r 1 E8 0F 00 00 .dword 4072 +000714r 1 E9 0F 00 00 .dword 4073 +000718r 1 EA 0F 00 00 .dword 4074 +00071Cr 1 EB 0F 00 00 .dword 4075 +000720r 1 EC 0F 00 00 .dword 4076 +000724r 1 ED 0F 00 00 .dword 4077 +000728r 1 EE 0F 00 00 .dword 4078 +00072Cr 1 EF 0F 00 00 .dword 4079 +000730r 1 F0 0F 00 00 .dword 4080 +000734r 1 F1 0F 00 00 .dword 4081 +000738r 1 F2 0F 00 00 .dword 4082 +00073Cr 1 F3 0F 00 00 .dword 4083 +000740r 1 F4 0F 00 00 .dword 4084 +000744r 1 F5 0F 00 00 .dword 4085 +000748r 1 F6 0F 00 00 .dword 4086 +00074Cr 1 F7 0F 00 00 .dword 4087 +000750r 1 F8 0F 00 00 .dword 4088 +000754r 1 F9 0F 00 00 .dword 4089 +000758r 1 FA 0F 00 00 .dword 4090 +00075Cr 1 FB 0F 00 00 .dword 4091 +000760r 1 FC 0F 00 00 .dword 4092 +000764r 1 FD 0F 00 00 .dword 4093 +000768r 1 FE 0F 00 00 .dword 4094 +00076Cr 1 FF 0F 00 00 .dword 4095 +000770r 1 00 10 00 00 .dword 4096 +000774r 1 01 10 00 00 .dword 4097 +000778r 1 02 10 00 00 .dword 4098 +00077Cr 1 03 10 00 00 .dword 4099 +000780r 1 04 10 00 00 .dword 4100 +000784r 1 05 10 00 00 .dword 4101 +000788r 1 06 10 00 00 .dword 4102 +00078Cr 1 07 10 00 00 .dword 4103 +000790r 1 08 10 00 00 .dword 4104 +000794r 1 F0 7F 00 00 .dword 32752 +000798r 1 F1 7F 00 00 .dword 32753 +00079Cr 1 F2 7F 00 00 .dword 32754 +0007A0r 1 F3 7F 00 00 .dword 32755 +0007A4r 1 F4 7F 00 00 .dword 32756 +0007A8r 1 F5 7F 00 00 .dword 32757 +0007ACr 1 F6 7F 00 00 .dword 32758 +0007B0r 1 F7 7F 00 00 .dword 32759 +0007B4r 1 F8 7F 00 00 .dword 32760 +0007B8r 1 F9 7F 00 00 .dword 32761 +0007BCr 1 FA 7F 00 00 .dword 32762 +0007C0r 1 FB 7F 00 00 .dword 32763 +0007C4r 1 FC 7F 00 00 .dword 32764 +0007C8r 1 FD 7F 00 00 .dword 32765 +0007CCr 1 FE 7F 00 00 .dword 32766 +0007D0r 1 FF 7F 00 00 .dword 32767 +0007D4r 1 00 80 00 00 .dword 32768 +0007D8r 1 01 80 00 00 .dword 32769 +0007DCr 1 02 80 00 00 .dword 32770 +0007E0r 1 03 80 00 00 .dword 32771 +0007E4r 1 04 80 00 00 .dword 32772 +0007E8r 1 05 80 00 00 .dword 32773 +0007ECr 1 06 80 00 00 .dword 32774 +0007F0r 1 07 80 00 00 .dword 32775 +0007F4r 1 08 80 00 00 .dword 32776 +0007F8r 1 09 80 00 00 .dword 32777 +0007FCr 1 0A 80 00 00 .dword 32778 +000800r 1 0B 80 00 00 .dword 32779 +000804r 1 E1 9F 00 00 .dword 40929 +000808r 1 E2 9F 00 00 .dword 40930 +00080Cr 1 E3 9F 00 00 .dword 40931 +000810r 1 E4 9F 00 00 .dword 40932 +000814r 1 E5 9F 00 00 .dword 40933 +000818r 1 E6 9F 00 00 .dword 40934 +00081Cr 1 E7 9F 00 00 .dword 40935 +000820r 1 E8 9F 00 00 .dword 40936 +000824r 1 E9 9F 00 00 .dword 40937 +000828r 1 EA 9F 00 00 .dword 40938 +00082Cr 1 EB 9F 00 00 .dword 40939 +000830r 1 EC 9F 00 00 .dword 40940 +000834r 1 ED 9F 00 00 .dword 40941 +000838r 1 EE 9F 00 00 .dword 40942 +00083Cr 1 EF 9F 00 00 .dword 40943 +000840r 1 F0 9F 00 00 .dword 40944 +000844r 1 F1 9F 00 00 .dword 40945 +000848r 1 F2 9F 00 00 .dword 40946 +00084Cr 1 F3 9F 00 00 .dword 40947 +000850r 1 F4 9F 00 00 .dword 40948 +000854r 1 F5 9F 00 00 .dword 40949 +000858r 1 F6 9F 00 00 .dword 40950 +00085Cr 1 F7 9F 00 00 .dword 40951 +000860r 1 F8 9F 00 00 .dword 40952 +000864r 1 F9 9F 00 00 .dword 40953 +000868r 1 FA 9F 00 00 .dword 40954 +00086Cr 1 FB 9F 00 00 .dword 40955 +000870r 1 FC 9F 00 00 .dword 40956 +000874r 1 FD 9F 00 00 .dword 40957 +000878r 1 FE 9F 00 00 .dword 40958 +00087Cr 1 FF 9F 00 00 .dword 40959 +000880r 1 00 A0 00 00 .dword 40960 +000884r 1 01 A0 00 00 .dword 40961 +000888r 1 02 A0 00 00 .dword 40962 +00088Cr 1 03 A0 00 00 .dword 40963 +000890r 1 04 A0 00 00 .dword 40964 +000894r 1 05 A0 00 00 .dword 40965 +000898r 1 06 A0 00 00 .dword 40966 +00089Cr 1 07 A0 00 00 .dword 40967 +0008A0r 1 08 A0 00 00 .dword 40968 +0008A4r 1 09 A0 00 00 .dword 40969 +0008A8r 1 0A A0 00 00 .dword 40970 +0008ACr 1 0B A0 00 00 .dword 40971 +0008B0r 1 0C A0 00 00 .dword 40972 +0008B4r 1 0D A0 00 00 .dword 40973 +0008B8r 1 0E A0 00 00 .dword 40974 +0008BCr 1 0F A0 00 00 .dword 40975 +0008C0r 1 E1 AF 00 00 .dword 45025 +0008C4r 1 E2 AF 00 00 .dword 45026 +0008C8r 1 E3 AF 00 00 .dword 45027 +0008CCr 1 E4 AF 00 00 .dword 45028 +0008D0r 1 E5 AF 00 00 .dword 45029 +0008D4r 1 E6 AF 00 00 .dword 45030 +0008D8r 1 E7 AF 00 00 .dword 45031 +0008DCr 1 E8 AF 00 00 .dword 45032 +0008E0r 1 E9 AF 00 00 .dword 45033 +0008E4r 1 EA AF 00 00 .dword 45034 +0008E8r 1 EB AF 00 00 .dword 45035 +0008ECr 1 EC AF 00 00 .dword 45036 +0008F0r 1 ED AF 00 00 .dword 45037 +0008F4r 1 EE AF 00 00 .dword 45038 +0008F8r 1 EF AF 00 00 .dword 45039 +0008FCr 1 F0 AF 00 00 .dword 45040 +000900r 1 F1 AF 00 00 .dword 45041 +000904r 1 F2 AF 00 00 .dword 45042 +000908r 1 F3 AF 00 00 .dword 45043 +00090Cr 1 F4 AF 00 00 .dword 45044 +000910r 1 F5 AF 00 00 .dword 45045 +000914r 1 F6 AF 00 00 .dword 45046 +000918r 1 F7 AF 00 00 .dword 45047 +00091Cr 1 F8 AF 00 00 .dword 45048 +000920r 1 F9 AF 00 00 .dword 45049 +000924r 1 FA AF 00 00 .dword 45050 +000928r 1 FB AF 00 00 .dword 45051 +00092Cr 1 FC AF 00 00 .dword 45052 +000930r 1 FD AF 00 00 .dword 45053 +000934r 1 FE AF 00 00 .dword 45054 +000938r 1 FF AF 00 00 .dword 45055 +00093Cr 1 00 B0 00 00 .dword 45056 +000940r 1 01 B0 00 00 .dword 45057 +000944r 1 02 B0 00 00 .dword 45058 +000948r 1 03 B0 00 00 .dword 45059 +00094Cr 1 04 B0 00 00 .dword 45060 +000950r 1 05 B0 00 00 .dword 45061 +000954r 1 06 B0 00 00 .dword 45062 +000958r 1 07 B0 00 00 .dword 45063 +00095Cr 1 08 B0 00 00 .dword 45064 +000960r 1 09 B0 00 00 .dword 45065 +000964r 1 0A B0 00 00 .dword 45066 +000968r 1 0B B0 00 00 .dword 45067 +00096Cr 1 0C B0 00 00 .dword 45068 +000970r 1 0D B0 00 00 .dword 45069 +000974r 1 0E B0 00 00 .dword 45070 +000978r 1 0F B0 00 00 .dword 45071 +00097Cr 1 E1 FF 00 00 .dword 65505 +000980r 1 E2 FF 00 00 .dword 65506 +000984r 1 E3 FF 00 00 .dword 65507 +000988r 1 E4 FF 00 00 .dword 65508 +00098Cr 1 E5 FF 00 00 .dword 65509 +000990r 1 E6 FF 00 00 .dword 65510 +000994r 1 E7 FF 00 00 .dword 65511 +000998r 1 E8 FF 00 00 .dword 65512 +00099Cr 1 E9 FF 00 00 .dword 65513 +0009A0r 1 EA FF 00 00 .dword 65514 +0009A4r 1 EB FF 00 00 .dword 65515 +0009A8r 1 EC FF 00 00 .dword 65516 +0009ACr 1 ED FF 00 00 .dword 65517 +0009B0r 1 EE FF 00 00 .dword 65518 +0009B4r 1 EF FF 00 00 .dword 65519 +0009B8r 1 F0 FF 00 00 .dword 65520 +0009BCr 1 F1 FF 00 00 .dword 65521 +0009C0r 1 F2 FF 00 00 .dword 65522 +0009C4r 1 F3 FF 00 00 .dword 65523 +0009C8r 1 F4 FF 00 00 .dword 65524 +0009CCr 1 F5 FF 00 00 .dword 65525 +0009D0r 1 F6 FF 00 00 .dword 65526 +0009D4r 1 F7 FF 00 00 .dword 65527 +0009D8r 1 F8 FF 00 00 .dword 65528 +0009DCr 1 F9 FF 00 00 .dword 65529 +0009E0r 1 FA FF 00 00 .dword 65530 +0009E4r 1 FB FF 00 00 .dword 65531 +0009E8r 1 FC FF 00 00 .dword 65532 +0009ECr 1 FD FF 00 00 .dword 65533 +0009F0r 1 FE FF 00 00 .dword 65534 +0009F4r 1 FF FF 00 00 .dword 65535 +0009F8r 1 00 00 01 00 .dword 65536 +0009FCr 1 01 00 01 00 .dword 65537 +000A00r 1 02 00 01 00 .dword 65538 +000A04r 1 03 00 01 00 .dword 65539 +000A08r 1 04 00 01 00 .dword 65540 +000A0Cr 1 05 00 01 00 .dword 65541 +000A10r 1 06 00 01 00 .dword 65542 +000A14r 1 07 00 01 00 .dword 65543 +000A18r 1 08 00 01 00 .dword 65544 +000A1Cr 1 09 00 01 00 .dword 65545 +000A20r 1 0A 00 01 00 .dword 65546 +000A24r 1 0B 00 01 00 .dword 65547 +000A28r 1 0C 00 01 00 .dword 65548 +000A2Cr 1 0D 00 01 00 .dword 65549 +000A30r 1 0E 00 01 00 .dword 65550 +000A34r 1 0F 00 01 00 .dword 65551 +000A38r 1 F0 FF FF 7F .dword 2147483632 +000A3Cr 1 F1 FF FF 7F .dword 2147483633 +000A40r 1 F2 FF FF 7F .dword 2147483634 +000A44r 1 F3 FF FF 7F .dword 2147483635 +000A48r 1 F4 FF FF 7F .dword 2147483636 +000A4Cr 1 F5 FF FF 7F .dword 2147483637 +000A50r 1 F6 FF FF 7F .dword 2147483638 +000A54r 1 F7 FF FF 7F .dword 2147483639 +000A58r 1 F8 FF FF 7F .dword 2147483640 +000A5Cr 1 F9 FF FF 7F .dword 2147483641 +000A60r 1 FA FF FF 7F .dword 2147483642 +000A64r 1 FB FF FF 7F .dword 2147483643 +000A68r 1 FC FF FF 7F .dword 2147483644 +000A6Cr 1 FD FF FF 7F .dword 2147483645 +000A70r 1 FE FF FF 7F .dword 2147483646 +000A74r 1 FF FF FF 7F .dword 2147483647 +000A78r 1 00 00 00 80 .dword 2147483648 +000A7Cr 1 01 00 00 80 .dword 2147483649 +000A80r 1 02 00 00 80 .dword 2147483650 +000A84r 1 03 00 00 80 .dword 2147483651 +000A88r 1 04 00 00 80 .dword 2147483652 +000A8Cr 1 05 00 00 80 .dword 2147483653 +000A90r 1 06 00 00 80 .dword 2147483654 +000A94r 1 07 00 00 80 .dword 2147483655 +000A98r 1 08 00 00 80 .dword 2147483656 +000A9Cr 1 09 00 00 80 .dword 2147483657 +000AA0r 1 0A 00 00 80 .dword 2147483658 +000AA4r 1 0B 00 00 80 .dword 2147483659 +000AA8r 1 0C 00 00 80 .dword 2147483660 +000AACr 1 0D 00 00 80 .dword 2147483661 +000AB0r 1 0E 00 00 80 .dword 2147483662 +000AB4r 1 0F 00 00 80 .dword 2147483663 +000AB8r 1 F0 FF FF 9F .dword 2684354544 +000ABCr 1 F1 FF FF 9F .dword 2684354545 +000AC0r 1 F2 FF FF 9F .dword 2684354546 +000AC4r 1 F3 FF FF 9F .dword 2684354547 +000AC8r 1 F4 FF FF 9F .dword 2684354548 +000ACCr 1 F5 FF FF 9F .dword 2684354549 +000AD0r 1 F6 FF FF 9F .dword 2684354550 +000AD4r 1 F7 FF FF 9F .dword 2684354551 +000AD8r 1 F8 FF FF 9F .dword 2684354552 +000ADCr 1 F9 FF FF 9F .dword 2684354553 +000AE0r 1 FA FF FF 9F .dword 2684354554 +000AE4r 1 FB FF FF 9F .dword 2684354555 +000AE8r 1 FC FF FF 9F .dword 2684354556 +000AECr 1 FD FF FF 9F .dword 2684354557 +000AF0r 1 FE FF FF 9F .dword 2684354558 +000AF4r 1 FF FF FF 9F .dword 2684354559 +000AF8r 1 00 00 00 A0 .dword 2684354560 +000AFCr 1 01 00 00 A0 .dword 2684354561 +000B00r 1 02 00 00 A0 .dword 2684354562 +000B04r 1 03 00 00 A0 .dword 2684354563 +000B08r 1 04 00 00 A0 .dword 2684354564 +000B0Cr 1 05 00 00 A0 .dword 2684354565 +000B10r 1 06 00 00 A0 .dword 2684354566 +000B14r 1 07 00 00 A0 .dword 2684354567 +000B18r 1 08 00 00 A0 .dword 2684354568 +000B1Cr 1 09 00 00 A0 .dword 2684354569 +000B20r 1 0A 00 00 A0 .dword 2684354570 +000B24r 1 0B 00 00 A0 .dword 2684354571 +000B28r 1 0C 00 00 A0 .dword 2684354572 +000B2Cr 1 0D 00 00 A0 .dword 2684354573 +000B30r 1 0E 00 00 A0 .dword 2684354574 +000B34r 1 0F 00 00 A0 .dword 2684354575 +000B38r 1 F0 FF FF FF .dword 4294967280 +000B3Cr 1 F1 FF FF FF .dword 4294967281 +000B40r 1 F2 FF FF FF .dword 4294967282 +000B44r 1 F3 FF FF FF .dword 4294967283 +000B48r 1 F4 FF FF FF .dword 4294967284 +000B4Cr 1 F5 FF FF FF .dword 4294967285 +000B50r 1 F6 FF FF FF .dword 4294967286 +000B54r 1 F7 FF FF FF .dword 4294967287 +000B58r 1 F8 FF FF FF .dword 4294967288 +000B5Cr 1 F9 FF FF FF .dword 4294967289 +000B60r 1 FA FF FF FF .dword 4294967290 +000B64r 1 FB FF FF FF .dword 4294967291 +000B68r 1 FC FF FF FF .dword 4294967292 +000B6Cr 1 FD FF FF FF .dword 4294967293 +000B70r 1 FE FF FF FF .dword 4294967294 +000B74r 1 FF FF FF FF .dword 4294967295 +000B78r 1 +000B78r 1 ; hex values +000B78r 1 00 00 00 00 .dword $0 +000B7Cr 1 01 00 00 00 .dword $1 +000B80r 1 02 00 00 00 .dword $2 +000B84r 1 03 00 00 00 .dword $3 +000B88r 1 04 00 00 00 .dword $4 +000B8Cr 1 05 00 00 00 .dword $5 +000B90r 1 06 00 00 00 .dword $6 +000B94r 1 07 00 00 00 .dword $7 +000B98r 1 08 00 00 00 .dword $8 +000B9Cr 1 09 00 00 00 .dword $9 +000BA0r 1 0A 00 00 00 .dword $a +000BA4r 1 0B 00 00 00 .dword $b +000BA8r 1 0C 00 00 00 .dword $c +000BACr 1 0D 00 00 00 .dword $d +000BB0r 1 0E 00 00 00 .dword $e +000BB4r 1 0F 00 00 00 .dword $f +000BB8r 1 10 00 00 00 .dword $10 +000BBCr 1 11 00 00 00 .dword $11 +000BC0r 1 12 00 00 00 .dword $12 +000BC4r 1 13 00 00 00 .dword $13 +000BC8r 1 70 00 00 00 .dword $70 +000BCCr 1 71 00 00 00 .dword $71 +000BD0r 1 72 00 00 00 .dword $72 +000BD4r 1 73 00 00 00 .dword $73 +000BD8r 1 74 00 00 00 .dword $74 +000BDCr 1 75 00 00 00 .dword $75 +000BE0r 1 76 00 00 00 .dword $76 +000BE4r 1 77 00 00 00 .dword $77 +000BE8r 1 78 00 00 00 .dword $78 +000BECr 1 79 00 00 00 .dword $79 +000BF0r 1 7A 00 00 00 .dword $7a +000BF4r 1 7B 00 00 00 .dword $7b +000BF8r 1 7C 00 00 00 .dword $7c +000BFCr 1 7D 00 00 00 .dword $7d +000C00r 1 7E 00 00 00 .dword $7e +000C04r 1 7F 00 00 00 .dword $7f +000C08r 1 80 00 00 00 .dword $80 +000C0Cr 1 81 00 00 00 .dword $81 +000C10r 1 82 00 00 00 .dword $82 +000C14r 1 83 00 00 00 .dword $83 +000C18r 1 84 00 00 00 .dword $84 +000C1Cr 1 85 00 00 00 .dword $85 +000C20r 1 86 00 00 00 .dword $86 +000C24r 1 F0 00 00 00 .dword $f0 +000C28r 1 F1 00 00 00 .dword $f1 +000C2Cr 1 F2 00 00 00 .dword $f2 +000C30r 1 F3 00 00 00 .dword $f3 +000C34r 1 F4 00 00 00 .dword $f4 +000C38r 1 F5 00 00 00 .dword $f5 +000C3Cr 1 F6 00 00 00 .dword $f6 +000C40r 1 F7 00 00 00 .dword $f7 +000C44r 1 F8 00 00 00 .dword $f8 +000C48r 1 F9 00 00 00 .dword $f9 +000C4Cr 1 FA 00 00 00 .dword $fa +000C50r 1 FB 00 00 00 .dword $fb +000C54r 1 FC 00 00 00 .dword $fc +000C58r 1 FD 00 00 00 .dword $fd +000C5Cr 1 FE 00 00 00 .dword $fe +000C60r 1 FF 00 00 00 .dword $ff +000C64r 1 00 01 00 00 .dword $100 +000C68r 1 01 01 00 00 .dword $101 +000C6Cr 1 02 01 00 00 .dword $102 +000C70r 1 03 01 00 00 .dword $103 +000C74r 1 D2 0F 00 00 .dword $fd2 +000C78r 1 D3 0F 00 00 .dword $fd3 +000C7Cr 1 D4 0F 00 00 .dword $fd4 +000C80r 1 D5 0F 00 00 .dword $fd5 +000C84r 1 D6 0F 00 00 .dword $fd6 +000C88r 1 D7 0F 00 00 .dword $fd7 +000C8Cr 1 D8 0F 00 00 .dword $fd8 +000C90r 1 D9 0F 00 00 .dword $fd9 +000C94r 1 DA 0F 00 00 .dword $fda +000C98r 1 DB 0F 00 00 .dword $fdb +000C9Cr 1 DC 0F 00 00 .dword $fdc +000CA0r 1 DD 0F 00 00 .dword $fdd +000CA4r 1 DE 0F 00 00 .dword $fde +000CA8r 1 DF 0F 00 00 .dword $fdf +000CACr 1 E0 0F 00 00 .dword $fe0 +000CB0r 1 E1 0F 00 00 .dword $fe1 +000CB4r 1 E2 0F 00 00 .dword $fe2 +000CB8r 1 E3 0F 00 00 .dword $fe3 +000CBCr 1 E4 0F 00 00 .dword $fe4 +000CC0r 1 E5 0F 00 00 .dword $fe5 +000CC4r 1 E6 0F 00 00 .dword $fe6 +000CC8r 1 E7 0F 00 00 .dword $fe7 +000CCCr 1 E8 0F 00 00 .dword $fe8 +000CD0r 1 E9 0F 00 00 .dword $fe9 +000CD4r 1 EA 0F 00 00 .dword $fea +000CD8r 1 EB 0F 00 00 .dword $feb +000CDCr 1 EC 0F 00 00 .dword $fec +000CE0r 1 ED 0F 00 00 .dword $fed +000CE4r 1 EE 0F 00 00 .dword $fee +000CE8r 1 EF 0F 00 00 .dword $fef +000CECr 1 F0 0F 00 00 .dword $ff0 +000CF0r 1 F1 0F 00 00 .dword $ff1 +000CF4r 1 F2 0F 00 00 .dword $ff2 +000CF8r 1 F3 0F 00 00 .dword $ff3 +000CFCr 1 F4 0F 00 00 .dword $ff4 +000D00r 1 F5 0F 00 00 .dword $ff5 +000D04r 1 F6 0F 00 00 .dword $ff6 +000D08r 1 F7 0F 00 00 .dword $ff7 +000D0Cr 1 F8 0F 00 00 .dword $ff8 +000D10r 1 F9 0F 00 00 .dword $ff9 +000D14r 1 FA 0F 00 00 .dword $ffa +000D18r 1 FB 0F 00 00 .dword $ffb +000D1Cr 1 FC 0F 00 00 .dword $ffc +000D20r 1 FD 0F 00 00 .dword $ffd +000D24r 1 FE 0F 00 00 .dword $ffe +000D28r 1 FF 0F 00 00 .dword $fff +000D2Cr 1 00 10 00 00 .dword $1000 +000D30r 1 01 10 00 00 .dword $1001 +000D34r 1 02 10 00 00 .dword $1002 +000D38r 1 03 10 00 00 .dword $1003 +000D3Cr 1 04 10 00 00 .dword $1004 +000D40r 1 05 10 00 00 .dword $1005 +000D44r 1 06 10 00 00 .dword $1006 +000D48r 1 07 10 00 00 .dword $1007 +000D4Cr 1 08 10 00 00 .dword $1008 +000D50r 1 F0 7F 00 00 .dword $7ff0 +000D54r 1 F1 7F 00 00 .dword $7ff1 +000D58r 1 F2 7F 00 00 .dword $7ff2 +000D5Cr 1 F3 7F 00 00 .dword $7ff3 +000D60r 1 F4 7F 00 00 .dword $7ff4 +000D64r 1 F5 7F 00 00 .dword $7ff5 +000D68r 1 F6 7F 00 00 .dword $7ff6 +000D6Cr 1 F7 7F 00 00 .dword $7ff7 +000D70r 1 F8 7F 00 00 .dword $7ff8 +000D74r 1 F9 7F 00 00 .dword $7ff9 +000D78r 1 FA 7F 00 00 .dword $7ffa +000D7Cr 1 FB 7F 00 00 .dword $7ffb +000D80r 1 FC 7F 00 00 .dword $7ffc +000D84r 1 FD 7F 00 00 .dword $7ffd +000D88r 1 FE 7F 00 00 .dword $7ffe +000D8Cr 1 FF 7F 00 00 .dword $7fff +000D90r 1 00 80 00 00 .dword $8000 +000D94r 1 01 80 00 00 .dword $8001 +000D98r 1 02 80 00 00 .dword $8002 +000D9Cr 1 03 80 00 00 .dword $8003 +000DA0r 1 04 80 00 00 .dword $8004 +000DA4r 1 05 80 00 00 .dword $8005 +000DA8r 1 06 80 00 00 .dword $8006 +000DACr 1 07 80 00 00 .dword $8007 +000DB0r 1 08 80 00 00 .dword $8008 +000DB4r 1 09 80 00 00 .dword $8009 +000DB8r 1 0A 80 00 00 .dword $800a +000DBCr 1 0B 80 00 00 .dword $800b +000DC0r 1 E1 9F 00 00 .dword $9fe1 +000DC4r 1 E2 9F 00 00 .dword $9fe2 +000DC8r 1 E3 9F 00 00 .dword $9fe3 +000DCCr 1 E4 9F 00 00 .dword $9fe4 +000DD0r 1 E5 9F 00 00 .dword $9fe5 +000DD4r 1 E6 9F 00 00 .dword $9fe6 +000DD8r 1 E7 9F 00 00 .dword $9fe7 +000DDCr 1 E8 9F 00 00 .dword $9fe8 +000DE0r 1 E9 9F 00 00 .dword $9fe9 +000DE4r 1 EA 9F 00 00 .dword $9fea +000DE8r 1 EB 9F 00 00 .dword $9feb +000DECr 1 EC 9F 00 00 .dword $9fec +000DF0r 1 ED 9F 00 00 .dword $9fed +000DF4r 1 EE 9F 00 00 .dword $9fee +000DF8r 1 EF 9F 00 00 .dword $9fef +000DFCr 1 F0 9F 00 00 .dword $9ff0 +000E00r 1 F1 9F 00 00 .dword $9ff1 +000E04r 1 F2 9F 00 00 .dword $9ff2 +000E08r 1 F3 9F 00 00 .dword $9ff3 +000E0Cr 1 F4 9F 00 00 .dword $9ff4 +000E10r 1 F5 9F 00 00 .dword $9ff5 +000E14r 1 F6 9F 00 00 .dword $9ff6 +000E18r 1 F7 9F 00 00 .dword $9ff7 +000E1Cr 1 F8 9F 00 00 .dword $9ff8 +000E20r 1 F9 9F 00 00 .dword $9ff9 +000E24r 1 FA 9F 00 00 .dword $9ffa +000E28r 1 FB 9F 00 00 .dword $9ffb +000E2Cr 1 FC 9F 00 00 .dword $9ffc +000E30r 1 FD 9F 00 00 .dword $9ffd +000E34r 1 FE 9F 00 00 .dword $9ffe +000E38r 1 FF 9F 00 00 .dword $9fff +000E3Cr 1 00 A0 00 00 .dword $a000 +000E40r 1 01 A0 00 00 .dword $a001 +000E44r 1 02 A0 00 00 .dword $a002 +000E48r 1 03 A0 00 00 .dword $a003 +000E4Cr 1 04 A0 00 00 .dword $a004 +000E50r 1 05 A0 00 00 .dword $a005 +000E54r 1 06 A0 00 00 .dword $a006 +000E58r 1 07 A0 00 00 .dword $a007 +000E5Cr 1 08 A0 00 00 .dword $a008 +000E60r 1 09 A0 00 00 .dword $a009 +000E64r 1 0A A0 00 00 .dword $a00a +000E68r 1 0B A0 00 00 .dword $a00b +000E6Cr 1 0C A0 00 00 .dword $a00c +000E70r 1 0D A0 00 00 .dword $a00d +000E74r 1 0E A0 00 00 .dword $a00e +000E78r 1 0F A0 00 00 .dword $a00f +000E7Cr 1 E1 AF 00 00 .dword $afe1 +000E80r 1 E2 AF 00 00 .dword $afe2 +000E84r 1 E3 AF 00 00 .dword $afe3 +000E88r 1 E4 AF 00 00 .dword $afe4 +000E8Cr 1 E5 AF 00 00 .dword $afe5 +000E90r 1 E6 AF 00 00 .dword $afe6 +000E94r 1 E7 AF 00 00 .dword $afe7 +000E98r 1 E8 AF 00 00 .dword $afe8 +000E9Cr 1 E9 AF 00 00 .dword $afe9 +000EA0r 1 EA AF 00 00 .dword $afea +000EA4r 1 EB AF 00 00 .dword $afeb +000EA8r 1 EC AF 00 00 .dword $afec +000EACr 1 ED AF 00 00 .dword $afed +000EB0r 1 EE AF 00 00 .dword $afee +000EB4r 1 EF AF 00 00 .dword $afef +000EB8r 1 F0 AF 00 00 .dword $aff0 +000EBCr 1 F1 AF 00 00 .dword $aff1 +000EC0r 1 F2 AF 00 00 .dword $aff2 +000EC4r 1 F3 AF 00 00 .dword $aff3 +000EC8r 1 F4 AF 00 00 .dword $aff4 +000ECCr 1 F5 AF 00 00 .dword $aff5 +000ED0r 1 F6 AF 00 00 .dword $aff6 +000ED4r 1 F7 AF 00 00 .dword $aff7 +000ED8r 1 F8 AF 00 00 .dword $aff8 +000EDCr 1 F9 AF 00 00 .dword $aff9 +000EE0r 1 FA AF 00 00 .dword $affa +000EE4r 1 FB AF 00 00 .dword $affb +000EE8r 1 FC AF 00 00 .dword $affc +000EECr 1 FD AF 00 00 .dword $affd +000EF0r 1 FE AF 00 00 .dword $affe +000EF4r 1 FF AF 00 00 .dword $afff +000EF8r 1 00 B0 00 00 .dword $b000 +000EFCr 1 01 B0 00 00 .dword $b001 +000F00r 1 02 B0 00 00 .dword $b002 +000F04r 1 03 B0 00 00 .dword $b003 +000F08r 1 04 B0 00 00 .dword $b004 +000F0Cr 1 05 B0 00 00 .dword $b005 +000F10r 1 06 B0 00 00 .dword $b006 +000F14r 1 07 B0 00 00 .dword $b007 +000F18r 1 08 B0 00 00 .dword $b008 +000F1Cr 1 09 B0 00 00 .dword $b009 +000F20r 1 0A B0 00 00 .dword $b00a +000F24r 1 0B B0 00 00 .dword $b00b +000F28r 1 0C B0 00 00 .dword $b00c +000F2Cr 1 0D B0 00 00 .dword $b00d +000F30r 1 0E B0 00 00 .dword $b00e +000F34r 1 0F B0 00 00 .dword $b00f +000F38r 1 E1 FF 00 00 .dword $ffe1 +000F3Cr 1 E2 FF 00 00 .dword $ffe2 +000F40r 1 E3 FF 00 00 .dword $ffe3 +000F44r 1 E4 FF 00 00 .dword $ffe4 +000F48r 1 E5 FF 00 00 .dword $ffe5 +000F4Cr 1 E6 FF 00 00 .dword $ffe6 +000F50r 1 E7 FF 00 00 .dword $ffe7 +000F54r 1 E8 FF 00 00 .dword $ffe8 +000F58r 1 E9 FF 00 00 .dword $ffe9 +000F5Cr 1 EA FF 00 00 .dword $ffea +000F60r 1 EB FF 00 00 .dword $ffeb +000F64r 1 EC FF 00 00 .dword $ffec +000F68r 1 ED FF 00 00 .dword $ffed +000F6Cr 1 EE FF 00 00 .dword $ffee +000F70r 1 EF FF 00 00 .dword $ffef +000F74r 1 F0 FF 00 00 .dword $fff0 +000F78r 1 F1 FF 00 00 .dword $fff1 +000F7Cr 1 F2 FF 00 00 .dword $fff2 +000F80r 1 F3 FF 00 00 .dword $fff3 +000F84r 1 F4 FF 00 00 .dword $fff4 +000F88r 1 F5 FF 00 00 .dword $fff5 +000F8Cr 1 F6 FF 00 00 .dword $fff6 +000F90r 1 F7 FF 00 00 .dword $fff7 +000F94r 1 F8 FF 00 00 .dword $fff8 +000F98r 1 F9 FF 00 00 .dword $fff9 +000F9Cr 1 FA FF 00 00 .dword $fffa +000FA0r 1 FB FF 00 00 .dword $fffb +000FA4r 1 FC FF 00 00 .dword $fffc +000FA8r 1 FD FF 00 00 .dword $fffd +000FACr 1 FE FF 00 00 .dword $fffe +000FB0r 1 FF FF 00 00 .dword $ffff +000FB4r 1 00 00 01 00 .dword $10000 +000FB8r 1 01 00 01 00 .dword $10001 +000FBCr 1 02 00 01 00 .dword $10002 +000FC0r 1 03 00 01 00 .dword $10003 +000FC4r 1 04 00 01 00 .dword $10004 +000FC8r 1 05 00 01 00 .dword $10005 +000FCCr 1 06 00 01 00 .dword $10006 +000FD0r 1 07 00 01 00 .dword $10007 +000FD4r 1 08 00 01 00 .dword $10008 +000FD8r 1 09 00 01 00 .dword $10009 +000FDCr 1 0A 00 01 00 .dword $1000a +000FE0r 1 0B 00 01 00 .dword $1000b +000FE4r 1 0C 00 01 00 .dword $1000c +000FE8r 1 0D 00 01 00 .dword $1000d +000FECr 1 0E 00 01 00 .dword $1000e +000FF0r 1 0F 00 01 00 .dword $1000f +000FF4r 1 F0 FF FF 7F .dword $7ffffff0 +000FF8r 1 F1 FF FF 7F .dword $7ffffff1 +000FFCr 1 F2 FF FF 7F .dword $7ffffff2 +001000r 1 F3 FF FF 7F .dword $7ffffff3 +001004r 1 F4 FF FF 7F .dword $7ffffff4 +001008r 1 F5 FF FF 7F .dword $7ffffff5 +00100Cr 1 F6 FF FF 7F .dword $7ffffff6 +001010r 1 F7 FF FF 7F .dword $7ffffff7 +001014r 1 F8 FF FF 7F .dword $7ffffff8 +001018r 1 F9 FF FF 7F .dword $7ffffff9 +00101Cr 1 FA FF FF 7F .dword $7ffffffa +001020r 1 FB FF FF 7F .dword $7ffffffb +001024r 1 FC FF FF 7F .dword $7ffffffc +001028r 1 FD FF FF 7F .dword $7ffffffd +00102Cr 1 FE FF FF 7F .dword $7ffffffe +001030r 1 FF FF FF 7F .dword $7fffffff +001034r 1 00 00 00 80 .dword $80000000 +001038r 1 01 00 00 80 .dword $80000001 +00103Cr 1 02 00 00 80 .dword $80000002 +001040r 1 03 00 00 80 .dword $80000003 +001044r 1 04 00 00 80 .dword $80000004 +001048r 1 05 00 00 80 .dword $80000005 +00104Cr 1 06 00 00 80 .dword $80000006 +001050r 1 07 00 00 80 .dword $80000007 +001054r 1 08 00 00 80 .dword $80000008 +001058r 1 09 00 00 80 .dword $80000009 +00105Cr 1 0A 00 00 80 .dword $8000000a +001060r 1 0B 00 00 80 .dword $8000000b +001064r 1 0C 00 00 80 .dword $8000000c +001068r 1 0D 00 00 80 .dword $8000000d +00106Cr 1 0E 00 00 80 .dword $8000000e +001070r 1 0F 00 00 80 .dword $8000000f +001074r 1 F0 FF FF 9F .dword $9ffffff0 +001078r 1 F1 FF FF 9F .dword $9ffffff1 +00107Cr 1 F2 FF FF 9F .dword $9ffffff2 +001080r 1 F3 FF FF 9F .dword $9ffffff3 +001084r 1 F4 FF FF 9F .dword $9ffffff4 +001088r 1 F5 FF FF 9F .dword $9ffffff5 +00108Cr 1 F6 FF FF 9F .dword $9ffffff6 +001090r 1 F7 FF FF 9F .dword $9ffffff7 +001094r 1 F8 FF FF 9F .dword $9ffffff8 +001098r 1 F9 FF FF 9F .dword $9ffffff9 +00109Cr 1 FA FF FF 9F .dword $9ffffffa +0010A0r 1 FB FF FF 9F .dword $9ffffffb +0010A4r 1 FC FF FF 9F .dword $9ffffffc +0010A8r 1 FD FF FF 9F .dword $9ffffffd +0010ACr 1 FE FF FF 9F .dword $9ffffffe +0010B0r 1 FF FF FF 9F .dword $9fffffff +0010B4r 1 00 00 00 A0 .dword $a0000000 +0010B8r 1 01 00 00 A0 .dword $a0000001 +0010BCr 1 02 00 00 A0 .dword $a0000002 +0010C0r 1 03 00 00 A0 .dword $a0000003 +0010C4r 1 04 00 00 A0 .dword $a0000004 +0010C8r 1 05 00 00 A0 .dword $a0000005 +0010CCr 1 06 00 00 A0 .dword $a0000006 +0010D0r 1 07 00 00 A0 .dword $a0000007 +0010D4r 1 08 00 00 A0 .dword $a0000008 +0010D8r 1 09 00 00 A0 .dword $a0000009 +0010DCr 1 0A 00 00 A0 .dword $a000000a +0010E0r 1 0B 00 00 A0 .dword $a000000b +0010E4r 1 0C 00 00 A0 .dword $a000000c +0010E8r 1 0D 00 00 A0 .dword $a000000d +0010ECr 1 0E 00 00 A0 .dword $a000000e +0010F0r 1 0F 00 00 A0 .dword $a000000f +0010F4r 1 F0 FF FF FF .dword $fffffff0 +0010F8r 1 F1 FF FF FF .dword $fffffff1 +0010FCr 1 F2 FF FF FF .dword $fffffff2 +001100r 1 F3 FF FF FF .dword $fffffff3 +001104r 1 F4 FF FF FF .dword $fffffff4 +001108r 1 F5 FF FF FF .dword $fffffff5 +00110Cr 1 F6 FF FF FF .dword $fffffff6 +001110r 1 F7 FF FF FF .dword $fffffff7 +001114r 1 F8 FF FF FF .dword $fffffff8 +001118r 1 F9 FF FF FF .dword $fffffff9 +00111Cr 1 FA FF FF FF .dword $fffffffa +001120r 1 FB FF FF FF .dword $fffffffb +001124r 1 FC FF FF FF .dword $fffffffc +001128r 1 FD FF FF FF .dword $fffffffd +00112Cr 1 FE FF FF FF .dword $fffffffe +001130r 1 FF FF FF FF .dword $ffffffff +001134r 1 +001134r 1 ; hex values, uppercase +001134r 1 00 00 00 00 .dword $0 +001138r 1 01 00 00 00 .dword $1 +00113Cr 1 02 00 00 00 .dword $2 +001140r 1 03 00 00 00 .dword $3 +001144r 1 04 00 00 00 .dword $4 +001148r 1 05 00 00 00 .dword $5 +00114Cr 1 06 00 00 00 .dword $6 +001150r 1 07 00 00 00 .dword $7 +001154r 1 08 00 00 00 .dword $8 +001158r 1 09 00 00 00 .dword $9 +00115Cr 1 0A 00 00 00 .dword $A +001160r 1 0B 00 00 00 .dword $B +001164r 1 0C 00 00 00 .dword $C +001168r 1 0D 00 00 00 .dword $D +00116Cr 1 0E 00 00 00 .dword $E +001170r 1 0F 00 00 00 .dword $F +001174r 1 10 00 00 00 .dword $10 +001178r 1 11 00 00 00 .dword $11 +00117Cr 1 12 00 00 00 .dword $12 +001180r 1 13 00 00 00 .dword $13 +001184r 1 70 00 00 00 .dword $70 +001188r 1 71 00 00 00 .dword $71 +00118Cr 1 72 00 00 00 .dword $72 +001190r 1 73 00 00 00 .dword $73 +001194r 1 74 00 00 00 .dword $74 +001198r 1 75 00 00 00 .dword $75 +00119Cr 1 76 00 00 00 .dword $76 +0011A0r 1 77 00 00 00 .dword $77 +0011A4r 1 78 00 00 00 .dword $78 +0011A8r 1 79 00 00 00 .dword $79 +0011ACr 1 7A 00 00 00 .dword $7A +0011B0r 1 7B 00 00 00 .dword $7B +0011B4r 1 7C 00 00 00 .dword $7C +0011B8r 1 7D 00 00 00 .dword $7D +0011BCr 1 7E 00 00 00 .dword $7E +0011C0r 1 7F 00 00 00 .dword $7F +0011C4r 1 80 00 00 00 .dword $80 +0011C8r 1 81 00 00 00 .dword $81 +0011CCr 1 82 00 00 00 .dword $82 +0011D0r 1 83 00 00 00 .dword $83 +0011D4r 1 84 00 00 00 .dword $84 +0011D8r 1 85 00 00 00 .dword $85 +0011DCr 1 86 00 00 00 .dword $86 +0011E0r 1 F0 00 00 00 .dword $F0 +0011E4r 1 F1 00 00 00 .dword $F1 +0011E8r 1 F2 00 00 00 .dword $F2 +0011ECr 1 F3 00 00 00 .dword $F3 +0011F0r 1 F4 00 00 00 .dword $F4 +0011F4r 1 F5 00 00 00 .dword $F5 +0011F8r 1 F6 00 00 00 .dword $F6 +0011FCr 1 F7 00 00 00 .dword $F7 +001200r 1 F8 00 00 00 .dword $F8 +001204r 1 F9 00 00 00 .dword $F9 +001208r 1 FA 00 00 00 .dword $FA +00120Cr 1 FB 00 00 00 .dword $FB +001210r 1 FC 00 00 00 .dword $FC +001214r 1 FD 00 00 00 .dword $FD +001218r 1 FE 00 00 00 .dword $FE +00121Cr 1 FF 00 00 00 .dword $FF +001220r 1 00 01 00 00 .dword $100 +001224r 1 01 01 00 00 .dword $101 +001228r 1 02 01 00 00 .dword $102 +00122Cr 1 03 01 00 00 .dword $103 +001230r 1 D2 0F 00 00 .dword $FD2 +001234r 1 D3 0F 00 00 .dword $FD3 +001238r 1 D4 0F 00 00 .dword $FD4 +00123Cr 1 D5 0F 00 00 .dword $FD5 +001240r 1 D6 0F 00 00 .dword $FD6 +001244r 1 D7 0F 00 00 .dword $FD7 +001248r 1 D8 0F 00 00 .dword $FD8 +00124Cr 1 D9 0F 00 00 .dword $FD9 +001250r 1 DA 0F 00 00 .dword $FDA +001254r 1 DB 0F 00 00 .dword $FDB +001258r 1 DC 0F 00 00 .dword $FDC +00125Cr 1 DD 0F 00 00 .dword $FDD +001260r 1 DE 0F 00 00 .dword $FDE +001264r 1 DF 0F 00 00 .dword $FDF +001268r 1 E0 0F 00 00 .dword $FE0 +00126Cr 1 E1 0F 00 00 .dword $FE1 +001270r 1 E2 0F 00 00 .dword $FE2 +001274r 1 E3 0F 00 00 .dword $FE3 +001278r 1 E4 0F 00 00 .dword $FE4 +00127Cr 1 E5 0F 00 00 .dword $FE5 +001280r 1 E6 0F 00 00 .dword $FE6 +001284r 1 E7 0F 00 00 .dword $FE7 +001288r 1 E8 0F 00 00 .dword $FE8 +00128Cr 1 E9 0F 00 00 .dword $FE9 +001290r 1 EA 0F 00 00 .dword $FEA +001294r 1 EB 0F 00 00 .dword $FEB +001298r 1 EC 0F 00 00 .dword $FEC +00129Cr 1 ED 0F 00 00 .dword $FED +0012A0r 1 EE 0F 00 00 .dword $FEE +0012A4r 1 EF 0F 00 00 .dword $FEF +0012A8r 1 F0 0F 00 00 .dword $FF0 +0012ACr 1 F1 0F 00 00 .dword $FF1 +0012B0r 1 F2 0F 00 00 .dword $FF2 +0012B4r 1 F3 0F 00 00 .dword $FF3 +0012B8r 1 F4 0F 00 00 .dword $FF4 +0012BCr 1 F5 0F 00 00 .dword $FF5 +0012C0r 1 F6 0F 00 00 .dword $FF6 +0012C4r 1 F7 0F 00 00 .dword $FF7 +0012C8r 1 F8 0F 00 00 .dword $FF8 +0012CCr 1 F9 0F 00 00 .dword $FF9 +0012D0r 1 FA 0F 00 00 .dword $FFA +0012D4r 1 FB 0F 00 00 .dword $FFB +0012D8r 1 FC 0F 00 00 .dword $FFC +0012DCr 1 FD 0F 00 00 .dword $FFD +0012E0r 1 FE 0F 00 00 .dword $FFE +0012E4r 1 FF 0F 00 00 .dword $FFF +0012E8r 1 00 10 00 00 .dword $1000 +0012ECr 1 01 10 00 00 .dword $1001 +0012F0r 1 02 10 00 00 .dword $1002 +0012F4r 1 03 10 00 00 .dword $1003 +0012F8r 1 04 10 00 00 .dword $1004 +0012FCr 1 05 10 00 00 .dword $1005 +001300r 1 06 10 00 00 .dword $1006 +001304r 1 07 10 00 00 .dword $1007 +001308r 1 08 10 00 00 .dword $1008 +00130Cr 1 F0 7F 00 00 .dword $7FF0 +001310r 1 F1 7F 00 00 .dword $7FF1 +001314r 1 F2 7F 00 00 .dword $7FF2 +001318r 1 F3 7F 00 00 .dword $7FF3 +00131Cr 1 F4 7F 00 00 .dword $7FF4 +001320r 1 F5 7F 00 00 .dword $7FF5 +001324r 1 F6 7F 00 00 .dword $7FF6 +001328r 1 F7 7F 00 00 .dword $7FF7 +00132Cr 1 F8 7F 00 00 .dword $7FF8 +001330r 1 F9 7F 00 00 .dword $7FF9 +001334r 1 FA 7F 00 00 .dword $7FFA +001338r 1 FB 7F 00 00 .dword $7FFB +00133Cr 1 FC 7F 00 00 .dword $7FFC +001340r 1 FD 7F 00 00 .dword $7FFD +001344r 1 FE 7F 00 00 .dword $7FFE +001348r 1 FF 7F 00 00 .dword $7FFF +00134Cr 1 00 80 00 00 .dword $8000 +001350r 1 01 80 00 00 .dword $8001 +001354r 1 02 80 00 00 .dword $8002 +001358r 1 03 80 00 00 .dword $8003 +00135Cr 1 04 80 00 00 .dword $8004 +001360r 1 05 80 00 00 .dword $8005 +001364r 1 06 80 00 00 .dword $8006 +001368r 1 07 80 00 00 .dword $8007 +00136Cr 1 08 80 00 00 .dword $8008 +001370r 1 09 80 00 00 .dword $8009 +001374r 1 0A 80 00 00 .dword $800A +001378r 1 0B 80 00 00 .dword $800B +00137Cr 1 E1 9F 00 00 .dword $9FE1 +001380r 1 E2 9F 00 00 .dword $9FE2 +001384r 1 E3 9F 00 00 .dword $9FE3 +001388r 1 E4 9F 00 00 .dword $9FE4 +00138Cr 1 E5 9F 00 00 .dword $9FE5 +001390r 1 E6 9F 00 00 .dword $9FE6 +001394r 1 E7 9F 00 00 .dword $9FE7 +001398r 1 E8 9F 00 00 .dword $9FE8 +00139Cr 1 E9 9F 00 00 .dword $9FE9 +0013A0r 1 EA 9F 00 00 .dword $9FEA +0013A4r 1 EB 9F 00 00 .dword $9FEB +0013A8r 1 EC 9F 00 00 .dword $9FEC +0013ACr 1 ED 9F 00 00 .dword $9FED +0013B0r 1 EE 9F 00 00 .dword $9FEE +0013B4r 1 EF 9F 00 00 .dword $9FEF +0013B8r 1 F0 9F 00 00 .dword $9FF0 +0013BCr 1 F1 9F 00 00 .dword $9FF1 +0013C0r 1 F2 9F 00 00 .dword $9FF2 +0013C4r 1 F3 9F 00 00 .dword $9FF3 +0013C8r 1 F4 9F 00 00 .dword $9FF4 +0013CCr 1 F5 9F 00 00 .dword $9FF5 +0013D0r 1 F6 9F 00 00 .dword $9FF6 +0013D4r 1 F7 9F 00 00 .dword $9FF7 +0013D8r 1 F8 9F 00 00 .dword $9FF8 +0013DCr 1 F9 9F 00 00 .dword $9FF9 +0013E0r 1 FA 9F 00 00 .dword $9FFA +0013E4r 1 FB 9F 00 00 .dword $9FFB +0013E8r 1 FC 9F 00 00 .dword $9FFC +0013ECr 1 FD 9F 00 00 .dword $9FFD +0013F0r 1 FE 9F 00 00 .dword $9FFE +0013F4r 1 FF 9F 00 00 .dword $9FFF +0013F8r 1 00 A0 00 00 .dword $A000 +0013FCr 1 01 A0 00 00 .dword $A001 +001400r 1 02 A0 00 00 .dword $A002 +001404r 1 03 A0 00 00 .dword $A003 +001408r 1 04 A0 00 00 .dword $A004 +00140Cr 1 05 A0 00 00 .dword $A005 +001410r 1 06 A0 00 00 .dword $A006 +001414r 1 07 A0 00 00 .dword $A007 +001418r 1 08 A0 00 00 .dword $A008 +00141Cr 1 09 A0 00 00 .dword $A009 +001420r 1 0A A0 00 00 .dword $A00A +001424r 1 0B A0 00 00 .dword $A00B +001428r 1 0C A0 00 00 .dword $A00C +00142Cr 1 0D A0 00 00 .dword $A00D +001430r 1 0E A0 00 00 .dword $A00E +001434r 1 0F A0 00 00 .dword $A00F +001438r 1 E1 AF 00 00 .dword $AFE1 +00143Cr 1 E2 AF 00 00 .dword $AFE2 +001440r 1 E3 AF 00 00 .dword $AFE3 +001444r 1 E4 AF 00 00 .dword $AFE4 +001448r 1 E5 AF 00 00 .dword $AFE5 +00144Cr 1 E6 AF 00 00 .dword $AFE6 +001450r 1 E7 AF 00 00 .dword $AFE7 +001454r 1 E8 AF 00 00 .dword $AFE8 +001458r 1 E9 AF 00 00 .dword $AFE9 +00145Cr 1 EA AF 00 00 .dword $AFEA +001460r 1 EB AF 00 00 .dword $AFEB +001464r 1 EC AF 00 00 .dword $AFEC +001468r 1 ED AF 00 00 .dword $AFED +00146Cr 1 EE AF 00 00 .dword $AFEE +001470r 1 EF AF 00 00 .dword $AFEF +001474r 1 F0 AF 00 00 .dword $AFF0 +001478r 1 F1 AF 00 00 .dword $AFF1 +00147Cr 1 F2 AF 00 00 .dword $AFF2 +001480r 1 F3 AF 00 00 .dword $AFF3 +001484r 1 F4 AF 00 00 .dword $AFF4 +001488r 1 F5 AF 00 00 .dword $AFF5 +00148Cr 1 F6 AF 00 00 .dword $AFF6 +001490r 1 F7 AF 00 00 .dword $AFF7 +001494r 1 F8 AF 00 00 .dword $AFF8 +001498r 1 F9 AF 00 00 .dword $AFF9 +00149Cr 1 FA AF 00 00 .dword $AFFA +0014A0r 1 FB AF 00 00 .dword $AFFB +0014A4r 1 FC AF 00 00 .dword $AFFC +0014A8r 1 FD AF 00 00 .dword $AFFD +0014ACr 1 FE AF 00 00 .dword $AFFE +0014B0r 1 FF AF 00 00 .dword $AFFF +0014B4r 1 00 B0 00 00 .dword $B000 +0014B8r 1 01 B0 00 00 .dword $B001 +0014BCr 1 02 B0 00 00 .dword $B002 +0014C0r 1 03 B0 00 00 .dword $B003 +0014C4r 1 04 B0 00 00 .dword $B004 +0014C8r 1 05 B0 00 00 .dword $B005 +0014CCr 1 06 B0 00 00 .dword $B006 +0014D0r 1 07 B0 00 00 .dword $B007 +0014D4r 1 08 B0 00 00 .dword $B008 +0014D8r 1 09 B0 00 00 .dword $B009 +0014DCr 1 0A B0 00 00 .dword $B00A +0014E0r 1 0B B0 00 00 .dword $B00B +0014E4r 1 0C B0 00 00 .dword $B00C +0014E8r 1 0D B0 00 00 .dword $B00D +0014ECr 1 0E B0 00 00 .dword $B00E +0014F0r 1 0F B0 00 00 .dword $B00F +0014F4r 1 E1 FF 00 00 .dword $FFE1 +0014F8r 1 E2 FF 00 00 .dword $FFE2 +0014FCr 1 E3 FF 00 00 .dword $FFE3 +001500r 1 E4 FF 00 00 .dword $FFE4 +001504r 1 E5 FF 00 00 .dword $FFE5 +001508r 1 E6 FF 00 00 .dword $FFE6 +00150Cr 1 E7 FF 00 00 .dword $FFE7 +001510r 1 E8 FF 00 00 .dword $FFE8 +001514r 1 E9 FF 00 00 .dword $FFE9 +001518r 1 EA FF 00 00 .dword $FFEA +00151Cr 1 EB FF 00 00 .dword $FFEB +001520r 1 EC FF 00 00 .dword $FFEC +001524r 1 ED FF 00 00 .dword $FFED +001528r 1 EE FF 00 00 .dword $FFEE +00152Cr 1 EF FF 00 00 .dword $FFEF +001530r 1 F0 FF 00 00 .dword $FFF0 +001534r 1 F1 FF 00 00 .dword $FFF1 +001538r 1 F2 FF 00 00 .dword $FFF2 +00153Cr 1 F3 FF 00 00 .dword $FFF3 +001540r 1 F4 FF 00 00 .dword $FFF4 +001544r 1 F5 FF 00 00 .dword $FFF5 +001548r 1 F6 FF 00 00 .dword $FFF6 +00154Cr 1 F7 FF 00 00 .dword $FFF7 +001550r 1 F8 FF 00 00 .dword $FFF8 +001554r 1 F9 FF 00 00 .dword $FFF9 +001558r 1 FA FF 00 00 .dword $FFFA +00155Cr 1 FB FF 00 00 .dword $FFFB +001560r 1 FC FF 00 00 .dword $FFFC +001564r 1 FD FF 00 00 .dword $FFFD +001568r 1 FE FF 00 00 .dword $FFFE +00156Cr 1 FF FF 00 00 .dword $FFFF +001570r 1 00 00 01 00 .dword $10000 +001574r 1 01 00 01 00 .dword $10001 +001578r 1 02 00 01 00 .dword $10002 +00157Cr 1 03 00 01 00 .dword $10003 +001580r 1 04 00 01 00 .dword $10004 +001584r 1 05 00 01 00 .dword $10005 +001588r 1 06 00 01 00 .dword $10006 +00158Cr 1 07 00 01 00 .dword $10007 +001590r 1 08 00 01 00 .dword $10008 +001594r 1 09 00 01 00 .dword $10009 +001598r 1 0A 00 01 00 .dword $1000A +00159Cr 1 0B 00 01 00 .dword $1000B +0015A0r 1 0C 00 01 00 .dword $1000C +0015A4r 1 0D 00 01 00 .dword $1000D +0015A8r 1 0E 00 01 00 .dword $1000E +0015ACr 1 0F 00 01 00 .dword $1000F +0015B0r 1 F0 FF FF 7F .dword $7FFFFFF0 +0015B4r 1 F1 FF FF 7F .dword $7FFFFFF1 +0015B8r 1 F2 FF FF 7F .dword $7FFFFFF2 +0015BCr 1 F3 FF FF 7F .dword $7FFFFFF3 +0015C0r 1 F4 FF FF 7F .dword $7FFFFFF4 +0015C4r 1 F5 FF FF 7F .dword $7FFFFFF5 +0015C8r 1 F6 FF FF 7F .dword $7FFFFFF6 +0015CCr 1 F7 FF FF 7F .dword $7FFFFFF7 +0015D0r 1 F8 FF FF 7F .dword $7FFFFFF8 +0015D4r 1 F9 FF FF 7F .dword $7FFFFFF9 +0015D8r 1 FA FF FF 7F .dword $7FFFFFFA +0015DCr 1 FB FF FF 7F .dword $7FFFFFFB +0015E0r 1 FC FF FF 7F .dword $7FFFFFFC +0015E4r 1 FD FF FF 7F .dword $7FFFFFFD +0015E8r 1 FE FF FF 7F .dword $7FFFFFFE +0015ECr 1 FF FF FF 7F .dword $7FFFFFFF +0015F0r 1 00 00 00 80 .dword $80000000 +0015F4r 1 01 00 00 80 .dword $80000001 +0015F8r 1 02 00 00 80 .dword $80000002 +0015FCr 1 03 00 00 80 .dword $80000003 +001600r 1 04 00 00 80 .dword $80000004 +001604r 1 05 00 00 80 .dword $80000005 +001608r 1 06 00 00 80 .dword $80000006 +00160Cr 1 07 00 00 80 .dword $80000007 +001610r 1 08 00 00 80 .dword $80000008 +001614r 1 09 00 00 80 .dword $80000009 +001618r 1 0A 00 00 80 .dword $8000000A +00161Cr 1 0B 00 00 80 .dword $8000000B +001620r 1 0C 00 00 80 .dword $8000000C +001624r 1 0D 00 00 80 .dword $8000000D +001628r 1 0E 00 00 80 .dword $8000000E +00162Cr 1 0F 00 00 80 .dword $8000000F +001630r 1 F0 FF FF 9F .dword $9FFFFFF0 +001634r 1 F1 FF FF 9F .dword $9FFFFFF1 +001638r 1 F2 FF FF 9F .dword $9FFFFFF2 +00163Cr 1 F3 FF FF 9F .dword $9FFFFFF3 +001640r 1 F4 FF FF 9F .dword $9FFFFFF4 +001644r 1 F5 FF FF 9F .dword $9FFFFFF5 +001648r 1 F6 FF FF 9F .dword $9FFFFFF6 +00164Cr 1 F7 FF FF 9F .dword $9FFFFFF7 +001650r 1 F8 FF FF 9F .dword $9FFFFFF8 +001654r 1 F9 FF FF 9F .dword $9FFFFFF9 +001658r 1 FA FF FF 9F .dword $9FFFFFFA +00165Cr 1 FB FF FF 9F .dword $9FFFFFFB +001660r 1 FC FF FF 9F .dword $9FFFFFFC +001664r 1 FD FF FF 9F .dword $9FFFFFFD +001668r 1 FE FF FF 9F .dword $9FFFFFFE +00166Cr 1 FF FF FF 9F .dword $9FFFFFFF +001670r 1 00 00 00 A0 .dword $A0000000 +001674r 1 01 00 00 A0 .dword $A0000001 +001678r 1 02 00 00 A0 .dword $A0000002 +00167Cr 1 03 00 00 A0 .dword $A0000003 +001680r 1 04 00 00 A0 .dword $A0000004 +001684r 1 05 00 00 A0 .dword $A0000005 +001688r 1 06 00 00 A0 .dword $A0000006 +00168Cr 1 07 00 00 A0 .dword $A0000007 +001690r 1 08 00 00 A0 .dword $A0000008 +001694r 1 09 00 00 A0 .dword $A0000009 +001698r 1 0A 00 00 A0 .dword $A000000A +00169Cr 1 0B 00 00 A0 .dword $A000000B +0016A0r 1 0C 00 00 A0 .dword $A000000C +0016A4r 1 0D 00 00 A0 .dword $A000000D +0016A8r 1 0E 00 00 A0 .dword $A000000E +0016ACr 1 0F 00 00 A0 .dword $A000000F +0016B0r 1 F0 FF FF FF .dword $FFFFFFF0 +0016B4r 1 F1 FF FF FF .dword $FFFFFFF1 +0016B8r 1 F2 FF FF FF .dword $FFFFFFF2 +0016BCr 1 F3 FF FF FF .dword $FFFFFFF3 +0016C0r 1 F4 FF FF FF .dword $FFFFFFF4 +0016C4r 1 F5 FF FF FF .dword $FFFFFFF5 +0016C8r 1 F6 FF FF FF .dword $FFFFFFF6 +0016CCr 1 F7 FF FF FF .dword $FFFFFFF7 +0016D0r 1 F8 FF FF FF .dword $FFFFFFF8 +0016D4r 1 F9 FF FF FF .dword $FFFFFFF9 +0016D8r 1 FA FF FF FF .dword $FFFFFFFA +0016DCr 1 FB FF FF FF .dword $FFFFFFFB +0016E0r 1 FC FF FF FF .dword $FFFFFFFC +0016E4r 1 FD FF FF FF .dword $FFFFFFFD +0016E8r 1 FE FF FF FF .dword $FFFFFFFE +0016ECr 1 FF FF FF FF .dword $FFFFFFFF +0016F0r 1 +0016F0r 1 ; 8-digit hex values +0016F0r 1 00 00 00 00 .dword $00000000 +0016F4r 1 01 00 00 00 .dword $00000001 +0016F8r 1 02 00 00 00 .dword $00000002 +0016FCr 1 03 00 00 00 .dword $00000003 +001700r 1 04 00 00 00 .dword $00000004 +001704r 1 05 00 00 00 .dword $00000005 +001708r 1 06 00 00 00 .dword $00000006 +00170Cr 1 07 00 00 00 .dword $00000007 +001710r 1 08 00 00 00 .dword $00000008 +001714r 1 09 00 00 00 .dword $00000009 +001718r 1 0A 00 00 00 .dword $0000000a +00171Cr 1 0B 00 00 00 .dword $0000000b +001720r 1 0C 00 00 00 .dword $0000000c +001724r 1 0D 00 00 00 .dword $0000000d +001728r 1 0E 00 00 00 .dword $0000000e +00172Cr 1 0F 00 00 00 .dword $0000000f +001730r 1 10 00 00 00 .dword $00000010 +001734r 1 11 00 00 00 .dword $00000011 +001738r 1 12 00 00 00 .dword $00000012 +00173Cr 1 13 00 00 00 .dword $00000013 +001740r 1 70 00 00 00 .dword $00000070 +001744r 1 71 00 00 00 .dword $00000071 +001748r 1 72 00 00 00 .dword $00000072 +00174Cr 1 73 00 00 00 .dword $00000073 +001750r 1 74 00 00 00 .dword $00000074 +001754r 1 75 00 00 00 .dword $00000075 +001758r 1 76 00 00 00 .dword $00000076 +00175Cr 1 77 00 00 00 .dword $00000077 +001760r 1 78 00 00 00 .dword $00000078 +001764r 1 79 00 00 00 .dword $00000079 +001768r 1 7A 00 00 00 .dword $0000007a +00176Cr 1 7B 00 00 00 .dword $0000007b +001770r 1 7C 00 00 00 .dword $0000007c +001774r 1 7D 00 00 00 .dword $0000007d +001778r 1 7E 00 00 00 .dword $0000007e +00177Cr 1 7F 00 00 00 .dword $0000007f +001780r 1 80 00 00 00 .dword $00000080 +001784r 1 81 00 00 00 .dword $00000081 +001788r 1 82 00 00 00 .dword $00000082 +00178Cr 1 83 00 00 00 .dword $00000083 +001790r 1 84 00 00 00 .dword $00000084 +001794r 1 85 00 00 00 .dword $00000085 +001798r 1 86 00 00 00 .dword $00000086 +00179Cr 1 F0 00 00 00 .dword $000000f0 +0017A0r 1 F1 00 00 00 .dword $000000f1 +0017A4r 1 F2 00 00 00 .dword $000000f2 +0017A8r 1 F3 00 00 00 .dword $000000f3 +0017ACr 1 F4 00 00 00 .dword $000000f4 +0017B0r 1 F5 00 00 00 .dword $000000f5 +0017B4r 1 F6 00 00 00 .dword $000000f6 +0017B8r 1 F7 00 00 00 .dword $000000f7 +0017BCr 1 F8 00 00 00 .dword $000000f8 +0017C0r 1 F9 00 00 00 .dword $000000f9 +0017C4r 1 FA 00 00 00 .dword $000000fa +0017C8r 1 FB 00 00 00 .dword $000000fb +0017CCr 1 FC 00 00 00 .dword $000000fc +0017D0r 1 FD 00 00 00 .dword $000000fd +0017D4r 1 FE 00 00 00 .dword $000000fe +0017D8r 1 FF 00 00 00 .dword $000000ff +0017DCr 1 00 01 00 00 .dword $00000100 +0017E0r 1 01 01 00 00 .dword $00000101 +0017E4r 1 02 01 00 00 .dword $00000102 +0017E8r 1 03 01 00 00 .dword $00000103 +0017ECr 1 D2 0F 00 00 .dword $00000fd2 +0017F0r 1 D3 0F 00 00 .dword $00000fd3 +0017F4r 1 D4 0F 00 00 .dword $00000fd4 +0017F8r 1 D5 0F 00 00 .dword $00000fd5 +0017FCr 1 D6 0F 00 00 .dword $00000fd6 +001800r 1 D7 0F 00 00 .dword $00000fd7 +001804r 1 D8 0F 00 00 .dword $00000fd8 +001808r 1 D9 0F 00 00 .dword $00000fd9 +00180Cr 1 DA 0F 00 00 .dword $00000fda +001810r 1 DB 0F 00 00 .dword $00000fdb +001814r 1 DC 0F 00 00 .dword $00000fdc +001818r 1 DD 0F 00 00 .dword $00000fdd +00181Cr 1 DE 0F 00 00 .dword $00000fde +001820r 1 DF 0F 00 00 .dword $00000fdf +001824r 1 E0 0F 00 00 .dword $00000fe0 +001828r 1 E1 0F 00 00 .dword $00000fe1 +00182Cr 1 E2 0F 00 00 .dword $00000fe2 +001830r 1 E3 0F 00 00 .dword $00000fe3 +001834r 1 E4 0F 00 00 .dword $00000fe4 +001838r 1 E5 0F 00 00 .dword $00000fe5 +00183Cr 1 E6 0F 00 00 .dword $00000fe6 +001840r 1 E7 0F 00 00 .dword $00000fe7 +001844r 1 E8 0F 00 00 .dword $00000fe8 +001848r 1 E9 0F 00 00 .dword $00000fe9 +00184Cr 1 EA 0F 00 00 .dword $00000fea +001850r 1 EB 0F 00 00 .dword $00000feb +001854r 1 EC 0F 00 00 .dword $00000fec +001858r 1 ED 0F 00 00 .dword $00000fed +00185Cr 1 EE 0F 00 00 .dword $00000fee +001860r 1 EF 0F 00 00 .dword $00000fef +001864r 1 F0 0F 00 00 .dword $00000ff0 +001868r 1 F1 0F 00 00 .dword $00000ff1 +00186Cr 1 F2 0F 00 00 .dword $00000ff2 +001870r 1 F3 0F 00 00 .dword $00000ff3 +001874r 1 F4 0F 00 00 .dword $00000ff4 +001878r 1 F5 0F 00 00 .dword $00000ff5 +00187Cr 1 F6 0F 00 00 .dword $00000ff6 +001880r 1 F7 0F 00 00 .dword $00000ff7 +001884r 1 F8 0F 00 00 .dword $00000ff8 +001888r 1 F9 0F 00 00 .dword $00000ff9 +00188Cr 1 FA 0F 00 00 .dword $00000ffa +001890r 1 FB 0F 00 00 .dword $00000ffb +001894r 1 FC 0F 00 00 .dword $00000ffc +001898r 1 FD 0F 00 00 .dword $00000ffd +00189Cr 1 FE 0F 00 00 .dword $00000ffe +0018A0r 1 FF 0F 00 00 .dword $00000fff +0018A4r 1 00 10 00 00 .dword $00001000 +0018A8r 1 01 10 00 00 .dword $00001001 +0018ACr 1 02 10 00 00 .dword $00001002 +0018B0r 1 03 10 00 00 .dword $00001003 +0018B4r 1 04 10 00 00 .dword $00001004 +0018B8r 1 05 10 00 00 .dword $00001005 +0018BCr 1 06 10 00 00 .dword $00001006 +0018C0r 1 07 10 00 00 .dword $00001007 +0018C4r 1 08 10 00 00 .dword $00001008 +0018C8r 1 F0 7F 00 00 .dword $00007ff0 +0018CCr 1 F1 7F 00 00 .dword $00007ff1 +0018D0r 1 F2 7F 00 00 .dword $00007ff2 +0018D4r 1 F3 7F 00 00 .dword $00007ff3 +0018D8r 1 F4 7F 00 00 .dword $00007ff4 +0018DCr 1 F5 7F 00 00 .dword $00007ff5 +0018E0r 1 F6 7F 00 00 .dword $00007ff6 +0018E4r 1 F7 7F 00 00 .dword $00007ff7 +0018E8r 1 F8 7F 00 00 .dword $00007ff8 +0018ECr 1 F9 7F 00 00 .dword $00007ff9 +0018F0r 1 FA 7F 00 00 .dword $00007ffa +0018F4r 1 FB 7F 00 00 .dword $00007ffb +0018F8r 1 FC 7F 00 00 .dword $00007ffc +0018FCr 1 FD 7F 00 00 .dword $00007ffd +001900r 1 FE 7F 00 00 .dword $00007ffe +001904r 1 FF 7F 00 00 .dword $00007fff +001908r 1 00 80 00 00 .dword $00008000 +00190Cr 1 01 80 00 00 .dword $00008001 +001910r 1 02 80 00 00 .dword $00008002 +001914r 1 03 80 00 00 .dword $00008003 +001918r 1 04 80 00 00 .dword $00008004 +00191Cr 1 05 80 00 00 .dword $00008005 +001920r 1 06 80 00 00 .dword $00008006 +001924r 1 07 80 00 00 .dword $00008007 +001928r 1 08 80 00 00 .dword $00008008 +00192Cr 1 09 80 00 00 .dword $00008009 +001930r 1 0A 80 00 00 .dword $0000800a +001934r 1 0B 80 00 00 .dword $0000800b +001938r 1 E1 9F 00 00 .dword $00009fe1 +00193Cr 1 E2 9F 00 00 .dword $00009fe2 +001940r 1 E3 9F 00 00 .dword $00009fe3 +001944r 1 E4 9F 00 00 .dword $00009fe4 +001948r 1 E5 9F 00 00 .dword $00009fe5 +00194Cr 1 E6 9F 00 00 .dword $00009fe6 +001950r 1 E7 9F 00 00 .dword $00009fe7 +001954r 1 E8 9F 00 00 .dword $00009fe8 +001958r 1 E9 9F 00 00 .dword $00009fe9 +00195Cr 1 EA 9F 00 00 .dword $00009fea +001960r 1 EB 9F 00 00 .dword $00009feb +001964r 1 EC 9F 00 00 .dword $00009fec +001968r 1 ED 9F 00 00 .dword $00009fed +00196Cr 1 EE 9F 00 00 .dword $00009fee +001970r 1 EF 9F 00 00 .dword $00009fef +001974r 1 F0 9F 00 00 .dword $00009ff0 +001978r 1 F1 9F 00 00 .dword $00009ff1 +00197Cr 1 F2 9F 00 00 .dword $00009ff2 +001980r 1 F3 9F 00 00 .dword $00009ff3 +001984r 1 F4 9F 00 00 .dword $00009ff4 +001988r 1 F5 9F 00 00 .dword $00009ff5 +00198Cr 1 F6 9F 00 00 .dword $00009ff6 +001990r 1 F7 9F 00 00 .dword $00009ff7 +001994r 1 F8 9F 00 00 .dword $00009ff8 +001998r 1 F9 9F 00 00 .dword $00009ff9 +00199Cr 1 FA 9F 00 00 .dword $00009ffa +0019A0r 1 FB 9F 00 00 .dword $00009ffb +0019A4r 1 FC 9F 00 00 .dword $00009ffc +0019A8r 1 FD 9F 00 00 .dword $00009ffd +0019ACr 1 FE 9F 00 00 .dword $00009ffe +0019B0r 1 FF 9F 00 00 .dword $00009fff +0019B4r 1 00 A0 00 00 .dword $0000a000 +0019B8r 1 01 A0 00 00 .dword $0000a001 +0019BCr 1 02 A0 00 00 .dword $0000a002 +0019C0r 1 03 A0 00 00 .dword $0000a003 +0019C4r 1 04 A0 00 00 .dword $0000a004 +0019C8r 1 05 A0 00 00 .dword $0000a005 +0019CCr 1 06 A0 00 00 .dword $0000a006 +0019D0r 1 07 A0 00 00 .dword $0000a007 +0019D4r 1 08 A0 00 00 .dword $0000a008 +0019D8r 1 09 A0 00 00 .dword $0000a009 +0019DCr 1 0A A0 00 00 .dword $0000a00a +0019E0r 1 0B A0 00 00 .dword $0000a00b +0019E4r 1 0C A0 00 00 .dword $0000a00c +0019E8r 1 0D A0 00 00 .dword $0000a00d +0019ECr 1 0E A0 00 00 .dword $0000a00e +0019F0r 1 0F A0 00 00 .dword $0000a00f +0019F4r 1 E1 AF 00 00 .dword $0000afe1 +0019F8r 1 E2 AF 00 00 .dword $0000afe2 +0019FCr 1 E3 AF 00 00 .dword $0000afe3 +001A00r 1 E4 AF 00 00 .dword $0000afe4 +001A04r 1 E5 AF 00 00 .dword $0000afe5 +001A08r 1 E6 AF 00 00 .dword $0000afe6 +001A0Cr 1 E7 AF 00 00 .dword $0000afe7 +001A10r 1 E8 AF 00 00 .dword $0000afe8 +001A14r 1 E9 AF 00 00 .dword $0000afe9 +001A18r 1 EA AF 00 00 .dword $0000afea +001A1Cr 1 EB AF 00 00 .dword $0000afeb +001A20r 1 EC AF 00 00 .dword $0000afec +001A24r 1 ED AF 00 00 .dword $0000afed +001A28r 1 EE AF 00 00 .dword $0000afee +001A2Cr 1 EF AF 00 00 .dword $0000afef +001A30r 1 F0 AF 00 00 .dword $0000aff0 +001A34r 1 F1 AF 00 00 .dword $0000aff1 +001A38r 1 F2 AF 00 00 .dword $0000aff2 +001A3Cr 1 F3 AF 00 00 .dword $0000aff3 +001A40r 1 F4 AF 00 00 .dword $0000aff4 +001A44r 1 F5 AF 00 00 .dword $0000aff5 +001A48r 1 F6 AF 00 00 .dword $0000aff6 +001A4Cr 1 F7 AF 00 00 .dword $0000aff7 +001A50r 1 F8 AF 00 00 .dword $0000aff8 +001A54r 1 F9 AF 00 00 .dword $0000aff9 +001A58r 1 FA AF 00 00 .dword $0000affa +001A5Cr 1 FB AF 00 00 .dword $0000affb +001A60r 1 FC AF 00 00 .dword $0000affc +001A64r 1 FD AF 00 00 .dword $0000affd +001A68r 1 FE AF 00 00 .dword $0000affe +001A6Cr 1 FF AF 00 00 .dword $0000afff +001A70r 1 00 B0 00 00 .dword $0000b000 +001A74r 1 01 B0 00 00 .dword $0000b001 +001A78r 1 02 B0 00 00 .dword $0000b002 +001A7Cr 1 03 B0 00 00 .dword $0000b003 +001A80r 1 04 B0 00 00 .dword $0000b004 +001A84r 1 05 B0 00 00 .dword $0000b005 +001A88r 1 06 B0 00 00 .dword $0000b006 +001A8Cr 1 07 B0 00 00 .dword $0000b007 +001A90r 1 08 B0 00 00 .dword $0000b008 +001A94r 1 09 B0 00 00 .dword $0000b009 +001A98r 1 0A B0 00 00 .dword $0000b00a +001A9Cr 1 0B B0 00 00 .dword $0000b00b +001AA0r 1 0C B0 00 00 .dword $0000b00c +001AA4r 1 0D B0 00 00 .dword $0000b00d +001AA8r 1 0E B0 00 00 .dword $0000b00e +001AACr 1 0F B0 00 00 .dword $0000b00f +001AB0r 1 E1 FF 00 00 .dword $0000ffe1 +001AB4r 1 E2 FF 00 00 .dword $0000ffe2 +001AB8r 1 E3 FF 00 00 .dword $0000ffe3 +001ABCr 1 E4 FF 00 00 .dword $0000ffe4 +001AC0r 1 E5 FF 00 00 .dword $0000ffe5 +001AC4r 1 E6 FF 00 00 .dword $0000ffe6 +001AC8r 1 E7 FF 00 00 .dword $0000ffe7 +001ACCr 1 E8 FF 00 00 .dword $0000ffe8 +001AD0r 1 E9 FF 00 00 .dword $0000ffe9 +001AD4r 1 EA FF 00 00 .dword $0000ffea +001AD8r 1 EB FF 00 00 .dword $0000ffeb +001ADCr 1 EC FF 00 00 .dword $0000ffec +001AE0r 1 ED FF 00 00 .dword $0000ffed +001AE4r 1 EE FF 00 00 .dword $0000ffee +001AE8r 1 EF FF 00 00 .dword $0000ffef +001AECr 1 F0 FF 00 00 .dword $0000fff0 +001AF0r 1 F1 FF 00 00 .dword $0000fff1 +001AF4r 1 F2 FF 00 00 .dword $0000fff2 +001AF8r 1 F3 FF 00 00 .dword $0000fff3 +001AFCr 1 F4 FF 00 00 .dword $0000fff4 +001B00r 1 F5 FF 00 00 .dword $0000fff5 +001B04r 1 F6 FF 00 00 .dword $0000fff6 +001B08r 1 F7 FF 00 00 .dword $0000fff7 +001B0Cr 1 F8 FF 00 00 .dword $0000fff8 +001B10r 1 F9 FF 00 00 .dword $0000fff9 +001B14r 1 FA FF 00 00 .dword $0000fffa +001B18r 1 FB FF 00 00 .dword $0000fffb +001B1Cr 1 FC FF 00 00 .dword $0000fffc +001B20r 1 FD FF 00 00 .dword $0000fffd +001B24r 1 FE FF 00 00 .dword $0000fffe +001B28r 1 FF FF 00 00 .dword $0000ffff +001B2Cr 1 00 00 01 00 .dword $00010000 +001B30r 1 01 00 01 00 .dword $00010001 +001B34r 1 02 00 01 00 .dword $00010002 +001B38r 1 03 00 01 00 .dword $00010003 +001B3Cr 1 04 00 01 00 .dword $00010004 +001B40r 1 05 00 01 00 .dword $00010005 +001B44r 1 06 00 01 00 .dword $00010006 +001B48r 1 07 00 01 00 .dword $00010007 +001B4Cr 1 08 00 01 00 .dword $00010008 +001B50r 1 09 00 01 00 .dword $00010009 +001B54r 1 0A 00 01 00 .dword $0001000a +001B58r 1 0B 00 01 00 .dword $0001000b +001B5Cr 1 0C 00 01 00 .dword $0001000c +001B60r 1 0D 00 01 00 .dword $0001000d +001B64r 1 0E 00 01 00 .dword $0001000e +001B68r 1 0F 00 01 00 .dword $0001000f +001B6Cr 1 F0 FF FF 7F .dword $7ffffff0 +001B70r 1 F1 FF FF 7F .dword $7ffffff1 +001B74r 1 F2 FF FF 7F .dword $7ffffff2 +001B78r 1 F3 FF FF 7F .dword $7ffffff3 +001B7Cr 1 F4 FF FF 7F .dword $7ffffff4 +001B80r 1 F5 FF FF 7F .dword $7ffffff5 +001B84r 1 F6 FF FF 7F .dword $7ffffff6 +001B88r 1 F7 FF FF 7F .dword $7ffffff7 +001B8Cr 1 F8 FF FF 7F .dword $7ffffff8 +001B90r 1 F9 FF FF 7F .dword $7ffffff9 +001B94r 1 FA FF FF 7F .dword $7ffffffa +001B98r 1 FB FF FF 7F .dword $7ffffffb +001B9Cr 1 FC FF FF 7F .dword $7ffffffc +001BA0r 1 FD FF FF 7F .dword $7ffffffd +001BA4r 1 FE FF FF 7F .dword $7ffffffe +001BA8r 1 FF FF FF 7F .dword $7fffffff +001BACr 1 00 00 00 80 .dword $80000000 +001BB0r 1 01 00 00 80 .dword $80000001 +001BB4r 1 02 00 00 80 .dword $80000002 +001BB8r 1 03 00 00 80 .dword $80000003 +001BBCr 1 04 00 00 80 .dword $80000004 +001BC0r 1 05 00 00 80 .dword $80000005 +001BC4r 1 06 00 00 80 .dword $80000006 +001BC8r 1 07 00 00 80 .dword $80000007 +001BCCr 1 08 00 00 80 .dword $80000008 +001BD0r 1 09 00 00 80 .dword $80000009 +001BD4r 1 0A 00 00 80 .dword $8000000a +001BD8r 1 0B 00 00 80 .dword $8000000b +001BDCr 1 0C 00 00 80 .dword $8000000c +001BE0r 1 0D 00 00 80 .dword $8000000d +001BE4r 1 0E 00 00 80 .dword $8000000e +001BE8r 1 0F 00 00 80 .dword $8000000f +001BECr 1 F0 FF FF 9F .dword $9ffffff0 +001BF0r 1 F1 FF FF 9F .dword $9ffffff1 +001BF4r 1 F2 FF FF 9F .dword $9ffffff2 +001BF8r 1 F3 FF FF 9F .dword $9ffffff3 +001BFCr 1 F4 FF FF 9F .dword $9ffffff4 +001C00r 1 F5 FF FF 9F .dword $9ffffff5 +001C04r 1 F6 FF FF 9F .dword $9ffffff6 +001C08r 1 F7 FF FF 9F .dword $9ffffff7 +001C0Cr 1 F8 FF FF 9F .dword $9ffffff8 +001C10r 1 F9 FF FF 9F .dword $9ffffff9 +001C14r 1 FA FF FF 9F .dword $9ffffffa +001C18r 1 FB FF FF 9F .dword $9ffffffb +001C1Cr 1 FC FF FF 9F .dword $9ffffffc +001C20r 1 FD FF FF 9F .dword $9ffffffd +001C24r 1 FE FF FF 9F .dword $9ffffffe +001C28r 1 FF FF FF 9F .dword $9fffffff +001C2Cr 1 00 00 00 A0 .dword $a0000000 +001C30r 1 01 00 00 A0 .dword $a0000001 +001C34r 1 02 00 00 A0 .dword $a0000002 +001C38r 1 03 00 00 A0 .dword $a0000003 +001C3Cr 1 04 00 00 A0 .dword $a0000004 +001C40r 1 05 00 00 A0 .dword $a0000005 +001C44r 1 06 00 00 A0 .dword $a0000006 +001C48r 1 07 00 00 A0 .dword $a0000007 +001C4Cr 1 08 00 00 A0 .dword $a0000008 +001C50r 1 09 00 00 A0 .dword $a0000009 +001C54r 1 0A 00 00 A0 .dword $a000000a +001C58r 1 0B 00 00 A0 .dword $a000000b +001C5Cr 1 0C 00 00 A0 .dword $a000000c +001C60r 1 0D 00 00 A0 .dword $a000000d +001C64r 1 0E 00 00 A0 .dword $a000000e +001C68r 1 0F 00 00 A0 .dword $a000000f +001C6Cr 1 F0 FF FF FF .dword $fffffff0 +001C70r 1 F1 FF FF FF .dword $fffffff1 +001C74r 1 F2 FF FF FF .dword $fffffff2 +001C78r 1 F3 FF FF FF .dword $fffffff3 +001C7Cr 1 F4 FF FF FF .dword $fffffff4 +001C80r 1 F5 FF FF FF .dword $fffffff5 +001C84r 1 F6 FF FF FF .dword $fffffff6 +001C88r 1 F7 FF FF FF .dword $fffffff7 +001C8Cr 1 F8 FF FF FF .dword $fffffff8 +001C90r 1 F9 FF FF FF .dword $fffffff9 +001C94r 1 FA FF FF FF .dword $fffffffa +001C98r 1 FB FF FF FF .dword $fffffffb +001C9Cr 1 FC FF FF FF .dword $fffffffc +001CA0r 1 FD FF FF FF .dword $fffffffd +001CA4r 1 FE FF FF FF .dword $fffffffe +001CA8r 1 FF FF FF FF .dword $ffffffff +001CACr 1 +001CACr 1 ; 8-digit hex values, uppercase +001CACr 1 00 00 00 00 .dword $00000000 +001CB0r 1 01 00 00 00 .dword $00000001 +001CB4r 1 02 00 00 00 .dword $00000002 +001CB8r 1 03 00 00 00 .dword $00000003 +001CBCr 1 04 00 00 00 .dword $00000004 +001CC0r 1 05 00 00 00 .dword $00000005 +001CC4r 1 06 00 00 00 .dword $00000006 +001CC8r 1 07 00 00 00 .dword $00000007 +001CCCr 1 08 00 00 00 .dword $00000008 +001CD0r 1 09 00 00 00 .dword $00000009 +001CD4r 1 0A 00 00 00 .dword $0000000A +001CD8r 1 0B 00 00 00 .dword $0000000B +001CDCr 1 0C 00 00 00 .dword $0000000C +001CE0r 1 0D 00 00 00 .dword $0000000D +001CE4r 1 0E 00 00 00 .dword $0000000E +001CE8r 1 0F 00 00 00 .dword $0000000F +001CECr 1 10 00 00 00 .dword $00000010 +001CF0r 1 11 00 00 00 .dword $00000011 +001CF4r 1 12 00 00 00 .dword $00000012 +001CF8r 1 13 00 00 00 .dword $00000013 +001CFCr 1 70 00 00 00 .dword $00000070 +001D00r 1 71 00 00 00 .dword $00000071 +001D04r 1 72 00 00 00 .dword $00000072 +001D08r 1 73 00 00 00 .dword $00000073 +001D0Cr 1 74 00 00 00 .dword $00000074 +001D10r 1 75 00 00 00 .dword $00000075 +001D14r 1 76 00 00 00 .dword $00000076 +001D18r 1 77 00 00 00 .dword $00000077 +001D1Cr 1 78 00 00 00 .dword $00000078 +001D20r 1 79 00 00 00 .dword $00000079 +001D24r 1 7A 00 00 00 .dword $0000007A +001D28r 1 7B 00 00 00 .dword $0000007B +001D2Cr 1 7C 00 00 00 .dword $0000007C +001D30r 1 7D 00 00 00 .dword $0000007D +001D34r 1 7E 00 00 00 .dword $0000007E +001D38r 1 7F 00 00 00 .dword $0000007F +001D3Cr 1 80 00 00 00 .dword $00000080 +001D40r 1 81 00 00 00 .dword $00000081 +001D44r 1 82 00 00 00 .dword $00000082 +001D48r 1 83 00 00 00 .dword $00000083 +001D4Cr 1 84 00 00 00 .dword $00000084 +001D50r 1 85 00 00 00 .dword $00000085 +001D54r 1 86 00 00 00 .dword $00000086 +001D58r 1 F0 00 00 00 .dword $000000F0 +001D5Cr 1 F1 00 00 00 .dword $000000F1 +001D60r 1 F2 00 00 00 .dword $000000F2 +001D64r 1 F3 00 00 00 .dword $000000F3 +001D68r 1 F4 00 00 00 .dword $000000F4 +001D6Cr 1 F5 00 00 00 .dword $000000F5 +001D70r 1 F6 00 00 00 .dword $000000F6 +001D74r 1 F7 00 00 00 .dword $000000F7 +001D78r 1 F8 00 00 00 .dword $000000F8 +001D7Cr 1 F9 00 00 00 .dword $000000F9 +001D80r 1 FA 00 00 00 .dword $000000FA +001D84r 1 FB 00 00 00 .dword $000000FB +001D88r 1 FC 00 00 00 .dword $000000FC +001D8Cr 1 FD 00 00 00 .dword $000000FD +001D90r 1 FE 00 00 00 .dword $000000FE +001D94r 1 FF 00 00 00 .dword $000000FF +001D98r 1 00 01 00 00 .dword $00000100 +001D9Cr 1 01 01 00 00 .dword $00000101 +001DA0r 1 02 01 00 00 .dword $00000102 +001DA4r 1 03 01 00 00 .dword $00000103 +001DA8r 1 D2 0F 00 00 .dword $00000FD2 +001DACr 1 D3 0F 00 00 .dword $00000FD3 +001DB0r 1 D4 0F 00 00 .dword $00000FD4 +001DB4r 1 D5 0F 00 00 .dword $00000FD5 +001DB8r 1 D6 0F 00 00 .dword $00000FD6 +001DBCr 1 D7 0F 00 00 .dword $00000FD7 +001DC0r 1 D8 0F 00 00 .dword $00000FD8 +001DC4r 1 D9 0F 00 00 .dword $00000FD9 +001DC8r 1 DA 0F 00 00 .dword $00000FDA +001DCCr 1 DB 0F 00 00 .dword $00000FDB +001DD0r 1 DC 0F 00 00 .dword $00000FDC +001DD4r 1 DD 0F 00 00 .dword $00000FDD +001DD8r 1 DE 0F 00 00 .dword $00000FDE +001DDCr 1 DF 0F 00 00 .dword $00000FDF +001DE0r 1 E0 0F 00 00 .dword $00000FE0 +001DE4r 1 E1 0F 00 00 .dword $00000FE1 +001DE8r 1 E2 0F 00 00 .dword $00000FE2 +001DECr 1 E3 0F 00 00 .dword $00000FE3 +001DF0r 1 E4 0F 00 00 .dword $00000FE4 +001DF4r 1 E5 0F 00 00 .dword $00000FE5 +001DF8r 1 E6 0F 00 00 .dword $00000FE6 +001DFCr 1 E7 0F 00 00 .dword $00000FE7 +001E00r 1 E8 0F 00 00 .dword $00000FE8 +001E04r 1 E9 0F 00 00 .dword $00000FE9 +001E08r 1 EA 0F 00 00 .dword $00000FEA +001E0Cr 1 EB 0F 00 00 .dword $00000FEB +001E10r 1 EC 0F 00 00 .dword $00000FEC +001E14r 1 ED 0F 00 00 .dword $00000FED +001E18r 1 EE 0F 00 00 .dword $00000FEE +001E1Cr 1 EF 0F 00 00 .dword $00000FEF +001E20r 1 F0 0F 00 00 .dword $00000FF0 +001E24r 1 F1 0F 00 00 .dword $00000FF1 +001E28r 1 F2 0F 00 00 .dword $00000FF2 +001E2Cr 1 F3 0F 00 00 .dword $00000FF3 +001E30r 1 F4 0F 00 00 .dword $00000FF4 +001E34r 1 F5 0F 00 00 .dword $00000FF5 +001E38r 1 F6 0F 00 00 .dword $00000FF6 +001E3Cr 1 F7 0F 00 00 .dword $00000FF7 +001E40r 1 F8 0F 00 00 .dword $00000FF8 +001E44r 1 F9 0F 00 00 .dword $00000FF9 +001E48r 1 FA 0F 00 00 .dword $00000FFA +001E4Cr 1 FB 0F 00 00 .dword $00000FFB +001E50r 1 FC 0F 00 00 .dword $00000FFC +001E54r 1 FD 0F 00 00 .dword $00000FFD +001E58r 1 FE 0F 00 00 .dword $00000FFE +001E5Cr 1 FF 0F 00 00 .dword $00000FFF +001E60r 1 00 10 00 00 .dword $00001000 +001E64r 1 01 10 00 00 .dword $00001001 +001E68r 1 02 10 00 00 .dword $00001002 +001E6Cr 1 03 10 00 00 .dword $00001003 +001E70r 1 04 10 00 00 .dword $00001004 +001E74r 1 05 10 00 00 .dword $00001005 +001E78r 1 06 10 00 00 .dword $00001006 +001E7Cr 1 07 10 00 00 .dword $00001007 +001E80r 1 08 10 00 00 .dword $00001008 +001E84r 1 F0 7F 00 00 .dword $00007FF0 +001E88r 1 F1 7F 00 00 .dword $00007FF1 +001E8Cr 1 F2 7F 00 00 .dword $00007FF2 +001E90r 1 F3 7F 00 00 .dword $00007FF3 +001E94r 1 F4 7F 00 00 .dword $00007FF4 +001E98r 1 F5 7F 00 00 .dword $00007FF5 +001E9Cr 1 F6 7F 00 00 .dword $00007FF6 +001EA0r 1 F7 7F 00 00 .dword $00007FF7 +001EA4r 1 F8 7F 00 00 .dword $00007FF8 +001EA8r 1 F9 7F 00 00 .dword $00007FF9 +001EACr 1 FA 7F 00 00 .dword $00007FFA +001EB0r 1 FB 7F 00 00 .dword $00007FFB +001EB4r 1 FC 7F 00 00 .dword $00007FFC +001EB8r 1 FD 7F 00 00 .dword $00007FFD +001EBCr 1 FE 7F 00 00 .dword $00007FFE +001EC0r 1 FF 7F 00 00 .dword $00007FFF +001EC4r 1 00 80 00 00 .dword $00008000 +001EC8r 1 01 80 00 00 .dword $00008001 +001ECCr 1 02 80 00 00 .dword $00008002 +001ED0r 1 03 80 00 00 .dword $00008003 +001ED4r 1 04 80 00 00 .dword $00008004 +001ED8r 1 05 80 00 00 .dword $00008005 +001EDCr 1 06 80 00 00 .dword $00008006 +001EE0r 1 07 80 00 00 .dword $00008007 +001EE4r 1 08 80 00 00 .dword $00008008 +001EE8r 1 09 80 00 00 .dword $00008009 +001EECr 1 0A 80 00 00 .dword $0000800A +001EF0r 1 0B 80 00 00 .dword $0000800B +001EF4r 1 E1 9F 00 00 .dword $00009FE1 +001EF8r 1 E2 9F 00 00 .dword $00009FE2 +001EFCr 1 E3 9F 00 00 .dword $00009FE3 +001F00r 1 E4 9F 00 00 .dword $00009FE4 +001F04r 1 E5 9F 00 00 .dword $00009FE5 +001F08r 1 E6 9F 00 00 .dword $00009FE6 +001F0Cr 1 E7 9F 00 00 .dword $00009FE7 +001F10r 1 E8 9F 00 00 .dword $00009FE8 +001F14r 1 E9 9F 00 00 .dword $00009FE9 +001F18r 1 EA 9F 00 00 .dword $00009FEA +001F1Cr 1 EB 9F 00 00 .dword $00009FEB +001F20r 1 EC 9F 00 00 .dword $00009FEC +001F24r 1 ED 9F 00 00 .dword $00009FED +001F28r 1 EE 9F 00 00 .dword $00009FEE +001F2Cr 1 EF 9F 00 00 .dword $00009FEF +001F30r 1 F0 9F 00 00 .dword $00009FF0 +001F34r 1 F1 9F 00 00 .dword $00009FF1 +001F38r 1 F2 9F 00 00 .dword $00009FF2 +001F3Cr 1 F3 9F 00 00 .dword $00009FF3 +001F40r 1 F4 9F 00 00 .dword $00009FF4 +001F44r 1 F5 9F 00 00 .dword $00009FF5 +001F48r 1 F6 9F 00 00 .dword $00009FF6 +001F4Cr 1 F7 9F 00 00 .dword $00009FF7 +001F50r 1 F8 9F 00 00 .dword $00009FF8 +001F54r 1 F9 9F 00 00 .dword $00009FF9 +001F58r 1 FA 9F 00 00 .dword $00009FFA +001F5Cr 1 FB 9F 00 00 .dword $00009FFB +001F60r 1 FC 9F 00 00 .dword $00009FFC +001F64r 1 FD 9F 00 00 .dword $00009FFD +001F68r 1 FE 9F 00 00 .dword $00009FFE +001F6Cr 1 FF 9F 00 00 .dword $00009FFF +001F70r 1 00 A0 00 00 .dword $0000A000 +001F74r 1 01 A0 00 00 .dword $0000A001 +001F78r 1 02 A0 00 00 .dword $0000A002 +001F7Cr 1 03 A0 00 00 .dword $0000A003 +001F80r 1 04 A0 00 00 .dword $0000A004 +001F84r 1 05 A0 00 00 .dword $0000A005 +001F88r 1 06 A0 00 00 .dword $0000A006 +001F8Cr 1 07 A0 00 00 .dword $0000A007 +001F90r 1 08 A0 00 00 .dword $0000A008 +001F94r 1 09 A0 00 00 .dword $0000A009 +001F98r 1 0A A0 00 00 .dword $0000A00A +001F9Cr 1 0B A0 00 00 .dword $0000A00B +001FA0r 1 0C A0 00 00 .dword $0000A00C +001FA4r 1 0D A0 00 00 .dword $0000A00D +001FA8r 1 0E A0 00 00 .dword $0000A00E +001FACr 1 0F A0 00 00 .dword $0000A00F +001FB0r 1 E1 AF 00 00 .dword $0000AFE1 +001FB4r 1 E2 AF 00 00 .dword $0000AFE2 +001FB8r 1 E3 AF 00 00 .dword $0000AFE3 +001FBCr 1 E4 AF 00 00 .dword $0000AFE4 +001FC0r 1 E5 AF 00 00 .dword $0000AFE5 +001FC4r 1 E6 AF 00 00 .dword $0000AFE6 +001FC8r 1 E7 AF 00 00 .dword $0000AFE7 +001FCCr 1 E8 AF 00 00 .dword $0000AFE8 +001FD0r 1 E9 AF 00 00 .dword $0000AFE9 +001FD4r 1 EA AF 00 00 .dword $0000AFEA +001FD8r 1 EB AF 00 00 .dword $0000AFEB +001FDCr 1 EC AF 00 00 .dword $0000AFEC +001FE0r 1 ED AF 00 00 .dword $0000AFED +001FE4r 1 EE AF 00 00 .dword $0000AFEE +001FE8r 1 EF AF 00 00 .dword $0000AFEF +001FECr 1 F0 AF 00 00 .dword $0000AFF0 +001FF0r 1 F1 AF 00 00 .dword $0000AFF1 +001FF4r 1 F2 AF 00 00 .dword $0000AFF2 +001FF8r 1 F3 AF 00 00 .dword $0000AFF3 +001FFCr 1 F4 AF 00 00 .dword $0000AFF4 +002000r 1 F5 AF 00 00 .dword $0000AFF5 +002004r 1 F6 AF 00 00 .dword $0000AFF6 +002008r 1 F7 AF 00 00 .dword $0000AFF7 +00200Cr 1 F8 AF 00 00 .dword $0000AFF8 +002010r 1 F9 AF 00 00 .dword $0000AFF9 +002014r 1 FA AF 00 00 .dword $0000AFFA +002018r 1 FB AF 00 00 .dword $0000AFFB +00201Cr 1 FC AF 00 00 .dword $0000AFFC +002020r 1 FD AF 00 00 .dword $0000AFFD +002024r 1 FE AF 00 00 .dword $0000AFFE +002028r 1 FF AF 00 00 .dword $0000AFFF +00202Cr 1 00 B0 00 00 .dword $0000B000 +002030r 1 01 B0 00 00 .dword $0000B001 +002034r 1 02 B0 00 00 .dword $0000B002 +002038r 1 03 B0 00 00 .dword $0000B003 +00203Cr 1 04 B0 00 00 .dword $0000B004 +002040r 1 05 B0 00 00 .dword $0000B005 +002044r 1 06 B0 00 00 .dword $0000B006 +002048r 1 07 B0 00 00 .dword $0000B007 +00204Cr 1 08 B0 00 00 .dword $0000B008 +002050r 1 09 B0 00 00 .dword $0000B009 +002054r 1 0A B0 00 00 .dword $0000B00A +002058r 1 0B B0 00 00 .dword $0000B00B +00205Cr 1 0C B0 00 00 .dword $0000B00C +002060r 1 0D B0 00 00 .dword $0000B00D +002064r 1 0E B0 00 00 .dword $0000B00E +002068r 1 0F B0 00 00 .dword $0000B00F +00206Cr 1 E1 FF 00 00 .dword $0000FFE1 +002070r 1 E2 FF 00 00 .dword $0000FFE2 +002074r 1 E3 FF 00 00 .dword $0000FFE3 +002078r 1 E4 FF 00 00 .dword $0000FFE4 +00207Cr 1 E5 FF 00 00 .dword $0000FFE5 +002080r 1 E6 FF 00 00 .dword $0000FFE6 +002084r 1 E7 FF 00 00 .dword $0000FFE7 +002088r 1 E8 FF 00 00 .dword $0000FFE8 +00208Cr 1 E9 FF 00 00 .dword $0000FFE9 +002090r 1 EA FF 00 00 .dword $0000FFEA +002094r 1 EB FF 00 00 .dword $0000FFEB +002098r 1 EC FF 00 00 .dword $0000FFEC +00209Cr 1 ED FF 00 00 .dword $0000FFED +0020A0r 1 EE FF 00 00 .dword $0000FFEE +0020A4r 1 EF FF 00 00 .dword $0000FFEF +0020A8r 1 F0 FF 00 00 .dword $0000FFF0 +0020ACr 1 F1 FF 00 00 .dword $0000FFF1 +0020B0r 1 F2 FF 00 00 .dword $0000FFF2 +0020B4r 1 F3 FF 00 00 .dword $0000FFF3 +0020B8r 1 F4 FF 00 00 .dword $0000FFF4 +0020BCr 1 F5 FF 00 00 .dword $0000FFF5 +0020C0r 1 F6 FF 00 00 .dword $0000FFF6 +0020C4r 1 F7 FF 00 00 .dword $0000FFF7 +0020C8r 1 F8 FF 00 00 .dword $0000FFF8 +0020CCr 1 F9 FF 00 00 .dword $0000FFF9 +0020D0r 1 FA FF 00 00 .dword $0000FFFA +0020D4r 1 FB FF 00 00 .dword $0000FFFB +0020D8r 1 FC FF 00 00 .dword $0000FFFC +0020DCr 1 FD FF 00 00 .dword $0000FFFD +0020E0r 1 FE FF 00 00 .dword $0000FFFE +0020E4r 1 FF FF 00 00 .dword $0000FFFF +0020E8r 1 00 00 01 00 .dword $00010000 +0020ECr 1 01 00 01 00 .dword $00010001 +0020F0r 1 02 00 01 00 .dword $00010002 +0020F4r 1 03 00 01 00 .dword $00010003 +0020F8r 1 04 00 01 00 .dword $00010004 +0020FCr 1 05 00 01 00 .dword $00010005 +002100r 1 06 00 01 00 .dword $00010006 +002104r 1 07 00 01 00 .dword $00010007 +002108r 1 08 00 01 00 .dword $00010008 +00210Cr 1 09 00 01 00 .dword $00010009 +002110r 1 0A 00 01 00 .dword $0001000A +002114r 1 0B 00 01 00 .dword $0001000B +002118r 1 0C 00 01 00 .dword $0001000C +00211Cr 1 0D 00 01 00 .dword $0001000D +002120r 1 0E 00 01 00 .dword $0001000E +002124r 1 0F 00 01 00 .dword $0001000F +002128r 1 F0 FF FF 7F .dword $7FFFFFF0 +00212Cr 1 F1 FF FF 7F .dword $7FFFFFF1 +002130r 1 F2 FF FF 7F .dword $7FFFFFF2 +002134r 1 F3 FF FF 7F .dword $7FFFFFF3 +002138r 1 F4 FF FF 7F .dword $7FFFFFF4 +00213Cr 1 F5 FF FF 7F .dword $7FFFFFF5 +002140r 1 F6 FF FF 7F .dword $7FFFFFF6 +002144r 1 F7 FF FF 7F .dword $7FFFFFF7 +002148r 1 F8 FF FF 7F .dword $7FFFFFF8 +00214Cr 1 F9 FF FF 7F .dword $7FFFFFF9 +002150r 1 FA FF FF 7F .dword $7FFFFFFA +002154r 1 FB FF FF 7F .dword $7FFFFFFB +002158r 1 FC FF FF 7F .dword $7FFFFFFC +00215Cr 1 FD FF FF 7F .dword $7FFFFFFD +002160r 1 FE FF FF 7F .dword $7FFFFFFE +002164r 1 FF FF FF 7F .dword $7FFFFFFF +002168r 1 00 00 00 80 .dword $80000000 +00216Cr 1 01 00 00 80 .dword $80000001 +002170r 1 02 00 00 80 .dword $80000002 +002174r 1 03 00 00 80 .dword $80000003 +002178r 1 04 00 00 80 .dword $80000004 +00217Cr 1 05 00 00 80 .dword $80000005 +002180r 1 06 00 00 80 .dword $80000006 +002184r 1 07 00 00 80 .dword $80000007 +002188r 1 08 00 00 80 .dword $80000008 +00218Cr 1 09 00 00 80 .dword $80000009 +002190r 1 0A 00 00 80 .dword $8000000A +002194r 1 0B 00 00 80 .dword $8000000B +002198r 1 0C 00 00 80 .dword $8000000C +00219Cr 1 0D 00 00 80 .dword $8000000D +0021A0r 1 0E 00 00 80 .dword $8000000E +0021A4r 1 0F 00 00 80 .dword $8000000F +0021A8r 1 F0 FF FF 9F .dword $9FFFFFF0 +0021ACr 1 F1 FF FF 9F .dword $9FFFFFF1 +0021B0r 1 F2 FF FF 9F .dword $9FFFFFF2 +0021B4r 1 F3 FF FF 9F .dword $9FFFFFF3 +0021B8r 1 F4 FF FF 9F .dword $9FFFFFF4 +0021BCr 1 F5 FF FF 9F .dword $9FFFFFF5 +0021C0r 1 F6 FF FF 9F .dword $9FFFFFF6 +0021C4r 1 F7 FF FF 9F .dword $9FFFFFF7 +0021C8r 1 F8 FF FF 9F .dword $9FFFFFF8 +0021CCr 1 F9 FF FF 9F .dword $9FFFFFF9 +0021D0r 1 FA FF FF 9F .dword $9FFFFFFA +0021D4r 1 FB FF FF 9F .dword $9FFFFFFB +0021D8r 1 FC FF FF 9F .dword $9FFFFFFC +0021DCr 1 FD FF FF 9F .dword $9FFFFFFD +0021E0r 1 FE FF FF 9F .dword $9FFFFFFE +0021E4r 1 FF FF FF 9F .dword $9FFFFFFF +0021E8r 1 00 00 00 A0 .dword $A0000000 +0021ECr 1 01 00 00 A0 .dword $A0000001 +0021F0r 1 02 00 00 A0 .dword $A0000002 +0021F4r 1 03 00 00 A0 .dword $A0000003 +0021F8r 1 04 00 00 A0 .dword $A0000004 +0021FCr 1 05 00 00 A0 .dword $A0000005 +002200r 1 06 00 00 A0 .dword $A0000006 +002204r 1 07 00 00 A0 .dword $A0000007 +002208r 1 08 00 00 A0 .dword $A0000008 +00220Cr 1 09 00 00 A0 .dword $A0000009 +002210r 1 0A 00 00 A0 .dword $A000000A +002214r 1 0B 00 00 A0 .dword $A000000B +002218r 1 0C 00 00 A0 .dword $A000000C +00221Cr 1 0D 00 00 A0 .dword $A000000D +002220r 1 0E 00 00 A0 .dword $A000000E +002224r 1 0F 00 00 A0 .dword $A000000F +002228r 1 F0 FF FF FF .dword $FFFFFFF0 +00222Cr 1 F1 FF FF FF .dword $FFFFFFF1 +002230r 1 F2 FF FF FF .dword $FFFFFFF2 +002234r 1 F3 FF FF FF .dword $FFFFFFF3 +002238r 1 F4 FF FF FF .dword $FFFFFFF4 +00223Cr 1 F5 FF FF FF .dword $FFFFFFF5 +002240r 1 F6 FF FF FF .dword $FFFFFFF6 +002244r 1 F7 FF FF FF .dword $FFFFFFF7 +002248r 1 F8 FF FF FF .dword $FFFFFFF8 +00224Cr 1 F9 FF FF FF .dword $FFFFFFF9 +002250r 1 FA FF FF FF .dword $FFFFFFFA +002254r 1 FB FF FF FF .dword $FFFFFFFB +002258r 1 FC FF FF FF .dword $FFFFFFFC +00225Cr 1 FD FF FF FF .dword $FFFFFFFD +002260r 1 FE FF FF FF .dword $FFFFFFFE +002264r 1 FF FF FF FF .dword $FFFFFFFF +002268r 1 +002268r 1 ; alternative hex values +002268r 1 00 00 00 00 .dword 0h +00226Cr 1 01 00 00 00 .dword 1h +002270r 1 02 00 00 00 .dword 2h +002274r 1 03 00 00 00 .dword 3h +002278r 1 04 00 00 00 .dword 4h +00227Cr 1 05 00 00 00 .dword 5h +002280r 1 06 00 00 00 .dword 6h +002284r 1 07 00 00 00 .dword 7h +002288r 1 08 00 00 00 .dword 8h +00228Cr 1 09 00 00 00 .dword 9h +002290r 1 0A 00 00 00 .dword 0ah +002294r 1 0B 00 00 00 .dword 0bh +002298r 1 0C 00 00 00 .dword 0ch +00229Cr 1 0D 00 00 00 .dword 0dh +0022A0r 1 0E 00 00 00 .dword 0eh +0022A4r 1 0F 00 00 00 .dword 0fh +0022A8r 1 10 00 00 00 .dword 10h +0022ACr 1 11 00 00 00 .dword 11h +0022B0r 1 12 00 00 00 .dword 12h +0022B4r 1 13 00 00 00 .dword 13h +0022B8r 1 70 00 00 00 .dword 70h +0022BCr 1 71 00 00 00 .dword 71h +0022C0r 1 72 00 00 00 .dword 72h +0022C4r 1 73 00 00 00 .dword 73h +0022C8r 1 74 00 00 00 .dword 74h +0022CCr 1 75 00 00 00 .dword 75h +0022D0r 1 76 00 00 00 .dword 76h +0022D4r 1 77 00 00 00 .dword 77h +0022D8r 1 78 00 00 00 .dword 78h +0022DCr 1 79 00 00 00 .dword 79h +0022E0r 1 7A 00 00 00 .dword 7ah +0022E4r 1 7B 00 00 00 .dword 7bh +0022E8r 1 7C 00 00 00 .dword 7ch +0022ECr 1 7D 00 00 00 .dword 7dh +0022F0r 1 7E 00 00 00 .dword 7eh +0022F4r 1 7F 00 00 00 .dword 7fh +0022F8r 1 80 00 00 00 .dword 80h +0022FCr 1 81 00 00 00 .dword 81h +002300r 1 82 00 00 00 .dword 82h +002304r 1 83 00 00 00 .dword 83h +002308r 1 84 00 00 00 .dword 84h +00230Cr 1 85 00 00 00 .dword 85h +002310r 1 86 00 00 00 .dword 86h +002314r 1 F0 00 00 00 .dword 0f0h +002318r 1 F1 00 00 00 .dword 0f1h +00231Cr 1 F2 00 00 00 .dword 0f2h +002320r 1 F3 00 00 00 .dword 0f3h +002324r 1 F4 00 00 00 .dword 0f4h +002328r 1 F5 00 00 00 .dword 0f5h +00232Cr 1 F6 00 00 00 .dword 0f6h +002330r 1 F7 00 00 00 .dword 0f7h +002334r 1 F8 00 00 00 .dword 0f8h +002338r 1 F9 00 00 00 .dword 0f9h +00233Cr 1 FA 00 00 00 .dword 0fah +002340r 1 FB 00 00 00 .dword 0fbh +002344r 1 FC 00 00 00 .dword 0fch +002348r 1 FD 00 00 00 .dword 0fdh +00234Cr 1 FE 00 00 00 .dword 0feh +002350r 1 FF 00 00 00 .dword 0ffh +002354r 1 00 01 00 00 .dword 100h +002358r 1 01 01 00 00 .dword 101h +00235Cr 1 02 01 00 00 .dword 102h +002360r 1 03 01 00 00 .dword 103h +002364r 1 D2 0F 00 00 .dword 0fd2h +002368r 1 D3 0F 00 00 .dword 0fd3h +00236Cr 1 D4 0F 00 00 .dword 0fd4h +002370r 1 D5 0F 00 00 .dword 0fd5h +002374r 1 D6 0F 00 00 .dword 0fd6h +002378r 1 D7 0F 00 00 .dword 0fd7h +00237Cr 1 D8 0F 00 00 .dword 0fd8h +002380r 1 D9 0F 00 00 .dword 0fd9h +002384r 1 DA 0F 00 00 .dword 0fdah +002388r 1 DB 0F 00 00 .dword 0fdbh +00238Cr 1 DC 0F 00 00 .dword 0fdch +002390r 1 DD 0F 00 00 .dword 0fddh +002394r 1 DE 0F 00 00 .dword 0fdeh +002398r 1 DF 0F 00 00 .dword 0fdfh +00239Cr 1 E0 0F 00 00 .dword 0fe0h +0023A0r 1 E1 0F 00 00 .dword 0fe1h +0023A4r 1 E2 0F 00 00 .dword 0fe2h +0023A8r 1 E3 0F 00 00 .dword 0fe3h +0023ACr 1 E4 0F 00 00 .dword 0fe4h +0023B0r 1 E5 0F 00 00 .dword 0fe5h +0023B4r 1 E6 0F 00 00 .dword 0fe6h +0023B8r 1 E7 0F 00 00 .dword 0fe7h +0023BCr 1 E8 0F 00 00 .dword 0fe8h +0023C0r 1 E9 0F 00 00 .dword 0fe9h +0023C4r 1 EA 0F 00 00 .dword 0feah +0023C8r 1 EB 0F 00 00 .dword 0febh +0023CCr 1 EC 0F 00 00 .dword 0fech +0023D0r 1 ED 0F 00 00 .dword 0fedh +0023D4r 1 EE 0F 00 00 .dword 0feeh +0023D8r 1 EF 0F 00 00 .dword 0fefh +0023DCr 1 F0 0F 00 00 .dword 0ff0h +0023E0r 1 F1 0F 00 00 .dword 0ff1h +0023E4r 1 F2 0F 00 00 .dword 0ff2h +0023E8r 1 F3 0F 00 00 .dword 0ff3h +0023ECr 1 F4 0F 00 00 .dword 0ff4h +0023F0r 1 F5 0F 00 00 .dword 0ff5h +0023F4r 1 F6 0F 00 00 .dword 0ff6h +0023F8r 1 F7 0F 00 00 .dword 0ff7h +0023FCr 1 F8 0F 00 00 .dword 0ff8h +002400r 1 F9 0F 00 00 .dword 0ff9h +002404r 1 FA 0F 00 00 .dword 0ffah +002408r 1 FB 0F 00 00 .dword 0ffbh +00240Cr 1 FC 0F 00 00 .dword 0ffch +002410r 1 FD 0F 00 00 .dword 0ffdh +002414r 1 FE 0F 00 00 .dword 0ffeh +002418r 1 FF 0F 00 00 .dword 0fffh +00241Cr 1 00 10 00 00 .dword 1000h +002420r 1 01 10 00 00 .dword 1001h +002424r 1 02 10 00 00 .dword 1002h +002428r 1 03 10 00 00 .dword 1003h +00242Cr 1 04 10 00 00 .dword 1004h +002430r 1 05 10 00 00 .dword 1005h +002434r 1 06 10 00 00 .dword 1006h +002438r 1 07 10 00 00 .dword 1007h +00243Cr 1 08 10 00 00 .dword 1008h +002440r 1 F0 7F 00 00 .dword 7ff0h +002444r 1 F1 7F 00 00 .dword 7ff1h +002448r 1 F2 7F 00 00 .dword 7ff2h +00244Cr 1 F3 7F 00 00 .dword 7ff3h +002450r 1 F4 7F 00 00 .dword 7ff4h +002454r 1 F5 7F 00 00 .dword 7ff5h +002458r 1 F6 7F 00 00 .dword 7ff6h +00245Cr 1 F7 7F 00 00 .dword 7ff7h +002460r 1 F8 7F 00 00 .dword 7ff8h +002464r 1 F9 7F 00 00 .dword 7ff9h +002468r 1 FA 7F 00 00 .dword 7ffah +00246Cr 1 FB 7F 00 00 .dword 7ffbh +002470r 1 FC 7F 00 00 .dword 7ffch +002474r 1 FD 7F 00 00 .dword 7ffdh +002478r 1 FE 7F 00 00 .dword 7ffeh +00247Cr 1 FF 7F 00 00 .dword 7fffh +002480r 1 00 80 00 00 .dword 8000h +002484r 1 01 80 00 00 .dword 8001h +002488r 1 02 80 00 00 .dword 8002h +00248Cr 1 03 80 00 00 .dword 8003h +002490r 1 04 80 00 00 .dword 8004h +002494r 1 05 80 00 00 .dword 8005h +002498r 1 06 80 00 00 .dword 8006h +00249Cr 1 07 80 00 00 .dword 8007h +0024A0r 1 08 80 00 00 .dword 8008h +0024A4r 1 09 80 00 00 .dword 8009h +0024A8r 1 0A 80 00 00 .dword 800ah +0024ACr 1 0B 80 00 00 .dword 800bh +0024B0r 1 E1 9F 00 00 .dword 9fe1h +0024B4r 1 E2 9F 00 00 .dword 9fe2h +0024B8r 1 E3 9F 00 00 .dword 9fe3h +0024BCr 1 E4 9F 00 00 .dword 9fe4h +0024C0r 1 E5 9F 00 00 .dword 9fe5h +0024C4r 1 E6 9F 00 00 .dword 9fe6h +0024C8r 1 E7 9F 00 00 .dword 9fe7h +0024CCr 1 E8 9F 00 00 .dword 9fe8h +0024D0r 1 E9 9F 00 00 .dword 9fe9h +0024D4r 1 EA 9F 00 00 .dword 9feah +0024D8r 1 EB 9F 00 00 .dword 9febh +0024DCr 1 EC 9F 00 00 .dword 9fech +0024E0r 1 ED 9F 00 00 .dword 9fedh +0024E4r 1 EE 9F 00 00 .dword 9feeh +0024E8r 1 EF 9F 00 00 .dword 9fefh +0024ECr 1 F0 9F 00 00 .dword 9ff0h +0024F0r 1 F1 9F 00 00 .dword 9ff1h +0024F4r 1 F2 9F 00 00 .dword 9ff2h +0024F8r 1 F3 9F 00 00 .dword 9ff3h +0024FCr 1 F4 9F 00 00 .dword 9ff4h +002500r 1 F5 9F 00 00 .dword 9ff5h +002504r 1 F6 9F 00 00 .dword 9ff6h +002508r 1 F7 9F 00 00 .dword 9ff7h +00250Cr 1 F8 9F 00 00 .dword 9ff8h +002510r 1 F9 9F 00 00 .dword 9ff9h +002514r 1 FA 9F 00 00 .dword 9ffah +002518r 1 FB 9F 00 00 .dword 9ffbh +00251Cr 1 FC 9F 00 00 .dword 9ffch +002520r 1 FD 9F 00 00 .dword 9ffdh +002524r 1 FE 9F 00 00 .dword 9ffeh +002528r 1 FF 9F 00 00 .dword 9fffh +00252Cr 1 00 A0 00 00 .dword 0a000h +002530r 1 01 A0 00 00 .dword 0a001h +002534r 1 02 A0 00 00 .dword 0a002h +002538r 1 03 A0 00 00 .dword 0a003h +00253Cr 1 04 A0 00 00 .dword 0a004h +002540r 1 05 A0 00 00 .dword 0a005h +002544r 1 06 A0 00 00 .dword 0a006h +002548r 1 07 A0 00 00 .dword 0a007h +00254Cr 1 08 A0 00 00 .dword 0a008h +002550r 1 09 A0 00 00 .dword 0a009h +002554r 1 0A A0 00 00 .dword 0a00ah +002558r 1 0B A0 00 00 .dword 0a00bh +00255Cr 1 0C A0 00 00 .dword 0a00ch +002560r 1 0D A0 00 00 .dword 0a00dh +002564r 1 0E A0 00 00 .dword 0a00eh +002568r 1 0F A0 00 00 .dword 0a00fh +00256Cr 1 E1 AF 00 00 .dword 0afe1h +002570r 1 E2 AF 00 00 .dword 0afe2h +002574r 1 E3 AF 00 00 .dword 0afe3h +002578r 1 E4 AF 00 00 .dword 0afe4h +00257Cr 1 E5 AF 00 00 .dword 0afe5h +002580r 1 E6 AF 00 00 .dword 0afe6h +002584r 1 E7 AF 00 00 .dword 0afe7h +002588r 1 E8 AF 00 00 .dword 0afe8h +00258Cr 1 E9 AF 00 00 .dword 0afe9h +002590r 1 EA AF 00 00 .dword 0afeah +002594r 1 EB AF 00 00 .dword 0afebh +002598r 1 EC AF 00 00 .dword 0afech +00259Cr 1 ED AF 00 00 .dword 0afedh +0025A0r 1 EE AF 00 00 .dword 0afeeh +0025A4r 1 EF AF 00 00 .dword 0afefh +0025A8r 1 F0 AF 00 00 .dword 0aff0h +0025ACr 1 F1 AF 00 00 .dword 0aff1h +0025B0r 1 F2 AF 00 00 .dword 0aff2h +0025B4r 1 F3 AF 00 00 .dword 0aff3h +0025B8r 1 F4 AF 00 00 .dword 0aff4h +0025BCr 1 F5 AF 00 00 .dword 0aff5h +0025C0r 1 F6 AF 00 00 .dword 0aff6h +0025C4r 1 F7 AF 00 00 .dword 0aff7h +0025C8r 1 F8 AF 00 00 .dword 0aff8h +0025CCr 1 F9 AF 00 00 .dword 0aff9h +0025D0r 1 FA AF 00 00 .dword 0affah +0025D4r 1 FB AF 00 00 .dword 0affbh +0025D8r 1 FC AF 00 00 .dword 0affch +0025DCr 1 FD AF 00 00 .dword 0affdh +0025E0r 1 FE AF 00 00 .dword 0affeh +0025E4r 1 FF AF 00 00 .dword 0afffh +0025E8r 1 00 B0 00 00 .dword 0b000h +0025ECr 1 01 B0 00 00 .dword 0b001h +0025F0r 1 02 B0 00 00 .dword 0b002h +0025F4r 1 03 B0 00 00 .dword 0b003h +0025F8r 1 04 B0 00 00 .dword 0b004h +0025FCr 1 05 B0 00 00 .dword 0b005h +002600r 1 06 B0 00 00 .dword 0b006h +002604r 1 07 B0 00 00 .dword 0b007h +002608r 1 08 B0 00 00 .dword 0b008h +00260Cr 1 09 B0 00 00 .dword 0b009h +002610r 1 0A B0 00 00 .dword 0b00ah +002614r 1 0B B0 00 00 .dword 0b00bh +002618r 1 0C B0 00 00 .dword 0b00ch +00261Cr 1 0D B0 00 00 .dword 0b00dh +002620r 1 0E B0 00 00 .dword 0b00eh +002624r 1 0F B0 00 00 .dword 0b00fh +002628r 1 E1 FF 00 00 .dword 0ffe1h +00262Cr 1 E2 FF 00 00 .dword 0ffe2h +002630r 1 E3 FF 00 00 .dword 0ffe3h +002634r 1 E4 FF 00 00 .dword 0ffe4h +002638r 1 E5 FF 00 00 .dword 0ffe5h +00263Cr 1 E6 FF 00 00 .dword 0ffe6h +002640r 1 E7 FF 00 00 .dword 0ffe7h +002644r 1 E8 FF 00 00 .dword 0ffe8h +002648r 1 E9 FF 00 00 .dword 0ffe9h +00264Cr 1 EA FF 00 00 .dword 0ffeah +002650r 1 EB FF 00 00 .dword 0ffebh +002654r 1 EC FF 00 00 .dword 0ffech +002658r 1 ED FF 00 00 .dword 0ffedh +00265Cr 1 EE FF 00 00 .dword 0ffeeh +002660r 1 EF FF 00 00 .dword 0ffefh +002664r 1 F0 FF 00 00 .dword 0fff0h +002668r 1 F1 FF 00 00 .dword 0fff1h +00266Cr 1 F2 FF 00 00 .dword 0fff2h +002670r 1 F3 FF 00 00 .dword 0fff3h +002674r 1 F4 FF 00 00 .dword 0fff4h +002678r 1 F5 FF 00 00 .dword 0fff5h +00267Cr 1 F6 FF 00 00 .dword 0fff6h +002680r 1 F7 FF 00 00 .dword 0fff7h +002684r 1 F8 FF 00 00 .dword 0fff8h +002688r 1 F9 FF 00 00 .dword 0fff9h +00268Cr 1 FA FF 00 00 .dword 0fffah +002690r 1 FB FF 00 00 .dword 0fffbh +002694r 1 FC FF 00 00 .dword 0fffch +002698r 1 FD FF 00 00 .dword 0fffdh +00269Cr 1 FE FF 00 00 .dword 0fffeh +0026A0r 1 FF FF 00 00 .dword 0ffffh +0026A4r 1 00 00 01 00 .dword 10000h +0026A8r 1 01 00 01 00 .dword 10001h +0026ACr 1 02 00 01 00 .dword 10002h +0026B0r 1 03 00 01 00 .dword 10003h +0026B4r 1 04 00 01 00 .dword 10004h +0026B8r 1 05 00 01 00 .dword 10005h +0026BCr 1 06 00 01 00 .dword 10006h +0026C0r 1 07 00 01 00 .dword 10007h +0026C4r 1 08 00 01 00 .dword 10008h +0026C8r 1 09 00 01 00 .dword 10009h +0026CCr 1 0A 00 01 00 .dword 1000ah +0026D0r 1 0B 00 01 00 .dword 1000bh +0026D4r 1 0C 00 01 00 .dword 1000ch +0026D8r 1 0D 00 01 00 .dword 1000dh +0026DCr 1 0E 00 01 00 .dword 1000eh +0026E0r 1 0F 00 01 00 .dword 1000fh +0026E4r 1 F0 FF FF 7F .dword 7ffffff0h +0026E8r 1 F1 FF FF 7F .dword 7ffffff1h +0026ECr 1 F2 FF FF 7F .dword 7ffffff2h +0026F0r 1 F3 FF FF 7F .dword 7ffffff3h +0026F4r 1 F4 FF FF 7F .dword 7ffffff4h +0026F8r 1 F5 FF FF 7F .dword 7ffffff5h +0026FCr 1 F6 FF FF 7F .dword 7ffffff6h +002700r 1 F7 FF FF 7F .dword 7ffffff7h +002704r 1 F8 FF FF 7F .dword 7ffffff8h +002708r 1 F9 FF FF 7F .dword 7ffffff9h +00270Cr 1 FA FF FF 7F .dword 7ffffffah +002710r 1 FB FF FF 7F .dword 7ffffffbh +002714r 1 FC FF FF 7F .dword 7ffffffch +002718r 1 FD FF FF 7F .dword 7ffffffdh +00271Cr 1 FE FF FF 7F .dword 7ffffffeh +002720r 1 FF FF FF 7F .dword 7fffffffh +002724r 1 00 00 00 80 .dword 80000000h +002728r 1 01 00 00 80 .dword 80000001h +00272Cr 1 02 00 00 80 .dword 80000002h +002730r 1 03 00 00 80 .dword 80000003h +002734r 1 04 00 00 80 .dword 80000004h +002738r 1 05 00 00 80 .dword 80000005h +00273Cr 1 06 00 00 80 .dword 80000006h +002740r 1 07 00 00 80 .dword 80000007h +002744r 1 08 00 00 80 .dword 80000008h +002748r 1 09 00 00 80 .dword 80000009h +00274Cr 1 0A 00 00 80 .dword 8000000ah +002750r 1 0B 00 00 80 .dword 8000000bh +002754r 1 0C 00 00 80 .dword 8000000ch +002758r 1 0D 00 00 80 .dword 8000000dh +00275Cr 1 0E 00 00 80 .dword 8000000eh +002760r 1 0F 00 00 80 .dword 8000000fh +002764r 1 F0 FF FF 9F .dword 9ffffff0h +002768r 1 F1 FF FF 9F .dword 9ffffff1h +00276Cr 1 F2 FF FF 9F .dword 9ffffff2h +002770r 1 F3 FF FF 9F .dword 9ffffff3h +002774r 1 F4 FF FF 9F .dword 9ffffff4h +002778r 1 F5 FF FF 9F .dword 9ffffff5h +00277Cr 1 F6 FF FF 9F .dword 9ffffff6h +002780r 1 F7 FF FF 9F .dword 9ffffff7h +002784r 1 F8 FF FF 9F .dword 9ffffff8h +002788r 1 F9 FF FF 9F .dword 9ffffff9h +00278Cr 1 FA FF FF 9F .dword 9ffffffah +002790r 1 FB FF FF 9F .dword 9ffffffbh +002794r 1 FC FF FF 9F .dword 9ffffffch +002798r 1 FD FF FF 9F .dword 9ffffffdh +00279Cr 1 FE FF FF 9F .dword 9ffffffeh +0027A0r 1 FF FF FF 9F .dword 9fffffffh +0027A4r 1 00 00 00 A0 .dword 0a0000000h +0027A8r 1 01 00 00 A0 .dword 0a0000001h +0027ACr 1 02 00 00 A0 .dword 0a0000002h +0027B0r 1 03 00 00 A0 .dword 0a0000003h +0027B4r 1 04 00 00 A0 .dword 0a0000004h +0027B8r 1 05 00 00 A0 .dword 0a0000005h +0027BCr 1 06 00 00 A0 .dword 0a0000006h +0027C0r 1 07 00 00 A0 .dword 0a0000007h +0027C4r 1 08 00 00 A0 .dword 0a0000008h +0027C8r 1 09 00 00 A0 .dword 0a0000009h +0027CCr 1 0A 00 00 A0 .dword 0a000000ah +0027D0r 1 0B 00 00 A0 .dword 0a000000bh +0027D4r 1 0C 00 00 A0 .dword 0a000000ch +0027D8r 1 0D 00 00 A0 .dword 0a000000dh +0027DCr 1 0E 00 00 A0 .dword 0a000000eh +0027E0r 1 0F 00 00 A0 .dword 0a000000fh +0027E4r 1 F0 FF FF FF .dword 0fffffff0h +0027E8r 1 F1 FF FF FF .dword 0fffffff1h +0027ECr 1 F2 FF FF FF .dword 0fffffff2h +0027F0r 1 F3 FF FF FF .dword 0fffffff3h +0027F4r 1 F4 FF FF FF .dword 0fffffff4h +0027F8r 1 F5 FF FF FF .dword 0fffffff5h +0027FCr 1 F6 FF FF FF .dword 0fffffff6h +002800r 1 F7 FF FF FF .dword 0fffffff7h +002804r 1 F8 FF FF FF .dword 0fffffff8h +002808r 1 F9 FF FF FF .dword 0fffffff9h +00280Cr 1 FA FF FF FF .dword 0fffffffah +002810r 1 FB FF FF FF .dword 0fffffffbh +002814r 1 FC FF FF FF .dword 0fffffffch +002818r 1 FD FF FF FF .dword 0fffffffdh +00281Cr 1 FE FF FF FF .dword 0fffffffeh +002820r 1 FF FF FF FF .dword 0ffffffffh +002824r 1 +002824r 1 ; alternative hex values, uppercase +002824r 1 00 00 00 00 .dword 0h +002828r 1 01 00 00 00 .dword 1h +00282Cr 1 02 00 00 00 .dword 2h +002830r 1 03 00 00 00 .dword 3h +002834r 1 04 00 00 00 .dword 4h +002838r 1 05 00 00 00 .dword 5h +00283Cr 1 06 00 00 00 .dword 6h +002840r 1 07 00 00 00 .dword 7h +002844r 1 08 00 00 00 .dword 8h +002848r 1 09 00 00 00 .dword 9h +00284Cr 1 0A 00 00 00 .dword 0Ah +002850r 1 0B 00 00 00 .dword 0Bh +002854r 1 0C 00 00 00 .dword 0Ch +002858r 1 0D 00 00 00 .dword 0Dh +00285Cr 1 0E 00 00 00 .dword 0Eh +002860r 1 0F 00 00 00 .dword 0Fh +002864r 1 10 00 00 00 .dword 10h +002868r 1 11 00 00 00 .dword 11h +00286Cr 1 12 00 00 00 .dword 12h +002870r 1 13 00 00 00 .dword 13h +002874r 1 70 00 00 00 .dword 70h +002878r 1 71 00 00 00 .dword 71h +00287Cr 1 72 00 00 00 .dword 72h +002880r 1 73 00 00 00 .dword 73h +002884r 1 74 00 00 00 .dword 74h +002888r 1 75 00 00 00 .dword 75h +00288Cr 1 76 00 00 00 .dword 76h +002890r 1 77 00 00 00 .dword 77h +002894r 1 78 00 00 00 .dword 78h +002898r 1 79 00 00 00 .dword 79h +00289Cr 1 7A 00 00 00 .dword 7Ah +0028A0r 1 7B 00 00 00 .dword 7Bh +0028A4r 1 7C 00 00 00 .dword 7Ch +0028A8r 1 7D 00 00 00 .dword 7Dh +0028ACr 1 7E 00 00 00 .dword 7Eh +0028B0r 1 7F 00 00 00 .dword 7Fh +0028B4r 1 80 00 00 00 .dword 80h +0028B8r 1 81 00 00 00 .dword 81h +0028BCr 1 82 00 00 00 .dword 82h +0028C0r 1 83 00 00 00 .dword 83h +0028C4r 1 84 00 00 00 .dword 84h +0028C8r 1 85 00 00 00 .dword 85h +0028CCr 1 86 00 00 00 .dword 86h +0028D0r 1 F0 00 00 00 .dword 0F0h +0028D4r 1 F1 00 00 00 .dword 0F1h +0028D8r 1 F2 00 00 00 .dword 0F2h +0028DCr 1 F3 00 00 00 .dword 0F3h +0028E0r 1 F4 00 00 00 .dword 0F4h +0028E4r 1 F5 00 00 00 .dword 0F5h +0028E8r 1 F6 00 00 00 .dword 0F6h +0028ECr 1 F7 00 00 00 .dword 0F7h +0028F0r 1 F8 00 00 00 .dword 0F8h +0028F4r 1 F9 00 00 00 .dword 0F9h +0028F8r 1 FA 00 00 00 .dword 0FAh +0028FCr 1 FB 00 00 00 .dword 0FBh +002900r 1 FC 00 00 00 .dword 0FCh +002904r 1 FD 00 00 00 .dword 0FDh +002908r 1 FE 00 00 00 .dword 0FEh +00290Cr 1 FF 00 00 00 .dword 0FFh +002910r 1 00 01 00 00 .dword 100h +002914r 1 01 01 00 00 .dword 101h +002918r 1 02 01 00 00 .dword 102h +00291Cr 1 03 01 00 00 .dword 103h +002920r 1 D2 0F 00 00 .dword 0FD2h +002924r 1 D3 0F 00 00 .dword 0FD3h +002928r 1 D4 0F 00 00 .dword 0FD4h +00292Cr 1 D5 0F 00 00 .dword 0FD5h +002930r 1 D6 0F 00 00 .dword 0FD6h +002934r 1 D7 0F 00 00 .dword 0FD7h +002938r 1 D8 0F 00 00 .dword 0FD8h +00293Cr 1 D9 0F 00 00 .dword 0FD9h +002940r 1 DA 0F 00 00 .dword 0FDAh +002944r 1 DB 0F 00 00 .dword 0FDBh +002948r 1 DC 0F 00 00 .dword 0FDCh +00294Cr 1 DD 0F 00 00 .dword 0FDDh +002950r 1 DE 0F 00 00 .dword 0FDEh +002954r 1 DF 0F 00 00 .dword 0FDFh +002958r 1 E0 0F 00 00 .dword 0FE0h +00295Cr 1 E1 0F 00 00 .dword 0FE1h +002960r 1 E2 0F 00 00 .dword 0FE2h +002964r 1 E3 0F 00 00 .dword 0FE3h +002968r 1 E4 0F 00 00 .dword 0FE4h +00296Cr 1 E5 0F 00 00 .dword 0FE5h +002970r 1 E6 0F 00 00 .dword 0FE6h +002974r 1 E7 0F 00 00 .dword 0FE7h +002978r 1 E8 0F 00 00 .dword 0FE8h +00297Cr 1 E9 0F 00 00 .dword 0FE9h +002980r 1 EA 0F 00 00 .dword 0FEAh +002984r 1 EB 0F 00 00 .dword 0FEBh +002988r 1 EC 0F 00 00 .dword 0FECh +00298Cr 1 ED 0F 00 00 .dword 0FEDh +002990r 1 EE 0F 00 00 .dword 0FEEh +002994r 1 EF 0F 00 00 .dword 0FEFh +002998r 1 F0 0F 00 00 .dword 0FF0h +00299Cr 1 F1 0F 00 00 .dword 0FF1h +0029A0r 1 F2 0F 00 00 .dword 0FF2h +0029A4r 1 F3 0F 00 00 .dword 0FF3h +0029A8r 1 F4 0F 00 00 .dword 0FF4h +0029ACr 1 F5 0F 00 00 .dword 0FF5h +0029B0r 1 F6 0F 00 00 .dword 0FF6h +0029B4r 1 F7 0F 00 00 .dword 0FF7h +0029B8r 1 F8 0F 00 00 .dword 0FF8h +0029BCr 1 F9 0F 00 00 .dword 0FF9h +0029C0r 1 FA 0F 00 00 .dword 0FFAh +0029C4r 1 FB 0F 00 00 .dword 0FFBh +0029C8r 1 FC 0F 00 00 .dword 0FFCh +0029CCr 1 FD 0F 00 00 .dword 0FFDh +0029D0r 1 FE 0F 00 00 .dword 0FFEh +0029D4r 1 FF 0F 00 00 .dword 0FFFh +0029D8r 1 00 10 00 00 .dword 1000h +0029DCr 1 01 10 00 00 .dword 1001h +0029E0r 1 02 10 00 00 .dword 1002h +0029E4r 1 03 10 00 00 .dword 1003h +0029E8r 1 04 10 00 00 .dword 1004h +0029ECr 1 05 10 00 00 .dword 1005h +0029F0r 1 06 10 00 00 .dword 1006h +0029F4r 1 07 10 00 00 .dword 1007h +0029F8r 1 08 10 00 00 .dword 1008h +0029FCr 1 F0 7F 00 00 .dword 7FF0h +002A00r 1 F1 7F 00 00 .dword 7FF1h +002A04r 1 F2 7F 00 00 .dword 7FF2h +002A08r 1 F3 7F 00 00 .dword 7FF3h +002A0Cr 1 F4 7F 00 00 .dword 7FF4h +002A10r 1 F5 7F 00 00 .dword 7FF5h +002A14r 1 F6 7F 00 00 .dword 7FF6h +002A18r 1 F7 7F 00 00 .dword 7FF7h +002A1Cr 1 F8 7F 00 00 .dword 7FF8h +002A20r 1 F9 7F 00 00 .dword 7FF9h +002A24r 1 FA 7F 00 00 .dword 7FFAh +002A28r 1 FB 7F 00 00 .dword 7FFBh +002A2Cr 1 FC 7F 00 00 .dword 7FFCh +002A30r 1 FD 7F 00 00 .dword 7FFDh +002A34r 1 FE 7F 00 00 .dword 7FFEh +002A38r 1 FF 7F 00 00 .dword 7FFFh +002A3Cr 1 00 80 00 00 .dword 8000h +002A40r 1 01 80 00 00 .dword 8001h +002A44r 1 02 80 00 00 .dword 8002h +002A48r 1 03 80 00 00 .dword 8003h +002A4Cr 1 04 80 00 00 .dword 8004h +002A50r 1 05 80 00 00 .dword 8005h +002A54r 1 06 80 00 00 .dword 8006h +002A58r 1 07 80 00 00 .dword 8007h +002A5Cr 1 08 80 00 00 .dword 8008h +002A60r 1 09 80 00 00 .dword 8009h +002A64r 1 0A 80 00 00 .dword 800Ah +002A68r 1 0B 80 00 00 .dword 800Bh +002A6Cr 1 E1 9F 00 00 .dword 9FE1h +002A70r 1 E2 9F 00 00 .dword 9FE2h +002A74r 1 E3 9F 00 00 .dword 9FE3h +002A78r 1 E4 9F 00 00 .dword 9FE4h +002A7Cr 1 E5 9F 00 00 .dword 9FE5h +002A80r 1 E6 9F 00 00 .dword 9FE6h +002A84r 1 E7 9F 00 00 .dword 9FE7h +002A88r 1 E8 9F 00 00 .dword 9FE8h +002A8Cr 1 E9 9F 00 00 .dword 9FE9h +002A90r 1 EA 9F 00 00 .dword 9FEAh +002A94r 1 EB 9F 00 00 .dword 9FEBh +002A98r 1 EC 9F 00 00 .dword 9FECh +002A9Cr 1 ED 9F 00 00 .dword 9FEDh +002AA0r 1 EE 9F 00 00 .dword 9FEEh +002AA4r 1 EF 9F 00 00 .dword 9FEFh +002AA8r 1 F0 9F 00 00 .dword 9FF0h +002AACr 1 F1 9F 00 00 .dword 9FF1h +002AB0r 1 F2 9F 00 00 .dword 9FF2h +002AB4r 1 F3 9F 00 00 .dword 9FF3h +002AB8r 1 F4 9F 00 00 .dword 9FF4h +002ABCr 1 F5 9F 00 00 .dword 9FF5h +002AC0r 1 F6 9F 00 00 .dword 9FF6h +002AC4r 1 F7 9F 00 00 .dword 9FF7h +002AC8r 1 F8 9F 00 00 .dword 9FF8h +002ACCr 1 F9 9F 00 00 .dword 9FF9h +002AD0r 1 FA 9F 00 00 .dword 9FFAh +002AD4r 1 FB 9F 00 00 .dword 9FFBh +002AD8r 1 FC 9F 00 00 .dword 9FFCh +002ADCr 1 FD 9F 00 00 .dword 9FFDh +002AE0r 1 FE 9F 00 00 .dword 9FFEh +002AE4r 1 FF 9F 00 00 .dword 9FFFh +002AE8r 1 00 A0 00 00 .dword 0A000h +002AECr 1 01 A0 00 00 .dword 0A001h +002AF0r 1 02 A0 00 00 .dword 0A002h +002AF4r 1 03 A0 00 00 .dword 0A003h +002AF8r 1 04 A0 00 00 .dword 0A004h +002AFCr 1 05 A0 00 00 .dword 0A005h +002B00r 1 06 A0 00 00 .dword 0A006h +002B04r 1 07 A0 00 00 .dword 0A007h +002B08r 1 08 A0 00 00 .dword 0A008h +002B0Cr 1 09 A0 00 00 .dword 0A009h +002B10r 1 0A A0 00 00 .dword 0A00Ah +002B14r 1 0B A0 00 00 .dword 0A00Bh +002B18r 1 0C A0 00 00 .dword 0A00Ch +002B1Cr 1 0D A0 00 00 .dword 0A00Dh +002B20r 1 0E A0 00 00 .dword 0A00Eh +002B24r 1 0F A0 00 00 .dword 0A00Fh +002B28r 1 E1 AF 00 00 .dword 0AFE1h +002B2Cr 1 E2 AF 00 00 .dword 0AFE2h +002B30r 1 E3 AF 00 00 .dword 0AFE3h +002B34r 1 E4 AF 00 00 .dword 0AFE4h +002B38r 1 E5 AF 00 00 .dword 0AFE5h +002B3Cr 1 E6 AF 00 00 .dword 0AFE6h +002B40r 1 E7 AF 00 00 .dword 0AFE7h +002B44r 1 E8 AF 00 00 .dword 0AFE8h +002B48r 1 E9 AF 00 00 .dword 0AFE9h +002B4Cr 1 EA AF 00 00 .dword 0AFEAh +002B50r 1 EB AF 00 00 .dword 0AFEBh +002B54r 1 EC AF 00 00 .dword 0AFECh +002B58r 1 ED AF 00 00 .dword 0AFEDh +002B5Cr 1 EE AF 00 00 .dword 0AFEEh +002B60r 1 EF AF 00 00 .dword 0AFEFh +002B64r 1 F0 AF 00 00 .dword 0AFF0h +002B68r 1 F1 AF 00 00 .dword 0AFF1h +002B6Cr 1 F2 AF 00 00 .dword 0AFF2h +002B70r 1 F3 AF 00 00 .dword 0AFF3h +002B74r 1 F4 AF 00 00 .dword 0AFF4h +002B78r 1 F5 AF 00 00 .dword 0AFF5h +002B7Cr 1 F6 AF 00 00 .dword 0AFF6h +002B80r 1 F7 AF 00 00 .dword 0AFF7h +002B84r 1 F8 AF 00 00 .dword 0AFF8h +002B88r 1 F9 AF 00 00 .dword 0AFF9h +002B8Cr 1 FA AF 00 00 .dword 0AFFAh +002B90r 1 FB AF 00 00 .dword 0AFFBh +002B94r 1 FC AF 00 00 .dword 0AFFCh +002B98r 1 FD AF 00 00 .dword 0AFFDh +002B9Cr 1 FE AF 00 00 .dword 0AFFEh +002BA0r 1 FF AF 00 00 .dword 0AFFFh +002BA4r 1 00 B0 00 00 .dword 0B000h +002BA8r 1 01 B0 00 00 .dword 0B001h +002BACr 1 02 B0 00 00 .dword 0B002h +002BB0r 1 03 B0 00 00 .dword 0B003h +002BB4r 1 04 B0 00 00 .dword 0B004h +002BB8r 1 05 B0 00 00 .dword 0B005h +002BBCr 1 06 B0 00 00 .dword 0B006h +002BC0r 1 07 B0 00 00 .dword 0B007h +002BC4r 1 08 B0 00 00 .dword 0B008h +002BC8r 1 09 B0 00 00 .dword 0B009h +002BCCr 1 0A B0 00 00 .dword 0B00Ah +002BD0r 1 0B B0 00 00 .dword 0B00Bh +002BD4r 1 0C B0 00 00 .dword 0B00Ch +002BD8r 1 0D B0 00 00 .dword 0B00Dh +002BDCr 1 0E B0 00 00 .dword 0B00Eh +002BE0r 1 0F B0 00 00 .dword 0B00Fh +002BE4r 1 E1 FF 00 00 .dword 0FFE1h +002BE8r 1 E2 FF 00 00 .dword 0FFE2h +002BECr 1 E3 FF 00 00 .dword 0FFE3h +002BF0r 1 E4 FF 00 00 .dword 0FFE4h +002BF4r 1 E5 FF 00 00 .dword 0FFE5h +002BF8r 1 E6 FF 00 00 .dword 0FFE6h +002BFCr 1 E7 FF 00 00 .dword 0FFE7h +002C00r 1 E8 FF 00 00 .dword 0FFE8h +002C04r 1 E9 FF 00 00 .dword 0FFE9h +002C08r 1 EA FF 00 00 .dword 0FFEAh +002C0Cr 1 EB FF 00 00 .dword 0FFEBh +002C10r 1 EC FF 00 00 .dword 0FFECh +002C14r 1 ED FF 00 00 .dword 0FFEDh +002C18r 1 EE FF 00 00 .dword 0FFEEh +002C1Cr 1 EF FF 00 00 .dword 0FFEFh +002C20r 1 F0 FF 00 00 .dword 0FFF0h +002C24r 1 F1 FF 00 00 .dword 0FFF1h +002C28r 1 F2 FF 00 00 .dword 0FFF2h +002C2Cr 1 F3 FF 00 00 .dword 0FFF3h +002C30r 1 F4 FF 00 00 .dword 0FFF4h +002C34r 1 F5 FF 00 00 .dword 0FFF5h +002C38r 1 F6 FF 00 00 .dword 0FFF6h +002C3Cr 1 F7 FF 00 00 .dword 0FFF7h +002C40r 1 F8 FF 00 00 .dword 0FFF8h +002C44r 1 F9 FF 00 00 .dword 0FFF9h +002C48r 1 FA FF 00 00 .dword 0FFFAh +002C4Cr 1 FB FF 00 00 .dword 0FFFBh +002C50r 1 FC FF 00 00 .dword 0FFFCh +002C54r 1 FD FF 00 00 .dword 0FFFDh +002C58r 1 FE FF 00 00 .dword 0FFFEh +002C5Cr 1 FF FF 00 00 .dword 0FFFFh +002C60r 1 00 00 01 00 .dword 10000h +002C64r 1 01 00 01 00 .dword 10001h +002C68r 1 02 00 01 00 .dword 10002h +002C6Cr 1 03 00 01 00 .dword 10003h +002C70r 1 04 00 01 00 .dword 10004h +002C74r 1 05 00 01 00 .dword 10005h +002C78r 1 06 00 01 00 .dword 10006h +002C7Cr 1 07 00 01 00 .dword 10007h +002C80r 1 08 00 01 00 .dword 10008h +002C84r 1 09 00 01 00 .dword 10009h +002C88r 1 0A 00 01 00 .dword 1000Ah +002C8Cr 1 0B 00 01 00 .dword 1000Bh +002C90r 1 0C 00 01 00 .dword 1000Ch +002C94r 1 0D 00 01 00 .dword 1000Dh +002C98r 1 0E 00 01 00 .dword 1000Eh +002C9Cr 1 0F 00 01 00 .dword 1000Fh +002CA0r 1 F0 FF FF 7F .dword 7FFFFFF0h +002CA4r 1 F1 FF FF 7F .dword 7FFFFFF1h +002CA8r 1 F2 FF FF 7F .dword 7FFFFFF2h +002CACr 1 F3 FF FF 7F .dword 7FFFFFF3h +002CB0r 1 F4 FF FF 7F .dword 7FFFFFF4h +002CB4r 1 F5 FF FF 7F .dword 7FFFFFF5h +002CB8r 1 F6 FF FF 7F .dword 7FFFFFF6h +002CBCr 1 F7 FF FF 7F .dword 7FFFFFF7h +002CC0r 1 F8 FF FF 7F .dword 7FFFFFF8h +002CC4r 1 F9 FF FF 7F .dword 7FFFFFF9h +002CC8r 1 FA FF FF 7F .dword 7FFFFFFAh +002CCCr 1 FB FF FF 7F .dword 7FFFFFFBh +002CD0r 1 FC FF FF 7F .dword 7FFFFFFCh +002CD4r 1 FD FF FF 7F .dword 7FFFFFFDh +002CD8r 1 FE FF FF 7F .dword 7FFFFFFEh +002CDCr 1 FF FF FF 7F .dword 7FFFFFFFh +002CE0r 1 00 00 00 80 .dword 80000000h +002CE4r 1 01 00 00 80 .dword 80000001h +002CE8r 1 02 00 00 80 .dword 80000002h +002CECr 1 03 00 00 80 .dword 80000003h +002CF0r 1 04 00 00 80 .dword 80000004h +002CF4r 1 05 00 00 80 .dword 80000005h +002CF8r 1 06 00 00 80 .dword 80000006h +002CFCr 1 07 00 00 80 .dword 80000007h +002D00r 1 08 00 00 80 .dword 80000008h +002D04r 1 09 00 00 80 .dword 80000009h +002D08r 1 0A 00 00 80 .dword 8000000Ah +002D0Cr 1 0B 00 00 80 .dword 8000000Bh +002D10r 1 0C 00 00 80 .dword 8000000Ch +002D14r 1 0D 00 00 80 .dword 8000000Dh +002D18r 1 0E 00 00 80 .dword 8000000Eh +002D1Cr 1 0F 00 00 80 .dword 8000000Fh +002D20r 1 F0 FF FF 9F .dword 9FFFFFF0h +002D24r 1 F1 FF FF 9F .dword 9FFFFFF1h +002D28r 1 F2 FF FF 9F .dword 9FFFFFF2h +002D2Cr 1 F3 FF FF 9F .dword 9FFFFFF3h +002D30r 1 F4 FF FF 9F .dword 9FFFFFF4h +002D34r 1 F5 FF FF 9F .dword 9FFFFFF5h +002D38r 1 F6 FF FF 9F .dword 9FFFFFF6h +002D3Cr 1 F7 FF FF 9F .dword 9FFFFFF7h +002D40r 1 F8 FF FF 9F .dword 9FFFFFF8h +002D44r 1 F9 FF FF 9F .dword 9FFFFFF9h +002D48r 1 FA FF FF 9F .dword 9FFFFFFAh +002D4Cr 1 FB FF FF 9F .dword 9FFFFFFBh +002D50r 1 FC FF FF 9F .dword 9FFFFFFCh +002D54r 1 FD FF FF 9F .dword 9FFFFFFDh +002D58r 1 FE FF FF 9F .dword 9FFFFFFEh +002D5Cr 1 FF FF FF 9F .dword 9FFFFFFFh +002D60r 1 00 00 00 A0 .dword 0A0000000h +002D64r 1 01 00 00 A0 .dword 0A0000001h +002D68r 1 02 00 00 A0 .dword 0A0000002h +002D6Cr 1 03 00 00 A0 .dword 0A0000003h +002D70r 1 04 00 00 A0 .dword 0A0000004h +002D74r 1 05 00 00 A0 .dword 0A0000005h +002D78r 1 06 00 00 A0 .dword 0A0000006h +002D7Cr 1 07 00 00 A0 .dword 0A0000007h +002D80r 1 08 00 00 A0 .dword 0A0000008h +002D84r 1 09 00 00 A0 .dword 0A0000009h +002D88r 1 0A 00 00 A0 .dword 0A000000Ah +002D8Cr 1 0B 00 00 A0 .dword 0A000000Bh +002D90r 1 0C 00 00 A0 .dword 0A000000Ch +002D94r 1 0D 00 00 A0 .dword 0A000000Dh +002D98r 1 0E 00 00 A0 .dword 0A000000Eh +002D9Cr 1 0F 00 00 A0 .dword 0A000000Fh +002DA0r 1 F0 FF FF FF .dword 0FFFFFFF0h +002DA4r 1 F1 FF FF FF .dword 0FFFFFFF1h +002DA8r 1 F2 FF FF FF .dword 0FFFFFFF2h +002DACr 1 F3 FF FF FF .dword 0FFFFFFF3h +002DB0r 1 F4 FF FF FF .dword 0FFFFFFF4h +002DB4r 1 F5 FF FF FF .dword 0FFFFFFF5h +002DB8r 1 F6 FF FF FF .dword 0FFFFFFF6h +002DBCr 1 F7 FF FF FF .dword 0FFFFFFF7h +002DC0r 1 F8 FF FF FF .dword 0FFFFFFF8h +002DC4r 1 F9 FF FF FF .dword 0FFFFFFF9h +002DC8r 1 FA FF FF FF .dword 0FFFFFFFAh +002DCCr 1 FB FF FF FF .dword 0FFFFFFFBh +002DD0r 1 FC FF FF FF .dword 0FFFFFFFCh +002DD4r 1 FD FF FF FF .dword 0FFFFFFFDh +002DD8r 1 FE FF FF FF .dword 0FFFFFFFEh +002DDCr 1 FF FF FF FF .dword 0FFFFFFFFh +002DE0r 1 +002DE0r 1 ; alternative 8-digit hex values +002DE0r 1 00 00 00 00 .dword 00000000h +002DE4r 1 01 00 00 00 .dword 00000001h +002DE8r 1 02 00 00 00 .dword 00000002h +002DECr 1 03 00 00 00 .dword 00000003h +002DF0r 1 04 00 00 00 .dword 00000004h +002DF4r 1 05 00 00 00 .dword 00000005h +002DF8r 1 06 00 00 00 .dword 00000006h +002DFCr 1 07 00 00 00 .dword 00000007h +002E00r 1 08 00 00 00 .dword 00000008h +002E04r 1 09 00 00 00 .dword 00000009h +002E08r 1 0A 00 00 00 .dword 0000000ah +002E0Cr 1 0B 00 00 00 .dword 0000000bh +002E10r 1 0C 00 00 00 .dword 0000000ch +002E14r 1 0D 00 00 00 .dword 0000000dh +002E18r 1 0E 00 00 00 .dword 0000000eh +002E1Cr 1 0F 00 00 00 .dword 0000000fh +002E20r 1 10 00 00 00 .dword 00000010h +002E24r 1 11 00 00 00 .dword 00000011h +002E28r 1 12 00 00 00 .dword 00000012h +002E2Cr 1 13 00 00 00 .dword 00000013h +002E30r 1 70 00 00 00 .dword 00000070h +002E34r 1 71 00 00 00 .dword 00000071h +002E38r 1 72 00 00 00 .dword 00000072h +002E3Cr 1 73 00 00 00 .dword 00000073h +002E40r 1 74 00 00 00 .dword 00000074h +002E44r 1 75 00 00 00 .dword 00000075h +002E48r 1 76 00 00 00 .dword 00000076h +002E4Cr 1 77 00 00 00 .dword 00000077h +002E50r 1 78 00 00 00 .dword 00000078h +002E54r 1 79 00 00 00 .dword 00000079h +002E58r 1 7A 00 00 00 .dword 0000007ah +002E5Cr 1 7B 00 00 00 .dword 0000007bh +002E60r 1 7C 00 00 00 .dword 0000007ch +002E64r 1 7D 00 00 00 .dword 0000007dh +002E68r 1 7E 00 00 00 .dword 0000007eh +002E6Cr 1 7F 00 00 00 .dword 0000007fh +002E70r 1 80 00 00 00 .dword 00000080h +002E74r 1 81 00 00 00 .dword 00000081h +002E78r 1 82 00 00 00 .dword 00000082h +002E7Cr 1 83 00 00 00 .dword 00000083h +002E80r 1 84 00 00 00 .dword 00000084h +002E84r 1 85 00 00 00 .dword 00000085h +002E88r 1 86 00 00 00 .dword 00000086h +002E8Cr 1 F0 00 00 00 .dword 000000f0h +002E90r 1 F1 00 00 00 .dword 000000f1h +002E94r 1 F2 00 00 00 .dword 000000f2h +002E98r 1 F3 00 00 00 .dword 000000f3h +002E9Cr 1 F4 00 00 00 .dword 000000f4h +002EA0r 1 F5 00 00 00 .dword 000000f5h +002EA4r 1 F6 00 00 00 .dword 000000f6h +002EA8r 1 F7 00 00 00 .dword 000000f7h +002EACr 1 F8 00 00 00 .dword 000000f8h +002EB0r 1 F9 00 00 00 .dword 000000f9h +002EB4r 1 FA 00 00 00 .dword 000000fah +002EB8r 1 FB 00 00 00 .dword 000000fbh +002EBCr 1 FC 00 00 00 .dword 000000fch +002EC0r 1 FD 00 00 00 .dword 000000fdh +002EC4r 1 FE 00 00 00 .dword 000000feh +002EC8r 1 FF 00 00 00 .dword 000000ffh +002ECCr 1 00 01 00 00 .dword 00000100h +002ED0r 1 01 01 00 00 .dword 00000101h +002ED4r 1 02 01 00 00 .dword 00000102h +002ED8r 1 03 01 00 00 .dword 00000103h +002EDCr 1 D2 0F 00 00 .dword 00000fd2h +002EE0r 1 D3 0F 00 00 .dword 00000fd3h +002EE4r 1 D4 0F 00 00 .dword 00000fd4h +002EE8r 1 D5 0F 00 00 .dword 00000fd5h +002EECr 1 D6 0F 00 00 .dword 00000fd6h +002EF0r 1 D7 0F 00 00 .dword 00000fd7h +002EF4r 1 D8 0F 00 00 .dword 00000fd8h +002EF8r 1 D9 0F 00 00 .dword 00000fd9h +002EFCr 1 DA 0F 00 00 .dword 00000fdah +002F00r 1 DB 0F 00 00 .dword 00000fdbh +002F04r 1 DC 0F 00 00 .dword 00000fdch +002F08r 1 DD 0F 00 00 .dword 00000fddh +002F0Cr 1 DE 0F 00 00 .dword 00000fdeh +002F10r 1 DF 0F 00 00 .dword 00000fdfh +002F14r 1 E0 0F 00 00 .dword 00000fe0h +002F18r 1 E1 0F 00 00 .dword 00000fe1h +002F1Cr 1 E2 0F 00 00 .dword 00000fe2h +002F20r 1 E3 0F 00 00 .dword 00000fe3h +002F24r 1 E4 0F 00 00 .dword 00000fe4h +002F28r 1 E5 0F 00 00 .dword 00000fe5h +002F2Cr 1 E6 0F 00 00 .dword 00000fe6h +002F30r 1 E7 0F 00 00 .dword 00000fe7h +002F34r 1 E8 0F 00 00 .dword 00000fe8h +002F38r 1 E9 0F 00 00 .dword 00000fe9h +002F3Cr 1 EA 0F 00 00 .dword 00000feah +002F40r 1 EB 0F 00 00 .dword 00000febh +002F44r 1 EC 0F 00 00 .dword 00000fech +002F48r 1 ED 0F 00 00 .dword 00000fedh +002F4Cr 1 EE 0F 00 00 .dword 00000feeh +002F50r 1 EF 0F 00 00 .dword 00000fefh +002F54r 1 F0 0F 00 00 .dword 00000ff0h +002F58r 1 F1 0F 00 00 .dword 00000ff1h +002F5Cr 1 F2 0F 00 00 .dword 00000ff2h +002F60r 1 F3 0F 00 00 .dword 00000ff3h +002F64r 1 F4 0F 00 00 .dword 00000ff4h +002F68r 1 F5 0F 00 00 .dword 00000ff5h +002F6Cr 1 F6 0F 00 00 .dword 00000ff6h +002F70r 1 F7 0F 00 00 .dword 00000ff7h +002F74r 1 F8 0F 00 00 .dword 00000ff8h +002F78r 1 F9 0F 00 00 .dword 00000ff9h +002F7Cr 1 FA 0F 00 00 .dword 00000ffah +002F80r 1 FB 0F 00 00 .dword 00000ffbh +002F84r 1 FC 0F 00 00 .dword 00000ffch +002F88r 1 FD 0F 00 00 .dword 00000ffdh +002F8Cr 1 FE 0F 00 00 .dword 00000ffeh +002F90r 1 FF 0F 00 00 .dword 00000fffh +002F94r 1 00 10 00 00 .dword 00001000h +002F98r 1 01 10 00 00 .dword 00001001h +002F9Cr 1 02 10 00 00 .dword 00001002h +002FA0r 1 03 10 00 00 .dword 00001003h +002FA4r 1 04 10 00 00 .dword 00001004h +002FA8r 1 05 10 00 00 .dword 00001005h +002FACr 1 06 10 00 00 .dword 00001006h +002FB0r 1 07 10 00 00 .dword 00001007h +002FB4r 1 08 10 00 00 .dword 00001008h +002FB8r 1 F0 7F 00 00 .dword 00007ff0h +002FBCr 1 F1 7F 00 00 .dword 00007ff1h +002FC0r 1 F2 7F 00 00 .dword 00007ff2h +002FC4r 1 F3 7F 00 00 .dword 00007ff3h +002FC8r 1 F4 7F 00 00 .dword 00007ff4h +002FCCr 1 F5 7F 00 00 .dword 00007ff5h +002FD0r 1 F6 7F 00 00 .dword 00007ff6h +002FD4r 1 F7 7F 00 00 .dword 00007ff7h +002FD8r 1 F8 7F 00 00 .dword 00007ff8h +002FDCr 1 F9 7F 00 00 .dword 00007ff9h +002FE0r 1 FA 7F 00 00 .dword 00007ffah +002FE4r 1 FB 7F 00 00 .dword 00007ffbh +002FE8r 1 FC 7F 00 00 .dword 00007ffch +002FECr 1 FD 7F 00 00 .dword 00007ffdh +002FF0r 1 FE 7F 00 00 .dword 00007ffeh +002FF4r 1 FF 7F 00 00 .dword 00007fffh +002FF8r 1 00 80 00 00 .dword 00008000h +002FFCr 1 01 80 00 00 .dword 00008001h +003000r 1 02 80 00 00 .dword 00008002h +003004r 1 03 80 00 00 .dword 00008003h +003008r 1 04 80 00 00 .dword 00008004h +00300Cr 1 05 80 00 00 .dword 00008005h +003010r 1 06 80 00 00 .dword 00008006h +003014r 1 07 80 00 00 .dword 00008007h +003018r 1 08 80 00 00 .dword 00008008h +00301Cr 1 09 80 00 00 .dword 00008009h +003020r 1 0A 80 00 00 .dword 0000800ah +003024r 1 0B 80 00 00 .dword 0000800bh +003028r 1 E1 9F 00 00 .dword 00009fe1h +00302Cr 1 E2 9F 00 00 .dword 00009fe2h +003030r 1 E3 9F 00 00 .dword 00009fe3h +003034r 1 E4 9F 00 00 .dword 00009fe4h +003038r 1 E5 9F 00 00 .dword 00009fe5h +00303Cr 1 E6 9F 00 00 .dword 00009fe6h +003040r 1 E7 9F 00 00 .dword 00009fe7h +003044r 1 E8 9F 00 00 .dword 00009fe8h +003048r 1 E9 9F 00 00 .dword 00009fe9h +00304Cr 1 EA 9F 00 00 .dword 00009feah +003050r 1 EB 9F 00 00 .dword 00009febh +003054r 1 EC 9F 00 00 .dword 00009fech +003058r 1 ED 9F 00 00 .dword 00009fedh +00305Cr 1 EE 9F 00 00 .dword 00009feeh +003060r 1 EF 9F 00 00 .dword 00009fefh +003064r 1 F0 9F 00 00 .dword 00009ff0h +003068r 1 F1 9F 00 00 .dword 00009ff1h +00306Cr 1 F2 9F 00 00 .dword 00009ff2h +003070r 1 F3 9F 00 00 .dword 00009ff3h +003074r 1 F4 9F 00 00 .dword 00009ff4h +003078r 1 F5 9F 00 00 .dword 00009ff5h +00307Cr 1 F6 9F 00 00 .dword 00009ff6h +003080r 1 F7 9F 00 00 .dword 00009ff7h +003084r 1 F8 9F 00 00 .dword 00009ff8h +003088r 1 F9 9F 00 00 .dword 00009ff9h +00308Cr 1 FA 9F 00 00 .dword 00009ffah +003090r 1 FB 9F 00 00 .dword 00009ffbh +003094r 1 FC 9F 00 00 .dword 00009ffch +003098r 1 FD 9F 00 00 .dword 00009ffdh +00309Cr 1 FE 9F 00 00 .dword 00009ffeh +0030A0r 1 FF 9F 00 00 .dword 00009fffh +0030A4r 1 00 A0 00 00 .dword 0000a000h +0030A8r 1 01 A0 00 00 .dword 0000a001h +0030ACr 1 02 A0 00 00 .dword 0000a002h +0030B0r 1 03 A0 00 00 .dword 0000a003h +0030B4r 1 04 A0 00 00 .dword 0000a004h +0030B8r 1 05 A0 00 00 .dword 0000a005h +0030BCr 1 06 A0 00 00 .dword 0000a006h +0030C0r 1 07 A0 00 00 .dword 0000a007h +0030C4r 1 08 A0 00 00 .dword 0000a008h +0030C8r 1 09 A0 00 00 .dword 0000a009h +0030CCr 1 0A A0 00 00 .dword 0000a00ah +0030D0r 1 0B A0 00 00 .dword 0000a00bh +0030D4r 1 0C A0 00 00 .dword 0000a00ch +0030D8r 1 0D A0 00 00 .dword 0000a00dh +0030DCr 1 0E A0 00 00 .dword 0000a00eh +0030E0r 1 0F A0 00 00 .dword 0000a00fh +0030E4r 1 E1 AF 00 00 .dword 0000afe1h +0030E8r 1 E2 AF 00 00 .dword 0000afe2h +0030ECr 1 E3 AF 00 00 .dword 0000afe3h +0030F0r 1 E4 AF 00 00 .dword 0000afe4h +0030F4r 1 E5 AF 00 00 .dword 0000afe5h +0030F8r 1 E6 AF 00 00 .dword 0000afe6h +0030FCr 1 E7 AF 00 00 .dword 0000afe7h +003100r 1 E8 AF 00 00 .dword 0000afe8h +003104r 1 E9 AF 00 00 .dword 0000afe9h +003108r 1 EA AF 00 00 .dword 0000afeah +00310Cr 1 EB AF 00 00 .dword 0000afebh +003110r 1 EC AF 00 00 .dword 0000afech +003114r 1 ED AF 00 00 .dword 0000afedh +003118r 1 EE AF 00 00 .dword 0000afeeh +00311Cr 1 EF AF 00 00 .dword 0000afefh +003120r 1 F0 AF 00 00 .dword 0000aff0h +003124r 1 F1 AF 00 00 .dword 0000aff1h +003128r 1 F2 AF 00 00 .dword 0000aff2h +00312Cr 1 F3 AF 00 00 .dword 0000aff3h +003130r 1 F4 AF 00 00 .dword 0000aff4h +003134r 1 F5 AF 00 00 .dword 0000aff5h +003138r 1 F6 AF 00 00 .dword 0000aff6h +00313Cr 1 F7 AF 00 00 .dword 0000aff7h +003140r 1 F8 AF 00 00 .dword 0000aff8h +003144r 1 F9 AF 00 00 .dword 0000aff9h +003148r 1 FA AF 00 00 .dword 0000affah +00314Cr 1 FB AF 00 00 .dword 0000affbh +003150r 1 FC AF 00 00 .dword 0000affch +003154r 1 FD AF 00 00 .dword 0000affdh +003158r 1 FE AF 00 00 .dword 0000affeh +00315Cr 1 FF AF 00 00 .dword 0000afffh +003160r 1 00 B0 00 00 .dword 0000b000h +003164r 1 01 B0 00 00 .dword 0000b001h +003168r 1 02 B0 00 00 .dword 0000b002h +00316Cr 1 03 B0 00 00 .dword 0000b003h +003170r 1 04 B0 00 00 .dword 0000b004h +003174r 1 05 B0 00 00 .dword 0000b005h +003178r 1 06 B0 00 00 .dword 0000b006h +00317Cr 1 07 B0 00 00 .dword 0000b007h +003180r 1 08 B0 00 00 .dword 0000b008h +003184r 1 09 B0 00 00 .dword 0000b009h +003188r 1 0A B0 00 00 .dword 0000b00ah +00318Cr 1 0B B0 00 00 .dword 0000b00bh +003190r 1 0C B0 00 00 .dword 0000b00ch +003194r 1 0D B0 00 00 .dword 0000b00dh +003198r 1 0E B0 00 00 .dword 0000b00eh +00319Cr 1 0F B0 00 00 .dword 0000b00fh +0031A0r 1 E1 FF 00 00 .dword 0000ffe1h +0031A4r 1 E2 FF 00 00 .dword 0000ffe2h +0031A8r 1 E3 FF 00 00 .dword 0000ffe3h +0031ACr 1 E4 FF 00 00 .dword 0000ffe4h +0031B0r 1 E5 FF 00 00 .dword 0000ffe5h +0031B4r 1 E6 FF 00 00 .dword 0000ffe6h +0031B8r 1 E7 FF 00 00 .dword 0000ffe7h +0031BCr 1 E8 FF 00 00 .dword 0000ffe8h +0031C0r 1 E9 FF 00 00 .dword 0000ffe9h +0031C4r 1 EA FF 00 00 .dword 0000ffeah +0031C8r 1 EB FF 00 00 .dword 0000ffebh +0031CCr 1 EC FF 00 00 .dword 0000ffech +0031D0r 1 ED FF 00 00 .dword 0000ffedh +0031D4r 1 EE FF 00 00 .dword 0000ffeeh +0031D8r 1 EF FF 00 00 .dword 0000ffefh +0031DCr 1 F0 FF 00 00 .dword 0000fff0h +0031E0r 1 F1 FF 00 00 .dword 0000fff1h +0031E4r 1 F2 FF 00 00 .dword 0000fff2h +0031E8r 1 F3 FF 00 00 .dword 0000fff3h +0031ECr 1 F4 FF 00 00 .dword 0000fff4h +0031F0r 1 F5 FF 00 00 .dword 0000fff5h +0031F4r 1 F6 FF 00 00 .dword 0000fff6h +0031F8r 1 F7 FF 00 00 .dword 0000fff7h +0031FCr 1 F8 FF 00 00 .dword 0000fff8h +003200r 1 F9 FF 00 00 .dword 0000fff9h +003204r 1 FA FF 00 00 .dword 0000fffah +003208r 1 FB FF 00 00 .dword 0000fffbh +00320Cr 1 FC FF 00 00 .dword 0000fffch +003210r 1 FD FF 00 00 .dword 0000fffdh +003214r 1 FE FF 00 00 .dword 0000fffeh +003218r 1 FF FF 00 00 .dword 0000ffffh +00321Cr 1 00 00 01 00 .dword 00010000h +003220r 1 01 00 01 00 .dword 00010001h +003224r 1 02 00 01 00 .dword 00010002h +003228r 1 03 00 01 00 .dword 00010003h +00322Cr 1 04 00 01 00 .dword 00010004h +003230r 1 05 00 01 00 .dword 00010005h +003234r 1 06 00 01 00 .dword 00010006h +003238r 1 07 00 01 00 .dword 00010007h +00323Cr 1 08 00 01 00 .dword 00010008h +003240r 1 09 00 01 00 .dword 00010009h +003244r 1 0A 00 01 00 .dword 0001000ah +003248r 1 0B 00 01 00 .dword 0001000bh +00324Cr 1 0C 00 01 00 .dword 0001000ch +003250r 1 0D 00 01 00 .dword 0001000dh +003254r 1 0E 00 01 00 .dword 0001000eh +003258r 1 0F 00 01 00 .dword 0001000fh +00325Cr 1 F0 FF FF 7F .dword 7ffffff0h +003260r 1 F1 FF FF 7F .dword 7ffffff1h +003264r 1 F2 FF FF 7F .dword 7ffffff2h +003268r 1 F3 FF FF 7F .dword 7ffffff3h +00326Cr 1 F4 FF FF 7F .dword 7ffffff4h +003270r 1 F5 FF FF 7F .dword 7ffffff5h +003274r 1 F6 FF FF 7F .dword 7ffffff6h +003278r 1 F7 FF FF 7F .dword 7ffffff7h +00327Cr 1 F8 FF FF 7F .dword 7ffffff8h +003280r 1 F9 FF FF 7F .dword 7ffffff9h +003284r 1 FA FF FF 7F .dword 7ffffffah +003288r 1 FB FF FF 7F .dword 7ffffffbh +00328Cr 1 FC FF FF 7F .dword 7ffffffch +003290r 1 FD FF FF 7F .dword 7ffffffdh +003294r 1 FE FF FF 7F .dword 7ffffffeh +003298r 1 FF FF FF 7F .dword 7fffffffh +00329Cr 1 00 00 00 80 .dword 80000000h +0032A0r 1 01 00 00 80 .dword 80000001h +0032A4r 1 02 00 00 80 .dword 80000002h +0032A8r 1 03 00 00 80 .dword 80000003h +0032ACr 1 04 00 00 80 .dword 80000004h +0032B0r 1 05 00 00 80 .dword 80000005h +0032B4r 1 06 00 00 80 .dword 80000006h +0032B8r 1 07 00 00 80 .dword 80000007h +0032BCr 1 08 00 00 80 .dword 80000008h +0032C0r 1 09 00 00 80 .dword 80000009h +0032C4r 1 0A 00 00 80 .dword 8000000ah +0032C8r 1 0B 00 00 80 .dword 8000000bh +0032CCr 1 0C 00 00 80 .dword 8000000ch +0032D0r 1 0D 00 00 80 .dword 8000000dh +0032D4r 1 0E 00 00 80 .dword 8000000eh +0032D8r 1 0F 00 00 80 .dword 8000000fh +0032DCr 1 F0 FF FF 9F .dword 9ffffff0h +0032E0r 1 F1 FF FF 9F .dword 9ffffff1h +0032E4r 1 F2 FF FF 9F .dword 9ffffff2h +0032E8r 1 F3 FF FF 9F .dword 9ffffff3h +0032ECr 1 F4 FF FF 9F .dword 9ffffff4h +0032F0r 1 F5 FF FF 9F .dword 9ffffff5h +0032F4r 1 F6 FF FF 9F .dword 9ffffff6h +0032F8r 1 F7 FF FF 9F .dword 9ffffff7h +0032FCr 1 F8 FF FF 9F .dword 9ffffff8h +003300r 1 F9 FF FF 9F .dword 9ffffff9h +003304r 1 FA FF FF 9F .dword 9ffffffah +003308r 1 FB FF FF 9F .dword 9ffffffbh +00330Cr 1 FC FF FF 9F .dword 9ffffffch +003310r 1 FD FF FF 9F .dword 9ffffffdh +003314r 1 FE FF FF 9F .dword 9ffffffeh +003318r 1 FF FF FF 9F .dword 9fffffffh +00331Cr 1 00 00 00 A0 .dword 0a0000000h +003320r 1 01 00 00 A0 .dword 0a0000001h +003324r 1 02 00 00 A0 .dword 0a0000002h +003328r 1 03 00 00 A0 .dword 0a0000003h +00332Cr 1 04 00 00 A0 .dword 0a0000004h +003330r 1 05 00 00 A0 .dword 0a0000005h +003334r 1 06 00 00 A0 .dword 0a0000006h +003338r 1 07 00 00 A0 .dword 0a0000007h +00333Cr 1 08 00 00 A0 .dword 0a0000008h +003340r 1 09 00 00 A0 .dword 0a0000009h +003344r 1 0A 00 00 A0 .dword 0a000000ah +003348r 1 0B 00 00 A0 .dword 0a000000bh +00334Cr 1 0C 00 00 A0 .dword 0a000000ch +003350r 1 0D 00 00 A0 .dword 0a000000dh +003354r 1 0E 00 00 A0 .dword 0a000000eh +003358r 1 0F 00 00 A0 .dword 0a000000fh +00335Cr 1 F0 FF FF FF .dword 0fffffff0h +003360r 1 F1 FF FF FF .dword 0fffffff1h +003364r 1 F2 FF FF FF .dword 0fffffff2h +003368r 1 F3 FF FF FF .dword 0fffffff3h +00336Cr 1 F4 FF FF FF .dword 0fffffff4h +003370r 1 F5 FF FF FF .dword 0fffffff5h +003374r 1 F6 FF FF FF .dword 0fffffff6h +003378r 1 F7 FF FF FF .dword 0fffffff7h +00337Cr 1 F8 FF FF FF .dword 0fffffff8h +003380r 1 F9 FF FF FF .dword 0fffffff9h +003384r 1 FA FF FF FF .dword 0fffffffah +003388r 1 FB FF FF FF .dword 0fffffffbh +00338Cr 1 FC FF FF FF .dword 0fffffffch +003390r 1 FD FF FF FF .dword 0fffffffdh +003394r 1 FE FF FF FF .dword 0fffffffeh +003398r 1 FF FF FF FF .dword 0ffffffffh +00339Cr 1 +00339Cr 1 ; alternative 8-digit hex values, uppercase +00339Cr 1 00 00 00 00 .dword 00000000h +0033A0r 1 01 00 00 00 .dword 00000001h +0033A4r 1 02 00 00 00 .dword 00000002h +0033A8r 1 03 00 00 00 .dword 00000003h +0033ACr 1 04 00 00 00 .dword 00000004h +0033B0r 1 05 00 00 00 .dword 00000005h +0033B4r 1 06 00 00 00 .dword 00000006h +0033B8r 1 07 00 00 00 .dword 00000007h +0033BCr 1 08 00 00 00 .dword 00000008h +0033C0r 1 09 00 00 00 .dword 00000009h +0033C4r 1 0A 00 00 00 .dword 0000000Ah +0033C8r 1 0B 00 00 00 .dword 0000000Bh +0033CCr 1 0C 00 00 00 .dword 0000000Ch +0033D0r 1 0D 00 00 00 .dword 0000000Dh +0033D4r 1 0E 00 00 00 .dword 0000000Eh +0033D8r 1 0F 00 00 00 .dword 0000000Fh +0033DCr 1 10 00 00 00 .dword 00000010h +0033E0r 1 11 00 00 00 .dword 00000011h +0033E4r 1 12 00 00 00 .dword 00000012h +0033E8r 1 13 00 00 00 .dword 00000013h +0033ECr 1 70 00 00 00 .dword 00000070h +0033F0r 1 71 00 00 00 .dword 00000071h +0033F4r 1 72 00 00 00 .dword 00000072h +0033F8r 1 73 00 00 00 .dword 00000073h +0033FCr 1 74 00 00 00 .dword 00000074h +003400r 1 75 00 00 00 .dword 00000075h +003404r 1 76 00 00 00 .dword 00000076h +003408r 1 77 00 00 00 .dword 00000077h +00340Cr 1 78 00 00 00 .dword 00000078h +003410r 1 79 00 00 00 .dword 00000079h +003414r 1 7A 00 00 00 .dword 0000007Ah +003418r 1 7B 00 00 00 .dword 0000007Bh +00341Cr 1 7C 00 00 00 .dword 0000007Ch +003420r 1 7D 00 00 00 .dword 0000007Dh +003424r 1 7E 00 00 00 .dword 0000007Eh +003428r 1 7F 00 00 00 .dword 0000007Fh +00342Cr 1 80 00 00 00 .dword 00000080h +003430r 1 81 00 00 00 .dword 00000081h +003434r 1 82 00 00 00 .dword 00000082h +003438r 1 83 00 00 00 .dword 00000083h +00343Cr 1 84 00 00 00 .dword 00000084h +003440r 1 85 00 00 00 .dword 00000085h +003444r 1 86 00 00 00 .dword 00000086h +003448r 1 F0 00 00 00 .dword 000000F0h +00344Cr 1 F1 00 00 00 .dword 000000F1h +003450r 1 F2 00 00 00 .dword 000000F2h +003454r 1 F3 00 00 00 .dword 000000F3h +003458r 1 F4 00 00 00 .dword 000000F4h +00345Cr 1 F5 00 00 00 .dword 000000F5h +003460r 1 F6 00 00 00 .dword 000000F6h +003464r 1 F7 00 00 00 .dword 000000F7h +003468r 1 F8 00 00 00 .dword 000000F8h +00346Cr 1 F9 00 00 00 .dword 000000F9h +003470r 1 FA 00 00 00 .dword 000000FAh +003474r 1 FB 00 00 00 .dword 000000FBh +003478r 1 FC 00 00 00 .dword 000000FCh +00347Cr 1 FD 00 00 00 .dword 000000FDh +003480r 1 FE 00 00 00 .dword 000000FEh +003484r 1 FF 00 00 00 .dword 000000FFh +003488r 1 00 01 00 00 .dword 00000100h +00348Cr 1 01 01 00 00 .dword 00000101h +003490r 1 02 01 00 00 .dword 00000102h +003494r 1 03 01 00 00 .dword 00000103h +003498r 1 D2 0F 00 00 .dword 00000FD2h +00349Cr 1 D3 0F 00 00 .dword 00000FD3h +0034A0r 1 D4 0F 00 00 .dword 00000FD4h +0034A4r 1 D5 0F 00 00 .dword 00000FD5h +0034A8r 1 D6 0F 00 00 .dword 00000FD6h +0034ACr 1 D7 0F 00 00 .dword 00000FD7h +0034B0r 1 D8 0F 00 00 .dword 00000FD8h +0034B4r 1 D9 0F 00 00 .dword 00000FD9h +0034B8r 1 DA 0F 00 00 .dword 00000FDAh +0034BCr 1 DB 0F 00 00 .dword 00000FDBh +0034C0r 1 DC 0F 00 00 .dword 00000FDCh +0034C4r 1 DD 0F 00 00 .dword 00000FDDh +0034C8r 1 DE 0F 00 00 .dword 00000FDEh +0034CCr 1 DF 0F 00 00 .dword 00000FDFh +0034D0r 1 E0 0F 00 00 .dword 00000FE0h +0034D4r 1 E1 0F 00 00 .dword 00000FE1h +0034D8r 1 E2 0F 00 00 .dword 00000FE2h +0034DCr 1 E3 0F 00 00 .dword 00000FE3h +0034E0r 1 E4 0F 00 00 .dword 00000FE4h +0034E4r 1 E5 0F 00 00 .dword 00000FE5h +0034E8r 1 E6 0F 00 00 .dword 00000FE6h +0034ECr 1 E7 0F 00 00 .dword 00000FE7h +0034F0r 1 E8 0F 00 00 .dword 00000FE8h +0034F4r 1 E9 0F 00 00 .dword 00000FE9h +0034F8r 1 EA 0F 00 00 .dword 00000FEAh +0034FCr 1 EB 0F 00 00 .dword 00000FEBh +003500r 1 EC 0F 00 00 .dword 00000FECh +003504r 1 ED 0F 00 00 .dword 00000FEDh +003508r 1 EE 0F 00 00 .dword 00000FEEh +00350Cr 1 EF 0F 00 00 .dword 00000FEFh +003510r 1 F0 0F 00 00 .dword 00000FF0h +003514r 1 F1 0F 00 00 .dword 00000FF1h +003518r 1 F2 0F 00 00 .dword 00000FF2h +00351Cr 1 F3 0F 00 00 .dword 00000FF3h +003520r 1 F4 0F 00 00 .dword 00000FF4h +003524r 1 F5 0F 00 00 .dword 00000FF5h +003528r 1 F6 0F 00 00 .dword 00000FF6h +00352Cr 1 F7 0F 00 00 .dword 00000FF7h +003530r 1 F8 0F 00 00 .dword 00000FF8h +003534r 1 F9 0F 00 00 .dword 00000FF9h +003538r 1 FA 0F 00 00 .dword 00000FFAh +00353Cr 1 FB 0F 00 00 .dword 00000FFBh +003540r 1 FC 0F 00 00 .dword 00000FFCh +003544r 1 FD 0F 00 00 .dword 00000FFDh +003548r 1 FE 0F 00 00 .dword 00000FFEh +00354Cr 1 FF 0F 00 00 .dword 00000FFFh +003550r 1 00 10 00 00 .dword 00001000h +003554r 1 01 10 00 00 .dword 00001001h +003558r 1 02 10 00 00 .dword 00001002h +00355Cr 1 03 10 00 00 .dword 00001003h +003560r 1 04 10 00 00 .dword 00001004h +003564r 1 05 10 00 00 .dword 00001005h +003568r 1 06 10 00 00 .dword 00001006h +00356Cr 1 07 10 00 00 .dword 00001007h +003570r 1 08 10 00 00 .dword 00001008h +003574r 1 F0 7F 00 00 .dword 00007FF0h +003578r 1 F1 7F 00 00 .dword 00007FF1h +00357Cr 1 F2 7F 00 00 .dword 00007FF2h +003580r 1 F3 7F 00 00 .dword 00007FF3h +003584r 1 F4 7F 00 00 .dword 00007FF4h +003588r 1 F5 7F 00 00 .dword 00007FF5h +00358Cr 1 F6 7F 00 00 .dword 00007FF6h +003590r 1 F7 7F 00 00 .dword 00007FF7h +003594r 1 F8 7F 00 00 .dword 00007FF8h +003598r 1 F9 7F 00 00 .dword 00007FF9h +00359Cr 1 FA 7F 00 00 .dword 00007FFAh +0035A0r 1 FB 7F 00 00 .dword 00007FFBh +0035A4r 1 FC 7F 00 00 .dword 00007FFCh +0035A8r 1 FD 7F 00 00 .dword 00007FFDh +0035ACr 1 FE 7F 00 00 .dword 00007FFEh +0035B0r 1 FF 7F 00 00 .dword 00007FFFh +0035B4r 1 00 80 00 00 .dword 00008000h +0035B8r 1 01 80 00 00 .dword 00008001h +0035BCr 1 02 80 00 00 .dword 00008002h +0035C0r 1 03 80 00 00 .dword 00008003h +0035C4r 1 04 80 00 00 .dword 00008004h +0035C8r 1 05 80 00 00 .dword 00008005h +0035CCr 1 06 80 00 00 .dword 00008006h +0035D0r 1 07 80 00 00 .dword 00008007h +0035D4r 1 08 80 00 00 .dword 00008008h +0035D8r 1 09 80 00 00 .dword 00008009h +0035DCr 1 0A 80 00 00 .dword 0000800Ah +0035E0r 1 0B 80 00 00 .dword 0000800Bh +0035E4r 1 E1 9F 00 00 .dword 00009FE1h +0035E8r 1 E2 9F 00 00 .dword 00009FE2h +0035ECr 1 E3 9F 00 00 .dword 00009FE3h +0035F0r 1 E4 9F 00 00 .dword 00009FE4h +0035F4r 1 E5 9F 00 00 .dword 00009FE5h +0035F8r 1 E6 9F 00 00 .dword 00009FE6h +0035FCr 1 E7 9F 00 00 .dword 00009FE7h +003600r 1 E8 9F 00 00 .dword 00009FE8h +003604r 1 E9 9F 00 00 .dword 00009FE9h +003608r 1 EA 9F 00 00 .dword 00009FEAh +00360Cr 1 EB 9F 00 00 .dword 00009FEBh +003610r 1 EC 9F 00 00 .dword 00009FECh +003614r 1 ED 9F 00 00 .dword 00009FEDh +003618r 1 EE 9F 00 00 .dword 00009FEEh +00361Cr 1 EF 9F 00 00 .dword 00009FEFh +003620r 1 F0 9F 00 00 .dword 00009FF0h +003624r 1 F1 9F 00 00 .dword 00009FF1h +003628r 1 F2 9F 00 00 .dword 00009FF2h +00362Cr 1 F3 9F 00 00 .dword 00009FF3h +003630r 1 F4 9F 00 00 .dword 00009FF4h +003634r 1 F5 9F 00 00 .dword 00009FF5h +003638r 1 F6 9F 00 00 .dword 00009FF6h +00363Cr 1 F7 9F 00 00 .dword 00009FF7h +003640r 1 F8 9F 00 00 .dword 00009FF8h +003644r 1 F9 9F 00 00 .dword 00009FF9h +003648r 1 FA 9F 00 00 .dword 00009FFAh +00364Cr 1 FB 9F 00 00 .dword 00009FFBh +003650r 1 FC 9F 00 00 .dword 00009FFCh +003654r 1 FD 9F 00 00 .dword 00009FFDh +003658r 1 FE 9F 00 00 .dword 00009FFEh +00365Cr 1 FF 9F 00 00 .dword 00009FFFh +003660r 1 00 A0 00 00 .dword 0000A000h +003664r 1 01 A0 00 00 .dword 0000A001h +003668r 1 02 A0 00 00 .dword 0000A002h +00366Cr 1 03 A0 00 00 .dword 0000A003h +003670r 1 04 A0 00 00 .dword 0000A004h +003674r 1 05 A0 00 00 .dword 0000A005h +003678r 1 06 A0 00 00 .dword 0000A006h +00367Cr 1 07 A0 00 00 .dword 0000A007h +003680r 1 08 A0 00 00 .dword 0000A008h +003684r 1 09 A0 00 00 .dword 0000A009h +003688r 1 0A A0 00 00 .dword 0000A00Ah +00368Cr 1 0B A0 00 00 .dword 0000A00Bh +003690r 1 0C A0 00 00 .dword 0000A00Ch +003694r 1 0D A0 00 00 .dword 0000A00Dh +003698r 1 0E A0 00 00 .dword 0000A00Eh +00369Cr 1 0F A0 00 00 .dword 0000A00Fh +0036A0r 1 E1 AF 00 00 .dword 0000AFE1h +0036A4r 1 E2 AF 00 00 .dword 0000AFE2h +0036A8r 1 E3 AF 00 00 .dword 0000AFE3h +0036ACr 1 E4 AF 00 00 .dword 0000AFE4h +0036B0r 1 E5 AF 00 00 .dword 0000AFE5h +0036B4r 1 E6 AF 00 00 .dword 0000AFE6h +0036B8r 1 E7 AF 00 00 .dword 0000AFE7h +0036BCr 1 E8 AF 00 00 .dword 0000AFE8h +0036C0r 1 E9 AF 00 00 .dword 0000AFE9h +0036C4r 1 EA AF 00 00 .dword 0000AFEAh +0036C8r 1 EB AF 00 00 .dword 0000AFEBh +0036CCr 1 EC AF 00 00 .dword 0000AFECh +0036D0r 1 ED AF 00 00 .dword 0000AFEDh +0036D4r 1 EE AF 00 00 .dword 0000AFEEh +0036D8r 1 EF AF 00 00 .dword 0000AFEFh +0036DCr 1 F0 AF 00 00 .dword 0000AFF0h +0036E0r 1 F1 AF 00 00 .dword 0000AFF1h +0036E4r 1 F2 AF 00 00 .dword 0000AFF2h +0036E8r 1 F3 AF 00 00 .dword 0000AFF3h +0036ECr 1 F4 AF 00 00 .dword 0000AFF4h +0036F0r 1 F5 AF 00 00 .dword 0000AFF5h +0036F4r 1 F6 AF 00 00 .dword 0000AFF6h +0036F8r 1 F7 AF 00 00 .dword 0000AFF7h +0036FCr 1 F8 AF 00 00 .dword 0000AFF8h +003700r 1 F9 AF 00 00 .dword 0000AFF9h +003704r 1 FA AF 00 00 .dword 0000AFFAh +003708r 1 FB AF 00 00 .dword 0000AFFBh +00370Cr 1 FC AF 00 00 .dword 0000AFFCh +003710r 1 FD AF 00 00 .dword 0000AFFDh +003714r 1 FE AF 00 00 .dword 0000AFFEh +003718r 1 FF AF 00 00 .dword 0000AFFFh +00371Cr 1 00 B0 00 00 .dword 0000B000h +003720r 1 01 B0 00 00 .dword 0000B001h +003724r 1 02 B0 00 00 .dword 0000B002h +003728r 1 03 B0 00 00 .dword 0000B003h +00372Cr 1 04 B0 00 00 .dword 0000B004h +003730r 1 05 B0 00 00 .dword 0000B005h +003734r 1 06 B0 00 00 .dword 0000B006h +003738r 1 07 B0 00 00 .dword 0000B007h +00373Cr 1 08 B0 00 00 .dword 0000B008h +003740r 1 09 B0 00 00 .dword 0000B009h +003744r 1 0A B0 00 00 .dword 0000B00Ah +003748r 1 0B B0 00 00 .dword 0000B00Bh +00374Cr 1 0C B0 00 00 .dword 0000B00Ch +003750r 1 0D B0 00 00 .dword 0000B00Dh +003754r 1 0E B0 00 00 .dword 0000B00Eh +003758r 1 0F B0 00 00 .dword 0000B00Fh +00375Cr 1 E1 FF 00 00 .dword 0000FFE1h +003760r 1 E2 FF 00 00 .dword 0000FFE2h +003764r 1 E3 FF 00 00 .dword 0000FFE3h +003768r 1 E4 FF 00 00 .dword 0000FFE4h +00376Cr 1 E5 FF 00 00 .dword 0000FFE5h +003770r 1 E6 FF 00 00 .dword 0000FFE6h +003774r 1 E7 FF 00 00 .dword 0000FFE7h +003778r 1 E8 FF 00 00 .dword 0000FFE8h +00377Cr 1 E9 FF 00 00 .dword 0000FFE9h +003780r 1 EA FF 00 00 .dword 0000FFEAh +003784r 1 EB FF 00 00 .dword 0000FFEBh +003788r 1 EC FF 00 00 .dword 0000FFECh +00378Cr 1 ED FF 00 00 .dword 0000FFEDh +003790r 1 EE FF 00 00 .dword 0000FFEEh +003794r 1 EF FF 00 00 .dword 0000FFEFh +003798r 1 F0 FF 00 00 .dword 0000FFF0h +00379Cr 1 F1 FF 00 00 .dword 0000FFF1h +0037A0r 1 F2 FF 00 00 .dword 0000FFF2h +0037A4r 1 F3 FF 00 00 .dword 0000FFF3h +0037A8r 1 F4 FF 00 00 .dword 0000FFF4h +0037ACr 1 F5 FF 00 00 .dword 0000FFF5h +0037B0r 1 F6 FF 00 00 .dword 0000FFF6h +0037B4r 1 F7 FF 00 00 .dword 0000FFF7h +0037B8r 1 F8 FF 00 00 .dword 0000FFF8h +0037BCr 1 F9 FF 00 00 .dword 0000FFF9h +0037C0r 1 FA FF 00 00 .dword 0000FFFAh +0037C4r 1 FB FF 00 00 .dword 0000FFFBh +0037C8r 1 FC FF 00 00 .dword 0000FFFCh +0037CCr 1 FD FF 00 00 .dword 0000FFFDh +0037D0r 1 FE FF 00 00 .dword 0000FFFEh +0037D4r 1 FF FF 00 00 .dword 0000FFFFh +0037D8r 1 00 00 01 00 .dword 00010000h +0037DCr 1 01 00 01 00 .dword 00010001h +0037E0r 1 02 00 01 00 .dword 00010002h +0037E4r 1 03 00 01 00 .dword 00010003h +0037E8r 1 04 00 01 00 .dword 00010004h +0037ECr 1 05 00 01 00 .dword 00010005h +0037F0r 1 06 00 01 00 .dword 00010006h +0037F4r 1 07 00 01 00 .dword 00010007h +0037F8r 1 08 00 01 00 .dword 00010008h +0037FCr 1 09 00 01 00 .dword 00010009h +003800r 1 0A 00 01 00 .dword 0001000Ah +003804r 1 0B 00 01 00 .dword 0001000Bh +003808r 1 0C 00 01 00 .dword 0001000Ch +00380Cr 1 0D 00 01 00 .dword 0001000Dh +003810r 1 0E 00 01 00 .dword 0001000Eh +003814r 1 0F 00 01 00 .dword 0001000Fh +003818r 1 F0 FF FF 7F .dword 7FFFFFF0h +00381Cr 1 F1 FF FF 7F .dword 7FFFFFF1h +003820r 1 F2 FF FF 7F .dword 7FFFFFF2h +003824r 1 F3 FF FF 7F .dword 7FFFFFF3h +003828r 1 F4 FF FF 7F .dword 7FFFFFF4h +00382Cr 1 F5 FF FF 7F .dword 7FFFFFF5h +003830r 1 F6 FF FF 7F .dword 7FFFFFF6h +003834r 1 F7 FF FF 7F .dword 7FFFFFF7h +003838r 1 F8 FF FF 7F .dword 7FFFFFF8h +00383Cr 1 F9 FF FF 7F .dword 7FFFFFF9h +003840r 1 FA FF FF 7F .dword 7FFFFFFAh +003844r 1 FB FF FF 7F .dword 7FFFFFFBh +003848r 1 FC FF FF 7F .dword 7FFFFFFCh +00384Cr 1 FD FF FF 7F .dword 7FFFFFFDh +003850r 1 FE FF FF 7F .dword 7FFFFFFEh +003854r 1 FF FF FF 7F .dword 7FFFFFFFh +003858r 1 00 00 00 80 .dword 80000000h +00385Cr 1 01 00 00 80 .dword 80000001h +003860r 1 02 00 00 80 .dword 80000002h +003864r 1 03 00 00 80 .dword 80000003h +003868r 1 04 00 00 80 .dword 80000004h +00386Cr 1 05 00 00 80 .dword 80000005h +003870r 1 06 00 00 80 .dword 80000006h +003874r 1 07 00 00 80 .dword 80000007h +003878r 1 08 00 00 80 .dword 80000008h +00387Cr 1 09 00 00 80 .dword 80000009h +003880r 1 0A 00 00 80 .dword 8000000Ah +003884r 1 0B 00 00 80 .dword 8000000Bh +003888r 1 0C 00 00 80 .dword 8000000Ch +00388Cr 1 0D 00 00 80 .dword 8000000Dh +003890r 1 0E 00 00 80 .dword 8000000Eh +003894r 1 0F 00 00 80 .dword 8000000Fh +003898r 1 F0 FF FF 9F .dword 9FFFFFF0h +00389Cr 1 F1 FF FF 9F .dword 9FFFFFF1h +0038A0r 1 F2 FF FF 9F .dword 9FFFFFF2h +0038A4r 1 F3 FF FF 9F .dword 9FFFFFF3h +0038A8r 1 F4 FF FF 9F .dword 9FFFFFF4h +0038ACr 1 F5 FF FF 9F .dword 9FFFFFF5h +0038B0r 1 F6 FF FF 9F .dword 9FFFFFF6h +0038B4r 1 F7 FF FF 9F .dword 9FFFFFF7h +0038B8r 1 F8 FF FF 9F .dword 9FFFFFF8h +0038BCr 1 F9 FF FF 9F .dword 9FFFFFF9h +0038C0r 1 FA FF FF 9F .dword 9FFFFFFAh +0038C4r 1 FB FF FF 9F .dword 9FFFFFFBh +0038C8r 1 FC FF FF 9F .dword 9FFFFFFCh +0038CCr 1 FD FF FF 9F .dword 9FFFFFFDh +0038D0r 1 FE FF FF 9F .dword 9FFFFFFEh +0038D4r 1 FF FF FF 9F .dword 9FFFFFFFh +0038D8r 1 00 00 00 A0 .dword 0A0000000h +0038DCr 1 01 00 00 A0 .dword 0A0000001h +0038E0r 1 02 00 00 A0 .dword 0A0000002h +0038E4r 1 03 00 00 A0 .dword 0A0000003h +0038E8r 1 04 00 00 A0 .dword 0A0000004h +0038ECr 1 05 00 00 A0 .dword 0A0000005h +0038F0r 1 06 00 00 A0 .dword 0A0000006h +0038F4r 1 07 00 00 A0 .dword 0A0000007h +0038F8r 1 08 00 00 A0 .dword 0A0000008h +0038FCr 1 09 00 00 A0 .dword 0A0000009h +003900r 1 0A 00 00 A0 .dword 0A000000Ah +003904r 1 0B 00 00 A0 .dword 0A000000Bh +003908r 1 0C 00 00 A0 .dword 0A000000Ch +00390Cr 1 0D 00 00 A0 .dword 0A000000Dh +003910r 1 0E 00 00 A0 .dword 0A000000Eh +003914r 1 0F 00 00 A0 .dword 0A000000Fh +003918r 1 F0 FF FF FF .dword 0FFFFFFF0h +00391Cr 1 F1 FF FF FF .dword 0FFFFFFF1h +003920r 1 F2 FF FF FF .dword 0FFFFFFF2h +003924r 1 F3 FF FF FF .dword 0FFFFFFF3h +003928r 1 F4 FF FF FF .dword 0FFFFFFF4h +00392Cr 1 F5 FF FF FF .dword 0FFFFFFF5h +003930r 1 F6 FF FF FF .dword 0FFFFFFF6h +003934r 1 F7 FF FF FF .dword 0FFFFFFF7h +003938r 1 F8 FF FF FF .dword 0FFFFFFF8h +00393Cr 1 F9 FF FF FF .dword 0FFFFFFF9h +003940r 1 FA FF FF FF .dword 0FFFFFFFAh +003944r 1 FB FF FF FF .dword 0FFFFFFFBh +003948r 1 FC FF FF FF .dword 0FFFFFFFCh +00394Cr 1 FD FF FF FF .dword 0FFFFFFFDh +003950r 1 FE FF FF FF .dword 0FFFFFFFEh +003954r 1 FF FF FF FF .dword 0FFFFFFFFh +003958r 1 +003958r 1 ; alternative hex values, always leading zero +003958r 1 00 00 00 00 .dword 00h +00395Cr 1 01 00 00 00 .dword 01h +003960r 1 02 00 00 00 .dword 02h +003964r 1 03 00 00 00 .dword 03h +003968r 1 04 00 00 00 .dword 04h +00396Cr 1 05 00 00 00 .dword 05h +003970r 1 06 00 00 00 .dword 06h +003974r 1 07 00 00 00 .dword 07h +003978r 1 08 00 00 00 .dword 08h +00397Cr 1 09 00 00 00 .dword 09h +003980r 1 0A 00 00 00 .dword 0ah +003984r 1 0B 00 00 00 .dword 0bh +003988r 1 0C 00 00 00 .dword 0ch +00398Cr 1 0D 00 00 00 .dword 0dh +003990r 1 0E 00 00 00 .dword 0eh +003994r 1 0F 00 00 00 .dword 0fh +003998r 1 10 00 00 00 .dword 010h +00399Cr 1 11 00 00 00 .dword 011h +0039A0r 1 12 00 00 00 .dword 012h +0039A4r 1 13 00 00 00 .dword 013h +0039A8r 1 70 00 00 00 .dword 070h +0039ACr 1 71 00 00 00 .dword 071h +0039B0r 1 72 00 00 00 .dword 072h +0039B4r 1 73 00 00 00 .dword 073h +0039B8r 1 74 00 00 00 .dword 074h +0039BCr 1 75 00 00 00 .dword 075h +0039C0r 1 76 00 00 00 .dword 076h +0039C4r 1 77 00 00 00 .dword 077h +0039C8r 1 78 00 00 00 .dword 078h +0039CCr 1 79 00 00 00 .dword 079h +0039D0r 1 7A 00 00 00 .dword 07ah +0039D4r 1 7B 00 00 00 .dword 07bh +0039D8r 1 7C 00 00 00 .dword 07ch +0039DCr 1 7D 00 00 00 .dword 07dh +0039E0r 1 7E 00 00 00 .dword 07eh +0039E4r 1 7F 00 00 00 .dword 07fh +0039E8r 1 80 00 00 00 .dword 080h +0039ECr 1 81 00 00 00 .dword 081h +0039F0r 1 82 00 00 00 .dword 082h +0039F4r 1 83 00 00 00 .dword 083h +0039F8r 1 84 00 00 00 .dword 084h +0039FCr 1 85 00 00 00 .dword 085h +003A00r 1 86 00 00 00 .dword 086h +003A04r 1 F0 00 00 00 .dword 0f0h +003A08r 1 F1 00 00 00 .dword 0f1h +003A0Cr 1 F2 00 00 00 .dword 0f2h +003A10r 1 F3 00 00 00 .dword 0f3h +003A14r 1 F4 00 00 00 .dword 0f4h +003A18r 1 F5 00 00 00 .dword 0f5h +003A1Cr 1 F6 00 00 00 .dword 0f6h +003A20r 1 F7 00 00 00 .dword 0f7h +003A24r 1 F8 00 00 00 .dword 0f8h +003A28r 1 F9 00 00 00 .dword 0f9h +003A2Cr 1 FA 00 00 00 .dword 0fah +003A30r 1 FB 00 00 00 .dword 0fbh +003A34r 1 FC 00 00 00 .dword 0fch +003A38r 1 FD 00 00 00 .dword 0fdh +003A3Cr 1 FE 00 00 00 .dword 0feh +003A40r 1 FF 00 00 00 .dword 0ffh +003A44r 1 00 01 00 00 .dword 0100h +003A48r 1 01 01 00 00 .dword 0101h +003A4Cr 1 02 01 00 00 .dword 0102h +003A50r 1 03 01 00 00 .dword 0103h +003A54r 1 D2 0F 00 00 .dword 0fd2h +003A58r 1 D3 0F 00 00 .dword 0fd3h +003A5Cr 1 D4 0F 00 00 .dword 0fd4h +003A60r 1 D5 0F 00 00 .dword 0fd5h +003A64r 1 D6 0F 00 00 .dword 0fd6h +003A68r 1 D7 0F 00 00 .dword 0fd7h +003A6Cr 1 D8 0F 00 00 .dword 0fd8h +003A70r 1 D9 0F 00 00 .dword 0fd9h +003A74r 1 DA 0F 00 00 .dword 0fdah +003A78r 1 DB 0F 00 00 .dword 0fdbh +003A7Cr 1 DC 0F 00 00 .dword 0fdch +003A80r 1 DD 0F 00 00 .dword 0fddh +003A84r 1 DE 0F 00 00 .dword 0fdeh +003A88r 1 DF 0F 00 00 .dword 0fdfh +003A8Cr 1 E0 0F 00 00 .dword 0fe0h +003A90r 1 E1 0F 00 00 .dword 0fe1h +003A94r 1 E2 0F 00 00 .dword 0fe2h +003A98r 1 E3 0F 00 00 .dword 0fe3h +003A9Cr 1 E4 0F 00 00 .dword 0fe4h +003AA0r 1 E5 0F 00 00 .dword 0fe5h +003AA4r 1 E6 0F 00 00 .dword 0fe6h +003AA8r 1 E7 0F 00 00 .dword 0fe7h +003AACr 1 E8 0F 00 00 .dword 0fe8h +003AB0r 1 E9 0F 00 00 .dword 0fe9h +003AB4r 1 EA 0F 00 00 .dword 0feah +003AB8r 1 EB 0F 00 00 .dword 0febh +003ABCr 1 EC 0F 00 00 .dword 0fech +003AC0r 1 ED 0F 00 00 .dword 0fedh +003AC4r 1 EE 0F 00 00 .dword 0feeh +003AC8r 1 EF 0F 00 00 .dword 0fefh +003ACCr 1 F0 0F 00 00 .dword 0ff0h +003AD0r 1 F1 0F 00 00 .dword 0ff1h +003AD4r 1 F2 0F 00 00 .dword 0ff2h +003AD8r 1 F3 0F 00 00 .dword 0ff3h +003ADCr 1 F4 0F 00 00 .dword 0ff4h +003AE0r 1 F5 0F 00 00 .dword 0ff5h +003AE4r 1 F6 0F 00 00 .dword 0ff6h +003AE8r 1 F7 0F 00 00 .dword 0ff7h +003AECr 1 F8 0F 00 00 .dword 0ff8h +003AF0r 1 F9 0F 00 00 .dword 0ff9h +003AF4r 1 FA 0F 00 00 .dword 0ffah +003AF8r 1 FB 0F 00 00 .dword 0ffbh +003AFCr 1 FC 0F 00 00 .dword 0ffch +003B00r 1 FD 0F 00 00 .dword 0ffdh +003B04r 1 FE 0F 00 00 .dword 0ffeh +003B08r 1 FF 0F 00 00 .dword 0fffh +003B0Cr 1 00 10 00 00 .dword 01000h +003B10r 1 01 10 00 00 .dword 01001h +003B14r 1 02 10 00 00 .dword 01002h +003B18r 1 03 10 00 00 .dword 01003h +003B1Cr 1 04 10 00 00 .dword 01004h +003B20r 1 05 10 00 00 .dword 01005h +003B24r 1 06 10 00 00 .dword 01006h +003B28r 1 07 10 00 00 .dword 01007h +003B2Cr 1 08 10 00 00 .dword 01008h +003B30r 1 F0 7F 00 00 .dword 07ff0h +003B34r 1 F1 7F 00 00 .dword 07ff1h +003B38r 1 F2 7F 00 00 .dword 07ff2h +003B3Cr 1 F3 7F 00 00 .dword 07ff3h +003B40r 1 F4 7F 00 00 .dword 07ff4h +003B44r 1 F5 7F 00 00 .dword 07ff5h +003B48r 1 F6 7F 00 00 .dword 07ff6h +003B4Cr 1 F7 7F 00 00 .dword 07ff7h +003B50r 1 F8 7F 00 00 .dword 07ff8h +003B54r 1 F9 7F 00 00 .dword 07ff9h +003B58r 1 FA 7F 00 00 .dword 07ffah +003B5Cr 1 FB 7F 00 00 .dword 07ffbh +003B60r 1 FC 7F 00 00 .dword 07ffch +003B64r 1 FD 7F 00 00 .dword 07ffdh +003B68r 1 FE 7F 00 00 .dword 07ffeh +003B6Cr 1 FF 7F 00 00 .dword 07fffh +003B70r 1 00 80 00 00 .dword 08000h +003B74r 1 01 80 00 00 .dword 08001h +003B78r 1 02 80 00 00 .dword 08002h +003B7Cr 1 03 80 00 00 .dword 08003h +003B80r 1 04 80 00 00 .dword 08004h +003B84r 1 05 80 00 00 .dword 08005h +003B88r 1 06 80 00 00 .dword 08006h +003B8Cr 1 07 80 00 00 .dword 08007h +003B90r 1 08 80 00 00 .dword 08008h +003B94r 1 09 80 00 00 .dword 08009h +003B98r 1 0A 80 00 00 .dword 0800ah +003B9Cr 1 0B 80 00 00 .dword 0800bh +003BA0r 1 E1 9F 00 00 .dword 09fe1h +003BA4r 1 E2 9F 00 00 .dword 09fe2h +003BA8r 1 E3 9F 00 00 .dword 09fe3h +003BACr 1 E4 9F 00 00 .dword 09fe4h +003BB0r 1 E5 9F 00 00 .dword 09fe5h +003BB4r 1 E6 9F 00 00 .dword 09fe6h +003BB8r 1 E7 9F 00 00 .dword 09fe7h +003BBCr 1 E8 9F 00 00 .dword 09fe8h +003BC0r 1 E9 9F 00 00 .dword 09fe9h +003BC4r 1 EA 9F 00 00 .dword 09feah +003BC8r 1 EB 9F 00 00 .dword 09febh +003BCCr 1 EC 9F 00 00 .dword 09fech +003BD0r 1 ED 9F 00 00 .dword 09fedh +003BD4r 1 EE 9F 00 00 .dword 09feeh +003BD8r 1 EF 9F 00 00 .dword 09fefh +003BDCr 1 F0 9F 00 00 .dword 09ff0h +003BE0r 1 F1 9F 00 00 .dword 09ff1h +003BE4r 1 F2 9F 00 00 .dword 09ff2h +003BE8r 1 F3 9F 00 00 .dword 09ff3h +003BECr 1 F4 9F 00 00 .dword 09ff4h +003BF0r 1 F5 9F 00 00 .dword 09ff5h +003BF4r 1 F6 9F 00 00 .dword 09ff6h +003BF8r 1 F7 9F 00 00 .dword 09ff7h +003BFCr 1 F8 9F 00 00 .dword 09ff8h +003C00r 1 F9 9F 00 00 .dword 09ff9h +003C04r 1 FA 9F 00 00 .dword 09ffah +003C08r 1 FB 9F 00 00 .dword 09ffbh +003C0Cr 1 FC 9F 00 00 .dword 09ffch +003C10r 1 FD 9F 00 00 .dword 09ffdh +003C14r 1 FE 9F 00 00 .dword 09ffeh +003C18r 1 FF 9F 00 00 .dword 09fffh +003C1Cr 1 00 A0 00 00 .dword 0a000h +003C20r 1 01 A0 00 00 .dword 0a001h +003C24r 1 02 A0 00 00 .dword 0a002h +003C28r 1 03 A0 00 00 .dword 0a003h +003C2Cr 1 04 A0 00 00 .dword 0a004h +003C30r 1 05 A0 00 00 .dword 0a005h +003C34r 1 06 A0 00 00 .dword 0a006h +003C38r 1 07 A0 00 00 .dword 0a007h +003C3Cr 1 08 A0 00 00 .dword 0a008h +003C40r 1 09 A0 00 00 .dword 0a009h +003C44r 1 0A A0 00 00 .dword 0a00ah +003C48r 1 0B A0 00 00 .dword 0a00bh +003C4Cr 1 0C A0 00 00 .dword 0a00ch +003C50r 1 0D A0 00 00 .dword 0a00dh +003C54r 1 0E A0 00 00 .dword 0a00eh +003C58r 1 0F A0 00 00 .dword 0a00fh +003C5Cr 1 E1 AF 00 00 .dword 0afe1h +003C60r 1 E2 AF 00 00 .dword 0afe2h +003C64r 1 E3 AF 00 00 .dword 0afe3h +003C68r 1 E4 AF 00 00 .dword 0afe4h +003C6Cr 1 E5 AF 00 00 .dword 0afe5h +003C70r 1 E6 AF 00 00 .dword 0afe6h +003C74r 1 E7 AF 00 00 .dword 0afe7h +003C78r 1 E8 AF 00 00 .dword 0afe8h +003C7Cr 1 E9 AF 00 00 .dword 0afe9h +003C80r 1 EA AF 00 00 .dword 0afeah +003C84r 1 EB AF 00 00 .dword 0afebh +003C88r 1 EC AF 00 00 .dword 0afech +003C8Cr 1 ED AF 00 00 .dword 0afedh +003C90r 1 EE AF 00 00 .dword 0afeeh +003C94r 1 EF AF 00 00 .dword 0afefh +003C98r 1 F0 AF 00 00 .dword 0aff0h +003C9Cr 1 F1 AF 00 00 .dword 0aff1h +003CA0r 1 F2 AF 00 00 .dword 0aff2h +003CA4r 1 F3 AF 00 00 .dword 0aff3h +003CA8r 1 F4 AF 00 00 .dword 0aff4h +003CACr 1 F5 AF 00 00 .dword 0aff5h +003CB0r 1 F6 AF 00 00 .dword 0aff6h +003CB4r 1 F7 AF 00 00 .dword 0aff7h +003CB8r 1 F8 AF 00 00 .dword 0aff8h +003CBCr 1 F9 AF 00 00 .dword 0aff9h +003CC0r 1 FA AF 00 00 .dword 0affah +003CC4r 1 FB AF 00 00 .dword 0affbh +003CC8r 1 FC AF 00 00 .dword 0affch +003CCCr 1 FD AF 00 00 .dword 0affdh +003CD0r 1 FE AF 00 00 .dword 0affeh +003CD4r 1 FF AF 00 00 .dword 0afffh +003CD8r 1 00 B0 00 00 .dword 0b000h +003CDCr 1 01 B0 00 00 .dword 0b001h +003CE0r 1 02 B0 00 00 .dword 0b002h +003CE4r 1 03 B0 00 00 .dword 0b003h +003CE8r 1 04 B0 00 00 .dword 0b004h +003CECr 1 05 B0 00 00 .dword 0b005h +003CF0r 1 06 B0 00 00 .dword 0b006h +003CF4r 1 07 B0 00 00 .dword 0b007h +003CF8r 1 08 B0 00 00 .dword 0b008h +003CFCr 1 09 B0 00 00 .dword 0b009h +003D00r 1 0A B0 00 00 .dword 0b00ah +003D04r 1 0B B0 00 00 .dword 0b00bh +003D08r 1 0C B0 00 00 .dword 0b00ch +003D0Cr 1 0D B0 00 00 .dword 0b00dh +003D10r 1 0E B0 00 00 .dword 0b00eh +003D14r 1 0F B0 00 00 .dword 0b00fh +003D18r 1 E1 FF 00 00 .dword 0ffe1h +003D1Cr 1 E2 FF 00 00 .dword 0ffe2h +003D20r 1 E3 FF 00 00 .dword 0ffe3h +003D24r 1 E4 FF 00 00 .dword 0ffe4h +003D28r 1 E5 FF 00 00 .dword 0ffe5h +003D2Cr 1 E6 FF 00 00 .dword 0ffe6h +003D30r 1 E7 FF 00 00 .dword 0ffe7h +003D34r 1 E8 FF 00 00 .dword 0ffe8h +003D38r 1 E9 FF 00 00 .dword 0ffe9h +003D3Cr 1 EA FF 00 00 .dword 0ffeah +003D40r 1 EB FF 00 00 .dword 0ffebh +003D44r 1 EC FF 00 00 .dword 0ffech +003D48r 1 ED FF 00 00 .dword 0ffedh +003D4Cr 1 EE FF 00 00 .dword 0ffeeh +003D50r 1 EF FF 00 00 .dword 0ffefh +003D54r 1 F0 FF 00 00 .dword 0fff0h +003D58r 1 F1 FF 00 00 .dword 0fff1h +003D5Cr 1 F2 FF 00 00 .dword 0fff2h +003D60r 1 F3 FF 00 00 .dword 0fff3h +003D64r 1 F4 FF 00 00 .dword 0fff4h +003D68r 1 F5 FF 00 00 .dword 0fff5h +003D6Cr 1 F6 FF 00 00 .dword 0fff6h +003D70r 1 F7 FF 00 00 .dword 0fff7h +003D74r 1 F8 FF 00 00 .dword 0fff8h +003D78r 1 F9 FF 00 00 .dword 0fff9h +003D7Cr 1 FA FF 00 00 .dword 0fffah +003D80r 1 FB FF 00 00 .dword 0fffbh +003D84r 1 FC FF 00 00 .dword 0fffch +003D88r 1 FD FF 00 00 .dword 0fffdh +003D8Cr 1 FE FF 00 00 .dword 0fffeh +003D90r 1 FF FF 00 00 .dword 0ffffh +003D94r 1 00 00 01 00 .dword 010000h +003D98r 1 01 00 01 00 .dword 010001h +003D9Cr 1 02 00 01 00 .dword 010002h +003DA0r 1 03 00 01 00 .dword 010003h +003DA4r 1 04 00 01 00 .dword 010004h +003DA8r 1 05 00 01 00 .dword 010005h +003DACr 1 06 00 01 00 .dword 010006h +003DB0r 1 07 00 01 00 .dword 010007h +003DB4r 1 08 00 01 00 .dword 010008h +003DB8r 1 09 00 01 00 .dword 010009h +003DBCr 1 0A 00 01 00 .dword 01000ah +003DC0r 1 0B 00 01 00 .dword 01000bh +003DC4r 1 0C 00 01 00 .dword 01000ch +003DC8r 1 0D 00 01 00 .dword 01000dh +003DCCr 1 0E 00 01 00 .dword 01000eh +003DD0r 1 0F 00 01 00 .dword 01000fh +003DD4r 1 F0 FF FF 7F .dword 07ffffff0h +003DD8r 1 F1 FF FF 7F .dword 07ffffff1h +003DDCr 1 F2 FF FF 7F .dword 07ffffff2h +003DE0r 1 F3 FF FF 7F .dword 07ffffff3h +003DE4r 1 F4 FF FF 7F .dword 07ffffff4h +003DE8r 1 F5 FF FF 7F .dword 07ffffff5h +003DECr 1 F6 FF FF 7F .dword 07ffffff6h +003DF0r 1 F7 FF FF 7F .dword 07ffffff7h +003DF4r 1 F8 FF FF 7F .dword 07ffffff8h +003DF8r 1 F9 FF FF 7F .dword 07ffffff9h +003DFCr 1 FA FF FF 7F .dword 07ffffffah +003E00r 1 FB FF FF 7F .dword 07ffffffbh +003E04r 1 FC FF FF 7F .dword 07ffffffch +003E08r 1 FD FF FF 7F .dword 07ffffffdh +003E0Cr 1 FE FF FF 7F .dword 07ffffffeh +003E10r 1 FF FF FF 7F .dword 07fffffffh +003E14r 1 00 00 00 80 .dword 080000000h +003E18r 1 01 00 00 80 .dword 080000001h +003E1Cr 1 02 00 00 80 .dword 080000002h +003E20r 1 03 00 00 80 .dword 080000003h +003E24r 1 04 00 00 80 .dword 080000004h +003E28r 1 05 00 00 80 .dword 080000005h +003E2Cr 1 06 00 00 80 .dword 080000006h +003E30r 1 07 00 00 80 .dword 080000007h +003E34r 1 08 00 00 80 .dword 080000008h +003E38r 1 09 00 00 80 .dword 080000009h +003E3Cr 1 0A 00 00 80 .dword 08000000ah +003E40r 1 0B 00 00 80 .dword 08000000bh +003E44r 1 0C 00 00 80 .dword 08000000ch +003E48r 1 0D 00 00 80 .dword 08000000dh +003E4Cr 1 0E 00 00 80 .dword 08000000eh +003E50r 1 0F 00 00 80 .dword 08000000fh +003E54r 1 F0 FF FF 9F .dword 09ffffff0h +003E58r 1 F1 FF FF 9F .dword 09ffffff1h +003E5Cr 1 F2 FF FF 9F .dword 09ffffff2h +003E60r 1 F3 FF FF 9F .dword 09ffffff3h +003E64r 1 F4 FF FF 9F .dword 09ffffff4h +003E68r 1 F5 FF FF 9F .dword 09ffffff5h +003E6Cr 1 F6 FF FF 9F .dword 09ffffff6h +003E70r 1 F7 FF FF 9F .dword 09ffffff7h +003E74r 1 F8 FF FF 9F .dword 09ffffff8h +003E78r 1 F9 FF FF 9F .dword 09ffffff9h +003E7Cr 1 FA FF FF 9F .dword 09ffffffah +003E80r 1 FB FF FF 9F .dword 09ffffffbh +003E84r 1 FC FF FF 9F .dword 09ffffffch +003E88r 1 FD FF FF 9F .dword 09ffffffdh +003E8Cr 1 FE FF FF 9F .dword 09ffffffeh +003E90r 1 FF FF FF 9F .dword 09fffffffh +003E94r 1 00 00 00 A0 .dword 0a0000000h +003E98r 1 01 00 00 A0 .dword 0a0000001h +003E9Cr 1 02 00 00 A0 .dword 0a0000002h +003EA0r 1 03 00 00 A0 .dword 0a0000003h +003EA4r 1 04 00 00 A0 .dword 0a0000004h +003EA8r 1 05 00 00 A0 .dword 0a0000005h +003EACr 1 06 00 00 A0 .dword 0a0000006h +003EB0r 1 07 00 00 A0 .dword 0a0000007h +003EB4r 1 08 00 00 A0 .dword 0a0000008h +003EB8r 1 09 00 00 A0 .dword 0a0000009h +003EBCr 1 0A 00 00 A0 .dword 0a000000ah +003EC0r 1 0B 00 00 A0 .dword 0a000000bh +003EC4r 1 0C 00 00 A0 .dword 0a000000ch +003EC8r 1 0D 00 00 A0 .dword 0a000000dh +003ECCr 1 0E 00 00 A0 .dword 0a000000eh +003ED0r 1 0F 00 00 A0 .dword 0a000000fh +003ED4r 1 F0 FF FF FF .dword 0fffffff0h +003ED8r 1 F1 FF FF FF .dword 0fffffff1h +003EDCr 1 F2 FF FF FF .dword 0fffffff2h +003EE0r 1 F3 FF FF FF .dword 0fffffff3h +003EE4r 1 F4 FF FF FF .dword 0fffffff4h +003EE8r 1 F5 FF FF FF .dword 0fffffff5h +003EECr 1 F6 FF FF FF .dword 0fffffff6h +003EF0r 1 F7 FF FF FF .dword 0fffffff7h +003EF4r 1 F8 FF FF FF .dword 0fffffff8h +003EF8r 1 F9 FF FF FF .dword 0fffffff9h +003EFCr 1 FA FF FF FF .dword 0fffffffah +003F00r 1 FB FF FF FF .dword 0fffffffbh +003F04r 1 FC FF FF FF .dword 0fffffffch +003F08r 1 FD FF FF FF .dword 0fffffffdh +003F0Cr 1 FE FF FF FF .dword 0fffffffeh +003F10r 1 FF FF FF FF .dword 0ffffffffh +003F14r 1 +003F14r 1 ; binary values, variable length +003F14r 1 00 00 00 00 .dword %0 +003F18r 1 01 00 00 00 .dword %01 +003F1Cr 1 02 00 00 00 .dword %010 +003F20r 1 03 00 00 00 .dword %011 +003F24r 1 04 00 00 00 .dword %0100 +003F28r 1 05 00 00 00 .dword %0101 +003F2Cr 1 06 00 00 00 .dword %0110 +003F30r 1 07 00 00 00 .dword %0111 +003F34r 1 08 00 00 00 .dword %01000 +003F38r 1 09 00 00 00 .dword %01001 +003F3Cr 1 0A 00 00 00 .dword %01010 +003F40r 1 0B 00 00 00 .dword %01011 +003F44r 1 0C 00 00 00 .dword %01100 +003F48r 1 0D 00 00 00 .dword %01101 +003F4Cr 1 0E 00 00 00 .dword %01110 +003F50r 1 0F 00 00 00 .dword %01111 +003F54r 1 10 00 00 00 .dword %010000 +003F58r 1 11 00 00 00 .dword %010001 +003F5Cr 1 12 00 00 00 .dword %010010 +003F60r 1 13 00 00 00 .dword %010011 +003F64r 1 70 00 00 00 .dword %01110000 +003F68r 1 71 00 00 00 .dword %01110001 +003F6Cr 1 72 00 00 00 .dword %01110010 +003F70r 1 73 00 00 00 .dword %01110011 +003F74r 1 74 00 00 00 .dword %01110100 +003F78r 1 75 00 00 00 .dword %01110101 +003F7Cr 1 76 00 00 00 .dword %01110110 +003F80r 1 77 00 00 00 .dword %01110111 +003F84r 1 78 00 00 00 .dword %01111000 +003F88r 1 79 00 00 00 .dword %01111001 +003F8Cr 1 7A 00 00 00 .dword %01111010 +003F90r 1 7B 00 00 00 .dword %01111011 +003F94r 1 7C 00 00 00 .dword %01111100 +003F98r 1 7D 00 00 00 .dword %01111101 +003F9Cr 1 7E 00 00 00 .dword %01111110 +003FA0r 1 7F 00 00 00 .dword %01111111 +003FA4r 1 80 00 00 00 .dword %010000000 +003FA8r 1 81 00 00 00 .dword %010000001 +003FACr 1 82 00 00 00 .dword %010000010 +003FB0r 1 83 00 00 00 .dword %010000011 +003FB4r 1 84 00 00 00 .dword %010000100 +003FB8r 1 85 00 00 00 .dword %010000101 +003FBCr 1 86 00 00 00 .dword %010000110 +003FC0r 1 F0 00 00 00 .dword %011110000 +003FC4r 1 F1 00 00 00 .dword %011110001 +003FC8r 1 F2 00 00 00 .dword %011110010 +003FCCr 1 F3 00 00 00 .dword %011110011 +003FD0r 1 F4 00 00 00 .dword %011110100 +003FD4r 1 F5 00 00 00 .dword %011110101 +003FD8r 1 F6 00 00 00 .dword %011110110 +003FDCr 1 F7 00 00 00 .dword %011110111 +003FE0r 1 F8 00 00 00 .dword %011111000 +003FE4r 1 F9 00 00 00 .dword %011111001 +003FE8r 1 FA 00 00 00 .dword %011111010 +003FECr 1 FB 00 00 00 .dword %011111011 +003FF0r 1 FC 00 00 00 .dword %011111100 +003FF4r 1 FD 00 00 00 .dword %011111101 +003FF8r 1 FE 00 00 00 .dword %011111110 +003FFCr 1 FF 00 00 00 .dword %011111111 +004000r 1 00 01 00 00 .dword %0100000000 +004004r 1 01 01 00 00 .dword %0100000001 +004008r 1 02 01 00 00 .dword %0100000010 +00400Cr 1 03 01 00 00 .dword %0100000011 +004010r 1 D2 0F 00 00 .dword %0111111010010 +004014r 1 D3 0F 00 00 .dword %0111111010011 +004018r 1 D4 0F 00 00 .dword %0111111010100 +00401Cr 1 D5 0F 00 00 .dword %0111111010101 +004020r 1 D6 0F 00 00 .dword %0111111010110 +004024r 1 D7 0F 00 00 .dword %0111111010111 +004028r 1 D8 0F 00 00 .dword %0111111011000 +00402Cr 1 D9 0F 00 00 .dword %0111111011001 +004030r 1 DA 0F 00 00 .dword %0111111011010 +004034r 1 DB 0F 00 00 .dword %0111111011011 +004038r 1 DC 0F 00 00 .dword %0111111011100 +00403Cr 1 DD 0F 00 00 .dword %0111111011101 +004040r 1 DE 0F 00 00 .dword %0111111011110 +004044r 1 DF 0F 00 00 .dword %0111111011111 +004048r 1 E0 0F 00 00 .dword %0111111100000 +00404Cr 1 E1 0F 00 00 .dword %0111111100001 +004050r 1 E2 0F 00 00 .dword %0111111100010 +004054r 1 E3 0F 00 00 .dword %0111111100011 +004058r 1 E4 0F 00 00 .dword %0111111100100 +00405Cr 1 E5 0F 00 00 .dword %0111111100101 +004060r 1 E6 0F 00 00 .dword %0111111100110 +004064r 1 E7 0F 00 00 .dword %0111111100111 +004068r 1 E8 0F 00 00 .dword %0111111101000 +00406Cr 1 E9 0F 00 00 .dword %0111111101001 +004070r 1 EA 0F 00 00 .dword %0111111101010 +004074r 1 EB 0F 00 00 .dword %0111111101011 +004078r 1 EC 0F 00 00 .dword %0111111101100 +00407Cr 1 ED 0F 00 00 .dword %0111111101101 +004080r 1 EE 0F 00 00 .dword %0111111101110 +004084r 1 EF 0F 00 00 .dword %0111111101111 +004088r 1 F0 0F 00 00 .dword %0111111110000 +00408Cr 1 F1 0F 00 00 .dword %0111111110001 +004090r 1 F2 0F 00 00 .dword %0111111110010 +004094r 1 F3 0F 00 00 .dword %0111111110011 +004098r 1 F4 0F 00 00 .dword %0111111110100 +00409Cr 1 F5 0F 00 00 .dword %0111111110101 +0040A0r 1 F6 0F 00 00 .dword %0111111110110 +0040A4r 1 F7 0F 00 00 .dword %0111111110111 +0040A8r 1 F8 0F 00 00 .dword %0111111111000 +0040ACr 1 F9 0F 00 00 .dword %0111111111001 +0040B0r 1 FA 0F 00 00 .dword %0111111111010 +0040B4r 1 FB 0F 00 00 .dword %0111111111011 +0040B8r 1 FC 0F 00 00 .dword %0111111111100 +0040BCr 1 FD 0F 00 00 .dword %0111111111101 +0040C0r 1 FE 0F 00 00 .dword %0111111111110 +0040C4r 1 FF 0F 00 00 .dword %0111111111111 +0040C8r 1 00 10 00 00 .dword %01000000000000 +0040CCr 1 01 10 00 00 .dword %01000000000001 +0040D0r 1 02 10 00 00 .dword %01000000000010 +0040D4r 1 03 10 00 00 .dword %01000000000011 +0040D8r 1 04 10 00 00 .dword %01000000000100 +0040DCr 1 05 10 00 00 .dword %01000000000101 +0040E0r 1 06 10 00 00 .dword %01000000000110 +0040E4r 1 07 10 00 00 .dword %01000000000111 +0040E8r 1 08 10 00 00 .dword %01000000001000 +0040ECr 1 F0 7F 00 00 .dword %0111111111110000 +0040F0r 1 F1 7F 00 00 .dword %0111111111110001 +0040F4r 1 F2 7F 00 00 .dword %0111111111110010 +0040F8r 1 F3 7F 00 00 .dword %0111111111110011 +0040FCr 1 F4 7F 00 00 .dword %0111111111110100 +004100r 1 F5 7F 00 00 .dword %0111111111110101 +004104r 1 F6 7F 00 00 .dword %0111111111110110 +004108r 1 F7 7F 00 00 .dword %0111111111110111 +00410Cr 1 F8 7F 00 00 .dword %0111111111111000 +004110r 1 F9 7F 00 00 .dword %0111111111111001 +004114r 1 FA 7F 00 00 .dword %0111111111111010 +004118r 1 FB 7F 00 00 .dword %0111111111111011 +00411Cr 1 FC 7F 00 00 .dword %0111111111111100 +004120r 1 FD 7F 00 00 .dword %0111111111111101 +004124r 1 FE 7F 00 00 .dword %0111111111111110 +004128r 1 FF 7F 00 00 .dword %0111111111111111 +00412Cr 1 00 80 00 00 .dword %01000000000000000 +004130r 1 01 80 00 00 .dword %01000000000000001 +004134r 1 02 80 00 00 .dword %01000000000000010 +004138r 1 03 80 00 00 .dword %01000000000000011 +00413Cr 1 04 80 00 00 .dword %01000000000000100 +004140r 1 05 80 00 00 .dword %01000000000000101 +004144r 1 06 80 00 00 .dword %01000000000000110 +004148r 1 07 80 00 00 .dword %01000000000000111 +00414Cr 1 08 80 00 00 .dword %01000000000001000 +004150r 1 09 80 00 00 .dword %01000000000001001 +004154r 1 0A 80 00 00 .dword %01000000000001010 +004158r 1 0B 80 00 00 .dword %01000000000001011 +00415Cr 1 E1 9F 00 00 .dword %01001111111100001 +004160r 1 E2 9F 00 00 .dword %01001111111100010 +004164r 1 E3 9F 00 00 .dword %01001111111100011 +004168r 1 E4 9F 00 00 .dword %01001111111100100 +00416Cr 1 E5 9F 00 00 .dword %01001111111100101 +004170r 1 E6 9F 00 00 .dword %01001111111100110 +004174r 1 E7 9F 00 00 .dword %01001111111100111 +004178r 1 E8 9F 00 00 .dword %01001111111101000 +00417Cr 1 E9 9F 00 00 .dword %01001111111101001 +004180r 1 EA 9F 00 00 .dword %01001111111101010 +004184r 1 EB 9F 00 00 .dword %01001111111101011 +004188r 1 EC 9F 00 00 .dword %01001111111101100 +00418Cr 1 ED 9F 00 00 .dword %01001111111101101 +004190r 1 EE 9F 00 00 .dword %01001111111101110 +004194r 1 EF 9F 00 00 .dword %01001111111101111 +004198r 1 F0 9F 00 00 .dword %01001111111110000 +00419Cr 1 F1 9F 00 00 .dword %01001111111110001 +0041A0r 1 F2 9F 00 00 .dword %01001111111110010 +0041A4r 1 F3 9F 00 00 .dword %01001111111110011 +0041A8r 1 F4 9F 00 00 .dword %01001111111110100 +0041ACr 1 F5 9F 00 00 .dword %01001111111110101 +0041B0r 1 F6 9F 00 00 .dword %01001111111110110 +0041B4r 1 F7 9F 00 00 .dword %01001111111110111 +0041B8r 1 F8 9F 00 00 .dword %01001111111111000 +0041BCr 1 F9 9F 00 00 .dword %01001111111111001 +0041C0r 1 FA 9F 00 00 .dword %01001111111111010 +0041C4r 1 FB 9F 00 00 .dword %01001111111111011 +0041C8r 1 FC 9F 00 00 .dword %01001111111111100 +0041CCr 1 FD 9F 00 00 .dword %01001111111111101 +0041D0r 1 FE 9F 00 00 .dword %01001111111111110 +0041D4r 1 FF 9F 00 00 .dword %01001111111111111 +0041D8r 1 00 A0 00 00 .dword %01010000000000000 +0041DCr 1 01 A0 00 00 .dword %01010000000000001 +0041E0r 1 02 A0 00 00 .dword %01010000000000010 +0041E4r 1 03 A0 00 00 .dword %01010000000000011 +0041E8r 1 04 A0 00 00 .dword %01010000000000100 +0041ECr 1 05 A0 00 00 .dword %01010000000000101 +0041F0r 1 06 A0 00 00 .dword %01010000000000110 +0041F4r 1 07 A0 00 00 .dword %01010000000000111 +0041F8r 1 08 A0 00 00 .dword %01010000000001000 +0041FCr 1 09 A0 00 00 .dword %01010000000001001 +004200r 1 0A A0 00 00 .dword %01010000000001010 +004204r 1 0B A0 00 00 .dword %01010000000001011 +004208r 1 0C A0 00 00 .dword %01010000000001100 +00420Cr 1 0D A0 00 00 .dword %01010000000001101 +004210r 1 0E A0 00 00 .dword %01010000000001110 +004214r 1 0F A0 00 00 .dword %01010000000001111 +004218r 1 E1 AF 00 00 .dword %01010111111100001 +00421Cr 1 E2 AF 00 00 .dword %01010111111100010 +004220r 1 E3 AF 00 00 .dword %01010111111100011 +004224r 1 E4 AF 00 00 .dword %01010111111100100 +004228r 1 E5 AF 00 00 .dword %01010111111100101 +00422Cr 1 E6 AF 00 00 .dword %01010111111100110 +004230r 1 E7 AF 00 00 .dword %01010111111100111 +004234r 1 E8 AF 00 00 .dword %01010111111101000 +004238r 1 E9 AF 00 00 .dword %01010111111101001 +00423Cr 1 EA AF 00 00 .dword %01010111111101010 +004240r 1 EB AF 00 00 .dword %01010111111101011 +004244r 1 EC AF 00 00 .dword %01010111111101100 +004248r 1 ED AF 00 00 .dword %01010111111101101 +00424Cr 1 EE AF 00 00 .dword %01010111111101110 +004250r 1 EF AF 00 00 .dword %01010111111101111 +004254r 1 F0 AF 00 00 .dword %01010111111110000 +004258r 1 F1 AF 00 00 .dword %01010111111110001 +00425Cr 1 F2 AF 00 00 .dword %01010111111110010 +004260r 1 F3 AF 00 00 .dword %01010111111110011 +004264r 1 F4 AF 00 00 .dword %01010111111110100 +004268r 1 F5 AF 00 00 .dword %01010111111110101 +00426Cr 1 F6 AF 00 00 .dword %01010111111110110 +004270r 1 F7 AF 00 00 .dword %01010111111110111 +004274r 1 F8 AF 00 00 .dword %01010111111111000 +004278r 1 F9 AF 00 00 .dword %01010111111111001 +00427Cr 1 FA AF 00 00 .dword %01010111111111010 +004280r 1 FB AF 00 00 .dword %01010111111111011 +004284r 1 FC AF 00 00 .dword %01010111111111100 +004288r 1 FD AF 00 00 .dword %01010111111111101 +00428Cr 1 FE AF 00 00 .dword %01010111111111110 +004290r 1 FF AF 00 00 .dword %01010111111111111 +004294r 1 00 B0 00 00 .dword %01011000000000000 +004298r 1 01 B0 00 00 .dword %01011000000000001 +00429Cr 1 02 B0 00 00 .dword %01011000000000010 +0042A0r 1 03 B0 00 00 .dword %01011000000000011 +0042A4r 1 04 B0 00 00 .dword %01011000000000100 +0042A8r 1 05 B0 00 00 .dword %01011000000000101 +0042ACr 1 06 B0 00 00 .dword %01011000000000110 +0042B0r 1 07 B0 00 00 .dword %01011000000000111 +0042B4r 1 08 B0 00 00 .dword %01011000000001000 +0042B8r 1 09 B0 00 00 .dword %01011000000001001 +0042BCr 1 0A B0 00 00 .dword %01011000000001010 +0042C0r 1 0B B0 00 00 .dword %01011000000001011 +0042C4r 1 0C B0 00 00 .dword %01011000000001100 +0042C8r 1 0D B0 00 00 .dword %01011000000001101 +0042CCr 1 0E B0 00 00 .dword %01011000000001110 +0042D0r 1 0F B0 00 00 .dword %01011000000001111 +0042D4r 1 E1 FF 00 00 .dword %01111111111100001 +0042D8r 1 E2 FF 00 00 .dword %01111111111100010 +0042DCr 1 E3 FF 00 00 .dword %01111111111100011 +0042E0r 1 E4 FF 00 00 .dword %01111111111100100 +0042E4r 1 E5 FF 00 00 .dword %01111111111100101 +0042E8r 1 E6 FF 00 00 .dword %01111111111100110 +0042ECr 1 E7 FF 00 00 .dword %01111111111100111 +0042F0r 1 E8 FF 00 00 .dword %01111111111101000 +0042F4r 1 E9 FF 00 00 .dword %01111111111101001 +0042F8r 1 EA FF 00 00 .dword %01111111111101010 +0042FCr 1 EB FF 00 00 .dword %01111111111101011 +004300r 1 EC FF 00 00 .dword %01111111111101100 +004304r 1 ED FF 00 00 .dword %01111111111101101 +004308r 1 EE FF 00 00 .dword %01111111111101110 +00430Cr 1 EF FF 00 00 .dword %01111111111101111 +004310r 1 F0 FF 00 00 .dword %01111111111110000 +004314r 1 F1 FF 00 00 .dword %01111111111110001 +004318r 1 F2 FF 00 00 .dword %01111111111110010 +00431Cr 1 F3 FF 00 00 .dword %01111111111110011 +004320r 1 F4 FF 00 00 .dword %01111111111110100 +004324r 1 F5 FF 00 00 .dword %01111111111110101 +004328r 1 F6 FF 00 00 .dword %01111111111110110 +00432Cr 1 F7 FF 00 00 .dword %01111111111110111 +004330r 1 F8 FF 00 00 .dword %01111111111111000 +004334r 1 F9 FF 00 00 .dword %01111111111111001 +004338r 1 FA FF 00 00 .dword %01111111111111010 +00433Cr 1 FB FF 00 00 .dword %01111111111111011 +004340r 1 FC FF 00 00 .dword %01111111111111100 +004344r 1 FD FF 00 00 .dword %01111111111111101 +004348r 1 FE FF 00 00 .dword %01111111111111110 +00434Cr 1 FF FF 00 00 .dword %01111111111111111 +004350r 1 00 00 01 00 .dword %010000000000000000 +004354r 1 01 00 01 00 .dword %010000000000000001 +004358r 1 02 00 01 00 .dword %010000000000000010 +00435Cr 1 03 00 01 00 .dword %010000000000000011 +004360r 1 04 00 01 00 .dword %010000000000000100 +004364r 1 05 00 01 00 .dword %010000000000000101 +004368r 1 06 00 01 00 .dword %010000000000000110 +00436Cr 1 07 00 01 00 .dword %010000000000000111 +004370r 1 08 00 01 00 .dword %010000000000001000 +004374r 1 09 00 01 00 .dword %010000000000001001 +004378r 1 0A 00 01 00 .dword %010000000000001010 +00437Cr 1 0B 00 01 00 .dword %010000000000001011 +004380r 1 0C 00 01 00 .dword %010000000000001100 +004384r 1 0D 00 01 00 .dword %010000000000001101 +004388r 1 0E 00 01 00 .dword %010000000000001110 +00438Cr 1 0F 00 01 00 .dword %010000000000001111 +004390r 1 F0 FF FF 7F .dword %1111111111111111111111111110000 +004394r 1 F1 FF FF 7F .dword %1111111111111111111111111110001 +004398r 1 F2 FF FF 7F .dword %1111111111111111111111111110010 +00439Cr 1 F3 FF FF 7F .dword %1111111111111111111111111110011 +0043A0r 1 F4 FF FF 7F .dword %1111111111111111111111111110100 +0043A4r 1 F5 FF FF 7F .dword %1111111111111111111111111110101 +0043A8r 1 F6 FF FF 7F .dword %1111111111111111111111111110110 +0043ACr 1 F7 FF FF 7F .dword %1111111111111111111111111110111 +0043B0r 1 F8 FF FF 7F .dword %1111111111111111111111111111000 +0043B4r 1 F9 FF FF 7F .dword %1111111111111111111111111111001 +0043B8r 1 FA FF FF 7F .dword %1111111111111111111111111111010 +0043BCr 1 FB FF FF 7F .dword %1111111111111111111111111111011 +0043C0r 1 FC FF FF 7F .dword %1111111111111111111111111111100 +0043C4r 1 FD FF FF 7F .dword %1111111111111111111111111111101 +0043C8r 1 FE FF FF 7F .dword %1111111111111111111111111111110 +0043CCr 1 FF FF FF 7F .dword %1111111111111111111111111111111 +0043D0r 1 00 00 00 80 .dword %10000000000000000000000000000000 +0043D4r 1 01 00 00 80 .dword %10000000000000000000000000000001 +0043D8r 1 02 00 00 80 .dword %10000000000000000000000000000010 +0043DCr 1 03 00 00 80 .dword %10000000000000000000000000000011 +0043E0r 1 04 00 00 80 .dword %10000000000000000000000000000100 +0043E4r 1 05 00 00 80 .dword %10000000000000000000000000000101 +0043E8r 1 06 00 00 80 .dword %10000000000000000000000000000110 +0043ECr 1 07 00 00 80 .dword %10000000000000000000000000000111 +0043F0r 1 08 00 00 80 .dword %10000000000000000000000000001000 +0043F4r 1 09 00 00 80 .dword %10000000000000000000000000001001 +0043F8r 1 0A 00 00 80 .dword %10000000000000000000000000001010 +0043FCr 1 0B 00 00 80 .dword %10000000000000000000000000001011 +004400r 1 0C 00 00 80 .dword %10000000000000000000000000001100 +004404r 1 0D 00 00 80 .dword %10000000000000000000000000001101 +004408r 1 0E 00 00 80 .dword %10000000000000000000000000001110 +00440Cr 1 0F 00 00 80 .dword %10000000000000000000000000001111 +004410r 1 F0 FF FF 9F .dword %10011111111111111111111111110000 +004414r 1 F1 FF FF 9F .dword %10011111111111111111111111110001 +004418r 1 F2 FF FF 9F .dword %10011111111111111111111111110010 +00441Cr 1 F3 FF FF 9F .dword %10011111111111111111111111110011 +004420r 1 F4 FF FF 9F .dword %10011111111111111111111111110100 +004424r 1 F5 FF FF 9F .dword %10011111111111111111111111110101 +004428r 1 F6 FF FF 9F .dword %10011111111111111111111111110110 +00442Cr 1 F7 FF FF 9F .dword %10011111111111111111111111110111 +004430r 1 F8 FF FF 9F .dword %10011111111111111111111111111000 +004434r 1 F9 FF FF 9F .dword %10011111111111111111111111111001 +004438r 1 FA FF FF 9F .dword %10011111111111111111111111111010 +00443Cr 1 FB FF FF 9F .dword %10011111111111111111111111111011 +004440r 1 FC FF FF 9F .dword %10011111111111111111111111111100 +004444r 1 FD FF FF 9F .dword %10011111111111111111111111111101 +004448r 1 FE FF FF 9F .dword %10011111111111111111111111111110 +00444Cr 1 FF FF FF 9F .dword %10011111111111111111111111111111 +004450r 1 00 00 00 A0 .dword %10100000000000000000000000000000 +004454r 1 01 00 00 A0 .dword %10100000000000000000000000000001 +004458r 1 02 00 00 A0 .dword %10100000000000000000000000000010 +00445Cr 1 03 00 00 A0 .dword %10100000000000000000000000000011 +004460r 1 04 00 00 A0 .dword %10100000000000000000000000000100 +004464r 1 05 00 00 A0 .dword %10100000000000000000000000000101 +004468r 1 06 00 00 A0 .dword %10100000000000000000000000000110 +00446Cr 1 07 00 00 A0 .dword %10100000000000000000000000000111 +004470r 1 08 00 00 A0 .dword %10100000000000000000000000001000 +004474r 1 09 00 00 A0 .dword %10100000000000000000000000001001 +004478r 1 0A 00 00 A0 .dword %10100000000000000000000000001010 +00447Cr 1 0B 00 00 A0 .dword %10100000000000000000000000001011 +004480r 1 0C 00 00 A0 .dword %10100000000000000000000000001100 +004484r 1 0D 00 00 A0 .dword %10100000000000000000000000001101 +004488r 1 0E 00 00 A0 .dword %10100000000000000000000000001110 +00448Cr 1 0F 00 00 A0 .dword %10100000000000000000000000001111 +004490r 1 F0 FF FF FF .dword %11111111111111111111111111110000 +004494r 1 F1 FF FF FF .dword %11111111111111111111111111110001 +004498r 1 F2 FF FF FF .dword %11111111111111111111111111110010 +00449Cr 1 F3 FF FF FF .dword %11111111111111111111111111110011 +0044A0r 1 F4 FF FF FF .dword %11111111111111111111111111110100 +0044A4r 1 F5 FF FF FF .dword %11111111111111111111111111110101 +0044A8r 1 F6 FF FF FF .dword %11111111111111111111111111110110 +0044ACr 1 F7 FF FF FF .dword %11111111111111111111111111110111 +0044B0r 1 F8 FF FF FF .dword %11111111111111111111111111111000 +0044B4r 1 F9 FF FF FF .dword %11111111111111111111111111111001 +0044B8r 1 FA FF FF FF .dword %11111111111111111111111111111010 +0044BCr 1 FB FF FF FF .dword %11111111111111111111111111111011 +0044C0r 1 FC FF FF FF .dword %11111111111111111111111111111100 +0044C4r 1 FD FF FF FF .dword %11111111111111111111111111111101 +0044C8r 1 FE FF FF FF .dword %11111111111111111111111111111110 +0044CCr 1 FF FF FF FF .dword %11111111111111111111111111111111 +0044D0r 1 +0044D0r 1 ; binary values, full length +0044D0r 1 00 00 00 00 .dword %00000000000000000000000000000000 +0044D4r 1 01 00 00 00 .dword %00000000000000000000000000000001 +0044D8r 1 02 00 00 00 .dword %00000000000000000000000000000010 +0044DCr 1 03 00 00 00 .dword %00000000000000000000000000000011 +0044E0r 1 04 00 00 00 .dword %00000000000000000000000000000100 +0044E4r 1 05 00 00 00 .dword %00000000000000000000000000000101 +0044E8r 1 06 00 00 00 .dword %00000000000000000000000000000110 +0044ECr 1 07 00 00 00 .dword %00000000000000000000000000000111 +0044F0r 1 08 00 00 00 .dword %00000000000000000000000000001000 +0044F4r 1 09 00 00 00 .dword %00000000000000000000000000001001 +0044F8r 1 0A 00 00 00 .dword %00000000000000000000000000001010 +0044FCr 1 0B 00 00 00 .dword %00000000000000000000000000001011 +004500r 1 0C 00 00 00 .dword %00000000000000000000000000001100 +004504r 1 0D 00 00 00 .dword %00000000000000000000000000001101 +004508r 1 0E 00 00 00 .dword %00000000000000000000000000001110 +00450Cr 1 0F 00 00 00 .dword %00000000000000000000000000001111 +004510r 1 10 00 00 00 .dword %00000000000000000000000000010000 +004514r 1 11 00 00 00 .dword %00000000000000000000000000010001 +004518r 1 12 00 00 00 .dword %00000000000000000000000000010010 +00451Cr 1 13 00 00 00 .dword %00000000000000000000000000010011 +004520r 1 70 00 00 00 .dword %00000000000000000000000001110000 +004524r 1 71 00 00 00 .dword %00000000000000000000000001110001 +004528r 1 72 00 00 00 .dword %00000000000000000000000001110010 +00452Cr 1 73 00 00 00 .dword %00000000000000000000000001110011 +004530r 1 74 00 00 00 .dword %00000000000000000000000001110100 +004534r 1 75 00 00 00 .dword %00000000000000000000000001110101 +004538r 1 76 00 00 00 .dword %00000000000000000000000001110110 +00453Cr 1 77 00 00 00 .dword %00000000000000000000000001110111 +004540r 1 78 00 00 00 .dword %00000000000000000000000001111000 +004544r 1 79 00 00 00 .dword %00000000000000000000000001111001 +004548r 1 7A 00 00 00 .dword %00000000000000000000000001111010 +00454Cr 1 7B 00 00 00 .dword %00000000000000000000000001111011 +004550r 1 7C 00 00 00 .dword %00000000000000000000000001111100 +004554r 1 7D 00 00 00 .dword %00000000000000000000000001111101 +004558r 1 7E 00 00 00 .dword %00000000000000000000000001111110 +00455Cr 1 7F 00 00 00 .dword %00000000000000000000000001111111 +004560r 1 80 00 00 00 .dword %00000000000000000000000010000000 +004564r 1 81 00 00 00 .dword %00000000000000000000000010000001 +004568r 1 82 00 00 00 .dword %00000000000000000000000010000010 +00456Cr 1 83 00 00 00 .dword %00000000000000000000000010000011 +004570r 1 84 00 00 00 .dword %00000000000000000000000010000100 +004574r 1 85 00 00 00 .dword %00000000000000000000000010000101 +004578r 1 86 00 00 00 .dword %00000000000000000000000010000110 +00457Cr 1 F0 00 00 00 .dword %00000000000000000000000011110000 +004580r 1 F1 00 00 00 .dword %00000000000000000000000011110001 +004584r 1 F2 00 00 00 .dword %00000000000000000000000011110010 +004588r 1 F3 00 00 00 .dword %00000000000000000000000011110011 +00458Cr 1 F4 00 00 00 .dword %00000000000000000000000011110100 +004590r 1 F5 00 00 00 .dword %00000000000000000000000011110101 +004594r 1 F6 00 00 00 .dword %00000000000000000000000011110110 +004598r 1 F7 00 00 00 .dword %00000000000000000000000011110111 +00459Cr 1 F8 00 00 00 .dword %00000000000000000000000011111000 +0045A0r 1 F9 00 00 00 .dword %00000000000000000000000011111001 +0045A4r 1 FA 00 00 00 .dword %00000000000000000000000011111010 +0045A8r 1 FB 00 00 00 .dword %00000000000000000000000011111011 +0045ACr 1 FC 00 00 00 .dword %00000000000000000000000011111100 +0045B0r 1 FD 00 00 00 .dword %00000000000000000000000011111101 +0045B4r 1 FE 00 00 00 .dword %00000000000000000000000011111110 +0045B8r 1 FF 00 00 00 .dword %00000000000000000000000011111111 +0045BCr 1 00 01 00 00 .dword %00000000000000000000000100000000 +0045C0r 1 01 01 00 00 .dword %00000000000000000000000100000001 +0045C4r 1 02 01 00 00 .dword %00000000000000000000000100000010 +0045C8r 1 03 01 00 00 .dword %00000000000000000000000100000011 +0045CCr 1 D2 0F 00 00 .dword %00000000000000000000111111010010 +0045D0r 1 D3 0F 00 00 .dword %00000000000000000000111111010011 +0045D4r 1 D4 0F 00 00 .dword %00000000000000000000111111010100 +0045D8r 1 D5 0F 00 00 .dword %00000000000000000000111111010101 +0045DCr 1 D6 0F 00 00 .dword %00000000000000000000111111010110 +0045E0r 1 D7 0F 00 00 .dword %00000000000000000000111111010111 +0045E4r 1 D8 0F 00 00 .dword %00000000000000000000111111011000 +0045E8r 1 D9 0F 00 00 .dword %00000000000000000000111111011001 +0045ECr 1 DA 0F 00 00 .dword %00000000000000000000111111011010 +0045F0r 1 DB 0F 00 00 .dword %00000000000000000000111111011011 +0045F4r 1 DC 0F 00 00 .dword %00000000000000000000111111011100 +0045F8r 1 DD 0F 00 00 .dword %00000000000000000000111111011101 +0045FCr 1 DE 0F 00 00 .dword %00000000000000000000111111011110 +004600r 1 DF 0F 00 00 .dword %00000000000000000000111111011111 +004604r 1 E0 0F 00 00 .dword %00000000000000000000111111100000 +004608r 1 E1 0F 00 00 .dword %00000000000000000000111111100001 +00460Cr 1 E2 0F 00 00 .dword %00000000000000000000111111100010 +004610r 1 E3 0F 00 00 .dword %00000000000000000000111111100011 +004614r 1 E4 0F 00 00 .dword %00000000000000000000111111100100 +004618r 1 E5 0F 00 00 .dword %00000000000000000000111111100101 +00461Cr 1 E6 0F 00 00 .dword %00000000000000000000111111100110 +004620r 1 E7 0F 00 00 .dword %00000000000000000000111111100111 +004624r 1 E8 0F 00 00 .dword %00000000000000000000111111101000 +004628r 1 E9 0F 00 00 .dword %00000000000000000000111111101001 +00462Cr 1 EA 0F 00 00 .dword %00000000000000000000111111101010 +004630r 1 EB 0F 00 00 .dword %00000000000000000000111111101011 +004634r 1 EC 0F 00 00 .dword %00000000000000000000111111101100 +004638r 1 ED 0F 00 00 .dword %00000000000000000000111111101101 +00463Cr 1 EE 0F 00 00 .dword %00000000000000000000111111101110 +004640r 1 EF 0F 00 00 .dword %00000000000000000000111111101111 +004644r 1 F0 0F 00 00 .dword %00000000000000000000111111110000 +004648r 1 F1 0F 00 00 .dword %00000000000000000000111111110001 +00464Cr 1 F2 0F 00 00 .dword %00000000000000000000111111110010 +004650r 1 F3 0F 00 00 .dword %00000000000000000000111111110011 +004654r 1 F4 0F 00 00 .dword %00000000000000000000111111110100 +004658r 1 F5 0F 00 00 .dword %00000000000000000000111111110101 +00465Cr 1 F6 0F 00 00 .dword %00000000000000000000111111110110 +004660r 1 F7 0F 00 00 .dword %00000000000000000000111111110111 +004664r 1 F8 0F 00 00 .dword %00000000000000000000111111111000 +004668r 1 F9 0F 00 00 .dword %00000000000000000000111111111001 +00466Cr 1 FA 0F 00 00 .dword %00000000000000000000111111111010 +004670r 1 FB 0F 00 00 .dword %00000000000000000000111111111011 +004674r 1 FC 0F 00 00 .dword %00000000000000000000111111111100 +004678r 1 FD 0F 00 00 .dword %00000000000000000000111111111101 +00467Cr 1 FE 0F 00 00 .dword %00000000000000000000111111111110 +004680r 1 FF 0F 00 00 .dword %00000000000000000000111111111111 +004684r 1 00 10 00 00 .dword %00000000000000000001000000000000 +004688r 1 01 10 00 00 .dword %00000000000000000001000000000001 +00468Cr 1 02 10 00 00 .dword %00000000000000000001000000000010 +004690r 1 03 10 00 00 .dword %00000000000000000001000000000011 +004694r 1 04 10 00 00 .dword %00000000000000000001000000000100 +004698r 1 05 10 00 00 .dword %00000000000000000001000000000101 +00469Cr 1 06 10 00 00 .dword %00000000000000000001000000000110 +0046A0r 1 07 10 00 00 .dword %00000000000000000001000000000111 +0046A4r 1 08 10 00 00 .dword %00000000000000000001000000001000 +0046A8r 1 F0 7F 00 00 .dword %00000000000000000111111111110000 +0046ACr 1 F1 7F 00 00 .dword %00000000000000000111111111110001 +0046B0r 1 F2 7F 00 00 .dword %00000000000000000111111111110010 +0046B4r 1 F3 7F 00 00 .dword %00000000000000000111111111110011 +0046B8r 1 F4 7F 00 00 .dword %00000000000000000111111111110100 +0046BCr 1 F5 7F 00 00 .dword %00000000000000000111111111110101 +0046C0r 1 F6 7F 00 00 .dword %00000000000000000111111111110110 +0046C4r 1 F7 7F 00 00 .dword %00000000000000000111111111110111 +0046C8r 1 F8 7F 00 00 .dword %00000000000000000111111111111000 +0046CCr 1 F9 7F 00 00 .dword %00000000000000000111111111111001 +0046D0r 1 FA 7F 00 00 .dword %00000000000000000111111111111010 +0046D4r 1 FB 7F 00 00 .dword %00000000000000000111111111111011 +0046D8r 1 FC 7F 00 00 .dword %00000000000000000111111111111100 +0046DCr 1 FD 7F 00 00 .dword %00000000000000000111111111111101 +0046E0r 1 FE 7F 00 00 .dword %00000000000000000111111111111110 +0046E4r 1 FF 7F 00 00 .dword %00000000000000000111111111111111 +0046E8r 1 00 80 00 00 .dword %00000000000000001000000000000000 +0046ECr 1 01 80 00 00 .dword %00000000000000001000000000000001 +0046F0r 1 02 80 00 00 .dword %00000000000000001000000000000010 +0046F4r 1 03 80 00 00 .dword %00000000000000001000000000000011 +0046F8r 1 04 80 00 00 .dword %00000000000000001000000000000100 +0046FCr 1 05 80 00 00 .dword %00000000000000001000000000000101 +004700r 1 06 80 00 00 .dword %00000000000000001000000000000110 +004704r 1 07 80 00 00 .dword %00000000000000001000000000000111 +004708r 1 08 80 00 00 .dword %00000000000000001000000000001000 +00470Cr 1 09 80 00 00 .dword %00000000000000001000000000001001 +004710r 1 0A 80 00 00 .dword %00000000000000001000000000001010 +004714r 1 0B 80 00 00 .dword %00000000000000001000000000001011 +004718r 1 E1 9F 00 00 .dword %00000000000000001001111111100001 +00471Cr 1 E2 9F 00 00 .dword %00000000000000001001111111100010 +004720r 1 E3 9F 00 00 .dword %00000000000000001001111111100011 +004724r 1 E4 9F 00 00 .dword %00000000000000001001111111100100 +004728r 1 E5 9F 00 00 .dword %00000000000000001001111111100101 +00472Cr 1 E6 9F 00 00 .dword %00000000000000001001111111100110 +004730r 1 E7 9F 00 00 .dword %00000000000000001001111111100111 +004734r 1 E8 9F 00 00 .dword %00000000000000001001111111101000 +004738r 1 E9 9F 00 00 .dword %00000000000000001001111111101001 +00473Cr 1 EA 9F 00 00 .dword %00000000000000001001111111101010 +004740r 1 EB 9F 00 00 .dword %00000000000000001001111111101011 +004744r 1 EC 9F 00 00 .dword %00000000000000001001111111101100 +004748r 1 ED 9F 00 00 .dword %00000000000000001001111111101101 +00474Cr 1 EE 9F 00 00 .dword %00000000000000001001111111101110 +004750r 1 EF 9F 00 00 .dword %00000000000000001001111111101111 +004754r 1 F0 9F 00 00 .dword %00000000000000001001111111110000 +004758r 1 F1 9F 00 00 .dword %00000000000000001001111111110001 +00475Cr 1 F2 9F 00 00 .dword %00000000000000001001111111110010 +004760r 1 F3 9F 00 00 .dword %00000000000000001001111111110011 +004764r 1 F4 9F 00 00 .dword %00000000000000001001111111110100 +004768r 1 F5 9F 00 00 .dword %00000000000000001001111111110101 +00476Cr 1 F6 9F 00 00 .dword %00000000000000001001111111110110 +004770r 1 F7 9F 00 00 .dword %00000000000000001001111111110111 +004774r 1 F8 9F 00 00 .dword %00000000000000001001111111111000 +004778r 1 F9 9F 00 00 .dword %00000000000000001001111111111001 +00477Cr 1 FA 9F 00 00 .dword %00000000000000001001111111111010 +004780r 1 FB 9F 00 00 .dword %00000000000000001001111111111011 +004784r 1 FC 9F 00 00 .dword %00000000000000001001111111111100 +004788r 1 FD 9F 00 00 .dword %00000000000000001001111111111101 +00478Cr 1 FE 9F 00 00 .dword %00000000000000001001111111111110 +004790r 1 FF 9F 00 00 .dword %00000000000000001001111111111111 +004794r 1 00 A0 00 00 .dword %00000000000000001010000000000000 +004798r 1 01 A0 00 00 .dword %00000000000000001010000000000001 +00479Cr 1 02 A0 00 00 .dword %00000000000000001010000000000010 +0047A0r 1 03 A0 00 00 .dword %00000000000000001010000000000011 +0047A4r 1 04 A0 00 00 .dword %00000000000000001010000000000100 +0047A8r 1 05 A0 00 00 .dword %00000000000000001010000000000101 +0047ACr 1 06 A0 00 00 .dword %00000000000000001010000000000110 +0047B0r 1 07 A0 00 00 .dword %00000000000000001010000000000111 +0047B4r 1 08 A0 00 00 .dword %00000000000000001010000000001000 +0047B8r 1 09 A0 00 00 .dword %00000000000000001010000000001001 +0047BCr 1 0A A0 00 00 .dword %00000000000000001010000000001010 +0047C0r 1 0B A0 00 00 .dword %00000000000000001010000000001011 +0047C4r 1 0C A0 00 00 .dword %00000000000000001010000000001100 +0047C8r 1 0D A0 00 00 .dword %00000000000000001010000000001101 +0047CCr 1 0E A0 00 00 .dword %00000000000000001010000000001110 +0047D0r 1 0F A0 00 00 .dword %00000000000000001010000000001111 +0047D4r 1 E1 AF 00 00 .dword %00000000000000001010111111100001 +0047D8r 1 E2 AF 00 00 .dword %00000000000000001010111111100010 +0047DCr 1 E3 AF 00 00 .dword %00000000000000001010111111100011 +0047E0r 1 E4 AF 00 00 .dword %00000000000000001010111111100100 +0047E4r 1 E5 AF 00 00 .dword %00000000000000001010111111100101 +0047E8r 1 E6 AF 00 00 .dword %00000000000000001010111111100110 +0047ECr 1 E7 AF 00 00 .dword %00000000000000001010111111100111 +0047F0r 1 E8 AF 00 00 .dword %00000000000000001010111111101000 +0047F4r 1 E9 AF 00 00 .dword %00000000000000001010111111101001 +0047F8r 1 EA AF 00 00 .dword %00000000000000001010111111101010 +0047FCr 1 EB AF 00 00 .dword %00000000000000001010111111101011 +004800r 1 EC AF 00 00 .dword %00000000000000001010111111101100 +004804r 1 ED AF 00 00 .dword %00000000000000001010111111101101 +004808r 1 EE AF 00 00 .dword %00000000000000001010111111101110 +00480Cr 1 EF AF 00 00 .dword %00000000000000001010111111101111 +004810r 1 F0 AF 00 00 .dword %00000000000000001010111111110000 +004814r 1 F1 AF 00 00 .dword %00000000000000001010111111110001 +004818r 1 F2 AF 00 00 .dword %00000000000000001010111111110010 +00481Cr 1 F3 AF 00 00 .dword %00000000000000001010111111110011 +004820r 1 F4 AF 00 00 .dword %00000000000000001010111111110100 +004824r 1 F5 AF 00 00 .dword %00000000000000001010111111110101 +004828r 1 F6 AF 00 00 .dword %00000000000000001010111111110110 +00482Cr 1 F7 AF 00 00 .dword %00000000000000001010111111110111 +004830r 1 F8 AF 00 00 .dword %00000000000000001010111111111000 +004834r 1 F9 AF 00 00 .dword %00000000000000001010111111111001 +004838r 1 FA AF 00 00 .dword %00000000000000001010111111111010 +00483Cr 1 FB AF 00 00 .dword %00000000000000001010111111111011 +004840r 1 FC AF 00 00 .dword %00000000000000001010111111111100 +004844r 1 FD AF 00 00 .dword %00000000000000001010111111111101 +004848r 1 FE AF 00 00 .dword %00000000000000001010111111111110 +00484Cr 1 FF AF 00 00 .dword %00000000000000001010111111111111 +004850r 1 00 B0 00 00 .dword %00000000000000001011000000000000 +004854r 1 01 B0 00 00 .dword %00000000000000001011000000000001 +004858r 1 02 B0 00 00 .dword %00000000000000001011000000000010 +00485Cr 1 03 B0 00 00 .dword %00000000000000001011000000000011 +004860r 1 04 B0 00 00 .dword %00000000000000001011000000000100 +004864r 1 05 B0 00 00 .dword %00000000000000001011000000000101 +004868r 1 06 B0 00 00 .dword %00000000000000001011000000000110 +00486Cr 1 07 B0 00 00 .dword %00000000000000001011000000000111 +004870r 1 08 B0 00 00 .dword %00000000000000001011000000001000 +004874r 1 09 B0 00 00 .dword %00000000000000001011000000001001 +004878r 1 0A B0 00 00 .dword %00000000000000001011000000001010 +00487Cr 1 0B B0 00 00 .dword %00000000000000001011000000001011 +004880r 1 0C B0 00 00 .dword %00000000000000001011000000001100 +004884r 1 0D B0 00 00 .dword %00000000000000001011000000001101 +004888r 1 0E B0 00 00 .dword %00000000000000001011000000001110 +00488Cr 1 0F B0 00 00 .dword %00000000000000001011000000001111 +004890r 1 E1 FF 00 00 .dword %00000000000000001111111111100001 +004894r 1 E2 FF 00 00 .dword %00000000000000001111111111100010 +004898r 1 E3 FF 00 00 .dword %00000000000000001111111111100011 +00489Cr 1 E4 FF 00 00 .dword %00000000000000001111111111100100 +0048A0r 1 E5 FF 00 00 .dword %00000000000000001111111111100101 +0048A4r 1 E6 FF 00 00 .dword %00000000000000001111111111100110 +0048A8r 1 E7 FF 00 00 .dword %00000000000000001111111111100111 +0048ACr 1 E8 FF 00 00 .dword %00000000000000001111111111101000 +0048B0r 1 E9 FF 00 00 .dword %00000000000000001111111111101001 +0048B4r 1 EA FF 00 00 .dword %00000000000000001111111111101010 +0048B8r 1 EB FF 00 00 .dword %00000000000000001111111111101011 +0048BCr 1 EC FF 00 00 .dword %00000000000000001111111111101100 +0048C0r 1 ED FF 00 00 .dword %00000000000000001111111111101101 +0048C4r 1 EE FF 00 00 .dword %00000000000000001111111111101110 +0048C8r 1 EF FF 00 00 .dword %00000000000000001111111111101111 +0048CCr 1 F0 FF 00 00 .dword %00000000000000001111111111110000 +0048D0r 1 F1 FF 00 00 .dword %00000000000000001111111111110001 +0048D4r 1 F2 FF 00 00 .dword %00000000000000001111111111110010 +0048D8r 1 F3 FF 00 00 .dword %00000000000000001111111111110011 +0048DCr 1 F4 FF 00 00 .dword %00000000000000001111111111110100 +0048E0r 1 F5 FF 00 00 .dword %00000000000000001111111111110101 +0048E4r 1 F6 FF 00 00 .dword %00000000000000001111111111110110 +0048E8r 1 F7 FF 00 00 .dword %00000000000000001111111111110111 +0048ECr 1 F8 FF 00 00 .dword %00000000000000001111111111111000 +0048F0r 1 F9 FF 00 00 .dword %00000000000000001111111111111001 +0048F4r 1 FA FF 00 00 .dword %00000000000000001111111111111010 +0048F8r 1 FB FF 00 00 .dword %00000000000000001111111111111011 +0048FCr 1 FC FF 00 00 .dword %00000000000000001111111111111100 +004900r 1 FD FF 00 00 .dword %00000000000000001111111111111101 +004904r 1 FE FF 00 00 .dword %00000000000000001111111111111110 +004908r 1 FF FF 00 00 .dword %00000000000000001111111111111111 +00490Cr 1 00 00 01 00 .dword %00000000000000010000000000000000 +004910r 1 01 00 01 00 .dword %00000000000000010000000000000001 +004914r 1 02 00 01 00 .dword %00000000000000010000000000000010 +004918r 1 03 00 01 00 .dword %00000000000000010000000000000011 +00491Cr 1 04 00 01 00 .dword %00000000000000010000000000000100 +004920r 1 05 00 01 00 .dword %00000000000000010000000000000101 +004924r 1 06 00 01 00 .dword %00000000000000010000000000000110 +004928r 1 07 00 01 00 .dword %00000000000000010000000000000111 +00492Cr 1 08 00 01 00 .dword %00000000000000010000000000001000 +004930r 1 09 00 01 00 .dword %00000000000000010000000000001001 +004934r 1 0A 00 01 00 .dword %00000000000000010000000000001010 +004938r 1 0B 00 01 00 .dword %00000000000000010000000000001011 +00493Cr 1 0C 00 01 00 .dword %00000000000000010000000000001100 +004940r 1 0D 00 01 00 .dword %00000000000000010000000000001101 +004944r 1 0E 00 01 00 .dword %00000000000000010000000000001110 +004948r 1 0F 00 01 00 .dword %00000000000000010000000000001111 +00494Cr 1 F0 FF FF 7F .dword %01111111111111111111111111110000 +004950r 1 F1 FF FF 7F .dword %01111111111111111111111111110001 +004954r 1 F2 FF FF 7F .dword %01111111111111111111111111110010 +004958r 1 F3 FF FF 7F .dword %01111111111111111111111111110011 +00495Cr 1 F4 FF FF 7F .dword %01111111111111111111111111110100 +004960r 1 F5 FF FF 7F .dword %01111111111111111111111111110101 +004964r 1 F6 FF FF 7F .dword %01111111111111111111111111110110 +004968r 1 F7 FF FF 7F .dword %01111111111111111111111111110111 +00496Cr 1 F8 FF FF 7F .dword %01111111111111111111111111111000 +004970r 1 F9 FF FF 7F .dword %01111111111111111111111111111001 +004974r 1 FA FF FF 7F .dword %01111111111111111111111111111010 +004978r 1 FB FF FF 7F .dword %01111111111111111111111111111011 +00497Cr 1 FC FF FF 7F .dword %01111111111111111111111111111100 +004980r 1 FD FF FF 7F .dword %01111111111111111111111111111101 +004984r 1 FE FF FF 7F .dword %01111111111111111111111111111110 +004988r 1 FF FF FF 7F .dword %01111111111111111111111111111111 +00498Cr 1 00 00 00 80 .dword %10000000000000000000000000000000 +004990r 1 01 00 00 80 .dword %10000000000000000000000000000001 +004994r 1 02 00 00 80 .dword %10000000000000000000000000000010 +004998r 1 03 00 00 80 .dword %10000000000000000000000000000011 +00499Cr 1 04 00 00 80 .dword %10000000000000000000000000000100 +0049A0r 1 05 00 00 80 .dword %10000000000000000000000000000101 +0049A4r 1 06 00 00 80 .dword %10000000000000000000000000000110 +0049A8r 1 07 00 00 80 .dword %10000000000000000000000000000111 +0049ACr 1 08 00 00 80 .dword %10000000000000000000000000001000 +0049B0r 1 09 00 00 80 .dword %10000000000000000000000000001001 +0049B4r 1 0A 00 00 80 .dword %10000000000000000000000000001010 +0049B8r 1 0B 00 00 80 .dword %10000000000000000000000000001011 +0049BCr 1 0C 00 00 80 .dword %10000000000000000000000000001100 +0049C0r 1 0D 00 00 80 .dword %10000000000000000000000000001101 +0049C4r 1 0E 00 00 80 .dword %10000000000000000000000000001110 +0049C8r 1 0F 00 00 80 .dword %10000000000000000000000000001111 +0049CCr 1 F0 FF FF 9F .dword %10011111111111111111111111110000 +0049D0r 1 F1 FF FF 9F .dword %10011111111111111111111111110001 +0049D4r 1 F2 FF FF 9F .dword %10011111111111111111111111110010 +0049D8r 1 F3 FF FF 9F .dword %10011111111111111111111111110011 +0049DCr 1 F4 FF FF 9F .dword %10011111111111111111111111110100 +0049E0r 1 F5 FF FF 9F .dword %10011111111111111111111111110101 +0049E4r 1 F6 FF FF 9F .dword %10011111111111111111111111110110 +0049E8r 1 F7 FF FF 9F .dword %10011111111111111111111111110111 +0049ECr 1 F8 FF FF 9F .dword %10011111111111111111111111111000 +0049F0r 1 F9 FF FF 9F .dword %10011111111111111111111111111001 +0049F4r 1 FA FF FF 9F .dword %10011111111111111111111111111010 +0049F8r 1 FB FF FF 9F .dword %10011111111111111111111111111011 +0049FCr 1 FC FF FF 9F .dword %10011111111111111111111111111100 +004A00r 1 FD FF FF 9F .dword %10011111111111111111111111111101 +004A04r 1 FE FF FF 9F .dword %10011111111111111111111111111110 +004A08r 1 FF FF FF 9F .dword %10011111111111111111111111111111 +004A0Cr 1 00 00 00 A0 .dword %10100000000000000000000000000000 +004A10r 1 01 00 00 A0 .dword %10100000000000000000000000000001 +004A14r 1 02 00 00 A0 .dword %10100000000000000000000000000010 +004A18r 1 03 00 00 A0 .dword %10100000000000000000000000000011 +004A1Cr 1 04 00 00 A0 .dword %10100000000000000000000000000100 +004A20r 1 05 00 00 A0 .dword %10100000000000000000000000000101 +004A24r 1 06 00 00 A0 .dword %10100000000000000000000000000110 +004A28r 1 07 00 00 A0 .dword %10100000000000000000000000000111 +004A2Cr 1 08 00 00 A0 .dword %10100000000000000000000000001000 +004A30r 1 09 00 00 A0 .dword %10100000000000000000000000001001 +004A34r 1 0A 00 00 A0 .dword %10100000000000000000000000001010 +004A38r 1 0B 00 00 A0 .dword %10100000000000000000000000001011 +004A3Cr 1 0C 00 00 A0 .dword %10100000000000000000000000001100 +004A40r 1 0D 00 00 A0 .dword %10100000000000000000000000001101 +004A44r 1 0E 00 00 A0 .dword %10100000000000000000000000001110 +004A48r 1 0F 00 00 A0 .dword %10100000000000000000000000001111 +004A4Cr 1 F0 FF FF FF .dword %11111111111111111111111111110000 +004A50r 1 F1 FF FF FF .dword %11111111111111111111111111110001 +004A54r 1 F2 FF FF FF .dword %11111111111111111111111111110010 +004A58r 1 F3 FF FF FF .dword %11111111111111111111111111110011 +004A5Cr 1 F4 FF FF FF .dword %11111111111111111111111111110100 +004A60r 1 F5 FF FF FF .dword %11111111111111111111111111110101 +004A64r 1 F6 FF FF FF .dword %11111111111111111111111111110110 +004A68r 1 F7 FF FF FF .dword %11111111111111111111111111110111 +004A6Cr 1 F8 FF FF FF .dword %11111111111111111111111111111000 +004A70r 1 F9 FF FF FF .dword %11111111111111111111111111111001 +004A74r 1 FA FF FF FF .dword %11111111111111111111111111111010 +004A78r 1 FB FF FF FF .dword %11111111111111111111111111111011 +004A7Cr 1 FC FF FF FF .dword %11111111111111111111111111111100 +004A80r 1 FD FF FF FF .dword %11111111111111111111111111111101 +004A84r 1 FE FF FF FF .dword %11111111111111111111111111111110 +004A88r 1 FF FF FF FF .dword %11111111111111111111111111111111 +004A8Cr 1 +004A8Cr 1 ; multiple values on one line, decimal +004A8Cr 1 00 00 00 00 .dword 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +004A90r 1 01 00 00 00 +004A94r 1 02 00 00 00 +004ACCr 1 10 00 00 00 .dword 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +004AD0r 1 11 00 00 00 +004AD4r 1 12 00 00 00 +004B0Cr 1 70 00 00 00 .dword 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +004B10r 1 71 00 00 00 +004B14r 1 72 00 00 00 +004B4Cr 1 80 00 00 00 .dword 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +004B50r 1 81 00 00 00 +004B54r 1 82 00 00 00 +004B8Cr 1 F0 00 00 00 .dword 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +004B90r 1 F1 00 00 00 +004B94r 1 F2 00 00 00 +004BCCr 1 00 01 00 00 .dword 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 +004BD0r 1 01 01 00 00 +004BD4r 1 02 01 00 00 +004C0Cr 1 E0 0F 00 00 .dword 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 +004C10r 1 E1 0F 00 00 +004C14r 1 E2 0F 00 00 +004C4Cr 1 F0 0F 00 00 .dword 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 +004C50r 1 F1 0F 00 00 +004C54r 1 F2 0F 00 00 +004C8Cr 1 00 10 00 00 .dword 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 +004C90r 1 01 10 00 00 +004C94r 1 02 10 00 00 +004CCCr 1 F0 7F 00 00 .dword 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 +004CD0r 1 F1 7F 00 00 +004CD4r 1 F2 7F 00 00 +004D0Cr 1 00 80 00 00 .dword 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 +004D10r 1 01 80 00 00 +004D14r 1 02 80 00 00 +004D4Cr 1 F0 9F 00 00 .dword 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 +004D50r 1 F1 9F 00 00 +004D54r 1 F2 9F 00 00 +004D8Cr 1 00 A0 00 00 .dword 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 +004D90r 1 01 A0 00 00 +004D94r 1 02 A0 00 00 +004DCCr 1 F0 AF 00 00 .dword 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 +004DD0r 1 F1 AF 00 00 +004DD4r 1 F2 AF 00 00 +004E0Cr 1 00 B0 00 00 .dword 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 +004E10r 1 01 B0 00 00 +004E14r 1 02 B0 00 00 +004E4Cr 1 F0 FF 00 00 .dword 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 +004E50r 1 F1 FF 00 00 +004E54r 1 F2 FF 00 00 +004E8Cr 1 00 00 01 00 .dword 65536,65537,65538,65539,65540,65541,65542,65543,65544,65545,65546,65547,65548,65549,65550,65551 +004E90r 1 01 00 01 00 +004E94r 1 02 00 01 00 +004ECCr 1 FF FF FF 7F .dword 2147483647,2147483648,2147483649,2147483650,2147483651,2147483652,2147483653,2147483654,2147483655,2147483656,2147483657,2147483658,2147483659,2147483660,2147483661,2147483662 +004ED0r 1 00 00 00 80 +004ED4r 1 01 00 00 80 +004F0Cr 1 0F 00 00 80 .dword 2147483663,2147483664,2147483665,2147483666,2147483667,2147483668,2147483669,2147483670,2147483671,2147483672,2147483673,2147483674,2147483675,2147483676,2147483677,2147483678 +004F10r 1 10 00 00 80 +004F14r 1 11 00 00 80 +004F4Cr 1 FF FF FF 9F .dword 2684354559,2684354560,2684354561,2684354562,2684354563,2684354564,2684354565,2684354566,2684354567,2684354568,2684354569,2684354570,2684354571,2684354572,2684354573,2684354574 +004F50r 1 00 00 00 A0 +004F54r 1 01 00 00 A0 +004F8Cr 1 0F 00 00 A0 .dword 2684354575,2684354576,2684354577,2684354578,2684354579,2684354580,2684354581,2684354582,2684354583,2684354584,2684354585,2684354586,2684354587,2684354588,2684354589,2684354590 +004F90r 1 10 00 00 A0 +004F94r 1 11 00 00 A0 +004FCCr 1 FF FF FF FF .dword 4294967295 +004FD0r 1 +004FD0r 1 ; multiple values on one line, hex +004FD0r 1 00 00 00 00 .dword $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +004FD4r 1 01 00 00 00 +004FD8r 1 02 00 00 00 +005010r 1 10 00 00 00 .dword $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +005014r 1 11 00 00 00 +005018r 1 12 00 00 00 +005050r 1 70 00 00 00 .dword $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +005054r 1 71 00 00 00 +005058r 1 72 00 00 00 +005090r 1 80 00 00 00 .dword $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +005094r 1 81 00 00 00 +005098r 1 82 00 00 00 +0050D0r 1 F0 00 00 00 .dword $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +0050D4r 1 F1 00 00 00 +0050D8r 1 F2 00 00 00 +005110r 1 00 01 00 00 .dword $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f +005114r 1 01 01 00 00 +005118r 1 02 01 00 00 +005150r 1 E0 0F 00 00 .dword $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef +005154r 1 E1 0F 00 00 +005158r 1 E2 0F 00 00 +005190r 1 F0 0F 00 00 .dword $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff +005194r 1 F1 0F 00 00 +005198r 1 F2 0F 00 00 +0051D0r 1 00 10 00 00 .dword $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f +0051D4r 1 01 10 00 00 +0051D8r 1 02 10 00 00 +005210r 1 F0 7F 00 00 .dword $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff +005214r 1 F1 7F 00 00 +005218r 1 F2 7F 00 00 +005250r 1 00 80 00 00 .dword $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f +005254r 1 01 80 00 00 +005258r 1 02 80 00 00 +005290r 1 F0 9F 00 00 .dword $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff +005294r 1 F1 9F 00 00 +005298r 1 F2 9F 00 00 +0052D0r 1 00 A0 00 00 .dword $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f +0052D4r 1 01 A0 00 00 +0052D8r 1 02 A0 00 00 +005310r 1 F0 AF 00 00 .dword $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff +005314r 1 F1 AF 00 00 +005318r 1 F2 AF 00 00 +005350r 1 00 B0 00 00 .dword $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f +005354r 1 01 B0 00 00 +005358r 1 02 B0 00 00 +005390r 1 F0 FF 00 00 .dword $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff +005394r 1 F1 FF 00 00 +005398r 1 F2 FF 00 00 +0053D0r 1 00 00 01 00 .dword $10000,$10001,$10002,$10003,$10004,$10005,$10006,$10007,$10008,$10009,$1000a,$1000b,$1000c,$1000d,$1000e,$1000f +0053D4r 1 01 00 01 00 +0053D8r 1 02 00 01 00 +005410r 1 FF FF FF 7F .dword $7fffffff,$80000000,$80000001,$80000002,$80000003,$80000004,$80000005,$80000006,$80000007,$80000008,$80000009,$8000000a,$8000000b,$8000000c,$8000000d,$8000000e +005414r 1 00 00 00 80 +005418r 1 01 00 00 80 +005450r 1 0F 00 00 80 .dword $8000000f,$80000010,$80000011,$80000012,$80000013,$80000014,$80000015,$80000016,$80000017,$80000018,$80000019,$8000001a,$8000001b,$8000001c,$8000001d,$8000001e +005454r 1 10 00 00 80 +005458r 1 11 00 00 80 +005490r 1 FF FF FF 9F .dword $9fffffff,$a0000000,$a0000001,$a0000002,$a0000003,$a0000004,$a0000005,$a0000006,$a0000007,$a0000008,$a0000009,$a000000a,$a000000b,$a000000c,$a000000d,$a000000e +005494r 1 00 00 00 A0 +005498r 1 01 00 00 A0 +0054D0r 1 0F 00 00 A0 .dword $a000000f,$a0000010,$a0000011,$a0000012,$a0000013,$a0000014,$a0000015,$a0000016,$a0000017,$a0000018,$a0000019,$a000001a,$a000001b,$a000001c,$a000001d,$a000001e +0054D4r 1 10 00 00 A0 +0054D8r 1 11 00 00 A0 +005510r 1 FF FF FF FF .dword $ffffffff +005514r 1 +005514r 1 ; multiple values on one line, alternative hex +005514r 1 00 00 00 00 .dword 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +005518r 1 01 00 00 00 +00551Cr 1 02 00 00 00 +005554r 1 10 00 00 00 .dword 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +005558r 1 11 00 00 00 +00555Cr 1 12 00 00 00 +005594r 1 70 00 00 00 .dword 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +005598r 1 71 00 00 00 +00559Cr 1 72 00 00 00 +0055D4r 1 80 00 00 00 .dword 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +0055D8r 1 81 00 00 00 +0055DCr 1 82 00 00 00 +005614r 1 F0 00 00 00 .dword 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +005618r 1 F1 00 00 00 +00561Cr 1 F2 00 00 00 +005654r 1 00 01 00 00 .dword 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh +005658r 1 01 01 00 00 +00565Cr 1 02 01 00 00 +005694r 1 E0 0F 00 00 .dword 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh +005698r 1 E1 0F 00 00 +00569Cr 1 E2 0F 00 00 +0056D4r 1 F0 0F 00 00 .dword 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh +0056D8r 1 F1 0F 00 00 +0056DCr 1 F2 0F 00 00 +005714r 1 00 10 00 00 .dword 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh +005718r 1 01 10 00 00 +00571Cr 1 02 10 00 00 +005754r 1 F0 7F 00 00 .dword 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh +005758r 1 F1 7F 00 00 +00575Cr 1 F2 7F 00 00 +005794r 1 00 80 00 00 .dword 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh +005798r 1 01 80 00 00 +00579Cr 1 02 80 00 00 +0057D4r 1 F0 9F 00 00 .dword 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh +0057D8r 1 F1 9F 00 00 +0057DCr 1 F2 9F 00 00 +005814r 1 00 A0 00 00 .dword 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh +005818r 1 01 A0 00 00 +00581Cr 1 02 A0 00 00 +005854r 1 F0 AF 00 00 .dword 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh +005858r 1 F1 AF 00 00 +00585Cr 1 F2 AF 00 00 +005894r 1 00 B0 00 00 .dword 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh +005898r 1 01 B0 00 00 +00589Cr 1 02 B0 00 00 +0058D4r 1 F0 FF 00 00 .dword 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh +0058D8r 1 F1 FF 00 00 +0058DCr 1 F2 FF 00 00 +005914r 1 00 00 01 00 .dword 10000h,10001h,10002h,10003h,10004h,10005h,10006h,10007h,10008h,10009h,1000ah,1000bh,1000ch,1000dh,1000eh,1000fh +005918r 1 01 00 01 00 +00591Cr 1 02 00 01 00 +005954r 1 FF FF FF 7F .dword 7fffffffh,80000000h,80000001h,80000002h,80000003h,80000004h,80000005h,80000006h,80000007h,80000008h,80000009h,8000000ah,8000000bh,8000000ch,8000000dh,8000000eh +005958r 1 00 00 00 80 +00595Cr 1 01 00 00 80 +005994r 1 0F 00 00 80 .dword 8000000fh,80000010h,80000011h,80000012h,80000013h,80000014h,80000015h,80000016h,80000017h,80000018h,80000019h,8000001ah,8000001bh,8000001ch,8000001dh,8000001eh +005998r 1 10 00 00 80 +00599Cr 1 11 00 00 80 +0059D4r 1 FF FF FF 9F .dword 9fffffffh,0a0000000h,0a0000001h,0a0000002h,0a0000003h,0a0000004h,0a0000005h,0a0000006h,0a0000007h,0a0000008h,0a0000009h,0a000000ah,0a000000bh,0a000000ch,0a000000dh,0a000000eh +0059D8r 1 00 00 00 A0 +0059DCr 1 01 00 00 A0 +005A14r 1 0F 00 00 A0 .dword 0a000000fh,0a0000010h,0a0000011h,0a0000012h,0a0000013h,0a0000014h,0a0000015h,0a0000016h,0a0000017h,0a0000018h,0a0000019h,0a000001ah,0a000001bh,0a000001ch,0a000001dh,0a000001eh +005A18r 1 10 00 00 A0 +005A1Cr 1 11 00 00 A0 +005A54r 1 FF FF FF FF .dword 0ffffffffh +005A58r 1 +005A58r 1 ; mix some variants +005A58r 1 0B 00 00 00 .dword 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +005A5Cr 1 11 00 00 00 +005A60r 1 03 00 00 00 +005A94r 1 diff --git a/test/asm/listing/104-dword.s b/test/asm/listing/104-dword.s new file mode 100644 index 000000000..401935821 --- /dev/null +++ b/test/asm/listing/104-dword.s @@ -0,0 +1,4874 @@ +; 2022-06-15 Spiro Trikaliotis + + + ; upper case pseudo-op + .DWORD 0 + .DWORD 1 + .DWORD 2 + .DWORD 3 + .DWORD 4 + .DWORD 5 + .DWORD 6 + .DWORD 7 + .DWORD 8 + .DWORD 9 + .DWORD 10 + .DWORD 11 + .DWORD 12 + .DWORD 13 + .DWORD 14 + .DWORD 15 + .DWORD 16 + .DWORD 17 + .DWORD 18 + .DWORD 19 + .DWORD 112 + .DWORD 113 + .DWORD 114 + .DWORD 115 + .DWORD 116 + .DWORD 117 + .DWORD 118 + .DWORD 119 + .DWORD 120 + .DWORD 121 + .DWORD 122 + .DWORD 123 + .DWORD 124 + .DWORD 125 + .DWORD 126 + .DWORD 127 + .DWORD 128 + .DWORD 129 + .DWORD 130 + .DWORD 131 + .DWORD 132 + .DWORD 133 + .DWORD 134 + .DWORD 240 + .DWORD 241 + .DWORD 242 + .DWORD 243 + .DWORD 244 + .DWORD 245 + .DWORD 246 + .DWORD 247 + .DWORD 248 + .DWORD 249 + .DWORD 250 + .DWORD 251 + .DWORD 252 + .DWORD 253 + .DWORD 254 + .DWORD 255 + .DWORD 256 + .DWORD 257 + .DWORD 258 + .DWORD 259 + .DWORD 4050 + .DWORD 4051 + .DWORD 4052 + .DWORD 4053 + .DWORD 4054 + .DWORD 4055 + .DWORD 4056 + .DWORD 4057 + .DWORD 4058 + .DWORD 4059 + .DWORD 4060 + .DWORD 4061 + .DWORD 4062 + .DWORD 4063 + .DWORD 4064 + .DWORD 4065 + .DWORD 4066 + .DWORD 4067 + .DWORD 4068 + .DWORD 4069 + .DWORD 4070 + .DWORD 4071 + .DWORD 4072 + .DWORD 4073 + .DWORD 4074 + .DWORD 4075 + .DWORD 4076 + .DWORD 4077 + .DWORD 4078 + .DWORD 4079 + .DWORD 4080 + .DWORD 4081 + .DWORD 4082 + .DWORD 4083 + .DWORD 4084 + .DWORD 4085 + .DWORD 4086 + .DWORD 4087 + .DWORD 4088 + .DWORD 4089 + .DWORD 4090 + .DWORD 4091 + .DWORD 4092 + .DWORD 4093 + .DWORD 4094 + .DWORD 4095 + .DWORD 4096 + .DWORD 4097 + .DWORD 4098 + .DWORD 4099 + .DWORD 4100 + .DWORD 4101 + .DWORD 4102 + .DWORD 4103 + .DWORD 4104 + .DWORD 32752 + .DWORD 32753 + .DWORD 32754 + .DWORD 32755 + .DWORD 32756 + .DWORD 32757 + .DWORD 32758 + .DWORD 32759 + .DWORD 32760 + .DWORD 32761 + .DWORD 32762 + .DWORD 32763 + .DWORD 32764 + .DWORD 32765 + .DWORD 32766 + .DWORD 32767 + .DWORD 32768 + .DWORD 32769 + .DWORD 32770 + .DWORD 32771 + .DWORD 32772 + .DWORD 32773 + .DWORD 32774 + .DWORD 32775 + .DWORD 32776 + .DWORD 32777 + .DWORD 32778 + .DWORD 32779 + .DWORD 40929 + .DWORD 40930 + .DWORD 40931 + .DWORD 40932 + .DWORD 40933 + .DWORD 40934 + .DWORD 40935 + .DWORD 40936 + .DWORD 40937 + .DWORD 40938 + .DWORD 40939 + .DWORD 40940 + .DWORD 40941 + .DWORD 40942 + .DWORD 40943 + .DWORD 40944 + .DWORD 40945 + .DWORD 40946 + .DWORD 40947 + .DWORD 40948 + .DWORD 40949 + .DWORD 40950 + .DWORD 40951 + .DWORD 40952 + .DWORD 40953 + .DWORD 40954 + .DWORD 40955 + .DWORD 40956 + .DWORD 40957 + .DWORD 40958 + .DWORD 40959 + .DWORD 40960 + .DWORD 40961 + .DWORD 40962 + .DWORD 40963 + .DWORD 40964 + .DWORD 40965 + .DWORD 40966 + .DWORD 40967 + .DWORD 40968 + .DWORD 40969 + .DWORD 40970 + .DWORD 40971 + .DWORD 40972 + .DWORD 40973 + .DWORD 40974 + .DWORD 40975 + .DWORD 45025 + .DWORD 45026 + .DWORD 45027 + .DWORD 45028 + .DWORD 45029 + .DWORD 45030 + .DWORD 45031 + .DWORD 45032 + .DWORD 45033 + .DWORD 45034 + .DWORD 45035 + .DWORD 45036 + .DWORD 45037 + .DWORD 45038 + .DWORD 45039 + .DWORD 45040 + .DWORD 45041 + .DWORD 45042 + .DWORD 45043 + .DWORD 45044 + .DWORD 45045 + .DWORD 45046 + .DWORD 45047 + .DWORD 45048 + .DWORD 45049 + .DWORD 45050 + .DWORD 45051 + .DWORD 45052 + .DWORD 45053 + .DWORD 45054 + .DWORD 45055 + .DWORD 45056 + .DWORD 45057 + .DWORD 45058 + .DWORD 45059 + .DWORD 45060 + .DWORD 45061 + .DWORD 45062 + .DWORD 45063 + .DWORD 45064 + .DWORD 45065 + .DWORD 45066 + .DWORD 45067 + .DWORD 45068 + .DWORD 45069 + .DWORD 45070 + .DWORD 45071 + .DWORD 65505 + .DWORD 65506 + .DWORD 65507 + .DWORD 65508 + .DWORD 65509 + .DWORD 65510 + .DWORD 65511 + .DWORD 65512 + .DWORD 65513 + .DWORD 65514 + .DWORD 65515 + .DWORD 65516 + .DWORD 65517 + .DWORD 65518 + .DWORD 65519 + .DWORD 65520 + .DWORD 65521 + .DWORD 65522 + .DWORD 65523 + .DWORD 65524 + .DWORD 65525 + .DWORD 65526 + .DWORD 65527 + .DWORD 65528 + .DWORD 65529 + .DWORD 65530 + .DWORD 65531 + .DWORD 65532 + .DWORD 65533 + .DWORD 65534 + .DWORD 65535 + .DWORD 65536 + .DWORD 65537 + .DWORD 65538 + .DWORD 65539 + .DWORD 65540 + .DWORD 65541 + .DWORD 65542 + .DWORD 65543 + .DWORD 65544 + .DWORD 65545 + .DWORD 65546 + .DWORD 65547 + .DWORD 65548 + .DWORD 65549 + .DWORD 65550 + .DWORD 65551 + .DWORD 2147483632 + .DWORD 2147483633 + .DWORD 2147483634 + .DWORD 2147483635 + .DWORD 2147483636 + .DWORD 2147483637 + .DWORD 2147483638 + .DWORD 2147483639 + .DWORD 2147483640 + .DWORD 2147483641 + .DWORD 2147483642 + .DWORD 2147483643 + .DWORD 2147483644 + .DWORD 2147483645 + .DWORD 2147483646 + .DWORD 2147483647 + .DWORD 2147483648 + .DWORD 2147483649 + .DWORD 2147483650 + .DWORD 2147483651 + .DWORD 2147483652 + .DWORD 2147483653 + .DWORD 2147483654 + .DWORD 2147483655 + .DWORD 2147483656 + .DWORD 2147483657 + .DWORD 2147483658 + .DWORD 2147483659 + .DWORD 2147483660 + .DWORD 2147483661 + .DWORD 2147483662 + .DWORD 2147483663 + .DWORD 2684354544 + .DWORD 2684354545 + .DWORD 2684354546 + .DWORD 2684354547 + .DWORD 2684354548 + .DWORD 2684354549 + .DWORD 2684354550 + .DWORD 2684354551 + .DWORD 2684354552 + .DWORD 2684354553 + .DWORD 2684354554 + .DWORD 2684354555 + .DWORD 2684354556 + .DWORD 2684354557 + .DWORD 2684354558 + .DWORD 2684354559 + .DWORD 2684354560 + .DWORD 2684354561 + .DWORD 2684354562 + .DWORD 2684354563 + .DWORD 2684354564 + .DWORD 2684354565 + .DWORD 2684354566 + .DWORD 2684354567 + .DWORD 2684354568 + .DWORD 2684354569 + .DWORD 2684354570 + .DWORD 2684354571 + .DWORD 2684354572 + .DWORD 2684354573 + .DWORD 2684354574 + .DWORD 2684354575 + .DWORD 4294967280 + .DWORD 4294967281 + .DWORD 4294967282 + .DWORD 4294967283 + .DWORD 4294967284 + .DWORD 4294967285 + .DWORD 4294967286 + .DWORD 4294967287 + .DWORD 4294967288 + .DWORD 4294967289 + .DWORD 4294967290 + .DWORD 4294967291 + .DWORD 4294967292 + .DWORD 4294967293 + .DWORD 4294967294 + .DWORD 4294967295 + + ; lower case pseudo-op + .dword 0 + .dword 1 + .dword 2 + .dword 3 + .dword 4 + .dword 5 + .dword 6 + .dword 7 + .dword 8 + .dword 9 + .dword 10 + .dword 11 + .dword 12 + .dword 13 + .dword 14 + .dword 15 + .dword 16 + .dword 17 + .dword 18 + .dword 19 + .dword 112 + .dword 113 + .dword 114 + .dword 115 + .dword 116 + .dword 117 + .dword 118 + .dword 119 + .dword 120 + .dword 121 + .dword 122 + .dword 123 + .dword 124 + .dword 125 + .dword 126 + .dword 127 + .dword 128 + .dword 129 + .dword 130 + .dword 131 + .dword 132 + .dword 133 + .dword 134 + .dword 240 + .dword 241 + .dword 242 + .dword 243 + .dword 244 + .dword 245 + .dword 246 + .dword 247 + .dword 248 + .dword 249 + .dword 250 + .dword 251 + .dword 252 + .dword 253 + .dword 254 + .dword 255 + .dword 256 + .dword 257 + .dword 258 + .dword 259 + .dword 4050 + .dword 4051 + .dword 4052 + .dword 4053 + .dword 4054 + .dword 4055 + .dword 4056 + .dword 4057 + .dword 4058 + .dword 4059 + .dword 4060 + .dword 4061 + .dword 4062 + .dword 4063 + .dword 4064 + .dword 4065 + .dword 4066 + .dword 4067 + .dword 4068 + .dword 4069 + .dword 4070 + .dword 4071 + .dword 4072 + .dword 4073 + .dword 4074 + .dword 4075 + .dword 4076 + .dword 4077 + .dword 4078 + .dword 4079 + .dword 4080 + .dword 4081 + .dword 4082 + .dword 4083 + .dword 4084 + .dword 4085 + .dword 4086 + .dword 4087 + .dword 4088 + .dword 4089 + .dword 4090 + .dword 4091 + .dword 4092 + .dword 4093 + .dword 4094 + .dword 4095 + .dword 4096 + .dword 4097 + .dword 4098 + .dword 4099 + .dword 4100 + .dword 4101 + .dword 4102 + .dword 4103 + .dword 4104 + .dword 32752 + .dword 32753 + .dword 32754 + .dword 32755 + .dword 32756 + .dword 32757 + .dword 32758 + .dword 32759 + .dword 32760 + .dword 32761 + .dword 32762 + .dword 32763 + .dword 32764 + .dword 32765 + .dword 32766 + .dword 32767 + .dword 32768 + .dword 32769 + .dword 32770 + .dword 32771 + .dword 32772 + .dword 32773 + .dword 32774 + .dword 32775 + .dword 32776 + .dword 32777 + .dword 32778 + .dword 32779 + .dword 40929 + .dword 40930 + .dword 40931 + .dword 40932 + .dword 40933 + .dword 40934 + .dword 40935 + .dword 40936 + .dword 40937 + .dword 40938 + .dword 40939 + .dword 40940 + .dword 40941 + .dword 40942 + .dword 40943 + .dword 40944 + .dword 40945 + .dword 40946 + .dword 40947 + .dword 40948 + .dword 40949 + .dword 40950 + .dword 40951 + .dword 40952 + .dword 40953 + .dword 40954 + .dword 40955 + .dword 40956 + .dword 40957 + .dword 40958 + .dword 40959 + .dword 40960 + .dword 40961 + .dword 40962 + .dword 40963 + .dword 40964 + .dword 40965 + .dword 40966 + .dword 40967 + .dword 40968 + .dword 40969 + .dword 40970 + .dword 40971 + .dword 40972 + .dword 40973 + .dword 40974 + .dword 40975 + .dword 45025 + .dword 45026 + .dword 45027 + .dword 45028 + .dword 45029 + .dword 45030 + .dword 45031 + .dword 45032 + .dword 45033 + .dword 45034 + .dword 45035 + .dword 45036 + .dword 45037 + .dword 45038 + .dword 45039 + .dword 45040 + .dword 45041 + .dword 45042 + .dword 45043 + .dword 45044 + .dword 45045 + .dword 45046 + .dword 45047 + .dword 45048 + .dword 45049 + .dword 45050 + .dword 45051 + .dword 45052 + .dword 45053 + .dword 45054 + .dword 45055 + .dword 45056 + .dword 45057 + .dword 45058 + .dword 45059 + .dword 45060 + .dword 45061 + .dword 45062 + .dword 45063 + .dword 45064 + .dword 45065 + .dword 45066 + .dword 45067 + .dword 45068 + .dword 45069 + .dword 45070 + .dword 45071 + .dword 65505 + .dword 65506 + .dword 65507 + .dword 65508 + .dword 65509 + .dword 65510 + .dword 65511 + .dword 65512 + .dword 65513 + .dword 65514 + .dword 65515 + .dword 65516 + .dword 65517 + .dword 65518 + .dword 65519 + .dword 65520 + .dword 65521 + .dword 65522 + .dword 65523 + .dword 65524 + .dword 65525 + .dword 65526 + .dword 65527 + .dword 65528 + .dword 65529 + .dword 65530 + .dword 65531 + .dword 65532 + .dword 65533 + .dword 65534 + .dword 65535 + .dword 65536 + .dword 65537 + .dword 65538 + .dword 65539 + .dword 65540 + .dword 65541 + .dword 65542 + .dword 65543 + .dword 65544 + .dword 65545 + .dword 65546 + .dword 65547 + .dword 65548 + .dword 65549 + .dword 65550 + .dword 65551 + .dword 2147483632 + .dword 2147483633 + .dword 2147483634 + .dword 2147483635 + .dword 2147483636 + .dword 2147483637 + .dword 2147483638 + .dword 2147483639 + .dword 2147483640 + .dword 2147483641 + .dword 2147483642 + .dword 2147483643 + .dword 2147483644 + .dword 2147483645 + .dword 2147483646 + .dword 2147483647 + .dword 2147483648 + .dword 2147483649 + .dword 2147483650 + .dword 2147483651 + .dword 2147483652 + .dword 2147483653 + .dword 2147483654 + .dword 2147483655 + .dword 2147483656 + .dword 2147483657 + .dword 2147483658 + .dword 2147483659 + .dword 2147483660 + .dword 2147483661 + .dword 2147483662 + .dword 2147483663 + .dword 2684354544 + .dword 2684354545 + .dword 2684354546 + .dword 2684354547 + .dword 2684354548 + .dword 2684354549 + .dword 2684354550 + .dword 2684354551 + .dword 2684354552 + .dword 2684354553 + .dword 2684354554 + .dword 2684354555 + .dword 2684354556 + .dword 2684354557 + .dword 2684354558 + .dword 2684354559 + .dword 2684354560 + .dword 2684354561 + .dword 2684354562 + .dword 2684354563 + .dword 2684354564 + .dword 2684354565 + .dword 2684354566 + .dword 2684354567 + .dword 2684354568 + .dword 2684354569 + .dword 2684354570 + .dword 2684354571 + .dword 2684354572 + .dword 2684354573 + .dword 2684354574 + .dword 2684354575 + .dword 4294967280 + .dword 4294967281 + .dword 4294967282 + .dword 4294967283 + .dword 4294967284 + .dword 4294967285 + .dword 4294967286 + .dword 4294967287 + .dword 4294967288 + .dword 4294967289 + .dword 4294967290 + .dword 4294967291 + .dword 4294967292 + .dword 4294967293 + .dword 4294967294 + .dword 4294967295 + + ; hex values + .dword $0 + .dword $1 + .dword $2 + .dword $3 + .dword $4 + .dword $5 + .dword $6 + .dword $7 + .dword $8 + .dword $9 + .dword $a + .dword $b + .dword $c + .dword $d + .dword $e + .dword $f + .dword $10 + .dword $11 + .dword $12 + .dword $13 + .dword $70 + .dword $71 + .dword $72 + .dword $73 + .dword $74 + .dword $75 + .dword $76 + .dword $77 + .dword $78 + .dword $79 + .dword $7a + .dword $7b + .dword $7c + .dword $7d + .dword $7e + .dword $7f + .dword $80 + .dword $81 + .dword $82 + .dword $83 + .dword $84 + .dword $85 + .dword $86 + .dword $f0 + .dword $f1 + .dword $f2 + .dword $f3 + .dword $f4 + .dword $f5 + .dword $f6 + .dword $f7 + .dword $f8 + .dword $f9 + .dword $fa + .dword $fb + .dword $fc + .dword $fd + .dword $fe + .dword $ff + .dword $100 + .dword $101 + .dword $102 + .dword $103 + .dword $fd2 + .dword $fd3 + .dword $fd4 + .dword $fd5 + .dword $fd6 + .dword $fd7 + .dword $fd8 + .dword $fd9 + .dword $fda + .dword $fdb + .dword $fdc + .dword $fdd + .dword $fde + .dword $fdf + .dword $fe0 + .dword $fe1 + .dword $fe2 + .dword $fe3 + .dword $fe4 + .dword $fe5 + .dword $fe6 + .dword $fe7 + .dword $fe8 + .dword $fe9 + .dword $fea + .dword $feb + .dword $fec + .dword $fed + .dword $fee + .dword $fef + .dword $ff0 + .dword $ff1 + .dword $ff2 + .dword $ff3 + .dword $ff4 + .dword $ff5 + .dword $ff6 + .dword $ff7 + .dword $ff8 + .dword $ff9 + .dword $ffa + .dword $ffb + .dword $ffc + .dword $ffd + .dword $ffe + .dword $fff + .dword $1000 + .dword $1001 + .dword $1002 + .dword $1003 + .dword $1004 + .dword $1005 + .dword $1006 + .dword $1007 + .dword $1008 + .dword $7ff0 + .dword $7ff1 + .dword $7ff2 + .dword $7ff3 + .dword $7ff4 + .dword $7ff5 + .dword $7ff6 + .dword $7ff7 + .dword $7ff8 + .dword $7ff9 + .dword $7ffa + .dword $7ffb + .dword $7ffc + .dword $7ffd + .dword $7ffe + .dword $7fff + .dword $8000 + .dword $8001 + .dword $8002 + .dword $8003 + .dword $8004 + .dword $8005 + .dword $8006 + .dword $8007 + .dword $8008 + .dword $8009 + .dword $800a + .dword $800b + .dword $9fe1 + .dword $9fe2 + .dword $9fe3 + .dword $9fe4 + .dword $9fe5 + .dword $9fe6 + .dword $9fe7 + .dword $9fe8 + .dword $9fe9 + .dword $9fea + .dword $9feb + .dword $9fec + .dword $9fed + .dword $9fee + .dword $9fef + .dword $9ff0 + .dword $9ff1 + .dword $9ff2 + .dword $9ff3 + .dword $9ff4 + .dword $9ff5 + .dword $9ff6 + .dword $9ff7 + .dword $9ff8 + .dword $9ff9 + .dword $9ffa + .dword $9ffb + .dword $9ffc + .dword $9ffd + .dword $9ffe + .dword $9fff + .dword $a000 + .dword $a001 + .dword $a002 + .dword $a003 + .dword $a004 + .dword $a005 + .dword $a006 + .dword $a007 + .dword $a008 + .dword $a009 + .dword $a00a + .dword $a00b + .dword $a00c + .dword $a00d + .dword $a00e + .dword $a00f + .dword $afe1 + .dword $afe2 + .dword $afe3 + .dword $afe4 + .dword $afe5 + .dword $afe6 + .dword $afe7 + .dword $afe8 + .dword $afe9 + .dword $afea + .dword $afeb + .dword $afec + .dword $afed + .dword $afee + .dword $afef + .dword $aff0 + .dword $aff1 + .dword $aff2 + .dword $aff3 + .dword $aff4 + .dword $aff5 + .dword $aff6 + .dword $aff7 + .dword $aff8 + .dword $aff9 + .dword $affa + .dword $affb + .dword $affc + .dword $affd + .dword $affe + .dword $afff + .dword $b000 + .dword $b001 + .dword $b002 + .dword $b003 + .dword $b004 + .dword $b005 + .dword $b006 + .dword $b007 + .dword $b008 + .dword $b009 + .dword $b00a + .dword $b00b + .dword $b00c + .dword $b00d + .dword $b00e + .dword $b00f + .dword $ffe1 + .dword $ffe2 + .dword $ffe3 + .dword $ffe4 + .dword $ffe5 + .dword $ffe6 + .dword $ffe7 + .dword $ffe8 + .dword $ffe9 + .dword $ffea + .dword $ffeb + .dword $ffec + .dword $ffed + .dword $ffee + .dword $ffef + .dword $fff0 + .dword $fff1 + .dword $fff2 + .dword $fff3 + .dword $fff4 + .dword $fff5 + .dword $fff6 + .dword $fff7 + .dword $fff8 + .dword $fff9 + .dword $fffa + .dword $fffb + .dword $fffc + .dword $fffd + .dword $fffe + .dword $ffff + .dword $10000 + .dword $10001 + .dword $10002 + .dword $10003 + .dword $10004 + .dword $10005 + .dword $10006 + .dword $10007 + .dword $10008 + .dword $10009 + .dword $1000a + .dword $1000b + .dword $1000c + .dword $1000d + .dword $1000e + .dword $1000f + .dword $7ffffff0 + .dword $7ffffff1 + .dword $7ffffff2 + .dword $7ffffff3 + .dword $7ffffff4 + .dword $7ffffff5 + .dword $7ffffff6 + .dword $7ffffff7 + .dword $7ffffff8 + .dword $7ffffff9 + .dword $7ffffffa + .dword $7ffffffb + .dword $7ffffffc + .dword $7ffffffd + .dword $7ffffffe + .dword $7fffffff + .dword $80000000 + .dword $80000001 + .dword $80000002 + .dword $80000003 + .dword $80000004 + .dword $80000005 + .dword $80000006 + .dword $80000007 + .dword $80000008 + .dword $80000009 + .dword $8000000a + .dword $8000000b + .dword $8000000c + .dword $8000000d + .dword $8000000e + .dword $8000000f + .dword $9ffffff0 + .dword $9ffffff1 + .dword $9ffffff2 + .dword $9ffffff3 + .dword $9ffffff4 + .dword $9ffffff5 + .dword $9ffffff6 + .dword $9ffffff7 + .dword $9ffffff8 + .dword $9ffffff9 + .dword $9ffffffa + .dword $9ffffffb + .dword $9ffffffc + .dword $9ffffffd + .dword $9ffffffe + .dword $9fffffff + .dword $a0000000 + .dword $a0000001 + .dword $a0000002 + .dword $a0000003 + .dword $a0000004 + .dword $a0000005 + .dword $a0000006 + .dword $a0000007 + .dword $a0000008 + .dword $a0000009 + .dword $a000000a + .dword $a000000b + .dword $a000000c + .dword $a000000d + .dword $a000000e + .dword $a000000f + .dword $fffffff0 + .dword $fffffff1 + .dword $fffffff2 + .dword $fffffff3 + .dword $fffffff4 + .dword $fffffff5 + .dword $fffffff6 + .dword $fffffff7 + .dword $fffffff8 + .dword $fffffff9 + .dword $fffffffa + .dword $fffffffb + .dword $fffffffc + .dword $fffffffd + .dword $fffffffe + .dword $ffffffff + + ; hex values, uppercase + .dword $0 + .dword $1 + .dword $2 + .dword $3 + .dword $4 + .dword $5 + .dword $6 + .dword $7 + .dword $8 + .dword $9 + .dword $A + .dword $B + .dword $C + .dword $D + .dword $E + .dword $F + .dword $10 + .dword $11 + .dword $12 + .dword $13 + .dword $70 + .dword $71 + .dword $72 + .dword $73 + .dword $74 + .dword $75 + .dword $76 + .dword $77 + .dword $78 + .dword $79 + .dword $7A + .dword $7B + .dword $7C + .dword $7D + .dword $7E + .dword $7F + .dword $80 + .dword $81 + .dword $82 + .dword $83 + .dword $84 + .dword $85 + .dword $86 + .dword $F0 + .dword $F1 + .dword $F2 + .dword $F3 + .dword $F4 + .dword $F5 + .dword $F6 + .dword $F7 + .dword $F8 + .dword $F9 + .dword $FA + .dword $FB + .dword $FC + .dword $FD + .dword $FE + .dword $FF + .dword $100 + .dword $101 + .dword $102 + .dword $103 + .dword $FD2 + .dword $FD3 + .dword $FD4 + .dword $FD5 + .dword $FD6 + .dword $FD7 + .dword $FD8 + .dword $FD9 + .dword $FDA + .dword $FDB + .dword $FDC + .dword $FDD + .dword $FDE + .dword $FDF + .dword $FE0 + .dword $FE1 + .dword $FE2 + .dword $FE3 + .dword $FE4 + .dword $FE5 + .dword $FE6 + .dword $FE7 + .dword $FE8 + .dword $FE9 + .dword $FEA + .dword $FEB + .dword $FEC + .dword $FED + .dword $FEE + .dword $FEF + .dword $FF0 + .dword $FF1 + .dword $FF2 + .dword $FF3 + .dword $FF4 + .dword $FF5 + .dword $FF6 + .dword $FF7 + .dword $FF8 + .dword $FF9 + .dword $FFA + .dword $FFB + .dword $FFC + .dword $FFD + .dword $FFE + .dword $FFF + .dword $1000 + .dword $1001 + .dword $1002 + .dword $1003 + .dword $1004 + .dword $1005 + .dword $1006 + .dword $1007 + .dword $1008 + .dword $7FF0 + .dword $7FF1 + .dword $7FF2 + .dword $7FF3 + .dword $7FF4 + .dword $7FF5 + .dword $7FF6 + .dword $7FF7 + .dword $7FF8 + .dword $7FF9 + .dword $7FFA + .dword $7FFB + .dword $7FFC + .dword $7FFD + .dword $7FFE + .dword $7FFF + .dword $8000 + .dword $8001 + .dword $8002 + .dword $8003 + .dword $8004 + .dword $8005 + .dword $8006 + .dword $8007 + .dword $8008 + .dword $8009 + .dword $800A + .dword $800B + .dword $9FE1 + .dword $9FE2 + .dword $9FE3 + .dword $9FE4 + .dword $9FE5 + .dword $9FE6 + .dword $9FE7 + .dword $9FE8 + .dword $9FE9 + .dword $9FEA + .dword $9FEB + .dword $9FEC + .dword $9FED + .dword $9FEE + .dword $9FEF + .dword $9FF0 + .dword $9FF1 + .dword $9FF2 + .dword $9FF3 + .dword $9FF4 + .dword $9FF5 + .dword $9FF6 + .dword $9FF7 + .dword $9FF8 + .dword $9FF9 + .dword $9FFA + .dword $9FFB + .dword $9FFC + .dword $9FFD + .dword $9FFE + .dword $9FFF + .dword $A000 + .dword $A001 + .dword $A002 + .dword $A003 + .dword $A004 + .dword $A005 + .dword $A006 + .dword $A007 + .dword $A008 + .dword $A009 + .dword $A00A + .dword $A00B + .dword $A00C + .dword $A00D + .dword $A00E + .dword $A00F + .dword $AFE1 + .dword $AFE2 + .dword $AFE3 + .dword $AFE4 + .dword $AFE5 + .dword $AFE6 + .dword $AFE7 + .dword $AFE8 + .dword $AFE9 + .dword $AFEA + .dword $AFEB + .dword $AFEC + .dword $AFED + .dword $AFEE + .dword $AFEF + .dword $AFF0 + .dword $AFF1 + .dword $AFF2 + .dword $AFF3 + .dword $AFF4 + .dword $AFF5 + .dword $AFF6 + .dword $AFF7 + .dword $AFF8 + .dword $AFF9 + .dword $AFFA + .dword $AFFB + .dword $AFFC + .dword $AFFD + .dword $AFFE + .dword $AFFF + .dword $B000 + .dword $B001 + .dword $B002 + .dword $B003 + .dword $B004 + .dword $B005 + .dword $B006 + .dword $B007 + .dword $B008 + .dword $B009 + .dword $B00A + .dword $B00B + .dword $B00C + .dword $B00D + .dword $B00E + .dword $B00F + .dword $FFE1 + .dword $FFE2 + .dword $FFE3 + .dword $FFE4 + .dword $FFE5 + .dword $FFE6 + .dword $FFE7 + .dword $FFE8 + .dword $FFE9 + .dword $FFEA + .dword $FFEB + .dword $FFEC + .dword $FFED + .dword $FFEE + .dword $FFEF + .dword $FFF0 + .dword $FFF1 + .dword $FFF2 + .dword $FFF3 + .dword $FFF4 + .dword $FFF5 + .dword $FFF6 + .dword $FFF7 + .dword $FFF8 + .dword $FFF9 + .dword $FFFA + .dword $FFFB + .dword $FFFC + .dword $FFFD + .dword $FFFE + .dword $FFFF + .dword $10000 + .dword $10001 + .dword $10002 + .dword $10003 + .dword $10004 + .dword $10005 + .dword $10006 + .dword $10007 + .dword $10008 + .dword $10009 + .dword $1000A + .dword $1000B + .dword $1000C + .dword $1000D + .dword $1000E + .dword $1000F + .dword $7FFFFFF0 + .dword $7FFFFFF1 + .dword $7FFFFFF2 + .dword $7FFFFFF3 + .dword $7FFFFFF4 + .dword $7FFFFFF5 + .dword $7FFFFFF6 + .dword $7FFFFFF7 + .dword $7FFFFFF8 + .dword $7FFFFFF9 + .dword $7FFFFFFA + .dword $7FFFFFFB + .dword $7FFFFFFC + .dword $7FFFFFFD + .dword $7FFFFFFE + .dword $7FFFFFFF + .dword $80000000 + .dword $80000001 + .dword $80000002 + .dword $80000003 + .dword $80000004 + .dword $80000005 + .dword $80000006 + .dword $80000007 + .dword $80000008 + .dword $80000009 + .dword $8000000A + .dword $8000000B + .dword $8000000C + .dword $8000000D + .dword $8000000E + .dword $8000000F + .dword $9FFFFFF0 + .dword $9FFFFFF1 + .dword $9FFFFFF2 + .dword $9FFFFFF3 + .dword $9FFFFFF4 + .dword $9FFFFFF5 + .dword $9FFFFFF6 + .dword $9FFFFFF7 + .dword $9FFFFFF8 + .dword $9FFFFFF9 + .dword $9FFFFFFA + .dword $9FFFFFFB + .dword $9FFFFFFC + .dword $9FFFFFFD + .dword $9FFFFFFE + .dword $9FFFFFFF + .dword $A0000000 + .dword $A0000001 + .dword $A0000002 + .dword $A0000003 + .dword $A0000004 + .dword $A0000005 + .dword $A0000006 + .dword $A0000007 + .dword $A0000008 + .dword $A0000009 + .dword $A000000A + .dword $A000000B + .dword $A000000C + .dword $A000000D + .dword $A000000E + .dword $A000000F + .dword $FFFFFFF0 + .dword $FFFFFFF1 + .dword $FFFFFFF2 + .dword $FFFFFFF3 + .dword $FFFFFFF4 + .dword $FFFFFFF5 + .dword $FFFFFFF6 + .dword $FFFFFFF7 + .dword $FFFFFFF8 + .dword $FFFFFFF9 + .dword $FFFFFFFA + .dword $FFFFFFFB + .dword $FFFFFFFC + .dword $FFFFFFFD + .dword $FFFFFFFE + .dword $FFFFFFFF + + ; 8-digit hex values + .dword $00000000 + .dword $00000001 + .dword $00000002 + .dword $00000003 + .dword $00000004 + .dword $00000005 + .dword $00000006 + .dword $00000007 + .dword $00000008 + .dword $00000009 + .dword $0000000a + .dword $0000000b + .dword $0000000c + .dword $0000000d + .dword $0000000e + .dword $0000000f + .dword $00000010 + .dword $00000011 + .dword $00000012 + .dword $00000013 + .dword $00000070 + .dword $00000071 + .dword $00000072 + .dword $00000073 + .dword $00000074 + .dword $00000075 + .dword $00000076 + .dword $00000077 + .dword $00000078 + .dword $00000079 + .dword $0000007a + .dword $0000007b + .dword $0000007c + .dword $0000007d + .dword $0000007e + .dword $0000007f + .dword $00000080 + .dword $00000081 + .dword $00000082 + .dword $00000083 + .dword $00000084 + .dword $00000085 + .dword $00000086 + .dword $000000f0 + .dword $000000f1 + .dword $000000f2 + .dword $000000f3 + .dword $000000f4 + .dword $000000f5 + .dword $000000f6 + .dword $000000f7 + .dword $000000f8 + .dword $000000f9 + .dword $000000fa + .dword $000000fb + .dword $000000fc + .dword $000000fd + .dword $000000fe + .dword $000000ff + .dword $00000100 + .dword $00000101 + .dword $00000102 + .dword $00000103 + .dword $00000fd2 + .dword $00000fd3 + .dword $00000fd4 + .dword $00000fd5 + .dword $00000fd6 + .dword $00000fd7 + .dword $00000fd8 + .dword $00000fd9 + .dword $00000fda + .dword $00000fdb + .dword $00000fdc + .dword $00000fdd + .dword $00000fde + .dword $00000fdf + .dword $00000fe0 + .dword $00000fe1 + .dword $00000fe2 + .dword $00000fe3 + .dword $00000fe4 + .dword $00000fe5 + .dword $00000fe6 + .dword $00000fe7 + .dword $00000fe8 + .dword $00000fe9 + .dword $00000fea + .dword $00000feb + .dword $00000fec + .dword $00000fed + .dword $00000fee + .dword $00000fef + .dword $00000ff0 + .dword $00000ff1 + .dword $00000ff2 + .dword $00000ff3 + .dword $00000ff4 + .dword $00000ff5 + .dword $00000ff6 + .dword $00000ff7 + .dword $00000ff8 + .dword $00000ff9 + .dword $00000ffa + .dword $00000ffb + .dword $00000ffc + .dword $00000ffd + .dword $00000ffe + .dword $00000fff + .dword $00001000 + .dword $00001001 + .dword $00001002 + .dword $00001003 + .dword $00001004 + .dword $00001005 + .dword $00001006 + .dword $00001007 + .dword $00001008 + .dword $00007ff0 + .dword $00007ff1 + .dword $00007ff2 + .dword $00007ff3 + .dword $00007ff4 + .dword $00007ff5 + .dword $00007ff6 + .dword $00007ff7 + .dword $00007ff8 + .dword $00007ff9 + .dword $00007ffa + .dword $00007ffb + .dword $00007ffc + .dword $00007ffd + .dword $00007ffe + .dword $00007fff + .dword $00008000 + .dword $00008001 + .dword $00008002 + .dword $00008003 + .dword $00008004 + .dword $00008005 + .dword $00008006 + .dword $00008007 + .dword $00008008 + .dword $00008009 + .dword $0000800a + .dword $0000800b + .dword $00009fe1 + .dword $00009fe2 + .dword $00009fe3 + .dword $00009fe4 + .dword $00009fe5 + .dword $00009fe6 + .dword $00009fe7 + .dword $00009fe8 + .dword $00009fe9 + .dword $00009fea + .dword $00009feb + .dword $00009fec + .dword $00009fed + .dword $00009fee + .dword $00009fef + .dword $00009ff0 + .dword $00009ff1 + .dword $00009ff2 + .dword $00009ff3 + .dword $00009ff4 + .dword $00009ff5 + .dword $00009ff6 + .dword $00009ff7 + .dword $00009ff8 + .dword $00009ff9 + .dword $00009ffa + .dword $00009ffb + .dword $00009ffc + .dword $00009ffd + .dword $00009ffe + .dword $00009fff + .dword $0000a000 + .dword $0000a001 + .dword $0000a002 + .dword $0000a003 + .dword $0000a004 + .dword $0000a005 + .dword $0000a006 + .dword $0000a007 + .dword $0000a008 + .dword $0000a009 + .dword $0000a00a + .dword $0000a00b + .dword $0000a00c + .dword $0000a00d + .dword $0000a00e + .dword $0000a00f + .dword $0000afe1 + .dword $0000afe2 + .dword $0000afe3 + .dword $0000afe4 + .dword $0000afe5 + .dword $0000afe6 + .dword $0000afe7 + .dword $0000afe8 + .dword $0000afe9 + .dword $0000afea + .dword $0000afeb + .dword $0000afec + .dword $0000afed + .dword $0000afee + .dword $0000afef + .dword $0000aff0 + .dword $0000aff1 + .dword $0000aff2 + .dword $0000aff3 + .dword $0000aff4 + .dword $0000aff5 + .dword $0000aff6 + .dword $0000aff7 + .dword $0000aff8 + .dword $0000aff9 + .dword $0000affa + .dword $0000affb + .dword $0000affc + .dword $0000affd + .dword $0000affe + .dword $0000afff + .dword $0000b000 + .dword $0000b001 + .dword $0000b002 + .dword $0000b003 + .dword $0000b004 + .dword $0000b005 + .dword $0000b006 + .dword $0000b007 + .dword $0000b008 + .dword $0000b009 + .dword $0000b00a + .dword $0000b00b + .dword $0000b00c + .dword $0000b00d + .dword $0000b00e + .dword $0000b00f + .dword $0000ffe1 + .dword $0000ffe2 + .dword $0000ffe3 + .dword $0000ffe4 + .dword $0000ffe5 + .dword $0000ffe6 + .dword $0000ffe7 + .dword $0000ffe8 + .dword $0000ffe9 + .dword $0000ffea + .dword $0000ffeb + .dword $0000ffec + .dword $0000ffed + .dword $0000ffee + .dword $0000ffef + .dword $0000fff0 + .dword $0000fff1 + .dword $0000fff2 + .dword $0000fff3 + .dword $0000fff4 + .dword $0000fff5 + .dword $0000fff6 + .dword $0000fff7 + .dword $0000fff8 + .dword $0000fff9 + .dword $0000fffa + .dword $0000fffb + .dword $0000fffc + .dword $0000fffd + .dword $0000fffe + .dword $0000ffff + .dword $00010000 + .dword $00010001 + .dword $00010002 + .dword $00010003 + .dword $00010004 + .dword $00010005 + .dword $00010006 + .dword $00010007 + .dword $00010008 + .dword $00010009 + .dword $0001000a + .dword $0001000b + .dword $0001000c + .dword $0001000d + .dword $0001000e + .dword $0001000f + .dword $7ffffff0 + .dword $7ffffff1 + .dword $7ffffff2 + .dword $7ffffff3 + .dword $7ffffff4 + .dword $7ffffff5 + .dword $7ffffff6 + .dword $7ffffff7 + .dword $7ffffff8 + .dword $7ffffff9 + .dword $7ffffffa + .dword $7ffffffb + .dword $7ffffffc + .dword $7ffffffd + .dword $7ffffffe + .dword $7fffffff + .dword $80000000 + .dword $80000001 + .dword $80000002 + .dword $80000003 + .dword $80000004 + .dword $80000005 + .dword $80000006 + .dword $80000007 + .dword $80000008 + .dword $80000009 + .dword $8000000a + .dword $8000000b + .dword $8000000c + .dword $8000000d + .dword $8000000e + .dword $8000000f + .dword $9ffffff0 + .dword $9ffffff1 + .dword $9ffffff2 + .dword $9ffffff3 + .dword $9ffffff4 + .dword $9ffffff5 + .dword $9ffffff6 + .dword $9ffffff7 + .dword $9ffffff8 + .dword $9ffffff9 + .dword $9ffffffa + .dword $9ffffffb + .dword $9ffffffc + .dword $9ffffffd + .dword $9ffffffe + .dword $9fffffff + .dword $a0000000 + .dword $a0000001 + .dword $a0000002 + .dword $a0000003 + .dword $a0000004 + .dword $a0000005 + .dword $a0000006 + .dword $a0000007 + .dword $a0000008 + .dword $a0000009 + .dword $a000000a + .dword $a000000b + .dword $a000000c + .dword $a000000d + .dword $a000000e + .dword $a000000f + .dword $fffffff0 + .dword $fffffff1 + .dword $fffffff2 + .dword $fffffff3 + .dword $fffffff4 + .dword $fffffff5 + .dword $fffffff6 + .dword $fffffff7 + .dword $fffffff8 + .dword $fffffff9 + .dword $fffffffa + .dword $fffffffb + .dword $fffffffc + .dword $fffffffd + .dword $fffffffe + .dword $ffffffff + + ; 8-digit hex values, uppercase + .dword $00000000 + .dword $00000001 + .dword $00000002 + .dword $00000003 + .dword $00000004 + .dword $00000005 + .dword $00000006 + .dword $00000007 + .dword $00000008 + .dword $00000009 + .dword $0000000A + .dword $0000000B + .dword $0000000C + .dword $0000000D + .dword $0000000E + .dword $0000000F + .dword $00000010 + .dword $00000011 + .dword $00000012 + .dword $00000013 + .dword $00000070 + .dword $00000071 + .dword $00000072 + .dword $00000073 + .dword $00000074 + .dword $00000075 + .dword $00000076 + .dword $00000077 + .dword $00000078 + .dword $00000079 + .dword $0000007A + .dword $0000007B + .dword $0000007C + .dword $0000007D + .dword $0000007E + .dword $0000007F + .dword $00000080 + .dword $00000081 + .dword $00000082 + .dword $00000083 + .dword $00000084 + .dword $00000085 + .dword $00000086 + .dword $000000F0 + .dword $000000F1 + .dword $000000F2 + .dword $000000F3 + .dword $000000F4 + .dword $000000F5 + .dword $000000F6 + .dword $000000F7 + .dword $000000F8 + .dword $000000F9 + .dword $000000FA + .dword $000000FB + .dword $000000FC + .dword $000000FD + .dword $000000FE + .dword $000000FF + .dword $00000100 + .dword $00000101 + .dword $00000102 + .dword $00000103 + .dword $00000FD2 + .dword $00000FD3 + .dword $00000FD4 + .dword $00000FD5 + .dword $00000FD6 + .dword $00000FD7 + .dword $00000FD8 + .dword $00000FD9 + .dword $00000FDA + .dword $00000FDB + .dword $00000FDC + .dword $00000FDD + .dword $00000FDE + .dword $00000FDF + .dword $00000FE0 + .dword $00000FE1 + .dword $00000FE2 + .dword $00000FE3 + .dword $00000FE4 + .dword $00000FE5 + .dword $00000FE6 + .dword $00000FE7 + .dword $00000FE8 + .dword $00000FE9 + .dword $00000FEA + .dword $00000FEB + .dword $00000FEC + .dword $00000FED + .dword $00000FEE + .dword $00000FEF + .dword $00000FF0 + .dword $00000FF1 + .dword $00000FF2 + .dword $00000FF3 + .dword $00000FF4 + .dword $00000FF5 + .dword $00000FF6 + .dword $00000FF7 + .dword $00000FF8 + .dword $00000FF9 + .dword $00000FFA + .dword $00000FFB + .dword $00000FFC + .dword $00000FFD + .dword $00000FFE + .dword $00000FFF + .dword $00001000 + .dword $00001001 + .dword $00001002 + .dword $00001003 + .dword $00001004 + .dword $00001005 + .dword $00001006 + .dword $00001007 + .dword $00001008 + .dword $00007FF0 + .dword $00007FF1 + .dword $00007FF2 + .dword $00007FF3 + .dword $00007FF4 + .dword $00007FF5 + .dword $00007FF6 + .dword $00007FF7 + .dword $00007FF8 + .dword $00007FF9 + .dword $00007FFA + .dword $00007FFB + .dword $00007FFC + .dword $00007FFD + .dword $00007FFE + .dword $00007FFF + .dword $00008000 + .dword $00008001 + .dword $00008002 + .dword $00008003 + .dword $00008004 + .dword $00008005 + .dword $00008006 + .dword $00008007 + .dword $00008008 + .dword $00008009 + .dword $0000800A + .dword $0000800B + .dword $00009FE1 + .dword $00009FE2 + .dword $00009FE3 + .dword $00009FE4 + .dword $00009FE5 + .dword $00009FE6 + .dword $00009FE7 + .dword $00009FE8 + .dword $00009FE9 + .dword $00009FEA + .dword $00009FEB + .dword $00009FEC + .dword $00009FED + .dword $00009FEE + .dword $00009FEF + .dword $00009FF0 + .dword $00009FF1 + .dword $00009FF2 + .dword $00009FF3 + .dword $00009FF4 + .dword $00009FF5 + .dword $00009FF6 + .dword $00009FF7 + .dword $00009FF8 + .dword $00009FF9 + .dword $00009FFA + .dword $00009FFB + .dword $00009FFC + .dword $00009FFD + .dword $00009FFE + .dword $00009FFF + .dword $0000A000 + .dword $0000A001 + .dword $0000A002 + .dword $0000A003 + .dword $0000A004 + .dword $0000A005 + .dword $0000A006 + .dword $0000A007 + .dword $0000A008 + .dword $0000A009 + .dword $0000A00A + .dword $0000A00B + .dword $0000A00C + .dword $0000A00D + .dword $0000A00E + .dword $0000A00F + .dword $0000AFE1 + .dword $0000AFE2 + .dword $0000AFE3 + .dword $0000AFE4 + .dword $0000AFE5 + .dword $0000AFE6 + .dword $0000AFE7 + .dword $0000AFE8 + .dword $0000AFE9 + .dword $0000AFEA + .dword $0000AFEB + .dword $0000AFEC + .dword $0000AFED + .dword $0000AFEE + .dword $0000AFEF + .dword $0000AFF0 + .dword $0000AFF1 + .dword $0000AFF2 + .dword $0000AFF3 + .dword $0000AFF4 + .dword $0000AFF5 + .dword $0000AFF6 + .dword $0000AFF7 + .dword $0000AFF8 + .dword $0000AFF9 + .dword $0000AFFA + .dword $0000AFFB + .dword $0000AFFC + .dword $0000AFFD + .dword $0000AFFE + .dword $0000AFFF + .dword $0000B000 + .dword $0000B001 + .dword $0000B002 + .dword $0000B003 + .dword $0000B004 + .dword $0000B005 + .dword $0000B006 + .dword $0000B007 + .dword $0000B008 + .dword $0000B009 + .dword $0000B00A + .dword $0000B00B + .dword $0000B00C + .dword $0000B00D + .dword $0000B00E + .dword $0000B00F + .dword $0000FFE1 + .dword $0000FFE2 + .dword $0000FFE3 + .dword $0000FFE4 + .dword $0000FFE5 + .dword $0000FFE6 + .dword $0000FFE7 + .dword $0000FFE8 + .dword $0000FFE9 + .dword $0000FFEA + .dword $0000FFEB + .dword $0000FFEC + .dword $0000FFED + .dword $0000FFEE + .dword $0000FFEF + .dword $0000FFF0 + .dword $0000FFF1 + .dword $0000FFF2 + .dword $0000FFF3 + .dword $0000FFF4 + .dword $0000FFF5 + .dword $0000FFF6 + .dword $0000FFF7 + .dword $0000FFF8 + .dword $0000FFF9 + .dword $0000FFFA + .dword $0000FFFB + .dword $0000FFFC + .dword $0000FFFD + .dword $0000FFFE + .dword $0000FFFF + .dword $00010000 + .dword $00010001 + .dword $00010002 + .dword $00010003 + .dword $00010004 + .dword $00010005 + .dword $00010006 + .dword $00010007 + .dword $00010008 + .dword $00010009 + .dword $0001000A + .dword $0001000B + .dword $0001000C + .dword $0001000D + .dword $0001000E + .dword $0001000F + .dword $7FFFFFF0 + .dword $7FFFFFF1 + .dword $7FFFFFF2 + .dword $7FFFFFF3 + .dword $7FFFFFF4 + .dword $7FFFFFF5 + .dword $7FFFFFF6 + .dword $7FFFFFF7 + .dword $7FFFFFF8 + .dword $7FFFFFF9 + .dword $7FFFFFFA + .dword $7FFFFFFB + .dword $7FFFFFFC + .dword $7FFFFFFD + .dword $7FFFFFFE + .dword $7FFFFFFF + .dword $80000000 + .dword $80000001 + .dword $80000002 + .dword $80000003 + .dword $80000004 + .dword $80000005 + .dword $80000006 + .dword $80000007 + .dword $80000008 + .dword $80000009 + .dword $8000000A + .dword $8000000B + .dword $8000000C + .dword $8000000D + .dword $8000000E + .dword $8000000F + .dword $9FFFFFF0 + .dword $9FFFFFF1 + .dword $9FFFFFF2 + .dword $9FFFFFF3 + .dword $9FFFFFF4 + .dword $9FFFFFF5 + .dword $9FFFFFF6 + .dword $9FFFFFF7 + .dword $9FFFFFF8 + .dword $9FFFFFF9 + .dword $9FFFFFFA + .dword $9FFFFFFB + .dword $9FFFFFFC + .dword $9FFFFFFD + .dword $9FFFFFFE + .dword $9FFFFFFF + .dword $A0000000 + .dword $A0000001 + .dword $A0000002 + .dword $A0000003 + .dword $A0000004 + .dword $A0000005 + .dword $A0000006 + .dword $A0000007 + .dword $A0000008 + .dword $A0000009 + .dword $A000000A + .dword $A000000B + .dword $A000000C + .dword $A000000D + .dword $A000000E + .dword $A000000F + .dword $FFFFFFF0 + .dword $FFFFFFF1 + .dword $FFFFFFF2 + .dword $FFFFFFF3 + .dword $FFFFFFF4 + .dword $FFFFFFF5 + .dword $FFFFFFF6 + .dword $FFFFFFF7 + .dword $FFFFFFF8 + .dword $FFFFFFF9 + .dword $FFFFFFFA + .dword $FFFFFFFB + .dword $FFFFFFFC + .dword $FFFFFFFD + .dword $FFFFFFFE + .dword $FFFFFFFF + + ; alternative hex values + .dword 0h + .dword 1h + .dword 2h + .dword 3h + .dword 4h + .dword 5h + .dword 6h + .dword 7h + .dword 8h + .dword 9h + .dword 0ah + .dword 0bh + .dword 0ch + .dword 0dh + .dword 0eh + .dword 0fh + .dword 10h + .dword 11h + .dword 12h + .dword 13h + .dword 70h + .dword 71h + .dword 72h + .dword 73h + .dword 74h + .dword 75h + .dword 76h + .dword 77h + .dword 78h + .dword 79h + .dword 7ah + .dword 7bh + .dword 7ch + .dword 7dh + .dword 7eh + .dword 7fh + .dword 80h + .dword 81h + .dword 82h + .dword 83h + .dword 84h + .dword 85h + .dword 86h + .dword 0f0h + .dword 0f1h + .dword 0f2h + .dword 0f3h + .dword 0f4h + .dword 0f5h + .dword 0f6h + .dword 0f7h + .dword 0f8h + .dword 0f9h + .dword 0fah + .dword 0fbh + .dword 0fch + .dword 0fdh + .dword 0feh + .dword 0ffh + .dword 100h + .dword 101h + .dword 102h + .dword 103h + .dword 0fd2h + .dword 0fd3h + .dword 0fd4h + .dword 0fd5h + .dword 0fd6h + .dword 0fd7h + .dword 0fd8h + .dword 0fd9h + .dword 0fdah + .dword 0fdbh + .dword 0fdch + .dword 0fddh + .dword 0fdeh + .dword 0fdfh + .dword 0fe0h + .dword 0fe1h + .dword 0fe2h + .dword 0fe3h + .dword 0fe4h + .dword 0fe5h + .dword 0fe6h + .dword 0fe7h + .dword 0fe8h + .dword 0fe9h + .dword 0feah + .dword 0febh + .dword 0fech + .dword 0fedh + .dword 0feeh + .dword 0fefh + .dword 0ff0h + .dword 0ff1h + .dword 0ff2h + .dword 0ff3h + .dword 0ff4h + .dword 0ff5h + .dword 0ff6h + .dword 0ff7h + .dword 0ff8h + .dword 0ff9h + .dword 0ffah + .dword 0ffbh + .dword 0ffch + .dword 0ffdh + .dword 0ffeh + .dword 0fffh + .dword 1000h + .dword 1001h + .dword 1002h + .dword 1003h + .dword 1004h + .dword 1005h + .dword 1006h + .dword 1007h + .dword 1008h + .dword 7ff0h + .dword 7ff1h + .dword 7ff2h + .dword 7ff3h + .dword 7ff4h + .dword 7ff5h + .dword 7ff6h + .dword 7ff7h + .dword 7ff8h + .dword 7ff9h + .dword 7ffah + .dword 7ffbh + .dword 7ffch + .dword 7ffdh + .dword 7ffeh + .dword 7fffh + .dword 8000h + .dword 8001h + .dword 8002h + .dword 8003h + .dword 8004h + .dword 8005h + .dword 8006h + .dword 8007h + .dword 8008h + .dword 8009h + .dword 800ah + .dword 800bh + .dword 9fe1h + .dword 9fe2h + .dword 9fe3h + .dword 9fe4h + .dword 9fe5h + .dword 9fe6h + .dword 9fe7h + .dword 9fe8h + .dword 9fe9h + .dword 9feah + .dword 9febh + .dword 9fech + .dword 9fedh + .dword 9feeh + .dword 9fefh + .dword 9ff0h + .dword 9ff1h + .dword 9ff2h + .dword 9ff3h + .dword 9ff4h + .dword 9ff5h + .dword 9ff6h + .dword 9ff7h + .dword 9ff8h + .dword 9ff9h + .dword 9ffah + .dword 9ffbh + .dword 9ffch + .dword 9ffdh + .dword 9ffeh + .dword 9fffh + .dword 0a000h + .dword 0a001h + .dword 0a002h + .dword 0a003h + .dword 0a004h + .dword 0a005h + .dword 0a006h + .dword 0a007h + .dword 0a008h + .dword 0a009h + .dword 0a00ah + .dword 0a00bh + .dword 0a00ch + .dword 0a00dh + .dword 0a00eh + .dword 0a00fh + .dword 0afe1h + .dword 0afe2h + .dword 0afe3h + .dword 0afe4h + .dword 0afe5h + .dword 0afe6h + .dword 0afe7h + .dword 0afe8h + .dword 0afe9h + .dword 0afeah + .dword 0afebh + .dword 0afech + .dword 0afedh + .dword 0afeeh + .dword 0afefh + .dword 0aff0h + .dword 0aff1h + .dword 0aff2h + .dword 0aff3h + .dword 0aff4h + .dword 0aff5h + .dword 0aff6h + .dword 0aff7h + .dword 0aff8h + .dword 0aff9h + .dword 0affah + .dword 0affbh + .dword 0affch + .dword 0affdh + .dword 0affeh + .dword 0afffh + .dword 0b000h + .dword 0b001h + .dword 0b002h + .dword 0b003h + .dword 0b004h + .dword 0b005h + .dword 0b006h + .dword 0b007h + .dword 0b008h + .dword 0b009h + .dword 0b00ah + .dword 0b00bh + .dword 0b00ch + .dword 0b00dh + .dword 0b00eh + .dword 0b00fh + .dword 0ffe1h + .dword 0ffe2h + .dword 0ffe3h + .dword 0ffe4h + .dword 0ffe5h + .dword 0ffe6h + .dword 0ffe7h + .dword 0ffe8h + .dword 0ffe9h + .dword 0ffeah + .dword 0ffebh + .dword 0ffech + .dword 0ffedh + .dword 0ffeeh + .dword 0ffefh + .dword 0fff0h + .dword 0fff1h + .dword 0fff2h + .dword 0fff3h + .dword 0fff4h + .dword 0fff5h + .dword 0fff6h + .dword 0fff7h + .dword 0fff8h + .dword 0fff9h + .dword 0fffah + .dword 0fffbh + .dword 0fffch + .dword 0fffdh + .dword 0fffeh + .dword 0ffffh + .dword 10000h + .dword 10001h + .dword 10002h + .dword 10003h + .dword 10004h + .dword 10005h + .dword 10006h + .dword 10007h + .dword 10008h + .dword 10009h + .dword 1000ah + .dword 1000bh + .dword 1000ch + .dword 1000dh + .dword 1000eh + .dword 1000fh + .dword 7ffffff0h + .dword 7ffffff1h + .dword 7ffffff2h + .dword 7ffffff3h + .dword 7ffffff4h + .dword 7ffffff5h + .dword 7ffffff6h + .dword 7ffffff7h + .dword 7ffffff8h + .dword 7ffffff9h + .dword 7ffffffah + .dword 7ffffffbh + .dword 7ffffffch + .dword 7ffffffdh + .dword 7ffffffeh + .dword 7fffffffh + .dword 80000000h + .dword 80000001h + .dword 80000002h + .dword 80000003h + .dword 80000004h + .dword 80000005h + .dword 80000006h + .dword 80000007h + .dword 80000008h + .dword 80000009h + .dword 8000000ah + .dword 8000000bh + .dword 8000000ch + .dword 8000000dh + .dword 8000000eh + .dword 8000000fh + .dword 9ffffff0h + .dword 9ffffff1h + .dword 9ffffff2h + .dword 9ffffff3h + .dword 9ffffff4h + .dword 9ffffff5h + .dword 9ffffff6h + .dword 9ffffff7h + .dword 9ffffff8h + .dword 9ffffff9h + .dword 9ffffffah + .dword 9ffffffbh + .dword 9ffffffch + .dword 9ffffffdh + .dword 9ffffffeh + .dword 9fffffffh + .dword 0a0000000h + .dword 0a0000001h + .dword 0a0000002h + .dword 0a0000003h + .dword 0a0000004h + .dword 0a0000005h + .dword 0a0000006h + .dword 0a0000007h + .dword 0a0000008h + .dword 0a0000009h + .dword 0a000000ah + .dword 0a000000bh + .dword 0a000000ch + .dword 0a000000dh + .dword 0a000000eh + .dword 0a000000fh + .dword 0fffffff0h + .dword 0fffffff1h + .dword 0fffffff2h + .dword 0fffffff3h + .dword 0fffffff4h + .dword 0fffffff5h + .dword 0fffffff6h + .dword 0fffffff7h + .dword 0fffffff8h + .dword 0fffffff9h + .dword 0fffffffah + .dword 0fffffffbh + .dword 0fffffffch + .dword 0fffffffdh + .dword 0fffffffeh + .dword 0ffffffffh + + ; alternative hex values, uppercase + .dword 0h + .dword 1h + .dword 2h + .dword 3h + .dword 4h + .dword 5h + .dword 6h + .dword 7h + .dword 8h + .dword 9h + .dword 0Ah + .dword 0Bh + .dword 0Ch + .dword 0Dh + .dword 0Eh + .dword 0Fh + .dword 10h + .dword 11h + .dword 12h + .dword 13h + .dword 70h + .dword 71h + .dword 72h + .dword 73h + .dword 74h + .dword 75h + .dword 76h + .dword 77h + .dword 78h + .dword 79h + .dword 7Ah + .dword 7Bh + .dword 7Ch + .dword 7Dh + .dword 7Eh + .dword 7Fh + .dword 80h + .dword 81h + .dword 82h + .dword 83h + .dword 84h + .dword 85h + .dword 86h + .dword 0F0h + .dword 0F1h + .dword 0F2h + .dword 0F3h + .dword 0F4h + .dword 0F5h + .dword 0F6h + .dword 0F7h + .dword 0F8h + .dword 0F9h + .dword 0FAh + .dword 0FBh + .dword 0FCh + .dword 0FDh + .dword 0FEh + .dword 0FFh + .dword 100h + .dword 101h + .dword 102h + .dword 103h + .dword 0FD2h + .dword 0FD3h + .dword 0FD4h + .dword 0FD5h + .dword 0FD6h + .dword 0FD7h + .dword 0FD8h + .dword 0FD9h + .dword 0FDAh + .dword 0FDBh + .dword 0FDCh + .dword 0FDDh + .dword 0FDEh + .dword 0FDFh + .dword 0FE0h + .dword 0FE1h + .dword 0FE2h + .dword 0FE3h + .dword 0FE4h + .dword 0FE5h + .dword 0FE6h + .dword 0FE7h + .dword 0FE8h + .dword 0FE9h + .dword 0FEAh + .dword 0FEBh + .dword 0FECh + .dword 0FEDh + .dword 0FEEh + .dword 0FEFh + .dword 0FF0h + .dword 0FF1h + .dword 0FF2h + .dword 0FF3h + .dword 0FF4h + .dword 0FF5h + .dword 0FF6h + .dword 0FF7h + .dword 0FF8h + .dword 0FF9h + .dword 0FFAh + .dword 0FFBh + .dword 0FFCh + .dword 0FFDh + .dword 0FFEh + .dword 0FFFh + .dword 1000h + .dword 1001h + .dword 1002h + .dword 1003h + .dword 1004h + .dword 1005h + .dword 1006h + .dword 1007h + .dword 1008h + .dword 7FF0h + .dword 7FF1h + .dword 7FF2h + .dword 7FF3h + .dword 7FF4h + .dword 7FF5h + .dword 7FF6h + .dword 7FF7h + .dword 7FF8h + .dword 7FF9h + .dword 7FFAh + .dword 7FFBh + .dword 7FFCh + .dword 7FFDh + .dword 7FFEh + .dword 7FFFh + .dword 8000h + .dword 8001h + .dword 8002h + .dword 8003h + .dword 8004h + .dword 8005h + .dword 8006h + .dword 8007h + .dword 8008h + .dword 8009h + .dword 800Ah + .dword 800Bh + .dword 9FE1h + .dword 9FE2h + .dword 9FE3h + .dword 9FE4h + .dword 9FE5h + .dword 9FE6h + .dword 9FE7h + .dword 9FE8h + .dword 9FE9h + .dword 9FEAh + .dword 9FEBh + .dword 9FECh + .dword 9FEDh + .dword 9FEEh + .dword 9FEFh + .dword 9FF0h + .dword 9FF1h + .dword 9FF2h + .dword 9FF3h + .dword 9FF4h + .dword 9FF5h + .dword 9FF6h + .dword 9FF7h + .dword 9FF8h + .dword 9FF9h + .dword 9FFAh + .dword 9FFBh + .dword 9FFCh + .dword 9FFDh + .dword 9FFEh + .dword 9FFFh + .dword 0A000h + .dword 0A001h + .dword 0A002h + .dword 0A003h + .dword 0A004h + .dword 0A005h + .dword 0A006h + .dword 0A007h + .dword 0A008h + .dword 0A009h + .dword 0A00Ah + .dword 0A00Bh + .dword 0A00Ch + .dword 0A00Dh + .dword 0A00Eh + .dword 0A00Fh + .dword 0AFE1h + .dword 0AFE2h + .dword 0AFE3h + .dword 0AFE4h + .dword 0AFE5h + .dword 0AFE6h + .dword 0AFE7h + .dword 0AFE8h + .dword 0AFE9h + .dword 0AFEAh + .dword 0AFEBh + .dword 0AFECh + .dword 0AFEDh + .dword 0AFEEh + .dword 0AFEFh + .dword 0AFF0h + .dword 0AFF1h + .dword 0AFF2h + .dword 0AFF3h + .dword 0AFF4h + .dword 0AFF5h + .dword 0AFF6h + .dword 0AFF7h + .dword 0AFF8h + .dword 0AFF9h + .dword 0AFFAh + .dword 0AFFBh + .dword 0AFFCh + .dword 0AFFDh + .dword 0AFFEh + .dword 0AFFFh + .dword 0B000h + .dword 0B001h + .dword 0B002h + .dword 0B003h + .dword 0B004h + .dword 0B005h + .dword 0B006h + .dword 0B007h + .dword 0B008h + .dword 0B009h + .dword 0B00Ah + .dword 0B00Bh + .dword 0B00Ch + .dword 0B00Dh + .dword 0B00Eh + .dword 0B00Fh + .dword 0FFE1h + .dword 0FFE2h + .dword 0FFE3h + .dword 0FFE4h + .dword 0FFE5h + .dword 0FFE6h + .dword 0FFE7h + .dword 0FFE8h + .dword 0FFE9h + .dword 0FFEAh + .dword 0FFEBh + .dword 0FFECh + .dword 0FFEDh + .dword 0FFEEh + .dword 0FFEFh + .dword 0FFF0h + .dword 0FFF1h + .dword 0FFF2h + .dword 0FFF3h + .dword 0FFF4h + .dword 0FFF5h + .dword 0FFF6h + .dword 0FFF7h + .dword 0FFF8h + .dword 0FFF9h + .dword 0FFFAh + .dword 0FFFBh + .dword 0FFFCh + .dword 0FFFDh + .dword 0FFFEh + .dword 0FFFFh + .dword 10000h + .dword 10001h + .dword 10002h + .dword 10003h + .dword 10004h + .dword 10005h + .dword 10006h + .dword 10007h + .dword 10008h + .dword 10009h + .dword 1000Ah + .dword 1000Bh + .dword 1000Ch + .dword 1000Dh + .dword 1000Eh + .dword 1000Fh + .dword 7FFFFFF0h + .dword 7FFFFFF1h + .dword 7FFFFFF2h + .dword 7FFFFFF3h + .dword 7FFFFFF4h + .dword 7FFFFFF5h + .dword 7FFFFFF6h + .dword 7FFFFFF7h + .dword 7FFFFFF8h + .dword 7FFFFFF9h + .dword 7FFFFFFAh + .dword 7FFFFFFBh + .dword 7FFFFFFCh + .dword 7FFFFFFDh + .dword 7FFFFFFEh + .dword 7FFFFFFFh + .dword 80000000h + .dword 80000001h + .dword 80000002h + .dword 80000003h + .dword 80000004h + .dword 80000005h + .dword 80000006h + .dword 80000007h + .dword 80000008h + .dword 80000009h + .dword 8000000Ah + .dword 8000000Bh + .dword 8000000Ch + .dword 8000000Dh + .dword 8000000Eh + .dword 8000000Fh + .dword 9FFFFFF0h + .dword 9FFFFFF1h + .dword 9FFFFFF2h + .dword 9FFFFFF3h + .dword 9FFFFFF4h + .dword 9FFFFFF5h + .dword 9FFFFFF6h + .dword 9FFFFFF7h + .dword 9FFFFFF8h + .dword 9FFFFFF9h + .dword 9FFFFFFAh + .dword 9FFFFFFBh + .dword 9FFFFFFCh + .dword 9FFFFFFDh + .dword 9FFFFFFEh + .dword 9FFFFFFFh + .dword 0A0000000h + .dword 0A0000001h + .dword 0A0000002h + .dword 0A0000003h + .dword 0A0000004h + .dword 0A0000005h + .dword 0A0000006h + .dword 0A0000007h + .dword 0A0000008h + .dword 0A0000009h + .dword 0A000000Ah + .dword 0A000000Bh + .dword 0A000000Ch + .dword 0A000000Dh + .dword 0A000000Eh + .dword 0A000000Fh + .dword 0FFFFFFF0h + .dword 0FFFFFFF1h + .dword 0FFFFFFF2h + .dword 0FFFFFFF3h + .dword 0FFFFFFF4h + .dword 0FFFFFFF5h + .dword 0FFFFFFF6h + .dword 0FFFFFFF7h + .dword 0FFFFFFF8h + .dword 0FFFFFFF9h + .dword 0FFFFFFFAh + .dword 0FFFFFFFBh + .dword 0FFFFFFFCh + .dword 0FFFFFFFDh + .dword 0FFFFFFFEh + .dword 0FFFFFFFFh + + ; alternative 8-digit hex values + .dword 00000000h + .dword 00000001h + .dword 00000002h + .dword 00000003h + .dword 00000004h + .dword 00000005h + .dword 00000006h + .dword 00000007h + .dword 00000008h + .dword 00000009h + .dword 0000000ah + .dword 0000000bh + .dword 0000000ch + .dword 0000000dh + .dword 0000000eh + .dword 0000000fh + .dword 00000010h + .dword 00000011h + .dword 00000012h + .dword 00000013h + .dword 00000070h + .dword 00000071h + .dword 00000072h + .dword 00000073h + .dword 00000074h + .dword 00000075h + .dword 00000076h + .dword 00000077h + .dword 00000078h + .dword 00000079h + .dword 0000007ah + .dword 0000007bh + .dword 0000007ch + .dword 0000007dh + .dword 0000007eh + .dword 0000007fh + .dword 00000080h + .dword 00000081h + .dword 00000082h + .dword 00000083h + .dword 00000084h + .dword 00000085h + .dword 00000086h + .dword 000000f0h + .dword 000000f1h + .dword 000000f2h + .dword 000000f3h + .dword 000000f4h + .dword 000000f5h + .dword 000000f6h + .dword 000000f7h + .dword 000000f8h + .dword 000000f9h + .dword 000000fah + .dword 000000fbh + .dword 000000fch + .dword 000000fdh + .dword 000000feh + .dword 000000ffh + .dword 00000100h + .dword 00000101h + .dword 00000102h + .dword 00000103h + .dword 00000fd2h + .dword 00000fd3h + .dword 00000fd4h + .dword 00000fd5h + .dword 00000fd6h + .dword 00000fd7h + .dword 00000fd8h + .dword 00000fd9h + .dword 00000fdah + .dword 00000fdbh + .dword 00000fdch + .dword 00000fddh + .dword 00000fdeh + .dword 00000fdfh + .dword 00000fe0h + .dword 00000fe1h + .dword 00000fe2h + .dword 00000fe3h + .dword 00000fe4h + .dword 00000fe5h + .dword 00000fe6h + .dword 00000fe7h + .dword 00000fe8h + .dword 00000fe9h + .dword 00000feah + .dword 00000febh + .dword 00000fech + .dword 00000fedh + .dword 00000feeh + .dword 00000fefh + .dword 00000ff0h + .dword 00000ff1h + .dword 00000ff2h + .dword 00000ff3h + .dword 00000ff4h + .dword 00000ff5h + .dword 00000ff6h + .dword 00000ff7h + .dword 00000ff8h + .dword 00000ff9h + .dword 00000ffah + .dword 00000ffbh + .dword 00000ffch + .dword 00000ffdh + .dword 00000ffeh + .dword 00000fffh + .dword 00001000h + .dword 00001001h + .dword 00001002h + .dword 00001003h + .dword 00001004h + .dword 00001005h + .dword 00001006h + .dword 00001007h + .dword 00001008h + .dword 00007ff0h + .dword 00007ff1h + .dword 00007ff2h + .dword 00007ff3h + .dword 00007ff4h + .dword 00007ff5h + .dword 00007ff6h + .dword 00007ff7h + .dword 00007ff8h + .dword 00007ff9h + .dword 00007ffah + .dword 00007ffbh + .dword 00007ffch + .dword 00007ffdh + .dword 00007ffeh + .dword 00007fffh + .dword 00008000h + .dword 00008001h + .dword 00008002h + .dword 00008003h + .dword 00008004h + .dword 00008005h + .dword 00008006h + .dword 00008007h + .dword 00008008h + .dword 00008009h + .dword 0000800ah + .dword 0000800bh + .dword 00009fe1h + .dword 00009fe2h + .dword 00009fe3h + .dword 00009fe4h + .dword 00009fe5h + .dword 00009fe6h + .dword 00009fe7h + .dword 00009fe8h + .dword 00009fe9h + .dword 00009feah + .dword 00009febh + .dword 00009fech + .dword 00009fedh + .dword 00009feeh + .dword 00009fefh + .dword 00009ff0h + .dword 00009ff1h + .dword 00009ff2h + .dword 00009ff3h + .dword 00009ff4h + .dword 00009ff5h + .dword 00009ff6h + .dword 00009ff7h + .dword 00009ff8h + .dword 00009ff9h + .dword 00009ffah + .dword 00009ffbh + .dword 00009ffch + .dword 00009ffdh + .dword 00009ffeh + .dword 00009fffh + .dword 0000a000h + .dword 0000a001h + .dword 0000a002h + .dword 0000a003h + .dword 0000a004h + .dword 0000a005h + .dword 0000a006h + .dword 0000a007h + .dword 0000a008h + .dword 0000a009h + .dword 0000a00ah + .dword 0000a00bh + .dword 0000a00ch + .dword 0000a00dh + .dword 0000a00eh + .dword 0000a00fh + .dword 0000afe1h + .dword 0000afe2h + .dword 0000afe3h + .dword 0000afe4h + .dword 0000afe5h + .dword 0000afe6h + .dword 0000afe7h + .dword 0000afe8h + .dword 0000afe9h + .dword 0000afeah + .dword 0000afebh + .dword 0000afech + .dword 0000afedh + .dword 0000afeeh + .dword 0000afefh + .dword 0000aff0h + .dword 0000aff1h + .dword 0000aff2h + .dword 0000aff3h + .dword 0000aff4h + .dword 0000aff5h + .dword 0000aff6h + .dword 0000aff7h + .dword 0000aff8h + .dword 0000aff9h + .dword 0000affah + .dword 0000affbh + .dword 0000affch + .dword 0000affdh + .dword 0000affeh + .dword 0000afffh + .dword 0000b000h + .dword 0000b001h + .dword 0000b002h + .dword 0000b003h + .dword 0000b004h + .dword 0000b005h + .dword 0000b006h + .dword 0000b007h + .dword 0000b008h + .dword 0000b009h + .dword 0000b00ah + .dword 0000b00bh + .dword 0000b00ch + .dword 0000b00dh + .dword 0000b00eh + .dword 0000b00fh + .dword 0000ffe1h + .dword 0000ffe2h + .dword 0000ffe3h + .dword 0000ffe4h + .dword 0000ffe5h + .dword 0000ffe6h + .dword 0000ffe7h + .dword 0000ffe8h + .dword 0000ffe9h + .dword 0000ffeah + .dword 0000ffebh + .dword 0000ffech + .dword 0000ffedh + .dword 0000ffeeh + .dword 0000ffefh + .dword 0000fff0h + .dword 0000fff1h + .dword 0000fff2h + .dword 0000fff3h + .dword 0000fff4h + .dword 0000fff5h + .dword 0000fff6h + .dword 0000fff7h + .dword 0000fff8h + .dword 0000fff9h + .dword 0000fffah + .dword 0000fffbh + .dword 0000fffch + .dword 0000fffdh + .dword 0000fffeh + .dword 0000ffffh + .dword 00010000h + .dword 00010001h + .dword 00010002h + .dword 00010003h + .dword 00010004h + .dword 00010005h + .dword 00010006h + .dword 00010007h + .dword 00010008h + .dword 00010009h + .dword 0001000ah + .dword 0001000bh + .dword 0001000ch + .dword 0001000dh + .dword 0001000eh + .dword 0001000fh + .dword 7ffffff0h + .dword 7ffffff1h + .dword 7ffffff2h + .dword 7ffffff3h + .dword 7ffffff4h + .dword 7ffffff5h + .dword 7ffffff6h + .dword 7ffffff7h + .dword 7ffffff8h + .dword 7ffffff9h + .dword 7ffffffah + .dword 7ffffffbh + .dword 7ffffffch + .dword 7ffffffdh + .dword 7ffffffeh + .dword 7fffffffh + .dword 80000000h + .dword 80000001h + .dword 80000002h + .dword 80000003h + .dword 80000004h + .dword 80000005h + .dword 80000006h + .dword 80000007h + .dword 80000008h + .dword 80000009h + .dword 8000000ah + .dword 8000000bh + .dword 8000000ch + .dword 8000000dh + .dword 8000000eh + .dword 8000000fh + .dword 9ffffff0h + .dword 9ffffff1h + .dword 9ffffff2h + .dword 9ffffff3h + .dword 9ffffff4h + .dword 9ffffff5h + .dword 9ffffff6h + .dword 9ffffff7h + .dword 9ffffff8h + .dword 9ffffff9h + .dword 9ffffffah + .dword 9ffffffbh + .dword 9ffffffch + .dword 9ffffffdh + .dword 9ffffffeh + .dword 9fffffffh + .dword 0a0000000h + .dword 0a0000001h + .dword 0a0000002h + .dword 0a0000003h + .dword 0a0000004h + .dword 0a0000005h + .dword 0a0000006h + .dword 0a0000007h + .dword 0a0000008h + .dword 0a0000009h + .dword 0a000000ah + .dword 0a000000bh + .dword 0a000000ch + .dword 0a000000dh + .dword 0a000000eh + .dword 0a000000fh + .dword 0fffffff0h + .dword 0fffffff1h + .dword 0fffffff2h + .dword 0fffffff3h + .dword 0fffffff4h + .dword 0fffffff5h + .dword 0fffffff6h + .dword 0fffffff7h + .dword 0fffffff8h + .dword 0fffffff9h + .dword 0fffffffah + .dword 0fffffffbh + .dword 0fffffffch + .dword 0fffffffdh + .dword 0fffffffeh + .dword 0ffffffffh + + ; alternative 8-digit hex values, uppercase + .dword 00000000h + .dword 00000001h + .dword 00000002h + .dword 00000003h + .dword 00000004h + .dword 00000005h + .dword 00000006h + .dword 00000007h + .dword 00000008h + .dword 00000009h + .dword 0000000Ah + .dword 0000000Bh + .dword 0000000Ch + .dword 0000000Dh + .dword 0000000Eh + .dword 0000000Fh + .dword 00000010h + .dword 00000011h + .dword 00000012h + .dword 00000013h + .dword 00000070h + .dword 00000071h + .dword 00000072h + .dword 00000073h + .dword 00000074h + .dword 00000075h + .dword 00000076h + .dword 00000077h + .dword 00000078h + .dword 00000079h + .dword 0000007Ah + .dword 0000007Bh + .dword 0000007Ch + .dword 0000007Dh + .dword 0000007Eh + .dword 0000007Fh + .dword 00000080h + .dword 00000081h + .dword 00000082h + .dword 00000083h + .dword 00000084h + .dword 00000085h + .dword 00000086h + .dword 000000F0h + .dword 000000F1h + .dword 000000F2h + .dword 000000F3h + .dword 000000F4h + .dword 000000F5h + .dword 000000F6h + .dword 000000F7h + .dword 000000F8h + .dword 000000F9h + .dword 000000FAh + .dword 000000FBh + .dword 000000FCh + .dword 000000FDh + .dword 000000FEh + .dword 000000FFh + .dword 00000100h + .dword 00000101h + .dword 00000102h + .dword 00000103h + .dword 00000FD2h + .dword 00000FD3h + .dword 00000FD4h + .dword 00000FD5h + .dword 00000FD6h + .dword 00000FD7h + .dword 00000FD8h + .dword 00000FD9h + .dword 00000FDAh + .dword 00000FDBh + .dword 00000FDCh + .dword 00000FDDh + .dword 00000FDEh + .dword 00000FDFh + .dword 00000FE0h + .dword 00000FE1h + .dword 00000FE2h + .dword 00000FE3h + .dword 00000FE4h + .dword 00000FE5h + .dword 00000FE6h + .dword 00000FE7h + .dword 00000FE8h + .dword 00000FE9h + .dword 00000FEAh + .dword 00000FEBh + .dword 00000FECh + .dword 00000FEDh + .dword 00000FEEh + .dword 00000FEFh + .dword 00000FF0h + .dword 00000FF1h + .dword 00000FF2h + .dword 00000FF3h + .dword 00000FF4h + .dword 00000FF5h + .dword 00000FF6h + .dword 00000FF7h + .dword 00000FF8h + .dword 00000FF9h + .dword 00000FFAh + .dword 00000FFBh + .dword 00000FFCh + .dword 00000FFDh + .dword 00000FFEh + .dword 00000FFFh + .dword 00001000h + .dword 00001001h + .dword 00001002h + .dword 00001003h + .dword 00001004h + .dword 00001005h + .dword 00001006h + .dword 00001007h + .dword 00001008h + .dword 00007FF0h + .dword 00007FF1h + .dword 00007FF2h + .dword 00007FF3h + .dword 00007FF4h + .dword 00007FF5h + .dword 00007FF6h + .dword 00007FF7h + .dword 00007FF8h + .dword 00007FF9h + .dword 00007FFAh + .dword 00007FFBh + .dword 00007FFCh + .dword 00007FFDh + .dword 00007FFEh + .dword 00007FFFh + .dword 00008000h + .dword 00008001h + .dword 00008002h + .dword 00008003h + .dword 00008004h + .dword 00008005h + .dword 00008006h + .dword 00008007h + .dword 00008008h + .dword 00008009h + .dword 0000800Ah + .dword 0000800Bh + .dword 00009FE1h + .dword 00009FE2h + .dword 00009FE3h + .dword 00009FE4h + .dword 00009FE5h + .dword 00009FE6h + .dword 00009FE7h + .dword 00009FE8h + .dword 00009FE9h + .dword 00009FEAh + .dword 00009FEBh + .dword 00009FECh + .dword 00009FEDh + .dword 00009FEEh + .dword 00009FEFh + .dword 00009FF0h + .dword 00009FF1h + .dword 00009FF2h + .dword 00009FF3h + .dword 00009FF4h + .dword 00009FF5h + .dword 00009FF6h + .dword 00009FF7h + .dword 00009FF8h + .dword 00009FF9h + .dword 00009FFAh + .dword 00009FFBh + .dword 00009FFCh + .dword 00009FFDh + .dword 00009FFEh + .dword 00009FFFh + .dword 0000A000h + .dword 0000A001h + .dword 0000A002h + .dword 0000A003h + .dword 0000A004h + .dword 0000A005h + .dword 0000A006h + .dword 0000A007h + .dword 0000A008h + .dword 0000A009h + .dword 0000A00Ah + .dword 0000A00Bh + .dword 0000A00Ch + .dword 0000A00Dh + .dword 0000A00Eh + .dword 0000A00Fh + .dword 0000AFE1h + .dword 0000AFE2h + .dword 0000AFE3h + .dword 0000AFE4h + .dword 0000AFE5h + .dword 0000AFE6h + .dword 0000AFE7h + .dword 0000AFE8h + .dword 0000AFE9h + .dword 0000AFEAh + .dword 0000AFEBh + .dword 0000AFECh + .dword 0000AFEDh + .dword 0000AFEEh + .dword 0000AFEFh + .dword 0000AFF0h + .dword 0000AFF1h + .dword 0000AFF2h + .dword 0000AFF3h + .dword 0000AFF4h + .dword 0000AFF5h + .dword 0000AFF6h + .dword 0000AFF7h + .dword 0000AFF8h + .dword 0000AFF9h + .dword 0000AFFAh + .dword 0000AFFBh + .dword 0000AFFCh + .dword 0000AFFDh + .dword 0000AFFEh + .dword 0000AFFFh + .dword 0000B000h + .dword 0000B001h + .dword 0000B002h + .dword 0000B003h + .dword 0000B004h + .dword 0000B005h + .dword 0000B006h + .dword 0000B007h + .dword 0000B008h + .dword 0000B009h + .dword 0000B00Ah + .dword 0000B00Bh + .dword 0000B00Ch + .dword 0000B00Dh + .dword 0000B00Eh + .dword 0000B00Fh + .dword 0000FFE1h + .dword 0000FFE2h + .dword 0000FFE3h + .dword 0000FFE4h + .dword 0000FFE5h + .dword 0000FFE6h + .dword 0000FFE7h + .dword 0000FFE8h + .dword 0000FFE9h + .dword 0000FFEAh + .dword 0000FFEBh + .dword 0000FFECh + .dword 0000FFEDh + .dword 0000FFEEh + .dword 0000FFEFh + .dword 0000FFF0h + .dword 0000FFF1h + .dword 0000FFF2h + .dword 0000FFF3h + .dword 0000FFF4h + .dword 0000FFF5h + .dword 0000FFF6h + .dword 0000FFF7h + .dword 0000FFF8h + .dword 0000FFF9h + .dword 0000FFFAh + .dword 0000FFFBh + .dword 0000FFFCh + .dword 0000FFFDh + .dword 0000FFFEh + .dword 0000FFFFh + .dword 00010000h + .dword 00010001h + .dword 00010002h + .dword 00010003h + .dword 00010004h + .dword 00010005h + .dword 00010006h + .dword 00010007h + .dword 00010008h + .dword 00010009h + .dword 0001000Ah + .dword 0001000Bh + .dword 0001000Ch + .dword 0001000Dh + .dword 0001000Eh + .dword 0001000Fh + .dword 7FFFFFF0h + .dword 7FFFFFF1h + .dword 7FFFFFF2h + .dword 7FFFFFF3h + .dword 7FFFFFF4h + .dword 7FFFFFF5h + .dword 7FFFFFF6h + .dword 7FFFFFF7h + .dword 7FFFFFF8h + .dword 7FFFFFF9h + .dword 7FFFFFFAh + .dword 7FFFFFFBh + .dword 7FFFFFFCh + .dword 7FFFFFFDh + .dword 7FFFFFFEh + .dword 7FFFFFFFh + .dword 80000000h + .dword 80000001h + .dword 80000002h + .dword 80000003h + .dword 80000004h + .dword 80000005h + .dword 80000006h + .dword 80000007h + .dword 80000008h + .dword 80000009h + .dword 8000000Ah + .dword 8000000Bh + .dword 8000000Ch + .dword 8000000Dh + .dword 8000000Eh + .dword 8000000Fh + .dword 9FFFFFF0h + .dword 9FFFFFF1h + .dword 9FFFFFF2h + .dword 9FFFFFF3h + .dword 9FFFFFF4h + .dword 9FFFFFF5h + .dword 9FFFFFF6h + .dword 9FFFFFF7h + .dword 9FFFFFF8h + .dword 9FFFFFF9h + .dword 9FFFFFFAh + .dword 9FFFFFFBh + .dword 9FFFFFFCh + .dword 9FFFFFFDh + .dword 9FFFFFFEh + .dword 9FFFFFFFh + .dword 0A0000000h + .dword 0A0000001h + .dword 0A0000002h + .dword 0A0000003h + .dword 0A0000004h + .dword 0A0000005h + .dword 0A0000006h + .dword 0A0000007h + .dword 0A0000008h + .dword 0A0000009h + .dword 0A000000Ah + .dword 0A000000Bh + .dword 0A000000Ch + .dword 0A000000Dh + .dword 0A000000Eh + .dword 0A000000Fh + .dword 0FFFFFFF0h + .dword 0FFFFFFF1h + .dword 0FFFFFFF2h + .dword 0FFFFFFF3h + .dword 0FFFFFFF4h + .dword 0FFFFFFF5h + .dword 0FFFFFFF6h + .dword 0FFFFFFF7h + .dword 0FFFFFFF8h + .dword 0FFFFFFF9h + .dword 0FFFFFFFAh + .dword 0FFFFFFFBh + .dword 0FFFFFFFCh + .dword 0FFFFFFFDh + .dword 0FFFFFFFEh + .dword 0FFFFFFFFh + + ; alternative hex values, always leading zero + .dword 00h + .dword 01h + .dword 02h + .dword 03h + .dword 04h + .dword 05h + .dword 06h + .dword 07h + .dword 08h + .dword 09h + .dword 0ah + .dword 0bh + .dword 0ch + .dword 0dh + .dword 0eh + .dword 0fh + .dword 010h + .dword 011h + .dword 012h + .dword 013h + .dword 070h + .dword 071h + .dword 072h + .dword 073h + .dword 074h + .dword 075h + .dword 076h + .dword 077h + .dword 078h + .dword 079h + .dword 07ah + .dword 07bh + .dword 07ch + .dword 07dh + .dword 07eh + .dword 07fh + .dword 080h + .dword 081h + .dword 082h + .dword 083h + .dword 084h + .dword 085h + .dword 086h + .dword 0f0h + .dword 0f1h + .dword 0f2h + .dword 0f3h + .dword 0f4h + .dword 0f5h + .dword 0f6h + .dword 0f7h + .dword 0f8h + .dword 0f9h + .dword 0fah + .dword 0fbh + .dword 0fch + .dword 0fdh + .dword 0feh + .dword 0ffh + .dword 0100h + .dword 0101h + .dword 0102h + .dword 0103h + .dword 0fd2h + .dword 0fd3h + .dword 0fd4h + .dword 0fd5h + .dword 0fd6h + .dword 0fd7h + .dword 0fd8h + .dword 0fd9h + .dword 0fdah + .dword 0fdbh + .dword 0fdch + .dword 0fddh + .dword 0fdeh + .dword 0fdfh + .dword 0fe0h + .dword 0fe1h + .dword 0fe2h + .dword 0fe3h + .dword 0fe4h + .dword 0fe5h + .dword 0fe6h + .dword 0fe7h + .dword 0fe8h + .dword 0fe9h + .dword 0feah + .dword 0febh + .dword 0fech + .dword 0fedh + .dword 0feeh + .dword 0fefh + .dword 0ff0h + .dword 0ff1h + .dword 0ff2h + .dword 0ff3h + .dword 0ff4h + .dword 0ff5h + .dword 0ff6h + .dword 0ff7h + .dword 0ff8h + .dword 0ff9h + .dword 0ffah + .dword 0ffbh + .dword 0ffch + .dword 0ffdh + .dword 0ffeh + .dword 0fffh + .dword 01000h + .dword 01001h + .dword 01002h + .dword 01003h + .dword 01004h + .dword 01005h + .dword 01006h + .dword 01007h + .dword 01008h + .dword 07ff0h + .dword 07ff1h + .dword 07ff2h + .dword 07ff3h + .dword 07ff4h + .dword 07ff5h + .dword 07ff6h + .dword 07ff7h + .dword 07ff8h + .dword 07ff9h + .dword 07ffah + .dword 07ffbh + .dword 07ffch + .dword 07ffdh + .dword 07ffeh + .dword 07fffh + .dword 08000h + .dword 08001h + .dword 08002h + .dword 08003h + .dword 08004h + .dword 08005h + .dword 08006h + .dword 08007h + .dword 08008h + .dword 08009h + .dword 0800ah + .dword 0800bh + .dword 09fe1h + .dword 09fe2h + .dword 09fe3h + .dword 09fe4h + .dword 09fe5h + .dword 09fe6h + .dword 09fe7h + .dword 09fe8h + .dword 09fe9h + .dword 09feah + .dword 09febh + .dword 09fech + .dword 09fedh + .dword 09feeh + .dword 09fefh + .dword 09ff0h + .dword 09ff1h + .dword 09ff2h + .dword 09ff3h + .dword 09ff4h + .dword 09ff5h + .dword 09ff6h + .dword 09ff7h + .dword 09ff8h + .dword 09ff9h + .dword 09ffah + .dword 09ffbh + .dword 09ffch + .dword 09ffdh + .dword 09ffeh + .dword 09fffh + .dword 0a000h + .dword 0a001h + .dword 0a002h + .dword 0a003h + .dword 0a004h + .dword 0a005h + .dword 0a006h + .dword 0a007h + .dword 0a008h + .dword 0a009h + .dword 0a00ah + .dword 0a00bh + .dword 0a00ch + .dword 0a00dh + .dword 0a00eh + .dword 0a00fh + .dword 0afe1h + .dword 0afe2h + .dword 0afe3h + .dword 0afe4h + .dword 0afe5h + .dword 0afe6h + .dword 0afe7h + .dword 0afe8h + .dword 0afe9h + .dword 0afeah + .dword 0afebh + .dword 0afech + .dword 0afedh + .dword 0afeeh + .dword 0afefh + .dword 0aff0h + .dword 0aff1h + .dword 0aff2h + .dword 0aff3h + .dword 0aff4h + .dword 0aff5h + .dword 0aff6h + .dword 0aff7h + .dword 0aff8h + .dword 0aff9h + .dword 0affah + .dword 0affbh + .dword 0affch + .dword 0affdh + .dword 0affeh + .dword 0afffh + .dword 0b000h + .dword 0b001h + .dword 0b002h + .dword 0b003h + .dword 0b004h + .dword 0b005h + .dword 0b006h + .dword 0b007h + .dword 0b008h + .dword 0b009h + .dword 0b00ah + .dword 0b00bh + .dword 0b00ch + .dword 0b00dh + .dword 0b00eh + .dword 0b00fh + .dword 0ffe1h + .dword 0ffe2h + .dword 0ffe3h + .dword 0ffe4h + .dword 0ffe5h + .dword 0ffe6h + .dword 0ffe7h + .dword 0ffe8h + .dword 0ffe9h + .dword 0ffeah + .dword 0ffebh + .dword 0ffech + .dword 0ffedh + .dword 0ffeeh + .dword 0ffefh + .dword 0fff0h + .dword 0fff1h + .dword 0fff2h + .dword 0fff3h + .dword 0fff4h + .dword 0fff5h + .dword 0fff6h + .dword 0fff7h + .dword 0fff8h + .dword 0fff9h + .dword 0fffah + .dword 0fffbh + .dword 0fffch + .dword 0fffdh + .dword 0fffeh + .dword 0ffffh + .dword 010000h + .dword 010001h + .dword 010002h + .dword 010003h + .dword 010004h + .dword 010005h + .dword 010006h + .dword 010007h + .dword 010008h + .dword 010009h + .dword 01000ah + .dword 01000bh + .dword 01000ch + .dword 01000dh + .dword 01000eh + .dword 01000fh + .dword 07ffffff0h + .dword 07ffffff1h + .dword 07ffffff2h + .dword 07ffffff3h + .dword 07ffffff4h + .dword 07ffffff5h + .dword 07ffffff6h + .dword 07ffffff7h + .dword 07ffffff8h + .dword 07ffffff9h + .dword 07ffffffah + .dword 07ffffffbh + .dword 07ffffffch + .dword 07ffffffdh + .dword 07ffffffeh + .dword 07fffffffh + .dword 080000000h + .dword 080000001h + .dword 080000002h + .dword 080000003h + .dword 080000004h + .dword 080000005h + .dword 080000006h + .dword 080000007h + .dword 080000008h + .dword 080000009h + .dword 08000000ah + .dword 08000000bh + .dword 08000000ch + .dword 08000000dh + .dword 08000000eh + .dword 08000000fh + .dword 09ffffff0h + .dword 09ffffff1h + .dword 09ffffff2h + .dword 09ffffff3h + .dword 09ffffff4h + .dword 09ffffff5h + .dword 09ffffff6h + .dword 09ffffff7h + .dword 09ffffff8h + .dword 09ffffff9h + .dword 09ffffffah + .dword 09ffffffbh + .dword 09ffffffch + .dword 09ffffffdh + .dword 09ffffffeh + .dword 09fffffffh + .dword 0a0000000h + .dword 0a0000001h + .dword 0a0000002h + .dword 0a0000003h + .dword 0a0000004h + .dword 0a0000005h + .dword 0a0000006h + .dword 0a0000007h + .dword 0a0000008h + .dword 0a0000009h + .dword 0a000000ah + .dword 0a000000bh + .dword 0a000000ch + .dword 0a000000dh + .dword 0a000000eh + .dword 0a000000fh + .dword 0fffffff0h + .dword 0fffffff1h + .dword 0fffffff2h + .dword 0fffffff3h + .dword 0fffffff4h + .dword 0fffffff5h + .dword 0fffffff6h + .dword 0fffffff7h + .dword 0fffffff8h + .dword 0fffffff9h + .dword 0fffffffah + .dword 0fffffffbh + .dword 0fffffffch + .dword 0fffffffdh + .dword 0fffffffeh + .dword 0ffffffffh + + ; binary values, variable length + .dword %0 + .dword %01 + .dword %010 + .dword %011 + .dword %0100 + .dword %0101 + .dword %0110 + .dword %0111 + .dword %01000 + .dword %01001 + .dword %01010 + .dword %01011 + .dword %01100 + .dword %01101 + .dword %01110 + .dword %01111 + .dword %010000 + .dword %010001 + .dword %010010 + .dword %010011 + .dword %01110000 + .dword %01110001 + .dword %01110010 + .dword %01110011 + .dword %01110100 + .dword %01110101 + .dword %01110110 + .dword %01110111 + .dword %01111000 + .dword %01111001 + .dword %01111010 + .dword %01111011 + .dword %01111100 + .dword %01111101 + .dword %01111110 + .dword %01111111 + .dword %010000000 + .dword %010000001 + .dword %010000010 + .dword %010000011 + .dword %010000100 + .dword %010000101 + .dword %010000110 + .dword %011110000 + .dword %011110001 + .dword %011110010 + .dword %011110011 + .dword %011110100 + .dword %011110101 + .dword %011110110 + .dword %011110111 + .dword %011111000 + .dword %011111001 + .dword %011111010 + .dword %011111011 + .dword %011111100 + .dword %011111101 + .dword %011111110 + .dword %011111111 + .dword %0100000000 + .dword %0100000001 + .dword %0100000010 + .dword %0100000011 + .dword %0111111010010 + .dword %0111111010011 + .dword %0111111010100 + .dword %0111111010101 + .dword %0111111010110 + .dword %0111111010111 + .dword %0111111011000 + .dword %0111111011001 + .dword %0111111011010 + .dword %0111111011011 + .dword %0111111011100 + .dword %0111111011101 + .dword %0111111011110 + .dword %0111111011111 + .dword %0111111100000 + .dword %0111111100001 + .dword %0111111100010 + .dword %0111111100011 + .dword %0111111100100 + .dword %0111111100101 + .dword %0111111100110 + .dword %0111111100111 + .dword %0111111101000 + .dword %0111111101001 + .dword %0111111101010 + .dword %0111111101011 + .dword %0111111101100 + .dword %0111111101101 + .dword %0111111101110 + .dword %0111111101111 + .dword %0111111110000 + .dword %0111111110001 + .dword %0111111110010 + .dword %0111111110011 + .dword %0111111110100 + .dword %0111111110101 + .dword %0111111110110 + .dword %0111111110111 + .dword %0111111111000 + .dword %0111111111001 + .dword %0111111111010 + .dword %0111111111011 + .dword %0111111111100 + .dword %0111111111101 + .dword %0111111111110 + .dword %0111111111111 + .dword %01000000000000 + .dword %01000000000001 + .dword %01000000000010 + .dword %01000000000011 + .dword %01000000000100 + .dword %01000000000101 + .dword %01000000000110 + .dword %01000000000111 + .dword %01000000001000 + .dword %0111111111110000 + .dword %0111111111110001 + .dword %0111111111110010 + .dword %0111111111110011 + .dword %0111111111110100 + .dword %0111111111110101 + .dword %0111111111110110 + .dword %0111111111110111 + .dword %0111111111111000 + .dword %0111111111111001 + .dword %0111111111111010 + .dword %0111111111111011 + .dword %0111111111111100 + .dword %0111111111111101 + .dword %0111111111111110 + .dword %0111111111111111 + .dword %01000000000000000 + .dword %01000000000000001 + .dword %01000000000000010 + .dword %01000000000000011 + .dword %01000000000000100 + .dword %01000000000000101 + .dword %01000000000000110 + .dword %01000000000000111 + .dword %01000000000001000 + .dword %01000000000001001 + .dword %01000000000001010 + .dword %01000000000001011 + .dword %01001111111100001 + .dword %01001111111100010 + .dword %01001111111100011 + .dword %01001111111100100 + .dword %01001111111100101 + .dword %01001111111100110 + .dword %01001111111100111 + .dword %01001111111101000 + .dword %01001111111101001 + .dword %01001111111101010 + .dword %01001111111101011 + .dword %01001111111101100 + .dword %01001111111101101 + .dword %01001111111101110 + .dword %01001111111101111 + .dword %01001111111110000 + .dword %01001111111110001 + .dword %01001111111110010 + .dword %01001111111110011 + .dword %01001111111110100 + .dword %01001111111110101 + .dword %01001111111110110 + .dword %01001111111110111 + .dword %01001111111111000 + .dword %01001111111111001 + .dword %01001111111111010 + .dword %01001111111111011 + .dword %01001111111111100 + .dword %01001111111111101 + .dword %01001111111111110 + .dword %01001111111111111 + .dword %01010000000000000 + .dword %01010000000000001 + .dword %01010000000000010 + .dword %01010000000000011 + .dword %01010000000000100 + .dword %01010000000000101 + .dword %01010000000000110 + .dword %01010000000000111 + .dword %01010000000001000 + .dword %01010000000001001 + .dword %01010000000001010 + .dword %01010000000001011 + .dword %01010000000001100 + .dword %01010000000001101 + .dword %01010000000001110 + .dword %01010000000001111 + .dword %01010111111100001 + .dword %01010111111100010 + .dword %01010111111100011 + .dword %01010111111100100 + .dword %01010111111100101 + .dword %01010111111100110 + .dword %01010111111100111 + .dword %01010111111101000 + .dword %01010111111101001 + .dword %01010111111101010 + .dword %01010111111101011 + .dword %01010111111101100 + .dword %01010111111101101 + .dword %01010111111101110 + .dword %01010111111101111 + .dword %01010111111110000 + .dword %01010111111110001 + .dword %01010111111110010 + .dword %01010111111110011 + .dword %01010111111110100 + .dword %01010111111110101 + .dword %01010111111110110 + .dword %01010111111110111 + .dword %01010111111111000 + .dword %01010111111111001 + .dword %01010111111111010 + .dword %01010111111111011 + .dword %01010111111111100 + .dword %01010111111111101 + .dword %01010111111111110 + .dword %01010111111111111 + .dword %01011000000000000 + .dword %01011000000000001 + .dword %01011000000000010 + .dword %01011000000000011 + .dword %01011000000000100 + .dword %01011000000000101 + .dword %01011000000000110 + .dword %01011000000000111 + .dword %01011000000001000 + .dword %01011000000001001 + .dword %01011000000001010 + .dword %01011000000001011 + .dword %01011000000001100 + .dword %01011000000001101 + .dword %01011000000001110 + .dword %01011000000001111 + .dword %01111111111100001 + .dword %01111111111100010 + .dword %01111111111100011 + .dword %01111111111100100 + .dword %01111111111100101 + .dword %01111111111100110 + .dword %01111111111100111 + .dword %01111111111101000 + .dword %01111111111101001 + .dword %01111111111101010 + .dword %01111111111101011 + .dword %01111111111101100 + .dword %01111111111101101 + .dword %01111111111101110 + .dword %01111111111101111 + .dword %01111111111110000 + .dword %01111111111110001 + .dword %01111111111110010 + .dword %01111111111110011 + .dword %01111111111110100 + .dword %01111111111110101 + .dword %01111111111110110 + .dword %01111111111110111 + .dword %01111111111111000 + .dword %01111111111111001 + .dword %01111111111111010 + .dword %01111111111111011 + .dword %01111111111111100 + .dword %01111111111111101 + .dword %01111111111111110 + .dword %01111111111111111 + .dword %010000000000000000 + .dword %010000000000000001 + .dword %010000000000000010 + .dword %010000000000000011 + .dword %010000000000000100 + .dword %010000000000000101 + .dword %010000000000000110 + .dword %010000000000000111 + .dword %010000000000001000 + .dword %010000000000001001 + .dword %010000000000001010 + .dword %010000000000001011 + .dword %010000000000001100 + .dword %010000000000001101 + .dword %010000000000001110 + .dword %010000000000001111 + .dword %1111111111111111111111111110000 + .dword %1111111111111111111111111110001 + .dword %1111111111111111111111111110010 + .dword %1111111111111111111111111110011 + .dword %1111111111111111111111111110100 + .dword %1111111111111111111111111110101 + .dword %1111111111111111111111111110110 + .dword %1111111111111111111111111110111 + .dword %1111111111111111111111111111000 + .dword %1111111111111111111111111111001 + .dword %1111111111111111111111111111010 + .dword %1111111111111111111111111111011 + .dword %1111111111111111111111111111100 + .dword %1111111111111111111111111111101 + .dword %1111111111111111111111111111110 + .dword %1111111111111111111111111111111 + .dword %10000000000000000000000000000000 + .dword %10000000000000000000000000000001 + .dword %10000000000000000000000000000010 + .dword %10000000000000000000000000000011 + .dword %10000000000000000000000000000100 + .dword %10000000000000000000000000000101 + .dword %10000000000000000000000000000110 + .dword %10000000000000000000000000000111 + .dword %10000000000000000000000000001000 + .dword %10000000000000000000000000001001 + .dword %10000000000000000000000000001010 + .dword %10000000000000000000000000001011 + .dword %10000000000000000000000000001100 + .dword %10000000000000000000000000001101 + .dword %10000000000000000000000000001110 + .dword %10000000000000000000000000001111 + .dword %10011111111111111111111111110000 + .dword %10011111111111111111111111110001 + .dword %10011111111111111111111111110010 + .dword %10011111111111111111111111110011 + .dword %10011111111111111111111111110100 + .dword %10011111111111111111111111110101 + .dword %10011111111111111111111111110110 + .dword %10011111111111111111111111110111 + .dword %10011111111111111111111111111000 + .dword %10011111111111111111111111111001 + .dword %10011111111111111111111111111010 + .dword %10011111111111111111111111111011 + .dword %10011111111111111111111111111100 + .dword %10011111111111111111111111111101 + .dword %10011111111111111111111111111110 + .dword %10011111111111111111111111111111 + .dword %10100000000000000000000000000000 + .dword %10100000000000000000000000000001 + .dword %10100000000000000000000000000010 + .dword %10100000000000000000000000000011 + .dword %10100000000000000000000000000100 + .dword %10100000000000000000000000000101 + .dword %10100000000000000000000000000110 + .dword %10100000000000000000000000000111 + .dword %10100000000000000000000000001000 + .dword %10100000000000000000000000001001 + .dword %10100000000000000000000000001010 + .dword %10100000000000000000000000001011 + .dword %10100000000000000000000000001100 + .dword %10100000000000000000000000001101 + .dword %10100000000000000000000000001110 + .dword %10100000000000000000000000001111 + .dword %11111111111111111111111111110000 + .dword %11111111111111111111111111110001 + .dword %11111111111111111111111111110010 + .dword %11111111111111111111111111110011 + .dword %11111111111111111111111111110100 + .dword %11111111111111111111111111110101 + .dword %11111111111111111111111111110110 + .dword %11111111111111111111111111110111 + .dword %11111111111111111111111111111000 + .dword %11111111111111111111111111111001 + .dword %11111111111111111111111111111010 + .dword %11111111111111111111111111111011 + .dword %11111111111111111111111111111100 + .dword %11111111111111111111111111111101 + .dword %11111111111111111111111111111110 + .dword %11111111111111111111111111111111 + + ; binary values, full length + .dword %00000000000000000000000000000000 + .dword %00000000000000000000000000000001 + .dword %00000000000000000000000000000010 + .dword %00000000000000000000000000000011 + .dword %00000000000000000000000000000100 + .dword %00000000000000000000000000000101 + .dword %00000000000000000000000000000110 + .dword %00000000000000000000000000000111 + .dword %00000000000000000000000000001000 + .dword %00000000000000000000000000001001 + .dword %00000000000000000000000000001010 + .dword %00000000000000000000000000001011 + .dword %00000000000000000000000000001100 + .dword %00000000000000000000000000001101 + .dword %00000000000000000000000000001110 + .dword %00000000000000000000000000001111 + .dword %00000000000000000000000000010000 + .dword %00000000000000000000000000010001 + .dword %00000000000000000000000000010010 + .dword %00000000000000000000000000010011 + .dword %00000000000000000000000001110000 + .dword %00000000000000000000000001110001 + .dword %00000000000000000000000001110010 + .dword %00000000000000000000000001110011 + .dword %00000000000000000000000001110100 + .dword %00000000000000000000000001110101 + .dword %00000000000000000000000001110110 + .dword %00000000000000000000000001110111 + .dword %00000000000000000000000001111000 + .dword %00000000000000000000000001111001 + .dword %00000000000000000000000001111010 + .dword %00000000000000000000000001111011 + .dword %00000000000000000000000001111100 + .dword %00000000000000000000000001111101 + .dword %00000000000000000000000001111110 + .dword %00000000000000000000000001111111 + .dword %00000000000000000000000010000000 + .dword %00000000000000000000000010000001 + .dword %00000000000000000000000010000010 + .dword %00000000000000000000000010000011 + .dword %00000000000000000000000010000100 + .dword %00000000000000000000000010000101 + .dword %00000000000000000000000010000110 + .dword %00000000000000000000000011110000 + .dword %00000000000000000000000011110001 + .dword %00000000000000000000000011110010 + .dword %00000000000000000000000011110011 + .dword %00000000000000000000000011110100 + .dword %00000000000000000000000011110101 + .dword %00000000000000000000000011110110 + .dword %00000000000000000000000011110111 + .dword %00000000000000000000000011111000 + .dword %00000000000000000000000011111001 + .dword %00000000000000000000000011111010 + .dword %00000000000000000000000011111011 + .dword %00000000000000000000000011111100 + .dword %00000000000000000000000011111101 + .dword %00000000000000000000000011111110 + .dword %00000000000000000000000011111111 + .dword %00000000000000000000000100000000 + .dword %00000000000000000000000100000001 + .dword %00000000000000000000000100000010 + .dword %00000000000000000000000100000011 + .dword %00000000000000000000111111010010 + .dword %00000000000000000000111111010011 + .dword %00000000000000000000111111010100 + .dword %00000000000000000000111111010101 + .dword %00000000000000000000111111010110 + .dword %00000000000000000000111111010111 + .dword %00000000000000000000111111011000 + .dword %00000000000000000000111111011001 + .dword %00000000000000000000111111011010 + .dword %00000000000000000000111111011011 + .dword %00000000000000000000111111011100 + .dword %00000000000000000000111111011101 + .dword %00000000000000000000111111011110 + .dword %00000000000000000000111111011111 + .dword %00000000000000000000111111100000 + .dword %00000000000000000000111111100001 + .dword %00000000000000000000111111100010 + .dword %00000000000000000000111111100011 + .dword %00000000000000000000111111100100 + .dword %00000000000000000000111111100101 + .dword %00000000000000000000111111100110 + .dword %00000000000000000000111111100111 + .dword %00000000000000000000111111101000 + .dword %00000000000000000000111111101001 + .dword %00000000000000000000111111101010 + .dword %00000000000000000000111111101011 + .dword %00000000000000000000111111101100 + .dword %00000000000000000000111111101101 + .dword %00000000000000000000111111101110 + .dword %00000000000000000000111111101111 + .dword %00000000000000000000111111110000 + .dword %00000000000000000000111111110001 + .dword %00000000000000000000111111110010 + .dword %00000000000000000000111111110011 + .dword %00000000000000000000111111110100 + .dword %00000000000000000000111111110101 + .dword %00000000000000000000111111110110 + .dword %00000000000000000000111111110111 + .dword %00000000000000000000111111111000 + .dword %00000000000000000000111111111001 + .dword %00000000000000000000111111111010 + .dword %00000000000000000000111111111011 + .dword %00000000000000000000111111111100 + .dword %00000000000000000000111111111101 + .dword %00000000000000000000111111111110 + .dword %00000000000000000000111111111111 + .dword %00000000000000000001000000000000 + .dword %00000000000000000001000000000001 + .dword %00000000000000000001000000000010 + .dword %00000000000000000001000000000011 + .dword %00000000000000000001000000000100 + .dword %00000000000000000001000000000101 + .dword %00000000000000000001000000000110 + .dword %00000000000000000001000000000111 + .dword %00000000000000000001000000001000 + .dword %00000000000000000111111111110000 + .dword %00000000000000000111111111110001 + .dword %00000000000000000111111111110010 + .dword %00000000000000000111111111110011 + .dword %00000000000000000111111111110100 + .dword %00000000000000000111111111110101 + .dword %00000000000000000111111111110110 + .dword %00000000000000000111111111110111 + .dword %00000000000000000111111111111000 + .dword %00000000000000000111111111111001 + .dword %00000000000000000111111111111010 + .dword %00000000000000000111111111111011 + .dword %00000000000000000111111111111100 + .dword %00000000000000000111111111111101 + .dword %00000000000000000111111111111110 + .dword %00000000000000000111111111111111 + .dword %00000000000000001000000000000000 + .dword %00000000000000001000000000000001 + .dword %00000000000000001000000000000010 + .dword %00000000000000001000000000000011 + .dword %00000000000000001000000000000100 + .dword %00000000000000001000000000000101 + .dword %00000000000000001000000000000110 + .dword %00000000000000001000000000000111 + .dword %00000000000000001000000000001000 + .dword %00000000000000001000000000001001 + .dword %00000000000000001000000000001010 + .dword %00000000000000001000000000001011 + .dword %00000000000000001001111111100001 + .dword %00000000000000001001111111100010 + .dword %00000000000000001001111111100011 + .dword %00000000000000001001111111100100 + .dword %00000000000000001001111111100101 + .dword %00000000000000001001111111100110 + .dword %00000000000000001001111111100111 + .dword %00000000000000001001111111101000 + .dword %00000000000000001001111111101001 + .dword %00000000000000001001111111101010 + .dword %00000000000000001001111111101011 + .dword %00000000000000001001111111101100 + .dword %00000000000000001001111111101101 + .dword %00000000000000001001111111101110 + .dword %00000000000000001001111111101111 + .dword %00000000000000001001111111110000 + .dword %00000000000000001001111111110001 + .dword %00000000000000001001111111110010 + .dword %00000000000000001001111111110011 + .dword %00000000000000001001111111110100 + .dword %00000000000000001001111111110101 + .dword %00000000000000001001111111110110 + .dword %00000000000000001001111111110111 + .dword %00000000000000001001111111111000 + .dword %00000000000000001001111111111001 + .dword %00000000000000001001111111111010 + .dword %00000000000000001001111111111011 + .dword %00000000000000001001111111111100 + .dword %00000000000000001001111111111101 + .dword %00000000000000001001111111111110 + .dword %00000000000000001001111111111111 + .dword %00000000000000001010000000000000 + .dword %00000000000000001010000000000001 + .dword %00000000000000001010000000000010 + .dword %00000000000000001010000000000011 + .dword %00000000000000001010000000000100 + .dword %00000000000000001010000000000101 + .dword %00000000000000001010000000000110 + .dword %00000000000000001010000000000111 + .dword %00000000000000001010000000001000 + .dword %00000000000000001010000000001001 + .dword %00000000000000001010000000001010 + .dword %00000000000000001010000000001011 + .dword %00000000000000001010000000001100 + .dword %00000000000000001010000000001101 + .dword %00000000000000001010000000001110 + .dword %00000000000000001010000000001111 + .dword %00000000000000001010111111100001 + .dword %00000000000000001010111111100010 + .dword %00000000000000001010111111100011 + .dword %00000000000000001010111111100100 + .dword %00000000000000001010111111100101 + .dword %00000000000000001010111111100110 + .dword %00000000000000001010111111100111 + .dword %00000000000000001010111111101000 + .dword %00000000000000001010111111101001 + .dword %00000000000000001010111111101010 + .dword %00000000000000001010111111101011 + .dword %00000000000000001010111111101100 + .dword %00000000000000001010111111101101 + .dword %00000000000000001010111111101110 + .dword %00000000000000001010111111101111 + .dword %00000000000000001010111111110000 + .dword %00000000000000001010111111110001 + .dword %00000000000000001010111111110010 + .dword %00000000000000001010111111110011 + .dword %00000000000000001010111111110100 + .dword %00000000000000001010111111110101 + .dword %00000000000000001010111111110110 + .dword %00000000000000001010111111110111 + .dword %00000000000000001010111111111000 + .dword %00000000000000001010111111111001 + .dword %00000000000000001010111111111010 + .dword %00000000000000001010111111111011 + .dword %00000000000000001010111111111100 + .dword %00000000000000001010111111111101 + .dword %00000000000000001010111111111110 + .dword %00000000000000001010111111111111 + .dword %00000000000000001011000000000000 + .dword %00000000000000001011000000000001 + .dword %00000000000000001011000000000010 + .dword %00000000000000001011000000000011 + .dword %00000000000000001011000000000100 + .dword %00000000000000001011000000000101 + .dword %00000000000000001011000000000110 + .dword %00000000000000001011000000000111 + .dword %00000000000000001011000000001000 + .dword %00000000000000001011000000001001 + .dword %00000000000000001011000000001010 + .dword %00000000000000001011000000001011 + .dword %00000000000000001011000000001100 + .dword %00000000000000001011000000001101 + .dword %00000000000000001011000000001110 + .dword %00000000000000001011000000001111 + .dword %00000000000000001111111111100001 + .dword %00000000000000001111111111100010 + .dword %00000000000000001111111111100011 + .dword %00000000000000001111111111100100 + .dword %00000000000000001111111111100101 + .dword %00000000000000001111111111100110 + .dword %00000000000000001111111111100111 + .dword %00000000000000001111111111101000 + .dword %00000000000000001111111111101001 + .dword %00000000000000001111111111101010 + .dword %00000000000000001111111111101011 + .dword %00000000000000001111111111101100 + .dword %00000000000000001111111111101101 + .dword %00000000000000001111111111101110 + .dword %00000000000000001111111111101111 + .dword %00000000000000001111111111110000 + .dword %00000000000000001111111111110001 + .dword %00000000000000001111111111110010 + .dword %00000000000000001111111111110011 + .dword %00000000000000001111111111110100 + .dword %00000000000000001111111111110101 + .dword %00000000000000001111111111110110 + .dword %00000000000000001111111111110111 + .dword %00000000000000001111111111111000 + .dword %00000000000000001111111111111001 + .dword %00000000000000001111111111111010 + .dword %00000000000000001111111111111011 + .dword %00000000000000001111111111111100 + .dword %00000000000000001111111111111101 + .dword %00000000000000001111111111111110 + .dword %00000000000000001111111111111111 + .dword %00000000000000010000000000000000 + .dword %00000000000000010000000000000001 + .dword %00000000000000010000000000000010 + .dword %00000000000000010000000000000011 + .dword %00000000000000010000000000000100 + .dword %00000000000000010000000000000101 + .dword %00000000000000010000000000000110 + .dword %00000000000000010000000000000111 + .dword %00000000000000010000000000001000 + .dword %00000000000000010000000000001001 + .dword %00000000000000010000000000001010 + .dword %00000000000000010000000000001011 + .dword %00000000000000010000000000001100 + .dword %00000000000000010000000000001101 + .dword %00000000000000010000000000001110 + .dword %00000000000000010000000000001111 + .dword %01111111111111111111111111110000 + .dword %01111111111111111111111111110001 + .dword %01111111111111111111111111110010 + .dword %01111111111111111111111111110011 + .dword %01111111111111111111111111110100 + .dword %01111111111111111111111111110101 + .dword %01111111111111111111111111110110 + .dword %01111111111111111111111111110111 + .dword %01111111111111111111111111111000 + .dword %01111111111111111111111111111001 + .dword %01111111111111111111111111111010 + .dword %01111111111111111111111111111011 + .dword %01111111111111111111111111111100 + .dword %01111111111111111111111111111101 + .dword %01111111111111111111111111111110 + .dword %01111111111111111111111111111111 + .dword %10000000000000000000000000000000 + .dword %10000000000000000000000000000001 + .dword %10000000000000000000000000000010 + .dword %10000000000000000000000000000011 + .dword %10000000000000000000000000000100 + .dword %10000000000000000000000000000101 + .dword %10000000000000000000000000000110 + .dword %10000000000000000000000000000111 + .dword %10000000000000000000000000001000 + .dword %10000000000000000000000000001001 + .dword %10000000000000000000000000001010 + .dword %10000000000000000000000000001011 + .dword %10000000000000000000000000001100 + .dword %10000000000000000000000000001101 + .dword %10000000000000000000000000001110 + .dword %10000000000000000000000000001111 + .dword %10011111111111111111111111110000 + .dword %10011111111111111111111111110001 + .dword %10011111111111111111111111110010 + .dword %10011111111111111111111111110011 + .dword %10011111111111111111111111110100 + .dword %10011111111111111111111111110101 + .dword %10011111111111111111111111110110 + .dword %10011111111111111111111111110111 + .dword %10011111111111111111111111111000 + .dword %10011111111111111111111111111001 + .dword %10011111111111111111111111111010 + .dword %10011111111111111111111111111011 + .dword %10011111111111111111111111111100 + .dword %10011111111111111111111111111101 + .dword %10011111111111111111111111111110 + .dword %10011111111111111111111111111111 + .dword %10100000000000000000000000000000 + .dword %10100000000000000000000000000001 + .dword %10100000000000000000000000000010 + .dword %10100000000000000000000000000011 + .dword %10100000000000000000000000000100 + .dword %10100000000000000000000000000101 + .dword %10100000000000000000000000000110 + .dword %10100000000000000000000000000111 + .dword %10100000000000000000000000001000 + .dword %10100000000000000000000000001001 + .dword %10100000000000000000000000001010 + .dword %10100000000000000000000000001011 + .dword %10100000000000000000000000001100 + .dword %10100000000000000000000000001101 + .dword %10100000000000000000000000001110 + .dword %10100000000000000000000000001111 + .dword %11111111111111111111111111110000 + .dword %11111111111111111111111111110001 + .dword %11111111111111111111111111110010 + .dword %11111111111111111111111111110011 + .dword %11111111111111111111111111110100 + .dword %11111111111111111111111111110101 + .dword %11111111111111111111111111110110 + .dword %11111111111111111111111111110111 + .dword %11111111111111111111111111111000 + .dword %11111111111111111111111111111001 + .dword %11111111111111111111111111111010 + .dword %11111111111111111111111111111011 + .dword %11111111111111111111111111111100 + .dword %11111111111111111111111111111101 + .dword %11111111111111111111111111111110 + .dword %11111111111111111111111111111111 + + ; multiple values on one line, decimal + .dword 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .dword 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .dword 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .dword 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .dword 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + .dword 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 + .dword 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 + .dword 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 + .dword 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 + .dword 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 + .dword 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 + .dword 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 + .dword 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 + .dword 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 + .dword 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 + .dword 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 + .dword 65536,65537,65538,65539,65540,65541,65542,65543,65544,65545,65546,65547,65548,65549,65550,65551 + .dword 2147483647,2147483648,2147483649,2147483650,2147483651,2147483652,2147483653,2147483654,2147483655,2147483656,2147483657,2147483658,2147483659,2147483660,2147483661,2147483662 + .dword 2147483663,2147483664,2147483665,2147483666,2147483667,2147483668,2147483669,2147483670,2147483671,2147483672,2147483673,2147483674,2147483675,2147483676,2147483677,2147483678 + .dword 2684354559,2684354560,2684354561,2684354562,2684354563,2684354564,2684354565,2684354566,2684354567,2684354568,2684354569,2684354570,2684354571,2684354572,2684354573,2684354574 + .dword 2684354575,2684354576,2684354577,2684354578,2684354579,2684354580,2684354581,2684354582,2684354583,2684354584,2684354585,2684354586,2684354587,2684354588,2684354589,2684354590 + .dword 4294967295 + + ; multiple values on one line, hex + .dword $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .dword $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .dword $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .dword $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .dword $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + .dword $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f + .dword $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef + .dword $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff + .dword $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f + .dword $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff + .dword $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f + .dword $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff + .dword $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f + .dword $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff + .dword $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f + .dword $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff + .dword $10000,$10001,$10002,$10003,$10004,$10005,$10006,$10007,$10008,$10009,$1000a,$1000b,$1000c,$1000d,$1000e,$1000f + .dword $7fffffff,$80000000,$80000001,$80000002,$80000003,$80000004,$80000005,$80000006,$80000007,$80000008,$80000009,$8000000a,$8000000b,$8000000c,$8000000d,$8000000e + .dword $8000000f,$80000010,$80000011,$80000012,$80000013,$80000014,$80000015,$80000016,$80000017,$80000018,$80000019,$8000001a,$8000001b,$8000001c,$8000001d,$8000001e + .dword $9fffffff,$a0000000,$a0000001,$a0000002,$a0000003,$a0000004,$a0000005,$a0000006,$a0000007,$a0000008,$a0000009,$a000000a,$a000000b,$a000000c,$a000000d,$a000000e + .dword $a000000f,$a0000010,$a0000011,$a0000012,$a0000013,$a0000014,$a0000015,$a0000016,$a0000017,$a0000018,$a0000019,$a000001a,$a000001b,$a000001c,$a000001d,$a000001e + .dword $ffffffff + + ; multiple values on one line, alternative hex + .dword 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .dword 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .dword 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .dword 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .dword 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + .dword 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh + .dword 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh + .dword 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh + .dword 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh + .dword 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh + .dword 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh + .dword 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh + .dword 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh + .dword 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh + .dword 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh + .dword 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh + .dword 10000h,10001h,10002h,10003h,10004h,10005h,10006h,10007h,10008h,10009h,1000ah,1000bh,1000ch,1000dh,1000eh,1000fh + .dword 7fffffffh,80000000h,80000001h,80000002h,80000003h,80000004h,80000005h,80000006h,80000007h,80000008h,80000009h,8000000ah,8000000bh,8000000ch,8000000dh,8000000eh + .dword 8000000fh,80000010h,80000011h,80000012h,80000013h,80000014h,80000015h,80000016h,80000017h,80000018h,80000019h,8000001ah,8000001bh,8000001ch,8000001dh,8000001eh + .dword 9fffffffh,0a0000000h,0a0000001h,0a0000002h,0a0000003h,0a0000004h,0a0000005h,0a0000006h,0a0000007h,0a0000008h,0a0000009h,0a000000ah,0a000000bh,0a000000ch,0a000000dh,0a000000eh + .dword 0a000000fh,0a0000010h,0a0000011h,0a0000012h,0a0000013h,0a0000014h,0a0000015h,0a0000016h,0a0000017h,0a0000018h,0a0000019h,0a000001ah,0a000001bh,0a000001ch,0a000001dh,0a000001eh + .dword 0ffffffffh + + ; mix some variants + .dword 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/105-faraddr.bin-ref b/test/asm/listing/105-faraddr.bin-ref new file mode 100644 index 0000000000000000000000000000000000000000..85a68c1864468518e53dc105ddda29114c115401 GIT binary patch literal 24543 zcmeI4$8s}I6~%vTNw%ESJ<ge#H(<+>*I)-vK+e!j&hQA`Ygo)Y3ps;x4sw=l`QXo0 ztf=~L;4@XwDwWo%sp)%fpL@;^FfalwXhR1^VGO!34ihj5Q!ouZu;8G88JLAn!l&TV z@EQ0ld=5SjUw|*dm*C6r75FNA4ZaQ@0(=9$3EzTm!*}4jZ~=X|ge$m)8@Po#xQ78e zz#}}t5S~H2`@6<4VrUtDY5A4q*OuQ{erx%i<@c69SpI1FljYBrzgYfi`J3hMmQBl+ zW!ti2*|qFh_ALjNL(7rn*m7bywVYYbEf<!)<<fFxxwhO`ZY_6~d&|J`V0pAWS%#Kp zi(a3Laf~=xj<%!Y7<G&}x{eD^-*f4?@?3jvJhz@Z&%I~hdGI`Xo;*X(vq!Iw$pl6M ztw1}_35*8D0^PuPU?MOX*o<sNwj(={-N;^KKXMQ`j2uOdBPWs5$XVn(auMlAE+bcw z>&Q*yHgXraj|?IYk;lkWWEgplC_=&{MiQ+=JJCsuCdLxo#CT#NF`1Z3OecB?o7k+` zs@bmDsoAaBtJ$wPs5z`TsyVJXsX47Vt2wW^sOi^S)?C$G*WA?H*4)+H*9>YNY94Ez zYKAq>HL9V(G>kN~8rlt=hS7$xhHk@n!$iYm!&Jj`L$AR$Y>F+hEq27N*c1EWKpcuA zaV$>6sW=no;zIPrrMME;;zrzxJ8>@t;z2x$CovSyLa#61%iA}CX<^!!4rUZHhUsF) zF%y_c%oJuC)5BQIrreg?w%m@~uH2s7zTAP_q1=(&vD}H=soa^|x!i?ZU+z-wO72?j zM($SbPVQcAAon2mDEA~clzWzw-W^0kF+$OzXj613Mk&T9x)kFS6BLsaQxww_Jqk;) zsd7u@w#prqyDIlo?yEddd8qP8<*~{Wm8UAtRGzE6P}x^`sq#wYwaOcnw<_;c-m4s_ zd{FtQ@=4`T<+DnugvwBjP_?MqR2`~OsxhiA)i~7z)g;vv)ihO)%2I90Z^>`V@5t}U z@5%4WAIKldAITrfpU9uepUI!gUFXgY~ujOy#Z{_dg@8t*b5Au)lPx3?gXL-FI zAww7;v<PiNhcHSQBXkMlgbBhVVTv$K=n*VoQ*ldiTX9EmS8-2qU-3ZkQ1M9dSn)*h zRPjvlT=7D&uXw3=rFgA)qj;-$r+BY8P<&8)RD4n#Dn2Xf^*9;Q2&qMClRBhP(io{r z8YfMVCP`DIX;P15Nt@D^v@PvOyV9PtFC9pS(vfs5ok*wBnRG5)NPX#2x{|J?8|hZM zlkTN~^dLP-Pts6&*1He6+UIJYt9`Eax!UJypJ)3#+vnLn&-Qt?&$E42a<Y<>m7J{P zWF;pnIa#;Qx_#E|vu>Yt`>fmNEp6V?<}GdB(&jB~-qL1IPWI$vPfqsaWKT}^<YWhC zc3@@)W_Dm^2WEC)X1{&*+h@Oh_S<K_efHbubX87Q<#bg}SLJk7&eG;AZO+o>EN#xx z<}7U{CuDL$CMRTaLMA6<azf_hWKK@z<YZ1x=H&d3a&qQi9u{B`mS7oHU=`M29X8-Y z{~>bP_u%{R1Nb5Q2!0GdfuF+9{ynH#+t4wL8paG=!?<C>Flm@FOdEOzYyO)!wQ<LU zW709@n0E9W_Wdx{rUKJ}UciR8ps2Y-k(f!$Cgu|JiG{>sVkxnlSV^oV))MQ9jr0~E zHP=uy%rwk4%r(q6EHo@OEHx}QtTe1PtTn7RY&37dQgfIBGlQAM%wgs+3z$XB5@s2* zf?36^Vb(Dlm^Z+wIf{Z}hGLdtj$)o-fnt$jiDH>zg<_Rrjbfc*gW?T{YL2R)nxUGd znxmShTA*5_TB2H}TA^B{TBBO0+Ms#^sG1`bgc-stVU93QSRgDCmI%v)6~ZcEjj&GG zAiM!r&5;Vy3~81$N17)skQPZxq-D|yX_d4_S|@Fg-WaWxTgH1OaORegTSjgf{|e#E zE#rexoVjJZ@R{>1Bi}OKAFesyGCmmEoNpN)jBfsayJfu4_+Rk*FRcET-;cv5UNQS0 Tg^$69;Un<#e|~@Q3e5ipRX8Fy literal 0 HcmV?d00001 diff --git a/test/asm/listing/105-faraddr.list-ref b/test/asm/listing/105-faraddr.list-ref new file mode 100644 index 000000000..3b1711681 --- /dev/null +++ b/test/asm/listing/105-faraddr.list-ref @@ -0,0 +1,6921 @@ +Main file : 105-faraddr.s +Current file: 105-faraddr.s + +000000r 1 ; 2022-06-15 Spiro Trikaliotis +000000r 1 +000000r 1 +000000r 1 ; upper case pseudo-op +000000r 1 00 00 00 .FARADDR 0 +000003r 1 01 00 00 .FARADDR 1 +000006r 1 02 00 00 .FARADDR 2 +000009r 1 03 00 00 .FARADDR 3 +00000Cr 1 04 00 00 .FARADDR 4 +00000Fr 1 05 00 00 .FARADDR 5 +000012r 1 06 00 00 .FARADDR 6 +000015r 1 07 00 00 .FARADDR 7 +000018r 1 08 00 00 .FARADDR 8 +00001Br 1 09 00 00 .FARADDR 9 +00001Er 1 0A 00 00 .FARADDR 10 +000021r 1 0B 00 00 .FARADDR 11 +000024r 1 0C 00 00 .FARADDR 12 +000027r 1 0D 00 00 .FARADDR 13 +00002Ar 1 0E 00 00 .FARADDR 14 +00002Dr 1 0F 00 00 .FARADDR 15 +000030r 1 10 00 00 .FARADDR 16 +000033r 1 11 00 00 .FARADDR 17 +000036r 1 12 00 00 .FARADDR 18 +000039r 1 13 00 00 .FARADDR 19 +00003Cr 1 70 00 00 .FARADDR 112 +00003Fr 1 71 00 00 .FARADDR 113 +000042r 1 72 00 00 .FARADDR 114 +000045r 1 73 00 00 .FARADDR 115 +000048r 1 74 00 00 .FARADDR 116 +00004Br 1 75 00 00 .FARADDR 117 +00004Er 1 76 00 00 .FARADDR 118 +000051r 1 77 00 00 .FARADDR 119 +000054r 1 78 00 00 .FARADDR 120 +000057r 1 79 00 00 .FARADDR 121 +00005Ar 1 7A 00 00 .FARADDR 122 +00005Dr 1 7B 00 00 .FARADDR 123 +000060r 1 7C 00 00 .FARADDR 124 +000063r 1 7D 00 00 .FARADDR 125 +000066r 1 7E 00 00 .FARADDR 126 +000069r 1 7F 00 00 .FARADDR 127 +00006Cr 1 80 00 00 .FARADDR 128 +00006Fr 1 81 00 00 .FARADDR 129 +000072r 1 82 00 00 .FARADDR 130 +000075r 1 83 00 00 .FARADDR 131 +000078r 1 84 00 00 .FARADDR 132 +00007Br 1 85 00 00 .FARADDR 133 +00007Er 1 86 00 00 .FARADDR 134 +000081r 1 F0 00 00 .FARADDR 240 +000084r 1 F1 00 00 .FARADDR 241 +000087r 1 F2 00 00 .FARADDR 242 +00008Ar 1 F3 00 00 .FARADDR 243 +00008Dr 1 F4 00 00 .FARADDR 244 +000090r 1 F5 00 00 .FARADDR 245 +000093r 1 F6 00 00 .FARADDR 246 +000096r 1 F7 00 00 .FARADDR 247 +000099r 1 F8 00 00 .FARADDR 248 +00009Cr 1 F9 00 00 .FARADDR 249 +00009Fr 1 FA 00 00 .FARADDR 250 +0000A2r 1 FB 00 00 .FARADDR 251 +0000A5r 1 FC 00 00 .FARADDR 252 +0000A8r 1 FD 00 00 .FARADDR 253 +0000ABr 1 FE 00 00 .FARADDR 254 +0000AEr 1 FF 00 00 .FARADDR 255 +0000B1r 1 00 01 00 .FARADDR 256 +0000B4r 1 01 01 00 .FARADDR 257 +0000B7r 1 02 01 00 .FARADDR 258 +0000BAr 1 03 01 00 .FARADDR 259 +0000BDr 1 D2 0F 00 .FARADDR 4050 +0000C0r 1 D3 0F 00 .FARADDR 4051 +0000C3r 1 D4 0F 00 .FARADDR 4052 +0000C6r 1 D5 0F 00 .FARADDR 4053 +0000C9r 1 D6 0F 00 .FARADDR 4054 +0000CCr 1 D7 0F 00 .FARADDR 4055 +0000CFr 1 D8 0F 00 .FARADDR 4056 +0000D2r 1 D9 0F 00 .FARADDR 4057 +0000D5r 1 DA 0F 00 .FARADDR 4058 +0000D8r 1 DB 0F 00 .FARADDR 4059 +0000DBr 1 DC 0F 00 .FARADDR 4060 +0000DEr 1 DD 0F 00 .FARADDR 4061 +0000E1r 1 DE 0F 00 .FARADDR 4062 +0000E4r 1 DF 0F 00 .FARADDR 4063 +0000E7r 1 E0 0F 00 .FARADDR 4064 +0000EAr 1 E1 0F 00 .FARADDR 4065 +0000EDr 1 E2 0F 00 .FARADDR 4066 +0000F0r 1 E3 0F 00 .FARADDR 4067 +0000F3r 1 E4 0F 00 .FARADDR 4068 +0000F6r 1 E5 0F 00 .FARADDR 4069 +0000F9r 1 E6 0F 00 .FARADDR 4070 +0000FCr 1 E7 0F 00 .FARADDR 4071 +0000FFr 1 E8 0F 00 .FARADDR 4072 +000102r 1 E9 0F 00 .FARADDR 4073 +000105r 1 EA 0F 00 .FARADDR 4074 +000108r 1 EB 0F 00 .FARADDR 4075 +00010Br 1 EC 0F 00 .FARADDR 4076 +00010Er 1 ED 0F 00 .FARADDR 4077 +000111r 1 EE 0F 00 .FARADDR 4078 +000114r 1 EF 0F 00 .FARADDR 4079 +000117r 1 F0 0F 00 .FARADDR 4080 +00011Ar 1 F1 0F 00 .FARADDR 4081 +00011Dr 1 F2 0F 00 .FARADDR 4082 +000120r 1 F3 0F 00 .FARADDR 4083 +000123r 1 F4 0F 00 .FARADDR 4084 +000126r 1 F5 0F 00 .FARADDR 4085 +000129r 1 F6 0F 00 .FARADDR 4086 +00012Cr 1 F7 0F 00 .FARADDR 4087 +00012Fr 1 F8 0F 00 .FARADDR 4088 +000132r 1 F9 0F 00 .FARADDR 4089 +000135r 1 FA 0F 00 .FARADDR 4090 +000138r 1 FB 0F 00 .FARADDR 4091 +00013Br 1 FC 0F 00 .FARADDR 4092 +00013Er 1 FD 0F 00 .FARADDR 4093 +000141r 1 FE 0F 00 .FARADDR 4094 +000144r 1 FF 0F 00 .FARADDR 4095 +000147r 1 00 10 00 .FARADDR 4096 +00014Ar 1 01 10 00 .FARADDR 4097 +00014Dr 1 02 10 00 .FARADDR 4098 +000150r 1 03 10 00 .FARADDR 4099 +000153r 1 04 10 00 .FARADDR 4100 +000156r 1 05 10 00 .FARADDR 4101 +000159r 1 06 10 00 .FARADDR 4102 +00015Cr 1 07 10 00 .FARADDR 4103 +00015Fr 1 08 10 00 .FARADDR 4104 +000162r 1 F0 7F 00 .FARADDR 32752 +000165r 1 F1 7F 00 .FARADDR 32753 +000168r 1 F2 7F 00 .FARADDR 32754 +00016Br 1 F3 7F 00 .FARADDR 32755 +00016Er 1 F4 7F 00 .FARADDR 32756 +000171r 1 F5 7F 00 .FARADDR 32757 +000174r 1 F6 7F 00 .FARADDR 32758 +000177r 1 F7 7F 00 .FARADDR 32759 +00017Ar 1 F8 7F 00 .FARADDR 32760 +00017Dr 1 F9 7F 00 .FARADDR 32761 +000180r 1 FA 7F 00 .FARADDR 32762 +000183r 1 FB 7F 00 .FARADDR 32763 +000186r 1 FC 7F 00 .FARADDR 32764 +000189r 1 FD 7F 00 .FARADDR 32765 +00018Cr 1 FE 7F 00 .FARADDR 32766 +00018Fr 1 FF 7F 00 .FARADDR 32767 +000192r 1 00 80 00 .FARADDR 32768 +000195r 1 01 80 00 .FARADDR 32769 +000198r 1 02 80 00 .FARADDR 32770 +00019Br 1 03 80 00 .FARADDR 32771 +00019Er 1 04 80 00 .FARADDR 32772 +0001A1r 1 05 80 00 .FARADDR 32773 +0001A4r 1 06 80 00 .FARADDR 32774 +0001A7r 1 07 80 00 .FARADDR 32775 +0001AAr 1 08 80 00 .FARADDR 32776 +0001ADr 1 09 80 00 .FARADDR 32777 +0001B0r 1 0A 80 00 .FARADDR 32778 +0001B3r 1 0B 80 00 .FARADDR 32779 +0001B6r 1 E1 9F 00 .FARADDR 40929 +0001B9r 1 E2 9F 00 .FARADDR 40930 +0001BCr 1 E3 9F 00 .FARADDR 40931 +0001BFr 1 E4 9F 00 .FARADDR 40932 +0001C2r 1 E5 9F 00 .FARADDR 40933 +0001C5r 1 E6 9F 00 .FARADDR 40934 +0001C8r 1 E7 9F 00 .FARADDR 40935 +0001CBr 1 E8 9F 00 .FARADDR 40936 +0001CEr 1 E9 9F 00 .FARADDR 40937 +0001D1r 1 EA 9F 00 .FARADDR 40938 +0001D4r 1 EB 9F 00 .FARADDR 40939 +0001D7r 1 EC 9F 00 .FARADDR 40940 +0001DAr 1 ED 9F 00 .FARADDR 40941 +0001DDr 1 EE 9F 00 .FARADDR 40942 +0001E0r 1 EF 9F 00 .FARADDR 40943 +0001E3r 1 F0 9F 00 .FARADDR 40944 +0001E6r 1 F1 9F 00 .FARADDR 40945 +0001E9r 1 F2 9F 00 .FARADDR 40946 +0001ECr 1 F3 9F 00 .FARADDR 40947 +0001EFr 1 F4 9F 00 .FARADDR 40948 +0001F2r 1 F5 9F 00 .FARADDR 40949 +0001F5r 1 F6 9F 00 .FARADDR 40950 +0001F8r 1 F7 9F 00 .FARADDR 40951 +0001FBr 1 F8 9F 00 .FARADDR 40952 +0001FEr 1 F9 9F 00 .FARADDR 40953 +000201r 1 FA 9F 00 .FARADDR 40954 +000204r 1 FB 9F 00 .FARADDR 40955 +000207r 1 FC 9F 00 .FARADDR 40956 +00020Ar 1 FD 9F 00 .FARADDR 40957 +00020Dr 1 FE 9F 00 .FARADDR 40958 +000210r 1 FF 9F 00 .FARADDR 40959 +000213r 1 00 A0 00 .FARADDR 40960 +000216r 1 01 A0 00 .FARADDR 40961 +000219r 1 02 A0 00 .FARADDR 40962 +00021Cr 1 03 A0 00 .FARADDR 40963 +00021Fr 1 04 A0 00 .FARADDR 40964 +000222r 1 05 A0 00 .FARADDR 40965 +000225r 1 06 A0 00 .FARADDR 40966 +000228r 1 07 A0 00 .FARADDR 40967 +00022Br 1 08 A0 00 .FARADDR 40968 +00022Er 1 09 A0 00 .FARADDR 40969 +000231r 1 0A A0 00 .FARADDR 40970 +000234r 1 0B A0 00 .FARADDR 40971 +000237r 1 0C A0 00 .FARADDR 40972 +00023Ar 1 0D A0 00 .FARADDR 40973 +00023Dr 1 0E A0 00 .FARADDR 40974 +000240r 1 0F A0 00 .FARADDR 40975 +000243r 1 E1 AF 00 .FARADDR 45025 +000246r 1 E2 AF 00 .FARADDR 45026 +000249r 1 E3 AF 00 .FARADDR 45027 +00024Cr 1 E4 AF 00 .FARADDR 45028 +00024Fr 1 E5 AF 00 .FARADDR 45029 +000252r 1 E6 AF 00 .FARADDR 45030 +000255r 1 E7 AF 00 .FARADDR 45031 +000258r 1 E8 AF 00 .FARADDR 45032 +00025Br 1 E9 AF 00 .FARADDR 45033 +00025Er 1 EA AF 00 .FARADDR 45034 +000261r 1 EB AF 00 .FARADDR 45035 +000264r 1 EC AF 00 .FARADDR 45036 +000267r 1 ED AF 00 .FARADDR 45037 +00026Ar 1 EE AF 00 .FARADDR 45038 +00026Dr 1 EF AF 00 .FARADDR 45039 +000270r 1 F0 AF 00 .FARADDR 45040 +000273r 1 F1 AF 00 .FARADDR 45041 +000276r 1 F2 AF 00 .FARADDR 45042 +000279r 1 F3 AF 00 .FARADDR 45043 +00027Cr 1 F4 AF 00 .FARADDR 45044 +00027Fr 1 F5 AF 00 .FARADDR 45045 +000282r 1 F6 AF 00 .FARADDR 45046 +000285r 1 F7 AF 00 .FARADDR 45047 +000288r 1 F8 AF 00 .FARADDR 45048 +00028Br 1 F9 AF 00 .FARADDR 45049 +00028Er 1 FA AF 00 .FARADDR 45050 +000291r 1 FB AF 00 .FARADDR 45051 +000294r 1 FC AF 00 .FARADDR 45052 +000297r 1 FD AF 00 .FARADDR 45053 +00029Ar 1 FE AF 00 .FARADDR 45054 +00029Dr 1 FF AF 00 .FARADDR 45055 +0002A0r 1 00 B0 00 .FARADDR 45056 +0002A3r 1 01 B0 00 .FARADDR 45057 +0002A6r 1 02 B0 00 .FARADDR 45058 +0002A9r 1 03 B0 00 .FARADDR 45059 +0002ACr 1 04 B0 00 .FARADDR 45060 +0002AFr 1 05 B0 00 .FARADDR 45061 +0002B2r 1 06 B0 00 .FARADDR 45062 +0002B5r 1 07 B0 00 .FARADDR 45063 +0002B8r 1 08 B0 00 .FARADDR 45064 +0002BBr 1 09 B0 00 .FARADDR 45065 +0002BEr 1 0A B0 00 .FARADDR 45066 +0002C1r 1 0B B0 00 .FARADDR 45067 +0002C4r 1 0C B0 00 .FARADDR 45068 +0002C7r 1 0D B0 00 .FARADDR 45069 +0002CAr 1 0E B0 00 .FARADDR 45070 +0002CDr 1 0F B0 00 .FARADDR 45071 +0002D0r 1 E1 FF 00 .FARADDR 65505 +0002D3r 1 E2 FF 00 .FARADDR 65506 +0002D6r 1 E3 FF 00 .FARADDR 65507 +0002D9r 1 E4 FF 00 .FARADDR 65508 +0002DCr 1 E5 FF 00 .FARADDR 65509 +0002DFr 1 E6 FF 00 .FARADDR 65510 +0002E2r 1 E7 FF 00 .FARADDR 65511 +0002E5r 1 E8 FF 00 .FARADDR 65512 +0002E8r 1 E9 FF 00 .FARADDR 65513 +0002EBr 1 EA FF 00 .FARADDR 65514 +0002EEr 1 EB FF 00 .FARADDR 65515 +0002F1r 1 EC FF 00 .FARADDR 65516 +0002F4r 1 ED FF 00 .FARADDR 65517 +0002F7r 1 EE FF 00 .FARADDR 65518 +0002FAr 1 EF FF 00 .FARADDR 65519 +0002FDr 1 F0 FF 00 .FARADDR 65520 +000300r 1 F1 FF 00 .FARADDR 65521 +000303r 1 F2 FF 00 .FARADDR 65522 +000306r 1 F3 FF 00 .FARADDR 65523 +000309r 1 F4 FF 00 .FARADDR 65524 +00030Cr 1 F5 FF 00 .FARADDR 65525 +00030Fr 1 F6 FF 00 .FARADDR 65526 +000312r 1 F7 FF 00 .FARADDR 65527 +000315r 1 F8 FF 00 .FARADDR 65528 +000318r 1 F9 FF 00 .FARADDR 65529 +00031Br 1 FA FF 00 .FARADDR 65530 +00031Er 1 FB FF 00 .FARADDR 65531 +000321r 1 FC FF 00 .FARADDR 65532 +000324r 1 FD FF 00 .FARADDR 65533 +000327r 1 FE FF 00 .FARADDR 65534 +00032Ar 1 FF FF 00 .FARADDR 65535 +00032Dr 1 00 00 01 .FARADDR 65536 +000330r 1 01 00 01 .FARADDR 65537 +000333r 1 02 00 01 .FARADDR 65538 +000336r 1 03 00 01 .FARADDR 65539 +000339r 1 04 00 01 .FARADDR 65540 +00033Cr 1 05 00 01 .FARADDR 65541 +00033Fr 1 06 00 01 .FARADDR 65542 +000342r 1 07 00 01 .FARADDR 65543 +000345r 1 08 00 01 .FARADDR 65544 +000348r 1 09 00 01 .FARADDR 65545 +00034Br 1 0A 00 01 .FARADDR 65546 +00034Er 1 0B 00 01 .FARADDR 65547 +000351r 1 0C 00 01 .FARADDR 65548 +000354r 1 0D 00 01 .FARADDR 65549 +000357r 1 0E 00 01 .FARADDR 65550 +00035Ar 1 0F 00 01 .FARADDR 65551 +00035Dr 1 E1 FF 10 .FARADDR 1114081 +000360r 1 E2 FF 10 .FARADDR 1114082 +000363r 1 E3 FF 10 .FARADDR 1114083 +000366r 1 E4 FF 10 .FARADDR 1114084 +000369r 1 E5 FF 10 .FARADDR 1114085 +00036Cr 1 E6 FF 10 .FARADDR 1114086 +00036Fr 1 E7 FF 10 .FARADDR 1114087 +000372r 1 E8 FF 10 .FARADDR 1114088 +000375r 1 E9 FF 10 .FARADDR 1114089 +000378r 1 EA FF 10 .FARADDR 1114090 +00037Br 1 EB FF 10 .FARADDR 1114091 +00037Er 1 EC FF 10 .FARADDR 1114092 +000381r 1 ED FF 10 .FARADDR 1114093 +000384r 1 EE FF 10 .FARADDR 1114094 +000387r 1 EF FF 10 .FARADDR 1114095 +00038Ar 1 F0 FF 10 .FARADDR 1114096 +00038Dr 1 F1 FF 10 .FARADDR 1114097 +000390r 1 F2 FF 10 .FARADDR 1114098 +000393r 1 F3 FF 10 .FARADDR 1114099 +000396r 1 F4 FF 10 .FARADDR 1114100 +000399r 1 F5 FF 10 .FARADDR 1114101 +00039Cr 1 F6 FF 10 .FARADDR 1114102 +00039Fr 1 F7 FF 10 .FARADDR 1114103 +0003A2r 1 F8 FF 10 .FARADDR 1114104 +0003A5r 1 F9 FF 10 .FARADDR 1114105 +0003A8r 1 FA FF 10 .FARADDR 1114106 +0003ABr 1 FB FF 10 .FARADDR 1114107 +0003AEr 1 FC FF 10 .FARADDR 1114108 +0003B1r 1 FD FF 10 .FARADDR 1114109 +0003B4r 1 FE FF 10 .FARADDR 1114110 +0003B7r 1 FF FF 10 .FARADDR 1114111 +0003BAr 1 00 00 11 .FARADDR 1114112 +0003BDr 1 01 00 11 .FARADDR 1114113 +0003C0r 1 02 00 11 .FARADDR 1114114 +0003C3r 1 03 00 11 .FARADDR 1114115 +0003C6r 1 04 00 11 .FARADDR 1114116 +0003C9r 1 05 00 11 .FARADDR 1114117 +0003CCr 1 06 00 11 .FARADDR 1114118 +0003CFr 1 07 00 11 .FARADDR 1114119 +0003D2r 1 08 00 11 .FARADDR 1114120 +0003D5r 1 09 00 11 .FARADDR 1114121 +0003D8r 1 0A 00 11 .FARADDR 1114122 +0003DBr 1 0B 00 11 .FARADDR 1114123 +0003DEr 1 0C 00 11 .FARADDR 1114124 +0003E1r 1 0D 00 11 .FARADDR 1114125 +0003E4r 1 0E 00 11 .FARADDR 1114126 +0003E7r 1 0F 00 11 .FARADDR 1114127 +0003EAr 1 E1 FF 20 .FARADDR 2162657 +0003EDr 1 E2 FF 20 .FARADDR 2162658 +0003F0r 1 E3 FF 20 .FARADDR 2162659 +0003F3r 1 E4 FF 20 .FARADDR 2162660 +0003F6r 1 E5 FF 20 .FARADDR 2162661 +0003F9r 1 E6 FF 20 .FARADDR 2162662 +0003FCr 1 E7 FF 20 .FARADDR 2162663 +0003FFr 1 E8 FF 20 .FARADDR 2162664 +000402r 1 E9 FF 20 .FARADDR 2162665 +000405r 1 EA FF 20 .FARADDR 2162666 +000408r 1 EB FF 20 .FARADDR 2162667 +00040Br 1 EC FF 20 .FARADDR 2162668 +00040Er 1 ED FF 20 .FARADDR 2162669 +000411r 1 EE FF 20 .FARADDR 2162670 +000414r 1 EF FF 20 .FARADDR 2162671 +000417r 1 F0 FF 20 .FARADDR 2162672 +00041Ar 1 F1 FF 20 .FARADDR 2162673 +00041Dr 1 F2 FF 20 .FARADDR 2162674 +000420r 1 F3 FF 20 .FARADDR 2162675 +000423r 1 F4 FF 20 .FARADDR 2162676 +000426r 1 F5 FF 20 .FARADDR 2162677 +000429r 1 F6 FF 20 .FARADDR 2162678 +00042Cr 1 F7 FF 20 .FARADDR 2162679 +00042Fr 1 F8 FF 20 .FARADDR 2162680 +000432r 1 F9 FF 20 .FARADDR 2162681 +000435r 1 FA FF 20 .FARADDR 2162682 +000438r 1 FB FF 20 .FARADDR 2162683 +00043Br 1 FC FF 20 .FARADDR 2162684 +00043Er 1 FD FF 20 .FARADDR 2162685 +000441r 1 FE FF 20 .FARADDR 2162686 +000444r 1 FF FF 20 .FARADDR 2162687 +000447r 1 00 00 21 .FARADDR 2162688 +00044Ar 1 01 00 21 .FARADDR 2162689 +00044Dr 1 02 00 21 .FARADDR 2162690 +000450r 1 03 00 21 .FARADDR 2162691 +000453r 1 04 00 21 .FARADDR 2162692 +000456r 1 05 00 21 .FARADDR 2162693 +000459r 1 06 00 21 .FARADDR 2162694 +00045Cr 1 07 00 21 .FARADDR 2162695 +00045Fr 1 08 00 21 .FARADDR 2162696 +000462r 1 09 00 21 .FARADDR 2162697 +000465r 1 0A 00 21 .FARADDR 2162698 +000468r 1 0B 00 21 .FARADDR 2162699 +00046Br 1 0C 00 21 .FARADDR 2162700 +00046Er 1 0D 00 21 .FARADDR 2162701 +000471r 1 0E 00 21 .FARADDR 2162702 +000474r 1 0F 00 21 .FARADDR 2162703 +000477r 1 E1 FF 7F .FARADDR 8388577 +00047Ar 1 E2 FF 7F .FARADDR 8388578 +00047Dr 1 E3 FF 7F .FARADDR 8388579 +000480r 1 E4 FF 7F .FARADDR 8388580 +000483r 1 E5 FF 7F .FARADDR 8388581 +000486r 1 E6 FF 7F .FARADDR 8388582 +000489r 1 E7 FF 7F .FARADDR 8388583 +00048Cr 1 E8 FF 7F .FARADDR 8388584 +00048Fr 1 E9 FF 7F .FARADDR 8388585 +000492r 1 EA FF 7F .FARADDR 8388586 +000495r 1 EB FF 7F .FARADDR 8388587 +000498r 1 EC FF 7F .FARADDR 8388588 +00049Br 1 ED FF 7F .FARADDR 8388589 +00049Er 1 EE FF 7F .FARADDR 8388590 +0004A1r 1 EF FF 7F .FARADDR 8388591 +0004A4r 1 F0 FF 7F .FARADDR 8388592 +0004A7r 1 F1 FF 7F .FARADDR 8388593 +0004AAr 1 F2 FF 7F .FARADDR 8388594 +0004ADr 1 F3 FF 7F .FARADDR 8388595 +0004B0r 1 F4 FF 7F .FARADDR 8388596 +0004B3r 1 F5 FF 7F .FARADDR 8388597 +0004B6r 1 F6 FF 7F .FARADDR 8388598 +0004B9r 1 F7 FF 7F .FARADDR 8388599 +0004BCr 1 F8 FF 7F .FARADDR 8388600 +0004BFr 1 F9 FF 7F .FARADDR 8388601 +0004C2r 1 FA FF 7F .FARADDR 8388602 +0004C5r 1 FB FF 7F .FARADDR 8388603 +0004C8r 1 FC FF 7F .FARADDR 8388604 +0004CBr 1 FD FF 7F .FARADDR 8388605 +0004CEr 1 FE FF 7F .FARADDR 8388606 +0004D1r 1 FF FF 7F .FARADDR 8388607 +0004D4r 1 00 00 80 .FARADDR 8388608 +0004D7r 1 01 00 80 .FARADDR 8388609 +0004DAr 1 02 00 80 .FARADDR 8388610 +0004DDr 1 03 00 80 .FARADDR 8388611 +0004E0r 1 04 00 80 .FARADDR 8388612 +0004E3r 1 05 00 80 .FARADDR 8388613 +0004E6r 1 06 00 80 .FARADDR 8388614 +0004E9r 1 07 00 80 .FARADDR 8388615 +0004ECr 1 08 00 80 .FARADDR 8388616 +0004EFr 1 09 00 80 .FARADDR 8388617 +0004F2r 1 0A 00 80 .FARADDR 8388618 +0004F5r 1 0B 00 80 .FARADDR 8388619 +0004F8r 1 0C 00 80 .FARADDR 8388620 +0004FBr 1 0D 00 80 .FARADDR 8388621 +0004FEr 1 0E 00 80 .FARADDR 8388622 +000501r 1 0F 00 80 .FARADDR 8388623 +000504r 1 E1 FF 9F .FARADDR 10485729 +000507r 1 E2 FF 9F .FARADDR 10485730 +00050Ar 1 E3 FF 9F .FARADDR 10485731 +00050Dr 1 E4 FF 9F .FARADDR 10485732 +000510r 1 E5 FF 9F .FARADDR 10485733 +000513r 1 E6 FF 9F .FARADDR 10485734 +000516r 1 E7 FF 9F .FARADDR 10485735 +000519r 1 E8 FF 9F .FARADDR 10485736 +00051Cr 1 E9 FF 9F .FARADDR 10485737 +00051Fr 1 EA FF 9F .FARADDR 10485738 +000522r 1 EB FF 9F .FARADDR 10485739 +000525r 1 EC FF 9F .FARADDR 10485740 +000528r 1 ED FF 9F .FARADDR 10485741 +00052Br 1 EE FF 9F .FARADDR 10485742 +00052Er 1 EF FF 9F .FARADDR 10485743 +000531r 1 F0 FF 9F .FARADDR 10485744 +000534r 1 F1 FF 9F .FARADDR 10485745 +000537r 1 F2 FF 9F .FARADDR 10485746 +00053Ar 1 F3 FF 9F .FARADDR 10485747 +00053Dr 1 F4 FF 9F .FARADDR 10485748 +000540r 1 F5 FF 9F .FARADDR 10485749 +000543r 1 F6 FF 9F .FARADDR 10485750 +000546r 1 F7 FF 9F .FARADDR 10485751 +000549r 1 F8 FF 9F .FARADDR 10485752 +00054Cr 1 F9 FF 9F .FARADDR 10485753 +00054Fr 1 FA FF 9F .FARADDR 10485754 +000552r 1 FB FF 9F .FARADDR 10485755 +000555r 1 FC FF 9F .FARADDR 10485756 +000558r 1 FD FF 9F .FARADDR 10485757 +00055Br 1 FE FF 9F .FARADDR 10485758 +00055Er 1 FF FF 9F .FARADDR 10485759 +000561r 1 00 00 A0 .FARADDR 10485760 +000564r 1 01 00 A0 .FARADDR 10485761 +000567r 1 02 00 A0 .FARADDR 10485762 +00056Ar 1 03 00 A0 .FARADDR 10485763 +00056Dr 1 04 00 A0 .FARADDR 10485764 +000570r 1 05 00 A0 .FARADDR 10485765 +000573r 1 06 00 A0 .FARADDR 10485766 +000576r 1 07 00 A0 .FARADDR 10485767 +000579r 1 08 00 A0 .FARADDR 10485768 +00057Cr 1 09 00 A0 .FARADDR 10485769 +00057Fr 1 0A 00 A0 .FARADDR 10485770 +000582r 1 0B 00 A0 .FARADDR 10485771 +000585r 1 0C 00 A0 .FARADDR 10485772 +000588r 1 0D 00 A0 .FARADDR 10485773 +00058Br 1 0E 00 A0 .FARADDR 10485774 +00058Er 1 0F 00 A0 .FARADDR 10485775 +000591r 1 E1 FF FF .FARADDR 16777185 +000594r 1 E2 FF FF .FARADDR 16777186 +000597r 1 E3 FF FF .FARADDR 16777187 +00059Ar 1 E4 FF FF .FARADDR 16777188 +00059Dr 1 E5 FF FF .FARADDR 16777189 +0005A0r 1 E6 FF FF .FARADDR 16777190 +0005A3r 1 E7 FF FF .FARADDR 16777191 +0005A6r 1 E8 FF FF .FARADDR 16777192 +0005A9r 1 E9 FF FF .FARADDR 16777193 +0005ACr 1 EA FF FF .FARADDR 16777194 +0005AFr 1 EB FF FF .FARADDR 16777195 +0005B2r 1 EC FF FF .FARADDR 16777196 +0005B5r 1 ED FF FF .FARADDR 16777197 +0005B8r 1 EE FF FF .FARADDR 16777198 +0005BBr 1 EF FF FF .FARADDR 16777199 +0005BEr 1 F0 FF FF .FARADDR 16777200 +0005C1r 1 F1 FF FF .FARADDR 16777201 +0005C4r 1 F2 FF FF .FARADDR 16777202 +0005C7r 1 F3 FF FF .FARADDR 16777203 +0005CAr 1 F4 FF FF .FARADDR 16777204 +0005CDr 1 F5 FF FF .FARADDR 16777205 +0005D0r 1 F6 FF FF .FARADDR 16777206 +0005D3r 1 F7 FF FF .FARADDR 16777207 +0005D6r 1 F8 FF FF .FARADDR 16777208 +0005D9r 1 F9 FF FF .FARADDR 16777209 +0005DCr 1 FA FF FF .FARADDR 16777210 +0005DFr 1 FB FF FF .FARADDR 16777211 +0005E2r 1 FC FF FF .FARADDR 16777212 +0005E5r 1 FD FF FF .FARADDR 16777213 +0005E8r 1 FE FF FF .FARADDR 16777214 +0005EBr 1 FF FF FF .FARADDR 16777215 +0005EEr 1 +0005EEr 1 ; lower case pseudo-op +0005EEr 1 00 00 00 .faraddr 0 +0005F1r 1 01 00 00 .faraddr 1 +0005F4r 1 02 00 00 .faraddr 2 +0005F7r 1 03 00 00 .faraddr 3 +0005FAr 1 04 00 00 .faraddr 4 +0005FDr 1 05 00 00 .faraddr 5 +000600r 1 06 00 00 .faraddr 6 +000603r 1 07 00 00 .faraddr 7 +000606r 1 08 00 00 .faraddr 8 +000609r 1 09 00 00 .faraddr 9 +00060Cr 1 0A 00 00 .faraddr 10 +00060Fr 1 0B 00 00 .faraddr 11 +000612r 1 0C 00 00 .faraddr 12 +000615r 1 0D 00 00 .faraddr 13 +000618r 1 0E 00 00 .faraddr 14 +00061Br 1 0F 00 00 .faraddr 15 +00061Er 1 10 00 00 .faraddr 16 +000621r 1 11 00 00 .faraddr 17 +000624r 1 12 00 00 .faraddr 18 +000627r 1 13 00 00 .faraddr 19 +00062Ar 1 70 00 00 .faraddr 112 +00062Dr 1 71 00 00 .faraddr 113 +000630r 1 72 00 00 .faraddr 114 +000633r 1 73 00 00 .faraddr 115 +000636r 1 74 00 00 .faraddr 116 +000639r 1 75 00 00 .faraddr 117 +00063Cr 1 76 00 00 .faraddr 118 +00063Fr 1 77 00 00 .faraddr 119 +000642r 1 78 00 00 .faraddr 120 +000645r 1 79 00 00 .faraddr 121 +000648r 1 7A 00 00 .faraddr 122 +00064Br 1 7B 00 00 .faraddr 123 +00064Er 1 7C 00 00 .faraddr 124 +000651r 1 7D 00 00 .faraddr 125 +000654r 1 7E 00 00 .faraddr 126 +000657r 1 7F 00 00 .faraddr 127 +00065Ar 1 80 00 00 .faraddr 128 +00065Dr 1 81 00 00 .faraddr 129 +000660r 1 82 00 00 .faraddr 130 +000663r 1 83 00 00 .faraddr 131 +000666r 1 84 00 00 .faraddr 132 +000669r 1 85 00 00 .faraddr 133 +00066Cr 1 86 00 00 .faraddr 134 +00066Fr 1 F0 00 00 .faraddr 240 +000672r 1 F1 00 00 .faraddr 241 +000675r 1 F2 00 00 .faraddr 242 +000678r 1 F3 00 00 .faraddr 243 +00067Br 1 F4 00 00 .faraddr 244 +00067Er 1 F5 00 00 .faraddr 245 +000681r 1 F6 00 00 .faraddr 246 +000684r 1 F7 00 00 .faraddr 247 +000687r 1 F8 00 00 .faraddr 248 +00068Ar 1 F9 00 00 .faraddr 249 +00068Dr 1 FA 00 00 .faraddr 250 +000690r 1 FB 00 00 .faraddr 251 +000693r 1 FC 00 00 .faraddr 252 +000696r 1 FD 00 00 .faraddr 253 +000699r 1 FE 00 00 .faraddr 254 +00069Cr 1 FF 00 00 .faraddr 255 +00069Fr 1 00 01 00 .faraddr 256 +0006A2r 1 01 01 00 .faraddr 257 +0006A5r 1 02 01 00 .faraddr 258 +0006A8r 1 03 01 00 .faraddr 259 +0006ABr 1 D2 0F 00 .faraddr 4050 +0006AEr 1 D3 0F 00 .faraddr 4051 +0006B1r 1 D4 0F 00 .faraddr 4052 +0006B4r 1 D5 0F 00 .faraddr 4053 +0006B7r 1 D6 0F 00 .faraddr 4054 +0006BAr 1 D7 0F 00 .faraddr 4055 +0006BDr 1 D8 0F 00 .faraddr 4056 +0006C0r 1 D9 0F 00 .faraddr 4057 +0006C3r 1 DA 0F 00 .faraddr 4058 +0006C6r 1 DB 0F 00 .faraddr 4059 +0006C9r 1 DC 0F 00 .faraddr 4060 +0006CCr 1 DD 0F 00 .faraddr 4061 +0006CFr 1 DE 0F 00 .faraddr 4062 +0006D2r 1 DF 0F 00 .faraddr 4063 +0006D5r 1 E0 0F 00 .faraddr 4064 +0006D8r 1 E1 0F 00 .faraddr 4065 +0006DBr 1 E2 0F 00 .faraddr 4066 +0006DEr 1 E3 0F 00 .faraddr 4067 +0006E1r 1 E4 0F 00 .faraddr 4068 +0006E4r 1 E5 0F 00 .faraddr 4069 +0006E7r 1 E6 0F 00 .faraddr 4070 +0006EAr 1 E7 0F 00 .faraddr 4071 +0006EDr 1 E8 0F 00 .faraddr 4072 +0006F0r 1 E9 0F 00 .faraddr 4073 +0006F3r 1 EA 0F 00 .faraddr 4074 +0006F6r 1 EB 0F 00 .faraddr 4075 +0006F9r 1 EC 0F 00 .faraddr 4076 +0006FCr 1 ED 0F 00 .faraddr 4077 +0006FFr 1 EE 0F 00 .faraddr 4078 +000702r 1 EF 0F 00 .faraddr 4079 +000705r 1 F0 0F 00 .faraddr 4080 +000708r 1 F1 0F 00 .faraddr 4081 +00070Br 1 F2 0F 00 .faraddr 4082 +00070Er 1 F3 0F 00 .faraddr 4083 +000711r 1 F4 0F 00 .faraddr 4084 +000714r 1 F5 0F 00 .faraddr 4085 +000717r 1 F6 0F 00 .faraddr 4086 +00071Ar 1 F7 0F 00 .faraddr 4087 +00071Dr 1 F8 0F 00 .faraddr 4088 +000720r 1 F9 0F 00 .faraddr 4089 +000723r 1 FA 0F 00 .faraddr 4090 +000726r 1 FB 0F 00 .faraddr 4091 +000729r 1 FC 0F 00 .faraddr 4092 +00072Cr 1 FD 0F 00 .faraddr 4093 +00072Fr 1 FE 0F 00 .faraddr 4094 +000732r 1 FF 0F 00 .faraddr 4095 +000735r 1 00 10 00 .faraddr 4096 +000738r 1 01 10 00 .faraddr 4097 +00073Br 1 02 10 00 .faraddr 4098 +00073Er 1 03 10 00 .faraddr 4099 +000741r 1 04 10 00 .faraddr 4100 +000744r 1 05 10 00 .faraddr 4101 +000747r 1 06 10 00 .faraddr 4102 +00074Ar 1 07 10 00 .faraddr 4103 +00074Dr 1 08 10 00 .faraddr 4104 +000750r 1 F0 7F 00 .faraddr 32752 +000753r 1 F1 7F 00 .faraddr 32753 +000756r 1 F2 7F 00 .faraddr 32754 +000759r 1 F3 7F 00 .faraddr 32755 +00075Cr 1 F4 7F 00 .faraddr 32756 +00075Fr 1 F5 7F 00 .faraddr 32757 +000762r 1 F6 7F 00 .faraddr 32758 +000765r 1 F7 7F 00 .faraddr 32759 +000768r 1 F8 7F 00 .faraddr 32760 +00076Br 1 F9 7F 00 .faraddr 32761 +00076Er 1 FA 7F 00 .faraddr 32762 +000771r 1 FB 7F 00 .faraddr 32763 +000774r 1 FC 7F 00 .faraddr 32764 +000777r 1 FD 7F 00 .faraddr 32765 +00077Ar 1 FE 7F 00 .faraddr 32766 +00077Dr 1 FF 7F 00 .faraddr 32767 +000780r 1 00 80 00 .faraddr 32768 +000783r 1 01 80 00 .faraddr 32769 +000786r 1 02 80 00 .faraddr 32770 +000789r 1 03 80 00 .faraddr 32771 +00078Cr 1 04 80 00 .faraddr 32772 +00078Fr 1 05 80 00 .faraddr 32773 +000792r 1 06 80 00 .faraddr 32774 +000795r 1 07 80 00 .faraddr 32775 +000798r 1 08 80 00 .faraddr 32776 +00079Br 1 09 80 00 .faraddr 32777 +00079Er 1 0A 80 00 .faraddr 32778 +0007A1r 1 0B 80 00 .faraddr 32779 +0007A4r 1 E1 9F 00 .faraddr 40929 +0007A7r 1 E2 9F 00 .faraddr 40930 +0007AAr 1 E3 9F 00 .faraddr 40931 +0007ADr 1 E4 9F 00 .faraddr 40932 +0007B0r 1 E5 9F 00 .faraddr 40933 +0007B3r 1 E6 9F 00 .faraddr 40934 +0007B6r 1 E7 9F 00 .faraddr 40935 +0007B9r 1 E8 9F 00 .faraddr 40936 +0007BCr 1 E9 9F 00 .faraddr 40937 +0007BFr 1 EA 9F 00 .faraddr 40938 +0007C2r 1 EB 9F 00 .faraddr 40939 +0007C5r 1 EC 9F 00 .faraddr 40940 +0007C8r 1 ED 9F 00 .faraddr 40941 +0007CBr 1 EE 9F 00 .faraddr 40942 +0007CEr 1 EF 9F 00 .faraddr 40943 +0007D1r 1 F0 9F 00 .faraddr 40944 +0007D4r 1 F1 9F 00 .faraddr 40945 +0007D7r 1 F2 9F 00 .faraddr 40946 +0007DAr 1 F3 9F 00 .faraddr 40947 +0007DDr 1 F4 9F 00 .faraddr 40948 +0007E0r 1 F5 9F 00 .faraddr 40949 +0007E3r 1 F6 9F 00 .faraddr 40950 +0007E6r 1 F7 9F 00 .faraddr 40951 +0007E9r 1 F8 9F 00 .faraddr 40952 +0007ECr 1 F9 9F 00 .faraddr 40953 +0007EFr 1 FA 9F 00 .faraddr 40954 +0007F2r 1 FB 9F 00 .faraddr 40955 +0007F5r 1 FC 9F 00 .faraddr 40956 +0007F8r 1 FD 9F 00 .faraddr 40957 +0007FBr 1 FE 9F 00 .faraddr 40958 +0007FEr 1 FF 9F 00 .faraddr 40959 +000801r 1 00 A0 00 .faraddr 40960 +000804r 1 01 A0 00 .faraddr 40961 +000807r 1 02 A0 00 .faraddr 40962 +00080Ar 1 03 A0 00 .faraddr 40963 +00080Dr 1 04 A0 00 .faraddr 40964 +000810r 1 05 A0 00 .faraddr 40965 +000813r 1 06 A0 00 .faraddr 40966 +000816r 1 07 A0 00 .faraddr 40967 +000819r 1 08 A0 00 .faraddr 40968 +00081Cr 1 09 A0 00 .faraddr 40969 +00081Fr 1 0A A0 00 .faraddr 40970 +000822r 1 0B A0 00 .faraddr 40971 +000825r 1 0C A0 00 .faraddr 40972 +000828r 1 0D A0 00 .faraddr 40973 +00082Br 1 0E A0 00 .faraddr 40974 +00082Er 1 0F A0 00 .faraddr 40975 +000831r 1 E1 AF 00 .faraddr 45025 +000834r 1 E2 AF 00 .faraddr 45026 +000837r 1 E3 AF 00 .faraddr 45027 +00083Ar 1 E4 AF 00 .faraddr 45028 +00083Dr 1 E5 AF 00 .faraddr 45029 +000840r 1 E6 AF 00 .faraddr 45030 +000843r 1 E7 AF 00 .faraddr 45031 +000846r 1 E8 AF 00 .faraddr 45032 +000849r 1 E9 AF 00 .faraddr 45033 +00084Cr 1 EA AF 00 .faraddr 45034 +00084Fr 1 EB AF 00 .faraddr 45035 +000852r 1 EC AF 00 .faraddr 45036 +000855r 1 ED AF 00 .faraddr 45037 +000858r 1 EE AF 00 .faraddr 45038 +00085Br 1 EF AF 00 .faraddr 45039 +00085Er 1 F0 AF 00 .faraddr 45040 +000861r 1 F1 AF 00 .faraddr 45041 +000864r 1 F2 AF 00 .faraddr 45042 +000867r 1 F3 AF 00 .faraddr 45043 +00086Ar 1 F4 AF 00 .faraddr 45044 +00086Dr 1 F5 AF 00 .faraddr 45045 +000870r 1 F6 AF 00 .faraddr 45046 +000873r 1 F7 AF 00 .faraddr 45047 +000876r 1 F8 AF 00 .faraddr 45048 +000879r 1 F9 AF 00 .faraddr 45049 +00087Cr 1 FA AF 00 .faraddr 45050 +00087Fr 1 FB AF 00 .faraddr 45051 +000882r 1 FC AF 00 .faraddr 45052 +000885r 1 FD AF 00 .faraddr 45053 +000888r 1 FE AF 00 .faraddr 45054 +00088Br 1 FF AF 00 .faraddr 45055 +00088Er 1 00 B0 00 .faraddr 45056 +000891r 1 01 B0 00 .faraddr 45057 +000894r 1 02 B0 00 .faraddr 45058 +000897r 1 03 B0 00 .faraddr 45059 +00089Ar 1 04 B0 00 .faraddr 45060 +00089Dr 1 05 B0 00 .faraddr 45061 +0008A0r 1 06 B0 00 .faraddr 45062 +0008A3r 1 07 B0 00 .faraddr 45063 +0008A6r 1 08 B0 00 .faraddr 45064 +0008A9r 1 09 B0 00 .faraddr 45065 +0008ACr 1 0A B0 00 .faraddr 45066 +0008AFr 1 0B B0 00 .faraddr 45067 +0008B2r 1 0C B0 00 .faraddr 45068 +0008B5r 1 0D B0 00 .faraddr 45069 +0008B8r 1 0E B0 00 .faraddr 45070 +0008BBr 1 0F B0 00 .faraddr 45071 +0008BEr 1 E1 FF 00 .faraddr 65505 +0008C1r 1 E2 FF 00 .faraddr 65506 +0008C4r 1 E3 FF 00 .faraddr 65507 +0008C7r 1 E4 FF 00 .faraddr 65508 +0008CAr 1 E5 FF 00 .faraddr 65509 +0008CDr 1 E6 FF 00 .faraddr 65510 +0008D0r 1 E7 FF 00 .faraddr 65511 +0008D3r 1 E8 FF 00 .faraddr 65512 +0008D6r 1 E9 FF 00 .faraddr 65513 +0008D9r 1 EA FF 00 .faraddr 65514 +0008DCr 1 EB FF 00 .faraddr 65515 +0008DFr 1 EC FF 00 .faraddr 65516 +0008E2r 1 ED FF 00 .faraddr 65517 +0008E5r 1 EE FF 00 .faraddr 65518 +0008E8r 1 EF FF 00 .faraddr 65519 +0008EBr 1 F0 FF 00 .faraddr 65520 +0008EEr 1 F1 FF 00 .faraddr 65521 +0008F1r 1 F2 FF 00 .faraddr 65522 +0008F4r 1 F3 FF 00 .faraddr 65523 +0008F7r 1 F4 FF 00 .faraddr 65524 +0008FAr 1 F5 FF 00 .faraddr 65525 +0008FDr 1 F6 FF 00 .faraddr 65526 +000900r 1 F7 FF 00 .faraddr 65527 +000903r 1 F8 FF 00 .faraddr 65528 +000906r 1 F9 FF 00 .faraddr 65529 +000909r 1 FA FF 00 .faraddr 65530 +00090Cr 1 FB FF 00 .faraddr 65531 +00090Fr 1 FC FF 00 .faraddr 65532 +000912r 1 FD FF 00 .faraddr 65533 +000915r 1 FE FF 00 .faraddr 65534 +000918r 1 FF FF 00 .faraddr 65535 +00091Br 1 00 00 01 .faraddr 65536 +00091Er 1 01 00 01 .faraddr 65537 +000921r 1 02 00 01 .faraddr 65538 +000924r 1 03 00 01 .faraddr 65539 +000927r 1 04 00 01 .faraddr 65540 +00092Ar 1 05 00 01 .faraddr 65541 +00092Dr 1 06 00 01 .faraddr 65542 +000930r 1 07 00 01 .faraddr 65543 +000933r 1 08 00 01 .faraddr 65544 +000936r 1 09 00 01 .faraddr 65545 +000939r 1 0A 00 01 .faraddr 65546 +00093Cr 1 0B 00 01 .faraddr 65547 +00093Fr 1 0C 00 01 .faraddr 65548 +000942r 1 0D 00 01 .faraddr 65549 +000945r 1 0E 00 01 .faraddr 65550 +000948r 1 0F 00 01 .faraddr 65551 +00094Br 1 E1 FF 10 .faraddr 1114081 +00094Er 1 E2 FF 10 .faraddr 1114082 +000951r 1 E3 FF 10 .faraddr 1114083 +000954r 1 E4 FF 10 .faraddr 1114084 +000957r 1 E5 FF 10 .faraddr 1114085 +00095Ar 1 E6 FF 10 .faraddr 1114086 +00095Dr 1 E7 FF 10 .faraddr 1114087 +000960r 1 E8 FF 10 .faraddr 1114088 +000963r 1 E9 FF 10 .faraddr 1114089 +000966r 1 EA FF 10 .faraddr 1114090 +000969r 1 EB FF 10 .faraddr 1114091 +00096Cr 1 EC FF 10 .faraddr 1114092 +00096Fr 1 ED FF 10 .faraddr 1114093 +000972r 1 EE FF 10 .faraddr 1114094 +000975r 1 EF FF 10 .faraddr 1114095 +000978r 1 F0 FF 10 .faraddr 1114096 +00097Br 1 F1 FF 10 .faraddr 1114097 +00097Er 1 F2 FF 10 .faraddr 1114098 +000981r 1 F3 FF 10 .faraddr 1114099 +000984r 1 F4 FF 10 .faraddr 1114100 +000987r 1 F5 FF 10 .faraddr 1114101 +00098Ar 1 F6 FF 10 .faraddr 1114102 +00098Dr 1 F7 FF 10 .faraddr 1114103 +000990r 1 F8 FF 10 .faraddr 1114104 +000993r 1 F9 FF 10 .faraddr 1114105 +000996r 1 FA FF 10 .faraddr 1114106 +000999r 1 FB FF 10 .faraddr 1114107 +00099Cr 1 FC FF 10 .faraddr 1114108 +00099Fr 1 FD FF 10 .faraddr 1114109 +0009A2r 1 FE FF 10 .faraddr 1114110 +0009A5r 1 FF FF 10 .faraddr 1114111 +0009A8r 1 00 00 11 .faraddr 1114112 +0009ABr 1 01 00 11 .faraddr 1114113 +0009AEr 1 02 00 11 .faraddr 1114114 +0009B1r 1 03 00 11 .faraddr 1114115 +0009B4r 1 04 00 11 .faraddr 1114116 +0009B7r 1 05 00 11 .faraddr 1114117 +0009BAr 1 06 00 11 .faraddr 1114118 +0009BDr 1 07 00 11 .faraddr 1114119 +0009C0r 1 08 00 11 .faraddr 1114120 +0009C3r 1 09 00 11 .faraddr 1114121 +0009C6r 1 0A 00 11 .faraddr 1114122 +0009C9r 1 0B 00 11 .faraddr 1114123 +0009CCr 1 0C 00 11 .faraddr 1114124 +0009CFr 1 0D 00 11 .faraddr 1114125 +0009D2r 1 0E 00 11 .faraddr 1114126 +0009D5r 1 0F 00 11 .faraddr 1114127 +0009D8r 1 E1 FF 20 .faraddr 2162657 +0009DBr 1 E2 FF 20 .faraddr 2162658 +0009DEr 1 E3 FF 20 .faraddr 2162659 +0009E1r 1 E4 FF 20 .faraddr 2162660 +0009E4r 1 E5 FF 20 .faraddr 2162661 +0009E7r 1 E6 FF 20 .faraddr 2162662 +0009EAr 1 E7 FF 20 .faraddr 2162663 +0009EDr 1 E8 FF 20 .faraddr 2162664 +0009F0r 1 E9 FF 20 .faraddr 2162665 +0009F3r 1 EA FF 20 .faraddr 2162666 +0009F6r 1 EB FF 20 .faraddr 2162667 +0009F9r 1 EC FF 20 .faraddr 2162668 +0009FCr 1 ED FF 20 .faraddr 2162669 +0009FFr 1 EE FF 20 .faraddr 2162670 +000A02r 1 EF FF 20 .faraddr 2162671 +000A05r 1 F0 FF 20 .faraddr 2162672 +000A08r 1 F1 FF 20 .faraddr 2162673 +000A0Br 1 F2 FF 20 .faraddr 2162674 +000A0Er 1 F3 FF 20 .faraddr 2162675 +000A11r 1 F4 FF 20 .faraddr 2162676 +000A14r 1 F5 FF 20 .faraddr 2162677 +000A17r 1 F6 FF 20 .faraddr 2162678 +000A1Ar 1 F7 FF 20 .faraddr 2162679 +000A1Dr 1 F8 FF 20 .faraddr 2162680 +000A20r 1 F9 FF 20 .faraddr 2162681 +000A23r 1 FA FF 20 .faraddr 2162682 +000A26r 1 FB FF 20 .faraddr 2162683 +000A29r 1 FC FF 20 .faraddr 2162684 +000A2Cr 1 FD FF 20 .faraddr 2162685 +000A2Fr 1 FE FF 20 .faraddr 2162686 +000A32r 1 FF FF 20 .faraddr 2162687 +000A35r 1 00 00 21 .faraddr 2162688 +000A38r 1 01 00 21 .faraddr 2162689 +000A3Br 1 02 00 21 .faraddr 2162690 +000A3Er 1 03 00 21 .faraddr 2162691 +000A41r 1 04 00 21 .faraddr 2162692 +000A44r 1 05 00 21 .faraddr 2162693 +000A47r 1 06 00 21 .faraddr 2162694 +000A4Ar 1 07 00 21 .faraddr 2162695 +000A4Dr 1 08 00 21 .faraddr 2162696 +000A50r 1 09 00 21 .faraddr 2162697 +000A53r 1 0A 00 21 .faraddr 2162698 +000A56r 1 0B 00 21 .faraddr 2162699 +000A59r 1 0C 00 21 .faraddr 2162700 +000A5Cr 1 0D 00 21 .faraddr 2162701 +000A5Fr 1 0E 00 21 .faraddr 2162702 +000A62r 1 0F 00 21 .faraddr 2162703 +000A65r 1 E1 FF 7F .faraddr 8388577 +000A68r 1 E2 FF 7F .faraddr 8388578 +000A6Br 1 E3 FF 7F .faraddr 8388579 +000A6Er 1 E4 FF 7F .faraddr 8388580 +000A71r 1 E5 FF 7F .faraddr 8388581 +000A74r 1 E6 FF 7F .faraddr 8388582 +000A77r 1 E7 FF 7F .faraddr 8388583 +000A7Ar 1 E8 FF 7F .faraddr 8388584 +000A7Dr 1 E9 FF 7F .faraddr 8388585 +000A80r 1 EA FF 7F .faraddr 8388586 +000A83r 1 EB FF 7F .faraddr 8388587 +000A86r 1 EC FF 7F .faraddr 8388588 +000A89r 1 ED FF 7F .faraddr 8388589 +000A8Cr 1 EE FF 7F .faraddr 8388590 +000A8Fr 1 EF FF 7F .faraddr 8388591 +000A92r 1 F0 FF 7F .faraddr 8388592 +000A95r 1 F1 FF 7F .faraddr 8388593 +000A98r 1 F2 FF 7F .faraddr 8388594 +000A9Br 1 F3 FF 7F .faraddr 8388595 +000A9Er 1 F4 FF 7F .faraddr 8388596 +000AA1r 1 F5 FF 7F .faraddr 8388597 +000AA4r 1 F6 FF 7F .faraddr 8388598 +000AA7r 1 F7 FF 7F .faraddr 8388599 +000AAAr 1 F8 FF 7F .faraddr 8388600 +000AADr 1 F9 FF 7F .faraddr 8388601 +000AB0r 1 FA FF 7F .faraddr 8388602 +000AB3r 1 FB FF 7F .faraddr 8388603 +000AB6r 1 FC FF 7F .faraddr 8388604 +000AB9r 1 FD FF 7F .faraddr 8388605 +000ABCr 1 FE FF 7F .faraddr 8388606 +000ABFr 1 FF FF 7F .faraddr 8388607 +000AC2r 1 00 00 80 .faraddr 8388608 +000AC5r 1 01 00 80 .faraddr 8388609 +000AC8r 1 02 00 80 .faraddr 8388610 +000ACBr 1 03 00 80 .faraddr 8388611 +000ACEr 1 04 00 80 .faraddr 8388612 +000AD1r 1 05 00 80 .faraddr 8388613 +000AD4r 1 06 00 80 .faraddr 8388614 +000AD7r 1 07 00 80 .faraddr 8388615 +000ADAr 1 08 00 80 .faraddr 8388616 +000ADDr 1 09 00 80 .faraddr 8388617 +000AE0r 1 0A 00 80 .faraddr 8388618 +000AE3r 1 0B 00 80 .faraddr 8388619 +000AE6r 1 0C 00 80 .faraddr 8388620 +000AE9r 1 0D 00 80 .faraddr 8388621 +000AECr 1 0E 00 80 .faraddr 8388622 +000AEFr 1 0F 00 80 .faraddr 8388623 +000AF2r 1 E1 FF 9F .faraddr 10485729 +000AF5r 1 E2 FF 9F .faraddr 10485730 +000AF8r 1 E3 FF 9F .faraddr 10485731 +000AFBr 1 E4 FF 9F .faraddr 10485732 +000AFEr 1 E5 FF 9F .faraddr 10485733 +000B01r 1 E6 FF 9F .faraddr 10485734 +000B04r 1 E7 FF 9F .faraddr 10485735 +000B07r 1 E8 FF 9F .faraddr 10485736 +000B0Ar 1 E9 FF 9F .faraddr 10485737 +000B0Dr 1 EA FF 9F .faraddr 10485738 +000B10r 1 EB FF 9F .faraddr 10485739 +000B13r 1 EC FF 9F .faraddr 10485740 +000B16r 1 ED FF 9F .faraddr 10485741 +000B19r 1 EE FF 9F .faraddr 10485742 +000B1Cr 1 EF FF 9F .faraddr 10485743 +000B1Fr 1 F0 FF 9F .faraddr 10485744 +000B22r 1 F1 FF 9F .faraddr 10485745 +000B25r 1 F2 FF 9F .faraddr 10485746 +000B28r 1 F3 FF 9F .faraddr 10485747 +000B2Br 1 F4 FF 9F .faraddr 10485748 +000B2Er 1 F5 FF 9F .faraddr 10485749 +000B31r 1 F6 FF 9F .faraddr 10485750 +000B34r 1 F7 FF 9F .faraddr 10485751 +000B37r 1 F8 FF 9F .faraddr 10485752 +000B3Ar 1 F9 FF 9F .faraddr 10485753 +000B3Dr 1 FA FF 9F .faraddr 10485754 +000B40r 1 FB FF 9F .faraddr 10485755 +000B43r 1 FC FF 9F .faraddr 10485756 +000B46r 1 FD FF 9F .faraddr 10485757 +000B49r 1 FE FF 9F .faraddr 10485758 +000B4Cr 1 FF FF 9F .faraddr 10485759 +000B4Fr 1 00 00 A0 .faraddr 10485760 +000B52r 1 01 00 A0 .faraddr 10485761 +000B55r 1 02 00 A0 .faraddr 10485762 +000B58r 1 03 00 A0 .faraddr 10485763 +000B5Br 1 04 00 A0 .faraddr 10485764 +000B5Er 1 05 00 A0 .faraddr 10485765 +000B61r 1 06 00 A0 .faraddr 10485766 +000B64r 1 07 00 A0 .faraddr 10485767 +000B67r 1 08 00 A0 .faraddr 10485768 +000B6Ar 1 09 00 A0 .faraddr 10485769 +000B6Dr 1 0A 00 A0 .faraddr 10485770 +000B70r 1 0B 00 A0 .faraddr 10485771 +000B73r 1 0C 00 A0 .faraddr 10485772 +000B76r 1 0D 00 A0 .faraddr 10485773 +000B79r 1 0E 00 A0 .faraddr 10485774 +000B7Cr 1 0F 00 A0 .faraddr 10485775 +000B7Fr 1 E1 FF FF .faraddr 16777185 +000B82r 1 E2 FF FF .faraddr 16777186 +000B85r 1 E3 FF FF .faraddr 16777187 +000B88r 1 E4 FF FF .faraddr 16777188 +000B8Br 1 E5 FF FF .faraddr 16777189 +000B8Er 1 E6 FF FF .faraddr 16777190 +000B91r 1 E7 FF FF .faraddr 16777191 +000B94r 1 E8 FF FF .faraddr 16777192 +000B97r 1 E9 FF FF .faraddr 16777193 +000B9Ar 1 EA FF FF .faraddr 16777194 +000B9Dr 1 EB FF FF .faraddr 16777195 +000BA0r 1 EC FF FF .faraddr 16777196 +000BA3r 1 ED FF FF .faraddr 16777197 +000BA6r 1 EE FF FF .faraddr 16777198 +000BA9r 1 EF FF FF .faraddr 16777199 +000BACr 1 F0 FF FF .faraddr 16777200 +000BAFr 1 F1 FF FF .faraddr 16777201 +000BB2r 1 F2 FF FF .faraddr 16777202 +000BB5r 1 F3 FF FF .faraddr 16777203 +000BB8r 1 F4 FF FF .faraddr 16777204 +000BBBr 1 F5 FF FF .faraddr 16777205 +000BBEr 1 F6 FF FF .faraddr 16777206 +000BC1r 1 F7 FF FF .faraddr 16777207 +000BC4r 1 F8 FF FF .faraddr 16777208 +000BC7r 1 F9 FF FF .faraddr 16777209 +000BCAr 1 FA FF FF .faraddr 16777210 +000BCDr 1 FB FF FF .faraddr 16777211 +000BD0r 1 FC FF FF .faraddr 16777212 +000BD3r 1 FD FF FF .faraddr 16777213 +000BD6r 1 FE FF FF .faraddr 16777214 +000BD9r 1 FF FF FF .faraddr 16777215 +000BDCr 1 +000BDCr 1 ; hex values +000BDCr 1 00 00 00 .faraddr $0 +000BDFr 1 01 00 00 .faraddr $1 +000BE2r 1 02 00 00 .faraddr $2 +000BE5r 1 03 00 00 .faraddr $3 +000BE8r 1 04 00 00 .faraddr $4 +000BEBr 1 05 00 00 .faraddr $5 +000BEEr 1 06 00 00 .faraddr $6 +000BF1r 1 07 00 00 .faraddr $7 +000BF4r 1 08 00 00 .faraddr $8 +000BF7r 1 09 00 00 .faraddr $9 +000BFAr 1 0A 00 00 .faraddr $a +000BFDr 1 0B 00 00 .faraddr $b +000C00r 1 0C 00 00 .faraddr $c +000C03r 1 0D 00 00 .faraddr $d +000C06r 1 0E 00 00 .faraddr $e +000C09r 1 0F 00 00 .faraddr $f +000C0Cr 1 10 00 00 .faraddr $10 +000C0Fr 1 11 00 00 .faraddr $11 +000C12r 1 12 00 00 .faraddr $12 +000C15r 1 13 00 00 .faraddr $13 +000C18r 1 70 00 00 .faraddr $70 +000C1Br 1 71 00 00 .faraddr $71 +000C1Er 1 72 00 00 .faraddr $72 +000C21r 1 73 00 00 .faraddr $73 +000C24r 1 74 00 00 .faraddr $74 +000C27r 1 75 00 00 .faraddr $75 +000C2Ar 1 76 00 00 .faraddr $76 +000C2Dr 1 77 00 00 .faraddr $77 +000C30r 1 78 00 00 .faraddr $78 +000C33r 1 79 00 00 .faraddr $79 +000C36r 1 7A 00 00 .faraddr $7a +000C39r 1 7B 00 00 .faraddr $7b +000C3Cr 1 7C 00 00 .faraddr $7c +000C3Fr 1 7D 00 00 .faraddr $7d +000C42r 1 7E 00 00 .faraddr $7e +000C45r 1 7F 00 00 .faraddr $7f +000C48r 1 80 00 00 .faraddr $80 +000C4Br 1 81 00 00 .faraddr $81 +000C4Er 1 82 00 00 .faraddr $82 +000C51r 1 83 00 00 .faraddr $83 +000C54r 1 84 00 00 .faraddr $84 +000C57r 1 85 00 00 .faraddr $85 +000C5Ar 1 86 00 00 .faraddr $86 +000C5Dr 1 F0 00 00 .faraddr $f0 +000C60r 1 F1 00 00 .faraddr $f1 +000C63r 1 F2 00 00 .faraddr $f2 +000C66r 1 F3 00 00 .faraddr $f3 +000C69r 1 F4 00 00 .faraddr $f4 +000C6Cr 1 F5 00 00 .faraddr $f5 +000C6Fr 1 F6 00 00 .faraddr $f6 +000C72r 1 F7 00 00 .faraddr $f7 +000C75r 1 F8 00 00 .faraddr $f8 +000C78r 1 F9 00 00 .faraddr $f9 +000C7Br 1 FA 00 00 .faraddr $fa +000C7Er 1 FB 00 00 .faraddr $fb +000C81r 1 FC 00 00 .faraddr $fc +000C84r 1 FD 00 00 .faraddr $fd +000C87r 1 FE 00 00 .faraddr $fe +000C8Ar 1 FF 00 00 .faraddr $ff +000C8Dr 1 00 01 00 .faraddr $100 +000C90r 1 01 01 00 .faraddr $101 +000C93r 1 02 01 00 .faraddr $102 +000C96r 1 03 01 00 .faraddr $103 +000C99r 1 D2 0F 00 .faraddr $fd2 +000C9Cr 1 D3 0F 00 .faraddr $fd3 +000C9Fr 1 D4 0F 00 .faraddr $fd4 +000CA2r 1 D5 0F 00 .faraddr $fd5 +000CA5r 1 D6 0F 00 .faraddr $fd6 +000CA8r 1 D7 0F 00 .faraddr $fd7 +000CABr 1 D8 0F 00 .faraddr $fd8 +000CAEr 1 D9 0F 00 .faraddr $fd9 +000CB1r 1 DA 0F 00 .faraddr $fda +000CB4r 1 DB 0F 00 .faraddr $fdb +000CB7r 1 DC 0F 00 .faraddr $fdc +000CBAr 1 DD 0F 00 .faraddr $fdd +000CBDr 1 DE 0F 00 .faraddr $fde +000CC0r 1 DF 0F 00 .faraddr $fdf +000CC3r 1 E0 0F 00 .faraddr $fe0 +000CC6r 1 E1 0F 00 .faraddr $fe1 +000CC9r 1 E2 0F 00 .faraddr $fe2 +000CCCr 1 E3 0F 00 .faraddr $fe3 +000CCFr 1 E4 0F 00 .faraddr $fe4 +000CD2r 1 E5 0F 00 .faraddr $fe5 +000CD5r 1 E6 0F 00 .faraddr $fe6 +000CD8r 1 E7 0F 00 .faraddr $fe7 +000CDBr 1 E8 0F 00 .faraddr $fe8 +000CDEr 1 E9 0F 00 .faraddr $fe9 +000CE1r 1 EA 0F 00 .faraddr $fea +000CE4r 1 EB 0F 00 .faraddr $feb +000CE7r 1 EC 0F 00 .faraddr $fec +000CEAr 1 ED 0F 00 .faraddr $fed +000CEDr 1 EE 0F 00 .faraddr $fee +000CF0r 1 EF 0F 00 .faraddr $fef +000CF3r 1 F0 0F 00 .faraddr $ff0 +000CF6r 1 F1 0F 00 .faraddr $ff1 +000CF9r 1 F2 0F 00 .faraddr $ff2 +000CFCr 1 F3 0F 00 .faraddr $ff3 +000CFFr 1 F4 0F 00 .faraddr $ff4 +000D02r 1 F5 0F 00 .faraddr $ff5 +000D05r 1 F6 0F 00 .faraddr $ff6 +000D08r 1 F7 0F 00 .faraddr $ff7 +000D0Br 1 F8 0F 00 .faraddr $ff8 +000D0Er 1 F9 0F 00 .faraddr $ff9 +000D11r 1 FA 0F 00 .faraddr $ffa +000D14r 1 FB 0F 00 .faraddr $ffb +000D17r 1 FC 0F 00 .faraddr $ffc +000D1Ar 1 FD 0F 00 .faraddr $ffd +000D1Dr 1 FE 0F 00 .faraddr $ffe +000D20r 1 FF 0F 00 .faraddr $fff +000D23r 1 00 10 00 .faraddr $1000 +000D26r 1 01 10 00 .faraddr $1001 +000D29r 1 02 10 00 .faraddr $1002 +000D2Cr 1 03 10 00 .faraddr $1003 +000D2Fr 1 04 10 00 .faraddr $1004 +000D32r 1 05 10 00 .faraddr $1005 +000D35r 1 06 10 00 .faraddr $1006 +000D38r 1 07 10 00 .faraddr $1007 +000D3Br 1 08 10 00 .faraddr $1008 +000D3Er 1 F0 7F 00 .faraddr $7ff0 +000D41r 1 F1 7F 00 .faraddr $7ff1 +000D44r 1 F2 7F 00 .faraddr $7ff2 +000D47r 1 F3 7F 00 .faraddr $7ff3 +000D4Ar 1 F4 7F 00 .faraddr $7ff4 +000D4Dr 1 F5 7F 00 .faraddr $7ff5 +000D50r 1 F6 7F 00 .faraddr $7ff6 +000D53r 1 F7 7F 00 .faraddr $7ff7 +000D56r 1 F8 7F 00 .faraddr $7ff8 +000D59r 1 F9 7F 00 .faraddr $7ff9 +000D5Cr 1 FA 7F 00 .faraddr $7ffa +000D5Fr 1 FB 7F 00 .faraddr $7ffb +000D62r 1 FC 7F 00 .faraddr $7ffc +000D65r 1 FD 7F 00 .faraddr $7ffd +000D68r 1 FE 7F 00 .faraddr $7ffe +000D6Br 1 FF 7F 00 .faraddr $7fff +000D6Er 1 00 80 00 .faraddr $8000 +000D71r 1 01 80 00 .faraddr $8001 +000D74r 1 02 80 00 .faraddr $8002 +000D77r 1 03 80 00 .faraddr $8003 +000D7Ar 1 04 80 00 .faraddr $8004 +000D7Dr 1 05 80 00 .faraddr $8005 +000D80r 1 06 80 00 .faraddr $8006 +000D83r 1 07 80 00 .faraddr $8007 +000D86r 1 08 80 00 .faraddr $8008 +000D89r 1 09 80 00 .faraddr $8009 +000D8Cr 1 0A 80 00 .faraddr $800a +000D8Fr 1 0B 80 00 .faraddr $800b +000D92r 1 E1 9F 00 .faraddr $9fe1 +000D95r 1 E2 9F 00 .faraddr $9fe2 +000D98r 1 E3 9F 00 .faraddr $9fe3 +000D9Br 1 E4 9F 00 .faraddr $9fe4 +000D9Er 1 E5 9F 00 .faraddr $9fe5 +000DA1r 1 E6 9F 00 .faraddr $9fe6 +000DA4r 1 E7 9F 00 .faraddr $9fe7 +000DA7r 1 E8 9F 00 .faraddr $9fe8 +000DAAr 1 E9 9F 00 .faraddr $9fe9 +000DADr 1 EA 9F 00 .faraddr $9fea +000DB0r 1 EB 9F 00 .faraddr $9feb +000DB3r 1 EC 9F 00 .faraddr $9fec +000DB6r 1 ED 9F 00 .faraddr $9fed +000DB9r 1 EE 9F 00 .faraddr $9fee +000DBCr 1 EF 9F 00 .faraddr $9fef +000DBFr 1 F0 9F 00 .faraddr $9ff0 +000DC2r 1 F1 9F 00 .faraddr $9ff1 +000DC5r 1 F2 9F 00 .faraddr $9ff2 +000DC8r 1 F3 9F 00 .faraddr $9ff3 +000DCBr 1 F4 9F 00 .faraddr $9ff4 +000DCEr 1 F5 9F 00 .faraddr $9ff5 +000DD1r 1 F6 9F 00 .faraddr $9ff6 +000DD4r 1 F7 9F 00 .faraddr $9ff7 +000DD7r 1 F8 9F 00 .faraddr $9ff8 +000DDAr 1 F9 9F 00 .faraddr $9ff9 +000DDDr 1 FA 9F 00 .faraddr $9ffa +000DE0r 1 FB 9F 00 .faraddr $9ffb +000DE3r 1 FC 9F 00 .faraddr $9ffc +000DE6r 1 FD 9F 00 .faraddr $9ffd +000DE9r 1 FE 9F 00 .faraddr $9ffe +000DECr 1 FF 9F 00 .faraddr $9fff +000DEFr 1 00 A0 00 .faraddr $a000 +000DF2r 1 01 A0 00 .faraddr $a001 +000DF5r 1 02 A0 00 .faraddr $a002 +000DF8r 1 03 A0 00 .faraddr $a003 +000DFBr 1 04 A0 00 .faraddr $a004 +000DFEr 1 05 A0 00 .faraddr $a005 +000E01r 1 06 A0 00 .faraddr $a006 +000E04r 1 07 A0 00 .faraddr $a007 +000E07r 1 08 A0 00 .faraddr $a008 +000E0Ar 1 09 A0 00 .faraddr $a009 +000E0Dr 1 0A A0 00 .faraddr $a00a +000E10r 1 0B A0 00 .faraddr $a00b +000E13r 1 0C A0 00 .faraddr $a00c +000E16r 1 0D A0 00 .faraddr $a00d +000E19r 1 0E A0 00 .faraddr $a00e +000E1Cr 1 0F A0 00 .faraddr $a00f +000E1Fr 1 E1 AF 00 .faraddr $afe1 +000E22r 1 E2 AF 00 .faraddr $afe2 +000E25r 1 E3 AF 00 .faraddr $afe3 +000E28r 1 E4 AF 00 .faraddr $afe4 +000E2Br 1 E5 AF 00 .faraddr $afe5 +000E2Er 1 E6 AF 00 .faraddr $afe6 +000E31r 1 E7 AF 00 .faraddr $afe7 +000E34r 1 E8 AF 00 .faraddr $afe8 +000E37r 1 E9 AF 00 .faraddr $afe9 +000E3Ar 1 EA AF 00 .faraddr $afea +000E3Dr 1 EB AF 00 .faraddr $afeb +000E40r 1 EC AF 00 .faraddr $afec +000E43r 1 ED AF 00 .faraddr $afed +000E46r 1 EE AF 00 .faraddr $afee +000E49r 1 EF AF 00 .faraddr $afef +000E4Cr 1 F0 AF 00 .faraddr $aff0 +000E4Fr 1 F1 AF 00 .faraddr $aff1 +000E52r 1 F2 AF 00 .faraddr $aff2 +000E55r 1 F3 AF 00 .faraddr $aff3 +000E58r 1 F4 AF 00 .faraddr $aff4 +000E5Br 1 F5 AF 00 .faraddr $aff5 +000E5Er 1 F6 AF 00 .faraddr $aff6 +000E61r 1 F7 AF 00 .faraddr $aff7 +000E64r 1 F8 AF 00 .faraddr $aff8 +000E67r 1 F9 AF 00 .faraddr $aff9 +000E6Ar 1 FA AF 00 .faraddr $affa +000E6Dr 1 FB AF 00 .faraddr $affb +000E70r 1 FC AF 00 .faraddr $affc +000E73r 1 FD AF 00 .faraddr $affd +000E76r 1 FE AF 00 .faraddr $affe +000E79r 1 FF AF 00 .faraddr $afff +000E7Cr 1 00 B0 00 .faraddr $b000 +000E7Fr 1 01 B0 00 .faraddr $b001 +000E82r 1 02 B0 00 .faraddr $b002 +000E85r 1 03 B0 00 .faraddr $b003 +000E88r 1 04 B0 00 .faraddr $b004 +000E8Br 1 05 B0 00 .faraddr $b005 +000E8Er 1 06 B0 00 .faraddr $b006 +000E91r 1 07 B0 00 .faraddr $b007 +000E94r 1 08 B0 00 .faraddr $b008 +000E97r 1 09 B0 00 .faraddr $b009 +000E9Ar 1 0A B0 00 .faraddr $b00a +000E9Dr 1 0B B0 00 .faraddr $b00b +000EA0r 1 0C B0 00 .faraddr $b00c +000EA3r 1 0D B0 00 .faraddr $b00d +000EA6r 1 0E B0 00 .faraddr $b00e +000EA9r 1 0F B0 00 .faraddr $b00f +000EACr 1 E1 FF 00 .faraddr $ffe1 +000EAFr 1 E2 FF 00 .faraddr $ffe2 +000EB2r 1 E3 FF 00 .faraddr $ffe3 +000EB5r 1 E4 FF 00 .faraddr $ffe4 +000EB8r 1 E5 FF 00 .faraddr $ffe5 +000EBBr 1 E6 FF 00 .faraddr $ffe6 +000EBEr 1 E7 FF 00 .faraddr $ffe7 +000EC1r 1 E8 FF 00 .faraddr $ffe8 +000EC4r 1 E9 FF 00 .faraddr $ffe9 +000EC7r 1 EA FF 00 .faraddr $ffea +000ECAr 1 EB FF 00 .faraddr $ffeb +000ECDr 1 EC FF 00 .faraddr $ffec +000ED0r 1 ED FF 00 .faraddr $ffed +000ED3r 1 EE FF 00 .faraddr $ffee +000ED6r 1 EF FF 00 .faraddr $ffef +000ED9r 1 F0 FF 00 .faraddr $fff0 +000EDCr 1 F1 FF 00 .faraddr $fff1 +000EDFr 1 F2 FF 00 .faraddr $fff2 +000EE2r 1 F3 FF 00 .faraddr $fff3 +000EE5r 1 F4 FF 00 .faraddr $fff4 +000EE8r 1 F5 FF 00 .faraddr $fff5 +000EEBr 1 F6 FF 00 .faraddr $fff6 +000EEEr 1 F7 FF 00 .faraddr $fff7 +000EF1r 1 F8 FF 00 .faraddr $fff8 +000EF4r 1 F9 FF 00 .faraddr $fff9 +000EF7r 1 FA FF 00 .faraddr $fffa +000EFAr 1 FB FF 00 .faraddr $fffb +000EFDr 1 FC FF 00 .faraddr $fffc +000F00r 1 FD FF 00 .faraddr $fffd +000F03r 1 FE FF 00 .faraddr $fffe +000F06r 1 FF FF 00 .faraddr $ffff +000F09r 1 00 00 01 .faraddr $10000 +000F0Cr 1 01 00 01 .faraddr $10001 +000F0Fr 1 02 00 01 .faraddr $10002 +000F12r 1 03 00 01 .faraddr $10003 +000F15r 1 04 00 01 .faraddr $10004 +000F18r 1 05 00 01 .faraddr $10005 +000F1Br 1 06 00 01 .faraddr $10006 +000F1Er 1 07 00 01 .faraddr $10007 +000F21r 1 08 00 01 .faraddr $10008 +000F24r 1 09 00 01 .faraddr $10009 +000F27r 1 0A 00 01 .faraddr $1000a +000F2Ar 1 0B 00 01 .faraddr $1000b +000F2Dr 1 0C 00 01 .faraddr $1000c +000F30r 1 0D 00 01 .faraddr $1000d +000F33r 1 0E 00 01 .faraddr $1000e +000F36r 1 0F 00 01 .faraddr $1000f +000F39r 1 E1 FF 10 .faraddr $10ffe1 +000F3Cr 1 E2 FF 10 .faraddr $10ffe2 +000F3Fr 1 E3 FF 10 .faraddr $10ffe3 +000F42r 1 E4 FF 10 .faraddr $10ffe4 +000F45r 1 E5 FF 10 .faraddr $10ffe5 +000F48r 1 E6 FF 10 .faraddr $10ffe6 +000F4Br 1 E7 FF 10 .faraddr $10ffe7 +000F4Er 1 E8 FF 10 .faraddr $10ffe8 +000F51r 1 E9 FF 10 .faraddr $10ffe9 +000F54r 1 EA FF 10 .faraddr $10ffea +000F57r 1 EB FF 10 .faraddr $10ffeb +000F5Ar 1 EC FF 10 .faraddr $10ffec +000F5Dr 1 ED FF 10 .faraddr $10ffed +000F60r 1 EE FF 10 .faraddr $10ffee +000F63r 1 EF FF 10 .faraddr $10ffef +000F66r 1 F0 FF 10 .faraddr $10fff0 +000F69r 1 F1 FF 10 .faraddr $10fff1 +000F6Cr 1 F2 FF 10 .faraddr $10fff2 +000F6Fr 1 F3 FF 10 .faraddr $10fff3 +000F72r 1 F4 FF 10 .faraddr $10fff4 +000F75r 1 F5 FF 10 .faraddr $10fff5 +000F78r 1 F6 FF 10 .faraddr $10fff6 +000F7Br 1 F7 FF 10 .faraddr $10fff7 +000F7Er 1 F8 FF 10 .faraddr $10fff8 +000F81r 1 F9 FF 10 .faraddr $10fff9 +000F84r 1 FA FF 10 .faraddr $10fffa +000F87r 1 FB FF 10 .faraddr $10fffb +000F8Ar 1 FC FF 10 .faraddr $10fffc +000F8Dr 1 FD FF 10 .faraddr $10fffd +000F90r 1 FE FF 10 .faraddr $10fffe +000F93r 1 FF FF 10 .faraddr $10ffff +000F96r 1 00 00 11 .faraddr $110000 +000F99r 1 01 00 11 .faraddr $110001 +000F9Cr 1 02 00 11 .faraddr $110002 +000F9Fr 1 03 00 11 .faraddr $110003 +000FA2r 1 04 00 11 .faraddr $110004 +000FA5r 1 05 00 11 .faraddr $110005 +000FA8r 1 06 00 11 .faraddr $110006 +000FABr 1 07 00 11 .faraddr $110007 +000FAEr 1 08 00 11 .faraddr $110008 +000FB1r 1 09 00 11 .faraddr $110009 +000FB4r 1 0A 00 11 .faraddr $11000a +000FB7r 1 0B 00 11 .faraddr $11000b +000FBAr 1 0C 00 11 .faraddr $11000c +000FBDr 1 0D 00 11 .faraddr $11000d +000FC0r 1 0E 00 11 .faraddr $11000e +000FC3r 1 0F 00 11 .faraddr $11000f +000FC6r 1 E1 FF 20 .faraddr $20ffe1 +000FC9r 1 E2 FF 20 .faraddr $20ffe2 +000FCCr 1 E3 FF 20 .faraddr $20ffe3 +000FCFr 1 E4 FF 20 .faraddr $20ffe4 +000FD2r 1 E5 FF 20 .faraddr $20ffe5 +000FD5r 1 E6 FF 20 .faraddr $20ffe6 +000FD8r 1 E7 FF 20 .faraddr $20ffe7 +000FDBr 1 E8 FF 20 .faraddr $20ffe8 +000FDEr 1 E9 FF 20 .faraddr $20ffe9 +000FE1r 1 EA FF 20 .faraddr $20ffea +000FE4r 1 EB FF 20 .faraddr $20ffeb +000FE7r 1 EC FF 20 .faraddr $20ffec +000FEAr 1 ED FF 20 .faraddr $20ffed +000FEDr 1 EE FF 20 .faraddr $20ffee +000FF0r 1 EF FF 20 .faraddr $20ffef +000FF3r 1 F0 FF 20 .faraddr $20fff0 +000FF6r 1 F1 FF 20 .faraddr $20fff1 +000FF9r 1 F2 FF 20 .faraddr $20fff2 +000FFCr 1 F3 FF 20 .faraddr $20fff3 +000FFFr 1 F4 FF 20 .faraddr $20fff4 +001002r 1 F5 FF 20 .faraddr $20fff5 +001005r 1 F6 FF 20 .faraddr $20fff6 +001008r 1 F7 FF 20 .faraddr $20fff7 +00100Br 1 F8 FF 20 .faraddr $20fff8 +00100Er 1 F9 FF 20 .faraddr $20fff9 +001011r 1 FA FF 20 .faraddr $20fffa +001014r 1 FB FF 20 .faraddr $20fffb +001017r 1 FC FF 20 .faraddr $20fffc +00101Ar 1 FD FF 20 .faraddr $20fffd +00101Dr 1 FE FF 20 .faraddr $20fffe +001020r 1 FF FF 20 .faraddr $20ffff +001023r 1 00 00 21 .faraddr $210000 +001026r 1 01 00 21 .faraddr $210001 +001029r 1 02 00 21 .faraddr $210002 +00102Cr 1 03 00 21 .faraddr $210003 +00102Fr 1 04 00 21 .faraddr $210004 +001032r 1 05 00 21 .faraddr $210005 +001035r 1 06 00 21 .faraddr $210006 +001038r 1 07 00 21 .faraddr $210007 +00103Br 1 08 00 21 .faraddr $210008 +00103Er 1 09 00 21 .faraddr $210009 +001041r 1 0A 00 21 .faraddr $21000a +001044r 1 0B 00 21 .faraddr $21000b +001047r 1 0C 00 21 .faraddr $21000c +00104Ar 1 0D 00 21 .faraddr $21000d +00104Dr 1 0E 00 21 .faraddr $21000e +001050r 1 0F 00 21 .faraddr $21000f +001053r 1 E1 FF 7F .faraddr $7fffe1 +001056r 1 E2 FF 7F .faraddr $7fffe2 +001059r 1 E3 FF 7F .faraddr $7fffe3 +00105Cr 1 E4 FF 7F .faraddr $7fffe4 +00105Fr 1 E5 FF 7F .faraddr $7fffe5 +001062r 1 E6 FF 7F .faraddr $7fffe6 +001065r 1 E7 FF 7F .faraddr $7fffe7 +001068r 1 E8 FF 7F .faraddr $7fffe8 +00106Br 1 E9 FF 7F .faraddr $7fffe9 +00106Er 1 EA FF 7F .faraddr $7fffea +001071r 1 EB FF 7F .faraddr $7fffeb +001074r 1 EC FF 7F .faraddr $7fffec +001077r 1 ED FF 7F .faraddr $7fffed +00107Ar 1 EE FF 7F .faraddr $7fffee +00107Dr 1 EF FF 7F .faraddr $7fffef +001080r 1 F0 FF 7F .faraddr $7ffff0 +001083r 1 F1 FF 7F .faraddr $7ffff1 +001086r 1 F2 FF 7F .faraddr $7ffff2 +001089r 1 F3 FF 7F .faraddr $7ffff3 +00108Cr 1 F4 FF 7F .faraddr $7ffff4 +00108Fr 1 F5 FF 7F .faraddr $7ffff5 +001092r 1 F6 FF 7F .faraddr $7ffff6 +001095r 1 F7 FF 7F .faraddr $7ffff7 +001098r 1 F8 FF 7F .faraddr $7ffff8 +00109Br 1 F9 FF 7F .faraddr $7ffff9 +00109Er 1 FA FF 7F .faraddr $7ffffa +0010A1r 1 FB FF 7F .faraddr $7ffffb +0010A4r 1 FC FF 7F .faraddr $7ffffc +0010A7r 1 FD FF 7F .faraddr $7ffffd +0010AAr 1 FE FF 7F .faraddr $7ffffe +0010ADr 1 FF FF 7F .faraddr $7fffff +0010B0r 1 00 00 80 .faraddr $800000 +0010B3r 1 01 00 80 .faraddr $800001 +0010B6r 1 02 00 80 .faraddr $800002 +0010B9r 1 03 00 80 .faraddr $800003 +0010BCr 1 04 00 80 .faraddr $800004 +0010BFr 1 05 00 80 .faraddr $800005 +0010C2r 1 06 00 80 .faraddr $800006 +0010C5r 1 07 00 80 .faraddr $800007 +0010C8r 1 08 00 80 .faraddr $800008 +0010CBr 1 09 00 80 .faraddr $800009 +0010CEr 1 0A 00 80 .faraddr $80000a +0010D1r 1 0B 00 80 .faraddr $80000b +0010D4r 1 0C 00 80 .faraddr $80000c +0010D7r 1 0D 00 80 .faraddr $80000d +0010DAr 1 0E 00 80 .faraddr $80000e +0010DDr 1 0F 00 80 .faraddr $80000f +0010E0r 1 E1 FF 9F .faraddr $9fffe1 +0010E3r 1 E2 FF 9F .faraddr $9fffe2 +0010E6r 1 E3 FF 9F .faraddr $9fffe3 +0010E9r 1 E4 FF 9F .faraddr $9fffe4 +0010ECr 1 E5 FF 9F .faraddr $9fffe5 +0010EFr 1 E6 FF 9F .faraddr $9fffe6 +0010F2r 1 E7 FF 9F .faraddr $9fffe7 +0010F5r 1 E8 FF 9F .faraddr $9fffe8 +0010F8r 1 E9 FF 9F .faraddr $9fffe9 +0010FBr 1 EA FF 9F .faraddr $9fffea +0010FEr 1 EB FF 9F .faraddr $9fffeb +001101r 1 EC FF 9F .faraddr $9fffec +001104r 1 ED FF 9F .faraddr $9fffed +001107r 1 EE FF 9F .faraddr $9fffee +00110Ar 1 EF FF 9F .faraddr $9fffef +00110Dr 1 F0 FF 9F .faraddr $9ffff0 +001110r 1 F1 FF 9F .faraddr $9ffff1 +001113r 1 F2 FF 9F .faraddr $9ffff2 +001116r 1 F3 FF 9F .faraddr $9ffff3 +001119r 1 F4 FF 9F .faraddr $9ffff4 +00111Cr 1 F5 FF 9F .faraddr $9ffff5 +00111Fr 1 F6 FF 9F .faraddr $9ffff6 +001122r 1 F7 FF 9F .faraddr $9ffff7 +001125r 1 F8 FF 9F .faraddr $9ffff8 +001128r 1 F9 FF 9F .faraddr $9ffff9 +00112Br 1 FA FF 9F .faraddr $9ffffa +00112Er 1 FB FF 9F .faraddr $9ffffb +001131r 1 FC FF 9F .faraddr $9ffffc +001134r 1 FD FF 9F .faraddr $9ffffd +001137r 1 FE FF 9F .faraddr $9ffffe +00113Ar 1 FF FF 9F .faraddr $9fffff +00113Dr 1 00 00 A0 .faraddr $a00000 +001140r 1 01 00 A0 .faraddr $a00001 +001143r 1 02 00 A0 .faraddr $a00002 +001146r 1 03 00 A0 .faraddr $a00003 +001149r 1 04 00 A0 .faraddr $a00004 +00114Cr 1 05 00 A0 .faraddr $a00005 +00114Fr 1 06 00 A0 .faraddr $a00006 +001152r 1 07 00 A0 .faraddr $a00007 +001155r 1 08 00 A0 .faraddr $a00008 +001158r 1 09 00 A0 .faraddr $a00009 +00115Br 1 0A 00 A0 .faraddr $a0000a +00115Er 1 0B 00 A0 .faraddr $a0000b +001161r 1 0C 00 A0 .faraddr $a0000c +001164r 1 0D 00 A0 .faraddr $a0000d +001167r 1 0E 00 A0 .faraddr $a0000e +00116Ar 1 0F 00 A0 .faraddr $a0000f +00116Dr 1 E1 FF FF .faraddr $ffffe1 +001170r 1 E2 FF FF .faraddr $ffffe2 +001173r 1 E3 FF FF .faraddr $ffffe3 +001176r 1 E4 FF FF .faraddr $ffffe4 +001179r 1 E5 FF FF .faraddr $ffffe5 +00117Cr 1 E6 FF FF .faraddr $ffffe6 +00117Fr 1 E7 FF FF .faraddr $ffffe7 +001182r 1 E8 FF FF .faraddr $ffffe8 +001185r 1 E9 FF FF .faraddr $ffffe9 +001188r 1 EA FF FF .faraddr $ffffea +00118Br 1 EB FF FF .faraddr $ffffeb +00118Er 1 EC FF FF .faraddr $ffffec +001191r 1 ED FF FF .faraddr $ffffed +001194r 1 EE FF FF .faraddr $ffffee +001197r 1 EF FF FF .faraddr $ffffef +00119Ar 1 F0 FF FF .faraddr $fffff0 +00119Dr 1 F1 FF FF .faraddr $fffff1 +0011A0r 1 F2 FF FF .faraddr $fffff2 +0011A3r 1 F3 FF FF .faraddr $fffff3 +0011A6r 1 F4 FF FF .faraddr $fffff4 +0011A9r 1 F5 FF FF .faraddr $fffff5 +0011ACr 1 F6 FF FF .faraddr $fffff6 +0011AFr 1 F7 FF FF .faraddr $fffff7 +0011B2r 1 F8 FF FF .faraddr $fffff8 +0011B5r 1 F9 FF FF .faraddr $fffff9 +0011B8r 1 FA FF FF .faraddr $fffffa +0011BBr 1 FB FF FF .faraddr $fffffb +0011BEr 1 FC FF FF .faraddr $fffffc +0011C1r 1 FD FF FF .faraddr $fffffd +0011C4r 1 FE FF FF .faraddr $fffffe +0011C7r 1 FF FF FF .faraddr $ffffff +0011CAr 1 +0011CAr 1 ; hex values, uppercase +0011CAr 1 00 00 00 .faraddr $0 +0011CDr 1 01 00 00 .faraddr $1 +0011D0r 1 02 00 00 .faraddr $2 +0011D3r 1 03 00 00 .faraddr $3 +0011D6r 1 04 00 00 .faraddr $4 +0011D9r 1 05 00 00 .faraddr $5 +0011DCr 1 06 00 00 .faraddr $6 +0011DFr 1 07 00 00 .faraddr $7 +0011E2r 1 08 00 00 .faraddr $8 +0011E5r 1 09 00 00 .faraddr $9 +0011E8r 1 0A 00 00 .faraddr $A +0011EBr 1 0B 00 00 .faraddr $B +0011EEr 1 0C 00 00 .faraddr $C +0011F1r 1 0D 00 00 .faraddr $D +0011F4r 1 0E 00 00 .faraddr $E +0011F7r 1 0F 00 00 .faraddr $F +0011FAr 1 10 00 00 .faraddr $10 +0011FDr 1 11 00 00 .faraddr $11 +001200r 1 12 00 00 .faraddr $12 +001203r 1 13 00 00 .faraddr $13 +001206r 1 70 00 00 .faraddr $70 +001209r 1 71 00 00 .faraddr $71 +00120Cr 1 72 00 00 .faraddr $72 +00120Fr 1 73 00 00 .faraddr $73 +001212r 1 74 00 00 .faraddr $74 +001215r 1 75 00 00 .faraddr $75 +001218r 1 76 00 00 .faraddr $76 +00121Br 1 77 00 00 .faraddr $77 +00121Er 1 78 00 00 .faraddr $78 +001221r 1 79 00 00 .faraddr $79 +001224r 1 7A 00 00 .faraddr $7A +001227r 1 7B 00 00 .faraddr $7B +00122Ar 1 7C 00 00 .faraddr $7C +00122Dr 1 7D 00 00 .faraddr $7D +001230r 1 7E 00 00 .faraddr $7E +001233r 1 7F 00 00 .faraddr $7F +001236r 1 80 00 00 .faraddr $80 +001239r 1 81 00 00 .faraddr $81 +00123Cr 1 82 00 00 .faraddr $82 +00123Fr 1 83 00 00 .faraddr $83 +001242r 1 84 00 00 .faraddr $84 +001245r 1 85 00 00 .faraddr $85 +001248r 1 86 00 00 .faraddr $86 +00124Br 1 F0 00 00 .faraddr $F0 +00124Er 1 F1 00 00 .faraddr $F1 +001251r 1 F2 00 00 .faraddr $F2 +001254r 1 F3 00 00 .faraddr $F3 +001257r 1 F4 00 00 .faraddr $F4 +00125Ar 1 F5 00 00 .faraddr $F5 +00125Dr 1 F6 00 00 .faraddr $F6 +001260r 1 F7 00 00 .faraddr $F7 +001263r 1 F8 00 00 .faraddr $F8 +001266r 1 F9 00 00 .faraddr $F9 +001269r 1 FA 00 00 .faraddr $FA +00126Cr 1 FB 00 00 .faraddr $FB +00126Fr 1 FC 00 00 .faraddr $FC +001272r 1 FD 00 00 .faraddr $FD +001275r 1 FE 00 00 .faraddr $FE +001278r 1 FF 00 00 .faraddr $FF +00127Br 1 00 01 00 .faraddr $100 +00127Er 1 01 01 00 .faraddr $101 +001281r 1 02 01 00 .faraddr $102 +001284r 1 03 01 00 .faraddr $103 +001287r 1 D2 0F 00 .faraddr $FD2 +00128Ar 1 D3 0F 00 .faraddr $FD3 +00128Dr 1 D4 0F 00 .faraddr $FD4 +001290r 1 D5 0F 00 .faraddr $FD5 +001293r 1 D6 0F 00 .faraddr $FD6 +001296r 1 D7 0F 00 .faraddr $FD7 +001299r 1 D8 0F 00 .faraddr $FD8 +00129Cr 1 D9 0F 00 .faraddr $FD9 +00129Fr 1 DA 0F 00 .faraddr $FDA +0012A2r 1 DB 0F 00 .faraddr $FDB +0012A5r 1 DC 0F 00 .faraddr $FDC +0012A8r 1 DD 0F 00 .faraddr $FDD +0012ABr 1 DE 0F 00 .faraddr $FDE +0012AEr 1 DF 0F 00 .faraddr $FDF +0012B1r 1 E0 0F 00 .faraddr $FE0 +0012B4r 1 E1 0F 00 .faraddr $FE1 +0012B7r 1 E2 0F 00 .faraddr $FE2 +0012BAr 1 E3 0F 00 .faraddr $FE3 +0012BDr 1 E4 0F 00 .faraddr $FE4 +0012C0r 1 E5 0F 00 .faraddr $FE5 +0012C3r 1 E6 0F 00 .faraddr $FE6 +0012C6r 1 E7 0F 00 .faraddr $FE7 +0012C9r 1 E8 0F 00 .faraddr $FE8 +0012CCr 1 E9 0F 00 .faraddr $FE9 +0012CFr 1 EA 0F 00 .faraddr $FEA +0012D2r 1 EB 0F 00 .faraddr $FEB +0012D5r 1 EC 0F 00 .faraddr $FEC +0012D8r 1 ED 0F 00 .faraddr $FED +0012DBr 1 EE 0F 00 .faraddr $FEE +0012DEr 1 EF 0F 00 .faraddr $FEF +0012E1r 1 F0 0F 00 .faraddr $FF0 +0012E4r 1 F1 0F 00 .faraddr $FF1 +0012E7r 1 F2 0F 00 .faraddr $FF2 +0012EAr 1 F3 0F 00 .faraddr $FF3 +0012EDr 1 F4 0F 00 .faraddr $FF4 +0012F0r 1 F5 0F 00 .faraddr $FF5 +0012F3r 1 F6 0F 00 .faraddr $FF6 +0012F6r 1 F7 0F 00 .faraddr $FF7 +0012F9r 1 F8 0F 00 .faraddr $FF8 +0012FCr 1 F9 0F 00 .faraddr $FF9 +0012FFr 1 FA 0F 00 .faraddr $FFA +001302r 1 FB 0F 00 .faraddr $FFB +001305r 1 FC 0F 00 .faraddr $FFC +001308r 1 FD 0F 00 .faraddr $FFD +00130Br 1 FE 0F 00 .faraddr $FFE +00130Er 1 FF 0F 00 .faraddr $FFF +001311r 1 00 10 00 .faraddr $1000 +001314r 1 01 10 00 .faraddr $1001 +001317r 1 02 10 00 .faraddr $1002 +00131Ar 1 03 10 00 .faraddr $1003 +00131Dr 1 04 10 00 .faraddr $1004 +001320r 1 05 10 00 .faraddr $1005 +001323r 1 06 10 00 .faraddr $1006 +001326r 1 07 10 00 .faraddr $1007 +001329r 1 08 10 00 .faraddr $1008 +00132Cr 1 F0 7F 00 .faraddr $7FF0 +00132Fr 1 F1 7F 00 .faraddr $7FF1 +001332r 1 F2 7F 00 .faraddr $7FF2 +001335r 1 F3 7F 00 .faraddr $7FF3 +001338r 1 F4 7F 00 .faraddr $7FF4 +00133Br 1 F5 7F 00 .faraddr $7FF5 +00133Er 1 F6 7F 00 .faraddr $7FF6 +001341r 1 F7 7F 00 .faraddr $7FF7 +001344r 1 F8 7F 00 .faraddr $7FF8 +001347r 1 F9 7F 00 .faraddr $7FF9 +00134Ar 1 FA 7F 00 .faraddr $7FFA +00134Dr 1 FB 7F 00 .faraddr $7FFB +001350r 1 FC 7F 00 .faraddr $7FFC +001353r 1 FD 7F 00 .faraddr $7FFD +001356r 1 FE 7F 00 .faraddr $7FFE +001359r 1 FF 7F 00 .faraddr $7FFF +00135Cr 1 00 80 00 .faraddr $8000 +00135Fr 1 01 80 00 .faraddr $8001 +001362r 1 02 80 00 .faraddr $8002 +001365r 1 03 80 00 .faraddr $8003 +001368r 1 04 80 00 .faraddr $8004 +00136Br 1 05 80 00 .faraddr $8005 +00136Er 1 06 80 00 .faraddr $8006 +001371r 1 07 80 00 .faraddr $8007 +001374r 1 08 80 00 .faraddr $8008 +001377r 1 09 80 00 .faraddr $8009 +00137Ar 1 0A 80 00 .faraddr $800A +00137Dr 1 0B 80 00 .faraddr $800B +001380r 1 E1 9F 00 .faraddr $9FE1 +001383r 1 E2 9F 00 .faraddr $9FE2 +001386r 1 E3 9F 00 .faraddr $9FE3 +001389r 1 E4 9F 00 .faraddr $9FE4 +00138Cr 1 E5 9F 00 .faraddr $9FE5 +00138Fr 1 E6 9F 00 .faraddr $9FE6 +001392r 1 E7 9F 00 .faraddr $9FE7 +001395r 1 E8 9F 00 .faraddr $9FE8 +001398r 1 E9 9F 00 .faraddr $9FE9 +00139Br 1 EA 9F 00 .faraddr $9FEA +00139Er 1 EB 9F 00 .faraddr $9FEB +0013A1r 1 EC 9F 00 .faraddr $9FEC +0013A4r 1 ED 9F 00 .faraddr $9FED +0013A7r 1 EE 9F 00 .faraddr $9FEE +0013AAr 1 EF 9F 00 .faraddr $9FEF +0013ADr 1 F0 9F 00 .faraddr $9FF0 +0013B0r 1 F1 9F 00 .faraddr $9FF1 +0013B3r 1 F2 9F 00 .faraddr $9FF2 +0013B6r 1 F3 9F 00 .faraddr $9FF3 +0013B9r 1 F4 9F 00 .faraddr $9FF4 +0013BCr 1 F5 9F 00 .faraddr $9FF5 +0013BFr 1 F6 9F 00 .faraddr $9FF6 +0013C2r 1 F7 9F 00 .faraddr $9FF7 +0013C5r 1 F8 9F 00 .faraddr $9FF8 +0013C8r 1 F9 9F 00 .faraddr $9FF9 +0013CBr 1 FA 9F 00 .faraddr $9FFA +0013CEr 1 FB 9F 00 .faraddr $9FFB +0013D1r 1 FC 9F 00 .faraddr $9FFC +0013D4r 1 FD 9F 00 .faraddr $9FFD +0013D7r 1 FE 9F 00 .faraddr $9FFE +0013DAr 1 FF 9F 00 .faraddr $9FFF +0013DDr 1 00 A0 00 .faraddr $A000 +0013E0r 1 01 A0 00 .faraddr $A001 +0013E3r 1 02 A0 00 .faraddr $A002 +0013E6r 1 03 A0 00 .faraddr $A003 +0013E9r 1 04 A0 00 .faraddr $A004 +0013ECr 1 05 A0 00 .faraddr $A005 +0013EFr 1 06 A0 00 .faraddr $A006 +0013F2r 1 07 A0 00 .faraddr $A007 +0013F5r 1 08 A0 00 .faraddr $A008 +0013F8r 1 09 A0 00 .faraddr $A009 +0013FBr 1 0A A0 00 .faraddr $A00A +0013FEr 1 0B A0 00 .faraddr $A00B +001401r 1 0C A0 00 .faraddr $A00C +001404r 1 0D A0 00 .faraddr $A00D +001407r 1 0E A0 00 .faraddr $A00E +00140Ar 1 0F A0 00 .faraddr $A00F +00140Dr 1 E1 AF 00 .faraddr $AFE1 +001410r 1 E2 AF 00 .faraddr $AFE2 +001413r 1 E3 AF 00 .faraddr $AFE3 +001416r 1 E4 AF 00 .faraddr $AFE4 +001419r 1 E5 AF 00 .faraddr $AFE5 +00141Cr 1 E6 AF 00 .faraddr $AFE6 +00141Fr 1 E7 AF 00 .faraddr $AFE7 +001422r 1 E8 AF 00 .faraddr $AFE8 +001425r 1 E9 AF 00 .faraddr $AFE9 +001428r 1 EA AF 00 .faraddr $AFEA +00142Br 1 EB AF 00 .faraddr $AFEB +00142Er 1 EC AF 00 .faraddr $AFEC +001431r 1 ED AF 00 .faraddr $AFED +001434r 1 EE AF 00 .faraddr $AFEE +001437r 1 EF AF 00 .faraddr $AFEF +00143Ar 1 F0 AF 00 .faraddr $AFF0 +00143Dr 1 F1 AF 00 .faraddr $AFF1 +001440r 1 F2 AF 00 .faraddr $AFF2 +001443r 1 F3 AF 00 .faraddr $AFF3 +001446r 1 F4 AF 00 .faraddr $AFF4 +001449r 1 F5 AF 00 .faraddr $AFF5 +00144Cr 1 F6 AF 00 .faraddr $AFF6 +00144Fr 1 F7 AF 00 .faraddr $AFF7 +001452r 1 F8 AF 00 .faraddr $AFF8 +001455r 1 F9 AF 00 .faraddr $AFF9 +001458r 1 FA AF 00 .faraddr $AFFA +00145Br 1 FB AF 00 .faraddr $AFFB +00145Er 1 FC AF 00 .faraddr $AFFC +001461r 1 FD AF 00 .faraddr $AFFD +001464r 1 FE AF 00 .faraddr $AFFE +001467r 1 FF AF 00 .faraddr $AFFF +00146Ar 1 00 B0 00 .faraddr $B000 +00146Dr 1 01 B0 00 .faraddr $B001 +001470r 1 02 B0 00 .faraddr $B002 +001473r 1 03 B0 00 .faraddr $B003 +001476r 1 04 B0 00 .faraddr $B004 +001479r 1 05 B0 00 .faraddr $B005 +00147Cr 1 06 B0 00 .faraddr $B006 +00147Fr 1 07 B0 00 .faraddr $B007 +001482r 1 08 B0 00 .faraddr $B008 +001485r 1 09 B0 00 .faraddr $B009 +001488r 1 0A B0 00 .faraddr $B00A +00148Br 1 0B B0 00 .faraddr $B00B +00148Er 1 0C B0 00 .faraddr $B00C +001491r 1 0D B0 00 .faraddr $B00D +001494r 1 0E B0 00 .faraddr $B00E +001497r 1 0F B0 00 .faraddr $B00F +00149Ar 1 E1 FF 00 .faraddr $FFE1 +00149Dr 1 E2 FF 00 .faraddr $FFE2 +0014A0r 1 E3 FF 00 .faraddr $FFE3 +0014A3r 1 E4 FF 00 .faraddr $FFE4 +0014A6r 1 E5 FF 00 .faraddr $FFE5 +0014A9r 1 E6 FF 00 .faraddr $FFE6 +0014ACr 1 E7 FF 00 .faraddr $FFE7 +0014AFr 1 E8 FF 00 .faraddr $FFE8 +0014B2r 1 E9 FF 00 .faraddr $FFE9 +0014B5r 1 EA FF 00 .faraddr $FFEA +0014B8r 1 EB FF 00 .faraddr $FFEB +0014BBr 1 EC FF 00 .faraddr $FFEC +0014BEr 1 ED FF 00 .faraddr $FFED +0014C1r 1 EE FF 00 .faraddr $FFEE +0014C4r 1 EF FF 00 .faraddr $FFEF +0014C7r 1 F0 FF 00 .faraddr $FFF0 +0014CAr 1 F1 FF 00 .faraddr $FFF1 +0014CDr 1 F2 FF 00 .faraddr $FFF2 +0014D0r 1 F3 FF 00 .faraddr $FFF3 +0014D3r 1 F4 FF 00 .faraddr $FFF4 +0014D6r 1 F5 FF 00 .faraddr $FFF5 +0014D9r 1 F6 FF 00 .faraddr $FFF6 +0014DCr 1 F7 FF 00 .faraddr $FFF7 +0014DFr 1 F8 FF 00 .faraddr $FFF8 +0014E2r 1 F9 FF 00 .faraddr $FFF9 +0014E5r 1 FA FF 00 .faraddr $FFFA +0014E8r 1 FB FF 00 .faraddr $FFFB +0014EBr 1 FC FF 00 .faraddr $FFFC +0014EEr 1 FD FF 00 .faraddr $FFFD +0014F1r 1 FE FF 00 .faraddr $FFFE +0014F4r 1 FF FF 00 .faraddr $FFFF +0014F7r 1 00 00 01 .faraddr $10000 +0014FAr 1 01 00 01 .faraddr $10001 +0014FDr 1 02 00 01 .faraddr $10002 +001500r 1 03 00 01 .faraddr $10003 +001503r 1 04 00 01 .faraddr $10004 +001506r 1 05 00 01 .faraddr $10005 +001509r 1 06 00 01 .faraddr $10006 +00150Cr 1 07 00 01 .faraddr $10007 +00150Fr 1 08 00 01 .faraddr $10008 +001512r 1 09 00 01 .faraddr $10009 +001515r 1 0A 00 01 .faraddr $1000A +001518r 1 0B 00 01 .faraddr $1000B +00151Br 1 0C 00 01 .faraddr $1000C +00151Er 1 0D 00 01 .faraddr $1000D +001521r 1 0E 00 01 .faraddr $1000E +001524r 1 0F 00 01 .faraddr $1000F +001527r 1 E1 FF 10 .faraddr $10FFE1 +00152Ar 1 E2 FF 10 .faraddr $10FFE2 +00152Dr 1 E3 FF 10 .faraddr $10FFE3 +001530r 1 E4 FF 10 .faraddr $10FFE4 +001533r 1 E5 FF 10 .faraddr $10FFE5 +001536r 1 E6 FF 10 .faraddr $10FFE6 +001539r 1 E7 FF 10 .faraddr $10FFE7 +00153Cr 1 E8 FF 10 .faraddr $10FFE8 +00153Fr 1 E9 FF 10 .faraddr $10FFE9 +001542r 1 EA FF 10 .faraddr $10FFEA +001545r 1 EB FF 10 .faraddr $10FFEB +001548r 1 EC FF 10 .faraddr $10FFEC +00154Br 1 ED FF 10 .faraddr $10FFED +00154Er 1 EE FF 10 .faraddr $10FFEE +001551r 1 EF FF 10 .faraddr $10FFEF +001554r 1 F0 FF 10 .faraddr $10FFF0 +001557r 1 F1 FF 10 .faraddr $10FFF1 +00155Ar 1 F2 FF 10 .faraddr $10FFF2 +00155Dr 1 F3 FF 10 .faraddr $10FFF3 +001560r 1 F4 FF 10 .faraddr $10FFF4 +001563r 1 F5 FF 10 .faraddr $10FFF5 +001566r 1 F6 FF 10 .faraddr $10FFF6 +001569r 1 F7 FF 10 .faraddr $10FFF7 +00156Cr 1 F8 FF 10 .faraddr $10FFF8 +00156Fr 1 F9 FF 10 .faraddr $10FFF9 +001572r 1 FA FF 10 .faraddr $10FFFA +001575r 1 FB FF 10 .faraddr $10FFFB +001578r 1 FC FF 10 .faraddr $10FFFC +00157Br 1 FD FF 10 .faraddr $10FFFD +00157Er 1 FE FF 10 .faraddr $10FFFE +001581r 1 FF FF 10 .faraddr $10FFFF +001584r 1 00 00 11 .faraddr $110000 +001587r 1 01 00 11 .faraddr $110001 +00158Ar 1 02 00 11 .faraddr $110002 +00158Dr 1 03 00 11 .faraddr $110003 +001590r 1 04 00 11 .faraddr $110004 +001593r 1 05 00 11 .faraddr $110005 +001596r 1 06 00 11 .faraddr $110006 +001599r 1 07 00 11 .faraddr $110007 +00159Cr 1 08 00 11 .faraddr $110008 +00159Fr 1 09 00 11 .faraddr $110009 +0015A2r 1 0A 00 11 .faraddr $11000A +0015A5r 1 0B 00 11 .faraddr $11000B +0015A8r 1 0C 00 11 .faraddr $11000C +0015ABr 1 0D 00 11 .faraddr $11000D +0015AEr 1 0E 00 11 .faraddr $11000E +0015B1r 1 0F 00 11 .faraddr $11000F +0015B4r 1 E1 FF 20 .faraddr $20FFE1 +0015B7r 1 E2 FF 20 .faraddr $20FFE2 +0015BAr 1 E3 FF 20 .faraddr $20FFE3 +0015BDr 1 E4 FF 20 .faraddr $20FFE4 +0015C0r 1 E5 FF 20 .faraddr $20FFE5 +0015C3r 1 E6 FF 20 .faraddr $20FFE6 +0015C6r 1 E7 FF 20 .faraddr $20FFE7 +0015C9r 1 E8 FF 20 .faraddr $20FFE8 +0015CCr 1 E9 FF 20 .faraddr $20FFE9 +0015CFr 1 EA FF 20 .faraddr $20FFEA +0015D2r 1 EB FF 20 .faraddr $20FFEB +0015D5r 1 EC FF 20 .faraddr $20FFEC +0015D8r 1 ED FF 20 .faraddr $20FFED +0015DBr 1 EE FF 20 .faraddr $20FFEE +0015DEr 1 EF FF 20 .faraddr $20FFEF +0015E1r 1 F0 FF 20 .faraddr $20FFF0 +0015E4r 1 F1 FF 20 .faraddr $20FFF1 +0015E7r 1 F2 FF 20 .faraddr $20FFF2 +0015EAr 1 F3 FF 20 .faraddr $20FFF3 +0015EDr 1 F4 FF 20 .faraddr $20FFF4 +0015F0r 1 F5 FF 20 .faraddr $20FFF5 +0015F3r 1 F6 FF 20 .faraddr $20FFF6 +0015F6r 1 F7 FF 20 .faraddr $20FFF7 +0015F9r 1 F8 FF 20 .faraddr $20FFF8 +0015FCr 1 F9 FF 20 .faraddr $20FFF9 +0015FFr 1 FA FF 20 .faraddr $20FFFA +001602r 1 FB FF 20 .faraddr $20FFFB +001605r 1 FC FF 20 .faraddr $20FFFC +001608r 1 FD FF 20 .faraddr $20FFFD +00160Br 1 FE FF 20 .faraddr $20FFFE +00160Er 1 FF FF 20 .faraddr $20FFFF +001611r 1 00 00 21 .faraddr $210000 +001614r 1 01 00 21 .faraddr $210001 +001617r 1 02 00 21 .faraddr $210002 +00161Ar 1 03 00 21 .faraddr $210003 +00161Dr 1 04 00 21 .faraddr $210004 +001620r 1 05 00 21 .faraddr $210005 +001623r 1 06 00 21 .faraddr $210006 +001626r 1 07 00 21 .faraddr $210007 +001629r 1 08 00 21 .faraddr $210008 +00162Cr 1 09 00 21 .faraddr $210009 +00162Fr 1 0A 00 21 .faraddr $21000A +001632r 1 0B 00 21 .faraddr $21000B +001635r 1 0C 00 21 .faraddr $21000C +001638r 1 0D 00 21 .faraddr $21000D +00163Br 1 0E 00 21 .faraddr $21000E +00163Er 1 0F 00 21 .faraddr $21000F +001641r 1 E1 FF 7F .faraddr $7FFFE1 +001644r 1 E2 FF 7F .faraddr $7FFFE2 +001647r 1 E3 FF 7F .faraddr $7FFFE3 +00164Ar 1 E4 FF 7F .faraddr $7FFFE4 +00164Dr 1 E5 FF 7F .faraddr $7FFFE5 +001650r 1 E6 FF 7F .faraddr $7FFFE6 +001653r 1 E7 FF 7F .faraddr $7FFFE7 +001656r 1 E8 FF 7F .faraddr $7FFFE8 +001659r 1 E9 FF 7F .faraddr $7FFFE9 +00165Cr 1 EA FF 7F .faraddr $7FFFEA +00165Fr 1 EB FF 7F .faraddr $7FFFEB +001662r 1 EC FF 7F .faraddr $7FFFEC +001665r 1 ED FF 7F .faraddr $7FFFED +001668r 1 EE FF 7F .faraddr $7FFFEE +00166Br 1 EF FF 7F .faraddr $7FFFEF +00166Er 1 F0 FF 7F .faraddr $7FFFF0 +001671r 1 F1 FF 7F .faraddr $7FFFF1 +001674r 1 F2 FF 7F .faraddr $7FFFF2 +001677r 1 F3 FF 7F .faraddr $7FFFF3 +00167Ar 1 F4 FF 7F .faraddr $7FFFF4 +00167Dr 1 F5 FF 7F .faraddr $7FFFF5 +001680r 1 F6 FF 7F .faraddr $7FFFF6 +001683r 1 F7 FF 7F .faraddr $7FFFF7 +001686r 1 F8 FF 7F .faraddr $7FFFF8 +001689r 1 F9 FF 7F .faraddr $7FFFF9 +00168Cr 1 FA FF 7F .faraddr $7FFFFA +00168Fr 1 FB FF 7F .faraddr $7FFFFB +001692r 1 FC FF 7F .faraddr $7FFFFC +001695r 1 FD FF 7F .faraddr $7FFFFD +001698r 1 FE FF 7F .faraddr $7FFFFE +00169Br 1 FF FF 7F .faraddr $7FFFFF +00169Er 1 00 00 80 .faraddr $800000 +0016A1r 1 01 00 80 .faraddr $800001 +0016A4r 1 02 00 80 .faraddr $800002 +0016A7r 1 03 00 80 .faraddr $800003 +0016AAr 1 04 00 80 .faraddr $800004 +0016ADr 1 05 00 80 .faraddr $800005 +0016B0r 1 06 00 80 .faraddr $800006 +0016B3r 1 07 00 80 .faraddr $800007 +0016B6r 1 08 00 80 .faraddr $800008 +0016B9r 1 09 00 80 .faraddr $800009 +0016BCr 1 0A 00 80 .faraddr $80000A +0016BFr 1 0B 00 80 .faraddr $80000B +0016C2r 1 0C 00 80 .faraddr $80000C +0016C5r 1 0D 00 80 .faraddr $80000D +0016C8r 1 0E 00 80 .faraddr $80000E +0016CBr 1 0F 00 80 .faraddr $80000F +0016CEr 1 E1 FF 9F .faraddr $9FFFE1 +0016D1r 1 E2 FF 9F .faraddr $9FFFE2 +0016D4r 1 E3 FF 9F .faraddr $9FFFE3 +0016D7r 1 E4 FF 9F .faraddr $9FFFE4 +0016DAr 1 E5 FF 9F .faraddr $9FFFE5 +0016DDr 1 E6 FF 9F .faraddr $9FFFE6 +0016E0r 1 E7 FF 9F .faraddr $9FFFE7 +0016E3r 1 E8 FF 9F .faraddr $9FFFE8 +0016E6r 1 E9 FF 9F .faraddr $9FFFE9 +0016E9r 1 EA FF 9F .faraddr $9FFFEA +0016ECr 1 EB FF 9F .faraddr $9FFFEB +0016EFr 1 EC FF 9F .faraddr $9FFFEC +0016F2r 1 ED FF 9F .faraddr $9FFFED +0016F5r 1 EE FF 9F .faraddr $9FFFEE +0016F8r 1 EF FF 9F .faraddr $9FFFEF +0016FBr 1 F0 FF 9F .faraddr $9FFFF0 +0016FEr 1 F1 FF 9F .faraddr $9FFFF1 +001701r 1 F2 FF 9F .faraddr $9FFFF2 +001704r 1 F3 FF 9F .faraddr $9FFFF3 +001707r 1 F4 FF 9F .faraddr $9FFFF4 +00170Ar 1 F5 FF 9F .faraddr $9FFFF5 +00170Dr 1 F6 FF 9F .faraddr $9FFFF6 +001710r 1 F7 FF 9F .faraddr $9FFFF7 +001713r 1 F8 FF 9F .faraddr $9FFFF8 +001716r 1 F9 FF 9F .faraddr $9FFFF9 +001719r 1 FA FF 9F .faraddr $9FFFFA +00171Cr 1 FB FF 9F .faraddr $9FFFFB +00171Fr 1 FC FF 9F .faraddr $9FFFFC +001722r 1 FD FF 9F .faraddr $9FFFFD +001725r 1 FE FF 9F .faraddr $9FFFFE +001728r 1 FF FF 9F .faraddr $9FFFFF +00172Br 1 00 00 A0 .faraddr $A00000 +00172Er 1 01 00 A0 .faraddr $A00001 +001731r 1 02 00 A0 .faraddr $A00002 +001734r 1 03 00 A0 .faraddr $A00003 +001737r 1 04 00 A0 .faraddr $A00004 +00173Ar 1 05 00 A0 .faraddr $A00005 +00173Dr 1 06 00 A0 .faraddr $A00006 +001740r 1 07 00 A0 .faraddr $A00007 +001743r 1 08 00 A0 .faraddr $A00008 +001746r 1 09 00 A0 .faraddr $A00009 +001749r 1 0A 00 A0 .faraddr $A0000A +00174Cr 1 0B 00 A0 .faraddr $A0000B +00174Fr 1 0C 00 A0 .faraddr $A0000C +001752r 1 0D 00 A0 .faraddr $A0000D +001755r 1 0E 00 A0 .faraddr $A0000E +001758r 1 0F 00 A0 .faraddr $A0000F +00175Br 1 E1 FF FF .faraddr $FFFFE1 +00175Er 1 E2 FF FF .faraddr $FFFFE2 +001761r 1 E3 FF FF .faraddr $FFFFE3 +001764r 1 E4 FF FF .faraddr $FFFFE4 +001767r 1 E5 FF FF .faraddr $FFFFE5 +00176Ar 1 E6 FF FF .faraddr $FFFFE6 +00176Dr 1 E7 FF FF .faraddr $FFFFE7 +001770r 1 E8 FF FF .faraddr $FFFFE8 +001773r 1 E9 FF FF .faraddr $FFFFE9 +001776r 1 EA FF FF .faraddr $FFFFEA +001779r 1 EB FF FF .faraddr $FFFFEB +00177Cr 1 EC FF FF .faraddr $FFFFEC +00177Fr 1 ED FF FF .faraddr $FFFFED +001782r 1 EE FF FF .faraddr $FFFFEE +001785r 1 EF FF FF .faraddr $FFFFEF +001788r 1 F0 FF FF .faraddr $FFFFF0 +00178Br 1 F1 FF FF .faraddr $FFFFF1 +00178Er 1 F2 FF FF .faraddr $FFFFF2 +001791r 1 F3 FF FF .faraddr $FFFFF3 +001794r 1 F4 FF FF .faraddr $FFFFF4 +001797r 1 F5 FF FF .faraddr $FFFFF5 +00179Ar 1 F6 FF FF .faraddr $FFFFF6 +00179Dr 1 F7 FF FF .faraddr $FFFFF7 +0017A0r 1 F8 FF FF .faraddr $FFFFF8 +0017A3r 1 F9 FF FF .faraddr $FFFFF9 +0017A6r 1 FA FF FF .faraddr $FFFFFA +0017A9r 1 FB FF FF .faraddr $FFFFFB +0017ACr 1 FC FF FF .faraddr $FFFFFC +0017AFr 1 FD FF FF .faraddr $FFFFFD +0017B2r 1 FE FF FF .faraddr $FFFFFE +0017B5r 1 FF FF FF .faraddr $FFFFFF +0017B8r 1 +0017B8r 1 ; 8-digit hex values +0017B8r 1 00 00 00 .faraddr $00000000 +0017BBr 1 01 00 00 .faraddr $00000001 +0017BEr 1 02 00 00 .faraddr $00000002 +0017C1r 1 03 00 00 .faraddr $00000003 +0017C4r 1 04 00 00 .faraddr $00000004 +0017C7r 1 05 00 00 .faraddr $00000005 +0017CAr 1 06 00 00 .faraddr $00000006 +0017CDr 1 07 00 00 .faraddr $00000007 +0017D0r 1 08 00 00 .faraddr $00000008 +0017D3r 1 09 00 00 .faraddr $00000009 +0017D6r 1 0A 00 00 .faraddr $0000000a +0017D9r 1 0B 00 00 .faraddr $0000000b +0017DCr 1 0C 00 00 .faraddr $0000000c +0017DFr 1 0D 00 00 .faraddr $0000000d +0017E2r 1 0E 00 00 .faraddr $0000000e +0017E5r 1 0F 00 00 .faraddr $0000000f +0017E8r 1 10 00 00 .faraddr $00000010 +0017EBr 1 11 00 00 .faraddr $00000011 +0017EEr 1 12 00 00 .faraddr $00000012 +0017F1r 1 13 00 00 .faraddr $00000013 +0017F4r 1 70 00 00 .faraddr $00000070 +0017F7r 1 71 00 00 .faraddr $00000071 +0017FAr 1 72 00 00 .faraddr $00000072 +0017FDr 1 73 00 00 .faraddr $00000073 +001800r 1 74 00 00 .faraddr $00000074 +001803r 1 75 00 00 .faraddr $00000075 +001806r 1 76 00 00 .faraddr $00000076 +001809r 1 77 00 00 .faraddr $00000077 +00180Cr 1 78 00 00 .faraddr $00000078 +00180Fr 1 79 00 00 .faraddr $00000079 +001812r 1 7A 00 00 .faraddr $0000007a +001815r 1 7B 00 00 .faraddr $0000007b +001818r 1 7C 00 00 .faraddr $0000007c +00181Br 1 7D 00 00 .faraddr $0000007d +00181Er 1 7E 00 00 .faraddr $0000007e +001821r 1 7F 00 00 .faraddr $0000007f +001824r 1 80 00 00 .faraddr $00000080 +001827r 1 81 00 00 .faraddr $00000081 +00182Ar 1 82 00 00 .faraddr $00000082 +00182Dr 1 83 00 00 .faraddr $00000083 +001830r 1 84 00 00 .faraddr $00000084 +001833r 1 85 00 00 .faraddr $00000085 +001836r 1 86 00 00 .faraddr $00000086 +001839r 1 F0 00 00 .faraddr $000000f0 +00183Cr 1 F1 00 00 .faraddr $000000f1 +00183Fr 1 F2 00 00 .faraddr $000000f2 +001842r 1 F3 00 00 .faraddr $000000f3 +001845r 1 F4 00 00 .faraddr $000000f4 +001848r 1 F5 00 00 .faraddr $000000f5 +00184Br 1 F6 00 00 .faraddr $000000f6 +00184Er 1 F7 00 00 .faraddr $000000f7 +001851r 1 F8 00 00 .faraddr $000000f8 +001854r 1 F9 00 00 .faraddr $000000f9 +001857r 1 FA 00 00 .faraddr $000000fa +00185Ar 1 FB 00 00 .faraddr $000000fb +00185Dr 1 FC 00 00 .faraddr $000000fc +001860r 1 FD 00 00 .faraddr $000000fd +001863r 1 FE 00 00 .faraddr $000000fe +001866r 1 FF 00 00 .faraddr $000000ff +001869r 1 00 01 00 .faraddr $00000100 +00186Cr 1 01 01 00 .faraddr $00000101 +00186Fr 1 02 01 00 .faraddr $00000102 +001872r 1 03 01 00 .faraddr $00000103 +001875r 1 D2 0F 00 .faraddr $00000fd2 +001878r 1 D3 0F 00 .faraddr $00000fd3 +00187Br 1 D4 0F 00 .faraddr $00000fd4 +00187Er 1 D5 0F 00 .faraddr $00000fd5 +001881r 1 D6 0F 00 .faraddr $00000fd6 +001884r 1 D7 0F 00 .faraddr $00000fd7 +001887r 1 D8 0F 00 .faraddr $00000fd8 +00188Ar 1 D9 0F 00 .faraddr $00000fd9 +00188Dr 1 DA 0F 00 .faraddr $00000fda +001890r 1 DB 0F 00 .faraddr $00000fdb +001893r 1 DC 0F 00 .faraddr $00000fdc +001896r 1 DD 0F 00 .faraddr $00000fdd +001899r 1 DE 0F 00 .faraddr $00000fde +00189Cr 1 DF 0F 00 .faraddr $00000fdf +00189Fr 1 E0 0F 00 .faraddr $00000fe0 +0018A2r 1 E1 0F 00 .faraddr $00000fe1 +0018A5r 1 E2 0F 00 .faraddr $00000fe2 +0018A8r 1 E3 0F 00 .faraddr $00000fe3 +0018ABr 1 E4 0F 00 .faraddr $00000fe4 +0018AEr 1 E5 0F 00 .faraddr $00000fe5 +0018B1r 1 E6 0F 00 .faraddr $00000fe6 +0018B4r 1 E7 0F 00 .faraddr $00000fe7 +0018B7r 1 E8 0F 00 .faraddr $00000fe8 +0018BAr 1 E9 0F 00 .faraddr $00000fe9 +0018BDr 1 EA 0F 00 .faraddr $00000fea +0018C0r 1 EB 0F 00 .faraddr $00000feb +0018C3r 1 EC 0F 00 .faraddr $00000fec +0018C6r 1 ED 0F 00 .faraddr $00000fed +0018C9r 1 EE 0F 00 .faraddr $00000fee +0018CCr 1 EF 0F 00 .faraddr $00000fef +0018CFr 1 F0 0F 00 .faraddr $00000ff0 +0018D2r 1 F1 0F 00 .faraddr $00000ff1 +0018D5r 1 F2 0F 00 .faraddr $00000ff2 +0018D8r 1 F3 0F 00 .faraddr $00000ff3 +0018DBr 1 F4 0F 00 .faraddr $00000ff4 +0018DEr 1 F5 0F 00 .faraddr $00000ff5 +0018E1r 1 F6 0F 00 .faraddr $00000ff6 +0018E4r 1 F7 0F 00 .faraddr $00000ff7 +0018E7r 1 F8 0F 00 .faraddr $00000ff8 +0018EAr 1 F9 0F 00 .faraddr $00000ff9 +0018EDr 1 FA 0F 00 .faraddr $00000ffa +0018F0r 1 FB 0F 00 .faraddr $00000ffb +0018F3r 1 FC 0F 00 .faraddr $00000ffc +0018F6r 1 FD 0F 00 .faraddr $00000ffd +0018F9r 1 FE 0F 00 .faraddr $00000ffe +0018FCr 1 FF 0F 00 .faraddr $00000fff +0018FFr 1 00 10 00 .faraddr $00001000 +001902r 1 01 10 00 .faraddr $00001001 +001905r 1 02 10 00 .faraddr $00001002 +001908r 1 03 10 00 .faraddr $00001003 +00190Br 1 04 10 00 .faraddr $00001004 +00190Er 1 05 10 00 .faraddr $00001005 +001911r 1 06 10 00 .faraddr $00001006 +001914r 1 07 10 00 .faraddr $00001007 +001917r 1 08 10 00 .faraddr $00001008 +00191Ar 1 F0 7F 00 .faraddr $00007ff0 +00191Dr 1 F1 7F 00 .faraddr $00007ff1 +001920r 1 F2 7F 00 .faraddr $00007ff2 +001923r 1 F3 7F 00 .faraddr $00007ff3 +001926r 1 F4 7F 00 .faraddr $00007ff4 +001929r 1 F5 7F 00 .faraddr $00007ff5 +00192Cr 1 F6 7F 00 .faraddr $00007ff6 +00192Fr 1 F7 7F 00 .faraddr $00007ff7 +001932r 1 F8 7F 00 .faraddr $00007ff8 +001935r 1 F9 7F 00 .faraddr $00007ff9 +001938r 1 FA 7F 00 .faraddr $00007ffa +00193Br 1 FB 7F 00 .faraddr $00007ffb +00193Er 1 FC 7F 00 .faraddr $00007ffc +001941r 1 FD 7F 00 .faraddr $00007ffd +001944r 1 FE 7F 00 .faraddr $00007ffe +001947r 1 FF 7F 00 .faraddr $00007fff +00194Ar 1 00 80 00 .faraddr $00008000 +00194Dr 1 01 80 00 .faraddr $00008001 +001950r 1 02 80 00 .faraddr $00008002 +001953r 1 03 80 00 .faraddr $00008003 +001956r 1 04 80 00 .faraddr $00008004 +001959r 1 05 80 00 .faraddr $00008005 +00195Cr 1 06 80 00 .faraddr $00008006 +00195Fr 1 07 80 00 .faraddr $00008007 +001962r 1 08 80 00 .faraddr $00008008 +001965r 1 09 80 00 .faraddr $00008009 +001968r 1 0A 80 00 .faraddr $0000800a +00196Br 1 0B 80 00 .faraddr $0000800b +00196Er 1 E1 9F 00 .faraddr $00009fe1 +001971r 1 E2 9F 00 .faraddr $00009fe2 +001974r 1 E3 9F 00 .faraddr $00009fe3 +001977r 1 E4 9F 00 .faraddr $00009fe4 +00197Ar 1 E5 9F 00 .faraddr $00009fe5 +00197Dr 1 E6 9F 00 .faraddr $00009fe6 +001980r 1 E7 9F 00 .faraddr $00009fe7 +001983r 1 E8 9F 00 .faraddr $00009fe8 +001986r 1 E9 9F 00 .faraddr $00009fe9 +001989r 1 EA 9F 00 .faraddr $00009fea +00198Cr 1 EB 9F 00 .faraddr $00009feb +00198Fr 1 EC 9F 00 .faraddr $00009fec +001992r 1 ED 9F 00 .faraddr $00009fed +001995r 1 EE 9F 00 .faraddr $00009fee +001998r 1 EF 9F 00 .faraddr $00009fef +00199Br 1 F0 9F 00 .faraddr $00009ff0 +00199Er 1 F1 9F 00 .faraddr $00009ff1 +0019A1r 1 F2 9F 00 .faraddr $00009ff2 +0019A4r 1 F3 9F 00 .faraddr $00009ff3 +0019A7r 1 F4 9F 00 .faraddr $00009ff4 +0019AAr 1 F5 9F 00 .faraddr $00009ff5 +0019ADr 1 F6 9F 00 .faraddr $00009ff6 +0019B0r 1 F7 9F 00 .faraddr $00009ff7 +0019B3r 1 F8 9F 00 .faraddr $00009ff8 +0019B6r 1 F9 9F 00 .faraddr $00009ff9 +0019B9r 1 FA 9F 00 .faraddr $00009ffa +0019BCr 1 FB 9F 00 .faraddr $00009ffb +0019BFr 1 FC 9F 00 .faraddr $00009ffc +0019C2r 1 FD 9F 00 .faraddr $00009ffd +0019C5r 1 FE 9F 00 .faraddr $00009ffe +0019C8r 1 FF 9F 00 .faraddr $00009fff +0019CBr 1 00 A0 00 .faraddr $0000a000 +0019CEr 1 01 A0 00 .faraddr $0000a001 +0019D1r 1 02 A0 00 .faraddr $0000a002 +0019D4r 1 03 A0 00 .faraddr $0000a003 +0019D7r 1 04 A0 00 .faraddr $0000a004 +0019DAr 1 05 A0 00 .faraddr $0000a005 +0019DDr 1 06 A0 00 .faraddr $0000a006 +0019E0r 1 07 A0 00 .faraddr $0000a007 +0019E3r 1 08 A0 00 .faraddr $0000a008 +0019E6r 1 09 A0 00 .faraddr $0000a009 +0019E9r 1 0A A0 00 .faraddr $0000a00a +0019ECr 1 0B A0 00 .faraddr $0000a00b +0019EFr 1 0C A0 00 .faraddr $0000a00c +0019F2r 1 0D A0 00 .faraddr $0000a00d +0019F5r 1 0E A0 00 .faraddr $0000a00e +0019F8r 1 0F A0 00 .faraddr $0000a00f +0019FBr 1 E1 AF 00 .faraddr $0000afe1 +0019FEr 1 E2 AF 00 .faraddr $0000afe2 +001A01r 1 E3 AF 00 .faraddr $0000afe3 +001A04r 1 E4 AF 00 .faraddr $0000afe4 +001A07r 1 E5 AF 00 .faraddr $0000afe5 +001A0Ar 1 E6 AF 00 .faraddr $0000afe6 +001A0Dr 1 E7 AF 00 .faraddr $0000afe7 +001A10r 1 E8 AF 00 .faraddr $0000afe8 +001A13r 1 E9 AF 00 .faraddr $0000afe9 +001A16r 1 EA AF 00 .faraddr $0000afea +001A19r 1 EB AF 00 .faraddr $0000afeb +001A1Cr 1 EC AF 00 .faraddr $0000afec +001A1Fr 1 ED AF 00 .faraddr $0000afed +001A22r 1 EE AF 00 .faraddr $0000afee +001A25r 1 EF AF 00 .faraddr $0000afef +001A28r 1 F0 AF 00 .faraddr $0000aff0 +001A2Br 1 F1 AF 00 .faraddr $0000aff1 +001A2Er 1 F2 AF 00 .faraddr $0000aff2 +001A31r 1 F3 AF 00 .faraddr $0000aff3 +001A34r 1 F4 AF 00 .faraddr $0000aff4 +001A37r 1 F5 AF 00 .faraddr $0000aff5 +001A3Ar 1 F6 AF 00 .faraddr $0000aff6 +001A3Dr 1 F7 AF 00 .faraddr $0000aff7 +001A40r 1 F8 AF 00 .faraddr $0000aff8 +001A43r 1 F9 AF 00 .faraddr $0000aff9 +001A46r 1 FA AF 00 .faraddr $0000affa +001A49r 1 FB AF 00 .faraddr $0000affb +001A4Cr 1 FC AF 00 .faraddr $0000affc +001A4Fr 1 FD AF 00 .faraddr $0000affd +001A52r 1 FE AF 00 .faraddr $0000affe +001A55r 1 FF AF 00 .faraddr $0000afff +001A58r 1 00 B0 00 .faraddr $0000b000 +001A5Br 1 01 B0 00 .faraddr $0000b001 +001A5Er 1 02 B0 00 .faraddr $0000b002 +001A61r 1 03 B0 00 .faraddr $0000b003 +001A64r 1 04 B0 00 .faraddr $0000b004 +001A67r 1 05 B0 00 .faraddr $0000b005 +001A6Ar 1 06 B0 00 .faraddr $0000b006 +001A6Dr 1 07 B0 00 .faraddr $0000b007 +001A70r 1 08 B0 00 .faraddr $0000b008 +001A73r 1 09 B0 00 .faraddr $0000b009 +001A76r 1 0A B0 00 .faraddr $0000b00a +001A79r 1 0B B0 00 .faraddr $0000b00b +001A7Cr 1 0C B0 00 .faraddr $0000b00c +001A7Fr 1 0D B0 00 .faraddr $0000b00d +001A82r 1 0E B0 00 .faraddr $0000b00e +001A85r 1 0F B0 00 .faraddr $0000b00f +001A88r 1 E1 FF 00 .faraddr $0000ffe1 +001A8Br 1 E2 FF 00 .faraddr $0000ffe2 +001A8Er 1 E3 FF 00 .faraddr $0000ffe3 +001A91r 1 E4 FF 00 .faraddr $0000ffe4 +001A94r 1 E5 FF 00 .faraddr $0000ffe5 +001A97r 1 E6 FF 00 .faraddr $0000ffe6 +001A9Ar 1 E7 FF 00 .faraddr $0000ffe7 +001A9Dr 1 E8 FF 00 .faraddr $0000ffe8 +001AA0r 1 E9 FF 00 .faraddr $0000ffe9 +001AA3r 1 EA FF 00 .faraddr $0000ffea +001AA6r 1 EB FF 00 .faraddr $0000ffeb +001AA9r 1 EC FF 00 .faraddr $0000ffec +001AACr 1 ED FF 00 .faraddr $0000ffed +001AAFr 1 EE FF 00 .faraddr $0000ffee +001AB2r 1 EF FF 00 .faraddr $0000ffef +001AB5r 1 F0 FF 00 .faraddr $0000fff0 +001AB8r 1 F1 FF 00 .faraddr $0000fff1 +001ABBr 1 F2 FF 00 .faraddr $0000fff2 +001ABEr 1 F3 FF 00 .faraddr $0000fff3 +001AC1r 1 F4 FF 00 .faraddr $0000fff4 +001AC4r 1 F5 FF 00 .faraddr $0000fff5 +001AC7r 1 F6 FF 00 .faraddr $0000fff6 +001ACAr 1 F7 FF 00 .faraddr $0000fff7 +001ACDr 1 F8 FF 00 .faraddr $0000fff8 +001AD0r 1 F9 FF 00 .faraddr $0000fff9 +001AD3r 1 FA FF 00 .faraddr $0000fffa +001AD6r 1 FB FF 00 .faraddr $0000fffb +001AD9r 1 FC FF 00 .faraddr $0000fffc +001ADCr 1 FD FF 00 .faraddr $0000fffd +001ADFr 1 FE FF 00 .faraddr $0000fffe +001AE2r 1 FF FF 00 .faraddr $0000ffff +001AE5r 1 00 00 01 .faraddr $00010000 +001AE8r 1 01 00 01 .faraddr $00010001 +001AEBr 1 02 00 01 .faraddr $00010002 +001AEEr 1 03 00 01 .faraddr $00010003 +001AF1r 1 04 00 01 .faraddr $00010004 +001AF4r 1 05 00 01 .faraddr $00010005 +001AF7r 1 06 00 01 .faraddr $00010006 +001AFAr 1 07 00 01 .faraddr $00010007 +001AFDr 1 08 00 01 .faraddr $00010008 +001B00r 1 09 00 01 .faraddr $00010009 +001B03r 1 0A 00 01 .faraddr $0001000a +001B06r 1 0B 00 01 .faraddr $0001000b +001B09r 1 0C 00 01 .faraddr $0001000c +001B0Cr 1 0D 00 01 .faraddr $0001000d +001B0Fr 1 0E 00 01 .faraddr $0001000e +001B12r 1 0F 00 01 .faraddr $0001000f +001B15r 1 E1 FF 10 .faraddr $0010ffe1 +001B18r 1 E2 FF 10 .faraddr $0010ffe2 +001B1Br 1 E3 FF 10 .faraddr $0010ffe3 +001B1Er 1 E4 FF 10 .faraddr $0010ffe4 +001B21r 1 E5 FF 10 .faraddr $0010ffe5 +001B24r 1 E6 FF 10 .faraddr $0010ffe6 +001B27r 1 E7 FF 10 .faraddr $0010ffe7 +001B2Ar 1 E8 FF 10 .faraddr $0010ffe8 +001B2Dr 1 E9 FF 10 .faraddr $0010ffe9 +001B30r 1 EA FF 10 .faraddr $0010ffea +001B33r 1 EB FF 10 .faraddr $0010ffeb +001B36r 1 EC FF 10 .faraddr $0010ffec +001B39r 1 ED FF 10 .faraddr $0010ffed +001B3Cr 1 EE FF 10 .faraddr $0010ffee +001B3Fr 1 EF FF 10 .faraddr $0010ffef +001B42r 1 F0 FF 10 .faraddr $0010fff0 +001B45r 1 F1 FF 10 .faraddr $0010fff1 +001B48r 1 F2 FF 10 .faraddr $0010fff2 +001B4Br 1 F3 FF 10 .faraddr $0010fff3 +001B4Er 1 F4 FF 10 .faraddr $0010fff4 +001B51r 1 F5 FF 10 .faraddr $0010fff5 +001B54r 1 F6 FF 10 .faraddr $0010fff6 +001B57r 1 F7 FF 10 .faraddr $0010fff7 +001B5Ar 1 F8 FF 10 .faraddr $0010fff8 +001B5Dr 1 F9 FF 10 .faraddr $0010fff9 +001B60r 1 FA FF 10 .faraddr $0010fffa +001B63r 1 FB FF 10 .faraddr $0010fffb +001B66r 1 FC FF 10 .faraddr $0010fffc +001B69r 1 FD FF 10 .faraddr $0010fffd +001B6Cr 1 FE FF 10 .faraddr $0010fffe +001B6Fr 1 FF FF 10 .faraddr $0010ffff +001B72r 1 00 00 11 .faraddr $00110000 +001B75r 1 01 00 11 .faraddr $00110001 +001B78r 1 02 00 11 .faraddr $00110002 +001B7Br 1 03 00 11 .faraddr $00110003 +001B7Er 1 04 00 11 .faraddr $00110004 +001B81r 1 05 00 11 .faraddr $00110005 +001B84r 1 06 00 11 .faraddr $00110006 +001B87r 1 07 00 11 .faraddr $00110007 +001B8Ar 1 08 00 11 .faraddr $00110008 +001B8Dr 1 09 00 11 .faraddr $00110009 +001B90r 1 0A 00 11 .faraddr $0011000a +001B93r 1 0B 00 11 .faraddr $0011000b +001B96r 1 0C 00 11 .faraddr $0011000c +001B99r 1 0D 00 11 .faraddr $0011000d +001B9Cr 1 0E 00 11 .faraddr $0011000e +001B9Fr 1 0F 00 11 .faraddr $0011000f +001BA2r 1 E1 FF 20 .faraddr $0020ffe1 +001BA5r 1 E2 FF 20 .faraddr $0020ffe2 +001BA8r 1 E3 FF 20 .faraddr $0020ffe3 +001BABr 1 E4 FF 20 .faraddr $0020ffe4 +001BAEr 1 E5 FF 20 .faraddr $0020ffe5 +001BB1r 1 E6 FF 20 .faraddr $0020ffe6 +001BB4r 1 E7 FF 20 .faraddr $0020ffe7 +001BB7r 1 E8 FF 20 .faraddr $0020ffe8 +001BBAr 1 E9 FF 20 .faraddr $0020ffe9 +001BBDr 1 EA FF 20 .faraddr $0020ffea +001BC0r 1 EB FF 20 .faraddr $0020ffeb +001BC3r 1 EC FF 20 .faraddr $0020ffec +001BC6r 1 ED FF 20 .faraddr $0020ffed +001BC9r 1 EE FF 20 .faraddr $0020ffee +001BCCr 1 EF FF 20 .faraddr $0020ffef +001BCFr 1 F0 FF 20 .faraddr $0020fff0 +001BD2r 1 F1 FF 20 .faraddr $0020fff1 +001BD5r 1 F2 FF 20 .faraddr $0020fff2 +001BD8r 1 F3 FF 20 .faraddr $0020fff3 +001BDBr 1 F4 FF 20 .faraddr $0020fff4 +001BDEr 1 F5 FF 20 .faraddr $0020fff5 +001BE1r 1 F6 FF 20 .faraddr $0020fff6 +001BE4r 1 F7 FF 20 .faraddr $0020fff7 +001BE7r 1 F8 FF 20 .faraddr $0020fff8 +001BEAr 1 F9 FF 20 .faraddr $0020fff9 +001BEDr 1 FA FF 20 .faraddr $0020fffa +001BF0r 1 FB FF 20 .faraddr $0020fffb +001BF3r 1 FC FF 20 .faraddr $0020fffc +001BF6r 1 FD FF 20 .faraddr $0020fffd +001BF9r 1 FE FF 20 .faraddr $0020fffe +001BFCr 1 FF FF 20 .faraddr $0020ffff +001BFFr 1 00 00 21 .faraddr $00210000 +001C02r 1 01 00 21 .faraddr $00210001 +001C05r 1 02 00 21 .faraddr $00210002 +001C08r 1 03 00 21 .faraddr $00210003 +001C0Br 1 04 00 21 .faraddr $00210004 +001C0Er 1 05 00 21 .faraddr $00210005 +001C11r 1 06 00 21 .faraddr $00210006 +001C14r 1 07 00 21 .faraddr $00210007 +001C17r 1 08 00 21 .faraddr $00210008 +001C1Ar 1 09 00 21 .faraddr $00210009 +001C1Dr 1 0A 00 21 .faraddr $0021000a +001C20r 1 0B 00 21 .faraddr $0021000b +001C23r 1 0C 00 21 .faraddr $0021000c +001C26r 1 0D 00 21 .faraddr $0021000d +001C29r 1 0E 00 21 .faraddr $0021000e +001C2Cr 1 0F 00 21 .faraddr $0021000f +001C2Fr 1 E1 FF 7F .faraddr $007fffe1 +001C32r 1 E2 FF 7F .faraddr $007fffe2 +001C35r 1 E3 FF 7F .faraddr $007fffe3 +001C38r 1 E4 FF 7F .faraddr $007fffe4 +001C3Br 1 E5 FF 7F .faraddr $007fffe5 +001C3Er 1 E6 FF 7F .faraddr $007fffe6 +001C41r 1 E7 FF 7F .faraddr $007fffe7 +001C44r 1 E8 FF 7F .faraddr $007fffe8 +001C47r 1 E9 FF 7F .faraddr $007fffe9 +001C4Ar 1 EA FF 7F .faraddr $007fffea +001C4Dr 1 EB FF 7F .faraddr $007fffeb +001C50r 1 EC FF 7F .faraddr $007fffec +001C53r 1 ED FF 7F .faraddr $007fffed +001C56r 1 EE FF 7F .faraddr $007fffee +001C59r 1 EF FF 7F .faraddr $007fffef +001C5Cr 1 F0 FF 7F .faraddr $007ffff0 +001C5Fr 1 F1 FF 7F .faraddr $007ffff1 +001C62r 1 F2 FF 7F .faraddr $007ffff2 +001C65r 1 F3 FF 7F .faraddr $007ffff3 +001C68r 1 F4 FF 7F .faraddr $007ffff4 +001C6Br 1 F5 FF 7F .faraddr $007ffff5 +001C6Er 1 F6 FF 7F .faraddr $007ffff6 +001C71r 1 F7 FF 7F .faraddr $007ffff7 +001C74r 1 F8 FF 7F .faraddr $007ffff8 +001C77r 1 F9 FF 7F .faraddr $007ffff9 +001C7Ar 1 FA FF 7F .faraddr $007ffffa +001C7Dr 1 FB FF 7F .faraddr $007ffffb +001C80r 1 FC FF 7F .faraddr $007ffffc +001C83r 1 FD FF 7F .faraddr $007ffffd +001C86r 1 FE FF 7F .faraddr $007ffffe +001C89r 1 FF FF 7F .faraddr $007fffff +001C8Cr 1 00 00 80 .faraddr $00800000 +001C8Fr 1 01 00 80 .faraddr $00800001 +001C92r 1 02 00 80 .faraddr $00800002 +001C95r 1 03 00 80 .faraddr $00800003 +001C98r 1 04 00 80 .faraddr $00800004 +001C9Br 1 05 00 80 .faraddr $00800005 +001C9Er 1 06 00 80 .faraddr $00800006 +001CA1r 1 07 00 80 .faraddr $00800007 +001CA4r 1 08 00 80 .faraddr $00800008 +001CA7r 1 09 00 80 .faraddr $00800009 +001CAAr 1 0A 00 80 .faraddr $0080000a +001CADr 1 0B 00 80 .faraddr $0080000b +001CB0r 1 0C 00 80 .faraddr $0080000c +001CB3r 1 0D 00 80 .faraddr $0080000d +001CB6r 1 0E 00 80 .faraddr $0080000e +001CB9r 1 0F 00 80 .faraddr $0080000f +001CBCr 1 E1 FF 9F .faraddr $009fffe1 +001CBFr 1 E2 FF 9F .faraddr $009fffe2 +001CC2r 1 E3 FF 9F .faraddr $009fffe3 +001CC5r 1 E4 FF 9F .faraddr $009fffe4 +001CC8r 1 E5 FF 9F .faraddr $009fffe5 +001CCBr 1 E6 FF 9F .faraddr $009fffe6 +001CCEr 1 E7 FF 9F .faraddr $009fffe7 +001CD1r 1 E8 FF 9F .faraddr $009fffe8 +001CD4r 1 E9 FF 9F .faraddr $009fffe9 +001CD7r 1 EA FF 9F .faraddr $009fffea +001CDAr 1 EB FF 9F .faraddr $009fffeb +001CDDr 1 EC FF 9F .faraddr $009fffec +001CE0r 1 ED FF 9F .faraddr $009fffed +001CE3r 1 EE FF 9F .faraddr $009fffee +001CE6r 1 EF FF 9F .faraddr $009fffef +001CE9r 1 F0 FF 9F .faraddr $009ffff0 +001CECr 1 F1 FF 9F .faraddr $009ffff1 +001CEFr 1 F2 FF 9F .faraddr $009ffff2 +001CF2r 1 F3 FF 9F .faraddr $009ffff3 +001CF5r 1 F4 FF 9F .faraddr $009ffff4 +001CF8r 1 F5 FF 9F .faraddr $009ffff5 +001CFBr 1 F6 FF 9F .faraddr $009ffff6 +001CFEr 1 F7 FF 9F .faraddr $009ffff7 +001D01r 1 F8 FF 9F .faraddr $009ffff8 +001D04r 1 F9 FF 9F .faraddr $009ffff9 +001D07r 1 FA FF 9F .faraddr $009ffffa +001D0Ar 1 FB FF 9F .faraddr $009ffffb +001D0Dr 1 FC FF 9F .faraddr $009ffffc +001D10r 1 FD FF 9F .faraddr $009ffffd +001D13r 1 FE FF 9F .faraddr $009ffffe +001D16r 1 FF FF 9F .faraddr $009fffff +001D19r 1 00 00 A0 .faraddr $00a00000 +001D1Cr 1 01 00 A0 .faraddr $00a00001 +001D1Fr 1 02 00 A0 .faraddr $00a00002 +001D22r 1 03 00 A0 .faraddr $00a00003 +001D25r 1 04 00 A0 .faraddr $00a00004 +001D28r 1 05 00 A0 .faraddr $00a00005 +001D2Br 1 06 00 A0 .faraddr $00a00006 +001D2Er 1 07 00 A0 .faraddr $00a00007 +001D31r 1 08 00 A0 .faraddr $00a00008 +001D34r 1 09 00 A0 .faraddr $00a00009 +001D37r 1 0A 00 A0 .faraddr $00a0000a +001D3Ar 1 0B 00 A0 .faraddr $00a0000b +001D3Dr 1 0C 00 A0 .faraddr $00a0000c +001D40r 1 0D 00 A0 .faraddr $00a0000d +001D43r 1 0E 00 A0 .faraddr $00a0000e +001D46r 1 0F 00 A0 .faraddr $00a0000f +001D49r 1 E1 FF FF .faraddr $00ffffe1 +001D4Cr 1 E2 FF FF .faraddr $00ffffe2 +001D4Fr 1 E3 FF FF .faraddr $00ffffe3 +001D52r 1 E4 FF FF .faraddr $00ffffe4 +001D55r 1 E5 FF FF .faraddr $00ffffe5 +001D58r 1 E6 FF FF .faraddr $00ffffe6 +001D5Br 1 E7 FF FF .faraddr $00ffffe7 +001D5Er 1 E8 FF FF .faraddr $00ffffe8 +001D61r 1 E9 FF FF .faraddr $00ffffe9 +001D64r 1 EA FF FF .faraddr $00ffffea +001D67r 1 EB FF FF .faraddr $00ffffeb +001D6Ar 1 EC FF FF .faraddr $00ffffec +001D6Dr 1 ED FF FF .faraddr $00ffffed +001D70r 1 EE FF FF .faraddr $00ffffee +001D73r 1 EF FF FF .faraddr $00ffffef +001D76r 1 F0 FF FF .faraddr $00fffff0 +001D79r 1 F1 FF FF .faraddr $00fffff1 +001D7Cr 1 F2 FF FF .faraddr $00fffff2 +001D7Fr 1 F3 FF FF .faraddr $00fffff3 +001D82r 1 F4 FF FF .faraddr $00fffff4 +001D85r 1 F5 FF FF .faraddr $00fffff5 +001D88r 1 F6 FF FF .faraddr $00fffff6 +001D8Br 1 F7 FF FF .faraddr $00fffff7 +001D8Er 1 F8 FF FF .faraddr $00fffff8 +001D91r 1 F9 FF FF .faraddr $00fffff9 +001D94r 1 FA FF FF .faraddr $00fffffa +001D97r 1 FB FF FF .faraddr $00fffffb +001D9Ar 1 FC FF FF .faraddr $00fffffc +001D9Dr 1 FD FF FF .faraddr $00fffffd +001DA0r 1 FE FF FF .faraddr $00fffffe +001DA3r 1 FF FF FF .faraddr $00ffffff +001DA6r 1 +001DA6r 1 ; 8-digit hex values, uppercase +001DA6r 1 00 00 00 .faraddr $00000000 +001DA9r 1 01 00 00 .faraddr $00000001 +001DACr 1 02 00 00 .faraddr $00000002 +001DAFr 1 03 00 00 .faraddr $00000003 +001DB2r 1 04 00 00 .faraddr $00000004 +001DB5r 1 05 00 00 .faraddr $00000005 +001DB8r 1 06 00 00 .faraddr $00000006 +001DBBr 1 07 00 00 .faraddr $00000007 +001DBEr 1 08 00 00 .faraddr $00000008 +001DC1r 1 09 00 00 .faraddr $00000009 +001DC4r 1 0A 00 00 .faraddr $0000000A +001DC7r 1 0B 00 00 .faraddr $0000000B +001DCAr 1 0C 00 00 .faraddr $0000000C +001DCDr 1 0D 00 00 .faraddr $0000000D +001DD0r 1 0E 00 00 .faraddr $0000000E +001DD3r 1 0F 00 00 .faraddr $0000000F +001DD6r 1 10 00 00 .faraddr $00000010 +001DD9r 1 11 00 00 .faraddr $00000011 +001DDCr 1 12 00 00 .faraddr $00000012 +001DDFr 1 13 00 00 .faraddr $00000013 +001DE2r 1 70 00 00 .faraddr $00000070 +001DE5r 1 71 00 00 .faraddr $00000071 +001DE8r 1 72 00 00 .faraddr $00000072 +001DEBr 1 73 00 00 .faraddr $00000073 +001DEEr 1 74 00 00 .faraddr $00000074 +001DF1r 1 75 00 00 .faraddr $00000075 +001DF4r 1 76 00 00 .faraddr $00000076 +001DF7r 1 77 00 00 .faraddr $00000077 +001DFAr 1 78 00 00 .faraddr $00000078 +001DFDr 1 79 00 00 .faraddr $00000079 +001E00r 1 7A 00 00 .faraddr $0000007A +001E03r 1 7B 00 00 .faraddr $0000007B +001E06r 1 7C 00 00 .faraddr $0000007C +001E09r 1 7D 00 00 .faraddr $0000007D +001E0Cr 1 7E 00 00 .faraddr $0000007E +001E0Fr 1 7F 00 00 .faraddr $0000007F +001E12r 1 80 00 00 .faraddr $00000080 +001E15r 1 81 00 00 .faraddr $00000081 +001E18r 1 82 00 00 .faraddr $00000082 +001E1Br 1 83 00 00 .faraddr $00000083 +001E1Er 1 84 00 00 .faraddr $00000084 +001E21r 1 85 00 00 .faraddr $00000085 +001E24r 1 86 00 00 .faraddr $00000086 +001E27r 1 F0 00 00 .faraddr $000000F0 +001E2Ar 1 F1 00 00 .faraddr $000000F1 +001E2Dr 1 F2 00 00 .faraddr $000000F2 +001E30r 1 F3 00 00 .faraddr $000000F3 +001E33r 1 F4 00 00 .faraddr $000000F4 +001E36r 1 F5 00 00 .faraddr $000000F5 +001E39r 1 F6 00 00 .faraddr $000000F6 +001E3Cr 1 F7 00 00 .faraddr $000000F7 +001E3Fr 1 F8 00 00 .faraddr $000000F8 +001E42r 1 F9 00 00 .faraddr $000000F9 +001E45r 1 FA 00 00 .faraddr $000000FA +001E48r 1 FB 00 00 .faraddr $000000FB +001E4Br 1 FC 00 00 .faraddr $000000FC +001E4Er 1 FD 00 00 .faraddr $000000FD +001E51r 1 FE 00 00 .faraddr $000000FE +001E54r 1 FF 00 00 .faraddr $000000FF +001E57r 1 00 01 00 .faraddr $00000100 +001E5Ar 1 01 01 00 .faraddr $00000101 +001E5Dr 1 02 01 00 .faraddr $00000102 +001E60r 1 03 01 00 .faraddr $00000103 +001E63r 1 D2 0F 00 .faraddr $00000FD2 +001E66r 1 D3 0F 00 .faraddr $00000FD3 +001E69r 1 D4 0F 00 .faraddr $00000FD4 +001E6Cr 1 D5 0F 00 .faraddr $00000FD5 +001E6Fr 1 D6 0F 00 .faraddr $00000FD6 +001E72r 1 D7 0F 00 .faraddr $00000FD7 +001E75r 1 D8 0F 00 .faraddr $00000FD8 +001E78r 1 D9 0F 00 .faraddr $00000FD9 +001E7Br 1 DA 0F 00 .faraddr $00000FDA +001E7Er 1 DB 0F 00 .faraddr $00000FDB +001E81r 1 DC 0F 00 .faraddr $00000FDC +001E84r 1 DD 0F 00 .faraddr $00000FDD +001E87r 1 DE 0F 00 .faraddr $00000FDE +001E8Ar 1 DF 0F 00 .faraddr $00000FDF +001E8Dr 1 E0 0F 00 .faraddr $00000FE0 +001E90r 1 E1 0F 00 .faraddr $00000FE1 +001E93r 1 E2 0F 00 .faraddr $00000FE2 +001E96r 1 E3 0F 00 .faraddr $00000FE3 +001E99r 1 E4 0F 00 .faraddr $00000FE4 +001E9Cr 1 E5 0F 00 .faraddr $00000FE5 +001E9Fr 1 E6 0F 00 .faraddr $00000FE6 +001EA2r 1 E7 0F 00 .faraddr $00000FE7 +001EA5r 1 E8 0F 00 .faraddr $00000FE8 +001EA8r 1 E9 0F 00 .faraddr $00000FE9 +001EABr 1 EA 0F 00 .faraddr $00000FEA +001EAEr 1 EB 0F 00 .faraddr $00000FEB +001EB1r 1 EC 0F 00 .faraddr $00000FEC +001EB4r 1 ED 0F 00 .faraddr $00000FED +001EB7r 1 EE 0F 00 .faraddr $00000FEE +001EBAr 1 EF 0F 00 .faraddr $00000FEF +001EBDr 1 F0 0F 00 .faraddr $00000FF0 +001EC0r 1 F1 0F 00 .faraddr $00000FF1 +001EC3r 1 F2 0F 00 .faraddr $00000FF2 +001EC6r 1 F3 0F 00 .faraddr $00000FF3 +001EC9r 1 F4 0F 00 .faraddr $00000FF4 +001ECCr 1 F5 0F 00 .faraddr $00000FF5 +001ECFr 1 F6 0F 00 .faraddr $00000FF6 +001ED2r 1 F7 0F 00 .faraddr $00000FF7 +001ED5r 1 F8 0F 00 .faraddr $00000FF8 +001ED8r 1 F9 0F 00 .faraddr $00000FF9 +001EDBr 1 FA 0F 00 .faraddr $00000FFA +001EDEr 1 FB 0F 00 .faraddr $00000FFB +001EE1r 1 FC 0F 00 .faraddr $00000FFC +001EE4r 1 FD 0F 00 .faraddr $00000FFD +001EE7r 1 FE 0F 00 .faraddr $00000FFE +001EEAr 1 FF 0F 00 .faraddr $00000FFF +001EEDr 1 00 10 00 .faraddr $00001000 +001EF0r 1 01 10 00 .faraddr $00001001 +001EF3r 1 02 10 00 .faraddr $00001002 +001EF6r 1 03 10 00 .faraddr $00001003 +001EF9r 1 04 10 00 .faraddr $00001004 +001EFCr 1 05 10 00 .faraddr $00001005 +001EFFr 1 06 10 00 .faraddr $00001006 +001F02r 1 07 10 00 .faraddr $00001007 +001F05r 1 08 10 00 .faraddr $00001008 +001F08r 1 F0 7F 00 .faraddr $00007FF0 +001F0Br 1 F1 7F 00 .faraddr $00007FF1 +001F0Er 1 F2 7F 00 .faraddr $00007FF2 +001F11r 1 F3 7F 00 .faraddr $00007FF3 +001F14r 1 F4 7F 00 .faraddr $00007FF4 +001F17r 1 F5 7F 00 .faraddr $00007FF5 +001F1Ar 1 F6 7F 00 .faraddr $00007FF6 +001F1Dr 1 F7 7F 00 .faraddr $00007FF7 +001F20r 1 F8 7F 00 .faraddr $00007FF8 +001F23r 1 F9 7F 00 .faraddr $00007FF9 +001F26r 1 FA 7F 00 .faraddr $00007FFA +001F29r 1 FB 7F 00 .faraddr $00007FFB +001F2Cr 1 FC 7F 00 .faraddr $00007FFC +001F2Fr 1 FD 7F 00 .faraddr $00007FFD +001F32r 1 FE 7F 00 .faraddr $00007FFE +001F35r 1 FF 7F 00 .faraddr $00007FFF +001F38r 1 00 80 00 .faraddr $00008000 +001F3Br 1 01 80 00 .faraddr $00008001 +001F3Er 1 02 80 00 .faraddr $00008002 +001F41r 1 03 80 00 .faraddr $00008003 +001F44r 1 04 80 00 .faraddr $00008004 +001F47r 1 05 80 00 .faraddr $00008005 +001F4Ar 1 06 80 00 .faraddr $00008006 +001F4Dr 1 07 80 00 .faraddr $00008007 +001F50r 1 08 80 00 .faraddr $00008008 +001F53r 1 09 80 00 .faraddr $00008009 +001F56r 1 0A 80 00 .faraddr $0000800A +001F59r 1 0B 80 00 .faraddr $0000800B +001F5Cr 1 E1 9F 00 .faraddr $00009FE1 +001F5Fr 1 E2 9F 00 .faraddr $00009FE2 +001F62r 1 E3 9F 00 .faraddr $00009FE3 +001F65r 1 E4 9F 00 .faraddr $00009FE4 +001F68r 1 E5 9F 00 .faraddr $00009FE5 +001F6Br 1 E6 9F 00 .faraddr $00009FE6 +001F6Er 1 E7 9F 00 .faraddr $00009FE7 +001F71r 1 E8 9F 00 .faraddr $00009FE8 +001F74r 1 E9 9F 00 .faraddr $00009FE9 +001F77r 1 EA 9F 00 .faraddr $00009FEA +001F7Ar 1 EB 9F 00 .faraddr $00009FEB +001F7Dr 1 EC 9F 00 .faraddr $00009FEC +001F80r 1 ED 9F 00 .faraddr $00009FED +001F83r 1 EE 9F 00 .faraddr $00009FEE +001F86r 1 EF 9F 00 .faraddr $00009FEF +001F89r 1 F0 9F 00 .faraddr $00009FF0 +001F8Cr 1 F1 9F 00 .faraddr $00009FF1 +001F8Fr 1 F2 9F 00 .faraddr $00009FF2 +001F92r 1 F3 9F 00 .faraddr $00009FF3 +001F95r 1 F4 9F 00 .faraddr $00009FF4 +001F98r 1 F5 9F 00 .faraddr $00009FF5 +001F9Br 1 F6 9F 00 .faraddr $00009FF6 +001F9Er 1 F7 9F 00 .faraddr $00009FF7 +001FA1r 1 F8 9F 00 .faraddr $00009FF8 +001FA4r 1 F9 9F 00 .faraddr $00009FF9 +001FA7r 1 FA 9F 00 .faraddr $00009FFA +001FAAr 1 FB 9F 00 .faraddr $00009FFB +001FADr 1 FC 9F 00 .faraddr $00009FFC +001FB0r 1 FD 9F 00 .faraddr $00009FFD +001FB3r 1 FE 9F 00 .faraddr $00009FFE +001FB6r 1 FF 9F 00 .faraddr $00009FFF +001FB9r 1 00 A0 00 .faraddr $0000A000 +001FBCr 1 01 A0 00 .faraddr $0000A001 +001FBFr 1 02 A0 00 .faraddr $0000A002 +001FC2r 1 03 A0 00 .faraddr $0000A003 +001FC5r 1 04 A0 00 .faraddr $0000A004 +001FC8r 1 05 A0 00 .faraddr $0000A005 +001FCBr 1 06 A0 00 .faraddr $0000A006 +001FCEr 1 07 A0 00 .faraddr $0000A007 +001FD1r 1 08 A0 00 .faraddr $0000A008 +001FD4r 1 09 A0 00 .faraddr $0000A009 +001FD7r 1 0A A0 00 .faraddr $0000A00A +001FDAr 1 0B A0 00 .faraddr $0000A00B +001FDDr 1 0C A0 00 .faraddr $0000A00C +001FE0r 1 0D A0 00 .faraddr $0000A00D +001FE3r 1 0E A0 00 .faraddr $0000A00E +001FE6r 1 0F A0 00 .faraddr $0000A00F +001FE9r 1 E1 AF 00 .faraddr $0000AFE1 +001FECr 1 E2 AF 00 .faraddr $0000AFE2 +001FEFr 1 E3 AF 00 .faraddr $0000AFE3 +001FF2r 1 E4 AF 00 .faraddr $0000AFE4 +001FF5r 1 E5 AF 00 .faraddr $0000AFE5 +001FF8r 1 E6 AF 00 .faraddr $0000AFE6 +001FFBr 1 E7 AF 00 .faraddr $0000AFE7 +001FFEr 1 E8 AF 00 .faraddr $0000AFE8 +002001r 1 E9 AF 00 .faraddr $0000AFE9 +002004r 1 EA AF 00 .faraddr $0000AFEA +002007r 1 EB AF 00 .faraddr $0000AFEB +00200Ar 1 EC AF 00 .faraddr $0000AFEC +00200Dr 1 ED AF 00 .faraddr $0000AFED +002010r 1 EE AF 00 .faraddr $0000AFEE +002013r 1 EF AF 00 .faraddr $0000AFEF +002016r 1 F0 AF 00 .faraddr $0000AFF0 +002019r 1 F1 AF 00 .faraddr $0000AFF1 +00201Cr 1 F2 AF 00 .faraddr $0000AFF2 +00201Fr 1 F3 AF 00 .faraddr $0000AFF3 +002022r 1 F4 AF 00 .faraddr $0000AFF4 +002025r 1 F5 AF 00 .faraddr $0000AFF5 +002028r 1 F6 AF 00 .faraddr $0000AFF6 +00202Br 1 F7 AF 00 .faraddr $0000AFF7 +00202Er 1 F8 AF 00 .faraddr $0000AFF8 +002031r 1 F9 AF 00 .faraddr $0000AFF9 +002034r 1 FA AF 00 .faraddr $0000AFFA +002037r 1 FB AF 00 .faraddr $0000AFFB +00203Ar 1 FC AF 00 .faraddr $0000AFFC +00203Dr 1 FD AF 00 .faraddr $0000AFFD +002040r 1 FE AF 00 .faraddr $0000AFFE +002043r 1 FF AF 00 .faraddr $0000AFFF +002046r 1 00 B0 00 .faraddr $0000B000 +002049r 1 01 B0 00 .faraddr $0000B001 +00204Cr 1 02 B0 00 .faraddr $0000B002 +00204Fr 1 03 B0 00 .faraddr $0000B003 +002052r 1 04 B0 00 .faraddr $0000B004 +002055r 1 05 B0 00 .faraddr $0000B005 +002058r 1 06 B0 00 .faraddr $0000B006 +00205Br 1 07 B0 00 .faraddr $0000B007 +00205Er 1 08 B0 00 .faraddr $0000B008 +002061r 1 09 B0 00 .faraddr $0000B009 +002064r 1 0A B0 00 .faraddr $0000B00A +002067r 1 0B B0 00 .faraddr $0000B00B +00206Ar 1 0C B0 00 .faraddr $0000B00C +00206Dr 1 0D B0 00 .faraddr $0000B00D +002070r 1 0E B0 00 .faraddr $0000B00E +002073r 1 0F B0 00 .faraddr $0000B00F +002076r 1 E1 FF 00 .faraddr $0000FFE1 +002079r 1 E2 FF 00 .faraddr $0000FFE2 +00207Cr 1 E3 FF 00 .faraddr $0000FFE3 +00207Fr 1 E4 FF 00 .faraddr $0000FFE4 +002082r 1 E5 FF 00 .faraddr $0000FFE5 +002085r 1 E6 FF 00 .faraddr $0000FFE6 +002088r 1 E7 FF 00 .faraddr $0000FFE7 +00208Br 1 E8 FF 00 .faraddr $0000FFE8 +00208Er 1 E9 FF 00 .faraddr $0000FFE9 +002091r 1 EA FF 00 .faraddr $0000FFEA +002094r 1 EB FF 00 .faraddr $0000FFEB +002097r 1 EC FF 00 .faraddr $0000FFEC +00209Ar 1 ED FF 00 .faraddr $0000FFED +00209Dr 1 EE FF 00 .faraddr $0000FFEE +0020A0r 1 EF FF 00 .faraddr $0000FFEF +0020A3r 1 F0 FF 00 .faraddr $0000FFF0 +0020A6r 1 F1 FF 00 .faraddr $0000FFF1 +0020A9r 1 F2 FF 00 .faraddr $0000FFF2 +0020ACr 1 F3 FF 00 .faraddr $0000FFF3 +0020AFr 1 F4 FF 00 .faraddr $0000FFF4 +0020B2r 1 F5 FF 00 .faraddr $0000FFF5 +0020B5r 1 F6 FF 00 .faraddr $0000FFF6 +0020B8r 1 F7 FF 00 .faraddr $0000FFF7 +0020BBr 1 F8 FF 00 .faraddr $0000FFF8 +0020BEr 1 F9 FF 00 .faraddr $0000FFF9 +0020C1r 1 FA FF 00 .faraddr $0000FFFA +0020C4r 1 FB FF 00 .faraddr $0000FFFB +0020C7r 1 FC FF 00 .faraddr $0000FFFC +0020CAr 1 FD FF 00 .faraddr $0000FFFD +0020CDr 1 FE FF 00 .faraddr $0000FFFE +0020D0r 1 FF FF 00 .faraddr $0000FFFF +0020D3r 1 00 00 01 .faraddr $00010000 +0020D6r 1 01 00 01 .faraddr $00010001 +0020D9r 1 02 00 01 .faraddr $00010002 +0020DCr 1 03 00 01 .faraddr $00010003 +0020DFr 1 04 00 01 .faraddr $00010004 +0020E2r 1 05 00 01 .faraddr $00010005 +0020E5r 1 06 00 01 .faraddr $00010006 +0020E8r 1 07 00 01 .faraddr $00010007 +0020EBr 1 08 00 01 .faraddr $00010008 +0020EEr 1 09 00 01 .faraddr $00010009 +0020F1r 1 0A 00 01 .faraddr $0001000A +0020F4r 1 0B 00 01 .faraddr $0001000B +0020F7r 1 0C 00 01 .faraddr $0001000C +0020FAr 1 0D 00 01 .faraddr $0001000D +0020FDr 1 0E 00 01 .faraddr $0001000E +002100r 1 0F 00 01 .faraddr $0001000F +002103r 1 E1 FF 10 .faraddr $0010FFE1 +002106r 1 E2 FF 10 .faraddr $0010FFE2 +002109r 1 E3 FF 10 .faraddr $0010FFE3 +00210Cr 1 E4 FF 10 .faraddr $0010FFE4 +00210Fr 1 E5 FF 10 .faraddr $0010FFE5 +002112r 1 E6 FF 10 .faraddr $0010FFE6 +002115r 1 E7 FF 10 .faraddr $0010FFE7 +002118r 1 E8 FF 10 .faraddr $0010FFE8 +00211Br 1 E9 FF 10 .faraddr $0010FFE9 +00211Er 1 EA FF 10 .faraddr $0010FFEA +002121r 1 EB FF 10 .faraddr $0010FFEB +002124r 1 EC FF 10 .faraddr $0010FFEC +002127r 1 ED FF 10 .faraddr $0010FFED +00212Ar 1 EE FF 10 .faraddr $0010FFEE +00212Dr 1 EF FF 10 .faraddr $0010FFEF +002130r 1 F0 FF 10 .faraddr $0010FFF0 +002133r 1 F1 FF 10 .faraddr $0010FFF1 +002136r 1 F2 FF 10 .faraddr $0010FFF2 +002139r 1 F3 FF 10 .faraddr $0010FFF3 +00213Cr 1 F4 FF 10 .faraddr $0010FFF4 +00213Fr 1 F5 FF 10 .faraddr $0010FFF5 +002142r 1 F6 FF 10 .faraddr $0010FFF6 +002145r 1 F7 FF 10 .faraddr $0010FFF7 +002148r 1 F8 FF 10 .faraddr $0010FFF8 +00214Br 1 F9 FF 10 .faraddr $0010FFF9 +00214Er 1 FA FF 10 .faraddr $0010FFFA +002151r 1 FB FF 10 .faraddr $0010FFFB +002154r 1 FC FF 10 .faraddr $0010FFFC +002157r 1 FD FF 10 .faraddr $0010FFFD +00215Ar 1 FE FF 10 .faraddr $0010FFFE +00215Dr 1 FF FF 10 .faraddr $0010FFFF +002160r 1 00 00 11 .faraddr $00110000 +002163r 1 01 00 11 .faraddr $00110001 +002166r 1 02 00 11 .faraddr $00110002 +002169r 1 03 00 11 .faraddr $00110003 +00216Cr 1 04 00 11 .faraddr $00110004 +00216Fr 1 05 00 11 .faraddr $00110005 +002172r 1 06 00 11 .faraddr $00110006 +002175r 1 07 00 11 .faraddr $00110007 +002178r 1 08 00 11 .faraddr $00110008 +00217Br 1 09 00 11 .faraddr $00110009 +00217Er 1 0A 00 11 .faraddr $0011000A +002181r 1 0B 00 11 .faraddr $0011000B +002184r 1 0C 00 11 .faraddr $0011000C +002187r 1 0D 00 11 .faraddr $0011000D +00218Ar 1 0E 00 11 .faraddr $0011000E +00218Dr 1 0F 00 11 .faraddr $0011000F +002190r 1 E1 FF 20 .faraddr $0020FFE1 +002193r 1 E2 FF 20 .faraddr $0020FFE2 +002196r 1 E3 FF 20 .faraddr $0020FFE3 +002199r 1 E4 FF 20 .faraddr $0020FFE4 +00219Cr 1 E5 FF 20 .faraddr $0020FFE5 +00219Fr 1 E6 FF 20 .faraddr $0020FFE6 +0021A2r 1 E7 FF 20 .faraddr $0020FFE7 +0021A5r 1 E8 FF 20 .faraddr $0020FFE8 +0021A8r 1 E9 FF 20 .faraddr $0020FFE9 +0021ABr 1 EA FF 20 .faraddr $0020FFEA +0021AEr 1 EB FF 20 .faraddr $0020FFEB +0021B1r 1 EC FF 20 .faraddr $0020FFEC +0021B4r 1 ED FF 20 .faraddr $0020FFED +0021B7r 1 EE FF 20 .faraddr $0020FFEE +0021BAr 1 EF FF 20 .faraddr $0020FFEF +0021BDr 1 F0 FF 20 .faraddr $0020FFF0 +0021C0r 1 F1 FF 20 .faraddr $0020FFF1 +0021C3r 1 F2 FF 20 .faraddr $0020FFF2 +0021C6r 1 F3 FF 20 .faraddr $0020FFF3 +0021C9r 1 F4 FF 20 .faraddr $0020FFF4 +0021CCr 1 F5 FF 20 .faraddr $0020FFF5 +0021CFr 1 F6 FF 20 .faraddr $0020FFF6 +0021D2r 1 F7 FF 20 .faraddr $0020FFF7 +0021D5r 1 F8 FF 20 .faraddr $0020FFF8 +0021D8r 1 F9 FF 20 .faraddr $0020FFF9 +0021DBr 1 FA FF 20 .faraddr $0020FFFA +0021DEr 1 FB FF 20 .faraddr $0020FFFB +0021E1r 1 FC FF 20 .faraddr $0020FFFC +0021E4r 1 FD FF 20 .faraddr $0020FFFD +0021E7r 1 FE FF 20 .faraddr $0020FFFE +0021EAr 1 FF FF 20 .faraddr $0020FFFF +0021EDr 1 00 00 21 .faraddr $00210000 +0021F0r 1 01 00 21 .faraddr $00210001 +0021F3r 1 02 00 21 .faraddr $00210002 +0021F6r 1 03 00 21 .faraddr $00210003 +0021F9r 1 04 00 21 .faraddr $00210004 +0021FCr 1 05 00 21 .faraddr $00210005 +0021FFr 1 06 00 21 .faraddr $00210006 +002202r 1 07 00 21 .faraddr $00210007 +002205r 1 08 00 21 .faraddr $00210008 +002208r 1 09 00 21 .faraddr $00210009 +00220Br 1 0A 00 21 .faraddr $0021000A +00220Er 1 0B 00 21 .faraddr $0021000B +002211r 1 0C 00 21 .faraddr $0021000C +002214r 1 0D 00 21 .faraddr $0021000D +002217r 1 0E 00 21 .faraddr $0021000E +00221Ar 1 0F 00 21 .faraddr $0021000F +00221Dr 1 E1 FF 7F .faraddr $007FFFE1 +002220r 1 E2 FF 7F .faraddr $007FFFE2 +002223r 1 E3 FF 7F .faraddr $007FFFE3 +002226r 1 E4 FF 7F .faraddr $007FFFE4 +002229r 1 E5 FF 7F .faraddr $007FFFE5 +00222Cr 1 E6 FF 7F .faraddr $007FFFE6 +00222Fr 1 E7 FF 7F .faraddr $007FFFE7 +002232r 1 E8 FF 7F .faraddr $007FFFE8 +002235r 1 E9 FF 7F .faraddr $007FFFE9 +002238r 1 EA FF 7F .faraddr $007FFFEA +00223Br 1 EB FF 7F .faraddr $007FFFEB +00223Er 1 EC FF 7F .faraddr $007FFFEC +002241r 1 ED FF 7F .faraddr $007FFFED +002244r 1 EE FF 7F .faraddr $007FFFEE +002247r 1 EF FF 7F .faraddr $007FFFEF +00224Ar 1 F0 FF 7F .faraddr $007FFFF0 +00224Dr 1 F1 FF 7F .faraddr $007FFFF1 +002250r 1 F2 FF 7F .faraddr $007FFFF2 +002253r 1 F3 FF 7F .faraddr $007FFFF3 +002256r 1 F4 FF 7F .faraddr $007FFFF4 +002259r 1 F5 FF 7F .faraddr $007FFFF5 +00225Cr 1 F6 FF 7F .faraddr $007FFFF6 +00225Fr 1 F7 FF 7F .faraddr $007FFFF7 +002262r 1 F8 FF 7F .faraddr $007FFFF8 +002265r 1 F9 FF 7F .faraddr $007FFFF9 +002268r 1 FA FF 7F .faraddr $007FFFFA +00226Br 1 FB FF 7F .faraddr $007FFFFB +00226Er 1 FC FF 7F .faraddr $007FFFFC +002271r 1 FD FF 7F .faraddr $007FFFFD +002274r 1 FE FF 7F .faraddr $007FFFFE +002277r 1 FF FF 7F .faraddr $007FFFFF +00227Ar 1 00 00 80 .faraddr $00800000 +00227Dr 1 01 00 80 .faraddr $00800001 +002280r 1 02 00 80 .faraddr $00800002 +002283r 1 03 00 80 .faraddr $00800003 +002286r 1 04 00 80 .faraddr $00800004 +002289r 1 05 00 80 .faraddr $00800005 +00228Cr 1 06 00 80 .faraddr $00800006 +00228Fr 1 07 00 80 .faraddr $00800007 +002292r 1 08 00 80 .faraddr $00800008 +002295r 1 09 00 80 .faraddr $00800009 +002298r 1 0A 00 80 .faraddr $0080000A +00229Br 1 0B 00 80 .faraddr $0080000B +00229Er 1 0C 00 80 .faraddr $0080000C +0022A1r 1 0D 00 80 .faraddr $0080000D +0022A4r 1 0E 00 80 .faraddr $0080000E +0022A7r 1 0F 00 80 .faraddr $0080000F +0022AAr 1 E1 FF 9F .faraddr $009FFFE1 +0022ADr 1 E2 FF 9F .faraddr $009FFFE2 +0022B0r 1 E3 FF 9F .faraddr $009FFFE3 +0022B3r 1 E4 FF 9F .faraddr $009FFFE4 +0022B6r 1 E5 FF 9F .faraddr $009FFFE5 +0022B9r 1 E6 FF 9F .faraddr $009FFFE6 +0022BCr 1 E7 FF 9F .faraddr $009FFFE7 +0022BFr 1 E8 FF 9F .faraddr $009FFFE8 +0022C2r 1 E9 FF 9F .faraddr $009FFFE9 +0022C5r 1 EA FF 9F .faraddr $009FFFEA +0022C8r 1 EB FF 9F .faraddr $009FFFEB +0022CBr 1 EC FF 9F .faraddr $009FFFEC +0022CEr 1 ED FF 9F .faraddr $009FFFED +0022D1r 1 EE FF 9F .faraddr $009FFFEE +0022D4r 1 EF FF 9F .faraddr $009FFFEF +0022D7r 1 F0 FF 9F .faraddr $009FFFF0 +0022DAr 1 F1 FF 9F .faraddr $009FFFF1 +0022DDr 1 F2 FF 9F .faraddr $009FFFF2 +0022E0r 1 F3 FF 9F .faraddr $009FFFF3 +0022E3r 1 F4 FF 9F .faraddr $009FFFF4 +0022E6r 1 F5 FF 9F .faraddr $009FFFF5 +0022E9r 1 F6 FF 9F .faraddr $009FFFF6 +0022ECr 1 F7 FF 9F .faraddr $009FFFF7 +0022EFr 1 F8 FF 9F .faraddr $009FFFF8 +0022F2r 1 F9 FF 9F .faraddr $009FFFF9 +0022F5r 1 FA FF 9F .faraddr $009FFFFA +0022F8r 1 FB FF 9F .faraddr $009FFFFB +0022FBr 1 FC FF 9F .faraddr $009FFFFC +0022FEr 1 FD FF 9F .faraddr $009FFFFD +002301r 1 FE FF 9F .faraddr $009FFFFE +002304r 1 FF FF 9F .faraddr $009FFFFF +002307r 1 00 00 A0 .faraddr $00A00000 +00230Ar 1 01 00 A0 .faraddr $00A00001 +00230Dr 1 02 00 A0 .faraddr $00A00002 +002310r 1 03 00 A0 .faraddr $00A00003 +002313r 1 04 00 A0 .faraddr $00A00004 +002316r 1 05 00 A0 .faraddr $00A00005 +002319r 1 06 00 A0 .faraddr $00A00006 +00231Cr 1 07 00 A0 .faraddr $00A00007 +00231Fr 1 08 00 A0 .faraddr $00A00008 +002322r 1 09 00 A0 .faraddr $00A00009 +002325r 1 0A 00 A0 .faraddr $00A0000A +002328r 1 0B 00 A0 .faraddr $00A0000B +00232Br 1 0C 00 A0 .faraddr $00A0000C +00232Er 1 0D 00 A0 .faraddr $00A0000D +002331r 1 0E 00 A0 .faraddr $00A0000E +002334r 1 0F 00 A0 .faraddr $00A0000F +002337r 1 E1 FF FF .faraddr $00FFFFE1 +00233Ar 1 E2 FF FF .faraddr $00FFFFE2 +00233Dr 1 E3 FF FF .faraddr $00FFFFE3 +002340r 1 E4 FF FF .faraddr $00FFFFE4 +002343r 1 E5 FF FF .faraddr $00FFFFE5 +002346r 1 E6 FF FF .faraddr $00FFFFE6 +002349r 1 E7 FF FF .faraddr $00FFFFE7 +00234Cr 1 E8 FF FF .faraddr $00FFFFE8 +00234Fr 1 E9 FF FF .faraddr $00FFFFE9 +002352r 1 EA FF FF .faraddr $00FFFFEA +002355r 1 EB FF FF .faraddr $00FFFFEB +002358r 1 EC FF FF .faraddr $00FFFFEC +00235Br 1 ED FF FF .faraddr $00FFFFED +00235Er 1 EE FF FF .faraddr $00FFFFEE +002361r 1 EF FF FF .faraddr $00FFFFEF +002364r 1 F0 FF FF .faraddr $00FFFFF0 +002367r 1 F1 FF FF .faraddr $00FFFFF1 +00236Ar 1 F2 FF FF .faraddr $00FFFFF2 +00236Dr 1 F3 FF FF .faraddr $00FFFFF3 +002370r 1 F4 FF FF .faraddr $00FFFFF4 +002373r 1 F5 FF FF .faraddr $00FFFFF5 +002376r 1 F6 FF FF .faraddr $00FFFFF6 +002379r 1 F7 FF FF .faraddr $00FFFFF7 +00237Cr 1 F8 FF FF .faraddr $00FFFFF8 +00237Fr 1 F9 FF FF .faraddr $00FFFFF9 +002382r 1 FA FF FF .faraddr $00FFFFFA +002385r 1 FB FF FF .faraddr $00FFFFFB +002388r 1 FC FF FF .faraddr $00FFFFFC +00238Br 1 FD FF FF .faraddr $00FFFFFD +00238Er 1 FE FF FF .faraddr $00FFFFFE +002391r 1 FF FF FF .faraddr $00FFFFFF +002394r 1 +002394r 1 ; alternative hex values +002394r 1 00 00 00 .faraddr 0h +002397r 1 01 00 00 .faraddr 1h +00239Ar 1 02 00 00 .faraddr 2h +00239Dr 1 03 00 00 .faraddr 3h +0023A0r 1 04 00 00 .faraddr 4h +0023A3r 1 05 00 00 .faraddr 5h +0023A6r 1 06 00 00 .faraddr 6h +0023A9r 1 07 00 00 .faraddr 7h +0023ACr 1 08 00 00 .faraddr 8h +0023AFr 1 09 00 00 .faraddr 9h +0023B2r 1 0A 00 00 .faraddr 0ah +0023B5r 1 0B 00 00 .faraddr 0bh +0023B8r 1 0C 00 00 .faraddr 0ch +0023BBr 1 0D 00 00 .faraddr 0dh +0023BEr 1 0E 00 00 .faraddr 0eh +0023C1r 1 0F 00 00 .faraddr 0fh +0023C4r 1 10 00 00 .faraddr 10h +0023C7r 1 11 00 00 .faraddr 11h +0023CAr 1 12 00 00 .faraddr 12h +0023CDr 1 13 00 00 .faraddr 13h +0023D0r 1 70 00 00 .faraddr 70h +0023D3r 1 71 00 00 .faraddr 71h +0023D6r 1 72 00 00 .faraddr 72h +0023D9r 1 73 00 00 .faraddr 73h +0023DCr 1 74 00 00 .faraddr 74h +0023DFr 1 75 00 00 .faraddr 75h +0023E2r 1 76 00 00 .faraddr 76h +0023E5r 1 77 00 00 .faraddr 77h +0023E8r 1 78 00 00 .faraddr 78h +0023EBr 1 79 00 00 .faraddr 79h +0023EEr 1 7A 00 00 .faraddr 7ah +0023F1r 1 7B 00 00 .faraddr 7bh +0023F4r 1 7C 00 00 .faraddr 7ch +0023F7r 1 7D 00 00 .faraddr 7dh +0023FAr 1 7E 00 00 .faraddr 7eh +0023FDr 1 7F 00 00 .faraddr 7fh +002400r 1 80 00 00 .faraddr 80h +002403r 1 81 00 00 .faraddr 81h +002406r 1 82 00 00 .faraddr 82h +002409r 1 83 00 00 .faraddr 83h +00240Cr 1 84 00 00 .faraddr 84h +00240Fr 1 85 00 00 .faraddr 85h +002412r 1 86 00 00 .faraddr 86h +002415r 1 F0 00 00 .faraddr 0f0h +002418r 1 F1 00 00 .faraddr 0f1h +00241Br 1 F2 00 00 .faraddr 0f2h +00241Er 1 F3 00 00 .faraddr 0f3h +002421r 1 F4 00 00 .faraddr 0f4h +002424r 1 F5 00 00 .faraddr 0f5h +002427r 1 F6 00 00 .faraddr 0f6h +00242Ar 1 F7 00 00 .faraddr 0f7h +00242Dr 1 F8 00 00 .faraddr 0f8h +002430r 1 F9 00 00 .faraddr 0f9h +002433r 1 FA 00 00 .faraddr 0fah +002436r 1 FB 00 00 .faraddr 0fbh +002439r 1 FC 00 00 .faraddr 0fch +00243Cr 1 FD 00 00 .faraddr 0fdh +00243Fr 1 FE 00 00 .faraddr 0feh +002442r 1 FF 00 00 .faraddr 0ffh +002445r 1 00 01 00 .faraddr 100h +002448r 1 01 01 00 .faraddr 101h +00244Br 1 02 01 00 .faraddr 102h +00244Er 1 03 01 00 .faraddr 103h +002451r 1 D2 0F 00 .faraddr 0fd2h +002454r 1 D3 0F 00 .faraddr 0fd3h +002457r 1 D4 0F 00 .faraddr 0fd4h +00245Ar 1 D5 0F 00 .faraddr 0fd5h +00245Dr 1 D6 0F 00 .faraddr 0fd6h +002460r 1 D7 0F 00 .faraddr 0fd7h +002463r 1 D8 0F 00 .faraddr 0fd8h +002466r 1 D9 0F 00 .faraddr 0fd9h +002469r 1 DA 0F 00 .faraddr 0fdah +00246Cr 1 DB 0F 00 .faraddr 0fdbh +00246Fr 1 DC 0F 00 .faraddr 0fdch +002472r 1 DD 0F 00 .faraddr 0fddh +002475r 1 DE 0F 00 .faraddr 0fdeh +002478r 1 DF 0F 00 .faraddr 0fdfh +00247Br 1 E0 0F 00 .faraddr 0fe0h +00247Er 1 E1 0F 00 .faraddr 0fe1h +002481r 1 E2 0F 00 .faraddr 0fe2h +002484r 1 E3 0F 00 .faraddr 0fe3h +002487r 1 E4 0F 00 .faraddr 0fe4h +00248Ar 1 E5 0F 00 .faraddr 0fe5h +00248Dr 1 E6 0F 00 .faraddr 0fe6h +002490r 1 E7 0F 00 .faraddr 0fe7h +002493r 1 E8 0F 00 .faraddr 0fe8h +002496r 1 E9 0F 00 .faraddr 0fe9h +002499r 1 EA 0F 00 .faraddr 0feah +00249Cr 1 EB 0F 00 .faraddr 0febh +00249Fr 1 EC 0F 00 .faraddr 0fech +0024A2r 1 ED 0F 00 .faraddr 0fedh +0024A5r 1 EE 0F 00 .faraddr 0feeh +0024A8r 1 EF 0F 00 .faraddr 0fefh +0024ABr 1 F0 0F 00 .faraddr 0ff0h +0024AEr 1 F1 0F 00 .faraddr 0ff1h +0024B1r 1 F2 0F 00 .faraddr 0ff2h +0024B4r 1 F3 0F 00 .faraddr 0ff3h +0024B7r 1 F4 0F 00 .faraddr 0ff4h +0024BAr 1 F5 0F 00 .faraddr 0ff5h +0024BDr 1 F6 0F 00 .faraddr 0ff6h +0024C0r 1 F7 0F 00 .faraddr 0ff7h +0024C3r 1 F8 0F 00 .faraddr 0ff8h +0024C6r 1 F9 0F 00 .faraddr 0ff9h +0024C9r 1 FA 0F 00 .faraddr 0ffah +0024CCr 1 FB 0F 00 .faraddr 0ffbh +0024CFr 1 FC 0F 00 .faraddr 0ffch +0024D2r 1 FD 0F 00 .faraddr 0ffdh +0024D5r 1 FE 0F 00 .faraddr 0ffeh +0024D8r 1 FF 0F 00 .faraddr 0fffh +0024DBr 1 00 10 00 .faraddr 1000h +0024DEr 1 01 10 00 .faraddr 1001h +0024E1r 1 02 10 00 .faraddr 1002h +0024E4r 1 03 10 00 .faraddr 1003h +0024E7r 1 04 10 00 .faraddr 1004h +0024EAr 1 05 10 00 .faraddr 1005h +0024EDr 1 06 10 00 .faraddr 1006h +0024F0r 1 07 10 00 .faraddr 1007h +0024F3r 1 08 10 00 .faraddr 1008h +0024F6r 1 F0 7F 00 .faraddr 7ff0h +0024F9r 1 F1 7F 00 .faraddr 7ff1h +0024FCr 1 F2 7F 00 .faraddr 7ff2h +0024FFr 1 F3 7F 00 .faraddr 7ff3h +002502r 1 F4 7F 00 .faraddr 7ff4h +002505r 1 F5 7F 00 .faraddr 7ff5h +002508r 1 F6 7F 00 .faraddr 7ff6h +00250Br 1 F7 7F 00 .faraddr 7ff7h +00250Er 1 F8 7F 00 .faraddr 7ff8h +002511r 1 F9 7F 00 .faraddr 7ff9h +002514r 1 FA 7F 00 .faraddr 7ffah +002517r 1 FB 7F 00 .faraddr 7ffbh +00251Ar 1 FC 7F 00 .faraddr 7ffch +00251Dr 1 FD 7F 00 .faraddr 7ffdh +002520r 1 FE 7F 00 .faraddr 7ffeh +002523r 1 FF 7F 00 .faraddr 7fffh +002526r 1 00 80 00 .faraddr 8000h +002529r 1 01 80 00 .faraddr 8001h +00252Cr 1 02 80 00 .faraddr 8002h +00252Fr 1 03 80 00 .faraddr 8003h +002532r 1 04 80 00 .faraddr 8004h +002535r 1 05 80 00 .faraddr 8005h +002538r 1 06 80 00 .faraddr 8006h +00253Br 1 07 80 00 .faraddr 8007h +00253Er 1 08 80 00 .faraddr 8008h +002541r 1 09 80 00 .faraddr 8009h +002544r 1 0A 80 00 .faraddr 800ah +002547r 1 0B 80 00 .faraddr 800bh +00254Ar 1 E1 9F 00 .faraddr 9fe1h +00254Dr 1 E2 9F 00 .faraddr 9fe2h +002550r 1 E3 9F 00 .faraddr 9fe3h +002553r 1 E4 9F 00 .faraddr 9fe4h +002556r 1 E5 9F 00 .faraddr 9fe5h +002559r 1 E6 9F 00 .faraddr 9fe6h +00255Cr 1 E7 9F 00 .faraddr 9fe7h +00255Fr 1 E8 9F 00 .faraddr 9fe8h +002562r 1 E9 9F 00 .faraddr 9fe9h +002565r 1 EA 9F 00 .faraddr 9feah +002568r 1 EB 9F 00 .faraddr 9febh +00256Br 1 EC 9F 00 .faraddr 9fech +00256Er 1 ED 9F 00 .faraddr 9fedh +002571r 1 EE 9F 00 .faraddr 9feeh +002574r 1 EF 9F 00 .faraddr 9fefh +002577r 1 F0 9F 00 .faraddr 9ff0h +00257Ar 1 F1 9F 00 .faraddr 9ff1h +00257Dr 1 F2 9F 00 .faraddr 9ff2h +002580r 1 F3 9F 00 .faraddr 9ff3h +002583r 1 F4 9F 00 .faraddr 9ff4h +002586r 1 F5 9F 00 .faraddr 9ff5h +002589r 1 F6 9F 00 .faraddr 9ff6h +00258Cr 1 F7 9F 00 .faraddr 9ff7h +00258Fr 1 F8 9F 00 .faraddr 9ff8h +002592r 1 F9 9F 00 .faraddr 9ff9h +002595r 1 FA 9F 00 .faraddr 9ffah +002598r 1 FB 9F 00 .faraddr 9ffbh +00259Br 1 FC 9F 00 .faraddr 9ffch +00259Er 1 FD 9F 00 .faraddr 9ffdh +0025A1r 1 FE 9F 00 .faraddr 9ffeh +0025A4r 1 FF 9F 00 .faraddr 9fffh +0025A7r 1 00 A0 00 .faraddr 0a000h +0025AAr 1 01 A0 00 .faraddr 0a001h +0025ADr 1 02 A0 00 .faraddr 0a002h +0025B0r 1 03 A0 00 .faraddr 0a003h +0025B3r 1 04 A0 00 .faraddr 0a004h +0025B6r 1 05 A0 00 .faraddr 0a005h +0025B9r 1 06 A0 00 .faraddr 0a006h +0025BCr 1 07 A0 00 .faraddr 0a007h +0025BFr 1 08 A0 00 .faraddr 0a008h +0025C2r 1 09 A0 00 .faraddr 0a009h +0025C5r 1 0A A0 00 .faraddr 0a00ah +0025C8r 1 0B A0 00 .faraddr 0a00bh +0025CBr 1 0C A0 00 .faraddr 0a00ch +0025CEr 1 0D A0 00 .faraddr 0a00dh +0025D1r 1 0E A0 00 .faraddr 0a00eh +0025D4r 1 0F A0 00 .faraddr 0a00fh +0025D7r 1 E1 AF 00 .faraddr 0afe1h +0025DAr 1 E2 AF 00 .faraddr 0afe2h +0025DDr 1 E3 AF 00 .faraddr 0afe3h +0025E0r 1 E4 AF 00 .faraddr 0afe4h +0025E3r 1 E5 AF 00 .faraddr 0afe5h +0025E6r 1 E6 AF 00 .faraddr 0afe6h +0025E9r 1 E7 AF 00 .faraddr 0afe7h +0025ECr 1 E8 AF 00 .faraddr 0afe8h +0025EFr 1 E9 AF 00 .faraddr 0afe9h +0025F2r 1 EA AF 00 .faraddr 0afeah +0025F5r 1 EB AF 00 .faraddr 0afebh +0025F8r 1 EC AF 00 .faraddr 0afech +0025FBr 1 ED AF 00 .faraddr 0afedh +0025FEr 1 EE AF 00 .faraddr 0afeeh +002601r 1 EF AF 00 .faraddr 0afefh +002604r 1 F0 AF 00 .faraddr 0aff0h +002607r 1 F1 AF 00 .faraddr 0aff1h +00260Ar 1 F2 AF 00 .faraddr 0aff2h +00260Dr 1 F3 AF 00 .faraddr 0aff3h +002610r 1 F4 AF 00 .faraddr 0aff4h +002613r 1 F5 AF 00 .faraddr 0aff5h +002616r 1 F6 AF 00 .faraddr 0aff6h +002619r 1 F7 AF 00 .faraddr 0aff7h +00261Cr 1 F8 AF 00 .faraddr 0aff8h +00261Fr 1 F9 AF 00 .faraddr 0aff9h +002622r 1 FA AF 00 .faraddr 0affah +002625r 1 FB AF 00 .faraddr 0affbh +002628r 1 FC AF 00 .faraddr 0affch +00262Br 1 FD AF 00 .faraddr 0affdh +00262Er 1 FE AF 00 .faraddr 0affeh +002631r 1 FF AF 00 .faraddr 0afffh +002634r 1 00 B0 00 .faraddr 0b000h +002637r 1 01 B0 00 .faraddr 0b001h +00263Ar 1 02 B0 00 .faraddr 0b002h +00263Dr 1 03 B0 00 .faraddr 0b003h +002640r 1 04 B0 00 .faraddr 0b004h +002643r 1 05 B0 00 .faraddr 0b005h +002646r 1 06 B0 00 .faraddr 0b006h +002649r 1 07 B0 00 .faraddr 0b007h +00264Cr 1 08 B0 00 .faraddr 0b008h +00264Fr 1 09 B0 00 .faraddr 0b009h +002652r 1 0A B0 00 .faraddr 0b00ah +002655r 1 0B B0 00 .faraddr 0b00bh +002658r 1 0C B0 00 .faraddr 0b00ch +00265Br 1 0D B0 00 .faraddr 0b00dh +00265Er 1 0E B0 00 .faraddr 0b00eh +002661r 1 0F B0 00 .faraddr 0b00fh +002664r 1 E1 FF 00 .faraddr 0ffe1h +002667r 1 E2 FF 00 .faraddr 0ffe2h +00266Ar 1 E3 FF 00 .faraddr 0ffe3h +00266Dr 1 E4 FF 00 .faraddr 0ffe4h +002670r 1 E5 FF 00 .faraddr 0ffe5h +002673r 1 E6 FF 00 .faraddr 0ffe6h +002676r 1 E7 FF 00 .faraddr 0ffe7h +002679r 1 E8 FF 00 .faraddr 0ffe8h +00267Cr 1 E9 FF 00 .faraddr 0ffe9h +00267Fr 1 EA FF 00 .faraddr 0ffeah +002682r 1 EB FF 00 .faraddr 0ffebh +002685r 1 EC FF 00 .faraddr 0ffech +002688r 1 ED FF 00 .faraddr 0ffedh +00268Br 1 EE FF 00 .faraddr 0ffeeh +00268Er 1 EF FF 00 .faraddr 0ffefh +002691r 1 F0 FF 00 .faraddr 0fff0h +002694r 1 F1 FF 00 .faraddr 0fff1h +002697r 1 F2 FF 00 .faraddr 0fff2h +00269Ar 1 F3 FF 00 .faraddr 0fff3h +00269Dr 1 F4 FF 00 .faraddr 0fff4h +0026A0r 1 F5 FF 00 .faraddr 0fff5h +0026A3r 1 F6 FF 00 .faraddr 0fff6h +0026A6r 1 F7 FF 00 .faraddr 0fff7h +0026A9r 1 F8 FF 00 .faraddr 0fff8h +0026ACr 1 F9 FF 00 .faraddr 0fff9h +0026AFr 1 FA FF 00 .faraddr 0fffah +0026B2r 1 FB FF 00 .faraddr 0fffbh +0026B5r 1 FC FF 00 .faraddr 0fffch +0026B8r 1 FD FF 00 .faraddr 0fffdh +0026BBr 1 FE FF 00 .faraddr 0fffeh +0026BEr 1 FF FF 00 .faraddr 0ffffh +0026C1r 1 00 00 01 .faraddr 10000h +0026C4r 1 01 00 01 .faraddr 10001h +0026C7r 1 02 00 01 .faraddr 10002h +0026CAr 1 03 00 01 .faraddr 10003h +0026CDr 1 04 00 01 .faraddr 10004h +0026D0r 1 05 00 01 .faraddr 10005h +0026D3r 1 06 00 01 .faraddr 10006h +0026D6r 1 07 00 01 .faraddr 10007h +0026D9r 1 08 00 01 .faraddr 10008h +0026DCr 1 09 00 01 .faraddr 10009h +0026DFr 1 0A 00 01 .faraddr 1000ah +0026E2r 1 0B 00 01 .faraddr 1000bh +0026E5r 1 0C 00 01 .faraddr 1000ch +0026E8r 1 0D 00 01 .faraddr 1000dh +0026EBr 1 0E 00 01 .faraddr 1000eh +0026EEr 1 0F 00 01 .faraddr 1000fh +0026F1r 1 E1 FF 10 .faraddr 10ffe1h +0026F4r 1 E2 FF 10 .faraddr 10ffe2h +0026F7r 1 E3 FF 10 .faraddr 10ffe3h +0026FAr 1 E4 FF 10 .faraddr 10ffe4h +0026FDr 1 E5 FF 10 .faraddr 10ffe5h +002700r 1 E6 FF 10 .faraddr 10ffe6h +002703r 1 E7 FF 10 .faraddr 10ffe7h +002706r 1 E8 FF 10 .faraddr 10ffe8h +002709r 1 E9 FF 10 .faraddr 10ffe9h +00270Cr 1 EA FF 10 .faraddr 10ffeah +00270Fr 1 EB FF 10 .faraddr 10ffebh +002712r 1 EC FF 10 .faraddr 10ffech +002715r 1 ED FF 10 .faraddr 10ffedh +002718r 1 EE FF 10 .faraddr 10ffeeh +00271Br 1 EF FF 10 .faraddr 10ffefh +00271Er 1 F0 FF 10 .faraddr 10fff0h +002721r 1 F1 FF 10 .faraddr 10fff1h +002724r 1 F2 FF 10 .faraddr 10fff2h +002727r 1 F3 FF 10 .faraddr 10fff3h +00272Ar 1 F4 FF 10 .faraddr 10fff4h +00272Dr 1 F5 FF 10 .faraddr 10fff5h +002730r 1 F6 FF 10 .faraddr 10fff6h +002733r 1 F7 FF 10 .faraddr 10fff7h +002736r 1 F8 FF 10 .faraddr 10fff8h +002739r 1 F9 FF 10 .faraddr 10fff9h +00273Cr 1 FA FF 10 .faraddr 10fffah +00273Fr 1 FB FF 10 .faraddr 10fffbh +002742r 1 FC FF 10 .faraddr 10fffch +002745r 1 FD FF 10 .faraddr 10fffdh +002748r 1 FE FF 10 .faraddr 10fffeh +00274Br 1 FF FF 10 .faraddr 10ffffh +00274Er 1 00 00 11 .faraddr 110000h +002751r 1 01 00 11 .faraddr 110001h +002754r 1 02 00 11 .faraddr 110002h +002757r 1 03 00 11 .faraddr 110003h +00275Ar 1 04 00 11 .faraddr 110004h +00275Dr 1 05 00 11 .faraddr 110005h +002760r 1 06 00 11 .faraddr 110006h +002763r 1 07 00 11 .faraddr 110007h +002766r 1 08 00 11 .faraddr 110008h +002769r 1 09 00 11 .faraddr 110009h +00276Cr 1 0A 00 11 .faraddr 11000ah +00276Fr 1 0B 00 11 .faraddr 11000bh +002772r 1 0C 00 11 .faraddr 11000ch +002775r 1 0D 00 11 .faraddr 11000dh +002778r 1 0E 00 11 .faraddr 11000eh +00277Br 1 0F 00 11 .faraddr 11000fh +00277Er 1 E1 FF 20 .faraddr 20ffe1h +002781r 1 E2 FF 20 .faraddr 20ffe2h +002784r 1 E3 FF 20 .faraddr 20ffe3h +002787r 1 E4 FF 20 .faraddr 20ffe4h +00278Ar 1 E5 FF 20 .faraddr 20ffe5h +00278Dr 1 E6 FF 20 .faraddr 20ffe6h +002790r 1 E7 FF 20 .faraddr 20ffe7h +002793r 1 E8 FF 20 .faraddr 20ffe8h +002796r 1 E9 FF 20 .faraddr 20ffe9h +002799r 1 EA FF 20 .faraddr 20ffeah +00279Cr 1 EB FF 20 .faraddr 20ffebh +00279Fr 1 EC FF 20 .faraddr 20ffech +0027A2r 1 ED FF 20 .faraddr 20ffedh +0027A5r 1 EE FF 20 .faraddr 20ffeeh +0027A8r 1 EF FF 20 .faraddr 20ffefh +0027ABr 1 F0 FF 20 .faraddr 20fff0h +0027AEr 1 F1 FF 20 .faraddr 20fff1h +0027B1r 1 F2 FF 20 .faraddr 20fff2h +0027B4r 1 F3 FF 20 .faraddr 20fff3h +0027B7r 1 F4 FF 20 .faraddr 20fff4h +0027BAr 1 F5 FF 20 .faraddr 20fff5h +0027BDr 1 F6 FF 20 .faraddr 20fff6h +0027C0r 1 F7 FF 20 .faraddr 20fff7h +0027C3r 1 F8 FF 20 .faraddr 20fff8h +0027C6r 1 F9 FF 20 .faraddr 20fff9h +0027C9r 1 FA FF 20 .faraddr 20fffah +0027CCr 1 FB FF 20 .faraddr 20fffbh +0027CFr 1 FC FF 20 .faraddr 20fffch +0027D2r 1 FD FF 20 .faraddr 20fffdh +0027D5r 1 FE FF 20 .faraddr 20fffeh +0027D8r 1 FF FF 20 .faraddr 20ffffh +0027DBr 1 00 00 21 .faraddr 210000h +0027DEr 1 01 00 21 .faraddr 210001h +0027E1r 1 02 00 21 .faraddr 210002h +0027E4r 1 03 00 21 .faraddr 210003h +0027E7r 1 04 00 21 .faraddr 210004h +0027EAr 1 05 00 21 .faraddr 210005h +0027EDr 1 06 00 21 .faraddr 210006h +0027F0r 1 07 00 21 .faraddr 210007h +0027F3r 1 08 00 21 .faraddr 210008h +0027F6r 1 09 00 21 .faraddr 210009h +0027F9r 1 0A 00 21 .faraddr 21000ah +0027FCr 1 0B 00 21 .faraddr 21000bh +0027FFr 1 0C 00 21 .faraddr 21000ch +002802r 1 0D 00 21 .faraddr 21000dh +002805r 1 0E 00 21 .faraddr 21000eh +002808r 1 0F 00 21 .faraddr 21000fh +00280Br 1 E1 FF 7F .faraddr 7fffe1h +00280Er 1 E2 FF 7F .faraddr 7fffe2h +002811r 1 E3 FF 7F .faraddr 7fffe3h +002814r 1 E4 FF 7F .faraddr 7fffe4h +002817r 1 E5 FF 7F .faraddr 7fffe5h +00281Ar 1 E6 FF 7F .faraddr 7fffe6h +00281Dr 1 E7 FF 7F .faraddr 7fffe7h +002820r 1 E8 FF 7F .faraddr 7fffe8h +002823r 1 E9 FF 7F .faraddr 7fffe9h +002826r 1 EA FF 7F .faraddr 7fffeah +002829r 1 EB FF 7F .faraddr 7fffebh +00282Cr 1 EC FF 7F .faraddr 7fffech +00282Fr 1 ED FF 7F .faraddr 7fffedh +002832r 1 EE FF 7F .faraddr 7fffeeh +002835r 1 EF FF 7F .faraddr 7fffefh +002838r 1 F0 FF 7F .faraddr 7ffff0h +00283Br 1 F1 FF 7F .faraddr 7ffff1h +00283Er 1 F2 FF 7F .faraddr 7ffff2h +002841r 1 F3 FF 7F .faraddr 7ffff3h +002844r 1 F4 FF 7F .faraddr 7ffff4h +002847r 1 F5 FF 7F .faraddr 7ffff5h +00284Ar 1 F6 FF 7F .faraddr 7ffff6h +00284Dr 1 F7 FF 7F .faraddr 7ffff7h +002850r 1 F8 FF 7F .faraddr 7ffff8h +002853r 1 F9 FF 7F .faraddr 7ffff9h +002856r 1 FA FF 7F .faraddr 7ffffah +002859r 1 FB FF 7F .faraddr 7ffffbh +00285Cr 1 FC FF 7F .faraddr 7ffffch +00285Fr 1 FD FF 7F .faraddr 7ffffdh +002862r 1 FE FF 7F .faraddr 7ffffeh +002865r 1 FF FF 7F .faraddr 7fffffh +002868r 1 00 00 80 .faraddr 800000h +00286Br 1 01 00 80 .faraddr 800001h +00286Er 1 02 00 80 .faraddr 800002h +002871r 1 03 00 80 .faraddr 800003h +002874r 1 04 00 80 .faraddr 800004h +002877r 1 05 00 80 .faraddr 800005h +00287Ar 1 06 00 80 .faraddr 800006h +00287Dr 1 07 00 80 .faraddr 800007h +002880r 1 08 00 80 .faraddr 800008h +002883r 1 09 00 80 .faraddr 800009h +002886r 1 0A 00 80 .faraddr 80000ah +002889r 1 0B 00 80 .faraddr 80000bh +00288Cr 1 0C 00 80 .faraddr 80000ch +00288Fr 1 0D 00 80 .faraddr 80000dh +002892r 1 0E 00 80 .faraddr 80000eh +002895r 1 0F 00 80 .faraddr 80000fh +002898r 1 E1 FF 9F .faraddr 9fffe1h +00289Br 1 E2 FF 9F .faraddr 9fffe2h +00289Er 1 E3 FF 9F .faraddr 9fffe3h +0028A1r 1 E4 FF 9F .faraddr 9fffe4h +0028A4r 1 E5 FF 9F .faraddr 9fffe5h +0028A7r 1 E6 FF 9F .faraddr 9fffe6h +0028AAr 1 E7 FF 9F .faraddr 9fffe7h +0028ADr 1 E8 FF 9F .faraddr 9fffe8h +0028B0r 1 E9 FF 9F .faraddr 9fffe9h +0028B3r 1 EA FF 9F .faraddr 9fffeah +0028B6r 1 EB FF 9F .faraddr 9fffebh +0028B9r 1 EC FF 9F .faraddr 9fffech +0028BCr 1 ED FF 9F .faraddr 9fffedh +0028BFr 1 EE FF 9F .faraddr 9fffeeh +0028C2r 1 EF FF 9F .faraddr 9fffefh +0028C5r 1 F0 FF 9F .faraddr 9ffff0h +0028C8r 1 F1 FF 9F .faraddr 9ffff1h +0028CBr 1 F2 FF 9F .faraddr 9ffff2h +0028CEr 1 F3 FF 9F .faraddr 9ffff3h +0028D1r 1 F4 FF 9F .faraddr 9ffff4h +0028D4r 1 F5 FF 9F .faraddr 9ffff5h +0028D7r 1 F6 FF 9F .faraddr 9ffff6h +0028DAr 1 F7 FF 9F .faraddr 9ffff7h +0028DDr 1 F8 FF 9F .faraddr 9ffff8h +0028E0r 1 F9 FF 9F .faraddr 9ffff9h +0028E3r 1 FA FF 9F .faraddr 9ffffah +0028E6r 1 FB FF 9F .faraddr 9ffffbh +0028E9r 1 FC FF 9F .faraddr 9ffffch +0028ECr 1 FD FF 9F .faraddr 9ffffdh +0028EFr 1 FE FF 9F .faraddr 9ffffeh +0028F2r 1 FF FF 9F .faraddr 9fffffh +0028F5r 1 00 00 A0 .faraddr 0a00000h +0028F8r 1 01 00 A0 .faraddr 0a00001h +0028FBr 1 02 00 A0 .faraddr 0a00002h +0028FEr 1 03 00 A0 .faraddr 0a00003h +002901r 1 04 00 A0 .faraddr 0a00004h +002904r 1 05 00 A0 .faraddr 0a00005h +002907r 1 06 00 A0 .faraddr 0a00006h +00290Ar 1 07 00 A0 .faraddr 0a00007h +00290Dr 1 08 00 A0 .faraddr 0a00008h +002910r 1 09 00 A0 .faraddr 0a00009h +002913r 1 0A 00 A0 .faraddr 0a0000ah +002916r 1 0B 00 A0 .faraddr 0a0000bh +002919r 1 0C 00 A0 .faraddr 0a0000ch +00291Cr 1 0D 00 A0 .faraddr 0a0000dh +00291Fr 1 0E 00 A0 .faraddr 0a0000eh +002922r 1 0F 00 A0 .faraddr 0a0000fh +002925r 1 E1 FF FF .faraddr 0ffffe1h +002928r 1 E2 FF FF .faraddr 0ffffe2h +00292Br 1 E3 FF FF .faraddr 0ffffe3h +00292Er 1 E4 FF FF .faraddr 0ffffe4h +002931r 1 E5 FF FF .faraddr 0ffffe5h +002934r 1 E6 FF FF .faraddr 0ffffe6h +002937r 1 E7 FF FF .faraddr 0ffffe7h +00293Ar 1 E8 FF FF .faraddr 0ffffe8h +00293Dr 1 E9 FF FF .faraddr 0ffffe9h +002940r 1 EA FF FF .faraddr 0ffffeah +002943r 1 EB FF FF .faraddr 0ffffebh +002946r 1 EC FF FF .faraddr 0ffffech +002949r 1 ED FF FF .faraddr 0ffffedh +00294Cr 1 EE FF FF .faraddr 0ffffeeh +00294Fr 1 EF FF FF .faraddr 0ffffefh +002952r 1 F0 FF FF .faraddr 0fffff0h +002955r 1 F1 FF FF .faraddr 0fffff1h +002958r 1 F2 FF FF .faraddr 0fffff2h +00295Br 1 F3 FF FF .faraddr 0fffff3h +00295Er 1 F4 FF FF .faraddr 0fffff4h +002961r 1 F5 FF FF .faraddr 0fffff5h +002964r 1 F6 FF FF .faraddr 0fffff6h +002967r 1 F7 FF FF .faraddr 0fffff7h +00296Ar 1 F8 FF FF .faraddr 0fffff8h +00296Dr 1 F9 FF FF .faraddr 0fffff9h +002970r 1 FA FF FF .faraddr 0fffffah +002973r 1 FB FF FF .faraddr 0fffffbh +002976r 1 FC FF FF .faraddr 0fffffch +002979r 1 FD FF FF .faraddr 0fffffdh +00297Cr 1 FE FF FF .faraddr 0fffffeh +00297Fr 1 FF FF FF .faraddr 0ffffffh +002982r 1 +002982r 1 ; alternative hex values, uppercase +002982r 1 00 00 00 .faraddr 0h +002985r 1 01 00 00 .faraddr 1h +002988r 1 02 00 00 .faraddr 2h +00298Br 1 03 00 00 .faraddr 3h +00298Er 1 04 00 00 .faraddr 4h +002991r 1 05 00 00 .faraddr 5h +002994r 1 06 00 00 .faraddr 6h +002997r 1 07 00 00 .faraddr 7h +00299Ar 1 08 00 00 .faraddr 8h +00299Dr 1 09 00 00 .faraddr 9h +0029A0r 1 0A 00 00 .faraddr 0Ah +0029A3r 1 0B 00 00 .faraddr 0Bh +0029A6r 1 0C 00 00 .faraddr 0Ch +0029A9r 1 0D 00 00 .faraddr 0Dh +0029ACr 1 0E 00 00 .faraddr 0Eh +0029AFr 1 0F 00 00 .faraddr 0Fh +0029B2r 1 10 00 00 .faraddr 10h +0029B5r 1 11 00 00 .faraddr 11h +0029B8r 1 12 00 00 .faraddr 12h +0029BBr 1 13 00 00 .faraddr 13h +0029BEr 1 70 00 00 .faraddr 70h +0029C1r 1 71 00 00 .faraddr 71h +0029C4r 1 72 00 00 .faraddr 72h +0029C7r 1 73 00 00 .faraddr 73h +0029CAr 1 74 00 00 .faraddr 74h +0029CDr 1 75 00 00 .faraddr 75h +0029D0r 1 76 00 00 .faraddr 76h +0029D3r 1 77 00 00 .faraddr 77h +0029D6r 1 78 00 00 .faraddr 78h +0029D9r 1 79 00 00 .faraddr 79h +0029DCr 1 7A 00 00 .faraddr 7Ah +0029DFr 1 7B 00 00 .faraddr 7Bh +0029E2r 1 7C 00 00 .faraddr 7Ch +0029E5r 1 7D 00 00 .faraddr 7Dh +0029E8r 1 7E 00 00 .faraddr 7Eh +0029EBr 1 7F 00 00 .faraddr 7Fh +0029EEr 1 80 00 00 .faraddr 80h +0029F1r 1 81 00 00 .faraddr 81h +0029F4r 1 82 00 00 .faraddr 82h +0029F7r 1 83 00 00 .faraddr 83h +0029FAr 1 84 00 00 .faraddr 84h +0029FDr 1 85 00 00 .faraddr 85h +002A00r 1 86 00 00 .faraddr 86h +002A03r 1 F0 00 00 .faraddr 0F0h +002A06r 1 F1 00 00 .faraddr 0F1h +002A09r 1 F2 00 00 .faraddr 0F2h +002A0Cr 1 F3 00 00 .faraddr 0F3h +002A0Fr 1 F4 00 00 .faraddr 0F4h +002A12r 1 F5 00 00 .faraddr 0F5h +002A15r 1 F6 00 00 .faraddr 0F6h +002A18r 1 F7 00 00 .faraddr 0F7h +002A1Br 1 F8 00 00 .faraddr 0F8h +002A1Er 1 F9 00 00 .faraddr 0F9h +002A21r 1 FA 00 00 .faraddr 0FAh +002A24r 1 FB 00 00 .faraddr 0FBh +002A27r 1 FC 00 00 .faraddr 0FCh +002A2Ar 1 FD 00 00 .faraddr 0FDh +002A2Dr 1 FE 00 00 .faraddr 0FEh +002A30r 1 FF 00 00 .faraddr 0FFh +002A33r 1 00 01 00 .faraddr 100h +002A36r 1 01 01 00 .faraddr 101h +002A39r 1 02 01 00 .faraddr 102h +002A3Cr 1 03 01 00 .faraddr 103h +002A3Fr 1 D2 0F 00 .faraddr 0FD2h +002A42r 1 D3 0F 00 .faraddr 0FD3h +002A45r 1 D4 0F 00 .faraddr 0FD4h +002A48r 1 D5 0F 00 .faraddr 0FD5h +002A4Br 1 D6 0F 00 .faraddr 0FD6h +002A4Er 1 D7 0F 00 .faraddr 0FD7h +002A51r 1 D8 0F 00 .faraddr 0FD8h +002A54r 1 D9 0F 00 .faraddr 0FD9h +002A57r 1 DA 0F 00 .faraddr 0FDAh +002A5Ar 1 DB 0F 00 .faraddr 0FDBh +002A5Dr 1 DC 0F 00 .faraddr 0FDCh +002A60r 1 DD 0F 00 .faraddr 0FDDh +002A63r 1 DE 0F 00 .faraddr 0FDEh +002A66r 1 DF 0F 00 .faraddr 0FDFh +002A69r 1 E0 0F 00 .faraddr 0FE0h +002A6Cr 1 E1 0F 00 .faraddr 0FE1h +002A6Fr 1 E2 0F 00 .faraddr 0FE2h +002A72r 1 E3 0F 00 .faraddr 0FE3h +002A75r 1 E4 0F 00 .faraddr 0FE4h +002A78r 1 E5 0F 00 .faraddr 0FE5h +002A7Br 1 E6 0F 00 .faraddr 0FE6h +002A7Er 1 E7 0F 00 .faraddr 0FE7h +002A81r 1 E8 0F 00 .faraddr 0FE8h +002A84r 1 E9 0F 00 .faraddr 0FE9h +002A87r 1 EA 0F 00 .faraddr 0FEAh +002A8Ar 1 EB 0F 00 .faraddr 0FEBh +002A8Dr 1 EC 0F 00 .faraddr 0FECh +002A90r 1 ED 0F 00 .faraddr 0FEDh +002A93r 1 EE 0F 00 .faraddr 0FEEh +002A96r 1 EF 0F 00 .faraddr 0FEFh +002A99r 1 F0 0F 00 .faraddr 0FF0h +002A9Cr 1 F1 0F 00 .faraddr 0FF1h +002A9Fr 1 F2 0F 00 .faraddr 0FF2h +002AA2r 1 F3 0F 00 .faraddr 0FF3h +002AA5r 1 F4 0F 00 .faraddr 0FF4h +002AA8r 1 F5 0F 00 .faraddr 0FF5h +002AABr 1 F6 0F 00 .faraddr 0FF6h +002AAEr 1 F7 0F 00 .faraddr 0FF7h +002AB1r 1 F8 0F 00 .faraddr 0FF8h +002AB4r 1 F9 0F 00 .faraddr 0FF9h +002AB7r 1 FA 0F 00 .faraddr 0FFAh +002ABAr 1 FB 0F 00 .faraddr 0FFBh +002ABDr 1 FC 0F 00 .faraddr 0FFCh +002AC0r 1 FD 0F 00 .faraddr 0FFDh +002AC3r 1 FE 0F 00 .faraddr 0FFEh +002AC6r 1 FF 0F 00 .faraddr 0FFFh +002AC9r 1 00 10 00 .faraddr 1000h +002ACCr 1 01 10 00 .faraddr 1001h +002ACFr 1 02 10 00 .faraddr 1002h +002AD2r 1 03 10 00 .faraddr 1003h +002AD5r 1 04 10 00 .faraddr 1004h +002AD8r 1 05 10 00 .faraddr 1005h +002ADBr 1 06 10 00 .faraddr 1006h +002ADEr 1 07 10 00 .faraddr 1007h +002AE1r 1 08 10 00 .faraddr 1008h +002AE4r 1 F0 7F 00 .faraddr 7FF0h +002AE7r 1 F1 7F 00 .faraddr 7FF1h +002AEAr 1 F2 7F 00 .faraddr 7FF2h +002AEDr 1 F3 7F 00 .faraddr 7FF3h +002AF0r 1 F4 7F 00 .faraddr 7FF4h +002AF3r 1 F5 7F 00 .faraddr 7FF5h +002AF6r 1 F6 7F 00 .faraddr 7FF6h +002AF9r 1 F7 7F 00 .faraddr 7FF7h +002AFCr 1 F8 7F 00 .faraddr 7FF8h +002AFFr 1 F9 7F 00 .faraddr 7FF9h +002B02r 1 FA 7F 00 .faraddr 7FFAh +002B05r 1 FB 7F 00 .faraddr 7FFBh +002B08r 1 FC 7F 00 .faraddr 7FFCh +002B0Br 1 FD 7F 00 .faraddr 7FFDh +002B0Er 1 FE 7F 00 .faraddr 7FFEh +002B11r 1 FF 7F 00 .faraddr 7FFFh +002B14r 1 00 80 00 .faraddr 8000h +002B17r 1 01 80 00 .faraddr 8001h +002B1Ar 1 02 80 00 .faraddr 8002h +002B1Dr 1 03 80 00 .faraddr 8003h +002B20r 1 04 80 00 .faraddr 8004h +002B23r 1 05 80 00 .faraddr 8005h +002B26r 1 06 80 00 .faraddr 8006h +002B29r 1 07 80 00 .faraddr 8007h +002B2Cr 1 08 80 00 .faraddr 8008h +002B2Fr 1 09 80 00 .faraddr 8009h +002B32r 1 0A 80 00 .faraddr 800Ah +002B35r 1 0B 80 00 .faraddr 800Bh +002B38r 1 E1 9F 00 .faraddr 9FE1h +002B3Br 1 E2 9F 00 .faraddr 9FE2h +002B3Er 1 E3 9F 00 .faraddr 9FE3h +002B41r 1 E4 9F 00 .faraddr 9FE4h +002B44r 1 E5 9F 00 .faraddr 9FE5h +002B47r 1 E6 9F 00 .faraddr 9FE6h +002B4Ar 1 E7 9F 00 .faraddr 9FE7h +002B4Dr 1 E8 9F 00 .faraddr 9FE8h +002B50r 1 E9 9F 00 .faraddr 9FE9h +002B53r 1 EA 9F 00 .faraddr 9FEAh +002B56r 1 EB 9F 00 .faraddr 9FEBh +002B59r 1 EC 9F 00 .faraddr 9FECh +002B5Cr 1 ED 9F 00 .faraddr 9FEDh +002B5Fr 1 EE 9F 00 .faraddr 9FEEh +002B62r 1 EF 9F 00 .faraddr 9FEFh +002B65r 1 F0 9F 00 .faraddr 9FF0h +002B68r 1 F1 9F 00 .faraddr 9FF1h +002B6Br 1 F2 9F 00 .faraddr 9FF2h +002B6Er 1 F3 9F 00 .faraddr 9FF3h +002B71r 1 F4 9F 00 .faraddr 9FF4h +002B74r 1 F5 9F 00 .faraddr 9FF5h +002B77r 1 F6 9F 00 .faraddr 9FF6h +002B7Ar 1 F7 9F 00 .faraddr 9FF7h +002B7Dr 1 F8 9F 00 .faraddr 9FF8h +002B80r 1 F9 9F 00 .faraddr 9FF9h +002B83r 1 FA 9F 00 .faraddr 9FFAh +002B86r 1 FB 9F 00 .faraddr 9FFBh +002B89r 1 FC 9F 00 .faraddr 9FFCh +002B8Cr 1 FD 9F 00 .faraddr 9FFDh +002B8Fr 1 FE 9F 00 .faraddr 9FFEh +002B92r 1 FF 9F 00 .faraddr 9FFFh +002B95r 1 00 A0 00 .faraddr 0A000h +002B98r 1 01 A0 00 .faraddr 0A001h +002B9Br 1 02 A0 00 .faraddr 0A002h +002B9Er 1 03 A0 00 .faraddr 0A003h +002BA1r 1 04 A0 00 .faraddr 0A004h +002BA4r 1 05 A0 00 .faraddr 0A005h +002BA7r 1 06 A0 00 .faraddr 0A006h +002BAAr 1 07 A0 00 .faraddr 0A007h +002BADr 1 08 A0 00 .faraddr 0A008h +002BB0r 1 09 A0 00 .faraddr 0A009h +002BB3r 1 0A A0 00 .faraddr 0A00Ah +002BB6r 1 0B A0 00 .faraddr 0A00Bh +002BB9r 1 0C A0 00 .faraddr 0A00Ch +002BBCr 1 0D A0 00 .faraddr 0A00Dh +002BBFr 1 0E A0 00 .faraddr 0A00Eh +002BC2r 1 0F A0 00 .faraddr 0A00Fh +002BC5r 1 E1 AF 00 .faraddr 0AFE1h +002BC8r 1 E2 AF 00 .faraddr 0AFE2h +002BCBr 1 E3 AF 00 .faraddr 0AFE3h +002BCEr 1 E4 AF 00 .faraddr 0AFE4h +002BD1r 1 E5 AF 00 .faraddr 0AFE5h +002BD4r 1 E6 AF 00 .faraddr 0AFE6h +002BD7r 1 E7 AF 00 .faraddr 0AFE7h +002BDAr 1 E8 AF 00 .faraddr 0AFE8h +002BDDr 1 E9 AF 00 .faraddr 0AFE9h +002BE0r 1 EA AF 00 .faraddr 0AFEAh +002BE3r 1 EB AF 00 .faraddr 0AFEBh +002BE6r 1 EC AF 00 .faraddr 0AFECh +002BE9r 1 ED AF 00 .faraddr 0AFEDh +002BECr 1 EE AF 00 .faraddr 0AFEEh +002BEFr 1 EF AF 00 .faraddr 0AFEFh +002BF2r 1 F0 AF 00 .faraddr 0AFF0h +002BF5r 1 F1 AF 00 .faraddr 0AFF1h +002BF8r 1 F2 AF 00 .faraddr 0AFF2h +002BFBr 1 F3 AF 00 .faraddr 0AFF3h +002BFEr 1 F4 AF 00 .faraddr 0AFF4h +002C01r 1 F5 AF 00 .faraddr 0AFF5h +002C04r 1 F6 AF 00 .faraddr 0AFF6h +002C07r 1 F7 AF 00 .faraddr 0AFF7h +002C0Ar 1 F8 AF 00 .faraddr 0AFF8h +002C0Dr 1 F9 AF 00 .faraddr 0AFF9h +002C10r 1 FA AF 00 .faraddr 0AFFAh +002C13r 1 FB AF 00 .faraddr 0AFFBh +002C16r 1 FC AF 00 .faraddr 0AFFCh +002C19r 1 FD AF 00 .faraddr 0AFFDh +002C1Cr 1 FE AF 00 .faraddr 0AFFEh +002C1Fr 1 FF AF 00 .faraddr 0AFFFh +002C22r 1 00 B0 00 .faraddr 0B000h +002C25r 1 01 B0 00 .faraddr 0B001h +002C28r 1 02 B0 00 .faraddr 0B002h +002C2Br 1 03 B0 00 .faraddr 0B003h +002C2Er 1 04 B0 00 .faraddr 0B004h +002C31r 1 05 B0 00 .faraddr 0B005h +002C34r 1 06 B0 00 .faraddr 0B006h +002C37r 1 07 B0 00 .faraddr 0B007h +002C3Ar 1 08 B0 00 .faraddr 0B008h +002C3Dr 1 09 B0 00 .faraddr 0B009h +002C40r 1 0A B0 00 .faraddr 0B00Ah +002C43r 1 0B B0 00 .faraddr 0B00Bh +002C46r 1 0C B0 00 .faraddr 0B00Ch +002C49r 1 0D B0 00 .faraddr 0B00Dh +002C4Cr 1 0E B0 00 .faraddr 0B00Eh +002C4Fr 1 0F B0 00 .faraddr 0B00Fh +002C52r 1 E1 FF 00 .faraddr 0FFE1h +002C55r 1 E2 FF 00 .faraddr 0FFE2h +002C58r 1 E3 FF 00 .faraddr 0FFE3h +002C5Br 1 E4 FF 00 .faraddr 0FFE4h +002C5Er 1 E5 FF 00 .faraddr 0FFE5h +002C61r 1 E6 FF 00 .faraddr 0FFE6h +002C64r 1 E7 FF 00 .faraddr 0FFE7h +002C67r 1 E8 FF 00 .faraddr 0FFE8h +002C6Ar 1 E9 FF 00 .faraddr 0FFE9h +002C6Dr 1 EA FF 00 .faraddr 0FFEAh +002C70r 1 EB FF 00 .faraddr 0FFEBh +002C73r 1 EC FF 00 .faraddr 0FFECh +002C76r 1 ED FF 00 .faraddr 0FFEDh +002C79r 1 EE FF 00 .faraddr 0FFEEh +002C7Cr 1 EF FF 00 .faraddr 0FFEFh +002C7Fr 1 F0 FF 00 .faraddr 0FFF0h +002C82r 1 F1 FF 00 .faraddr 0FFF1h +002C85r 1 F2 FF 00 .faraddr 0FFF2h +002C88r 1 F3 FF 00 .faraddr 0FFF3h +002C8Br 1 F4 FF 00 .faraddr 0FFF4h +002C8Er 1 F5 FF 00 .faraddr 0FFF5h +002C91r 1 F6 FF 00 .faraddr 0FFF6h +002C94r 1 F7 FF 00 .faraddr 0FFF7h +002C97r 1 F8 FF 00 .faraddr 0FFF8h +002C9Ar 1 F9 FF 00 .faraddr 0FFF9h +002C9Dr 1 FA FF 00 .faraddr 0FFFAh +002CA0r 1 FB FF 00 .faraddr 0FFFBh +002CA3r 1 FC FF 00 .faraddr 0FFFCh +002CA6r 1 FD FF 00 .faraddr 0FFFDh +002CA9r 1 FE FF 00 .faraddr 0FFFEh +002CACr 1 FF FF 00 .faraddr 0FFFFh +002CAFr 1 00 00 01 .faraddr 10000h +002CB2r 1 01 00 01 .faraddr 10001h +002CB5r 1 02 00 01 .faraddr 10002h +002CB8r 1 03 00 01 .faraddr 10003h +002CBBr 1 04 00 01 .faraddr 10004h +002CBEr 1 05 00 01 .faraddr 10005h +002CC1r 1 06 00 01 .faraddr 10006h +002CC4r 1 07 00 01 .faraddr 10007h +002CC7r 1 08 00 01 .faraddr 10008h +002CCAr 1 09 00 01 .faraddr 10009h +002CCDr 1 0A 00 01 .faraddr 1000Ah +002CD0r 1 0B 00 01 .faraddr 1000Bh +002CD3r 1 0C 00 01 .faraddr 1000Ch +002CD6r 1 0D 00 01 .faraddr 1000Dh +002CD9r 1 0E 00 01 .faraddr 1000Eh +002CDCr 1 0F 00 01 .faraddr 1000Fh +002CDFr 1 E1 FF 10 .faraddr 10FFE1h +002CE2r 1 E2 FF 10 .faraddr 10FFE2h +002CE5r 1 E3 FF 10 .faraddr 10FFE3h +002CE8r 1 E4 FF 10 .faraddr 10FFE4h +002CEBr 1 E5 FF 10 .faraddr 10FFE5h +002CEEr 1 E6 FF 10 .faraddr 10FFE6h +002CF1r 1 E7 FF 10 .faraddr 10FFE7h +002CF4r 1 E8 FF 10 .faraddr 10FFE8h +002CF7r 1 E9 FF 10 .faraddr 10FFE9h +002CFAr 1 EA FF 10 .faraddr 10FFEAh +002CFDr 1 EB FF 10 .faraddr 10FFEBh +002D00r 1 EC FF 10 .faraddr 10FFECh +002D03r 1 ED FF 10 .faraddr 10FFEDh +002D06r 1 EE FF 10 .faraddr 10FFEEh +002D09r 1 EF FF 10 .faraddr 10FFEFh +002D0Cr 1 F0 FF 10 .faraddr 10FFF0h +002D0Fr 1 F1 FF 10 .faraddr 10FFF1h +002D12r 1 F2 FF 10 .faraddr 10FFF2h +002D15r 1 F3 FF 10 .faraddr 10FFF3h +002D18r 1 F4 FF 10 .faraddr 10FFF4h +002D1Br 1 F5 FF 10 .faraddr 10FFF5h +002D1Er 1 F6 FF 10 .faraddr 10FFF6h +002D21r 1 F7 FF 10 .faraddr 10FFF7h +002D24r 1 F8 FF 10 .faraddr 10FFF8h +002D27r 1 F9 FF 10 .faraddr 10FFF9h +002D2Ar 1 FA FF 10 .faraddr 10FFFAh +002D2Dr 1 FB FF 10 .faraddr 10FFFBh +002D30r 1 FC FF 10 .faraddr 10FFFCh +002D33r 1 FD FF 10 .faraddr 10FFFDh +002D36r 1 FE FF 10 .faraddr 10FFFEh +002D39r 1 FF FF 10 .faraddr 10FFFFh +002D3Cr 1 00 00 11 .faraddr 110000h +002D3Fr 1 01 00 11 .faraddr 110001h +002D42r 1 02 00 11 .faraddr 110002h +002D45r 1 03 00 11 .faraddr 110003h +002D48r 1 04 00 11 .faraddr 110004h +002D4Br 1 05 00 11 .faraddr 110005h +002D4Er 1 06 00 11 .faraddr 110006h +002D51r 1 07 00 11 .faraddr 110007h +002D54r 1 08 00 11 .faraddr 110008h +002D57r 1 09 00 11 .faraddr 110009h +002D5Ar 1 0A 00 11 .faraddr 11000Ah +002D5Dr 1 0B 00 11 .faraddr 11000Bh +002D60r 1 0C 00 11 .faraddr 11000Ch +002D63r 1 0D 00 11 .faraddr 11000Dh +002D66r 1 0E 00 11 .faraddr 11000Eh +002D69r 1 0F 00 11 .faraddr 11000Fh +002D6Cr 1 E1 FF 20 .faraddr 20FFE1h +002D6Fr 1 E2 FF 20 .faraddr 20FFE2h +002D72r 1 E3 FF 20 .faraddr 20FFE3h +002D75r 1 E4 FF 20 .faraddr 20FFE4h +002D78r 1 E5 FF 20 .faraddr 20FFE5h +002D7Br 1 E6 FF 20 .faraddr 20FFE6h +002D7Er 1 E7 FF 20 .faraddr 20FFE7h +002D81r 1 E8 FF 20 .faraddr 20FFE8h +002D84r 1 E9 FF 20 .faraddr 20FFE9h +002D87r 1 EA FF 20 .faraddr 20FFEAh +002D8Ar 1 EB FF 20 .faraddr 20FFEBh +002D8Dr 1 EC FF 20 .faraddr 20FFECh +002D90r 1 ED FF 20 .faraddr 20FFEDh +002D93r 1 EE FF 20 .faraddr 20FFEEh +002D96r 1 EF FF 20 .faraddr 20FFEFh +002D99r 1 F0 FF 20 .faraddr 20FFF0h +002D9Cr 1 F1 FF 20 .faraddr 20FFF1h +002D9Fr 1 F2 FF 20 .faraddr 20FFF2h +002DA2r 1 F3 FF 20 .faraddr 20FFF3h +002DA5r 1 F4 FF 20 .faraddr 20FFF4h +002DA8r 1 F5 FF 20 .faraddr 20FFF5h +002DABr 1 F6 FF 20 .faraddr 20FFF6h +002DAEr 1 F7 FF 20 .faraddr 20FFF7h +002DB1r 1 F8 FF 20 .faraddr 20FFF8h +002DB4r 1 F9 FF 20 .faraddr 20FFF9h +002DB7r 1 FA FF 20 .faraddr 20FFFAh +002DBAr 1 FB FF 20 .faraddr 20FFFBh +002DBDr 1 FC FF 20 .faraddr 20FFFCh +002DC0r 1 FD FF 20 .faraddr 20FFFDh +002DC3r 1 FE FF 20 .faraddr 20FFFEh +002DC6r 1 FF FF 20 .faraddr 20FFFFh +002DC9r 1 00 00 21 .faraddr 210000h +002DCCr 1 01 00 21 .faraddr 210001h +002DCFr 1 02 00 21 .faraddr 210002h +002DD2r 1 03 00 21 .faraddr 210003h +002DD5r 1 04 00 21 .faraddr 210004h +002DD8r 1 05 00 21 .faraddr 210005h +002DDBr 1 06 00 21 .faraddr 210006h +002DDEr 1 07 00 21 .faraddr 210007h +002DE1r 1 08 00 21 .faraddr 210008h +002DE4r 1 09 00 21 .faraddr 210009h +002DE7r 1 0A 00 21 .faraddr 21000Ah +002DEAr 1 0B 00 21 .faraddr 21000Bh +002DEDr 1 0C 00 21 .faraddr 21000Ch +002DF0r 1 0D 00 21 .faraddr 21000Dh +002DF3r 1 0E 00 21 .faraddr 21000Eh +002DF6r 1 0F 00 21 .faraddr 21000Fh +002DF9r 1 E1 FF 7F .faraddr 7FFFE1h +002DFCr 1 E2 FF 7F .faraddr 7FFFE2h +002DFFr 1 E3 FF 7F .faraddr 7FFFE3h +002E02r 1 E4 FF 7F .faraddr 7FFFE4h +002E05r 1 E5 FF 7F .faraddr 7FFFE5h +002E08r 1 E6 FF 7F .faraddr 7FFFE6h +002E0Br 1 E7 FF 7F .faraddr 7FFFE7h +002E0Er 1 E8 FF 7F .faraddr 7FFFE8h +002E11r 1 E9 FF 7F .faraddr 7FFFE9h +002E14r 1 EA FF 7F .faraddr 7FFFEAh +002E17r 1 EB FF 7F .faraddr 7FFFEBh +002E1Ar 1 EC FF 7F .faraddr 7FFFECh +002E1Dr 1 ED FF 7F .faraddr 7FFFEDh +002E20r 1 EE FF 7F .faraddr 7FFFEEh +002E23r 1 EF FF 7F .faraddr 7FFFEFh +002E26r 1 F0 FF 7F .faraddr 7FFFF0h +002E29r 1 F1 FF 7F .faraddr 7FFFF1h +002E2Cr 1 F2 FF 7F .faraddr 7FFFF2h +002E2Fr 1 F3 FF 7F .faraddr 7FFFF3h +002E32r 1 F4 FF 7F .faraddr 7FFFF4h +002E35r 1 F5 FF 7F .faraddr 7FFFF5h +002E38r 1 F6 FF 7F .faraddr 7FFFF6h +002E3Br 1 F7 FF 7F .faraddr 7FFFF7h +002E3Er 1 F8 FF 7F .faraddr 7FFFF8h +002E41r 1 F9 FF 7F .faraddr 7FFFF9h +002E44r 1 FA FF 7F .faraddr 7FFFFAh +002E47r 1 FB FF 7F .faraddr 7FFFFBh +002E4Ar 1 FC FF 7F .faraddr 7FFFFCh +002E4Dr 1 FD FF 7F .faraddr 7FFFFDh +002E50r 1 FE FF 7F .faraddr 7FFFFEh +002E53r 1 FF FF 7F .faraddr 7FFFFFh +002E56r 1 00 00 80 .faraddr 800000h +002E59r 1 01 00 80 .faraddr 800001h +002E5Cr 1 02 00 80 .faraddr 800002h +002E5Fr 1 03 00 80 .faraddr 800003h +002E62r 1 04 00 80 .faraddr 800004h +002E65r 1 05 00 80 .faraddr 800005h +002E68r 1 06 00 80 .faraddr 800006h +002E6Br 1 07 00 80 .faraddr 800007h +002E6Er 1 08 00 80 .faraddr 800008h +002E71r 1 09 00 80 .faraddr 800009h +002E74r 1 0A 00 80 .faraddr 80000Ah +002E77r 1 0B 00 80 .faraddr 80000Bh +002E7Ar 1 0C 00 80 .faraddr 80000Ch +002E7Dr 1 0D 00 80 .faraddr 80000Dh +002E80r 1 0E 00 80 .faraddr 80000Eh +002E83r 1 0F 00 80 .faraddr 80000Fh +002E86r 1 E1 FF 9F .faraddr 9FFFE1h +002E89r 1 E2 FF 9F .faraddr 9FFFE2h +002E8Cr 1 E3 FF 9F .faraddr 9FFFE3h +002E8Fr 1 E4 FF 9F .faraddr 9FFFE4h +002E92r 1 E5 FF 9F .faraddr 9FFFE5h +002E95r 1 E6 FF 9F .faraddr 9FFFE6h +002E98r 1 E7 FF 9F .faraddr 9FFFE7h +002E9Br 1 E8 FF 9F .faraddr 9FFFE8h +002E9Er 1 E9 FF 9F .faraddr 9FFFE9h +002EA1r 1 EA FF 9F .faraddr 9FFFEAh +002EA4r 1 EB FF 9F .faraddr 9FFFEBh +002EA7r 1 EC FF 9F .faraddr 9FFFECh +002EAAr 1 ED FF 9F .faraddr 9FFFEDh +002EADr 1 EE FF 9F .faraddr 9FFFEEh +002EB0r 1 EF FF 9F .faraddr 9FFFEFh +002EB3r 1 F0 FF 9F .faraddr 9FFFF0h +002EB6r 1 F1 FF 9F .faraddr 9FFFF1h +002EB9r 1 F2 FF 9F .faraddr 9FFFF2h +002EBCr 1 F3 FF 9F .faraddr 9FFFF3h +002EBFr 1 F4 FF 9F .faraddr 9FFFF4h +002EC2r 1 F5 FF 9F .faraddr 9FFFF5h +002EC5r 1 F6 FF 9F .faraddr 9FFFF6h +002EC8r 1 F7 FF 9F .faraddr 9FFFF7h +002ECBr 1 F8 FF 9F .faraddr 9FFFF8h +002ECEr 1 F9 FF 9F .faraddr 9FFFF9h +002ED1r 1 FA FF 9F .faraddr 9FFFFAh +002ED4r 1 FB FF 9F .faraddr 9FFFFBh +002ED7r 1 FC FF 9F .faraddr 9FFFFCh +002EDAr 1 FD FF 9F .faraddr 9FFFFDh +002EDDr 1 FE FF 9F .faraddr 9FFFFEh +002EE0r 1 FF FF 9F .faraddr 9FFFFFh +002EE3r 1 00 00 A0 .faraddr 0A00000h +002EE6r 1 01 00 A0 .faraddr 0A00001h +002EE9r 1 02 00 A0 .faraddr 0A00002h +002EECr 1 03 00 A0 .faraddr 0A00003h +002EEFr 1 04 00 A0 .faraddr 0A00004h +002EF2r 1 05 00 A0 .faraddr 0A00005h +002EF5r 1 06 00 A0 .faraddr 0A00006h +002EF8r 1 07 00 A0 .faraddr 0A00007h +002EFBr 1 08 00 A0 .faraddr 0A00008h +002EFEr 1 09 00 A0 .faraddr 0A00009h +002F01r 1 0A 00 A0 .faraddr 0A0000Ah +002F04r 1 0B 00 A0 .faraddr 0A0000Bh +002F07r 1 0C 00 A0 .faraddr 0A0000Ch +002F0Ar 1 0D 00 A0 .faraddr 0A0000Dh +002F0Dr 1 0E 00 A0 .faraddr 0A0000Eh +002F10r 1 0F 00 A0 .faraddr 0A0000Fh +002F13r 1 E1 FF FF .faraddr 0FFFFE1h +002F16r 1 E2 FF FF .faraddr 0FFFFE2h +002F19r 1 E3 FF FF .faraddr 0FFFFE3h +002F1Cr 1 E4 FF FF .faraddr 0FFFFE4h +002F1Fr 1 E5 FF FF .faraddr 0FFFFE5h +002F22r 1 E6 FF FF .faraddr 0FFFFE6h +002F25r 1 E7 FF FF .faraddr 0FFFFE7h +002F28r 1 E8 FF FF .faraddr 0FFFFE8h +002F2Br 1 E9 FF FF .faraddr 0FFFFE9h +002F2Er 1 EA FF FF .faraddr 0FFFFEAh +002F31r 1 EB FF FF .faraddr 0FFFFEBh +002F34r 1 EC FF FF .faraddr 0FFFFECh +002F37r 1 ED FF FF .faraddr 0FFFFEDh +002F3Ar 1 EE FF FF .faraddr 0FFFFEEh +002F3Dr 1 EF FF FF .faraddr 0FFFFEFh +002F40r 1 F0 FF FF .faraddr 0FFFFF0h +002F43r 1 F1 FF FF .faraddr 0FFFFF1h +002F46r 1 F2 FF FF .faraddr 0FFFFF2h +002F49r 1 F3 FF FF .faraddr 0FFFFF3h +002F4Cr 1 F4 FF FF .faraddr 0FFFFF4h +002F4Fr 1 F5 FF FF .faraddr 0FFFFF5h +002F52r 1 F6 FF FF .faraddr 0FFFFF6h +002F55r 1 F7 FF FF .faraddr 0FFFFF7h +002F58r 1 F8 FF FF .faraddr 0FFFFF8h +002F5Br 1 F9 FF FF .faraddr 0FFFFF9h +002F5Er 1 FA FF FF .faraddr 0FFFFFAh +002F61r 1 FB FF FF .faraddr 0FFFFFBh +002F64r 1 FC FF FF .faraddr 0FFFFFCh +002F67r 1 FD FF FF .faraddr 0FFFFFDh +002F6Ar 1 FE FF FF .faraddr 0FFFFFEh +002F6Dr 1 FF FF FF .faraddr 0FFFFFFh +002F70r 1 +002F70r 1 ; alternative 8-digit hex values +002F70r 1 00 00 00 .faraddr 00000000h +002F73r 1 01 00 00 .faraddr 00000001h +002F76r 1 02 00 00 .faraddr 00000002h +002F79r 1 03 00 00 .faraddr 00000003h +002F7Cr 1 04 00 00 .faraddr 00000004h +002F7Fr 1 05 00 00 .faraddr 00000005h +002F82r 1 06 00 00 .faraddr 00000006h +002F85r 1 07 00 00 .faraddr 00000007h +002F88r 1 08 00 00 .faraddr 00000008h +002F8Br 1 09 00 00 .faraddr 00000009h +002F8Er 1 0A 00 00 .faraddr 0000000ah +002F91r 1 0B 00 00 .faraddr 0000000bh +002F94r 1 0C 00 00 .faraddr 0000000ch +002F97r 1 0D 00 00 .faraddr 0000000dh +002F9Ar 1 0E 00 00 .faraddr 0000000eh +002F9Dr 1 0F 00 00 .faraddr 0000000fh +002FA0r 1 10 00 00 .faraddr 00000010h +002FA3r 1 11 00 00 .faraddr 00000011h +002FA6r 1 12 00 00 .faraddr 00000012h +002FA9r 1 13 00 00 .faraddr 00000013h +002FACr 1 70 00 00 .faraddr 00000070h +002FAFr 1 71 00 00 .faraddr 00000071h +002FB2r 1 72 00 00 .faraddr 00000072h +002FB5r 1 73 00 00 .faraddr 00000073h +002FB8r 1 74 00 00 .faraddr 00000074h +002FBBr 1 75 00 00 .faraddr 00000075h +002FBEr 1 76 00 00 .faraddr 00000076h +002FC1r 1 77 00 00 .faraddr 00000077h +002FC4r 1 78 00 00 .faraddr 00000078h +002FC7r 1 79 00 00 .faraddr 00000079h +002FCAr 1 7A 00 00 .faraddr 0000007ah +002FCDr 1 7B 00 00 .faraddr 0000007bh +002FD0r 1 7C 00 00 .faraddr 0000007ch +002FD3r 1 7D 00 00 .faraddr 0000007dh +002FD6r 1 7E 00 00 .faraddr 0000007eh +002FD9r 1 7F 00 00 .faraddr 0000007fh +002FDCr 1 80 00 00 .faraddr 00000080h +002FDFr 1 81 00 00 .faraddr 00000081h +002FE2r 1 82 00 00 .faraddr 00000082h +002FE5r 1 83 00 00 .faraddr 00000083h +002FE8r 1 84 00 00 .faraddr 00000084h +002FEBr 1 85 00 00 .faraddr 00000085h +002FEEr 1 86 00 00 .faraddr 00000086h +002FF1r 1 F0 00 00 .faraddr 000000f0h +002FF4r 1 F1 00 00 .faraddr 000000f1h +002FF7r 1 F2 00 00 .faraddr 000000f2h +002FFAr 1 F3 00 00 .faraddr 000000f3h +002FFDr 1 F4 00 00 .faraddr 000000f4h +003000r 1 F5 00 00 .faraddr 000000f5h +003003r 1 F6 00 00 .faraddr 000000f6h +003006r 1 F7 00 00 .faraddr 000000f7h +003009r 1 F8 00 00 .faraddr 000000f8h +00300Cr 1 F9 00 00 .faraddr 000000f9h +00300Fr 1 FA 00 00 .faraddr 000000fah +003012r 1 FB 00 00 .faraddr 000000fbh +003015r 1 FC 00 00 .faraddr 000000fch +003018r 1 FD 00 00 .faraddr 000000fdh +00301Br 1 FE 00 00 .faraddr 000000feh +00301Er 1 FF 00 00 .faraddr 000000ffh +003021r 1 00 01 00 .faraddr 00000100h +003024r 1 01 01 00 .faraddr 00000101h +003027r 1 02 01 00 .faraddr 00000102h +00302Ar 1 03 01 00 .faraddr 00000103h +00302Dr 1 D2 0F 00 .faraddr 00000fd2h +003030r 1 D3 0F 00 .faraddr 00000fd3h +003033r 1 D4 0F 00 .faraddr 00000fd4h +003036r 1 D5 0F 00 .faraddr 00000fd5h +003039r 1 D6 0F 00 .faraddr 00000fd6h +00303Cr 1 D7 0F 00 .faraddr 00000fd7h +00303Fr 1 D8 0F 00 .faraddr 00000fd8h +003042r 1 D9 0F 00 .faraddr 00000fd9h +003045r 1 DA 0F 00 .faraddr 00000fdah +003048r 1 DB 0F 00 .faraddr 00000fdbh +00304Br 1 DC 0F 00 .faraddr 00000fdch +00304Er 1 DD 0F 00 .faraddr 00000fddh +003051r 1 DE 0F 00 .faraddr 00000fdeh +003054r 1 DF 0F 00 .faraddr 00000fdfh +003057r 1 E0 0F 00 .faraddr 00000fe0h +00305Ar 1 E1 0F 00 .faraddr 00000fe1h +00305Dr 1 E2 0F 00 .faraddr 00000fe2h +003060r 1 E3 0F 00 .faraddr 00000fe3h +003063r 1 E4 0F 00 .faraddr 00000fe4h +003066r 1 E5 0F 00 .faraddr 00000fe5h +003069r 1 E6 0F 00 .faraddr 00000fe6h +00306Cr 1 E7 0F 00 .faraddr 00000fe7h +00306Fr 1 E8 0F 00 .faraddr 00000fe8h +003072r 1 E9 0F 00 .faraddr 00000fe9h +003075r 1 EA 0F 00 .faraddr 00000feah +003078r 1 EB 0F 00 .faraddr 00000febh +00307Br 1 EC 0F 00 .faraddr 00000fech +00307Er 1 ED 0F 00 .faraddr 00000fedh +003081r 1 EE 0F 00 .faraddr 00000feeh +003084r 1 EF 0F 00 .faraddr 00000fefh +003087r 1 F0 0F 00 .faraddr 00000ff0h +00308Ar 1 F1 0F 00 .faraddr 00000ff1h +00308Dr 1 F2 0F 00 .faraddr 00000ff2h +003090r 1 F3 0F 00 .faraddr 00000ff3h +003093r 1 F4 0F 00 .faraddr 00000ff4h +003096r 1 F5 0F 00 .faraddr 00000ff5h +003099r 1 F6 0F 00 .faraddr 00000ff6h +00309Cr 1 F7 0F 00 .faraddr 00000ff7h +00309Fr 1 F8 0F 00 .faraddr 00000ff8h +0030A2r 1 F9 0F 00 .faraddr 00000ff9h +0030A5r 1 FA 0F 00 .faraddr 00000ffah +0030A8r 1 FB 0F 00 .faraddr 00000ffbh +0030ABr 1 FC 0F 00 .faraddr 00000ffch +0030AEr 1 FD 0F 00 .faraddr 00000ffdh +0030B1r 1 FE 0F 00 .faraddr 00000ffeh +0030B4r 1 FF 0F 00 .faraddr 00000fffh +0030B7r 1 00 10 00 .faraddr 00001000h +0030BAr 1 01 10 00 .faraddr 00001001h +0030BDr 1 02 10 00 .faraddr 00001002h +0030C0r 1 03 10 00 .faraddr 00001003h +0030C3r 1 04 10 00 .faraddr 00001004h +0030C6r 1 05 10 00 .faraddr 00001005h +0030C9r 1 06 10 00 .faraddr 00001006h +0030CCr 1 07 10 00 .faraddr 00001007h +0030CFr 1 08 10 00 .faraddr 00001008h +0030D2r 1 F0 7F 00 .faraddr 00007ff0h +0030D5r 1 F1 7F 00 .faraddr 00007ff1h +0030D8r 1 F2 7F 00 .faraddr 00007ff2h +0030DBr 1 F3 7F 00 .faraddr 00007ff3h +0030DEr 1 F4 7F 00 .faraddr 00007ff4h +0030E1r 1 F5 7F 00 .faraddr 00007ff5h +0030E4r 1 F6 7F 00 .faraddr 00007ff6h +0030E7r 1 F7 7F 00 .faraddr 00007ff7h +0030EAr 1 F8 7F 00 .faraddr 00007ff8h +0030EDr 1 F9 7F 00 .faraddr 00007ff9h +0030F0r 1 FA 7F 00 .faraddr 00007ffah +0030F3r 1 FB 7F 00 .faraddr 00007ffbh +0030F6r 1 FC 7F 00 .faraddr 00007ffch +0030F9r 1 FD 7F 00 .faraddr 00007ffdh +0030FCr 1 FE 7F 00 .faraddr 00007ffeh +0030FFr 1 FF 7F 00 .faraddr 00007fffh +003102r 1 00 80 00 .faraddr 00008000h +003105r 1 01 80 00 .faraddr 00008001h +003108r 1 02 80 00 .faraddr 00008002h +00310Br 1 03 80 00 .faraddr 00008003h +00310Er 1 04 80 00 .faraddr 00008004h +003111r 1 05 80 00 .faraddr 00008005h +003114r 1 06 80 00 .faraddr 00008006h +003117r 1 07 80 00 .faraddr 00008007h +00311Ar 1 08 80 00 .faraddr 00008008h +00311Dr 1 09 80 00 .faraddr 00008009h +003120r 1 0A 80 00 .faraddr 0000800ah +003123r 1 0B 80 00 .faraddr 0000800bh +003126r 1 E1 9F 00 .faraddr 00009fe1h +003129r 1 E2 9F 00 .faraddr 00009fe2h +00312Cr 1 E3 9F 00 .faraddr 00009fe3h +00312Fr 1 E4 9F 00 .faraddr 00009fe4h +003132r 1 E5 9F 00 .faraddr 00009fe5h +003135r 1 E6 9F 00 .faraddr 00009fe6h +003138r 1 E7 9F 00 .faraddr 00009fe7h +00313Br 1 E8 9F 00 .faraddr 00009fe8h +00313Er 1 E9 9F 00 .faraddr 00009fe9h +003141r 1 EA 9F 00 .faraddr 00009feah +003144r 1 EB 9F 00 .faraddr 00009febh +003147r 1 EC 9F 00 .faraddr 00009fech +00314Ar 1 ED 9F 00 .faraddr 00009fedh +00314Dr 1 EE 9F 00 .faraddr 00009feeh +003150r 1 EF 9F 00 .faraddr 00009fefh +003153r 1 F0 9F 00 .faraddr 00009ff0h +003156r 1 F1 9F 00 .faraddr 00009ff1h +003159r 1 F2 9F 00 .faraddr 00009ff2h +00315Cr 1 F3 9F 00 .faraddr 00009ff3h +00315Fr 1 F4 9F 00 .faraddr 00009ff4h +003162r 1 F5 9F 00 .faraddr 00009ff5h +003165r 1 F6 9F 00 .faraddr 00009ff6h +003168r 1 F7 9F 00 .faraddr 00009ff7h +00316Br 1 F8 9F 00 .faraddr 00009ff8h +00316Er 1 F9 9F 00 .faraddr 00009ff9h +003171r 1 FA 9F 00 .faraddr 00009ffah +003174r 1 FB 9F 00 .faraddr 00009ffbh +003177r 1 FC 9F 00 .faraddr 00009ffch +00317Ar 1 FD 9F 00 .faraddr 00009ffdh +00317Dr 1 FE 9F 00 .faraddr 00009ffeh +003180r 1 FF 9F 00 .faraddr 00009fffh +003183r 1 00 A0 00 .faraddr 0000a000h +003186r 1 01 A0 00 .faraddr 0000a001h +003189r 1 02 A0 00 .faraddr 0000a002h +00318Cr 1 03 A0 00 .faraddr 0000a003h +00318Fr 1 04 A0 00 .faraddr 0000a004h +003192r 1 05 A0 00 .faraddr 0000a005h +003195r 1 06 A0 00 .faraddr 0000a006h +003198r 1 07 A0 00 .faraddr 0000a007h +00319Br 1 08 A0 00 .faraddr 0000a008h +00319Er 1 09 A0 00 .faraddr 0000a009h +0031A1r 1 0A A0 00 .faraddr 0000a00ah +0031A4r 1 0B A0 00 .faraddr 0000a00bh +0031A7r 1 0C A0 00 .faraddr 0000a00ch +0031AAr 1 0D A0 00 .faraddr 0000a00dh +0031ADr 1 0E A0 00 .faraddr 0000a00eh +0031B0r 1 0F A0 00 .faraddr 0000a00fh +0031B3r 1 E1 AF 00 .faraddr 0000afe1h +0031B6r 1 E2 AF 00 .faraddr 0000afe2h +0031B9r 1 E3 AF 00 .faraddr 0000afe3h +0031BCr 1 E4 AF 00 .faraddr 0000afe4h +0031BFr 1 E5 AF 00 .faraddr 0000afe5h +0031C2r 1 E6 AF 00 .faraddr 0000afe6h +0031C5r 1 E7 AF 00 .faraddr 0000afe7h +0031C8r 1 E8 AF 00 .faraddr 0000afe8h +0031CBr 1 E9 AF 00 .faraddr 0000afe9h +0031CEr 1 EA AF 00 .faraddr 0000afeah +0031D1r 1 EB AF 00 .faraddr 0000afebh +0031D4r 1 EC AF 00 .faraddr 0000afech +0031D7r 1 ED AF 00 .faraddr 0000afedh +0031DAr 1 EE AF 00 .faraddr 0000afeeh +0031DDr 1 EF AF 00 .faraddr 0000afefh +0031E0r 1 F0 AF 00 .faraddr 0000aff0h +0031E3r 1 F1 AF 00 .faraddr 0000aff1h +0031E6r 1 F2 AF 00 .faraddr 0000aff2h +0031E9r 1 F3 AF 00 .faraddr 0000aff3h +0031ECr 1 F4 AF 00 .faraddr 0000aff4h +0031EFr 1 F5 AF 00 .faraddr 0000aff5h +0031F2r 1 F6 AF 00 .faraddr 0000aff6h +0031F5r 1 F7 AF 00 .faraddr 0000aff7h +0031F8r 1 F8 AF 00 .faraddr 0000aff8h +0031FBr 1 F9 AF 00 .faraddr 0000aff9h +0031FEr 1 FA AF 00 .faraddr 0000affah +003201r 1 FB AF 00 .faraddr 0000affbh +003204r 1 FC AF 00 .faraddr 0000affch +003207r 1 FD AF 00 .faraddr 0000affdh +00320Ar 1 FE AF 00 .faraddr 0000affeh +00320Dr 1 FF AF 00 .faraddr 0000afffh +003210r 1 00 B0 00 .faraddr 0000b000h +003213r 1 01 B0 00 .faraddr 0000b001h +003216r 1 02 B0 00 .faraddr 0000b002h +003219r 1 03 B0 00 .faraddr 0000b003h +00321Cr 1 04 B0 00 .faraddr 0000b004h +00321Fr 1 05 B0 00 .faraddr 0000b005h +003222r 1 06 B0 00 .faraddr 0000b006h +003225r 1 07 B0 00 .faraddr 0000b007h +003228r 1 08 B0 00 .faraddr 0000b008h +00322Br 1 09 B0 00 .faraddr 0000b009h +00322Er 1 0A B0 00 .faraddr 0000b00ah +003231r 1 0B B0 00 .faraddr 0000b00bh +003234r 1 0C B0 00 .faraddr 0000b00ch +003237r 1 0D B0 00 .faraddr 0000b00dh +00323Ar 1 0E B0 00 .faraddr 0000b00eh +00323Dr 1 0F B0 00 .faraddr 0000b00fh +003240r 1 E1 FF 00 .faraddr 0000ffe1h +003243r 1 E2 FF 00 .faraddr 0000ffe2h +003246r 1 E3 FF 00 .faraddr 0000ffe3h +003249r 1 E4 FF 00 .faraddr 0000ffe4h +00324Cr 1 E5 FF 00 .faraddr 0000ffe5h +00324Fr 1 E6 FF 00 .faraddr 0000ffe6h +003252r 1 E7 FF 00 .faraddr 0000ffe7h +003255r 1 E8 FF 00 .faraddr 0000ffe8h +003258r 1 E9 FF 00 .faraddr 0000ffe9h +00325Br 1 EA FF 00 .faraddr 0000ffeah +00325Er 1 EB FF 00 .faraddr 0000ffebh +003261r 1 EC FF 00 .faraddr 0000ffech +003264r 1 ED FF 00 .faraddr 0000ffedh +003267r 1 EE FF 00 .faraddr 0000ffeeh +00326Ar 1 EF FF 00 .faraddr 0000ffefh +00326Dr 1 F0 FF 00 .faraddr 0000fff0h +003270r 1 F1 FF 00 .faraddr 0000fff1h +003273r 1 F2 FF 00 .faraddr 0000fff2h +003276r 1 F3 FF 00 .faraddr 0000fff3h +003279r 1 F4 FF 00 .faraddr 0000fff4h +00327Cr 1 F5 FF 00 .faraddr 0000fff5h +00327Fr 1 F6 FF 00 .faraddr 0000fff6h +003282r 1 F7 FF 00 .faraddr 0000fff7h +003285r 1 F8 FF 00 .faraddr 0000fff8h +003288r 1 F9 FF 00 .faraddr 0000fff9h +00328Br 1 FA FF 00 .faraddr 0000fffah +00328Er 1 FB FF 00 .faraddr 0000fffbh +003291r 1 FC FF 00 .faraddr 0000fffch +003294r 1 FD FF 00 .faraddr 0000fffdh +003297r 1 FE FF 00 .faraddr 0000fffeh +00329Ar 1 FF FF 00 .faraddr 0000ffffh +00329Dr 1 00 00 01 .faraddr 00010000h +0032A0r 1 01 00 01 .faraddr 00010001h +0032A3r 1 02 00 01 .faraddr 00010002h +0032A6r 1 03 00 01 .faraddr 00010003h +0032A9r 1 04 00 01 .faraddr 00010004h +0032ACr 1 05 00 01 .faraddr 00010005h +0032AFr 1 06 00 01 .faraddr 00010006h +0032B2r 1 07 00 01 .faraddr 00010007h +0032B5r 1 08 00 01 .faraddr 00010008h +0032B8r 1 09 00 01 .faraddr 00010009h +0032BBr 1 0A 00 01 .faraddr 0001000ah +0032BEr 1 0B 00 01 .faraddr 0001000bh +0032C1r 1 0C 00 01 .faraddr 0001000ch +0032C4r 1 0D 00 01 .faraddr 0001000dh +0032C7r 1 0E 00 01 .faraddr 0001000eh +0032CAr 1 0F 00 01 .faraddr 0001000fh +0032CDr 1 E1 FF 10 .faraddr 0010ffe1h +0032D0r 1 E2 FF 10 .faraddr 0010ffe2h +0032D3r 1 E3 FF 10 .faraddr 0010ffe3h +0032D6r 1 E4 FF 10 .faraddr 0010ffe4h +0032D9r 1 E5 FF 10 .faraddr 0010ffe5h +0032DCr 1 E6 FF 10 .faraddr 0010ffe6h +0032DFr 1 E7 FF 10 .faraddr 0010ffe7h +0032E2r 1 E8 FF 10 .faraddr 0010ffe8h +0032E5r 1 E9 FF 10 .faraddr 0010ffe9h +0032E8r 1 EA FF 10 .faraddr 0010ffeah +0032EBr 1 EB FF 10 .faraddr 0010ffebh +0032EEr 1 EC FF 10 .faraddr 0010ffech +0032F1r 1 ED FF 10 .faraddr 0010ffedh +0032F4r 1 EE FF 10 .faraddr 0010ffeeh +0032F7r 1 EF FF 10 .faraddr 0010ffefh +0032FAr 1 F0 FF 10 .faraddr 0010fff0h +0032FDr 1 F1 FF 10 .faraddr 0010fff1h +003300r 1 F2 FF 10 .faraddr 0010fff2h +003303r 1 F3 FF 10 .faraddr 0010fff3h +003306r 1 F4 FF 10 .faraddr 0010fff4h +003309r 1 F5 FF 10 .faraddr 0010fff5h +00330Cr 1 F6 FF 10 .faraddr 0010fff6h +00330Fr 1 F7 FF 10 .faraddr 0010fff7h +003312r 1 F8 FF 10 .faraddr 0010fff8h +003315r 1 F9 FF 10 .faraddr 0010fff9h +003318r 1 FA FF 10 .faraddr 0010fffah +00331Br 1 FB FF 10 .faraddr 0010fffbh +00331Er 1 FC FF 10 .faraddr 0010fffch +003321r 1 FD FF 10 .faraddr 0010fffdh +003324r 1 FE FF 10 .faraddr 0010fffeh +003327r 1 FF FF 10 .faraddr 0010ffffh +00332Ar 1 00 00 11 .faraddr 00110000h +00332Dr 1 01 00 11 .faraddr 00110001h +003330r 1 02 00 11 .faraddr 00110002h +003333r 1 03 00 11 .faraddr 00110003h +003336r 1 04 00 11 .faraddr 00110004h +003339r 1 05 00 11 .faraddr 00110005h +00333Cr 1 06 00 11 .faraddr 00110006h +00333Fr 1 07 00 11 .faraddr 00110007h +003342r 1 08 00 11 .faraddr 00110008h +003345r 1 09 00 11 .faraddr 00110009h +003348r 1 0A 00 11 .faraddr 0011000ah +00334Br 1 0B 00 11 .faraddr 0011000bh +00334Er 1 0C 00 11 .faraddr 0011000ch +003351r 1 0D 00 11 .faraddr 0011000dh +003354r 1 0E 00 11 .faraddr 0011000eh +003357r 1 0F 00 11 .faraddr 0011000fh +00335Ar 1 E1 FF 20 .faraddr 0020ffe1h +00335Dr 1 E2 FF 20 .faraddr 0020ffe2h +003360r 1 E3 FF 20 .faraddr 0020ffe3h +003363r 1 E4 FF 20 .faraddr 0020ffe4h +003366r 1 E5 FF 20 .faraddr 0020ffe5h +003369r 1 E6 FF 20 .faraddr 0020ffe6h +00336Cr 1 E7 FF 20 .faraddr 0020ffe7h +00336Fr 1 E8 FF 20 .faraddr 0020ffe8h +003372r 1 E9 FF 20 .faraddr 0020ffe9h +003375r 1 EA FF 20 .faraddr 0020ffeah +003378r 1 EB FF 20 .faraddr 0020ffebh +00337Br 1 EC FF 20 .faraddr 0020ffech +00337Er 1 ED FF 20 .faraddr 0020ffedh +003381r 1 EE FF 20 .faraddr 0020ffeeh +003384r 1 EF FF 20 .faraddr 0020ffefh +003387r 1 F0 FF 20 .faraddr 0020fff0h +00338Ar 1 F1 FF 20 .faraddr 0020fff1h +00338Dr 1 F2 FF 20 .faraddr 0020fff2h +003390r 1 F3 FF 20 .faraddr 0020fff3h +003393r 1 F4 FF 20 .faraddr 0020fff4h +003396r 1 F5 FF 20 .faraddr 0020fff5h +003399r 1 F6 FF 20 .faraddr 0020fff6h +00339Cr 1 F7 FF 20 .faraddr 0020fff7h +00339Fr 1 F8 FF 20 .faraddr 0020fff8h +0033A2r 1 F9 FF 20 .faraddr 0020fff9h +0033A5r 1 FA FF 20 .faraddr 0020fffah +0033A8r 1 FB FF 20 .faraddr 0020fffbh +0033ABr 1 FC FF 20 .faraddr 0020fffch +0033AEr 1 FD FF 20 .faraddr 0020fffdh +0033B1r 1 FE FF 20 .faraddr 0020fffeh +0033B4r 1 FF FF 20 .faraddr 0020ffffh +0033B7r 1 00 00 21 .faraddr 00210000h +0033BAr 1 01 00 21 .faraddr 00210001h +0033BDr 1 02 00 21 .faraddr 00210002h +0033C0r 1 03 00 21 .faraddr 00210003h +0033C3r 1 04 00 21 .faraddr 00210004h +0033C6r 1 05 00 21 .faraddr 00210005h +0033C9r 1 06 00 21 .faraddr 00210006h +0033CCr 1 07 00 21 .faraddr 00210007h +0033CFr 1 08 00 21 .faraddr 00210008h +0033D2r 1 09 00 21 .faraddr 00210009h +0033D5r 1 0A 00 21 .faraddr 0021000ah +0033D8r 1 0B 00 21 .faraddr 0021000bh +0033DBr 1 0C 00 21 .faraddr 0021000ch +0033DEr 1 0D 00 21 .faraddr 0021000dh +0033E1r 1 0E 00 21 .faraddr 0021000eh +0033E4r 1 0F 00 21 .faraddr 0021000fh +0033E7r 1 E1 FF 7F .faraddr 007fffe1h +0033EAr 1 E2 FF 7F .faraddr 007fffe2h +0033EDr 1 E3 FF 7F .faraddr 007fffe3h +0033F0r 1 E4 FF 7F .faraddr 007fffe4h +0033F3r 1 E5 FF 7F .faraddr 007fffe5h +0033F6r 1 E6 FF 7F .faraddr 007fffe6h +0033F9r 1 E7 FF 7F .faraddr 007fffe7h +0033FCr 1 E8 FF 7F .faraddr 007fffe8h +0033FFr 1 E9 FF 7F .faraddr 007fffe9h +003402r 1 EA FF 7F .faraddr 007fffeah +003405r 1 EB FF 7F .faraddr 007fffebh +003408r 1 EC FF 7F .faraddr 007fffech +00340Br 1 ED FF 7F .faraddr 007fffedh +00340Er 1 EE FF 7F .faraddr 007fffeeh +003411r 1 EF FF 7F .faraddr 007fffefh +003414r 1 F0 FF 7F .faraddr 007ffff0h +003417r 1 F1 FF 7F .faraddr 007ffff1h +00341Ar 1 F2 FF 7F .faraddr 007ffff2h +00341Dr 1 F3 FF 7F .faraddr 007ffff3h +003420r 1 F4 FF 7F .faraddr 007ffff4h +003423r 1 F5 FF 7F .faraddr 007ffff5h +003426r 1 F6 FF 7F .faraddr 007ffff6h +003429r 1 F7 FF 7F .faraddr 007ffff7h +00342Cr 1 F8 FF 7F .faraddr 007ffff8h +00342Fr 1 F9 FF 7F .faraddr 007ffff9h +003432r 1 FA FF 7F .faraddr 007ffffah +003435r 1 FB FF 7F .faraddr 007ffffbh +003438r 1 FC FF 7F .faraddr 007ffffch +00343Br 1 FD FF 7F .faraddr 007ffffdh +00343Er 1 FE FF 7F .faraddr 007ffffeh +003441r 1 FF FF 7F .faraddr 007fffffh +003444r 1 00 00 80 .faraddr 00800000h +003447r 1 01 00 80 .faraddr 00800001h +00344Ar 1 02 00 80 .faraddr 00800002h +00344Dr 1 03 00 80 .faraddr 00800003h +003450r 1 04 00 80 .faraddr 00800004h +003453r 1 05 00 80 .faraddr 00800005h +003456r 1 06 00 80 .faraddr 00800006h +003459r 1 07 00 80 .faraddr 00800007h +00345Cr 1 08 00 80 .faraddr 00800008h +00345Fr 1 09 00 80 .faraddr 00800009h +003462r 1 0A 00 80 .faraddr 0080000ah +003465r 1 0B 00 80 .faraddr 0080000bh +003468r 1 0C 00 80 .faraddr 0080000ch +00346Br 1 0D 00 80 .faraddr 0080000dh +00346Er 1 0E 00 80 .faraddr 0080000eh +003471r 1 0F 00 80 .faraddr 0080000fh +003474r 1 E1 FF 9F .faraddr 009fffe1h +003477r 1 E2 FF 9F .faraddr 009fffe2h +00347Ar 1 E3 FF 9F .faraddr 009fffe3h +00347Dr 1 E4 FF 9F .faraddr 009fffe4h +003480r 1 E5 FF 9F .faraddr 009fffe5h +003483r 1 E6 FF 9F .faraddr 009fffe6h +003486r 1 E7 FF 9F .faraddr 009fffe7h +003489r 1 E8 FF 9F .faraddr 009fffe8h +00348Cr 1 E9 FF 9F .faraddr 009fffe9h +00348Fr 1 EA FF 9F .faraddr 009fffeah +003492r 1 EB FF 9F .faraddr 009fffebh +003495r 1 EC FF 9F .faraddr 009fffech +003498r 1 ED FF 9F .faraddr 009fffedh +00349Br 1 EE FF 9F .faraddr 009fffeeh +00349Er 1 EF FF 9F .faraddr 009fffefh +0034A1r 1 F0 FF 9F .faraddr 009ffff0h +0034A4r 1 F1 FF 9F .faraddr 009ffff1h +0034A7r 1 F2 FF 9F .faraddr 009ffff2h +0034AAr 1 F3 FF 9F .faraddr 009ffff3h +0034ADr 1 F4 FF 9F .faraddr 009ffff4h +0034B0r 1 F5 FF 9F .faraddr 009ffff5h +0034B3r 1 F6 FF 9F .faraddr 009ffff6h +0034B6r 1 F7 FF 9F .faraddr 009ffff7h +0034B9r 1 F8 FF 9F .faraddr 009ffff8h +0034BCr 1 F9 FF 9F .faraddr 009ffff9h +0034BFr 1 FA FF 9F .faraddr 009ffffah +0034C2r 1 FB FF 9F .faraddr 009ffffbh +0034C5r 1 FC FF 9F .faraddr 009ffffch +0034C8r 1 FD FF 9F .faraddr 009ffffdh +0034CBr 1 FE FF 9F .faraddr 009ffffeh +0034CEr 1 FF FF 9F .faraddr 009fffffh +0034D1r 1 00 00 A0 .faraddr 00a00000h +0034D4r 1 01 00 A0 .faraddr 00a00001h +0034D7r 1 02 00 A0 .faraddr 00a00002h +0034DAr 1 03 00 A0 .faraddr 00a00003h +0034DDr 1 04 00 A0 .faraddr 00a00004h +0034E0r 1 05 00 A0 .faraddr 00a00005h +0034E3r 1 06 00 A0 .faraddr 00a00006h +0034E6r 1 07 00 A0 .faraddr 00a00007h +0034E9r 1 08 00 A0 .faraddr 00a00008h +0034ECr 1 09 00 A0 .faraddr 00a00009h +0034EFr 1 0A 00 A0 .faraddr 00a0000ah +0034F2r 1 0B 00 A0 .faraddr 00a0000bh +0034F5r 1 0C 00 A0 .faraddr 00a0000ch +0034F8r 1 0D 00 A0 .faraddr 00a0000dh +0034FBr 1 0E 00 A0 .faraddr 00a0000eh +0034FEr 1 0F 00 A0 .faraddr 00a0000fh +003501r 1 E1 FF FF .faraddr 00ffffe1h +003504r 1 E2 FF FF .faraddr 00ffffe2h +003507r 1 E3 FF FF .faraddr 00ffffe3h +00350Ar 1 E4 FF FF .faraddr 00ffffe4h +00350Dr 1 E5 FF FF .faraddr 00ffffe5h +003510r 1 E6 FF FF .faraddr 00ffffe6h +003513r 1 E7 FF FF .faraddr 00ffffe7h +003516r 1 E8 FF FF .faraddr 00ffffe8h +003519r 1 E9 FF FF .faraddr 00ffffe9h +00351Cr 1 EA FF FF .faraddr 00ffffeah +00351Fr 1 EB FF FF .faraddr 00ffffebh +003522r 1 EC FF FF .faraddr 00ffffech +003525r 1 ED FF FF .faraddr 00ffffedh +003528r 1 EE FF FF .faraddr 00ffffeeh +00352Br 1 EF FF FF .faraddr 00ffffefh +00352Er 1 F0 FF FF .faraddr 00fffff0h +003531r 1 F1 FF FF .faraddr 00fffff1h +003534r 1 F2 FF FF .faraddr 00fffff2h +003537r 1 F3 FF FF .faraddr 00fffff3h +00353Ar 1 F4 FF FF .faraddr 00fffff4h +00353Dr 1 F5 FF FF .faraddr 00fffff5h +003540r 1 F6 FF FF .faraddr 00fffff6h +003543r 1 F7 FF FF .faraddr 00fffff7h +003546r 1 F8 FF FF .faraddr 00fffff8h +003549r 1 F9 FF FF .faraddr 00fffff9h +00354Cr 1 FA FF FF .faraddr 00fffffah +00354Fr 1 FB FF FF .faraddr 00fffffbh +003552r 1 FC FF FF .faraddr 00fffffch +003555r 1 FD FF FF .faraddr 00fffffdh +003558r 1 FE FF FF .faraddr 00fffffeh +00355Br 1 FF FF FF .faraddr 00ffffffh +00355Er 1 +00355Er 1 ; alternative 8-digit hex values, uppercase +00355Er 1 00 00 00 .faraddr 00000000h +003561r 1 01 00 00 .faraddr 00000001h +003564r 1 02 00 00 .faraddr 00000002h +003567r 1 03 00 00 .faraddr 00000003h +00356Ar 1 04 00 00 .faraddr 00000004h +00356Dr 1 05 00 00 .faraddr 00000005h +003570r 1 06 00 00 .faraddr 00000006h +003573r 1 07 00 00 .faraddr 00000007h +003576r 1 08 00 00 .faraddr 00000008h +003579r 1 09 00 00 .faraddr 00000009h +00357Cr 1 0A 00 00 .faraddr 0000000Ah +00357Fr 1 0B 00 00 .faraddr 0000000Bh +003582r 1 0C 00 00 .faraddr 0000000Ch +003585r 1 0D 00 00 .faraddr 0000000Dh +003588r 1 0E 00 00 .faraddr 0000000Eh +00358Br 1 0F 00 00 .faraddr 0000000Fh +00358Er 1 10 00 00 .faraddr 00000010h +003591r 1 11 00 00 .faraddr 00000011h +003594r 1 12 00 00 .faraddr 00000012h +003597r 1 13 00 00 .faraddr 00000013h +00359Ar 1 70 00 00 .faraddr 00000070h +00359Dr 1 71 00 00 .faraddr 00000071h +0035A0r 1 72 00 00 .faraddr 00000072h +0035A3r 1 73 00 00 .faraddr 00000073h +0035A6r 1 74 00 00 .faraddr 00000074h +0035A9r 1 75 00 00 .faraddr 00000075h +0035ACr 1 76 00 00 .faraddr 00000076h +0035AFr 1 77 00 00 .faraddr 00000077h +0035B2r 1 78 00 00 .faraddr 00000078h +0035B5r 1 79 00 00 .faraddr 00000079h +0035B8r 1 7A 00 00 .faraddr 0000007Ah +0035BBr 1 7B 00 00 .faraddr 0000007Bh +0035BEr 1 7C 00 00 .faraddr 0000007Ch +0035C1r 1 7D 00 00 .faraddr 0000007Dh +0035C4r 1 7E 00 00 .faraddr 0000007Eh +0035C7r 1 7F 00 00 .faraddr 0000007Fh +0035CAr 1 80 00 00 .faraddr 00000080h +0035CDr 1 81 00 00 .faraddr 00000081h +0035D0r 1 82 00 00 .faraddr 00000082h +0035D3r 1 83 00 00 .faraddr 00000083h +0035D6r 1 84 00 00 .faraddr 00000084h +0035D9r 1 85 00 00 .faraddr 00000085h +0035DCr 1 86 00 00 .faraddr 00000086h +0035DFr 1 F0 00 00 .faraddr 000000F0h +0035E2r 1 F1 00 00 .faraddr 000000F1h +0035E5r 1 F2 00 00 .faraddr 000000F2h +0035E8r 1 F3 00 00 .faraddr 000000F3h +0035EBr 1 F4 00 00 .faraddr 000000F4h +0035EEr 1 F5 00 00 .faraddr 000000F5h +0035F1r 1 F6 00 00 .faraddr 000000F6h +0035F4r 1 F7 00 00 .faraddr 000000F7h +0035F7r 1 F8 00 00 .faraddr 000000F8h +0035FAr 1 F9 00 00 .faraddr 000000F9h +0035FDr 1 FA 00 00 .faraddr 000000FAh +003600r 1 FB 00 00 .faraddr 000000FBh +003603r 1 FC 00 00 .faraddr 000000FCh +003606r 1 FD 00 00 .faraddr 000000FDh +003609r 1 FE 00 00 .faraddr 000000FEh +00360Cr 1 FF 00 00 .faraddr 000000FFh +00360Fr 1 00 01 00 .faraddr 00000100h +003612r 1 01 01 00 .faraddr 00000101h +003615r 1 02 01 00 .faraddr 00000102h +003618r 1 03 01 00 .faraddr 00000103h +00361Br 1 D2 0F 00 .faraddr 00000FD2h +00361Er 1 D3 0F 00 .faraddr 00000FD3h +003621r 1 D4 0F 00 .faraddr 00000FD4h +003624r 1 D5 0F 00 .faraddr 00000FD5h +003627r 1 D6 0F 00 .faraddr 00000FD6h +00362Ar 1 D7 0F 00 .faraddr 00000FD7h +00362Dr 1 D8 0F 00 .faraddr 00000FD8h +003630r 1 D9 0F 00 .faraddr 00000FD9h +003633r 1 DA 0F 00 .faraddr 00000FDAh +003636r 1 DB 0F 00 .faraddr 00000FDBh +003639r 1 DC 0F 00 .faraddr 00000FDCh +00363Cr 1 DD 0F 00 .faraddr 00000FDDh +00363Fr 1 DE 0F 00 .faraddr 00000FDEh +003642r 1 DF 0F 00 .faraddr 00000FDFh +003645r 1 E0 0F 00 .faraddr 00000FE0h +003648r 1 E1 0F 00 .faraddr 00000FE1h +00364Br 1 E2 0F 00 .faraddr 00000FE2h +00364Er 1 E3 0F 00 .faraddr 00000FE3h +003651r 1 E4 0F 00 .faraddr 00000FE4h +003654r 1 E5 0F 00 .faraddr 00000FE5h +003657r 1 E6 0F 00 .faraddr 00000FE6h +00365Ar 1 E7 0F 00 .faraddr 00000FE7h +00365Dr 1 E8 0F 00 .faraddr 00000FE8h +003660r 1 E9 0F 00 .faraddr 00000FE9h +003663r 1 EA 0F 00 .faraddr 00000FEAh +003666r 1 EB 0F 00 .faraddr 00000FEBh +003669r 1 EC 0F 00 .faraddr 00000FECh +00366Cr 1 ED 0F 00 .faraddr 00000FEDh +00366Fr 1 EE 0F 00 .faraddr 00000FEEh +003672r 1 EF 0F 00 .faraddr 00000FEFh +003675r 1 F0 0F 00 .faraddr 00000FF0h +003678r 1 F1 0F 00 .faraddr 00000FF1h +00367Br 1 F2 0F 00 .faraddr 00000FF2h +00367Er 1 F3 0F 00 .faraddr 00000FF3h +003681r 1 F4 0F 00 .faraddr 00000FF4h +003684r 1 F5 0F 00 .faraddr 00000FF5h +003687r 1 F6 0F 00 .faraddr 00000FF6h +00368Ar 1 F7 0F 00 .faraddr 00000FF7h +00368Dr 1 F8 0F 00 .faraddr 00000FF8h +003690r 1 F9 0F 00 .faraddr 00000FF9h +003693r 1 FA 0F 00 .faraddr 00000FFAh +003696r 1 FB 0F 00 .faraddr 00000FFBh +003699r 1 FC 0F 00 .faraddr 00000FFCh +00369Cr 1 FD 0F 00 .faraddr 00000FFDh +00369Fr 1 FE 0F 00 .faraddr 00000FFEh +0036A2r 1 FF 0F 00 .faraddr 00000FFFh +0036A5r 1 00 10 00 .faraddr 00001000h +0036A8r 1 01 10 00 .faraddr 00001001h +0036ABr 1 02 10 00 .faraddr 00001002h +0036AEr 1 03 10 00 .faraddr 00001003h +0036B1r 1 04 10 00 .faraddr 00001004h +0036B4r 1 05 10 00 .faraddr 00001005h +0036B7r 1 06 10 00 .faraddr 00001006h +0036BAr 1 07 10 00 .faraddr 00001007h +0036BDr 1 08 10 00 .faraddr 00001008h +0036C0r 1 F0 7F 00 .faraddr 00007FF0h +0036C3r 1 F1 7F 00 .faraddr 00007FF1h +0036C6r 1 F2 7F 00 .faraddr 00007FF2h +0036C9r 1 F3 7F 00 .faraddr 00007FF3h +0036CCr 1 F4 7F 00 .faraddr 00007FF4h +0036CFr 1 F5 7F 00 .faraddr 00007FF5h +0036D2r 1 F6 7F 00 .faraddr 00007FF6h +0036D5r 1 F7 7F 00 .faraddr 00007FF7h +0036D8r 1 F8 7F 00 .faraddr 00007FF8h +0036DBr 1 F9 7F 00 .faraddr 00007FF9h +0036DEr 1 FA 7F 00 .faraddr 00007FFAh +0036E1r 1 FB 7F 00 .faraddr 00007FFBh +0036E4r 1 FC 7F 00 .faraddr 00007FFCh +0036E7r 1 FD 7F 00 .faraddr 00007FFDh +0036EAr 1 FE 7F 00 .faraddr 00007FFEh +0036EDr 1 FF 7F 00 .faraddr 00007FFFh +0036F0r 1 00 80 00 .faraddr 00008000h +0036F3r 1 01 80 00 .faraddr 00008001h +0036F6r 1 02 80 00 .faraddr 00008002h +0036F9r 1 03 80 00 .faraddr 00008003h +0036FCr 1 04 80 00 .faraddr 00008004h +0036FFr 1 05 80 00 .faraddr 00008005h +003702r 1 06 80 00 .faraddr 00008006h +003705r 1 07 80 00 .faraddr 00008007h +003708r 1 08 80 00 .faraddr 00008008h +00370Br 1 09 80 00 .faraddr 00008009h +00370Er 1 0A 80 00 .faraddr 0000800Ah +003711r 1 0B 80 00 .faraddr 0000800Bh +003714r 1 E1 9F 00 .faraddr 00009FE1h +003717r 1 E2 9F 00 .faraddr 00009FE2h +00371Ar 1 E3 9F 00 .faraddr 00009FE3h +00371Dr 1 E4 9F 00 .faraddr 00009FE4h +003720r 1 E5 9F 00 .faraddr 00009FE5h +003723r 1 E6 9F 00 .faraddr 00009FE6h +003726r 1 E7 9F 00 .faraddr 00009FE7h +003729r 1 E8 9F 00 .faraddr 00009FE8h +00372Cr 1 E9 9F 00 .faraddr 00009FE9h +00372Fr 1 EA 9F 00 .faraddr 00009FEAh +003732r 1 EB 9F 00 .faraddr 00009FEBh +003735r 1 EC 9F 00 .faraddr 00009FECh +003738r 1 ED 9F 00 .faraddr 00009FEDh +00373Br 1 EE 9F 00 .faraddr 00009FEEh +00373Er 1 EF 9F 00 .faraddr 00009FEFh +003741r 1 F0 9F 00 .faraddr 00009FF0h +003744r 1 F1 9F 00 .faraddr 00009FF1h +003747r 1 F2 9F 00 .faraddr 00009FF2h +00374Ar 1 F3 9F 00 .faraddr 00009FF3h +00374Dr 1 F4 9F 00 .faraddr 00009FF4h +003750r 1 F5 9F 00 .faraddr 00009FF5h +003753r 1 F6 9F 00 .faraddr 00009FF6h +003756r 1 F7 9F 00 .faraddr 00009FF7h +003759r 1 F8 9F 00 .faraddr 00009FF8h +00375Cr 1 F9 9F 00 .faraddr 00009FF9h +00375Fr 1 FA 9F 00 .faraddr 00009FFAh +003762r 1 FB 9F 00 .faraddr 00009FFBh +003765r 1 FC 9F 00 .faraddr 00009FFCh +003768r 1 FD 9F 00 .faraddr 00009FFDh +00376Br 1 FE 9F 00 .faraddr 00009FFEh +00376Er 1 FF 9F 00 .faraddr 00009FFFh +003771r 1 00 A0 00 .faraddr 0000A000h +003774r 1 01 A0 00 .faraddr 0000A001h +003777r 1 02 A0 00 .faraddr 0000A002h +00377Ar 1 03 A0 00 .faraddr 0000A003h +00377Dr 1 04 A0 00 .faraddr 0000A004h +003780r 1 05 A0 00 .faraddr 0000A005h +003783r 1 06 A0 00 .faraddr 0000A006h +003786r 1 07 A0 00 .faraddr 0000A007h +003789r 1 08 A0 00 .faraddr 0000A008h +00378Cr 1 09 A0 00 .faraddr 0000A009h +00378Fr 1 0A A0 00 .faraddr 0000A00Ah +003792r 1 0B A0 00 .faraddr 0000A00Bh +003795r 1 0C A0 00 .faraddr 0000A00Ch +003798r 1 0D A0 00 .faraddr 0000A00Dh +00379Br 1 0E A0 00 .faraddr 0000A00Eh +00379Er 1 0F A0 00 .faraddr 0000A00Fh +0037A1r 1 E1 AF 00 .faraddr 0000AFE1h +0037A4r 1 E2 AF 00 .faraddr 0000AFE2h +0037A7r 1 E3 AF 00 .faraddr 0000AFE3h +0037AAr 1 E4 AF 00 .faraddr 0000AFE4h +0037ADr 1 E5 AF 00 .faraddr 0000AFE5h +0037B0r 1 E6 AF 00 .faraddr 0000AFE6h +0037B3r 1 E7 AF 00 .faraddr 0000AFE7h +0037B6r 1 E8 AF 00 .faraddr 0000AFE8h +0037B9r 1 E9 AF 00 .faraddr 0000AFE9h +0037BCr 1 EA AF 00 .faraddr 0000AFEAh +0037BFr 1 EB AF 00 .faraddr 0000AFEBh +0037C2r 1 EC AF 00 .faraddr 0000AFECh +0037C5r 1 ED AF 00 .faraddr 0000AFEDh +0037C8r 1 EE AF 00 .faraddr 0000AFEEh +0037CBr 1 EF AF 00 .faraddr 0000AFEFh +0037CEr 1 F0 AF 00 .faraddr 0000AFF0h +0037D1r 1 F1 AF 00 .faraddr 0000AFF1h +0037D4r 1 F2 AF 00 .faraddr 0000AFF2h +0037D7r 1 F3 AF 00 .faraddr 0000AFF3h +0037DAr 1 F4 AF 00 .faraddr 0000AFF4h +0037DDr 1 F5 AF 00 .faraddr 0000AFF5h +0037E0r 1 F6 AF 00 .faraddr 0000AFF6h +0037E3r 1 F7 AF 00 .faraddr 0000AFF7h +0037E6r 1 F8 AF 00 .faraddr 0000AFF8h +0037E9r 1 F9 AF 00 .faraddr 0000AFF9h +0037ECr 1 FA AF 00 .faraddr 0000AFFAh +0037EFr 1 FB AF 00 .faraddr 0000AFFBh +0037F2r 1 FC AF 00 .faraddr 0000AFFCh +0037F5r 1 FD AF 00 .faraddr 0000AFFDh +0037F8r 1 FE AF 00 .faraddr 0000AFFEh +0037FBr 1 FF AF 00 .faraddr 0000AFFFh +0037FEr 1 00 B0 00 .faraddr 0000B000h +003801r 1 01 B0 00 .faraddr 0000B001h +003804r 1 02 B0 00 .faraddr 0000B002h +003807r 1 03 B0 00 .faraddr 0000B003h +00380Ar 1 04 B0 00 .faraddr 0000B004h +00380Dr 1 05 B0 00 .faraddr 0000B005h +003810r 1 06 B0 00 .faraddr 0000B006h +003813r 1 07 B0 00 .faraddr 0000B007h +003816r 1 08 B0 00 .faraddr 0000B008h +003819r 1 09 B0 00 .faraddr 0000B009h +00381Cr 1 0A B0 00 .faraddr 0000B00Ah +00381Fr 1 0B B0 00 .faraddr 0000B00Bh +003822r 1 0C B0 00 .faraddr 0000B00Ch +003825r 1 0D B0 00 .faraddr 0000B00Dh +003828r 1 0E B0 00 .faraddr 0000B00Eh +00382Br 1 0F B0 00 .faraddr 0000B00Fh +00382Er 1 E1 FF 00 .faraddr 0000FFE1h +003831r 1 E2 FF 00 .faraddr 0000FFE2h +003834r 1 E3 FF 00 .faraddr 0000FFE3h +003837r 1 E4 FF 00 .faraddr 0000FFE4h +00383Ar 1 E5 FF 00 .faraddr 0000FFE5h +00383Dr 1 E6 FF 00 .faraddr 0000FFE6h +003840r 1 E7 FF 00 .faraddr 0000FFE7h +003843r 1 E8 FF 00 .faraddr 0000FFE8h +003846r 1 E9 FF 00 .faraddr 0000FFE9h +003849r 1 EA FF 00 .faraddr 0000FFEAh +00384Cr 1 EB FF 00 .faraddr 0000FFEBh +00384Fr 1 EC FF 00 .faraddr 0000FFECh +003852r 1 ED FF 00 .faraddr 0000FFEDh +003855r 1 EE FF 00 .faraddr 0000FFEEh +003858r 1 EF FF 00 .faraddr 0000FFEFh +00385Br 1 F0 FF 00 .faraddr 0000FFF0h +00385Er 1 F1 FF 00 .faraddr 0000FFF1h +003861r 1 F2 FF 00 .faraddr 0000FFF2h +003864r 1 F3 FF 00 .faraddr 0000FFF3h +003867r 1 F4 FF 00 .faraddr 0000FFF4h +00386Ar 1 F5 FF 00 .faraddr 0000FFF5h +00386Dr 1 F6 FF 00 .faraddr 0000FFF6h +003870r 1 F7 FF 00 .faraddr 0000FFF7h +003873r 1 F8 FF 00 .faraddr 0000FFF8h +003876r 1 F9 FF 00 .faraddr 0000FFF9h +003879r 1 FA FF 00 .faraddr 0000FFFAh +00387Cr 1 FB FF 00 .faraddr 0000FFFBh +00387Fr 1 FC FF 00 .faraddr 0000FFFCh +003882r 1 FD FF 00 .faraddr 0000FFFDh +003885r 1 FE FF 00 .faraddr 0000FFFEh +003888r 1 FF FF 00 .faraddr 0000FFFFh +00388Br 1 00 00 01 .faraddr 00010000h +00388Er 1 01 00 01 .faraddr 00010001h +003891r 1 02 00 01 .faraddr 00010002h +003894r 1 03 00 01 .faraddr 00010003h +003897r 1 04 00 01 .faraddr 00010004h +00389Ar 1 05 00 01 .faraddr 00010005h +00389Dr 1 06 00 01 .faraddr 00010006h +0038A0r 1 07 00 01 .faraddr 00010007h +0038A3r 1 08 00 01 .faraddr 00010008h +0038A6r 1 09 00 01 .faraddr 00010009h +0038A9r 1 0A 00 01 .faraddr 0001000Ah +0038ACr 1 0B 00 01 .faraddr 0001000Bh +0038AFr 1 0C 00 01 .faraddr 0001000Ch +0038B2r 1 0D 00 01 .faraddr 0001000Dh +0038B5r 1 0E 00 01 .faraddr 0001000Eh +0038B8r 1 0F 00 01 .faraddr 0001000Fh +0038BBr 1 E1 FF 10 .faraddr 0010FFE1h +0038BEr 1 E2 FF 10 .faraddr 0010FFE2h +0038C1r 1 E3 FF 10 .faraddr 0010FFE3h +0038C4r 1 E4 FF 10 .faraddr 0010FFE4h +0038C7r 1 E5 FF 10 .faraddr 0010FFE5h +0038CAr 1 E6 FF 10 .faraddr 0010FFE6h +0038CDr 1 E7 FF 10 .faraddr 0010FFE7h +0038D0r 1 E8 FF 10 .faraddr 0010FFE8h +0038D3r 1 E9 FF 10 .faraddr 0010FFE9h +0038D6r 1 EA FF 10 .faraddr 0010FFEAh +0038D9r 1 EB FF 10 .faraddr 0010FFEBh +0038DCr 1 EC FF 10 .faraddr 0010FFECh +0038DFr 1 ED FF 10 .faraddr 0010FFEDh +0038E2r 1 EE FF 10 .faraddr 0010FFEEh +0038E5r 1 EF FF 10 .faraddr 0010FFEFh +0038E8r 1 F0 FF 10 .faraddr 0010FFF0h +0038EBr 1 F1 FF 10 .faraddr 0010FFF1h +0038EEr 1 F2 FF 10 .faraddr 0010FFF2h +0038F1r 1 F3 FF 10 .faraddr 0010FFF3h +0038F4r 1 F4 FF 10 .faraddr 0010FFF4h +0038F7r 1 F5 FF 10 .faraddr 0010FFF5h +0038FAr 1 F6 FF 10 .faraddr 0010FFF6h +0038FDr 1 F7 FF 10 .faraddr 0010FFF7h +003900r 1 F8 FF 10 .faraddr 0010FFF8h +003903r 1 F9 FF 10 .faraddr 0010FFF9h +003906r 1 FA FF 10 .faraddr 0010FFFAh +003909r 1 FB FF 10 .faraddr 0010FFFBh +00390Cr 1 FC FF 10 .faraddr 0010FFFCh +00390Fr 1 FD FF 10 .faraddr 0010FFFDh +003912r 1 FE FF 10 .faraddr 0010FFFEh +003915r 1 FF FF 10 .faraddr 0010FFFFh +003918r 1 00 00 11 .faraddr 00110000h +00391Br 1 01 00 11 .faraddr 00110001h +00391Er 1 02 00 11 .faraddr 00110002h +003921r 1 03 00 11 .faraddr 00110003h +003924r 1 04 00 11 .faraddr 00110004h +003927r 1 05 00 11 .faraddr 00110005h +00392Ar 1 06 00 11 .faraddr 00110006h +00392Dr 1 07 00 11 .faraddr 00110007h +003930r 1 08 00 11 .faraddr 00110008h +003933r 1 09 00 11 .faraddr 00110009h +003936r 1 0A 00 11 .faraddr 0011000Ah +003939r 1 0B 00 11 .faraddr 0011000Bh +00393Cr 1 0C 00 11 .faraddr 0011000Ch +00393Fr 1 0D 00 11 .faraddr 0011000Dh +003942r 1 0E 00 11 .faraddr 0011000Eh +003945r 1 0F 00 11 .faraddr 0011000Fh +003948r 1 E1 FF 20 .faraddr 0020FFE1h +00394Br 1 E2 FF 20 .faraddr 0020FFE2h +00394Er 1 E3 FF 20 .faraddr 0020FFE3h +003951r 1 E4 FF 20 .faraddr 0020FFE4h +003954r 1 E5 FF 20 .faraddr 0020FFE5h +003957r 1 E6 FF 20 .faraddr 0020FFE6h +00395Ar 1 E7 FF 20 .faraddr 0020FFE7h +00395Dr 1 E8 FF 20 .faraddr 0020FFE8h +003960r 1 E9 FF 20 .faraddr 0020FFE9h +003963r 1 EA FF 20 .faraddr 0020FFEAh +003966r 1 EB FF 20 .faraddr 0020FFEBh +003969r 1 EC FF 20 .faraddr 0020FFECh +00396Cr 1 ED FF 20 .faraddr 0020FFEDh +00396Fr 1 EE FF 20 .faraddr 0020FFEEh +003972r 1 EF FF 20 .faraddr 0020FFEFh +003975r 1 F0 FF 20 .faraddr 0020FFF0h +003978r 1 F1 FF 20 .faraddr 0020FFF1h +00397Br 1 F2 FF 20 .faraddr 0020FFF2h +00397Er 1 F3 FF 20 .faraddr 0020FFF3h +003981r 1 F4 FF 20 .faraddr 0020FFF4h +003984r 1 F5 FF 20 .faraddr 0020FFF5h +003987r 1 F6 FF 20 .faraddr 0020FFF6h +00398Ar 1 F7 FF 20 .faraddr 0020FFF7h +00398Dr 1 F8 FF 20 .faraddr 0020FFF8h +003990r 1 F9 FF 20 .faraddr 0020FFF9h +003993r 1 FA FF 20 .faraddr 0020FFFAh +003996r 1 FB FF 20 .faraddr 0020FFFBh +003999r 1 FC FF 20 .faraddr 0020FFFCh +00399Cr 1 FD FF 20 .faraddr 0020FFFDh +00399Fr 1 FE FF 20 .faraddr 0020FFFEh +0039A2r 1 FF FF 20 .faraddr 0020FFFFh +0039A5r 1 00 00 21 .faraddr 00210000h +0039A8r 1 01 00 21 .faraddr 00210001h +0039ABr 1 02 00 21 .faraddr 00210002h +0039AEr 1 03 00 21 .faraddr 00210003h +0039B1r 1 04 00 21 .faraddr 00210004h +0039B4r 1 05 00 21 .faraddr 00210005h +0039B7r 1 06 00 21 .faraddr 00210006h +0039BAr 1 07 00 21 .faraddr 00210007h +0039BDr 1 08 00 21 .faraddr 00210008h +0039C0r 1 09 00 21 .faraddr 00210009h +0039C3r 1 0A 00 21 .faraddr 0021000Ah +0039C6r 1 0B 00 21 .faraddr 0021000Bh +0039C9r 1 0C 00 21 .faraddr 0021000Ch +0039CCr 1 0D 00 21 .faraddr 0021000Dh +0039CFr 1 0E 00 21 .faraddr 0021000Eh +0039D2r 1 0F 00 21 .faraddr 0021000Fh +0039D5r 1 E1 FF 7F .faraddr 007FFFE1h +0039D8r 1 E2 FF 7F .faraddr 007FFFE2h +0039DBr 1 E3 FF 7F .faraddr 007FFFE3h +0039DEr 1 E4 FF 7F .faraddr 007FFFE4h +0039E1r 1 E5 FF 7F .faraddr 007FFFE5h +0039E4r 1 E6 FF 7F .faraddr 007FFFE6h +0039E7r 1 E7 FF 7F .faraddr 007FFFE7h +0039EAr 1 E8 FF 7F .faraddr 007FFFE8h +0039EDr 1 E9 FF 7F .faraddr 007FFFE9h +0039F0r 1 EA FF 7F .faraddr 007FFFEAh +0039F3r 1 EB FF 7F .faraddr 007FFFEBh +0039F6r 1 EC FF 7F .faraddr 007FFFECh +0039F9r 1 ED FF 7F .faraddr 007FFFEDh +0039FCr 1 EE FF 7F .faraddr 007FFFEEh +0039FFr 1 EF FF 7F .faraddr 007FFFEFh +003A02r 1 F0 FF 7F .faraddr 007FFFF0h +003A05r 1 F1 FF 7F .faraddr 007FFFF1h +003A08r 1 F2 FF 7F .faraddr 007FFFF2h +003A0Br 1 F3 FF 7F .faraddr 007FFFF3h +003A0Er 1 F4 FF 7F .faraddr 007FFFF4h +003A11r 1 F5 FF 7F .faraddr 007FFFF5h +003A14r 1 F6 FF 7F .faraddr 007FFFF6h +003A17r 1 F7 FF 7F .faraddr 007FFFF7h +003A1Ar 1 F8 FF 7F .faraddr 007FFFF8h +003A1Dr 1 F9 FF 7F .faraddr 007FFFF9h +003A20r 1 FA FF 7F .faraddr 007FFFFAh +003A23r 1 FB FF 7F .faraddr 007FFFFBh +003A26r 1 FC FF 7F .faraddr 007FFFFCh +003A29r 1 FD FF 7F .faraddr 007FFFFDh +003A2Cr 1 FE FF 7F .faraddr 007FFFFEh +003A2Fr 1 FF FF 7F .faraddr 007FFFFFh +003A32r 1 00 00 80 .faraddr 00800000h +003A35r 1 01 00 80 .faraddr 00800001h +003A38r 1 02 00 80 .faraddr 00800002h +003A3Br 1 03 00 80 .faraddr 00800003h +003A3Er 1 04 00 80 .faraddr 00800004h +003A41r 1 05 00 80 .faraddr 00800005h +003A44r 1 06 00 80 .faraddr 00800006h +003A47r 1 07 00 80 .faraddr 00800007h +003A4Ar 1 08 00 80 .faraddr 00800008h +003A4Dr 1 09 00 80 .faraddr 00800009h +003A50r 1 0A 00 80 .faraddr 0080000Ah +003A53r 1 0B 00 80 .faraddr 0080000Bh +003A56r 1 0C 00 80 .faraddr 0080000Ch +003A59r 1 0D 00 80 .faraddr 0080000Dh +003A5Cr 1 0E 00 80 .faraddr 0080000Eh +003A5Fr 1 0F 00 80 .faraddr 0080000Fh +003A62r 1 E1 FF 9F .faraddr 009FFFE1h +003A65r 1 E2 FF 9F .faraddr 009FFFE2h +003A68r 1 E3 FF 9F .faraddr 009FFFE3h +003A6Br 1 E4 FF 9F .faraddr 009FFFE4h +003A6Er 1 E5 FF 9F .faraddr 009FFFE5h +003A71r 1 E6 FF 9F .faraddr 009FFFE6h +003A74r 1 E7 FF 9F .faraddr 009FFFE7h +003A77r 1 E8 FF 9F .faraddr 009FFFE8h +003A7Ar 1 E9 FF 9F .faraddr 009FFFE9h +003A7Dr 1 EA FF 9F .faraddr 009FFFEAh +003A80r 1 EB FF 9F .faraddr 009FFFEBh +003A83r 1 EC FF 9F .faraddr 009FFFECh +003A86r 1 ED FF 9F .faraddr 009FFFEDh +003A89r 1 EE FF 9F .faraddr 009FFFEEh +003A8Cr 1 EF FF 9F .faraddr 009FFFEFh +003A8Fr 1 F0 FF 9F .faraddr 009FFFF0h +003A92r 1 F1 FF 9F .faraddr 009FFFF1h +003A95r 1 F2 FF 9F .faraddr 009FFFF2h +003A98r 1 F3 FF 9F .faraddr 009FFFF3h +003A9Br 1 F4 FF 9F .faraddr 009FFFF4h +003A9Er 1 F5 FF 9F .faraddr 009FFFF5h +003AA1r 1 F6 FF 9F .faraddr 009FFFF6h +003AA4r 1 F7 FF 9F .faraddr 009FFFF7h +003AA7r 1 F8 FF 9F .faraddr 009FFFF8h +003AAAr 1 F9 FF 9F .faraddr 009FFFF9h +003AADr 1 FA FF 9F .faraddr 009FFFFAh +003AB0r 1 FB FF 9F .faraddr 009FFFFBh +003AB3r 1 FC FF 9F .faraddr 009FFFFCh +003AB6r 1 FD FF 9F .faraddr 009FFFFDh +003AB9r 1 FE FF 9F .faraddr 009FFFFEh +003ABCr 1 FF FF 9F .faraddr 009FFFFFh +003ABFr 1 00 00 A0 .faraddr 00A00000h +003AC2r 1 01 00 A0 .faraddr 00A00001h +003AC5r 1 02 00 A0 .faraddr 00A00002h +003AC8r 1 03 00 A0 .faraddr 00A00003h +003ACBr 1 04 00 A0 .faraddr 00A00004h +003ACEr 1 05 00 A0 .faraddr 00A00005h +003AD1r 1 06 00 A0 .faraddr 00A00006h +003AD4r 1 07 00 A0 .faraddr 00A00007h +003AD7r 1 08 00 A0 .faraddr 00A00008h +003ADAr 1 09 00 A0 .faraddr 00A00009h +003ADDr 1 0A 00 A0 .faraddr 00A0000Ah +003AE0r 1 0B 00 A0 .faraddr 00A0000Bh +003AE3r 1 0C 00 A0 .faraddr 00A0000Ch +003AE6r 1 0D 00 A0 .faraddr 00A0000Dh +003AE9r 1 0E 00 A0 .faraddr 00A0000Eh +003AECr 1 0F 00 A0 .faraddr 00A0000Fh +003AEFr 1 E1 FF FF .faraddr 00FFFFE1h +003AF2r 1 E2 FF FF .faraddr 00FFFFE2h +003AF5r 1 E3 FF FF .faraddr 00FFFFE3h +003AF8r 1 E4 FF FF .faraddr 00FFFFE4h +003AFBr 1 E5 FF FF .faraddr 00FFFFE5h +003AFEr 1 E6 FF FF .faraddr 00FFFFE6h +003B01r 1 E7 FF FF .faraddr 00FFFFE7h +003B04r 1 E8 FF FF .faraddr 00FFFFE8h +003B07r 1 E9 FF FF .faraddr 00FFFFE9h +003B0Ar 1 EA FF FF .faraddr 00FFFFEAh +003B0Dr 1 EB FF FF .faraddr 00FFFFEBh +003B10r 1 EC FF FF .faraddr 00FFFFECh +003B13r 1 ED FF FF .faraddr 00FFFFEDh +003B16r 1 EE FF FF .faraddr 00FFFFEEh +003B19r 1 EF FF FF .faraddr 00FFFFEFh +003B1Cr 1 F0 FF FF .faraddr 00FFFFF0h +003B1Fr 1 F1 FF FF .faraddr 00FFFFF1h +003B22r 1 F2 FF FF .faraddr 00FFFFF2h +003B25r 1 F3 FF FF .faraddr 00FFFFF3h +003B28r 1 F4 FF FF .faraddr 00FFFFF4h +003B2Br 1 F5 FF FF .faraddr 00FFFFF5h +003B2Er 1 F6 FF FF .faraddr 00FFFFF6h +003B31r 1 F7 FF FF .faraddr 00FFFFF7h +003B34r 1 F8 FF FF .faraddr 00FFFFF8h +003B37r 1 F9 FF FF .faraddr 00FFFFF9h +003B3Ar 1 FA FF FF .faraddr 00FFFFFAh +003B3Dr 1 FB FF FF .faraddr 00FFFFFBh +003B40r 1 FC FF FF .faraddr 00FFFFFCh +003B43r 1 FD FF FF .faraddr 00FFFFFDh +003B46r 1 FE FF FF .faraddr 00FFFFFEh +003B49r 1 FF FF FF .faraddr 00FFFFFFh +003B4Cr 1 +003B4Cr 1 ; alternative hex values, always leading zero +003B4Cr 1 00 00 00 .faraddr 00h +003B4Fr 1 01 00 00 .faraddr 01h +003B52r 1 02 00 00 .faraddr 02h +003B55r 1 03 00 00 .faraddr 03h +003B58r 1 04 00 00 .faraddr 04h +003B5Br 1 05 00 00 .faraddr 05h +003B5Er 1 06 00 00 .faraddr 06h +003B61r 1 07 00 00 .faraddr 07h +003B64r 1 08 00 00 .faraddr 08h +003B67r 1 09 00 00 .faraddr 09h +003B6Ar 1 0A 00 00 .faraddr 0ah +003B6Dr 1 0B 00 00 .faraddr 0bh +003B70r 1 0C 00 00 .faraddr 0ch +003B73r 1 0D 00 00 .faraddr 0dh +003B76r 1 0E 00 00 .faraddr 0eh +003B79r 1 0F 00 00 .faraddr 0fh +003B7Cr 1 10 00 00 .faraddr 010h +003B7Fr 1 11 00 00 .faraddr 011h +003B82r 1 12 00 00 .faraddr 012h +003B85r 1 13 00 00 .faraddr 013h +003B88r 1 70 00 00 .faraddr 070h +003B8Br 1 71 00 00 .faraddr 071h +003B8Er 1 72 00 00 .faraddr 072h +003B91r 1 73 00 00 .faraddr 073h +003B94r 1 74 00 00 .faraddr 074h +003B97r 1 75 00 00 .faraddr 075h +003B9Ar 1 76 00 00 .faraddr 076h +003B9Dr 1 77 00 00 .faraddr 077h +003BA0r 1 78 00 00 .faraddr 078h +003BA3r 1 79 00 00 .faraddr 079h +003BA6r 1 7A 00 00 .faraddr 07ah +003BA9r 1 7B 00 00 .faraddr 07bh +003BACr 1 7C 00 00 .faraddr 07ch +003BAFr 1 7D 00 00 .faraddr 07dh +003BB2r 1 7E 00 00 .faraddr 07eh +003BB5r 1 7F 00 00 .faraddr 07fh +003BB8r 1 80 00 00 .faraddr 080h +003BBBr 1 81 00 00 .faraddr 081h +003BBEr 1 82 00 00 .faraddr 082h +003BC1r 1 83 00 00 .faraddr 083h +003BC4r 1 84 00 00 .faraddr 084h +003BC7r 1 85 00 00 .faraddr 085h +003BCAr 1 86 00 00 .faraddr 086h +003BCDr 1 F0 00 00 .faraddr 0f0h +003BD0r 1 F1 00 00 .faraddr 0f1h +003BD3r 1 F2 00 00 .faraddr 0f2h +003BD6r 1 F3 00 00 .faraddr 0f3h +003BD9r 1 F4 00 00 .faraddr 0f4h +003BDCr 1 F5 00 00 .faraddr 0f5h +003BDFr 1 F6 00 00 .faraddr 0f6h +003BE2r 1 F7 00 00 .faraddr 0f7h +003BE5r 1 F8 00 00 .faraddr 0f8h +003BE8r 1 F9 00 00 .faraddr 0f9h +003BEBr 1 FA 00 00 .faraddr 0fah +003BEEr 1 FB 00 00 .faraddr 0fbh +003BF1r 1 FC 00 00 .faraddr 0fch +003BF4r 1 FD 00 00 .faraddr 0fdh +003BF7r 1 FE 00 00 .faraddr 0feh +003BFAr 1 FF 00 00 .faraddr 0ffh +003BFDr 1 00 01 00 .faraddr 0100h +003C00r 1 01 01 00 .faraddr 0101h +003C03r 1 02 01 00 .faraddr 0102h +003C06r 1 03 01 00 .faraddr 0103h +003C09r 1 D2 0F 00 .faraddr 0fd2h +003C0Cr 1 D3 0F 00 .faraddr 0fd3h +003C0Fr 1 D4 0F 00 .faraddr 0fd4h +003C12r 1 D5 0F 00 .faraddr 0fd5h +003C15r 1 D6 0F 00 .faraddr 0fd6h +003C18r 1 D7 0F 00 .faraddr 0fd7h +003C1Br 1 D8 0F 00 .faraddr 0fd8h +003C1Er 1 D9 0F 00 .faraddr 0fd9h +003C21r 1 DA 0F 00 .faraddr 0fdah +003C24r 1 DB 0F 00 .faraddr 0fdbh +003C27r 1 DC 0F 00 .faraddr 0fdch +003C2Ar 1 DD 0F 00 .faraddr 0fddh +003C2Dr 1 DE 0F 00 .faraddr 0fdeh +003C30r 1 DF 0F 00 .faraddr 0fdfh +003C33r 1 E0 0F 00 .faraddr 0fe0h +003C36r 1 E1 0F 00 .faraddr 0fe1h +003C39r 1 E2 0F 00 .faraddr 0fe2h +003C3Cr 1 E3 0F 00 .faraddr 0fe3h +003C3Fr 1 E4 0F 00 .faraddr 0fe4h +003C42r 1 E5 0F 00 .faraddr 0fe5h +003C45r 1 E6 0F 00 .faraddr 0fe6h +003C48r 1 E7 0F 00 .faraddr 0fe7h +003C4Br 1 E8 0F 00 .faraddr 0fe8h +003C4Er 1 E9 0F 00 .faraddr 0fe9h +003C51r 1 EA 0F 00 .faraddr 0feah +003C54r 1 EB 0F 00 .faraddr 0febh +003C57r 1 EC 0F 00 .faraddr 0fech +003C5Ar 1 ED 0F 00 .faraddr 0fedh +003C5Dr 1 EE 0F 00 .faraddr 0feeh +003C60r 1 EF 0F 00 .faraddr 0fefh +003C63r 1 F0 0F 00 .faraddr 0ff0h +003C66r 1 F1 0F 00 .faraddr 0ff1h +003C69r 1 F2 0F 00 .faraddr 0ff2h +003C6Cr 1 F3 0F 00 .faraddr 0ff3h +003C6Fr 1 F4 0F 00 .faraddr 0ff4h +003C72r 1 F5 0F 00 .faraddr 0ff5h +003C75r 1 F6 0F 00 .faraddr 0ff6h +003C78r 1 F7 0F 00 .faraddr 0ff7h +003C7Br 1 F8 0F 00 .faraddr 0ff8h +003C7Er 1 F9 0F 00 .faraddr 0ff9h +003C81r 1 FA 0F 00 .faraddr 0ffah +003C84r 1 FB 0F 00 .faraddr 0ffbh +003C87r 1 FC 0F 00 .faraddr 0ffch +003C8Ar 1 FD 0F 00 .faraddr 0ffdh +003C8Dr 1 FE 0F 00 .faraddr 0ffeh +003C90r 1 FF 0F 00 .faraddr 0fffh +003C93r 1 00 10 00 .faraddr 01000h +003C96r 1 01 10 00 .faraddr 01001h +003C99r 1 02 10 00 .faraddr 01002h +003C9Cr 1 03 10 00 .faraddr 01003h +003C9Fr 1 04 10 00 .faraddr 01004h +003CA2r 1 05 10 00 .faraddr 01005h +003CA5r 1 06 10 00 .faraddr 01006h +003CA8r 1 07 10 00 .faraddr 01007h +003CABr 1 08 10 00 .faraddr 01008h +003CAEr 1 F0 7F 00 .faraddr 07ff0h +003CB1r 1 F1 7F 00 .faraddr 07ff1h +003CB4r 1 F2 7F 00 .faraddr 07ff2h +003CB7r 1 F3 7F 00 .faraddr 07ff3h +003CBAr 1 F4 7F 00 .faraddr 07ff4h +003CBDr 1 F5 7F 00 .faraddr 07ff5h +003CC0r 1 F6 7F 00 .faraddr 07ff6h +003CC3r 1 F7 7F 00 .faraddr 07ff7h +003CC6r 1 F8 7F 00 .faraddr 07ff8h +003CC9r 1 F9 7F 00 .faraddr 07ff9h +003CCCr 1 FA 7F 00 .faraddr 07ffah +003CCFr 1 FB 7F 00 .faraddr 07ffbh +003CD2r 1 FC 7F 00 .faraddr 07ffch +003CD5r 1 FD 7F 00 .faraddr 07ffdh +003CD8r 1 FE 7F 00 .faraddr 07ffeh +003CDBr 1 FF 7F 00 .faraddr 07fffh +003CDEr 1 00 80 00 .faraddr 08000h +003CE1r 1 01 80 00 .faraddr 08001h +003CE4r 1 02 80 00 .faraddr 08002h +003CE7r 1 03 80 00 .faraddr 08003h +003CEAr 1 04 80 00 .faraddr 08004h +003CEDr 1 05 80 00 .faraddr 08005h +003CF0r 1 06 80 00 .faraddr 08006h +003CF3r 1 07 80 00 .faraddr 08007h +003CF6r 1 08 80 00 .faraddr 08008h +003CF9r 1 09 80 00 .faraddr 08009h +003CFCr 1 0A 80 00 .faraddr 0800ah +003CFFr 1 0B 80 00 .faraddr 0800bh +003D02r 1 E1 9F 00 .faraddr 09fe1h +003D05r 1 E2 9F 00 .faraddr 09fe2h +003D08r 1 E3 9F 00 .faraddr 09fe3h +003D0Br 1 E4 9F 00 .faraddr 09fe4h +003D0Er 1 E5 9F 00 .faraddr 09fe5h +003D11r 1 E6 9F 00 .faraddr 09fe6h +003D14r 1 E7 9F 00 .faraddr 09fe7h +003D17r 1 E8 9F 00 .faraddr 09fe8h +003D1Ar 1 E9 9F 00 .faraddr 09fe9h +003D1Dr 1 EA 9F 00 .faraddr 09feah +003D20r 1 EB 9F 00 .faraddr 09febh +003D23r 1 EC 9F 00 .faraddr 09fech +003D26r 1 ED 9F 00 .faraddr 09fedh +003D29r 1 EE 9F 00 .faraddr 09feeh +003D2Cr 1 EF 9F 00 .faraddr 09fefh +003D2Fr 1 F0 9F 00 .faraddr 09ff0h +003D32r 1 F1 9F 00 .faraddr 09ff1h +003D35r 1 F2 9F 00 .faraddr 09ff2h +003D38r 1 F3 9F 00 .faraddr 09ff3h +003D3Br 1 F4 9F 00 .faraddr 09ff4h +003D3Er 1 F5 9F 00 .faraddr 09ff5h +003D41r 1 F6 9F 00 .faraddr 09ff6h +003D44r 1 F7 9F 00 .faraddr 09ff7h +003D47r 1 F8 9F 00 .faraddr 09ff8h +003D4Ar 1 F9 9F 00 .faraddr 09ff9h +003D4Dr 1 FA 9F 00 .faraddr 09ffah +003D50r 1 FB 9F 00 .faraddr 09ffbh +003D53r 1 FC 9F 00 .faraddr 09ffch +003D56r 1 FD 9F 00 .faraddr 09ffdh +003D59r 1 FE 9F 00 .faraddr 09ffeh +003D5Cr 1 FF 9F 00 .faraddr 09fffh +003D5Fr 1 00 A0 00 .faraddr 0a000h +003D62r 1 01 A0 00 .faraddr 0a001h +003D65r 1 02 A0 00 .faraddr 0a002h +003D68r 1 03 A0 00 .faraddr 0a003h +003D6Br 1 04 A0 00 .faraddr 0a004h +003D6Er 1 05 A0 00 .faraddr 0a005h +003D71r 1 06 A0 00 .faraddr 0a006h +003D74r 1 07 A0 00 .faraddr 0a007h +003D77r 1 08 A0 00 .faraddr 0a008h +003D7Ar 1 09 A0 00 .faraddr 0a009h +003D7Dr 1 0A A0 00 .faraddr 0a00ah +003D80r 1 0B A0 00 .faraddr 0a00bh +003D83r 1 0C A0 00 .faraddr 0a00ch +003D86r 1 0D A0 00 .faraddr 0a00dh +003D89r 1 0E A0 00 .faraddr 0a00eh +003D8Cr 1 0F A0 00 .faraddr 0a00fh +003D8Fr 1 E1 AF 00 .faraddr 0afe1h +003D92r 1 E2 AF 00 .faraddr 0afe2h +003D95r 1 E3 AF 00 .faraddr 0afe3h +003D98r 1 E4 AF 00 .faraddr 0afe4h +003D9Br 1 E5 AF 00 .faraddr 0afe5h +003D9Er 1 E6 AF 00 .faraddr 0afe6h +003DA1r 1 E7 AF 00 .faraddr 0afe7h +003DA4r 1 E8 AF 00 .faraddr 0afe8h +003DA7r 1 E9 AF 00 .faraddr 0afe9h +003DAAr 1 EA AF 00 .faraddr 0afeah +003DADr 1 EB AF 00 .faraddr 0afebh +003DB0r 1 EC AF 00 .faraddr 0afech +003DB3r 1 ED AF 00 .faraddr 0afedh +003DB6r 1 EE AF 00 .faraddr 0afeeh +003DB9r 1 EF AF 00 .faraddr 0afefh +003DBCr 1 F0 AF 00 .faraddr 0aff0h +003DBFr 1 F1 AF 00 .faraddr 0aff1h +003DC2r 1 F2 AF 00 .faraddr 0aff2h +003DC5r 1 F3 AF 00 .faraddr 0aff3h +003DC8r 1 F4 AF 00 .faraddr 0aff4h +003DCBr 1 F5 AF 00 .faraddr 0aff5h +003DCEr 1 F6 AF 00 .faraddr 0aff6h +003DD1r 1 F7 AF 00 .faraddr 0aff7h +003DD4r 1 F8 AF 00 .faraddr 0aff8h +003DD7r 1 F9 AF 00 .faraddr 0aff9h +003DDAr 1 FA AF 00 .faraddr 0affah +003DDDr 1 FB AF 00 .faraddr 0affbh +003DE0r 1 FC AF 00 .faraddr 0affch +003DE3r 1 FD AF 00 .faraddr 0affdh +003DE6r 1 FE AF 00 .faraddr 0affeh +003DE9r 1 FF AF 00 .faraddr 0afffh +003DECr 1 00 B0 00 .faraddr 0b000h +003DEFr 1 01 B0 00 .faraddr 0b001h +003DF2r 1 02 B0 00 .faraddr 0b002h +003DF5r 1 03 B0 00 .faraddr 0b003h +003DF8r 1 04 B0 00 .faraddr 0b004h +003DFBr 1 05 B0 00 .faraddr 0b005h +003DFEr 1 06 B0 00 .faraddr 0b006h +003E01r 1 07 B0 00 .faraddr 0b007h +003E04r 1 08 B0 00 .faraddr 0b008h +003E07r 1 09 B0 00 .faraddr 0b009h +003E0Ar 1 0A B0 00 .faraddr 0b00ah +003E0Dr 1 0B B0 00 .faraddr 0b00bh +003E10r 1 0C B0 00 .faraddr 0b00ch +003E13r 1 0D B0 00 .faraddr 0b00dh +003E16r 1 0E B0 00 .faraddr 0b00eh +003E19r 1 0F B0 00 .faraddr 0b00fh +003E1Cr 1 E1 FF 00 .faraddr 0ffe1h +003E1Fr 1 E2 FF 00 .faraddr 0ffe2h +003E22r 1 E3 FF 00 .faraddr 0ffe3h +003E25r 1 E4 FF 00 .faraddr 0ffe4h +003E28r 1 E5 FF 00 .faraddr 0ffe5h +003E2Br 1 E6 FF 00 .faraddr 0ffe6h +003E2Er 1 E7 FF 00 .faraddr 0ffe7h +003E31r 1 E8 FF 00 .faraddr 0ffe8h +003E34r 1 E9 FF 00 .faraddr 0ffe9h +003E37r 1 EA FF 00 .faraddr 0ffeah +003E3Ar 1 EB FF 00 .faraddr 0ffebh +003E3Dr 1 EC FF 00 .faraddr 0ffech +003E40r 1 ED FF 00 .faraddr 0ffedh +003E43r 1 EE FF 00 .faraddr 0ffeeh +003E46r 1 EF FF 00 .faraddr 0ffefh +003E49r 1 F0 FF 00 .faraddr 0fff0h +003E4Cr 1 F1 FF 00 .faraddr 0fff1h +003E4Fr 1 F2 FF 00 .faraddr 0fff2h +003E52r 1 F3 FF 00 .faraddr 0fff3h +003E55r 1 F4 FF 00 .faraddr 0fff4h +003E58r 1 F5 FF 00 .faraddr 0fff5h +003E5Br 1 F6 FF 00 .faraddr 0fff6h +003E5Er 1 F7 FF 00 .faraddr 0fff7h +003E61r 1 F8 FF 00 .faraddr 0fff8h +003E64r 1 F9 FF 00 .faraddr 0fff9h +003E67r 1 FA FF 00 .faraddr 0fffah +003E6Ar 1 FB FF 00 .faraddr 0fffbh +003E6Dr 1 FC FF 00 .faraddr 0fffch +003E70r 1 FD FF 00 .faraddr 0fffdh +003E73r 1 FE FF 00 .faraddr 0fffeh +003E76r 1 FF FF 00 .faraddr 0ffffh +003E79r 1 00 00 01 .faraddr 010000h +003E7Cr 1 01 00 01 .faraddr 010001h +003E7Fr 1 02 00 01 .faraddr 010002h +003E82r 1 03 00 01 .faraddr 010003h +003E85r 1 04 00 01 .faraddr 010004h +003E88r 1 05 00 01 .faraddr 010005h +003E8Br 1 06 00 01 .faraddr 010006h +003E8Er 1 07 00 01 .faraddr 010007h +003E91r 1 08 00 01 .faraddr 010008h +003E94r 1 09 00 01 .faraddr 010009h +003E97r 1 0A 00 01 .faraddr 01000ah +003E9Ar 1 0B 00 01 .faraddr 01000bh +003E9Dr 1 0C 00 01 .faraddr 01000ch +003EA0r 1 0D 00 01 .faraddr 01000dh +003EA3r 1 0E 00 01 .faraddr 01000eh +003EA6r 1 0F 00 01 .faraddr 01000fh +003EA9r 1 E1 FF 10 .faraddr 010ffe1h +003EACr 1 E2 FF 10 .faraddr 010ffe2h +003EAFr 1 E3 FF 10 .faraddr 010ffe3h +003EB2r 1 E4 FF 10 .faraddr 010ffe4h +003EB5r 1 E5 FF 10 .faraddr 010ffe5h +003EB8r 1 E6 FF 10 .faraddr 010ffe6h +003EBBr 1 E7 FF 10 .faraddr 010ffe7h +003EBEr 1 E8 FF 10 .faraddr 010ffe8h +003EC1r 1 E9 FF 10 .faraddr 010ffe9h +003EC4r 1 EA FF 10 .faraddr 010ffeah +003EC7r 1 EB FF 10 .faraddr 010ffebh +003ECAr 1 EC FF 10 .faraddr 010ffech +003ECDr 1 ED FF 10 .faraddr 010ffedh +003ED0r 1 EE FF 10 .faraddr 010ffeeh +003ED3r 1 EF FF 10 .faraddr 010ffefh +003ED6r 1 F0 FF 10 .faraddr 010fff0h +003ED9r 1 F1 FF 10 .faraddr 010fff1h +003EDCr 1 F2 FF 10 .faraddr 010fff2h +003EDFr 1 F3 FF 10 .faraddr 010fff3h +003EE2r 1 F4 FF 10 .faraddr 010fff4h +003EE5r 1 F5 FF 10 .faraddr 010fff5h +003EE8r 1 F6 FF 10 .faraddr 010fff6h +003EEBr 1 F7 FF 10 .faraddr 010fff7h +003EEEr 1 F8 FF 10 .faraddr 010fff8h +003EF1r 1 F9 FF 10 .faraddr 010fff9h +003EF4r 1 FA FF 10 .faraddr 010fffah +003EF7r 1 FB FF 10 .faraddr 010fffbh +003EFAr 1 FC FF 10 .faraddr 010fffch +003EFDr 1 FD FF 10 .faraddr 010fffdh +003F00r 1 FE FF 10 .faraddr 010fffeh +003F03r 1 FF FF 10 .faraddr 010ffffh +003F06r 1 00 00 11 .faraddr 0110000h +003F09r 1 01 00 11 .faraddr 0110001h +003F0Cr 1 02 00 11 .faraddr 0110002h +003F0Fr 1 03 00 11 .faraddr 0110003h +003F12r 1 04 00 11 .faraddr 0110004h +003F15r 1 05 00 11 .faraddr 0110005h +003F18r 1 06 00 11 .faraddr 0110006h +003F1Br 1 07 00 11 .faraddr 0110007h +003F1Er 1 08 00 11 .faraddr 0110008h +003F21r 1 09 00 11 .faraddr 0110009h +003F24r 1 0A 00 11 .faraddr 011000ah +003F27r 1 0B 00 11 .faraddr 011000bh +003F2Ar 1 0C 00 11 .faraddr 011000ch +003F2Dr 1 0D 00 11 .faraddr 011000dh +003F30r 1 0E 00 11 .faraddr 011000eh +003F33r 1 0F 00 11 .faraddr 011000fh +003F36r 1 E1 FF 20 .faraddr 020ffe1h +003F39r 1 E2 FF 20 .faraddr 020ffe2h +003F3Cr 1 E3 FF 20 .faraddr 020ffe3h +003F3Fr 1 E4 FF 20 .faraddr 020ffe4h +003F42r 1 E5 FF 20 .faraddr 020ffe5h +003F45r 1 E6 FF 20 .faraddr 020ffe6h +003F48r 1 E7 FF 20 .faraddr 020ffe7h +003F4Br 1 E8 FF 20 .faraddr 020ffe8h +003F4Er 1 E9 FF 20 .faraddr 020ffe9h +003F51r 1 EA FF 20 .faraddr 020ffeah +003F54r 1 EB FF 20 .faraddr 020ffebh +003F57r 1 EC FF 20 .faraddr 020ffech +003F5Ar 1 ED FF 20 .faraddr 020ffedh +003F5Dr 1 EE FF 20 .faraddr 020ffeeh +003F60r 1 EF FF 20 .faraddr 020ffefh +003F63r 1 F0 FF 20 .faraddr 020fff0h +003F66r 1 F1 FF 20 .faraddr 020fff1h +003F69r 1 F2 FF 20 .faraddr 020fff2h +003F6Cr 1 F3 FF 20 .faraddr 020fff3h +003F6Fr 1 F4 FF 20 .faraddr 020fff4h +003F72r 1 F5 FF 20 .faraddr 020fff5h +003F75r 1 F6 FF 20 .faraddr 020fff6h +003F78r 1 F7 FF 20 .faraddr 020fff7h +003F7Br 1 F8 FF 20 .faraddr 020fff8h +003F7Er 1 F9 FF 20 .faraddr 020fff9h +003F81r 1 FA FF 20 .faraddr 020fffah +003F84r 1 FB FF 20 .faraddr 020fffbh +003F87r 1 FC FF 20 .faraddr 020fffch +003F8Ar 1 FD FF 20 .faraddr 020fffdh +003F8Dr 1 FE FF 20 .faraddr 020fffeh +003F90r 1 FF FF 20 .faraddr 020ffffh +003F93r 1 00 00 21 .faraddr 0210000h +003F96r 1 01 00 21 .faraddr 0210001h +003F99r 1 02 00 21 .faraddr 0210002h +003F9Cr 1 03 00 21 .faraddr 0210003h +003F9Fr 1 04 00 21 .faraddr 0210004h +003FA2r 1 05 00 21 .faraddr 0210005h +003FA5r 1 06 00 21 .faraddr 0210006h +003FA8r 1 07 00 21 .faraddr 0210007h +003FABr 1 08 00 21 .faraddr 0210008h +003FAEr 1 09 00 21 .faraddr 0210009h +003FB1r 1 0A 00 21 .faraddr 021000ah +003FB4r 1 0B 00 21 .faraddr 021000bh +003FB7r 1 0C 00 21 .faraddr 021000ch +003FBAr 1 0D 00 21 .faraddr 021000dh +003FBDr 1 0E 00 21 .faraddr 021000eh +003FC0r 1 0F 00 21 .faraddr 021000fh +003FC3r 1 E1 FF 7F .faraddr 07fffe1h +003FC6r 1 E2 FF 7F .faraddr 07fffe2h +003FC9r 1 E3 FF 7F .faraddr 07fffe3h +003FCCr 1 E4 FF 7F .faraddr 07fffe4h +003FCFr 1 E5 FF 7F .faraddr 07fffe5h +003FD2r 1 E6 FF 7F .faraddr 07fffe6h +003FD5r 1 E7 FF 7F .faraddr 07fffe7h +003FD8r 1 E8 FF 7F .faraddr 07fffe8h +003FDBr 1 E9 FF 7F .faraddr 07fffe9h +003FDEr 1 EA FF 7F .faraddr 07fffeah +003FE1r 1 EB FF 7F .faraddr 07fffebh +003FE4r 1 EC FF 7F .faraddr 07fffech +003FE7r 1 ED FF 7F .faraddr 07fffedh +003FEAr 1 EE FF 7F .faraddr 07fffeeh +003FEDr 1 EF FF 7F .faraddr 07fffefh +003FF0r 1 F0 FF 7F .faraddr 07ffff0h +003FF3r 1 F1 FF 7F .faraddr 07ffff1h +003FF6r 1 F2 FF 7F .faraddr 07ffff2h +003FF9r 1 F3 FF 7F .faraddr 07ffff3h +003FFCr 1 F4 FF 7F .faraddr 07ffff4h +003FFFr 1 F5 FF 7F .faraddr 07ffff5h +004002r 1 F6 FF 7F .faraddr 07ffff6h +004005r 1 F7 FF 7F .faraddr 07ffff7h +004008r 1 F8 FF 7F .faraddr 07ffff8h +00400Br 1 F9 FF 7F .faraddr 07ffff9h +00400Er 1 FA FF 7F .faraddr 07ffffah +004011r 1 FB FF 7F .faraddr 07ffffbh +004014r 1 FC FF 7F .faraddr 07ffffch +004017r 1 FD FF 7F .faraddr 07ffffdh +00401Ar 1 FE FF 7F .faraddr 07ffffeh +00401Dr 1 FF FF 7F .faraddr 07fffffh +004020r 1 00 00 80 .faraddr 0800000h +004023r 1 01 00 80 .faraddr 0800001h +004026r 1 02 00 80 .faraddr 0800002h +004029r 1 03 00 80 .faraddr 0800003h +00402Cr 1 04 00 80 .faraddr 0800004h +00402Fr 1 05 00 80 .faraddr 0800005h +004032r 1 06 00 80 .faraddr 0800006h +004035r 1 07 00 80 .faraddr 0800007h +004038r 1 08 00 80 .faraddr 0800008h +00403Br 1 09 00 80 .faraddr 0800009h +00403Er 1 0A 00 80 .faraddr 080000ah +004041r 1 0B 00 80 .faraddr 080000bh +004044r 1 0C 00 80 .faraddr 080000ch +004047r 1 0D 00 80 .faraddr 080000dh +00404Ar 1 0E 00 80 .faraddr 080000eh +00404Dr 1 0F 00 80 .faraddr 080000fh +004050r 1 E1 FF 9F .faraddr 09fffe1h +004053r 1 E2 FF 9F .faraddr 09fffe2h +004056r 1 E3 FF 9F .faraddr 09fffe3h +004059r 1 E4 FF 9F .faraddr 09fffe4h +00405Cr 1 E5 FF 9F .faraddr 09fffe5h +00405Fr 1 E6 FF 9F .faraddr 09fffe6h +004062r 1 E7 FF 9F .faraddr 09fffe7h +004065r 1 E8 FF 9F .faraddr 09fffe8h +004068r 1 E9 FF 9F .faraddr 09fffe9h +00406Br 1 EA FF 9F .faraddr 09fffeah +00406Er 1 EB FF 9F .faraddr 09fffebh +004071r 1 EC FF 9F .faraddr 09fffech +004074r 1 ED FF 9F .faraddr 09fffedh +004077r 1 EE FF 9F .faraddr 09fffeeh +00407Ar 1 EF FF 9F .faraddr 09fffefh +00407Dr 1 F0 FF 9F .faraddr 09ffff0h +004080r 1 F1 FF 9F .faraddr 09ffff1h +004083r 1 F2 FF 9F .faraddr 09ffff2h +004086r 1 F3 FF 9F .faraddr 09ffff3h +004089r 1 F4 FF 9F .faraddr 09ffff4h +00408Cr 1 F5 FF 9F .faraddr 09ffff5h +00408Fr 1 F6 FF 9F .faraddr 09ffff6h +004092r 1 F7 FF 9F .faraddr 09ffff7h +004095r 1 F8 FF 9F .faraddr 09ffff8h +004098r 1 F9 FF 9F .faraddr 09ffff9h +00409Br 1 FA FF 9F .faraddr 09ffffah +00409Er 1 FB FF 9F .faraddr 09ffffbh +0040A1r 1 FC FF 9F .faraddr 09ffffch +0040A4r 1 FD FF 9F .faraddr 09ffffdh +0040A7r 1 FE FF 9F .faraddr 09ffffeh +0040AAr 1 FF FF 9F .faraddr 09fffffh +0040ADr 1 00 00 A0 .faraddr 0a00000h +0040B0r 1 01 00 A0 .faraddr 0a00001h +0040B3r 1 02 00 A0 .faraddr 0a00002h +0040B6r 1 03 00 A0 .faraddr 0a00003h +0040B9r 1 04 00 A0 .faraddr 0a00004h +0040BCr 1 05 00 A0 .faraddr 0a00005h +0040BFr 1 06 00 A0 .faraddr 0a00006h +0040C2r 1 07 00 A0 .faraddr 0a00007h +0040C5r 1 08 00 A0 .faraddr 0a00008h +0040C8r 1 09 00 A0 .faraddr 0a00009h +0040CBr 1 0A 00 A0 .faraddr 0a0000ah +0040CEr 1 0B 00 A0 .faraddr 0a0000bh +0040D1r 1 0C 00 A0 .faraddr 0a0000ch +0040D4r 1 0D 00 A0 .faraddr 0a0000dh +0040D7r 1 0E 00 A0 .faraddr 0a0000eh +0040DAr 1 0F 00 A0 .faraddr 0a0000fh +0040DDr 1 E1 FF FF .faraddr 0ffffe1h +0040E0r 1 E2 FF FF .faraddr 0ffffe2h +0040E3r 1 E3 FF FF .faraddr 0ffffe3h +0040E6r 1 E4 FF FF .faraddr 0ffffe4h +0040E9r 1 E5 FF FF .faraddr 0ffffe5h +0040ECr 1 E6 FF FF .faraddr 0ffffe6h +0040EFr 1 E7 FF FF .faraddr 0ffffe7h +0040F2r 1 E8 FF FF .faraddr 0ffffe8h +0040F5r 1 E9 FF FF .faraddr 0ffffe9h +0040F8r 1 EA FF FF .faraddr 0ffffeah +0040FBr 1 EB FF FF .faraddr 0ffffebh +0040FEr 1 EC FF FF .faraddr 0ffffech +004101r 1 ED FF FF .faraddr 0ffffedh +004104r 1 EE FF FF .faraddr 0ffffeeh +004107r 1 EF FF FF .faraddr 0ffffefh +00410Ar 1 F0 FF FF .faraddr 0fffff0h +00410Dr 1 F1 FF FF .faraddr 0fffff1h +004110r 1 F2 FF FF .faraddr 0fffff2h +004113r 1 F3 FF FF .faraddr 0fffff3h +004116r 1 F4 FF FF .faraddr 0fffff4h +004119r 1 F5 FF FF .faraddr 0fffff5h +00411Cr 1 F6 FF FF .faraddr 0fffff6h +00411Fr 1 F7 FF FF .faraddr 0fffff7h +004122r 1 F8 FF FF .faraddr 0fffff8h +004125r 1 F9 FF FF .faraddr 0fffff9h +004128r 1 FA FF FF .faraddr 0fffffah +00412Br 1 FB FF FF .faraddr 0fffffbh +00412Er 1 FC FF FF .faraddr 0fffffch +004131r 1 FD FF FF .faraddr 0fffffdh +004134r 1 FE FF FF .faraddr 0fffffeh +004137r 1 FF FF FF .faraddr 0ffffffh +00413Ar 1 +00413Ar 1 ; binary values, variable length +00413Ar 1 00 00 00 .faraddr %0 +00413Dr 1 01 00 00 .faraddr %01 +004140r 1 02 00 00 .faraddr %010 +004143r 1 03 00 00 .faraddr %011 +004146r 1 04 00 00 .faraddr %0100 +004149r 1 05 00 00 .faraddr %0101 +00414Cr 1 06 00 00 .faraddr %0110 +00414Fr 1 07 00 00 .faraddr %0111 +004152r 1 08 00 00 .faraddr %01000 +004155r 1 09 00 00 .faraddr %01001 +004158r 1 0A 00 00 .faraddr %01010 +00415Br 1 0B 00 00 .faraddr %01011 +00415Er 1 0C 00 00 .faraddr %01100 +004161r 1 0D 00 00 .faraddr %01101 +004164r 1 0E 00 00 .faraddr %01110 +004167r 1 0F 00 00 .faraddr %01111 +00416Ar 1 10 00 00 .faraddr %010000 +00416Dr 1 11 00 00 .faraddr %010001 +004170r 1 12 00 00 .faraddr %010010 +004173r 1 13 00 00 .faraddr %010011 +004176r 1 70 00 00 .faraddr %01110000 +004179r 1 71 00 00 .faraddr %01110001 +00417Cr 1 72 00 00 .faraddr %01110010 +00417Fr 1 73 00 00 .faraddr %01110011 +004182r 1 74 00 00 .faraddr %01110100 +004185r 1 75 00 00 .faraddr %01110101 +004188r 1 76 00 00 .faraddr %01110110 +00418Br 1 77 00 00 .faraddr %01110111 +00418Er 1 78 00 00 .faraddr %01111000 +004191r 1 79 00 00 .faraddr %01111001 +004194r 1 7A 00 00 .faraddr %01111010 +004197r 1 7B 00 00 .faraddr %01111011 +00419Ar 1 7C 00 00 .faraddr %01111100 +00419Dr 1 7D 00 00 .faraddr %01111101 +0041A0r 1 7E 00 00 .faraddr %01111110 +0041A3r 1 7F 00 00 .faraddr %01111111 +0041A6r 1 80 00 00 .faraddr %010000000 +0041A9r 1 81 00 00 .faraddr %010000001 +0041ACr 1 82 00 00 .faraddr %010000010 +0041AFr 1 83 00 00 .faraddr %010000011 +0041B2r 1 84 00 00 .faraddr %010000100 +0041B5r 1 85 00 00 .faraddr %010000101 +0041B8r 1 86 00 00 .faraddr %010000110 +0041BBr 1 F0 00 00 .faraddr %011110000 +0041BEr 1 F1 00 00 .faraddr %011110001 +0041C1r 1 F2 00 00 .faraddr %011110010 +0041C4r 1 F3 00 00 .faraddr %011110011 +0041C7r 1 F4 00 00 .faraddr %011110100 +0041CAr 1 F5 00 00 .faraddr %011110101 +0041CDr 1 F6 00 00 .faraddr %011110110 +0041D0r 1 F7 00 00 .faraddr %011110111 +0041D3r 1 F8 00 00 .faraddr %011111000 +0041D6r 1 F9 00 00 .faraddr %011111001 +0041D9r 1 FA 00 00 .faraddr %011111010 +0041DCr 1 FB 00 00 .faraddr %011111011 +0041DFr 1 FC 00 00 .faraddr %011111100 +0041E2r 1 FD 00 00 .faraddr %011111101 +0041E5r 1 FE 00 00 .faraddr %011111110 +0041E8r 1 FF 00 00 .faraddr %011111111 +0041EBr 1 00 01 00 .faraddr %0100000000 +0041EEr 1 01 01 00 .faraddr %0100000001 +0041F1r 1 02 01 00 .faraddr %0100000010 +0041F4r 1 03 01 00 .faraddr %0100000011 +0041F7r 1 D2 0F 00 .faraddr %0111111010010 +0041FAr 1 D3 0F 00 .faraddr %0111111010011 +0041FDr 1 D4 0F 00 .faraddr %0111111010100 +004200r 1 D5 0F 00 .faraddr %0111111010101 +004203r 1 D6 0F 00 .faraddr %0111111010110 +004206r 1 D7 0F 00 .faraddr %0111111010111 +004209r 1 D8 0F 00 .faraddr %0111111011000 +00420Cr 1 D9 0F 00 .faraddr %0111111011001 +00420Fr 1 DA 0F 00 .faraddr %0111111011010 +004212r 1 DB 0F 00 .faraddr %0111111011011 +004215r 1 DC 0F 00 .faraddr %0111111011100 +004218r 1 DD 0F 00 .faraddr %0111111011101 +00421Br 1 DE 0F 00 .faraddr %0111111011110 +00421Er 1 DF 0F 00 .faraddr %0111111011111 +004221r 1 E0 0F 00 .faraddr %0111111100000 +004224r 1 E1 0F 00 .faraddr %0111111100001 +004227r 1 E2 0F 00 .faraddr %0111111100010 +00422Ar 1 E3 0F 00 .faraddr %0111111100011 +00422Dr 1 E4 0F 00 .faraddr %0111111100100 +004230r 1 E5 0F 00 .faraddr %0111111100101 +004233r 1 E6 0F 00 .faraddr %0111111100110 +004236r 1 E7 0F 00 .faraddr %0111111100111 +004239r 1 E8 0F 00 .faraddr %0111111101000 +00423Cr 1 E9 0F 00 .faraddr %0111111101001 +00423Fr 1 EA 0F 00 .faraddr %0111111101010 +004242r 1 EB 0F 00 .faraddr %0111111101011 +004245r 1 EC 0F 00 .faraddr %0111111101100 +004248r 1 ED 0F 00 .faraddr %0111111101101 +00424Br 1 EE 0F 00 .faraddr %0111111101110 +00424Er 1 EF 0F 00 .faraddr %0111111101111 +004251r 1 F0 0F 00 .faraddr %0111111110000 +004254r 1 F1 0F 00 .faraddr %0111111110001 +004257r 1 F2 0F 00 .faraddr %0111111110010 +00425Ar 1 F3 0F 00 .faraddr %0111111110011 +00425Dr 1 F4 0F 00 .faraddr %0111111110100 +004260r 1 F5 0F 00 .faraddr %0111111110101 +004263r 1 F6 0F 00 .faraddr %0111111110110 +004266r 1 F7 0F 00 .faraddr %0111111110111 +004269r 1 F8 0F 00 .faraddr %0111111111000 +00426Cr 1 F9 0F 00 .faraddr %0111111111001 +00426Fr 1 FA 0F 00 .faraddr %0111111111010 +004272r 1 FB 0F 00 .faraddr %0111111111011 +004275r 1 FC 0F 00 .faraddr %0111111111100 +004278r 1 FD 0F 00 .faraddr %0111111111101 +00427Br 1 FE 0F 00 .faraddr %0111111111110 +00427Er 1 FF 0F 00 .faraddr %0111111111111 +004281r 1 00 10 00 .faraddr %01000000000000 +004284r 1 01 10 00 .faraddr %01000000000001 +004287r 1 02 10 00 .faraddr %01000000000010 +00428Ar 1 03 10 00 .faraddr %01000000000011 +00428Dr 1 04 10 00 .faraddr %01000000000100 +004290r 1 05 10 00 .faraddr %01000000000101 +004293r 1 06 10 00 .faraddr %01000000000110 +004296r 1 07 10 00 .faraddr %01000000000111 +004299r 1 08 10 00 .faraddr %01000000001000 +00429Cr 1 F0 7F 00 .faraddr %0111111111110000 +00429Fr 1 F1 7F 00 .faraddr %0111111111110001 +0042A2r 1 F2 7F 00 .faraddr %0111111111110010 +0042A5r 1 F3 7F 00 .faraddr %0111111111110011 +0042A8r 1 F4 7F 00 .faraddr %0111111111110100 +0042ABr 1 F5 7F 00 .faraddr %0111111111110101 +0042AEr 1 F6 7F 00 .faraddr %0111111111110110 +0042B1r 1 F7 7F 00 .faraddr %0111111111110111 +0042B4r 1 F8 7F 00 .faraddr %0111111111111000 +0042B7r 1 F9 7F 00 .faraddr %0111111111111001 +0042BAr 1 FA 7F 00 .faraddr %0111111111111010 +0042BDr 1 FB 7F 00 .faraddr %0111111111111011 +0042C0r 1 FC 7F 00 .faraddr %0111111111111100 +0042C3r 1 FD 7F 00 .faraddr %0111111111111101 +0042C6r 1 FE 7F 00 .faraddr %0111111111111110 +0042C9r 1 FF 7F 00 .faraddr %0111111111111111 +0042CCr 1 00 80 00 .faraddr %01000000000000000 +0042CFr 1 01 80 00 .faraddr %01000000000000001 +0042D2r 1 02 80 00 .faraddr %01000000000000010 +0042D5r 1 03 80 00 .faraddr %01000000000000011 +0042D8r 1 04 80 00 .faraddr %01000000000000100 +0042DBr 1 05 80 00 .faraddr %01000000000000101 +0042DEr 1 06 80 00 .faraddr %01000000000000110 +0042E1r 1 07 80 00 .faraddr %01000000000000111 +0042E4r 1 08 80 00 .faraddr %01000000000001000 +0042E7r 1 09 80 00 .faraddr %01000000000001001 +0042EAr 1 0A 80 00 .faraddr %01000000000001010 +0042EDr 1 0B 80 00 .faraddr %01000000000001011 +0042F0r 1 E1 9F 00 .faraddr %01001111111100001 +0042F3r 1 E2 9F 00 .faraddr %01001111111100010 +0042F6r 1 E3 9F 00 .faraddr %01001111111100011 +0042F9r 1 E4 9F 00 .faraddr %01001111111100100 +0042FCr 1 E5 9F 00 .faraddr %01001111111100101 +0042FFr 1 E6 9F 00 .faraddr %01001111111100110 +004302r 1 E7 9F 00 .faraddr %01001111111100111 +004305r 1 E8 9F 00 .faraddr %01001111111101000 +004308r 1 E9 9F 00 .faraddr %01001111111101001 +00430Br 1 EA 9F 00 .faraddr %01001111111101010 +00430Er 1 EB 9F 00 .faraddr %01001111111101011 +004311r 1 EC 9F 00 .faraddr %01001111111101100 +004314r 1 ED 9F 00 .faraddr %01001111111101101 +004317r 1 EE 9F 00 .faraddr %01001111111101110 +00431Ar 1 EF 9F 00 .faraddr %01001111111101111 +00431Dr 1 F0 9F 00 .faraddr %01001111111110000 +004320r 1 F1 9F 00 .faraddr %01001111111110001 +004323r 1 F2 9F 00 .faraddr %01001111111110010 +004326r 1 F3 9F 00 .faraddr %01001111111110011 +004329r 1 F4 9F 00 .faraddr %01001111111110100 +00432Cr 1 F5 9F 00 .faraddr %01001111111110101 +00432Fr 1 F6 9F 00 .faraddr %01001111111110110 +004332r 1 F7 9F 00 .faraddr %01001111111110111 +004335r 1 F8 9F 00 .faraddr %01001111111111000 +004338r 1 F9 9F 00 .faraddr %01001111111111001 +00433Br 1 FA 9F 00 .faraddr %01001111111111010 +00433Er 1 FB 9F 00 .faraddr %01001111111111011 +004341r 1 FC 9F 00 .faraddr %01001111111111100 +004344r 1 FD 9F 00 .faraddr %01001111111111101 +004347r 1 FE 9F 00 .faraddr %01001111111111110 +00434Ar 1 FF 9F 00 .faraddr %01001111111111111 +00434Dr 1 00 A0 00 .faraddr %01010000000000000 +004350r 1 01 A0 00 .faraddr %01010000000000001 +004353r 1 02 A0 00 .faraddr %01010000000000010 +004356r 1 03 A0 00 .faraddr %01010000000000011 +004359r 1 04 A0 00 .faraddr %01010000000000100 +00435Cr 1 05 A0 00 .faraddr %01010000000000101 +00435Fr 1 06 A0 00 .faraddr %01010000000000110 +004362r 1 07 A0 00 .faraddr %01010000000000111 +004365r 1 08 A0 00 .faraddr %01010000000001000 +004368r 1 09 A0 00 .faraddr %01010000000001001 +00436Br 1 0A A0 00 .faraddr %01010000000001010 +00436Er 1 0B A0 00 .faraddr %01010000000001011 +004371r 1 0C A0 00 .faraddr %01010000000001100 +004374r 1 0D A0 00 .faraddr %01010000000001101 +004377r 1 0E A0 00 .faraddr %01010000000001110 +00437Ar 1 0F A0 00 .faraddr %01010000000001111 +00437Dr 1 E1 AF 00 .faraddr %01010111111100001 +004380r 1 E2 AF 00 .faraddr %01010111111100010 +004383r 1 E3 AF 00 .faraddr %01010111111100011 +004386r 1 E4 AF 00 .faraddr %01010111111100100 +004389r 1 E5 AF 00 .faraddr %01010111111100101 +00438Cr 1 E6 AF 00 .faraddr %01010111111100110 +00438Fr 1 E7 AF 00 .faraddr %01010111111100111 +004392r 1 E8 AF 00 .faraddr %01010111111101000 +004395r 1 E9 AF 00 .faraddr %01010111111101001 +004398r 1 EA AF 00 .faraddr %01010111111101010 +00439Br 1 EB AF 00 .faraddr %01010111111101011 +00439Er 1 EC AF 00 .faraddr %01010111111101100 +0043A1r 1 ED AF 00 .faraddr %01010111111101101 +0043A4r 1 EE AF 00 .faraddr %01010111111101110 +0043A7r 1 EF AF 00 .faraddr %01010111111101111 +0043AAr 1 F0 AF 00 .faraddr %01010111111110000 +0043ADr 1 F1 AF 00 .faraddr %01010111111110001 +0043B0r 1 F2 AF 00 .faraddr %01010111111110010 +0043B3r 1 F3 AF 00 .faraddr %01010111111110011 +0043B6r 1 F4 AF 00 .faraddr %01010111111110100 +0043B9r 1 F5 AF 00 .faraddr %01010111111110101 +0043BCr 1 F6 AF 00 .faraddr %01010111111110110 +0043BFr 1 F7 AF 00 .faraddr %01010111111110111 +0043C2r 1 F8 AF 00 .faraddr %01010111111111000 +0043C5r 1 F9 AF 00 .faraddr %01010111111111001 +0043C8r 1 FA AF 00 .faraddr %01010111111111010 +0043CBr 1 FB AF 00 .faraddr %01010111111111011 +0043CEr 1 FC AF 00 .faraddr %01010111111111100 +0043D1r 1 FD AF 00 .faraddr %01010111111111101 +0043D4r 1 FE AF 00 .faraddr %01010111111111110 +0043D7r 1 FF AF 00 .faraddr %01010111111111111 +0043DAr 1 00 B0 00 .faraddr %01011000000000000 +0043DDr 1 01 B0 00 .faraddr %01011000000000001 +0043E0r 1 02 B0 00 .faraddr %01011000000000010 +0043E3r 1 03 B0 00 .faraddr %01011000000000011 +0043E6r 1 04 B0 00 .faraddr %01011000000000100 +0043E9r 1 05 B0 00 .faraddr %01011000000000101 +0043ECr 1 06 B0 00 .faraddr %01011000000000110 +0043EFr 1 07 B0 00 .faraddr %01011000000000111 +0043F2r 1 08 B0 00 .faraddr %01011000000001000 +0043F5r 1 09 B0 00 .faraddr %01011000000001001 +0043F8r 1 0A B0 00 .faraddr %01011000000001010 +0043FBr 1 0B B0 00 .faraddr %01011000000001011 +0043FEr 1 0C B0 00 .faraddr %01011000000001100 +004401r 1 0D B0 00 .faraddr %01011000000001101 +004404r 1 0E B0 00 .faraddr %01011000000001110 +004407r 1 0F B0 00 .faraddr %01011000000001111 +00440Ar 1 E1 FF 00 .faraddr %01111111111100001 +00440Dr 1 E2 FF 00 .faraddr %01111111111100010 +004410r 1 E3 FF 00 .faraddr %01111111111100011 +004413r 1 E4 FF 00 .faraddr %01111111111100100 +004416r 1 E5 FF 00 .faraddr %01111111111100101 +004419r 1 E6 FF 00 .faraddr %01111111111100110 +00441Cr 1 E7 FF 00 .faraddr %01111111111100111 +00441Fr 1 E8 FF 00 .faraddr %01111111111101000 +004422r 1 E9 FF 00 .faraddr %01111111111101001 +004425r 1 EA FF 00 .faraddr %01111111111101010 +004428r 1 EB FF 00 .faraddr %01111111111101011 +00442Br 1 EC FF 00 .faraddr %01111111111101100 +00442Er 1 ED FF 00 .faraddr %01111111111101101 +004431r 1 EE FF 00 .faraddr %01111111111101110 +004434r 1 EF FF 00 .faraddr %01111111111101111 +004437r 1 F0 FF 00 .faraddr %01111111111110000 +00443Ar 1 F1 FF 00 .faraddr %01111111111110001 +00443Dr 1 F2 FF 00 .faraddr %01111111111110010 +004440r 1 F3 FF 00 .faraddr %01111111111110011 +004443r 1 F4 FF 00 .faraddr %01111111111110100 +004446r 1 F5 FF 00 .faraddr %01111111111110101 +004449r 1 F6 FF 00 .faraddr %01111111111110110 +00444Cr 1 F7 FF 00 .faraddr %01111111111110111 +00444Fr 1 F8 FF 00 .faraddr %01111111111111000 +004452r 1 F9 FF 00 .faraddr %01111111111111001 +004455r 1 FA FF 00 .faraddr %01111111111111010 +004458r 1 FB FF 00 .faraddr %01111111111111011 +00445Br 1 FC FF 00 .faraddr %01111111111111100 +00445Er 1 FD FF 00 .faraddr %01111111111111101 +004461r 1 FE FF 00 .faraddr %01111111111111110 +004464r 1 FF FF 00 .faraddr %01111111111111111 +004467r 1 00 00 01 .faraddr %10000000000000000 +00446Ar 1 01 00 01 .faraddr %10000000000000001 +00446Dr 1 02 00 01 .faraddr %10000000000000010 +004470r 1 03 00 01 .faraddr %10000000000000011 +004473r 1 04 00 01 .faraddr %10000000000000100 +004476r 1 05 00 01 .faraddr %10000000000000101 +004479r 1 06 00 01 .faraddr %10000000000000110 +00447Cr 1 07 00 01 .faraddr %10000000000000111 +00447Fr 1 08 00 01 .faraddr %10000000000001000 +004482r 1 09 00 01 .faraddr %10000000000001001 +004485r 1 0A 00 01 .faraddr %10000000000001010 +004488r 1 0B 00 01 .faraddr %10000000000001011 +00448Br 1 0C 00 01 .faraddr %10000000000001100 +00448Er 1 0D 00 01 .faraddr %10000000000001101 +004491r 1 0E 00 01 .faraddr %10000000000001110 +004494r 1 0F 00 01 .faraddr %10000000000001111 +004497r 1 E1 FF 10 .faraddr %100001111111111100001 +00449Ar 1 E2 FF 10 .faraddr %100001111111111100010 +00449Dr 1 E3 FF 10 .faraddr %100001111111111100011 +0044A0r 1 E4 FF 10 .faraddr %100001111111111100100 +0044A3r 1 E5 FF 10 .faraddr %100001111111111100101 +0044A6r 1 E6 FF 10 .faraddr %100001111111111100110 +0044A9r 1 E7 FF 10 .faraddr %100001111111111100111 +0044ACr 1 E8 FF 10 .faraddr %100001111111111101000 +0044AFr 1 E9 FF 10 .faraddr %100001111111111101001 +0044B2r 1 EA FF 10 .faraddr %100001111111111101010 +0044B5r 1 EB FF 10 .faraddr %100001111111111101011 +0044B8r 1 EC FF 10 .faraddr %100001111111111101100 +0044BBr 1 ED FF 10 .faraddr %100001111111111101101 +0044BEr 1 EE FF 10 .faraddr %100001111111111101110 +0044C1r 1 EF FF 10 .faraddr %100001111111111101111 +0044C4r 1 F0 FF 10 .faraddr %100001111111111110000 +0044C7r 1 F1 FF 10 .faraddr %100001111111111110001 +0044CAr 1 F2 FF 10 .faraddr %100001111111111110010 +0044CDr 1 F3 FF 10 .faraddr %100001111111111110011 +0044D0r 1 F4 FF 10 .faraddr %100001111111111110100 +0044D3r 1 F5 FF 10 .faraddr %100001111111111110101 +0044D6r 1 F6 FF 10 .faraddr %100001111111111110110 +0044D9r 1 F7 FF 10 .faraddr %100001111111111110111 +0044DCr 1 F8 FF 10 .faraddr %100001111111111111000 +0044DFr 1 F9 FF 10 .faraddr %100001111111111111001 +0044E2r 1 FA FF 10 .faraddr %100001111111111111010 +0044E5r 1 FB FF 10 .faraddr %100001111111111111011 +0044E8r 1 FC FF 10 .faraddr %100001111111111111100 +0044EBr 1 FD FF 10 .faraddr %100001111111111111101 +0044EEr 1 FE FF 10 .faraddr %100001111111111111110 +0044F1r 1 FF FF 10 .faraddr %100001111111111111111 +0044F4r 1 00 00 11 .faraddr %100010000000000000000 +0044F7r 1 01 00 11 .faraddr %100010000000000000001 +0044FAr 1 02 00 11 .faraddr %100010000000000000010 +0044FDr 1 03 00 11 .faraddr %100010000000000000011 +004500r 1 04 00 11 .faraddr %100010000000000000100 +004503r 1 05 00 11 .faraddr %100010000000000000101 +004506r 1 06 00 11 .faraddr %100010000000000000110 +004509r 1 07 00 11 .faraddr %100010000000000000111 +00450Cr 1 08 00 11 .faraddr %100010000000000001000 +00450Fr 1 09 00 11 .faraddr %100010000000000001001 +004512r 1 0A 00 11 .faraddr %100010000000000001010 +004515r 1 0B 00 11 .faraddr %100010000000000001011 +004518r 1 0C 00 11 .faraddr %100010000000000001100 +00451Br 1 0D 00 11 .faraddr %100010000000000001101 +00451Er 1 0E 00 11 .faraddr %100010000000000001110 +004521r 1 0F 00 11 .faraddr %100010000000000001111 +004524r 1 E1 FF 20 .faraddr %1000001111111111100001 +004527r 1 E2 FF 20 .faraddr %1000001111111111100010 +00452Ar 1 E3 FF 20 .faraddr %1000001111111111100011 +00452Dr 1 E4 FF 20 .faraddr %1000001111111111100100 +004530r 1 E5 FF 20 .faraddr %1000001111111111100101 +004533r 1 E6 FF 20 .faraddr %1000001111111111100110 +004536r 1 E7 FF 20 .faraddr %1000001111111111100111 +004539r 1 E8 FF 20 .faraddr %1000001111111111101000 +00453Cr 1 E9 FF 20 .faraddr %1000001111111111101001 +00453Fr 1 EA FF 20 .faraddr %1000001111111111101010 +004542r 1 EB FF 20 .faraddr %1000001111111111101011 +004545r 1 EC FF 20 .faraddr %1000001111111111101100 +004548r 1 ED FF 20 .faraddr %1000001111111111101101 +00454Br 1 EE FF 20 .faraddr %1000001111111111101110 +00454Er 1 EF FF 20 .faraddr %1000001111111111101111 +004551r 1 F0 FF 20 .faraddr %1000001111111111110000 +004554r 1 F1 FF 20 .faraddr %1000001111111111110001 +004557r 1 F2 FF 20 .faraddr %1000001111111111110010 +00455Ar 1 F3 FF 20 .faraddr %1000001111111111110011 +00455Dr 1 F4 FF 20 .faraddr %1000001111111111110100 +004560r 1 F5 FF 20 .faraddr %1000001111111111110101 +004563r 1 F6 FF 20 .faraddr %1000001111111111110110 +004566r 1 F7 FF 20 .faraddr %1000001111111111110111 +004569r 1 F8 FF 20 .faraddr %1000001111111111111000 +00456Cr 1 F9 FF 20 .faraddr %1000001111111111111001 +00456Fr 1 FA FF 20 .faraddr %1000001111111111111010 +004572r 1 FB FF 20 .faraddr %1000001111111111111011 +004575r 1 FC FF 20 .faraddr %1000001111111111111100 +004578r 1 FD FF 20 .faraddr %1000001111111111111101 +00457Br 1 FE FF 20 .faraddr %1000001111111111111110 +00457Er 1 FF FF 20 .faraddr %1000001111111111111111 +004581r 1 00 00 21 .faraddr %1000010000000000000000 +004584r 1 01 00 21 .faraddr %1000010000000000000001 +004587r 1 02 00 21 .faraddr %1000010000000000000010 +00458Ar 1 03 00 21 .faraddr %1000010000000000000011 +00458Dr 1 04 00 21 .faraddr %1000010000000000000100 +004590r 1 05 00 21 .faraddr %1000010000000000000101 +004593r 1 06 00 21 .faraddr %1000010000000000000110 +004596r 1 07 00 21 .faraddr %1000010000000000000111 +004599r 1 08 00 21 .faraddr %1000010000000000001000 +00459Cr 1 09 00 21 .faraddr %1000010000000000001001 +00459Fr 1 0A 00 21 .faraddr %1000010000000000001010 +0045A2r 1 0B 00 21 .faraddr %1000010000000000001011 +0045A5r 1 0C 00 21 .faraddr %1000010000000000001100 +0045A8r 1 0D 00 21 .faraddr %1000010000000000001101 +0045ABr 1 0E 00 21 .faraddr %1000010000000000001110 +0045AEr 1 0F 00 21 .faraddr %1000010000000000001111 +0045B1r 1 E1 FF 7F .faraddr %11111111111111111100001 +0045B4r 1 E2 FF 7F .faraddr %11111111111111111100010 +0045B7r 1 E3 FF 7F .faraddr %11111111111111111100011 +0045BAr 1 E4 FF 7F .faraddr %11111111111111111100100 +0045BDr 1 E5 FF 7F .faraddr %11111111111111111100101 +0045C0r 1 E6 FF 7F .faraddr %11111111111111111100110 +0045C3r 1 E7 FF 7F .faraddr %11111111111111111100111 +0045C6r 1 E8 FF 7F .faraddr %11111111111111111101000 +0045C9r 1 E9 FF 7F .faraddr %11111111111111111101001 +0045CCr 1 EA FF 7F .faraddr %11111111111111111101010 +0045CFr 1 EB FF 7F .faraddr %11111111111111111101011 +0045D2r 1 EC FF 7F .faraddr %11111111111111111101100 +0045D5r 1 ED FF 7F .faraddr %11111111111111111101101 +0045D8r 1 EE FF 7F .faraddr %11111111111111111101110 +0045DBr 1 EF FF 7F .faraddr %11111111111111111101111 +0045DEr 1 F0 FF 7F .faraddr %11111111111111111110000 +0045E1r 1 F1 FF 7F .faraddr %11111111111111111110001 +0045E4r 1 F2 FF 7F .faraddr %11111111111111111110010 +0045E7r 1 F3 FF 7F .faraddr %11111111111111111110011 +0045EAr 1 F4 FF 7F .faraddr %11111111111111111110100 +0045EDr 1 F5 FF 7F .faraddr %11111111111111111110101 +0045F0r 1 F6 FF 7F .faraddr %11111111111111111110110 +0045F3r 1 F7 FF 7F .faraddr %11111111111111111110111 +0045F6r 1 F8 FF 7F .faraddr %11111111111111111111000 +0045F9r 1 F9 FF 7F .faraddr %11111111111111111111001 +0045FCr 1 FA FF 7F .faraddr %11111111111111111111010 +0045FFr 1 FB FF 7F .faraddr %11111111111111111111011 +004602r 1 FC FF 7F .faraddr %11111111111111111111100 +004605r 1 FD FF 7F .faraddr %11111111111111111111101 +004608r 1 FE FF 7F .faraddr %11111111111111111111110 +00460Br 1 FF FF 7F .faraddr %11111111111111111111111 +00460Er 1 00 00 80 .faraddr %100000000000000000000000 +004611r 1 01 00 80 .faraddr %100000000000000000000001 +004614r 1 02 00 80 .faraddr %100000000000000000000010 +004617r 1 03 00 80 .faraddr %100000000000000000000011 +00461Ar 1 04 00 80 .faraddr %100000000000000000000100 +00461Dr 1 05 00 80 .faraddr %100000000000000000000101 +004620r 1 06 00 80 .faraddr %100000000000000000000110 +004623r 1 07 00 80 .faraddr %100000000000000000000111 +004626r 1 08 00 80 .faraddr %100000000000000000001000 +004629r 1 09 00 80 .faraddr %100000000000000000001001 +00462Cr 1 0A 00 80 .faraddr %100000000000000000001010 +00462Fr 1 0B 00 80 .faraddr %100000000000000000001011 +004632r 1 0C 00 80 .faraddr %100000000000000000001100 +004635r 1 0D 00 80 .faraddr %100000000000000000001101 +004638r 1 0E 00 80 .faraddr %100000000000000000001110 +00463Br 1 0F 00 80 .faraddr %100000000000000000001111 +00463Er 1 E1 FF 9F .faraddr %100111111111111111100001 +004641r 1 E2 FF 9F .faraddr %100111111111111111100010 +004644r 1 E3 FF 9F .faraddr %100111111111111111100011 +004647r 1 E4 FF 9F .faraddr %100111111111111111100100 +00464Ar 1 E5 FF 9F .faraddr %100111111111111111100101 +00464Dr 1 E6 FF 9F .faraddr %100111111111111111100110 +004650r 1 E7 FF 9F .faraddr %100111111111111111100111 +004653r 1 E8 FF 9F .faraddr %100111111111111111101000 +004656r 1 E9 FF 9F .faraddr %100111111111111111101001 +004659r 1 EA FF 9F .faraddr %100111111111111111101010 +00465Cr 1 EB FF 9F .faraddr %100111111111111111101011 +00465Fr 1 EC FF 9F .faraddr %100111111111111111101100 +004662r 1 ED FF 9F .faraddr %100111111111111111101101 +004665r 1 EE FF 9F .faraddr %100111111111111111101110 +004668r 1 EF FF 9F .faraddr %100111111111111111101111 +00466Br 1 F0 FF 9F .faraddr %100111111111111111110000 +00466Er 1 F1 FF 9F .faraddr %100111111111111111110001 +004671r 1 F2 FF 9F .faraddr %100111111111111111110010 +004674r 1 F3 FF 9F .faraddr %100111111111111111110011 +004677r 1 F4 FF 9F .faraddr %100111111111111111110100 +00467Ar 1 F5 FF 9F .faraddr %100111111111111111110101 +00467Dr 1 F6 FF 9F .faraddr %100111111111111111110110 +004680r 1 F7 FF 9F .faraddr %100111111111111111110111 +004683r 1 F8 FF 9F .faraddr %100111111111111111111000 +004686r 1 F9 FF 9F .faraddr %100111111111111111111001 +004689r 1 FA FF 9F .faraddr %100111111111111111111010 +00468Cr 1 FB FF 9F .faraddr %100111111111111111111011 +00468Fr 1 FC FF 9F .faraddr %100111111111111111111100 +004692r 1 FD FF 9F .faraddr %100111111111111111111101 +004695r 1 FE FF 9F .faraddr %100111111111111111111110 +004698r 1 FF FF 9F .faraddr %100111111111111111111111 +00469Br 1 00 00 A0 .faraddr %101000000000000000000000 +00469Er 1 01 00 A0 .faraddr %101000000000000000000001 +0046A1r 1 02 00 A0 .faraddr %101000000000000000000010 +0046A4r 1 03 00 A0 .faraddr %101000000000000000000011 +0046A7r 1 04 00 A0 .faraddr %101000000000000000000100 +0046AAr 1 05 00 A0 .faraddr %101000000000000000000101 +0046ADr 1 06 00 A0 .faraddr %101000000000000000000110 +0046B0r 1 07 00 A0 .faraddr %101000000000000000000111 +0046B3r 1 08 00 A0 .faraddr %101000000000000000001000 +0046B6r 1 09 00 A0 .faraddr %101000000000000000001001 +0046B9r 1 0A 00 A0 .faraddr %101000000000000000001010 +0046BCr 1 0B 00 A0 .faraddr %101000000000000000001011 +0046BFr 1 0C 00 A0 .faraddr %101000000000000000001100 +0046C2r 1 0D 00 A0 .faraddr %101000000000000000001101 +0046C5r 1 0E 00 A0 .faraddr %101000000000000000001110 +0046C8r 1 0F 00 A0 .faraddr %101000000000000000001111 +0046CBr 1 E1 FF FF .faraddr %111111111111111111100001 +0046CEr 1 E2 FF FF .faraddr %111111111111111111100010 +0046D1r 1 E3 FF FF .faraddr %111111111111111111100011 +0046D4r 1 E4 FF FF .faraddr %111111111111111111100100 +0046D7r 1 E5 FF FF .faraddr %111111111111111111100101 +0046DAr 1 E6 FF FF .faraddr %111111111111111111100110 +0046DDr 1 E7 FF FF .faraddr %111111111111111111100111 +0046E0r 1 E8 FF FF .faraddr %111111111111111111101000 +0046E3r 1 E9 FF FF .faraddr %111111111111111111101001 +0046E6r 1 EA FF FF .faraddr %111111111111111111101010 +0046E9r 1 EB FF FF .faraddr %111111111111111111101011 +0046ECr 1 EC FF FF .faraddr %111111111111111111101100 +0046EFr 1 ED FF FF .faraddr %111111111111111111101101 +0046F2r 1 EE FF FF .faraddr %111111111111111111101110 +0046F5r 1 EF FF FF .faraddr %111111111111111111101111 +0046F8r 1 F0 FF FF .faraddr %111111111111111111110000 +0046FBr 1 F1 FF FF .faraddr %111111111111111111110001 +0046FEr 1 F2 FF FF .faraddr %111111111111111111110010 +004701r 1 F3 FF FF .faraddr %111111111111111111110011 +004704r 1 F4 FF FF .faraddr %111111111111111111110100 +004707r 1 F5 FF FF .faraddr %111111111111111111110101 +00470Ar 1 F6 FF FF .faraddr %111111111111111111110110 +00470Dr 1 F7 FF FF .faraddr %111111111111111111110111 +004710r 1 F8 FF FF .faraddr %111111111111111111111000 +004713r 1 F9 FF FF .faraddr %111111111111111111111001 +004716r 1 FA FF FF .faraddr %111111111111111111111010 +004719r 1 FB FF FF .faraddr %111111111111111111111011 +00471Cr 1 FC FF FF .faraddr %111111111111111111111100 +00471Fr 1 FD FF FF .faraddr %111111111111111111111101 +004722r 1 FE FF FF .faraddr %111111111111111111111110 +004725r 1 FF FF FF .faraddr %111111111111111111111111 +004728r 1 +004728r 1 ; binary values, full length +004728r 1 00 00 00 .faraddr %000000000000000000000000 +00472Br 1 01 00 00 .faraddr %000000000000000000000001 +00472Er 1 02 00 00 .faraddr %000000000000000000000010 +004731r 1 03 00 00 .faraddr %000000000000000000000011 +004734r 1 04 00 00 .faraddr %000000000000000000000100 +004737r 1 05 00 00 .faraddr %000000000000000000000101 +00473Ar 1 06 00 00 .faraddr %000000000000000000000110 +00473Dr 1 07 00 00 .faraddr %000000000000000000000111 +004740r 1 08 00 00 .faraddr %000000000000000000001000 +004743r 1 09 00 00 .faraddr %000000000000000000001001 +004746r 1 0A 00 00 .faraddr %000000000000000000001010 +004749r 1 0B 00 00 .faraddr %000000000000000000001011 +00474Cr 1 0C 00 00 .faraddr %000000000000000000001100 +00474Fr 1 0D 00 00 .faraddr %000000000000000000001101 +004752r 1 0E 00 00 .faraddr %000000000000000000001110 +004755r 1 0F 00 00 .faraddr %000000000000000000001111 +004758r 1 10 00 00 .faraddr %000000000000000000010000 +00475Br 1 11 00 00 .faraddr %000000000000000000010001 +00475Er 1 12 00 00 .faraddr %000000000000000000010010 +004761r 1 13 00 00 .faraddr %000000000000000000010011 +004764r 1 70 00 00 .faraddr %000000000000000001110000 +004767r 1 71 00 00 .faraddr %000000000000000001110001 +00476Ar 1 72 00 00 .faraddr %000000000000000001110010 +00476Dr 1 73 00 00 .faraddr %000000000000000001110011 +004770r 1 74 00 00 .faraddr %000000000000000001110100 +004773r 1 75 00 00 .faraddr %000000000000000001110101 +004776r 1 76 00 00 .faraddr %000000000000000001110110 +004779r 1 77 00 00 .faraddr %000000000000000001110111 +00477Cr 1 78 00 00 .faraddr %000000000000000001111000 +00477Fr 1 79 00 00 .faraddr %000000000000000001111001 +004782r 1 7A 00 00 .faraddr %000000000000000001111010 +004785r 1 7B 00 00 .faraddr %000000000000000001111011 +004788r 1 7C 00 00 .faraddr %000000000000000001111100 +00478Br 1 7D 00 00 .faraddr %000000000000000001111101 +00478Er 1 7E 00 00 .faraddr %000000000000000001111110 +004791r 1 7F 00 00 .faraddr %000000000000000001111111 +004794r 1 80 00 00 .faraddr %000000000000000010000000 +004797r 1 81 00 00 .faraddr %000000000000000010000001 +00479Ar 1 82 00 00 .faraddr %000000000000000010000010 +00479Dr 1 83 00 00 .faraddr %000000000000000010000011 +0047A0r 1 84 00 00 .faraddr %000000000000000010000100 +0047A3r 1 85 00 00 .faraddr %000000000000000010000101 +0047A6r 1 86 00 00 .faraddr %000000000000000010000110 +0047A9r 1 F0 00 00 .faraddr %000000000000000011110000 +0047ACr 1 F1 00 00 .faraddr %000000000000000011110001 +0047AFr 1 F2 00 00 .faraddr %000000000000000011110010 +0047B2r 1 F3 00 00 .faraddr %000000000000000011110011 +0047B5r 1 F4 00 00 .faraddr %000000000000000011110100 +0047B8r 1 F5 00 00 .faraddr %000000000000000011110101 +0047BBr 1 F6 00 00 .faraddr %000000000000000011110110 +0047BEr 1 F7 00 00 .faraddr %000000000000000011110111 +0047C1r 1 F8 00 00 .faraddr %000000000000000011111000 +0047C4r 1 F9 00 00 .faraddr %000000000000000011111001 +0047C7r 1 FA 00 00 .faraddr %000000000000000011111010 +0047CAr 1 FB 00 00 .faraddr %000000000000000011111011 +0047CDr 1 FC 00 00 .faraddr %000000000000000011111100 +0047D0r 1 FD 00 00 .faraddr %000000000000000011111101 +0047D3r 1 FE 00 00 .faraddr %000000000000000011111110 +0047D6r 1 FF 00 00 .faraddr %000000000000000011111111 +0047D9r 1 00 01 00 .faraddr %000000000000000100000000 +0047DCr 1 01 01 00 .faraddr %000000000000000100000001 +0047DFr 1 02 01 00 .faraddr %000000000000000100000010 +0047E2r 1 03 01 00 .faraddr %000000000000000100000011 +0047E5r 1 D2 0F 00 .faraddr %000000000000111111010010 +0047E8r 1 D3 0F 00 .faraddr %000000000000111111010011 +0047EBr 1 D4 0F 00 .faraddr %000000000000111111010100 +0047EEr 1 D5 0F 00 .faraddr %000000000000111111010101 +0047F1r 1 D6 0F 00 .faraddr %000000000000111111010110 +0047F4r 1 D7 0F 00 .faraddr %000000000000111111010111 +0047F7r 1 D8 0F 00 .faraddr %000000000000111111011000 +0047FAr 1 D9 0F 00 .faraddr %000000000000111111011001 +0047FDr 1 DA 0F 00 .faraddr %000000000000111111011010 +004800r 1 DB 0F 00 .faraddr %000000000000111111011011 +004803r 1 DC 0F 00 .faraddr %000000000000111111011100 +004806r 1 DD 0F 00 .faraddr %000000000000111111011101 +004809r 1 DE 0F 00 .faraddr %000000000000111111011110 +00480Cr 1 DF 0F 00 .faraddr %000000000000111111011111 +00480Fr 1 E0 0F 00 .faraddr %000000000000111111100000 +004812r 1 E1 0F 00 .faraddr %000000000000111111100001 +004815r 1 E2 0F 00 .faraddr %000000000000111111100010 +004818r 1 E3 0F 00 .faraddr %000000000000111111100011 +00481Br 1 E4 0F 00 .faraddr %000000000000111111100100 +00481Er 1 E5 0F 00 .faraddr %000000000000111111100101 +004821r 1 E6 0F 00 .faraddr %000000000000111111100110 +004824r 1 E7 0F 00 .faraddr %000000000000111111100111 +004827r 1 E8 0F 00 .faraddr %000000000000111111101000 +00482Ar 1 E9 0F 00 .faraddr %000000000000111111101001 +00482Dr 1 EA 0F 00 .faraddr %000000000000111111101010 +004830r 1 EB 0F 00 .faraddr %000000000000111111101011 +004833r 1 EC 0F 00 .faraddr %000000000000111111101100 +004836r 1 ED 0F 00 .faraddr %000000000000111111101101 +004839r 1 EE 0F 00 .faraddr %000000000000111111101110 +00483Cr 1 EF 0F 00 .faraddr %000000000000111111101111 +00483Fr 1 F0 0F 00 .faraddr %000000000000111111110000 +004842r 1 F1 0F 00 .faraddr %000000000000111111110001 +004845r 1 F2 0F 00 .faraddr %000000000000111111110010 +004848r 1 F3 0F 00 .faraddr %000000000000111111110011 +00484Br 1 F4 0F 00 .faraddr %000000000000111111110100 +00484Er 1 F5 0F 00 .faraddr %000000000000111111110101 +004851r 1 F6 0F 00 .faraddr %000000000000111111110110 +004854r 1 F7 0F 00 .faraddr %000000000000111111110111 +004857r 1 F8 0F 00 .faraddr %000000000000111111111000 +00485Ar 1 F9 0F 00 .faraddr %000000000000111111111001 +00485Dr 1 FA 0F 00 .faraddr %000000000000111111111010 +004860r 1 FB 0F 00 .faraddr %000000000000111111111011 +004863r 1 FC 0F 00 .faraddr %000000000000111111111100 +004866r 1 FD 0F 00 .faraddr %000000000000111111111101 +004869r 1 FE 0F 00 .faraddr %000000000000111111111110 +00486Cr 1 FF 0F 00 .faraddr %000000000000111111111111 +00486Fr 1 00 10 00 .faraddr %000000000001000000000000 +004872r 1 01 10 00 .faraddr %000000000001000000000001 +004875r 1 02 10 00 .faraddr %000000000001000000000010 +004878r 1 03 10 00 .faraddr %000000000001000000000011 +00487Br 1 04 10 00 .faraddr %000000000001000000000100 +00487Er 1 05 10 00 .faraddr %000000000001000000000101 +004881r 1 06 10 00 .faraddr %000000000001000000000110 +004884r 1 07 10 00 .faraddr %000000000001000000000111 +004887r 1 08 10 00 .faraddr %000000000001000000001000 +00488Ar 1 F0 7F 00 .faraddr %000000000111111111110000 +00488Dr 1 F1 7F 00 .faraddr %000000000111111111110001 +004890r 1 F2 7F 00 .faraddr %000000000111111111110010 +004893r 1 F3 7F 00 .faraddr %000000000111111111110011 +004896r 1 F4 7F 00 .faraddr %000000000111111111110100 +004899r 1 F5 7F 00 .faraddr %000000000111111111110101 +00489Cr 1 F6 7F 00 .faraddr %000000000111111111110110 +00489Fr 1 F7 7F 00 .faraddr %000000000111111111110111 +0048A2r 1 F8 7F 00 .faraddr %000000000111111111111000 +0048A5r 1 F9 7F 00 .faraddr %000000000111111111111001 +0048A8r 1 FA 7F 00 .faraddr %000000000111111111111010 +0048ABr 1 FB 7F 00 .faraddr %000000000111111111111011 +0048AEr 1 FC 7F 00 .faraddr %000000000111111111111100 +0048B1r 1 FD 7F 00 .faraddr %000000000111111111111101 +0048B4r 1 FE 7F 00 .faraddr %000000000111111111111110 +0048B7r 1 FF 7F 00 .faraddr %000000000111111111111111 +0048BAr 1 00 80 00 .faraddr %000000001000000000000000 +0048BDr 1 01 80 00 .faraddr %000000001000000000000001 +0048C0r 1 02 80 00 .faraddr %000000001000000000000010 +0048C3r 1 03 80 00 .faraddr %000000001000000000000011 +0048C6r 1 04 80 00 .faraddr %000000001000000000000100 +0048C9r 1 05 80 00 .faraddr %000000001000000000000101 +0048CCr 1 06 80 00 .faraddr %000000001000000000000110 +0048CFr 1 07 80 00 .faraddr %000000001000000000000111 +0048D2r 1 08 80 00 .faraddr %000000001000000000001000 +0048D5r 1 09 80 00 .faraddr %000000001000000000001001 +0048D8r 1 0A 80 00 .faraddr %000000001000000000001010 +0048DBr 1 0B 80 00 .faraddr %000000001000000000001011 +0048DEr 1 E1 9F 00 .faraddr %000000001001111111100001 +0048E1r 1 E2 9F 00 .faraddr %000000001001111111100010 +0048E4r 1 E3 9F 00 .faraddr %000000001001111111100011 +0048E7r 1 E4 9F 00 .faraddr %000000001001111111100100 +0048EAr 1 E5 9F 00 .faraddr %000000001001111111100101 +0048EDr 1 E6 9F 00 .faraddr %000000001001111111100110 +0048F0r 1 E7 9F 00 .faraddr %000000001001111111100111 +0048F3r 1 E8 9F 00 .faraddr %000000001001111111101000 +0048F6r 1 E9 9F 00 .faraddr %000000001001111111101001 +0048F9r 1 EA 9F 00 .faraddr %000000001001111111101010 +0048FCr 1 EB 9F 00 .faraddr %000000001001111111101011 +0048FFr 1 EC 9F 00 .faraddr %000000001001111111101100 +004902r 1 ED 9F 00 .faraddr %000000001001111111101101 +004905r 1 EE 9F 00 .faraddr %000000001001111111101110 +004908r 1 EF 9F 00 .faraddr %000000001001111111101111 +00490Br 1 F0 9F 00 .faraddr %000000001001111111110000 +00490Er 1 F1 9F 00 .faraddr %000000001001111111110001 +004911r 1 F2 9F 00 .faraddr %000000001001111111110010 +004914r 1 F3 9F 00 .faraddr %000000001001111111110011 +004917r 1 F4 9F 00 .faraddr %000000001001111111110100 +00491Ar 1 F5 9F 00 .faraddr %000000001001111111110101 +00491Dr 1 F6 9F 00 .faraddr %000000001001111111110110 +004920r 1 F7 9F 00 .faraddr %000000001001111111110111 +004923r 1 F8 9F 00 .faraddr %000000001001111111111000 +004926r 1 F9 9F 00 .faraddr %000000001001111111111001 +004929r 1 FA 9F 00 .faraddr %000000001001111111111010 +00492Cr 1 FB 9F 00 .faraddr %000000001001111111111011 +00492Fr 1 FC 9F 00 .faraddr %000000001001111111111100 +004932r 1 FD 9F 00 .faraddr %000000001001111111111101 +004935r 1 FE 9F 00 .faraddr %000000001001111111111110 +004938r 1 FF 9F 00 .faraddr %000000001001111111111111 +00493Br 1 00 A0 00 .faraddr %000000001010000000000000 +00493Er 1 01 A0 00 .faraddr %000000001010000000000001 +004941r 1 02 A0 00 .faraddr %000000001010000000000010 +004944r 1 03 A0 00 .faraddr %000000001010000000000011 +004947r 1 04 A0 00 .faraddr %000000001010000000000100 +00494Ar 1 05 A0 00 .faraddr %000000001010000000000101 +00494Dr 1 06 A0 00 .faraddr %000000001010000000000110 +004950r 1 07 A0 00 .faraddr %000000001010000000000111 +004953r 1 08 A0 00 .faraddr %000000001010000000001000 +004956r 1 09 A0 00 .faraddr %000000001010000000001001 +004959r 1 0A A0 00 .faraddr %000000001010000000001010 +00495Cr 1 0B A0 00 .faraddr %000000001010000000001011 +00495Fr 1 0C A0 00 .faraddr %000000001010000000001100 +004962r 1 0D A0 00 .faraddr %000000001010000000001101 +004965r 1 0E A0 00 .faraddr %000000001010000000001110 +004968r 1 0F A0 00 .faraddr %000000001010000000001111 +00496Br 1 E1 AF 00 .faraddr %000000001010111111100001 +00496Er 1 E2 AF 00 .faraddr %000000001010111111100010 +004971r 1 E3 AF 00 .faraddr %000000001010111111100011 +004974r 1 E4 AF 00 .faraddr %000000001010111111100100 +004977r 1 E5 AF 00 .faraddr %000000001010111111100101 +00497Ar 1 E6 AF 00 .faraddr %000000001010111111100110 +00497Dr 1 E7 AF 00 .faraddr %000000001010111111100111 +004980r 1 E8 AF 00 .faraddr %000000001010111111101000 +004983r 1 E9 AF 00 .faraddr %000000001010111111101001 +004986r 1 EA AF 00 .faraddr %000000001010111111101010 +004989r 1 EB AF 00 .faraddr %000000001010111111101011 +00498Cr 1 EC AF 00 .faraddr %000000001010111111101100 +00498Fr 1 ED AF 00 .faraddr %000000001010111111101101 +004992r 1 EE AF 00 .faraddr %000000001010111111101110 +004995r 1 EF AF 00 .faraddr %000000001010111111101111 +004998r 1 F0 AF 00 .faraddr %000000001010111111110000 +00499Br 1 F1 AF 00 .faraddr %000000001010111111110001 +00499Er 1 F2 AF 00 .faraddr %000000001010111111110010 +0049A1r 1 F3 AF 00 .faraddr %000000001010111111110011 +0049A4r 1 F4 AF 00 .faraddr %000000001010111111110100 +0049A7r 1 F5 AF 00 .faraddr %000000001010111111110101 +0049AAr 1 F6 AF 00 .faraddr %000000001010111111110110 +0049ADr 1 F7 AF 00 .faraddr %000000001010111111110111 +0049B0r 1 F8 AF 00 .faraddr %000000001010111111111000 +0049B3r 1 F9 AF 00 .faraddr %000000001010111111111001 +0049B6r 1 FA AF 00 .faraddr %000000001010111111111010 +0049B9r 1 FB AF 00 .faraddr %000000001010111111111011 +0049BCr 1 FC AF 00 .faraddr %000000001010111111111100 +0049BFr 1 FD AF 00 .faraddr %000000001010111111111101 +0049C2r 1 FE AF 00 .faraddr %000000001010111111111110 +0049C5r 1 FF AF 00 .faraddr %000000001010111111111111 +0049C8r 1 00 B0 00 .faraddr %000000001011000000000000 +0049CBr 1 01 B0 00 .faraddr %000000001011000000000001 +0049CEr 1 02 B0 00 .faraddr %000000001011000000000010 +0049D1r 1 03 B0 00 .faraddr %000000001011000000000011 +0049D4r 1 04 B0 00 .faraddr %000000001011000000000100 +0049D7r 1 05 B0 00 .faraddr %000000001011000000000101 +0049DAr 1 06 B0 00 .faraddr %000000001011000000000110 +0049DDr 1 07 B0 00 .faraddr %000000001011000000000111 +0049E0r 1 08 B0 00 .faraddr %000000001011000000001000 +0049E3r 1 09 B0 00 .faraddr %000000001011000000001001 +0049E6r 1 0A B0 00 .faraddr %000000001011000000001010 +0049E9r 1 0B B0 00 .faraddr %000000001011000000001011 +0049ECr 1 0C B0 00 .faraddr %000000001011000000001100 +0049EFr 1 0D B0 00 .faraddr %000000001011000000001101 +0049F2r 1 0E B0 00 .faraddr %000000001011000000001110 +0049F5r 1 0F B0 00 .faraddr %000000001011000000001111 +0049F8r 1 E1 FF 00 .faraddr %000000001111111111100001 +0049FBr 1 E2 FF 00 .faraddr %000000001111111111100010 +0049FEr 1 E3 FF 00 .faraddr %000000001111111111100011 +004A01r 1 E4 FF 00 .faraddr %000000001111111111100100 +004A04r 1 E5 FF 00 .faraddr %000000001111111111100101 +004A07r 1 E6 FF 00 .faraddr %000000001111111111100110 +004A0Ar 1 E7 FF 00 .faraddr %000000001111111111100111 +004A0Dr 1 E8 FF 00 .faraddr %000000001111111111101000 +004A10r 1 E9 FF 00 .faraddr %000000001111111111101001 +004A13r 1 EA FF 00 .faraddr %000000001111111111101010 +004A16r 1 EB FF 00 .faraddr %000000001111111111101011 +004A19r 1 EC FF 00 .faraddr %000000001111111111101100 +004A1Cr 1 ED FF 00 .faraddr %000000001111111111101101 +004A1Fr 1 EE FF 00 .faraddr %000000001111111111101110 +004A22r 1 EF FF 00 .faraddr %000000001111111111101111 +004A25r 1 F0 FF 00 .faraddr %000000001111111111110000 +004A28r 1 F1 FF 00 .faraddr %000000001111111111110001 +004A2Br 1 F2 FF 00 .faraddr %000000001111111111110010 +004A2Er 1 F3 FF 00 .faraddr %000000001111111111110011 +004A31r 1 F4 FF 00 .faraddr %000000001111111111110100 +004A34r 1 F5 FF 00 .faraddr %000000001111111111110101 +004A37r 1 F6 FF 00 .faraddr %000000001111111111110110 +004A3Ar 1 F7 FF 00 .faraddr %000000001111111111110111 +004A3Dr 1 F8 FF 00 .faraddr %000000001111111111111000 +004A40r 1 F9 FF 00 .faraddr %000000001111111111111001 +004A43r 1 FA FF 00 .faraddr %000000001111111111111010 +004A46r 1 FB FF 00 .faraddr %000000001111111111111011 +004A49r 1 FC FF 00 .faraddr %000000001111111111111100 +004A4Cr 1 FD FF 00 .faraddr %000000001111111111111101 +004A4Fr 1 FE FF 00 .faraddr %000000001111111111111110 +004A52r 1 FF FF 00 .faraddr %000000001111111111111111 +004A55r 1 00 00 01 .faraddr %000000010000000000000000 +004A58r 1 01 00 01 .faraddr %000000010000000000000001 +004A5Br 1 02 00 01 .faraddr %000000010000000000000010 +004A5Er 1 03 00 01 .faraddr %000000010000000000000011 +004A61r 1 04 00 01 .faraddr %000000010000000000000100 +004A64r 1 05 00 01 .faraddr %000000010000000000000101 +004A67r 1 06 00 01 .faraddr %000000010000000000000110 +004A6Ar 1 07 00 01 .faraddr %000000010000000000000111 +004A6Dr 1 08 00 01 .faraddr %000000010000000000001000 +004A70r 1 09 00 01 .faraddr %000000010000000000001001 +004A73r 1 0A 00 01 .faraddr %000000010000000000001010 +004A76r 1 0B 00 01 .faraddr %000000010000000000001011 +004A79r 1 0C 00 01 .faraddr %000000010000000000001100 +004A7Cr 1 0D 00 01 .faraddr %000000010000000000001101 +004A7Fr 1 0E 00 01 .faraddr %000000010000000000001110 +004A82r 1 0F 00 01 .faraddr %000000010000000000001111 +004A85r 1 E1 FF 10 .faraddr %000100001111111111100001 +004A88r 1 E2 FF 10 .faraddr %000100001111111111100010 +004A8Br 1 E3 FF 10 .faraddr %000100001111111111100011 +004A8Er 1 E4 FF 10 .faraddr %000100001111111111100100 +004A91r 1 E5 FF 10 .faraddr %000100001111111111100101 +004A94r 1 E6 FF 10 .faraddr %000100001111111111100110 +004A97r 1 E7 FF 10 .faraddr %000100001111111111100111 +004A9Ar 1 E8 FF 10 .faraddr %000100001111111111101000 +004A9Dr 1 E9 FF 10 .faraddr %000100001111111111101001 +004AA0r 1 EA FF 10 .faraddr %000100001111111111101010 +004AA3r 1 EB FF 10 .faraddr %000100001111111111101011 +004AA6r 1 EC FF 10 .faraddr %000100001111111111101100 +004AA9r 1 ED FF 10 .faraddr %000100001111111111101101 +004AACr 1 EE FF 10 .faraddr %000100001111111111101110 +004AAFr 1 EF FF 10 .faraddr %000100001111111111101111 +004AB2r 1 F0 FF 10 .faraddr %000100001111111111110000 +004AB5r 1 F1 FF 10 .faraddr %000100001111111111110001 +004AB8r 1 F2 FF 10 .faraddr %000100001111111111110010 +004ABBr 1 F3 FF 10 .faraddr %000100001111111111110011 +004ABEr 1 F4 FF 10 .faraddr %000100001111111111110100 +004AC1r 1 F5 FF 10 .faraddr %000100001111111111110101 +004AC4r 1 F6 FF 10 .faraddr %000100001111111111110110 +004AC7r 1 F7 FF 10 .faraddr %000100001111111111110111 +004ACAr 1 F8 FF 10 .faraddr %000100001111111111111000 +004ACDr 1 F9 FF 10 .faraddr %000100001111111111111001 +004AD0r 1 FA FF 10 .faraddr %000100001111111111111010 +004AD3r 1 FB FF 10 .faraddr %000100001111111111111011 +004AD6r 1 FC FF 10 .faraddr %000100001111111111111100 +004AD9r 1 FD FF 10 .faraddr %000100001111111111111101 +004ADCr 1 FE FF 10 .faraddr %000100001111111111111110 +004ADFr 1 FF FF 10 .faraddr %000100001111111111111111 +004AE2r 1 00 00 11 .faraddr %000100010000000000000000 +004AE5r 1 01 00 11 .faraddr %000100010000000000000001 +004AE8r 1 02 00 11 .faraddr %000100010000000000000010 +004AEBr 1 03 00 11 .faraddr %000100010000000000000011 +004AEEr 1 04 00 11 .faraddr %000100010000000000000100 +004AF1r 1 05 00 11 .faraddr %000100010000000000000101 +004AF4r 1 06 00 11 .faraddr %000100010000000000000110 +004AF7r 1 07 00 11 .faraddr %000100010000000000000111 +004AFAr 1 08 00 11 .faraddr %000100010000000000001000 +004AFDr 1 09 00 11 .faraddr %000100010000000000001001 +004B00r 1 0A 00 11 .faraddr %000100010000000000001010 +004B03r 1 0B 00 11 .faraddr %000100010000000000001011 +004B06r 1 0C 00 11 .faraddr %000100010000000000001100 +004B09r 1 0D 00 11 .faraddr %000100010000000000001101 +004B0Cr 1 0E 00 11 .faraddr %000100010000000000001110 +004B0Fr 1 0F 00 11 .faraddr %000100010000000000001111 +004B12r 1 E1 FF 20 .faraddr %001000001111111111100001 +004B15r 1 E2 FF 20 .faraddr %001000001111111111100010 +004B18r 1 E3 FF 20 .faraddr %001000001111111111100011 +004B1Br 1 E4 FF 20 .faraddr %001000001111111111100100 +004B1Er 1 E5 FF 20 .faraddr %001000001111111111100101 +004B21r 1 E6 FF 20 .faraddr %001000001111111111100110 +004B24r 1 E7 FF 20 .faraddr %001000001111111111100111 +004B27r 1 E8 FF 20 .faraddr %001000001111111111101000 +004B2Ar 1 E9 FF 20 .faraddr %001000001111111111101001 +004B2Dr 1 EA FF 20 .faraddr %001000001111111111101010 +004B30r 1 EB FF 20 .faraddr %001000001111111111101011 +004B33r 1 EC FF 20 .faraddr %001000001111111111101100 +004B36r 1 ED FF 20 .faraddr %001000001111111111101101 +004B39r 1 EE FF 20 .faraddr %001000001111111111101110 +004B3Cr 1 EF FF 20 .faraddr %001000001111111111101111 +004B3Fr 1 F0 FF 20 .faraddr %001000001111111111110000 +004B42r 1 F1 FF 20 .faraddr %001000001111111111110001 +004B45r 1 F2 FF 20 .faraddr %001000001111111111110010 +004B48r 1 F3 FF 20 .faraddr %001000001111111111110011 +004B4Br 1 F4 FF 20 .faraddr %001000001111111111110100 +004B4Er 1 F5 FF 20 .faraddr %001000001111111111110101 +004B51r 1 F6 FF 20 .faraddr %001000001111111111110110 +004B54r 1 F7 FF 20 .faraddr %001000001111111111110111 +004B57r 1 F8 FF 20 .faraddr %001000001111111111111000 +004B5Ar 1 F9 FF 20 .faraddr %001000001111111111111001 +004B5Dr 1 FA FF 20 .faraddr %001000001111111111111010 +004B60r 1 FB FF 20 .faraddr %001000001111111111111011 +004B63r 1 FC FF 20 .faraddr %001000001111111111111100 +004B66r 1 FD FF 20 .faraddr %001000001111111111111101 +004B69r 1 FE FF 20 .faraddr %001000001111111111111110 +004B6Cr 1 FF FF 20 .faraddr %001000001111111111111111 +004B6Fr 1 00 00 21 .faraddr %001000010000000000000000 +004B72r 1 01 00 21 .faraddr %001000010000000000000001 +004B75r 1 02 00 21 .faraddr %001000010000000000000010 +004B78r 1 03 00 21 .faraddr %001000010000000000000011 +004B7Br 1 04 00 21 .faraddr %001000010000000000000100 +004B7Er 1 05 00 21 .faraddr %001000010000000000000101 +004B81r 1 06 00 21 .faraddr %001000010000000000000110 +004B84r 1 07 00 21 .faraddr %001000010000000000000111 +004B87r 1 08 00 21 .faraddr %001000010000000000001000 +004B8Ar 1 09 00 21 .faraddr %001000010000000000001001 +004B8Dr 1 0A 00 21 .faraddr %001000010000000000001010 +004B90r 1 0B 00 21 .faraddr %001000010000000000001011 +004B93r 1 0C 00 21 .faraddr %001000010000000000001100 +004B96r 1 0D 00 21 .faraddr %001000010000000000001101 +004B99r 1 0E 00 21 .faraddr %001000010000000000001110 +004B9Cr 1 0F 00 21 .faraddr %001000010000000000001111 +004B9Fr 1 E1 FF 7F .faraddr %011111111111111111100001 +004BA2r 1 E2 FF 7F .faraddr %011111111111111111100010 +004BA5r 1 E3 FF 7F .faraddr %011111111111111111100011 +004BA8r 1 E4 FF 7F .faraddr %011111111111111111100100 +004BABr 1 E5 FF 7F .faraddr %011111111111111111100101 +004BAEr 1 E6 FF 7F .faraddr %011111111111111111100110 +004BB1r 1 E7 FF 7F .faraddr %011111111111111111100111 +004BB4r 1 E8 FF 7F .faraddr %011111111111111111101000 +004BB7r 1 E9 FF 7F .faraddr %011111111111111111101001 +004BBAr 1 EA FF 7F .faraddr %011111111111111111101010 +004BBDr 1 EB FF 7F .faraddr %011111111111111111101011 +004BC0r 1 EC FF 7F .faraddr %011111111111111111101100 +004BC3r 1 ED FF 7F .faraddr %011111111111111111101101 +004BC6r 1 EE FF 7F .faraddr %011111111111111111101110 +004BC9r 1 EF FF 7F .faraddr %011111111111111111101111 +004BCCr 1 F0 FF 7F .faraddr %011111111111111111110000 +004BCFr 1 F1 FF 7F .faraddr %011111111111111111110001 +004BD2r 1 F2 FF 7F .faraddr %011111111111111111110010 +004BD5r 1 F3 FF 7F .faraddr %011111111111111111110011 +004BD8r 1 F4 FF 7F .faraddr %011111111111111111110100 +004BDBr 1 F5 FF 7F .faraddr %011111111111111111110101 +004BDEr 1 F6 FF 7F .faraddr %011111111111111111110110 +004BE1r 1 F7 FF 7F .faraddr %011111111111111111110111 +004BE4r 1 F8 FF 7F .faraddr %011111111111111111111000 +004BE7r 1 F9 FF 7F .faraddr %011111111111111111111001 +004BEAr 1 FA FF 7F .faraddr %011111111111111111111010 +004BEDr 1 FB FF 7F .faraddr %011111111111111111111011 +004BF0r 1 FC FF 7F .faraddr %011111111111111111111100 +004BF3r 1 FD FF 7F .faraddr %011111111111111111111101 +004BF6r 1 FE FF 7F .faraddr %011111111111111111111110 +004BF9r 1 FF FF 7F .faraddr %011111111111111111111111 +004BFCr 1 00 00 80 .faraddr %100000000000000000000000 +004BFFr 1 01 00 80 .faraddr %100000000000000000000001 +004C02r 1 02 00 80 .faraddr %100000000000000000000010 +004C05r 1 03 00 80 .faraddr %100000000000000000000011 +004C08r 1 04 00 80 .faraddr %100000000000000000000100 +004C0Br 1 05 00 80 .faraddr %100000000000000000000101 +004C0Er 1 06 00 80 .faraddr %100000000000000000000110 +004C11r 1 07 00 80 .faraddr %100000000000000000000111 +004C14r 1 08 00 80 .faraddr %100000000000000000001000 +004C17r 1 09 00 80 .faraddr %100000000000000000001001 +004C1Ar 1 0A 00 80 .faraddr %100000000000000000001010 +004C1Dr 1 0B 00 80 .faraddr %100000000000000000001011 +004C20r 1 0C 00 80 .faraddr %100000000000000000001100 +004C23r 1 0D 00 80 .faraddr %100000000000000000001101 +004C26r 1 0E 00 80 .faraddr %100000000000000000001110 +004C29r 1 0F 00 80 .faraddr %100000000000000000001111 +004C2Cr 1 E1 FF 9F .faraddr %100111111111111111100001 +004C2Fr 1 E2 FF 9F .faraddr %100111111111111111100010 +004C32r 1 E3 FF 9F .faraddr %100111111111111111100011 +004C35r 1 E4 FF 9F .faraddr %100111111111111111100100 +004C38r 1 E5 FF 9F .faraddr %100111111111111111100101 +004C3Br 1 E6 FF 9F .faraddr %100111111111111111100110 +004C3Er 1 E7 FF 9F .faraddr %100111111111111111100111 +004C41r 1 E8 FF 9F .faraddr %100111111111111111101000 +004C44r 1 E9 FF 9F .faraddr %100111111111111111101001 +004C47r 1 EA FF 9F .faraddr %100111111111111111101010 +004C4Ar 1 EB FF 9F .faraddr %100111111111111111101011 +004C4Dr 1 EC FF 9F .faraddr %100111111111111111101100 +004C50r 1 ED FF 9F .faraddr %100111111111111111101101 +004C53r 1 EE FF 9F .faraddr %100111111111111111101110 +004C56r 1 EF FF 9F .faraddr %100111111111111111101111 +004C59r 1 F0 FF 9F .faraddr %100111111111111111110000 +004C5Cr 1 F1 FF 9F .faraddr %100111111111111111110001 +004C5Fr 1 F2 FF 9F .faraddr %100111111111111111110010 +004C62r 1 F3 FF 9F .faraddr %100111111111111111110011 +004C65r 1 F4 FF 9F .faraddr %100111111111111111110100 +004C68r 1 F5 FF 9F .faraddr %100111111111111111110101 +004C6Br 1 F6 FF 9F .faraddr %100111111111111111110110 +004C6Er 1 F7 FF 9F .faraddr %100111111111111111110111 +004C71r 1 F8 FF 9F .faraddr %100111111111111111111000 +004C74r 1 F9 FF 9F .faraddr %100111111111111111111001 +004C77r 1 FA FF 9F .faraddr %100111111111111111111010 +004C7Ar 1 FB FF 9F .faraddr %100111111111111111111011 +004C7Dr 1 FC FF 9F .faraddr %100111111111111111111100 +004C80r 1 FD FF 9F .faraddr %100111111111111111111101 +004C83r 1 FE FF 9F .faraddr %100111111111111111111110 +004C86r 1 FF FF 9F .faraddr %100111111111111111111111 +004C89r 1 00 00 A0 .faraddr %101000000000000000000000 +004C8Cr 1 01 00 A0 .faraddr %101000000000000000000001 +004C8Fr 1 02 00 A0 .faraddr %101000000000000000000010 +004C92r 1 03 00 A0 .faraddr %101000000000000000000011 +004C95r 1 04 00 A0 .faraddr %101000000000000000000100 +004C98r 1 05 00 A0 .faraddr %101000000000000000000101 +004C9Br 1 06 00 A0 .faraddr %101000000000000000000110 +004C9Er 1 07 00 A0 .faraddr %101000000000000000000111 +004CA1r 1 08 00 A0 .faraddr %101000000000000000001000 +004CA4r 1 09 00 A0 .faraddr %101000000000000000001001 +004CA7r 1 0A 00 A0 .faraddr %101000000000000000001010 +004CAAr 1 0B 00 A0 .faraddr %101000000000000000001011 +004CADr 1 0C 00 A0 .faraddr %101000000000000000001100 +004CB0r 1 0D 00 A0 .faraddr %101000000000000000001101 +004CB3r 1 0E 00 A0 .faraddr %101000000000000000001110 +004CB6r 1 0F 00 A0 .faraddr %101000000000000000001111 +004CB9r 1 E1 FF FF .faraddr %111111111111111111100001 +004CBCr 1 E2 FF FF .faraddr %111111111111111111100010 +004CBFr 1 E3 FF FF .faraddr %111111111111111111100011 +004CC2r 1 E4 FF FF .faraddr %111111111111111111100100 +004CC5r 1 E5 FF FF .faraddr %111111111111111111100101 +004CC8r 1 E6 FF FF .faraddr %111111111111111111100110 +004CCBr 1 E7 FF FF .faraddr %111111111111111111100111 +004CCEr 1 E8 FF FF .faraddr %111111111111111111101000 +004CD1r 1 E9 FF FF .faraddr %111111111111111111101001 +004CD4r 1 EA FF FF .faraddr %111111111111111111101010 +004CD7r 1 EB FF FF .faraddr %111111111111111111101011 +004CDAr 1 EC FF FF .faraddr %111111111111111111101100 +004CDDr 1 ED FF FF .faraddr %111111111111111111101101 +004CE0r 1 EE FF FF .faraddr %111111111111111111101110 +004CE3r 1 EF FF FF .faraddr %111111111111111111101111 +004CE6r 1 F0 FF FF .faraddr %111111111111111111110000 +004CE9r 1 F1 FF FF .faraddr %111111111111111111110001 +004CECr 1 F2 FF FF .faraddr %111111111111111111110010 +004CEFr 1 F3 FF FF .faraddr %111111111111111111110011 +004CF2r 1 F4 FF FF .faraddr %111111111111111111110100 +004CF5r 1 F5 FF FF .faraddr %111111111111111111110101 +004CF8r 1 F6 FF FF .faraddr %111111111111111111110110 +004CFBr 1 F7 FF FF .faraddr %111111111111111111110111 +004CFEr 1 F8 FF FF .faraddr %111111111111111111111000 +004D01r 1 F9 FF FF .faraddr %111111111111111111111001 +004D04r 1 FA FF FF .faraddr %111111111111111111111010 +004D07r 1 FB FF FF .faraddr %111111111111111111111011 +004D0Ar 1 FC FF FF .faraddr %111111111111111111111100 +004D0Dr 1 FD FF FF .faraddr %111111111111111111111101 +004D10r 1 FE FF FF .faraddr %111111111111111111111110 +004D13r 1 FF FF FF .faraddr %111111111111111111111111 +004D16r 1 +004D16r 1 ; multiple values on one line, decimal +004D16r 1 00 00 00 01 .faraddr 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +004D1Ar 1 00 00 02 00 +004D1Er 1 00 03 00 00 +004D46r 1 10 00 00 11 .faraddr 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +004D4Ar 1 00 00 12 00 +004D4Er 1 00 13 00 00 +004D76r 1 70 00 00 71 .faraddr 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +004D7Ar 1 00 00 72 00 +004D7Er 1 00 73 00 00 +004DA6r 1 80 00 00 81 .faraddr 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +004DAAr 1 00 00 82 00 +004DAEr 1 00 83 00 00 +004DD6r 1 F0 00 00 F1 .faraddr 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +004DDAr 1 00 00 F2 00 +004DDEr 1 00 F3 00 00 +004E06r 1 00 01 00 01 .faraddr 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 +004E0Ar 1 01 00 02 01 +004E0Er 1 00 03 01 00 +004E36r 1 E0 0F 00 E1 .faraddr 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 +004E3Ar 1 0F 00 E2 0F +004E3Er 1 00 E3 0F 00 +004E66r 1 F0 0F 00 F1 .faraddr 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 +004E6Ar 1 0F 00 F2 0F +004E6Er 1 00 F3 0F 00 +004E96r 1 00 10 00 01 .faraddr 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 +004E9Ar 1 10 00 02 10 +004E9Er 1 00 03 10 00 +004EC6r 1 F0 7F 00 F1 .faraddr 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 +004ECAr 1 7F 00 F2 7F +004ECEr 1 00 F3 7F 00 +004EF6r 1 00 80 00 01 .faraddr 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 +004EFAr 1 80 00 02 80 +004EFEr 1 00 03 80 00 +004F26r 1 EF 9F 00 F0 .faraddr 40943,40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958 +004F2Ar 1 9F 00 F1 9F +004F2Er 1 00 F2 9F 00 +004F56r 1 FF 9F 00 00 .faraddr 40959,40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974 +004F5Ar 1 A0 00 01 A0 +004F5Er 1 00 02 A0 00 +004F86r 1 0F A0 00 10 .faraddr 40975,40976,40977,40978,40979,40980,40981,40982,40983,40984,40985,40986,40987,40988,40989,40990 +004F8Ar 1 A0 00 11 A0 +004F8Er 1 00 12 A0 00 +004FB6r 1 EF AF 00 F0 .faraddr 45039,45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054 +004FBAr 1 AF 00 F1 AF +004FBEr 1 00 F2 AF 00 +004FE6r 1 FF AF 00 00 .faraddr 45055,45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070 +004FEAr 1 B0 00 01 B0 +004FEEr 1 00 02 B0 00 +005016r 1 0F B0 00 10 .faraddr 45071,45072,45073,45074,45075,45076,45077,45078,45079,45080,45081,45082,45083,45084,45085,45086 +00501Ar 1 B0 00 11 B0 +00501Er 1 00 12 B0 00 +005046r 1 EF FF 00 F0 .faraddr 65519,65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534 +00504Ar 1 FF 00 F1 FF +00504Er 1 00 F2 FF 00 +005076r 1 FF FF 00 00 .faraddr 65535,65536,65537,65538,65539,65540,65541,65542,65543,65544,65545,65546,65547,65548,65549,65550 +00507Ar 1 00 01 01 00 +00507Er 1 01 02 00 01 +0050A6r 1 0F 00 01 10 .faraddr 65551,65552,65553,65554,65555,65556,65557,65558,65559,65560,65561,65562,65563,65564,65565,65566 +0050AAr 1 00 01 11 00 +0050AEr 1 01 12 00 01 +0050D6r 1 EF FF 10 F0 .faraddr 1114095,1114096,1114097,1114098,1114099,1114100,1114101,1114102,1114103,1114104,1114105,1114106,1114107,1114108,1114109,1114110 +0050DAr 1 FF 10 F1 FF +0050DEr 1 10 F2 FF 10 +005106r 1 FF FF 10 00 .faraddr 1114111,1114112,1114113,1114114,1114115,1114116,1114117,1114118,1114119,1114120,1114121,1114122,1114123,1114124,1114125,1114126 +00510Ar 1 00 11 01 00 +00510Er 1 11 02 00 11 +005136r 1 0F 00 11 10 .faraddr 1114127,1114128,1114129,1114130,1114131,1114132,1114133,1114134,1114135,1114136,1114137,1114138,1114139,1114140,1114141,1114142 +00513Ar 1 00 11 11 00 +00513Er 1 11 12 00 11 +005166r 1 EF FF 20 F0 .faraddr 2162671,2162672,2162673,2162674,2162675,2162676,2162677,2162678,2162679,2162680,2162681,2162682,2162683,2162684,2162685,2162686 +00516Ar 1 FF 20 F1 FF +00516Er 1 20 F2 FF 20 +005196r 1 FF FF 20 00 .faraddr 2162687,2162688,2162689,2162690,2162691,2162692,2162693,2162694,2162695,2162696,2162697,2162698,2162699,2162700,2162701,2162702 +00519Ar 1 00 21 01 00 +00519Er 1 21 02 00 21 +0051C6r 1 0F 00 21 10 .faraddr 2162703,2162704,2162705,2162706,2162707,2162708,2162709,2162710,2162711,2162712,2162713,2162714,2162715,2162716,2162717,2162718 +0051CAr 1 00 21 11 00 +0051CEr 1 21 12 00 21 +0051F6r 1 EF FF 7F F0 .faraddr 8388591,8388592,8388593,8388594,8388595,8388596,8388597,8388598,8388599,8388600,8388601,8388602,8388603,8388604,8388605,8388606 +0051FAr 1 FF 7F F1 FF +0051FEr 1 7F F2 FF 7F +005226r 1 FF FF 7F 00 .faraddr 8388607,8388608,8388609,8388610,8388611,8388612,8388613,8388614,8388615,8388616,8388617,8388618,8388619,8388620,8388621,8388622 +00522Ar 1 00 80 01 00 +00522Er 1 80 02 00 80 +005256r 1 0F 00 80 10 .faraddr 8388623,8388624,8388625,8388626,8388627,8388628,8388629,8388630,8388631,8388632,8388633,8388634,8388635,8388636,8388637,8388638 +00525Ar 1 00 80 11 00 +00525Er 1 80 12 00 80 +005286r 1 EF FF 9F F0 .faraddr 10485743,10485744,10485745,10485746,10485747,10485748,10485749,10485750,10485751,10485752,10485753,10485754,10485755,10485756,10485757,10485758 +00528Ar 1 FF 9F F1 FF +00528Er 1 9F F2 FF 9F +0052B6r 1 FF FF 9F 00 .faraddr 10485759,10485760,10485761,10485762,10485763,10485764,10485765,10485766,10485767,10485768,10485769,10485770,10485771,10485772,10485773,10485774 +0052BAr 1 00 A0 01 00 +0052BEr 1 A0 02 00 A0 +0052E6r 1 0F 00 A0 10 .faraddr 10485775,10485776,10485777,10485778,10485779,10485780,10485781,10485782,10485783,10485784,10485785,10485786,10485787,10485788,10485789,10485790 +0052EAr 1 00 A0 11 00 +0052EEr 1 A0 12 00 A0 +005316r 1 EF FF FF F0 .faraddr 16777199,16777200,16777201,16777202,16777203,16777204,16777205,16777206,16777207,16777208,16777209,16777210,16777211,16777212,16777213,16777214 +00531Ar 1 FF FF F1 FF +00531Er 1 FF F2 FF FF +005346r 1 FF FF FF .faraddr 16777215 +005349r 1 +005349r 1 ; multiple values on one line, hex +005349r 1 00 00 00 01 .faraddr $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +00534Dr 1 00 00 02 00 +005351r 1 00 03 00 00 +005379r 1 10 00 00 11 .faraddr $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +00537Dr 1 00 00 12 00 +005381r 1 00 13 00 00 +0053A9r 1 70 00 00 71 .faraddr $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +0053ADr 1 00 00 72 00 +0053B1r 1 00 73 00 00 +0053D9r 1 80 00 00 81 .faraddr $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +0053DDr 1 00 00 82 00 +0053E1r 1 00 83 00 00 +005409r 1 F0 00 00 F1 .faraddr $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +00540Dr 1 00 00 F2 00 +005411r 1 00 F3 00 00 +005439r 1 00 01 00 01 .faraddr $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f +00543Dr 1 01 00 02 01 +005441r 1 00 03 01 00 +005469r 1 E0 0F 00 E1 .faraddr $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef +00546Dr 1 0F 00 E2 0F +005471r 1 00 E3 0F 00 +005499r 1 F0 0F 00 F1 .faraddr $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff +00549Dr 1 0F 00 F2 0F +0054A1r 1 00 F3 0F 00 +0054C9r 1 00 10 00 01 .faraddr $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f +0054CDr 1 10 00 02 10 +0054D1r 1 00 03 10 00 +0054F9r 1 F0 7F 00 F1 .faraddr $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff +0054FDr 1 7F 00 F2 7F +005501r 1 00 F3 7F 00 +005529r 1 00 80 00 01 .faraddr $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f +00552Dr 1 80 00 02 80 +005531r 1 00 03 80 00 +005559r 1 EF 9F 00 F0 .faraddr $9fef,$9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe +00555Dr 1 9F 00 F1 9F +005561r 1 00 F2 9F 00 +005589r 1 FF 9F 00 00 .faraddr $9fff,$a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e +00558Dr 1 A0 00 01 A0 +005591r 1 00 02 A0 00 +0055B9r 1 0F A0 00 10 .faraddr $a00f,$a010,$a011,$a012,$a013,$a014,$a015,$a016,$a017,$a018,$a019,$a01a,$a01b,$a01c,$a01d,$a01e +0055BDr 1 A0 00 11 A0 +0055C1r 1 00 12 A0 00 +0055E9r 1 EF AF 00 F0 .faraddr $afef,$aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe +0055EDr 1 AF 00 F1 AF +0055F1r 1 00 F2 AF 00 +005619r 1 FF AF 00 00 .faraddr $afff,$b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e +00561Dr 1 B0 00 01 B0 +005621r 1 00 02 B0 00 +005649r 1 0F B0 00 10 .faraddr $b00f,$b010,$b011,$b012,$b013,$b014,$b015,$b016,$b017,$b018,$b019,$b01a,$b01b,$b01c,$b01d,$b01e +00564Dr 1 B0 00 11 B0 +005651r 1 00 12 B0 00 +005679r 1 EF FF 00 F0 .faraddr $ffef,$fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe +00567Dr 1 FF 00 F1 FF +005681r 1 00 F2 FF 00 +0056A9r 1 FF FF 00 00 .faraddr $ffff,$10000,$10001,$10002,$10003,$10004,$10005,$10006,$10007,$10008,$10009,$1000a,$1000b,$1000c,$1000d,$1000e +0056ADr 1 00 01 01 00 +0056B1r 1 01 02 00 01 +0056D9r 1 0F 00 01 10 .faraddr $1000f,$10010,$10011,$10012,$10013,$10014,$10015,$10016,$10017,$10018,$10019,$1001a,$1001b,$1001c,$1001d,$1001e +0056DDr 1 00 01 11 00 +0056E1r 1 01 12 00 01 +005709r 1 EF FF 10 F0 .faraddr $10ffef,$10fff0,$10fff1,$10fff2,$10fff3,$10fff4,$10fff5,$10fff6,$10fff7,$10fff8,$10fff9,$10fffa,$10fffb,$10fffc,$10fffd,$10fffe +00570Dr 1 FF 10 F1 FF +005711r 1 10 F2 FF 10 +005739r 1 FF FF 10 00 .faraddr $10ffff,$110000,$110001,$110002,$110003,$110004,$110005,$110006,$110007,$110008,$110009,$11000a,$11000b,$11000c,$11000d,$11000e +00573Dr 1 00 11 01 00 +005741r 1 11 02 00 11 +005769r 1 0F 00 11 10 .faraddr $11000f,$110010,$110011,$110012,$110013,$110014,$110015,$110016,$110017,$110018,$110019,$11001a,$11001b,$11001c,$11001d,$11001e +00576Dr 1 00 11 11 00 +005771r 1 11 12 00 11 +005799r 1 EF FF 20 F0 .faraddr $20ffef,$20fff0,$20fff1,$20fff2,$20fff3,$20fff4,$20fff5,$20fff6,$20fff7,$20fff8,$20fff9,$20fffa,$20fffb,$20fffc,$20fffd,$20fffe +00579Dr 1 FF 20 F1 FF +0057A1r 1 20 F2 FF 20 +0057C9r 1 FF FF 20 00 .faraddr $20ffff,$210000,$210001,$210002,$210003,$210004,$210005,$210006,$210007,$210008,$210009,$21000a,$21000b,$21000c,$21000d,$21000e +0057CDr 1 00 21 01 00 +0057D1r 1 21 02 00 21 +0057F9r 1 0F 00 21 10 .faraddr $21000f,$210010,$210011,$210012,$210013,$210014,$210015,$210016,$210017,$210018,$210019,$21001a,$21001b,$21001c,$21001d,$21001e +0057FDr 1 00 21 11 00 +005801r 1 21 12 00 21 +005829r 1 EF FF 7F F0 .faraddr $7fffef,$7ffff0,$7ffff1,$7ffff2,$7ffff3,$7ffff4,$7ffff5,$7ffff6,$7ffff7,$7ffff8,$7ffff9,$7ffffa,$7ffffb,$7ffffc,$7ffffd,$7ffffe +00582Dr 1 FF 7F F1 FF +005831r 1 7F F2 FF 7F +005859r 1 FF FF 7F 00 .faraddr $7fffff,$800000,$800001,$800002,$800003,$800004,$800005,$800006,$800007,$800008,$800009,$80000a,$80000b,$80000c,$80000d,$80000e +00585Dr 1 00 80 01 00 +005861r 1 80 02 00 80 +005889r 1 0F 00 80 10 .faraddr $80000f,$800010,$800011,$800012,$800013,$800014,$800015,$800016,$800017,$800018,$800019,$80001a,$80001b,$80001c,$80001d,$80001e +00588Dr 1 00 80 11 00 +005891r 1 80 12 00 80 +0058B9r 1 EF FF 9F F0 .faraddr $9fffef,$9ffff0,$9ffff1,$9ffff2,$9ffff3,$9ffff4,$9ffff5,$9ffff6,$9ffff7,$9ffff8,$9ffff9,$9ffffa,$9ffffb,$9ffffc,$9ffffd,$9ffffe +0058BDr 1 FF 9F F1 FF +0058C1r 1 9F F2 FF 9F +0058E9r 1 FF FF 9F 00 .faraddr $9fffff,$a00000,$a00001,$a00002,$a00003,$a00004,$a00005,$a00006,$a00007,$a00008,$a00009,$a0000a,$a0000b,$a0000c,$a0000d,$a0000e +0058EDr 1 00 A0 01 00 +0058F1r 1 A0 02 00 A0 +005919r 1 0F 00 A0 10 .faraddr $a0000f,$a00010,$a00011,$a00012,$a00013,$a00014,$a00015,$a00016,$a00017,$a00018,$a00019,$a0001a,$a0001b,$a0001c,$a0001d,$a0001e +00591Dr 1 00 A0 11 00 +005921r 1 A0 12 00 A0 +005949r 1 EF FF FF F0 .faraddr $ffffef,$fffff0,$fffff1,$fffff2,$fffff3,$fffff4,$fffff5,$fffff6,$fffff7,$fffff8,$fffff9,$fffffa,$fffffb,$fffffc,$fffffd,$fffffe +00594Dr 1 FF FF F1 FF +005951r 1 FF F2 FF FF +005979r 1 FF FF FF .faraddr $ffffff +00597Cr 1 +00597Cr 1 ; multiple values on one line, alternative hex +00597Cr 1 00 00 00 01 .faraddr 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +005980r 1 00 00 02 00 +005984r 1 00 03 00 00 +0059ACr 1 10 00 00 11 .faraddr 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +0059B0r 1 00 00 12 00 +0059B4r 1 00 13 00 00 +0059DCr 1 70 00 00 71 .faraddr 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +0059E0r 1 00 00 72 00 +0059E4r 1 00 73 00 00 +005A0Cr 1 80 00 00 81 .faraddr 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +005A10r 1 00 00 82 00 +005A14r 1 00 83 00 00 +005A3Cr 1 F0 00 00 F1 .faraddr 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +005A40r 1 00 00 F2 00 +005A44r 1 00 F3 00 00 +005A6Cr 1 00 01 00 01 .faraddr 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh +005A70r 1 01 00 02 01 +005A74r 1 00 03 01 00 +005A9Cr 1 E0 0F 00 E1 .faraddr 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh +005AA0r 1 0F 00 E2 0F +005AA4r 1 00 E3 0F 00 +005ACCr 1 F0 0F 00 F1 .faraddr 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh +005AD0r 1 0F 00 F2 0F +005AD4r 1 00 F3 0F 00 +005AFCr 1 00 10 00 01 .faraddr 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh +005B00r 1 10 00 02 10 +005B04r 1 00 03 10 00 +005B2Cr 1 F0 7F 00 F1 .faraddr 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh +005B30r 1 7F 00 F2 7F +005B34r 1 00 F3 7F 00 +005B5Cr 1 00 80 00 01 .faraddr 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh +005B60r 1 80 00 02 80 +005B64r 1 00 03 80 00 +005B8Cr 1 EF 9F 00 F0 .faraddr 9fefh,9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh +005B90r 1 9F 00 F1 9F +005B94r 1 00 F2 9F 00 +005BBCr 1 FF 9F 00 00 .faraddr 9fffh,0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh +005BC0r 1 A0 00 01 A0 +005BC4r 1 00 02 A0 00 +005BECr 1 0F A0 00 10 .faraddr 0a00fh,0a010h,0a011h,0a012h,0a013h,0a014h,0a015h,0a016h,0a017h,0a018h,0a019h,0a01ah,0a01bh,0a01ch,0a01dh,0a01eh +005BF0r 1 A0 00 11 A0 +005BF4r 1 00 12 A0 00 +005C1Cr 1 EF AF 00 F0 .faraddr 0afefh,0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh +005C20r 1 AF 00 F1 AF +005C24r 1 00 F2 AF 00 +005C4Cr 1 FF AF 00 00 .faraddr 0afffh,0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh +005C50r 1 B0 00 01 B0 +005C54r 1 00 02 B0 00 +005C7Cr 1 0F B0 00 10 .faraddr 0b00fh,0b010h,0b011h,0b012h,0b013h,0b014h,0b015h,0b016h,0b017h,0b018h,0b019h,0b01ah,0b01bh,0b01ch,0b01dh,0b01eh +005C80r 1 B0 00 11 B0 +005C84r 1 00 12 B0 00 +005CACr 1 EF FF 00 F0 .faraddr 0ffefh,0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh +005CB0r 1 FF 00 F1 FF +005CB4r 1 00 F2 FF 00 +005CDCr 1 FF FF 00 00 .faraddr 0ffffh,10000h,10001h,10002h,10003h,10004h,10005h,10006h,10007h,10008h,10009h,1000ah,1000bh,1000ch,1000dh,1000eh +005CE0r 1 00 01 01 00 +005CE4r 1 01 02 00 01 +005D0Cr 1 0F 00 01 10 .faraddr 1000fh,10010h,10011h,10012h,10013h,10014h,10015h,10016h,10017h,10018h,10019h,1001ah,1001bh,1001ch,1001dh,1001eh +005D10r 1 00 01 11 00 +005D14r 1 01 12 00 01 +005D3Cr 1 EF FF 10 F0 .faraddr 10ffefh,10fff0h,10fff1h,10fff2h,10fff3h,10fff4h,10fff5h,10fff6h,10fff7h,10fff8h,10fff9h,10fffah,10fffbh,10fffch,10fffdh,10fffeh +005D40r 1 FF 10 F1 FF +005D44r 1 10 F2 FF 10 +005D6Cr 1 FF FF 10 00 .faraddr 10ffffh,110000h,110001h,110002h,110003h,110004h,110005h,110006h,110007h,110008h,110009h,11000ah,11000bh,11000ch,11000dh,11000eh +005D70r 1 00 11 01 00 +005D74r 1 11 02 00 11 +005D9Cr 1 0F 00 11 10 .faraddr 11000fh,110010h,110011h,110012h,110013h,110014h,110015h,110016h,110017h,110018h,110019h,11001ah,11001bh,11001ch,11001dh,11001eh +005DA0r 1 00 11 11 00 +005DA4r 1 11 12 00 11 +005DCCr 1 EF FF 20 F0 .faraddr 20ffefh,20fff0h,20fff1h,20fff2h,20fff3h,20fff4h,20fff5h,20fff6h,20fff7h,20fff8h,20fff9h,20fffah,20fffbh,20fffch,20fffdh,20fffeh +005DD0r 1 FF 20 F1 FF +005DD4r 1 20 F2 FF 20 +005DFCr 1 FF FF 20 00 .faraddr 20ffffh,210000h,210001h,210002h,210003h,210004h,210005h,210006h,210007h,210008h,210009h,21000ah,21000bh,21000ch,21000dh,21000eh +005E00r 1 00 21 01 00 +005E04r 1 21 02 00 21 +005E2Cr 1 0F 00 21 10 .faraddr 21000fh,210010h,210011h,210012h,210013h,210014h,210015h,210016h,210017h,210018h,210019h,21001ah,21001bh,21001ch,21001dh,21001eh +005E30r 1 00 21 11 00 +005E34r 1 21 12 00 21 +005E5Cr 1 EF FF 7F F0 .faraddr 7fffefh,7ffff0h,7ffff1h,7ffff2h,7ffff3h,7ffff4h,7ffff5h,7ffff6h,7ffff7h,7ffff8h,7ffff9h,7ffffah,7ffffbh,7ffffch,7ffffdh,7ffffeh +005E60r 1 FF 7F F1 FF +005E64r 1 7F F2 FF 7F +005E8Cr 1 FF FF 7F 00 .faraddr 7fffffh,800000h,800001h,800002h,800003h,800004h,800005h,800006h,800007h,800008h,800009h,80000ah,80000bh,80000ch,80000dh,80000eh +005E90r 1 00 80 01 00 +005E94r 1 80 02 00 80 +005EBCr 1 0F 00 80 10 .faraddr 80000fh,800010h,800011h,800012h,800013h,800014h,800015h,800016h,800017h,800018h,800019h,80001ah,80001bh,80001ch,80001dh,80001eh +005EC0r 1 00 80 11 00 +005EC4r 1 80 12 00 80 +005EECr 1 EF FF 9F F0 .faraddr 9fffefh,9ffff0h,9ffff1h,9ffff2h,9ffff3h,9ffff4h,9ffff5h,9ffff6h,9ffff7h,9ffff8h,9ffff9h,9ffffah,9ffffbh,9ffffch,9ffffdh,9ffffeh +005EF0r 1 FF 9F F1 FF +005EF4r 1 9F F2 FF 9F +005F1Cr 1 FF FF 9F 00 .faraddr 9fffffh,0a00000h,0a00001h,0a00002h,0a00003h,0a00004h,0a00005h,0a00006h,0a00007h,0a00008h,0a00009h,0a0000ah,0a0000bh,0a0000ch,0a0000dh,0a0000eh +005F20r 1 00 A0 01 00 +005F24r 1 A0 02 00 A0 +005F4Cr 1 0F 00 A0 10 .faraddr 0a0000fh,0a00010h,0a00011h,0a00012h,0a00013h,0a00014h,0a00015h,0a00016h,0a00017h,0a00018h,0a00019h,0a0001ah,0a0001bh,0a0001ch,0a0001dh,0a0001eh +005F50r 1 00 A0 11 00 +005F54r 1 A0 12 00 A0 +005F7Cr 1 EF FF FF F0 .faraddr 0ffffefh,0fffff0h,0fffff1h,0fffff2h,0fffff3h,0fffff4h,0fffff5h,0fffff6h,0fffff7h,0fffff8h,0fffff9h,0fffffah,0fffffbh,0fffffch,0fffffdh,0fffffeh +005F80r 1 FF FF F1 FF +005F84r 1 FF F2 FF FF +005FACr 1 FF FF FF .faraddr 0ffffffh +005FAFr 1 +005FAFr 1 ; mix some variants +005FAFr 1 0B 00 00 11 .faraddr 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +005FB3r 1 00 00 03 00 +005FB7r 1 00 11 00 00 +005FDCr 1 diff --git a/test/asm/listing/105-faraddr.s b/test/asm/listing/105-faraddr.s new file mode 100644 index 000000000..1f925ffde --- /dev/null +++ b/test/asm/listing/105-faraddr.s @@ -0,0 +1,6717 @@ +; 2022-06-15 Spiro Trikaliotis + + + ; upper case pseudo-op + .FARADDR 0 + .FARADDR 1 + .FARADDR 2 + .FARADDR 3 + .FARADDR 4 + .FARADDR 5 + .FARADDR 6 + .FARADDR 7 + .FARADDR 8 + .FARADDR 9 + .FARADDR 10 + .FARADDR 11 + .FARADDR 12 + .FARADDR 13 + .FARADDR 14 + .FARADDR 15 + .FARADDR 16 + .FARADDR 17 + .FARADDR 18 + .FARADDR 19 + .FARADDR 112 + .FARADDR 113 + .FARADDR 114 + .FARADDR 115 + .FARADDR 116 + .FARADDR 117 + .FARADDR 118 + .FARADDR 119 + .FARADDR 120 + .FARADDR 121 + .FARADDR 122 + .FARADDR 123 + .FARADDR 124 + .FARADDR 125 + .FARADDR 126 + .FARADDR 127 + .FARADDR 128 + .FARADDR 129 + .FARADDR 130 + .FARADDR 131 + .FARADDR 132 + .FARADDR 133 + .FARADDR 134 + .FARADDR 240 + .FARADDR 241 + .FARADDR 242 + .FARADDR 243 + .FARADDR 244 + .FARADDR 245 + .FARADDR 246 + .FARADDR 247 + .FARADDR 248 + .FARADDR 249 + .FARADDR 250 + .FARADDR 251 + .FARADDR 252 + .FARADDR 253 + .FARADDR 254 + .FARADDR 255 + .FARADDR 256 + .FARADDR 257 + .FARADDR 258 + .FARADDR 259 + .FARADDR 4050 + .FARADDR 4051 + .FARADDR 4052 + .FARADDR 4053 + .FARADDR 4054 + .FARADDR 4055 + .FARADDR 4056 + .FARADDR 4057 + .FARADDR 4058 + .FARADDR 4059 + .FARADDR 4060 + .FARADDR 4061 + .FARADDR 4062 + .FARADDR 4063 + .FARADDR 4064 + .FARADDR 4065 + .FARADDR 4066 + .FARADDR 4067 + .FARADDR 4068 + .FARADDR 4069 + .FARADDR 4070 + .FARADDR 4071 + .FARADDR 4072 + .FARADDR 4073 + .FARADDR 4074 + .FARADDR 4075 + .FARADDR 4076 + .FARADDR 4077 + .FARADDR 4078 + .FARADDR 4079 + .FARADDR 4080 + .FARADDR 4081 + .FARADDR 4082 + .FARADDR 4083 + .FARADDR 4084 + .FARADDR 4085 + .FARADDR 4086 + .FARADDR 4087 + .FARADDR 4088 + .FARADDR 4089 + .FARADDR 4090 + .FARADDR 4091 + .FARADDR 4092 + .FARADDR 4093 + .FARADDR 4094 + .FARADDR 4095 + .FARADDR 4096 + .FARADDR 4097 + .FARADDR 4098 + .FARADDR 4099 + .FARADDR 4100 + .FARADDR 4101 + .FARADDR 4102 + .FARADDR 4103 + .FARADDR 4104 + .FARADDR 32752 + .FARADDR 32753 + .FARADDR 32754 + .FARADDR 32755 + .FARADDR 32756 + .FARADDR 32757 + .FARADDR 32758 + .FARADDR 32759 + .FARADDR 32760 + .FARADDR 32761 + .FARADDR 32762 + .FARADDR 32763 + .FARADDR 32764 + .FARADDR 32765 + .FARADDR 32766 + .FARADDR 32767 + .FARADDR 32768 + .FARADDR 32769 + .FARADDR 32770 + .FARADDR 32771 + .FARADDR 32772 + .FARADDR 32773 + .FARADDR 32774 + .FARADDR 32775 + .FARADDR 32776 + .FARADDR 32777 + .FARADDR 32778 + .FARADDR 32779 + .FARADDR 40929 + .FARADDR 40930 + .FARADDR 40931 + .FARADDR 40932 + .FARADDR 40933 + .FARADDR 40934 + .FARADDR 40935 + .FARADDR 40936 + .FARADDR 40937 + .FARADDR 40938 + .FARADDR 40939 + .FARADDR 40940 + .FARADDR 40941 + .FARADDR 40942 + .FARADDR 40943 + .FARADDR 40944 + .FARADDR 40945 + .FARADDR 40946 + .FARADDR 40947 + .FARADDR 40948 + .FARADDR 40949 + .FARADDR 40950 + .FARADDR 40951 + .FARADDR 40952 + .FARADDR 40953 + .FARADDR 40954 + .FARADDR 40955 + .FARADDR 40956 + .FARADDR 40957 + .FARADDR 40958 + .FARADDR 40959 + .FARADDR 40960 + .FARADDR 40961 + .FARADDR 40962 + .FARADDR 40963 + .FARADDR 40964 + .FARADDR 40965 + .FARADDR 40966 + .FARADDR 40967 + .FARADDR 40968 + .FARADDR 40969 + .FARADDR 40970 + .FARADDR 40971 + .FARADDR 40972 + .FARADDR 40973 + .FARADDR 40974 + .FARADDR 40975 + .FARADDR 45025 + .FARADDR 45026 + .FARADDR 45027 + .FARADDR 45028 + .FARADDR 45029 + .FARADDR 45030 + .FARADDR 45031 + .FARADDR 45032 + .FARADDR 45033 + .FARADDR 45034 + .FARADDR 45035 + .FARADDR 45036 + .FARADDR 45037 + .FARADDR 45038 + .FARADDR 45039 + .FARADDR 45040 + .FARADDR 45041 + .FARADDR 45042 + .FARADDR 45043 + .FARADDR 45044 + .FARADDR 45045 + .FARADDR 45046 + .FARADDR 45047 + .FARADDR 45048 + .FARADDR 45049 + .FARADDR 45050 + .FARADDR 45051 + .FARADDR 45052 + .FARADDR 45053 + .FARADDR 45054 + .FARADDR 45055 + .FARADDR 45056 + .FARADDR 45057 + .FARADDR 45058 + .FARADDR 45059 + .FARADDR 45060 + .FARADDR 45061 + .FARADDR 45062 + .FARADDR 45063 + .FARADDR 45064 + .FARADDR 45065 + .FARADDR 45066 + .FARADDR 45067 + .FARADDR 45068 + .FARADDR 45069 + .FARADDR 45070 + .FARADDR 45071 + .FARADDR 65505 + .FARADDR 65506 + .FARADDR 65507 + .FARADDR 65508 + .FARADDR 65509 + .FARADDR 65510 + .FARADDR 65511 + .FARADDR 65512 + .FARADDR 65513 + .FARADDR 65514 + .FARADDR 65515 + .FARADDR 65516 + .FARADDR 65517 + .FARADDR 65518 + .FARADDR 65519 + .FARADDR 65520 + .FARADDR 65521 + .FARADDR 65522 + .FARADDR 65523 + .FARADDR 65524 + .FARADDR 65525 + .FARADDR 65526 + .FARADDR 65527 + .FARADDR 65528 + .FARADDR 65529 + .FARADDR 65530 + .FARADDR 65531 + .FARADDR 65532 + .FARADDR 65533 + .FARADDR 65534 + .FARADDR 65535 + .FARADDR 65536 + .FARADDR 65537 + .FARADDR 65538 + .FARADDR 65539 + .FARADDR 65540 + .FARADDR 65541 + .FARADDR 65542 + .FARADDR 65543 + .FARADDR 65544 + .FARADDR 65545 + .FARADDR 65546 + .FARADDR 65547 + .FARADDR 65548 + .FARADDR 65549 + .FARADDR 65550 + .FARADDR 65551 + .FARADDR 1114081 + .FARADDR 1114082 + .FARADDR 1114083 + .FARADDR 1114084 + .FARADDR 1114085 + .FARADDR 1114086 + .FARADDR 1114087 + .FARADDR 1114088 + .FARADDR 1114089 + .FARADDR 1114090 + .FARADDR 1114091 + .FARADDR 1114092 + .FARADDR 1114093 + .FARADDR 1114094 + .FARADDR 1114095 + .FARADDR 1114096 + .FARADDR 1114097 + .FARADDR 1114098 + .FARADDR 1114099 + .FARADDR 1114100 + .FARADDR 1114101 + .FARADDR 1114102 + .FARADDR 1114103 + .FARADDR 1114104 + .FARADDR 1114105 + .FARADDR 1114106 + .FARADDR 1114107 + .FARADDR 1114108 + .FARADDR 1114109 + .FARADDR 1114110 + .FARADDR 1114111 + .FARADDR 1114112 + .FARADDR 1114113 + .FARADDR 1114114 + .FARADDR 1114115 + .FARADDR 1114116 + .FARADDR 1114117 + .FARADDR 1114118 + .FARADDR 1114119 + .FARADDR 1114120 + .FARADDR 1114121 + .FARADDR 1114122 + .FARADDR 1114123 + .FARADDR 1114124 + .FARADDR 1114125 + .FARADDR 1114126 + .FARADDR 1114127 + .FARADDR 2162657 + .FARADDR 2162658 + .FARADDR 2162659 + .FARADDR 2162660 + .FARADDR 2162661 + .FARADDR 2162662 + .FARADDR 2162663 + .FARADDR 2162664 + .FARADDR 2162665 + .FARADDR 2162666 + .FARADDR 2162667 + .FARADDR 2162668 + .FARADDR 2162669 + .FARADDR 2162670 + .FARADDR 2162671 + .FARADDR 2162672 + .FARADDR 2162673 + .FARADDR 2162674 + .FARADDR 2162675 + .FARADDR 2162676 + .FARADDR 2162677 + .FARADDR 2162678 + .FARADDR 2162679 + .FARADDR 2162680 + .FARADDR 2162681 + .FARADDR 2162682 + .FARADDR 2162683 + .FARADDR 2162684 + .FARADDR 2162685 + .FARADDR 2162686 + .FARADDR 2162687 + .FARADDR 2162688 + .FARADDR 2162689 + .FARADDR 2162690 + .FARADDR 2162691 + .FARADDR 2162692 + .FARADDR 2162693 + .FARADDR 2162694 + .FARADDR 2162695 + .FARADDR 2162696 + .FARADDR 2162697 + .FARADDR 2162698 + .FARADDR 2162699 + .FARADDR 2162700 + .FARADDR 2162701 + .FARADDR 2162702 + .FARADDR 2162703 + .FARADDR 8388577 + .FARADDR 8388578 + .FARADDR 8388579 + .FARADDR 8388580 + .FARADDR 8388581 + .FARADDR 8388582 + .FARADDR 8388583 + .FARADDR 8388584 + .FARADDR 8388585 + .FARADDR 8388586 + .FARADDR 8388587 + .FARADDR 8388588 + .FARADDR 8388589 + .FARADDR 8388590 + .FARADDR 8388591 + .FARADDR 8388592 + .FARADDR 8388593 + .FARADDR 8388594 + .FARADDR 8388595 + .FARADDR 8388596 + .FARADDR 8388597 + .FARADDR 8388598 + .FARADDR 8388599 + .FARADDR 8388600 + .FARADDR 8388601 + .FARADDR 8388602 + .FARADDR 8388603 + .FARADDR 8388604 + .FARADDR 8388605 + .FARADDR 8388606 + .FARADDR 8388607 + .FARADDR 8388608 + .FARADDR 8388609 + .FARADDR 8388610 + .FARADDR 8388611 + .FARADDR 8388612 + .FARADDR 8388613 + .FARADDR 8388614 + .FARADDR 8388615 + .FARADDR 8388616 + .FARADDR 8388617 + .FARADDR 8388618 + .FARADDR 8388619 + .FARADDR 8388620 + .FARADDR 8388621 + .FARADDR 8388622 + .FARADDR 8388623 + .FARADDR 10485729 + .FARADDR 10485730 + .FARADDR 10485731 + .FARADDR 10485732 + .FARADDR 10485733 + .FARADDR 10485734 + .FARADDR 10485735 + .FARADDR 10485736 + .FARADDR 10485737 + .FARADDR 10485738 + .FARADDR 10485739 + .FARADDR 10485740 + .FARADDR 10485741 + .FARADDR 10485742 + .FARADDR 10485743 + .FARADDR 10485744 + .FARADDR 10485745 + .FARADDR 10485746 + .FARADDR 10485747 + .FARADDR 10485748 + .FARADDR 10485749 + .FARADDR 10485750 + .FARADDR 10485751 + .FARADDR 10485752 + .FARADDR 10485753 + .FARADDR 10485754 + .FARADDR 10485755 + .FARADDR 10485756 + .FARADDR 10485757 + .FARADDR 10485758 + .FARADDR 10485759 + .FARADDR 10485760 + .FARADDR 10485761 + .FARADDR 10485762 + .FARADDR 10485763 + .FARADDR 10485764 + .FARADDR 10485765 + .FARADDR 10485766 + .FARADDR 10485767 + .FARADDR 10485768 + .FARADDR 10485769 + .FARADDR 10485770 + .FARADDR 10485771 + .FARADDR 10485772 + .FARADDR 10485773 + .FARADDR 10485774 + .FARADDR 10485775 + .FARADDR 16777185 + .FARADDR 16777186 + .FARADDR 16777187 + .FARADDR 16777188 + .FARADDR 16777189 + .FARADDR 16777190 + .FARADDR 16777191 + .FARADDR 16777192 + .FARADDR 16777193 + .FARADDR 16777194 + .FARADDR 16777195 + .FARADDR 16777196 + .FARADDR 16777197 + .FARADDR 16777198 + .FARADDR 16777199 + .FARADDR 16777200 + .FARADDR 16777201 + .FARADDR 16777202 + .FARADDR 16777203 + .FARADDR 16777204 + .FARADDR 16777205 + .FARADDR 16777206 + .FARADDR 16777207 + .FARADDR 16777208 + .FARADDR 16777209 + .FARADDR 16777210 + .FARADDR 16777211 + .FARADDR 16777212 + .FARADDR 16777213 + .FARADDR 16777214 + .FARADDR 16777215 + + ; lower case pseudo-op + .faraddr 0 + .faraddr 1 + .faraddr 2 + .faraddr 3 + .faraddr 4 + .faraddr 5 + .faraddr 6 + .faraddr 7 + .faraddr 8 + .faraddr 9 + .faraddr 10 + .faraddr 11 + .faraddr 12 + .faraddr 13 + .faraddr 14 + .faraddr 15 + .faraddr 16 + .faraddr 17 + .faraddr 18 + .faraddr 19 + .faraddr 112 + .faraddr 113 + .faraddr 114 + .faraddr 115 + .faraddr 116 + .faraddr 117 + .faraddr 118 + .faraddr 119 + .faraddr 120 + .faraddr 121 + .faraddr 122 + .faraddr 123 + .faraddr 124 + .faraddr 125 + .faraddr 126 + .faraddr 127 + .faraddr 128 + .faraddr 129 + .faraddr 130 + .faraddr 131 + .faraddr 132 + .faraddr 133 + .faraddr 134 + .faraddr 240 + .faraddr 241 + .faraddr 242 + .faraddr 243 + .faraddr 244 + .faraddr 245 + .faraddr 246 + .faraddr 247 + .faraddr 248 + .faraddr 249 + .faraddr 250 + .faraddr 251 + .faraddr 252 + .faraddr 253 + .faraddr 254 + .faraddr 255 + .faraddr 256 + .faraddr 257 + .faraddr 258 + .faraddr 259 + .faraddr 4050 + .faraddr 4051 + .faraddr 4052 + .faraddr 4053 + .faraddr 4054 + .faraddr 4055 + .faraddr 4056 + .faraddr 4057 + .faraddr 4058 + .faraddr 4059 + .faraddr 4060 + .faraddr 4061 + .faraddr 4062 + .faraddr 4063 + .faraddr 4064 + .faraddr 4065 + .faraddr 4066 + .faraddr 4067 + .faraddr 4068 + .faraddr 4069 + .faraddr 4070 + .faraddr 4071 + .faraddr 4072 + .faraddr 4073 + .faraddr 4074 + .faraddr 4075 + .faraddr 4076 + .faraddr 4077 + .faraddr 4078 + .faraddr 4079 + .faraddr 4080 + .faraddr 4081 + .faraddr 4082 + .faraddr 4083 + .faraddr 4084 + .faraddr 4085 + .faraddr 4086 + .faraddr 4087 + .faraddr 4088 + .faraddr 4089 + .faraddr 4090 + .faraddr 4091 + .faraddr 4092 + .faraddr 4093 + .faraddr 4094 + .faraddr 4095 + .faraddr 4096 + .faraddr 4097 + .faraddr 4098 + .faraddr 4099 + .faraddr 4100 + .faraddr 4101 + .faraddr 4102 + .faraddr 4103 + .faraddr 4104 + .faraddr 32752 + .faraddr 32753 + .faraddr 32754 + .faraddr 32755 + .faraddr 32756 + .faraddr 32757 + .faraddr 32758 + .faraddr 32759 + .faraddr 32760 + .faraddr 32761 + .faraddr 32762 + .faraddr 32763 + .faraddr 32764 + .faraddr 32765 + .faraddr 32766 + .faraddr 32767 + .faraddr 32768 + .faraddr 32769 + .faraddr 32770 + .faraddr 32771 + .faraddr 32772 + .faraddr 32773 + .faraddr 32774 + .faraddr 32775 + .faraddr 32776 + .faraddr 32777 + .faraddr 32778 + .faraddr 32779 + .faraddr 40929 + .faraddr 40930 + .faraddr 40931 + .faraddr 40932 + .faraddr 40933 + .faraddr 40934 + .faraddr 40935 + .faraddr 40936 + .faraddr 40937 + .faraddr 40938 + .faraddr 40939 + .faraddr 40940 + .faraddr 40941 + .faraddr 40942 + .faraddr 40943 + .faraddr 40944 + .faraddr 40945 + .faraddr 40946 + .faraddr 40947 + .faraddr 40948 + .faraddr 40949 + .faraddr 40950 + .faraddr 40951 + .faraddr 40952 + .faraddr 40953 + .faraddr 40954 + .faraddr 40955 + .faraddr 40956 + .faraddr 40957 + .faraddr 40958 + .faraddr 40959 + .faraddr 40960 + .faraddr 40961 + .faraddr 40962 + .faraddr 40963 + .faraddr 40964 + .faraddr 40965 + .faraddr 40966 + .faraddr 40967 + .faraddr 40968 + .faraddr 40969 + .faraddr 40970 + .faraddr 40971 + .faraddr 40972 + .faraddr 40973 + .faraddr 40974 + .faraddr 40975 + .faraddr 45025 + .faraddr 45026 + .faraddr 45027 + .faraddr 45028 + .faraddr 45029 + .faraddr 45030 + .faraddr 45031 + .faraddr 45032 + .faraddr 45033 + .faraddr 45034 + .faraddr 45035 + .faraddr 45036 + .faraddr 45037 + .faraddr 45038 + .faraddr 45039 + .faraddr 45040 + .faraddr 45041 + .faraddr 45042 + .faraddr 45043 + .faraddr 45044 + .faraddr 45045 + .faraddr 45046 + .faraddr 45047 + .faraddr 45048 + .faraddr 45049 + .faraddr 45050 + .faraddr 45051 + .faraddr 45052 + .faraddr 45053 + .faraddr 45054 + .faraddr 45055 + .faraddr 45056 + .faraddr 45057 + .faraddr 45058 + .faraddr 45059 + .faraddr 45060 + .faraddr 45061 + .faraddr 45062 + .faraddr 45063 + .faraddr 45064 + .faraddr 45065 + .faraddr 45066 + .faraddr 45067 + .faraddr 45068 + .faraddr 45069 + .faraddr 45070 + .faraddr 45071 + .faraddr 65505 + .faraddr 65506 + .faraddr 65507 + .faraddr 65508 + .faraddr 65509 + .faraddr 65510 + .faraddr 65511 + .faraddr 65512 + .faraddr 65513 + .faraddr 65514 + .faraddr 65515 + .faraddr 65516 + .faraddr 65517 + .faraddr 65518 + .faraddr 65519 + .faraddr 65520 + .faraddr 65521 + .faraddr 65522 + .faraddr 65523 + .faraddr 65524 + .faraddr 65525 + .faraddr 65526 + .faraddr 65527 + .faraddr 65528 + .faraddr 65529 + .faraddr 65530 + .faraddr 65531 + .faraddr 65532 + .faraddr 65533 + .faraddr 65534 + .faraddr 65535 + .faraddr 65536 + .faraddr 65537 + .faraddr 65538 + .faraddr 65539 + .faraddr 65540 + .faraddr 65541 + .faraddr 65542 + .faraddr 65543 + .faraddr 65544 + .faraddr 65545 + .faraddr 65546 + .faraddr 65547 + .faraddr 65548 + .faraddr 65549 + .faraddr 65550 + .faraddr 65551 + .faraddr 1114081 + .faraddr 1114082 + .faraddr 1114083 + .faraddr 1114084 + .faraddr 1114085 + .faraddr 1114086 + .faraddr 1114087 + .faraddr 1114088 + .faraddr 1114089 + .faraddr 1114090 + .faraddr 1114091 + .faraddr 1114092 + .faraddr 1114093 + .faraddr 1114094 + .faraddr 1114095 + .faraddr 1114096 + .faraddr 1114097 + .faraddr 1114098 + .faraddr 1114099 + .faraddr 1114100 + .faraddr 1114101 + .faraddr 1114102 + .faraddr 1114103 + .faraddr 1114104 + .faraddr 1114105 + .faraddr 1114106 + .faraddr 1114107 + .faraddr 1114108 + .faraddr 1114109 + .faraddr 1114110 + .faraddr 1114111 + .faraddr 1114112 + .faraddr 1114113 + .faraddr 1114114 + .faraddr 1114115 + .faraddr 1114116 + .faraddr 1114117 + .faraddr 1114118 + .faraddr 1114119 + .faraddr 1114120 + .faraddr 1114121 + .faraddr 1114122 + .faraddr 1114123 + .faraddr 1114124 + .faraddr 1114125 + .faraddr 1114126 + .faraddr 1114127 + .faraddr 2162657 + .faraddr 2162658 + .faraddr 2162659 + .faraddr 2162660 + .faraddr 2162661 + .faraddr 2162662 + .faraddr 2162663 + .faraddr 2162664 + .faraddr 2162665 + .faraddr 2162666 + .faraddr 2162667 + .faraddr 2162668 + .faraddr 2162669 + .faraddr 2162670 + .faraddr 2162671 + .faraddr 2162672 + .faraddr 2162673 + .faraddr 2162674 + .faraddr 2162675 + .faraddr 2162676 + .faraddr 2162677 + .faraddr 2162678 + .faraddr 2162679 + .faraddr 2162680 + .faraddr 2162681 + .faraddr 2162682 + .faraddr 2162683 + .faraddr 2162684 + .faraddr 2162685 + .faraddr 2162686 + .faraddr 2162687 + .faraddr 2162688 + .faraddr 2162689 + .faraddr 2162690 + .faraddr 2162691 + .faraddr 2162692 + .faraddr 2162693 + .faraddr 2162694 + .faraddr 2162695 + .faraddr 2162696 + .faraddr 2162697 + .faraddr 2162698 + .faraddr 2162699 + .faraddr 2162700 + .faraddr 2162701 + .faraddr 2162702 + .faraddr 2162703 + .faraddr 8388577 + .faraddr 8388578 + .faraddr 8388579 + .faraddr 8388580 + .faraddr 8388581 + .faraddr 8388582 + .faraddr 8388583 + .faraddr 8388584 + .faraddr 8388585 + .faraddr 8388586 + .faraddr 8388587 + .faraddr 8388588 + .faraddr 8388589 + .faraddr 8388590 + .faraddr 8388591 + .faraddr 8388592 + .faraddr 8388593 + .faraddr 8388594 + .faraddr 8388595 + .faraddr 8388596 + .faraddr 8388597 + .faraddr 8388598 + .faraddr 8388599 + .faraddr 8388600 + .faraddr 8388601 + .faraddr 8388602 + .faraddr 8388603 + .faraddr 8388604 + .faraddr 8388605 + .faraddr 8388606 + .faraddr 8388607 + .faraddr 8388608 + .faraddr 8388609 + .faraddr 8388610 + .faraddr 8388611 + .faraddr 8388612 + .faraddr 8388613 + .faraddr 8388614 + .faraddr 8388615 + .faraddr 8388616 + .faraddr 8388617 + .faraddr 8388618 + .faraddr 8388619 + .faraddr 8388620 + .faraddr 8388621 + .faraddr 8388622 + .faraddr 8388623 + .faraddr 10485729 + .faraddr 10485730 + .faraddr 10485731 + .faraddr 10485732 + .faraddr 10485733 + .faraddr 10485734 + .faraddr 10485735 + .faraddr 10485736 + .faraddr 10485737 + .faraddr 10485738 + .faraddr 10485739 + .faraddr 10485740 + .faraddr 10485741 + .faraddr 10485742 + .faraddr 10485743 + .faraddr 10485744 + .faraddr 10485745 + .faraddr 10485746 + .faraddr 10485747 + .faraddr 10485748 + .faraddr 10485749 + .faraddr 10485750 + .faraddr 10485751 + .faraddr 10485752 + .faraddr 10485753 + .faraddr 10485754 + .faraddr 10485755 + .faraddr 10485756 + .faraddr 10485757 + .faraddr 10485758 + .faraddr 10485759 + .faraddr 10485760 + .faraddr 10485761 + .faraddr 10485762 + .faraddr 10485763 + .faraddr 10485764 + .faraddr 10485765 + .faraddr 10485766 + .faraddr 10485767 + .faraddr 10485768 + .faraddr 10485769 + .faraddr 10485770 + .faraddr 10485771 + .faraddr 10485772 + .faraddr 10485773 + .faraddr 10485774 + .faraddr 10485775 + .faraddr 16777185 + .faraddr 16777186 + .faraddr 16777187 + .faraddr 16777188 + .faraddr 16777189 + .faraddr 16777190 + .faraddr 16777191 + .faraddr 16777192 + .faraddr 16777193 + .faraddr 16777194 + .faraddr 16777195 + .faraddr 16777196 + .faraddr 16777197 + .faraddr 16777198 + .faraddr 16777199 + .faraddr 16777200 + .faraddr 16777201 + .faraddr 16777202 + .faraddr 16777203 + .faraddr 16777204 + .faraddr 16777205 + .faraddr 16777206 + .faraddr 16777207 + .faraddr 16777208 + .faraddr 16777209 + .faraddr 16777210 + .faraddr 16777211 + .faraddr 16777212 + .faraddr 16777213 + .faraddr 16777214 + .faraddr 16777215 + + ; hex values + .faraddr $0 + .faraddr $1 + .faraddr $2 + .faraddr $3 + .faraddr $4 + .faraddr $5 + .faraddr $6 + .faraddr $7 + .faraddr $8 + .faraddr $9 + .faraddr $a + .faraddr $b + .faraddr $c + .faraddr $d + .faraddr $e + .faraddr $f + .faraddr $10 + .faraddr $11 + .faraddr $12 + .faraddr $13 + .faraddr $70 + .faraddr $71 + .faraddr $72 + .faraddr $73 + .faraddr $74 + .faraddr $75 + .faraddr $76 + .faraddr $77 + .faraddr $78 + .faraddr $79 + .faraddr $7a + .faraddr $7b + .faraddr $7c + .faraddr $7d + .faraddr $7e + .faraddr $7f + .faraddr $80 + .faraddr $81 + .faraddr $82 + .faraddr $83 + .faraddr $84 + .faraddr $85 + .faraddr $86 + .faraddr $f0 + .faraddr $f1 + .faraddr $f2 + .faraddr $f3 + .faraddr $f4 + .faraddr $f5 + .faraddr $f6 + .faraddr $f7 + .faraddr $f8 + .faraddr $f9 + .faraddr $fa + .faraddr $fb + .faraddr $fc + .faraddr $fd + .faraddr $fe + .faraddr $ff + .faraddr $100 + .faraddr $101 + .faraddr $102 + .faraddr $103 + .faraddr $fd2 + .faraddr $fd3 + .faraddr $fd4 + .faraddr $fd5 + .faraddr $fd6 + .faraddr $fd7 + .faraddr $fd8 + .faraddr $fd9 + .faraddr $fda + .faraddr $fdb + .faraddr $fdc + .faraddr $fdd + .faraddr $fde + .faraddr $fdf + .faraddr $fe0 + .faraddr $fe1 + .faraddr $fe2 + .faraddr $fe3 + .faraddr $fe4 + .faraddr $fe5 + .faraddr $fe6 + .faraddr $fe7 + .faraddr $fe8 + .faraddr $fe9 + .faraddr $fea + .faraddr $feb + .faraddr $fec + .faraddr $fed + .faraddr $fee + .faraddr $fef + .faraddr $ff0 + .faraddr $ff1 + .faraddr $ff2 + .faraddr $ff3 + .faraddr $ff4 + .faraddr $ff5 + .faraddr $ff6 + .faraddr $ff7 + .faraddr $ff8 + .faraddr $ff9 + .faraddr $ffa + .faraddr $ffb + .faraddr $ffc + .faraddr $ffd + .faraddr $ffe + .faraddr $fff + .faraddr $1000 + .faraddr $1001 + .faraddr $1002 + .faraddr $1003 + .faraddr $1004 + .faraddr $1005 + .faraddr $1006 + .faraddr $1007 + .faraddr $1008 + .faraddr $7ff0 + .faraddr $7ff1 + .faraddr $7ff2 + .faraddr $7ff3 + .faraddr $7ff4 + .faraddr $7ff5 + .faraddr $7ff6 + .faraddr $7ff7 + .faraddr $7ff8 + .faraddr $7ff9 + .faraddr $7ffa + .faraddr $7ffb + .faraddr $7ffc + .faraddr $7ffd + .faraddr $7ffe + .faraddr $7fff + .faraddr $8000 + .faraddr $8001 + .faraddr $8002 + .faraddr $8003 + .faraddr $8004 + .faraddr $8005 + .faraddr $8006 + .faraddr $8007 + .faraddr $8008 + .faraddr $8009 + .faraddr $800a + .faraddr $800b + .faraddr $9fe1 + .faraddr $9fe2 + .faraddr $9fe3 + .faraddr $9fe4 + .faraddr $9fe5 + .faraddr $9fe6 + .faraddr $9fe7 + .faraddr $9fe8 + .faraddr $9fe9 + .faraddr $9fea + .faraddr $9feb + .faraddr $9fec + .faraddr $9fed + .faraddr $9fee + .faraddr $9fef + .faraddr $9ff0 + .faraddr $9ff1 + .faraddr $9ff2 + .faraddr $9ff3 + .faraddr $9ff4 + .faraddr $9ff5 + .faraddr $9ff6 + .faraddr $9ff7 + .faraddr $9ff8 + .faraddr $9ff9 + .faraddr $9ffa + .faraddr $9ffb + .faraddr $9ffc + .faraddr $9ffd + .faraddr $9ffe + .faraddr $9fff + .faraddr $a000 + .faraddr $a001 + .faraddr $a002 + .faraddr $a003 + .faraddr $a004 + .faraddr $a005 + .faraddr $a006 + .faraddr $a007 + .faraddr $a008 + .faraddr $a009 + .faraddr $a00a + .faraddr $a00b + .faraddr $a00c + .faraddr $a00d + .faraddr $a00e + .faraddr $a00f + .faraddr $afe1 + .faraddr $afe2 + .faraddr $afe3 + .faraddr $afe4 + .faraddr $afe5 + .faraddr $afe6 + .faraddr $afe7 + .faraddr $afe8 + .faraddr $afe9 + .faraddr $afea + .faraddr $afeb + .faraddr $afec + .faraddr $afed + .faraddr $afee + .faraddr $afef + .faraddr $aff0 + .faraddr $aff1 + .faraddr $aff2 + .faraddr $aff3 + .faraddr $aff4 + .faraddr $aff5 + .faraddr $aff6 + .faraddr $aff7 + .faraddr $aff8 + .faraddr $aff9 + .faraddr $affa + .faraddr $affb + .faraddr $affc + .faraddr $affd + .faraddr $affe + .faraddr $afff + .faraddr $b000 + .faraddr $b001 + .faraddr $b002 + .faraddr $b003 + .faraddr $b004 + .faraddr $b005 + .faraddr $b006 + .faraddr $b007 + .faraddr $b008 + .faraddr $b009 + .faraddr $b00a + .faraddr $b00b + .faraddr $b00c + .faraddr $b00d + .faraddr $b00e + .faraddr $b00f + .faraddr $ffe1 + .faraddr $ffe2 + .faraddr $ffe3 + .faraddr $ffe4 + .faraddr $ffe5 + .faraddr $ffe6 + .faraddr $ffe7 + .faraddr $ffe8 + .faraddr $ffe9 + .faraddr $ffea + .faraddr $ffeb + .faraddr $ffec + .faraddr $ffed + .faraddr $ffee + .faraddr $ffef + .faraddr $fff0 + .faraddr $fff1 + .faraddr $fff2 + .faraddr $fff3 + .faraddr $fff4 + .faraddr $fff5 + .faraddr $fff6 + .faraddr $fff7 + .faraddr $fff8 + .faraddr $fff9 + .faraddr $fffa + .faraddr $fffb + .faraddr $fffc + .faraddr $fffd + .faraddr $fffe + .faraddr $ffff + .faraddr $10000 + .faraddr $10001 + .faraddr $10002 + .faraddr $10003 + .faraddr $10004 + .faraddr $10005 + .faraddr $10006 + .faraddr $10007 + .faraddr $10008 + .faraddr $10009 + .faraddr $1000a + .faraddr $1000b + .faraddr $1000c + .faraddr $1000d + .faraddr $1000e + .faraddr $1000f + .faraddr $10ffe1 + .faraddr $10ffe2 + .faraddr $10ffe3 + .faraddr $10ffe4 + .faraddr $10ffe5 + .faraddr $10ffe6 + .faraddr $10ffe7 + .faraddr $10ffe8 + .faraddr $10ffe9 + .faraddr $10ffea + .faraddr $10ffeb + .faraddr $10ffec + .faraddr $10ffed + .faraddr $10ffee + .faraddr $10ffef + .faraddr $10fff0 + .faraddr $10fff1 + .faraddr $10fff2 + .faraddr $10fff3 + .faraddr $10fff4 + .faraddr $10fff5 + .faraddr $10fff6 + .faraddr $10fff7 + .faraddr $10fff8 + .faraddr $10fff9 + .faraddr $10fffa + .faraddr $10fffb + .faraddr $10fffc + .faraddr $10fffd + .faraddr $10fffe + .faraddr $10ffff + .faraddr $110000 + .faraddr $110001 + .faraddr $110002 + .faraddr $110003 + .faraddr $110004 + .faraddr $110005 + .faraddr $110006 + .faraddr $110007 + .faraddr $110008 + .faraddr $110009 + .faraddr $11000a + .faraddr $11000b + .faraddr $11000c + .faraddr $11000d + .faraddr $11000e + .faraddr $11000f + .faraddr $20ffe1 + .faraddr $20ffe2 + .faraddr $20ffe3 + .faraddr $20ffe4 + .faraddr $20ffe5 + .faraddr $20ffe6 + .faraddr $20ffe7 + .faraddr $20ffe8 + .faraddr $20ffe9 + .faraddr $20ffea + .faraddr $20ffeb + .faraddr $20ffec + .faraddr $20ffed + .faraddr $20ffee + .faraddr $20ffef + .faraddr $20fff0 + .faraddr $20fff1 + .faraddr $20fff2 + .faraddr $20fff3 + .faraddr $20fff4 + .faraddr $20fff5 + .faraddr $20fff6 + .faraddr $20fff7 + .faraddr $20fff8 + .faraddr $20fff9 + .faraddr $20fffa + .faraddr $20fffb + .faraddr $20fffc + .faraddr $20fffd + .faraddr $20fffe + .faraddr $20ffff + .faraddr $210000 + .faraddr $210001 + .faraddr $210002 + .faraddr $210003 + .faraddr $210004 + .faraddr $210005 + .faraddr $210006 + .faraddr $210007 + .faraddr $210008 + .faraddr $210009 + .faraddr $21000a + .faraddr $21000b + .faraddr $21000c + .faraddr $21000d + .faraddr $21000e + .faraddr $21000f + .faraddr $7fffe1 + .faraddr $7fffe2 + .faraddr $7fffe3 + .faraddr $7fffe4 + .faraddr $7fffe5 + .faraddr $7fffe6 + .faraddr $7fffe7 + .faraddr $7fffe8 + .faraddr $7fffe9 + .faraddr $7fffea + .faraddr $7fffeb + .faraddr $7fffec + .faraddr $7fffed + .faraddr $7fffee + .faraddr $7fffef + .faraddr $7ffff0 + .faraddr $7ffff1 + .faraddr $7ffff2 + .faraddr $7ffff3 + .faraddr $7ffff4 + .faraddr $7ffff5 + .faraddr $7ffff6 + .faraddr $7ffff7 + .faraddr $7ffff8 + .faraddr $7ffff9 + .faraddr $7ffffa + .faraddr $7ffffb + .faraddr $7ffffc + .faraddr $7ffffd + .faraddr $7ffffe + .faraddr $7fffff + .faraddr $800000 + .faraddr $800001 + .faraddr $800002 + .faraddr $800003 + .faraddr $800004 + .faraddr $800005 + .faraddr $800006 + .faraddr $800007 + .faraddr $800008 + .faraddr $800009 + .faraddr $80000a + .faraddr $80000b + .faraddr $80000c + .faraddr $80000d + .faraddr $80000e + .faraddr $80000f + .faraddr $9fffe1 + .faraddr $9fffe2 + .faraddr $9fffe3 + .faraddr $9fffe4 + .faraddr $9fffe5 + .faraddr $9fffe6 + .faraddr $9fffe7 + .faraddr $9fffe8 + .faraddr $9fffe9 + .faraddr $9fffea + .faraddr $9fffeb + .faraddr $9fffec + .faraddr $9fffed + .faraddr $9fffee + .faraddr $9fffef + .faraddr $9ffff0 + .faraddr $9ffff1 + .faraddr $9ffff2 + .faraddr $9ffff3 + .faraddr $9ffff4 + .faraddr $9ffff5 + .faraddr $9ffff6 + .faraddr $9ffff7 + .faraddr $9ffff8 + .faraddr $9ffff9 + .faraddr $9ffffa + .faraddr $9ffffb + .faraddr $9ffffc + .faraddr $9ffffd + .faraddr $9ffffe + .faraddr $9fffff + .faraddr $a00000 + .faraddr $a00001 + .faraddr $a00002 + .faraddr $a00003 + .faraddr $a00004 + .faraddr $a00005 + .faraddr $a00006 + .faraddr $a00007 + .faraddr $a00008 + .faraddr $a00009 + .faraddr $a0000a + .faraddr $a0000b + .faraddr $a0000c + .faraddr $a0000d + .faraddr $a0000e + .faraddr $a0000f + .faraddr $ffffe1 + .faraddr $ffffe2 + .faraddr $ffffe3 + .faraddr $ffffe4 + .faraddr $ffffe5 + .faraddr $ffffe6 + .faraddr $ffffe7 + .faraddr $ffffe8 + .faraddr $ffffe9 + .faraddr $ffffea + .faraddr $ffffeb + .faraddr $ffffec + .faraddr $ffffed + .faraddr $ffffee + .faraddr $ffffef + .faraddr $fffff0 + .faraddr $fffff1 + .faraddr $fffff2 + .faraddr $fffff3 + .faraddr $fffff4 + .faraddr $fffff5 + .faraddr $fffff6 + .faraddr $fffff7 + .faraddr $fffff8 + .faraddr $fffff9 + .faraddr $fffffa + .faraddr $fffffb + .faraddr $fffffc + .faraddr $fffffd + .faraddr $fffffe + .faraddr $ffffff + + ; hex values, uppercase + .faraddr $0 + .faraddr $1 + .faraddr $2 + .faraddr $3 + .faraddr $4 + .faraddr $5 + .faraddr $6 + .faraddr $7 + .faraddr $8 + .faraddr $9 + .faraddr $A + .faraddr $B + .faraddr $C + .faraddr $D + .faraddr $E + .faraddr $F + .faraddr $10 + .faraddr $11 + .faraddr $12 + .faraddr $13 + .faraddr $70 + .faraddr $71 + .faraddr $72 + .faraddr $73 + .faraddr $74 + .faraddr $75 + .faraddr $76 + .faraddr $77 + .faraddr $78 + .faraddr $79 + .faraddr $7A + .faraddr $7B + .faraddr $7C + .faraddr $7D + .faraddr $7E + .faraddr $7F + .faraddr $80 + .faraddr $81 + .faraddr $82 + .faraddr $83 + .faraddr $84 + .faraddr $85 + .faraddr $86 + .faraddr $F0 + .faraddr $F1 + .faraddr $F2 + .faraddr $F3 + .faraddr $F4 + .faraddr $F5 + .faraddr $F6 + .faraddr $F7 + .faraddr $F8 + .faraddr $F9 + .faraddr $FA + .faraddr $FB + .faraddr $FC + .faraddr $FD + .faraddr $FE + .faraddr $FF + .faraddr $100 + .faraddr $101 + .faraddr $102 + .faraddr $103 + .faraddr $FD2 + .faraddr $FD3 + .faraddr $FD4 + .faraddr $FD5 + .faraddr $FD6 + .faraddr $FD7 + .faraddr $FD8 + .faraddr $FD9 + .faraddr $FDA + .faraddr $FDB + .faraddr $FDC + .faraddr $FDD + .faraddr $FDE + .faraddr $FDF + .faraddr $FE0 + .faraddr $FE1 + .faraddr $FE2 + .faraddr $FE3 + .faraddr $FE4 + .faraddr $FE5 + .faraddr $FE6 + .faraddr $FE7 + .faraddr $FE8 + .faraddr $FE9 + .faraddr $FEA + .faraddr $FEB + .faraddr $FEC + .faraddr $FED + .faraddr $FEE + .faraddr $FEF + .faraddr $FF0 + .faraddr $FF1 + .faraddr $FF2 + .faraddr $FF3 + .faraddr $FF4 + .faraddr $FF5 + .faraddr $FF6 + .faraddr $FF7 + .faraddr $FF8 + .faraddr $FF9 + .faraddr $FFA + .faraddr $FFB + .faraddr $FFC + .faraddr $FFD + .faraddr $FFE + .faraddr $FFF + .faraddr $1000 + .faraddr $1001 + .faraddr $1002 + .faraddr $1003 + .faraddr $1004 + .faraddr $1005 + .faraddr $1006 + .faraddr $1007 + .faraddr $1008 + .faraddr $7FF0 + .faraddr $7FF1 + .faraddr $7FF2 + .faraddr $7FF3 + .faraddr $7FF4 + .faraddr $7FF5 + .faraddr $7FF6 + .faraddr $7FF7 + .faraddr $7FF8 + .faraddr $7FF9 + .faraddr $7FFA + .faraddr $7FFB + .faraddr $7FFC + .faraddr $7FFD + .faraddr $7FFE + .faraddr $7FFF + .faraddr $8000 + .faraddr $8001 + .faraddr $8002 + .faraddr $8003 + .faraddr $8004 + .faraddr $8005 + .faraddr $8006 + .faraddr $8007 + .faraddr $8008 + .faraddr $8009 + .faraddr $800A + .faraddr $800B + .faraddr $9FE1 + .faraddr $9FE2 + .faraddr $9FE3 + .faraddr $9FE4 + .faraddr $9FE5 + .faraddr $9FE6 + .faraddr $9FE7 + .faraddr $9FE8 + .faraddr $9FE9 + .faraddr $9FEA + .faraddr $9FEB + .faraddr $9FEC + .faraddr $9FED + .faraddr $9FEE + .faraddr $9FEF + .faraddr $9FF0 + .faraddr $9FF1 + .faraddr $9FF2 + .faraddr $9FF3 + .faraddr $9FF4 + .faraddr $9FF5 + .faraddr $9FF6 + .faraddr $9FF7 + .faraddr $9FF8 + .faraddr $9FF9 + .faraddr $9FFA + .faraddr $9FFB + .faraddr $9FFC + .faraddr $9FFD + .faraddr $9FFE + .faraddr $9FFF + .faraddr $A000 + .faraddr $A001 + .faraddr $A002 + .faraddr $A003 + .faraddr $A004 + .faraddr $A005 + .faraddr $A006 + .faraddr $A007 + .faraddr $A008 + .faraddr $A009 + .faraddr $A00A + .faraddr $A00B + .faraddr $A00C + .faraddr $A00D + .faraddr $A00E + .faraddr $A00F + .faraddr $AFE1 + .faraddr $AFE2 + .faraddr $AFE3 + .faraddr $AFE4 + .faraddr $AFE5 + .faraddr $AFE6 + .faraddr $AFE7 + .faraddr $AFE8 + .faraddr $AFE9 + .faraddr $AFEA + .faraddr $AFEB + .faraddr $AFEC + .faraddr $AFED + .faraddr $AFEE + .faraddr $AFEF + .faraddr $AFF0 + .faraddr $AFF1 + .faraddr $AFF2 + .faraddr $AFF3 + .faraddr $AFF4 + .faraddr $AFF5 + .faraddr $AFF6 + .faraddr $AFF7 + .faraddr $AFF8 + .faraddr $AFF9 + .faraddr $AFFA + .faraddr $AFFB + .faraddr $AFFC + .faraddr $AFFD + .faraddr $AFFE + .faraddr $AFFF + .faraddr $B000 + .faraddr $B001 + .faraddr $B002 + .faraddr $B003 + .faraddr $B004 + .faraddr $B005 + .faraddr $B006 + .faraddr $B007 + .faraddr $B008 + .faraddr $B009 + .faraddr $B00A + .faraddr $B00B + .faraddr $B00C + .faraddr $B00D + .faraddr $B00E + .faraddr $B00F + .faraddr $FFE1 + .faraddr $FFE2 + .faraddr $FFE3 + .faraddr $FFE4 + .faraddr $FFE5 + .faraddr $FFE6 + .faraddr $FFE7 + .faraddr $FFE8 + .faraddr $FFE9 + .faraddr $FFEA + .faraddr $FFEB + .faraddr $FFEC + .faraddr $FFED + .faraddr $FFEE + .faraddr $FFEF + .faraddr $FFF0 + .faraddr $FFF1 + .faraddr $FFF2 + .faraddr $FFF3 + .faraddr $FFF4 + .faraddr $FFF5 + .faraddr $FFF6 + .faraddr $FFF7 + .faraddr $FFF8 + .faraddr $FFF9 + .faraddr $FFFA + .faraddr $FFFB + .faraddr $FFFC + .faraddr $FFFD + .faraddr $FFFE + .faraddr $FFFF + .faraddr $10000 + .faraddr $10001 + .faraddr $10002 + .faraddr $10003 + .faraddr $10004 + .faraddr $10005 + .faraddr $10006 + .faraddr $10007 + .faraddr $10008 + .faraddr $10009 + .faraddr $1000A + .faraddr $1000B + .faraddr $1000C + .faraddr $1000D + .faraddr $1000E + .faraddr $1000F + .faraddr $10FFE1 + .faraddr $10FFE2 + .faraddr $10FFE3 + .faraddr $10FFE4 + .faraddr $10FFE5 + .faraddr $10FFE6 + .faraddr $10FFE7 + .faraddr $10FFE8 + .faraddr $10FFE9 + .faraddr $10FFEA + .faraddr $10FFEB + .faraddr $10FFEC + .faraddr $10FFED + .faraddr $10FFEE + .faraddr $10FFEF + .faraddr $10FFF0 + .faraddr $10FFF1 + .faraddr $10FFF2 + .faraddr $10FFF3 + .faraddr $10FFF4 + .faraddr $10FFF5 + .faraddr $10FFF6 + .faraddr $10FFF7 + .faraddr $10FFF8 + .faraddr $10FFF9 + .faraddr $10FFFA + .faraddr $10FFFB + .faraddr $10FFFC + .faraddr $10FFFD + .faraddr $10FFFE + .faraddr $10FFFF + .faraddr $110000 + .faraddr $110001 + .faraddr $110002 + .faraddr $110003 + .faraddr $110004 + .faraddr $110005 + .faraddr $110006 + .faraddr $110007 + .faraddr $110008 + .faraddr $110009 + .faraddr $11000A + .faraddr $11000B + .faraddr $11000C + .faraddr $11000D + .faraddr $11000E + .faraddr $11000F + .faraddr $20FFE1 + .faraddr $20FFE2 + .faraddr $20FFE3 + .faraddr $20FFE4 + .faraddr $20FFE5 + .faraddr $20FFE6 + .faraddr $20FFE7 + .faraddr $20FFE8 + .faraddr $20FFE9 + .faraddr $20FFEA + .faraddr $20FFEB + .faraddr $20FFEC + .faraddr $20FFED + .faraddr $20FFEE + .faraddr $20FFEF + .faraddr $20FFF0 + .faraddr $20FFF1 + .faraddr $20FFF2 + .faraddr $20FFF3 + .faraddr $20FFF4 + .faraddr $20FFF5 + .faraddr $20FFF6 + .faraddr $20FFF7 + .faraddr $20FFF8 + .faraddr $20FFF9 + .faraddr $20FFFA + .faraddr $20FFFB + .faraddr $20FFFC + .faraddr $20FFFD + .faraddr $20FFFE + .faraddr $20FFFF + .faraddr $210000 + .faraddr $210001 + .faraddr $210002 + .faraddr $210003 + .faraddr $210004 + .faraddr $210005 + .faraddr $210006 + .faraddr $210007 + .faraddr $210008 + .faraddr $210009 + .faraddr $21000A + .faraddr $21000B + .faraddr $21000C + .faraddr $21000D + .faraddr $21000E + .faraddr $21000F + .faraddr $7FFFE1 + .faraddr $7FFFE2 + .faraddr $7FFFE3 + .faraddr $7FFFE4 + .faraddr $7FFFE5 + .faraddr $7FFFE6 + .faraddr $7FFFE7 + .faraddr $7FFFE8 + .faraddr $7FFFE9 + .faraddr $7FFFEA + .faraddr $7FFFEB + .faraddr $7FFFEC + .faraddr $7FFFED + .faraddr $7FFFEE + .faraddr $7FFFEF + .faraddr $7FFFF0 + .faraddr $7FFFF1 + .faraddr $7FFFF2 + .faraddr $7FFFF3 + .faraddr $7FFFF4 + .faraddr $7FFFF5 + .faraddr $7FFFF6 + .faraddr $7FFFF7 + .faraddr $7FFFF8 + .faraddr $7FFFF9 + .faraddr $7FFFFA + .faraddr $7FFFFB + .faraddr $7FFFFC + .faraddr $7FFFFD + .faraddr $7FFFFE + .faraddr $7FFFFF + .faraddr $800000 + .faraddr $800001 + .faraddr $800002 + .faraddr $800003 + .faraddr $800004 + .faraddr $800005 + .faraddr $800006 + .faraddr $800007 + .faraddr $800008 + .faraddr $800009 + .faraddr $80000A + .faraddr $80000B + .faraddr $80000C + .faraddr $80000D + .faraddr $80000E + .faraddr $80000F + .faraddr $9FFFE1 + .faraddr $9FFFE2 + .faraddr $9FFFE3 + .faraddr $9FFFE4 + .faraddr $9FFFE5 + .faraddr $9FFFE6 + .faraddr $9FFFE7 + .faraddr $9FFFE8 + .faraddr $9FFFE9 + .faraddr $9FFFEA + .faraddr $9FFFEB + .faraddr $9FFFEC + .faraddr $9FFFED + .faraddr $9FFFEE + .faraddr $9FFFEF + .faraddr $9FFFF0 + .faraddr $9FFFF1 + .faraddr $9FFFF2 + .faraddr $9FFFF3 + .faraddr $9FFFF4 + .faraddr $9FFFF5 + .faraddr $9FFFF6 + .faraddr $9FFFF7 + .faraddr $9FFFF8 + .faraddr $9FFFF9 + .faraddr $9FFFFA + .faraddr $9FFFFB + .faraddr $9FFFFC + .faraddr $9FFFFD + .faraddr $9FFFFE + .faraddr $9FFFFF + .faraddr $A00000 + .faraddr $A00001 + .faraddr $A00002 + .faraddr $A00003 + .faraddr $A00004 + .faraddr $A00005 + .faraddr $A00006 + .faraddr $A00007 + .faraddr $A00008 + .faraddr $A00009 + .faraddr $A0000A + .faraddr $A0000B + .faraddr $A0000C + .faraddr $A0000D + .faraddr $A0000E + .faraddr $A0000F + .faraddr $FFFFE1 + .faraddr $FFFFE2 + .faraddr $FFFFE3 + .faraddr $FFFFE4 + .faraddr $FFFFE5 + .faraddr $FFFFE6 + .faraddr $FFFFE7 + .faraddr $FFFFE8 + .faraddr $FFFFE9 + .faraddr $FFFFEA + .faraddr $FFFFEB + .faraddr $FFFFEC + .faraddr $FFFFED + .faraddr $FFFFEE + .faraddr $FFFFEF + .faraddr $FFFFF0 + .faraddr $FFFFF1 + .faraddr $FFFFF2 + .faraddr $FFFFF3 + .faraddr $FFFFF4 + .faraddr $FFFFF5 + .faraddr $FFFFF6 + .faraddr $FFFFF7 + .faraddr $FFFFF8 + .faraddr $FFFFF9 + .faraddr $FFFFFA + .faraddr $FFFFFB + .faraddr $FFFFFC + .faraddr $FFFFFD + .faraddr $FFFFFE + .faraddr $FFFFFF + + ; 8-digit hex values + .faraddr $00000000 + .faraddr $00000001 + .faraddr $00000002 + .faraddr $00000003 + .faraddr $00000004 + .faraddr $00000005 + .faraddr $00000006 + .faraddr $00000007 + .faraddr $00000008 + .faraddr $00000009 + .faraddr $0000000a + .faraddr $0000000b + .faraddr $0000000c + .faraddr $0000000d + .faraddr $0000000e + .faraddr $0000000f + .faraddr $00000010 + .faraddr $00000011 + .faraddr $00000012 + .faraddr $00000013 + .faraddr $00000070 + .faraddr $00000071 + .faraddr $00000072 + .faraddr $00000073 + .faraddr $00000074 + .faraddr $00000075 + .faraddr $00000076 + .faraddr $00000077 + .faraddr $00000078 + .faraddr $00000079 + .faraddr $0000007a + .faraddr $0000007b + .faraddr $0000007c + .faraddr $0000007d + .faraddr $0000007e + .faraddr $0000007f + .faraddr $00000080 + .faraddr $00000081 + .faraddr $00000082 + .faraddr $00000083 + .faraddr $00000084 + .faraddr $00000085 + .faraddr $00000086 + .faraddr $000000f0 + .faraddr $000000f1 + .faraddr $000000f2 + .faraddr $000000f3 + .faraddr $000000f4 + .faraddr $000000f5 + .faraddr $000000f6 + .faraddr $000000f7 + .faraddr $000000f8 + .faraddr $000000f9 + .faraddr $000000fa + .faraddr $000000fb + .faraddr $000000fc + .faraddr $000000fd + .faraddr $000000fe + .faraddr $000000ff + .faraddr $00000100 + .faraddr $00000101 + .faraddr $00000102 + .faraddr $00000103 + .faraddr $00000fd2 + .faraddr $00000fd3 + .faraddr $00000fd4 + .faraddr $00000fd5 + .faraddr $00000fd6 + .faraddr $00000fd7 + .faraddr $00000fd8 + .faraddr $00000fd9 + .faraddr $00000fda + .faraddr $00000fdb + .faraddr $00000fdc + .faraddr $00000fdd + .faraddr $00000fde + .faraddr $00000fdf + .faraddr $00000fe0 + .faraddr $00000fe1 + .faraddr $00000fe2 + .faraddr $00000fe3 + .faraddr $00000fe4 + .faraddr $00000fe5 + .faraddr $00000fe6 + .faraddr $00000fe7 + .faraddr $00000fe8 + .faraddr $00000fe9 + .faraddr $00000fea + .faraddr $00000feb + .faraddr $00000fec + .faraddr $00000fed + .faraddr $00000fee + .faraddr $00000fef + .faraddr $00000ff0 + .faraddr $00000ff1 + .faraddr $00000ff2 + .faraddr $00000ff3 + .faraddr $00000ff4 + .faraddr $00000ff5 + .faraddr $00000ff6 + .faraddr $00000ff7 + .faraddr $00000ff8 + .faraddr $00000ff9 + .faraddr $00000ffa + .faraddr $00000ffb + .faraddr $00000ffc + .faraddr $00000ffd + .faraddr $00000ffe + .faraddr $00000fff + .faraddr $00001000 + .faraddr $00001001 + .faraddr $00001002 + .faraddr $00001003 + .faraddr $00001004 + .faraddr $00001005 + .faraddr $00001006 + .faraddr $00001007 + .faraddr $00001008 + .faraddr $00007ff0 + .faraddr $00007ff1 + .faraddr $00007ff2 + .faraddr $00007ff3 + .faraddr $00007ff4 + .faraddr $00007ff5 + .faraddr $00007ff6 + .faraddr $00007ff7 + .faraddr $00007ff8 + .faraddr $00007ff9 + .faraddr $00007ffa + .faraddr $00007ffb + .faraddr $00007ffc + .faraddr $00007ffd + .faraddr $00007ffe + .faraddr $00007fff + .faraddr $00008000 + .faraddr $00008001 + .faraddr $00008002 + .faraddr $00008003 + .faraddr $00008004 + .faraddr $00008005 + .faraddr $00008006 + .faraddr $00008007 + .faraddr $00008008 + .faraddr $00008009 + .faraddr $0000800a + .faraddr $0000800b + .faraddr $00009fe1 + .faraddr $00009fe2 + .faraddr $00009fe3 + .faraddr $00009fe4 + .faraddr $00009fe5 + .faraddr $00009fe6 + .faraddr $00009fe7 + .faraddr $00009fe8 + .faraddr $00009fe9 + .faraddr $00009fea + .faraddr $00009feb + .faraddr $00009fec + .faraddr $00009fed + .faraddr $00009fee + .faraddr $00009fef + .faraddr $00009ff0 + .faraddr $00009ff1 + .faraddr $00009ff2 + .faraddr $00009ff3 + .faraddr $00009ff4 + .faraddr $00009ff5 + .faraddr $00009ff6 + .faraddr $00009ff7 + .faraddr $00009ff8 + .faraddr $00009ff9 + .faraddr $00009ffa + .faraddr $00009ffb + .faraddr $00009ffc + .faraddr $00009ffd + .faraddr $00009ffe + .faraddr $00009fff + .faraddr $0000a000 + .faraddr $0000a001 + .faraddr $0000a002 + .faraddr $0000a003 + .faraddr $0000a004 + .faraddr $0000a005 + .faraddr $0000a006 + .faraddr $0000a007 + .faraddr $0000a008 + .faraddr $0000a009 + .faraddr $0000a00a + .faraddr $0000a00b + .faraddr $0000a00c + .faraddr $0000a00d + .faraddr $0000a00e + .faraddr $0000a00f + .faraddr $0000afe1 + .faraddr $0000afe2 + .faraddr $0000afe3 + .faraddr $0000afe4 + .faraddr $0000afe5 + .faraddr $0000afe6 + .faraddr $0000afe7 + .faraddr $0000afe8 + .faraddr $0000afe9 + .faraddr $0000afea + .faraddr $0000afeb + .faraddr $0000afec + .faraddr $0000afed + .faraddr $0000afee + .faraddr $0000afef + .faraddr $0000aff0 + .faraddr $0000aff1 + .faraddr $0000aff2 + .faraddr $0000aff3 + .faraddr $0000aff4 + .faraddr $0000aff5 + .faraddr $0000aff6 + .faraddr $0000aff7 + .faraddr $0000aff8 + .faraddr $0000aff9 + .faraddr $0000affa + .faraddr $0000affb + .faraddr $0000affc + .faraddr $0000affd + .faraddr $0000affe + .faraddr $0000afff + .faraddr $0000b000 + .faraddr $0000b001 + .faraddr $0000b002 + .faraddr $0000b003 + .faraddr $0000b004 + .faraddr $0000b005 + .faraddr $0000b006 + .faraddr $0000b007 + .faraddr $0000b008 + .faraddr $0000b009 + .faraddr $0000b00a + .faraddr $0000b00b + .faraddr $0000b00c + .faraddr $0000b00d + .faraddr $0000b00e + .faraddr $0000b00f + .faraddr $0000ffe1 + .faraddr $0000ffe2 + .faraddr $0000ffe3 + .faraddr $0000ffe4 + .faraddr $0000ffe5 + .faraddr $0000ffe6 + .faraddr $0000ffe7 + .faraddr $0000ffe8 + .faraddr $0000ffe9 + .faraddr $0000ffea + .faraddr $0000ffeb + .faraddr $0000ffec + .faraddr $0000ffed + .faraddr $0000ffee + .faraddr $0000ffef + .faraddr $0000fff0 + .faraddr $0000fff1 + .faraddr $0000fff2 + .faraddr $0000fff3 + .faraddr $0000fff4 + .faraddr $0000fff5 + .faraddr $0000fff6 + .faraddr $0000fff7 + .faraddr $0000fff8 + .faraddr $0000fff9 + .faraddr $0000fffa + .faraddr $0000fffb + .faraddr $0000fffc + .faraddr $0000fffd + .faraddr $0000fffe + .faraddr $0000ffff + .faraddr $00010000 + .faraddr $00010001 + .faraddr $00010002 + .faraddr $00010003 + .faraddr $00010004 + .faraddr $00010005 + .faraddr $00010006 + .faraddr $00010007 + .faraddr $00010008 + .faraddr $00010009 + .faraddr $0001000a + .faraddr $0001000b + .faraddr $0001000c + .faraddr $0001000d + .faraddr $0001000e + .faraddr $0001000f + .faraddr $0010ffe1 + .faraddr $0010ffe2 + .faraddr $0010ffe3 + .faraddr $0010ffe4 + .faraddr $0010ffe5 + .faraddr $0010ffe6 + .faraddr $0010ffe7 + .faraddr $0010ffe8 + .faraddr $0010ffe9 + .faraddr $0010ffea + .faraddr $0010ffeb + .faraddr $0010ffec + .faraddr $0010ffed + .faraddr $0010ffee + .faraddr $0010ffef + .faraddr $0010fff0 + .faraddr $0010fff1 + .faraddr $0010fff2 + .faraddr $0010fff3 + .faraddr $0010fff4 + .faraddr $0010fff5 + .faraddr $0010fff6 + .faraddr $0010fff7 + .faraddr $0010fff8 + .faraddr $0010fff9 + .faraddr $0010fffa + .faraddr $0010fffb + .faraddr $0010fffc + .faraddr $0010fffd + .faraddr $0010fffe + .faraddr $0010ffff + .faraddr $00110000 + .faraddr $00110001 + .faraddr $00110002 + .faraddr $00110003 + .faraddr $00110004 + .faraddr $00110005 + .faraddr $00110006 + .faraddr $00110007 + .faraddr $00110008 + .faraddr $00110009 + .faraddr $0011000a + .faraddr $0011000b + .faraddr $0011000c + .faraddr $0011000d + .faraddr $0011000e + .faraddr $0011000f + .faraddr $0020ffe1 + .faraddr $0020ffe2 + .faraddr $0020ffe3 + .faraddr $0020ffe4 + .faraddr $0020ffe5 + .faraddr $0020ffe6 + .faraddr $0020ffe7 + .faraddr $0020ffe8 + .faraddr $0020ffe9 + .faraddr $0020ffea + .faraddr $0020ffeb + .faraddr $0020ffec + .faraddr $0020ffed + .faraddr $0020ffee + .faraddr $0020ffef + .faraddr $0020fff0 + .faraddr $0020fff1 + .faraddr $0020fff2 + .faraddr $0020fff3 + .faraddr $0020fff4 + .faraddr $0020fff5 + .faraddr $0020fff6 + .faraddr $0020fff7 + .faraddr $0020fff8 + .faraddr $0020fff9 + .faraddr $0020fffa + .faraddr $0020fffb + .faraddr $0020fffc + .faraddr $0020fffd + .faraddr $0020fffe + .faraddr $0020ffff + .faraddr $00210000 + .faraddr $00210001 + .faraddr $00210002 + .faraddr $00210003 + .faraddr $00210004 + .faraddr $00210005 + .faraddr $00210006 + .faraddr $00210007 + .faraddr $00210008 + .faraddr $00210009 + .faraddr $0021000a + .faraddr $0021000b + .faraddr $0021000c + .faraddr $0021000d + .faraddr $0021000e + .faraddr $0021000f + .faraddr $007fffe1 + .faraddr $007fffe2 + .faraddr $007fffe3 + .faraddr $007fffe4 + .faraddr $007fffe5 + .faraddr $007fffe6 + .faraddr $007fffe7 + .faraddr $007fffe8 + .faraddr $007fffe9 + .faraddr $007fffea + .faraddr $007fffeb + .faraddr $007fffec + .faraddr $007fffed + .faraddr $007fffee + .faraddr $007fffef + .faraddr $007ffff0 + .faraddr $007ffff1 + .faraddr $007ffff2 + .faraddr $007ffff3 + .faraddr $007ffff4 + .faraddr $007ffff5 + .faraddr $007ffff6 + .faraddr $007ffff7 + .faraddr $007ffff8 + .faraddr $007ffff9 + .faraddr $007ffffa + .faraddr $007ffffb + .faraddr $007ffffc + .faraddr $007ffffd + .faraddr $007ffffe + .faraddr $007fffff + .faraddr $00800000 + .faraddr $00800001 + .faraddr $00800002 + .faraddr $00800003 + .faraddr $00800004 + .faraddr $00800005 + .faraddr $00800006 + .faraddr $00800007 + .faraddr $00800008 + .faraddr $00800009 + .faraddr $0080000a + .faraddr $0080000b + .faraddr $0080000c + .faraddr $0080000d + .faraddr $0080000e + .faraddr $0080000f + .faraddr $009fffe1 + .faraddr $009fffe2 + .faraddr $009fffe3 + .faraddr $009fffe4 + .faraddr $009fffe5 + .faraddr $009fffe6 + .faraddr $009fffe7 + .faraddr $009fffe8 + .faraddr $009fffe9 + .faraddr $009fffea + .faraddr $009fffeb + .faraddr $009fffec + .faraddr $009fffed + .faraddr $009fffee + .faraddr $009fffef + .faraddr $009ffff0 + .faraddr $009ffff1 + .faraddr $009ffff2 + .faraddr $009ffff3 + .faraddr $009ffff4 + .faraddr $009ffff5 + .faraddr $009ffff6 + .faraddr $009ffff7 + .faraddr $009ffff8 + .faraddr $009ffff9 + .faraddr $009ffffa + .faraddr $009ffffb + .faraddr $009ffffc + .faraddr $009ffffd + .faraddr $009ffffe + .faraddr $009fffff + .faraddr $00a00000 + .faraddr $00a00001 + .faraddr $00a00002 + .faraddr $00a00003 + .faraddr $00a00004 + .faraddr $00a00005 + .faraddr $00a00006 + .faraddr $00a00007 + .faraddr $00a00008 + .faraddr $00a00009 + .faraddr $00a0000a + .faraddr $00a0000b + .faraddr $00a0000c + .faraddr $00a0000d + .faraddr $00a0000e + .faraddr $00a0000f + .faraddr $00ffffe1 + .faraddr $00ffffe2 + .faraddr $00ffffe3 + .faraddr $00ffffe4 + .faraddr $00ffffe5 + .faraddr $00ffffe6 + .faraddr $00ffffe7 + .faraddr $00ffffe8 + .faraddr $00ffffe9 + .faraddr $00ffffea + .faraddr $00ffffeb + .faraddr $00ffffec + .faraddr $00ffffed + .faraddr $00ffffee + .faraddr $00ffffef + .faraddr $00fffff0 + .faraddr $00fffff1 + .faraddr $00fffff2 + .faraddr $00fffff3 + .faraddr $00fffff4 + .faraddr $00fffff5 + .faraddr $00fffff6 + .faraddr $00fffff7 + .faraddr $00fffff8 + .faraddr $00fffff9 + .faraddr $00fffffa + .faraddr $00fffffb + .faraddr $00fffffc + .faraddr $00fffffd + .faraddr $00fffffe + .faraddr $00ffffff + + ; 8-digit hex values, uppercase + .faraddr $00000000 + .faraddr $00000001 + .faraddr $00000002 + .faraddr $00000003 + .faraddr $00000004 + .faraddr $00000005 + .faraddr $00000006 + .faraddr $00000007 + .faraddr $00000008 + .faraddr $00000009 + .faraddr $0000000A + .faraddr $0000000B + .faraddr $0000000C + .faraddr $0000000D + .faraddr $0000000E + .faraddr $0000000F + .faraddr $00000010 + .faraddr $00000011 + .faraddr $00000012 + .faraddr $00000013 + .faraddr $00000070 + .faraddr $00000071 + .faraddr $00000072 + .faraddr $00000073 + .faraddr $00000074 + .faraddr $00000075 + .faraddr $00000076 + .faraddr $00000077 + .faraddr $00000078 + .faraddr $00000079 + .faraddr $0000007A + .faraddr $0000007B + .faraddr $0000007C + .faraddr $0000007D + .faraddr $0000007E + .faraddr $0000007F + .faraddr $00000080 + .faraddr $00000081 + .faraddr $00000082 + .faraddr $00000083 + .faraddr $00000084 + .faraddr $00000085 + .faraddr $00000086 + .faraddr $000000F0 + .faraddr $000000F1 + .faraddr $000000F2 + .faraddr $000000F3 + .faraddr $000000F4 + .faraddr $000000F5 + .faraddr $000000F6 + .faraddr $000000F7 + .faraddr $000000F8 + .faraddr $000000F9 + .faraddr $000000FA + .faraddr $000000FB + .faraddr $000000FC + .faraddr $000000FD + .faraddr $000000FE + .faraddr $000000FF + .faraddr $00000100 + .faraddr $00000101 + .faraddr $00000102 + .faraddr $00000103 + .faraddr $00000FD2 + .faraddr $00000FD3 + .faraddr $00000FD4 + .faraddr $00000FD5 + .faraddr $00000FD6 + .faraddr $00000FD7 + .faraddr $00000FD8 + .faraddr $00000FD9 + .faraddr $00000FDA + .faraddr $00000FDB + .faraddr $00000FDC + .faraddr $00000FDD + .faraddr $00000FDE + .faraddr $00000FDF + .faraddr $00000FE0 + .faraddr $00000FE1 + .faraddr $00000FE2 + .faraddr $00000FE3 + .faraddr $00000FE4 + .faraddr $00000FE5 + .faraddr $00000FE6 + .faraddr $00000FE7 + .faraddr $00000FE8 + .faraddr $00000FE9 + .faraddr $00000FEA + .faraddr $00000FEB + .faraddr $00000FEC + .faraddr $00000FED + .faraddr $00000FEE + .faraddr $00000FEF + .faraddr $00000FF0 + .faraddr $00000FF1 + .faraddr $00000FF2 + .faraddr $00000FF3 + .faraddr $00000FF4 + .faraddr $00000FF5 + .faraddr $00000FF6 + .faraddr $00000FF7 + .faraddr $00000FF8 + .faraddr $00000FF9 + .faraddr $00000FFA + .faraddr $00000FFB + .faraddr $00000FFC + .faraddr $00000FFD + .faraddr $00000FFE + .faraddr $00000FFF + .faraddr $00001000 + .faraddr $00001001 + .faraddr $00001002 + .faraddr $00001003 + .faraddr $00001004 + .faraddr $00001005 + .faraddr $00001006 + .faraddr $00001007 + .faraddr $00001008 + .faraddr $00007FF0 + .faraddr $00007FF1 + .faraddr $00007FF2 + .faraddr $00007FF3 + .faraddr $00007FF4 + .faraddr $00007FF5 + .faraddr $00007FF6 + .faraddr $00007FF7 + .faraddr $00007FF8 + .faraddr $00007FF9 + .faraddr $00007FFA + .faraddr $00007FFB + .faraddr $00007FFC + .faraddr $00007FFD + .faraddr $00007FFE + .faraddr $00007FFF + .faraddr $00008000 + .faraddr $00008001 + .faraddr $00008002 + .faraddr $00008003 + .faraddr $00008004 + .faraddr $00008005 + .faraddr $00008006 + .faraddr $00008007 + .faraddr $00008008 + .faraddr $00008009 + .faraddr $0000800A + .faraddr $0000800B + .faraddr $00009FE1 + .faraddr $00009FE2 + .faraddr $00009FE3 + .faraddr $00009FE4 + .faraddr $00009FE5 + .faraddr $00009FE6 + .faraddr $00009FE7 + .faraddr $00009FE8 + .faraddr $00009FE9 + .faraddr $00009FEA + .faraddr $00009FEB + .faraddr $00009FEC + .faraddr $00009FED + .faraddr $00009FEE + .faraddr $00009FEF + .faraddr $00009FF0 + .faraddr $00009FF1 + .faraddr $00009FF2 + .faraddr $00009FF3 + .faraddr $00009FF4 + .faraddr $00009FF5 + .faraddr $00009FF6 + .faraddr $00009FF7 + .faraddr $00009FF8 + .faraddr $00009FF9 + .faraddr $00009FFA + .faraddr $00009FFB + .faraddr $00009FFC + .faraddr $00009FFD + .faraddr $00009FFE + .faraddr $00009FFF + .faraddr $0000A000 + .faraddr $0000A001 + .faraddr $0000A002 + .faraddr $0000A003 + .faraddr $0000A004 + .faraddr $0000A005 + .faraddr $0000A006 + .faraddr $0000A007 + .faraddr $0000A008 + .faraddr $0000A009 + .faraddr $0000A00A + .faraddr $0000A00B + .faraddr $0000A00C + .faraddr $0000A00D + .faraddr $0000A00E + .faraddr $0000A00F + .faraddr $0000AFE1 + .faraddr $0000AFE2 + .faraddr $0000AFE3 + .faraddr $0000AFE4 + .faraddr $0000AFE5 + .faraddr $0000AFE6 + .faraddr $0000AFE7 + .faraddr $0000AFE8 + .faraddr $0000AFE9 + .faraddr $0000AFEA + .faraddr $0000AFEB + .faraddr $0000AFEC + .faraddr $0000AFED + .faraddr $0000AFEE + .faraddr $0000AFEF + .faraddr $0000AFF0 + .faraddr $0000AFF1 + .faraddr $0000AFF2 + .faraddr $0000AFF3 + .faraddr $0000AFF4 + .faraddr $0000AFF5 + .faraddr $0000AFF6 + .faraddr $0000AFF7 + .faraddr $0000AFF8 + .faraddr $0000AFF9 + .faraddr $0000AFFA + .faraddr $0000AFFB + .faraddr $0000AFFC + .faraddr $0000AFFD + .faraddr $0000AFFE + .faraddr $0000AFFF + .faraddr $0000B000 + .faraddr $0000B001 + .faraddr $0000B002 + .faraddr $0000B003 + .faraddr $0000B004 + .faraddr $0000B005 + .faraddr $0000B006 + .faraddr $0000B007 + .faraddr $0000B008 + .faraddr $0000B009 + .faraddr $0000B00A + .faraddr $0000B00B + .faraddr $0000B00C + .faraddr $0000B00D + .faraddr $0000B00E + .faraddr $0000B00F + .faraddr $0000FFE1 + .faraddr $0000FFE2 + .faraddr $0000FFE3 + .faraddr $0000FFE4 + .faraddr $0000FFE5 + .faraddr $0000FFE6 + .faraddr $0000FFE7 + .faraddr $0000FFE8 + .faraddr $0000FFE9 + .faraddr $0000FFEA + .faraddr $0000FFEB + .faraddr $0000FFEC + .faraddr $0000FFED + .faraddr $0000FFEE + .faraddr $0000FFEF + .faraddr $0000FFF0 + .faraddr $0000FFF1 + .faraddr $0000FFF2 + .faraddr $0000FFF3 + .faraddr $0000FFF4 + .faraddr $0000FFF5 + .faraddr $0000FFF6 + .faraddr $0000FFF7 + .faraddr $0000FFF8 + .faraddr $0000FFF9 + .faraddr $0000FFFA + .faraddr $0000FFFB + .faraddr $0000FFFC + .faraddr $0000FFFD + .faraddr $0000FFFE + .faraddr $0000FFFF + .faraddr $00010000 + .faraddr $00010001 + .faraddr $00010002 + .faraddr $00010003 + .faraddr $00010004 + .faraddr $00010005 + .faraddr $00010006 + .faraddr $00010007 + .faraddr $00010008 + .faraddr $00010009 + .faraddr $0001000A + .faraddr $0001000B + .faraddr $0001000C + .faraddr $0001000D + .faraddr $0001000E + .faraddr $0001000F + .faraddr $0010FFE1 + .faraddr $0010FFE2 + .faraddr $0010FFE3 + .faraddr $0010FFE4 + .faraddr $0010FFE5 + .faraddr $0010FFE6 + .faraddr $0010FFE7 + .faraddr $0010FFE8 + .faraddr $0010FFE9 + .faraddr $0010FFEA + .faraddr $0010FFEB + .faraddr $0010FFEC + .faraddr $0010FFED + .faraddr $0010FFEE + .faraddr $0010FFEF + .faraddr $0010FFF0 + .faraddr $0010FFF1 + .faraddr $0010FFF2 + .faraddr $0010FFF3 + .faraddr $0010FFF4 + .faraddr $0010FFF5 + .faraddr $0010FFF6 + .faraddr $0010FFF7 + .faraddr $0010FFF8 + .faraddr $0010FFF9 + .faraddr $0010FFFA + .faraddr $0010FFFB + .faraddr $0010FFFC + .faraddr $0010FFFD + .faraddr $0010FFFE + .faraddr $0010FFFF + .faraddr $00110000 + .faraddr $00110001 + .faraddr $00110002 + .faraddr $00110003 + .faraddr $00110004 + .faraddr $00110005 + .faraddr $00110006 + .faraddr $00110007 + .faraddr $00110008 + .faraddr $00110009 + .faraddr $0011000A + .faraddr $0011000B + .faraddr $0011000C + .faraddr $0011000D + .faraddr $0011000E + .faraddr $0011000F + .faraddr $0020FFE1 + .faraddr $0020FFE2 + .faraddr $0020FFE3 + .faraddr $0020FFE4 + .faraddr $0020FFE5 + .faraddr $0020FFE6 + .faraddr $0020FFE7 + .faraddr $0020FFE8 + .faraddr $0020FFE9 + .faraddr $0020FFEA + .faraddr $0020FFEB + .faraddr $0020FFEC + .faraddr $0020FFED + .faraddr $0020FFEE + .faraddr $0020FFEF + .faraddr $0020FFF0 + .faraddr $0020FFF1 + .faraddr $0020FFF2 + .faraddr $0020FFF3 + .faraddr $0020FFF4 + .faraddr $0020FFF5 + .faraddr $0020FFF6 + .faraddr $0020FFF7 + .faraddr $0020FFF8 + .faraddr $0020FFF9 + .faraddr $0020FFFA + .faraddr $0020FFFB + .faraddr $0020FFFC + .faraddr $0020FFFD + .faraddr $0020FFFE + .faraddr $0020FFFF + .faraddr $00210000 + .faraddr $00210001 + .faraddr $00210002 + .faraddr $00210003 + .faraddr $00210004 + .faraddr $00210005 + .faraddr $00210006 + .faraddr $00210007 + .faraddr $00210008 + .faraddr $00210009 + .faraddr $0021000A + .faraddr $0021000B + .faraddr $0021000C + .faraddr $0021000D + .faraddr $0021000E + .faraddr $0021000F + .faraddr $007FFFE1 + .faraddr $007FFFE2 + .faraddr $007FFFE3 + .faraddr $007FFFE4 + .faraddr $007FFFE5 + .faraddr $007FFFE6 + .faraddr $007FFFE7 + .faraddr $007FFFE8 + .faraddr $007FFFE9 + .faraddr $007FFFEA + .faraddr $007FFFEB + .faraddr $007FFFEC + .faraddr $007FFFED + .faraddr $007FFFEE + .faraddr $007FFFEF + .faraddr $007FFFF0 + .faraddr $007FFFF1 + .faraddr $007FFFF2 + .faraddr $007FFFF3 + .faraddr $007FFFF4 + .faraddr $007FFFF5 + .faraddr $007FFFF6 + .faraddr $007FFFF7 + .faraddr $007FFFF8 + .faraddr $007FFFF9 + .faraddr $007FFFFA + .faraddr $007FFFFB + .faraddr $007FFFFC + .faraddr $007FFFFD + .faraddr $007FFFFE + .faraddr $007FFFFF + .faraddr $00800000 + .faraddr $00800001 + .faraddr $00800002 + .faraddr $00800003 + .faraddr $00800004 + .faraddr $00800005 + .faraddr $00800006 + .faraddr $00800007 + .faraddr $00800008 + .faraddr $00800009 + .faraddr $0080000A + .faraddr $0080000B + .faraddr $0080000C + .faraddr $0080000D + .faraddr $0080000E + .faraddr $0080000F + .faraddr $009FFFE1 + .faraddr $009FFFE2 + .faraddr $009FFFE3 + .faraddr $009FFFE4 + .faraddr $009FFFE5 + .faraddr $009FFFE6 + .faraddr $009FFFE7 + .faraddr $009FFFE8 + .faraddr $009FFFE9 + .faraddr $009FFFEA + .faraddr $009FFFEB + .faraddr $009FFFEC + .faraddr $009FFFED + .faraddr $009FFFEE + .faraddr $009FFFEF + .faraddr $009FFFF0 + .faraddr $009FFFF1 + .faraddr $009FFFF2 + .faraddr $009FFFF3 + .faraddr $009FFFF4 + .faraddr $009FFFF5 + .faraddr $009FFFF6 + .faraddr $009FFFF7 + .faraddr $009FFFF8 + .faraddr $009FFFF9 + .faraddr $009FFFFA + .faraddr $009FFFFB + .faraddr $009FFFFC + .faraddr $009FFFFD + .faraddr $009FFFFE + .faraddr $009FFFFF + .faraddr $00A00000 + .faraddr $00A00001 + .faraddr $00A00002 + .faraddr $00A00003 + .faraddr $00A00004 + .faraddr $00A00005 + .faraddr $00A00006 + .faraddr $00A00007 + .faraddr $00A00008 + .faraddr $00A00009 + .faraddr $00A0000A + .faraddr $00A0000B + .faraddr $00A0000C + .faraddr $00A0000D + .faraddr $00A0000E + .faraddr $00A0000F + .faraddr $00FFFFE1 + .faraddr $00FFFFE2 + .faraddr $00FFFFE3 + .faraddr $00FFFFE4 + .faraddr $00FFFFE5 + .faraddr $00FFFFE6 + .faraddr $00FFFFE7 + .faraddr $00FFFFE8 + .faraddr $00FFFFE9 + .faraddr $00FFFFEA + .faraddr $00FFFFEB + .faraddr $00FFFFEC + .faraddr $00FFFFED + .faraddr $00FFFFEE + .faraddr $00FFFFEF + .faraddr $00FFFFF0 + .faraddr $00FFFFF1 + .faraddr $00FFFFF2 + .faraddr $00FFFFF3 + .faraddr $00FFFFF4 + .faraddr $00FFFFF5 + .faraddr $00FFFFF6 + .faraddr $00FFFFF7 + .faraddr $00FFFFF8 + .faraddr $00FFFFF9 + .faraddr $00FFFFFA + .faraddr $00FFFFFB + .faraddr $00FFFFFC + .faraddr $00FFFFFD + .faraddr $00FFFFFE + .faraddr $00FFFFFF + + ; alternative hex values + .faraddr 0h + .faraddr 1h + .faraddr 2h + .faraddr 3h + .faraddr 4h + .faraddr 5h + .faraddr 6h + .faraddr 7h + .faraddr 8h + .faraddr 9h + .faraddr 0ah + .faraddr 0bh + .faraddr 0ch + .faraddr 0dh + .faraddr 0eh + .faraddr 0fh + .faraddr 10h + .faraddr 11h + .faraddr 12h + .faraddr 13h + .faraddr 70h + .faraddr 71h + .faraddr 72h + .faraddr 73h + .faraddr 74h + .faraddr 75h + .faraddr 76h + .faraddr 77h + .faraddr 78h + .faraddr 79h + .faraddr 7ah + .faraddr 7bh + .faraddr 7ch + .faraddr 7dh + .faraddr 7eh + .faraddr 7fh + .faraddr 80h + .faraddr 81h + .faraddr 82h + .faraddr 83h + .faraddr 84h + .faraddr 85h + .faraddr 86h + .faraddr 0f0h + .faraddr 0f1h + .faraddr 0f2h + .faraddr 0f3h + .faraddr 0f4h + .faraddr 0f5h + .faraddr 0f6h + .faraddr 0f7h + .faraddr 0f8h + .faraddr 0f9h + .faraddr 0fah + .faraddr 0fbh + .faraddr 0fch + .faraddr 0fdh + .faraddr 0feh + .faraddr 0ffh + .faraddr 100h + .faraddr 101h + .faraddr 102h + .faraddr 103h + .faraddr 0fd2h + .faraddr 0fd3h + .faraddr 0fd4h + .faraddr 0fd5h + .faraddr 0fd6h + .faraddr 0fd7h + .faraddr 0fd8h + .faraddr 0fd9h + .faraddr 0fdah + .faraddr 0fdbh + .faraddr 0fdch + .faraddr 0fddh + .faraddr 0fdeh + .faraddr 0fdfh + .faraddr 0fe0h + .faraddr 0fe1h + .faraddr 0fe2h + .faraddr 0fe3h + .faraddr 0fe4h + .faraddr 0fe5h + .faraddr 0fe6h + .faraddr 0fe7h + .faraddr 0fe8h + .faraddr 0fe9h + .faraddr 0feah + .faraddr 0febh + .faraddr 0fech + .faraddr 0fedh + .faraddr 0feeh + .faraddr 0fefh + .faraddr 0ff0h + .faraddr 0ff1h + .faraddr 0ff2h + .faraddr 0ff3h + .faraddr 0ff4h + .faraddr 0ff5h + .faraddr 0ff6h + .faraddr 0ff7h + .faraddr 0ff8h + .faraddr 0ff9h + .faraddr 0ffah + .faraddr 0ffbh + .faraddr 0ffch + .faraddr 0ffdh + .faraddr 0ffeh + .faraddr 0fffh + .faraddr 1000h + .faraddr 1001h + .faraddr 1002h + .faraddr 1003h + .faraddr 1004h + .faraddr 1005h + .faraddr 1006h + .faraddr 1007h + .faraddr 1008h + .faraddr 7ff0h + .faraddr 7ff1h + .faraddr 7ff2h + .faraddr 7ff3h + .faraddr 7ff4h + .faraddr 7ff5h + .faraddr 7ff6h + .faraddr 7ff7h + .faraddr 7ff8h + .faraddr 7ff9h + .faraddr 7ffah + .faraddr 7ffbh + .faraddr 7ffch + .faraddr 7ffdh + .faraddr 7ffeh + .faraddr 7fffh + .faraddr 8000h + .faraddr 8001h + .faraddr 8002h + .faraddr 8003h + .faraddr 8004h + .faraddr 8005h + .faraddr 8006h + .faraddr 8007h + .faraddr 8008h + .faraddr 8009h + .faraddr 800ah + .faraddr 800bh + .faraddr 9fe1h + .faraddr 9fe2h + .faraddr 9fe3h + .faraddr 9fe4h + .faraddr 9fe5h + .faraddr 9fe6h + .faraddr 9fe7h + .faraddr 9fe8h + .faraddr 9fe9h + .faraddr 9feah + .faraddr 9febh + .faraddr 9fech + .faraddr 9fedh + .faraddr 9feeh + .faraddr 9fefh + .faraddr 9ff0h + .faraddr 9ff1h + .faraddr 9ff2h + .faraddr 9ff3h + .faraddr 9ff4h + .faraddr 9ff5h + .faraddr 9ff6h + .faraddr 9ff7h + .faraddr 9ff8h + .faraddr 9ff9h + .faraddr 9ffah + .faraddr 9ffbh + .faraddr 9ffch + .faraddr 9ffdh + .faraddr 9ffeh + .faraddr 9fffh + .faraddr 0a000h + .faraddr 0a001h + .faraddr 0a002h + .faraddr 0a003h + .faraddr 0a004h + .faraddr 0a005h + .faraddr 0a006h + .faraddr 0a007h + .faraddr 0a008h + .faraddr 0a009h + .faraddr 0a00ah + .faraddr 0a00bh + .faraddr 0a00ch + .faraddr 0a00dh + .faraddr 0a00eh + .faraddr 0a00fh + .faraddr 0afe1h + .faraddr 0afe2h + .faraddr 0afe3h + .faraddr 0afe4h + .faraddr 0afe5h + .faraddr 0afe6h + .faraddr 0afe7h + .faraddr 0afe8h + .faraddr 0afe9h + .faraddr 0afeah + .faraddr 0afebh + .faraddr 0afech + .faraddr 0afedh + .faraddr 0afeeh + .faraddr 0afefh + .faraddr 0aff0h + .faraddr 0aff1h + .faraddr 0aff2h + .faraddr 0aff3h + .faraddr 0aff4h + .faraddr 0aff5h + .faraddr 0aff6h + .faraddr 0aff7h + .faraddr 0aff8h + .faraddr 0aff9h + .faraddr 0affah + .faraddr 0affbh + .faraddr 0affch + .faraddr 0affdh + .faraddr 0affeh + .faraddr 0afffh + .faraddr 0b000h + .faraddr 0b001h + .faraddr 0b002h + .faraddr 0b003h + .faraddr 0b004h + .faraddr 0b005h + .faraddr 0b006h + .faraddr 0b007h + .faraddr 0b008h + .faraddr 0b009h + .faraddr 0b00ah + .faraddr 0b00bh + .faraddr 0b00ch + .faraddr 0b00dh + .faraddr 0b00eh + .faraddr 0b00fh + .faraddr 0ffe1h + .faraddr 0ffe2h + .faraddr 0ffe3h + .faraddr 0ffe4h + .faraddr 0ffe5h + .faraddr 0ffe6h + .faraddr 0ffe7h + .faraddr 0ffe8h + .faraddr 0ffe9h + .faraddr 0ffeah + .faraddr 0ffebh + .faraddr 0ffech + .faraddr 0ffedh + .faraddr 0ffeeh + .faraddr 0ffefh + .faraddr 0fff0h + .faraddr 0fff1h + .faraddr 0fff2h + .faraddr 0fff3h + .faraddr 0fff4h + .faraddr 0fff5h + .faraddr 0fff6h + .faraddr 0fff7h + .faraddr 0fff8h + .faraddr 0fff9h + .faraddr 0fffah + .faraddr 0fffbh + .faraddr 0fffch + .faraddr 0fffdh + .faraddr 0fffeh + .faraddr 0ffffh + .faraddr 10000h + .faraddr 10001h + .faraddr 10002h + .faraddr 10003h + .faraddr 10004h + .faraddr 10005h + .faraddr 10006h + .faraddr 10007h + .faraddr 10008h + .faraddr 10009h + .faraddr 1000ah + .faraddr 1000bh + .faraddr 1000ch + .faraddr 1000dh + .faraddr 1000eh + .faraddr 1000fh + .faraddr 10ffe1h + .faraddr 10ffe2h + .faraddr 10ffe3h + .faraddr 10ffe4h + .faraddr 10ffe5h + .faraddr 10ffe6h + .faraddr 10ffe7h + .faraddr 10ffe8h + .faraddr 10ffe9h + .faraddr 10ffeah + .faraddr 10ffebh + .faraddr 10ffech + .faraddr 10ffedh + .faraddr 10ffeeh + .faraddr 10ffefh + .faraddr 10fff0h + .faraddr 10fff1h + .faraddr 10fff2h + .faraddr 10fff3h + .faraddr 10fff4h + .faraddr 10fff5h + .faraddr 10fff6h + .faraddr 10fff7h + .faraddr 10fff8h + .faraddr 10fff9h + .faraddr 10fffah + .faraddr 10fffbh + .faraddr 10fffch + .faraddr 10fffdh + .faraddr 10fffeh + .faraddr 10ffffh + .faraddr 110000h + .faraddr 110001h + .faraddr 110002h + .faraddr 110003h + .faraddr 110004h + .faraddr 110005h + .faraddr 110006h + .faraddr 110007h + .faraddr 110008h + .faraddr 110009h + .faraddr 11000ah + .faraddr 11000bh + .faraddr 11000ch + .faraddr 11000dh + .faraddr 11000eh + .faraddr 11000fh + .faraddr 20ffe1h + .faraddr 20ffe2h + .faraddr 20ffe3h + .faraddr 20ffe4h + .faraddr 20ffe5h + .faraddr 20ffe6h + .faraddr 20ffe7h + .faraddr 20ffe8h + .faraddr 20ffe9h + .faraddr 20ffeah + .faraddr 20ffebh + .faraddr 20ffech + .faraddr 20ffedh + .faraddr 20ffeeh + .faraddr 20ffefh + .faraddr 20fff0h + .faraddr 20fff1h + .faraddr 20fff2h + .faraddr 20fff3h + .faraddr 20fff4h + .faraddr 20fff5h + .faraddr 20fff6h + .faraddr 20fff7h + .faraddr 20fff8h + .faraddr 20fff9h + .faraddr 20fffah + .faraddr 20fffbh + .faraddr 20fffch + .faraddr 20fffdh + .faraddr 20fffeh + .faraddr 20ffffh + .faraddr 210000h + .faraddr 210001h + .faraddr 210002h + .faraddr 210003h + .faraddr 210004h + .faraddr 210005h + .faraddr 210006h + .faraddr 210007h + .faraddr 210008h + .faraddr 210009h + .faraddr 21000ah + .faraddr 21000bh + .faraddr 21000ch + .faraddr 21000dh + .faraddr 21000eh + .faraddr 21000fh + .faraddr 7fffe1h + .faraddr 7fffe2h + .faraddr 7fffe3h + .faraddr 7fffe4h + .faraddr 7fffe5h + .faraddr 7fffe6h + .faraddr 7fffe7h + .faraddr 7fffe8h + .faraddr 7fffe9h + .faraddr 7fffeah + .faraddr 7fffebh + .faraddr 7fffech + .faraddr 7fffedh + .faraddr 7fffeeh + .faraddr 7fffefh + .faraddr 7ffff0h + .faraddr 7ffff1h + .faraddr 7ffff2h + .faraddr 7ffff3h + .faraddr 7ffff4h + .faraddr 7ffff5h + .faraddr 7ffff6h + .faraddr 7ffff7h + .faraddr 7ffff8h + .faraddr 7ffff9h + .faraddr 7ffffah + .faraddr 7ffffbh + .faraddr 7ffffch + .faraddr 7ffffdh + .faraddr 7ffffeh + .faraddr 7fffffh + .faraddr 800000h + .faraddr 800001h + .faraddr 800002h + .faraddr 800003h + .faraddr 800004h + .faraddr 800005h + .faraddr 800006h + .faraddr 800007h + .faraddr 800008h + .faraddr 800009h + .faraddr 80000ah + .faraddr 80000bh + .faraddr 80000ch + .faraddr 80000dh + .faraddr 80000eh + .faraddr 80000fh + .faraddr 9fffe1h + .faraddr 9fffe2h + .faraddr 9fffe3h + .faraddr 9fffe4h + .faraddr 9fffe5h + .faraddr 9fffe6h + .faraddr 9fffe7h + .faraddr 9fffe8h + .faraddr 9fffe9h + .faraddr 9fffeah + .faraddr 9fffebh + .faraddr 9fffech + .faraddr 9fffedh + .faraddr 9fffeeh + .faraddr 9fffefh + .faraddr 9ffff0h + .faraddr 9ffff1h + .faraddr 9ffff2h + .faraddr 9ffff3h + .faraddr 9ffff4h + .faraddr 9ffff5h + .faraddr 9ffff6h + .faraddr 9ffff7h + .faraddr 9ffff8h + .faraddr 9ffff9h + .faraddr 9ffffah + .faraddr 9ffffbh + .faraddr 9ffffch + .faraddr 9ffffdh + .faraddr 9ffffeh + .faraddr 9fffffh + .faraddr 0a00000h + .faraddr 0a00001h + .faraddr 0a00002h + .faraddr 0a00003h + .faraddr 0a00004h + .faraddr 0a00005h + .faraddr 0a00006h + .faraddr 0a00007h + .faraddr 0a00008h + .faraddr 0a00009h + .faraddr 0a0000ah + .faraddr 0a0000bh + .faraddr 0a0000ch + .faraddr 0a0000dh + .faraddr 0a0000eh + .faraddr 0a0000fh + .faraddr 0ffffe1h + .faraddr 0ffffe2h + .faraddr 0ffffe3h + .faraddr 0ffffe4h + .faraddr 0ffffe5h + .faraddr 0ffffe6h + .faraddr 0ffffe7h + .faraddr 0ffffe8h + .faraddr 0ffffe9h + .faraddr 0ffffeah + .faraddr 0ffffebh + .faraddr 0ffffech + .faraddr 0ffffedh + .faraddr 0ffffeeh + .faraddr 0ffffefh + .faraddr 0fffff0h + .faraddr 0fffff1h + .faraddr 0fffff2h + .faraddr 0fffff3h + .faraddr 0fffff4h + .faraddr 0fffff5h + .faraddr 0fffff6h + .faraddr 0fffff7h + .faraddr 0fffff8h + .faraddr 0fffff9h + .faraddr 0fffffah + .faraddr 0fffffbh + .faraddr 0fffffch + .faraddr 0fffffdh + .faraddr 0fffffeh + .faraddr 0ffffffh + + ; alternative hex values, uppercase + .faraddr 0h + .faraddr 1h + .faraddr 2h + .faraddr 3h + .faraddr 4h + .faraddr 5h + .faraddr 6h + .faraddr 7h + .faraddr 8h + .faraddr 9h + .faraddr 0Ah + .faraddr 0Bh + .faraddr 0Ch + .faraddr 0Dh + .faraddr 0Eh + .faraddr 0Fh + .faraddr 10h + .faraddr 11h + .faraddr 12h + .faraddr 13h + .faraddr 70h + .faraddr 71h + .faraddr 72h + .faraddr 73h + .faraddr 74h + .faraddr 75h + .faraddr 76h + .faraddr 77h + .faraddr 78h + .faraddr 79h + .faraddr 7Ah + .faraddr 7Bh + .faraddr 7Ch + .faraddr 7Dh + .faraddr 7Eh + .faraddr 7Fh + .faraddr 80h + .faraddr 81h + .faraddr 82h + .faraddr 83h + .faraddr 84h + .faraddr 85h + .faraddr 86h + .faraddr 0F0h + .faraddr 0F1h + .faraddr 0F2h + .faraddr 0F3h + .faraddr 0F4h + .faraddr 0F5h + .faraddr 0F6h + .faraddr 0F7h + .faraddr 0F8h + .faraddr 0F9h + .faraddr 0FAh + .faraddr 0FBh + .faraddr 0FCh + .faraddr 0FDh + .faraddr 0FEh + .faraddr 0FFh + .faraddr 100h + .faraddr 101h + .faraddr 102h + .faraddr 103h + .faraddr 0FD2h + .faraddr 0FD3h + .faraddr 0FD4h + .faraddr 0FD5h + .faraddr 0FD6h + .faraddr 0FD7h + .faraddr 0FD8h + .faraddr 0FD9h + .faraddr 0FDAh + .faraddr 0FDBh + .faraddr 0FDCh + .faraddr 0FDDh + .faraddr 0FDEh + .faraddr 0FDFh + .faraddr 0FE0h + .faraddr 0FE1h + .faraddr 0FE2h + .faraddr 0FE3h + .faraddr 0FE4h + .faraddr 0FE5h + .faraddr 0FE6h + .faraddr 0FE7h + .faraddr 0FE8h + .faraddr 0FE9h + .faraddr 0FEAh + .faraddr 0FEBh + .faraddr 0FECh + .faraddr 0FEDh + .faraddr 0FEEh + .faraddr 0FEFh + .faraddr 0FF0h + .faraddr 0FF1h + .faraddr 0FF2h + .faraddr 0FF3h + .faraddr 0FF4h + .faraddr 0FF5h + .faraddr 0FF6h + .faraddr 0FF7h + .faraddr 0FF8h + .faraddr 0FF9h + .faraddr 0FFAh + .faraddr 0FFBh + .faraddr 0FFCh + .faraddr 0FFDh + .faraddr 0FFEh + .faraddr 0FFFh + .faraddr 1000h + .faraddr 1001h + .faraddr 1002h + .faraddr 1003h + .faraddr 1004h + .faraddr 1005h + .faraddr 1006h + .faraddr 1007h + .faraddr 1008h + .faraddr 7FF0h + .faraddr 7FF1h + .faraddr 7FF2h + .faraddr 7FF3h + .faraddr 7FF4h + .faraddr 7FF5h + .faraddr 7FF6h + .faraddr 7FF7h + .faraddr 7FF8h + .faraddr 7FF9h + .faraddr 7FFAh + .faraddr 7FFBh + .faraddr 7FFCh + .faraddr 7FFDh + .faraddr 7FFEh + .faraddr 7FFFh + .faraddr 8000h + .faraddr 8001h + .faraddr 8002h + .faraddr 8003h + .faraddr 8004h + .faraddr 8005h + .faraddr 8006h + .faraddr 8007h + .faraddr 8008h + .faraddr 8009h + .faraddr 800Ah + .faraddr 800Bh + .faraddr 9FE1h + .faraddr 9FE2h + .faraddr 9FE3h + .faraddr 9FE4h + .faraddr 9FE5h + .faraddr 9FE6h + .faraddr 9FE7h + .faraddr 9FE8h + .faraddr 9FE9h + .faraddr 9FEAh + .faraddr 9FEBh + .faraddr 9FECh + .faraddr 9FEDh + .faraddr 9FEEh + .faraddr 9FEFh + .faraddr 9FF0h + .faraddr 9FF1h + .faraddr 9FF2h + .faraddr 9FF3h + .faraddr 9FF4h + .faraddr 9FF5h + .faraddr 9FF6h + .faraddr 9FF7h + .faraddr 9FF8h + .faraddr 9FF9h + .faraddr 9FFAh + .faraddr 9FFBh + .faraddr 9FFCh + .faraddr 9FFDh + .faraddr 9FFEh + .faraddr 9FFFh + .faraddr 0A000h + .faraddr 0A001h + .faraddr 0A002h + .faraddr 0A003h + .faraddr 0A004h + .faraddr 0A005h + .faraddr 0A006h + .faraddr 0A007h + .faraddr 0A008h + .faraddr 0A009h + .faraddr 0A00Ah + .faraddr 0A00Bh + .faraddr 0A00Ch + .faraddr 0A00Dh + .faraddr 0A00Eh + .faraddr 0A00Fh + .faraddr 0AFE1h + .faraddr 0AFE2h + .faraddr 0AFE3h + .faraddr 0AFE4h + .faraddr 0AFE5h + .faraddr 0AFE6h + .faraddr 0AFE7h + .faraddr 0AFE8h + .faraddr 0AFE9h + .faraddr 0AFEAh + .faraddr 0AFEBh + .faraddr 0AFECh + .faraddr 0AFEDh + .faraddr 0AFEEh + .faraddr 0AFEFh + .faraddr 0AFF0h + .faraddr 0AFF1h + .faraddr 0AFF2h + .faraddr 0AFF3h + .faraddr 0AFF4h + .faraddr 0AFF5h + .faraddr 0AFF6h + .faraddr 0AFF7h + .faraddr 0AFF8h + .faraddr 0AFF9h + .faraddr 0AFFAh + .faraddr 0AFFBh + .faraddr 0AFFCh + .faraddr 0AFFDh + .faraddr 0AFFEh + .faraddr 0AFFFh + .faraddr 0B000h + .faraddr 0B001h + .faraddr 0B002h + .faraddr 0B003h + .faraddr 0B004h + .faraddr 0B005h + .faraddr 0B006h + .faraddr 0B007h + .faraddr 0B008h + .faraddr 0B009h + .faraddr 0B00Ah + .faraddr 0B00Bh + .faraddr 0B00Ch + .faraddr 0B00Dh + .faraddr 0B00Eh + .faraddr 0B00Fh + .faraddr 0FFE1h + .faraddr 0FFE2h + .faraddr 0FFE3h + .faraddr 0FFE4h + .faraddr 0FFE5h + .faraddr 0FFE6h + .faraddr 0FFE7h + .faraddr 0FFE8h + .faraddr 0FFE9h + .faraddr 0FFEAh + .faraddr 0FFEBh + .faraddr 0FFECh + .faraddr 0FFEDh + .faraddr 0FFEEh + .faraddr 0FFEFh + .faraddr 0FFF0h + .faraddr 0FFF1h + .faraddr 0FFF2h + .faraddr 0FFF3h + .faraddr 0FFF4h + .faraddr 0FFF5h + .faraddr 0FFF6h + .faraddr 0FFF7h + .faraddr 0FFF8h + .faraddr 0FFF9h + .faraddr 0FFFAh + .faraddr 0FFFBh + .faraddr 0FFFCh + .faraddr 0FFFDh + .faraddr 0FFFEh + .faraddr 0FFFFh + .faraddr 10000h + .faraddr 10001h + .faraddr 10002h + .faraddr 10003h + .faraddr 10004h + .faraddr 10005h + .faraddr 10006h + .faraddr 10007h + .faraddr 10008h + .faraddr 10009h + .faraddr 1000Ah + .faraddr 1000Bh + .faraddr 1000Ch + .faraddr 1000Dh + .faraddr 1000Eh + .faraddr 1000Fh + .faraddr 10FFE1h + .faraddr 10FFE2h + .faraddr 10FFE3h + .faraddr 10FFE4h + .faraddr 10FFE5h + .faraddr 10FFE6h + .faraddr 10FFE7h + .faraddr 10FFE8h + .faraddr 10FFE9h + .faraddr 10FFEAh + .faraddr 10FFEBh + .faraddr 10FFECh + .faraddr 10FFEDh + .faraddr 10FFEEh + .faraddr 10FFEFh + .faraddr 10FFF0h + .faraddr 10FFF1h + .faraddr 10FFF2h + .faraddr 10FFF3h + .faraddr 10FFF4h + .faraddr 10FFF5h + .faraddr 10FFF6h + .faraddr 10FFF7h + .faraddr 10FFF8h + .faraddr 10FFF9h + .faraddr 10FFFAh + .faraddr 10FFFBh + .faraddr 10FFFCh + .faraddr 10FFFDh + .faraddr 10FFFEh + .faraddr 10FFFFh + .faraddr 110000h + .faraddr 110001h + .faraddr 110002h + .faraddr 110003h + .faraddr 110004h + .faraddr 110005h + .faraddr 110006h + .faraddr 110007h + .faraddr 110008h + .faraddr 110009h + .faraddr 11000Ah + .faraddr 11000Bh + .faraddr 11000Ch + .faraddr 11000Dh + .faraddr 11000Eh + .faraddr 11000Fh + .faraddr 20FFE1h + .faraddr 20FFE2h + .faraddr 20FFE3h + .faraddr 20FFE4h + .faraddr 20FFE5h + .faraddr 20FFE6h + .faraddr 20FFE7h + .faraddr 20FFE8h + .faraddr 20FFE9h + .faraddr 20FFEAh + .faraddr 20FFEBh + .faraddr 20FFECh + .faraddr 20FFEDh + .faraddr 20FFEEh + .faraddr 20FFEFh + .faraddr 20FFF0h + .faraddr 20FFF1h + .faraddr 20FFF2h + .faraddr 20FFF3h + .faraddr 20FFF4h + .faraddr 20FFF5h + .faraddr 20FFF6h + .faraddr 20FFF7h + .faraddr 20FFF8h + .faraddr 20FFF9h + .faraddr 20FFFAh + .faraddr 20FFFBh + .faraddr 20FFFCh + .faraddr 20FFFDh + .faraddr 20FFFEh + .faraddr 20FFFFh + .faraddr 210000h + .faraddr 210001h + .faraddr 210002h + .faraddr 210003h + .faraddr 210004h + .faraddr 210005h + .faraddr 210006h + .faraddr 210007h + .faraddr 210008h + .faraddr 210009h + .faraddr 21000Ah + .faraddr 21000Bh + .faraddr 21000Ch + .faraddr 21000Dh + .faraddr 21000Eh + .faraddr 21000Fh + .faraddr 7FFFE1h + .faraddr 7FFFE2h + .faraddr 7FFFE3h + .faraddr 7FFFE4h + .faraddr 7FFFE5h + .faraddr 7FFFE6h + .faraddr 7FFFE7h + .faraddr 7FFFE8h + .faraddr 7FFFE9h + .faraddr 7FFFEAh + .faraddr 7FFFEBh + .faraddr 7FFFECh + .faraddr 7FFFEDh + .faraddr 7FFFEEh + .faraddr 7FFFEFh + .faraddr 7FFFF0h + .faraddr 7FFFF1h + .faraddr 7FFFF2h + .faraddr 7FFFF3h + .faraddr 7FFFF4h + .faraddr 7FFFF5h + .faraddr 7FFFF6h + .faraddr 7FFFF7h + .faraddr 7FFFF8h + .faraddr 7FFFF9h + .faraddr 7FFFFAh + .faraddr 7FFFFBh + .faraddr 7FFFFCh + .faraddr 7FFFFDh + .faraddr 7FFFFEh + .faraddr 7FFFFFh + .faraddr 800000h + .faraddr 800001h + .faraddr 800002h + .faraddr 800003h + .faraddr 800004h + .faraddr 800005h + .faraddr 800006h + .faraddr 800007h + .faraddr 800008h + .faraddr 800009h + .faraddr 80000Ah + .faraddr 80000Bh + .faraddr 80000Ch + .faraddr 80000Dh + .faraddr 80000Eh + .faraddr 80000Fh + .faraddr 9FFFE1h + .faraddr 9FFFE2h + .faraddr 9FFFE3h + .faraddr 9FFFE4h + .faraddr 9FFFE5h + .faraddr 9FFFE6h + .faraddr 9FFFE7h + .faraddr 9FFFE8h + .faraddr 9FFFE9h + .faraddr 9FFFEAh + .faraddr 9FFFEBh + .faraddr 9FFFECh + .faraddr 9FFFEDh + .faraddr 9FFFEEh + .faraddr 9FFFEFh + .faraddr 9FFFF0h + .faraddr 9FFFF1h + .faraddr 9FFFF2h + .faraddr 9FFFF3h + .faraddr 9FFFF4h + .faraddr 9FFFF5h + .faraddr 9FFFF6h + .faraddr 9FFFF7h + .faraddr 9FFFF8h + .faraddr 9FFFF9h + .faraddr 9FFFFAh + .faraddr 9FFFFBh + .faraddr 9FFFFCh + .faraddr 9FFFFDh + .faraddr 9FFFFEh + .faraddr 9FFFFFh + .faraddr 0A00000h + .faraddr 0A00001h + .faraddr 0A00002h + .faraddr 0A00003h + .faraddr 0A00004h + .faraddr 0A00005h + .faraddr 0A00006h + .faraddr 0A00007h + .faraddr 0A00008h + .faraddr 0A00009h + .faraddr 0A0000Ah + .faraddr 0A0000Bh + .faraddr 0A0000Ch + .faraddr 0A0000Dh + .faraddr 0A0000Eh + .faraddr 0A0000Fh + .faraddr 0FFFFE1h + .faraddr 0FFFFE2h + .faraddr 0FFFFE3h + .faraddr 0FFFFE4h + .faraddr 0FFFFE5h + .faraddr 0FFFFE6h + .faraddr 0FFFFE7h + .faraddr 0FFFFE8h + .faraddr 0FFFFE9h + .faraddr 0FFFFEAh + .faraddr 0FFFFEBh + .faraddr 0FFFFECh + .faraddr 0FFFFEDh + .faraddr 0FFFFEEh + .faraddr 0FFFFEFh + .faraddr 0FFFFF0h + .faraddr 0FFFFF1h + .faraddr 0FFFFF2h + .faraddr 0FFFFF3h + .faraddr 0FFFFF4h + .faraddr 0FFFFF5h + .faraddr 0FFFFF6h + .faraddr 0FFFFF7h + .faraddr 0FFFFF8h + .faraddr 0FFFFF9h + .faraddr 0FFFFFAh + .faraddr 0FFFFFBh + .faraddr 0FFFFFCh + .faraddr 0FFFFFDh + .faraddr 0FFFFFEh + .faraddr 0FFFFFFh + + ; alternative 8-digit hex values + .faraddr 00000000h + .faraddr 00000001h + .faraddr 00000002h + .faraddr 00000003h + .faraddr 00000004h + .faraddr 00000005h + .faraddr 00000006h + .faraddr 00000007h + .faraddr 00000008h + .faraddr 00000009h + .faraddr 0000000ah + .faraddr 0000000bh + .faraddr 0000000ch + .faraddr 0000000dh + .faraddr 0000000eh + .faraddr 0000000fh + .faraddr 00000010h + .faraddr 00000011h + .faraddr 00000012h + .faraddr 00000013h + .faraddr 00000070h + .faraddr 00000071h + .faraddr 00000072h + .faraddr 00000073h + .faraddr 00000074h + .faraddr 00000075h + .faraddr 00000076h + .faraddr 00000077h + .faraddr 00000078h + .faraddr 00000079h + .faraddr 0000007ah + .faraddr 0000007bh + .faraddr 0000007ch + .faraddr 0000007dh + .faraddr 0000007eh + .faraddr 0000007fh + .faraddr 00000080h + .faraddr 00000081h + .faraddr 00000082h + .faraddr 00000083h + .faraddr 00000084h + .faraddr 00000085h + .faraddr 00000086h + .faraddr 000000f0h + .faraddr 000000f1h + .faraddr 000000f2h + .faraddr 000000f3h + .faraddr 000000f4h + .faraddr 000000f5h + .faraddr 000000f6h + .faraddr 000000f7h + .faraddr 000000f8h + .faraddr 000000f9h + .faraddr 000000fah + .faraddr 000000fbh + .faraddr 000000fch + .faraddr 000000fdh + .faraddr 000000feh + .faraddr 000000ffh + .faraddr 00000100h + .faraddr 00000101h + .faraddr 00000102h + .faraddr 00000103h + .faraddr 00000fd2h + .faraddr 00000fd3h + .faraddr 00000fd4h + .faraddr 00000fd5h + .faraddr 00000fd6h + .faraddr 00000fd7h + .faraddr 00000fd8h + .faraddr 00000fd9h + .faraddr 00000fdah + .faraddr 00000fdbh + .faraddr 00000fdch + .faraddr 00000fddh + .faraddr 00000fdeh + .faraddr 00000fdfh + .faraddr 00000fe0h + .faraddr 00000fe1h + .faraddr 00000fe2h + .faraddr 00000fe3h + .faraddr 00000fe4h + .faraddr 00000fe5h + .faraddr 00000fe6h + .faraddr 00000fe7h + .faraddr 00000fe8h + .faraddr 00000fe9h + .faraddr 00000feah + .faraddr 00000febh + .faraddr 00000fech + .faraddr 00000fedh + .faraddr 00000feeh + .faraddr 00000fefh + .faraddr 00000ff0h + .faraddr 00000ff1h + .faraddr 00000ff2h + .faraddr 00000ff3h + .faraddr 00000ff4h + .faraddr 00000ff5h + .faraddr 00000ff6h + .faraddr 00000ff7h + .faraddr 00000ff8h + .faraddr 00000ff9h + .faraddr 00000ffah + .faraddr 00000ffbh + .faraddr 00000ffch + .faraddr 00000ffdh + .faraddr 00000ffeh + .faraddr 00000fffh + .faraddr 00001000h + .faraddr 00001001h + .faraddr 00001002h + .faraddr 00001003h + .faraddr 00001004h + .faraddr 00001005h + .faraddr 00001006h + .faraddr 00001007h + .faraddr 00001008h + .faraddr 00007ff0h + .faraddr 00007ff1h + .faraddr 00007ff2h + .faraddr 00007ff3h + .faraddr 00007ff4h + .faraddr 00007ff5h + .faraddr 00007ff6h + .faraddr 00007ff7h + .faraddr 00007ff8h + .faraddr 00007ff9h + .faraddr 00007ffah + .faraddr 00007ffbh + .faraddr 00007ffch + .faraddr 00007ffdh + .faraddr 00007ffeh + .faraddr 00007fffh + .faraddr 00008000h + .faraddr 00008001h + .faraddr 00008002h + .faraddr 00008003h + .faraddr 00008004h + .faraddr 00008005h + .faraddr 00008006h + .faraddr 00008007h + .faraddr 00008008h + .faraddr 00008009h + .faraddr 0000800ah + .faraddr 0000800bh + .faraddr 00009fe1h + .faraddr 00009fe2h + .faraddr 00009fe3h + .faraddr 00009fe4h + .faraddr 00009fe5h + .faraddr 00009fe6h + .faraddr 00009fe7h + .faraddr 00009fe8h + .faraddr 00009fe9h + .faraddr 00009feah + .faraddr 00009febh + .faraddr 00009fech + .faraddr 00009fedh + .faraddr 00009feeh + .faraddr 00009fefh + .faraddr 00009ff0h + .faraddr 00009ff1h + .faraddr 00009ff2h + .faraddr 00009ff3h + .faraddr 00009ff4h + .faraddr 00009ff5h + .faraddr 00009ff6h + .faraddr 00009ff7h + .faraddr 00009ff8h + .faraddr 00009ff9h + .faraddr 00009ffah + .faraddr 00009ffbh + .faraddr 00009ffch + .faraddr 00009ffdh + .faraddr 00009ffeh + .faraddr 00009fffh + .faraddr 0000a000h + .faraddr 0000a001h + .faraddr 0000a002h + .faraddr 0000a003h + .faraddr 0000a004h + .faraddr 0000a005h + .faraddr 0000a006h + .faraddr 0000a007h + .faraddr 0000a008h + .faraddr 0000a009h + .faraddr 0000a00ah + .faraddr 0000a00bh + .faraddr 0000a00ch + .faraddr 0000a00dh + .faraddr 0000a00eh + .faraddr 0000a00fh + .faraddr 0000afe1h + .faraddr 0000afe2h + .faraddr 0000afe3h + .faraddr 0000afe4h + .faraddr 0000afe5h + .faraddr 0000afe6h + .faraddr 0000afe7h + .faraddr 0000afe8h + .faraddr 0000afe9h + .faraddr 0000afeah + .faraddr 0000afebh + .faraddr 0000afech + .faraddr 0000afedh + .faraddr 0000afeeh + .faraddr 0000afefh + .faraddr 0000aff0h + .faraddr 0000aff1h + .faraddr 0000aff2h + .faraddr 0000aff3h + .faraddr 0000aff4h + .faraddr 0000aff5h + .faraddr 0000aff6h + .faraddr 0000aff7h + .faraddr 0000aff8h + .faraddr 0000aff9h + .faraddr 0000affah + .faraddr 0000affbh + .faraddr 0000affch + .faraddr 0000affdh + .faraddr 0000affeh + .faraddr 0000afffh + .faraddr 0000b000h + .faraddr 0000b001h + .faraddr 0000b002h + .faraddr 0000b003h + .faraddr 0000b004h + .faraddr 0000b005h + .faraddr 0000b006h + .faraddr 0000b007h + .faraddr 0000b008h + .faraddr 0000b009h + .faraddr 0000b00ah + .faraddr 0000b00bh + .faraddr 0000b00ch + .faraddr 0000b00dh + .faraddr 0000b00eh + .faraddr 0000b00fh + .faraddr 0000ffe1h + .faraddr 0000ffe2h + .faraddr 0000ffe3h + .faraddr 0000ffe4h + .faraddr 0000ffe5h + .faraddr 0000ffe6h + .faraddr 0000ffe7h + .faraddr 0000ffe8h + .faraddr 0000ffe9h + .faraddr 0000ffeah + .faraddr 0000ffebh + .faraddr 0000ffech + .faraddr 0000ffedh + .faraddr 0000ffeeh + .faraddr 0000ffefh + .faraddr 0000fff0h + .faraddr 0000fff1h + .faraddr 0000fff2h + .faraddr 0000fff3h + .faraddr 0000fff4h + .faraddr 0000fff5h + .faraddr 0000fff6h + .faraddr 0000fff7h + .faraddr 0000fff8h + .faraddr 0000fff9h + .faraddr 0000fffah + .faraddr 0000fffbh + .faraddr 0000fffch + .faraddr 0000fffdh + .faraddr 0000fffeh + .faraddr 0000ffffh + .faraddr 00010000h + .faraddr 00010001h + .faraddr 00010002h + .faraddr 00010003h + .faraddr 00010004h + .faraddr 00010005h + .faraddr 00010006h + .faraddr 00010007h + .faraddr 00010008h + .faraddr 00010009h + .faraddr 0001000ah + .faraddr 0001000bh + .faraddr 0001000ch + .faraddr 0001000dh + .faraddr 0001000eh + .faraddr 0001000fh + .faraddr 0010ffe1h + .faraddr 0010ffe2h + .faraddr 0010ffe3h + .faraddr 0010ffe4h + .faraddr 0010ffe5h + .faraddr 0010ffe6h + .faraddr 0010ffe7h + .faraddr 0010ffe8h + .faraddr 0010ffe9h + .faraddr 0010ffeah + .faraddr 0010ffebh + .faraddr 0010ffech + .faraddr 0010ffedh + .faraddr 0010ffeeh + .faraddr 0010ffefh + .faraddr 0010fff0h + .faraddr 0010fff1h + .faraddr 0010fff2h + .faraddr 0010fff3h + .faraddr 0010fff4h + .faraddr 0010fff5h + .faraddr 0010fff6h + .faraddr 0010fff7h + .faraddr 0010fff8h + .faraddr 0010fff9h + .faraddr 0010fffah + .faraddr 0010fffbh + .faraddr 0010fffch + .faraddr 0010fffdh + .faraddr 0010fffeh + .faraddr 0010ffffh + .faraddr 00110000h + .faraddr 00110001h + .faraddr 00110002h + .faraddr 00110003h + .faraddr 00110004h + .faraddr 00110005h + .faraddr 00110006h + .faraddr 00110007h + .faraddr 00110008h + .faraddr 00110009h + .faraddr 0011000ah + .faraddr 0011000bh + .faraddr 0011000ch + .faraddr 0011000dh + .faraddr 0011000eh + .faraddr 0011000fh + .faraddr 0020ffe1h + .faraddr 0020ffe2h + .faraddr 0020ffe3h + .faraddr 0020ffe4h + .faraddr 0020ffe5h + .faraddr 0020ffe6h + .faraddr 0020ffe7h + .faraddr 0020ffe8h + .faraddr 0020ffe9h + .faraddr 0020ffeah + .faraddr 0020ffebh + .faraddr 0020ffech + .faraddr 0020ffedh + .faraddr 0020ffeeh + .faraddr 0020ffefh + .faraddr 0020fff0h + .faraddr 0020fff1h + .faraddr 0020fff2h + .faraddr 0020fff3h + .faraddr 0020fff4h + .faraddr 0020fff5h + .faraddr 0020fff6h + .faraddr 0020fff7h + .faraddr 0020fff8h + .faraddr 0020fff9h + .faraddr 0020fffah + .faraddr 0020fffbh + .faraddr 0020fffch + .faraddr 0020fffdh + .faraddr 0020fffeh + .faraddr 0020ffffh + .faraddr 00210000h + .faraddr 00210001h + .faraddr 00210002h + .faraddr 00210003h + .faraddr 00210004h + .faraddr 00210005h + .faraddr 00210006h + .faraddr 00210007h + .faraddr 00210008h + .faraddr 00210009h + .faraddr 0021000ah + .faraddr 0021000bh + .faraddr 0021000ch + .faraddr 0021000dh + .faraddr 0021000eh + .faraddr 0021000fh + .faraddr 007fffe1h + .faraddr 007fffe2h + .faraddr 007fffe3h + .faraddr 007fffe4h + .faraddr 007fffe5h + .faraddr 007fffe6h + .faraddr 007fffe7h + .faraddr 007fffe8h + .faraddr 007fffe9h + .faraddr 007fffeah + .faraddr 007fffebh + .faraddr 007fffech + .faraddr 007fffedh + .faraddr 007fffeeh + .faraddr 007fffefh + .faraddr 007ffff0h + .faraddr 007ffff1h + .faraddr 007ffff2h + .faraddr 007ffff3h + .faraddr 007ffff4h + .faraddr 007ffff5h + .faraddr 007ffff6h + .faraddr 007ffff7h + .faraddr 007ffff8h + .faraddr 007ffff9h + .faraddr 007ffffah + .faraddr 007ffffbh + .faraddr 007ffffch + .faraddr 007ffffdh + .faraddr 007ffffeh + .faraddr 007fffffh + .faraddr 00800000h + .faraddr 00800001h + .faraddr 00800002h + .faraddr 00800003h + .faraddr 00800004h + .faraddr 00800005h + .faraddr 00800006h + .faraddr 00800007h + .faraddr 00800008h + .faraddr 00800009h + .faraddr 0080000ah + .faraddr 0080000bh + .faraddr 0080000ch + .faraddr 0080000dh + .faraddr 0080000eh + .faraddr 0080000fh + .faraddr 009fffe1h + .faraddr 009fffe2h + .faraddr 009fffe3h + .faraddr 009fffe4h + .faraddr 009fffe5h + .faraddr 009fffe6h + .faraddr 009fffe7h + .faraddr 009fffe8h + .faraddr 009fffe9h + .faraddr 009fffeah + .faraddr 009fffebh + .faraddr 009fffech + .faraddr 009fffedh + .faraddr 009fffeeh + .faraddr 009fffefh + .faraddr 009ffff0h + .faraddr 009ffff1h + .faraddr 009ffff2h + .faraddr 009ffff3h + .faraddr 009ffff4h + .faraddr 009ffff5h + .faraddr 009ffff6h + .faraddr 009ffff7h + .faraddr 009ffff8h + .faraddr 009ffff9h + .faraddr 009ffffah + .faraddr 009ffffbh + .faraddr 009ffffch + .faraddr 009ffffdh + .faraddr 009ffffeh + .faraddr 009fffffh + .faraddr 00a00000h + .faraddr 00a00001h + .faraddr 00a00002h + .faraddr 00a00003h + .faraddr 00a00004h + .faraddr 00a00005h + .faraddr 00a00006h + .faraddr 00a00007h + .faraddr 00a00008h + .faraddr 00a00009h + .faraddr 00a0000ah + .faraddr 00a0000bh + .faraddr 00a0000ch + .faraddr 00a0000dh + .faraddr 00a0000eh + .faraddr 00a0000fh + .faraddr 00ffffe1h + .faraddr 00ffffe2h + .faraddr 00ffffe3h + .faraddr 00ffffe4h + .faraddr 00ffffe5h + .faraddr 00ffffe6h + .faraddr 00ffffe7h + .faraddr 00ffffe8h + .faraddr 00ffffe9h + .faraddr 00ffffeah + .faraddr 00ffffebh + .faraddr 00ffffech + .faraddr 00ffffedh + .faraddr 00ffffeeh + .faraddr 00ffffefh + .faraddr 00fffff0h + .faraddr 00fffff1h + .faraddr 00fffff2h + .faraddr 00fffff3h + .faraddr 00fffff4h + .faraddr 00fffff5h + .faraddr 00fffff6h + .faraddr 00fffff7h + .faraddr 00fffff8h + .faraddr 00fffff9h + .faraddr 00fffffah + .faraddr 00fffffbh + .faraddr 00fffffch + .faraddr 00fffffdh + .faraddr 00fffffeh + .faraddr 00ffffffh + + ; alternative 8-digit hex values, uppercase + .faraddr 00000000h + .faraddr 00000001h + .faraddr 00000002h + .faraddr 00000003h + .faraddr 00000004h + .faraddr 00000005h + .faraddr 00000006h + .faraddr 00000007h + .faraddr 00000008h + .faraddr 00000009h + .faraddr 0000000Ah + .faraddr 0000000Bh + .faraddr 0000000Ch + .faraddr 0000000Dh + .faraddr 0000000Eh + .faraddr 0000000Fh + .faraddr 00000010h + .faraddr 00000011h + .faraddr 00000012h + .faraddr 00000013h + .faraddr 00000070h + .faraddr 00000071h + .faraddr 00000072h + .faraddr 00000073h + .faraddr 00000074h + .faraddr 00000075h + .faraddr 00000076h + .faraddr 00000077h + .faraddr 00000078h + .faraddr 00000079h + .faraddr 0000007Ah + .faraddr 0000007Bh + .faraddr 0000007Ch + .faraddr 0000007Dh + .faraddr 0000007Eh + .faraddr 0000007Fh + .faraddr 00000080h + .faraddr 00000081h + .faraddr 00000082h + .faraddr 00000083h + .faraddr 00000084h + .faraddr 00000085h + .faraddr 00000086h + .faraddr 000000F0h + .faraddr 000000F1h + .faraddr 000000F2h + .faraddr 000000F3h + .faraddr 000000F4h + .faraddr 000000F5h + .faraddr 000000F6h + .faraddr 000000F7h + .faraddr 000000F8h + .faraddr 000000F9h + .faraddr 000000FAh + .faraddr 000000FBh + .faraddr 000000FCh + .faraddr 000000FDh + .faraddr 000000FEh + .faraddr 000000FFh + .faraddr 00000100h + .faraddr 00000101h + .faraddr 00000102h + .faraddr 00000103h + .faraddr 00000FD2h + .faraddr 00000FD3h + .faraddr 00000FD4h + .faraddr 00000FD5h + .faraddr 00000FD6h + .faraddr 00000FD7h + .faraddr 00000FD8h + .faraddr 00000FD9h + .faraddr 00000FDAh + .faraddr 00000FDBh + .faraddr 00000FDCh + .faraddr 00000FDDh + .faraddr 00000FDEh + .faraddr 00000FDFh + .faraddr 00000FE0h + .faraddr 00000FE1h + .faraddr 00000FE2h + .faraddr 00000FE3h + .faraddr 00000FE4h + .faraddr 00000FE5h + .faraddr 00000FE6h + .faraddr 00000FE7h + .faraddr 00000FE8h + .faraddr 00000FE9h + .faraddr 00000FEAh + .faraddr 00000FEBh + .faraddr 00000FECh + .faraddr 00000FEDh + .faraddr 00000FEEh + .faraddr 00000FEFh + .faraddr 00000FF0h + .faraddr 00000FF1h + .faraddr 00000FF2h + .faraddr 00000FF3h + .faraddr 00000FF4h + .faraddr 00000FF5h + .faraddr 00000FF6h + .faraddr 00000FF7h + .faraddr 00000FF8h + .faraddr 00000FF9h + .faraddr 00000FFAh + .faraddr 00000FFBh + .faraddr 00000FFCh + .faraddr 00000FFDh + .faraddr 00000FFEh + .faraddr 00000FFFh + .faraddr 00001000h + .faraddr 00001001h + .faraddr 00001002h + .faraddr 00001003h + .faraddr 00001004h + .faraddr 00001005h + .faraddr 00001006h + .faraddr 00001007h + .faraddr 00001008h + .faraddr 00007FF0h + .faraddr 00007FF1h + .faraddr 00007FF2h + .faraddr 00007FF3h + .faraddr 00007FF4h + .faraddr 00007FF5h + .faraddr 00007FF6h + .faraddr 00007FF7h + .faraddr 00007FF8h + .faraddr 00007FF9h + .faraddr 00007FFAh + .faraddr 00007FFBh + .faraddr 00007FFCh + .faraddr 00007FFDh + .faraddr 00007FFEh + .faraddr 00007FFFh + .faraddr 00008000h + .faraddr 00008001h + .faraddr 00008002h + .faraddr 00008003h + .faraddr 00008004h + .faraddr 00008005h + .faraddr 00008006h + .faraddr 00008007h + .faraddr 00008008h + .faraddr 00008009h + .faraddr 0000800Ah + .faraddr 0000800Bh + .faraddr 00009FE1h + .faraddr 00009FE2h + .faraddr 00009FE3h + .faraddr 00009FE4h + .faraddr 00009FE5h + .faraddr 00009FE6h + .faraddr 00009FE7h + .faraddr 00009FE8h + .faraddr 00009FE9h + .faraddr 00009FEAh + .faraddr 00009FEBh + .faraddr 00009FECh + .faraddr 00009FEDh + .faraddr 00009FEEh + .faraddr 00009FEFh + .faraddr 00009FF0h + .faraddr 00009FF1h + .faraddr 00009FF2h + .faraddr 00009FF3h + .faraddr 00009FF4h + .faraddr 00009FF5h + .faraddr 00009FF6h + .faraddr 00009FF7h + .faraddr 00009FF8h + .faraddr 00009FF9h + .faraddr 00009FFAh + .faraddr 00009FFBh + .faraddr 00009FFCh + .faraddr 00009FFDh + .faraddr 00009FFEh + .faraddr 00009FFFh + .faraddr 0000A000h + .faraddr 0000A001h + .faraddr 0000A002h + .faraddr 0000A003h + .faraddr 0000A004h + .faraddr 0000A005h + .faraddr 0000A006h + .faraddr 0000A007h + .faraddr 0000A008h + .faraddr 0000A009h + .faraddr 0000A00Ah + .faraddr 0000A00Bh + .faraddr 0000A00Ch + .faraddr 0000A00Dh + .faraddr 0000A00Eh + .faraddr 0000A00Fh + .faraddr 0000AFE1h + .faraddr 0000AFE2h + .faraddr 0000AFE3h + .faraddr 0000AFE4h + .faraddr 0000AFE5h + .faraddr 0000AFE6h + .faraddr 0000AFE7h + .faraddr 0000AFE8h + .faraddr 0000AFE9h + .faraddr 0000AFEAh + .faraddr 0000AFEBh + .faraddr 0000AFECh + .faraddr 0000AFEDh + .faraddr 0000AFEEh + .faraddr 0000AFEFh + .faraddr 0000AFF0h + .faraddr 0000AFF1h + .faraddr 0000AFF2h + .faraddr 0000AFF3h + .faraddr 0000AFF4h + .faraddr 0000AFF5h + .faraddr 0000AFF6h + .faraddr 0000AFF7h + .faraddr 0000AFF8h + .faraddr 0000AFF9h + .faraddr 0000AFFAh + .faraddr 0000AFFBh + .faraddr 0000AFFCh + .faraddr 0000AFFDh + .faraddr 0000AFFEh + .faraddr 0000AFFFh + .faraddr 0000B000h + .faraddr 0000B001h + .faraddr 0000B002h + .faraddr 0000B003h + .faraddr 0000B004h + .faraddr 0000B005h + .faraddr 0000B006h + .faraddr 0000B007h + .faraddr 0000B008h + .faraddr 0000B009h + .faraddr 0000B00Ah + .faraddr 0000B00Bh + .faraddr 0000B00Ch + .faraddr 0000B00Dh + .faraddr 0000B00Eh + .faraddr 0000B00Fh + .faraddr 0000FFE1h + .faraddr 0000FFE2h + .faraddr 0000FFE3h + .faraddr 0000FFE4h + .faraddr 0000FFE5h + .faraddr 0000FFE6h + .faraddr 0000FFE7h + .faraddr 0000FFE8h + .faraddr 0000FFE9h + .faraddr 0000FFEAh + .faraddr 0000FFEBh + .faraddr 0000FFECh + .faraddr 0000FFEDh + .faraddr 0000FFEEh + .faraddr 0000FFEFh + .faraddr 0000FFF0h + .faraddr 0000FFF1h + .faraddr 0000FFF2h + .faraddr 0000FFF3h + .faraddr 0000FFF4h + .faraddr 0000FFF5h + .faraddr 0000FFF6h + .faraddr 0000FFF7h + .faraddr 0000FFF8h + .faraddr 0000FFF9h + .faraddr 0000FFFAh + .faraddr 0000FFFBh + .faraddr 0000FFFCh + .faraddr 0000FFFDh + .faraddr 0000FFFEh + .faraddr 0000FFFFh + .faraddr 00010000h + .faraddr 00010001h + .faraddr 00010002h + .faraddr 00010003h + .faraddr 00010004h + .faraddr 00010005h + .faraddr 00010006h + .faraddr 00010007h + .faraddr 00010008h + .faraddr 00010009h + .faraddr 0001000Ah + .faraddr 0001000Bh + .faraddr 0001000Ch + .faraddr 0001000Dh + .faraddr 0001000Eh + .faraddr 0001000Fh + .faraddr 0010FFE1h + .faraddr 0010FFE2h + .faraddr 0010FFE3h + .faraddr 0010FFE4h + .faraddr 0010FFE5h + .faraddr 0010FFE6h + .faraddr 0010FFE7h + .faraddr 0010FFE8h + .faraddr 0010FFE9h + .faraddr 0010FFEAh + .faraddr 0010FFEBh + .faraddr 0010FFECh + .faraddr 0010FFEDh + .faraddr 0010FFEEh + .faraddr 0010FFEFh + .faraddr 0010FFF0h + .faraddr 0010FFF1h + .faraddr 0010FFF2h + .faraddr 0010FFF3h + .faraddr 0010FFF4h + .faraddr 0010FFF5h + .faraddr 0010FFF6h + .faraddr 0010FFF7h + .faraddr 0010FFF8h + .faraddr 0010FFF9h + .faraddr 0010FFFAh + .faraddr 0010FFFBh + .faraddr 0010FFFCh + .faraddr 0010FFFDh + .faraddr 0010FFFEh + .faraddr 0010FFFFh + .faraddr 00110000h + .faraddr 00110001h + .faraddr 00110002h + .faraddr 00110003h + .faraddr 00110004h + .faraddr 00110005h + .faraddr 00110006h + .faraddr 00110007h + .faraddr 00110008h + .faraddr 00110009h + .faraddr 0011000Ah + .faraddr 0011000Bh + .faraddr 0011000Ch + .faraddr 0011000Dh + .faraddr 0011000Eh + .faraddr 0011000Fh + .faraddr 0020FFE1h + .faraddr 0020FFE2h + .faraddr 0020FFE3h + .faraddr 0020FFE4h + .faraddr 0020FFE5h + .faraddr 0020FFE6h + .faraddr 0020FFE7h + .faraddr 0020FFE8h + .faraddr 0020FFE9h + .faraddr 0020FFEAh + .faraddr 0020FFEBh + .faraddr 0020FFECh + .faraddr 0020FFEDh + .faraddr 0020FFEEh + .faraddr 0020FFEFh + .faraddr 0020FFF0h + .faraddr 0020FFF1h + .faraddr 0020FFF2h + .faraddr 0020FFF3h + .faraddr 0020FFF4h + .faraddr 0020FFF5h + .faraddr 0020FFF6h + .faraddr 0020FFF7h + .faraddr 0020FFF8h + .faraddr 0020FFF9h + .faraddr 0020FFFAh + .faraddr 0020FFFBh + .faraddr 0020FFFCh + .faraddr 0020FFFDh + .faraddr 0020FFFEh + .faraddr 0020FFFFh + .faraddr 00210000h + .faraddr 00210001h + .faraddr 00210002h + .faraddr 00210003h + .faraddr 00210004h + .faraddr 00210005h + .faraddr 00210006h + .faraddr 00210007h + .faraddr 00210008h + .faraddr 00210009h + .faraddr 0021000Ah + .faraddr 0021000Bh + .faraddr 0021000Ch + .faraddr 0021000Dh + .faraddr 0021000Eh + .faraddr 0021000Fh + .faraddr 007FFFE1h + .faraddr 007FFFE2h + .faraddr 007FFFE3h + .faraddr 007FFFE4h + .faraddr 007FFFE5h + .faraddr 007FFFE6h + .faraddr 007FFFE7h + .faraddr 007FFFE8h + .faraddr 007FFFE9h + .faraddr 007FFFEAh + .faraddr 007FFFEBh + .faraddr 007FFFECh + .faraddr 007FFFEDh + .faraddr 007FFFEEh + .faraddr 007FFFEFh + .faraddr 007FFFF0h + .faraddr 007FFFF1h + .faraddr 007FFFF2h + .faraddr 007FFFF3h + .faraddr 007FFFF4h + .faraddr 007FFFF5h + .faraddr 007FFFF6h + .faraddr 007FFFF7h + .faraddr 007FFFF8h + .faraddr 007FFFF9h + .faraddr 007FFFFAh + .faraddr 007FFFFBh + .faraddr 007FFFFCh + .faraddr 007FFFFDh + .faraddr 007FFFFEh + .faraddr 007FFFFFh + .faraddr 00800000h + .faraddr 00800001h + .faraddr 00800002h + .faraddr 00800003h + .faraddr 00800004h + .faraddr 00800005h + .faraddr 00800006h + .faraddr 00800007h + .faraddr 00800008h + .faraddr 00800009h + .faraddr 0080000Ah + .faraddr 0080000Bh + .faraddr 0080000Ch + .faraddr 0080000Dh + .faraddr 0080000Eh + .faraddr 0080000Fh + .faraddr 009FFFE1h + .faraddr 009FFFE2h + .faraddr 009FFFE3h + .faraddr 009FFFE4h + .faraddr 009FFFE5h + .faraddr 009FFFE6h + .faraddr 009FFFE7h + .faraddr 009FFFE8h + .faraddr 009FFFE9h + .faraddr 009FFFEAh + .faraddr 009FFFEBh + .faraddr 009FFFECh + .faraddr 009FFFEDh + .faraddr 009FFFEEh + .faraddr 009FFFEFh + .faraddr 009FFFF0h + .faraddr 009FFFF1h + .faraddr 009FFFF2h + .faraddr 009FFFF3h + .faraddr 009FFFF4h + .faraddr 009FFFF5h + .faraddr 009FFFF6h + .faraddr 009FFFF7h + .faraddr 009FFFF8h + .faraddr 009FFFF9h + .faraddr 009FFFFAh + .faraddr 009FFFFBh + .faraddr 009FFFFCh + .faraddr 009FFFFDh + .faraddr 009FFFFEh + .faraddr 009FFFFFh + .faraddr 00A00000h + .faraddr 00A00001h + .faraddr 00A00002h + .faraddr 00A00003h + .faraddr 00A00004h + .faraddr 00A00005h + .faraddr 00A00006h + .faraddr 00A00007h + .faraddr 00A00008h + .faraddr 00A00009h + .faraddr 00A0000Ah + .faraddr 00A0000Bh + .faraddr 00A0000Ch + .faraddr 00A0000Dh + .faraddr 00A0000Eh + .faraddr 00A0000Fh + .faraddr 00FFFFE1h + .faraddr 00FFFFE2h + .faraddr 00FFFFE3h + .faraddr 00FFFFE4h + .faraddr 00FFFFE5h + .faraddr 00FFFFE6h + .faraddr 00FFFFE7h + .faraddr 00FFFFE8h + .faraddr 00FFFFE9h + .faraddr 00FFFFEAh + .faraddr 00FFFFEBh + .faraddr 00FFFFECh + .faraddr 00FFFFEDh + .faraddr 00FFFFEEh + .faraddr 00FFFFEFh + .faraddr 00FFFFF0h + .faraddr 00FFFFF1h + .faraddr 00FFFFF2h + .faraddr 00FFFFF3h + .faraddr 00FFFFF4h + .faraddr 00FFFFF5h + .faraddr 00FFFFF6h + .faraddr 00FFFFF7h + .faraddr 00FFFFF8h + .faraddr 00FFFFF9h + .faraddr 00FFFFFAh + .faraddr 00FFFFFBh + .faraddr 00FFFFFCh + .faraddr 00FFFFFDh + .faraddr 00FFFFFEh + .faraddr 00FFFFFFh + + ; alternative hex values, always leading zero + .faraddr 00h + .faraddr 01h + .faraddr 02h + .faraddr 03h + .faraddr 04h + .faraddr 05h + .faraddr 06h + .faraddr 07h + .faraddr 08h + .faraddr 09h + .faraddr 0ah + .faraddr 0bh + .faraddr 0ch + .faraddr 0dh + .faraddr 0eh + .faraddr 0fh + .faraddr 010h + .faraddr 011h + .faraddr 012h + .faraddr 013h + .faraddr 070h + .faraddr 071h + .faraddr 072h + .faraddr 073h + .faraddr 074h + .faraddr 075h + .faraddr 076h + .faraddr 077h + .faraddr 078h + .faraddr 079h + .faraddr 07ah + .faraddr 07bh + .faraddr 07ch + .faraddr 07dh + .faraddr 07eh + .faraddr 07fh + .faraddr 080h + .faraddr 081h + .faraddr 082h + .faraddr 083h + .faraddr 084h + .faraddr 085h + .faraddr 086h + .faraddr 0f0h + .faraddr 0f1h + .faraddr 0f2h + .faraddr 0f3h + .faraddr 0f4h + .faraddr 0f5h + .faraddr 0f6h + .faraddr 0f7h + .faraddr 0f8h + .faraddr 0f9h + .faraddr 0fah + .faraddr 0fbh + .faraddr 0fch + .faraddr 0fdh + .faraddr 0feh + .faraddr 0ffh + .faraddr 0100h + .faraddr 0101h + .faraddr 0102h + .faraddr 0103h + .faraddr 0fd2h + .faraddr 0fd3h + .faraddr 0fd4h + .faraddr 0fd5h + .faraddr 0fd6h + .faraddr 0fd7h + .faraddr 0fd8h + .faraddr 0fd9h + .faraddr 0fdah + .faraddr 0fdbh + .faraddr 0fdch + .faraddr 0fddh + .faraddr 0fdeh + .faraddr 0fdfh + .faraddr 0fe0h + .faraddr 0fe1h + .faraddr 0fe2h + .faraddr 0fe3h + .faraddr 0fe4h + .faraddr 0fe5h + .faraddr 0fe6h + .faraddr 0fe7h + .faraddr 0fe8h + .faraddr 0fe9h + .faraddr 0feah + .faraddr 0febh + .faraddr 0fech + .faraddr 0fedh + .faraddr 0feeh + .faraddr 0fefh + .faraddr 0ff0h + .faraddr 0ff1h + .faraddr 0ff2h + .faraddr 0ff3h + .faraddr 0ff4h + .faraddr 0ff5h + .faraddr 0ff6h + .faraddr 0ff7h + .faraddr 0ff8h + .faraddr 0ff9h + .faraddr 0ffah + .faraddr 0ffbh + .faraddr 0ffch + .faraddr 0ffdh + .faraddr 0ffeh + .faraddr 0fffh + .faraddr 01000h + .faraddr 01001h + .faraddr 01002h + .faraddr 01003h + .faraddr 01004h + .faraddr 01005h + .faraddr 01006h + .faraddr 01007h + .faraddr 01008h + .faraddr 07ff0h + .faraddr 07ff1h + .faraddr 07ff2h + .faraddr 07ff3h + .faraddr 07ff4h + .faraddr 07ff5h + .faraddr 07ff6h + .faraddr 07ff7h + .faraddr 07ff8h + .faraddr 07ff9h + .faraddr 07ffah + .faraddr 07ffbh + .faraddr 07ffch + .faraddr 07ffdh + .faraddr 07ffeh + .faraddr 07fffh + .faraddr 08000h + .faraddr 08001h + .faraddr 08002h + .faraddr 08003h + .faraddr 08004h + .faraddr 08005h + .faraddr 08006h + .faraddr 08007h + .faraddr 08008h + .faraddr 08009h + .faraddr 0800ah + .faraddr 0800bh + .faraddr 09fe1h + .faraddr 09fe2h + .faraddr 09fe3h + .faraddr 09fe4h + .faraddr 09fe5h + .faraddr 09fe6h + .faraddr 09fe7h + .faraddr 09fe8h + .faraddr 09fe9h + .faraddr 09feah + .faraddr 09febh + .faraddr 09fech + .faraddr 09fedh + .faraddr 09feeh + .faraddr 09fefh + .faraddr 09ff0h + .faraddr 09ff1h + .faraddr 09ff2h + .faraddr 09ff3h + .faraddr 09ff4h + .faraddr 09ff5h + .faraddr 09ff6h + .faraddr 09ff7h + .faraddr 09ff8h + .faraddr 09ff9h + .faraddr 09ffah + .faraddr 09ffbh + .faraddr 09ffch + .faraddr 09ffdh + .faraddr 09ffeh + .faraddr 09fffh + .faraddr 0a000h + .faraddr 0a001h + .faraddr 0a002h + .faraddr 0a003h + .faraddr 0a004h + .faraddr 0a005h + .faraddr 0a006h + .faraddr 0a007h + .faraddr 0a008h + .faraddr 0a009h + .faraddr 0a00ah + .faraddr 0a00bh + .faraddr 0a00ch + .faraddr 0a00dh + .faraddr 0a00eh + .faraddr 0a00fh + .faraddr 0afe1h + .faraddr 0afe2h + .faraddr 0afe3h + .faraddr 0afe4h + .faraddr 0afe5h + .faraddr 0afe6h + .faraddr 0afe7h + .faraddr 0afe8h + .faraddr 0afe9h + .faraddr 0afeah + .faraddr 0afebh + .faraddr 0afech + .faraddr 0afedh + .faraddr 0afeeh + .faraddr 0afefh + .faraddr 0aff0h + .faraddr 0aff1h + .faraddr 0aff2h + .faraddr 0aff3h + .faraddr 0aff4h + .faraddr 0aff5h + .faraddr 0aff6h + .faraddr 0aff7h + .faraddr 0aff8h + .faraddr 0aff9h + .faraddr 0affah + .faraddr 0affbh + .faraddr 0affch + .faraddr 0affdh + .faraddr 0affeh + .faraddr 0afffh + .faraddr 0b000h + .faraddr 0b001h + .faraddr 0b002h + .faraddr 0b003h + .faraddr 0b004h + .faraddr 0b005h + .faraddr 0b006h + .faraddr 0b007h + .faraddr 0b008h + .faraddr 0b009h + .faraddr 0b00ah + .faraddr 0b00bh + .faraddr 0b00ch + .faraddr 0b00dh + .faraddr 0b00eh + .faraddr 0b00fh + .faraddr 0ffe1h + .faraddr 0ffe2h + .faraddr 0ffe3h + .faraddr 0ffe4h + .faraddr 0ffe5h + .faraddr 0ffe6h + .faraddr 0ffe7h + .faraddr 0ffe8h + .faraddr 0ffe9h + .faraddr 0ffeah + .faraddr 0ffebh + .faraddr 0ffech + .faraddr 0ffedh + .faraddr 0ffeeh + .faraddr 0ffefh + .faraddr 0fff0h + .faraddr 0fff1h + .faraddr 0fff2h + .faraddr 0fff3h + .faraddr 0fff4h + .faraddr 0fff5h + .faraddr 0fff6h + .faraddr 0fff7h + .faraddr 0fff8h + .faraddr 0fff9h + .faraddr 0fffah + .faraddr 0fffbh + .faraddr 0fffch + .faraddr 0fffdh + .faraddr 0fffeh + .faraddr 0ffffh + .faraddr 010000h + .faraddr 010001h + .faraddr 010002h + .faraddr 010003h + .faraddr 010004h + .faraddr 010005h + .faraddr 010006h + .faraddr 010007h + .faraddr 010008h + .faraddr 010009h + .faraddr 01000ah + .faraddr 01000bh + .faraddr 01000ch + .faraddr 01000dh + .faraddr 01000eh + .faraddr 01000fh + .faraddr 010ffe1h + .faraddr 010ffe2h + .faraddr 010ffe3h + .faraddr 010ffe4h + .faraddr 010ffe5h + .faraddr 010ffe6h + .faraddr 010ffe7h + .faraddr 010ffe8h + .faraddr 010ffe9h + .faraddr 010ffeah + .faraddr 010ffebh + .faraddr 010ffech + .faraddr 010ffedh + .faraddr 010ffeeh + .faraddr 010ffefh + .faraddr 010fff0h + .faraddr 010fff1h + .faraddr 010fff2h + .faraddr 010fff3h + .faraddr 010fff4h + .faraddr 010fff5h + .faraddr 010fff6h + .faraddr 010fff7h + .faraddr 010fff8h + .faraddr 010fff9h + .faraddr 010fffah + .faraddr 010fffbh + .faraddr 010fffch + .faraddr 010fffdh + .faraddr 010fffeh + .faraddr 010ffffh + .faraddr 0110000h + .faraddr 0110001h + .faraddr 0110002h + .faraddr 0110003h + .faraddr 0110004h + .faraddr 0110005h + .faraddr 0110006h + .faraddr 0110007h + .faraddr 0110008h + .faraddr 0110009h + .faraddr 011000ah + .faraddr 011000bh + .faraddr 011000ch + .faraddr 011000dh + .faraddr 011000eh + .faraddr 011000fh + .faraddr 020ffe1h + .faraddr 020ffe2h + .faraddr 020ffe3h + .faraddr 020ffe4h + .faraddr 020ffe5h + .faraddr 020ffe6h + .faraddr 020ffe7h + .faraddr 020ffe8h + .faraddr 020ffe9h + .faraddr 020ffeah + .faraddr 020ffebh + .faraddr 020ffech + .faraddr 020ffedh + .faraddr 020ffeeh + .faraddr 020ffefh + .faraddr 020fff0h + .faraddr 020fff1h + .faraddr 020fff2h + .faraddr 020fff3h + .faraddr 020fff4h + .faraddr 020fff5h + .faraddr 020fff6h + .faraddr 020fff7h + .faraddr 020fff8h + .faraddr 020fff9h + .faraddr 020fffah + .faraddr 020fffbh + .faraddr 020fffch + .faraddr 020fffdh + .faraddr 020fffeh + .faraddr 020ffffh + .faraddr 0210000h + .faraddr 0210001h + .faraddr 0210002h + .faraddr 0210003h + .faraddr 0210004h + .faraddr 0210005h + .faraddr 0210006h + .faraddr 0210007h + .faraddr 0210008h + .faraddr 0210009h + .faraddr 021000ah + .faraddr 021000bh + .faraddr 021000ch + .faraddr 021000dh + .faraddr 021000eh + .faraddr 021000fh + .faraddr 07fffe1h + .faraddr 07fffe2h + .faraddr 07fffe3h + .faraddr 07fffe4h + .faraddr 07fffe5h + .faraddr 07fffe6h + .faraddr 07fffe7h + .faraddr 07fffe8h + .faraddr 07fffe9h + .faraddr 07fffeah + .faraddr 07fffebh + .faraddr 07fffech + .faraddr 07fffedh + .faraddr 07fffeeh + .faraddr 07fffefh + .faraddr 07ffff0h + .faraddr 07ffff1h + .faraddr 07ffff2h + .faraddr 07ffff3h + .faraddr 07ffff4h + .faraddr 07ffff5h + .faraddr 07ffff6h + .faraddr 07ffff7h + .faraddr 07ffff8h + .faraddr 07ffff9h + .faraddr 07ffffah + .faraddr 07ffffbh + .faraddr 07ffffch + .faraddr 07ffffdh + .faraddr 07ffffeh + .faraddr 07fffffh + .faraddr 0800000h + .faraddr 0800001h + .faraddr 0800002h + .faraddr 0800003h + .faraddr 0800004h + .faraddr 0800005h + .faraddr 0800006h + .faraddr 0800007h + .faraddr 0800008h + .faraddr 0800009h + .faraddr 080000ah + .faraddr 080000bh + .faraddr 080000ch + .faraddr 080000dh + .faraddr 080000eh + .faraddr 080000fh + .faraddr 09fffe1h + .faraddr 09fffe2h + .faraddr 09fffe3h + .faraddr 09fffe4h + .faraddr 09fffe5h + .faraddr 09fffe6h + .faraddr 09fffe7h + .faraddr 09fffe8h + .faraddr 09fffe9h + .faraddr 09fffeah + .faraddr 09fffebh + .faraddr 09fffech + .faraddr 09fffedh + .faraddr 09fffeeh + .faraddr 09fffefh + .faraddr 09ffff0h + .faraddr 09ffff1h + .faraddr 09ffff2h + .faraddr 09ffff3h + .faraddr 09ffff4h + .faraddr 09ffff5h + .faraddr 09ffff6h + .faraddr 09ffff7h + .faraddr 09ffff8h + .faraddr 09ffff9h + .faraddr 09ffffah + .faraddr 09ffffbh + .faraddr 09ffffch + .faraddr 09ffffdh + .faraddr 09ffffeh + .faraddr 09fffffh + .faraddr 0a00000h + .faraddr 0a00001h + .faraddr 0a00002h + .faraddr 0a00003h + .faraddr 0a00004h + .faraddr 0a00005h + .faraddr 0a00006h + .faraddr 0a00007h + .faraddr 0a00008h + .faraddr 0a00009h + .faraddr 0a0000ah + .faraddr 0a0000bh + .faraddr 0a0000ch + .faraddr 0a0000dh + .faraddr 0a0000eh + .faraddr 0a0000fh + .faraddr 0ffffe1h + .faraddr 0ffffe2h + .faraddr 0ffffe3h + .faraddr 0ffffe4h + .faraddr 0ffffe5h + .faraddr 0ffffe6h + .faraddr 0ffffe7h + .faraddr 0ffffe8h + .faraddr 0ffffe9h + .faraddr 0ffffeah + .faraddr 0ffffebh + .faraddr 0ffffech + .faraddr 0ffffedh + .faraddr 0ffffeeh + .faraddr 0ffffefh + .faraddr 0fffff0h + .faraddr 0fffff1h + .faraddr 0fffff2h + .faraddr 0fffff3h + .faraddr 0fffff4h + .faraddr 0fffff5h + .faraddr 0fffff6h + .faraddr 0fffff7h + .faraddr 0fffff8h + .faraddr 0fffff9h + .faraddr 0fffffah + .faraddr 0fffffbh + .faraddr 0fffffch + .faraddr 0fffffdh + .faraddr 0fffffeh + .faraddr 0ffffffh + + ; binary values, variable length + .faraddr %0 + .faraddr %01 + .faraddr %010 + .faraddr %011 + .faraddr %0100 + .faraddr %0101 + .faraddr %0110 + .faraddr %0111 + .faraddr %01000 + .faraddr %01001 + .faraddr %01010 + .faraddr %01011 + .faraddr %01100 + .faraddr %01101 + .faraddr %01110 + .faraddr %01111 + .faraddr %010000 + .faraddr %010001 + .faraddr %010010 + .faraddr %010011 + .faraddr %01110000 + .faraddr %01110001 + .faraddr %01110010 + .faraddr %01110011 + .faraddr %01110100 + .faraddr %01110101 + .faraddr %01110110 + .faraddr %01110111 + .faraddr %01111000 + .faraddr %01111001 + .faraddr %01111010 + .faraddr %01111011 + .faraddr %01111100 + .faraddr %01111101 + .faraddr %01111110 + .faraddr %01111111 + .faraddr %010000000 + .faraddr %010000001 + .faraddr %010000010 + .faraddr %010000011 + .faraddr %010000100 + .faraddr %010000101 + .faraddr %010000110 + .faraddr %011110000 + .faraddr %011110001 + .faraddr %011110010 + .faraddr %011110011 + .faraddr %011110100 + .faraddr %011110101 + .faraddr %011110110 + .faraddr %011110111 + .faraddr %011111000 + .faraddr %011111001 + .faraddr %011111010 + .faraddr %011111011 + .faraddr %011111100 + .faraddr %011111101 + .faraddr %011111110 + .faraddr %011111111 + .faraddr %0100000000 + .faraddr %0100000001 + .faraddr %0100000010 + .faraddr %0100000011 + .faraddr %0111111010010 + .faraddr %0111111010011 + .faraddr %0111111010100 + .faraddr %0111111010101 + .faraddr %0111111010110 + .faraddr %0111111010111 + .faraddr %0111111011000 + .faraddr %0111111011001 + .faraddr %0111111011010 + .faraddr %0111111011011 + .faraddr %0111111011100 + .faraddr %0111111011101 + .faraddr %0111111011110 + .faraddr %0111111011111 + .faraddr %0111111100000 + .faraddr %0111111100001 + .faraddr %0111111100010 + .faraddr %0111111100011 + .faraddr %0111111100100 + .faraddr %0111111100101 + .faraddr %0111111100110 + .faraddr %0111111100111 + .faraddr %0111111101000 + .faraddr %0111111101001 + .faraddr %0111111101010 + .faraddr %0111111101011 + .faraddr %0111111101100 + .faraddr %0111111101101 + .faraddr %0111111101110 + .faraddr %0111111101111 + .faraddr %0111111110000 + .faraddr %0111111110001 + .faraddr %0111111110010 + .faraddr %0111111110011 + .faraddr %0111111110100 + .faraddr %0111111110101 + .faraddr %0111111110110 + .faraddr %0111111110111 + .faraddr %0111111111000 + .faraddr %0111111111001 + .faraddr %0111111111010 + .faraddr %0111111111011 + .faraddr %0111111111100 + .faraddr %0111111111101 + .faraddr %0111111111110 + .faraddr %0111111111111 + .faraddr %01000000000000 + .faraddr %01000000000001 + .faraddr %01000000000010 + .faraddr %01000000000011 + .faraddr %01000000000100 + .faraddr %01000000000101 + .faraddr %01000000000110 + .faraddr %01000000000111 + .faraddr %01000000001000 + .faraddr %0111111111110000 + .faraddr %0111111111110001 + .faraddr %0111111111110010 + .faraddr %0111111111110011 + .faraddr %0111111111110100 + .faraddr %0111111111110101 + .faraddr %0111111111110110 + .faraddr %0111111111110111 + .faraddr %0111111111111000 + .faraddr %0111111111111001 + .faraddr %0111111111111010 + .faraddr %0111111111111011 + .faraddr %0111111111111100 + .faraddr %0111111111111101 + .faraddr %0111111111111110 + .faraddr %0111111111111111 + .faraddr %01000000000000000 + .faraddr %01000000000000001 + .faraddr %01000000000000010 + .faraddr %01000000000000011 + .faraddr %01000000000000100 + .faraddr %01000000000000101 + .faraddr %01000000000000110 + .faraddr %01000000000000111 + .faraddr %01000000000001000 + .faraddr %01000000000001001 + .faraddr %01000000000001010 + .faraddr %01000000000001011 + .faraddr %01001111111100001 + .faraddr %01001111111100010 + .faraddr %01001111111100011 + .faraddr %01001111111100100 + .faraddr %01001111111100101 + .faraddr %01001111111100110 + .faraddr %01001111111100111 + .faraddr %01001111111101000 + .faraddr %01001111111101001 + .faraddr %01001111111101010 + .faraddr %01001111111101011 + .faraddr %01001111111101100 + .faraddr %01001111111101101 + .faraddr %01001111111101110 + .faraddr %01001111111101111 + .faraddr %01001111111110000 + .faraddr %01001111111110001 + .faraddr %01001111111110010 + .faraddr %01001111111110011 + .faraddr %01001111111110100 + .faraddr %01001111111110101 + .faraddr %01001111111110110 + .faraddr %01001111111110111 + .faraddr %01001111111111000 + .faraddr %01001111111111001 + .faraddr %01001111111111010 + .faraddr %01001111111111011 + .faraddr %01001111111111100 + .faraddr %01001111111111101 + .faraddr %01001111111111110 + .faraddr %01001111111111111 + .faraddr %01010000000000000 + .faraddr %01010000000000001 + .faraddr %01010000000000010 + .faraddr %01010000000000011 + .faraddr %01010000000000100 + .faraddr %01010000000000101 + .faraddr %01010000000000110 + .faraddr %01010000000000111 + .faraddr %01010000000001000 + .faraddr %01010000000001001 + .faraddr %01010000000001010 + .faraddr %01010000000001011 + .faraddr %01010000000001100 + .faraddr %01010000000001101 + .faraddr %01010000000001110 + .faraddr %01010000000001111 + .faraddr %01010111111100001 + .faraddr %01010111111100010 + .faraddr %01010111111100011 + .faraddr %01010111111100100 + .faraddr %01010111111100101 + .faraddr %01010111111100110 + .faraddr %01010111111100111 + .faraddr %01010111111101000 + .faraddr %01010111111101001 + .faraddr %01010111111101010 + .faraddr %01010111111101011 + .faraddr %01010111111101100 + .faraddr %01010111111101101 + .faraddr %01010111111101110 + .faraddr %01010111111101111 + .faraddr %01010111111110000 + .faraddr %01010111111110001 + .faraddr %01010111111110010 + .faraddr %01010111111110011 + .faraddr %01010111111110100 + .faraddr %01010111111110101 + .faraddr %01010111111110110 + .faraddr %01010111111110111 + .faraddr %01010111111111000 + .faraddr %01010111111111001 + .faraddr %01010111111111010 + .faraddr %01010111111111011 + .faraddr %01010111111111100 + .faraddr %01010111111111101 + .faraddr %01010111111111110 + .faraddr %01010111111111111 + .faraddr %01011000000000000 + .faraddr %01011000000000001 + .faraddr %01011000000000010 + .faraddr %01011000000000011 + .faraddr %01011000000000100 + .faraddr %01011000000000101 + .faraddr %01011000000000110 + .faraddr %01011000000000111 + .faraddr %01011000000001000 + .faraddr %01011000000001001 + .faraddr %01011000000001010 + .faraddr %01011000000001011 + .faraddr %01011000000001100 + .faraddr %01011000000001101 + .faraddr %01011000000001110 + .faraddr %01011000000001111 + .faraddr %01111111111100001 + .faraddr %01111111111100010 + .faraddr %01111111111100011 + .faraddr %01111111111100100 + .faraddr %01111111111100101 + .faraddr %01111111111100110 + .faraddr %01111111111100111 + .faraddr %01111111111101000 + .faraddr %01111111111101001 + .faraddr %01111111111101010 + .faraddr %01111111111101011 + .faraddr %01111111111101100 + .faraddr %01111111111101101 + .faraddr %01111111111101110 + .faraddr %01111111111101111 + .faraddr %01111111111110000 + .faraddr %01111111111110001 + .faraddr %01111111111110010 + .faraddr %01111111111110011 + .faraddr %01111111111110100 + .faraddr %01111111111110101 + .faraddr %01111111111110110 + .faraddr %01111111111110111 + .faraddr %01111111111111000 + .faraddr %01111111111111001 + .faraddr %01111111111111010 + .faraddr %01111111111111011 + .faraddr %01111111111111100 + .faraddr %01111111111111101 + .faraddr %01111111111111110 + .faraddr %01111111111111111 + .faraddr %10000000000000000 + .faraddr %10000000000000001 + .faraddr %10000000000000010 + .faraddr %10000000000000011 + .faraddr %10000000000000100 + .faraddr %10000000000000101 + .faraddr %10000000000000110 + .faraddr %10000000000000111 + .faraddr %10000000000001000 + .faraddr %10000000000001001 + .faraddr %10000000000001010 + .faraddr %10000000000001011 + .faraddr %10000000000001100 + .faraddr %10000000000001101 + .faraddr %10000000000001110 + .faraddr %10000000000001111 + .faraddr %100001111111111100001 + .faraddr %100001111111111100010 + .faraddr %100001111111111100011 + .faraddr %100001111111111100100 + .faraddr %100001111111111100101 + .faraddr %100001111111111100110 + .faraddr %100001111111111100111 + .faraddr %100001111111111101000 + .faraddr %100001111111111101001 + .faraddr %100001111111111101010 + .faraddr %100001111111111101011 + .faraddr %100001111111111101100 + .faraddr %100001111111111101101 + .faraddr %100001111111111101110 + .faraddr %100001111111111101111 + .faraddr %100001111111111110000 + .faraddr %100001111111111110001 + .faraddr %100001111111111110010 + .faraddr %100001111111111110011 + .faraddr %100001111111111110100 + .faraddr %100001111111111110101 + .faraddr %100001111111111110110 + .faraddr %100001111111111110111 + .faraddr %100001111111111111000 + .faraddr %100001111111111111001 + .faraddr %100001111111111111010 + .faraddr %100001111111111111011 + .faraddr %100001111111111111100 + .faraddr %100001111111111111101 + .faraddr %100001111111111111110 + .faraddr %100001111111111111111 + .faraddr %100010000000000000000 + .faraddr %100010000000000000001 + .faraddr %100010000000000000010 + .faraddr %100010000000000000011 + .faraddr %100010000000000000100 + .faraddr %100010000000000000101 + .faraddr %100010000000000000110 + .faraddr %100010000000000000111 + .faraddr %100010000000000001000 + .faraddr %100010000000000001001 + .faraddr %100010000000000001010 + .faraddr %100010000000000001011 + .faraddr %100010000000000001100 + .faraddr %100010000000000001101 + .faraddr %100010000000000001110 + .faraddr %100010000000000001111 + .faraddr %1000001111111111100001 + .faraddr %1000001111111111100010 + .faraddr %1000001111111111100011 + .faraddr %1000001111111111100100 + .faraddr %1000001111111111100101 + .faraddr %1000001111111111100110 + .faraddr %1000001111111111100111 + .faraddr %1000001111111111101000 + .faraddr %1000001111111111101001 + .faraddr %1000001111111111101010 + .faraddr %1000001111111111101011 + .faraddr %1000001111111111101100 + .faraddr %1000001111111111101101 + .faraddr %1000001111111111101110 + .faraddr %1000001111111111101111 + .faraddr %1000001111111111110000 + .faraddr %1000001111111111110001 + .faraddr %1000001111111111110010 + .faraddr %1000001111111111110011 + .faraddr %1000001111111111110100 + .faraddr %1000001111111111110101 + .faraddr %1000001111111111110110 + .faraddr %1000001111111111110111 + .faraddr %1000001111111111111000 + .faraddr %1000001111111111111001 + .faraddr %1000001111111111111010 + .faraddr %1000001111111111111011 + .faraddr %1000001111111111111100 + .faraddr %1000001111111111111101 + .faraddr %1000001111111111111110 + .faraddr %1000001111111111111111 + .faraddr %1000010000000000000000 + .faraddr %1000010000000000000001 + .faraddr %1000010000000000000010 + .faraddr %1000010000000000000011 + .faraddr %1000010000000000000100 + .faraddr %1000010000000000000101 + .faraddr %1000010000000000000110 + .faraddr %1000010000000000000111 + .faraddr %1000010000000000001000 + .faraddr %1000010000000000001001 + .faraddr %1000010000000000001010 + .faraddr %1000010000000000001011 + .faraddr %1000010000000000001100 + .faraddr %1000010000000000001101 + .faraddr %1000010000000000001110 + .faraddr %1000010000000000001111 + .faraddr %11111111111111111100001 + .faraddr %11111111111111111100010 + .faraddr %11111111111111111100011 + .faraddr %11111111111111111100100 + .faraddr %11111111111111111100101 + .faraddr %11111111111111111100110 + .faraddr %11111111111111111100111 + .faraddr %11111111111111111101000 + .faraddr %11111111111111111101001 + .faraddr %11111111111111111101010 + .faraddr %11111111111111111101011 + .faraddr %11111111111111111101100 + .faraddr %11111111111111111101101 + .faraddr %11111111111111111101110 + .faraddr %11111111111111111101111 + .faraddr %11111111111111111110000 + .faraddr %11111111111111111110001 + .faraddr %11111111111111111110010 + .faraddr %11111111111111111110011 + .faraddr %11111111111111111110100 + .faraddr %11111111111111111110101 + .faraddr %11111111111111111110110 + .faraddr %11111111111111111110111 + .faraddr %11111111111111111111000 + .faraddr %11111111111111111111001 + .faraddr %11111111111111111111010 + .faraddr %11111111111111111111011 + .faraddr %11111111111111111111100 + .faraddr %11111111111111111111101 + .faraddr %11111111111111111111110 + .faraddr %11111111111111111111111 + .faraddr %100000000000000000000000 + .faraddr %100000000000000000000001 + .faraddr %100000000000000000000010 + .faraddr %100000000000000000000011 + .faraddr %100000000000000000000100 + .faraddr %100000000000000000000101 + .faraddr %100000000000000000000110 + .faraddr %100000000000000000000111 + .faraddr %100000000000000000001000 + .faraddr %100000000000000000001001 + .faraddr %100000000000000000001010 + .faraddr %100000000000000000001011 + .faraddr %100000000000000000001100 + .faraddr %100000000000000000001101 + .faraddr %100000000000000000001110 + .faraddr %100000000000000000001111 + .faraddr %100111111111111111100001 + .faraddr %100111111111111111100010 + .faraddr %100111111111111111100011 + .faraddr %100111111111111111100100 + .faraddr %100111111111111111100101 + .faraddr %100111111111111111100110 + .faraddr %100111111111111111100111 + .faraddr %100111111111111111101000 + .faraddr %100111111111111111101001 + .faraddr %100111111111111111101010 + .faraddr %100111111111111111101011 + .faraddr %100111111111111111101100 + .faraddr %100111111111111111101101 + .faraddr %100111111111111111101110 + .faraddr %100111111111111111101111 + .faraddr %100111111111111111110000 + .faraddr %100111111111111111110001 + .faraddr %100111111111111111110010 + .faraddr %100111111111111111110011 + .faraddr %100111111111111111110100 + .faraddr %100111111111111111110101 + .faraddr %100111111111111111110110 + .faraddr %100111111111111111110111 + .faraddr %100111111111111111111000 + .faraddr %100111111111111111111001 + .faraddr %100111111111111111111010 + .faraddr %100111111111111111111011 + .faraddr %100111111111111111111100 + .faraddr %100111111111111111111101 + .faraddr %100111111111111111111110 + .faraddr %100111111111111111111111 + .faraddr %101000000000000000000000 + .faraddr %101000000000000000000001 + .faraddr %101000000000000000000010 + .faraddr %101000000000000000000011 + .faraddr %101000000000000000000100 + .faraddr %101000000000000000000101 + .faraddr %101000000000000000000110 + .faraddr %101000000000000000000111 + .faraddr %101000000000000000001000 + .faraddr %101000000000000000001001 + .faraddr %101000000000000000001010 + .faraddr %101000000000000000001011 + .faraddr %101000000000000000001100 + .faraddr %101000000000000000001101 + .faraddr %101000000000000000001110 + .faraddr %101000000000000000001111 + .faraddr %111111111111111111100001 + .faraddr %111111111111111111100010 + .faraddr %111111111111111111100011 + .faraddr %111111111111111111100100 + .faraddr %111111111111111111100101 + .faraddr %111111111111111111100110 + .faraddr %111111111111111111100111 + .faraddr %111111111111111111101000 + .faraddr %111111111111111111101001 + .faraddr %111111111111111111101010 + .faraddr %111111111111111111101011 + .faraddr %111111111111111111101100 + .faraddr %111111111111111111101101 + .faraddr %111111111111111111101110 + .faraddr %111111111111111111101111 + .faraddr %111111111111111111110000 + .faraddr %111111111111111111110001 + .faraddr %111111111111111111110010 + .faraddr %111111111111111111110011 + .faraddr %111111111111111111110100 + .faraddr %111111111111111111110101 + .faraddr %111111111111111111110110 + .faraddr %111111111111111111110111 + .faraddr %111111111111111111111000 + .faraddr %111111111111111111111001 + .faraddr %111111111111111111111010 + .faraddr %111111111111111111111011 + .faraddr %111111111111111111111100 + .faraddr %111111111111111111111101 + .faraddr %111111111111111111111110 + .faraddr %111111111111111111111111 + + ; binary values, full length + .faraddr %000000000000000000000000 + .faraddr %000000000000000000000001 + .faraddr %000000000000000000000010 + .faraddr %000000000000000000000011 + .faraddr %000000000000000000000100 + .faraddr %000000000000000000000101 + .faraddr %000000000000000000000110 + .faraddr %000000000000000000000111 + .faraddr %000000000000000000001000 + .faraddr %000000000000000000001001 + .faraddr %000000000000000000001010 + .faraddr %000000000000000000001011 + .faraddr %000000000000000000001100 + .faraddr %000000000000000000001101 + .faraddr %000000000000000000001110 + .faraddr %000000000000000000001111 + .faraddr %000000000000000000010000 + .faraddr %000000000000000000010001 + .faraddr %000000000000000000010010 + .faraddr %000000000000000000010011 + .faraddr %000000000000000001110000 + .faraddr %000000000000000001110001 + .faraddr %000000000000000001110010 + .faraddr %000000000000000001110011 + .faraddr %000000000000000001110100 + .faraddr %000000000000000001110101 + .faraddr %000000000000000001110110 + .faraddr %000000000000000001110111 + .faraddr %000000000000000001111000 + .faraddr %000000000000000001111001 + .faraddr %000000000000000001111010 + .faraddr %000000000000000001111011 + .faraddr %000000000000000001111100 + .faraddr %000000000000000001111101 + .faraddr %000000000000000001111110 + .faraddr %000000000000000001111111 + .faraddr %000000000000000010000000 + .faraddr %000000000000000010000001 + .faraddr %000000000000000010000010 + .faraddr %000000000000000010000011 + .faraddr %000000000000000010000100 + .faraddr %000000000000000010000101 + .faraddr %000000000000000010000110 + .faraddr %000000000000000011110000 + .faraddr %000000000000000011110001 + .faraddr %000000000000000011110010 + .faraddr %000000000000000011110011 + .faraddr %000000000000000011110100 + .faraddr %000000000000000011110101 + .faraddr %000000000000000011110110 + .faraddr %000000000000000011110111 + .faraddr %000000000000000011111000 + .faraddr %000000000000000011111001 + .faraddr %000000000000000011111010 + .faraddr %000000000000000011111011 + .faraddr %000000000000000011111100 + .faraddr %000000000000000011111101 + .faraddr %000000000000000011111110 + .faraddr %000000000000000011111111 + .faraddr %000000000000000100000000 + .faraddr %000000000000000100000001 + .faraddr %000000000000000100000010 + .faraddr %000000000000000100000011 + .faraddr %000000000000111111010010 + .faraddr %000000000000111111010011 + .faraddr %000000000000111111010100 + .faraddr %000000000000111111010101 + .faraddr %000000000000111111010110 + .faraddr %000000000000111111010111 + .faraddr %000000000000111111011000 + .faraddr %000000000000111111011001 + .faraddr %000000000000111111011010 + .faraddr %000000000000111111011011 + .faraddr %000000000000111111011100 + .faraddr %000000000000111111011101 + .faraddr %000000000000111111011110 + .faraddr %000000000000111111011111 + .faraddr %000000000000111111100000 + .faraddr %000000000000111111100001 + .faraddr %000000000000111111100010 + .faraddr %000000000000111111100011 + .faraddr %000000000000111111100100 + .faraddr %000000000000111111100101 + .faraddr %000000000000111111100110 + .faraddr %000000000000111111100111 + .faraddr %000000000000111111101000 + .faraddr %000000000000111111101001 + .faraddr %000000000000111111101010 + .faraddr %000000000000111111101011 + .faraddr %000000000000111111101100 + .faraddr %000000000000111111101101 + .faraddr %000000000000111111101110 + .faraddr %000000000000111111101111 + .faraddr %000000000000111111110000 + .faraddr %000000000000111111110001 + .faraddr %000000000000111111110010 + .faraddr %000000000000111111110011 + .faraddr %000000000000111111110100 + .faraddr %000000000000111111110101 + .faraddr %000000000000111111110110 + .faraddr %000000000000111111110111 + .faraddr %000000000000111111111000 + .faraddr %000000000000111111111001 + .faraddr %000000000000111111111010 + .faraddr %000000000000111111111011 + .faraddr %000000000000111111111100 + .faraddr %000000000000111111111101 + .faraddr %000000000000111111111110 + .faraddr %000000000000111111111111 + .faraddr %000000000001000000000000 + .faraddr %000000000001000000000001 + .faraddr %000000000001000000000010 + .faraddr %000000000001000000000011 + .faraddr %000000000001000000000100 + .faraddr %000000000001000000000101 + .faraddr %000000000001000000000110 + .faraddr %000000000001000000000111 + .faraddr %000000000001000000001000 + .faraddr %000000000111111111110000 + .faraddr %000000000111111111110001 + .faraddr %000000000111111111110010 + .faraddr %000000000111111111110011 + .faraddr %000000000111111111110100 + .faraddr %000000000111111111110101 + .faraddr %000000000111111111110110 + .faraddr %000000000111111111110111 + .faraddr %000000000111111111111000 + .faraddr %000000000111111111111001 + .faraddr %000000000111111111111010 + .faraddr %000000000111111111111011 + .faraddr %000000000111111111111100 + .faraddr %000000000111111111111101 + .faraddr %000000000111111111111110 + .faraddr %000000000111111111111111 + .faraddr %000000001000000000000000 + .faraddr %000000001000000000000001 + .faraddr %000000001000000000000010 + .faraddr %000000001000000000000011 + .faraddr %000000001000000000000100 + .faraddr %000000001000000000000101 + .faraddr %000000001000000000000110 + .faraddr %000000001000000000000111 + .faraddr %000000001000000000001000 + .faraddr %000000001000000000001001 + .faraddr %000000001000000000001010 + .faraddr %000000001000000000001011 + .faraddr %000000001001111111100001 + .faraddr %000000001001111111100010 + .faraddr %000000001001111111100011 + .faraddr %000000001001111111100100 + .faraddr %000000001001111111100101 + .faraddr %000000001001111111100110 + .faraddr %000000001001111111100111 + .faraddr %000000001001111111101000 + .faraddr %000000001001111111101001 + .faraddr %000000001001111111101010 + .faraddr %000000001001111111101011 + .faraddr %000000001001111111101100 + .faraddr %000000001001111111101101 + .faraddr %000000001001111111101110 + .faraddr %000000001001111111101111 + .faraddr %000000001001111111110000 + .faraddr %000000001001111111110001 + .faraddr %000000001001111111110010 + .faraddr %000000001001111111110011 + .faraddr %000000001001111111110100 + .faraddr %000000001001111111110101 + .faraddr %000000001001111111110110 + .faraddr %000000001001111111110111 + .faraddr %000000001001111111111000 + .faraddr %000000001001111111111001 + .faraddr %000000001001111111111010 + .faraddr %000000001001111111111011 + .faraddr %000000001001111111111100 + .faraddr %000000001001111111111101 + .faraddr %000000001001111111111110 + .faraddr %000000001001111111111111 + .faraddr %000000001010000000000000 + .faraddr %000000001010000000000001 + .faraddr %000000001010000000000010 + .faraddr %000000001010000000000011 + .faraddr %000000001010000000000100 + .faraddr %000000001010000000000101 + .faraddr %000000001010000000000110 + .faraddr %000000001010000000000111 + .faraddr %000000001010000000001000 + .faraddr %000000001010000000001001 + .faraddr %000000001010000000001010 + .faraddr %000000001010000000001011 + .faraddr %000000001010000000001100 + .faraddr %000000001010000000001101 + .faraddr %000000001010000000001110 + .faraddr %000000001010000000001111 + .faraddr %000000001010111111100001 + .faraddr %000000001010111111100010 + .faraddr %000000001010111111100011 + .faraddr %000000001010111111100100 + .faraddr %000000001010111111100101 + .faraddr %000000001010111111100110 + .faraddr %000000001010111111100111 + .faraddr %000000001010111111101000 + .faraddr %000000001010111111101001 + .faraddr %000000001010111111101010 + .faraddr %000000001010111111101011 + .faraddr %000000001010111111101100 + .faraddr %000000001010111111101101 + .faraddr %000000001010111111101110 + .faraddr %000000001010111111101111 + .faraddr %000000001010111111110000 + .faraddr %000000001010111111110001 + .faraddr %000000001010111111110010 + .faraddr %000000001010111111110011 + .faraddr %000000001010111111110100 + .faraddr %000000001010111111110101 + .faraddr %000000001010111111110110 + .faraddr %000000001010111111110111 + .faraddr %000000001010111111111000 + .faraddr %000000001010111111111001 + .faraddr %000000001010111111111010 + .faraddr %000000001010111111111011 + .faraddr %000000001010111111111100 + .faraddr %000000001010111111111101 + .faraddr %000000001010111111111110 + .faraddr %000000001010111111111111 + .faraddr %000000001011000000000000 + .faraddr %000000001011000000000001 + .faraddr %000000001011000000000010 + .faraddr %000000001011000000000011 + .faraddr %000000001011000000000100 + .faraddr %000000001011000000000101 + .faraddr %000000001011000000000110 + .faraddr %000000001011000000000111 + .faraddr %000000001011000000001000 + .faraddr %000000001011000000001001 + .faraddr %000000001011000000001010 + .faraddr %000000001011000000001011 + .faraddr %000000001011000000001100 + .faraddr %000000001011000000001101 + .faraddr %000000001011000000001110 + .faraddr %000000001011000000001111 + .faraddr %000000001111111111100001 + .faraddr %000000001111111111100010 + .faraddr %000000001111111111100011 + .faraddr %000000001111111111100100 + .faraddr %000000001111111111100101 + .faraddr %000000001111111111100110 + .faraddr %000000001111111111100111 + .faraddr %000000001111111111101000 + .faraddr %000000001111111111101001 + .faraddr %000000001111111111101010 + .faraddr %000000001111111111101011 + .faraddr %000000001111111111101100 + .faraddr %000000001111111111101101 + .faraddr %000000001111111111101110 + .faraddr %000000001111111111101111 + .faraddr %000000001111111111110000 + .faraddr %000000001111111111110001 + .faraddr %000000001111111111110010 + .faraddr %000000001111111111110011 + .faraddr %000000001111111111110100 + .faraddr %000000001111111111110101 + .faraddr %000000001111111111110110 + .faraddr %000000001111111111110111 + .faraddr %000000001111111111111000 + .faraddr %000000001111111111111001 + .faraddr %000000001111111111111010 + .faraddr %000000001111111111111011 + .faraddr %000000001111111111111100 + .faraddr %000000001111111111111101 + .faraddr %000000001111111111111110 + .faraddr %000000001111111111111111 + .faraddr %000000010000000000000000 + .faraddr %000000010000000000000001 + .faraddr %000000010000000000000010 + .faraddr %000000010000000000000011 + .faraddr %000000010000000000000100 + .faraddr %000000010000000000000101 + .faraddr %000000010000000000000110 + .faraddr %000000010000000000000111 + .faraddr %000000010000000000001000 + .faraddr %000000010000000000001001 + .faraddr %000000010000000000001010 + .faraddr %000000010000000000001011 + .faraddr %000000010000000000001100 + .faraddr %000000010000000000001101 + .faraddr %000000010000000000001110 + .faraddr %000000010000000000001111 + .faraddr %000100001111111111100001 + .faraddr %000100001111111111100010 + .faraddr %000100001111111111100011 + .faraddr %000100001111111111100100 + .faraddr %000100001111111111100101 + .faraddr %000100001111111111100110 + .faraddr %000100001111111111100111 + .faraddr %000100001111111111101000 + .faraddr %000100001111111111101001 + .faraddr %000100001111111111101010 + .faraddr %000100001111111111101011 + .faraddr %000100001111111111101100 + .faraddr %000100001111111111101101 + .faraddr %000100001111111111101110 + .faraddr %000100001111111111101111 + .faraddr %000100001111111111110000 + .faraddr %000100001111111111110001 + .faraddr %000100001111111111110010 + .faraddr %000100001111111111110011 + .faraddr %000100001111111111110100 + .faraddr %000100001111111111110101 + .faraddr %000100001111111111110110 + .faraddr %000100001111111111110111 + .faraddr %000100001111111111111000 + .faraddr %000100001111111111111001 + .faraddr %000100001111111111111010 + .faraddr %000100001111111111111011 + .faraddr %000100001111111111111100 + .faraddr %000100001111111111111101 + .faraddr %000100001111111111111110 + .faraddr %000100001111111111111111 + .faraddr %000100010000000000000000 + .faraddr %000100010000000000000001 + .faraddr %000100010000000000000010 + .faraddr %000100010000000000000011 + .faraddr %000100010000000000000100 + .faraddr %000100010000000000000101 + .faraddr %000100010000000000000110 + .faraddr %000100010000000000000111 + .faraddr %000100010000000000001000 + .faraddr %000100010000000000001001 + .faraddr %000100010000000000001010 + .faraddr %000100010000000000001011 + .faraddr %000100010000000000001100 + .faraddr %000100010000000000001101 + .faraddr %000100010000000000001110 + .faraddr %000100010000000000001111 + .faraddr %001000001111111111100001 + .faraddr %001000001111111111100010 + .faraddr %001000001111111111100011 + .faraddr %001000001111111111100100 + .faraddr %001000001111111111100101 + .faraddr %001000001111111111100110 + .faraddr %001000001111111111100111 + .faraddr %001000001111111111101000 + .faraddr %001000001111111111101001 + .faraddr %001000001111111111101010 + .faraddr %001000001111111111101011 + .faraddr %001000001111111111101100 + .faraddr %001000001111111111101101 + .faraddr %001000001111111111101110 + .faraddr %001000001111111111101111 + .faraddr %001000001111111111110000 + .faraddr %001000001111111111110001 + .faraddr %001000001111111111110010 + .faraddr %001000001111111111110011 + .faraddr %001000001111111111110100 + .faraddr %001000001111111111110101 + .faraddr %001000001111111111110110 + .faraddr %001000001111111111110111 + .faraddr %001000001111111111111000 + .faraddr %001000001111111111111001 + .faraddr %001000001111111111111010 + .faraddr %001000001111111111111011 + .faraddr %001000001111111111111100 + .faraddr %001000001111111111111101 + .faraddr %001000001111111111111110 + .faraddr %001000001111111111111111 + .faraddr %001000010000000000000000 + .faraddr %001000010000000000000001 + .faraddr %001000010000000000000010 + .faraddr %001000010000000000000011 + .faraddr %001000010000000000000100 + .faraddr %001000010000000000000101 + .faraddr %001000010000000000000110 + .faraddr %001000010000000000000111 + .faraddr %001000010000000000001000 + .faraddr %001000010000000000001001 + .faraddr %001000010000000000001010 + .faraddr %001000010000000000001011 + .faraddr %001000010000000000001100 + .faraddr %001000010000000000001101 + .faraddr %001000010000000000001110 + .faraddr %001000010000000000001111 + .faraddr %011111111111111111100001 + .faraddr %011111111111111111100010 + .faraddr %011111111111111111100011 + .faraddr %011111111111111111100100 + .faraddr %011111111111111111100101 + .faraddr %011111111111111111100110 + .faraddr %011111111111111111100111 + .faraddr %011111111111111111101000 + .faraddr %011111111111111111101001 + .faraddr %011111111111111111101010 + .faraddr %011111111111111111101011 + .faraddr %011111111111111111101100 + .faraddr %011111111111111111101101 + .faraddr %011111111111111111101110 + .faraddr %011111111111111111101111 + .faraddr %011111111111111111110000 + .faraddr %011111111111111111110001 + .faraddr %011111111111111111110010 + .faraddr %011111111111111111110011 + .faraddr %011111111111111111110100 + .faraddr %011111111111111111110101 + .faraddr %011111111111111111110110 + .faraddr %011111111111111111110111 + .faraddr %011111111111111111111000 + .faraddr %011111111111111111111001 + .faraddr %011111111111111111111010 + .faraddr %011111111111111111111011 + .faraddr %011111111111111111111100 + .faraddr %011111111111111111111101 + .faraddr %011111111111111111111110 + .faraddr %011111111111111111111111 + .faraddr %100000000000000000000000 + .faraddr %100000000000000000000001 + .faraddr %100000000000000000000010 + .faraddr %100000000000000000000011 + .faraddr %100000000000000000000100 + .faraddr %100000000000000000000101 + .faraddr %100000000000000000000110 + .faraddr %100000000000000000000111 + .faraddr %100000000000000000001000 + .faraddr %100000000000000000001001 + .faraddr %100000000000000000001010 + .faraddr %100000000000000000001011 + .faraddr %100000000000000000001100 + .faraddr %100000000000000000001101 + .faraddr %100000000000000000001110 + .faraddr %100000000000000000001111 + .faraddr %100111111111111111100001 + .faraddr %100111111111111111100010 + .faraddr %100111111111111111100011 + .faraddr %100111111111111111100100 + .faraddr %100111111111111111100101 + .faraddr %100111111111111111100110 + .faraddr %100111111111111111100111 + .faraddr %100111111111111111101000 + .faraddr %100111111111111111101001 + .faraddr %100111111111111111101010 + .faraddr %100111111111111111101011 + .faraddr %100111111111111111101100 + .faraddr %100111111111111111101101 + .faraddr %100111111111111111101110 + .faraddr %100111111111111111101111 + .faraddr %100111111111111111110000 + .faraddr %100111111111111111110001 + .faraddr %100111111111111111110010 + .faraddr %100111111111111111110011 + .faraddr %100111111111111111110100 + .faraddr %100111111111111111110101 + .faraddr %100111111111111111110110 + .faraddr %100111111111111111110111 + .faraddr %100111111111111111111000 + .faraddr %100111111111111111111001 + .faraddr %100111111111111111111010 + .faraddr %100111111111111111111011 + .faraddr %100111111111111111111100 + .faraddr %100111111111111111111101 + .faraddr %100111111111111111111110 + .faraddr %100111111111111111111111 + .faraddr %101000000000000000000000 + .faraddr %101000000000000000000001 + .faraddr %101000000000000000000010 + .faraddr %101000000000000000000011 + .faraddr %101000000000000000000100 + .faraddr %101000000000000000000101 + .faraddr %101000000000000000000110 + .faraddr %101000000000000000000111 + .faraddr %101000000000000000001000 + .faraddr %101000000000000000001001 + .faraddr %101000000000000000001010 + .faraddr %101000000000000000001011 + .faraddr %101000000000000000001100 + .faraddr %101000000000000000001101 + .faraddr %101000000000000000001110 + .faraddr %101000000000000000001111 + .faraddr %111111111111111111100001 + .faraddr %111111111111111111100010 + .faraddr %111111111111111111100011 + .faraddr %111111111111111111100100 + .faraddr %111111111111111111100101 + .faraddr %111111111111111111100110 + .faraddr %111111111111111111100111 + .faraddr %111111111111111111101000 + .faraddr %111111111111111111101001 + .faraddr %111111111111111111101010 + .faraddr %111111111111111111101011 + .faraddr %111111111111111111101100 + .faraddr %111111111111111111101101 + .faraddr %111111111111111111101110 + .faraddr %111111111111111111101111 + .faraddr %111111111111111111110000 + .faraddr %111111111111111111110001 + .faraddr %111111111111111111110010 + .faraddr %111111111111111111110011 + .faraddr %111111111111111111110100 + .faraddr %111111111111111111110101 + .faraddr %111111111111111111110110 + .faraddr %111111111111111111110111 + .faraddr %111111111111111111111000 + .faraddr %111111111111111111111001 + .faraddr %111111111111111111111010 + .faraddr %111111111111111111111011 + .faraddr %111111111111111111111100 + .faraddr %111111111111111111111101 + .faraddr %111111111111111111111110 + .faraddr %111111111111111111111111 + + ; multiple values on one line, decimal + .faraddr 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .faraddr 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .faraddr 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .faraddr 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .faraddr 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + .faraddr 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 + .faraddr 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 + .faraddr 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 + .faraddr 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 + .faraddr 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 + .faraddr 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 + .faraddr 40943,40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958 + .faraddr 40959,40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974 + .faraddr 40975,40976,40977,40978,40979,40980,40981,40982,40983,40984,40985,40986,40987,40988,40989,40990 + .faraddr 45039,45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054 + .faraddr 45055,45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070 + .faraddr 45071,45072,45073,45074,45075,45076,45077,45078,45079,45080,45081,45082,45083,45084,45085,45086 + .faraddr 65519,65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534 + .faraddr 65535,65536,65537,65538,65539,65540,65541,65542,65543,65544,65545,65546,65547,65548,65549,65550 + .faraddr 65551,65552,65553,65554,65555,65556,65557,65558,65559,65560,65561,65562,65563,65564,65565,65566 + .faraddr 1114095,1114096,1114097,1114098,1114099,1114100,1114101,1114102,1114103,1114104,1114105,1114106,1114107,1114108,1114109,1114110 + .faraddr 1114111,1114112,1114113,1114114,1114115,1114116,1114117,1114118,1114119,1114120,1114121,1114122,1114123,1114124,1114125,1114126 + .faraddr 1114127,1114128,1114129,1114130,1114131,1114132,1114133,1114134,1114135,1114136,1114137,1114138,1114139,1114140,1114141,1114142 + .faraddr 2162671,2162672,2162673,2162674,2162675,2162676,2162677,2162678,2162679,2162680,2162681,2162682,2162683,2162684,2162685,2162686 + .faraddr 2162687,2162688,2162689,2162690,2162691,2162692,2162693,2162694,2162695,2162696,2162697,2162698,2162699,2162700,2162701,2162702 + .faraddr 2162703,2162704,2162705,2162706,2162707,2162708,2162709,2162710,2162711,2162712,2162713,2162714,2162715,2162716,2162717,2162718 + .faraddr 8388591,8388592,8388593,8388594,8388595,8388596,8388597,8388598,8388599,8388600,8388601,8388602,8388603,8388604,8388605,8388606 + .faraddr 8388607,8388608,8388609,8388610,8388611,8388612,8388613,8388614,8388615,8388616,8388617,8388618,8388619,8388620,8388621,8388622 + .faraddr 8388623,8388624,8388625,8388626,8388627,8388628,8388629,8388630,8388631,8388632,8388633,8388634,8388635,8388636,8388637,8388638 + .faraddr 10485743,10485744,10485745,10485746,10485747,10485748,10485749,10485750,10485751,10485752,10485753,10485754,10485755,10485756,10485757,10485758 + .faraddr 10485759,10485760,10485761,10485762,10485763,10485764,10485765,10485766,10485767,10485768,10485769,10485770,10485771,10485772,10485773,10485774 + .faraddr 10485775,10485776,10485777,10485778,10485779,10485780,10485781,10485782,10485783,10485784,10485785,10485786,10485787,10485788,10485789,10485790 + .faraddr 16777199,16777200,16777201,16777202,16777203,16777204,16777205,16777206,16777207,16777208,16777209,16777210,16777211,16777212,16777213,16777214 + .faraddr 16777215 + + ; multiple values on one line, hex + .faraddr $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .faraddr $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .faraddr $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .faraddr $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .faraddr $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + .faraddr $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f + .faraddr $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef + .faraddr $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff + .faraddr $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f + .faraddr $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff + .faraddr $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f + .faraddr $9fef,$9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe + .faraddr $9fff,$a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e + .faraddr $a00f,$a010,$a011,$a012,$a013,$a014,$a015,$a016,$a017,$a018,$a019,$a01a,$a01b,$a01c,$a01d,$a01e + .faraddr $afef,$aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe + .faraddr $afff,$b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e + .faraddr $b00f,$b010,$b011,$b012,$b013,$b014,$b015,$b016,$b017,$b018,$b019,$b01a,$b01b,$b01c,$b01d,$b01e + .faraddr $ffef,$fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe + .faraddr $ffff,$10000,$10001,$10002,$10003,$10004,$10005,$10006,$10007,$10008,$10009,$1000a,$1000b,$1000c,$1000d,$1000e + .faraddr $1000f,$10010,$10011,$10012,$10013,$10014,$10015,$10016,$10017,$10018,$10019,$1001a,$1001b,$1001c,$1001d,$1001e + .faraddr $10ffef,$10fff0,$10fff1,$10fff2,$10fff3,$10fff4,$10fff5,$10fff6,$10fff7,$10fff8,$10fff9,$10fffa,$10fffb,$10fffc,$10fffd,$10fffe + .faraddr $10ffff,$110000,$110001,$110002,$110003,$110004,$110005,$110006,$110007,$110008,$110009,$11000a,$11000b,$11000c,$11000d,$11000e + .faraddr $11000f,$110010,$110011,$110012,$110013,$110014,$110015,$110016,$110017,$110018,$110019,$11001a,$11001b,$11001c,$11001d,$11001e + .faraddr $20ffef,$20fff0,$20fff1,$20fff2,$20fff3,$20fff4,$20fff5,$20fff6,$20fff7,$20fff8,$20fff9,$20fffa,$20fffb,$20fffc,$20fffd,$20fffe + .faraddr $20ffff,$210000,$210001,$210002,$210003,$210004,$210005,$210006,$210007,$210008,$210009,$21000a,$21000b,$21000c,$21000d,$21000e + .faraddr $21000f,$210010,$210011,$210012,$210013,$210014,$210015,$210016,$210017,$210018,$210019,$21001a,$21001b,$21001c,$21001d,$21001e + .faraddr $7fffef,$7ffff0,$7ffff1,$7ffff2,$7ffff3,$7ffff4,$7ffff5,$7ffff6,$7ffff7,$7ffff8,$7ffff9,$7ffffa,$7ffffb,$7ffffc,$7ffffd,$7ffffe + .faraddr $7fffff,$800000,$800001,$800002,$800003,$800004,$800005,$800006,$800007,$800008,$800009,$80000a,$80000b,$80000c,$80000d,$80000e + .faraddr $80000f,$800010,$800011,$800012,$800013,$800014,$800015,$800016,$800017,$800018,$800019,$80001a,$80001b,$80001c,$80001d,$80001e + .faraddr $9fffef,$9ffff0,$9ffff1,$9ffff2,$9ffff3,$9ffff4,$9ffff5,$9ffff6,$9ffff7,$9ffff8,$9ffff9,$9ffffa,$9ffffb,$9ffffc,$9ffffd,$9ffffe + .faraddr $9fffff,$a00000,$a00001,$a00002,$a00003,$a00004,$a00005,$a00006,$a00007,$a00008,$a00009,$a0000a,$a0000b,$a0000c,$a0000d,$a0000e + .faraddr $a0000f,$a00010,$a00011,$a00012,$a00013,$a00014,$a00015,$a00016,$a00017,$a00018,$a00019,$a0001a,$a0001b,$a0001c,$a0001d,$a0001e + .faraddr $ffffef,$fffff0,$fffff1,$fffff2,$fffff3,$fffff4,$fffff5,$fffff6,$fffff7,$fffff8,$fffff9,$fffffa,$fffffb,$fffffc,$fffffd,$fffffe + .faraddr $ffffff + + ; multiple values on one line, alternative hex + .faraddr 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .faraddr 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .faraddr 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .faraddr 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .faraddr 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + .faraddr 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh + .faraddr 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh + .faraddr 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh + .faraddr 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh + .faraddr 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh + .faraddr 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh + .faraddr 9fefh,9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh + .faraddr 9fffh,0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh + .faraddr 0a00fh,0a010h,0a011h,0a012h,0a013h,0a014h,0a015h,0a016h,0a017h,0a018h,0a019h,0a01ah,0a01bh,0a01ch,0a01dh,0a01eh + .faraddr 0afefh,0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh + .faraddr 0afffh,0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh + .faraddr 0b00fh,0b010h,0b011h,0b012h,0b013h,0b014h,0b015h,0b016h,0b017h,0b018h,0b019h,0b01ah,0b01bh,0b01ch,0b01dh,0b01eh + .faraddr 0ffefh,0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh + .faraddr 0ffffh,10000h,10001h,10002h,10003h,10004h,10005h,10006h,10007h,10008h,10009h,1000ah,1000bh,1000ch,1000dh,1000eh + .faraddr 1000fh,10010h,10011h,10012h,10013h,10014h,10015h,10016h,10017h,10018h,10019h,1001ah,1001bh,1001ch,1001dh,1001eh + .faraddr 10ffefh,10fff0h,10fff1h,10fff2h,10fff3h,10fff4h,10fff5h,10fff6h,10fff7h,10fff8h,10fff9h,10fffah,10fffbh,10fffch,10fffdh,10fffeh + .faraddr 10ffffh,110000h,110001h,110002h,110003h,110004h,110005h,110006h,110007h,110008h,110009h,11000ah,11000bh,11000ch,11000dh,11000eh + .faraddr 11000fh,110010h,110011h,110012h,110013h,110014h,110015h,110016h,110017h,110018h,110019h,11001ah,11001bh,11001ch,11001dh,11001eh + .faraddr 20ffefh,20fff0h,20fff1h,20fff2h,20fff3h,20fff4h,20fff5h,20fff6h,20fff7h,20fff8h,20fff9h,20fffah,20fffbh,20fffch,20fffdh,20fffeh + .faraddr 20ffffh,210000h,210001h,210002h,210003h,210004h,210005h,210006h,210007h,210008h,210009h,21000ah,21000bh,21000ch,21000dh,21000eh + .faraddr 21000fh,210010h,210011h,210012h,210013h,210014h,210015h,210016h,210017h,210018h,210019h,21001ah,21001bh,21001ch,21001dh,21001eh + .faraddr 7fffefh,7ffff0h,7ffff1h,7ffff2h,7ffff3h,7ffff4h,7ffff5h,7ffff6h,7ffff7h,7ffff8h,7ffff9h,7ffffah,7ffffbh,7ffffch,7ffffdh,7ffffeh + .faraddr 7fffffh,800000h,800001h,800002h,800003h,800004h,800005h,800006h,800007h,800008h,800009h,80000ah,80000bh,80000ch,80000dh,80000eh + .faraddr 80000fh,800010h,800011h,800012h,800013h,800014h,800015h,800016h,800017h,800018h,800019h,80001ah,80001bh,80001ch,80001dh,80001eh + .faraddr 9fffefh,9ffff0h,9ffff1h,9ffff2h,9ffff3h,9ffff4h,9ffff5h,9ffff6h,9ffff7h,9ffff8h,9ffff9h,9ffffah,9ffffbh,9ffffch,9ffffdh,9ffffeh + .faraddr 9fffffh,0a00000h,0a00001h,0a00002h,0a00003h,0a00004h,0a00005h,0a00006h,0a00007h,0a00008h,0a00009h,0a0000ah,0a0000bh,0a0000ch,0a0000dh,0a0000eh + .faraddr 0a0000fh,0a00010h,0a00011h,0a00012h,0a00013h,0a00014h,0a00015h,0a00016h,0a00017h,0a00018h,0a00019h,0a0001ah,0a0001bh,0a0001ch,0a0001dh,0a0001eh + .faraddr 0ffffefh,0fffff0h,0fffff1h,0fffff2h,0fffff3h,0fffff4h,0fffff5h,0fffff6h,0fffff7h,0fffff8h,0fffff9h,0fffffah,0fffffbh,0fffffch,0fffffdh,0fffffeh + .faraddr 0ffffffh + + ; mix some variants + .faraddr 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/106-hibytes.bin-ref b/test/asm/listing/106-hibytes.bin-ref new file mode 100644 index 0000000000000000000000000000000000000000..26ce02dd46e69a37b354c28e0cdbd7a6de233feb GIT binary patch literal 7135 zcmeI1%MpVx3`Cs@;*Oyc=m0th9Y6=r0dxR(z`<G=2{`Y&#AbZbj#i&I_nObj_Yppl z0eM29Qv#Jv4g7Q(pw;PsUS|MCoe7wAUJL0QrEEdTPFJ!AB?n!}5tN*CC1*-0(iD=i z(UX!=dJq1ZCH|W0{#t;)mb$-I;IFk1?tGz?H!Ef=m6UR`S{kfKOlD;)p{$j{WofW9 z*sYgk2g|nSvTAY|5!I6&?41(I6#?f;&XxPx=h9Y>k2F{s>>W?F-vrl9v3lG8)?hzq zd!Vor!d;M<G1rUGalKfz(waW3EvvOwwKB_&=(87T?8BMymkPuoJpMk5uKk+vKdMSN M$>>j~{}C{v3voHY`v3p{ literal 0 HcmV?d00001 diff --git a/test/asm/listing/106-hibytes.list-ref b/test/asm/listing/106-hibytes.list-ref new file mode 100644 index 000000000..6e5ff7674 --- /dev/null +++ b/test/asm/listing/106-hibytes.list-ref @@ -0,0 +1,6226 @@ +Main file : 106-hibytes.s +Current file: 106-hibytes.s + +000000r 1 ; 2022-06-15 Spiro Trikaliotis +000000r 1 +000000r 1 +000000r 1 ; upper case pseudo-op +000000r 1 00 .HIBYTES 0 +000001r 1 00 .HIBYTES 1 +000002r 1 00 .HIBYTES 2 +000003r 1 00 .HIBYTES 3 +000004r 1 00 .HIBYTES 4 +000005r 1 00 .HIBYTES 5 +000006r 1 00 .HIBYTES 6 +000007r 1 00 .HIBYTES 7 +000008r 1 00 .HIBYTES 8 +000009r 1 00 .HIBYTES 9 +00000Ar 1 00 .HIBYTES 10 +00000Br 1 00 .HIBYTES 11 +00000Cr 1 00 .HIBYTES 12 +00000Dr 1 00 .HIBYTES 13 +00000Er 1 00 .HIBYTES 14 +00000Fr 1 00 .HIBYTES 15 +000010r 1 00 .HIBYTES 16 +000011r 1 00 .HIBYTES 17 +000012r 1 00 .HIBYTES 18 +000013r 1 00 .HIBYTES 19 +000014r 1 00 .HIBYTES 112 +000015r 1 00 .HIBYTES 113 +000016r 1 00 .HIBYTES 114 +000017r 1 00 .HIBYTES 115 +000018r 1 00 .HIBYTES 116 +000019r 1 00 .HIBYTES 117 +00001Ar 1 00 .HIBYTES 118 +00001Br 1 00 .HIBYTES 119 +00001Cr 1 00 .HIBYTES 120 +00001Dr 1 00 .HIBYTES 121 +00001Er 1 00 .HIBYTES 122 +00001Fr 1 00 .HIBYTES 123 +000020r 1 00 .HIBYTES 124 +000021r 1 00 .HIBYTES 125 +000022r 1 00 .HIBYTES 126 +000023r 1 00 .HIBYTES 127 +000024r 1 00 .HIBYTES 128 +000025r 1 00 .HIBYTES 129 +000026r 1 00 .HIBYTES 130 +000027r 1 00 .HIBYTES 131 +000028r 1 00 .HIBYTES 132 +000029r 1 00 .HIBYTES 133 +00002Ar 1 00 .HIBYTES 134 +00002Br 1 00 .HIBYTES 240 +00002Cr 1 00 .HIBYTES 241 +00002Dr 1 00 .HIBYTES 242 +00002Er 1 00 .HIBYTES 243 +00002Fr 1 00 .HIBYTES 244 +000030r 1 00 .HIBYTES 245 +000031r 1 00 .HIBYTES 246 +000032r 1 00 .HIBYTES 247 +000033r 1 00 .HIBYTES 248 +000034r 1 00 .HIBYTES 249 +000035r 1 00 .HIBYTES 250 +000036r 1 00 .HIBYTES 251 +000037r 1 00 .HIBYTES 252 +000038r 1 00 .HIBYTES 253 +000039r 1 00 .HIBYTES 254 +00003Ar 1 00 .HIBYTES 255 +00003Br 1 01 .HIBYTES 256 +00003Cr 1 01 .HIBYTES 257 +00003Dr 1 01 .HIBYTES 258 +00003Er 1 01 .HIBYTES 259 +00003Fr 1 0F .HIBYTES 4050 +000040r 1 0F .HIBYTES 4051 +000041r 1 0F .HIBYTES 4052 +000042r 1 0F .HIBYTES 4053 +000043r 1 0F .HIBYTES 4054 +000044r 1 0F .HIBYTES 4055 +000045r 1 0F .HIBYTES 4056 +000046r 1 0F .HIBYTES 4057 +000047r 1 0F .HIBYTES 4058 +000048r 1 0F .HIBYTES 4059 +000049r 1 0F .HIBYTES 4060 +00004Ar 1 0F .HIBYTES 4061 +00004Br 1 0F .HIBYTES 4062 +00004Cr 1 0F .HIBYTES 4063 +00004Dr 1 0F .HIBYTES 4064 +00004Er 1 0F .HIBYTES 4065 +00004Fr 1 0F .HIBYTES 4066 +000050r 1 0F .HIBYTES 4067 +000051r 1 0F .HIBYTES 4068 +000052r 1 0F .HIBYTES 4069 +000053r 1 0F .HIBYTES 4070 +000054r 1 0F .HIBYTES 4071 +000055r 1 0F .HIBYTES 4072 +000056r 1 0F .HIBYTES 4073 +000057r 1 0F .HIBYTES 4074 +000058r 1 0F .HIBYTES 4075 +000059r 1 0F .HIBYTES 4076 +00005Ar 1 0F .HIBYTES 4077 +00005Br 1 0F .HIBYTES 4078 +00005Cr 1 0F .HIBYTES 4079 +00005Dr 1 0F .HIBYTES 4080 +00005Er 1 0F .HIBYTES 4081 +00005Fr 1 0F .HIBYTES 4082 +000060r 1 0F .HIBYTES 4083 +000061r 1 0F .HIBYTES 4084 +000062r 1 0F .HIBYTES 4085 +000063r 1 0F .HIBYTES 4086 +000064r 1 0F .HIBYTES 4087 +000065r 1 0F .HIBYTES 4088 +000066r 1 0F .HIBYTES 4089 +000067r 1 0F .HIBYTES 4090 +000068r 1 0F .HIBYTES 4091 +000069r 1 0F .HIBYTES 4092 +00006Ar 1 0F .HIBYTES 4093 +00006Br 1 0F .HIBYTES 4094 +00006Cr 1 0F .HIBYTES 4095 +00006Dr 1 10 .HIBYTES 4096 +00006Er 1 10 .HIBYTES 4097 +00006Fr 1 10 .HIBYTES 4098 +000070r 1 10 .HIBYTES 4099 +000071r 1 10 .HIBYTES 4100 +000072r 1 10 .HIBYTES 4101 +000073r 1 10 .HIBYTES 4102 +000074r 1 10 .HIBYTES 4103 +000075r 1 10 .HIBYTES 4104 +000076r 1 7F .HIBYTES 32752 +000077r 1 7F .HIBYTES 32753 +000078r 1 7F .HIBYTES 32754 +000079r 1 7F .HIBYTES 32755 +00007Ar 1 7F .HIBYTES 32756 +00007Br 1 7F .HIBYTES 32757 +00007Cr 1 7F .HIBYTES 32758 +00007Dr 1 7F .HIBYTES 32759 +00007Er 1 7F .HIBYTES 32760 +00007Fr 1 7F .HIBYTES 32761 +000080r 1 7F .HIBYTES 32762 +000081r 1 7F .HIBYTES 32763 +000082r 1 7F .HIBYTES 32764 +000083r 1 7F .HIBYTES 32765 +000084r 1 7F .HIBYTES 32766 +000085r 1 7F .HIBYTES 32767 +000086r 1 80 .HIBYTES 32768 +000087r 1 80 .HIBYTES 32769 +000088r 1 80 .HIBYTES 32770 +000089r 1 80 .HIBYTES 32771 +00008Ar 1 80 .HIBYTES 32772 +00008Br 1 80 .HIBYTES 32773 +00008Cr 1 80 .HIBYTES 32774 +00008Dr 1 80 .HIBYTES 32775 +00008Er 1 80 .HIBYTES 32776 +00008Fr 1 80 .HIBYTES 32777 +000090r 1 80 .HIBYTES 32778 +000091r 1 80 .HIBYTES 32779 +000092r 1 9F .HIBYTES 40929 +000093r 1 9F .HIBYTES 40930 +000094r 1 9F .HIBYTES 40931 +000095r 1 9F .HIBYTES 40932 +000096r 1 9F .HIBYTES 40933 +000097r 1 9F .HIBYTES 40934 +000098r 1 9F .HIBYTES 40935 +000099r 1 9F .HIBYTES 40936 +00009Ar 1 9F .HIBYTES 40937 +00009Br 1 9F .HIBYTES 40938 +00009Cr 1 9F .HIBYTES 40939 +00009Dr 1 9F .HIBYTES 40940 +00009Er 1 9F .HIBYTES 40941 +00009Fr 1 9F .HIBYTES 40942 +0000A0r 1 9F .HIBYTES 40943 +0000A1r 1 9F .HIBYTES 40944 +0000A2r 1 9F .HIBYTES 40945 +0000A3r 1 9F .HIBYTES 40946 +0000A4r 1 9F .HIBYTES 40947 +0000A5r 1 9F .HIBYTES 40948 +0000A6r 1 9F .HIBYTES 40949 +0000A7r 1 9F .HIBYTES 40950 +0000A8r 1 9F .HIBYTES 40951 +0000A9r 1 9F .HIBYTES 40952 +0000AAr 1 9F .HIBYTES 40953 +0000ABr 1 9F .HIBYTES 40954 +0000ACr 1 9F .HIBYTES 40955 +0000ADr 1 9F .HIBYTES 40956 +0000AEr 1 9F .HIBYTES 40957 +0000AFr 1 9F .HIBYTES 40958 +0000B0r 1 9F .HIBYTES 40959 +0000B1r 1 A0 .HIBYTES 40960 +0000B2r 1 A0 .HIBYTES 40961 +0000B3r 1 A0 .HIBYTES 40962 +0000B4r 1 A0 .HIBYTES 40963 +0000B5r 1 A0 .HIBYTES 40964 +0000B6r 1 A0 .HIBYTES 40965 +0000B7r 1 A0 .HIBYTES 40966 +0000B8r 1 A0 .HIBYTES 40967 +0000B9r 1 A0 .HIBYTES 40968 +0000BAr 1 A0 .HIBYTES 40969 +0000BBr 1 A0 .HIBYTES 40970 +0000BCr 1 A0 .HIBYTES 40971 +0000BDr 1 A0 .HIBYTES 40972 +0000BEr 1 A0 .HIBYTES 40973 +0000BFr 1 A0 .HIBYTES 40974 +0000C0r 1 A0 .HIBYTES 40975 +0000C1r 1 AF .HIBYTES 45025 +0000C2r 1 AF .HIBYTES 45026 +0000C3r 1 AF .HIBYTES 45027 +0000C4r 1 AF .HIBYTES 45028 +0000C5r 1 AF .HIBYTES 45029 +0000C6r 1 AF .HIBYTES 45030 +0000C7r 1 AF .HIBYTES 45031 +0000C8r 1 AF .HIBYTES 45032 +0000C9r 1 AF .HIBYTES 45033 +0000CAr 1 AF .HIBYTES 45034 +0000CBr 1 AF .HIBYTES 45035 +0000CCr 1 AF .HIBYTES 45036 +0000CDr 1 AF .HIBYTES 45037 +0000CEr 1 AF .HIBYTES 45038 +0000CFr 1 AF .HIBYTES 45039 +0000D0r 1 AF .HIBYTES 45040 +0000D1r 1 AF .HIBYTES 45041 +0000D2r 1 AF .HIBYTES 45042 +0000D3r 1 AF .HIBYTES 45043 +0000D4r 1 AF .HIBYTES 45044 +0000D5r 1 AF .HIBYTES 45045 +0000D6r 1 AF .HIBYTES 45046 +0000D7r 1 AF .HIBYTES 45047 +0000D8r 1 AF .HIBYTES 45048 +0000D9r 1 AF .HIBYTES 45049 +0000DAr 1 AF .HIBYTES 45050 +0000DBr 1 AF .HIBYTES 45051 +0000DCr 1 AF .HIBYTES 45052 +0000DDr 1 AF .HIBYTES 45053 +0000DEr 1 AF .HIBYTES 45054 +0000DFr 1 AF .HIBYTES 45055 +0000E0r 1 B0 .HIBYTES 45056 +0000E1r 1 B0 .HIBYTES 45057 +0000E2r 1 B0 .HIBYTES 45058 +0000E3r 1 B0 .HIBYTES 45059 +0000E4r 1 B0 .HIBYTES 45060 +0000E5r 1 B0 .HIBYTES 45061 +0000E6r 1 B0 .HIBYTES 45062 +0000E7r 1 B0 .HIBYTES 45063 +0000E8r 1 B0 .HIBYTES 45064 +0000E9r 1 B0 .HIBYTES 45065 +0000EAr 1 B0 .HIBYTES 45066 +0000EBr 1 B0 .HIBYTES 45067 +0000ECr 1 B0 .HIBYTES 45068 +0000EDr 1 B0 .HIBYTES 45069 +0000EEr 1 B0 .HIBYTES 45070 +0000EFr 1 B0 .HIBYTES 45071 +0000F0r 1 BF .HIBYTES 49121 +0000F1r 1 BF .HIBYTES 49122 +0000F2r 1 BF .HIBYTES 49123 +0000F3r 1 BF .HIBYTES 49124 +0000F4r 1 BF .HIBYTES 49125 +0000F5r 1 BF .HIBYTES 49126 +0000F6r 1 BF .HIBYTES 49127 +0000F7r 1 BF .HIBYTES 49128 +0000F8r 1 BF .HIBYTES 49129 +0000F9r 1 BF .HIBYTES 49130 +0000FAr 1 BF .HIBYTES 49131 +0000FBr 1 BF .HIBYTES 49132 +0000FCr 1 BF .HIBYTES 49133 +0000FDr 1 BF .HIBYTES 49134 +0000FEr 1 BF .HIBYTES 49135 +0000FFr 1 BF .HIBYTES 49136 +000100r 1 BF .HIBYTES 49137 +000101r 1 BF .HIBYTES 49138 +000102r 1 BF .HIBYTES 49139 +000103r 1 BF .HIBYTES 49140 +000104r 1 BF .HIBYTES 49141 +000105r 1 BF .HIBYTES 49142 +000106r 1 BF .HIBYTES 49143 +000107r 1 BF .HIBYTES 49144 +000108r 1 BF .HIBYTES 49145 +000109r 1 BF .HIBYTES 49146 +00010Ar 1 BF .HIBYTES 49147 +00010Br 1 BF .HIBYTES 49148 +00010Cr 1 BF .HIBYTES 49149 +00010Dr 1 BF .HIBYTES 49150 +00010Er 1 BF .HIBYTES 49151 +00010Fr 1 C0 .HIBYTES 49152 +000110r 1 C0 .HIBYTES 49153 +000111r 1 C0 .HIBYTES 49154 +000112r 1 C0 .HIBYTES 49155 +000113r 1 C0 .HIBYTES 49156 +000114r 1 C0 .HIBYTES 49157 +000115r 1 C0 .HIBYTES 49158 +000116r 1 C0 .HIBYTES 49159 +000117r 1 C0 .HIBYTES 49160 +000118r 1 C0 .HIBYTES 49161 +000119r 1 C0 .HIBYTES 49162 +00011Ar 1 C0 .HIBYTES 49163 +00011Br 1 C0 .HIBYTES 49164 +00011Cr 1 C0 .HIBYTES 49165 +00011Dr 1 C0 .HIBYTES 49166 +00011Er 1 C0 .HIBYTES 49167 +00011Fr 1 CF .HIBYTES 53217 +000120r 1 CF .HIBYTES 53218 +000121r 1 CF .HIBYTES 53219 +000122r 1 CF .HIBYTES 53220 +000123r 1 CF .HIBYTES 53221 +000124r 1 CF .HIBYTES 53222 +000125r 1 CF .HIBYTES 53223 +000126r 1 CF .HIBYTES 53224 +000127r 1 CF .HIBYTES 53225 +000128r 1 CF .HIBYTES 53226 +000129r 1 CF .HIBYTES 53227 +00012Ar 1 CF .HIBYTES 53228 +00012Br 1 CF .HIBYTES 53229 +00012Cr 1 CF .HIBYTES 53230 +00012Dr 1 CF .HIBYTES 53231 +00012Er 1 CF .HIBYTES 53232 +00012Fr 1 CF .HIBYTES 53233 +000130r 1 CF .HIBYTES 53234 +000131r 1 CF .HIBYTES 53235 +000132r 1 CF .HIBYTES 53236 +000133r 1 CF .HIBYTES 53237 +000134r 1 CF .HIBYTES 53238 +000135r 1 CF .HIBYTES 53239 +000136r 1 CF .HIBYTES 53240 +000137r 1 CF .HIBYTES 53241 +000138r 1 CF .HIBYTES 53242 +000139r 1 CF .HIBYTES 53243 +00013Ar 1 CF .HIBYTES 53244 +00013Br 1 CF .HIBYTES 53245 +00013Cr 1 CF .HIBYTES 53246 +00013Dr 1 CF .HIBYTES 53247 +00013Er 1 D0 .HIBYTES 53248 +00013Fr 1 D0 .HIBYTES 53249 +000140r 1 D0 .HIBYTES 53250 +000141r 1 D0 .HIBYTES 53251 +000142r 1 D0 .HIBYTES 53252 +000143r 1 D0 .HIBYTES 53253 +000144r 1 D0 .HIBYTES 53254 +000145r 1 D0 .HIBYTES 53255 +000146r 1 D0 .HIBYTES 53256 +000147r 1 D0 .HIBYTES 53257 +000148r 1 D0 .HIBYTES 53258 +000149r 1 D0 .HIBYTES 53259 +00014Ar 1 D0 .HIBYTES 53260 +00014Br 1 D0 .HIBYTES 53261 +00014Cr 1 D0 .HIBYTES 53262 +00014Dr 1 D0 .HIBYTES 53263 +00014Er 1 DF .HIBYTES 57313 +00014Fr 1 DF .HIBYTES 57314 +000150r 1 DF .HIBYTES 57315 +000151r 1 DF .HIBYTES 57316 +000152r 1 DF .HIBYTES 57317 +000153r 1 DF .HIBYTES 57318 +000154r 1 DF .HIBYTES 57319 +000155r 1 DF .HIBYTES 57320 +000156r 1 DF .HIBYTES 57321 +000157r 1 DF .HIBYTES 57322 +000158r 1 DF .HIBYTES 57323 +000159r 1 DF .HIBYTES 57324 +00015Ar 1 DF .HIBYTES 57325 +00015Br 1 DF .HIBYTES 57326 +00015Cr 1 DF .HIBYTES 57327 +00015Dr 1 DF .HIBYTES 57328 +00015Er 1 DF .HIBYTES 57329 +00015Fr 1 DF .HIBYTES 57330 +000160r 1 DF .HIBYTES 57331 +000161r 1 DF .HIBYTES 57332 +000162r 1 DF .HIBYTES 57333 +000163r 1 DF .HIBYTES 57334 +000164r 1 DF .HIBYTES 57335 +000165r 1 DF .HIBYTES 57336 +000166r 1 DF .HIBYTES 57337 +000167r 1 DF .HIBYTES 57338 +000168r 1 DF .HIBYTES 57339 +000169r 1 DF .HIBYTES 57340 +00016Ar 1 DF .HIBYTES 57341 +00016Br 1 DF .HIBYTES 57342 +00016Cr 1 DF .HIBYTES 57343 +00016Dr 1 E0 .HIBYTES 57344 +00016Er 1 E0 .HIBYTES 57345 +00016Fr 1 E0 .HIBYTES 57346 +000170r 1 E0 .HIBYTES 57347 +000171r 1 E0 .HIBYTES 57348 +000172r 1 E0 .HIBYTES 57349 +000173r 1 E0 .HIBYTES 57350 +000174r 1 E0 .HIBYTES 57351 +000175r 1 E0 .HIBYTES 57352 +000176r 1 E0 .HIBYTES 57353 +000177r 1 E0 .HIBYTES 57354 +000178r 1 E0 .HIBYTES 57355 +000179r 1 E0 .HIBYTES 57356 +00017Ar 1 E0 .HIBYTES 57357 +00017Br 1 E0 .HIBYTES 57358 +00017Cr 1 E0 .HIBYTES 57359 +00017Dr 1 EF .HIBYTES 61409 +00017Er 1 EF .HIBYTES 61410 +00017Fr 1 EF .HIBYTES 61411 +000180r 1 EF .HIBYTES 61412 +000181r 1 EF .HIBYTES 61413 +000182r 1 EF .HIBYTES 61414 +000183r 1 EF .HIBYTES 61415 +000184r 1 EF .HIBYTES 61416 +000185r 1 EF .HIBYTES 61417 +000186r 1 EF .HIBYTES 61418 +000187r 1 EF .HIBYTES 61419 +000188r 1 EF .HIBYTES 61420 +000189r 1 EF .HIBYTES 61421 +00018Ar 1 EF .HIBYTES 61422 +00018Br 1 EF .HIBYTES 61423 +00018Cr 1 EF .HIBYTES 61424 +00018Dr 1 EF .HIBYTES 61425 +00018Er 1 EF .HIBYTES 61426 +00018Fr 1 EF .HIBYTES 61427 +000190r 1 EF .HIBYTES 61428 +000191r 1 EF .HIBYTES 61429 +000192r 1 EF .HIBYTES 61430 +000193r 1 EF .HIBYTES 61431 +000194r 1 EF .HIBYTES 61432 +000195r 1 EF .HIBYTES 61433 +000196r 1 EF .HIBYTES 61434 +000197r 1 EF .HIBYTES 61435 +000198r 1 EF .HIBYTES 61436 +000199r 1 EF .HIBYTES 61437 +00019Ar 1 EF .HIBYTES 61438 +00019Br 1 EF .HIBYTES 61439 +00019Cr 1 F0 .HIBYTES 61440 +00019Dr 1 F0 .HIBYTES 61441 +00019Er 1 F0 .HIBYTES 61442 +00019Fr 1 F0 .HIBYTES 61443 +0001A0r 1 F0 .HIBYTES 61444 +0001A1r 1 F0 .HIBYTES 61445 +0001A2r 1 F0 .HIBYTES 61446 +0001A3r 1 F0 .HIBYTES 61447 +0001A4r 1 F0 .HIBYTES 61448 +0001A5r 1 F0 .HIBYTES 61449 +0001A6r 1 F0 .HIBYTES 61450 +0001A7r 1 F0 .HIBYTES 61451 +0001A8r 1 F0 .HIBYTES 61452 +0001A9r 1 F0 .HIBYTES 61453 +0001AAr 1 F0 .HIBYTES 61454 +0001ABr 1 F0 .HIBYTES 61455 +0001ACr 1 FF .HIBYTES 65505 +0001ADr 1 FF .HIBYTES 65506 +0001AEr 1 FF .HIBYTES 65507 +0001AFr 1 FF .HIBYTES 65508 +0001B0r 1 FF .HIBYTES 65509 +0001B1r 1 FF .HIBYTES 65510 +0001B2r 1 FF .HIBYTES 65511 +0001B3r 1 FF .HIBYTES 65512 +0001B4r 1 FF .HIBYTES 65513 +0001B5r 1 FF .HIBYTES 65514 +0001B6r 1 FF .HIBYTES 65515 +0001B7r 1 FF .HIBYTES 65516 +0001B8r 1 FF .HIBYTES 65517 +0001B9r 1 FF .HIBYTES 65518 +0001BAr 1 FF .HIBYTES 65519 +0001BBr 1 FF .HIBYTES 65520 +0001BCr 1 FF .HIBYTES 65521 +0001BDr 1 FF .HIBYTES 65522 +0001BEr 1 FF .HIBYTES 65523 +0001BFr 1 FF .HIBYTES 65524 +0001C0r 1 FF .HIBYTES 65525 +0001C1r 1 FF .HIBYTES 65526 +0001C2r 1 FF .HIBYTES 65527 +0001C3r 1 FF .HIBYTES 65528 +0001C4r 1 FF .HIBYTES 65529 +0001C5r 1 FF .HIBYTES 65530 +0001C6r 1 FF .HIBYTES 65531 +0001C7r 1 FF .HIBYTES 65532 +0001C8r 1 FF .HIBYTES 65533 +0001C9r 1 FF .HIBYTES 65534 +0001CAr 1 FF .HIBYTES 65535 +0001CBr 1 +0001CBr 1 ; lower case pseudo-op +0001CBr 1 00 .hibytes 0 +0001CCr 1 00 .hibytes 1 +0001CDr 1 00 .hibytes 2 +0001CEr 1 00 .hibytes 3 +0001CFr 1 00 .hibytes 4 +0001D0r 1 00 .hibytes 5 +0001D1r 1 00 .hibytes 6 +0001D2r 1 00 .hibytes 7 +0001D3r 1 00 .hibytes 8 +0001D4r 1 00 .hibytes 9 +0001D5r 1 00 .hibytes 10 +0001D6r 1 00 .hibytes 11 +0001D7r 1 00 .hibytes 12 +0001D8r 1 00 .hibytes 13 +0001D9r 1 00 .hibytes 14 +0001DAr 1 00 .hibytes 15 +0001DBr 1 00 .hibytes 16 +0001DCr 1 00 .hibytes 17 +0001DDr 1 00 .hibytes 18 +0001DEr 1 00 .hibytes 19 +0001DFr 1 00 .hibytes 112 +0001E0r 1 00 .hibytes 113 +0001E1r 1 00 .hibytes 114 +0001E2r 1 00 .hibytes 115 +0001E3r 1 00 .hibytes 116 +0001E4r 1 00 .hibytes 117 +0001E5r 1 00 .hibytes 118 +0001E6r 1 00 .hibytes 119 +0001E7r 1 00 .hibytes 120 +0001E8r 1 00 .hibytes 121 +0001E9r 1 00 .hibytes 122 +0001EAr 1 00 .hibytes 123 +0001EBr 1 00 .hibytes 124 +0001ECr 1 00 .hibytes 125 +0001EDr 1 00 .hibytes 126 +0001EEr 1 00 .hibytes 127 +0001EFr 1 00 .hibytes 128 +0001F0r 1 00 .hibytes 129 +0001F1r 1 00 .hibytes 130 +0001F2r 1 00 .hibytes 131 +0001F3r 1 00 .hibytes 132 +0001F4r 1 00 .hibytes 133 +0001F5r 1 00 .hibytes 134 +0001F6r 1 00 .hibytes 240 +0001F7r 1 00 .hibytes 241 +0001F8r 1 00 .hibytes 242 +0001F9r 1 00 .hibytes 243 +0001FAr 1 00 .hibytes 244 +0001FBr 1 00 .hibytes 245 +0001FCr 1 00 .hibytes 246 +0001FDr 1 00 .hibytes 247 +0001FEr 1 00 .hibytes 248 +0001FFr 1 00 .hibytes 249 +000200r 1 00 .hibytes 250 +000201r 1 00 .hibytes 251 +000202r 1 00 .hibytes 252 +000203r 1 00 .hibytes 253 +000204r 1 00 .hibytes 254 +000205r 1 00 .hibytes 255 +000206r 1 01 .hibytes 256 +000207r 1 01 .hibytes 257 +000208r 1 01 .hibytes 258 +000209r 1 01 .hibytes 259 +00020Ar 1 0F .hibytes 4050 +00020Br 1 0F .hibytes 4051 +00020Cr 1 0F .hibytes 4052 +00020Dr 1 0F .hibytes 4053 +00020Er 1 0F .hibytes 4054 +00020Fr 1 0F .hibytes 4055 +000210r 1 0F .hibytes 4056 +000211r 1 0F .hibytes 4057 +000212r 1 0F .hibytes 4058 +000213r 1 0F .hibytes 4059 +000214r 1 0F .hibytes 4060 +000215r 1 0F .hibytes 4061 +000216r 1 0F .hibytes 4062 +000217r 1 0F .hibytes 4063 +000218r 1 0F .hibytes 4064 +000219r 1 0F .hibytes 4065 +00021Ar 1 0F .hibytes 4066 +00021Br 1 0F .hibytes 4067 +00021Cr 1 0F .hibytes 4068 +00021Dr 1 0F .hibytes 4069 +00021Er 1 0F .hibytes 4070 +00021Fr 1 0F .hibytes 4071 +000220r 1 0F .hibytes 4072 +000221r 1 0F .hibytes 4073 +000222r 1 0F .hibytes 4074 +000223r 1 0F .hibytes 4075 +000224r 1 0F .hibytes 4076 +000225r 1 0F .hibytes 4077 +000226r 1 0F .hibytes 4078 +000227r 1 0F .hibytes 4079 +000228r 1 0F .hibytes 4080 +000229r 1 0F .hibytes 4081 +00022Ar 1 0F .hibytes 4082 +00022Br 1 0F .hibytes 4083 +00022Cr 1 0F .hibytes 4084 +00022Dr 1 0F .hibytes 4085 +00022Er 1 0F .hibytes 4086 +00022Fr 1 0F .hibytes 4087 +000230r 1 0F .hibytes 4088 +000231r 1 0F .hibytes 4089 +000232r 1 0F .hibytes 4090 +000233r 1 0F .hibytes 4091 +000234r 1 0F .hibytes 4092 +000235r 1 0F .hibytes 4093 +000236r 1 0F .hibytes 4094 +000237r 1 0F .hibytes 4095 +000238r 1 10 .hibytes 4096 +000239r 1 10 .hibytes 4097 +00023Ar 1 10 .hibytes 4098 +00023Br 1 10 .hibytes 4099 +00023Cr 1 10 .hibytes 4100 +00023Dr 1 10 .hibytes 4101 +00023Er 1 10 .hibytes 4102 +00023Fr 1 10 .hibytes 4103 +000240r 1 10 .hibytes 4104 +000241r 1 7F .hibytes 32752 +000242r 1 7F .hibytes 32753 +000243r 1 7F .hibytes 32754 +000244r 1 7F .hibytes 32755 +000245r 1 7F .hibytes 32756 +000246r 1 7F .hibytes 32757 +000247r 1 7F .hibytes 32758 +000248r 1 7F .hibytes 32759 +000249r 1 7F .hibytes 32760 +00024Ar 1 7F .hibytes 32761 +00024Br 1 7F .hibytes 32762 +00024Cr 1 7F .hibytes 32763 +00024Dr 1 7F .hibytes 32764 +00024Er 1 7F .hibytes 32765 +00024Fr 1 7F .hibytes 32766 +000250r 1 7F .hibytes 32767 +000251r 1 80 .hibytes 32768 +000252r 1 80 .hibytes 32769 +000253r 1 80 .hibytes 32770 +000254r 1 80 .hibytes 32771 +000255r 1 80 .hibytes 32772 +000256r 1 80 .hibytes 32773 +000257r 1 80 .hibytes 32774 +000258r 1 80 .hibytes 32775 +000259r 1 80 .hibytes 32776 +00025Ar 1 80 .hibytes 32777 +00025Br 1 80 .hibytes 32778 +00025Cr 1 80 .hibytes 32779 +00025Dr 1 9F .hibytes 40929 +00025Er 1 9F .hibytes 40930 +00025Fr 1 9F .hibytes 40931 +000260r 1 9F .hibytes 40932 +000261r 1 9F .hibytes 40933 +000262r 1 9F .hibytes 40934 +000263r 1 9F .hibytes 40935 +000264r 1 9F .hibytes 40936 +000265r 1 9F .hibytes 40937 +000266r 1 9F .hibytes 40938 +000267r 1 9F .hibytes 40939 +000268r 1 9F .hibytes 40940 +000269r 1 9F .hibytes 40941 +00026Ar 1 9F .hibytes 40942 +00026Br 1 9F .hibytes 40943 +00026Cr 1 9F .hibytes 40944 +00026Dr 1 9F .hibytes 40945 +00026Er 1 9F .hibytes 40946 +00026Fr 1 9F .hibytes 40947 +000270r 1 9F .hibytes 40948 +000271r 1 9F .hibytes 40949 +000272r 1 9F .hibytes 40950 +000273r 1 9F .hibytes 40951 +000274r 1 9F .hibytes 40952 +000275r 1 9F .hibytes 40953 +000276r 1 9F .hibytes 40954 +000277r 1 9F .hibytes 40955 +000278r 1 9F .hibytes 40956 +000279r 1 9F .hibytes 40957 +00027Ar 1 9F .hibytes 40958 +00027Br 1 9F .hibytes 40959 +00027Cr 1 A0 .hibytes 40960 +00027Dr 1 A0 .hibytes 40961 +00027Er 1 A0 .hibytes 40962 +00027Fr 1 A0 .hibytes 40963 +000280r 1 A0 .hibytes 40964 +000281r 1 A0 .hibytes 40965 +000282r 1 A0 .hibytes 40966 +000283r 1 A0 .hibytes 40967 +000284r 1 A0 .hibytes 40968 +000285r 1 A0 .hibytes 40969 +000286r 1 A0 .hibytes 40970 +000287r 1 A0 .hibytes 40971 +000288r 1 A0 .hibytes 40972 +000289r 1 A0 .hibytes 40973 +00028Ar 1 A0 .hibytes 40974 +00028Br 1 A0 .hibytes 40975 +00028Cr 1 AF .hibytes 45025 +00028Dr 1 AF .hibytes 45026 +00028Er 1 AF .hibytes 45027 +00028Fr 1 AF .hibytes 45028 +000290r 1 AF .hibytes 45029 +000291r 1 AF .hibytes 45030 +000292r 1 AF .hibytes 45031 +000293r 1 AF .hibytes 45032 +000294r 1 AF .hibytes 45033 +000295r 1 AF .hibytes 45034 +000296r 1 AF .hibytes 45035 +000297r 1 AF .hibytes 45036 +000298r 1 AF .hibytes 45037 +000299r 1 AF .hibytes 45038 +00029Ar 1 AF .hibytes 45039 +00029Br 1 AF .hibytes 45040 +00029Cr 1 AF .hibytes 45041 +00029Dr 1 AF .hibytes 45042 +00029Er 1 AF .hibytes 45043 +00029Fr 1 AF .hibytes 45044 +0002A0r 1 AF .hibytes 45045 +0002A1r 1 AF .hibytes 45046 +0002A2r 1 AF .hibytes 45047 +0002A3r 1 AF .hibytes 45048 +0002A4r 1 AF .hibytes 45049 +0002A5r 1 AF .hibytes 45050 +0002A6r 1 AF .hibytes 45051 +0002A7r 1 AF .hibytes 45052 +0002A8r 1 AF .hibytes 45053 +0002A9r 1 AF .hibytes 45054 +0002AAr 1 AF .hibytes 45055 +0002ABr 1 B0 .hibytes 45056 +0002ACr 1 B0 .hibytes 45057 +0002ADr 1 B0 .hibytes 45058 +0002AEr 1 B0 .hibytes 45059 +0002AFr 1 B0 .hibytes 45060 +0002B0r 1 B0 .hibytes 45061 +0002B1r 1 B0 .hibytes 45062 +0002B2r 1 B0 .hibytes 45063 +0002B3r 1 B0 .hibytes 45064 +0002B4r 1 B0 .hibytes 45065 +0002B5r 1 B0 .hibytes 45066 +0002B6r 1 B0 .hibytes 45067 +0002B7r 1 B0 .hibytes 45068 +0002B8r 1 B0 .hibytes 45069 +0002B9r 1 B0 .hibytes 45070 +0002BAr 1 B0 .hibytes 45071 +0002BBr 1 BF .hibytes 49121 +0002BCr 1 BF .hibytes 49122 +0002BDr 1 BF .hibytes 49123 +0002BEr 1 BF .hibytes 49124 +0002BFr 1 BF .hibytes 49125 +0002C0r 1 BF .hibytes 49126 +0002C1r 1 BF .hibytes 49127 +0002C2r 1 BF .hibytes 49128 +0002C3r 1 BF .hibytes 49129 +0002C4r 1 BF .hibytes 49130 +0002C5r 1 BF .hibytes 49131 +0002C6r 1 BF .hibytes 49132 +0002C7r 1 BF .hibytes 49133 +0002C8r 1 BF .hibytes 49134 +0002C9r 1 BF .hibytes 49135 +0002CAr 1 BF .hibytes 49136 +0002CBr 1 BF .hibytes 49137 +0002CCr 1 BF .hibytes 49138 +0002CDr 1 BF .hibytes 49139 +0002CEr 1 BF .hibytes 49140 +0002CFr 1 BF .hibytes 49141 +0002D0r 1 BF .hibytes 49142 +0002D1r 1 BF .hibytes 49143 +0002D2r 1 BF .hibytes 49144 +0002D3r 1 BF .hibytes 49145 +0002D4r 1 BF .hibytes 49146 +0002D5r 1 BF .hibytes 49147 +0002D6r 1 BF .hibytes 49148 +0002D7r 1 BF .hibytes 49149 +0002D8r 1 BF .hibytes 49150 +0002D9r 1 BF .hibytes 49151 +0002DAr 1 C0 .hibytes 49152 +0002DBr 1 C0 .hibytes 49153 +0002DCr 1 C0 .hibytes 49154 +0002DDr 1 C0 .hibytes 49155 +0002DEr 1 C0 .hibytes 49156 +0002DFr 1 C0 .hibytes 49157 +0002E0r 1 C0 .hibytes 49158 +0002E1r 1 C0 .hibytes 49159 +0002E2r 1 C0 .hibytes 49160 +0002E3r 1 C0 .hibytes 49161 +0002E4r 1 C0 .hibytes 49162 +0002E5r 1 C0 .hibytes 49163 +0002E6r 1 C0 .hibytes 49164 +0002E7r 1 C0 .hibytes 49165 +0002E8r 1 C0 .hibytes 49166 +0002E9r 1 C0 .hibytes 49167 +0002EAr 1 CF .hibytes 53217 +0002EBr 1 CF .hibytes 53218 +0002ECr 1 CF .hibytes 53219 +0002EDr 1 CF .hibytes 53220 +0002EEr 1 CF .hibytes 53221 +0002EFr 1 CF .hibytes 53222 +0002F0r 1 CF .hibytes 53223 +0002F1r 1 CF .hibytes 53224 +0002F2r 1 CF .hibytes 53225 +0002F3r 1 CF .hibytes 53226 +0002F4r 1 CF .hibytes 53227 +0002F5r 1 CF .hibytes 53228 +0002F6r 1 CF .hibytes 53229 +0002F7r 1 CF .hibytes 53230 +0002F8r 1 CF .hibytes 53231 +0002F9r 1 CF .hibytes 53232 +0002FAr 1 CF .hibytes 53233 +0002FBr 1 CF .hibytes 53234 +0002FCr 1 CF .hibytes 53235 +0002FDr 1 CF .hibytes 53236 +0002FEr 1 CF .hibytes 53237 +0002FFr 1 CF .hibytes 53238 +000300r 1 CF .hibytes 53239 +000301r 1 CF .hibytes 53240 +000302r 1 CF .hibytes 53241 +000303r 1 CF .hibytes 53242 +000304r 1 CF .hibytes 53243 +000305r 1 CF .hibytes 53244 +000306r 1 CF .hibytes 53245 +000307r 1 CF .hibytes 53246 +000308r 1 CF .hibytes 53247 +000309r 1 D0 .hibytes 53248 +00030Ar 1 D0 .hibytes 53249 +00030Br 1 D0 .hibytes 53250 +00030Cr 1 D0 .hibytes 53251 +00030Dr 1 D0 .hibytes 53252 +00030Er 1 D0 .hibytes 53253 +00030Fr 1 D0 .hibytes 53254 +000310r 1 D0 .hibytes 53255 +000311r 1 D0 .hibytes 53256 +000312r 1 D0 .hibytes 53257 +000313r 1 D0 .hibytes 53258 +000314r 1 D0 .hibytes 53259 +000315r 1 D0 .hibytes 53260 +000316r 1 D0 .hibytes 53261 +000317r 1 D0 .hibytes 53262 +000318r 1 D0 .hibytes 53263 +000319r 1 DF .hibytes 57313 +00031Ar 1 DF .hibytes 57314 +00031Br 1 DF .hibytes 57315 +00031Cr 1 DF .hibytes 57316 +00031Dr 1 DF .hibytes 57317 +00031Er 1 DF .hibytes 57318 +00031Fr 1 DF .hibytes 57319 +000320r 1 DF .hibytes 57320 +000321r 1 DF .hibytes 57321 +000322r 1 DF .hibytes 57322 +000323r 1 DF .hibytes 57323 +000324r 1 DF .hibytes 57324 +000325r 1 DF .hibytes 57325 +000326r 1 DF .hibytes 57326 +000327r 1 DF .hibytes 57327 +000328r 1 DF .hibytes 57328 +000329r 1 DF .hibytes 57329 +00032Ar 1 DF .hibytes 57330 +00032Br 1 DF .hibytes 57331 +00032Cr 1 DF .hibytes 57332 +00032Dr 1 DF .hibytes 57333 +00032Er 1 DF .hibytes 57334 +00032Fr 1 DF .hibytes 57335 +000330r 1 DF .hibytes 57336 +000331r 1 DF .hibytes 57337 +000332r 1 DF .hibytes 57338 +000333r 1 DF .hibytes 57339 +000334r 1 DF .hibytes 57340 +000335r 1 DF .hibytes 57341 +000336r 1 DF .hibytes 57342 +000337r 1 DF .hibytes 57343 +000338r 1 E0 .hibytes 57344 +000339r 1 E0 .hibytes 57345 +00033Ar 1 E0 .hibytes 57346 +00033Br 1 E0 .hibytes 57347 +00033Cr 1 E0 .hibytes 57348 +00033Dr 1 E0 .hibytes 57349 +00033Er 1 E0 .hibytes 57350 +00033Fr 1 E0 .hibytes 57351 +000340r 1 E0 .hibytes 57352 +000341r 1 E0 .hibytes 57353 +000342r 1 E0 .hibytes 57354 +000343r 1 E0 .hibytes 57355 +000344r 1 E0 .hibytes 57356 +000345r 1 E0 .hibytes 57357 +000346r 1 E0 .hibytes 57358 +000347r 1 E0 .hibytes 57359 +000348r 1 EF .hibytes 61409 +000349r 1 EF .hibytes 61410 +00034Ar 1 EF .hibytes 61411 +00034Br 1 EF .hibytes 61412 +00034Cr 1 EF .hibytes 61413 +00034Dr 1 EF .hibytes 61414 +00034Er 1 EF .hibytes 61415 +00034Fr 1 EF .hibytes 61416 +000350r 1 EF .hibytes 61417 +000351r 1 EF .hibytes 61418 +000352r 1 EF .hibytes 61419 +000353r 1 EF .hibytes 61420 +000354r 1 EF .hibytes 61421 +000355r 1 EF .hibytes 61422 +000356r 1 EF .hibytes 61423 +000357r 1 EF .hibytes 61424 +000358r 1 EF .hibytes 61425 +000359r 1 EF .hibytes 61426 +00035Ar 1 EF .hibytes 61427 +00035Br 1 EF .hibytes 61428 +00035Cr 1 EF .hibytes 61429 +00035Dr 1 EF .hibytes 61430 +00035Er 1 EF .hibytes 61431 +00035Fr 1 EF .hibytes 61432 +000360r 1 EF .hibytes 61433 +000361r 1 EF .hibytes 61434 +000362r 1 EF .hibytes 61435 +000363r 1 EF .hibytes 61436 +000364r 1 EF .hibytes 61437 +000365r 1 EF .hibytes 61438 +000366r 1 EF .hibytes 61439 +000367r 1 F0 .hibytes 61440 +000368r 1 F0 .hibytes 61441 +000369r 1 F0 .hibytes 61442 +00036Ar 1 F0 .hibytes 61443 +00036Br 1 F0 .hibytes 61444 +00036Cr 1 F0 .hibytes 61445 +00036Dr 1 F0 .hibytes 61446 +00036Er 1 F0 .hibytes 61447 +00036Fr 1 F0 .hibytes 61448 +000370r 1 F0 .hibytes 61449 +000371r 1 F0 .hibytes 61450 +000372r 1 F0 .hibytes 61451 +000373r 1 F0 .hibytes 61452 +000374r 1 F0 .hibytes 61453 +000375r 1 F0 .hibytes 61454 +000376r 1 F0 .hibytes 61455 +000377r 1 FF .hibytes 65505 +000378r 1 FF .hibytes 65506 +000379r 1 FF .hibytes 65507 +00037Ar 1 FF .hibytes 65508 +00037Br 1 FF .hibytes 65509 +00037Cr 1 FF .hibytes 65510 +00037Dr 1 FF .hibytes 65511 +00037Er 1 FF .hibytes 65512 +00037Fr 1 FF .hibytes 65513 +000380r 1 FF .hibytes 65514 +000381r 1 FF .hibytes 65515 +000382r 1 FF .hibytes 65516 +000383r 1 FF .hibytes 65517 +000384r 1 FF .hibytes 65518 +000385r 1 FF .hibytes 65519 +000386r 1 FF .hibytes 65520 +000387r 1 FF .hibytes 65521 +000388r 1 FF .hibytes 65522 +000389r 1 FF .hibytes 65523 +00038Ar 1 FF .hibytes 65524 +00038Br 1 FF .hibytes 65525 +00038Cr 1 FF .hibytes 65526 +00038Dr 1 FF .hibytes 65527 +00038Er 1 FF .hibytes 65528 +00038Fr 1 FF .hibytes 65529 +000390r 1 FF .hibytes 65530 +000391r 1 FF .hibytes 65531 +000392r 1 FF .hibytes 65532 +000393r 1 FF .hibytes 65533 +000394r 1 FF .hibytes 65534 +000395r 1 FF .hibytes 65535 +000396r 1 +000396r 1 ; hex values +000396r 1 00 .hibytes $0 +000397r 1 00 .hibytes $1 +000398r 1 00 .hibytes $2 +000399r 1 00 .hibytes $3 +00039Ar 1 00 .hibytes $4 +00039Br 1 00 .hibytes $5 +00039Cr 1 00 .hibytes $6 +00039Dr 1 00 .hibytes $7 +00039Er 1 00 .hibytes $8 +00039Fr 1 00 .hibytes $9 +0003A0r 1 00 .hibytes $a +0003A1r 1 00 .hibytes $b +0003A2r 1 00 .hibytes $c +0003A3r 1 00 .hibytes $d +0003A4r 1 00 .hibytes $e +0003A5r 1 00 .hibytes $f +0003A6r 1 00 .hibytes $10 +0003A7r 1 00 .hibytes $11 +0003A8r 1 00 .hibytes $12 +0003A9r 1 00 .hibytes $13 +0003AAr 1 00 .hibytes $70 +0003ABr 1 00 .hibytes $71 +0003ACr 1 00 .hibytes $72 +0003ADr 1 00 .hibytes $73 +0003AEr 1 00 .hibytes $74 +0003AFr 1 00 .hibytes $75 +0003B0r 1 00 .hibytes $76 +0003B1r 1 00 .hibytes $77 +0003B2r 1 00 .hibytes $78 +0003B3r 1 00 .hibytes $79 +0003B4r 1 00 .hibytes $7a +0003B5r 1 00 .hibytes $7b +0003B6r 1 00 .hibytes $7c +0003B7r 1 00 .hibytes $7d +0003B8r 1 00 .hibytes $7e +0003B9r 1 00 .hibytes $7f +0003BAr 1 00 .hibytes $80 +0003BBr 1 00 .hibytes $81 +0003BCr 1 00 .hibytes $82 +0003BDr 1 00 .hibytes $83 +0003BEr 1 00 .hibytes $84 +0003BFr 1 00 .hibytes $85 +0003C0r 1 00 .hibytes $86 +0003C1r 1 00 .hibytes $f0 +0003C2r 1 00 .hibytes $f1 +0003C3r 1 00 .hibytes $f2 +0003C4r 1 00 .hibytes $f3 +0003C5r 1 00 .hibytes $f4 +0003C6r 1 00 .hibytes $f5 +0003C7r 1 00 .hibytes $f6 +0003C8r 1 00 .hibytes $f7 +0003C9r 1 00 .hibytes $f8 +0003CAr 1 00 .hibytes $f9 +0003CBr 1 00 .hibytes $fa +0003CCr 1 00 .hibytes $fb +0003CDr 1 00 .hibytes $fc +0003CEr 1 00 .hibytes $fd +0003CFr 1 00 .hibytes $fe +0003D0r 1 00 .hibytes $ff +0003D1r 1 01 .hibytes $100 +0003D2r 1 01 .hibytes $101 +0003D3r 1 01 .hibytes $102 +0003D4r 1 01 .hibytes $103 +0003D5r 1 0F .hibytes $fd2 +0003D6r 1 0F .hibytes $fd3 +0003D7r 1 0F .hibytes $fd4 +0003D8r 1 0F .hibytes $fd5 +0003D9r 1 0F .hibytes $fd6 +0003DAr 1 0F .hibytes $fd7 +0003DBr 1 0F .hibytes $fd8 +0003DCr 1 0F .hibytes $fd9 +0003DDr 1 0F .hibytes $fda +0003DEr 1 0F .hibytes $fdb +0003DFr 1 0F .hibytes $fdc +0003E0r 1 0F .hibytes $fdd +0003E1r 1 0F .hibytes $fde +0003E2r 1 0F .hibytes $fdf +0003E3r 1 0F .hibytes $fe0 +0003E4r 1 0F .hibytes $fe1 +0003E5r 1 0F .hibytes $fe2 +0003E6r 1 0F .hibytes $fe3 +0003E7r 1 0F .hibytes $fe4 +0003E8r 1 0F .hibytes $fe5 +0003E9r 1 0F .hibytes $fe6 +0003EAr 1 0F .hibytes $fe7 +0003EBr 1 0F .hibytes $fe8 +0003ECr 1 0F .hibytes $fe9 +0003EDr 1 0F .hibytes $fea +0003EEr 1 0F .hibytes $feb +0003EFr 1 0F .hibytes $fec +0003F0r 1 0F .hibytes $fed +0003F1r 1 0F .hibytes $fee +0003F2r 1 0F .hibytes $fef +0003F3r 1 0F .hibytes $ff0 +0003F4r 1 0F .hibytes $ff1 +0003F5r 1 0F .hibytes $ff2 +0003F6r 1 0F .hibytes $ff3 +0003F7r 1 0F .hibytes $ff4 +0003F8r 1 0F .hibytes $ff5 +0003F9r 1 0F .hibytes $ff6 +0003FAr 1 0F .hibytes $ff7 +0003FBr 1 0F .hibytes $ff8 +0003FCr 1 0F .hibytes $ff9 +0003FDr 1 0F .hibytes $ffa +0003FEr 1 0F .hibytes $ffb +0003FFr 1 0F .hibytes $ffc +000400r 1 0F .hibytes $ffd +000401r 1 0F .hibytes $ffe +000402r 1 0F .hibytes $fff +000403r 1 10 .hibytes $1000 +000404r 1 10 .hibytes $1001 +000405r 1 10 .hibytes $1002 +000406r 1 10 .hibytes $1003 +000407r 1 10 .hibytes $1004 +000408r 1 10 .hibytes $1005 +000409r 1 10 .hibytes $1006 +00040Ar 1 10 .hibytes $1007 +00040Br 1 10 .hibytes $1008 +00040Cr 1 7F .hibytes $7ff0 +00040Dr 1 7F .hibytes $7ff1 +00040Er 1 7F .hibytes $7ff2 +00040Fr 1 7F .hibytes $7ff3 +000410r 1 7F .hibytes $7ff4 +000411r 1 7F .hibytes $7ff5 +000412r 1 7F .hibytes $7ff6 +000413r 1 7F .hibytes $7ff7 +000414r 1 7F .hibytes $7ff8 +000415r 1 7F .hibytes $7ff9 +000416r 1 7F .hibytes $7ffa +000417r 1 7F .hibytes $7ffb +000418r 1 7F .hibytes $7ffc +000419r 1 7F .hibytes $7ffd +00041Ar 1 7F .hibytes $7ffe +00041Br 1 7F .hibytes $7fff +00041Cr 1 80 .hibytes $8000 +00041Dr 1 80 .hibytes $8001 +00041Er 1 80 .hibytes $8002 +00041Fr 1 80 .hibytes $8003 +000420r 1 80 .hibytes $8004 +000421r 1 80 .hibytes $8005 +000422r 1 80 .hibytes $8006 +000423r 1 80 .hibytes $8007 +000424r 1 80 .hibytes $8008 +000425r 1 80 .hibytes $8009 +000426r 1 80 .hibytes $800a +000427r 1 80 .hibytes $800b +000428r 1 9F .hibytes $9fe1 +000429r 1 9F .hibytes $9fe2 +00042Ar 1 9F .hibytes $9fe3 +00042Br 1 9F .hibytes $9fe4 +00042Cr 1 9F .hibytes $9fe5 +00042Dr 1 9F .hibytes $9fe6 +00042Er 1 9F .hibytes $9fe7 +00042Fr 1 9F .hibytes $9fe8 +000430r 1 9F .hibytes $9fe9 +000431r 1 9F .hibytes $9fea +000432r 1 9F .hibytes $9feb +000433r 1 9F .hibytes $9fec +000434r 1 9F .hibytes $9fed +000435r 1 9F .hibytes $9fee +000436r 1 9F .hibytes $9fef +000437r 1 9F .hibytes $9ff0 +000438r 1 9F .hibytes $9ff1 +000439r 1 9F .hibytes $9ff2 +00043Ar 1 9F .hibytes $9ff3 +00043Br 1 9F .hibytes $9ff4 +00043Cr 1 9F .hibytes $9ff5 +00043Dr 1 9F .hibytes $9ff6 +00043Er 1 9F .hibytes $9ff7 +00043Fr 1 9F .hibytes $9ff8 +000440r 1 9F .hibytes $9ff9 +000441r 1 9F .hibytes $9ffa +000442r 1 9F .hibytes $9ffb +000443r 1 9F .hibytes $9ffc +000444r 1 9F .hibytes $9ffd +000445r 1 9F .hibytes $9ffe +000446r 1 9F .hibytes $9fff +000447r 1 A0 .hibytes $a000 +000448r 1 A0 .hibytes $a001 +000449r 1 A0 .hibytes $a002 +00044Ar 1 A0 .hibytes $a003 +00044Br 1 A0 .hibytes $a004 +00044Cr 1 A0 .hibytes $a005 +00044Dr 1 A0 .hibytes $a006 +00044Er 1 A0 .hibytes $a007 +00044Fr 1 A0 .hibytes $a008 +000450r 1 A0 .hibytes $a009 +000451r 1 A0 .hibytes $a00a +000452r 1 A0 .hibytes $a00b +000453r 1 A0 .hibytes $a00c +000454r 1 A0 .hibytes $a00d +000455r 1 A0 .hibytes $a00e +000456r 1 A0 .hibytes $a00f +000457r 1 AF .hibytes $afe1 +000458r 1 AF .hibytes $afe2 +000459r 1 AF .hibytes $afe3 +00045Ar 1 AF .hibytes $afe4 +00045Br 1 AF .hibytes $afe5 +00045Cr 1 AF .hibytes $afe6 +00045Dr 1 AF .hibytes $afe7 +00045Er 1 AF .hibytes $afe8 +00045Fr 1 AF .hibytes $afe9 +000460r 1 AF .hibytes $afea +000461r 1 AF .hibytes $afeb +000462r 1 AF .hibytes $afec +000463r 1 AF .hibytes $afed +000464r 1 AF .hibytes $afee +000465r 1 AF .hibytes $afef +000466r 1 AF .hibytes $aff0 +000467r 1 AF .hibytes $aff1 +000468r 1 AF .hibytes $aff2 +000469r 1 AF .hibytes $aff3 +00046Ar 1 AF .hibytes $aff4 +00046Br 1 AF .hibytes $aff5 +00046Cr 1 AF .hibytes $aff6 +00046Dr 1 AF .hibytes $aff7 +00046Er 1 AF .hibytes $aff8 +00046Fr 1 AF .hibytes $aff9 +000470r 1 AF .hibytes $affa +000471r 1 AF .hibytes $affb +000472r 1 AF .hibytes $affc +000473r 1 AF .hibytes $affd +000474r 1 AF .hibytes $affe +000475r 1 AF .hibytes $afff +000476r 1 B0 .hibytes $b000 +000477r 1 B0 .hibytes $b001 +000478r 1 B0 .hibytes $b002 +000479r 1 B0 .hibytes $b003 +00047Ar 1 B0 .hibytes $b004 +00047Br 1 B0 .hibytes $b005 +00047Cr 1 B0 .hibytes $b006 +00047Dr 1 B0 .hibytes $b007 +00047Er 1 B0 .hibytes $b008 +00047Fr 1 B0 .hibytes $b009 +000480r 1 B0 .hibytes $b00a +000481r 1 B0 .hibytes $b00b +000482r 1 B0 .hibytes $b00c +000483r 1 B0 .hibytes $b00d +000484r 1 B0 .hibytes $b00e +000485r 1 B0 .hibytes $b00f +000486r 1 BF .hibytes $bfe1 +000487r 1 BF .hibytes $bfe2 +000488r 1 BF .hibytes $bfe3 +000489r 1 BF .hibytes $bfe4 +00048Ar 1 BF .hibytes $bfe5 +00048Br 1 BF .hibytes $bfe6 +00048Cr 1 BF .hibytes $bfe7 +00048Dr 1 BF .hibytes $bfe8 +00048Er 1 BF .hibytes $bfe9 +00048Fr 1 BF .hibytes $bfea +000490r 1 BF .hibytes $bfeb +000491r 1 BF .hibytes $bfec +000492r 1 BF .hibytes $bfed +000493r 1 BF .hibytes $bfee +000494r 1 BF .hibytes $bfef +000495r 1 BF .hibytes $bff0 +000496r 1 BF .hibytes $bff1 +000497r 1 BF .hibytes $bff2 +000498r 1 BF .hibytes $bff3 +000499r 1 BF .hibytes $bff4 +00049Ar 1 BF .hibytes $bff5 +00049Br 1 BF .hibytes $bff6 +00049Cr 1 BF .hibytes $bff7 +00049Dr 1 BF .hibytes $bff8 +00049Er 1 BF .hibytes $bff9 +00049Fr 1 BF .hibytes $bffa +0004A0r 1 BF .hibytes $bffb +0004A1r 1 BF .hibytes $bffc +0004A2r 1 BF .hibytes $bffd +0004A3r 1 BF .hibytes $bffe +0004A4r 1 BF .hibytes $bfff +0004A5r 1 C0 .hibytes $c000 +0004A6r 1 C0 .hibytes $c001 +0004A7r 1 C0 .hibytes $c002 +0004A8r 1 C0 .hibytes $c003 +0004A9r 1 C0 .hibytes $c004 +0004AAr 1 C0 .hibytes $c005 +0004ABr 1 C0 .hibytes $c006 +0004ACr 1 C0 .hibytes $c007 +0004ADr 1 C0 .hibytes $c008 +0004AEr 1 C0 .hibytes $c009 +0004AFr 1 C0 .hibytes $c00a +0004B0r 1 C0 .hibytes $c00b +0004B1r 1 C0 .hibytes $c00c +0004B2r 1 C0 .hibytes $c00d +0004B3r 1 C0 .hibytes $c00e +0004B4r 1 C0 .hibytes $c00f +0004B5r 1 CF .hibytes $cfe1 +0004B6r 1 CF .hibytes $cfe2 +0004B7r 1 CF .hibytes $cfe3 +0004B8r 1 CF .hibytes $cfe4 +0004B9r 1 CF .hibytes $cfe5 +0004BAr 1 CF .hibytes $cfe6 +0004BBr 1 CF .hibytes $cfe7 +0004BCr 1 CF .hibytes $cfe8 +0004BDr 1 CF .hibytes $cfe9 +0004BEr 1 CF .hibytes $cfea +0004BFr 1 CF .hibytes $cfeb +0004C0r 1 CF .hibytes $cfec +0004C1r 1 CF .hibytes $cfed +0004C2r 1 CF .hibytes $cfee +0004C3r 1 CF .hibytes $cfef +0004C4r 1 CF .hibytes $cff0 +0004C5r 1 CF .hibytes $cff1 +0004C6r 1 CF .hibytes $cff2 +0004C7r 1 CF .hibytes $cff3 +0004C8r 1 CF .hibytes $cff4 +0004C9r 1 CF .hibytes $cff5 +0004CAr 1 CF .hibytes $cff6 +0004CBr 1 CF .hibytes $cff7 +0004CCr 1 CF .hibytes $cff8 +0004CDr 1 CF .hibytes $cff9 +0004CEr 1 CF .hibytes $cffa +0004CFr 1 CF .hibytes $cffb +0004D0r 1 CF .hibytes $cffc +0004D1r 1 CF .hibytes $cffd +0004D2r 1 CF .hibytes $cffe +0004D3r 1 CF .hibytes $cfff +0004D4r 1 D0 .hibytes $d000 +0004D5r 1 D0 .hibytes $d001 +0004D6r 1 D0 .hibytes $d002 +0004D7r 1 D0 .hibytes $d003 +0004D8r 1 D0 .hibytes $d004 +0004D9r 1 D0 .hibytes $d005 +0004DAr 1 D0 .hibytes $d006 +0004DBr 1 D0 .hibytes $d007 +0004DCr 1 D0 .hibytes $d008 +0004DDr 1 D0 .hibytes $d009 +0004DEr 1 D0 .hibytes $d00a +0004DFr 1 D0 .hibytes $d00b +0004E0r 1 D0 .hibytes $d00c +0004E1r 1 D0 .hibytes $d00d +0004E2r 1 D0 .hibytes $d00e +0004E3r 1 D0 .hibytes $d00f +0004E4r 1 DF .hibytes $dfe1 +0004E5r 1 DF .hibytes $dfe2 +0004E6r 1 DF .hibytes $dfe3 +0004E7r 1 DF .hibytes $dfe4 +0004E8r 1 DF .hibytes $dfe5 +0004E9r 1 DF .hibytes $dfe6 +0004EAr 1 DF .hibytes $dfe7 +0004EBr 1 DF .hibytes $dfe8 +0004ECr 1 DF .hibytes $dfe9 +0004EDr 1 DF .hibytes $dfea +0004EEr 1 DF .hibytes $dfeb +0004EFr 1 DF .hibytes $dfec +0004F0r 1 DF .hibytes $dfed +0004F1r 1 DF .hibytes $dfee +0004F2r 1 DF .hibytes $dfef +0004F3r 1 DF .hibytes $dff0 +0004F4r 1 DF .hibytes $dff1 +0004F5r 1 DF .hibytes $dff2 +0004F6r 1 DF .hibytes $dff3 +0004F7r 1 DF .hibytes $dff4 +0004F8r 1 DF .hibytes $dff5 +0004F9r 1 DF .hibytes $dff6 +0004FAr 1 DF .hibytes $dff7 +0004FBr 1 DF .hibytes $dff8 +0004FCr 1 DF .hibytes $dff9 +0004FDr 1 DF .hibytes $dffa +0004FEr 1 DF .hibytes $dffb +0004FFr 1 DF .hibytes $dffc +000500r 1 DF .hibytes $dffd +000501r 1 DF .hibytes $dffe +000502r 1 DF .hibytes $dfff +000503r 1 E0 .hibytes $e000 +000504r 1 E0 .hibytes $e001 +000505r 1 E0 .hibytes $e002 +000506r 1 E0 .hibytes $e003 +000507r 1 E0 .hibytes $e004 +000508r 1 E0 .hibytes $e005 +000509r 1 E0 .hibytes $e006 +00050Ar 1 E0 .hibytes $e007 +00050Br 1 E0 .hibytes $e008 +00050Cr 1 E0 .hibytes $e009 +00050Dr 1 E0 .hibytes $e00a +00050Er 1 E0 .hibytes $e00b +00050Fr 1 E0 .hibytes $e00c +000510r 1 E0 .hibytes $e00d +000511r 1 E0 .hibytes $e00e +000512r 1 E0 .hibytes $e00f +000513r 1 EF .hibytes $efe1 +000514r 1 EF .hibytes $efe2 +000515r 1 EF .hibytes $efe3 +000516r 1 EF .hibytes $efe4 +000517r 1 EF .hibytes $efe5 +000518r 1 EF .hibytes $efe6 +000519r 1 EF .hibytes $efe7 +00051Ar 1 EF .hibytes $efe8 +00051Br 1 EF .hibytes $efe9 +00051Cr 1 EF .hibytes $efea +00051Dr 1 EF .hibytes $efeb +00051Er 1 EF .hibytes $efec +00051Fr 1 EF .hibytes $efed +000520r 1 EF .hibytes $efee +000521r 1 EF .hibytes $efef +000522r 1 EF .hibytes $eff0 +000523r 1 EF .hibytes $eff1 +000524r 1 EF .hibytes $eff2 +000525r 1 EF .hibytes $eff3 +000526r 1 EF .hibytes $eff4 +000527r 1 EF .hibytes $eff5 +000528r 1 EF .hibytes $eff6 +000529r 1 EF .hibytes $eff7 +00052Ar 1 EF .hibytes $eff8 +00052Br 1 EF .hibytes $eff9 +00052Cr 1 EF .hibytes $effa +00052Dr 1 EF .hibytes $effb +00052Er 1 EF .hibytes $effc +00052Fr 1 EF .hibytes $effd +000530r 1 EF .hibytes $effe +000531r 1 EF .hibytes $efff +000532r 1 F0 .hibytes $f000 +000533r 1 F0 .hibytes $f001 +000534r 1 F0 .hibytes $f002 +000535r 1 F0 .hibytes $f003 +000536r 1 F0 .hibytes $f004 +000537r 1 F0 .hibytes $f005 +000538r 1 F0 .hibytes $f006 +000539r 1 F0 .hibytes $f007 +00053Ar 1 F0 .hibytes $f008 +00053Br 1 F0 .hibytes $f009 +00053Cr 1 F0 .hibytes $f00a +00053Dr 1 F0 .hibytes $f00b +00053Er 1 F0 .hibytes $f00c +00053Fr 1 F0 .hibytes $f00d +000540r 1 F0 .hibytes $f00e +000541r 1 F0 .hibytes $f00f +000542r 1 FF .hibytes $ffe1 +000543r 1 FF .hibytes $ffe2 +000544r 1 FF .hibytes $ffe3 +000545r 1 FF .hibytes $ffe4 +000546r 1 FF .hibytes $ffe5 +000547r 1 FF .hibytes $ffe6 +000548r 1 FF .hibytes $ffe7 +000549r 1 FF .hibytes $ffe8 +00054Ar 1 FF .hibytes $ffe9 +00054Br 1 FF .hibytes $ffea +00054Cr 1 FF .hibytes $ffeb +00054Dr 1 FF .hibytes $ffec +00054Er 1 FF .hibytes $ffed +00054Fr 1 FF .hibytes $ffee +000550r 1 FF .hibytes $ffef +000551r 1 FF .hibytes $fff0 +000552r 1 FF .hibytes $fff1 +000553r 1 FF .hibytes $fff2 +000554r 1 FF .hibytes $fff3 +000555r 1 FF .hibytes $fff4 +000556r 1 FF .hibytes $fff5 +000557r 1 FF .hibytes $fff6 +000558r 1 FF .hibytes $fff7 +000559r 1 FF .hibytes $fff8 +00055Ar 1 FF .hibytes $fff9 +00055Br 1 FF .hibytes $fffa +00055Cr 1 FF .hibytes $fffb +00055Dr 1 FF .hibytes $fffc +00055Er 1 FF .hibytes $fffd +00055Fr 1 FF .hibytes $fffe +000560r 1 FF .hibytes $ffff +000561r 1 +000561r 1 ; hex values, uppercase +000561r 1 00 .hibytes $0 +000562r 1 00 .hibytes $1 +000563r 1 00 .hibytes $2 +000564r 1 00 .hibytes $3 +000565r 1 00 .hibytes $4 +000566r 1 00 .hibytes $5 +000567r 1 00 .hibytes $6 +000568r 1 00 .hibytes $7 +000569r 1 00 .hibytes $8 +00056Ar 1 00 .hibytes $9 +00056Br 1 00 .hibytes $A +00056Cr 1 00 .hibytes $B +00056Dr 1 00 .hibytes $C +00056Er 1 00 .hibytes $D +00056Fr 1 00 .hibytes $E +000570r 1 00 .hibytes $F +000571r 1 00 .hibytes $10 +000572r 1 00 .hibytes $11 +000573r 1 00 .hibytes $12 +000574r 1 00 .hibytes $13 +000575r 1 00 .hibytes $70 +000576r 1 00 .hibytes $71 +000577r 1 00 .hibytes $72 +000578r 1 00 .hibytes $73 +000579r 1 00 .hibytes $74 +00057Ar 1 00 .hibytes $75 +00057Br 1 00 .hibytes $76 +00057Cr 1 00 .hibytes $77 +00057Dr 1 00 .hibytes $78 +00057Er 1 00 .hibytes $79 +00057Fr 1 00 .hibytes $7A +000580r 1 00 .hibytes $7B +000581r 1 00 .hibytes $7C +000582r 1 00 .hibytes $7D +000583r 1 00 .hibytes $7E +000584r 1 00 .hibytes $7F +000585r 1 00 .hibytes $80 +000586r 1 00 .hibytes $81 +000587r 1 00 .hibytes $82 +000588r 1 00 .hibytes $83 +000589r 1 00 .hibytes $84 +00058Ar 1 00 .hibytes $85 +00058Br 1 00 .hibytes $86 +00058Cr 1 00 .hibytes $F0 +00058Dr 1 00 .hibytes $F1 +00058Er 1 00 .hibytes $F2 +00058Fr 1 00 .hibytes $F3 +000590r 1 00 .hibytes $F4 +000591r 1 00 .hibytes $F5 +000592r 1 00 .hibytes $F6 +000593r 1 00 .hibytes $F7 +000594r 1 00 .hibytes $F8 +000595r 1 00 .hibytes $F9 +000596r 1 00 .hibytes $FA +000597r 1 00 .hibytes $FB +000598r 1 00 .hibytes $FC +000599r 1 00 .hibytes $FD +00059Ar 1 00 .hibytes $FE +00059Br 1 00 .hibytes $FF +00059Cr 1 01 .hibytes $100 +00059Dr 1 01 .hibytes $101 +00059Er 1 01 .hibytes $102 +00059Fr 1 01 .hibytes $103 +0005A0r 1 0F .hibytes $FD2 +0005A1r 1 0F .hibytes $FD3 +0005A2r 1 0F .hibytes $FD4 +0005A3r 1 0F .hibytes $FD5 +0005A4r 1 0F .hibytes $FD6 +0005A5r 1 0F .hibytes $FD7 +0005A6r 1 0F .hibytes $FD8 +0005A7r 1 0F .hibytes $FD9 +0005A8r 1 0F .hibytes $FDA +0005A9r 1 0F .hibytes $FDB +0005AAr 1 0F .hibytes $FDC +0005ABr 1 0F .hibytes $FDD +0005ACr 1 0F .hibytes $FDE +0005ADr 1 0F .hibytes $FDF +0005AEr 1 0F .hibytes $FE0 +0005AFr 1 0F .hibytes $FE1 +0005B0r 1 0F .hibytes $FE2 +0005B1r 1 0F .hibytes $FE3 +0005B2r 1 0F .hibytes $FE4 +0005B3r 1 0F .hibytes $FE5 +0005B4r 1 0F .hibytes $FE6 +0005B5r 1 0F .hibytes $FE7 +0005B6r 1 0F .hibytes $FE8 +0005B7r 1 0F .hibytes $FE9 +0005B8r 1 0F .hibytes $FEA +0005B9r 1 0F .hibytes $FEB +0005BAr 1 0F .hibytes $FEC +0005BBr 1 0F .hibytes $FED +0005BCr 1 0F .hibytes $FEE +0005BDr 1 0F .hibytes $FEF +0005BEr 1 0F .hibytes $FF0 +0005BFr 1 0F .hibytes $FF1 +0005C0r 1 0F .hibytes $FF2 +0005C1r 1 0F .hibytes $FF3 +0005C2r 1 0F .hibytes $FF4 +0005C3r 1 0F .hibytes $FF5 +0005C4r 1 0F .hibytes $FF6 +0005C5r 1 0F .hibytes $FF7 +0005C6r 1 0F .hibytes $FF8 +0005C7r 1 0F .hibytes $FF9 +0005C8r 1 0F .hibytes $FFA +0005C9r 1 0F .hibytes $FFB +0005CAr 1 0F .hibytes $FFC +0005CBr 1 0F .hibytes $FFD +0005CCr 1 0F .hibytes $FFE +0005CDr 1 0F .hibytes $FFF +0005CEr 1 10 .hibytes $1000 +0005CFr 1 10 .hibytes $1001 +0005D0r 1 10 .hibytes $1002 +0005D1r 1 10 .hibytes $1003 +0005D2r 1 10 .hibytes $1004 +0005D3r 1 10 .hibytes $1005 +0005D4r 1 10 .hibytes $1006 +0005D5r 1 10 .hibytes $1007 +0005D6r 1 10 .hibytes $1008 +0005D7r 1 7F .hibytes $7FF0 +0005D8r 1 7F .hibytes $7FF1 +0005D9r 1 7F .hibytes $7FF2 +0005DAr 1 7F .hibytes $7FF3 +0005DBr 1 7F .hibytes $7FF4 +0005DCr 1 7F .hibytes $7FF5 +0005DDr 1 7F .hibytes $7FF6 +0005DEr 1 7F .hibytes $7FF7 +0005DFr 1 7F .hibytes $7FF8 +0005E0r 1 7F .hibytes $7FF9 +0005E1r 1 7F .hibytes $7FFA +0005E2r 1 7F .hibytes $7FFB +0005E3r 1 7F .hibytes $7FFC +0005E4r 1 7F .hibytes $7FFD +0005E5r 1 7F .hibytes $7FFE +0005E6r 1 7F .hibytes $7FFF +0005E7r 1 80 .hibytes $8000 +0005E8r 1 80 .hibytes $8001 +0005E9r 1 80 .hibytes $8002 +0005EAr 1 80 .hibytes $8003 +0005EBr 1 80 .hibytes $8004 +0005ECr 1 80 .hibytes $8005 +0005EDr 1 80 .hibytes $8006 +0005EEr 1 80 .hibytes $8007 +0005EFr 1 80 .hibytes $8008 +0005F0r 1 80 .hibytes $8009 +0005F1r 1 80 .hibytes $800A +0005F2r 1 80 .hibytes $800B +0005F3r 1 9F .hibytes $9FE1 +0005F4r 1 9F .hibytes $9FE2 +0005F5r 1 9F .hibytes $9FE3 +0005F6r 1 9F .hibytes $9FE4 +0005F7r 1 9F .hibytes $9FE5 +0005F8r 1 9F .hibytes $9FE6 +0005F9r 1 9F .hibytes $9FE7 +0005FAr 1 9F .hibytes $9FE8 +0005FBr 1 9F .hibytes $9FE9 +0005FCr 1 9F .hibytes $9FEA +0005FDr 1 9F .hibytes $9FEB +0005FEr 1 9F .hibytes $9FEC +0005FFr 1 9F .hibytes $9FED +000600r 1 9F .hibytes $9FEE +000601r 1 9F .hibytes $9FEF +000602r 1 9F .hibytes $9FF0 +000603r 1 9F .hibytes $9FF1 +000604r 1 9F .hibytes $9FF2 +000605r 1 9F .hibytes $9FF3 +000606r 1 9F .hibytes $9FF4 +000607r 1 9F .hibytes $9FF5 +000608r 1 9F .hibytes $9FF6 +000609r 1 9F .hibytes $9FF7 +00060Ar 1 9F .hibytes $9FF8 +00060Br 1 9F .hibytes $9FF9 +00060Cr 1 9F .hibytes $9FFA +00060Dr 1 9F .hibytes $9FFB +00060Er 1 9F .hibytes $9FFC +00060Fr 1 9F .hibytes $9FFD +000610r 1 9F .hibytes $9FFE +000611r 1 9F .hibytes $9FFF +000612r 1 A0 .hibytes $A000 +000613r 1 A0 .hibytes $A001 +000614r 1 A0 .hibytes $A002 +000615r 1 A0 .hibytes $A003 +000616r 1 A0 .hibytes $A004 +000617r 1 A0 .hibytes $A005 +000618r 1 A0 .hibytes $A006 +000619r 1 A0 .hibytes $A007 +00061Ar 1 A0 .hibytes $A008 +00061Br 1 A0 .hibytes $A009 +00061Cr 1 A0 .hibytes $A00A +00061Dr 1 A0 .hibytes $A00B +00061Er 1 A0 .hibytes $A00C +00061Fr 1 A0 .hibytes $A00D +000620r 1 A0 .hibytes $A00E +000621r 1 A0 .hibytes $A00F +000622r 1 AF .hibytes $AFE1 +000623r 1 AF .hibytes $AFE2 +000624r 1 AF .hibytes $AFE3 +000625r 1 AF .hibytes $AFE4 +000626r 1 AF .hibytes $AFE5 +000627r 1 AF .hibytes $AFE6 +000628r 1 AF .hibytes $AFE7 +000629r 1 AF .hibytes $AFE8 +00062Ar 1 AF .hibytes $AFE9 +00062Br 1 AF .hibytes $AFEA +00062Cr 1 AF .hibytes $AFEB +00062Dr 1 AF .hibytes $AFEC +00062Er 1 AF .hibytes $AFED +00062Fr 1 AF .hibytes $AFEE +000630r 1 AF .hibytes $AFEF +000631r 1 AF .hibytes $AFF0 +000632r 1 AF .hibytes $AFF1 +000633r 1 AF .hibytes $AFF2 +000634r 1 AF .hibytes $AFF3 +000635r 1 AF .hibytes $AFF4 +000636r 1 AF .hibytes $AFF5 +000637r 1 AF .hibytes $AFF6 +000638r 1 AF .hibytes $AFF7 +000639r 1 AF .hibytes $AFF8 +00063Ar 1 AF .hibytes $AFF9 +00063Br 1 AF .hibytes $AFFA +00063Cr 1 AF .hibytes $AFFB +00063Dr 1 AF .hibytes $AFFC +00063Er 1 AF .hibytes $AFFD +00063Fr 1 AF .hibytes $AFFE +000640r 1 AF .hibytes $AFFF +000641r 1 B0 .hibytes $B000 +000642r 1 B0 .hibytes $B001 +000643r 1 B0 .hibytes $B002 +000644r 1 B0 .hibytes $B003 +000645r 1 B0 .hibytes $B004 +000646r 1 B0 .hibytes $B005 +000647r 1 B0 .hibytes $B006 +000648r 1 B0 .hibytes $B007 +000649r 1 B0 .hibytes $B008 +00064Ar 1 B0 .hibytes $B009 +00064Br 1 B0 .hibytes $B00A +00064Cr 1 B0 .hibytes $B00B +00064Dr 1 B0 .hibytes $B00C +00064Er 1 B0 .hibytes $B00D +00064Fr 1 B0 .hibytes $B00E +000650r 1 B0 .hibytes $B00F +000651r 1 BF .hibytes $BFE1 +000652r 1 BF .hibytes $BFE2 +000653r 1 BF .hibytes $BFE3 +000654r 1 BF .hibytes $BFE4 +000655r 1 BF .hibytes $BFE5 +000656r 1 BF .hibytes $BFE6 +000657r 1 BF .hibytes $BFE7 +000658r 1 BF .hibytes $BFE8 +000659r 1 BF .hibytes $BFE9 +00065Ar 1 BF .hibytes $BFEA +00065Br 1 BF .hibytes $BFEB +00065Cr 1 BF .hibytes $BFEC +00065Dr 1 BF .hibytes $BFED +00065Er 1 BF .hibytes $BFEE +00065Fr 1 BF .hibytes $BFEF +000660r 1 BF .hibytes $BFF0 +000661r 1 BF .hibytes $BFF1 +000662r 1 BF .hibytes $BFF2 +000663r 1 BF .hibytes $BFF3 +000664r 1 BF .hibytes $BFF4 +000665r 1 BF .hibytes $BFF5 +000666r 1 BF .hibytes $BFF6 +000667r 1 BF .hibytes $BFF7 +000668r 1 BF .hibytes $BFF8 +000669r 1 BF .hibytes $BFF9 +00066Ar 1 BF .hibytes $BFFA +00066Br 1 BF .hibytes $BFFB +00066Cr 1 BF .hibytes $BFFC +00066Dr 1 BF .hibytes $BFFD +00066Er 1 BF .hibytes $BFFE +00066Fr 1 BF .hibytes $BFFF +000670r 1 C0 .hibytes $C000 +000671r 1 C0 .hibytes $C001 +000672r 1 C0 .hibytes $C002 +000673r 1 C0 .hibytes $C003 +000674r 1 C0 .hibytes $C004 +000675r 1 C0 .hibytes $C005 +000676r 1 C0 .hibytes $C006 +000677r 1 C0 .hibytes $C007 +000678r 1 C0 .hibytes $C008 +000679r 1 C0 .hibytes $C009 +00067Ar 1 C0 .hibytes $C00A +00067Br 1 C0 .hibytes $C00B +00067Cr 1 C0 .hibytes $C00C +00067Dr 1 C0 .hibytes $C00D +00067Er 1 C0 .hibytes $C00E +00067Fr 1 C0 .hibytes $C00F +000680r 1 CF .hibytes $CFE1 +000681r 1 CF .hibytes $CFE2 +000682r 1 CF .hibytes $CFE3 +000683r 1 CF .hibytes $CFE4 +000684r 1 CF .hibytes $CFE5 +000685r 1 CF .hibytes $CFE6 +000686r 1 CF .hibytes $CFE7 +000687r 1 CF .hibytes $CFE8 +000688r 1 CF .hibytes $CFE9 +000689r 1 CF .hibytes $CFEA +00068Ar 1 CF .hibytes $CFEB +00068Br 1 CF .hibytes $CFEC +00068Cr 1 CF .hibytes $CFED +00068Dr 1 CF .hibytes $CFEE +00068Er 1 CF .hibytes $CFEF +00068Fr 1 CF .hibytes $CFF0 +000690r 1 CF .hibytes $CFF1 +000691r 1 CF .hibytes $CFF2 +000692r 1 CF .hibytes $CFF3 +000693r 1 CF .hibytes $CFF4 +000694r 1 CF .hibytes $CFF5 +000695r 1 CF .hibytes $CFF6 +000696r 1 CF .hibytes $CFF7 +000697r 1 CF .hibytes $CFF8 +000698r 1 CF .hibytes $CFF9 +000699r 1 CF .hibytes $CFFA +00069Ar 1 CF .hibytes $CFFB +00069Br 1 CF .hibytes $CFFC +00069Cr 1 CF .hibytes $CFFD +00069Dr 1 CF .hibytes $CFFE +00069Er 1 CF .hibytes $CFFF +00069Fr 1 D0 .hibytes $D000 +0006A0r 1 D0 .hibytes $D001 +0006A1r 1 D0 .hibytes $D002 +0006A2r 1 D0 .hibytes $D003 +0006A3r 1 D0 .hibytes $D004 +0006A4r 1 D0 .hibytes $D005 +0006A5r 1 D0 .hibytes $D006 +0006A6r 1 D0 .hibytes $D007 +0006A7r 1 D0 .hibytes $D008 +0006A8r 1 D0 .hibytes $D009 +0006A9r 1 D0 .hibytes $D00A +0006AAr 1 D0 .hibytes $D00B +0006ABr 1 D0 .hibytes $D00C +0006ACr 1 D0 .hibytes $D00D +0006ADr 1 D0 .hibytes $D00E +0006AEr 1 D0 .hibytes $D00F +0006AFr 1 DF .hibytes $DFE1 +0006B0r 1 DF .hibytes $DFE2 +0006B1r 1 DF .hibytes $DFE3 +0006B2r 1 DF .hibytes $DFE4 +0006B3r 1 DF .hibytes $DFE5 +0006B4r 1 DF .hibytes $DFE6 +0006B5r 1 DF .hibytes $DFE7 +0006B6r 1 DF .hibytes $DFE8 +0006B7r 1 DF .hibytes $DFE9 +0006B8r 1 DF .hibytes $DFEA +0006B9r 1 DF .hibytes $DFEB +0006BAr 1 DF .hibytes $DFEC +0006BBr 1 DF .hibytes $DFED +0006BCr 1 DF .hibytes $DFEE +0006BDr 1 DF .hibytes $DFEF +0006BEr 1 DF .hibytes $DFF0 +0006BFr 1 DF .hibytes $DFF1 +0006C0r 1 DF .hibytes $DFF2 +0006C1r 1 DF .hibytes $DFF3 +0006C2r 1 DF .hibytes $DFF4 +0006C3r 1 DF .hibytes $DFF5 +0006C4r 1 DF .hibytes $DFF6 +0006C5r 1 DF .hibytes $DFF7 +0006C6r 1 DF .hibytes $DFF8 +0006C7r 1 DF .hibytes $DFF9 +0006C8r 1 DF .hibytes $DFFA +0006C9r 1 DF .hibytes $DFFB +0006CAr 1 DF .hibytes $DFFC +0006CBr 1 DF .hibytes $DFFD +0006CCr 1 DF .hibytes $DFFE +0006CDr 1 DF .hibytes $DFFF +0006CEr 1 E0 .hibytes $E000 +0006CFr 1 E0 .hibytes $E001 +0006D0r 1 E0 .hibytes $E002 +0006D1r 1 E0 .hibytes $E003 +0006D2r 1 E0 .hibytes $E004 +0006D3r 1 E0 .hibytes $E005 +0006D4r 1 E0 .hibytes $E006 +0006D5r 1 E0 .hibytes $E007 +0006D6r 1 E0 .hibytes $E008 +0006D7r 1 E0 .hibytes $E009 +0006D8r 1 E0 .hibytes $E00A +0006D9r 1 E0 .hibytes $E00B +0006DAr 1 E0 .hibytes $E00C +0006DBr 1 E0 .hibytes $E00D +0006DCr 1 E0 .hibytes $E00E +0006DDr 1 E0 .hibytes $E00F +0006DEr 1 EF .hibytes $EFE1 +0006DFr 1 EF .hibytes $EFE2 +0006E0r 1 EF .hibytes $EFE3 +0006E1r 1 EF .hibytes $EFE4 +0006E2r 1 EF .hibytes $EFE5 +0006E3r 1 EF .hibytes $EFE6 +0006E4r 1 EF .hibytes $EFE7 +0006E5r 1 EF .hibytes $EFE8 +0006E6r 1 EF .hibytes $EFE9 +0006E7r 1 EF .hibytes $EFEA +0006E8r 1 EF .hibytes $EFEB +0006E9r 1 EF .hibytes $EFEC +0006EAr 1 EF .hibytes $EFED +0006EBr 1 EF .hibytes $EFEE +0006ECr 1 EF .hibytes $EFEF +0006EDr 1 EF .hibytes $EFF0 +0006EEr 1 EF .hibytes $EFF1 +0006EFr 1 EF .hibytes $EFF2 +0006F0r 1 EF .hibytes $EFF3 +0006F1r 1 EF .hibytes $EFF4 +0006F2r 1 EF .hibytes $EFF5 +0006F3r 1 EF .hibytes $EFF6 +0006F4r 1 EF .hibytes $EFF7 +0006F5r 1 EF .hibytes $EFF8 +0006F6r 1 EF .hibytes $EFF9 +0006F7r 1 EF .hibytes $EFFA +0006F8r 1 EF .hibytes $EFFB +0006F9r 1 EF .hibytes $EFFC +0006FAr 1 EF .hibytes $EFFD +0006FBr 1 EF .hibytes $EFFE +0006FCr 1 EF .hibytes $EFFF +0006FDr 1 F0 .hibytes $F000 +0006FEr 1 F0 .hibytes $F001 +0006FFr 1 F0 .hibytes $F002 +000700r 1 F0 .hibytes $F003 +000701r 1 F0 .hibytes $F004 +000702r 1 F0 .hibytes $F005 +000703r 1 F0 .hibytes $F006 +000704r 1 F0 .hibytes $F007 +000705r 1 F0 .hibytes $F008 +000706r 1 F0 .hibytes $F009 +000707r 1 F0 .hibytes $F00A +000708r 1 F0 .hibytes $F00B +000709r 1 F0 .hibytes $F00C +00070Ar 1 F0 .hibytes $F00D +00070Br 1 F0 .hibytes $F00E +00070Cr 1 F0 .hibytes $F00F +00070Dr 1 FF .hibytes $FFE1 +00070Er 1 FF .hibytes $FFE2 +00070Fr 1 FF .hibytes $FFE3 +000710r 1 FF .hibytes $FFE4 +000711r 1 FF .hibytes $FFE5 +000712r 1 FF .hibytes $FFE6 +000713r 1 FF .hibytes $FFE7 +000714r 1 FF .hibytes $FFE8 +000715r 1 FF .hibytes $FFE9 +000716r 1 FF .hibytes $FFEA +000717r 1 FF .hibytes $FFEB +000718r 1 FF .hibytes $FFEC +000719r 1 FF .hibytes $FFED +00071Ar 1 FF .hibytes $FFEE +00071Br 1 FF .hibytes $FFEF +00071Cr 1 FF .hibytes $FFF0 +00071Dr 1 FF .hibytes $FFF1 +00071Er 1 FF .hibytes $FFF2 +00071Fr 1 FF .hibytes $FFF3 +000720r 1 FF .hibytes $FFF4 +000721r 1 FF .hibytes $FFF5 +000722r 1 FF .hibytes $FFF6 +000723r 1 FF .hibytes $FFF7 +000724r 1 FF .hibytes $FFF8 +000725r 1 FF .hibytes $FFF9 +000726r 1 FF .hibytes $FFFA +000727r 1 FF .hibytes $FFFB +000728r 1 FF .hibytes $FFFC +000729r 1 FF .hibytes $FFFD +00072Ar 1 FF .hibytes $FFFE +00072Br 1 FF .hibytes $FFFF +00072Cr 1 +00072Cr 1 ; 4-digit hex values +00072Cr 1 00 .hibytes $0000 +00072Dr 1 00 .hibytes $0001 +00072Er 1 00 .hibytes $0002 +00072Fr 1 00 .hibytes $0003 +000730r 1 00 .hibytes $0004 +000731r 1 00 .hibytes $0005 +000732r 1 00 .hibytes $0006 +000733r 1 00 .hibytes $0007 +000734r 1 00 .hibytes $0008 +000735r 1 00 .hibytes $0009 +000736r 1 00 .hibytes $000a +000737r 1 00 .hibytes $000b +000738r 1 00 .hibytes $000c +000739r 1 00 .hibytes $000d +00073Ar 1 00 .hibytes $000e +00073Br 1 00 .hibytes $000f +00073Cr 1 00 .hibytes $0010 +00073Dr 1 00 .hibytes $0011 +00073Er 1 00 .hibytes $0012 +00073Fr 1 00 .hibytes $0013 +000740r 1 00 .hibytes $0070 +000741r 1 00 .hibytes $0071 +000742r 1 00 .hibytes $0072 +000743r 1 00 .hibytes $0073 +000744r 1 00 .hibytes $0074 +000745r 1 00 .hibytes $0075 +000746r 1 00 .hibytes $0076 +000747r 1 00 .hibytes $0077 +000748r 1 00 .hibytes $0078 +000749r 1 00 .hibytes $0079 +00074Ar 1 00 .hibytes $007a +00074Br 1 00 .hibytes $007b +00074Cr 1 00 .hibytes $007c +00074Dr 1 00 .hibytes $007d +00074Er 1 00 .hibytes $007e +00074Fr 1 00 .hibytes $007f +000750r 1 00 .hibytes $0080 +000751r 1 00 .hibytes $0081 +000752r 1 00 .hibytes $0082 +000753r 1 00 .hibytes $0083 +000754r 1 00 .hibytes $0084 +000755r 1 00 .hibytes $0085 +000756r 1 00 .hibytes $0086 +000757r 1 00 .hibytes $00f0 +000758r 1 00 .hibytes $00f1 +000759r 1 00 .hibytes $00f2 +00075Ar 1 00 .hibytes $00f3 +00075Br 1 00 .hibytes $00f4 +00075Cr 1 00 .hibytes $00f5 +00075Dr 1 00 .hibytes $00f6 +00075Er 1 00 .hibytes $00f7 +00075Fr 1 00 .hibytes $00f8 +000760r 1 00 .hibytes $00f9 +000761r 1 00 .hibytes $00fa +000762r 1 00 .hibytes $00fb +000763r 1 00 .hibytes $00fc +000764r 1 00 .hibytes $00fd +000765r 1 00 .hibytes $00fe +000766r 1 00 .hibytes $00ff +000767r 1 01 .hibytes $0100 +000768r 1 01 .hibytes $0101 +000769r 1 01 .hibytes $0102 +00076Ar 1 01 .hibytes $0103 +00076Br 1 0F .hibytes $0fd2 +00076Cr 1 0F .hibytes $0fd3 +00076Dr 1 0F .hibytes $0fd4 +00076Er 1 0F .hibytes $0fd5 +00076Fr 1 0F .hibytes $0fd6 +000770r 1 0F .hibytes $0fd7 +000771r 1 0F .hibytes $0fd8 +000772r 1 0F .hibytes $0fd9 +000773r 1 0F .hibytes $0fda +000774r 1 0F .hibytes $0fdb +000775r 1 0F .hibytes $0fdc +000776r 1 0F .hibytes $0fdd +000777r 1 0F .hibytes $0fde +000778r 1 0F .hibytes $0fdf +000779r 1 0F .hibytes $0fe0 +00077Ar 1 0F .hibytes $0fe1 +00077Br 1 0F .hibytes $0fe2 +00077Cr 1 0F .hibytes $0fe3 +00077Dr 1 0F .hibytes $0fe4 +00077Er 1 0F .hibytes $0fe5 +00077Fr 1 0F .hibytes $0fe6 +000780r 1 0F .hibytes $0fe7 +000781r 1 0F .hibytes $0fe8 +000782r 1 0F .hibytes $0fe9 +000783r 1 0F .hibytes $0fea +000784r 1 0F .hibytes $0feb +000785r 1 0F .hibytes $0fec +000786r 1 0F .hibytes $0fed +000787r 1 0F .hibytes $0fee +000788r 1 0F .hibytes $0fef +000789r 1 0F .hibytes $0ff0 +00078Ar 1 0F .hibytes $0ff1 +00078Br 1 0F .hibytes $0ff2 +00078Cr 1 0F .hibytes $0ff3 +00078Dr 1 0F .hibytes $0ff4 +00078Er 1 0F .hibytes $0ff5 +00078Fr 1 0F .hibytes $0ff6 +000790r 1 0F .hibytes $0ff7 +000791r 1 0F .hibytes $0ff8 +000792r 1 0F .hibytes $0ff9 +000793r 1 0F .hibytes $0ffa +000794r 1 0F .hibytes $0ffb +000795r 1 0F .hibytes $0ffc +000796r 1 0F .hibytes $0ffd +000797r 1 0F .hibytes $0ffe +000798r 1 0F .hibytes $0fff +000799r 1 10 .hibytes $1000 +00079Ar 1 10 .hibytes $1001 +00079Br 1 10 .hibytes $1002 +00079Cr 1 10 .hibytes $1003 +00079Dr 1 10 .hibytes $1004 +00079Er 1 10 .hibytes $1005 +00079Fr 1 10 .hibytes $1006 +0007A0r 1 10 .hibytes $1007 +0007A1r 1 10 .hibytes $1008 +0007A2r 1 7F .hibytes $7ff0 +0007A3r 1 7F .hibytes $7ff1 +0007A4r 1 7F .hibytes $7ff2 +0007A5r 1 7F .hibytes $7ff3 +0007A6r 1 7F .hibytes $7ff4 +0007A7r 1 7F .hibytes $7ff5 +0007A8r 1 7F .hibytes $7ff6 +0007A9r 1 7F .hibytes $7ff7 +0007AAr 1 7F .hibytes $7ff8 +0007ABr 1 7F .hibytes $7ff9 +0007ACr 1 7F .hibytes $7ffa +0007ADr 1 7F .hibytes $7ffb +0007AEr 1 7F .hibytes $7ffc +0007AFr 1 7F .hibytes $7ffd +0007B0r 1 7F .hibytes $7ffe +0007B1r 1 7F .hibytes $7fff +0007B2r 1 80 .hibytes $8000 +0007B3r 1 80 .hibytes $8001 +0007B4r 1 80 .hibytes $8002 +0007B5r 1 80 .hibytes $8003 +0007B6r 1 80 .hibytes $8004 +0007B7r 1 80 .hibytes $8005 +0007B8r 1 80 .hibytes $8006 +0007B9r 1 80 .hibytes $8007 +0007BAr 1 80 .hibytes $8008 +0007BBr 1 80 .hibytes $8009 +0007BCr 1 80 .hibytes $800a +0007BDr 1 80 .hibytes $800b +0007BEr 1 9F .hibytes $9fe1 +0007BFr 1 9F .hibytes $9fe2 +0007C0r 1 9F .hibytes $9fe3 +0007C1r 1 9F .hibytes $9fe4 +0007C2r 1 9F .hibytes $9fe5 +0007C3r 1 9F .hibytes $9fe6 +0007C4r 1 9F .hibytes $9fe7 +0007C5r 1 9F .hibytes $9fe8 +0007C6r 1 9F .hibytes $9fe9 +0007C7r 1 9F .hibytes $9fea +0007C8r 1 9F .hibytes $9feb +0007C9r 1 9F .hibytes $9fec +0007CAr 1 9F .hibytes $9fed +0007CBr 1 9F .hibytes $9fee +0007CCr 1 9F .hibytes $9fef +0007CDr 1 9F .hibytes $9ff0 +0007CEr 1 9F .hibytes $9ff1 +0007CFr 1 9F .hibytes $9ff2 +0007D0r 1 9F .hibytes $9ff3 +0007D1r 1 9F .hibytes $9ff4 +0007D2r 1 9F .hibytes $9ff5 +0007D3r 1 9F .hibytes $9ff6 +0007D4r 1 9F .hibytes $9ff7 +0007D5r 1 9F .hibytes $9ff8 +0007D6r 1 9F .hibytes $9ff9 +0007D7r 1 9F .hibytes $9ffa +0007D8r 1 9F .hibytes $9ffb +0007D9r 1 9F .hibytes $9ffc +0007DAr 1 9F .hibytes $9ffd +0007DBr 1 9F .hibytes $9ffe +0007DCr 1 9F .hibytes $9fff +0007DDr 1 A0 .hibytes $a000 +0007DEr 1 A0 .hibytes $a001 +0007DFr 1 A0 .hibytes $a002 +0007E0r 1 A0 .hibytes $a003 +0007E1r 1 A0 .hibytes $a004 +0007E2r 1 A0 .hibytes $a005 +0007E3r 1 A0 .hibytes $a006 +0007E4r 1 A0 .hibytes $a007 +0007E5r 1 A0 .hibytes $a008 +0007E6r 1 A0 .hibytes $a009 +0007E7r 1 A0 .hibytes $a00a +0007E8r 1 A0 .hibytes $a00b +0007E9r 1 A0 .hibytes $a00c +0007EAr 1 A0 .hibytes $a00d +0007EBr 1 A0 .hibytes $a00e +0007ECr 1 A0 .hibytes $a00f +0007EDr 1 AF .hibytes $afe1 +0007EEr 1 AF .hibytes $afe2 +0007EFr 1 AF .hibytes $afe3 +0007F0r 1 AF .hibytes $afe4 +0007F1r 1 AF .hibytes $afe5 +0007F2r 1 AF .hibytes $afe6 +0007F3r 1 AF .hibytes $afe7 +0007F4r 1 AF .hibytes $afe8 +0007F5r 1 AF .hibytes $afe9 +0007F6r 1 AF .hibytes $afea +0007F7r 1 AF .hibytes $afeb +0007F8r 1 AF .hibytes $afec +0007F9r 1 AF .hibytes $afed +0007FAr 1 AF .hibytes $afee +0007FBr 1 AF .hibytes $afef +0007FCr 1 AF .hibytes $aff0 +0007FDr 1 AF .hibytes $aff1 +0007FEr 1 AF .hibytes $aff2 +0007FFr 1 AF .hibytes $aff3 +000800r 1 AF .hibytes $aff4 +000801r 1 AF .hibytes $aff5 +000802r 1 AF .hibytes $aff6 +000803r 1 AF .hibytes $aff7 +000804r 1 AF .hibytes $aff8 +000805r 1 AF .hibytes $aff9 +000806r 1 AF .hibytes $affa +000807r 1 AF .hibytes $affb +000808r 1 AF .hibytes $affc +000809r 1 AF .hibytes $affd +00080Ar 1 AF .hibytes $affe +00080Br 1 AF .hibytes $afff +00080Cr 1 B0 .hibytes $b000 +00080Dr 1 B0 .hibytes $b001 +00080Er 1 B0 .hibytes $b002 +00080Fr 1 B0 .hibytes $b003 +000810r 1 B0 .hibytes $b004 +000811r 1 B0 .hibytes $b005 +000812r 1 B0 .hibytes $b006 +000813r 1 B0 .hibytes $b007 +000814r 1 B0 .hibytes $b008 +000815r 1 B0 .hibytes $b009 +000816r 1 B0 .hibytes $b00a +000817r 1 B0 .hibytes $b00b +000818r 1 B0 .hibytes $b00c +000819r 1 B0 .hibytes $b00d +00081Ar 1 B0 .hibytes $b00e +00081Br 1 B0 .hibytes $b00f +00081Cr 1 BF .hibytes $bfe1 +00081Dr 1 BF .hibytes $bfe2 +00081Er 1 BF .hibytes $bfe3 +00081Fr 1 BF .hibytes $bfe4 +000820r 1 BF .hibytes $bfe5 +000821r 1 BF .hibytes $bfe6 +000822r 1 BF .hibytes $bfe7 +000823r 1 BF .hibytes $bfe8 +000824r 1 BF .hibytes $bfe9 +000825r 1 BF .hibytes $bfea +000826r 1 BF .hibytes $bfeb +000827r 1 BF .hibytes $bfec +000828r 1 BF .hibytes $bfed +000829r 1 BF .hibytes $bfee +00082Ar 1 BF .hibytes $bfef +00082Br 1 BF .hibytes $bff0 +00082Cr 1 BF .hibytes $bff1 +00082Dr 1 BF .hibytes $bff2 +00082Er 1 BF .hibytes $bff3 +00082Fr 1 BF .hibytes $bff4 +000830r 1 BF .hibytes $bff5 +000831r 1 BF .hibytes $bff6 +000832r 1 BF .hibytes $bff7 +000833r 1 BF .hibytes $bff8 +000834r 1 BF .hibytes $bff9 +000835r 1 BF .hibytes $bffa +000836r 1 BF .hibytes $bffb +000837r 1 BF .hibytes $bffc +000838r 1 BF .hibytes $bffd +000839r 1 BF .hibytes $bffe +00083Ar 1 BF .hibytes $bfff +00083Br 1 C0 .hibytes $c000 +00083Cr 1 C0 .hibytes $c001 +00083Dr 1 C0 .hibytes $c002 +00083Er 1 C0 .hibytes $c003 +00083Fr 1 C0 .hibytes $c004 +000840r 1 C0 .hibytes $c005 +000841r 1 C0 .hibytes $c006 +000842r 1 C0 .hibytes $c007 +000843r 1 C0 .hibytes $c008 +000844r 1 C0 .hibytes $c009 +000845r 1 C0 .hibytes $c00a +000846r 1 C0 .hibytes $c00b +000847r 1 C0 .hibytes $c00c +000848r 1 C0 .hibytes $c00d +000849r 1 C0 .hibytes $c00e +00084Ar 1 C0 .hibytes $c00f +00084Br 1 CF .hibytes $cfe1 +00084Cr 1 CF .hibytes $cfe2 +00084Dr 1 CF .hibytes $cfe3 +00084Er 1 CF .hibytes $cfe4 +00084Fr 1 CF .hibytes $cfe5 +000850r 1 CF .hibytes $cfe6 +000851r 1 CF .hibytes $cfe7 +000852r 1 CF .hibytes $cfe8 +000853r 1 CF .hibytes $cfe9 +000854r 1 CF .hibytes $cfea +000855r 1 CF .hibytes $cfeb +000856r 1 CF .hibytes $cfec +000857r 1 CF .hibytes $cfed +000858r 1 CF .hibytes $cfee +000859r 1 CF .hibytes $cfef +00085Ar 1 CF .hibytes $cff0 +00085Br 1 CF .hibytes $cff1 +00085Cr 1 CF .hibytes $cff2 +00085Dr 1 CF .hibytes $cff3 +00085Er 1 CF .hibytes $cff4 +00085Fr 1 CF .hibytes $cff5 +000860r 1 CF .hibytes $cff6 +000861r 1 CF .hibytes $cff7 +000862r 1 CF .hibytes $cff8 +000863r 1 CF .hibytes $cff9 +000864r 1 CF .hibytes $cffa +000865r 1 CF .hibytes $cffb +000866r 1 CF .hibytes $cffc +000867r 1 CF .hibytes $cffd +000868r 1 CF .hibytes $cffe +000869r 1 CF .hibytes $cfff +00086Ar 1 D0 .hibytes $d000 +00086Br 1 D0 .hibytes $d001 +00086Cr 1 D0 .hibytes $d002 +00086Dr 1 D0 .hibytes $d003 +00086Er 1 D0 .hibytes $d004 +00086Fr 1 D0 .hibytes $d005 +000870r 1 D0 .hibytes $d006 +000871r 1 D0 .hibytes $d007 +000872r 1 D0 .hibytes $d008 +000873r 1 D0 .hibytes $d009 +000874r 1 D0 .hibytes $d00a +000875r 1 D0 .hibytes $d00b +000876r 1 D0 .hibytes $d00c +000877r 1 D0 .hibytes $d00d +000878r 1 D0 .hibytes $d00e +000879r 1 D0 .hibytes $d00f +00087Ar 1 DF .hibytes $dfe1 +00087Br 1 DF .hibytes $dfe2 +00087Cr 1 DF .hibytes $dfe3 +00087Dr 1 DF .hibytes $dfe4 +00087Er 1 DF .hibytes $dfe5 +00087Fr 1 DF .hibytes $dfe6 +000880r 1 DF .hibytes $dfe7 +000881r 1 DF .hibytes $dfe8 +000882r 1 DF .hibytes $dfe9 +000883r 1 DF .hibytes $dfea +000884r 1 DF .hibytes $dfeb +000885r 1 DF .hibytes $dfec +000886r 1 DF .hibytes $dfed +000887r 1 DF .hibytes $dfee +000888r 1 DF .hibytes $dfef +000889r 1 DF .hibytes $dff0 +00088Ar 1 DF .hibytes $dff1 +00088Br 1 DF .hibytes $dff2 +00088Cr 1 DF .hibytes $dff3 +00088Dr 1 DF .hibytes $dff4 +00088Er 1 DF .hibytes $dff5 +00088Fr 1 DF .hibytes $dff6 +000890r 1 DF .hibytes $dff7 +000891r 1 DF .hibytes $dff8 +000892r 1 DF .hibytes $dff9 +000893r 1 DF .hibytes $dffa +000894r 1 DF .hibytes $dffb +000895r 1 DF .hibytes $dffc +000896r 1 DF .hibytes $dffd +000897r 1 DF .hibytes $dffe +000898r 1 DF .hibytes $dfff +000899r 1 E0 .hibytes $e000 +00089Ar 1 E0 .hibytes $e001 +00089Br 1 E0 .hibytes $e002 +00089Cr 1 E0 .hibytes $e003 +00089Dr 1 E0 .hibytes $e004 +00089Er 1 E0 .hibytes $e005 +00089Fr 1 E0 .hibytes $e006 +0008A0r 1 E0 .hibytes $e007 +0008A1r 1 E0 .hibytes $e008 +0008A2r 1 E0 .hibytes $e009 +0008A3r 1 E0 .hibytes $e00a +0008A4r 1 E0 .hibytes $e00b +0008A5r 1 E0 .hibytes $e00c +0008A6r 1 E0 .hibytes $e00d +0008A7r 1 E0 .hibytes $e00e +0008A8r 1 E0 .hibytes $e00f +0008A9r 1 EF .hibytes $efe1 +0008AAr 1 EF .hibytes $efe2 +0008ABr 1 EF .hibytes $efe3 +0008ACr 1 EF .hibytes $efe4 +0008ADr 1 EF .hibytes $efe5 +0008AEr 1 EF .hibytes $efe6 +0008AFr 1 EF .hibytes $efe7 +0008B0r 1 EF .hibytes $efe8 +0008B1r 1 EF .hibytes $efe9 +0008B2r 1 EF .hibytes $efea +0008B3r 1 EF .hibytes $efeb +0008B4r 1 EF .hibytes $efec +0008B5r 1 EF .hibytes $efed +0008B6r 1 EF .hibytes $efee +0008B7r 1 EF .hibytes $efef +0008B8r 1 EF .hibytes $eff0 +0008B9r 1 EF .hibytes $eff1 +0008BAr 1 EF .hibytes $eff2 +0008BBr 1 EF .hibytes $eff3 +0008BCr 1 EF .hibytes $eff4 +0008BDr 1 EF .hibytes $eff5 +0008BEr 1 EF .hibytes $eff6 +0008BFr 1 EF .hibytes $eff7 +0008C0r 1 EF .hibytes $eff8 +0008C1r 1 EF .hibytes $eff9 +0008C2r 1 EF .hibytes $effa +0008C3r 1 EF .hibytes $effb +0008C4r 1 EF .hibytes $effc +0008C5r 1 EF .hibytes $effd +0008C6r 1 EF .hibytes $effe +0008C7r 1 EF .hibytes $efff +0008C8r 1 F0 .hibytes $f000 +0008C9r 1 F0 .hibytes $f001 +0008CAr 1 F0 .hibytes $f002 +0008CBr 1 F0 .hibytes $f003 +0008CCr 1 F0 .hibytes $f004 +0008CDr 1 F0 .hibytes $f005 +0008CEr 1 F0 .hibytes $f006 +0008CFr 1 F0 .hibytes $f007 +0008D0r 1 F0 .hibytes $f008 +0008D1r 1 F0 .hibytes $f009 +0008D2r 1 F0 .hibytes $f00a +0008D3r 1 F0 .hibytes $f00b +0008D4r 1 F0 .hibytes $f00c +0008D5r 1 F0 .hibytes $f00d +0008D6r 1 F0 .hibytes $f00e +0008D7r 1 F0 .hibytes $f00f +0008D8r 1 FF .hibytes $ffe1 +0008D9r 1 FF .hibytes $ffe2 +0008DAr 1 FF .hibytes $ffe3 +0008DBr 1 FF .hibytes $ffe4 +0008DCr 1 FF .hibytes $ffe5 +0008DDr 1 FF .hibytes $ffe6 +0008DEr 1 FF .hibytes $ffe7 +0008DFr 1 FF .hibytes $ffe8 +0008E0r 1 FF .hibytes $ffe9 +0008E1r 1 FF .hibytes $ffea +0008E2r 1 FF .hibytes $ffeb +0008E3r 1 FF .hibytes $ffec +0008E4r 1 FF .hibytes $ffed +0008E5r 1 FF .hibytes $ffee +0008E6r 1 FF .hibytes $ffef +0008E7r 1 FF .hibytes $fff0 +0008E8r 1 FF .hibytes $fff1 +0008E9r 1 FF .hibytes $fff2 +0008EAr 1 FF .hibytes $fff3 +0008EBr 1 FF .hibytes $fff4 +0008ECr 1 FF .hibytes $fff5 +0008EDr 1 FF .hibytes $fff6 +0008EEr 1 FF .hibytes $fff7 +0008EFr 1 FF .hibytes $fff8 +0008F0r 1 FF .hibytes $fff9 +0008F1r 1 FF .hibytes $fffa +0008F2r 1 FF .hibytes $fffb +0008F3r 1 FF .hibytes $fffc +0008F4r 1 FF .hibytes $fffd +0008F5r 1 FF .hibytes $fffe +0008F6r 1 FF .hibytes $ffff +0008F7r 1 +0008F7r 1 ; 4-digit hex values, uppercase +0008F7r 1 00 .hibytes $0000 +0008F8r 1 00 .hibytes $0001 +0008F9r 1 00 .hibytes $0002 +0008FAr 1 00 .hibytes $0003 +0008FBr 1 00 .hibytes $0004 +0008FCr 1 00 .hibytes $0005 +0008FDr 1 00 .hibytes $0006 +0008FEr 1 00 .hibytes $0007 +0008FFr 1 00 .hibytes $0008 +000900r 1 00 .hibytes $0009 +000901r 1 00 .hibytes $000A +000902r 1 00 .hibytes $000B +000903r 1 00 .hibytes $000C +000904r 1 00 .hibytes $000D +000905r 1 00 .hibytes $000E +000906r 1 00 .hibytes $000F +000907r 1 00 .hibytes $0010 +000908r 1 00 .hibytes $0011 +000909r 1 00 .hibytes $0012 +00090Ar 1 00 .hibytes $0013 +00090Br 1 00 .hibytes $0070 +00090Cr 1 00 .hibytes $0071 +00090Dr 1 00 .hibytes $0072 +00090Er 1 00 .hibytes $0073 +00090Fr 1 00 .hibytes $0074 +000910r 1 00 .hibytes $0075 +000911r 1 00 .hibytes $0076 +000912r 1 00 .hibytes $0077 +000913r 1 00 .hibytes $0078 +000914r 1 00 .hibytes $0079 +000915r 1 00 .hibytes $007A +000916r 1 00 .hibytes $007B +000917r 1 00 .hibytes $007C +000918r 1 00 .hibytes $007D +000919r 1 00 .hibytes $007E +00091Ar 1 00 .hibytes $007F +00091Br 1 00 .hibytes $0080 +00091Cr 1 00 .hibytes $0081 +00091Dr 1 00 .hibytes $0082 +00091Er 1 00 .hibytes $0083 +00091Fr 1 00 .hibytes $0084 +000920r 1 00 .hibytes $0085 +000921r 1 00 .hibytes $0086 +000922r 1 00 .hibytes $00F0 +000923r 1 00 .hibytes $00F1 +000924r 1 00 .hibytes $00F2 +000925r 1 00 .hibytes $00F3 +000926r 1 00 .hibytes $00F4 +000927r 1 00 .hibytes $00F5 +000928r 1 00 .hibytes $00F6 +000929r 1 00 .hibytes $00F7 +00092Ar 1 00 .hibytes $00F8 +00092Br 1 00 .hibytes $00F9 +00092Cr 1 00 .hibytes $00FA +00092Dr 1 00 .hibytes $00FB +00092Er 1 00 .hibytes $00FC +00092Fr 1 00 .hibytes $00FD +000930r 1 00 .hibytes $00FE +000931r 1 00 .hibytes $00FF +000932r 1 01 .hibytes $0100 +000933r 1 01 .hibytes $0101 +000934r 1 01 .hibytes $0102 +000935r 1 01 .hibytes $0103 +000936r 1 0F .hibytes $0FD2 +000937r 1 0F .hibytes $0FD3 +000938r 1 0F .hibytes $0FD4 +000939r 1 0F .hibytes $0FD5 +00093Ar 1 0F .hibytes $0FD6 +00093Br 1 0F .hibytes $0FD7 +00093Cr 1 0F .hibytes $0FD8 +00093Dr 1 0F .hibytes $0FD9 +00093Er 1 0F .hibytes $0FDA +00093Fr 1 0F .hibytes $0FDB +000940r 1 0F .hibytes $0FDC +000941r 1 0F .hibytes $0FDD +000942r 1 0F .hibytes $0FDE +000943r 1 0F .hibytes $0FDF +000944r 1 0F .hibytes $0FE0 +000945r 1 0F .hibytes $0FE1 +000946r 1 0F .hibytes $0FE2 +000947r 1 0F .hibytes $0FE3 +000948r 1 0F .hibytes $0FE4 +000949r 1 0F .hibytes $0FE5 +00094Ar 1 0F .hibytes $0FE6 +00094Br 1 0F .hibytes $0FE7 +00094Cr 1 0F .hibytes $0FE8 +00094Dr 1 0F .hibytes $0FE9 +00094Er 1 0F .hibytes $0FEA +00094Fr 1 0F .hibytes $0FEB +000950r 1 0F .hibytes $0FEC +000951r 1 0F .hibytes $0FED +000952r 1 0F .hibytes $0FEE +000953r 1 0F .hibytes $0FEF +000954r 1 0F .hibytes $0FF0 +000955r 1 0F .hibytes $0FF1 +000956r 1 0F .hibytes $0FF2 +000957r 1 0F .hibytes $0FF3 +000958r 1 0F .hibytes $0FF4 +000959r 1 0F .hibytes $0FF5 +00095Ar 1 0F .hibytes $0FF6 +00095Br 1 0F .hibytes $0FF7 +00095Cr 1 0F .hibytes $0FF8 +00095Dr 1 0F .hibytes $0FF9 +00095Er 1 0F .hibytes $0FFA +00095Fr 1 0F .hibytes $0FFB +000960r 1 0F .hibytes $0FFC +000961r 1 0F .hibytes $0FFD +000962r 1 0F .hibytes $0FFE +000963r 1 0F .hibytes $0FFF +000964r 1 10 .hibytes $1000 +000965r 1 10 .hibytes $1001 +000966r 1 10 .hibytes $1002 +000967r 1 10 .hibytes $1003 +000968r 1 10 .hibytes $1004 +000969r 1 10 .hibytes $1005 +00096Ar 1 10 .hibytes $1006 +00096Br 1 10 .hibytes $1007 +00096Cr 1 10 .hibytes $1008 +00096Dr 1 7F .hibytes $7FF0 +00096Er 1 7F .hibytes $7FF1 +00096Fr 1 7F .hibytes $7FF2 +000970r 1 7F .hibytes $7FF3 +000971r 1 7F .hibytes $7FF4 +000972r 1 7F .hibytes $7FF5 +000973r 1 7F .hibytes $7FF6 +000974r 1 7F .hibytes $7FF7 +000975r 1 7F .hibytes $7FF8 +000976r 1 7F .hibytes $7FF9 +000977r 1 7F .hibytes $7FFA +000978r 1 7F .hibytes $7FFB +000979r 1 7F .hibytes $7FFC +00097Ar 1 7F .hibytes $7FFD +00097Br 1 7F .hibytes $7FFE +00097Cr 1 7F .hibytes $7FFF +00097Dr 1 80 .hibytes $8000 +00097Er 1 80 .hibytes $8001 +00097Fr 1 80 .hibytes $8002 +000980r 1 80 .hibytes $8003 +000981r 1 80 .hibytes $8004 +000982r 1 80 .hibytes $8005 +000983r 1 80 .hibytes $8006 +000984r 1 80 .hibytes $8007 +000985r 1 80 .hibytes $8008 +000986r 1 80 .hibytes $8009 +000987r 1 80 .hibytes $800A +000988r 1 80 .hibytes $800B +000989r 1 9F .hibytes $9FE1 +00098Ar 1 9F .hibytes $9FE2 +00098Br 1 9F .hibytes $9FE3 +00098Cr 1 9F .hibytes $9FE4 +00098Dr 1 9F .hibytes $9FE5 +00098Er 1 9F .hibytes $9FE6 +00098Fr 1 9F .hibytes $9FE7 +000990r 1 9F .hibytes $9FE8 +000991r 1 9F .hibytes $9FE9 +000992r 1 9F .hibytes $9FEA +000993r 1 9F .hibytes $9FEB +000994r 1 9F .hibytes $9FEC +000995r 1 9F .hibytes $9FED +000996r 1 9F .hibytes $9FEE +000997r 1 9F .hibytes $9FEF +000998r 1 9F .hibytes $9FF0 +000999r 1 9F .hibytes $9FF1 +00099Ar 1 9F .hibytes $9FF2 +00099Br 1 9F .hibytes $9FF3 +00099Cr 1 9F .hibytes $9FF4 +00099Dr 1 9F .hibytes $9FF5 +00099Er 1 9F .hibytes $9FF6 +00099Fr 1 9F .hibytes $9FF7 +0009A0r 1 9F .hibytes $9FF8 +0009A1r 1 9F .hibytes $9FF9 +0009A2r 1 9F .hibytes $9FFA +0009A3r 1 9F .hibytes $9FFB +0009A4r 1 9F .hibytes $9FFC +0009A5r 1 9F .hibytes $9FFD +0009A6r 1 9F .hibytes $9FFE +0009A7r 1 9F .hibytes $9FFF +0009A8r 1 A0 .hibytes $A000 +0009A9r 1 A0 .hibytes $A001 +0009AAr 1 A0 .hibytes $A002 +0009ABr 1 A0 .hibytes $A003 +0009ACr 1 A0 .hibytes $A004 +0009ADr 1 A0 .hibytes $A005 +0009AEr 1 A0 .hibytes $A006 +0009AFr 1 A0 .hibytes $A007 +0009B0r 1 A0 .hibytes $A008 +0009B1r 1 A0 .hibytes $A009 +0009B2r 1 A0 .hibytes $A00A +0009B3r 1 A0 .hibytes $A00B +0009B4r 1 A0 .hibytes $A00C +0009B5r 1 A0 .hibytes $A00D +0009B6r 1 A0 .hibytes $A00E +0009B7r 1 A0 .hibytes $A00F +0009B8r 1 AF .hibytes $AFE1 +0009B9r 1 AF .hibytes $AFE2 +0009BAr 1 AF .hibytes $AFE3 +0009BBr 1 AF .hibytes $AFE4 +0009BCr 1 AF .hibytes $AFE5 +0009BDr 1 AF .hibytes $AFE6 +0009BEr 1 AF .hibytes $AFE7 +0009BFr 1 AF .hibytes $AFE8 +0009C0r 1 AF .hibytes $AFE9 +0009C1r 1 AF .hibytes $AFEA +0009C2r 1 AF .hibytes $AFEB +0009C3r 1 AF .hibytes $AFEC +0009C4r 1 AF .hibytes $AFED +0009C5r 1 AF .hibytes $AFEE +0009C6r 1 AF .hibytes $AFEF +0009C7r 1 AF .hibytes $AFF0 +0009C8r 1 AF .hibytes $AFF1 +0009C9r 1 AF .hibytes $AFF2 +0009CAr 1 AF .hibytes $AFF3 +0009CBr 1 AF .hibytes $AFF4 +0009CCr 1 AF .hibytes $AFF5 +0009CDr 1 AF .hibytes $AFF6 +0009CEr 1 AF .hibytes $AFF7 +0009CFr 1 AF .hibytes $AFF8 +0009D0r 1 AF .hibytes $AFF9 +0009D1r 1 AF .hibytes $AFFA +0009D2r 1 AF .hibytes $AFFB +0009D3r 1 AF .hibytes $AFFC +0009D4r 1 AF .hibytes $AFFD +0009D5r 1 AF .hibytes $AFFE +0009D6r 1 AF .hibytes $AFFF +0009D7r 1 B0 .hibytes $B000 +0009D8r 1 B0 .hibytes $B001 +0009D9r 1 B0 .hibytes $B002 +0009DAr 1 B0 .hibytes $B003 +0009DBr 1 B0 .hibytes $B004 +0009DCr 1 B0 .hibytes $B005 +0009DDr 1 B0 .hibytes $B006 +0009DEr 1 B0 .hibytes $B007 +0009DFr 1 B0 .hibytes $B008 +0009E0r 1 B0 .hibytes $B009 +0009E1r 1 B0 .hibytes $B00A +0009E2r 1 B0 .hibytes $B00B +0009E3r 1 B0 .hibytes $B00C +0009E4r 1 B0 .hibytes $B00D +0009E5r 1 B0 .hibytes $B00E +0009E6r 1 B0 .hibytes $B00F +0009E7r 1 BF .hibytes $BFE1 +0009E8r 1 BF .hibytes $BFE2 +0009E9r 1 BF .hibytes $BFE3 +0009EAr 1 BF .hibytes $BFE4 +0009EBr 1 BF .hibytes $BFE5 +0009ECr 1 BF .hibytes $BFE6 +0009EDr 1 BF .hibytes $BFE7 +0009EEr 1 BF .hibytes $BFE8 +0009EFr 1 BF .hibytes $BFE9 +0009F0r 1 BF .hibytes $BFEA +0009F1r 1 BF .hibytes $BFEB +0009F2r 1 BF .hibytes $BFEC +0009F3r 1 BF .hibytes $BFED +0009F4r 1 BF .hibytes $BFEE +0009F5r 1 BF .hibytes $BFEF +0009F6r 1 BF .hibytes $BFF0 +0009F7r 1 BF .hibytes $BFF1 +0009F8r 1 BF .hibytes $BFF2 +0009F9r 1 BF .hibytes $BFF3 +0009FAr 1 BF .hibytes $BFF4 +0009FBr 1 BF .hibytes $BFF5 +0009FCr 1 BF .hibytes $BFF6 +0009FDr 1 BF .hibytes $BFF7 +0009FEr 1 BF .hibytes $BFF8 +0009FFr 1 BF .hibytes $BFF9 +000A00r 1 BF .hibytes $BFFA +000A01r 1 BF .hibytes $BFFB +000A02r 1 BF .hibytes $BFFC +000A03r 1 BF .hibytes $BFFD +000A04r 1 BF .hibytes $BFFE +000A05r 1 BF .hibytes $BFFF +000A06r 1 C0 .hibytes $C000 +000A07r 1 C0 .hibytes $C001 +000A08r 1 C0 .hibytes $C002 +000A09r 1 C0 .hibytes $C003 +000A0Ar 1 C0 .hibytes $C004 +000A0Br 1 C0 .hibytes $C005 +000A0Cr 1 C0 .hibytes $C006 +000A0Dr 1 C0 .hibytes $C007 +000A0Er 1 C0 .hibytes $C008 +000A0Fr 1 C0 .hibytes $C009 +000A10r 1 C0 .hibytes $C00A +000A11r 1 C0 .hibytes $C00B +000A12r 1 C0 .hibytes $C00C +000A13r 1 C0 .hibytes $C00D +000A14r 1 C0 .hibytes $C00E +000A15r 1 C0 .hibytes $C00F +000A16r 1 CF .hibytes $CFE1 +000A17r 1 CF .hibytes $CFE2 +000A18r 1 CF .hibytes $CFE3 +000A19r 1 CF .hibytes $CFE4 +000A1Ar 1 CF .hibytes $CFE5 +000A1Br 1 CF .hibytes $CFE6 +000A1Cr 1 CF .hibytes $CFE7 +000A1Dr 1 CF .hibytes $CFE8 +000A1Er 1 CF .hibytes $CFE9 +000A1Fr 1 CF .hibytes $CFEA +000A20r 1 CF .hibytes $CFEB +000A21r 1 CF .hibytes $CFEC +000A22r 1 CF .hibytes $CFED +000A23r 1 CF .hibytes $CFEE +000A24r 1 CF .hibytes $CFEF +000A25r 1 CF .hibytes $CFF0 +000A26r 1 CF .hibytes $CFF1 +000A27r 1 CF .hibytes $CFF2 +000A28r 1 CF .hibytes $CFF3 +000A29r 1 CF .hibytes $CFF4 +000A2Ar 1 CF .hibytes $CFF5 +000A2Br 1 CF .hibytes $CFF6 +000A2Cr 1 CF .hibytes $CFF7 +000A2Dr 1 CF .hibytes $CFF8 +000A2Er 1 CF .hibytes $CFF9 +000A2Fr 1 CF .hibytes $CFFA +000A30r 1 CF .hibytes $CFFB +000A31r 1 CF .hibytes $CFFC +000A32r 1 CF .hibytes $CFFD +000A33r 1 CF .hibytes $CFFE +000A34r 1 CF .hibytes $CFFF +000A35r 1 D0 .hibytes $D000 +000A36r 1 D0 .hibytes $D001 +000A37r 1 D0 .hibytes $D002 +000A38r 1 D0 .hibytes $D003 +000A39r 1 D0 .hibytes $D004 +000A3Ar 1 D0 .hibytes $D005 +000A3Br 1 D0 .hibytes $D006 +000A3Cr 1 D0 .hibytes $D007 +000A3Dr 1 D0 .hibytes $D008 +000A3Er 1 D0 .hibytes $D009 +000A3Fr 1 D0 .hibytes $D00A +000A40r 1 D0 .hibytes $D00B +000A41r 1 D0 .hibytes $D00C +000A42r 1 D0 .hibytes $D00D +000A43r 1 D0 .hibytes $D00E +000A44r 1 D0 .hibytes $D00F +000A45r 1 DF .hibytes $DFE1 +000A46r 1 DF .hibytes $DFE2 +000A47r 1 DF .hibytes $DFE3 +000A48r 1 DF .hibytes $DFE4 +000A49r 1 DF .hibytes $DFE5 +000A4Ar 1 DF .hibytes $DFE6 +000A4Br 1 DF .hibytes $DFE7 +000A4Cr 1 DF .hibytes $DFE8 +000A4Dr 1 DF .hibytes $DFE9 +000A4Er 1 DF .hibytes $DFEA +000A4Fr 1 DF .hibytes $DFEB +000A50r 1 DF .hibytes $DFEC +000A51r 1 DF .hibytes $DFED +000A52r 1 DF .hibytes $DFEE +000A53r 1 DF .hibytes $DFEF +000A54r 1 DF .hibytes $DFF0 +000A55r 1 DF .hibytes $DFF1 +000A56r 1 DF .hibytes $DFF2 +000A57r 1 DF .hibytes $DFF3 +000A58r 1 DF .hibytes $DFF4 +000A59r 1 DF .hibytes $DFF5 +000A5Ar 1 DF .hibytes $DFF6 +000A5Br 1 DF .hibytes $DFF7 +000A5Cr 1 DF .hibytes $DFF8 +000A5Dr 1 DF .hibytes $DFF9 +000A5Er 1 DF .hibytes $DFFA +000A5Fr 1 DF .hibytes $DFFB +000A60r 1 DF .hibytes $DFFC +000A61r 1 DF .hibytes $DFFD +000A62r 1 DF .hibytes $DFFE +000A63r 1 DF .hibytes $DFFF +000A64r 1 E0 .hibytes $E000 +000A65r 1 E0 .hibytes $E001 +000A66r 1 E0 .hibytes $E002 +000A67r 1 E0 .hibytes $E003 +000A68r 1 E0 .hibytes $E004 +000A69r 1 E0 .hibytes $E005 +000A6Ar 1 E0 .hibytes $E006 +000A6Br 1 E0 .hibytes $E007 +000A6Cr 1 E0 .hibytes $E008 +000A6Dr 1 E0 .hibytes $E009 +000A6Er 1 E0 .hibytes $E00A +000A6Fr 1 E0 .hibytes $E00B +000A70r 1 E0 .hibytes $E00C +000A71r 1 E0 .hibytes $E00D +000A72r 1 E0 .hibytes $E00E +000A73r 1 E0 .hibytes $E00F +000A74r 1 EF .hibytes $EFE1 +000A75r 1 EF .hibytes $EFE2 +000A76r 1 EF .hibytes $EFE3 +000A77r 1 EF .hibytes $EFE4 +000A78r 1 EF .hibytes $EFE5 +000A79r 1 EF .hibytes $EFE6 +000A7Ar 1 EF .hibytes $EFE7 +000A7Br 1 EF .hibytes $EFE8 +000A7Cr 1 EF .hibytes $EFE9 +000A7Dr 1 EF .hibytes $EFEA +000A7Er 1 EF .hibytes $EFEB +000A7Fr 1 EF .hibytes $EFEC +000A80r 1 EF .hibytes $EFED +000A81r 1 EF .hibytes $EFEE +000A82r 1 EF .hibytes $EFEF +000A83r 1 EF .hibytes $EFF0 +000A84r 1 EF .hibytes $EFF1 +000A85r 1 EF .hibytes $EFF2 +000A86r 1 EF .hibytes $EFF3 +000A87r 1 EF .hibytes $EFF4 +000A88r 1 EF .hibytes $EFF5 +000A89r 1 EF .hibytes $EFF6 +000A8Ar 1 EF .hibytes $EFF7 +000A8Br 1 EF .hibytes $EFF8 +000A8Cr 1 EF .hibytes $EFF9 +000A8Dr 1 EF .hibytes $EFFA +000A8Er 1 EF .hibytes $EFFB +000A8Fr 1 EF .hibytes $EFFC +000A90r 1 EF .hibytes $EFFD +000A91r 1 EF .hibytes $EFFE +000A92r 1 EF .hibytes $EFFF +000A93r 1 F0 .hibytes $F000 +000A94r 1 F0 .hibytes $F001 +000A95r 1 F0 .hibytes $F002 +000A96r 1 F0 .hibytes $F003 +000A97r 1 F0 .hibytes $F004 +000A98r 1 F0 .hibytes $F005 +000A99r 1 F0 .hibytes $F006 +000A9Ar 1 F0 .hibytes $F007 +000A9Br 1 F0 .hibytes $F008 +000A9Cr 1 F0 .hibytes $F009 +000A9Dr 1 F0 .hibytes $F00A +000A9Er 1 F0 .hibytes $F00B +000A9Fr 1 F0 .hibytes $F00C +000AA0r 1 F0 .hibytes $F00D +000AA1r 1 F0 .hibytes $F00E +000AA2r 1 F0 .hibytes $F00F +000AA3r 1 FF .hibytes $FFE1 +000AA4r 1 FF .hibytes $FFE2 +000AA5r 1 FF .hibytes $FFE3 +000AA6r 1 FF .hibytes $FFE4 +000AA7r 1 FF .hibytes $FFE5 +000AA8r 1 FF .hibytes $FFE6 +000AA9r 1 FF .hibytes $FFE7 +000AAAr 1 FF .hibytes $FFE8 +000AABr 1 FF .hibytes $FFE9 +000AACr 1 FF .hibytes $FFEA +000AADr 1 FF .hibytes $FFEB +000AAEr 1 FF .hibytes $FFEC +000AAFr 1 FF .hibytes $FFED +000AB0r 1 FF .hibytes $FFEE +000AB1r 1 FF .hibytes $FFEF +000AB2r 1 FF .hibytes $FFF0 +000AB3r 1 FF .hibytes $FFF1 +000AB4r 1 FF .hibytes $FFF2 +000AB5r 1 FF .hibytes $FFF3 +000AB6r 1 FF .hibytes $FFF4 +000AB7r 1 FF .hibytes $FFF5 +000AB8r 1 FF .hibytes $FFF6 +000AB9r 1 FF .hibytes $FFF7 +000ABAr 1 FF .hibytes $FFF8 +000ABBr 1 FF .hibytes $FFF9 +000ABCr 1 FF .hibytes $FFFA +000ABDr 1 FF .hibytes $FFFB +000ABEr 1 FF .hibytes $FFFC +000ABFr 1 FF .hibytes $FFFD +000AC0r 1 FF .hibytes $FFFE +000AC1r 1 FF .hibytes $FFFF +000AC2r 1 +000AC2r 1 ; alternative hex values +000AC2r 1 00 .hibytes 0h +000AC3r 1 00 .hibytes 1h +000AC4r 1 00 .hibytes 2h +000AC5r 1 00 .hibytes 3h +000AC6r 1 00 .hibytes 4h +000AC7r 1 00 .hibytes 5h +000AC8r 1 00 .hibytes 6h +000AC9r 1 00 .hibytes 7h +000ACAr 1 00 .hibytes 8h +000ACBr 1 00 .hibytes 9h +000ACCr 1 00 .hibytes 0ah +000ACDr 1 00 .hibytes 0bh +000ACEr 1 00 .hibytes 0ch +000ACFr 1 00 .hibytes 0dh +000AD0r 1 00 .hibytes 0eh +000AD1r 1 00 .hibytes 0fh +000AD2r 1 00 .hibytes 10h +000AD3r 1 00 .hibytes 11h +000AD4r 1 00 .hibytes 12h +000AD5r 1 00 .hibytes 13h +000AD6r 1 00 .hibytes 70h +000AD7r 1 00 .hibytes 71h +000AD8r 1 00 .hibytes 72h +000AD9r 1 00 .hibytes 73h +000ADAr 1 00 .hibytes 74h +000ADBr 1 00 .hibytes 75h +000ADCr 1 00 .hibytes 76h +000ADDr 1 00 .hibytes 77h +000ADEr 1 00 .hibytes 78h +000ADFr 1 00 .hibytes 79h +000AE0r 1 00 .hibytes 7ah +000AE1r 1 00 .hibytes 7bh +000AE2r 1 00 .hibytes 7ch +000AE3r 1 00 .hibytes 7dh +000AE4r 1 00 .hibytes 7eh +000AE5r 1 00 .hibytes 7fh +000AE6r 1 00 .hibytes 80h +000AE7r 1 00 .hibytes 81h +000AE8r 1 00 .hibytes 82h +000AE9r 1 00 .hibytes 83h +000AEAr 1 00 .hibytes 84h +000AEBr 1 00 .hibytes 85h +000AECr 1 00 .hibytes 86h +000AEDr 1 00 .hibytes 0f0h +000AEEr 1 00 .hibytes 0f1h +000AEFr 1 00 .hibytes 0f2h +000AF0r 1 00 .hibytes 0f3h +000AF1r 1 00 .hibytes 0f4h +000AF2r 1 00 .hibytes 0f5h +000AF3r 1 00 .hibytes 0f6h +000AF4r 1 00 .hibytes 0f7h +000AF5r 1 00 .hibytes 0f8h +000AF6r 1 00 .hibytes 0f9h +000AF7r 1 00 .hibytes 0fah +000AF8r 1 00 .hibytes 0fbh +000AF9r 1 00 .hibytes 0fch +000AFAr 1 00 .hibytes 0fdh +000AFBr 1 00 .hibytes 0feh +000AFCr 1 00 .hibytes 0ffh +000AFDr 1 01 .hibytes 100h +000AFEr 1 01 .hibytes 101h +000AFFr 1 01 .hibytes 102h +000B00r 1 01 .hibytes 103h +000B01r 1 0F .hibytes 0fd2h +000B02r 1 0F .hibytes 0fd3h +000B03r 1 0F .hibytes 0fd4h +000B04r 1 0F .hibytes 0fd5h +000B05r 1 0F .hibytes 0fd6h +000B06r 1 0F .hibytes 0fd7h +000B07r 1 0F .hibytes 0fd8h +000B08r 1 0F .hibytes 0fd9h +000B09r 1 0F .hibytes 0fdah +000B0Ar 1 0F .hibytes 0fdbh +000B0Br 1 0F .hibytes 0fdch +000B0Cr 1 0F .hibytes 0fddh +000B0Dr 1 0F .hibytes 0fdeh +000B0Er 1 0F .hibytes 0fdfh +000B0Fr 1 0F .hibytes 0fe0h +000B10r 1 0F .hibytes 0fe1h +000B11r 1 0F .hibytes 0fe2h +000B12r 1 0F .hibytes 0fe3h +000B13r 1 0F .hibytes 0fe4h +000B14r 1 0F .hibytes 0fe5h +000B15r 1 0F .hibytes 0fe6h +000B16r 1 0F .hibytes 0fe7h +000B17r 1 0F .hibytes 0fe8h +000B18r 1 0F .hibytes 0fe9h +000B19r 1 0F .hibytes 0feah +000B1Ar 1 0F .hibytes 0febh +000B1Br 1 0F .hibytes 0fech +000B1Cr 1 0F .hibytes 0fedh +000B1Dr 1 0F .hibytes 0feeh +000B1Er 1 0F .hibytes 0fefh +000B1Fr 1 0F .hibytes 0ff0h +000B20r 1 0F .hibytes 0ff1h +000B21r 1 0F .hibytes 0ff2h +000B22r 1 0F .hibytes 0ff3h +000B23r 1 0F .hibytes 0ff4h +000B24r 1 0F .hibytes 0ff5h +000B25r 1 0F .hibytes 0ff6h +000B26r 1 0F .hibytes 0ff7h +000B27r 1 0F .hibytes 0ff8h +000B28r 1 0F .hibytes 0ff9h +000B29r 1 0F .hibytes 0ffah +000B2Ar 1 0F .hibytes 0ffbh +000B2Br 1 0F .hibytes 0ffch +000B2Cr 1 0F .hibytes 0ffdh +000B2Dr 1 0F .hibytes 0ffeh +000B2Er 1 0F .hibytes 0fffh +000B2Fr 1 10 .hibytes 1000h +000B30r 1 10 .hibytes 1001h +000B31r 1 10 .hibytes 1002h +000B32r 1 10 .hibytes 1003h +000B33r 1 10 .hibytes 1004h +000B34r 1 10 .hibytes 1005h +000B35r 1 10 .hibytes 1006h +000B36r 1 10 .hibytes 1007h +000B37r 1 10 .hibytes 1008h +000B38r 1 7F .hibytes 7ff0h +000B39r 1 7F .hibytes 7ff1h +000B3Ar 1 7F .hibytes 7ff2h +000B3Br 1 7F .hibytes 7ff3h +000B3Cr 1 7F .hibytes 7ff4h +000B3Dr 1 7F .hibytes 7ff5h +000B3Er 1 7F .hibytes 7ff6h +000B3Fr 1 7F .hibytes 7ff7h +000B40r 1 7F .hibytes 7ff8h +000B41r 1 7F .hibytes 7ff9h +000B42r 1 7F .hibytes 7ffah +000B43r 1 7F .hibytes 7ffbh +000B44r 1 7F .hibytes 7ffch +000B45r 1 7F .hibytes 7ffdh +000B46r 1 7F .hibytes 7ffeh +000B47r 1 7F .hibytes 7fffh +000B48r 1 80 .hibytes 8000h +000B49r 1 80 .hibytes 8001h +000B4Ar 1 80 .hibytes 8002h +000B4Br 1 80 .hibytes 8003h +000B4Cr 1 80 .hibytes 8004h +000B4Dr 1 80 .hibytes 8005h +000B4Er 1 80 .hibytes 8006h +000B4Fr 1 80 .hibytes 8007h +000B50r 1 80 .hibytes 8008h +000B51r 1 80 .hibytes 8009h +000B52r 1 80 .hibytes 800ah +000B53r 1 80 .hibytes 800bh +000B54r 1 9F .hibytes 9fe1h +000B55r 1 9F .hibytes 9fe2h +000B56r 1 9F .hibytes 9fe3h +000B57r 1 9F .hibytes 9fe4h +000B58r 1 9F .hibytes 9fe5h +000B59r 1 9F .hibytes 9fe6h +000B5Ar 1 9F .hibytes 9fe7h +000B5Br 1 9F .hibytes 9fe8h +000B5Cr 1 9F .hibytes 9fe9h +000B5Dr 1 9F .hibytes 9feah +000B5Er 1 9F .hibytes 9febh +000B5Fr 1 9F .hibytes 9fech +000B60r 1 9F .hibytes 9fedh +000B61r 1 9F .hibytes 9feeh +000B62r 1 9F .hibytes 9fefh +000B63r 1 9F .hibytes 9ff0h +000B64r 1 9F .hibytes 9ff1h +000B65r 1 9F .hibytes 9ff2h +000B66r 1 9F .hibytes 9ff3h +000B67r 1 9F .hibytes 9ff4h +000B68r 1 9F .hibytes 9ff5h +000B69r 1 9F .hibytes 9ff6h +000B6Ar 1 9F .hibytes 9ff7h +000B6Br 1 9F .hibytes 9ff8h +000B6Cr 1 9F .hibytes 9ff9h +000B6Dr 1 9F .hibytes 9ffah +000B6Er 1 9F .hibytes 9ffbh +000B6Fr 1 9F .hibytes 9ffch +000B70r 1 9F .hibytes 9ffdh +000B71r 1 9F .hibytes 9ffeh +000B72r 1 9F .hibytes 9fffh +000B73r 1 A0 .hibytes 0a000h +000B74r 1 A0 .hibytes 0a001h +000B75r 1 A0 .hibytes 0a002h +000B76r 1 A0 .hibytes 0a003h +000B77r 1 A0 .hibytes 0a004h +000B78r 1 A0 .hibytes 0a005h +000B79r 1 A0 .hibytes 0a006h +000B7Ar 1 A0 .hibytes 0a007h +000B7Br 1 A0 .hibytes 0a008h +000B7Cr 1 A0 .hibytes 0a009h +000B7Dr 1 A0 .hibytes 0a00ah +000B7Er 1 A0 .hibytes 0a00bh +000B7Fr 1 A0 .hibytes 0a00ch +000B80r 1 A0 .hibytes 0a00dh +000B81r 1 A0 .hibytes 0a00eh +000B82r 1 A0 .hibytes 0a00fh +000B83r 1 AF .hibytes 0afe1h +000B84r 1 AF .hibytes 0afe2h +000B85r 1 AF .hibytes 0afe3h +000B86r 1 AF .hibytes 0afe4h +000B87r 1 AF .hibytes 0afe5h +000B88r 1 AF .hibytes 0afe6h +000B89r 1 AF .hibytes 0afe7h +000B8Ar 1 AF .hibytes 0afe8h +000B8Br 1 AF .hibytes 0afe9h +000B8Cr 1 AF .hibytes 0afeah +000B8Dr 1 AF .hibytes 0afebh +000B8Er 1 AF .hibytes 0afech +000B8Fr 1 AF .hibytes 0afedh +000B90r 1 AF .hibytes 0afeeh +000B91r 1 AF .hibytes 0afefh +000B92r 1 AF .hibytes 0aff0h +000B93r 1 AF .hibytes 0aff1h +000B94r 1 AF .hibytes 0aff2h +000B95r 1 AF .hibytes 0aff3h +000B96r 1 AF .hibytes 0aff4h +000B97r 1 AF .hibytes 0aff5h +000B98r 1 AF .hibytes 0aff6h +000B99r 1 AF .hibytes 0aff7h +000B9Ar 1 AF .hibytes 0aff8h +000B9Br 1 AF .hibytes 0aff9h +000B9Cr 1 AF .hibytes 0affah +000B9Dr 1 AF .hibytes 0affbh +000B9Er 1 AF .hibytes 0affch +000B9Fr 1 AF .hibytes 0affdh +000BA0r 1 AF .hibytes 0affeh +000BA1r 1 AF .hibytes 0afffh +000BA2r 1 B0 .hibytes 0b000h +000BA3r 1 B0 .hibytes 0b001h +000BA4r 1 B0 .hibytes 0b002h +000BA5r 1 B0 .hibytes 0b003h +000BA6r 1 B0 .hibytes 0b004h +000BA7r 1 B0 .hibytes 0b005h +000BA8r 1 B0 .hibytes 0b006h +000BA9r 1 B0 .hibytes 0b007h +000BAAr 1 B0 .hibytes 0b008h +000BABr 1 B0 .hibytes 0b009h +000BACr 1 B0 .hibytes 0b00ah +000BADr 1 B0 .hibytes 0b00bh +000BAEr 1 B0 .hibytes 0b00ch +000BAFr 1 B0 .hibytes 0b00dh +000BB0r 1 B0 .hibytes 0b00eh +000BB1r 1 B0 .hibytes 0b00fh +000BB2r 1 BF .hibytes 0bfe1h +000BB3r 1 BF .hibytes 0bfe2h +000BB4r 1 BF .hibytes 0bfe3h +000BB5r 1 BF .hibytes 0bfe4h +000BB6r 1 BF .hibytes 0bfe5h +000BB7r 1 BF .hibytes 0bfe6h +000BB8r 1 BF .hibytes 0bfe7h +000BB9r 1 BF .hibytes 0bfe8h +000BBAr 1 BF .hibytes 0bfe9h +000BBBr 1 BF .hibytes 0bfeah +000BBCr 1 BF .hibytes 0bfebh +000BBDr 1 BF .hibytes 0bfech +000BBEr 1 BF .hibytes 0bfedh +000BBFr 1 BF .hibytes 0bfeeh +000BC0r 1 BF .hibytes 0bfefh +000BC1r 1 BF .hibytes 0bff0h +000BC2r 1 BF .hibytes 0bff1h +000BC3r 1 BF .hibytes 0bff2h +000BC4r 1 BF .hibytes 0bff3h +000BC5r 1 BF .hibytes 0bff4h +000BC6r 1 BF .hibytes 0bff5h +000BC7r 1 BF .hibytes 0bff6h +000BC8r 1 BF .hibytes 0bff7h +000BC9r 1 BF .hibytes 0bff8h +000BCAr 1 BF .hibytes 0bff9h +000BCBr 1 BF .hibytes 0bffah +000BCCr 1 BF .hibytes 0bffbh +000BCDr 1 BF .hibytes 0bffch +000BCEr 1 BF .hibytes 0bffdh +000BCFr 1 BF .hibytes 0bffeh +000BD0r 1 BF .hibytes 0bfffh +000BD1r 1 C0 .hibytes 0c000h +000BD2r 1 C0 .hibytes 0c001h +000BD3r 1 C0 .hibytes 0c002h +000BD4r 1 C0 .hibytes 0c003h +000BD5r 1 C0 .hibytes 0c004h +000BD6r 1 C0 .hibytes 0c005h +000BD7r 1 C0 .hibytes 0c006h +000BD8r 1 C0 .hibytes 0c007h +000BD9r 1 C0 .hibytes 0c008h +000BDAr 1 C0 .hibytes 0c009h +000BDBr 1 C0 .hibytes 0c00ah +000BDCr 1 C0 .hibytes 0c00bh +000BDDr 1 C0 .hibytes 0c00ch +000BDEr 1 C0 .hibytes 0c00dh +000BDFr 1 C0 .hibytes 0c00eh +000BE0r 1 C0 .hibytes 0c00fh +000BE1r 1 CF .hibytes 0cfe1h +000BE2r 1 CF .hibytes 0cfe2h +000BE3r 1 CF .hibytes 0cfe3h +000BE4r 1 CF .hibytes 0cfe4h +000BE5r 1 CF .hibytes 0cfe5h +000BE6r 1 CF .hibytes 0cfe6h +000BE7r 1 CF .hibytes 0cfe7h +000BE8r 1 CF .hibytes 0cfe8h +000BE9r 1 CF .hibytes 0cfe9h +000BEAr 1 CF .hibytes 0cfeah +000BEBr 1 CF .hibytes 0cfebh +000BECr 1 CF .hibytes 0cfech +000BEDr 1 CF .hibytes 0cfedh +000BEEr 1 CF .hibytes 0cfeeh +000BEFr 1 CF .hibytes 0cfefh +000BF0r 1 CF .hibytes 0cff0h +000BF1r 1 CF .hibytes 0cff1h +000BF2r 1 CF .hibytes 0cff2h +000BF3r 1 CF .hibytes 0cff3h +000BF4r 1 CF .hibytes 0cff4h +000BF5r 1 CF .hibytes 0cff5h +000BF6r 1 CF .hibytes 0cff6h +000BF7r 1 CF .hibytes 0cff7h +000BF8r 1 CF .hibytes 0cff8h +000BF9r 1 CF .hibytes 0cff9h +000BFAr 1 CF .hibytes 0cffah +000BFBr 1 CF .hibytes 0cffbh +000BFCr 1 CF .hibytes 0cffch +000BFDr 1 CF .hibytes 0cffdh +000BFEr 1 CF .hibytes 0cffeh +000BFFr 1 CF .hibytes 0cfffh +000C00r 1 D0 .hibytes 0d000h +000C01r 1 D0 .hibytes 0d001h +000C02r 1 D0 .hibytes 0d002h +000C03r 1 D0 .hibytes 0d003h +000C04r 1 D0 .hibytes 0d004h +000C05r 1 D0 .hibytes 0d005h +000C06r 1 D0 .hibytes 0d006h +000C07r 1 D0 .hibytes 0d007h +000C08r 1 D0 .hibytes 0d008h +000C09r 1 D0 .hibytes 0d009h +000C0Ar 1 D0 .hibytes 0d00ah +000C0Br 1 D0 .hibytes 0d00bh +000C0Cr 1 D0 .hibytes 0d00ch +000C0Dr 1 D0 .hibytes 0d00dh +000C0Er 1 D0 .hibytes 0d00eh +000C0Fr 1 D0 .hibytes 0d00fh +000C10r 1 DF .hibytes 0dfe1h +000C11r 1 DF .hibytes 0dfe2h +000C12r 1 DF .hibytes 0dfe3h +000C13r 1 DF .hibytes 0dfe4h +000C14r 1 DF .hibytes 0dfe5h +000C15r 1 DF .hibytes 0dfe6h +000C16r 1 DF .hibytes 0dfe7h +000C17r 1 DF .hibytes 0dfe8h +000C18r 1 DF .hibytes 0dfe9h +000C19r 1 DF .hibytes 0dfeah +000C1Ar 1 DF .hibytes 0dfebh +000C1Br 1 DF .hibytes 0dfech +000C1Cr 1 DF .hibytes 0dfedh +000C1Dr 1 DF .hibytes 0dfeeh +000C1Er 1 DF .hibytes 0dfefh +000C1Fr 1 DF .hibytes 0dff0h +000C20r 1 DF .hibytes 0dff1h +000C21r 1 DF .hibytes 0dff2h +000C22r 1 DF .hibytes 0dff3h +000C23r 1 DF .hibytes 0dff4h +000C24r 1 DF .hibytes 0dff5h +000C25r 1 DF .hibytes 0dff6h +000C26r 1 DF .hibytes 0dff7h +000C27r 1 DF .hibytes 0dff8h +000C28r 1 DF .hibytes 0dff9h +000C29r 1 DF .hibytes 0dffah +000C2Ar 1 DF .hibytes 0dffbh +000C2Br 1 DF .hibytes 0dffch +000C2Cr 1 DF .hibytes 0dffdh +000C2Dr 1 DF .hibytes 0dffeh +000C2Er 1 DF .hibytes 0dfffh +000C2Fr 1 E0 .hibytes 0e000h +000C30r 1 E0 .hibytes 0e001h +000C31r 1 E0 .hibytes 0e002h +000C32r 1 E0 .hibytes 0e003h +000C33r 1 E0 .hibytes 0e004h +000C34r 1 E0 .hibytes 0e005h +000C35r 1 E0 .hibytes 0e006h +000C36r 1 E0 .hibytes 0e007h +000C37r 1 E0 .hibytes 0e008h +000C38r 1 E0 .hibytes 0e009h +000C39r 1 E0 .hibytes 0e00ah +000C3Ar 1 E0 .hibytes 0e00bh +000C3Br 1 E0 .hibytes 0e00ch +000C3Cr 1 E0 .hibytes 0e00dh +000C3Dr 1 E0 .hibytes 0e00eh +000C3Er 1 E0 .hibytes 0e00fh +000C3Fr 1 EF .hibytes 0efe1h +000C40r 1 EF .hibytes 0efe2h +000C41r 1 EF .hibytes 0efe3h +000C42r 1 EF .hibytes 0efe4h +000C43r 1 EF .hibytes 0efe5h +000C44r 1 EF .hibytes 0efe6h +000C45r 1 EF .hibytes 0efe7h +000C46r 1 EF .hibytes 0efe8h +000C47r 1 EF .hibytes 0efe9h +000C48r 1 EF .hibytes 0efeah +000C49r 1 EF .hibytes 0efebh +000C4Ar 1 EF .hibytes 0efech +000C4Br 1 EF .hibytes 0efedh +000C4Cr 1 EF .hibytes 0efeeh +000C4Dr 1 EF .hibytes 0efefh +000C4Er 1 EF .hibytes 0eff0h +000C4Fr 1 EF .hibytes 0eff1h +000C50r 1 EF .hibytes 0eff2h +000C51r 1 EF .hibytes 0eff3h +000C52r 1 EF .hibytes 0eff4h +000C53r 1 EF .hibytes 0eff5h +000C54r 1 EF .hibytes 0eff6h +000C55r 1 EF .hibytes 0eff7h +000C56r 1 EF .hibytes 0eff8h +000C57r 1 EF .hibytes 0eff9h +000C58r 1 EF .hibytes 0effah +000C59r 1 EF .hibytes 0effbh +000C5Ar 1 EF .hibytes 0effch +000C5Br 1 EF .hibytes 0effdh +000C5Cr 1 EF .hibytes 0effeh +000C5Dr 1 EF .hibytes 0efffh +000C5Er 1 F0 .hibytes 0f000h +000C5Fr 1 F0 .hibytes 0f001h +000C60r 1 F0 .hibytes 0f002h +000C61r 1 F0 .hibytes 0f003h +000C62r 1 F0 .hibytes 0f004h +000C63r 1 F0 .hibytes 0f005h +000C64r 1 F0 .hibytes 0f006h +000C65r 1 F0 .hibytes 0f007h +000C66r 1 F0 .hibytes 0f008h +000C67r 1 F0 .hibytes 0f009h +000C68r 1 F0 .hibytes 0f00ah +000C69r 1 F0 .hibytes 0f00bh +000C6Ar 1 F0 .hibytes 0f00ch +000C6Br 1 F0 .hibytes 0f00dh +000C6Cr 1 F0 .hibytes 0f00eh +000C6Dr 1 F0 .hibytes 0f00fh +000C6Er 1 FF .hibytes 0ffe1h +000C6Fr 1 FF .hibytes 0ffe2h +000C70r 1 FF .hibytes 0ffe3h +000C71r 1 FF .hibytes 0ffe4h +000C72r 1 FF .hibytes 0ffe5h +000C73r 1 FF .hibytes 0ffe6h +000C74r 1 FF .hibytes 0ffe7h +000C75r 1 FF .hibytes 0ffe8h +000C76r 1 FF .hibytes 0ffe9h +000C77r 1 FF .hibytes 0ffeah +000C78r 1 FF .hibytes 0ffebh +000C79r 1 FF .hibytes 0ffech +000C7Ar 1 FF .hibytes 0ffedh +000C7Br 1 FF .hibytes 0ffeeh +000C7Cr 1 FF .hibytes 0ffefh +000C7Dr 1 FF .hibytes 0fff0h +000C7Er 1 FF .hibytes 0fff1h +000C7Fr 1 FF .hibytes 0fff2h +000C80r 1 FF .hibytes 0fff3h +000C81r 1 FF .hibytes 0fff4h +000C82r 1 FF .hibytes 0fff5h +000C83r 1 FF .hibytes 0fff6h +000C84r 1 FF .hibytes 0fff7h +000C85r 1 FF .hibytes 0fff8h +000C86r 1 FF .hibytes 0fff9h +000C87r 1 FF .hibytes 0fffah +000C88r 1 FF .hibytes 0fffbh +000C89r 1 FF .hibytes 0fffch +000C8Ar 1 FF .hibytes 0fffdh +000C8Br 1 FF .hibytes 0fffeh +000C8Cr 1 FF .hibytes 0ffffh +000C8Dr 1 +000C8Dr 1 ; alternative hex values, uppercase +000C8Dr 1 00 .hibytes 0h +000C8Er 1 00 .hibytes 1h +000C8Fr 1 00 .hibytes 2h +000C90r 1 00 .hibytes 3h +000C91r 1 00 .hibytes 4h +000C92r 1 00 .hibytes 5h +000C93r 1 00 .hibytes 6h +000C94r 1 00 .hibytes 7h +000C95r 1 00 .hibytes 8h +000C96r 1 00 .hibytes 9h +000C97r 1 00 .hibytes 0Ah +000C98r 1 00 .hibytes 0Bh +000C99r 1 00 .hibytes 0Ch +000C9Ar 1 00 .hibytes 0Dh +000C9Br 1 00 .hibytes 0Eh +000C9Cr 1 00 .hibytes 0Fh +000C9Dr 1 00 .hibytes 10h +000C9Er 1 00 .hibytes 11h +000C9Fr 1 00 .hibytes 12h +000CA0r 1 00 .hibytes 13h +000CA1r 1 00 .hibytes 70h +000CA2r 1 00 .hibytes 71h +000CA3r 1 00 .hibytes 72h +000CA4r 1 00 .hibytes 73h +000CA5r 1 00 .hibytes 74h +000CA6r 1 00 .hibytes 75h +000CA7r 1 00 .hibytes 76h +000CA8r 1 00 .hibytes 77h +000CA9r 1 00 .hibytes 78h +000CAAr 1 00 .hibytes 79h +000CABr 1 00 .hibytes 7Ah +000CACr 1 00 .hibytes 7Bh +000CADr 1 00 .hibytes 7Ch +000CAEr 1 00 .hibytes 7Dh +000CAFr 1 00 .hibytes 7Eh +000CB0r 1 00 .hibytes 7Fh +000CB1r 1 00 .hibytes 80h +000CB2r 1 00 .hibytes 81h +000CB3r 1 00 .hibytes 82h +000CB4r 1 00 .hibytes 83h +000CB5r 1 00 .hibytes 84h +000CB6r 1 00 .hibytes 85h +000CB7r 1 00 .hibytes 86h +000CB8r 1 00 .hibytes 0F0h +000CB9r 1 00 .hibytes 0F1h +000CBAr 1 00 .hibytes 0F2h +000CBBr 1 00 .hibytes 0F3h +000CBCr 1 00 .hibytes 0F4h +000CBDr 1 00 .hibytes 0F5h +000CBEr 1 00 .hibytes 0F6h +000CBFr 1 00 .hibytes 0F7h +000CC0r 1 00 .hibytes 0F8h +000CC1r 1 00 .hibytes 0F9h +000CC2r 1 00 .hibytes 0FAh +000CC3r 1 00 .hibytes 0FBh +000CC4r 1 00 .hibytes 0FCh +000CC5r 1 00 .hibytes 0FDh +000CC6r 1 00 .hibytes 0FEh +000CC7r 1 00 .hibytes 0FFh +000CC8r 1 01 .hibytes 100h +000CC9r 1 01 .hibytes 101h +000CCAr 1 01 .hibytes 102h +000CCBr 1 01 .hibytes 103h +000CCCr 1 0F .hibytes 0FD2h +000CCDr 1 0F .hibytes 0FD3h +000CCEr 1 0F .hibytes 0FD4h +000CCFr 1 0F .hibytes 0FD5h +000CD0r 1 0F .hibytes 0FD6h +000CD1r 1 0F .hibytes 0FD7h +000CD2r 1 0F .hibytes 0FD8h +000CD3r 1 0F .hibytes 0FD9h +000CD4r 1 0F .hibytes 0FDAh +000CD5r 1 0F .hibytes 0FDBh +000CD6r 1 0F .hibytes 0FDCh +000CD7r 1 0F .hibytes 0FDDh +000CD8r 1 0F .hibytes 0FDEh +000CD9r 1 0F .hibytes 0FDFh +000CDAr 1 0F .hibytes 0FE0h +000CDBr 1 0F .hibytes 0FE1h +000CDCr 1 0F .hibytes 0FE2h +000CDDr 1 0F .hibytes 0FE3h +000CDEr 1 0F .hibytes 0FE4h +000CDFr 1 0F .hibytes 0FE5h +000CE0r 1 0F .hibytes 0FE6h +000CE1r 1 0F .hibytes 0FE7h +000CE2r 1 0F .hibytes 0FE8h +000CE3r 1 0F .hibytes 0FE9h +000CE4r 1 0F .hibytes 0FEAh +000CE5r 1 0F .hibytes 0FEBh +000CE6r 1 0F .hibytes 0FECh +000CE7r 1 0F .hibytes 0FEDh +000CE8r 1 0F .hibytes 0FEEh +000CE9r 1 0F .hibytes 0FEFh +000CEAr 1 0F .hibytes 0FF0h +000CEBr 1 0F .hibytes 0FF1h +000CECr 1 0F .hibytes 0FF2h +000CEDr 1 0F .hibytes 0FF3h +000CEEr 1 0F .hibytes 0FF4h +000CEFr 1 0F .hibytes 0FF5h +000CF0r 1 0F .hibytes 0FF6h +000CF1r 1 0F .hibytes 0FF7h +000CF2r 1 0F .hibytes 0FF8h +000CF3r 1 0F .hibytes 0FF9h +000CF4r 1 0F .hibytes 0FFAh +000CF5r 1 0F .hibytes 0FFBh +000CF6r 1 0F .hibytes 0FFCh +000CF7r 1 0F .hibytes 0FFDh +000CF8r 1 0F .hibytes 0FFEh +000CF9r 1 0F .hibytes 0FFFh +000CFAr 1 10 .hibytes 1000h +000CFBr 1 10 .hibytes 1001h +000CFCr 1 10 .hibytes 1002h +000CFDr 1 10 .hibytes 1003h +000CFEr 1 10 .hibytes 1004h +000CFFr 1 10 .hibytes 1005h +000D00r 1 10 .hibytes 1006h +000D01r 1 10 .hibytes 1007h +000D02r 1 10 .hibytes 1008h +000D03r 1 7F .hibytes 7FF0h +000D04r 1 7F .hibytes 7FF1h +000D05r 1 7F .hibytes 7FF2h +000D06r 1 7F .hibytes 7FF3h +000D07r 1 7F .hibytes 7FF4h +000D08r 1 7F .hibytes 7FF5h +000D09r 1 7F .hibytes 7FF6h +000D0Ar 1 7F .hibytes 7FF7h +000D0Br 1 7F .hibytes 7FF8h +000D0Cr 1 7F .hibytes 7FF9h +000D0Dr 1 7F .hibytes 7FFAh +000D0Er 1 7F .hibytes 7FFBh +000D0Fr 1 7F .hibytes 7FFCh +000D10r 1 7F .hibytes 7FFDh +000D11r 1 7F .hibytes 7FFEh +000D12r 1 7F .hibytes 7FFFh +000D13r 1 80 .hibytes 8000h +000D14r 1 80 .hibytes 8001h +000D15r 1 80 .hibytes 8002h +000D16r 1 80 .hibytes 8003h +000D17r 1 80 .hibytes 8004h +000D18r 1 80 .hibytes 8005h +000D19r 1 80 .hibytes 8006h +000D1Ar 1 80 .hibytes 8007h +000D1Br 1 80 .hibytes 8008h +000D1Cr 1 80 .hibytes 8009h +000D1Dr 1 80 .hibytes 800Ah +000D1Er 1 80 .hibytes 800Bh +000D1Fr 1 9F .hibytes 9FE1h +000D20r 1 9F .hibytes 9FE2h +000D21r 1 9F .hibytes 9FE3h +000D22r 1 9F .hibytes 9FE4h +000D23r 1 9F .hibytes 9FE5h +000D24r 1 9F .hibytes 9FE6h +000D25r 1 9F .hibytes 9FE7h +000D26r 1 9F .hibytes 9FE8h +000D27r 1 9F .hibytes 9FE9h +000D28r 1 9F .hibytes 9FEAh +000D29r 1 9F .hibytes 9FEBh +000D2Ar 1 9F .hibytes 9FECh +000D2Br 1 9F .hibytes 9FEDh +000D2Cr 1 9F .hibytes 9FEEh +000D2Dr 1 9F .hibytes 9FEFh +000D2Er 1 9F .hibytes 9FF0h +000D2Fr 1 9F .hibytes 9FF1h +000D30r 1 9F .hibytes 9FF2h +000D31r 1 9F .hibytes 9FF3h +000D32r 1 9F .hibytes 9FF4h +000D33r 1 9F .hibytes 9FF5h +000D34r 1 9F .hibytes 9FF6h +000D35r 1 9F .hibytes 9FF7h +000D36r 1 9F .hibytes 9FF8h +000D37r 1 9F .hibytes 9FF9h +000D38r 1 9F .hibytes 9FFAh +000D39r 1 9F .hibytes 9FFBh +000D3Ar 1 9F .hibytes 9FFCh +000D3Br 1 9F .hibytes 9FFDh +000D3Cr 1 9F .hibytes 9FFEh +000D3Dr 1 9F .hibytes 9FFFh +000D3Er 1 A0 .hibytes 0A000h +000D3Fr 1 A0 .hibytes 0A001h +000D40r 1 A0 .hibytes 0A002h +000D41r 1 A0 .hibytes 0A003h +000D42r 1 A0 .hibytes 0A004h +000D43r 1 A0 .hibytes 0A005h +000D44r 1 A0 .hibytes 0A006h +000D45r 1 A0 .hibytes 0A007h +000D46r 1 A0 .hibytes 0A008h +000D47r 1 A0 .hibytes 0A009h +000D48r 1 A0 .hibytes 0A00Ah +000D49r 1 A0 .hibytes 0A00Bh +000D4Ar 1 A0 .hibytes 0A00Ch +000D4Br 1 A0 .hibytes 0A00Dh +000D4Cr 1 A0 .hibytes 0A00Eh +000D4Dr 1 A0 .hibytes 0A00Fh +000D4Er 1 AF .hibytes 0AFE1h +000D4Fr 1 AF .hibytes 0AFE2h +000D50r 1 AF .hibytes 0AFE3h +000D51r 1 AF .hibytes 0AFE4h +000D52r 1 AF .hibytes 0AFE5h +000D53r 1 AF .hibytes 0AFE6h +000D54r 1 AF .hibytes 0AFE7h +000D55r 1 AF .hibytes 0AFE8h +000D56r 1 AF .hibytes 0AFE9h +000D57r 1 AF .hibytes 0AFEAh +000D58r 1 AF .hibytes 0AFEBh +000D59r 1 AF .hibytes 0AFECh +000D5Ar 1 AF .hibytes 0AFEDh +000D5Br 1 AF .hibytes 0AFEEh +000D5Cr 1 AF .hibytes 0AFEFh +000D5Dr 1 AF .hibytes 0AFF0h +000D5Er 1 AF .hibytes 0AFF1h +000D5Fr 1 AF .hibytes 0AFF2h +000D60r 1 AF .hibytes 0AFF3h +000D61r 1 AF .hibytes 0AFF4h +000D62r 1 AF .hibytes 0AFF5h +000D63r 1 AF .hibytes 0AFF6h +000D64r 1 AF .hibytes 0AFF7h +000D65r 1 AF .hibytes 0AFF8h +000D66r 1 AF .hibytes 0AFF9h +000D67r 1 AF .hibytes 0AFFAh +000D68r 1 AF .hibytes 0AFFBh +000D69r 1 AF .hibytes 0AFFCh +000D6Ar 1 AF .hibytes 0AFFDh +000D6Br 1 AF .hibytes 0AFFEh +000D6Cr 1 AF .hibytes 0AFFFh +000D6Dr 1 B0 .hibytes 0B000h +000D6Er 1 B0 .hibytes 0B001h +000D6Fr 1 B0 .hibytes 0B002h +000D70r 1 B0 .hibytes 0B003h +000D71r 1 B0 .hibytes 0B004h +000D72r 1 B0 .hibytes 0B005h +000D73r 1 B0 .hibytes 0B006h +000D74r 1 B0 .hibytes 0B007h +000D75r 1 B0 .hibytes 0B008h +000D76r 1 B0 .hibytes 0B009h +000D77r 1 B0 .hibytes 0B00Ah +000D78r 1 B0 .hibytes 0B00Bh +000D79r 1 B0 .hibytes 0B00Ch +000D7Ar 1 B0 .hibytes 0B00Dh +000D7Br 1 B0 .hibytes 0B00Eh +000D7Cr 1 B0 .hibytes 0B00Fh +000D7Dr 1 BF .hibytes 0BFE1h +000D7Er 1 BF .hibytes 0BFE2h +000D7Fr 1 BF .hibytes 0BFE3h +000D80r 1 BF .hibytes 0BFE4h +000D81r 1 BF .hibytes 0BFE5h +000D82r 1 BF .hibytes 0BFE6h +000D83r 1 BF .hibytes 0BFE7h +000D84r 1 BF .hibytes 0BFE8h +000D85r 1 BF .hibytes 0BFE9h +000D86r 1 BF .hibytes 0BFEAh +000D87r 1 BF .hibytes 0BFEBh +000D88r 1 BF .hibytes 0BFECh +000D89r 1 BF .hibytes 0BFEDh +000D8Ar 1 BF .hibytes 0BFEEh +000D8Br 1 BF .hibytes 0BFEFh +000D8Cr 1 BF .hibytes 0BFF0h +000D8Dr 1 BF .hibytes 0BFF1h +000D8Er 1 BF .hibytes 0BFF2h +000D8Fr 1 BF .hibytes 0BFF3h +000D90r 1 BF .hibytes 0BFF4h +000D91r 1 BF .hibytes 0BFF5h +000D92r 1 BF .hibytes 0BFF6h +000D93r 1 BF .hibytes 0BFF7h +000D94r 1 BF .hibytes 0BFF8h +000D95r 1 BF .hibytes 0BFF9h +000D96r 1 BF .hibytes 0BFFAh +000D97r 1 BF .hibytes 0BFFBh +000D98r 1 BF .hibytes 0BFFCh +000D99r 1 BF .hibytes 0BFFDh +000D9Ar 1 BF .hibytes 0BFFEh +000D9Br 1 BF .hibytes 0BFFFh +000D9Cr 1 C0 .hibytes 0C000h +000D9Dr 1 C0 .hibytes 0C001h +000D9Er 1 C0 .hibytes 0C002h +000D9Fr 1 C0 .hibytes 0C003h +000DA0r 1 C0 .hibytes 0C004h +000DA1r 1 C0 .hibytes 0C005h +000DA2r 1 C0 .hibytes 0C006h +000DA3r 1 C0 .hibytes 0C007h +000DA4r 1 C0 .hibytes 0C008h +000DA5r 1 C0 .hibytes 0C009h +000DA6r 1 C0 .hibytes 0C00Ah +000DA7r 1 C0 .hibytes 0C00Bh +000DA8r 1 C0 .hibytes 0C00Ch +000DA9r 1 C0 .hibytes 0C00Dh +000DAAr 1 C0 .hibytes 0C00Eh +000DABr 1 C0 .hibytes 0C00Fh +000DACr 1 CF .hibytes 0CFE1h +000DADr 1 CF .hibytes 0CFE2h +000DAEr 1 CF .hibytes 0CFE3h +000DAFr 1 CF .hibytes 0CFE4h +000DB0r 1 CF .hibytes 0CFE5h +000DB1r 1 CF .hibytes 0CFE6h +000DB2r 1 CF .hibytes 0CFE7h +000DB3r 1 CF .hibytes 0CFE8h +000DB4r 1 CF .hibytes 0CFE9h +000DB5r 1 CF .hibytes 0CFEAh +000DB6r 1 CF .hibytes 0CFEBh +000DB7r 1 CF .hibytes 0CFECh +000DB8r 1 CF .hibytes 0CFEDh +000DB9r 1 CF .hibytes 0CFEEh +000DBAr 1 CF .hibytes 0CFEFh +000DBBr 1 CF .hibytes 0CFF0h +000DBCr 1 CF .hibytes 0CFF1h +000DBDr 1 CF .hibytes 0CFF2h +000DBEr 1 CF .hibytes 0CFF3h +000DBFr 1 CF .hibytes 0CFF4h +000DC0r 1 CF .hibytes 0CFF5h +000DC1r 1 CF .hibytes 0CFF6h +000DC2r 1 CF .hibytes 0CFF7h +000DC3r 1 CF .hibytes 0CFF8h +000DC4r 1 CF .hibytes 0CFF9h +000DC5r 1 CF .hibytes 0CFFAh +000DC6r 1 CF .hibytes 0CFFBh +000DC7r 1 CF .hibytes 0CFFCh +000DC8r 1 CF .hibytes 0CFFDh +000DC9r 1 CF .hibytes 0CFFEh +000DCAr 1 CF .hibytes 0CFFFh +000DCBr 1 D0 .hibytes 0D000h +000DCCr 1 D0 .hibytes 0D001h +000DCDr 1 D0 .hibytes 0D002h +000DCEr 1 D0 .hibytes 0D003h +000DCFr 1 D0 .hibytes 0D004h +000DD0r 1 D0 .hibytes 0D005h +000DD1r 1 D0 .hibytes 0D006h +000DD2r 1 D0 .hibytes 0D007h +000DD3r 1 D0 .hibytes 0D008h +000DD4r 1 D0 .hibytes 0D009h +000DD5r 1 D0 .hibytes 0D00Ah +000DD6r 1 D0 .hibytes 0D00Bh +000DD7r 1 D0 .hibytes 0D00Ch +000DD8r 1 D0 .hibytes 0D00Dh +000DD9r 1 D0 .hibytes 0D00Eh +000DDAr 1 D0 .hibytes 0D00Fh +000DDBr 1 DF .hibytes 0DFE1h +000DDCr 1 DF .hibytes 0DFE2h +000DDDr 1 DF .hibytes 0DFE3h +000DDEr 1 DF .hibytes 0DFE4h +000DDFr 1 DF .hibytes 0DFE5h +000DE0r 1 DF .hibytes 0DFE6h +000DE1r 1 DF .hibytes 0DFE7h +000DE2r 1 DF .hibytes 0DFE8h +000DE3r 1 DF .hibytes 0DFE9h +000DE4r 1 DF .hibytes 0DFEAh +000DE5r 1 DF .hibytes 0DFEBh +000DE6r 1 DF .hibytes 0DFECh +000DE7r 1 DF .hibytes 0DFEDh +000DE8r 1 DF .hibytes 0DFEEh +000DE9r 1 DF .hibytes 0DFEFh +000DEAr 1 DF .hibytes 0DFF0h +000DEBr 1 DF .hibytes 0DFF1h +000DECr 1 DF .hibytes 0DFF2h +000DEDr 1 DF .hibytes 0DFF3h +000DEEr 1 DF .hibytes 0DFF4h +000DEFr 1 DF .hibytes 0DFF5h +000DF0r 1 DF .hibytes 0DFF6h +000DF1r 1 DF .hibytes 0DFF7h +000DF2r 1 DF .hibytes 0DFF8h +000DF3r 1 DF .hibytes 0DFF9h +000DF4r 1 DF .hibytes 0DFFAh +000DF5r 1 DF .hibytes 0DFFBh +000DF6r 1 DF .hibytes 0DFFCh +000DF7r 1 DF .hibytes 0DFFDh +000DF8r 1 DF .hibytes 0DFFEh +000DF9r 1 DF .hibytes 0DFFFh +000DFAr 1 E0 .hibytes 0E000h +000DFBr 1 E0 .hibytes 0E001h +000DFCr 1 E0 .hibytes 0E002h +000DFDr 1 E0 .hibytes 0E003h +000DFEr 1 E0 .hibytes 0E004h +000DFFr 1 E0 .hibytes 0E005h +000E00r 1 E0 .hibytes 0E006h +000E01r 1 E0 .hibytes 0E007h +000E02r 1 E0 .hibytes 0E008h +000E03r 1 E0 .hibytes 0E009h +000E04r 1 E0 .hibytes 0E00Ah +000E05r 1 E0 .hibytes 0E00Bh +000E06r 1 E0 .hibytes 0E00Ch +000E07r 1 E0 .hibytes 0E00Dh +000E08r 1 E0 .hibytes 0E00Eh +000E09r 1 E0 .hibytes 0E00Fh +000E0Ar 1 EF .hibytes 0EFE1h +000E0Br 1 EF .hibytes 0EFE2h +000E0Cr 1 EF .hibytes 0EFE3h +000E0Dr 1 EF .hibytes 0EFE4h +000E0Er 1 EF .hibytes 0EFE5h +000E0Fr 1 EF .hibytes 0EFE6h +000E10r 1 EF .hibytes 0EFE7h +000E11r 1 EF .hibytes 0EFE8h +000E12r 1 EF .hibytes 0EFE9h +000E13r 1 EF .hibytes 0EFEAh +000E14r 1 EF .hibytes 0EFEBh +000E15r 1 EF .hibytes 0EFECh +000E16r 1 EF .hibytes 0EFEDh +000E17r 1 EF .hibytes 0EFEEh +000E18r 1 EF .hibytes 0EFEFh +000E19r 1 EF .hibytes 0EFF0h +000E1Ar 1 EF .hibytes 0EFF1h +000E1Br 1 EF .hibytes 0EFF2h +000E1Cr 1 EF .hibytes 0EFF3h +000E1Dr 1 EF .hibytes 0EFF4h +000E1Er 1 EF .hibytes 0EFF5h +000E1Fr 1 EF .hibytes 0EFF6h +000E20r 1 EF .hibytes 0EFF7h +000E21r 1 EF .hibytes 0EFF8h +000E22r 1 EF .hibytes 0EFF9h +000E23r 1 EF .hibytes 0EFFAh +000E24r 1 EF .hibytes 0EFFBh +000E25r 1 EF .hibytes 0EFFCh +000E26r 1 EF .hibytes 0EFFDh +000E27r 1 EF .hibytes 0EFFEh +000E28r 1 EF .hibytes 0EFFFh +000E29r 1 F0 .hibytes 0F000h +000E2Ar 1 F0 .hibytes 0F001h +000E2Br 1 F0 .hibytes 0F002h +000E2Cr 1 F0 .hibytes 0F003h +000E2Dr 1 F0 .hibytes 0F004h +000E2Er 1 F0 .hibytes 0F005h +000E2Fr 1 F0 .hibytes 0F006h +000E30r 1 F0 .hibytes 0F007h +000E31r 1 F0 .hibytes 0F008h +000E32r 1 F0 .hibytes 0F009h +000E33r 1 F0 .hibytes 0F00Ah +000E34r 1 F0 .hibytes 0F00Bh +000E35r 1 F0 .hibytes 0F00Ch +000E36r 1 F0 .hibytes 0F00Dh +000E37r 1 F0 .hibytes 0F00Eh +000E38r 1 F0 .hibytes 0F00Fh +000E39r 1 FF .hibytes 0FFE1h +000E3Ar 1 FF .hibytes 0FFE2h +000E3Br 1 FF .hibytes 0FFE3h +000E3Cr 1 FF .hibytes 0FFE4h +000E3Dr 1 FF .hibytes 0FFE5h +000E3Er 1 FF .hibytes 0FFE6h +000E3Fr 1 FF .hibytes 0FFE7h +000E40r 1 FF .hibytes 0FFE8h +000E41r 1 FF .hibytes 0FFE9h +000E42r 1 FF .hibytes 0FFEAh +000E43r 1 FF .hibytes 0FFEBh +000E44r 1 FF .hibytes 0FFECh +000E45r 1 FF .hibytes 0FFEDh +000E46r 1 FF .hibytes 0FFEEh +000E47r 1 FF .hibytes 0FFEFh +000E48r 1 FF .hibytes 0FFF0h +000E49r 1 FF .hibytes 0FFF1h +000E4Ar 1 FF .hibytes 0FFF2h +000E4Br 1 FF .hibytes 0FFF3h +000E4Cr 1 FF .hibytes 0FFF4h +000E4Dr 1 FF .hibytes 0FFF5h +000E4Er 1 FF .hibytes 0FFF6h +000E4Fr 1 FF .hibytes 0FFF7h +000E50r 1 FF .hibytes 0FFF8h +000E51r 1 FF .hibytes 0FFF9h +000E52r 1 FF .hibytes 0FFFAh +000E53r 1 FF .hibytes 0FFFBh +000E54r 1 FF .hibytes 0FFFCh +000E55r 1 FF .hibytes 0FFFDh +000E56r 1 FF .hibytes 0FFFEh +000E57r 1 FF .hibytes 0FFFFh +000E58r 1 +000E58r 1 ; alternative 4-digit hex values +000E58r 1 00 .hibytes 0000h +000E59r 1 00 .hibytes 0001h +000E5Ar 1 00 .hibytes 0002h +000E5Br 1 00 .hibytes 0003h +000E5Cr 1 00 .hibytes 0004h +000E5Dr 1 00 .hibytes 0005h +000E5Er 1 00 .hibytes 0006h +000E5Fr 1 00 .hibytes 0007h +000E60r 1 00 .hibytes 0008h +000E61r 1 00 .hibytes 0009h +000E62r 1 00 .hibytes 000ah +000E63r 1 00 .hibytes 000bh +000E64r 1 00 .hibytes 000ch +000E65r 1 00 .hibytes 000dh +000E66r 1 00 .hibytes 000eh +000E67r 1 00 .hibytes 000fh +000E68r 1 00 .hibytes 0010h +000E69r 1 00 .hibytes 0011h +000E6Ar 1 00 .hibytes 0012h +000E6Br 1 00 .hibytes 0013h +000E6Cr 1 00 .hibytes 0070h +000E6Dr 1 00 .hibytes 0071h +000E6Er 1 00 .hibytes 0072h +000E6Fr 1 00 .hibytes 0073h +000E70r 1 00 .hibytes 0074h +000E71r 1 00 .hibytes 0075h +000E72r 1 00 .hibytes 0076h +000E73r 1 00 .hibytes 0077h +000E74r 1 00 .hibytes 0078h +000E75r 1 00 .hibytes 0079h +000E76r 1 00 .hibytes 007ah +000E77r 1 00 .hibytes 007bh +000E78r 1 00 .hibytes 007ch +000E79r 1 00 .hibytes 007dh +000E7Ar 1 00 .hibytes 007eh +000E7Br 1 00 .hibytes 007fh +000E7Cr 1 00 .hibytes 0080h +000E7Dr 1 00 .hibytes 0081h +000E7Er 1 00 .hibytes 0082h +000E7Fr 1 00 .hibytes 0083h +000E80r 1 00 .hibytes 0084h +000E81r 1 00 .hibytes 0085h +000E82r 1 00 .hibytes 0086h +000E83r 1 00 .hibytes 00f0h +000E84r 1 00 .hibytes 00f1h +000E85r 1 00 .hibytes 00f2h +000E86r 1 00 .hibytes 00f3h +000E87r 1 00 .hibytes 00f4h +000E88r 1 00 .hibytes 00f5h +000E89r 1 00 .hibytes 00f6h +000E8Ar 1 00 .hibytes 00f7h +000E8Br 1 00 .hibytes 00f8h +000E8Cr 1 00 .hibytes 00f9h +000E8Dr 1 00 .hibytes 00fah +000E8Er 1 00 .hibytes 00fbh +000E8Fr 1 00 .hibytes 00fch +000E90r 1 00 .hibytes 00fdh +000E91r 1 00 .hibytes 00feh +000E92r 1 00 .hibytes 00ffh +000E93r 1 01 .hibytes 0100h +000E94r 1 01 .hibytes 0101h +000E95r 1 01 .hibytes 0102h +000E96r 1 01 .hibytes 0103h +000E97r 1 0F .hibytes 0fd2h +000E98r 1 0F .hibytes 0fd3h +000E99r 1 0F .hibytes 0fd4h +000E9Ar 1 0F .hibytes 0fd5h +000E9Br 1 0F .hibytes 0fd6h +000E9Cr 1 0F .hibytes 0fd7h +000E9Dr 1 0F .hibytes 0fd8h +000E9Er 1 0F .hibytes 0fd9h +000E9Fr 1 0F .hibytes 0fdah +000EA0r 1 0F .hibytes 0fdbh +000EA1r 1 0F .hibytes 0fdch +000EA2r 1 0F .hibytes 0fddh +000EA3r 1 0F .hibytes 0fdeh +000EA4r 1 0F .hibytes 0fdfh +000EA5r 1 0F .hibytes 0fe0h +000EA6r 1 0F .hibytes 0fe1h +000EA7r 1 0F .hibytes 0fe2h +000EA8r 1 0F .hibytes 0fe3h +000EA9r 1 0F .hibytes 0fe4h +000EAAr 1 0F .hibytes 0fe5h +000EABr 1 0F .hibytes 0fe6h +000EACr 1 0F .hibytes 0fe7h +000EADr 1 0F .hibytes 0fe8h +000EAEr 1 0F .hibytes 0fe9h +000EAFr 1 0F .hibytes 0feah +000EB0r 1 0F .hibytes 0febh +000EB1r 1 0F .hibytes 0fech +000EB2r 1 0F .hibytes 0fedh +000EB3r 1 0F .hibytes 0feeh +000EB4r 1 0F .hibytes 0fefh +000EB5r 1 0F .hibytes 0ff0h +000EB6r 1 0F .hibytes 0ff1h +000EB7r 1 0F .hibytes 0ff2h +000EB8r 1 0F .hibytes 0ff3h +000EB9r 1 0F .hibytes 0ff4h +000EBAr 1 0F .hibytes 0ff5h +000EBBr 1 0F .hibytes 0ff6h +000EBCr 1 0F .hibytes 0ff7h +000EBDr 1 0F .hibytes 0ff8h +000EBEr 1 0F .hibytes 0ff9h +000EBFr 1 0F .hibytes 0ffah +000EC0r 1 0F .hibytes 0ffbh +000EC1r 1 0F .hibytes 0ffch +000EC2r 1 0F .hibytes 0ffdh +000EC3r 1 0F .hibytes 0ffeh +000EC4r 1 0F .hibytes 0fffh +000EC5r 1 10 .hibytes 1000h +000EC6r 1 10 .hibytes 1001h +000EC7r 1 10 .hibytes 1002h +000EC8r 1 10 .hibytes 1003h +000EC9r 1 10 .hibytes 1004h +000ECAr 1 10 .hibytes 1005h +000ECBr 1 10 .hibytes 1006h +000ECCr 1 10 .hibytes 1007h +000ECDr 1 10 .hibytes 1008h +000ECEr 1 7F .hibytes 7ff0h +000ECFr 1 7F .hibytes 7ff1h +000ED0r 1 7F .hibytes 7ff2h +000ED1r 1 7F .hibytes 7ff3h +000ED2r 1 7F .hibytes 7ff4h +000ED3r 1 7F .hibytes 7ff5h +000ED4r 1 7F .hibytes 7ff6h +000ED5r 1 7F .hibytes 7ff7h +000ED6r 1 7F .hibytes 7ff8h +000ED7r 1 7F .hibytes 7ff9h +000ED8r 1 7F .hibytes 7ffah +000ED9r 1 7F .hibytes 7ffbh +000EDAr 1 7F .hibytes 7ffch +000EDBr 1 7F .hibytes 7ffdh +000EDCr 1 7F .hibytes 7ffeh +000EDDr 1 7F .hibytes 7fffh +000EDEr 1 80 .hibytes 8000h +000EDFr 1 80 .hibytes 8001h +000EE0r 1 80 .hibytes 8002h +000EE1r 1 80 .hibytes 8003h +000EE2r 1 80 .hibytes 8004h +000EE3r 1 80 .hibytes 8005h +000EE4r 1 80 .hibytes 8006h +000EE5r 1 80 .hibytes 8007h +000EE6r 1 80 .hibytes 8008h +000EE7r 1 80 .hibytes 8009h +000EE8r 1 80 .hibytes 800ah +000EE9r 1 80 .hibytes 800bh +000EEAr 1 9F .hibytes 9fe1h +000EEBr 1 9F .hibytes 9fe2h +000EECr 1 9F .hibytes 9fe3h +000EEDr 1 9F .hibytes 9fe4h +000EEEr 1 9F .hibytes 9fe5h +000EEFr 1 9F .hibytes 9fe6h +000EF0r 1 9F .hibytes 9fe7h +000EF1r 1 9F .hibytes 9fe8h +000EF2r 1 9F .hibytes 9fe9h +000EF3r 1 9F .hibytes 9feah +000EF4r 1 9F .hibytes 9febh +000EF5r 1 9F .hibytes 9fech +000EF6r 1 9F .hibytes 9fedh +000EF7r 1 9F .hibytes 9feeh +000EF8r 1 9F .hibytes 9fefh +000EF9r 1 9F .hibytes 9ff0h +000EFAr 1 9F .hibytes 9ff1h +000EFBr 1 9F .hibytes 9ff2h +000EFCr 1 9F .hibytes 9ff3h +000EFDr 1 9F .hibytes 9ff4h +000EFEr 1 9F .hibytes 9ff5h +000EFFr 1 9F .hibytes 9ff6h +000F00r 1 9F .hibytes 9ff7h +000F01r 1 9F .hibytes 9ff8h +000F02r 1 9F .hibytes 9ff9h +000F03r 1 9F .hibytes 9ffah +000F04r 1 9F .hibytes 9ffbh +000F05r 1 9F .hibytes 9ffch +000F06r 1 9F .hibytes 9ffdh +000F07r 1 9F .hibytes 9ffeh +000F08r 1 9F .hibytes 9fffh +000F09r 1 A0 .hibytes 0a000h +000F0Ar 1 A0 .hibytes 0a001h +000F0Br 1 A0 .hibytes 0a002h +000F0Cr 1 A0 .hibytes 0a003h +000F0Dr 1 A0 .hibytes 0a004h +000F0Er 1 A0 .hibytes 0a005h +000F0Fr 1 A0 .hibytes 0a006h +000F10r 1 A0 .hibytes 0a007h +000F11r 1 A0 .hibytes 0a008h +000F12r 1 A0 .hibytes 0a009h +000F13r 1 A0 .hibytes 0a00ah +000F14r 1 A0 .hibytes 0a00bh +000F15r 1 A0 .hibytes 0a00ch +000F16r 1 A0 .hibytes 0a00dh +000F17r 1 A0 .hibytes 0a00eh +000F18r 1 A0 .hibytes 0a00fh +000F19r 1 AF .hibytes 0afe1h +000F1Ar 1 AF .hibytes 0afe2h +000F1Br 1 AF .hibytes 0afe3h +000F1Cr 1 AF .hibytes 0afe4h +000F1Dr 1 AF .hibytes 0afe5h +000F1Er 1 AF .hibytes 0afe6h +000F1Fr 1 AF .hibytes 0afe7h +000F20r 1 AF .hibytes 0afe8h +000F21r 1 AF .hibytes 0afe9h +000F22r 1 AF .hibytes 0afeah +000F23r 1 AF .hibytes 0afebh +000F24r 1 AF .hibytes 0afech +000F25r 1 AF .hibytes 0afedh +000F26r 1 AF .hibytes 0afeeh +000F27r 1 AF .hibytes 0afefh +000F28r 1 AF .hibytes 0aff0h +000F29r 1 AF .hibytes 0aff1h +000F2Ar 1 AF .hibytes 0aff2h +000F2Br 1 AF .hibytes 0aff3h +000F2Cr 1 AF .hibytes 0aff4h +000F2Dr 1 AF .hibytes 0aff5h +000F2Er 1 AF .hibytes 0aff6h +000F2Fr 1 AF .hibytes 0aff7h +000F30r 1 AF .hibytes 0aff8h +000F31r 1 AF .hibytes 0aff9h +000F32r 1 AF .hibytes 0affah +000F33r 1 AF .hibytes 0affbh +000F34r 1 AF .hibytes 0affch +000F35r 1 AF .hibytes 0affdh +000F36r 1 AF .hibytes 0affeh +000F37r 1 AF .hibytes 0afffh +000F38r 1 B0 .hibytes 0b000h +000F39r 1 B0 .hibytes 0b001h +000F3Ar 1 B0 .hibytes 0b002h +000F3Br 1 B0 .hibytes 0b003h +000F3Cr 1 B0 .hibytes 0b004h +000F3Dr 1 B0 .hibytes 0b005h +000F3Er 1 B0 .hibytes 0b006h +000F3Fr 1 B0 .hibytes 0b007h +000F40r 1 B0 .hibytes 0b008h +000F41r 1 B0 .hibytes 0b009h +000F42r 1 B0 .hibytes 0b00ah +000F43r 1 B0 .hibytes 0b00bh +000F44r 1 B0 .hibytes 0b00ch +000F45r 1 B0 .hibytes 0b00dh +000F46r 1 B0 .hibytes 0b00eh +000F47r 1 B0 .hibytes 0b00fh +000F48r 1 BF .hibytes 0bfe1h +000F49r 1 BF .hibytes 0bfe2h +000F4Ar 1 BF .hibytes 0bfe3h +000F4Br 1 BF .hibytes 0bfe4h +000F4Cr 1 BF .hibytes 0bfe5h +000F4Dr 1 BF .hibytes 0bfe6h +000F4Er 1 BF .hibytes 0bfe7h +000F4Fr 1 BF .hibytes 0bfe8h +000F50r 1 BF .hibytes 0bfe9h +000F51r 1 BF .hibytes 0bfeah +000F52r 1 BF .hibytes 0bfebh +000F53r 1 BF .hibytes 0bfech +000F54r 1 BF .hibytes 0bfedh +000F55r 1 BF .hibytes 0bfeeh +000F56r 1 BF .hibytes 0bfefh +000F57r 1 BF .hibytes 0bff0h +000F58r 1 BF .hibytes 0bff1h +000F59r 1 BF .hibytes 0bff2h +000F5Ar 1 BF .hibytes 0bff3h +000F5Br 1 BF .hibytes 0bff4h +000F5Cr 1 BF .hibytes 0bff5h +000F5Dr 1 BF .hibytes 0bff6h +000F5Er 1 BF .hibytes 0bff7h +000F5Fr 1 BF .hibytes 0bff8h +000F60r 1 BF .hibytes 0bff9h +000F61r 1 BF .hibytes 0bffah +000F62r 1 BF .hibytes 0bffbh +000F63r 1 BF .hibytes 0bffch +000F64r 1 BF .hibytes 0bffdh +000F65r 1 BF .hibytes 0bffeh +000F66r 1 BF .hibytes 0bfffh +000F67r 1 C0 .hibytes 0c000h +000F68r 1 C0 .hibytes 0c001h +000F69r 1 C0 .hibytes 0c002h +000F6Ar 1 C0 .hibytes 0c003h +000F6Br 1 C0 .hibytes 0c004h +000F6Cr 1 C0 .hibytes 0c005h +000F6Dr 1 C0 .hibytes 0c006h +000F6Er 1 C0 .hibytes 0c007h +000F6Fr 1 C0 .hibytes 0c008h +000F70r 1 C0 .hibytes 0c009h +000F71r 1 C0 .hibytes 0c00ah +000F72r 1 C0 .hibytes 0c00bh +000F73r 1 C0 .hibytes 0c00ch +000F74r 1 C0 .hibytes 0c00dh +000F75r 1 C0 .hibytes 0c00eh +000F76r 1 C0 .hibytes 0c00fh +000F77r 1 CF .hibytes 0cfe1h +000F78r 1 CF .hibytes 0cfe2h +000F79r 1 CF .hibytes 0cfe3h +000F7Ar 1 CF .hibytes 0cfe4h +000F7Br 1 CF .hibytes 0cfe5h +000F7Cr 1 CF .hibytes 0cfe6h +000F7Dr 1 CF .hibytes 0cfe7h +000F7Er 1 CF .hibytes 0cfe8h +000F7Fr 1 CF .hibytes 0cfe9h +000F80r 1 CF .hibytes 0cfeah +000F81r 1 CF .hibytes 0cfebh +000F82r 1 CF .hibytes 0cfech +000F83r 1 CF .hibytes 0cfedh +000F84r 1 CF .hibytes 0cfeeh +000F85r 1 CF .hibytes 0cfefh +000F86r 1 CF .hibytes 0cff0h +000F87r 1 CF .hibytes 0cff1h +000F88r 1 CF .hibytes 0cff2h +000F89r 1 CF .hibytes 0cff3h +000F8Ar 1 CF .hibytes 0cff4h +000F8Br 1 CF .hibytes 0cff5h +000F8Cr 1 CF .hibytes 0cff6h +000F8Dr 1 CF .hibytes 0cff7h +000F8Er 1 CF .hibytes 0cff8h +000F8Fr 1 CF .hibytes 0cff9h +000F90r 1 CF .hibytes 0cffah +000F91r 1 CF .hibytes 0cffbh +000F92r 1 CF .hibytes 0cffch +000F93r 1 CF .hibytes 0cffdh +000F94r 1 CF .hibytes 0cffeh +000F95r 1 CF .hibytes 0cfffh +000F96r 1 D0 .hibytes 0d000h +000F97r 1 D0 .hibytes 0d001h +000F98r 1 D0 .hibytes 0d002h +000F99r 1 D0 .hibytes 0d003h +000F9Ar 1 D0 .hibytes 0d004h +000F9Br 1 D0 .hibytes 0d005h +000F9Cr 1 D0 .hibytes 0d006h +000F9Dr 1 D0 .hibytes 0d007h +000F9Er 1 D0 .hibytes 0d008h +000F9Fr 1 D0 .hibytes 0d009h +000FA0r 1 D0 .hibytes 0d00ah +000FA1r 1 D0 .hibytes 0d00bh +000FA2r 1 D0 .hibytes 0d00ch +000FA3r 1 D0 .hibytes 0d00dh +000FA4r 1 D0 .hibytes 0d00eh +000FA5r 1 D0 .hibytes 0d00fh +000FA6r 1 DF .hibytes 0dfe1h +000FA7r 1 DF .hibytes 0dfe2h +000FA8r 1 DF .hibytes 0dfe3h +000FA9r 1 DF .hibytes 0dfe4h +000FAAr 1 DF .hibytes 0dfe5h +000FABr 1 DF .hibytes 0dfe6h +000FACr 1 DF .hibytes 0dfe7h +000FADr 1 DF .hibytes 0dfe8h +000FAEr 1 DF .hibytes 0dfe9h +000FAFr 1 DF .hibytes 0dfeah +000FB0r 1 DF .hibytes 0dfebh +000FB1r 1 DF .hibytes 0dfech +000FB2r 1 DF .hibytes 0dfedh +000FB3r 1 DF .hibytes 0dfeeh +000FB4r 1 DF .hibytes 0dfefh +000FB5r 1 DF .hibytes 0dff0h +000FB6r 1 DF .hibytes 0dff1h +000FB7r 1 DF .hibytes 0dff2h +000FB8r 1 DF .hibytes 0dff3h +000FB9r 1 DF .hibytes 0dff4h +000FBAr 1 DF .hibytes 0dff5h +000FBBr 1 DF .hibytes 0dff6h +000FBCr 1 DF .hibytes 0dff7h +000FBDr 1 DF .hibytes 0dff8h +000FBEr 1 DF .hibytes 0dff9h +000FBFr 1 DF .hibytes 0dffah +000FC0r 1 DF .hibytes 0dffbh +000FC1r 1 DF .hibytes 0dffch +000FC2r 1 DF .hibytes 0dffdh +000FC3r 1 DF .hibytes 0dffeh +000FC4r 1 DF .hibytes 0dfffh +000FC5r 1 E0 .hibytes 0e000h +000FC6r 1 E0 .hibytes 0e001h +000FC7r 1 E0 .hibytes 0e002h +000FC8r 1 E0 .hibytes 0e003h +000FC9r 1 E0 .hibytes 0e004h +000FCAr 1 E0 .hibytes 0e005h +000FCBr 1 E0 .hibytes 0e006h +000FCCr 1 E0 .hibytes 0e007h +000FCDr 1 E0 .hibytes 0e008h +000FCEr 1 E0 .hibytes 0e009h +000FCFr 1 E0 .hibytes 0e00ah +000FD0r 1 E0 .hibytes 0e00bh +000FD1r 1 E0 .hibytes 0e00ch +000FD2r 1 E0 .hibytes 0e00dh +000FD3r 1 E0 .hibytes 0e00eh +000FD4r 1 E0 .hibytes 0e00fh +000FD5r 1 EF .hibytes 0efe1h +000FD6r 1 EF .hibytes 0efe2h +000FD7r 1 EF .hibytes 0efe3h +000FD8r 1 EF .hibytes 0efe4h +000FD9r 1 EF .hibytes 0efe5h +000FDAr 1 EF .hibytes 0efe6h +000FDBr 1 EF .hibytes 0efe7h +000FDCr 1 EF .hibytes 0efe8h +000FDDr 1 EF .hibytes 0efe9h +000FDEr 1 EF .hibytes 0efeah +000FDFr 1 EF .hibytes 0efebh +000FE0r 1 EF .hibytes 0efech +000FE1r 1 EF .hibytes 0efedh +000FE2r 1 EF .hibytes 0efeeh +000FE3r 1 EF .hibytes 0efefh +000FE4r 1 EF .hibytes 0eff0h +000FE5r 1 EF .hibytes 0eff1h +000FE6r 1 EF .hibytes 0eff2h +000FE7r 1 EF .hibytes 0eff3h +000FE8r 1 EF .hibytes 0eff4h +000FE9r 1 EF .hibytes 0eff5h +000FEAr 1 EF .hibytes 0eff6h +000FEBr 1 EF .hibytes 0eff7h +000FECr 1 EF .hibytes 0eff8h +000FEDr 1 EF .hibytes 0eff9h +000FEEr 1 EF .hibytes 0effah +000FEFr 1 EF .hibytes 0effbh +000FF0r 1 EF .hibytes 0effch +000FF1r 1 EF .hibytes 0effdh +000FF2r 1 EF .hibytes 0effeh +000FF3r 1 EF .hibytes 0efffh +000FF4r 1 F0 .hibytes 0f000h +000FF5r 1 F0 .hibytes 0f001h +000FF6r 1 F0 .hibytes 0f002h +000FF7r 1 F0 .hibytes 0f003h +000FF8r 1 F0 .hibytes 0f004h +000FF9r 1 F0 .hibytes 0f005h +000FFAr 1 F0 .hibytes 0f006h +000FFBr 1 F0 .hibytes 0f007h +000FFCr 1 F0 .hibytes 0f008h +000FFDr 1 F0 .hibytes 0f009h +000FFEr 1 F0 .hibytes 0f00ah +000FFFr 1 F0 .hibytes 0f00bh +001000r 1 F0 .hibytes 0f00ch +001001r 1 F0 .hibytes 0f00dh +001002r 1 F0 .hibytes 0f00eh +001003r 1 F0 .hibytes 0f00fh +001004r 1 FF .hibytes 0ffe1h +001005r 1 FF .hibytes 0ffe2h +001006r 1 FF .hibytes 0ffe3h +001007r 1 FF .hibytes 0ffe4h +001008r 1 FF .hibytes 0ffe5h +001009r 1 FF .hibytes 0ffe6h +00100Ar 1 FF .hibytes 0ffe7h +00100Br 1 FF .hibytes 0ffe8h +00100Cr 1 FF .hibytes 0ffe9h +00100Dr 1 FF .hibytes 0ffeah +00100Er 1 FF .hibytes 0ffebh +00100Fr 1 FF .hibytes 0ffech +001010r 1 FF .hibytes 0ffedh +001011r 1 FF .hibytes 0ffeeh +001012r 1 FF .hibytes 0ffefh +001013r 1 FF .hibytes 0fff0h +001014r 1 FF .hibytes 0fff1h +001015r 1 FF .hibytes 0fff2h +001016r 1 FF .hibytes 0fff3h +001017r 1 FF .hibytes 0fff4h +001018r 1 FF .hibytes 0fff5h +001019r 1 FF .hibytes 0fff6h +00101Ar 1 FF .hibytes 0fff7h +00101Br 1 FF .hibytes 0fff8h +00101Cr 1 FF .hibytes 0fff9h +00101Dr 1 FF .hibytes 0fffah +00101Er 1 FF .hibytes 0fffbh +00101Fr 1 FF .hibytes 0fffch +001020r 1 FF .hibytes 0fffdh +001021r 1 FF .hibytes 0fffeh +001022r 1 FF .hibytes 0ffffh +001023r 1 +001023r 1 ; alternative 4-digit hex values, uppercase +001023r 1 00 .hibytes 0000h +001024r 1 00 .hibytes 0001h +001025r 1 00 .hibytes 0002h +001026r 1 00 .hibytes 0003h +001027r 1 00 .hibytes 0004h +001028r 1 00 .hibytes 0005h +001029r 1 00 .hibytes 0006h +00102Ar 1 00 .hibytes 0007h +00102Br 1 00 .hibytes 0008h +00102Cr 1 00 .hibytes 0009h +00102Dr 1 00 .hibytes 000Ah +00102Er 1 00 .hibytes 000Bh +00102Fr 1 00 .hibytes 000Ch +001030r 1 00 .hibytes 000Dh +001031r 1 00 .hibytes 000Eh +001032r 1 00 .hibytes 000Fh +001033r 1 00 .hibytes 0010h +001034r 1 00 .hibytes 0011h +001035r 1 00 .hibytes 0012h +001036r 1 00 .hibytes 0013h +001037r 1 00 .hibytes 0070h +001038r 1 00 .hibytes 0071h +001039r 1 00 .hibytes 0072h +00103Ar 1 00 .hibytes 0073h +00103Br 1 00 .hibytes 0074h +00103Cr 1 00 .hibytes 0075h +00103Dr 1 00 .hibytes 0076h +00103Er 1 00 .hibytes 0077h +00103Fr 1 00 .hibytes 0078h +001040r 1 00 .hibytes 0079h +001041r 1 00 .hibytes 007Ah +001042r 1 00 .hibytes 007Bh +001043r 1 00 .hibytes 007Ch +001044r 1 00 .hibytes 007Dh +001045r 1 00 .hibytes 007Eh +001046r 1 00 .hibytes 007Fh +001047r 1 00 .hibytes 0080h +001048r 1 00 .hibytes 0081h +001049r 1 00 .hibytes 0082h +00104Ar 1 00 .hibytes 0083h +00104Br 1 00 .hibytes 0084h +00104Cr 1 00 .hibytes 0085h +00104Dr 1 00 .hibytes 0086h +00104Er 1 00 .hibytes 00F0h +00104Fr 1 00 .hibytes 00F1h +001050r 1 00 .hibytes 00F2h +001051r 1 00 .hibytes 00F3h +001052r 1 00 .hibytes 00F4h +001053r 1 00 .hibytes 00F5h +001054r 1 00 .hibytes 00F6h +001055r 1 00 .hibytes 00F7h +001056r 1 00 .hibytes 00F8h +001057r 1 00 .hibytes 00F9h +001058r 1 00 .hibytes 00FAh +001059r 1 00 .hibytes 00FBh +00105Ar 1 00 .hibytes 00FCh +00105Br 1 00 .hibytes 00FDh +00105Cr 1 00 .hibytes 00FEh +00105Dr 1 00 .hibytes 00FFh +00105Er 1 01 .hibytes 0100h +00105Fr 1 01 .hibytes 0101h +001060r 1 01 .hibytes 0102h +001061r 1 01 .hibytes 0103h +001062r 1 0F .hibytes 0FD2h +001063r 1 0F .hibytes 0FD3h +001064r 1 0F .hibytes 0FD4h +001065r 1 0F .hibytes 0FD5h +001066r 1 0F .hibytes 0FD6h +001067r 1 0F .hibytes 0FD7h +001068r 1 0F .hibytes 0FD8h +001069r 1 0F .hibytes 0FD9h +00106Ar 1 0F .hibytes 0FDAh +00106Br 1 0F .hibytes 0FDBh +00106Cr 1 0F .hibytes 0FDCh +00106Dr 1 0F .hibytes 0FDDh +00106Er 1 0F .hibytes 0FDEh +00106Fr 1 0F .hibytes 0FDFh +001070r 1 0F .hibytes 0FE0h +001071r 1 0F .hibytes 0FE1h +001072r 1 0F .hibytes 0FE2h +001073r 1 0F .hibytes 0FE3h +001074r 1 0F .hibytes 0FE4h +001075r 1 0F .hibytes 0FE5h +001076r 1 0F .hibytes 0FE6h +001077r 1 0F .hibytes 0FE7h +001078r 1 0F .hibytes 0FE8h +001079r 1 0F .hibytes 0FE9h +00107Ar 1 0F .hibytes 0FEAh +00107Br 1 0F .hibytes 0FEBh +00107Cr 1 0F .hibytes 0FECh +00107Dr 1 0F .hibytes 0FEDh +00107Er 1 0F .hibytes 0FEEh +00107Fr 1 0F .hibytes 0FEFh +001080r 1 0F .hibytes 0FF0h +001081r 1 0F .hibytes 0FF1h +001082r 1 0F .hibytes 0FF2h +001083r 1 0F .hibytes 0FF3h +001084r 1 0F .hibytes 0FF4h +001085r 1 0F .hibytes 0FF5h +001086r 1 0F .hibytes 0FF6h +001087r 1 0F .hibytes 0FF7h +001088r 1 0F .hibytes 0FF8h +001089r 1 0F .hibytes 0FF9h +00108Ar 1 0F .hibytes 0FFAh +00108Br 1 0F .hibytes 0FFBh +00108Cr 1 0F .hibytes 0FFCh +00108Dr 1 0F .hibytes 0FFDh +00108Er 1 0F .hibytes 0FFEh +00108Fr 1 0F .hibytes 0FFFh +001090r 1 10 .hibytes 1000h +001091r 1 10 .hibytes 1001h +001092r 1 10 .hibytes 1002h +001093r 1 10 .hibytes 1003h +001094r 1 10 .hibytes 1004h +001095r 1 10 .hibytes 1005h +001096r 1 10 .hibytes 1006h +001097r 1 10 .hibytes 1007h +001098r 1 10 .hibytes 1008h +001099r 1 7F .hibytes 7FF0h +00109Ar 1 7F .hibytes 7FF1h +00109Br 1 7F .hibytes 7FF2h +00109Cr 1 7F .hibytes 7FF3h +00109Dr 1 7F .hibytes 7FF4h +00109Er 1 7F .hibytes 7FF5h +00109Fr 1 7F .hibytes 7FF6h +0010A0r 1 7F .hibytes 7FF7h +0010A1r 1 7F .hibytes 7FF8h +0010A2r 1 7F .hibytes 7FF9h +0010A3r 1 7F .hibytes 7FFAh +0010A4r 1 7F .hibytes 7FFBh +0010A5r 1 7F .hibytes 7FFCh +0010A6r 1 7F .hibytes 7FFDh +0010A7r 1 7F .hibytes 7FFEh +0010A8r 1 7F .hibytes 7FFFh +0010A9r 1 80 .hibytes 8000h +0010AAr 1 80 .hibytes 8001h +0010ABr 1 80 .hibytes 8002h +0010ACr 1 80 .hibytes 8003h +0010ADr 1 80 .hibytes 8004h +0010AEr 1 80 .hibytes 8005h +0010AFr 1 80 .hibytes 8006h +0010B0r 1 80 .hibytes 8007h +0010B1r 1 80 .hibytes 8008h +0010B2r 1 80 .hibytes 8009h +0010B3r 1 80 .hibytes 800Ah +0010B4r 1 80 .hibytes 800Bh +0010B5r 1 9F .hibytes 9FE1h +0010B6r 1 9F .hibytes 9FE2h +0010B7r 1 9F .hibytes 9FE3h +0010B8r 1 9F .hibytes 9FE4h +0010B9r 1 9F .hibytes 9FE5h +0010BAr 1 9F .hibytes 9FE6h +0010BBr 1 9F .hibytes 9FE7h +0010BCr 1 9F .hibytes 9FE8h +0010BDr 1 9F .hibytes 9FE9h +0010BEr 1 9F .hibytes 9FEAh +0010BFr 1 9F .hibytes 9FEBh +0010C0r 1 9F .hibytes 9FECh +0010C1r 1 9F .hibytes 9FEDh +0010C2r 1 9F .hibytes 9FEEh +0010C3r 1 9F .hibytes 9FEFh +0010C4r 1 9F .hibytes 9FF0h +0010C5r 1 9F .hibytes 9FF1h +0010C6r 1 9F .hibytes 9FF2h +0010C7r 1 9F .hibytes 9FF3h +0010C8r 1 9F .hibytes 9FF4h +0010C9r 1 9F .hibytes 9FF5h +0010CAr 1 9F .hibytes 9FF6h +0010CBr 1 9F .hibytes 9FF7h +0010CCr 1 9F .hibytes 9FF8h +0010CDr 1 9F .hibytes 9FF9h +0010CEr 1 9F .hibytes 9FFAh +0010CFr 1 9F .hibytes 9FFBh +0010D0r 1 9F .hibytes 9FFCh +0010D1r 1 9F .hibytes 9FFDh +0010D2r 1 9F .hibytes 9FFEh +0010D3r 1 9F .hibytes 9FFFh +0010D4r 1 A0 .hibytes 0A000h +0010D5r 1 A0 .hibytes 0A001h +0010D6r 1 A0 .hibytes 0A002h +0010D7r 1 A0 .hibytes 0A003h +0010D8r 1 A0 .hibytes 0A004h +0010D9r 1 A0 .hibytes 0A005h +0010DAr 1 A0 .hibytes 0A006h +0010DBr 1 A0 .hibytes 0A007h +0010DCr 1 A0 .hibytes 0A008h +0010DDr 1 A0 .hibytes 0A009h +0010DEr 1 A0 .hibytes 0A00Ah +0010DFr 1 A0 .hibytes 0A00Bh +0010E0r 1 A0 .hibytes 0A00Ch +0010E1r 1 A0 .hibytes 0A00Dh +0010E2r 1 A0 .hibytes 0A00Eh +0010E3r 1 A0 .hibytes 0A00Fh +0010E4r 1 AF .hibytes 0AFE1h +0010E5r 1 AF .hibytes 0AFE2h +0010E6r 1 AF .hibytes 0AFE3h +0010E7r 1 AF .hibytes 0AFE4h +0010E8r 1 AF .hibytes 0AFE5h +0010E9r 1 AF .hibytes 0AFE6h +0010EAr 1 AF .hibytes 0AFE7h +0010EBr 1 AF .hibytes 0AFE8h +0010ECr 1 AF .hibytes 0AFE9h +0010EDr 1 AF .hibytes 0AFEAh +0010EEr 1 AF .hibytes 0AFEBh +0010EFr 1 AF .hibytes 0AFECh +0010F0r 1 AF .hibytes 0AFEDh +0010F1r 1 AF .hibytes 0AFEEh +0010F2r 1 AF .hibytes 0AFEFh +0010F3r 1 AF .hibytes 0AFF0h +0010F4r 1 AF .hibytes 0AFF1h +0010F5r 1 AF .hibytes 0AFF2h +0010F6r 1 AF .hibytes 0AFF3h +0010F7r 1 AF .hibytes 0AFF4h +0010F8r 1 AF .hibytes 0AFF5h +0010F9r 1 AF .hibytes 0AFF6h +0010FAr 1 AF .hibytes 0AFF7h +0010FBr 1 AF .hibytes 0AFF8h +0010FCr 1 AF .hibytes 0AFF9h +0010FDr 1 AF .hibytes 0AFFAh +0010FEr 1 AF .hibytes 0AFFBh +0010FFr 1 AF .hibytes 0AFFCh +001100r 1 AF .hibytes 0AFFDh +001101r 1 AF .hibytes 0AFFEh +001102r 1 AF .hibytes 0AFFFh +001103r 1 B0 .hibytes 0B000h +001104r 1 B0 .hibytes 0B001h +001105r 1 B0 .hibytes 0B002h +001106r 1 B0 .hibytes 0B003h +001107r 1 B0 .hibytes 0B004h +001108r 1 B0 .hibytes 0B005h +001109r 1 B0 .hibytes 0B006h +00110Ar 1 B0 .hibytes 0B007h +00110Br 1 B0 .hibytes 0B008h +00110Cr 1 B0 .hibytes 0B009h +00110Dr 1 B0 .hibytes 0B00Ah +00110Er 1 B0 .hibytes 0B00Bh +00110Fr 1 B0 .hibytes 0B00Ch +001110r 1 B0 .hibytes 0B00Dh +001111r 1 B0 .hibytes 0B00Eh +001112r 1 B0 .hibytes 0B00Fh +001113r 1 BF .hibytes 0BFE1h +001114r 1 BF .hibytes 0BFE2h +001115r 1 BF .hibytes 0BFE3h +001116r 1 BF .hibytes 0BFE4h +001117r 1 BF .hibytes 0BFE5h +001118r 1 BF .hibytes 0BFE6h +001119r 1 BF .hibytes 0BFE7h +00111Ar 1 BF .hibytes 0BFE8h +00111Br 1 BF .hibytes 0BFE9h +00111Cr 1 BF .hibytes 0BFEAh +00111Dr 1 BF .hibytes 0BFEBh +00111Er 1 BF .hibytes 0BFECh +00111Fr 1 BF .hibytes 0BFEDh +001120r 1 BF .hibytes 0BFEEh +001121r 1 BF .hibytes 0BFEFh +001122r 1 BF .hibytes 0BFF0h +001123r 1 BF .hibytes 0BFF1h +001124r 1 BF .hibytes 0BFF2h +001125r 1 BF .hibytes 0BFF3h +001126r 1 BF .hibytes 0BFF4h +001127r 1 BF .hibytes 0BFF5h +001128r 1 BF .hibytes 0BFF6h +001129r 1 BF .hibytes 0BFF7h +00112Ar 1 BF .hibytes 0BFF8h +00112Br 1 BF .hibytes 0BFF9h +00112Cr 1 BF .hibytes 0BFFAh +00112Dr 1 BF .hibytes 0BFFBh +00112Er 1 BF .hibytes 0BFFCh +00112Fr 1 BF .hibytes 0BFFDh +001130r 1 BF .hibytes 0BFFEh +001131r 1 BF .hibytes 0BFFFh +001132r 1 C0 .hibytes 0C000h +001133r 1 C0 .hibytes 0C001h +001134r 1 C0 .hibytes 0C002h +001135r 1 C0 .hibytes 0C003h +001136r 1 C0 .hibytes 0C004h +001137r 1 C0 .hibytes 0C005h +001138r 1 C0 .hibytes 0C006h +001139r 1 C0 .hibytes 0C007h +00113Ar 1 C0 .hibytes 0C008h +00113Br 1 C0 .hibytes 0C009h +00113Cr 1 C0 .hibytes 0C00Ah +00113Dr 1 C0 .hibytes 0C00Bh +00113Er 1 C0 .hibytes 0C00Ch +00113Fr 1 C0 .hibytes 0C00Dh +001140r 1 C0 .hibytes 0C00Eh +001141r 1 C0 .hibytes 0C00Fh +001142r 1 CF .hibytes 0CFE1h +001143r 1 CF .hibytes 0CFE2h +001144r 1 CF .hibytes 0CFE3h +001145r 1 CF .hibytes 0CFE4h +001146r 1 CF .hibytes 0CFE5h +001147r 1 CF .hibytes 0CFE6h +001148r 1 CF .hibytes 0CFE7h +001149r 1 CF .hibytes 0CFE8h +00114Ar 1 CF .hibytes 0CFE9h +00114Br 1 CF .hibytes 0CFEAh +00114Cr 1 CF .hibytes 0CFEBh +00114Dr 1 CF .hibytes 0CFECh +00114Er 1 CF .hibytes 0CFEDh +00114Fr 1 CF .hibytes 0CFEEh +001150r 1 CF .hibytes 0CFEFh +001151r 1 CF .hibytes 0CFF0h +001152r 1 CF .hibytes 0CFF1h +001153r 1 CF .hibytes 0CFF2h +001154r 1 CF .hibytes 0CFF3h +001155r 1 CF .hibytes 0CFF4h +001156r 1 CF .hibytes 0CFF5h +001157r 1 CF .hibytes 0CFF6h +001158r 1 CF .hibytes 0CFF7h +001159r 1 CF .hibytes 0CFF8h +00115Ar 1 CF .hibytes 0CFF9h +00115Br 1 CF .hibytes 0CFFAh +00115Cr 1 CF .hibytes 0CFFBh +00115Dr 1 CF .hibytes 0CFFCh +00115Er 1 CF .hibytes 0CFFDh +00115Fr 1 CF .hibytes 0CFFEh +001160r 1 CF .hibytes 0CFFFh +001161r 1 D0 .hibytes 0D000h +001162r 1 D0 .hibytes 0D001h +001163r 1 D0 .hibytes 0D002h +001164r 1 D0 .hibytes 0D003h +001165r 1 D0 .hibytes 0D004h +001166r 1 D0 .hibytes 0D005h +001167r 1 D0 .hibytes 0D006h +001168r 1 D0 .hibytes 0D007h +001169r 1 D0 .hibytes 0D008h +00116Ar 1 D0 .hibytes 0D009h +00116Br 1 D0 .hibytes 0D00Ah +00116Cr 1 D0 .hibytes 0D00Bh +00116Dr 1 D0 .hibytes 0D00Ch +00116Er 1 D0 .hibytes 0D00Dh +00116Fr 1 D0 .hibytes 0D00Eh +001170r 1 D0 .hibytes 0D00Fh +001171r 1 DF .hibytes 0DFE1h +001172r 1 DF .hibytes 0DFE2h +001173r 1 DF .hibytes 0DFE3h +001174r 1 DF .hibytes 0DFE4h +001175r 1 DF .hibytes 0DFE5h +001176r 1 DF .hibytes 0DFE6h +001177r 1 DF .hibytes 0DFE7h +001178r 1 DF .hibytes 0DFE8h +001179r 1 DF .hibytes 0DFE9h +00117Ar 1 DF .hibytes 0DFEAh +00117Br 1 DF .hibytes 0DFEBh +00117Cr 1 DF .hibytes 0DFECh +00117Dr 1 DF .hibytes 0DFEDh +00117Er 1 DF .hibytes 0DFEEh +00117Fr 1 DF .hibytes 0DFEFh +001180r 1 DF .hibytes 0DFF0h +001181r 1 DF .hibytes 0DFF1h +001182r 1 DF .hibytes 0DFF2h +001183r 1 DF .hibytes 0DFF3h +001184r 1 DF .hibytes 0DFF4h +001185r 1 DF .hibytes 0DFF5h +001186r 1 DF .hibytes 0DFF6h +001187r 1 DF .hibytes 0DFF7h +001188r 1 DF .hibytes 0DFF8h +001189r 1 DF .hibytes 0DFF9h +00118Ar 1 DF .hibytes 0DFFAh +00118Br 1 DF .hibytes 0DFFBh +00118Cr 1 DF .hibytes 0DFFCh +00118Dr 1 DF .hibytes 0DFFDh +00118Er 1 DF .hibytes 0DFFEh +00118Fr 1 DF .hibytes 0DFFFh +001190r 1 E0 .hibytes 0E000h +001191r 1 E0 .hibytes 0E001h +001192r 1 E0 .hibytes 0E002h +001193r 1 E0 .hibytes 0E003h +001194r 1 E0 .hibytes 0E004h +001195r 1 E0 .hibytes 0E005h +001196r 1 E0 .hibytes 0E006h +001197r 1 E0 .hibytes 0E007h +001198r 1 E0 .hibytes 0E008h +001199r 1 E0 .hibytes 0E009h +00119Ar 1 E0 .hibytes 0E00Ah +00119Br 1 E0 .hibytes 0E00Bh +00119Cr 1 E0 .hibytes 0E00Ch +00119Dr 1 E0 .hibytes 0E00Dh +00119Er 1 E0 .hibytes 0E00Eh +00119Fr 1 E0 .hibytes 0E00Fh +0011A0r 1 EF .hibytes 0EFE1h +0011A1r 1 EF .hibytes 0EFE2h +0011A2r 1 EF .hibytes 0EFE3h +0011A3r 1 EF .hibytes 0EFE4h +0011A4r 1 EF .hibytes 0EFE5h +0011A5r 1 EF .hibytes 0EFE6h +0011A6r 1 EF .hibytes 0EFE7h +0011A7r 1 EF .hibytes 0EFE8h +0011A8r 1 EF .hibytes 0EFE9h +0011A9r 1 EF .hibytes 0EFEAh +0011AAr 1 EF .hibytes 0EFEBh +0011ABr 1 EF .hibytes 0EFECh +0011ACr 1 EF .hibytes 0EFEDh +0011ADr 1 EF .hibytes 0EFEEh +0011AEr 1 EF .hibytes 0EFEFh +0011AFr 1 EF .hibytes 0EFF0h +0011B0r 1 EF .hibytes 0EFF1h +0011B1r 1 EF .hibytes 0EFF2h +0011B2r 1 EF .hibytes 0EFF3h +0011B3r 1 EF .hibytes 0EFF4h +0011B4r 1 EF .hibytes 0EFF5h +0011B5r 1 EF .hibytes 0EFF6h +0011B6r 1 EF .hibytes 0EFF7h +0011B7r 1 EF .hibytes 0EFF8h +0011B8r 1 EF .hibytes 0EFF9h +0011B9r 1 EF .hibytes 0EFFAh +0011BAr 1 EF .hibytes 0EFFBh +0011BBr 1 EF .hibytes 0EFFCh +0011BCr 1 EF .hibytes 0EFFDh +0011BDr 1 EF .hibytes 0EFFEh +0011BEr 1 EF .hibytes 0EFFFh +0011BFr 1 F0 .hibytes 0F000h +0011C0r 1 F0 .hibytes 0F001h +0011C1r 1 F0 .hibytes 0F002h +0011C2r 1 F0 .hibytes 0F003h +0011C3r 1 F0 .hibytes 0F004h +0011C4r 1 F0 .hibytes 0F005h +0011C5r 1 F0 .hibytes 0F006h +0011C6r 1 F0 .hibytes 0F007h +0011C7r 1 F0 .hibytes 0F008h +0011C8r 1 F0 .hibytes 0F009h +0011C9r 1 F0 .hibytes 0F00Ah +0011CAr 1 F0 .hibytes 0F00Bh +0011CBr 1 F0 .hibytes 0F00Ch +0011CCr 1 F0 .hibytes 0F00Dh +0011CDr 1 F0 .hibytes 0F00Eh +0011CEr 1 F0 .hibytes 0F00Fh +0011CFr 1 FF .hibytes 0FFE1h +0011D0r 1 FF .hibytes 0FFE2h +0011D1r 1 FF .hibytes 0FFE3h +0011D2r 1 FF .hibytes 0FFE4h +0011D3r 1 FF .hibytes 0FFE5h +0011D4r 1 FF .hibytes 0FFE6h +0011D5r 1 FF .hibytes 0FFE7h +0011D6r 1 FF .hibytes 0FFE8h +0011D7r 1 FF .hibytes 0FFE9h +0011D8r 1 FF .hibytes 0FFEAh +0011D9r 1 FF .hibytes 0FFEBh +0011DAr 1 FF .hibytes 0FFECh +0011DBr 1 FF .hibytes 0FFEDh +0011DCr 1 FF .hibytes 0FFEEh +0011DDr 1 FF .hibytes 0FFEFh +0011DEr 1 FF .hibytes 0FFF0h +0011DFr 1 FF .hibytes 0FFF1h +0011E0r 1 FF .hibytes 0FFF2h +0011E1r 1 FF .hibytes 0FFF3h +0011E2r 1 FF .hibytes 0FFF4h +0011E3r 1 FF .hibytes 0FFF5h +0011E4r 1 FF .hibytes 0FFF6h +0011E5r 1 FF .hibytes 0FFF7h +0011E6r 1 FF .hibytes 0FFF8h +0011E7r 1 FF .hibytes 0FFF9h +0011E8r 1 FF .hibytes 0FFFAh +0011E9r 1 FF .hibytes 0FFFBh +0011EAr 1 FF .hibytes 0FFFCh +0011EBr 1 FF .hibytes 0FFFDh +0011ECr 1 FF .hibytes 0FFFEh +0011EDr 1 FF .hibytes 0FFFFh +0011EEr 1 +0011EEr 1 ; alternative hex values, always leading zero +0011EEr 1 00 .hibytes 00h +0011EFr 1 00 .hibytes 01h +0011F0r 1 00 .hibytes 02h +0011F1r 1 00 .hibytes 03h +0011F2r 1 00 .hibytes 04h +0011F3r 1 00 .hibytes 05h +0011F4r 1 00 .hibytes 06h +0011F5r 1 00 .hibytes 07h +0011F6r 1 00 .hibytes 08h +0011F7r 1 00 .hibytes 09h +0011F8r 1 00 .hibytes 0ah +0011F9r 1 00 .hibytes 0bh +0011FAr 1 00 .hibytes 0ch +0011FBr 1 00 .hibytes 0dh +0011FCr 1 00 .hibytes 0eh +0011FDr 1 00 .hibytes 0fh +0011FEr 1 00 .hibytes 010h +0011FFr 1 00 .hibytes 011h +001200r 1 00 .hibytes 012h +001201r 1 00 .hibytes 013h +001202r 1 00 .hibytes 070h +001203r 1 00 .hibytes 071h +001204r 1 00 .hibytes 072h +001205r 1 00 .hibytes 073h +001206r 1 00 .hibytes 074h +001207r 1 00 .hibytes 075h +001208r 1 00 .hibytes 076h +001209r 1 00 .hibytes 077h +00120Ar 1 00 .hibytes 078h +00120Br 1 00 .hibytes 079h +00120Cr 1 00 .hibytes 07ah +00120Dr 1 00 .hibytes 07bh +00120Er 1 00 .hibytes 07ch +00120Fr 1 00 .hibytes 07dh +001210r 1 00 .hibytes 07eh +001211r 1 00 .hibytes 07fh +001212r 1 00 .hibytes 080h +001213r 1 00 .hibytes 081h +001214r 1 00 .hibytes 082h +001215r 1 00 .hibytes 083h +001216r 1 00 .hibytes 084h +001217r 1 00 .hibytes 085h +001218r 1 00 .hibytes 086h +001219r 1 00 .hibytes 0f0h +00121Ar 1 00 .hibytes 0f1h +00121Br 1 00 .hibytes 0f2h +00121Cr 1 00 .hibytes 0f3h +00121Dr 1 00 .hibytes 0f4h +00121Er 1 00 .hibytes 0f5h +00121Fr 1 00 .hibytes 0f6h +001220r 1 00 .hibytes 0f7h +001221r 1 00 .hibytes 0f8h +001222r 1 00 .hibytes 0f9h +001223r 1 00 .hibytes 0fah +001224r 1 00 .hibytes 0fbh +001225r 1 00 .hibytes 0fch +001226r 1 00 .hibytes 0fdh +001227r 1 00 .hibytes 0feh +001228r 1 00 .hibytes 0ffh +001229r 1 01 .hibytes 0100h +00122Ar 1 01 .hibytes 0101h +00122Br 1 01 .hibytes 0102h +00122Cr 1 01 .hibytes 0103h +00122Dr 1 0F .hibytes 0fd2h +00122Er 1 0F .hibytes 0fd3h +00122Fr 1 0F .hibytes 0fd4h +001230r 1 0F .hibytes 0fd5h +001231r 1 0F .hibytes 0fd6h +001232r 1 0F .hibytes 0fd7h +001233r 1 0F .hibytes 0fd8h +001234r 1 0F .hibytes 0fd9h +001235r 1 0F .hibytes 0fdah +001236r 1 0F .hibytes 0fdbh +001237r 1 0F .hibytes 0fdch +001238r 1 0F .hibytes 0fddh +001239r 1 0F .hibytes 0fdeh +00123Ar 1 0F .hibytes 0fdfh +00123Br 1 0F .hibytes 0fe0h +00123Cr 1 0F .hibytes 0fe1h +00123Dr 1 0F .hibytes 0fe2h +00123Er 1 0F .hibytes 0fe3h +00123Fr 1 0F .hibytes 0fe4h +001240r 1 0F .hibytes 0fe5h +001241r 1 0F .hibytes 0fe6h +001242r 1 0F .hibytes 0fe7h +001243r 1 0F .hibytes 0fe8h +001244r 1 0F .hibytes 0fe9h +001245r 1 0F .hibytes 0feah +001246r 1 0F .hibytes 0febh +001247r 1 0F .hibytes 0fech +001248r 1 0F .hibytes 0fedh +001249r 1 0F .hibytes 0feeh +00124Ar 1 0F .hibytes 0fefh +00124Br 1 0F .hibytes 0ff0h +00124Cr 1 0F .hibytes 0ff1h +00124Dr 1 0F .hibytes 0ff2h +00124Er 1 0F .hibytes 0ff3h +00124Fr 1 0F .hibytes 0ff4h +001250r 1 0F .hibytes 0ff5h +001251r 1 0F .hibytes 0ff6h +001252r 1 0F .hibytes 0ff7h +001253r 1 0F .hibytes 0ff8h +001254r 1 0F .hibytes 0ff9h +001255r 1 0F .hibytes 0ffah +001256r 1 0F .hibytes 0ffbh +001257r 1 0F .hibytes 0ffch +001258r 1 0F .hibytes 0ffdh +001259r 1 0F .hibytes 0ffeh +00125Ar 1 0F .hibytes 0fffh +00125Br 1 10 .hibytes 01000h +00125Cr 1 10 .hibytes 01001h +00125Dr 1 10 .hibytes 01002h +00125Er 1 10 .hibytes 01003h +00125Fr 1 10 .hibytes 01004h +001260r 1 10 .hibytes 01005h +001261r 1 10 .hibytes 01006h +001262r 1 10 .hibytes 01007h +001263r 1 10 .hibytes 01008h +001264r 1 7F .hibytes 07ff0h +001265r 1 7F .hibytes 07ff1h +001266r 1 7F .hibytes 07ff2h +001267r 1 7F .hibytes 07ff3h +001268r 1 7F .hibytes 07ff4h +001269r 1 7F .hibytes 07ff5h +00126Ar 1 7F .hibytes 07ff6h +00126Br 1 7F .hibytes 07ff7h +00126Cr 1 7F .hibytes 07ff8h +00126Dr 1 7F .hibytes 07ff9h +00126Er 1 7F .hibytes 07ffah +00126Fr 1 7F .hibytes 07ffbh +001270r 1 7F .hibytes 07ffch +001271r 1 7F .hibytes 07ffdh +001272r 1 7F .hibytes 07ffeh +001273r 1 7F .hibytes 07fffh +001274r 1 80 .hibytes 08000h +001275r 1 80 .hibytes 08001h +001276r 1 80 .hibytes 08002h +001277r 1 80 .hibytes 08003h +001278r 1 80 .hibytes 08004h +001279r 1 80 .hibytes 08005h +00127Ar 1 80 .hibytes 08006h +00127Br 1 80 .hibytes 08007h +00127Cr 1 80 .hibytes 08008h +00127Dr 1 80 .hibytes 08009h +00127Er 1 80 .hibytes 0800ah +00127Fr 1 80 .hibytes 0800bh +001280r 1 9F .hibytes 09fe1h +001281r 1 9F .hibytes 09fe2h +001282r 1 9F .hibytes 09fe3h +001283r 1 9F .hibytes 09fe4h +001284r 1 9F .hibytes 09fe5h +001285r 1 9F .hibytes 09fe6h +001286r 1 9F .hibytes 09fe7h +001287r 1 9F .hibytes 09fe8h +001288r 1 9F .hibytes 09fe9h +001289r 1 9F .hibytes 09feah +00128Ar 1 9F .hibytes 09febh +00128Br 1 9F .hibytes 09fech +00128Cr 1 9F .hibytes 09fedh +00128Dr 1 9F .hibytes 09feeh +00128Er 1 9F .hibytes 09fefh +00128Fr 1 9F .hibytes 09ff0h +001290r 1 9F .hibytes 09ff1h +001291r 1 9F .hibytes 09ff2h +001292r 1 9F .hibytes 09ff3h +001293r 1 9F .hibytes 09ff4h +001294r 1 9F .hibytes 09ff5h +001295r 1 9F .hibytes 09ff6h +001296r 1 9F .hibytes 09ff7h +001297r 1 9F .hibytes 09ff8h +001298r 1 9F .hibytes 09ff9h +001299r 1 9F .hibytes 09ffah +00129Ar 1 9F .hibytes 09ffbh +00129Br 1 9F .hibytes 09ffch +00129Cr 1 9F .hibytes 09ffdh +00129Dr 1 9F .hibytes 09ffeh +00129Er 1 9F .hibytes 09fffh +00129Fr 1 A0 .hibytes 0a000h +0012A0r 1 A0 .hibytes 0a001h +0012A1r 1 A0 .hibytes 0a002h +0012A2r 1 A0 .hibytes 0a003h +0012A3r 1 A0 .hibytes 0a004h +0012A4r 1 A0 .hibytes 0a005h +0012A5r 1 A0 .hibytes 0a006h +0012A6r 1 A0 .hibytes 0a007h +0012A7r 1 A0 .hibytes 0a008h +0012A8r 1 A0 .hibytes 0a009h +0012A9r 1 A0 .hibytes 0a00ah +0012AAr 1 A0 .hibytes 0a00bh +0012ABr 1 A0 .hibytes 0a00ch +0012ACr 1 A0 .hibytes 0a00dh +0012ADr 1 A0 .hibytes 0a00eh +0012AEr 1 A0 .hibytes 0a00fh +0012AFr 1 AF .hibytes 0afe1h +0012B0r 1 AF .hibytes 0afe2h +0012B1r 1 AF .hibytes 0afe3h +0012B2r 1 AF .hibytes 0afe4h +0012B3r 1 AF .hibytes 0afe5h +0012B4r 1 AF .hibytes 0afe6h +0012B5r 1 AF .hibytes 0afe7h +0012B6r 1 AF .hibytes 0afe8h +0012B7r 1 AF .hibytes 0afe9h +0012B8r 1 AF .hibytes 0afeah +0012B9r 1 AF .hibytes 0afebh +0012BAr 1 AF .hibytes 0afech +0012BBr 1 AF .hibytes 0afedh +0012BCr 1 AF .hibytes 0afeeh +0012BDr 1 AF .hibytes 0afefh +0012BEr 1 AF .hibytes 0aff0h +0012BFr 1 AF .hibytes 0aff1h +0012C0r 1 AF .hibytes 0aff2h +0012C1r 1 AF .hibytes 0aff3h +0012C2r 1 AF .hibytes 0aff4h +0012C3r 1 AF .hibytes 0aff5h +0012C4r 1 AF .hibytes 0aff6h +0012C5r 1 AF .hibytes 0aff7h +0012C6r 1 AF .hibytes 0aff8h +0012C7r 1 AF .hibytes 0aff9h +0012C8r 1 AF .hibytes 0affah +0012C9r 1 AF .hibytes 0affbh +0012CAr 1 AF .hibytes 0affch +0012CBr 1 AF .hibytes 0affdh +0012CCr 1 AF .hibytes 0affeh +0012CDr 1 AF .hibytes 0afffh +0012CEr 1 B0 .hibytes 0b000h +0012CFr 1 B0 .hibytes 0b001h +0012D0r 1 B0 .hibytes 0b002h +0012D1r 1 B0 .hibytes 0b003h +0012D2r 1 B0 .hibytes 0b004h +0012D3r 1 B0 .hibytes 0b005h +0012D4r 1 B0 .hibytes 0b006h +0012D5r 1 B0 .hibytes 0b007h +0012D6r 1 B0 .hibytes 0b008h +0012D7r 1 B0 .hibytes 0b009h +0012D8r 1 B0 .hibytes 0b00ah +0012D9r 1 B0 .hibytes 0b00bh +0012DAr 1 B0 .hibytes 0b00ch +0012DBr 1 B0 .hibytes 0b00dh +0012DCr 1 B0 .hibytes 0b00eh +0012DDr 1 B0 .hibytes 0b00fh +0012DEr 1 BF .hibytes 0bfe1h +0012DFr 1 BF .hibytes 0bfe2h +0012E0r 1 BF .hibytes 0bfe3h +0012E1r 1 BF .hibytes 0bfe4h +0012E2r 1 BF .hibytes 0bfe5h +0012E3r 1 BF .hibytes 0bfe6h +0012E4r 1 BF .hibytes 0bfe7h +0012E5r 1 BF .hibytes 0bfe8h +0012E6r 1 BF .hibytes 0bfe9h +0012E7r 1 BF .hibytes 0bfeah +0012E8r 1 BF .hibytes 0bfebh +0012E9r 1 BF .hibytes 0bfech +0012EAr 1 BF .hibytes 0bfedh +0012EBr 1 BF .hibytes 0bfeeh +0012ECr 1 BF .hibytes 0bfefh +0012EDr 1 BF .hibytes 0bff0h +0012EEr 1 BF .hibytes 0bff1h +0012EFr 1 BF .hibytes 0bff2h +0012F0r 1 BF .hibytes 0bff3h +0012F1r 1 BF .hibytes 0bff4h +0012F2r 1 BF .hibytes 0bff5h +0012F3r 1 BF .hibytes 0bff6h +0012F4r 1 BF .hibytes 0bff7h +0012F5r 1 BF .hibytes 0bff8h +0012F6r 1 BF .hibytes 0bff9h +0012F7r 1 BF .hibytes 0bffah +0012F8r 1 BF .hibytes 0bffbh +0012F9r 1 BF .hibytes 0bffch +0012FAr 1 BF .hibytes 0bffdh +0012FBr 1 BF .hibytes 0bffeh +0012FCr 1 BF .hibytes 0bfffh +0012FDr 1 C0 .hibytes 0c000h +0012FEr 1 C0 .hibytes 0c001h +0012FFr 1 C0 .hibytes 0c002h +001300r 1 C0 .hibytes 0c003h +001301r 1 C0 .hibytes 0c004h +001302r 1 C0 .hibytes 0c005h +001303r 1 C0 .hibytes 0c006h +001304r 1 C0 .hibytes 0c007h +001305r 1 C0 .hibytes 0c008h +001306r 1 C0 .hibytes 0c009h +001307r 1 C0 .hibytes 0c00ah +001308r 1 C0 .hibytes 0c00bh +001309r 1 C0 .hibytes 0c00ch +00130Ar 1 C0 .hibytes 0c00dh +00130Br 1 C0 .hibytes 0c00eh +00130Cr 1 C0 .hibytes 0c00fh +00130Dr 1 CF .hibytes 0cfe1h +00130Er 1 CF .hibytes 0cfe2h +00130Fr 1 CF .hibytes 0cfe3h +001310r 1 CF .hibytes 0cfe4h +001311r 1 CF .hibytes 0cfe5h +001312r 1 CF .hibytes 0cfe6h +001313r 1 CF .hibytes 0cfe7h +001314r 1 CF .hibytes 0cfe8h +001315r 1 CF .hibytes 0cfe9h +001316r 1 CF .hibytes 0cfeah +001317r 1 CF .hibytes 0cfebh +001318r 1 CF .hibytes 0cfech +001319r 1 CF .hibytes 0cfedh +00131Ar 1 CF .hibytes 0cfeeh +00131Br 1 CF .hibytes 0cfefh +00131Cr 1 CF .hibytes 0cff0h +00131Dr 1 CF .hibytes 0cff1h +00131Er 1 CF .hibytes 0cff2h +00131Fr 1 CF .hibytes 0cff3h +001320r 1 CF .hibytes 0cff4h +001321r 1 CF .hibytes 0cff5h +001322r 1 CF .hibytes 0cff6h +001323r 1 CF .hibytes 0cff7h +001324r 1 CF .hibytes 0cff8h +001325r 1 CF .hibytes 0cff9h +001326r 1 CF .hibytes 0cffah +001327r 1 CF .hibytes 0cffbh +001328r 1 CF .hibytes 0cffch +001329r 1 CF .hibytes 0cffdh +00132Ar 1 CF .hibytes 0cffeh +00132Br 1 CF .hibytes 0cfffh +00132Cr 1 D0 .hibytes 0d000h +00132Dr 1 D0 .hibytes 0d001h +00132Er 1 D0 .hibytes 0d002h +00132Fr 1 D0 .hibytes 0d003h +001330r 1 D0 .hibytes 0d004h +001331r 1 D0 .hibytes 0d005h +001332r 1 D0 .hibytes 0d006h +001333r 1 D0 .hibytes 0d007h +001334r 1 D0 .hibytes 0d008h +001335r 1 D0 .hibytes 0d009h +001336r 1 D0 .hibytes 0d00ah +001337r 1 D0 .hibytes 0d00bh +001338r 1 D0 .hibytes 0d00ch +001339r 1 D0 .hibytes 0d00dh +00133Ar 1 D0 .hibytes 0d00eh +00133Br 1 D0 .hibytes 0d00fh +00133Cr 1 DF .hibytes 0dfe1h +00133Dr 1 DF .hibytes 0dfe2h +00133Er 1 DF .hibytes 0dfe3h +00133Fr 1 DF .hibytes 0dfe4h +001340r 1 DF .hibytes 0dfe5h +001341r 1 DF .hibytes 0dfe6h +001342r 1 DF .hibytes 0dfe7h +001343r 1 DF .hibytes 0dfe8h +001344r 1 DF .hibytes 0dfe9h +001345r 1 DF .hibytes 0dfeah +001346r 1 DF .hibytes 0dfebh +001347r 1 DF .hibytes 0dfech +001348r 1 DF .hibytes 0dfedh +001349r 1 DF .hibytes 0dfeeh +00134Ar 1 DF .hibytes 0dfefh +00134Br 1 DF .hibytes 0dff0h +00134Cr 1 DF .hibytes 0dff1h +00134Dr 1 DF .hibytes 0dff2h +00134Er 1 DF .hibytes 0dff3h +00134Fr 1 DF .hibytes 0dff4h +001350r 1 DF .hibytes 0dff5h +001351r 1 DF .hibytes 0dff6h +001352r 1 DF .hibytes 0dff7h +001353r 1 DF .hibytes 0dff8h +001354r 1 DF .hibytes 0dff9h +001355r 1 DF .hibytes 0dffah +001356r 1 DF .hibytes 0dffbh +001357r 1 DF .hibytes 0dffch +001358r 1 DF .hibytes 0dffdh +001359r 1 DF .hibytes 0dffeh +00135Ar 1 DF .hibytes 0dfffh +00135Br 1 E0 .hibytes 0e000h +00135Cr 1 E0 .hibytes 0e001h +00135Dr 1 E0 .hibytes 0e002h +00135Er 1 E0 .hibytes 0e003h +00135Fr 1 E0 .hibytes 0e004h +001360r 1 E0 .hibytes 0e005h +001361r 1 E0 .hibytes 0e006h +001362r 1 E0 .hibytes 0e007h +001363r 1 E0 .hibytes 0e008h +001364r 1 E0 .hibytes 0e009h +001365r 1 E0 .hibytes 0e00ah +001366r 1 E0 .hibytes 0e00bh +001367r 1 E0 .hibytes 0e00ch +001368r 1 E0 .hibytes 0e00dh +001369r 1 E0 .hibytes 0e00eh +00136Ar 1 E0 .hibytes 0e00fh +00136Br 1 EF .hibytes 0efe1h +00136Cr 1 EF .hibytes 0efe2h +00136Dr 1 EF .hibytes 0efe3h +00136Er 1 EF .hibytes 0efe4h +00136Fr 1 EF .hibytes 0efe5h +001370r 1 EF .hibytes 0efe6h +001371r 1 EF .hibytes 0efe7h +001372r 1 EF .hibytes 0efe8h +001373r 1 EF .hibytes 0efe9h +001374r 1 EF .hibytes 0efeah +001375r 1 EF .hibytes 0efebh +001376r 1 EF .hibytes 0efech +001377r 1 EF .hibytes 0efedh +001378r 1 EF .hibytes 0efeeh +001379r 1 EF .hibytes 0efefh +00137Ar 1 EF .hibytes 0eff0h +00137Br 1 EF .hibytes 0eff1h +00137Cr 1 EF .hibytes 0eff2h +00137Dr 1 EF .hibytes 0eff3h +00137Er 1 EF .hibytes 0eff4h +00137Fr 1 EF .hibytes 0eff5h +001380r 1 EF .hibytes 0eff6h +001381r 1 EF .hibytes 0eff7h +001382r 1 EF .hibytes 0eff8h +001383r 1 EF .hibytes 0eff9h +001384r 1 EF .hibytes 0effah +001385r 1 EF .hibytes 0effbh +001386r 1 EF .hibytes 0effch +001387r 1 EF .hibytes 0effdh +001388r 1 EF .hibytes 0effeh +001389r 1 EF .hibytes 0efffh +00138Ar 1 F0 .hibytes 0f000h +00138Br 1 F0 .hibytes 0f001h +00138Cr 1 F0 .hibytes 0f002h +00138Dr 1 F0 .hibytes 0f003h +00138Er 1 F0 .hibytes 0f004h +00138Fr 1 F0 .hibytes 0f005h +001390r 1 F0 .hibytes 0f006h +001391r 1 F0 .hibytes 0f007h +001392r 1 F0 .hibytes 0f008h +001393r 1 F0 .hibytes 0f009h +001394r 1 F0 .hibytes 0f00ah +001395r 1 F0 .hibytes 0f00bh +001396r 1 F0 .hibytes 0f00ch +001397r 1 F0 .hibytes 0f00dh +001398r 1 F0 .hibytes 0f00eh +001399r 1 F0 .hibytes 0f00fh +00139Ar 1 FF .hibytes 0ffe1h +00139Br 1 FF .hibytes 0ffe2h +00139Cr 1 FF .hibytes 0ffe3h +00139Dr 1 FF .hibytes 0ffe4h +00139Er 1 FF .hibytes 0ffe5h +00139Fr 1 FF .hibytes 0ffe6h +0013A0r 1 FF .hibytes 0ffe7h +0013A1r 1 FF .hibytes 0ffe8h +0013A2r 1 FF .hibytes 0ffe9h +0013A3r 1 FF .hibytes 0ffeah +0013A4r 1 FF .hibytes 0ffebh +0013A5r 1 FF .hibytes 0ffech +0013A6r 1 FF .hibytes 0ffedh +0013A7r 1 FF .hibytes 0ffeeh +0013A8r 1 FF .hibytes 0ffefh +0013A9r 1 FF .hibytes 0fff0h +0013AAr 1 FF .hibytes 0fff1h +0013ABr 1 FF .hibytes 0fff2h +0013ACr 1 FF .hibytes 0fff3h +0013ADr 1 FF .hibytes 0fff4h +0013AEr 1 FF .hibytes 0fff5h +0013AFr 1 FF .hibytes 0fff6h +0013B0r 1 FF .hibytes 0fff7h +0013B1r 1 FF .hibytes 0fff8h +0013B2r 1 FF .hibytes 0fff9h +0013B3r 1 FF .hibytes 0fffah +0013B4r 1 FF .hibytes 0fffbh +0013B5r 1 FF .hibytes 0fffch +0013B6r 1 FF .hibytes 0fffdh +0013B7r 1 FF .hibytes 0fffeh +0013B8r 1 FF .hibytes 0ffffh +0013B9r 1 +0013B9r 1 ; binary values, variable length +0013B9r 1 00 .hibytes %0 +0013BAr 1 00 .hibytes %01 +0013BBr 1 00 .hibytes %010 +0013BCr 1 00 .hibytes %011 +0013BDr 1 00 .hibytes %0100 +0013BEr 1 00 .hibytes %0101 +0013BFr 1 00 .hibytes %0110 +0013C0r 1 00 .hibytes %0111 +0013C1r 1 00 .hibytes %01000 +0013C2r 1 00 .hibytes %01001 +0013C3r 1 00 .hibytes %01010 +0013C4r 1 00 .hibytes %01011 +0013C5r 1 00 .hibytes %01100 +0013C6r 1 00 .hibytes %01101 +0013C7r 1 00 .hibytes %01110 +0013C8r 1 00 .hibytes %01111 +0013C9r 1 00 .hibytes %010000 +0013CAr 1 00 .hibytes %010001 +0013CBr 1 00 .hibytes %010010 +0013CCr 1 00 .hibytes %010011 +0013CDr 1 00 .hibytes %01110000 +0013CEr 1 00 .hibytes %01110001 +0013CFr 1 00 .hibytes %01110010 +0013D0r 1 00 .hibytes %01110011 +0013D1r 1 00 .hibytes %01110100 +0013D2r 1 00 .hibytes %01110101 +0013D3r 1 00 .hibytes %01110110 +0013D4r 1 00 .hibytes %01110111 +0013D5r 1 00 .hibytes %01111000 +0013D6r 1 00 .hibytes %01111001 +0013D7r 1 00 .hibytes %01111010 +0013D8r 1 00 .hibytes %01111011 +0013D9r 1 00 .hibytes %01111100 +0013DAr 1 00 .hibytes %01111101 +0013DBr 1 00 .hibytes %01111110 +0013DCr 1 00 .hibytes %01111111 +0013DDr 1 00 .hibytes %010000000 +0013DEr 1 00 .hibytes %010000001 +0013DFr 1 00 .hibytes %010000010 +0013E0r 1 00 .hibytes %010000011 +0013E1r 1 00 .hibytes %010000100 +0013E2r 1 00 .hibytes %010000101 +0013E3r 1 00 .hibytes %010000110 +0013E4r 1 00 .hibytes %011110000 +0013E5r 1 00 .hibytes %011110001 +0013E6r 1 00 .hibytes %011110010 +0013E7r 1 00 .hibytes %011110011 +0013E8r 1 00 .hibytes %011110100 +0013E9r 1 00 .hibytes %011110101 +0013EAr 1 00 .hibytes %011110110 +0013EBr 1 00 .hibytes %011110111 +0013ECr 1 00 .hibytes %011111000 +0013EDr 1 00 .hibytes %011111001 +0013EEr 1 00 .hibytes %011111010 +0013EFr 1 00 .hibytes %011111011 +0013F0r 1 00 .hibytes %011111100 +0013F1r 1 00 .hibytes %011111101 +0013F2r 1 00 .hibytes %011111110 +0013F3r 1 00 .hibytes %011111111 +0013F4r 1 01 .hibytes %100000000 +0013F5r 1 01 .hibytes %100000001 +0013F6r 1 01 .hibytes %100000010 +0013F7r 1 01 .hibytes %100000011 +0013F8r 1 0F .hibytes %111111010010 +0013F9r 1 0F .hibytes %111111010011 +0013FAr 1 0F .hibytes %111111010100 +0013FBr 1 0F .hibytes %111111010101 +0013FCr 1 0F .hibytes %111111010110 +0013FDr 1 0F .hibytes %111111010111 +0013FEr 1 0F .hibytes %111111011000 +0013FFr 1 0F .hibytes %111111011001 +001400r 1 0F .hibytes %111111011010 +001401r 1 0F .hibytes %111111011011 +001402r 1 0F .hibytes %111111011100 +001403r 1 0F .hibytes %111111011101 +001404r 1 0F .hibytes %111111011110 +001405r 1 0F .hibytes %111111011111 +001406r 1 0F .hibytes %111111100000 +001407r 1 0F .hibytes %111111100001 +001408r 1 0F .hibytes %111111100010 +001409r 1 0F .hibytes %111111100011 +00140Ar 1 0F .hibytes %111111100100 +00140Br 1 0F .hibytes %111111100101 +00140Cr 1 0F .hibytes %111111100110 +00140Dr 1 0F .hibytes %111111100111 +00140Er 1 0F .hibytes %111111101000 +00140Fr 1 0F .hibytes %111111101001 +001410r 1 0F .hibytes %111111101010 +001411r 1 0F .hibytes %111111101011 +001412r 1 0F .hibytes %111111101100 +001413r 1 0F .hibytes %111111101101 +001414r 1 0F .hibytes %111111101110 +001415r 1 0F .hibytes %111111101111 +001416r 1 0F .hibytes %111111110000 +001417r 1 0F .hibytes %111111110001 +001418r 1 0F .hibytes %111111110010 +001419r 1 0F .hibytes %111111110011 +00141Ar 1 0F .hibytes %111111110100 +00141Br 1 0F .hibytes %111111110101 +00141Cr 1 0F .hibytes %111111110110 +00141Dr 1 0F .hibytes %111111110111 +00141Er 1 0F .hibytes %111111111000 +00141Fr 1 0F .hibytes %111111111001 +001420r 1 0F .hibytes %111111111010 +001421r 1 0F .hibytes %111111111011 +001422r 1 0F .hibytes %111111111100 +001423r 1 0F .hibytes %111111111101 +001424r 1 0F .hibytes %111111111110 +001425r 1 0F .hibytes %111111111111 +001426r 1 10 .hibytes %1000000000000 +001427r 1 10 .hibytes %1000000000001 +001428r 1 10 .hibytes %1000000000010 +001429r 1 10 .hibytes %1000000000011 +00142Ar 1 10 .hibytes %1000000000100 +00142Br 1 10 .hibytes %1000000000101 +00142Cr 1 10 .hibytes %1000000000110 +00142Dr 1 10 .hibytes %1000000000111 +00142Er 1 10 .hibytes %1000000001000 +00142Fr 1 7F .hibytes %111111111110000 +001430r 1 7F .hibytes %111111111110001 +001431r 1 7F .hibytes %111111111110010 +001432r 1 7F .hibytes %111111111110011 +001433r 1 7F .hibytes %111111111110100 +001434r 1 7F .hibytes %111111111110101 +001435r 1 7F .hibytes %111111111110110 +001436r 1 7F .hibytes %111111111110111 +001437r 1 7F .hibytes %111111111111000 +001438r 1 7F .hibytes %111111111111001 +001439r 1 7F .hibytes %111111111111010 +00143Ar 1 7F .hibytes %111111111111011 +00143Br 1 7F .hibytes %111111111111100 +00143Cr 1 7F .hibytes %111111111111101 +00143Dr 1 7F .hibytes %111111111111110 +00143Er 1 7F .hibytes %111111111111111 +00143Fr 1 80 .hibytes %1000000000000000 +001440r 1 80 .hibytes %1000000000000001 +001441r 1 80 .hibytes %1000000000000010 +001442r 1 80 .hibytes %1000000000000011 +001443r 1 80 .hibytes %1000000000000100 +001444r 1 80 .hibytes %1000000000000101 +001445r 1 80 .hibytes %1000000000000110 +001446r 1 80 .hibytes %1000000000000111 +001447r 1 80 .hibytes %1000000000001000 +001448r 1 80 .hibytes %1000000000001001 +001449r 1 80 .hibytes %1000000000001010 +00144Ar 1 80 .hibytes %1000000000001011 +00144Br 1 9F .hibytes %1001111111100001 +00144Cr 1 9F .hibytes %1001111111100010 +00144Dr 1 9F .hibytes %1001111111100011 +00144Er 1 9F .hibytes %1001111111100100 +00144Fr 1 9F .hibytes %1001111111100101 +001450r 1 9F .hibytes %1001111111100110 +001451r 1 9F .hibytes %1001111111100111 +001452r 1 9F .hibytes %1001111111101000 +001453r 1 9F .hibytes %1001111111101001 +001454r 1 9F .hibytes %1001111111101010 +001455r 1 9F .hibytes %1001111111101011 +001456r 1 9F .hibytes %1001111111101100 +001457r 1 9F .hibytes %1001111111101101 +001458r 1 9F .hibytes %1001111111101110 +001459r 1 9F .hibytes %1001111111101111 +00145Ar 1 9F .hibytes %1001111111110000 +00145Br 1 9F .hibytes %1001111111110001 +00145Cr 1 9F .hibytes %1001111111110010 +00145Dr 1 9F .hibytes %1001111111110011 +00145Er 1 9F .hibytes %1001111111110100 +00145Fr 1 9F .hibytes %1001111111110101 +001460r 1 9F .hibytes %1001111111110110 +001461r 1 9F .hibytes %1001111111110111 +001462r 1 9F .hibytes %1001111111111000 +001463r 1 9F .hibytes %1001111111111001 +001464r 1 9F .hibytes %1001111111111010 +001465r 1 9F .hibytes %1001111111111011 +001466r 1 9F .hibytes %1001111111111100 +001467r 1 9F .hibytes %1001111111111101 +001468r 1 9F .hibytes %1001111111111110 +001469r 1 9F .hibytes %1001111111111111 +00146Ar 1 A0 .hibytes %1010000000000000 +00146Br 1 A0 .hibytes %1010000000000001 +00146Cr 1 A0 .hibytes %1010000000000010 +00146Dr 1 A0 .hibytes %1010000000000011 +00146Er 1 A0 .hibytes %1010000000000100 +00146Fr 1 A0 .hibytes %1010000000000101 +001470r 1 A0 .hibytes %1010000000000110 +001471r 1 A0 .hibytes %1010000000000111 +001472r 1 A0 .hibytes %1010000000001000 +001473r 1 A0 .hibytes %1010000000001001 +001474r 1 A0 .hibytes %1010000000001010 +001475r 1 A0 .hibytes %1010000000001011 +001476r 1 A0 .hibytes %1010000000001100 +001477r 1 A0 .hibytes %1010000000001101 +001478r 1 A0 .hibytes %1010000000001110 +001479r 1 A0 .hibytes %1010000000001111 +00147Ar 1 AF .hibytes %1010111111100001 +00147Br 1 AF .hibytes %1010111111100010 +00147Cr 1 AF .hibytes %1010111111100011 +00147Dr 1 AF .hibytes %1010111111100100 +00147Er 1 AF .hibytes %1010111111100101 +00147Fr 1 AF .hibytes %1010111111100110 +001480r 1 AF .hibytes %1010111111100111 +001481r 1 AF .hibytes %1010111111101000 +001482r 1 AF .hibytes %1010111111101001 +001483r 1 AF .hibytes %1010111111101010 +001484r 1 AF .hibytes %1010111111101011 +001485r 1 AF .hibytes %1010111111101100 +001486r 1 AF .hibytes %1010111111101101 +001487r 1 AF .hibytes %1010111111101110 +001488r 1 AF .hibytes %1010111111101111 +001489r 1 AF .hibytes %1010111111110000 +00148Ar 1 AF .hibytes %1010111111110001 +00148Br 1 AF .hibytes %1010111111110010 +00148Cr 1 AF .hibytes %1010111111110011 +00148Dr 1 AF .hibytes %1010111111110100 +00148Er 1 AF .hibytes %1010111111110101 +00148Fr 1 AF .hibytes %1010111111110110 +001490r 1 AF .hibytes %1010111111110111 +001491r 1 AF .hibytes %1010111111111000 +001492r 1 AF .hibytes %1010111111111001 +001493r 1 AF .hibytes %1010111111111010 +001494r 1 AF .hibytes %1010111111111011 +001495r 1 AF .hibytes %1010111111111100 +001496r 1 AF .hibytes %1010111111111101 +001497r 1 AF .hibytes %1010111111111110 +001498r 1 AF .hibytes %1010111111111111 +001499r 1 B0 .hibytes %1011000000000000 +00149Ar 1 B0 .hibytes %1011000000000001 +00149Br 1 B0 .hibytes %1011000000000010 +00149Cr 1 B0 .hibytes %1011000000000011 +00149Dr 1 B0 .hibytes %1011000000000100 +00149Er 1 B0 .hibytes %1011000000000101 +00149Fr 1 B0 .hibytes %1011000000000110 +0014A0r 1 B0 .hibytes %1011000000000111 +0014A1r 1 B0 .hibytes %1011000000001000 +0014A2r 1 B0 .hibytes %1011000000001001 +0014A3r 1 B0 .hibytes %1011000000001010 +0014A4r 1 B0 .hibytes %1011000000001011 +0014A5r 1 B0 .hibytes %1011000000001100 +0014A6r 1 B0 .hibytes %1011000000001101 +0014A7r 1 B0 .hibytes %1011000000001110 +0014A8r 1 B0 .hibytes %1011000000001111 +0014A9r 1 BF .hibytes %1011111111100001 +0014AAr 1 BF .hibytes %1011111111100010 +0014ABr 1 BF .hibytes %1011111111100011 +0014ACr 1 BF .hibytes %1011111111100100 +0014ADr 1 BF .hibytes %1011111111100101 +0014AEr 1 BF .hibytes %1011111111100110 +0014AFr 1 BF .hibytes %1011111111100111 +0014B0r 1 BF .hibytes %1011111111101000 +0014B1r 1 BF .hibytes %1011111111101001 +0014B2r 1 BF .hibytes %1011111111101010 +0014B3r 1 BF .hibytes %1011111111101011 +0014B4r 1 BF .hibytes %1011111111101100 +0014B5r 1 BF .hibytes %1011111111101101 +0014B6r 1 BF .hibytes %1011111111101110 +0014B7r 1 BF .hibytes %1011111111101111 +0014B8r 1 BF .hibytes %1011111111110000 +0014B9r 1 BF .hibytes %1011111111110001 +0014BAr 1 BF .hibytes %1011111111110010 +0014BBr 1 BF .hibytes %1011111111110011 +0014BCr 1 BF .hibytes %1011111111110100 +0014BDr 1 BF .hibytes %1011111111110101 +0014BEr 1 BF .hibytes %1011111111110110 +0014BFr 1 BF .hibytes %1011111111110111 +0014C0r 1 BF .hibytes %1011111111111000 +0014C1r 1 BF .hibytes %1011111111111001 +0014C2r 1 BF .hibytes %1011111111111010 +0014C3r 1 BF .hibytes %1011111111111011 +0014C4r 1 BF .hibytes %1011111111111100 +0014C5r 1 BF .hibytes %1011111111111101 +0014C6r 1 BF .hibytes %1011111111111110 +0014C7r 1 BF .hibytes %1011111111111111 +0014C8r 1 C0 .hibytes %1100000000000000 +0014C9r 1 C0 .hibytes %1100000000000001 +0014CAr 1 C0 .hibytes %1100000000000010 +0014CBr 1 C0 .hibytes %1100000000000011 +0014CCr 1 C0 .hibytes %1100000000000100 +0014CDr 1 C0 .hibytes %1100000000000101 +0014CEr 1 C0 .hibytes %1100000000000110 +0014CFr 1 C0 .hibytes %1100000000000111 +0014D0r 1 C0 .hibytes %1100000000001000 +0014D1r 1 C0 .hibytes %1100000000001001 +0014D2r 1 C0 .hibytes %1100000000001010 +0014D3r 1 C0 .hibytes %1100000000001011 +0014D4r 1 C0 .hibytes %1100000000001100 +0014D5r 1 C0 .hibytes %1100000000001101 +0014D6r 1 C0 .hibytes %1100000000001110 +0014D7r 1 C0 .hibytes %1100000000001111 +0014D8r 1 CF .hibytes %1100111111100001 +0014D9r 1 CF .hibytes %1100111111100010 +0014DAr 1 CF .hibytes %1100111111100011 +0014DBr 1 CF .hibytes %1100111111100100 +0014DCr 1 CF .hibytes %1100111111100101 +0014DDr 1 CF .hibytes %1100111111100110 +0014DEr 1 CF .hibytes %1100111111100111 +0014DFr 1 CF .hibytes %1100111111101000 +0014E0r 1 CF .hibytes %1100111111101001 +0014E1r 1 CF .hibytes %1100111111101010 +0014E2r 1 CF .hibytes %1100111111101011 +0014E3r 1 CF .hibytes %1100111111101100 +0014E4r 1 CF .hibytes %1100111111101101 +0014E5r 1 CF .hibytes %1100111111101110 +0014E6r 1 CF .hibytes %1100111111101111 +0014E7r 1 CF .hibytes %1100111111110000 +0014E8r 1 CF .hibytes %1100111111110001 +0014E9r 1 CF .hibytes %1100111111110010 +0014EAr 1 CF .hibytes %1100111111110011 +0014EBr 1 CF .hibytes %1100111111110100 +0014ECr 1 CF .hibytes %1100111111110101 +0014EDr 1 CF .hibytes %1100111111110110 +0014EEr 1 CF .hibytes %1100111111110111 +0014EFr 1 CF .hibytes %1100111111111000 +0014F0r 1 CF .hibytes %1100111111111001 +0014F1r 1 CF .hibytes %1100111111111010 +0014F2r 1 CF .hibytes %1100111111111011 +0014F3r 1 CF .hibytes %1100111111111100 +0014F4r 1 CF .hibytes %1100111111111101 +0014F5r 1 CF .hibytes %1100111111111110 +0014F6r 1 CF .hibytes %1100111111111111 +0014F7r 1 D0 .hibytes %1101000000000000 +0014F8r 1 D0 .hibytes %1101000000000001 +0014F9r 1 D0 .hibytes %1101000000000010 +0014FAr 1 D0 .hibytes %1101000000000011 +0014FBr 1 D0 .hibytes %1101000000000100 +0014FCr 1 D0 .hibytes %1101000000000101 +0014FDr 1 D0 .hibytes %1101000000000110 +0014FEr 1 D0 .hibytes %1101000000000111 +0014FFr 1 D0 .hibytes %1101000000001000 +001500r 1 D0 .hibytes %1101000000001001 +001501r 1 D0 .hibytes %1101000000001010 +001502r 1 D0 .hibytes %1101000000001011 +001503r 1 D0 .hibytes %1101000000001100 +001504r 1 D0 .hibytes %1101000000001101 +001505r 1 D0 .hibytes %1101000000001110 +001506r 1 D0 .hibytes %1101000000001111 +001507r 1 DF .hibytes %1101111111100001 +001508r 1 DF .hibytes %1101111111100010 +001509r 1 DF .hibytes %1101111111100011 +00150Ar 1 DF .hibytes %1101111111100100 +00150Br 1 DF .hibytes %1101111111100101 +00150Cr 1 DF .hibytes %1101111111100110 +00150Dr 1 DF .hibytes %1101111111100111 +00150Er 1 DF .hibytes %1101111111101000 +00150Fr 1 DF .hibytes %1101111111101001 +001510r 1 DF .hibytes %1101111111101010 +001511r 1 DF .hibytes %1101111111101011 +001512r 1 DF .hibytes %1101111111101100 +001513r 1 DF .hibytes %1101111111101101 +001514r 1 DF .hibytes %1101111111101110 +001515r 1 DF .hibytes %1101111111101111 +001516r 1 DF .hibytes %1101111111110000 +001517r 1 DF .hibytes %1101111111110001 +001518r 1 DF .hibytes %1101111111110010 +001519r 1 DF .hibytes %1101111111110011 +00151Ar 1 DF .hibytes %1101111111110100 +00151Br 1 DF .hibytes %1101111111110101 +00151Cr 1 DF .hibytes %1101111111110110 +00151Dr 1 DF .hibytes %1101111111110111 +00151Er 1 DF .hibytes %1101111111111000 +00151Fr 1 DF .hibytes %1101111111111001 +001520r 1 DF .hibytes %1101111111111010 +001521r 1 DF .hibytes %1101111111111011 +001522r 1 DF .hibytes %1101111111111100 +001523r 1 DF .hibytes %1101111111111101 +001524r 1 DF .hibytes %1101111111111110 +001525r 1 DF .hibytes %1101111111111111 +001526r 1 E0 .hibytes %1110000000000000 +001527r 1 E0 .hibytes %1110000000000001 +001528r 1 E0 .hibytes %1110000000000010 +001529r 1 E0 .hibytes %1110000000000011 +00152Ar 1 E0 .hibytes %1110000000000100 +00152Br 1 E0 .hibytes %1110000000000101 +00152Cr 1 E0 .hibytes %1110000000000110 +00152Dr 1 E0 .hibytes %1110000000000111 +00152Er 1 E0 .hibytes %1110000000001000 +00152Fr 1 E0 .hibytes %1110000000001001 +001530r 1 E0 .hibytes %1110000000001010 +001531r 1 E0 .hibytes %1110000000001011 +001532r 1 E0 .hibytes %1110000000001100 +001533r 1 E0 .hibytes %1110000000001101 +001534r 1 E0 .hibytes %1110000000001110 +001535r 1 E0 .hibytes %1110000000001111 +001536r 1 EF .hibytes %1110111111100001 +001537r 1 EF .hibytes %1110111111100010 +001538r 1 EF .hibytes %1110111111100011 +001539r 1 EF .hibytes %1110111111100100 +00153Ar 1 EF .hibytes %1110111111100101 +00153Br 1 EF .hibytes %1110111111100110 +00153Cr 1 EF .hibytes %1110111111100111 +00153Dr 1 EF .hibytes %1110111111101000 +00153Er 1 EF .hibytes %1110111111101001 +00153Fr 1 EF .hibytes %1110111111101010 +001540r 1 EF .hibytes %1110111111101011 +001541r 1 EF .hibytes %1110111111101100 +001542r 1 EF .hibytes %1110111111101101 +001543r 1 EF .hibytes %1110111111101110 +001544r 1 EF .hibytes %1110111111101111 +001545r 1 EF .hibytes %1110111111110000 +001546r 1 EF .hibytes %1110111111110001 +001547r 1 EF .hibytes %1110111111110010 +001548r 1 EF .hibytes %1110111111110011 +001549r 1 EF .hibytes %1110111111110100 +00154Ar 1 EF .hibytes %1110111111110101 +00154Br 1 EF .hibytes %1110111111110110 +00154Cr 1 EF .hibytes %1110111111110111 +00154Dr 1 EF .hibytes %1110111111111000 +00154Er 1 EF .hibytes %1110111111111001 +00154Fr 1 EF .hibytes %1110111111111010 +001550r 1 EF .hibytes %1110111111111011 +001551r 1 EF .hibytes %1110111111111100 +001552r 1 EF .hibytes %1110111111111101 +001553r 1 EF .hibytes %1110111111111110 +001554r 1 EF .hibytes %1110111111111111 +001555r 1 F0 .hibytes %1111000000000000 +001556r 1 F0 .hibytes %1111000000000001 +001557r 1 F0 .hibytes %1111000000000010 +001558r 1 F0 .hibytes %1111000000000011 +001559r 1 F0 .hibytes %1111000000000100 +00155Ar 1 F0 .hibytes %1111000000000101 +00155Br 1 F0 .hibytes %1111000000000110 +00155Cr 1 F0 .hibytes %1111000000000111 +00155Dr 1 F0 .hibytes %1111000000001000 +00155Er 1 F0 .hibytes %1111000000001001 +00155Fr 1 F0 .hibytes %1111000000001010 +001560r 1 F0 .hibytes %1111000000001011 +001561r 1 F0 .hibytes %1111000000001100 +001562r 1 F0 .hibytes %1111000000001101 +001563r 1 F0 .hibytes %1111000000001110 +001564r 1 F0 .hibytes %1111000000001111 +001565r 1 FF .hibytes %1111111111100001 +001566r 1 FF .hibytes %1111111111100010 +001567r 1 FF .hibytes %1111111111100011 +001568r 1 FF .hibytes %1111111111100100 +001569r 1 FF .hibytes %1111111111100101 +00156Ar 1 FF .hibytes %1111111111100110 +00156Br 1 FF .hibytes %1111111111100111 +00156Cr 1 FF .hibytes %1111111111101000 +00156Dr 1 FF .hibytes %1111111111101001 +00156Er 1 FF .hibytes %1111111111101010 +00156Fr 1 FF .hibytes %1111111111101011 +001570r 1 FF .hibytes %1111111111101100 +001571r 1 FF .hibytes %1111111111101101 +001572r 1 FF .hibytes %1111111111101110 +001573r 1 FF .hibytes %1111111111101111 +001574r 1 FF .hibytes %1111111111110000 +001575r 1 FF .hibytes %1111111111110001 +001576r 1 FF .hibytes %1111111111110010 +001577r 1 FF .hibytes %1111111111110011 +001578r 1 FF .hibytes %1111111111110100 +001579r 1 FF .hibytes %1111111111110101 +00157Ar 1 FF .hibytes %1111111111110110 +00157Br 1 FF .hibytes %1111111111110111 +00157Cr 1 FF .hibytes %1111111111111000 +00157Dr 1 FF .hibytes %1111111111111001 +00157Er 1 FF .hibytes %1111111111111010 +00157Fr 1 FF .hibytes %1111111111111011 +001580r 1 FF .hibytes %1111111111111100 +001581r 1 FF .hibytes %1111111111111101 +001582r 1 FF .hibytes %1111111111111110 +001583r 1 FF .hibytes %1111111111111111 +001584r 1 +001584r 1 ; binary values, full length +001584r 1 00 .hibytes %0000000000000000 +001585r 1 00 .hibytes %0000000000000001 +001586r 1 00 .hibytes %0000000000000010 +001587r 1 00 .hibytes %0000000000000011 +001588r 1 00 .hibytes %0000000000000100 +001589r 1 00 .hibytes %0000000000000101 +00158Ar 1 00 .hibytes %0000000000000110 +00158Br 1 00 .hibytes %0000000000000111 +00158Cr 1 00 .hibytes %0000000000001000 +00158Dr 1 00 .hibytes %0000000000001001 +00158Er 1 00 .hibytes %0000000000001010 +00158Fr 1 00 .hibytes %0000000000001011 +001590r 1 00 .hibytes %0000000000001100 +001591r 1 00 .hibytes %0000000000001101 +001592r 1 00 .hibytes %0000000000001110 +001593r 1 00 .hibytes %0000000000001111 +001594r 1 00 .hibytes %0000000000010000 +001595r 1 00 .hibytes %0000000000010001 +001596r 1 00 .hibytes %0000000000010010 +001597r 1 00 .hibytes %0000000000010011 +001598r 1 00 .hibytes %0000000001110000 +001599r 1 00 .hibytes %0000000001110001 +00159Ar 1 00 .hibytes %0000000001110010 +00159Br 1 00 .hibytes %0000000001110011 +00159Cr 1 00 .hibytes %0000000001110100 +00159Dr 1 00 .hibytes %0000000001110101 +00159Er 1 00 .hibytes %0000000001110110 +00159Fr 1 00 .hibytes %0000000001110111 +0015A0r 1 00 .hibytes %0000000001111000 +0015A1r 1 00 .hibytes %0000000001111001 +0015A2r 1 00 .hibytes %0000000001111010 +0015A3r 1 00 .hibytes %0000000001111011 +0015A4r 1 00 .hibytes %0000000001111100 +0015A5r 1 00 .hibytes %0000000001111101 +0015A6r 1 00 .hibytes %0000000001111110 +0015A7r 1 00 .hibytes %0000000001111111 +0015A8r 1 00 .hibytes %0000000010000000 +0015A9r 1 00 .hibytes %0000000010000001 +0015AAr 1 00 .hibytes %0000000010000010 +0015ABr 1 00 .hibytes %0000000010000011 +0015ACr 1 00 .hibytes %0000000010000100 +0015ADr 1 00 .hibytes %0000000010000101 +0015AEr 1 00 .hibytes %0000000010000110 +0015AFr 1 00 .hibytes %0000000011110000 +0015B0r 1 00 .hibytes %0000000011110001 +0015B1r 1 00 .hibytes %0000000011110010 +0015B2r 1 00 .hibytes %0000000011110011 +0015B3r 1 00 .hibytes %0000000011110100 +0015B4r 1 00 .hibytes %0000000011110101 +0015B5r 1 00 .hibytes %0000000011110110 +0015B6r 1 00 .hibytes %0000000011110111 +0015B7r 1 00 .hibytes %0000000011111000 +0015B8r 1 00 .hibytes %0000000011111001 +0015B9r 1 00 .hibytes %0000000011111010 +0015BAr 1 00 .hibytes %0000000011111011 +0015BBr 1 00 .hibytes %0000000011111100 +0015BCr 1 00 .hibytes %0000000011111101 +0015BDr 1 00 .hibytes %0000000011111110 +0015BEr 1 00 .hibytes %0000000011111111 +0015BFr 1 01 .hibytes %0000000100000000 +0015C0r 1 01 .hibytes %0000000100000001 +0015C1r 1 01 .hibytes %0000000100000010 +0015C2r 1 01 .hibytes %0000000100000011 +0015C3r 1 0F .hibytes %0000111111010010 +0015C4r 1 0F .hibytes %0000111111010011 +0015C5r 1 0F .hibytes %0000111111010100 +0015C6r 1 0F .hibytes %0000111111010101 +0015C7r 1 0F .hibytes %0000111111010110 +0015C8r 1 0F .hibytes %0000111111010111 +0015C9r 1 0F .hibytes %0000111111011000 +0015CAr 1 0F .hibytes %0000111111011001 +0015CBr 1 0F .hibytes %0000111111011010 +0015CCr 1 0F .hibytes %0000111111011011 +0015CDr 1 0F .hibytes %0000111111011100 +0015CEr 1 0F .hibytes %0000111111011101 +0015CFr 1 0F .hibytes %0000111111011110 +0015D0r 1 0F .hibytes %0000111111011111 +0015D1r 1 0F .hibytes %0000111111100000 +0015D2r 1 0F .hibytes %0000111111100001 +0015D3r 1 0F .hibytes %0000111111100010 +0015D4r 1 0F .hibytes %0000111111100011 +0015D5r 1 0F .hibytes %0000111111100100 +0015D6r 1 0F .hibytes %0000111111100101 +0015D7r 1 0F .hibytes %0000111111100110 +0015D8r 1 0F .hibytes %0000111111100111 +0015D9r 1 0F .hibytes %0000111111101000 +0015DAr 1 0F .hibytes %0000111111101001 +0015DBr 1 0F .hibytes %0000111111101010 +0015DCr 1 0F .hibytes %0000111111101011 +0015DDr 1 0F .hibytes %0000111111101100 +0015DEr 1 0F .hibytes %0000111111101101 +0015DFr 1 0F .hibytes %0000111111101110 +0015E0r 1 0F .hibytes %0000111111101111 +0015E1r 1 0F .hibytes %0000111111110000 +0015E2r 1 0F .hibytes %0000111111110001 +0015E3r 1 0F .hibytes %0000111111110010 +0015E4r 1 0F .hibytes %0000111111110011 +0015E5r 1 0F .hibytes %0000111111110100 +0015E6r 1 0F .hibytes %0000111111110101 +0015E7r 1 0F .hibytes %0000111111110110 +0015E8r 1 0F .hibytes %0000111111110111 +0015E9r 1 0F .hibytes %0000111111111000 +0015EAr 1 0F .hibytes %0000111111111001 +0015EBr 1 0F .hibytes %0000111111111010 +0015ECr 1 0F .hibytes %0000111111111011 +0015EDr 1 0F .hibytes %0000111111111100 +0015EEr 1 0F .hibytes %0000111111111101 +0015EFr 1 0F .hibytes %0000111111111110 +0015F0r 1 0F .hibytes %0000111111111111 +0015F1r 1 10 .hibytes %0001000000000000 +0015F2r 1 10 .hibytes %0001000000000001 +0015F3r 1 10 .hibytes %0001000000000010 +0015F4r 1 10 .hibytes %0001000000000011 +0015F5r 1 10 .hibytes %0001000000000100 +0015F6r 1 10 .hibytes %0001000000000101 +0015F7r 1 10 .hibytes %0001000000000110 +0015F8r 1 10 .hibytes %0001000000000111 +0015F9r 1 10 .hibytes %0001000000001000 +0015FAr 1 7F .hibytes %0111111111110000 +0015FBr 1 7F .hibytes %0111111111110001 +0015FCr 1 7F .hibytes %0111111111110010 +0015FDr 1 7F .hibytes %0111111111110011 +0015FEr 1 7F .hibytes %0111111111110100 +0015FFr 1 7F .hibytes %0111111111110101 +001600r 1 7F .hibytes %0111111111110110 +001601r 1 7F .hibytes %0111111111110111 +001602r 1 7F .hibytes %0111111111111000 +001603r 1 7F .hibytes %0111111111111001 +001604r 1 7F .hibytes %0111111111111010 +001605r 1 7F .hibytes %0111111111111011 +001606r 1 7F .hibytes %0111111111111100 +001607r 1 7F .hibytes %0111111111111101 +001608r 1 7F .hibytes %0111111111111110 +001609r 1 7F .hibytes %0111111111111111 +00160Ar 1 80 .hibytes %1000000000000000 +00160Br 1 80 .hibytes %1000000000000001 +00160Cr 1 80 .hibytes %1000000000000010 +00160Dr 1 80 .hibytes %1000000000000011 +00160Er 1 80 .hibytes %1000000000000100 +00160Fr 1 80 .hibytes %1000000000000101 +001610r 1 80 .hibytes %1000000000000110 +001611r 1 80 .hibytes %1000000000000111 +001612r 1 80 .hibytes %1000000000001000 +001613r 1 80 .hibytes %1000000000001001 +001614r 1 80 .hibytes %1000000000001010 +001615r 1 80 .hibytes %1000000000001011 +001616r 1 9F .hibytes %1001111111100001 +001617r 1 9F .hibytes %1001111111100010 +001618r 1 9F .hibytes %1001111111100011 +001619r 1 9F .hibytes %1001111111100100 +00161Ar 1 9F .hibytes %1001111111100101 +00161Br 1 9F .hibytes %1001111111100110 +00161Cr 1 9F .hibytes %1001111111100111 +00161Dr 1 9F .hibytes %1001111111101000 +00161Er 1 9F .hibytes %1001111111101001 +00161Fr 1 9F .hibytes %1001111111101010 +001620r 1 9F .hibytes %1001111111101011 +001621r 1 9F .hibytes %1001111111101100 +001622r 1 9F .hibytes %1001111111101101 +001623r 1 9F .hibytes %1001111111101110 +001624r 1 9F .hibytes %1001111111101111 +001625r 1 9F .hibytes %1001111111110000 +001626r 1 9F .hibytes %1001111111110001 +001627r 1 9F .hibytes %1001111111110010 +001628r 1 9F .hibytes %1001111111110011 +001629r 1 9F .hibytes %1001111111110100 +00162Ar 1 9F .hibytes %1001111111110101 +00162Br 1 9F .hibytes %1001111111110110 +00162Cr 1 9F .hibytes %1001111111110111 +00162Dr 1 9F .hibytes %1001111111111000 +00162Er 1 9F .hibytes %1001111111111001 +00162Fr 1 9F .hibytes %1001111111111010 +001630r 1 9F .hibytes %1001111111111011 +001631r 1 9F .hibytes %1001111111111100 +001632r 1 9F .hibytes %1001111111111101 +001633r 1 9F .hibytes %1001111111111110 +001634r 1 9F .hibytes %1001111111111111 +001635r 1 A0 .hibytes %1010000000000000 +001636r 1 A0 .hibytes %1010000000000001 +001637r 1 A0 .hibytes %1010000000000010 +001638r 1 A0 .hibytes %1010000000000011 +001639r 1 A0 .hibytes %1010000000000100 +00163Ar 1 A0 .hibytes %1010000000000101 +00163Br 1 A0 .hibytes %1010000000000110 +00163Cr 1 A0 .hibytes %1010000000000111 +00163Dr 1 A0 .hibytes %1010000000001000 +00163Er 1 A0 .hibytes %1010000000001001 +00163Fr 1 A0 .hibytes %1010000000001010 +001640r 1 A0 .hibytes %1010000000001011 +001641r 1 A0 .hibytes %1010000000001100 +001642r 1 A0 .hibytes %1010000000001101 +001643r 1 A0 .hibytes %1010000000001110 +001644r 1 A0 .hibytes %1010000000001111 +001645r 1 AF .hibytes %1010111111100001 +001646r 1 AF .hibytes %1010111111100010 +001647r 1 AF .hibytes %1010111111100011 +001648r 1 AF .hibytes %1010111111100100 +001649r 1 AF .hibytes %1010111111100101 +00164Ar 1 AF .hibytes %1010111111100110 +00164Br 1 AF .hibytes %1010111111100111 +00164Cr 1 AF .hibytes %1010111111101000 +00164Dr 1 AF .hibytes %1010111111101001 +00164Er 1 AF .hibytes %1010111111101010 +00164Fr 1 AF .hibytes %1010111111101011 +001650r 1 AF .hibytes %1010111111101100 +001651r 1 AF .hibytes %1010111111101101 +001652r 1 AF .hibytes %1010111111101110 +001653r 1 AF .hibytes %1010111111101111 +001654r 1 AF .hibytes %1010111111110000 +001655r 1 AF .hibytes %1010111111110001 +001656r 1 AF .hibytes %1010111111110010 +001657r 1 AF .hibytes %1010111111110011 +001658r 1 AF .hibytes %1010111111110100 +001659r 1 AF .hibytes %1010111111110101 +00165Ar 1 AF .hibytes %1010111111110110 +00165Br 1 AF .hibytes %1010111111110111 +00165Cr 1 AF .hibytes %1010111111111000 +00165Dr 1 AF .hibytes %1010111111111001 +00165Er 1 AF .hibytes %1010111111111010 +00165Fr 1 AF .hibytes %1010111111111011 +001660r 1 AF .hibytes %1010111111111100 +001661r 1 AF .hibytes %1010111111111101 +001662r 1 AF .hibytes %1010111111111110 +001663r 1 AF .hibytes %1010111111111111 +001664r 1 B0 .hibytes %1011000000000000 +001665r 1 B0 .hibytes %1011000000000001 +001666r 1 B0 .hibytes %1011000000000010 +001667r 1 B0 .hibytes %1011000000000011 +001668r 1 B0 .hibytes %1011000000000100 +001669r 1 B0 .hibytes %1011000000000101 +00166Ar 1 B0 .hibytes %1011000000000110 +00166Br 1 B0 .hibytes %1011000000000111 +00166Cr 1 B0 .hibytes %1011000000001000 +00166Dr 1 B0 .hibytes %1011000000001001 +00166Er 1 B0 .hibytes %1011000000001010 +00166Fr 1 B0 .hibytes %1011000000001011 +001670r 1 B0 .hibytes %1011000000001100 +001671r 1 B0 .hibytes %1011000000001101 +001672r 1 B0 .hibytes %1011000000001110 +001673r 1 B0 .hibytes %1011000000001111 +001674r 1 BF .hibytes %1011111111100001 +001675r 1 BF .hibytes %1011111111100010 +001676r 1 BF .hibytes %1011111111100011 +001677r 1 BF .hibytes %1011111111100100 +001678r 1 BF .hibytes %1011111111100101 +001679r 1 BF .hibytes %1011111111100110 +00167Ar 1 BF .hibytes %1011111111100111 +00167Br 1 BF .hibytes %1011111111101000 +00167Cr 1 BF .hibytes %1011111111101001 +00167Dr 1 BF .hibytes %1011111111101010 +00167Er 1 BF .hibytes %1011111111101011 +00167Fr 1 BF .hibytes %1011111111101100 +001680r 1 BF .hibytes %1011111111101101 +001681r 1 BF .hibytes %1011111111101110 +001682r 1 BF .hibytes %1011111111101111 +001683r 1 BF .hibytes %1011111111110000 +001684r 1 BF .hibytes %1011111111110001 +001685r 1 BF .hibytes %1011111111110010 +001686r 1 BF .hibytes %1011111111110011 +001687r 1 BF .hibytes %1011111111110100 +001688r 1 BF .hibytes %1011111111110101 +001689r 1 BF .hibytes %1011111111110110 +00168Ar 1 BF .hibytes %1011111111110111 +00168Br 1 BF .hibytes %1011111111111000 +00168Cr 1 BF .hibytes %1011111111111001 +00168Dr 1 BF .hibytes %1011111111111010 +00168Er 1 BF .hibytes %1011111111111011 +00168Fr 1 BF .hibytes %1011111111111100 +001690r 1 BF .hibytes %1011111111111101 +001691r 1 BF .hibytes %1011111111111110 +001692r 1 BF .hibytes %1011111111111111 +001693r 1 C0 .hibytes %1100000000000000 +001694r 1 C0 .hibytes %1100000000000001 +001695r 1 C0 .hibytes %1100000000000010 +001696r 1 C0 .hibytes %1100000000000011 +001697r 1 C0 .hibytes %1100000000000100 +001698r 1 C0 .hibytes %1100000000000101 +001699r 1 C0 .hibytes %1100000000000110 +00169Ar 1 C0 .hibytes %1100000000000111 +00169Br 1 C0 .hibytes %1100000000001000 +00169Cr 1 C0 .hibytes %1100000000001001 +00169Dr 1 C0 .hibytes %1100000000001010 +00169Er 1 C0 .hibytes %1100000000001011 +00169Fr 1 C0 .hibytes %1100000000001100 +0016A0r 1 C0 .hibytes %1100000000001101 +0016A1r 1 C0 .hibytes %1100000000001110 +0016A2r 1 C0 .hibytes %1100000000001111 +0016A3r 1 CF .hibytes %1100111111100001 +0016A4r 1 CF .hibytes %1100111111100010 +0016A5r 1 CF .hibytes %1100111111100011 +0016A6r 1 CF .hibytes %1100111111100100 +0016A7r 1 CF .hibytes %1100111111100101 +0016A8r 1 CF .hibytes %1100111111100110 +0016A9r 1 CF .hibytes %1100111111100111 +0016AAr 1 CF .hibytes %1100111111101000 +0016ABr 1 CF .hibytes %1100111111101001 +0016ACr 1 CF .hibytes %1100111111101010 +0016ADr 1 CF .hibytes %1100111111101011 +0016AEr 1 CF .hibytes %1100111111101100 +0016AFr 1 CF .hibytes %1100111111101101 +0016B0r 1 CF .hibytes %1100111111101110 +0016B1r 1 CF .hibytes %1100111111101111 +0016B2r 1 CF .hibytes %1100111111110000 +0016B3r 1 CF .hibytes %1100111111110001 +0016B4r 1 CF .hibytes %1100111111110010 +0016B5r 1 CF .hibytes %1100111111110011 +0016B6r 1 CF .hibytes %1100111111110100 +0016B7r 1 CF .hibytes %1100111111110101 +0016B8r 1 CF .hibytes %1100111111110110 +0016B9r 1 CF .hibytes %1100111111110111 +0016BAr 1 CF .hibytes %1100111111111000 +0016BBr 1 CF .hibytes %1100111111111001 +0016BCr 1 CF .hibytes %1100111111111010 +0016BDr 1 CF .hibytes %1100111111111011 +0016BEr 1 CF .hibytes %1100111111111100 +0016BFr 1 CF .hibytes %1100111111111101 +0016C0r 1 CF .hibytes %1100111111111110 +0016C1r 1 CF .hibytes %1100111111111111 +0016C2r 1 D0 .hibytes %1101000000000000 +0016C3r 1 D0 .hibytes %1101000000000001 +0016C4r 1 D0 .hibytes %1101000000000010 +0016C5r 1 D0 .hibytes %1101000000000011 +0016C6r 1 D0 .hibytes %1101000000000100 +0016C7r 1 D0 .hibytes %1101000000000101 +0016C8r 1 D0 .hibytes %1101000000000110 +0016C9r 1 D0 .hibytes %1101000000000111 +0016CAr 1 D0 .hibytes %1101000000001000 +0016CBr 1 D0 .hibytes %1101000000001001 +0016CCr 1 D0 .hibytes %1101000000001010 +0016CDr 1 D0 .hibytes %1101000000001011 +0016CEr 1 D0 .hibytes %1101000000001100 +0016CFr 1 D0 .hibytes %1101000000001101 +0016D0r 1 D0 .hibytes %1101000000001110 +0016D1r 1 D0 .hibytes %1101000000001111 +0016D2r 1 DF .hibytes %1101111111100001 +0016D3r 1 DF .hibytes %1101111111100010 +0016D4r 1 DF .hibytes %1101111111100011 +0016D5r 1 DF .hibytes %1101111111100100 +0016D6r 1 DF .hibytes %1101111111100101 +0016D7r 1 DF .hibytes %1101111111100110 +0016D8r 1 DF .hibytes %1101111111100111 +0016D9r 1 DF .hibytes %1101111111101000 +0016DAr 1 DF .hibytes %1101111111101001 +0016DBr 1 DF .hibytes %1101111111101010 +0016DCr 1 DF .hibytes %1101111111101011 +0016DDr 1 DF .hibytes %1101111111101100 +0016DEr 1 DF .hibytes %1101111111101101 +0016DFr 1 DF .hibytes %1101111111101110 +0016E0r 1 DF .hibytes %1101111111101111 +0016E1r 1 DF .hibytes %1101111111110000 +0016E2r 1 DF .hibytes %1101111111110001 +0016E3r 1 DF .hibytes %1101111111110010 +0016E4r 1 DF .hibytes %1101111111110011 +0016E5r 1 DF .hibytes %1101111111110100 +0016E6r 1 DF .hibytes %1101111111110101 +0016E7r 1 DF .hibytes %1101111111110110 +0016E8r 1 DF .hibytes %1101111111110111 +0016E9r 1 DF .hibytes %1101111111111000 +0016EAr 1 DF .hibytes %1101111111111001 +0016EBr 1 DF .hibytes %1101111111111010 +0016ECr 1 DF .hibytes %1101111111111011 +0016EDr 1 DF .hibytes %1101111111111100 +0016EEr 1 DF .hibytes %1101111111111101 +0016EFr 1 DF .hibytes %1101111111111110 +0016F0r 1 DF .hibytes %1101111111111111 +0016F1r 1 E0 .hibytes %1110000000000000 +0016F2r 1 E0 .hibytes %1110000000000001 +0016F3r 1 E0 .hibytes %1110000000000010 +0016F4r 1 E0 .hibytes %1110000000000011 +0016F5r 1 E0 .hibytes %1110000000000100 +0016F6r 1 E0 .hibytes %1110000000000101 +0016F7r 1 E0 .hibytes %1110000000000110 +0016F8r 1 E0 .hibytes %1110000000000111 +0016F9r 1 E0 .hibytes %1110000000001000 +0016FAr 1 E0 .hibytes %1110000000001001 +0016FBr 1 E0 .hibytes %1110000000001010 +0016FCr 1 E0 .hibytes %1110000000001011 +0016FDr 1 E0 .hibytes %1110000000001100 +0016FEr 1 E0 .hibytes %1110000000001101 +0016FFr 1 E0 .hibytes %1110000000001110 +001700r 1 E0 .hibytes %1110000000001111 +001701r 1 EF .hibytes %1110111111100001 +001702r 1 EF .hibytes %1110111111100010 +001703r 1 EF .hibytes %1110111111100011 +001704r 1 EF .hibytes %1110111111100100 +001705r 1 EF .hibytes %1110111111100101 +001706r 1 EF .hibytes %1110111111100110 +001707r 1 EF .hibytes %1110111111100111 +001708r 1 EF .hibytes %1110111111101000 +001709r 1 EF .hibytes %1110111111101001 +00170Ar 1 EF .hibytes %1110111111101010 +00170Br 1 EF .hibytes %1110111111101011 +00170Cr 1 EF .hibytes %1110111111101100 +00170Dr 1 EF .hibytes %1110111111101101 +00170Er 1 EF .hibytes %1110111111101110 +00170Fr 1 EF .hibytes %1110111111101111 +001710r 1 EF .hibytes %1110111111110000 +001711r 1 EF .hibytes %1110111111110001 +001712r 1 EF .hibytes %1110111111110010 +001713r 1 EF .hibytes %1110111111110011 +001714r 1 EF .hibytes %1110111111110100 +001715r 1 EF .hibytes %1110111111110101 +001716r 1 EF .hibytes %1110111111110110 +001717r 1 EF .hibytes %1110111111110111 +001718r 1 EF .hibytes %1110111111111000 +001719r 1 EF .hibytes %1110111111111001 +00171Ar 1 EF .hibytes %1110111111111010 +00171Br 1 EF .hibytes %1110111111111011 +00171Cr 1 EF .hibytes %1110111111111100 +00171Dr 1 EF .hibytes %1110111111111101 +00171Er 1 EF .hibytes %1110111111111110 +00171Fr 1 EF .hibytes %1110111111111111 +001720r 1 F0 .hibytes %1111000000000000 +001721r 1 F0 .hibytes %1111000000000001 +001722r 1 F0 .hibytes %1111000000000010 +001723r 1 F0 .hibytes %1111000000000011 +001724r 1 F0 .hibytes %1111000000000100 +001725r 1 F0 .hibytes %1111000000000101 +001726r 1 F0 .hibytes %1111000000000110 +001727r 1 F0 .hibytes %1111000000000111 +001728r 1 F0 .hibytes %1111000000001000 +001729r 1 F0 .hibytes %1111000000001001 +00172Ar 1 F0 .hibytes %1111000000001010 +00172Br 1 F0 .hibytes %1111000000001011 +00172Cr 1 F0 .hibytes %1111000000001100 +00172Dr 1 F0 .hibytes %1111000000001101 +00172Er 1 F0 .hibytes %1111000000001110 +00172Fr 1 F0 .hibytes %1111000000001111 +001730r 1 FF .hibytes %1111111111100001 +001731r 1 FF .hibytes %1111111111100010 +001732r 1 FF .hibytes %1111111111100011 +001733r 1 FF .hibytes %1111111111100100 +001734r 1 FF .hibytes %1111111111100101 +001735r 1 FF .hibytes %1111111111100110 +001736r 1 FF .hibytes %1111111111100111 +001737r 1 FF .hibytes %1111111111101000 +001738r 1 FF .hibytes %1111111111101001 +001739r 1 FF .hibytes %1111111111101010 +00173Ar 1 FF .hibytes %1111111111101011 +00173Br 1 FF .hibytes %1111111111101100 +00173Cr 1 FF .hibytes %1111111111101101 +00173Dr 1 FF .hibytes %1111111111101110 +00173Er 1 FF .hibytes %1111111111101111 +00173Fr 1 FF .hibytes %1111111111110000 +001740r 1 FF .hibytes %1111111111110001 +001741r 1 FF .hibytes %1111111111110010 +001742r 1 FF .hibytes %1111111111110011 +001743r 1 FF .hibytes %1111111111110100 +001744r 1 FF .hibytes %1111111111110101 +001745r 1 FF .hibytes %1111111111110110 +001746r 1 FF .hibytes %1111111111110111 +001747r 1 FF .hibytes %1111111111111000 +001748r 1 FF .hibytes %1111111111111001 +001749r 1 FF .hibytes %1111111111111010 +00174Ar 1 FF .hibytes %1111111111111011 +00174Br 1 FF .hibytes %1111111111111100 +00174Cr 1 FF .hibytes %1111111111111101 +00174Dr 1 FF .hibytes %1111111111111110 +00174Er 1 FF .hibytes %1111111111111111 +00174Fr 1 +00174Fr 1 ; multiple values on one line, decimal +00174Fr 1 00 00 00 00 .hibytes 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +001753r 1 00 00 00 00 +001757r 1 00 00 00 00 +00175Fr 1 00 00 00 00 .hibytes 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +001763r 1 00 00 00 00 +001767r 1 00 00 00 00 +00176Fr 1 00 00 00 00 .hibytes 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +001773r 1 00 00 00 00 +001777r 1 00 00 00 00 +00177Fr 1 00 00 00 00 .hibytes 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +001783r 1 00 00 00 00 +001787r 1 00 00 00 00 +00178Fr 1 00 00 00 00 .hibytes 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +001793r 1 00 00 00 00 +001797r 1 00 00 00 00 +00179Fr 1 01 01 01 01 .hibytes 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 +0017A3r 1 01 01 01 01 +0017A7r 1 01 01 01 01 +0017AFr 1 0F 0F 0F 0F .hibytes 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 +0017B3r 1 0F 0F 0F 0F +0017B7r 1 0F 0F 0F 0F +0017BFr 1 0F 0F 0F 0F .hibytes 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 +0017C3r 1 0F 0F 0F 0F +0017C7r 1 0F 0F 0F 0F +0017CFr 1 10 10 10 10 .hibytes 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 +0017D3r 1 10 10 10 10 +0017D7r 1 10 10 10 10 +0017DFr 1 7F 7F 7F 7F .hibytes 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 +0017E3r 1 7F 7F 7F 7F +0017E7r 1 7F 7F 7F 7F +0017EFr 1 80 80 80 80 .hibytes 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 +0017F3r 1 80 80 80 80 +0017F7r 1 80 80 80 80 +0017FFr 1 9F 9F 9F 9F .hibytes 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 +001803r 1 9F 9F 9F 9F +001807r 1 9F 9F 9F 9F +00180Fr 1 A0 A0 A0 A0 .hibytes 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 +001813r 1 A0 A0 A0 A0 +001817r 1 A0 A0 A0 A0 +00181Fr 1 AF AF AF AF .hibytes 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 +001823r 1 AF AF AF AF +001827r 1 AF AF AF AF +00182Fr 1 B0 B0 B0 B0 .hibytes 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 +001833r 1 B0 B0 B0 B0 +001837r 1 B0 B0 B0 B0 +00183Fr 1 BF BF BF BF .hibytes 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 +001843r 1 BF BF BF BF +001847r 1 BF BF BF BF +00184Fr 1 C0 C0 C0 C0 .hibytes 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 +001853r 1 C0 C0 C0 C0 +001857r 1 C0 C0 C0 C0 +00185Fr 1 CF CF CF CF .hibytes 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 +001863r 1 CF CF CF CF +001867r 1 CF CF CF CF +00186Fr 1 D0 D0 D0 D0 .hibytes 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 +001873r 1 D0 D0 D0 D0 +001877r 1 D0 D0 D0 D0 +00187Fr 1 DF DF DF DF .hibytes 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 +001883r 1 DF DF DF DF +001887r 1 DF DF DF DF +00188Fr 1 E0 E0 E0 E0 .hibytes 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 +001893r 1 E0 E0 E0 E0 +001897r 1 E0 E0 E0 E0 +00189Fr 1 EF EF EF EF .hibytes 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 +0018A3r 1 EF EF EF EF +0018A7r 1 EF EF EF EF +0018AFr 1 F0 F0 F0 F0 .hibytes 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 +0018B3r 1 F0 F0 F0 F0 +0018B7r 1 F0 F0 F0 F0 +0018BFr 1 FF FF FF FF .hibytes 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 +0018C3r 1 FF FF FF FF +0018C7r 1 FF FF FF FF +0018CFr 1 +0018CFr 1 ; multiple values on one line, hex +0018CFr 1 00 00 00 00 .hibytes $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +0018D3r 1 00 00 00 00 +0018D7r 1 00 00 00 00 +0018DFr 1 00 00 00 00 .hibytes $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +0018E3r 1 00 00 00 00 +0018E7r 1 00 00 00 00 +0018EFr 1 00 00 00 00 .hibytes $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +0018F3r 1 00 00 00 00 +0018F7r 1 00 00 00 00 +0018FFr 1 00 00 00 00 .hibytes $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +001903r 1 00 00 00 00 +001907r 1 00 00 00 00 +00190Fr 1 00 00 00 00 .hibytes $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +001913r 1 00 00 00 00 +001917r 1 00 00 00 00 +00191Fr 1 01 01 01 01 .hibytes $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f +001923r 1 01 01 01 01 +001927r 1 01 01 01 01 +00192Fr 1 0F 0F 0F 0F .hibytes $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef +001933r 1 0F 0F 0F 0F +001937r 1 0F 0F 0F 0F +00193Fr 1 0F 0F 0F 0F .hibytes $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff +001943r 1 0F 0F 0F 0F +001947r 1 0F 0F 0F 0F +00194Fr 1 10 10 10 10 .hibytes $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f +001953r 1 10 10 10 10 +001957r 1 10 10 10 10 +00195Fr 1 7F 7F 7F 7F .hibytes $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff +001963r 1 7F 7F 7F 7F +001967r 1 7F 7F 7F 7F +00196Fr 1 80 80 80 80 .hibytes $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f +001973r 1 80 80 80 80 +001977r 1 80 80 80 80 +00197Fr 1 9F 9F 9F 9F .hibytes $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff +001983r 1 9F 9F 9F 9F +001987r 1 9F 9F 9F 9F +00198Fr 1 A0 A0 A0 A0 .hibytes $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f +001993r 1 A0 A0 A0 A0 +001997r 1 A0 A0 A0 A0 +00199Fr 1 AF AF AF AF .hibytes $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff +0019A3r 1 AF AF AF AF +0019A7r 1 AF AF AF AF +0019AFr 1 B0 B0 B0 B0 .hibytes $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f +0019B3r 1 B0 B0 B0 B0 +0019B7r 1 B0 B0 B0 B0 +0019BFr 1 BF BF BF BF .hibytes $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff +0019C3r 1 BF BF BF BF +0019C7r 1 BF BF BF BF +0019CFr 1 C0 C0 C0 C0 .hibytes $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f +0019D3r 1 C0 C0 C0 C0 +0019D7r 1 C0 C0 C0 C0 +0019DFr 1 CF CF CF CF .hibytes $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff +0019E3r 1 CF CF CF CF +0019E7r 1 CF CF CF CF +0019EFr 1 D0 D0 D0 D0 .hibytes $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f +0019F3r 1 D0 D0 D0 D0 +0019F7r 1 D0 D0 D0 D0 +0019FFr 1 DF DF DF DF .hibytes $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff +001A03r 1 DF DF DF DF +001A07r 1 DF DF DF DF +001A0Fr 1 E0 E0 E0 E0 .hibytes $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f +001A13r 1 E0 E0 E0 E0 +001A17r 1 E0 E0 E0 E0 +001A1Fr 1 EF EF EF EF .hibytes $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff +001A23r 1 EF EF EF EF +001A27r 1 EF EF EF EF +001A2Fr 1 F0 F0 F0 F0 .hibytes $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f +001A33r 1 F0 F0 F0 F0 +001A37r 1 F0 F0 F0 F0 +001A3Fr 1 FF FF FF FF .hibytes $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff +001A43r 1 FF FF FF FF +001A47r 1 FF FF FF FF +001A4Fr 1 +001A4Fr 1 ; multiple values on one line, alternative hex +001A4Fr 1 00 00 00 00 .hibytes 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +001A53r 1 00 00 00 00 +001A57r 1 00 00 00 00 +001A5Fr 1 00 00 00 00 .hibytes 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +001A63r 1 00 00 00 00 +001A67r 1 00 00 00 00 +001A6Fr 1 00 00 00 00 .hibytes 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +001A73r 1 00 00 00 00 +001A77r 1 00 00 00 00 +001A7Fr 1 00 00 00 00 .hibytes 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +001A83r 1 00 00 00 00 +001A87r 1 00 00 00 00 +001A8Fr 1 00 00 00 00 .hibytes 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +001A93r 1 00 00 00 00 +001A97r 1 00 00 00 00 +001A9Fr 1 01 01 01 01 .hibytes 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh +001AA3r 1 01 01 01 01 +001AA7r 1 01 01 01 01 +001AAFr 1 0F 0F 0F 0F .hibytes 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh +001AB3r 1 0F 0F 0F 0F +001AB7r 1 0F 0F 0F 0F +001ABFr 1 0F 0F 0F 0F .hibytes 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh +001AC3r 1 0F 0F 0F 0F +001AC7r 1 0F 0F 0F 0F +001ACFr 1 10 10 10 10 .hibytes 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh +001AD3r 1 10 10 10 10 +001AD7r 1 10 10 10 10 +001ADFr 1 7F 7F 7F 7F .hibytes 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh +001AE3r 1 7F 7F 7F 7F +001AE7r 1 7F 7F 7F 7F +001AEFr 1 80 80 80 80 .hibytes 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh +001AF3r 1 80 80 80 80 +001AF7r 1 80 80 80 80 +001AFFr 1 9F 9F 9F 9F .hibytes 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh +001B03r 1 9F 9F 9F 9F +001B07r 1 9F 9F 9F 9F +001B0Fr 1 A0 A0 A0 A0 .hibytes 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh +001B13r 1 A0 A0 A0 A0 +001B17r 1 A0 A0 A0 A0 +001B1Fr 1 AF AF AF AF .hibytes 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh +001B23r 1 AF AF AF AF +001B27r 1 AF AF AF AF +001B2Fr 1 B0 B0 B0 B0 .hibytes 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh +001B33r 1 B0 B0 B0 B0 +001B37r 1 B0 B0 B0 B0 +001B3Fr 1 BF BF BF BF .hibytes 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh +001B43r 1 BF BF BF BF +001B47r 1 BF BF BF BF +001B4Fr 1 C0 C0 C0 C0 .hibytes 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh +001B53r 1 C0 C0 C0 C0 +001B57r 1 C0 C0 C0 C0 +001B5Fr 1 CF CF CF CF .hibytes 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh +001B63r 1 CF CF CF CF +001B67r 1 CF CF CF CF +001B6Fr 1 D0 D0 D0 D0 .hibytes 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh +001B73r 1 D0 D0 D0 D0 +001B77r 1 D0 D0 D0 D0 +001B7Fr 1 DF DF DF DF .hibytes 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh +001B83r 1 DF DF DF DF +001B87r 1 DF DF DF DF +001B8Fr 1 E0 E0 E0 E0 .hibytes 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh +001B93r 1 E0 E0 E0 E0 +001B97r 1 E0 E0 E0 E0 +001B9Fr 1 EF EF EF EF .hibytes 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh +001BA3r 1 EF EF EF EF +001BA7r 1 EF EF EF EF +001BAFr 1 F0 F0 F0 F0 .hibytes 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh +001BB3r 1 F0 F0 F0 F0 +001BB7r 1 F0 F0 F0 F0 +001BBFr 1 FF FF FF FF .hibytes 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh +001BC3r 1 FF FF FF FF +001BC7r 1 FF FF FF FF +001BCFr 1 +001BCFr 1 ; mix some variants +001BCFr 1 00 00 00 00 .hibytes 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +001BD3r 1 00 00 00 00 +001BD7r 1 00 00 00 00 +001BDEr 1 diff --git a/test/asm/listing/106-hibytes.s b/test/asm/listing/106-hibytes.s new file mode 100644 index 000000000..2a94672a3 --- /dev/null +++ b/test/asm/listing/106-hibytes.s @@ -0,0 +1,6076 @@ +; 2022-06-15 Spiro Trikaliotis + + + ; upper case pseudo-op + .HIBYTES 0 + .HIBYTES 1 + .HIBYTES 2 + .HIBYTES 3 + .HIBYTES 4 + .HIBYTES 5 + .HIBYTES 6 + .HIBYTES 7 + .HIBYTES 8 + .HIBYTES 9 + .HIBYTES 10 + .HIBYTES 11 + .HIBYTES 12 + .HIBYTES 13 + .HIBYTES 14 + .HIBYTES 15 + .HIBYTES 16 + .HIBYTES 17 + .HIBYTES 18 + .HIBYTES 19 + .HIBYTES 112 + .HIBYTES 113 + .HIBYTES 114 + .HIBYTES 115 + .HIBYTES 116 + .HIBYTES 117 + .HIBYTES 118 + .HIBYTES 119 + .HIBYTES 120 + .HIBYTES 121 + .HIBYTES 122 + .HIBYTES 123 + .HIBYTES 124 + .HIBYTES 125 + .HIBYTES 126 + .HIBYTES 127 + .HIBYTES 128 + .HIBYTES 129 + .HIBYTES 130 + .HIBYTES 131 + .HIBYTES 132 + .HIBYTES 133 + .HIBYTES 134 + .HIBYTES 240 + .HIBYTES 241 + .HIBYTES 242 + .HIBYTES 243 + .HIBYTES 244 + .HIBYTES 245 + .HIBYTES 246 + .HIBYTES 247 + .HIBYTES 248 + .HIBYTES 249 + .HIBYTES 250 + .HIBYTES 251 + .HIBYTES 252 + .HIBYTES 253 + .HIBYTES 254 + .HIBYTES 255 + .HIBYTES 256 + .HIBYTES 257 + .HIBYTES 258 + .HIBYTES 259 + .HIBYTES 4050 + .HIBYTES 4051 + .HIBYTES 4052 + .HIBYTES 4053 + .HIBYTES 4054 + .HIBYTES 4055 + .HIBYTES 4056 + .HIBYTES 4057 + .HIBYTES 4058 + .HIBYTES 4059 + .HIBYTES 4060 + .HIBYTES 4061 + .HIBYTES 4062 + .HIBYTES 4063 + .HIBYTES 4064 + .HIBYTES 4065 + .HIBYTES 4066 + .HIBYTES 4067 + .HIBYTES 4068 + .HIBYTES 4069 + .HIBYTES 4070 + .HIBYTES 4071 + .HIBYTES 4072 + .HIBYTES 4073 + .HIBYTES 4074 + .HIBYTES 4075 + .HIBYTES 4076 + .HIBYTES 4077 + .HIBYTES 4078 + .HIBYTES 4079 + .HIBYTES 4080 + .HIBYTES 4081 + .HIBYTES 4082 + .HIBYTES 4083 + .HIBYTES 4084 + .HIBYTES 4085 + .HIBYTES 4086 + .HIBYTES 4087 + .HIBYTES 4088 + .HIBYTES 4089 + .HIBYTES 4090 + .HIBYTES 4091 + .HIBYTES 4092 + .HIBYTES 4093 + .HIBYTES 4094 + .HIBYTES 4095 + .HIBYTES 4096 + .HIBYTES 4097 + .HIBYTES 4098 + .HIBYTES 4099 + .HIBYTES 4100 + .HIBYTES 4101 + .HIBYTES 4102 + .HIBYTES 4103 + .HIBYTES 4104 + .HIBYTES 32752 + .HIBYTES 32753 + .HIBYTES 32754 + .HIBYTES 32755 + .HIBYTES 32756 + .HIBYTES 32757 + .HIBYTES 32758 + .HIBYTES 32759 + .HIBYTES 32760 + .HIBYTES 32761 + .HIBYTES 32762 + .HIBYTES 32763 + .HIBYTES 32764 + .HIBYTES 32765 + .HIBYTES 32766 + .HIBYTES 32767 + .HIBYTES 32768 + .HIBYTES 32769 + .HIBYTES 32770 + .HIBYTES 32771 + .HIBYTES 32772 + .HIBYTES 32773 + .HIBYTES 32774 + .HIBYTES 32775 + .HIBYTES 32776 + .HIBYTES 32777 + .HIBYTES 32778 + .HIBYTES 32779 + .HIBYTES 40929 + .HIBYTES 40930 + .HIBYTES 40931 + .HIBYTES 40932 + .HIBYTES 40933 + .HIBYTES 40934 + .HIBYTES 40935 + .HIBYTES 40936 + .HIBYTES 40937 + .HIBYTES 40938 + .HIBYTES 40939 + .HIBYTES 40940 + .HIBYTES 40941 + .HIBYTES 40942 + .HIBYTES 40943 + .HIBYTES 40944 + .HIBYTES 40945 + .HIBYTES 40946 + .HIBYTES 40947 + .HIBYTES 40948 + .HIBYTES 40949 + .HIBYTES 40950 + .HIBYTES 40951 + .HIBYTES 40952 + .HIBYTES 40953 + .HIBYTES 40954 + .HIBYTES 40955 + .HIBYTES 40956 + .HIBYTES 40957 + .HIBYTES 40958 + .HIBYTES 40959 + .HIBYTES 40960 + .HIBYTES 40961 + .HIBYTES 40962 + .HIBYTES 40963 + .HIBYTES 40964 + .HIBYTES 40965 + .HIBYTES 40966 + .HIBYTES 40967 + .HIBYTES 40968 + .HIBYTES 40969 + .HIBYTES 40970 + .HIBYTES 40971 + .HIBYTES 40972 + .HIBYTES 40973 + .HIBYTES 40974 + .HIBYTES 40975 + .HIBYTES 45025 + .HIBYTES 45026 + .HIBYTES 45027 + .HIBYTES 45028 + .HIBYTES 45029 + .HIBYTES 45030 + .HIBYTES 45031 + .HIBYTES 45032 + .HIBYTES 45033 + .HIBYTES 45034 + .HIBYTES 45035 + .HIBYTES 45036 + .HIBYTES 45037 + .HIBYTES 45038 + .HIBYTES 45039 + .HIBYTES 45040 + .HIBYTES 45041 + .HIBYTES 45042 + .HIBYTES 45043 + .HIBYTES 45044 + .HIBYTES 45045 + .HIBYTES 45046 + .HIBYTES 45047 + .HIBYTES 45048 + .HIBYTES 45049 + .HIBYTES 45050 + .HIBYTES 45051 + .HIBYTES 45052 + .HIBYTES 45053 + .HIBYTES 45054 + .HIBYTES 45055 + .HIBYTES 45056 + .HIBYTES 45057 + .HIBYTES 45058 + .HIBYTES 45059 + .HIBYTES 45060 + .HIBYTES 45061 + .HIBYTES 45062 + .HIBYTES 45063 + .HIBYTES 45064 + .HIBYTES 45065 + .HIBYTES 45066 + .HIBYTES 45067 + .HIBYTES 45068 + .HIBYTES 45069 + .HIBYTES 45070 + .HIBYTES 45071 + .HIBYTES 49121 + .HIBYTES 49122 + .HIBYTES 49123 + .HIBYTES 49124 + .HIBYTES 49125 + .HIBYTES 49126 + .HIBYTES 49127 + .HIBYTES 49128 + .HIBYTES 49129 + .HIBYTES 49130 + .HIBYTES 49131 + .HIBYTES 49132 + .HIBYTES 49133 + .HIBYTES 49134 + .HIBYTES 49135 + .HIBYTES 49136 + .HIBYTES 49137 + .HIBYTES 49138 + .HIBYTES 49139 + .HIBYTES 49140 + .HIBYTES 49141 + .HIBYTES 49142 + .HIBYTES 49143 + .HIBYTES 49144 + .HIBYTES 49145 + .HIBYTES 49146 + .HIBYTES 49147 + .HIBYTES 49148 + .HIBYTES 49149 + .HIBYTES 49150 + .HIBYTES 49151 + .HIBYTES 49152 + .HIBYTES 49153 + .HIBYTES 49154 + .HIBYTES 49155 + .HIBYTES 49156 + .HIBYTES 49157 + .HIBYTES 49158 + .HIBYTES 49159 + .HIBYTES 49160 + .HIBYTES 49161 + .HIBYTES 49162 + .HIBYTES 49163 + .HIBYTES 49164 + .HIBYTES 49165 + .HIBYTES 49166 + .HIBYTES 49167 + .HIBYTES 53217 + .HIBYTES 53218 + .HIBYTES 53219 + .HIBYTES 53220 + .HIBYTES 53221 + .HIBYTES 53222 + .HIBYTES 53223 + .HIBYTES 53224 + .HIBYTES 53225 + .HIBYTES 53226 + .HIBYTES 53227 + .HIBYTES 53228 + .HIBYTES 53229 + .HIBYTES 53230 + .HIBYTES 53231 + .HIBYTES 53232 + .HIBYTES 53233 + .HIBYTES 53234 + .HIBYTES 53235 + .HIBYTES 53236 + .HIBYTES 53237 + .HIBYTES 53238 + .HIBYTES 53239 + .HIBYTES 53240 + .HIBYTES 53241 + .HIBYTES 53242 + .HIBYTES 53243 + .HIBYTES 53244 + .HIBYTES 53245 + .HIBYTES 53246 + .HIBYTES 53247 + .HIBYTES 53248 + .HIBYTES 53249 + .HIBYTES 53250 + .HIBYTES 53251 + .HIBYTES 53252 + .HIBYTES 53253 + .HIBYTES 53254 + .HIBYTES 53255 + .HIBYTES 53256 + .HIBYTES 53257 + .HIBYTES 53258 + .HIBYTES 53259 + .HIBYTES 53260 + .HIBYTES 53261 + .HIBYTES 53262 + .HIBYTES 53263 + .HIBYTES 57313 + .HIBYTES 57314 + .HIBYTES 57315 + .HIBYTES 57316 + .HIBYTES 57317 + .HIBYTES 57318 + .HIBYTES 57319 + .HIBYTES 57320 + .HIBYTES 57321 + .HIBYTES 57322 + .HIBYTES 57323 + .HIBYTES 57324 + .HIBYTES 57325 + .HIBYTES 57326 + .HIBYTES 57327 + .HIBYTES 57328 + .HIBYTES 57329 + .HIBYTES 57330 + .HIBYTES 57331 + .HIBYTES 57332 + .HIBYTES 57333 + .HIBYTES 57334 + .HIBYTES 57335 + .HIBYTES 57336 + .HIBYTES 57337 + .HIBYTES 57338 + .HIBYTES 57339 + .HIBYTES 57340 + .HIBYTES 57341 + .HIBYTES 57342 + .HIBYTES 57343 + .HIBYTES 57344 + .HIBYTES 57345 + .HIBYTES 57346 + .HIBYTES 57347 + .HIBYTES 57348 + .HIBYTES 57349 + .HIBYTES 57350 + .HIBYTES 57351 + .HIBYTES 57352 + .HIBYTES 57353 + .HIBYTES 57354 + .HIBYTES 57355 + .HIBYTES 57356 + .HIBYTES 57357 + .HIBYTES 57358 + .HIBYTES 57359 + .HIBYTES 61409 + .HIBYTES 61410 + .HIBYTES 61411 + .HIBYTES 61412 + .HIBYTES 61413 + .HIBYTES 61414 + .HIBYTES 61415 + .HIBYTES 61416 + .HIBYTES 61417 + .HIBYTES 61418 + .HIBYTES 61419 + .HIBYTES 61420 + .HIBYTES 61421 + .HIBYTES 61422 + .HIBYTES 61423 + .HIBYTES 61424 + .HIBYTES 61425 + .HIBYTES 61426 + .HIBYTES 61427 + .HIBYTES 61428 + .HIBYTES 61429 + .HIBYTES 61430 + .HIBYTES 61431 + .HIBYTES 61432 + .HIBYTES 61433 + .HIBYTES 61434 + .HIBYTES 61435 + .HIBYTES 61436 + .HIBYTES 61437 + .HIBYTES 61438 + .HIBYTES 61439 + .HIBYTES 61440 + .HIBYTES 61441 + .HIBYTES 61442 + .HIBYTES 61443 + .HIBYTES 61444 + .HIBYTES 61445 + .HIBYTES 61446 + .HIBYTES 61447 + .HIBYTES 61448 + .HIBYTES 61449 + .HIBYTES 61450 + .HIBYTES 61451 + .HIBYTES 61452 + .HIBYTES 61453 + .HIBYTES 61454 + .HIBYTES 61455 + .HIBYTES 65505 + .HIBYTES 65506 + .HIBYTES 65507 + .HIBYTES 65508 + .HIBYTES 65509 + .HIBYTES 65510 + .HIBYTES 65511 + .HIBYTES 65512 + .HIBYTES 65513 + .HIBYTES 65514 + .HIBYTES 65515 + .HIBYTES 65516 + .HIBYTES 65517 + .HIBYTES 65518 + .HIBYTES 65519 + .HIBYTES 65520 + .HIBYTES 65521 + .HIBYTES 65522 + .HIBYTES 65523 + .HIBYTES 65524 + .HIBYTES 65525 + .HIBYTES 65526 + .HIBYTES 65527 + .HIBYTES 65528 + .HIBYTES 65529 + .HIBYTES 65530 + .HIBYTES 65531 + .HIBYTES 65532 + .HIBYTES 65533 + .HIBYTES 65534 + .HIBYTES 65535 + + ; lower case pseudo-op + .hibytes 0 + .hibytes 1 + .hibytes 2 + .hibytes 3 + .hibytes 4 + .hibytes 5 + .hibytes 6 + .hibytes 7 + .hibytes 8 + .hibytes 9 + .hibytes 10 + .hibytes 11 + .hibytes 12 + .hibytes 13 + .hibytes 14 + .hibytes 15 + .hibytes 16 + .hibytes 17 + .hibytes 18 + .hibytes 19 + .hibytes 112 + .hibytes 113 + .hibytes 114 + .hibytes 115 + .hibytes 116 + .hibytes 117 + .hibytes 118 + .hibytes 119 + .hibytes 120 + .hibytes 121 + .hibytes 122 + .hibytes 123 + .hibytes 124 + .hibytes 125 + .hibytes 126 + .hibytes 127 + .hibytes 128 + .hibytes 129 + .hibytes 130 + .hibytes 131 + .hibytes 132 + .hibytes 133 + .hibytes 134 + .hibytes 240 + .hibytes 241 + .hibytes 242 + .hibytes 243 + .hibytes 244 + .hibytes 245 + .hibytes 246 + .hibytes 247 + .hibytes 248 + .hibytes 249 + .hibytes 250 + .hibytes 251 + .hibytes 252 + .hibytes 253 + .hibytes 254 + .hibytes 255 + .hibytes 256 + .hibytes 257 + .hibytes 258 + .hibytes 259 + .hibytes 4050 + .hibytes 4051 + .hibytes 4052 + .hibytes 4053 + .hibytes 4054 + .hibytes 4055 + .hibytes 4056 + .hibytes 4057 + .hibytes 4058 + .hibytes 4059 + .hibytes 4060 + .hibytes 4061 + .hibytes 4062 + .hibytes 4063 + .hibytes 4064 + .hibytes 4065 + .hibytes 4066 + .hibytes 4067 + .hibytes 4068 + .hibytes 4069 + .hibytes 4070 + .hibytes 4071 + .hibytes 4072 + .hibytes 4073 + .hibytes 4074 + .hibytes 4075 + .hibytes 4076 + .hibytes 4077 + .hibytes 4078 + .hibytes 4079 + .hibytes 4080 + .hibytes 4081 + .hibytes 4082 + .hibytes 4083 + .hibytes 4084 + .hibytes 4085 + .hibytes 4086 + .hibytes 4087 + .hibytes 4088 + .hibytes 4089 + .hibytes 4090 + .hibytes 4091 + .hibytes 4092 + .hibytes 4093 + .hibytes 4094 + .hibytes 4095 + .hibytes 4096 + .hibytes 4097 + .hibytes 4098 + .hibytes 4099 + .hibytes 4100 + .hibytes 4101 + .hibytes 4102 + .hibytes 4103 + .hibytes 4104 + .hibytes 32752 + .hibytes 32753 + .hibytes 32754 + .hibytes 32755 + .hibytes 32756 + .hibytes 32757 + .hibytes 32758 + .hibytes 32759 + .hibytes 32760 + .hibytes 32761 + .hibytes 32762 + .hibytes 32763 + .hibytes 32764 + .hibytes 32765 + .hibytes 32766 + .hibytes 32767 + .hibytes 32768 + .hibytes 32769 + .hibytes 32770 + .hibytes 32771 + .hibytes 32772 + .hibytes 32773 + .hibytes 32774 + .hibytes 32775 + .hibytes 32776 + .hibytes 32777 + .hibytes 32778 + .hibytes 32779 + .hibytes 40929 + .hibytes 40930 + .hibytes 40931 + .hibytes 40932 + .hibytes 40933 + .hibytes 40934 + .hibytes 40935 + .hibytes 40936 + .hibytes 40937 + .hibytes 40938 + .hibytes 40939 + .hibytes 40940 + .hibytes 40941 + .hibytes 40942 + .hibytes 40943 + .hibytes 40944 + .hibytes 40945 + .hibytes 40946 + .hibytes 40947 + .hibytes 40948 + .hibytes 40949 + .hibytes 40950 + .hibytes 40951 + .hibytes 40952 + .hibytes 40953 + .hibytes 40954 + .hibytes 40955 + .hibytes 40956 + .hibytes 40957 + .hibytes 40958 + .hibytes 40959 + .hibytes 40960 + .hibytes 40961 + .hibytes 40962 + .hibytes 40963 + .hibytes 40964 + .hibytes 40965 + .hibytes 40966 + .hibytes 40967 + .hibytes 40968 + .hibytes 40969 + .hibytes 40970 + .hibytes 40971 + .hibytes 40972 + .hibytes 40973 + .hibytes 40974 + .hibytes 40975 + .hibytes 45025 + .hibytes 45026 + .hibytes 45027 + .hibytes 45028 + .hibytes 45029 + .hibytes 45030 + .hibytes 45031 + .hibytes 45032 + .hibytes 45033 + .hibytes 45034 + .hibytes 45035 + .hibytes 45036 + .hibytes 45037 + .hibytes 45038 + .hibytes 45039 + .hibytes 45040 + .hibytes 45041 + .hibytes 45042 + .hibytes 45043 + .hibytes 45044 + .hibytes 45045 + .hibytes 45046 + .hibytes 45047 + .hibytes 45048 + .hibytes 45049 + .hibytes 45050 + .hibytes 45051 + .hibytes 45052 + .hibytes 45053 + .hibytes 45054 + .hibytes 45055 + .hibytes 45056 + .hibytes 45057 + .hibytes 45058 + .hibytes 45059 + .hibytes 45060 + .hibytes 45061 + .hibytes 45062 + .hibytes 45063 + .hibytes 45064 + .hibytes 45065 + .hibytes 45066 + .hibytes 45067 + .hibytes 45068 + .hibytes 45069 + .hibytes 45070 + .hibytes 45071 + .hibytes 49121 + .hibytes 49122 + .hibytes 49123 + .hibytes 49124 + .hibytes 49125 + .hibytes 49126 + .hibytes 49127 + .hibytes 49128 + .hibytes 49129 + .hibytes 49130 + .hibytes 49131 + .hibytes 49132 + .hibytes 49133 + .hibytes 49134 + .hibytes 49135 + .hibytes 49136 + .hibytes 49137 + .hibytes 49138 + .hibytes 49139 + .hibytes 49140 + .hibytes 49141 + .hibytes 49142 + .hibytes 49143 + .hibytes 49144 + .hibytes 49145 + .hibytes 49146 + .hibytes 49147 + .hibytes 49148 + .hibytes 49149 + .hibytes 49150 + .hibytes 49151 + .hibytes 49152 + .hibytes 49153 + .hibytes 49154 + .hibytes 49155 + .hibytes 49156 + .hibytes 49157 + .hibytes 49158 + .hibytes 49159 + .hibytes 49160 + .hibytes 49161 + .hibytes 49162 + .hibytes 49163 + .hibytes 49164 + .hibytes 49165 + .hibytes 49166 + .hibytes 49167 + .hibytes 53217 + .hibytes 53218 + .hibytes 53219 + .hibytes 53220 + .hibytes 53221 + .hibytes 53222 + .hibytes 53223 + .hibytes 53224 + .hibytes 53225 + .hibytes 53226 + .hibytes 53227 + .hibytes 53228 + .hibytes 53229 + .hibytes 53230 + .hibytes 53231 + .hibytes 53232 + .hibytes 53233 + .hibytes 53234 + .hibytes 53235 + .hibytes 53236 + .hibytes 53237 + .hibytes 53238 + .hibytes 53239 + .hibytes 53240 + .hibytes 53241 + .hibytes 53242 + .hibytes 53243 + .hibytes 53244 + .hibytes 53245 + .hibytes 53246 + .hibytes 53247 + .hibytes 53248 + .hibytes 53249 + .hibytes 53250 + .hibytes 53251 + .hibytes 53252 + .hibytes 53253 + .hibytes 53254 + .hibytes 53255 + .hibytes 53256 + .hibytes 53257 + .hibytes 53258 + .hibytes 53259 + .hibytes 53260 + .hibytes 53261 + .hibytes 53262 + .hibytes 53263 + .hibytes 57313 + .hibytes 57314 + .hibytes 57315 + .hibytes 57316 + .hibytes 57317 + .hibytes 57318 + .hibytes 57319 + .hibytes 57320 + .hibytes 57321 + .hibytes 57322 + .hibytes 57323 + .hibytes 57324 + .hibytes 57325 + .hibytes 57326 + .hibytes 57327 + .hibytes 57328 + .hibytes 57329 + .hibytes 57330 + .hibytes 57331 + .hibytes 57332 + .hibytes 57333 + .hibytes 57334 + .hibytes 57335 + .hibytes 57336 + .hibytes 57337 + .hibytes 57338 + .hibytes 57339 + .hibytes 57340 + .hibytes 57341 + .hibytes 57342 + .hibytes 57343 + .hibytes 57344 + .hibytes 57345 + .hibytes 57346 + .hibytes 57347 + .hibytes 57348 + .hibytes 57349 + .hibytes 57350 + .hibytes 57351 + .hibytes 57352 + .hibytes 57353 + .hibytes 57354 + .hibytes 57355 + .hibytes 57356 + .hibytes 57357 + .hibytes 57358 + .hibytes 57359 + .hibytes 61409 + .hibytes 61410 + .hibytes 61411 + .hibytes 61412 + .hibytes 61413 + .hibytes 61414 + .hibytes 61415 + .hibytes 61416 + .hibytes 61417 + .hibytes 61418 + .hibytes 61419 + .hibytes 61420 + .hibytes 61421 + .hibytes 61422 + .hibytes 61423 + .hibytes 61424 + .hibytes 61425 + .hibytes 61426 + .hibytes 61427 + .hibytes 61428 + .hibytes 61429 + .hibytes 61430 + .hibytes 61431 + .hibytes 61432 + .hibytes 61433 + .hibytes 61434 + .hibytes 61435 + .hibytes 61436 + .hibytes 61437 + .hibytes 61438 + .hibytes 61439 + .hibytes 61440 + .hibytes 61441 + .hibytes 61442 + .hibytes 61443 + .hibytes 61444 + .hibytes 61445 + .hibytes 61446 + .hibytes 61447 + .hibytes 61448 + .hibytes 61449 + .hibytes 61450 + .hibytes 61451 + .hibytes 61452 + .hibytes 61453 + .hibytes 61454 + .hibytes 61455 + .hibytes 65505 + .hibytes 65506 + .hibytes 65507 + .hibytes 65508 + .hibytes 65509 + .hibytes 65510 + .hibytes 65511 + .hibytes 65512 + .hibytes 65513 + .hibytes 65514 + .hibytes 65515 + .hibytes 65516 + .hibytes 65517 + .hibytes 65518 + .hibytes 65519 + .hibytes 65520 + .hibytes 65521 + .hibytes 65522 + .hibytes 65523 + .hibytes 65524 + .hibytes 65525 + .hibytes 65526 + .hibytes 65527 + .hibytes 65528 + .hibytes 65529 + .hibytes 65530 + .hibytes 65531 + .hibytes 65532 + .hibytes 65533 + .hibytes 65534 + .hibytes 65535 + + ; hex values + .hibytes $0 + .hibytes $1 + .hibytes $2 + .hibytes $3 + .hibytes $4 + .hibytes $5 + .hibytes $6 + .hibytes $7 + .hibytes $8 + .hibytes $9 + .hibytes $a + .hibytes $b + .hibytes $c + .hibytes $d + .hibytes $e + .hibytes $f + .hibytes $10 + .hibytes $11 + .hibytes $12 + .hibytes $13 + .hibytes $70 + .hibytes $71 + .hibytes $72 + .hibytes $73 + .hibytes $74 + .hibytes $75 + .hibytes $76 + .hibytes $77 + .hibytes $78 + .hibytes $79 + .hibytes $7a + .hibytes $7b + .hibytes $7c + .hibytes $7d + .hibytes $7e + .hibytes $7f + .hibytes $80 + .hibytes $81 + .hibytes $82 + .hibytes $83 + .hibytes $84 + .hibytes $85 + .hibytes $86 + .hibytes $f0 + .hibytes $f1 + .hibytes $f2 + .hibytes $f3 + .hibytes $f4 + .hibytes $f5 + .hibytes $f6 + .hibytes $f7 + .hibytes $f8 + .hibytes $f9 + .hibytes $fa + .hibytes $fb + .hibytes $fc + .hibytes $fd + .hibytes $fe + .hibytes $ff + .hibytes $100 + .hibytes $101 + .hibytes $102 + .hibytes $103 + .hibytes $fd2 + .hibytes $fd3 + .hibytes $fd4 + .hibytes $fd5 + .hibytes $fd6 + .hibytes $fd7 + .hibytes $fd8 + .hibytes $fd9 + .hibytes $fda + .hibytes $fdb + .hibytes $fdc + .hibytes $fdd + .hibytes $fde + .hibytes $fdf + .hibytes $fe0 + .hibytes $fe1 + .hibytes $fe2 + .hibytes $fe3 + .hibytes $fe4 + .hibytes $fe5 + .hibytes $fe6 + .hibytes $fe7 + .hibytes $fe8 + .hibytes $fe9 + .hibytes $fea + .hibytes $feb + .hibytes $fec + .hibytes $fed + .hibytes $fee + .hibytes $fef + .hibytes $ff0 + .hibytes $ff1 + .hibytes $ff2 + .hibytes $ff3 + .hibytes $ff4 + .hibytes $ff5 + .hibytes $ff6 + .hibytes $ff7 + .hibytes $ff8 + .hibytes $ff9 + .hibytes $ffa + .hibytes $ffb + .hibytes $ffc + .hibytes $ffd + .hibytes $ffe + .hibytes $fff + .hibytes $1000 + .hibytes $1001 + .hibytes $1002 + .hibytes $1003 + .hibytes $1004 + .hibytes $1005 + .hibytes $1006 + .hibytes $1007 + .hibytes $1008 + .hibytes $7ff0 + .hibytes $7ff1 + .hibytes $7ff2 + .hibytes $7ff3 + .hibytes $7ff4 + .hibytes $7ff5 + .hibytes $7ff6 + .hibytes $7ff7 + .hibytes $7ff8 + .hibytes $7ff9 + .hibytes $7ffa + .hibytes $7ffb + .hibytes $7ffc + .hibytes $7ffd + .hibytes $7ffe + .hibytes $7fff + .hibytes $8000 + .hibytes $8001 + .hibytes $8002 + .hibytes $8003 + .hibytes $8004 + .hibytes $8005 + .hibytes $8006 + .hibytes $8007 + .hibytes $8008 + .hibytes $8009 + .hibytes $800a + .hibytes $800b + .hibytes $9fe1 + .hibytes $9fe2 + .hibytes $9fe3 + .hibytes $9fe4 + .hibytes $9fe5 + .hibytes $9fe6 + .hibytes $9fe7 + .hibytes $9fe8 + .hibytes $9fe9 + .hibytes $9fea + .hibytes $9feb + .hibytes $9fec + .hibytes $9fed + .hibytes $9fee + .hibytes $9fef + .hibytes $9ff0 + .hibytes $9ff1 + .hibytes $9ff2 + .hibytes $9ff3 + .hibytes $9ff4 + .hibytes $9ff5 + .hibytes $9ff6 + .hibytes $9ff7 + .hibytes $9ff8 + .hibytes $9ff9 + .hibytes $9ffa + .hibytes $9ffb + .hibytes $9ffc + .hibytes $9ffd + .hibytes $9ffe + .hibytes $9fff + .hibytes $a000 + .hibytes $a001 + .hibytes $a002 + .hibytes $a003 + .hibytes $a004 + .hibytes $a005 + .hibytes $a006 + .hibytes $a007 + .hibytes $a008 + .hibytes $a009 + .hibytes $a00a + .hibytes $a00b + .hibytes $a00c + .hibytes $a00d + .hibytes $a00e + .hibytes $a00f + .hibytes $afe1 + .hibytes $afe2 + .hibytes $afe3 + .hibytes $afe4 + .hibytes $afe5 + .hibytes $afe6 + .hibytes $afe7 + .hibytes $afe8 + .hibytes $afe9 + .hibytes $afea + .hibytes $afeb + .hibytes $afec + .hibytes $afed + .hibytes $afee + .hibytes $afef + .hibytes $aff0 + .hibytes $aff1 + .hibytes $aff2 + .hibytes $aff3 + .hibytes $aff4 + .hibytes $aff5 + .hibytes $aff6 + .hibytes $aff7 + .hibytes $aff8 + .hibytes $aff9 + .hibytes $affa + .hibytes $affb + .hibytes $affc + .hibytes $affd + .hibytes $affe + .hibytes $afff + .hibytes $b000 + .hibytes $b001 + .hibytes $b002 + .hibytes $b003 + .hibytes $b004 + .hibytes $b005 + .hibytes $b006 + .hibytes $b007 + .hibytes $b008 + .hibytes $b009 + .hibytes $b00a + .hibytes $b00b + .hibytes $b00c + .hibytes $b00d + .hibytes $b00e + .hibytes $b00f + .hibytes $bfe1 + .hibytes $bfe2 + .hibytes $bfe3 + .hibytes $bfe4 + .hibytes $bfe5 + .hibytes $bfe6 + .hibytes $bfe7 + .hibytes $bfe8 + .hibytes $bfe9 + .hibytes $bfea + .hibytes $bfeb + .hibytes $bfec + .hibytes $bfed + .hibytes $bfee + .hibytes $bfef + .hibytes $bff0 + .hibytes $bff1 + .hibytes $bff2 + .hibytes $bff3 + .hibytes $bff4 + .hibytes $bff5 + .hibytes $bff6 + .hibytes $bff7 + .hibytes $bff8 + .hibytes $bff9 + .hibytes $bffa + .hibytes $bffb + .hibytes $bffc + .hibytes $bffd + .hibytes $bffe + .hibytes $bfff + .hibytes $c000 + .hibytes $c001 + .hibytes $c002 + .hibytes $c003 + .hibytes $c004 + .hibytes $c005 + .hibytes $c006 + .hibytes $c007 + .hibytes $c008 + .hibytes $c009 + .hibytes $c00a + .hibytes $c00b + .hibytes $c00c + .hibytes $c00d + .hibytes $c00e + .hibytes $c00f + .hibytes $cfe1 + .hibytes $cfe2 + .hibytes $cfe3 + .hibytes $cfe4 + .hibytes $cfe5 + .hibytes $cfe6 + .hibytes $cfe7 + .hibytes $cfe8 + .hibytes $cfe9 + .hibytes $cfea + .hibytes $cfeb + .hibytes $cfec + .hibytes $cfed + .hibytes $cfee + .hibytes $cfef + .hibytes $cff0 + .hibytes $cff1 + .hibytes $cff2 + .hibytes $cff3 + .hibytes $cff4 + .hibytes $cff5 + .hibytes $cff6 + .hibytes $cff7 + .hibytes $cff8 + .hibytes $cff9 + .hibytes $cffa + .hibytes $cffb + .hibytes $cffc + .hibytes $cffd + .hibytes $cffe + .hibytes $cfff + .hibytes $d000 + .hibytes $d001 + .hibytes $d002 + .hibytes $d003 + .hibytes $d004 + .hibytes $d005 + .hibytes $d006 + .hibytes $d007 + .hibytes $d008 + .hibytes $d009 + .hibytes $d00a + .hibytes $d00b + .hibytes $d00c + .hibytes $d00d + .hibytes $d00e + .hibytes $d00f + .hibytes $dfe1 + .hibytes $dfe2 + .hibytes $dfe3 + .hibytes $dfe4 + .hibytes $dfe5 + .hibytes $dfe6 + .hibytes $dfe7 + .hibytes $dfe8 + .hibytes $dfe9 + .hibytes $dfea + .hibytes $dfeb + .hibytes $dfec + .hibytes $dfed + .hibytes $dfee + .hibytes $dfef + .hibytes $dff0 + .hibytes $dff1 + .hibytes $dff2 + .hibytes $dff3 + .hibytes $dff4 + .hibytes $dff5 + .hibytes $dff6 + .hibytes $dff7 + .hibytes $dff8 + .hibytes $dff9 + .hibytes $dffa + .hibytes $dffb + .hibytes $dffc + .hibytes $dffd + .hibytes $dffe + .hibytes $dfff + .hibytes $e000 + .hibytes $e001 + .hibytes $e002 + .hibytes $e003 + .hibytes $e004 + .hibytes $e005 + .hibytes $e006 + .hibytes $e007 + .hibytes $e008 + .hibytes $e009 + .hibytes $e00a + .hibytes $e00b + .hibytes $e00c + .hibytes $e00d + .hibytes $e00e + .hibytes $e00f + .hibytes $efe1 + .hibytes $efe2 + .hibytes $efe3 + .hibytes $efe4 + .hibytes $efe5 + .hibytes $efe6 + .hibytes $efe7 + .hibytes $efe8 + .hibytes $efe9 + .hibytes $efea + .hibytes $efeb + .hibytes $efec + .hibytes $efed + .hibytes $efee + .hibytes $efef + .hibytes $eff0 + .hibytes $eff1 + .hibytes $eff2 + .hibytes $eff3 + .hibytes $eff4 + .hibytes $eff5 + .hibytes $eff6 + .hibytes $eff7 + .hibytes $eff8 + .hibytes $eff9 + .hibytes $effa + .hibytes $effb + .hibytes $effc + .hibytes $effd + .hibytes $effe + .hibytes $efff + .hibytes $f000 + .hibytes $f001 + .hibytes $f002 + .hibytes $f003 + .hibytes $f004 + .hibytes $f005 + .hibytes $f006 + .hibytes $f007 + .hibytes $f008 + .hibytes $f009 + .hibytes $f00a + .hibytes $f00b + .hibytes $f00c + .hibytes $f00d + .hibytes $f00e + .hibytes $f00f + .hibytes $ffe1 + .hibytes $ffe2 + .hibytes $ffe3 + .hibytes $ffe4 + .hibytes $ffe5 + .hibytes $ffe6 + .hibytes $ffe7 + .hibytes $ffe8 + .hibytes $ffe9 + .hibytes $ffea + .hibytes $ffeb + .hibytes $ffec + .hibytes $ffed + .hibytes $ffee + .hibytes $ffef + .hibytes $fff0 + .hibytes $fff1 + .hibytes $fff2 + .hibytes $fff3 + .hibytes $fff4 + .hibytes $fff5 + .hibytes $fff6 + .hibytes $fff7 + .hibytes $fff8 + .hibytes $fff9 + .hibytes $fffa + .hibytes $fffb + .hibytes $fffc + .hibytes $fffd + .hibytes $fffe + .hibytes $ffff + + ; hex values, uppercase + .hibytes $0 + .hibytes $1 + .hibytes $2 + .hibytes $3 + .hibytes $4 + .hibytes $5 + .hibytes $6 + .hibytes $7 + .hibytes $8 + .hibytes $9 + .hibytes $A + .hibytes $B + .hibytes $C + .hibytes $D + .hibytes $E + .hibytes $F + .hibytes $10 + .hibytes $11 + .hibytes $12 + .hibytes $13 + .hibytes $70 + .hibytes $71 + .hibytes $72 + .hibytes $73 + .hibytes $74 + .hibytes $75 + .hibytes $76 + .hibytes $77 + .hibytes $78 + .hibytes $79 + .hibytes $7A + .hibytes $7B + .hibytes $7C + .hibytes $7D + .hibytes $7E + .hibytes $7F + .hibytes $80 + .hibytes $81 + .hibytes $82 + .hibytes $83 + .hibytes $84 + .hibytes $85 + .hibytes $86 + .hibytes $F0 + .hibytes $F1 + .hibytes $F2 + .hibytes $F3 + .hibytes $F4 + .hibytes $F5 + .hibytes $F6 + .hibytes $F7 + .hibytes $F8 + .hibytes $F9 + .hibytes $FA + .hibytes $FB + .hibytes $FC + .hibytes $FD + .hibytes $FE + .hibytes $FF + .hibytes $100 + .hibytes $101 + .hibytes $102 + .hibytes $103 + .hibytes $FD2 + .hibytes $FD3 + .hibytes $FD4 + .hibytes $FD5 + .hibytes $FD6 + .hibytes $FD7 + .hibytes $FD8 + .hibytes $FD9 + .hibytes $FDA + .hibytes $FDB + .hibytes $FDC + .hibytes $FDD + .hibytes $FDE + .hibytes $FDF + .hibytes $FE0 + .hibytes $FE1 + .hibytes $FE2 + .hibytes $FE3 + .hibytes $FE4 + .hibytes $FE5 + .hibytes $FE6 + .hibytes $FE7 + .hibytes $FE8 + .hibytes $FE9 + .hibytes $FEA + .hibytes $FEB + .hibytes $FEC + .hibytes $FED + .hibytes $FEE + .hibytes $FEF + .hibytes $FF0 + .hibytes $FF1 + .hibytes $FF2 + .hibytes $FF3 + .hibytes $FF4 + .hibytes $FF5 + .hibytes $FF6 + .hibytes $FF7 + .hibytes $FF8 + .hibytes $FF9 + .hibytes $FFA + .hibytes $FFB + .hibytes $FFC + .hibytes $FFD + .hibytes $FFE + .hibytes $FFF + .hibytes $1000 + .hibytes $1001 + .hibytes $1002 + .hibytes $1003 + .hibytes $1004 + .hibytes $1005 + .hibytes $1006 + .hibytes $1007 + .hibytes $1008 + .hibytes $7FF0 + .hibytes $7FF1 + .hibytes $7FF2 + .hibytes $7FF3 + .hibytes $7FF4 + .hibytes $7FF5 + .hibytes $7FF6 + .hibytes $7FF7 + .hibytes $7FF8 + .hibytes $7FF9 + .hibytes $7FFA + .hibytes $7FFB + .hibytes $7FFC + .hibytes $7FFD + .hibytes $7FFE + .hibytes $7FFF + .hibytes $8000 + .hibytes $8001 + .hibytes $8002 + .hibytes $8003 + .hibytes $8004 + .hibytes $8005 + .hibytes $8006 + .hibytes $8007 + .hibytes $8008 + .hibytes $8009 + .hibytes $800A + .hibytes $800B + .hibytes $9FE1 + .hibytes $9FE2 + .hibytes $9FE3 + .hibytes $9FE4 + .hibytes $9FE5 + .hibytes $9FE6 + .hibytes $9FE7 + .hibytes $9FE8 + .hibytes $9FE9 + .hibytes $9FEA + .hibytes $9FEB + .hibytes $9FEC + .hibytes $9FED + .hibytes $9FEE + .hibytes $9FEF + .hibytes $9FF0 + .hibytes $9FF1 + .hibytes $9FF2 + .hibytes $9FF3 + .hibytes $9FF4 + .hibytes $9FF5 + .hibytes $9FF6 + .hibytes $9FF7 + .hibytes $9FF8 + .hibytes $9FF9 + .hibytes $9FFA + .hibytes $9FFB + .hibytes $9FFC + .hibytes $9FFD + .hibytes $9FFE + .hibytes $9FFF + .hibytes $A000 + .hibytes $A001 + .hibytes $A002 + .hibytes $A003 + .hibytes $A004 + .hibytes $A005 + .hibytes $A006 + .hibytes $A007 + .hibytes $A008 + .hibytes $A009 + .hibytes $A00A + .hibytes $A00B + .hibytes $A00C + .hibytes $A00D + .hibytes $A00E + .hibytes $A00F + .hibytes $AFE1 + .hibytes $AFE2 + .hibytes $AFE3 + .hibytes $AFE4 + .hibytes $AFE5 + .hibytes $AFE6 + .hibytes $AFE7 + .hibytes $AFE8 + .hibytes $AFE9 + .hibytes $AFEA + .hibytes $AFEB + .hibytes $AFEC + .hibytes $AFED + .hibytes $AFEE + .hibytes $AFEF + .hibytes $AFF0 + .hibytes $AFF1 + .hibytes $AFF2 + .hibytes $AFF3 + .hibytes $AFF4 + .hibytes $AFF5 + .hibytes $AFF6 + .hibytes $AFF7 + .hibytes $AFF8 + .hibytes $AFF9 + .hibytes $AFFA + .hibytes $AFFB + .hibytes $AFFC + .hibytes $AFFD + .hibytes $AFFE + .hibytes $AFFF + .hibytes $B000 + .hibytes $B001 + .hibytes $B002 + .hibytes $B003 + .hibytes $B004 + .hibytes $B005 + .hibytes $B006 + .hibytes $B007 + .hibytes $B008 + .hibytes $B009 + .hibytes $B00A + .hibytes $B00B + .hibytes $B00C + .hibytes $B00D + .hibytes $B00E + .hibytes $B00F + .hibytes $BFE1 + .hibytes $BFE2 + .hibytes $BFE3 + .hibytes $BFE4 + .hibytes $BFE5 + .hibytes $BFE6 + .hibytes $BFE7 + .hibytes $BFE8 + .hibytes $BFE9 + .hibytes $BFEA + .hibytes $BFEB + .hibytes $BFEC + .hibytes $BFED + .hibytes $BFEE + .hibytes $BFEF + .hibytes $BFF0 + .hibytes $BFF1 + .hibytes $BFF2 + .hibytes $BFF3 + .hibytes $BFF4 + .hibytes $BFF5 + .hibytes $BFF6 + .hibytes $BFF7 + .hibytes $BFF8 + .hibytes $BFF9 + .hibytes $BFFA + .hibytes $BFFB + .hibytes $BFFC + .hibytes $BFFD + .hibytes $BFFE + .hibytes $BFFF + .hibytes $C000 + .hibytes $C001 + .hibytes $C002 + .hibytes $C003 + .hibytes $C004 + .hibytes $C005 + .hibytes $C006 + .hibytes $C007 + .hibytes $C008 + .hibytes $C009 + .hibytes $C00A + .hibytes $C00B + .hibytes $C00C + .hibytes $C00D + .hibytes $C00E + .hibytes $C00F + .hibytes $CFE1 + .hibytes $CFE2 + .hibytes $CFE3 + .hibytes $CFE4 + .hibytes $CFE5 + .hibytes $CFE6 + .hibytes $CFE7 + .hibytes $CFE8 + .hibytes $CFE9 + .hibytes $CFEA + .hibytes $CFEB + .hibytes $CFEC + .hibytes $CFED + .hibytes $CFEE + .hibytes $CFEF + .hibytes $CFF0 + .hibytes $CFF1 + .hibytes $CFF2 + .hibytes $CFF3 + .hibytes $CFF4 + .hibytes $CFF5 + .hibytes $CFF6 + .hibytes $CFF7 + .hibytes $CFF8 + .hibytes $CFF9 + .hibytes $CFFA + .hibytes $CFFB + .hibytes $CFFC + .hibytes $CFFD + .hibytes $CFFE + .hibytes $CFFF + .hibytes $D000 + .hibytes $D001 + .hibytes $D002 + .hibytes $D003 + .hibytes $D004 + .hibytes $D005 + .hibytes $D006 + .hibytes $D007 + .hibytes $D008 + .hibytes $D009 + .hibytes $D00A + .hibytes $D00B + .hibytes $D00C + .hibytes $D00D + .hibytes $D00E + .hibytes $D00F + .hibytes $DFE1 + .hibytes $DFE2 + .hibytes $DFE3 + .hibytes $DFE4 + .hibytes $DFE5 + .hibytes $DFE6 + .hibytes $DFE7 + .hibytes $DFE8 + .hibytes $DFE9 + .hibytes $DFEA + .hibytes $DFEB + .hibytes $DFEC + .hibytes $DFED + .hibytes $DFEE + .hibytes $DFEF + .hibytes $DFF0 + .hibytes $DFF1 + .hibytes $DFF2 + .hibytes $DFF3 + .hibytes $DFF4 + .hibytes $DFF5 + .hibytes $DFF6 + .hibytes $DFF7 + .hibytes $DFF8 + .hibytes $DFF9 + .hibytes $DFFA + .hibytes $DFFB + .hibytes $DFFC + .hibytes $DFFD + .hibytes $DFFE + .hibytes $DFFF + .hibytes $E000 + .hibytes $E001 + .hibytes $E002 + .hibytes $E003 + .hibytes $E004 + .hibytes $E005 + .hibytes $E006 + .hibytes $E007 + .hibytes $E008 + .hibytes $E009 + .hibytes $E00A + .hibytes $E00B + .hibytes $E00C + .hibytes $E00D + .hibytes $E00E + .hibytes $E00F + .hibytes $EFE1 + .hibytes $EFE2 + .hibytes $EFE3 + .hibytes $EFE4 + .hibytes $EFE5 + .hibytes $EFE6 + .hibytes $EFE7 + .hibytes $EFE8 + .hibytes $EFE9 + .hibytes $EFEA + .hibytes $EFEB + .hibytes $EFEC + .hibytes $EFED + .hibytes $EFEE + .hibytes $EFEF + .hibytes $EFF0 + .hibytes $EFF1 + .hibytes $EFF2 + .hibytes $EFF3 + .hibytes $EFF4 + .hibytes $EFF5 + .hibytes $EFF6 + .hibytes $EFF7 + .hibytes $EFF8 + .hibytes $EFF9 + .hibytes $EFFA + .hibytes $EFFB + .hibytes $EFFC + .hibytes $EFFD + .hibytes $EFFE + .hibytes $EFFF + .hibytes $F000 + .hibytes $F001 + .hibytes $F002 + .hibytes $F003 + .hibytes $F004 + .hibytes $F005 + .hibytes $F006 + .hibytes $F007 + .hibytes $F008 + .hibytes $F009 + .hibytes $F00A + .hibytes $F00B + .hibytes $F00C + .hibytes $F00D + .hibytes $F00E + .hibytes $F00F + .hibytes $FFE1 + .hibytes $FFE2 + .hibytes $FFE3 + .hibytes $FFE4 + .hibytes $FFE5 + .hibytes $FFE6 + .hibytes $FFE7 + .hibytes $FFE8 + .hibytes $FFE9 + .hibytes $FFEA + .hibytes $FFEB + .hibytes $FFEC + .hibytes $FFED + .hibytes $FFEE + .hibytes $FFEF + .hibytes $FFF0 + .hibytes $FFF1 + .hibytes $FFF2 + .hibytes $FFF3 + .hibytes $FFF4 + .hibytes $FFF5 + .hibytes $FFF6 + .hibytes $FFF7 + .hibytes $FFF8 + .hibytes $FFF9 + .hibytes $FFFA + .hibytes $FFFB + .hibytes $FFFC + .hibytes $FFFD + .hibytes $FFFE + .hibytes $FFFF + + ; 4-digit hex values + .hibytes $0000 + .hibytes $0001 + .hibytes $0002 + .hibytes $0003 + .hibytes $0004 + .hibytes $0005 + .hibytes $0006 + .hibytes $0007 + .hibytes $0008 + .hibytes $0009 + .hibytes $000a + .hibytes $000b + .hibytes $000c + .hibytes $000d + .hibytes $000e + .hibytes $000f + .hibytes $0010 + .hibytes $0011 + .hibytes $0012 + .hibytes $0013 + .hibytes $0070 + .hibytes $0071 + .hibytes $0072 + .hibytes $0073 + .hibytes $0074 + .hibytes $0075 + .hibytes $0076 + .hibytes $0077 + .hibytes $0078 + .hibytes $0079 + .hibytes $007a + .hibytes $007b + .hibytes $007c + .hibytes $007d + .hibytes $007e + .hibytes $007f + .hibytes $0080 + .hibytes $0081 + .hibytes $0082 + .hibytes $0083 + .hibytes $0084 + .hibytes $0085 + .hibytes $0086 + .hibytes $00f0 + .hibytes $00f1 + .hibytes $00f2 + .hibytes $00f3 + .hibytes $00f4 + .hibytes $00f5 + .hibytes $00f6 + .hibytes $00f7 + .hibytes $00f8 + .hibytes $00f9 + .hibytes $00fa + .hibytes $00fb + .hibytes $00fc + .hibytes $00fd + .hibytes $00fe + .hibytes $00ff + .hibytes $0100 + .hibytes $0101 + .hibytes $0102 + .hibytes $0103 + .hibytes $0fd2 + .hibytes $0fd3 + .hibytes $0fd4 + .hibytes $0fd5 + .hibytes $0fd6 + .hibytes $0fd7 + .hibytes $0fd8 + .hibytes $0fd9 + .hibytes $0fda + .hibytes $0fdb + .hibytes $0fdc + .hibytes $0fdd + .hibytes $0fde + .hibytes $0fdf + .hibytes $0fe0 + .hibytes $0fe1 + .hibytes $0fe2 + .hibytes $0fe3 + .hibytes $0fe4 + .hibytes $0fe5 + .hibytes $0fe6 + .hibytes $0fe7 + .hibytes $0fe8 + .hibytes $0fe9 + .hibytes $0fea + .hibytes $0feb + .hibytes $0fec + .hibytes $0fed + .hibytes $0fee + .hibytes $0fef + .hibytes $0ff0 + .hibytes $0ff1 + .hibytes $0ff2 + .hibytes $0ff3 + .hibytes $0ff4 + .hibytes $0ff5 + .hibytes $0ff6 + .hibytes $0ff7 + .hibytes $0ff8 + .hibytes $0ff9 + .hibytes $0ffa + .hibytes $0ffb + .hibytes $0ffc + .hibytes $0ffd + .hibytes $0ffe + .hibytes $0fff + .hibytes $1000 + .hibytes $1001 + .hibytes $1002 + .hibytes $1003 + .hibytes $1004 + .hibytes $1005 + .hibytes $1006 + .hibytes $1007 + .hibytes $1008 + .hibytes $7ff0 + .hibytes $7ff1 + .hibytes $7ff2 + .hibytes $7ff3 + .hibytes $7ff4 + .hibytes $7ff5 + .hibytes $7ff6 + .hibytes $7ff7 + .hibytes $7ff8 + .hibytes $7ff9 + .hibytes $7ffa + .hibytes $7ffb + .hibytes $7ffc + .hibytes $7ffd + .hibytes $7ffe + .hibytes $7fff + .hibytes $8000 + .hibytes $8001 + .hibytes $8002 + .hibytes $8003 + .hibytes $8004 + .hibytes $8005 + .hibytes $8006 + .hibytes $8007 + .hibytes $8008 + .hibytes $8009 + .hibytes $800a + .hibytes $800b + .hibytes $9fe1 + .hibytes $9fe2 + .hibytes $9fe3 + .hibytes $9fe4 + .hibytes $9fe5 + .hibytes $9fe6 + .hibytes $9fe7 + .hibytes $9fe8 + .hibytes $9fe9 + .hibytes $9fea + .hibytes $9feb + .hibytes $9fec + .hibytes $9fed + .hibytes $9fee + .hibytes $9fef + .hibytes $9ff0 + .hibytes $9ff1 + .hibytes $9ff2 + .hibytes $9ff3 + .hibytes $9ff4 + .hibytes $9ff5 + .hibytes $9ff6 + .hibytes $9ff7 + .hibytes $9ff8 + .hibytes $9ff9 + .hibytes $9ffa + .hibytes $9ffb + .hibytes $9ffc + .hibytes $9ffd + .hibytes $9ffe + .hibytes $9fff + .hibytes $a000 + .hibytes $a001 + .hibytes $a002 + .hibytes $a003 + .hibytes $a004 + .hibytes $a005 + .hibytes $a006 + .hibytes $a007 + .hibytes $a008 + .hibytes $a009 + .hibytes $a00a + .hibytes $a00b + .hibytes $a00c + .hibytes $a00d + .hibytes $a00e + .hibytes $a00f + .hibytes $afe1 + .hibytes $afe2 + .hibytes $afe3 + .hibytes $afe4 + .hibytes $afe5 + .hibytes $afe6 + .hibytes $afe7 + .hibytes $afe8 + .hibytes $afe9 + .hibytes $afea + .hibytes $afeb + .hibytes $afec + .hibytes $afed + .hibytes $afee + .hibytes $afef + .hibytes $aff0 + .hibytes $aff1 + .hibytes $aff2 + .hibytes $aff3 + .hibytes $aff4 + .hibytes $aff5 + .hibytes $aff6 + .hibytes $aff7 + .hibytes $aff8 + .hibytes $aff9 + .hibytes $affa + .hibytes $affb + .hibytes $affc + .hibytes $affd + .hibytes $affe + .hibytes $afff + .hibytes $b000 + .hibytes $b001 + .hibytes $b002 + .hibytes $b003 + .hibytes $b004 + .hibytes $b005 + .hibytes $b006 + .hibytes $b007 + .hibytes $b008 + .hibytes $b009 + .hibytes $b00a + .hibytes $b00b + .hibytes $b00c + .hibytes $b00d + .hibytes $b00e + .hibytes $b00f + .hibytes $bfe1 + .hibytes $bfe2 + .hibytes $bfe3 + .hibytes $bfe4 + .hibytes $bfe5 + .hibytes $bfe6 + .hibytes $bfe7 + .hibytes $bfe8 + .hibytes $bfe9 + .hibytes $bfea + .hibytes $bfeb + .hibytes $bfec + .hibytes $bfed + .hibytes $bfee + .hibytes $bfef + .hibytes $bff0 + .hibytes $bff1 + .hibytes $bff2 + .hibytes $bff3 + .hibytes $bff4 + .hibytes $bff5 + .hibytes $bff6 + .hibytes $bff7 + .hibytes $bff8 + .hibytes $bff9 + .hibytes $bffa + .hibytes $bffb + .hibytes $bffc + .hibytes $bffd + .hibytes $bffe + .hibytes $bfff + .hibytes $c000 + .hibytes $c001 + .hibytes $c002 + .hibytes $c003 + .hibytes $c004 + .hibytes $c005 + .hibytes $c006 + .hibytes $c007 + .hibytes $c008 + .hibytes $c009 + .hibytes $c00a + .hibytes $c00b + .hibytes $c00c + .hibytes $c00d + .hibytes $c00e + .hibytes $c00f + .hibytes $cfe1 + .hibytes $cfe2 + .hibytes $cfe3 + .hibytes $cfe4 + .hibytes $cfe5 + .hibytes $cfe6 + .hibytes $cfe7 + .hibytes $cfe8 + .hibytes $cfe9 + .hibytes $cfea + .hibytes $cfeb + .hibytes $cfec + .hibytes $cfed + .hibytes $cfee + .hibytes $cfef + .hibytes $cff0 + .hibytes $cff1 + .hibytes $cff2 + .hibytes $cff3 + .hibytes $cff4 + .hibytes $cff5 + .hibytes $cff6 + .hibytes $cff7 + .hibytes $cff8 + .hibytes $cff9 + .hibytes $cffa + .hibytes $cffb + .hibytes $cffc + .hibytes $cffd + .hibytes $cffe + .hibytes $cfff + .hibytes $d000 + .hibytes $d001 + .hibytes $d002 + .hibytes $d003 + .hibytes $d004 + .hibytes $d005 + .hibytes $d006 + .hibytes $d007 + .hibytes $d008 + .hibytes $d009 + .hibytes $d00a + .hibytes $d00b + .hibytes $d00c + .hibytes $d00d + .hibytes $d00e + .hibytes $d00f + .hibytes $dfe1 + .hibytes $dfe2 + .hibytes $dfe3 + .hibytes $dfe4 + .hibytes $dfe5 + .hibytes $dfe6 + .hibytes $dfe7 + .hibytes $dfe8 + .hibytes $dfe9 + .hibytes $dfea + .hibytes $dfeb + .hibytes $dfec + .hibytes $dfed + .hibytes $dfee + .hibytes $dfef + .hibytes $dff0 + .hibytes $dff1 + .hibytes $dff2 + .hibytes $dff3 + .hibytes $dff4 + .hibytes $dff5 + .hibytes $dff6 + .hibytes $dff7 + .hibytes $dff8 + .hibytes $dff9 + .hibytes $dffa + .hibytes $dffb + .hibytes $dffc + .hibytes $dffd + .hibytes $dffe + .hibytes $dfff + .hibytes $e000 + .hibytes $e001 + .hibytes $e002 + .hibytes $e003 + .hibytes $e004 + .hibytes $e005 + .hibytes $e006 + .hibytes $e007 + .hibytes $e008 + .hibytes $e009 + .hibytes $e00a + .hibytes $e00b + .hibytes $e00c + .hibytes $e00d + .hibytes $e00e + .hibytes $e00f + .hibytes $efe1 + .hibytes $efe2 + .hibytes $efe3 + .hibytes $efe4 + .hibytes $efe5 + .hibytes $efe6 + .hibytes $efe7 + .hibytes $efe8 + .hibytes $efe9 + .hibytes $efea + .hibytes $efeb + .hibytes $efec + .hibytes $efed + .hibytes $efee + .hibytes $efef + .hibytes $eff0 + .hibytes $eff1 + .hibytes $eff2 + .hibytes $eff3 + .hibytes $eff4 + .hibytes $eff5 + .hibytes $eff6 + .hibytes $eff7 + .hibytes $eff8 + .hibytes $eff9 + .hibytes $effa + .hibytes $effb + .hibytes $effc + .hibytes $effd + .hibytes $effe + .hibytes $efff + .hibytes $f000 + .hibytes $f001 + .hibytes $f002 + .hibytes $f003 + .hibytes $f004 + .hibytes $f005 + .hibytes $f006 + .hibytes $f007 + .hibytes $f008 + .hibytes $f009 + .hibytes $f00a + .hibytes $f00b + .hibytes $f00c + .hibytes $f00d + .hibytes $f00e + .hibytes $f00f + .hibytes $ffe1 + .hibytes $ffe2 + .hibytes $ffe3 + .hibytes $ffe4 + .hibytes $ffe5 + .hibytes $ffe6 + .hibytes $ffe7 + .hibytes $ffe8 + .hibytes $ffe9 + .hibytes $ffea + .hibytes $ffeb + .hibytes $ffec + .hibytes $ffed + .hibytes $ffee + .hibytes $ffef + .hibytes $fff0 + .hibytes $fff1 + .hibytes $fff2 + .hibytes $fff3 + .hibytes $fff4 + .hibytes $fff5 + .hibytes $fff6 + .hibytes $fff7 + .hibytes $fff8 + .hibytes $fff9 + .hibytes $fffa + .hibytes $fffb + .hibytes $fffc + .hibytes $fffd + .hibytes $fffe + .hibytes $ffff + + ; 4-digit hex values, uppercase + .hibytes $0000 + .hibytes $0001 + .hibytes $0002 + .hibytes $0003 + .hibytes $0004 + .hibytes $0005 + .hibytes $0006 + .hibytes $0007 + .hibytes $0008 + .hibytes $0009 + .hibytes $000A + .hibytes $000B + .hibytes $000C + .hibytes $000D + .hibytes $000E + .hibytes $000F + .hibytes $0010 + .hibytes $0011 + .hibytes $0012 + .hibytes $0013 + .hibytes $0070 + .hibytes $0071 + .hibytes $0072 + .hibytes $0073 + .hibytes $0074 + .hibytes $0075 + .hibytes $0076 + .hibytes $0077 + .hibytes $0078 + .hibytes $0079 + .hibytes $007A + .hibytes $007B + .hibytes $007C + .hibytes $007D + .hibytes $007E + .hibytes $007F + .hibytes $0080 + .hibytes $0081 + .hibytes $0082 + .hibytes $0083 + .hibytes $0084 + .hibytes $0085 + .hibytes $0086 + .hibytes $00F0 + .hibytes $00F1 + .hibytes $00F2 + .hibytes $00F3 + .hibytes $00F4 + .hibytes $00F5 + .hibytes $00F6 + .hibytes $00F7 + .hibytes $00F8 + .hibytes $00F9 + .hibytes $00FA + .hibytes $00FB + .hibytes $00FC + .hibytes $00FD + .hibytes $00FE + .hibytes $00FF + .hibytes $0100 + .hibytes $0101 + .hibytes $0102 + .hibytes $0103 + .hibytes $0FD2 + .hibytes $0FD3 + .hibytes $0FD4 + .hibytes $0FD5 + .hibytes $0FD6 + .hibytes $0FD7 + .hibytes $0FD8 + .hibytes $0FD9 + .hibytes $0FDA + .hibytes $0FDB + .hibytes $0FDC + .hibytes $0FDD + .hibytes $0FDE + .hibytes $0FDF + .hibytes $0FE0 + .hibytes $0FE1 + .hibytes $0FE2 + .hibytes $0FE3 + .hibytes $0FE4 + .hibytes $0FE5 + .hibytes $0FE6 + .hibytes $0FE7 + .hibytes $0FE8 + .hibytes $0FE9 + .hibytes $0FEA + .hibytes $0FEB + .hibytes $0FEC + .hibytes $0FED + .hibytes $0FEE + .hibytes $0FEF + .hibytes $0FF0 + .hibytes $0FF1 + .hibytes $0FF2 + .hibytes $0FF3 + .hibytes $0FF4 + .hibytes $0FF5 + .hibytes $0FF6 + .hibytes $0FF7 + .hibytes $0FF8 + .hibytes $0FF9 + .hibytes $0FFA + .hibytes $0FFB + .hibytes $0FFC + .hibytes $0FFD + .hibytes $0FFE + .hibytes $0FFF + .hibytes $1000 + .hibytes $1001 + .hibytes $1002 + .hibytes $1003 + .hibytes $1004 + .hibytes $1005 + .hibytes $1006 + .hibytes $1007 + .hibytes $1008 + .hibytes $7FF0 + .hibytes $7FF1 + .hibytes $7FF2 + .hibytes $7FF3 + .hibytes $7FF4 + .hibytes $7FF5 + .hibytes $7FF6 + .hibytes $7FF7 + .hibytes $7FF8 + .hibytes $7FF9 + .hibytes $7FFA + .hibytes $7FFB + .hibytes $7FFC + .hibytes $7FFD + .hibytes $7FFE + .hibytes $7FFF + .hibytes $8000 + .hibytes $8001 + .hibytes $8002 + .hibytes $8003 + .hibytes $8004 + .hibytes $8005 + .hibytes $8006 + .hibytes $8007 + .hibytes $8008 + .hibytes $8009 + .hibytes $800A + .hibytes $800B + .hibytes $9FE1 + .hibytes $9FE2 + .hibytes $9FE3 + .hibytes $9FE4 + .hibytes $9FE5 + .hibytes $9FE6 + .hibytes $9FE7 + .hibytes $9FE8 + .hibytes $9FE9 + .hibytes $9FEA + .hibytes $9FEB + .hibytes $9FEC + .hibytes $9FED + .hibytes $9FEE + .hibytes $9FEF + .hibytes $9FF0 + .hibytes $9FF1 + .hibytes $9FF2 + .hibytes $9FF3 + .hibytes $9FF4 + .hibytes $9FF5 + .hibytes $9FF6 + .hibytes $9FF7 + .hibytes $9FF8 + .hibytes $9FF9 + .hibytes $9FFA + .hibytes $9FFB + .hibytes $9FFC + .hibytes $9FFD + .hibytes $9FFE + .hibytes $9FFF + .hibytes $A000 + .hibytes $A001 + .hibytes $A002 + .hibytes $A003 + .hibytes $A004 + .hibytes $A005 + .hibytes $A006 + .hibytes $A007 + .hibytes $A008 + .hibytes $A009 + .hibytes $A00A + .hibytes $A00B + .hibytes $A00C + .hibytes $A00D + .hibytes $A00E + .hibytes $A00F + .hibytes $AFE1 + .hibytes $AFE2 + .hibytes $AFE3 + .hibytes $AFE4 + .hibytes $AFE5 + .hibytes $AFE6 + .hibytes $AFE7 + .hibytes $AFE8 + .hibytes $AFE9 + .hibytes $AFEA + .hibytes $AFEB + .hibytes $AFEC + .hibytes $AFED + .hibytes $AFEE + .hibytes $AFEF + .hibytes $AFF0 + .hibytes $AFF1 + .hibytes $AFF2 + .hibytes $AFF3 + .hibytes $AFF4 + .hibytes $AFF5 + .hibytes $AFF6 + .hibytes $AFF7 + .hibytes $AFF8 + .hibytes $AFF9 + .hibytes $AFFA + .hibytes $AFFB + .hibytes $AFFC + .hibytes $AFFD + .hibytes $AFFE + .hibytes $AFFF + .hibytes $B000 + .hibytes $B001 + .hibytes $B002 + .hibytes $B003 + .hibytes $B004 + .hibytes $B005 + .hibytes $B006 + .hibytes $B007 + .hibytes $B008 + .hibytes $B009 + .hibytes $B00A + .hibytes $B00B + .hibytes $B00C + .hibytes $B00D + .hibytes $B00E + .hibytes $B00F + .hibytes $BFE1 + .hibytes $BFE2 + .hibytes $BFE3 + .hibytes $BFE4 + .hibytes $BFE5 + .hibytes $BFE6 + .hibytes $BFE7 + .hibytes $BFE8 + .hibytes $BFE9 + .hibytes $BFEA + .hibytes $BFEB + .hibytes $BFEC + .hibytes $BFED + .hibytes $BFEE + .hibytes $BFEF + .hibytes $BFF0 + .hibytes $BFF1 + .hibytes $BFF2 + .hibytes $BFF3 + .hibytes $BFF4 + .hibytes $BFF5 + .hibytes $BFF6 + .hibytes $BFF7 + .hibytes $BFF8 + .hibytes $BFF9 + .hibytes $BFFA + .hibytes $BFFB + .hibytes $BFFC + .hibytes $BFFD + .hibytes $BFFE + .hibytes $BFFF + .hibytes $C000 + .hibytes $C001 + .hibytes $C002 + .hibytes $C003 + .hibytes $C004 + .hibytes $C005 + .hibytes $C006 + .hibytes $C007 + .hibytes $C008 + .hibytes $C009 + .hibytes $C00A + .hibytes $C00B + .hibytes $C00C + .hibytes $C00D + .hibytes $C00E + .hibytes $C00F + .hibytes $CFE1 + .hibytes $CFE2 + .hibytes $CFE3 + .hibytes $CFE4 + .hibytes $CFE5 + .hibytes $CFE6 + .hibytes $CFE7 + .hibytes $CFE8 + .hibytes $CFE9 + .hibytes $CFEA + .hibytes $CFEB + .hibytes $CFEC + .hibytes $CFED + .hibytes $CFEE + .hibytes $CFEF + .hibytes $CFF0 + .hibytes $CFF1 + .hibytes $CFF2 + .hibytes $CFF3 + .hibytes $CFF4 + .hibytes $CFF5 + .hibytes $CFF6 + .hibytes $CFF7 + .hibytes $CFF8 + .hibytes $CFF9 + .hibytes $CFFA + .hibytes $CFFB + .hibytes $CFFC + .hibytes $CFFD + .hibytes $CFFE + .hibytes $CFFF + .hibytes $D000 + .hibytes $D001 + .hibytes $D002 + .hibytes $D003 + .hibytes $D004 + .hibytes $D005 + .hibytes $D006 + .hibytes $D007 + .hibytes $D008 + .hibytes $D009 + .hibytes $D00A + .hibytes $D00B + .hibytes $D00C + .hibytes $D00D + .hibytes $D00E + .hibytes $D00F + .hibytes $DFE1 + .hibytes $DFE2 + .hibytes $DFE3 + .hibytes $DFE4 + .hibytes $DFE5 + .hibytes $DFE6 + .hibytes $DFE7 + .hibytes $DFE8 + .hibytes $DFE9 + .hibytes $DFEA + .hibytes $DFEB + .hibytes $DFEC + .hibytes $DFED + .hibytes $DFEE + .hibytes $DFEF + .hibytes $DFF0 + .hibytes $DFF1 + .hibytes $DFF2 + .hibytes $DFF3 + .hibytes $DFF4 + .hibytes $DFF5 + .hibytes $DFF6 + .hibytes $DFF7 + .hibytes $DFF8 + .hibytes $DFF9 + .hibytes $DFFA + .hibytes $DFFB + .hibytes $DFFC + .hibytes $DFFD + .hibytes $DFFE + .hibytes $DFFF + .hibytes $E000 + .hibytes $E001 + .hibytes $E002 + .hibytes $E003 + .hibytes $E004 + .hibytes $E005 + .hibytes $E006 + .hibytes $E007 + .hibytes $E008 + .hibytes $E009 + .hibytes $E00A + .hibytes $E00B + .hibytes $E00C + .hibytes $E00D + .hibytes $E00E + .hibytes $E00F + .hibytes $EFE1 + .hibytes $EFE2 + .hibytes $EFE3 + .hibytes $EFE4 + .hibytes $EFE5 + .hibytes $EFE6 + .hibytes $EFE7 + .hibytes $EFE8 + .hibytes $EFE9 + .hibytes $EFEA + .hibytes $EFEB + .hibytes $EFEC + .hibytes $EFED + .hibytes $EFEE + .hibytes $EFEF + .hibytes $EFF0 + .hibytes $EFF1 + .hibytes $EFF2 + .hibytes $EFF3 + .hibytes $EFF4 + .hibytes $EFF5 + .hibytes $EFF6 + .hibytes $EFF7 + .hibytes $EFF8 + .hibytes $EFF9 + .hibytes $EFFA + .hibytes $EFFB + .hibytes $EFFC + .hibytes $EFFD + .hibytes $EFFE + .hibytes $EFFF + .hibytes $F000 + .hibytes $F001 + .hibytes $F002 + .hibytes $F003 + .hibytes $F004 + .hibytes $F005 + .hibytes $F006 + .hibytes $F007 + .hibytes $F008 + .hibytes $F009 + .hibytes $F00A + .hibytes $F00B + .hibytes $F00C + .hibytes $F00D + .hibytes $F00E + .hibytes $F00F + .hibytes $FFE1 + .hibytes $FFE2 + .hibytes $FFE3 + .hibytes $FFE4 + .hibytes $FFE5 + .hibytes $FFE6 + .hibytes $FFE7 + .hibytes $FFE8 + .hibytes $FFE9 + .hibytes $FFEA + .hibytes $FFEB + .hibytes $FFEC + .hibytes $FFED + .hibytes $FFEE + .hibytes $FFEF + .hibytes $FFF0 + .hibytes $FFF1 + .hibytes $FFF2 + .hibytes $FFF3 + .hibytes $FFF4 + .hibytes $FFF5 + .hibytes $FFF6 + .hibytes $FFF7 + .hibytes $FFF8 + .hibytes $FFF9 + .hibytes $FFFA + .hibytes $FFFB + .hibytes $FFFC + .hibytes $FFFD + .hibytes $FFFE + .hibytes $FFFF + + ; alternative hex values + .hibytes 0h + .hibytes 1h + .hibytes 2h + .hibytes 3h + .hibytes 4h + .hibytes 5h + .hibytes 6h + .hibytes 7h + .hibytes 8h + .hibytes 9h + .hibytes 0ah + .hibytes 0bh + .hibytes 0ch + .hibytes 0dh + .hibytes 0eh + .hibytes 0fh + .hibytes 10h + .hibytes 11h + .hibytes 12h + .hibytes 13h + .hibytes 70h + .hibytes 71h + .hibytes 72h + .hibytes 73h + .hibytes 74h + .hibytes 75h + .hibytes 76h + .hibytes 77h + .hibytes 78h + .hibytes 79h + .hibytes 7ah + .hibytes 7bh + .hibytes 7ch + .hibytes 7dh + .hibytes 7eh + .hibytes 7fh + .hibytes 80h + .hibytes 81h + .hibytes 82h + .hibytes 83h + .hibytes 84h + .hibytes 85h + .hibytes 86h + .hibytes 0f0h + .hibytes 0f1h + .hibytes 0f2h + .hibytes 0f3h + .hibytes 0f4h + .hibytes 0f5h + .hibytes 0f6h + .hibytes 0f7h + .hibytes 0f8h + .hibytes 0f9h + .hibytes 0fah + .hibytes 0fbh + .hibytes 0fch + .hibytes 0fdh + .hibytes 0feh + .hibytes 0ffh + .hibytes 100h + .hibytes 101h + .hibytes 102h + .hibytes 103h + .hibytes 0fd2h + .hibytes 0fd3h + .hibytes 0fd4h + .hibytes 0fd5h + .hibytes 0fd6h + .hibytes 0fd7h + .hibytes 0fd8h + .hibytes 0fd9h + .hibytes 0fdah + .hibytes 0fdbh + .hibytes 0fdch + .hibytes 0fddh + .hibytes 0fdeh + .hibytes 0fdfh + .hibytes 0fe0h + .hibytes 0fe1h + .hibytes 0fe2h + .hibytes 0fe3h + .hibytes 0fe4h + .hibytes 0fe5h + .hibytes 0fe6h + .hibytes 0fe7h + .hibytes 0fe8h + .hibytes 0fe9h + .hibytes 0feah + .hibytes 0febh + .hibytes 0fech + .hibytes 0fedh + .hibytes 0feeh + .hibytes 0fefh + .hibytes 0ff0h + .hibytes 0ff1h + .hibytes 0ff2h + .hibytes 0ff3h + .hibytes 0ff4h + .hibytes 0ff5h + .hibytes 0ff6h + .hibytes 0ff7h + .hibytes 0ff8h + .hibytes 0ff9h + .hibytes 0ffah + .hibytes 0ffbh + .hibytes 0ffch + .hibytes 0ffdh + .hibytes 0ffeh + .hibytes 0fffh + .hibytes 1000h + .hibytes 1001h + .hibytes 1002h + .hibytes 1003h + .hibytes 1004h + .hibytes 1005h + .hibytes 1006h + .hibytes 1007h + .hibytes 1008h + .hibytes 7ff0h + .hibytes 7ff1h + .hibytes 7ff2h + .hibytes 7ff3h + .hibytes 7ff4h + .hibytes 7ff5h + .hibytes 7ff6h + .hibytes 7ff7h + .hibytes 7ff8h + .hibytes 7ff9h + .hibytes 7ffah + .hibytes 7ffbh + .hibytes 7ffch + .hibytes 7ffdh + .hibytes 7ffeh + .hibytes 7fffh + .hibytes 8000h + .hibytes 8001h + .hibytes 8002h + .hibytes 8003h + .hibytes 8004h + .hibytes 8005h + .hibytes 8006h + .hibytes 8007h + .hibytes 8008h + .hibytes 8009h + .hibytes 800ah + .hibytes 800bh + .hibytes 9fe1h + .hibytes 9fe2h + .hibytes 9fe3h + .hibytes 9fe4h + .hibytes 9fe5h + .hibytes 9fe6h + .hibytes 9fe7h + .hibytes 9fe8h + .hibytes 9fe9h + .hibytes 9feah + .hibytes 9febh + .hibytes 9fech + .hibytes 9fedh + .hibytes 9feeh + .hibytes 9fefh + .hibytes 9ff0h + .hibytes 9ff1h + .hibytes 9ff2h + .hibytes 9ff3h + .hibytes 9ff4h + .hibytes 9ff5h + .hibytes 9ff6h + .hibytes 9ff7h + .hibytes 9ff8h + .hibytes 9ff9h + .hibytes 9ffah + .hibytes 9ffbh + .hibytes 9ffch + .hibytes 9ffdh + .hibytes 9ffeh + .hibytes 9fffh + .hibytes 0a000h + .hibytes 0a001h + .hibytes 0a002h + .hibytes 0a003h + .hibytes 0a004h + .hibytes 0a005h + .hibytes 0a006h + .hibytes 0a007h + .hibytes 0a008h + .hibytes 0a009h + .hibytes 0a00ah + .hibytes 0a00bh + .hibytes 0a00ch + .hibytes 0a00dh + .hibytes 0a00eh + .hibytes 0a00fh + .hibytes 0afe1h + .hibytes 0afe2h + .hibytes 0afe3h + .hibytes 0afe4h + .hibytes 0afe5h + .hibytes 0afe6h + .hibytes 0afe7h + .hibytes 0afe8h + .hibytes 0afe9h + .hibytes 0afeah + .hibytes 0afebh + .hibytes 0afech + .hibytes 0afedh + .hibytes 0afeeh + .hibytes 0afefh + .hibytes 0aff0h + .hibytes 0aff1h + .hibytes 0aff2h + .hibytes 0aff3h + .hibytes 0aff4h + .hibytes 0aff5h + .hibytes 0aff6h + .hibytes 0aff7h + .hibytes 0aff8h + .hibytes 0aff9h + .hibytes 0affah + .hibytes 0affbh + .hibytes 0affch + .hibytes 0affdh + .hibytes 0affeh + .hibytes 0afffh + .hibytes 0b000h + .hibytes 0b001h + .hibytes 0b002h + .hibytes 0b003h + .hibytes 0b004h + .hibytes 0b005h + .hibytes 0b006h + .hibytes 0b007h + .hibytes 0b008h + .hibytes 0b009h + .hibytes 0b00ah + .hibytes 0b00bh + .hibytes 0b00ch + .hibytes 0b00dh + .hibytes 0b00eh + .hibytes 0b00fh + .hibytes 0bfe1h + .hibytes 0bfe2h + .hibytes 0bfe3h + .hibytes 0bfe4h + .hibytes 0bfe5h + .hibytes 0bfe6h + .hibytes 0bfe7h + .hibytes 0bfe8h + .hibytes 0bfe9h + .hibytes 0bfeah + .hibytes 0bfebh + .hibytes 0bfech + .hibytes 0bfedh + .hibytes 0bfeeh + .hibytes 0bfefh + .hibytes 0bff0h + .hibytes 0bff1h + .hibytes 0bff2h + .hibytes 0bff3h + .hibytes 0bff4h + .hibytes 0bff5h + .hibytes 0bff6h + .hibytes 0bff7h + .hibytes 0bff8h + .hibytes 0bff9h + .hibytes 0bffah + .hibytes 0bffbh + .hibytes 0bffch + .hibytes 0bffdh + .hibytes 0bffeh + .hibytes 0bfffh + .hibytes 0c000h + .hibytes 0c001h + .hibytes 0c002h + .hibytes 0c003h + .hibytes 0c004h + .hibytes 0c005h + .hibytes 0c006h + .hibytes 0c007h + .hibytes 0c008h + .hibytes 0c009h + .hibytes 0c00ah + .hibytes 0c00bh + .hibytes 0c00ch + .hibytes 0c00dh + .hibytes 0c00eh + .hibytes 0c00fh + .hibytes 0cfe1h + .hibytes 0cfe2h + .hibytes 0cfe3h + .hibytes 0cfe4h + .hibytes 0cfe5h + .hibytes 0cfe6h + .hibytes 0cfe7h + .hibytes 0cfe8h + .hibytes 0cfe9h + .hibytes 0cfeah + .hibytes 0cfebh + .hibytes 0cfech + .hibytes 0cfedh + .hibytes 0cfeeh + .hibytes 0cfefh + .hibytes 0cff0h + .hibytes 0cff1h + .hibytes 0cff2h + .hibytes 0cff3h + .hibytes 0cff4h + .hibytes 0cff5h + .hibytes 0cff6h + .hibytes 0cff7h + .hibytes 0cff8h + .hibytes 0cff9h + .hibytes 0cffah + .hibytes 0cffbh + .hibytes 0cffch + .hibytes 0cffdh + .hibytes 0cffeh + .hibytes 0cfffh + .hibytes 0d000h + .hibytes 0d001h + .hibytes 0d002h + .hibytes 0d003h + .hibytes 0d004h + .hibytes 0d005h + .hibytes 0d006h + .hibytes 0d007h + .hibytes 0d008h + .hibytes 0d009h + .hibytes 0d00ah + .hibytes 0d00bh + .hibytes 0d00ch + .hibytes 0d00dh + .hibytes 0d00eh + .hibytes 0d00fh + .hibytes 0dfe1h + .hibytes 0dfe2h + .hibytes 0dfe3h + .hibytes 0dfe4h + .hibytes 0dfe5h + .hibytes 0dfe6h + .hibytes 0dfe7h + .hibytes 0dfe8h + .hibytes 0dfe9h + .hibytes 0dfeah + .hibytes 0dfebh + .hibytes 0dfech + .hibytes 0dfedh + .hibytes 0dfeeh + .hibytes 0dfefh + .hibytes 0dff0h + .hibytes 0dff1h + .hibytes 0dff2h + .hibytes 0dff3h + .hibytes 0dff4h + .hibytes 0dff5h + .hibytes 0dff6h + .hibytes 0dff7h + .hibytes 0dff8h + .hibytes 0dff9h + .hibytes 0dffah + .hibytes 0dffbh + .hibytes 0dffch + .hibytes 0dffdh + .hibytes 0dffeh + .hibytes 0dfffh + .hibytes 0e000h + .hibytes 0e001h + .hibytes 0e002h + .hibytes 0e003h + .hibytes 0e004h + .hibytes 0e005h + .hibytes 0e006h + .hibytes 0e007h + .hibytes 0e008h + .hibytes 0e009h + .hibytes 0e00ah + .hibytes 0e00bh + .hibytes 0e00ch + .hibytes 0e00dh + .hibytes 0e00eh + .hibytes 0e00fh + .hibytes 0efe1h + .hibytes 0efe2h + .hibytes 0efe3h + .hibytes 0efe4h + .hibytes 0efe5h + .hibytes 0efe6h + .hibytes 0efe7h + .hibytes 0efe8h + .hibytes 0efe9h + .hibytes 0efeah + .hibytes 0efebh + .hibytes 0efech + .hibytes 0efedh + .hibytes 0efeeh + .hibytes 0efefh + .hibytes 0eff0h + .hibytes 0eff1h + .hibytes 0eff2h + .hibytes 0eff3h + .hibytes 0eff4h + .hibytes 0eff5h + .hibytes 0eff6h + .hibytes 0eff7h + .hibytes 0eff8h + .hibytes 0eff9h + .hibytes 0effah + .hibytes 0effbh + .hibytes 0effch + .hibytes 0effdh + .hibytes 0effeh + .hibytes 0efffh + .hibytes 0f000h + .hibytes 0f001h + .hibytes 0f002h + .hibytes 0f003h + .hibytes 0f004h + .hibytes 0f005h + .hibytes 0f006h + .hibytes 0f007h + .hibytes 0f008h + .hibytes 0f009h + .hibytes 0f00ah + .hibytes 0f00bh + .hibytes 0f00ch + .hibytes 0f00dh + .hibytes 0f00eh + .hibytes 0f00fh + .hibytes 0ffe1h + .hibytes 0ffe2h + .hibytes 0ffe3h + .hibytes 0ffe4h + .hibytes 0ffe5h + .hibytes 0ffe6h + .hibytes 0ffe7h + .hibytes 0ffe8h + .hibytes 0ffe9h + .hibytes 0ffeah + .hibytes 0ffebh + .hibytes 0ffech + .hibytes 0ffedh + .hibytes 0ffeeh + .hibytes 0ffefh + .hibytes 0fff0h + .hibytes 0fff1h + .hibytes 0fff2h + .hibytes 0fff3h + .hibytes 0fff4h + .hibytes 0fff5h + .hibytes 0fff6h + .hibytes 0fff7h + .hibytes 0fff8h + .hibytes 0fff9h + .hibytes 0fffah + .hibytes 0fffbh + .hibytes 0fffch + .hibytes 0fffdh + .hibytes 0fffeh + .hibytes 0ffffh + + ; alternative hex values, uppercase + .hibytes 0h + .hibytes 1h + .hibytes 2h + .hibytes 3h + .hibytes 4h + .hibytes 5h + .hibytes 6h + .hibytes 7h + .hibytes 8h + .hibytes 9h + .hibytes 0Ah + .hibytes 0Bh + .hibytes 0Ch + .hibytes 0Dh + .hibytes 0Eh + .hibytes 0Fh + .hibytes 10h + .hibytes 11h + .hibytes 12h + .hibytes 13h + .hibytes 70h + .hibytes 71h + .hibytes 72h + .hibytes 73h + .hibytes 74h + .hibytes 75h + .hibytes 76h + .hibytes 77h + .hibytes 78h + .hibytes 79h + .hibytes 7Ah + .hibytes 7Bh + .hibytes 7Ch + .hibytes 7Dh + .hibytes 7Eh + .hibytes 7Fh + .hibytes 80h + .hibytes 81h + .hibytes 82h + .hibytes 83h + .hibytes 84h + .hibytes 85h + .hibytes 86h + .hibytes 0F0h + .hibytes 0F1h + .hibytes 0F2h + .hibytes 0F3h + .hibytes 0F4h + .hibytes 0F5h + .hibytes 0F6h + .hibytes 0F7h + .hibytes 0F8h + .hibytes 0F9h + .hibytes 0FAh + .hibytes 0FBh + .hibytes 0FCh + .hibytes 0FDh + .hibytes 0FEh + .hibytes 0FFh + .hibytes 100h + .hibytes 101h + .hibytes 102h + .hibytes 103h + .hibytes 0FD2h + .hibytes 0FD3h + .hibytes 0FD4h + .hibytes 0FD5h + .hibytes 0FD6h + .hibytes 0FD7h + .hibytes 0FD8h + .hibytes 0FD9h + .hibytes 0FDAh + .hibytes 0FDBh + .hibytes 0FDCh + .hibytes 0FDDh + .hibytes 0FDEh + .hibytes 0FDFh + .hibytes 0FE0h + .hibytes 0FE1h + .hibytes 0FE2h + .hibytes 0FE3h + .hibytes 0FE4h + .hibytes 0FE5h + .hibytes 0FE6h + .hibytes 0FE7h + .hibytes 0FE8h + .hibytes 0FE9h + .hibytes 0FEAh + .hibytes 0FEBh + .hibytes 0FECh + .hibytes 0FEDh + .hibytes 0FEEh + .hibytes 0FEFh + .hibytes 0FF0h + .hibytes 0FF1h + .hibytes 0FF2h + .hibytes 0FF3h + .hibytes 0FF4h + .hibytes 0FF5h + .hibytes 0FF6h + .hibytes 0FF7h + .hibytes 0FF8h + .hibytes 0FF9h + .hibytes 0FFAh + .hibytes 0FFBh + .hibytes 0FFCh + .hibytes 0FFDh + .hibytes 0FFEh + .hibytes 0FFFh + .hibytes 1000h + .hibytes 1001h + .hibytes 1002h + .hibytes 1003h + .hibytes 1004h + .hibytes 1005h + .hibytes 1006h + .hibytes 1007h + .hibytes 1008h + .hibytes 7FF0h + .hibytes 7FF1h + .hibytes 7FF2h + .hibytes 7FF3h + .hibytes 7FF4h + .hibytes 7FF5h + .hibytes 7FF6h + .hibytes 7FF7h + .hibytes 7FF8h + .hibytes 7FF9h + .hibytes 7FFAh + .hibytes 7FFBh + .hibytes 7FFCh + .hibytes 7FFDh + .hibytes 7FFEh + .hibytes 7FFFh + .hibytes 8000h + .hibytes 8001h + .hibytes 8002h + .hibytes 8003h + .hibytes 8004h + .hibytes 8005h + .hibytes 8006h + .hibytes 8007h + .hibytes 8008h + .hibytes 8009h + .hibytes 800Ah + .hibytes 800Bh + .hibytes 9FE1h + .hibytes 9FE2h + .hibytes 9FE3h + .hibytes 9FE4h + .hibytes 9FE5h + .hibytes 9FE6h + .hibytes 9FE7h + .hibytes 9FE8h + .hibytes 9FE9h + .hibytes 9FEAh + .hibytes 9FEBh + .hibytes 9FECh + .hibytes 9FEDh + .hibytes 9FEEh + .hibytes 9FEFh + .hibytes 9FF0h + .hibytes 9FF1h + .hibytes 9FF2h + .hibytes 9FF3h + .hibytes 9FF4h + .hibytes 9FF5h + .hibytes 9FF6h + .hibytes 9FF7h + .hibytes 9FF8h + .hibytes 9FF9h + .hibytes 9FFAh + .hibytes 9FFBh + .hibytes 9FFCh + .hibytes 9FFDh + .hibytes 9FFEh + .hibytes 9FFFh + .hibytes 0A000h + .hibytes 0A001h + .hibytes 0A002h + .hibytes 0A003h + .hibytes 0A004h + .hibytes 0A005h + .hibytes 0A006h + .hibytes 0A007h + .hibytes 0A008h + .hibytes 0A009h + .hibytes 0A00Ah + .hibytes 0A00Bh + .hibytes 0A00Ch + .hibytes 0A00Dh + .hibytes 0A00Eh + .hibytes 0A00Fh + .hibytes 0AFE1h + .hibytes 0AFE2h + .hibytes 0AFE3h + .hibytes 0AFE4h + .hibytes 0AFE5h + .hibytes 0AFE6h + .hibytes 0AFE7h + .hibytes 0AFE8h + .hibytes 0AFE9h + .hibytes 0AFEAh + .hibytes 0AFEBh + .hibytes 0AFECh + .hibytes 0AFEDh + .hibytes 0AFEEh + .hibytes 0AFEFh + .hibytes 0AFF0h + .hibytes 0AFF1h + .hibytes 0AFF2h + .hibytes 0AFF3h + .hibytes 0AFF4h + .hibytes 0AFF5h + .hibytes 0AFF6h + .hibytes 0AFF7h + .hibytes 0AFF8h + .hibytes 0AFF9h + .hibytes 0AFFAh + .hibytes 0AFFBh + .hibytes 0AFFCh + .hibytes 0AFFDh + .hibytes 0AFFEh + .hibytes 0AFFFh + .hibytes 0B000h + .hibytes 0B001h + .hibytes 0B002h + .hibytes 0B003h + .hibytes 0B004h + .hibytes 0B005h + .hibytes 0B006h + .hibytes 0B007h + .hibytes 0B008h + .hibytes 0B009h + .hibytes 0B00Ah + .hibytes 0B00Bh + .hibytes 0B00Ch + .hibytes 0B00Dh + .hibytes 0B00Eh + .hibytes 0B00Fh + .hibytes 0BFE1h + .hibytes 0BFE2h + .hibytes 0BFE3h + .hibytes 0BFE4h + .hibytes 0BFE5h + .hibytes 0BFE6h + .hibytes 0BFE7h + .hibytes 0BFE8h + .hibytes 0BFE9h + .hibytes 0BFEAh + .hibytes 0BFEBh + .hibytes 0BFECh + .hibytes 0BFEDh + .hibytes 0BFEEh + .hibytes 0BFEFh + .hibytes 0BFF0h + .hibytes 0BFF1h + .hibytes 0BFF2h + .hibytes 0BFF3h + .hibytes 0BFF4h + .hibytes 0BFF5h + .hibytes 0BFF6h + .hibytes 0BFF7h + .hibytes 0BFF8h + .hibytes 0BFF9h + .hibytes 0BFFAh + .hibytes 0BFFBh + .hibytes 0BFFCh + .hibytes 0BFFDh + .hibytes 0BFFEh + .hibytes 0BFFFh + .hibytes 0C000h + .hibytes 0C001h + .hibytes 0C002h + .hibytes 0C003h + .hibytes 0C004h + .hibytes 0C005h + .hibytes 0C006h + .hibytes 0C007h + .hibytes 0C008h + .hibytes 0C009h + .hibytes 0C00Ah + .hibytes 0C00Bh + .hibytes 0C00Ch + .hibytes 0C00Dh + .hibytes 0C00Eh + .hibytes 0C00Fh + .hibytes 0CFE1h + .hibytes 0CFE2h + .hibytes 0CFE3h + .hibytes 0CFE4h + .hibytes 0CFE5h + .hibytes 0CFE6h + .hibytes 0CFE7h + .hibytes 0CFE8h + .hibytes 0CFE9h + .hibytes 0CFEAh + .hibytes 0CFEBh + .hibytes 0CFECh + .hibytes 0CFEDh + .hibytes 0CFEEh + .hibytes 0CFEFh + .hibytes 0CFF0h + .hibytes 0CFF1h + .hibytes 0CFF2h + .hibytes 0CFF3h + .hibytes 0CFF4h + .hibytes 0CFF5h + .hibytes 0CFF6h + .hibytes 0CFF7h + .hibytes 0CFF8h + .hibytes 0CFF9h + .hibytes 0CFFAh + .hibytes 0CFFBh + .hibytes 0CFFCh + .hibytes 0CFFDh + .hibytes 0CFFEh + .hibytes 0CFFFh + .hibytes 0D000h + .hibytes 0D001h + .hibytes 0D002h + .hibytes 0D003h + .hibytes 0D004h + .hibytes 0D005h + .hibytes 0D006h + .hibytes 0D007h + .hibytes 0D008h + .hibytes 0D009h + .hibytes 0D00Ah + .hibytes 0D00Bh + .hibytes 0D00Ch + .hibytes 0D00Dh + .hibytes 0D00Eh + .hibytes 0D00Fh + .hibytes 0DFE1h + .hibytes 0DFE2h + .hibytes 0DFE3h + .hibytes 0DFE4h + .hibytes 0DFE5h + .hibytes 0DFE6h + .hibytes 0DFE7h + .hibytes 0DFE8h + .hibytes 0DFE9h + .hibytes 0DFEAh + .hibytes 0DFEBh + .hibytes 0DFECh + .hibytes 0DFEDh + .hibytes 0DFEEh + .hibytes 0DFEFh + .hibytes 0DFF0h + .hibytes 0DFF1h + .hibytes 0DFF2h + .hibytes 0DFF3h + .hibytes 0DFF4h + .hibytes 0DFF5h + .hibytes 0DFF6h + .hibytes 0DFF7h + .hibytes 0DFF8h + .hibytes 0DFF9h + .hibytes 0DFFAh + .hibytes 0DFFBh + .hibytes 0DFFCh + .hibytes 0DFFDh + .hibytes 0DFFEh + .hibytes 0DFFFh + .hibytes 0E000h + .hibytes 0E001h + .hibytes 0E002h + .hibytes 0E003h + .hibytes 0E004h + .hibytes 0E005h + .hibytes 0E006h + .hibytes 0E007h + .hibytes 0E008h + .hibytes 0E009h + .hibytes 0E00Ah + .hibytes 0E00Bh + .hibytes 0E00Ch + .hibytes 0E00Dh + .hibytes 0E00Eh + .hibytes 0E00Fh + .hibytes 0EFE1h + .hibytes 0EFE2h + .hibytes 0EFE3h + .hibytes 0EFE4h + .hibytes 0EFE5h + .hibytes 0EFE6h + .hibytes 0EFE7h + .hibytes 0EFE8h + .hibytes 0EFE9h + .hibytes 0EFEAh + .hibytes 0EFEBh + .hibytes 0EFECh + .hibytes 0EFEDh + .hibytes 0EFEEh + .hibytes 0EFEFh + .hibytes 0EFF0h + .hibytes 0EFF1h + .hibytes 0EFF2h + .hibytes 0EFF3h + .hibytes 0EFF4h + .hibytes 0EFF5h + .hibytes 0EFF6h + .hibytes 0EFF7h + .hibytes 0EFF8h + .hibytes 0EFF9h + .hibytes 0EFFAh + .hibytes 0EFFBh + .hibytes 0EFFCh + .hibytes 0EFFDh + .hibytes 0EFFEh + .hibytes 0EFFFh + .hibytes 0F000h + .hibytes 0F001h + .hibytes 0F002h + .hibytes 0F003h + .hibytes 0F004h + .hibytes 0F005h + .hibytes 0F006h + .hibytes 0F007h + .hibytes 0F008h + .hibytes 0F009h + .hibytes 0F00Ah + .hibytes 0F00Bh + .hibytes 0F00Ch + .hibytes 0F00Dh + .hibytes 0F00Eh + .hibytes 0F00Fh + .hibytes 0FFE1h + .hibytes 0FFE2h + .hibytes 0FFE3h + .hibytes 0FFE4h + .hibytes 0FFE5h + .hibytes 0FFE6h + .hibytes 0FFE7h + .hibytes 0FFE8h + .hibytes 0FFE9h + .hibytes 0FFEAh + .hibytes 0FFEBh + .hibytes 0FFECh + .hibytes 0FFEDh + .hibytes 0FFEEh + .hibytes 0FFEFh + .hibytes 0FFF0h + .hibytes 0FFF1h + .hibytes 0FFF2h + .hibytes 0FFF3h + .hibytes 0FFF4h + .hibytes 0FFF5h + .hibytes 0FFF6h + .hibytes 0FFF7h + .hibytes 0FFF8h + .hibytes 0FFF9h + .hibytes 0FFFAh + .hibytes 0FFFBh + .hibytes 0FFFCh + .hibytes 0FFFDh + .hibytes 0FFFEh + .hibytes 0FFFFh + + ; alternative 4-digit hex values + .hibytes 0000h + .hibytes 0001h + .hibytes 0002h + .hibytes 0003h + .hibytes 0004h + .hibytes 0005h + .hibytes 0006h + .hibytes 0007h + .hibytes 0008h + .hibytes 0009h + .hibytes 000ah + .hibytes 000bh + .hibytes 000ch + .hibytes 000dh + .hibytes 000eh + .hibytes 000fh + .hibytes 0010h + .hibytes 0011h + .hibytes 0012h + .hibytes 0013h + .hibytes 0070h + .hibytes 0071h + .hibytes 0072h + .hibytes 0073h + .hibytes 0074h + .hibytes 0075h + .hibytes 0076h + .hibytes 0077h + .hibytes 0078h + .hibytes 0079h + .hibytes 007ah + .hibytes 007bh + .hibytes 007ch + .hibytes 007dh + .hibytes 007eh + .hibytes 007fh + .hibytes 0080h + .hibytes 0081h + .hibytes 0082h + .hibytes 0083h + .hibytes 0084h + .hibytes 0085h + .hibytes 0086h + .hibytes 00f0h + .hibytes 00f1h + .hibytes 00f2h + .hibytes 00f3h + .hibytes 00f4h + .hibytes 00f5h + .hibytes 00f6h + .hibytes 00f7h + .hibytes 00f8h + .hibytes 00f9h + .hibytes 00fah + .hibytes 00fbh + .hibytes 00fch + .hibytes 00fdh + .hibytes 00feh + .hibytes 00ffh + .hibytes 0100h + .hibytes 0101h + .hibytes 0102h + .hibytes 0103h + .hibytes 0fd2h + .hibytes 0fd3h + .hibytes 0fd4h + .hibytes 0fd5h + .hibytes 0fd6h + .hibytes 0fd7h + .hibytes 0fd8h + .hibytes 0fd9h + .hibytes 0fdah + .hibytes 0fdbh + .hibytes 0fdch + .hibytes 0fddh + .hibytes 0fdeh + .hibytes 0fdfh + .hibytes 0fe0h + .hibytes 0fe1h + .hibytes 0fe2h + .hibytes 0fe3h + .hibytes 0fe4h + .hibytes 0fe5h + .hibytes 0fe6h + .hibytes 0fe7h + .hibytes 0fe8h + .hibytes 0fe9h + .hibytes 0feah + .hibytes 0febh + .hibytes 0fech + .hibytes 0fedh + .hibytes 0feeh + .hibytes 0fefh + .hibytes 0ff0h + .hibytes 0ff1h + .hibytes 0ff2h + .hibytes 0ff3h + .hibytes 0ff4h + .hibytes 0ff5h + .hibytes 0ff6h + .hibytes 0ff7h + .hibytes 0ff8h + .hibytes 0ff9h + .hibytes 0ffah + .hibytes 0ffbh + .hibytes 0ffch + .hibytes 0ffdh + .hibytes 0ffeh + .hibytes 0fffh + .hibytes 1000h + .hibytes 1001h + .hibytes 1002h + .hibytes 1003h + .hibytes 1004h + .hibytes 1005h + .hibytes 1006h + .hibytes 1007h + .hibytes 1008h + .hibytes 7ff0h + .hibytes 7ff1h + .hibytes 7ff2h + .hibytes 7ff3h + .hibytes 7ff4h + .hibytes 7ff5h + .hibytes 7ff6h + .hibytes 7ff7h + .hibytes 7ff8h + .hibytes 7ff9h + .hibytes 7ffah + .hibytes 7ffbh + .hibytes 7ffch + .hibytes 7ffdh + .hibytes 7ffeh + .hibytes 7fffh + .hibytes 8000h + .hibytes 8001h + .hibytes 8002h + .hibytes 8003h + .hibytes 8004h + .hibytes 8005h + .hibytes 8006h + .hibytes 8007h + .hibytes 8008h + .hibytes 8009h + .hibytes 800ah + .hibytes 800bh + .hibytes 9fe1h + .hibytes 9fe2h + .hibytes 9fe3h + .hibytes 9fe4h + .hibytes 9fe5h + .hibytes 9fe6h + .hibytes 9fe7h + .hibytes 9fe8h + .hibytes 9fe9h + .hibytes 9feah + .hibytes 9febh + .hibytes 9fech + .hibytes 9fedh + .hibytes 9feeh + .hibytes 9fefh + .hibytes 9ff0h + .hibytes 9ff1h + .hibytes 9ff2h + .hibytes 9ff3h + .hibytes 9ff4h + .hibytes 9ff5h + .hibytes 9ff6h + .hibytes 9ff7h + .hibytes 9ff8h + .hibytes 9ff9h + .hibytes 9ffah + .hibytes 9ffbh + .hibytes 9ffch + .hibytes 9ffdh + .hibytes 9ffeh + .hibytes 9fffh + .hibytes 0a000h + .hibytes 0a001h + .hibytes 0a002h + .hibytes 0a003h + .hibytes 0a004h + .hibytes 0a005h + .hibytes 0a006h + .hibytes 0a007h + .hibytes 0a008h + .hibytes 0a009h + .hibytes 0a00ah + .hibytes 0a00bh + .hibytes 0a00ch + .hibytes 0a00dh + .hibytes 0a00eh + .hibytes 0a00fh + .hibytes 0afe1h + .hibytes 0afe2h + .hibytes 0afe3h + .hibytes 0afe4h + .hibytes 0afe5h + .hibytes 0afe6h + .hibytes 0afe7h + .hibytes 0afe8h + .hibytes 0afe9h + .hibytes 0afeah + .hibytes 0afebh + .hibytes 0afech + .hibytes 0afedh + .hibytes 0afeeh + .hibytes 0afefh + .hibytes 0aff0h + .hibytes 0aff1h + .hibytes 0aff2h + .hibytes 0aff3h + .hibytes 0aff4h + .hibytes 0aff5h + .hibytes 0aff6h + .hibytes 0aff7h + .hibytes 0aff8h + .hibytes 0aff9h + .hibytes 0affah + .hibytes 0affbh + .hibytes 0affch + .hibytes 0affdh + .hibytes 0affeh + .hibytes 0afffh + .hibytes 0b000h + .hibytes 0b001h + .hibytes 0b002h + .hibytes 0b003h + .hibytes 0b004h + .hibytes 0b005h + .hibytes 0b006h + .hibytes 0b007h + .hibytes 0b008h + .hibytes 0b009h + .hibytes 0b00ah + .hibytes 0b00bh + .hibytes 0b00ch + .hibytes 0b00dh + .hibytes 0b00eh + .hibytes 0b00fh + .hibytes 0bfe1h + .hibytes 0bfe2h + .hibytes 0bfe3h + .hibytes 0bfe4h + .hibytes 0bfe5h + .hibytes 0bfe6h + .hibytes 0bfe7h + .hibytes 0bfe8h + .hibytes 0bfe9h + .hibytes 0bfeah + .hibytes 0bfebh + .hibytes 0bfech + .hibytes 0bfedh + .hibytes 0bfeeh + .hibytes 0bfefh + .hibytes 0bff0h + .hibytes 0bff1h + .hibytes 0bff2h + .hibytes 0bff3h + .hibytes 0bff4h + .hibytes 0bff5h + .hibytes 0bff6h + .hibytes 0bff7h + .hibytes 0bff8h + .hibytes 0bff9h + .hibytes 0bffah + .hibytes 0bffbh + .hibytes 0bffch + .hibytes 0bffdh + .hibytes 0bffeh + .hibytes 0bfffh + .hibytes 0c000h + .hibytes 0c001h + .hibytes 0c002h + .hibytes 0c003h + .hibytes 0c004h + .hibytes 0c005h + .hibytes 0c006h + .hibytes 0c007h + .hibytes 0c008h + .hibytes 0c009h + .hibytes 0c00ah + .hibytes 0c00bh + .hibytes 0c00ch + .hibytes 0c00dh + .hibytes 0c00eh + .hibytes 0c00fh + .hibytes 0cfe1h + .hibytes 0cfe2h + .hibytes 0cfe3h + .hibytes 0cfe4h + .hibytes 0cfe5h + .hibytes 0cfe6h + .hibytes 0cfe7h + .hibytes 0cfe8h + .hibytes 0cfe9h + .hibytes 0cfeah + .hibytes 0cfebh + .hibytes 0cfech + .hibytes 0cfedh + .hibytes 0cfeeh + .hibytes 0cfefh + .hibytes 0cff0h + .hibytes 0cff1h + .hibytes 0cff2h + .hibytes 0cff3h + .hibytes 0cff4h + .hibytes 0cff5h + .hibytes 0cff6h + .hibytes 0cff7h + .hibytes 0cff8h + .hibytes 0cff9h + .hibytes 0cffah + .hibytes 0cffbh + .hibytes 0cffch + .hibytes 0cffdh + .hibytes 0cffeh + .hibytes 0cfffh + .hibytes 0d000h + .hibytes 0d001h + .hibytes 0d002h + .hibytes 0d003h + .hibytes 0d004h + .hibytes 0d005h + .hibytes 0d006h + .hibytes 0d007h + .hibytes 0d008h + .hibytes 0d009h + .hibytes 0d00ah + .hibytes 0d00bh + .hibytes 0d00ch + .hibytes 0d00dh + .hibytes 0d00eh + .hibytes 0d00fh + .hibytes 0dfe1h + .hibytes 0dfe2h + .hibytes 0dfe3h + .hibytes 0dfe4h + .hibytes 0dfe5h + .hibytes 0dfe6h + .hibytes 0dfe7h + .hibytes 0dfe8h + .hibytes 0dfe9h + .hibytes 0dfeah + .hibytes 0dfebh + .hibytes 0dfech + .hibytes 0dfedh + .hibytes 0dfeeh + .hibytes 0dfefh + .hibytes 0dff0h + .hibytes 0dff1h + .hibytes 0dff2h + .hibytes 0dff3h + .hibytes 0dff4h + .hibytes 0dff5h + .hibytes 0dff6h + .hibytes 0dff7h + .hibytes 0dff8h + .hibytes 0dff9h + .hibytes 0dffah + .hibytes 0dffbh + .hibytes 0dffch + .hibytes 0dffdh + .hibytes 0dffeh + .hibytes 0dfffh + .hibytes 0e000h + .hibytes 0e001h + .hibytes 0e002h + .hibytes 0e003h + .hibytes 0e004h + .hibytes 0e005h + .hibytes 0e006h + .hibytes 0e007h + .hibytes 0e008h + .hibytes 0e009h + .hibytes 0e00ah + .hibytes 0e00bh + .hibytes 0e00ch + .hibytes 0e00dh + .hibytes 0e00eh + .hibytes 0e00fh + .hibytes 0efe1h + .hibytes 0efe2h + .hibytes 0efe3h + .hibytes 0efe4h + .hibytes 0efe5h + .hibytes 0efe6h + .hibytes 0efe7h + .hibytes 0efe8h + .hibytes 0efe9h + .hibytes 0efeah + .hibytes 0efebh + .hibytes 0efech + .hibytes 0efedh + .hibytes 0efeeh + .hibytes 0efefh + .hibytes 0eff0h + .hibytes 0eff1h + .hibytes 0eff2h + .hibytes 0eff3h + .hibytes 0eff4h + .hibytes 0eff5h + .hibytes 0eff6h + .hibytes 0eff7h + .hibytes 0eff8h + .hibytes 0eff9h + .hibytes 0effah + .hibytes 0effbh + .hibytes 0effch + .hibytes 0effdh + .hibytes 0effeh + .hibytes 0efffh + .hibytes 0f000h + .hibytes 0f001h + .hibytes 0f002h + .hibytes 0f003h + .hibytes 0f004h + .hibytes 0f005h + .hibytes 0f006h + .hibytes 0f007h + .hibytes 0f008h + .hibytes 0f009h + .hibytes 0f00ah + .hibytes 0f00bh + .hibytes 0f00ch + .hibytes 0f00dh + .hibytes 0f00eh + .hibytes 0f00fh + .hibytes 0ffe1h + .hibytes 0ffe2h + .hibytes 0ffe3h + .hibytes 0ffe4h + .hibytes 0ffe5h + .hibytes 0ffe6h + .hibytes 0ffe7h + .hibytes 0ffe8h + .hibytes 0ffe9h + .hibytes 0ffeah + .hibytes 0ffebh + .hibytes 0ffech + .hibytes 0ffedh + .hibytes 0ffeeh + .hibytes 0ffefh + .hibytes 0fff0h + .hibytes 0fff1h + .hibytes 0fff2h + .hibytes 0fff3h + .hibytes 0fff4h + .hibytes 0fff5h + .hibytes 0fff6h + .hibytes 0fff7h + .hibytes 0fff8h + .hibytes 0fff9h + .hibytes 0fffah + .hibytes 0fffbh + .hibytes 0fffch + .hibytes 0fffdh + .hibytes 0fffeh + .hibytes 0ffffh + + ; alternative 4-digit hex values, uppercase + .hibytes 0000h + .hibytes 0001h + .hibytes 0002h + .hibytes 0003h + .hibytes 0004h + .hibytes 0005h + .hibytes 0006h + .hibytes 0007h + .hibytes 0008h + .hibytes 0009h + .hibytes 000Ah + .hibytes 000Bh + .hibytes 000Ch + .hibytes 000Dh + .hibytes 000Eh + .hibytes 000Fh + .hibytes 0010h + .hibytes 0011h + .hibytes 0012h + .hibytes 0013h + .hibytes 0070h + .hibytes 0071h + .hibytes 0072h + .hibytes 0073h + .hibytes 0074h + .hibytes 0075h + .hibytes 0076h + .hibytes 0077h + .hibytes 0078h + .hibytes 0079h + .hibytes 007Ah + .hibytes 007Bh + .hibytes 007Ch + .hibytes 007Dh + .hibytes 007Eh + .hibytes 007Fh + .hibytes 0080h + .hibytes 0081h + .hibytes 0082h + .hibytes 0083h + .hibytes 0084h + .hibytes 0085h + .hibytes 0086h + .hibytes 00F0h + .hibytes 00F1h + .hibytes 00F2h + .hibytes 00F3h + .hibytes 00F4h + .hibytes 00F5h + .hibytes 00F6h + .hibytes 00F7h + .hibytes 00F8h + .hibytes 00F9h + .hibytes 00FAh + .hibytes 00FBh + .hibytes 00FCh + .hibytes 00FDh + .hibytes 00FEh + .hibytes 00FFh + .hibytes 0100h + .hibytes 0101h + .hibytes 0102h + .hibytes 0103h + .hibytes 0FD2h + .hibytes 0FD3h + .hibytes 0FD4h + .hibytes 0FD5h + .hibytes 0FD6h + .hibytes 0FD7h + .hibytes 0FD8h + .hibytes 0FD9h + .hibytes 0FDAh + .hibytes 0FDBh + .hibytes 0FDCh + .hibytes 0FDDh + .hibytes 0FDEh + .hibytes 0FDFh + .hibytes 0FE0h + .hibytes 0FE1h + .hibytes 0FE2h + .hibytes 0FE3h + .hibytes 0FE4h + .hibytes 0FE5h + .hibytes 0FE6h + .hibytes 0FE7h + .hibytes 0FE8h + .hibytes 0FE9h + .hibytes 0FEAh + .hibytes 0FEBh + .hibytes 0FECh + .hibytes 0FEDh + .hibytes 0FEEh + .hibytes 0FEFh + .hibytes 0FF0h + .hibytes 0FF1h + .hibytes 0FF2h + .hibytes 0FF3h + .hibytes 0FF4h + .hibytes 0FF5h + .hibytes 0FF6h + .hibytes 0FF7h + .hibytes 0FF8h + .hibytes 0FF9h + .hibytes 0FFAh + .hibytes 0FFBh + .hibytes 0FFCh + .hibytes 0FFDh + .hibytes 0FFEh + .hibytes 0FFFh + .hibytes 1000h + .hibytes 1001h + .hibytes 1002h + .hibytes 1003h + .hibytes 1004h + .hibytes 1005h + .hibytes 1006h + .hibytes 1007h + .hibytes 1008h + .hibytes 7FF0h + .hibytes 7FF1h + .hibytes 7FF2h + .hibytes 7FF3h + .hibytes 7FF4h + .hibytes 7FF5h + .hibytes 7FF6h + .hibytes 7FF7h + .hibytes 7FF8h + .hibytes 7FF9h + .hibytes 7FFAh + .hibytes 7FFBh + .hibytes 7FFCh + .hibytes 7FFDh + .hibytes 7FFEh + .hibytes 7FFFh + .hibytes 8000h + .hibytes 8001h + .hibytes 8002h + .hibytes 8003h + .hibytes 8004h + .hibytes 8005h + .hibytes 8006h + .hibytes 8007h + .hibytes 8008h + .hibytes 8009h + .hibytes 800Ah + .hibytes 800Bh + .hibytes 9FE1h + .hibytes 9FE2h + .hibytes 9FE3h + .hibytes 9FE4h + .hibytes 9FE5h + .hibytes 9FE6h + .hibytes 9FE7h + .hibytes 9FE8h + .hibytes 9FE9h + .hibytes 9FEAh + .hibytes 9FEBh + .hibytes 9FECh + .hibytes 9FEDh + .hibytes 9FEEh + .hibytes 9FEFh + .hibytes 9FF0h + .hibytes 9FF1h + .hibytes 9FF2h + .hibytes 9FF3h + .hibytes 9FF4h + .hibytes 9FF5h + .hibytes 9FF6h + .hibytes 9FF7h + .hibytes 9FF8h + .hibytes 9FF9h + .hibytes 9FFAh + .hibytes 9FFBh + .hibytes 9FFCh + .hibytes 9FFDh + .hibytes 9FFEh + .hibytes 9FFFh + .hibytes 0A000h + .hibytes 0A001h + .hibytes 0A002h + .hibytes 0A003h + .hibytes 0A004h + .hibytes 0A005h + .hibytes 0A006h + .hibytes 0A007h + .hibytes 0A008h + .hibytes 0A009h + .hibytes 0A00Ah + .hibytes 0A00Bh + .hibytes 0A00Ch + .hibytes 0A00Dh + .hibytes 0A00Eh + .hibytes 0A00Fh + .hibytes 0AFE1h + .hibytes 0AFE2h + .hibytes 0AFE3h + .hibytes 0AFE4h + .hibytes 0AFE5h + .hibytes 0AFE6h + .hibytes 0AFE7h + .hibytes 0AFE8h + .hibytes 0AFE9h + .hibytes 0AFEAh + .hibytes 0AFEBh + .hibytes 0AFECh + .hibytes 0AFEDh + .hibytes 0AFEEh + .hibytes 0AFEFh + .hibytes 0AFF0h + .hibytes 0AFF1h + .hibytes 0AFF2h + .hibytes 0AFF3h + .hibytes 0AFF4h + .hibytes 0AFF5h + .hibytes 0AFF6h + .hibytes 0AFF7h + .hibytes 0AFF8h + .hibytes 0AFF9h + .hibytes 0AFFAh + .hibytes 0AFFBh + .hibytes 0AFFCh + .hibytes 0AFFDh + .hibytes 0AFFEh + .hibytes 0AFFFh + .hibytes 0B000h + .hibytes 0B001h + .hibytes 0B002h + .hibytes 0B003h + .hibytes 0B004h + .hibytes 0B005h + .hibytes 0B006h + .hibytes 0B007h + .hibytes 0B008h + .hibytes 0B009h + .hibytes 0B00Ah + .hibytes 0B00Bh + .hibytes 0B00Ch + .hibytes 0B00Dh + .hibytes 0B00Eh + .hibytes 0B00Fh + .hibytes 0BFE1h + .hibytes 0BFE2h + .hibytes 0BFE3h + .hibytes 0BFE4h + .hibytes 0BFE5h + .hibytes 0BFE6h + .hibytes 0BFE7h + .hibytes 0BFE8h + .hibytes 0BFE9h + .hibytes 0BFEAh + .hibytes 0BFEBh + .hibytes 0BFECh + .hibytes 0BFEDh + .hibytes 0BFEEh + .hibytes 0BFEFh + .hibytes 0BFF0h + .hibytes 0BFF1h + .hibytes 0BFF2h + .hibytes 0BFF3h + .hibytes 0BFF4h + .hibytes 0BFF5h + .hibytes 0BFF6h + .hibytes 0BFF7h + .hibytes 0BFF8h + .hibytes 0BFF9h + .hibytes 0BFFAh + .hibytes 0BFFBh + .hibytes 0BFFCh + .hibytes 0BFFDh + .hibytes 0BFFEh + .hibytes 0BFFFh + .hibytes 0C000h + .hibytes 0C001h + .hibytes 0C002h + .hibytes 0C003h + .hibytes 0C004h + .hibytes 0C005h + .hibytes 0C006h + .hibytes 0C007h + .hibytes 0C008h + .hibytes 0C009h + .hibytes 0C00Ah + .hibytes 0C00Bh + .hibytes 0C00Ch + .hibytes 0C00Dh + .hibytes 0C00Eh + .hibytes 0C00Fh + .hibytes 0CFE1h + .hibytes 0CFE2h + .hibytes 0CFE3h + .hibytes 0CFE4h + .hibytes 0CFE5h + .hibytes 0CFE6h + .hibytes 0CFE7h + .hibytes 0CFE8h + .hibytes 0CFE9h + .hibytes 0CFEAh + .hibytes 0CFEBh + .hibytes 0CFECh + .hibytes 0CFEDh + .hibytes 0CFEEh + .hibytes 0CFEFh + .hibytes 0CFF0h + .hibytes 0CFF1h + .hibytes 0CFF2h + .hibytes 0CFF3h + .hibytes 0CFF4h + .hibytes 0CFF5h + .hibytes 0CFF6h + .hibytes 0CFF7h + .hibytes 0CFF8h + .hibytes 0CFF9h + .hibytes 0CFFAh + .hibytes 0CFFBh + .hibytes 0CFFCh + .hibytes 0CFFDh + .hibytes 0CFFEh + .hibytes 0CFFFh + .hibytes 0D000h + .hibytes 0D001h + .hibytes 0D002h + .hibytes 0D003h + .hibytes 0D004h + .hibytes 0D005h + .hibytes 0D006h + .hibytes 0D007h + .hibytes 0D008h + .hibytes 0D009h + .hibytes 0D00Ah + .hibytes 0D00Bh + .hibytes 0D00Ch + .hibytes 0D00Dh + .hibytes 0D00Eh + .hibytes 0D00Fh + .hibytes 0DFE1h + .hibytes 0DFE2h + .hibytes 0DFE3h + .hibytes 0DFE4h + .hibytes 0DFE5h + .hibytes 0DFE6h + .hibytes 0DFE7h + .hibytes 0DFE8h + .hibytes 0DFE9h + .hibytes 0DFEAh + .hibytes 0DFEBh + .hibytes 0DFECh + .hibytes 0DFEDh + .hibytes 0DFEEh + .hibytes 0DFEFh + .hibytes 0DFF0h + .hibytes 0DFF1h + .hibytes 0DFF2h + .hibytes 0DFF3h + .hibytes 0DFF4h + .hibytes 0DFF5h + .hibytes 0DFF6h + .hibytes 0DFF7h + .hibytes 0DFF8h + .hibytes 0DFF9h + .hibytes 0DFFAh + .hibytes 0DFFBh + .hibytes 0DFFCh + .hibytes 0DFFDh + .hibytes 0DFFEh + .hibytes 0DFFFh + .hibytes 0E000h + .hibytes 0E001h + .hibytes 0E002h + .hibytes 0E003h + .hibytes 0E004h + .hibytes 0E005h + .hibytes 0E006h + .hibytes 0E007h + .hibytes 0E008h + .hibytes 0E009h + .hibytes 0E00Ah + .hibytes 0E00Bh + .hibytes 0E00Ch + .hibytes 0E00Dh + .hibytes 0E00Eh + .hibytes 0E00Fh + .hibytes 0EFE1h + .hibytes 0EFE2h + .hibytes 0EFE3h + .hibytes 0EFE4h + .hibytes 0EFE5h + .hibytes 0EFE6h + .hibytes 0EFE7h + .hibytes 0EFE8h + .hibytes 0EFE9h + .hibytes 0EFEAh + .hibytes 0EFEBh + .hibytes 0EFECh + .hibytes 0EFEDh + .hibytes 0EFEEh + .hibytes 0EFEFh + .hibytes 0EFF0h + .hibytes 0EFF1h + .hibytes 0EFF2h + .hibytes 0EFF3h + .hibytes 0EFF4h + .hibytes 0EFF5h + .hibytes 0EFF6h + .hibytes 0EFF7h + .hibytes 0EFF8h + .hibytes 0EFF9h + .hibytes 0EFFAh + .hibytes 0EFFBh + .hibytes 0EFFCh + .hibytes 0EFFDh + .hibytes 0EFFEh + .hibytes 0EFFFh + .hibytes 0F000h + .hibytes 0F001h + .hibytes 0F002h + .hibytes 0F003h + .hibytes 0F004h + .hibytes 0F005h + .hibytes 0F006h + .hibytes 0F007h + .hibytes 0F008h + .hibytes 0F009h + .hibytes 0F00Ah + .hibytes 0F00Bh + .hibytes 0F00Ch + .hibytes 0F00Dh + .hibytes 0F00Eh + .hibytes 0F00Fh + .hibytes 0FFE1h + .hibytes 0FFE2h + .hibytes 0FFE3h + .hibytes 0FFE4h + .hibytes 0FFE5h + .hibytes 0FFE6h + .hibytes 0FFE7h + .hibytes 0FFE8h + .hibytes 0FFE9h + .hibytes 0FFEAh + .hibytes 0FFEBh + .hibytes 0FFECh + .hibytes 0FFEDh + .hibytes 0FFEEh + .hibytes 0FFEFh + .hibytes 0FFF0h + .hibytes 0FFF1h + .hibytes 0FFF2h + .hibytes 0FFF3h + .hibytes 0FFF4h + .hibytes 0FFF5h + .hibytes 0FFF6h + .hibytes 0FFF7h + .hibytes 0FFF8h + .hibytes 0FFF9h + .hibytes 0FFFAh + .hibytes 0FFFBh + .hibytes 0FFFCh + .hibytes 0FFFDh + .hibytes 0FFFEh + .hibytes 0FFFFh + + ; alternative hex values, always leading zero + .hibytes 00h + .hibytes 01h + .hibytes 02h + .hibytes 03h + .hibytes 04h + .hibytes 05h + .hibytes 06h + .hibytes 07h + .hibytes 08h + .hibytes 09h + .hibytes 0ah + .hibytes 0bh + .hibytes 0ch + .hibytes 0dh + .hibytes 0eh + .hibytes 0fh + .hibytes 010h + .hibytes 011h + .hibytes 012h + .hibytes 013h + .hibytes 070h + .hibytes 071h + .hibytes 072h + .hibytes 073h + .hibytes 074h + .hibytes 075h + .hibytes 076h + .hibytes 077h + .hibytes 078h + .hibytes 079h + .hibytes 07ah + .hibytes 07bh + .hibytes 07ch + .hibytes 07dh + .hibytes 07eh + .hibytes 07fh + .hibytes 080h + .hibytes 081h + .hibytes 082h + .hibytes 083h + .hibytes 084h + .hibytes 085h + .hibytes 086h + .hibytes 0f0h + .hibytes 0f1h + .hibytes 0f2h + .hibytes 0f3h + .hibytes 0f4h + .hibytes 0f5h + .hibytes 0f6h + .hibytes 0f7h + .hibytes 0f8h + .hibytes 0f9h + .hibytes 0fah + .hibytes 0fbh + .hibytes 0fch + .hibytes 0fdh + .hibytes 0feh + .hibytes 0ffh + .hibytes 0100h + .hibytes 0101h + .hibytes 0102h + .hibytes 0103h + .hibytes 0fd2h + .hibytes 0fd3h + .hibytes 0fd4h + .hibytes 0fd5h + .hibytes 0fd6h + .hibytes 0fd7h + .hibytes 0fd8h + .hibytes 0fd9h + .hibytes 0fdah + .hibytes 0fdbh + .hibytes 0fdch + .hibytes 0fddh + .hibytes 0fdeh + .hibytes 0fdfh + .hibytes 0fe0h + .hibytes 0fe1h + .hibytes 0fe2h + .hibytes 0fe3h + .hibytes 0fe4h + .hibytes 0fe5h + .hibytes 0fe6h + .hibytes 0fe7h + .hibytes 0fe8h + .hibytes 0fe9h + .hibytes 0feah + .hibytes 0febh + .hibytes 0fech + .hibytes 0fedh + .hibytes 0feeh + .hibytes 0fefh + .hibytes 0ff0h + .hibytes 0ff1h + .hibytes 0ff2h + .hibytes 0ff3h + .hibytes 0ff4h + .hibytes 0ff5h + .hibytes 0ff6h + .hibytes 0ff7h + .hibytes 0ff8h + .hibytes 0ff9h + .hibytes 0ffah + .hibytes 0ffbh + .hibytes 0ffch + .hibytes 0ffdh + .hibytes 0ffeh + .hibytes 0fffh + .hibytes 01000h + .hibytes 01001h + .hibytes 01002h + .hibytes 01003h + .hibytes 01004h + .hibytes 01005h + .hibytes 01006h + .hibytes 01007h + .hibytes 01008h + .hibytes 07ff0h + .hibytes 07ff1h + .hibytes 07ff2h + .hibytes 07ff3h + .hibytes 07ff4h + .hibytes 07ff5h + .hibytes 07ff6h + .hibytes 07ff7h + .hibytes 07ff8h + .hibytes 07ff9h + .hibytes 07ffah + .hibytes 07ffbh + .hibytes 07ffch + .hibytes 07ffdh + .hibytes 07ffeh + .hibytes 07fffh + .hibytes 08000h + .hibytes 08001h + .hibytes 08002h + .hibytes 08003h + .hibytes 08004h + .hibytes 08005h + .hibytes 08006h + .hibytes 08007h + .hibytes 08008h + .hibytes 08009h + .hibytes 0800ah + .hibytes 0800bh + .hibytes 09fe1h + .hibytes 09fe2h + .hibytes 09fe3h + .hibytes 09fe4h + .hibytes 09fe5h + .hibytes 09fe6h + .hibytes 09fe7h + .hibytes 09fe8h + .hibytes 09fe9h + .hibytes 09feah + .hibytes 09febh + .hibytes 09fech + .hibytes 09fedh + .hibytes 09feeh + .hibytes 09fefh + .hibytes 09ff0h + .hibytes 09ff1h + .hibytes 09ff2h + .hibytes 09ff3h + .hibytes 09ff4h + .hibytes 09ff5h + .hibytes 09ff6h + .hibytes 09ff7h + .hibytes 09ff8h + .hibytes 09ff9h + .hibytes 09ffah + .hibytes 09ffbh + .hibytes 09ffch + .hibytes 09ffdh + .hibytes 09ffeh + .hibytes 09fffh + .hibytes 0a000h + .hibytes 0a001h + .hibytes 0a002h + .hibytes 0a003h + .hibytes 0a004h + .hibytes 0a005h + .hibytes 0a006h + .hibytes 0a007h + .hibytes 0a008h + .hibytes 0a009h + .hibytes 0a00ah + .hibytes 0a00bh + .hibytes 0a00ch + .hibytes 0a00dh + .hibytes 0a00eh + .hibytes 0a00fh + .hibytes 0afe1h + .hibytes 0afe2h + .hibytes 0afe3h + .hibytes 0afe4h + .hibytes 0afe5h + .hibytes 0afe6h + .hibytes 0afe7h + .hibytes 0afe8h + .hibytes 0afe9h + .hibytes 0afeah + .hibytes 0afebh + .hibytes 0afech + .hibytes 0afedh + .hibytes 0afeeh + .hibytes 0afefh + .hibytes 0aff0h + .hibytes 0aff1h + .hibytes 0aff2h + .hibytes 0aff3h + .hibytes 0aff4h + .hibytes 0aff5h + .hibytes 0aff6h + .hibytes 0aff7h + .hibytes 0aff8h + .hibytes 0aff9h + .hibytes 0affah + .hibytes 0affbh + .hibytes 0affch + .hibytes 0affdh + .hibytes 0affeh + .hibytes 0afffh + .hibytes 0b000h + .hibytes 0b001h + .hibytes 0b002h + .hibytes 0b003h + .hibytes 0b004h + .hibytes 0b005h + .hibytes 0b006h + .hibytes 0b007h + .hibytes 0b008h + .hibytes 0b009h + .hibytes 0b00ah + .hibytes 0b00bh + .hibytes 0b00ch + .hibytes 0b00dh + .hibytes 0b00eh + .hibytes 0b00fh + .hibytes 0bfe1h + .hibytes 0bfe2h + .hibytes 0bfe3h + .hibytes 0bfe4h + .hibytes 0bfe5h + .hibytes 0bfe6h + .hibytes 0bfe7h + .hibytes 0bfe8h + .hibytes 0bfe9h + .hibytes 0bfeah + .hibytes 0bfebh + .hibytes 0bfech + .hibytes 0bfedh + .hibytes 0bfeeh + .hibytes 0bfefh + .hibytes 0bff0h + .hibytes 0bff1h + .hibytes 0bff2h + .hibytes 0bff3h + .hibytes 0bff4h + .hibytes 0bff5h + .hibytes 0bff6h + .hibytes 0bff7h + .hibytes 0bff8h + .hibytes 0bff9h + .hibytes 0bffah + .hibytes 0bffbh + .hibytes 0bffch + .hibytes 0bffdh + .hibytes 0bffeh + .hibytes 0bfffh + .hibytes 0c000h + .hibytes 0c001h + .hibytes 0c002h + .hibytes 0c003h + .hibytes 0c004h + .hibytes 0c005h + .hibytes 0c006h + .hibytes 0c007h + .hibytes 0c008h + .hibytes 0c009h + .hibytes 0c00ah + .hibytes 0c00bh + .hibytes 0c00ch + .hibytes 0c00dh + .hibytes 0c00eh + .hibytes 0c00fh + .hibytes 0cfe1h + .hibytes 0cfe2h + .hibytes 0cfe3h + .hibytes 0cfe4h + .hibytes 0cfe5h + .hibytes 0cfe6h + .hibytes 0cfe7h + .hibytes 0cfe8h + .hibytes 0cfe9h + .hibytes 0cfeah + .hibytes 0cfebh + .hibytes 0cfech + .hibytes 0cfedh + .hibytes 0cfeeh + .hibytes 0cfefh + .hibytes 0cff0h + .hibytes 0cff1h + .hibytes 0cff2h + .hibytes 0cff3h + .hibytes 0cff4h + .hibytes 0cff5h + .hibytes 0cff6h + .hibytes 0cff7h + .hibytes 0cff8h + .hibytes 0cff9h + .hibytes 0cffah + .hibytes 0cffbh + .hibytes 0cffch + .hibytes 0cffdh + .hibytes 0cffeh + .hibytes 0cfffh + .hibytes 0d000h + .hibytes 0d001h + .hibytes 0d002h + .hibytes 0d003h + .hibytes 0d004h + .hibytes 0d005h + .hibytes 0d006h + .hibytes 0d007h + .hibytes 0d008h + .hibytes 0d009h + .hibytes 0d00ah + .hibytes 0d00bh + .hibytes 0d00ch + .hibytes 0d00dh + .hibytes 0d00eh + .hibytes 0d00fh + .hibytes 0dfe1h + .hibytes 0dfe2h + .hibytes 0dfe3h + .hibytes 0dfe4h + .hibytes 0dfe5h + .hibytes 0dfe6h + .hibytes 0dfe7h + .hibytes 0dfe8h + .hibytes 0dfe9h + .hibytes 0dfeah + .hibytes 0dfebh + .hibytes 0dfech + .hibytes 0dfedh + .hibytes 0dfeeh + .hibytes 0dfefh + .hibytes 0dff0h + .hibytes 0dff1h + .hibytes 0dff2h + .hibytes 0dff3h + .hibytes 0dff4h + .hibytes 0dff5h + .hibytes 0dff6h + .hibytes 0dff7h + .hibytes 0dff8h + .hibytes 0dff9h + .hibytes 0dffah + .hibytes 0dffbh + .hibytes 0dffch + .hibytes 0dffdh + .hibytes 0dffeh + .hibytes 0dfffh + .hibytes 0e000h + .hibytes 0e001h + .hibytes 0e002h + .hibytes 0e003h + .hibytes 0e004h + .hibytes 0e005h + .hibytes 0e006h + .hibytes 0e007h + .hibytes 0e008h + .hibytes 0e009h + .hibytes 0e00ah + .hibytes 0e00bh + .hibytes 0e00ch + .hibytes 0e00dh + .hibytes 0e00eh + .hibytes 0e00fh + .hibytes 0efe1h + .hibytes 0efe2h + .hibytes 0efe3h + .hibytes 0efe4h + .hibytes 0efe5h + .hibytes 0efe6h + .hibytes 0efe7h + .hibytes 0efe8h + .hibytes 0efe9h + .hibytes 0efeah + .hibytes 0efebh + .hibytes 0efech + .hibytes 0efedh + .hibytes 0efeeh + .hibytes 0efefh + .hibytes 0eff0h + .hibytes 0eff1h + .hibytes 0eff2h + .hibytes 0eff3h + .hibytes 0eff4h + .hibytes 0eff5h + .hibytes 0eff6h + .hibytes 0eff7h + .hibytes 0eff8h + .hibytes 0eff9h + .hibytes 0effah + .hibytes 0effbh + .hibytes 0effch + .hibytes 0effdh + .hibytes 0effeh + .hibytes 0efffh + .hibytes 0f000h + .hibytes 0f001h + .hibytes 0f002h + .hibytes 0f003h + .hibytes 0f004h + .hibytes 0f005h + .hibytes 0f006h + .hibytes 0f007h + .hibytes 0f008h + .hibytes 0f009h + .hibytes 0f00ah + .hibytes 0f00bh + .hibytes 0f00ch + .hibytes 0f00dh + .hibytes 0f00eh + .hibytes 0f00fh + .hibytes 0ffe1h + .hibytes 0ffe2h + .hibytes 0ffe3h + .hibytes 0ffe4h + .hibytes 0ffe5h + .hibytes 0ffe6h + .hibytes 0ffe7h + .hibytes 0ffe8h + .hibytes 0ffe9h + .hibytes 0ffeah + .hibytes 0ffebh + .hibytes 0ffech + .hibytes 0ffedh + .hibytes 0ffeeh + .hibytes 0ffefh + .hibytes 0fff0h + .hibytes 0fff1h + .hibytes 0fff2h + .hibytes 0fff3h + .hibytes 0fff4h + .hibytes 0fff5h + .hibytes 0fff6h + .hibytes 0fff7h + .hibytes 0fff8h + .hibytes 0fff9h + .hibytes 0fffah + .hibytes 0fffbh + .hibytes 0fffch + .hibytes 0fffdh + .hibytes 0fffeh + .hibytes 0ffffh + + ; binary values, variable length + .hibytes %0 + .hibytes %01 + .hibytes %010 + .hibytes %011 + .hibytes %0100 + .hibytes %0101 + .hibytes %0110 + .hibytes %0111 + .hibytes %01000 + .hibytes %01001 + .hibytes %01010 + .hibytes %01011 + .hibytes %01100 + .hibytes %01101 + .hibytes %01110 + .hibytes %01111 + .hibytes %010000 + .hibytes %010001 + .hibytes %010010 + .hibytes %010011 + .hibytes %01110000 + .hibytes %01110001 + .hibytes %01110010 + .hibytes %01110011 + .hibytes %01110100 + .hibytes %01110101 + .hibytes %01110110 + .hibytes %01110111 + .hibytes %01111000 + .hibytes %01111001 + .hibytes %01111010 + .hibytes %01111011 + .hibytes %01111100 + .hibytes %01111101 + .hibytes %01111110 + .hibytes %01111111 + .hibytes %010000000 + .hibytes %010000001 + .hibytes %010000010 + .hibytes %010000011 + .hibytes %010000100 + .hibytes %010000101 + .hibytes %010000110 + .hibytes %011110000 + .hibytes %011110001 + .hibytes %011110010 + .hibytes %011110011 + .hibytes %011110100 + .hibytes %011110101 + .hibytes %011110110 + .hibytes %011110111 + .hibytes %011111000 + .hibytes %011111001 + .hibytes %011111010 + .hibytes %011111011 + .hibytes %011111100 + .hibytes %011111101 + .hibytes %011111110 + .hibytes %011111111 + .hibytes %100000000 + .hibytes %100000001 + .hibytes %100000010 + .hibytes %100000011 + .hibytes %111111010010 + .hibytes %111111010011 + .hibytes %111111010100 + .hibytes %111111010101 + .hibytes %111111010110 + .hibytes %111111010111 + .hibytes %111111011000 + .hibytes %111111011001 + .hibytes %111111011010 + .hibytes %111111011011 + .hibytes %111111011100 + .hibytes %111111011101 + .hibytes %111111011110 + .hibytes %111111011111 + .hibytes %111111100000 + .hibytes %111111100001 + .hibytes %111111100010 + .hibytes %111111100011 + .hibytes %111111100100 + .hibytes %111111100101 + .hibytes %111111100110 + .hibytes %111111100111 + .hibytes %111111101000 + .hibytes %111111101001 + .hibytes %111111101010 + .hibytes %111111101011 + .hibytes %111111101100 + .hibytes %111111101101 + .hibytes %111111101110 + .hibytes %111111101111 + .hibytes %111111110000 + .hibytes %111111110001 + .hibytes %111111110010 + .hibytes %111111110011 + .hibytes %111111110100 + .hibytes %111111110101 + .hibytes %111111110110 + .hibytes %111111110111 + .hibytes %111111111000 + .hibytes %111111111001 + .hibytes %111111111010 + .hibytes %111111111011 + .hibytes %111111111100 + .hibytes %111111111101 + .hibytes %111111111110 + .hibytes %111111111111 + .hibytes %1000000000000 + .hibytes %1000000000001 + .hibytes %1000000000010 + .hibytes %1000000000011 + .hibytes %1000000000100 + .hibytes %1000000000101 + .hibytes %1000000000110 + .hibytes %1000000000111 + .hibytes %1000000001000 + .hibytes %111111111110000 + .hibytes %111111111110001 + .hibytes %111111111110010 + .hibytes %111111111110011 + .hibytes %111111111110100 + .hibytes %111111111110101 + .hibytes %111111111110110 + .hibytes %111111111110111 + .hibytes %111111111111000 + .hibytes %111111111111001 + .hibytes %111111111111010 + .hibytes %111111111111011 + .hibytes %111111111111100 + .hibytes %111111111111101 + .hibytes %111111111111110 + .hibytes %111111111111111 + .hibytes %1000000000000000 + .hibytes %1000000000000001 + .hibytes %1000000000000010 + .hibytes %1000000000000011 + .hibytes %1000000000000100 + .hibytes %1000000000000101 + .hibytes %1000000000000110 + .hibytes %1000000000000111 + .hibytes %1000000000001000 + .hibytes %1000000000001001 + .hibytes %1000000000001010 + .hibytes %1000000000001011 + .hibytes %1001111111100001 + .hibytes %1001111111100010 + .hibytes %1001111111100011 + .hibytes %1001111111100100 + .hibytes %1001111111100101 + .hibytes %1001111111100110 + .hibytes %1001111111100111 + .hibytes %1001111111101000 + .hibytes %1001111111101001 + .hibytes %1001111111101010 + .hibytes %1001111111101011 + .hibytes %1001111111101100 + .hibytes %1001111111101101 + .hibytes %1001111111101110 + .hibytes %1001111111101111 + .hibytes %1001111111110000 + .hibytes %1001111111110001 + .hibytes %1001111111110010 + .hibytes %1001111111110011 + .hibytes %1001111111110100 + .hibytes %1001111111110101 + .hibytes %1001111111110110 + .hibytes %1001111111110111 + .hibytes %1001111111111000 + .hibytes %1001111111111001 + .hibytes %1001111111111010 + .hibytes %1001111111111011 + .hibytes %1001111111111100 + .hibytes %1001111111111101 + .hibytes %1001111111111110 + .hibytes %1001111111111111 + .hibytes %1010000000000000 + .hibytes %1010000000000001 + .hibytes %1010000000000010 + .hibytes %1010000000000011 + .hibytes %1010000000000100 + .hibytes %1010000000000101 + .hibytes %1010000000000110 + .hibytes %1010000000000111 + .hibytes %1010000000001000 + .hibytes %1010000000001001 + .hibytes %1010000000001010 + .hibytes %1010000000001011 + .hibytes %1010000000001100 + .hibytes %1010000000001101 + .hibytes %1010000000001110 + .hibytes %1010000000001111 + .hibytes %1010111111100001 + .hibytes %1010111111100010 + .hibytes %1010111111100011 + .hibytes %1010111111100100 + .hibytes %1010111111100101 + .hibytes %1010111111100110 + .hibytes %1010111111100111 + .hibytes %1010111111101000 + .hibytes %1010111111101001 + .hibytes %1010111111101010 + .hibytes %1010111111101011 + .hibytes %1010111111101100 + .hibytes %1010111111101101 + .hibytes %1010111111101110 + .hibytes %1010111111101111 + .hibytes %1010111111110000 + .hibytes %1010111111110001 + .hibytes %1010111111110010 + .hibytes %1010111111110011 + .hibytes %1010111111110100 + .hibytes %1010111111110101 + .hibytes %1010111111110110 + .hibytes %1010111111110111 + .hibytes %1010111111111000 + .hibytes %1010111111111001 + .hibytes %1010111111111010 + .hibytes %1010111111111011 + .hibytes %1010111111111100 + .hibytes %1010111111111101 + .hibytes %1010111111111110 + .hibytes %1010111111111111 + .hibytes %1011000000000000 + .hibytes %1011000000000001 + .hibytes %1011000000000010 + .hibytes %1011000000000011 + .hibytes %1011000000000100 + .hibytes %1011000000000101 + .hibytes %1011000000000110 + .hibytes %1011000000000111 + .hibytes %1011000000001000 + .hibytes %1011000000001001 + .hibytes %1011000000001010 + .hibytes %1011000000001011 + .hibytes %1011000000001100 + .hibytes %1011000000001101 + .hibytes %1011000000001110 + .hibytes %1011000000001111 + .hibytes %1011111111100001 + .hibytes %1011111111100010 + .hibytes %1011111111100011 + .hibytes %1011111111100100 + .hibytes %1011111111100101 + .hibytes %1011111111100110 + .hibytes %1011111111100111 + .hibytes %1011111111101000 + .hibytes %1011111111101001 + .hibytes %1011111111101010 + .hibytes %1011111111101011 + .hibytes %1011111111101100 + .hibytes %1011111111101101 + .hibytes %1011111111101110 + .hibytes %1011111111101111 + .hibytes %1011111111110000 + .hibytes %1011111111110001 + .hibytes %1011111111110010 + .hibytes %1011111111110011 + .hibytes %1011111111110100 + .hibytes %1011111111110101 + .hibytes %1011111111110110 + .hibytes %1011111111110111 + .hibytes %1011111111111000 + .hibytes %1011111111111001 + .hibytes %1011111111111010 + .hibytes %1011111111111011 + .hibytes %1011111111111100 + .hibytes %1011111111111101 + .hibytes %1011111111111110 + .hibytes %1011111111111111 + .hibytes %1100000000000000 + .hibytes %1100000000000001 + .hibytes %1100000000000010 + .hibytes %1100000000000011 + .hibytes %1100000000000100 + .hibytes %1100000000000101 + .hibytes %1100000000000110 + .hibytes %1100000000000111 + .hibytes %1100000000001000 + .hibytes %1100000000001001 + .hibytes %1100000000001010 + .hibytes %1100000000001011 + .hibytes %1100000000001100 + .hibytes %1100000000001101 + .hibytes %1100000000001110 + .hibytes %1100000000001111 + .hibytes %1100111111100001 + .hibytes %1100111111100010 + .hibytes %1100111111100011 + .hibytes %1100111111100100 + .hibytes %1100111111100101 + .hibytes %1100111111100110 + .hibytes %1100111111100111 + .hibytes %1100111111101000 + .hibytes %1100111111101001 + .hibytes %1100111111101010 + .hibytes %1100111111101011 + .hibytes %1100111111101100 + .hibytes %1100111111101101 + .hibytes %1100111111101110 + .hibytes %1100111111101111 + .hibytes %1100111111110000 + .hibytes %1100111111110001 + .hibytes %1100111111110010 + .hibytes %1100111111110011 + .hibytes %1100111111110100 + .hibytes %1100111111110101 + .hibytes %1100111111110110 + .hibytes %1100111111110111 + .hibytes %1100111111111000 + .hibytes %1100111111111001 + .hibytes %1100111111111010 + .hibytes %1100111111111011 + .hibytes %1100111111111100 + .hibytes %1100111111111101 + .hibytes %1100111111111110 + .hibytes %1100111111111111 + .hibytes %1101000000000000 + .hibytes %1101000000000001 + .hibytes %1101000000000010 + .hibytes %1101000000000011 + .hibytes %1101000000000100 + .hibytes %1101000000000101 + .hibytes %1101000000000110 + .hibytes %1101000000000111 + .hibytes %1101000000001000 + .hibytes %1101000000001001 + .hibytes %1101000000001010 + .hibytes %1101000000001011 + .hibytes %1101000000001100 + .hibytes %1101000000001101 + .hibytes %1101000000001110 + .hibytes %1101000000001111 + .hibytes %1101111111100001 + .hibytes %1101111111100010 + .hibytes %1101111111100011 + .hibytes %1101111111100100 + .hibytes %1101111111100101 + .hibytes %1101111111100110 + .hibytes %1101111111100111 + .hibytes %1101111111101000 + .hibytes %1101111111101001 + .hibytes %1101111111101010 + .hibytes %1101111111101011 + .hibytes %1101111111101100 + .hibytes %1101111111101101 + .hibytes %1101111111101110 + .hibytes %1101111111101111 + .hibytes %1101111111110000 + .hibytes %1101111111110001 + .hibytes %1101111111110010 + .hibytes %1101111111110011 + .hibytes %1101111111110100 + .hibytes %1101111111110101 + .hibytes %1101111111110110 + .hibytes %1101111111110111 + .hibytes %1101111111111000 + .hibytes %1101111111111001 + .hibytes %1101111111111010 + .hibytes %1101111111111011 + .hibytes %1101111111111100 + .hibytes %1101111111111101 + .hibytes %1101111111111110 + .hibytes %1101111111111111 + .hibytes %1110000000000000 + .hibytes %1110000000000001 + .hibytes %1110000000000010 + .hibytes %1110000000000011 + .hibytes %1110000000000100 + .hibytes %1110000000000101 + .hibytes %1110000000000110 + .hibytes %1110000000000111 + .hibytes %1110000000001000 + .hibytes %1110000000001001 + .hibytes %1110000000001010 + .hibytes %1110000000001011 + .hibytes %1110000000001100 + .hibytes %1110000000001101 + .hibytes %1110000000001110 + .hibytes %1110000000001111 + .hibytes %1110111111100001 + .hibytes %1110111111100010 + .hibytes %1110111111100011 + .hibytes %1110111111100100 + .hibytes %1110111111100101 + .hibytes %1110111111100110 + .hibytes %1110111111100111 + .hibytes %1110111111101000 + .hibytes %1110111111101001 + .hibytes %1110111111101010 + .hibytes %1110111111101011 + .hibytes %1110111111101100 + .hibytes %1110111111101101 + .hibytes %1110111111101110 + .hibytes %1110111111101111 + .hibytes %1110111111110000 + .hibytes %1110111111110001 + .hibytes %1110111111110010 + .hibytes %1110111111110011 + .hibytes %1110111111110100 + .hibytes %1110111111110101 + .hibytes %1110111111110110 + .hibytes %1110111111110111 + .hibytes %1110111111111000 + .hibytes %1110111111111001 + .hibytes %1110111111111010 + .hibytes %1110111111111011 + .hibytes %1110111111111100 + .hibytes %1110111111111101 + .hibytes %1110111111111110 + .hibytes %1110111111111111 + .hibytes %1111000000000000 + .hibytes %1111000000000001 + .hibytes %1111000000000010 + .hibytes %1111000000000011 + .hibytes %1111000000000100 + .hibytes %1111000000000101 + .hibytes %1111000000000110 + .hibytes %1111000000000111 + .hibytes %1111000000001000 + .hibytes %1111000000001001 + .hibytes %1111000000001010 + .hibytes %1111000000001011 + .hibytes %1111000000001100 + .hibytes %1111000000001101 + .hibytes %1111000000001110 + .hibytes %1111000000001111 + .hibytes %1111111111100001 + .hibytes %1111111111100010 + .hibytes %1111111111100011 + .hibytes %1111111111100100 + .hibytes %1111111111100101 + .hibytes %1111111111100110 + .hibytes %1111111111100111 + .hibytes %1111111111101000 + .hibytes %1111111111101001 + .hibytes %1111111111101010 + .hibytes %1111111111101011 + .hibytes %1111111111101100 + .hibytes %1111111111101101 + .hibytes %1111111111101110 + .hibytes %1111111111101111 + .hibytes %1111111111110000 + .hibytes %1111111111110001 + .hibytes %1111111111110010 + .hibytes %1111111111110011 + .hibytes %1111111111110100 + .hibytes %1111111111110101 + .hibytes %1111111111110110 + .hibytes %1111111111110111 + .hibytes %1111111111111000 + .hibytes %1111111111111001 + .hibytes %1111111111111010 + .hibytes %1111111111111011 + .hibytes %1111111111111100 + .hibytes %1111111111111101 + .hibytes %1111111111111110 + .hibytes %1111111111111111 + + ; binary values, full length + .hibytes %0000000000000000 + .hibytes %0000000000000001 + .hibytes %0000000000000010 + .hibytes %0000000000000011 + .hibytes %0000000000000100 + .hibytes %0000000000000101 + .hibytes %0000000000000110 + .hibytes %0000000000000111 + .hibytes %0000000000001000 + .hibytes %0000000000001001 + .hibytes %0000000000001010 + .hibytes %0000000000001011 + .hibytes %0000000000001100 + .hibytes %0000000000001101 + .hibytes %0000000000001110 + .hibytes %0000000000001111 + .hibytes %0000000000010000 + .hibytes %0000000000010001 + .hibytes %0000000000010010 + .hibytes %0000000000010011 + .hibytes %0000000001110000 + .hibytes %0000000001110001 + .hibytes %0000000001110010 + .hibytes %0000000001110011 + .hibytes %0000000001110100 + .hibytes %0000000001110101 + .hibytes %0000000001110110 + .hibytes %0000000001110111 + .hibytes %0000000001111000 + .hibytes %0000000001111001 + .hibytes %0000000001111010 + .hibytes %0000000001111011 + .hibytes %0000000001111100 + .hibytes %0000000001111101 + .hibytes %0000000001111110 + .hibytes %0000000001111111 + .hibytes %0000000010000000 + .hibytes %0000000010000001 + .hibytes %0000000010000010 + .hibytes %0000000010000011 + .hibytes %0000000010000100 + .hibytes %0000000010000101 + .hibytes %0000000010000110 + .hibytes %0000000011110000 + .hibytes %0000000011110001 + .hibytes %0000000011110010 + .hibytes %0000000011110011 + .hibytes %0000000011110100 + .hibytes %0000000011110101 + .hibytes %0000000011110110 + .hibytes %0000000011110111 + .hibytes %0000000011111000 + .hibytes %0000000011111001 + .hibytes %0000000011111010 + .hibytes %0000000011111011 + .hibytes %0000000011111100 + .hibytes %0000000011111101 + .hibytes %0000000011111110 + .hibytes %0000000011111111 + .hibytes %0000000100000000 + .hibytes %0000000100000001 + .hibytes %0000000100000010 + .hibytes %0000000100000011 + .hibytes %0000111111010010 + .hibytes %0000111111010011 + .hibytes %0000111111010100 + .hibytes %0000111111010101 + .hibytes %0000111111010110 + .hibytes %0000111111010111 + .hibytes %0000111111011000 + .hibytes %0000111111011001 + .hibytes %0000111111011010 + .hibytes %0000111111011011 + .hibytes %0000111111011100 + .hibytes %0000111111011101 + .hibytes %0000111111011110 + .hibytes %0000111111011111 + .hibytes %0000111111100000 + .hibytes %0000111111100001 + .hibytes %0000111111100010 + .hibytes %0000111111100011 + .hibytes %0000111111100100 + .hibytes %0000111111100101 + .hibytes %0000111111100110 + .hibytes %0000111111100111 + .hibytes %0000111111101000 + .hibytes %0000111111101001 + .hibytes %0000111111101010 + .hibytes %0000111111101011 + .hibytes %0000111111101100 + .hibytes %0000111111101101 + .hibytes %0000111111101110 + .hibytes %0000111111101111 + .hibytes %0000111111110000 + .hibytes %0000111111110001 + .hibytes %0000111111110010 + .hibytes %0000111111110011 + .hibytes %0000111111110100 + .hibytes %0000111111110101 + .hibytes %0000111111110110 + .hibytes %0000111111110111 + .hibytes %0000111111111000 + .hibytes %0000111111111001 + .hibytes %0000111111111010 + .hibytes %0000111111111011 + .hibytes %0000111111111100 + .hibytes %0000111111111101 + .hibytes %0000111111111110 + .hibytes %0000111111111111 + .hibytes %0001000000000000 + .hibytes %0001000000000001 + .hibytes %0001000000000010 + .hibytes %0001000000000011 + .hibytes %0001000000000100 + .hibytes %0001000000000101 + .hibytes %0001000000000110 + .hibytes %0001000000000111 + .hibytes %0001000000001000 + .hibytes %0111111111110000 + .hibytes %0111111111110001 + .hibytes %0111111111110010 + .hibytes %0111111111110011 + .hibytes %0111111111110100 + .hibytes %0111111111110101 + .hibytes %0111111111110110 + .hibytes %0111111111110111 + .hibytes %0111111111111000 + .hibytes %0111111111111001 + .hibytes %0111111111111010 + .hibytes %0111111111111011 + .hibytes %0111111111111100 + .hibytes %0111111111111101 + .hibytes %0111111111111110 + .hibytes %0111111111111111 + .hibytes %1000000000000000 + .hibytes %1000000000000001 + .hibytes %1000000000000010 + .hibytes %1000000000000011 + .hibytes %1000000000000100 + .hibytes %1000000000000101 + .hibytes %1000000000000110 + .hibytes %1000000000000111 + .hibytes %1000000000001000 + .hibytes %1000000000001001 + .hibytes %1000000000001010 + .hibytes %1000000000001011 + .hibytes %1001111111100001 + .hibytes %1001111111100010 + .hibytes %1001111111100011 + .hibytes %1001111111100100 + .hibytes %1001111111100101 + .hibytes %1001111111100110 + .hibytes %1001111111100111 + .hibytes %1001111111101000 + .hibytes %1001111111101001 + .hibytes %1001111111101010 + .hibytes %1001111111101011 + .hibytes %1001111111101100 + .hibytes %1001111111101101 + .hibytes %1001111111101110 + .hibytes %1001111111101111 + .hibytes %1001111111110000 + .hibytes %1001111111110001 + .hibytes %1001111111110010 + .hibytes %1001111111110011 + .hibytes %1001111111110100 + .hibytes %1001111111110101 + .hibytes %1001111111110110 + .hibytes %1001111111110111 + .hibytes %1001111111111000 + .hibytes %1001111111111001 + .hibytes %1001111111111010 + .hibytes %1001111111111011 + .hibytes %1001111111111100 + .hibytes %1001111111111101 + .hibytes %1001111111111110 + .hibytes %1001111111111111 + .hibytes %1010000000000000 + .hibytes %1010000000000001 + .hibytes %1010000000000010 + .hibytes %1010000000000011 + .hibytes %1010000000000100 + .hibytes %1010000000000101 + .hibytes %1010000000000110 + .hibytes %1010000000000111 + .hibytes %1010000000001000 + .hibytes %1010000000001001 + .hibytes %1010000000001010 + .hibytes %1010000000001011 + .hibytes %1010000000001100 + .hibytes %1010000000001101 + .hibytes %1010000000001110 + .hibytes %1010000000001111 + .hibytes %1010111111100001 + .hibytes %1010111111100010 + .hibytes %1010111111100011 + .hibytes %1010111111100100 + .hibytes %1010111111100101 + .hibytes %1010111111100110 + .hibytes %1010111111100111 + .hibytes %1010111111101000 + .hibytes %1010111111101001 + .hibytes %1010111111101010 + .hibytes %1010111111101011 + .hibytes %1010111111101100 + .hibytes %1010111111101101 + .hibytes %1010111111101110 + .hibytes %1010111111101111 + .hibytes %1010111111110000 + .hibytes %1010111111110001 + .hibytes %1010111111110010 + .hibytes %1010111111110011 + .hibytes %1010111111110100 + .hibytes %1010111111110101 + .hibytes %1010111111110110 + .hibytes %1010111111110111 + .hibytes %1010111111111000 + .hibytes %1010111111111001 + .hibytes %1010111111111010 + .hibytes %1010111111111011 + .hibytes %1010111111111100 + .hibytes %1010111111111101 + .hibytes %1010111111111110 + .hibytes %1010111111111111 + .hibytes %1011000000000000 + .hibytes %1011000000000001 + .hibytes %1011000000000010 + .hibytes %1011000000000011 + .hibytes %1011000000000100 + .hibytes %1011000000000101 + .hibytes %1011000000000110 + .hibytes %1011000000000111 + .hibytes %1011000000001000 + .hibytes %1011000000001001 + .hibytes %1011000000001010 + .hibytes %1011000000001011 + .hibytes %1011000000001100 + .hibytes %1011000000001101 + .hibytes %1011000000001110 + .hibytes %1011000000001111 + .hibytes %1011111111100001 + .hibytes %1011111111100010 + .hibytes %1011111111100011 + .hibytes %1011111111100100 + .hibytes %1011111111100101 + .hibytes %1011111111100110 + .hibytes %1011111111100111 + .hibytes %1011111111101000 + .hibytes %1011111111101001 + .hibytes %1011111111101010 + .hibytes %1011111111101011 + .hibytes %1011111111101100 + .hibytes %1011111111101101 + .hibytes %1011111111101110 + .hibytes %1011111111101111 + .hibytes %1011111111110000 + .hibytes %1011111111110001 + .hibytes %1011111111110010 + .hibytes %1011111111110011 + .hibytes %1011111111110100 + .hibytes %1011111111110101 + .hibytes %1011111111110110 + .hibytes %1011111111110111 + .hibytes %1011111111111000 + .hibytes %1011111111111001 + .hibytes %1011111111111010 + .hibytes %1011111111111011 + .hibytes %1011111111111100 + .hibytes %1011111111111101 + .hibytes %1011111111111110 + .hibytes %1011111111111111 + .hibytes %1100000000000000 + .hibytes %1100000000000001 + .hibytes %1100000000000010 + .hibytes %1100000000000011 + .hibytes %1100000000000100 + .hibytes %1100000000000101 + .hibytes %1100000000000110 + .hibytes %1100000000000111 + .hibytes %1100000000001000 + .hibytes %1100000000001001 + .hibytes %1100000000001010 + .hibytes %1100000000001011 + .hibytes %1100000000001100 + .hibytes %1100000000001101 + .hibytes %1100000000001110 + .hibytes %1100000000001111 + .hibytes %1100111111100001 + .hibytes %1100111111100010 + .hibytes %1100111111100011 + .hibytes %1100111111100100 + .hibytes %1100111111100101 + .hibytes %1100111111100110 + .hibytes %1100111111100111 + .hibytes %1100111111101000 + .hibytes %1100111111101001 + .hibytes %1100111111101010 + .hibytes %1100111111101011 + .hibytes %1100111111101100 + .hibytes %1100111111101101 + .hibytes %1100111111101110 + .hibytes %1100111111101111 + .hibytes %1100111111110000 + .hibytes %1100111111110001 + .hibytes %1100111111110010 + .hibytes %1100111111110011 + .hibytes %1100111111110100 + .hibytes %1100111111110101 + .hibytes %1100111111110110 + .hibytes %1100111111110111 + .hibytes %1100111111111000 + .hibytes %1100111111111001 + .hibytes %1100111111111010 + .hibytes %1100111111111011 + .hibytes %1100111111111100 + .hibytes %1100111111111101 + .hibytes %1100111111111110 + .hibytes %1100111111111111 + .hibytes %1101000000000000 + .hibytes %1101000000000001 + .hibytes %1101000000000010 + .hibytes %1101000000000011 + .hibytes %1101000000000100 + .hibytes %1101000000000101 + .hibytes %1101000000000110 + .hibytes %1101000000000111 + .hibytes %1101000000001000 + .hibytes %1101000000001001 + .hibytes %1101000000001010 + .hibytes %1101000000001011 + .hibytes %1101000000001100 + .hibytes %1101000000001101 + .hibytes %1101000000001110 + .hibytes %1101000000001111 + .hibytes %1101111111100001 + .hibytes %1101111111100010 + .hibytes %1101111111100011 + .hibytes %1101111111100100 + .hibytes %1101111111100101 + .hibytes %1101111111100110 + .hibytes %1101111111100111 + .hibytes %1101111111101000 + .hibytes %1101111111101001 + .hibytes %1101111111101010 + .hibytes %1101111111101011 + .hibytes %1101111111101100 + .hibytes %1101111111101101 + .hibytes %1101111111101110 + .hibytes %1101111111101111 + .hibytes %1101111111110000 + .hibytes %1101111111110001 + .hibytes %1101111111110010 + .hibytes %1101111111110011 + .hibytes %1101111111110100 + .hibytes %1101111111110101 + .hibytes %1101111111110110 + .hibytes %1101111111110111 + .hibytes %1101111111111000 + .hibytes %1101111111111001 + .hibytes %1101111111111010 + .hibytes %1101111111111011 + .hibytes %1101111111111100 + .hibytes %1101111111111101 + .hibytes %1101111111111110 + .hibytes %1101111111111111 + .hibytes %1110000000000000 + .hibytes %1110000000000001 + .hibytes %1110000000000010 + .hibytes %1110000000000011 + .hibytes %1110000000000100 + .hibytes %1110000000000101 + .hibytes %1110000000000110 + .hibytes %1110000000000111 + .hibytes %1110000000001000 + .hibytes %1110000000001001 + .hibytes %1110000000001010 + .hibytes %1110000000001011 + .hibytes %1110000000001100 + .hibytes %1110000000001101 + .hibytes %1110000000001110 + .hibytes %1110000000001111 + .hibytes %1110111111100001 + .hibytes %1110111111100010 + .hibytes %1110111111100011 + .hibytes %1110111111100100 + .hibytes %1110111111100101 + .hibytes %1110111111100110 + .hibytes %1110111111100111 + .hibytes %1110111111101000 + .hibytes %1110111111101001 + .hibytes %1110111111101010 + .hibytes %1110111111101011 + .hibytes %1110111111101100 + .hibytes %1110111111101101 + .hibytes %1110111111101110 + .hibytes %1110111111101111 + .hibytes %1110111111110000 + .hibytes %1110111111110001 + .hibytes %1110111111110010 + .hibytes %1110111111110011 + .hibytes %1110111111110100 + .hibytes %1110111111110101 + .hibytes %1110111111110110 + .hibytes %1110111111110111 + .hibytes %1110111111111000 + .hibytes %1110111111111001 + .hibytes %1110111111111010 + .hibytes %1110111111111011 + .hibytes %1110111111111100 + .hibytes %1110111111111101 + .hibytes %1110111111111110 + .hibytes %1110111111111111 + .hibytes %1111000000000000 + .hibytes %1111000000000001 + .hibytes %1111000000000010 + .hibytes %1111000000000011 + .hibytes %1111000000000100 + .hibytes %1111000000000101 + .hibytes %1111000000000110 + .hibytes %1111000000000111 + .hibytes %1111000000001000 + .hibytes %1111000000001001 + .hibytes %1111000000001010 + .hibytes %1111000000001011 + .hibytes %1111000000001100 + .hibytes %1111000000001101 + .hibytes %1111000000001110 + .hibytes %1111000000001111 + .hibytes %1111111111100001 + .hibytes %1111111111100010 + .hibytes %1111111111100011 + .hibytes %1111111111100100 + .hibytes %1111111111100101 + .hibytes %1111111111100110 + .hibytes %1111111111100111 + .hibytes %1111111111101000 + .hibytes %1111111111101001 + .hibytes %1111111111101010 + .hibytes %1111111111101011 + .hibytes %1111111111101100 + .hibytes %1111111111101101 + .hibytes %1111111111101110 + .hibytes %1111111111101111 + .hibytes %1111111111110000 + .hibytes %1111111111110001 + .hibytes %1111111111110010 + .hibytes %1111111111110011 + .hibytes %1111111111110100 + .hibytes %1111111111110101 + .hibytes %1111111111110110 + .hibytes %1111111111110111 + .hibytes %1111111111111000 + .hibytes %1111111111111001 + .hibytes %1111111111111010 + .hibytes %1111111111111011 + .hibytes %1111111111111100 + .hibytes %1111111111111101 + .hibytes %1111111111111110 + .hibytes %1111111111111111 + + ; multiple values on one line, decimal + .hibytes 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .hibytes 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .hibytes 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .hibytes 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .hibytes 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + .hibytes 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 + .hibytes 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 + .hibytes 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 + .hibytes 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 + .hibytes 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 + .hibytes 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 + .hibytes 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 + .hibytes 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 + .hibytes 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 + .hibytes 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 + .hibytes 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 + .hibytes 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 + .hibytes 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 + .hibytes 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 + .hibytes 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 + .hibytes 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 + .hibytes 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 + .hibytes 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 + .hibytes 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 + + ; multiple values on one line, hex + .hibytes $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .hibytes $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .hibytes $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .hibytes $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .hibytes $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + .hibytes $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f + .hibytes $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef + .hibytes $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff + .hibytes $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f + .hibytes $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff + .hibytes $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f + .hibytes $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff + .hibytes $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f + .hibytes $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff + .hibytes $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f + .hibytes $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff + .hibytes $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f + .hibytes $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff + .hibytes $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f + .hibytes $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff + .hibytes $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f + .hibytes $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff + .hibytes $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f + .hibytes $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff + + ; multiple values on one line, alternative hex + .hibytes 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .hibytes 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .hibytes 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .hibytes 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .hibytes 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + .hibytes 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh + .hibytes 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh + .hibytes 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh + .hibytes 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh + .hibytes 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh + .hibytes 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh + .hibytes 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh + .hibytes 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh + .hibytes 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh + .hibytes 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh + .hibytes 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh + .hibytes 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh + .hibytes 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh + .hibytes 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh + .hibytes 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh + .hibytes 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh + .hibytes 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh + .hibytes 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh + .hibytes 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh + + ; mix some variants + .hibytes 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/107-lobytes.bin-ref b/test/asm/listing/107-lobytes.bin-ref new file mode 100644 index 0000000000000000000000000000000000000000..aa8be919f9b958ac4e9f7c3e471f3f6cd97175ff GIT binary patch literal 7135 zcmZQzWMXDvWn<^y<l^Sx<>MC+6cR2dEGjN3Ei136tg5c5t*dWnY-(<4ZTs-?)8{W= zzkUDl^Vjb`fB*ew0BXH-`O4L6*Kgdsb^FfUd-oqaeDwIq(`V0LynOZg&D(eHvFQL? zhEoFQ3S!NGI(Sq$a(s+NB}(!{4vwLmP)2hlN+C5Gm7@hL{tAXJmBVPR9L<%Z%^qN* zaZr`Vqq%Z4SB~b&(Oe1ZqQd$BgQ}1k%8nT=U`Gqs(E@g~fE_Jh3667;*9{#lV24!! zD<Uc;E+Hu;Eh8%@k7H=Py`!_MyQjCWAK$<@Xn3CJ5q4<GBV^uimj`8~(eOu|vw<~; jLFtLs@jn{=m~&>d41aDxX2HayD#s`T%T=pZt^Nl9ruhyo literal 0 HcmV?d00001 diff --git a/test/asm/listing/107-lobytes.list-ref b/test/asm/listing/107-lobytes.list-ref new file mode 100644 index 000000000..02527cca4 --- /dev/null +++ b/test/asm/listing/107-lobytes.list-ref @@ -0,0 +1,6226 @@ +Main file : 107-lobytes.s +Current file: 107-lobytes.s + +000000r 1 ; 2022-06-15 Spiro Trikaliotis +000000r 1 +000000r 1 +000000r 1 ; upper case pseudo-op +000000r 1 00 .LOBYTES 0 +000001r 1 01 .LOBYTES 1 +000002r 1 02 .LOBYTES 2 +000003r 1 03 .LOBYTES 3 +000004r 1 04 .LOBYTES 4 +000005r 1 05 .LOBYTES 5 +000006r 1 06 .LOBYTES 6 +000007r 1 07 .LOBYTES 7 +000008r 1 08 .LOBYTES 8 +000009r 1 09 .LOBYTES 9 +00000Ar 1 0A .LOBYTES 10 +00000Br 1 0B .LOBYTES 11 +00000Cr 1 0C .LOBYTES 12 +00000Dr 1 0D .LOBYTES 13 +00000Er 1 0E .LOBYTES 14 +00000Fr 1 0F .LOBYTES 15 +000010r 1 10 .LOBYTES 16 +000011r 1 11 .LOBYTES 17 +000012r 1 12 .LOBYTES 18 +000013r 1 13 .LOBYTES 19 +000014r 1 70 .LOBYTES 112 +000015r 1 71 .LOBYTES 113 +000016r 1 72 .LOBYTES 114 +000017r 1 73 .LOBYTES 115 +000018r 1 74 .LOBYTES 116 +000019r 1 75 .LOBYTES 117 +00001Ar 1 76 .LOBYTES 118 +00001Br 1 77 .LOBYTES 119 +00001Cr 1 78 .LOBYTES 120 +00001Dr 1 79 .LOBYTES 121 +00001Er 1 7A .LOBYTES 122 +00001Fr 1 7B .LOBYTES 123 +000020r 1 7C .LOBYTES 124 +000021r 1 7D .LOBYTES 125 +000022r 1 7E .LOBYTES 126 +000023r 1 7F .LOBYTES 127 +000024r 1 80 .LOBYTES 128 +000025r 1 81 .LOBYTES 129 +000026r 1 82 .LOBYTES 130 +000027r 1 83 .LOBYTES 131 +000028r 1 84 .LOBYTES 132 +000029r 1 85 .LOBYTES 133 +00002Ar 1 86 .LOBYTES 134 +00002Br 1 F0 .LOBYTES 240 +00002Cr 1 F1 .LOBYTES 241 +00002Dr 1 F2 .LOBYTES 242 +00002Er 1 F3 .LOBYTES 243 +00002Fr 1 F4 .LOBYTES 244 +000030r 1 F5 .LOBYTES 245 +000031r 1 F6 .LOBYTES 246 +000032r 1 F7 .LOBYTES 247 +000033r 1 F8 .LOBYTES 248 +000034r 1 F9 .LOBYTES 249 +000035r 1 FA .LOBYTES 250 +000036r 1 FB .LOBYTES 251 +000037r 1 FC .LOBYTES 252 +000038r 1 FD .LOBYTES 253 +000039r 1 FE .LOBYTES 254 +00003Ar 1 FF .LOBYTES 255 +00003Br 1 00 .LOBYTES 256 +00003Cr 1 01 .LOBYTES 257 +00003Dr 1 02 .LOBYTES 258 +00003Er 1 03 .LOBYTES 259 +00003Fr 1 D2 .LOBYTES 4050 +000040r 1 D3 .LOBYTES 4051 +000041r 1 D4 .LOBYTES 4052 +000042r 1 D5 .LOBYTES 4053 +000043r 1 D6 .LOBYTES 4054 +000044r 1 D7 .LOBYTES 4055 +000045r 1 D8 .LOBYTES 4056 +000046r 1 D9 .LOBYTES 4057 +000047r 1 DA .LOBYTES 4058 +000048r 1 DB .LOBYTES 4059 +000049r 1 DC .LOBYTES 4060 +00004Ar 1 DD .LOBYTES 4061 +00004Br 1 DE .LOBYTES 4062 +00004Cr 1 DF .LOBYTES 4063 +00004Dr 1 E0 .LOBYTES 4064 +00004Er 1 E1 .LOBYTES 4065 +00004Fr 1 E2 .LOBYTES 4066 +000050r 1 E3 .LOBYTES 4067 +000051r 1 E4 .LOBYTES 4068 +000052r 1 E5 .LOBYTES 4069 +000053r 1 E6 .LOBYTES 4070 +000054r 1 E7 .LOBYTES 4071 +000055r 1 E8 .LOBYTES 4072 +000056r 1 E9 .LOBYTES 4073 +000057r 1 EA .LOBYTES 4074 +000058r 1 EB .LOBYTES 4075 +000059r 1 EC .LOBYTES 4076 +00005Ar 1 ED .LOBYTES 4077 +00005Br 1 EE .LOBYTES 4078 +00005Cr 1 EF .LOBYTES 4079 +00005Dr 1 F0 .LOBYTES 4080 +00005Er 1 F1 .LOBYTES 4081 +00005Fr 1 F2 .LOBYTES 4082 +000060r 1 F3 .LOBYTES 4083 +000061r 1 F4 .LOBYTES 4084 +000062r 1 F5 .LOBYTES 4085 +000063r 1 F6 .LOBYTES 4086 +000064r 1 F7 .LOBYTES 4087 +000065r 1 F8 .LOBYTES 4088 +000066r 1 F9 .LOBYTES 4089 +000067r 1 FA .LOBYTES 4090 +000068r 1 FB .LOBYTES 4091 +000069r 1 FC .LOBYTES 4092 +00006Ar 1 FD .LOBYTES 4093 +00006Br 1 FE .LOBYTES 4094 +00006Cr 1 FF .LOBYTES 4095 +00006Dr 1 00 .LOBYTES 4096 +00006Er 1 01 .LOBYTES 4097 +00006Fr 1 02 .LOBYTES 4098 +000070r 1 03 .LOBYTES 4099 +000071r 1 04 .LOBYTES 4100 +000072r 1 05 .LOBYTES 4101 +000073r 1 06 .LOBYTES 4102 +000074r 1 07 .LOBYTES 4103 +000075r 1 08 .LOBYTES 4104 +000076r 1 F0 .LOBYTES 32752 +000077r 1 F1 .LOBYTES 32753 +000078r 1 F2 .LOBYTES 32754 +000079r 1 F3 .LOBYTES 32755 +00007Ar 1 F4 .LOBYTES 32756 +00007Br 1 F5 .LOBYTES 32757 +00007Cr 1 F6 .LOBYTES 32758 +00007Dr 1 F7 .LOBYTES 32759 +00007Er 1 F8 .LOBYTES 32760 +00007Fr 1 F9 .LOBYTES 32761 +000080r 1 FA .LOBYTES 32762 +000081r 1 FB .LOBYTES 32763 +000082r 1 FC .LOBYTES 32764 +000083r 1 FD .LOBYTES 32765 +000084r 1 FE .LOBYTES 32766 +000085r 1 FF .LOBYTES 32767 +000086r 1 00 .LOBYTES 32768 +000087r 1 01 .LOBYTES 32769 +000088r 1 02 .LOBYTES 32770 +000089r 1 03 .LOBYTES 32771 +00008Ar 1 04 .LOBYTES 32772 +00008Br 1 05 .LOBYTES 32773 +00008Cr 1 06 .LOBYTES 32774 +00008Dr 1 07 .LOBYTES 32775 +00008Er 1 08 .LOBYTES 32776 +00008Fr 1 09 .LOBYTES 32777 +000090r 1 0A .LOBYTES 32778 +000091r 1 0B .LOBYTES 32779 +000092r 1 E1 .LOBYTES 40929 +000093r 1 E2 .LOBYTES 40930 +000094r 1 E3 .LOBYTES 40931 +000095r 1 E4 .LOBYTES 40932 +000096r 1 E5 .LOBYTES 40933 +000097r 1 E6 .LOBYTES 40934 +000098r 1 E7 .LOBYTES 40935 +000099r 1 E8 .LOBYTES 40936 +00009Ar 1 E9 .LOBYTES 40937 +00009Br 1 EA .LOBYTES 40938 +00009Cr 1 EB .LOBYTES 40939 +00009Dr 1 EC .LOBYTES 40940 +00009Er 1 ED .LOBYTES 40941 +00009Fr 1 EE .LOBYTES 40942 +0000A0r 1 EF .LOBYTES 40943 +0000A1r 1 F0 .LOBYTES 40944 +0000A2r 1 F1 .LOBYTES 40945 +0000A3r 1 F2 .LOBYTES 40946 +0000A4r 1 F3 .LOBYTES 40947 +0000A5r 1 F4 .LOBYTES 40948 +0000A6r 1 F5 .LOBYTES 40949 +0000A7r 1 F6 .LOBYTES 40950 +0000A8r 1 F7 .LOBYTES 40951 +0000A9r 1 F8 .LOBYTES 40952 +0000AAr 1 F9 .LOBYTES 40953 +0000ABr 1 FA .LOBYTES 40954 +0000ACr 1 FB .LOBYTES 40955 +0000ADr 1 FC .LOBYTES 40956 +0000AEr 1 FD .LOBYTES 40957 +0000AFr 1 FE .LOBYTES 40958 +0000B0r 1 FF .LOBYTES 40959 +0000B1r 1 00 .LOBYTES 40960 +0000B2r 1 01 .LOBYTES 40961 +0000B3r 1 02 .LOBYTES 40962 +0000B4r 1 03 .LOBYTES 40963 +0000B5r 1 04 .LOBYTES 40964 +0000B6r 1 05 .LOBYTES 40965 +0000B7r 1 06 .LOBYTES 40966 +0000B8r 1 07 .LOBYTES 40967 +0000B9r 1 08 .LOBYTES 40968 +0000BAr 1 09 .LOBYTES 40969 +0000BBr 1 0A .LOBYTES 40970 +0000BCr 1 0B .LOBYTES 40971 +0000BDr 1 0C .LOBYTES 40972 +0000BEr 1 0D .LOBYTES 40973 +0000BFr 1 0E .LOBYTES 40974 +0000C0r 1 0F .LOBYTES 40975 +0000C1r 1 E1 .LOBYTES 45025 +0000C2r 1 E2 .LOBYTES 45026 +0000C3r 1 E3 .LOBYTES 45027 +0000C4r 1 E4 .LOBYTES 45028 +0000C5r 1 E5 .LOBYTES 45029 +0000C6r 1 E6 .LOBYTES 45030 +0000C7r 1 E7 .LOBYTES 45031 +0000C8r 1 E8 .LOBYTES 45032 +0000C9r 1 E9 .LOBYTES 45033 +0000CAr 1 EA .LOBYTES 45034 +0000CBr 1 EB .LOBYTES 45035 +0000CCr 1 EC .LOBYTES 45036 +0000CDr 1 ED .LOBYTES 45037 +0000CEr 1 EE .LOBYTES 45038 +0000CFr 1 EF .LOBYTES 45039 +0000D0r 1 F0 .LOBYTES 45040 +0000D1r 1 F1 .LOBYTES 45041 +0000D2r 1 F2 .LOBYTES 45042 +0000D3r 1 F3 .LOBYTES 45043 +0000D4r 1 F4 .LOBYTES 45044 +0000D5r 1 F5 .LOBYTES 45045 +0000D6r 1 F6 .LOBYTES 45046 +0000D7r 1 F7 .LOBYTES 45047 +0000D8r 1 F8 .LOBYTES 45048 +0000D9r 1 F9 .LOBYTES 45049 +0000DAr 1 FA .LOBYTES 45050 +0000DBr 1 FB .LOBYTES 45051 +0000DCr 1 FC .LOBYTES 45052 +0000DDr 1 FD .LOBYTES 45053 +0000DEr 1 FE .LOBYTES 45054 +0000DFr 1 FF .LOBYTES 45055 +0000E0r 1 00 .LOBYTES 45056 +0000E1r 1 01 .LOBYTES 45057 +0000E2r 1 02 .LOBYTES 45058 +0000E3r 1 03 .LOBYTES 45059 +0000E4r 1 04 .LOBYTES 45060 +0000E5r 1 05 .LOBYTES 45061 +0000E6r 1 06 .LOBYTES 45062 +0000E7r 1 07 .LOBYTES 45063 +0000E8r 1 08 .LOBYTES 45064 +0000E9r 1 09 .LOBYTES 45065 +0000EAr 1 0A .LOBYTES 45066 +0000EBr 1 0B .LOBYTES 45067 +0000ECr 1 0C .LOBYTES 45068 +0000EDr 1 0D .LOBYTES 45069 +0000EEr 1 0E .LOBYTES 45070 +0000EFr 1 0F .LOBYTES 45071 +0000F0r 1 E1 .LOBYTES 49121 +0000F1r 1 E2 .LOBYTES 49122 +0000F2r 1 E3 .LOBYTES 49123 +0000F3r 1 E4 .LOBYTES 49124 +0000F4r 1 E5 .LOBYTES 49125 +0000F5r 1 E6 .LOBYTES 49126 +0000F6r 1 E7 .LOBYTES 49127 +0000F7r 1 E8 .LOBYTES 49128 +0000F8r 1 E9 .LOBYTES 49129 +0000F9r 1 EA .LOBYTES 49130 +0000FAr 1 EB .LOBYTES 49131 +0000FBr 1 EC .LOBYTES 49132 +0000FCr 1 ED .LOBYTES 49133 +0000FDr 1 EE .LOBYTES 49134 +0000FEr 1 EF .LOBYTES 49135 +0000FFr 1 F0 .LOBYTES 49136 +000100r 1 F1 .LOBYTES 49137 +000101r 1 F2 .LOBYTES 49138 +000102r 1 F3 .LOBYTES 49139 +000103r 1 F4 .LOBYTES 49140 +000104r 1 F5 .LOBYTES 49141 +000105r 1 F6 .LOBYTES 49142 +000106r 1 F7 .LOBYTES 49143 +000107r 1 F8 .LOBYTES 49144 +000108r 1 F9 .LOBYTES 49145 +000109r 1 FA .LOBYTES 49146 +00010Ar 1 FB .LOBYTES 49147 +00010Br 1 FC .LOBYTES 49148 +00010Cr 1 FD .LOBYTES 49149 +00010Dr 1 FE .LOBYTES 49150 +00010Er 1 FF .LOBYTES 49151 +00010Fr 1 00 .LOBYTES 49152 +000110r 1 01 .LOBYTES 49153 +000111r 1 02 .LOBYTES 49154 +000112r 1 03 .LOBYTES 49155 +000113r 1 04 .LOBYTES 49156 +000114r 1 05 .LOBYTES 49157 +000115r 1 06 .LOBYTES 49158 +000116r 1 07 .LOBYTES 49159 +000117r 1 08 .LOBYTES 49160 +000118r 1 09 .LOBYTES 49161 +000119r 1 0A .LOBYTES 49162 +00011Ar 1 0B .LOBYTES 49163 +00011Br 1 0C .LOBYTES 49164 +00011Cr 1 0D .LOBYTES 49165 +00011Dr 1 0E .LOBYTES 49166 +00011Er 1 0F .LOBYTES 49167 +00011Fr 1 E1 .LOBYTES 53217 +000120r 1 E2 .LOBYTES 53218 +000121r 1 E3 .LOBYTES 53219 +000122r 1 E4 .LOBYTES 53220 +000123r 1 E5 .LOBYTES 53221 +000124r 1 E6 .LOBYTES 53222 +000125r 1 E7 .LOBYTES 53223 +000126r 1 E8 .LOBYTES 53224 +000127r 1 E9 .LOBYTES 53225 +000128r 1 EA .LOBYTES 53226 +000129r 1 EB .LOBYTES 53227 +00012Ar 1 EC .LOBYTES 53228 +00012Br 1 ED .LOBYTES 53229 +00012Cr 1 EE .LOBYTES 53230 +00012Dr 1 EF .LOBYTES 53231 +00012Er 1 F0 .LOBYTES 53232 +00012Fr 1 F1 .LOBYTES 53233 +000130r 1 F2 .LOBYTES 53234 +000131r 1 F3 .LOBYTES 53235 +000132r 1 F4 .LOBYTES 53236 +000133r 1 F5 .LOBYTES 53237 +000134r 1 F6 .LOBYTES 53238 +000135r 1 F7 .LOBYTES 53239 +000136r 1 F8 .LOBYTES 53240 +000137r 1 F9 .LOBYTES 53241 +000138r 1 FA .LOBYTES 53242 +000139r 1 FB .LOBYTES 53243 +00013Ar 1 FC .LOBYTES 53244 +00013Br 1 FD .LOBYTES 53245 +00013Cr 1 FE .LOBYTES 53246 +00013Dr 1 FF .LOBYTES 53247 +00013Er 1 00 .LOBYTES 53248 +00013Fr 1 01 .LOBYTES 53249 +000140r 1 02 .LOBYTES 53250 +000141r 1 03 .LOBYTES 53251 +000142r 1 04 .LOBYTES 53252 +000143r 1 05 .LOBYTES 53253 +000144r 1 06 .LOBYTES 53254 +000145r 1 07 .LOBYTES 53255 +000146r 1 08 .LOBYTES 53256 +000147r 1 09 .LOBYTES 53257 +000148r 1 0A .LOBYTES 53258 +000149r 1 0B .LOBYTES 53259 +00014Ar 1 0C .LOBYTES 53260 +00014Br 1 0D .LOBYTES 53261 +00014Cr 1 0E .LOBYTES 53262 +00014Dr 1 0F .LOBYTES 53263 +00014Er 1 E1 .LOBYTES 57313 +00014Fr 1 E2 .LOBYTES 57314 +000150r 1 E3 .LOBYTES 57315 +000151r 1 E4 .LOBYTES 57316 +000152r 1 E5 .LOBYTES 57317 +000153r 1 E6 .LOBYTES 57318 +000154r 1 E7 .LOBYTES 57319 +000155r 1 E8 .LOBYTES 57320 +000156r 1 E9 .LOBYTES 57321 +000157r 1 EA .LOBYTES 57322 +000158r 1 EB .LOBYTES 57323 +000159r 1 EC .LOBYTES 57324 +00015Ar 1 ED .LOBYTES 57325 +00015Br 1 EE .LOBYTES 57326 +00015Cr 1 EF .LOBYTES 57327 +00015Dr 1 F0 .LOBYTES 57328 +00015Er 1 F1 .LOBYTES 57329 +00015Fr 1 F2 .LOBYTES 57330 +000160r 1 F3 .LOBYTES 57331 +000161r 1 F4 .LOBYTES 57332 +000162r 1 F5 .LOBYTES 57333 +000163r 1 F6 .LOBYTES 57334 +000164r 1 F7 .LOBYTES 57335 +000165r 1 F8 .LOBYTES 57336 +000166r 1 F9 .LOBYTES 57337 +000167r 1 FA .LOBYTES 57338 +000168r 1 FB .LOBYTES 57339 +000169r 1 FC .LOBYTES 57340 +00016Ar 1 FD .LOBYTES 57341 +00016Br 1 FE .LOBYTES 57342 +00016Cr 1 FF .LOBYTES 57343 +00016Dr 1 00 .LOBYTES 57344 +00016Er 1 01 .LOBYTES 57345 +00016Fr 1 02 .LOBYTES 57346 +000170r 1 03 .LOBYTES 57347 +000171r 1 04 .LOBYTES 57348 +000172r 1 05 .LOBYTES 57349 +000173r 1 06 .LOBYTES 57350 +000174r 1 07 .LOBYTES 57351 +000175r 1 08 .LOBYTES 57352 +000176r 1 09 .LOBYTES 57353 +000177r 1 0A .LOBYTES 57354 +000178r 1 0B .LOBYTES 57355 +000179r 1 0C .LOBYTES 57356 +00017Ar 1 0D .LOBYTES 57357 +00017Br 1 0E .LOBYTES 57358 +00017Cr 1 0F .LOBYTES 57359 +00017Dr 1 E1 .LOBYTES 61409 +00017Er 1 E2 .LOBYTES 61410 +00017Fr 1 E3 .LOBYTES 61411 +000180r 1 E4 .LOBYTES 61412 +000181r 1 E5 .LOBYTES 61413 +000182r 1 E6 .LOBYTES 61414 +000183r 1 E7 .LOBYTES 61415 +000184r 1 E8 .LOBYTES 61416 +000185r 1 E9 .LOBYTES 61417 +000186r 1 EA .LOBYTES 61418 +000187r 1 EB .LOBYTES 61419 +000188r 1 EC .LOBYTES 61420 +000189r 1 ED .LOBYTES 61421 +00018Ar 1 EE .LOBYTES 61422 +00018Br 1 EF .LOBYTES 61423 +00018Cr 1 F0 .LOBYTES 61424 +00018Dr 1 F1 .LOBYTES 61425 +00018Er 1 F2 .LOBYTES 61426 +00018Fr 1 F3 .LOBYTES 61427 +000190r 1 F4 .LOBYTES 61428 +000191r 1 F5 .LOBYTES 61429 +000192r 1 F6 .LOBYTES 61430 +000193r 1 F7 .LOBYTES 61431 +000194r 1 F8 .LOBYTES 61432 +000195r 1 F9 .LOBYTES 61433 +000196r 1 FA .LOBYTES 61434 +000197r 1 FB .LOBYTES 61435 +000198r 1 FC .LOBYTES 61436 +000199r 1 FD .LOBYTES 61437 +00019Ar 1 FE .LOBYTES 61438 +00019Br 1 FF .LOBYTES 61439 +00019Cr 1 00 .LOBYTES 61440 +00019Dr 1 01 .LOBYTES 61441 +00019Er 1 02 .LOBYTES 61442 +00019Fr 1 03 .LOBYTES 61443 +0001A0r 1 04 .LOBYTES 61444 +0001A1r 1 05 .LOBYTES 61445 +0001A2r 1 06 .LOBYTES 61446 +0001A3r 1 07 .LOBYTES 61447 +0001A4r 1 08 .LOBYTES 61448 +0001A5r 1 09 .LOBYTES 61449 +0001A6r 1 0A .LOBYTES 61450 +0001A7r 1 0B .LOBYTES 61451 +0001A8r 1 0C .LOBYTES 61452 +0001A9r 1 0D .LOBYTES 61453 +0001AAr 1 0E .LOBYTES 61454 +0001ABr 1 0F .LOBYTES 61455 +0001ACr 1 E1 .LOBYTES 65505 +0001ADr 1 E2 .LOBYTES 65506 +0001AEr 1 E3 .LOBYTES 65507 +0001AFr 1 E4 .LOBYTES 65508 +0001B0r 1 E5 .LOBYTES 65509 +0001B1r 1 E6 .LOBYTES 65510 +0001B2r 1 E7 .LOBYTES 65511 +0001B3r 1 E8 .LOBYTES 65512 +0001B4r 1 E9 .LOBYTES 65513 +0001B5r 1 EA .LOBYTES 65514 +0001B6r 1 EB .LOBYTES 65515 +0001B7r 1 EC .LOBYTES 65516 +0001B8r 1 ED .LOBYTES 65517 +0001B9r 1 EE .LOBYTES 65518 +0001BAr 1 EF .LOBYTES 65519 +0001BBr 1 F0 .LOBYTES 65520 +0001BCr 1 F1 .LOBYTES 65521 +0001BDr 1 F2 .LOBYTES 65522 +0001BEr 1 F3 .LOBYTES 65523 +0001BFr 1 F4 .LOBYTES 65524 +0001C0r 1 F5 .LOBYTES 65525 +0001C1r 1 F6 .LOBYTES 65526 +0001C2r 1 F7 .LOBYTES 65527 +0001C3r 1 F8 .LOBYTES 65528 +0001C4r 1 F9 .LOBYTES 65529 +0001C5r 1 FA .LOBYTES 65530 +0001C6r 1 FB .LOBYTES 65531 +0001C7r 1 FC .LOBYTES 65532 +0001C8r 1 FD .LOBYTES 65533 +0001C9r 1 FE .LOBYTES 65534 +0001CAr 1 FF .LOBYTES 65535 +0001CBr 1 +0001CBr 1 ; lower case pseudo-op +0001CBr 1 00 .lobytes 0 +0001CCr 1 01 .lobytes 1 +0001CDr 1 02 .lobytes 2 +0001CEr 1 03 .lobytes 3 +0001CFr 1 04 .lobytes 4 +0001D0r 1 05 .lobytes 5 +0001D1r 1 06 .lobytes 6 +0001D2r 1 07 .lobytes 7 +0001D3r 1 08 .lobytes 8 +0001D4r 1 09 .lobytes 9 +0001D5r 1 0A .lobytes 10 +0001D6r 1 0B .lobytes 11 +0001D7r 1 0C .lobytes 12 +0001D8r 1 0D .lobytes 13 +0001D9r 1 0E .lobytes 14 +0001DAr 1 0F .lobytes 15 +0001DBr 1 10 .lobytes 16 +0001DCr 1 11 .lobytes 17 +0001DDr 1 12 .lobytes 18 +0001DEr 1 13 .lobytes 19 +0001DFr 1 70 .lobytes 112 +0001E0r 1 71 .lobytes 113 +0001E1r 1 72 .lobytes 114 +0001E2r 1 73 .lobytes 115 +0001E3r 1 74 .lobytes 116 +0001E4r 1 75 .lobytes 117 +0001E5r 1 76 .lobytes 118 +0001E6r 1 77 .lobytes 119 +0001E7r 1 78 .lobytes 120 +0001E8r 1 79 .lobytes 121 +0001E9r 1 7A .lobytes 122 +0001EAr 1 7B .lobytes 123 +0001EBr 1 7C .lobytes 124 +0001ECr 1 7D .lobytes 125 +0001EDr 1 7E .lobytes 126 +0001EEr 1 7F .lobytes 127 +0001EFr 1 80 .lobytes 128 +0001F0r 1 81 .lobytes 129 +0001F1r 1 82 .lobytes 130 +0001F2r 1 83 .lobytes 131 +0001F3r 1 84 .lobytes 132 +0001F4r 1 85 .lobytes 133 +0001F5r 1 86 .lobytes 134 +0001F6r 1 F0 .lobytes 240 +0001F7r 1 F1 .lobytes 241 +0001F8r 1 F2 .lobytes 242 +0001F9r 1 F3 .lobytes 243 +0001FAr 1 F4 .lobytes 244 +0001FBr 1 F5 .lobytes 245 +0001FCr 1 F6 .lobytes 246 +0001FDr 1 F7 .lobytes 247 +0001FEr 1 F8 .lobytes 248 +0001FFr 1 F9 .lobytes 249 +000200r 1 FA .lobytes 250 +000201r 1 FB .lobytes 251 +000202r 1 FC .lobytes 252 +000203r 1 FD .lobytes 253 +000204r 1 FE .lobytes 254 +000205r 1 FF .lobytes 255 +000206r 1 00 .lobytes 256 +000207r 1 01 .lobytes 257 +000208r 1 02 .lobytes 258 +000209r 1 03 .lobytes 259 +00020Ar 1 D2 .lobytes 4050 +00020Br 1 D3 .lobytes 4051 +00020Cr 1 D4 .lobytes 4052 +00020Dr 1 D5 .lobytes 4053 +00020Er 1 D6 .lobytes 4054 +00020Fr 1 D7 .lobytes 4055 +000210r 1 D8 .lobytes 4056 +000211r 1 D9 .lobytes 4057 +000212r 1 DA .lobytes 4058 +000213r 1 DB .lobytes 4059 +000214r 1 DC .lobytes 4060 +000215r 1 DD .lobytes 4061 +000216r 1 DE .lobytes 4062 +000217r 1 DF .lobytes 4063 +000218r 1 E0 .lobytes 4064 +000219r 1 E1 .lobytes 4065 +00021Ar 1 E2 .lobytes 4066 +00021Br 1 E3 .lobytes 4067 +00021Cr 1 E4 .lobytes 4068 +00021Dr 1 E5 .lobytes 4069 +00021Er 1 E6 .lobytes 4070 +00021Fr 1 E7 .lobytes 4071 +000220r 1 E8 .lobytes 4072 +000221r 1 E9 .lobytes 4073 +000222r 1 EA .lobytes 4074 +000223r 1 EB .lobytes 4075 +000224r 1 EC .lobytes 4076 +000225r 1 ED .lobytes 4077 +000226r 1 EE .lobytes 4078 +000227r 1 EF .lobytes 4079 +000228r 1 F0 .lobytes 4080 +000229r 1 F1 .lobytes 4081 +00022Ar 1 F2 .lobytes 4082 +00022Br 1 F3 .lobytes 4083 +00022Cr 1 F4 .lobytes 4084 +00022Dr 1 F5 .lobytes 4085 +00022Er 1 F6 .lobytes 4086 +00022Fr 1 F7 .lobytes 4087 +000230r 1 F8 .lobytes 4088 +000231r 1 F9 .lobytes 4089 +000232r 1 FA .lobytes 4090 +000233r 1 FB .lobytes 4091 +000234r 1 FC .lobytes 4092 +000235r 1 FD .lobytes 4093 +000236r 1 FE .lobytes 4094 +000237r 1 FF .lobytes 4095 +000238r 1 00 .lobytes 4096 +000239r 1 01 .lobytes 4097 +00023Ar 1 02 .lobytes 4098 +00023Br 1 03 .lobytes 4099 +00023Cr 1 04 .lobytes 4100 +00023Dr 1 05 .lobytes 4101 +00023Er 1 06 .lobytes 4102 +00023Fr 1 07 .lobytes 4103 +000240r 1 08 .lobytes 4104 +000241r 1 F0 .lobytes 32752 +000242r 1 F1 .lobytes 32753 +000243r 1 F2 .lobytes 32754 +000244r 1 F3 .lobytes 32755 +000245r 1 F4 .lobytes 32756 +000246r 1 F5 .lobytes 32757 +000247r 1 F6 .lobytes 32758 +000248r 1 F7 .lobytes 32759 +000249r 1 F8 .lobytes 32760 +00024Ar 1 F9 .lobytes 32761 +00024Br 1 FA .lobytes 32762 +00024Cr 1 FB .lobytes 32763 +00024Dr 1 FC .lobytes 32764 +00024Er 1 FD .lobytes 32765 +00024Fr 1 FE .lobytes 32766 +000250r 1 FF .lobytes 32767 +000251r 1 00 .lobytes 32768 +000252r 1 01 .lobytes 32769 +000253r 1 02 .lobytes 32770 +000254r 1 03 .lobytes 32771 +000255r 1 04 .lobytes 32772 +000256r 1 05 .lobytes 32773 +000257r 1 06 .lobytes 32774 +000258r 1 07 .lobytes 32775 +000259r 1 08 .lobytes 32776 +00025Ar 1 09 .lobytes 32777 +00025Br 1 0A .lobytes 32778 +00025Cr 1 0B .lobytes 32779 +00025Dr 1 E1 .lobytes 40929 +00025Er 1 E2 .lobytes 40930 +00025Fr 1 E3 .lobytes 40931 +000260r 1 E4 .lobytes 40932 +000261r 1 E5 .lobytes 40933 +000262r 1 E6 .lobytes 40934 +000263r 1 E7 .lobytes 40935 +000264r 1 E8 .lobytes 40936 +000265r 1 E9 .lobytes 40937 +000266r 1 EA .lobytes 40938 +000267r 1 EB .lobytes 40939 +000268r 1 EC .lobytes 40940 +000269r 1 ED .lobytes 40941 +00026Ar 1 EE .lobytes 40942 +00026Br 1 EF .lobytes 40943 +00026Cr 1 F0 .lobytes 40944 +00026Dr 1 F1 .lobytes 40945 +00026Er 1 F2 .lobytes 40946 +00026Fr 1 F3 .lobytes 40947 +000270r 1 F4 .lobytes 40948 +000271r 1 F5 .lobytes 40949 +000272r 1 F6 .lobytes 40950 +000273r 1 F7 .lobytes 40951 +000274r 1 F8 .lobytes 40952 +000275r 1 F9 .lobytes 40953 +000276r 1 FA .lobytes 40954 +000277r 1 FB .lobytes 40955 +000278r 1 FC .lobytes 40956 +000279r 1 FD .lobytes 40957 +00027Ar 1 FE .lobytes 40958 +00027Br 1 FF .lobytes 40959 +00027Cr 1 00 .lobytes 40960 +00027Dr 1 01 .lobytes 40961 +00027Er 1 02 .lobytes 40962 +00027Fr 1 03 .lobytes 40963 +000280r 1 04 .lobytes 40964 +000281r 1 05 .lobytes 40965 +000282r 1 06 .lobytes 40966 +000283r 1 07 .lobytes 40967 +000284r 1 08 .lobytes 40968 +000285r 1 09 .lobytes 40969 +000286r 1 0A .lobytes 40970 +000287r 1 0B .lobytes 40971 +000288r 1 0C .lobytes 40972 +000289r 1 0D .lobytes 40973 +00028Ar 1 0E .lobytes 40974 +00028Br 1 0F .lobytes 40975 +00028Cr 1 E1 .lobytes 45025 +00028Dr 1 E2 .lobytes 45026 +00028Er 1 E3 .lobytes 45027 +00028Fr 1 E4 .lobytes 45028 +000290r 1 E5 .lobytes 45029 +000291r 1 E6 .lobytes 45030 +000292r 1 E7 .lobytes 45031 +000293r 1 E8 .lobytes 45032 +000294r 1 E9 .lobytes 45033 +000295r 1 EA .lobytes 45034 +000296r 1 EB .lobytes 45035 +000297r 1 EC .lobytes 45036 +000298r 1 ED .lobytes 45037 +000299r 1 EE .lobytes 45038 +00029Ar 1 EF .lobytes 45039 +00029Br 1 F0 .lobytes 45040 +00029Cr 1 F1 .lobytes 45041 +00029Dr 1 F2 .lobytes 45042 +00029Er 1 F3 .lobytes 45043 +00029Fr 1 F4 .lobytes 45044 +0002A0r 1 F5 .lobytes 45045 +0002A1r 1 F6 .lobytes 45046 +0002A2r 1 F7 .lobytes 45047 +0002A3r 1 F8 .lobytes 45048 +0002A4r 1 F9 .lobytes 45049 +0002A5r 1 FA .lobytes 45050 +0002A6r 1 FB .lobytes 45051 +0002A7r 1 FC .lobytes 45052 +0002A8r 1 FD .lobytes 45053 +0002A9r 1 FE .lobytes 45054 +0002AAr 1 FF .lobytes 45055 +0002ABr 1 00 .lobytes 45056 +0002ACr 1 01 .lobytes 45057 +0002ADr 1 02 .lobytes 45058 +0002AEr 1 03 .lobytes 45059 +0002AFr 1 04 .lobytes 45060 +0002B0r 1 05 .lobytes 45061 +0002B1r 1 06 .lobytes 45062 +0002B2r 1 07 .lobytes 45063 +0002B3r 1 08 .lobytes 45064 +0002B4r 1 09 .lobytes 45065 +0002B5r 1 0A .lobytes 45066 +0002B6r 1 0B .lobytes 45067 +0002B7r 1 0C .lobytes 45068 +0002B8r 1 0D .lobytes 45069 +0002B9r 1 0E .lobytes 45070 +0002BAr 1 0F .lobytes 45071 +0002BBr 1 E1 .lobytes 49121 +0002BCr 1 E2 .lobytes 49122 +0002BDr 1 E3 .lobytes 49123 +0002BEr 1 E4 .lobytes 49124 +0002BFr 1 E5 .lobytes 49125 +0002C0r 1 E6 .lobytes 49126 +0002C1r 1 E7 .lobytes 49127 +0002C2r 1 E8 .lobytes 49128 +0002C3r 1 E9 .lobytes 49129 +0002C4r 1 EA .lobytes 49130 +0002C5r 1 EB .lobytes 49131 +0002C6r 1 EC .lobytes 49132 +0002C7r 1 ED .lobytes 49133 +0002C8r 1 EE .lobytes 49134 +0002C9r 1 EF .lobytes 49135 +0002CAr 1 F0 .lobytes 49136 +0002CBr 1 F1 .lobytes 49137 +0002CCr 1 F2 .lobytes 49138 +0002CDr 1 F3 .lobytes 49139 +0002CEr 1 F4 .lobytes 49140 +0002CFr 1 F5 .lobytes 49141 +0002D0r 1 F6 .lobytes 49142 +0002D1r 1 F7 .lobytes 49143 +0002D2r 1 F8 .lobytes 49144 +0002D3r 1 F9 .lobytes 49145 +0002D4r 1 FA .lobytes 49146 +0002D5r 1 FB .lobytes 49147 +0002D6r 1 FC .lobytes 49148 +0002D7r 1 FD .lobytes 49149 +0002D8r 1 FE .lobytes 49150 +0002D9r 1 FF .lobytes 49151 +0002DAr 1 00 .lobytes 49152 +0002DBr 1 01 .lobytes 49153 +0002DCr 1 02 .lobytes 49154 +0002DDr 1 03 .lobytes 49155 +0002DEr 1 04 .lobytes 49156 +0002DFr 1 05 .lobytes 49157 +0002E0r 1 06 .lobytes 49158 +0002E1r 1 07 .lobytes 49159 +0002E2r 1 08 .lobytes 49160 +0002E3r 1 09 .lobytes 49161 +0002E4r 1 0A .lobytes 49162 +0002E5r 1 0B .lobytes 49163 +0002E6r 1 0C .lobytes 49164 +0002E7r 1 0D .lobytes 49165 +0002E8r 1 0E .lobytes 49166 +0002E9r 1 0F .lobytes 49167 +0002EAr 1 E1 .lobytes 53217 +0002EBr 1 E2 .lobytes 53218 +0002ECr 1 E3 .lobytes 53219 +0002EDr 1 E4 .lobytes 53220 +0002EEr 1 E5 .lobytes 53221 +0002EFr 1 E6 .lobytes 53222 +0002F0r 1 E7 .lobytes 53223 +0002F1r 1 E8 .lobytes 53224 +0002F2r 1 E9 .lobytes 53225 +0002F3r 1 EA .lobytes 53226 +0002F4r 1 EB .lobytes 53227 +0002F5r 1 EC .lobytes 53228 +0002F6r 1 ED .lobytes 53229 +0002F7r 1 EE .lobytes 53230 +0002F8r 1 EF .lobytes 53231 +0002F9r 1 F0 .lobytes 53232 +0002FAr 1 F1 .lobytes 53233 +0002FBr 1 F2 .lobytes 53234 +0002FCr 1 F3 .lobytes 53235 +0002FDr 1 F4 .lobytes 53236 +0002FEr 1 F5 .lobytes 53237 +0002FFr 1 F6 .lobytes 53238 +000300r 1 F7 .lobytes 53239 +000301r 1 F8 .lobytes 53240 +000302r 1 F9 .lobytes 53241 +000303r 1 FA .lobytes 53242 +000304r 1 FB .lobytes 53243 +000305r 1 FC .lobytes 53244 +000306r 1 FD .lobytes 53245 +000307r 1 FE .lobytes 53246 +000308r 1 FF .lobytes 53247 +000309r 1 00 .lobytes 53248 +00030Ar 1 01 .lobytes 53249 +00030Br 1 02 .lobytes 53250 +00030Cr 1 03 .lobytes 53251 +00030Dr 1 04 .lobytes 53252 +00030Er 1 05 .lobytes 53253 +00030Fr 1 06 .lobytes 53254 +000310r 1 07 .lobytes 53255 +000311r 1 08 .lobytes 53256 +000312r 1 09 .lobytes 53257 +000313r 1 0A .lobytes 53258 +000314r 1 0B .lobytes 53259 +000315r 1 0C .lobytes 53260 +000316r 1 0D .lobytes 53261 +000317r 1 0E .lobytes 53262 +000318r 1 0F .lobytes 53263 +000319r 1 E1 .lobytes 57313 +00031Ar 1 E2 .lobytes 57314 +00031Br 1 E3 .lobytes 57315 +00031Cr 1 E4 .lobytes 57316 +00031Dr 1 E5 .lobytes 57317 +00031Er 1 E6 .lobytes 57318 +00031Fr 1 E7 .lobytes 57319 +000320r 1 E8 .lobytes 57320 +000321r 1 E9 .lobytes 57321 +000322r 1 EA .lobytes 57322 +000323r 1 EB .lobytes 57323 +000324r 1 EC .lobytes 57324 +000325r 1 ED .lobytes 57325 +000326r 1 EE .lobytes 57326 +000327r 1 EF .lobytes 57327 +000328r 1 F0 .lobytes 57328 +000329r 1 F1 .lobytes 57329 +00032Ar 1 F2 .lobytes 57330 +00032Br 1 F3 .lobytes 57331 +00032Cr 1 F4 .lobytes 57332 +00032Dr 1 F5 .lobytes 57333 +00032Er 1 F6 .lobytes 57334 +00032Fr 1 F7 .lobytes 57335 +000330r 1 F8 .lobytes 57336 +000331r 1 F9 .lobytes 57337 +000332r 1 FA .lobytes 57338 +000333r 1 FB .lobytes 57339 +000334r 1 FC .lobytes 57340 +000335r 1 FD .lobytes 57341 +000336r 1 FE .lobytes 57342 +000337r 1 FF .lobytes 57343 +000338r 1 00 .lobytes 57344 +000339r 1 01 .lobytes 57345 +00033Ar 1 02 .lobytes 57346 +00033Br 1 03 .lobytes 57347 +00033Cr 1 04 .lobytes 57348 +00033Dr 1 05 .lobytes 57349 +00033Er 1 06 .lobytes 57350 +00033Fr 1 07 .lobytes 57351 +000340r 1 08 .lobytes 57352 +000341r 1 09 .lobytes 57353 +000342r 1 0A .lobytes 57354 +000343r 1 0B .lobytes 57355 +000344r 1 0C .lobytes 57356 +000345r 1 0D .lobytes 57357 +000346r 1 0E .lobytes 57358 +000347r 1 0F .lobytes 57359 +000348r 1 E1 .lobytes 61409 +000349r 1 E2 .lobytes 61410 +00034Ar 1 E3 .lobytes 61411 +00034Br 1 E4 .lobytes 61412 +00034Cr 1 E5 .lobytes 61413 +00034Dr 1 E6 .lobytes 61414 +00034Er 1 E7 .lobytes 61415 +00034Fr 1 E8 .lobytes 61416 +000350r 1 E9 .lobytes 61417 +000351r 1 EA .lobytes 61418 +000352r 1 EB .lobytes 61419 +000353r 1 EC .lobytes 61420 +000354r 1 ED .lobytes 61421 +000355r 1 EE .lobytes 61422 +000356r 1 EF .lobytes 61423 +000357r 1 F0 .lobytes 61424 +000358r 1 F1 .lobytes 61425 +000359r 1 F2 .lobytes 61426 +00035Ar 1 F3 .lobytes 61427 +00035Br 1 F4 .lobytes 61428 +00035Cr 1 F5 .lobytes 61429 +00035Dr 1 F6 .lobytes 61430 +00035Er 1 F7 .lobytes 61431 +00035Fr 1 F8 .lobytes 61432 +000360r 1 F9 .lobytes 61433 +000361r 1 FA .lobytes 61434 +000362r 1 FB .lobytes 61435 +000363r 1 FC .lobytes 61436 +000364r 1 FD .lobytes 61437 +000365r 1 FE .lobytes 61438 +000366r 1 FF .lobytes 61439 +000367r 1 00 .lobytes 61440 +000368r 1 01 .lobytes 61441 +000369r 1 02 .lobytes 61442 +00036Ar 1 03 .lobytes 61443 +00036Br 1 04 .lobytes 61444 +00036Cr 1 05 .lobytes 61445 +00036Dr 1 06 .lobytes 61446 +00036Er 1 07 .lobytes 61447 +00036Fr 1 08 .lobytes 61448 +000370r 1 09 .lobytes 61449 +000371r 1 0A .lobytes 61450 +000372r 1 0B .lobytes 61451 +000373r 1 0C .lobytes 61452 +000374r 1 0D .lobytes 61453 +000375r 1 0E .lobytes 61454 +000376r 1 0F .lobytes 61455 +000377r 1 E1 .lobytes 65505 +000378r 1 E2 .lobytes 65506 +000379r 1 E3 .lobytes 65507 +00037Ar 1 E4 .lobytes 65508 +00037Br 1 E5 .lobytes 65509 +00037Cr 1 E6 .lobytes 65510 +00037Dr 1 E7 .lobytes 65511 +00037Er 1 E8 .lobytes 65512 +00037Fr 1 E9 .lobytes 65513 +000380r 1 EA .lobytes 65514 +000381r 1 EB .lobytes 65515 +000382r 1 EC .lobytes 65516 +000383r 1 ED .lobytes 65517 +000384r 1 EE .lobytes 65518 +000385r 1 EF .lobytes 65519 +000386r 1 F0 .lobytes 65520 +000387r 1 F1 .lobytes 65521 +000388r 1 F2 .lobytes 65522 +000389r 1 F3 .lobytes 65523 +00038Ar 1 F4 .lobytes 65524 +00038Br 1 F5 .lobytes 65525 +00038Cr 1 F6 .lobytes 65526 +00038Dr 1 F7 .lobytes 65527 +00038Er 1 F8 .lobytes 65528 +00038Fr 1 F9 .lobytes 65529 +000390r 1 FA .lobytes 65530 +000391r 1 FB .lobytes 65531 +000392r 1 FC .lobytes 65532 +000393r 1 FD .lobytes 65533 +000394r 1 FE .lobytes 65534 +000395r 1 FF .lobytes 65535 +000396r 1 +000396r 1 ; hex values +000396r 1 00 .lobytes $0 +000397r 1 01 .lobytes $1 +000398r 1 02 .lobytes $2 +000399r 1 03 .lobytes $3 +00039Ar 1 04 .lobytes $4 +00039Br 1 05 .lobytes $5 +00039Cr 1 06 .lobytes $6 +00039Dr 1 07 .lobytes $7 +00039Er 1 08 .lobytes $8 +00039Fr 1 09 .lobytes $9 +0003A0r 1 0A .lobytes $a +0003A1r 1 0B .lobytes $b +0003A2r 1 0C .lobytes $c +0003A3r 1 0D .lobytes $d +0003A4r 1 0E .lobytes $e +0003A5r 1 0F .lobytes $f +0003A6r 1 10 .lobytes $10 +0003A7r 1 11 .lobytes $11 +0003A8r 1 12 .lobytes $12 +0003A9r 1 13 .lobytes $13 +0003AAr 1 70 .lobytes $70 +0003ABr 1 71 .lobytes $71 +0003ACr 1 72 .lobytes $72 +0003ADr 1 73 .lobytes $73 +0003AEr 1 74 .lobytes $74 +0003AFr 1 75 .lobytes $75 +0003B0r 1 76 .lobytes $76 +0003B1r 1 77 .lobytes $77 +0003B2r 1 78 .lobytes $78 +0003B3r 1 79 .lobytes $79 +0003B4r 1 7A .lobytes $7a +0003B5r 1 7B .lobytes $7b +0003B6r 1 7C .lobytes $7c +0003B7r 1 7D .lobytes $7d +0003B8r 1 7E .lobytes $7e +0003B9r 1 7F .lobytes $7f +0003BAr 1 80 .lobytes $80 +0003BBr 1 81 .lobytes $81 +0003BCr 1 82 .lobytes $82 +0003BDr 1 83 .lobytes $83 +0003BEr 1 84 .lobytes $84 +0003BFr 1 85 .lobytes $85 +0003C0r 1 86 .lobytes $86 +0003C1r 1 F0 .lobytes $f0 +0003C2r 1 F1 .lobytes $f1 +0003C3r 1 F2 .lobytes $f2 +0003C4r 1 F3 .lobytes $f3 +0003C5r 1 F4 .lobytes $f4 +0003C6r 1 F5 .lobytes $f5 +0003C7r 1 F6 .lobytes $f6 +0003C8r 1 F7 .lobytes $f7 +0003C9r 1 F8 .lobytes $f8 +0003CAr 1 F9 .lobytes $f9 +0003CBr 1 FA .lobytes $fa +0003CCr 1 FB .lobytes $fb +0003CDr 1 FC .lobytes $fc +0003CEr 1 FD .lobytes $fd +0003CFr 1 FE .lobytes $fe +0003D0r 1 FF .lobytes $ff +0003D1r 1 00 .lobytes $100 +0003D2r 1 01 .lobytes $101 +0003D3r 1 02 .lobytes $102 +0003D4r 1 03 .lobytes $103 +0003D5r 1 D2 .lobytes $fd2 +0003D6r 1 D3 .lobytes $fd3 +0003D7r 1 D4 .lobytes $fd4 +0003D8r 1 D5 .lobytes $fd5 +0003D9r 1 D6 .lobytes $fd6 +0003DAr 1 D7 .lobytes $fd7 +0003DBr 1 D8 .lobytes $fd8 +0003DCr 1 D9 .lobytes $fd9 +0003DDr 1 DA .lobytes $fda +0003DEr 1 DB .lobytes $fdb +0003DFr 1 DC .lobytes $fdc +0003E0r 1 DD .lobytes $fdd +0003E1r 1 DE .lobytes $fde +0003E2r 1 DF .lobytes $fdf +0003E3r 1 E0 .lobytes $fe0 +0003E4r 1 E1 .lobytes $fe1 +0003E5r 1 E2 .lobytes $fe2 +0003E6r 1 E3 .lobytes $fe3 +0003E7r 1 E4 .lobytes $fe4 +0003E8r 1 E5 .lobytes $fe5 +0003E9r 1 E6 .lobytes $fe6 +0003EAr 1 E7 .lobytes $fe7 +0003EBr 1 E8 .lobytes $fe8 +0003ECr 1 E9 .lobytes $fe9 +0003EDr 1 EA .lobytes $fea +0003EEr 1 EB .lobytes $feb +0003EFr 1 EC .lobytes $fec +0003F0r 1 ED .lobytes $fed +0003F1r 1 EE .lobytes $fee +0003F2r 1 EF .lobytes $fef +0003F3r 1 F0 .lobytes $ff0 +0003F4r 1 F1 .lobytes $ff1 +0003F5r 1 F2 .lobytes $ff2 +0003F6r 1 F3 .lobytes $ff3 +0003F7r 1 F4 .lobytes $ff4 +0003F8r 1 F5 .lobytes $ff5 +0003F9r 1 F6 .lobytes $ff6 +0003FAr 1 F7 .lobytes $ff7 +0003FBr 1 F8 .lobytes $ff8 +0003FCr 1 F9 .lobytes $ff9 +0003FDr 1 FA .lobytes $ffa +0003FEr 1 FB .lobytes $ffb +0003FFr 1 FC .lobytes $ffc +000400r 1 FD .lobytes $ffd +000401r 1 FE .lobytes $ffe +000402r 1 FF .lobytes $fff +000403r 1 00 .lobytes $1000 +000404r 1 01 .lobytes $1001 +000405r 1 02 .lobytes $1002 +000406r 1 03 .lobytes $1003 +000407r 1 04 .lobytes $1004 +000408r 1 05 .lobytes $1005 +000409r 1 06 .lobytes $1006 +00040Ar 1 07 .lobytes $1007 +00040Br 1 08 .lobytes $1008 +00040Cr 1 F0 .lobytes $7ff0 +00040Dr 1 F1 .lobytes $7ff1 +00040Er 1 F2 .lobytes $7ff2 +00040Fr 1 F3 .lobytes $7ff3 +000410r 1 F4 .lobytes $7ff4 +000411r 1 F5 .lobytes $7ff5 +000412r 1 F6 .lobytes $7ff6 +000413r 1 F7 .lobytes $7ff7 +000414r 1 F8 .lobytes $7ff8 +000415r 1 F9 .lobytes $7ff9 +000416r 1 FA .lobytes $7ffa +000417r 1 FB .lobytes $7ffb +000418r 1 FC .lobytes $7ffc +000419r 1 FD .lobytes $7ffd +00041Ar 1 FE .lobytes $7ffe +00041Br 1 FF .lobytes $7fff +00041Cr 1 00 .lobytes $8000 +00041Dr 1 01 .lobytes $8001 +00041Er 1 02 .lobytes $8002 +00041Fr 1 03 .lobytes $8003 +000420r 1 04 .lobytes $8004 +000421r 1 05 .lobytes $8005 +000422r 1 06 .lobytes $8006 +000423r 1 07 .lobytes $8007 +000424r 1 08 .lobytes $8008 +000425r 1 09 .lobytes $8009 +000426r 1 0A .lobytes $800a +000427r 1 0B .lobytes $800b +000428r 1 E1 .lobytes $9fe1 +000429r 1 E2 .lobytes $9fe2 +00042Ar 1 E3 .lobytes $9fe3 +00042Br 1 E4 .lobytes $9fe4 +00042Cr 1 E5 .lobytes $9fe5 +00042Dr 1 E6 .lobytes $9fe6 +00042Er 1 E7 .lobytes $9fe7 +00042Fr 1 E8 .lobytes $9fe8 +000430r 1 E9 .lobytes $9fe9 +000431r 1 EA .lobytes $9fea +000432r 1 EB .lobytes $9feb +000433r 1 EC .lobytes $9fec +000434r 1 ED .lobytes $9fed +000435r 1 EE .lobytes $9fee +000436r 1 EF .lobytes $9fef +000437r 1 F0 .lobytes $9ff0 +000438r 1 F1 .lobytes $9ff1 +000439r 1 F2 .lobytes $9ff2 +00043Ar 1 F3 .lobytes $9ff3 +00043Br 1 F4 .lobytes $9ff4 +00043Cr 1 F5 .lobytes $9ff5 +00043Dr 1 F6 .lobytes $9ff6 +00043Er 1 F7 .lobytes $9ff7 +00043Fr 1 F8 .lobytes $9ff8 +000440r 1 F9 .lobytes $9ff9 +000441r 1 FA .lobytes $9ffa +000442r 1 FB .lobytes $9ffb +000443r 1 FC .lobytes $9ffc +000444r 1 FD .lobytes $9ffd +000445r 1 FE .lobytes $9ffe +000446r 1 FF .lobytes $9fff +000447r 1 00 .lobytes $a000 +000448r 1 01 .lobytes $a001 +000449r 1 02 .lobytes $a002 +00044Ar 1 03 .lobytes $a003 +00044Br 1 04 .lobytes $a004 +00044Cr 1 05 .lobytes $a005 +00044Dr 1 06 .lobytes $a006 +00044Er 1 07 .lobytes $a007 +00044Fr 1 08 .lobytes $a008 +000450r 1 09 .lobytes $a009 +000451r 1 0A .lobytes $a00a +000452r 1 0B .lobytes $a00b +000453r 1 0C .lobytes $a00c +000454r 1 0D .lobytes $a00d +000455r 1 0E .lobytes $a00e +000456r 1 0F .lobytes $a00f +000457r 1 E1 .lobytes $afe1 +000458r 1 E2 .lobytes $afe2 +000459r 1 E3 .lobytes $afe3 +00045Ar 1 E4 .lobytes $afe4 +00045Br 1 E5 .lobytes $afe5 +00045Cr 1 E6 .lobytes $afe6 +00045Dr 1 E7 .lobytes $afe7 +00045Er 1 E8 .lobytes $afe8 +00045Fr 1 E9 .lobytes $afe9 +000460r 1 EA .lobytes $afea +000461r 1 EB .lobytes $afeb +000462r 1 EC .lobytes $afec +000463r 1 ED .lobytes $afed +000464r 1 EE .lobytes $afee +000465r 1 EF .lobytes $afef +000466r 1 F0 .lobytes $aff0 +000467r 1 F1 .lobytes $aff1 +000468r 1 F2 .lobytes $aff2 +000469r 1 F3 .lobytes $aff3 +00046Ar 1 F4 .lobytes $aff4 +00046Br 1 F5 .lobytes $aff5 +00046Cr 1 F6 .lobytes $aff6 +00046Dr 1 F7 .lobytes $aff7 +00046Er 1 F8 .lobytes $aff8 +00046Fr 1 F9 .lobytes $aff9 +000470r 1 FA .lobytes $affa +000471r 1 FB .lobytes $affb +000472r 1 FC .lobytes $affc +000473r 1 FD .lobytes $affd +000474r 1 FE .lobytes $affe +000475r 1 FF .lobytes $afff +000476r 1 00 .lobytes $b000 +000477r 1 01 .lobytes $b001 +000478r 1 02 .lobytes $b002 +000479r 1 03 .lobytes $b003 +00047Ar 1 04 .lobytes $b004 +00047Br 1 05 .lobytes $b005 +00047Cr 1 06 .lobytes $b006 +00047Dr 1 07 .lobytes $b007 +00047Er 1 08 .lobytes $b008 +00047Fr 1 09 .lobytes $b009 +000480r 1 0A .lobytes $b00a +000481r 1 0B .lobytes $b00b +000482r 1 0C .lobytes $b00c +000483r 1 0D .lobytes $b00d +000484r 1 0E .lobytes $b00e +000485r 1 0F .lobytes $b00f +000486r 1 E1 .lobytes $bfe1 +000487r 1 E2 .lobytes $bfe2 +000488r 1 E3 .lobytes $bfe3 +000489r 1 E4 .lobytes $bfe4 +00048Ar 1 E5 .lobytes $bfe5 +00048Br 1 E6 .lobytes $bfe6 +00048Cr 1 E7 .lobytes $bfe7 +00048Dr 1 E8 .lobytes $bfe8 +00048Er 1 E9 .lobytes $bfe9 +00048Fr 1 EA .lobytes $bfea +000490r 1 EB .lobytes $bfeb +000491r 1 EC .lobytes $bfec +000492r 1 ED .lobytes $bfed +000493r 1 EE .lobytes $bfee +000494r 1 EF .lobytes $bfef +000495r 1 F0 .lobytes $bff0 +000496r 1 F1 .lobytes $bff1 +000497r 1 F2 .lobytes $bff2 +000498r 1 F3 .lobytes $bff3 +000499r 1 F4 .lobytes $bff4 +00049Ar 1 F5 .lobytes $bff5 +00049Br 1 F6 .lobytes $bff6 +00049Cr 1 F7 .lobytes $bff7 +00049Dr 1 F8 .lobytes $bff8 +00049Er 1 F9 .lobytes $bff9 +00049Fr 1 FA .lobytes $bffa +0004A0r 1 FB .lobytes $bffb +0004A1r 1 FC .lobytes $bffc +0004A2r 1 FD .lobytes $bffd +0004A3r 1 FE .lobytes $bffe +0004A4r 1 FF .lobytes $bfff +0004A5r 1 00 .lobytes $c000 +0004A6r 1 01 .lobytes $c001 +0004A7r 1 02 .lobytes $c002 +0004A8r 1 03 .lobytes $c003 +0004A9r 1 04 .lobytes $c004 +0004AAr 1 05 .lobytes $c005 +0004ABr 1 06 .lobytes $c006 +0004ACr 1 07 .lobytes $c007 +0004ADr 1 08 .lobytes $c008 +0004AEr 1 09 .lobytes $c009 +0004AFr 1 0A .lobytes $c00a +0004B0r 1 0B .lobytes $c00b +0004B1r 1 0C .lobytes $c00c +0004B2r 1 0D .lobytes $c00d +0004B3r 1 0E .lobytes $c00e +0004B4r 1 0F .lobytes $c00f +0004B5r 1 E1 .lobytes $cfe1 +0004B6r 1 E2 .lobytes $cfe2 +0004B7r 1 E3 .lobytes $cfe3 +0004B8r 1 E4 .lobytes $cfe4 +0004B9r 1 E5 .lobytes $cfe5 +0004BAr 1 E6 .lobytes $cfe6 +0004BBr 1 E7 .lobytes $cfe7 +0004BCr 1 E8 .lobytes $cfe8 +0004BDr 1 E9 .lobytes $cfe9 +0004BEr 1 EA .lobytes $cfea +0004BFr 1 EB .lobytes $cfeb +0004C0r 1 EC .lobytes $cfec +0004C1r 1 ED .lobytes $cfed +0004C2r 1 EE .lobytes $cfee +0004C3r 1 EF .lobytes $cfef +0004C4r 1 F0 .lobytes $cff0 +0004C5r 1 F1 .lobytes $cff1 +0004C6r 1 F2 .lobytes $cff2 +0004C7r 1 F3 .lobytes $cff3 +0004C8r 1 F4 .lobytes $cff4 +0004C9r 1 F5 .lobytes $cff5 +0004CAr 1 F6 .lobytes $cff6 +0004CBr 1 F7 .lobytes $cff7 +0004CCr 1 F8 .lobytes $cff8 +0004CDr 1 F9 .lobytes $cff9 +0004CEr 1 FA .lobytes $cffa +0004CFr 1 FB .lobytes $cffb +0004D0r 1 FC .lobytes $cffc +0004D1r 1 FD .lobytes $cffd +0004D2r 1 FE .lobytes $cffe +0004D3r 1 FF .lobytes $cfff +0004D4r 1 00 .lobytes $d000 +0004D5r 1 01 .lobytes $d001 +0004D6r 1 02 .lobytes $d002 +0004D7r 1 03 .lobytes $d003 +0004D8r 1 04 .lobytes $d004 +0004D9r 1 05 .lobytes $d005 +0004DAr 1 06 .lobytes $d006 +0004DBr 1 07 .lobytes $d007 +0004DCr 1 08 .lobytes $d008 +0004DDr 1 09 .lobytes $d009 +0004DEr 1 0A .lobytes $d00a +0004DFr 1 0B .lobytes $d00b +0004E0r 1 0C .lobytes $d00c +0004E1r 1 0D .lobytes $d00d +0004E2r 1 0E .lobytes $d00e +0004E3r 1 0F .lobytes $d00f +0004E4r 1 E1 .lobytes $dfe1 +0004E5r 1 E2 .lobytes $dfe2 +0004E6r 1 E3 .lobytes $dfe3 +0004E7r 1 E4 .lobytes $dfe4 +0004E8r 1 E5 .lobytes $dfe5 +0004E9r 1 E6 .lobytes $dfe6 +0004EAr 1 E7 .lobytes $dfe7 +0004EBr 1 E8 .lobytes $dfe8 +0004ECr 1 E9 .lobytes $dfe9 +0004EDr 1 EA .lobytes $dfea +0004EEr 1 EB .lobytes $dfeb +0004EFr 1 EC .lobytes $dfec +0004F0r 1 ED .lobytes $dfed +0004F1r 1 EE .lobytes $dfee +0004F2r 1 EF .lobytes $dfef +0004F3r 1 F0 .lobytes $dff0 +0004F4r 1 F1 .lobytes $dff1 +0004F5r 1 F2 .lobytes $dff2 +0004F6r 1 F3 .lobytes $dff3 +0004F7r 1 F4 .lobytes $dff4 +0004F8r 1 F5 .lobytes $dff5 +0004F9r 1 F6 .lobytes $dff6 +0004FAr 1 F7 .lobytes $dff7 +0004FBr 1 F8 .lobytes $dff8 +0004FCr 1 F9 .lobytes $dff9 +0004FDr 1 FA .lobytes $dffa +0004FEr 1 FB .lobytes $dffb +0004FFr 1 FC .lobytes $dffc +000500r 1 FD .lobytes $dffd +000501r 1 FE .lobytes $dffe +000502r 1 FF .lobytes $dfff +000503r 1 00 .lobytes $e000 +000504r 1 01 .lobytes $e001 +000505r 1 02 .lobytes $e002 +000506r 1 03 .lobytes $e003 +000507r 1 04 .lobytes $e004 +000508r 1 05 .lobytes $e005 +000509r 1 06 .lobytes $e006 +00050Ar 1 07 .lobytes $e007 +00050Br 1 08 .lobytes $e008 +00050Cr 1 09 .lobytes $e009 +00050Dr 1 0A .lobytes $e00a +00050Er 1 0B .lobytes $e00b +00050Fr 1 0C .lobytes $e00c +000510r 1 0D .lobytes $e00d +000511r 1 0E .lobytes $e00e +000512r 1 0F .lobytes $e00f +000513r 1 E1 .lobytes $efe1 +000514r 1 E2 .lobytes $efe2 +000515r 1 E3 .lobytes $efe3 +000516r 1 E4 .lobytes $efe4 +000517r 1 E5 .lobytes $efe5 +000518r 1 E6 .lobytes $efe6 +000519r 1 E7 .lobytes $efe7 +00051Ar 1 E8 .lobytes $efe8 +00051Br 1 E9 .lobytes $efe9 +00051Cr 1 EA .lobytes $efea +00051Dr 1 EB .lobytes $efeb +00051Er 1 EC .lobytes $efec +00051Fr 1 ED .lobytes $efed +000520r 1 EE .lobytes $efee +000521r 1 EF .lobytes $efef +000522r 1 F0 .lobytes $eff0 +000523r 1 F1 .lobytes $eff1 +000524r 1 F2 .lobytes $eff2 +000525r 1 F3 .lobytes $eff3 +000526r 1 F4 .lobytes $eff4 +000527r 1 F5 .lobytes $eff5 +000528r 1 F6 .lobytes $eff6 +000529r 1 F7 .lobytes $eff7 +00052Ar 1 F8 .lobytes $eff8 +00052Br 1 F9 .lobytes $eff9 +00052Cr 1 FA .lobytes $effa +00052Dr 1 FB .lobytes $effb +00052Er 1 FC .lobytes $effc +00052Fr 1 FD .lobytes $effd +000530r 1 FE .lobytes $effe +000531r 1 FF .lobytes $efff +000532r 1 00 .lobytes $f000 +000533r 1 01 .lobytes $f001 +000534r 1 02 .lobytes $f002 +000535r 1 03 .lobytes $f003 +000536r 1 04 .lobytes $f004 +000537r 1 05 .lobytes $f005 +000538r 1 06 .lobytes $f006 +000539r 1 07 .lobytes $f007 +00053Ar 1 08 .lobytes $f008 +00053Br 1 09 .lobytes $f009 +00053Cr 1 0A .lobytes $f00a +00053Dr 1 0B .lobytes $f00b +00053Er 1 0C .lobytes $f00c +00053Fr 1 0D .lobytes $f00d +000540r 1 0E .lobytes $f00e +000541r 1 0F .lobytes $f00f +000542r 1 E1 .lobytes $ffe1 +000543r 1 E2 .lobytes $ffe2 +000544r 1 E3 .lobytes $ffe3 +000545r 1 E4 .lobytes $ffe4 +000546r 1 E5 .lobytes $ffe5 +000547r 1 E6 .lobytes $ffe6 +000548r 1 E7 .lobytes $ffe7 +000549r 1 E8 .lobytes $ffe8 +00054Ar 1 E9 .lobytes $ffe9 +00054Br 1 EA .lobytes $ffea +00054Cr 1 EB .lobytes $ffeb +00054Dr 1 EC .lobytes $ffec +00054Er 1 ED .lobytes $ffed +00054Fr 1 EE .lobytes $ffee +000550r 1 EF .lobytes $ffef +000551r 1 F0 .lobytes $fff0 +000552r 1 F1 .lobytes $fff1 +000553r 1 F2 .lobytes $fff2 +000554r 1 F3 .lobytes $fff3 +000555r 1 F4 .lobytes $fff4 +000556r 1 F5 .lobytes $fff5 +000557r 1 F6 .lobytes $fff6 +000558r 1 F7 .lobytes $fff7 +000559r 1 F8 .lobytes $fff8 +00055Ar 1 F9 .lobytes $fff9 +00055Br 1 FA .lobytes $fffa +00055Cr 1 FB .lobytes $fffb +00055Dr 1 FC .lobytes $fffc +00055Er 1 FD .lobytes $fffd +00055Fr 1 FE .lobytes $fffe +000560r 1 FF .lobytes $ffff +000561r 1 +000561r 1 ; hex values, uppercase +000561r 1 00 .lobytes $0 +000562r 1 01 .lobytes $1 +000563r 1 02 .lobytes $2 +000564r 1 03 .lobytes $3 +000565r 1 04 .lobytes $4 +000566r 1 05 .lobytes $5 +000567r 1 06 .lobytes $6 +000568r 1 07 .lobytes $7 +000569r 1 08 .lobytes $8 +00056Ar 1 09 .lobytes $9 +00056Br 1 0A .lobytes $A +00056Cr 1 0B .lobytes $B +00056Dr 1 0C .lobytes $C +00056Er 1 0D .lobytes $D +00056Fr 1 0E .lobytes $E +000570r 1 0F .lobytes $F +000571r 1 10 .lobytes $10 +000572r 1 11 .lobytes $11 +000573r 1 12 .lobytes $12 +000574r 1 13 .lobytes $13 +000575r 1 70 .lobytes $70 +000576r 1 71 .lobytes $71 +000577r 1 72 .lobytes $72 +000578r 1 73 .lobytes $73 +000579r 1 74 .lobytes $74 +00057Ar 1 75 .lobytes $75 +00057Br 1 76 .lobytes $76 +00057Cr 1 77 .lobytes $77 +00057Dr 1 78 .lobytes $78 +00057Er 1 79 .lobytes $79 +00057Fr 1 7A .lobytes $7A +000580r 1 7B .lobytes $7B +000581r 1 7C .lobytes $7C +000582r 1 7D .lobytes $7D +000583r 1 7E .lobytes $7E +000584r 1 7F .lobytes $7F +000585r 1 80 .lobytes $80 +000586r 1 81 .lobytes $81 +000587r 1 82 .lobytes $82 +000588r 1 83 .lobytes $83 +000589r 1 84 .lobytes $84 +00058Ar 1 85 .lobytes $85 +00058Br 1 86 .lobytes $86 +00058Cr 1 F0 .lobytes $F0 +00058Dr 1 F1 .lobytes $F1 +00058Er 1 F2 .lobytes $F2 +00058Fr 1 F3 .lobytes $F3 +000590r 1 F4 .lobytes $F4 +000591r 1 F5 .lobytes $F5 +000592r 1 F6 .lobytes $F6 +000593r 1 F7 .lobytes $F7 +000594r 1 F8 .lobytes $F8 +000595r 1 F9 .lobytes $F9 +000596r 1 FA .lobytes $FA +000597r 1 FB .lobytes $FB +000598r 1 FC .lobytes $FC +000599r 1 FD .lobytes $FD +00059Ar 1 FE .lobytes $FE +00059Br 1 FF .lobytes $FF +00059Cr 1 00 .lobytes $100 +00059Dr 1 01 .lobytes $101 +00059Er 1 02 .lobytes $102 +00059Fr 1 03 .lobytes $103 +0005A0r 1 D2 .lobytes $FD2 +0005A1r 1 D3 .lobytes $FD3 +0005A2r 1 D4 .lobytes $FD4 +0005A3r 1 D5 .lobytes $FD5 +0005A4r 1 D6 .lobytes $FD6 +0005A5r 1 D7 .lobytes $FD7 +0005A6r 1 D8 .lobytes $FD8 +0005A7r 1 D9 .lobytes $FD9 +0005A8r 1 DA .lobytes $FDA +0005A9r 1 DB .lobytes $FDB +0005AAr 1 DC .lobytes $FDC +0005ABr 1 DD .lobytes $FDD +0005ACr 1 DE .lobytes $FDE +0005ADr 1 DF .lobytes $FDF +0005AEr 1 E0 .lobytes $FE0 +0005AFr 1 E1 .lobytes $FE1 +0005B0r 1 E2 .lobytes $FE2 +0005B1r 1 E3 .lobytes $FE3 +0005B2r 1 E4 .lobytes $FE4 +0005B3r 1 E5 .lobytes $FE5 +0005B4r 1 E6 .lobytes $FE6 +0005B5r 1 E7 .lobytes $FE7 +0005B6r 1 E8 .lobytes $FE8 +0005B7r 1 E9 .lobytes $FE9 +0005B8r 1 EA .lobytes $FEA +0005B9r 1 EB .lobytes $FEB +0005BAr 1 EC .lobytes $FEC +0005BBr 1 ED .lobytes $FED +0005BCr 1 EE .lobytes $FEE +0005BDr 1 EF .lobytes $FEF +0005BEr 1 F0 .lobytes $FF0 +0005BFr 1 F1 .lobytes $FF1 +0005C0r 1 F2 .lobytes $FF2 +0005C1r 1 F3 .lobytes $FF3 +0005C2r 1 F4 .lobytes $FF4 +0005C3r 1 F5 .lobytes $FF5 +0005C4r 1 F6 .lobytes $FF6 +0005C5r 1 F7 .lobytes $FF7 +0005C6r 1 F8 .lobytes $FF8 +0005C7r 1 F9 .lobytes $FF9 +0005C8r 1 FA .lobytes $FFA +0005C9r 1 FB .lobytes $FFB +0005CAr 1 FC .lobytes $FFC +0005CBr 1 FD .lobytes $FFD +0005CCr 1 FE .lobytes $FFE +0005CDr 1 FF .lobytes $FFF +0005CEr 1 00 .lobytes $1000 +0005CFr 1 01 .lobytes $1001 +0005D0r 1 02 .lobytes $1002 +0005D1r 1 03 .lobytes $1003 +0005D2r 1 04 .lobytes $1004 +0005D3r 1 05 .lobytes $1005 +0005D4r 1 06 .lobytes $1006 +0005D5r 1 07 .lobytes $1007 +0005D6r 1 08 .lobytes $1008 +0005D7r 1 F0 .lobytes $7FF0 +0005D8r 1 F1 .lobytes $7FF1 +0005D9r 1 F2 .lobytes $7FF2 +0005DAr 1 F3 .lobytes $7FF3 +0005DBr 1 F4 .lobytes $7FF4 +0005DCr 1 F5 .lobytes $7FF5 +0005DDr 1 F6 .lobytes $7FF6 +0005DEr 1 F7 .lobytes $7FF7 +0005DFr 1 F8 .lobytes $7FF8 +0005E0r 1 F9 .lobytes $7FF9 +0005E1r 1 FA .lobytes $7FFA +0005E2r 1 FB .lobytes $7FFB +0005E3r 1 FC .lobytes $7FFC +0005E4r 1 FD .lobytes $7FFD +0005E5r 1 FE .lobytes $7FFE +0005E6r 1 FF .lobytes $7FFF +0005E7r 1 00 .lobytes $8000 +0005E8r 1 01 .lobytes $8001 +0005E9r 1 02 .lobytes $8002 +0005EAr 1 03 .lobytes $8003 +0005EBr 1 04 .lobytes $8004 +0005ECr 1 05 .lobytes $8005 +0005EDr 1 06 .lobytes $8006 +0005EEr 1 07 .lobytes $8007 +0005EFr 1 08 .lobytes $8008 +0005F0r 1 09 .lobytes $8009 +0005F1r 1 0A .lobytes $800A +0005F2r 1 0B .lobytes $800B +0005F3r 1 E1 .lobytes $9FE1 +0005F4r 1 E2 .lobytes $9FE2 +0005F5r 1 E3 .lobytes $9FE3 +0005F6r 1 E4 .lobytes $9FE4 +0005F7r 1 E5 .lobytes $9FE5 +0005F8r 1 E6 .lobytes $9FE6 +0005F9r 1 E7 .lobytes $9FE7 +0005FAr 1 E8 .lobytes $9FE8 +0005FBr 1 E9 .lobytes $9FE9 +0005FCr 1 EA .lobytes $9FEA +0005FDr 1 EB .lobytes $9FEB +0005FEr 1 EC .lobytes $9FEC +0005FFr 1 ED .lobytes $9FED +000600r 1 EE .lobytes $9FEE +000601r 1 EF .lobytes $9FEF +000602r 1 F0 .lobytes $9FF0 +000603r 1 F1 .lobytes $9FF1 +000604r 1 F2 .lobytes $9FF2 +000605r 1 F3 .lobytes $9FF3 +000606r 1 F4 .lobytes $9FF4 +000607r 1 F5 .lobytes $9FF5 +000608r 1 F6 .lobytes $9FF6 +000609r 1 F7 .lobytes $9FF7 +00060Ar 1 F8 .lobytes $9FF8 +00060Br 1 F9 .lobytes $9FF9 +00060Cr 1 FA .lobytes $9FFA +00060Dr 1 FB .lobytes $9FFB +00060Er 1 FC .lobytes $9FFC +00060Fr 1 FD .lobytes $9FFD +000610r 1 FE .lobytes $9FFE +000611r 1 FF .lobytes $9FFF +000612r 1 00 .lobytes $A000 +000613r 1 01 .lobytes $A001 +000614r 1 02 .lobytes $A002 +000615r 1 03 .lobytes $A003 +000616r 1 04 .lobytes $A004 +000617r 1 05 .lobytes $A005 +000618r 1 06 .lobytes $A006 +000619r 1 07 .lobytes $A007 +00061Ar 1 08 .lobytes $A008 +00061Br 1 09 .lobytes $A009 +00061Cr 1 0A .lobytes $A00A +00061Dr 1 0B .lobytes $A00B +00061Er 1 0C .lobytes $A00C +00061Fr 1 0D .lobytes $A00D +000620r 1 0E .lobytes $A00E +000621r 1 0F .lobytes $A00F +000622r 1 E1 .lobytes $AFE1 +000623r 1 E2 .lobytes $AFE2 +000624r 1 E3 .lobytes $AFE3 +000625r 1 E4 .lobytes $AFE4 +000626r 1 E5 .lobytes $AFE5 +000627r 1 E6 .lobytes $AFE6 +000628r 1 E7 .lobytes $AFE7 +000629r 1 E8 .lobytes $AFE8 +00062Ar 1 E9 .lobytes $AFE9 +00062Br 1 EA .lobytes $AFEA +00062Cr 1 EB .lobytes $AFEB +00062Dr 1 EC .lobytes $AFEC +00062Er 1 ED .lobytes $AFED +00062Fr 1 EE .lobytes $AFEE +000630r 1 EF .lobytes $AFEF +000631r 1 F0 .lobytes $AFF0 +000632r 1 F1 .lobytes $AFF1 +000633r 1 F2 .lobytes $AFF2 +000634r 1 F3 .lobytes $AFF3 +000635r 1 F4 .lobytes $AFF4 +000636r 1 F5 .lobytes $AFF5 +000637r 1 F6 .lobytes $AFF6 +000638r 1 F7 .lobytes $AFF7 +000639r 1 F8 .lobytes $AFF8 +00063Ar 1 F9 .lobytes $AFF9 +00063Br 1 FA .lobytes $AFFA +00063Cr 1 FB .lobytes $AFFB +00063Dr 1 FC .lobytes $AFFC +00063Er 1 FD .lobytes $AFFD +00063Fr 1 FE .lobytes $AFFE +000640r 1 FF .lobytes $AFFF +000641r 1 00 .lobytes $B000 +000642r 1 01 .lobytes $B001 +000643r 1 02 .lobytes $B002 +000644r 1 03 .lobytes $B003 +000645r 1 04 .lobytes $B004 +000646r 1 05 .lobytes $B005 +000647r 1 06 .lobytes $B006 +000648r 1 07 .lobytes $B007 +000649r 1 08 .lobytes $B008 +00064Ar 1 09 .lobytes $B009 +00064Br 1 0A .lobytes $B00A +00064Cr 1 0B .lobytes $B00B +00064Dr 1 0C .lobytes $B00C +00064Er 1 0D .lobytes $B00D +00064Fr 1 0E .lobytes $B00E +000650r 1 0F .lobytes $B00F +000651r 1 E1 .lobytes $BFE1 +000652r 1 E2 .lobytes $BFE2 +000653r 1 E3 .lobytes $BFE3 +000654r 1 E4 .lobytes $BFE4 +000655r 1 E5 .lobytes $BFE5 +000656r 1 E6 .lobytes $BFE6 +000657r 1 E7 .lobytes $BFE7 +000658r 1 E8 .lobytes $BFE8 +000659r 1 E9 .lobytes $BFE9 +00065Ar 1 EA .lobytes $BFEA +00065Br 1 EB .lobytes $BFEB +00065Cr 1 EC .lobytes $BFEC +00065Dr 1 ED .lobytes $BFED +00065Er 1 EE .lobytes $BFEE +00065Fr 1 EF .lobytes $BFEF +000660r 1 F0 .lobytes $BFF0 +000661r 1 F1 .lobytes $BFF1 +000662r 1 F2 .lobytes $BFF2 +000663r 1 F3 .lobytes $BFF3 +000664r 1 F4 .lobytes $BFF4 +000665r 1 F5 .lobytes $BFF5 +000666r 1 F6 .lobytes $BFF6 +000667r 1 F7 .lobytes $BFF7 +000668r 1 F8 .lobytes $BFF8 +000669r 1 F9 .lobytes $BFF9 +00066Ar 1 FA .lobytes $BFFA +00066Br 1 FB .lobytes $BFFB +00066Cr 1 FC .lobytes $BFFC +00066Dr 1 FD .lobytes $BFFD +00066Er 1 FE .lobytes $BFFE +00066Fr 1 FF .lobytes $BFFF +000670r 1 00 .lobytes $C000 +000671r 1 01 .lobytes $C001 +000672r 1 02 .lobytes $C002 +000673r 1 03 .lobytes $C003 +000674r 1 04 .lobytes $C004 +000675r 1 05 .lobytes $C005 +000676r 1 06 .lobytes $C006 +000677r 1 07 .lobytes $C007 +000678r 1 08 .lobytes $C008 +000679r 1 09 .lobytes $C009 +00067Ar 1 0A .lobytes $C00A +00067Br 1 0B .lobytes $C00B +00067Cr 1 0C .lobytes $C00C +00067Dr 1 0D .lobytes $C00D +00067Er 1 0E .lobytes $C00E +00067Fr 1 0F .lobytes $C00F +000680r 1 E1 .lobytes $CFE1 +000681r 1 E2 .lobytes $CFE2 +000682r 1 E3 .lobytes $CFE3 +000683r 1 E4 .lobytes $CFE4 +000684r 1 E5 .lobytes $CFE5 +000685r 1 E6 .lobytes $CFE6 +000686r 1 E7 .lobytes $CFE7 +000687r 1 E8 .lobytes $CFE8 +000688r 1 E9 .lobytes $CFE9 +000689r 1 EA .lobytes $CFEA +00068Ar 1 EB .lobytes $CFEB +00068Br 1 EC .lobytes $CFEC +00068Cr 1 ED .lobytes $CFED +00068Dr 1 EE .lobytes $CFEE +00068Er 1 EF .lobytes $CFEF +00068Fr 1 F0 .lobytes $CFF0 +000690r 1 F1 .lobytes $CFF1 +000691r 1 F2 .lobytes $CFF2 +000692r 1 F3 .lobytes $CFF3 +000693r 1 F4 .lobytes $CFF4 +000694r 1 F5 .lobytes $CFF5 +000695r 1 F6 .lobytes $CFF6 +000696r 1 F7 .lobytes $CFF7 +000697r 1 F8 .lobytes $CFF8 +000698r 1 F9 .lobytes $CFF9 +000699r 1 FA .lobytes $CFFA +00069Ar 1 FB .lobytes $CFFB +00069Br 1 FC .lobytes $CFFC +00069Cr 1 FD .lobytes $CFFD +00069Dr 1 FE .lobytes $CFFE +00069Er 1 FF .lobytes $CFFF +00069Fr 1 00 .lobytes $D000 +0006A0r 1 01 .lobytes $D001 +0006A1r 1 02 .lobytes $D002 +0006A2r 1 03 .lobytes $D003 +0006A3r 1 04 .lobytes $D004 +0006A4r 1 05 .lobytes $D005 +0006A5r 1 06 .lobytes $D006 +0006A6r 1 07 .lobytes $D007 +0006A7r 1 08 .lobytes $D008 +0006A8r 1 09 .lobytes $D009 +0006A9r 1 0A .lobytes $D00A +0006AAr 1 0B .lobytes $D00B +0006ABr 1 0C .lobytes $D00C +0006ACr 1 0D .lobytes $D00D +0006ADr 1 0E .lobytes $D00E +0006AEr 1 0F .lobytes $D00F +0006AFr 1 E1 .lobytes $DFE1 +0006B0r 1 E2 .lobytes $DFE2 +0006B1r 1 E3 .lobytes $DFE3 +0006B2r 1 E4 .lobytes $DFE4 +0006B3r 1 E5 .lobytes $DFE5 +0006B4r 1 E6 .lobytes $DFE6 +0006B5r 1 E7 .lobytes $DFE7 +0006B6r 1 E8 .lobytes $DFE8 +0006B7r 1 E9 .lobytes $DFE9 +0006B8r 1 EA .lobytes $DFEA +0006B9r 1 EB .lobytes $DFEB +0006BAr 1 EC .lobytes $DFEC +0006BBr 1 ED .lobytes $DFED +0006BCr 1 EE .lobytes $DFEE +0006BDr 1 EF .lobytes $DFEF +0006BEr 1 F0 .lobytes $DFF0 +0006BFr 1 F1 .lobytes $DFF1 +0006C0r 1 F2 .lobytes $DFF2 +0006C1r 1 F3 .lobytes $DFF3 +0006C2r 1 F4 .lobytes $DFF4 +0006C3r 1 F5 .lobytes $DFF5 +0006C4r 1 F6 .lobytes $DFF6 +0006C5r 1 F7 .lobytes $DFF7 +0006C6r 1 F8 .lobytes $DFF8 +0006C7r 1 F9 .lobytes $DFF9 +0006C8r 1 FA .lobytes $DFFA +0006C9r 1 FB .lobytes $DFFB +0006CAr 1 FC .lobytes $DFFC +0006CBr 1 FD .lobytes $DFFD +0006CCr 1 FE .lobytes $DFFE +0006CDr 1 FF .lobytes $DFFF +0006CEr 1 00 .lobytes $E000 +0006CFr 1 01 .lobytes $E001 +0006D0r 1 02 .lobytes $E002 +0006D1r 1 03 .lobytes $E003 +0006D2r 1 04 .lobytes $E004 +0006D3r 1 05 .lobytes $E005 +0006D4r 1 06 .lobytes $E006 +0006D5r 1 07 .lobytes $E007 +0006D6r 1 08 .lobytes $E008 +0006D7r 1 09 .lobytes $E009 +0006D8r 1 0A .lobytes $E00A +0006D9r 1 0B .lobytes $E00B +0006DAr 1 0C .lobytes $E00C +0006DBr 1 0D .lobytes $E00D +0006DCr 1 0E .lobytes $E00E +0006DDr 1 0F .lobytes $E00F +0006DEr 1 E1 .lobytes $EFE1 +0006DFr 1 E2 .lobytes $EFE2 +0006E0r 1 E3 .lobytes $EFE3 +0006E1r 1 E4 .lobytes $EFE4 +0006E2r 1 E5 .lobytes $EFE5 +0006E3r 1 E6 .lobytes $EFE6 +0006E4r 1 E7 .lobytes $EFE7 +0006E5r 1 E8 .lobytes $EFE8 +0006E6r 1 E9 .lobytes $EFE9 +0006E7r 1 EA .lobytes $EFEA +0006E8r 1 EB .lobytes $EFEB +0006E9r 1 EC .lobytes $EFEC +0006EAr 1 ED .lobytes $EFED +0006EBr 1 EE .lobytes $EFEE +0006ECr 1 EF .lobytes $EFEF +0006EDr 1 F0 .lobytes $EFF0 +0006EEr 1 F1 .lobytes $EFF1 +0006EFr 1 F2 .lobytes $EFF2 +0006F0r 1 F3 .lobytes $EFF3 +0006F1r 1 F4 .lobytes $EFF4 +0006F2r 1 F5 .lobytes $EFF5 +0006F3r 1 F6 .lobytes $EFF6 +0006F4r 1 F7 .lobytes $EFF7 +0006F5r 1 F8 .lobytes $EFF8 +0006F6r 1 F9 .lobytes $EFF9 +0006F7r 1 FA .lobytes $EFFA +0006F8r 1 FB .lobytes $EFFB +0006F9r 1 FC .lobytes $EFFC +0006FAr 1 FD .lobytes $EFFD +0006FBr 1 FE .lobytes $EFFE +0006FCr 1 FF .lobytes $EFFF +0006FDr 1 00 .lobytes $F000 +0006FEr 1 01 .lobytes $F001 +0006FFr 1 02 .lobytes $F002 +000700r 1 03 .lobytes $F003 +000701r 1 04 .lobytes $F004 +000702r 1 05 .lobytes $F005 +000703r 1 06 .lobytes $F006 +000704r 1 07 .lobytes $F007 +000705r 1 08 .lobytes $F008 +000706r 1 09 .lobytes $F009 +000707r 1 0A .lobytes $F00A +000708r 1 0B .lobytes $F00B +000709r 1 0C .lobytes $F00C +00070Ar 1 0D .lobytes $F00D +00070Br 1 0E .lobytes $F00E +00070Cr 1 0F .lobytes $F00F +00070Dr 1 E1 .lobytes $FFE1 +00070Er 1 E2 .lobytes $FFE2 +00070Fr 1 E3 .lobytes $FFE3 +000710r 1 E4 .lobytes $FFE4 +000711r 1 E5 .lobytes $FFE5 +000712r 1 E6 .lobytes $FFE6 +000713r 1 E7 .lobytes $FFE7 +000714r 1 E8 .lobytes $FFE8 +000715r 1 E9 .lobytes $FFE9 +000716r 1 EA .lobytes $FFEA +000717r 1 EB .lobytes $FFEB +000718r 1 EC .lobytes $FFEC +000719r 1 ED .lobytes $FFED +00071Ar 1 EE .lobytes $FFEE +00071Br 1 EF .lobytes $FFEF +00071Cr 1 F0 .lobytes $FFF0 +00071Dr 1 F1 .lobytes $FFF1 +00071Er 1 F2 .lobytes $FFF2 +00071Fr 1 F3 .lobytes $FFF3 +000720r 1 F4 .lobytes $FFF4 +000721r 1 F5 .lobytes $FFF5 +000722r 1 F6 .lobytes $FFF6 +000723r 1 F7 .lobytes $FFF7 +000724r 1 F8 .lobytes $FFF8 +000725r 1 F9 .lobytes $FFF9 +000726r 1 FA .lobytes $FFFA +000727r 1 FB .lobytes $FFFB +000728r 1 FC .lobytes $FFFC +000729r 1 FD .lobytes $FFFD +00072Ar 1 FE .lobytes $FFFE +00072Br 1 FF .lobytes $FFFF +00072Cr 1 +00072Cr 1 ; 4-digit hex values +00072Cr 1 00 .lobytes $0000 +00072Dr 1 01 .lobytes $0001 +00072Er 1 02 .lobytes $0002 +00072Fr 1 03 .lobytes $0003 +000730r 1 04 .lobytes $0004 +000731r 1 05 .lobytes $0005 +000732r 1 06 .lobytes $0006 +000733r 1 07 .lobytes $0007 +000734r 1 08 .lobytes $0008 +000735r 1 09 .lobytes $0009 +000736r 1 0A .lobytes $000a +000737r 1 0B .lobytes $000b +000738r 1 0C .lobytes $000c +000739r 1 0D .lobytes $000d +00073Ar 1 0E .lobytes $000e +00073Br 1 0F .lobytes $000f +00073Cr 1 10 .lobytes $0010 +00073Dr 1 11 .lobytes $0011 +00073Er 1 12 .lobytes $0012 +00073Fr 1 13 .lobytes $0013 +000740r 1 70 .lobytes $0070 +000741r 1 71 .lobytes $0071 +000742r 1 72 .lobytes $0072 +000743r 1 73 .lobytes $0073 +000744r 1 74 .lobytes $0074 +000745r 1 75 .lobytes $0075 +000746r 1 76 .lobytes $0076 +000747r 1 77 .lobytes $0077 +000748r 1 78 .lobytes $0078 +000749r 1 79 .lobytes $0079 +00074Ar 1 7A .lobytes $007a +00074Br 1 7B .lobytes $007b +00074Cr 1 7C .lobytes $007c +00074Dr 1 7D .lobytes $007d +00074Er 1 7E .lobytes $007e +00074Fr 1 7F .lobytes $007f +000750r 1 80 .lobytes $0080 +000751r 1 81 .lobytes $0081 +000752r 1 82 .lobytes $0082 +000753r 1 83 .lobytes $0083 +000754r 1 84 .lobytes $0084 +000755r 1 85 .lobytes $0085 +000756r 1 86 .lobytes $0086 +000757r 1 F0 .lobytes $00f0 +000758r 1 F1 .lobytes $00f1 +000759r 1 F2 .lobytes $00f2 +00075Ar 1 F3 .lobytes $00f3 +00075Br 1 F4 .lobytes $00f4 +00075Cr 1 F5 .lobytes $00f5 +00075Dr 1 F6 .lobytes $00f6 +00075Er 1 F7 .lobytes $00f7 +00075Fr 1 F8 .lobytes $00f8 +000760r 1 F9 .lobytes $00f9 +000761r 1 FA .lobytes $00fa +000762r 1 FB .lobytes $00fb +000763r 1 FC .lobytes $00fc +000764r 1 FD .lobytes $00fd +000765r 1 FE .lobytes $00fe +000766r 1 FF .lobytes $00ff +000767r 1 00 .lobytes $0100 +000768r 1 01 .lobytes $0101 +000769r 1 02 .lobytes $0102 +00076Ar 1 03 .lobytes $0103 +00076Br 1 D2 .lobytes $0fd2 +00076Cr 1 D3 .lobytes $0fd3 +00076Dr 1 D4 .lobytes $0fd4 +00076Er 1 D5 .lobytes $0fd5 +00076Fr 1 D6 .lobytes $0fd6 +000770r 1 D7 .lobytes $0fd7 +000771r 1 D8 .lobytes $0fd8 +000772r 1 D9 .lobytes $0fd9 +000773r 1 DA .lobytes $0fda +000774r 1 DB .lobytes $0fdb +000775r 1 DC .lobytes $0fdc +000776r 1 DD .lobytes $0fdd +000777r 1 DE .lobytes $0fde +000778r 1 DF .lobytes $0fdf +000779r 1 E0 .lobytes $0fe0 +00077Ar 1 E1 .lobytes $0fe1 +00077Br 1 E2 .lobytes $0fe2 +00077Cr 1 E3 .lobytes $0fe3 +00077Dr 1 E4 .lobytes $0fe4 +00077Er 1 E5 .lobytes $0fe5 +00077Fr 1 E6 .lobytes $0fe6 +000780r 1 E7 .lobytes $0fe7 +000781r 1 E8 .lobytes $0fe8 +000782r 1 E9 .lobytes $0fe9 +000783r 1 EA .lobytes $0fea +000784r 1 EB .lobytes $0feb +000785r 1 EC .lobytes $0fec +000786r 1 ED .lobytes $0fed +000787r 1 EE .lobytes $0fee +000788r 1 EF .lobytes $0fef +000789r 1 F0 .lobytes $0ff0 +00078Ar 1 F1 .lobytes $0ff1 +00078Br 1 F2 .lobytes $0ff2 +00078Cr 1 F3 .lobytes $0ff3 +00078Dr 1 F4 .lobytes $0ff4 +00078Er 1 F5 .lobytes $0ff5 +00078Fr 1 F6 .lobytes $0ff6 +000790r 1 F7 .lobytes $0ff7 +000791r 1 F8 .lobytes $0ff8 +000792r 1 F9 .lobytes $0ff9 +000793r 1 FA .lobytes $0ffa +000794r 1 FB .lobytes $0ffb +000795r 1 FC .lobytes $0ffc +000796r 1 FD .lobytes $0ffd +000797r 1 FE .lobytes $0ffe +000798r 1 FF .lobytes $0fff +000799r 1 00 .lobytes $1000 +00079Ar 1 01 .lobytes $1001 +00079Br 1 02 .lobytes $1002 +00079Cr 1 03 .lobytes $1003 +00079Dr 1 04 .lobytes $1004 +00079Er 1 05 .lobytes $1005 +00079Fr 1 06 .lobytes $1006 +0007A0r 1 07 .lobytes $1007 +0007A1r 1 08 .lobytes $1008 +0007A2r 1 F0 .lobytes $7ff0 +0007A3r 1 F1 .lobytes $7ff1 +0007A4r 1 F2 .lobytes $7ff2 +0007A5r 1 F3 .lobytes $7ff3 +0007A6r 1 F4 .lobytes $7ff4 +0007A7r 1 F5 .lobytes $7ff5 +0007A8r 1 F6 .lobytes $7ff6 +0007A9r 1 F7 .lobytes $7ff7 +0007AAr 1 F8 .lobytes $7ff8 +0007ABr 1 F9 .lobytes $7ff9 +0007ACr 1 FA .lobytes $7ffa +0007ADr 1 FB .lobytes $7ffb +0007AEr 1 FC .lobytes $7ffc +0007AFr 1 FD .lobytes $7ffd +0007B0r 1 FE .lobytes $7ffe +0007B1r 1 FF .lobytes $7fff +0007B2r 1 00 .lobytes $8000 +0007B3r 1 01 .lobytes $8001 +0007B4r 1 02 .lobytes $8002 +0007B5r 1 03 .lobytes $8003 +0007B6r 1 04 .lobytes $8004 +0007B7r 1 05 .lobytes $8005 +0007B8r 1 06 .lobytes $8006 +0007B9r 1 07 .lobytes $8007 +0007BAr 1 08 .lobytes $8008 +0007BBr 1 09 .lobytes $8009 +0007BCr 1 0A .lobytes $800a +0007BDr 1 0B .lobytes $800b +0007BEr 1 E1 .lobytes $9fe1 +0007BFr 1 E2 .lobytes $9fe2 +0007C0r 1 E3 .lobytes $9fe3 +0007C1r 1 E4 .lobytes $9fe4 +0007C2r 1 E5 .lobytes $9fe5 +0007C3r 1 E6 .lobytes $9fe6 +0007C4r 1 E7 .lobytes $9fe7 +0007C5r 1 E8 .lobytes $9fe8 +0007C6r 1 E9 .lobytes $9fe9 +0007C7r 1 EA .lobytes $9fea +0007C8r 1 EB .lobytes $9feb +0007C9r 1 EC .lobytes $9fec +0007CAr 1 ED .lobytes $9fed +0007CBr 1 EE .lobytes $9fee +0007CCr 1 EF .lobytes $9fef +0007CDr 1 F0 .lobytes $9ff0 +0007CEr 1 F1 .lobytes $9ff1 +0007CFr 1 F2 .lobytes $9ff2 +0007D0r 1 F3 .lobytes $9ff3 +0007D1r 1 F4 .lobytes $9ff4 +0007D2r 1 F5 .lobytes $9ff5 +0007D3r 1 F6 .lobytes $9ff6 +0007D4r 1 F7 .lobytes $9ff7 +0007D5r 1 F8 .lobytes $9ff8 +0007D6r 1 F9 .lobytes $9ff9 +0007D7r 1 FA .lobytes $9ffa +0007D8r 1 FB .lobytes $9ffb +0007D9r 1 FC .lobytes $9ffc +0007DAr 1 FD .lobytes $9ffd +0007DBr 1 FE .lobytes $9ffe +0007DCr 1 FF .lobytes $9fff +0007DDr 1 00 .lobytes $a000 +0007DEr 1 01 .lobytes $a001 +0007DFr 1 02 .lobytes $a002 +0007E0r 1 03 .lobytes $a003 +0007E1r 1 04 .lobytes $a004 +0007E2r 1 05 .lobytes $a005 +0007E3r 1 06 .lobytes $a006 +0007E4r 1 07 .lobytes $a007 +0007E5r 1 08 .lobytes $a008 +0007E6r 1 09 .lobytes $a009 +0007E7r 1 0A .lobytes $a00a +0007E8r 1 0B .lobytes $a00b +0007E9r 1 0C .lobytes $a00c +0007EAr 1 0D .lobytes $a00d +0007EBr 1 0E .lobytes $a00e +0007ECr 1 0F .lobytes $a00f +0007EDr 1 E1 .lobytes $afe1 +0007EEr 1 E2 .lobytes $afe2 +0007EFr 1 E3 .lobytes $afe3 +0007F0r 1 E4 .lobytes $afe4 +0007F1r 1 E5 .lobytes $afe5 +0007F2r 1 E6 .lobytes $afe6 +0007F3r 1 E7 .lobytes $afe7 +0007F4r 1 E8 .lobytes $afe8 +0007F5r 1 E9 .lobytes $afe9 +0007F6r 1 EA .lobytes $afea +0007F7r 1 EB .lobytes $afeb +0007F8r 1 EC .lobytes $afec +0007F9r 1 ED .lobytes $afed +0007FAr 1 EE .lobytes $afee +0007FBr 1 EF .lobytes $afef +0007FCr 1 F0 .lobytes $aff0 +0007FDr 1 F1 .lobytes $aff1 +0007FEr 1 F2 .lobytes $aff2 +0007FFr 1 F3 .lobytes $aff3 +000800r 1 F4 .lobytes $aff4 +000801r 1 F5 .lobytes $aff5 +000802r 1 F6 .lobytes $aff6 +000803r 1 F7 .lobytes $aff7 +000804r 1 F8 .lobytes $aff8 +000805r 1 F9 .lobytes $aff9 +000806r 1 FA .lobytes $affa +000807r 1 FB .lobytes $affb +000808r 1 FC .lobytes $affc +000809r 1 FD .lobytes $affd +00080Ar 1 FE .lobytes $affe +00080Br 1 FF .lobytes $afff +00080Cr 1 00 .lobytes $b000 +00080Dr 1 01 .lobytes $b001 +00080Er 1 02 .lobytes $b002 +00080Fr 1 03 .lobytes $b003 +000810r 1 04 .lobytes $b004 +000811r 1 05 .lobytes $b005 +000812r 1 06 .lobytes $b006 +000813r 1 07 .lobytes $b007 +000814r 1 08 .lobytes $b008 +000815r 1 09 .lobytes $b009 +000816r 1 0A .lobytes $b00a +000817r 1 0B .lobytes $b00b +000818r 1 0C .lobytes $b00c +000819r 1 0D .lobytes $b00d +00081Ar 1 0E .lobytes $b00e +00081Br 1 0F .lobytes $b00f +00081Cr 1 E1 .lobytes $bfe1 +00081Dr 1 E2 .lobytes $bfe2 +00081Er 1 E3 .lobytes $bfe3 +00081Fr 1 E4 .lobytes $bfe4 +000820r 1 E5 .lobytes $bfe5 +000821r 1 E6 .lobytes $bfe6 +000822r 1 E7 .lobytes $bfe7 +000823r 1 E8 .lobytes $bfe8 +000824r 1 E9 .lobytes $bfe9 +000825r 1 EA .lobytes $bfea +000826r 1 EB .lobytes $bfeb +000827r 1 EC .lobytes $bfec +000828r 1 ED .lobytes $bfed +000829r 1 EE .lobytes $bfee +00082Ar 1 EF .lobytes $bfef +00082Br 1 F0 .lobytes $bff0 +00082Cr 1 F1 .lobytes $bff1 +00082Dr 1 F2 .lobytes $bff2 +00082Er 1 F3 .lobytes $bff3 +00082Fr 1 F4 .lobytes $bff4 +000830r 1 F5 .lobytes $bff5 +000831r 1 F6 .lobytes $bff6 +000832r 1 F7 .lobytes $bff7 +000833r 1 F8 .lobytes $bff8 +000834r 1 F9 .lobytes $bff9 +000835r 1 FA .lobytes $bffa +000836r 1 FB .lobytes $bffb +000837r 1 FC .lobytes $bffc +000838r 1 FD .lobytes $bffd +000839r 1 FE .lobytes $bffe +00083Ar 1 FF .lobytes $bfff +00083Br 1 00 .lobytes $c000 +00083Cr 1 01 .lobytes $c001 +00083Dr 1 02 .lobytes $c002 +00083Er 1 03 .lobytes $c003 +00083Fr 1 04 .lobytes $c004 +000840r 1 05 .lobytes $c005 +000841r 1 06 .lobytes $c006 +000842r 1 07 .lobytes $c007 +000843r 1 08 .lobytes $c008 +000844r 1 09 .lobytes $c009 +000845r 1 0A .lobytes $c00a +000846r 1 0B .lobytes $c00b +000847r 1 0C .lobytes $c00c +000848r 1 0D .lobytes $c00d +000849r 1 0E .lobytes $c00e +00084Ar 1 0F .lobytes $c00f +00084Br 1 E1 .lobytes $cfe1 +00084Cr 1 E2 .lobytes $cfe2 +00084Dr 1 E3 .lobytes $cfe3 +00084Er 1 E4 .lobytes $cfe4 +00084Fr 1 E5 .lobytes $cfe5 +000850r 1 E6 .lobytes $cfe6 +000851r 1 E7 .lobytes $cfe7 +000852r 1 E8 .lobytes $cfe8 +000853r 1 E9 .lobytes $cfe9 +000854r 1 EA .lobytes $cfea +000855r 1 EB .lobytes $cfeb +000856r 1 EC .lobytes $cfec +000857r 1 ED .lobytes $cfed +000858r 1 EE .lobytes $cfee +000859r 1 EF .lobytes $cfef +00085Ar 1 F0 .lobytes $cff0 +00085Br 1 F1 .lobytes $cff1 +00085Cr 1 F2 .lobytes $cff2 +00085Dr 1 F3 .lobytes $cff3 +00085Er 1 F4 .lobytes $cff4 +00085Fr 1 F5 .lobytes $cff5 +000860r 1 F6 .lobytes $cff6 +000861r 1 F7 .lobytes $cff7 +000862r 1 F8 .lobytes $cff8 +000863r 1 F9 .lobytes $cff9 +000864r 1 FA .lobytes $cffa +000865r 1 FB .lobytes $cffb +000866r 1 FC .lobytes $cffc +000867r 1 FD .lobytes $cffd +000868r 1 FE .lobytes $cffe +000869r 1 FF .lobytes $cfff +00086Ar 1 00 .lobytes $d000 +00086Br 1 01 .lobytes $d001 +00086Cr 1 02 .lobytes $d002 +00086Dr 1 03 .lobytes $d003 +00086Er 1 04 .lobytes $d004 +00086Fr 1 05 .lobytes $d005 +000870r 1 06 .lobytes $d006 +000871r 1 07 .lobytes $d007 +000872r 1 08 .lobytes $d008 +000873r 1 09 .lobytes $d009 +000874r 1 0A .lobytes $d00a +000875r 1 0B .lobytes $d00b +000876r 1 0C .lobytes $d00c +000877r 1 0D .lobytes $d00d +000878r 1 0E .lobytes $d00e +000879r 1 0F .lobytes $d00f +00087Ar 1 E1 .lobytes $dfe1 +00087Br 1 E2 .lobytes $dfe2 +00087Cr 1 E3 .lobytes $dfe3 +00087Dr 1 E4 .lobytes $dfe4 +00087Er 1 E5 .lobytes $dfe5 +00087Fr 1 E6 .lobytes $dfe6 +000880r 1 E7 .lobytes $dfe7 +000881r 1 E8 .lobytes $dfe8 +000882r 1 E9 .lobytes $dfe9 +000883r 1 EA .lobytes $dfea +000884r 1 EB .lobytes $dfeb +000885r 1 EC .lobytes $dfec +000886r 1 ED .lobytes $dfed +000887r 1 EE .lobytes $dfee +000888r 1 EF .lobytes $dfef +000889r 1 F0 .lobytes $dff0 +00088Ar 1 F1 .lobytes $dff1 +00088Br 1 F2 .lobytes $dff2 +00088Cr 1 F3 .lobytes $dff3 +00088Dr 1 F4 .lobytes $dff4 +00088Er 1 F5 .lobytes $dff5 +00088Fr 1 F6 .lobytes $dff6 +000890r 1 F7 .lobytes $dff7 +000891r 1 F8 .lobytes $dff8 +000892r 1 F9 .lobytes $dff9 +000893r 1 FA .lobytes $dffa +000894r 1 FB .lobytes $dffb +000895r 1 FC .lobytes $dffc +000896r 1 FD .lobytes $dffd +000897r 1 FE .lobytes $dffe +000898r 1 FF .lobytes $dfff +000899r 1 00 .lobytes $e000 +00089Ar 1 01 .lobytes $e001 +00089Br 1 02 .lobytes $e002 +00089Cr 1 03 .lobytes $e003 +00089Dr 1 04 .lobytes $e004 +00089Er 1 05 .lobytes $e005 +00089Fr 1 06 .lobytes $e006 +0008A0r 1 07 .lobytes $e007 +0008A1r 1 08 .lobytes $e008 +0008A2r 1 09 .lobytes $e009 +0008A3r 1 0A .lobytes $e00a +0008A4r 1 0B .lobytes $e00b +0008A5r 1 0C .lobytes $e00c +0008A6r 1 0D .lobytes $e00d +0008A7r 1 0E .lobytes $e00e +0008A8r 1 0F .lobytes $e00f +0008A9r 1 E1 .lobytes $efe1 +0008AAr 1 E2 .lobytes $efe2 +0008ABr 1 E3 .lobytes $efe3 +0008ACr 1 E4 .lobytes $efe4 +0008ADr 1 E5 .lobytes $efe5 +0008AEr 1 E6 .lobytes $efe6 +0008AFr 1 E7 .lobytes $efe7 +0008B0r 1 E8 .lobytes $efe8 +0008B1r 1 E9 .lobytes $efe9 +0008B2r 1 EA .lobytes $efea +0008B3r 1 EB .lobytes $efeb +0008B4r 1 EC .lobytes $efec +0008B5r 1 ED .lobytes $efed +0008B6r 1 EE .lobytes $efee +0008B7r 1 EF .lobytes $efef +0008B8r 1 F0 .lobytes $eff0 +0008B9r 1 F1 .lobytes $eff1 +0008BAr 1 F2 .lobytes $eff2 +0008BBr 1 F3 .lobytes $eff3 +0008BCr 1 F4 .lobytes $eff4 +0008BDr 1 F5 .lobytes $eff5 +0008BEr 1 F6 .lobytes $eff6 +0008BFr 1 F7 .lobytes $eff7 +0008C0r 1 F8 .lobytes $eff8 +0008C1r 1 F9 .lobytes $eff9 +0008C2r 1 FA .lobytes $effa +0008C3r 1 FB .lobytes $effb +0008C4r 1 FC .lobytes $effc +0008C5r 1 FD .lobytes $effd +0008C6r 1 FE .lobytes $effe +0008C7r 1 FF .lobytes $efff +0008C8r 1 00 .lobytes $f000 +0008C9r 1 01 .lobytes $f001 +0008CAr 1 02 .lobytes $f002 +0008CBr 1 03 .lobytes $f003 +0008CCr 1 04 .lobytes $f004 +0008CDr 1 05 .lobytes $f005 +0008CEr 1 06 .lobytes $f006 +0008CFr 1 07 .lobytes $f007 +0008D0r 1 08 .lobytes $f008 +0008D1r 1 09 .lobytes $f009 +0008D2r 1 0A .lobytes $f00a +0008D3r 1 0B .lobytes $f00b +0008D4r 1 0C .lobytes $f00c +0008D5r 1 0D .lobytes $f00d +0008D6r 1 0E .lobytes $f00e +0008D7r 1 0F .lobytes $f00f +0008D8r 1 E1 .lobytes $ffe1 +0008D9r 1 E2 .lobytes $ffe2 +0008DAr 1 E3 .lobytes $ffe3 +0008DBr 1 E4 .lobytes $ffe4 +0008DCr 1 E5 .lobytes $ffe5 +0008DDr 1 E6 .lobytes $ffe6 +0008DEr 1 E7 .lobytes $ffe7 +0008DFr 1 E8 .lobytes $ffe8 +0008E0r 1 E9 .lobytes $ffe9 +0008E1r 1 EA .lobytes $ffea +0008E2r 1 EB .lobytes $ffeb +0008E3r 1 EC .lobytes $ffec +0008E4r 1 ED .lobytes $ffed +0008E5r 1 EE .lobytes $ffee +0008E6r 1 EF .lobytes $ffef +0008E7r 1 F0 .lobytes $fff0 +0008E8r 1 F1 .lobytes $fff1 +0008E9r 1 F2 .lobytes $fff2 +0008EAr 1 F3 .lobytes $fff3 +0008EBr 1 F4 .lobytes $fff4 +0008ECr 1 F5 .lobytes $fff5 +0008EDr 1 F6 .lobytes $fff6 +0008EEr 1 F7 .lobytes $fff7 +0008EFr 1 F8 .lobytes $fff8 +0008F0r 1 F9 .lobytes $fff9 +0008F1r 1 FA .lobytes $fffa +0008F2r 1 FB .lobytes $fffb +0008F3r 1 FC .lobytes $fffc +0008F4r 1 FD .lobytes $fffd +0008F5r 1 FE .lobytes $fffe +0008F6r 1 FF .lobytes $ffff +0008F7r 1 +0008F7r 1 ; 4-digit hex values, uppercase +0008F7r 1 00 .lobytes $0000 +0008F8r 1 01 .lobytes $0001 +0008F9r 1 02 .lobytes $0002 +0008FAr 1 03 .lobytes $0003 +0008FBr 1 04 .lobytes $0004 +0008FCr 1 05 .lobytes $0005 +0008FDr 1 06 .lobytes $0006 +0008FEr 1 07 .lobytes $0007 +0008FFr 1 08 .lobytes $0008 +000900r 1 09 .lobytes $0009 +000901r 1 0A .lobytes $000A +000902r 1 0B .lobytes $000B +000903r 1 0C .lobytes $000C +000904r 1 0D .lobytes $000D +000905r 1 0E .lobytes $000E +000906r 1 0F .lobytes $000F +000907r 1 10 .lobytes $0010 +000908r 1 11 .lobytes $0011 +000909r 1 12 .lobytes $0012 +00090Ar 1 13 .lobytes $0013 +00090Br 1 70 .lobytes $0070 +00090Cr 1 71 .lobytes $0071 +00090Dr 1 72 .lobytes $0072 +00090Er 1 73 .lobytes $0073 +00090Fr 1 74 .lobytes $0074 +000910r 1 75 .lobytes $0075 +000911r 1 76 .lobytes $0076 +000912r 1 77 .lobytes $0077 +000913r 1 78 .lobytes $0078 +000914r 1 79 .lobytes $0079 +000915r 1 7A .lobytes $007A +000916r 1 7B .lobytes $007B +000917r 1 7C .lobytes $007C +000918r 1 7D .lobytes $007D +000919r 1 7E .lobytes $007E +00091Ar 1 7F .lobytes $007F +00091Br 1 80 .lobytes $0080 +00091Cr 1 81 .lobytes $0081 +00091Dr 1 82 .lobytes $0082 +00091Er 1 83 .lobytes $0083 +00091Fr 1 84 .lobytes $0084 +000920r 1 85 .lobytes $0085 +000921r 1 86 .lobytes $0086 +000922r 1 F0 .lobytes $00F0 +000923r 1 F1 .lobytes $00F1 +000924r 1 F2 .lobytes $00F2 +000925r 1 F3 .lobytes $00F3 +000926r 1 F4 .lobytes $00F4 +000927r 1 F5 .lobytes $00F5 +000928r 1 F6 .lobytes $00F6 +000929r 1 F7 .lobytes $00F7 +00092Ar 1 F8 .lobytes $00F8 +00092Br 1 F9 .lobytes $00F9 +00092Cr 1 FA .lobytes $00FA +00092Dr 1 FB .lobytes $00FB +00092Er 1 FC .lobytes $00FC +00092Fr 1 FD .lobytes $00FD +000930r 1 FE .lobytes $00FE +000931r 1 FF .lobytes $00FF +000932r 1 00 .lobytes $0100 +000933r 1 01 .lobytes $0101 +000934r 1 02 .lobytes $0102 +000935r 1 03 .lobytes $0103 +000936r 1 D2 .lobytes $0FD2 +000937r 1 D3 .lobytes $0FD3 +000938r 1 D4 .lobytes $0FD4 +000939r 1 D5 .lobytes $0FD5 +00093Ar 1 D6 .lobytes $0FD6 +00093Br 1 D7 .lobytes $0FD7 +00093Cr 1 D8 .lobytes $0FD8 +00093Dr 1 D9 .lobytes $0FD9 +00093Er 1 DA .lobytes $0FDA +00093Fr 1 DB .lobytes $0FDB +000940r 1 DC .lobytes $0FDC +000941r 1 DD .lobytes $0FDD +000942r 1 DE .lobytes $0FDE +000943r 1 DF .lobytes $0FDF +000944r 1 E0 .lobytes $0FE0 +000945r 1 E1 .lobytes $0FE1 +000946r 1 E2 .lobytes $0FE2 +000947r 1 E3 .lobytes $0FE3 +000948r 1 E4 .lobytes $0FE4 +000949r 1 E5 .lobytes $0FE5 +00094Ar 1 E6 .lobytes $0FE6 +00094Br 1 E7 .lobytes $0FE7 +00094Cr 1 E8 .lobytes $0FE8 +00094Dr 1 E9 .lobytes $0FE9 +00094Er 1 EA .lobytes $0FEA +00094Fr 1 EB .lobytes $0FEB +000950r 1 EC .lobytes $0FEC +000951r 1 ED .lobytes $0FED +000952r 1 EE .lobytes $0FEE +000953r 1 EF .lobytes $0FEF +000954r 1 F0 .lobytes $0FF0 +000955r 1 F1 .lobytes $0FF1 +000956r 1 F2 .lobytes $0FF2 +000957r 1 F3 .lobytes $0FF3 +000958r 1 F4 .lobytes $0FF4 +000959r 1 F5 .lobytes $0FF5 +00095Ar 1 F6 .lobytes $0FF6 +00095Br 1 F7 .lobytes $0FF7 +00095Cr 1 F8 .lobytes $0FF8 +00095Dr 1 F9 .lobytes $0FF9 +00095Er 1 FA .lobytes $0FFA +00095Fr 1 FB .lobytes $0FFB +000960r 1 FC .lobytes $0FFC +000961r 1 FD .lobytes $0FFD +000962r 1 FE .lobytes $0FFE +000963r 1 FF .lobytes $0FFF +000964r 1 00 .lobytes $1000 +000965r 1 01 .lobytes $1001 +000966r 1 02 .lobytes $1002 +000967r 1 03 .lobytes $1003 +000968r 1 04 .lobytes $1004 +000969r 1 05 .lobytes $1005 +00096Ar 1 06 .lobytes $1006 +00096Br 1 07 .lobytes $1007 +00096Cr 1 08 .lobytes $1008 +00096Dr 1 F0 .lobytes $7FF0 +00096Er 1 F1 .lobytes $7FF1 +00096Fr 1 F2 .lobytes $7FF2 +000970r 1 F3 .lobytes $7FF3 +000971r 1 F4 .lobytes $7FF4 +000972r 1 F5 .lobytes $7FF5 +000973r 1 F6 .lobytes $7FF6 +000974r 1 F7 .lobytes $7FF7 +000975r 1 F8 .lobytes $7FF8 +000976r 1 F9 .lobytes $7FF9 +000977r 1 FA .lobytes $7FFA +000978r 1 FB .lobytes $7FFB +000979r 1 FC .lobytes $7FFC +00097Ar 1 FD .lobytes $7FFD +00097Br 1 FE .lobytes $7FFE +00097Cr 1 FF .lobytes $7FFF +00097Dr 1 00 .lobytes $8000 +00097Er 1 01 .lobytes $8001 +00097Fr 1 02 .lobytes $8002 +000980r 1 03 .lobytes $8003 +000981r 1 04 .lobytes $8004 +000982r 1 05 .lobytes $8005 +000983r 1 06 .lobytes $8006 +000984r 1 07 .lobytes $8007 +000985r 1 08 .lobytes $8008 +000986r 1 09 .lobytes $8009 +000987r 1 0A .lobytes $800A +000988r 1 0B .lobytes $800B +000989r 1 E1 .lobytes $9FE1 +00098Ar 1 E2 .lobytes $9FE2 +00098Br 1 E3 .lobytes $9FE3 +00098Cr 1 E4 .lobytes $9FE4 +00098Dr 1 E5 .lobytes $9FE5 +00098Er 1 E6 .lobytes $9FE6 +00098Fr 1 E7 .lobytes $9FE7 +000990r 1 E8 .lobytes $9FE8 +000991r 1 E9 .lobytes $9FE9 +000992r 1 EA .lobytes $9FEA +000993r 1 EB .lobytes $9FEB +000994r 1 EC .lobytes $9FEC +000995r 1 ED .lobytes $9FED +000996r 1 EE .lobytes $9FEE +000997r 1 EF .lobytes $9FEF +000998r 1 F0 .lobytes $9FF0 +000999r 1 F1 .lobytes $9FF1 +00099Ar 1 F2 .lobytes $9FF2 +00099Br 1 F3 .lobytes $9FF3 +00099Cr 1 F4 .lobytes $9FF4 +00099Dr 1 F5 .lobytes $9FF5 +00099Er 1 F6 .lobytes $9FF6 +00099Fr 1 F7 .lobytes $9FF7 +0009A0r 1 F8 .lobytes $9FF8 +0009A1r 1 F9 .lobytes $9FF9 +0009A2r 1 FA .lobytes $9FFA +0009A3r 1 FB .lobytes $9FFB +0009A4r 1 FC .lobytes $9FFC +0009A5r 1 FD .lobytes $9FFD +0009A6r 1 FE .lobytes $9FFE +0009A7r 1 FF .lobytes $9FFF +0009A8r 1 00 .lobytes $A000 +0009A9r 1 01 .lobytes $A001 +0009AAr 1 02 .lobytes $A002 +0009ABr 1 03 .lobytes $A003 +0009ACr 1 04 .lobytes $A004 +0009ADr 1 05 .lobytes $A005 +0009AEr 1 06 .lobytes $A006 +0009AFr 1 07 .lobytes $A007 +0009B0r 1 08 .lobytes $A008 +0009B1r 1 09 .lobytes $A009 +0009B2r 1 0A .lobytes $A00A +0009B3r 1 0B .lobytes $A00B +0009B4r 1 0C .lobytes $A00C +0009B5r 1 0D .lobytes $A00D +0009B6r 1 0E .lobytes $A00E +0009B7r 1 0F .lobytes $A00F +0009B8r 1 E1 .lobytes $AFE1 +0009B9r 1 E2 .lobytes $AFE2 +0009BAr 1 E3 .lobytes $AFE3 +0009BBr 1 E4 .lobytes $AFE4 +0009BCr 1 E5 .lobytes $AFE5 +0009BDr 1 E6 .lobytes $AFE6 +0009BEr 1 E7 .lobytes $AFE7 +0009BFr 1 E8 .lobytes $AFE8 +0009C0r 1 E9 .lobytes $AFE9 +0009C1r 1 EA .lobytes $AFEA +0009C2r 1 EB .lobytes $AFEB +0009C3r 1 EC .lobytes $AFEC +0009C4r 1 ED .lobytes $AFED +0009C5r 1 EE .lobytes $AFEE +0009C6r 1 EF .lobytes $AFEF +0009C7r 1 F0 .lobytes $AFF0 +0009C8r 1 F1 .lobytes $AFF1 +0009C9r 1 F2 .lobytes $AFF2 +0009CAr 1 F3 .lobytes $AFF3 +0009CBr 1 F4 .lobytes $AFF4 +0009CCr 1 F5 .lobytes $AFF5 +0009CDr 1 F6 .lobytes $AFF6 +0009CEr 1 F7 .lobytes $AFF7 +0009CFr 1 F8 .lobytes $AFF8 +0009D0r 1 F9 .lobytes $AFF9 +0009D1r 1 FA .lobytes $AFFA +0009D2r 1 FB .lobytes $AFFB +0009D3r 1 FC .lobytes $AFFC +0009D4r 1 FD .lobytes $AFFD +0009D5r 1 FE .lobytes $AFFE +0009D6r 1 FF .lobytes $AFFF +0009D7r 1 00 .lobytes $B000 +0009D8r 1 01 .lobytes $B001 +0009D9r 1 02 .lobytes $B002 +0009DAr 1 03 .lobytes $B003 +0009DBr 1 04 .lobytes $B004 +0009DCr 1 05 .lobytes $B005 +0009DDr 1 06 .lobytes $B006 +0009DEr 1 07 .lobytes $B007 +0009DFr 1 08 .lobytes $B008 +0009E0r 1 09 .lobytes $B009 +0009E1r 1 0A .lobytes $B00A +0009E2r 1 0B .lobytes $B00B +0009E3r 1 0C .lobytes $B00C +0009E4r 1 0D .lobytes $B00D +0009E5r 1 0E .lobytes $B00E +0009E6r 1 0F .lobytes $B00F +0009E7r 1 E1 .lobytes $BFE1 +0009E8r 1 E2 .lobytes $BFE2 +0009E9r 1 E3 .lobytes $BFE3 +0009EAr 1 E4 .lobytes $BFE4 +0009EBr 1 E5 .lobytes $BFE5 +0009ECr 1 E6 .lobytes $BFE6 +0009EDr 1 E7 .lobytes $BFE7 +0009EEr 1 E8 .lobytes $BFE8 +0009EFr 1 E9 .lobytes $BFE9 +0009F0r 1 EA .lobytes $BFEA +0009F1r 1 EB .lobytes $BFEB +0009F2r 1 EC .lobytes $BFEC +0009F3r 1 ED .lobytes $BFED +0009F4r 1 EE .lobytes $BFEE +0009F5r 1 EF .lobytes $BFEF +0009F6r 1 F0 .lobytes $BFF0 +0009F7r 1 F1 .lobytes $BFF1 +0009F8r 1 F2 .lobytes $BFF2 +0009F9r 1 F3 .lobytes $BFF3 +0009FAr 1 F4 .lobytes $BFF4 +0009FBr 1 F5 .lobytes $BFF5 +0009FCr 1 F6 .lobytes $BFF6 +0009FDr 1 F7 .lobytes $BFF7 +0009FEr 1 F8 .lobytes $BFF8 +0009FFr 1 F9 .lobytes $BFF9 +000A00r 1 FA .lobytes $BFFA +000A01r 1 FB .lobytes $BFFB +000A02r 1 FC .lobytes $BFFC +000A03r 1 FD .lobytes $BFFD +000A04r 1 FE .lobytes $BFFE +000A05r 1 FF .lobytes $BFFF +000A06r 1 00 .lobytes $C000 +000A07r 1 01 .lobytes $C001 +000A08r 1 02 .lobytes $C002 +000A09r 1 03 .lobytes $C003 +000A0Ar 1 04 .lobytes $C004 +000A0Br 1 05 .lobytes $C005 +000A0Cr 1 06 .lobytes $C006 +000A0Dr 1 07 .lobytes $C007 +000A0Er 1 08 .lobytes $C008 +000A0Fr 1 09 .lobytes $C009 +000A10r 1 0A .lobytes $C00A +000A11r 1 0B .lobytes $C00B +000A12r 1 0C .lobytes $C00C +000A13r 1 0D .lobytes $C00D +000A14r 1 0E .lobytes $C00E +000A15r 1 0F .lobytes $C00F +000A16r 1 E1 .lobytes $CFE1 +000A17r 1 E2 .lobytes $CFE2 +000A18r 1 E3 .lobytes $CFE3 +000A19r 1 E4 .lobytes $CFE4 +000A1Ar 1 E5 .lobytes $CFE5 +000A1Br 1 E6 .lobytes $CFE6 +000A1Cr 1 E7 .lobytes $CFE7 +000A1Dr 1 E8 .lobytes $CFE8 +000A1Er 1 E9 .lobytes $CFE9 +000A1Fr 1 EA .lobytes $CFEA +000A20r 1 EB .lobytes $CFEB +000A21r 1 EC .lobytes $CFEC +000A22r 1 ED .lobytes $CFED +000A23r 1 EE .lobytes $CFEE +000A24r 1 EF .lobytes $CFEF +000A25r 1 F0 .lobytes $CFF0 +000A26r 1 F1 .lobytes $CFF1 +000A27r 1 F2 .lobytes $CFF2 +000A28r 1 F3 .lobytes $CFF3 +000A29r 1 F4 .lobytes $CFF4 +000A2Ar 1 F5 .lobytes $CFF5 +000A2Br 1 F6 .lobytes $CFF6 +000A2Cr 1 F7 .lobytes $CFF7 +000A2Dr 1 F8 .lobytes $CFF8 +000A2Er 1 F9 .lobytes $CFF9 +000A2Fr 1 FA .lobytes $CFFA +000A30r 1 FB .lobytes $CFFB +000A31r 1 FC .lobytes $CFFC +000A32r 1 FD .lobytes $CFFD +000A33r 1 FE .lobytes $CFFE +000A34r 1 FF .lobytes $CFFF +000A35r 1 00 .lobytes $D000 +000A36r 1 01 .lobytes $D001 +000A37r 1 02 .lobytes $D002 +000A38r 1 03 .lobytes $D003 +000A39r 1 04 .lobytes $D004 +000A3Ar 1 05 .lobytes $D005 +000A3Br 1 06 .lobytes $D006 +000A3Cr 1 07 .lobytes $D007 +000A3Dr 1 08 .lobytes $D008 +000A3Er 1 09 .lobytes $D009 +000A3Fr 1 0A .lobytes $D00A +000A40r 1 0B .lobytes $D00B +000A41r 1 0C .lobytes $D00C +000A42r 1 0D .lobytes $D00D +000A43r 1 0E .lobytes $D00E +000A44r 1 0F .lobytes $D00F +000A45r 1 E1 .lobytes $DFE1 +000A46r 1 E2 .lobytes $DFE2 +000A47r 1 E3 .lobytes $DFE3 +000A48r 1 E4 .lobytes $DFE4 +000A49r 1 E5 .lobytes $DFE5 +000A4Ar 1 E6 .lobytes $DFE6 +000A4Br 1 E7 .lobytes $DFE7 +000A4Cr 1 E8 .lobytes $DFE8 +000A4Dr 1 E9 .lobytes $DFE9 +000A4Er 1 EA .lobytes $DFEA +000A4Fr 1 EB .lobytes $DFEB +000A50r 1 EC .lobytes $DFEC +000A51r 1 ED .lobytes $DFED +000A52r 1 EE .lobytes $DFEE +000A53r 1 EF .lobytes $DFEF +000A54r 1 F0 .lobytes $DFF0 +000A55r 1 F1 .lobytes $DFF1 +000A56r 1 F2 .lobytes $DFF2 +000A57r 1 F3 .lobytes $DFF3 +000A58r 1 F4 .lobytes $DFF4 +000A59r 1 F5 .lobytes $DFF5 +000A5Ar 1 F6 .lobytes $DFF6 +000A5Br 1 F7 .lobytes $DFF7 +000A5Cr 1 F8 .lobytes $DFF8 +000A5Dr 1 F9 .lobytes $DFF9 +000A5Er 1 FA .lobytes $DFFA +000A5Fr 1 FB .lobytes $DFFB +000A60r 1 FC .lobytes $DFFC +000A61r 1 FD .lobytes $DFFD +000A62r 1 FE .lobytes $DFFE +000A63r 1 FF .lobytes $DFFF +000A64r 1 00 .lobytes $E000 +000A65r 1 01 .lobytes $E001 +000A66r 1 02 .lobytes $E002 +000A67r 1 03 .lobytes $E003 +000A68r 1 04 .lobytes $E004 +000A69r 1 05 .lobytes $E005 +000A6Ar 1 06 .lobytes $E006 +000A6Br 1 07 .lobytes $E007 +000A6Cr 1 08 .lobytes $E008 +000A6Dr 1 09 .lobytes $E009 +000A6Er 1 0A .lobytes $E00A +000A6Fr 1 0B .lobytes $E00B +000A70r 1 0C .lobytes $E00C +000A71r 1 0D .lobytes $E00D +000A72r 1 0E .lobytes $E00E +000A73r 1 0F .lobytes $E00F +000A74r 1 E1 .lobytes $EFE1 +000A75r 1 E2 .lobytes $EFE2 +000A76r 1 E3 .lobytes $EFE3 +000A77r 1 E4 .lobytes $EFE4 +000A78r 1 E5 .lobytes $EFE5 +000A79r 1 E6 .lobytes $EFE6 +000A7Ar 1 E7 .lobytes $EFE7 +000A7Br 1 E8 .lobytes $EFE8 +000A7Cr 1 E9 .lobytes $EFE9 +000A7Dr 1 EA .lobytes $EFEA +000A7Er 1 EB .lobytes $EFEB +000A7Fr 1 EC .lobytes $EFEC +000A80r 1 ED .lobytes $EFED +000A81r 1 EE .lobytes $EFEE +000A82r 1 EF .lobytes $EFEF +000A83r 1 F0 .lobytes $EFF0 +000A84r 1 F1 .lobytes $EFF1 +000A85r 1 F2 .lobytes $EFF2 +000A86r 1 F3 .lobytes $EFF3 +000A87r 1 F4 .lobytes $EFF4 +000A88r 1 F5 .lobytes $EFF5 +000A89r 1 F6 .lobytes $EFF6 +000A8Ar 1 F7 .lobytes $EFF7 +000A8Br 1 F8 .lobytes $EFF8 +000A8Cr 1 F9 .lobytes $EFF9 +000A8Dr 1 FA .lobytes $EFFA +000A8Er 1 FB .lobytes $EFFB +000A8Fr 1 FC .lobytes $EFFC +000A90r 1 FD .lobytes $EFFD +000A91r 1 FE .lobytes $EFFE +000A92r 1 FF .lobytes $EFFF +000A93r 1 00 .lobytes $F000 +000A94r 1 01 .lobytes $F001 +000A95r 1 02 .lobytes $F002 +000A96r 1 03 .lobytes $F003 +000A97r 1 04 .lobytes $F004 +000A98r 1 05 .lobytes $F005 +000A99r 1 06 .lobytes $F006 +000A9Ar 1 07 .lobytes $F007 +000A9Br 1 08 .lobytes $F008 +000A9Cr 1 09 .lobytes $F009 +000A9Dr 1 0A .lobytes $F00A +000A9Er 1 0B .lobytes $F00B +000A9Fr 1 0C .lobytes $F00C +000AA0r 1 0D .lobytes $F00D +000AA1r 1 0E .lobytes $F00E +000AA2r 1 0F .lobytes $F00F +000AA3r 1 E1 .lobytes $FFE1 +000AA4r 1 E2 .lobytes $FFE2 +000AA5r 1 E3 .lobytes $FFE3 +000AA6r 1 E4 .lobytes $FFE4 +000AA7r 1 E5 .lobytes $FFE5 +000AA8r 1 E6 .lobytes $FFE6 +000AA9r 1 E7 .lobytes $FFE7 +000AAAr 1 E8 .lobytes $FFE8 +000AABr 1 E9 .lobytes $FFE9 +000AACr 1 EA .lobytes $FFEA +000AADr 1 EB .lobytes $FFEB +000AAEr 1 EC .lobytes $FFEC +000AAFr 1 ED .lobytes $FFED +000AB0r 1 EE .lobytes $FFEE +000AB1r 1 EF .lobytes $FFEF +000AB2r 1 F0 .lobytes $FFF0 +000AB3r 1 F1 .lobytes $FFF1 +000AB4r 1 F2 .lobytes $FFF2 +000AB5r 1 F3 .lobytes $FFF3 +000AB6r 1 F4 .lobytes $FFF4 +000AB7r 1 F5 .lobytes $FFF5 +000AB8r 1 F6 .lobytes $FFF6 +000AB9r 1 F7 .lobytes $FFF7 +000ABAr 1 F8 .lobytes $FFF8 +000ABBr 1 F9 .lobytes $FFF9 +000ABCr 1 FA .lobytes $FFFA +000ABDr 1 FB .lobytes $FFFB +000ABEr 1 FC .lobytes $FFFC +000ABFr 1 FD .lobytes $FFFD +000AC0r 1 FE .lobytes $FFFE +000AC1r 1 FF .lobytes $FFFF +000AC2r 1 +000AC2r 1 ; alternative hex values +000AC2r 1 00 .lobytes 0h +000AC3r 1 01 .lobytes 1h +000AC4r 1 02 .lobytes 2h +000AC5r 1 03 .lobytes 3h +000AC6r 1 04 .lobytes 4h +000AC7r 1 05 .lobytes 5h +000AC8r 1 06 .lobytes 6h +000AC9r 1 07 .lobytes 7h +000ACAr 1 08 .lobytes 8h +000ACBr 1 09 .lobytes 9h +000ACCr 1 0A .lobytes 0ah +000ACDr 1 0B .lobytes 0bh +000ACEr 1 0C .lobytes 0ch +000ACFr 1 0D .lobytes 0dh +000AD0r 1 0E .lobytes 0eh +000AD1r 1 0F .lobytes 0fh +000AD2r 1 10 .lobytes 10h +000AD3r 1 11 .lobytes 11h +000AD4r 1 12 .lobytes 12h +000AD5r 1 13 .lobytes 13h +000AD6r 1 70 .lobytes 70h +000AD7r 1 71 .lobytes 71h +000AD8r 1 72 .lobytes 72h +000AD9r 1 73 .lobytes 73h +000ADAr 1 74 .lobytes 74h +000ADBr 1 75 .lobytes 75h +000ADCr 1 76 .lobytes 76h +000ADDr 1 77 .lobytes 77h +000ADEr 1 78 .lobytes 78h +000ADFr 1 79 .lobytes 79h +000AE0r 1 7A .lobytes 7ah +000AE1r 1 7B .lobytes 7bh +000AE2r 1 7C .lobytes 7ch +000AE3r 1 7D .lobytes 7dh +000AE4r 1 7E .lobytes 7eh +000AE5r 1 7F .lobytes 7fh +000AE6r 1 80 .lobytes 80h +000AE7r 1 81 .lobytes 81h +000AE8r 1 82 .lobytes 82h +000AE9r 1 83 .lobytes 83h +000AEAr 1 84 .lobytes 84h +000AEBr 1 85 .lobytes 85h +000AECr 1 86 .lobytes 86h +000AEDr 1 F0 .lobytes 0f0h +000AEEr 1 F1 .lobytes 0f1h +000AEFr 1 F2 .lobytes 0f2h +000AF0r 1 F3 .lobytes 0f3h +000AF1r 1 F4 .lobytes 0f4h +000AF2r 1 F5 .lobytes 0f5h +000AF3r 1 F6 .lobytes 0f6h +000AF4r 1 F7 .lobytes 0f7h +000AF5r 1 F8 .lobytes 0f8h +000AF6r 1 F9 .lobytes 0f9h +000AF7r 1 FA .lobytes 0fah +000AF8r 1 FB .lobytes 0fbh +000AF9r 1 FC .lobytes 0fch +000AFAr 1 FD .lobytes 0fdh +000AFBr 1 FE .lobytes 0feh +000AFCr 1 FF .lobytes 0ffh +000AFDr 1 00 .lobytes 100h +000AFEr 1 01 .lobytes 101h +000AFFr 1 02 .lobytes 102h +000B00r 1 03 .lobytes 103h +000B01r 1 D2 .lobytes 0fd2h +000B02r 1 D3 .lobytes 0fd3h +000B03r 1 D4 .lobytes 0fd4h +000B04r 1 D5 .lobytes 0fd5h +000B05r 1 D6 .lobytes 0fd6h +000B06r 1 D7 .lobytes 0fd7h +000B07r 1 D8 .lobytes 0fd8h +000B08r 1 D9 .lobytes 0fd9h +000B09r 1 DA .lobytes 0fdah +000B0Ar 1 DB .lobytes 0fdbh +000B0Br 1 DC .lobytes 0fdch +000B0Cr 1 DD .lobytes 0fddh +000B0Dr 1 DE .lobytes 0fdeh +000B0Er 1 DF .lobytes 0fdfh +000B0Fr 1 E0 .lobytes 0fe0h +000B10r 1 E1 .lobytes 0fe1h +000B11r 1 E2 .lobytes 0fe2h +000B12r 1 E3 .lobytes 0fe3h +000B13r 1 E4 .lobytes 0fe4h +000B14r 1 E5 .lobytes 0fe5h +000B15r 1 E6 .lobytes 0fe6h +000B16r 1 E7 .lobytes 0fe7h +000B17r 1 E8 .lobytes 0fe8h +000B18r 1 E9 .lobytes 0fe9h +000B19r 1 EA .lobytes 0feah +000B1Ar 1 EB .lobytes 0febh +000B1Br 1 EC .lobytes 0fech +000B1Cr 1 ED .lobytes 0fedh +000B1Dr 1 EE .lobytes 0feeh +000B1Er 1 EF .lobytes 0fefh +000B1Fr 1 F0 .lobytes 0ff0h +000B20r 1 F1 .lobytes 0ff1h +000B21r 1 F2 .lobytes 0ff2h +000B22r 1 F3 .lobytes 0ff3h +000B23r 1 F4 .lobytes 0ff4h +000B24r 1 F5 .lobytes 0ff5h +000B25r 1 F6 .lobytes 0ff6h +000B26r 1 F7 .lobytes 0ff7h +000B27r 1 F8 .lobytes 0ff8h +000B28r 1 F9 .lobytes 0ff9h +000B29r 1 FA .lobytes 0ffah +000B2Ar 1 FB .lobytes 0ffbh +000B2Br 1 FC .lobytes 0ffch +000B2Cr 1 FD .lobytes 0ffdh +000B2Dr 1 FE .lobytes 0ffeh +000B2Er 1 FF .lobytes 0fffh +000B2Fr 1 00 .lobytes 1000h +000B30r 1 01 .lobytes 1001h +000B31r 1 02 .lobytes 1002h +000B32r 1 03 .lobytes 1003h +000B33r 1 04 .lobytes 1004h +000B34r 1 05 .lobytes 1005h +000B35r 1 06 .lobytes 1006h +000B36r 1 07 .lobytes 1007h +000B37r 1 08 .lobytes 1008h +000B38r 1 F0 .lobytes 7ff0h +000B39r 1 F1 .lobytes 7ff1h +000B3Ar 1 F2 .lobytes 7ff2h +000B3Br 1 F3 .lobytes 7ff3h +000B3Cr 1 F4 .lobytes 7ff4h +000B3Dr 1 F5 .lobytes 7ff5h +000B3Er 1 F6 .lobytes 7ff6h +000B3Fr 1 F7 .lobytes 7ff7h +000B40r 1 F8 .lobytes 7ff8h +000B41r 1 F9 .lobytes 7ff9h +000B42r 1 FA .lobytes 7ffah +000B43r 1 FB .lobytes 7ffbh +000B44r 1 FC .lobytes 7ffch +000B45r 1 FD .lobytes 7ffdh +000B46r 1 FE .lobytes 7ffeh +000B47r 1 FF .lobytes 7fffh +000B48r 1 00 .lobytes 8000h +000B49r 1 01 .lobytes 8001h +000B4Ar 1 02 .lobytes 8002h +000B4Br 1 03 .lobytes 8003h +000B4Cr 1 04 .lobytes 8004h +000B4Dr 1 05 .lobytes 8005h +000B4Er 1 06 .lobytes 8006h +000B4Fr 1 07 .lobytes 8007h +000B50r 1 08 .lobytes 8008h +000B51r 1 09 .lobytes 8009h +000B52r 1 0A .lobytes 800ah +000B53r 1 0B .lobytes 800bh +000B54r 1 E1 .lobytes 9fe1h +000B55r 1 E2 .lobytes 9fe2h +000B56r 1 E3 .lobytes 9fe3h +000B57r 1 E4 .lobytes 9fe4h +000B58r 1 E5 .lobytes 9fe5h +000B59r 1 E6 .lobytes 9fe6h +000B5Ar 1 E7 .lobytes 9fe7h +000B5Br 1 E8 .lobytes 9fe8h +000B5Cr 1 E9 .lobytes 9fe9h +000B5Dr 1 EA .lobytes 9feah +000B5Er 1 EB .lobytes 9febh +000B5Fr 1 EC .lobytes 9fech +000B60r 1 ED .lobytes 9fedh +000B61r 1 EE .lobytes 9feeh +000B62r 1 EF .lobytes 9fefh +000B63r 1 F0 .lobytes 9ff0h +000B64r 1 F1 .lobytes 9ff1h +000B65r 1 F2 .lobytes 9ff2h +000B66r 1 F3 .lobytes 9ff3h +000B67r 1 F4 .lobytes 9ff4h +000B68r 1 F5 .lobytes 9ff5h +000B69r 1 F6 .lobytes 9ff6h +000B6Ar 1 F7 .lobytes 9ff7h +000B6Br 1 F8 .lobytes 9ff8h +000B6Cr 1 F9 .lobytes 9ff9h +000B6Dr 1 FA .lobytes 9ffah +000B6Er 1 FB .lobytes 9ffbh +000B6Fr 1 FC .lobytes 9ffch +000B70r 1 FD .lobytes 9ffdh +000B71r 1 FE .lobytes 9ffeh +000B72r 1 FF .lobytes 9fffh +000B73r 1 00 .lobytes 0a000h +000B74r 1 01 .lobytes 0a001h +000B75r 1 02 .lobytes 0a002h +000B76r 1 03 .lobytes 0a003h +000B77r 1 04 .lobytes 0a004h +000B78r 1 05 .lobytes 0a005h +000B79r 1 06 .lobytes 0a006h +000B7Ar 1 07 .lobytes 0a007h +000B7Br 1 08 .lobytes 0a008h +000B7Cr 1 09 .lobytes 0a009h +000B7Dr 1 0A .lobytes 0a00ah +000B7Er 1 0B .lobytes 0a00bh +000B7Fr 1 0C .lobytes 0a00ch +000B80r 1 0D .lobytes 0a00dh +000B81r 1 0E .lobytes 0a00eh +000B82r 1 0F .lobytes 0a00fh +000B83r 1 E1 .lobytes 0afe1h +000B84r 1 E2 .lobytes 0afe2h +000B85r 1 E3 .lobytes 0afe3h +000B86r 1 E4 .lobytes 0afe4h +000B87r 1 E5 .lobytes 0afe5h +000B88r 1 E6 .lobytes 0afe6h +000B89r 1 E7 .lobytes 0afe7h +000B8Ar 1 E8 .lobytes 0afe8h +000B8Br 1 E9 .lobytes 0afe9h +000B8Cr 1 EA .lobytes 0afeah +000B8Dr 1 EB .lobytes 0afebh +000B8Er 1 EC .lobytes 0afech +000B8Fr 1 ED .lobytes 0afedh +000B90r 1 EE .lobytes 0afeeh +000B91r 1 EF .lobytes 0afefh +000B92r 1 F0 .lobytes 0aff0h +000B93r 1 F1 .lobytes 0aff1h +000B94r 1 F2 .lobytes 0aff2h +000B95r 1 F3 .lobytes 0aff3h +000B96r 1 F4 .lobytes 0aff4h +000B97r 1 F5 .lobytes 0aff5h +000B98r 1 F6 .lobytes 0aff6h +000B99r 1 F7 .lobytes 0aff7h +000B9Ar 1 F8 .lobytes 0aff8h +000B9Br 1 F9 .lobytes 0aff9h +000B9Cr 1 FA .lobytes 0affah +000B9Dr 1 FB .lobytes 0affbh +000B9Er 1 FC .lobytes 0affch +000B9Fr 1 FD .lobytes 0affdh +000BA0r 1 FE .lobytes 0affeh +000BA1r 1 FF .lobytes 0afffh +000BA2r 1 00 .lobytes 0b000h +000BA3r 1 01 .lobytes 0b001h +000BA4r 1 02 .lobytes 0b002h +000BA5r 1 03 .lobytes 0b003h +000BA6r 1 04 .lobytes 0b004h +000BA7r 1 05 .lobytes 0b005h +000BA8r 1 06 .lobytes 0b006h +000BA9r 1 07 .lobytes 0b007h +000BAAr 1 08 .lobytes 0b008h +000BABr 1 09 .lobytes 0b009h +000BACr 1 0A .lobytes 0b00ah +000BADr 1 0B .lobytes 0b00bh +000BAEr 1 0C .lobytes 0b00ch +000BAFr 1 0D .lobytes 0b00dh +000BB0r 1 0E .lobytes 0b00eh +000BB1r 1 0F .lobytes 0b00fh +000BB2r 1 E1 .lobytes 0bfe1h +000BB3r 1 E2 .lobytes 0bfe2h +000BB4r 1 E3 .lobytes 0bfe3h +000BB5r 1 E4 .lobytes 0bfe4h +000BB6r 1 E5 .lobytes 0bfe5h +000BB7r 1 E6 .lobytes 0bfe6h +000BB8r 1 E7 .lobytes 0bfe7h +000BB9r 1 E8 .lobytes 0bfe8h +000BBAr 1 E9 .lobytes 0bfe9h +000BBBr 1 EA .lobytes 0bfeah +000BBCr 1 EB .lobytes 0bfebh +000BBDr 1 EC .lobytes 0bfech +000BBEr 1 ED .lobytes 0bfedh +000BBFr 1 EE .lobytes 0bfeeh +000BC0r 1 EF .lobytes 0bfefh +000BC1r 1 F0 .lobytes 0bff0h +000BC2r 1 F1 .lobytes 0bff1h +000BC3r 1 F2 .lobytes 0bff2h +000BC4r 1 F3 .lobytes 0bff3h +000BC5r 1 F4 .lobytes 0bff4h +000BC6r 1 F5 .lobytes 0bff5h +000BC7r 1 F6 .lobytes 0bff6h +000BC8r 1 F7 .lobytes 0bff7h +000BC9r 1 F8 .lobytes 0bff8h +000BCAr 1 F9 .lobytes 0bff9h +000BCBr 1 FA .lobytes 0bffah +000BCCr 1 FB .lobytes 0bffbh +000BCDr 1 FC .lobytes 0bffch +000BCEr 1 FD .lobytes 0bffdh +000BCFr 1 FE .lobytes 0bffeh +000BD0r 1 FF .lobytes 0bfffh +000BD1r 1 00 .lobytes 0c000h +000BD2r 1 01 .lobytes 0c001h +000BD3r 1 02 .lobytes 0c002h +000BD4r 1 03 .lobytes 0c003h +000BD5r 1 04 .lobytes 0c004h +000BD6r 1 05 .lobytes 0c005h +000BD7r 1 06 .lobytes 0c006h +000BD8r 1 07 .lobytes 0c007h +000BD9r 1 08 .lobytes 0c008h +000BDAr 1 09 .lobytes 0c009h +000BDBr 1 0A .lobytes 0c00ah +000BDCr 1 0B .lobytes 0c00bh +000BDDr 1 0C .lobytes 0c00ch +000BDEr 1 0D .lobytes 0c00dh +000BDFr 1 0E .lobytes 0c00eh +000BE0r 1 0F .lobytes 0c00fh +000BE1r 1 E1 .lobytes 0cfe1h +000BE2r 1 E2 .lobytes 0cfe2h +000BE3r 1 E3 .lobytes 0cfe3h +000BE4r 1 E4 .lobytes 0cfe4h +000BE5r 1 E5 .lobytes 0cfe5h +000BE6r 1 E6 .lobytes 0cfe6h +000BE7r 1 E7 .lobytes 0cfe7h +000BE8r 1 E8 .lobytes 0cfe8h +000BE9r 1 E9 .lobytes 0cfe9h +000BEAr 1 EA .lobytes 0cfeah +000BEBr 1 EB .lobytes 0cfebh +000BECr 1 EC .lobytes 0cfech +000BEDr 1 ED .lobytes 0cfedh +000BEEr 1 EE .lobytes 0cfeeh +000BEFr 1 EF .lobytes 0cfefh +000BF0r 1 F0 .lobytes 0cff0h +000BF1r 1 F1 .lobytes 0cff1h +000BF2r 1 F2 .lobytes 0cff2h +000BF3r 1 F3 .lobytes 0cff3h +000BF4r 1 F4 .lobytes 0cff4h +000BF5r 1 F5 .lobytes 0cff5h +000BF6r 1 F6 .lobytes 0cff6h +000BF7r 1 F7 .lobytes 0cff7h +000BF8r 1 F8 .lobytes 0cff8h +000BF9r 1 F9 .lobytes 0cff9h +000BFAr 1 FA .lobytes 0cffah +000BFBr 1 FB .lobytes 0cffbh +000BFCr 1 FC .lobytes 0cffch +000BFDr 1 FD .lobytes 0cffdh +000BFEr 1 FE .lobytes 0cffeh +000BFFr 1 FF .lobytes 0cfffh +000C00r 1 00 .lobytes 0d000h +000C01r 1 01 .lobytes 0d001h +000C02r 1 02 .lobytes 0d002h +000C03r 1 03 .lobytes 0d003h +000C04r 1 04 .lobytes 0d004h +000C05r 1 05 .lobytes 0d005h +000C06r 1 06 .lobytes 0d006h +000C07r 1 07 .lobytes 0d007h +000C08r 1 08 .lobytes 0d008h +000C09r 1 09 .lobytes 0d009h +000C0Ar 1 0A .lobytes 0d00ah +000C0Br 1 0B .lobytes 0d00bh +000C0Cr 1 0C .lobytes 0d00ch +000C0Dr 1 0D .lobytes 0d00dh +000C0Er 1 0E .lobytes 0d00eh +000C0Fr 1 0F .lobytes 0d00fh +000C10r 1 E1 .lobytes 0dfe1h +000C11r 1 E2 .lobytes 0dfe2h +000C12r 1 E3 .lobytes 0dfe3h +000C13r 1 E4 .lobytes 0dfe4h +000C14r 1 E5 .lobytes 0dfe5h +000C15r 1 E6 .lobytes 0dfe6h +000C16r 1 E7 .lobytes 0dfe7h +000C17r 1 E8 .lobytes 0dfe8h +000C18r 1 E9 .lobytes 0dfe9h +000C19r 1 EA .lobytes 0dfeah +000C1Ar 1 EB .lobytes 0dfebh +000C1Br 1 EC .lobytes 0dfech +000C1Cr 1 ED .lobytes 0dfedh +000C1Dr 1 EE .lobytes 0dfeeh +000C1Er 1 EF .lobytes 0dfefh +000C1Fr 1 F0 .lobytes 0dff0h +000C20r 1 F1 .lobytes 0dff1h +000C21r 1 F2 .lobytes 0dff2h +000C22r 1 F3 .lobytes 0dff3h +000C23r 1 F4 .lobytes 0dff4h +000C24r 1 F5 .lobytes 0dff5h +000C25r 1 F6 .lobytes 0dff6h +000C26r 1 F7 .lobytes 0dff7h +000C27r 1 F8 .lobytes 0dff8h +000C28r 1 F9 .lobytes 0dff9h +000C29r 1 FA .lobytes 0dffah +000C2Ar 1 FB .lobytes 0dffbh +000C2Br 1 FC .lobytes 0dffch +000C2Cr 1 FD .lobytes 0dffdh +000C2Dr 1 FE .lobytes 0dffeh +000C2Er 1 FF .lobytes 0dfffh +000C2Fr 1 00 .lobytes 0e000h +000C30r 1 01 .lobytes 0e001h +000C31r 1 02 .lobytes 0e002h +000C32r 1 03 .lobytes 0e003h +000C33r 1 04 .lobytes 0e004h +000C34r 1 05 .lobytes 0e005h +000C35r 1 06 .lobytes 0e006h +000C36r 1 07 .lobytes 0e007h +000C37r 1 08 .lobytes 0e008h +000C38r 1 09 .lobytes 0e009h +000C39r 1 0A .lobytes 0e00ah +000C3Ar 1 0B .lobytes 0e00bh +000C3Br 1 0C .lobytes 0e00ch +000C3Cr 1 0D .lobytes 0e00dh +000C3Dr 1 0E .lobytes 0e00eh +000C3Er 1 0F .lobytes 0e00fh +000C3Fr 1 E1 .lobytes 0efe1h +000C40r 1 E2 .lobytes 0efe2h +000C41r 1 E3 .lobytes 0efe3h +000C42r 1 E4 .lobytes 0efe4h +000C43r 1 E5 .lobytes 0efe5h +000C44r 1 E6 .lobytes 0efe6h +000C45r 1 E7 .lobytes 0efe7h +000C46r 1 E8 .lobytes 0efe8h +000C47r 1 E9 .lobytes 0efe9h +000C48r 1 EA .lobytes 0efeah +000C49r 1 EB .lobytes 0efebh +000C4Ar 1 EC .lobytes 0efech +000C4Br 1 ED .lobytes 0efedh +000C4Cr 1 EE .lobytes 0efeeh +000C4Dr 1 EF .lobytes 0efefh +000C4Er 1 F0 .lobytes 0eff0h +000C4Fr 1 F1 .lobytes 0eff1h +000C50r 1 F2 .lobytes 0eff2h +000C51r 1 F3 .lobytes 0eff3h +000C52r 1 F4 .lobytes 0eff4h +000C53r 1 F5 .lobytes 0eff5h +000C54r 1 F6 .lobytes 0eff6h +000C55r 1 F7 .lobytes 0eff7h +000C56r 1 F8 .lobytes 0eff8h +000C57r 1 F9 .lobytes 0eff9h +000C58r 1 FA .lobytes 0effah +000C59r 1 FB .lobytes 0effbh +000C5Ar 1 FC .lobytes 0effch +000C5Br 1 FD .lobytes 0effdh +000C5Cr 1 FE .lobytes 0effeh +000C5Dr 1 FF .lobytes 0efffh +000C5Er 1 00 .lobytes 0f000h +000C5Fr 1 01 .lobytes 0f001h +000C60r 1 02 .lobytes 0f002h +000C61r 1 03 .lobytes 0f003h +000C62r 1 04 .lobytes 0f004h +000C63r 1 05 .lobytes 0f005h +000C64r 1 06 .lobytes 0f006h +000C65r 1 07 .lobytes 0f007h +000C66r 1 08 .lobytes 0f008h +000C67r 1 09 .lobytes 0f009h +000C68r 1 0A .lobytes 0f00ah +000C69r 1 0B .lobytes 0f00bh +000C6Ar 1 0C .lobytes 0f00ch +000C6Br 1 0D .lobytes 0f00dh +000C6Cr 1 0E .lobytes 0f00eh +000C6Dr 1 0F .lobytes 0f00fh +000C6Er 1 E1 .lobytes 0ffe1h +000C6Fr 1 E2 .lobytes 0ffe2h +000C70r 1 E3 .lobytes 0ffe3h +000C71r 1 E4 .lobytes 0ffe4h +000C72r 1 E5 .lobytes 0ffe5h +000C73r 1 E6 .lobytes 0ffe6h +000C74r 1 E7 .lobytes 0ffe7h +000C75r 1 E8 .lobytes 0ffe8h +000C76r 1 E9 .lobytes 0ffe9h +000C77r 1 EA .lobytes 0ffeah +000C78r 1 EB .lobytes 0ffebh +000C79r 1 EC .lobytes 0ffech +000C7Ar 1 ED .lobytes 0ffedh +000C7Br 1 EE .lobytes 0ffeeh +000C7Cr 1 EF .lobytes 0ffefh +000C7Dr 1 F0 .lobytes 0fff0h +000C7Er 1 F1 .lobytes 0fff1h +000C7Fr 1 F2 .lobytes 0fff2h +000C80r 1 F3 .lobytes 0fff3h +000C81r 1 F4 .lobytes 0fff4h +000C82r 1 F5 .lobytes 0fff5h +000C83r 1 F6 .lobytes 0fff6h +000C84r 1 F7 .lobytes 0fff7h +000C85r 1 F8 .lobytes 0fff8h +000C86r 1 F9 .lobytes 0fff9h +000C87r 1 FA .lobytes 0fffah +000C88r 1 FB .lobytes 0fffbh +000C89r 1 FC .lobytes 0fffch +000C8Ar 1 FD .lobytes 0fffdh +000C8Br 1 FE .lobytes 0fffeh +000C8Cr 1 FF .lobytes 0ffffh +000C8Dr 1 +000C8Dr 1 ; alternative hex values, uppercase +000C8Dr 1 00 .lobytes 0h +000C8Er 1 01 .lobytes 1h +000C8Fr 1 02 .lobytes 2h +000C90r 1 03 .lobytes 3h +000C91r 1 04 .lobytes 4h +000C92r 1 05 .lobytes 5h +000C93r 1 06 .lobytes 6h +000C94r 1 07 .lobytes 7h +000C95r 1 08 .lobytes 8h +000C96r 1 09 .lobytes 9h +000C97r 1 0A .lobytes 0Ah +000C98r 1 0B .lobytes 0Bh +000C99r 1 0C .lobytes 0Ch +000C9Ar 1 0D .lobytes 0Dh +000C9Br 1 0E .lobytes 0Eh +000C9Cr 1 0F .lobytes 0Fh +000C9Dr 1 10 .lobytes 10h +000C9Er 1 11 .lobytes 11h +000C9Fr 1 12 .lobytes 12h +000CA0r 1 13 .lobytes 13h +000CA1r 1 70 .lobytes 70h +000CA2r 1 71 .lobytes 71h +000CA3r 1 72 .lobytes 72h +000CA4r 1 73 .lobytes 73h +000CA5r 1 74 .lobytes 74h +000CA6r 1 75 .lobytes 75h +000CA7r 1 76 .lobytes 76h +000CA8r 1 77 .lobytes 77h +000CA9r 1 78 .lobytes 78h +000CAAr 1 79 .lobytes 79h +000CABr 1 7A .lobytes 7Ah +000CACr 1 7B .lobytes 7Bh +000CADr 1 7C .lobytes 7Ch +000CAEr 1 7D .lobytes 7Dh +000CAFr 1 7E .lobytes 7Eh +000CB0r 1 7F .lobytes 7Fh +000CB1r 1 80 .lobytes 80h +000CB2r 1 81 .lobytes 81h +000CB3r 1 82 .lobytes 82h +000CB4r 1 83 .lobytes 83h +000CB5r 1 84 .lobytes 84h +000CB6r 1 85 .lobytes 85h +000CB7r 1 86 .lobytes 86h +000CB8r 1 F0 .lobytes 0F0h +000CB9r 1 F1 .lobytes 0F1h +000CBAr 1 F2 .lobytes 0F2h +000CBBr 1 F3 .lobytes 0F3h +000CBCr 1 F4 .lobytes 0F4h +000CBDr 1 F5 .lobytes 0F5h +000CBEr 1 F6 .lobytes 0F6h +000CBFr 1 F7 .lobytes 0F7h +000CC0r 1 F8 .lobytes 0F8h +000CC1r 1 F9 .lobytes 0F9h +000CC2r 1 FA .lobytes 0FAh +000CC3r 1 FB .lobytes 0FBh +000CC4r 1 FC .lobytes 0FCh +000CC5r 1 FD .lobytes 0FDh +000CC6r 1 FE .lobytes 0FEh +000CC7r 1 FF .lobytes 0FFh +000CC8r 1 00 .lobytes 100h +000CC9r 1 01 .lobytes 101h +000CCAr 1 02 .lobytes 102h +000CCBr 1 03 .lobytes 103h +000CCCr 1 D2 .lobytes 0FD2h +000CCDr 1 D3 .lobytes 0FD3h +000CCEr 1 D4 .lobytes 0FD4h +000CCFr 1 D5 .lobytes 0FD5h +000CD0r 1 D6 .lobytes 0FD6h +000CD1r 1 D7 .lobytes 0FD7h +000CD2r 1 D8 .lobytes 0FD8h +000CD3r 1 D9 .lobytes 0FD9h +000CD4r 1 DA .lobytes 0FDAh +000CD5r 1 DB .lobytes 0FDBh +000CD6r 1 DC .lobytes 0FDCh +000CD7r 1 DD .lobytes 0FDDh +000CD8r 1 DE .lobytes 0FDEh +000CD9r 1 DF .lobytes 0FDFh +000CDAr 1 E0 .lobytes 0FE0h +000CDBr 1 E1 .lobytes 0FE1h +000CDCr 1 E2 .lobytes 0FE2h +000CDDr 1 E3 .lobytes 0FE3h +000CDEr 1 E4 .lobytes 0FE4h +000CDFr 1 E5 .lobytes 0FE5h +000CE0r 1 E6 .lobytes 0FE6h +000CE1r 1 E7 .lobytes 0FE7h +000CE2r 1 E8 .lobytes 0FE8h +000CE3r 1 E9 .lobytes 0FE9h +000CE4r 1 EA .lobytes 0FEAh +000CE5r 1 EB .lobytes 0FEBh +000CE6r 1 EC .lobytes 0FECh +000CE7r 1 ED .lobytes 0FEDh +000CE8r 1 EE .lobytes 0FEEh +000CE9r 1 EF .lobytes 0FEFh +000CEAr 1 F0 .lobytes 0FF0h +000CEBr 1 F1 .lobytes 0FF1h +000CECr 1 F2 .lobytes 0FF2h +000CEDr 1 F3 .lobytes 0FF3h +000CEEr 1 F4 .lobytes 0FF4h +000CEFr 1 F5 .lobytes 0FF5h +000CF0r 1 F6 .lobytes 0FF6h +000CF1r 1 F7 .lobytes 0FF7h +000CF2r 1 F8 .lobytes 0FF8h +000CF3r 1 F9 .lobytes 0FF9h +000CF4r 1 FA .lobytes 0FFAh +000CF5r 1 FB .lobytes 0FFBh +000CF6r 1 FC .lobytes 0FFCh +000CF7r 1 FD .lobytes 0FFDh +000CF8r 1 FE .lobytes 0FFEh +000CF9r 1 FF .lobytes 0FFFh +000CFAr 1 00 .lobytes 1000h +000CFBr 1 01 .lobytes 1001h +000CFCr 1 02 .lobytes 1002h +000CFDr 1 03 .lobytes 1003h +000CFEr 1 04 .lobytes 1004h +000CFFr 1 05 .lobytes 1005h +000D00r 1 06 .lobytes 1006h +000D01r 1 07 .lobytes 1007h +000D02r 1 08 .lobytes 1008h +000D03r 1 F0 .lobytes 7FF0h +000D04r 1 F1 .lobytes 7FF1h +000D05r 1 F2 .lobytes 7FF2h +000D06r 1 F3 .lobytes 7FF3h +000D07r 1 F4 .lobytes 7FF4h +000D08r 1 F5 .lobytes 7FF5h +000D09r 1 F6 .lobytes 7FF6h +000D0Ar 1 F7 .lobytes 7FF7h +000D0Br 1 F8 .lobytes 7FF8h +000D0Cr 1 F9 .lobytes 7FF9h +000D0Dr 1 FA .lobytes 7FFAh +000D0Er 1 FB .lobytes 7FFBh +000D0Fr 1 FC .lobytes 7FFCh +000D10r 1 FD .lobytes 7FFDh +000D11r 1 FE .lobytes 7FFEh +000D12r 1 FF .lobytes 7FFFh +000D13r 1 00 .lobytes 8000h +000D14r 1 01 .lobytes 8001h +000D15r 1 02 .lobytes 8002h +000D16r 1 03 .lobytes 8003h +000D17r 1 04 .lobytes 8004h +000D18r 1 05 .lobytes 8005h +000D19r 1 06 .lobytes 8006h +000D1Ar 1 07 .lobytes 8007h +000D1Br 1 08 .lobytes 8008h +000D1Cr 1 09 .lobytes 8009h +000D1Dr 1 0A .lobytes 800Ah +000D1Er 1 0B .lobytes 800Bh +000D1Fr 1 E1 .lobytes 9FE1h +000D20r 1 E2 .lobytes 9FE2h +000D21r 1 E3 .lobytes 9FE3h +000D22r 1 E4 .lobytes 9FE4h +000D23r 1 E5 .lobytes 9FE5h +000D24r 1 E6 .lobytes 9FE6h +000D25r 1 E7 .lobytes 9FE7h +000D26r 1 E8 .lobytes 9FE8h +000D27r 1 E9 .lobytes 9FE9h +000D28r 1 EA .lobytes 9FEAh +000D29r 1 EB .lobytes 9FEBh +000D2Ar 1 EC .lobytes 9FECh +000D2Br 1 ED .lobytes 9FEDh +000D2Cr 1 EE .lobytes 9FEEh +000D2Dr 1 EF .lobytes 9FEFh +000D2Er 1 F0 .lobytes 9FF0h +000D2Fr 1 F1 .lobytes 9FF1h +000D30r 1 F2 .lobytes 9FF2h +000D31r 1 F3 .lobytes 9FF3h +000D32r 1 F4 .lobytes 9FF4h +000D33r 1 F5 .lobytes 9FF5h +000D34r 1 F6 .lobytes 9FF6h +000D35r 1 F7 .lobytes 9FF7h +000D36r 1 F8 .lobytes 9FF8h +000D37r 1 F9 .lobytes 9FF9h +000D38r 1 FA .lobytes 9FFAh +000D39r 1 FB .lobytes 9FFBh +000D3Ar 1 FC .lobytes 9FFCh +000D3Br 1 FD .lobytes 9FFDh +000D3Cr 1 FE .lobytes 9FFEh +000D3Dr 1 FF .lobytes 9FFFh +000D3Er 1 00 .lobytes 0A000h +000D3Fr 1 01 .lobytes 0A001h +000D40r 1 02 .lobytes 0A002h +000D41r 1 03 .lobytes 0A003h +000D42r 1 04 .lobytes 0A004h +000D43r 1 05 .lobytes 0A005h +000D44r 1 06 .lobytes 0A006h +000D45r 1 07 .lobytes 0A007h +000D46r 1 08 .lobytes 0A008h +000D47r 1 09 .lobytes 0A009h +000D48r 1 0A .lobytes 0A00Ah +000D49r 1 0B .lobytes 0A00Bh +000D4Ar 1 0C .lobytes 0A00Ch +000D4Br 1 0D .lobytes 0A00Dh +000D4Cr 1 0E .lobytes 0A00Eh +000D4Dr 1 0F .lobytes 0A00Fh +000D4Er 1 E1 .lobytes 0AFE1h +000D4Fr 1 E2 .lobytes 0AFE2h +000D50r 1 E3 .lobytes 0AFE3h +000D51r 1 E4 .lobytes 0AFE4h +000D52r 1 E5 .lobytes 0AFE5h +000D53r 1 E6 .lobytes 0AFE6h +000D54r 1 E7 .lobytes 0AFE7h +000D55r 1 E8 .lobytes 0AFE8h +000D56r 1 E9 .lobytes 0AFE9h +000D57r 1 EA .lobytes 0AFEAh +000D58r 1 EB .lobytes 0AFEBh +000D59r 1 EC .lobytes 0AFECh +000D5Ar 1 ED .lobytes 0AFEDh +000D5Br 1 EE .lobytes 0AFEEh +000D5Cr 1 EF .lobytes 0AFEFh +000D5Dr 1 F0 .lobytes 0AFF0h +000D5Er 1 F1 .lobytes 0AFF1h +000D5Fr 1 F2 .lobytes 0AFF2h +000D60r 1 F3 .lobytes 0AFF3h +000D61r 1 F4 .lobytes 0AFF4h +000D62r 1 F5 .lobytes 0AFF5h +000D63r 1 F6 .lobytes 0AFF6h +000D64r 1 F7 .lobytes 0AFF7h +000D65r 1 F8 .lobytes 0AFF8h +000D66r 1 F9 .lobytes 0AFF9h +000D67r 1 FA .lobytes 0AFFAh +000D68r 1 FB .lobytes 0AFFBh +000D69r 1 FC .lobytes 0AFFCh +000D6Ar 1 FD .lobytes 0AFFDh +000D6Br 1 FE .lobytes 0AFFEh +000D6Cr 1 FF .lobytes 0AFFFh +000D6Dr 1 00 .lobytes 0B000h +000D6Er 1 01 .lobytes 0B001h +000D6Fr 1 02 .lobytes 0B002h +000D70r 1 03 .lobytes 0B003h +000D71r 1 04 .lobytes 0B004h +000D72r 1 05 .lobytes 0B005h +000D73r 1 06 .lobytes 0B006h +000D74r 1 07 .lobytes 0B007h +000D75r 1 08 .lobytes 0B008h +000D76r 1 09 .lobytes 0B009h +000D77r 1 0A .lobytes 0B00Ah +000D78r 1 0B .lobytes 0B00Bh +000D79r 1 0C .lobytes 0B00Ch +000D7Ar 1 0D .lobytes 0B00Dh +000D7Br 1 0E .lobytes 0B00Eh +000D7Cr 1 0F .lobytes 0B00Fh +000D7Dr 1 E1 .lobytes 0BFE1h +000D7Er 1 E2 .lobytes 0BFE2h +000D7Fr 1 E3 .lobytes 0BFE3h +000D80r 1 E4 .lobytes 0BFE4h +000D81r 1 E5 .lobytes 0BFE5h +000D82r 1 E6 .lobytes 0BFE6h +000D83r 1 E7 .lobytes 0BFE7h +000D84r 1 E8 .lobytes 0BFE8h +000D85r 1 E9 .lobytes 0BFE9h +000D86r 1 EA .lobytes 0BFEAh +000D87r 1 EB .lobytes 0BFEBh +000D88r 1 EC .lobytes 0BFECh +000D89r 1 ED .lobytes 0BFEDh +000D8Ar 1 EE .lobytes 0BFEEh +000D8Br 1 EF .lobytes 0BFEFh +000D8Cr 1 F0 .lobytes 0BFF0h +000D8Dr 1 F1 .lobytes 0BFF1h +000D8Er 1 F2 .lobytes 0BFF2h +000D8Fr 1 F3 .lobytes 0BFF3h +000D90r 1 F4 .lobytes 0BFF4h +000D91r 1 F5 .lobytes 0BFF5h +000D92r 1 F6 .lobytes 0BFF6h +000D93r 1 F7 .lobytes 0BFF7h +000D94r 1 F8 .lobytes 0BFF8h +000D95r 1 F9 .lobytes 0BFF9h +000D96r 1 FA .lobytes 0BFFAh +000D97r 1 FB .lobytes 0BFFBh +000D98r 1 FC .lobytes 0BFFCh +000D99r 1 FD .lobytes 0BFFDh +000D9Ar 1 FE .lobytes 0BFFEh +000D9Br 1 FF .lobytes 0BFFFh +000D9Cr 1 00 .lobytes 0C000h +000D9Dr 1 01 .lobytes 0C001h +000D9Er 1 02 .lobytes 0C002h +000D9Fr 1 03 .lobytes 0C003h +000DA0r 1 04 .lobytes 0C004h +000DA1r 1 05 .lobytes 0C005h +000DA2r 1 06 .lobytes 0C006h +000DA3r 1 07 .lobytes 0C007h +000DA4r 1 08 .lobytes 0C008h +000DA5r 1 09 .lobytes 0C009h +000DA6r 1 0A .lobytes 0C00Ah +000DA7r 1 0B .lobytes 0C00Bh +000DA8r 1 0C .lobytes 0C00Ch +000DA9r 1 0D .lobytes 0C00Dh +000DAAr 1 0E .lobytes 0C00Eh +000DABr 1 0F .lobytes 0C00Fh +000DACr 1 E1 .lobytes 0CFE1h +000DADr 1 E2 .lobytes 0CFE2h +000DAEr 1 E3 .lobytes 0CFE3h +000DAFr 1 E4 .lobytes 0CFE4h +000DB0r 1 E5 .lobytes 0CFE5h +000DB1r 1 E6 .lobytes 0CFE6h +000DB2r 1 E7 .lobytes 0CFE7h +000DB3r 1 E8 .lobytes 0CFE8h +000DB4r 1 E9 .lobytes 0CFE9h +000DB5r 1 EA .lobytes 0CFEAh +000DB6r 1 EB .lobytes 0CFEBh +000DB7r 1 EC .lobytes 0CFECh +000DB8r 1 ED .lobytes 0CFEDh +000DB9r 1 EE .lobytes 0CFEEh +000DBAr 1 EF .lobytes 0CFEFh +000DBBr 1 F0 .lobytes 0CFF0h +000DBCr 1 F1 .lobytes 0CFF1h +000DBDr 1 F2 .lobytes 0CFF2h +000DBEr 1 F3 .lobytes 0CFF3h +000DBFr 1 F4 .lobytes 0CFF4h +000DC0r 1 F5 .lobytes 0CFF5h +000DC1r 1 F6 .lobytes 0CFF6h +000DC2r 1 F7 .lobytes 0CFF7h +000DC3r 1 F8 .lobytes 0CFF8h +000DC4r 1 F9 .lobytes 0CFF9h +000DC5r 1 FA .lobytes 0CFFAh +000DC6r 1 FB .lobytes 0CFFBh +000DC7r 1 FC .lobytes 0CFFCh +000DC8r 1 FD .lobytes 0CFFDh +000DC9r 1 FE .lobytes 0CFFEh +000DCAr 1 FF .lobytes 0CFFFh +000DCBr 1 00 .lobytes 0D000h +000DCCr 1 01 .lobytes 0D001h +000DCDr 1 02 .lobytes 0D002h +000DCEr 1 03 .lobytes 0D003h +000DCFr 1 04 .lobytes 0D004h +000DD0r 1 05 .lobytes 0D005h +000DD1r 1 06 .lobytes 0D006h +000DD2r 1 07 .lobytes 0D007h +000DD3r 1 08 .lobytes 0D008h +000DD4r 1 09 .lobytes 0D009h +000DD5r 1 0A .lobytes 0D00Ah +000DD6r 1 0B .lobytes 0D00Bh +000DD7r 1 0C .lobytes 0D00Ch +000DD8r 1 0D .lobytes 0D00Dh +000DD9r 1 0E .lobytes 0D00Eh +000DDAr 1 0F .lobytes 0D00Fh +000DDBr 1 E1 .lobytes 0DFE1h +000DDCr 1 E2 .lobytes 0DFE2h +000DDDr 1 E3 .lobytes 0DFE3h +000DDEr 1 E4 .lobytes 0DFE4h +000DDFr 1 E5 .lobytes 0DFE5h +000DE0r 1 E6 .lobytes 0DFE6h +000DE1r 1 E7 .lobytes 0DFE7h +000DE2r 1 E8 .lobytes 0DFE8h +000DE3r 1 E9 .lobytes 0DFE9h +000DE4r 1 EA .lobytes 0DFEAh +000DE5r 1 EB .lobytes 0DFEBh +000DE6r 1 EC .lobytes 0DFECh +000DE7r 1 ED .lobytes 0DFEDh +000DE8r 1 EE .lobytes 0DFEEh +000DE9r 1 EF .lobytes 0DFEFh +000DEAr 1 F0 .lobytes 0DFF0h +000DEBr 1 F1 .lobytes 0DFF1h +000DECr 1 F2 .lobytes 0DFF2h +000DEDr 1 F3 .lobytes 0DFF3h +000DEEr 1 F4 .lobytes 0DFF4h +000DEFr 1 F5 .lobytes 0DFF5h +000DF0r 1 F6 .lobytes 0DFF6h +000DF1r 1 F7 .lobytes 0DFF7h +000DF2r 1 F8 .lobytes 0DFF8h +000DF3r 1 F9 .lobytes 0DFF9h +000DF4r 1 FA .lobytes 0DFFAh +000DF5r 1 FB .lobytes 0DFFBh +000DF6r 1 FC .lobytes 0DFFCh +000DF7r 1 FD .lobytes 0DFFDh +000DF8r 1 FE .lobytes 0DFFEh +000DF9r 1 FF .lobytes 0DFFFh +000DFAr 1 00 .lobytes 0E000h +000DFBr 1 01 .lobytes 0E001h +000DFCr 1 02 .lobytes 0E002h +000DFDr 1 03 .lobytes 0E003h +000DFEr 1 04 .lobytes 0E004h +000DFFr 1 05 .lobytes 0E005h +000E00r 1 06 .lobytes 0E006h +000E01r 1 07 .lobytes 0E007h +000E02r 1 08 .lobytes 0E008h +000E03r 1 09 .lobytes 0E009h +000E04r 1 0A .lobytes 0E00Ah +000E05r 1 0B .lobytes 0E00Bh +000E06r 1 0C .lobytes 0E00Ch +000E07r 1 0D .lobytes 0E00Dh +000E08r 1 0E .lobytes 0E00Eh +000E09r 1 0F .lobytes 0E00Fh +000E0Ar 1 E1 .lobytes 0EFE1h +000E0Br 1 E2 .lobytes 0EFE2h +000E0Cr 1 E3 .lobytes 0EFE3h +000E0Dr 1 E4 .lobytes 0EFE4h +000E0Er 1 E5 .lobytes 0EFE5h +000E0Fr 1 E6 .lobytes 0EFE6h +000E10r 1 E7 .lobytes 0EFE7h +000E11r 1 E8 .lobytes 0EFE8h +000E12r 1 E9 .lobytes 0EFE9h +000E13r 1 EA .lobytes 0EFEAh +000E14r 1 EB .lobytes 0EFEBh +000E15r 1 EC .lobytes 0EFECh +000E16r 1 ED .lobytes 0EFEDh +000E17r 1 EE .lobytes 0EFEEh +000E18r 1 EF .lobytes 0EFEFh +000E19r 1 F0 .lobytes 0EFF0h +000E1Ar 1 F1 .lobytes 0EFF1h +000E1Br 1 F2 .lobytes 0EFF2h +000E1Cr 1 F3 .lobytes 0EFF3h +000E1Dr 1 F4 .lobytes 0EFF4h +000E1Er 1 F5 .lobytes 0EFF5h +000E1Fr 1 F6 .lobytes 0EFF6h +000E20r 1 F7 .lobytes 0EFF7h +000E21r 1 F8 .lobytes 0EFF8h +000E22r 1 F9 .lobytes 0EFF9h +000E23r 1 FA .lobytes 0EFFAh +000E24r 1 FB .lobytes 0EFFBh +000E25r 1 FC .lobytes 0EFFCh +000E26r 1 FD .lobytes 0EFFDh +000E27r 1 FE .lobytes 0EFFEh +000E28r 1 FF .lobytes 0EFFFh +000E29r 1 00 .lobytes 0F000h +000E2Ar 1 01 .lobytes 0F001h +000E2Br 1 02 .lobytes 0F002h +000E2Cr 1 03 .lobytes 0F003h +000E2Dr 1 04 .lobytes 0F004h +000E2Er 1 05 .lobytes 0F005h +000E2Fr 1 06 .lobytes 0F006h +000E30r 1 07 .lobytes 0F007h +000E31r 1 08 .lobytes 0F008h +000E32r 1 09 .lobytes 0F009h +000E33r 1 0A .lobytes 0F00Ah +000E34r 1 0B .lobytes 0F00Bh +000E35r 1 0C .lobytes 0F00Ch +000E36r 1 0D .lobytes 0F00Dh +000E37r 1 0E .lobytes 0F00Eh +000E38r 1 0F .lobytes 0F00Fh +000E39r 1 E1 .lobytes 0FFE1h +000E3Ar 1 E2 .lobytes 0FFE2h +000E3Br 1 E3 .lobytes 0FFE3h +000E3Cr 1 E4 .lobytes 0FFE4h +000E3Dr 1 E5 .lobytes 0FFE5h +000E3Er 1 E6 .lobytes 0FFE6h +000E3Fr 1 E7 .lobytes 0FFE7h +000E40r 1 E8 .lobytes 0FFE8h +000E41r 1 E9 .lobytes 0FFE9h +000E42r 1 EA .lobytes 0FFEAh +000E43r 1 EB .lobytes 0FFEBh +000E44r 1 EC .lobytes 0FFECh +000E45r 1 ED .lobytes 0FFEDh +000E46r 1 EE .lobytes 0FFEEh +000E47r 1 EF .lobytes 0FFEFh +000E48r 1 F0 .lobytes 0FFF0h +000E49r 1 F1 .lobytes 0FFF1h +000E4Ar 1 F2 .lobytes 0FFF2h +000E4Br 1 F3 .lobytes 0FFF3h +000E4Cr 1 F4 .lobytes 0FFF4h +000E4Dr 1 F5 .lobytes 0FFF5h +000E4Er 1 F6 .lobytes 0FFF6h +000E4Fr 1 F7 .lobytes 0FFF7h +000E50r 1 F8 .lobytes 0FFF8h +000E51r 1 F9 .lobytes 0FFF9h +000E52r 1 FA .lobytes 0FFFAh +000E53r 1 FB .lobytes 0FFFBh +000E54r 1 FC .lobytes 0FFFCh +000E55r 1 FD .lobytes 0FFFDh +000E56r 1 FE .lobytes 0FFFEh +000E57r 1 FF .lobytes 0FFFFh +000E58r 1 +000E58r 1 ; alternative 4-digit hex values +000E58r 1 00 .lobytes 0000h +000E59r 1 01 .lobytes 0001h +000E5Ar 1 02 .lobytes 0002h +000E5Br 1 03 .lobytes 0003h +000E5Cr 1 04 .lobytes 0004h +000E5Dr 1 05 .lobytes 0005h +000E5Er 1 06 .lobytes 0006h +000E5Fr 1 07 .lobytes 0007h +000E60r 1 08 .lobytes 0008h +000E61r 1 09 .lobytes 0009h +000E62r 1 0A .lobytes 000ah +000E63r 1 0B .lobytes 000bh +000E64r 1 0C .lobytes 000ch +000E65r 1 0D .lobytes 000dh +000E66r 1 0E .lobytes 000eh +000E67r 1 0F .lobytes 000fh +000E68r 1 10 .lobytes 0010h +000E69r 1 11 .lobytes 0011h +000E6Ar 1 12 .lobytes 0012h +000E6Br 1 13 .lobytes 0013h +000E6Cr 1 70 .lobytes 0070h +000E6Dr 1 71 .lobytes 0071h +000E6Er 1 72 .lobytes 0072h +000E6Fr 1 73 .lobytes 0073h +000E70r 1 74 .lobytes 0074h +000E71r 1 75 .lobytes 0075h +000E72r 1 76 .lobytes 0076h +000E73r 1 77 .lobytes 0077h +000E74r 1 78 .lobytes 0078h +000E75r 1 79 .lobytes 0079h +000E76r 1 7A .lobytes 007ah +000E77r 1 7B .lobytes 007bh +000E78r 1 7C .lobytes 007ch +000E79r 1 7D .lobytes 007dh +000E7Ar 1 7E .lobytes 007eh +000E7Br 1 7F .lobytes 007fh +000E7Cr 1 80 .lobytes 0080h +000E7Dr 1 81 .lobytes 0081h +000E7Er 1 82 .lobytes 0082h +000E7Fr 1 83 .lobytes 0083h +000E80r 1 84 .lobytes 0084h +000E81r 1 85 .lobytes 0085h +000E82r 1 86 .lobytes 0086h +000E83r 1 F0 .lobytes 00f0h +000E84r 1 F1 .lobytes 00f1h +000E85r 1 F2 .lobytes 00f2h +000E86r 1 F3 .lobytes 00f3h +000E87r 1 F4 .lobytes 00f4h +000E88r 1 F5 .lobytes 00f5h +000E89r 1 F6 .lobytes 00f6h +000E8Ar 1 F7 .lobytes 00f7h +000E8Br 1 F8 .lobytes 00f8h +000E8Cr 1 F9 .lobytes 00f9h +000E8Dr 1 FA .lobytes 00fah +000E8Er 1 FB .lobytes 00fbh +000E8Fr 1 FC .lobytes 00fch +000E90r 1 FD .lobytes 00fdh +000E91r 1 FE .lobytes 00feh +000E92r 1 FF .lobytes 00ffh +000E93r 1 00 .lobytes 0100h +000E94r 1 01 .lobytes 0101h +000E95r 1 02 .lobytes 0102h +000E96r 1 03 .lobytes 0103h +000E97r 1 D2 .lobytes 0fd2h +000E98r 1 D3 .lobytes 0fd3h +000E99r 1 D4 .lobytes 0fd4h +000E9Ar 1 D5 .lobytes 0fd5h +000E9Br 1 D6 .lobytes 0fd6h +000E9Cr 1 D7 .lobytes 0fd7h +000E9Dr 1 D8 .lobytes 0fd8h +000E9Er 1 D9 .lobytes 0fd9h +000E9Fr 1 DA .lobytes 0fdah +000EA0r 1 DB .lobytes 0fdbh +000EA1r 1 DC .lobytes 0fdch +000EA2r 1 DD .lobytes 0fddh +000EA3r 1 DE .lobytes 0fdeh +000EA4r 1 DF .lobytes 0fdfh +000EA5r 1 E0 .lobytes 0fe0h +000EA6r 1 E1 .lobytes 0fe1h +000EA7r 1 E2 .lobytes 0fe2h +000EA8r 1 E3 .lobytes 0fe3h +000EA9r 1 E4 .lobytes 0fe4h +000EAAr 1 E5 .lobytes 0fe5h +000EABr 1 E6 .lobytes 0fe6h +000EACr 1 E7 .lobytes 0fe7h +000EADr 1 E8 .lobytes 0fe8h +000EAEr 1 E9 .lobytes 0fe9h +000EAFr 1 EA .lobytes 0feah +000EB0r 1 EB .lobytes 0febh +000EB1r 1 EC .lobytes 0fech +000EB2r 1 ED .lobytes 0fedh +000EB3r 1 EE .lobytes 0feeh +000EB4r 1 EF .lobytes 0fefh +000EB5r 1 F0 .lobytes 0ff0h +000EB6r 1 F1 .lobytes 0ff1h +000EB7r 1 F2 .lobytes 0ff2h +000EB8r 1 F3 .lobytes 0ff3h +000EB9r 1 F4 .lobytes 0ff4h +000EBAr 1 F5 .lobytes 0ff5h +000EBBr 1 F6 .lobytes 0ff6h +000EBCr 1 F7 .lobytes 0ff7h +000EBDr 1 F8 .lobytes 0ff8h +000EBEr 1 F9 .lobytes 0ff9h +000EBFr 1 FA .lobytes 0ffah +000EC0r 1 FB .lobytes 0ffbh +000EC1r 1 FC .lobytes 0ffch +000EC2r 1 FD .lobytes 0ffdh +000EC3r 1 FE .lobytes 0ffeh +000EC4r 1 FF .lobytes 0fffh +000EC5r 1 00 .lobytes 1000h +000EC6r 1 01 .lobytes 1001h +000EC7r 1 02 .lobytes 1002h +000EC8r 1 03 .lobytes 1003h +000EC9r 1 04 .lobytes 1004h +000ECAr 1 05 .lobytes 1005h +000ECBr 1 06 .lobytes 1006h +000ECCr 1 07 .lobytes 1007h +000ECDr 1 08 .lobytes 1008h +000ECEr 1 F0 .lobytes 7ff0h +000ECFr 1 F1 .lobytes 7ff1h +000ED0r 1 F2 .lobytes 7ff2h +000ED1r 1 F3 .lobytes 7ff3h +000ED2r 1 F4 .lobytes 7ff4h +000ED3r 1 F5 .lobytes 7ff5h +000ED4r 1 F6 .lobytes 7ff6h +000ED5r 1 F7 .lobytes 7ff7h +000ED6r 1 F8 .lobytes 7ff8h +000ED7r 1 F9 .lobytes 7ff9h +000ED8r 1 FA .lobytes 7ffah +000ED9r 1 FB .lobytes 7ffbh +000EDAr 1 FC .lobytes 7ffch +000EDBr 1 FD .lobytes 7ffdh +000EDCr 1 FE .lobytes 7ffeh +000EDDr 1 FF .lobytes 7fffh +000EDEr 1 00 .lobytes 8000h +000EDFr 1 01 .lobytes 8001h +000EE0r 1 02 .lobytes 8002h +000EE1r 1 03 .lobytes 8003h +000EE2r 1 04 .lobytes 8004h +000EE3r 1 05 .lobytes 8005h +000EE4r 1 06 .lobytes 8006h +000EE5r 1 07 .lobytes 8007h +000EE6r 1 08 .lobytes 8008h +000EE7r 1 09 .lobytes 8009h +000EE8r 1 0A .lobytes 800ah +000EE9r 1 0B .lobytes 800bh +000EEAr 1 E1 .lobytes 9fe1h +000EEBr 1 E2 .lobytes 9fe2h +000EECr 1 E3 .lobytes 9fe3h +000EEDr 1 E4 .lobytes 9fe4h +000EEEr 1 E5 .lobytes 9fe5h +000EEFr 1 E6 .lobytes 9fe6h +000EF0r 1 E7 .lobytes 9fe7h +000EF1r 1 E8 .lobytes 9fe8h +000EF2r 1 E9 .lobytes 9fe9h +000EF3r 1 EA .lobytes 9feah +000EF4r 1 EB .lobytes 9febh +000EF5r 1 EC .lobytes 9fech +000EF6r 1 ED .lobytes 9fedh +000EF7r 1 EE .lobytes 9feeh +000EF8r 1 EF .lobytes 9fefh +000EF9r 1 F0 .lobytes 9ff0h +000EFAr 1 F1 .lobytes 9ff1h +000EFBr 1 F2 .lobytes 9ff2h +000EFCr 1 F3 .lobytes 9ff3h +000EFDr 1 F4 .lobytes 9ff4h +000EFEr 1 F5 .lobytes 9ff5h +000EFFr 1 F6 .lobytes 9ff6h +000F00r 1 F7 .lobytes 9ff7h +000F01r 1 F8 .lobytes 9ff8h +000F02r 1 F9 .lobytes 9ff9h +000F03r 1 FA .lobytes 9ffah +000F04r 1 FB .lobytes 9ffbh +000F05r 1 FC .lobytes 9ffch +000F06r 1 FD .lobytes 9ffdh +000F07r 1 FE .lobytes 9ffeh +000F08r 1 FF .lobytes 9fffh +000F09r 1 00 .lobytes 0a000h +000F0Ar 1 01 .lobytes 0a001h +000F0Br 1 02 .lobytes 0a002h +000F0Cr 1 03 .lobytes 0a003h +000F0Dr 1 04 .lobytes 0a004h +000F0Er 1 05 .lobytes 0a005h +000F0Fr 1 06 .lobytes 0a006h +000F10r 1 07 .lobytes 0a007h +000F11r 1 08 .lobytes 0a008h +000F12r 1 09 .lobytes 0a009h +000F13r 1 0A .lobytes 0a00ah +000F14r 1 0B .lobytes 0a00bh +000F15r 1 0C .lobytes 0a00ch +000F16r 1 0D .lobytes 0a00dh +000F17r 1 0E .lobytes 0a00eh +000F18r 1 0F .lobytes 0a00fh +000F19r 1 E1 .lobytes 0afe1h +000F1Ar 1 E2 .lobytes 0afe2h +000F1Br 1 E3 .lobytes 0afe3h +000F1Cr 1 E4 .lobytes 0afe4h +000F1Dr 1 E5 .lobytes 0afe5h +000F1Er 1 E6 .lobytes 0afe6h +000F1Fr 1 E7 .lobytes 0afe7h +000F20r 1 E8 .lobytes 0afe8h +000F21r 1 E9 .lobytes 0afe9h +000F22r 1 EA .lobytes 0afeah +000F23r 1 EB .lobytes 0afebh +000F24r 1 EC .lobytes 0afech +000F25r 1 ED .lobytes 0afedh +000F26r 1 EE .lobytes 0afeeh +000F27r 1 EF .lobytes 0afefh +000F28r 1 F0 .lobytes 0aff0h +000F29r 1 F1 .lobytes 0aff1h +000F2Ar 1 F2 .lobytes 0aff2h +000F2Br 1 F3 .lobytes 0aff3h +000F2Cr 1 F4 .lobytes 0aff4h +000F2Dr 1 F5 .lobytes 0aff5h +000F2Er 1 F6 .lobytes 0aff6h +000F2Fr 1 F7 .lobytes 0aff7h +000F30r 1 F8 .lobytes 0aff8h +000F31r 1 F9 .lobytes 0aff9h +000F32r 1 FA .lobytes 0affah +000F33r 1 FB .lobytes 0affbh +000F34r 1 FC .lobytes 0affch +000F35r 1 FD .lobytes 0affdh +000F36r 1 FE .lobytes 0affeh +000F37r 1 FF .lobytes 0afffh +000F38r 1 00 .lobytes 0b000h +000F39r 1 01 .lobytes 0b001h +000F3Ar 1 02 .lobytes 0b002h +000F3Br 1 03 .lobytes 0b003h +000F3Cr 1 04 .lobytes 0b004h +000F3Dr 1 05 .lobytes 0b005h +000F3Er 1 06 .lobytes 0b006h +000F3Fr 1 07 .lobytes 0b007h +000F40r 1 08 .lobytes 0b008h +000F41r 1 09 .lobytes 0b009h +000F42r 1 0A .lobytes 0b00ah +000F43r 1 0B .lobytes 0b00bh +000F44r 1 0C .lobytes 0b00ch +000F45r 1 0D .lobytes 0b00dh +000F46r 1 0E .lobytes 0b00eh +000F47r 1 0F .lobytes 0b00fh +000F48r 1 E1 .lobytes 0bfe1h +000F49r 1 E2 .lobytes 0bfe2h +000F4Ar 1 E3 .lobytes 0bfe3h +000F4Br 1 E4 .lobytes 0bfe4h +000F4Cr 1 E5 .lobytes 0bfe5h +000F4Dr 1 E6 .lobytes 0bfe6h +000F4Er 1 E7 .lobytes 0bfe7h +000F4Fr 1 E8 .lobytes 0bfe8h +000F50r 1 E9 .lobytes 0bfe9h +000F51r 1 EA .lobytes 0bfeah +000F52r 1 EB .lobytes 0bfebh +000F53r 1 EC .lobytes 0bfech +000F54r 1 ED .lobytes 0bfedh +000F55r 1 EE .lobytes 0bfeeh +000F56r 1 EF .lobytes 0bfefh +000F57r 1 F0 .lobytes 0bff0h +000F58r 1 F1 .lobytes 0bff1h +000F59r 1 F2 .lobytes 0bff2h +000F5Ar 1 F3 .lobytes 0bff3h +000F5Br 1 F4 .lobytes 0bff4h +000F5Cr 1 F5 .lobytes 0bff5h +000F5Dr 1 F6 .lobytes 0bff6h +000F5Er 1 F7 .lobytes 0bff7h +000F5Fr 1 F8 .lobytes 0bff8h +000F60r 1 F9 .lobytes 0bff9h +000F61r 1 FA .lobytes 0bffah +000F62r 1 FB .lobytes 0bffbh +000F63r 1 FC .lobytes 0bffch +000F64r 1 FD .lobytes 0bffdh +000F65r 1 FE .lobytes 0bffeh +000F66r 1 FF .lobytes 0bfffh +000F67r 1 00 .lobytes 0c000h +000F68r 1 01 .lobytes 0c001h +000F69r 1 02 .lobytes 0c002h +000F6Ar 1 03 .lobytes 0c003h +000F6Br 1 04 .lobytes 0c004h +000F6Cr 1 05 .lobytes 0c005h +000F6Dr 1 06 .lobytes 0c006h +000F6Er 1 07 .lobytes 0c007h +000F6Fr 1 08 .lobytes 0c008h +000F70r 1 09 .lobytes 0c009h +000F71r 1 0A .lobytes 0c00ah +000F72r 1 0B .lobytes 0c00bh +000F73r 1 0C .lobytes 0c00ch +000F74r 1 0D .lobytes 0c00dh +000F75r 1 0E .lobytes 0c00eh +000F76r 1 0F .lobytes 0c00fh +000F77r 1 E1 .lobytes 0cfe1h +000F78r 1 E2 .lobytes 0cfe2h +000F79r 1 E3 .lobytes 0cfe3h +000F7Ar 1 E4 .lobytes 0cfe4h +000F7Br 1 E5 .lobytes 0cfe5h +000F7Cr 1 E6 .lobytes 0cfe6h +000F7Dr 1 E7 .lobytes 0cfe7h +000F7Er 1 E8 .lobytes 0cfe8h +000F7Fr 1 E9 .lobytes 0cfe9h +000F80r 1 EA .lobytes 0cfeah +000F81r 1 EB .lobytes 0cfebh +000F82r 1 EC .lobytes 0cfech +000F83r 1 ED .lobytes 0cfedh +000F84r 1 EE .lobytes 0cfeeh +000F85r 1 EF .lobytes 0cfefh +000F86r 1 F0 .lobytes 0cff0h +000F87r 1 F1 .lobytes 0cff1h +000F88r 1 F2 .lobytes 0cff2h +000F89r 1 F3 .lobytes 0cff3h +000F8Ar 1 F4 .lobytes 0cff4h +000F8Br 1 F5 .lobytes 0cff5h +000F8Cr 1 F6 .lobytes 0cff6h +000F8Dr 1 F7 .lobytes 0cff7h +000F8Er 1 F8 .lobytes 0cff8h +000F8Fr 1 F9 .lobytes 0cff9h +000F90r 1 FA .lobytes 0cffah +000F91r 1 FB .lobytes 0cffbh +000F92r 1 FC .lobytes 0cffch +000F93r 1 FD .lobytes 0cffdh +000F94r 1 FE .lobytes 0cffeh +000F95r 1 FF .lobytes 0cfffh +000F96r 1 00 .lobytes 0d000h +000F97r 1 01 .lobytes 0d001h +000F98r 1 02 .lobytes 0d002h +000F99r 1 03 .lobytes 0d003h +000F9Ar 1 04 .lobytes 0d004h +000F9Br 1 05 .lobytes 0d005h +000F9Cr 1 06 .lobytes 0d006h +000F9Dr 1 07 .lobytes 0d007h +000F9Er 1 08 .lobytes 0d008h +000F9Fr 1 09 .lobytes 0d009h +000FA0r 1 0A .lobytes 0d00ah +000FA1r 1 0B .lobytes 0d00bh +000FA2r 1 0C .lobytes 0d00ch +000FA3r 1 0D .lobytes 0d00dh +000FA4r 1 0E .lobytes 0d00eh +000FA5r 1 0F .lobytes 0d00fh +000FA6r 1 E1 .lobytes 0dfe1h +000FA7r 1 E2 .lobytes 0dfe2h +000FA8r 1 E3 .lobytes 0dfe3h +000FA9r 1 E4 .lobytes 0dfe4h +000FAAr 1 E5 .lobytes 0dfe5h +000FABr 1 E6 .lobytes 0dfe6h +000FACr 1 E7 .lobytes 0dfe7h +000FADr 1 E8 .lobytes 0dfe8h +000FAEr 1 E9 .lobytes 0dfe9h +000FAFr 1 EA .lobytes 0dfeah +000FB0r 1 EB .lobytes 0dfebh +000FB1r 1 EC .lobytes 0dfech +000FB2r 1 ED .lobytes 0dfedh +000FB3r 1 EE .lobytes 0dfeeh +000FB4r 1 EF .lobytes 0dfefh +000FB5r 1 F0 .lobytes 0dff0h +000FB6r 1 F1 .lobytes 0dff1h +000FB7r 1 F2 .lobytes 0dff2h +000FB8r 1 F3 .lobytes 0dff3h +000FB9r 1 F4 .lobytes 0dff4h +000FBAr 1 F5 .lobytes 0dff5h +000FBBr 1 F6 .lobytes 0dff6h +000FBCr 1 F7 .lobytes 0dff7h +000FBDr 1 F8 .lobytes 0dff8h +000FBEr 1 F9 .lobytes 0dff9h +000FBFr 1 FA .lobytes 0dffah +000FC0r 1 FB .lobytes 0dffbh +000FC1r 1 FC .lobytes 0dffch +000FC2r 1 FD .lobytes 0dffdh +000FC3r 1 FE .lobytes 0dffeh +000FC4r 1 FF .lobytes 0dfffh +000FC5r 1 00 .lobytes 0e000h +000FC6r 1 01 .lobytes 0e001h +000FC7r 1 02 .lobytes 0e002h +000FC8r 1 03 .lobytes 0e003h +000FC9r 1 04 .lobytes 0e004h +000FCAr 1 05 .lobytes 0e005h +000FCBr 1 06 .lobytes 0e006h +000FCCr 1 07 .lobytes 0e007h +000FCDr 1 08 .lobytes 0e008h +000FCEr 1 09 .lobytes 0e009h +000FCFr 1 0A .lobytes 0e00ah +000FD0r 1 0B .lobytes 0e00bh +000FD1r 1 0C .lobytes 0e00ch +000FD2r 1 0D .lobytes 0e00dh +000FD3r 1 0E .lobytes 0e00eh +000FD4r 1 0F .lobytes 0e00fh +000FD5r 1 E1 .lobytes 0efe1h +000FD6r 1 E2 .lobytes 0efe2h +000FD7r 1 E3 .lobytes 0efe3h +000FD8r 1 E4 .lobytes 0efe4h +000FD9r 1 E5 .lobytes 0efe5h +000FDAr 1 E6 .lobytes 0efe6h +000FDBr 1 E7 .lobytes 0efe7h +000FDCr 1 E8 .lobytes 0efe8h +000FDDr 1 E9 .lobytes 0efe9h +000FDEr 1 EA .lobytes 0efeah +000FDFr 1 EB .lobytes 0efebh +000FE0r 1 EC .lobytes 0efech +000FE1r 1 ED .lobytes 0efedh +000FE2r 1 EE .lobytes 0efeeh +000FE3r 1 EF .lobytes 0efefh +000FE4r 1 F0 .lobytes 0eff0h +000FE5r 1 F1 .lobytes 0eff1h +000FE6r 1 F2 .lobytes 0eff2h +000FE7r 1 F3 .lobytes 0eff3h +000FE8r 1 F4 .lobytes 0eff4h +000FE9r 1 F5 .lobytes 0eff5h +000FEAr 1 F6 .lobytes 0eff6h +000FEBr 1 F7 .lobytes 0eff7h +000FECr 1 F8 .lobytes 0eff8h +000FEDr 1 F9 .lobytes 0eff9h +000FEEr 1 FA .lobytes 0effah +000FEFr 1 FB .lobytes 0effbh +000FF0r 1 FC .lobytes 0effch +000FF1r 1 FD .lobytes 0effdh +000FF2r 1 FE .lobytes 0effeh +000FF3r 1 FF .lobytes 0efffh +000FF4r 1 00 .lobytes 0f000h +000FF5r 1 01 .lobytes 0f001h +000FF6r 1 02 .lobytes 0f002h +000FF7r 1 03 .lobytes 0f003h +000FF8r 1 04 .lobytes 0f004h +000FF9r 1 05 .lobytes 0f005h +000FFAr 1 06 .lobytes 0f006h +000FFBr 1 07 .lobytes 0f007h +000FFCr 1 08 .lobytes 0f008h +000FFDr 1 09 .lobytes 0f009h +000FFEr 1 0A .lobytes 0f00ah +000FFFr 1 0B .lobytes 0f00bh +001000r 1 0C .lobytes 0f00ch +001001r 1 0D .lobytes 0f00dh +001002r 1 0E .lobytes 0f00eh +001003r 1 0F .lobytes 0f00fh +001004r 1 E1 .lobytes 0ffe1h +001005r 1 E2 .lobytes 0ffe2h +001006r 1 E3 .lobytes 0ffe3h +001007r 1 E4 .lobytes 0ffe4h +001008r 1 E5 .lobytes 0ffe5h +001009r 1 E6 .lobytes 0ffe6h +00100Ar 1 E7 .lobytes 0ffe7h +00100Br 1 E8 .lobytes 0ffe8h +00100Cr 1 E9 .lobytes 0ffe9h +00100Dr 1 EA .lobytes 0ffeah +00100Er 1 EB .lobytes 0ffebh +00100Fr 1 EC .lobytes 0ffech +001010r 1 ED .lobytes 0ffedh +001011r 1 EE .lobytes 0ffeeh +001012r 1 EF .lobytes 0ffefh +001013r 1 F0 .lobytes 0fff0h +001014r 1 F1 .lobytes 0fff1h +001015r 1 F2 .lobytes 0fff2h +001016r 1 F3 .lobytes 0fff3h +001017r 1 F4 .lobytes 0fff4h +001018r 1 F5 .lobytes 0fff5h +001019r 1 F6 .lobytes 0fff6h +00101Ar 1 F7 .lobytes 0fff7h +00101Br 1 F8 .lobytes 0fff8h +00101Cr 1 F9 .lobytes 0fff9h +00101Dr 1 FA .lobytes 0fffah +00101Er 1 FB .lobytes 0fffbh +00101Fr 1 FC .lobytes 0fffch +001020r 1 FD .lobytes 0fffdh +001021r 1 FE .lobytes 0fffeh +001022r 1 FF .lobytes 0ffffh +001023r 1 +001023r 1 ; alternative 4-digit hex values, uppercase +001023r 1 00 .lobytes 0000h +001024r 1 01 .lobytes 0001h +001025r 1 02 .lobytes 0002h +001026r 1 03 .lobytes 0003h +001027r 1 04 .lobytes 0004h +001028r 1 05 .lobytes 0005h +001029r 1 06 .lobytes 0006h +00102Ar 1 07 .lobytes 0007h +00102Br 1 08 .lobytes 0008h +00102Cr 1 09 .lobytes 0009h +00102Dr 1 0A .lobytes 000Ah +00102Er 1 0B .lobytes 000Bh +00102Fr 1 0C .lobytes 000Ch +001030r 1 0D .lobytes 000Dh +001031r 1 0E .lobytes 000Eh +001032r 1 0F .lobytes 000Fh +001033r 1 10 .lobytes 0010h +001034r 1 11 .lobytes 0011h +001035r 1 12 .lobytes 0012h +001036r 1 13 .lobytes 0013h +001037r 1 70 .lobytes 0070h +001038r 1 71 .lobytes 0071h +001039r 1 72 .lobytes 0072h +00103Ar 1 73 .lobytes 0073h +00103Br 1 74 .lobytes 0074h +00103Cr 1 75 .lobytes 0075h +00103Dr 1 76 .lobytes 0076h +00103Er 1 77 .lobytes 0077h +00103Fr 1 78 .lobytes 0078h +001040r 1 79 .lobytes 0079h +001041r 1 7A .lobytes 007Ah +001042r 1 7B .lobytes 007Bh +001043r 1 7C .lobytes 007Ch +001044r 1 7D .lobytes 007Dh +001045r 1 7E .lobytes 007Eh +001046r 1 7F .lobytes 007Fh +001047r 1 80 .lobytes 0080h +001048r 1 81 .lobytes 0081h +001049r 1 82 .lobytes 0082h +00104Ar 1 83 .lobytes 0083h +00104Br 1 84 .lobytes 0084h +00104Cr 1 85 .lobytes 0085h +00104Dr 1 86 .lobytes 0086h +00104Er 1 F0 .lobytes 00F0h +00104Fr 1 F1 .lobytes 00F1h +001050r 1 F2 .lobytes 00F2h +001051r 1 F3 .lobytes 00F3h +001052r 1 F4 .lobytes 00F4h +001053r 1 F5 .lobytes 00F5h +001054r 1 F6 .lobytes 00F6h +001055r 1 F7 .lobytes 00F7h +001056r 1 F8 .lobytes 00F8h +001057r 1 F9 .lobytes 00F9h +001058r 1 FA .lobytes 00FAh +001059r 1 FB .lobytes 00FBh +00105Ar 1 FC .lobytes 00FCh +00105Br 1 FD .lobytes 00FDh +00105Cr 1 FE .lobytes 00FEh +00105Dr 1 FF .lobytes 00FFh +00105Er 1 00 .lobytes 0100h +00105Fr 1 01 .lobytes 0101h +001060r 1 02 .lobytes 0102h +001061r 1 03 .lobytes 0103h +001062r 1 D2 .lobytes 0FD2h +001063r 1 D3 .lobytes 0FD3h +001064r 1 D4 .lobytes 0FD4h +001065r 1 D5 .lobytes 0FD5h +001066r 1 D6 .lobytes 0FD6h +001067r 1 D7 .lobytes 0FD7h +001068r 1 D8 .lobytes 0FD8h +001069r 1 D9 .lobytes 0FD9h +00106Ar 1 DA .lobytes 0FDAh +00106Br 1 DB .lobytes 0FDBh +00106Cr 1 DC .lobytes 0FDCh +00106Dr 1 DD .lobytes 0FDDh +00106Er 1 DE .lobytes 0FDEh +00106Fr 1 DF .lobytes 0FDFh +001070r 1 E0 .lobytes 0FE0h +001071r 1 E1 .lobytes 0FE1h +001072r 1 E2 .lobytes 0FE2h +001073r 1 E3 .lobytes 0FE3h +001074r 1 E4 .lobytes 0FE4h +001075r 1 E5 .lobytes 0FE5h +001076r 1 E6 .lobytes 0FE6h +001077r 1 E7 .lobytes 0FE7h +001078r 1 E8 .lobytes 0FE8h +001079r 1 E9 .lobytes 0FE9h +00107Ar 1 EA .lobytes 0FEAh +00107Br 1 EB .lobytes 0FEBh +00107Cr 1 EC .lobytes 0FECh +00107Dr 1 ED .lobytes 0FEDh +00107Er 1 EE .lobytes 0FEEh +00107Fr 1 EF .lobytes 0FEFh +001080r 1 F0 .lobytes 0FF0h +001081r 1 F1 .lobytes 0FF1h +001082r 1 F2 .lobytes 0FF2h +001083r 1 F3 .lobytes 0FF3h +001084r 1 F4 .lobytes 0FF4h +001085r 1 F5 .lobytes 0FF5h +001086r 1 F6 .lobytes 0FF6h +001087r 1 F7 .lobytes 0FF7h +001088r 1 F8 .lobytes 0FF8h +001089r 1 F9 .lobytes 0FF9h +00108Ar 1 FA .lobytes 0FFAh +00108Br 1 FB .lobytes 0FFBh +00108Cr 1 FC .lobytes 0FFCh +00108Dr 1 FD .lobytes 0FFDh +00108Er 1 FE .lobytes 0FFEh +00108Fr 1 FF .lobytes 0FFFh +001090r 1 00 .lobytes 1000h +001091r 1 01 .lobytes 1001h +001092r 1 02 .lobytes 1002h +001093r 1 03 .lobytes 1003h +001094r 1 04 .lobytes 1004h +001095r 1 05 .lobytes 1005h +001096r 1 06 .lobytes 1006h +001097r 1 07 .lobytes 1007h +001098r 1 08 .lobytes 1008h +001099r 1 F0 .lobytes 7FF0h +00109Ar 1 F1 .lobytes 7FF1h +00109Br 1 F2 .lobytes 7FF2h +00109Cr 1 F3 .lobytes 7FF3h +00109Dr 1 F4 .lobytes 7FF4h +00109Er 1 F5 .lobytes 7FF5h +00109Fr 1 F6 .lobytes 7FF6h +0010A0r 1 F7 .lobytes 7FF7h +0010A1r 1 F8 .lobytes 7FF8h +0010A2r 1 F9 .lobytes 7FF9h +0010A3r 1 FA .lobytes 7FFAh +0010A4r 1 FB .lobytes 7FFBh +0010A5r 1 FC .lobytes 7FFCh +0010A6r 1 FD .lobytes 7FFDh +0010A7r 1 FE .lobytes 7FFEh +0010A8r 1 FF .lobytes 7FFFh +0010A9r 1 00 .lobytes 8000h +0010AAr 1 01 .lobytes 8001h +0010ABr 1 02 .lobytes 8002h +0010ACr 1 03 .lobytes 8003h +0010ADr 1 04 .lobytes 8004h +0010AEr 1 05 .lobytes 8005h +0010AFr 1 06 .lobytes 8006h +0010B0r 1 07 .lobytes 8007h +0010B1r 1 08 .lobytes 8008h +0010B2r 1 09 .lobytes 8009h +0010B3r 1 0A .lobytes 800Ah +0010B4r 1 0B .lobytes 800Bh +0010B5r 1 E1 .lobytes 9FE1h +0010B6r 1 E2 .lobytes 9FE2h +0010B7r 1 E3 .lobytes 9FE3h +0010B8r 1 E4 .lobytes 9FE4h +0010B9r 1 E5 .lobytes 9FE5h +0010BAr 1 E6 .lobytes 9FE6h +0010BBr 1 E7 .lobytes 9FE7h +0010BCr 1 E8 .lobytes 9FE8h +0010BDr 1 E9 .lobytes 9FE9h +0010BEr 1 EA .lobytes 9FEAh +0010BFr 1 EB .lobytes 9FEBh +0010C0r 1 EC .lobytes 9FECh +0010C1r 1 ED .lobytes 9FEDh +0010C2r 1 EE .lobytes 9FEEh +0010C3r 1 EF .lobytes 9FEFh +0010C4r 1 F0 .lobytes 9FF0h +0010C5r 1 F1 .lobytes 9FF1h +0010C6r 1 F2 .lobytes 9FF2h +0010C7r 1 F3 .lobytes 9FF3h +0010C8r 1 F4 .lobytes 9FF4h +0010C9r 1 F5 .lobytes 9FF5h +0010CAr 1 F6 .lobytes 9FF6h +0010CBr 1 F7 .lobytes 9FF7h +0010CCr 1 F8 .lobytes 9FF8h +0010CDr 1 F9 .lobytes 9FF9h +0010CEr 1 FA .lobytes 9FFAh +0010CFr 1 FB .lobytes 9FFBh +0010D0r 1 FC .lobytes 9FFCh +0010D1r 1 FD .lobytes 9FFDh +0010D2r 1 FE .lobytes 9FFEh +0010D3r 1 FF .lobytes 9FFFh +0010D4r 1 00 .lobytes 0A000h +0010D5r 1 01 .lobytes 0A001h +0010D6r 1 02 .lobytes 0A002h +0010D7r 1 03 .lobytes 0A003h +0010D8r 1 04 .lobytes 0A004h +0010D9r 1 05 .lobytes 0A005h +0010DAr 1 06 .lobytes 0A006h +0010DBr 1 07 .lobytes 0A007h +0010DCr 1 08 .lobytes 0A008h +0010DDr 1 09 .lobytes 0A009h +0010DEr 1 0A .lobytes 0A00Ah +0010DFr 1 0B .lobytes 0A00Bh +0010E0r 1 0C .lobytes 0A00Ch +0010E1r 1 0D .lobytes 0A00Dh +0010E2r 1 0E .lobytes 0A00Eh +0010E3r 1 0F .lobytes 0A00Fh +0010E4r 1 E1 .lobytes 0AFE1h +0010E5r 1 E2 .lobytes 0AFE2h +0010E6r 1 E3 .lobytes 0AFE3h +0010E7r 1 E4 .lobytes 0AFE4h +0010E8r 1 E5 .lobytes 0AFE5h +0010E9r 1 E6 .lobytes 0AFE6h +0010EAr 1 E7 .lobytes 0AFE7h +0010EBr 1 E8 .lobytes 0AFE8h +0010ECr 1 E9 .lobytes 0AFE9h +0010EDr 1 EA .lobytes 0AFEAh +0010EEr 1 EB .lobytes 0AFEBh +0010EFr 1 EC .lobytes 0AFECh +0010F0r 1 ED .lobytes 0AFEDh +0010F1r 1 EE .lobytes 0AFEEh +0010F2r 1 EF .lobytes 0AFEFh +0010F3r 1 F0 .lobytes 0AFF0h +0010F4r 1 F1 .lobytes 0AFF1h +0010F5r 1 F2 .lobytes 0AFF2h +0010F6r 1 F3 .lobytes 0AFF3h +0010F7r 1 F4 .lobytes 0AFF4h +0010F8r 1 F5 .lobytes 0AFF5h +0010F9r 1 F6 .lobytes 0AFF6h +0010FAr 1 F7 .lobytes 0AFF7h +0010FBr 1 F8 .lobytes 0AFF8h +0010FCr 1 F9 .lobytes 0AFF9h +0010FDr 1 FA .lobytes 0AFFAh +0010FEr 1 FB .lobytes 0AFFBh +0010FFr 1 FC .lobytes 0AFFCh +001100r 1 FD .lobytes 0AFFDh +001101r 1 FE .lobytes 0AFFEh +001102r 1 FF .lobytes 0AFFFh +001103r 1 00 .lobytes 0B000h +001104r 1 01 .lobytes 0B001h +001105r 1 02 .lobytes 0B002h +001106r 1 03 .lobytes 0B003h +001107r 1 04 .lobytes 0B004h +001108r 1 05 .lobytes 0B005h +001109r 1 06 .lobytes 0B006h +00110Ar 1 07 .lobytes 0B007h +00110Br 1 08 .lobytes 0B008h +00110Cr 1 09 .lobytes 0B009h +00110Dr 1 0A .lobytes 0B00Ah +00110Er 1 0B .lobytes 0B00Bh +00110Fr 1 0C .lobytes 0B00Ch +001110r 1 0D .lobytes 0B00Dh +001111r 1 0E .lobytes 0B00Eh +001112r 1 0F .lobytes 0B00Fh +001113r 1 E1 .lobytes 0BFE1h +001114r 1 E2 .lobytes 0BFE2h +001115r 1 E3 .lobytes 0BFE3h +001116r 1 E4 .lobytes 0BFE4h +001117r 1 E5 .lobytes 0BFE5h +001118r 1 E6 .lobytes 0BFE6h +001119r 1 E7 .lobytes 0BFE7h +00111Ar 1 E8 .lobytes 0BFE8h +00111Br 1 E9 .lobytes 0BFE9h +00111Cr 1 EA .lobytes 0BFEAh +00111Dr 1 EB .lobytes 0BFEBh +00111Er 1 EC .lobytes 0BFECh +00111Fr 1 ED .lobytes 0BFEDh +001120r 1 EE .lobytes 0BFEEh +001121r 1 EF .lobytes 0BFEFh +001122r 1 F0 .lobytes 0BFF0h +001123r 1 F1 .lobytes 0BFF1h +001124r 1 F2 .lobytes 0BFF2h +001125r 1 F3 .lobytes 0BFF3h +001126r 1 F4 .lobytes 0BFF4h +001127r 1 F5 .lobytes 0BFF5h +001128r 1 F6 .lobytes 0BFF6h +001129r 1 F7 .lobytes 0BFF7h +00112Ar 1 F8 .lobytes 0BFF8h +00112Br 1 F9 .lobytes 0BFF9h +00112Cr 1 FA .lobytes 0BFFAh +00112Dr 1 FB .lobytes 0BFFBh +00112Er 1 FC .lobytes 0BFFCh +00112Fr 1 FD .lobytes 0BFFDh +001130r 1 FE .lobytes 0BFFEh +001131r 1 FF .lobytes 0BFFFh +001132r 1 00 .lobytes 0C000h +001133r 1 01 .lobytes 0C001h +001134r 1 02 .lobytes 0C002h +001135r 1 03 .lobytes 0C003h +001136r 1 04 .lobytes 0C004h +001137r 1 05 .lobytes 0C005h +001138r 1 06 .lobytes 0C006h +001139r 1 07 .lobytes 0C007h +00113Ar 1 08 .lobytes 0C008h +00113Br 1 09 .lobytes 0C009h +00113Cr 1 0A .lobytes 0C00Ah +00113Dr 1 0B .lobytes 0C00Bh +00113Er 1 0C .lobytes 0C00Ch +00113Fr 1 0D .lobytes 0C00Dh +001140r 1 0E .lobytes 0C00Eh +001141r 1 0F .lobytes 0C00Fh +001142r 1 E1 .lobytes 0CFE1h +001143r 1 E2 .lobytes 0CFE2h +001144r 1 E3 .lobytes 0CFE3h +001145r 1 E4 .lobytes 0CFE4h +001146r 1 E5 .lobytes 0CFE5h +001147r 1 E6 .lobytes 0CFE6h +001148r 1 E7 .lobytes 0CFE7h +001149r 1 E8 .lobytes 0CFE8h +00114Ar 1 E9 .lobytes 0CFE9h +00114Br 1 EA .lobytes 0CFEAh +00114Cr 1 EB .lobytes 0CFEBh +00114Dr 1 EC .lobytes 0CFECh +00114Er 1 ED .lobytes 0CFEDh +00114Fr 1 EE .lobytes 0CFEEh +001150r 1 EF .lobytes 0CFEFh +001151r 1 F0 .lobytes 0CFF0h +001152r 1 F1 .lobytes 0CFF1h +001153r 1 F2 .lobytes 0CFF2h +001154r 1 F3 .lobytes 0CFF3h +001155r 1 F4 .lobytes 0CFF4h +001156r 1 F5 .lobytes 0CFF5h +001157r 1 F6 .lobytes 0CFF6h +001158r 1 F7 .lobytes 0CFF7h +001159r 1 F8 .lobytes 0CFF8h +00115Ar 1 F9 .lobytes 0CFF9h +00115Br 1 FA .lobytes 0CFFAh +00115Cr 1 FB .lobytes 0CFFBh +00115Dr 1 FC .lobytes 0CFFCh +00115Er 1 FD .lobytes 0CFFDh +00115Fr 1 FE .lobytes 0CFFEh +001160r 1 FF .lobytes 0CFFFh +001161r 1 00 .lobytes 0D000h +001162r 1 01 .lobytes 0D001h +001163r 1 02 .lobytes 0D002h +001164r 1 03 .lobytes 0D003h +001165r 1 04 .lobytes 0D004h +001166r 1 05 .lobytes 0D005h +001167r 1 06 .lobytes 0D006h +001168r 1 07 .lobytes 0D007h +001169r 1 08 .lobytes 0D008h +00116Ar 1 09 .lobytes 0D009h +00116Br 1 0A .lobytes 0D00Ah +00116Cr 1 0B .lobytes 0D00Bh +00116Dr 1 0C .lobytes 0D00Ch +00116Er 1 0D .lobytes 0D00Dh +00116Fr 1 0E .lobytes 0D00Eh +001170r 1 0F .lobytes 0D00Fh +001171r 1 E1 .lobytes 0DFE1h +001172r 1 E2 .lobytes 0DFE2h +001173r 1 E3 .lobytes 0DFE3h +001174r 1 E4 .lobytes 0DFE4h +001175r 1 E5 .lobytes 0DFE5h +001176r 1 E6 .lobytes 0DFE6h +001177r 1 E7 .lobytes 0DFE7h +001178r 1 E8 .lobytes 0DFE8h +001179r 1 E9 .lobytes 0DFE9h +00117Ar 1 EA .lobytes 0DFEAh +00117Br 1 EB .lobytes 0DFEBh +00117Cr 1 EC .lobytes 0DFECh +00117Dr 1 ED .lobytes 0DFEDh +00117Er 1 EE .lobytes 0DFEEh +00117Fr 1 EF .lobytes 0DFEFh +001180r 1 F0 .lobytes 0DFF0h +001181r 1 F1 .lobytes 0DFF1h +001182r 1 F2 .lobytes 0DFF2h +001183r 1 F3 .lobytes 0DFF3h +001184r 1 F4 .lobytes 0DFF4h +001185r 1 F5 .lobytes 0DFF5h +001186r 1 F6 .lobytes 0DFF6h +001187r 1 F7 .lobytes 0DFF7h +001188r 1 F8 .lobytes 0DFF8h +001189r 1 F9 .lobytes 0DFF9h +00118Ar 1 FA .lobytes 0DFFAh +00118Br 1 FB .lobytes 0DFFBh +00118Cr 1 FC .lobytes 0DFFCh +00118Dr 1 FD .lobytes 0DFFDh +00118Er 1 FE .lobytes 0DFFEh +00118Fr 1 FF .lobytes 0DFFFh +001190r 1 00 .lobytes 0E000h +001191r 1 01 .lobytes 0E001h +001192r 1 02 .lobytes 0E002h +001193r 1 03 .lobytes 0E003h +001194r 1 04 .lobytes 0E004h +001195r 1 05 .lobytes 0E005h +001196r 1 06 .lobytes 0E006h +001197r 1 07 .lobytes 0E007h +001198r 1 08 .lobytes 0E008h +001199r 1 09 .lobytes 0E009h +00119Ar 1 0A .lobytes 0E00Ah +00119Br 1 0B .lobytes 0E00Bh +00119Cr 1 0C .lobytes 0E00Ch +00119Dr 1 0D .lobytes 0E00Dh +00119Er 1 0E .lobytes 0E00Eh +00119Fr 1 0F .lobytes 0E00Fh +0011A0r 1 E1 .lobytes 0EFE1h +0011A1r 1 E2 .lobytes 0EFE2h +0011A2r 1 E3 .lobytes 0EFE3h +0011A3r 1 E4 .lobytes 0EFE4h +0011A4r 1 E5 .lobytes 0EFE5h +0011A5r 1 E6 .lobytes 0EFE6h +0011A6r 1 E7 .lobytes 0EFE7h +0011A7r 1 E8 .lobytes 0EFE8h +0011A8r 1 E9 .lobytes 0EFE9h +0011A9r 1 EA .lobytes 0EFEAh +0011AAr 1 EB .lobytes 0EFEBh +0011ABr 1 EC .lobytes 0EFECh +0011ACr 1 ED .lobytes 0EFEDh +0011ADr 1 EE .lobytes 0EFEEh +0011AEr 1 EF .lobytes 0EFEFh +0011AFr 1 F0 .lobytes 0EFF0h +0011B0r 1 F1 .lobytes 0EFF1h +0011B1r 1 F2 .lobytes 0EFF2h +0011B2r 1 F3 .lobytes 0EFF3h +0011B3r 1 F4 .lobytes 0EFF4h +0011B4r 1 F5 .lobytes 0EFF5h +0011B5r 1 F6 .lobytes 0EFF6h +0011B6r 1 F7 .lobytes 0EFF7h +0011B7r 1 F8 .lobytes 0EFF8h +0011B8r 1 F9 .lobytes 0EFF9h +0011B9r 1 FA .lobytes 0EFFAh +0011BAr 1 FB .lobytes 0EFFBh +0011BBr 1 FC .lobytes 0EFFCh +0011BCr 1 FD .lobytes 0EFFDh +0011BDr 1 FE .lobytes 0EFFEh +0011BEr 1 FF .lobytes 0EFFFh +0011BFr 1 00 .lobytes 0F000h +0011C0r 1 01 .lobytes 0F001h +0011C1r 1 02 .lobytes 0F002h +0011C2r 1 03 .lobytes 0F003h +0011C3r 1 04 .lobytes 0F004h +0011C4r 1 05 .lobytes 0F005h +0011C5r 1 06 .lobytes 0F006h +0011C6r 1 07 .lobytes 0F007h +0011C7r 1 08 .lobytes 0F008h +0011C8r 1 09 .lobytes 0F009h +0011C9r 1 0A .lobytes 0F00Ah +0011CAr 1 0B .lobytes 0F00Bh +0011CBr 1 0C .lobytes 0F00Ch +0011CCr 1 0D .lobytes 0F00Dh +0011CDr 1 0E .lobytes 0F00Eh +0011CEr 1 0F .lobytes 0F00Fh +0011CFr 1 E1 .lobytes 0FFE1h +0011D0r 1 E2 .lobytes 0FFE2h +0011D1r 1 E3 .lobytes 0FFE3h +0011D2r 1 E4 .lobytes 0FFE4h +0011D3r 1 E5 .lobytes 0FFE5h +0011D4r 1 E6 .lobytes 0FFE6h +0011D5r 1 E7 .lobytes 0FFE7h +0011D6r 1 E8 .lobytes 0FFE8h +0011D7r 1 E9 .lobytes 0FFE9h +0011D8r 1 EA .lobytes 0FFEAh +0011D9r 1 EB .lobytes 0FFEBh +0011DAr 1 EC .lobytes 0FFECh +0011DBr 1 ED .lobytes 0FFEDh +0011DCr 1 EE .lobytes 0FFEEh +0011DDr 1 EF .lobytes 0FFEFh +0011DEr 1 F0 .lobytes 0FFF0h +0011DFr 1 F1 .lobytes 0FFF1h +0011E0r 1 F2 .lobytes 0FFF2h +0011E1r 1 F3 .lobytes 0FFF3h +0011E2r 1 F4 .lobytes 0FFF4h +0011E3r 1 F5 .lobytes 0FFF5h +0011E4r 1 F6 .lobytes 0FFF6h +0011E5r 1 F7 .lobytes 0FFF7h +0011E6r 1 F8 .lobytes 0FFF8h +0011E7r 1 F9 .lobytes 0FFF9h +0011E8r 1 FA .lobytes 0FFFAh +0011E9r 1 FB .lobytes 0FFFBh +0011EAr 1 FC .lobytes 0FFFCh +0011EBr 1 FD .lobytes 0FFFDh +0011ECr 1 FE .lobytes 0FFFEh +0011EDr 1 FF .lobytes 0FFFFh +0011EEr 1 +0011EEr 1 ; alternative hex values, always leading zero +0011EEr 1 00 .lobytes 00h +0011EFr 1 01 .lobytes 01h +0011F0r 1 02 .lobytes 02h +0011F1r 1 03 .lobytes 03h +0011F2r 1 04 .lobytes 04h +0011F3r 1 05 .lobytes 05h +0011F4r 1 06 .lobytes 06h +0011F5r 1 07 .lobytes 07h +0011F6r 1 08 .lobytes 08h +0011F7r 1 09 .lobytes 09h +0011F8r 1 0A .lobytes 0ah +0011F9r 1 0B .lobytes 0bh +0011FAr 1 0C .lobytes 0ch +0011FBr 1 0D .lobytes 0dh +0011FCr 1 0E .lobytes 0eh +0011FDr 1 0F .lobytes 0fh +0011FEr 1 10 .lobytes 010h +0011FFr 1 11 .lobytes 011h +001200r 1 12 .lobytes 012h +001201r 1 13 .lobytes 013h +001202r 1 70 .lobytes 070h +001203r 1 71 .lobytes 071h +001204r 1 72 .lobytes 072h +001205r 1 73 .lobytes 073h +001206r 1 74 .lobytes 074h +001207r 1 75 .lobytes 075h +001208r 1 76 .lobytes 076h +001209r 1 77 .lobytes 077h +00120Ar 1 78 .lobytes 078h +00120Br 1 79 .lobytes 079h +00120Cr 1 7A .lobytes 07ah +00120Dr 1 7B .lobytes 07bh +00120Er 1 7C .lobytes 07ch +00120Fr 1 7D .lobytes 07dh +001210r 1 7E .lobytes 07eh +001211r 1 7F .lobytes 07fh +001212r 1 80 .lobytes 080h +001213r 1 81 .lobytes 081h +001214r 1 82 .lobytes 082h +001215r 1 83 .lobytes 083h +001216r 1 84 .lobytes 084h +001217r 1 85 .lobytes 085h +001218r 1 86 .lobytes 086h +001219r 1 F0 .lobytes 0f0h +00121Ar 1 F1 .lobytes 0f1h +00121Br 1 F2 .lobytes 0f2h +00121Cr 1 F3 .lobytes 0f3h +00121Dr 1 F4 .lobytes 0f4h +00121Er 1 F5 .lobytes 0f5h +00121Fr 1 F6 .lobytes 0f6h +001220r 1 F7 .lobytes 0f7h +001221r 1 F8 .lobytes 0f8h +001222r 1 F9 .lobytes 0f9h +001223r 1 FA .lobytes 0fah +001224r 1 FB .lobytes 0fbh +001225r 1 FC .lobytes 0fch +001226r 1 FD .lobytes 0fdh +001227r 1 FE .lobytes 0feh +001228r 1 FF .lobytes 0ffh +001229r 1 00 .lobytes 0100h +00122Ar 1 01 .lobytes 0101h +00122Br 1 02 .lobytes 0102h +00122Cr 1 03 .lobytes 0103h +00122Dr 1 D2 .lobytes 0fd2h +00122Er 1 D3 .lobytes 0fd3h +00122Fr 1 D4 .lobytes 0fd4h +001230r 1 D5 .lobytes 0fd5h +001231r 1 D6 .lobytes 0fd6h +001232r 1 D7 .lobytes 0fd7h +001233r 1 D8 .lobytes 0fd8h +001234r 1 D9 .lobytes 0fd9h +001235r 1 DA .lobytes 0fdah +001236r 1 DB .lobytes 0fdbh +001237r 1 DC .lobytes 0fdch +001238r 1 DD .lobytes 0fddh +001239r 1 DE .lobytes 0fdeh +00123Ar 1 DF .lobytes 0fdfh +00123Br 1 E0 .lobytes 0fe0h +00123Cr 1 E1 .lobytes 0fe1h +00123Dr 1 E2 .lobytes 0fe2h +00123Er 1 E3 .lobytes 0fe3h +00123Fr 1 E4 .lobytes 0fe4h +001240r 1 E5 .lobytes 0fe5h +001241r 1 E6 .lobytes 0fe6h +001242r 1 E7 .lobytes 0fe7h +001243r 1 E8 .lobytes 0fe8h +001244r 1 E9 .lobytes 0fe9h +001245r 1 EA .lobytes 0feah +001246r 1 EB .lobytes 0febh +001247r 1 EC .lobytes 0fech +001248r 1 ED .lobytes 0fedh +001249r 1 EE .lobytes 0feeh +00124Ar 1 EF .lobytes 0fefh +00124Br 1 F0 .lobytes 0ff0h +00124Cr 1 F1 .lobytes 0ff1h +00124Dr 1 F2 .lobytes 0ff2h +00124Er 1 F3 .lobytes 0ff3h +00124Fr 1 F4 .lobytes 0ff4h +001250r 1 F5 .lobytes 0ff5h +001251r 1 F6 .lobytes 0ff6h +001252r 1 F7 .lobytes 0ff7h +001253r 1 F8 .lobytes 0ff8h +001254r 1 F9 .lobytes 0ff9h +001255r 1 FA .lobytes 0ffah +001256r 1 FB .lobytes 0ffbh +001257r 1 FC .lobytes 0ffch +001258r 1 FD .lobytes 0ffdh +001259r 1 FE .lobytes 0ffeh +00125Ar 1 FF .lobytes 0fffh +00125Br 1 00 .lobytes 01000h +00125Cr 1 01 .lobytes 01001h +00125Dr 1 02 .lobytes 01002h +00125Er 1 03 .lobytes 01003h +00125Fr 1 04 .lobytes 01004h +001260r 1 05 .lobytes 01005h +001261r 1 06 .lobytes 01006h +001262r 1 07 .lobytes 01007h +001263r 1 08 .lobytes 01008h +001264r 1 F0 .lobytes 07ff0h +001265r 1 F1 .lobytes 07ff1h +001266r 1 F2 .lobytes 07ff2h +001267r 1 F3 .lobytes 07ff3h +001268r 1 F4 .lobytes 07ff4h +001269r 1 F5 .lobytes 07ff5h +00126Ar 1 F6 .lobytes 07ff6h +00126Br 1 F7 .lobytes 07ff7h +00126Cr 1 F8 .lobytes 07ff8h +00126Dr 1 F9 .lobytes 07ff9h +00126Er 1 FA .lobytes 07ffah +00126Fr 1 FB .lobytes 07ffbh +001270r 1 FC .lobytes 07ffch +001271r 1 FD .lobytes 07ffdh +001272r 1 FE .lobytes 07ffeh +001273r 1 FF .lobytes 07fffh +001274r 1 00 .lobytes 08000h +001275r 1 01 .lobytes 08001h +001276r 1 02 .lobytes 08002h +001277r 1 03 .lobytes 08003h +001278r 1 04 .lobytes 08004h +001279r 1 05 .lobytes 08005h +00127Ar 1 06 .lobytes 08006h +00127Br 1 07 .lobytes 08007h +00127Cr 1 08 .lobytes 08008h +00127Dr 1 09 .lobytes 08009h +00127Er 1 0A .lobytes 0800ah +00127Fr 1 0B .lobytes 0800bh +001280r 1 E1 .lobytes 09fe1h +001281r 1 E2 .lobytes 09fe2h +001282r 1 E3 .lobytes 09fe3h +001283r 1 E4 .lobytes 09fe4h +001284r 1 E5 .lobytes 09fe5h +001285r 1 E6 .lobytes 09fe6h +001286r 1 E7 .lobytes 09fe7h +001287r 1 E8 .lobytes 09fe8h +001288r 1 E9 .lobytes 09fe9h +001289r 1 EA .lobytes 09feah +00128Ar 1 EB .lobytes 09febh +00128Br 1 EC .lobytes 09fech +00128Cr 1 ED .lobytes 09fedh +00128Dr 1 EE .lobytes 09feeh +00128Er 1 EF .lobytes 09fefh +00128Fr 1 F0 .lobytes 09ff0h +001290r 1 F1 .lobytes 09ff1h +001291r 1 F2 .lobytes 09ff2h +001292r 1 F3 .lobytes 09ff3h +001293r 1 F4 .lobytes 09ff4h +001294r 1 F5 .lobytes 09ff5h +001295r 1 F6 .lobytes 09ff6h +001296r 1 F7 .lobytes 09ff7h +001297r 1 F8 .lobytes 09ff8h +001298r 1 F9 .lobytes 09ff9h +001299r 1 FA .lobytes 09ffah +00129Ar 1 FB .lobytes 09ffbh +00129Br 1 FC .lobytes 09ffch +00129Cr 1 FD .lobytes 09ffdh +00129Dr 1 FE .lobytes 09ffeh +00129Er 1 FF .lobytes 09fffh +00129Fr 1 00 .lobytes 0a000h +0012A0r 1 01 .lobytes 0a001h +0012A1r 1 02 .lobytes 0a002h +0012A2r 1 03 .lobytes 0a003h +0012A3r 1 04 .lobytes 0a004h +0012A4r 1 05 .lobytes 0a005h +0012A5r 1 06 .lobytes 0a006h +0012A6r 1 07 .lobytes 0a007h +0012A7r 1 08 .lobytes 0a008h +0012A8r 1 09 .lobytes 0a009h +0012A9r 1 0A .lobytes 0a00ah +0012AAr 1 0B .lobytes 0a00bh +0012ABr 1 0C .lobytes 0a00ch +0012ACr 1 0D .lobytes 0a00dh +0012ADr 1 0E .lobytes 0a00eh +0012AEr 1 0F .lobytes 0a00fh +0012AFr 1 E1 .lobytes 0afe1h +0012B0r 1 E2 .lobytes 0afe2h +0012B1r 1 E3 .lobytes 0afe3h +0012B2r 1 E4 .lobytes 0afe4h +0012B3r 1 E5 .lobytes 0afe5h +0012B4r 1 E6 .lobytes 0afe6h +0012B5r 1 E7 .lobytes 0afe7h +0012B6r 1 E8 .lobytes 0afe8h +0012B7r 1 E9 .lobytes 0afe9h +0012B8r 1 EA .lobytes 0afeah +0012B9r 1 EB .lobytes 0afebh +0012BAr 1 EC .lobytes 0afech +0012BBr 1 ED .lobytes 0afedh +0012BCr 1 EE .lobytes 0afeeh +0012BDr 1 EF .lobytes 0afefh +0012BEr 1 F0 .lobytes 0aff0h +0012BFr 1 F1 .lobytes 0aff1h +0012C0r 1 F2 .lobytes 0aff2h +0012C1r 1 F3 .lobytes 0aff3h +0012C2r 1 F4 .lobytes 0aff4h +0012C3r 1 F5 .lobytes 0aff5h +0012C4r 1 F6 .lobytes 0aff6h +0012C5r 1 F7 .lobytes 0aff7h +0012C6r 1 F8 .lobytes 0aff8h +0012C7r 1 F9 .lobytes 0aff9h +0012C8r 1 FA .lobytes 0affah +0012C9r 1 FB .lobytes 0affbh +0012CAr 1 FC .lobytes 0affch +0012CBr 1 FD .lobytes 0affdh +0012CCr 1 FE .lobytes 0affeh +0012CDr 1 FF .lobytes 0afffh +0012CEr 1 00 .lobytes 0b000h +0012CFr 1 01 .lobytes 0b001h +0012D0r 1 02 .lobytes 0b002h +0012D1r 1 03 .lobytes 0b003h +0012D2r 1 04 .lobytes 0b004h +0012D3r 1 05 .lobytes 0b005h +0012D4r 1 06 .lobytes 0b006h +0012D5r 1 07 .lobytes 0b007h +0012D6r 1 08 .lobytes 0b008h +0012D7r 1 09 .lobytes 0b009h +0012D8r 1 0A .lobytes 0b00ah +0012D9r 1 0B .lobytes 0b00bh +0012DAr 1 0C .lobytes 0b00ch +0012DBr 1 0D .lobytes 0b00dh +0012DCr 1 0E .lobytes 0b00eh +0012DDr 1 0F .lobytes 0b00fh +0012DEr 1 E1 .lobytes 0bfe1h +0012DFr 1 E2 .lobytes 0bfe2h +0012E0r 1 E3 .lobytes 0bfe3h +0012E1r 1 E4 .lobytes 0bfe4h +0012E2r 1 E5 .lobytes 0bfe5h +0012E3r 1 E6 .lobytes 0bfe6h +0012E4r 1 E7 .lobytes 0bfe7h +0012E5r 1 E8 .lobytes 0bfe8h +0012E6r 1 E9 .lobytes 0bfe9h +0012E7r 1 EA .lobytes 0bfeah +0012E8r 1 EB .lobytes 0bfebh +0012E9r 1 EC .lobytes 0bfech +0012EAr 1 ED .lobytes 0bfedh +0012EBr 1 EE .lobytes 0bfeeh +0012ECr 1 EF .lobytes 0bfefh +0012EDr 1 F0 .lobytes 0bff0h +0012EEr 1 F1 .lobytes 0bff1h +0012EFr 1 F2 .lobytes 0bff2h +0012F0r 1 F3 .lobytes 0bff3h +0012F1r 1 F4 .lobytes 0bff4h +0012F2r 1 F5 .lobytes 0bff5h +0012F3r 1 F6 .lobytes 0bff6h +0012F4r 1 F7 .lobytes 0bff7h +0012F5r 1 F8 .lobytes 0bff8h +0012F6r 1 F9 .lobytes 0bff9h +0012F7r 1 FA .lobytes 0bffah +0012F8r 1 FB .lobytes 0bffbh +0012F9r 1 FC .lobytes 0bffch +0012FAr 1 FD .lobytes 0bffdh +0012FBr 1 FE .lobytes 0bffeh +0012FCr 1 FF .lobytes 0bfffh +0012FDr 1 00 .lobytes 0c000h +0012FEr 1 01 .lobytes 0c001h +0012FFr 1 02 .lobytes 0c002h +001300r 1 03 .lobytes 0c003h +001301r 1 04 .lobytes 0c004h +001302r 1 05 .lobytes 0c005h +001303r 1 06 .lobytes 0c006h +001304r 1 07 .lobytes 0c007h +001305r 1 08 .lobytes 0c008h +001306r 1 09 .lobytes 0c009h +001307r 1 0A .lobytes 0c00ah +001308r 1 0B .lobytes 0c00bh +001309r 1 0C .lobytes 0c00ch +00130Ar 1 0D .lobytes 0c00dh +00130Br 1 0E .lobytes 0c00eh +00130Cr 1 0F .lobytes 0c00fh +00130Dr 1 E1 .lobytes 0cfe1h +00130Er 1 E2 .lobytes 0cfe2h +00130Fr 1 E3 .lobytes 0cfe3h +001310r 1 E4 .lobytes 0cfe4h +001311r 1 E5 .lobytes 0cfe5h +001312r 1 E6 .lobytes 0cfe6h +001313r 1 E7 .lobytes 0cfe7h +001314r 1 E8 .lobytes 0cfe8h +001315r 1 E9 .lobytes 0cfe9h +001316r 1 EA .lobytes 0cfeah +001317r 1 EB .lobytes 0cfebh +001318r 1 EC .lobytes 0cfech +001319r 1 ED .lobytes 0cfedh +00131Ar 1 EE .lobytes 0cfeeh +00131Br 1 EF .lobytes 0cfefh +00131Cr 1 F0 .lobytes 0cff0h +00131Dr 1 F1 .lobytes 0cff1h +00131Er 1 F2 .lobytes 0cff2h +00131Fr 1 F3 .lobytes 0cff3h +001320r 1 F4 .lobytes 0cff4h +001321r 1 F5 .lobytes 0cff5h +001322r 1 F6 .lobytes 0cff6h +001323r 1 F7 .lobytes 0cff7h +001324r 1 F8 .lobytes 0cff8h +001325r 1 F9 .lobytes 0cff9h +001326r 1 FA .lobytes 0cffah +001327r 1 FB .lobytes 0cffbh +001328r 1 FC .lobytes 0cffch +001329r 1 FD .lobytes 0cffdh +00132Ar 1 FE .lobytes 0cffeh +00132Br 1 FF .lobytes 0cfffh +00132Cr 1 00 .lobytes 0d000h +00132Dr 1 01 .lobytes 0d001h +00132Er 1 02 .lobytes 0d002h +00132Fr 1 03 .lobytes 0d003h +001330r 1 04 .lobytes 0d004h +001331r 1 05 .lobytes 0d005h +001332r 1 06 .lobytes 0d006h +001333r 1 07 .lobytes 0d007h +001334r 1 08 .lobytes 0d008h +001335r 1 09 .lobytes 0d009h +001336r 1 0A .lobytes 0d00ah +001337r 1 0B .lobytes 0d00bh +001338r 1 0C .lobytes 0d00ch +001339r 1 0D .lobytes 0d00dh +00133Ar 1 0E .lobytes 0d00eh +00133Br 1 0F .lobytes 0d00fh +00133Cr 1 E1 .lobytes 0dfe1h +00133Dr 1 E2 .lobytes 0dfe2h +00133Er 1 E3 .lobytes 0dfe3h +00133Fr 1 E4 .lobytes 0dfe4h +001340r 1 E5 .lobytes 0dfe5h +001341r 1 E6 .lobytes 0dfe6h +001342r 1 E7 .lobytes 0dfe7h +001343r 1 E8 .lobytes 0dfe8h +001344r 1 E9 .lobytes 0dfe9h +001345r 1 EA .lobytes 0dfeah +001346r 1 EB .lobytes 0dfebh +001347r 1 EC .lobytes 0dfech +001348r 1 ED .lobytes 0dfedh +001349r 1 EE .lobytes 0dfeeh +00134Ar 1 EF .lobytes 0dfefh +00134Br 1 F0 .lobytes 0dff0h +00134Cr 1 F1 .lobytes 0dff1h +00134Dr 1 F2 .lobytes 0dff2h +00134Er 1 F3 .lobytes 0dff3h +00134Fr 1 F4 .lobytes 0dff4h +001350r 1 F5 .lobytes 0dff5h +001351r 1 F6 .lobytes 0dff6h +001352r 1 F7 .lobytes 0dff7h +001353r 1 F8 .lobytes 0dff8h +001354r 1 F9 .lobytes 0dff9h +001355r 1 FA .lobytes 0dffah +001356r 1 FB .lobytes 0dffbh +001357r 1 FC .lobytes 0dffch +001358r 1 FD .lobytes 0dffdh +001359r 1 FE .lobytes 0dffeh +00135Ar 1 FF .lobytes 0dfffh +00135Br 1 00 .lobytes 0e000h +00135Cr 1 01 .lobytes 0e001h +00135Dr 1 02 .lobytes 0e002h +00135Er 1 03 .lobytes 0e003h +00135Fr 1 04 .lobytes 0e004h +001360r 1 05 .lobytes 0e005h +001361r 1 06 .lobytes 0e006h +001362r 1 07 .lobytes 0e007h +001363r 1 08 .lobytes 0e008h +001364r 1 09 .lobytes 0e009h +001365r 1 0A .lobytes 0e00ah +001366r 1 0B .lobytes 0e00bh +001367r 1 0C .lobytes 0e00ch +001368r 1 0D .lobytes 0e00dh +001369r 1 0E .lobytes 0e00eh +00136Ar 1 0F .lobytes 0e00fh +00136Br 1 E1 .lobytes 0efe1h +00136Cr 1 E2 .lobytes 0efe2h +00136Dr 1 E3 .lobytes 0efe3h +00136Er 1 E4 .lobytes 0efe4h +00136Fr 1 E5 .lobytes 0efe5h +001370r 1 E6 .lobytes 0efe6h +001371r 1 E7 .lobytes 0efe7h +001372r 1 E8 .lobytes 0efe8h +001373r 1 E9 .lobytes 0efe9h +001374r 1 EA .lobytes 0efeah +001375r 1 EB .lobytes 0efebh +001376r 1 EC .lobytes 0efech +001377r 1 ED .lobytes 0efedh +001378r 1 EE .lobytes 0efeeh +001379r 1 EF .lobytes 0efefh +00137Ar 1 F0 .lobytes 0eff0h +00137Br 1 F1 .lobytes 0eff1h +00137Cr 1 F2 .lobytes 0eff2h +00137Dr 1 F3 .lobytes 0eff3h +00137Er 1 F4 .lobytes 0eff4h +00137Fr 1 F5 .lobytes 0eff5h +001380r 1 F6 .lobytes 0eff6h +001381r 1 F7 .lobytes 0eff7h +001382r 1 F8 .lobytes 0eff8h +001383r 1 F9 .lobytes 0eff9h +001384r 1 FA .lobytes 0effah +001385r 1 FB .lobytes 0effbh +001386r 1 FC .lobytes 0effch +001387r 1 FD .lobytes 0effdh +001388r 1 FE .lobytes 0effeh +001389r 1 FF .lobytes 0efffh +00138Ar 1 00 .lobytes 0f000h +00138Br 1 01 .lobytes 0f001h +00138Cr 1 02 .lobytes 0f002h +00138Dr 1 03 .lobytes 0f003h +00138Er 1 04 .lobytes 0f004h +00138Fr 1 05 .lobytes 0f005h +001390r 1 06 .lobytes 0f006h +001391r 1 07 .lobytes 0f007h +001392r 1 08 .lobytes 0f008h +001393r 1 09 .lobytes 0f009h +001394r 1 0A .lobytes 0f00ah +001395r 1 0B .lobytes 0f00bh +001396r 1 0C .lobytes 0f00ch +001397r 1 0D .lobytes 0f00dh +001398r 1 0E .lobytes 0f00eh +001399r 1 0F .lobytes 0f00fh +00139Ar 1 E1 .lobytes 0ffe1h +00139Br 1 E2 .lobytes 0ffe2h +00139Cr 1 E3 .lobytes 0ffe3h +00139Dr 1 E4 .lobytes 0ffe4h +00139Er 1 E5 .lobytes 0ffe5h +00139Fr 1 E6 .lobytes 0ffe6h +0013A0r 1 E7 .lobytes 0ffe7h +0013A1r 1 E8 .lobytes 0ffe8h +0013A2r 1 E9 .lobytes 0ffe9h +0013A3r 1 EA .lobytes 0ffeah +0013A4r 1 EB .lobytes 0ffebh +0013A5r 1 EC .lobytes 0ffech +0013A6r 1 ED .lobytes 0ffedh +0013A7r 1 EE .lobytes 0ffeeh +0013A8r 1 EF .lobytes 0ffefh +0013A9r 1 F0 .lobytes 0fff0h +0013AAr 1 F1 .lobytes 0fff1h +0013ABr 1 F2 .lobytes 0fff2h +0013ACr 1 F3 .lobytes 0fff3h +0013ADr 1 F4 .lobytes 0fff4h +0013AEr 1 F5 .lobytes 0fff5h +0013AFr 1 F6 .lobytes 0fff6h +0013B0r 1 F7 .lobytes 0fff7h +0013B1r 1 F8 .lobytes 0fff8h +0013B2r 1 F9 .lobytes 0fff9h +0013B3r 1 FA .lobytes 0fffah +0013B4r 1 FB .lobytes 0fffbh +0013B5r 1 FC .lobytes 0fffch +0013B6r 1 FD .lobytes 0fffdh +0013B7r 1 FE .lobytes 0fffeh +0013B8r 1 FF .lobytes 0ffffh +0013B9r 1 +0013B9r 1 ; binary values, variable length +0013B9r 1 00 .lobytes %0 +0013BAr 1 01 .lobytes %01 +0013BBr 1 02 .lobytes %010 +0013BCr 1 03 .lobytes %011 +0013BDr 1 04 .lobytes %0100 +0013BEr 1 05 .lobytes %0101 +0013BFr 1 06 .lobytes %0110 +0013C0r 1 07 .lobytes %0111 +0013C1r 1 08 .lobytes %01000 +0013C2r 1 09 .lobytes %01001 +0013C3r 1 0A .lobytes %01010 +0013C4r 1 0B .lobytes %01011 +0013C5r 1 0C .lobytes %01100 +0013C6r 1 0D .lobytes %01101 +0013C7r 1 0E .lobytes %01110 +0013C8r 1 0F .lobytes %01111 +0013C9r 1 10 .lobytes %010000 +0013CAr 1 11 .lobytes %010001 +0013CBr 1 12 .lobytes %010010 +0013CCr 1 13 .lobytes %010011 +0013CDr 1 70 .lobytes %01110000 +0013CEr 1 71 .lobytes %01110001 +0013CFr 1 72 .lobytes %01110010 +0013D0r 1 73 .lobytes %01110011 +0013D1r 1 74 .lobytes %01110100 +0013D2r 1 75 .lobytes %01110101 +0013D3r 1 76 .lobytes %01110110 +0013D4r 1 77 .lobytes %01110111 +0013D5r 1 78 .lobytes %01111000 +0013D6r 1 79 .lobytes %01111001 +0013D7r 1 7A .lobytes %01111010 +0013D8r 1 7B .lobytes %01111011 +0013D9r 1 7C .lobytes %01111100 +0013DAr 1 7D .lobytes %01111101 +0013DBr 1 7E .lobytes %01111110 +0013DCr 1 7F .lobytes %01111111 +0013DDr 1 80 .lobytes %010000000 +0013DEr 1 81 .lobytes %010000001 +0013DFr 1 82 .lobytes %010000010 +0013E0r 1 83 .lobytes %010000011 +0013E1r 1 84 .lobytes %010000100 +0013E2r 1 85 .lobytes %010000101 +0013E3r 1 86 .lobytes %010000110 +0013E4r 1 F0 .lobytes %011110000 +0013E5r 1 F1 .lobytes %011110001 +0013E6r 1 F2 .lobytes %011110010 +0013E7r 1 F3 .lobytes %011110011 +0013E8r 1 F4 .lobytes %011110100 +0013E9r 1 F5 .lobytes %011110101 +0013EAr 1 F6 .lobytes %011110110 +0013EBr 1 F7 .lobytes %011110111 +0013ECr 1 F8 .lobytes %011111000 +0013EDr 1 F9 .lobytes %011111001 +0013EEr 1 FA .lobytes %011111010 +0013EFr 1 FB .lobytes %011111011 +0013F0r 1 FC .lobytes %011111100 +0013F1r 1 FD .lobytes %011111101 +0013F2r 1 FE .lobytes %011111110 +0013F3r 1 FF .lobytes %011111111 +0013F4r 1 00 .lobytes %100000000 +0013F5r 1 01 .lobytes %100000001 +0013F6r 1 02 .lobytes %100000010 +0013F7r 1 03 .lobytes %100000011 +0013F8r 1 D2 .lobytes %111111010010 +0013F9r 1 D3 .lobytes %111111010011 +0013FAr 1 D4 .lobytes %111111010100 +0013FBr 1 D5 .lobytes %111111010101 +0013FCr 1 D6 .lobytes %111111010110 +0013FDr 1 D7 .lobytes %111111010111 +0013FEr 1 D8 .lobytes %111111011000 +0013FFr 1 D9 .lobytes %111111011001 +001400r 1 DA .lobytes %111111011010 +001401r 1 DB .lobytes %111111011011 +001402r 1 DC .lobytes %111111011100 +001403r 1 DD .lobytes %111111011101 +001404r 1 DE .lobytes %111111011110 +001405r 1 DF .lobytes %111111011111 +001406r 1 E0 .lobytes %111111100000 +001407r 1 E1 .lobytes %111111100001 +001408r 1 E2 .lobytes %111111100010 +001409r 1 E3 .lobytes %111111100011 +00140Ar 1 E4 .lobytes %111111100100 +00140Br 1 E5 .lobytes %111111100101 +00140Cr 1 E6 .lobytes %111111100110 +00140Dr 1 E7 .lobytes %111111100111 +00140Er 1 E8 .lobytes %111111101000 +00140Fr 1 E9 .lobytes %111111101001 +001410r 1 EA .lobytes %111111101010 +001411r 1 EB .lobytes %111111101011 +001412r 1 EC .lobytes %111111101100 +001413r 1 ED .lobytes %111111101101 +001414r 1 EE .lobytes %111111101110 +001415r 1 EF .lobytes %111111101111 +001416r 1 F0 .lobytes %111111110000 +001417r 1 F1 .lobytes %111111110001 +001418r 1 F2 .lobytes %111111110010 +001419r 1 F3 .lobytes %111111110011 +00141Ar 1 F4 .lobytes %111111110100 +00141Br 1 F5 .lobytes %111111110101 +00141Cr 1 F6 .lobytes %111111110110 +00141Dr 1 F7 .lobytes %111111110111 +00141Er 1 F8 .lobytes %111111111000 +00141Fr 1 F9 .lobytes %111111111001 +001420r 1 FA .lobytes %111111111010 +001421r 1 FB .lobytes %111111111011 +001422r 1 FC .lobytes %111111111100 +001423r 1 FD .lobytes %111111111101 +001424r 1 FE .lobytes %111111111110 +001425r 1 FF .lobytes %111111111111 +001426r 1 00 .lobytes %1000000000000 +001427r 1 01 .lobytes %1000000000001 +001428r 1 02 .lobytes %1000000000010 +001429r 1 03 .lobytes %1000000000011 +00142Ar 1 04 .lobytes %1000000000100 +00142Br 1 05 .lobytes %1000000000101 +00142Cr 1 06 .lobytes %1000000000110 +00142Dr 1 07 .lobytes %1000000000111 +00142Er 1 08 .lobytes %1000000001000 +00142Fr 1 F0 .lobytes %111111111110000 +001430r 1 F1 .lobytes %111111111110001 +001431r 1 F2 .lobytes %111111111110010 +001432r 1 F3 .lobytes %111111111110011 +001433r 1 F4 .lobytes %111111111110100 +001434r 1 F5 .lobytes %111111111110101 +001435r 1 F6 .lobytes %111111111110110 +001436r 1 F7 .lobytes %111111111110111 +001437r 1 F8 .lobytes %111111111111000 +001438r 1 F9 .lobytes %111111111111001 +001439r 1 FA .lobytes %111111111111010 +00143Ar 1 FB .lobytes %111111111111011 +00143Br 1 FC .lobytes %111111111111100 +00143Cr 1 FD .lobytes %111111111111101 +00143Dr 1 FE .lobytes %111111111111110 +00143Er 1 FF .lobytes %111111111111111 +00143Fr 1 00 .lobytes %1000000000000000 +001440r 1 01 .lobytes %1000000000000001 +001441r 1 02 .lobytes %1000000000000010 +001442r 1 03 .lobytes %1000000000000011 +001443r 1 04 .lobytes %1000000000000100 +001444r 1 05 .lobytes %1000000000000101 +001445r 1 06 .lobytes %1000000000000110 +001446r 1 07 .lobytes %1000000000000111 +001447r 1 08 .lobytes %1000000000001000 +001448r 1 09 .lobytes %1000000000001001 +001449r 1 0A .lobytes %1000000000001010 +00144Ar 1 0B .lobytes %1000000000001011 +00144Br 1 E1 .lobytes %1001111111100001 +00144Cr 1 E2 .lobytes %1001111111100010 +00144Dr 1 E3 .lobytes %1001111111100011 +00144Er 1 E4 .lobytes %1001111111100100 +00144Fr 1 E5 .lobytes %1001111111100101 +001450r 1 E6 .lobytes %1001111111100110 +001451r 1 E7 .lobytes %1001111111100111 +001452r 1 E8 .lobytes %1001111111101000 +001453r 1 E9 .lobytes %1001111111101001 +001454r 1 EA .lobytes %1001111111101010 +001455r 1 EB .lobytes %1001111111101011 +001456r 1 EC .lobytes %1001111111101100 +001457r 1 ED .lobytes %1001111111101101 +001458r 1 EE .lobytes %1001111111101110 +001459r 1 EF .lobytes %1001111111101111 +00145Ar 1 F0 .lobytes %1001111111110000 +00145Br 1 F1 .lobytes %1001111111110001 +00145Cr 1 F2 .lobytes %1001111111110010 +00145Dr 1 F3 .lobytes %1001111111110011 +00145Er 1 F4 .lobytes %1001111111110100 +00145Fr 1 F5 .lobytes %1001111111110101 +001460r 1 F6 .lobytes %1001111111110110 +001461r 1 F7 .lobytes %1001111111110111 +001462r 1 F8 .lobytes %1001111111111000 +001463r 1 F9 .lobytes %1001111111111001 +001464r 1 FA .lobytes %1001111111111010 +001465r 1 FB .lobytes %1001111111111011 +001466r 1 FC .lobytes %1001111111111100 +001467r 1 FD .lobytes %1001111111111101 +001468r 1 FE .lobytes %1001111111111110 +001469r 1 FF .lobytes %1001111111111111 +00146Ar 1 00 .lobytes %1010000000000000 +00146Br 1 01 .lobytes %1010000000000001 +00146Cr 1 02 .lobytes %1010000000000010 +00146Dr 1 03 .lobytes %1010000000000011 +00146Er 1 04 .lobytes %1010000000000100 +00146Fr 1 05 .lobytes %1010000000000101 +001470r 1 06 .lobytes %1010000000000110 +001471r 1 07 .lobytes %1010000000000111 +001472r 1 08 .lobytes %1010000000001000 +001473r 1 09 .lobytes %1010000000001001 +001474r 1 0A .lobytes %1010000000001010 +001475r 1 0B .lobytes %1010000000001011 +001476r 1 0C .lobytes %1010000000001100 +001477r 1 0D .lobytes %1010000000001101 +001478r 1 0E .lobytes %1010000000001110 +001479r 1 0F .lobytes %1010000000001111 +00147Ar 1 E1 .lobytes %1010111111100001 +00147Br 1 E2 .lobytes %1010111111100010 +00147Cr 1 E3 .lobytes %1010111111100011 +00147Dr 1 E4 .lobytes %1010111111100100 +00147Er 1 E5 .lobytes %1010111111100101 +00147Fr 1 E6 .lobytes %1010111111100110 +001480r 1 E7 .lobytes %1010111111100111 +001481r 1 E8 .lobytes %1010111111101000 +001482r 1 E9 .lobytes %1010111111101001 +001483r 1 EA .lobytes %1010111111101010 +001484r 1 EB .lobytes %1010111111101011 +001485r 1 EC .lobytes %1010111111101100 +001486r 1 ED .lobytes %1010111111101101 +001487r 1 EE .lobytes %1010111111101110 +001488r 1 EF .lobytes %1010111111101111 +001489r 1 F0 .lobytes %1010111111110000 +00148Ar 1 F1 .lobytes %1010111111110001 +00148Br 1 F2 .lobytes %1010111111110010 +00148Cr 1 F3 .lobytes %1010111111110011 +00148Dr 1 F4 .lobytes %1010111111110100 +00148Er 1 F5 .lobytes %1010111111110101 +00148Fr 1 F6 .lobytes %1010111111110110 +001490r 1 F7 .lobytes %1010111111110111 +001491r 1 F8 .lobytes %1010111111111000 +001492r 1 F9 .lobytes %1010111111111001 +001493r 1 FA .lobytes %1010111111111010 +001494r 1 FB .lobytes %1010111111111011 +001495r 1 FC .lobytes %1010111111111100 +001496r 1 FD .lobytes %1010111111111101 +001497r 1 FE .lobytes %1010111111111110 +001498r 1 FF .lobytes %1010111111111111 +001499r 1 00 .lobytes %1011000000000000 +00149Ar 1 01 .lobytes %1011000000000001 +00149Br 1 02 .lobytes %1011000000000010 +00149Cr 1 03 .lobytes %1011000000000011 +00149Dr 1 04 .lobytes %1011000000000100 +00149Er 1 05 .lobytes %1011000000000101 +00149Fr 1 06 .lobytes %1011000000000110 +0014A0r 1 07 .lobytes %1011000000000111 +0014A1r 1 08 .lobytes %1011000000001000 +0014A2r 1 09 .lobytes %1011000000001001 +0014A3r 1 0A .lobytes %1011000000001010 +0014A4r 1 0B .lobytes %1011000000001011 +0014A5r 1 0C .lobytes %1011000000001100 +0014A6r 1 0D .lobytes %1011000000001101 +0014A7r 1 0E .lobytes %1011000000001110 +0014A8r 1 0F .lobytes %1011000000001111 +0014A9r 1 E1 .lobytes %1011111111100001 +0014AAr 1 E2 .lobytes %1011111111100010 +0014ABr 1 E3 .lobytes %1011111111100011 +0014ACr 1 E4 .lobytes %1011111111100100 +0014ADr 1 E5 .lobytes %1011111111100101 +0014AEr 1 E6 .lobytes %1011111111100110 +0014AFr 1 E7 .lobytes %1011111111100111 +0014B0r 1 E8 .lobytes %1011111111101000 +0014B1r 1 E9 .lobytes %1011111111101001 +0014B2r 1 EA .lobytes %1011111111101010 +0014B3r 1 EB .lobytes %1011111111101011 +0014B4r 1 EC .lobytes %1011111111101100 +0014B5r 1 ED .lobytes %1011111111101101 +0014B6r 1 EE .lobytes %1011111111101110 +0014B7r 1 EF .lobytes %1011111111101111 +0014B8r 1 F0 .lobytes %1011111111110000 +0014B9r 1 F1 .lobytes %1011111111110001 +0014BAr 1 F2 .lobytes %1011111111110010 +0014BBr 1 F3 .lobytes %1011111111110011 +0014BCr 1 F4 .lobytes %1011111111110100 +0014BDr 1 F5 .lobytes %1011111111110101 +0014BEr 1 F6 .lobytes %1011111111110110 +0014BFr 1 F7 .lobytes %1011111111110111 +0014C0r 1 F8 .lobytes %1011111111111000 +0014C1r 1 F9 .lobytes %1011111111111001 +0014C2r 1 FA .lobytes %1011111111111010 +0014C3r 1 FB .lobytes %1011111111111011 +0014C4r 1 FC .lobytes %1011111111111100 +0014C5r 1 FD .lobytes %1011111111111101 +0014C6r 1 FE .lobytes %1011111111111110 +0014C7r 1 FF .lobytes %1011111111111111 +0014C8r 1 00 .lobytes %1100000000000000 +0014C9r 1 01 .lobytes %1100000000000001 +0014CAr 1 02 .lobytes %1100000000000010 +0014CBr 1 03 .lobytes %1100000000000011 +0014CCr 1 04 .lobytes %1100000000000100 +0014CDr 1 05 .lobytes %1100000000000101 +0014CEr 1 06 .lobytes %1100000000000110 +0014CFr 1 07 .lobytes %1100000000000111 +0014D0r 1 08 .lobytes %1100000000001000 +0014D1r 1 09 .lobytes %1100000000001001 +0014D2r 1 0A .lobytes %1100000000001010 +0014D3r 1 0B .lobytes %1100000000001011 +0014D4r 1 0C .lobytes %1100000000001100 +0014D5r 1 0D .lobytes %1100000000001101 +0014D6r 1 0E .lobytes %1100000000001110 +0014D7r 1 0F .lobytes %1100000000001111 +0014D8r 1 E1 .lobytes %1100111111100001 +0014D9r 1 E2 .lobytes %1100111111100010 +0014DAr 1 E3 .lobytes %1100111111100011 +0014DBr 1 E4 .lobytes %1100111111100100 +0014DCr 1 E5 .lobytes %1100111111100101 +0014DDr 1 E6 .lobytes %1100111111100110 +0014DEr 1 E7 .lobytes %1100111111100111 +0014DFr 1 E8 .lobytes %1100111111101000 +0014E0r 1 E9 .lobytes %1100111111101001 +0014E1r 1 EA .lobytes %1100111111101010 +0014E2r 1 EB .lobytes %1100111111101011 +0014E3r 1 EC .lobytes %1100111111101100 +0014E4r 1 ED .lobytes %1100111111101101 +0014E5r 1 EE .lobytes %1100111111101110 +0014E6r 1 EF .lobytes %1100111111101111 +0014E7r 1 F0 .lobytes %1100111111110000 +0014E8r 1 F1 .lobytes %1100111111110001 +0014E9r 1 F2 .lobytes %1100111111110010 +0014EAr 1 F3 .lobytes %1100111111110011 +0014EBr 1 F4 .lobytes %1100111111110100 +0014ECr 1 F5 .lobytes %1100111111110101 +0014EDr 1 F6 .lobytes %1100111111110110 +0014EEr 1 F7 .lobytes %1100111111110111 +0014EFr 1 F8 .lobytes %1100111111111000 +0014F0r 1 F9 .lobytes %1100111111111001 +0014F1r 1 FA .lobytes %1100111111111010 +0014F2r 1 FB .lobytes %1100111111111011 +0014F3r 1 FC .lobytes %1100111111111100 +0014F4r 1 FD .lobytes %1100111111111101 +0014F5r 1 FE .lobytes %1100111111111110 +0014F6r 1 FF .lobytes %1100111111111111 +0014F7r 1 00 .lobytes %1101000000000000 +0014F8r 1 01 .lobytes %1101000000000001 +0014F9r 1 02 .lobytes %1101000000000010 +0014FAr 1 03 .lobytes %1101000000000011 +0014FBr 1 04 .lobytes %1101000000000100 +0014FCr 1 05 .lobytes %1101000000000101 +0014FDr 1 06 .lobytes %1101000000000110 +0014FEr 1 07 .lobytes %1101000000000111 +0014FFr 1 08 .lobytes %1101000000001000 +001500r 1 09 .lobytes %1101000000001001 +001501r 1 0A .lobytes %1101000000001010 +001502r 1 0B .lobytes %1101000000001011 +001503r 1 0C .lobytes %1101000000001100 +001504r 1 0D .lobytes %1101000000001101 +001505r 1 0E .lobytes %1101000000001110 +001506r 1 0F .lobytes %1101000000001111 +001507r 1 E1 .lobytes %1101111111100001 +001508r 1 E2 .lobytes %1101111111100010 +001509r 1 E3 .lobytes %1101111111100011 +00150Ar 1 E4 .lobytes %1101111111100100 +00150Br 1 E5 .lobytes %1101111111100101 +00150Cr 1 E6 .lobytes %1101111111100110 +00150Dr 1 E7 .lobytes %1101111111100111 +00150Er 1 E8 .lobytes %1101111111101000 +00150Fr 1 E9 .lobytes %1101111111101001 +001510r 1 EA .lobytes %1101111111101010 +001511r 1 EB .lobytes %1101111111101011 +001512r 1 EC .lobytes %1101111111101100 +001513r 1 ED .lobytes %1101111111101101 +001514r 1 EE .lobytes %1101111111101110 +001515r 1 EF .lobytes %1101111111101111 +001516r 1 F0 .lobytes %1101111111110000 +001517r 1 F1 .lobytes %1101111111110001 +001518r 1 F2 .lobytes %1101111111110010 +001519r 1 F3 .lobytes %1101111111110011 +00151Ar 1 F4 .lobytes %1101111111110100 +00151Br 1 F5 .lobytes %1101111111110101 +00151Cr 1 F6 .lobytes %1101111111110110 +00151Dr 1 F7 .lobytes %1101111111110111 +00151Er 1 F8 .lobytes %1101111111111000 +00151Fr 1 F9 .lobytes %1101111111111001 +001520r 1 FA .lobytes %1101111111111010 +001521r 1 FB .lobytes %1101111111111011 +001522r 1 FC .lobytes %1101111111111100 +001523r 1 FD .lobytes %1101111111111101 +001524r 1 FE .lobytes %1101111111111110 +001525r 1 FF .lobytes %1101111111111111 +001526r 1 00 .lobytes %1110000000000000 +001527r 1 01 .lobytes %1110000000000001 +001528r 1 02 .lobytes %1110000000000010 +001529r 1 03 .lobytes %1110000000000011 +00152Ar 1 04 .lobytes %1110000000000100 +00152Br 1 05 .lobytes %1110000000000101 +00152Cr 1 06 .lobytes %1110000000000110 +00152Dr 1 07 .lobytes %1110000000000111 +00152Er 1 08 .lobytes %1110000000001000 +00152Fr 1 09 .lobytes %1110000000001001 +001530r 1 0A .lobytes %1110000000001010 +001531r 1 0B .lobytes %1110000000001011 +001532r 1 0C .lobytes %1110000000001100 +001533r 1 0D .lobytes %1110000000001101 +001534r 1 0E .lobytes %1110000000001110 +001535r 1 0F .lobytes %1110000000001111 +001536r 1 E1 .lobytes %1110111111100001 +001537r 1 E2 .lobytes %1110111111100010 +001538r 1 E3 .lobytes %1110111111100011 +001539r 1 E4 .lobytes %1110111111100100 +00153Ar 1 E5 .lobytes %1110111111100101 +00153Br 1 E6 .lobytes %1110111111100110 +00153Cr 1 E7 .lobytes %1110111111100111 +00153Dr 1 E8 .lobytes %1110111111101000 +00153Er 1 E9 .lobytes %1110111111101001 +00153Fr 1 EA .lobytes %1110111111101010 +001540r 1 EB .lobytes %1110111111101011 +001541r 1 EC .lobytes %1110111111101100 +001542r 1 ED .lobytes %1110111111101101 +001543r 1 EE .lobytes %1110111111101110 +001544r 1 EF .lobytes %1110111111101111 +001545r 1 F0 .lobytes %1110111111110000 +001546r 1 F1 .lobytes %1110111111110001 +001547r 1 F2 .lobytes %1110111111110010 +001548r 1 F3 .lobytes %1110111111110011 +001549r 1 F4 .lobytes %1110111111110100 +00154Ar 1 F5 .lobytes %1110111111110101 +00154Br 1 F6 .lobytes %1110111111110110 +00154Cr 1 F7 .lobytes %1110111111110111 +00154Dr 1 F8 .lobytes %1110111111111000 +00154Er 1 F9 .lobytes %1110111111111001 +00154Fr 1 FA .lobytes %1110111111111010 +001550r 1 FB .lobytes %1110111111111011 +001551r 1 FC .lobytes %1110111111111100 +001552r 1 FD .lobytes %1110111111111101 +001553r 1 FE .lobytes %1110111111111110 +001554r 1 FF .lobytes %1110111111111111 +001555r 1 00 .lobytes %1111000000000000 +001556r 1 01 .lobytes %1111000000000001 +001557r 1 02 .lobytes %1111000000000010 +001558r 1 03 .lobytes %1111000000000011 +001559r 1 04 .lobytes %1111000000000100 +00155Ar 1 05 .lobytes %1111000000000101 +00155Br 1 06 .lobytes %1111000000000110 +00155Cr 1 07 .lobytes %1111000000000111 +00155Dr 1 08 .lobytes %1111000000001000 +00155Er 1 09 .lobytes %1111000000001001 +00155Fr 1 0A .lobytes %1111000000001010 +001560r 1 0B .lobytes %1111000000001011 +001561r 1 0C .lobytes %1111000000001100 +001562r 1 0D .lobytes %1111000000001101 +001563r 1 0E .lobytes %1111000000001110 +001564r 1 0F .lobytes %1111000000001111 +001565r 1 E1 .lobytes %1111111111100001 +001566r 1 E2 .lobytes %1111111111100010 +001567r 1 E3 .lobytes %1111111111100011 +001568r 1 E4 .lobytes %1111111111100100 +001569r 1 E5 .lobytes %1111111111100101 +00156Ar 1 E6 .lobytes %1111111111100110 +00156Br 1 E7 .lobytes %1111111111100111 +00156Cr 1 E8 .lobytes %1111111111101000 +00156Dr 1 E9 .lobytes %1111111111101001 +00156Er 1 EA .lobytes %1111111111101010 +00156Fr 1 EB .lobytes %1111111111101011 +001570r 1 EC .lobytes %1111111111101100 +001571r 1 ED .lobytes %1111111111101101 +001572r 1 EE .lobytes %1111111111101110 +001573r 1 EF .lobytes %1111111111101111 +001574r 1 F0 .lobytes %1111111111110000 +001575r 1 F1 .lobytes %1111111111110001 +001576r 1 F2 .lobytes %1111111111110010 +001577r 1 F3 .lobytes %1111111111110011 +001578r 1 F4 .lobytes %1111111111110100 +001579r 1 F5 .lobytes %1111111111110101 +00157Ar 1 F6 .lobytes %1111111111110110 +00157Br 1 F7 .lobytes %1111111111110111 +00157Cr 1 F8 .lobytes %1111111111111000 +00157Dr 1 F9 .lobytes %1111111111111001 +00157Er 1 FA .lobytes %1111111111111010 +00157Fr 1 FB .lobytes %1111111111111011 +001580r 1 FC .lobytes %1111111111111100 +001581r 1 FD .lobytes %1111111111111101 +001582r 1 FE .lobytes %1111111111111110 +001583r 1 FF .lobytes %1111111111111111 +001584r 1 +001584r 1 ; binary values, full length +001584r 1 00 .lobytes %0000000000000000 +001585r 1 01 .lobytes %0000000000000001 +001586r 1 02 .lobytes %0000000000000010 +001587r 1 03 .lobytes %0000000000000011 +001588r 1 04 .lobytes %0000000000000100 +001589r 1 05 .lobytes %0000000000000101 +00158Ar 1 06 .lobytes %0000000000000110 +00158Br 1 07 .lobytes %0000000000000111 +00158Cr 1 08 .lobytes %0000000000001000 +00158Dr 1 09 .lobytes %0000000000001001 +00158Er 1 0A .lobytes %0000000000001010 +00158Fr 1 0B .lobytes %0000000000001011 +001590r 1 0C .lobytes %0000000000001100 +001591r 1 0D .lobytes %0000000000001101 +001592r 1 0E .lobytes %0000000000001110 +001593r 1 0F .lobytes %0000000000001111 +001594r 1 10 .lobytes %0000000000010000 +001595r 1 11 .lobytes %0000000000010001 +001596r 1 12 .lobytes %0000000000010010 +001597r 1 13 .lobytes %0000000000010011 +001598r 1 70 .lobytes %0000000001110000 +001599r 1 71 .lobytes %0000000001110001 +00159Ar 1 72 .lobytes %0000000001110010 +00159Br 1 73 .lobytes %0000000001110011 +00159Cr 1 74 .lobytes %0000000001110100 +00159Dr 1 75 .lobytes %0000000001110101 +00159Er 1 76 .lobytes %0000000001110110 +00159Fr 1 77 .lobytes %0000000001110111 +0015A0r 1 78 .lobytes %0000000001111000 +0015A1r 1 79 .lobytes %0000000001111001 +0015A2r 1 7A .lobytes %0000000001111010 +0015A3r 1 7B .lobytes %0000000001111011 +0015A4r 1 7C .lobytes %0000000001111100 +0015A5r 1 7D .lobytes %0000000001111101 +0015A6r 1 7E .lobytes %0000000001111110 +0015A7r 1 7F .lobytes %0000000001111111 +0015A8r 1 80 .lobytes %0000000010000000 +0015A9r 1 81 .lobytes %0000000010000001 +0015AAr 1 82 .lobytes %0000000010000010 +0015ABr 1 83 .lobytes %0000000010000011 +0015ACr 1 84 .lobytes %0000000010000100 +0015ADr 1 85 .lobytes %0000000010000101 +0015AEr 1 86 .lobytes %0000000010000110 +0015AFr 1 F0 .lobytes %0000000011110000 +0015B0r 1 F1 .lobytes %0000000011110001 +0015B1r 1 F2 .lobytes %0000000011110010 +0015B2r 1 F3 .lobytes %0000000011110011 +0015B3r 1 F4 .lobytes %0000000011110100 +0015B4r 1 F5 .lobytes %0000000011110101 +0015B5r 1 F6 .lobytes %0000000011110110 +0015B6r 1 F7 .lobytes %0000000011110111 +0015B7r 1 F8 .lobytes %0000000011111000 +0015B8r 1 F9 .lobytes %0000000011111001 +0015B9r 1 FA .lobytes %0000000011111010 +0015BAr 1 FB .lobytes %0000000011111011 +0015BBr 1 FC .lobytes %0000000011111100 +0015BCr 1 FD .lobytes %0000000011111101 +0015BDr 1 FE .lobytes %0000000011111110 +0015BEr 1 FF .lobytes %0000000011111111 +0015BFr 1 00 .lobytes %0000000100000000 +0015C0r 1 01 .lobytes %0000000100000001 +0015C1r 1 02 .lobytes %0000000100000010 +0015C2r 1 03 .lobytes %0000000100000011 +0015C3r 1 D2 .lobytes %0000111111010010 +0015C4r 1 D3 .lobytes %0000111111010011 +0015C5r 1 D4 .lobytes %0000111111010100 +0015C6r 1 D5 .lobytes %0000111111010101 +0015C7r 1 D6 .lobytes %0000111111010110 +0015C8r 1 D7 .lobytes %0000111111010111 +0015C9r 1 D8 .lobytes %0000111111011000 +0015CAr 1 D9 .lobytes %0000111111011001 +0015CBr 1 DA .lobytes %0000111111011010 +0015CCr 1 DB .lobytes %0000111111011011 +0015CDr 1 DC .lobytes %0000111111011100 +0015CEr 1 DD .lobytes %0000111111011101 +0015CFr 1 DE .lobytes %0000111111011110 +0015D0r 1 DF .lobytes %0000111111011111 +0015D1r 1 E0 .lobytes %0000111111100000 +0015D2r 1 E1 .lobytes %0000111111100001 +0015D3r 1 E2 .lobytes %0000111111100010 +0015D4r 1 E3 .lobytes %0000111111100011 +0015D5r 1 E4 .lobytes %0000111111100100 +0015D6r 1 E5 .lobytes %0000111111100101 +0015D7r 1 E6 .lobytes %0000111111100110 +0015D8r 1 E7 .lobytes %0000111111100111 +0015D9r 1 E8 .lobytes %0000111111101000 +0015DAr 1 E9 .lobytes %0000111111101001 +0015DBr 1 EA .lobytes %0000111111101010 +0015DCr 1 EB .lobytes %0000111111101011 +0015DDr 1 EC .lobytes %0000111111101100 +0015DEr 1 ED .lobytes %0000111111101101 +0015DFr 1 EE .lobytes %0000111111101110 +0015E0r 1 EF .lobytes %0000111111101111 +0015E1r 1 F0 .lobytes %0000111111110000 +0015E2r 1 F1 .lobytes %0000111111110001 +0015E3r 1 F2 .lobytes %0000111111110010 +0015E4r 1 F3 .lobytes %0000111111110011 +0015E5r 1 F4 .lobytes %0000111111110100 +0015E6r 1 F5 .lobytes %0000111111110101 +0015E7r 1 F6 .lobytes %0000111111110110 +0015E8r 1 F7 .lobytes %0000111111110111 +0015E9r 1 F8 .lobytes %0000111111111000 +0015EAr 1 F9 .lobytes %0000111111111001 +0015EBr 1 FA .lobytes %0000111111111010 +0015ECr 1 FB .lobytes %0000111111111011 +0015EDr 1 FC .lobytes %0000111111111100 +0015EEr 1 FD .lobytes %0000111111111101 +0015EFr 1 FE .lobytes %0000111111111110 +0015F0r 1 FF .lobytes %0000111111111111 +0015F1r 1 00 .lobytes %0001000000000000 +0015F2r 1 01 .lobytes %0001000000000001 +0015F3r 1 02 .lobytes %0001000000000010 +0015F4r 1 03 .lobytes %0001000000000011 +0015F5r 1 04 .lobytes %0001000000000100 +0015F6r 1 05 .lobytes %0001000000000101 +0015F7r 1 06 .lobytes %0001000000000110 +0015F8r 1 07 .lobytes %0001000000000111 +0015F9r 1 08 .lobytes %0001000000001000 +0015FAr 1 F0 .lobytes %0111111111110000 +0015FBr 1 F1 .lobytes %0111111111110001 +0015FCr 1 F2 .lobytes %0111111111110010 +0015FDr 1 F3 .lobytes %0111111111110011 +0015FEr 1 F4 .lobytes %0111111111110100 +0015FFr 1 F5 .lobytes %0111111111110101 +001600r 1 F6 .lobytes %0111111111110110 +001601r 1 F7 .lobytes %0111111111110111 +001602r 1 F8 .lobytes %0111111111111000 +001603r 1 F9 .lobytes %0111111111111001 +001604r 1 FA .lobytes %0111111111111010 +001605r 1 FB .lobytes %0111111111111011 +001606r 1 FC .lobytes %0111111111111100 +001607r 1 FD .lobytes %0111111111111101 +001608r 1 FE .lobytes %0111111111111110 +001609r 1 FF .lobytes %0111111111111111 +00160Ar 1 00 .lobytes %1000000000000000 +00160Br 1 01 .lobytes %1000000000000001 +00160Cr 1 02 .lobytes %1000000000000010 +00160Dr 1 03 .lobytes %1000000000000011 +00160Er 1 04 .lobytes %1000000000000100 +00160Fr 1 05 .lobytes %1000000000000101 +001610r 1 06 .lobytes %1000000000000110 +001611r 1 07 .lobytes %1000000000000111 +001612r 1 08 .lobytes %1000000000001000 +001613r 1 09 .lobytes %1000000000001001 +001614r 1 0A .lobytes %1000000000001010 +001615r 1 0B .lobytes %1000000000001011 +001616r 1 E1 .lobytes %1001111111100001 +001617r 1 E2 .lobytes %1001111111100010 +001618r 1 E3 .lobytes %1001111111100011 +001619r 1 E4 .lobytes %1001111111100100 +00161Ar 1 E5 .lobytes %1001111111100101 +00161Br 1 E6 .lobytes %1001111111100110 +00161Cr 1 E7 .lobytes %1001111111100111 +00161Dr 1 E8 .lobytes %1001111111101000 +00161Er 1 E9 .lobytes %1001111111101001 +00161Fr 1 EA .lobytes %1001111111101010 +001620r 1 EB .lobytes %1001111111101011 +001621r 1 EC .lobytes %1001111111101100 +001622r 1 ED .lobytes %1001111111101101 +001623r 1 EE .lobytes %1001111111101110 +001624r 1 EF .lobytes %1001111111101111 +001625r 1 F0 .lobytes %1001111111110000 +001626r 1 F1 .lobytes %1001111111110001 +001627r 1 F2 .lobytes %1001111111110010 +001628r 1 F3 .lobytes %1001111111110011 +001629r 1 F4 .lobytes %1001111111110100 +00162Ar 1 F5 .lobytes %1001111111110101 +00162Br 1 F6 .lobytes %1001111111110110 +00162Cr 1 F7 .lobytes %1001111111110111 +00162Dr 1 F8 .lobytes %1001111111111000 +00162Er 1 F9 .lobytes %1001111111111001 +00162Fr 1 FA .lobytes %1001111111111010 +001630r 1 FB .lobytes %1001111111111011 +001631r 1 FC .lobytes %1001111111111100 +001632r 1 FD .lobytes %1001111111111101 +001633r 1 FE .lobytes %1001111111111110 +001634r 1 FF .lobytes %1001111111111111 +001635r 1 00 .lobytes %1010000000000000 +001636r 1 01 .lobytes %1010000000000001 +001637r 1 02 .lobytes %1010000000000010 +001638r 1 03 .lobytes %1010000000000011 +001639r 1 04 .lobytes %1010000000000100 +00163Ar 1 05 .lobytes %1010000000000101 +00163Br 1 06 .lobytes %1010000000000110 +00163Cr 1 07 .lobytes %1010000000000111 +00163Dr 1 08 .lobytes %1010000000001000 +00163Er 1 09 .lobytes %1010000000001001 +00163Fr 1 0A .lobytes %1010000000001010 +001640r 1 0B .lobytes %1010000000001011 +001641r 1 0C .lobytes %1010000000001100 +001642r 1 0D .lobytes %1010000000001101 +001643r 1 0E .lobytes %1010000000001110 +001644r 1 0F .lobytes %1010000000001111 +001645r 1 E1 .lobytes %1010111111100001 +001646r 1 E2 .lobytes %1010111111100010 +001647r 1 E3 .lobytes %1010111111100011 +001648r 1 E4 .lobytes %1010111111100100 +001649r 1 E5 .lobytes %1010111111100101 +00164Ar 1 E6 .lobytes %1010111111100110 +00164Br 1 E7 .lobytes %1010111111100111 +00164Cr 1 E8 .lobytes %1010111111101000 +00164Dr 1 E9 .lobytes %1010111111101001 +00164Er 1 EA .lobytes %1010111111101010 +00164Fr 1 EB .lobytes %1010111111101011 +001650r 1 EC .lobytes %1010111111101100 +001651r 1 ED .lobytes %1010111111101101 +001652r 1 EE .lobytes %1010111111101110 +001653r 1 EF .lobytes %1010111111101111 +001654r 1 F0 .lobytes %1010111111110000 +001655r 1 F1 .lobytes %1010111111110001 +001656r 1 F2 .lobytes %1010111111110010 +001657r 1 F3 .lobytes %1010111111110011 +001658r 1 F4 .lobytes %1010111111110100 +001659r 1 F5 .lobytes %1010111111110101 +00165Ar 1 F6 .lobytes %1010111111110110 +00165Br 1 F7 .lobytes %1010111111110111 +00165Cr 1 F8 .lobytes %1010111111111000 +00165Dr 1 F9 .lobytes %1010111111111001 +00165Er 1 FA .lobytes %1010111111111010 +00165Fr 1 FB .lobytes %1010111111111011 +001660r 1 FC .lobytes %1010111111111100 +001661r 1 FD .lobytes %1010111111111101 +001662r 1 FE .lobytes %1010111111111110 +001663r 1 FF .lobytes %1010111111111111 +001664r 1 00 .lobytes %1011000000000000 +001665r 1 01 .lobytes %1011000000000001 +001666r 1 02 .lobytes %1011000000000010 +001667r 1 03 .lobytes %1011000000000011 +001668r 1 04 .lobytes %1011000000000100 +001669r 1 05 .lobytes %1011000000000101 +00166Ar 1 06 .lobytes %1011000000000110 +00166Br 1 07 .lobytes %1011000000000111 +00166Cr 1 08 .lobytes %1011000000001000 +00166Dr 1 09 .lobytes %1011000000001001 +00166Er 1 0A .lobytes %1011000000001010 +00166Fr 1 0B .lobytes %1011000000001011 +001670r 1 0C .lobytes %1011000000001100 +001671r 1 0D .lobytes %1011000000001101 +001672r 1 0E .lobytes %1011000000001110 +001673r 1 0F .lobytes %1011000000001111 +001674r 1 E1 .lobytes %1011111111100001 +001675r 1 E2 .lobytes %1011111111100010 +001676r 1 E3 .lobytes %1011111111100011 +001677r 1 E4 .lobytes %1011111111100100 +001678r 1 E5 .lobytes %1011111111100101 +001679r 1 E6 .lobytes %1011111111100110 +00167Ar 1 E7 .lobytes %1011111111100111 +00167Br 1 E8 .lobytes %1011111111101000 +00167Cr 1 E9 .lobytes %1011111111101001 +00167Dr 1 EA .lobytes %1011111111101010 +00167Er 1 EB .lobytes %1011111111101011 +00167Fr 1 EC .lobytes %1011111111101100 +001680r 1 ED .lobytes %1011111111101101 +001681r 1 EE .lobytes %1011111111101110 +001682r 1 EF .lobytes %1011111111101111 +001683r 1 F0 .lobytes %1011111111110000 +001684r 1 F1 .lobytes %1011111111110001 +001685r 1 F2 .lobytes %1011111111110010 +001686r 1 F3 .lobytes %1011111111110011 +001687r 1 F4 .lobytes %1011111111110100 +001688r 1 F5 .lobytes %1011111111110101 +001689r 1 F6 .lobytes %1011111111110110 +00168Ar 1 F7 .lobytes %1011111111110111 +00168Br 1 F8 .lobytes %1011111111111000 +00168Cr 1 F9 .lobytes %1011111111111001 +00168Dr 1 FA .lobytes %1011111111111010 +00168Er 1 FB .lobytes %1011111111111011 +00168Fr 1 FC .lobytes %1011111111111100 +001690r 1 FD .lobytes %1011111111111101 +001691r 1 FE .lobytes %1011111111111110 +001692r 1 FF .lobytes %1011111111111111 +001693r 1 00 .lobytes %1100000000000000 +001694r 1 01 .lobytes %1100000000000001 +001695r 1 02 .lobytes %1100000000000010 +001696r 1 03 .lobytes %1100000000000011 +001697r 1 04 .lobytes %1100000000000100 +001698r 1 05 .lobytes %1100000000000101 +001699r 1 06 .lobytes %1100000000000110 +00169Ar 1 07 .lobytes %1100000000000111 +00169Br 1 08 .lobytes %1100000000001000 +00169Cr 1 09 .lobytes %1100000000001001 +00169Dr 1 0A .lobytes %1100000000001010 +00169Er 1 0B .lobytes %1100000000001011 +00169Fr 1 0C .lobytes %1100000000001100 +0016A0r 1 0D .lobytes %1100000000001101 +0016A1r 1 0E .lobytes %1100000000001110 +0016A2r 1 0F .lobytes %1100000000001111 +0016A3r 1 E1 .lobytes %1100111111100001 +0016A4r 1 E2 .lobytes %1100111111100010 +0016A5r 1 E3 .lobytes %1100111111100011 +0016A6r 1 E4 .lobytes %1100111111100100 +0016A7r 1 E5 .lobytes %1100111111100101 +0016A8r 1 E6 .lobytes %1100111111100110 +0016A9r 1 E7 .lobytes %1100111111100111 +0016AAr 1 E8 .lobytes %1100111111101000 +0016ABr 1 E9 .lobytes %1100111111101001 +0016ACr 1 EA .lobytes %1100111111101010 +0016ADr 1 EB .lobytes %1100111111101011 +0016AEr 1 EC .lobytes %1100111111101100 +0016AFr 1 ED .lobytes %1100111111101101 +0016B0r 1 EE .lobytes %1100111111101110 +0016B1r 1 EF .lobytes %1100111111101111 +0016B2r 1 F0 .lobytes %1100111111110000 +0016B3r 1 F1 .lobytes %1100111111110001 +0016B4r 1 F2 .lobytes %1100111111110010 +0016B5r 1 F3 .lobytes %1100111111110011 +0016B6r 1 F4 .lobytes %1100111111110100 +0016B7r 1 F5 .lobytes %1100111111110101 +0016B8r 1 F6 .lobytes %1100111111110110 +0016B9r 1 F7 .lobytes %1100111111110111 +0016BAr 1 F8 .lobytes %1100111111111000 +0016BBr 1 F9 .lobytes %1100111111111001 +0016BCr 1 FA .lobytes %1100111111111010 +0016BDr 1 FB .lobytes %1100111111111011 +0016BEr 1 FC .lobytes %1100111111111100 +0016BFr 1 FD .lobytes %1100111111111101 +0016C0r 1 FE .lobytes %1100111111111110 +0016C1r 1 FF .lobytes %1100111111111111 +0016C2r 1 00 .lobytes %1101000000000000 +0016C3r 1 01 .lobytes %1101000000000001 +0016C4r 1 02 .lobytes %1101000000000010 +0016C5r 1 03 .lobytes %1101000000000011 +0016C6r 1 04 .lobytes %1101000000000100 +0016C7r 1 05 .lobytes %1101000000000101 +0016C8r 1 06 .lobytes %1101000000000110 +0016C9r 1 07 .lobytes %1101000000000111 +0016CAr 1 08 .lobytes %1101000000001000 +0016CBr 1 09 .lobytes %1101000000001001 +0016CCr 1 0A .lobytes %1101000000001010 +0016CDr 1 0B .lobytes %1101000000001011 +0016CEr 1 0C .lobytes %1101000000001100 +0016CFr 1 0D .lobytes %1101000000001101 +0016D0r 1 0E .lobytes %1101000000001110 +0016D1r 1 0F .lobytes %1101000000001111 +0016D2r 1 E1 .lobytes %1101111111100001 +0016D3r 1 E2 .lobytes %1101111111100010 +0016D4r 1 E3 .lobytes %1101111111100011 +0016D5r 1 E4 .lobytes %1101111111100100 +0016D6r 1 E5 .lobytes %1101111111100101 +0016D7r 1 E6 .lobytes %1101111111100110 +0016D8r 1 E7 .lobytes %1101111111100111 +0016D9r 1 E8 .lobytes %1101111111101000 +0016DAr 1 E9 .lobytes %1101111111101001 +0016DBr 1 EA .lobytes %1101111111101010 +0016DCr 1 EB .lobytes %1101111111101011 +0016DDr 1 EC .lobytes %1101111111101100 +0016DEr 1 ED .lobytes %1101111111101101 +0016DFr 1 EE .lobytes %1101111111101110 +0016E0r 1 EF .lobytes %1101111111101111 +0016E1r 1 F0 .lobytes %1101111111110000 +0016E2r 1 F1 .lobytes %1101111111110001 +0016E3r 1 F2 .lobytes %1101111111110010 +0016E4r 1 F3 .lobytes %1101111111110011 +0016E5r 1 F4 .lobytes %1101111111110100 +0016E6r 1 F5 .lobytes %1101111111110101 +0016E7r 1 F6 .lobytes %1101111111110110 +0016E8r 1 F7 .lobytes %1101111111110111 +0016E9r 1 F8 .lobytes %1101111111111000 +0016EAr 1 F9 .lobytes %1101111111111001 +0016EBr 1 FA .lobytes %1101111111111010 +0016ECr 1 FB .lobytes %1101111111111011 +0016EDr 1 FC .lobytes %1101111111111100 +0016EEr 1 FD .lobytes %1101111111111101 +0016EFr 1 FE .lobytes %1101111111111110 +0016F0r 1 FF .lobytes %1101111111111111 +0016F1r 1 00 .lobytes %1110000000000000 +0016F2r 1 01 .lobytes %1110000000000001 +0016F3r 1 02 .lobytes %1110000000000010 +0016F4r 1 03 .lobytes %1110000000000011 +0016F5r 1 04 .lobytes %1110000000000100 +0016F6r 1 05 .lobytes %1110000000000101 +0016F7r 1 06 .lobytes %1110000000000110 +0016F8r 1 07 .lobytes %1110000000000111 +0016F9r 1 08 .lobytes %1110000000001000 +0016FAr 1 09 .lobytes %1110000000001001 +0016FBr 1 0A .lobytes %1110000000001010 +0016FCr 1 0B .lobytes %1110000000001011 +0016FDr 1 0C .lobytes %1110000000001100 +0016FEr 1 0D .lobytes %1110000000001101 +0016FFr 1 0E .lobytes %1110000000001110 +001700r 1 0F .lobytes %1110000000001111 +001701r 1 E1 .lobytes %1110111111100001 +001702r 1 E2 .lobytes %1110111111100010 +001703r 1 E3 .lobytes %1110111111100011 +001704r 1 E4 .lobytes %1110111111100100 +001705r 1 E5 .lobytes %1110111111100101 +001706r 1 E6 .lobytes %1110111111100110 +001707r 1 E7 .lobytes %1110111111100111 +001708r 1 E8 .lobytes %1110111111101000 +001709r 1 E9 .lobytes %1110111111101001 +00170Ar 1 EA .lobytes %1110111111101010 +00170Br 1 EB .lobytes %1110111111101011 +00170Cr 1 EC .lobytes %1110111111101100 +00170Dr 1 ED .lobytes %1110111111101101 +00170Er 1 EE .lobytes %1110111111101110 +00170Fr 1 EF .lobytes %1110111111101111 +001710r 1 F0 .lobytes %1110111111110000 +001711r 1 F1 .lobytes %1110111111110001 +001712r 1 F2 .lobytes %1110111111110010 +001713r 1 F3 .lobytes %1110111111110011 +001714r 1 F4 .lobytes %1110111111110100 +001715r 1 F5 .lobytes %1110111111110101 +001716r 1 F6 .lobytes %1110111111110110 +001717r 1 F7 .lobytes %1110111111110111 +001718r 1 F8 .lobytes %1110111111111000 +001719r 1 F9 .lobytes %1110111111111001 +00171Ar 1 FA .lobytes %1110111111111010 +00171Br 1 FB .lobytes %1110111111111011 +00171Cr 1 FC .lobytes %1110111111111100 +00171Dr 1 FD .lobytes %1110111111111101 +00171Er 1 FE .lobytes %1110111111111110 +00171Fr 1 FF .lobytes %1110111111111111 +001720r 1 00 .lobytes %1111000000000000 +001721r 1 01 .lobytes %1111000000000001 +001722r 1 02 .lobytes %1111000000000010 +001723r 1 03 .lobytes %1111000000000011 +001724r 1 04 .lobytes %1111000000000100 +001725r 1 05 .lobytes %1111000000000101 +001726r 1 06 .lobytes %1111000000000110 +001727r 1 07 .lobytes %1111000000000111 +001728r 1 08 .lobytes %1111000000001000 +001729r 1 09 .lobytes %1111000000001001 +00172Ar 1 0A .lobytes %1111000000001010 +00172Br 1 0B .lobytes %1111000000001011 +00172Cr 1 0C .lobytes %1111000000001100 +00172Dr 1 0D .lobytes %1111000000001101 +00172Er 1 0E .lobytes %1111000000001110 +00172Fr 1 0F .lobytes %1111000000001111 +001730r 1 E1 .lobytes %1111111111100001 +001731r 1 E2 .lobytes %1111111111100010 +001732r 1 E3 .lobytes %1111111111100011 +001733r 1 E4 .lobytes %1111111111100100 +001734r 1 E5 .lobytes %1111111111100101 +001735r 1 E6 .lobytes %1111111111100110 +001736r 1 E7 .lobytes %1111111111100111 +001737r 1 E8 .lobytes %1111111111101000 +001738r 1 E9 .lobytes %1111111111101001 +001739r 1 EA .lobytes %1111111111101010 +00173Ar 1 EB .lobytes %1111111111101011 +00173Br 1 EC .lobytes %1111111111101100 +00173Cr 1 ED .lobytes %1111111111101101 +00173Dr 1 EE .lobytes %1111111111101110 +00173Er 1 EF .lobytes %1111111111101111 +00173Fr 1 F0 .lobytes %1111111111110000 +001740r 1 F1 .lobytes %1111111111110001 +001741r 1 F2 .lobytes %1111111111110010 +001742r 1 F3 .lobytes %1111111111110011 +001743r 1 F4 .lobytes %1111111111110100 +001744r 1 F5 .lobytes %1111111111110101 +001745r 1 F6 .lobytes %1111111111110110 +001746r 1 F7 .lobytes %1111111111110111 +001747r 1 F8 .lobytes %1111111111111000 +001748r 1 F9 .lobytes %1111111111111001 +001749r 1 FA .lobytes %1111111111111010 +00174Ar 1 FB .lobytes %1111111111111011 +00174Br 1 FC .lobytes %1111111111111100 +00174Cr 1 FD .lobytes %1111111111111101 +00174Dr 1 FE .lobytes %1111111111111110 +00174Er 1 FF .lobytes %1111111111111111 +00174Fr 1 +00174Fr 1 ; multiple values on one line, decimal +00174Fr 1 00 01 02 03 .lobytes 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +001753r 1 04 05 06 07 +001757r 1 08 09 0A 0B +00175Fr 1 10 11 12 13 .lobytes 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +001763r 1 14 15 16 17 +001767r 1 18 19 1A 1B +00176Fr 1 70 71 72 73 .lobytes 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +001773r 1 74 75 76 77 +001777r 1 78 79 7A 7B +00177Fr 1 80 81 82 83 .lobytes 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +001783r 1 84 85 86 87 +001787r 1 88 89 8A 8B +00178Fr 1 F0 F1 F2 F3 .lobytes 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +001793r 1 F4 F5 F6 F7 +001797r 1 F8 F9 FA FB +00179Fr 1 00 01 02 03 .lobytes 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 +0017A3r 1 04 05 06 07 +0017A7r 1 08 09 0A 0B +0017AFr 1 E0 E1 E2 E3 .lobytes 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 +0017B3r 1 E4 E5 E6 E7 +0017B7r 1 E8 E9 EA EB +0017BFr 1 F0 F1 F2 F3 .lobytes 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 +0017C3r 1 F4 F5 F6 F7 +0017C7r 1 F8 F9 FA FB +0017CFr 1 00 01 02 03 .lobytes 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 +0017D3r 1 04 05 06 07 +0017D7r 1 08 09 0A 0B +0017DFr 1 F0 F1 F2 F3 .lobytes 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 +0017E3r 1 F4 F5 F6 F7 +0017E7r 1 F8 F9 FA FB +0017EFr 1 00 01 02 03 .lobytes 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 +0017F3r 1 04 05 06 07 +0017F7r 1 08 09 0A 0B +0017FFr 1 F0 F1 F2 F3 .lobytes 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 +001803r 1 F4 F5 F6 F7 +001807r 1 F8 F9 FA FB +00180Fr 1 00 01 02 03 .lobytes 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 +001813r 1 04 05 06 07 +001817r 1 08 09 0A 0B +00181Fr 1 F0 F1 F2 F3 .lobytes 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 +001823r 1 F4 F5 F6 F7 +001827r 1 F8 F9 FA FB +00182Fr 1 00 01 02 03 .lobytes 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 +001833r 1 04 05 06 07 +001837r 1 08 09 0A 0B +00183Fr 1 F0 F1 F2 F3 .lobytes 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 +001843r 1 F4 F5 F6 F7 +001847r 1 F8 F9 FA FB +00184Fr 1 00 01 02 03 .lobytes 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 +001853r 1 04 05 06 07 +001857r 1 08 09 0A 0B +00185Fr 1 F0 F1 F2 F3 .lobytes 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 +001863r 1 F4 F5 F6 F7 +001867r 1 F8 F9 FA FB +00186Fr 1 00 01 02 03 .lobytes 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 +001873r 1 04 05 06 07 +001877r 1 08 09 0A 0B +00187Fr 1 F0 F1 F2 F3 .lobytes 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 +001883r 1 F4 F5 F6 F7 +001887r 1 F8 F9 FA FB +00188Fr 1 00 01 02 03 .lobytes 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 +001893r 1 04 05 06 07 +001897r 1 08 09 0A 0B +00189Fr 1 F0 F1 F2 F3 .lobytes 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 +0018A3r 1 F4 F5 F6 F7 +0018A7r 1 F8 F9 FA FB +0018AFr 1 00 01 02 03 .lobytes 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 +0018B3r 1 04 05 06 07 +0018B7r 1 08 09 0A 0B +0018BFr 1 F0 F1 F2 F3 .lobytes 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 +0018C3r 1 F4 F5 F6 F7 +0018C7r 1 F8 F9 FA FB +0018CFr 1 +0018CFr 1 ; multiple values on one line, hex +0018CFr 1 00 01 02 03 .lobytes $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +0018D3r 1 04 05 06 07 +0018D7r 1 08 09 0A 0B +0018DFr 1 10 11 12 13 .lobytes $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +0018E3r 1 14 15 16 17 +0018E7r 1 18 19 1A 1B +0018EFr 1 70 71 72 73 .lobytes $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +0018F3r 1 74 75 76 77 +0018F7r 1 78 79 7A 7B +0018FFr 1 80 81 82 83 .lobytes $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +001903r 1 84 85 86 87 +001907r 1 88 89 8A 8B +00190Fr 1 F0 F1 F2 F3 .lobytes $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +001913r 1 F4 F5 F6 F7 +001917r 1 F8 F9 FA FB +00191Fr 1 00 01 02 03 .lobytes $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f +001923r 1 04 05 06 07 +001927r 1 08 09 0A 0B +00192Fr 1 E0 E1 E2 E3 .lobytes $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef +001933r 1 E4 E5 E6 E7 +001937r 1 E8 E9 EA EB +00193Fr 1 F0 F1 F2 F3 .lobytes $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff +001943r 1 F4 F5 F6 F7 +001947r 1 F8 F9 FA FB +00194Fr 1 00 01 02 03 .lobytes $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f +001953r 1 04 05 06 07 +001957r 1 08 09 0A 0B +00195Fr 1 F0 F1 F2 F3 .lobytes $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff +001963r 1 F4 F5 F6 F7 +001967r 1 F8 F9 FA FB +00196Fr 1 00 01 02 03 .lobytes $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f +001973r 1 04 05 06 07 +001977r 1 08 09 0A 0B +00197Fr 1 F0 F1 F2 F3 .lobytes $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff +001983r 1 F4 F5 F6 F7 +001987r 1 F8 F9 FA FB +00198Fr 1 00 01 02 03 .lobytes $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f +001993r 1 04 05 06 07 +001997r 1 08 09 0A 0B +00199Fr 1 F0 F1 F2 F3 .lobytes $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff +0019A3r 1 F4 F5 F6 F7 +0019A7r 1 F8 F9 FA FB +0019AFr 1 00 01 02 03 .lobytes $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f +0019B3r 1 04 05 06 07 +0019B7r 1 08 09 0A 0B +0019BFr 1 F0 F1 F2 F3 .lobytes $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff +0019C3r 1 F4 F5 F6 F7 +0019C7r 1 F8 F9 FA FB +0019CFr 1 00 01 02 03 .lobytes $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f +0019D3r 1 04 05 06 07 +0019D7r 1 08 09 0A 0B +0019DFr 1 F0 F1 F2 F3 .lobytes $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff +0019E3r 1 F4 F5 F6 F7 +0019E7r 1 F8 F9 FA FB +0019EFr 1 00 01 02 03 .lobytes $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f +0019F3r 1 04 05 06 07 +0019F7r 1 08 09 0A 0B +0019FFr 1 F0 F1 F2 F3 .lobytes $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff +001A03r 1 F4 F5 F6 F7 +001A07r 1 F8 F9 FA FB +001A0Fr 1 00 01 02 03 .lobytes $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f +001A13r 1 04 05 06 07 +001A17r 1 08 09 0A 0B +001A1Fr 1 F0 F1 F2 F3 .lobytes $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff +001A23r 1 F4 F5 F6 F7 +001A27r 1 F8 F9 FA FB +001A2Fr 1 00 01 02 03 .lobytes $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f +001A33r 1 04 05 06 07 +001A37r 1 08 09 0A 0B +001A3Fr 1 F0 F1 F2 F3 .lobytes $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff +001A43r 1 F4 F5 F6 F7 +001A47r 1 F8 F9 FA FB +001A4Fr 1 +001A4Fr 1 ; multiple values on one line, alternative hex +001A4Fr 1 00 01 02 03 .lobytes 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +001A53r 1 04 05 06 07 +001A57r 1 08 09 0A 0B +001A5Fr 1 10 11 12 13 .lobytes 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +001A63r 1 14 15 16 17 +001A67r 1 18 19 1A 1B +001A6Fr 1 70 71 72 73 .lobytes 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +001A73r 1 74 75 76 77 +001A77r 1 78 79 7A 7B +001A7Fr 1 80 81 82 83 .lobytes 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +001A83r 1 84 85 86 87 +001A87r 1 88 89 8A 8B +001A8Fr 1 F0 F1 F2 F3 .lobytes 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +001A93r 1 F4 F5 F6 F7 +001A97r 1 F8 F9 FA FB +001A9Fr 1 00 01 02 03 .lobytes 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh +001AA3r 1 04 05 06 07 +001AA7r 1 08 09 0A 0B +001AAFr 1 E0 E1 E2 E3 .lobytes 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh +001AB3r 1 E4 E5 E6 E7 +001AB7r 1 E8 E9 EA EB +001ABFr 1 F0 F1 F2 F3 .lobytes 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh +001AC3r 1 F4 F5 F6 F7 +001AC7r 1 F8 F9 FA FB +001ACFr 1 00 01 02 03 .lobytes 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh +001AD3r 1 04 05 06 07 +001AD7r 1 08 09 0A 0B +001ADFr 1 F0 F1 F2 F3 .lobytes 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh +001AE3r 1 F4 F5 F6 F7 +001AE7r 1 F8 F9 FA FB +001AEFr 1 00 01 02 03 .lobytes 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh +001AF3r 1 04 05 06 07 +001AF7r 1 08 09 0A 0B +001AFFr 1 F0 F1 F2 F3 .lobytes 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh +001B03r 1 F4 F5 F6 F7 +001B07r 1 F8 F9 FA FB +001B0Fr 1 00 01 02 03 .lobytes 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh +001B13r 1 04 05 06 07 +001B17r 1 08 09 0A 0B +001B1Fr 1 F0 F1 F2 F3 .lobytes 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh +001B23r 1 F4 F5 F6 F7 +001B27r 1 F8 F9 FA FB +001B2Fr 1 00 01 02 03 .lobytes 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh +001B33r 1 04 05 06 07 +001B37r 1 08 09 0A 0B +001B3Fr 1 F0 F1 F2 F3 .lobytes 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh +001B43r 1 F4 F5 F6 F7 +001B47r 1 F8 F9 FA FB +001B4Fr 1 00 01 02 03 .lobytes 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh +001B53r 1 04 05 06 07 +001B57r 1 08 09 0A 0B +001B5Fr 1 F0 F1 F2 F3 .lobytes 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh +001B63r 1 F4 F5 F6 F7 +001B67r 1 F8 F9 FA FB +001B6Fr 1 00 01 02 03 .lobytes 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh +001B73r 1 04 05 06 07 +001B77r 1 08 09 0A 0B +001B7Fr 1 F0 F1 F2 F3 .lobytes 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh +001B83r 1 F4 F5 F6 F7 +001B87r 1 F8 F9 FA FB +001B8Fr 1 00 01 02 03 .lobytes 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh +001B93r 1 04 05 06 07 +001B97r 1 08 09 0A 0B +001B9Fr 1 F0 F1 F2 F3 .lobytes 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh +001BA3r 1 F4 F5 F6 F7 +001BA7r 1 F8 F9 FA FB +001BAFr 1 00 01 02 03 .lobytes 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh +001BB3r 1 04 05 06 07 +001BB7r 1 08 09 0A 0B +001BBFr 1 F0 F1 F2 F3 .lobytes 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh +001BC3r 1 F4 F5 F6 F7 +001BC7r 1 F8 F9 FA FB +001BCFr 1 +001BCFr 1 ; mix some variants +001BCFr 1 0B 11 03 11 .lobytes 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +001BD3r 1 61 62 7A 41 +001BD7r 1 5A 30 39 AA +001BDEr 1 diff --git a/test/asm/listing/107-lobytes.s b/test/asm/listing/107-lobytes.s new file mode 100644 index 000000000..ace7f83b6 --- /dev/null +++ b/test/asm/listing/107-lobytes.s @@ -0,0 +1,6076 @@ +; 2022-06-15 Spiro Trikaliotis + + + ; upper case pseudo-op + .LOBYTES 0 + .LOBYTES 1 + .LOBYTES 2 + .LOBYTES 3 + .LOBYTES 4 + .LOBYTES 5 + .LOBYTES 6 + .LOBYTES 7 + .LOBYTES 8 + .LOBYTES 9 + .LOBYTES 10 + .LOBYTES 11 + .LOBYTES 12 + .LOBYTES 13 + .LOBYTES 14 + .LOBYTES 15 + .LOBYTES 16 + .LOBYTES 17 + .LOBYTES 18 + .LOBYTES 19 + .LOBYTES 112 + .LOBYTES 113 + .LOBYTES 114 + .LOBYTES 115 + .LOBYTES 116 + .LOBYTES 117 + .LOBYTES 118 + .LOBYTES 119 + .LOBYTES 120 + .LOBYTES 121 + .LOBYTES 122 + .LOBYTES 123 + .LOBYTES 124 + .LOBYTES 125 + .LOBYTES 126 + .LOBYTES 127 + .LOBYTES 128 + .LOBYTES 129 + .LOBYTES 130 + .LOBYTES 131 + .LOBYTES 132 + .LOBYTES 133 + .LOBYTES 134 + .LOBYTES 240 + .LOBYTES 241 + .LOBYTES 242 + .LOBYTES 243 + .LOBYTES 244 + .LOBYTES 245 + .LOBYTES 246 + .LOBYTES 247 + .LOBYTES 248 + .LOBYTES 249 + .LOBYTES 250 + .LOBYTES 251 + .LOBYTES 252 + .LOBYTES 253 + .LOBYTES 254 + .LOBYTES 255 + .LOBYTES 256 + .LOBYTES 257 + .LOBYTES 258 + .LOBYTES 259 + .LOBYTES 4050 + .LOBYTES 4051 + .LOBYTES 4052 + .LOBYTES 4053 + .LOBYTES 4054 + .LOBYTES 4055 + .LOBYTES 4056 + .LOBYTES 4057 + .LOBYTES 4058 + .LOBYTES 4059 + .LOBYTES 4060 + .LOBYTES 4061 + .LOBYTES 4062 + .LOBYTES 4063 + .LOBYTES 4064 + .LOBYTES 4065 + .LOBYTES 4066 + .LOBYTES 4067 + .LOBYTES 4068 + .LOBYTES 4069 + .LOBYTES 4070 + .LOBYTES 4071 + .LOBYTES 4072 + .LOBYTES 4073 + .LOBYTES 4074 + .LOBYTES 4075 + .LOBYTES 4076 + .LOBYTES 4077 + .LOBYTES 4078 + .LOBYTES 4079 + .LOBYTES 4080 + .LOBYTES 4081 + .LOBYTES 4082 + .LOBYTES 4083 + .LOBYTES 4084 + .LOBYTES 4085 + .LOBYTES 4086 + .LOBYTES 4087 + .LOBYTES 4088 + .LOBYTES 4089 + .LOBYTES 4090 + .LOBYTES 4091 + .LOBYTES 4092 + .LOBYTES 4093 + .LOBYTES 4094 + .LOBYTES 4095 + .LOBYTES 4096 + .LOBYTES 4097 + .LOBYTES 4098 + .LOBYTES 4099 + .LOBYTES 4100 + .LOBYTES 4101 + .LOBYTES 4102 + .LOBYTES 4103 + .LOBYTES 4104 + .LOBYTES 32752 + .LOBYTES 32753 + .LOBYTES 32754 + .LOBYTES 32755 + .LOBYTES 32756 + .LOBYTES 32757 + .LOBYTES 32758 + .LOBYTES 32759 + .LOBYTES 32760 + .LOBYTES 32761 + .LOBYTES 32762 + .LOBYTES 32763 + .LOBYTES 32764 + .LOBYTES 32765 + .LOBYTES 32766 + .LOBYTES 32767 + .LOBYTES 32768 + .LOBYTES 32769 + .LOBYTES 32770 + .LOBYTES 32771 + .LOBYTES 32772 + .LOBYTES 32773 + .LOBYTES 32774 + .LOBYTES 32775 + .LOBYTES 32776 + .LOBYTES 32777 + .LOBYTES 32778 + .LOBYTES 32779 + .LOBYTES 40929 + .LOBYTES 40930 + .LOBYTES 40931 + .LOBYTES 40932 + .LOBYTES 40933 + .LOBYTES 40934 + .LOBYTES 40935 + .LOBYTES 40936 + .LOBYTES 40937 + .LOBYTES 40938 + .LOBYTES 40939 + .LOBYTES 40940 + .LOBYTES 40941 + .LOBYTES 40942 + .LOBYTES 40943 + .LOBYTES 40944 + .LOBYTES 40945 + .LOBYTES 40946 + .LOBYTES 40947 + .LOBYTES 40948 + .LOBYTES 40949 + .LOBYTES 40950 + .LOBYTES 40951 + .LOBYTES 40952 + .LOBYTES 40953 + .LOBYTES 40954 + .LOBYTES 40955 + .LOBYTES 40956 + .LOBYTES 40957 + .LOBYTES 40958 + .LOBYTES 40959 + .LOBYTES 40960 + .LOBYTES 40961 + .LOBYTES 40962 + .LOBYTES 40963 + .LOBYTES 40964 + .LOBYTES 40965 + .LOBYTES 40966 + .LOBYTES 40967 + .LOBYTES 40968 + .LOBYTES 40969 + .LOBYTES 40970 + .LOBYTES 40971 + .LOBYTES 40972 + .LOBYTES 40973 + .LOBYTES 40974 + .LOBYTES 40975 + .LOBYTES 45025 + .LOBYTES 45026 + .LOBYTES 45027 + .LOBYTES 45028 + .LOBYTES 45029 + .LOBYTES 45030 + .LOBYTES 45031 + .LOBYTES 45032 + .LOBYTES 45033 + .LOBYTES 45034 + .LOBYTES 45035 + .LOBYTES 45036 + .LOBYTES 45037 + .LOBYTES 45038 + .LOBYTES 45039 + .LOBYTES 45040 + .LOBYTES 45041 + .LOBYTES 45042 + .LOBYTES 45043 + .LOBYTES 45044 + .LOBYTES 45045 + .LOBYTES 45046 + .LOBYTES 45047 + .LOBYTES 45048 + .LOBYTES 45049 + .LOBYTES 45050 + .LOBYTES 45051 + .LOBYTES 45052 + .LOBYTES 45053 + .LOBYTES 45054 + .LOBYTES 45055 + .LOBYTES 45056 + .LOBYTES 45057 + .LOBYTES 45058 + .LOBYTES 45059 + .LOBYTES 45060 + .LOBYTES 45061 + .LOBYTES 45062 + .LOBYTES 45063 + .LOBYTES 45064 + .LOBYTES 45065 + .LOBYTES 45066 + .LOBYTES 45067 + .LOBYTES 45068 + .LOBYTES 45069 + .LOBYTES 45070 + .LOBYTES 45071 + .LOBYTES 49121 + .LOBYTES 49122 + .LOBYTES 49123 + .LOBYTES 49124 + .LOBYTES 49125 + .LOBYTES 49126 + .LOBYTES 49127 + .LOBYTES 49128 + .LOBYTES 49129 + .LOBYTES 49130 + .LOBYTES 49131 + .LOBYTES 49132 + .LOBYTES 49133 + .LOBYTES 49134 + .LOBYTES 49135 + .LOBYTES 49136 + .LOBYTES 49137 + .LOBYTES 49138 + .LOBYTES 49139 + .LOBYTES 49140 + .LOBYTES 49141 + .LOBYTES 49142 + .LOBYTES 49143 + .LOBYTES 49144 + .LOBYTES 49145 + .LOBYTES 49146 + .LOBYTES 49147 + .LOBYTES 49148 + .LOBYTES 49149 + .LOBYTES 49150 + .LOBYTES 49151 + .LOBYTES 49152 + .LOBYTES 49153 + .LOBYTES 49154 + .LOBYTES 49155 + .LOBYTES 49156 + .LOBYTES 49157 + .LOBYTES 49158 + .LOBYTES 49159 + .LOBYTES 49160 + .LOBYTES 49161 + .LOBYTES 49162 + .LOBYTES 49163 + .LOBYTES 49164 + .LOBYTES 49165 + .LOBYTES 49166 + .LOBYTES 49167 + .LOBYTES 53217 + .LOBYTES 53218 + .LOBYTES 53219 + .LOBYTES 53220 + .LOBYTES 53221 + .LOBYTES 53222 + .LOBYTES 53223 + .LOBYTES 53224 + .LOBYTES 53225 + .LOBYTES 53226 + .LOBYTES 53227 + .LOBYTES 53228 + .LOBYTES 53229 + .LOBYTES 53230 + .LOBYTES 53231 + .LOBYTES 53232 + .LOBYTES 53233 + .LOBYTES 53234 + .LOBYTES 53235 + .LOBYTES 53236 + .LOBYTES 53237 + .LOBYTES 53238 + .LOBYTES 53239 + .LOBYTES 53240 + .LOBYTES 53241 + .LOBYTES 53242 + .LOBYTES 53243 + .LOBYTES 53244 + .LOBYTES 53245 + .LOBYTES 53246 + .LOBYTES 53247 + .LOBYTES 53248 + .LOBYTES 53249 + .LOBYTES 53250 + .LOBYTES 53251 + .LOBYTES 53252 + .LOBYTES 53253 + .LOBYTES 53254 + .LOBYTES 53255 + .LOBYTES 53256 + .LOBYTES 53257 + .LOBYTES 53258 + .LOBYTES 53259 + .LOBYTES 53260 + .LOBYTES 53261 + .LOBYTES 53262 + .LOBYTES 53263 + .LOBYTES 57313 + .LOBYTES 57314 + .LOBYTES 57315 + .LOBYTES 57316 + .LOBYTES 57317 + .LOBYTES 57318 + .LOBYTES 57319 + .LOBYTES 57320 + .LOBYTES 57321 + .LOBYTES 57322 + .LOBYTES 57323 + .LOBYTES 57324 + .LOBYTES 57325 + .LOBYTES 57326 + .LOBYTES 57327 + .LOBYTES 57328 + .LOBYTES 57329 + .LOBYTES 57330 + .LOBYTES 57331 + .LOBYTES 57332 + .LOBYTES 57333 + .LOBYTES 57334 + .LOBYTES 57335 + .LOBYTES 57336 + .LOBYTES 57337 + .LOBYTES 57338 + .LOBYTES 57339 + .LOBYTES 57340 + .LOBYTES 57341 + .LOBYTES 57342 + .LOBYTES 57343 + .LOBYTES 57344 + .LOBYTES 57345 + .LOBYTES 57346 + .LOBYTES 57347 + .LOBYTES 57348 + .LOBYTES 57349 + .LOBYTES 57350 + .LOBYTES 57351 + .LOBYTES 57352 + .LOBYTES 57353 + .LOBYTES 57354 + .LOBYTES 57355 + .LOBYTES 57356 + .LOBYTES 57357 + .LOBYTES 57358 + .LOBYTES 57359 + .LOBYTES 61409 + .LOBYTES 61410 + .LOBYTES 61411 + .LOBYTES 61412 + .LOBYTES 61413 + .LOBYTES 61414 + .LOBYTES 61415 + .LOBYTES 61416 + .LOBYTES 61417 + .LOBYTES 61418 + .LOBYTES 61419 + .LOBYTES 61420 + .LOBYTES 61421 + .LOBYTES 61422 + .LOBYTES 61423 + .LOBYTES 61424 + .LOBYTES 61425 + .LOBYTES 61426 + .LOBYTES 61427 + .LOBYTES 61428 + .LOBYTES 61429 + .LOBYTES 61430 + .LOBYTES 61431 + .LOBYTES 61432 + .LOBYTES 61433 + .LOBYTES 61434 + .LOBYTES 61435 + .LOBYTES 61436 + .LOBYTES 61437 + .LOBYTES 61438 + .LOBYTES 61439 + .LOBYTES 61440 + .LOBYTES 61441 + .LOBYTES 61442 + .LOBYTES 61443 + .LOBYTES 61444 + .LOBYTES 61445 + .LOBYTES 61446 + .LOBYTES 61447 + .LOBYTES 61448 + .LOBYTES 61449 + .LOBYTES 61450 + .LOBYTES 61451 + .LOBYTES 61452 + .LOBYTES 61453 + .LOBYTES 61454 + .LOBYTES 61455 + .LOBYTES 65505 + .LOBYTES 65506 + .LOBYTES 65507 + .LOBYTES 65508 + .LOBYTES 65509 + .LOBYTES 65510 + .LOBYTES 65511 + .LOBYTES 65512 + .LOBYTES 65513 + .LOBYTES 65514 + .LOBYTES 65515 + .LOBYTES 65516 + .LOBYTES 65517 + .LOBYTES 65518 + .LOBYTES 65519 + .LOBYTES 65520 + .LOBYTES 65521 + .LOBYTES 65522 + .LOBYTES 65523 + .LOBYTES 65524 + .LOBYTES 65525 + .LOBYTES 65526 + .LOBYTES 65527 + .LOBYTES 65528 + .LOBYTES 65529 + .LOBYTES 65530 + .LOBYTES 65531 + .LOBYTES 65532 + .LOBYTES 65533 + .LOBYTES 65534 + .LOBYTES 65535 + + ; lower case pseudo-op + .lobytes 0 + .lobytes 1 + .lobytes 2 + .lobytes 3 + .lobytes 4 + .lobytes 5 + .lobytes 6 + .lobytes 7 + .lobytes 8 + .lobytes 9 + .lobytes 10 + .lobytes 11 + .lobytes 12 + .lobytes 13 + .lobytes 14 + .lobytes 15 + .lobytes 16 + .lobytes 17 + .lobytes 18 + .lobytes 19 + .lobytes 112 + .lobytes 113 + .lobytes 114 + .lobytes 115 + .lobytes 116 + .lobytes 117 + .lobytes 118 + .lobytes 119 + .lobytes 120 + .lobytes 121 + .lobytes 122 + .lobytes 123 + .lobytes 124 + .lobytes 125 + .lobytes 126 + .lobytes 127 + .lobytes 128 + .lobytes 129 + .lobytes 130 + .lobytes 131 + .lobytes 132 + .lobytes 133 + .lobytes 134 + .lobytes 240 + .lobytes 241 + .lobytes 242 + .lobytes 243 + .lobytes 244 + .lobytes 245 + .lobytes 246 + .lobytes 247 + .lobytes 248 + .lobytes 249 + .lobytes 250 + .lobytes 251 + .lobytes 252 + .lobytes 253 + .lobytes 254 + .lobytes 255 + .lobytes 256 + .lobytes 257 + .lobytes 258 + .lobytes 259 + .lobytes 4050 + .lobytes 4051 + .lobytes 4052 + .lobytes 4053 + .lobytes 4054 + .lobytes 4055 + .lobytes 4056 + .lobytes 4057 + .lobytes 4058 + .lobytes 4059 + .lobytes 4060 + .lobytes 4061 + .lobytes 4062 + .lobytes 4063 + .lobytes 4064 + .lobytes 4065 + .lobytes 4066 + .lobytes 4067 + .lobytes 4068 + .lobytes 4069 + .lobytes 4070 + .lobytes 4071 + .lobytes 4072 + .lobytes 4073 + .lobytes 4074 + .lobytes 4075 + .lobytes 4076 + .lobytes 4077 + .lobytes 4078 + .lobytes 4079 + .lobytes 4080 + .lobytes 4081 + .lobytes 4082 + .lobytes 4083 + .lobytes 4084 + .lobytes 4085 + .lobytes 4086 + .lobytes 4087 + .lobytes 4088 + .lobytes 4089 + .lobytes 4090 + .lobytes 4091 + .lobytes 4092 + .lobytes 4093 + .lobytes 4094 + .lobytes 4095 + .lobytes 4096 + .lobytes 4097 + .lobytes 4098 + .lobytes 4099 + .lobytes 4100 + .lobytes 4101 + .lobytes 4102 + .lobytes 4103 + .lobytes 4104 + .lobytes 32752 + .lobytes 32753 + .lobytes 32754 + .lobytes 32755 + .lobytes 32756 + .lobytes 32757 + .lobytes 32758 + .lobytes 32759 + .lobytes 32760 + .lobytes 32761 + .lobytes 32762 + .lobytes 32763 + .lobytes 32764 + .lobytes 32765 + .lobytes 32766 + .lobytes 32767 + .lobytes 32768 + .lobytes 32769 + .lobytes 32770 + .lobytes 32771 + .lobytes 32772 + .lobytes 32773 + .lobytes 32774 + .lobytes 32775 + .lobytes 32776 + .lobytes 32777 + .lobytes 32778 + .lobytes 32779 + .lobytes 40929 + .lobytes 40930 + .lobytes 40931 + .lobytes 40932 + .lobytes 40933 + .lobytes 40934 + .lobytes 40935 + .lobytes 40936 + .lobytes 40937 + .lobytes 40938 + .lobytes 40939 + .lobytes 40940 + .lobytes 40941 + .lobytes 40942 + .lobytes 40943 + .lobytes 40944 + .lobytes 40945 + .lobytes 40946 + .lobytes 40947 + .lobytes 40948 + .lobytes 40949 + .lobytes 40950 + .lobytes 40951 + .lobytes 40952 + .lobytes 40953 + .lobytes 40954 + .lobytes 40955 + .lobytes 40956 + .lobytes 40957 + .lobytes 40958 + .lobytes 40959 + .lobytes 40960 + .lobytes 40961 + .lobytes 40962 + .lobytes 40963 + .lobytes 40964 + .lobytes 40965 + .lobytes 40966 + .lobytes 40967 + .lobytes 40968 + .lobytes 40969 + .lobytes 40970 + .lobytes 40971 + .lobytes 40972 + .lobytes 40973 + .lobytes 40974 + .lobytes 40975 + .lobytes 45025 + .lobytes 45026 + .lobytes 45027 + .lobytes 45028 + .lobytes 45029 + .lobytes 45030 + .lobytes 45031 + .lobytes 45032 + .lobytes 45033 + .lobytes 45034 + .lobytes 45035 + .lobytes 45036 + .lobytes 45037 + .lobytes 45038 + .lobytes 45039 + .lobytes 45040 + .lobytes 45041 + .lobytes 45042 + .lobytes 45043 + .lobytes 45044 + .lobytes 45045 + .lobytes 45046 + .lobytes 45047 + .lobytes 45048 + .lobytes 45049 + .lobytes 45050 + .lobytes 45051 + .lobytes 45052 + .lobytes 45053 + .lobytes 45054 + .lobytes 45055 + .lobytes 45056 + .lobytes 45057 + .lobytes 45058 + .lobytes 45059 + .lobytes 45060 + .lobytes 45061 + .lobytes 45062 + .lobytes 45063 + .lobytes 45064 + .lobytes 45065 + .lobytes 45066 + .lobytes 45067 + .lobytes 45068 + .lobytes 45069 + .lobytes 45070 + .lobytes 45071 + .lobytes 49121 + .lobytes 49122 + .lobytes 49123 + .lobytes 49124 + .lobytes 49125 + .lobytes 49126 + .lobytes 49127 + .lobytes 49128 + .lobytes 49129 + .lobytes 49130 + .lobytes 49131 + .lobytes 49132 + .lobytes 49133 + .lobytes 49134 + .lobytes 49135 + .lobytes 49136 + .lobytes 49137 + .lobytes 49138 + .lobytes 49139 + .lobytes 49140 + .lobytes 49141 + .lobytes 49142 + .lobytes 49143 + .lobytes 49144 + .lobytes 49145 + .lobytes 49146 + .lobytes 49147 + .lobytes 49148 + .lobytes 49149 + .lobytes 49150 + .lobytes 49151 + .lobytes 49152 + .lobytes 49153 + .lobytes 49154 + .lobytes 49155 + .lobytes 49156 + .lobytes 49157 + .lobytes 49158 + .lobytes 49159 + .lobytes 49160 + .lobytes 49161 + .lobytes 49162 + .lobytes 49163 + .lobytes 49164 + .lobytes 49165 + .lobytes 49166 + .lobytes 49167 + .lobytes 53217 + .lobytes 53218 + .lobytes 53219 + .lobytes 53220 + .lobytes 53221 + .lobytes 53222 + .lobytes 53223 + .lobytes 53224 + .lobytes 53225 + .lobytes 53226 + .lobytes 53227 + .lobytes 53228 + .lobytes 53229 + .lobytes 53230 + .lobytes 53231 + .lobytes 53232 + .lobytes 53233 + .lobytes 53234 + .lobytes 53235 + .lobytes 53236 + .lobytes 53237 + .lobytes 53238 + .lobytes 53239 + .lobytes 53240 + .lobytes 53241 + .lobytes 53242 + .lobytes 53243 + .lobytes 53244 + .lobytes 53245 + .lobytes 53246 + .lobytes 53247 + .lobytes 53248 + .lobytes 53249 + .lobytes 53250 + .lobytes 53251 + .lobytes 53252 + .lobytes 53253 + .lobytes 53254 + .lobytes 53255 + .lobytes 53256 + .lobytes 53257 + .lobytes 53258 + .lobytes 53259 + .lobytes 53260 + .lobytes 53261 + .lobytes 53262 + .lobytes 53263 + .lobytes 57313 + .lobytes 57314 + .lobytes 57315 + .lobytes 57316 + .lobytes 57317 + .lobytes 57318 + .lobytes 57319 + .lobytes 57320 + .lobytes 57321 + .lobytes 57322 + .lobytes 57323 + .lobytes 57324 + .lobytes 57325 + .lobytes 57326 + .lobytes 57327 + .lobytes 57328 + .lobytes 57329 + .lobytes 57330 + .lobytes 57331 + .lobytes 57332 + .lobytes 57333 + .lobytes 57334 + .lobytes 57335 + .lobytes 57336 + .lobytes 57337 + .lobytes 57338 + .lobytes 57339 + .lobytes 57340 + .lobytes 57341 + .lobytes 57342 + .lobytes 57343 + .lobytes 57344 + .lobytes 57345 + .lobytes 57346 + .lobytes 57347 + .lobytes 57348 + .lobytes 57349 + .lobytes 57350 + .lobytes 57351 + .lobytes 57352 + .lobytes 57353 + .lobytes 57354 + .lobytes 57355 + .lobytes 57356 + .lobytes 57357 + .lobytes 57358 + .lobytes 57359 + .lobytes 61409 + .lobytes 61410 + .lobytes 61411 + .lobytes 61412 + .lobytes 61413 + .lobytes 61414 + .lobytes 61415 + .lobytes 61416 + .lobytes 61417 + .lobytes 61418 + .lobytes 61419 + .lobytes 61420 + .lobytes 61421 + .lobytes 61422 + .lobytes 61423 + .lobytes 61424 + .lobytes 61425 + .lobytes 61426 + .lobytes 61427 + .lobytes 61428 + .lobytes 61429 + .lobytes 61430 + .lobytes 61431 + .lobytes 61432 + .lobytes 61433 + .lobytes 61434 + .lobytes 61435 + .lobytes 61436 + .lobytes 61437 + .lobytes 61438 + .lobytes 61439 + .lobytes 61440 + .lobytes 61441 + .lobytes 61442 + .lobytes 61443 + .lobytes 61444 + .lobytes 61445 + .lobytes 61446 + .lobytes 61447 + .lobytes 61448 + .lobytes 61449 + .lobytes 61450 + .lobytes 61451 + .lobytes 61452 + .lobytes 61453 + .lobytes 61454 + .lobytes 61455 + .lobytes 65505 + .lobytes 65506 + .lobytes 65507 + .lobytes 65508 + .lobytes 65509 + .lobytes 65510 + .lobytes 65511 + .lobytes 65512 + .lobytes 65513 + .lobytes 65514 + .lobytes 65515 + .lobytes 65516 + .lobytes 65517 + .lobytes 65518 + .lobytes 65519 + .lobytes 65520 + .lobytes 65521 + .lobytes 65522 + .lobytes 65523 + .lobytes 65524 + .lobytes 65525 + .lobytes 65526 + .lobytes 65527 + .lobytes 65528 + .lobytes 65529 + .lobytes 65530 + .lobytes 65531 + .lobytes 65532 + .lobytes 65533 + .lobytes 65534 + .lobytes 65535 + + ; hex values + .lobytes $0 + .lobytes $1 + .lobytes $2 + .lobytes $3 + .lobytes $4 + .lobytes $5 + .lobytes $6 + .lobytes $7 + .lobytes $8 + .lobytes $9 + .lobytes $a + .lobytes $b + .lobytes $c + .lobytes $d + .lobytes $e + .lobytes $f + .lobytes $10 + .lobytes $11 + .lobytes $12 + .lobytes $13 + .lobytes $70 + .lobytes $71 + .lobytes $72 + .lobytes $73 + .lobytes $74 + .lobytes $75 + .lobytes $76 + .lobytes $77 + .lobytes $78 + .lobytes $79 + .lobytes $7a + .lobytes $7b + .lobytes $7c + .lobytes $7d + .lobytes $7e + .lobytes $7f + .lobytes $80 + .lobytes $81 + .lobytes $82 + .lobytes $83 + .lobytes $84 + .lobytes $85 + .lobytes $86 + .lobytes $f0 + .lobytes $f1 + .lobytes $f2 + .lobytes $f3 + .lobytes $f4 + .lobytes $f5 + .lobytes $f6 + .lobytes $f7 + .lobytes $f8 + .lobytes $f9 + .lobytes $fa + .lobytes $fb + .lobytes $fc + .lobytes $fd + .lobytes $fe + .lobytes $ff + .lobytes $100 + .lobytes $101 + .lobytes $102 + .lobytes $103 + .lobytes $fd2 + .lobytes $fd3 + .lobytes $fd4 + .lobytes $fd5 + .lobytes $fd6 + .lobytes $fd7 + .lobytes $fd8 + .lobytes $fd9 + .lobytes $fda + .lobytes $fdb + .lobytes $fdc + .lobytes $fdd + .lobytes $fde + .lobytes $fdf + .lobytes $fe0 + .lobytes $fe1 + .lobytes $fe2 + .lobytes $fe3 + .lobytes $fe4 + .lobytes $fe5 + .lobytes $fe6 + .lobytes $fe7 + .lobytes $fe8 + .lobytes $fe9 + .lobytes $fea + .lobytes $feb + .lobytes $fec + .lobytes $fed + .lobytes $fee + .lobytes $fef + .lobytes $ff0 + .lobytes $ff1 + .lobytes $ff2 + .lobytes $ff3 + .lobytes $ff4 + .lobytes $ff5 + .lobytes $ff6 + .lobytes $ff7 + .lobytes $ff8 + .lobytes $ff9 + .lobytes $ffa + .lobytes $ffb + .lobytes $ffc + .lobytes $ffd + .lobytes $ffe + .lobytes $fff + .lobytes $1000 + .lobytes $1001 + .lobytes $1002 + .lobytes $1003 + .lobytes $1004 + .lobytes $1005 + .lobytes $1006 + .lobytes $1007 + .lobytes $1008 + .lobytes $7ff0 + .lobytes $7ff1 + .lobytes $7ff2 + .lobytes $7ff3 + .lobytes $7ff4 + .lobytes $7ff5 + .lobytes $7ff6 + .lobytes $7ff7 + .lobytes $7ff8 + .lobytes $7ff9 + .lobytes $7ffa + .lobytes $7ffb + .lobytes $7ffc + .lobytes $7ffd + .lobytes $7ffe + .lobytes $7fff + .lobytes $8000 + .lobytes $8001 + .lobytes $8002 + .lobytes $8003 + .lobytes $8004 + .lobytes $8005 + .lobytes $8006 + .lobytes $8007 + .lobytes $8008 + .lobytes $8009 + .lobytes $800a + .lobytes $800b + .lobytes $9fe1 + .lobytes $9fe2 + .lobytes $9fe3 + .lobytes $9fe4 + .lobytes $9fe5 + .lobytes $9fe6 + .lobytes $9fe7 + .lobytes $9fe8 + .lobytes $9fe9 + .lobytes $9fea + .lobytes $9feb + .lobytes $9fec + .lobytes $9fed + .lobytes $9fee + .lobytes $9fef + .lobytes $9ff0 + .lobytes $9ff1 + .lobytes $9ff2 + .lobytes $9ff3 + .lobytes $9ff4 + .lobytes $9ff5 + .lobytes $9ff6 + .lobytes $9ff7 + .lobytes $9ff8 + .lobytes $9ff9 + .lobytes $9ffa + .lobytes $9ffb + .lobytes $9ffc + .lobytes $9ffd + .lobytes $9ffe + .lobytes $9fff + .lobytes $a000 + .lobytes $a001 + .lobytes $a002 + .lobytes $a003 + .lobytes $a004 + .lobytes $a005 + .lobytes $a006 + .lobytes $a007 + .lobytes $a008 + .lobytes $a009 + .lobytes $a00a + .lobytes $a00b + .lobytes $a00c + .lobytes $a00d + .lobytes $a00e + .lobytes $a00f + .lobytes $afe1 + .lobytes $afe2 + .lobytes $afe3 + .lobytes $afe4 + .lobytes $afe5 + .lobytes $afe6 + .lobytes $afe7 + .lobytes $afe8 + .lobytes $afe9 + .lobytes $afea + .lobytes $afeb + .lobytes $afec + .lobytes $afed + .lobytes $afee + .lobytes $afef + .lobytes $aff0 + .lobytes $aff1 + .lobytes $aff2 + .lobytes $aff3 + .lobytes $aff4 + .lobytes $aff5 + .lobytes $aff6 + .lobytes $aff7 + .lobytes $aff8 + .lobytes $aff9 + .lobytes $affa + .lobytes $affb + .lobytes $affc + .lobytes $affd + .lobytes $affe + .lobytes $afff + .lobytes $b000 + .lobytes $b001 + .lobytes $b002 + .lobytes $b003 + .lobytes $b004 + .lobytes $b005 + .lobytes $b006 + .lobytes $b007 + .lobytes $b008 + .lobytes $b009 + .lobytes $b00a + .lobytes $b00b + .lobytes $b00c + .lobytes $b00d + .lobytes $b00e + .lobytes $b00f + .lobytes $bfe1 + .lobytes $bfe2 + .lobytes $bfe3 + .lobytes $bfe4 + .lobytes $bfe5 + .lobytes $bfe6 + .lobytes $bfe7 + .lobytes $bfe8 + .lobytes $bfe9 + .lobytes $bfea + .lobytes $bfeb + .lobytes $bfec + .lobytes $bfed + .lobytes $bfee + .lobytes $bfef + .lobytes $bff0 + .lobytes $bff1 + .lobytes $bff2 + .lobytes $bff3 + .lobytes $bff4 + .lobytes $bff5 + .lobytes $bff6 + .lobytes $bff7 + .lobytes $bff8 + .lobytes $bff9 + .lobytes $bffa + .lobytes $bffb + .lobytes $bffc + .lobytes $bffd + .lobytes $bffe + .lobytes $bfff + .lobytes $c000 + .lobytes $c001 + .lobytes $c002 + .lobytes $c003 + .lobytes $c004 + .lobytes $c005 + .lobytes $c006 + .lobytes $c007 + .lobytes $c008 + .lobytes $c009 + .lobytes $c00a + .lobytes $c00b + .lobytes $c00c + .lobytes $c00d + .lobytes $c00e + .lobytes $c00f + .lobytes $cfe1 + .lobytes $cfe2 + .lobytes $cfe3 + .lobytes $cfe4 + .lobytes $cfe5 + .lobytes $cfe6 + .lobytes $cfe7 + .lobytes $cfe8 + .lobytes $cfe9 + .lobytes $cfea + .lobytes $cfeb + .lobytes $cfec + .lobytes $cfed + .lobytes $cfee + .lobytes $cfef + .lobytes $cff0 + .lobytes $cff1 + .lobytes $cff2 + .lobytes $cff3 + .lobytes $cff4 + .lobytes $cff5 + .lobytes $cff6 + .lobytes $cff7 + .lobytes $cff8 + .lobytes $cff9 + .lobytes $cffa + .lobytes $cffb + .lobytes $cffc + .lobytes $cffd + .lobytes $cffe + .lobytes $cfff + .lobytes $d000 + .lobytes $d001 + .lobytes $d002 + .lobytes $d003 + .lobytes $d004 + .lobytes $d005 + .lobytes $d006 + .lobytes $d007 + .lobytes $d008 + .lobytes $d009 + .lobytes $d00a + .lobytes $d00b + .lobytes $d00c + .lobytes $d00d + .lobytes $d00e + .lobytes $d00f + .lobytes $dfe1 + .lobytes $dfe2 + .lobytes $dfe3 + .lobytes $dfe4 + .lobytes $dfe5 + .lobytes $dfe6 + .lobytes $dfe7 + .lobytes $dfe8 + .lobytes $dfe9 + .lobytes $dfea + .lobytes $dfeb + .lobytes $dfec + .lobytes $dfed + .lobytes $dfee + .lobytes $dfef + .lobytes $dff0 + .lobytes $dff1 + .lobytes $dff2 + .lobytes $dff3 + .lobytes $dff4 + .lobytes $dff5 + .lobytes $dff6 + .lobytes $dff7 + .lobytes $dff8 + .lobytes $dff9 + .lobytes $dffa + .lobytes $dffb + .lobytes $dffc + .lobytes $dffd + .lobytes $dffe + .lobytes $dfff + .lobytes $e000 + .lobytes $e001 + .lobytes $e002 + .lobytes $e003 + .lobytes $e004 + .lobytes $e005 + .lobytes $e006 + .lobytes $e007 + .lobytes $e008 + .lobytes $e009 + .lobytes $e00a + .lobytes $e00b + .lobytes $e00c + .lobytes $e00d + .lobytes $e00e + .lobytes $e00f + .lobytes $efe1 + .lobytes $efe2 + .lobytes $efe3 + .lobytes $efe4 + .lobytes $efe5 + .lobytes $efe6 + .lobytes $efe7 + .lobytes $efe8 + .lobytes $efe9 + .lobytes $efea + .lobytes $efeb + .lobytes $efec + .lobytes $efed + .lobytes $efee + .lobytes $efef + .lobytes $eff0 + .lobytes $eff1 + .lobytes $eff2 + .lobytes $eff3 + .lobytes $eff4 + .lobytes $eff5 + .lobytes $eff6 + .lobytes $eff7 + .lobytes $eff8 + .lobytes $eff9 + .lobytes $effa + .lobytes $effb + .lobytes $effc + .lobytes $effd + .lobytes $effe + .lobytes $efff + .lobytes $f000 + .lobytes $f001 + .lobytes $f002 + .lobytes $f003 + .lobytes $f004 + .lobytes $f005 + .lobytes $f006 + .lobytes $f007 + .lobytes $f008 + .lobytes $f009 + .lobytes $f00a + .lobytes $f00b + .lobytes $f00c + .lobytes $f00d + .lobytes $f00e + .lobytes $f00f + .lobytes $ffe1 + .lobytes $ffe2 + .lobytes $ffe3 + .lobytes $ffe4 + .lobytes $ffe5 + .lobytes $ffe6 + .lobytes $ffe7 + .lobytes $ffe8 + .lobytes $ffe9 + .lobytes $ffea + .lobytes $ffeb + .lobytes $ffec + .lobytes $ffed + .lobytes $ffee + .lobytes $ffef + .lobytes $fff0 + .lobytes $fff1 + .lobytes $fff2 + .lobytes $fff3 + .lobytes $fff4 + .lobytes $fff5 + .lobytes $fff6 + .lobytes $fff7 + .lobytes $fff8 + .lobytes $fff9 + .lobytes $fffa + .lobytes $fffb + .lobytes $fffc + .lobytes $fffd + .lobytes $fffe + .lobytes $ffff + + ; hex values, uppercase + .lobytes $0 + .lobytes $1 + .lobytes $2 + .lobytes $3 + .lobytes $4 + .lobytes $5 + .lobytes $6 + .lobytes $7 + .lobytes $8 + .lobytes $9 + .lobytes $A + .lobytes $B + .lobytes $C + .lobytes $D + .lobytes $E + .lobytes $F + .lobytes $10 + .lobytes $11 + .lobytes $12 + .lobytes $13 + .lobytes $70 + .lobytes $71 + .lobytes $72 + .lobytes $73 + .lobytes $74 + .lobytes $75 + .lobytes $76 + .lobytes $77 + .lobytes $78 + .lobytes $79 + .lobytes $7A + .lobytes $7B + .lobytes $7C + .lobytes $7D + .lobytes $7E + .lobytes $7F + .lobytes $80 + .lobytes $81 + .lobytes $82 + .lobytes $83 + .lobytes $84 + .lobytes $85 + .lobytes $86 + .lobytes $F0 + .lobytes $F1 + .lobytes $F2 + .lobytes $F3 + .lobytes $F4 + .lobytes $F5 + .lobytes $F6 + .lobytes $F7 + .lobytes $F8 + .lobytes $F9 + .lobytes $FA + .lobytes $FB + .lobytes $FC + .lobytes $FD + .lobytes $FE + .lobytes $FF + .lobytes $100 + .lobytes $101 + .lobytes $102 + .lobytes $103 + .lobytes $FD2 + .lobytes $FD3 + .lobytes $FD4 + .lobytes $FD5 + .lobytes $FD6 + .lobytes $FD7 + .lobytes $FD8 + .lobytes $FD9 + .lobytes $FDA + .lobytes $FDB + .lobytes $FDC + .lobytes $FDD + .lobytes $FDE + .lobytes $FDF + .lobytes $FE0 + .lobytes $FE1 + .lobytes $FE2 + .lobytes $FE3 + .lobytes $FE4 + .lobytes $FE5 + .lobytes $FE6 + .lobytes $FE7 + .lobytes $FE8 + .lobytes $FE9 + .lobytes $FEA + .lobytes $FEB + .lobytes $FEC + .lobytes $FED + .lobytes $FEE + .lobytes $FEF + .lobytes $FF0 + .lobytes $FF1 + .lobytes $FF2 + .lobytes $FF3 + .lobytes $FF4 + .lobytes $FF5 + .lobytes $FF6 + .lobytes $FF7 + .lobytes $FF8 + .lobytes $FF9 + .lobytes $FFA + .lobytes $FFB + .lobytes $FFC + .lobytes $FFD + .lobytes $FFE + .lobytes $FFF + .lobytes $1000 + .lobytes $1001 + .lobytes $1002 + .lobytes $1003 + .lobytes $1004 + .lobytes $1005 + .lobytes $1006 + .lobytes $1007 + .lobytes $1008 + .lobytes $7FF0 + .lobytes $7FF1 + .lobytes $7FF2 + .lobytes $7FF3 + .lobytes $7FF4 + .lobytes $7FF5 + .lobytes $7FF6 + .lobytes $7FF7 + .lobytes $7FF8 + .lobytes $7FF9 + .lobytes $7FFA + .lobytes $7FFB + .lobytes $7FFC + .lobytes $7FFD + .lobytes $7FFE + .lobytes $7FFF + .lobytes $8000 + .lobytes $8001 + .lobytes $8002 + .lobytes $8003 + .lobytes $8004 + .lobytes $8005 + .lobytes $8006 + .lobytes $8007 + .lobytes $8008 + .lobytes $8009 + .lobytes $800A + .lobytes $800B + .lobytes $9FE1 + .lobytes $9FE2 + .lobytes $9FE3 + .lobytes $9FE4 + .lobytes $9FE5 + .lobytes $9FE6 + .lobytes $9FE7 + .lobytes $9FE8 + .lobytes $9FE9 + .lobytes $9FEA + .lobytes $9FEB + .lobytes $9FEC + .lobytes $9FED + .lobytes $9FEE + .lobytes $9FEF + .lobytes $9FF0 + .lobytes $9FF1 + .lobytes $9FF2 + .lobytes $9FF3 + .lobytes $9FF4 + .lobytes $9FF5 + .lobytes $9FF6 + .lobytes $9FF7 + .lobytes $9FF8 + .lobytes $9FF9 + .lobytes $9FFA + .lobytes $9FFB + .lobytes $9FFC + .lobytes $9FFD + .lobytes $9FFE + .lobytes $9FFF + .lobytes $A000 + .lobytes $A001 + .lobytes $A002 + .lobytes $A003 + .lobytes $A004 + .lobytes $A005 + .lobytes $A006 + .lobytes $A007 + .lobytes $A008 + .lobytes $A009 + .lobytes $A00A + .lobytes $A00B + .lobytes $A00C + .lobytes $A00D + .lobytes $A00E + .lobytes $A00F + .lobytes $AFE1 + .lobytes $AFE2 + .lobytes $AFE3 + .lobytes $AFE4 + .lobytes $AFE5 + .lobytes $AFE6 + .lobytes $AFE7 + .lobytes $AFE8 + .lobytes $AFE9 + .lobytes $AFEA + .lobytes $AFEB + .lobytes $AFEC + .lobytes $AFED + .lobytes $AFEE + .lobytes $AFEF + .lobytes $AFF0 + .lobytes $AFF1 + .lobytes $AFF2 + .lobytes $AFF3 + .lobytes $AFF4 + .lobytes $AFF5 + .lobytes $AFF6 + .lobytes $AFF7 + .lobytes $AFF8 + .lobytes $AFF9 + .lobytes $AFFA + .lobytes $AFFB + .lobytes $AFFC + .lobytes $AFFD + .lobytes $AFFE + .lobytes $AFFF + .lobytes $B000 + .lobytes $B001 + .lobytes $B002 + .lobytes $B003 + .lobytes $B004 + .lobytes $B005 + .lobytes $B006 + .lobytes $B007 + .lobytes $B008 + .lobytes $B009 + .lobytes $B00A + .lobytes $B00B + .lobytes $B00C + .lobytes $B00D + .lobytes $B00E + .lobytes $B00F + .lobytes $BFE1 + .lobytes $BFE2 + .lobytes $BFE3 + .lobytes $BFE4 + .lobytes $BFE5 + .lobytes $BFE6 + .lobytes $BFE7 + .lobytes $BFE8 + .lobytes $BFE9 + .lobytes $BFEA + .lobytes $BFEB + .lobytes $BFEC + .lobytes $BFED + .lobytes $BFEE + .lobytes $BFEF + .lobytes $BFF0 + .lobytes $BFF1 + .lobytes $BFF2 + .lobytes $BFF3 + .lobytes $BFF4 + .lobytes $BFF5 + .lobytes $BFF6 + .lobytes $BFF7 + .lobytes $BFF8 + .lobytes $BFF9 + .lobytes $BFFA + .lobytes $BFFB + .lobytes $BFFC + .lobytes $BFFD + .lobytes $BFFE + .lobytes $BFFF + .lobytes $C000 + .lobytes $C001 + .lobytes $C002 + .lobytes $C003 + .lobytes $C004 + .lobytes $C005 + .lobytes $C006 + .lobytes $C007 + .lobytes $C008 + .lobytes $C009 + .lobytes $C00A + .lobytes $C00B + .lobytes $C00C + .lobytes $C00D + .lobytes $C00E + .lobytes $C00F + .lobytes $CFE1 + .lobytes $CFE2 + .lobytes $CFE3 + .lobytes $CFE4 + .lobytes $CFE5 + .lobytes $CFE6 + .lobytes $CFE7 + .lobytes $CFE8 + .lobytes $CFE9 + .lobytes $CFEA + .lobytes $CFEB + .lobytes $CFEC + .lobytes $CFED + .lobytes $CFEE + .lobytes $CFEF + .lobytes $CFF0 + .lobytes $CFF1 + .lobytes $CFF2 + .lobytes $CFF3 + .lobytes $CFF4 + .lobytes $CFF5 + .lobytes $CFF6 + .lobytes $CFF7 + .lobytes $CFF8 + .lobytes $CFF9 + .lobytes $CFFA + .lobytes $CFFB + .lobytes $CFFC + .lobytes $CFFD + .lobytes $CFFE + .lobytes $CFFF + .lobytes $D000 + .lobytes $D001 + .lobytes $D002 + .lobytes $D003 + .lobytes $D004 + .lobytes $D005 + .lobytes $D006 + .lobytes $D007 + .lobytes $D008 + .lobytes $D009 + .lobytes $D00A + .lobytes $D00B + .lobytes $D00C + .lobytes $D00D + .lobytes $D00E + .lobytes $D00F + .lobytes $DFE1 + .lobytes $DFE2 + .lobytes $DFE3 + .lobytes $DFE4 + .lobytes $DFE5 + .lobytes $DFE6 + .lobytes $DFE7 + .lobytes $DFE8 + .lobytes $DFE9 + .lobytes $DFEA + .lobytes $DFEB + .lobytes $DFEC + .lobytes $DFED + .lobytes $DFEE + .lobytes $DFEF + .lobytes $DFF0 + .lobytes $DFF1 + .lobytes $DFF2 + .lobytes $DFF3 + .lobytes $DFF4 + .lobytes $DFF5 + .lobytes $DFF6 + .lobytes $DFF7 + .lobytes $DFF8 + .lobytes $DFF9 + .lobytes $DFFA + .lobytes $DFFB + .lobytes $DFFC + .lobytes $DFFD + .lobytes $DFFE + .lobytes $DFFF + .lobytes $E000 + .lobytes $E001 + .lobytes $E002 + .lobytes $E003 + .lobytes $E004 + .lobytes $E005 + .lobytes $E006 + .lobytes $E007 + .lobytes $E008 + .lobytes $E009 + .lobytes $E00A + .lobytes $E00B + .lobytes $E00C + .lobytes $E00D + .lobytes $E00E + .lobytes $E00F + .lobytes $EFE1 + .lobytes $EFE2 + .lobytes $EFE3 + .lobytes $EFE4 + .lobytes $EFE5 + .lobytes $EFE6 + .lobytes $EFE7 + .lobytes $EFE8 + .lobytes $EFE9 + .lobytes $EFEA + .lobytes $EFEB + .lobytes $EFEC + .lobytes $EFED + .lobytes $EFEE + .lobytes $EFEF + .lobytes $EFF0 + .lobytes $EFF1 + .lobytes $EFF2 + .lobytes $EFF3 + .lobytes $EFF4 + .lobytes $EFF5 + .lobytes $EFF6 + .lobytes $EFF7 + .lobytes $EFF8 + .lobytes $EFF9 + .lobytes $EFFA + .lobytes $EFFB + .lobytes $EFFC + .lobytes $EFFD + .lobytes $EFFE + .lobytes $EFFF + .lobytes $F000 + .lobytes $F001 + .lobytes $F002 + .lobytes $F003 + .lobytes $F004 + .lobytes $F005 + .lobytes $F006 + .lobytes $F007 + .lobytes $F008 + .lobytes $F009 + .lobytes $F00A + .lobytes $F00B + .lobytes $F00C + .lobytes $F00D + .lobytes $F00E + .lobytes $F00F + .lobytes $FFE1 + .lobytes $FFE2 + .lobytes $FFE3 + .lobytes $FFE4 + .lobytes $FFE5 + .lobytes $FFE6 + .lobytes $FFE7 + .lobytes $FFE8 + .lobytes $FFE9 + .lobytes $FFEA + .lobytes $FFEB + .lobytes $FFEC + .lobytes $FFED + .lobytes $FFEE + .lobytes $FFEF + .lobytes $FFF0 + .lobytes $FFF1 + .lobytes $FFF2 + .lobytes $FFF3 + .lobytes $FFF4 + .lobytes $FFF5 + .lobytes $FFF6 + .lobytes $FFF7 + .lobytes $FFF8 + .lobytes $FFF9 + .lobytes $FFFA + .lobytes $FFFB + .lobytes $FFFC + .lobytes $FFFD + .lobytes $FFFE + .lobytes $FFFF + + ; 4-digit hex values + .lobytes $0000 + .lobytes $0001 + .lobytes $0002 + .lobytes $0003 + .lobytes $0004 + .lobytes $0005 + .lobytes $0006 + .lobytes $0007 + .lobytes $0008 + .lobytes $0009 + .lobytes $000a + .lobytes $000b + .lobytes $000c + .lobytes $000d + .lobytes $000e + .lobytes $000f + .lobytes $0010 + .lobytes $0011 + .lobytes $0012 + .lobytes $0013 + .lobytes $0070 + .lobytes $0071 + .lobytes $0072 + .lobytes $0073 + .lobytes $0074 + .lobytes $0075 + .lobytes $0076 + .lobytes $0077 + .lobytes $0078 + .lobytes $0079 + .lobytes $007a + .lobytes $007b + .lobytes $007c + .lobytes $007d + .lobytes $007e + .lobytes $007f + .lobytes $0080 + .lobytes $0081 + .lobytes $0082 + .lobytes $0083 + .lobytes $0084 + .lobytes $0085 + .lobytes $0086 + .lobytes $00f0 + .lobytes $00f1 + .lobytes $00f2 + .lobytes $00f3 + .lobytes $00f4 + .lobytes $00f5 + .lobytes $00f6 + .lobytes $00f7 + .lobytes $00f8 + .lobytes $00f9 + .lobytes $00fa + .lobytes $00fb + .lobytes $00fc + .lobytes $00fd + .lobytes $00fe + .lobytes $00ff + .lobytes $0100 + .lobytes $0101 + .lobytes $0102 + .lobytes $0103 + .lobytes $0fd2 + .lobytes $0fd3 + .lobytes $0fd4 + .lobytes $0fd5 + .lobytes $0fd6 + .lobytes $0fd7 + .lobytes $0fd8 + .lobytes $0fd9 + .lobytes $0fda + .lobytes $0fdb + .lobytes $0fdc + .lobytes $0fdd + .lobytes $0fde + .lobytes $0fdf + .lobytes $0fe0 + .lobytes $0fe1 + .lobytes $0fe2 + .lobytes $0fe3 + .lobytes $0fe4 + .lobytes $0fe5 + .lobytes $0fe6 + .lobytes $0fe7 + .lobytes $0fe8 + .lobytes $0fe9 + .lobytes $0fea + .lobytes $0feb + .lobytes $0fec + .lobytes $0fed + .lobytes $0fee + .lobytes $0fef + .lobytes $0ff0 + .lobytes $0ff1 + .lobytes $0ff2 + .lobytes $0ff3 + .lobytes $0ff4 + .lobytes $0ff5 + .lobytes $0ff6 + .lobytes $0ff7 + .lobytes $0ff8 + .lobytes $0ff9 + .lobytes $0ffa + .lobytes $0ffb + .lobytes $0ffc + .lobytes $0ffd + .lobytes $0ffe + .lobytes $0fff + .lobytes $1000 + .lobytes $1001 + .lobytes $1002 + .lobytes $1003 + .lobytes $1004 + .lobytes $1005 + .lobytes $1006 + .lobytes $1007 + .lobytes $1008 + .lobytes $7ff0 + .lobytes $7ff1 + .lobytes $7ff2 + .lobytes $7ff3 + .lobytes $7ff4 + .lobytes $7ff5 + .lobytes $7ff6 + .lobytes $7ff7 + .lobytes $7ff8 + .lobytes $7ff9 + .lobytes $7ffa + .lobytes $7ffb + .lobytes $7ffc + .lobytes $7ffd + .lobytes $7ffe + .lobytes $7fff + .lobytes $8000 + .lobytes $8001 + .lobytes $8002 + .lobytes $8003 + .lobytes $8004 + .lobytes $8005 + .lobytes $8006 + .lobytes $8007 + .lobytes $8008 + .lobytes $8009 + .lobytes $800a + .lobytes $800b + .lobytes $9fe1 + .lobytes $9fe2 + .lobytes $9fe3 + .lobytes $9fe4 + .lobytes $9fe5 + .lobytes $9fe6 + .lobytes $9fe7 + .lobytes $9fe8 + .lobytes $9fe9 + .lobytes $9fea + .lobytes $9feb + .lobytes $9fec + .lobytes $9fed + .lobytes $9fee + .lobytes $9fef + .lobytes $9ff0 + .lobytes $9ff1 + .lobytes $9ff2 + .lobytes $9ff3 + .lobytes $9ff4 + .lobytes $9ff5 + .lobytes $9ff6 + .lobytes $9ff7 + .lobytes $9ff8 + .lobytes $9ff9 + .lobytes $9ffa + .lobytes $9ffb + .lobytes $9ffc + .lobytes $9ffd + .lobytes $9ffe + .lobytes $9fff + .lobytes $a000 + .lobytes $a001 + .lobytes $a002 + .lobytes $a003 + .lobytes $a004 + .lobytes $a005 + .lobytes $a006 + .lobytes $a007 + .lobytes $a008 + .lobytes $a009 + .lobytes $a00a + .lobytes $a00b + .lobytes $a00c + .lobytes $a00d + .lobytes $a00e + .lobytes $a00f + .lobytes $afe1 + .lobytes $afe2 + .lobytes $afe3 + .lobytes $afe4 + .lobytes $afe5 + .lobytes $afe6 + .lobytes $afe7 + .lobytes $afe8 + .lobytes $afe9 + .lobytes $afea + .lobytes $afeb + .lobytes $afec + .lobytes $afed + .lobytes $afee + .lobytes $afef + .lobytes $aff0 + .lobytes $aff1 + .lobytes $aff2 + .lobytes $aff3 + .lobytes $aff4 + .lobytes $aff5 + .lobytes $aff6 + .lobytes $aff7 + .lobytes $aff8 + .lobytes $aff9 + .lobytes $affa + .lobytes $affb + .lobytes $affc + .lobytes $affd + .lobytes $affe + .lobytes $afff + .lobytes $b000 + .lobytes $b001 + .lobytes $b002 + .lobytes $b003 + .lobytes $b004 + .lobytes $b005 + .lobytes $b006 + .lobytes $b007 + .lobytes $b008 + .lobytes $b009 + .lobytes $b00a + .lobytes $b00b + .lobytes $b00c + .lobytes $b00d + .lobytes $b00e + .lobytes $b00f + .lobytes $bfe1 + .lobytes $bfe2 + .lobytes $bfe3 + .lobytes $bfe4 + .lobytes $bfe5 + .lobytes $bfe6 + .lobytes $bfe7 + .lobytes $bfe8 + .lobytes $bfe9 + .lobytes $bfea + .lobytes $bfeb + .lobytes $bfec + .lobytes $bfed + .lobytes $bfee + .lobytes $bfef + .lobytes $bff0 + .lobytes $bff1 + .lobytes $bff2 + .lobytes $bff3 + .lobytes $bff4 + .lobytes $bff5 + .lobytes $bff6 + .lobytes $bff7 + .lobytes $bff8 + .lobytes $bff9 + .lobytes $bffa + .lobytes $bffb + .lobytes $bffc + .lobytes $bffd + .lobytes $bffe + .lobytes $bfff + .lobytes $c000 + .lobytes $c001 + .lobytes $c002 + .lobytes $c003 + .lobytes $c004 + .lobytes $c005 + .lobytes $c006 + .lobytes $c007 + .lobytes $c008 + .lobytes $c009 + .lobytes $c00a + .lobytes $c00b + .lobytes $c00c + .lobytes $c00d + .lobytes $c00e + .lobytes $c00f + .lobytes $cfe1 + .lobytes $cfe2 + .lobytes $cfe3 + .lobytes $cfe4 + .lobytes $cfe5 + .lobytes $cfe6 + .lobytes $cfe7 + .lobytes $cfe8 + .lobytes $cfe9 + .lobytes $cfea + .lobytes $cfeb + .lobytes $cfec + .lobytes $cfed + .lobytes $cfee + .lobytes $cfef + .lobytes $cff0 + .lobytes $cff1 + .lobytes $cff2 + .lobytes $cff3 + .lobytes $cff4 + .lobytes $cff5 + .lobytes $cff6 + .lobytes $cff7 + .lobytes $cff8 + .lobytes $cff9 + .lobytes $cffa + .lobytes $cffb + .lobytes $cffc + .lobytes $cffd + .lobytes $cffe + .lobytes $cfff + .lobytes $d000 + .lobytes $d001 + .lobytes $d002 + .lobytes $d003 + .lobytes $d004 + .lobytes $d005 + .lobytes $d006 + .lobytes $d007 + .lobytes $d008 + .lobytes $d009 + .lobytes $d00a + .lobytes $d00b + .lobytes $d00c + .lobytes $d00d + .lobytes $d00e + .lobytes $d00f + .lobytes $dfe1 + .lobytes $dfe2 + .lobytes $dfe3 + .lobytes $dfe4 + .lobytes $dfe5 + .lobytes $dfe6 + .lobytes $dfe7 + .lobytes $dfe8 + .lobytes $dfe9 + .lobytes $dfea + .lobytes $dfeb + .lobytes $dfec + .lobytes $dfed + .lobytes $dfee + .lobytes $dfef + .lobytes $dff0 + .lobytes $dff1 + .lobytes $dff2 + .lobytes $dff3 + .lobytes $dff4 + .lobytes $dff5 + .lobytes $dff6 + .lobytes $dff7 + .lobytes $dff8 + .lobytes $dff9 + .lobytes $dffa + .lobytes $dffb + .lobytes $dffc + .lobytes $dffd + .lobytes $dffe + .lobytes $dfff + .lobytes $e000 + .lobytes $e001 + .lobytes $e002 + .lobytes $e003 + .lobytes $e004 + .lobytes $e005 + .lobytes $e006 + .lobytes $e007 + .lobytes $e008 + .lobytes $e009 + .lobytes $e00a + .lobytes $e00b + .lobytes $e00c + .lobytes $e00d + .lobytes $e00e + .lobytes $e00f + .lobytes $efe1 + .lobytes $efe2 + .lobytes $efe3 + .lobytes $efe4 + .lobytes $efe5 + .lobytes $efe6 + .lobytes $efe7 + .lobytes $efe8 + .lobytes $efe9 + .lobytes $efea + .lobytes $efeb + .lobytes $efec + .lobytes $efed + .lobytes $efee + .lobytes $efef + .lobytes $eff0 + .lobytes $eff1 + .lobytes $eff2 + .lobytes $eff3 + .lobytes $eff4 + .lobytes $eff5 + .lobytes $eff6 + .lobytes $eff7 + .lobytes $eff8 + .lobytes $eff9 + .lobytes $effa + .lobytes $effb + .lobytes $effc + .lobytes $effd + .lobytes $effe + .lobytes $efff + .lobytes $f000 + .lobytes $f001 + .lobytes $f002 + .lobytes $f003 + .lobytes $f004 + .lobytes $f005 + .lobytes $f006 + .lobytes $f007 + .lobytes $f008 + .lobytes $f009 + .lobytes $f00a + .lobytes $f00b + .lobytes $f00c + .lobytes $f00d + .lobytes $f00e + .lobytes $f00f + .lobytes $ffe1 + .lobytes $ffe2 + .lobytes $ffe3 + .lobytes $ffe4 + .lobytes $ffe5 + .lobytes $ffe6 + .lobytes $ffe7 + .lobytes $ffe8 + .lobytes $ffe9 + .lobytes $ffea + .lobytes $ffeb + .lobytes $ffec + .lobytes $ffed + .lobytes $ffee + .lobytes $ffef + .lobytes $fff0 + .lobytes $fff1 + .lobytes $fff2 + .lobytes $fff3 + .lobytes $fff4 + .lobytes $fff5 + .lobytes $fff6 + .lobytes $fff7 + .lobytes $fff8 + .lobytes $fff9 + .lobytes $fffa + .lobytes $fffb + .lobytes $fffc + .lobytes $fffd + .lobytes $fffe + .lobytes $ffff + + ; 4-digit hex values, uppercase + .lobytes $0000 + .lobytes $0001 + .lobytes $0002 + .lobytes $0003 + .lobytes $0004 + .lobytes $0005 + .lobytes $0006 + .lobytes $0007 + .lobytes $0008 + .lobytes $0009 + .lobytes $000A + .lobytes $000B + .lobytes $000C + .lobytes $000D + .lobytes $000E + .lobytes $000F + .lobytes $0010 + .lobytes $0011 + .lobytes $0012 + .lobytes $0013 + .lobytes $0070 + .lobytes $0071 + .lobytes $0072 + .lobytes $0073 + .lobytes $0074 + .lobytes $0075 + .lobytes $0076 + .lobytes $0077 + .lobytes $0078 + .lobytes $0079 + .lobytes $007A + .lobytes $007B + .lobytes $007C + .lobytes $007D + .lobytes $007E + .lobytes $007F + .lobytes $0080 + .lobytes $0081 + .lobytes $0082 + .lobytes $0083 + .lobytes $0084 + .lobytes $0085 + .lobytes $0086 + .lobytes $00F0 + .lobytes $00F1 + .lobytes $00F2 + .lobytes $00F3 + .lobytes $00F4 + .lobytes $00F5 + .lobytes $00F6 + .lobytes $00F7 + .lobytes $00F8 + .lobytes $00F9 + .lobytes $00FA + .lobytes $00FB + .lobytes $00FC + .lobytes $00FD + .lobytes $00FE + .lobytes $00FF + .lobytes $0100 + .lobytes $0101 + .lobytes $0102 + .lobytes $0103 + .lobytes $0FD2 + .lobytes $0FD3 + .lobytes $0FD4 + .lobytes $0FD5 + .lobytes $0FD6 + .lobytes $0FD7 + .lobytes $0FD8 + .lobytes $0FD9 + .lobytes $0FDA + .lobytes $0FDB + .lobytes $0FDC + .lobytes $0FDD + .lobytes $0FDE + .lobytes $0FDF + .lobytes $0FE0 + .lobytes $0FE1 + .lobytes $0FE2 + .lobytes $0FE3 + .lobytes $0FE4 + .lobytes $0FE5 + .lobytes $0FE6 + .lobytes $0FE7 + .lobytes $0FE8 + .lobytes $0FE9 + .lobytes $0FEA + .lobytes $0FEB + .lobytes $0FEC + .lobytes $0FED + .lobytes $0FEE + .lobytes $0FEF + .lobytes $0FF0 + .lobytes $0FF1 + .lobytes $0FF2 + .lobytes $0FF3 + .lobytes $0FF4 + .lobytes $0FF5 + .lobytes $0FF6 + .lobytes $0FF7 + .lobytes $0FF8 + .lobytes $0FF9 + .lobytes $0FFA + .lobytes $0FFB + .lobytes $0FFC + .lobytes $0FFD + .lobytes $0FFE + .lobytes $0FFF + .lobytes $1000 + .lobytes $1001 + .lobytes $1002 + .lobytes $1003 + .lobytes $1004 + .lobytes $1005 + .lobytes $1006 + .lobytes $1007 + .lobytes $1008 + .lobytes $7FF0 + .lobytes $7FF1 + .lobytes $7FF2 + .lobytes $7FF3 + .lobytes $7FF4 + .lobytes $7FF5 + .lobytes $7FF6 + .lobytes $7FF7 + .lobytes $7FF8 + .lobytes $7FF9 + .lobytes $7FFA + .lobytes $7FFB + .lobytes $7FFC + .lobytes $7FFD + .lobytes $7FFE + .lobytes $7FFF + .lobytes $8000 + .lobytes $8001 + .lobytes $8002 + .lobytes $8003 + .lobytes $8004 + .lobytes $8005 + .lobytes $8006 + .lobytes $8007 + .lobytes $8008 + .lobytes $8009 + .lobytes $800A + .lobytes $800B + .lobytes $9FE1 + .lobytes $9FE2 + .lobytes $9FE3 + .lobytes $9FE4 + .lobytes $9FE5 + .lobytes $9FE6 + .lobytes $9FE7 + .lobytes $9FE8 + .lobytes $9FE9 + .lobytes $9FEA + .lobytes $9FEB + .lobytes $9FEC + .lobytes $9FED + .lobytes $9FEE + .lobytes $9FEF + .lobytes $9FF0 + .lobytes $9FF1 + .lobytes $9FF2 + .lobytes $9FF3 + .lobytes $9FF4 + .lobytes $9FF5 + .lobytes $9FF6 + .lobytes $9FF7 + .lobytes $9FF8 + .lobytes $9FF9 + .lobytes $9FFA + .lobytes $9FFB + .lobytes $9FFC + .lobytes $9FFD + .lobytes $9FFE + .lobytes $9FFF + .lobytes $A000 + .lobytes $A001 + .lobytes $A002 + .lobytes $A003 + .lobytes $A004 + .lobytes $A005 + .lobytes $A006 + .lobytes $A007 + .lobytes $A008 + .lobytes $A009 + .lobytes $A00A + .lobytes $A00B + .lobytes $A00C + .lobytes $A00D + .lobytes $A00E + .lobytes $A00F + .lobytes $AFE1 + .lobytes $AFE2 + .lobytes $AFE3 + .lobytes $AFE4 + .lobytes $AFE5 + .lobytes $AFE6 + .lobytes $AFE7 + .lobytes $AFE8 + .lobytes $AFE9 + .lobytes $AFEA + .lobytes $AFEB + .lobytes $AFEC + .lobytes $AFED + .lobytes $AFEE + .lobytes $AFEF + .lobytes $AFF0 + .lobytes $AFF1 + .lobytes $AFF2 + .lobytes $AFF3 + .lobytes $AFF4 + .lobytes $AFF5 + .lobytes $AFF6 + .lobytes $AFF7 + .lobytes $AFF8 + .lobytes $AFF9 + .lobytes $AFFA + .lobytes $AFFB + .lobytes $AFFC + .lobytes $AFFD + .lobytes $AFFE + .lobytes $AFFF + .lobytes $B000 + .lobytes $B001 + .lobytes $B002 + .lobytes $B003 + .lobytes $B004 + .lobytes $B005 + .lobytes $B006 + .lobytes $B007 + .lobytes $B008 + .lobytes $B009 + .lobytes $B00A + .lobytes $B00B + .lobytes $B00C + .lobytes $B00D + .lobytes $B00E + .lobytes $B00F + .lobytes $BFE1 + .lobytes $BFE2 + .lobytes $BFE3 + .lobytes $BFE4 + .lobytes $BFE5 + .lobytes $BFE6 + .lobytes $BFE7 + .lobytes $BFE8 + .lobytes $BFE9 + .lobytes $BFEA + .lobytes $BFEB + .lobytes $BFEC + .lobytes $BFED + .lobytes $BFEE + .lobytes $BFEF + .lobytes $BFF0 + .lobytes $BFF1 + .lobytes $BFF2 + .lobytes $BFF3 + .lobytes $BFF4 + .lobytes $BFF5 + .lobytes $BFF6 + .lobytes $BFF7 + .lobytes $BFF8 + .lobytes $BFF9 + .lobytes $BFFA + .lobytes $BFFB + .lobytes $BFFC + .lobytes $BFFD + .lobytes $BFFE + .lobytes $BFFF + .lobytes $C000 + .lobytes $C001 + .lobytes $C002 + .lobytes $C003 + .lobytes $C004 + .lobytes $C005 + .lobytes $C006 + .lobytes $C007 + .lobytes $C008 + .lobytes $C009 + .lobytes $C00A + .lobytes $C00B + .lobytes $C00C + .lobytes $C00D + .lobytes $C00E + .lobytes $C00F + .lobytes $CFE1 + .lobytes $CFE2 + .lobytes $CFE3 + .lobytes $CFE4 + .lobytes $CFE5 + .lobytes $CFE6 + .lobytes $CFE7 + .lobytes $CFE8 + .lobytes $CFE9 + .lobytes $CFEA + .lobytes $CFEB + .lobytes $CFEC + .lobytes $CFED + .lobytes $CFEE + .lobytes $CFEF + .lobytes $CFF0 + .lobytes $CFF1 + .lobytes $CFF2 + .lobytes $CFF3 + .lobytes $CFF4 + .lobytes $CFF5 + .lobytes $CFF6 + .lobytes $CFF7 + .lobytes $CFF8 + .lobytes $CFF9 + .lobytes $CFFA + .lobytes $CFFB + .lobytes $CFFC + .lobytes $CFFD + .lobytes $CFFE + .lobytes $CFFF + .lobytes $D000 + .lobytes $D001 + .lobytes $D002 + .lobytes $D003 + .lobytes $D004 + .lobytes $D005 + .lobytes $D006 + .lobytes $D007 + .lobytes $D008 + .lobytes $D009 + .lobytes $D00A + .lobytes $D00B + .lobytes $D00C + .lobytes $D00D + .lobytes $D00E + .lobytes $D00F + .lobytes $DFE1 + .lobytes $DFE2 + .lobytes $DFE3 + .lobytes $DFE4 + .lobytes $DFE5 + .lobytes $DFE6 + .lobytes $DFE7 + .lobytes $DFE8 + .lobytes $DFE9 + .lobytes $DFEA + .lobytes $DFEB + .lobytes $DFEC + .lobytes $DFED + .lobytes $DFEE + .lobytes $DFEF + .lobytes $DFF0 + .lobytes $DFF1 + .lobytes $DFF2 + .lobytes $DFF3 + .lobytes $DFF4 + .lobytes $DFF5 + .lobytes $DFF6 + .lobytes $DFF7 + .lobytes $DFF8 + .lobytes $DFF9 + .lobytes $DFFA + .lobytes $DFFB + .lobytes $DFFC + .lobytes $DFFD + .lobytes $DFFE + .lobytes $DFFF + .lobytes $E000 + .lobytes $E001 + .lobytes $E002 + .lobytes $E003 + .lobytes $E004 + .lobytes $E005 + .lobytes $E006 + .lobytes $E007 + .lobytes $E008 + .lobytes $E009 + .lobytes $E00A + .lobytes $E00B + .lobytes $E00C + .lobytes $E00D + .lobytes $E00E + .lobytes $E00F + .lobytes $EFE1 + .lobytes $EFE2 + .lobytes $EFE3 + .lobytes $EFE4 + .lobytes $EFE5 + .lobytes $EFE6 + .lobytes $EFE7 + .lobytes $EFE8 + .lobytes $EFE9 + .lobytes $EFEA + .lobytes $EFEB + .lobytes $EFEC + .lobytes $EFED + .lobytes $EFEE + .lobytes $EFEF + .lobytes $EFF0 + .lobytes $EFF1 + .lobytes $EFF2 + .lobytes $EFF3 + .lobytes $EFF4 + .lobytes $EFF5 + .lobytes $EFF6 + .lobytes $EFF7 + .lobytes $EFF8 + .lobytes $EFF9 + .lobytes $EFFA + .lobytes $EFFB + .lobytes $EFFC + .lobytes $EFFD + .lobytes $EFFE + .lobytes $EFFF + .lobytes $F000 + .lobytes $F001 + .lobytes $F002 + .lobytes $F003 + .lobytes $F004 + .lobytes $F005 + .lobytes $F006 + .lobytes $F007 + .lobytes $F008 + .lobytes $F009 + .lobytes $F00A + .lobytes $F00B + .lobytes $F00C + .lobytes $F00D + .lobytes $F00E + .lobytes $F00F + .lobytes $FFE1 + .lobytes $FFE2 + .lobytes $FFE3 + .lobytes $FFE4 + .lobytes $FFE5 + .lobytes $FFE6 + .lobytes $FFE7 + .lobytes $FFE8 + .lobytes $FFE9 + .lobytes $FFEA + .lobytes $FFEB + .lobytes $FFEC + .lobytes $FFED + .lobytes $FFEE + .lobytes $FFEF + .lobytes $FFF0 + .lobytes $FFF1 + .lobytes $FFF2 + .lobytes $FFF3 + .lobytes $FFF4 + .lobytes $FFF5 + .lobytes $FFF6 + .lobytes $FFF7 + .lobytes $FFF8 + .lobytes $FFF9 + .lobytes $FFFA + .lobytes $FFFB + .lobytes $FFFC + .lobytes $FFFD + .lobytes $FFFE + .lobytes $FFFF + + ; alternative hex values + .lobytes 0h + .lobytes 1h + .lobytes 2h + .lobytes 3h + .lobytes 4h + .lobytes 5h + .lobytes 6h + .lobytes 7h + .lobytes 8h + .lobytes 9h + .lobytes 0ah + .lobytes 0bh + .lobytes 0ch + .lobytes 0dh + .lobytes 0eh + .lobytes 0fh + .lobytes 10h + .lobytes 11h + .lobytes 12h + .lobytes 13h + .lobytes 70h + .lobytes 71h + .lobytes 72h + .lobytes 73h + .lobytes 74h + .lobytes 75h + .lobytes 76h + .lobytes 77h + .lobytes 78h + .lobytes 79h + .lobytes 7ah + .lobytes 7bh + .lobytes 7ch + .lobytes 7dh + .lobytes 7eh + .lobytes 7fh + .lobytes 80h + .lobytes 81h + .lobytes 82h + .lobytes 83h + .lobytes 84h + .lobytes 85h + .lobytes 86h + .lobytes 0f0h + .lobytes 0f1h + .lobytes 0f2h + .lobytes 0f3h + .lobytes 0f4h + .lobytes 0f5h + .lobytes 0f6h + .lobytes 0f7h + .lobytes 0f8h + .lobytes 0f9h + .lobytes 0fah + .lobytes 0fbh + .lobytes 0fch + .lobytes 0fdh + .lobytes 0feh + .lobytes 0ffh + .lobytes 100h + .lobytes 101h + .lobytes 102h + .lobytes 103h + .lobytes 0fd2h + .lobytes 0fd3h + .lobytes 0fd4h + .lobytes 0fd5h + .lobytes 0fd6h + .lobytes 0fd7h + .lobytes 0fd8h + .lobytes 0fd9h + .lobytes 0fdah + .lobytes 0fdbh + .lobytes 0fdch + .lobytes 0fddh + .lobytes 0fdeh + .lobytes 0fdfh + .lobytes 0fe0h + .lobytes 0fe1h + .lobytes 0fe2h + .lobytes 0fe3h + .lobytes 0fe4h + .lobytes 0fe5h + .lobytes 0fe6h + .lobytes 0fe7h + .lobytes 0fe8h + .lobytes 0fe9h + .lobytes 0feah + .lobytes 0febh + .lobytes 0fech + .lobytes 0fedh + .lobytes 0feeh + .lobytes 0fefh + .lobytes 0ff0h + .lobytes 0ff1h + .lobytes 0ff2h + .lobytes 0ff3h + .lobytes 0ff4h + .lobytes 0ff5h + .lobytes 0ff6h + .lobytes 0ff7h + .lobytes 0ff8h + .lobytes 0ff9h + .lobytes 0ffah + .lobytes 0ffbh + .lobytes 0ffch + .lobytes 0ffdh + .lobytes 0ffeh + .lobytes 0fffh + .lobytes 1000h + .lobytes 1001h + .lobytes 1002h + .lobytes 1003h + .lobytes 1004h + .lobytes 1005h + .lobytes 1006h + .lobytes 1007h + .lobytes 1008h + .lobytes 7ff0h + .lobytes 7ff1h + .lobytes 7ff2h + .lobytes 7ff3h + .lobytes 7ff4h + .lobytes 7ff5h + .lobytes 7ff6h + .lobytes 7ff7h + .lobytes 7ff8h + .lobytes 7ff9h + .lobytes 7ffah + .lobytes 7ffbh + .lobytes 7ffch + .lobytes 7ffdh + .lobytes 7ffeh + .lobytes 7fffh + .lobytes 8000h + .lobytes 8001h + .lobytes 8002h + .lobytes 8003h + .lobytes 8004h + .lobytes 8005h + .lobytes 8006h + .lobytes 8007h + .lobytes 8008h + .lobytes 8009h + .lobytes 800ah + .lobytes 800bh + .lobytes 9fe1h + .lobytes 9fe2h + .lobytes 9fe3h + .lobytes 9fe4h + .lobytes 9fe5h + .lobytes 9fe6h + .lobytes 9fe7h + .lobytes 9fe8h + .lobytes 9fe9h + .lobytes 9feah + .lobytes 9febh + .lobytes 9fech + .lobytes 9fedh + .lobytes 9feeh + .lobytes 9fefh + .lobytes 9ff0h + .lobytes 9ff1h + .lobytes 9ff2h + .lobytes 9ff3h + .lobytes 9ff4h + .lobytes 9ff5h + .lobytes 9ff6h + .lobytes 9ff7h + .lobytes 9ff8h + .lobytes 9ff9h + .lobytes 9ffah + .lobytes 9ffbh + .lobytes 9ffch + .lobytes 9ffdh + .lobytes 9ffeh + .lobytes 9fffh + .lobytes 0a000h + .lobytes 0a001h + .lobytes 0a002h + .lobytes 0a003h + .lobytes 0a004h + .lobytes 0a005h + .lobytes 0a006h + .lobytes 0a007h + .lobytes 0a008h + .lobytes 0a009h + .lobytes 0a00ah + .lobytes 0a00bh + .lobytes 0a00ch + .lobytes 0a00dh + .lobytes 0a00eh + .lobytes 0a00fh + .lobytes 0afe1h + .lobytes 0afe2h + .lobytes 0afe3h + .lobytes 0afe4h + .lobytes 0afe5h + .lobytes 0afe6h + .lobytes 0afe7h + .lobytes 0afe8h + .lobytes 0afe9h + .lobytes 0afeah + .lobytes 0afebh + .lobytes 0afech + .lobytes 0afedh + .lobytes 0afeeh + .lobytes 0afefh + .lobytes 0aff0h + .lobytes 0aff1h + .lobytes 0aff2h + .lobytes 0aff3h + .lobytes 0aff4h + .lobytes 0aff5h + .lobytes 0aff6h + .lobytes 0aff7h + .lobytes 0aff8h + .lobytes 0aff9h + .lobytes 0affah + .lobytes 0affbh + .lobytes 0affch + .lobytes 0affdh + .lobytes 0affeh + .lobytes 0afffh + .lobytes 0b000h + .lobytes 0b001h + .lobytes 0b002h + .lobytes 0b003h + .lobytes 0b004h + .lobytes 0b005h + .lobytes 0b006h + .lobytes 0b007h + .lobytes 0b008h + .lobytes 0b009h + .lobytes 0b00ah + .lobytes 0b00bh + .lobytes 0b00ch + .lobytes 0b00dh + .lobytes 0b00eh + .lobytes 0b00fh + .lobytes 0bfe1h + .lobytes 0bfe2h + .lobytes 0bfe3h + .lobytes 0bfe4h + .lobytes 0bfe5h + .lobytes 0bfe6h + .lobytes 0bfe7h + .lobytes 0bfe8h + .lobytes 0bfe9h + .lobytes 0bfeah + .lobytes 0bfebh + .lobytes 0bfech + .lobytes 0bfedh + .lobytes 0bfeeh + .lobytes 0bfefh + .lobytes 0bff0h + .lobytes 0bff1h + .lobytes 0bff2h + .lobytes 0bff3h + .lobytes 0bff4h + .lobytes 0bff5h + .lobytes 0bff6h + .lobytes 0bff7h + .lobytes 0bff8h + .lobytes 0bff9h + .lobytes 0bffah + .lobytes 0bffbh + .lobytes 0bffch + .lobytes 0bffdh + .lobytes 0bffeh + .lobytes 0bfffh + .lobytes 0c000h + .lobytes 0c001h + .lobytes 0c002h + .lobytes 0c003h + .lobytes 0c004h + .lobytes 0c005h + .lobytes 0c006h + .lobytes 0c007h + .lobytes 0c008h + .lobytes 0c009h + .lobytes 0c00ah + .lobytes 0c00bh + .lobytes 0c00ch + .lobytes 0c00dh + .lobytes 0c00eh + .lobytes 0c00fh + .lobytes 0cfe1h + .lobytes 0cfe2h + .lobytes 0cfe3h + .lobytes 0cfe4h + .lobytes 0cfe5h + .lobytes 0cfe6h + .lobytes 0cfe7h + .lobytes 0cfe8h + .lobytes 0cfe9h + .lobytes 0cfeah + .lobytes 0cfebh + .lobytes 0cfech + .lobytes 0cfedh + .lobytes 0cfeeh + .lobytes 0cfefh + .lobytes 0cff0h + .lobytes 0cff1h + .lobytes 0cff2h + .lobytes 0cff3h + .lobytes 0cff4h + .lobytes 0cff5h + .lobytes 0cff6h + .lobytes 0cff7h + .lobytes 0cff8h + .lobytes 0cff9h + .lobytes 0cffah + .lobytes 0cffbh + .lobytes 0cffch + .lobytes 0cffdh + .lobytes 0cffeh + .lobytes 0cfffh + .lobytes 0d000h + .lobytes 0d001h + .lobytes 0d002h + .lobytes 0d003h + .lobytes 0d004h + .lobytes 0d005h + .lobytes 0d006h + .lobytes 0d007h + .lobytes 0d008h + .lobytes 0d009h + .lobytes 0d00ah + .lobytes 0d00bh + .lobytes 0d00ch + .lobytes 0d00dh + .lobytes 0d00eh + .lobytes 0d00fh + .lobytes 0dfe1h + .lobytes 0dfe2h + .lobytes 0dfe3h + .lobytes 0dfe4h + .lobytes 0dfe5h + .lobytes 0dfe6h + .lobytes 0dfe7h + .lobytes 0dfe8h + .lobytes 0dfe9h + .lobytes 0dfeah + .lobytes 0dfebh + .lobytes 0dfech + .lobytes 0dfedh + .lobytes 0dfeeh + .lobytes 0dfefh + .lobytes 0dff0h + .lobytes 0dff1h + .lobytes 0dff2h + .lobytes 0dff3h + .lobytes 0dff4h + .lobytes 0dff5h + .lobytes 0dff6h + .lobytes 0dff7h + .lobytes 0dff8h + .lobytes 0dff9h + .lobytes 0dffah + .lobytes 0dffbh + .lobytes 0dffch + .lobytes 0dffdh + .lobytes 0dffeh + .lobytes 0dfffh + .lobytes 0e000h + .lobytes 0e001h + .lobytes 0e002h + .lobytes 0e003h + .lobytes 0e004h + .lobytes 0e005h + .lobytes 0e006h + .lobytes 0e007h + .lobytes 0e008h + .lobytes 0e009h + .lobytes 0e00ah + .lobytes 0e00bh + .lobytes 0e00ch + .lobytes 0e00dh + .lobytes 0e00eh + .lobytes 0e00fh + .lobytes 0efe1h + .lobytes 0efe2h + .lobytes 0efe3h + .lobytes 0efe4h + .lobytes 0efe5h + .lobytes 0efe6h + .lobytes 0efe7h + .lobytes 0efe8h + .lobytes 0efe9h + .lobytes 0efeah + .lobytes 0efebh + .lobytes 0efech + .lobytes 0efedh + .lobytes 0efeeh + .lobytes 0efefh + .lobytes 0eff0h + .lobytes 0eff1h + .lobytes 0eff2h + .lobytes 0eff3h + .lobytes 0eff4h + .lobytes 0eff5h + .lobytes 0eff6h + .lobytes 0eff7h + .lobytes 0eff8h + .lobytes 0eff9h + .lobytes 0effah + .lobytes 0effbh + .lobytes 0effch + .lobytes 0effdh + .lobytes 0effeh + .lobytes 0efffh + .lobytes 0f000h + .lobytes 0f001h + .lobytes 0f002h + .lobytes 0f003h + .lobytes 0f004h + .lobytes 0f005h + .lobytes 0f006h + .lobytes 0f007h + .lobytes 0f008h + .lobytes 0f009h + .lobytes 0f00ah + .lobytes 0f00bh + .lobytes 0f00ch + .lobytes 0f00dh + .lobytes 0f00eh + .lobytes 0f00fh + .lobytes 0ffe1h + .lobytes 0ffe2h + .lobytes 0ffe3h + .lobytes 0ffe4h + .lobytes 0ffe5h + .lobytes 0ffe6h + .lobytes 0ffe7h + .lobytes 0ffe8h + .lobytes 0ffe9h + .lobytes 0ffeah + .lobytes 0ffebh + .lobytes 0ffech + .lobytes 0ffedh + .lobytes 0ffeeh + .lobytes 0ffefh + .lobytes 0fff0h + .lobytes 0fff1h + .lobytes 0fff2h + .lobytes 0fff3h + .lobytes 0fff4h + .lobytes 0fff5h + .lobytes 0fff6h + .lobytes 0fff7h + .lobytes 0fff8h + .lobytes 0fff9h + .lobytes 0fffah + .lobytes 0fffbh + .lobytes 0fffch + .lobytes 0fffdh + .lobytes 0fffeh + .lobytes 0ffffh + + ; alternative hex values, uppercase + .lobytes 0h + .lobytes 1h + .lobytes 2h + .lobytes 3h + .lobytes 4h + .lobytes 5h + .lobytes 6h + .lobytes 7h + .lobytes 8h + .lobytes 9h + .lobytes 0Ah + .lobytes 0Bh + .lobytes 0Ch + .lobytes 0Dh + .lobytes 0Eh + .lobytes 0Fh + .lobytes 10h + .lobytes 11h + .lobytes 12h + .lobytes 13h + .lobytes 70h + .lobytes 71h + .lobytes 72h + .lobytes 73h + .lobytes 74h + .lobytes 75h + .lobytes 76h + .lobytes 77h + .lobytes 78h + .lobytes 79h + .lobytes 7Ah + .lobytes 7Bh + .lobytes 7Ch + .lobytes 7Dh + .lobytes 7Eh + .lobytes 7Fh + .lobytes 80h + .lobytes 81h + .lobytes 82h + .lobytes 83h + .lobytes 84h + .lobytes 85h + .lobytes 86h + .lobytes 0F0h + .lobytes 0F1h + .lobytes 0F2h + .lobytes 0F3h + .lobytes 0F4h + .lobytes 0F5h + .lobytes 0F6h + .lobytes 0F7h + .lobytes 0F8h + .lobytes 0F9h + .lobytes 0FAh + .lobytes 0FBh + .lobytes 0FCh + .lobytes 0FDh + .lobytes 0FEh + .lobytes 0FFh + .lobytes 100h + .lobytes 101h + .lobytes 102h + .lobytes 103h + .lobytes 0FD2h + .lobytes 0FD3h + .lobytes 0FD4h + .lobytes 0FD5h + .lobytes 0FD6h + .lobytes 0FD7h + .lobytes 0FD8h + .lobytes 0FD9h + .lobytes 0FDAh + .lobytes 0FDBh + .lobytes 0FDCh + .lobytes 0FDDh + .lobytes 0FDEh + .lobytes 0FDFh + .lobytes 0FE0h + .lobytes 0FE1h + .lobytes 0FE2h + .lobytes 0FE3h + .lobytes 0FE4h + .lobytes 0FE5h + .lobytes 0FE6h + .lobytes 0FE7h + .lobytes 0FE8h + .lobytes 0FE9h + .lobytes 0FEAh + .lobytes 0FEBh + .lobytes 0FECh + .lobytes 0FEDh + .lobytes 0FEEh + .lobytes 0FEFh + .lobytes 0FF0h + .lobytes 0FF1h + .lobytes 0FF2h + .lobytes 0FF3h + .lobytes 0FF4h + .lobytes 0FF5h + .lobytes 0FF6h + .lobytes 0FF7h + .lobytes 0FF8h + .lobytes 0FF9h + .lobytes 0FFAh + .lobytes 0FFBh + .lobytes 0FFCh + .lobytes 0FFDh + .lobytes 0FFEh + .lobytes 0FFFh + .lobytes 1000h + .lobytes 1001h + .lobytes 1002h + .lobytes 1003h + .lobytes 1004h + .lobytes 1005h + .lobytes 1006h + .lobytes 1007h + .lobytes 1008h + .lobytes 7FF0h + .lobytes 7FF1h + .lobytes 7FF2h + .lobytes 7FF3h + .lobytes 7FF4h + .lobytes 7FF5h + .lobytes 7FF6h + .lobytes 7FF7h + .lobytes 7FF8h + .lobytes 7FF9h + .lobytes 7FFAh + .lobytes 7FFBh + .lobytes 7FFCh + .lobytes 7FFDh + .lobytes 7FFEh + .lobytes 7FFFh + .lobytes 8000h + .lobytes 8001h + .lobytes 8002h + .lobytes 8003h + .lobytes 8004h + .lobytes 8005h + .lobytes 8006h + .lobytes 8007h + .lobytes 8008h + .lobytes 8009h + .lobytes 800Ah + .lobytes 800Bh + .lobytes 9FE1h + .lobytes 9FE2h + .lobytes 9FE3h + .lobytes 9FE4h + .lobytes 9FE5h + .lobytes 9FE6h + .lobytes 9FE7h + .lobytes 9FE8h + .lobytes 9FE9h + .lobytes 9FEAh + .lobytes 9FEBh + .lobytes 9FECh + .lobytes 9FEDh + .lobytes 9FEEh + .lobytes 9FEFh + .lobytes 9FF0h + .lobytes 9FF1h + .lobytes 9FF2h + .lobytes 9FF3h + .lobytes 9FF4h + .lobytes 9FF5h + .lobytes 9FF6h + .lobytes 9FF7h + .lobytes 9FF8h + .lobytes 9FF9h + .lobytes 9FFAh + .lobytes 9FFBh + .lobytes 9FFCh + .lobytes 9FFDh + .lobytes 9FFEh + .lobytes 9FFFh + .lobytes 0A000h + .lobytes 0A001h + .lobytes 0A002h + .lobytes 0A003h + .lobytes 0A004h + .lobytes 0A005h + .lobytes 0A006h + .lobytes 0A007h + .lobytes 0A008h + .lobytes 0A009h + .lobytes 0A00Ah + .lobytes 0A00Bh + .lobytes 0A00Ch + .lobytes 0A00Dh + .lobytes 0A00Eh + .lobytes 0A00Fh + .lobytes 0AFE1h + .lobytes 0AFE2h + .lobytes 0AFE3h + .lobytes 0AFE4h + .lobytes 0AFE5h + .lobytes 0AFE6h + .lobytes 0AFE7h + .lobytes 0AFE8h + .lobytes 0AFE9h + .lobytes 0AFEAh + .lobytes 0AFEBh + .lobytes 0AFECh + .lobytes 0AFEDh + .lobytes 0AFEEh + .lobytes 0AFEFh + .lobytes 0AFF0h + .lobytes 0AFF1h + .lobytes 0AFF2h + .lobytes 0AFF3h + .lobytes 0AFF4h + .lobytes 0AFF5h + .lobytes 0AFF6h + .lobytes 0AFF7h + .lobytes 0AFF8h + .lobytes 0AFF9h + .lobytes 0AFFAh + .lobytes 0AFFBh + .lobytes 0AFFCh + .lobytes 0AFFDh + .lobytes 0AFFEh + .lobytes 0AFFFh + .lobytes 0B000h + .lobytes 0B001h + .lobytes 0B002h + .lobytes 0B003h + .lobytes 0B004h + .lobytes 0B005h + .lobytes 0B006h + .lobytes 0B007h + .lobytes 0B008h + .lobytes 0B009h + .lobytes 0B00Ah + .lobytes 0B00Bh + .lobytes 0B00Ch + .lobytes 0B00Dh + .lobytes 0B00Eh + .lobytes 0B00Fh + .lobytes 0BFE1h + .lobytes 0BFE2h + .lobytes 0BFE3h + .lobytes 0BFE4h + .lobytes 0BFE5h + .lobytes 0BFE6h + .lobytes 0BFE7h + .lobytes 0BFE8h + .lobytes 0BFE9h + .lobytes 0BFEAh + .lobytes 0BFEBh + .lobytes 0BFECh + .lobytes 0BFEDh + .lobytes 0BFEEh + .lobytes 0BFEFh + .lobytes 0BFF0h + .lobytes 0BFF1h + .lobytes 0BFF2h + .lobytes 0BFF3h + .lobytes 0BFF4h + .lobytes 0BFF5h + .lobytes 0BFF6h + .lobytes 0BFF7h + .lobytes 0BFF8h + .lobytes 0BFF9h + .lobytes 0BFFAh + .lobytes 0BFFBh + .lobytes 0BFFCh + .lobytes 0BFFDh + .lobytes 0BFFEh + .lobytes 0BFFFh + .lobytes 0C000h + .lobytes 0C001h + .lobytes 0C002h + .lobytes 0C003h + .lobytes 0C004h + .lobytes 0C005h + .lobytes 0C006h + .lobytes 0C007h + .lobytes 0C008h + .lobytes 0C009h + .lobytes 0C00Ah + .lobytes 0C00Bh + .lobytes 0C00Ch + .lobytes 0C00Dh + .lobytes 0C00Eh + .lobytes 0C00Fh + .lobytes 0CFE1h + .lobytes 0CFE2h + .lobytes 0CFE3h + .lobytes 0CFE4h + .lobytes 0CFE5h + .lobytes 0CFE6h + .lobytes 0CFE7h + .lobytes 0CFE8h + .lobytes 0CFE9h + .lobytes 0CFEAh + .lobytes 0CFEBh + .lobytes 0CFECh + .lobytes 0CFEDh + .lobytes 0CFEEh + .lobytes 0CFEFh + .lobytes 0CFF0h + .lobytes 0CFF1h + .lobytes 0CFF2h + .lobytes 0CFF3h + .lobytes 0CFF4h + .lobytes 0CFF5h + .lobytes 0CFF6h + .lobytes 0CFF7h + .lobytes 0CFF8h + .lobytes 0CFF9h + .lobytes 0CFFAh + .lobytes 0CFFBh + .lobytes 0CFFCh + .lobytes 0CFFDh + .lobytes 0CFFEh + .lobytes 0CFFFh + .lobytes 0D000h + .lobytes 0D001h + .lobytes 0D002h + .lobytes 0D003h + .lobytes 0D004h + .lobytes 0D005h + .lobytes 0D006h + .lobytes 0D007h + .lobytes 0D008h + .lobytes 0D009h + .lobytes 0D00Ah + .lobytes 0D00Bh + .lobytes 0D00Ch + .lobytes 0D00Dh + .lobytes 0D00Eh + .lobytes 0D00Fh + .lobytes 0DFE1h + .lobytes 0DFE2h + .lobytes 0DFE3h + .lobytes 0DFE4h + .lobytes 0DFE5h + .lobytes 0DFE6h + .lobytes 0DFE7h + .lobytes 0DFE8h + .lobytes 0DFE9h + .lobytes 0DFEAh + .lobytes 0DFEBh + .lobytes 0DFECh + .lobytes 0DFEDh + .lobytes 0DFEEh + .lobytes 0DFEFh + .lobytes 0DFF0h + .lobytes 0DFF1h + .lobytes 0DFF2h + .lobytes 0DFF3h + .lobytes 0DFF4h + .lobytes 0DFF5h + .lobytes 0DFF6h + .lobytes 0DFF7h + .lobytes 0DFF8h + .lobytes 0DFF9h + .lobytes 0DFFAh + .lobytes 0DFFBh + .lobytes 0DFFCh + .lobytes 0DFFDh + .lobytes 0DFFEh + .lobytes 0DFFFh + .lobytes 0E000h + .lobytes 0E001h + .lobytes 0E002h + .lobytes 0E003h + .lobytes 0E004h + .lobytes 0E005h + .lobytes 0E006h + .lobytes 0E007h + .lobytes 0E008h + .lobytes 0E009h + .lobytes 0E00Ah + .lobytes 0E00Bh + .lobytes 0E00Ch + .lobytes 0E00Dh + .lobytes 0E00Eh + .lobytes 0E00Fh + .lobytes 0EFE1h + .lobytes 0EFE2h + .lobytes 0EFE3h + .lobytes 0EFE4h + .lobytes 0EFE5h + .lobytes 0EFE6h + .lobytes 0EFE7h + .lobytes 0EFE8h + .lobytes 0EFE9h + .lobytes 0EFEAh + .lobytes 0EFEBh + .lobytes 0EFECh + .lobytes 0EFEDh + .lobytes 0EFEEh + .lobytes 0EFEFh + .lobytes 0EFF0h + .lobytes 0EFF1h + .lobytes 0EFF2h + .lobytes 0EFF3h + .lobytes 0EFF4h + .lobytes 0EFF5h + .lobytes 0EFF6h + .lobytes 0EFF7h + .lobytes 0EFF8h + .lobytes 0EFF9h + .lobytes 0EFFAh + .lobytes 0EFFBh + .lobytes 0EFFCh + .lobytes 0EFFDh + .lobytes 0EFFEh + .lobytes 0EFFFh + .lobytes 0F000h + .lobytes 0F001h + .lobytes 0F002h + .lobytes 0F003h + .lobytes 0F004h + .lobytes 0F005h + .lobytes 0F006h + .lobytes 0F007h + .lobytes 0F008h + .lobytes 0F009h + .lobytes 0F00Ah + .lobytes 0F00Bh + .lobytes 0F00Ch + .lobytes 0F00Dh + .lobytes 0F00Eh + .lobytes 0F00Fh + .lobytes 0FFE1h + .lobytes 0FFE2h + .lobytes 0FFE3h + .lobytes 0FFE4h + .lobytes 0FFE5h + .lobytes 0FFE6h + .lobytes 0FFE7h + .lobytes 0FFE8h + .lobytes 0FFE9h + .lobytes 0FFEAh + .lobytes 0FFEBh + .lobytes 0FFECh + .lobytes 0FFEDh + .lobytes 0FFEEh + .lobytes 0FFEFh + .lobytes 0FFF0h + .lobytes 0FFF1h + .lobytes 0FFF2h + .lobytes 0FFF3h + .lobytes 0FFF4h + .lobytes 0FFF5h + .lobytes 0FFF6h + .lobytes 0FFF7h + .lobytes 0FFF8h + .lobytes 0FFF9h + .lobytes 0FFFAh + .lobytes 0FFFBh + .lobytes 0FFFCh + .lobytes 0FFFDh + .lobytes 0FFFEh + .lobytes 0FFFFh + + ; alternative 4-digit hex values + .lobytes 0000h + .lobytes 0001h + .lobytes 0002h + .lobytes 0003h + .lobytes 0004h + .lobytes 0005h + .lobytes 0006h + .lobytes 0007h + .lobytes 0008h + .lobytes 0009h + .lobytes 000ah + .lobytes 000bh + .lobytes 000ch + .lobytes 000dh + .lobytes 000eh + .lobytes 000fh + .lobytes 0010h + .lobytes 0011h + .lobytes 0012h + .lobytes 0013h + .lobytes 0070h + .lobytes 0071h + .lobytes 0072h + .lobytes 0073h + .lobytes 0074h + .lobytes 0075h + .lobytes 0076h + .lobytes 0077h + .lobytes 0078h + .lobytes 0079h + .lobytes 007ah + .lobytes 007bh + .lobytes 007ch + .lobytes 007dh + .lobytes 007eh + .lobytes 007fh + .lobytes 0080h + .lobytes 0081h + .lobytes 0082h + .lobytes 0083h + .lobytes 0084h + .lobytes 0085h + .lobytes 0086h + .lobytes 00f0h + .lobytes 00f1h + .lobytes 00f2h + .lobytes 00f3h + .lobytes 00f4h + .lobytes 00f5h + .lobytes 00f6h + .lobytes 00f7h + .lobytes 00f8h + .lobytes 00f9h + .lobytes 00fah + .lobytes 00fbh + .lobytes 00fch + .lobytes 00fdh + .lobytes 00feh + .lobytes 00ffh + .lobytes 0100h + .lobytes 0101h + .lobytes 0102h + .lobytes 0103h + .lobytes 0fd2h + .lobytes 0fd3h + .lobytes 0fd4h + .lobytes 0fd5h + .lobytes 0fd6h + .lobytes 0fd7h + .lobytes 0fd8h + .lobytes 0fd9h + .lobytes 0fdah + .lobytes 0fdbh + .lobytes 0fdch + .lobytes 0fddh + .lobytes 0fdeh + .lobytes 0fdfh + .lobytes 0fe0h + .lobytes 0fe1h + .lobytes 0fe2h + .lobytes 0fe3h + .lobytes 0fe4h + .lobytes 0fe5h + .lobytes 0fe6h + .lobytes 0fe7h + .lobytes 0fe8h + .lobytes 0fe9h + .lobytes 0feah + .lobytes 0febh + .lobytes 0fech + .lobytes 0fedh + .lobytes 0feeh + .lobytes 0fefh + .lobytes 0ff0h + .lobytes 0ff1h + .lobytes 0ff2h + .lobytes 0ff3h + .lobytes 0ff4h + .lobytes 0ff5h + .lobytes 0ff6h + .lobytes 0ff7h + .lobytes 0ff8h + .lobytes 0ff9h + .lobytes 0ffah + .lobytes 0ffbh + .lobytes 0ffch + .lobytes 0ffdh + .lobytes 0ffeh + .lobytes 0fffh + .lobytes 1000h + .lobytes 1001h + .lobytes 1002h + .lobytes 1003h + .lobytes 1004h + .lobytes 1005h + .lobytes 1006h + .lobytes 1007h + .lobytes 1008h + .lobytes 7ff0h + .lobytes 7ff1h + .lobytes 7ff2h + .lobytes 7ff3h + .lobytes 7ff4h + .lobytes 7ff5h + .lobytes 7ff6h + .lobytes 7ff7h + .lobytes 7ff8h + .lobytes 7ff9h + .lobytes 7ffah + .lobytes 7ffbh + .lobytes 7ffch + .lobytes 7ffdh + .lobytes 7ffeh + .lobytes 7fffh + .lobytes 8000h + .lobytes 8001h + .lobytes 8002h + .lobytes 8003h + .lobytes 8004h + .lobytes 8005h + .lobytes 8006h + .lobytes 8007h + .lobytes 8008h + .lobytes 8009h + .lobytes 800ah + .lobytes 800bh + .lobytes 9fe1h + .lobytes 9fe2h + .lobytes 9fe3h + .lobytes 9fe4h + .lobytes 9fe5h + .lobytes 9fe6h + .lobytes 9fe7h + .lobytes 9fe8h + .lobytes 9fe9h + .lobytes 9feah + .lobytes 9febh + .lobytes 9fech + .lobytes 9fedh + .lobytes 9feeh + .lobytes 9fefh + .lobytes 9ff0h + .lobytes 9ff1h + .lobytes 9ff2h + .lobytes 9ff3h + .lobytes 9ff4h + .lobytes 9ff5h + .lobytes 9ff6h + .lobytes 9ff7h + .lobytes 9ff8h + .lobytes 9ff9h + .lobytes 9ffah + .lobytes 9ffbh + .lobytes 9ffch + .lobytes 9ffdh + .lobytes 9ffeh + .lobytes 9fffh + .lobytes 0a000h + .lobytes 0a001h + .lobytes 0a002h + .lobytes 0a003h + .lobytes 0a004h + .lobytes 0a005h + .lobytes 0a006h + .lobytes 0a007h + .lobytes 0a008h + .lobytes 0a009h + .lobytes 0a00ah + .lobytes 0a00bh + .lobytes 0a00ch + .lobytes 0a00dh + .lobytes 0a00eh + .lobytes 0a00fh + .lobytes 0afe1h + .lobytes 0afe2h + .lobytes 0afe3h + .lobytes 0afe4h + .lobytes 0afe5h + .lobytes 0afe6h + .lobytes 0afe7h + .lobytes 0afe8h + .lobytes 0afe9h + .lobytes 0afeah + .lobytes 0afebh + .lobytes 0afech + .lobytes 0afedh + .lobytes 0afeeh + .lobytes 0afefh + .lobytes 0aff0h + .lobytes 0aff1h + .lobytes 0aff2h + .lobytes 0aff3h + .lobytes 0aff4h + .lobytes 0aff5h + .lobytes 0aff6h + .lobytes 0aff7h + .lobytes 0aff8h + .lobytes 0aff9h + .lobytes 0affah + .lobytes 0affbh + .lobytes 0affch + .lobytes 0affdh + .lobytes 0affeh + .lobytes 0afffh + .lobytes 0b000h + .lobytes 0b001h + .lobytes 0b002h + .lobytes 0b003h + .lobytes 0b004h + .lobytes 0b005h + .lobytes 0b006h + .lobytes 0b007h + .lobytes 0b008h + .lobytes 0b009h + .lobytes 0b00ah + .lobytes 0b00bh + .lobytes 0b00ch + .lobytes 0b00dh + .lobytes 0b00eh + .lobytes 0b00fh + .lobytes 0bfe1h + .lobytes 0bfe2h + .lobytes 0bfe3h + .lobytes 0bfe4h + .lobytes 0bfe5h + .lobytes 0bfe6h + .lobytes 0bfe7h + .lobytes 0bfe8h + .lobytes 0bfe9h + .lobytes 0bfeah + .lobytes 0bfebh + .lobytes 0bfech + .lobytes 0bfedh + .lobytes 0bfeeh + .lobytes 0bfefh + .lobytes 0bff0h + .lobytes 0bff1h + .lobytes 0bff2h + .lobytes 0bff3h + .lobytes 0bff4h + .lobytes 0bff5h + .lobytes 0bff6h + .lobytes 0bff7h + .lobytes 0bff8h + .lobytes 0bff9h + .lobytes 0bffah + .lobytes 0bffbh + .lobytes 0bffch + .lobytes 0bffdh + .lobytes 0bffeh + .lobytes 0bfffh + .lobytes 0c000h + .lobytes 0c001h + .lobytes 0c002h + .lobytes 0c003h + .lobytes 0c004h + .lobytes 0c005h + .lobytes 0c006h + .lobytes 0c007h + .lobytes 0c008h + .lobytes 0c009h + .lobytes 0c00ah + .lobytes 0c00bh + .lobytes 0c00ch + .lobytes 0c00dh + .lobytes 0c00eh + .lobytes 0c00fh + .lobytes 0cfe1h + .lobytes 0cfe2h + .lobytes 0cfe3h + .lobytes 0cfe4h + .lobytes 0cfe5h + .lobytes 0cfe6h + .lobytes 0cfe7h + .lobytes 0cfe8h + .lobytes 0cfe9h + .lobytes 0cfeah + .lobytes 0cfebh + .lobytes 0cfech + .lobytes 0cfedh + .lobytes 0cfeeh + .lobytes 0cfefh + .lobytes 0cff0h + .lobytes 0cff1h + .lobytes 0cff2h + .lobytes 0cff3h + .lobytes 0cff4h + .lobytes 0cff5h + .lobytes 0cff6h + .lobytes 0cff7h + .lobytes 0cff8h + .lobytes 0cff9h + .lobytes 0cffah + .lobytes 0cffbh + .lobytes 0cffch + .lobytes 0cffdh + .lobytes 0cffeh + .lobytes 0cfffh + .lobytes 0d000h + .lobytes 0d001h + .lobytes 0d002h + .lobytes 0d003h + .lobytes 0d004h + .lobytes 0d005h + .lobytes 0d006h + .lobytes 0d007h + .lobytes 0d008h + .lobytes 0d009h + .lobytes 0d00ah + .lobytes 0d00bh + .lobytes 0d00ch + .lobytes 0d00dh + .lobytes 0d00eh + .lobytes 0d00fh + .lobytes 0dfe1h + .lobytes 0dfe2h + .lobytes 0dfe3h + .lobytes 0dfe4h + .lobytes 0dfe5h + .lobytes 0dfe6h + .lobytes 0dfe7h + .lobytes 0dfe8h + .lobytes 0dfe9h + .lobytes 0dfeah + .lobytes 0dfebh + .lobytes 0dfech + .lobytes 0dfedh + .lobytes 0dfeeh + .lobytes 0dfefh + .lobytes 0dff0h + .lobytes 0dff1h + .lobytes 0dff2h + .lobytes 0dff3h + .lobytes 0dff4h + .lobytes 0dff5h + .lobytes 0dff6h + .lobytes 0dff7h + .lobytes 0dff8h + .lobytes 0dff9h + .lobytes 0dffah + .lobytes 0dffbh + .lobytes 0dffch + .lobytes 0dffdh + .lobytes 0dffeh + .lobytes 0dfffh + .lobytes 0e000h + .lobytes 0e001h + .lobytes 0e002h + .lobytes 0e003h + .lobytes 0e004h + .lobytes 0e005h + .lobytes 0e006h + .lobytes 0e007h + .lobytes 0e008h + .lobytes 0e009h + .lobytes 0e00ah + .lobytes 0e00bh + .lobytes 0e00ch + .lobytes 0e00dh + .lobytes 0e00eh + .lobytes 0e00fh + .lobytes 0efe1h + .lobytes 0efe2h + .lobytes 0efe3h + .lobytes 0efe4h + .lobytes 0efe5h + .lobytes 0efe6h + .lobytes 0efe7h + .lobytes 0efe8h + .lobytes 0efe9h + .lobytes 0efeah + .lobytes 0efebh + .lobytes 0efech + .lobytes 0efedh + .lobytes 0efeeh + .lobytes 0efefh + .lobytes 0eff0h + .lobytes 0eff1h + .lobytes 0eff2h + .lobytes 0eff3h + .lobytes 0eff4h + .lobytes 0eff5h + .lobytes 0eff6h + .lobytes 0eff7h + .lobytes 0eff8h + .lobytes 0eff9h + .lobytes 0effah + .lobytes 0effbh + .lobytes 0effch + .lobytes 0effdh + .lobytes 0effeh + .lobytes 0efffh + .lobytes 0f000h + .lobytes 0f001h + .lobytes 0f002h + .lobytes 0f003h + .lobytes 0f004h + .lobytes 0f005h + .lobytes 0f006h + .lobytes 0f007h + .lobytes 0f008h + .lobytes 0f009h + .lobytes 0f00ah + .lobytes 0f00bh + .lobytes 0f00ch + .lobytes 0f00dh + .lobytes 0f00eh + .lobytes 0f00fh + .lobytes 0ffe1h + .lobytes 0ffe2h + .lobytes 0ffe3h + .lobytes 0ffe4h + .lobytes 0ffe5h + .lobytes 0ffe6h + .lobytes 0ffe7h + .lobytes 0ffe8h + .lobytes 0ffe9h + .lobytes 0ffeah + .lobytes 0ffebh + .lobytes 0ffech + .lobytes 0ffedh + .lobytes 0ffeeh + .lobytes 0ffefh + .lobytes 0fff0h + .lobytes 0fff1h + .lobytes 0fff2h + .lobytes 0fff3h + .lobytes 0fff4h + .lobytes 0fff5h + .lobytes 0fff6h + .lobytes 0fff7h + .lobytes 0fff8h + .lobytes 0fff9h + .lobytes 0fffah + .lobytes 0fffbh + .lobytes 0fffch + .lobytes 0fffdh + .lobytes 0fffeh + .lobytes 0ffffh + + ; alternative 4-digit hex values, uppercase + .lobytes 0000h + .lobytes 0001h + .lobytes 0002h + .lobytes 0003h + .lobytes 0004h + .lobytes 0005h + .lobytes 0006h + .lobytes 0007h + .lobytes 0008h + .lobytes 0009h + .lobytes 000Ah + .lobytes 000Bh + .lobytes 000Ch + .lobytes 000Dh + .lobytes 000Eh + .lobytes 000Fh + .lobytes 0010h + .lobytes 0011h + .lobytes 0012h + .lobytes 0013h + .lobytes 0070h + .lobytes 0071h + .lobytes 0072h + .lobytes 0073h + .lobytes 0074h + .lobytes 0075h + .lobytes 0076h + .lobytes 0077h + .lobytes 0078h + .lobytes 0079h + .lobytes 007Ah + .lobytes 007Bh + .lobytes 007Ch + .lobytes 007Dh + .lobytes 007Eh + .lobytes 007Fh + .lobytes 0080h + .lobytes 0081h + .lobytes 0082h + .lobytes 0083h + .lobytes 0084h + .lobytes 0085h + .lobytes 0086h + .lobytes 00F0h + .lobytes 00F1h + .lobytes 00F2h + .lobytes 00F3h + .lobytes 00F4h + .lobytes 00F5h + .lobytes 00F6h + .lobytes 00F7h + .lobytes 00F8h + .lobytes 00F9h + .lobytes 00FAh + .lobytes 00FBh + .lobytes 00FCh + .lobytes 00FDh + .lobytes 00FEh + .lobytes 00FFh + .lobytes 0100h + .lobytes 0101h + .lobytes 0102h + .lobytes 0103h + .lobytes 0FD2h + .lobytes 0FD3h + .lobytes 0FD4h + .lobytes 0FD5h + .lobytes 0FD6h + .lobytes 0FD7h + .lobytes 0FD8h + .lobytes 0FD9h + .lobytes 0FDAh + .lobytes 0FDBh + .lobytes 0FDCh + .lobytes 0FDDh + .lobytes 0FDEh + .lobytes 0FDFh + .lobytes 0FE0h + .lobytes 0FE1h + .lobytes 0FE2h + .lobytes 0FE3h + .lobytes 0FE4h + .lobytes 0FE5h + .lobytes 0FE6h + .lobytes 0FE7h + .lobytes 0FE8h + .lobytes 0FE9h + .lobytes 0FEAh + .lobytes 0FEBh + .lobytes 0FECh + .lobytes 0FEDh + .lobytes 0FEEh + .lobytes 0FEFh + .lobytes 0FF0h + .lobytes 0FF1h + .lobytes 0FF2h + .lobytes 0FF3h + .lobytes 0FF4h + .lobytes 0FF5h + .lobytes 0FF6h + .lobytes 0FF7h + .lobytes 0FF8h + .lobytes 0FF9h + .lobytes 0FFAh + .lobytes 0FFBh + .lobytes 0FFCh + .lobytes 0FFDh + .lobytes 0FFEh + .lobytes 0FFFh + .lobytes 1000h + .lobytes 1001h + .lobytes 1002h + .lobytes 1003h + .lobytes 1004h + .lobytes 1005h + .lobytes 1006h + .lobytes 1007h + .lobytes 1008h + .lobytes 7FF0h + .lobytes 7FF1h + .lobytes 7FF2h + .lobytes 7FF3h + .lobytes 7FF4h + .lobytes 7FF5h + .lobytes 7FF6h + .lobytes 7FF7h + .lobytes 7FF8h + .lobytes 7FF9h + .lobytes 7FFAh + .lobytes 7FFBh + .lobytes 7FFCh + .lobytes 7FFDh + .lobytes 7FFEh + .lobytes 7FFFh + .lobytes 8000h + .lobytes 8001h + .lobytes 8002h + .lobytes 8003h + .lobytes 8004h + .lobytes 8005h + .lobytes 8006h + .lobytes 8007h + .lobytes 8008h + .lobytes 8009h + .lobytes 800Ah + .lobytes 800Bh + .lobytes 9FE1h + .lobytes 9FE2h + .lobytes 9FE3h + .lobytes 9FE4h + .lobytes 9FE5h + .lobytes 9FE6h + .lobytes 9FE7h + .lobytes 9FE8h + .lobytes 9FE9h + .lobytes 9FEAh + .lobytes 9FEBh + .lobytes 9FECh + .lobytes 9FEDh + .lobytes 9FEEh + .lobytes 9FEFh + .lobytes 9FF0h + .lobytes 9FF1h + .lobytes 9FF2h + .lobytes 9FF3h + .lobytes 9FF4h + .lobytes 9FF5h + .lobytes 9FF6h + .lobytes 9FF7h + .lobytes 9FF8h + .lobytes 9FF9h + .lobytes 9FFAh + .lobytes 9FFBh + .lobytes 9FFCh + .lobytes 9FFDh + .lobytes 9FFEh + .lobytes 9FFFh + .lobytes 0A000h + .lobytes 0A001h + .lobytes 0A002h + .lobytes 0A003h + .lobytes 0A004h + .lobytes 0A005h + .lobytes 0A006h + .lobytes 0A007h + .lobytes 0A008h + .lobytes 0A009h + .lobytes 0A00Ah + .lobytes 0A00Bh + .lobytes 0A00Ch + .lobytes 0A00Dh + .lobytes 0A00Eh + .lobytes 0A00Fh + .lobytes 0AFE1h + .lobytes 0AFE2h + .lobytes 0AFE3h + .lobytes 0AFE4h + .lobytes 0AFE5h + .lobytes 0AFE6h + .lobytes 0AFE7h + .lobytes 0AFE8h + .lobytes 0AFE9h + .lobytes 0AFEAh + .lobytes 0AFEBh + .lobytes 0AFECh + .lobytes 0AFEDh + .lobytes 0AFEEh + .lobytes 0AFEFh + .lobytes 0AFF0h + .lobytes 0AFF1h + .lobytes 0AFF2h + .lobytes 0AFF3h + .lobytes 0AFF4h + .lobytes 0AFF5h + .lobytes 0AFF6h + .lobytes 0AFF7h + .lobytes 0AFF8h + .lobytes 0AFF9h + .lobytes 0AFFAh + .lobytes 0AFFBh + .lobytes 0AFFCh + .lobytes 0AFFDh + .lobytes 0AFFEh + .lobytes 0AFFFh + .lobytes 0B000h + .lobytes 0B001h + .lobytes 0B002h + .lobytes 0B003h + .lobytes 0B004h + .lobytes 0B005h + .lobytes 0B006h + .lobytes 0B007h + .lobytes 0B008h + .lobytes 0B009h + .lobytes 0B00Ah + .lobytes 0B00Bh + .lobytes 0B00Ch + .lobytes 0B00Dh + .lobytes 0B00Eh + .lobytes 0B00Fh + .lobytes 0BFE1h + .lobytes 0BFE2h + .lobytes 0BFE3h + .lobytes 0BFE4h + .lobytes 0BFE5h + .lobytes 0BFE6h + .lobytes 0BFE7h + .lobytes 0BFE8h + .lobytes 0BFE9h + .lobytes 0BFEAh + .lobytes 0BFEBh + .lobytes 0BFECh + .lobytes 0BFEDh + .lobytes 0BFEEh + .lobytes 0BFEFh + .lobytes 0BFF0h + .lobytes 0BFF1h + .lobytes 0BFF2h + .lobytes 0BFF3h + .lobytes 0BFF4h + .lobytes 0BFF5h + .lobytes 0BFF6h + .lobytes 0BFF7h + .lobytes 0BFF8h + .lobytes 0BFF9h + .lobytes 0BFFAh + .lobytes 0BFFBh + .lobytes 0BFFCh + .lobytes 0BFFDh + .lobytes 0BFFEh + .lobytes 0BFFFh + .lobytes 0C000h + .lobytes 0C001h + .lobytes 0C002h + .lobytes 0C003h + .lobytes 0C004h + .lobytes 0C005h + .lobytes 0C006h + .lobytes 0C007h + .lobytes 0C008h + .lobytes 0C009h + .lobytes 0C00Ah + .lobytes 0C00Bh + .lobytes 0C00Ch + .lobytes 0C00Dh + .lobytes 0C00Eh + .lobytes 0C00Fh + .lobytes 0CFE1h + .lobytes 0CFE2h + .lobytes 0CFE3h + .lobytes 0CFE4h + .lobytes 0CFE5h + .lobytes 0CFE6h + .lobytes 0CFE7h + .lobytes 0CFE8h + .lobytes 0CFE9h + .lobytes 0CFEAh + .lobytes 0CFEBh + .lobytes 0CFECh + .lobytes 0CFEDh + .lobytes 0CFEEh + .lobytes 0CFEFh + .lobytes 0CFF0h + .lobytes 0CFF1h + .lobytes 0CFF2h + .lobytes 0CFF3h + .lobytes 0CFF4h + .lobytes 0CFF5h + .lobytes 0CFF6h + .lobytes 0CFF7h + .lobytes 0CFF8h + .lobytes 0CFF9h + .lobytes 0CFFAh + .lobytes 0CFFBh + .lobytes 0CFFCh + .lobytes 0CFFDh + .lobytes 0CFFEh + .lobytes 0CFFFh + .lobytes 0D000h + .lobytes 0D001h + .lobytes 0D002h + .lobytes 0D003h + .lobytes 0D004h + .lobytes 0D005h + .lobytes 0D006h + .lobytes 0D007h + .lobytes 0D008h + .lobytes 0D009h + .lobytes 0D00Ah + .lobytes 0D00Bh + .lobytes 0D00Ch + .lobytes 0D00Dh + .lobytes 0D00Eh + .lobytes 0D00Fh + .lobytes 0DFE1h + .lobytes 0DFE2h + .lobytes 0DFE3h + .lobytes 0DFE4h + .lobytes 0DFE5h + .lobytes 0DFE6h + .lobytes 0DFE7h + .lobytes 0DFE8h + .lobytes 0DFE9h + .lobytes 0DFEAh + .lobytes 0DFEBh + .lobytes 0DFECh + .lobytes 0DFEDh + .lobytes 0DFEEh + .lobytes 0DFEFh + .lobytes 0DFF0h + .lobytes 0DFF1h + .lobytes 0DFF2h + .lobytes 0DFF3h + .lobytes 0DFF4h + .lobytes 0DFF5h + .lobytes 0DFF6h + .lobytes 0DFF7h + .lobytes 0DFF8h + .lobytes 0DFF9h + .lobytes 0DFFAh + .lobytes 0DFFBh + .lobytes 0DFFCh + .lobytes 0DFFDh + .lobytes 0DFFEh + .lobytes 0DFFFh + .lobytes 0E000h + .lobytes 0E001h + .lobytes 0E002h + .lobytes 0E003h + .lobytes 0E004h + .lobytes 0E005h + .lobytes 0E006h + .lobytes 0E007h + .lobytes 0E008h + .lobytes 0E009h + .lobytes 0E00Ah + .lobytes 0E00Bh + .lobytes 0E00Ch + .lobytes 0E00Dh + .lobytes 0E00Eh + .lobytes 0E00Fh + .lobytes 0EFE1h + .lobytes 0EFE2h + .lobytes 0EFE3h + .lobytes 0EFE4h + .lobytes 0EFE5h + .lobytes 0EFE6h + .lobytes 0EFE7h + .lobytes 0EFE8h + .lobytes 0EFE9h + .lobytes 0EFEAh + .lobytes 0EFEBh + .lobytes 0EFECh + .lobytes 0EFEDh + .lobytes 0EFEEh + .lobytes 0EFEFh + .lobytes 0EFF0h + .lobytes 0EFF1h + .lobytes 0EFF2h + .lobytes 0EFF3h + .lobytes 0EFF4h + .lobytes 0EFF5h + .lobytes 0EFF6h + .lobytes 0EFF7h + .lobytes 0EFF8h + .lobytes 0EFF9h + .lobytes 0EFFAh + .lobytes 0EFFBh + .lobytes 0EFFCh + .lobytes 0EFFDh + .lobytes 0EFFEh + .lobytes 0EFFFh + .lobytes 0F000h + .lobytes 0F001h + .lobytes 0F002h + .lobytes 0F003h + .lobytes 0F004h + .lobytes 0F005h + .lobytes 0F006h + .lobytes 0F007h + .lobytes 0F008h + .lobytes 0F009h + .lobytes 0F00Ah + .lobytes 0F00Bh + .lobytes 0F00Ch + .lobytes 0F00Dh + .lobytes 0F00Eh + .lobytes 0F00Fh + .lobytes 0FFE1h + .lobytes 0FFE2h + .lobytes 0FFE3h + .lobytes 0FFE4h + .lobytes 0FFE5h + .lobytes 0FFE6h + .lobytes 0FFE7h + .lobytes 0FFE8h + .lobytes 0FFE9h + .lobytes 0FFEAh + .lobytes 0FFEBh + .lobytes 0FFECh + .lobytes 0FFEDh + .lobytes 0FFEEh + .lobytes 0FFEFh + .lobytes 0FFF0h + .lobytes 0FFF1h + .lobytes 0FFF2h + .lobytes 0FFF3h + .lobytes 0FFF4h + .lobytes 0FFF5h + .lobytes 0FFF6h + .lobytes 0FFF7h + .lobytes 0FFF8h + .lobytes 0FFF9h + .lobytes 0FFFAh + .lobytes 0FFFBh + .lobytes 0FFFCh + .lobytes 0FFFDh + .lobytes 0FFFEh + .lobytes 0FFFFh + + ; alternative hex values, always leading zero + .lobytes 00h + .lobytes 01h + .lobytes 02h + .lobytes 03h + .lobytes 04h + .lobytes 05h + .lobytes 06h + .lobytes 07h + .lobytes 08h + .lobytes 09h + .lobytes 0ah + .lobytes 0bh + .lobytes 0ch + .lobytes 0dh + .lobytes 0eh + .lobytes 0fh + .lobytes 010h + .lobytes 011h + .lobytes 012h + .lobytes 013h + .lobytes 070h + .lobytes 071h + .lobytes 072h + .lobytes 073h + .lobytes 074h + .lobytes 075h + .lobytes 076h + .lobytes 077h + .lobytes 078h + .lobytes 079h + .lobytes 07ah + .lobytes 07bh + .lobytes 07ch + .lobytes 07dh + .lobytes 07eh + .lobytes 07fh + .lobytes 080h + .lobytes 081h + .lobytes 082h + .lobytes 083h + .lobytes 084h + .lobytes 085h + .lobytes 086h + .lobytes 0f0h + .lobytes 0f1h + .lobytes 0f2h + .lobytes 0f3h + .lobytes 0f4h + .lobytes 0f5h + .lobytes 0f6h + .lobytes 0f7h + .lobytes 0f8h + .lobytes 0f9h + .lobytes 0fah + .lobytes 0fbh + .lobytes 0fch + .lobytes 0fdh + .lobytes 0feh + .lobytes 0ffh + .lobytes 0100h + .lobytes 0101h + .lobytes 0102h + .lobytes 0103h + .lobytes 0fd2h + .lobytes 0fd3h + .lobytes 0fd4h + .lobytes 0fd5h + .lobytes 0fd6h + .lobytes 0fd7h + .lobytes 0fd8h + .lobytes 0fd9h + .lobytes 0fdah + .lobytes 0fdbh + .lobytes 0fdch + .lobytes 0fddh + .lobytes 0fdeh + .lobytes 0fdfh + .lobytes 0fe0h + .lobytes 0fe1h + .lobytes 0fe2h + .lobytes 0fe3h + .lobytes 0fe4h + .lobytes 0fe5h + .lobytes 0fe6h + .lobytes 0fe7h + .lobytes 0fe8h + .lobytes 0fe9h + .lobytes 0feah + .lobytes 0febh + .lobytes 0fech + .lobytes 0fedh + .lobytes 0feeh + .lobytes 0fefh + .lobytes 0ff0h + .lobytes 0ff1h + .lobytes 0ff2h + .lobytes 0ff3h + .lobytes 0ff4h + .lobytes 0ff5h + .lobytes 0ff6h + .lobytes 0ff7h + .lobytes 0ff8h + .lobytes 0ff9h + .lobytes 0ffah + .lobytes 0ffbh + .lobytes 0ffch + .lobytes 0ffdh + .lobytes 0ffeh + .lobytes 0fffh + .lobytes 01000h + .lobytes 01001h + .lobytes 01002h + .lobytes 01003h + .lobytes 01004h + .lobytes 01005h + .lobytes 01006h + .lobytes 01007h + .lobytes 01008h + .lobytes 07ff0h + .lobytes 07ff1h + .lobytes 07ff2h + .lobytes 07ff3h + .lobytes 07ff4h + .lobytes 07ff5h + .lobytes 07ff6h + .lobytes 07ff7h + .lobytes 07ff8h + .lobytes 07ff9h + .lobytes 07ffah + .lobytes 07ffbh + .lobytes 07ffch + .lobytes 07ffdh + .lobytes 07ffeh + .lobytes 07fffh + .lobytes 08000h + .lobytes 08001h + .lobytes 08002h + .lobytes 08003h + .lobytes 08004h + .lobytes 08005h + .lobytes 08006h + .lobytes 08007h + .lobytes 08008h + .lobytes 08009h + .lobytes 0800ah + .lobytes 0800bh + .lobytes 09fe1h + .lobytes 09fe2h + .lobytes 09fe3h + .lobytes 09fe4h + .lobytes 09fe5h + .lobytes 09fe6h + .lobytes 09fe7h + .lobytes 09fe8h + .lobytes 09fe9h + .lobytes 09feah + .lobytes 09febh + .lobytes 09fech + .lobytes 09fedh + .lobytes 09feeh + .lobytes 09fefh + .lobytes 09ff0h + .lobytes 09ff1h + .lobytes 09ff2h + .lobytes 09ff3h + .lobytes 09ff4h + .lobytes 09ff5h + .lobytes 09ff6h + .lobytes 09ff7h + .lobytes 09ff8h + .lobytes 09ff9h + .lobytes 09ffah + .lobytes 09ffbh + .lobytes 09ffch + .lobytes 09ffdh + .lobytes 09ffeh + .lobytes 09fffh + .lobytes 0a000h + .lobytes 0a001h + .lobytes 0a002h + .lobytes 0a003h + .lobytes 0a004h + .lobytes 0a005h + .lobytes 0a006h + .lobytes 0a007h + .lobytes 0a008h + .lobytes 0a009h + .lobytes 0a00ah + .lobytes 0a00bh + .lobytes 0a00ch + .lobytes 0a00dh + .lobytes 0a00eh + .lobytes 0a00fh + .lobytes 0afe1h + .lobytes 0afe2h + .lobytes 0afe3h + .lobytes 0afe4h + .lobytes 0afe5h + .lobytes 0afe6h + .lobytes 0afe7h + .lobytes 0afe8h + .lobytes 0afe9h + .lobytes 0afeah + .lobytes 0afebh + .lobytes 0afech + .lobytes 0afedh + .lobytes 0afeeh + .lobytes 0afefh + .lobytes 0aff0h + .lobytes 0aff1h + .lobytes 0aff2h + .lobytes 0aff3h + .lobytes 0aff4h + .lobytes 0aff5h + .lobytes 0aff6h + .lobytes 0aff7h + .lobytes 0aff8h + .lobytes 0aff9h + .lobytes 0affah + .lobytes 0affbh + .lobytes 0affch + .lobytes 0affdh + .lobytes 0affeh + .lobytes 0afffh + .lobytes 0b000h + .lobytes 0b001h + .lobytes 0b002h + .lobytes 0b003h + .lobytes 0b004h + .lobytes 0b005h + .lobytes 0b006h + .lobytes 0b007h + .lobytes 0b008h + .lobytes 0b009h + .lobytes 0b00ah + .lobytes 0b00bh + .lobytes 0b00ch + .lobytes 0b00dh + .lobytes 0b00eh + .lobytes 0b00fh + .lobytes 0bfe1h + .lobytes 0bfe2h + .lobytes 0bfe3h + .lobytes 0bfe4h + .lobytes 0bfe5h + .lobytes 0bfe6h + .lobytes 0bfe7h + .lobytes 0bfe8h + .lobytes 0bfe9h + .lobytes 0bfeah + .lobytes 0bfebh + .lobytes 0bfech + .lobytes 0bfedh + .lobytes 0bfeeh + .lobytes 0bfefh + .lobytes 0bff0h + .lobytes 0bff1h + .lobytes 0bff2h + .lobytes 0bff3h + .lobytes 0bff4h + .lobytes 0bff5h + .lobytes 0bff6h + .lobytes 0bff7h + .lobytes 0bff8h + .lobytes 0bff9h + .lobytes 0bffah + .lobytes 0bffbh + .lobytes 0bffch + .lobytes 0bffdh + .lobytes 0bffeh + .lobytes 0bfffh + .lobytes 0c000h + .lobytes 0c001h + .lobytes 0c002h + .lobytes 0c003h + .lobytes 0c004h + .lobytes 0c005h + .lobytes 0c006h + .lobytes 0c007h + .lobytes 0c008h + .lobytes 0c009h + .lobytes 0c00ah + .lobytes 0c00bh + .lobytes 0c00ch + .lobytes 0c00dh + .lobytes 0c00eh + .lobytes 0c00fh + .lobytes 0cfe1h + .lobytes 0cfe2h + .lobytes 0cfe3h + .lobytes 0cfe4h + .lobytes 0cfe5h + .lobytes 0cfe6h + .lobytes 0cfe7h + .lobytes 0cfe8h + .lobytes 0cfe9h + .lobytes 0cfeah + .lobytes 0cfebh + .lobytes 0cfech + .lobytes 0cfedh + .lobytes 0cfeeh + .lobytes 0cfefh + .lobytes 0cff0h + .lobytes 0cff1h + .lobytes 0cff2h + .lobytes 0cff3h + .lobytes 0cff4h + .lobytes 0cff5h + .lobytes 0cff6h + .lobytes 0cff7h + .lobytes 0cff8h + .lobytes 0cff9h + .lobytes 0cffah + .lobytes 0cffbh + .lobytes 0cffch + .lobytes 0cffdh + .lobytes 0cffeh + .lobytes 0cfffh + .lobytes 0d000h + .lobytes 0d001h + .lobytes 0d002h + .lobytes 0d003h + .lobytes 0d004h + .lobytes 0d005h + .lobytes 0d006h + .lobytes 0d007h + .lobytes 0d008h + .lobytes 0d009h + .lobytes 0d00ah + .lobytes 0d00bh + .lobytes 0d00ch + .lobytes 0d00dh + .lobytes 0d00eh + .lobytes 0d00fh + .lobytes 0dfe1h + .lobytes 0dfe2h + .lobytes 0dfe3h + .lobytes 0dfe4h + .lobytes 0dfe5h + .lobytes 0dfe6h + .lobytes 0dfe7h + .lobytes 0dfe8h + .lobytes 0dfe9h + .lobytes 0dfeah + .lobytes 0dfebh + .lobytes 0dfech + .lobytes 0dfedh + .lobytes 0dfeeh + .lobytes 0dfefh + .lobytes 0dff0h + .lobytes 0dff1h + .lobytes 0dff2h + .lobytes 0dff3h + .lobytes 0dff4h + .lobytes 0dff5h + .lobytes 0dff6h + .lobytes 0dff7h + .lobytes 0dff8h + .lobytes 0dff9h + .lobytes 0dffah + .lobytes 0dffbh + .lobytes 0dffch + .lobytes 0dffdh + .lobytes 0dffeh + .lobytes 0dfffh + .lobytes 0e000h + .lobytes 0e001h + .lobytes 0e002h + .lobytes 0e003h + .lobytes 0e004h + .lobytes 0e005h + .lobytes 0e006h + .lobytes 0e007h + .lobytes 0e008h + .lobytes 0e009h + .lobytes 0e00ah + .lobytes 0e00bh + .lobytes 0e00ch + .lobytes 0e00dh + .lobytes 0e00eh + .lobytes 0e00fh + .lobytes 0efe1h + .lobytes 0efe2h + .lobytes 0efe3h + .lobytes 0efe4h + .lobytes 0efe5h + .lobytes 0efe6h + .lobytes 0efe7h + .lobytes 0efe8h + .lobytes 0efe9h + .lobytes 0efeah + .lobytes 0efebh + .lobytes 0efech + .lobytes 0efedh + .lobytes 0efeeh + .lobytes 0efefh + .lobytes 0eff0h + .lobytes 0eff1h + .lobytes 0eff2h + .lobytes 0eff3h + .lobytes 0eff4h + .lobytes 0eff5h + .lobytes 0eff6h + .lobytes 0eff7h + .lobytes 0eff8h + .lobytes 0eff9h + .lobytes 0effah + .lobytes 0effbh + .lobytes 0effch + .lobytes 0effdh + .lobytes 0effeh + .lobytes 0efffh + .lobytes 0f000h + .lobytes 0f001h + .lobytes 0f002h + .lobytes 0f003h + .lobytes 0f004h + .lobytes 0f005h + .lobytes 0f006h + .lobytes 0f007h + .lobytes 0f008h + .lobytes 0f009h + .lobytes 0f00ah + .lobytes 0f00bh + .lobytes 0f00ch + .lobytes 0f00dh + .lobytes 0f00eh + .lobytes 0f00fh + .lobytes 0ffe1h + .lobytes 0ffe2h + .lobytes 0ffe3h + .lobytes 0ffe4h + .lobytes 0ffe5h + .lobytes 0ffe6h + .lobytes 0ffe7h + .lobytes 0ffe8h + .lobytes 0ffe9h + .lobytes 0ffeah + .lobytes 0ffebh + .lobytes 0ffech + .lobytes 0ffedh + .lobytes 0ffeeh + .lobytes 0ffefh + .lobytes 0fff0h + .lobytes 0fff1h + .lobytes 0fff2h + .lobytes 0fff3h + .lobytes 0fff4h + .lobytes 0fff5h + .lobytes 0fff6h + .lobytes 0fff7h + .lobytes 0fff8h + .lobytes 0fff9h + .lobytes 0fffah + .lobytes 0fffbh + .lobytes 0fffch + .lobytes 0fffdh + .lobytes 0fffeh + .lobytes 0ffffh + + ; binary values, variable length + .lobytes %0 + .lobytes %01 + .lobytes %010 + .lobytes %011 + .lobytes %0100 + .lobytes %0101 + .lobytes %0110 + .lobytes %0111 + .lobytes %01000 + .lobytes %01001 + .lobytes %01010 + .lobytes %01011 + .lobytes %01100 + .lobytes %01101 + .lobytes %01110 + .lobytes %01111 + .lobytes %010000 + .lobytes %010001 + .lobytes %010010 + .lobytes %010011 + .lobytes %01110000 + .lobytes %01110001 + .lobytes %01110010 + .lobytes %01110011 + .lobytes %01110100 + .lobytes %01110101 + .lobytes %01110110 + .lobytes %01110111 + .lobytes %01111000 + .lobytes %01111001 + .lobytes %01111010 + .lobytes %01111011 + .lobytes %01111100 + .lobytes %01111101 + .lobytes %01111110 + .lobytes %01111111 + .lobytes %010000000 + .lobytes %010000001 + .lobytes %010000010 + .lobytes %010000011 + .lobytes %010000100 + .lobytes %010000101 + .lobytes %010000110 + .lobytes %011110000 + .lobytes %011110001 + .lobytes %011110010 + .lobytes %011110011 + .lobytes %011110100 + .lobytes %011110101 + .lobytes %011110110 + .lobytes %011110111 + .lobytes %011111000 + .lobytes %011111001 + .lobytes %011111010 + .lobytes %011111011 + .lobytes %011111100 + .lobytes %011111101 + .lobytes %011111110 + .lobytes %011111111 + .lobytes %100000000 + .lobytes %100000001 + .lobytes %100000010 + .lobytes %100000011 + .lobytes %111111010010 + .lobytes %111111010011 + .lobytes %111111010100 + .lobytes %111111010101 + .lobytes %111111010110 + .lobytes %111111010111 + .lobytes %111111011000 + .lobytes %111111011001 + .lobytes %111111011010 + .lobytes %111111011011 + .lobytes %111111011100 + .lobytes %111111011101 + .lobytes %111111011110 + .lobytes %111111011111 + .lobytes %111111100000 + .lobytes %111111100001 + .lobytes %111111100010 + .lobytes %111111100011 + .lobytes %111111100100 + .lobytes %111111100101 + .lobytes %111111100110 + .lobytes %111111100111 + .lobytes %111111101000 + .lobytes %111111101001 + .lobytes %111111101010 + .lobytes %111111101011 + .lobytes %111111101100 + .lobytes %111111101101 + .lobytes %111111101110 + .lobytes %111111101111 + .lobytes %111111110000 + .lobytes %111111110001 + .lobytes %111111110010 + .lobytes %111111110011 + .lobytes %111111110100 + .lobytes %111111110101 + .lobytes %111111110110 + .lobytes %111111110111 + .lobytes %111111111000 + .lobytes %111111111001 + .lobytes %111111111010 + .lobytes %111111111011 + .lobytes %111111111100 + .lobytes %111111111101 + .lobytes %111111111110 + .lobytes %111111111111 + .lobytes %1000000000000 + .lobytes %1000000000001 + .lobytes %1000000000010 + .lobytes %1000000000011 + .lobytes %1000000000100 + .lobytes %1000000000101 + .lobytes %1000000000110 + .lobytes %1000000000111 + .lobytes %1000000001000 + .lobytes %111111111110000 + .lobytes %111111111110001 + .lobytes %111111111110010 + .lobytes %111111111110011 + .lobytes %111111111110100 + .lobytes %111111111110101 + .lobytes %111111111110110 + .lobytes %111111111110111 + .lobytes %111111111111000 + .lobytes %111111111111001 + .lobytes %111111111111010 + .lobytes %111111111111011 + .lobytes %111111111111100 + .lobytes %111111111111101 + .lobytes %111111111111110 + .lobytes %111111111111111 + .lobytes %1000000000000000 + .lobytes %1000000000000001 + .lobytes %1000000000000010 + .lobytes %1000000000000011 + .lobytes %1000000000000100 + .lobytes %1000000000000101 + .lobytes %1000000000000110 + .lobytes %1000000000000111 + .lobytes %1000000000001000 + .lobytes %1000000000001001 + .lobytes %1000000000001010 + .lobytes %1000000000001011 + .lobytes %1001111111100001 + .lobytes %1001111111100010 + .lobytes %1001111111100011 + .lobytes %1001111111100100 + .lobytes %1001111111100101 + .lobytes %1001111111100110 + .lobytes %1001111111100111 + .lobytes %1001111111101000 + .lobytes %1001111111101001 + .lobytes %1001111111101010 + .lobytes %1001111111101011 + .lobytes %1001111111101100 + .lobytes %1001111111101101 + .lobytes %1001111111101110 + .lobytes %1001111111101111 + .lobytes %1001111111110000 + .lobytes %1001111111110001 + .lobytes %1001111111110010 + .lobytes %1001111111110011 + .lobytes %1001111111110100 + .lobytes %1001111111110101 + .lobytes %1001111111110110 + .lobytes %1001111111110111 + .lobytes %1001111111111000 + .lobytes %1001111111111001 + .lobytes %1001111111111010 + .lobytes %1001111111111011 + .lobytes %1001111111111100 + .lobytes %1001111111111101 + .lobytes %1001111111111110 + .lobytes %1001111111111111 + .lobytes %1010000000000000 + .lobytes %1010000000000001 + .lobytes %1010000000000010 + .lobytes %1010000000000011 + .lobytes %1010000000000100 + .lobytes %1010000000000101 + .lobytes %1010000000000110 + .lobytes %1010000000000111 + .lobytes %1010000000001000 + .lobytes %1010000000001001 + .lobytes %1010000000001010 + .lobytes %1010000000001011 + .lobytes %1010000000001100 + .lobytes %1010000000001101 + .lobytes %1010000000001110 + .lobytes %1010000000001111 + .lobytes %1010111111100001 + .lobytes %1010111111100010 + .lobytes %1010111111100011 + .lobytes %1010111111100100 + .lobytes %1010111111100101 + .lobytes %1010111111100110 + .lobytes %1010111111100111 + .lobytes %1010111111101000 + .lobytes %1010111111101001 + .lobytes %1010111111101010 + .lobytes %1010111111101011 + .lobytes %1010111111101100 + .lobytes %1010111111101101 + .lobytes %1010111111101110 + .lobytes %1010111111101111 + .lobytes %1010111111110000 + .lobytes %1010111111110001 + .lobytes %1010111111110010 + .lobytes %1010111111110011 + .lobytes %1010111111110100 + .lobytes %1010111111110101 + .lobytes %1010111111110110 + .lobytes %1010111111110111 + .lobytes %1010111111111000 + .lobytes %1010111111111001 + .lobytes %1010111111111010 + .lobytes %1010111111111011 + .lobytes %1010111111111100 + .lobytes %1010111111111101 + .lobytes %1010111111111110 + .lobytes %1010111111111111 + .lobytes %1011000000000000 + .lobytes %1011000000000001 + .lobytes %1011000000000010 + .lobytes %1011000000000011 + .lobytes %1011000000000100 + .lobytes %1011000000000101 + .lobytes %1011000000000110 + .lobytes %1011000000000111 + .lobytes %1011000000001000 + .lobytes %1011000000001001 + .lobytes %1011000000001010 + .lobytes %1011000000001011 + .lobytes %1011000000001100 + .lobytes %1011000000001101 + .lobytes %1011000000001110 + .lobytes %1011000000001111 + .lobytes %1011111111100001 + .lobytes %1011111111100010 + .lobytes %1011111111100011 + .lobytes %1011111111100100 + .lobytes %1011111111100101 + .lobytes %1011111111100110 + .lobytes %1011111111100111 + .lobytes %1011111111101000 + .lobytes %1011111111101001 + .lobytes %1011111111101010 + .lobytes %1011111111101011 + .lobytes %1011111111101100 + .lobytes %1011111111101101 + .lobytes %1011111111101110 + .lobytes %1011111111101111 + .lobytes %1011111111110000 + .lobytes %1011111111110001 + .lobytes %1011111111110010 + .lobytes %1011111111110011 + .lobytes %1011111111110100 + .lobytes %1011111111110101 + .lobytes %1011111111110110 + .lobytes %1011111111110111 + .lobytes %1011111111111000 + .lobytes %1011111111111001 + .lobytes %1011111111111010 + .lobytes %1011111111111011 + .lobytes %1011111111111100 + .lobytes %1011111111111101 + .lobytes %1011111111111110 + .lobytes %1011111111111111 + .lobytes %1100000000000000 + .lobytes %1100000000000001 + .lobytes %1100000000000010 + .lobytes %1100000000000011 + .lobytes %1100000000000100 + .lobytes %1100000000000101 + .lobytes %1100000000000110 + .lobytes %1100000000000111 + .lobytes %1100000000001000 + .lobytes %1100000000001001 + .lobytes %1100000000001010 + .lobytes %1100000000001011 + .lobytes %1100000000001100 + .lobytes %1100000000001101 + .lobytes %1100000000001110 + .lobytes %1100000000001111 + .lobytes %1100111111100001 + .lobytes %1100111111100010 + .lobytes %1100111111100011 + .lobytes %1100111111100100 + .lobytes %1100111111100101 + .lobytes %1100111111100110 + .lobytes %1100111111100111 + .lobytes %1100111111101000 + .lobytes %1100111111101001 + .lobytes %1100111111101010 + .lobytes %1100111111101011 + .lobytes %1100111111101100 + .lobytes %1100111111101101 + .lobytes %1100111111101110 + .lobytes %1100111111101111 + .lobytes %1100111111110000 + .lobytes %1100111111110001 + .lobytes %1100111111110010 + .lobytes %1100111111110011 + .lobytes %1100111111110100 + .lobytes %1100111111110101 + .lobytes %1100111111110110 + .lobytes %1100111111110111 + .lobytes %1100111111111000 + .lobytes %1100111111111001 + .lobytes %1100111111111010 + .lobytes %1100111111111011 + .lobytes %1100111111111100 + .lobytes %1100111111111101 + .lobytes %1100111111111110 + .lobytes %1100111111111111 + .lobytes %1101000000000000 + .lobytes %1101000000000001 + .lobytes %1101000000000010 + .lobytes %1101000000000011 + .lobytes %1101000000000100 + .lobytes %1101000000000101 + .lobytes %1101000000000110 + .lobytes %1101000000000111 + .lobytes %1101000000001000 + .lobytes %1101000000001001 + .lobytes %1101000000001010 + .lobytes %1101000000001011 + .lobytes %1101000000001100 + .lobytes %1101000000001101 + .lobytes %1101000000001110 + .lobytes %1101000000001111 + .lobytes %1101111111100001 + .lobytes %1101111111100010 + .lobytes %1101111111100011 + .lobytes %1101111111100100 + .lobytes %1101111111100101 + .lobytes %1101111111100110 + .lobytes %1101111111100111 + .lobytes %1101111111101000 + .lobytes %1101111111101001 + .lobytes %1101111111101010 + .lobytes %1101111111101011 + .lobytes %1101111111101100 + .lobytes %1101111111101101 + .lobytes %1101111111101110 + .lobytes %1101111111101111 + .lobytes %1101111111110000 + .lobytes %1101111111110001 + .lobytes %1101111111110010 + .lobytes %1101111111110011 + .lobytes %1101111111110100 + .lobytes %1101111111110101 + .lobytes %1101111111110110 + .lobytes %1101111111110111 + .lobytes %1101111111111000 + .lobytes %1101111111111001 + .lobytes %1101111111111010 + .lobytes %1101111111111011 + .lobytes %1101111111111100 + .lobytes %1101111111111101 + .lobytes %1101111111111110 + .lobytes %1101111111111111 + .lobytes %1110000000000000 + .lobytes %1110000000000001 + .lobytes %1110000000000010 + .lobytes %1110000000000011 + .lobytes %1110000000000100 + .lobytes %1110000000000101 + .lobytes %1110000000000110 + .lobytes %1110000000000111 + .lobytes %1110000000001000 + .lobytes %1110000000001001 + .lobytes %1110000000001010 + .lobytes %1110000000001011 + .lobytes %1110000000001100 + .lobytes %1110000000001101 + .lobytes %1110000000001110 + .lobytes %1110000000001111 + .lobytes %1110111111100001 + .lobytes %1110111111100010 + .lobytes %1110111111100011 + .lobytes %1110111111100100 + .lobytes %1110111111100101 + .lobytes %1110111111100110 + .lobytes %1110111111100111 + .lobytes %1110111111101000 + .lobytes %1110111111101001 + .lobytes %1110111111101010 + .lobytes %1110111111101011 + .lobytes %1110111111101100 + .lobytes %1110111111101101 + .lobytes %1110111111101110 + .lobytes %1110111111101111 + .lobytes %1110111111110000 + .lobytes %1110111111110001 + .lobytes %1110111111110010 + .lobytes %1110111111110011 + .lobytes %1110111111110100 + .lobytes %1110111111110101 + .lobytes %1110111111110110 + .lobytes %1110111111110111 + .lobytes %1110111111111000 + .lobytes %1110111111111001 + .lobytes %1110111111111010 + .lobytes %1110111111111011 + .lobytes %1110111111111100 + .lobytes %1110111111111101 + .lobytes %1110111111111110 + .lobytes %1110111111111111 + .lobytes %1111000000000000 + .lobytes %1111000000000001 + .lobytes %1111000000000010 + .lobytes %1111000000000011 + .lobytes %1111000000000100 + .lobytes %1111000000000101 + .lobytes %1111000000000110 + .lobytes %1111000000000111 + .lobytes %1111000000001000 + .lobytes %1111000000001001 + .lobytes %1111000000001010 + .lobytes %1111000000001011 + .lobytes %1111000000001100 + .lobytes %1111000000001101 + .lobytes %1111000000001110 + .lobytes %1111000000001111 + .lobytes %1111111111100001 + .lobytes %1111111111100010 + .lobytes %1111111111100011 + .lobytes %1111111111100100 + .lobytes %1111111111100101 + .lobytes %1111111111100110 + .lobytes %1111111111100111 + .lobytes %1111111111101000 + .lobytes %1111111111101001 + .lobytes %1111111111101010 + .lobytes %1111111111101011 + .lobytes %1111111111101100 + .lobytes %1111111111101101 + .lobytes %1111111111101110 + .lobytes %1111111111101111 + .lobytes %1111111111110000 + .lobytes %1111111111110001 + .lobytes %1111111111110010 + .lobytes %1111111111110011 + .lobytes %1111111111110100 + .lobytes %1111111111110101 + .lobytes %1111111111110110 + .lobytes %1111111111110111 + .lobytes %1111111111111000 + .lobytes %1111111111111001 + .lobytes %1111111111111010 + .lobytes %1111111111111011 + .lobytes %1111111111111100 + .lobytes %1111111111111101 + .lobytes %1111111111111110 + .lobytes %1111111111111111 + + ; binary values, full length + .lobytes %0000000000000000 + .lobytes %0000000000000001 + .lobytes %0000000000000010 + .lobytes %0000000000000011 + .lobytes %0000000000000100 + .lobytes %0000000000000101 + .lobytes %0000000000000110 + .lobytes %0000000000000111 + .lobytes %0000000000001000 + .lobytes %0000000000001001 + .lobytes %0000000000001010 + .lobytes %0000000000001011 + .lobytes %0000000000001100 + .lobytes %0000000000001101 + .lobytes %0000000000001110 + .lobytes %0000000000001111 + .lobytes %0000000000010000 + .lobytes %0000000000010001 + .lobytes %0000000000010010 + .lobytes %0000000000010011 + .lobytes %0000000001110000 + .lobytes %0000000001110001 + .lobytes %0000000001110010 + .lobytes %0000000001110011 + .lobytes %0000000001110100 + .lobytes %0000000001110101 + .lobytes %0000000001110110 + .lobytes %0000000001110111 + .lobytes %0000000001111000 + .lobytes %0000000001111001 + .lobytes %0000000001111010 + .lobytes %0000000001111011 + .lobytes %0000000001111100 + .lobytes %0000000001111101 + .lobytes %0000000001111110 + .lobytes %0000000001111111 + .lobytes %0000000010000000 + .lobytes %0000000010000001 + .lobytes %0000000010000010 + .lobytes %0000000010000011 + .lobytes %0000000010000100 + .lobytes %0000000010000101 + .lobytes %0000000010000110 + .lobytes %0000000011110000 + .lobytes %0000000011110001 + .lobytes %0000000011110010 + .lobytes %0000000011110011 + .lobytes %0000000011110100 + .lobytes %0000000011110101 + .lobytes %0000000011110110 + .lobytes %0000000011110111 + .lobytes %0000000011111000 + .lobytes %0000000011111001 + .lobytes %0000000011111010 + .lobytes %0000000011111011 + .lobytes %0000000011111100 + .lobytes %0000000011111101 + .lobytes %0000000011111110 + .lobytes %0000000011111111 + .lobytes %0000000100000000 + .lobytes %0000000100000001 + .lobytes %0000000100000010 + .lobytes %0000000100000011 + .lobytes %0000111111010010 + .lobytes %0000111111010011 + .lobytes %0000111111010100 + .lobytes %0000111111010101 + .lobytes %0000111111010110 + .lobytes %0000111111010111 + .lobytes %0000111111011000 + .lobytes %0000111111011001 + .lobytes %0000111111011010 + .lobytes %0000111111011011 + .lobytes %0000111111011100 + .lobytes %0000111111011101 + .lobytes %0000111111011110 + .lobytes %0000111111011111 + .lobytes %0000111111100000 + .lobytes %0000111111100001 + .lobytes %0000111111100010 + .lobytes %0000111111100011 + .lobytes %0000111111100100 + .lobytes %0000111111100101 + .lobytes %0000111111100110 + .lobytes %0000111111100111 + .lobytes %0000111111101000 + .lobytes %0000111111101001 + .lobytes %0000111111101010 + .lobytes %0000111111101011 + .lobytes %0000111111101100 + .lobytes %0000111111101101 + .lobytes %0000111111101110 + .lobytes %0000111111101111 + .lobytes %0000111111110000 + .lobytes %0000111111110001 + .lobytes %0000111111110010 + .lobytes %0000111111110011 + .lobytes %0000111111110100 + .lobytes %0000111111110101 + .lobytes %0000111111110110 + .lobytes %0000111111110111 + .lobytes %0000111111111000 + .lobytes %0000111111111001 + .lobytes %0000111111111010 + .lobytes %0000111111111011 + .lobytes %0000111111111100 + .lobytes %0000111111111101 + .lobytes %0000111111111110 + .lobytes %0000111111111111 + .lobytes %0001000000000000 + .lobytes %0001000000000001 + .lobytes %0001000000000010 + .lobytes %0001000000000011 + .lobytes %0001000000000100 + .lobytes %0001000000000101 + .lobytes %0001000000000110 + .lobytes %0001000000000111 + .lobytes %0001000000001000 + .lobytes %0111111111110000 + .lobytes %0111111111110001 + .lobytes %0111111111110010 + .lobytes %0111111111110011 + .lobytes %0111111111110100 + .lobytes %0111111111110101 + .lobytes %0111111111110110 + .lobytes %0111111111110111 + .lobytes %0111111111111000 + .lobytes %0111111111111001 + .lobytes %0111111111111010 + .lobytes %0111111111111011 + .lobytes %0111111111111100 + .lobytes %0111111111111101 + .lobytes %0111111111111110 + .lobytes %0111111111111111 + .lobytes %1000000000000000 + .lobytes %1000000000000001 + .lobytes %1000000000000010 + .lobytes %1000000000000011 + .lobytes %1000000000000100 + .lobytes %1000000000000101 + .lobytes %1000000000000110 + .lobytes %1000000000000111 + .lobytes %1000000000001000 + .lobytes %1000000000001001 + .lobytes %1000000000001010 + .lobytes %1000000000001011 + .lobytes %1001111111100001 + .lobytes %1001111111100010 + .lobytes %1001111111100011 + .lobytes %1001111111100100 + .lobytes %1001111111100101 + .lobytes %1001111111100110 + .lobytes %1001111111100111 + .lobytes %1001111111101000 + .lobytes %1001111111101001 + .lobytes %1001111111101010 + .lobytes %1001111111101011 + .lobytes %1001111111101100 + .lobytes %1001111111101101 + .lobytes %1001111111101110 + .lobytes %1001111111101111 + .lobytes %1001111111110000 + .lobytes %1001111111110001 + .lobytes %1001111111110010 + .lobytes %1001111111110011 + .lobytes %1001111111110100 + .lobytes %1001111111110101 + .lobytes %1001111111110110 + .lobytes %1001111111110111 + .lobytes %1001111111111000 + .lobytes %1001111111111001 + .lobytes %1001111111111010 + .lobytes %1001111111111011 + .lobytes %1001111111111100 + .lobytes %1001111111111101 + .lobytes %1001111111111110 + .lobytes %1001111111111111 + .lobytes %1010000000000000 + .lobytes %1010000000000001 + .lobytes %1010000000000010 + .lobytes %1010000000000011 + .lobytes %1010000000000100 + .lobytes %1010000000000101 + .lobytes %1010000000000110 + .lobytes %1010000000000111 + .lobytes %1010000000001000 + .lobytes %1010000000001001 + .lobytes %1010000000001010 + .lobytes %1010000000001011 + .lobytes %1010000000001100 + .lobytes %1010000000001101 + .lobytes %1010000000001110 + .lobytes %1010000000001111 + .lobytes %1010111111100001 + .lobytes %1010111111100010 + .lobytes %1010111111100011 + .lobytes %1010111111100100 + .lobytes %1010111111100101 + .lobytes %1010111111100110 + .lobytes %1010111111100111 + .lobytes %1010111111101000 + .lobytes %1010111111101001 + .lobytes %1010111111101010 + .lobytes %1010111111101011 + .lobytes %1010111111101100 + .lobytes %1010111111101101 + .lobytes %1010111111101110 + .lobytes %1010111111101111 + .lobytes %1010111111110000 + .lobytes %1010111111110001 + .lobytes %1010111111110010 + .lobytes %1010111111110011 + .lobytes %1010111111110100 + .lobytes %1010111111110101 + .lobytes %1010111111110110 + .lobytes %1010111111110111 + .lobytes %1010111111111000 + .lobytes %1010111111111001 + .lobytes %1010111111111010 + .lobytes %1010111111111011 + .lobytes %1010111111111100 + .lobytes %1010111111111101 + .lobytes %1010111111111110 + .lobytes %1010111111111111 + .lobytes %1011000000000000 + .lobytes %1011000000000001 + .lobytes %1011000000000010 + .lobytes %1011000000000011 + .lobytes %1011000000000100 + .lobytes %1011000000000101 + .lobytes %1011000000000110 + .lobytes %1011000000000111 + .lobytes %1011000000001000 + .lobytes %1011000000001001 + .lobytes %1011000000001010 + .lobytes %1011000000001011 + .lobytes %1011000000001100 + .lobytes %1011000000001101 + .lobytes %1011000000001110 + .lobytes %1011000000001111 + .lobytes %1011111111100001 + .lobytes %1011111111100010 + .lobytes %1011111111100011 + .lobytes %1011111111100100 + .lobytes %1011111111100101 + .lobytes %1011111111100110 + .lobytes %1011111111100111 + .lobytes %1011111111101000 + .lobytes %1011111111101001 + .lobytes %1011111111101010 + .lobytes %1011111111101011 + .lobytes %1011111111101100 + .lobytes %1011111111101101 + .lobytes %1011111111101110 + .lobytes %1011111111101111 + .lobytes %1011111111110000 + .lobytes %1011111111110001 + .lobytes %1011111111110010 + .lobytes %1011111111110011 + .lobytes %1011111111110100 + .lobytes %1011111111110101 + .lobytes %1011111111110110 + .lobytes %1011111111110111 + .lobytes %1011111111111000 + .lobytes %1011111111111001 + .lobytes %1011111111111010 + .lobytes %1011111111111011 + .lobytes %1011111111111100 + .lobytes %1011111111111101 + .lobytes %1011111111111110 + .lobytes %1011111111111111 + .lobytes %1100000000000000 + .lobytes %1100000000000001 + .lobytes %1100000000000010 + .lobytes %1100000000000011 + .lobytes %1100000000000100 + .lobytes %1100000000000101 + .lobytes %1100000000000110 + .lobytes %1100000000000111 + .lobytes %1100000000001000 + .lobytes %1100000000001001 + .lobytes %1100000000001010 + .lobytes %1100000000001011 + .lobytes %1100000000001100 + .lobytes %1100000000001101 + .lobytes %1100000000001110 + .lobytes %1100000000001111 + .lobytes %1100111111100001 + .lobytes %1100111111100010 + .lobytes %1100111111100011 + .lobytes %1100111111100100 + .lobytes %1100111111100101 + .lobytes %1100111111100110 + .lobytes %1100111111100111 + .lobytes %1100111111101000 + .lobytes %1100111111101001 + .lobytes %1100111111101010 + .lobytes %1100111111101011 + .lobytes %1100111111101100 + .lobytes %1100111111101101 + .lobytes %1100111111101110 + .lobytes %1100111111101111 + .lobytes %1100111111110000 + .lobytes %1100111111110001 + .lobytes %1100111111110010 + .lobytes %1100111111110011 + .lobytes %1100111111110100 + .lobytes %1100111111110101 + .lobytes %1100111111110110 + .lobytes %1100111111110111 + .lobytes %1100111111111000 + .lobytes %1100111111111001 + .lobytes %1100111111111010 + .lobytes %1100111111111011 + .lobytes %1100111111111100 + .lobytes %1100111111111101 + .lobytes %1100111111111110 + .lobytes %1100111111111111 + .lobytes %1101000000000000 + .lobytes %1101000000000001 + .lobytes %1101000000000010 + .lobytes %1101000000000011 + .lobytes %1101000000000100 + .lobytes %1101000000000101 + .lobytes %1101000000000110 + .lobytes %1101000000000111 + .lobytes %1101000000001000 + .lobytes %1101000000001001 + .lobytes %1101000000001010 + .lobytes %1101000000001011 + .lobytes %1101000000001100 + .lobytes %1101000000001101 + .lobytes %1101000000001110 + .lobytes %1101000000001111 + .lobytes %1101111111100001 + .lobytes %1101111111100010 + .lobytes %1101111111100011 + .lobytes %1101111111100100 + .lobytes %1101111111100101 + .lobytes %1101111111100110 + .lobytes %1101111111100111 + .lobytes %1101111111101000 + .lobytes %1101111111101001 + .lobytes %1101111111101010 + .lobytes %1101111111101011 + .lobytes %1101111111101100 + .lobytes %1101111111101101 + .lobytes %1101111111101110 + .lobytes %1101111111101111 + .lobytes %1101111111110000 + .lobytes %1101111111110001 + .lobytes %1101111111110010 + .lobytes %1101111111110011 + .lobytes %1101111111110100 + .lobytes %1101111111110101 + .lobytes %1101111111110110 + .lobytes %1101111111110111 + .lobytes %1101111111111000 + .lobytes %1101111111111001 + .lobytes %1101111111111010 + .lobytes %1101111111111011 + .lobytes %1101111111111100 + .lobytes %1101111111111101 + .lobytes %1101111111111110 + .lobytes %1101111111111111 + .lobytes %1110000000000000 + .lobytes %1110000000000001 + .lobytes %1110000000000010 + .lobytes %1110000000000011 + .lobytes %1110000000000100 + .lobytes %1110000000000101 + .lobytes %1110000000000110 + .lobytes %1110000000000111 + .lobytes %1110000000001000 + .lobytes %1110000000001001 + .lobytes %1110000000001010 + .lobytes %1110000000001011 + .lobytes %1110000000001100 + .lobytes %1110000000001101 + .lobytes %1110000000001110 + .lobytes %1110000000001111 + .lobytes %1110111111100001 + .lobytes %1110111111100010 + .lobytes %1110111111100011 + .lobytes %1110111111100100 + .lobytes %1110111111100101 + .lobytes %1110111111100110 + .lobytes %1110111111100111 + .lobytes %1110111111101000 + .lobytes %1110111111101001 + .lobytes %1110111111101010 + .lobytes %1110111111101011 + .lobytes %1110111111101100 + .lobytes %1110111111101101 + .lobytes %1110111111101110 + .lobytes %1110111111101111 + .lobytes %1110111111110000 + .lobytes %1110111111110001 + .lobytes %1110111111110010 + .lobytes %1110111111110011 + .lobytes %1110111111110100 + .lobytes %1110111111110101 + .lobytes %1110111111110110 + .lobytes %1110111111110111 + .lobytes %1110111111111000 + .lobytes %1110111111111001 + .lobytes %1110111111111010 + .lobytes %1110111111111011 + .lobytes %1110111111111100 + .lobytes %1110111111111101 + .lobytes %1110111111111110 + .lobytes %1110111111111111 + .lobytes %1111000000000000 + .lobytes %1111000000000001 + .lobytes %1111000000000010 + .lobytes %1111000000000011 + .lobytes %1111000000000100 + .lobytes %1111000000000101 + .lobytes %1111000000000110 + .lobytes %1111000000000111 + .lobytes %1111000000001000 + .lobytes %1111000000001001 + .lobytes %1111000000001010 + .lobytes %1111000000001011 + .lobytes %1111000000001100 + .lobytes %1111000000001101 + .lobytes %1111000000001110 + .lobytes %1111000000001111 + .lobytes %1111111111100001 + .lobytes %1111111111100010 + .lobytes %1111111111100011 + .lobytes %1111111111100100 + .lobytes %1111111111100101 + .lobytes %1111111111100110 + .lobytes %1111111111100111 + .lobytes %1111111111101000 + .lobytes %1111111111101001 + .lobytes %1111111111101010 + .lobytes %1111111111101011 + .lobytes %1111111111101100 + .lobytes %1111111111101101 + .lobytes %1111111111101110 + .lobytes %1111111111101111 + .lobytes %1111111111110000 + .lobytes %1111111111110001 + .lobytes %1111111111110010 + .lobytes %1111111111110011 + .lobytes %1111111111110100 + .lobytes %1111111111110101 + .lobytes %1111111111110110 + .lobytes %1111111111110111 + .lobytes %1111111111111000 + .lobytes %1111111111111001 + .lobytes %1111111111111010 + .lobytes %1111111111111011 + .lobytes %1111111111111100 + .lobytes %1111111111111101 + .lobytes %1111111111111110 + .lobytes %1111111111111111 + + ; multiple values on one line, decimal + .lobytes 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .lobytes 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .lobytes 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .lobytes 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .lobytes 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + .lobytes 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 + .lobytes 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 + .lobytes 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 + .lobytes 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 + .lobytes 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 + .lobytes 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 + .lobytes 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 + .lobytes 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 + .lobytes 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 + .lobytes 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 + .lobytes 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 + .lobytes 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 + .lobytes 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 + .lobytes 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 + .lobytes 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 + .lobytes 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 + .lobytes 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 + .lobytes 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 + .lobytes 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 + + ; multiple values on one line, hex + .lobytes $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .lobytes $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .lobytes $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .lobytes $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .lobytes $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + .lobytes $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f + .lobytes $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef + .lobytes $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff + .lobytes $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f + .lobytes $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff + .lobytes $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f + .lobytes $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff + .lobytes $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f + .lobytes $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff + .lobytes $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f + .lobytes $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff + .lobytes $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f + .lobytes $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff + .lobytes $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f + .lobytes $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff + .lobytes $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f + .lobytes $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff + .lobytes $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f + .lobytes $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff + + ; multiple values on one line, alternative hex + .lobytes 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .lobytes 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .lobytes 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .lobytes 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .lobytes 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + .lobytes 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh + .lobytes 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh + .lobytes 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh + .lobytes 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh + .lobytes 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh + .lobytes 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh + .lobytes 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh + .lobytes 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh + .lobytes 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh + .lobytes 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh + .lobytes 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh + .lobytes 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh + .lobytes 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh + .lobytes 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh + .lobytes 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh + .lobytes 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh + .lobytes 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh + .lobytes 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh + .lobytes 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh + + ; mix some variants + .lobytes 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index c152db7be..8eed4e409 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -49,16 +49,24 @@ $(WORKDIR)/$1.bin: $1.s $(ISEQUAL) $(if $(QUIET),echo asm/$1.bin) # compile without generating listing - $(CA65) -t none -o $$(@:.bin=.o) $$< + $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) 2>&1 $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib +ifneq ($(wildcard $1.err-ref),) + $(ISEQUAL) $1.err-ref $$(@:.bin=.err) +endif + ifneq ($(wildcard $1.bin-ref),) $(ISEQUAL) $1.bin-ref $$@ endif - $(CA65) -t none -l $$(@:.bin=.list.orig) -o $$(@:.bin=.list-o) $$< + $(CA65) -t none -l $$(@:.bin=.list.orig) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib +ifneq ($(wildcard $1.err-ref),) + $(ISEQUAL) $1.err-ref $$(@:.bin=.list-err) +endif + # check if the result bin is the same as without listing file $(ISEQUAL) $$@ $$(@:.bin=.list-bin) @@ -66,7 +74,7 @@ ifneq ($(wildcard $1.list-ref),) # we have a reference file, compare that, too # remove first line which contains a version number - tail -n +2 $$(@:.bin=.lst.orig) > $$(@:.bin=.lst) + tail -n +2 $$(@:.bin=.list.orig) > $$(@:.bin=.lst) $(ISEQUAL) $1.list-ref $$(@:.bin=.lst) endif From a9e0dba991da483756ce893a99519d7cb0fa8c7c Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Thu, 16 Jun 2022 21:59:37 +0200 Subject: [PATCH 1312/2710] Remove TAB to comply to style --- test/asm/listing/020-asciiz.list-ref | 20 +- test/asm/listing/020-asciiz.s | 20 +- test/asm/listing/100-byte.list-ref | 7008 ++++++------- test/asm/listing/100-byte.s | 7008 ++++++------- test/asm/listing/101-byt.list-ref | 7008 ++++++------- test/asm/listing/101-byt.s | 7008 ++++++------- test/asm/listing/102-word.list-ref | 12114 ++++++++++----------- test/asm/listing/102-word.s | 12114 ++++++++++----------- test/asm/listing/103-dbyt.list-ref | 12114 ++++++++++----------- test/asm/listing/103-dbyt.s | 12114 ++++++++++----------- test/asm/listing/104-dword.list-ref | 9710 ++++++++--------- test/asm/listing/104-dword.s | 9710 ++++++++--------- test/asm/listing/105-faraddr.list-ref | 13396 ++++++++++++------------ test/asm/listing/105-faraddr.s | 13396 ++++++++++++------------ test/asm/listing/106-hibytes.list-ref | 12114 ++++++++++----------- test/asm/listing/106-hibytes.s | 12114 ++++++++++----------- test/asm/listing/107-lobytes.list-ref | 12114 ++++++++++----------- test/asm/listing/107-lobytes.s | 12114 ++++++++++----------- 18 files changed, 85598 insertions(+), 85598 deletions(-) diff --git a/test/asm/listing/020-asciiz.list-ref b/test/asm/listing/020-asciiz.list-ref index 25196a9ed..a090f06a4 100644 --- a/test/asm/listing/020-asciiz.list-ref +++ b/test/asm/listing/020-asciiz.list-ref @@ -4,27 +4,27 @@ Current file: 020-asciiz.s 000000r 1 ; 2022-06-15 Spiro Trikaliotis 000000r 1 000000r 1 -000000r 1 ; upper case pseudo-op -000000r 1 00 .ASCIIZ "" -000001r 1 48 65 6C 6C .ASCIIZ "Hello World" +000000r 1 ; upper case pseudo-op +000000r 1 00 .ASCIIZ "" +000001r 1 48 65 6C 6C .ASCIIZ "Hello World" 000005r 1 6F 20 57 6F 000009r 1 72 6C 64 00 -00000Dr 1 48 65 6C 6C .ASCIIZ "Hello ","World" +00000Dr 1 48 65 6C 6C .ASCIIZ "Hello ","World" 000011r 1 6F 20 57 6F 000015r 1 72 6C 64 00 -000019r 1 48 65 6C 6C .ASCIIZ "Hello ","World"," ","I"," ","am"," ","testing" +000019r 1 48 65 6C 6C .ASCIIZ "Hello ","World"," ","I"," ","am"," ","testing" 00001Dr 1 6F 20 57 6F 000021r 1 72 6C 64 20 000032r 1 -000032r 1 ; lower case pseudo-op -000032r 1 00 .asciiz "" -000033r 1 48 65 6C 6C .asciiz "Hello World" +000032r 1 ; lower case pseudo-op +000032r 1 00 .asciiz "" +000033r 1 48 65 6C 6C .asciiz "Hello World" 000037r 1 6F 20 57 6F 00003Br 1 72 6C 64 00 -00003Fr 1 48 65 6C 6C .asciiz "Hello ","World" +00003Fr 1 48 65 6C 6C .asciiz "Hello ","World" 000043r 1 6F 20 57 6F 000047r 1 72 6C 64 00 -00004Br 1 48 65 6C 6C .asciiz "Hello ","World"," ","I"," ","am"," ","testing" +00004Br 1 48 65 6C 6C .asciiz "Hello ","World"," ","I"," ","am"," ","testing" 00004Fr 1 6F 20 57 6F 000053r 1 72 6C 64 20 000063r 1 diff --git a/test/asm/listing/020-asciiz.s b/test/asm/listing/020-asciiz.s index dc02059eb..3b554e52f 100644 --- a/test/asm/listing/020-asciiz.s +++ b/test/asm/listing/020-asciiz.s @@ -1,14 +1,14 @@ ; 2022-06-15 Spiro Trikaliotis - ; upper case pseudo-op - .ASCIIZ "" - .ASCIIZ "Hello World" - .ASCIIZ "Hello ","World" - .ASCIIZ "Hello ","World"," ","I"," ","am"," ","testing" + ; upper case pseudo-op + .ASCIIZ "" + .ASCIIZ "Hello World" + .ASCIIZ "Hello ","World" + .ASCIIZ "Hello ","World"," ","I"," ","am"," ","testing" - ; lower case pseudo-op - .asciiz "" - .asciiz "Hello World" - .asciiz "Hello ","World" - .asciiz "Hello ","World"," ","I"," ","am"," ","testing" + ; lower case pseudo-op + .asciiz "" + .asciiz "Hello World" + .asciiz "Hello ","World" + .asciiz "Hello ","World"," ","I"," ","am"," ","testing" diff --git a/test/asm/listing/100-byte.list-ref b/test/asm/listing/100-byte.list-ref index 2ee0df392..1c091efff 100644 --- a/test/asm/listing/100-byte.list-ref +++ b/test/asm/listing/100-byte.list-ref @@ -4,3649 +4,3649 @@ Current file: 100-byte.s 000000r 1 ; 2022-06-15 Spiro Trikaliotis 000000r 1 000000r 1 -000000r 1 ; upper case pseudo-op -000000r 1 00 .BYTE 0 -000001r 1 01 .BYTE 1 -000002r 1 02 .BYTE 2 -000003r 1 03 .BYTE 3 -000004r 1 04 .BYTE 4 -000005r 1 05 .BYTE 5 -000006r 1 06 .BYTE 6 -000007r 1 07 .BYTE 7 -000008r 1 08 .BYTE 8 -000009r 1 09 .BYTE 9 -00000Ar 1 0A .BYTE 10 -00000Br 1 0B .BYTE 11 -00000Cr 1 0C .BYTE 12 -00000Dr 1 0D .BYTE 13 -00000Er 1 0E .BYTE 14 -00000Fr 1 0F .BYTE 15 -000010r 1 10 .BYTE 16 -000011r 1 11 .BYTE 17 -000012r 1 12 .BYTE 18 -000013r 1 13 .BYTE 19 -000014r 1 14 .BYTE 20 -000015r 1 15 .BYTE 21 -000016r 1 16 .BYTE 22 -000017r 1 17 .BYTE 23 -000018r 1 18 .BYTE 24 -000019r 1 19 .BYTE 25 -00001Ar 1 1A .BYTE 26 -00001Br 1 1B .BYTE 27 -00001Cr 1 1C .BYTE 28 -00001Dr 1 1D .BYTE 29 -00001Er 1 1E .BYTE 30 -00001Fr 1 1F .BYTE 31 -000020r 1 20 .BYTE 32 -000021r 1 21 .BYTE 33 -000022r 1 22 .BYTE 34 -000023r 1 23 .BYTE 35 -000024r 1 24 .BYTE 36 -000025r 1 25 .BYTE 37 -000026r 1 26 .BYTE 38 -000027r 1 27 .BYTE 39 -000028r 1 28 .BYTE 40 -000029r 1 29 .BYTE 41 -00002Ar 1 2A .BYTE 42 -00002Br 1 2B .BYTE 43 -00002Cr 1 2C .BYTE 44 -00002Dr 1 2D .BYTE 45 -00002Er 1 2E .BYTE 46 -00002Fr 1 2F .BYTE 47 -000030r 1 30 .BYTE 48 -000031r 1 31 .BYTE 49 -000032r 1 32 .BYTE 50 -000033r 1 33 .BYTE 51 -000034r 1 34 .BYTE 52 -000035r 1 35 .BYTE 53 -000036r 1 36 .BYTE 54 -000037r 1 37 .BYTE 55 -000038r 1 38 .BYTE 56 -000039r 1 39 .BYTE 57 -00003Ar 1 3A .BYTE 58 -00003Br 1 3B .BYTE 59 -00003Cr 1 3C .BYTE 60 -00003Dr 1 3D .BYTE 61 -00003Er 1 3E .BYTE 62 -00003Fr 1 3F .BYTE 63 -000040r 1 40 .BYTE 64 -000041r 1 41 .BYTE 65 -000042r 1 42 .BYTE 66 -000043r 1 43 .BYTE 67 -000044r 1 44 .BYTE 68 -000045r 1 45 .BYTE 69 -000046r 1 46 .BYTE 70 -000047r 1 47 .BYTE 71 -000048r 1 48 .BYTE 72 -000049r 1 49 .BYTE 73 -00004Ar 1 4A .BYTE 74 -00004Br 1 4B .BYTE 75 -00004Cr 1 4C .BYTE 76 -00004Dr 1 4D .BYTE 77 -00004Er 1 4E .BYTE 78 -00004Fr 1 4F .BYTE 79 -000050r 1 50 .BYTE 80 -000051r 1 51 .BYTE 81 -000052r 1 52 .BYTE 82 -000053r 1 53 .BYTE 83 -000054r 1 54 .BYTE 84 -000055r 1 55 .BYTE 85 -000056r 1 56 .BYTE 86 -000057r 1 57 .BYTE 87 -000058r 1 58 .BYTE 88 -000059r 1 59 .BYTE 89 -00005Ar 1 5A .BYTE 90 -00005Br 1 5B .BYTE 91 -00005Cr 1 5C .BYTE 92 -00005Dr 1 5D .BYTE 93 -00005Er 1 5E .BYTE 94 -00005Fr 1 5F .BYTE 95 -000060r 1 60 .BYTE 96 -000061r 1 61 .BYTE 97 -000062r 1 62 .BYTE 98 -000063r 1 63 .BYTE 99 -000064r 1 64 .BYTE 100 -000065r 1 65 .BYTE 101 -000066r 1 66 .BYTE 102 -000067r 1 67 .BYTE 103 -000068r 1 68 .BYTE 104 -000069r 1 69 .BYTE 105 -00006Ar 1 6A .BYTE 106 -00006Br 1 6B .BYTE 107 -00006Cr 1 6C .BYTE 108 -00006Dr 1 6D .BYTE 109 -00006Er 1 6E .BYTE 110 -00006Fr 1 6F .BYTE 111 -000070r 1 70 .BYTE 112 -000071r 1 71 .BYTE 113 -000072r 1 72 .BYTE 114 -000073r 1 73 .BYTE 115 -000074r 1 74 .BYTE 116 -000075r 1 75 .BYTE 117 -000076r 1 76 .BYTE 118 -000077r 1 77 .BYTE 119 -000078r 1 78 .BYTE 120 -000079r 1 79 .BYTE 121 -00007Ar 1 7A .BYTE 122 -00007Br 1 7B .BYTE 123 -00007Cr 1 7C .BYTE 124 -00007Dr 1 7D .BYTE 125 -00007Er 1 7E .BYTE 126 -00007Fr 1 7F .BYTE 127 -000080r 1 80 .BYTE 128 -000081r 1 81 .BYTE 129 -000082r 1 82 .BYTE 130 -000083r 1 83 .BYTE 131 -000084r 1 84 .BYTE 132 -000085r 1 85 .BYTE 133 -000086r 1 86 .BYTE 134 -000087r 1 87 .BYTE 135 -000088r 1 88 .BYTE 136 -000089r 1 89 .BYTE 137 -00008Ar 1 8A .BYTE 138 -00008Br 1 8B .BYTE 139 -00008Cr 1 8C .BYTE 140 -00008Dr 1 8D .BYTE 141 -00008Er 1 8E .BYTE 142 -00008Fr 1 8F .BYTE 143 -000090r 1 90 .BYTE 144 -000091r 1 91 .BYTE 145 -000092r 1 92 .BYTE 146 -000093r 1 93 .BYTE 147 -000094r 1 94 .BYTE 148 -000095r 1 95 .BYTE 149 -000096r 1 96 .BYTE 150 -000097r 1 97 .BYTE 151 -000098r 1 98 .BYTE 152 -000099r 1 99 .BYTE 153 -00009Ar 1 9A .BYTE 154 -00009Br 1 9B .BYTE 155 -00009Cr 1 9C .BYTE 156 -00009Dr 1 9D .BYTE 157 -00009Er 1 9E .BYTE 158 -00009Fr 1 9F .BYTE 159 -0000A0r 1 A0 .BYTE 160 -0000A1r 1 A1 .BYTE 161 -0000A2r 1 A2 .BYTE 162 -0000A3r 1 A3 .BYTE 163 -0000A4r 1 A4 .BYTE 164 -0000A5r 1 A5 .BYTE 165 -0000A6r 1 A6 .BYTE 166 -0000A7r 1 A7 .BYTE 167 -0000A8r 1 A8 .BYTE 168 -0000A9r 1 A9 .BYTE 169 -0000AAr 1 AA .BYTE 170 -0000ABr 1 AB .BYTE 171 -0000ACr 1 AC .BYTE 172 -0000ADr 1 AD .BYTE 173 -0000AEr 1 AE .BYTE 174 -0000AFr 1 AF .BYTE 175 -0000B0r 1 B0 .BYTE 176 -0000B1r 1 B1 .BYTE 177 -0000B2r 1 B2 .BYTE 178 -0000B3r 1 B3 .BYTE 179 -0000B4r 1 B4 .BYTE 180 -0000B5r 1 B5 .BYTE 181 -0000B6r 1 B6 .BYTE 182 -0000B7r 1 B7 .BYTE 183 -0000B8r 1 B8 .BYTE 184 -0000B9r 1 B9 .BYTE 185 -0000BAr 1 BA .BYTE 186 -0000BBr 1 BB .BYTE 187 -0000BCr 1 BC .BYTE 188 -0000BDr 1 BD .BYTE 189 -0000BEr 1 BE .BYTE 190 -0000BFr 1 BF .BYTE 191 -0000C0r 1 C0 .BYTE 192 -0000C1r 1 C1 .BYTE 193 -0000C2r 1 C2 .BYTE 194 -0000C3r 1 C3 .BYTE 195 -0000C4r 1 C4 .BYTE 196 -0000C5r 1 C5 .BYTE 197 -0000C6r 1 C6 .BYTE 198 -0000C7r 1 C7 .BYTE 199 -0000C8r 1 C8 .BYTE 200 -0000C9r 1 C9 .BYTE 201 -0000CAr 1 CA .BYTE 202 -0000CBr 1 CB .BYTE 203 -0000CCr 1 CC .BYTE 204 -0000CDr 1 CD .BYTE 205 -0000CEr 1 CE .BYTE 206 -0000CFr 1 CF .BYTE 207 -0000D0r 1 D0 .BYTE 208 -0000D1r 1 D1 .BYTE 209 -0000D2r 1 D2 .BYTE 210 -0000D3r 1 D3 .BYTE 211 -0000D4r 1 D4 .BYTE 212 -0000D5r 1 D5 .BYTE 213 -0000D6r 1 D6 .BYTE 214 -0000D7r 1 D7 .BYTE 215 -0000D8r 1 D8 .BYTE 216 -0000D9r 1 D9 .BYTE 217 -0000DAr 1 DA .BYTE 218 -0000DBr 1 DB .BYTE 219 -0000DCr 1 DC .BYTE 220 -0000DDr 1 DD .BYTE 221 -0000DEr 1 DE .BYTE 222 -0000DFr 1 DF .BYTE 223 -0000E0r 1 E0 .BYTE 224 -0000E1r 1 E1 .BYTE 225 -0000E2r 1 E2 .BYTE 226 -0000E3r 1 E3 .BYTE 227 -0000E4r 1 E4 .BYTE 228 -0000E5r 1 E5 .BYTE 229 -0000E6r 1 E6 .BYTE 230 -0000E7r 1 E7 .BYTE 231 -0000E8r 1 E8 .BYTE 232 -0000E9r 1 E9 .BYTE 233 -0000EAr 1 EA .BYTE 234 -0000EBr 1 EB .BYTE 235 -0000ECr 1 EC .BYTE 236 -0000EDr 1 ED .BYTE 237 -0000EEr 1 EE .BYTE 238 -0000EFr 1 EF .BYTE 239 -0000F0r 1 F0 .BYTE 240 -0000F1r 1 F1 .BYTE 241 -0000F2r 1 F2 .BYTE 242 -0000F3r 1 F3 .BYTE 243 -0000F4r 1 F4 .BYTE 244 -0000F5r 1 F5 .BYTE 245 -0000F6r 1 F6 .BYTE 246 -0000F7r 1 F7 .BYTE 247 -0000F8r 1 F8 .BYTE 248 -0000F9r 1 F9 .BYTE 249 -0000FAr 1 FA .BYTE 250 -0000FBr 1 FB .BYTE 251 -0000FCr 1 FC .BYTE 252 -0000FDr 1 FD .BYTE 253 -0000FEr 1 FE .BYTE 254 -0000FFr 1 FF .BYTE 255 +000000r 1 ; upper case pseudo-op +000000r 1 00 .BYTE 0 +000001r 1 01 .BYTE 1 +000002r 1 02 .BYTE 2 +000003r 1 03 .BYTE 3 +000004r 1 04 .BYTE 4 +000005r 1 05 .BYTE 5 +000006r 1 06 .BYTE 6 +000007r 1 07 .BYTE 7 +000008r 1 08 .BYTE 8 +000009r 1 09 .BYTE 9 +00000Ar 1 0A .BYTE 10 +00000Br 1 0B .BYTE 11 +00000Cr 1 0C .BYTE 12 +00000Dr 1 0D .BYTE 13 +00000Er 1 0E .BYTE 14 +00000Fr 1 0F .BYTE 15 +000010r 1 10 .BYTE 16 +000011r 1 11 .BYTE 17 +000012r 1 12 .BYTE 18 +000013r 1 13 .BYTE 19 +000014r 1 14 .BYTE 20 +000015r 1 15 .BYTE 21 +000016r 1 16 .BYTE 22 +000017r 1 17 .BYTE 23 +000018r 1 18 .BYTE 24 +000019r 1 19 .BYTE 25 +00001Ar 1 1A .BYTE 26 +00001Br 1 1B .BYTE 27 +00001Cr 1 1C .BYTE 28 +00001Dr 1 1D .BYTE 29 +00001Er 1 1E .BYTE 30 +00001Fr 1 1F .BYTE 31 +000020r 1 20 .BYTE 32 +000021r 1 21 .BYTE 33 +000022r 1 22 .BYTE 34 +000023r 1 23 .BYTE 35 +000024r 1 24 .BYTE 36 +000025r 1 25 .BYTE 37 +000026r 1 26 .BYTE 38 +000027r 1 27 .BYTE 39 +000028r 1 28 .BYTE 40 +000029r 1 29 .BYTE 41 +00002Ar 1 2A .BYTE 42 +00002Br 1 2B .BYTE 43 +00002Cr 1 2C .BYTE 44 +00002Dr 1 2D .BYTE 45 +00002Er 1 2E .BYTE 46 +00002Fr 1 2F .BYTE 47 +000030r 1 30 .BYTE 48 +000031r 1 31 .BYTE 49 +000032r 1 32 .BYTE 50 +000033r 1 33 .BYTE 51 +000034r 1 34 .BYTE 52 +000035r 1 35 .BYTE 53 +000036r 1 36 .BYTE 54 +000037r 1 37 .BYTE 55 +000038r 1 38 .BYTE 56 +000039r 1 39 .BYTE 57 +00003Ar 1 3A .BYTE 58 +00003Br 1 3B .BYTE 59 +00003Cr 1 3C .BYTE 60 +00003Dr 1 3D .BYTE 61 +00003Er 1 3E .BYTE 62 +00003Fr 1 3F .BYTE 63 +000040r 1 40 .BYTE 64 +000041r 1 41 .BYTE 65 +000042r 1 42 .BYTE 66 +000043r 1 43 .BYTE 67 +000044r 1 44 .BYTE 68 +000045r 1 45 .BYTE 69 +000046r 1 46 .BYTE 70 +000047r 1 47 .BYTE 71 +000048r 1 48 .BYTE 72 +000049r 1 49 .BYTE 73 +00004Ar 1 4A .BYTE 74 +00004Br 1 4B .BYTE 75 +00004Cr 1 4C .BYTE 76 +00004Dr 1 4D .BYTE 77 +00004Er 1 4E .BYTE 78 +00004Fr 1 4F .BYTE 79 +000050r 1 50 .BYTE 80 +000051r 1 51 .BYTE 81 +000052r 1 52 .BYTE 82 +000053r 1 53 .BYTE 83 +000054r 1 54 .BYTE 84 +000055r 1 55 .BYTE 85 +000056r 1 56 .BYTE 86 +000057r 1 57 .BYTE 87 +000058r 1 58 .BYTE 88 +000059r 1 59 .BYTE 89 +00005Ar 1 5A .BYTE 90 +00005Br 1 5B .BYTE 91 +00005Cr 1 5C .BYTE 92 +00005Dr 1 5D .BYTE 93 +00005Er 1 5E .BYTE 94 +00005Fr 1 5F .BYTE 95 +000060r 1 60 .BYTE 96 +000061r 1 61 .BYTE 97 +000062r 1 62 .BYTE 98 +000063r 1 63 .BYTE 99 +000064r 1 64 .BYTE 100 +000065r 1 65 .BYTE 101 +000066r 1 66 .BYTE 102 +000067r 1 67 .BYTE 103 +000068r 1 68 .BYTE 104 +000069r 1 69 .BYTE 105 +00006Ar 1 6A .BYTE 106 +00006Br 1 6B .BYTE 107 +00006Cr 1 6C .BYTE 108 +00006Dr 1 6D .BYTE 109 +00006Er 1 6E .BYTE 110 +00006Fr 1 6F .BYTE 111 +000070r 1 70 .BYTE 112 +000071r 1 71 .BYTE 113 +000072r 1 72 .BYTE 114 +000073r 1 73 .BYTE 115 +000074r 1 74 .BYTE 116 +000075r 1 75 .BYTE 117 +000076r 1 76 .BYTE 118 +000077r 1 77 .BYTE 119 +000078r 1 78 .BYTE 120 +000079r 1 79 .BYTE 121 +00007Ar 1 7A .BYTE 122 +00007Br 1 7B .BYTE 123 +00007Cr 1 7C .BYTE 124 +00007Dr 1 7D .BYTE 125 +00007Er 1 7E .BYTE 126 +00007Fr 1 7F .BYTE 127 +000080r 1 80 .BYTE 128 +000081r 1 81 .BYTE 129 +000082r 1 82 .BYTE 130 +000083r 1 83 .BYTE 131 +000084r 1 84 .BYTE 132 +000085r 1 85 .BYTE 133 +000086r 1 86 .BYTE 134 +000087r 1 87 .BYTE 135 +000088r 1 88 .BYTE 136 +000089r 1 89 .BYTE 137 +00008Ar 1 8A .BYTE 138 +00008Br 1 8B .BYTE 139 +00008Cr 1 8C .BYTE 140 +00008Dr 1 8D .BYTE 141 +00008Er 1 8E .BYTE 142 +00008Fr 1 8F .BYTE 143 +000090r 1 90 .BYTE 144 +000091r 1 91 .BYTE 145 +000092r 1 92 .BYTE 146 +000093r 1 93 .BYTE 147 +000094r 1 94 .BYTE 148 +000095r 1 95 .BYTE 149 +000096r 1 96 .BYTE 150 +000097r 1 97 .BYTE 151 +000098r 1 98 .BYTE 152 +000099r 1 99 .BYTE 153 +00009Ar 1 9A .BYTE 154 +00009Br 1 9B .BYTE 155 +00009Cr 1 9C .BYTE 156 +00009Dr 1 9D .BYTE 157 +00009Er 1 9E .BYTE 158 +00009Fr 1 9F .BYTE 159 +0000A0r 1 A0 .BYTE 160 +0000A1r 1 A1 .BYTE 161 +0000A2r 1 A2 .BYTE 162 +0000A3r 1 A3 .BYTE 163 +0000A4r 1 A4 .BYTE 164 +0000A5r 1 A5 .BYTE 165 +0000A6r 1 A6 .BYTE 166 +0000A7r 1 A7 .BYTE 167 +0000A8r 1 A8 .BYTE 168 +0000A9r 1 A9 .BYTE 169 +0000AAr 1 AA .BYTE 170 +0000ABr 1 AB .BYTE 171 +0000ACr 1 AC .BYTE 172 +0000ADr 1 AD .BYTE 173 +0000AEr 1 AE .BYTE 174 +0000AFr 1 AF .BYTE 175 +0000B0r 1 B0 .BYTE 176 +0000B1r 1 B1 .BYTE 177 +0000B2r 1 B2 .BYTE 178 +0000B3r 1 B3 .BYTE 179 +0000B4r 1 B4 .BYTE 180 +0000B5r 1 B5 .BYTE 181 +0000B6r 1 B6 .BYTE 182 +0000B7r 1 B7 .BYTE 183 +0000B8r 1 B8 .BYTE 184 +0000B9r 1 B9 .BYTE 185 +0000BAr 1 BA .BYTE 186 +0000BBr 1 BB .BYTE 187 +0000BCr 1 BC .BYTE 188 +0000BDr 1 BD .BYTE 189 +0000BEr 1 BE .BYTE 190 +0000BFr 1 BF .BYTE 191 +0000C0r 1 C0 .BYTE 192 +0000C1r 1 C1 .BYTE 193 +0000C2r 1 C2 .BYTE 194 +0000C3r 1 C3 .BYTE 195 +0000C4r 1 C4 .BYTE 196 +0000C5r 1 C5 .BYTE 197 +0000C6r 1 C6 .BYTE 198 +0000C7r 1 C7 .BYTE 199 +0000C8r 1 C8 .BYTE 200 +0000C9r 1 C9 .BYTE 201 +0000CAr 1 CA .BYTE 202 +0000CBr 1 CB .BYTE 203 +0000CCr 1 CC .BYTE 204 +0000CDr 1 CD .BYTE 205 +0000CEr 1 CE .BYTE 206 +0000CFr 1 CF .BYTE 207 +0000D0r 1 D0 .BYTE 208 +0000D1r 1 D1 .BYTE 209 +0000D2r 1 D2 .BYTE 210 +0000D3r 1 D3 .BYTE 211 +0000D4r 1 D4 .BYTE 212 +0000D5r 1 D5 .BYTE 213 +0000D6r 1 D6 .BYTE 214 +0000D7r 1 D7 .BYTE 215 +0000D8r 1 D8 .BYTE 216 +0000D9r 1 D9 .BYTE 217 +0000DAr 1 DA .BYTE 218 +0000DBr 1 DB .BYTE 219 +0000DCr 1 DC .BYTE 220 +0000DDr 1 DD .BYTE 221 +0000DEr 1 DE .BYTE 222 +0000DFr 1 DF .BYTE 223 +0000E0r 1 E0 .BYTE 224 +0000E1r 1 E1 .BYTE 225 +0000E2r 1 E2 .BYTE 226 +0000E3r 1 E3 .BYTE 227 +0000E4r 1 E4 .BYTE 228 +0000E5r 1 E5 .BYTE 229 +0000E6r 1 E6 .BYTE 230 +0000E7r 1 E7 .BYTE 231 +0000E8r 1 E8 .BYTE 232 +0000E9r 1 E9 .BYTE 233 +0000EAr 1 EA .BYTE 234 +0000EBr 1 EB .BYTE 235 +0000ECr 1 EC .BYTE 236 +0000EDr 1 ED .BYTE 237 +0000EEr 1 EE .BYTE 238 +0000EFr 1 EF .BYTE 239 +0000F0r 1 F0 .BYTE 240 +0000F1r 1 F1 .BYTE 241 +0000F2r 1 F2 .BYTE 242 +0000F3r 1 F3 .BYTE 243 +0000F4r 1 F4 .BYTE 244 +0000F5r 1 F5 .BYTE 245 +0000F6r 1 F6 .BYTE 246 +0000F7r 1 F7 .BYTE 247 +0000F8r 1 F8 .BYTE 248 +0000F9r 1 F9 .BYTE 249 +0000FAr 1 FA .BYTE 250 +0000FBr 1 FB .BYTE 251 +0000FCr 1 FC .BYTE 252 +0000FDr 1 FD .BYTE 253 +0000FEr 1 FE .BYTE 254 +0000FFr 1 FF .BYTE 255 000100r 1 -000100r 1 ; lower case pseudo-op -000100r 1 00 .byte 0 -000101r 1 01 .byte 1 -000102r 1 02 .byte 2 -000103r 1 03 .byte 3 -000104r 1 04 .byte 4 -000105r 1 05 .byte 5 -000106r 1 06 .byte 6 -000107r 1 07 .byte 7 -000108r 1 08 .byte 8 -000109r 1 09 .byte 9 -00010Ar 1 0A .byte 10 -00010Br 1 0B .byte 11 -00010Cr 1 0C .byte 12 -00010Dr 1 0D .byte 13 -00010Er 1 0E .byte 14 -00010Fr 1 0F .byte 15 -000110r 1 10 .byte 16 -000111r 1 11 .byte 17 -000112r 1 12 .byte 18 -000113r 1 13 .byte 19 -000114r 1 14 .byte 20 -000115r 1 15 .byte 21 -000116r 1 16 .byte 22 -000117r 1 17 .byte 23 -000118r 1 18 .byte 24 -000119r 1 19 .byte 25 -00011Ar 1 1A .byte 26 -00011Br 1 1B .byte 27 -00011Cr 1 1C .byte 28 -00011Dr 1 1D .byte 29 -00011Er 1 1E .byte 30 -00011Fr 1 1F .byte 31 -000120r 1 20 .byte 32 -000121r 1 21 .byte 33 -000122r 1 22 .byte 34 -000123r 1 23 .byte 35 -000124r 1 24 .byte 36 -000125r 1 25 .byte 37 -000126r 1 26 .byte 38 -000127r 1 27 .byte 39 -000128r 1 28 .byte 40 -000129r 1 29 .byte 41 -00012Ar 1 2A .byte 42 -00012Br 1 2B .byte 43 -00012Cr 1 2C .byte 44 -00012Dr 1 2D .byte 45 -00012Er 1 2E .byte 46 -00012Fr 1 2F .byte 47 -000130r 1 30 .byte 48 -000131r 1 31 .byte 49 -000132r 1 32 .byte 50 -000133r 1 33 .byte 51 -000134r 1 34 .byte 52 -000135r 1 35 .byte 53 -000136r 1 36 .byte 54 -000137r 1 37 .byte 55 -000138r 1 38 .byte 56 -000139r 1 39 .byte 57 -00013Ar 1 3A .byte 58 -00013Br 1 3B .byte 59 -00013Cr 1 3C .byte 60 -00013Dr 1 3D .byte 61 -00013Er 1 3E .byte 62 -00013Fr 1 3F .byte 63 -000140r 1 40 .byte 64 -000141r 1 41 .byte 65 -000142r 1 42 .byte 66 -000143r 1 43 .byte 67 -000144r 1 44 .byte 68 -000145r 1 45 .byte 69 -000146r 1 46 .byte 70 -000147r 1 47 .byte 71 -000148r 1 48 .byte 72 -000149r 1 49 .byte 73 -00014Ar 1 4A .byte 74 -00014Br 1 4B .byte 75 -00014Cr 1 4C .byte 76 -00014Dr 1 4D .byte 77 -00014Er 1 4E .byte 78 -00014Fr 1 4F .byte 79 -000150r 1 50 .byte 80 -000151r 1 51 .byte 81 -000152r 1 52 .byte 82 -000153r 1 53 .byte 83 -000154r 1 54 .byte 84 -000155r 1 55 .byte 85 -000156r 1 56 .byte 86 -000157r 1 57 .byte 87 -000158r 1 58 .byte 88 -000159r 1 59 .byte 89 -00015Ar 1 5A .byte 90 -00015Br 1 5B .byte 91 -00015Cr 1 5C .byte 92 -00015Dr 1 5D .byte 93 -00015Er 1 5E .byte 94 -00015Fr 1 5F .byte 95 -000160r 1 60 .byte 96 -000161r 1 61 .byte 97 -000162r 1 62 .byte 98 -000163r 1 63 .byte 99 -000164r 1 64 .byte 100 -000165r 1 65 .byte 101 -000166r 1 66 .byte 102 -000167r 1 67 .byte 103 -000168r 1 68 .byte 104 -000169r 1 69 .byte 105 -00016Ar 1 6A .byte 106 -00016Br 1 6B .byte 107 -00016Cr 1 6C .byte 108 -00016Dr 1 6D .byte 109 -00016Er 1 6E .byte 110 -00016Fr 1 6F .byte 111 -000170r 1 70 .byte 112 -000171r 1 71 .byte 113 -000172r 1 72 .byte 114 -000173r 1 73 .byte 115 -000174r 1 74 .byte 116 -000175r 1 75 .byte 117 -000176r 1 76 .byte 118 -000177r 1 77 .byte 119 -000178r 1 78 .byte 120 -000179r 1 79 .byte 121 -00017Ar 1 7A .byte 122 -00017Br 1 7B .byte 123 -00017Cr 1 7C .byte 124 -00017Dr 1 7D .byte 125 -00017Er 1 7E .byte 126 -00017Fr 1 7F .byte 127 -000180r 1 80 .byte 128 -000181r 1 81 .byte 129 -000182r 1 82 .byte 130 -000183r 1 83 .byte 131 -000184r 1 84 .byte 132 -000185r 1 85 .byte 133 -000186r 1 86 .byte 134 -000187r 1 87 .byte 135 -000188r 1 88 .byte 136 -000189r 1 89 .byte 137 -00018Ar 1 8A .byte 138 -00018Br 1 8B .byte 139 -00018Cr 1 8C .byte 140 -00018Dr 1 8D .byte 141 -00018Er 1 8E .byte 142 -00018Fr 1 8F .byte 143 -000190r 1 90 .byte 144 -000191r 1 91 .byte 145 -000192r 1 92 .byte 146 -000193r 1 93 .byte 147 -000194r 1 94 .byte 148 -000195r 1 95 .byte 149 -000196r 1 96 .byte 150 -000197r 1 97 .byte 151 -000198r 1 98 .byte 152 -000199r 1 99 .byte 153 -00019Ar 1 9A .byte 154 -00019Br 1 9B .byte 155 -00019Cr 1 9C .byte 156 -00019Dr 1 9D .byte 157 -00019Er 1 9E .byte 158 -00019Fr 1 9F .byte 159 -0001A0r 1 A0 .byte 160 -0001A1r 1 A1 .byte 161 -0001A2r 1 A2 .byte 162 -0001A3r 1 A3 .byte 163 -0001A4r 1 A4 .byte 164 -0001A5r 1 A5 .byte 165 -0001A6r 1 A6 .byte 166 -0001A7r 1 A7 .byte 167 -0001A8r 1 A8 .byte 168 -0001A9r 1 A9 .byte 169 -0001AAr 1 AA .byte 170 -0001ABr 1 AB .byte 171 -0001ACr 1 AC .byte 172 -0001ADr 1 AD .byte 173 -0001AEr 1 AE .byte 174 -0001AFr 1 AF .byte 175 -0001B0r 1 B0 .byte 176 -0001B1r 1 B1 .byte 177 -0001B2r 1 B2 .byte 178 -0001B3r 1 B3 .byte 179 -0001B4r 1 B4 .byte 180 -0001B5r 1 B5 .byte 181 -0001B6r 1 B6 .byte 182 -0001B7r 1 B7 .byte 183 -0001B8r 1 B8 .byte 184 -0001B9r 1 B9 .byte 185 -0001BAr 1 BA .byte 186 -0001BBr 1 BB .byte 187 -0001BCr 1 BC .byte 188 -0001BDr 1 BD .byte 189 -0001BEr 1 BE .byte 190 -0001BFr 1 BF .byte 191 -0001C0r 1 C0 .byte 192 -0001C1r 1 C1 .byte 193 -0001C2r 1 C2 .byte 194 -0001C3r 1 C3 .byte 195 -0001C4r 1 C4 .byte 196 -0001C5r 1 C5 .byte 197 -0001C6r 1 C6 .byte 198 -0001C7r 1 C7 .byte 199 -0001C8r 1 C8 .byte 200 -0001C9r 1 C9 .byte 201 -0001CAr 1 CA .byte 202 -0001CBr 1 CB .byte 203 -0001CCr 1 CC .byte 204 -0001CDr 1 CD .byte 205 -0001CEr 1 CE .byte 206 -0001CFr 1 CF .byte 207 -0001D0r 1 D0 .byte 208 -0001D1r 1 D1 .byte 209 -0001D2r 1 D2 .byte 210 -0001D3r 1 D3 .byte 211 -0001D4r 1 D4 .byte 212 -0001D5r 1 D5 .byte 213 -0001D6r 1 D6 .byte 214 -0001D7r 1 D7 .byte 215 -0001D8r 1 D8 .byte 216 -0001D9r 1 D9 .byte 217 -0001DAr 1 DA .byte 218 -0001DBr 1 DB .byte 219 -0001DCr 1 DC .byte 220 -0001DDr 1 DD .byte 221 -0001DEr 1 DE .byte 222 -0001DFr 1 DF .byte 223 -0001E0r 1 E0 .byte 224 -0001E1r 1 E1 .byte 225 -0001E2r 1 E2 .byte 226 -0001E3r 1 E3 .byte 227 -0001E4r 1 E4 .byte 228 -0001E5r 1 E5 .byte 229 -0001E6r 1 E6 .byte 230 -0001E7r 1 E7 .byte 231 -0001E8r 1 E8 .byte 232 -0001E9r 1 E9 .byte 233 -0001EAr 1 EA .byte 234 -0001EBr 1 EB .byte 235 -0001ECr 1 EC .byte 236 -0001EDr 1 ED .byte 237 -0001EEr 1 EE .byte 238 -0001EFr 1 EF .byte 239 -0001F0r 1 F0 .byte 240 -0001F1r 1 F1 .byte 241 -0001F2r 1 F2 .byte 242 -0001F3r 1 F3 .byte 243 -0001F4r 1 F4 .byte 244 -0001F5r 1 F5 .byte 245 -0001F6r 1 F6 .byte 246 -0001F7r 1 F7 .byte 247 -0001F8r 1 F8 .byte 248 -0001F9r 1 F9 .byte 249 -0001FAr 1 FA .byte 250 -0001FBr 1 FB .byte 251 -0001FCr 1 FC .byte 252 -0001FDr 1 FD .byte 253 -0001FEr 1 FE .byte 254 -0001FFr 1 FF .byte 255 +000100r 1 ; lower case pseudo-op +000100r 1 00 .byte 0 +000101r 1 01 .byte 1 +000102r 1 02 .byte 2 +000103r 1 03 .byte 3 +000104r 1 04 .byte 4 +000105r 1 05 .byte 5 +000106r 1 06 .byte 6 +000107r 1 07 .byte 7 +000108r 1 08 .byte 8 +000109r 1 09 .byte 9 +00010Ar 1 0A .byte 10 +00010Br 1 0B .byte 11 +00010Cr 1 0C .byte 12 +00010Dr 1 0D .byte 13 +00010Er 1 0E .byte 14 +00010Fr 1 0F .byte 15 +000110r 1 10 .byte 16 +000111r 1 11 .byte 17 +000112r 1 12 .byte 18 +000113r 1 13 .byte 19 +000114r 1 14 .byte 20 +000115r 1 15 .byte 21 +000116r 1 16 .byte 22 +000117r 1 17 .byte 23 +000118r 1 18 .byte 24 +000119r 1 19 .byte 25 +00011Ar 1 1A .byte 26 +00011Br 1 1B .byte 27 +00011Cr 1 1C .byte 28 +00011Dr 1 1D .byte 29 +00011Er 1 1E .byte 30 +00011Fr 1 1F .byte 31 +000120r 1 20 .byte 32 +000121r 1 21 .byte 33 +000122r 1 22 .byte 34 +000123r 1 23 .byte 35 +000124r 1 24 .byte 36 +000125r 1 25 .byte 37 +000126r 1 26 .byte 38 +000127r 1 27 .byte 39 +000128r 1 28 .byte 40 +000129r 1 29 .byte 41 +00012Ar 1 2A .byte 42 +00012Br 1 2B .byte 43 +00012Cr 1 2C .byte 44 +00012Dr 1 2D .byte 45 +00012Er 1 2E .byte 46 +00012Fr 1 2F .byte 47 +000130r 1 30 .byte 48 +000131r 1 31 .byte 49 +000132r 1 32 .byte 50 +000133r 1 33 .byte 51 +000134r 1 34 .byte 52 +000135r 1 35 .byte 53 +000136r 1 36 .byte 54 +000137r 1 37 .byte 55 +000138r 1 38 .byte 56 +000139r 1 39 .byte 57 +00013Ar 1 3A .byte 58 +00013Br 1 3B .byte 59 +00013Cr 1 3C .byte 60 +00013Dr 1 3D .byte 61 +00013Er 1 3E .byte 62 +00013Fr 1 3F .byte 63 +000140r 1 40 .byte 64 +000141r 1 41 .byte 65 +000142r 1 42 .byte 66 +000143r 1 43 .byte 67 +000144r 1 44 .byte 68 +000145r 1 45 .byte 69 +000146r 1 46 .byte 70 +000147r 1 47 .byte 71 +000148r 1 48 .byte 72 +000149r 1 49 .byte 73 +00014Ar 1 4A .byte 74 +00014Br 1 4B .byte 75 +00014Cr 1 4C .byte 76 +00014Dr 1 4D .byte 77 +00014Er 1 4E .byte 78 +00014Fr 1 4F .byte 79 +000150r 1 50 .byte 80 +000151r 1 51 .byte 81 +000152r 1 52 .byte 82 +000153r 1 53 .byte 83 +000154r 1 54 .byte 84 +000155r 1 55 .byte 85 +000156r 1 56 .byte 86 +000157r 1 57 .byte 87 +000158r 1 58 .byte 88 +000159r 1 59 .byte 89 +00015Ar 1 5A .byte 90 +00015Br 1 5B .byte 91 +00015Cr 1 5C .byte 92 +00015Dr 1 5D .byte 93 +00015Er 1 5E .byte 94 +00015Fr 1 5F .byte 95 +000160r 1 60 .byte 96 +000161r 1 61 .byte 97 +000162r 1 62 .byte 98 +000163r 1 63 .byte 99 +000164r 1 64 .byte 100 +000165r 1 65 .byte 101 +000166r 1 66 .byte 102 +000167r 1 67 .byte 103 +000168r 1 68 .byte 104 +000169r 1 69 .byte 105 +00016Ar 1 6A .byte 106 +00016Br 1 6B .byte 107 +00016Cr 1 6C .byte 108 +00016Dr 1 6D .byte 109 +00016Er 1 6E .byte 110 +00016Fr 1 6F .byte 111 +000170r 1 70 .byte 112 +000171r 1 71 .byte 113 +000172r 1 72 .byte 114 +000173r 1 73 .byte 115 +000174r 1 74 .byte 116 +000175r 1 75 .byte 117 +000176r 1 76 .byte 118 +000177r 1 77 .byte 119 +000178r 1 78 .byte 120 +000179r 1 79 .byte 121 +00017Ar 1 7A .byte 122 +00017Br 1 7B .byte 123 +00017Cr 1 7C .byte 124 +00017Dr 1 7D .byte 125 +00017Er 1 7E .byte 126 +00017Fr 1 7F .byte 127 +000180r 1 80 .byte 128 +000181r 1 81 .byte 129 +000182r 1 82 .byte 130 +000183r 1 83 .byte 131 +000184r 1 84 .byte 132 +000185r 1 85 .byte 133 +000186r 1 86 .byte 134 +000187r 1 87 .byte 135 +000188r 1 88 .byte 136 +000189r 1 89 .byte 137 +00018Ar 1 8A .byte 138 +00018Br 1 8B .byte 139 +00018Cr 1 8C .byte 140 +00018Dr 1 8D .byte 141 +00018Er 1 8E .byte 142 +00018Fr 1 8F .byte 143 +000190r 1 90 .byte 144 +000191r 1 91 .byte 145 +000192r 1 92 .byte 146 +000193r 1 93 .byte 147 +000194r 1 94 .byte 148 +000195r 1 95 .byte 149 +000196r 1 96 .byte 150 +000197r 1 97 .byte 151 +000198r 1 98 .byte 152 +000199r 1 99 .byte 153 +00019Ar 1 9A .byte 154 +00019Br 1 9B .byte 155 +00019Cr 1 9C .byte 156 +00019Dr 1 9D .byte 157 +00019Er 1 9E .byte 158 +00019Fr 1 9F .byte 159 +0001A0r 1 A0 .byte 160 +0001A1r 1 A1 .byte 161 +0001A2r 1 A2 .byte 162 +0001A3r 1 A3 .byte 163 +0001A4r 1 A4 .byte 164 +0001A5r 1 A5 .byte 165 +0001A6r 1 A6 .byte 166 +0001A7r 1 A7 .byte 167 +0001A8r 1 A8 .byte 168 +0001A9r 1 A9 .byte 169 +0001AAr 1 AA .byte 170 +0001ABr 1 AB .byte 171 +0001ACr 1 AC .byte 172 +0001ADr 1 AD .byte 173 +0001AEr 1 AE .byte 174 +0001AFr 1 AF .byte 175 +0001B0r 1 B0 .byte 176 +0001B1r 1 B1 .byte 177 +0001B2r 1 B2 .byte 178 +0001B3r 1 B3 .byte 179 +0001B4r 1 B4 .byte 180 +0001B5r 1 B5 .byte 181 +0001B6r 1 B6 .byte 182 +0001B7r 1 B7 .byte 183 +0001B8r 1 B8 .byte 184 +0001B9r 1 B9 .byte 185 +0001BAr 1 BA .byte 186 +0001BBr 1 BB .byte 187 +0001BCr 1 BC .byte 188 +0001BDr 1 BD .byte 189 +0001BEr 1 BE .byte 190 +0001BFr 1 BF .byte 191 +0001C0r 1 C0 .byte 192 +0001C1r 1 C1 .byte 193 +0001C2r 1 C2 .byte 194 +0001C3r 1 C3 .byte 195 +0001C4r 1 C4 .byte 196 +0001C5r 1 C5 .byte 197 +0001C6r 1 C6 .byte 198 +0001C7r 1 C7 .byte 199 +0001C8r 1 C8 .byte 200 +0001C9r 1 C9 .byte 201 +0001CAr 1 CA .byte 202 +0001CBr 1 CB .byte 203 +0001CCr 1 CC .byte 204 +0001CDr 1 CD .byte 205 +0001CEr 1 CE .byte 206 +0001CFr 1 CF .byte 207 +0001D0r 1 D0 .byte 208 +0001D1r 1 D1 .byte 209 +0001D2r 1 D2 .byte 210 +0001D3r 1 D3 .byte 211 +0001D4r 1 D4 .byte 212 +0001D5r 1 D5 .byte 213 +0001D6r 1 D6 .byte 214 +0001D7r 1 D7 .byte 215 +0001D8r 1 D8 .byte 216 +0001D9r 1 D9 .byte 217 +0001DAr 1 DA .byte 218 +0001DBr 1 DB .byte 219 +0001DCr 1 DC .byte 220 +0001DDr 1 DD .byte 221 +0001DEr 1 DE .byte 222 +0001DFr 1 DF .byte 223 +0001E0r 1 E0 .byte 224 +0001E1r 1 E1 .byte 225 +0001E2r 1 E2 .byte 226 +0001E3r 1 E3 .byte 227 +0001E4r 1 E4 .byte 228 +0001E5r 1 E5 .byte 229 +0001E6r 1 E6 .byte 230 +0001E7r 1 E7 .byte 231 +0001E8r 1 E8 .byte 232 +0001E9r 1 E9 .byte 233 +0001EAr 1 EA .byte 234 +0001EBr 1 EB .byte 235 +0001ECr 1 EC .byte 236 +0001EDr 1 ED .byte 237 +0001EEr 1 EE .byte 238 +0001EFr 1 EF .byte 239 +0001F0r 1 F0 .byte 240 +0001F1r 1 F1 .byte 241 +0001F2r 1 F2 .byte 242 +0001F3r 1 F3 .byte 243 +0001F4r 1 F4 .byte 244 +0001F5r 1 F5 .byte 245 +0001F6r 1 F6 .byte 246 +0001F7r 1 F7 .byte 247 +0001F8r 1 F8 .byte 248 +0001F9r 1 F9 .byte 249 +0001FAr 1 FA .byte 250 +0001FBr 1 FB .byte 251 +0001FCr 1 FC .byte 252 +0001FDr 1 FD .byte 253 +0001FEr 1 FE .byte 254 +0001FFr 1 FF .byte 255 000200r 1 -000200r 1 ; hex values -000200r 1 00 .byte $0 -000201r 1 01 .byte $1 -000202r 1 02 .byte $2 -000203r 1 03 .byte $3 -000204r 1 04 .byte $4 -000205r 1 05 .byte $5 -000206r 1 06 .byte $6 -000207r 1 07 .byte $7 -000208r 1 08 .byte $8 -000209r 1 09 .byte $9 -00020Ar 1 0A .byte $a -00020Br 1 0B .byte $b -00020Cr 1 0C .byte $c -00020Dr 1 0D .byte $d -00020Er 1 0E .byte $e -00020Fr 1 0F .byte $f -000210r 1 10 .byte $10 -000211r 1 11 .byte $11 -000212r 1 12 .byte $12 -000213r 1 13 .byte $13 -000214r 1 14 .byte $14 -000215r 1 15 .byte $15 -000216r 1 16 .byte $16 -000217r 1 17 .byte $17 -000218r 1 18 .byte $18 -000219r 1 19 .byte $19 -00021Ar 1 1A .byte $1a -00021Br 1 1B .byte $1b -00021Cr 1 1C .byte $1c -00021Dr 1 1D .byte $1d -00021Er 1 1E .byte $1e -00021Fr 1 1F .byte $1f -000220r 1 20 .byte $20 -000221r 1 21 .byte $21 -000222r 1 22 .byte $22 -000223r 1 23 .byte $23 -000224r 1 24 .byte $24 -000225r 1 25 .byte $25 -000226r 1 26 .byte $26 -000227r 1 27 .byte $27 -000228r 1 28 .byte $28 -000229r 1 29 .byte $29 -00022Ar 1 2A .byte $2a -00022Br 1 2B .byte $2b -00022Cr 1 2C .byte $2c -00022Dr 1 2D .byte $2d -00022Er 1 2E .byte $2e -00022Fr 1 2F .byte $2f -000230r 1 30 .byte $30 -000231r 1 31 .byte $31 -000232r 1 32 .byte $32 -000233r 1 33 .byte $33 -000234r 1 34 .byte $34 -000235r 1 35 .byte $35 -000236r 1 36 .byte $36 -000237r 1 37 .byte $37 -000238r 1 38 .byte $38 -000239r 1 39 .byte $39 -00023Ar 1 3A .byte $3a -00023Br 1 3B .byte $3b -00023Cr 1 3C .byte $3c -00023Dr 1 3D .byte $3d -00023Er 1 3E .byte $3e -00023Fr 1 3F .byte $3f -000240r 1 40 .byte $40 -000241r 1 41 .byte $41 -000242r 1 42 .byte $42 -000243r 1 43 .byte $43 -000244r 1 44 .byte $44 -000245r 1 45 .byte $45 -000246r 1 46 .byte $46 -000247r 1 47 .byte $47 -000248r 1 48 .byte $48 -000249r 1 49 .byte $49 -00024Ar 1 4A .byte $4a -00024Br 1 4B .byte $4b -00024Cr 1 4C .byte $4c -00024Dr 1 4D .byte $4d -00024Er 1 4E .byte $4e -00024Fr 1 4F .byte $4f -000250r 1 50 .byte $50 -000251r 1 51 .byte $51 -000252r 1 52 .byte $52 -000253r 1 53 .byte $53 -000254r 1 54 .byte $54 -000255r 1 55 .byte $55 -000256r 1 56 .byte $56 -000257r 1 57 .byte $57 -000258r 1 58 .byte $58 -000259r 1 59 .byte $59 -00025Ar 1 5A .byte $5a -00025Br 1 5B .byte $5b -00025Cr 1 5C .byte $5c -00025Dr 1 5D .byte $5d -00025Er 1 5E .byte $5e -00025Fr 1 5F .byte $5f -000260r 1 60 .byte $60 -000261r 1 61 .byte $61 -000262r 1 62 .byte $62 -000263r 1 63 .byte $63 -000264r 1 64 .byte $64 -000265r 1 65 .byte $65 -000266r 1 66 .byte $66 -000267r 1 67 .byte $67 -000268r 1 68 .byte $68 -000269r 1 69 .byte $69 -00026Ar 1 6A .byte $6a -00026Br 1 6B .byte $6b -00026Cr 1 6C .byte $6c -00026Dr 1 6D .byte $6d -00026Er 1 6E .byte $6e -00026Fr 1 6F .byte $6f -000270r 1 70 .byte $70 -000271r 1 71 .byte $71 -000272r 1 72 .byte $72 -000273r 1 73 .byte $73 -000274r 1 74 .byte $74 -000275r 1 75 .byte $75 -000276r 1 76 .byte $76 -000277r 1 77 .byte $77 -000278r 1 78 .byte $78 -000279r 1 79 .byte $79 -00027Ar 1 7A .byte $7a -00027Br 1 7B .byte $7b -00027Cr 1 7C .byte $7c -00027Dr 1 7D .byte $7d -00027Er 1 7E .byte $7e -00027Fr 1 7F .byte $7f -000280r 1 80 .byte $80 -000281r 1 81 .byte $81 -000282r 1 82 .byte $82 -000283r 1 83 .byte $83 -000284r 1 84 .byte $84 -000285r 1 85 .byte $85 -000286r 1 86 .byte $86 -000287r 1 87 .byte $87 -000288r 1 88 .byte $88 -000289r 1 89 .byte $89 -00028Ar 1 8A .byte $8a -00028Br 1 8B .byte $8b -00028Cr 1 8C .byte $8c -00028Dr 1 8D .byte $8d -00028Er 1 8E .byte $8e -00028Fr 1 8F .byte $8f -000290r 1 90 .byte $90 -000291r 1 91 .byte $91 -000292r 1 92 .byte $92 -000293r 1 93 .byte $93 -000294r 1 94 .byte $94 -000295r 1 95 .byte $95 -000296r 1 96 .byte $96 -000297r 1 97 .byte $97 -000298r 1 98 .byte $98 -000299r 1 99 .byte $99 -00029Ar 1 9A .byte $9a -00029Br 1 9B .byte $9b -00029Cr 1 9C .byte $9c -00029Dr 1 9D .byte $9d -00029Er 1 9E .byte $9e -00029Fr 1 9F .byte $9f -0002A0r 1 A0 .byte $a0 -0002A1r 1 A1 .byte $a1 -0002A2r 1 A2 .byte $a2 -0002A3r 1 A3 .byte $a3 -0002A4r 1 A4 .byte $a4 -0002A5r 1 A5 .byte $a5 -0002A6r 1 A6 .byte $a6 -0002A7r 1 A7 .byte $a7 -0002A8r 1 A8 .byte $a8 -0002A9r 1 A9 .byte $a9 -0002AAr 1 AA .byte $aa -0002ABr 1 AB .byte $ab -0002ACr 1 AC .byte $ac -0002ADr 1 AD .byte $ad -0002AEr 1 AE .byte $ae -0002AFr 1 AF .byte $af -0002B0r 1 B0 .byte $b0 -0002B1r 1 B1 .byte $b1 -0002B2r 1 B2 .byte $b2 -0002B3r 1 B3 .byte $b3 -0002B4r 1 B4 .byte $b4 -0002B5r 1 B5 .byte $b5 -0002B6r 1 B6 .byte $b6 -0002B7r 1 B7 .byte $b7 -0002B8r 1 B8 .byte $b8 -0002B9r 1 B9 .byte $b9 -0002BAr 1 BA .byte $ba -0002BBr 1 BB .byte $bb -0002BCr 1 BC .byte $bc -0002BDr 1 BD .byte $bd -0002BEr 1 BE .byte $be -0002BFr 1 BF .byte $bf -0002C0r 1 C0 .byte $c0 -0002C1r 1 C1 .byte $c1 -0002C2r 1 C2 .byte $c2 -0002C3r 1 C3 .byte $c3 -0002C4r 1 C4 .byte $c4 -0002C5r 1 C5 .byte $c5 -0002C6r 1 C6 .byte $c6 -0002C7r 1 C7 .byte $c7 -0002C8r 1 C8 .byte $c8 -0002C9r 1 C9 .byte $c9 -0002CAr 1 CA .byte $ca -0002CBr 1 CB .byte $cb -0002CCr 1 CC .byte $cc -0002CDr 1 CD .byte $cd -0002CEr 1 CE .byte $ce -0002CFr 1 CF .byte $cf -0002D0r 1 D0 .byte $d0 -0002D1r 1 D1 .byte $d1 -0002D2r 1 D2 .byte $d2 -0002D3r 1 D3 .byte $d3 -0002D4r 1 D4 .byte $d4 -0002D5r 1 D5 .byte $d5 -0002D6r 1 D6 .byte $d6 -0002D7r 1 D7 .byte $d7 -0002D8r 1 D8 .byte $d8 -0002D9r 1 D9 .byte $d9 -0002DAr 1 DA .byte $da -0002DBr 1 DB .byte $db -0002DCr 1 DC .byte $dc -0002DDr 1 DD .byte $dd -0002DEr 1 DE .byte $de -0002DFr 1 DF .byte $df -0002E0r 1 E0 .byte $e0 -0002E1r 1 E1 .byte $e1 -0002E2r 1 E2 .byte $e2 -0002E3r 1 E3 .byte $e3 -0002E4r 1 E4 .byte $e4 -0002E5r 1 E5 .byte $e5 -0002E6r 1 E6 .byte $e6 -0002E7r 1 E7 .byte $e7 -0002E8r 1 E8 .byte $e8 -0002E9r 1 E9 .byte $e9 -0002EAr 1 EA .byte $ea -0002EBr 1 EB .byte $eb -0002ECr 1 EC .byte $ec -0002EDr 1 ED .byte $ed -0002EEr 1 EE .byte $ee -0002EFr 1 EF .byte $ef -0002F0r 1 F0 .byte $f0 -0002F1r 1 F1 .byte $f1 -0002F2r 1 F2 .byte $f2 -0002F3r 1 F3 .byte $f3 -0002F4r 1 F4 .byte $f4 -0002F5r 1 F5 .byte $f5 -0002F6r 1 F6 .byte $f6 -0002F7r 1 F7 .byte $f7 -0002F8r 1 F8 .byte $f8 -0002F9r 1 F9 .byte $f9 -0002FAr 1 FA .byte $fa -0002FBr 1 FB .byte $fb -0002FCr 1 FC .byte $fc -0002FDr 1 FD .byte $fd -0002FEr 1 FE .byte $fe -0002FFr 1 FF .byte $ff +000200r 1 ; hex values +000200r 1 00 .byte $0 +000201r 1 01 .byte $1 +000202r 1 02 .byte $2 +000203r 1 03 .byte $3 +000204r 1 04 .byte $4 +000205r 1 05 .byte $5 +000206r 1 06 .byte $6 +000207r 1 07 .byte $7 +000208r 1 08 .byte $8 +000209r 1 09 .byte $9 +00020Ar 1 0A .byte $a +00020Br 1 0B .byte $b +00020Cr 1 0C .byte $c +00020Dr 1 0D .byte $d +00020Er 1 0E .byte $e +00020Fr 1 0F .byte $f +000210r 1 10 .byte $10 +000211r 1 11 .byte $11 +000212r 1 12 .byte $12 +000213r 1 13 .byte $13 +000214r 1 14 .byte $14 +000215r 1 15 .byte $15 +000216r 1 16 .byte $16 +000217r 1 17 .byte $17 +000218r 1 18 .byte $18 +000219r 1 19 .byte $19 +00021Ar 1 1A .byte $1a +00021Br 1 1B .byte $1b +00021Cr 1 1C .byte $1c +00021Dr 1 1D .byte $1d +00021Er 1 1E .byte $1e +00021Fr 1 1F .byte $1f +000220r 1 20 .byte $20 +000221r 1 21 .byte $21 +000222r 1 22 .byte $22 +000223r 1 23 .byte $23 +000224r 1 24 .byte $24 +000225r 1 25 .byte $25 +000226r 1 26 .byte $26 +000227r 1 27 .byte $27 +000228r 1 28 .byte $28 +000229r 1 29 .byte $29 +00022Ar 1 2A .byte $2a +00022Br 1 2B .byte $2b +00022Cr 1 2C .byte $2c +00022Dr 1 2D .byte $2d +00022Er 1 2E .byte $2e +00022Fr 1 2F .byte $2f +000230r 1 30 .byte $30 +000231r 1 31 .byte $31 +000232r 1 32 .byte $32 +000233r 1 33 .byte $33 +000234r 1 34 .byte $34 +000235r 1 35 .byte $35 +000236r 1 36 .byte $36 +000237r 1 37 .byte $37 +000238r 1 38 .byte $38 +000239r 1 39 .byte $39 +00023Ar 1 3A .byte $3a +00023Br 1 3B .byte $3b +00023Cr 1 3C .byte $3c +00023Dr 1 3D .byte $3d +00023Er 1 3E .byte $3e +00023Fr 1 3F .byte $3f +000240r 1 40 .byte $40 +000241r 1 41 .byte $41 +000242r 1 42 .byte $42 +000243r 1 43 .byte $43 +000244r 1 44 .byte $44 +000245r 1 45 .byte $45 +000246r 1 46 .byte $46 +000247r 1 47 .byte $47 +000248r 1 48 .byte $48 +000249r 1 49 .byte $49 +00024Ar 1 4A .byte $4a +00024Br 1 4B .byte $4b +00024Cr 1 4C .byte $4c +00024Dr 1 4D .byte $4d +00024Er 1 4E .byte $4e +00024Fr 1 4F .byte $4f +000250r 1 50 .byte $50 +000251r 1 51 .byte $51 +000252r 1 52 .byte $52 +000253r 1 53 .byte $53 +000254r 1 54 .byte $54 +000255r 1 55 .byte $55 +000256r 1 56 .byte $56 +000257r 1 57 .byte $57 +000258r 1 58 .byte $58 +000259r 1 59 .byte $59 +00025Ar 1 5A .byte $5a +00025Br 1 5B .byte $5b +00025Cr 1 5C .byte $5c +00025Dr 1 5D .byte $5d +00025Er 1 5E .byte $5e +00025Fr 1 5F .byte $5f +000260r 1 60 .byte $60 +000261r 1 61 .byte $61 +000262r 1 62 .byte $62 +000263r 1 63 .byte $63 +000264r 1 64 .byte $64 +000265r 1 65 .byte $65 +000266r 1 66 .byte $66 +000267r 1 67 .byte $67 +000268r 1 68 .byte $68 +000269r 1 69 .byte $69 +00026Ar 1 6A .byte $6a +00026Br 1 6B .byte $6b +00026Cr 1 6C .byte $6c +00026Dr 1 6D .byte $6d +00026Er 1 6E .byte $6e +00026Fr 1 6F .byte $6f +000270r 1 70 .byte $70 +000271r 1 71 .byte $71 +000272r 1 72 .byte $72 +000273r 1 73 .byte $73 +000274r 1 74 .byte $74 +000275r 1 75 .byte $75 +000276r 1 76 .byte $76 +000277r 1 77 .byte $77 +000278r 1 78 .byte $78 +000279r 1 79 .byte $79 +00027Ar 1 7A .byte $7a +00027Br 1 7B .byte $7b +00027Cr 1 7C .byte $7c +00027Dr 1 7D .byte $7d +00027Er 1 7E .byte $7e +00027Fr 1 7F .byte $7f +000280r 1 80 .byte $80 +000281r 1 81 .byte $81 +000282r 1 82 .byte $82 +000283r 1 83 .byte $83 +000284r 1 84 .byte $84 +000285r 1 85 .byte $85 +000286r 1 86 .byte $86 +000287r 1 87 .byte $87 +000288r 1 88 .byte $88 +000289r 1 89 .byte $89 +00028Ar 1 8A .byte $8a +00028Br 1 8B .byte $8b +00028Cr 1 8C .byte $8c +00028Dr 1 8D .byte $8d +00028Er 1 8E .byte $8e +00028Fr 1 8F .byte $8f +000290r 1 90 .byte $90 +000291r 1 91 .byte $91 +000292r 1 92 .byte $92 +000293r 1 93 .byte $93 +000294r 1 94 .byte $94 +000295r 1 95 .byte $95 +000296r 1 96 .byte $96 +000297r 1 97 .byte $97 +000298r 1 98 .byte $98 +000299r 1 99 .byte $99 +00029Ar 1 9A .byte $9a +00029Br 1 9B .byte $9b +00029Cr 1 9C .byte $9c +00029Dr 1 9D .byte $9d +00029Er 1 9E .byte $9e +00029Fr 1 9F .byte $9f +0002A0r 1 A0 .byte $a0 +0002A1r 1 A1 .byte $a1 +0002A2r 1 A2 .byte $a2 +0002A3r 1 A3 .byte $a3 +0002A4r 1 A4 .byte $a4 +0002A5r 1 A5 .byte $a5 +0002A6r 1 A6 .byte $a6 +0002A7r 1 A7 .byte $a7 +0002A8r 1 A8 .byte $a8 +0002A9r 1 A9 .byte $a9 +0002AAr 1 AA .byte $aa +0002ABr 1 AB .byte $ab +0002ACr 1 AC .byte $ac +0002ADr 1 AD .byte $ad +0002AEr 1 AE .byte $ae +0002AFr 1 AF .byte $af +0002B0r 1 B0 .byte $b0 +0002B1r 1 B1 .byte $b1 +0002B2r 1 B2 .byte $b2 +0002B3r 1 B3 .byte $b3 +0002B4r 1 B4 .byte $b4 +0002B5r 1 B5 .byte $b5 +0002B6r 1 B6 .byte $b6 +0002B7r 1 B7 .byte $b7 +0002B8r 1 B8 .byte $b8 +0002B9r 1 B9 .byte $b9 +0002BAr 1 BA .byte $ba +0002BBr 1 BB .byte $bb +0002BCr 1 BC .byte $bc +0002BDr 1 BD .byte $bd +0002BEr 1 BE .byte $be +0002BFr 1 BF .byte $bf +0002C0r 1 C0 .byte $c0 +0002C1r 1 C1 .byte $c1 +0002C2r 1 C2 .byte $c2 +0002C3r 1 C3 .byte $c3 +0002C4r 1 C4 .byte $c4 +0002C5r 1 C5 .byte $c5 +0002C6r 1 C6 .byte $c6 +0002C7r 1 C7 .byte $c7 +0002C8r 1 C8 .byte $c8 +0002C9r 1 C9 .byte $c9 +0002CAr 1 CA .byte $ca +0002CBr 1 CB .byte $cb +0002CCr 1 CC .byte $cc +0002CDr 1 CD .byte $cd +0002CEr 1 CE .byte $ce +0002CFr 1 CF .byte $cf +0002D0r 1 D0 .byte $d0 +0002D1r 1 D1 .byte $d1 +0002D2r 1 D2 .byte $d2 +0002D3r 1 D3 .byte $d3 +0002D4r 1 D4 .byte $d4 +0002D5r 1 D5 .byte $d5 +0002D6r 1 D6 .byte $d6 +0002D7r 1 D7 .byte $d7 +0002D8r 1 D8 .byte $d8 +0002D9r 1 D9 .byte $d9 +0002DAr 1 DA .byte $da +0002DBr 1 DB .byte $db +0002DCr 1 DC .byte $dc +0002DDr 1 DD .byte $dd +0002DEr 1 DE .byte $de +0002DFr 1 DF .byte $df +0002E0r 1 E0 .byte $e0 +0002E1r 1 E1 .byte $e1 +0002E2r 1 E2 .byte $e2 +0002E3r 1 E3 .byte $e3 +0002E4r 1 E4 .byte $e4 +0002E5r 1 E5 .byte $e5 +0002E6r 1 E6 .byte $e6 +0002E7r 1 E7 .byte $e7 +0002E8r 1 E8 .byte $e8 +0002E9r 1 E9 .byte $e9 +0002EAr 1 EA .byte $ea +0002EBr 1 EB .byte $eb +0002ECr 1 EC .byte $ec +0002EDr 1 ED .byte $ed +0002EEr 1 EE .byte $ee +0002EFr 1 EF .byte $ef +0002F0r 1 F0 .byte $f0 +0002F1r 1 F1 .byte $f1 +0002F2r 1 F2 .byte $f2 +0002F3r 1 F3 .byte $f3 +0002F4r 1 F4 .byte $f4 +0002F5r 1 F5 .byte $f5 +0002F6r 1 F6 .byte $f6 +0002F7r 1 F7 .byte $f7 +0002F8r 1 F8 .byte $f8 +0002F9r 1 F9 .byte $f9 +0002FAr 1 FA .byte $fa +0002FBr 1 FB .byte $fb +0002FCr 1 FC .byte $fc +0002FDr 1 FD .byte $fd +0002FEr 1 FE .byte $fe +0002FFr 1 FF .byte $ff 000300r 1 -000300r 1 ; hex values, uppercase -000300r 1 00 .byte $0 -000301r 1 01 .byte $1 -000302r 1 02 .byte $2 -000303r 1 03 .byte $3 -000304r 1 04 .byte $4 -000305r 1 05 .byte $5 -000306r 1 06 .byte $6 -000307r 1 07 .byte $7 -000308r 1 08 .byte $8 -000309r 1 09 .byte $9 -00030Ar 1 0A .byte $A -00030Br 1 0B .byte $B -00030Cr 1 0C .byte $C -00030Dr 1 0D .byte $D -00030Er 1 0E .byte $E -00030Fr 1 0F .byte $F -000310r 1 10 .byte $10 -000311r 1 11 .byte $11 -000312r 1 12 .byte $12 -000313r 1 13 .byte $13 -000314r 1 14 .byte $14 -000315r 1 15 .byte $15 -000316r 1 16 .byte $16 -000317r 1 17 .byte $17 -000318r 1 18 .byte $18 -000319r 1 19 .byte $19 -00031Ar 1 1A .byte $1A -00031Br 1 1B .byte $1B -00031Cr 1 1C .byte $1C -00031Dr 1 1D .byte $1D -00031Er 1 1E .byte $1E -00031Fr 1 1F .byte $1F -000320r 1 20 .byte $20 -000321r 1 21 .byte $21 -000322r 1 22 .byte $22 -000323r 1 23 .byte $23 -000324r 1 24 .byte $24 -000325r 1 25 .byte $25 -000326r 1 26 .byte $26 -000327r 1 27 .byte $27 -000328r 1 28 .byte $28 -000329r 1 29 .byte $29 -00032Ar 1 2A .byte $2A -00032Br 1 2B .byte $2B -00032Cr 1 2C .byte $2C -00032Dr 1 2D .byte $2D -00032Er 1 2E .byte $2E -00032Fr 1 2F .byte $2F -000330r 1 30 .byte $30 -000331r 1 31 .byte $31 -000332r 1 32 .byte $32 -000333r 1 33 .byte $33 -000334r 1 34 .byte $34 -000335r 1 35 .byte $35 -000336r 1 36 .byte $36 -000337r 1 37 .byte $37 -000338r 1 38 .byte $38 -000339r 1 39 .byte $39 -00033Ar 1 3A .byte $3A -00033Br 1 3B .byte $3B -00033Cr 1 3C .byte $3C -00033Dr 1 3D .byte $3D -00033Er 1 3E .byte $3E -00033Fr 1 3F .byte $3F -000340r 1 40 .byte $40 -000341r 1 41 .byte $41 -000342r 1 42 .byte $42 -000343r 1 43 .byte $43 -000344r 1 44 .byte $44 -000345r 1 45 .byte $45 -000346r 1 46 .byte $46 -000347r 1 47 .byte $47 -000348r 1 48 .byte $48 -000349r 1 49 .byte $49 -00034Ar 1 4A .byte $4A -00034Br 1 4B .byte $4B -00034Cr 1 4C .byte $4C -00034Dr 1 4D .byte $4D -00034Er 1 4E .byte $4E -00034Fr 1 4F .byte $4F -000350r 1 50 .byte $50 -000351r 1 51 .byte $51 -000352r 1 52 .byte $52 -000353r 1 53 .byte $53 -000354r 1 54 .byte $54 -000355r 1 55 .byte $55 -000356r 1 56 .byte $56 -000357r 1 57 .byte $57 -000358r 1 58 .byte $58 -000359r 1 59 .byte $59 -00035Ar 1 5A .byte $5A -00035Br 1 5B .byte $5B -00035Cr 1 5C .byte $5C -00035Dr 1 5D .byte $5D -00035Er 1 5E .byte $5E -00035Fr 1 5F .byte $5F -000360r 1 60 .byte $60 -000361r 1 61 .byte $61 -000362r 1 62 .byte $62 -000363r 1 63 .byte $63 -000364r 1 64 .byte $64 -000365r 1 65 .byte $65 -000366r 1 66 .byte $66 -000367r 1 67 .byte $67 -000368r 1 68 .byte $68 -000369r 1 69 .byte $69 -00036Ar 1 6A .byte $6A -00036Br 1 6B .byte $6B -00036Cr 1 6C .byte $6C -00036Dr 1 6D .byte $6D -00036Er 1 6E .byte $6E -00036Fr 1 6F .byte $6F -000370r 1 70 .byte $70 -000371r 1 71 .byte $71 -000372r 1 72 .byte $72 -000373r 1 73 .byte $73 -000374r 1 74 .byte $74 -000375r 1 75 .byte $75 -000376r 1 76 .byte $76 -000377r 1 77 .byte $77 -000378r 1 78 .byte $78 -000379r 1 79 .byte $79 -00037Ar 1 7A .byte $7A -00037Br 1 7B .byte $7B -00037Cr 1 7C .byte $7C -00037Dr 1 7D .byte $7D -00037Er 1 7E .byte $7E -00037Fr 1 7F .byte $7F -000380r 1 80 .byte $80 -000381r 1 81 .byte $81 -000382r 1 82 .byte $82 -000383r 1 83 .byte $83 -000384r 1 84 .byte $84 -000385r 1 85 .byte $85 -000386r 1 86 .byte $86 -000387r 1 87 .byte $87 -000388r 1 88 .byte $88 -000389r 1 89 .byte $89 -00038Ar 1 8A .byte $8A -00038Br 1 8B .byte $8B -00038Cr 1 8C .byte $8C -00038Dr 1 8D .byte $8D -00038Er 1 8E .byte $8E -00038Fr 1 8F .byte $8F -000390r 1 90 .byte $90 -000391r 1 91 .byte $91 -000392r 1 92 .byte $92 -000393r 1 93 .byte $93 -000394r 1 94 .byte $94 -000395r 1 95 .byte $95 -000396r 1 96 .byte $96 -000397r 1 97 .byte $97 -000398r 1 98 .byte $98 -000399r 1 99 .byte $99 -00039Ar 1 9A .byte $9A -00039Br 1 9B .byte $9B -00039Cr 1 9C .byte $9C -00039Dr 1 9D .byte $9D -00039Er 1 9E .byte $9E -00039Fr 1 9F .byte $9F -0003A0r 1 A0 .byte $A0 -0003A1r 1 A1 .byte $A1 -0003A2r 1 A2 .byte $A2 -0003A3r 1 A3 .byte $A3 -0003A4r 1 A4 .byte $A4 -0003A5r 1 A5 .byte $A5 -0003A6r 1 A6 .byte $A6 -0003A7r 1 A7 .byte $A7 -0003A8r 1 A8 .byte $A8 -0003A9r 1 A9 .byte $A9 -0003AAr 1 AA .byte $AA -0003ABr 1 AB .byte $AB -0003ACr 1 AC .byte $AC -0003ADr 1 AD .byte $AD -0003AEr 1 AE .byte $AE -0003AFr 1 AF .byte $AF -0003B0r 1 B0 .byte $B0 -0003B1r 1 B1 .byte $B1 -0003B2r 1 B2 .byte $B2 -0003B3r 1 B3 .byte $B3 -0003B4r 1 B4 .byte $B4 -0003B5r 1 B5 .byte $B5 -0003B6r 1 B6 .byte $B6 -0003B7r 1 B7 .byte $B7 -0003B8r 1 B8 .byte $B8 -0003B9r 1 B9 .byte $B9 -0003BAr 1 BA .byte $BA -0003BBr 1 BB .byte $BB -0003BCr 1 BC .byte $BC -0003BDr 1 BD .byte $BD -0003BEr 1 BE .byte $BE -0003BFr 1 BF .byte $BF -0003C0r 1 C0 .byte $C0 -0003C1r 1 C1 .byte $C1 -0003C2r 1 C2 .byte $C2 -0003C3r 1 C3 .byte $C3 -0003C4r 1 C4 .byte $C4 -0003C5r 1 C5 .byte $C5 -0003C6r 1 C6 .byte $C6 -0003C7r 1 C7 .byte $C7 -0003C8r 1 C8 .byte $C8 -0003C9r 1 C9 .byte $C9 -0003CAr 1 CA .byte $CA -0003CBr 1 CB .byte $CB -0003CCr 1 CC .byte $CC -0003CDr 1 CD .byte $CD -0003CEr 1 CE .byte $CE -0003CFr 1 CF .byte $CF -0003D0r 1 D0 .byte $D0 -0003D1r 1 D1 .byte $D1 -0003D2r 1 D2 .byte $D2 -0003D3r 1 D3 .byte $D3 -0003D4r 1 D4 .byte $D4 -0003D5r 1 D5 .byte $D5 -0003D6r 1 D6 .byte $D6 -0003D7r 1 D7 .byte $D7 -0003D8r 1 D8 .byte $D8 -0003D9r 1 D9 .byte $D9 -0003DAr 1 DA .byte $DA -0003DBr 1 DB .byte $DB -0003DCr 1 DC .byte $DC -0003DDr 1 DD .byte $DD -0003DEr 1 DE .byte $DE -0003DFr 1 DF .byte $DF -0003E0r 1 E0 .byte $E0 -0003E1r 1 E1 .byte $E1 -0003E2r 1 E2 .byte $E2 -0003E3r 1 E3 .byte $E3 -0003E4r 1 E4 .byte $E4 -0003E5r 1 E5 .byte $E5 -0003E6r 1 E6 .byte $E6 -0003E7r 1 E7 .byte $E7 -0003E8r 1 E8 .byte $E8 -0003E9r 1 E9 .byte $E9 -0003EAr 1 EA .byte $EA -0003EBr 1 EB .byte $EB -0003ECr 1 EC .byte $EC -0003EDr 1 ED .byte $ED -0003EEr 1 EE .byte $EE -0003EFr 1 EF .byte $EF -0003F0r 1 F0 .byte $F0 -0003F1r 1 F1 .byte $F1 -0003F2r 1 F2 .byte $F2 -0003F3r 1 F3 .byte $F3 -0003F4r 1 F4 .byte $F4 -0003F5r 1 F5 .byte $F5 -0003F6r 1 F6 .byte $F6 -0003F7r 1 F7 .byte $F7 -0003F8r 1 F8 .byte $F8 -0003F9r 1 F9 .byte $F9 -0003FAr 1 FA .byte $FA -0003FBr 1 FB .byte $FB -0003FCr 1 FC .byte $FC -0003FDr 1 FD .byte $FD -0003FEr 1 FE .byte $FE -0003FFr 1 FF .byte $FF +000300r 1 ; hex values, uppercase +000300r 1 00 .byte $0 +000301r 1 01 .byte $1 +000302r 1 02 .byte $2 +000303r 1 03 .byte $3 +000304r 1 04 .byte $4 +000305r 1 05 .byte $5 +000306r 1 06 .byte $6 +000307r 1 07 .byte $7 +000308r 1 08 .byte $8 +000309r 1 09 .byte $9 +00030Ar 1 0A .byte $A +00030Br 1 0B .byte $B +00030Cr 1 0C .byte $C +00030Dr 1 0D .byte $D +00030Er 1 0E .byte $E +00030Fr 1 0F .byte $F +000310r 1 10 .byte $10 +000311r 1 11 .byte $11 +000312r 1 12 .byte $12 +000313r 1 13 .byte $13 +000314r 1 14 .byte $14 +000315r 1 15 .byte $15 +000316r 1 16 .byte $16 +000317r 1 17 .byte $17 +000318r 1 18 .byte $18 +000319r 1 19 .byte $19 +00031Ar 1 1A .byte $1A +00031Br 1 1B .byte $1B +00031Cr 1 1C .byte $1C +00031Dr 1 1D .byte $1D +00031Er 1 1E .byte $1E +00031Fr 1 1F .byte $1F +000320r 1 20 .byte $20 +000321r 1 21 .byte $21 +000322r 1 22 .byte $22 +000323r 1 23 .byte $23 +000324r 1 24 .byte $24 +000325r 1 25 .byte $25 +000326r 1 26 .byte $26 +000327r 1 27 .byte $27 +000328r 1 28 .byte $28 +000329r 1 29 .byte $29 +00032Ar 1 2A .byte $2A +00032Br 1 2B .byte $2B +00032Cr 1 2C .byte $2C +00032Dr 1 2D .byte $2D +00032Er 1 2E .byte $2E +00032Fr 1 2F .byte $2F +000330r 1 30 .byte $30 +000331r 1 31 .byte $31 +000332r 1 32 .byte $32 +000333r 1 33 .byte $33 +000334r 1 34 .byte $34 +000335r 1 35 .byte $35 +000336r 1 36 .byte $36 +000337r 1 37 .byte $37 +000338r 1 38 .byte $38 +000339r 1 39 .byte $39 +00033Ar 1 3A .byte $3A +00033Br 1 3B .byte $3B +00033Cr 1 3C .byte $3C +00033Dr 1 3D .byte $3D +00033Er 1 3E .byte $3E +00033Fr 1 3F .byte $3F +000340r 1 40 .byte $40 +000341r 1 41 .byte $41 +000342r 1 42 .byte $42 +000343r 1 43 .byte $43 +000344r 1 44 .byte $44 +000345r 1 45 .byte $45 +000346r 1 46 .byte $46 +000347r 1 47 .byte $47 +000348r 1 48 .byte $48 +000349r 1 49 .byte $49 +00034Ar 1 4A .byte $4A +00034Br 1 4B .byte $4B +00034Cr 1 4C .byte $4C +00034Dr 1 4D .byte $4D +00034Er 1 4E .byte $4E +00034Fr 1 4F .byte $4F +000350r 1 50 .byte $50 +000351r 1 51 .byte $51 +000352r 1 52 .byte $52 +000353r 1 53 .byte $53 +000354r 1 54 .byte $54 +000355r 1 55 .byte $55 +000356r 1 56 .byte $56 +000357r 1 57 .byte $57 +000358r 1 58 .byte $58 +000359r 1 59 .byte $59 +00035Ar 1 5A .byte $5A +00035Br 1 5B .byte $5B +00035Cr 1 5C .byte $5C +00035Dr 1 5D .byte $5D +00035Er 1 5E .byte $5E +00035Fr 1 5F .byte $5F +000360r 1 60 .byte $60 +000361r 1 61 .byte $61 +000362r 1 62 .byte $62 +000363r 1 63 .byte $63 +000364r 1 64 .byte $64 +000365r 1 65 .byte $65 +000366r 1 66 .byte $66 +000367r 1 67 .byte $67 +000368r 1 68 .byte $68 +000369r 1 69 .byte $69 +00036Ar 1 6A .byte $6A +00036Br 1 6B .byte $6B +00036Cr 1 6C .byte $6C +00036Dr 1 6D .byte $6D +00036Er 1 6E .byte $6E +00036Fr 1 6F .byte $6F +000370r 1 70 .byte $70 +000371r 1 71 .byte $71 +000372r 1 72 .byte $72 +000373r 1 73 .byte $73 +000374r 1 74 .byte $74 +000375r 1 75 .byte $75 +000376r 1 76 .byte $76 +000377r 1 77 .byte $77 +000378r 1 78 .byte $78 +000379r 1 79 .byte $79 +00037Ar 1 7A .byte $7A +00037Br 1 7B .byte $7B +00037Cr 1 7C .byte $7C +00037Dr 1 7D .byte $7D +00037Er 1 7E .byte $7E +00037Fr 1 7F .byte $7F +000380r 1 80 .byte $80 +000381r 1 81 .byte $81 +000382r 1 82 .byte $82 +000383r 1 83 .byte $83 +000384r 1 84 .byte $84 +000385r 1 85 .byte $85 +000386r 1 86 .byte $86 +000387r 1 87 .byte $87 +000388r 1 88 .byte $88 +000389r 1 89 .byte $89 +00038Ar 1 8A .byte $8A +00038Br 1 8B .byte $8B +00038Cr 1 8C .byte $8C +00038Dr 1 8D .byte $8D +00038Er 1 8E .byte $8E +00038Fr 1 8F .byte $8F +000390r 1 90 .byte $90 +000391r 1 91 .byte $91 +000392r 1 92 .byte $92 +000393r 1 93 .byte $93 +000394r 1 94 .byte $94 +000395r 1 95 .byte $95 +000396r 1 96 .byte $96 +000397r 1 97 .byte $97 +000398r 1 98 .byte $98 +000399r 1 99 .byte $99 +00039Ar 1 9A .byte $9A +00039Br 1 9B .byte $9B +00039Cr 1 9C .byte $9C +00039Dr 1 9D .byte $9D +00039Er 1 9E .byte $9E +00039Fr 1 9F .byte $9F +0003A0r 1 A0 .byte $A0 +0003A1r 1 A1 .byte $A1 +0003A2r 1 A2 .byte $A2 +0003A3r 1 A3 .byte $A3 +0003A4r 1 A4 .byte $A4 +0003A5r 1 A5 .byte $A5 +0003A6r 1 A6 .byte $A6 +0003A7r 1 A7 .byte $A7 +0003A8r 1 A8 .byte $A8 +0003A9r 1 A9 .byte $A9 +0003AAr 1 AA .byte $AA +0003ABr 1 AB .byte $AB +0003ACr 1 AC .byte $AC +0003ADr 1 AD .byte $AD +0003AEr 1 AE .byte $AE +0003AFr 1 AF .byte $AF +0003B0r 1 B0 .byte $B0 +0003B1r 1 B1 .byte $B1 +0003B2r 1 B2 .byte $B2 +0003B3r 1 B3 .byte $B3 +0003B4r 1 B4 .byte $B4 +0003B5r 1 B5 .byte $B5 +0003B6r 1 B6 .byte $B6 +0003B7r 1 B7 .byte $B7 +0003B8r 1 B8 .byte $B8 +0003B9r 1 B9 .byte $B9 +0003BAr 1 BA .byte $BA +0003BBr 1 BB .byte $BB +0003BCr 1 BC .byte $BC +0003BDr 1 BD .byte $BD +0003BEr 1 BE .byte $BE +0003BFr 1 BF .byte $BF +0003C0r 1 C0 .byte $C0 +0003C1r 1 C1 .byte $C1 +0003C2r 1 C2 .byte $C2 +0003C3r 1 C3 .byte $C3 +0003C4r 1 C4 .byte $C4 +0003C5r 1 C5 .byte $C5 +0003C6r 1 C6 .byte $C6 +0003C7r 1 C7 .byte $C7 +0003C8r 1 C8 .byte $C8 +0003C9r 1 C9 .byte $C9 +0003CAr 1 CA .byte $CA +0003CBr 1 CB .byte $CB +0003CCr 1 CC .byte $CC +0003CDr 1 CD .byte $CD +0003CEr 1 CE .byte $CE +0003CFr 1 CF .byte $CF +0003D0r 1 D0 .byte $D0 +0003D1r 1 D1 .byte $D1 +0003D2r 1 D2 .byte $D2 +0003D3r 1 D3 .byte $D3 +0003D4r 1 D4 .byte $D4 +0003D5r 1 D5 .byte $D5 +0003D6r 1 D6 .byte $D6 +0003D7r 1 D7 .byte $D7 +0003D8r 1 D8 .byte $D8 +0003D9r 1 D9 .byte $D9 +0003DAr 1 DA .byte $DA +0003DBr 1 DB .byte $DB +0003DCr 1 DC .byte $DC +0003DDr 1 DD .byte $DD +0003DEr 1 DE .byte $DE +0003DFr 1 DF .byte $DF +0003E0r 1 E0 .byte $E0 +0003E1r 1 E1 .byte $E1 +0003E2r 1 E2 .byte $E2 +0003E3r 1 E3 .byte $E3 +0003E4r 1 E4 .byte $E4 +0003E5r 1 E5 .byte $E5 +0003E6r 1 E6 .byte $E6 +0003E7r 1 E7 .byte $E7 +0003E8r 1 E8 .byte $E8 +0003E9r 1 E9 .byte $E9 +0003EAr 1 EA .byte $EA +0003EBr 1 EB .byte $EB +0003ECr 1 EC .byte $EC +0003EDr 1 ED .byte $ED +0003EEr 1 EE .byte $EE +0003EFr 1 EF .byte $EF +0003F0r 1 F0 .byte $F0 +0003F1r 1 F1 .byte $F1 +0003F2r 1 F2 .byte $F2 +0003F3r 1 F3 .byte $F3 +0003F4r 1 F4 .byte $F4 +0003F5r 1 F5 .byte $F5 +0003F6r 1 F6 .byte $F6 +0003F7r 1 F7 .byte $F7 +0003F8r 1 F8 .byte $F8 +0003F9r 1 F9 .byte $F9 +0003FAr 1 FA .byte $FA +0003FBr 1 FB .byte $FB +0003FCr 1 FC .byte $FC +0003FDr 1 FD .byte $FD +0003FEr 1 FE .byte $FE +0003FFr 1 FF .byte $FF 000400r 1 -000400r 1 ; 2-digit hex values -000400r 1 00 .byte $00 -000401r 1 01 .byte $01 -000402r 1 02 .byte $02 -000403r 1 03 .byte $03 -000404r 1 04 .byte $04 -000405r 1 05 .byte $05 -000406r 1 06 .byte $06 -000407r 1 07 .byte $07 -000408r 1 08 .byte $08 -000409r 1 09 .byte $09 -00040Ar 1 0A .byte $0a -00040Br 1 0B .byte $0b -00040Cr 1 0C .byte $0c -00040Dr 1 0D .byte $0d -00040Er 1 0E .byte $0e -00040Fr 1 0F .byte $0f -000410r 1 10 .byte $10 -000411r 1 11 .byte $11 -000412r 1 12 .byte $12 -000413r 1 13 .byte $13 -000414r 1 14 .byte $14 -000415r 1 15 .byte $15 -000416r 1 16 .byte $16 -000417r 1 17 .byte $17 -000418r 1 18 .byte $18 -000419r 1 19 .byte $19 -00041Ar 1 1A .byte $1a -00041Br 1 1B .byte $1b -00041Cr 1 1C .byte $1c -00041Dr 1 1D .byte $1d -00041Er 1 1E .byte $1e -00041Fr 1 1F .byte $1f -000420r 1 20 .byte $20 -000421r 1 21 .byte $21 -000422r 1 22 .byte $22 -000423r 1 23 .byte $23 -000424r 1 24 .byte $24 -000425r 1 25 .byte $25 -000426r 1 26 .byte $26 -000427r 1 27 .byte $27 -000428r 1 28 .byte $28 -000429r 1 29 .byte $29 -00042Ar 1 2A .byte $2a -00042Br 1 2B .byte $2b -00042Cr 1 2C .byte $2c -00042Dr 1 2D .byte $2d -00042Er 1 2E .byte $2e -00042Fr 1 2F .byte $2f -000430r 1 30 .byte $30 -000431r 1 31 .byte $31 -000432r 1 32 .byte $32 -000433r 1 33 .byte $33 -000434r 1 34 .byte $34 -000435r 1 35 .byte $35 -000436r 1 36 .byte $36 -000437r 1 37 .byte $37 -000438r 1 38 .byte $38 -000439r 1 39 .byte $39 -00043Ar 1 3A .byte $3a -00043Br 1 3B .byte $3b -00043Cr 1 3C .byte $3c -00043Dr 1 3D .byte $3d -00043Er 1 3E .byte $3e -00043Fr 1 3F .byte $3f -000440r 1 40 .byte $40 -000441r 1 41 .byte $41 -000442r 1 42 .byte $42 -000443r 1 43 .byte $43 -000444r 1 44 .byte $44 -000445r 1 45 .byte $45 -000446r 1 46 .byte $46 -000447r 1 47 .byte $47 -000448r 1 48 .byte $48 -000449r 1 49 .byte $49 -00044Ar 1 4A .byte $4a -00044Br 1 4B .byte $4b -00044Cr 1 4C .byte $4c -00044Dr 1 4D .byte $4d -00044Er 1 4E .byte $4e -00044Fr 1 4F .byte $4f -000450r 1 50 .byte $50 -000451r 1 51 .byte $51 -000452r 1 52 .byte $52 -000453r 1 53 .byte $53 -000454r 1 54 .byte $54 -000455r 1 55 .byte $55 -000456r 1 56 .byte $56 -000457r 1 57 .byte $57 -000458r 1 58 .byte $58 -000459r 1 59 .byte $59 -00045Ar 1 5A .byte $5a -00045Br 1 5B .byte $5b -00045Cr 1 5C .byte $5c -00045Dr 1 5D .byte $5d -00045Er 1 5E .byte $5e -00045Fr 1 5F .byte $5f -000460r 1 60 .byte $60 -000461r 1 61 .byte $61 -000462r 1 62 .byte $62 -000463r 1 63 .byte $63 -000464r 1 64 .byte $64 -000465r 1 65 .byte $65 -000466r 1 66 .byte $66 -000467r 1 67 .byte $67 -000468r 1 68 .byte $68 -000469r 1 69 .byte $69 -00046Ar 1 6A .byte $6a -00046Br 1 6B .byte $6b -00046Cr 1 6C .byte $6c -00046Dr 1 6D .byte $6d -00046Er 1 6E .byte $6e -00046Fr 1 6F .byte $6f -000470r 1 70 .byte $70 -000471r 1 71 .byte $71 -000472r 1 72 .byte $72 -000473r 1 73 .byte $73 -000474r 1 74 .byte $74 -000475r 1 75 .byte $75 -000476r 1 76 .byte $76 -000477r 1 77 .byte $77 -000478r 1 78 .byte $78 -000479r 1 79 .byte $79 -00047Ar 1 7A .byte $7a -00047Br 1 7B .byte $7b -00047Cr 1 7C .byte $7c -00047Dr 1 7D .byte $7d -00047Er 1 7E .byte $7e -00047Fr 1 7F .byte $7f -000480r 1 80 .byte $80 -000481r 1 81 .byte $81 -000482r 1 82 .byte $82 -000483r 1 83 .byte $83 -000484r 1 84 .byte $84 -000485r 1 85 .byte $85 -000486r 1 86 .byte $86 -000487r 1 87 .byte $87 -000488r 1 88 .byte $88 -000489r 1 89 .byte $89 -00048Ar 1 8A .byte $8a -00048Br 1 8B .byte $8b -00048Cr 1 8C .byte $8c -00048Dr 1 8D .byte $8d -00048Er 1 8E .byte $8e -00048Fr 1 8F .byte $8f -000490r 1 90 .byte $90 -000491r 1 91 .byte $91 -000492r 1 92 .byte $92 -000493r 1 93 .byte $93 -000494r 1 94 .byte $94 -000495r 1 95 .byte $95 -000496r 1 96 .byte $96 -000497r 1 97 .byte $97 -000498r 1 98 .byte $98 -000499r 1 99 .byte $99 -00049Ar 1 9A .byte $9a -00049Br 1 9B .byte $9b -00049Cr 1 9C .byte $9c -00049Dr 1 9D .byte $9d -00049Er 1 9E .byte $9e -00049Fr 1 9F .byte $9f -0004A0r 1 A0 .byte $a0 -0004A1r 1 A1 .byte $a1 -0004A2r 1 A2 .byte $a2 -0004A3r 1 A3 .byte $a3 -0004A4r 1 A4 .byte $a4 -0004A5r 1 A5 .byte $a5 -0004A6r 1 A6 .byte $a6 -0004A7r 1 A7 .byte $a7 -0004A8r 1 A8 .byte $a8 -0004A9r 1 A9 .byte $a9 -0004AAr 1 AA .byte $aa -0004ABr 1 AB .byte $ab -0004ACr 1 AC .byte $ac -0004ADr 1 AD .byte $ad -0004AEr 1 AE .byte $ae -0004AFr 1 AF .byte $af -0004B0r 1 B0 .byte $b0 -0004B1r 1 B1 .byte $b1 -0004B2r 1 B2 .byte $b2 -0004B3r 1 B3 .byte $b3 -0004B4r 1 B4 .byte $b4 -0004B5r 1 B5 .byte $b5 -0004B6r 1 B6 .byte $b6 -0004B7r 1 B7 .byte $b7 -0004B8r 1 B8 .byte $b8 -0004B9r 1 B9 .byte $b9 -0004BAr 1 BA .byte $ba -0004BBr 1 BB .byte $bb -0004BCr 1 BC .byte $bc -0004BDr 1 BD .byte $bd -0004BEr 1 BE .byte $be -0004BFr 1 BF .byte $bf -0004C0r 1 C0 .byte $c0 -0004C1r 1 C1 .byte $c1 -0004C2r 1 C2 .byte $c2 -0004C3r 1 C3 .byte $c3 -0004C4r 1 C4 .byte $c4 -0004C5r 1 C5 .byte $c5 -0004C6r 1 C6 .byte $c6 -0004C7r 1 C7 .byte $c7 -0004C8r 1 C8 .byte $c8 -0004C9r 1 C9 .byte $c9 -0004CAr 1 CA .byte $ca -0004CBr 1 CB .byte $cb -0004CCr 1 CC .byte $cc -0004CDr 1 CD .byte $cd -0004CEr 1 CE .byte $ce -0004CFr 1 CF .byte $cf -0004D0r 1 D0 .byte $d0 -0004D1r 1 D1 .byte $d1 -0004D2r 1 D2 .byte $d2 -0004D3r 1 D3 .byte $d3 -0004D4r 1 D4 .byte $d4 -0004D5r 1 D5 .byte $d5 -0004D6r 1 D6 .byte $d6 -0004D7r 1 D7 .byte $d7 -0004D8r 1 D8 .byte $d8 -0004D9r 1 D9 .byte $d9 -0004DAr 1 DA .byte $da -0004DBr 1 DB .byte $db -0004DCr 1 DC .byte $dc -0004DDr 1 DD .byte $dd -0004DEr 1 DE .byte $de -0004DFr 1 DF .byte $df -0004E0r 1 E0 .byte $e0 -0004E1r 1 E1 .byte $e1 -0004E2r 1 E2 .byte $e2 -0004E3r 1 E3 .byte $e3 -0004E4r 1 E4 .byte $e4 -0004E5r 1 E5 .byte $e5 -0004E6r 1 E6 .byte $e6 -0004E7r 1 E7 .byte $e7 -0004E8r 1 E8 .byte $e8 -0004E9r 1 E9 .byte $e9 -0004EAr 1 EA .byte $ea -0004EBr 1 EB .byte $eb -0004ECr 1 EC .byte $ec -0004EDr 1 ED .byte $ed -0004EEr 1 EE .byte $ee -0004EFr 1 EF .byte $ef -0004F0r 1 F0 .byte $f0 -0004F1r 1 F1 .byte $f1 -0004F2r 1 F2 .byte $f2 -0004F3r 1 F3 .byte $f3 -0004F4r 1 F4 .byte $f4 -0004F5r 1 F5 .byte $f5 -0004F6r 1 F6 .byte $f6 -0004F7r 1 F7 .byte $f7 -0004F8r 1 F8 .byte $f8 -0004F9r 1 F9 .byte $f9 -0004FAr 1 FA .byte $fa -0004FBr 1 FB .byte $fb -0004FCr 1 FC .byte $fc -0004FDr 1 FD .byte $fd -0004FEr 1 FE .byte $fe -0004FFr 1 FF .byte $ff +000400r 1 ; 2-digit hex values +000400r 1 00 .byte $00 +000401r 1 01 .byte $01 +000402r 1 02 .byte $02 +000403r 1 03 .byte $03 +000404r 1 04 .byte $04 +000405r 1 05 .byte $05 +000406r 1 06 .byte $06 +000407r 1 07 .byte $07 +000408r 1 08 .byte $08 +000409r 1 09 .byte $09 +00040Ar 1 0A .byte $0a +00040Br 1 0B .byte $0b +00040Cr 1 0C .byte $0c +00040Dr 1 0D .byte $0d +00040Er 1 0E .byte $0e +00040Fr 1 0F .byte $0f +000410r 1 10 .byte $10 +000411r 1 11 .byte $11 +000412r 1 12 .byte $12 +000413r 1 13 .byte $13 +000414r 1 14 .byte $14 +000415r 1 15 .byte $15 +000416r 1 16 .byte $16 +000417r 1 17 .byte $17 +000418r 1 18 .byte $18 +000419r 1 19 .byte $19 +00041Ar 1 1A .byte $1a +00041Br 1 1B .byte $1b +00041Cr 1 1C .byte $1c +00041Dr 1 1D .byte $1d +00041Er 1 1E .byte $1e +00041Fr 1 1F .byte $1f +000420r 1 20 .byte $20 +000421r 1 21 .byte $21 +000422r 1 22 .byte $22 +000423r 1 23 .byte $23 +000424r 1 24 .byte $24 +000425r 1 25 .byte $25 +000426r 1 26 .byte $26 +000427r 1 27 .byte $27 +000428r 1 28 .byte $28 +000429r 1 29 .byte $29 +00042Ar 1 2A .byte $2a +00042Br 1 2B .byte $2b +00042Cr 1 2C .byte $2c +00042Dr 1 2D .byte $2d +00042Er 1 2E .byte $2e +00042Fr 1 2F .byte $2f +000430r 1 30 .byte $30 +000431r 1 31 .byte $31 +000432r 1 32 .byte $32 +000433r 1 33 .byte $33 +000434r 1 34 .byte $34 +000435r 1 35 .byte $35 +000436r 1 36 .byte $36 +000437r 1 37 .byte $37 +000438r 1 38 .byte $38 +000439r 1 39 .byte $39 +00043Ar 1 3A .byte $3a +00043Br 1 3B .byte $3b +00043Cr 1 3C .byte $3c +00043Dr 1 3D .byte $3d +00043Er 1 3E .byte $3e +00043Fr 1 3F .byte $3f +000440r 1 40 .byte $40 +000441r 1 41 .byte $41 +000442r 1 42 .byte $42 +000443r 1 43 .byte $43 +000444r 1 44 .byte $44 +000445r 1 45 .byte $45 +000446r 1 46 .byte $46 +000447r 1 47 .byte $47 +000448r 1 48 .byte $48 +000449r 1 49 .byte $49 +00044Ar 1 4A .byte $4a +00044Br 1 4B .byte $4b +00044Cr 1 4C .byte $4c +00044Dr 1 4D .byte $4d +00044Er 1 4E .byte $4e +00044Fr 1 4F .byte $4f +000450r 1 50 .byte $50 +000451r 1 51 .byte $51 +000452r 1 52 .byte $52 +000453r 1 53 .byte $53 +000454r 1 54 .byte $54 +000455r 1 55 .byte $55 +000456r 1 56 .byte $56 +000457r 1 57 .byte $57 +000458r 1 58 .byte $58 +000459r 1 59 .byte $59 +00045Ar 1 5A .byte $5a +00045Br 1 5B .byte $5b +00045Cr 1 5C .byte $5c +00045Dr 1 5D .byte $5d +00045Er 1 5E .byte $5e +00045Fr 1 5F .byte $5f +000460r 1 60 .byte $60 +000461r 1 61 .byte $61 +000462r 1 62 .byte $62 +000463r 1 63 .byte $63 +000464r 1 64 .byte $64 +000465r 1 65 .byte $65 +000466r 1 66 .byte $66 +000467r 1 67 .byte $67 +000468r 1 68 .byte $68 +000469r 1 69 .byte $69 +00046Ar 1 6A .byte $6a +00046Br 1 6B .byte $6b +00046Cr 1 6C .byte $6c +00046Dr 1 6D .byte $6d +00046Er 1 6E .byte $6e +00046Fr 1 6F .byte $6f +000470r 1 70 .byte $70 +000471r 1 71 .byte $71 +000472r 1 72 .byte $72 +000473r 1 73 .byte $73 +000474r 1 74 .byte $74 +000475r 1 75 .byte $75 +000476r 1 76 .byte $76 +000477r 1 77 .byte $77 +000478r 1 78 .byte $78 +000479r 1 79 .byte $79 +00047Ar 1 7A .byte $7a +00047Br 1 7B .byte $7b +00047Cr 1 7C .byte $7c +00047Dr 1 7D .byte $7d +00047Er 1 7E .byte $7e +00047Fr 1 7F .byte $7f +000480r 1 80 .byte $80 +000481r 1 81 .byte $81 +000482r 1 82 .byte $82 +000483r 1 83 .byte $83 +000484r 1 84 .byte $84 +000485r 1 85 .byte $85 +000486r 1 86 .byte $86 +000487r 1 87 .byte $87 +000488r 1 88 .byte $88 +000489r 1 89 .byte $89 +00048Ar 1 8A .byte $8a +00048Br 1 8B .byte $8b +00048Cr 1 8C .byte $8c +00048Dr 1 8D .byte $8d +00048Er 1 8E .byte $8e +00048Fr 1 8F .byte $8f +000490r 1 90 .byte $90 +000491r 1 91 .byte $91 +000492r 1 92 .byte $92 +000493r 1 93 .byte $93 +000494r 1 94 .byte $94 +000495r 1 95 .byte $95 +000496r 1 96 .byte $96 +000497r 1 97 .byte $97 +000498r 1 98 .byte $98 +000499r 1 99 .byte $99 +00049Ar 1 9A .byte $9a +00049Br 1 9B .byte $9b +00049Cr 1 9C .byte $9c +00049Dr 1 9D .byte $9d +00049Er 1 9E .byte $9e +00049Fr 1 9F .byte $9f +0004A0r 1 A0 .byte $a0 +0004A1r 1 A1 .byte $a1 +0004A2r 1 A2 .byte $a2 +0004A3r 1 A3 .byte $a3 +0004A4r 1 A4 .byte $a4 +0004A5r 1 A5 .byte $a5 +0004A6r 1 A6 .byte $a6 +0004A7r 1 A7 .byte $a7 +0004A8r 1 A8 .byte $a8 +0004A9r 1 A9 .byte $a9 +0004AAr 1 AA .byte $aa +0004ABr 1 AB .byte $ab +0004ACr 1 AC .byte $ac +0004ADr 1 AD .byte $ad +0004AEr 1 AE .byte $ae +0004AFr 1 AF .byte $af +0004B0r 1 B0 .byte $b0 +0004B1r 1 B1 .byte $b1 +0004B2r 1 B2 .byte $b2 +0004B3r 1 B3 .byte $b3 +0004B4r 1 B4 .byte $b4 +0004B5r 1 B5 .byte $b5 +0004B6r 1 B6 .byte $b6 +0004B7r 1 B7 .byte $b7 +0004B8r 1 B8 .byte $b8 +0004B9r 1 B9 .byte $b9 +0004BAr 1 BA .byte $ba +0004BBr 1 BB .byte $bb +0004BCr 1 BC .byte $bc +0004BDr 1 BD .byte $bd +0004BEr 1 BE .byte $be +0004BFr 1 BF .byte $bf +0004C0r 1 C0 .byte $c0 +0004C1r 1 C1 .byte $c1 +0004C2r 1 C2 .byte $c2 +0004C3r 1 C3 .byte $c3 +0004C4r 1 C4 .byte $c4 +0004C5r 1 C5 .byte $c5 +0004C6r 1 C6 .byte $c6 +0004C7r 1 C7 .byte $c7 +0004C8r 1 C8 .byte $c8 +0004C9r 1 C9 .byte $c9 +0004CAr 1 CA .byte $ca +0004CBr 1 CB .byte $cb +0004CCr 1 CC .byte $cc +0004CDr 1 CD .byte $cd +0004CEr 1 CE .byte $ce +0004CFr 1 CF .byte $cf +0004D0r 1 D0 .byte $d0 +0004D1r 1 D1 .byte $d1 +0004D2r 1 D2 .byte $d2 +0004D3r 1 D3 .byte $d3 +0004D4r 1 D4 .byte $d4 +0004D5r 1 D5 .byte $d5 +0004D6r 1 D6 .byte $d6 +0004D7r 1 D7 .byte $d7 +0004D8r 1 D8 .byte $d8 +0004D9r 1 D9 .byte $d9 +0004DAr 1 DA .byte $da +0004DBr 1 DB .byte $db +0004DCr 1 DC .byte $dc +0004DDr 1 DD .byte $dd +0004DEr 1 DE .byte $de +0004DFr 1 DF .byte $df +0004E0r 1 E0 .byte $e0 +0004E1r 1 E1 .byte $e1 +0004E2r 1 E2 .byte $e2 +0004E3r 1 E3 .byte $e3 +0004E4r 1 E4 .byte $e4 +0004E5r 1 E5 .byte $e5 +0004E6r 1 E6 .byte $e6 +0004E7r 1 E7 .byte $e7 +0004E8r 1 E8 .byte $e8 +0004E9r 1 E9 .byte $e9 +0004EAr 1 EA .byte $ea +0004EBr 1 EB .byte $eb +0004ECr 1 EC .byte $ec +0004EDr 1 ED .byte $ed +0004EEr 1 EE .byte $ee +0004EFr 1 EF .byte $ef +0004F0r 1 F0 .byte $f0 +0004F1r 1 F1 .byte $f1 +0004F2r 1 F2 .byte $f2 +0004F3r 1 F3 .byte $f3 +0004F4r 1 F4 .byte $f4 +0004F5r 1 F5 .byte $f5 +0004F6r 1 F6 .byte $f6 +0004F7r 1 F7 .byte $f7 +0004F8r 1 F8 .byte $f8 +0004F9r 1 F9 .byte $f9 +0004FAr 1 FA .byte $fa +0004FBr 1 FB .byte $fb +0004FCr 1 FC .byte $fc +0004FDr 1 FD .byte $fd +0004FEr 1 FE .byte $fe +0004FFr 1 FF .byte $ff 000500r 1 -000500r 1 ; 2-digit hex values, uppercase -000500r 1 00 .byte $00 -000501r 1 01 .byte $01 -000502r 1 02 .byte $02 -000503r 1 03 .byte $03 -000504r 1 04 .byte $04 -000505r 1 05 .byte $05 -000506r 1 06 .byte $06 -000507r 1 07 .byte $07 -000508r 1 08 .byte $08 -000509r 1 09 .byte $09 -00050Ar 1 0A .byte $0A -00050Br 1 0B .byte $0B -00050Cr 1 0C .byte $0C -00050Dr 1 0D .byte $0D -00050Er 1 0E .byte $0E -00050Fr 1 0F .byte $0F -000510r 1 10 .byte $10 -000511r 1 11 .byte $11 -000512r 1 12 .byte $12 -000513r 1 13 .byte $13 -000514r 1 14 .byte $14 -000515r 1 15 .byte $15 -000516r 1 16 .byte $16 -000517r 1 17 .byte $17 -000518r 1 18 .byte $18 -000519r 1 19 .byte $19 -00051Ar 1 1A .byte $1A -00051Br 1 1B .byte $1B -00051Cr 1 1C .byte $1C -00051Dr 1 1D .byte $1D -00051Er 1 1E .byte $1E -00051Fr 1 1F .byte $1F -000520r 1 20 .byte $20 -000521r 1 21 .byte $21 -000522r 1 22 .byte $22 -000523r 1 23 .byte $23 -000524r 1 24 .byte $24 -000525r 1 25 .byte $25 -000526r 1 26 .byte $26 -000527r 1 27 .byte $27 -000528r 1 28 .byte $28 -000529r 1 29 .byte $29 -00052Ar 1 2A .byte $2A -00052Br 1 2B .byte $2B -00052Cr 1 2C .byte $2C -00052Dr 1 2D .byte $2D -00052Er 1 2E .byte $2E -00052Fr 1 2F .byte $2F -000530r 1 30 .byte $30 -000531r 1 31 .byte $31 -000532r 1 32 .byte $32 -000533r 1 33 .byte $33 -000534r 1 34 .byte $34 -000535r 1 35 .byte $35 -000536r 1 36 .byte $36 -000537r 1 37 .byte $37 -000538r 1 38 .byte $38 -000539r 1 39 .byte $39 -00053Ar 1 3A .byte $3A -00053Br 1 3B .byte $3B -00053Cr 1 3C .byte $3C -00053Dr 1 3D .byte $3D -00053Er 1 3E .byte $3E -00053Fr 1 3F .byte $3F -000540r 1 40 .byte $40 -000541r 1 41 .byte $41 -000542r 1 42 .byte $42 -000543r 1 43 .byte $43 -000544r 1 44 .byte $44 -000545r 1 45 .byte $45 -000546r 1 46 .byte $46 -000547r 1 47 .byte $47 -000548r 1 48 .byte $48 -000549r 1 49 .byte $49 -00054Ar 1 4A .byte $4A -00054Br 1 4B .byte $4B -00054Cr 1 4C .byte $4C -00054Dr 1 4D .byte $4D -00054Er 1 4E .byte $4E -00054Fr 1 4F .byte $4F -000550r 1 50 .byte $50 -000551r 1 51 .byte $51 -000552r 1 52 .byte $52 -000553r 1 53 .byte $53 -000554r 1 54 .byte $54 -000555r 1 55 .byte $55 -000556r 1 56 .byte $56 -000557r 1 57 .byte $57 -000558r 1 58 .byte $58 -000559r 1 59 .byte $59 -00055Ar 1 5A .byte $5A -00055Br 1 5B .byte $5B -00055Cr 1 5C .byte $5C -00055Dr 1 5D .byte $5D -00055Er 1 5E .byte $5E -00055Fr 1 5F .byte $5F -000560r 1 60 .byte $60 -000561r 1 61 .byte $61 -000562r 1 62 .byte $62 -000563r 1 63 .byte $63 -000564r 1 64 .byte $64 -000565r 1 65 .byte $65 -000566r 1 66 .byte $66 -000567r 1 67 .byte $67 -000568r 1 68 .byte $68 -000569r 1 69 .byte $69 -00056Ar 1 6A .byte $6A -00056Br 1 6B .byte $6B -00056Cr 1 6C .byte $6C -00056Dr 1 6D .byte $6D -00056Er 1 6E .byte $6E -00056Fr 1 6F .byte $6F -000570r 1 70 .byte $70 -000571r 1 71 .byte $71 -000572r 1 72 .byte $72 -000573r 1 73 .byte $73 -000574r 1 74 .byte $74 -000575r 1 75 .byte $75 -000576r 1 76 .byte $76 -000577r 1 77 .byte $77 -000578r 1 78 .byte $78 -000579r 1 79 .byte $79 -00057Ar 1 7A .byte $7A -00057Br 1 7B .byte $7B -00057Cr 1 7C .byte $7C -00057Dr 1 7D .byte $7D -00057Er 1 7E .byte $7E -00057Fr 1 7F .byte $7F -000580r 1 80 .byte $80 -000581r 1 81 .byte $81 -000582r 1 82 .byte $82 -000583r 1 83 .byte $83 -000584r 1 84 .byte $84 -000585r 1 85 .byte $85 -000586r 1 86 .byte $86 -000587r 1 87 .byte $87 -000588r 1 88 .byte $88 -000589r 1 89 .byte $89 -00058Ar 1 8A .byte $8A -00058Br 1 8B .byte $8B -00058Cr 1 8C .byte $8C -00058Dr 1 8D .byte $8D -00058Er 1 8E .byte $8E -00058Fr 1 8F .byte $8F -000590r 1 90 .byte $90 -000591r 1 91 .byte $91 -000592r 1 92 .byte $92 -000593r 1 93 .byte $93 -000594r 1 94 .byte $94 -000595r 1 95 .byte $95 -000596r 1 96 .byte $96 -000597r 1 97 .byte $97 -000598r 1 98 .byte $98 -000599r 1 99 .byte $99 -00059Ar 1 9A .byte $9A -00059Br 1 9B .byte $9B -00059Cr 1 9C .byte $9C -00059Dr 1 9D .byte $9D -00059Er 1 9E .byte $9E -00059Fr 1 9F .byte $9F -0005A0r 1 A0 .byte $A0 -0005A1r 1 A1 .byte $A1 -0005A2r 1 A2 .byte $A2 -0005A3r 1 A3 .byte $A3 -0005A4r 1 A4 .byte $A4 -0005A5r 1 A5 .byte $A5 -0005A6r 1 A6 .byte $A6 -0005A7r 1 A7 .byte $A7 -0005A8r 1 A8 .byte $A8 -0005A9r 1 A9 .byte $A9 -0005AAr 1 AA .byte $AA -0005ABr 1 AB .byte $AB -0005ACr 1 AC .byte $AC -0005ADr 1 AD .byte $AD -0005AEr 1 AE .byte $AE -0005AFr 1 AF .byte $AF -0005B0r 1 B0 .byte $B0 -0005B1r 1 B1 .byte $B1 -0005B2r 1 B2 .byte $B2 -0005B3r 1 B3 .byte $B3 -0005B4r 1 B4 .byte $B4 -0005B5r 1 B5 .byte $B5 -0005B6r 1 B6 .byte $B6 -0005B7r 1 B7 .byte $B7 -0005B8r 1 B8 .byte $B8 -0005B9r 1 B9 .byte $B9 -0005BAr 1 BA .byte $BA -0005BBr 1 BB .byte $BB -0005BCr 1 BC .byte $BC -0005BDr 1 BD .byte $BD -0005BEr 1 BE .byte $BE -0005BFr 1 BF .byte $BF -0005C0r 1 C0 .byte $C0 -0005C1r 1 C1 .byte $C1 -0005C2r 1 C2 .byte $C2 -0005C3r 1 C3 .byte $C3 -0005C4r 1 C4 .byte $C4 -0005C5r 1 C5 .byte $C5 -0005C6r 1 C6 .byte $C6 -0005C7r 1 C7 .byte $C7 -0005C8r 1 C8 .byte $C8 -0005C9r 1 C9 .byte $C9 -0005CAr 1 CA .byte $CA -0005CBr 1 CB .byte $CB -0005CCr 1 CC .byte $CC -0005CDr 1 CD .byte $CD -0005CEr 1 CE .byte $CE -0005CFr 1 CF .byte $CF -0005D0r 1 D0 .byte $D0 -0005D1r 1 D1 .byte $D1 -0005D2r 1 D2 .byte $D2 -0005D3r 1 D3 .byte $D3 -0005D4r 1 D4 .byte $D4 -0005D5r 1 D5 .byte $D5 -0005D6r 1 D6 .byte $D6 -0005D7r 1 D7 .byte $D7 -0005D8r 1 D8 .byte $D8 -0005D9r 1 D9 .byte $D9 -0005DAr 1 DA .byte $DA -0005DBr 1 DB .byte $DB -0005DCr 1 DC .byte $DC -0005DDr 1 DD .byte $DD -0005DEr 1 DE .byte $DE -0005DFr 1 DF .byte $DF -0005E0r 1 E0 .byte $E0 -0005E1r 1 E1 .byte $E1 -0005E2r 1 E2 .byte $E2 -0005E3r 1 E3 .byte $E3 -0005E4r 1 E4 .byte $E4 -0005E5r 1 E5 .byte $E5 -0005E6r 1 E6 .byte $E6 -0005E7r 1 E7 .byte $E7 -0005E8r 1 E8 .byte $E8 -0005E9r 1 E9 .byte $E9 -0005EAr 1 EA .byte $EA -0005EBr 1 EB .byte $EB -0005ECr 1 EC .byte $EC -0005EDr 1 ED .byte $ED -0005EEr 1 EE .byte $EE -0005EFr 1 EF .byte $EF -0005F0r 1 F0 .byte $F0 -0005F1r 1 F1 .byte $F1 -0005F2r 1 F2 .byte $F2 -0005F3r 1 F3 .byte $F3 -0005F4r 1 F4 .byte $F4 -0005F5r 1 F5 .byte $F5 -0005F6r 1 F6 .byte $F6 -0005F7r 1 F7 .byte $F7 -0005F8r 1 F8 .byte $F8 -0005F9r 1 F9 .byte $F9 -0005FAr 1 FA .byte $FA -0005FBr 1 FB .byte $FB -0005FCr 1 FC .byte $FC -0005FDr 1 FD .byte $FD -0005FEr 1 FE .byte $FE -0005FFr 1 FF .byte $FF +000500r 1 ; 2-digit hex values, uppercase +000500r 1 00 .byte $00 +000501r 1 01 .byte $01 +000502r 1 02 .byte $02 +000503r 1 03 .byte $03 +000504r 1 04 .byte $04 +000505r 1 05 .byte $05 +000506r 1 06 .byte $06 +000507r 1 07 .byte $07 +000508r 1 08 .byte $08 +000509r 1 09 .byte $09 +00050Ar 1 0A .byte $0A +00050Br 1 0B .byte $0B +00050Cr 1 0C .byte $0C +00050Dr 1 0D .byte $0D +00050Er 1 0E .byte $0E +00050Fr 1 0F .byte $0F +000510r 1 10 .byte $10 +000511r 1 11 .byte $11 +000512r 1 12 .byte $12 +000513r 1 13 .byte $13 +000514r 1 14 .byte $14 +000515r 1 15 .byte $15 +000516r 1 16 .byte $16 +000517r 1 17 .byte $17 +000518r 1 18 .byte $18 +000519r 1 19 .byte $19 +00051Ar 1 1A .byte $1A +00051Br 1 1B .byte $1B +00051Cr 1 1C .byte $1C +00051Dr 1 1D .byte $1D +00051Er 1 1E .byte $1E +00051Fr 1 1F .byte $1F +000520r 1 20 .byte $20 +000521r 1 21 .byte $21 +000522r 1 22 .byte $22 +000523r 1 23 .byte $23 +000524r 1 24 .byte $24 +000525r 1 25 .byte $25 +000526r 1 26 .byte $26 +000527r 1 27 .byte $27 +000528r 1 28 .byte $28 +000529r 1 29 .byte $29 +00052Ar 1 2A .byte $2A +00052Br 1 2B .byte $2B +00052Cr 1 2C .byte $2C +00052Dr 1 2D .byte $2D +00052Er 1 2E .byte $2E +00052Fr 1 2F .byte $2F +000530r 1 30 .byte $30 +000531r 1 31 .byte $31 +000532r 1 32 .byte $32 +000533r 1 33 .byte $33 +000534r 1 34 .byte $34 +000535r 1 35 .byte $35 +000536r 1 36 .byte $36 +000537r 1 37 .byte $37 +000538r 1 38 .byte $38 +000539r 1 39 .byte $39 +00053Ar 1 3A .byte $3A +00053Br 1 3B .byte $3B +00053Cr 1 3C .byte $3C +00053Dr 1 3D .byte $3D +00053Er 1 3E .byte $3E +00053Fr 1 3F .byte $3F +000540r 1 40 .byte $40 +000541r 1 41 .byte $41 +000542r 1 42 .byte $42 +000543r 1 43 .byte $43 +000544r 1 44 .byte $44 +000545r 1 45 .byte $45 +000546r 1 46 .byte $46 +000547r 1 47 .byte $47 +000548r 1 48 .byte $48 +000549r 1 49 .byte $49 +00054Ar 1 4A .byte $4A +00054Br 1 4B .byte $4B +00054Cr 1 4C .byte $4C +00054Dr 1 4D .byte $4D +00054Er 1 4E .byte $4E +00054Fr 1 4F .byte $4F +000550r 1 50 .byte $50 +000551r 1 51 .byte $51 +000552r 1 52 .byte $52 +000553r 1 53 .byte $53 +000554r 1 54 .byte $54 +000555r 1 55 .byte $55 +000556r 1 56 .byte $56 +000557r 1 57 .byte $57 +000558r 1 58 .byte $58 +000559r 1 59 .byte $59 +00055Ar 1 5A .byte $5A +00055Br 1 5B .byte $5B +00055Cr 1 5C .byte $5C +00055Dr 1 5D .byte $5D +00055Er 1 5E .byte $5E +00055Fr 1 5F .byte $5F +000560r 1 60 .byte $60 +000561r 1 61 .byte $61 +000562r 1 62 .byte $62 +000563r 1 63 .byte $63 +000564r 1 64 .byte $64 +000565r 1 65 .byte $65 +000566r 1 66 .byte $66 +000567r 1 67 .byte $67 +000568r 1 68 .byte $68 +000569r 1 69 .byte $69 +00056Ar 1 6A .byte $6A +00056Br 1 6B .byte $6B +00056Cr 1 6C .byte $6C +00056Dr 1 6D .byte $6D +00056Er 1 6E .byte $6E +00056Fr 1 6F .byte $6F +000570r 1 70 .byte $70 +000571r 1 71 .byte $71 +000572r 1 72 .byte $72 +000573r 1 73 .byte $73 +000574r 1 74 .byte $74 +000575r 1 75 .byte $75 +000576r 1 76 .byte $76 +000577r 1 77 .byte $77 +000578r 1 78 .byte $78 +000579r 1 79 .byte $79 +00057Ar 1 7A .byte $7A +00057Br 1 7B .byte $7B +00057Cr 1 7C .byte $7C +00057Dr 1 7D .byte $7D +00057Er 1 7E .byte $7E +00057Fr 1 7F .byte $7F +000580r 1 80 .byte $80 +000581r 1 81 .byte $81 +000582r 1 82 .byte $82 +000583r 1 83 .byte $83 +000584r 1 84 .byte $84 +000585r 1 85 .byte $85 +000586r 1 86 .byte $86 +000587r 1 87 .byte $87 +000588r 1 88 .byte $88 +000589r 1 89 .byte $89 +00058Ar 1 8A .byte $8A +00058Br 1 8B .byte $8B +00058Cr 1 8C .byte $8C +00058Dr 1 8D .byte $8D +00058Er 1 8E .byte $8E +00058Fr 1 8F .byte $8F +000590r 1 90 .byte $90 +000591r 1 91 .byte $91 +000592r 1 92 .byte $92 +000593r 1 93 .byte $93 +000594r 1 94 .byte $94 +000595r 1 95 .byte $95 +000596r 1 96 .byte $96 +000597r 1 97 .byte $97 +000598r 1 98 .byte $98 +000599r 1 99 .byte $99 +00059Ar 1 9A .byte $9A +00059Br 1 9B .byte $9B +00059Cr 1 9C .byte $9C +00059Dr 1 9D .byte $9D +00059Er 1 9E .byte $9E +00059Fr 1 9F .byte $9F +0005A0r 1 A0 .byte $A0 +0005A1r 1 A1 .byte $A1 +0005A2r 1 A2 .byte $A2 +0005A3r 1 A3 .byte $A3 +0005A4r 1 A4 .byte $A4 +0005A5r 1 A5 .byte $A5 +0005A6r 1 A6 .byte $A6 +0005A7r 1 A7 .byte $A7 +0005A8r 1 A8 .byte $A8 +0005A9r 1 A9 .byte $A9 +0005AAr 1 AA .byte $AA +0005ABr 1 AB .byte $AB +0005ACr 1 AC .byte $AC +0005ADr 1 AD .byte $AD +0005AEr 1 AE .byte $AE +0005AFr 1 AF .byte $AF +0005B0r 1 B0 .byte $B0 +0005B1r 1 B1 .byte $B1 +0005B2r 1 B2 .byte $B2 +0005B3r 1 B3 .byte $B3 +0005B4r 1 B4 .byte $B4 +0005B5r 1 B5 .byte $B5 +0005B6r 1 B6 .byte $B6 +0005B7r 1 B7 .byte $B7 +0005B8r 1 B8 .byte $B8 +0005B9r 1 B9 .byte $B9 +0005BAr 1 BA .byte $BA +0005BBr 1 BB .byte $BB +0005BCr 1 BC .byte $BC +0005BDr 1 BD .byte $BD +0005BEr 1 BE .byte $BE +0005BFr 1 BF .byte $BF +0005C0r 1 C0 .byte $C0 +0005C1r 1 C1 .byte $C1 +0005C2r 1 C2 .byte $C2 +0005C3r 1 C3 .byte $C3 +0005C4r 1 C4 .byte $C4 +0005C5r 1 C5 .byte $C5 +0005C6r 1 C6 .byte $C6 +0005C7r 1 C7 .byte $C7 +0005C8r 1 C8 .byte $C8 +0005C9r 1 C9 .byte $C9 +0005CAr 1 CA .byte $CA +0005CBr 1 CB .byte $CB +0005CCr 1 CC .byte $CC +0005CDr 1 CD .byte $CD +0005CEr 1 CE .byte $CE +0005CFr 1 CF .byte $CF +0005D0r 1 D0 .byte $D0 +0005D1r 1 D1 .byte $D1 +0005D2r 1 D2 .byte $D2 +0005D3r 1 D3 .byte $D3 +0005D4r 1 D4 .byte $D4 +0005D5r 1 D5 .byte $D5 +0005D6r 1 D6 .byte $D6 +0005D7r 1 D7 .byte $D7 +0005D8r 1 D8 .byte $D8 +0005D9r 1 D9 .byte $D9 +0005DAr 1 DA .byte $DA +0005DBr 1 DB .byte $DB +0005DCr 1 DC .byte $DC +0005DDr 1 DD .byte $DD +0005DEr 1 DE .byte $DE +0005DFr 1 DF .byte $DF +0005E0r 1 E0 .byte $E0 +0005E1r 1 E1 .byte $E1 +0005E2r 1 E2 .byte $E2 +0005E3r 1 E3 .byte $E3 +0005E4r 1 E4 .byte $E4 +0005E5r 1 E5 .byte $E5 +0005E6r 1 E6 .byte $E6 +0005E7r 1 E7 .byte $E7 +0005E8r 1 E8 .byte $E8 +0005E9r 1 E9 .byte $E9 +0005EAr 1 EA .byte $EA +0005EBr 1 EB .byte $EB +0005ECr 1 EC .byte $EC +0005EDr 1 ED .byte $ED +0005EEr 1 EE .byte $EE +0005EFr 1 EF .byte $EF +0005F0r 1 F0 .byte $F0 +0005F1r 1 F1 .byte $F1 +0005F2r 1 F2 .byte $F2 +0005F3r 1 F3 .byte $F3 +0005F4r 1 F4 .byte $F4 +0005F5r 1 F5 .byte $F5 +0005F6r 1 F6 .byte $F6 +0005F7r 1 F7 .byte $F7 +0005F8r 1 F8 .byte $F8 +0005F9r 1 F9 .byte $F9 +0005FAr 1 FA .byte $FA +0005FBr 1 FB .byte $FB +0005FCr 1 FC .byte $FC +0005FDr 1 FD .byte $FD +0005FEr 1 FE .byte $FE +0005FFr 1 FF .byte $FF 000600r 1 -000600r 1 ; alternative hex values -000600r 1 00 .byte 0h -000601r 1 01 .byte 1h -000602r 1 02 .byte 2h -000603r 1 03 .byte 3h -000604r 1 04 .byte 4h -000605r 1 05 .byte 5h -000606r 1 06 .byte 6h -000607r 1 07 .byte 7h -000608r 1 08 .byte 8h -000609r 1 09 .byte 9h -00060Ar 1 0A .byte 0ah -00060Br 1 0B .byte 0bh -00060Cr 1 0C .byte 0ch -00060Dr 1 0D .byte 0dh -00060Er 1 0E .byte 0eh -00060Fr 1 0F .byte 0fh -000610r 1 10 .byte 10h -000611r 1 11 .byte 11h -000612r 1 12 .byte 12h -000613r 1 13 .byte 13h -000614r 1 14 .byte 14h -000615r 1 15 .byte 15h -000616r 1 16 .byte 16h -000617r 1 17 .byte 17h -000618r 1 18 .byte 18h -000619r 1 19 .byte 19h -00061Ar 1 1A .byte 1ah -00061Br 1 1B .byte 1bh -00061Cr 1 1C .byte 1ch -00061Dr 1 1D .byte 1dh -00061Er 1 1E .byte 1eh -00061Fr 1 1F .byte 1fh -000620r 1 20 .byte 20h -000621r 1 21 .byte 21h -000622r 1 22 .byte 22h -000623r 1 23 .byte 23h -000624r 1 24 .byte 24h -000625r 1 25 .byte 25h -000626r 1 26 .byte 26h -000627r 1 27 .byte 27h -000628r 1 28 .byte 28h -000629r 1 29 .byte 29h -00062Ar 1 2A .byte 2ah -00062Br 1 2B .byte 2bh -00062Cr 1 2C .byte 2ch -00062Dr 1 2D .byte 2dh -00062Er 1 2E .byte 2eh -00062Fr 1 2F .byte 2fh -000630r 1 30 .byte 30h -000631r 1 31 .byte 31h -000632r 1 32 .byte 32h -000633r 1 33 .byte 33h -000634r 1 34 .byte 34h -000635r 1 35 .byte 35h -000636r 1 36 .byte 36h -000637r 1 37 .byte 37h -000638r 1 38 .byte 38h -000639r 1 39 .byte 39h -00063Ar 1 3A .byte 3ah -00063Br 1 3B .byte 3bh -00063Cr 1 3C .byte 3ch -00063Dr 1 3D .byte 3dh -00063Er 1 3E .byte 3eh -00063Fr 1 3F .byte 3fh -000640r 1 40 .byte 40h -000641r 1 41 .byte 41h -000642r 1 42 .byte 42h -000643r 1 43 .byte 43h -000644r 1 44 .byte 44h -000645r 1 45 .byte 45h -000646r 1 46 .byte 46h -000647r 1 47 .byte 47h -000648r 1 48 .byte 48h -000649r 1 49 .byte 49h -00064Ar 1 4A .byte 4ah -00064Br 1 4B .byte 4bh -00064Cr 1 4C .byte 4ch -00064Dr 1 4D .byte 4dh -00064Er 1 4E .byte 4eh -00064Fr 1 4F .byte 4fh -000650r 1 50 .byte 50h -000651r 1 51 .byte 51h -000652r 1 52 .byte 52h -000653r 1 53 .byte 53h -000654r 1 54 .byte 54h -000655r 1 55 .byte 55h -000656r 1 56 .byte 56h -000657r 1 57 .byte 57h -000658r 1 58 .byte 58h -000659r 1 59 .byte 59h -00065Ar 1 5A .byte 5ah -00065Br 1 5B .byte 5bh -00065Cr 1 5C .byte 5ch -00065Dr 1 5D .byte 5dh -00065Er 1 5E .byte 5eh -00065Fr 1 5F .byte 5fh -000660r 1 60 .byte 60h -000661r 1 61 .byte 61h -000662r 1 62 .byte 62h -000663r 1 63 .byte 63h -000664r 1 64 .byte 64h -000665r 1 65 .byte 65h -000666r 1 66 .byte 66h -000667r 1 67 .byte 67h -000668r 1 68 .byte 68h -000669r 1 69 .byte 69h -00066Ar 1 6A .byte 6ah -00066Br 1 6B .byte 6bh -00066Cr 1 6C .byte 6ch -00066Dr 1 6D .byte 6dh -00066Er 1 6E .byte 6eh -00066Fr 1 6F .byte 6fh -000670r 1 70 .byte 70h -000671r 1 71 .byte 71h -000672r 1 72 .byte 72h -000673r 1 73 .byte 73h -000674r 1 74 .byte 74h -000675r 1 75 .byte 75h -000676r 1 76 .byte 76h -000677r 1 77 .byte 77h -000678r 1 78 .byte 78h -000679r 1 79 .byte 79h -00067Ar 1 7A .byte 7ah -00067Br 1 7B .byte 7bh -00067Cr 1 7C .byte 7ch -00067Dr 1 7D .byte 7dh -00067Er 1 7E .byte 7eh -00067Fr 1 7F .byte 7fh -000680r 1 80 .byte 80h -000681r 1 81 .byte 81h -000682r 1 82 .byte 82h -000683r 1 83 .byte 83h -000684r 1 84 .byte 84h -000685r 1 85 .byte 85h -000686r 1 86 .byte 86h -000687r 1 87 .byte 87h -000688r 1 88 .byte 88h -000689r 1 89 .byte 89h -00068Ar 1 8A .byte 8ah -00068Br 1 8B .byte 8bh -00068Cr 1 8C .byte 8ch -00068Dr 1 8D .byte 8dh -00068Er 1 8E .byte 8eh -00068Fr 1 8F .byte 8fh -000690r 1 90 .byte 90h -000691r 1 91 .byte 91h -000692r 1 92 .byte 92h -000693r 1 93 .byte 93h -000694r 1 94 .byte 94h -000695r 1 95 .byte 95h -000696r 1 96 .byte 96h -000697r 1 97 .byte 97h -000698r 1 98 .byte 98h -000699r 1 99 .byte 99h -00069Ar 1 9A .byte 9ah -00069Br 1 9B .byte 9bh -00069Cr 1 9C .byte 9ch -00069Dr 1 9D .byte 9dh -00069Er 1 9E .byte 9eh -00069Fr 1 9F .byte 9fh -0006A0r 1 A0 .byte 0a0h -0006A1r 1 A1 .byte 0a1h -0006A2r 1 A2 .byte 0a2h -0006A3r 1 A3 .byte 0a3h -0006A4r 1 A4 .byte 0a4h -0006A5r 1 A5 .byte 0a5h -0006A6r 1 A6 .byte 0a6h -0006A7r 1 A7 .byte 0a7h -0006A8r 1 A8 .byte 0a8h -0006A9r 1 A9 .byte 0a9h -0006AAr 1 AA .byte 0aah -0006ABr 1 AB .byte 0abh -0006ACr 1 AC .byte 0ach -0006ADr 1 AD .byte 0adh -0006AEr 1 AE .byte 0aeh -0006AFr 1 AF .byte 0afh -0006B0r 1 B0 .byte 0b0h -0006B1r 1 B1 .byte 0b1h -0006B2r 1 B2 .byte 0b2h -0006B3r 1 B3 .byte 0b3h -0006B4r 1 B4 .byte 0b4h -0006B5r 1 B5 .byte 0b5h -0006B6r 1 B6 .byte 0b6h -0006B7r 1 B7 .byte 0b7h -0006B8r 1 B8 .byte 0b8h -0006B9r 1 B9 .byte 0b9h -0006BAr 1 BA .byte 0bah -0006BBr 1 BB .byte 0bbh -0006BCr 1 BC .byte 0bch -0006BDr 1 BD .byte 0bdh -0006BEr 1 BE .byte 0beh -0006BFr 1 BF .byte 0bfh -0006C0r 1 C0 .byte 0c0h -0006C1r 1 C1 .byte 0c1h -0006C2r 1 C2 .byte 0c2h -0006C3r 1 C3 .byte 0c3h -0006C4r 1 C4 .byte 0c4h -0006C5r 1 C5 .byte 0c5h -0006C6r 1 C6 .byte 0c6h -0006C7r 1 C7 .byte 0c7h -0006C8r 1 C8 .byte 0c8h -0006C9r 1 C9 .byte 0c9h -0006CAr 1 CA .byte 0cah -0006CBr 1 CB .byte 0cbh -0006CCr 1 CC .byte 0cch -0006CDr 1 CD .byte 0cdh -0006CEr 1 CE .byte 0ceh -0006CFr 1 CF .byte 0cfh -0006D0r 1 D0 .byte 0d0h -0006D1r 1 D1 .byte 0d1h -0006D2r 1 D2 .byte 0d2h -0006D3r 1 D3 .byte 0d3h -0006D4r 1 D4 .byte 0d4h -0006D5r 1 D5 .byte 0d5h -0006D6r 1 D6 .byte 0d6h -0006D7r 1 D7 .byte 0d7h -0006D8r 1 D8 .byte 0d8h -0006D9r 1 D9 .byte 0d9h -0006DAr 1 DA .byte 0dah -0006DBr 1 DB .byte 0dbh -0006DCr 1 DC .byte 0dch -0006DDr 1 DD .byte 0ddh -0006DEr 1 DE .byte 0deh -0006DFr 1 DF .byte 0dfh -0006E0r 1 E0 .byte 0e0h -0006E1r 1 E1 .byte 0e1h -0006E2r 1 E2 .byte 0e2h -0006E3r 1 E3 .byte 0e3h -0006E4r 1 E4 .byte 0e4h -0006E5r 1 E5 .byte 0e5h -0006E6r 1 E6 .byte 0e6h -0006E7r 1 E7 .byte 0e7h -0006E8r 1 E8 .byte 0e8h -0006E9r 1 E9 .byte 0e9h -0006EAr 1 EA .byte 0eah -0006EBr 1 EB .byte 0ebh -0006ECr 1 EC .byte 0ech -0006EDr 1 ED .byte 0edh -0006EEr 1 EE .byte 0eeh -0006EFr 1 EF .byte 0efh -0006F0r 1 F0 .byte 0f0h -0006F1r 1 F1 .byte 0f1h -0006F2r 1 F2 .byte 0f2h -0006F3r 1 F3 .byte 0f3h -0006F4r 1 F4 .byte 0f4h -0006F5r 1 F5 .byte 0f5h -0006F6r 1 F6 .byte 0f6h -0006F7r 1 F7 .byte 0f7h -0006F8r 1 F8 .byte 0f8h -0006F9r 1 F9 .byte 0f9h -0006FAr 1 FA .byte 0fah -0006FBr 1 FB .byte 0fbh -0006FCr 1 FC .byte 0fch -0006FDr 1 FD .byte 0fdh -0006FEr 1 FE .byte 0feh -0006FFr 1 FF .byte 0ffh +000600r 1 ; alternative hex values +000600r 1 00 .byte 0h +000601r 1 01 .byte 1h +000602r 1 02 .byte 2h +000603r 1 03 .byte 3h +000604r 1 04 .byte 4h +000605r 1 05 .byte 5h +000606r 1 06 .byte 6h +000607r 1 07 .byte 7h +000608r 1 08 .byte 8h +000609r 1 09 .byte 9h +00060Ar 1 0A .byte 0ah +00060Br 1 0B .byte 0bh +00060Cr 1 0C .byte 0ch +00060Dr 1 0D .byte 0dh +00060Er 1 0E .byte 0eh +00060Fr 1 0F .byte 0fh +000610r 1 10 .byte 10h +000611r 1 11 .byte 11h +000612r 1 12 .byte 12h +000613r 1 13 .byte 13h +000614r 1 14 .byte 14h +000615r 1 15 .byte 15h +000616r 1 16 .byte 16h +000617r 1 17 .byte 17h +000618r 1 18 .byte 18h +000619r 1 19 .byte 19h +00061Ar 1 1A .byte 1ah +00061Br 1 1B .byte 1bh +00061Cr 1 1C .byte 1ch +00061Dr 1 1D .byte 1dh +00061Er 1 1E .byte 1eh +00061Fr 1 1F .byte 1fh +000620r 1 20 .byte 20h +000621r 1 21 .byte 21h +000622r 1 22 .byte 22h +000623r 1 23 .byte 23h +000624r 1 24 .byte 24h +000625r 1 25 .byte 25h +000626r 1 26 .byte 26h +000627r 1 27 .byte 27h +000628r 1 28 .byte 28h +000629r 1 29 .byte 29h +00062Ar 1 2A .byte 2ah +00062Br 1 2B .byte 2bh +00062Cr 1 2C .byte 2ch +00062Dr 1 2D .byte 2dh +00062Er 1 2E .byte 2eh +00062Fr 1 2F .byte 2fh +000630r 1 30 .byte 30h +000631r 1 31 .byte 31h +000632r 1 32 .byte 32h +000633r 1 33 .byte 33h +000634r 1 34 .byte 34h +000635r 1 35 .byte 35h +000636r 1 36 .byte 36h +000637r 1 37 .byte 37h +000638r 1 38 .byte 38h +000639r 1 39 .byte 39h +00063Ar 1 3A .byte 3ah +00063Br 1 3B .byte 3bh +00063Cr 1 3C .byte 3ch +00063Dr 1 3D .byte 3dh +00063Er 1 3E .byte 3eh +00063Fr 1 3F .byte 3fh +000640r 1 40 .byte 40h +000641r 1 41 .byte 41h +000642r 1 42 .byte 42h +000643r 1 43 .byte 43h +000644r 1 44 .byte 44h +000645r 1 45 .byte 45h +000646r 1 46 .byte 46h +000647r 1 47 .byte 47h +000648r 1 48 .byte 48h +000649r 1 49 .byte 49h +00064Ar 1 4A .byte 4ah +00064Br 1 4B .byte 4bh +00064Cr 1 4C .byte 4ch +00064Dr 1 4D .byte 4dh +00064Er 1 4E .byte 4eh +00064Fr 1 4F .byte 4fh +000650r 1 50 .byte 50h +000651r 1 51 .byte 51h +000652r 1 52 .byte 52h +000653r 1 53 .byte 53h +000654r 1 54 .byte 54h +000655r 1 55 .byte 55h +000656r 1 56 .byte 56h +000657r 1 57 .byte 57h +000658r 1 58 .byte 58h +000659r 1 59 .byte 59h +00065Ar 1 5A .byte 5ah +00065Br 1 5B .byte 5bh +00065Cr 1 5C .byte 5ch +00065Dr 1 5D .byte 5dh +00065Er 1 5E .byte 5eh +00065Fr 1 5F .byte 5fh +000660r 1 60 .byte 60h +000661r 1 61 .byte 61h +000662r 1 62 .byte 62h +000663r 1 63 .byte 63h +000664r 1 64 .byte 64h +000665r 1 65 .byte 65h +000666r 1 66 .byte 66h +000667r 1 67 .byte 67h +000668r 1 68 .byte 68h +000669r 1 69 .byte 69h +00066Ar 1 6A .byte 6ah +00066Br 1 6B .byte 6bh +00066Cr 1 6C .byte 6ch +00066Dr 1 6D .byte 6dh +00066Er 1 6E .byte 6eh +00066Fr 1 6F .byte 6fh +000670r 1 70 .byte 70h +000671r 1 71 .byte 71h +000672r 1 72 .byte 72h +000673r 1 73 .byte 73h +000674r 1 74 .byte 74h +000675r 1 75 .byte 75h +000676r 1 76 .byte 76h +000677r 1 77 .byte 77h +000678r 1 78 .byte 78h +000679r 1 79 .byte 79h +00067Ar 1 7A .byte 7ah +00067Br 1 7B .byte 7bh +00067Cr 1 7C .byte 7ch +00067Dr 1 7D .byte 7dh +00067Er 1 7E .byte 7eh +00067Fr 1 7F .byte 7fh +000680r 1 80 .byte 80h +000681r 1 81 .byte 81h +000682r 1 82 .byte 82h +000683r 1 83 .byte 83h +000684r 1 84 .byte 84h +000685r 1 85 .byte 85h +000686r 1 86 .byte 86h +000687r 1 87 .byte 87h +000688r 1 88 .byte 88h +000689r 1 89 .byte 89h +00068Ar 1 8A .byte 8ah +00068Br 1 8B .byte 8bh +00068Cr 1 8C .byte 8ch +00068Dr 1 8D .byte 8dh +00068Er 1 8E .byte 8eh +00068Fr 1 8F .byte 8fh +000690r 1 90 .byte 90h +000691r 1 91 .byte 91h +000692r 1 92 .byte 92h +000693r 1 93 .byte 93h +000694r 1 94 .byte 94h +000695r 1 95 .byte 95h +000696r 1 96 .byte 96h +000697r 1 97 .byte 97h +000698r 1 98 .byte 98h +000699r 1 99 .byte 99h +00069Ar 1 9A .byte 9ah +00069Br 1 9B .byte 9bh +00069Cr 1 9C .byte 9ch +00069Dr 1 9D .byte 9dh +00069Er 1 9E .byte 9eh +00069Fr 1 9F .byte 9fh +0006A0r 1 A0 .byte 0a0h +0006A1r 1 A1 .byte 0a1h +0006A2r 1 A2 .byte 0a2h +0006A3r 1 A3 .byte 0a3h +0006A4r 1 A4 .byte 0a4h +0006A5r 1 A5 .byte 0a5h +0006A6r 1 A6 .byte 0a6h +0006A7r 1 A7 .byte 0a7h +0006A8r 1 A8 .byte 0a8h +0006A9r 1 A9 .byte 0a9h +0006AAr 1 AA .byte 0aah +0006ABr 1 AB .byte 0abh +0006ACr 1 AC .byte 0ach +0006ADr 1 AD .byte 0adh +0006AEr 1 AE .byte 0aeh +0006AFr 1 AF .byte 0afh +0006B0r 1 B0 .byte 0b0h +0006B1r 1 B1 .byte 0b1h +0006B2r 1 B2 .byte 0b2h +0006B3r 1 B3 .byte 0b3h +0006B4r 1 B4 .byte 0b4h +0006B5r 1 B5 .byte 0b5h +0006B6r 1 B6 .byte 0b6h +0006B7r 1 B7 .byte 0b7h +0006B8r 1 B8 .byte 0b8h +0006B9r 1 B9 .byte 0b9h +0006BAr 1 BA .byte 0bah +0006BBr 1 BB .byte 0bbh +0006BCr 1 BC .byte 0bch +0006BDr 1 BD .byte 0bdh +0006BEr 1 BE .byte 0beh +0006BFr 1 BF .byte 0bfh +0006C0r 1 C0 .byte 0c0h +0006C1r 1 C1 .byte 0c1h +0006C2r 1 C2 .byte 0c2h +0006C3r 1 C3 .byte 0c3h +0006C4r 1 C4 .byte 0c4h +0006C5r 1 C5 .byte 0c5h +0006C6r 1 C6 .byte 0c6h +0006C7r 1 C7 .byte 0c7h +0006C8r 1 C8 .byte 0c8h +0006C9r 1 C9 .byte 0c9h +0006CAr 1 CA .byte 0cah +0006CBr 1 CB .byte 0cbh +0006CCr 1 CC .byte 0cch +0006CDr 1 CD .byte 0cdh +0006CEr 1 CE .byte 0ceh +0006CFr 1 CF .byte 0cfh +0006D0r 1 D0 .byte 0d0h +0006D1r 1 D1 .byte 0d1h +0006D2r 1 D2 .byte 0d2h +0006D3r 1 D3 .byte 0d3h +0006D4r 1 D4 .byte 0d4h +0006D5r 1 D5 .byte 0d5h +0006D6r 1 D6 .byte 0d6h +0006D7r 1 D7 .byte 0d7h +0006D8r 1 D8 .byte 0d8h +0006D9r 1 D9 .byte 0d9h +0006DAr 1 DA .byte 0dah +0006DBr 1 DB .byte 0dbh +0006DCr 1 DC .byte 0dch +0006DDr 1 DD .byte 0ddh +0006DEr 1 DE .byte 0deh +0006DFr 1 DF .byte 0dfh +0006E0r 1 E0 .byte 0e0h +0006E1r 1 E1 .byte 0e1h +0006E2r 1 E2 .byte 0e2h +0006E3r 1 E3 .byte 0e3h +0006E4r 1 E4 .byte 0e4h +0006E5r 1 E5 .byte 0e5h +0006E6r 1 E6 .byte 0e6h +0006E7r 1 E7 .byte 0e7h +0006E8r 1 E8 .byte 0e8h +0006E9r 1 E9 .byte 0e9h +0006EAr 1 EA .byte 0eah +0006EBr 1 EB .byte 0ebh +0006ECr 1 EC .byte 0ech +0006EDr 1 ED .byte 0edh +0006EEr 1 EE .byte 0eeh +0006EFr 1 EF .byte 0efh +0006F0r 1 F0 .byte 0f0h +0006F1r 1 F1 .byte 0f1h +0006F2r 1 F2 .byte 0f2h +0006F3r 1 F3 .byte 0f3h +0006F4r 1 F4 .byte 0f4h +0006F5r 1 F5 .byte 0f5h +0006F6r 1 F6 .byte 0f6h +0006F7r 1 F7 .byte 0f7h +0006F8r 1 F8 .byte 0f8h +0006F9r 1 F9 .byte 0f9h +0006FAr 1 FA .byte 0fah +0006FBr 1 FB .byte 0fbh +0006FCr 1 FC .byte 0fch +0006FDr 1 FD .byte 0fdh +0006FEr 1 FE .byte 0feh +0006FFr 1 FF .byte 0ffh 000700r 1 -000700r 1 ; alternative hex values, uppercase -000700r 1 00 .byte 0h -000701r 1 01 .byte 1h -000702r 1 02 .byte 2h -000703r 1 03 .byte 3h -000704r 1 04 .byte 4h -000705r 1 05 .byte 5h -000706r 1 06 .byte 6h -000707r 1 07 .byte 7h -000708r 1 08 .byte 8h -000709r 1 09 .byte 9h -00070Ar 1 0A .byte 0Ah -00070Br 1 0B .byte 0Bh -00070Cr 1 0C .byte 0Ch -00070Dr 1 0D .byte 0Dh -00070Er 1 0E .byte 0Eh -00070Fr 1 0F .byte 0Fh -000710r 1 10 .byte 10h -000711r 1 11 .byte 11h -000712r 1 12 .byte 12h -000713r 1 13 .byte 13h -000714r 1 14 .byte 14h -000715r 1 15 .byte 15h -000716r 1 16 .byte 16h -000717r 1 17 .byte 17h -000718r 1 18 .byte 18h -000719r 1 19 .byte 19h -00071Ar 1 1A .byte 1Ah -00071Br 1 1B .byte 1Bh -00071Cr 1 1C .byte 1Ch -00071Dr 1 1D .byte 1Dh -00071Er 1 1E .byte 1Eh -00071Fr 1 1F .byte 1Fh -000720r 1 20 .byte 20h -000721r 1 21 .byte 21h -000722r 1 22 .byte 22h -000723r 1 23 .byte 23h -000724r 1 24 .byte 24h -000725r 1 25 .byte 25h -000726r 1 26 .byte 26h -000727r 1 27 .byte 27h -000728r 1 28 .byte 28h -000729r 1 29 .byte 29h -00072Ar 1 2A .byte 2Ah -00072Br 1 2B .byte 2Bh -00072Cr 1 2C .byte 2Ch -00072Dr 1 2D .byte 2Dh -00072Er 1 2E .byte 2Eh -00072Fr 1 2F .byte 2Fh -000730r 1 30 .byte 30h -000731r 1 31 .byte 31h -000732r 1 32 .byte 32h -000733r 1 33 .byte 33h -000734r 1 34 .byte 34h -000735r 1 35 .byte 35h -000736r 1 36 .byte 36h -000737r 1 37 .byte 37h -000738r 1 38 .byte 38h -000739r 1 39 .byte 39h -00073Ar 1 3A .byte 3Ah -00073Br 1 3B .byte 3Bh -00073Cr 1 3C .byte 3Ch -00073Dr 1 3D .byte 3Dh -00073Er 1 3E .byte 3Eh -00073Fr 1 3F .byte 3Fh -000740r 1 40 .byte 40h -000741r 1 41 .byte 41h -000742r 1 42 .byte 42h -000743r 1 43 .byte 43h -000744r 1 44 .byte 44h -000745r 1 45 .byte 45h -000746r 1 46 .byte 46h -000747r 1 47 .byte 47h -000748r 1 48 .byte 48h -000749r 1 49 .byte 49h -00074Ar 1 4A .byte 4Ah -00074Br 1 4B .byte 4Bh -00074Cr 1 4C .byte 4Ch -00074Dr 1 4D .byte 4Dh -00074Er 1 4E .byte 4Eh -00074Fr 1 4F .byte 4Fh -000750r 1 50 .byte 50h -000751r 1 51 .byte 51h -000752r 1 52 .byte 52h -000753r 1 53 .byte 53h -000754r 1 54 .byte 54h -000755r 1 55 .byte 55h -000756r 1 56 .byte 56h -000757r 1 57 .byte 57h -000758r 1 58 .byte 58h -000759r 1 59 .byte 59h -00075Ar 1 5A .byte 5Ah -00075Br 1 5B .byte 5Bh -00075Cr 1 5C .byte 5Ch -00075Dr 1 5D .byte 5Dh -00075Er 1 5E .byte 5Eh -00075Fr 1 5F .byte 5Fh -000760r 1 60 .byte 60h -000761r 1 61 .byte 61h -000762r 1 62 .byte 62h -000763r 1 63 .byte 63h -000764r 1 64 .byte 64h -000765r 1 65 .byte 65h -000766r 1 66 .byte 66h -000767r 1 67 .byte 67h -000768r 1 68 .byte 68h -000769r 1 69 .byte 69h -00076Ar 1 6A .byte 6Ah -00076Br 1 6B .byte 6Bh -00076Cr 1 6C .byte 6Ch -00076Dr 1 6D .byte 6Dh -00076Er 1 6E .byte 6Eh -00076Fr 1 6F .byte 6Fh -000770r 1 70 .byte 70h -000771r 1 71 .byte 71h -000772r 1 72 .byte 72h -000773r 1 73 .byte 73h -000774r 1 74 .byte 74h -000775r 1 75 .byte 75h -000776r 1 76 .byte 76h -000777r 1 77 .byte 77h -000778r 1 78 .byte 78h -000779r 1 79 .byte 79h -00077Ar 1 7A .byte 7Ah -00077Br 1 7B .byte 7Bh -00077Cr 1 7C .byte 7Ch -00077Dr 1 7D .byte 7Dh -00077Er 1 7E .byte 7Eh -00077Fr 1 7F .byte 7Fh -000780r 1 80 .byte 80h -000781r 1 81 .byte 81h -000782r 1 82 .byte 82h -000783r 1 83 .byte 83h -000784r 1 84 .byte 84h -000785r 1 85 .byte 85h -000786r 1 86 .byte 86h -000787r 1 87 .byte 87h -000788r 1 88 .byte 88h -000789r 1 89 .byte 89h -00078Ar 1 8A .byte 8Ah -00078Br 1 8B .byte 8Bh -00078Cr 1 8C .byte 8Ch -00078Dr 1 8D .byte 8Dh -00078Er 1 8E .byte 8Eh -00078Fr 1 8F .byte 8Fh -000790r 1 90 .byte 90h -000791r 1 91 .byte 91h -000792r 1 92 .byte 92h -000793r 1 93 .byte 93h -000794r 1 94 .byte 94h -000795r 1 95 .byte 95h -000796r 1 96 .byte 96h -000797r 1 97 .byte 97h -000798r 1 98 .byte 98h -000799r 1 99 .byte 99h -00079Ar 1 9A .byte 9Ah -00079Br 1 9B .byte 9Bh -00079Cr 1 9C .byte 9Ch -00079Dr 1 9D .byte 9Dh -00079Er 1 9E .byte 9Eh -00079Fr 1 9F .byte 9Fh -0007A0r 1 A0 .byte 0A0h -0007A1r 1 A1 .byte 0A1h -0007A2r 1 A2 .byte 0A2h -0007A3r 1 A3 .byte 0A3h -0007A4r 1 A4 .byte 0A4h -0007A5r 1 A5 .byte 0A5h -0007A6r 1 A6 .byte 0A6h -0007A7r 1 A7 .byte 0A7h -0007A8r 1 A8 .byte 0A8h -0007A9r 1 A9 .byte 0A9h -0007AAr 1 AA .byte 0AAh -0007ABr 1 AB .byte 0ABh -0007ACr 1 AC .byte 0ACh -0007ADr 1 AD .byte 0ADh -0007AEr 1 AE .byte 0AEh -0007AFr 1 AF .byte 0AFh -0007B0r 1 B0 .byte 0B0h -0007B1r 1 B1 .byte 0B1h -0007B2r 1 B2 .byte 0B2h -0007B3r 1 B3 .byte 0B3h -0007B4r 1 B4 .byte 0B4h -0007B5r 1 B5 .byte 0B5h -0007B6r 1 B6 .byte 0B6h -0007B7r 1 B7 .byte 0B7h -0007B8r 1 B8 .byte 0B8h -0007B9r 1 B9 .byte 0B9h -0007BAr 1 BA .byte 0BAh -0007BBr 1 BB .byte 0BBh -0007BCr 1 BC .byte 0BCh -0007BDr 1 BD .byte 0BDh -0007BEr 1 BE .byte 0BEh -0007BFr 1 BF .byte 0BFh -0007C0r 1 C0 .byte 0C0h -0007C1r 1 C1 .byte 0C1h -0007C2r 1 C2 .byte 0C2h -0007C3r 1 C3 .byte 0C3h -0007C4r 1 C4 .byte 0C4h -0007C5r 1 C5 .byte 0C5h -0007C6r 1 C6 .byte 0C6h -0007C7r 1 C7 .byte 0C7h -0007C8r 1 C8 .byte 0C8h -0007C9r 1 C9 .byte 0C9h -0007CAr 1 CA .byte 0CAh -0007CBr 1 CB .byte 0CBh -0007CCr 1 CC .byte 0CCh -0007CDr 1 CD .byte 0CDh -0007CEr 1 CE .byte 0CEh -0007CFr 1 CF .byte 0CFh -0007D0r 1 D0 .byte 0D0h -0007D1r 1 D1 .byte 0D1h -0007D2r 1 D2 .byte 0D2h -0007D3r 1 D3 .byte 0D3h -0007D4r 1 D4 .byte 0D4h -0007D5r 1 D5 .byte 0D5h -0007D6r 1 D6 .byte 0D6h -0007D7r 1 D7 .byte 0D7h -0007D8r 1 D8 .byte 0D8h -0007D9r 1 D9 .byte 0D9h -0007DAr 1 DA .byte 0DAh -0007DBr 1 DB .byte 0DBh -0007DCr 1 DC .byte 0DCh -0007DDr 1 DD .byte 0DDh -0007DEr 1 DE .byte 0DEh -0007DFr 1 DF .byte 0DFh -0007E0r 1 E0 .byte 0E0h -0007E1r 1 E1 .byte 0E1h -0007E2r 1 E2 .byte 0E2h -0007E3r 1 E3 .byte 0E3h -0007E4r 1 E4 .byte 0E4h -0007E5r 1 E5 .byte 0E5h -0007E6r 1 E6 .byte 0E6h -0007E7r 1 E7 .byte 0E7h -0007E8r 1 E8 .byte 0E8h -0007E9r 1 E9 .byte 0E9h -0007EAr 1 EA .byte 0EAh -0007EBr 1 EB .byte 0EBh -0007ECr 1 EC .byte 0ECh -0007EDr 1 ED .byte 0EDh -0007EEr 1 EE .byte 0EEh -0007EFr 1 EF .byte 0EFh -0007F0r 1 F0 .byte 0F0h -0007F1r 1 F1 .byte 0F1h -0007F2r 1 F2 .byte 0F2h -0007F3r 1 F3 .byte 0F3h -0007F4r 1 F4 .byte 0F4h -0007F5r 1 F5 .byte 0F5h -0007F6r 1 F6 .byte 0F6h -0007F7r 1 F7 .byte 0F7h -0007F8r 1 F8 .byte 0F8h -0007F9r 1 F9 .byte 0F9h -0007FAr 1 FA .byte 0FAh -0007FBr 1 FB .byte 0FBh -0007FCr 1 FC .byte 0FCh -0007FDr 1 FD .byte 0FDh -0007FEr 1 FE .byte 0FEh -0007FFr 1 FF .byte 0FFh +000700r 1 ; alternative hex values, uppercase +000700r 1 00 .byte 0h +000701r 1 01 .byte 1h +000702r 1 02 .byte 2h +000703r 1 03 .byte 3h +000704r 1 04 .byte 4h +000705r 1 05 .byte 5h +000706r 1 06 .byte 6h +000707r 1 07 .byte 7h +000708r 1 08 .byte 8h +000709r 1 09 .byte 9h +00070Ar 1 0A .byte 0Ah +00070Br 1 0B .byte 0Bh +00070Cr 1 0C .byte 0Ch +00070Dr 1 0D .byte 0Dh +00070Er 1 0E .byte 0Eh +00070Fr 1 0F .byte 0Fh +000710r 1 10 .byte 10h +000711r 1 11 .byte 11h +000712r 1 12 .byte 12h +000713r 1 13 .byte 13h +000714r 1 14 .byte 14h +000715r 1 15 .byte 15h +000716r 1 16 .byte 16h +000717r 1 17 .byte 17h +000718r 1 18 .byte 18h +000719r 1 19 .byte 19h +00071Ar 1 1A .byte 1Ah +00071Br 1 1B .byte 1Bh +00071Cr 1 1C .byte 1Ch +00071Dr 1 1D .byte 1Dh +00071Er 1 1E .byte 1Eh +00071Fr 1 1F .byte 1Fh +000720r 1 20 .byte 20h +000721r 1 21 .byte 21h +000722r 1 22 .byte 22h +000723r 1 23 .byte 23h +000724r 1 24 .byte 24h +000725r 1 25 .byte 25h +000726r 1 26 .byte 26h +000727r 1 27 .byte 27h +000728r 1 28 .byte 28h +000729r 1 29 .byte 29h +00072Ar 1 2A .byte 2Ah +00072Br 1 2B .byte 2Bh +00072Cr 1 2C .byte 2Ch +00072Dr 1 2D .byte 2Dh +00072Er 1 2E .byte 2Eh +00072Fr 1 2F .byte 2Fh +000730r 1 30 .byte 30h +000731r 1 31 .byte 31h +000732r 1 32 .byte 32h +000733r 1 33 .byte 33h +000734r 1 34 .byte 34h +000735r 1 35 .byte 35h +000736r 1 36 .byte 36h +000737r 1 37 .byte 37h +000738r 1 38 .byte 38h +000739r 1 39 .byte 39h +00073Ar 1 3A .byte 3Ah +00073Br 1 3B .byte 3Bh +00073Cr 1 3C .byte 3Ch +00073Dr 1 3D .byte 3Dh +00073Er 1 3E .byte 3Eh +00073Fr 1 3F .byte 3Fh +000740r 1 40 .byte 40h +000741r 1 41 .byte 41h +000742r 1 42 .byte 42h +000743r 1 43 .byte 43h +000744r 1 44 .byte 44h +000745r 1 45 .byte 45h +000746r 1 46 .byte 46h +000747r 1 47 .byte 47h +000748r 1 48 .byte 48h +000749r 1 49 .byte 49h +00074Ar 1 4A .byte 4Ah +00074Br 1 4B .byte 4Bh +00074Cr 1 4C .byte 4Ch +00074Dr 1 4D .byte 4Dh +00074Er 1 4E .byte 4Eh +00074Fr 1 4F .byte 4Fh +000750r 1 50 .byte 50h +000751r 1 51 .byte 51h +000752r 1 52 .byte 52h +000753r 1 53 .byte 53h +000754r 1 54 .byte 54h +000755r 1 55 .byte 55h +000756r 1 56 .byte 56h +000757r 1 57 .byte 57h +000758r 1 58 .byte 58h +000759r 1 59 .byte 59h +00075Ar 1 5A .byte 5Ah +00075Br 1 5B .byte 5Bh +00075Cr 1 5C .byte 5Ch +00075Dr 1 5D .byte 5Dh +00075Er 1 5E .byte 5Eh +00075Fr 1 5F .byte 5Fh +000760r 1 60 .byte 60h +000761r 1 61 .byte 61h +000762r 1 62 .byte 62h +000763r 1 63 .byte 63h +000764r 1 64 .byte 64h +000765r 1 65 .byte 65h +000766r 1 66 .byte 66h +000767r 1 67 .byte 67h +000768r 1 68 .byte 68h +000769r 1 69 .byte 69h +00076Ar 1 6A .byte 6Ah +00076Br 1 6B .byte 6Bh +00076Cr 1 6C .byte 6Ch +00076Dr 1 6D .byte 6Dh +00076Er 1 6E .byte 6Eh +00076Fr 1 6F .byte 6Fh +000770r 1 70 .byte 70h +000771r 1 71 .byte 71h +000772r 1 72 .byte 72h +000773r 1 73 .byte 73h +000774r 1 74 .byte 74h +000775r 1 75 .byte 75h +000776r 1 76 .byte 76h +000777r 1 77 .byte 77h +000778r 1 78 .byte 78h +000779r 1 79 .byte 79h +00077Ar 1 7A .byte 7Ah +00077Br 1 7B .byte 7Bh +00077Cr 1 7C .byte 7Ch +00077Dr 1 7D .byte 7Dh +00077Er 1 7E .byte 7Eh +00077Fr 1 7F .byte 7Fh +000780r 1 80 .byte 80h +000781r 1 81 .byte 81h +000782r 1 82 .byte 82h +000783r 1 83 .byte 83h +000784r 1 84 .byte 84h +000785r 1 85 .byte 85h +000786r 1 86 .byte 86h +000787r 1 87 .byte 87h +000788r 1 88 .byte 88h +000789r 1 89 .byte 89h +00078Ar 1 8A .byte 8Ah +00078Br 1 8B .byte 8Bh +00078Cr 1 8C .byte 8Ch +00078Dr 1 8D .byte 8Dh +00078Er 1 8E .byte 8Eh +00078Fr 1 8F .byte 8Fh +000790r 1 90 .byte 90h +000791r 1 91 .byte 91h +000792r 1 92 .byte 92h +000793r 1 93 .byte 93h +000794r 1 94 .byte 94h +000795r 1 95 .byte 95h +000796r 1 96 .byte 96h +000797r 1 97 .byte 97h +000798r 1 98 .byte 98h +000799r 1 99 .byte 99h +00079Ar 1 9A .byte 9Ah +00079Br 1 9B .byte 9Bh +00079Cr 1 9C .byte 9Ch +00079Dr 1 9D .byte 9Dh +00079Er 1 9E .byte 9Eh +00079Fr 1 9F .byte 9Fh +0007A0r 1 A0 .byte 0A0h +0007A1r 1 A1 .byte 0A1h +0007A2r 1 A2 .byte 0A2h +0007A3r 1 A3 .byte 0A3h +0007A4r 1 A4 .byte 0A4h +0007A5r 1 A5 .byte 0A5h +0007A6r 1 A6 .byte 0A6h +0007A7r 1 A7 .byte 0A7h +0007A8r 1 A8 .byte 0A8h +0007A9r 1 A9 .byte 0A9h +0007AAr 1 AA .byte 0AAh +0007ABr 1 AB .byte 0ABh +0007ACr 1 AC .byte 0ACh +0007ADr 1 AD .byte 0ADh +0007AEr 1 AE .byte 0AEh +0007AFr 1 AF .byte 0AFh +0007B0r 1 B0 .byte 0B0h +0007B1r 1 B1 .byte 0B1h +0007B2r 1 B2 .byte 0B2h +0007B3r 1 B3 .byte 0B3h +0007B4r 1 B4 .byte 0B4h +0007B5r 1 B5 .byte 0B5h +0007B6r 1 B6 .byte 0B6h +0007B7r 1 B7 .byte 0B7h +0007B8r 1 B8 .byte 0B8h +0007B9r 1 B9 .byte 0B9h +0007BAr 1 BA .byte 0BAh +0007BBr 1 BB .byte 0BBh +0007BCr 1 BC .byte 0BCh +0007BDr 1 BD .byte 0BDh +0007BEr 1 BE .byte 0BEh +0007BFr 1 BF .byte 0BFh +0007C0r 1 C0 .byte 0C0h +0007C1r 1 C1 .byte 0C1h +0007C2r 1 C2 .byte 0C2h +0007C3r 1 C3 .byte 0C3h +0007C4r 1 C4 .byte 0C4h +0007C5r 1 C5 .byte 0C5h +0007C6r 1 C6 .byte 0C6h +0007C7r 1 C7 .byte 0C7h +0007C8r 1 C8 .byte 0C8h +0007C9r 1 C9 .byte 0C9h +0007CAr 1 CA .byte 0CAh +0007CBr 1 CB .byte 0CBh +0007CCr 1 CC .byte 0CCh +0007CDr 1 CD .byte 0CDh +0007CEr 1 CE .byte 0CEh +0007CFr 1 CF .byte 0CFh +0007D0r 1 D0 .byte 0D0h +0007D1r 1 D1 .byte 0D1h +0007D2r 1 D2 .byte 0D2h +0007D3r 1 D3 .byte 0D3h +0007D4r 1 D4 .byte 0D4h +0007D5r 1 D5 .byte 0D5h +0007D6r 1 D6 .byte 0D6h +0007D7r 1 D7 .byte 0D7h +0007D8r 1 D8 .byte 0D8h +0007D9r 1 D9 .byte 0D9h +0007DAr 1 DA .byte 0DAh +0007DBr 1 DB .byte 0DBh +0007DCr 1 DC .byte 0DCh +0007DDr 1 DD .byte 0DDh +0007DEr 1 DE .byte 0DEh +0007DFr 1 DF .byte 0DFh +0007E0r 1 E0 .byte 0E0h +0007E1r 1 E1 .byte 0E1h +0007E2r 1 E2 .byte 0E2h +0007E3r 1 E3 .byte 0E3h +0007E4r 1 E4 .byte 0E4h +0007E5r 1 E5 .byte 0E5h +0007E6r 1 E6 .byte 0E6h +0007E7r 1 E7 .byte 0E7h +0007E8r 1 E8 .byte 0E8h +0007E9r 1 E9 .byte 0E9h +0007EAr 1 EA .byte 0EAh +0007EBr 1 EB .byte 0EBh +0007ECr 1 EC .byte 0ECh +0007EDr 1 ED .byte 0EDh +0007EEr 1 EE .byte 0EEh +0007EFr 1 EF .byte 0EFh +0007F0r 1 F0 .byte 0F0h +0007F1r 1 F1 .byte 0F1h +0007F2r 1 F2 .byte 0F2h +0007F3r 1 F3 .byte 0F3h +0007F4r 1 F4 .byte 0F4h +0007F5r 1 F5 .byte 0F5h +0007F6r 1 F6 .byte 0F6h +0007F7r 1 F7 .byte 0F7h +0007F8r 1 F8 .byte 0F8h +0007F9r 1 F9 .byte 0F9h +0007FAr 1 FA .byte 0FAh +0007FBr 1 FB .byte 0FBh +0007FCr 1 FC .byte 0FCh +0007FDr 1 FD .byte 0FDh +0007FEr 1 FE .byte 0FEh +0007FFr 1 FF .byte 0FFh 000800r 1 -000800r 1 ; alternative 2-digit hex values -000800r 1 00 .byte 00h -000801r 1 01 .byte 01h -000802r 1 02 .byte 02h -000803r 1 03 .byte 03h -000804r 1 04 .byte 04h -000805r 1 05 .byte 05h -000806r 1 06 .byte 06h -000807r 1 07 .byte 07h -000808r 1 08 .byte 08h -000809r 1 09 .byte 09h -00080Ar 1 0A .byte 0ah -00080Br 1 0B .byte 0bh -00080Cr 1 0C .byte 0ch -00080Dr 1 0D .byte 0dh -00080Er 1 0E .byte 0eh -00080Fr 1 0F .byte 0fh -000810r 1 10 .byte 10h -000811r 1 11 .byte 11h -000812r 1 12 .byte 12h -000813r 1 13 .byte 13h -000814r 1 14 .byte 14h -000815r 1 15 .byte 15h -000816r 1 16 .byte 16h -000817r 1 17 .byte 17h -000818r 1 18 .byte 18h -000819r 1 19 .byte 19h -00081Ar 1 1A .byte 1ah -00081Br 1 1B .byte 1bh -00081Cr 1 1C .byte 1ch -00081Dr 1 1D .byte 1dh -00081Er 1 1E .byte 1eh -00081Fr 1 1F .byte 1fh -000820r 1 20 .byte 20h -000821r 1 21 .byte 21h -000822r 1 22 .byte 22h -000823r 1 23 .byte 23h -000824r 1 24 .byte 24h -000825r 1 25 .byte 25h -000826r 1 26 .byte 26h -000827r 1 27 .byte 27h -000828r 1 28 .byte 28h -000829r 1 29 .byte 29h -00082Ar 1 2A .byte 2ah -00082Br 1 2B .byte 2bh -00082Cr 1 2C .byte 2ch -00082Dr 1 2D .byte 2dh -00082Er 1 2E .byte 2eh -00082Fr 1 2F .byte 2fh -000830r 1 30 .byte 30h -000831r 1 31 .byte 31h -000832r 1 32 .byte 32h -000833r 1 33 .byte 33h -000834r 1 34 .byte 34h -000835r 1 35 .byte 35h -000836r 1 36 .byte 36h -000837r 1 37 .byte 37h -000838r 1 38 .byte 38h -000839r 1 39 .byte 39h -00083Ar 1 3A .byte 3ah -00083Br 1 3B .byte 3bh -00083Cr 1 3C .byte 3ch -00083Dr 1 3D .byte 3dh -00083Er 1 3E .byte 3eh -00083Fr 1 3F .byte 3fh -000840r 1 40 .byte 40h -000841r 1 41 .byte 41h -000842r 1 42 .byte 42h -000843r 1 43 .byte 43h -000844r 1 44 .byte 44h -000845r 1 45 .byte 45h -000846r 1 46 .byte 46h -000847r 1 47 .byte 47h -000848r 1 48 .byte 48h -000849r 1 49 .byte 49h -00084Ar 1 4A .byte 4ah -00084Br 1 4B .byte 4bh -00084Cr 1 4C .byte 4ch -00084Dr 1 4D .byte 4dh -00084Er 1 4E .byte 4eh -00084Fr 1 4F .byte 4fh -000850r 1 50 .byte 50h -000851r 1 51 .byte 51h -000852r 1 52 .byte 52h -000853r 1 53 .byte 53h -000854r 1 54 .byte 54h -000855r 1 55 .byte 55h -000856r 1 56 .byte 56h -000857r 1 57 .byte 57h -000858r 1 58 .byte 58h -000859r 1 59 .byte 59h -00085Ar 1 5A .byte 5ah -00085Br 1 5B .byte 5bh -00085Cr 1 5C .byte 5ch -00085Dr 1 5D .byte 5dh -00085Er 1 5E .byte 5eh -00085Fr 1 5F .byte 5fh -000860r 1 60 .byte 60h -000861r 1 61 .byte 61h -000862r 1 62 .byte 62h -000863r 1 63 .byte 63h -000864r 1 64 .byte 64h -000865r 1 65 .byte 65h -000866r 1 66 .byte 66h -000867r 1 67 .byte 67h -000868r 1 68 .byte 68h -000869r 1 69 .byte 69h -00086Ar 1 6A .byte 6ah -00086Br 1 6B .byte 6bh -00086Cr 1 6C .byte 6ch -00086Dr 1 6D .byte 6dh -00086Er 1 6E .byte 6eh -00086Fr 1 6F .byte 6fh -000870r 1 70 .byte 70h -000871r 1 71 .byte 71h -000872r 1 72 .byte 72h -000873r 1 73 .byte 73h -000874r 1 74 .byte 74h -000875r 1 75 .byte 75h -000876r 1 76 .byte 76h -000877r 1 77 .byte 77h -000878r 1 78 .byte 78h -000879r 1 79 .byte 79h -00087Ar 1 7A .byte 7ah -00087Br 1 7B .byte 7bh -00087Cr 1 7C .byte 7ch -00087Dr 1 7D .byte 7dh -00087Er 1 7E .byte 7eh -00087Fr 1 7F .byte 7fh -000880r 1 80 .byte 80h -000881r 1 81 .byte 81h -000882r 1 82 .byte 82h -000883r 1 83 .byte 83h -000884r 1 84 .byte 84h -000885r 1 85 .byte 85h -000886r 1 86 .byte 86h -000887r 1 87 .byte 87h -000888r 1 88 .byte 88h -000889r 1 89 .byte 89h -00088Ar 1 8A .byte 8ah -00088Br 1 8B .byte 8bh -00088Cr 1 8C .byte 8ch -00088Dr 1 8D .byte 8dh -00088Er 1 8E .byte 8eh -00088Fr 1 8F .byte 8fh -000890r 1 90 .byte 90h -000891r 1 91 .byte 91h -000892r 1 92 .byte 92h -000893r 1 93 .byte 93h -000894r 1 94 .byte 94h -000895r 1 95 .byte 95h -000896r 1 96 .byte 96h -000897r 1 97 .byte 97h -000898r 1 98 .byte 98h -000899r 1 99 .byte 99h -00089Ar 1 9A .byte 9ah -00089Br 1 9B .byte 9bh -00089Cr 1 9C .byte 9ch -00089Dr 1 9D .byte 9dh -00089Er 1 9E .byte 9eh -00089Fr 1 9F .byte 9fh -0008A0r 1 A0 .byte 0a0h -0008A1r 1 A1 .byte 0a1h -0008A2r 1 A2 .byte 0a2h -0008A3r 1 A3 .byte 0a3h -0008A4r 1 A4 .byte 0a4h -0008A5r 1 A5 .byte 0a5h -0008A6r 1 A6 .byte 0a6h -0008A7r 1 A7 .byte 0a7h -0008A8r 1 A8 .byte 0a8h -0008A9r 1 A9 .byte 0a9h -0008AAr 1 AA .byte 0aah -0008ABr 1 AB .byte 0abh -0008ACr 1 AC .byte 0ach -0008ADr 1 AD .byte 0adh -0008AEr 1 AE .byte 0aeh -0008AFr 1 AF .byte 0afh -0008B0r 1 B0 .byte 0b0h -0008B1r 1 B1 .byte 0b1h -0008B2r 1 B2 .byte 0b2h -0008B3r 1 B3 .byte 0b3h -0008B4r 1 B4 .byte 0b4h -0008B5r 1 B5 .byte 0b5h -0008B6r 1 B6 .byte 0b6h -0008B7r 1 B7 .byte 0b7h -0008B8r 1 B8 .byte 0b8h -0008B9r 1 B9 .byte 0b9h -0008BAr 1 BA .byte 0bah -0008BBr 1 BB .byte 0bbh -0008BCr 1 BC .byte 0bch -0008BDr 1 BD .byte 0bdh -0008BEr 1 BE .byte 0beh -0008BFr 1 BF .byte 0bfh -0008C0r 1 C0 .byte 0c0h -0008C1r 1 C1 .byte 0c1h -0008C2r 1 C2 .byte 0c2h -0008C3r 1 C3 .byte 0c3h -0008C4r 1 C4 .byte 0c4h -0008C5r 1 C5 .byte 0c5h -0008C6r 1 C6 .byte 0c6h -0008C7r 1 C7 .byte 0c7h -0008C8r 1 C8 .byte 0c8h -0008C9r 1 C9 .byte 0c9h -0008CAr 1 CA .byte 0cah -0008CBr 1 CB .byte 0cbh -0008CCr 1 CC .byte 0cch -0008CDr 1 CD .byte 0cdh -0008CEr 1 CE .byte 0ceh -0008CFr 1 CF .byte 0cfh -0008D0r 1 D0 .byte 0d0h -0008D1r 1 D1 .byte 0d1h -0008D2r 1 D2 .byte 0d2h -0008D3r 1 D3 .byte 0d3h -0008D4r 1 D4 .byte 0d4h -0008D5r 1 D5 .byte 0d5h -0008D6r 1 D6 .byte 0d6h -0008D7r 1 D7 .byte 0d7h -0008D8r 1 D8 .byte 0d8h -0008D9r 1 D9 .byte 0d9h -0008DAr 1 DA .byte 0dah -0008DBr 1 DB .byte 0dbh -0008DCr 1 DC .byte 0dch -0008DDr 1 DD .byte 0ddh -0008DEr 1 DE .byte 0deh -0008DFr 1 DF .byte 0dfh -0008E0r 1 E0 .byte 0e0h -0008E1r 1 E1 .byte 0e1h -0008E2r 1 E2 .byte 0e2h -0008E3r 1 E3 .byte 0e3h -0008E4r 1 E4 .byte 0e4h -0008E5r 1 E5 .byte 0e5h -0008E6r 1 E6 .byte 0e6h -0008E7r 1 E7 .byte 0e7h -0008E8r 1 E8 .byte 0e8h -0008E9r 1 E9 .byte 0e9h -0008EAr 1 EA .byte 0eah -0008EBr 1 EB .byte 0ebh -0008ECr 1 EC .byte 0ech -0008EDr 1 ED .byte 0edh -0008EEr 1 EE .byte 0eeh -0008EFr 1 EF .byte 0efh -0008F0r 1 F0 .byte 0f0h -0008F1r 1 F1 .byte 0f1h -0008F2r 1 F2 .byte 0f2h -0008F3r 1 F3 .byte 0f3h -0008F4r 1 F4 .byte 0f4h -0008F5r 1 F5 .byte 0f5h -0008F6r 1 F6 .byte 0f6h -0008F7r 1 F7 .byte 0f7h -0008F8r 1 F8 .byte 0f8h -0008F9r 1 F9 .byte 0f9h -0008FAr 1 FA .byte 0fah -0008FBr 1 FB .byte 0fbh -0008FCr 1 FC .byte 0fch -0008FDr 1 FD .byte 0fdh -0008FEr 1 FE .byte 0feh -0008FFr 1 FF .byte 0ffh +000800r 1 ; alternative 2-digit hex values +000800r 1 00 .byte 00h +000801r 1 01 .byte 01h +000802r 1 02 .byte 02h +000803r 1 03 .byte 03h +000804r 1 04 .byte 04h +000805r 1 05 .byte 05h +000806r 1 06 .byte 06h +000807r 1 07 .byte 07h +000808r 1 08 .byte 08h +000809r 1 09 .byte 09h +00080Ar 1 0A .byte 0ah +00080Br 1 0B .byte 0bh +00080Cr 1 0C .byte 0ch +00080Dr 1 0D .byte 0dh +00080Er 1 0E .byte 0eh +00080Fr 1 0F .byte 0fh +000810r 1 10 .byte 10h +000811r 1 11 .byte 11h +000812r 1 12 .byte 12h +000813r 1 13 .byte 13h +000814r 1 14 .byte 14h +000815r 1 15 .byte 15h +000816r 1 16 .byte 16h +000817r 1 17 .byte 17h +000818r 1 18 .byte 18h +000819r 1 19 .byte 19h +00081Ar 1 1A .byte 1ah +00081Br 1 1B .byte 1bh +00081Cr 1 1C .byte 1ch +00081Dr 1 1D .byte 1dh +00081Er 1 1E .byte 1eh +00081Fr 1 1F .byte 1fh +000820r 1 20 .byte 20h +000821r 1 21 .byte 21h +000822r 1 22 .byte 22h +000823r 1 23 .byte 23h +000824r 1 24 .byte 24h +000825r 1 25 .byte 25h +000826r 1 26 .byte 26h +000827r 1 27 .byte 27h +000828r 1 28 .byte 28h +000829r 1 29 .byte 29h +00082Ar 1 2A .byte 2ah +00082Br 1 2B .byte 2bh +00082Cr 1 2C .byte 2ch +00082Dr 1 2D .byte 2dh +00082Er 1 2E .byte 2eh +00082Fr 1 2F .byte 2fh +000830r 1 30 .byte 30h +000831r 1 31 .byte 31h +000832r 1 32 .byte 32h +000833r 1 33 .byte 33h +000834r 1 34 .byte 34h +000835r 1 35 .byte 35h +000836r 1 36 .byte 36h +000837r 1 37 .byte 37h +000838r 1 38 .byte 38h +000839r 1 39 .byte 39h +00083Ar 1 3A .byte 3ah +00083Br 1 3B .byte 3bh +00083Cr 1 3C .byte 3ch +00083Dr 1 3D .byte 3dh +00083Er 1 3E .byte 3eh +00083Fr 1 3F .byte 3fh +000840r 1 40 .byte 40h +000841r 1 41 .byte 41h +000842r 1 42 .byte 42h +000843r 1 43 .byte 43h +000844r 1 44 .byte 44h +000845r 1 45 .byte 45h +000846r 1 46 .byte 46h +000847r 1 47 .byte 47h +000848r 1 48 .byte 48h +000849r 1 49 .byte 49h +00084Ar 1 4A .byte 4ah +00084Br 1 4B .byte 4bh +00084Cr 1 4C .byte 4ch +00084Dr 1 4D .byte 4dh +00084Er 1 4E .byte 4eh +00084Fr 1 4F .byte 4fh +000850r 1 50 .byte 50h +000851r 1 51 .byte 51h +000852r 1 52 .byte 52h +000853r 1 53 .byte 53h +000854r 1 54 .byte 54h +000855r 1 55 .byte 55h +000856r 1 56 .byte 56h +000857r 1 57 .byte 57h +000858r 1 58 .byte 58h +000859r 1 59 .byte 59h +00085Ar 1 5A .byte 5ah +00085Br 1 5B .byte 5bh +00085Cr 1 5C .byte 5ch +00085Dr 1 5D .byte 5dh +00085Er 1 5E .byte 5eh +00085Fr 1 5F .byte 5fh +000860r 1 60 .byte 60h +000861r 1 61 .byte 61h +000862r 1 62 .byte 62h +000863r 1 63 .byte 63h +000864r 1 64 .byte 64h +000865r 1 65 .byte 65h +000866r 1 66 .byte 66h +000867r 1 67 .byte 67h +000868r 1 68 .byte 68h +000869r 1 69 .byte 69h +00086Ar 1 6A .byte 6ah +00086Br 1 6B .byte 6bh +00086Cr 1 6C .byte 6ch +00086Dr 1 6D .byte 6dh +00086Er 1 6E .byte 6eh +00086Fr 1 6F .byte 6fh +000870r 1 70 .byte 70h +000871r 1 71 .byte 71h +000872r 1 72 .byte 72h +000873r 1 73 .byte 73h +000874r 1 74 .byte 74h +000875r 1 75 .byte 75h +000876r 1 76 .byte 76h +000877r 1 77 .byte 77h +000878r 1 78 .byte 78h +000879r 1 79 .byte 79h +00087Ar 1 7A .byte 7ah +00087Br 1 7B .byte 7bh +00087Cr 1 7C .byte 7ch +00087Dr 1 7D .byte 7dh +00087Er 1 7E .byte 7eh +00087Fr 1 7F .byte 7fh +000880r 1 80 .byte 80h +000881r 1 81 .byte 81h +000882r 1 82 .byte 82h +000883r 1 83 .byte 83h +000884r 1 84 .byte 84h +000885r 1 85 .byte 85h +000886r 1 86 .byte 86h +000887r 1 87 .byte 87h +000888r 1 88 .byte 88h +000889r 1 89 .byte 89h +00088Ar 1 8A .byte 8ah +00088Br 1 8B .byte 8bh +00088Cr 1 8C .byte 8ch +00088Dr 1 8D .byte 8dh +00088Er 1 8E .byte 8eh +00088Fr 1 8F .byte 8fh +000890r 1 90 .byte 90h +000891r 1 91 .byte 91h +000892r 1 92 .byte 92h +000893r 1 93 .byte 93h +000894r 1 94 .byte 94h +000895r 1 95 .byte 95h +000896r 1 96 .byte 96h +000897r 1 97 .byte 97h +000898r 1 98 .byte 98h +000899r 1 99 .byte 99h +00089Ar 1 9A .byte 9ah +00089Br 1 9B .byte 9bh +00089Cr 1 9C .byte 9ch +00089Dr 1 9D .byte 9dh +00089Er 1 9E .byte 9eh +00089Fr 1 9F .byte 9fh +0008A0r 1 A0 .byte 0a0h +0008A1r 1 A1 .byte 0a1h +0008A2r 1 A2 .byte 0a2h +0008A3r 1 A3 .byte 0a3h +0008A4r 1 A4 .byte 0a4h +0008A5r 1 A5 .byte 0a5h +0008A6r 1 A6 .byte 0a6h +0008A7r 1 A7 .byte 0a7h +0008A8r 1 A8 .byte 0a8h +0008A9r 1 A9 .byte 0a9h +0008AAr 1 AA .byte 0aah +0008ABr 1 AB .byte 0abh +0008ACr 1 AC .byte 0ach +0008ADr 1 AD .byte 0adh +0008AEr 1 AE .byte 0aeh +0008AFr 1 AF .byte 0afh +0008B0r 1 B0 .byte 0b0h +0008B1r 1 B1 .byte 0b1h +0008B2r 1 B2 .byte 0b2h +0008B3r 1 B3 .byte 0b3h +0008B4r 1 B4 .byte 0b4h +0008B5r 1 B5 .byte 0b5h +0008B6r 1 B6 .byte 0b6h +0008B7r 1 B7 .byte 0b7h +0008B8r 1 B8 .byte 0b8h +0008B9r 1 B9 .byte 0b9h +0008BAr 1 BA .byte 0bah +0008BBr 1 BB .byte 0bbh +0008BCr 1 BC .byte 0bch +0008BDr 1 BD .byte 0bdh +0008BEr 1 BE .byte 0beh +0008BFr 1 BF .byte 0bfh +0008C0r 1 C0 .byte 0c0h +0008C1r 1 C1 .byte 0c1h +0008C2r 1 C2 .byte 0c2h +0008C3r 1 C3 .byte 0c3h +0008C4r 1 C4 .byte 0c4h +0008C5r 1 C5 .byte 0c5h +0008C6r 1 C6 .byte 0c6h +0008C7r 1 C7 .byte 0c7h +0008C8r 1 C8 .byte 0c8h +0008C9r 1 C9 .byte 0c9h +0008CAr 1 CA .byte 0cah +0008CBr 1 CB .byte 0cbh +0008CCr 1 CC .byte 0cch +0008CDr 1 CD .byte 0cdh +0008CEr 1 CE .byte 0ceh +0008CFr 1 CF .byte 0cfh +0008D0r 1 D0 .byte 0d0h +0008D1r 1 D1 .byte 0d1h +0008D2r 1 D2 .byte 0d2h +0008D3r 1 D3 .byte 0d3h +0008D4r 1 D4 .byte 0d4h +0008D5r 1 D5 .byte 0d5h +0008D6r 1 D6 .byte 0d6h +0008D7r 1 D7 .byte 0d7h +0008D8r 1 D8 .byte 0d8h +0008D9r 1 D9 .byte 0d9h +0008DAr 1 DA .byte 0dah +0008DBr 1 DB .byte 0dbh +0008DCr 1 DC .byte 0dch +0008DDr 1 DD .byte 0ddh +0008DEr 1 DE .byte 0deh +0008DFr 1 DF .byte 0dfh +0008E0r 1 E0 .byte 0e0h +0008E1r 1 E1 .byte 0e1h +0008E2r 1 E2 .byte 0e2h +0008E3r 1 E3 .byte 0e3h +0008E4r 1 E4 .byte 0e4h +0008E5r 1 E5 .byte 0e5h +0008E6r 1 E6 .byte 0e6h +0008E7r 1 E7 .byte 0e7h +0008E8r 1 E8 .byte 0e8h +0008E9r 1 E9 .byte 0e9h +0008EAr 1 EA .byte 0eah +0008EBr 1 EB .byte 0ebh +0008ECr 1 EC .byte 0ech +0008EDr 1 ED .byte 0edh +0008EEr 1 EE .byte 0eeh +0008EFr 1 EF .byte 0efh +0008F0r 1 F0 .byte 0f0h +0008F1r 1 F1 .byte 0f1h +0008F2r 1 F2 .byte 0f2h +0008F3r 1 F3 .byte 0f3h +0008F4r 1 F4 .byte 0f4h +0008F5r 1 F5 .byte 0f5h +0008F6r 1 F6 .byte 0f6h +0008F7r 1 F7 .byte 0f7h +0008F8r 1 F8 .byte 0f8h +0008F9r 1 F9 .byte 0f9h +0008FAr 1 FA .byte 0fah +0008FBr 1 FB .byte 0fbh +0008FCr 1 FC .byte 0fch +0008FDr 1 FD .byte 0fdh +0008FEr 1 FE .byte 0feh +0008FFr 1 FF .byte 0ffh 000900r 1 -000900r 1 ; alternative 2-digit hex values, uppercase -000900r 1 00 .byte 00h -000901r 1 01 .byte 01h -000902r 1 02 .byte 02h -000903r 1 03 .byte 03h -000904r 1 04 .byte 04h -000905r 1 05 .byte 05h -000906r 1 06 .byte 06h -000907r 1 07 .byte 07h -000908r 1 08 .byte 08h -000909r 1 09 .byte 09h -00090Ar 1 0A .byte 0Ah -00090Br 1 0B .byte 0Bh -00090Cr 1 0C .byte 0Ch -00090Dr 1 0D .byte 0Dh -00090Er 1 0E .byte 0Eh -00090Fr 1 0F .byte 0Fh -000910r 1 10 .byte 10h -000911r 1 11 .byte 11h -000912r 1 12 .byte 12h -000913r 1 13 .byte 13h -000914r 1 14 .byte 14h -000915r 1 15 .byte 15h -000916r 1 16 .byte 16h -000917r 1 17 .byte 17h -000918r 1 18 .byte 18h -000919r 1 19 .byte 19h -00091Ar 1 1A .byte 1Ah -00091Br 1 1B .byte 1Bh -00091Cr 1 1C .byte 1Ch -00091Dr 1 1D .byte 1Dh -00091Er 1 1E .byte 1Eh -00091Fr 1 1F .byte 1Fh -000920r 1 20 .byte 20h -000921r 1 21 .byte 21h -000922r 1 22 .byte 22h -000923r 1 23 .byte 23h -000924r 1 24 .byte 24h -000925r 1 25 .byte 25h -000926r 1 26 .byte 26h -000927r 1 27 .byte 27h -000928r 1 28 .byte 28h -000929r 1 29 .byte 29h -00092Ar 1 2A .byte 2Ah -00092Br 1 2B .byte 2Bh -00092Cr 1 2C .byte 2Ch -00092Dr 1 2D .byte 2Dh -00092Er 1 2E .byte 2Eh -00092Fr 1 2F .byte 2Fh -000930r 1 30 .byte 30h -000931r 1 31 .byte 31h -000932r 1 32 .byte 32h -000933r 1 33 .byte 33h -000934r 1 34 .byte 34h -000935r 1 35 .byte 35h -000936r 1 36 .byte 36h -000937r 1 37 .byte 37h -000938r 1 38 .byte 38h -000939r 1 39 .byte 39h -00093Ar 1 3A .byte 3Ah -00093Br 1 3B .byte 3Bh -00093Cr 1 3C .byte 3Ch -00093Dr 1 3D .byte 3Dh -00093Er 1 3E .byte 3Eh -00093Fr 1 3F .byte 3Fh -000940r 1 40 .byte 40h -000941r 1 41 .byte 41h -000942r 1 42 .byte 42h -000943r 1 43 .byte 43h -000944r 1 44 .byte 44h -000945r 1 45 .byte 45h -000946r 1 46 .byte 46h -000947r 1 47 .byte 47h -000948r 1 48 .byte 48h -000949r 1 49 .byte 49h -00094Ar 1 4A .byte 4Ah -00094Br 1 4B .byte 4Bh -00094Cr 1 4C .byte 4Ch -00094Dr 1 4D .byte 4Dh -00094Er 1 4E .byte 4Eh -00094Fr 1 4F .byte 4Fh -000950r 1 50 .byte 50h -000951r 1 51 .byte 51h -000952r 1 52 .byte 52h -000953r 1 53 .byte 53h -000954r 1 54 .byte 54h -000955r 1 55 .byte 55h -000956r 1 56 .byte 56h -000957r 1 57 .byte 57h -000958r 1 58 .byte 58h -000959r 1 59 .byte 59h -00095Ar 1 5A .byte 5Ah -00095Br 1 5B .byte 5Bh -00095Cr 1 5C .byte 5Ch -00095Dr 1 5D .byte 5Dh -00095Er 1 5E .byte 5Eh -00095Fr 1 5F .byte 5Fh -000960r 1 60 .byte 60h -000961r 1 61 .byte 61h -000962r 1 62 .byte 62h -000963r 1 63 .byte 63h -000964r 1 64 .byte 64h -000965r 1 65 .byte 65h -000966r 1 66 .byte 66h -000967r 1 67 .byte 67h -000968r 1 68 .byte 68h -000969r 1 69 .byte 69h -00096Ar 1 6A .byte 6Ah -00096Br 1 6B .byte 6Bh -00096Cr 1 6C .byte 6Ch -00096Dr 1 6D .byte 6Dh -00096Er 1 6E .byte 6Eh -00096Fr 1 6F .byte 6Fh -000970r 1 70 .byte 70h -000971r 1 71 .byte 71h -000972r 1 72 .byte 72h -000973r 1 73 .byte 73h -000974r 1 74 .byte 74h -000975r 1 75 .byte 75h -000976r 1 76 .byte 76h -000977r 1 77 .byte 77h -000978r 1 78 .byte 78h -000979r 1 79 .byte 79h -00097Ar 1 7A .byte 7Ah -00097Br 1 7B .byte 7Bh -00097Cr 1 7C .byte 7Ch -00097Dr 1 7D .byte 7Dh -00097Er 1 7E .byte 7Eh -00097Fr 1 7F .byte 7Fh -000980r 1 80 .byte 80h -000981r 1 81 .byte 81h -000982r 1 82 .byte 82h -000983r 1 83 .byte 83h -000984r 1 84 .byte 84h -000985r 1 85 .byte 85h -000986r 1 86 .byte 86h -000987r 1 87 .byte 87h -000988r 1 88 .byte 88h -000989r 1 89 .byte 89h -00098Ar 1 8A .byte 8Ah -00098Br 1 8B .byte 8Bh -00098Cr 1 8C .byte 8Ch -00098Dr 1 8D .byte 8Dh -00098Er 1 8E .byte 8Eh -00098Fr 1 8F .byte 8Fh -000990r 1 90 .byte 90h -000991r 1 91 .byte 91h -000992r 1 92 .byte 92h -000993r 1 93 .byte 93h -000994r 1 94 .byte 94h -000995r 1 95 .byte 95h -000996r 1 96 .byte 96h -000997r 1 97 .byte 97h -000998r 1 98 .byte 98h -000999r 1 99 .byte 99h -00099Ar 1 9A .byte 9Ah -00099Br 1 9B .byte 9Bh -00099Cr 1 9C .byte 9Ch -00099Dr 1 9D .byte 9Dh -00099Er 1 9E .byte 9Eh -00099Fr 1 9F .byte 9Fh -0009A0r 1 A0 .byte 0A0h -0009A1r 1 A1 .byte 0A1h -0009A2r 1 A2 .byte 0A2h -0009A3r 1 A3 .byte 0A3h -0009A4r 1 A4 .byte 0A4h -0009A5r 1 A5 .byte 0A5h -0009A6r 1 A6 .byte 0A6h -0009A7r 1 A7 .byte 0A7h -0009A8r 1 A8 .byte 0A8h -0009A9r 1 A9 .byte 0A9h -0009AAr 1 AA .byte 0AAh -0009ABr 1 AB .byte 0ABh -0009ACr 1 AC .byte 0ACh -0009ADr 1 AD .byte 0ADh -0009AEr 1 AE .byte 0AEh -0009AFr 1 AF .byte 0AFh -0009B0r 1 B0 .byte 0B0h -0009B1r 1 B1 .byte 0B1h -0009B2r 1 B2 .byte 0B2h -0009B3r 1 B3 .byte 0B3h -0009B4r 1 B4 .byte 0B4h -0009B5r 1 B5 .byte 0B5h -0009B6r 1 B6 .byte 0B6h -0009B7r 1 B7 .byte 0B7h -0009B8r 1 B8 .byte 0B8h -0009B9r 1 B9 .byte 0B9h -0009BAr 1 BA .byte 0BAh -0009BBr 1 BB .byte 0BBh -0009BCr 1 BC .byte 0BCh -0009BDr 1 BD .byte 0BDh -0009BEr 1 BE .byte 0BEh -0009BFr 1 BF .byte 0BFh -0009C0r 1 C0 .byte 0C0h -0009C1r 1 C1 .byte 0C1h -0009C2r 1 C2 .byte 0C2h -0009C3r 1 C3 .byte 0C3h -0009C4r 1 C4 .byte 0C4h -0009C5r 1 C5 .byte 0C5h -0009C6r 1 C6 .byte 0C6h -0009C7r 1 C7 .byte 0C7h -0009C8r 1 C8 .byte 0C8h -0009C9r 1 C9 .byte 0C9h -0009CAr 1 CA .byte 0CAh -0009CBr 1 CB .byte 0CBh -0009CCr 1 CC .byte 0CCh -0009CDr 1 CD .byte 0CDh -0009CEr 1 CE .byte 0CEh -0009CFr 1 CF .byte 0CFh -0009D0r 1 D0 .byte 0D0h -0009D1r 1 D1 .byte 0D1h -0009D2r 1 D2 .byte 0D2h -0009D3r 1 D3 .byte 0D3h -0009D4r 1 D4 .byte 0D4h -0009D5r 1 D5 .byte 0D5h -0009D6r 1 D6 .byte 0D6h -0009D7r 1 D7 .byte 0D7h -0009D8r 1 D8 .byte 0D8h -0009D9r 1 D9 .byte 0D9h -0009DAr 1 DA .byte 0DAh -0009DBr 1 DB .byte 0DBh -0009DCr 1 DC .byte 0DCh -0009DDr 1 DD .byte 0DDh -0009DEr 1 DE .byte 0DEh -0009DFr 1 DF .byte 0DFh -0009E0r 1 E0 .byte 0E0h -0009E1r 1 E1 .byte 0E1h -0009E2r 1 E2 .byte 0E2h -0009E3r 1 E3 .byte 0E3h -0009E4r 1 E4 .byte 0E4h -0009E5r 1 E5 .byte 0E5h -0009E6r 1 E6 .byte 0E6h -0009E7r 1 E7 .byte 0E7h -0009E8r 1 E8 .byte 0E8h -0009E9r 1 E9 .byte 0E9h -0009EAr 1 EA .byte 0EAh -0009EBr 1 EB .byte 0EBh -0009ECr 1 EC .byte 0ECh -0009EDr 1 ED .byte 0EDh -0009EEr 1 EE .byte 0EEh -0009EFr 1 EF .byte 0EFh -0009F0r 1 F0 .byte 0F0h -0009F1r 1 F1 .byte 0F1h -0009F2r 1 F2 .byte 0F2h -0009F3r 1 F3 .byte 0F3h -0009F4r 1 F4 .byte 0F4h -0009F5r 1 F5 .byte 0F5h -0009F6r 1 F6 .byte 0F6h -0009F7r 1 F7 .byte 0F7h -0009F8r 1 F8 .byte 0F8h -0009F9r 1 F9 .byte 0F9h -0009FAr 1 FA .byte 0FAh -0009FBr 1 FB .byte 0FBh -0009FCr 1 FC .byte 0FCh -0009FDr 1 FD .byte 0FDh -0009FEr 1 FE .byte 0FEh -0009FFr 1 FF .byte 0FFh +000900r 1 ; alternative 2-digit hex values, uppercase +000900r 1 00 .byte 00h +000901r 1 01 .byte 01h +000902r 1 02 .byte 02h +000903r 1 03 .byte 03h +000904r 1 04 .byte 04h +000905r 1 05 .byte 05h +000906r 1 06 .byte 06h +000907r 1 07 .byte 07h +000908r 1 08 .byte 08h +000909r 1 09 .byte 09h +00090Ar 1 0A .byte 0Ah +00090Br 1 0B .byte 0Bh +00090Cr 1 0C .byte 0Ch +00090Dr 1 0D .byte 0Dh +00090Er 1 0E .byte 0Eh +00090Fr 1 0F .byte 0Fh +000910r 1 10 .byte 10h +000911r 1 11 .byte 11h +000912r 1 12 .byte 12h +000913r 1 13 .byte 13h +000914r 1 14 .byte 14h +000915r 1 15 .byte 15h +000916r 1 16 .byte 16h +000917r 1 17 .byte 17h +000918r 1 18 .byte 18h +000919r 1 19 .byte 19h +00091Ar 1 1A .byte 1Ah +00091Br 1 1B .byte 1Bh +00091Cr 1 1C .byte 1Ch +00091Dr 1 1D .byte 1Dh +00091Er 1 1E .byte 1Eh +00091Fr 1 1F .byte 1Fh +000920r 1 20 .byte 20h +000921r 1 21 .byte 21h +000922r 1 22 .byte 22h +000923r 1 23 .byte 23h +000924r 1 24 .byte 24h +000925r 1 25 .byte 25h +000926r 1 26 .byte 26h +000927r 1 27 .byte 27h +000928r 1 28 .byte 28h +000929r 1 29 .byte 29h +00092Ar 1 2A .byte 2Ah +00092Br 1 2B .byte 2Bh +00092Cr 1 2C .byte 2Ch +00092Dr 1 2D .byte 2Dh +00092Er 1 2E .byte 2Eh +00092Fr 1 2F .byte 2Fh +000930r 1 30 .byte 30h +000931r 1 31 .byte 31h +000932r 1 32 .byte 32h +000933r 1 33 .byte 33h +000934r 1 34 .byte 34h +000935r 1 35 .byte 35h +000936r 1 36 .byte 36h +000937r 1 37 .byte 37h +000938r 1 38 .byte 38h +000939r 1 39 .byte 39h +00093Ar 1 3A .byte 3Ah +00093Br 1 3B .byte 3Bh +00093Cr 1 3C .byte 3Ch +00093Dr 1 3D .byte 3Dh +00093Er 1 3E .byte 3Eh +00093Fr 1 3F .byte 3Fh +000940r 1 40 .byte 40h +000941r 1 41 .byte 41h +000942r 1 42 .byte 42h +000943r 1 43 .byte 43h +000944r 1 44 .byte 44h +000945r 1 45 .byte 45h +000946r 1 46 .byte 46h +000947r 1 47 .byte 47h +000948r 1 48 .byte 48h +000949r 1 49 .byte 49h +00094Ar 1 4A .byte 4Ah +00094Br 1 4B .byte 4Bh +00094Cr 1 4C .byte 4Ch +00094Dr 1 4D .byte 4Dh +00094Er 1 4E .byte 4Eh +00094Fr 1 4F .byte 4Fh +000950r 1 50 .byte 50h +000951r 1 51 .byte 51h +000952r 1 52 .byte 52h +000953r 1 53 .byte 53h +000954r 1 54 .byte 54h +000955r 1 55 .byte 55h +000956r 1 56 .byte 56h +000957r 1 57 .byte 57h +000958r 1 58 .byte 58h +000959r 1 59 .byte 59h +00095Ar 1 5A .byte 5Ah +00095Br 1 5B .byte 5Bh +00095Cr 1 5C .byte 5Ch +00095Dr 1 5D .byte 5Dh +00095Er 1 5E .byte 5Eh +00095Fr 1 5F .byte 5Fh +000960r 1 60 .byte 60h +000961r 1 61 .byte 61h +000962r 1 62 .byte 62h +000963r 1 63 .byte 63h +000964r 1 64 .byte 64h +000965r 1 65 .byte 65h +000966r 1 66 .byte 66h +000967r 1 67 .byte 67h +000968r 1 68 .byte 68h +000969r 1 69 .byte 69h +00096Ar 1 6A .byte 6Ah +00096Br 1 6B .byte 6Bh +00096Cr 1 6C .byte 6Ch +00096Dr 1 6D .byte 6Dh +00096Er 1 6E .byte 6Eh +00096Fr 1 6F .byte 6Fh +000970r 1 70 .byte 70h +000971r 1 71 .byte 71h +000972r 1 72 .byte 72h +000973r 1 73 .byte 73h +000974r 1 74 .byte 74h +000975r 1 75 .byte 75h +000976r 1 76 .byte 76h +000977r 1 77 .byte 77h +000978r 1 78 .byte 78h +000979r 1 79 .byte 79h +00097Ar 1 7A .byte 7Ah +00097Br 1 7B .byte 7Bh +00097Cr 1 7C .byte 7Ch +00097Dr 1 7D .byte 7Dh +00097Er 1 7E .byte 7Eh +00097Fr 1 7F .byte 7Fh +000980r 1 80 .byte 80h +000981r 1 81 .byte 81h +000982r 1 82 .byte 82h +000983r 1 83 .byte 83h +000984r 1 84 .byte 84h +000985r 1 85 .byte 85h +000986r 1 86 .byte 86h +000987r 1 87 .byte 87h +000988r 1 88 .byte 88h +000989r 1 89 .byte 89h +00098Ar 1 8A .byte 8Ah +00098Br 1 8B .byte 8Bh +00098Cr 1 8C .byte 8Ch +00098Dr 1 8D .byte 8Dh +00098Er 1 8E .byte 8Eh +00098Fr 1 8F .byte 8Fh +000990r 1 90 .byte 90h +000991r 1 91 .byte 91h +000992r 1 92 .byte 92h +000993r 1 93 .byte 93h +000994r 1 94 .byte 94h +000995r 1 95 .byte 95h +000996r 1 96 .byte 96h +000997r 1 97 .byte 97h +000998r 1 98 .byte 98h +000999r 1 99 .byte 99h +00099Ar 1 9A .byte 9Ah +00099Br 1 9B .byte 9Bh +00099Cr 1 9C .byte 9Ch +00099Dr 1 9D .byte 9Dh +00099Er 1 9E .byte 9Eh +00099Fr 1 9F .byte 9Fh +0009A0r 1 A0 .byte 0A0h +0009A1r 1 A1 .byte 0A1h +0009A2r 1 A2 .byte 0A2h +0009A3r 1 A3 .byte 0A3h +0009A4r 1 A4 .byte 0A4h +0009A5r 1 A5 .byte 0A5h +0009A6r 1 A6 .byte 0A6h +0009A7r 1 A7 .byte 0A7h +0009A8r 1 A8 .byte 0A8h +0009A9r 1 A9 .byte 0A9h +0009AAr 1 AA .byte 0AAh +0009ABr 1 AB .byte 0ABh +0009ACr 1 AC .byte 0ACh +0009ADr 1 AD .byte 0ADh +0009AEr 1 AE .byte 0AEh +0009AFr 1 AF .byte 0AFh +0009B0r 1 B0 .byte 0B0h +0009B1r 1 B1 .byte 0B1h +0009B2r 1 B2 .byte 0B2h +0009B3r 1 B3 .byte 0B3h +0009B4r 1 B4 .byte 0B4h +0009B5r 1 B5 .byte 0B5h +0009B6r 1 B6 .byte 0B6h +0009B7r 1 B7 .byte 0B7h +0009B8r 1 B8 .byte 0B8h +0009B9r 1 B9 .byte 0B9h +0009BAr 1 BA .byte 0BAh +0009BBr 1 BB .byte 0BBh +0009BCr 1 BC .byte 0BCh +0009BDr 1 BD .byte 0BDh +0009BEr 1 BE .byte 0BEh +0009BFr 1 BF .byte 0BFh +0009C0r 1 C0 .byte 0C0h +0009C1r 1 C1 .byte 0C1h +0009C2r 1 C2 .byte 0C2h +0009C3r 1 C3 .byte 0C3h +0009C4r 1 C4 .byte 0C4h +0009C5r 1 C5 .byte 0C5h +0009C6r 1 C6 .byte 0C6h +0009C7r 1 C7 .byte 0C7h +0009C8r 1 C8 .byte 0C8h +0009C9r 1 C9 .byte 0C9h +0009CAr 1 CA .byte 0CAh +0009CBr 1 CB .byte 0CBh +0009CCr 1 CC .byte 0CCh +0009CDr 1 CD .byte 0CDh +0009CEr 1 CE .byte 0CEh +0009CFr 1 CF .byte 0CFh +0009D0r 1 D0 .byte 0D0h +0009D1r 1 D1 .byte 0D1h +0009D2r 1 D2 .byte 0D2h +0009D3r 1 D3 .byte 0D3h +0009D4r 1 D4 .byte 0D4h +0009D5r 1 D5 .byte 0D5h +0009D6r 1 D6 .byte 0D6h +0009D7r 1 D7 .byte 0D7h +0009D8r 1 D8 .byte 0D8h +0009D9r 1 D9 .byte 0D9h +0009DAr 1 DA .byte 0DAh +0009DBr 1 DB .byte 0DBh +0009DCr 1 DC .byte 0DCh +0009DDr 1 DD .byte 0DDh +0009DEr 1 DE .byte 0DEh +0009DFr 1 DF .byte 0DFh +0009E0r 1 E0 .byte 0E0h +0009E1r 1 E1 .byte 0E1h +0009E2r 1 E2 .byte 0E2h +0009E3r 1 E3 .byte 0E3h +0009E4r 1 E4 .byte 0E4h +0009E5r 1 E5 .byte 0E5h +0009E6r 1 E6 .byte 0E6h +0009E7r 1 E7 .byte 0E7h +0009E8r 1 E8 .byte 0E8h +0009E9r 1 E9 .byte 0E9h +0009EAr 1 EA .byte 0EAh +0009EBr 1 EB .byte 0EBh +0009ECr 1 EC .byte 0ECh +0009EDr 1 ED .byte 0EDh +0009EEr 1 EE .byte 0EEh +0009EFr 1 EF .byte 0EFh +0009F0r 1 F0 .byte 0F0h +0009F1r 1 F1 .byte 0F1h +0009F2r 1 F2 .byte 0F2h +0009F3r 1 F3 .byte 0F3h +0009F4r 1 F4 .byte 0F4h +0009F5r 1 F5 .byte 0F5h +0009F6r 1 F6 .byte 0F6h +0009F7r 1 F7 .byte 0F7h +0009F8r 1 F8 .byte 0F8h +0009F9r 1 F9 .byte 0F9h +0009FAr 1 FA .byte 0FAh +0009FBr 1 FB .byte 0FBh +0009FCr 1 FC .byte 0FCh +0009FDr 1 FD .byte 0FDh +0009FEr 1 FE .byte 0FEh +0009FFr 1 FF .byte 0FFh 000A00r 1 -000A00r 1 ; alternative hex values, always leading zero -000A00r 1 00 .byte 00h -000A01r 1 01 .byte 01h -000A02r 1 02 .byte 02h -000A03r 1 03 .byte 03h -000A04r 1 04 .byte 04h -000A05r 1 05 .byte 05h -000A06r 1 06 .byte 06h -000A07r 1 07 .byte 07h -000A08r 1 08 .byte 08h -000A09r 1 09 .byte 09h -000A0Ar 1 0A .byte 0ah -000A0Br 1 0B .byte 0bh -000A0Cr 1 0C .byte 0ch -000A0Dr 1 0D .byte 0dh -000A0Er 1 0E .byte 0eh -000A0Fr 1 0F .byte 0fh -000A10r 1 10 .byte 010h -000A11r 1 11 .byte 011h -000A12r 1 12 .byte 012h -000A13r 1 13 .byte 013h -000A14r 1 14 .byte 014h -000A15r 1 15 .byte 015h -000A16r 1 16 .byte 016h -000A17r 1 17 .byte 017h -000A18r 1 18 .byte 018h -000A19r 1 19 .byte 019h -000A1Ar 1 1A .byte 01ah -000A1Br 1 1B .byte 01bh -000A1Cr 1 1C .byte 01ch -000A1Dr 1 1D .byte 01dh -000A1Er 1 1E .byte 01eh -000A1Fr 1 1F .byte 01fh -000A20r 1 20 .byte 020h -000A21r 1 21 .byte 021h -000A22r 1 22 .byte 022h -000A23r 1 23 .byte 023h -000A24r 1 24 .byte 024h -000A25r 1 25 .byte 025h -000A26r 1 26 .byte 026h -000A27r 1 27 .byte 027h -000A28r 1 28 .byte 028h -000A29r 1 29 .byte 029h -000A2Ar 1 2A .byte 02ah -000A2Br 1 2B .byte 02bh -000A2Cr 1 2C .byte 02ch -000A2Dr 1 2D .byte 02dh -000A2Er 1 2E .byte 02eh -000A2Fr 1 2F .byte 02fh -000A30r 1 30 .byte 030h -000A31r 1 31 .byte 031h -000A32r 1 32 .byte 032h -000A33r 1 33 .byte 033h -000A34r 1 34 .byte 034h -000A35r 1 35 .byte 035h -000A36r 1 36 .byte 036h -000A37r 1 37 .byte 037h -000A38r 1 38 .byte 038h -000A39r 1 39 .byte 039h -000A3Ar 1 3A .byte 03ah -000A3Br 1 3B .byte 03bh -000A3Cr 1 3C .byte 03ch -000A3Dr 1 3D .byte 03dh -000A3Er 1 3E .byte 03eh -000A3Fr 1 3F .byte 03fh -000A40r 1 40 .byte 040h -000A41r 1 41 .byte 041h -000A42r 1 42 .byte 042h -000A43r 1 43 .byte 043h -000A44r 1 44 .byte 044h -000A45r 1 45 .byte 045h -000A46r 1 46 .byte 046h -000A47r 1 47 .byte 047h -000A48r 1 48 .byte 048h -000A49r 1 49 .byte 049h -000A4Ar 1 4A .byte 04ah -000A4Br 1 4B .byte 04bh -000A4Cr 1 4C .byte 04ch -000A4Dr 1 4D .byte 04dh -000A4Er 1 4E .byte 04eh -000A4Fr 1 4F .byte 04fh -000A50r 1 50 .byte 050h -000A51r 1 51 .byte 051h -000A52r 1 52 .byte 052h -000A53r 1 53 .byte 053h -000A54r 1 54 .byte 054h -000A55r 1 55 .byte 055h -000A56r 1 56 .byte 056h -000A57r 1 57 .byte 057h -000A58r 1 58 .byte 058h -000A59r 1 59 .byte 059h -000A5Ar 1 5A .byte 05ah -000A5Br 1 5B .byte 05bh -000A5Cr 1 5C .byte 05ch -000A5Dr 1 5D .byte 05dh -000A5Er 1 5E .byte 05eh -000A5Fr 1 5F .byte 05fh -000A60r 1 60 .byte 060h -000A61r 1 61 .byte 061h -000A62r 1 62 .byte 062h -000A63r 1 63 .byte 063h -000A64r 1 64 .byte 064h -000A65r 1 65 .byte 065h -000A66r 1 66 .byte 066h -000A67r 1 67 .byte 067h -000A68r 1 68 .byte 068h -000A69r 1 69 .byte 069h -000A6Ar 1 6A .byte 06ah -000A6Br 1 6B .byte 06bh -000A6Cr 1 6C .byte 06ch -000A6Dr 1 6D .byte 06dh -000A6Er 1 6E .byte 06eh -000A6Fr 1 6F .byte 06fh -000A70r 1 70 .byte 070h -000A71r 1 71 .byte 071h -000A72r 1 72 .byte 072h -000A73r 1 73 .byte 073h -000A74r 1 74 .byte 074h -000A75r 1 75 .byte 075h -000A76r 1 76 .byte 076h -000A77r 1 77 .byte 077h -000A78r 1 78 .byte 078h -000A79r 1 79 .byte 079h -000A7Ar 1 7A .byte 07ah -000A7Br 1 7B .byte 07bh -000A7Cr 1 7C .byte 07ch -000A7Dr 1 7D .byte 07dh -000A7Er 1 7E .byte 07eh -000A7Fr 1 7F .byte 07fh -000A80r 1 80 .byte 080h -000A81r 1 81 .byte 081h -000A82r 1 82 .byte 082h -000A83r 1 83 .byte 083h -000A84r 1 84 .byte 084h -000A85r 1 85 .byte 085h -000A86r 1 86 .byte 086h -000A87r 1 87 .byte 087h -000A88r 1 88 .byte 088h -000A89r 1 89 .byte 089h -000A8Ar 1 8A .byte 08ah -000A8Br 1 8B .byte 08bh -000A8Cr 1 8C .byte 08ch -000A8Dr 1 8D .byte 08dh -000A8Er 1 8E .byte 08eh -000A8Fr 1 8F .byte 08fh -000A90r 1 90 .byte 090h -000A91r 1 91 .byte 091h -000A92r 1 92 .byte 092h -000A93r 1 93 .byte 093h -000A94r 1 94 .byte 094h -000A95r 1 95 .byte 095h -000A96r 1 96 .byte 096h -000A97r 1 97 .byte 097h -000A98r 1 98 .byte 098h -000A99r 1 99 .byte 099h -000A9Ar 1 9A .byte 09ah -000A9Br 1 9B .byte 09bh -000A9Cr 1 9C .byte 09ch -000A9Dr 1 9D .byte 09dh -000A9Er 1 9E .byte 09eh -000A9Fr 1 9F .byte 09fh -000AA0r 1 A0 .byte 0a0h -000AA1r 1 A1 .byte 0a1h -000AA2r 1 A2 .byte 0a2h -000AA3r 1 A3 .byte 0a3h -000AA4r 1 A4 .byte 0a4h -000AA5r 1 A5 .byte 0a5h -000AA6r 1 A6 .byte 0a6h -000AA7r 1 A7 .byte 0a7h -000AA8r 1 A8 .byte 0a8h -000AA9r 1 A9 .byte 0a9h -000AAAr 1 AA .byte 0aah -000AABr 1 AB .byte 0abh -000AACr 1 AC .byte 0ach -000AADr 1 AD .byte 0adh -000AAEr 1 AE .byte 0aeh -000AAFr 1 AF .byte 0afh -000AB0r 1 B0 .byte 0b0h -000AB1r 1 B1 .byte 0b1h -000AB2r 1 B2 .byte 0b2h -000AB3r 1 B3 .byte 0b3h -000AB4r 1 B4 .byte 0b4h -000AB5r 1 B5 .byte 0b5h -000AB6r 1 B6 .byte 0b6h -000AB7r 1 B7 .byte 0b7h -000AB8r 1 B8 .byte 0b8h -000AB9r 1 B9 .byte 0b9h -000ABAr 1 BA .byte 0bah -000ABBr 1 BB .byte 0bbh -000ABCr 1 BC .byte 0bch -000ABDr 1 BD .byte 0bdh -000ABEr 1 BE .byte 0beh -000ABFr 1 BF .byte 0bfh -000AC0r 1 C0 .byte 0c0h -000AC1r 1 C1 .byte 0c1h -000AC2r 1 C2 .byte 0c2h -000AC3r 1 C3 .byte 0c3h -000AC4r 1 C4 .byte 0c4h -000AC5r 1 C5 .byte 0c5h -000AC6r 1 C6 .byte 0c6h -000AC7r 1 C7 .byte 0c7h -000AC8r 1 C8 .byte 0c8h -000AC9r 1 C9 .byte 0c9h -000ACAr 1 CA .byte 0cah -000ACBr 1 CB .byte 0cbh -000ACCr 1 CC .byte 0cch -000ACDr 1 CD .byte 0cdh -000ACEr 1 CE .byte 0ceh -000ACFr 1 CF .byte 0cfh -000AD0r 1 D0 .byte 0d0h -000AD1r 1 D1 .byte 0d1h -000AD2r 1 D2 .byte 0d2h -000AD3r 1 D3 .byte 0d3h -000AD4r 1 D4 .byte 0d4h -000AD5r 1 D5 .byte 0d5h -000AD6r 1 D6 .byte 0d6h -000AD7r 1 D7 .byte 0d7h -000AD8r 1 D8 .byte 0d8h -000AD9r 1 D9 .byte 0d9h -000ADAr 1 DA .byte 0dah -000ADBr 1 DB .byte 0dbh -000ADCr 1 DC .byte 0dch -000ADDr 1 DD .byte 0ddh -000ADEr 1 DE .byte 0deh -000ADFr 1 DF .byte 0dfh -000AE0r 1 E0 .byte 0e0h -000AE1r 1 E1 .byte 0e1h -000AE2r 1 E2 .byte 0e2h -000AE3r 1 E3 .byte 0e3h -000AE4r 1 E4 .byte 0e4h -000AE5r 1 E5 .byte 0e5h -000AE6r 1 E6 .byte 0e6h -000AE7r 1 E7 .byte 0e7h -000AE8r 1 E8 .byte 0e8h -000AE9r 1 E9 .byte 0e9h -000AEAr 1 EA .byte 0eah -000AEBr 1 EB .byte 0ebh -000AECr 1 EC .byte 0ech -000AEDr 1 ED .byte 0edh -000AEEr 1 EE .byte 0eeh -000AEFr 1 EF .byte 0efh -000AF0r 1 F0 .byte 0f0h -000AF1r 1 F1 .byte 0f1h -000AF2r 1 F2 .byte 0f2h -000AF3r 1 F3 .byte 0f3h -000AF4r 1 F4 .byte 0f4h -000AF5r 1 F5 .byte 0f5h -000AF6r 1 F6 .byte 0f6h -000AF7r 1 F7 .byte 0f7h -000AF8r 1 F8 .byte 0f8h -000AF9r 1 F9 .byte 0f9h -000AFAr 1 FA .byte 0fah -000AFBr 1 FB .byte 0fbh -000AFCr 1 FC .byte 0fch -000AFDr 1 FD .byte 0fdh -000AFEr 1 FE .byte 0feh -000AFFr 1 FF .byte 0ffh +000A00r 1 ; alternative hex values, always leading zero +000A00r 1 00 .byte 00h +000A01r 1 01 .byte 01h +000A02r 1 02 .byte 02h +000A03r 1 03 .byte 03h +000A04r 1 04 .byte 04h +000A05r 1 05 .byte 05h +000A06r 1 06 .byte 06h +000A07r 1 07 .byte 07h +000A08r 1 08 .byte 08h +000A09r 1 09 .byte 09h +000A0Ar 1 0A .byte 0ah +000A0Br 1 0B .byte 0bh +000A0Cr 1 0C .byte 0ch +000A0Dr 1 0D .byte 0dh +000A0Er 1 0E .byte 0eh +000A0Fr 1 0F .byte 0fh +000A10r 1 10 .byte 010h +000A11r 1 11 .byte 011h +000A12r 1 12 .byte 012h +000A13r 1 13 .byte 013h +000A14r 1 14 .byte 014h +000A15r 1 15 .byte 015h +000A16r 1 16 .byte 016h +000A17r 1 17 .byte 017h +000A18r 1 18 .byte 018h +000A19r 1 19 .byte 019h +000A1Ar 1 1A .byte 01ah +000A1Br 1 1B .byte 01bh +000A1Cr 1 1C .byte 01ch +000A1Dr 1 1D .byte 01dh +000A1Er 1 1E .byte 01eh +000A1Fr 1 1F .byte 01fh +000A20r 1 20 .byte 020h +000A21r 1 21 .byte 021h +000A22r 1 22 .byte 022h +000A23r 1 23 .byte 023h +000A24r 1 24 .byte 024h +000A25r 1 25 .byte 025h +000A26r 1 26 .byte 026h +000A27r 1 27 .byte 027h +000A28r 1 28 .byte 028h +000A29r 1 29 .byte 029h +000A2Ar 1 2A .byte 02ah +000A2Br 1 2B .byte 02bh +000A2Cr 1 2C .byte 02ch +000A2Dr 1 2D .byte 02dh +000A2Er 1 2E .byte 02eh +000A2Fr 1 2F .byte 02fh +000A30r 1 30 .byte 030h +000A31r 1 31 .byte 031h +000A32r 1 32 .byte 032h +000A33r 1 33 .byte 033h +000A34r 1 34 .byte 034h +000A35r 1 35 .byte 035h +000A36r 1 36 .byte 036h +000A37r 1 37 .byte 037h +000A38r 1 38 .byte 038h +000A39r 1 39 .byte 039h +000A3Ar 1 3A .byte 03ah +000A3Br 1 3B .byte 03bh +000A3Cr 1 3C .byte 03ch +000A3Dr 1 3D .byte 03dh +000A3Er 1 3E .byte 03eh +000A3Fr 1 3F .byte 03fh +000A40r 1 40 .byte 040h +000A41r 1 41 .byte 041h +000A42r 1 42 .byte 042h +000A43r 1 43 .byte 043h +000A44r 1 44 .byte 044h +000A45r 1 45 .byte 045h +000A46r 1 46 .byte 046h +000A47r 1 47 .byte 047h +000A48r 1 48 .byte 048h +000A49r 1 49 .byte 049h +000A4Ar 1 4A .byte 04ah +000A4Br 1 4B .byte 04bh +000A4Cr 1 4C .byte 04ch +000A4Dr 1 4D .byte 04dh +000A4Er 1 4E .byte 04eh +000A4Fr 1 4F .byte 04fh +000A50r 1 50 .byte 050h +000A51r 1 51 .byte 051h +000A52r 1 52 .byte 052h +000A53r 1 53 .byte 053h +000A54r 1 54 .byte 054h +000A55r 1 55 .byte 055h +000A56r 1 56 .byte 056h +000A57r 1 57 .byte 057h +000A58r 1 58 .byte 058h +000A59r 1 59 .byte 059h +000A5Ar 1 5A .byte 05ah +000A5Br 1 5B .byte 05bh +000A5Cr 1 5C .byte 05ch +000A5Dr 1 5D .byte 05dh +000A5Er 1 5E .byte 05eh +000A5Fr 1 5F .byte 05fh +000A60r 1 60 .byte 060h +000A61r 1 61 .byte 061h +000A62r 1 62 .byte 062h +000A63r 1 63 .byte 063h +000A64r 1 64 .byte 064h +000A65r 1 65 .byte 065h +000A66r 1 66 .byte 066h +000A67r 1 67 .byte 067h +000A68r 1 68 .byte 068h +000A69r 1 69 .byte 069h +000A6Ar 1 6A .byte 06ah +000A6Br 1 6B .byte 06bh +000A6Cr 1 6C .byte 06ch +000A6Dr 1 6D .byte 06dh +000A6Er 1 6E .byte 06eh +000A6Fr 1 6F .byte 06fh +000A70r 1 70 .byte 070h +000A71r 1 71 .byte 071h +000A72r 1 72 .byte 072h +000A73r 1 73 .byte 073h +000A74r 1 74 .byte 074h +000A75r 1 75 .byte 075h +000A76r 1 76 .byte 076h +000A77r 1 77 .byte 077h +000A78r 1 78 .byte 078h +000A79r 1 79 .byte 079h +000A7Ar 1 7A .byte 07ah +000A7Br 1 7B .byte 07bh +000A7Cr 1 7C .byte 07ch +000A7Dr 1 7D .byte 07dh +000A7Er 1 7E .byte 07eh +000A7Fr 1 7F .byte 07fh +000A80r 1 80 .byte 080h +000A81r 1 81 .byte 081h +000A82r 1 82 .byte 082h +000A83r 1 83 .byte 083h +000A84r 1 84 .byte 084h +000A85r 1 85 .byte 085h +000A86r 1 86 .byte 086h +000A87r 1 87 .byte 087h +000A88r 1 88 .byte 088h +000A89r 1 89 .byte 089h +000A8Ar 1 8A .byte 08ah +000A8Br 1 8B .byte 08bh +000A8Cr 1 8C .byte 08ch +000A8Dr 1 8D .byte 08dh +000A8Er 1 8E .byte 08eh +000A8Fr 1 8F .byte 08fh +000A90r 1 90 .byte 090h +000A91r 1 91 .byte 091h +000A92r 1 92 .byte 092h +000A93r 1 93 .byte 093h +000A94r 1 94 .byte 094h +000A95r 1 95 .byte 095h +000A96r 1 96 .byte 096h +000A97r 1 97 .byte 097h +000A98r 1 98 .byte 098h +000A99r 1 99 .byte 099h +000A9Ar 1 9A .byte 09ah +000A9Br 1 9B .byte 09bh +000A9Cr 1 9C .byte 09ch +000A9Dr 1 9D .byte 09dh +000A9Er 1 9E .byte 09eh +000A9Fr 1 9F .byte 09fh +000AA0r 1 A0 .byte 0a0h +000AA1r 1 A1 .byte 0a1h +000AA2r 1 A2 .byte 0a2h +000AA3r 1 A3 .byte 0a3h +000AA4r 1 A4 .byte 0a4h +000AA5r 1 A5 .byte 0a5h +000AA6r 1 A6 .byte 0a6h +000AA7r 1 A7 .byte 0a7h +000AA8r 1 A8 .byte 0a8h +000AA9r 1 A9 .byte 0a9h +000AAAr 1 AA .byte 0aah +000AABr 1 AB .byte 0abh +000AACr 1 AC .byte 0ach +000AADr 1 AD .byte 0adh +000AAEr 1 AE .byte 0aeh +000AAFr 1 AF .byte 0afh +000AB0r 1 B0 .byte 0b0h +000AB1r 1 B1 .byte 0b1h +000AB2r 1 B2 .byte 0b2h +000AB3r 1 B3 .byte 0b3h +000AB4r 1 B4 .byte 0b4h +000AB5r 1 B5 .byte 0b5h +000AB6r 1 B6 .byte 0b6h +000AB7r 1 B7 .byte 0b7h +000AB8r 1 B8 .byte 0b8h +000AB9r 1 B9 .byte 0b9h +000ABAr 1 BA .byte 0bah +000ABBr 1 BB .byte 0bbh +000ABCr 1 BC .byte 0bch +000ABDr 1 BD .byte 0bdh +000ABEr 1 BE .byte 0beh +000ABFr 1 BF .byte 0bfh +000AC0r 1 C0 .byte 0c0h +000AC1r 1 C1 .byte 0c1h +000AC2r 1 C2 .byte 0c2h +000AC3r 1 C3 .byte 0c3h +000AC4r 1 C4 .byte 0c4h +000AC5r 1 C5 .byte 0c5h +000AC6r 1 C6 .byte 0c6h +000AC7r 1 C7 .byte 0c7h +000AC8r 1 C8 .byte 0c8h +000AC9r 1 C9 .byte 0c9h +000ACAr 1 CA .byte 0cah +000ACBr 1 CB .byte 0cbh +000ACCr 1 CC .byte 0cch +000ACDr 1 CD .byte 0cdh +000ACEr 1 CE .byte 0ceh +000ACFr 1 CF .byte 0cfh +000AD0r 1 D0 .byte 0d0h +000AD1r 1 D1 .byte 0d1h +000AD2r 1 D2 .byte 0d2h +000AD3r 1 D3 .byte 0d3h +000AD4r 1 D4 .byte 0d4h +000AD5r 1 D5 .byte 0d5h +000AD6r 1 D6 .byte 0d6h +000AD7r 1 D7 .byte 0d7h +000AD8r 1 D8 .byte 0d8h +000AD9r 1 D9 .byte 0d9h +000ADAr 1 DA .byte 0dah +000ADBr 1 DB .byte 0dbh +000ADCr 1 DC .byte 0dch +000ADDr 1 DD .byte 0ddh +000ADEr 1 DE .byte 0deh +000ADFr 1 DF .byte 0dfh +000AE0r 1 E0 .byte 0e0h +000AE1r 1 E1 .byte 0e1h +000AE2r 1 E2 .byte 0e2h +000AE3r 1 E3 .byte 0e3h +000AE4r 1 E4 .byte 0e4h +000AE5r 1 E5 .byte 0e5h +000AE6r 1 E6 .byte 0e6h +000AE7r 1 E7 .byte 0e7h +000AE8r 1 E8 .byte 0e8h +000AE9r 1 E9 .byte 0e9h +000AEAr 1 EA .byte 0eah +000AEBr 1 EB .byte 0ebh +000AECr 1 EC .byte 0ech +000AEDr 1 ED .byte 0edh +000AEEr 1 EE .byte 0eeh +000AEFr 1 EF .byte 0efh +000AF0r 1 F0 .byte 0f0h +000AF1r 1 F1 .byte 0f1h +000AF2r 1 F2 .byte 0f2h +000AF3r 1 F3 .byte 0f3h +000AF4r 1 F4 .byte 0f4h +000AF5r 1 F5 .byte 0f5h +000AF6r 1 F6 .byte 0f6h +000AF7r 1 F7 .byte 0f7h +000AF8r 1 F8 .byte 0f8h +000AF9r 1 F9 .byte 0f9h +000AFAr 1 FA .byte 0fah +000AFBr 1 FB .byte 0fbh +000AFCr 1 FC .byte 0fch +000AFDr 1 FD .byte 0fdh +000AFEr 1 FE .byte 0feh +000AFFr 1 FF .byte 0ffh 000B00r 1 -000B00r 1 ; binary values, variable length -000B00r 1 00 .byte %0 -000B01r 1 01 .byte %1 -000B02r 1 02 .byte %10 -000B03r 1 03 .byte %11 -000B04r 1 04 .byte %100 -000B05r 1 05 .byte %101 -000B06r 1 06 .byte %110 -000B07r 1 07 .byte %111 -000B08r 1 08 .byte %1000 -000B09r 1 09 .byte %1001 -000B0Ar 1 0A .byte %1010 -000B0Br 1 0B .byte %1011 -000B0Cr 1 0C .byte %1100 -000B0Dr 1 0D .byte %1101 -000B0Er 1 0E .byte %1110 -000B0Fr 1 0F .byte %1111 -000B10r 1 10 .byte %10000 -000B11r 1 11 .byte %10001 -000B12r 1 12 .byte %10010 -000B13r 1 13 .byte %10011 -000B14r 1 14 .byte %10100 -000B15r 1 15 .byte %10101 -000B16r 1 16 .byte %10110 -000B17r 1 17 .byte %10111 -000B18r 1 18 .byte %11000 -000B19r 1 19 .byte %11001 -000B1Ar 1 1A .byte %11010 -000B1Br 1 1B .byte %11011 -000B1Cr 1 1C .byte %11100 -000B1Dr 1 1D .byte %11101 -000B1Er 1 1E .byte %11110 -000B1Fr 1 1F .byte %11111 -000B20r 1 20 .byte %100000 -000B21r 1 21 .byte %100001 -000B22r 1 22 .byte %100010 -000B23r 1 23 .byte %100011 -000B24r 1 24 .byte %100100 -000B25r 1 25 .byte %100101 -000B26r 1 26 .byte %100110 -000B27r 1 27 .byte %100111 -000B28r 1 28 .byte %101000 -000B29r 1 29 .byte %101001 -000B2Ar 1 2A .byte %101010 -000B2Br 1 2B .byte %101011 -000B2Cr 1 2C .byte %101100 -000B2Dr 1 2D .byte %101101 -000B2Er 1 2E .byte %101110 -000B2Fr 1 2F .byte %101111 -000B30r 1 30 .byte %110000 -000B31r 1 31 .byte %110001 -000B32r 1 32 .byte %110010 -000B33r 1 33 .byte %110011 -000B34r 1 34 .byte %110100 -000B35r 1 35 .byte %110101 -000B36r 1 36 .byte %110110 -000B37r 1 37 .byte %110111 -000B38r 1 38 .byte %111000 -000B39r 1 39 .byte %111001 -000B3Ar 1 3A .byte %111010 -000B3Br 1 3B .byte %111011 -000B3Cr 1 3C .byte %111100 -000B3Dr 1 3D .byte %111101 -000B3Er 1 3E .byte %111110 -000B3Fr 1 3F .byte %111111 -000B40r 1 40 .byte %1000000 -000B41r 1 41 .byte %1000001 -000B42r 1 42 .byte %1000010 -000B43r 1 43 .byte %1000011 -000B44r 1 44 .byte %1000100 -000B45r 1 45 .byte %1000101 -000B46r 1 46 .byte %1000110 -000B47r 1 47 .byte %1000111 -000B48r 1 48 .byte %1001000 -000B49r 1 49 .byte %1001001 -000B4Ar 1 4A .byte %1001010 -000B4Br 1 4B .byte %1001011 -000B4Cr 1 4C .byte %1001100 -000B4Dr 1 4D .byte %1001101 -000B4Er 1 4E .byte %1001110 -000B4Fr 1 4F .byte %1001111 -000B50r 1 50 .byte %1010000 -000B51r 1 51 .byte %1010001 -000B52r 1 52 .byte %1010010 -000B53r 1 53 .byte %1010011 -000B54r 1 54 .byte %1010100 -000B55r 1 55 .byte %1010101 -000B56r 1 56 .byte %1010110 -000B57r 1 57 .byte %1010111 -000B58r 1 58 .byte %1011000 -000B59r 1 59 .byte %1011001 -000B5Ar 1 5A .byte %1011010 -000B5Br 1 5B .byte %1011011 -000B5Cr 1 5C .byte %1011100 -000B5Dr 1 5D .byte %1011101 -000B5Er 1 5E .byte %1011110 -000B5Fr 1 5F .byte %1011111 -000B60r 1 60 .byte %1100000 -000B61r 1 61 .byte %1100001 -000B62r 1 62 .byte %1100010 -000B63r 1 63 .byte %1100011 -000B64r 1 64 .byte %1100100 -000B65r 1 65 .byte %1100101 -000B66r 1 66 .byte %1100110 -000B67r 1 67 .byte %1100111 -000B68r 1 68 .byte %1101000 -000B69r 1 69 .byte %1101001 -000B6Ar 1 6A .byte %1101010 -000B6Br 1 6B .byte %1101011 -000B6Cr 1 6C .byte %1101100 -000B6Dr 1 6D .byte %1101101 -000B6Er 1 6E .byte %1101110 -000B6Fr 1 6F .byte %1101111 -000B70r 1 70 .byte %1110000 -000B71r 1 71 .byte %1110001 -000B72r 1 72 .byte %1110010 -000B73r 1 73 .byte %1110011 -000B74r 1 74 .byte %1110100 -000B75r 1 75 .byte %1110101 -000B76r 1 76 .byte %1110110 -000B77r 1 77 .byte %1110111 -000B78r 1 78 .byte %1111000 -000B79r 1 79 .byte %1111001 -000B7Ar 1 7A .byte %1111010 -000B7Br 1 7B .byte %1111011 -000B7Cr 1 7C .byte %1111100 -000B7Dr 1 7D .byte %1111101 -000B7Er 1 7E .byte %1111110 -000B7Fr 1 7F .byte %1111111 -000B80r 1 80 .byte %10000000 -000B81r 1 81 .byte %10000001 -000B82r 1 82 .byte %10000010 -000B83r 1 83 .byte %10000011 -000B84r 1 84 .byte %10000100 -000B85r 1 85 .byte %10000101 -000B86r 1 86 .byte %10000110 -000B87r 1 87 .byte %10000111 -000B88r 1 88 .byte %10001000 -000B89r 1 89 .byte %10001001 -000B8Ar 1 8A .byte %10001010 -000B8Br 1 8B .byte %10001011 -000B8Cr 1 8C .byte %10001100 -000B8Dr 1 8D .byte %10001101 -000B8Er 1 8E .byte %10001110 -000B8Fr 1 8F .byte %10001111 -000B90r 1 90 .byte %10010000 -000B91r 1 91 .byte %10010001 -000B92r 1 92 .byte %10010010 -000B93r 1 93 .byte %10010011 -000B94r 1 94 .byte %10010100 -000B95r 1 95 .byte %10010101 -000B96r 1 96 .byte %10010110 -000B97r 1 97 .byte %10010111 -000B98r 1 98 .byte %10011000 -000B99r 1 99 .byte %10011001 -000B9Ar 1 9A .byte %10011010 -000B9Br 1 9B .byte %10011011 -000B9Cr 1 9C .byte %10011100 -000B9Dr 1 9D .byte %10011101 -000B9Er 1 9E .byte %10011110 -000B9Fr 1 9F .byte %10011111 -000BA0r 1 A0 .byte %10100000 -000BA1r 1 A1 .byte %10100001 -000BA2r 1 A2 .byte %10100010 -000BA3r 1 A3 .byte %10100011 -000BA4r 1 A4 .byte %10100100 -000BA5r 1 A5 .byte %10100101 -000BA6r 1 A6 .byte %10100110 -000BA7r 1 A7 .byte %10100111 -000BA8r 1 A8 .byte %10101000 -000BA9r 1 A9 .byte %10101001 -000BAAr 1 AA .byte %10101010 -000BABr 1 AB .byte %10101011 -000BACr 1 AC .byte %10101100 -000BADr 1 AD .byte %10101101 -000BAEr 1 AE .byte %10101110 -000BAFr 1 AF .byte %10101111 -000BB0r 1 B0 .byte %10110000 -000BB1r 1 B1 .byte %10110001 -000BB2r 1 B2 .byte %10110010 -000BB3r 1 B3 .byte %10110011 -000BB4r 1 B4 .byte %10110100 -000BB5r 1 B5 .byte %10110101 -000BB6r 1 B6 .byte %10110110 -000BB7r 1 B7 .byte %10110111 -000BB8r 1 B8 .byte %10111000 -000BB9r 1 B9 .byte %10111001 -000BBAr 1 BA .byte %10111010 -000BBBr 1 BB .byte %10111011 -000BBCr 1 BC .byte %10111100 -000BBDr 1 BD .byte %10111101 -000BBEr 1 BE .byte %10111110 -000BBFr 1 BF .byte %10111111 -000BC0r 1 C0 .byte %11000000 -000BC1r 1 C1 .byte %11000001 -000BC2r 1 C2 .byte %11000010 -000BC3r 1 C3 .byte %11000011 -000BC4r 1 C4 .byte %11000100 -000BC5r 1 C5 .byte %11000101 -000BC6r 1 C6 .byte %11000110 -000BC7r 1 C7 .byte %11000111 -000BC8r 1 C8 .byte %11001000 -000BC9r 1 C9 .byte %11001001 -000BCAr 1 CA .byte %11001010 -000BCBr 1 CB .byte %11001011 -000BCCr 1 CC .byte %11001100 -000BCDr 1 CD .byte %11001101 -000BCEr 1 CE .byte %11001110 -000BCFr 1 CF .byte %11001111 -000BD0r 1 D0 .byte %11010000 -000BD1r 1 D1 .byte %11010001 -000BD2r 1 D2 .byte %11010010 -000BD3r 1 D3 .byte %11010011 -000BD4r 1 D4 .byte %11010100 -000BD5r 1 D5 .byte %11010101 -000BD6r 1 D6 .byte %11010110 -000BD7r 1 D7 .byte %11010111 -000BD8r 1 D8 .byte %11011000 -000BD9r 1 D9 .byte %11011001 -000BDAr 1 DA .byte %11011010 -000BDBr 1 DB .byte %11011011 -000BDCr 1 DC .byte %11011100 -000BDDr 1 DD .byte %11011101 -000BDEr 1 DE .byte %11011110 -000BDFr 1 DF .byte %11011111 -000BE0r 1 E0 .byte %11100000 -000BE1r 1 E1 .byte %11100001 -000BE2r 1 E2 .byte %11100010 -000BE3r 1 E3 .byte %11100011 -000BE4r 1 E4 .byte %11100100 -000BE5r 1 E5 .byte %11100101 -000BE6r 1 E6 .byte %11100110 -000BE7r 1 E7 .byte %11100111 -000BE8r 1 E8 .byte %11101000 -000BE9r 1 E9 .byte %11101001 -000BEAr 1 EA .byte %11101010 -000BEBr 1 EB .byte %11101011 -000BECr 1 EC .byte %11101100 -000BEDr 1 ED .byte %11101101 -000BEEr 1 EE .byte %11101110 -000BEFr 1 EF .byte %11101111 -000BF0r 1 F0 .byte %11110000 -000BF1r 1 F1 .byte %11110001 -000BF2r 1 F2 .byte %11110010 -000BF3r 1 F3 .byte %11110011 -000BF4r 1 F4 .byte %11110100 -000BF5r 1 F5 .byte %11110101 -000BF6r 1 F6 .byte %11110110 -000BF7r 1 F7 .byte %11110111 -000BF8r 1 F8 .byte %11111000 -000BF9r 1 F9 .byte %11111001 -000BFAr 1 FA .byte %11111010 -000BFBr 1 FB .byte %11111011 -000BFCr 1 FC .byte %11111100 -000BFDr 1 FD .byte %11111101 -000BFEr 1 FE .byte %11111110 -000BFFr 1 FF .byte %11111111 +000B00r 1 ; binary values, variable length +000B00r 1 00 .byte %0 +000B01r 1 01 .byte %1 +000B02r 1 02 .byte %10 +000B03r 1 03 .byte %11 +000B04r 1 04 .byte %100 +000B05r 1 05 .byte %101 +000B06r 1 06 .byte %110 +000B07r 1 07 .byte %111 +000B08r 1 08 .byte %1000 +000B09r 1 09 .byte %1001 +000B0Ar 1 0A .byte %1010 +000B0Br 1 0B .byte %1011 +000B0Cr 1 0C .byte %1100 +000B0Dr 1 0D .byte %1101 +000B0Er 1 0E .byte %1110 +000B0Fr 1 0F .byte %1111 +000B10r 1 10 .byte %10000 +000B11r 1 11 .byte %10001 +000B12r 1 12 .byte %10010 +000B13r 1 13 .byte %10011 +000B14r 1 14 .byte %10100 +000B15r 1 15 .byte %10101 +000B16r 1 16 .byte %10110 +000B17r 1 17 .byte %10111 +000B18r 1 18 .byte %11000 +000B19r 1 19 .byte %11001 +000B1Ar 1 1A .byte %11010 +000B1Br 1 1B .byte %11011 +000B1Cr 1 1C .byte %11100 +000B1Dr 1 1D .byte %11101 +000B1Er 1 1E .byte %11110 +000B1Fr 1 1F .byte %11111 +000B20r 1 20 .byte %100000 +000B21r 1 21 .byte %100001 +000B22r 1 22 .byte %100010 +000B23r 1 23 .byte %100011 +000B24r 1 24 .byte %100100 +000B25r 1 25 .byte %100101 +000B26r 1 26 .byte %100110 +000B27r 1 27 .byte %100111 +000B28r 1 28 .byte %101000 +000B29r 1 29 .byte %101001 +000B2Ar 1 2A .byte %101010 +000B2Br 1 2B .byte %101011 +000B2Cr 1 2C .byte %101100 +000B2Dr 1 2D .byte %101101 +000B2Er 1 2E .byte %101110 +000B2Fr 1 2F .byte %101111 +000B30r 1 30 .byte %110000 +000B31r 1 31 .byte %110001 +000B32r 1 32 .byte %110010 +000B33r 1 33 .byte %110011 +000B34r 1 34 .byte %110100 +000B35r 1 35 .byte %110101 +000B36r 1 36 .byte %110110 +000B37r 1 37 .byte %110111 +000B38r 1 38 .byte %111000 +000B39r 1 39 .byte %111001 +000B3Ar 1 3A .byte %111010 +000B3Br 1 3B .byte %111011 +000B3Cr 1 3C .byte %111100 +000B3Dr 1 3D .byte %111101 +000B3Er 1 3E .byte %111110 +000B3Fr 1 3F .byte %111111 +000B40r 1 40 .byte %1000000 +000B41r 1 41 .byte %1000001 +000B42r 1 42 .byte %1000010 +000B43r 1 43 .byte %1000011 +000B44r 1 44 .byte %1000100 +000B45r 1 45 .byte %1000101 +000B46r 1 46 .byte %1000110 +000B47r 1 47 .byte %1000111 +000B48r 1 48 .byte %1001000 +000B49r 1 49 .byte %1001001 +000B4Ar 1 4A .byte %1001010 +000B4Br 1 4B .byte %1001011 +000B4Cr 1 4C .byte %1001100 +000B4Dr 1 4D .byte %1001101 +000B4Er 1 4E .byte %1001110 +000B4Fr 1 4F .byte %1001111 +000B50r 1 50 .byte %1010000 +000B51r 1 51 .byte %1010001 +000B52r 1 52 .byte %1010010 +000B53r 1 53 .byte %1010011 +000B54r 1 54 .byte %1010100 +000B55r 1 55 .byte %1010101 +000B56r 1 56 .byte %1010110 +000B57r 1 57 .byte %1010111 +000B58r 1 58 .byte %1011000 +000B59r 1 59 .byte %1011001 +000B5Ar 1 5A .byte %1011010 +000B5Br 1 5B .byte %1011011 +000B5Cr 1 5C .byte %1011100 +000B5Dr 1 5D .byte %1011101 +000B5Er 1 5E .byte %1011110 +000B5Fr 1 5F .byte %1011111 +000B60r 1 60 .byte %1100000 +000B61r 1 61 .byte %1100001 +000B62r 1 62 .byte %1100010 +000B63r 1 63 .byte %1100011 +000B64r 1 64 .byte %1100100 +000B65r 1 65 .byte %1100101 +000B66r 1 66 .byte %1100110 +000B67r 1 67 .byte %1100111 +000B68r 1 68 .byte %1101000 +000B69r 1 69 .byte %1101001 +000B6Ar 1 6A .byte %1101010 +000B6Br 1 6B .byte %1101011 +000B6Cr 1 6C .byte %1101100 +000B6Dr 1 6D .byte %1101101 +000B6Er 1 6E .byte %1101110 +000B6Fr 1 6F .byte %1101111 +000B70r 1 70 .byte %1110000 +000B71r 1 71 .byte %1110001 +000B72r 1 72 .byte %1110010 +000B73r 1 73 .byte %1110011 +000B74r 1 74 .byte %1110100 +000B75r 1 75 .byte %1110101 +000B76r 1 76 .byte %1110110 +000B77r 1 77 .byte %1110111 +000B78r 1 78 .byte %1111000 +000B79r 1 79 .byte %1111001 +000B7Ar 1 7A .byte %1111010 +000B7Br 1 7B .byte %1111011 +000B7Cr 1 7C .byte %1111100 +000B7Dr 1 7D .byte %1111101 +000B7Er 1 7E .byte %1111110 +000B7Fr 1 7F .byte %1111111 +000B80r 1 80 .byte %10000000 +000B81r 1 81 .byte %10000001 +000B82r 1 82 .byte %10000010 +000B83r 1 83 .byte %10000011 +000B84r 1 84 .byte %10000100 +000B85r 1 85 .byte %10000101 +000B86r 1 86 .byte %10000110 +000B87r 1 87 .byte %10000111 +000B88r 1 88 .byte %10001000 +000B89r 1 89 .byte %10001001 +000B8Ar 1 8A .byte %10001010 +000B8Br 1 8B .byte %10001011 +000B8Cr 1 8C .byte %10001100 +000B8Dr 1 8D .byte %10001101 +000B8Er 1 8E .byte %10001110 +000B8Fr 1 8F .byte %10001111 +000B90r 1 90 .byte %10010000 +000B91r 1 91 .byte %10010001 +000B92r 1 92 .byte %10010010 +000B93r 1 93 .byte %10010011 +000B94r 1 94 .byte %10010100 +000B95r 1 95 .byte %10010101 +000B96r 1 96 .byte %10010110 +000B97r 1 97 .byte %10010111 +000B98r 1 98 .byte %10011000 +000B99r 1 99 .byte %10011001 +000B9Ar 1 9A .byte %10011010 +000B9Br 1 9B .byte %10011011 +000B9Cr 1 9C .byte %10011100 +000B9Dr 1 9D .byte %10011101 +000B9Er 1 9E .byte %10011110 +000B9Fr 1 9F .byte %10011111 +000BA0r 1 A0 .byte %10100000 +000BA1r 1 A1 .byte %10100001 +000BA2r 1 A2 .byte %10100010 +000BA3r 1 A3 .byte %10100011 +000BA4r 1 A4 .byte %10100100 +000BA5r 1 A5 .byte %10100101 +000BA6r 1 A6 .byte %10100110 +000BA7r 1 A7 .byte %10100111 +000BA8r 1 A8 .byte %10101000 +000BA9r 1 A9 .byte %10101001 +000BAAr 1 AA .byte %10101010 +000BABr 1 AB .byte %10101011 +000BACr 1 AC .byte %10101100 +000BADr 1 AD .byte %10101101 +000BAEr 1 AE .byte %10101110 +000BAFr 1 AF .byte %10101111 +000BB0r 1 B0 .byte %10110000 +000BB1r 1 B1 .byte %10110001 +000BB2r 1 B2 .byte %10110010 +000BB3r 1 B3 .byte %10110011 +000BB4r 1 B4 .byte %10110100 +000BB5r 1 B5 .byte %10110101 +000BB6r 1 B6 .byte %10110110 +000BB7r 1 B7 .byte %10110111 +000BB8r 1 B8 .byte %10111000 +000BB9r 1 B9 .byte %10111001 +000BBAr 1 BA .byte %10111010 +000BBBr 1 BB .byte %10111011 +000BBCr 1 BC .byte %10111100 +000BBDr 1 BD .byte %10111101 +000BBEr 1 BE .byte %10111110 +000BBFr 1 BF .byte %10111111 +000BC0r 1 C0 .byte %11000000 +000BC1r 1 C1 .byte %11000001 +000BC2r 1 C2 .byte %11000010 +000BC3r 1 C3 .byte %11000011 +000BC4r 1 C4 .byte %11000100 +000BC5r 1 C5 .byte %11000101 +000BC6r 1 C6 .byte %11000110 +000BC7r 1 C7 .byte %11000111 +000BC8r 1 C8 .byte %11001000 +000BC9r 1 C9 .byte %11001001 +000BCAr 1 CA .byte %11001010 +000BCBr 1 CB .byte %11001011 +000BCCr 1 CC .byte %11001100 +000BCDr 1 CD .byte %11001101 +000BCEr 1 CE .byte %11001110 +000BCFr 1 CF .byte %11001111 +000BD0r 1 D0 .byte %11010000 +000BD1r 1 D1 .byte %11010001 +000BD2r 1 D2 .byte %11010010 +000BD3r 1 D3 .byte %11010011 +000BD4r 1 D4 .byte %11010100 +000BD5r 1 D5 .byte %11010101 +000BD6r 1 D6 .byte %11010110 +000BD7r 1 D7 .byte %11010111 +000BD8r 1 D8 .byte %11011000 +000BD9r 1 D9 .byte %11011001 +000BDAr 1 DA .byte %11011010 +000BDBr 1 DB .byte %11011011 +000BDCr 1 DC .byte %11011100 +000BDDr 1 DD .byte %11011101 +000BDEr 1 DE .byte %11011110 +000BDFr 1 DF .byte %11011111 +000BE0r 1 E0 .byte %11100000 +000BE1r 1 E1 .byte %11100001 +000BE2r 1 E2 .byte %11100010 +000BE3r 1 E3 .byte %11100011 +000BE4r 1 E4 .byte %11100100 +000BE5r 1 E5 .byte %11100101 +000BE6r 1 E6 .byte %11100110 +000BE7r 1 E7 .byte %11100111 +000BE8r 1 E8 .byte %11101000 +000BE9r 1 E9 .byte %11101001 +000BEAr 1 EA .byte %11101010 +000BEBr 1 EB .byte %11101011 +000BECr 1 EC .byte %11101100 +000BEDr 1 ED .byte %11101101 +000BEEr 1 EE .byte %11101110 +000BEFr 1 EF .byte %11101111 +000BF0r 1 F0 .byte %11110000 +000BF1r 1 F1 .byte %11110001 +000BF2r 1 F2 .byte %11110010 +000BF3r 1 F3 .byte %11110011 +000BF4r 1 F4 .byte %11110100 +000BF5r 1 F5 .byte %11110101 +000BF6r 1 F6 .byte %11110110 +000BF7r 1 F7 .byte %11110111 +000BF8r 1 F8 .byte %11111000 +000BF9r 1 F9 .byte %11111001 +000BFAr 1 FA .byte %11111010 +000BFBr 1 FB .byte %11111011 +000BFCr 1 FC .byte %11111100 +000BFDr 1 FD .byte %11111101 +000BFEr 1 FE .byte %11111110 +000BFFr 1 FF .byte %11111111 000C00r 1 -000C00r 1 ; binary values, full length -000C00r 1 00 .byte %00000000 -000C01r 1 01 .byte %00000001 -000C02r 1 02 .byte %00000010 -000C03r 1 03 .byte %00000011 -000C04r 1 04 .byte %00000100 -000C05r 1 05 .byte %00000101 -000C06r 1 06 .byte %00000110 -000C07r 1 07 .byte %00000111 -000C08r 1 08 .byte %00001000 -000C09r 1 09 .byte %00001001 -000C0Ar 1 0A .byte %00001010 -000C0Br 1 0B .byte %00001011 -000C0Cr 1 0C .byte %00001100 -000C0Dr 1 0D .byte %00001101 -000C0Er 1 0E .byte %00001110 -000C0Fr 1 0F .byte %00001111 -000C10r 1 10 .byte %00010000 -000C11r 1 11 .byte %00010001 -000C12r 1 12 .byte %00010010 -000C13r 1 13 .byte %00010011 -000C14r 1 14 .byte %00010100 -000C15r 1 15 .byte %00010101 -000C16r 1 16 .byte %00010110 -000C17r 1 17 .byte %00010111 -000C18r 1 18 .byte %00011000 -000C19r 1 19 .byte %00011001 -000C1Ar 1 1A .byte %00011010 -000C1Br 1 1B .byte %00011011 -000C1Cr 1 1C .byte %00011100 -000C1Dr 1 1D .byte %00011101 -000C1Er 1 1E .byte %00011110 -000C1Fr 1 1F .byte %00011111 -000C20r 1 20 .byte %00100000 -000C21r 1 21 .byte %00100001 -000C22r 1 22 .byte %00100010 -000C23r 1 23 .byte %00100011 -000C24r 1 24 .byte %00100100 -000C25r 1 25 .byte %00100101 -000C26r 1 26 .byte %00100110 -000C27r 1 27 .byte %00100111 -000C28r 1 28 .byte %00101000 -000C29r 1 29 .byte %00101001 -000C2Ar 1 2A .byte %00101010 -000C2Br 1 2B .byte %00101011 -000C2Cr 1 2C .byte %00101100 -000C2Dr 1 2D .byte %00101101 -000C2Er 1 2E .byte %00101110 -000C2Fr 1 2F .byte %00101111 -000C30r 1 30 .byte %00110000 -000C31r 1 31 .byte %00110001 -000C32r 1 32 .byte %00110010 -000C33r 1 33 .byte %00110011 -000C34r 1 34 .byte %00110100 -000C35r 1 35 .byte %00110101 -000C36r 1 36 .byte %00110110 -000C37r 1 37 .byte %00110111 -000C38r 1 38 .byte %00111000 -000C39r 1 39 .byte %00111001 -000C3Ar 1 3A .byte %00111010 -000C3Br 1 3B .byte %00111011 -000C3Cr 1 3C .byte %00111100 -000C3Dr 1 3D .byte %00111101 -000C3Er 1 3E .byte %00111110 -000C3Fr 1 3F .byte %00111111 -000C40r 1 40 .byte %01000000 -000C41r 1 41 .byte %01000001 -000C42r 1 42 .byte %01000010 -000C43r 1 43 .byte %01000011 -000C44r 1 44 .byte %01000100 -000C45r 1 45 .byte %01000101 -000C46r 1 46 .byte %01000110 -000C47r 1 47 .byte %01000111 -000C48r 1 48 .byte %01001000 -000C49r 1 49 .byte %01001001 -000C4Ar 1 4A .byte %01001010 -000C4Br 1 4B .byte %01001011 -000C4Cr 1 4C .byte %01001100 -000C4Dr 1 4D .byte %01001101 -000C4Er 1 4E .byte %01001110 -000C4Fr 1 4F .byte %01001111 -000C50r 1 50 .byte %01010000 -000C51r 1 51 .byte %01010001 -000C52r 1 52 .byte %01010010 -000C53r 1 53 .byte %01010011 -000C54r 1 54 .byte %01010100 -000C55r 1 55 .byte %01010101 -000C56r 1 56 .byte %01010110 -000C57r 1 57 .byte %01010111 -000C58r 1 58 .byte %01011000 -000C59r 1 59 .byte %01011001 -000C5Ar 1 5A .byte %01011010 -000C5Br 1 5B .byte %01011011 -000C5Cr 1 5C .byte %01011100 -000C5Dr 1 5D .byte %01011101 -000C5Er 1 5E .byte %01011110 -000C5Fr 1 5F .byte %01011111 -000C60r 1 60 .byte %01100000 -000C61r 1 61 .byte %01100001 -000C62r 1 62 .byte %01100010 -000C63r 1 63 .byte %01100011 -000C64r 1 64 .byte %01100100 -000C65r 1 65 .byte %01100101 -000C66r 1 66 .byte %01100110 -000C67r 1 67 .byte %01100111 -000C68r 1 68 .byte %01101000 -000C69r 1 69 .byte %01101001 -000C6Ar 1 6A .byte %01101010 -000C6Br 1 6B .byte %01101011 -000C6Cr 1 6C .byte %01101100 -000C6Dr 1 6D .byte %01101101 -000C6Er 1 6E .byte %01101110 -000C6Fr 1 6F .byte %01101111 -000C70r 1 70 .byte %01110000 -000C71r 1 71 .byte %01110001 -000C72r 1 72 .byte %01110010 -000C73r 1 73 .byte %01110011 -000C74r 1 74 .byte %01110100 -000C75r 1 75 .byte %01110101 -000C76r 1 76 .byte %01110110 -000C77r 1 77 .byte %01110111 -000C78r 1 78 .byte %01111000 -000C79r 1 79 .byte %01111001 -000C7Ar 1 7A .byte %01111010 -000C7Br 1 7B .byte %01111011 -000C7Cr 1 7C .byte %01111100 -000C7Dr 1 7D .byte %01111101 -000C7Er 1 7E .byte %01111110 -000C7Fr 1 7F .byte %01111111 -000C80r 1 80 .byte %10000000 -000C81r 1 81 .byte %10000001 -000C82r 1 82 .byte %10000010 -000C83r 1 83 .byte %10000011 -000C84r 1 84 .byte %10000100 -000C85r 1 85 .byte %10000101 -000C86r 1 86 .byte %10000110 -000C87r 1 87 .byte %10000111 -000C88r 1 88 .byte %10001000 -000C89r 1 89 .byte %10001001 -000C8Ar 1 8A .byte %10001010 -000C8Br 1 8B .byte %10001011 -000C8Cr 1 8C .byte %10001100 -000C8Dr 1 8D .byte %10001101 -000C8Er 1 8E .byte %10001110 -000C8Fr 1 8F .byte %10001111 -000C90r 1 90 .byte %10010000 -000C91r 1 91 .byte %10010001 -000C92r 1 92 .byte %10010010 -000C93r 1 93 .byte %10010011 -000C94r 1 94 .byte %10010100 -000C95r 1 95 .byte %10010101 -000C96r 1 96 .byte %10010110 -000C97r 1 97 .byte %10010111 -000C98r 1 98 .byte %10011000 -000C99r 1 99 .byte %10011001 -000C9Ar 1 9A .byte %10011010 -000C9Br 1 9B .byte %10011011 -000C9Cr 1 9C .byte %10011100 -000C9Dr 1 9D .byte %10011101 -000C9Er 1 9E .byte %10011110 -000C9Fr 1 9F .byte %10011111 -000CA0r 1 A0 .byte %10100000 -000CA1r 1 A1 .byte %10100001 -000CA2r 1 A2 .byte %10100010 -000CA3r 1 A3 .byte %10100011 -000CA4r 1 A4 .byte %10100100 -000CA5r 1 A5 .byte %10100101 -000CA6r 1 A6 .byte %10100110 -000CA7r 1 A7 .byte %10100111 -000CA8r 1 A8 .byte %10101000 -000CA9r 1 A9 .byte %10101001 -000CAAr 1 AA .byte %10101010 -000CABr 1 AB .byte %10101011 -000CACr 1 AC .byte %10101100 -000CADr 1 AD .byte %10101101 -000CAEr 1 AE .byte %10101110 -000CAFr 1 AF .byte %10101111 -000CB0r 1 B0 .byte %10110000 -000CB1r 1 B1 .byte %10110001 -000CB2r 1 B2 .byte %10110010 -000CB3r 1 B3 .byte %10110011 -000CB4r 1 B4 .byte %10110100 -000CB5r 1 B5 .byte %10110101 -000CB6r 1 B6 .byte %10110110 -000CB7r 1 B7 .byte %10110111 -000CB8r 1 B8 .byte %10111000 -000CB9r 1 B9 .byte %10111001 -000CBAr 1 BA .byte %10111010 -000CBBr 1 BB .byte %10111011 -000CBCr 1 BC .byte %10111100 -000CBDr 1 BD .byte %10111101 -000CBEr 1 BE .byte %10111110 -000CBFr 1 BF .byte %10111111 -000CC0r 1 C0 .byte %11000000 -000CC1r 1 C1 .byte %11000001 -000CC2r 1 C2 .byte %11000010 -000CC3r 1 C3 .byte %11000011 -000CC4r 1 C4 .byte %11000100 -000CC5r 1 C5 .byte %11000101 -000CC6r 1 C6 .byte %11000110 -000CC7r 1 C7 .byte %11000111 -000CC8r 1 C8 .byte %11001000 -000CC9r 1 C9 .byte %11001001 -000CCAr 1 CA .byte %11001010 -000CCBr 1 CB .byte %11001011 -000CCCr 1 CC .byte %11001100 -000CCDr 1 CD .byte %11001101 -000CCEr 1 CE .byte %11001110 -000CCFr 1 CF .byte %11001111 -000CD0r 1 D0 .byte %11010000 -000CD1r 1 D1 .byte %11010001 -000CD2r 1 D2 .byte %11010010 -000CD3r 1 D3 .byte %11010011 -000CD4r 1 D4 .byte %11010100 -000CD5r 1 D5 .byte %11010101 -000CD6r 1 D6 .byte %11010110 -000CD7r 1 D7 .byte %11010111 -000CD8r 1 D8 .byte %11011000 -000CD9r 1 D9 .byte %11011001 -000CDAr 1 DA .byte %11011010 -000CDBr 1 DB .byte %11011011 -000CDCr 1 DC .byte %11011100 -000CDDr 1 DD .byte %11011101 -000CDEr 1 DE .byte %11011110 -000CDFr 1 DF .byte %11011111 -000CE0r 1 E0 .byte %11100000 -000CE1r 1 E1 .byte %11100001 -000CE2r 1 E2 .byte %11100010 -000CE3r 1 E3 .byte %11100011 -000CE4r 1 E4 .byte %11100100 -000CE5r 1 E5 .byte %11100101 -000CE6r 1 E6 .byte %11100110 -000CE7r 1 E7 .byte %11100111 -000CE8r 1 E8 .byte %11101000 -000CE9r 1 E9 .byte %11101001 -000CEAr 1 EA .byte %11101010 -000CEBr 1 EB .byte %11101011 -000CECr 1 EC .byte %11101100 -000CEDr 1 ED .byte %11101101 -000CEEr 1 EE .byte %11101110 -000CEFr 1 EF .byte %11101111 -000CF0r 1 F0 .byte %11110000 -000CF1r 1 F1 .byte %11110001 -000CF2r 1 F2 .byte %11110010 -000CF3r 1 F3 .byte %11110011 -000CF4r 1 F4 .byte %11110100 -000CF5r 1 F5 .byte %11110101 -000CF6r 1 F6 .byte %11110110 -000CF7r 1 F7 .byte %11110111 -000CF8r 1 F8 .byte %11111000 -000CF9r 1 F9 .byte %11111001 -000CFAr 1 FA .byte %11111010 -000CFBr 1 FB .byte %11111011 -000CFCr 1 FC .byte %11111100 -000CFDr 1 FD .byte %11111101 -000CFEr 1 FE .byte %11111110 -000CFFr 1 FF .byte %11111111 +000C00r 1 ; binary values, full length +000C00r 1 00 .byte %00000000 +000C01r 1 01 .byte %00000001 +000C02r 1 02 .byte %00000010 +000C03r 1 03 .byte %00000011 +000C04r 1 04 .byte %00000100 +000C05r 1 05 .byte %00000101 +000C06r 1 06 .byte %00000110 +000C07r 1 07 .byte %00000111 +000C08r 1 08 .byte %00001000 +000C09r 1 09 .byte %00001001 +000C0Ar 1 0A .byte %00001010 +000C0Br 1 0B .byte %00001011 +000C0Cr 1 0C .byte %00001100 +000C0Dr 1 0D .byte %00001101 +000C0Er 1 0E .byte %00001110 +000C0Fr 1 0F .byte %00001111 +000C10r 1 10 .byte %00010000 +000C11r 1 11 .byte %00010001 +000C12r 1 12 .byte %00010010 +000C13r 1 13 .byte %00010011 +000C14r 1 14 .byte %00010100 +000C15r 1 15 .byte %00010101 +000C16r 1 16 .byte %00010110 +000C17r 1 17 .byte %00010111 +000C18r 1 18 .byte %00011000 +000C19r 1 19 .byte %00011001 +000C1Ar 1 1A .byte %00011010 +000C1Br 1 1B .byte %00011011 +000C1Cr 1 1C .byte %00011100 +000C1Dr 1 1D .byte %00011101 +000C1Er 1 1E .byte %00011110 +000C1Fr 1 1F .byte %00011111 +000C20r 1 20 .byte %00100000 +000C21r 1 21 .byte %00100001 +000C22r 1 22 .byte %00100010 +000C23r 1 23 .byte %00100011 +000C24r 1 24 .byte %00100100 +000C25r 1 25 .byte %00100101 +000C26r 1 26 .byte %00100110 +000C27r 1 27 .byte %00100111 +000C28r 1 28 .byte %00101000 +000C29r 1 29 .byte %00101001 +000C2Ar 1 2A .byte %00101010 +000C2Br 1 2B .byte %00101011 +000C2Cr 1 2C .byte %00101100 +000C2Dr 1 2D .byte %00101101 +000C2Er 1 2E .byte %00101110 +000C2Fr 1 2F .byte %00101111 +000C30r 1 30 .byte %00110000 +000C31r 1 31 .byte %00110001 +000C32r 1 32 .byte %00110010 +000C33r 1 33 .byte %00110011 +000C34r 1 34 .byte %00110100 +000C35r 1 35 .byte %00110101 +000C36r 1 36 .byte %00110110 +000C37r 1 37 .byte %00110111 +000C38r 1 38 .byte %00111000 +000C39r 1 39 .byte %00111001 +000C3Ar 1 3A .byte %00111010 +000C3Br 1 3B .byte %00111011 +000C3Cr 1 3C .byte %00111100 +000C3Dr 1 3D .byte %00111101 +000C3Er 1 3E .byte %00111110 +000C3Fr 1 3F .byte %00111111 +000C40r 1 40 .byte %01000000 +000C41r 1 41 .byte %01000001 +000C42r 1 42 .byte %01000010 +000C43r 1 43 .byte %01000011 +000C44r 1 44 .byte %01000100 +000C45r 1 45 .byte %01000101 +000C46r 1 46 .byte %01000110 +000C47r 1 47 .byte %01000111 +000C48r 1 48 .byte %01001000 +000C49r 1 49 .byte %01001001 +000C4Ar 1 4A .byte %01001010 +000C4Br 1 4B .byte %01001011 +000C4Cr 1 4C .byte %01001100 +000C4Dr 1 4D .byte %01001101 +000C4Er 1 4E .byte %01001110 +000C4Fr 1 4F .byte %01001111 +000C50r 1 50 .byte %01010000 +000C51r 1 51 .byte %01010001 +000C52r 1 52 .byte %01010010 +000C53r 1 53 .byte %01010011 +000C54r 1 54 .byte %01010100 +000C55r 1 55 .byte %01010101 +000C56r 1 56 .byte %01010110 +000C57r 1 57 .byte %01010111 +000C58r 1 58 .byte %01011000 +000C59r 1 59 .byte %01011001 +000C5Ar 1 5A .byte %01011010 +000C5Br 1 5B .byte %01011011 +000C5Cr 1 5C .byte %01011100 +000C5Dr 1 5D .byte %01011101 +000C5Er 1 5E .byte %01011110 +000C5Fr 1 5F .byte %01011111 +000C60r 1 60 .byte %01100000 +000C61r 1 61 .byte %01100001 +000C62r 1 62 .byte %01100010 +000C63r 1 63 .byte %01100011 +000C64r 1 64 .byte %01100100 +000C65r 1 65 .byte %01100101 +000C66r 1 66 .byte %01100110 +000C67r 1 67 .byte %01100111 +000C68r 1 68 .byte %01101000 +000C69r 1 69 .byte %01101001 +000C6Ar 1 6A .byte %01101010 +000C6Br 1 6B .byte %01101011 +000C6Cr 1 6C .byte %01101100 +000C6Dr 1 6D .byte %01101101 +000C6Er 1 6E .byte %01101110 +000C6Fr 1 6F .byte %01101111 +000C70r 1 70 .byte %01110000 +000C71r 1 71 .byte %01110001 +000C72r 1 72 .byte %01110010 +000C73r 1 73 .byte %01110011 +000C74r 1 74 .byte %01110100 +000C75r 1 75 .byte %01110101 +000C76r 1 76 .byte %01110110 +000C77r 1 77 .byte %01110111 +000C78r 1 78 .byte %01111000 +000C79r 1 79 .byte %01111001 +000C7Ar 1 7A .byte %01111010 +000C7Br 1 7B .byte %01111011 +000C7Cr 1 7C .byte %01111100 +000C7Dr 1 7D .byte %01111101 +000C7Er 1 7E .byte %01111110 +000C7Fr 1 7F .byte %01111111 +000C80r 1 80 .byte %10000000 +000C81r 1 81 .byte %10000001 +000C82r 1 82 .byte %10000010 +000C83r 1 83 .byte %10000011 +000C84r 1 84 .byte %10000100 +000C85r 1 85 .byte %10000101 +000C86r 1 86 .byte %10000110 +000C87r 1 87 .byte %10000111 +000C88r 1 88 .byte %10001000 +000C89r 1 89 .byte %10001001 +000C8Ar 1 8A .byte %10001010 +000C8Br 1 8B .byte %10001011 +000C8Cr 1 8C .byte %10001100 +000C8Dr 1 8D .byte %10001101 +000C8Er 1 8E .byte %10001110 +000C8Fr 1 8F .byte %10001111 +000C90r 1 90 .byte %10010000 +000C91r 1 91 .byte %10010001 +000C92r 1 92 .byte %10010010 +000C93r 1 93 .byte %10010011 +000C94r 1 94 .byte %10010100 +000C95r 1 95 .byte %10010101 +000C96r 1 96 .byte %10010110 +000C97r 1 97 .byte %10010111 +000C98r 1 98 .byte %10011000 +000C99r 1 99 .byte %10011001 +000C9Ar 1 9A .byte %10011010 +000C9Br 1 9B .byte %10011011 +000C9Cr 1 9C .byte %10011100 +000C9Dr 1 9D .byte %10011101 +000C9Er 1 9E .byte %10011110 +000C9Fr 1 9F .byte %10011111 +000CA0r 1 A0 .byte %10100000 +000CA1r 1 A1 .byte %10100001 +000CA2r 1 A2 .byte %10100010 +000CA3r 1 A3 .byte %10100011 +000CA4r 1 A4 .byte %10100100 +000CA5r 1 A5 .byte %10100101 +000CA6r 1 A6 .byte %10100110 +000CA7r 1 A7 .byte %10100111 +000CA8r 1 A8 .byte %10101000 +000CA9r 1 A9 .byte %10101001 +000CAAr 1 AA .byte %10101010 +000CABr 1 AB .byte %10101011 +000CACr 1 AC .byte %10101100 +000CADr 1 AD .byte %10101101 +000CAEr 1 AE .byte %10101110 +000CAFr 1 AF .byte %10101111 +000CB0r 1 B0 .byte %10110000 +000CB1r 1 B1 .byte %10110001 +000CB2r 1 B2 .byte %10110010 +000CB3r 1 B3 .byte %10110011 +000CB4r 1 B4 .byte %10110100 +000CB5r 1 B5 .byte %10110101 +000CB6r 1 B6 .byte %10110110 +000CB7r 1 B7 .byte %10110111 +000CB8r 1 B8 .byte %10111000 +000CB9r 1 B9 .byte %10111001 +000CBAr 1 BA .byte %10111010 +000CBBr 1 BB .byte %10111011 +000CBCr 1 BC .byte %10111100 +000CBDr 1 BD .byte %10111101 +000CBEr 1 BE .byte %10111110 +000CBFr 1 BF .byte %10111111 +000CC0r 1 C0 .byte %11000000 +000CC1r 1 C1 .byte %11000001 +000CC2r 1 C2 .byte %11000010 +000CC3r 1 C3 .byte %11000011 +000CC4r 1 C4 .byte %11000100 +000CC5r 1 C5 .byte %11000101 +000CC6r 1 C6 .byte %11000110 +000CC7r 1 C7 .byte %11000111 +000CC8r 1 C8 .byte %11001000 +000CC9r 1 C9 .byte %11001001 +000CCAr 1 CA .byte %11001010 +000CCBr 1 CB .byte %11001011 +000CCCr 1 CC .byte %11001100 +000CCDr 1 CD .byte %11001101 +000CCEr 1 CE .byte %11001110 +000CCFr 1 CF .byte %11001111 +000CD0r 1 D0 .byte %11010000 +000CD1r 1 D1 .byte %11010001 +000CD2r 1 D2 .byte %11010010 +000CD3r 1 D3 .byte %11010011 +000CD4r 1 D4 .byte %11010100 +000CD5r 1 D5 .byte %11010101 +000CD6r 1 D6 .byte %11010110 +000CD7r 1 D7 .byte %11010111 +000CD8r 1 D8 .byte %11011000 +000CD9r 1 D9 .byte %11011001 +000CDAr 1 DA .byte %11011010 +000CDBr 1 DB .byte %11011011 +000CDCr 1 DC .byte %11011100 +000CDDr 1 DD .byte %11011101 +000CDEr 1 DE .byte %11011110 +000CDFr 1 DF .byte %11011111 +000CE0r 1 E0 .byte %11100000 +000CE1r 1 E1 .byte %11100001 +000CE2r 1 E2 .byte %11100010 +000CE3r 1 E3 .byte %11100011 +000CE4r 1 E4 .byte %11100100 +000CE5r 1 E5 .byte %11100101 +000CE6r 1 E6 .byte %11100110 +000CE7r 1 E7 .byte %11100111 +000CE8r 1 E8 .byte %11101000 +000CE9r 1 E9 .byte %11101001 +000CEAr 1 EA .byte %11101010 +000CEBr 1 EB .byte %11101011 +000CECr 1 EC .byte %11101100 +000CEDr 1 ED .byte %11101101 +000CEEr 1 EE .byte %11101110 +000CEFr 1 EF .byte %11101111 +000CF0r 1 F0 .byte %11110000 +000CF1r 1 F1 .byte %11110001 +000CF2r 1 F2 .byte %11110010 +000CF3r 1 F3 .byte %11110011 +000CF4r 1 F4 .byte %11110100 +000CF5r 1 F5 .byte %11110101 +000CF6r 1 F6 .byte %11110110 +000CF7r 1 F7 .byte %11110111 +000CF8r 1 F8 .byte %11111000 +000CF9r 1 F9 .byte %11111001 +000CFAr 1 FA .byte %11111010 +000CFBr 1 FB .byte %11111011 +000CFCr 1 FC .byte %11111100 +000CFDr 1 FD .byte %11111101 +000CFEr 1 FE .byte %11111110 +000CFFr 1 FF .byte %11111111 000D00r 1 -000D00r 1 ; some character values -000D00r 1 20 .byte ' ' -000D01r 1 21 .byte '!' -000D02r 1 22 .byte '"' -000D03r 1 23 .byte '#' -000D04r 1 24 .byte '$' -000D05r 1 25 .byte '%' -000D06r 1 26 .byte '&' -000D07r 1 27 .byte ''' -000D08r 1 28 .byte '(' -000D09r 1 29 .byte ')' -000D0Ar 1 2A .byte '*' -000D0Br 1 2B .byte '+' -000D0Cr 1 2C .byte ',' -000D0Dr 1 2D .byte '-' -000D0Er 1 2E .byte '.' -000D0Fr 1 2F .byte '/' -000D10r 1 30 .byte '0' -000D11r 1 31 .byte '1' -000D12r 1 32 .byte '2' -000D13r 1 33 .byte '3' -000D14r 1 34 .byte '4' -000D15r 1 35 .byte '5' -000D16r 1 36 .byte '6' -000D17r 1 37 .byte '7' -000D18r 1 38 .byte '8' -000D19r 1 39 .byte '9' -000D1Ar 1 3A .byte ':' -000D1Br 1 3B .byte ';' -000D1Cr 1 3C .byte '<' -000D1Dr 1 3D .byte '=' -000D1Er 1 3E .byte '>' -000D1Fr 1 3F .byte '?' -000D20r 1 40 .byte '@' -000D21r 1 41 .byte 'A' -000D22r 1 42 .byte 'B' -000D23r 1 43 .byte 'C' -000D24r 1 44 .byte 'D' -000D25r 1 45 .byte 'E' -000D26r 1 46 .byte 'F' -000D27r 1 47 .byte 'G' -000D28r 1 48 .byte 'H' -000D29r 1 49 .byte 'I' -000D2Ar 1 4A .byte 'J' -000D2Br 1 4B .byte 'K' -000D2Cr 1 4C .byte 'L' -000D2Dr 1 4D .byte 'M' -000D2Er 1 4E .byte 'N' -000D2Fr 1 4F .byte 'O' -000D30r 1 50 .byte 'P' -000D31r 1 51 .byte 'Q' -000D32r 1 52 .byte 'R' -000D33r 1 53 .byte 'S' -000D34r 1 54 .byte 'T' -000D35r 1 55 .byte 'U' -000D36r 1 56 .byte 'V' -000D37r 1 57 .byte 'W' -000D38r 1 58 .byte 'X' -000D39r 1 59 .byte 'Y' -000D3Ar 1 5A .byte 'Z' -000D3Br 1 5B .byte '[' -000D3Cr 1 5C .byte '\' -000D3Dr 1 5D .byte ']' -000D3Er 1 5E .byte '^' -000D3Fr 1 5F .byte '_' -000D40r 1 60 .byte '`' -000D41r 1 61 .byte 'a' -000D42r 1 62 .byte 'b' -000D43r 1 63 .byte 'c' -000D44r 1 64 .byte 'd' -000D45r 1 65 .byte 'e' -000D46r 1 66 .byte 'f' -000D47r 1 67 .byte 'g' -000D48r 1 68 .byte 'h' -000D49r 1 69 .byte 'i' -000D4Ar 1 6A .byte 'j' -000D4Br 1 6B .byte 'k' -000D4Cr 1 6C .byte 'l' -000D4Dr 1 6D .byte 'm' -000D4Er 1 6E .byte 'n' -000D4Fr 1 6F .byte 'o' -000D50r 1 70 .byte 'p' -000D51r 1 71 .byte 'q' -000D52r 1 72 .byte 'r' -000D53r 1 73 .byte 's' -000D54r 1 74 .byte 't' -000D55r 1 75 .byte 'u' -000D56r 1 76 .byte 'v' -000D57r 1 77 .byte 'w' -000D58r 1 78 .byte 'x' -000D59r 1 79 .byte 'y' -000D5Ar 1 7A .byte 'z' -000D5Br 1 7B .byte '{' -000D5Cr 1 7C .byte '|' -000D5Dr 1 7D .byte '}' -000D5Er 1 7E .byte '~' +000D00r 1 ; some character values +000D00r 1 20 .byte ' ' +000D01r 1 21 .byte '!' +000D02r 1 22 .byte '"' +000D03r 1 23 .byte '#' +000D04r 1 24 .byte '$' +000D05r 1 25 .byte '%' +000D06r 1 26 .byte '&' +000D07r 1 27 .byte ''' +000D08r 1 28 .byte '(' +000D09r 1 29 .byte ')' +000D0Ar 1 2A .byte '*' +000D0Br 1 2B .byte '+' +000D0Cr 1 2C .byte ',' +000D0Dr 1 2D .byte '-' +000D0Er 1 2E .byte '.' +000D0Fr 1 2F .byte '/' +000D10r 1 30 .byte '0' +000D11r 1 31 .byte '1' +000D12r 1 32 .byte '2' +000D13r 1 33 .byte '3' +000D14r 1 34 .byte '4' +000D15r 1 35 .byte '5' +000D16r 1 36 .byte '6' +000D17r 1 37 .byte '7' +000D18r 1 38 .byte '8' +000D19r 1 39 .byte '9' +000D1Ar 1 3A .byte ':' +000D1Br 1 3B .byte ';' +000D1Cr 1 3C .byte '<' +000D1Dr 1 3D .byte '=' +000D1Er 1 3E .byte '>' +000D1Fr 1 3F .byte '?' +000D20r 1 40 .byte '@' +000D21r 1 41 .byte 'A' +000D22r 1 42 .byte 'B' +000D23r 1 43 .byte 'C' +000D24r 1 44 .byte 'D' +000D25r 1 45 .byte 'E' +000D26r 1 46 .byte 'F' +000D27r 1 47 .byte 'G' +000D28r 1 48 .byte 'H' +000D29r 1 49 .byte 'I' +000D2Ar 1 4A .byte 'J' +000D2Br 1 4B .byte 'K' +000D2Cr 1 4C .byte 'L' +000D2Dr 1 4D .byte 'M' +000D2Er 1 4E .byte 'N' +000D2Fr 1 4F .byte 'O' +000D30r 1 50 .byte 'P' +000D31r 1 51 .byte 'Q' +000D32r 1 52 .byte 'R' +000D33r 1 53 .byte 'S' +000D34r 1 54 .byte 'T' +000D35r 1 55 .byte 'U' +000D36r 1 56 .byte 'V' +000D37r 1 57 .byte 'W' +000D38r 1 58 .byte 'X' +000D39r 1 59 .byte 'Y' +000D3Ar 1 5A .byte 'Z' +000D3Br 1 5B .byte '[' +000D3Cr 1 5C .byte '\' +000D3Dr 1 5D .byte ']' +000D3Er 1 5E .byte '^' +000D3Fr 1 5F .byte '_' +000D40r 1 60 .byte '`' +000D41r 1 61 .byte 'a' +000D42r 1 62 .byte 'b' +000D43r 1 63 .byte 'c' +000D44r 1 64 .byte 'd' +000D45r 1 65 .byte 'e' +000D46r 1 66 .byte 'f' +000D47r 1 67 .byte 'g' +000D48r 1 68 .byte 'h' +000D49r 1 69 .byte 'i' +000D4Ar 1 6A .byte 'j' +000D4Br 1 6B .byte 'k' +000D4Cr 1 6C .byte 'l' +000D4Dr 1 6D .byte 'm' +000D4Er 1 6E .byte 'n' +000D4Fr 1 6F .byte 'o' +000D50r 1 70 .byte 'p' +000D51r 1 71 .byte 'q' +000D52r 1 72 .byte 'r' +000D53r 1 73 .byte 's' +000D54r 1 74 .byte 't' +000D55r 1 75 .byte 'u' +000D56r 1 76 .byte 'v' +000D57r 1 77 .byte 'w' +000D58r 1 78 .byte 'x' +000D59r 1 79 .byte 'y' +000D5Ar 1 7A .byte 'z' +000D5Br 1 7B .byte '{' +000D5Cr 1 7C .byte '|' +000D5Dr 1 7D .byte '}' +000D5Er 1 7E .byte '~' 000D5Fr 1 -000D5Fr 1 ; multiple values on one line, decimal -000D5Fr 1 00 01 02 03 .byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +000D5Fr 1 ; multiple values on one line, decimal +000D5Fr 1 00 01 02 03 .byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 000D63r 1 04 05 06 07 000D67r 1 08 09 0A 0B -000D6Fr 1 10 11 12 13 .byte 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +000D6Fr 1 10 11 12 13 .byte 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 000D73r 1 14 15 16 17 000D77r 1 18 19 1A 1B -000D7Fr 1 20 21 22 23 .byte 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 +000D7Fr 1 20 21 22 23 .byte 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 000D83r 1 24 25 26 27 000D87r 1 28 29 2A 2B -000D8Fr 1 30 31 32 33 .byte 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 +000D8Fr 1 30 31 32 33 .byte 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 000D93r 1 34 35 36 37 000D97r 1 38 39 3A 3B -000D9Fr 1 40 41 42 43 .byte 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 +000D9Fr 1 40 41 42 43 .byte 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 000DA3r 1 44 45 46 47 000DA7r 1 48 49 4A 4B -000DAFr 1 50 51 52 53 .byte 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95 +000DAFr 1 50 51 52 53 .byte 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95 000DB3r 1 54 55 56 57 000DB7r 1 58 59 5A 5B -000DBFr 1 60 61 62 63 .byte 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 +000DBFr 1 60 61 62 63 .byte 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 000DC3r 1 64 65 66 67 000DC7r 1 68 69 6A 6B -000DCFr 1 70 71 72 73 .byte 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +000DCFr 1 70 71 72 73 .byte 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 000DD3r 1 74 75 76 77 000DD7r 1 78 79 7A 7B -000DDFr 1 80 81 82 83 .byte 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +000DDFr 1 80 81 82 83 .byte 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 000DE3r 1 84 85 86 87 000DE7r 1 88 89 8A 8B -000DEFr 1 90 91 92 93 .byte 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 +000DEFr 1 90 91 92 93 .byte 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 000DF3r 1 94 95 96 97 000DF7r 1 98 99 9A 9B -000DFFr 1 A0 A1 A2 A3 .byte 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 +000DFFr 1 A0 A1 A2 A3 .byte 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 000E03r 1 A4 A5 A6 A7 000E07r 1 A8 A9 AA AB -000E0Fr 1 B0 B1 B2 B3 .byte 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 +000E0Fr 1 B0 B1 B2 B3 .byte 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 000E13r 1 B4 B5 B6 B7 000E17r 1 B8 B9 BA BB -000E1Fr 1 C0 C1 C2 C3 .byte 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 +000E1Fr 1 C0 C1 C2 C3 .byte 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 000E23r 1 C4 C5 C6 C7 000E27r 1 C8 C9 CA CB -000E2Fr 1 D0 D1 D2 D3 .byte 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 +000E2Fr 1 D0 D1 D2 D3 .byte 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 000E33r 1 D4 D5 D6 D7 000E37r 1 D8 D9 DA DB -000E3Fr 1 E0 E1 E2 E3 .byte 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 +000E3Fr 1 E0 E1 E2 E3 .byte 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 000E43r 1 E4 E5 E6 E7 000E47r 1 E8 E9 EA EB -000E4Fr 1 F0 F1 F2 F3 .byte 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +000E4Fr 1 F0 F1 F2 F3 .byte 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 000E53r 1 F4 F5 F6 F7 000E57r 1 F8 F9 FA FB 000E5Fr 1 -000E5Fr 1 ; multiple values on one line, hex -000E5Fr 1 00 01 02 03 .byte $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +000E5Fr 1 ; multiple values on one line, hex +000E5Fr 1 00 01 02 03 .byte $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f 000E63r 1 04 05 06 07 000E67r 1 08 09 0A 0B -000E6Fr 1 10 11 12 13 .byte $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +000E6Fr 1 10 11 12 13 .byte $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f 000E73r 1 14 15 16 17 000E77r 1 18 19 1A 1B -000E7Fr 1 20 21 22 23 .byte $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f +000E7Fr 1 20 21 22 23 .byte $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f 000E83r 1 24 25 26 27 000E87r 1 28 29 2A 2B -000E8Fr 1 30 31 32 33 .byte $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f +000E8Fr 1 30 31 32 33 .byte $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f 000E93r 1 34 35 36 37 000E97r 1 38 39 3A 3B -000E9Fr 1 40 41 42 43 .byte $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f +000E9Fr 1 40 41 42 43 .byte $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f 000EA3r 1 44 45 46 47 000EA7r 1 48 49 4A 4B -000EAFr 1 50 51 52 53 .byte $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$5b,$5c,$5d,$5e,$5f +000EAFr 1 50 51 52 53 .byte $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$5b,$5c,$5d,$5e,$5f 000EB3r 1 54 55 56 57 000EB7r 1 58 59 5A 5B -000EBFr 1 60 61 62 63 .byte $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f +000EBFr 1 60 61 62 63 .byte $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f 000EC3r 1 64 65 66 67 000EC7r 1 68 69 6A 6B -000ECFr 1 70 71 72 73 .byte $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +000ECFr 1 70 71 72 73 .byte $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f 000ED3r 1 74 75 76 77 000ED7r 1 78 79 7A 7B -000EDFr 1 80 81 82 83 .byte $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +000EDFr 1 80 81 82 83 .byte $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f 000EE3r 1 84 85 86 87 000EE7r 1 88 89 8A 8B -000EEFr 1 90 91 92 93 .byte $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f +000EEFr 1 90 91 92 93 .byte $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f 000EF3r 1 94 95 96 97 000EF7r 1 98 99 9A 9B -000EFFr 1 A0 A1 A2 A3 .byte $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af +000EFFr 1 A0 A1 A2 A3 .byte $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af 000F03r 1 A4 A5 A6 A7 000F07r 1 A8 A9 AA AB -000F0Fr 1 B0 B1 B2 B3 .byte $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf +000F0Fr 1 B0 B1 B2 B3 .byte $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf 000F13r 1 B4 B5 B6 B7 000F17r 1 B8 B9 BA BB -000F1Fr 1 C0 C1 C2 C3 .byte $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf +000F1Fr 1 C0 C1 C2 C3 .byte $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf 000F23r 1 C4 C5 C6 C7 000F27r 1 C8 C9 CA CB -000F2Fr 1 D0 D1 D2 D3 .byte $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df +000F2Fr 1 D0 D1 D2 D3 .byte $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df 000F33r 1 D4 D5 D6 D7 000F37r 1 D8 D9 DA DB -000F3Fr 1 E0 E1 E2 E3 .byte $e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef +000F3Fr 1 E0 E1 E2 E3 .byte $e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef 000F43r 1 E4 E5 E6 E7 000F47r 1 E8 E9 EA EB -000F4Fr 1 F0 F1 F2 F3 .byte $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +000F4Fr 1 F0 F1 F2 F3 .byte $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff 000F53r 1 F4 F5 F6 F7 000F57r 1 F8 F9 FA FB 000F5Fr 1 -000F5Fr 1 ; multiple values on one line, alternative hex -000F5Fr 1 00 01 02 03 .byte 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +000F5Fr 1 ; multiple values on one line, alternative hex +000F5Fr 1 00 01 02 03 .byte 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh 000F63r 1 04 05 06 07 000F67r 1 08 09 0A 0B -000F6Fr 1 10 11 12 13 .byte 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +000F6Fr 1 10 11 12 13 .byte 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh 000F73r 1 14 15 16 17 000F77r 1 18 19 1A 1B -000F7Fr 1 20 21 22 23 .byte 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,2ah,2bh,2ch,2dh,2eh,2fh +000F7Fr 1 20 21 22 23 .byte 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,2ah,2bh,2ch,2dh,2eh,2fh 000F83r 1 24 25 26 27 000F87r 1 28 29 2A 2B -000F8Fr 1 30 31 32 33 .byte 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,3ah,3bh,3ch,3dh,3eh,3fh +000F8Fr 1 30 31 32 33 .byte 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,3ah,3bh,3ch,3dh,3eh,3fh 000F93r 1 34 35 36 37 000F97r 1 38 39 3A 3B -000F9Fr 1 40 41 42 43 .byte 40h,41h,42h,43h,44h,45h,46h,47h,48h,49h,4ah,4bh,4ch,4dh,4eh,4fh +000F9Fr 1 40 41 42 43 .byte 40h,41h,42h,43h,44h,45h,46h,47h,48h,49h,4ah,4bh,4ch,4dh,4eh,4fh 000FA3r 1 44 45 46 47 000FA7r 1 48 49 4A 4B -000FAFr 1 50 51 52 53 .byte 50h,51h,52h,53h,54h,55h,56h,57h,58h,59h,5ah,5bh,5ch,5dh,5eh,5fh +000FAFr 1 50 51 52 53 .byte 50h,51h,52h,53h,54h,55h,56h,57h,58h,59h,5ah,5bh,5ch,5dh,5eh,5fh 000FB3r 1 54 55 56 57 000FB7r 1 58 59 5A 5B -000FBFr 1 60 61 62 63 .byte 60h,61h,62h,63h,64h,65h,66h,67h,68h,69h,6ah,6bh,6ch,6dh,6eh,6fh +000FBFr 1 60 61 62 63 .byte 60h,61h,62h,63h,64h,65h,66h,67h,68h,69h,6ah,6bh,6ch,6dh,6eh,6fh 000FC3r 1 64 65 66 67 000FC7r 1 68 69 6A 6B -000FCFr 1 70 71 72 73 .byte 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +000FCFr 1 70 71 72 73 .byte 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh 000FD3r 1 74 75 76 77 000FD7r 1 78 79 7A 7B -000FDFr 1 80 81 82 83 .byte 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +000FDFr 1 80 81 82 83 .byte 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh 000FE3r 1 84 85 86 87 000FE7r 1 88 89 8A 8B -000FEFr 1 90 91 92 93 .byte 90h,91h,92h,93h,94h,95h,96h,97h,98h,99h,9ah,9bh,9ch,9dh,9eh,9fh +000FEFr 1 90 91 92 93 .byte 90h,91h,92h,93h,94h,95h,96h,97h,98h,99h,9ah,9bh,9ch,9dh,9eh,9fh 000FF3r 1 94 95 96 97 000FF7r 1 98 99 9A 9B -000FFFr 1 A0 A1 A2 A3 .byte 0a0h,0a1h,0a2h,0a3h,0a4h,0a5h,0a6h,0a7h,0a8h,0a9h,0aah,0abh,0ach,0adh,0aeh,0afh +000FFFr 1 A0 A1 A2 A3 .byte 0a0h,0a1h,0a2h,0a3h,0a4h,0a5h,0a6h,0a7h,0a8h,0a9h,0aah,0abh,0ach,0adh,0aeh,0afh 001003r 1 A4 A5 A6 A7 001007r 1 A8 A9 AA AB -00100Fr 1 B0 B1 B2 B3 .byte 0b0h,0b1h,0b2h,0b3h,0b4h,0b5h,0b6h,0b7h,0b8h,0b9h,0bah,0bbh,0bch,0bdh,0beh,0bfh +00100Fr 1 B0 B1 B2 B3 .byte 0b0h,0b1h,0b2h,0b3h,0b4h,0b5h,0b6h,0b7h,0b8h,0b9h,0bah,0bbh,0bch,0bdh,0beh,0bfh 001013r 1 B4 B5 B6 B7 001017r 1 B8 B9 BA BB -00101Fr 1 C0 C1 C2 C3 .byte 0c0h,0c1h,0c2h,0c3h,0c4h,0c5h,0c6h,0c7h,0c8h,0c9h,0cah,0cbh,0cch,0cdh,0ceh,0cfh +00101Fr 1 C0 C1 C2 C3 .byte 0c0h,0c1h,0c2h,0c3h,0c4h,0c5h,0c6h,0c7h,0c8h,0c9h,0cah,0cbh,0cch,0cdh,0ceh,0cfh 001023r 1 C4 C5 C6 C7 001027r 1 C8 C9 CA CB -00102Fr 1 D0 D1 D2 D3 .byte 0d0h,0d1h,0d2h,0d3h,0d4h,0d5h,0d6h,0d7h,0d8h,0d9h,0dah,0dbh,0dch,0ddh,0deh,0dfh +00102Fr 1 D0 D1 D2 D3 .byte 0d0h,0d1h,0d2h,0d3h,0d4h,0d5h,0d6h,0d7h,0d8h,0d9h,0dah,0dbh,0dch,0ddh,0deh,0dfh 001033r 1 D4 D5 D6 D7 001037r 1 D8 D9 DA DB -00103Fr 1 E0 E1 E2 E3 .byte 0e0h,0e1h,0e2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0e9h,0eah,0ebh,0ech,0edh,0eeh,0efh +00103Fr 1 E0 E1 E2 E3 .byte 0e0h,0e1h,0e2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0e9h,0eah,0ebh,0ech,0edh,0eeh,0efh 001043r 1 E4 E5 E6 E7 001047r 1 E8 E9 EA EB -00104Fr 1 F0 F1 F2 F3 .byte 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +00104Fr 1 F0 F1 F2 F3 .byte 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh 001053r 1 F4 F5 F6 F7 001057r 1 F8 F9 FA FB 00105Fr 1 -00105Fr 1 ; multiple values on one line, characters -00105Fr 1 20 21 22 23 .byte ' ','!','"','#','$','%','&',''','(',')','*','+',',','-','.','/' +00105Fr 1 ; multiple values on one line, characters +00105Fr 1 20 21 22 23 .byte ' ','!','"','#','$','%','&',''','(',')','*','+',',','-','.','/' 001063r 1 24 25 26 27 001067r 1 28 29 2A 2B -00106Fr 1 30 31 32 33 .byte '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?' +00106Fr 1 30 31 32 33 .byte '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?' 001073r 1 34 35 36 37 001077r 1 38 39 3A 3B -00107Fr 1 40 41 42 43 .byte '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O' +00107Fr 1 40 41 42 43 .byte '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O' 001083r 1 44 45 46 47 001087r 1 48 49 4A 4B -00108Fr 1 50 51 52 53 .byte 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_' +00108Fr 1 50 51 52 53 .byte 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_' 001093r 1 54 55 56 57 001097r 1 58 59 5A 5B -00109Fr 1 60 61 62 63 .byte '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o' +00109Fr 1 60 61 62 63 .byte '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o' 0010A3r 1 64 65 66 67 0010A7r 1 68 69 6A 6B -0010AFr 1 70 71 72 73 .byte 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~' +0010AFr 1 70 71 72 73 .byte 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~' 0010B3r 1 74 75 76 77 0010B7r 1 78 79 7A 7B 0010BEr 1 -0010BEr 1 ; some character strings -0010BEr 1 20 21 23 24 .byte " !#$%&'()*+,-." +0010BEr 1 ; some character strings +0010BEr 1 20 21 23 24 .byte " !#$%&'()*+,-." 0010C2r 1 25 26 27 28 0010C6r 1 29 2A 2B 2C -0010CCr 1 30 31 32 33 .byte "0123456789:;<=>" +0010CCr 1 30 31 32 33 .byte "0123456789:;<=>" 0010D0r 1 34 35 36 37 0010D4r 1 38 39 3A 3B -0010DBr 1 40 41 42 43 .byte "@ABCDEFGHIJKLMN" +0010DBr 1 40 41 42 43 .byte "@ABCDEFGHIJKLMN" 0010DFr 1 44 45 46 47 0010E3r 1 48 49 4A 4B -0010EAr 1 50 51 52 53 .byte "PQRSTUVWXYZ[\]^" +0010EAr 1 50 51 52 53 .byte "PQRSTUVWXYZ[\]^" 0010EEr 1 54 55 56 57 0010F2r 1 58 59 5A 5B -0010F9r 1 60 61 62 63 .byte "`abcdefghijklmn" +0010F9r 1 60 61 62 63 .byte "`abcdefghijklmn" 0010FDr 1 64 65 66 67 001101r 1 68 69 6A 6B -001108r 1 70 71 72 73 .byte "pqrstuvwxyz{|}" +001108r 1 70 71 72 73 .byte "pqrstuvwxyz{|}" 00110Cr 1 74 75 76 77 001110r 1 78 79 7A 7B 001116r 1 -001116r 1 ; mix some variants -001116r 1 0B 11 03 11 .byte 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +001116r 1 ; mix some variants +001116r 1 0B 11 03 11 .byte 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh 00111Ar 1 61 62 7A 41 00111Er 1 5A 30 39 AA 001125r 1 diff --git a/test/asm/listing/100-byte.s b/test/asm/listing/100-byte.s index 17c8b7235..aa27c1dab 100644 --- a/test/asm/listing/100-byte.s +++ b/test/asm/listing/100-byte.s @@ -1,3526 +1,3526 @@ ; 2022-06-15 Spiro Trikaliotis - ; upper case pseudo-op - .BYTE 0 - .BYTE 1 - .BYTE 2 - .BYTE 3 - .BYTE 4 - .BYTE 5 - .BYTE 6 - .BYTE 7 - .BYTE 8 - .BYTE 9 - .BYTE 10 - .BYTE 11 - .BYTE 12 - .BYTE 13 - .BYTE 14 - .BYTE 15 - .BYTE 16 - .BYTE 17 - .BYTE 18 - .BYTE 19 - .BYTE 20 - .BYTE 21 - .BYTE 22 - .BYTE 23 - .BYTE 24 - .BYTE 25 - .BYTE 26 - .BYTE 27 - .BYTE 28 - .BYTE 29 - .BYTE 30 - .BYTE 31 - .BYTE 32 - .BYTE 33 - .BYTE 34 - .BYTE 35 - .BYTE 36 - .BYTE 37 - .BYTE 38 - .BYTE 39 - .BYTE 40 - .BYTE 41 - .BYTE 42 - .BYTE 43 - .BYTE 44 - .BYTE 45 - .BYTE 46 - .BYTE 47 - .BYTE 48 - .BYTE 49 - .BYTE 50 - .BYTE 51 - .BYTE 52 - .BYTE 53 - .BYTE 54 - .BYTE 55 - .BYTE 56 - .BYTE 57 - .BYTE 58 - .BYTE 59 - .BYTE 60 - .BYTE 61 - .BYTE 62 - .BYTE 63 - .BYTE 64 - .BYTE 65 - .BYTE 66 - .BYTE 67 - .BYTE 68 - .BYTE 69 - .BYTE 70 - .BYTE 71 - .BYTE 72 - .BYTE 73 - .BYTE 74 - .BYTE 75 - .BYTE 76 - .BYTE 77 - .BYTE 78 - .BYTE 79 - .BYTE 80 - .BYTE 81 - .BYTE 82 - .BYTE 83 - .BYTE 84 - .BYTE 85 - .BYTE 86 - .BYTE 87 - .BYTE 88 - .BYTE 89 - .BYTE 90 - .BYTE 91 - .BYTE 92 - .BYTE 93 - .BYTE 94 - .BYTE 95 - .BYTE 96 - .BYTE 97 - .BYTE 98 - .BYTE 99 - .BYTE 100 - .BYTE 101 - .BYTE 102 - .BYTE 103 - .BYTE 104 - .BYTE 105 - .BYTE 106 - .BYTE 107 - .BYTE 108 - .BYTE 109 - .BYTE 110 - .BYTE 111 - .BYTE 112 - .BYTE 113 - .BYTE 114 - .BYTE 115 - .BYTE 116 - .BYTE 117 - .BYTE 118 - .BYTE 119 - .BYTE 120 - .BYTE 121 - .BYTE 122 - .BYTE 123 - .BYTE 124 - .BYTE 125 - .BYTE 126 - .BYTE 127 - .BYTE 128 - .BYTE 129 - .BYTE 130 - .BYTE 131 - .BYTE 132 - .BYTE 133 - .BYTE 134 - .BYTE 135 - .BYTE 136 - .BYTE 137 - .BYTE 138 - .BYTE 139 - .BYTE 140 - .BYTE 141 - .BYTE 142 - .BYTE 143 - .BYTE 144 - .BYTE 145 - .BYTE 146 - .BYTE 147 - .BYTE 148 - .BYTE 149 - .BYTE 150 - .BYTE 151 - .BYTE 152 - .BYTE 153 - .BYTE 154 - .BYTE 155 - .BYTE 156 - .BYTE 157 - .BYTE 158 - .BYTE 159 - .BYTE 160 - .BYTE 161 - .BYTE 162 - .BYTE 163 - .BYTE 164 - .BYTE 165 - .BYTE 166 - .BYTE 167 - .BYTE 168 - .BYTE 169 - .BYTE 170 - .BYTE 171 - .BYTE 172 - .BYTE 173 - .BYTE 174 - .BYTE 175 - .BYTE 176 - .BYTE 177 - .BYTE 178 - .BYTE 179 - .BYTE 180 - .BYTE 181 - .BYTE 182 - .BYTE 183 - .BYTE 184 - .BYTE 185 - .BYTE 186 - .BYTE 187 - .BYTE 188 - .BYTE 189 - .BYTE 190 - .BYTE 191 - .BYTE 192 - .BYTE 193 - .BYTE 194 - .BYTE 195 - .BYTE 196 - .BYTE 197 - .BYTE 198 - .BYTE 199 - .BYTE 200 - .BYTE 201 - .BYTE 202 - .BYTE 203 - .BYTE 204 - .BYTE 205 - .BYTE 206 - .BYTE 207 - .BYTE 208 - .BYTE 209 - .BYTE 210 - .BYTE 211 - .BYTE 212 - .BYTE 213 - .BYTE 214 - .BYTE 215 - .BYTE 216 - .BYTE 217 - .BYTE 218 - .BYTE 219 - .BYTE 220 - .BYTE 221 - .BYTE 222 - .BYTE 223 - .BYTE 224 - .BYTE 225 - .BYTE 226 - .BYTE 227 - .BYTE 228 - .BYTE 229 - .BYTE 230 - .BYTE 231 - .BYTE 232 - .BYTE 233 - .BYTE 234 - .BYTE 235 - .BYTE 236 - .BYTE 237 - .BYTE 238 - .BYTE 239 - .BYTE 240 - .BYTE 241 - .BYTE 242 - .BYTE 243 - .BYTE 244 - .BYTE 245 - .BYTE 246 - .BYTE 247 - .BYTE 248 - .BYTE 249 - .BYTE 250 - .BYTE 251 - .BYTE 252 - .BYTE 253 - .BYTE 254 - .BYTE 255 + ; upper case pseudo-op + .BYTE 0 + .BYTE 1 + .BYTE 2 + .BYTE 3 + .BYTE 4 + .BYTE 5 + .BYTE 6 + .BYTE 7 + .BYTE 8 + .BYTE 9 + .BYTE 10 + .BYTE 11 + .BYTE 12 + .BYTE 13 + .BYTE 14 + .BYTE 15 + .BYTE 16 + .BYTE 17 + .BYTE 18 + .BYTE 19 + .BYTE 20 + .BYTE 21 + .BYTE 22 + .BYTE 23 + .BYTE 24 + .BYTE 25 + .BYTE 26 + .BYTE 27 + .BYTE 28 + .BYTE 29 + .BYTE 30 + .BYTE 31 + .BYTE 32 + .BYTE 33 + .BYTE 34 + .BYTE 35 + .BYTE 36 + .BYTE 37 + .BYTE 38 + .BYTE 39 + .BYTE 40 + .BYTE 41 + .BYTE 42 + .BYTE 43 + .BYTE 44 + .BYTE 45 + .BYTE 46 + .BYTE 47 + .BYTE 48 + .BYTE 49 + .BYTE 50 + .BYTE 51 + .BYTE 52 + .BYTE 53 + .BYTE 54 + .BYTE 55 + .BYTE 56 + .BYTE 57 + .BYTE 58 + .BYTE 59 + .BYTE 60 + .BYTE 61 + .BYTE 62 + .BYTE 63 + .BYTE 64 + .BYTE 65 + .BYTE 66 + .BYTE 67 + .BYTE 68 + .BYTE 69 + .BYTE 70 + .BYTE 71 + .BYTE 72 + .BYTE 73 + .BYTE 74 + .BYTE 75 + .BYTE 76 + .BYTE 77 + .BYTE 78 + .BYTE 79 + .BYTE 80 + .BYTE 81 + .BYTE 82 + .BYTE 83 + .BYTE 84 + .BYTE 85 + .BYTE 86 + .BYTE 87 + .BYTE 88 + .BYTE 89 + .BYTE 90 + .BYTE 91 + .BYTE 92 + .BYTE 93 + .BYTE 94 + .BYTE 95 + .BYTE 96 + .BYTE 97 + .BYTE 98 + .BYTE 99 + .BYTE 100 + .BYTE 101 + .BYTE 102 + .BYTE 103 + .BYTE 104 + .BYTE 105 + .BYTE 106 + .BYTE 107 + .BYTE 108 + .BYTE 109 + .BYTE 110 + .BYTE 111 + .BYTE 112 + .BYTE 113 + .BYTE 114 + .BYTE 115 + .BYTE 116 + .BYTE 117 + .BYTE 118 + .BYTE 119 + .BYTE 120 + .BYTE 121 + .BYTE 122 + .BYTE 123 + .BYTE 124 + .BYTE 125 + .BYTE 126 + .BYTE 127 + .BYTE 128 + .BYTE 129 + .BYTE 130 + .BYTE 131 + .BYTE 132 + .BYTE 133 + .BYTE 134 + .BYTE 135 + .BYTE 136 + .BYTE 137 + .BYTE 138 + .BYTE 139 + .BYTE 140 + .BYTE 141 + .BYTE 142 + .BYTE 143 + .BYTE 144 + .BYTE 145 + .BYTE 146 + .BYTE 147 + .BYTE 148 + .BYTE 149 + .BYTE 150 + .BYTE 151 + .BYTE 152 + .BYTE 153 + .BYTE 154 + .BYTE 155 + .BYTE 156 + .BYTE 157 + .BYTE 158 + .BYTE 159 + .BYTE 160 + .BYTE 161 + .BYTE 162 + .BYTE 163 + .BYTE 164 + .BYTE 165 + .BYTE 166 + .BYTE 167 + .BYTE 168 + .BYTE 169 + .BYTE 170 + .BYTE 171 + .BYTE 172 + .BYTE 173 + .BYTE 174 + .BYTE 175 + .BYTE 176 + .BYTE 177 + .BYTE 178 + .BYTE 179 + .BYTE 180 + .BYTE 181 + .BYTE 182 + .BYTE 183 + .BYTE 184 + .BYTE 185 + .BYTE 186 + .BYTE 187 + .BYTE 188 + .BYTE 189 + .BYTE 190 + .BYTE 191 + .BYTE 192 + .BYTE 193 + .BYTE 194 + .BYTE 195 + .BYTE 196 + .BYTE 197 + .BYTE 198 + .BYTE 199 + .BYTE 200 + .BYTE 201 + .BYTE 202 + .BYTE 203 + .BYTE 204 + .BYTE 205 + .BYTE 206 + .BYTE 207 + .BYTE 208 + .BYTE 209 + .BYTE 210 + .BYTE 211 + .BYTE 212 + .BYTE 213 + .BYTE 214 + .BYTE 215 + .BYTE 216 + .BYTE 217 + .BYTE 218 + .BYTE 219 + .BYTE 220 + .BYTE 221 + .BYTE 222 + .BYTE 223 + .BYTE 224 + .BYTE 225 + .BYTE 226 + .BYTE 227 + .BYTE 228 + .BYTE 229 + .BYTE 230 + .BYTE 231 + .BYTE 232 + .BYTE 233 + .BYTE 234 + .BYTE 235 + .BYTE 236 + .BYTE 237 + .BYTE 238 + .BYTE 239 + .BYTE 240 + .BYTE 241 + .BYTE 242 + .BYTE 243 + .BYTE 244 + .BYTE 245 + .BYTE 246 + .BYTE 247 + .BYTE 248 + .BYTE 249 + .BYTE 250 + .BYTE 251 + .BYTE 252 + .BYTE 253 + .BYTE 254 + .BYTE 255 - ; lower case pseudo-op - .byte 0 - .byte 1 - .byte 2 - .byte 3 - .byte 4 - .byte 5 - .byte 6 - .byte 7 - .byte 8 - .byte 9 - .byte 10 - .byte 11 - .byte 12 - .byte 13 - .byte 14 - .byte 15 - .byte 16 - .byte 17 - .byte 18 - .byte 19 - .byte 20 - .byte 21 - .byte 22 - .byte 23 - .byte 24 - .byte 25 - .byte 26 - .byte 27 - .byte 28 - .byte 29 - .byte 30 - .byte 31 - .byte 32 - .byte 33 - .byte 34 - .byte 35 - .byte 36 - .byte 37 - .byte 38 - .byte 39 - .byte 40 - .byte 41 - .byte 42 - .byte 43 - .byte 44 - .byte 45 - .byte 46 - .byte 47 - .byte 48 - .byte 49 - .byte 50 - .byte 51 - .byte 52 - .byte 53 - .byte 54 - .byte 55 - .byte 56 - .byte 57 - .byte 58 - .byte 59 - .byte 60 - .byte 61 - .byte 62 - .byte 63 - .byte 64 - .byte 65 - .byte 66 - .byte 67 - .byte 68 - .byte 69 - .byte 70 - .byte 71 - .byte 72 - .byte 73 - .byte 74 - .byte 75 - .byte 76 - .byte 77 - .byte 78 - .byte 79 - .byte 80 - .byte 81 - .byte 82 - .byte 83 - .byte 84 - .byte 85 - .byte 86 - .byte 87 - .byte 88 - .byte 89 - .byte 90 - .byte 91 - .byte 92 - .byte 93 - .byte 94 - .byte 95 - .byte 96 - .byte 97 - .byte 98 - .byte 99 - .byte 100 - .byte 101 - .byte 102 - .byte 103 - .byte 104 - .byte 105 - .byte 106 - .byte 107 - .byte 108 - .byte 109 - .byte 110 - .byte 111 - .byte 112 - .byte 113 - .byte 114 - .byte 115 - .byte 116 - .byte 117 - .byte 118 - .byte 119 - .byte 120 - .byte 121 - .byte 122 - .byte 123 - .byte 124 - .byte 125 - .byte 126 - .byte 127 - .byte 128 - .byte 129 - .byte 130 - .byte 131 - .byte 132 - .byte 133 - .byte 134 - .byte 135 - .byte 136 - .byte 137 - .byte 138 - .byte 139 - .byte 140 - .byte 141 - .byte 142 - .byte 143 - .byte 144 - .byte 145 - .byte 146 - .byte 147 - .byte 148 - .byte 149 - .byte 150 - .byte 151 - .byte 152 - .byte 153 - .byte 154 - .byte 155 - .byte 156 - .byte 157 - .byte 158 - .byte 159 - .byte 160 - .byte 161 - .byte 162 - .byte 163 - .byte 164 - .byte 165 - .byte 166 - .byte 167 - .byte 168 - .byte 169 - .byte 170 - .byte 171 - .byte 172 - .byte 173 - .byte 174 - .byte 175 - .byte 176 - .byte 177 - .byte 178 - .byte 179 - .byte 180 - .byte 181 - .byte 182 - .byte 183 - .byte 184 - .byte 185 - .byte 186 - .byte 187 - .byte 188 - .byte 189 - .byte 190 - .byte 191 - .byte 192 - .byte 193 - .byte 194 - .byte 195 - .byte 196 - .byte 197 - .byte 198 - .byte 199 - .byte 200 - .byte 201 - .byte 202 - .byte 203 - .byte 204 - .byte 205 - .byte 206 - .byte 207 - .byte 208 - .byte 209 - .byte 210 - .byte 211 - .byte 212 - .byte 213 - .byte 214 - .byte 215 - .byte 216 - .byte 217 - .byte 218 - .byte 219 - .byte 220 - .byte 221 - .byte 222 - .byte 223 - .byte 224 - .byte 225 - .byte 226 - .byte 227 - .byte 228 - .byte 229 - .byte 230 - .byte 231 - .byte 232 - .byte 233 - .byte 234 - .byte 235 - .byte 236 - .byte 237 - .byte 238 - .byte 239 - .byte 240 - .byte 241 - .byte 242 - .byte 243 - .byte 244 - .byte 245 - .byte 246 - .byte 247 - .byte 248 - .byte 249 - .byte 250 - .byte 251 - .byte 252 - .byte 253 - .byte 254 - .byte 255 + ; lower case pseudo-op + .byte 0 + .byte 1 + .byte 2 + .byte 3 + .byte 4 + .byte 5 + .byte 6 + .byte 7 + .byte 8 + .byte 9 + .byte 10 + .byte 11 + .byte 12 + .byte 13 + .byte 14 + .byte 15 + .byte 16 + .byte 17 + .byte 18 + .byte 19 + .byte 20 + .byte 21 + .byte 22 + .byte 23 + .byte 24 + .byte 25 + .byte 26 + .byte 27 + .byte 28 + .byte 29 + .byte 30 + .byte 31 + .byte 32 + .byte 33 + .byte 34 + .byte 35 + .byte 36 + .byte 37 + .byte 38 + .byte 39 + .byte 40 + .byte 41 + .byte 42 + .byte 43 + .byte 44 + .byte 45 + .byte 46 + .byte 47 + .byte 48 + .byte 49 + .byte 50 + .byte 51 + .byte 52 + .byte 53 + .byte 54 + .byte 55 + .byte 56 + .byte 57 + .byte 58 + .byte 59 + .byte 60 + .byte 61 + .byte 62 + .byte 63 + .byte 64 + .byte 65 + .byte 66 + .byte 67 + .byte 68 + .byte 69 + .byte 70 + .byte 71 + .byte 72 + .byte 73 + .byte 74 + .byte 75 + .byte 76 + .byte 77 + .byte 78 + .byte 79 + .byte 80 + .byte 81 + .byte 82 + .byte 83 + .byte 84 + .byte 85 + .byte 86 + .byte 87 + .byte 88 + .byte 89 + .byte 90 + .byte 91 + .byte 92 + .byte 93 + .byte 94 + .byte 95 + .byte 96 + .byte 97 + .byte 98 + .byte 99 + .byte 100 + .byte 101 + .byte 102 + .byte 103 + .byte 104 + .byte 105 + .byte 106 + .byte 107 + .byte 108 + .byte 109 + .byte 110 + .byte 111 + .byte 112 + .byte 113 + .byte 114 + .byte 115 + .byte 116 + .byte 117 + .byte 118 + .byte 119 + .byte 120 + .byte 121 + .byte 122 + .byte 123 + .byte 124 + .byte 125 + .byte 126 + .byte 127 + .byte 128 + .byte 129 + .byte 130 + .byte 131 + .byte 132 + .byte 133 + .byte 134 + .byte 135 + .byte 136 + .byte 137 + .byte 138 + .byte 139 + .byte 140 + .byte 141 + .byte 142 + .byte 143 + .byte 144 + .byte 145 + .byte 146 + .byte 147 + .byte 148 + .byte 149 + .byte 150 + .byte 151 + .byte 152 + .byte 153 + .byte 154 + .byte 155 + .byte 156 + .byte 157 + .byte 158 + .byte 159 + .byte 160 + .byte 161 + .byte 162 + .byte 163 + .byte 164 + .byte 165 + .byte 166 + .byte 167 + .byte 168 + .byte 169 + .byte 170 + .byte 171 + .byte 172 + .byte 173 + .byte 174 + .byte 175 + .byte 176 + .byte 177 + .byte 178 + .byte 179 + .byte 180 + .byte 181 + .byte 182 + .byte 183 + .byte 184 + .byte 185 + .byte 186 + .byte 187 + .byte 188 + .byte 189 + .byte 190 + .byte 191 + .byte 192 + .byte 193 + .byte 194 + .byte 195 + .byte 196 + .byte 197 + .byte 198 + .byte 199 + .byte 200 + .byte 201 + .byte 202 + .byte 203 + .byte 204 + .byte 205 + .byte 206 + .byte 207 + .byte 208 + .byte 209 + .byte 210 + .byte 211 + .byte 212 + .byte 213 + .byte 214 + .byte 215 + .byte 216 + .byte 217 + .byte 218 + .byte 219 + .byte 220 + .byte 221 + .byte 222 + .byte 223 + .byte 224 + .byte 225 + .byte 226 + .byte 227 + .byte 228 + .byte 229 + .byte 230 + .byte 231 + .byte 232 + .byte 233 + .byte 234 + .byte 235 + .byte 236 + .byte 237 + .byte 238 + .byte 239 + .byte 240 + .byte 241 + .byte 242 + .byte 243 + .byte 244 + .byte 245 + .byte 246 + .byte 247 + .byte 248 + .byte 249 + .byte 250 + .byte 251 + .byte 252 + .byte 253 + .byte 254 + .byte 255 - ; hex values - .byte $0 - .byte $1 - .byte $2 - .byte $3 - .byte $4 - .byte $5 - .byte $6 - .byte $7 - .byte $8 - .byte $9 - .byte $a - .byte $b - .byte $c - .byte $d - .byte $e - .byte $f - .byte $10 - .byte $11 - .byte $12 - .byte $13 - .byte $14 - .byte $15 - .byte $16 - .byte $17 - .byte $18 - .byte $19 - .byte $1a - .byte $1b - .byte $1c - .byte $1d - .byte $1e - .byte $1f - .byte $20 - .byte $21 - .byte $22 - .byte $23 - .byte $24 - .byte $25 - .byte $26 - .byte $27 - .byte $28 - .byte $29 - .byte $2a - .byte $2b - .byte $2c - .byte $2d - .byte $2e - .byte $2f - .byte $30 - .byte $31 - .byte $32 - .byte $33 - .byte $34 - .byte $35 - .byte $36 - .byte $37 - .byte $38 - .byte $39 - .byte $3a - .byte $3b - .byte $3c - .byte $3d - .byte $3e - .byte $3f - .byte $40 - .byte $41 - .byte $42 - .byte $43 - .byte $44 - .byte $45 - .byte $46 - .byte $47 - .byte $48 - .byte $49 - .byte $4a - .byte $4b - .byte $4c - .byte $4d - .byte $4e - .byte $4f - .byte $50 - .byte $51 - .byte $52 - .byte $53 - .byte $54 - .byte $55 - .byte $56 - .byte $57 - .byte $58 - .byte $59 - .byte $5a - .byte $5b - .byte $5c - .byte $5d - .byte $5e - .byte $5f - .byte $60 - .byte $61 - .byte $62 - .byte $63 - .byte $64 - .byte $65 - .byte $66 - .byte $67 - .byte $68 - .byte $69 - .byte $6a - .byte $6b - .byte $6c - .byte $6d - .byte $6e - .byte $6f - .byte $70 - .byte $71 - .byte $72 - .byte $73 - .byte $74 - .byte $75 - .byte $76 - .byte $77 - .byte $78 - .byte $79 - .byte $7a - .byte $7b - .byte $7c - .byte $7d - .byte $7e - .byte $7f - .byte $80 - .byte $81 - .byte $82 - .byte $83 - .byte $84 - .byte $85 - .byte $86 - .byte $87 - .byte $88 - .byte $89 - .byte $8a - .byte $8b - .byte $8c - .byte $8d - .byte $8e - .byte $8f - .byte $90 - .byte $91 - .byte $92 - .byte $93 - .byte $94 - .byte $95 - .byte $96 - .byte $97 - .byte $98 - .byte $99 - .byte $9a - .byte $9b - .byte $9c - .byte $9d - .byte $9e - .byte $9f - .byte $a0 - .byte $a1 - .byte $a2 - .byte $a3 - .byte $a4 - .byte $a5 - .byte $a6 - .byte $a7 - .byte $a8 - .byte $a9 - .byte $aa - .byte $ab - .byte $ac - .byte $ad - .byte $ae - .byte $af - .byte $b0 - .byte $b1 - .byte $b2 - .byte $b3 - .byte $b4 - .byte $b5 - .byte $b6 - .byte $b7 - .byte $b8 - .byte $b9 - .byte $ba - .byte $bb - .byte $bc - .byte $bd - .byte $be - .byte $bf - .byte $c0 - .byte $c1 - .byte $c2 - .byte $c3 - .byte $c4 - .byte $c5 - .byte $c6 - .byte $c7 - .byte $c8 - .byte $c9 - .byte $ca - .byte $cb - .byte $cc - .byte $cd - .byte $ce - .byte $cf - .byte $d0 - .byte $d1 - .byte $d2 - .byte $d3 - .byte $d4 - .byte $d5 - .byte $d6 - .byte $d7 - .byte $d8 - .byte $d9 - .byte $da - .byte $db - .byte $dc - .byte $dd - .byte $de - .byte $df - .byte $e0 - .byte $e1 - .byte $e2 - .byte $e3 - .byte $e4 - .byte $e5 - .byte $e6 - .byte $e7 - .byte $e8 - .byte $e9 - .byte $ea - .byte $eb - .byte $ec - .byte $ed - .byte $ee - .byte $ef - .byte $f0 - .byte $f1 - .byte $f2 - .byte $f3 - .byte $f4 - .byte $f5 - .byte $f6 - .byte $f7 - .byte $f8 - .byte $f9 - .byte $fa - .byte $fb - .byte $fc - .byte $fd - .byte $fe - .byte $ff + ; hex values + .byte $0 + .byte $1 + .byte $2 + .byte $3 + .byte $4 + .byte $5 + .byte $6 + .byte $7 + .byte $8 + .byte $9 + .byte $a + .byte $b + .byte $c + .byte $d + .byte $e + .byte $f + .byte $10 + .byte $11 + .byte $12 + .byte $13 + .byte $14 + .byte $15 + .byte $16 + .byte $17 + .byte $18 + .byte $19 + .byte $1a + .byte $1b + .byte $1c + .byte $1d + .byte $1e + .byte $1f + .byte $20 + .byte $21 + .byte $22 + .byte $23 + .byte $24 + .byte $25 + .byte $26 + .byte $27 + .byte $28 + .byte $29 + .byte $2a + .byte $2b + .byte $2c + .byte $2d + .byte $2e + .byte $2f + .byte $30 + .byte $31 + .byte $32 + .byte $33 + .byte $34 + .byte $35 + .byte $36 + .byte $37 + .byte $38 + .byte $39 + .byte $3a + .byte $3b + .byte $3c + .byte $3d + .byte $3e + .byte $3f + .byte $40 + .byte $41 + .byte $42 + .byte $43 + .byte $44 + .byte $45 + .byte $46 + .byte $47 + .byte $48 + .byte $49 + .byte $4a + .byte $4b + .byte $4c + .byte $4d + .byte $4e + .byte $4f + .byte $50 + .byte $51 + .byte $52 + .byte $53 + .byte $54 + .byte $55 + .byte $56 + .byte $57 + .byte $58 + .byte $59 + .byte $5a + .byte $5b + .byte $5c + .byte $5d + .byte $5e + .byte $5f + .byte $60 + .byte $61 + .byte $62 + .byte $63 + .byte $64 + .byte $65 + .byte $66 + .byte $67 + .byte $68 + .byte $69 + .byte $6a + .byte $6b + .byte $6c + .byte $6d + .byte $6e + .byte $6f + .byte $70 + .byte $71 + .byte $72 + .byte $73 + .byte $74 + .byte $75 + .byte $76 + .byte $77 + .byte $78 + .byte $79 + .byte $7a + .byte $7b + .byte $7c + .byte $7d + .byte $7e + .byte $7f + .byte $80 + .byte $81 + .byte $82 + .byte $83 + .byte $84 + .byte $85 + .byte $86 + .byte $87 + .byte $88 + .byte $89 + .byte $8a + .byte $8b + .byte $8c + .byte $8d + .byte $8e + .byte $8f + .byte $90 + .byte $91 + .byte $92 + .byte $93 + .byte $94 + .byte $95 + .byte $96 + .byte $97 + .byte $98 + .byte $99 + .byte $9a + .byte $9b + .byte $9c + .byte $9d + .byte $9e + .byte $9f + .byte $a0 + .byte $a1 + .byte $a2 + .byte $a3 + .byte $a4 + .byte $a5 + .byte $a6 + .byte $a7 + .byte $a8 + .byte $a9 + .byte $aa + .byte $ab + .byte $ac + .byte $ad + .byte $ae + .byte $af + .byte $b0 + .byte $b1 + .byte $b2 + .byte $b3 + .byte $b4 + .byte $b5 + .byte $b6 + .byte $b7 + .byte $b8 + .byte $b9 + .byte $ba + .byte $bb + .byte $bc + .byte $bd + .byte $be + .byte $bf + .byte $c0 + .byte $c1 + .byte $c2 + .byte $c3 + .byte $c4 + .byte $c5 + .byte $c6 + .byte $c7 + .byte $c8 + .byte $c9 + .byte $ca + .byte $cb + .byte $cc + .byte $cd + .byte $ce + .byte $cf + .byte $d0 + .byte $d1 + .byte $d2 + .byte $d3 + .byte $d4 + .byte $d5 + .byte $d6 + .byte $d7 + .byte $d8 + .byte $d9 + .byte $da + .byte $db + .byte $dc + .byte $dd + .byte $de + .byte $df + .byte $e0 + .byte $e1 + .byte $e2 + .byte $e3 + .byte $e4 + .byte $e5 + .byte $e6 + .byte $e7 + .byte $e8 + .byte $e9 + .byte $ea + .byte $eb + .byte $ec + .byte $ed + .byte $ee + .byte $ef + .byte $f0 + .byte $f1 + .byte $f2 + .byte $f3 + .byte $f4 + .byte $f5 + .byte $f6 + .byte $f7 + .byte $f8 + .byte $f9 + .byte $fa + .byte $fb + .byte $fc + .byte $fd + .byte $fe + .byte $ff - ; hex values, uppercase - .byte $0 - .byte $1 - .byte $2 - .byte $3 - .byte $4 - .byte $5 - .byte $6 - .byte $7 - .byte $8 - .byte $9 - .byte $A - .byte $B - .byte $C - .byte $D - .byte $E - .byte $F - .byte $10 - .byte $11 - .byte $12 - .byte $13 - .byte $14 - .byte $15 - .byte $16 - .byte $17 - .byte $18 - .byte $19 - .byte $1A - .byte $1B - .byte $1C - .byte $1D - .byte $1E - .byte $1F - .byte $20 - .byte $21 - .byte $22 - .byte $23 - .byte $24 - .byte $25 - .byte $26 - .byte $27 - .byte $28 - .byte $29 - .byte $2A - .byte $2B - .byte $2C - .byte $2D - .byte $2E - .byte $2F - .byte $30 - .byte $31 - .byte $32 - .byte $33 - .byte $34 - .byte $35 - .byte $36 - .byte $37 - .byte $38 - .byte $39 - .byte $3A - .byte $3B - .byte $3C - .byte $3D - .byte $3E - .byte $3F - .byte $40 - .byte $41 - .byte $42 - .byte $43 - .byte $44 - .byte $45 - .byte $46 - .byte $47 - .byte $48 - .byte $49 - .byte $4A - .byte $4B - .byte $4C - .byte $4D - .byte $4E - .byte $4F - .byte $50 - .byte $51 - .byte $52 - .byte $53 - .byte $54 - .byte $55 - .byte $56 - .byte $57 - .byte $58 - .byte $59 - .byte $5A - .byte $5B - .byte $5C - .byte $5D - .byte $5E - .byte $5F - .byte $60 - .byte $61 - .byte $62 - .byte $63 - .byte $64 - .byte $65 - .byte $66 - .byte $67 - .byte $68 - .byte $69 - .byte $6A - .byte $6B - .byte $6C - .byte $6D - .byte $6E - .byte $6F - .byte $70 - .byte $71 - .byte $72 - .byte $73 - .byte $74 - .byte $75 - .byte $76 - .byte $77 - .byte $78 - .byte $79 - .byte $7A - .byte $7B - .byte $7C - .byte $7D - .byte $7E - .byte $7F - .byte $80 - .byte $81 - .byte $82 - .byte $83 - .byte $84 - .byte $85 - .byte $86 - .byte $87 - .byte $88 - .byte $89 - .byte $8A - .byte $8B - .byte $8C - .byte $8D - .byte $8E - .byte $8F - .byte $90 - .byte $91 - .byte $92 - .byte $93 - .byte $94 - .byte $95 - .byte $96 - .byte $97 - .byte $98 - .byte $99 - .byte $9A - .byte $9B - .byte $9C - .byte $9D - .byte $9E - .byte $9F - .byte $A0 - .byte $A1 - .byte $A2 - .byte $A3 - .byte $A4 - .byte $A5 - .byte $A6 - .byte $A7 - .byte $A8 - .byte $A9 - .byte $AA - .byte $AB - .byte $AC - .byte $AD - .byte $AE - .byte $AF - .byte $B0 - .byte $B1 - .byte $B2 - .byte $B3 - .byte $B4 - .byte $B5 - .byte $B6 - .byte $B7 - .byte $B8 - .byte $B9 - .byte $BA - .byte $BB - .byte $BC - .byte $BD - .byte $BE - .byte $BF - .byte $C0 - .byte $C1 - .byte $C2 - .byte $C3 - .byte $C4 - .byte $C5 - .byte $C6 - .byte $C7 - .byte $C8 - .byte $C9 - .byte $CA - .byte $CB - .byte $CC - .byte $CD - .byte $CE - .byte $CF - .byte $D0 - .byte $D1 - .byte $D2 - .byte $D3 - .byte $D4 - .byte $D5 - .byte $D6 - .byte $D7 - .byte $D8 - .byte $D9 - .byte $DA - .byte $DB - .byte $DC - .byte $DD - .byte $DE - .byte $DF - .byte $E0 - .byte $E1 - .byte $E2 - .byte $E3 - .byte $E4 - .byte $E5 - .byte $E6 - .byte $E7 - .byte $E8 - .byte $E9 - .byte $EA - .byte $EB - .byte $EC - .byte $ED - .byte $EE - .byte $EF - .byte $F0 - .byte $F1 - .byte $F2 - .byte $F3 - .byte $F4 - .byte $F5 - .byte $F6 - .byte $F7 - .byte $F8 - .byte $F9 - .byte $FA - .byte $FB - .byte $FC - .byte $FD - .byte $FE - .byte $FF + ; hex values, uppercase + .byte $0 + .byte $1 + .byte $2 + .byte $3 + .byte $4 + .byte $5 + .byte $6 + .byte $7 + .byte $8 + .byte $9 + .byte $A + .byte $B + .byte $C + .byte $D + .byte $E + .byte $F + .byte $10 + .byte $11 + .byte $12 + .byte $13 + .byte $14 + .byte $15 + .byte $16 + .byte $17 + .byte $18 + .byte $19 + .byte $1A + .byte $1B + .byte $1C + .byte $1D + .byte $1E + .byte $1F + .byte $20 + .byte $21 + .byte $22 + .byte $23 + .byte $24 + .byte $25 + .byte $26 + .byte $27 + .byte $28 + .byte $29 + .byte $2A + .byte $2B + .byte $2C + .byte $2D + .byte $2E + .byte $2F + .byte $30 + .byte $31 + .byte $32 + .byte $33 + .byte $34 + .byte $35 + .byte $36 + .byte $37 + .byte $38 + .byte $39 + .byte $3A + .byte $3B + .byte $3C + .byte $3D + .byte $3E + .byte $3F + .byte $40 + .byte $41 + .byte $42 + .byte $43 + .byte $44 + .byte $45 + .byte $46 + .byte $47 + .byte $48 + .byte $49 + .byte $4A + .byte $4B + .byte $4C + .byte $4D + .byte $4E + .byte $4F + .byte $50 + .byte $51 + .byte $52 + .byte $53 + .byte $54 + .byte $55 + .byte $56 + .byte $57 + .byte $58 + .byte $59 + .byte $5A + .byte $5B + .byte $5C + .byte $5D + .byte $5E + .byte $5F + .byte $60 + .byte $61 + .byte $62 + .byte $63 + .byte $64 + .byte $65 + .byte $66 + .byte $67 + .byte $68 + .byte $69 + .byte $6A + .byte $6B + .byte $6C + .byte $6D + .byte $6E + .byte $6F + .byte $70 + .byte $71 + .byte $72 + .byte $73 + .byte $74 + .byte $75 + .byte $76 + .byte $77 + .byte $78 + .byte $79 + .byte $7A + .byte $7B + .byte $7C + .byte $7D + .byte $7E + .byte $7F + .byte $80 + .byte $81 + .byte $82 + .byte $83 + .byte $84 + .byte $85 + .byte $86 + .byte $87 + .byte $88 + .byte $89 + .byte $8A + .byte $8B + .byte $8C + .byte $8D + .byte $8E + .byte $8F + .byte $90 + .byte $91 + .byte $92 + .byte $93 + .byte $94 + .byte $95 + .byte $96 + .byte $97 + .byte $98 + .byte $99 + .byte $9A + .byte $9B + .byte $9C + .byte $9D + .byte $9E + .byte $9F + .byte $A0 + .byte $A1 + .byte $A2 + .byte $A3 + .byte $A4 + .byte $A5 + .byte $A6 + .byte $A7 + .byte $A8 + .byte $A9 + .byte $AA + .byte $AB + .byte $AC + .byte $AD + .byte $AE + .byte $AF + .byte $B0 + .byte $B1 + .byte $B2 + .byte $B3 + .byte $B4 + .byte $B5 + .byte $B6 + .byte $B7 + .byte $B8 + .byte $B9 + .byte $BA + .byte $BB + .byte $BC + .byte $BD + .byte $BE + .byte $BF + .byte $C0 + .byte $C1 + .byte $C2 + .byte $C3 + .byte $C4 + .byte $C5 + .byte $C6 + .byte $C7 + .byte $C8 + .byte $C9 + .byte $CA + .byte $CB + .byte $CC + .byte $CD + .byte $CE + .byte $CF + .byte $D0 + .byte $D1 + .byte $D2 + .byte $D3 + .byte $D4 + .byte $D5 + .byte $D6 + .byte $D7 + .byte $D8 + .byte $D9 + .byte $DA + .byte $DB + .byte $DC + .byte $DD + .byte $DE + .byte $DF + .byte $E0 + .byte $E1 + .byte $E2 + .byte $E3 + .byte $E4 + .byte $E5 + .byte $E6 + .byte $E7 + .byte $E8 + .byte $E9 + .byte $EA + .byte $EB + .byte $EC + .byte $ED + .byte $EE + .byte $EF + .byte $F0 + .byte $F1 + .byte $F2 + .byte $F3 + .byte $F4 + .byte $F5 + .byte $F6 + .byte $F7 + .byte $F8 + .byte $F9 + .byte $FA + .byte $FB + .byte $FC + .byte $FD + .byte $FE + .byte $FF - ; 2-digit hex values - .byte $00 - .byte $01 - .byte $02 - .byte $03 - .byte $04 - .byte $05 - .byte $06 - .byte $07 - .byte $08 - .byte $09 - .byte $0a - .byte $0b - .byte $0c - .byte $0d - .byte $0e - .byte $0f - .byte $10 - .byte $11 - .byte $12 - .byte $13 - .byte $14 - .byte $15 - .byte $16 - .byte $17 - .byte $18 - .byte $19 - .byte $1a - .byte $1b - .byte $1c - .byte $1d - .byte $1e - .byte $1f - .byte $20 - .byte $21 - .byte $22 - .byte $23 - .byte $24 - .byte $25 - .byte $26 - .byte $27 - .byte $28 - .byte $29 - .byte $2a - .byte $2b - .byte $2c - .byte $2d - .byte $2e - .byte $2f - .byte $30 - .byte $31 - .byte $32 - .byte $33 - .byte $34 - .byte $35 - .byte $36 - .byte $37 - .byte $38 - .byte $39 - .byte $3a - .byte $3b - .byte $3c - .byte $3d - .byte $3e - .byte $3f - .byte $40 - .byte $41 - .byte $42 - .byte $43 - .byte $44 - .byte $45 - .byte $46 - .byte $47 - .byte $48 - .byte $49 - .byte $4a - .byte $4b - .byte $4c - .byte $4d - .byte $4e - .byte $4f - .byte $50 - .byte $51 - .byte $52 - .byte $53 - .byte $54 - .byte $55 - .byte $56 - .byte $57 - .byte $58 - .byte $59 - .byte $5a - .byte $5b - .byte $5c - .byte $5d - .byte $5e - .byte $5f - .byte $60 - .byte $61 - .byte $62 - .byte $63 - .byte $64 - .byte $65 - .byte $66 - .byte $67 - .byte $68 - .byte $69 - .byte $6a - .byte $6b - .byte $6c - .byte $6d - .byte $6e - .byte $6f - .byte $70 - .byte $71 - .byte $72 - .byte $73 - .byte $74 - .byte $75 - .byte $76 - .byte $77 - .byte $78 - .byte $79 - .byte $7a - .byte $7b - .byte $7c - .byte $7d - .byte $7e - .byte $7f - .byte $80 - .byte $81 - .byte $82 - .byte $83 - .byte $84 - .byte $85 - .byte $86 - .byte $87 - .byte $88 - .byte $89 - .byte $8a - .byte $8b - .byte $8c - .byte $8d - .byte $8e - .byte $8f - .byte $90 - .byte $91 - .byte $92 - .byte $93 - .byte $94 - .byte $95 - .byte $96 - .byte $97 - .byte $98 - .byte $99 - .byte $9a - .byte $9b - .byte $9c - .byte $9d - .byte $9e - .byte $9f - .byte $a0 - .byte $a1 - .byte $a2 - .byte $a3 - .byte $a4 - .byte $a5 - .byte $a6 - .byte $a7 - .byte $a8 - .byte $a9 - .byte $aa - .byte $ab - .byte $ac - .byte $ad - .byte $ae - .byte $af - .byte $b0 - .byte $b1 - .byte $b2 - .byte $b3 - .byte $b4 - .byte $b5 - .byte $b6 - .byte $b7 - .byte $b8 - .byte $b9 - .byte $ba - .byte $bb - .byte $bc - .byte $bd - .byte $be - .byte $bf - .byte $c0 - .byte $c1 - .byte $c2 - .byte $c3 - .byte $c4 - .byte $c5 - .byte $c6 - .byte $c7 - .byte $c8 - .byte $c9 - .byte $ca - .byte $cb - .byte $cc - .byte $cd - .byte $ce - .byte $cf - .byte $d0 - .byte $d1 - .byte $d2 - .byte $d3 - .byte $d4 - .byte $d5 - .byte $d6 - .byte $d7 - .byte $d8 - .byte $d9 - .byte $da - .byte $db - .byte $dc - .byte $dd - .byte $de - .byte $df - .byte $e0 - .byte $e1 - .byte $e2 - .byte $e3 - .byte $e4 - .byte $e5 - .byte $e6 - .byte $e7 - .byte $e8 - .byte $e9 - .byte $ea - .byte $eb - .byte $ec - .byte $ed - .byte $ee - .byte $ef - .byte $f0 - .byte $f1 - .byte $f2 - .byte $f3 - .byte $f4 - .byte $f5 - .byte $f6 - .byte $f7 - .byte $f8 - .byte $f9 - .byte $fa - .byte $fb - .byte $fc - .byte $fd - .byte $fe - .byte $ff + ; 2-digit hex values + .byte $00 + .byte $01 + .byte $02 + .byte $03 + .byte $04 + .byte $05 + .byte $06 + .byte $07 + .byte $08 + .byte $09 + .byte $0a + .byte $0b + .byte $0c + .byte $0d + .byte $0e + .byte $0f + .byte $10 + .byte $11 + .byte $12 + .byte $13 + .byte $14 + .byte $15 + .byte $16 + .byte $17 + .byte $18 + .byte $19 + .byte $1a + .byte $1b + .byte $1c + .byte $1d + .byte $1e + .byte $1f + .byte $20 + .byte $21 + .byte $22 + .byte $23 + .byte $24 + .byte $25 + .byte $26 + .byte $27 + .byte $28 + .byte $29 + .byte $2a + .byte $2b + .byte $2c + .byte $2d + .byte $2e + .byte $2f + .byte $30 + .byte $31 + .byte $32 + .byte $33 + .byte $34 + .byte $35 + .byte $36 + .byte $37 + .byte $38 + .byte $39 + .byte $3a + .byte $3b + .byte $3c + .byte $3d + .byte $3e + .byte $3f + .byte $40 + .byte $41 + .byte $42 + .byte $43 + .byte $44 + .byte $45 + .byte $46 + .byte $47 + .byte $48 + .byte $49 + .byte $4a + .byte $4b + .byte $4c + .byte $4d + .byte $4e + .byte $4f + .byte $50 + .byte $51 + .byte $52 + .byte $53 + .byte $54 + .byte $55 + .byte $56 + .byte $57 + .byte $58 + .byte $59 + .byte $5a + .byte $5b + .byte $5c + .byte $5d + .byte $5e + .byte $5f + .byte $60 + .byte $61 + .byte $62 + .byte $63 + .byte $64 + .byte $65 + .byte $66 + .byte $67 + .byte $68 + .byte $69 + .byte $6a + .byte $6b + .byte $6c + .byte $6d + .byte $6e + .byte $6f + .byte $70 + .byte $71 + .byte $72 + .byte $73 + .byte $74 + .byte $75 + .byte $76 + .byte $77 + .byte $78 + .byte $79 + .byte $7a + .byte $7b + .byte $7c + .byte $7d + .byte $7e + .byte $7f + .byte $80 + .byte $81 + .byte $82 + .byte $83 + .byte $84 + .byte $85 + .byte $86 + .byte $87 + .byte $88 + .byte $89 + .byte $8a + .byte $8b + .byte $8c + .byte $8d + .byte $8e + .byte $8f + .byte $90 + .byte $91 + .byte $92 + .byte $93 + .byte $94 + .byte $95 + .byte $96 + .byte $97 + .byte $98 + .byte $99 + .byte $9a + .byte $9b + .byte $9c + .byte $9d + .byte $9e + .byte $9f + .byte $a0 + .byte $a1 + .byte $a2 + .byte $a3 + .byte $a4 + .byte $a5 + .byte $a6 + .byte $a7 + .byte $a8 + .byte $a9 + .byte $aa + .byte $ab + .byte $ac + .byte $ad + .byte $ae + .byte $af + .byte $b0 + .byte $b1 + .byte $b2 + .byte $b3 + .byte $b4 + .byte $b5 + .byte $b6 + .byte $b7 + .byte $b8 + .byte $b9 + .byte $ba + .byte $bb + .byte $bc + .byte $bd + .byte $be + .byte $bf + .byte $c0 + .byte $c1 + .byte $c2 + .byte $c3 + .byte $c4 + .byte $c5 + .byte $c6 + .byte $c7 + .byte $c8 + .byte $c9 + .byte $ca + .byte $cb + .byte $cc + .byte $cd + .byte $ce + .byte $cf + .byte $d0 + .byte $d1 + .byte $d2 + .byte $d3 + .byte $d4 + .byte $d5 + .byte $d6 + .byte $d7 + .byte $d8 + .byte $d9 + .byte $da + .byte $db + .byte $dc + .byte $dd + .byte $de + .byte $df + .byte $e0 + .byte $e1 + .byte $e2 + .byte $e3 + .byte $e4 + .byte $e5 + .byte $e6 + .byte $e7 + .byte $e8 + .byte $e9 + .byte $ea + .byte $eb + .byte $ec + .byte $ed + .byte $ee + .byte $ef + .byte $f0 + .byte $f1 + .byte $f2 + .byte $f3 + .byte $f4 + .byte $f5 + .byte $f6 + .byte $f7 + .byte $f8 + .byte $f9 + .byte $fa + .byte $fb + .byte $fc + .byte $fd + .byte $fe + .byte $ff - ; 2-digit hex values, uppercase - .byte $00 - .byte $01 - .byte $02 - .byte $03 - .byte $04 - .byte $05 - .byte $06 - .byte $07 - .byte $08 - .byte $09 - .byte $0A - .byte $0B - .byte $0C - .byte $0D - .byte $0E - .byte $0F - .byte $10 - .byte $11 - .byte $12 - .byte $13 - .byte $14 - .byte $15 - .byte $16 - .byte $17 - .byte $18 - .byte $19 - .byte $1A - .byte $1B - .byte $1C - .byte $1D - .byte $1E - .byte $1F - .byte $20 - .byte $21 - .byte $22 - .byte $23 - .byte $24 - .byte $25 - .byte $26 - .byte $27 - .byte $28 - .byte $29 - .byte $2A - .byte $2B - .byte $2C - .byte $2D - .byte $2E - .byte $2F - .byte $30 - .byte $31 - .byte $32 - .byte $33 - .byte $34 - .byte $35 - .byte $36 - .byte $37 - .byte $38 - .byte $39 - .byte $3A - .byte $3B - .byte $3C - .byte $3D - .byte $3E - .byte $3F - .byte $40 - .byte $41 - .byte $42 - .byte $43 - .byte $44 - .byte $45 - .byte $46 - .byte $47 - .byte $48 - .byte $49 - .byte $4A - .byte $4B - .byte $4C - .byte $4D - .byte $4E - .byte $4F - .byte $50 - .byte $51 - .byte $52 - .byte $53 - .byte $54 - .byte $55 - .byte $56 - .byte $57 - .byte $58 - .byte $59 - .byte $5A - .byte $5B - .byte $5C - .byte $5D - .byte $5E - .byte $5F - .byte $60 - .byte $61 - .byte $62 - .byte $63 - .byte $64 - .byte $65 - .byte $66 - .byte $67 - .byte $68 - .byte $69 - .byte $6A - .byte $6B - .byte $6C - .byte $6D - .byte $6E - .byte $6F - .byte $70 - .byte $71 - .byte $72 - .byte $73 - .byte $74 - .byte $75 - .byte $76 - .byte $77 - .byte $78 - .byte $79 - .byte $7A - .byte $7B - .byte $7C - .byte $7D - .byte $7E - .byte $7F - .byte $80 - .byte $81 - .byte $82 - .byte $83 - .byte $84 - .byte $85 - .byte $86 - .byte $87 - .byte $88 - .byte $89 - .byte $8A - .byte $8B - .byte $8C - .byte $8D - .byte $8E - .byte $8F - .byte $90 - .byte $91 - .byte $92 - .byte $93 - .byte $94 - .byte $95 - .byte $96 - .byte $97 - .byte $98 - .byte $99 - .byte $9A - .byte $9B - .byte $9C - .byte $9D - .byte $9E - .byte $9F - .byte $A0 - .byte $A1 - .byte $A2 - .byte $A3 - .byte $A4 - .byte $A5 - .byte $A6 - .byte $A7 - .byte $A8 - .byte $A9 - .byte $AA - .byte $AB - .byte $AC - .byte $AD - .byte $AE - .byte $AF - .byte $B0 - .byte $B1 - .byte $B2 - .byte $B3 - .byte $B4 - .byte $B5 - .byte $B6 - .byte $B7 - .byte $B8 - .byte $B9 - .byte $BA - .byte $BB - .byte $BC - .byte $BD - .byte $BE - .byte $BF - .byte $C0 - .byte $C1 - .byte $C2 - .byte $C3 - .byte $C4 - .byte $C5 - .byte $C6 - .byte $C7 - .byte $C8 - .byte $C9 - .byte $CA - .byte $CB - .byte $CC - .byte $CD - .byte $CE - .byte $CF - .byte $D0 - .byte $D1 - .byte $D2 - .byte $D3 - .byte $D4 - .byte $D5 - .byte $D6 - .byte $D7 - .byte $D8 - .byte $D9 - .byte $DA - .byte $DB - .byte $DC - .byte $DD - .byte $DE - .byte $DF - .byte $E0 - .byte $E1 - .byte $E2 - .byte $E3 - .byte $E4 - .byte $E5 - .byte $E6 - .byte $E7 - .byte $E8 - .byte $E9 - .byte $EA - .byte $EB - .byte $EC - .byte $ED - .byte $EE - .byte $EF - .byte $F0 - .byte $F1 - .byte $F2 - .byte $F3 - .byte $F4 - .byte $F5 - .byte $F6 - .byte $F7 - .byte $F8 - .byte $F9 - .byte $FA - .byte $FB - .byte $FC - .byte $FD - .byte $FE - .byte $FF + ; 2-digit hex values, uppercase + .byte $00 + .byte $01 + .byte $02 + .byte $03 + .byte $04 + .byte $05 + .byte $06 + .byte $07 + .byte $08 + .byte $09 + .byte $0A + .byte $0B + .byte $0C + .byte $0D + .byte $0E + .byte $0F + .byte $10 + .byte $11 + .byte $12 + .byte $13 + .byte $14 + .byte $15 + .byte $16 + .byte $17 + .byte $18 + .byte $19 + .byte $1A + .byte $1B + .byte $1C + .byte $1D + .byte $1E + .byte $1F + .byte $20 + .byte $21 + .byte $22 + .byte $23 + .byte $24 + .byte $25 + .byte $26 + .byte $27 + .byte $28 + .byte $29 + .byte $2A + .byte $2B + .byte $2C + .byte $2D + .byte $2E + .byte $2F + .byte $30 + .byte $31 + .byte $32 + .byte $33 + .byte $34 + .byte $35 + .byte $36 + .byte $37 + .byte $38 + .byte $39 + .byte $3A + .byte $3B + .byte $3C + .byte $3D + .byte $3E + .byte $3F + .byte $40 + .byte $41 + .byte $42 + .byte $43 + .byte $44 + .byte $45 + .byte $46 + .byte $47 + .byte $48 + .byte $49 + .byte $4A + .byte $4B + .byte $4C + .byte $4D + .byte $4E + .byte $4F + .byte $50 + .byte $51 + .byte $52 + .byte $53 + .byte $54 + .byte $55 + .byte $56 + .byte $57 + .byte $58 + .byte $59 + .byte $5A + .byte $5B + .byte $5C + .byte $5D + .byte $5E + .byte $5F + .byte $60 + .byte $61 + .byte $62 + .byte $63 + .byte $64 + .byte $65 + .byte $66 + .byte $67 + .byte $68 + .byte $69 + .byte $6A + .byte $6B + .byte $6C + .byte $6D + .byte $6E + .byte $6F + .byte $70 + .byte $71 + .byte $72 + .byte $73 + .byte $74 + .byte $75 + .byte $76 + .byte $77 + .byte $78 + .byte $79 + .byte $7A + .byte $7B + .byte $7C + .byte $7D + .byte $7E + .byte $7F + .byte $80 + .byte $81 + .byte $82 + .byte $83 + .byte $84 + .byte $85 + .byte $86 + .byte $87 + .byte $88 + .byte $89 + .byte $8A + .byte $8B + .byte $8C + .byte $8D + .byte $8E + .byte $8F + .byte $90 + .byte $91 + .byte $92 + .byte $93 + .byte $94 + .byte $95 + .byte $96 + .byte $97 + .byte $98 + .byte $99 + .byte $9A + .byte $9B + .byte $9C + .byte $9D + .byte $9E + .byte $9F + .byte $A0 + .byte $A1 + .byte $A2 + .byte $A3 + .byte $A4 + .byte $A5 + .byte $A6 + .byte $A7 + .byte $A8 + .byte $A9 + .byte $AA + .byte $AB + .byte $AC + .byte $AD + .byte $AE + .byte $AF + .byte $B0 + .byte $B1 + .byte $B2 + .byte $B3 + .byte $B4 + .byte $B5 + .byte $B6 + .byte $B7 + .byte $B8 + .byte $B9 + .byte $BA + .byte $BB + .byte $BC + .byte $BD + .byte $BE + .byte $BF + .byte $C0 + .byte $C1 + .byte $C2 + .byte $C3 + .byte $C4 + .byte $C5 + .byte $C6 + .byte $C7 + .byte $C8 + .byte $C9 + .byte $CA + .byte $CB + .byte $CC + .byte $CD + .byte $CE + .byte $CF + .byte $D0 + .byte $D1 + .byte $D2 + .byte $D3 + .byte $D4 + .byte $D5 + .byte $D6 + .byte $D7 + .byte $D8 + .byte $D9 + .byte $DA + .byte $DB + .byte $DC + .byte $DD + .byte $DE + .byte $DF + .byte $E0 + .byte $E1 + .byte $E2 + .byte $E3 + .byte $E4 + .byte $E5 + .byte $E6 + .byte $E7 + .byte $E8 + .byte $E9 + .byte $EA + .byte $EB + .byte $EC + .byte $ED + .byte $EE + .byte $EF + .byte $F0 + .byte $F1 + .byte $F2 + .byte $F3 + .byte $F4 + .byte $F5 + .byte $F6 + .byte $F7 + .byte $F8 + .byte $F9 + .byte $FA + .byte $FB + .byte $FC + .byte $FD + .byte $FE + .byte $FF - ; alternative hex values - .byte 0h - .byte 1h - .byte 2h - .byte 3h - .byte 4h - .byte 5h - .byte 6h - .byte 7h - .byte 8h - .byte 9h - .byte 0ah - .byte 0bh - .byte 0ch - .byte 0dh - .byte 0eh - .byte 0fh - .byte 10h - .byte 11h - .byte 12h - .byte 13h - .byte 14h - .byte 15h - .byte 16h - .byte 17h - .byte 18h - .byte 19h - .byte 1ah - .byte 1bh - .byte 1ch - .byte 1dh - .byte 1eh - .byte 1fh - .byte 20h - .byte 21h - .byte 22h - .byte 23h - .byte 24h - .byte 25h - .byte 26h - .byte 27h - .byte 28h - .byte 29h - .byte 2ah - .byte 2bh - .byte 2ch - .byte 2dh - .byte 2eh - .byte 2fh - .byte 30h - .byte 31h - .byte 32h - .byte 33h - .byte 34h - .byte 35h - .byte 36h - .byte 37h - .byte 38h - .byte 39h - .byte 3ah - .byte 3bh - .byte 3ch - .byte 3dh - .byte 3eh - .byte 3fh - .byte 40h - .byte 41h - .byte 42h - .byte 43h - .byte 44h - .byte 45h - .byte 46h - .byte 47h - .byte 48h - .byte 49h - .byte 4ah - .byte 4bh - .byte 4ch - .byte 4dh - .byte 4eh - .byte 4fh - .byte 50h - .byte 51h - .byte 52h - .byte 53h - .byte 54h - .byte 55h - .byte 56h - .byte 57h - .byte 58h - .byte 59h - .byte 5ah - .byte 5bh - .byte 5ch - .byte 5dh - .byte 5eh - .byte 5fh - .byte 60h - .byte 61h - .byte 62h - .byte 63h - .byte 64h - .byte 65h - .byte 66h - .byte 67h - .byte 68h - .byte 69h - .byte 6ah - .byte 6bh - .byte 6ch - .byte 6dh - .byte 6eh - .byte 6fh - .byte 70h - .byte 71h - .byte 72h - .byte 73h - .byte 74h - .byte 75h - .byte 76h - .byte 77h - .byte 78h - .byte 79h - .byte 7ah - .byte 7bh - .byte 7ch - .byte 7dh - .byte 7eh - .byte 7fh - .byte 80h - .byte 81h - .byte 82h - .byte 83h - .byte 84h - .byte 85h - .byte 86h - .byte 87h - .byte 88h - .byte 89h - .byte 8ah - .byte 8bh - .byte 8ch - .byte 8dh - .byte 8eh - .byte 8fh - .byte 90h - .byte 91h - .byte 92h - .byte 93h - .byte 94h - .byte 95h - .byte 96h - .byte 97h - .byte 98h - .byte 99h - .byte 9ah - .byte 9bh - .byte 9ch - .byte 9dh - .byte 9eh - .byte 9fh - .byte 0a0h - .byte 0a1h - .byte 0a2h - .byte 0a3h - .byte 0a4h - .byte 0a5h - .byte 0a6h - .byte 0a7h - .byte 0a8h - .byte 0a9h - .byte 0aah - .byte 0abh - .byte 0ach - .byte 0adh - .byte 0aeh - .byte 0afh - .byte 0b0h - .byte 0b1h - .byte 0b2h - .byte 0b3h - .byte 0b4h - .byte 0b5h - .byte 0b6h - .byte 0b7h - .byte 0b8h - .byte 0b9h - .byte 0bah - .byte 0bbh - .byte 0bch - .byte 0bdh - .byte 0beh - .byte 0bfh - .byte 0c0h - .byte 0c1h - .byte 0c2h - .byte 0c3h - .byte 0c4h - .byte 0c5h - .byte 0c6h - .byte 0c7h - .byte 0c8h - .byte 0c9h - .byte 0cah - .byte 0cbh - .byte 0cch - .byte 0cdh - .byte 0ceh - .byte 0cfh - .byte 0d0h - .byte 0d1h - .byte 0d2h - .byte 0d3h - .byte 0d4h - .byte 0d5h - .byte 0d6h - .byte 0d7h - .byte 0d8h - .byte 0d9h - .byte 0dah - .byte 0dbh - .byte 0dch - .byte 0ddh - .byte 0deh - .byte 0dfh - .byte 0e0h - .byte 0e1h - .byte 0e2h - .byte 0e3h - .byte 0e4h - .byte 0e5h - .byte 0e6h - .byte 0e7h - .byte 0e8h - .byte 0e9h - .byte 0eah - .byte 0ebh - .byte 0ech - .byte 0edh - .byte 0eeh - .byte 0efh - .byte 0f0h - .byte 0f1h - .byte 0f2h - .byte 0f3h - .byte 0f4h - .byte 0f5h - .byte 0f6h - .byte 0f7h - .byte 0f8h - .byte 0f9h - .byte 0fah - .byte 0fbh - .byte 0fch - .byte 0fdh - .byte 0feh - .byte 0ffh + ; alternative hex values + .byte 0h + .byte 1h + .byte 2h + .byte 3h + .byte 4h + .byte 5h + .byte 6h + .byte 7h + .byte 8h + .byte 9h + .byte 0ah + .byte 0bh + .byte 0ch + .byte 0dh + .byte 0eh + .byte 0fh + .byte 10h + .byte 11h + .byte 12h + .byte 13h + .byte 14h + .byte 15h + .byte 16h + .byte 17h + .byte 18h + .byte 19h + .byte 1ah + .byte 1bh + .byte 1ch + .byte 1dh + .byte 1eh + .byte 1fh + .byte 20h + .byte 21h + .byte 22h + .byte 23h + .byte 24h + .byte 25h + .byte 26h + .byte 27h + .byte 28h + .byte 29h + .byte 2ah + .byte 2bh + .byte 2ch + .byte 2dh + .byte 2eh + .byte 2fh + .byte 30h + .byte 31h + .byte 32h + .byte 33h + .byte 34h + .byte 35h + .byte 36h + .byte 37h + .byte 38h + .byte 39h + .byte 3ah + .byte 3bh + .byte 3ch + .byte 3dh + .byte 3eh + .byte 3fh + .byte 40h + .byte 41h + .byte 42h + .byte 43h + .byte 44h + .byte 45h + .byte 46h + .byte 47h + .byte 48h + .byte 49h + .byte 4ah + .byte 4bh + .byte 4ch + .byte 4dh + .byte 4eh + .byte 4fh + .byte 50h + .byte 51h + .byte 52h + .byte 53h + .byte 54h + .byte 55h + .byte 56h + .byte 57h + .byte 58h + .byte 59h + .byte 5ah + .byte 5bh + .byte 5ch + .byte 5dh + .byte 5eh + .byte 5fh + .byte 60h + .byte 61h + .byte 62h + .byte 63h + .byte 64h + .byte 65h + .byte 66h + .byte 67h + .byte 68h + .byte 69h + .byte 6ah + .byte 6bh + .byte 6ch + .byte 6dh + .byte 6eh + .byte 6fh + .byte 70h + .byte 71h + .byte 72h + .byte 73h + .byte 74h + .byte 75h + .byte 76h + .byte 77h + .byte 78h + .byte 79h + .byte 7ah + .byte 7bh + .byte 7ch + .byte 7dh + .byte 7eh + .byte 7fh + .byte 80h + .byte 81h + .byte 82h + .byte 83h + .byte 84h + .byte 85h + .byte 86h + .byte 87h + .byte 88h + .byte 89h + .byte 8ah + .byte 8bh + .byte 8ch + .byte 8dh + .byte 8eh + .byte 8fh + .byte 90h + .byte 91h + .byte 92h + .byte 93h + .byte 94h + .byte 95h + .byte 96h + .byte 97h + .byte 98h + .byte 99h + .byte 9ah + .byte 9bh + .byte 9ch + .byte 9dh + .byte 9eh + .byte 9fh + .byte 0a0h + .byte 0a1h + .byte 0a2h + .byte 0a3h + .byte 0a4h + .byte 0a5h + .byte 0a6h + .byte 0a7h + .byte 0a8h + .byte 0a9h + .byte 0aah + .byte 0abh + .byte 0ach + .byte 0adh + .byte 0aeh + .byte 0afh + .byte 0b0h + .byte 0b1h + .byte 0b2h + .byte 0b3h + .byte 0b4h + .byte 0b5h + .byte 0b6h + .byte 0b7h + .byte 0b8h + .byte 0b9h + .byte 0bah + .byte 0bbh + .byte 0bch + .byte 0bdh + .byte 0beh + .byte 0bfh + .byte 0c0h + .byte 0c1h + .byte 0c2h + .byte 0c3h + .byte 0c4h + .byte 0c5h + .byte 0c6h + .byte 0c7h + .byte 0c8h + .byte 0c9h + .byte 0cah + .byte 0cbh + .byte 0cch + .byte 0cdh + .byte 0ceh + .byte 0cfh + .byte 0d0h + .byte 0d1h + .byte 0d2h + .byte 0d3h + .byte 0d4h + .byte 0d5h + .byte 0d6h + .byte 0d7h + .byte 0d8h + .byte 0d9h + .byte 0dah + .byte 0dbh + .byte 0dch + .byte 0ddh + .byte 0deh + .byte 0dfh + .byte 0e0h + .byte 0e1h + .byte 0e2h + .byte 0e3h + .byte 0e4h + .byte 0e5h + .byte 0e6h + .byte 0e7h + .byte 0e8h + .byte 0e9h + .byte 0eah + .byte 0ebh + .byte 0ech + .byte 0edh + .byte 0eeh + .byte 0efh + .byte 0f0h + .byte 0f1h + .byte 0f2h + .byte 0f3h + .byte 0f4h + .byte 0f5h + .byte 0f6h + .byte 0f7h + .byte 0f8h + .byte 0f9h + .byte 0fah + .byte 0fbh + .byte 0fch + .byte 0fdh + .byte 0feh + .byte 0ffh - ; alternative hex values, uppercase - .byte 0h - .byte 1h - .byte 2h - .byte 3h - .byte 4h - .byte 5h - .byte 6h - .byte 7h - .byte 8h - .byte 9h - .byte 0Ah - .byte 0Bh - .byte 0Ch - .byte 0Dh - .byte 0Eh - .byte 0Fh - .byte 10h - .byte 11h - .byte 12h - .byte 13h - .byte 14h - .byte 15h - .byte 16h - .byte 17h - .byte 18h - .byte 19h - .byte 1Ah - .byte 1Bh - .byte 1Ch - .byte 1Dh - .byte 1Eh - .byte 1Fh - .byte 20h - .byte 21h - .byte 22h - .byte 23h - .byte 24h - .byte 25h - .byte 26h - .byte 27h - .byte 28h - .byte 29h - .byte 2Ah - .byte 2Bh - .byte 2Ch - .byte 2Dh - .byte 2Eh - .byte 2Fh - .byte 30h - .byte 31h - .byte 32h - .byte 33h - .byte 34h - .byte 35h - .byte 36h - .byte 37h - .byte 38h - .byte 39h - .byte 3Ah - .byte 3Bh - .byte 3Ch - .byte 3Dh - .byte 3Eh - .byte 3Fh - .byte 40h - .byte 41h - .byte 42h - .byte 43h - .byte 44h - .byte 45h - .byte 46h - .byte 47h - .byte 48h - .byte 49h - .byte 4Ah - .byte 4Bh - .byte 4Ch - .byte 4Dh - .byte 4Eh - .byte 4Fh - .byte 50h - .byte 51h - .byte 52h - .byte 53h - .byte 54h - .byte 55h - .byte 56h - .byte 57h - .byte 58h - .byte 59h - .byte 5Ah - .byte 5Bh - .byte 5Ch - .byte 5Dh - .byte 5Eh - .byte 5Fh - .byte 60h - .byte 61h - .byte 62h - .byte 63h - .byte 64h - .byte 65h - .byte 66h - .byte 67h - .byte 68h - .byte 69h - .byte 6Ah - .byte 6Bh - .byte 6Ch - .byte 6Dh - .byte 6Eh - .byte 6Fh - .byte 70h - .byte 71h - .byte 72h - .byte 73h - .byte 74h - .byte 75h - .byte 76h - .byte 77h - .byte 78h - .byte 79h - .byte 7Ah - .byte 7Bh - .byte 7Ch - .byte 7Dh - .byte 7Eh - .byte 7Fh - .byte 80h - .byte 81h - .byte 82h - .byte 83h - .byte 84h - .byte 85h - .byte 86h - .byte 87h - .byte 88h - .byte 89h - .byte 8Ah - .byte 8Bh - .byte 8Ch - .byte 8Dh - .byte 8Eh - .byte 8Fh - .byte 90h - .byte 91h - .byte 92h - .byte 93h - .byte 94h - .byte 95h - .byte 96h - .byte 97h - .byte 98h - .byte 99h - .byte 9Ah - .byte 9Bh - .byte 9Ch - .byte 9Dh - .byte 9Eh - .byte 9Fh - .byte 0A0h - .byte 0A1h - .byte 0A2h - .byte 0A3h - .byte 0A4h - .byte 0A5h - .byte 0A6h - .byte 0A7h - .byte 0A8h - .byte 0A9h - .byte 0AAh - .byte 0ABh - .byte 0ACh - .byte 0ADh - .byte 0AEh - .byte 0AFh - .byte 0B0h - .byte 0B1h - .byte 0B2h - .byte 0B3h - .byte 0B4h - .byte 0B5h - .byte 0B6h - .byte 0B7h - .byte 0B8h - .byte 0B9h - .byte 0BAh - .byte 0BBh - .byte 0BCh - .byte 0BDh - .byte 0BEh - .byte 0BFh - .byte 0C0h - .byte 0C1h - .byte 0C2h - .byte 0C3h - .byte 0C4h - .byte 0C5h - .byte 0C6h - .byte 0C7h - .byte 0C8h - .byte 0C9h - .byte 0CAh - .byte 0CBh - .byte 0CCh - .byte 0CDh - .byte 0CEh - .byte 0CFh - .byte 0D0h - .byte 0D1h - .byte 0D2h - .byte 0D3h - .byte 0D4h - .byte 0D5h - .byte 0D6h - .byte 0D7h - .byte 0D8h - .byte 0D9h - .byte 0DAh - .byte 0DBh - .byte 0DCh - .byte 0DDh - .byte 0DEh - .byte 0DFh - .byte 0E0h - .byte 0E1h - .byte 0E2h - .byte 0E3h - .byte 0E4h - .byte 0E5h - .byte 0E6h - .byte 0E7h - .byte 0E8h - .byte 0E9h - .byte 0EAh - .byte 0EBh - .byte 0ECh - .byte 0EDh - .byte 0EEh - .byte 0EFh - .byte 0F0h - .byte 0F1h - .byte 0F2h - .byte 0F3h - .byte 0F4h - .byte 0F5h - .byte 0F6h - .byte 0F7h - .byte 0F8h - .byte 0F9h - .byte 0FAh - .byte 0FBh - .byte 0FCh - .byte 0FDh - .byte 0FEh - .byte 0FFh + ; alternative hex values, uppercase + .byte 0h + .byte 1h + .byte 2h + .byte 3h + .byte 4h + .byte 5h + .byte 6h + .byte 7h + .byte 8h + .byte 9h + .byte 0Ah + .byte 0Bh + .byte 0Ch + .byte 0Dh + .byte 0Eh + .byte 0Fh + .byte 10h + .byte 11h + .byte 12h + .byte 13h + .byte 14h + .byte 15h + .byte 16h + .byte 17h + .byte 18h + .byte 19h + .byte 1Ah + .byte 1Bh + .byte 1Ch + .byte 1Dh + .byte 1Eh + .byte 1Fh + .byte 20h + .byte 21h + .byte 22h + .byte 23h + .byte 24h + .byte 25h + .byte 26h + .byte 27h + .byte 28h + .byte 29h + .byte 2Ah + .byte 2Bh + .byte 2Ch + .byte 2Dh + .byte 2Eh + .byte 2Fh + .byte 30h + .byte 31h + .byte 32h + .byte 33h + .byte 34h + .byte 35h + .byte 36h + .byte 37h + .byte 38h + .byte 39h + .byte 3Ah + .byte 3Bh + .byte 3Ch + .byte 3Dh + .byte 3Eh + .byte 3Fh + .byte 40h + .byte 41h + .byte 42h + .byte 43h + .byte 44h + .byte 45h + .byte 46h + .byte 47h + .byte 48h + .byte 49h + .byte 4Ah + .byte 4Bh + .byte 4Ch + .byte 4Dh + .byte 4Eh + .byte 4Fh + .byte 50h + .byte 51h + .byte 52h + .byte 53h + .byte 54h + .byte 55h + .byte 56h + .byte 57h + .byte 58h + .byte 59h + .byte 5Ah + .byte 5Bh + .byte 5Ch + .byte 5Dh + .byte 5Eh + .byte 5Fh + .byte 60h + .byte 61h + .byte 62h + .byte 63h + .byte 64h + .byte 65h + .byte 66h + .byte 67h + .byte 68h + .byte 69h + .byte 6Ah + .byte 6Bh + .byte 6Ch + .byte 6Dh + .byte 6Eh + .byte 6Fh + .byte 70h + .byte 71h + .byte 72h + .byte 73h + .byte 74h + .byte 75h + .byte 76h + .byte 77h + .byte 78h + .byte 79h + .byte 7Ah + .byte 7Bh + .byte 7Ch + .byte 7Dh + .byte 7Eh + .byte 7Fh + .byte 80h + .byte 81h + .byte 82h + .byte 83h + .byte 84h + .byte 85h + .byte 86h + .byte 87h + .byte 88h + .byte 89h + .byte 8Ah + .byte 8Bh + .byte 8Ch + .byte 8Dh + .byte 8Eh + .byte 8Fh + .byte 90h + .byte 91h + .byte 92h + .byte 93h + .byte 94h + .byte 95h + .byte 96h + .byte 97h + .byte 98h + .byte 99h + .byte 9Ah + .byte 9Bh + .byte 9Ch + .byte 9Dh + .byte 9Eh + .byte 9Fh + .byte 0A0h + .byte 0A1h + .byte 0A2h + .byte 0A3h + .byte 0A4h + .byte 0A5h + .byte 0A6h + .byte 0A7h + .byte 0A8h + .byte 0A9h + .byte 0AAh + .byte 0ABh + .byte 0ACh + .byte 0ADh + .byte 0AEh + .byte 0AFh + .byte 0B0h + .byte 0B1h + .byte 0B2h + .byte 0B3h + .byte 0B4h + .byte 0B5h + .byte 0B6h + .byte 0B7h + .byte 0B8h + .byte 0B9h + .byte 0BAh + .byte 0BBh + .byte 0BCh + .byte 0BDh + .byte 0BEh + .byte 0BFh + .byte 0C0h + .byte 0C1h + .byte 0C2h + .byte 0C3h + .byte 0C4h + .byte 0C5h + .byte 0C6h + .byte 0C7h + .byte 0C8h + .byte 0C9h + .byte 0CAh + .byte 0CBh + .byte 0CCh + .byte 0CDh + .byte 0CEh + .byte 0CFh + .byte 0D0h + .byte 0D1h + .byte 0D2h + .byte 0D3h + .byte 0D4h + .byte 0D5h + .byte 0D6h + .byte 0D7h + .byte 0D8h + .byte 0D9h + .byte 0DAh + .byte 0DBh + .byte 0DCh + .byte 0DDh + .byte 0DEh + .byte 0DFh + .byte 0E0h + .byte 0E1h + .byte 0E2h + .byte 0E3h + .byte 0E4h + .byte 0E5h + .byte 0E6h + .byte 0E7h + .byte 0E8h + .byte 0E9h + .byte 0EAh + .byte 0EBh + .byte 0ECh + .byte 0EDh + .byte 0EEh + .byte 0EFh + .byte 0F0h + .byte 0F1h + .byte 0F2h + .byte 0F3h + .byte 0F4h + .byte 0F5h + .byte 0F6h + .byte 0F7h + .byte 0F8h + .byte 0F9h + .byte 0FAh + .byte 0FBh + .byte 0FCh + .byte 0FDh + .byte 0FEh + .byte 0FFh - ; alternative 2-digit hex values - .byte 00h - .byte 01h - .byte 02h - .byte 03h - .byte 04h - .byte 05h - .byte 06h - .byte 07h - .byte 08h - .byte 09h - .byte 0ah - .byte 0bh - .byte 0ch - .byte 0dh - .byte 0eh - .byte 0fh - .byte 10h - .byte 11h - .byte 12h - .byte 13h - .byte 14h - .byte 15h - .byte 16h - .byte 17h - .byte 18h - .byte 19h - .byte 1ah - .byte 1bh - .byte 1ch - .byte 1dh - .byte 1eh - .byte 1fh - .byte 20h - .byte 21h - .byte 22h - .byte 23h - .byte 24h - .byte 25h - .byte 26h - .byte 27h - .byte 28h - .byte 29h - .byte 2ah - .byte 2bh - .byte 2ch - .byte 2dh - .byte 2eh - .byte 2fh - .byte 30h - .byte 31h - .byte 32h - .byte 33h - .byte 34h - .byte 35h - .byte 36h - .byte 37h - .byte 38h - .byte 39h - .byte 3ah - .byte 3bh - .byte 3ch - .byte 3dh - .byte 3eh - .byte 3fh - .byte 40h - .byte 41h - .byte 42h - .byte 43h - .byte 44h - .byte 45h - .byte 46h - .byte 47h - .byte 48h - .byte 49h - .byte 4ah - .byte 4bh - .byte 4ch - .byte 4dh - .byte 4eh - .byte 4fh - .byte 50h - .byte 51h - .byte 52h - .byte 53h - .byte 54h - .byte 55h - .byte 56h - .byte 57h - .byte 58h - .byte 59h - .byte 5ah - .byte 5bh - .byte 5ch - .byte 5dh - .byte 5eh - .byte 5fh - .byte 60h - .byte 61h - .byte 62h - .byte 63h - .byte 64h - .byte 65h - .byte 66h - .byte 67h - .byte 68h - .byte 69h - .byte 6ah - .byte 6bh - .byte 6ch - .byte 6dh - .byte 6eh - .byte 6fh - .byte 70h - .byte 71h - .byte 72h - .byte 73h - .byte 74h - .byte 75h - .byte 76h - .byte 77h - .byte 78h - .byte 79h - .byte 7ah - .byte 7bh - .byte 7ch - .byte 7dh - .byte 7eh - .byte 7fh - .byte 80h - .byte 81h - .byte 82h - .byte 83h - .byte 84h - .byte 85h - .byte 86h - .byte 87h - .byte 88h - .byte 89h - .byte 8ah - .byte 8bh - .byte 8ch - .byte 8dh - .byte 8eh - .byte 8fh - .byte 90h - .byte 91h - .byte 92h - .byte 93h - .byte 94h - .byte 95h - .byte 96h - .byte 97h - .byte 98h - .byte 99h - .byte 9ah - .byte 9bh - .byte 9ch - .byte 9dh - .byte 9eh - .byte 9fh - .byte 0a0h - .byte 0a1h - .byte 0a2h - .byte 0a3h - .byte 0a4h - .byte 0a5h - .byte 0a6h - .byte 0a7h - .byte 0a8h - .byte 0a9h - .byte 0aah - .byte 0abh - .byte 0ach - .byte 0adh - .byte 0aeh - .byte 0afh - .byte 0b0h - .byte 0b1h - .byte 0b2h - .byte 0b3h - .byte 0b4h - .byte 0b5h - .byte 0b6h - .byte 0b7h - .byte 0b8h - .byte 0b9h - .byte 0bah - .byte 0bbh - .byte 0bch - .byte 0bdh - .byte 0beh - .byte 0bfh - .byte 0c0h - .byte 0c1h - .byte 0c2h - .byte 0c3h - .byte 0c4h - .byte 0c5h - .byte 0c6h - .byte 0c7h - .byte 0c8h - .byte 0c9h - .byte 0cah - .byte 0cbh - .byte 0cch - .byte 0cdh - .byte 0ceh - .byte 0cfh - .byte 0d0h - .byte 0d1h - .byte 0d2h - .byte 0d3h - .byte 0d4h - .byte 0d5h - .byte 0d6h - .byte 0d7h - .byte 0d8h - .byte 0d9h - .byte 0dah - .byte 0dbh - .byte 0dch - .byte 0ddh - .byte 0deh - .byte 0dfh - .byte 0e0h - .byte 0e1h - .byte 0e2h - .byte 0e3h - .byte 0e4h - .byte 0e5h - .byte 0e6h - .byte 0e7h - .byte 0e8h - .byte 0e9h - .byte 0eah - .byte 0ebh - .byte 0ech - .byte 0edh - .byte 0eeh - .byte 0efh - .byte 0f0h - .byte 0f1h - .byte 0f2h - .byte 0f3h - .byte 0f4h - .byte 0f5h - .byte 0f6h - .byte 0f7h - .byte 0f8h - .byte 0f9h - .byte 0fah - .byte 0fbh - .byte 0fch - .byte 0fdh - .byte 0feh - .byte 0ffh + ; alternative 2-digit hex values + .byte 00h + .byte 01h + .byte 02h + .byte 03h + .byte 04h + .byte 05h + .byte 06h + .byte 07h + .byte 08h + .byte 09h + .byte 0ah + .byte 0bh + .byte 0ch + .byte 0dh + .byte 0eh + .byte 0fh + .byte 10h + .byte 11h + .byte 12h + .byte 13h + .byte 14h + .byte 15h + .byte 16h + .byte 17h + .byte 18h + .byte 19h + .byte 1ah + .byte 1bh + .byte 1ch + .byte 1dh + .byte 1eh + .byte 1fh + .byte 20h + .byte 21h + .byte 22h + .byte 23h + .byte 24h + .byte 25h + .byte 26h + .byte 27h + .byte 28h + .byte 29h + .byte 2ah + .byte 2bh + .byte 2ch + .byte 2dh + .byte 2eh + .byte 2fh + .byte 30h + .byte 31h + .byte 32h + .byte 33h + .byte 34h + .byte 35h + .byte 36h + .byte 37h + .byte 38h + .byte 39h + .byte 3ah + .byte 3bh + .byte 3ch + .byte 3dh + .byte 3eh + .byte 3fh + .byte 40h + .byte 41h + .byte 42h + .byte 43h + .byte 44h + .byte 45h + .byte 46h + .byte 47h + .byte 48h + .byte 49h + .byte 4ah + .byte 4bh + .byte 4ch + .byte 4dh + .byte 4eh + .byte 4fh + .byte 50h + .byte 51h + .byte 52h + .byte 53h + .byte 54h + .byte 55h + .byte 56h + .byte 57h + .byte 58h + .byte 59h + .byte 5ah + .byte 5bh + .byte 5ch + .byte 5dh + .byte 5eh + .byte 5fh + .byte 60h + .byte 61h + .byte 62h + .byte 63h + .byte 64h + .byte 65h + .byte 66h + .byte 67h + .byte 68h + .byte 69h + .byte 6ah + .byte 6bh + .byte 6ch + .byte 6dh + .byte 6eh + .byte 6fh + .byte 70h + .byte 71h + .byte 72h + .byte 73h + .byte 74h + .byte 75h + .byte 76h + .byte 77h + .byte 78h + .byte 79h + .byte 7ah + .byte 7bh + .byte 7ch + .byte 7dh + .byte 7eh + .byte 7fh + .byte 80h + .byte 81h + .byte 82h + .byte 83h + .byte 84h + .byte 85h + .byte 86h + .byte 87h + .byte 88h + .byte 89h + .byte 8ah + .byte 8bh + .byte 8ch + .byte 8dh + .byte 8eh + .byte 8fh + .byte 90h + .byte 91h + .byte 92h + .byte 93h + .byte 94h + .byte 95h + .byte 96h + .byte 97h + .byte 98h + .byte 99h + .byte 9ah + .byte 9bh + .byte 9ch + .byte 9dh + .byte 9eh + .byte 9fh + .byte 0a0h + .byte 0a1h + .byte 0a2h + .byte 0a3h + .byte 0a4h + .byte 0a5h + .byte 0a6h + .byte 0a7h + .byte 0a8h + .byte 0a9h + .byte 0aah + .byte 0abh + .byte 0ach + .byte 0adh + .byte 0aeh + .byte 0afh + .byte 0b0h + .byte 0b1h + .byte 0b2h + .byte 0b3h + .byte 0b4h + .byte 0b5h + .byte 0b6h + .byte 0b7h + .byte 0b8h + .byte 0b9h + .byte 0bah + .byte 0bbh + .byte 0bch + .byte 0bdh + .byte 0beh + .byte 0bfh + .byte 0c0h + .byte 0c1h + .byte 0c2h + .byte 0c3h + .byte 0c4h + .byte 0c5h + .byte 0c6h + .byte 0c7h + .byte 0c8h + .byte 0c9h + .byte 0cah + .byte 0cbh + .byte 0cch + .byte 0cdh + .byte 0ceh + .byte 0cfh + .byte 0d0h + .byte 0d1h + .byte 0d2h + .byte 0d3h + .byte 0d4h + .byte 0d5h + .byte 0d6h + .byte 0d7h + .byte 0d8h + .byte 0d9h + .byte 0dah + .byte 0dbh + .byte 0dch + .byte 0ddh + .byte 0deh + .byte 0dfh + .byte 0e0h + .byte 0e1h + .byte 0e2h + .byte 0e3h + .byte 0e4h + .byte 0e5h + .byte 0e6h + .byte 0e7h + .byte 0e8h + .byte 0e9h + .byte 0eah + .byte 0ebh + .byte 0ech + .byte 0edh + .byte 0eeh + .byte 0efh + .byte 0f0h + .byte 0f1h + .byte 0f2h + .byte 0f3h + .byte 0f4h + .byte 0f5h + .byte 0f6h + .byte 0f7h + .byte 0f8h + .byte 0f9h + .byte 0fah + .byte 0fbh + .byte 0fch + .byte 0fdh + .byte 0feh + .byte 0ffh - ; alternative 2-digit hex values, uppercase - .byte 00h - .byte 01h - .byte 02h - .byte 03h - .byte 04h - .byte 05h - .byte 06h - .byte 07h - .byte 08h - .byte 09h - .byte 0Ah - .byte 0Bh - .byte 0Ch - .byte 0Dh - .byte 0Eh - .byte 0Fh - .byte 10h - .byte 11h - .byte 12h - .byte 13h - .byte 14h - .byte 15h - .byte 16h - .byte 17h - .byte 18h - .byte 19h - .byte 1Ah - .byte 1Bh - .byte 1Ch - .byte 1Dh - .byte 1Eh - .byte 1Fh - .byte 20h - .byte 21h - .byte 22h - .byte 23h - .byte 24h - .byte 25h - .byte 26h - .byte 27h - .byte 28h - .byte 29h - .byte 2Ah - .byte 2Bh - .byte 2Ch - .byte 2Dh - .byte 2Eh - .byte 2Fh - .byte 30h - .byte 31h - .byte 32h - .byte 33h - .byte 34h - .byte 35h - .byte 36h - .byte 37h - .byte 38h - .byte 39h - .byte 3Ah - .byte 3Bh - .byte 3Ch - .byte 3Dh - .byte 3Eh - .byte 3Fh - .byte 40h - .byte 41h - .byte 42h - .byte 43h - .byte 44h - .byte 45h - .byte 46h - .byte 47h - .byte 48h - .byte 49h - .byte 4Ah - .byte 4Bh - .byte 4Ch - .byte 4Dh - .byte 4Eh - .byte 4Fh - .byte 50h - .byte 51h - .byte 52h - .byte 53h - .byte 54h - .byte 55h - .byte 56h - .byte 57h - .byte 58h - .byte 59h - .byte 5Ah - .byte 5Bh - .byte 5Ch - .byte 5Dh - .byte 5Eh - .byte 5Fh - .byte 60h - .byte 61h - .byte 62h - .byte 63h - .byte 64h - .byte 65h - .byte 66h - .byte 67h - .byte 68h - .byte 69h - .byte 6Ah - .byte 6Bh - .byte 6Ch - .byte 6Dh - .byte 6Eh - .byte 6Fh - .byte 70h - .byte 71h - .byte 72h - .byte 73h - .byte 74h - .byte 75h - .byte 76h - .byte 77h - .byte 78h - .byte 79h - .byte 7Ah - .byte 7Bh - .byte 7Ch - .byte 7Dh - .byte 7Eh - .byte 7Fh - .byte 80h - .byte 81h - .byte 82h - .byte 83h - .byte 84h - .byte 85h - .byte 86h - .byte 87h - .byte 88h - .byte 89h - .byte 8Ah - .byte 8Bh - .byte 8Ch - .byte 8Dh - .byte 8Eh - .byte 8Fh - .byte 90h - .byte 91h - .byte 92h - .byte 93h - .byte 94h - .byte 95h - .byte 96h - .byte 97h - .byte 98h - .byte 99h - .byte 9Ah - .byte 9Bh - .byte 9Ch - .byte 9Dh - .byte 9Eh - .byte 9Fh - .byte 0A0h - .byte 0A1h - .byte 0A2h - .byte 0A3h - .byte 0A4h - .byte 0A5h - .byte 0A6h - .byte 0A7h - .byte 0A8h - .byte 0A9h - .byte 0AAh - .byte 0ABh - .byte 0ACh - .byte 0ADh - .byte 0AEh - .byte 0AFh - .byte 0B0h - .byte 0B1h - .byte 0B2h - .byte 0B3h - .byte 0B4h - .byte 0B5h - .byte 0B6h - .byte 0B7h - .byte 0B8h - .byte 0B9h - .byte 0BAh - .byte 0BBh - .byte 0BCh - .byte 0BDh - .byte 0BEh - .byte 0BFh - .byte 0C0h - .byte 0C1h - .byte 0C2h - .byte 0C3h - .byte 0C4h - .byte 0C5h - .byte 0C6h - .byte 0C7h - .byte 0C8h - .byte 0C9h - .byte 0CAh - .byte 0CBh - .byte 0CCh - .byte 0CDh - .byte 0CEh - .byte 0CFh - .byte 0D0h - .byte 0D1h - .byte 0D2h - .byte 0D3h - .byte 0D4h - .byte 0D5h - .byte 0D6h - .byte 0D7h - .byte 0D8h - .byte 0D9h - .byte 0DAh - .byte 0DBh - .byte 0DCh - .byte 0DDh - .byte 0DEh - .byte 0DFh - .byte 0E0h - .byte 0E1h - .byte 0E2h - .byte 0E3h - .byte 0E4h - .byte 0E5h - .byte 0E6h - .byte 0E7h - .byte 0E8h - .byte 0E9h - .byte 0EAh - .byte 0EBh - .byte 0ECh - .byte 0EDh - .byte 0EEh - .byte 0EFh - .byte 0F0h - .byte 0F1h - .byte 0F2h - .byte 0F3h - .byte 0F4h - .byte 0F5h - .byte 0F6h - .byte 0F7h - .byte 0F8h - .byte 0F9h - .byte 0FAh - .byte 0FBh - .byte 0FCh - .byte 0FDh - .byte 0FEh - .byte 0FFh + ; alternative 2-digit hex values, uppercase + .byte 00h + .byte 01h + .byte 02h + .byte 03h + .byte 04h + .byte 05h + .byte 06h + .byte 07h + .byte 08h + .byte 09h + .byte 0Ah + .byte 0Bh + .byte 0Ch + .byte 0Dh + .byte 0Eh + .byte 0Fh + .byte 10h + .byte 11h + .byte 12h + .byte 13h + .byte 14h + .byte 15h + .byte 16h + .byte 17h + .byte 18h + .byte 19h + .byte 1Ah + .byte 1Bh + .byte 1Ch + .byte 1Dh + .byte 1Eh + .byte 1Fh + .byte 20h + .byte 21h + .byte 22h + .byte 23h + .byte 24h + .byte 25h + .byte 26h + .byte 27h + .byte 28h + .byte 29h + .byte 2Ah + .byte 2Bh + .byte 2Ch + .byte 2Dh + .byte 2Eh + .byte 2Fh + .byte 30h + .byte 31h + .byte 32h + .byte 33h + .byte 34h + .byte 35h + .byte 36h + .byte 37h + .byte 38h + .byte 39h + .byte 3Ah + .byte 3Bh + .byte 3Ch + .byte 3Dh + .byte 3Eh + .byte 3Fh + .byte 40h + .byte 41h + .byte 42h + .byte 43h + .byte 44h + .byte 45h + .byte 46h + .byte 47h + .byte 48h + .byte 49h + .byte 4Ah + .byte 4Bh + .byte 4Ch + .byte 4Dh + .byte 4Eh + .byte 4Fh + .byte 50h + .byte 51h + .byte 52h + .byte 53h + .byte 54h + .byte 55h + .byte 56h + .byte 57h + .byte 58h + .byte 59h + .byte 5Ah + .byte 5Bh + .byte 5Ch + .byte 5Dh + .byte 5Eh + .byte 5Fh + .byte 60h + .byte 61h + .byte 62h + .byte 63h + .byte 64h + .byte 65h + .byte 66h + .byte 67h + .byte 68h + .byte 69h + .byte 6Ah + .byte 6Bh + .byte 6Ch + .byte 6Dh + .byte 6Eh + .byte 6Fh + .byte 70h + .byte 71h + .byte 72h + .byte 73h + .byte 74h + .byte 75h + .byte 76h + .byte 77h + .byte 78h + .byte 79h + .byte 7Ah + .byte 7Bh + .byte 7Ch + .byte 7Dh + .byte 7Eh + .byte 7Fh + .byte 80h + .byte 81h + .byte 82h + .byte 83h + .byte 84h + .byte 85h + .byte 86h + .byte 87h + .byte 88h + .byte 89h + .byte 8Ah + .byte 8Bh + .byte 8Ch + .byte 8Dh + .byte 8Eh + .byte 8Fh + .byte 90h + .byte 91h + .byte 92h + .byte 93h + .byte 94h + .byte 95h + .byte 96h + .byte 97h + .byte 98h + .byte 99h + .byte 9Ah + .byte 9Bh + .byte 9Ch + .byte 9Dh + .byte 9Eh + .byte 9Fh + .byte 0A0h + .byte 0A1h + .byte 0A2h + .byte 0A3h + .byte 0A4h + .byte 0A5h + .byte 0A6h + .byte 0A7h + .byte 0A8h + .byte 0A9h + .byte 0AAh + .byte 0ABh + .byte 0ACh + .byte 0ADh + .byte 0AEh + .byte 0AFh + .byte 0B0h + .byte 0B1h + .byte 0B2h + .byte 0B3h + .byte 0B4h + .byte 0B5h + .byte 0B6h + .byte 0B7h + .byte 0B8h + .byte 0B9h + .byte 0BAh + .byte 0BBh + .byte 0BCh + .byte 0BDh + .byte 0BEh + .byte 0BFh + .byte 0C0h + .byte 0C1h + .byte 0C2h + .byte 0C3h + .byte 0C4h + .byte 0C5h + .byte 0C6h + .byte 0C7h + .byte 0C8h + .byte 0C9h + .byte 0CAh + .byte 0CBh + .byte 0CCh + .byte 0CDh + .byte 0CEh + .byte 0CFh + .byte 0D0h + .byte 0D1h + .byte 0D2h + .byte 0D3h + .byte 0D4h + .byte 0D5h + .byte 0D6h + .byte 0D7h + .byte 0D8h + .byte 0D9h + .byte 0DAh + .byte 0DBh + .byte 0DCh + .byte 0DDh + .byte 0DEh + .byte 0DFh + .byte 0E0h + .byte 0E1h + .byte 0E2h + .byte 0E3h + .byte 0E4h + .byte 0E5h + .byte 0E6h + .byte 0E7h + .byte 0E8h + .byte 0E9h + .byte 0EAh + .byte 0EBh + .byte 0ECh + .byte 0EDh + .byte 0EEh + .byte 0EFh + .byte 0F0h + .byte 0F1h + .byte 0F2h + .byte 0F3h + .byte 0F4h + .byte 0F5h + .byte 0F6h + .byte 0F7h + .byte 0F8h + .byte 0F9h + .byte 0FAh + .byte 0FBh + .byte 0FCh + .byte 0FDh + .byte 0FEh + .byte 0FFh - ; alternative hex values, always leading zero - .byte 00h - .byte 01h - .byte 02h - .byte 03h - .byte 04h - .byte 05h - .byte 06h - .byte 07h - .byte 08h - .byte 09h - .byte 0ah - .byte 0bh - .byte 0ch - .byte 0dh - .byte 0eh - .byte 0fh - .byte 010h - .byte 011h - .byte 012h - .byte 013h - .byte 014h - .byte 015h - .byte 016h - .byte 017h - .byte 018h - .byte 019h - .byte 01ah - .byte 01bh - .byte 01ch - .byte 01dh - .byte 01eh - .byte 01fh - .byte 020h - .byte 021h - .byte 022h - .byte 023h - .byte 024h - .byte 025h - .byte 026h - .byte 027h - .byte 028h - .byte 029h - .byte 02ah - .byte 02bh - .byte 02ch - .byte 02dh - .byte 02eh - .byte 02fh - .byte 030h - .byte 031h - .byte 032h - .byte 033h - .byte 034h - .byte 035h - .byte 036h - .byte 037h - .byte 038h - .byte 039h - .byte 03ah - .byte 03bh - .byte 03ch - .byte 03dh - .byte 03eh - .byte 03fh - .byte 040h - .byte 041h - .byte 042h - .byte 043h - .byte 044h - .byte 045h - .byte 046h - .byte 047h - .byte 048h - .byte 049h - .byte 04ah - .byte 04bh - .byte 04ch - .byte 04dh - .byte 04eh - .byte 04fh - .byte 050h - .byte 051h - .byte 052h - .byte 053h - .byte 054h - .byte 055h - .byte 056h - .byte 057h - .byte 058h - .byte 059h - .byte 05ah - .byte 05bh - .byte 05ch - .byte 05dh - .byte 05eh - .byte 05fh - .byte 060h - .byte 061h - .byte 062h - .byte 063h - .byte 064h - .byte 065h - .byte 066h - .byte 067h - .byte 068h - .byte 069h - .byte 06ah - .byte 06bh - .byte 06ch - .byte 06dh - .byte 06eh - .byte 06fh - .byte 070h - .byte 071h - .byte 072h - .byte 073h - .byte 074h - .byte 075h - .byte 076h - .byte 077h - .byte 078h - .byte 079h - .byte 07ah - .byte 07bh - .byte 07ch - .byte 07dh - .byte 07eh - .byte 07fh - .byte 080h - .byte 081h - .byte 082h - .byte 083h - .byte 084h - .byte 085h - .byte 086h - .byte 087h - .byte 088h - .byte 089h - .byte 08ah - .byte 08bh - .byte 08ch - .byte 08dh - .byte 08eh - .byte 08fh - .byte 090h - .byte 091h - .byte 092h - .byte 093h - .byte 094h - .byte 095h - .byte 096h - .byte 097h - .byte 098h - .byte 099h - .byte 09ah - .byte 09bh - .byte 09ch - .byte 09dh - .byte 09eh - .byte 09fh - .byte 0a0h - .byte 0a1h - .byte 0a2h - .byte 0a3h - .byte 0a4h - .byte 0a5h - .byte 0a6h - .byte 0a7h - .byte 0a8h - .byte 0a9h - .byte 0aah - .byte 0abh - .byte 0ach - .byte 0adh - .byte 0aeh - .byte 0afh - .byte 0b0h - .byte 0b1h - .byte 0b2h - .byte 0b3h - .byte 0b4h - .byte 0b5h - .byte 0b6h - .byte 0b7h - .byte 0b8h - .byte 0b9h - .byte 0bah - .byte 0bbh - .byte 0bch - .byte 0bdh - .byte 0beh - .byte 0bfh - .byte 0c0h - .byte 0c1h - .byte 0c2h - .byte 0c3h - .byte 0c4h - .byte 0c5h - .byte 0c6h - .byte 0c7h - .byte 0c8h - .byte 0c9h - .byte 0cah - .byte 0cbh - .byte 0cch - .byte 0cdh - .byte 0ceh - .byte 0cfh - .byte 0d0h - .byte 0d1h - .byte 0d2h - .byte 0d3h - .byte 0d4h - .byte 0d5h - .byte 0d6h - .byte 0d7h - .byte 0d8h - .byte 0d9h - .byte 0dah - .byte 0dbh - .byte 0dch - .byte 0ddh - .byte 0deh - .byte 0dfh - .byte 0e0h - .byte 0e1h - .byte 0e2h - .byte 0e3h - .byte 0e4h - .byte 0e5h - .byte 0e6h - .byte 0e7h - .byte 0e8h - .byte 0e9h - .byte 0eah - .byte 0ebh - .byte 0ech - .byte 0edh - .byte 0eeh - .byte 0efh - .byte 0f0h - .byte 0f1h - .byte 0f2h - .byte 0f3h - .byte 0f4h - .byte 0f5h - .byte 0f6h - .byte 0f7h - .byte 0f8h - .byte 0f9h - .byte 0fah - .byte 0fbh - .byte 0fch - .byte 0fdh - .byte 0feh - .byte 0ffh + ; alternative hex values, always leading zero + .byte 00h + .byte 01h + .byte 02h + .byte 03h + .byte 04h + .byte 05h + .byte 06h + .byte 07h + .byte 08h + .byte 09h + .byte 0ah + .byte 0bh + .byte 0ch + .byte 0dh + .byte 0eh + .byte 0fh + .byte 010h + .byte 011h + .byte 012h + .byte 013h + .byte 014h + .byte 015h + .byte 016h + .byte 017h + .byte 018h + .byte 019h + .byte 01ah + .byte 01bh + .byte 01ch + .byte 01dh + .byte 01eh + .byte 01fh + .byte 020h + .byte 021h + .byte 022h + .byte 023h + .byte 024h + .byte 025h + .byte 026h + .byte 027h + .byte 028h + .byte 029h + .byte 02ah + .byte 02bh + .byte 02ch + .byte 02dh + .byte 02eh + .byte 02fh + .byte 030h + .byte 031h + .byte 032h + .byte 033h + .byte 034h + .byte 035h + .byte 036h + .byte 037h + .byte 038h + .byte 039h + .byte 03ah + .byte 03bh + .byte 03ch + .byte 03dh + .byte 03eh + .byte 03fh + .byte 040h + .byte 041h + .byte 042h + .byte 043h + .byte 044h + .byte 045h + .byte 046h + .byte 047h + .byte 048h + .byte 049h + .byte 04ah + .byte 04bh + .byte 04ch + .byte 04dh + .byte 04eh + .byte 04fh + .byte 050h + .byte 051h + .byte 052h + .byte 053h + .byte 054h + .byte 055h + .byte 056h + .byte 057h + .byte 058h + .byte 059h + .byte 05ah + .byte 05bh + .byte 05ch + .byte 05dh + .byte 05eh + .byte 05fh + .byte 060h + .byte 061h + .byte 062h + .byte 063h + .byte 064h + .byte 065h + .byte 066h + .byte 067h + .byte 068h + .byte 069h + .byte 06ah + .byte 06bh + .byte 06ch + .byte 06dh + .byte 06eh + .byte 06fh + .byte 070h + .byte 071h + .byte 072h + .byte 073h + .byte 074h + .byte 075h + .byte 076h + .byte 077h + .byte 078h + .byte 079h + .byte 07ah + .byte 07bh + .byte 07ch + .byte 07dh + .byte 07eh + .byte 07fh + .byte 080h + .byte 081h + .byte 082h + .byte 083h + .byte 084h + .byte 085h + .byte 086h + .byte 087h + .byte 088h + .byte 089h + .byte 08ah + .byte 08bh + .byte 08ch + .byte 08dh + .byte 08eh + .byte 08fh + .byte 090h + .byte 091h + .byte 092h + .byte 093h + .byte 094h + .byte 095h + .byte 096h + .byte 097h + .byte 098h + .byte 099h + .byte 09ah + .byte 09bh + .byte 09ch + .byte 09dh + .byte 09eh + .byte 09fh + .byte 0a0h + .byte 0a1h + .byte 0a2h + .byte 0a3h + .byte 0a4h + .byte 0a5h + .byte 0a6h + .byte 0a7h + .byte 0a8h + .byte 0a9h + .byte 0aah + .byte 0abh + .byte 0ach + .byte 0adh + .byte 0aeh + .byte 0afh + .byte 0b0h + .byte 0b1h + .byte 0b2h + .byte 0b3h + .byte 0b4h + .byte 0b5h + .byte 0b6h + .byte 0b7h + .byte 0b8h + .byte 0b9h + .byte 0bah + .byte 0bbh + .byte 0bch + .byte 0bdh + .byte 0beh + .byte 0bfh + .byte 0c0h + .byte 0c1h + .byte 0c2h + .byte 0c3h + .byte 0c4h + .byte 0c5h + .byte 0c6h + .byte 0c7h + .byte 0c8h + .byte 0c9h + .byte 0cah + .byte 0cbh + .byte 0cch + .byte 0cdh + .byte 0ceh + .byte 0cfh + .byte 0d0h + .byte 0d1h + .byte 0d2h + .byte 0d3h + .byte 0d4h + .byte 0d5h + .byte 0d6h + .byte 0d7h + .byte 0d8h + .byte 0d9h + .byte 0dah + .byte 0dbh + .byte 0dch + .byte 0ddh + .byte 0deh + .byte 0dfh + .byte 0e0h + .byte 0e1h + .byte 0e2h + .byte 0e3h + .byte 0e4h + .byte 0e5h + .byte 0e6h + .byte 0e7h + .byte 0e8h + .byte 0e9h + .byte 0eah + .byte 0ebh + .byte 0ech + .byte 0edh + .byte 0eeh + .byte 0efh + .byte 0f0h + .byte 0f1h + .byte 0f2h + .byte 0f3h + .byte 0f4h + .byte 0f5h + .byte 0f6h + .byte 0f7h + .byte 0f8h + .byte 0f9h + .byte 0fah + .byte 0fbh + .byte 0fch + .byte 0fdh + .byte 0feh + .byte 0ffh - ; binary values, variable length - .byte %0 - .byte %1 - .byte %10 - .byte %11 - .byte %100 - .byte %101 - .byte %110 - .byte %111 - .byte %1000 - .byte %1001 - .byte %1010 - .byte %1011 - .byte %1100 - .byte %1101 - .byte %1110 - .byte %1111 - .byte %10000 - .byte %10001 - .byte %10010 - .byte %10011 - .byte %10100 - .byte %10101 - .byte %10110 - .byte %10111 - .byte %11000 - .byte %11001 - .byte %11010 - .byte %11011 - .byte %11100 - .byte %11101 - .byte %11110 - .byte %11111 - .byte %100000 - .byte %100001 - .byte %100010 - .byte %100011 - .byte %100100 - .byte %100101 - .byte %100110 - .byte %100111 - .byte %101000 - .byte %101001 - .byte %101010 - .byte %101011 - .byte %101100 - .byte %101101 - .byte %101110 - .byte %101111 - .byte %110000 - .byte %110001 - .byte %110010 - .byte %110011 - .byte %110100 - .byte %110101 - .byte %110110 - .byte %110111 - .byte %111000 - .byte %111001 - .byte %111010 - .byte %111011 - .byte %111100 - .byte %111101 - .byte %111110 - .byte %111111 - .byte %1000000 - .byte %1000001 - .byte %1000010 - .byte %1000011 - .byte %1000100 - .byte %1000101 - .byte %1000110 - .byte %1000111 - .byte %1001000 - .byte %1001001 - .byte %1001010 - .byte %1001011 - .byte %1001100 - .byte %1001101 - .byte %1001110 - .byte %1001111 - .byte %1010000 - .byte %1010001 - .byte %1010010 - .byte %1010011 - .byte %1010100 - .byte %1010101 - .byte %1010110 - .byte %1010111 - .byte %1011000 - .byte %1011001 - .byte %1011010 - .byte %1011011 - .byte %1011100 - .byte %1011101 - .byte %1011110 - .byte %1011111 - .byte %1100000 - .byte %1100001 - .byte %1100010 - .byte %1100011 - .byte %1100100 - .byte %1100101 - .byte %1100110 - .byte %1100111 - .byte %1101000 - .byte %1101001 - .byte %1101010 - .byte %1101011 - .byte %1101100 - .byte %1101101 - .byte %1101110 - .byte %1101111 - .byte %1110000 - .byte %1110001 - .byte %1110010 - .byte %1110011 - .byte %1110100 - .byte %1110101 - .byte %1110110 - .byte %1110111 - .byte %1111000 - .byte %1111001 - .byte %1111010 - .byte %1111011 - .byte %1111100 - .byte %1111101 - .byte %1111110 - .byte %1111111 - .byte %10000000 - .byte %10000001 - .byte %10000010 - .byte %10000011 - .byte %10000100 - .byte %10000101 - .byte %10000110 - .byte %10000111 - .byte %10001000 - .byte %10001001 - .byte %10001010 - .byte %10001011 - .byte %10001100 - .byte %10001101 - .byte %10001110 - .byte %10001111 - .byte %10010000 - .byte %10010001 - .byte %10010010 - .byte %10010011 - .byte %10010100 - .byte %10010101 - .byte %10010110 - .byte %10010111 - .byte %10011000 - .byte %10011001 - .byte %10011010 - .byte %10011011 - .byte %10011100 - .byte %10011101 - .byte %10011110 - .byte %10011111 - .byte %10100000 - .byte %10100001 - .byte %10100010 - .byte %10100011 - .byte %10100100 - .byte %10100101 - .byte %10100110 - .byte %10100111 - .byte %10101000 - .byte %10101001 - .byte %10101010 - .byte %10101011 - .byte %10101100 - .byte %10101101 - .byte %10101110 - .byte %10101111 - .byte %10110000 - .byte %10110001 - .byte %10110010 - .byte %10110011 - .byte %10110100 - .byte %10110101 - .byte %10110110 - .byte %10110111 - .byte %10111000 - .byte %10111001 - .byte %10111010 - .byte %10111011 - .byte %10111100 - .byte %10111101 - .byte %10111110 - .byte %10111111 - .byte %11000000 - .byte %11000001 - .byte %11000010 - .byte %11000011 - .byte %11000100 - .byte %11000101 - .byte %11000110 - .byte %11000111 - .byte %11001000 - .byte %11001001 - .byte %11001010 - .byte %11001011 - .byte %11001100 - .byte %11001101 - .byte %11001110 - .byte %11001111 - .byte %11010000 - .byte %11010001 - .byte %11010010 - .byte %11010011 - .byte %11010100 - .byte %11010101 - .byte %11010110 - .byte %11010111 - .byte %11011000 - .byte %11011001 - .byte %11011010 - .byte %11011011 - .byte %11011100 - .byte %11011101 - .byte %11011110 - .byte %11011111 - .byte %11100000 - .byte %11100001 - .byte %11100010 - .byte %11100011 - .byte %11100100 - .byte %11100101 - .byte %11100110 - .byte %11100111 - .byte %11101000 - .byte %11101001 - .byte %11101010 - .byte %11101011 - .byte %11101100 - .byte %11101101 - .byte %11101110 - .byte %11101111 - .byte %11110000 - .byte %11110001 - .byte %11110010 - .byte %11110011 - .byte %11110100 - .byte %11110101 - .byte %11110110 - .byte %11110111 - .byte %11111000 - .byte %11111001 - .byte %11111010 - .byte %11111011 - .byte %11111100 - .byte %11111101 - .byte %11111110 - .byte %11111111 + ; binary values, variable length + .byte %0 + .byte %1 + .byte %10 + .byte %11 + .byte %100 + .byte %101 + .byte %110 + .byte %111 + .byte %1000 + .byte %1001 + .byte %1010 + .byte %1011 + .byte %1100 + .byte %1101 + .byte %1110 + .byte %1111 + .byte %10000 + .byte %10001 + .byte %10010 + .byte %10011 + .byte %10100 + .byte %10101 + .byte %10110 + .byte %10111 + .byte %11000 + .byte %11001 + .byte %11010 + .byte %11011 + .byte %11100 + .byte %11101 + .byte %11110 + .byte %11111 + .byte %100000 + .byte %100001 + .byte %100010 + .byte %100011 + .byte %100100 + .byte %100101 + .byte %100110 + .byte %100111 + .byte %101000 + .byte %101001 + .byte %101010 + .byte %101011 + .byte %101100 + .byte %101101 + .byte %101110 + .byte %101111 + .byte %110000 + .byte %110001 + .byte %110010 + .byte %110011 + .byte %110100 + .byte %110101 + .byte %110110 + .byte %110111 + .byte %111000 + .byte %111001 + .byte %111010 + .byte %111011 + .byte %111100 + .byte %111101 + .byte %111110 + .byte %111111 + .byte %1000000 + .byte %1000001 + .byte %1000010 + .byte %1000011 + .byte %1000100 + .byte %1000101 + .byte %1000110 + .byte %1000111 + .byte %1001000 + .byte %1001001 + .byte %1001010 + .byte %1001011 + .byte %1001100 + .byte %1001101 + .byte %1001110 + .byte %1001111 + .byte %1010000 + .byte %1010001 + .byte %1010010 + .byte %1010011 + .byte %1010100 + .byte %1010101 + .byte %1010110 + .byte %1010111 + .byte %1011000 + .byte %1011001 + .byte %1011010 + .byte %1011011 + .byte %1011100 + .byte %1011101 + .byte %1011110 + .byte %1011111 + .byte %1100000 + .byte %1100001 + .byte %1100010 + .byte %1100011 + .byte %1100100 + .byte %1100101 + .byte %1100110 + .byte %1100111 + .byte %1101000 + .byte %1101001 + .byte %1101010 + .byte %1101011 + .byte %1101100 + .byte %1101101 + .byte %1101110 + .byte %1101111 + .byte %1110000 + .byte %1110001 + .byte %1110010 + .byte %1110011 + .byte %1110100 + .byte %1110101 + .byte %1110110 + .byte %1110111 + .byte %1111000 + .byte %1111001 + .byte %1111010 + .byte %1111011 + .byte %1111100 + .byte %1111101 + .byte %1111110 + .byte %1111111 + .byte %10000000 + .byte %10000001 + .byte %10000010 + .byte %10000011 + .byte %10000100 + .byte %10000101 + .byte %10000110 + .byte %10000111 + .byte %10001000 + .byte %10001001 + .byte %10001010 + .byte %10001011 + .byte %10001100 + .byte %10001101 + .byte %10001110 + .byte %10001111 + .byte %10010000 + .byte %10010001 + .byte %10010010 + .byte %10010011 + .byte %10010100 + .byte %10010101 + .byte %10010110 + .byte %10010111 + .byte %10011000 + .byte %10011001 + .byte %10011010 + .byte %10011011 + .byte %10011100 + .byte %10011101 + .byte %10011110 + .byte %10011111 + .byte %10100000 + .byte %10100001 + .byte %10100010 + .byte %10100011 + .byte %10100100 + .byte %10100101 + .byte %10100110 + .byte %10100111 + .byte %10101000 + .byte %10101001 + .byte %10101010 + .byte %10101011 + .byte %10101100 + .byte %10101101 + .byte %10101110 + .byte %10101111 + .byte %10110000 + .byte %10110001 + .byte %10110010 + .byte %10110011 + .byte %10110100 + .byte %10110101 + .byte %10110110 + .byte %10110111 + .byte %10111000 + .byte %10111001 + .byte %10111010 + .byte %10111011 + .byte %10111100 + .byte %10111101 + .byte %10111110 + .byte %10111111 + .byte %11000000 + .byte %11000001 + .byte %11000010 + .byte %11000011 + .byte %11000100 + .byte %11000101 + .byte %11000110 + .byte %11000111 + .byte %11001000 + .byte %11001001 + .byte %11001010 + .byte %11001011 + .byte %11001100 + .byte %11001101 + .byte %11001110 + .byte %11001111 + .byte %11010000 + .byte %11010001 + .byte %11010010 + .byte %11010011 + .byte %11010100 + .byte %11010101 + .byte %11010110 + .byte %11010111 + .byte %11011000 + .byte %11011001 + .byte %11011010 + .byte %11011011 + .byte %11011100 + .byte %11011101 + .byte %11011110 + .byte %11011111 + .byte %11100000 + .byte %11100001 + .byte %11100010 + .byte %11100011 + .byte %11100100 + .byte %11100101 + .byte %11100110 + .byte %11100111 + .byte %11101000 + .byte %11101001 + .byte %11101010 + .byte %11101011 + .byte %11101100 + .byte %11101101 + .byte %11101110 + .byte %11101111 + .byte %11110000 + .byte %11110001 + .byte %11110010 + .byte %11110011 + .byte %11110100 + .byte %11110101 + .byte %11110110 + .byte %11110111 + .byte %11111000 + .byte %11111001 + .byte %11111010 + .byte %11111011 + .byte %11111100 + .byte %11111101 + .byte %11111110 + .byte %11111111 - ; binary values, full length - .byte %00000000 - .byte %00000001 - .byte %00000010 - .byte %00000011 - .byte %00000100 - .byte %00000101 - .byte %00000110 - .byte %00000111 - .byte %00001000 - .byte %00001001 - .byte %00001010 - .byte %00001011 - .byte %00001100 - .byte %00001101 - .byte %00001110 - .byte %00001111 - .byte %00010000 - .byte %00010001 - .byte %00010010 - .byte %00010011 - .byte %00010100 - .byte %00010101 - .byte %00010110 - .byte %00010111 - .byte %00011000 - .byte %00011001 - .byte %00011010 - .byte %00011011 - .byte %00011100 - .byte %00011101 - .byte %00011110 - .byte %00011111 - .byte %00100000 - .byte %00100001 - .byte %00100010 - .byte %00100011 - .byte %00100100 - .byte %00100101 - .byte %00100110 - .byte %00100111 - .byte %00101000 - .byte %00101001 - .byte %00101010 - .byte %00101011 - .byte %00101100 - .byte %00101101 - .byte %00101110 - .byte %00101111 - .byte %00110000 - .byte %00110001 - .byte %00110010 - .byte %00110011 - .byte %00110100 - .byte %00110101 - .byte %00110110 - .byte %00110111 - .byte %00111000 - .byte %00111001 - .byte %00111010 - .byte %00111011 - .byte %00111100 - .byte %00111101 - .byte %00111110 - .byte %00111111 - .byte %01000000 - .byte %01000001 - .byte %01000010 - .byte %01000011 - .byte %01000100 - .byte %01000101 - .byte %01000110 - .byte %01000111 - .byte %01001000 - .byte %01001001 - .byte %01001010 - .byte %01001011 - .byte %01001100 - .byte %01001101 - .byte %01001110 - .byte %01001111 - .byte %01010000 - .byte %01010001 - .byte %01010010 - .byte %01010011 - .byte %01010100 - .byte %01010101 - .byte %01010110 - .byte %01010111 - .byte %01011000 - .byte %01011001 - .byte %01011010 - .byte %01011011 - .byte %01011100 - .byte %01011101 - .byte %01011110 - .byte %01011111 - .byte %01100000 - .byte %01100001 - .byte %01100010 - .byte %01100011 - .byte %01100100 - .byte %01100101 - .byte %01100110 - .byte %01100111 - .byte %01101000 - .byte %01101001 - .byte %01101010 - .byte %01101011 - .byte %01101100 - .byte %01101101 - .byte %01101110 - .byte %01101111 - .byte %01110000 - .byte %01110001 - .byte %01110010 - .byte %01110011 - .byte %01110100 - .byte %01110101 - .byte %01110110 - .byte %01110111 - .byte %01111000 - .byte %01111001 - .byte %01111010 - .byte %01111011 - .byte %01111100 - .byte %01111101 - .byte %01111110 - .byte %01111111 - .byte %10000000 - .byte %10000001 - .byte %10000010 - .byte %10000011 - .byte %10000100 - .byte %10000101 - .byte %10000110 - .byte %10000111 - .byte %10001000 - .byte %10001001 - .byte %10001010 - .byte %10001011 - .byte %10001100 - .byte %10001101 - .byte %10001110 - .byte %10001111 - .byte %10010000 - .byte %10010001 - .byte %10010010 - .byte %10010011 - .byte %10010100 - .byte %10010101 - .byte %10010110 - .byte %10010111 - .byte %10011000 - .byte %10011001 - .byte %10011010 - .byte %10011011 - .byte %10011100 - .byte %10011101 - .byte %10011110 - .byte %10011111 - .byte %10100000 - .byte %10100001 - .byte %10100010 - .byte %10100011 - .byte %10100100 - .byte %10100101 - .byte %10100110 - .byte %10100111 - .byte %10101000 - .byte %10101001 - .byte %10101010 - .byte %10101011 - .byte %10101100 - .byte %10101101 - .byte %10101110 - .byte %10101111 - .byte %10110000 - .byte %10110001 - .byte %10110010 - .byte %10110011 - .byte %10110100 - .byte %10110101 - .byte %10110110 - .byte %10110111 - .byte %10111000 - .byte %10111001 - .byte %10111010 - .byte %10111011 - .byte %10111100 - .byte %10111101 - .byte %10111110 - .byte %10111111 - .byte %11000000 - .byte %11000001 - .byte %11000010 - .byte %11000011 - .byte %11000100 - .byte %11000101 - .byte %11000110 - .byte %11000111 - .byte %11001000 - .byte %11001001 - .byte %11001010 - .byte %11001011 - .byte %11001100 - .byte %11001101 - .byte %11001110 - .byte %11001111 - .byte %11010000 - .byte %11010001 - .byte %11010010 - .byte %11010011 - .byte %11010100 - .byte %11010101 - .byte %11010110 - .byte %11010111 - .byte %11011000 - .byte %11011001 - .byte %11011010 - .byte %11011011 - .byte %11011100 - .byte %11011101 - .byte %11011110 - .byte %11011111 - .byte %11100000 - .byte %11100001 - .byte %11100010 - .byte %11100011 - .byte %11100100 - .byte %11100101 - .byte %11100110 - .byte %11100111 - .byte %11101000 - .byte %11101001 - .byte %11101010 - .byte %11101011 - .byte %11101100 - .byte %11101101 - .byte %11101110 - .byte %11101111 - .byte %11110000 - .byte %11110001 - .byte %11110010 - .byte %11110011 - .byte %11110100 - .byte %11110101 - .byte %11110110 - .byte %11110111 - .byte %11111000 - .byte %11111001 - .byte %11111010 - .byte %11111011 - .byte %11111100 - .byte %11111101 - .byte %11111110 - .byte %11111111 + ; binary values, full length + .byte %00000000 + .byte %00000001 + .byte %00000010 + .byte %00000011 + .byte %00000100 + .byte %00000101 + .byte %00000110 + .byte %00000111 + .byte %00001000 + .byte %00001001 + .byte %00001010 + .byte %00001011 + .byte %00001100 + .byte %00001101 + .byte %00001110 + .byte %00001111 + .byte %00010000 + .byte %00010001 + .byte %00010010 + .byte %00010011 + .byte %00010100 + .byte %00010101 + .byte %00010110 + .byte %00010111 + .byte %00011000 + .byte %00011001 + .byte %00011010 + .byte %00011011 + .byte %00011100 + .byte %00011101 + .byte %00011110 + .byte %00011111 + .byte %00100000 + .byte %00100001 + .byte %00100010 + .byte %00100011 + .byte %00100100 + .byte %00100101 + .byte %00100110 + .byte %00100111 + .byte %00101000 + .byte %00101001 + .byte %00101010 + .byte %00101011 + .byte %00101100 + .byte %00101101 + .byte %00101110 + .byte %00101111 + .byte %00110000 + .byte %00110001 + .byte %00110010 + .byte %00110011 + .byte %00110100 + .byte %00110101 + .byte %00110110 + .byte %00110111 + .byte %00111000 + .byte %00111001 + .byte %00111010 + .byte %00111011 + .byte %00111100 + .byte %00111101 + .byte %00111110 + .byte %00111111 + .byte %01000000 + .byte %01000001 + .byte %01000010 + .byte %01000011 + .byte %01000100 + .byte %01000101 + .byte %01000110 + .byte %01000111 + .byte %01001000 + .byte %01001001 + .byte %01001010 + .byte %01001011 + .byte %01001100 + .byte %01001101 + .byte %01001110 + .byte %01001111 + .byte %01010000 + .byte %01010001 + .byte %01010010 + .byte %01010011 + .byte %01010100 + .byte %01010101 + .byte %01010110 + .byte %01010111 + .byte %01011000 + .byte %01011001 + .byte %01011010 + .byte %01011011 + .byte %01011100 + .byte %01011101 + .byte %01011110 + .byte %01011111 + .byte %01100000 + .byte %01100001 + .byte %01100010 + .byte %01100011 + .byte %01100100 + .byte %01100101 + .byte %01100110 + .byte %01100111 + .byte %01101000 + .byte %01101001 + .byte %01101010 + .byte %01101011 + .byte %01101100 + .byte %01101101 + .byte %01101110 + .byte %01101111 + .byte %01110000 + .byte %01110001 + .byte %01110010 + .byte %01110011 + .byte %01110100 + .byte %01110101 + .byte %01110110 + .byte %01110111 + .byte %01111000 + .byte %01111001 + .byte %01111010 + .byte %01111011 + .byte %01111100 + .byte %01111101 + .byte %01111110 + .byte %01111111 + .byte %10000000 + .byte %10000001 + .byte %10000010 + .byte %10000011 + .byte %10000100 + .byte %10000101 + .byte %10000110 + .byte %10000111 + .byte %10001000 + .byte %10001001 + .byte %10001010 + .byte %10001011 + .byte %10001100 + .byte %10001101 + .byte %10001110 + .byte %10001111 + .byte %10010000 + .byte %10010001 + .byte %10010010 + .byte %10010011 + .byte %10010100 + .byte %10010101 + .byte %10010110 + .byte %10010111 + .byte %10011000 + .byte %10011001 + .byte %10011010 + .byte %10011011 + .byte %10011100 + .byte %10011101 + .byte %10011110 + .byte %10011111 + .byte %10100000 + .byte %10100001 + .byte %10100010 + .byte %10100011 + .byte %10100100 + .byte %10100101 + .byte %10100110 + .byte %10100111 + .byte %10101000 + .byte %10101001 + .byte %10101010 + .byte %10101011 + .byte %10101100 + .byte %10101101 + .byte %10101110 + .byte %10101111 + .byte %10110000 + .byte %10110001 + .byte %10110010 + .byte %10110011 + .byte %10110100 + .byte %10110101 + .byte %10110110 + .byte %10110111 + .byte %10111000 + .byte %10111001 + .byte %10111010 + .byte %10111011 + .byte %10111100 + .byte %10111101 + .byte %10111110 + .byte %10111111 + .byte %11000000 + .byte %11000001 + .byte %11000010 + .byte %11000011 + .byte %11000100 + .byte %11000101 + .byte %11000110 + .byte %11000111 + .byte %11001000 + .byte %11001001 + .byte %11001010 + .byte %11001011 + .byte %11001100 + .byte %11001101 + .byte %11001110 + .byte %11001111 + .byte %11010000 + .byte %11010001 + .byte %11010010 + .byte %11010011 + .byte %11010100 + .byte %11010101 + .byte %11010110 + .byte %11010111 + .byte %11011000 + .byte %11011001 + .byte %11011010 + .byte %11011011 + .byte %11011100 + .byte %11011101 + .byte %11011110 + .byte %11011111 + .byte %11100000 + .byte %11100001 + .byte %11100010 + .byte %11100011 + .byte %11100100 + .byte %11100101 + .byte %11100110 + .byte %11100111 + .byte %11101000 + .byte %11101001 + .byte %11101010 + .byte %11101011 + .byte %11101100 + .byte %11101101 + .byte %11101110 + .byte %11101111 + .byte %11110000 + .byte %11110001 + .byte %11110010 + .byte %11110011 + .byte %11110100 + .byte %11110101 + .byte %11110110 + .byte %11110111 + .byte %11111000 + .byte %11111001 + .byte %11111010 + .byte %11111011 + .byte %11111100 + .byte %11111101 + .byte %11111110 + .byte %11111111 - ; some character values - .byte ' ' - .byte '!' - .byte '"' - .byte '#' - .byte '$' - .byte '%' - .byte '&' - .byte ''' - .byte '(' - .byte ')' - .byte '*' - .byte '+' - .byte ',' - .byte '-' - .byte '.' - .byte '/' - .byte '0' - .byte '1' - .byte '2' - .byte '3' - .byte '4' - .byte '5' - .byte '6' - .byte '7' - .byte '8' - .byte '9' - .byte ':' - .byte ';' - .byte '<' - .byte '=' - .byte '>' - .byte '?' - .byte '@' - .byte 'A' - .byte 'B' - .byte 'C' - .byte 'D' - .byte 'E' - .byte 'F' - .byte 'G' - .byte 'H' - .byte 'I' - .byte 'J' - .byte 'K' - .byte 'L' - .byte 'M' - .byte 'N' - .byte 'O' - .byte 'P' - .byte 'Q' - .byte 'R' - .byte 'S' - .byte 'T' - .byte 'U' - .byte 'V' - .byte 'W' - .byte 'X' - .byte 'Y' - .byte 'Z' - .byte '[' - .byte '\' - .byte ']' - .byte '^' - .byte '_' - .byte '`' - .byte 'a' - .byte 'b' - .byte 'c' - .byte 'd' - .byte 'e' - .byte 'f' - .byte 'g' - .byte 'h' - .byte 'i' - .byte 'j' - .byte 'k' - .byte 'l' - .byte 'm' - .byte 'n' - .byte 'o' - .byte 'p' - .byte 'q' - .byte 'r' - .byte 's' - .byte 't' - .byte 'u' - .byte 'v' - .byte 'w' - .byte 'x' - .byte 'y' - .byte 'z' - .byte '{' - .byte '|' - .byte '}' - .byte '~' + ; some character values + .byte ' ' + .byte '!' + .byte '"' + .byte '#' + .byte '$' + .byte '%' + .byte '&' + .byte ''' + .byte '(' + .byte ')' + .byte '*' + .byte '+' + .byte ',' + .byte '-' + .byte '.' + .byte '/' + .byte '0' + .byte '1' + .byte '2' + .byte '3' + .byte '4' + .byte '5' + .byte '6' + .byte '7' + .byte '8' + .byte '9' + .byte ':' + .byte ';' + .byte '<' + .byte '=' + .byte '>' + .byte '?' + .byte '@' + .byte 'A' + .byte 'B' + .byte 'C' + .byte 'D' + .byte 'E' + .byte 'F' + .byte 'G' + .byte 'H' + .byte 'I' + .byte 'J' + .byte 'K' + .byte 'L' + .byte 'M' + .byte 'N' + .byte 'O' + .byte 'P' + .byte 'Q' + .byte 'R' + .byte 'S' + .byte 'T' + .byte 'U' + .byte 'V' + .byte 'W' + .byte 'X' + .byte 'Y' + .byte 'Z' + .byte '[' + .byte '\' + .byte ']' + .byte '^' + .byte '_' + .byte '`' + .byte 'a' + .byte 'b' + .byte 'c' + .byte 'd' + .byte 'e' + .byte 'f' + .byte 'g' + .byte 'h' + .byte 'i' + .byte 'j' + .byte 'k' + .byte 'l' + .byte 'm' + .byte 'n' + .byte 'o' + .byte 'p' + .byte 'q' + .byte 'r' + .byte 's' + .byte 't' + .byte 'u' + .byte 'v' + .byte 'w' + .byte 'x' + .byte 'y' + .byte 'z' + .byte '{' + .byte '|' + .byte '}' + .byte '~' - ; multiple values on one line, decimal - .byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - .byte 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 - .byte 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 - .byte 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 - .byte 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 - .byte 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95 - .byte 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 - .byte 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 - .byte 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 - .byte 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 - .byte 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 - .byte 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 - .byte 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 - .byte 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 - .byte 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 - .byte 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + ; multiple values on one line, decimal + .byte 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .byte 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .byte 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 + .byte 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 + .byte 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 + .byte 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95 + .byte 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 + .byte 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .byte 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .byte 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 + .byte 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 + .byte 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 + .byte 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 + .byte 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 + .byte 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 + .byte 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 - ; multiple values on one line, hex - .byte $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f - .byte $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f - .byte $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f - .byte $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f - .byte $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f - .byte $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$5b,$5c,$5d,$5e,$5f - .byte $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f - .byte $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f - .byte $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f - .byte $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f - .byte $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af - .byte $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf - .byte $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf - .byte $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df - .byte $e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef - .byte $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + ; multiple values on one line, hex + .byte $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .byte $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .byte $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f + .byte $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f + .byte $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f + .byte $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$5b,$5c,$5d,$5e,$5f + .byte $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f + .byte $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .byte $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .byte $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f + .byte $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af + .byte $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf + .byte $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf + .byte $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df + .byte $e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef + .byte $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff - ; multiple values on one line, alternative hex - .byte 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh - .byte 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh - .byte 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,2ah,2bh,2ch,2dh,2eh,2fh - .byte 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,3ah,3bh,3ch,3dh,3eh,3fh - .byte 40h,41h,42h,43h,44h,45h,46h,47h,48h,49h,4ah,4bh,4ch,4dh,4eh,4fh - .byte 50h,51h,52h,53h,54h,55h,56h,57h,58h,59h,5ah,5bh,5ch,5dh,5eh,5fh - .byte 60h,61h,62h,63h,64h,65h,66h,67h,68h,69h,6ah,6bh,6ch,6dh,6eh,6fh - .byte 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh - .byte 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh - .byte 90h,91h,92h,93h,94h,95h,96h,97h,98h,99h,9ah,9bh,9ch,9dh,9eh,9fh - .byte 0a0h,0a1h,0a2h,0a3h,0a4h,0a5h,0a6h,0a7h,0a8h,0a9h,0aah,0abh,0ach,0adh,0aeh,0afh - .byte 0b0h,0b1h,0b2h,0b3h,0b4h,0b5h,0b6h,0b7h,0b8h,0b9h,0bah,0bbh,0bch,0bdh,0beh,0bfh - .byte 0c0h,0c1h,0c2h,0c3h,0c4h,0c5h,0c6h,0c7h,0c8h,0c9h,0cah,0cbh,0cch,0cdh,0ceh,0cfh - .byte 0d0h,0d1h,0d2h,0d3h,0d4h,0d5h,0d6h,0d7h,0d8h,0d9h,0dah,0dbh,0dch,0ddh,0deh,0dfh - .byte 0e0h,0e1h,0e2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0e9h,0eah,0ebh,0ech,0edh,0eeh,0efh - .byte 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + ; multiple values on one line, alternative hex + .byte 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .byte 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .byte 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,2ah,2bh,2ch,2dh,2eh,2fh + .byte 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,3ah,3bh,3ch,3dh,3eh,3fh + .byte 40h,41h,42h,43h,44h,45h,46h,47h,48h,49h,4ah,4bh,4ch,4dh,4eh,4fh + .byte 50h,51h,52h,53h,54h,55h,56h,57h,58h,59h,5ah,5bh,5ch,5dh,5eh,5fh + .byte 60h,61h,62h,63h,64h,65h,66h,67h,68h,69h,6ah,6bh,6ch,6dh,6eh,6fh + .byte 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .byte 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .byte 90h,91h,92h,93h,94h,95h,96h,97h,98h,99h,9ah,9bh,9ch,9dh,9eh,9fh + .byte 0a0h,0a1h,0a2h,0a3h,0a4h,0a5h,0a6h,0a7h,0a8h,0a9h,0aah,0abh,0ach,0adh,0aeh,0afh + .byte 0b0h,0b1h,0b2h,0b3h,0b4h,0b5h,0b6h,0b7h,0b8h,0b9h,0bah,0bbh,0bch,0bdh,0beh,0bfh + .byte 0c0h,0c1h,0c2h,0c3h,0c4h,0c5h,0c6h,0c7h,0c8h,0c9h,0cah,0cbh,0cch,0cdh,0ceh,0cfh + .byte 0d0h,0d1h,0d2h,0d3h,0d4h,0d5h,0d6h,0d7h,0d8h,0d9h,0dah,0dbh,0dch,0ddh,0deh,0dfh + .byte 0e0h,0e1h,0e2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0e9h,0eah,0ebh,0ech,0edh,0eeh,0efh + .byte 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh - ; multiple values on one line, characters - .byte ' ','!','"','#','$','%','&',''','(',')','*','+',',','-','.','/' - .byte '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?' - .byte '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O' - .byte 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_' - .byte '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o' - .byte 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~' + ; multiple values on one line, characters + .byte ' ','!','"','#','$','%','&',''','(',')','*','+',',','-','.','/' + .byte '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?' + .byte '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O' + .byte 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_' + .byte '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o' + .byte 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~' - ; some character strings - .byte " !#$%&'()*+,-." - .byte "0123456789:;<=>" - .byte "@ABCDEFGHIJKLMN" - .byte "PQRSTUVWXYZ[\]^" - .byte "`abcdefghijklmn" - .byte "pqrstuvwxyz{|}" + ; some character strings + .byte " !#$%&'()*+,-." + .byte "0123456789:;<=>" + .byte "@ABCDEFGHIJKLMN" + .byte "PQRSTUVWXYZ[\]^" + .byte "`abcdefghijklmn" + .byte "pqrstuvwxyz{|}" - ; mix some variants - .byte 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh + ; mix some variants + .byte 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/101-byt.list-ref b/test/asm/listing/101-byt.list-ref index 3109ade61..796c8e6a1 100644 --- a/test/asm/listing/101-byt.list-ref +++ b/test/asm/listing/101-byt.list-ref @@ -4,3649 +4,3649 @@ Current file: 101-byt.s 000000r 1 ; 2022-06-15 Spiro Trikaliotis 000000r 1 000000r 1 -000000r 1 ; upper case pseudo-op -000000r 1 00 .BYT 0 -000001r 1 01 .BYT 1 -000002r 1 02 .BYT 2 -000003r 1 03 .BYT 3 -000004r 1 04 .BYT 4 -000005r 1 05 .BYT 5 -000006r 1 06 .BYT 6 -000007r 1 07 .BYT 7 -000008r 1 08 .BYT 8 -000009r 1 09 .BYT 9 -00000Ar 1 0A .BYT 10 -00000Br 1 0B .BYT 11 -00000Cr 1 0C .BYT 12 -00000Dr 1 0D .BYT 13 -00000Er 1 0E .BYT 14 -00000Fr 1 0F .BYT 15 -000010r 1 10 .BYT 16 -000011r 1 11 .BYT 17 -000012r 1 12 .BYT 18 -000013r 1 13 .BYT 19 -000014r 1 14 .BYT 20 -000015r 1 15 .BYT 21 -000016r 1 16 .BYT 22 -000017r 1 17 .BYT 23 -000018r 1 18 .BYT 24 -000019r 1 19 .BYT 25 -00001Ar 1 1A .BYT 26 -00001Br 1 1B .BYT 27 -00001Cr 1 1C .BYT 28 -00001Dr 1 1D .BYT 29 -00001Er 1 1E .BYT 30 -00001Fr 1 1F .BYT 31 -000020r 1 20 .BYT 32 -000021r 1 21 .BYT 33 -000022r 1 22 .BYT 34 -000023r 1 23 .BYT 35 -000024r 1 24 .BYT 36 -000025r 1 25 .BYT 37 -000026r 1 26 .BYT 38 -000027r 1 27 .BYT 39 -000028r 1 28 .BYT 40 -000029r 1 29 .BYT 41 -00002Ar 1 2A .BYT 42 -00002Br 1 2B .BYT 43 -00002Cr 1 2C .BYT 44 -00002Dr 1 2D .BYT 45 -00002Er 1 2E .BYT 46 -00002Fr 1 2F .BYT 47 -000030r 1 30 .BYT 48 -000031r 1 31 .BYT 49 -000032r 1 32 .BYT 50 -000033r 1 33 .BYT 51 -000034r 1 34 .BYT 52 -000035r 1 35 .BYT 53 -000036r 1 36 .BYT 54 -000037r 1 37 .BYT 55 -000038r 1 38 .BYT 56 -000039r 1 39 .BYT 57 -00003Ar 1 3A .BYT 58 -00003Br 1 3B .BYT 59 -00003Cr 1 3C .BYT 60 -00003Dr 1 3D .BYT 61 -00003Er 1 3E .BYT 62 -00003Fr 1 3F .BYT 63 -000040r 1 40 .BYT 64 -000041r 1 41 .BYT 65 -000042r 1 42 .BYT 66 -000043r 1 43 .BYT 67 -000044r 1 44 .BYT 68 -000045r 1 45 .BYT 69 -000046r 1 46 .BYT 70 -000047r 1 47 .BYT 71 -000048r 1 48 .BYT 72 -000049r 1 49 .BYT 73 -00004Ar 1 4A .BYT 74 -00004Br 1 4B .BYT 75 -00004Cr 1 4C .BYT 76 -00004Dr 1 4D .BYT 77 -00004Er 1 4E .BYT 78 -00004Fr 1 4F .BYT 79 -000050r 1 50 .BYT 80 -000051r 1 51 .BYT 81 -000052r 1 52 .BYT 82 -000053r 1 53 .BYT 83 -000054r 1 54 .BYT 84 -000055r 1 55 .BYT 85 -000056r 1 56 .BYT 86 -000057r 1 57 .BYT 87 -000058r 1 58 .BYT 88 -000059r 1 59 .BYT 89 -00005Ar 1 5A .BYT 90 -00005Br 1 5B .BYT 91 -00005Cr 1 5C .BYT 92 -00005Dr 1 5D .BYT 93 -00005Er 1 5E .BYT 94 -00005Fr 1 5F .BYT 95 -000060r 1 60 .BYT 96 -000061r 1 61 .BYT 97 -000062r 1 62 .BYT 98 -000063r 1 63 .BYT 99 -000064r 1 64 .BYT 100 -000065r 1 65 .BYT 101 -000066r 1 66 .BYT 102 -000067r 1 67 .BYT 103 -000068r 1 68 .BYT 104 -000069r 1 69 .BYT 105 -00006Ar 1 6A .BYT 106 -00006Br 1 6B .BYT 107 -00006Cr 1 6C .BYT 108 -00006Dr 1 6D .BYT 109 -00006Er 1 6E .BYT 110 -00006Fr 1 6F .BYT 111 -000070r 1 70 .BYT 112 -000071r 1 71 .BYT 113 -000072r 1 72 .BYT 114 -000073r 1 73 .BYT 115 -000074r 1 74 .BYT 116 -000075r 1 75 .BYT 117 -000076r 1 76 .BYT 118 -000077r 1 77 .BYT 119 -000078r 1 78 .BYT 120 -000079r 1 79 .BYT 121 -00007Ar 1 7A .BYT 122 -00007Br 1 7B .BYT 123 -00007Cr 1 7C .BYT 124 -00007Dr 1 7D .BYT 125 -00007Er 1 7E .BYT 126 -00007Fr 1 7F .BYT 127 -000080r 1 80 .BYT 128 -000081r 1 81 .BYT 129 -000082r 1 82 .BYT 130 -000083r 1 83 .BYT 131 -000084r 1 84 .BYT 132 -000085r 1 85 .BYT 133 -000086r 1 86 .BYT 134 -000087r 1 87 .BYT 135 -000088r 1 88 .BYT 136 -000089r 1 89 .BYT 137 -00008Ar 1 8A .BYT 138 -00008Br 1 8B .BYT 139 -00008Cr 1 8C .BYT 140 -00008Dr 1 8D .BYT 141 -00008Er 1 8E .BYT 142 -00008Fr 1 8F .BYT 143 -000090r 1 90 .BYT 144 -000091r 1 91 .BYT 145 -000092r 1 92 .BYT 146 -000093r 1 93 .BYT 147 -000094r 1 94 .BYT 148 -000095r 1 95 .BYT 149 -000096r 1 96 .BYT 150 -000097r 1 97 .BYT 151 -000098r 1 98 .BYT 152 -000099r 1 99 .BYT 153 -00009Ar 1 9A .BYT 154 -00009Br 1 9B .BYT 155 -00009Cr 1 9C .BYT 156 -00009Dr 1 9D .BYT 157 -00009Er 1 9E .BYT 158 -00009Fr 1 9F .BYT 159 -0000A0r 1 A0 .BYT 160 -0000A1r 1 A1 .BYT 161 -0000A2r 1 A2 .BYT 162 -0000A3r 1 A3 .BYT 163 -0000A4r 1 A4 .BYT 164 -0000A5r 1 A5 .BYT 165 -0000A6r 1 A6 .BYT 166 -0000A7r 1 A7 .BYT 167 -0000A8r 1 A8 .BYT 168 -0000A9r 1 A9 .BYT 169 -0000AAr 1 AA .BYT 170 -0000ABr 1 AB .BYT 171 -0000ACr 1 AC .BYT 172 -0000ADr 1 AD .BYT 173 -0000AEr 1 AE .BYT 174 -0000AFr 1 AF .BYT 175 -0000B0r 1 B0 .BYT 176 -0000B1r 1 B1 .BYT 177 -0000B2r 1 B2 .BYT 178 -0000B3r 1 B3 .BYT 179 -0000B4r 1 B4 .BYT 180 -0000B5r 1 B5 .BYT 181 -0000B6r 1 B6 .BYT 182 -0000B7r 1 B7 .BYT 183 -0000B8r 1 B8 .BYT 184 -0000B9r 1 B9 .BYT 185 -0000BAr 1 BA .BYT 186 -0000BBr 1 BB .BYT 187 -0000BCr 1 BC .BYT 188 -0000BDr 1 BD .BYT 189 -0000BEr 1 BE .BYT 190 -0000BFr 1 BF .BYT 191 -0000C0r 1 C0 .BYT 192 -0000C1r 1 C1 .BYT 193 -0000C2r 1 C2 .BYT 194 -0000C3r 1 C3 .BYT 195 -0000C4r 1 C4 .BYT 196 -0000C5r 1 C5 .BYT 197 -0000C6r 1 C6 .BYT 198 -0000C7r 1 C7 .BYT 199 -0000C8r 1 C8 .BYT 200 -0000C9r 1 C9 .BYT 201 -0000CAr 1 CA .BYT 202 -0000CBr 1 CB .BYT 203 -0000CCr 1 CC .BYT 204 -0000CDr 1 CD .BYT 205 -0000CEr 1 CE .BYT 206 -0000CFr 1 CF .BYT 207 -0000D0r 1 D0 .BYT 208 -0000D1r 1 D1 .BYT 209 -0000D2r 1 D2 .BYT 210 -0000D3r 1 D3 .BYT 211 -0000D4r 1 D4 .BYT 212 -0000D5r 1 D5 .BYT 213 -0000D6r 1 D6 .BYT 214 -0000D7r 1 D7 .BYT 215 -0000D8r 1 D8 .BYT 216 -0000D9r 1 D9 .BYT 217 -0000DAr 1 DA .BYT 218 -0000DBr 1 DB .BYT 219 -0000DCr 1 DC .BYT 220 -0000DDr 1 DD .BYT 221 -0000DEr 1 DE .BYT 222 -0000DFr 1 DF .BYT 223 -0000E0r 1 E0 .BYT 224 -0000E1r 1 E1 .BYT 225 -0000E2r 1 E2 .BYT 226 -0000E3r 1 E3 .BYT 227 -0000E4r 1 E4 .BYT 228 -0000E5r 1 E5 .BYT 229 -0000E6r 1 E6 .BYT 230 -0000E7r 1 E7 .BYT 231 -0000E8r 1 E8 .BYT 232 -0000E9r 1 E9 .BYT 233 -0000EAr 1 EA .BYT 234 -0000EBr 1 EB .BYT 235 -0000ECr 1 EC .BYT 236 -0000EDr 1 ED .BYT 237 -0000EEr 1 EE .BYT 238 -0000EFr 1 EF .BYT 239 -0000F0r 1 F0 .BYT 240 -0000F1r 1 F1 .BYT 241 -0000F2r 1 F2 .BYT 242 -0000F3r 1 F3 .BYT 243 -0000F4r 1 F4 .BYT 244 -0000F5r 1 F5 .BYT 245 -0000F6r 1 F6 .BYT 246 -0000F7r 1 F7 .BYT 247 -0000F8r 1 F8 .BYT 248 -0000F9r 1 F9 .BYT 249 -0000FAr 1 FA .BYT 250 -0000FBr 1 FB .BYT 251 -0000FCr 1 FC .BYT 252 -0000FDr 1 FD .BYT 253 -0000FEr 1 FE .BYT 254 -0000FFr 1 FF .BYT 255 +000000r 1 ; upper case pseudo-op +000000r 1 00 .BYT 0 +000001r 1 01 .BYT 1 +000002r 1 02 .BYT 2 +000003r 1 03 .BYT 3 +000004r 1 04 .BYT 4 +000005r 1 05 .BYT 5 +000006r 1 06 .BYT 6 +000007r 1 07 .BYT 7 +000008r 1 08 .BYT 8 +000009r 1 09 .BYT 9 +00000Ar 1 0A .BYT 10 +00000Br 1 0B .BYT 11 +00000Cr 1 0C .BYT 12 +00000Dr 1 0D .BYT 13 +00000Er 1 0E .BYT 14 +00000Fr 1 0F .BYT 15 +000010r 1 10 .BYT 16 +000011r 1 11 .BYT 17 +000012r 1 12 .BYT 18 +000013r 1 13 .BYT 19 +000014r 1 14 .BYT 20 +000015r 1 15 .BYT 21 +000016r 1 16 .BYT 22 +000017r 1 17 .BYT 23 +000018r 1 18 .BYT 24 +000019r 1 19 .BYT 25 +00001Ar 1 1A .BYT 26 +00001Br 1 1B .BYT 27 +00001Cr 1 1C .BYT 28 +00001Dr 1 1D .BYT 29 +00001Er 1 1E .BYT 30 +00001Fr 1 1F .BYT 31 +000020r 1 20 .BYT 32 +000021r 1 21 .BYT 33 +000022r 1 22 .BYT 34 +000023r 1 23 .BYT 35 +000024r 1 24 .BYT 36 +000025r 1 25 .BYT 37 +000026r 1 26 .BYT 38 +000027r 1 27 .BYT 39 +000028r 1 28 .BYT 40 +000029r 1 29 .BYT 41 +00002Ar 1 2A .BYT 42 +00002Br 1 2B .BYT 43 +00002Cr 1 2C .BYT 44 +00002Dr 1 2D .BYT 45 +00002Er 1 2E .BYT 46 +00002Fr 1 2F .BYT 47 +000030r 1 30 .BYT 48 +000031r 1 31 .BYT 49 +000032r 1 32 .BYT 50 +000033r 1 33 .BYT 51 +000034r 1 34 .BYT 52 +000035r 1 35 .BYT 53 +000036r 1 36 .BYT 54 +000037r 1 37 .BYT 55 +000038r 1 38 .BYT 56 +000039r 1 39 .BYT 57 +00003Ar 1 3A .BYT 58 +00003Br 1 3B .BYT 59 +00003Cr 1 3C .BYT 60 +00003Dr 1 3D .BYT 61 +00003Er 1 3E .BYT 62 +00003Fr 1 3F .BYT 63 +000040r 1 40 .BYT 64 +000041r 1 41 .BYT 65 +000042r 1 42 .BYT 66 +000043r 1 43 .BYT 67 +000044r 1 44 .BYT 68 +000045r 1 45 .BYT 69 +000046r 1 46 .BYT 70 +000047r 1 47 .BYT 71 +000048r 1 48 .BYT 72 +000049r 1 49 .BYT 73 +00004Ar 1 4A .BYT 74 +00004Br 1 4B .BYT 75 +00004Cr 1 4C .BYT 76 +00004Dr 1 4D .BYT 77 +00004Er 1 4E .BYT 78 +00004Fr 1 4F .BYT 79 +000050r 1 50 .BYT 80 +000051r 1 51 .BYT 81 +000052r 1 52 .BYT 82 +000053r 1 53 .BYT 83 +000054r 1 54 .BYT 84 +000055r 1 55 .BYT 85 +000056r 1 56 .BYT 86 +000057r 1 57 .BYT 87 +000058r 1 58 .BYT 88 +000059r 1 59 .BYT 89 +00005Ar 1 5A .BYT 90 +00005Br 1 5B .BYT 91 +00005Cr 1 5C .BYT 92 +00005Dr 1 5D .BYT 93 +00005Er 1 5E .BYT 94 +00005Fr 1 5F .BYT 95 +000060r 1 60 .BYT 96 +000061r 1 61 .BYT 97 +000062r 1 62 .BYT 98 +000063r 1 63 .BYT 99 +000064r 1 64 .BYT 100 +000065r 1 65 .BYT 101 +000066r 1 66 .BYT 102 +000067r 1 67 .BYT 103 +000068r 1 68 .BYT 104 +000069r 1 69 .BYT 105 +00006Ar 1 6A .BYT 106 +00006Br 1 6B .BYT 107 +00006Cr 1 6C .BYT 108 +00006Dr 1 6D .BYT 109 +00006Er 1 6E .BYT 110 +00006Fr 1 6F .BYT 111 +000070r 1 70 .BYT 112 +000071r 1 71 .BYT 113 +000072r 1 72 .BYT 114 +000073r 1 73 .BYT 115 +000074r 1 74 .BYT 116 +000075r 1 75 .BYT 117 +000076r 1 76 .BYT 118 +000077r 1 77 .BYT 119 +000078r 1 78 .BYT 120 +000079r 1 79 .BYT 121 +00007Ar 1 7A .BYT 122 +00007Br 1 7B .BYT 123 +00007Cr 1 7C .BYT 124 +00007Dr 1 7D .BYT 125 +00007Er 1 7E .BYT 126 +00007Fr 1 7F .BYT 127 +000080r 1 80 .BYT 128 +000081r 1 81 .BYT 129 +000082r 1 82 .BYT 130 +000083r 1 83 .BYT 131 +000084r 1 84 .BYT 132 +000085r 1 85 .BYT 133 +000086r 1 86 .BYT 134 +000087r 1 87 .BYT 135 +000088r 1 88 .BYT 136 +000089r 1 89 .BYT 137 +00008Ar 1 8A .BYT 138 +00008Br 1 8B .BYT 139 +00008Cr 1 8C .BYT 140 +00008Dr 1 8D .BYT 141 +00008Er 1 8E .BYT 142 +00008Fr 1 8F .BYT 143 +000090r 1 90 .BYT 144 +000091r 1 91 .BYT 145 +000092r 1 92 .BYT 146 +000093r 1 93 .BYT 147 +000094r 1 94 .BYT 148 +000095r 1 95 .BYT 149 +000096r 1 96 .BYT 150 +000097r 1 97 .BYT 151 +000098r 1 98 .BYT 152 +000099r 1 99 .BYT 153 +00009Ar 1 9A .BYT 154 +00009Br 1 9B .BYT 155 +00009Cr 1 9C .BYT 156 +00009Dr 1 9D .BYT 157 +00009Er 1 9E .BYT 158 +00009Fr 1 9F .BYT 159 +0000A0r 1 A0 .BYT 160 +0000A1r 1 A1 .BYT 161 +0000A2r 1 A2 .BYT 162 +0000A3r 1 A3 .BYT 163 +0000A4r 1 A4 .BYT 164 +0000A5r 1 A5 .BYT 165 +0000A6r 1 A6 .BYT 166 +0000A7r 1 A7 .BYT 167 +0000A8r 1 A8 .BYT 168 +0000A9r 1 A9 .BYT 169 +0000AAr 1 AA .BYT 170 +0000ABr 1 AB .BYT 171 +0000ACr 1 AC .BYT 172 +0000ADr 1 AD .BYT 173 +0000AEr 1 AE .BYT 174 +0000AFr 1 AF .BYT 175 +0000B0r 1 B0 .BYT 176 +0000B1r 1 B1 .BYT 177 +0000B2r 1 B2 .BYT 178 +0000B3r 1 B3 .BYT 179 +0000B4r 1 B4 .BYT 180 +0000B5r 1 B5 .BYT 181 +0000B6r 1 B6 .BYT 182 +0000B7r 1 B7 .BYT 183 +0000B8r 1 B8 .BYT 184 +0000B9r 1 B9 .BYT 185 +0000BAr 1 BA .BYT 186 +0000BBr 1 BB .BYT 187 +0000BCr 1 BC .BYT 188 +0000BDr 1 BD .BYT 189 +0000BEr 1 BE .BYT 190 +0000BFr 1 BF .BYT 191 +0000C0r 1 C0 .BYT 192 +0000C1r 1 C1 .BYT 193 +0000C2r 1 C2 .BYT 194 +0000C3r 1 C3 .BYT 195 +0000C4r 1 C4 .BYT 196 +0000C5r 1 C5 .BYT 197 +0000C6r 1 C6 .BYT 198 +0000C7r 1 C7 .BYT 199 +0000C8r 1 C8 .BYT 200 +0000C9r 1 C9 .BYT 201 +0000CAr 1 CA .BYT 202 +0000CBr 1 CB .BYT 203 +0000CCr 1 CC .BYT 204 +0000CDr 1 CD .BYT 205 +0000CEr 1 CE .BYT 206 +0000CFr 1 CF .BYT 207 +0000D0r 1 D0 .BYT 208 +0000D1r 1 D1 .BYT 209 +0000D2r 1 D2 .BYT 210 +0000D3r 1 D3 .BYT 211 +0000D4r 1 D4 .BYT 212 +0000D5r 1 D5 .BYT 213 +0000D6r 1 D6 .BYT 214 +0000D7r 1 D7 .BYT 215 +0000D8r 1 D8 .BYT 216 +0000D9r 1 D9 .BYT 217 +0000DAr 1 DA .BYT 218 +0000DBr 1 DB .BYT 219 +0000DCr 1 DC .BYT 220 +0000DDr 1 DD .BYT 221 +0000DEr 1 DE .BYT 222 +0000DFr 1 DF .BYT 223 +0000E0r 1 E0 .BYT 224 +0000E1r 1 E1 .BYT 225 +0000E2r 1 E2 .BYT 226 +0000E3r 1 E3 .BYT 227 +0000E4r 1 E4 .BYT 228 +0000E5r 1 E5 .BYT 229 +0000E6r 1 E6 .BYT 230 +0000E7r 1 E7 .BYT 231 +0000E8r 1 E8 .BYT 232 +0000E9r 1 E9 .BYT 233 +0000EAr 1 EA .BYT 234 +0000EBr 1 EB .BYT 235 +0000ECr 1 EC .BYT 236 +0000EDr 1 ED .BYT 237 +0000EEr 1 EE .BYT 238 +0000EFr 1 EF .BYT 239 +0000F0r 1 F0 .BYT 240 +0000F1r 1 F1 .BYT 241 +0000F2r 1 F2 .BYT 242 +0000F3r 1 F3 .BYT 243 +0000F4r 1 F4 .BYT 244 +0000F5r 1 F5 .BYT 245 +0000F6r 1 F6 .BYT 246 +0000F7r 1 F7 .BYT 247 +0000F8r 1 F8 .BYT 248 +0000F9r 1 F9 .BYT 249 +0000FAr 1 FA .BYT 250 +0000FBr 1 FB .BYT 251 +0000FCr 1 FC .BYT 252 +0000FDr 1 FD .BYT 253 +0000FEr 1 FE .BYT 254 +0000FFr 1 FF .BYT 255 000100r 1 -000100r 1 ; lower case pseudo-op -000100r 1 00 .byt 0 -000101r 1 01 .byt 1 -000102r 1 02 .byt 2 -000103r 1 03 .byt 3 -000104r 1 04 .byt 4 -000105r 1 05 .byt 5 -000106r 1 06 .byt 6 -000107r 1 07 .byt 7 -000108r 1 08 .byt 8 -000109r 1 09 .byt 9 -00010Ar 1 0A .byt 10 -00010Br 1 0B .byt 11 -00010Cr 1 0C .byt 12 -00010Dr 1 0D .byt 13 -00010Er 1 0E .byt 14 -00010Fr 1 0F .byt 15 -000110r 1 10 .byt 16 -000111r 1 11 .byt 17 -000112r 1 12 .byt 18 -000113r 1 13 .byt 19 -000114r 1 14 .byt 20 -000115r 1 15 .byt 21 -000116r 1 16 .byt 22 -000117r 1 17 .byt 23 -000118r 1 18 .byt 24 -000119r 1 19 .byt 25 -00011Ar 1 1A .byt 26 -00011Br 1 1B .byt 27 -00011Cr 1 1C .byt 28 -00011Dr 1 1D .byt 29 -00011Er 1 1E .byt 30 -00011Fr 1 1F .byt 31 -000120r 1 20 .byt 32 -000121r 1 21 .byt 33 -000122r 1 22 .byt 34 -000123r 1 23 .byt 35 -000124r 1 24 .byt 36 -000125r 1 25 .byt 37 -000126r 1 26 .byt 38 -000127r 1 27 .byt 39 -000128r 1 28 .byt 40 -000129r 1 29 .byt 41 -00012Ar 1 2A .byt 42 -00012Br 1 2B .byt 43 -00012Cr 1 2C .byt 44 -00012Dr 1 2D .byt 45 -00012Er 1 2E .byt 46 -00012Fr 1 2F .byt 47 -000130r 1 30 .byt 48 -000131r 1 31 .byt 49 -000132r 1 32 .byt 50 -000133r 1 33 .byt 51 -000134r 1 34 .byt 52 -000135r 1 35 .byt 53 -000136r 1 36 .byt 54 -000137r 1 37 .byt 55 -000138r 1 38 .byt 56 -000139r 1 39 .byt 57 -00013Ar 1 3A .byt 58 -00013Br 1 3B .byt 59 -00013Cr 1 3C .byt 60 -00013Dr 1 3D .byt 61 -00013Er 1 3E .byt 62 -00013Fr 1 3F .byt 63 -000140r 1 40 .byt 64 -000141r 1 41 .byt 65 -000142r 1 42 .byt 66 -000143r 1 43 .byt 67 -000144r 1 44 .byt 68 -000145r 1 45 .byt 69 -000146r 1 46 .byt 70 -000147r 1 47 .byt 71 -000148r 1 48 .byt 72 -000149r 1 49 .byt 73 -00014Ar 1 4A .byt 74 -00014Br 1 4B .byt 75 -00014Cr 1 4C .byt 76 -00014Dr 1 4D .byt 77 -00014Er 1 4E .byt 78 -00014Fr 1 4F .byt 79 -000150r 1 50 .byt 80 -000151r 1 51 .byt 81 -000152r 1 52 .byt 82 -000153r 1 53 .byt 83 -000154r 1 54 .byt 84 -000155r 1 55 .byt 85 -000156r 1 56 .byt 86 -000157r 1 57 .byt 87 -000158r 1 58 .byt 88 -000159r 1 59 .byt 89 -00015Ar 1 5A .byt 90 -00015Br 1 5B .byt 91 -00015Cr 1 5C .byt 92 -00015Dr 1 5D .byt 93 -00015Er 1 5E .byt 94 -00015Fr 1 5F .byt 95 -000160r 1 60 .byt 96 -000161r 1 61 .byt 97 -000162r 1 62 .byt 98 -000163r 1 63 .byt 99 -000164r 1 64 .byt 100 -000165r 1 65 .byt 101 -000166r 1 66 .byt 102 -000167r 1 67 .byt 103 -000168r 1 68 .byt 104 -000169r 1 69 .byt 105 -00016Ar 1 6A .byt 106 -00016Br 1 6B .byt 107 -00016Cr 1 6C .byt 108 -00016Dr 1 6D .byt 109 -00016Er 1 6E .byt 110 -00016Fr 1 6F .byt 111 -000170r 1 70 .byt 112 -000171r 1 71 .byt 113 -000172r 1 72 .byt 114 -000173r 1 73 .byt 115 -000174r 1 74 .byt 116 -000175r 1 75 .byt 117 -000176r 1 76 .byt 118 -000177r 1 77 .byt 119 -000178r 1 78 .byt 120 -000179r 1 79 .byt 121 -00017Ar 1 7A .byt 122 -00017Br 1 7B .byt 123 -00017Cr 1 7C .byt 124 -00017Dr 1 7D .byt 125 -00017Er 1 7E .byt 126 -00017Fr 1 7F .byt 127 -000180r 1 80 .byt 128 -000181r 1 81 .byt 129 -000182r 1 82 .byt 130 -000183r 1 83 .byt 131 -000184r 1 84 .byt 132 -000185r 1 85 .byt 133 -000186r 1 86 .byt 134 -000187r 1 87 .byt 135 -000188r 1 88 .byt 136 -000189r 1 89 .byt 137 -00018Ar 1 8A .byt 138 -00018Br 1 8B .byt 139 -00018Cr 1 8C .byt 140 -00018Dr 1 8D .byt 141 -00018Er 1 8E .byt 142 -00018Fr 1 8F .byt 143 -000190r 1 90 .byt 144 -000191r 1 91 .byt 145 -000192r 1 92 .byt 146 -000193r 1 93 .byt 147 -000194r 1 94 .byt 148 -000195r 1 95 .byt 149 -000196r 1 96 .byt 150 -000197r 1 97 .byt 151 -000198r 1 98 .byt 152 -000199r 1 99 .byt 153 -00019Ar 1 9A .byt 154 -00019Br 1 9B .byt 155 -00019Cr 1 9C .byt 156 -00019Dr 1 9D .byt 157 -00019Er 1 9E .byt 158 -00019Fr 1 9F .byt 159 -0001A0r 1 A0 .byt 160 -0001A1r 1 A1 .byt 161 -0001A2r 1 A2 .byt 162 -0001A3r 1 A3 .byt 163 -0001A4r 1 A4 .byt 164 -0001A5r 1 A5 .byt 165 -0001A6r 1 A6 .byt 166 -0001A7r 1 A7 .byt 167 -0001A8r 1 A8 .byt 168 -0001A9r 1 A9 .byt 169 -0001AAr 1 AA .byt 170 -0001ABr 1 AB .byt 171 -0001ACr 1 AC .byt 172 -0001ADr 1 AD .byt 173 -0001AEr 1 AE .byt 174 -0001AFr 1 AF .byt 175 -0001B0r 1 B0 .byt 176 -0001B1r 1 B1 .byt 177 -0001B2r 1 B2 .byt 178 -0001B3r 1 B3 .byt 179 -0001B4r 1 B4 .byt 180 -0001B5r 1 B5 .byt 181 -0001B6r 1 B6 .byt 182 -0001B7r 1 B7 .byt 183 -0001B8r 1 B8 .byt 184 -0001B9r 1 B9 .byt 185 -0001BAr 1 BA .byt 186 -0001BBr 1 BB .byt 187 -0001BCr 1 BC .byt 188 -0001BDr 1 BD .byt 189 -0001BEr 1 BE .byt 190 -0001BFr 1 BF .byt 191 -0001C0r 1 C0 .byt 192 -0001C1r 1 C1 .byt 193 -0001C2r 1 C2 .byt 194 -0001C3r 1 C3 .byt 195 -0001C4r 1 C4 .byt 196 -0001C5r 1 C5 .byt 197 -0001C6r 1 C6 .byt 198 -0001C7r 1 C7 .byt 199 -0001C8r 1 C8 .byt 200 -0001C9r 1 C9 .byt 201 -0001CAr 1 CA .byt 202 -0001CBr 1 CB .byt 203 -0001CCr 1 CC .byt 204 -0001CDr 1 CD .byt 205 -0001CEr 1 CE .byt 206 -0001CFr 1 CF .byt 207 -0001D0r 1 D0 .byt 208 -0001D1r 1 D1 .byt 209 -0001D2r 1 D2 .byt 210 -0001D3r 1 D3 .byt 211 -0001D4r 1 D4 .byt 212 -0001D5r 1 D5 .byt 213 -0001D6r 1 D6 .byt 214 -0001D7r 1 D7 .byt 215 -0001D8r 1 D8 .byt 216 -0001D9r 1 D9 .byt 217 -0001DAr 1 DA .byt 218 -0001DBr 1 DB .byt 219 -0001DCr 1 DC .byt 220 -0001DDr 1 DD .byt 221 -0001DEr 1 DE .byt 222 -0001DFr 1 DF .byt 223 -0001E0r 1 E0 .byt 224 -0001E1r 1 E1 .byt 225 -0001E2r 1 E2 .byt 226 -0001E3r 1 E3 .byt 227 -0001E4r 1 E4 .byt 228 -0001E5r 1 E5 .byt 229 -0001E6r 1 E6 .byt 230 -0001E7r 1 E7 .byt 231 -0001E8r 1 E8 .byt 232 -0001E9r 1 E9 .byt 233 -0001EAr 1 EA .byt 234 -0001EBr 1 EB .byt 235 -0001ECr 1 EC .byt 236 -0001EDr 1 ED .byt 237 -0001EEr 1 EE .byt 238 -0001EFr 1 EF .byt 239 -0001F0r 1 F0 .byt 240 -0001F1r 1 F1 .byt 241 -0001F2r 1 F2 .byt 242 -0001F3r 1 F3 .byt 243 -0001F4r 1 F4 .byt 244 -0001F5r 1 F5 .byt 245 -0001F6r 1 F6 .byt 246 -0001F7r 1 F7 .byt 247 -0001F8r 1 F8 .byt 248 -0001F9r 1 F9 .byt 249 -0001FAr 1 FA .byt 250 -0001FBr 1 FB .byt 251 -0001FCr 1 FC .byt 252 -0001FDr 1 FD .byt 253 -0001FEr 1 FE .byt 254 -0001FFr 1 FF .byt 255 +000100r 1 ; lower case pseudo-op +000100r 1 00 .byt 0 +000101r 1 01 .byt 1 +000102r 1 02 .byt 2 +000103r 1 03 .byt 3 +000104r 1 04 .byt 4 +000105r 1 05 .byt 5 +000106r 1 06 .byt 6 +000107r 1 07 .byt 7 +000108r 1 08 .byt 8 +000109r 1 09 .byt 9 +00010Ar 1 0A .byt 10 +00010Br 1 0B .byt 11 +00010Cr 1 0C .byt 12 +00010Dr 1 0D .byt 13 +00010Er 1 0E .byt 14 +00010Fr 1 0F .byt 15 +000110r 1 10 .byt 16 +000111r 1 11 .byt 17 +000112r 1 12 .byt 18 +000113r 1 13 .byt 19 +000114r 1 14 .byt 20 +000115r 1 15 .byt 21 +000116r 1 16 .byt 22 +000117r 1 17 .byt 23 +000118r 1 18 .byt 24 +000119r 1 19 .byt 25 +00011Ar 1 1A .byt 26 +00011Br 1 1B .byt 27 +00011Cr 1 1C .byt 28 +00011Dr 1 1D .byt 29 +00011Er 1 1E .byt 30 +00011Fr 1 1F .byt 31 +000120r 1 20 .byt 32 +000121r 1 21 .byt 33 +000122r 1 22 .byt 34 +000123r 1 23 .byt 35 +000124r 1 24 .byt 36 +000125r 1 25 .byt 37 +000126r 1 26 .byt 38 +000127r 1 27 .byt 39 +000128r 1 28 .byt 40 +000129r 1 29 .byt 41 +00012Ar 1 2A .byt 42 +00012Br 1 2B .byt 43 +00012Cr 1 2C .byt 44 +00012Dr 1 2D .byt 45 +00012Er 1 2E .byt 46 +00012Fr 1 2F .byt 47 +000130r 1 30 .byt 48 +000131r 1 31 .byt 49 +000132r 1 32 .byt 50 +000133r 1 33 .byt 51 +000134r 1 34 .byt 52 +000135r 1 35 .byt 53 +000136r 1 36 .byt 54 +000137r 1 37 .byt 55 +000138r 1 38 .byt 56 +000139r 1 39 .byt 57 +00013Ar 1 3A .byt 58 +00013Br 1 3B .byt 59 +00013Cr 1 3C .byt 60 +00013Dr 1 3D .byt 61 +00013Er 1 3E .byt 62 +00013Fr 1 3F .byt 63 +000140r 1 40 .byt 64 +000141r 1 41 .byt 65 +000142r 1 42 .byt 66 +000143r 1 43 .byt 67 +000144r 1 44 .byt 68 +000145r 1 45 .byt 69 +000146r 1 46 .byt 70 +000147r 1 47 .byt 71 +000148r 1 48 .byt 72 +000149r 1 49 .byt 73 +00014Ar 1 4A .byt 74 +00014Br 1 4B .byt 75 +00014Cr 1 4C .byt 76 +00014Dr 1 4D .byt 77 +00014Er 1 4E .byt 78 +00014Fr 1 4F .byt 79 +000150r 1 50 .byt 80 +000151r 1 51 .byt 81 +000152r 1 52 .byt 82 +000153r 1 53 .byt 83 +000154r 1 54 .byt 84 +000155r 1 55 .byt 85 +000156r 1 56 .byt 86 +000157r 1 57 .byt 87 +000158r 1 58 .byt 88 +000159r 1 59 .byt 89 +00015Ar 1 5A .byt 90 +00015Br 1 5B .byt 91 +00015Cr 1 5C .byt 92 +00015Dr 1 5D .byt 93 +00015Er 1 5E .byt 94 +00015Fr 1 5F .byt 95 +000160r 1 60 .byt 96 +000161r 1 61 .byt 97 +000162r 1 62 .byt 98 +000163r 1 63 .byt 99 +000164r 1 64 .byt 100 +000165r 1 65 .byt 101 +000166r 1 66 .byt 102 +000167r 1 67 .byt 103 +000168r 1 68 .byt 104 +000169r 1 69 .byt 105 +00016Ar 1 6A .byt 106 +00016Br 1 6B .byt 107 +00016Cr 1 6C .byt 108 +00016Dr 1 6D .byt 109 +00016Er 1 6E .byt 110 +00016Fr 1 6F .byt 111 +000170r 1 70 .byt 112 +000171r 1 71 .byt 113 +000172r 1 72 .byt 114 +000173r 1 73 .byt 115 +000174r 1 74 .byt 116 +000175r 1 75 .byt 117 +000176r 1 76 .byt 118 +000177r 1 77 .byt 119 +000178r 1 78 .byt 120 +000179r 1 79 .byt 121 +00017Ar 1 7A .byt 122 +00017Br 1 7B .byt 123 +00017Cr 1 7C .byt 124 +00017Dr 1 7D .byt 125 +00017Er 1 7E .byt 126 +00017Fr 1 7F .byt 127 +000180r 1 80 .byt 128 +000181r 1 81 .byt 129 +000182r 1 82 .byt 130 +000183r 1 83 .byt 131 +000184r 1 84 .byt 132 +000185r 1 85 .byt 133 +000186r 1 86 .byt 134 +000187r 1 87 .byt 135 +000188r 1 88 .byt 136 +000189r 1 89 .byt 137 +00018Ar 1 8A .byt 138 +00018Br 1 8B .byt 139 +00018Cr 1 8C .byt 140 +00018Dr 1 8D .byt 141 +00018Er 1 8E .byt 142 +00018Fr 1 8F .byt 143 +000190r 1 90 .byt 144 +000191r 1 91 .byt 145 +000192r 1 92 .byt 146 +000193r 1 93 .byt 147 +000194r 1 94 .byt 148 +000195r 1 95 .byt 149 +000196r 1 96 .byt 150 +000197r 1 97 .byt 151 +000198r 1 98 .byt 152 +000199r 1 99 .byt 153 +00019Ar 1 9A .byt 154 +00019Br 1 9B .byt 155 +00019Cr 1 9C .byt 156 +00019Dr 1 9D .byt 157 +00019Er 1 9E .byt 158 +00019Fr 1 9F .byt 159 +0001A0r 1 A0 .byt 160 +0001A1r 1 A1 .byt 161 +0001A2r 1 A2 .byt 162 +0001A3r 1 A3 .byt 163 +0001A4r 1 A4 .byt 164 +0001A5r 1 A5 .byt 165 +0001A6r 1 A6 .byt 166 +0001A7r 1 A7 .byt 167 +0001A8r 1 A8 .byt 168 +0001A9r 1 A9 .byt 169 +0001AAr 1 AA .byt 170 +0001ABr 1 AB .byt 171 +0001ACr 1 AC .byt 172 +0001ADr 1 AD .byt 173 +0001AEr 1 AE .byt 174 +0001AFr 1 AF .byt 175 +0001B0r 1 B0 .byt 176 +0001B1r 1 B1 .byt 177 +0001B2r 1 B2 .byt 178 +0001B3r 1 B3 .byt 179 +0001B4r 1 B4 .byt 180 +0001B5r 1 B5 .byt 181 +0001B6r 1 B6 .byt 182 +0001B7r 1 B7 .byt 183 +0001B8r 1 B8 .byt 184 +0001B9r 1 B9 .byt 185 +0001BAr 1 BA .byt 186 +0001BBr 1 BB .byt 187 +0001BCr 1 BC .byt 188 +0001BDr 1 BD .byt 189 +0001BEr 1 BE .byt 190 +0001BFr 1 BF .byt 191 +0001C0r 1 C0 .byt 192 +0001C1r 1 C1 .byt 193 +0001C2r 1 C2 .byt 194 +0001C3r 1 C3 .byt 195 +0001C4r 1 C4 .byt 196 +0001C5r 1 C5 .byt 197 +0001C6r 1 C6 .byt 198 +0001C7r 1 C7 .byt 199 +0001C8r 1 C8 .byt 200 +0001C9r 1 C9 .byt 201 +0001CAr 1 CA .byt 202 +0001CBr 1 CB .byt 203 +0001CCr 1 CC .byt 204 +0001CDr 1 CD .byt 205 +0001CEr 1 CE .byt 206 +0001CFr 1 CF .byt 207 +0001D0r 1 D0 .byt 208 +0001D1r 1 D1 .byt 209 +0001D2r 1 D2 .byt 210 +0001D3r 1 D3 .byt 211 +0001D4r 1 D4 .byt 212 +0001D5r 1 D5 .byt 213 +0001D6r 1 D6 .byt 214 +0001D7r 1 D7 .byt 215 +0001D8r 1 D8 .byt 216 +0001D9r 1 D9 .byt 217 +0001DAr 1 DA .byt 218 +0001DBr 1 DB .byt 219 +0001DCr 1 DC .byt 220 +0001DDr 1 DD .byt 221 +0001DEr 1 DE .byt 222 +0001DFr 1 DF .byt 223 +0001E0r 1 E0 .byt 224 +0001E1r 1 E1 .byt 225 +0001E2r 1 E2 .byt 226 +0001E3r 1 E3 .byt 227 +0001E4r 1 E4 .byt 228 +0001E5r 1 E5 .byt 229 +0001E6r 1 E6 .byt 230 +0001E7r 1 E7 .byt 231 +0001E8r 1 E8 .byt 232 +0001E9r 1 E9 .byt 233 +0001EAr 1 EA .byt 234 +0001EBr 1 EB .byt 235 +0001ECr 1 EC .byt 236 +0001EDr 1 ED .byt 237 +0001EEr 1 EE .byt 238 +0001EFr 1 EF .byt 239 +0001F0r 1 F0 .byt 240 +0001F1r 1 F1 .byt 241 +0001F2r 1 F2 .byt 242 +0001F3r 1 F3 .byt 243 +0001F4r 1 F4 .byt 244 +0001F5r 1 F5 .byt 245 +0001F6r 1 F6 .byt 246 +0001F7r 1 F7 .byt 247 +0001F8r 1 F8 .byt 248 +0001F9r 1 F9 .byt 249 +0001FAr 1 FA .byt 250 +0001FBr 1 FB .byt 251 +0001FCr 1 FC .byt 252 +0001FDr 1 FD .byt 253 +0001FEr 1 FE .byt 254 +0001FFr 1 FF .byt 255 000200r 1 -000200r 1 ; hex values -000200r 1 00 .byt $0 -000201r 1 01 .byt $1 -000202r 1 02 .byt $2 -000203r 1 03 .byt $3 -000204r 1 04 .byt $4 -000205r 1 05 .byt $5 -000206r 1 06 .byt $6 -000207r 1 07 .byt $7 -000208r 1 08 .byt $8 -000209r 1 09 .byt $9 -00020Ar 1 0A .byt $a -00020Br 1 0B .byt $b -00020Cr 1 0C .byt $c -00020Dr 1 0D .byt $d -00020Er 1 0E .byt $e -00020Fr 1 0F .byt $f -000210r 1 10 .byt $10 -000211r 1 11 .byt $11 -000212r 1 12 .byt $12 -000213r 1 13 .byt $13 -000214r 1 14 .byt $14 -000215r 1 15 .byt $15 -000216r 1 16 .byt $16 -000217r 1 17 .byt $17 -000218r 1 18 .byt $18 -000219r 1 19 .byt $19 -00021Ar 1 1A .byt $1a -00021Br 1 1B .byt $1b -00021Cr 1 1C .byt $1c -00021Dr 1 1D .byt $1d -00021Er 1 1E .byt $1e -00021Fr 1 1F .byt $1f -000220r 1 20 .byt $20 -000221r 1 21 .byt $21 -000222r 1 22 .byt $22 -000223r 1 23 .byt $23 -000224r 1 24 .byt $24 -000225r 1 25 .byt $25 -000226r 1 26 .byt $26 -000227r 1 27 .byt $27 -000228r 1 28 .byt $28 -000229r 1 29 .byt $29 -00022Ar 1 2A .byt $2a -00022Br 1 2B .byt $2b -00022Cr 1 2C .byt $2c -00022Dr 1 2D .byt $2d -00022Er 1 2E .byt $2e -00022Fr 1 2F .byt $2f -000230r 1 30 .byt $30 -000231r 1 31 .byt $31 -000232r 1 32 .byt $32 -000233r 1 33 .byt $33 -000234r 1 34 .byt $34 -000235r 1 35 .byt $35 -000236r 1 36 .byt $36 -000237r 1 37 .byt $37 -000238r 1 38 .byt $38 -000239r 1 39 .byt $39 -00023Ar 1 3A .byt $3a -00023Br 1 3B .byt $3b -00023Cr 1 3C .byt $3c -00023Dr 1 3D .byt $3d -00023Er 1 3E .byt $3e -00023Fr 1 3F .byt $3f -000240r 1 40 .byt $40 -000241r 1 41 .byt $41 -000242r 1 42 .byt $42 -000243r 1 43 .byt $43 -000244r 1 44 .byt $44 -000245r 1 45 .byt $45 -000246r 1 46 .byt $46 -000247r 1 47 .byt $47 -000248r 1 48 .byt $48 -000249r 1 49 .byt $49 -00024Ar 1 4A .byt $4a -00024Br 1 4B .byt $4b -00024Cr 1 4C .byt $4c -00024Dr 1 4D .byt $4d -00024Er 1 4E .byt $4e -00024Fr 1 4F .byt $4f -000250r 1 50 .byt $50 -000251r 1 51 .byt $51 -000252r 1 52 .byt $52 -000253r 1 53 .byt $53 -000254r 1 54 .byt $54 -000255r 1 55 .byt $55 -000256r 1 56 .byt $56 -000257r 1 57 .byt $57 -000258r 1 58 .byt $58 -000259r 1 59 .byt $59 -00025Ar 1 5A .byt $5a -00025Br 1 5B .byt $5b -00025Cr 1 5C .byt $5c -00025Dr 1 5D .byt $5d -00025Er 1 5E .byt $5e -00025Fr 1 5F .byt $5f -000260r 1 60 .byt $60 -000261r 1 61 .byt $61 -000262r 1 62 .byt $62 -000263r 1 63 .byt $63 -000264r 1 64 .byt $64 -000265r 1 65 .byt $65 -000266r 1 66 .byt $66 -000267r 1 67 .byt $67 -000268r 1 68 .byt $68 -000269r 1 69 .byt $69 -00026Ar 1 6A .byt $6a -00026Br 1 6B .byt $6b -00026Cr 1 6C .byt $6c -00026Dr 1 6D .byt $6d -00026Er 1 6E .byt $6e -00026Fr 1 6F .byt $6f -000270r 1 70 .byt $70 -000271r 1 71 .byt $71 -000272r 1 72 .byt $72 -000273r 1 73 .byt $73 -000274r 1 74 .byt $74 -000275r 1 75 .byt $75 -000276r 1 76 .byt $76 -000277r 1 77 .byt $77 -000278r 1 78 .byt $78 -000279r 1 79 .byt $79 -00027Ar 1 7A .byt $7a -00027Br 1 7B .byt $7b -00027Cr 1 7C .byt $7c -00027Dr 1 7D .byt $7d -00027Er 1 7E .byt $7e -00027Fr 1 7F .byt $7f -000280r 1 80 .byt $80 -000281r 1 81 .byt $81 -000282r 1 82 .byt $82 -000283r 1 83 .byt $83 -000284r 1 84 .byt $84 -000285r 1 85 .byt $85 -000286r 1 86 .byt $86 -000287r 1 87 .byt $87 -000288r 1 88 .byt $88 -000289r 1 89 .byt $89 -00028Ar 1 8A .byt $8a -00028Br 1 8B .byt $8b -00028Cr 1 8C .byt $8c -00028Dr 1 8D .byt $8d -00028Er 1 8E .byt $8e -00028Fr 1 8F .byt $8f -000290r 1 90 .byt $90 -000291r 1 91 .byt $91 -000292r 1 92 .byt $92 -000293r 1 93 .byt $93 -000294r 1 94 .byt $94 -000295r 1 95 .byt $95 -000296r 1 96 .byt $96 -000297r 1 97 .byt $97 -000298r 1 98 .byt $98 -000299r 1 99 .byt $99 -00029Ar 1 9A .byt $9a -00029Br 1 9B .byt $9b -00029Cr 1 9C .byt $9c -00029Dr 1 9D .byt $9d -00029Er 1 9E .byt $9e -00029Fr 1 9F .byt $9f -0002A0r 1 A0 .byt $a0 -0002A1r 1 A1 .byt $a1 -0002A2r 1 A2 .byt $a2 -0002A3r 1 A3 .byt $a3 -0002A4r 1 A4 .byt $a4 -0002A5r 1 A5 .byt $a5 -0002A6r 1 A6 .byt $a6 -0002A7r 1 A7 .byt $a7 -0002A8r 1 A8 .byt $a8 -0002A9r 1 A9 .byt $a9 -0002AAr 1 AA .byt $aa -0002ABr 1 AB .byt $ab -0002ACr 1 AC .byt $ac -0002ADr 1 AD .byt $ad -0002AEr 1 AE .byt $ae -0002AFr 1 AF .byt $af -0002B0r 1 B0 .byt $b0 -0002B1r 1 B1 .byt $b1 -0002B2r 1 B2 .byt $b2 -0002B3r 1 B3 .byt $b3 -0002B4r 1 B4 .byt $b4 -0002B5r 1 B5 .byt $b5 -0002B6r 1 B6 .byt $b6 -0002B7r 1 B7 .byt $b7 -0002B8r 1 B8 .byt $b8 -0002B9r 1 B9 .byt $b9 -0002BAr 1 BA .byt $ba -0002BBr 1 BB .byt $bb -0002BCr 1 BC .byt $bc -0002BDr 1 BD .byt $bd -0002BEr 1 BE .byt $be -0002BFr 1 BF .byt $bf -0002C0r 1 C0 .byt $c0 -0002C1r 1 C1 .byt $c1 -0002C2r 1 C2 .byt $c2 -0002C3r 1 C3 .byt $c3 -0002C4r 1 C4 .byt $c4 -0002C5r 1 C5 .byt $c5 -0002C6r 1 C6 .byt $c6 -0002C7r 1 C7 .byt $c7 -0002C8r 1 C8 .byt $c8 -0002C9r 1 C9 .byt $c9 -0002CAr 1 CA .byt $ca -0002CBr 1 CB .byt $cb -0002CCr 1 CC .byt $cc -0002CDr 1 CD .byt $cd -0002CEr 1 CE .byt $ce -0002CFr 1 CF .byt $cf -0002D0r 1 D0 .byt $d0 -0002D1r 1 D1 .byt $d1 -0002D2r 1 D2 .byt $d2 -0002D3r 1 D3 .byt $d3 -0002D4r 1 D4 .byt $d4 -0002D5r 1 D5 .byt $d5 -0002D6r 1 D6 .byt $d6 -0002D7r 1 D7 .byt $d7 -0002D8r 1 D8 .byt $d8 -0002D9r 1 D9 .byt $d9 -0002DAr 1 DA .byt $da -0002DBr 1 DB .byt $db -0002DCr 1 DC .byt $dc -0002DDr 1 DD .byt $dd -0002DEr 1 DE .byt $de -0002DFr 1 DF .byt $df -0002E0r 1 E0 .byt $e0 -0002E1r 1 E1 .byt $e1 -0002E2r 1 E2 .byt $e2 -0002E3r 1 E3 .byt $e3 -0002E4r 1 E4 .byt $e4 -0002E5r 1 E5 .byt $e5 -0002E6r 1 E6 .byt $e6 -0002E7r 1 E7 .byt $e7 -0002E8r 1 E8 .byt $e8 -0002E9r 1 E9 .byt $e9 -0002EAr 1 EA .byt $ea -0002EBr 1 EB .byt $eb -0002ECr 1 EC .byt $ec -0002EDr 1 ED .byt $ed -0002EEr 1 EE .byt $ee -0002EFr 1 EF .byt $ef -0002F0r 1 F0 .byt $f0 -0002F1r 1 F1 .byt $f1 -0002F2r 1 F2 .byt $f2 -0002F3r 1 F3 .byt $f3 -0002F4r 1 F4 .byt $f4 -0002F5r 1 F5 .byt $f5 -0002F6r 1 F6 .byt $f6 -0002F7r 1 F7 .byt $f7 -0002F8r 1 F8 .byt $f8 -0002F9r 1 F9 .byt $f9 -0002FAr 1 FA .byt $fa -0002FBr 1 FB .byt $fb -0002FCr 1 FC .byt $fc -0002FDr 1 FD .byt $fd -0002FEr 1 FE .byt $fe -0002FFr 1 FF .byt $ff +000200r 1 ; hex values +000200r 1 00 .byt $0 +000201r 1 01 .byt $1 +000202r 1 02 .byt $2 +000203r 1 03 .byt $3 +000204r 1 04 .byt $4 +000205r 1 05 .byt $5 +000206r 1 06 .byt $6 +000207r 1 07 .byt $7 +000208r 1 08 .byt $8 +000209r 1 09 .byt $9 +00020Ar 1 0A .byt $a +00020Br 1 0B .byt $b +00020Cr 1 0C .byt $c +00020Dr 1 0D .byt $d +00020Er 1 0E .byt $e +00020Fr 1 0F .byt $f +000210r 1 10 .byt $10 +000211r 1 11 .byt $11 +000212r 1 12 .byt $12 +000213r 1 13 .byt $13 +000214r 1 14 .byt $14 +000215r 1 15 .byt $15 +000216r 1 16 .byt $16 +000217r 1 17 .byt $17 +000218r 1 18 .byt $18 +000219r 1 19 .byt $19 +00021Ar 1 1A .byt $1a +00021Br 1 1B .byt $1b +00021Cr 1 1C .byt $1c +00021Dr 1 1D .byt $1d +00021Er 1 1E .byt $1e +00021Fr 1 1F .byt $1f +000220r 1 20 .byt $20 +000221r 1 21 .byt $21 +000222r 1 22 .byt $22 +000223r 1 23 .byt $23 +000224r 1 24 .byt $24 +000225r 1 25 .byt $25 +000226r 1 26 .byt $26 +000227r 1 27 .byt $27 +000228r 1 28 .byt $28 +000229r 1 29 .byt $29 +00022Ar 1 2A .byt $2a +00022Br 1 2B .byt $2b +00022Cr 1 2C .byt $2c +00022Dr 1 2D .byt $2d +00022Er 1 2E .byt $2e +00022Fr 1 2F .byt $2f +000230r 1 30 .byt $30 +000231r 1 31 .byt $31 +000232r 1 32 .byt $32 +000233r 1 33 .byt $33 +000234r 1 34 .byt $34 +000235r 1 35 .byt $35 +000236r 1 36 .byt $36 +000237r 1 37 .byt $37 +000238r 1 38 .byt $38 +000239r 1 39 .byt $39 +00023Ar 1 3A .byt $3a +00023Br 1 3B .byt $3b +00023Cr 1 3C .byt $3c +00023Dr 1 3D .byt $3d +00023Er 1 3E .byt $3e +00023Fr 1 3F .byt $3f +000240r 1 40 .byt $40 +000241r 1 41 .byt $41 +000242r 1 42 .byt $42 +000243r 1 43 .byt $43 +000244r 1 44 .byt $44 +000245r 1 45 .byt $45 +000246r 1 46 .byt $46 +000247r 1 47 .byt $47 +000248r 1 48 .byt $48 +000249r 1 49 .byt $49 +00024Ar 1 4A .byt $4a +00024Br 1 4B .byt $4b +00024Cr 1 4C .byt $4c +00024Dr 1 4D .byt $4d +00024Er 1 4E .byt $4e +00024Fr 1 4F .byt $4f +000250r 1 50 .byt $50 +000251r 1 51 .byt $51 +000252r 1 52 .byt $52 +000253r 1 53 .byt $53 +000254r 1 54 .byt $54 +000255r 1 55 .byt $55 +000256r 1 56 .byt $56 +000257r 1 57 .byt $57 +000258r 1 58 .byt $58 +000259r 1 59 .byt $59 +00025Ar 1 5A .byt $5a +00025Br 1 5B .byt $5b +00025Cr 1 5C .byt $5c +00025Dr 1 5D .byt $5d +00025Er 1 5E .byt $5e +00025Fr 1 5F .byt $5f +000260r 1 60 .byt $60 +000261r 1 61 .byt $61 +000262r 1 62 .byt $62 +000263r 1 63 .byt $63 +000264r 1 64 .byt $64 +000265r 1 65 .byt $65 +000266r 1 66 .byt $66 +000267r 1 67 .byt $67 +000268r 1 68 .byt $68 +000269r 1 69 .byt $69 +00026Ar 1 6A .byt $6a +00026Br 1 6B .byt $6b +00026Cr 1 6C .byt $6c +00026Dr 1 6D .byt $6d +00026Er 1 6E .byt $6e +00026Fr 1 6F .byt $6f +000270r 1 70 .byt $70 +000271r 1 71 .byt $71 +000272r 1 72 .byt $72 +000273r 1 73 .byt $73 +000274r 1 74 .byt $74 +000275r 1 75 .byt $75 +000276r 1 76 .byt $76 +000277r 1 77 .byt $77 +000278r 1 78 .byt $78 +000279r 1 79 .byt $79 +00027Ar 1 7A .byt $7a +00027Br 1 7B .byt $7b +00027Cr 1 7C .byt $7c +00027Dr 1 7D .byt $7d +00027Er 1 7E .byt $7e +00027Fr 1 7F .byt $7f +000280r 1 80 .byt $80 +000281r 1 81 .byt $81 +000282r 1 82 .byt $82 +000283r 1 83 .byt $83 +000284r 1 84 .byt $84 +000285r 1 85 .byt $85 +000286r 1 86 .byt $86 +000287r 1 87 .byt $87 +000288r 1 88 .byt $88 +000289r 1 89 .byt $89 +00028Ar 1 8A .byt $8a +00028Br 1 8B .byt $8b +00028Cr 1 8C .byt $8c +00028Dr 1 8D .byt $8d +00028Er 1 8E .byt $8e +00028Fr 1 8F .byt $8f +000290r 1 90 .byt $90 +000291r 1 91 .byt $91 +000292r 1 92 .byt $92 +000293r 1 93 .byt $93 +000294r 1 94 .byt $94 +000295r 1 95 .byt $95 +000296r 1 96 .byt $96 +000297r 1 97 .byt $97 +000298r 1 98 .byt $98 +000299r 1 99 .byt $99 +00029Ar 1 9A .byt $9a +00029Br 1 9B .byt $9b +00029Cr 1 9C .byt $9c +00029Dr 1 9D .byt $9d +00029Er 1 9E .byt $9e +00029Fr 1 9F .byt $9f +0002A0r 1 A0 .byt $a0 +0002A1r 1 A1 .byt $a1 +0002A2r 1 A2 .byt $a2 +0002A3r 1 A3 .byt $a3 +0002A4r 1 A4 .byt $a4 +0002A5r 1 A5 .byt $a5 +0002A6r 1 A6 .byt $a6 +0002A7r 1 A7 .byt $a7 +0002A8r 1 A8 .byt $a8 +0002A9r 1 A9 .byt $a9 +0002AAr 1 AA .byt $aa +0002ABr 1 AB .byt $ab +0002ACr 1 AC .byt $ac +0002ADr 1 AD .byt $ad +0002AEr 1 AE .byt $ae +0002AFr 1 AF .byt $af +0002B0r 1 B0 .byt $b0 +0002B1r 1 B1 .byt $b1 +0002B2r 1 B2 .byt $b2 +0002B3r 1 B3 .byt $b3 +0002B4r 1 B4 .byt $b4 +0002B5r 1 B5 .byt $b5 +0002B6r 1 B6 .byt $b6 +0002B7r 1 B7 .byt $b7 +0002B8r 1 B8 .byt $b8 +0002B9r 1 B9 .byt $b9 +0002BAr 1 BA .byt $ba +0002BBr 1 BB .byt $bb +0002BCr 1 BC .byt $bc +0002BDr 1 BD .byt $bd +0002BEr 1 BE .byt $be +0002BFr 1 BF .byt $bf +0002C0r 1 C0 .byt $c0 +0002C1r 1 C1 .byt $c1 +0002C2r 1 C2 .byt $c2 +0002C3r 1 C3 .byt $c3 +0002C4r 1 C4 .byt $c4 +0002C5r 1 C5 .byt $c5 +0002C6r 1 C6 .byt $c6 +0002C7r 1 C7 .byt $c7 +0002C8r 1 C8 .byt $c8 +0002C9r 1 C9 .byt $c9 +0002CAr 1 CA .byt $ca +0002CBr 1 CB .byt $cb +0002CCr 1 CC .byt $cc +0002CDr 1 CD .byt $cd +0002CEr 1 CE .byt $ce +0002CFr 1 CF .byt $cf +0002D0r 1 D0 .byt $d0 +0002D1r 1 D1 .byt $d1 +0002D2r 1 D2 .byt $d2 +0002D3r 1 D3 .byt $d3 +0002D4r 1 D4 .byt $d4 +0002D5r 1 D5 .byt $d5 +0002D6r 1 D6 .byt $d6 +0002D7r 1 D7 .byt $d7 +0002D8r 1 D8 .byt $d8 +0002D9r 1 D9 .byt $d9 +0002DAr 1 DA .byt $da +0002DBr 1 DB .byt $db +0002DCr 1 DC .byt $dc +0002DDr 1 DD .byt $dd +0002DEr 1 DE .byt $de +0002DFr 1 DF .byt $df +0002E0r 1 E0 .byt $e0 +0002E1r 1 E1 .byt $e1 +0002E2r 1 E2 .byt $e2 +0002E3r 1 E3 .byt $e3 +0002E4r 1 E4 .byt $e4 +0002E5r 1 E5 .byt $e5 +0002E6r 1 E6 .byt $e6 +0002E7r 1 E7 .byt $e7 +0002E8r 1 E8 .byt $e8 +0002E9r 1 E9 .byt $e9 +0002EAr 1 EA .byt $ea +0002EBr 1 EB .byt $eb +0002ECr 1 EC .byt $ec +0002EDr 1 ED .byt $ed +0002EEr 1 EE .byt $ee +0002EFr 1 EF .byt $ef +0002F0r 1 F0 .byt $f0 +0002F1r 1 F1 .byt $f1 +0002F2r 1 F2 .byt $f2 +0002F3r 1 F3 .byt $f3 +0002F4r 1 F4 .byt $f4 +0002F5r 1 F5 .byt $f5 +0002F6r 1 F6 .byt $f6 +0002F7r 1 F7 .byt $f7 +0002F8r 1 F8 .byt $f8 +0002F9r 1 F9 .byt $f9 +0002FAr 1 FA .byt $fa +0002FBr 1 FB .byt $fb +0002FCr 1 FC .byt $fc +0002FDr 1 FD .byt $fd +0002FEr 1 FE .byt $fe +0002FFr 1 FF .byt $ff 000300r 1 -000300r 1 ; hex values, uppercase -000300r 1 00 .byt $0 -000301r 1 01 .byt $1 -000302r 1 02 .byt $2 -000303r 1 03 .byt $3 -000304r 1 04 .byt $4 -000305r 1 05 .byt $5 -000306r 1 06 .byt $6 -000307r 1 07 .byt $7 -000308r 1 08 .byt $8 -000309r 1 09 .byt $9 -00030Ar 1 0A .byt $A -00030Br 1 0B .byt $B -00030Cr 1 0C .byt $C -00030Dr 1 0D .byt $D -00030Er 1 0E .byt $E -00030Fr 1 0F .byt $F -000310r 1 10 .byt $10 -000311r 1 11 .byt $11 -000312r 1 12 .byt $12 -000313r 1 13 .byt $13 -000314r 1 14 .byt $14 -000315r 1 15 .byt $15 -000316r 1 16 .byt $16 -000317r 1 17 .byt $17 -000318r 1 18 .byt $18 -000319r 1 19 .byt $19 -00031Ar 1 1A .byt $1A -00031Br 1 1B .byt $1B -00031Cr 1 1C .byt $1C -00031Dr 1 1D .byt $1D -00031Er 1 1E .byt $1E -00031Fr 1 1F .byt $1F -000320r 1 20 .byt $20 -000321r 1 21 .byt $21 -000322r 1 22 .byt $22 -000323r 1 23 .byt $23 -000324r 1 24 .byt $24 -000325r 1 25 .byt $25 -000326r 1 26 .byt $26 -000327r 1 27 .byt $27 -000328r 1 28 .byt $28 -000329r 1 29 .byt $29 -00032Ar 1 2A .byt $2A -00032Br 1 2B .byt $2B -00032Cr 1 2C .byt $2C -00032Dr 1 2D .byt $2D -00032Er 1 2E .byt $2E -00032Fr 1 2F .byt $2F -000330r 1 30 .byt $30 -000331r 1 31 .byt $31 -000332r 1 32 .byt $32 -000333r 1 33 .byt $33 -000334r 1 34 .byt $34 -000335r 1 35 .byt $35 -000336r 1 36 .byt $36 -000337r 1 37 .byt $37 -000338r 1 38 .byt $38 -000339r 1 39 .byt $39 -00033Ar 1 3A .byt $3A -00033Br 1 3B .byt $3B -00033Cr 1 3C .byt $3C -00033Dr 1 3D .byt $3D -00033Er 1 3E .byt $3E -00033Fr 1 3F .byt $3F -000340r 1 40 .byt $40 -000341r 1 41 .byt $41 -000342r 1 42 .byt $42 -000343r 1 43 .byt $43 -000344r 1 44 .byt $44 -000345r 1 45 .byt $45 -000346r 1 46 .byt $46 -000347r 1 47 .byt $47 -000348r 1 48 .byt $48 -000349r 1 49 .byt $49 -00034Ar 1 4A .byt $4A -00034Br 1 4B .byt $4B -00034Cr 1 4C .byt $4C -00034Dr 1 4D .byt $4D -00034Er 1 4E .byt $4E -00034Fr 1 4F .byt $4F -000350r 1 50 .byt $50 -000351r 1 51 .byt $51 -000352r 1 52 .byt $52 -000353r 1 53 .byt $53 -000354r 1 54 .byt $54 -000355r 1 55 .byt $55 -000356r 1 56 .byt $56 -000357r 1 57 .byt $57 -000358r 1 58 .byt $58 -000359r 1 59 .byt $59 -00035Ar 1 5A .byt $5A -00035Br 1 5B .byt $5B -00035Cr 1 5C .byt $5C -00035Dr 1 5D .byt $5D -00035Er 1 5E .byt $5E -00035Fr 1 5F .byt $5F -000360r 1 60 .byt $60 -000361r 1 61 .byt $61 -000362r 1 62 .byt $62 -000363r 1 63 .byt $63 -000364r 1 64 .byt $64 -000365r 1 65 .byt $65 -000366r 1 66 .byt $66 -000367r 1 67 .byt $67 -000368r 1 68 .byt $68 -000369r 1 69 .byt $69 -00036Ar 1 6A .byt $6A -00036Br 1 6B .byt $6B -00036Cr 1 6C .byt $6C -00036Dr 1 6D .byt $6D -00036Er 1 6E .byt $6E -00036Fr 1 6F .byt $6F -000370r 1 70 .byt $70 -000371r 1 71 .byt $71 -000372r 1 72 .byt $72 -000373r 1 73 .byt $73 -000374r 1 74 .byt $74 -000375r 1 75 .byt $75 -000376r 1 76 .byt $76 -000377r 1 77 .byt $77 -000378r 1 78 .byt $78 -000379r 1 79 .byt $79 -00037Ar 1 7A .byt $7A -00037Br 1 7B .byt $7B -00037Cr 1 7C .byt $7C -00037Dr 1 7D .byt $7D -00037Er 1 7E .byt $7E -00037Fr 1 7F .byt $7F -000380r 1 80 .byt $80 -000381r 1 81 .byt $81 -000382r 1 82 .byt $82 -000383r 1 83 .byt $83 -000384r 1 84 .byt $84 -000385r 1 85 .byt $85 -000386r 1 86 .byt $86 -000387r 1 87 .byt $87 -000388r 1 88 .byt $88 -000389r 1 89 .byt $89 -00038Ar 1 8A .byt $8A -00038Br 1 8B .byt $8B -00038Cr 1 8C .byt $8C -00038Dr 1 8D .byt $8D -00038Er 1 8E .byt $8E -00038Fr 1 8F .byt $8F -000390r 1 90 .byt $90 -000391r 1 91 .byt $91 -000392r 1 92 .byt $92 -000393r 1 93 .byt $93 -000394r 1 94 .byt $94 -000395r 1 95 .byt $95 -000396r 1 96 .byt $96 -000397r 1 97 .byt $97 -000398r 1 98 .byt $98 -000399r 1 99 .byt $99 -00039Ar 1 9A .byt $9A -00039Br 1 9B .byt $9B -00039Cr 1 9C .byt $9C -00039Dr 1 9D .byt $9D -00039Er 1 9E .byt $9E -00039Fr 1 9F .byt $9F -0003A0r 1 A0 .byt $A0 -0003A1r 1 A1 .byt $A1 -0003A2r 1 A2 .byt $A2 -0003A3r 1 A3 .byt $A3 -0003A4r 1 A4 .byt $A4 -0003A5r 1 A5 .byt $A5 -0003A6r 1 A6 .byt $A6 -0003A7r 1 A7 .byt $A7 -0003A8r 1 A8 .byt $A8 -0003A9r 1 A9 .byt $A9 -0003AAr 1 AA .byt $AA -0003ABr 1 AB .byt $AB -0003ACr 1 AC .byt $AC -0003ADr 1 AD .byt $AD -0003AEr 1 AE .byt $AE -0003AFr 1 AF .byt $AF -0003B0r 1 B0 .byt $B0 -0003B1r 1 B1 .byt $B1 -0003B2r 1 B2 .byt $B2 -0003B3r 1 B3 .byt $B3 -0003B4r 1 B4 .byt $B4 -0003B5r 1 B5 .byt $B5 -0003B6r 1 B6 .byt $B6 -0003B7r 1 B7 .byt $B7 -0003B8r 1 B8 .byt $B8 -0003B9r 1 B9 .byt $B9 -0003BAr 1 BA .byt $BA -0003BBr 1 BB .byt $BB -0003BCr 1 BC .byt $BC -0003BDr 1 BD .byt $BD -0003BEr 1 BE .byt $BE -0003BFr 1 BF .byt $BF -0003C0r 1 C0 .byt $C0 -0003C1r 1 C1 .byt $C1 -0003C2r 1 C2 .byt $C2 -0003C3r 1 C3 .byt $C3 -0003C4r 1 C4 .byt $C4 -0003C5r 1 C5 .byt $C5 -0003C6r 1 C6 .byt $C6 -0003C7r 1 C7 .byt $C7 -0003C8r 1 C8 .byt $C8 -0003C9r 1 C9 .byt $C9 -0003CAr 1 CA .byt $CA -0003CBr 1 CB .byt $CB -0003CCr 1 CC .byt $CC -0003CDr 1 CD .byt $CD -0003CEr 1 CE .byt $CE -0003CFr 1 CF .byt $CF -0003D0r 1 D0 .byt $D0 -0003D1r 1 D1 .byt $D1 -0003D2r 1 D2 .byt $D2 -0003D3r 1 D3 .byt $D3 -0003D4r 1 D4 .byt $D4 -0003D5r 1 D5 .byt $D5 -0003D6r 1 D6 .byt $D6 -0003D7r 1 D7 .byt $D7 -0003D8r 1 D8 .byt $D8 -0003D9r 1 D9 .byt $D9 -0003DAr 1 DA .byt $DA -0003DBr 1 DB .byt $DB -0003DCr 1 DC .byt $DC -0003DDr 1 DD .byt $DD -0003DEr 1 DE .byt $DE -0003DFr 1 DF .byt $DF -0003E0r 1 E0 .byt $E0 -0003E1r 1 E1 .byt $E1 -0003E2r 1 E2 .byt $E2 -0003E3r 1 E3 .byt $E3 -0003E4r 1 E4 .byt $E4 -0003E5r 1 E5 .byt $E5 -0003E6r 1 E6 .byt $E6 -0003E7r 1 E7 .byt $E7 -0003E8r 1 E8 .byt $E8 -0003E9r 1 E9 .byt $E9 -0003EAr 1 EA .byt $EA -0003EBr 1 EB .byt $EB -0003ECr 1 EC .byt $EC -0003EDr 1 ED .byt $ED -0003EEr 1 EE .byt $EE -0003EFr 1 EF .byt $EF -0003F0r 1 F0 .byt $F0 -0003F1r 1 F1 .byt $F1 -0003F2r 1 F2 .byt $F2 -0003F3r 1 F3 .byt $F3 -0003F4r 1 F4 .byt $F4 -0003F5r 1 F5 .byt $F5 -0003F6r 1 F6 .byt $F6 -0003F7r 1 F7 .byt $F7 -0003F8r 1 F8 .byt $F8 -0003F9r 1 F9 .byt $F9 -0003FAr 1 FA .byt $FA -0003FBr 1 FB .byt $FB -0003FCr 1 FC .byt $FC -0003FDr 1 FD .byt $FD -0003FEr 1 FE .byt $FE -0003FFr 1 FF .byt $FF +000300r 1 ; hex values, uppercase +000300r 1 00 .byt $0 +000301r 1 01 .byt $1 +000302r 1 02 .byt $2 +000303r 1 03 .byt $3 +000304r 1 04 .byt $4 +000305r 1 05 .byt $5 +000306r 1 06 .byt $6 +000307r 1 07 .byt $7 +000308r 1 08 .byt $8 +000309r 1 09 .byt $9 +00030Ar 1 0A .byt $A +00030Br 1 0B .byt $B +00030Cr 1 0C .byt $C +00030Dr 1 0D .byt $D +00030Er 1 0E .byt $E +00030Fr 1 0F .byt $F +000310r 1 10 .byt $10 +000311r 1 11 .byt $11 +000312r 1 12 .byt $12 +000313r 1 13 .byt $13 +000314r 1 14 .byt $14 +000315r 1 15 .byt $15 +000316r 1 16 .byt $16 +000317r 1 17 .byt $17 +000318r 1 18 .byt $18 +000319r 1 19 .byt $19 +00031Ar 1 1A .byt $1A +00031Br 1 1B .byt $1B +00031Cr 1 1C .byt $1C +00031Dr 1 1D .byt $1D +00031Er 1 1E .byt $1E +00031Fr 1 1F .byt $1F +000320r 1 20 .byt $20 +000321r 1 21 .byt $21 +000322r 1 22 .byt $22 +000323r 1 23 .byt $23 +000324r 1 24 .byt $24 +000325r 1 25 .byt $25 +000326r 1 26 .byt $26 +000327r 1 27 .byt $27 +000328r 1 28 .byt $28 +000329r 1 29 .byt $29 +00032Ar 1 2A .byt $2A +00032Br 1 2B .byt $2B +00032Cr 1 2C .byt $2C +00032Dr 1 2D .byt $2D +00032Er 1 2E .byt $2E +00032Fr 1 2F .byt $2F +000330r 1 30 .byt $30 +000331r 1 31 .byt $31 +000332r 1 32 .byt $32 +000333r 1 33 .byt $33 +000334r 1 34 .byt $34 +000335r 1 35 .byt $35 +000336r 1 36 .byt $36 +000337r 1 37 .byt $37 +000338r 1 38 .byt $38 +000339r 1 39 .byt $39 +00033Ar 1 3A .byt $3A +00033Br 1 3B .byt $3B +00033Cr 1 3C .byt $3C +00033Dr 1 3D .byt $3D +00033Er 1 3E .byt $3E +00033Fr 1 3F .byt $3F +000340r 1 40 .byt $40 +000341r 1 41 .byt $41 +000342r 1 42 .byt $42 +000343r 1 43 .byt $43 +000344r 1 44 .byt $44 +000345r 1 45 .byt $45 +000346r 1 46 .byt $46 +000347r 1 47 .byt $47 +000348r 1 48 .byt $48 +000349r 1 49 .byt $49 +00034Ar 1 4A .byt $4A +00034Br 1 4B .byt $4B +00034Cr 1 4C .byt $4C +00034Dr 1 4D .byt $4D +00034Er 1 4E .byt $4E +00034Fr 1 4F .byt $4F +000350r 1 50 .byt $50 +000351r 1 51 .byt $51 +000352r 1 52 .byt $52 +000353r 1 53 .byt $53 +000354r 1 54 .byt $54 +000355r 1 55 .byt $55 +000356r 1 56 .byt $56 +000357r 1 57 .byt $57 +000358r 1 58 .byt $58 +000359r 1 59 .byt $59 +00035Ar 1 5A .byt $5A +00035Br 1 5B .byt $5B +00035Cr 1 5C .byt $5C +00035Dr 1 5D .byt $5D +00035Er 1 5E .byt $5E +00035Fr 1 5F .byt $5F +000360r 1 60 .byt $60 +000361r 1 61 .byt $61 +000362r 1 62 .byt $62 +000363r 1 63 .byt $63 +000364r 1 64 .byt $64 +000365r 1 65 .byt $65 +000366r 1 66 .byt $66 +000367r 1 67 .byt $67 +000368r 1 68 .byt $68 +000369r 1 69 .byt $69 +00036Ar 1 6A .byt $6A +00036Br 1 6B .byt $6B +00036Cr 1 6C .byt $6C +00036Dr 1 6D .byt $6D +00036Er 1 6E .byt $6E +00036Fr 1 6F .byt $6F +000370r 1 70 .byt $70 +000371r 1 71 .byt $71 +000372r 1 72 .byt $72 +000373r 1 73 .byt $73 +000374r 1 74 .byt $74 +000375r 1 75 .byt $75 +000376r 1 76 .byt $76 +000377r 1 77 .byt $77 +000378r 1 78 .byt $78 +000379r 1 79 .byt $79 +00037Ar 1 7A .byt $7A +00037Br 1 7B .byt $7B +00037Cr 1 7C .byt $7C +00037Dr 1 7D .byt $7D +00037Er 1 7E .byt $7E +00037Fr 1 7F .byt $7F +000380r 1 80 .byt $80 +000381r 1 81 .byt $81 +000382r 1 82 .byt $82 +000383r 1 83 .byt $83 +000384r 1 84 .byt $84 +000385r 1 85 .byt $85 +000386r 1 86 .byt $86 +000387r 1 87 .byt $87 +000388r 1 88 .byt $88 +000389r 1 89 .byt $89 +00038Ar 1 8A .byt $8A +00038Br 1 8B .byt $8B +00038Cr 1 8C .byt $8C +00038Dr 1 8D .byt $8D +00038Er 1 8E .byt $8E +00038Fr 1 8F .byt $8F +000390r 1 90 .byt $90 +000391r 1 91 .byt $91 +000392r 1 92 .byt $92 +000393r 1 93 .byt $93 +000394r 1 94 .byt $94 +000395r 1 95 .byt $95 +000396r 1 96 .byt $96 +000397r 1 97 .byt $97 +000398r 1 98 .byt $98 +000399r 1 99 .byt $99 +00039Ar 1 9A .byt $9A +00039Br 1 9B .byt $9B +00039Cr 1 9C .byt $9C +00039Dr 1 9D .byt $9D +00039Er 1 9E .byt $9E +00039Fr 1 9F .byt $9F +0003A0r 1 A0 .byt $A0 +0003A1r 1 A1 .byt $A1 +0003A2r 1 A2 .byt $A2 +0003A3r 1 A3 .byt $A3 +0003A4r 1 A4 .byt $A4 +0003A5r 1 A5 .byt $A5 +0003A6r 1 A6 .byt $A6 +0003A7r 1 A7 .byt $A7 +0003A8r 1 A8 .byt $A8 +0003A9r 1 A9 .byt $A9 +0003AAr 1 AA .byt $AA +0003ABr 1 AB .byt $AB +0003ACr 1 AC .byt $AC +0003ADr 1 AD .byt $AD +0003AEr 1 AE .byt $AE +0003AFr 1 AF .byt $AF +0003B0r 1 B0 .byt $B0 +0003B1r 1 B1 .byt $B1 +0003B2r 1 B2 .byt $B2 +0003B3r 1 B3 .byt $B3 +0003B4r 1 B4 .byt $B4 +0003B5r 1 B5 .byt $B5 +0003B6r 1 B6 .byt $B6 +0003B7r 1 B7 .byt $B7 +0003B8r 1 B8 .byt $B8 +0003B9r 1 B9 .byt $B9 +0003BAr 1 BA .byt $BA +0003BBr 1 BB .byt $BB +0003BCr 1 BC .byt $BC +0003BDr 1 BD .byt $BD +0003BEr 1 BE .byt $BE +0003BFr 1 BF .byt $BF +0003C0r 1 C0 .byt $C0 +0003C1r 1 C1 .byt $C1 +0003C2r 1 C2 .byt $C2 +0003C3r 1 C3 .byt $C3 +0003C4r 1 C4 .byt $C4 +0003C5r 1 C5 .byt $C5 +0003C6r 1 C6 .byt $C6 +0003C7r 1 C7 .byt $C7 +0003C8r 1 C8 .byt $C8 +0003C9r 1 C9 .byt $C9 +0003CAr 1 CA .byt $CA +0003CBr 1 CB .byt $CB +0003CCr 1 CC .byt $CC +0003CDr 1 CD .byt $CD +0003CEr 1 CE .byt $CE +0003CFr 1 CF .byt $CF +0003D0r 1 D0 .byt $D0 +0003D1r 1 D1 .byt $D1 +0003D2r 1 D2 .byt $D2 +0003D3r 1 D3 .byt $D3 +0003D4r 1 D4 .byt $D4 +0003D5r 1 D5 .byt $D5 +0003D6r 1 D6 .byt $D6 +0003D7r 1 D7 .byt $D7 +0003D8r 1 D8 .byt $D8 +0003D9r 1 D9 .byt $D9 +0003DAr 1 DA .byt $DA +0003DBr 1 DB .byt $DB +0003DCr 1 DC .byt $DC +0003DDr 1 DD .byt $DD +0003DEr 1 DE .byt $DE +0003DFr 1 DF .byt $DF +0003E0r 1 E0 .byt $E0 +0003E1r 1 E1 .byt $E1 +0003E2r 1 E2 .byt $E2 +0003E3r 1 E3 .byt $E3 +0003E4r 1 E4 .byt $E4 +0003E5r 1 E5 .byt $E5 +0003E6r 1 E6 .byt $E6 +0003E7r 1 E7 .byt $E7 +0003E8r 1 E8 .byt $E8 +0003E9r 1 E9 .byt $E9 +0003EAr 1 EA .byt $EA +0003EBr 1 EB .byt $EB +0003ECr 1 EC .byt $EC +0003EDr 1 ED .byt $ED +0003EEr 1 EE .byt $EE +0003EFr 1 EF .byt $EF +0003F0r 1 F0 .byt $F0 +0003F1r 1 F1 .byt $F1 +0003F2r 1 F2 .byt $F2 +0003F3r 1 F3 .byt $F3 +0003F4r 1 F4 .byt $F4 +0003F5r 1 F5 .byt $F5 +0003F6r 1 F6 .byt $F6 +0003F7r 1 F7 .byt $F7 +0003F8r 1 F8 .byt $F8 +0003F9r 1 F9 .byt $F9 +0003FAr 1 FA .byt $FA +0003FBr 1 FB .byt $FB +0003FCr 1 FC .byt $FC +0003FDr 1 FD .byt $FD +0003FEr 1 FE .byt $FE +0003FFr 1 FF .byt $FF 000400r 1 -000400r 1 ; 2-digit hex values -000400r 1 00 .byt $00 -000401r 1 01 .byt $01 -000402r 1 02 .byt $02 -000403r 1 03 .byt $03 -000404r 1 04 .byt $04 -000405r 1 05 .byt $05 -000406r 1 06 .byt $06 -000407r 1 07 .byt $07 -000408r 1 08 .byt $08 -000409r 1 09 .byt $09 -00040Ar 1 0A .byt $0a -00040Br 1 0B .byt $0b -00040Cr 1 0C .byt $0c -00040Dr 1 0D .byt $0d -00040Er 1 0E .byt $0e -00040Fr 1 0F .byt $0f -000410r 1 10 .byt $10 -000411r 1 11 .byt $11 -000412r 1 12 .byt $12 -000413r 1 13 .byt $13 -000414r 1 14 .byt $14 -000415r 1 15 .byt $15 -000416r 1 16 .byt $16 -000417r 1 17 .byt $17 -000418r 1 18 .byt $18 -000419r 1 19 .byt $19 -00041Ar 1 1A .byt $1a -00041Br 1 1B .byt $1b -00041Cr 1 1C .byt $1c -00041Dr 1 1D .byt $1d -00041Er 1 1E .byt $1e -00041Fr 1 1F .byt $1f -000420r 1 20 .byt $20 -000421r 1 21 .byt $21 -000422r 1 22 .byt $22 -000423r 1 23 .byt $23 -000424r 1 24 .byt $24 -000425r 1 25 .byt $25 -000426r 1 26 .byt $26 -000427r 1 27 .byt $27 -000428r 1 28 .byt $28 -000429r 1 29 .byt $29 -00042Ar 1 2A .byt $2a -00042Br 1 2B .byt $2b -00042Cr 1 2C .byt $2c -00042Dr 1 2D .byt $2d -00042Er 1 2E .byt $2e -00042Fr 1 2F .byt $2f -000430r 1 30 .byt $30 -000431r 1 31 .byt $31 -000432r 1 32 .byt $32 -000433r 1 33 .byt $33 -000434r 1 34 .byt $34 -000435r 1 35 .byt $35 -000436r 1 36 .byt $36 -000437r 1 37 .byt $37 -000438r 1 38 .byt $38 -000439r 1 39 .byt $39 -00043Ar 1 3A .byt $3a -00043Br 1 3B .byt $3b -00043Cr 1 3C .byt $3c -00043Dr 1 3D .byt $3d -00043Er 1 3E .byt $3e -00043Fr 1 3F .byt $3f -000440r 1 40 .byt $40 -000441r 1 41 .byt $41 -000442r 1 42 .byt $42 -000443r 1 43 .byt $43 -000444r 1 44 .byt $44 -000445r 1 45 .byt $45 -000446r 1 46 .byt $46 -000447r 1 47 .byt $47 -000448r 1 48 .byt $48 -000449r 1 49 .byt $49 -00044Ar 1 4A .byt $4a -00044Br 1 4B .byt $4b -00044Cr 1 4C .byt $4c -00044Dr 1 4D .byt $4d -00044Er 1 4E .byt $4e -00044Fr 1 4F .byt $4f -000450r 1 50 .byt $50 -000451r 1 51 .byt $51 -000452r 1 52 .byt $52 -000453r 1 53 .byt $53 -000454r 1 54 .byt $54 -000455r 1 55 .byt $55 -000456r 1 56 .byt $56 -000457r 1 57 .byt $57 -000458r 1 58 .byt $58 -000459r 1 59 .byt $59 -00045Ar 1 5A .byt $5a -00045Br 1 5B .byt $5b -00045Cr 1 5C .byt $5c -00045Dr 1 5D .byt $5d -00045Er 1 5E .byt $5e -00045Fr 1 5F .byt $5f -000460r 1 60 .byt $60 -000461r 1 61 .byt $61 -000462r 1 62 .byt $62 -000463r 1 63 .byt $63 -000464r 1 64 .byt $64 -000465r 1 65 .byt $65 -000466r 1 66 .byt $66 -000467r 1 67 .byt $67 -000468r 1 68 .byt $68 -000469r 1 69 .byt $69 -00046Ar 1 6A .byt $6a -00046Br 1 6B .byt $6b -00046Cr 1 6C .byt $6c -00046Dr 1 6D .byt $6d -00046Er 1 6E .byt $6e -00046Fr 1 6F .byt $6f -000470r 1 70 .byt $70 -000471r 1 71 .byt $71 -000472r 1 72 .byt $72 -000473r 1 73 .byt $73 -000474r 1 74 .byt $74 -000475r 1 75 .byt $75 -000476r 1 76 .byt $76 -000477r 1 77 .byt $77 -000478r 1 78 .byt $78 -000479r 1 79 .byt $79 -00047Ar 1 7A .byt $7a -00047Br 1 7B .byt $7b -00047Cr 1 7C .byt $7c -00047Dr 1 7D .byt $7d -00047Er 1 7E .byt $7e -00047Fr 1 7F .byt $7f -000480r 1 80 .byt $80 -000481r 1 81 .byt $81 -000482r 1 82 .byt $82 -000483r 1 83 .byt $83 -000484r 1 84 .byt $84 -000485r 1 85 .byt $85 -000486r 1 86 .byt $86 -000487r 1 87 .byt $87 -000488r 1 88 .byt $88 -000489r 1 89 .byt $89 -00048Ar 1 8A .byt $8a -00048Br 1 8B .byt $8b -00048Cr 1 8C .byt $8c -00048Dr 1 8D .byt $8d -00048Er 1 8E .byt $8e -00048Fr 1 8F .byt $8f -000490r 1 90 .byt $90 -000491r 1 91 .byt $91 -000492r 1 92 .byt $92 -000493r 1 93 .byt $93 -000494r 1 94 .byt $94 -000495r 1 95 .byt $95 -000496r 1 96 .byt $96 -000497r 1 97 .byt $97 -000498r 1 98 .byt $98 -000499r 1 99 .byt $99 -00049Ar 1 9A .byt $9a -00049Br 1 9B .byt $9b -00049Cr 1 9C .byt $9c -00049Dr 1 9D .byt $9d -00049Er 1 9E .byt $9e -00049Fr 1 9F .byt $9f -0004A0r 1 A0 .byt $a0 -0004A1r 1 A1 .byt $a1 -0004A2r 1 A2 .byt $a2 -0004A3r 1 A3 .byt $a3 -0004A4r 1 A4 .byt $a4 -0004A5r 1 A5 .byt $a5 -0004A6r 1 A6 .byt $a6 -0004A7r 1 A7 .byt $a7 -0004A8r 1 A8 .byt $a8 -0004A9r 1 A9 .byt $a9 -0004AAr 1 AA .byt $aa -0004ABr 1 AB .byt $ab -0004ACr 1 AC .byt $ac -0004ADr 1 AD .byt $ad -0004AEr 1 AE .byt $ae -0004AFr 1 AF .byt $af -0004B0r 1 B0 .byt $b0 -0004B1r 1 B1 .byt $b1 -0004B2r 1 B2 .byt $b2 -0004B3r 1 B3 .byt $b3 -0004B4r 1 B4 .byt $b4 -0004B5r 1 B5 .byt $b5 -0004B6r 1 B6 .byt $b6 -0004B7r 1 B7 .byt $b7 -0004B8r 1 B8 .byt $b8 -0004B9r 1 B9 .byt $b9 -0004BAr 1 BA .byt $ba -0004BBr 1 BB .byt $bb -0004BCr 1 BC .byt $bc -0004BDr 1 BD .byt $bd -0004BEr 1 BE .byt $be -0004BFr 1 BF .byt $bf -0004C0r 1 C0 .byt $c0 -0004C1r 1 C1 .byt $c1 -0004C2r 1 C2 .byt $c2 -0004C3r 1 C3 .byt $c3 -0004C4r 1 C4 .byt $c4 -0004C5r 1 C5 .byt $c5 -0004C6r 1 C6 .byt $c6 -0004C7r 1 C7 .byt $c7 -0004C8r 1 C8 .byt $c8 -0004C9r 1 C9 .byt $c9 -0004CAr 1 CA .byt $ca -0004CBr 1 CB .byt $cb -0004CCr 1 CC .byt $cc -0004CDr 1 CD .byt $cd -0004CEr 1 CE .byt $ce -0004CFr 1 CF .byt $cf -0004D0r 1 D0 .byt $d0 -0004D1r 1 D1 .byt $d1 -0004D2r 1 D2 .byt $d2 -0004D3r 1 D3 .byt $d3 -0004D4r 1 D4 .byt $d4 -0004D5r 1 D5 .byt $d5 -0004D6r 1 D6 .byt $d6 -0004D7r 1 D7 .byt $d7 -0004D8r 1 D8 .byt $d8 -0004D9r 1 D9 .byt $d9 -0004DAr 1 DA .byt $da -0004DBr 1 DB .byt $db -0004DCr 1 DC .byt $dc -0004DDr 1 DD .byt $dd -0004DEr 1 DE .byt $de -0004DFr 1 DF .byt $df -0004E0r 1 E0 .byt $e0 -0004E1r 1 E1 .byt $e1 -0004E2r 1 E2 .byt $e2 -0004E3r 1 E3 .byt $e3 -0004E4r 1 E4 .byt $e4 -0004E5r 1 E5 .byt $e5 -0004E6r 1 E6 .byt $e6 -0004E7r 1 E7 .byt $e7 -0004E8r 1 E8 .byt $e8 -0004E9r 1 E9 .byt $e9 -0004EAr 1 EA .byt $ea -0004EBr 1 EB .byt $eb -0004ECr 1 EC .byt $ec -0004EDr 1 ED .byt $ed -0004EEr 1 EE .byt $ee -0004EFr 1 EF .byt $ef -0004F0r 1 F0 .byt $f0 -0004F1r 1 F1 .byt $f1 -0004F2r 1 F2 .byt $f2 -0004F3r 1 F3 .byt $f3 -0004F4r 1 F4 .byt $f4 -0004F5r 1 F5 .byt $f5 -0004F6r 1 F6 .byt $f6 -0004F7r 1 F7 .byt $f7 -0004F8r 1 F8 .byt $f8 -0004F9r 1 F9 .byt $f9 -0004FAr 1 FA .byt $fa -0004FBr 1 FB .byt $fb -0004FCr 1 FC .byt $fc -0004FDr 1 FD .byt $fd -0004FEr 1 FE .byt $fe -0004FFr 1 FF .byt $ff +000400r 1 ; 2-digit hex values +000400r 1 00 .byt $00 +000401r 1 01 .byt $01 +000402r 1 02 .byt $02 +000403r 1 03 .byt $03 +000404r 1 04 .byt $04 +000405r 1 05 .byt $05 +000406r 1 06 .byt $06 +000407r 1 07 .byt $07 +000408r 1 08 .byt $08 +000409r 1 09 .byt $09 +00040Ar 1 0A .byt $0a +00040Br 1 0B .byt $0b +00040Cr 1 0C .byt $0c +00040Dr 1 0D .byt $0d +00040Er 1 0E .byt $0e +00040Fr 1 0F .byt $0f +000410r 1 10 .byt $10 +000411r 1 11 .byt $11 +000412r 1 12 .byt $12 +000413r 1 13 .byt $13 +000414r 1 14 .byt $14 +000415r 1 15 .byt $15 +000416r 1 16 .byt $16 +000417r 1 17 .byt $17 +000418r 1 18 .byt $18 +000419r 1 19 .byt $19 +00041Ar 1 1A .byt $1a +00041Br 1 1B .byt $1b +00041Cr 1 1C .byt $1c +00041Dr 1 1D .byt $1d +00041Er 1 1E .byt $1e +00041Fr 1 1F .byt $1f +000420r 1 20 .byt $20 +000421r 1 21 .byt $21 +000422r 1 22 .byt $22 +000423r 1 23 .byt $23 +000424r 1 24 .byt $24 +000425r 1 25 .byt $25 +000426r 1 26 .byt $26 +000427r 1 27 .byt $27 +000428r 1 28 .byt $28 +000429r 1 29 .byt $29 +00042Ar 1 2A .byt $2a +00042Br 1 2B .byt $2b +00042Cr 1 2C .byt $2c +00042Dr 1 2D .byt $2d +00042Er 1 2E .byt $2e +00042Fr 1 2F .byt $2f +000430r 1 30 .byt $30 +000431r 1 31 .byt $31 +000432r 1 32 .byt $32 +000433r 1 33 .byt $33 +000434r 1 34 .byt $34 +000435r 1 35 .byt $35 +000436r 1 36 .byt $36 +000437r 1 37 .byt $37 +000438r 1 38 .byt $38 +000439r 1 39 .byt $39 +00043Ar 1 3A .byt $3a +00043Br 1 3B .byt $3b +00043Cr 1 3C .byt $3c +00043Dr 1 3D .byt $3d +00043Er 1 3E .byt $3e +00043Fr 1 3F .byt $3f +000440r 1 40 .byt $40 +000441r 1 41 .byt $41 +000442r 1 42 .byt $42 +000443r 1 43 .byt $43 +000444r 1 44 .byt $44 +000445r 1 45 .byt $45 +000446r 1 46 .byt $46 +000447r 1 47 .byt $47 +000448r 1 48 .byt $48 +000449r 1 49 .byt $49 +00044Ar 1 4A .byt $4a +00044Br 1 4B .byt $4b +00044Cr 1 4C .byt $4c +00044Dr 1 4D .byt $4d +00044Er 1 4E .byt $4e +00044Fr 1 4F .byt $4f +000450r 1 50 .byt $50 +000451r 1 51 .byt $51 +000452r 1 52 .byt $52 +000453r 1 53 .byt $53 +000454r 1 54 .byt $54 +000455r 1 55 .byt $55 +000456r 1 56 .byt $56 +000457r 1 57 .byt $57 +000458r 1 58 .byt $58 +000459r 1 59 .byt $59 +00045Ar 1 5A .byt $5a +00045Br 1 5B .byt $5b +00045Cr 1 5C .byt $5c +00045Dr 1 5D .byt $5d +00045Er 1 5E .byt $5e +00045Fr 1 5F .byt $5f +000460r 1 60 .byt $60 +000461r 1 61 .byt $61 +000462r 1 62 .byt $62 +000463r 1 63 .byt $63 +000464r 1 64 .byt $64 +000465r 1 65 .byt $65 +000466r 1 66 .byt $66 +000467r 1 67 .byt $67 +000468r 1 68 .byt $68 +000469r 1 69 .byt $69 +00046Ar 1 6A .byt $6a +00046Br 1 6B .byt $6b +00046Cr 1 6C .byt $6c +00046Dr 1 6D .byt $6d +00046Er 1 6E .byt $6e +00046Fr 1 6F .byt $6f +000470r 1 70 .byt $70 +000471r 1 71 .byt $71 +000472r 1 72 .byt $72 +000473r 1 73 .byt $73 +000474r 1 74 .byt $74 +000475r 1 75 .byt $75 +000476r 1 76 .byt $76 +000477r 1 77 .byt $77 +000478r 1 78 .byt $78 +000479r 1 79 .byt $79 +00047Ar 1 7A .byt $7a +00047Br 1 7B .byt $7b +00047Cr 1 7C .byt $7c +00047Dr 1 7D .byt $7d +00047Er 1 7E .byt $7e +00047Fr 1 7F .byt $7f +000480r 1 80 .byt $80 +000481r 1 81 .byt $81 +000482r 1 82 .byt $82 +000483r 1 83 .byt $83 +000484r 1 84 .byt $84 +000485r 1 85 .byt $85 +000486r 1 86 .byt $86 +000487r 1 87 .byt $87 +000488r 1 88 .byt $88 +000489r 1 89 .byt $89 +00048Ar 1 8A .byt $8a +00048Br 1 8B .byt $8b +00048Cr 1 8C .byt $8c +00048Dr 1 8D .byt $8d +00048Er 1 8E .byt $8e +00048Fr 1 8F .byt $8f +000490r 1 90 .byt $90 +000491r 1 91 .byt $91 +000492r 1 92 .byt $92 +000493r 1 93 .byt $93 +000494r 1 94 .byt $94 +000495r 1 95 .byt $95 +000496r 1 96 .byt $96 +000497r 1 97 .byt $97 +000498r 1 98 .byt $98 +000499r 1 99 .byt $99 +00049Ar 1 9A .byt $9a +00049Br 1 9B .byt $9b +00049Cr 1 9C .byt $9c +00049Dr 1 9D .byt $9d +00049Er 1 9E .byt $9e +00049Fr 1 9F .byt $9f +0004A0r 1 A0 .byt $a0 +0004A1r 1 A1 .byt $a1 +0004A2r 1 A2 .byt $a2 +0004A3r 1 A3 .byt $a3 +0004A4r 1 A4 .byt $a4 +0004A5r 1 A5 .byt $a5 +0004A6r 1 A6 .byt $a6 +0004A7r 1 A7 .byt $a7 +0004A8r 1 A8 .byt $a8 +0004A9r 1 A9 .byt $a9 +0004AAr 1 AA .byt $aa +0004ABr 1 AB .byt $ab +0004ACr 1 AC .byt $ac +0004ADr 1 AD .byt $ad +0004AEr 1 AE .byt $ae +0004AFr 1 AF .byt $af +0004B0r 1 B0 .byt $b0 +0004B1r 1 B1 .byt $b1 +0004B2r 1 B2 .byt $b2 +0004B3r 1 B3 .byt $b3 +0004B4r 1 B4 .byt $b4 +0004B5r 1 B5 .byt $b5 +0004B6r 1 B6 .byt $b6 +0004B7r 1 B7 .byt $b7 +0004B8r 1 B8 .byt $b8 +0004B9r 1 B9 .byt $b9 +0004BAr 1 BA .byt $ba +0004BBr 1 BB .byt $bb +0004BCr 1 BC .byt $bc +0004BDr 1 BD .byt $bd +0004BEr 1 BE .byt $be +0004BFr 1 BF .byt $bf +0004C0r 1 C0 .byt $c0 +0004C1r 1 C1 .byt $c1 +0004C2r 1 C2 .byt $c2 +0004C3r 1 C3 .byt $c3 +0004C4r 1 C4 .byt $c4 +0004C5r 1 C5 .byt $c5 +0004C6r 1 C6 .byt $c6 +0004C7r 1 C7 .byt $c7 +0004C8r 1 C8 .byt $c8 +0004C9r 1 C9 .byt $c9 +0004CAr 1 CA .byt $ca +0004CBr 1 CB .byt $cb +0004CCr 1 CC .byt $cc +0004CDr 1 CD .byt $cd +0004CEr 1 CE .byt $ce +0004CFr 1 CF .byt $cf +0004D0r 1 D0 .byt $d0 +0004D1r 1 D1 .byt $d1 +0004D2r 1 D2 .byt $d2 +0004D3r 1 D3 .byt $d3 +0004D4r 1 D4 .byt $d4 +0004D5r 1 D5 .byt $d5 +0004D6r 1 D6 .byt $d6 +0004D7r 1 D7 .byt $d7 +0004D8r 1 D8 .byt $d8 +0004D9r 1 D9 .byt $d9 +0004DAr 1 DA .byt $da +0004DBr 1 DB .byt $db +0004DCr 1 DC .byt $dc +0004DDr 1 DD .byt $dd +0004DEr 1 DE .byt $de +0004DFr 1 DF .byt $df +0004E0r 1 E0 .byt $e0 +0004E1r 1 E1 .byt $e1 +0004E2r 1 E2 .byt $e2 +0004E3r 1 E3 .byt $e3 +0004E4r 1 E4 .byt $e4 +0004E5r 1 E5 .byt $e5 +0004E6r 1 E6 .byt $e6 +0004E7r 1 E7 .byt $e7 +0004E8r 1 E8 .byt $e8 +0004E9r 1 E9 .byt $e9 +0004EAr 1 EA .byt $ea +0004EBr 1 EB .byt $eb +0004ECr 1 EC .byt $ec +0004EDr 1 ED .byt $ed +0004EEr 1 EE .byt $ee +0004EFr 1 EF .byt $ef +0004F0r 1 F0 .byt $f0 +0004F1r 1 F1 .byt $f1 +0004F2r 1 F2 .byt $f2 +0004F3r 1 F3 .byt $f3 +0004F4r 1 F4 .byt $f4 +0004F5r 1 F5 .byt $f5 +0004F6r 1 F6 .byt $f6 +0004F7r 1 F7 .byt $f7 +0004F8r 1 F8 .byt $f8 +0004F9r 1 F9 .byt $f9 +0004FAr 1 FA .byt $fa +0004FBr 1 FB .byt $fb +0004FCr 1 FC .byt $fc +0004FDr 1 FD .byt $fd +0004FEr 1 FE .byt $fe +0004FFr 1 FF .byt $ff 000500r 1 -000500r 1 ; 2-digit hex values, uppercase -000500r 1 00 .byt $00 -000501r 1 01 .byt $01 -000502r 1 02 .byt $02 -000503r 1 03 .byt $03 -000504r 1 04 .byt $04 -000505r 1 05 .byt $05 -000506r 1 06 .byt $06 -000507r 1 07 .byt $07 -000508r 1 08 .byt $08 -000509r 1 09 .byt $09 -00050Ar 1 0A .byt $0A -00050Br 1 0B .byt $0B -00050Cr 1 0C .byt $0C -00050Dr 1 0D .byt $0D -00050Er 1 0E .byt $0E -00050Fr 1 0F .byt $0F -000510r 1 10 .byt $10 -000511r 1 11 .byt $11 -000512r 1 12 .byt $12 -000513r 1 13 .byt $13 -000514r 1 14 .byt $14 -000515r 1 15 .byt $15 -000516r 1 16 .byt $16 -000517r 1 17 .byt $17 -000518r 1 18 .byt $18 -000519r 1 19 .byt $19 -00051Ar 1 1A .byt $1A -00051Br 1 1B .byt $1B -00051Cr 1 1C .byt $1C -00051Dr 1 1D .byt $1D -00051Er 1 1E .byt $1E -00051Fr 1 1F .byt $1F -000520r 1 20 .byt $20 -000521r 1 21 .byt $21 -000522r 1 22 .byt $22 -000523r 1 23 .byt $23 -000524r 1 24 .byt $24 -000525r 1 25 .byt $25 -000526r 1 26 .byt $26 -000527r 1 27 .byt $27 -000528r 1 28 .byt $28 -000529r 1 29 .byt $29 -00052Ar 1 2A .byt $2A -00052Br 1 2B .byt $2B -00052Cr 1 2C .byt $2C -00052Dr 1 2D .byt $2D -00052Er 1 2E .byt $2E -00052Fr 1 2F .byt $2F -000530r 1 30 .byt $30 -000531r 1 31 .byt $31 -000532r 1 32 .byt $32 -000533r 1 33 .byt $33 -000534r 1 34 .byt $34 -000535r 1 35 .byt $35 -000536r 1 36 .byt $36 -000537r 1 37 .byt $37 -000538r 1 38 .byt $38 -000539r 1 39 .byt $39 -00053Ar 1 3A .byt $3A -00053Br 1 3B .byt $3B -00053Cr 1 3C .byt $3C -00053Dr 1 3D .byt $3D -00053Er 1 3E .byt $3E -00053Fr 1 3F .byt $3F -000540r 1 40 .byt $40 -000541r 1 41 .byt $41 -000542r 1 42 .byt $42 -000543r 1 43 .byt $43 -000544r 1 44 .byt $44 -000545r 1 45 .byt $45 -000546r 1 46 .byt $46 -000547r 1 47 .byt $47 -000548r 1 48 .byt $48 -000549r 1 49 .byt $49 -00054Ar 1 4A .byt $4A -00054Br 1 4B .byt $4B -00054Cr 1 4C .byt $4C -00054Dr 1 4D .byt $4D -00054Er 1 4E .byt $4E -00054Fr 1 4F .byt $4F -000550r 1 50 .byt $50 -000551r 1 51 .byt $51 -000552r 1 52 .byt $52 -000553r 1 53 .byt $53 -000554r 1 54 .byt $54 -000555r 1 55 .byt $55 -000556r 1 56 .byt $56 -000557r 1 57 .byt $57 -000558r 1 58 .byt $58 -000559r 1 59 .byt $59 -00055Ar 1 5A .byt $5A -00055Br 1 5B .byt $5B -00055Cr 1 5C .byt $5C -00055Dr 1 5D .byt $5D -00055Er 1 5E .byt $5E -00055Fr 1 5F .byt $5F -000560r 1 60 .byt $60 -000561r 1 61 .byt $61 -000562r 1 62 .byt $62 -000563r 1 63 .byt $63 -000564r 1 64 .byt $64 -000565r 1 65 .byt $65 -000566r 1 66 .byt $66 -000567r 1 67 .byt $67 -000568r 1 68 .byt $68 -000569r 1 69 .byt $69 -00056Ar 1 6A .byt $6A -00056Br 1 6B .byt $6B -00056Cr 1 6C .byt $6C -00056Dr 1 6D .byt $6D -00056Er 1 6E .byt $6E -00056Fr 1 6F .byt $6F -000570r 1 70 .byt $70 -000571r 1 71 .byt $71 -000572r 1 72 .byt $72 -000573r 1 73 .byt $73 -000574r 1 74 .byt $74 -000575r 1 75 .byt $75 -000576r 1 76 .byt $76 -000577r 1 77 .byt $77 -000578r 1 78 .byt $78 -000579r 1 79 .byt $79 -00057Ar 1 7A .byt $7A -00057Br 1 7B .byt $7B -00057Cr 1 7C .byt $7C -00057Dr 1 7D .byt $7D -00057Er 1 7E .byt $7E -00057Fr 1 7F .byt $7F -000580r 1 80 .byt $80 -000581r 1 81 .byt $81 -000582r 1 82 .byt $82 -000583r 1 83 .byt $83 -000584r 1 84 .byt $84 -000585r 1 85 .byt $85 -000586r 1 86 .byt $86 -000587r 1 87 .byt $87 -000588r 1 88 .byt $88 -000589r 1 89 .byt $89 -00058Ar 1 8A .byt $8A -00058Br 1 8B .byt $8B -00058Cr 1 8C .byt $8C -00058Dr 1 8D .byt $8D -00058Er 1 8E .byt $8E -00058Fr 1 8F .byt $8F -000590r 1 90 .byt $90 -000591r 1 91 .byt $91 -000592r 1 92 .byt $92 -000593r 1 93 .byt $93 -000594r 1 94 .byt $94 -000595r 1 95 .byt $95 -000596r 1 96 .byt $96 -000597r 1 97 .byt $97 -000598r 1 98 .byt $98 -000599r 1 99 .byt $99 -00059Ar 1 9A .byt $9A -00059Br 1 9B .byt $9B -00059Cr 1 9C .byt $9C -00059Dr 1 9D .byt $9D -00059Er 1 9E .byt $9E -00059Fr 1 9F .byt $9F -0005A0r 1 A0 .byt $A0 -0005A1r 1 A1 .byt $A1 -0005A2r 1 A2 .byt $A2 -0005A3r 1 A3 .byt $A3 -0005A4r 1 A4 .byt $A4 -0005A5r 1 A5 .byt $A5 -0005A6r 1 A6 .byt $A6 -0005A7r 1 A7 .byt $A7 -0005A8r 1 A8 .byt $A8 -0005A9r 1 A9 .byt $A9 -0005AAr 1 AA .byt $AA -0005ABr 1 AB .byt $AB -0005ACr 1 AC .byt $AC -0005ADr 1 AD .byt $AD -0005AEr 1 AE .byt $AE -0005AFr 1 AF .byt $AF -0005B0r 1 B0 .byt $B0 -0005B1r 1 B1 .byt $B1 -0005B2r 1 B2 .byt $B2 -0005B3r 1 B3 .byt $B3 -0005B4r 1 B4 .byt $B4 -0005B5r 1 B5 .byt $B5 -0005B6r 1 B6 .byt $B6 -0005B7r 1 B7 .byt $B7 -0005B8r 1 B8 .byt $B8 -0005B9r 1 B9 .byt $B9 -0005BAr 1 BA .byt $BA -0005BBr 1 BB .byt $BB -0005BCr 1 BC .byt $BC -0005BDr 1 BD .byt $BD -0005BEr 1 BE .byt $BE -0005BFr 1 BF .byt $BF -0005C0r 1 C0 .byt $C0 -0005C1r 1 C1 .byt $C1 -0005C2r 1 C2 .byt $C2 -0005C3r 1 C3 .byt $C3 -0005C4r 1 C4 .byt $C4 -0005C5r 1 C5 .byt $C5 -0005C6r 1 C6 .byt $C6 -0005C7r 1 C7 .byt $C7 -0005C8r 1 C8 .byt $C8 -0005C9r 1 C9 .byt $C9 -0005CAr 1 CA .byt $CA -0005CBr 1 CB .byt $CB -0005CCr 1 CC .byt $CC -0005CDr 1 CD .byt $CD -0005CEr 1 CE .byt $CE -0005CFr 1 CF .byt $CF -0005D0r 1 D0 .byt $D0 -0005D1r 1 D1 .byt $D1 -0005D2r 1 D2 .byt $D2 -0005D3r 1 D3 .byt $D3 -0005D4r 1 D4 .byt $D4 -0005D5r 1 D5 .byt $D5 -0005D6r 1 D6 .byt $D6 -0005D7r 1 D7 .byt $D7 -0005D8r 1 D8 .byt $D8 -0005D9r 1 D9 .byt $D9 -0005DAr 1 DA .byt $DA -0005DBr 1 DB .byt $DB -0005DCr 1 DC .byt $DC -0005DDr 1 DD .byt $DD -0005DEr 1 DE .byt $DE -0005DFr 1 DF .byt $DF -0005E0r 1 E0 .byt $E0 -0005E1r 1 E1 .byt $E1 -0005E2r 1 E2 .byt $E2 -0005E3r 1 E3 .byt $E3 -0005E4r 1 E4 .byt $E4 -0005E5r 1 E5 .byt $E5 -0005E6r 1 E6 .byt $E6 -0005E7r 1 E7 .byt $E7 -0005E8r 1 E8 .byt $E8 -0005E9r 1 E9 .byt $E9 -0005EAr 1 EA .byt $EA -0005EBr 1 EB .byt $EB -0005ECr 1 EC .byt $EC -0005EDr 1 ED .byt $ED -0005EEr 1 EE .byt $EE -0005EFr 1 EF .byt $EF -0005F0r 1 F0 .byt $F0 -0005F1r 1 F1 .byt $F1 -0005F2r 1 F2 .byt $F2 -0005F3r 1 F3 .byt $F3 -0005F4r 1 F4 .byt $F4 -0005F5r 1 F5 .byt $F5 -0005F6r 1 F6 .byt $F6 -0005F7r 1 F7 .byt $F7 -0005F8r 1 F8 .byt $F8 -0005F9r 1 F9 .byt $F9 -0005FAr 1 FA .byt $FA -0005FBr 1 FB .byt $FB -0005FCr 1 FC .byt $FC -0005FDr 1 FD .byt $FD -0005FEr 1 FE .byt $FE -0005FFr 1 FF .byt $FF +000500r 1 ; 2-digit hex values, uppercase +000500r 1 00 .byt $00 +000501r 1 01 .byt $01 +000502r 1 02 .byt $02 +000503r 1 03 .byt $03 +000504r 1 04 .byt $04 +000505r 1 05 .byt $05 +000506r 1 06 .byt $06 +000507r 1 07 .byt $07 +000508r 1 08 .byt $08 +000509r 1 09 .byt $09 +00050Ar 1 0A .byt $0A +00050Br 1 0B .byt $0B +00050Cr 1 0C .byt $0C +00050Dr 1 0D .byt $0D +00050Er 1 0E .byt $0E +00050Fr 1 0F .byt $0F +000510r 1 10 .byt $10 +000511r 1 11 .byt $11 +000512r 1 12 .byt $12 +000513r 1 13 .byt $13 +000514r 1 14 .byt $14 +000515r 1 15 .byt $15 +000516r 1 16 .byt $16 +000517r 1 17 .byt $17 +000518r 1 18 .byt $18 +000519r 1 19 .byt $19 +00051Ar 1 1A .byt $1A +00051Br 1 1B .byt $1B +00051Cr 1 1C .byt $1C +00051Dr 1 1D .byt $1D +00051Er 1 1E .byt $1E +00051Fr 1 1F .byt $1F +000520r 1 20 .byt $20 +000521r 1 21 .byt $21 +000522r 1 22 .byt $22 +000523r 1 23 .byt $23 +000524r 1 24 .byt $24 +000525r 1 25 .byt $25 +000526r 1 26 .byt $26 +000527r 1 27 .byt $27 +000528r 1 28 .byt $28 +000529r 1 29 .byt $29 +00052Ar 1 2A .byt $2A +00052Br 1 2B .byt $2B +00052Cr 1 2C .byt $2C +00052Dr 1 2D .byt $2D +00052Er 1 2E .byt $2E +00052Fr 1 2F .byt $2F +000530r 1 30 .byt $30 +000531r 1 31 .byt $31 +000532r 1 32 .byt $32 +000533r 1 33 .byt $33 +000534r 1 34 .byt $34 +000535r 1 35 .byt $35 +000536r 1 36 .byt $36 +000537r 1 37 .byt $37 +000538r 1 38 .byt $38 +000539r 1 39 .byt $39 +00053Ar 1 3A .byt $3A +00053Br 1 3B .byt $3B +00053Cr 1 3C .byt $3C +00053Dr 1 3D .byt $3D +00053Er 1 3E .byt $3E +00053Fr 1 3F .byt $3F +000540r 1 40 .byt $40 +000541r 1 41 .byt $41 +000542r 1 42 .byt $42 +000543r 1 43 .byt $43 +000544r 1 44 .byt $44 +000545r 1 45 .byt $45 +000546r 1 46 .byt $46 +000547r 1 47 .byt $47 +000548r 1 48 .byt $48 +000549r 1 49 .byt $49 +00054Ar 1 4A .byt $4A +00054Br 1 4B .byt $4B +00054Cr 1 4C .byt $4C +00054Dr 1 4D .byt $4D +00054Er 1 4E .byt $4E +00054Fr 1 4F .byt $4F +000550r 1 50 .byt $50 +000551r 1 51 .byt $51 +000552r 1 52 .byt $52 +000553r 1 53 .byt $53 +000554r 1 54 .byt $54 +000555r 1 55 .byt $55 +000556r 1 56 .byt $56 +000557r 1 57 .byt $57 +000558r 1 58 .byt $58 +000559r 1 59 .byt $59 +00055Ar 1 5A .byt $5A +00055Br 1 5B .byt $5B +00055Cr 1 5C .byt $5C +00055Dr 1 5D .byt $5D +00055Er 1 5E .byt $5E +00055Fr 1 5F .byt $5F +000560r 1 60 .byt $60 +000561r 1 61 .byt $61 +000562r 1 62 .byt $62 +000563r 1 63 .byt $63 +000564r 1 64 .byt $64 +000565r 1 65 .byt $65 +000566r 1 66 .byt $66 +000567r 1 67 .byt $67 +000568r 1 68 .byt $68 +000569r 1 69 .byt $69 +00056Ar 1 6A .byt $6A +00056Br 1 6B .byt $6B +00056Cr 1 6C .byt $6C +00056Dr 1 6D .byt $6D +00056Er 1 6E .byt $6E +00056Fr 1 6F .byt $6F +000570r 1 70 .byt $70 +000571r 1 71 .byt $71 +000572r 1 72 .byt $72 +000573r 1 73 .byt $73 +000574r 1 74 .byt $74 +000575r 1 75 .byt $75 +000576r 1 76 .byt $76 +000577r 1 77 .byt $77 +000578r 1 78 .byt $78 +000579r 1 79 .byt $79 +00057Ar 1 7A .byt $7A +00057Br 1 7B .byt $7B +00057Cr 1 7C .byt $7C +00057Dr 1 7D .byt $7D +00057Er 1 7E .byt $7E +00057Fr 1 7F .byt $7F +000580r 1 80 .byt $80 +000581r 1 81 .byt $81 +000582r 1 82 .byt $82 +000583r 1 83 .byt $83 +000584r 1 84 .byt $84 +000585r 1 85 .byt $85 +000586r 1 86 .byt $86 +000587r 1 87 .byt $87 +000588r 1 88 .byt $88 +000589r 1 89 .byt $89 +00058Ar 1 8A .byt $8A +00058Br 1 8B .byt $8B +00058Cr 1 8C .byt $8C +00058Dr 1 8D .byt $8D +00058Er 1 8E .byt $8E +00058Fr 1 8F .byt $8F +000590r 1 90 .byt $90 +000591r 1 91 .byt $91 +000592r 1 92 .byt $92 +000593r 1 93 .byt $93 +000594r 1 94 .byt $94 +000595r 1 95 .byt $95 +000596r 1 96 .byt $96 +000597r 1 97 .byt $97 +000598r 1 98 .byt $98 +000599r 1 99 .byt $99 +00059Ar 1 9A .byt $9A +00059Br 1 9B .byt $9B +00059Cr 1 9C .byt $9C +00059Dr 1 9D .byt $9D +00059Er 1 9E .byt $9E +00059Fr 1 9F .byt $9F +0005A0r 1 A0 .byt $A0 +0005A1r 1 A1 .byt $A1 +0005A2r 1 A2 .byt $A2 +0005A3r 1 A3 .byt $A3 +0005A4r 1 A4 .byt $A4 +0005A5r 1 A5 .byt $A5 +0005A6r 1 A6 .byt $A6 +0005A7r 1 A7 .byt $A7 +0005A8r 1 A8 .byt $A8 +0005A9r 1 A9 .byt $A9 +0005AAr 1 AA .byt $AA +0005ABr 1 AB .byt $AB +0005ACr 1 AC .byt $AC +0005ADr 1 AD .byt $AD +0005AEr 1 AE .byt $AE +0005AFr 1 AF .byt $AF +0005B0r 1 B0 .byt $B0 +0005B1r 1 B1 .byt $B1 +0005B2r 1 B2 .byt $B2 +0005B3r 1 B3 .byt $B3 +0005B4r 1 B4 .byt $B4 +0005B5r 1 B5 .byt $B5 +0005B6r 1 B6 .byt $B6 +0005B7r 1 B7 .byt $B7 +0005B8r 1 B8 .byt $B8 +0005B9r 1 B9 .byt $B9 +0005BAr 1 BA .byt $BA +0005BBr 1 BB .byt $BB +0005BCr 1 BC .byt $BC +0005BDr 1 BD .byt $BD +0005BEr 1 BE .byt $BE +0005BFr 1 BF .byt $BF +0005C0r 1 C0 .byt $C0 +0005C1r 1 C1 .byt $C1 +0005C2r 1 C2 .byt $C2 +0005C3r 1 C3 .byt $C3 +0005C4r 1 C4 .byt $C4 +0005C5r 1 C5 .byt $C5 +0005C6r 1 C6 .byt $C6 +0005C7r 1 C7 .byt $C7 +0005C8r 1 C8 .byt $C8 +0005C9r 1 C9 .byt $C9 +0005CAr 1 CA .byt $CA +0005CBr 1 CB .byt $CB +0005CCr 1 CC .byt $CC +0005CDr 1 CD .byt $CD +0005CEr 1 CE .byt $CE +0005CFr 1 CF .byt $CF +0005D0r 1 D0 .byt $D0 +0005D1r 1 D1 .byt $D1 +0005D2r 1 D2 .byt $D2 +0005D3r 1 D3 .byt $D3 +0005D4r 1 D4 .byt $D4 +0005D5r 1 D5 .byt $D5 +0005D6r 1 D6 .byt $D6 +0005D7r 1 D7 .byt $D7 +0005D8r 1 D8 .byt $D8 +0005D9r 1 D9 .byt $D9 +0005DAr 1 DA .byt $DA +0005DBr 1 DB .byt $DB +0005DCr 1 DC .byt $DC +0005DDr 1 DD .byt $DD +0005DEr 1 DE .byt $DE +0005DFr 1 DF .byt $DF +0005E0r 1 E0 .byt $E0 +0005E1r 1 E1 .byt $E1 +0005E2r 1 E2 .byt $E2 +0005E3r 1 E3 .byt $E3 +0005E4r 1 E4 .byt $E4 +0005E5r 1 E5 .byt $E5 +0005E6r 1 E6 .byt $E6 +0005E7r 1 E7 .byt $E7 +0005E8r 1 E8 .byt $E8 +0005E9r 1 E9 .byt $E9 +0005EAr 1 EA .byt $EA +0005EBr 1 EB .byt $EB +0005ECr 1 EC .byt $EC +0005EDr 1 ED .byt $ED +0005EEr 1 EE .byt $EE +0005EFr 1 EF .byt $EF +0005F0r 1 F0 .byt $F0 +0005F1r 1 F1 .byt $F1 +0005F2r 1 F2 .byt $F2 +0005F3r 1 F3 .byt $F3 +0005F4r 1 F4 .byt $F4 +0005F5r 1 F5 .byt $F5 +0005F6r 1 F6 .byt $F6 +0005F7r 1 F7 .byt $F7 +0005F8r 1 F8 .byt $F8 +0005F9r 1 F9 .byt $F9 +0005FAr 1 FA .byt $FA +0005FBr 1 FB .byt $FB +0005FCr 1 FC .byt $FC +0005FDr 1 FD .byt $FD +0005FEr 1 FE .byt $FE +0005FFr 1 FF .byt $FF 000600r 1 -000600r 1 ; alternative hex values -000600r 1 00 .byt 0h -000601r 1 01 .byt 1h -000602r 1 02 .byt 2h -000603r 1 03 .byt 3h -000604r 1 04 .byt 4h -000605r 1 05 .byt 5h -000606r 1 06 .byt 6h -000607r 1 07 .byt 7h -000608r 1 08 .byt 8h -000609r 1 09 .byt 9h -00060Ar 1 0A .byt 0ah -00060Br 1 0B .byt 0bh -00060Cr 1 0C .byt 0ch -00060Dr 1 0D .byt 0dh -00060Er 1 0E .byt 0eh -00060Fr 1 0F .byt 0fh -000610r 1 10 .byt 10h -000611r 1 11 .byt 11h -000612r 1 12 .byt 12h -000613r 1 13 .byt 13h -000614r 1 14 .byt 14h -000615r 1 15 .byt 15h -000616r 1 16 .byt 16h -000617r 1 17 .byt 17h -000618r 1 18 .byt 18h -000619r 1 19 .byt 19h -00061Ar 1 1A .byt 1ah -00061Br 1 1B .byt 1bh -00061Cr 1 1C .byt 1ch -00061Dr 1 1D .byt 1dh -00061Er 1 1E .byt 1eh -00061Fr 1 1F .byt 1fh -000620r 1 20 .byt 20h -000621r 1 21 .byt 21h -000622r 1 22 .byt 22h -000623r 1 23 .byt 23h -000624r 1 24 .byt 24h -000625r 1 25 .byt 25h -000626r 1 26 .byt 26h -000627r 1 27 .byt 27h -000628r 1 28 .byt 28h -000629r 1 29 .byt 29h -00062Ar 1 2A .byt 2ah -00062Br 1 2B .byt 2bh -00062Cr 1 2C .byt 2ch -00062Dr 1 2D .byt 2dh -00062Er 1 2E .byt 2eh -00062Fr 1 2F .byt 2fh -000630r 1 30 .byt 30h -000631r 1 31 .byt 31h -000632r 1 32 .byt 32h -000633r 1 33 .byt 33h -000634r 1 34 .byt 34h -000635r 1 35 .byt 35h -000636r 1 36 .byt 36h -000637r 1 37 .byt 37h -000638r 1 38 .byt 38h -000639r 1 39 .byt 39h -00063Ar 1 3A .byt 3ah -00063Br 1 3B .byt 3bh -00063Cr 1 3C .byt 3ch -00063Dr 1 3D .byt 3dh -00063Er 1 3E .byt 3eh -00063Fr 1 3F .byt 3fh -000640r 1 40 .byt 40h -000641r 1 41 .byt 41h -000642r 1 42 .byt 42h -000643r 1 43 .byt 43h -000644r 1 44 .byt 44h -000645r 1 45 .byt 45h -000646r 1 46 .byt 46h -000647r 1 47 .byt 47h -000648r 1 48 .byt 48h -000649r 1 49 .byt 49h -00064Ar 1 4A .byt 4ah -00064Br 1 4B .byt 4bh -00064Cr 1 4C .byt 4ch -00064Dr 1 4D .byt 4dh -00064Er 1 4E .byt 4eh -00064Fr 1 4F .byt 4fh -000650r 1 50 .byt 50h -000651r 1 51 .byt 51h -000652r 1 52 .byt 52h -000653r 1 53 .byt 53h -000654r 1 54 .byt 54h -000655r 1 55 .byt 55h -000656r 1 56 .byt 56h -000657r 1 57 .byt 57h -000658r 1 58 .byt 58h -000659r 1 59 .byt 59h -00065Ar 1 5A .byt 5ah -00065Br 1 5B .byt 5bh -00065Cr 1 5C .byt 5ch -00065Dr 1 5D .byt 5dh -00065Er 1 5E .byt 5eh -00065Fr 1 5F .byt 5fh -000660r 1 60 .byt 60h -000661r 1 61 .byt 61h -000662r 1 62 .byt 62h -000663r 1 63 .byt 63h -000664r 1 64 .byt 64h -000665r 1 65 .byt 65h -000666r 1 66 .byt 66h -000667r 1 67 .byt 67h -000668r 1 68 .byt 68h -000669r 1 69 .byt 69h -00066Ar 1 6A .byt 6ah -00066Br 1 6B .byt 6bh -00066Cr 1 6C .byt 6ch -00066Dr 1 6D .byt 6dh -00066Er 1 6E .byt 6eh -00066Fr 1 6F .byt 6fh -000670r 1 70 .byt 70h -000671r 1 71 .byt 71h -000672r 1 72 .byt 72h -000673r 1 73 .byt 73h -000674r 1 74 .byt 74h -000675r 1 75 .byt 75h -000676r 1 76 .byt 76h -000677r 1 77 .byt 77h -000678r 1 78 .byt 78h -000679r 1 79 .byt 79h -00067Ar 1 7A .byt 7ah -00067Br 1 7B .byt 7bh -00067Cr 1 7C .byt 7ch -00067Dr 1 7D .byt 7dh -00067Er 1 7E .byt 7eh -00067Fr 1 7F .byt 7fh -000680r 1 80 .byt 80h -000681r 1 81 .byt 81h -000682r 1 82 .byt 82h -000683r 1 83 .byt 83h -000684r 1 84 .byt 84h -000685r 1 85 .byt 85h -000686r 1 86 .byt 86h -000687r 1 87 .byt 87h -000688r 1 88 .byt 88h -000689r 1 89 .byt 89h -00068Ar 1 8A .byt 8ah -00068Br 1 8B .byt 8bh -00068Cr 1 8C .byt 8ch -00068Dr 1 8D .byt 8dh -00068Er 1 8E .byt 8eh -00068Fr 1 8F .byt 8fh -000690r 1 90 .byt 90h -000691r 1 91 .byt 91h -000692r 1 92 .byt 92h -000693r 1 93 .byt 93h -000694r 1 94 .byt 94h -000695r 1 95 .byt 95h -000696r 1 96 .byt 96h -000697r 1 97 .byt 97h -000698r 1 98 .byt 98h -000699r 1 99 .byt 99h -00069Ar 1 9A .byt 9ah -00069Br 1 9B .byt 9bh -00069Cr 1 9C .byt 9ch -00069Dr 1 9D .byt 9dh -00069Er 1 9E .byt 9eh -00069Fr 1 9F .byt 9fh -0006A0r 1 A0 .byt 0a0h -0006A1r 1 A1 .byt 0a1h -0006A2r 1 A2 .byt 0a2h -0006A3r 1 A3 .byt 0a3h -0006A4r 1 A4 .byt 0a4h -0006A5r 1 A5 .byt 0a5h -0006A6r 1 A6 .byt 0a6h -0006A7r 1 A7 .byt 0a7h -0006A8r 1 A8 .byt 0a8h -0006A9r 1 A9 .byt 0a9h -0006AAr 1 AA .byt 0aah -0006ABr 1 AB .byt 0abh -0006ACr 1 AC .byt 0ach -0006ADr 1 AD .byt 0adh -0006AEr 1 AE .byt 0aeh -0006AFr 1 AF .byt 0afh -0006B0r 1 B0 .byt 0b0h -0006B1r 1 B1 .byt 0b1h -0006B2r 1 B2 .byt 0b2h -0006B3r 1 B3 .byt 0b3h -0006B4r 1 B4 .byt 0b4h -0006B5r 1 B5 .byt 0b5h -0006B6r 1 B6 .byt 0b6h -0006B7r 1 B7 .byt 0b7h -0006B8r 1 B8 .byt 0b8h -0006B9r 1 B9 .byt 0b9h -0006BAr 1 BA .byt 0bah -0006BBr 1 BB .byt 0bbh -0006BCr 1 BC .byt 0bch -0006BDr 1 BD .byt 0bdh -0006BEr 1 BE .byt 0beh -0006BFr 1 BF .byt 0bfh -0006C0r 1 C0 .byt 0c0h -0006C1r 1 C1 .byt 0c1h -0006C2r 1 C2 .byt 0c2h -0006C3r 1 C3 .byt 0c3h -0006C4r 1 C4 .byt 0c4h -0006C5r 1 C5 .byt 0c5h -0006C6r 1 C6 .byt 0c6h -0006C7r 1 C7 .byt 0c7h -0006C8r 1 C8 .byt 0c8h -0006C9r 1 C9 .byt 0c9h -0006CAr 1 CA .byt 0cah -0006CBr 1 CB .byt 0cbh -0006CCr 1 CC .byt 0cch -0006CDr 1 CD .byt 0cdh -0006CEr 1 CE .byt 0ceh -0006CFr 1 CF .byt 0cfh -0006D0r 1 D0 .byt 0d0h -0006D1r 1 D1 .byt 0d1h -0006D2r 1 D2 .byt 0d2h -0006D3r 1 D3 .byt 0d3h -0006D4r 1 D4 .byt 0d4h -0006D5r 1 D5 .byt 0d5h -0006D6r 1 D6 .byt 0d6h -0006D7r 1 D7 .byt 0d7h -0006D8r 1 D8 .byt 0d8h -0006D9r 1 D9 .byt 0d9h -0006DAr 1 DA .byt 0dah -0006DBr 1 DB .byt 0dbh -0006DCr 1 DC .byt 0dch -0006DDr 1 DD .byt 0ddh -0006DEr 1 DE .byt 0deh -0006DFr 1 DF .byt 0dfh -0006E0r 1 E0 .byt 0e0h -0006E1r 1 E1 .byt 0e1h -0006E2r 1 E2 .byt 0e2h -0006E3r 1 E3 .byt 0e3h -0006E4r 1 E4 .byt 0e4h -0006E5r 1 E5 .byt 0e5h -0006E6r 1 E6 .byt 0e6h -0006E7r 1 E7 .byt 0e7h -0006E8r 1 E8 .byt 0e8h -0006E9r 1 E9 .byt 0e9h -0006EAr 1 EA .byt 0eah -0006EBr 1 EB .byt 0ebh -0006ECr 1 EC .byt 0ech -0006EDr 1 ED .byt 0edh -0006EEr 1 EE .byt 0eeh -0006EFr 1 EF .byt 0efh -0006F0r 1 F0 .byt 0f0h -0006F1r 1 F1 .byt 0f1h -0006F2r 1 F2 .byt 0f2h -0006F3r 1 F3 .byt 0f3h -0006F4r 1 F4 .byt 0f4h -0006F5r 1 F5 .byt 0f5h -0006F6r 1 F6 .byt 0f6h -0006F7r 1 F7 .byt 0f7h -0006F8r 1 F8 .byt 0f8h -0006F9r 1 F9 .byt 0f9h -0006FAr 1 FA .byt 0fah -0006FBr 1 FB .byt 0fbh -0006FCr 1 FC .byt 0fch -0006FDr 1 FD .byt 0fdh -0006FEr 1 FE .byt 0feh -0006FFr 1 FF .byt 0ffh +000600r 1 ; alternative hex values +000600r 1 00 .byt 0h +000601r 1 01 .byt 1h +000602r 1 02 .byt 2h +000603r 1 03 .byt 3h +000604r 1 04 .byt 4h +000605r 1 05 .byt 5h +000606r 1 06 .byt 6h +000607r 1 07 .byt 7h +000608r 1 08 .byt 8h +000609r 1 09 .byt 9h +00060Ar 1 0A .byt 0ah +00060Br 1 0B .byt 0bh +00060Cr 1 0C .byt 0ch +00060Dr 1 0D .byt 0dh +00060Er 1 0E .byt 0eh +00060Fr 1 0F .byt 0fh +000610r 1 10 .byt 10h +000611r 1 11 .byt 11h +000612r 1 12 .byt 12h +000613r 1 13 .byt 13h +000614r 1 14 .byt 14h +000615r 1 15 .byt 15h +000616r 1 16 .byt 16h +000617r 1 17 .byt 17h +000618r 1 18 .byt 18h +000619r 1 19 .byt 19h +00061Ar 1 1A .byt 1ah +00061Br 1 1B .byt 1bh +00061Cr 1 1C .byt 1ch +00061Dr 1 1D .byt 1dh +00061Er 1 1E .byt 1eh +00061Fr 1 1F .byt 1fh +000620r 1 20 .byt 20h +000621r 1 21 .byt 21h +000622r 1 22 .byt 22h +000623r 1 23 .byt 23h +000624r 1 24 .byt 24h +000625r 1 25 .byt 25h +000626r 1 26 .byt 26h +000627r 1 27 .byt 27h +000628r 1 28 .byt 28h +000629r 1 29 .byt 29h +00062Ar 1 2A .byt 2ah +00062Br 1 2B .byt 2bh +00062Cr 1 2C .byt 2ch +00062Dr 1 2D .byt 2dh +00062Er 1 2E .byt 2eh +00062Fr 1 2F .byt 2fh +000630r 1 30 .byt 30h +000631r 1 31 .byt 31h +000632r 1 32 .byt 32h +000633r 1 33 .byt 33h +000634r 1 34 .byt 34h +000635r 1 35 .byt 35h +000636r 1 36 .byt 36h +000637r 1 37 .byt 37h +000638r 1 38 .byt 38h +000639r 1 39 .byt 39h +00063Ar 1 3A .byt 3ah +00063Br 1 3B .byt 3bh +00063Cr 1 3C .byt 3ch +00063Dr 1 3D .byt 3dh +00063Er 1 3E .byt 3eh +00063Fr 1 3F .byt 3fh +000640r 1 40 .byt 40h +000641r 1 41 .byt 41h +000642r 1 42 .byt 42h +000643r 1 43 .byt 43h +000644r 1 44 .byt 44h +000645r 1 45 .byt 45h +000646r 1 46 .byt 46h +000647r 1 47 .byt 47h +000648r 1 48 .byt 48h +000649r 1 49 .byt 49h +00064Ar 1 4A .byt 4ah +00064Br 1 4B .byt 4bh +00064Cr 1 4C .byt 4ch +00064Dr 1 4D .byt 4dh +00064Er 1 4E .byt 4eh +00064Fr 1 4F .byt 4fh +000650r 1 50 .byt 50h +000651r 1 51 .byt 51h +000652r 1 52 .byt 52h +000653r 1 53 .byt 53h +000654r 1 54 .byt 54h +000655r 1 55 .byt 55h +000656r 1 56 .byt 56h +000657r 1 57 .byt 57h +000658r 1 58 .byt 58h +000659r 1 59 .byt 59h +00065Ar 1 5A .byt 5ah +00065Br 1 5B .byt 5bh +00065Cr 1 5C .byt 5ch +00065Dr 1 5D .byt 5dh +00065Er 1 5E .byt 5eh +00065Fr 1 5F .byt 5fh +000660r 1 60 .byt 60h +000661r 1 61 .byt 61h +000662r 1 62 .byt 62h +000663r 1 63 .byt 63h +000664r 1 64 .byt 64h +000665r 1 65 .byt 65h +000666r 1 66 .byt 66h +000667r 1 67 .byt 67h +000668r 1 68 .byt 68h +000669r 1 69 .byt 69h +00066Ar 1 6A .byt 6ah +00066Br 1 6B .byt 6bh +00066Cr 1 6C .byt 6ch +00066Dr 1 6D .byt 6dh +00066Er 1 6E .byt 6eh +00066Fr 1 6F .byt 6fh +000670r 1 70 .byt 70h +000671r 1 71 .byt 71h +000672r 1 72 .byt 72h +000673r 1 73 .byt 73h +000674r 1 74 .byt 74h +000675r 1 75 .byt 75h +000676r 1 76 .byt 76h +000677r 1 77 .byt 77h +000678r 1 78 .byt 78h +000679r 1 79 .byt 79h +00067Ar 1 7A .byt 7ah +00067Br 1 7B .byt 7bh +00067Cr 1 7C .byt 7ch +00067Dr 1 7D .byt 7dh +00067Er 1 7E .byt 7eh +00067Fr 1 7F .byt 7fh +000680r 1 80 .byt 80h +000681r 1 81 .byt 81h +000682r 1 82 .byt 82h +000683r 1 83 .byt 83h +000684r 1 84 .byt 84h +000685r 1 85 .byt 85h +000686r 1 86 .byt 86h +000687r 1 87 .byt 87h +000688r 1 88 .byt 88h +000689r 1 89 .byt 89h +00068Ar 1 8A .byt 8ah +00068Br 1 8B .byt 8bh +00068Cr 1 8C .byt 8ch +00068Dr 1 8D .byt 8dh +00068Er 1 8E .byt 8eh +00068Fr 1 8F .byt 8fh +000690r 1 90 .byt 90h +000691r 1 91 .byt 91h +000692r 1 92 .byt 92h +000693r 1 93 .byt 93h +000694r 1 94 .byt 94h +000695r 1 95 .byt 95h +000696r 1 96 .byt 96h +000697r 1 97 .byt 97h +000698r 1 98 .byt 98h +000699r 1 99 .byt 99h +00069Ar 1 9A .byt 9ah +00069Br 1 9B .byt 9bh +00069Cr 1 9C .byt 9ch +00069Dr 1 9D .byt 9dh +00069Er 1 9E .byt 9eh +00069Fr 1 9F .byt 9fh +0006A0r 1 A0 .byt 0a0h +0006A1r 1 A1 .byt 0a1h +0006A2r 1 A2 .byt 0a2h +0006A3r 1 A3 .byt 0a3h +0006A4r 1 A4 .byt 0a4h +0006A5r 1 A5 .byt 0a5h +0006A6r 1 A6 .byt 0a6h +0006A7r 1 A7 .byt 0a7h +0006A8r 1 A8 .byt 0a8h +0006A9r 1 A9 .byt 0a9h +0006AAr 1 AA .byt 0aah +0006ABr 1 AB .byt 0abh +0006ACr 1 AC .byt 0ach +0006ADr 1 AD .byt 0adh +0006AEr 1 AE .byt 0aeh +0006AFr 1 AF .byt 0afh +0006B0r 1 B0 .byt 0b0h +0006B1r 1 B1 .byt 0b1h +0006B2r 1 B2 .byt 0b2h +0006B3r 1 B3 .byt 0b3h +0006B4r 1 B4 .byt 0b4h +0006B5r 1 B5 .byt 0b5h +0006B6r 1 B6 .byt 0b6h +0006B7r 1 B7 .byt 0b7h +0006B8r 1 B8 .byt 0b8h +0006B9r 1 B9 .byt 0b9h +0006BAr 1 BA .byt 0bah +0006BBr 1 BB .byt 0bbh +0006BCr 1 BC .byt 0bch +0006BDr 1 BD .byt 0bdh +0006BEr 1 BE .byt 0beh +0006BFr 1 BF .byt 0bfh +0006C0r 1 C0 .byt 0c0h +0006C1r 1 C1 .byt 0c1h +0006C2r 1 C2 .byt 0c2h +0006C3r 1 C3 .byt 0c3h +0006C4r 1 C4 .byt 0c4h +0006C5r 1 C5 .byt 0c5h +0006C6r 1 C6 .byt 0c6h +0006C7r 1 C7 .byt 0c7h +0006C8r 1 C8 .byt 0c8h +0006C9r 1 C9 .byt 0c9h +0006CAr 1 CA .byt 0cah +0006CBr 1 CB .byt 0cbh +0006CCr 1 CC .byt 0cch +0006CDr 1 CD .byt 0cdh +0006CEr 1 CE .byt 0ceh +0006CFr 1 CF .byt 0cfh +0006D0r 1 D0 .byt 0d0h +0006D1r 1 D1 .byt 0d1h +0006D2r 1 D2 .byt 0d2h +0006D3r 1 D3 .byt 0d3h +0006D4r 1 D4 .byt 0d4h +0006D5r 1 D5 .byt 0d5h +0006D6r 1 D6 .byt 0d6h +0006D7r 1 D7 .byt 0d7h +0006D8r 1 D8 .byt 0d8h +0006D9r 1 D9 .byt 0d9h +0006DAr 1 DA .byt 0dah +0006DBr 1 DB .byt 0dbh +0006DCr 1 DC .byt 0dch +0006DDr 1 DD .byt 0ddh +0006DEr 1 DE .byt 0deh +0006DFr 1 DF .byt 0dfh +0006E0r 1 E0 .byt 0e0h +0006E1r 1 E1 .byt 0e1h +0006E2r 1 E2 .byt 0e2h +0006E3r 1 E3 .byt 0e3h +0006E4r 1 E4 .byt 0e4h +0006E5r 1 E5 .byt 0e5h +0006E6r 1 E6 .byt 0e6h +0006E7r 1 E7 .byt 0e7h +0006E8r 1 E8 .byt 0e8h +0006E9r 1 E9 .byt 0e9h +0006EAr 1 EA .byt 0eah +0006EBr 1 EB .byt 0ebh +0006ECr 1 EC .byt 0ech +0006EDr 1 ED .byt 0edh +0006EEr 1 EE .byt 0eeh +0006EFr 1 EF .byt 0efh +0006F0r 1 F0 .byt 0f0h +0006F1r 1 F1 .byt 0f1h +0006F2r 1 F2 .byt 0f2h +0006F3r 1 F3 .byt 0f3h +0006F4r 1 F4 .byt 0f4h +0006F5r 1 F5 .byt 0f5h +0006F6r 1 F6 .byt 0f6h +0006F7r 1 F7 .byt 0f7h +0006F8r 1 F8 .byt 0f8h +0006F9r 1 F9 .byt 0f9h +0006FAr 1 FA .byt 0fah +0006FBr 1 FB .byt 0fbh +0006FCr 1 FC .byt 0fch +0006FDr 1 FD .byt 0fdh +0006FEr 1 FE .byt 0feh +0006FFr 1 FF .byt 0ffh 000700r 1 -000700r 1 ; alternative hex values, uppercase -000700r 1 00 .byt 0h -000701r 1 01 .byt 1h -000702r 1 02 .byt 2h -000703r 1 03 .byt 3h -000704r 1 04 .byt 4h -000705r 1 05 .byt 5h -000706r 1 06 .byt 6h -000707r 1 07 .byt 7h -000708r 1 08 .byt 8h -000709r 1 09 .byt 9h -00070Ar 1 0A .byt 0Ah -00070Br 1 0B .byt 0Bh -00070Cr 1 0C .byt 0Ch -00070Dr 1 0D .byt 0Dh -00070Er 1 0E .byt 0Eh -00070Fr 1 0F .byt 0Fh -000710r 1 10 .byt 10h -000711r 1 11 .byt 11h -000712r 1 12 .byt 12h -000713r 1 13 .byt 13h -000714r 1 14 .byt 14h -000715r 1 15 .byt 15h -000716r 1 16 .byt 16h -000717r 1 17 .byt 17h -000718r 1 18 .byt 18h -000719r 1 19 .byt 19h -00071Ar 1 1A .byt 1Ah -00071Br 1 1B .byt 1Bh -00071Cr 1 1C .byt 1Ch -00071Dr 1 1D .byt 1Dh -00071Er 1 1E .byt 1Eh -00071Fr 1 1F .byt 1Fh -000720r 1 20 .byt 20h -000721r 1 21 .byt 21h -000722r 1 22 .byt 22h -000723r 1 23 .byt 23h -000724r 1 24 .byt 24h -000725r 1 25 .byt 25h -000726r 1 26 .byt 26h -000727r 1 27 .byt 27h -000728r 1 28 .byt 28h -000729r 1 29 .byt 29h -00072Ar 1 2A .byt 2Ah -00072Br 1 2B .byt 2Bh -00072Cr 1 2C .byt 2Ch -00072Dr 1 2D .byt 2Dh -00072Er 1 2E .byt 2Eh -00072Fr 1 2F .byt 2Fh -000730r 1 30 .byt 30h -000731r 1 31 .byt 31h -000732r 1 32 .byt 32h -000733r 1 33 .byt 33h -000734r 1 34 .byt 34h -000735r 1 35 .byt 35h -000736r 1 36 .byt 36h -000737r 1 37 .byt 37h -000738r 1 38 .byt 38h -000739r 1 39 .byt 39h -00073Ar 1 3A .byt 3Ah -00073Br 1 3B .byt 3Bh -00073Cr 1 3C .byt 3Ch -00073Dr 1 3D .byt 3Dh -00073Er 1 3E .byt 3Eh -00073Fr 1 3F .byt 3Fh -000740r 1 40 .byt 40h -000741r 1 41 .byt 41h -000742r 1 42 .byt 42h -000743r 1 43 .byt 43h -000744r 1 44 .byt 44h -000745r 1 45 .byt 45h -000746r 1 46 .byt 46h -000747r 1 47 .byt 47h -000748r 1 48 .byt 48h -000749r 1 49 .byt 49h -00074Ar 1 4A .byt 4Ah -00074Br 1 4B .byt 4Bh -00074Cr 1 4C .byt 4Ch -00074Dr 1 4D .byt 4Dh -00074Er 1 4E .byt 4Eh -00074Fr 1 4F .byt 4Fh -000750r 1 50 .byt 50h -000751r 1 51 .byt 51h -000752r 1 52 .byt 52h -000753r 1 53 .byt 53h -000754r 1 54 .byt 54h -000755r 1 55 .byt 55h -000756r 1 56 .byt 56h -000757r 1 57 .byt 57h -000758r 1 58 .byt 58h -000759r 1 59 .byt 59h -00075Ar 1 5A .byt 5Ah -00075Br 1 5B .byt 5Bh -00075Cr 1 5C .byt 5Ch -00075Dr 1 5D .byt 5Dh -00075Er 1 5E .byt 5Eh -00075Fr 1 5F .byt 5Fh -000760r 1 60 .byt 60h -000761r 1 61 .byt 61h -000762r 1 62 .byt 62h -000763r 1 63 .byt 63h -000764r 1 64 .byt 64h -000765r 1 65 .byt 65h -000766r 1 66 .byt 66h -000767r 1 67 .byt 67h -000768r 1 68 .byt 68h -000769r 1 69 .byt 69h -00076Ar 1 6A .byt 6Ah -00076Br 1 6B .byt 6Bh -00076Cr 1 6C .byt 6Ch -00076Dr 1 6D .byt 6Dh -00076Er 1 6E .byt 6Eh -00076Fr 1 6F .byt 6Fh -000770r 1 70 .byt 70h -000771r 1 71 .byt 71h -000772r 1 72 .byt 72h -000773r 1 73 .byt 73h -000774r 1 74 .byt 74h -000775r 1 75 .byt 75h -000776r 1 76 .byt 76h -000777r 1 77 .byt 77h -000778r 1 78 .byt 78h -000779r 1 79 .byt 79h -00077Ar 1 7A .byt 7Ah -00077Br 1 7B .byt 7Bh -00077Cr 1 7C .byt 7Ch -00077Dr 1 7D .byt 7Dh -00077Er 1 7E .byt 7Eh -00077Fr 1 7F .byt 7Fh -000780r 1 80 .byt 80h -000781r 1 81 .byt 81h -000782r 1 82 .byt 82h -000783r 1 83 .byt 83h -000784r 1 84 .byt 84h -000785r 1 85 .byt 85h -000786r 1 86 .byt 86h -000787r 1 87 .byt 87h -000788r 1 88 .byt 88h -000789r 1 89 .byt 89h -00078Ar 1 8A .byt 8Ah -00078Br 1 8B .byt 8Bh -00078Cr 1 8C .byt 8Ch -00078Dr 1 8D .byt 8Dh -00078Er 1 8E .byt 8Eh -00078Fr 1 8F .byt 8Fh -000790r 1 90 .byt 90h -000791r 1 91 .byt 91h -000792r 1 92 .byt 92h -000793r 1 93 .byt 93h -000794r 1 94 .byt 94h -000795r 1 95 .byt 95h -000796r 1 96 .byt 96h -000797r 1 97 .byt 97h -000798r 1 98 .byt 98h -000799r 1 99 .byt 99h -00079Ar 1 9A .byt 9Ah -00079Br 1 9B .byt 9Bh -00079Cr 1 9C .byt 9Ch -00079Dr 1 9D .byt 9Dh -00079Er 1 9E .byt 9Eh -00079Fr 1 9F .byt 9Fh -0007A0r 1 A0 .byt 0A0h -0007A1r 1 A1 .byt 0A1h -0007A2r 1 A2 .byt 0A2h -0007A3r 1 A3 .byt 0A3h -0007A4r 1 A4 .byt 0A4h -0007A5r 1 A5 .byt 0A5h -0007A6r 1 A6 .byt 0A6h -0007A7r 1 A7 .byt 0A7h -0007A8r 1 A8 .byt 0A8h -0007A9r 1 A9 .byt 0A9h -0007AAr 1 AA .byt 0AAh -0007ABr 1 AB .byt 0ABh -0007ACr 1 AC .byt 0ACh -0007ADr 1 AD .byt 0ADh -0007AEr 1 AE .byt 0AEh -0007AFr 1 AF .byt 0AFh -0007B0r 1 B0 .byt 0B0h -0007B1r 1 B1 .byt 0B1h -0007B2r 1 B2 .byt 0B2h -0007B3r 1 B3 .byt 0B3h -0007B4r 1 B4 .byt 0B4h -0007B5r 1 B5 .byt 0B5h -0007B6r 1 B6 .byt 0B6h -0007B7r 1 B7 .byt 0B7h -0007B8r 1 B8 .byt 0B8h -0007B9r 1 B9 .byt 0B9h -0007BAr 1 BA .byt 0BAh -0007BBr 1 BB .byt 0BBh -0007BCr 1 BC .byt 0BCh -0007BDr 1 BD .byt 0BDh -0007BEr 1 BE .byt 0BEh -0007BFr 1 BF .byt 0BFh -0007C0r 1 C0 .byt 0C0h -0007C1r 1 C1 .byt 0C1h -0007C2r 1 C2 .byt 0C2h -0007C3r 1 C3 .byt 0C3h -0007C4r 1 C4 .byt 0C4h -0007C5r 1 C5 .byt 0C5h -0007C6r 1 C6 .byt 0C6h -0007C7r 1 C7 .byt 0C7h -0007C8r 1 C8 .byt 0C8h -0007C9r 1 C9 .byt 0C9h -0007CAr 1 CA .byt 0CAh -0007CBr 1 CB .byt 0CBh -0007CCr 1 CC .byt 0CCh -0007CDr 1 CD .byt 0CDh -0007CEr 1 CE .byt 0CEh -0007CFr 1 CF .byt 0CFh -0007D0r 1 D0 .byt 0D0h -0007D1r 1 D1 .byt 0D1h -0007D2r 1 D2 .byt 0D2h -0007D3r 1 D3 .byt 0D3h -0007D4r 1 D4 .byt 0D4h -0007D5r 1 D5 .byt 0D5h -0007D6r 1 D6 .byt 0D6h -0007D7r 1 D7 .byt 0D7h -0007D8r 1 D8 .byt 0D8h -0007D9r 1 D9 .byt 0D9h -0007DAr 1 DA .byt 0DAh -0007DBr 1 DB .byt 0DBh -0007DCr 1 DC .byt 0DCh -0007DDr 1 DD .byt 0DDh -0007DEr 1 DE .byt 0DEh -0007DFr 1 DF .byt 0DFh -0007E0r 1 E0 .byt 0E0h -0007E1r 1 E1 .byt 0E1h -0007E2r 1 E2 .byt 0E2h -0007E3r 1 E3 .byt 0E3h -0007E4r 1 E4 .byt 0E4h -0007E5r 1 E5 .byt 0E5h -0007E6r 1 E6 .byt 0E6h -0007E7r 1 E7 .byt 0E7h -0007E8r 1 E8 .byt 0E8h -0007E9r 1 E9 .byt 0E9h -0007EAr 1 EA .byt 0EAh -0007EBr 1 EB .byt 0EBh -0007ECr 1 EC .byt 0ECh -0007EDr 1 ED .byt 0EDh -0007EEr 1 EE .byt 0EEh -0007EFr 1 EF .byt 0EFh -0007F0r 1 F0 .byt 0F0h -0007F1r 1 F1 .byt 0F1h -0007F2r 1 F2 .byt 0F2h -0007F3r 1 F3 .byt 0F3h -0007F4r 1 F4 .byt 0F4h -0007F5r 1 F5 .byt 0F5h -0007F6r 1 F6 .byt 0F6h -0007F7r 1 F7 .byt 0F7h -0007F8r 1 F8 .byt 0F8h -0007F9r 1 F9 .byt 0F9h -0007FAr 1 FA .byt 0FAh -0007FBr 1 FB .byt 0FBh -0007FCr 1 FC .byt 0FCh -0007FDr 1 FD .byt 0FDh -0007FEr 1 FE .byt 0FEh -0007FFr 1 FF .byt 0FFh +000700r 1 ; alternative hex values, uppercase +000700r 1 00 .byt 0h +000701r 1 01 .byt 1h +000702r 1 02 .byt 2h +000703r 1 03 .byt 3h +000704r 1 04 .byt 4h +000705r 1 05 .byt 5h +000706r 1 06 .byt 6h +000707r 1 07 .byt 7h +000708r 1 08 .byt 8h +000709r 1 09 .byt 9h +00070Ar 1 0A .byt 0Ah +00070Br 1 0B .byt 0Bh +00070Cr 1 0C .byt 0Ch +00070Dr 1 0D .byt 0Dh +00070Er 1 0E .byt 0Eh +00070Fr 1 0F .byt 0Fh +000710r 1 10 .byt 10h +000711r 1 11 .byt 11h +000712r 1 12 .byt 12h +000713r 1 13 .byt 13h +000714r 1 14 .byt 14h +000715r 1 15 .byt 15h +000716r 1 16 .byt 16h +000717r 1 17 .byt 17h +000718r 1 18 .byt 18h +000719r 1 19 .byt 19h +00071Ar 1 1A .byt 1Ah +00071Br 1 1B .byt 1Bh +00071Cr 1 1C .byt 1Ch +00071Dr 1 1D .byt 1Dh +00071Er 1 1E .byt 1Eh +00071Fr 1 1F .byt 1Fh +000720r 1 20 .byt 20h +000721r 1 21 .byt 21h +000722r 1 22 .byt 22h +000723r 1 23 .byt 23h +000724r 1 24 .byt 24h +000725r 1 25 .byt 25h +000726r 1 26 .byt 26h +000727r 1 27 .byt 27h +000728r 1 28 .byt 28h +000729r 1 29 .byt 29h +00072Ar 1 2A .byt 2Ah +00072Br 1 2B .byt 2Bh +00072Cr 1 2C .byt 2Ch +00072Dr 1 2D .byt 2Dh +00072Er 1 2E .byt 2Eh +00072Fr 1 2F .byt 2Fh +000730r 1 30 .byt 30h +000731r 1 31 .byt 31h +000732r 1 32 .byt 32h +000733r 1 33 .byt 33h +000734r 1 34 .byt 34h +000735r 1 35 .byt 35h +000736r 1 36 .byt 36h +000737r 1 37 .byt 37h +000738r 1 38 .byt 38h +000739r 1 39 .byt 39h +00073Ar 1 3A .byt 3Ah +00073Br 1 3B .byt 3Bh +00073Cr 1 3C .byt 3Ch +00073Dr 1 3D .byt 3Dh +00073Er 1 3E .byt 3Eh +00073Fr 1 3F .byt 3Fh +000740r 1 40 .byt 40h +000741r 1 41 .byt 41h +000742r 1 42 .byt 42h +000743r 1 43 .byt 43h +000744r 1 44 .byt 44h +000745r 1 45 .byt 45h +000746r 1 46 .byt 46h +000747r 1 47 .byt 47h +000748r 1 48 .byt 48h +000749r 1 49 .byt 49h +00074Ar 1 4A .byt 4Ah +00074Br 1 4B .byt 4Bh +00074Cr 1 4C .byt 4Ch +00074Dr 1 4D .byt 4Dh +00074Er 1 4E .byt 4Eh +00074Fr 1 4F .byt 4Fh +000750r 1 50 .byt 50h +000751r 1 51 .byt 51h +000752r 1 52 .byt 52h +000753r 1 53 .byt 53h +000754r 1 54 .byt 54h +000755r 1 55 .byt 55h +000756r 1 56 .byt 56h +000757r 1 57 .byt 57h +000758r 1 58 .byt 58h +000759r 1 59 .byt 59h +00075Ar 1 5A .byt 5Ah +00075Br 1 5B .byt 5Bh +00075Cr 1 5C .byt 5Ch +00075Dr 1 5D .byt 5Dh +00075Er 1 5E .byt 5Eh +00075Fr 1 5F .byt 5Fh +000760r 1 60 .byt 60h +000761r 1 61 .byt 61h +000762r 1 62 .byt 62h +000763r 1 63 .byt 63h +000764r 1 64 .byt 64h +000765r 1 65 .byt 65h +000766r 1 66 .byt 66h +000767r 1 67 .byt 67h +000768r 1 68 .byt 68h +000769r 1 69 .byt 69h +00076Ar 1 6A .byt 6Ah +00076Br 1 6B .byt 6Bh +00076Cr 1 6C .byt 6Ch +00076Dr 1 6D .byt 6Dh +00076Er 1 6E .byt 6Eh +00076Fr 1 6F .byt 6Fh +000770r 1 70 .byt 70h +000771r 1 71 .byt 71h +000772r 1 72 .byt 72h +000773r 1 73 .byt 73h +000774r 1 74 .byt 74h +000775r 1 75 .byt 75h +000776r 1 76 .byt 76h +000777r 1 77 .byt 77h +000778r 1 78 .byt 78h +000779r 1 79 .byt 79h +00077Ar 1 7A .byt 7Ah +00077Br 1 7B .byt 7Bh +00077Cr 1 7C .byt 7Ch +00077Dr 1 7D .byt 7Dh +00077Er 1 7E .byt 7Eh +00077Fr 1 7F .byt 7Fh +000780r 1 80 .byt 80h +000781r 1 81 .byt 81h +000782r 1 82 .byt 82h +000783r 1 83 .byt 83h +000784r 1 84 .byt 84h +000785r 1 85 .byt 85h +000786r 1 86 .byt 86h +000787r 1 87 .byt 87h +000788r 1 88 .byt 88h +000789r 1 89 .byt 89h +00078Ar 1 8A .byt 8Ah +00078Br 1 8B .byt 8Bh +00078Cr 1 8C .byt 8Ch +00078Dr 1 8D .byt 8Dh +00078Er 1 8E .byt 8Eh +00078Fr 1 8F .byt 8Fh +000790r 1 90 .byt 90h +000791r 1 91 .byt 91h +000792r 1 92 .byt 92h +000793r 1 93 .byt 93h +000794r 1 94 .byt 94h +000795r 1 95 .byt 95h +000796r 1 96 .byt 96h +000797r 1 97 .byt 97h +000798r 1 98 .byt 98h +000799r 1 99 .byt 99h +00079Ar 1 9A .byt 9Ah +00079Br 1 9B .byt 9Bh +00079Cr 1 9C .byt 9Ch +00079Dr 1 9D .byt 9Dh +00079Er 1 9E .byt 9Eh +00079Fr 1 9F .byt 9Fh +0007A0r 1 A0 .byt 0A0h +0007A1r 1 A1 .byt 0A1h +0007A2r 1 A2 .byt 0A2h +0007A3r 1 A3 .byt 0A3h +0007A4r 1 A4 .byt 0A4h +0007A5r 1 A5 .byt 0A5h +0007A6r 1 A6 .byt 0A6h +0007A7r 1 A7 .byt 0A7h +0007A8r 1 A8 .byt 0A8h +0007A9r 1 A9 .byt 0A9h +0007AAr 1 AA .byt 0AAh +0007ABr 1 AB .byt 0ABh +0007ACr 1 AC .byt 0ACh +0007ADr 1 AD .byt 0ADh +0007AEr 1 AE .byt 0AEh +0007AFr 1 AF .byt 0AFh +0007B0r 1 B0 .byt 0B0h +0007B1r 1 B1 .byt 0B1h +0007B2r 1 B2 .byt 0B2h +0007B3r 1 B3 .byt 0B3h +0007B4r 1 B4 .byt 0B4h +0007B5r 1 B5 .byt 0B5h +0007B6r 1 B6 .byt 0B6h +0007B7r 1 B7 .byt 0B7h +0007B8r 1 B8 .byt 0B8h +0007B9r 1 B9 .byt 0B9h +0007BAr 1 BA .byt 0BAh +0007BBr 1 BB .byt 0BBh +0007BCr 1 BC .byt 0BCh +0007BDr 1 BD .byt 0BDh +0007BEr 1 BE .byt 0BEh +0007BFr 1 BF .byt 0BFh +0007C0r 1 C0 .byt 0C0h +0007C1r 1 C1 .byt 0C1h +0007C2r 1 C2 .byt 0C2h +0007C3r 1 C3 .byt 0C3h +0007C4r 1 C4 .byt 0C4h +0007C5r 1 C5 .byt 0C5h +0007C6r 1 C6 .byt 0C6h +0007C7r 1 C7 .byt 0C7h +0007C8r 1 C8 .byt 0C8h +0007C9r 1 C9 .byt 0C9h +0007CAr 1 CA .byt 0CAh +0007CBr 1 CB .byt 0CBh +0007CCr 1 CC .byt 0CCh +0007CDr 1 CD .byt 0CDh +0007CEr 1 CE .byt 0CEh +0007CFr 1 CF .byt 0CFh +0007D0r 1 D0 .byt 0D0h +0007D1r 1 D1 .byt 0D1h +0007D2r 1 D2 .byt 0D2h +0007D3r 1 D3 .byt 0D3h +0007D4r 1 D4 .byt 0D4h +0007D5r 1 D5 .byt 0D5h +0007D6r 1 D6 .byt 0D6h +0007D7r 1 D7 .byt 0D7h +0007D8r 1 D8 .byt 0D8h +0007D9r 1 D9 .byt 0D9h +0007DAr 1 DA .byt 0DAh +0007DBr 1 DB .byt 0DBh +0007DCr 1 DC .byt 0DCh +0007DDr 1 DD .byt 0DDh +0007DEr 1 DE .byt 0DEh +0007DFr 1 DF .byt 0DFh +0007E0r 1 E0 .byt 0E0h +0007E1r 1 E1 .byt 0E1h +0007E2r 1 E2 .byt 0E2h +0007E3r 1 E3 .byt 0E3h +0007E4r 1 E4 .byt 0E4h +0007E5r 1 E5 .byt 0E5h +0007E6r 1 E6 .byt 0E6h +0007E7r 1 E7 .byt 0E7h +0007E8r 1 E8 .byt 0E8h +0007E9r 1 E9 .byt 0E9h +0007EAr 1 EA .byt 0EAh +0007EBr 1 EB .byt 0EBh +0007ECr 1 EC .byt 0ECh +0007EDr 1 ED .byt 0EDh +0007EEr 1 EE .byt 0EEh +0007EFr 1 EF .byt 0EFh +0007F0r 1 F0 .byt 0F0h +0007F1r 1 F1 .byt 0F1h +0007F2r 1 F2 .byt 0F2h +0007F3r 1 F3 .byt 0F3h +0007F4r 1 F4 .byt 0F4h +0007F5r 1 F5 .byt 0F5h +0007F6r 1 F6 .byt 0F6h +0007F7r 1 F7 .byt 0F7h +0007F8r 1 F8 .byt 0F8h +0007F9r 1 F9 .byt 0F9h +0007FAr 1 FA .byt 0FAh +0007FBr 1 FB .byt 0FBh +0007FCr 1 FC .byt 0FCh +0007FDr 1 FD .byt 0FDh +0007FEr 1 FE .byt 0FEh +0007FFr 1 FF .byt 0FFh 000800r 1 -000800r 1 ; alternative 2-digit hex values -000800r 1 00 .byt 00h -000801r 1 01 .byt 01h -000802r 1 02 .byt 02h -000803r 1 03 .byt 03h -000804r 1 04 .byt 04h -000805r 1 05 .byt 05h -000806r 1 06 .byt 06h -000807r 1 07 .byt 07h -000808r 1 08 .byt 08h -000809r 1 09 .byt 09h -00080Ar 1 0A .byt 0ah -00080Br 1 0B .byt 0bh -00080Cr 1 0C .byt 0ch -00080Dr 1 0D .byt 0dh -00080Er 1 0E .byt 0eh -00080Fr 1 0F .byt 0fh -000810r 1 10 .byt 10h -000811r 1 11 .byt 11h -000812r 1 12 .byt 12h -000813r 1 13 .byt 13h -000814r 1 14 .byt 14h -000815r 1 15 .byt 15h -000816r 1 16 .byt 16h -000817r 1 17 .byt 17h -000818r 1 18 .byt 18h -000819r 1 19 .byt 19h -00081Ar 1 1A .byt 1ah -00081Br 1 1B .byt 1bh -00081Cr 1 1C .byt 1ch -00081Dr 1 1D .byt 1dh -00081Er 1 1E .byt 1eh -00081Fr 1 1F .byt 1fh -000820r 1 20 .byt 20h -000821r 1 21 .byt 21h -000822r 1 22 .byt 22h -000823r 1 23 .byt 23h -000824r 1 24 .byt 24h -000825r 1 25 .byt 25h -000826r 1 26 .byt 26h -000827r 1 27 .byt 27h -000828r 1 28 .byt 28h -000829r 1 29 .byt 29h -00082Ar 1 2A .byt 2ah -00082Br 1 2B .byt 2bh -00082Cr 1 2C .byt 2ch -00082Dr 1 2D .byt 2dh -00082Er 1 2E .byt 2eh -00082Fr 1 2F .byt 2fh -000830r 1 30 .byt 30h -000831r 1 31 .byt 31h -000832r 1 32 .byt 32h -000833r 1 33 .byt 33h -000834r 1 34 .byt 34h -000835r 1 35 .byt 35h -000836r 1 36 .byt 36h -000837r 1 37 .byt 37h -000838r 1 38 .byt 38h -000839r 1 39 .byt 39h -00083Ar 1 3A .byt 3ah -00083Br 1 3B .byt 3bh -00083Cr 1 3C .byt 3ch -00083Dr 1 3D .byt 3dh -00083Er 1 3E .byt 3eh -00083Fr 1 3F .byt 3fh -000840r 1 40 .byt 40h -000841r 1 41 .byt 41h -000842r 1 42 .byt 42h -000843r 1 43 .byt 43h -000844r 1 44 .byt 44h -000845r 1 45 .byt 45h -000846r 1 46 .byt 46h -000847r 1 47 .byt 47h -000848r 1 48 .byt 48h -000849r 1 49 .byt 49h -00084Ar 1 4A .byt 4ah -00084Br 1 4B .byt 4bh -00084Cr 1 4C .byt 4ch -00084Dr 1 4D .byt 4dh -00084Er 1 4E .byt 4eh -00084Fr 1 4F .byt 4fh -000850r 1 50 .byt 50h -000851r 1 51 .byt 51h -000852r 1 52 .byt 52h -000853r 1 53 .byt 53h -000854r 1 54 .byt 54h -000855r 1 55 .byt 55h -000856r 1 56 .byt 56h -000857r 1 57 .byt 57h -000858r 1 58 .byt 58h -000859r 1 59 .byt 59h -00085Ar 1 5A .byt 5ah -00085Br 1 5B .byt 5bh -00085Cr 1 5C .byt 5ch -00085Dr 1 5D .byt 5dh -00085Er 1 5E .byt 5eh -00085Fr 1 5F .byt 5fh -000860r 1 60 .byt 60h -000861r 1 61 .byt 61h -000862r 1 62 .byt 62h -000863r 1 63 .byt 63h -000864r 1 64 .byt 64h -000865r 1 65 .byt 65h -000866r 1 66 .byt 66h -000867r 1 67 .byt 67h -000868r 1 68 .byt 68h -000869r 1 69 .byt 69h -00086Ar 1 6A .byt 6ah -00086Br 1 6B .byt 6bh -00086Cr 1 6C .byt 6ch -00086Dr 1 6D .byt 6dh -00086Er 1 6E .byt 6eh -00086Fr 1 6F .byt 6fh -000870r 1 70 .byt 70h -000871r 1 71 .byt 71h -000872r 1 72 .byt 72h -000873r 1 73 .byt 73h -000874r 1 74 .byt 74h -000875r 1 75 .byt 75h -000876r 1 76 .byt 76h -000877r 1 77 .byt 77h -000878r 1 78 .byt 78h -000879r 1 79 .byt 79h -00087Ar 1 7A .byt 7ah -00087Br 1 7B .byt 7bh -00087Cr 1 7C .byt 7ch -00087Dr 1 7D .byt 7dh -00087Er 1 7E .byt 7eh -00087Fr 1 7F .byt 7fh -000880r 1 80 .byt 80h -000881r 1 81 .byt 81h -000882r 1 82 .byt 82h -000883r 1 83 .byt 83h -000884r 1 84 .byt 84h -000885r 1 85 .byt 85h -000886r 1 86 .byt 86h -000887r 1 87 .byt 87h -000888r 1 88 .byt 88h -000889r 1 89 .byt 89h -00088Ar 1 8A .byt 8ah -00088Br 1 8B .byt 8bh -00088Cr 1 8C .byt 8ch -00088Dr 1 8D .byt 8dh -00088Er 1 8E .byt 8eh -00088Fr 1 8F .byt 8fh -000890r 1 90 .byt 90h -000891r 1 91 .byt 91h -000892r 1 92 .byt 92h -000893r 1 93 .byt 93h -000894r 1 94 .byt 94h -000895r 1 95 .byt 95h -000896r 1 96 .byt 96h -000897r 1 97 .byt 97h -000898r 1 98 .byt 98h -000899r 1 99 .byt 99h -00089Ar 1 9A .byt 9ah -00089Br 1 9B .byt 9bh -00089Cr 1 9C .byt 9ch -00089Dr 1 9D .byt 9dh -00089Er 1 9E .byt 9eh -00089Fr 1 9F .byt 9fh -0008A0r 1 A0 .byt 0a0h -0008A1r 1 A1 .byt 0a1h -0008A2r 1 A2 .byt 0a2h -0008A3r 1 A3 .byt 0a3h -0008A4r 1 A4 .byt 0a4h -0008A5r 1 A5 .byt 0a5h -0008A6r 1 A6 .byt 0a6h -0008A7r 1 A7 .byt 0a7h -0008A8r 1 A8 .byt 0a8h -0008A9r 1 A9 .byt 0a9h -0008AAr 1 AA .byt 0aah -0008ABr 1 AB .byt 0abh -0008ACr 1 AC .byt 0ach -0008ADr 1 AD .byt 0adh -0008AEr 1 AE .byt 0aeh -0008AFr 1 AF .byt 0afh -0008B0r 1 B0 .byt 0b0h -0008B1r 1 B1 .byt 0b1h -0008B2r 1 B2 .byt 0b2h -0008B3r 1 B3 .byt 0b3h -0008B4r 1 B4 .byt 0b4h -0008B5r 1 B5 .byt 0b5h -0008B6r 1 B6 .byt 0b6h -0008B7r 1 B7 .byt 0b7h -0008B8r 1 B8 .byt 0b8h -0008B9r 1 B9 .byt 0b9h -0008BAr 1 BA .byt 0bah -0008BBr 1 BB .byt 0bbh -0008BCr 1 BC .byt 0bch -0008BDr 1 BD .byt 0bdh -0008BEr 1 BE .byt 0beh -0008BFr 1 BF .byt 0bfh -0008C0r 1 C0 .byt 0c0h -0008C1r 1 C1 .byt 0c1h -0008C2r 1 C2 .byt 0c2h -0008C3r 1 C3 .byt 0c3h -0008C4r 1 C4 .byt 0c4h -0008C5r 1 C5 .byt 0c5h -0008C6r 1 C6 .byt 0c6h -0008C7r 1 C7 .byt 0c7h -0008C8r 1 C8 .byt 0c8h -0008C9r 1 C9 .byt 0c9h -0008CAr 1 CA .byt 0cah -0008CBr 1 CB .byt 0cbh -0008CCr 1 CC .byt 0cch -0008CDr 1 CD .byt 0cdh -0008CEr 1 CE .byt 0ceh -0008CFr 1 CF .byt 0cfh -0008D0r 1 D0 .byt 0d0h -0008D1r 1 D1 .byt 0d1h -0008D2r 1 D2 .byt 0d2h -0008D3r 1 D3 .byt 0d3h -0008D4r 1 D4 .byt 0d4h -0008D5r 1 D5 .byt 0d5h -0008D6r 1 D6 .byt 0d6h -0008D7r 1 D7 .byt 0d7h -0008D8r 1 D8 .byt 0d8h -0008D9r 1 D9 .byt 0d9h -0008DAr 1 DA .byt 0dah -0008DBr 1 DB .byt 0dbh -0008DCr 1 DC .byt 0dch -0008DDr 1 DD .byt 0ddh -0008DEr 1 DE .byt 0deh -0008DFr 1 DF .byt 0dfh -0008E0r 1 E0 .byt 0e0h -0008E1r 1 E1 .byt 0e1h -0008E2r 1 E2 .byt 0e2h -0008E3r 1 E3 .byt 0e3h -0008E4r 1 E4 .byt 0e4h -0008E5r 1 E5 .byt 0e5h -0008E6r 1 E6 .byt 0e6h -0008E7r 1 E7 .byt 0e7h -0008E8r 1 E8 .byt 0e8h -0008E9r 1 E9 .byt 0e9h -0008EAr 1 EA .byt 0eah -0008EBr 1 EB .byt 0ebh -0008ECr 1 EC .byt 0ech -0008EDr 1 ED .byt 0edh -0008EEr 1 EE .byt 0eeh -0008EFr 1 EF .byt 0efh -0008F0r 1 F0 .byt 0f0h -0008F1r 1 F1 .byt 0f1h -0008F2r 1 F2 .byt 0f2h -0008F3r 1 F3 .byt 0f3h -0008F4r 1 F4 .byt 0f4h -0008F5r 1 F5 .byt 0f5h -0008F6r 1 F6 .byt 0f6h -0008F7r 1 F7 .byt 0f7h -0008F8r 1 F8 .byt 0f8h -0008F9r 1 F9 .byt 0f9h -0008FAr 1 FA .byt 0fah -0008FBr 1 FB .byt 0fbh -0008FCr 1 FC .byt 0fch -0008FDr 1 FD .byt 0fdh -0008FEr 1 FE .byt 0feh -0008FFr 1 FF .byt 0ffh +000800r 1 ; alternative 2-digit hex values +000800r 1 00 .byt 00h +000801r 1 01 .byt 01h +000802r 1 02 .byt 02h +000803r 1 03 .byt 03h +000804r 1 04 .byt 04h +000805r 1 05 .byt 05h +000806r 1 06 .byt 06h +000807r 1 07 .byt 07h +000808r 1 08 .byt 08h +000809r 1 09 .byt 09h +00080Ar 1 0A .byt 0ah +00080Br 1 0B .byt 0bh +00080Cr 1 0C .byt 0ch +00080Dr 1 0D .byt 0dh +00080Er 1 0E .byt 0eh +00080Fr 1 0F .byt 0fh +000810r 1 10 .byt 10h +000811r 1 11 .byt 11h +000812r 1 12 .byt 12h +000813r 1 13 .byt 13h +000814r 1 14 .byt 14h +000815r 1 15 .byt 15h +000816r 1 16 .byt 16h +000817r 1 17 .byt 17h +000818r 1 18 .byt 18h +000819r 1 19 .byt 19h +00081Ar 1 1A .byt 1ah +00081Br 1 1B .byt 1bh +00081Cr 1 1C .byt 1ch +00081Dr 1 1D .byt 1dh +00081Er 1 1E .byt 1eh +00081Fr 1 1F .byt 1fh +000820r 1 20 .byt 20h +000821r 1 21 .byt 21h +000822r 1 22 .byt 22h +000823r 1 23 .byt 23h +000824r 1 24 .byt 24h +000825r 1 25 .byt 25h +000826r 1 26 .byt 26h +000827r 1 27 .byt 27h +000828r 1 28 .byt 28h +000829r 1 29 .byt 29h +00082Ar 1 2A .byt 2ah +00082Br 1 2B .byt 2bh +00082Cr 1 2C .byt 2ch +00082Dr 1 2D .byt 2dh +00082Er 1 2E .byt 2eh +00082Fr 1 2F .byt 2fh +000830r 1 30 .byt 30h +000831r 1 31 .byt 31h +000832r 1 32 .byt 32h +000833r 1 33 .byt 33h +000834r 1 34 .byt 34h +000835r 1 35 .byt 35h +000836r 1 36 .byt 36h +000837r 1 37 .byt 37h +000838r 1 38 .byt 38h +000839r 1 39 .byt 39h +00083Ar 1 3A .byt 3ah +00083Br 1 3B .byt 3bh +00083Cr 1 3C .byt 3ch +00083Dr 1 3D .byt 3dh +00083Er 1 3E .byt 3eh +00083Fr 1 3F .byt 3fh +000840r 1 40 .byt 40h +000841r 1 41 .byt 41h +000842r 1 42 .byt 42h +000843r 1 43 .byt 43h +000844r 1 44 .byt 44h +000845r 1 45 .byt 45h +000846r 1 46 .byt 46h +000847r 1 47 .byt 47h +000848r 1 48 .byt 48h +000849r 1 49 .byt 49h +00084Ar 1 4A .byt 4ah +00084Br 1 4B .byt 4bh +00084Cr 1 4C .byt 4ch +00084Dr 1 4D .byt 4dh +00084Er 1 4E .byt 4eh +00084Fr 1 4F .byt 4fh +000850r 1 50 .byt 50h +000851r 1 51 .byt 51h +000852r 1 52 .byt 52h +000853r 1 53 .byt 53h +000854r 1 54 .byt 54h +000855r 1 55 .byt 55h +000856r 1 56 .byt 56h +000857r 1 57 .byt 57h +000858r 1 58 .byt 58h +000859r 1 59 .byt 59h +00085Ar 1 5A .byt 5ah +00085Br 1 5B .byt 5bh +00085Cr 1 5C .byt 5ch +00085Dr 1 5D .byt 5dh +00085Er 1 5E .byt 5eh +00085Fr 1 5F .byt 5fh +000860r 1 60 .byt 60h +000861r 1 61 .byt 61h +000862r 1 62 .byt 62h +000863r 1 63 .byt 63h +000864r 1 64 .byt 64h +000865r 1 65 .byt 65h +000866r 1 66 .byt 66h +000867r 1 67 .byt 67h +000868r 1 68 .byt 68h +000869r 1 69 .byt 69h +00086Ar 1 6A .byt 6ah +00086Br 1 6B .byt 6bh +00086Cr 1 6C .byt 6ch +00086Dr 1 6D .byt 6dh +00086Er 1 6E .byt 6eh +00086Fr 1 6F .byt 6fh +000870r 1 70 .byt 70h +000871r 1 71 .byt 71h +000872r 1 72 .byt 72h +000873r 1 73 .byt 73h +000874r 1 74 .byt 74h +000875r 1 75 .byt 75h +000876r 1 76 .byt 76h +000877r 1 77 .byt 77h +000878r 1 78 .byt 78h +000879r 1 79 .byt 79h +00087Ar 1 7A .byt 7ah +00087Br 1 7B .byt 7bh +00087Cr 1 7C .byt 7ch +00087Dr 1 7D .byt 7dh +00087Er 1 7E .byt 7eh +00087Fr 1 7F .byt 7fh +000880r 1 80 .byt 80h +000881r 1 81 .byt 81h +000882r 1 82 .byt 82h +000883r 1 83 .byt 83h +000884r 1 84 .byt 84h +000885r 1 85 .byt 85h +000886r 1 86 .byt 86h +000887r 1 87 .byt 87h +000888r 1 88 .byt 88h +000889r 1 89 .byt 89h +00088Ar 1 8A .byt 8ah +00088Br 1 8B .byt 8bh +00088Cr 1 8C .byt 8ch +00088Dr 1 8D .byt 8dh +00088Er 1 8E .byt 8eh +00088Fr 1 8F .byt 8fh +000890r 1 90 .byt 90h +000891r 1 91 .byt 91h +000892r 1 92 .byt 92h +000893r 1 93 .byt 93h +000894r 1 94 .byt 94h +000895r 1 95 .byt 95h +000896r 1 96 .byt 96h +000897r 1 97 .byt 97h +000898r 1 98 .byt 98h +000899r 1 99 .byt 99h +00089Ar 1 9A .byt 9ah +00089Br 1 9B .byt 9bh +00089Cr 1 9C .byt 9ch +00089Dr 1 9D .byt 9dh +00089Er 1 9E .byt 9eh +00089Fr 1 9F .byt 9fh +0008A0r 1 A0 .byt 0a0h +0008A1r 1 A1 .byt 0a1h +0008A2r 1 A2 .byt 0a2h +0008A3r 1 A3 .byt 0a3h +0008A4r 1 A4 .byt 0a4h +0008A5r 1 A5 .byt 0a5h +0008A6r 1 A6 .byt 0a6h +0008A7r 1 A7 .byt 0a7h +0008A8r 1 A8 .byt 0a8h +0008A9r 1 A9 .byt 0a9h +0008AAr 1 AA .byt 0aah +0008ABr 1 AB .byt 0abh +0008ACr 1 AC .byt 0ach +0008ADr 1 AD .byt 0adh +0008AEr 1 AE .byt 0aeh +0008AFr 1 AF .byt 0afh +0008B0r 1 B0 .byt 0b0h +0008B1r 1 B1 .byt 0b1h +0008B2r 1 B2 .byt 0b2h +0008B3r 1 B3 .byt 0b3h +0008B4r 1 B4 .byt 0b4h +0008B5r 1 B5 .byt 0b5h +0008B6r 1 B6 .byt 0b6h +0008B7r 1 B7 .byt 0b7h +0008B8r 1 B8 .byt 0b8h +0008B9r 1 B9 .byt 0b9h +0008BAr 1 BA .byt 0bah +0008BBr 1 BB .byt 0bbh +0008BCr 1 BC .byt 0bch +0008BDr 1 BD .byt 0bdh +0008BEr 1 BE .byt 0beh +0008BFr 1 BF .byt 0bfh +0008C0r 1 C0 .byt 0c0h +0008C1r 1 C1 .byt 0c1h +0008C2r 1 C2 .byt 0c2h +0008C3r 1 C3 .byt 0c3h +0008C4r 1 C4 .byt 0c4h +0008C5r 1 C5 .byt 0c5h +0008C6r 1 C6 .byt 0c6h +0008C7r 1 C7 .byt 0c7h +0008C8r 1 C8 .byt 0c8h +0008C9r 1 C9 .byt 0c9h +0008CAr 1 CA .byt 0cah +0008CBr 1 CB .byt 0cbh +0008CCr 1 CC .byt 0cch +0008CDr 1 CD .byt 0cdh +0008CEr 1 CE .byt 0ceh +0008CFr 1 CF .byt 0cfh +0008D0r 1 D0 .byt 0d0h +0008D1r 1 D1 .byt 0d1h +0008D2r 1 D2 .byt 0d2h +0008D3r 1 D3 .byt 0d3h +0008D4r 1 D4 .byt 0d4h +0008D5r 1 D5 .byt 0d5h +0008D6r 1 D6 .byt 0d6h +0008D7r 1 D7 .byt 0d7h +0008D8r 1 D8 .byt 0d8h +0008D9r 1 D9 .byt 0d9h +0008DAr 1 DA .byt 0dah +0008DBr 1 DB .byt 0dbh +0008DCr 1 DC .byt 0dch +0008DDr 1 DD .byt 0ddh +0008DEr 1 DE .byt 0deh +0008DFr 1 DF .byt 0dfh +0008E0r 1 E0 .byt 0e0h +0008E1r 1 E1 .byt 0e1h +0008E2r 1 E2 .byt 0e2h +0008E3r 1 E3 .byt 0e3h +0008E4r 1 E4 .byt 0e4h +0008E5r 1 E5 .byt 0e5h +0008E6r 1 E6 .byt 0e6h +0008E7r 1 E7 .byt 0e7h +0008E8r 1 E8 .byt 0e8h +0008E9r 1 E9 .byt 0e9h +0008EAr 1 EA .byt 0eah +0008EBr 1 EB .byt 0ebh +0008ECr 1 EC .byt 0ech +0008EDr 1 ED .byt 0edh +0008EEr 1 EE .byt 0eeh +0008EFr 1 EF .byt 0efh +0008F0r 1 F0 .byt 0f0h +0008F1r 1 F1 .byt 0f1h +0008F2r 1 F2 .byt 0f2h +0008F3r 1 F3 .byt 0f3h +0008F4r 1 F4 .byt 0f4h +0008F5r 1 F5 .byt 0f5h +0008F6r 1 F6 .byt 0f6h +0008F7r 1 F7 .byt 0f7h +0008F8r 1 F8 .byt 0f8h +0008F9r 1 F9 .byt 0f9h +0008FAr 1 FA .byt 0fah +0008FBr 1 FB .byt 0fbh +0008FCr 1 FC .byt 0fch +0008FDr 1 FD .byt 0fdh +0008FEr 1 FE .byt 0feh +0008FFr 1 FF .byt 0ffh 000900r 1 -000900r 1 ; alternative 2-digit hex values, uppercase -000900r 1 00 .byt 00h -000901r 1 01 .byt 01h -000902r 1 02 .byt 02h -000903r 1 03 .byt 03h -000904r 1 04 .byt 04h -000905r 1 05 .byt 05h -000906r 1 06 .byt 06h -000907r 1 07 .byt 07h -000908r 1 08 .byt 08h -000909r 1 09 .byt 09h -00090Ar 1 0A .byt 0Ah -00090Br 1 0B .byt 0Bh -00090Cr 1 0C .byt 0Ch -00090Dr 1 0D .byt 0Dh -00090Er 1 0E .byt 0Eh -00090Fr 1 0F .byt 0Fh -000910r 1 10 .byt 10h -000911r 1 11 .byt 11h -000912r 1 12 .byt 12h -000913r 1 13 .byt 13h -000914r 1 14 .byt 14h -000915r 1 15 .byt 15h -000916r 1 16 .byt 16h -000917r 1 17 .byt 17h -000918r 1 18 .byt 18h -000919r 1 19 .byt 19h -00091Ar 1 1A .byt 1Ah -00091Br 1 1B .byt 1Bh -00091Cr 1 1C .byt 1Ch -00091Dr 1 1D .byt 1Dh -00091Er 1 1E .byt 1Eh -00091Fr 1 1F .byt 1Fh -000920r 1 20 .byt 20h -000921r 1 21 .byt 21h -000922r 1 22 .byt 22h -000923r 1 23 .byt 23h -000924r 1 24 .byt 24h -000925r 1 25 .byt 25h -000926r 1 26 .byt 26h -000927r 1 27 .byt 27h -000928r 1 28 .byt 28h -000929r 1 29 .byt 29h -00092Ar 1 2A .byt 2Ah -00092Br 1 2B .byt 2Bh -00092Cr 1 2C .byt 2Ch -00092Dr 1 2D .byt 2Dh -00092Er 1 2E .byt 2Eh -00092Fr 1 2F .byt 2Fh -000930r 1 30 .byt 30h -000931r 1 31 .byt 31h -000932r 1 32 .byt 32h -000933r 1 33 .byt 33h -000934r 1 34 .byt 34h -000935r 1 35 .byt 35h -000936r 1 36 .byt 36h -000937r 1 37 .byt 37h -000938r 1 38 .byt 38h -000939r 1 39 .byt 39h -00093Ar 1 3A .byt 3Ah -00093Br 1 3B .byt 3Bh -00093Cr 1 3C .byt 3Ch -00093Dr 1 3D .byt 3Dh -00093Er 1 3E .byt 3Eh -00093Fr 1 3F .byt 3Fh -000940r 1 40 .byt 40h -000941r 1 41 .byt 41h -000942r 1 42 .byt 42h -000943r 1 43 .byt 43h -000944r 1 44 .byt 44h -000945r 1 45 .byt 45h -000946r 1 46 .byt 46h -000947r 1 47 .byt 47h -000948r 1 48 .byt 48h -000949r 1 49 .byt 49h -00094Ar 1 4A .byt 4Ah -00094Br 1 4B .byt 4Bh -00094Cr 1 4C .byt 4Ch -00094Dr 1 4D .byt 4Dh -00094Er 1 4E .byt 4Eh -00094Fr 1 4F .byt 4Fh -000950r 1 50 .byt 50h -000951r 1 51 .byt 51h -000952r 1 52 .byt 52h -000953r 1 53 .byt 53h -000954r 1 54 .byt 54h -000955r 1 55 .byt 55h -000956r 1 56 .byt 56h -000957r 1 57 .byt 57h -000958r 1 58 .byt 58h -000959r 1 59 .byt 59h -00095Ar 1 5A .byt 5Ah -00095Br 1 5B .byt 5Bh -00095Cr 1 5C .byt 5Ch -00095Dr 1 5D .byt 5Dh -00095Er 1 5E .byt 5Eh -00095Fr 1 5F .byt 5Fh -000960r 1 60 .byt 60h -000961r 1 61 .byt 61h -000962r 1 62 .byt 62h -000963r 1 63 .byt 63h -000964r 1 64 .byt 64h -000965r 1 65 .byt 65h -000966r 1 66 .byt 66h -000967r 1 67 .byt 67h -000968r 1 68 .byt 68h -000969r 1 69 .byt 69h -00096Ar 1 6A .byt 6Ah -00096Br 1 6B .byt 6Bh -00096Cr 1 6C .byt 6Ch -00096Dr 1 6D .byt 6Dh -00096Er 1 6E .byt 6Eh -00096Fr 1 6F .byt 6Fh -000970r 1 70 .byt 70h -000971r 1 71 .byt 71h -000972r 1 72 .byt 72h -000973r 1 73 .byt 73h -000974r 1 74 .byt 74h -000975r 1 75 .byt 75h -000976r 1 76 .byt 76h -000977r 1 77 .byt 77h -000978r 1 78 .byt 78h -000979r 1 79 .byt 79h -00097Ar 1 7A .byt 7Ah -00097Br 1 7B .byt 7Bh -00097Cr 1 7C .byt 7Ch -00097Dr 1 7D .byt 7Dh -00097Er 1 7E .byt 7Eh -00097Fr 1 7F .byt 7Fh -000980r 1 80 .byt 80h -000981r 1 81 .byt 81h -000982r 1 82 .byt 82h -000983r 1 83 .byt 83h -000984r 1 84 .byt 84h -000985r 1 85 .byt 85h -000986r 1 86 .byt 86h -000987r 1 87 .byt 87h -000988r 1 88 .byt 88h -000989r 1 89 .byt 89h -00098Ar 1 8A .byt 8Ah -00098Br 1 8B .byt 8Bh -00098Cr 1 8C .byt 8Ch -00098Dr 1 8D .byt 8Dh -00098Er 1 8E .byt 8Eh -00098Fr 1 8F .byt 8Fh -000990r 1 90 .byt 90h -000991r 1 91 .byt 91h -000992r 1 92 .byt 92h -000993r 1 93 .byt 93h -000994r 1 94 .byt 94h -000995r 1 95 .byt 95h -000996r 1 96 .byt 96h -000997r 1 97 .byt 97h -000998r 1 98 .byt 98h -000999r 1 99 .byt 99h -00099Ar 1 9A .byt 9Ah -00099Br 1 9B .byt 9Bh -00099Cr 1 9C .byt 9Ch -00099Dr 1 9D .byt 9Dh -00099Er 1 9E .byt 9Eh -00099Fr 1 9F .byt 9Fh -0009A0r 1 A0 .byt 0A0h -0009A1r 1 A1 .byt 0A1h -0009A2r 1 A2 .byt 0A2h -0009A3r 1 A3 .byt 0A3h -0009A4r 1 A4 .byt 0A4h -0009A5r 1 A5 .byt 0A5h -0009A6r 1 A6 .byt 0A6h -0009A7r 1 A7 .byt 0A7h -0009A8r 1 A8 .byt 0A8h -0009A9r 1 A9 .byt 0A9h -0009AAr 1 AA .byt 0AAh -0009ABr 1 AB .byt 0ABh -0009ACr 1 AC .byt 0ACh -0009ADr 1 AD .byt 0ADh -0009AEr 1 AE .byt 0AEh -0009AFr 1 AF .byt 0AFh -0009B0r 1 B0 .byt 0B0h -0009B1r 1 B1 .byt 0B1h -0009B2r 1 B2 .byt 0B2h -0009B3r 1 B3 .byt 0B3h -0009B4r 1 B4 .byt 0B4h -0009B5r 1 B5 .byt 0B5h -0009B6r 1 B6 .byt 0B6h -0009B7r 1 B7 .byt 0B7h -0009B8r 1 B8 .byt 0B8h -0009B9r 1 B9 .byt 0B9h -0009BAr 1 BA .byt 0BAh -0009BBr 1 BB .byt 0BBh -0009BCr 1 BC .byt 0BCh -0009BDr 1 BD .byt 0BDh -0009BEr 1 BE .byt 0BEh -0009BFr 1 BF .byt 0BFh -0009C0r 1 C0 .byt 0C0h -0009C1r 1 C1 .byt 0C1h -0009C2r 1 C2 .byt 0C2h -0009C3r 1 C3 .byt 0C3h -0009C4r 1 C4 .byt 0C4h -0009C5r 1 C5 .byt 0C5h -0009C6r 1 C6 .byt 0C6h -0009C7r 1 C7 .byt 0C7h -0009C8r 1 C8 .byt 0C8h -0009C9r 1 C9 .byt 0C9h -0009CAr 1 CA .byt 0CAh -0009CBr 1 CB .byt 0CBh -0009CCr 1 CC .byt 0CCh -0009CDr 1 CD .byt 0CDh -0009CEr 1 CE .byt 0CEh -0009CFr 1 CF .byt 0CFh -0009D0r 1 D0 .byt 0D0h -0009D1r 1 D1 .byt 0D1h -0009D2r 1 D2 .byt 0D2h -0009D3r 1 D3 .byt 0D3h -0009D4r 1 D4 .byt 0D4h -0009D5r 1 D5 .byt 0D5h -0009D6r 1 D6 .byt 0D6h -0009D7r 1 D7 .byt 0D7h -0009D8r 1 D8 .byt 0D8h -0009D9r 1 D9 .byt 0D9h -0009DAr 1 DA .byt 0DAh -0009DBr 1 DB .byt 0DBh -0009DCr 1 DC .byt 0DCh -0009DDr 1 DD .byt 0DDh -0009DEr 1 DE .byt 0DEh -0009DFr 1 DF .byt 0DFh -0009E0r 1 E0 .byt 0E0h -0009E1r 1 E1 .byt 0E1h -0009E2r 1 E2 .byt 0E2h -0009E3r 1 E3 .byt 0E3h -0009E4r 1 E4 .byt 0E4h -0009E5r 1 E5 .byt 0E5h -0009E6r 1 E6 .byt 0E6h -0009E7r 1 E7 .byt 0E7h -0009E8r 1 E8 .byt 0E8h -0009E9r 1 E9 .byt 0E9h -0009EAr 1 EA .byt 0EAh -0009EBr 1 EB .byt 0EBh -0009ECr 1 EC .byt 0ECh -0009EDr 1 ED .byt 0EDh -0009EEr 1 EE .byt 0EEh -0009EFr 1 EF .byt 0EFh -0009F0r 1 F0 .byt 0F0h -0009F1r 1 F1 .byt 0F1h -0009F2r 1 F2 .byt 0F2h -0009F3r 1 F3 .byt 0F3h -0009F4r 1 F4 .byt 0F4h -0009F5r 1 F5 .byt 0F5h -0009F6r 1 F6 .byt 0F6h -0009F7r 1 F7 .byt 0F7h -0009F8r 1 F8 .byt 0F8h -0009F9r 1 F9 .byt 0F9h -0009FAr 1 FA .byt 0FAh -0009FBr 1 FB .byt 0FBh -0009FCr 1 FC .byt 0FCh -0009FDr 1 FD .byt 0FDh -0009FEr 1 FE .byt 0FEh -0009FFr 1 FF .byt 0FFh +000900r 1 ; alternative 2-digit hex values, uppercase +000900r 1 00 .byt 00h +000901r 1 01 .byt 01h +000902r 1 02 .byt 02h +000903r 1 03 .byt 03h +000904r 1 04 .byt 04h +000905r 1 05 .byt 05h +000906r 1 06 .byt 06h +000907r 1 07 .byt 07h +000908r 1 08 .byt 08h +000909r 1 09 .byt 09h +00090Ar 1 0A .byt 0Ah +00090Br 1 0B .byt 0Bh +00090Cr 1 0C .byt 0Ch +00090Dr 1 0D .byt 0Dh +00090Er 1 0E .byt 0Eh +00090Fr 1 0F .byt 0Fh +000910r 1 10 .byt 10h +000911r 1 11 .byt 11h +000912r 1 12 .byt 12h +000913r 1 13 .byt 13h +000914r 1 14 .byt 14h +000915r 1 15 .byt 15h +000916r 1 16 .byt 16h +000917r 1 17 .byt 17h +000918r 1 18 .byt 18h +000919r 1 19 .byt 19h +00091Ar 1 1A .byt 1Ah +00091Br 1 1B .byt 1Bh +00091Cr 1 1C .byt 1Ch +00091Dr 1 1D .byt 1Dh +00091Er 1 1E .byt 1Eh +00091Fr 1 1F .byt 1Fh +000920r 1 20 .byt 20h +000921r 1 21 .byt 21h +000922r 1 22 .byt 22h +000923r 1 23 .byt 23h +000924r 1 24 .byt 24h +000925r 1 25 .byt 25h +000926r 1 26 .byt 26h +000927r 1 27 .byt 27h +000928r 1 28 .byt 28h +000929r 1 29 .byt 29h +00092Ar 1 2A .byt 2Ah +00092Br 1 2B .byt 2Bh +00092Cr 1 2C .byt 2Ch +00092Dr 1 2D .byt 2Dh +00092Er 1 2E .byt 2Eh +00092Fr 1 2F .byt 2Fh +000930r 1 30 .byt 30h +000931r 1 31 .byt 31h +000932r 1 32 .byt 32h +000933r 1 33 .byt 33h +000934r 1 34 .byt 34h +000935r 1 35 .byt 35h +000936r 1 36 .byt 36h +000937r 1 37 .byt 37h +000938r 1 38 .byt 38h +000939r 1 39 .byt 39h +00093Ar 1 3A .byt 3Ah +00093Br 1 3B .byt 3Bh +00093Cr 1 3C .byt 3Ch +00093Dr 1 3D .byt 3Dh +00093Er 1 3E .byt 3Eh +00093Fr 1 3F .byt 3Fh +000940r 1 40 .byt 40h +000941r 1 41 .byt 41h +000942r 1 42 .byt 42h +000943r 1 43 .byt 43h +000944r 1 44 .byt 44h +000945r 1 45 .byt 45h +000946r 1 46 .byt 46h +000947r 1 47 .byt 47h +000948r 1 48 .byt 48h +000949r 1 49 .byt 49h +00094Ar 1 4A .byt 4Ah +00094Br 1 4B .byt 4Bh +00094Cr 1 4C .byt 4Ch +00094Dr 1 4D .byt 4Dh +00094Er 1 4E .byt 4Eh +00094Fr 1 4F .byt 4Fh +000950r 1 50 .byt 50h +000951r 1 51 .byt 51h +000952r 1 52 .byt 52h +000953r 1 53 .byt 53h +000954r 1 54 .byt 54h +000955r 1 55 .byt 55h +000956r 1 56 .byt 56h +000957r 1 57 .byt 57h +000958r 1 58 .byt 58h +000959r 1 59 .byt 59h +00095Ar 1 5A .byt 5Ah +00095Br 1 5B .byt 5Bh +00095Cr 1 5C .byt 5Ch +00095Dr 1 5D .byt 5Dh +00095Er 1 5E .byt 5Eh +00095Fr 1 5F .byt 5Fh +000960r 1 60 .byt 60h +000961r 1 61 .byt 61h +000962r 1 62 .byt 62h +000963r 1 63 .byt 63h +000964r 1 64 .byt 64h +000965r 1 65 .byt 65h +000966r 1 66 .byt 66h +000967r 1 67 .byt 67h +000968r 1 68 .byt 68h +000969r 1 69 .byt 69h +00096Ar 1 6A .byt 6Ah +00096Br 1 6B .byt 6Bh +00096Cr 1 6C .byt 6Ch +00096Dr 1 6D .byt 6Dh +00096Er 1 6E .byt 6Eh +00096Fr 1 6F .byt 6Fh +000970r 1 70 .byt 70h +000971r 1 71 .byt 71h +000972r 1 72 .byt 72h +000973r 1 73 .byt 73h +000974r 1 74 .byt 74h +000975r 1 75 .byt 75h +000976r 1 76 .byt 76h +000977r 1 77 .byt 77h +000978r 1 78 .byt 78h +000979r 1 79 .byt 79h +00097Ar 1 7A .byt 7Ah +00097Br 1 7B .byt 7Bh +00097Cr 1 7C .byt 7Ch +00097Dr 1 7D .byt 7Dh +00097Er 1 7E .byt 7Eh +00097Fr 1 7F .byt 7Fh +000980r 1 80 .byt 80h +000981r 1 81 .byt 81h +000982r 1 82 .byt 82h +000983r 1 83 .byt 83h +000984r 1 84 .byt 84h +000985r 1 85 .byt 85h +000986r 1 86 .byt 86h +000987r 1 87 .byt 87h +000988r 1 88 .byt 88h +000989r 1 89 .byt 89h +00098Ar 1 8A .byt 8Ah +00098Br 1 8B .byt 8Bh +00098Cr 1 8C .byt 8Ch +00098Dr 1 8D .byt 8Dh +00098Er 1 8E .byt 8Eh +00098Fr 1 8F .byt 8Fh +000990r 1 90 .byt 90h +000991r 1 91 .byt 91h +000992r 1 92 .byt 92h +000993r 1 93 .byt 93h +000994r 1 94 .byt 94h +000995r 1 95 .byt 95h +000996r 1 96 .byt 96h +000997r 1 97 .byt 97h +000998r 1 98 .byt 98h +000999r 1 99 .byt 99h +00099Ar 1 9A .byt 9Ah +00099Br 1 9B .byt 9Bh +00099Cr 1 9C .byt 9Ch +00099Dr 1 9D .byt 9Dh +00099Er 1 9E .byt 9Eh +00099Fr 1 9F .byt 9Fh +0009A0r 1 A0 .byt 0A0h +0009A1r 1 A1 .byt 0A1h +0009A2r 1 A2 .byt 0A2h +0009A3r 1 A3 .byt 0A3h +0009A4r 1 A4 .byt 0A4h +0009A5r 1 A5 .byt 0A5h +0009A6r 1 A6 .byt 0A6h +0009A7r 1 A7 .byt 0A7h +0009A8r 1 A8 .byt 0A8h +0009A9r 1 A9 .byt 0A9h +0009AAr 1 AA .byt 0AAh +0009ABr 1 AB .byt 0ABh +0009ACr 1 AC .byt 0ACh +0009ADr 1 AD .byt 0ADh +0009AEr 1 AE .byt 0AEh +0009AFr 1 AF .byt 0AFh +0009B0r 1 B0 .byt 0B0h +0009B1r 1 B1 .byt 0B1h +0009B2r 1 B2 .byt 0B2h +0009B3r 1 B3 .byt 0B3h +0009B4r 1 B4 .byt 0B4h +0009B5r 1 B5 .byt 0B5h +0009B6r 1 B6 .byt 0B6h +0009B7r 1 B7 .byt 0B7h +0009B8r 1 B8 .byt 0B8h +0009B9r 1 B9 .byt 0B9h +0009BAr 1 BA .byt 0BAh +0009BBr 1 BB .byt 0BBh +0009BCr 1 BC .byt 0BCh +0009BDr 1 BD .byt 0BDh +0009BEr 1 BE .byt 0BEh +0009BFr 1 BF .byt 0BFh +0009C0r 1 C0 .byt 0C0h +0009C1r 1 C1 .byt 0C1h +0009C2r 1 C2 .byt 0C2h +0009C3r 1 C3 .byt 0C3h +0009C4r 1 C4 .byt 0C4h +0009C5r 1 C5 .byt 0C5h +0009C6r 1 C6 .byt 0C6h +0009C7r 1 C7 .byt 0C7h +0009C8r 1 C8 .byt 0C8h +0009C9r 1 C9 .byt 0C9h +0009CAr 1 CA .byt 0CAh +0009CBr 1 CB .byt 0CBh +0009CCr 1 CC .byt 0CCh +0009CDr 1 CD .byt 0CDh +0009CEr 1 CE .byt 0CEh +0009CFr 1 CF .byt 0CFh +0009D0r 1 D0 .byt 0D0h +0009D1r 1 D1 .byt 0D1h +0009D2r 1 D2 .byt 0D2h +0009D3r 1 D3 .byt 0D3h +0009D4r 1 D4 .byt 0D4h +0009D5r 1 D5 .byt 0D5h +0009D6r 1 D6 .byt 0D6h +0009D7r 1 D7 .byt 0D7h +0009D8r 1 D8 .byt 0D8h +0009D9r 1 D9 .byt 0D9h +0009DAr 1 DA .byt 0DAh +0009DBr 1 DB .byt 0DBh +0009DCr 1 DC .byt 0DCh +0009DDr 1 DD .byt 0DDh +0009DEr 1 DE .byt 0DEh +0009DFr 1 DF .byt 0DFh +0009E0r 1 E0 .byt 0E0h +0009E1r 1 E1 .byt 0E1h +0009E2r 1 E2 .byt 0E2h +0009E3r 1 E3 .byt 0E3h +0009E4r 1 E4 .byt 0E4h +0009E5r 1 E5 .byt 0E5h +0009E6r 1 E6 .byt 0E6h +0009E7r 1 E7 .byt 0E7h +0009E8r 1 E8 .byt 0E8h +0009E9r 1 E9 .byt 0E9h +0009EAr 1 EA .byt 0EAh +0009EBr 1 EB .byt 0EBh +0009ECr 1 EC .byt 0ECh +0009EDr 1 ED .byt 0EDh +0009EEr 1 EE .byt 0EEh +0009EFr 1 EF .byt 0EFh +0009F0r 1 F0 .byt 0F0h +0009F1r 1 F1 .byt 0F1h +0009F2r 1 F2 .byt 0F2h +0009F3r 1 F3 .byt 0F3h +0009F4r 1 F4 .byt 0F4h +0009F5r 1 F5 .byt 0F5h +0009F6r 1 F6 .byt 0F6h +0009F7r 1 F7 .byt 0F7h +0009F8r 1 F8 .byt 0F8h +0009F9r 1 F9 .byt 0F9h +0009FAr 1 FA .byt 0FAh +0009FBr 1 FB .byt 0FBh +0009FCr 1 FC .byt 0FCh +0009FDr 1 FD .byt 0FDh +0009FEr 1 FE .byt 0FEh +0009FFr 1 FF .byt 0FFh 000A00r 1 -000A00r 1 ; alternative hex values, always leading zero -000A00r 1 00 .byt 00h -000A01r 1 01 .byt 01h -000A02r 1 02 .byt 02h -000A03r 1 03 .byt 03h -000A04r 1 04 .byt 04h -000A05r 1 05 .byt 05h -000A06r 1 06 .byt 06h -000A07r 1 07 .byt 07h -000A08r 1 08 .byt 08h -000A09r 1 09 .byt 09h -000A0Ar 1 0A .byt 0ah -000A0Br 1 0B .byt 0bh -000A0Cr 1 0C .byt 0ch -000A0Dr 1 0D .byt 0dh -000A0Er 1 0E .byt 0eh -000A0Fr 1 0F .byt 0fh -000A10r 1 10 .byt 010h -000A11r 1 11 .byt 011h -000A12r 1 12 .byt 012h -000A13r 1 13 .byt 013h -000A14r 1 14 .byt 014h -000A15r 1 15 .byt 015h -000A16r 1 16 .byt 016h -000A17r 1 17 .byt 017h -000A18r 1 18 .byt 018h -000A19r 1 19 .byt 019h -000A1Ar 1 1A .byt 01ah -000A1Br 1 1B .byt 01bh -000A1Cr 1 1C .byt 01ch -000A1Dr 1 1D .byt 01dh -000A1Er 1 1E .byt 01eh -000A1Fr 1 1F .byt 01fh -000A20r 1 20 .byt 020h -000A21r 1 21 .byt 021h -000A22r 1 22 .byt 022h -000A23r 1 23 .byt 023h -000A24r 1 24 .byt 024h -000A25r 1 25 .byt 025h -000A26r 1 26 .byt 026h -000A27r 1 27 .byt 027h -000A28r 1 28 .byt 028h -000A29r 1 29 .byt 029h -000A2Ar 1 2A .byt 02ah -000A2Br 1 2B .byt 02bh -000A2Cr 1 2C .byt 02ch -000A2Dr 1 2D .byt 02dh -000A2Er 1 2E .byt 02eh -000A2Fr 1 2F .byt 02fh -000A30r 1 30 .byt 030h -000A31r 1 31 .byt 031h -000A32r 1 32 .byt 032h -000A33r 1 33 .byt 033h -000A34r 1 34 .byt 034h -000A35r 1 35 .byt 035h -000A36r 1 36 .byt 036h -000A37r 1 37 .byt 037h -000A38r 1 38 .byt 038h -000A39r 1 39 .byt 039h -000A3Ar 1 3A .byt 03ah -000A3Br 1 3B .byt 03bh -000A3Cr 1 3C .byt 03ch -000A3Dr 1 3D .byt 03dh -000A3Er 1 3E .byt 03eh -000A3Fr 1 3F .byt 03fh -000A40r 1 40 .byt 040h -000A41r 1 41 .byt 041h -000A42r 1 42 .byt 042h -000A43r 1 43 .byt 043h -000A44r 1 44 .byt 044h -000A45r 1 45 .byt 045h -000A46r 1 46 .byt 046h -000A47r 1 47 .byt 047h -000A48r 1 48 .byt 048h -000A49r 1 49 .byt 049h -000A4Ar 1 4A .byt 04ah -000A4Br 1 4B .byt 04bh -000A4Cr 1 4C .byt 04ch -000A4Dr 1 4D .byt 04dh -000A4Er 1 4E .byt 04eh -000A4Fr 1 4F .byt 04fh -000A50r 1 50 .byt 050h -000A51r 1 51 .byt 051h -000A52r 1 52 .byt 052h -000A53r 1 53 .byt 053h -000A54r 1 54 .byt 054h -000A55r 1 55 .byt 055h -000A56r 1 56 .byt 056h -000A57r 1 57 .byt 057h -000A58r 1 58 .byt 058h -000A59r 1 59 .byt 059h -000A5Ar 1 5A .byt 05ah -000A5Br 1 5B .byt 05bh -000A5Cr 1 5C .byt 05ch -000A5Dr 1 5D .byt 05dh -000A5Er 1 5E .byt 05eh -000A5Fr 1 5F .byt 05fh -000A60r 1 60 .byt 060h -000A61r 1 61 .byt 061h -000A62r 1 62 .byt 062h -000A63r 1 63 .byt 063h -000A64r 1 64 .byt 064h -000A65r 1 65 .byt 065h -000A66r 1 66 .byt 066h -000A67r 1 67 .byt 067h -000A68r 1 68 .byt 068h -000A69r 1 69 .byt 069h -000A6Ar 1 6A .byt 06ah -000A6Br 1 6B .byt 06bh -000A6Cr 1 6C .byt 06ch -000A6Dr 1 6D .byt 06dh -000A6Er 1 6E .byt 06eh -000A6Fr 1 6F .byt 06fh -000A70r 1 70 .byt 070h -000A71r 1 71 .byt 071h -000A72r 1 72 .byt 072h -000A73r 1 73 .byt 073h -000A74r 1 74 .byt 074h -000A75r 1 75 .byt 075h -000A76r 1 76 .byt 076h -000A77r 1 77 .byt 077h -000A78r 1 78 .byt 078h -000A79r 1 79 .byt 079h -000A7Ar 1 7A .byt 07ah -000A7Br 1 7B .byt 07bh -000A7Cr 1 7C .byt 07ch -000A7Dr 1 7D .byt 07dh -000A7Er 1 7E .byt 07eh -000A7Fr 1 7F .byt 07fh -000A80r 1 80 .byt 080h -000A81r 1 81 .byt 081h -000A82r 1 82 .byt 082h -000A83r 1 83 .byt 083h -000A84r 1 84 .byt 084h -000A85r 1 85 .byt 085h -000A86r 1 86 .byt 086h -000A87r 1 87 .byt 087h -000A88r 1 88 .byt 088h -000A89r 1 89 .byt 089h -000A8Ar 1 8A .byt 08ah -000A8Br 1 8B .byt 08bh -000A8Cr 1 8C .byt 08ch -000A8Dr 1 8D .byt 08dh -000A8Er 1 8E .byt 08eh -000A8Fr 1 8F .byt 08fh -000A90r 1 90 .byt 090h -000A91r 1 91 .byt 091h -000A92r 1 92 .byt 092h -000A93r 1 93 .byt 093h -000A94r 1 94 .byt 094h -000A95r 1 95 .byt 095h -000A96r 1 96 .byt 096h -000A97r 1 97 .byt 097h -000A98r 1 98 .byt 098h -000A99r 1 99 .byt 099h -000A9Ar 1 9A .byt 09ah -000A9Br 1 9B .byt 09bh -000A9Cr 1 9C .byt 09ch -000A9Dr 1 9D .byt 09dh -000A9Er 1 9E .byt 09eh -000A9Fr 1 9F .byt 09fh -000AA0r 1 A0 .byt 0a0h -000AA1r 1 A1 .byt 0a1h -000AA2r 1 A2 .byt 0a2h -000AA3r 1 A3 .byt 0a3h -000AA4r 1 A4 .byt 0a4h -000AA5r 1 A5 .byt 0a5h -000AA6r 1 A6 .byt 0a6h -000AA7r 1 A7 .byt 0a7h -000AA8r 1 A8 .byt 0a8h -000AA9r 1 A9 .byt 0a9h -000AAAr 1 AA .byt 0aah -000AABr 1 AB .byt 0abh -000AACr 1 AC .byt 0ach -000AADr 1 AD .byt 0adh -000AAEr 1 AE .byt 0aeh -000AAFr 1 AF .byt 0afh -000AB0r 1 B0 .byt 0b0h -000AB1r 1 B1 .byt 0b1h -000AB2r 1 B2 .byt 0b2h -000AB3r 1 B3 .byt 0b3h -000AB4r 1 B4 .byt 0b4h -000AB5r 1 B5 .byt 0b5h -000AB6r 1 B6 .byt 0b6h -000AB7r 1 B7 .byt 0b7h -000AB8r 1 B8 .byt 0b8h -000AB9r 1 B9 .byt 0b9h -000ABAr 1 BA .byt 0bah -000ABBr 1 BB .byt 0bbh -000ABCr 1 BC .byt 0bch -000ABDr 1 BD .byt 0bdh -000ABEr 1 BE .byt 0beh -000ABFr 1 BF .byt 0bfh -000AC0r 1 C0 .byt 0c0h -000AC1r 1 C1 .byt 0c1h -000AC2r 1 C2 .byt 0c2h -000AC3r 1 C3 .byt 0c3h -000AC4r 1 C4 .byt 0c4h -000AC5r 1 C5 .byt 0c5h -000AC6r 1 C6 .byt 0c6h -000AC7r 1 C7 .byt 0c7h -000AC8r 1 C8 .byt 0c8h -000AC9r 1 C9 .byt 0c9h -000ACAr 1 CA .byt 0cah -000ACBr 1 CB .byt 0cbh -000ACCr 1 CC .byt 0cch -000ACDr 1 CD .byt 0cdh -000ACEr 1 CE .byt 0ceh -000ACFr 1 CF .byt 0cfh -000AD0r 1 D0 .byt 0d0h -000AD1r 1 D1 .byt 0d1h -000AD2r 1 D2 .byt 0d2h -000AD3r 1 D3 .byt 0d3h -000AD4r 1 D4 .byt 0d4h -000AD5r 1 D5 .byt 0d5h -000AD6r 1 D6 .byt 0d6h -000AD7r 1 D7 .byt 0d7h -000AD8r 1 D8 .byt 0d8h -000AD9r 1 D9 .byt 0d9h -000ADAr 1 DA .byt 0dah -000ADBr 1 DB .byt 0dbh -000ADCr 1 DC .byt 0dch -000ADDr 1 DD .byt 0ddh -000ADEr 1 DE .byt 0deh -000ADFr 1 DF .byt 0dfh -000AE0r 1 E0 .byt 0e0h -000AE1r 1 E1 .byt 0e1h -000AE2r 1 E2 .byt 0e2h -000AE3r 1 E3 .byt 0e3h -000AE4r 1 E4 .byt 0e4h -000AE5r 1 E5 .byt 0e5h -000AE6r 1 E6 .byt 0e6h -000AE7r 1 E7 .byt 0e7h -000AE8r 1 E8 .byt 0e8h -000AE9r 1 E9 .byt 0e9h -000AEAr 1 EA .byt 0eah -000AEBr 1 EB .byt 0ebh -000AECr 1 EC .byt 0ech -000AEDr 1 ED .byt 0edh -000AEEr 1 EE .byt 0eeh -000AEFr 1 EF .byt 0efh -000AF0r 1 F0 .byt 0f0h -000AF1r 1 F1 .byt 0f1h -000AF2r 1 F2 .byt 0f2h -000AF3r 1 F3 .byt 0f3h -000AF4r 1 F4 .byt 0f4h -000AF5r 1 F5 .byt 0f5h -000AF6r 1 F6 .byt 0f6h -000AF7r 1 F7 .byt 0f7h -000AF8r 1 F8 .byt 0f8h -000AF9r 1 F9 .byt 0f9h -000AFAr 1 FA .byt 0fah -000AFBr 1 FB .byt 0fbh -000AFCr 1 FC .byt 0fch -000AFDr 1 FD .byt 0fdh -000AFEr 1 FE .byt 0feh -000AFFr 1 FF .byt 0ffh +000A00r 1 ; alternative hex values, always leading zero +000A00r 1 00 .byt 00h +000A01r 1 01 .byt 01h +000A02r 1 02 .byt 02h +000A03r 1 03 .byt 03h +000A04r 1 04 .byt 04h +000A05r 1 05 .byt 05h +000A06r 1 06 .byt 06h +000A07r 1 07 .byt 07h +000A08r 1 08 .byt 08h +000A09r 1 09 .byt 09h +000A0Ar 1 0A .byt 0ah +000A0Br 1 0B .byt 0bh +000A0Cr 1 0C .byt 0ch +000A0Dr 1 0D .byt 0dh +000A0Er 1 0E .byt 0eh +000A0Fr 1 0F .byt 0fh +000A10r 1 10 .byt 010h +000A11r 1 11 .byt 011h +000A12r 1 12 .byt 012h +000A13r 1 13 .byt 013h +000A14r 1 14 .byt 014h +000A15r 1 15 .byt 015h +000A16r 1 16 .byt 016h +000A17r 1 17 .byt 017h +000A18r 1 18 .byt 018h +000A19r 1 19 .byt 019h +000A1Ar 1 1A .byt 01ah +000A1Br 1 1B .byt 01bh +000A1Cr 1 1C .byt 01ch +000A1Dr 1 1D .byt 01dh +000A1Er 1 1E .byt 01eh +000A1Fr 1 1F .byt 01fh +000A20r 1 20 .byt 020h +000A21r 1 21 .byt 021h +000A22r 1 22 .byt 022h +000A23r 1 23 .byt 023h +000A24r 1 24 .byt 024h +000A25r 1 25 .byt 025h +000A26r 1 26 .byt 026h +000A27r 1 27 .byt 027h +000A28r 1 28 .byt 028h +000A29r 1 29 .byt 029h +000A2Ar 1 2A .byt 02ah +000A2Br 1 2B .byt 02bh +000A2Cr 1 2C .byt 02ch +000A2Dr 1 2D .byt 02dh +000A2Er 1 2E .byt 02eh +000A2Fr 1 2F .byt 02fh +000A30r 1 30 .byt 030h +000A31r 1 31 .byt 031h +000A32r 1 32 .byt 032h +000A33r 1 33 .byt 033h +000A34r 1 34 .byt 034h +000A35r 1 35 .byt 035h +000A36r 1 36 .byt 036h +000A37r 1 37 .byt 037h +000A38r 1 38 .byt 038h +000A39r 1 39 .byt 039h +000A3Ar 1 3A .byt 03ah +000A3Br 1 3B .byt 03bh +000A3Cr 1 3C .byt 03ch +000A3Dr 1 3D .byt 03dh +000A3Er 1 3E .byt 03eh +000A3Fr 1 3F .byt 03fh +000A40r 1 40 .byt 040h +000A41r 1 41 .byt 041h +000A42r 1 42 .byt 042h +000A43r 1 43 .byt 043h +000A44r 1 44 .byt 044h +000A45r 1 45 .byt 045h +000A46r 1 46 .byt 046h +000A47r 1 47 .byt 047h +000A48r 1 48 .byt 048h +000A49r 1 49 .byt 049h +000A4Ar 1 4A .byt 04ah +000A4Br 1 4B .byt 04bh +000A4Cr 1 4C .byt 04ch +000A4Dr 1 4D .byt 04dh +000A4Er 1 4E .byt 04eh +000A4Fr 1 4F .byt 04fh +000A50r 1 50 .byt 050h +000A51r 1 51 .byt 051h +000A52r 1 52 .byt 052h +000A53r 1 53 .byt 053h +000A54r 1 54 .byt 054h +000A55r 1 55 .byt 055h +000A56r 1 56 .byt 056h +000A57r 1 57 .byt 057h +000A58r 1 58 .byt 058h +000A59r 1 59 .byt 059h +000A5Ar 1 5A .byt 05ah +000A5Br 1 5B .byt 05bh +000A5Cr 1 5C .byt 05ch +000A5Dr 1 5D .byt 05dh +000A5Er 1 5E .byt 05eh +000A5Fr 1 5F .byt 05fh +000A60r 1 60 .byt 060h +000A61r 1 61 .byt 061h +000A62r 1 62 .byt 062h +000A63r 1 63 .byt 063h +000A64r 1 64 .byt 064h +000A65r 1 65 .byt 065h +000A66r 1 66 .byt 066h +000A67r 1 67 .byt 067h +000A68r 1 68 .byt 068h +000A69r 1 69 .byt 069h +000A6Ar 1 6A .byt 06ah +000A6Br 1 6B .byt 06bh +000A6Cr 1 6C .byt 06ch +000A6Dr 1 6D .byt 06dh +000A6Er 1 6E .byt 06eh +000A6Fr 1 6F .byt 06fh +000A70r 1 70 .byt 070h +000A71r 1 71 .byt 071h +000A72r 1 72 .byt 072h +000A73r 1 73 .byt 073h +000A74r 1 74 .byt 074h +000A75r 1 75 .byt 075h +000A76r 1 76 .byt 076h +000A77r 1 77 .byt 077h +000A78r 1 78 .byt 078h +000A79r 1 79 .byt 079h +000A7Ar 1 7A .byt 07ah +000A7Br 1 7B .byt 07bh +000A7Cr 1 7C .byt 07ch +000A7Dr 1 7D .byt 07dh +000A7Er 1 7E .byt 07eh +000A7Fr 1 7F .byt 07fh +000A80r 1 80 .byt 080h +000A81r 1 81 .byt 081h +000A82r 1 82 .byt 082h +000A83r 1 83 .byt 083h +000A84r 1 84 .byt 084h +000A85r 1 85 .byt 085h +000A86r 1 86 .byt 086h +000A87r 1 87 .byt 087h +000A88r 1 88 .byt 088h +000A89r 1 89 .byt 089h +000A8Ar 1 8A .byt 08ah +000A8Br 1 8B .byt 08bh +000A8Cr 1 8C .byt 08ch +000A8Dr 1 8D .byt 08dh +000A8Er 1 8E .byt 08eh +000A8Fr 1 8F .byt 08fh +000A90r 1 90 .byt 090h +000A91r 1 91 .byt 091h +000A92r 1 92 .byt 092h +000A93r 1 93 .byt 093h +000A94r 1 94 .byt 094h +000A95r 1 95 .byt 095h +000A96r 1 96 .byt 096h +000A97r 1 97 .byt 097h +000A98r 1 98 .byt 098h +000A99r 1 99 .byt 099h +000A9Ar 1 9A .byt 09ah +000A9Br 1 9B .byt 09bh +000A9Cr 1 9C .byt 09ch +000A9Dr 1 9D .byt 09dh +000A9Er 1 9E .byt 09eh +000A9Fr 1 9F .byt 09fh +000AA0r 1 A0 .byt 0a0h +000AA1r 1 A1 .byt 0a1h +000AA2r 1 A2 .byt 0a2h +000AA3r 1 A3 .byt 0a3h +000AA4r 1 A4 .byt 0a4h +000AA5r 1 A5 .byt 0a5h +000AA6r 1 A6 .byt 0a6h +000AA7r 1 A7 .byt 0a7h +000AA8r 1 A8 .byt 0a8h +000AA9r 1 A9 .byt 0a9h +000AAAr 1 AA .byt 0aah +000AABr 1 AB .byt 0abh +000AACr 1 AC .byt 0ach +000AADr 1 AD .byt 0adh +000AAEr 1 AE .byt 0aeh +000AAFr 1 AF .byt 0afh +000AB0r 1 B0 .byt 0b0h +000AB1r 1 B1 .byt 0b1h +000AB2r 1 B2 .byt 0b2h +000AB3r 1 B3 .byt 0b3h +000AB4r 1 B4 .byt 0b4h +000AB5r 1 B5 .byt 0b5h +000AB6r 1 B6 .byt 0b6h +000AB7r 1 B7 .byt 0b7h +000AB8r 1 B8 .byt 0b8h +000AB9r 1 B9 .byt 0b9h +000ABAr 1 BA .byt 0bah +000ABBr 1 BB .byt 0bbh +000ABCr 1 BC .byt 0bch +000ABDr 1 BD .byt 0bdh +000ABEr 1 BE .byt 0beh +000ABFr 1 BF .byt 0bfh +000AC0r 1 C0 .byt 0c0h +000AC1r 1 C1 .byt 0c1h +000AC2r 1 C2 .byt 0c2h +000AC3r 1 C3 .byt 0c3h +000AC4r 1 C4 .byt 0c4h +000AC5r 1 C5 .byt 0c5h +000AC6r 1 C6 .byt 0c6h +000AC7r 1 C7 .byt 0c7h +000AC8r 1 C8 .byt 0c8h +000AC9r 1 C9 .byt 0c9h +000ACAr 1 CA .byt 0cah +000ACBr 1 CB .byt 0cbh +000ACCr 1 CC .byt 0cch +000ACDr 1 CD .byt 0cdh +000ACEr 1 CE .byt 0ceh +000ACFr 1 CF .byt 0cfh +000AD0r 1 D0 .byt 0d0h +000AD1r 1 D1 .byt 0d1h +000AD2r 1 D2 .byt 0d2h +000AD3r 1 D3 .byt 0d3h +000AD4r 1 D4 .byt 0d4h +000AD5r 1 D5 .byt 0d5h +000AD6r 1 D6 .byt 0d6h +000AD7r 1 D7 .byt 0d7h +000AD8r 1 D8 .byt 0d8h +000AD9r 1 D9 .byt 0d9h +000ADAr 1 DA .byt 0dah +000ADBr 1 DB .byt 0dbh +000ADCr 1 DC .byt 0dch +000ADDr 1 DD .byt 0ddh +000ADEr 1 DE .byt 0deh +000ADFr 1 DF .byt 0dfh +000AE0r 1 E0 .byt 0e0h +000AE1r 1 E1 .byt 0e1h +000AE2r 1 E2 .byt 0e2h +000AE3r 1 E3 .byt 0e3h +000AE4r 1 E4 .byt 0e4h +000AE5r 1 E5 .byt 0e5h +000AE6r 1 E6 .byt 0e6h +000AE7r 1 E7 .byt 0e7h +000AE8r 1 E8 .byt 0e8h +000AE9r 1 E9 .byt 0e9h +000AEAr 1 EA .byt 0eah +000AEBr 1 EB .byt 0ebh +000AECr 1 EC .byt 0ech +000AEDr 1 ED .byt 0edh +000AEEr 1 EE .byt 0eeh +000AEFr 1 EF .byt 0efh +000AF0r 1 F0 .byt 0f0h +000AF1r 1 F1 .byt 0f1h +000AF2r 1 F2 .byt 0f2h +000AF3r 1 F3 .byt 0f3h +000AF4r 1 F4 .byt 0f4h +000AF5r 1 F5 .byt 0f5h +000AF6r 1 F6 .byt 0f6h +000AF7r 1 F7 .byt 0f7h +000AF8r 1 F8 .byt 0f8h +000AF9r 1 F9 .byt 0f9h +000AFAr 1 FA .byt 0fah +000AFBr 1 FB .byt 0fbh +000AFCr 1 FC .byt 0fch +000AFDr 1 FD .byt 0fdh +000AFEr 1 FE .byt 0feh +000AFFr 1 FF .byt 0ffh 000B00r 1 -000B00r 1 ; binary values, variable length -000B00r 1 00 .byt %0 -000B01r 1 01 .byt %1 -000B02r 1 02 .byt %10 -000B03r 1 03 .byt %11 -000B04r 1 04 .byt %100 -000B05r 1 05 .byt %101 -000B06r 1 06 .byt %110 -000B07r 1 07 .byt %111 -000B08r 1 08 .byt %1000 -000B09r 1 09 .byt %1001 -000B0Ar 1 0A .byt %1010 -000B0Br 1 0B .byt %1011 -000B0Cr 1 0C .byt %1100 -000B0Dr 1 0D .byt %1101 -000B0Er 1 0E .byt %1110 -000B0Fr 1 0F .byt %1111 -000B10r 1 10 .byt %10000 -000B11r 1 11 .byt %10001 -000B12r 1 12 .byt %10010 -000B13r 1 13 .byt %10011 -000B14r 1 14 .byt %10100 -000B15r 1 15 .byt %10101 -000B16r 1 16 .byt %10110 -000B17r 1 17 .byt %10111 -000B18r 1 18 .byt %11000 -000B19r 1 19 .byt %11001 -000B1Ar 1 1A .byt %11010 -000B1Br 1 1B .byt %11011 -000B1Cr 1 1C .byt %11100 -000B1Dr 1 1D .byt %11101 -000B1Er 1 1E .byt %11110 -000B1Fr 1 1F .byt %11111 -000B20r 1 20 .byt %100000 -000B21r 1 21 .byt %100001 -000B22r 1 22 .byt %100010 -000B23r 1 23 .byt %100011 -000B24r 1 24 .byt %100100 -000B25r 1 25 .byt %100101 -000B26r 1 26 .byt %100110 -000B27r 1 27 .byt %100111 -000B28r 1 28 .byt %101000 -000B29r 1 29 .byt %101001 -000B2Ar 1 2A .byt %101010 -000B2Br 1 2B .byt %101011 -000B2Cr 1 2C .byt %101100 -000B2Dr 1 2D .byt %101101 -000B2Er 1 2E .byt %101110 -000B2Fr 1 2F .byt %101111 -000B30r 1 30 .byt %110000 -000B31r 1 31 .byt %110001 -000B32r 1 32 .byt %110010 -000B33r 1 33 .byt %110011 -000B34r 1 34 .byt %110100 -000B35r 1 35 .byt %110101 -000B36r 1 36 .byt %110110 -000B37r 1 37 .byt %110111 -000B38r 1 38 .byt %111000 -000B39r 1 39 .byt %111001 -000B3Ar 1 3A .byt %111010 -000B3Br 1 3B .byt %111011 -000B3Cr 1 3C .byt %111100 -000B3Dr 1 3D .byt %111101 -000B3Er 1 3E .byt %111110 -000B3Fr 1 3F .byt %111111 -000B40r 1 40 .byt %1000000 -000B41r 1 41 .byt %1000001 -000B42r 1 42 .byt %1000010 -000B43r 1 43 .byt %1000011 -000B44r 1 44 .byt %1000100 -000B45r 1 45 .byt %1000101 -000B46r 1 46 .byt %1000110 -000B47r 1 47 .byt %1000111 -000B48r 1 48 .byt %1001000 -000B49r 1 49 .byt %1001001 -000B4Ar 1 4A .byt %1001010 -000B4Br 1 4B .byt %1001011 -000B4Cr 1 4C .byt %1001100 -000B4Dr 1 4D .byt %1001101 -000B4Er 1 4E .byt %1001110 -000B4Fr 1 4F .byt %1001111 -000B50r 1 50 .byt %1010000 -000B51r 1 51 .byt %1010001 -000B52r 1 52 .byt %1010010 -000B53r 1 53 .byt %1010011 -000B54r 1 54 .byt %1010100 -000B55r 1 55 .byt %1010101 -000B56r 1 56 .byt %1010110 -000B57r 1 57 .byt %1010111 -000B58r 1 58 .byt %1011000 -000B59r 1 59 .byt %1011001 -000B5Ar 1 5A .byt %1011010 -000B5Br 1 5B .byt %1011011 -000B5Cr 1 5C .byt %1011100 -000B5Dr 1 5D .byt %1011101 -000B5Er 1 5E .byt %1011110 -000B5Fr 1 5F .byt %1011111 -000B60r 1 60 .byt %1100000 -000B61r 1 61 .byt %1100001 -000B62r 1 62 .byt %1100010 -000B63r 1 63 .byt %1100011 -000B64r 1 64 .byt %1100100 -000B65r 1 65 .byt %1100101 -000B66r 1 66 .byt %1100110 -000B67r 1 67 .byt %1100111 -000B68r 1 68 .byt %1101000 -000B69r 1 69 .byt %1101001 -000B6Ar 1 6A .byt %1101010 -000B6Br 1 6B .byt %1101011 -000B6Cr 1 6C .byt %1101100 -000B6Dr 1 6D .byt %1101101 -000B6Er 1 6E .byt %1101110 -000B6Fr 1 6F .byt %1101111 -000B70r 1 70 .byt %1110000 -000B71r 1 71 .byt %1110001 -000B72r 1 72 .byt %1110010 -000B73r 1 73 .byt %1110011 -000B74r 1 74 .byt %1110100 -000B75r 1 75 .byt %1110101 -000B76r 1 76 .byt %1110110 -000B77r 1 77 .byt %1110111 -000B78r 1 78 .byt %1111000 -000B79r 1 79 .byt %1111001 -000B7Ar 1 7A .byt %1111010 -000B7Br 1 7B .byt %1111011 -000B7Cr 1 7C .byt %1111100 -000B7Dr 1 7D .byt %1111101 -000B7Er 1 7E .byt %1111110 -000B7Fr 1 7F .byt %1111111 -000B80r 1 80 .byt %10000000 -000B81r 1 81 .byt %10000001 -000B82r 1 82 .byt %10000010 -000B83r 1 83 .byt %10000011 -000B84r 1 84 .byt %10000100 -000B85r 1 85 .byt %10000101 -000B86r 1 86 .byt %10000110 -000B87r 1 87 .byt %10000111 -000B88r 1 88 .byt %10001000 -000B89r 1 89 .byt %10001001 -000B8Ar 1 8A .byt %10001010 -000B8Br 1 8B .byt %10001011 -000B8Cr 1 8C .byt %10001100 -000B8Dr 1 8D .byt %10001101 -000B8Er 1 8E .byt %10001110 -000B8Fr 1 8F .byt %10001111 -000B90r 1 90 .byt %10010000 -000B91r 1 91 .byt %10010001 -000B92r 1 92 .byt %10010010 -000B93r 1 93 .byt %10010011 -000B94r 1 94 .byt %10010100 -000B95r 1 95 .byt %10010101 -000B96r 1 96 .byt %10010110 -000B97r 1 97 .byt %10010111 -000B98r 1 98 .byt %10011000 -000B99r 1 99 .byt %10011001 -000B9Ar 1 9A .byt %10011010 -000B9Br 1 9B .byt %10011011 -000B9Cr 1 9C .byt %10011100 -000B9Dr 1 9D .byt %10011101 -000B9Er 1 9E .byt %10011110 -000B9Fr 1 9F .byt %10011111 -000BA0r 1 A0 .byt %10100000 -000BA1r 1 A1 .byt %10100001 -000BA2r 1 A2 .byt %10100010 -000BA3r 1 A3 .byt %10100011 -000BA4r 1 A4 .byt %10100100 -000BA5r 1 A5 .byt %10100101 -000BA6r 1 A6 .byt %10100110 -000BA7r 1 A7 .byt %10100111 -000BA8r 1 A8 .byt %10101000 -000BA9r 1 A9 .byt %10101001 -000BAAr 1 AA .byt %10101010 -000BABr 1 AB .byt %10101011 -000BACr 1 AC .byt %10101100 -000BADr 1 AD .byt %10101101 -000BAEr 1 AE .byt %10101110 -000BAFr 1 AF .byt %10101111 -000BB0r 1 B0 .byt %10110000 -000BB1r 1 B1 .byt %10110001 -000BB2r 1 B2 .byt %10110010 -000BB3r 1 B3 .byt %10110011 -000BB4r 1 B4 .byt %10110100 -000BB5r 1 B5 .byt %10110101 -000BB6r 1 B6 .byt %10110110 -000BB7r 1 B7 .byt %10110111 -000BB8r 1 B8 .byt %10111000 -000BB9r 1 B9 .byt %10111001 -000BBAr 1 BA .byt %10111010 -000BBBr 1 BB .byt %10111011 -000BBCr 1 BC .byt %10111100 -000BBDr 1 BD .byt %10111101 -000BBEr 1 BE .byt %10111110 -000BBFr 1 BF .byt %10111111 -000BC0r 1 C0 .byt %11000000 -000BC1r 1 C1 .byt %11000001 -000BC2r 1 C2 .byt %11000010 -000BC3r 1 C3 .byt %11000011 -000BC4r 1 C4 .byt %11000100 -000BC5r 1 C5 .byt %11000101 -000BC6r 1 C6 .byt %11000110 -000BC7r 1 C7 .byt %11000111 -000BC8r 1 C8 .byt %11001000 -000BC9r 1 C9 .byt %11001001 -000BCAr 1 CA .byt %11001010 -000BCBr 1 CB .byt %11001011 -000BCCr 1 CC .byt %11001100 -000BCDr 1 CD .byt %11001101 -000BCEr 1 CE .byt %11001110 -000BCFr 1 CF .byt %11001111 -000BD0r 1 D0 .byt %11010000 -000BD1r 1 D1 .byt %11010001 -000BD2r 1 D2 .byt %11010010 -000BD3r 1 D3 .byt %11010011 -000BD4r 1 D4 .byt %11010100 -000BD5r 1 D5 .byt %11010101 -000BD6r 1 D6 .byt %11010110 -000BD7r 1 D7 .byt %11010111 -000BD8r 1 D8 .byt %11011000 -000BD9r 1 D9 .byt %11011001 -000BDAr 1 DA .byt %11011010 -000BDBr 1 DB .byt %11011011 -000BDCr 1 DC .byt %11011100 -000BDDr 1 DD .byt %11011101 -000BDEr 1 DE .byt %11011110 -000BDFr 1 DF .byt %11011111 -000BE0r 1 E0 .byt %11100000 -000BE1r 1 E1 .byt %11100001 -000BE2r 1 E2 .byt %11100010 -000BE3r 1 E3 .byt %11100011 -000BE4r 1 E4 .byt %11100100 -000BE5r 1 E5 .byt %11100101 -000BE6r 1 E6 .byt %11100110 -000BE7r 1 E7 .byt %11100111 -000BE8r 1 E8 .byt %11101000 -000BE9r 1 E9 .byt %11101001 -000BEAr 1 EA .byt %11101010 -000BEBr 1 EB .byt %11101011 -000BECr 1 EC .byt %11101100 -000BEDr 1 ED .byt %11101101 -000BEEr 1 EE .byt %11101110 -000BEFr 1 EF .byt %11101111 -000BF0r 1 F0 .byt %11110000 -000BF1r 1 F1 .byt %11110001 -000BF2r 1 F2 .byt %11110010 -000BF3r 1 F3 .byt %11110011 -000BF4r 1 F4 .byt %11110100 -000BF5r 1 F5 .byt %11110101 -000BF6r 1 F6 .byt %11110110 -000BF7r 1 F7 .byt %11110111 -000BF8r 1 F8 .byt %11111000 -000BF9r 1 F9 .byt %11111001 -000BFAr 1 FA .byt %11111010 -000BFBr 1 FB .byt %11111011 -000BFCr 1 FC .byt %11111100 -000BFDr 1 FD .byt %11111101 -000BFEr 1 FE .byt %11111110 -000BFFr 1 FF .byt %11111111 +000B00r 1 ; binary values, variable length +000B00r 1 00 .byt %0 +000B01r 1 01 .byt %1 +000B02r 1 02 .byt %10 +000B03r 1 03 .byt %11 +000B04r 1 04 .byt %100 +000B05r 1 05 .byt %101 +000B06r 1 06 .byt %110 +000B07r 1 07 .byt %111 +000B08r 1 08 .byt %1000 +000B09r 1 09 .byt %1001 +000B0Ar 1 0A .byt %1010 +000B0Br 1 0B .byt %1011 +000B0Cr 1 0C .byt %1100 +000B0Dr 1 0D .byt %1101 +000B0Er 1 0E .byt %1110 +000B0Fr 1 0F .byt %1111 +000B10r 1 10 .byt %10000 +000B11r 1 11 .byt %10001 +000B12r 1 12 .byt %10010 +000B13r 1 13 .byt %10011 +000B14r 1 14 .byt %10100 +000B15r 1 15 .byt %10101 +000B16r 1 16 .byt %10110 +000B17r 1 17 .byt %10111 +000B18r 1 18 .byt %11000 +000B19r 1 19 .byt %11001 +000B1Ar 1 1A .byt %11010 +000B1Br 1 1B .byt %11011 +000B1Cr 1 1C .byt %11100 +000B1Dr 1 1D .byt %11101 +000B1Er 1 1E .byt %11110 +000B1Fr 1 1F .byt %11111 +000B20r 1 20 .byt %100000 +000B21r 1 21 .byt %100001 +000B22r 1 22 .byt %100010 +000B23r 1 23 .byt %100011 +000B24r 1 24 .byt %100100 +000B25r 1 25 .byt %100101 +000B26r 1 26 .byt %100110 +000B27r 1 27 .byt %100111 +000B28r 1 28 .byt %101000 +000B29r 1 29 .byt %101001 +000B2Ar 1 2A .byt %101010 +000B2Br 1 2B .byt %101011 +000B2Cr 1 2C .byt %101100 +000B2Dr 1 2D .byt %101101 +000B2Er 1 2E .byt %101110 +000B2Fr 1 2F .byt %101111 +000B30r 1 30 .byt %110000 +000B31r 1 31 .byt %110001 +000B32r 1 32 .byt %110010 +000B33r 1 33 .byt %110011 +000B34r 1 34 .byt %110100 +000B35r 1 35 .byt %110101 +000B36r 1 36 .byt %110110 +000B37r 1 37 .byt %110111 +000B38r 1 38 .byt %111000 +000B39r 1 39 .byt %111001 +000B3Ar 1 3A .byt %111010 +000B3Br 1 3B .byt %111011 +000B3Cr 1 3C .byt %111100 +000B3Dr 1 3D .byt %111101 +000B3Er 1 3E .byt %111110 +000B3Fr 1 3F .byt %111111 +000B40r 1 40 .byt %1000000 +000B41r 1 41 .byt %1000001 +000B42r 1 42 .byt %1000010 +000B43r 1 43 .byt %1000011 +000B44r 1 44 .byt %1000100 +000B45r 1 45 .byt %1000101 +000B46r 1 46 .byt %1000110 +000B47r 1 47 .byt %1000111 +000B48r 1 48 .byt %1001000 +000B49r 1 49 .byt %1001001 +000B4Ar 1 4A .byt %1001010 +000B4Br 1 4B .byt %1001011 +000B4Cr 1 4C .byt %1001100 +000B4Dr 1 4D .byt %1001101 +000B4Er 1 4E .byt %1001110 +000B4Fr 1 4F .byt %1001111 +000B50r 1 50 .byt %1010000 +000B51r 1 51 .byt %1010001 +000B52r 1 52 .byt %1010010 +000B53r 1 53 .byt %1010011 +000B54r 1 54 .byt %1010100 +000B55r 1 55 .byt %1010101 +000B56r 1 56 .byt %1010110 +000B57r 1 57 .byt %1010111 +000B58r 1 58 .byt %1011000 +000B59r 1 59 .byt %1011001 +000B5Ar 1 5A .byt %1011010 +000B5Br 1 5B .byt %1011011 +000B5Cr 1 5C .byt %1011100 +000B5Dr 1 5D .byt %1011101 +000B5Er 1 5E .byt %1011110 +000B5Fr 1 5F .byt %1011111 +000B60r 1 60 .byt %1100000 +000B61r 1 61 .byt %1100001 +000B62r 1 62 .byt %1100010 +000B63r 1 63 .byt %1100011 +000B64r 1 64 .byt %1100100 +000B65r 1 65 .byt %1100101 +000B66r 1 66 .byt %1100110 +000B67r 1 67 .byt %1100111 +000B68r 1 68 .byt %1101000 +000B69r 1 69 .byt %1101001 +000B6Ar 1 6A .byt %1101010 +000B6Br 1 6B .byt %1101011 +000B6Cr 1 6C .byt %1101100 +000B6Dr 1 6D .byt %1101101 +000B6Er 1 6E .byt %1101110 +000B6Fr 1 6F .byt %1101111 +000B70r 1 70 .byt %1110000 +000B71r 1 71 .byt %1110001 +000B72r 1 72 .byt %1110010 +000B73r 1 73 .byt %1110011 +000B74r 1 74 .byt %1110100 +000B75r 1 75 .byt %1110101 +000B76r 1 76 .byt %1110110 +000B77r 1 77 .byt %1110111 +000B78r 1 78 .byt %1111000 +000B79r 1 79 .byt %1111001 +000B7Ar 1 7A .byt %1111010 +000B7Br 1 7B .byt %1111011 +000B7Cr 1 7C .byt %1111100 +000B7Dr 1 7D .byt %1111101 +000B7Er 1 7E .byt %1111110 +000B7Fr 1 7F .byt %1111111 +000B80r 1 80 .byt %10000000 +000B81r 1 81 .byt %10000001 +000B82r 1 82 .byt %10000010 +000B83r 1 83 .byt %10000011 +000B84r 1 84 .byt %10000100 +000B85r 1 85 .byt %10000101 +000B86r 1 86 .byt %10000110 +000B87r 1 87 .byt %10000111 +000B88r 1 88 .byt %10001000 +000B89r 1 89 .byt %10001001 +000B8Ar 1 8A .byt %10001010 +000B8Br 1 8B .byt %10001011 +000B8Cr 1 8C .byt %10001100 +000B8Dr 1 8D .byt %10001101 +000B8Er 1 8E .byt %10001110 +000B8Fr 1 8F .byt %10001111 +000B90r 1 90 .byt %10010000 +000B91r 1 91 .byt %10010001 +000B92r 1 92 .byt %10010010 +000B93r 1 93 .byt %10010011 +000B94r 1 94 .byt %10010100 +000B95r 1 95 .byt %10010101 +000B96r 1 96 .byt %10010110 +000B97r 1 97 .byt %10010111 +000B98r 1 98 .byt %10011000 +000B99r 1 99 .byt %10011001 +000B9Ar 1 9A .byt %10011010 +000B9Br 1 9B .byt %10011011 +000B9Cr 1 9C .byt %10011100 +000B9Dr 1 9D .byt %10011101 +000B9Er 1 9E .byt %10011110 +000B9Fr 1 9F .byt %10011111 +000BA0r 1 A0 .byt %10100000 +000BA1r 1 A1 .byt %10100001 +000BA2r 1 A2 .byt %10100010 +000BA3r 1 A3 .byt %10100011 +000BA4r 1 A4 .byt %10100100 +000BA5r 1 A5 .byt %10100101 +000BA6r 1 A6 .byt %10100110 +000BA7r 1 A7 .byt %10100111 +000BA8r 1 A8 .byt %10101000 +000BA9r 1 A9 .byt %10101001 +000BAAr 1 AA .byt %10101010 +000BABr 1 AB .byt %10101011 +000BACr 1 AC .byt %10101100 +000BADr 1 AD .byt %10101101 +000BAEr 1 AE .byt %10101110 +000BAFr 1 AF .byt %10101111 +000BB0r 1 B0 .byt %10110000 +000BB1r 1 B1 .byt %10110001 +000BB2r 1 B2 .byt %10110010 +000BB3r 1 B3 .byt %10110011 +000BB4r 1 B4 .byt %10110100 +000BB5r 1 B5 .byt %10110101 +000BB6r 1 B6 .byt %10110110 +000BB7r 1 B7 .byt %10110111 +000BB8r 1 B8 .byt %10111000 +000BB9r 1 B9 .byt %10111001 +000BBAr 1 BA .byt %10111010 +000BBBr 1 BB .byt %10111011 +000BBCr 1 BC .byt %10111100 +000BBDr 1 BD .byt %10111101 +000BBEr 1 BE .byt %10111110 +000BBFr 1 BF .byt %10111111 +000BC0r 1 C0 .byt %11000000 +000BC1r 1 C1 .byt %11000001 +000BC2r 1 C2 .byt %11000010 +000BC3r 1 C3 .byt %11000011 +000BC4r 1 C4 .byt %11000100 +000BC5r 1 C5 .byt %11000101 +000BC6r 1 C6 .byt %11000110 +000BC7r 1 C7 .byt %11000111 +000BC8r 1 C8 .byt %11001000 +000BC9r 1 C9 .byt %11001001 +000BCAr 1 CA .byt %11001010 +000BCBr 1 CB .byt %11001011 +000BCCr 1 CC .byt %11001100 +000BCDr 1 CD .byt %11001101 +000BCEr 1 CE .byt %11001110 +000BCFr 1 CF .byt %11001111 +000BD0r 1 D0 .byt %11010000 +000BD1r 1 D1 .byt %11010001 +000BD2r 1 D2 .byt %11010010 +000BD3r 1 D3 .byt %11010011 +000BD4r 1 D4 .byt %11010100 +000BD5r 1 D5 .byt %11010101 +000BD6r 1 D6 .byt %11010110 +000BD7r 1 D7 .byt %11010111 +000BD8r 1 D8 .byt %11011000 +000BD9r 1 D9 .byt %11011001 +000BDAr 1 DA .byt %11011010 +000BDBr 1 DB .byt %11011011 +000BDCr 1 DC .byt %11011100 +000BDDr 1 DD .byt %11011101 +000BDEr 1 DE .byt %11011110 +000BDFr 1 DF .byt %11011111 +000BE0r 1 E0 .byt %11100000 +000BE1r 1 E1 .byt %11100001 +000BE2r 1 E2 .byt %11100010 +000BE3r 1 E3 .byt %11100011 +000BE4r 1 E4 .byt %11100100 +000BE5r 1 E5 .byt %11100101 +000BE6r 1 E6 .byt %11100110 +000BE7r 1 E7 .byt %11100111 +000BE8r 1 E8 .byt %11101000 +000BE9r 1 E9 .byt %11101001 +000BEAr 1 EA .byt %11101010 +000BEBr 1 EB .byt %11101011 +000BECr 1 EC .byt %11101100 +000BEDr 1 ED .byt %11101101 +000BEEr 1 EE .byt %11101110 +000BEFr 1 EF .byt %11101111 +000BF0r 1 F0 .byt %11110000 +000BF1r 1 F1 .byt %11110001 +000BF2r 1 F2 .byt %11110010 +000BF3r 1 F3 .byt %11110011 +000BF4r 1 F4 .byt %11110100 +000BF5r 1 F5 .byt %11110101 +000BF6r 1 F6 .byt %11110110 +000BF7r 1 F7 .byt %11110111 +000BF8r 1 F8 .byt %11111000 +000BF9r 1 F9 .byt %11111001 +000BFAr 1 FA .byt %11111010 +000BFBr 1 FB .byt %11111011 +000BFCr 1 FC .byt %11111100 +000BFDr 1 FD .byt %11111101 +000BFEr 1 FE .byt %11111110 +000BFFr 1 FF .byt %11111111 000C00r 1 -000C00r 1 ; binary values, full length -000C00r 1 00 .byt %00000000 -000C01r 1 01 .byt %00000001 -000C02r 1 02 .byt %00000010 -000C03r 1 03 .byt %00000011 -000C04r 1 04 .byt %00000100 -000C05r 1 05 .byt %00000101 -000C06r 1 06 .byt %00000110 -000C07r 1 07 .byt %00000111 -000C08r 1 08 .byt %00001000 -000C09r 1 09 .byt %00001001 -000C0Ar 1 0A .byt %00001010 -000C0Br 1 0B .byt %00001011 -000C0Cr 1 0C .byt %00001100 -000C0Dr 1 0D .byt %00001101 -000C0Er 1 0E .byt %00001110 -000C0Fr 1 0F .byt %00001111 -000C10r 1 10 .byt %00010000 -000C11r 1 11 .byt %00010001 -000C12r 1 12 .byt %00010010 -000C13r 1 13 .byt %00010011 -000C14r 1 14 .byt %00010100 -000C15r 1 15 .byt %00010101 -000C16r 1 16 .byt %00010110 -000C17r 1 17 .byt %00010111 -000C18r 1 18 .byt %00011000 -000C19r 1 19 .byt %00011001 -000C1Ar 1 1A .byt %00011010 -000C1Br 1 1B .byt %00011011 -000C1Cr 1 1C .byt %00011100 -000C1Dr 1 1D .byt %00011101 -000C1Er 1 1E .byt %00011110 -000C1Fr 1 1F .byt %00011111 -000C20r 1 20 .byt %00100000 -000C21r 1 21 .byt %00100001 -000C22r 1 22 .byt %00100010 -000C23r 1 23 .byt %00100011 -000C24r 1 24 .byt %00100100 -000C25r 1 25 .byt %00100101 -000C26r 1 26 .byt %00100110 -000C27r 1 27 .byt %00100111 -000C28r 1 28 .byt %00101000 -000C29r 1 29 .byt %00101001 -000C2Ar 1 2A .byt %00101010 -000C2Br 1 2B .byt %00101011 -000C2Cr 1 2C .byt %00101100 -000C2Dr 1 2D .byt %00101101 -000C2Er 1 2E .byt %00101110 -000C2Fr 1 2F .byt %00101111 -000C30r 1 30 .byt %00110000 -000C31r 1 31 .byt %00110001 -000C32r 1 32 .byt %00110010 -000C33r 1 33 .byt %00110011 -000C34r 1 34 .byt %00110100 -000C35r 1 35 .byt %00110101 -000C36r 1 36 .byt %00110110 -000C37r 1 37 .byt %00110111 -000C38r 1 38 .byt %00111000 -000C39r 1 39 .byt %00111001 -000C3Ar 1 3A .byt %00111010 -000C3Br 1 3B .byt %00111011 -000C3Cr 1 3C .byt %00111100 -000C3Dr 1 3D .byt %00111101 -000C3Er 1 3E .byt %00111110 -000C3Fr 1 3F .byt %00111111 -000C40r 1 40 .byt %01000000 -000C41r 1 41 .byt %01000001 -000C42r 1 42 .byt %01000010 -000C43r 1 43 .byt %01000011 -000C44r 1 44 .byt %01000100 -000C45r 1 45 .byt %01000101 -000C46r 1 46 .byt %01000110 -000C47r 1 47 .byt %01000111 -000C48r 1 48 .byt %01001000 -000C49r 1 49 .byt %01001001 -000C4Ar 1 4A .byt %01001010 -000C4Br 1 4B .byt %01001011 -000C4Cr 1 4C .byt %01001100 -000C4Dr 1 4D .byt %01001101 -000C4Er 1 4E .byt %01001110 -000C4Fr 1 4F .byt %01001111 -000C50r 1 50 .byt %01010000 -000C51r 1 51 .byt %01010001 -000C52r 1 52 .byt %01010010 -000C53r 1 53 .byt %01010011 -000C54r 1 54 .byt %01010100 -000C55r 1 55 .byt %01010101 -000C56r 1 56 .byt %01010110 -000C57r 1 57 .byt %01010111 -000C58r 1 58 .byt %01011000 -000C59r 1 59 .byt %01011001 -000C5Ar 1 5A .byt %01011010 -000C5Br 1 5B .byt %01011011 -000C5Cr 1 5C .byt %01011100 -000C5Dr 1 5D .byt %01011101 -000C5Er 1 5E .byt %01011110 -000C5Fr 1 5F .byt %01011111 -000C60r 1 60 .byt %01100000 -000C61r 1 61 .byt %01100001 -000C62r 1 62 .byt %01100010 -000C63r 1 63 .byt %01100011 -000C64r 1 64 .byt %01100100 -000C65r 1 65 .byt %01100101 -000C66r 1 66 .byt %01100110 -000C67r 1 67 .byt %01100111 -000C68r 1 68 .byt %01101000 -000C69r 1 69 .byt %01101001 -000C6Ar 1 6A .byt %01101010 -000C6Br 1 6B .byt %01101011 -000C6Cr 1 6C .byt %01101100 -000C6Dr 1 6D .byt %01101101 -000C6Er 1 6E .byt %01101110 -000C6Fr 1 6F .byt %01101111 -000C70r 1 70 .byt %01110000 -000C71r 1 71 .byt %01110001 -000C72r 1 72 .byt %01110010 -000C73r 1 73 .byt %01110011 -000C74r 1 74 .byt %01110100 -000C75r 1 75 .byt %01110101 -000C76r 1 76 .byt %01110110 -000C77r 1 77 .byt %01110111 -000C78r 1 78 .byt %01111000 -000C79r 1 79 .byt %01111001 -000C7Ar 1 7A .byt %01111010 -000C7Br 1 7B .byt %01111011 -000C7Cr 1 7C .byt %01111100 -000C7Dr 1 7D .byt %01111101 -000C7Er 1 7E .byt %01111110 -000C7Fr 1 7F .byt %01111111 -000C80r 1 80 .byt %10000000 -000C81r 1 81 .byt %10000001 -000C82r 1 82 .byt %10000010 -000C83r 1 83 .byt %10000011 -000C84r 1 84 .byt %10000100 -000C85r 1 85 .byt %10000101 -000C86r 1 86 .byt %10000110 -000C87r 1 87 .byt %10000111 -000C88r 1 88 .byt %10001000 -000C89r 1 89 .byt %10001001 -000C8Ar 1 8A .byt %10001010 -000C8Br 1 8B .byt %10001011 -000C8Cr 1 8C .byt %10001100 -000C8Dr 1 8D .byt %10001101 -000C8Er 1 8E .byt %10001110 -000C8Fr 1 8F .byt %10001111 -000C90r 1 90 .byt %10010000 -000C91r 1 91 .byt %10010001 -000C92r 1 92 .byt %10010010 -000C93r 1 93 .byt %10010011 -000C94r 1 94 .byt %10010100 -000C95r 1 95 .byt %10010101 -000C96r 1 96 .byt %10010110 -000C97r 1 97 .byt %10010111 -000C98r 1 98 .byt %10011000 -000C99r 1 99 .byt %10011001 -000C9Ar 1 9A .byt %10011010 -000C9Br 1 9B .byt %10011011 -000C9Cr 1 9C .byt %10011100 -000C9Dr 1 9D .byt %10011101 -000C9Er 1 9E .byt %10011110 -000C9Fr 1 9F .byt %10011111 -000CA0r 1 A0 .byt %10100000 -000CA1r 1 A1 .byt %10100001 -000CA2r 1 A2 .byt %10100010 -000CA3r 1 A3 .byt %10100011 -000CA4r 1 A4 .byt %10100100 -000CA5r 1 A5 .byt %10100101 -000CA6r 1 A6 .byt %10100110 -000CA7r 1 A7 .byt %10100111 -000CA8r 1 A8 .byt %10101000 -000CA9r 1 A9 .byt %10101001 -000CAAr 1 AA .byt %10101010 -000CABr 1 AB .byt %10101011 -000CACr 1 AC .byt %10101100 -000CADr 1 AD .byt %10101101 -000CAEr 1 AE .byt %10101110 -000CAFr 1 AF .byt %10101111 -000CB0r 1 B0 .byt %10110000 -000CB1r 1 B1 .byt %10110001 -000CB2r 1 B2 .byt %10110010 -000CB3r 1 B3 .byt %10110011 -000CB4r 1 B4 .byt %10110100 -000CB5r 1 B5 .byt %10110101 -000CB6r 1 B6 .byt %10110110 -000CB7r 1 B7 .byt %10110111 -000CB8r 1 B8 .byt %10111000 -000CB9r 1 B9 .byt %10111001 -000CBAr 1 BA .byt %10111010 -000CBBr 1 BB .byt %10111011 -000CBCr 1 BC .byt %10111100 -000CBDr 1 BD .byt %10111101 -000CBEr 1 BE .byt %10111110 -000CBFr 1 BF .byt %10111111 -000CC0r 1 C0 .byt %11000000 -000CC1r 1 C1 .byt %11000001 -000CC2r 1 C2 .byt %11000010 -000CC3r 1 C3 .byt %11000011 -000CC4r 1 C4 .byt %11000100 -000CC5r 1 C5 .byt %11000101 -000CC6r 1 C6 .byt %11000110 -000CC7r 1 C7 .byt %11000111 -000CC8r 1 C8 .byt %11001000 -000CC9r 1 C9 .byt %11001001 -000CCAr 1 CA .byt %11001010 -000CCBr 1 CB .byt %11001011 -000CCCr 1 CC .byt %11001100 -000CCDr 1 CD .byt %11001101 -000CCEr 1 CE .byt %11001110 -000CCFr 1 CF .byt %11001111 -000CD0r 1 D0 .byt %11010000 -000CD1r 1 D1 .byt %11010001 -000CD2r 1 D2 .byt %11010010 -000CD3r 1 D3 .byt %11010011 -000CD4r 1 D4 .byt %11010100 -000CD5r 1 D5 .byt %11010101 -000CD6r 1 D6 .byt %11010110 -000CD7r 1 D7 .byt %11010111 -000CD8r 1 D8 .byt %11011000 -000CD9r 1 D9 .byt %11011001 -000CDAr 1 DA .byt %11011010 -000CDBr 1 DB .byt %11011011 -000CDCr 1 DC .byt %11011100 -000CDDr 1 DD .byt %11011101 -000CDEr 1 DE .byt %11011110 -000CDFr 1 DF .byt %11011111 -000CE0r 1 E0 .byt %11100000 -000CE1r 1 E1 .byt %11100001 -000CE2r 1 E2 .byt %11100010 -000CE3r 1 E3 .byt %11100011 -000CE4r 1 E4 .byt %11100100 -000CE5r 1 E5 .byt %11100101 -000CE6r 1 E6 .byt %11100110 -000CE7r 1 E7 .byt %11100111 -000CE8r 1 E8 .byt %11101000 -000CE9r 1 E9 .byt %11101001 -000CEAr 1 EA .byt %11101010 -000CEBr 1 EB .byt %11101011 -000CECr 1 EC .byt %11101100 -000CEDr 1 ED .byt %11101101 -000CEEr 1 EE .byt %11101110 -000CEFr 1 EF .byt %11101111 -000CF0r 1 F0 .byt %11110000 -000CF1r 1 F1 .byt %11110001 -000CF2r 1 F2 .byt %11110010 -000CF3r 1 F3 .byt %11110011 -000CF4r 1 F4 .byt %11110100 -000CF5r 1 F5 .byt %11110101 -000CF6r 1 F6 .byt %11110110 -000CF7r 1 F7 .byt %11110111 -000CF8r 1 F8 .byt %11111000 -000CF9r 1 F9 .byt %11111001 -000CFAr 1 FA .byt %11111010 -000CFBr 1 FB .byt %11111011 -000CFCr 1 FC .byt %11111100 -000CFDr 1 FD .byt %11111101 -000CFEr 1 FE .byt %11111110 -000CFFr 1 FF .byt %11111111 +000C00r 1 ; binary values, full length +000C00r 1 00 .byt %00000000 +000C01r 1 01 .byt %00000001 +000C02r 1 02 .byt %00000010 +000C03r 1 03 .byt %00000011 +000C04r 1 04 .byt %00000100 +000C05r 1 05 .byt %00000101 +000C06r 1 06 .byt %00000110 +000C07r 1 07 .byt %00000111 +000C08r 1 08 .byt %00001000 +000C09r 1 09 .byt %00001001 +000C0Ar 1 0A .byt %00001010 +000C0Br 1 0B .byt %00001011 +000C0Cr 1 0C .byt %00001100 +000C0Dr 1 0D .byt %00001101 +000C0Er 1 0E .byt %00001110 +000C0Fr 1 0F .byt %00001111 +000C10r 1 10 .byt %00010000 +000C11r 1 11 .byt %00010001 +000C12r 1 12 .byt %00010010 +000C13r 1 13 .byt %00010011 +000C14r 1 14 .byt %00010100 +000C15r 1 15 .byt %00010101 +000C16r 1 16 .byt %00010110 +000C17r 1 17 .byt %00010111 +000C18r 1 18 .byt %00011000 +000C19r 1 19 .byt %00011001 +000C1Ar 1 1A .byt %00011010 +000C1Br 1 1B .byt %00011011 +000C1Cr 1 1C .byt %00011100 +000C1Dr 1 1D .byt %00011101 +000C1Er 1 1E .byt %00011110 +000C1Fr 1 1F .byt %00011111 +000C20r 1 20 .byt %00100000 +000C21r 1 21 .byt %00100001 +000C22r 1 22 .byt %00100010 +000C23r 1 23 .byt %00100011 +000C24r 1 24 .byt %00100100 +000C25r 1 25 .byt %00100101 +000C26r 1 26 .byt %00100110 +000C27r 1 27 .byt %00100111 +000C28r 1 28 .byt %00101000 +000C29r 1 29 .byt %00101001 +000C2Ar 1 2A .byt %00101010 +000C2Br 1 2B .byt %00101011 +000C2Cr 1 2C .byt %00101100 +000C2Dr 1 2D .byt %00101101 +000C2Er 1 2E .byt %00101110 +000C2Fr 1 2F .byt %00101111 +000C30r 1 30 .byt %00110000 +000C31r 1 31 .byt %00110001 +000C32r 1 32 .byt %00110010 +000C33r 1 33 .byt %00110011 +000C34r 1 34 .byt %00110100 +000C35r 1 35 .byt %00110101 +000C36r 1 36 .byt %00110110 +000C37r 1 37 .byt %00110111 +000C38r 1 38 .byt %00111000 +000C39r 1 39 .byt %00111001 +000C3Ar 1 3A .byt %00111010 +000C3Br 1 3B .byt %00111011 +000C3Cr 1 3C .byt %00111100 +000C3Dr 1 3D .byt %00111101 +000C3Er 1 3E .byt %00111110 +000C3Fr 1 3F .byt %00111111 +000C40r 1 40 .byt %01000000 +000C41r 1 41 .byt %01000001 +000C42r 1 42 .byt %01000010 +000C43r 1 43 .byt %01000011 +000C44r 1 44 .byt %01000100 +000C45r 1 45 .byt %01000101 +000C46r 1 46 .byt %01000110 +000C47r 1 47 .byt %01000111 +000C48r 1 48 .byt %01001000 +000C49r 1 49 .byt %01001001 +000C4Ar 1 4A .byt %01001010 +000C4Br 1 4B .byt %01001011 +000C4Cr 1 4C .byt %01001100 +000C4Dr 1 4D .byt %01001101 +000C4Er 1 4E .byt %01001110 +000C4Fr 1 4F .byt %01001111 +000C50r 1 50 .byt %01010000 +000C51r 1 51 .byt %01010001 +000C52r 1 52 .byt %01010010 +000C53r 1 53 .byt %01010011 +000C54r 1 54 .byt %01010100 +000C55r 1 55 .byt %01010101 +000C56r 1 56 .byt %01010110 +000C57r 1 57 .byt %01010111 +000C58r 1 58 .byt %01011000 +000C59r 1 59 .byt %01011001 +000C5Ar 1 5A .byt %01011010 +000C5Br 1 5B .byt %01011011 +000C5Cr 1 5C .byt %01011100 +000C5Dr 1 5D .byt %01011101 +000C5Er 1 5E .byt %01011110 +000C5Fr 1 5F .byt %01011111 +000C60r 1 60 .byt %01100000 +000C61r 1 61 .byt %01100001 +000C62r 1 62 .byt %01100010 +000C63r 1 63 .byt %01100011 +000C64r 1 64 .byt %01100100 +000C65r 1 65 .byt %01100101 +000C66r 1 66 .byt %01100110 +000C67r 1 67 .byt %01100111 +000C68r 1 68 .byt %01101000 +000C69r 1 69 .byt %01101001 +000C6Ar 1 6A .byt %01101010 +000C6Br 1 6B .byt %01101011 +000C6Cr 1 6C .byt %01101100 +000C6Dr 1 6D .byt %01101101 +000C6Er 1 6E .byt %01101110 +000C6Fr 1 6F .byt %01101111 +000C70r 1 70 .byt %01110000 +000C71r 1 71 .byt %01110001 +000C72r 1 72 .byt %01110010 +000C73r 1 73 .byt %01110011 +000C74r 1 74 .byt %01110100 +000C75r 1 75 .byt %01110101 +000C76r 1 76 .byt %01110110 +000C77r 1 77 .byt %01110111 +000C78r 1 78 .byt %01111000 +000C79r 1 79 .byt %01111001 +000C7Ar 1 7A .byt %01111010 +000C7Br 1 7B .byt %01111011 +000C7Cr 1 7C .byt %01111100 +000C7Dr 1 7D .byt %01111101 +000C7Er 1 7E .byt %01111110 +000C7Fr 1 7F .byt %01111111 +000C80r 1 80 .byt %10000000 +000C81r 1 81 .byt %10000001 +000C82r 1 82 .byt %10000010 +000C83r 1 83 .byt %10000011 +000C84r 1 84 .byt %10000100 +000C85r 1 85 .byt %10000101 +000C86r 1 86 .byt %10000110 +000C87r 1 87 .byt %10000111 +000C88r 1 88 .byt %10001000 +000C89r 1 89 .byt %10001001 +000C8Ar 1 8A .byt %10001010 +000C8Br 1 8B .byt %10001011 +000C8Cr 1 8C .byt %10001100 +000C8Dr 1 8D .byt %10001101 +000C8Er 1 8E .byt %10001110 +000C8Fr 1 8F .byt %10001111 +000C90r 1 90 .byt %10010000 +000C91r 1 91 .byt %10010001 +000C92r 1 92 .byt %10010010 +000C93r 1 93 .byt %10010011 +000C94r 1 94 .byt %10010100 +000C95r 1 95 .byt %10010101 +000C96r 1 96 .byt %10010110 +000C97r 1 97 .byt %10010111 +000C98r 1 98 .byt %10011000 +000C99r 1 99 .byt %10011001 +000C9Ar 1 9A .byt %10011010 +000C9Br 1 9B .byt %10011011 +000C9Cr 1 9C .byt %10011100 +000C9Dr 1 9D .byt %10011101 +000C9Er 1 9E .byt %10011110 +000C9Fr 1 9F .byt %10011111 +000CA0r 1 A0 .byt %10100000 +000CA1r 1 A1 .byt %10100001 +000CA2r 1 A2 .byt %10100010 +000CA3r 1 A3 .byt %10100011 +000CA4r 1 A4 .byt %10100100 +000CA5r 1 A5 .byt %10100101 +000CA6r 1 A6 .byt %10100110 +000CA7r 1 A7 .byt %10100111 +000CA8r 1 A8 .byt %10101000 +000CA9r 1 A9 .byt %10101001 +000CAAr 1 AA .byt %10101010 +000CABr 1 AB .byt %10101011 +000CACr 1 AC .byt %10101100 +000CADr 1 AD .byt %10101101 +000CAEr 1 AE .byt %10101110 +000CAFr 1 AF .byt %10101111 +000CB0r 1 B0 .byt %10110000 +000CB1r 1 B1 .byt %10110001 +000CB2r 1 B2 .byt %10110010 +000CB3r 1 B3 .byt %10110011 +000CB4r 1 B4 .byt %10110100 +000CB5r 1 B5 .byt %10110101 +000CB6r 1 B6 .byt %10110110 +000CB7r 1 B7 .byt %10110111 +000CB8r 1 B8 .byt %10111000 +000CB9r 1 B9 .byt %10111001 +000CBAr 1 BA .byt %10111010 +000CBBr 1 BB .byt %10111011 +000CBCr 1 BC .byt %10111100 +000CBDr 1 BD .byt %10111101 +000CBEr 1 BE .byt %10111110 +000CBFr 1 BF .byt %10111111 +000CC0r 1 C0 .byt %11000000 +000CC1r 1 C1 .byt %11000001 +000CC2r 1 C2 .byt %11000010 +000CC3r 1 C3 .byt %11000011 +000CC4r 1 C4 .byt %11000100 +000CC5r 1 C5 .byt %11000101 +000CC6r 1 C6 .byt %11000110 +000CC7r 1 C7 .byt %11000111 +000CC8r 1 C8 .byt %11001000 +000CC9r 1 C9 .byt %11001001 +000CCAr 1 CA .byt %11001010 +000CCBr 1 CB .byt %11001011 +000CCCr 1 CC .byt %11001100 +000CCDr 1 CD .byt %11001101 +000CCEr 1 CE .byt %11001110 +000CCFr 1 CF .byt %11001111 +000CD0r 1 D0 .byt %11010000 +000CD1r 1 D1 .byt %11010001 +000CD2r 1 D2 .byt %11010010 +000CD3r 1 D3 .byt %11010011 +000CD4r 1 D4 .byt %11010100 +000CD5r 1 D5 .byt %11010101 +000CD6r 1 D6 .byt %11010110 +000CD7r 1 D7 .byt %11010111 +000CD8r 1 D8 .byt %11011000 +000CD9r 1 D9 .byt %11011001 +000CDAr 1 DA .byt %11011010 +000CDBr 1 DB .byt %11011011 +000CDCr 1 DC .byt %11011100 +000CDDr 1 DD .byt %11011101 +000CDEr 1 DE .byt %11011110 +000CDFr 1 DF .byt %11011111 +000CE0r 1 E0 .byt %11100000 +000CE1r 1 E1 .byt %11100001 +000CE2r 1 E2 .byt %11100010 +000CE3r 1 E3 .byt %11100011 +000CE4r 1 E4 .byt %11100100 +000CE5r 1 E5 .byt %11100101 +000CE6r 1 E6 .byt %11100110 +000CE7r 1 E7 .byt %11100111 +000CE8r 1 E8 .byt %11101000 +000CE9r 1 E9 .byt %11101001 +000CEAr 1 EA .byt %11101010 +000CEBr 1 EB .byt %11101011 +000CECr 1 EC .byt %11101100 +000CEDr 1 ED .byt %11101101 +000CEEr 1 EE .byt %11101110 +000CEFr 1 EF .byt %11101111 +000CF0r 1 F0 .byt %11110000 +000CF1r 1 F1 .byt %11110001 +000CF2r 1 F2 .byt %11110010 +000CF3r 1 F3 .byt %11110011 +000CF4r 1 F4 .byt %11110100 +000CF5r 1 F5 .byt %11110101 +000CF6r 1 F6 .byt %11110110 +000CF7r 1 F7 .byt %11110111 +000CF8r 1 F8 .byt %11111000 +000CF9r 1 F9 .byt %11111001 +000CFAr 1 FA .byt %11111010 +000CFBr 1 FB .byt %11111011 +000CFCr 1 FC .byt %11111100 +000CFDr 1 FD .byt %11111101 +000CFEr 1 FE .byt %11111110 +000CFFr 1 FF .byt %11111111 000D00r 1 -000D00r 1 ; some character values -000D00r 1 20 .byt ' ' -000D01r 1 21 .byt '!' -000D02r 1 22 .byt '"' -000D03r 1 23 .byt '#' -000D04r 1 24 .byt '$' -000D05r 1 25 .byt '%' -000D06r 1 26 .byt '&' -000D07r 1 27 .byt ''' -000D08r 1 28 .byt '(' -000D09r 1 29 .byt ')' -000D0Ar 1 2A .byt '*' -000D0Br 1 2B .byt '+' -000D0Cr 1 2C .byt ',' -000D0Dr 1 2D .byt '-' -000D0Er 1 2E .byt '.' -000D0Fr 1 2F .byt '/' -000D10r 1 30 .byt '0' -000D11r 1 31 .byt '1' -000D12r 1 32 .byt '2' -000D13r 1 33 .byt '3' -000D14r 1 34 .byt '4' -000D15r 1 35 .byt '5' -000D16r 1 36 .byt '6' -000D17r 1 37 .byt '7' -000D18r 1 38 .byt '8' -000D19r 1 39 .byt '9' -000D1Ar 1 3A .byt ':' -000D1Br 1 3B .byt ';' -000D1Cr 1 3C .byt '<' -000D1Dr 1 3D .byt '=' -000D1Er 1 3E .byt '>' -000D1Fr 1 3F .byt '?' -000D20r 1 40 .byt '@' -000D21r 1 41 .byt 'A' -000D22r 1 42 .byt 'B' -000D23r 1 43 .byt 'C' -000D24r 1 44 .byt 'D' -000D25r 1 45 .byt 'E' -000D26r 1 46 .byt 'F' -000D27r 1 47 .byt 'G' -000D28r 1 48 .byt 'H' -000D29r 1 49 .byt 'I' -000D2Ar 1 4A .byt 'J' -000D2Br 1 4B .byt 'K' -000D2Cr 1 4C .byt 'L' -000D2Dr 1 4D .byt 'M' -000D2Er 1 4E .byt 'N' -000D2Fr 1 4F .byt 'O' -000D30r 1 50 .byt 'P' -000D31r 1 51 .byt 'Q' -000D32r 1 52 .byt 'R' -000D33r 1 53 .byt 'S' -000D34r 1 54 .byt 'T' -000D35r 1 55 .byt 'U' -000D36r 1 56 .byt 'V' -000D37r 1 57 .byt 'W' -000D38r 1 58 .byt 'X' -000D39r 1 59 .byt 'Y' -000D3Ar 1 5A .byt 'Z' -000D3Br 1 5B .byt '[' -000D3Cr 1 5C .byt '\' -000D3Dr 1 5D .byt ']' -000D3Er 1 5E .byt '^' -000D3Fr 1 5F .byt '_' -000D40r 1 60 .byt '`' -000D41r 1 61 .byt 'a' -000D42r 1 62 .byt 'b' -000D43r 1 63 .byt 'c' -000D44r 1 64 .byt 'd' -000D45r 1 65 .byt 'e' -000D46r 1 66 .byt 'f' -000D47r 1 67 .byt 'g' -000D48r 1 68 .byt 'h' -000D49r 1 69 .byt 'i' -000D4Ar 1 6A .byt 'j' -000D4Br 1 6B .byt 'k' -000D4Cr 1 6C .byt 'l' -000D4Dr 1 6D .byt 'm' -000D4Er 1 6E .byt 'n' -000D4Fr 1 6F .byt 'o' -000D50r 1 70 .byt 'p' -000D51r 1 71 .byt 'q' -000D52r 1 72 .byt 'r' -000D53r 1 73 .byt 's' -000D54r 1 74 .byt 't' -000D55r 1 75 .byt 'u' -000D56r 1 76 .byt 'v' -000D57r 1 77 .byt 'w' -000D58r 1 78 .byt 'x' -000D59r 1 79 .byt 'y' -000D5Ar 1 7A .byt 'z' -000D5Br 1 7B .byt '{' -000D5Cr 1 7C .byt '|' -000D5Dr 1 7D .byt '}' -000D5Er 1 7E .byt '~' +000D00r 1 ; some character values +000D00r 1 20 .byt ' ' +000D01r 1 21 .byt '!' +000D02r 1 22 .byt '"' +000D03r 1 23 .byt '#' +000D04r 1 24 .byt '$' +000D05r 1 25 .byt '%' +000D06r 1 26 .byt '&' +000D07r 1 27 .byt ''' +000D08r 1 28 .byt '(' +000D09r 1 29 .byt ')' +000D0Ar 1 2A .byt '*' +000D0Br 1 2B .byt '+' +000D0Cr 1 2C .byt ',' +000D0Dr 1 2D .byt '-' +000D0Er 1 2E .byt '.' +000D0Fr 1 2F .byt '/' +000D10r 1 30 .byt '0' +000D11r 1 31 .byt '1' +000D12r 1 32 .byt '2' +000D13r 1 33 .byt '3' +000D14r 1 34 .byt '4' +000D15r 1 35 .byt '5' +000D16r 1 36 .byt '6' +000D17r 1 37 .byt '7' +000D18r 1 38 .byt '8' +000D19r 1 39 .byt '9' +000D1Ar 1 3A .byt ':' +000D1Br 1 3B .byt ';' +000D1Cr 1 3C .byt '<' +000D1Dr 1 3D .byt '=' +000D1Er 1 3E .byt '>' +000D1Fr 1 3F .byt '?' +000D20r 1 40 .byt '@' +000D21r 1 41 .byt 'A' +000D22r 1 42 .byt 'B' +000D23r 1 43 .byt 'C' +000D24r 1 44 .byt 'D' +000D25r 1 45 .byt 'E' +000D26r 1 46 .byt 'F' +000D27r 1 47 .byt 'G' +000D28r 1 48 .byt 'H' +000D29r 1 49 .byt 'I' +000D2Ar 1 4A .byt 'J' +000D2Br 1 4B .byt 'K' +000D2Cr 1 4C .byt 'L' +000D2Dr 1 4D .byt 'M' +000D2Er 1 4E .byt 'N' +000D2Fr 1 4F .byt 'O' +000D30r 1 50 .byt 'P' +000D31r 1 51 .byt 'Q' +000D32r 1 52 .byt 'R' +000D33r 1 53 .byt 'S' +000D34r 1 54 .byt 'T' +000D35r 1 55 .byt 'U' +000D36r 1 56 .byt 'V' +000D37r 1 57 .byt 'W' +000D38r 1 58 .byt 'X' +000D39r 1 59 .byt 'Y' +000D3Ar 1 5A .byt 'Z' +000D3Br 1 5B .byt '[' +000D3Cr 1 5C .byt '\' +000D3Dr 1 5D .byt ']' +000D3Er 1 5E .byt '^' +000D3Fr 1 5F .byt '_' +000D40r 1 60 .byt '`' +000D41r 1 61 .byt 'a' +000D42r 1 62 .byt 'b' +000D43r 1 63 .byt 'c' +000D44r 1 64 .byt 'd' +000D45r 1 65 .byt 'e' +000D46r 1 66 .byt 'f' +000D47r 1 67 .byt 'g' +000D48r 1 68 .byt 'h' +000D49r 1 69 .byt 'i' +000D4Ar 1 6A .byt 'j' +000D4Br 1 6B .byt 'k' +000D4Cr 1 6C .byt 'l' +000D4Dr 1 6D .byt 'm' +000D4Er 1 6E .byt 'n' +000D4Fr 1 6F .byt 'o' +000D50r 1 70 .byt 'p' +000D51r 1 71 .byt 'q' +000D52r 1 72 .byt 'r' +000D53r 1 73 .byt 's' +000D54r 1 74 .byt 't' +000D55r 1 75 .byt 'u' +000D56r 1 76 .byt 'v' +000D57r 1 77 .byt 'w' +000D58r 1 78 .byt 'x' +000D59r 1 79 .byt 'y' +000D5Ar 1 7A .byt 'z' +000D5Br 1 7B .byt '{' +000D5Cr 1 7C .byt '|' +000D5Dr 1 7D .byt '}' +000D5Er 1 7E .byt '~' 000D5Fr 1 -000D5Fr 1 ; multiple values on one line, decimal -000D5Fr 1 00 01 02 03 .byt 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +000D5Fr 1 ; multiple values on one line, decimal +000D5Fr 1 00 01 02 03 .byt 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 000D63r 1 04 05 06 07 000D67r 1 08 09 0A 0B -000D6Fr 1 10 11 12 13 .byt 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +000D6Fr 1 10 11 12 13 .byt 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 000D73r 1 14 15 16 17 000D77r 1 18 19 1A 1B -000D7Fr 1 20 21 22 23 .byt 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 +000D7Fr 1 20 21 22 23 .byt 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 000D83r 1 24 25 26 27 000D87r 1 28 29 2A 2B -000D8Fr 1 30 31 32 33 .byt 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 +000D8Fr 1 30 31 32 33 .byt 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 000D93r 1 34 35 36 37 000D97r 1 38 39 3A 3B -000D9Fr 1 40 41 42 43 .byt 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 +000D9Fr 1 40 41 42 43 .byt 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 000DA3r 1 44 45 46 47 000DA7r 1 48 49 4A 4B -000DAFr 1 50 51 52 53 .byt 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95 +000DAFr 1 50 51 52 53 .byt 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95 000DB3r 1 54 55 56 57 000DB7r 1 58 59 5A 5B -000DBFr 1 60 61 62 63 .byt 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 +000DBFr 1 60 61 62 63 .byt 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 000DC3r 1 64 65 66 67 000DC7r 1 68 69 6A 6B -000DCFr 1 70 71 72 73 .byt 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +000DCFr 1 70 71 72 73 .byt 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 000DD3r 1 74 75 76 77 000DD7r 1 78 79 7A 7B -000DDFr 1 80 81 82 83 .byt 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +000DDFr 1 80 81 82 83 .byt 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 000DE3r 1 84 85 86 87 000DE7r 1 88 89 8A 8B -000DEFr 1 90 91 92 93 .byt 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 +000DEFr 1 90 91 92 93 .byt 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 000DF3r 1 94 95 96 97 000DF7r 1 98 99 9A 9B -000DFFr 1 A0 A1 A2 A3 .byt 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 +000DFFr 1 A0 A1 A2 A3 .byt 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 000E03r 1 A4 A5 A6 A7 000E07r 1 A8 A9 AA AB -000E0Fr 1 B0 B1 B2 B3 .byt 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 +000E0Fr 1 B0 B1 B2 B3 .byt 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 000E13r 1 B4 B5 B6 B7 000E17r 1 B8 B9 BA BB -000E1Fr 1 C0 C1 C2 C3 .byt 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 +000E1Fr 1 C0 C1 C2 C3 .byt 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 000E23r 1 C4 C5 C6 C7 000E27r 1 C8 C9 CA CB -000E2Fr 1 D0 D1 D2 D3 .byt 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 +000E2Fr 1 D0 D1 D2 D3 .byt 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 000E33r 1 D4 D5 D6 D7 000E37r 1 D8 D9 DA DB -000E3Fr 1 E0 E1 E2 E3 .byt 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 +000E3Fr 1 E0 E1 E2 E3 .byt 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 000E43r 1 E4 E5 E6 E7 000E47r 1 E8 E9 EA EB -000E4Fr 1 F0 F1 F2 F3 .byt 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +000E4Fr 1 F0 F1 F2 F3 .byt 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 000E53r 1 F4 F5 F6 F7 000E57r 1 F8 F9 FA FB 000E5Fr 1 -000E5Fr 1 ; multiple values on one line, hex -000E5Fr 1 00 01 02 03 .byt $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +000E5Fr 1 ; multiple values on one line, hex +000E5Fr 1 00 01 02 03 .byt $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f 000E63r 1 04 05 06 07 000E67r 1 08 09 0A 0B -000E6Fr 1 10 11 12 13 .byt $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +000E6Fr 1 10 11 12 13 .byt $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f 000E73r 1 14 15 16 17 000E77r 1 18 19 1A 1B -000E7Fr 1 20 21 22 23 .byt $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f +000E7Fr 1 20 21 22 23 .byt $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f 000E83r 1 24 25 26 27 000E87r 1 28 29 2A 2B -000E8Fr 1 30 31 32 33 .byt $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f +000E8Fr 1 30 31 32 33 .byt $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f 000E93r 1 34 35 36 37 000E97r 1 38 39 3A 3B -000E9Fr 1 40 41 42 43 .byt $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f +000E9Fr 1 40 41 42 43 .byt $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f 000EA3r 1 44 45 46 47 000EA7r 1 48 49 4A 4B -000EAFr 1 50 51 52 53 .byt $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$5b,$5c,$5d,$5e,$5f +000EAFr 1 50 51 52 53 .byt $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$5b,$5c,$5d,$5e,$5f 000EB3r 1 54 55 56 57 000EB7r 1 58 59 5A 5B -000EBFr 1 60 61 62 63 .byt $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f +000EBFr 1 60 61 62 63 .byt $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f 000EC3r 1 64 65 66 67 000EC7r 1 68 69 6A 6B -000ECFr 1 70 71 72 73 .byt $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +000ECFr 1 70 71 72 73 .byt $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f 000ED3r 1 74 75 76 77 000ED7r 1 78 79 7A 7B -000EDFr 1 80 81 82 83 .byt $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +000EDFr 1 80 81 82 83 .byt $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f 000EE3r 1 84 85 86 87 000EE7r 1 88 89 8A 8B -000EEFr 1 90 91 92 93 .byt $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f +000EEFr 1 90 91 92 93 .byt $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f 000EF3r 1 94 95 96 97 000EF7r 1 98 99 9A 9B -000EFFr 1 A0 A1 A2 A3 .byt $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af +000EFFr 1 A0 A1 A2 A3 .byt $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af 000F03r 1 A4 A5 A6 A7 000F07r 1 A8 A9 AA AB -000F0Fr 1 B0 B1 B2 B3 .byt $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf +000F0Fr 1 B0 B1 B2 B3 .byt $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf 000F13r 1 B4 B5 B6 B7 000F17r 1 B8 B9 BA BB -000F1Fr 1 C0 C1 C2 C3 .byt $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf +000F1Fr 1 C0 C1 C2 C3 .byt $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf 000F23r 1 C4 C5 C6 C7 000F27r 1 C8 C9 CA CB -000F2Fr 1 D0 D1 D2 D3 .byt $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df +000F2Fr 1 D0 D1 D2 D3 .byt $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df 000F33r 1 D4 D5 D6 D7 000F37r 1 D8 D9 DA DB -000F3Fr 1 E0 E1 E2 E3 .byt $e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef +000F3Fr 1 E0 E1 E2 E3 .byt $e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef 000F43r 1 E4 E5 E6 E7 000F47r 1 E8 E9 EA EB -000F4Fr 1 F0 F1 F2 F3 .byt $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +000F4Fr 1 F0 F1 F2 F3 .byt $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff 000F53r 1 F4 F5 F6 F7 000F57r 1 F8 F9 FA FB 000F5Fr 1 -000F5Fr 1 ; multiple values on one line, alternative hex -000F5Fr 1 00 01 02 03 .byt 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +000F5Fr 1 ; multiple values on one line, alternative hex +000F5Fr 1 00 01 02 03 .byt 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh 000F63r 1 04 05 06 07 000F67r 1 08 09 0A 0B -000F6Fr 1 10 11 12 13 .byt 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +000F6Fr 1 10 11 12 13 .byt 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh 000F73r 1 14 15 16 17 000F77r 1 18 19 1A 1B -000F7Fr 1 20 21 22 23 .byt 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,2ah,2bh,2ch,2dh,2eh,2fh +000F7Fr 1 20 21 22 23 .byt 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,2ah,2bh,2ch,2dh,2eh,2fh 000F83r 1 24 25 26 27 000F87r 1 28 29 2A 2B -000F8Fr 1 30 31 32 33 .byt 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,3ah,3bh,3ch,3dh,3eh,3fh +000F8Fr 1 30 31 32 33 .byt 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,3ah,3bh,3ch,3dh,3eh,3fh 000F93r 1 34 35 36 37 000F97r 1 38 39 3A 3B -000F9Fr 1 40 41 42 43 .byt 40h,41h,42h,43h,44h,45h,46h,47h,48h,49h,4ah,4bh,4ch,4dh,4eh,4fh +000F9Fr 1 40 41 42 43 .byt 40h,41h,42h,43h,44h,45h,46h,47h,48h,49h,4ah,4bh,4ch,4dh,4eh,4fh 000FA3r 1 44 45 46 47 000FA7r 1 48 49 4A 4B -000FAFr 1 50 51 52 53 .byt 50h,51h,52h,53h,54h,55h,56h,57h,58h,59h,5ah,5bh,5ch,5dh,5eh,5fh +000FAFr 1 50 51 52 53 .byt 50h,51h,52h,53h,54h,55h,56h,57h,58h,59h,5ah,5bh,5ch,5dh,5eh,5fh 000FB3r 1 54 55 56 57 000FB7r 1 58 59 5A 5B -000FBFr 1 60 61 62 63 .byt 60h,61h,62h,63h,64h,65h,66h,67h,68h,69h,6ah,6bh,6ch,6dh,6eh,6fh +000FBFr 1 60 61 62 63 .byt 60h,61h,62h,63h,64h,65h,66h,67h,68h,69h,6ah,6bh,6ch,6dh,6eh,6fh 000FC3r 1 64 65 66 67 000FC7r 1 68 69 6A 6B -000FCFr 1 70 71 72 73 .byt 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +000FCFr 1 70 71 72 73 .byt 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh 000FD3r 1 74 75 76 77 000FD7r 1 78 79 7A 7B -000FDFr 1 80 81 82 83 .byt 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +000FDFr 1 80 81 82 83 .byt 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh 000FE3r 1 84 85 86 87 000FE7r 1 88 89 8A 8B -000FEFr 1 90 91 92 93 .byt 90h,91h,92h,93h,94h,95h,96h,97h,98h,99h,9ah,9bh,9ch,9dh,9eh,9fh +000FEFr 1 90 91 92 93 .byt 90h,91h,92h,93h,94h,95h,96h,97h,98h,99h,9ah,9bh,9ch,9dh,9eh,9fh 000FF3r 1 94 95 96 97 000FF7r 1 98 99 9A 9B -000FFFr 1 A0 A1 A2 A3 .byt 0a0h,0a1h,0a2h,0a3h,0a4h,0a5h,0a6h,0a7h,0a8h,0a9h,0aah,0abh,0ach,0adh,0aeh,0afh +000FFFr 1 A0 A1 A2 A3 .byt 0a0h,0a1h,0a2h,0a3h,0a4h,0a5h,0a6h,0a7h,0a8h,0a9h,0aah,0abh,0ach,0adh,0aeh,0afh 001003r 1 A4 A5 A6 A7 001007r 1 A8 A9 AA AB -00100Fr 1 B0 B1 B2 B3 .byt 0b0h,0b1h,0b2h,0b3h,0b4h,0b5h,0b6h,0b7h,0b8h,0b9h,0bah,0bbh,0bch,0bdh,0beh,0bfh +00100Fr 1 B0 B1 B2 B3 .byt 0b0h,0b1h,0b2h,0b3h,0b4h,0b5h,0b6h,0b7h,0b8h,0b9h,0bah,0bbh,0bch,0bdh,0beh,0bfh 001013r 1 B4 B5 B6 B7 001017r 1 B8 B9 BA BB -00101Fr 1 C0 C1 C2 C3 .byt 0c0h,0c1h,0c2h,0c3h,0c4h,0c5h,0c6h,0c7h,0c8h,0c9h,0cah,0cbh,0cch,0cdh,0ceh,0cfh +00101Fr 1 C0 C1 C2 C3 .byt 0c0h,0c1h,0c2h,0c3h,0c4h,0c5h,0c6h,0c7h,0c8h,0c9h,0cah,0cbh,0cch,0cdh,0ceh,0cfh 001023r 1 C4 C5 C6 C7 001027r 1 C8 C9 CA CB -00102Fr 1 D0 D1 D2 D3 .byt 0d0h,0d1h,0d2h,0d3h,0d4h,0d5h,0d6h,0d7h,0d8h,0d9h,0dah,0dbh,0dch,0ddh,0deh,0dfh +00102Fr 1 D0 D1 D2 D3 .byt 0d0h,0d1h,0d2h,0d3h,0d4h,0d5h,0d6h,0d7h,0d8h,0d9h,0dah,0dbh,0dch,0ddh,0deh,0dfh 001033r 1 D4 D5 D6 D7 001037r 1 D8 D9 DA DB -00103Fr 1 E0 E1 E2 E3 .byt 0e0h,0e1h,0e2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0e9h,0eah,0ebh,0ech,0edh,0eeh,0efh +00103Fr 1 E0 E1 E2 E3 .byt 0e0h,0e1h,0e2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0e9h,0eah,0ebh,0ech,0edh,0eeh,0efh 001043r 1 E4 E5 E6 E7 001047r 1 E8 E9 EA EB -00104Fr 1 F0 F1 F2 F3 .byt 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +00104Fr 1 F0 F1 F2 F3 .byt 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh 001053r 1 F4 F5 F6 F7 001057r 1 F8 F9 FA FB 00105Fr 1 -00105Fr 1 ; multiple values on one line, characters -00105Fr 1 20 21 22 23 .byt ' ','!','"','#','$','%','&',''','(',')','*','+',',','-','.','/' +00105Fr 1 ; multiple values on one line, characters +00105Fr 1 20 21 22 23 .byt ' ','!','"','#','$','%','&',''','(',')','*','+',',','-','.','/' 001063r 1 24 25 26 27 001067r 1 28 29 2A 2B -00106Fr 1 30 31 32 33 .byt '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?' +00106Fr 1 30 31 32 33 .byt '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?' 001073r 1 34 35 36 37 001077r 1 38 39 3A 3B -00107Fr 1 40 41 42 43 .byt '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O' +00107Fr 1 40 41 42 43 .byt '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O' 001083r 1 44 45 46 47 001087r 1 48 49 4A 4B -00108Fr 1 50 51 52 53 .byt 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_' +00108Fr 1 50 51 52 53 .byt 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_' 001093r 1 54 55 56 57 001097r 1 58 59 5A 5B -00109Fr 1 60 61 62 63 .byt '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o' +00109Fr 1 60 61 62 63 .byt '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o' 0010A3r 1 64 65 66 67 0010A7r 1 68 69 6A 6B -0010AFr 1 70 71 72 73 .byt 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~' +0010AFr 1 70 71 72 73 .byt 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~' 0010B3r 1 74 75 76 77 0010B7r 1 78 79 7A 7B 0010BEr 1 -0010BEr 1 ; some character strings -0010BEr 1 20 21 23 24 .byt " !#$%&'()*+,-." +0010BEr 1 ; some character strings +0010BEr 1 20 21 23 24 .byt " !#$%&'()*+,-." 0010C2r 1 25 26 27 28 0010C6r 1 29 2A 2B 2C -0010CCr 1 30 31 32 33 .byt "0123456789:;<=>" +0010CCr 1 30 31 32 33 .byt "0123456789:;<=>" 0010D0r 1 34 35 36 37 0010D4r 1 38 39 3A 3B -0010DBr 1 40 41 42 43 .byt "@ABCDEFGHIJKLMN" +0010DBr 1 40 41 42 43 .byt "@ABCDEFGHIJKLMN" 0010DFr 1 44 45 46 47 0010E3r 1 48 49 4A 4B -0010EAr 1 50 51 52 53 .byt "PQRSTUVWXYZ[\]^" +0010EAr 1 50 51 52 53 .byt "PQRSTUVWXYZ[\]^" 0010EEr 1 54 55 56 57 0010F2r 1 58 59 5A 5B -0010F9r 1 60 61 62 63 .byt "`abcdefghijklmn" +0010F9r 1 60 61 62 63 .byt "`abcdefghijklmn" 0010FDr 1 64 65 66 67 001101r 1 68 69 6A 6B -001108r 1 70 71 72 73 .byt "pqrstuvwxyz{|}" +001108r 1 70 71 72 73 .byt "pqrstuvwxyz{|}" 00110Cr 1 74 75 76 77 001110r 1 78 79 7A 7B 001116r 1 -001116r 1 ; mix some variants -001116r 1 0B 11 03 11 .byt 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +001116r 1 ; mix some variants +001116r 1 0B 11 03 11 .byt 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh 00111Ar 1 61 62 7A 41 00111Er 1 5A 30 39 AA 001125r 1 diff --git a/test/asm/listing/101-byt.s b/test/asm/listing/101-byt.s index a27334eef..45fac7442 100644 --- a/test/asm/listing/101-byt.s +++ b/test/asm/listing/101-byt.s @@ -1,3526 +1,3526 @@ ; 2022-06-15 Spiro Trikaliotis - ; upper case pseudo-op - .BYT 0 - .BYT 1 - .BYT 2 - .BYT 3 - .BYT 4 - .BYT 5 - .BYT 6 - .BYT 7 - .BYT 8 - .BYT 9 - .BYT 10 - .BYT 11 - .BYT 12 - .BYT 13 - .BYT 14 - .BYT 15 - .BYT 16 - .BYT 17 - .BYT 18 - .BYT 19 - .BYT 20 - .BYT 21 - .BYT 22 - .BYT 23 - .BYT 24 - .BYT 25 - .BYT 26 - .BYT 27 - .BYT 28 - .BYT 29 - .BYT 30 - .BYT 31 - .BYT 32 - .BYT 33 - .BYT 34 - .BYT 35 - .BYT 36 - .BYT 37 - .BYT 38 - .BYT 39 - .BYT 40 - .BYT 41 - .BYT 42 - .BYT 43 - .BYT 44 - .BYT 45 - .BYT 46 - .BYT 47 - .BYT 48 - .BYT 49 - .BYT 50 - .BYT 51 - .BYT 52 - .BYT 53 - .BYT 54 - .BYT 55 - .BYT 56 - .BYT 57 - .BYT 58 - .BYT 59 - .BYT 60 - .BYT 61 - .BYT 62 - .BYT 63 - .BYT 64 - .BYT 65 - .BYT 66 - .BYT 67 - .BYT 68 - .BYT 69 - .BYT 70 - .BYT 71 - .BYT 72 - .BYT 73 - .BYT 74 - .BYT 75 - .BYT 76 - .BYT 77 - .BYT 78 - .BYT 79 - .BYT 80 - .BYT 81 - .BYT 82 - .BYT 83 - .BYT 84 - .BYT 85 - .BYT 86 - .BYT 87 - .BYT 88 - .BYT 89 - .BYT 90 - .BYT 91 - .BYT 92 - .BYT 93 - .BYT 94 - .BYT 95 - .BYT 96 - .BYT 97 - .BYT 98 - .BYT 99 - .BYT 100 - .BYT 101 - .BYT 102 - .BYT 103 - .BYT 104 - .BYT 105 - .BYT 106 - .BYT 107 - .BYT 108 - .BYT 109 - .BYT 110 - .BYT 111 - .BYT 112 - .BYT 113 - .BYT 114 - .BYT 115 - .BYT 116 - .BYT 117 - .BYT 118 - .BYT 119 - .BYT 120 - .BYT 121 - .BYT 122 - .BYT 123 - .BYT 124 - .BYT 125 - .BYT 126 - .BYT 127 - .BYT 128 - .BYT 129 - .BYT 130 - .BYT 131 - .BYT 132 - .BYT 133 - .BYT 134 - .BYT 135 - .BYT 136 - .BYT 137 - .BYT 138 - .BYT 139 - .BYT 140 - .BYT 141 - .BYT 142 - .BYT 143 - .BYT 144 - .BYT 145 - .BYT 146 - .BYT 147 - .BYT 148 - .BYT 149 - .BYT 150 - .BYT 151 - .BYT 152 - .BYT 153 - .BYT 154 - .BYT 155 - .BYT 156 - .BYT 157 - .BYT 158 - .BYT 159 - .BYT 160 - .BYT 161 - .BYT 162 - .BYT 163 - .BYT 164 - .BYT 165 - .BYT 166 - .BYT 167 - .BYT 168 - .BYT 169 - .BYT 170 - .BYT 171 - .BYT 172 - .BYT 173 - .BYT 174 - .BYT 175 - .BYT 176 - .BYT 177 - .BYT 178 - .BYT 179 - .BYT 180 - .BYT 181 - .BYT 182 - .BYT 183 - .BYT 184 - .BYT 185 - .BYT 186 - .BYT 187 - .BYT 188 - .BYT 189 - .BYT 190 - .BYT 191 - .BYT 192 - .BYT 193 - .BYT 194 - .BYT 195 - .BYT 196 - .BYT 197 - .BYT 198 - .BYT 199 - .BYT 200 - .BYT 201 - .BYT 202 - .BYT 203 - .BYT 204 - .BYT 205 - .BYT 206 - .BYT 207 - .BYT 208 - .BYT 209 - .BYT 210 - .BYT 211 - .BYT 212 - .BYT 213 - .BYT 214 - .BYT 215 - .BYT 216 - .BYT 217 - .BYT 218 - .BYT 219 - .BYT 220 - .BYT 221 - .BYT 222 - .BYT 223 - .BYT 224 - .BYT 225 - .BYT 226 - .BYT 227 - .BYT 228 - .BYT 229 - .BYT 230 - .BYT 231 - .BYT 232 - .BYT 233 - .BYT 234 - .BYT 235 - .BYT 236 - .BYT 237 - .BYT 238 - .BYT 239 - .BYT 240 - .BYT 241 - .BYT 242 - .BYT 243 - .BYT 244 - .BYT 245 - .BYT 246 - .BYT 247 - .BYT 248 - .BYT 249 - .BYT 250 - .BYT 251 - .BYT 252 - .BYT 253 - .BYT 254 - .BYT 255 + ; upper case pseudo-op + .BYT 0 + .BYT 1 + .BYT 2 + .BYT 3 + .BYT 4 + .BYT 5 + .BYT 6 + .BYT 7 + .BYT 8 + .BYT 9 + .BYT 10 + .BYT 11 + .BYT 12 + .BYT 13 + .BYT 14 + .BYT 15 + .BYT 16 + .BYT 17 + .BYT 18 + .BYT 19 + .BYT 20 + .BYT 21 + .BYT 22 + .BYT 23 + .BYT 24 + .BYT 25 + .BYT 26 + .BYT 27 + .BYT 28 + .BYT 29 + .BYT 30 + .BYT 31 + .BYT 32 + .BYT 33 + .BYT 34 + .BYT 35 + .BYT 36 + .BYT 37 + .BYT 38 + .BYT 39 + .BYT 40 + .BYT 41 + .BYT 42 + .BYT 43 + .BYT 44 + .BYT 45 + .BYT 46 + .BYT 47 + .BYT 48 + .BYT 49 + .BYT 50 + .BYT 51 + .BYT 52 + .BYT 53 + .BYT 54 + .BYT 55 + .BYT 56 + .BYT 57 + .BYT 58 + .BYT 59 + .BYT 60 + .BYT 61 + .BYT 62 + .BYT 63 + .BYT 64 + .BYT 65 + .BYT 66 + .BYT 67 + .BYT 68 + .BYT 69 + .BYT 70 + .BYT 71 + .BYT 72 + .BYT 73 + .BYT 74 + .BYT 75 + .BYT 76 + .BYT 77 + .BYT 78 + .BYT 79 + .BYT 80 + .BYT 81 + .BYT 82 + .BYT 83 + .BYT 84 + .BYT 85 + .BYT 86 + .BYT 87 + .BYT 88 + .BYT 89 + .BYT 90 + .BYT 91 + .BYT 92 + .BYT 93 + .BYT 94 + .BYT 95 + .BYT 96 + .BYT 97 + .BYT 98 + .BYT 99 + .BYT 100 + .BYT 101 + .BYT 102 + .BYT 103 + .BYT 104 + .BYT 105 + .BYT 106 + .BYT 107 + .BYT 108 + .BYT 109 + .BYT 110 + .BYT 111 + .BYT 112 + .BYT 113 + .BYT 114 + .BYT 115 + .BYT 116 + .BYT 117 + .BYT 118 + .BYT 119 + .BYT 120 + .BYT 121 + .BYT 122 + .BYT 123 + .BYT 124 + .BYT 125 + .BYT 126 + .BYT 127 + .BYT 128 + .BYT 129 + .BYT 130 + .BYT 131 + .BYT 132 + .BYT 133 + .BYT 134 + .BYT 135 + .BYT 136 + .BYT 137 + .BYT 138 + .BYT 139 + .BYT 140 + .BYT 141 + .BYT 142 + .BYT 143 + .BYT 144 + .BYT 145 + .BYT 146 + .BYT 147 + .BYT 148 + .BYT 149 + .BYT 150 + .BYT 151 + .BYT 152 + .BYT 153 + .BYT 154 + .BYT 155 + .BYT 156 + .BYT 157 + .BYT 158 + .BYT 159 + .BYT 160 + .BYT 161 + .BYT 162 + .BYT 163 + .BYT 164 + .BYT 165 + .BYT 166 + .BYT 167 + .BYT 168 + .BYT 169 + .BYT 170 + .BYT 171 + .BYT 172 + .BYT 173 + .BYT 174 + .BYT 175 + .BYT 176 + .BYT 177 + .BYT 178 + .BYT 179 + .BYT 180 + .BYT 181 + .BYT 182 + .BYT 183 + .BYT 184 + .BYT 185 + .BYT 186 + .BYT 187 + .BYT 188 + .BYT 189 + .BYT 190 + .BYT 191 + .BYT 192 + .BYT 193 + .BYT 194 + .BYT 195 + .BYT 196 + .BYT 197 + .BYT 198 + .BYT 199 + .BYT 200 + .BYT 201 + .BYT 202 + .BYT 203 + .BYT 204 + .BYT 205 + .BYT 206 + .BYT 207 + .BYT 208 + .BYT 209 + .BYT 210 + .BYT 211 + .BYT 212 + .BYT 213 + .BYT 214 + .BYT 215 + .BYT 216 + .BYT 217 + .BYT 218 + .BYT 219 + .BYT 220 + .BYT 221 + .BYT 222 + .BYT 223 + .BYT 224 + .BYT 225 + .BYT 226 + .BYT 227 + .BYT 228 + .BYT 229 + .BYT 230 + .BYT 231 + .BYT 232 + .BYT 233 + .BYT 234 + .BYT 235 + .BYT 236 + .BYT 237 + .BYT 238 + .BYT 239 + .BYT 240 + .BYT 241 + .BYT 242 + .BYT 243 + .BYT 244 + .BYT 245 + .BYT 246 + .BYT 247 + .BYT 248 + .BYT 249 + .BYT 250 + .BYT 251 + .BYT 252 + .BYT 253 + .BYT 254 + .BYT 255 - ; lower case pseudo-op - .byt 0 - .byt 1 - .byt 2 - .byt 3 - .byt 4 - .byt 5 - .byt 6 - .byt 7 - .byt 8 - .byt 9 - .byt 10 - .byt 11 - .byt 12 - .byt 13 - .byt 14 - .byt 15 - .byt 16 - .byt 17 - .byt 18 - .byt 19 - .byt 20 - .byt 21 - .byt 22 - .byt 23 - .byt 24 - .byt 25 - .byt 26 - .byt 27 - .byt 28 - .byt 29 - .byt 30 - .byt 31 - .byt 32 - .byt 33 - .byt 34 - .byt 35 - .byt 36 - .byt 37 - .byt 38 - .byt 39 - .byt 40 - .byt 41 - .byt 42 - .byt 43 - .byt 44 - .byt 45 - .byt 46 - .byt 47 - .byt 48 - .byt 49 - .byt 50 - .byt 51 - .byt 52 - .byt 53 - .byt 54 - .byt 55 - .byt 56 - .byt 57 - .byt 58 - .byt 59 - .byt 60 - .byt 61 - .byt 62 - .byt 63 - .byt 64 - .byt 65 - .byt 66 - .byt 67 - .byt 68 - .byt 69 - .byt 70 - .byt 71 - .byt 72 - .byt 73 - .byt 74 - .byt 75 - .byt 76 - .byt 77 - .byt 78 - .byt 79 - .byt 80 - .byt 81 - .byt 82 - .byt 83 - .byt 84 - .byt 85 - .byt 86 - .byt 87 - .byt 88 - .byt 89 - .byt 90 - .byt 91 - .byt 92 - .byt 93 - .byt 94 - .byt 95 - .byt 96 - .byt 97 - .byt 98 - .byt 99 - .byt 100 - .byt 101 - .byt 102 - .byt 103 - .byt 104 - .byt 105 - .byt 106 - .byt 107 - .byt 108 - .byt 109 - .byt 110 - .byt 111 - .byt 112 - .byt 113 - .byt 114 - .byt 115 - .byt 116 - .byt 117 - .byt 118 - .byt 119 - .byt 120 - .byt 121 - .byt 122 - .byt 123 - .byt 124 - .byt 125 - .byt 126 - .byt 127 - .byt 128 - .byt 129 - .byt 130 - .byt 131 - .byt 132 - .byt 133 - .byt 134 - .byt 135 - .byt 136 - .byt 137 - .byt 138 - .byt 139 - .byt 140 - .byt 141 - .byt 142 - .byt 143 - .byt 144 - .byt 145 - .byt 146 - .byt 147 - .byt 148 - .byt 149 - .byt 150 - .byt 151 - .byt 152 - .byt 153 - .byt 154 - .byt 155 - .byt 156 - .byt 157 - .byt 158 - .byt 159 - .byt 160 - .byt 161 - .byt 162 - .byt 163 - .byt 164 - .byt 165 - .byt 166 - .byt 167 - .byt 168 - .byt 169 - .byt 170 - .byt 171 - .byt 172 - .byt 173 - .byt 174 - .byt 175 - .byt 176 - .byt 177 - .byt 178 - .byt 179 - .byt 180 - .byt 181 - .byt 182 - .byt 183 - .byt 184 - .byt 185 - .byt 186 - .byt 187 - .byt 188 - .byt 189 - .byt 190 - .byt 191 - .byt 192 - .byt 193 - .byt 194 - .byt 195 - .byt 196 - .byt 197 - .byt 198 - .byt 199 - .byt 200 - .byt 201 - .byt 202 - .byt 203 - .byt 204 - .byt 205 - .byt 206 - .byt 207 - .byt 208 - .byt 209 - .byt 210 - .byt 211 - .byt 212 - .byt 213 - .byt 214 - .byt 215 - .byt 216 - .byt 217 - .byt 218 - .byt 219 - .byt 220 - .byt 221 - .byt 222 - .byt 223 - .byt 224 - .byt 225 - .byt 226 - .byt 227 - .byt 228 - .byt 229 - .byt 230 - .byt 231 - .byt 232 - .byt 233 - .byt 234 - .byt 235 - .byt 236 - .byt 237 - .byt 238 - .byt 239 - .byt 240 - .byt 241 - .byt 242 - .byt 243 - .byt 244 - .byt 245 - .byt 246 - .byt 247 - .byt 248 - .byt 249 - .byt 250 - .byt 251 - .byt 252 - .byt 253 - .byt 254 - .byt 255 + ; lower case pseudo-op + .byt 0 + .byt 1 + .byt 2 + .byt 3 + .byt 4 + .byt 5 + .byt 6 + .byt 7 + .byt 8 + .byt 9 + .byt 10 + .byt 11 + .byt 12 + .byt 13 + .byt 14 + .byt 15 + .byt 16 + .byt 17 + .byt 18 + .byt 19 + .byt 20 + .byt 21 + .byt 22 + .byt 23 + .byt 24 + .byt 25 + .byt 26 + .byt 27 + .byt 28 + .byt 29 + .byt 30 + .byt 31 + .byt 32 + .byt 33 + .byt 34 + .byt 35 + .byt 36 + .byt 37 + .byt 38 + .byt 39 + .byt 40 + .byt 41 + .byt 42 + .byt 43 + .byt 44 + .byt 45 + .byt 46 + .byt 47 + .byt 48 + .byt 49 + .byt 50 + .byt 51 + .byt 52 + .byt 53 + .byt 54 + .byt 55 + .byt 56 + .byt 57 + .byt 58 + .byt 59 + .byt 60 + .byt 61 + .byt 62 + .byt 63 + .byt 64 + .byt 65 + .byt 66 + .byt 67 + .byt 68 + .byt 69 + .byt 70 + .byt 71 + .byt 72 + .byt 73 + .byt 74 + .byt 75 + .byt 76 + .byt 77 + .byt 78 + .byt 79 + .byt 80 + .byt 81 + .byt 82 + .byt 83 + .byt 84 + .byt 85 + .byt 86 + .byt 87 + .byt 88 + .byt 89 + .byt 90 + .byt 91 + .byt 92 + .byt 93 + .byt 94 + .byt 95 + .byt 96 + .byt 97 + .byt 98 + .byt 99 + .byt 100 + .byt 101 + .byt 102 + .byt 103 + .byt 104 + .byt 105 + .byt 106 + .byt 107 + .byt 108 + .byt 109 + .byt 110 + .byt 111 + .byt 112 + .byt 113 + .byt 114 + .byt 115 + .byt 116 + .byt 117 + .byt 118 + .byt 119 + .byt 120 + .byt 121 + .byt 122 + .byt 123 + .byt 124 + .byt 125 + .byt 126 + .byt 127 + .byt 128 + .byt 129 + .byt 130 + .byt 131 + .byt 132 + .byt 133 + .byt 134 + .byt 135 + .byt 136 + .byt 137 + .byt 138 + .byt 139 + .byt 140 + .byt 141 + .byt 142 + .byt 143 + .byt 144 + .byt 145 + .byt 146 + .byt 147 + .byt 148 + .byt 149 + .byt 150 + .byt 151 + .byt 152 + .byt 153 + .byt 154 + .byt 155 + .byt 156 + .byt 157 + .byt 158 + .byt 159 + .byt 160 + .byt 161 + .byt 162 + .byt 163 + .byt 164 + .byt 165 + .byt 166 + .byt 167 + .byt 168 + .byt 169 + .byt 170 + .byt 171 + .byt 172 + .byt 173 + .byt 174 + .byt 175 + .byt 176 + .byt 177 + .byt 178 + .byt 179 + .byt 180 + .byt 181 + .byt 182 + .byt 183 + .byt 184 + .byt 185 + .byt 186 + .byt 187 + .byt 188 + .byt 189 + .byt 190 + .byt 191 + .byt 192 + .byt 193 + .byt 194 + .byt 195 + .byt 196 + .byt 197 + .byt 198 + .byt 199 + .byt 200 + .byt 201 + .byt 202 + .byt 203 + .byt 204 + .byt 205 + .byt 206 + .byt 207 + .byt 208 + .byt 209 + .byt 210 + .byt 211 + .byt 212 + .byt 213 + .byt 214 + .byt 215 + .byt 216 + .byt 217 + .byt 218 + .byt 219 + .byt 220 + .byt 221 + .byt 222 + .byt 223 + .byt 224 + .byt 225 + .byt 226 + .byt 227 + .byt 228 + .byt 229 + .byt 230 + .byt 231 + .byt 232 + .byt 233 + .byt 234 + .byt 235 + .byt 236 + .byt 237 + .byt 238 + .byt 239 + .byt 240 + .byt 241 + .byt 242 + .byt 243 + .byt 244 + .byt 245 + .byt 246 + .byt 247 + .byt 248 + .byt 249 + .byt 250 + .byt 251 + .byt 252 + .byt 253 + .byt 254 + .byt 255 - ; hex values - .byt $0 - .byt $1 - .byt $2 - .byt $3 - .byt $4 - .byt $5 - .byt $6 - .byt $7 - .byt $8 - .byt $9 - .byt $a - .byt $b - .byt $c - .byt $d - .byt $e - .byt $f - .byt $10 - .byt $11 - .byt $12 - .byt $13 - .byt $14 - .byt $15 - .byt $16 - .byt $17 - .byt $18 - .byt $19 - .byt $1a - .byt $1b - .byt $1c - .byt $1d - .byt $1e - .byt $1f - .byt $20 - .byt $21 - .byt $22 - .byt $23 - .byt $24 - .byt $25 - .byt $26 - .byt $27 - .byt $28 - .byt $29 - .byt $2a - .byt $2b - .byt $2c - .byt $2d - .byt $2e - .byt $2f - .byt $30 - .byt $31 - .byt $32 - .byt $33 - .byt $34 - .byt $35 - .byt $36 - .byt $37 - .byt $38 - .byt $39 - .byt $3a - .byt $3b - .byt $3c - .byt $3d - .byt $3e - .byt $3f - .byt $40 - .byt $41 - .byt $42 - .byt $43 - .byt $44 - .byt $45 - .byt $46 - .byt $47 - .byt $48 - .byt $49 - .byt $4a - .byt $4b - .byt $4c - .byt $4d - .byt $4e - .byt $4f - .byt $50 - .byt $51 - .byt $52 - .byt $53 - .byt $54 - .byt $55 - .byt $56 - .byt $57 - .byt $58 - .byt $59 - .byt $5a - .byt $5b - .byt $5c - .byt $5d - .byt $5e - .byt $5f - .byt $60 - .byt $61 - .byt $62 - .byt $63 - .byt $64 - .byt $65 - .byt $66 - .byt $67 - .byt $68 - .byt $69 - .byt $6a - .byt $6b - .byt $6c - .byt $6d - .byt $6e - .byt $6f - .byt $70 - .byt $71 - .byt $72 - .byt $73 - .byt $74 - .byt $75 - .byt $76 - .byt $77 - .byt $78 - .byt $79 - .byt $7a - .byt $7b - .byt $7c - .byt $7d - .byt $7e - .byt $7f - .byt $80 - .byt $81 - .byt $82 - .byt $83 - .byt $84 - .byt $85 - .byt $86 - .byt $87 - .byt $88 - .byt $89 - .byt $8a - .byt $8b - .byt $8c - .byt $8d - .byt $8e - .byt $8f - .byt $90 - .byt $91 - .byt $92 - .byt $93 - .byt $94 - .byt $95 - .byt $96 - .byt $97 - .byt $98 - .byt $99 - .byt $9a - .byt $9b - .byt $9c - .byt $9d - .byt $9e - .byt $9f - .byt $a0 - .byt $a1 - .byt $a2 - .byt $a3 - .byt $a4 - .byt $a5 - .byt $a6 - .byt $a7 - .byt $a8 - .byt $a9 - .byt $aa - .byt $ab - .byt $ac - .byt $ad - .byt $ae - .byt $af - .byt $b0 - .byt $b1 - .byt $b2 - .byt $b3 - .byt $b4 - .byt $b5 - .byt $b6 - .byt $b7 - .byt $b8 - .byt $b9 - .byt $ba - .byt $bb - .byt $bc - .byt $bd - .byt $be - .byt $bf - .byt $c0 - .byt $c1 - .byt $c2 - .byt $c3 - .byt $c4 - .byt $c5 - .byt $c6 - .byt $c7 - .byt $c8 - .byt $c9 - .byt $ca - .byt $cb - .byt $cc - .byt $cd - .byt $ce - .byt $cf - .byt $d0 - .byt $d1 - .byt $d2 - .byt $d3 - .byt $d4 - .byt $d5 - .byt $d6 - .byt $d7 - .byt $d8 - .byt $d9 - .byt $da - .byt $db - .byt $dc - .byt $dd - .byt $de - .byt $df - .byt $e0 - .byt $e1 - .byt $e2 - .byt $e3 - .byt $e4 - .byt $e5 - .byt $e6 - .byt $e7 - .byt $e8 - .byt $e9 - .byt $ea - .byt $eb - .byt $ec - .byt $ed - .byt $ee - .byt $ef - .byt $f0 - .byt $f1 - .byt $f2 - .byt $f3 - .byt $f4 - .byt $f5 - .byt $f6 - .byt $f7 - .byt $f8 - .byt $f9 - .byt $fa - .byt $fb - .byt $fc - .byt $fd - .byt $fe - .byt $ff + ; hex values + .byt $0 + .byt $1 + .byt $2 + .byt $3 + .byt $4 + .byt $5 + .byt $6 + .byt $7 + .byt $8 + .byt $9 + .byt $a + .byt $b + .byt $c + .byt $d + .byt $e + .byt $f + .byt $10 + .byt $11 + .byt $12 + .byt $13 + .byt $14 + .byt $15 + .byt $16 + .byt $17 + .byt $18 + .byt $19 + .byt $1a + .byt $1b + .byt $1c + .byt $1d + .byt $1e + .byt $1f + .byt $20 + .byt $21 + .byt $22 + .byt $23 + .byt $24 + .byt $25 + .byt $26 + .byt $27 + .byt $28 + .byt $29 + .byt $2a + .byt $2b + .byt $2c + .byt $2d + .byt $2e + .byt $2f + .byt $30 + .byt $31 + .byt $32 + .byt $33 + .byt $34 + .byt $35 + .byt $36 + .byt $37 + .byt $38 + .byt $39 + .byt $3a + .byt $3b + .byt $3c + .byt $3d + .byt $3e + .byt $3f + .byt $40 + .byt $41 + .byt $42 + .byt $43 + .byt $44 + .byt $45 + .byt $46 + .byt $47 + .byt $48 + .byt $49 + .byt $4a + .byt $4b + .byt $4c + .byt $4d + .byt $4e + .byt $4f + .byt $50 + .byt $51 + .byt $52 + .byt $53 + .byt $54 + .byt $55 + .byt $56 + .byt $57 + .byt $58 + .byt $59 + .byt $5a + .byt $5b + .byt $5c + .byt $5d + .byt $5e + .byt $5f + .byt $60 + .byt $61 + .byt $62 + .byt $63 + .byt $64 + .byt $65 + .byt $66 + .byt $67 + .byt $68 + .byt $69 + .byt $6a + .byt $6b + .byt $6c + .byt $6d + .byt $6e + .byt $6f + .byt $70 + .byt $71 + .byt $72 + .byt $73 + .byt $74 + .byt $75 + .byt $76 + .byt $77 + .byt $78 + .byt $79 + .byt $7a + .byt $7b + .byt $7c + .byt $7d + .byt $7e + .byt $7f + .byt $80 + .byt $81 + .byt $82 + .byt $83 + .byt $84 + .byt $85 + .byt $86 + .byt $87 + .byt $88 + .byt $89 + .byt $8a + .byt $8b + .byt $8c + .byt $8d + .byt $8e + .byt $8f + .byt $90 + .byt $91 + .byt $92 + .byt $93 + .byt $94 + .byt $95 + .byt $96 + .byt $97 + .byt $98 + .byt $99 + .byt $9a + .byt $9b + .byt $9c + .byt $9d + .byt $9e + .byt $9f + .byt $a0 + .byt $a1 + .byt $a2 + .byt $a3 + .byt $a4 + .byt $a5 + .byt $a6 + .byt $a7 + .byt $a8 + .byt $a9 + .byt $aa + .byt $ab + .byt $ac + .byt $ad + .byt $ae + .byt $af + .byt $b0 + .byt $b1 + .byt $b2 + .byt $b3 + .byt $b4 + .byt $b5 + .byt $b6 + .byt $b7 + .byt $b8 + .byt $b9 + .byt $ba + .byt $bb + .byt $bc + .byt $bd + .byt $be + .byt $bf + .byt $c0 + .byt $c1 + .byt $c2 + .byt $c3 + .byt $c4 + .byt $c5 + .byt $c6 + .byt $c7 + .byt $c8 + .byt $c9 + .byt $ca + .byt $cb + .byt $cc + .byt $cd + .byt $ce + .byt $cf + .byt $d0 + .byt $d1 + .byt $d2 + .byt $d3 + .byt $d4 + .byt $d5 + .byt $d6 + .byt $d7 + .byt $d8 + .byt $d9 + .byt $da + .byt $db + .byt $dc + .byt $dd + .byt $de + .byt $df + .byt $e0 + .byt $e1 + .byt $e2 + .byt $e3 + .byt $e4 + .byt $e5 + .byt $e6 + .byt $e7 + .byt $e8 + .byt $e9 + .byt $ea + .byt $eb + .byt $ec + .byt $ed + .byt $ee + .byt $ef + .byt $f0 + .byt $f1 + .byt $f2 + .byt $f3 + .byt $f4 + .byt $f5 + .byt $f6 + .byt $f7 + .byt $f8 + .byt $f9 + .byt $fa + .byt $fb + .byt $fc + .byt $fd + .byt $fe + .byt $ff - ; hex values, uppercase - .byt $0 - .byt $1 - .byt $2 - .byt $3 - .byt $4 - .byt $5 - .byt $6 - .byt $7 - .byt $8 - .byt $9 - .byt $A - .byt $B - .byt $C - .byt $D - .byt $E - .byt $F - .byt $10 - .byt $11 - .byt $12 - .byt $13 - .byt $14 - .byt $15 - .byt $16 - .byt $17 - .byt $18 - .byt $19 - .byt $1A - .byt $1B - .byt $1C - .byt $1D - .byt $1E - .byt $1F - .byt $20 - .byt $21 - .byt $22 - .byt $23 - .byt $24 - .byt $25 - .byt $26 - .byt $27 - .byt $28 - .byt $29 - .byt $2A - .byt $2B - .byt $2C - .byt $2D - .byt $2E - .byt $2F - .byt $30 - .byt $31 - .byt $32 - .byt $33 - .byt $34 - .byt $35 - .byt $36 - .byt $37 - .byt $38 - .byt $39 - .byt $3A - .byt $3B - .byt $3C - .byt $3D - .byt $3E - .byt $3F - .byt $40 - .byt $41 - .byt $42 - .byt $43 - .byt $44 - .byt $45 - .byt $46 - .byt $47 - .byt $48 - .byt $49 - .byt $4A - .byt $4B - .byt $4C - .byt $4D - .byt $4E - .byt $4F - .byt $50 - .byt $51 - .byt $52 - .byt $53 - .byt $54 - .byt $55 - .byt $56 - .byt $57 - .byt $58 - .byt $59 - .byt $5A - .byt $5B - .byt $5C - .byt $5D - .byt $5E - .byt $5F - .byt $60 - .byt $61 - .byt $62 - .byt $63 - .byt $64 - .byt $65 - .byt $66 - .byt $67 - .byt $68 - .byt $69 - .byt $6A - .byt $6B - .byt $6C - .byt $6D - .byt $6E - .byt $6F - .byt $70 - .byt $71 - .byt $72 - .byt $73 - .byt $74 - .byt $75 - .byt $76 - .byt $77 - .byt $78 - .byt $79 - .byt $7A - .byt $7B - .byt $7C - .byt $7D - .byt $7E - .byt $7F - .byt $80 - .byt $81 - .byt $82 - .byt $83 - .byt $84 - .byt $85 - .byt $86 - .byt $87 - .byt $88 - .byt $89 - .byt $8A - .byt $8B - .byt $8C - .byt $8D - .byt $8E - .byt $8F - .byt $90 - .byt $91 - .byt $92 - .byt $93 - .byt $94 - .byt $95 - .byt $96 - .byt $97 - .byt $98 - .byt $99 - .byt $9A - .byt $9B - .byt $9C - .byt $9D - .byt $9E - .byt $9F - .byt $A0 - .byt $A1 - .byt $A2 - .byt $A3 - .byt $A4 - .byt $A5 - .byt $A6 - .byt $A7 - .byt $A8 - .byt $A9 - .byt $AA - .byt $AB - .byt $AC - .byt $AD - .byt $AE - .byt $AF - .byt $B0 - .byt $B1 - .byt $B2 - .byt $B3 - .byt $B4 - .byt $B5 - .byt $B6 - .byt $B7 - .byt $B8 - .byt $B9 - .byt $BA - .byt $BB - .byt $BC - .byt $BD - .byt $BE - .byt $BF - .byt $C0 - .byt $C1 - .byt $C2 - .byt $C3 - .byt $C4 - .byt $C5 - .byt $C6 - .byt $C7 - .byt $C8 - .byt $C9 - .byt $CA - .byt $CB - .byt $CC - .byt $CD - .byt $CE - .byt $CF - .byt $D0 - .byt $D1 - .byt $D2 - .byt $D3 - .byt $D4 - .byt $D5 - .byt $D6 - .byt $D7 - .byt $D8 - .byt $D9 - .byt $DA - .byt $DB - .byt $DC - .byt $DD - .byt $DE - .byt $DF - .byt $E0 - .byt $E1 - .byt $E2 - .byt $E3 - .byt $E4 - .byt $E5 - .byt $E6 - .byt $E7 - .byt $E8 - .byt $E9 - .byt $EA - .byt $EB - .byt $EC - .byt $ED - .byt $EE - .byt $EF - .byt $F0 - .byt $F1 - .byt $F2 - .byt $F3 - .byt $F4 - .byt $F5 - .byt $F6 - .byt $F7 - .byt $F8 - .byt $F9 - .byt $FA - .byt $FB - .byt $FC - .byt $FD - .byt $FE - .byt $FF + ; hex values, uppercase + .byt $0 + .byt $1 + .byt $2 + .byt $3 + .byt $4 + .byt $5 + .byt $6 + .byt $7 + .byt $8 + .byt $9 + .byt $A + .byt $B + .byt $C + .byt $D + .byt $E + .byt $F + .byt $10 + .byt $11 + .byt $12 + .byt $13 + .byt $14 + .byt $15 + .byt $16 + .byt $17 + .byt $18 + .byt $19 + .byt $1A + .byt $1B + .byt $1C + .byt $1D + .byt $1E + .byt $1F + .byt $20 + .byt $21 + .byt $22 + .byt $23 + .byt $24 + .byt $25 + .byt $26 + .byt $27 + .byt $28 + .byt $29 + .byt $2A + .byt $2B + .byt $2C + .byt $2D + .byt $2E + .byt $2F + .byt $30 + .byt $31 + .byt $32 + .byt $33 + .byt $34 + .byt $35 + .byt $36 + .byt $37 + .byt $38 + .byt $39 + .byt $3A + .byt $3B + .byt $3C + .byt $3D + .byt $3E + .byt $3F + .byt $40 + .byt $41 + .byt $42 + .byt $43 + .byt $44 + .byt $45 + .byt $46 + .byt $47 + .byt $48 + .byt $49 + .byt $4A + .byt $4B + .byt $4C + .byt $4D + .byt $4E + .byt $4F + .byt $50 + .byt $51 + .byt $52 + .byt $53 + .byt $54 + .byt $55 + .byt $56 + .byt $57 + .byt $58 + .byt $59 + .byt $5A + .byt $5B + .byt $5C + .byt $5D + .byt $5E + .byt $5F + .byt $60 + .byt $61 + .byt $62 + .byt $63 + .byt $64 + .byt $65 + .byt $66 + .byt $67 + .byt $68 + .byt $69 + .byt $6A + .byt $6B + .byt $6C + .byt $6D + .byt $6E + .byt $6F + .byt $70 + .byt $71 + .byt $72 + .byt $73 + .byt $74 + .byt $75 + .byt $76 + .byt $77 + .byt $78 + .byt $79 + .byt $7A + .byt $7B + .byt $7C + .byt $7D + .byt $7E + .byt $7F + .byt $80 + .byt $81 + .byt $82 + .byt $83 + .byt $84 + .byt $85 + .byt $86 + .byt $87 + .byt $88 + .byt $89 + .byt $8A + .byt $8B + .byt $8C + .byt $8D + .byt $8E + .byt $8F + .byt $90 + .byt $91 + .byt $92 + .byt $93 + .byt $94 + .byt $95 + .byt $96 + .byt $97 + .byt $98 + .byt $99 + .byt $9A + .byt $9B + .byt $9C + .byt $9D + .byt $9E + .byt $9F + .byt $A0 + .byt $A1 + .byt $A2 + .byt $A3 + .byt $A4 + .byt $A5 + .byt $A6 + .byt $A7 + .byt $A8 + .byt $A9 + .byt $AA + .byt $AB + .byt $AC + .byt $AD + .byt $AE + .byt $AF + .byt $B0 + .byt $B1 + .byt $B2 + .byt $B3 + .byt $B4 + .byt $B5 + .byt $B6 + .byt $B7 + .byt $B8 + .byt $B9 + .byt $BA + .byt $BB + .byt $BC + .byt $BD + .byt $BE + .byt $BF + .byt $C0 + .byt $C1 + .byt $C2 + .byt $C3 + .byt $C4 + .byt $C5 + .byt $C6 + .byt $C7 + .byt $C8 + .byt $C9 + .byt $CA + .byt $CB + .byt $CC + .byt $CD + .byt $CE + .byt $CF + .byt $D0 + .byt $D1 + .byt $D2 + .byt $D3 + .byt $D4 + .byt $D5 + .byt $D6 + .byt $D7 + .byt $D8 + .byt $D9 + .byt $DA + .byt $DB + .byt $DC + .byt $DD + .byt $DE + .byt $DF + .byt $E0 + .byt $E1 + .byt $E2 + .byt $E3 + .byt $E4 + .byt $E5 + .byt $E6 + .byt $E7 + .byt $E8 + .byt $E9 + .byt $EA + .byt $EB + .byt $EC + .byt $ED + .byt $EE + .byt $EF + .byt $F0 + .byt $F1 + .byt $F2 + .byt $F3 + .byt $F4 + .byt $F5 + .byt $F6 + .byt $F7 + .byt $F8 + .byt $F9 + .byt $FA + .byt $FB + .byt $FC + .byt $FD + .byt $FE + .byt $FF - ; 2-digit hex values - .byt $00 - .byt $01 - .byt $02 - .byt $03 - .byt $04 - .byt $05 - .byt $06 - .byt $07 - .byt $08 - .byt $09 - .byt $0a - .byt $0b - .byt $0c - .byt $0d - .byt $0e - .byt $0f - .byt $10 - .byt $11 - .byt $12 - .byt $13 - .byt $14 - .byt $15 - .byt $16 - .byt $17 - .byt $18 - .byt $19 - .byt $1a - .byt $1b - .byt $1c - .byt $1d - .byt $1e - .byt $1f - .byt $20 - .byt $21 - .byt $22 - .byt $23 - .byt $24 - .byt $25 - .byt $26 - .byt $27 - .byt $28 - .byt $29 - .byt $2a - .byt $2b - .byt $2c - .byt $2d - .byt $2e - .byt $2f - .byt $30 - .byt $31 - .byt $32 - .byt $33 - .byt $34 - .byt $35 - .byt $36 - .byt $37 - .byt $38 - .byt $39 - .byt $3a - .byt $3b - .byt $3c - .byt $3d - .byt $3e - .byt $3f - .byt $40 - .byt $41 - .byt $42 - .byt $43 - .byt $44 - .byt $45 - .byt $46 - .byt $47 - .byt $48 - .byt $49 - .byt $4a - .byt $4b - .byt $4c - .byt $4d - .byt $4e - .byt $4f - .byt $50 - .byt $51 - .byt $52 - .byt $53 - .byt $54 - .byt $55 - .byt $56 - .byt $57 - .byt $58 - .byt $59 - .byt $5a - .byt $5b - .byt $5c - .byt $5d - .byt $5e - .byt $5f - .byt $60 - .byt $61 - .byt $62 - .byt $63 - .byt $64 - .byt $65 - .byt $66 - .byt $67 - .byt $68 - .byt $69 - .byt $6a - .byt $6b - .byt $6c - .byt $6d - .byt $6e - .byt $6f - .byt $70 - .byt $71 - .byt $72 - .byt $73 - .byt $74 - .byt $75 - .byt $76 - .byt $77 - .byt $78 - .byt $79 - .byt $7a - .byt $7b - .byt $7c - .byt $7d - .byt $7e - .byt $7f - .byt $80 - .byt $81 - .byt $82 - .byt $83 - .byt $84 - .byt $85 - .byt $86 - .byt $87 - .byt $88 - .byt $89 - .byt $8a - .byt $8b - .byt $8c - .byt $8d - .byt $8e - .byt $8f - .byt $90 - .byt $91 - .byt $92 - .byt $93 - .byt $94 - .byt $95 - .byt $96 - .byt $97 - .byt $98 - .byt $99 - .byt $9a - .byt $9b - .byt $9c - .byt $9d - .byt $9e - .byt $9f - .byt $a0 - .byt $a1 - .byt $a2 - .byt $a3 - .byt $a4 - .byt $a5 - .byt $a6 - .byt $a7 - .byt $a8 - .byt $a9 - .byt $aa - .byt $ab - .byt $ac - .byt $ad - .byt $ae - .byt $af - .byt $b0 - .byt $b1 - .byt $b2 - .byt $b3 - .byt $b4 - .byt $b5 - .byt $b6 - .byt $b7 - .byt $b8 - .byt $b9 - .byt $ba - .byt $bb - .byt $bc - .byt $bd - .byt $be - .byt $bf - .byt $c0 - .byt $c1 - .byt $c2 - .byt $c3 - .byt $c4 - .byt $c5 - .byt $c6 - .byt $c7 - .byt $c8 - .byt $c9 - .byt $ca - .byt $cb - .byt $cc - .byt $cd - .byt $ce - .byt $cf - .byt $d0 - .byt $d1 - .byt $d2 - .byt $d3 - .byt $d4 - .byt $d5 - .byt $d6 - .byt $d7 - .byt $d8 - .byt $d9 - .byt $da - .byt $db - .byt $dc - .byt $dd - .byt $de - .byt $df - .byt $e0 - .byt $e1 - .byt $e2 - .byt $e3 - .byt $e4 - .byt $e5 - .byt $e6 - .byt $e7 - .byt $e8 - .byt $e9 - .byt $ea - .byt $eb - .byt $ec - .byt $ed - .byt $ee - .byt $ef - .byt $f0 - .byt $f1 - .byt $f2 - .byt $f3 - .byt $f4 - .byt $f5 - .byt $f6 - .byt $f7 - .byt $f8 - .byt $f9 - .byt $fa - .byt $fb - .byt $fc - .byt $fd - .byt $fe - .byt $ff + ; 2-digit hex values + .byt $00 + .byt $01 + .byt $02 + .byt $03 + .byt $04 + .byt $05 + .byt $06 + .byt $07 + .byt $08 + .byt $09 + .byt $0a + .byt $0b + .byt $0c + .byt $0d + .byt $0e + .byt $0f + .byt $10 + .byt $11 + .byt $12 + .byt $13 + .byt $14 + .byt $15 + .byt $16 + .byt $17 + .byt $18 + .byt $19 + .byt $1a + .byt $1b + .byt $1c + .byt $1d + .byt $1e + .byt $1f + .byt $20 + .byt $21 + .byt $22 + .byt $23 + .byt $24 + .byt $25 + .byt $26 + .byt $27 + .byt $28 + .byt $29 + .byt $2a + .byt $2b + .byt $2c + .byt $2d + .byt $2e + .byt $2f + .byt $30 + .byt $31 + .byt $32 + .byt $33 + .byt $34 + .byt $35 + .byt $36 + .byt $37 + .byt $38 + .byt $39 + .byt $3a + .byt $3b + .byt $3c + .byt $3d + .byt $3e + .byt $3f + .byt $40 + .byt $41 + .byt $42 + .byt $43 + .byt $44 + .byt $45 + .byt $46 + .byt $47 + .byt $48 + .byt $49 + .byt $4a + .byt $4b + .byt $4c + .byt $4d + .byt $4e + .byt $4f + .byt $50 + .byt $51 + .byt $52 + .byt $53 + .byt $54 + .byt $55 + .byt $56 + .byt $57 + .byt $58 + .byt $59 + .byt $5a + .byt $5b + .byt $5c + .byt $5d + .byt $5e + .byt $5f + .byt $60 + .byt $61 + .byt $62 + .byt $63 + .byt $64 + .byt $65 + .byt $66 + .byt $67 + .byt $68 + .byt $69 + .byt $6a + .byt $6b + .byt $6c + .byt $6d + .byt $6e + .byt $6f + .byt $70 + .byt $71 + .byt $72 + .byt $73 + .byt $74 + .byt $75 + .byt $76 + .byt $77 + .byt $78 + .byt $79 + .byt $7a + .byt $7b + .byt $7c + .byt $7d + .byt $7e + .byt $7f + .byt $80 + .byt $81 + .byt $82 + .byt $83 + .byt $84 + .byt $85 + .byt $86 + .byt $87 + .byt $88 + .byt $89 + .byt $8a + .byt $8b + .byt $8c + .byt $8d + .byt $8e + .byt $8f + .byt $90 + .byt $91 + .byt $92 + .byt $93 + .byt $94 + .byt $95 + .byt $96 + .byt $97 + .byt $98 + .byt $99 + .byt $9a + .byt $9b + .byt $9c + .byt $9d + .byt $9e + .byt $9f + .byt $a0 + .byt $a1 + .byt $a2 + .byt $a3 + .byt $a4 + .byt $a5 + .byt $a6 + .byt $a7 + .byt $a8 + .byt $a9 + .byt $aa + .byt $ab + .byt $ac + .byt $ad + .byt $ae + .byt $af + .byt $b0 + .byt $b1 + .byt $b2 + .byt $b3 + .byt $b4 + .byt $b5 + .byt $b6 + .byt $b7 + .byt $b8 + .byt $b9 + .byt $ba + .byt $bb + .byt $bc + .byt $bd + .byt $be + .byt $bf + .byt $c0 + .byt $c1 + .byt $c2 + .byt $c3 + .byt $c4 + .byt $c5 + .byt $c6 + .byt $c7 + .byt $c8 + .byt $c9 + .byt $ca + .byt $cb + .byt $cc + .byt $cd + .byt $ce + .byt $cf + .byt $d0 + .byt $d1 + .byt $d2 + .byt $d3 + .byt $d4 + .byt $d5 + .byt $d6 + .byt $d7 + .byt $d8 + .byt $d9 + .byt $da + .byt $db + .byt $dc + .byt $dd + .byt $de + .byt $df + .byt $e0 + .byt $e1 + .byt $e2 + .byt $e3 + .byt $e4 + .byt $e5 + .byt $e6 + .byt $e7 + .byt $e8 + .byt $e9 + .byt $ea + .byt $eb + .byt $ec + .byt $ed + .byt $ee + .byt $ef + .byt $f0 + .byt $f1 + .byt $f2 + .byt $f3 + .byt $f4 + .byt $f5 + .byt $f6 + .byt $f7 + .byt $f8 + .byt $f9 + .byt $fa + .byt $fb + .byt $fc + .byt $fd + .byt $fe + .byt $ff - ; 2-digit hex values, uppercase - .byt $00 - .byt $01 - .byt $02 - .byt $03 - .byt $04 - .byt $05 - .byt $06 - .byt $07 - .byt $08 - .byt $09 - .byt $0A - .byt $0B - .byt $0C - .byt $0D - .byt $0E - .byt $0F - .byt $10 - .byt $11 - .byt $12 - .byt $13 - .byt $14 - .byt $15 - .byt $16 - .byt $17 - .byt $18 - .byt $19 - .byt $1A - .byt $1B - .byt $1C - .byt $1D - .byt $1E - .byt $1F - .byt $20 - .byt $21 - .byt $22 - .byt $23 - .byt $24 - .byt $25 - .byt $26 - .byt $27 - .byt $28 - .byt $29 - .byt $2A - .byt $2B - .byt $2C - .byt $2D - .byt $2E - .byt $2F - .byt $30 - .byt $31 - .byt $32 - .byt $33 - .byt $34 - .byt $35 - .byt $36 - .byt $37 - .byt $38 - .byt $39 - .byt $3A - .byt $3B - .byt $3C - .byt $3D - .byt $3E - .byt $3F - .byt $40 - .byt $41 - .byt $42 - .byt $43 - .byt $44 - .byt $45 - .byt $46 - .byt $47 - .byt $48 - .byt $49 - .byt $4A - .byt $4B - .byt $4C - .byt $4D - .byt $4E - .byt $4F - .byt $50 - .byt $51 - .byt $52 - .byt $53 - .byt $54 - .byt $55 - .byt $56 - .byt $57 - .byt $58 - .byt $59 - .byt $5A - .byt $5B - .byt $5C - .byt $5D - .byt $5E - .byt $5F - .byt $60 - .byt $61 - .byt $62 - .byt $63 - .byt $64 - .byt $65 - .byt $66 - .byt $67 - .byt $68 - .byt $69 - .byt $6A - .byt $6B - .byt $6C - .byt $6D - .byt $6E - .byt $6F - .byt $70 - .byt $71 - .byt $72 - .byt $73 - .byt $74 - .byt $75 - .byt $76 - .byt $77 - .byt $78 - .byt $79 - .byt $7A - .byt $7B - .byt $7C - .byt $7D - .byt $7E - .byt $7F - .byt $80 - .byt $81 - .byt $82 - .byt $83 - .byt $84 - .byt $85 - .byt $86 - .byt $87 - .byt $88 - .byt $89 - .byt $8A - .byt $8B - .byt $8C - .byt $8D - .byt $8E - .byt $8F - .byt $90 - .byt $91 - .byt $92 - .byt $93 - .byt $94 - .byt $95 - .byt $96 - .byt $97 - .byt $98 - .byt $99 - .byt $9A - .byt $9B - .byt $9C - .byt $9D - .byt $9E - .byt $9F - .byt $A0 - .byt $A1 - .byt $A2 - .byt $A3 - .byt $A4 - .byt $A5 - .byt $A6 - .byt $A7 - .byt $A8 - .byt $A9 - .byt $AA - .byt $AB - .byt $AC - .byt $AD - .byt $AE - .byt $AF - .byt $B0 - .byt $B1 - .byt $B2 - .byt $B3 - .byt $B4 - .byt $B5 - .byt $B6 - .byt $B7 - .byt $B8 - .byt $B9 - .byt $BA - .byt $BB - .byt $BC - .byt $BD - .byt $BE - .byt $BF - .byt $C0 - .byt $C1 - .byt $C2 - .byt $C3 - .byt $C4 - .byt $C5 - .byt $C6 - .byt $C7 - .byt $C8 - .byt $C9 - .byt $CA - .byt $CB - .byt $CC - .byt $CD - .byt $CE - .byt $CF - .byt $D0 - .byt $D1 - .byt $D2 - .byt $D3 - .byt $D4 - .byt $D5 - .byt $D6 - .byt $D7 - .byt $D8 - .byt $D9 - .byt $DA - .byt $DB - .byt $DC - .byt $DD - .byt $DE - .byt $DF - .byt $E0 - .byt $E1 - .byt $E2 - .byt $E3 - .byt $E4 - .byt $E5 - .byt $E6 - .byt $E7 - .byt $E8 - .byt $E9 - .byt $EA - .byt $EB - .byt $EC - .byt $ED - .byt $EE - .byt $EF - .byt $F0 - .byt $F1 - .byt $F2 - .byt $F3 - .byt $F4 - .byt $F5 - .byt $F6 - .byt $F7 - .byt $F8 - .byt $F9 - .byt $FA - .byt $FB - .byt $FC - .byt $FD - .byt $FE - .byt $FF + ; 2-digit hex values, uppercase + .byt $00 + .byt $01 + .byt $02 + .byt $03 + .byt $04 + .byt $05 + .byt $06 + .byt $07 + .byt $08 + .byt $09 + .byt $0A + .byt $0B + .byt $0C + .byt $0D + .byt $0E + .byt $0F + .byt $10 + .byt $11 + .byt $12 + .byt $13 + .byt $14 + .byt $15 + .byt $16 + .byt $17 + .byt $18 + .byt $19 + .byt $1A + .byt $1B + .byt $1C + .byt $1D + .byt $1E + .byt $1F + .byt $20 + .byt $21 + .byt $22 + .byt $23 + .byt $24 + .byt $25 + .byt $26 + .byt $27 + .byt $28 + .byt $29 + .byt $2A + .byt $2B + .byt $2C + .byt $2D + .byt $2E + .byt $2F + .byt $30 + .byt $31 + .byt $32 + .byt $33 + .byt $34 + .byt $35 + .byt $36 + .byt $37 + .byt $38 + .byt $39 + .byt $3A + .byt $3B + .byt $3C + .byt $3D + .byt $3E + .byt $3F + .byt $40 + .byt $41 + .byt $42 + .byt $43 + .byt $44 + .byt $45 + .byt $46 + .byt $47 + .byt $48 + .byt $49 + .byt $4A + .byt $4B + .byt $4C + .byt $4D + .byt $4E + .byt $4F + .byt $50 + .byt $51 + .byt $52 + .byt $53 + .byt $54 + .byt $55 + .byt $56 + .byt $57 + .byt $58 + .byt $59 + .byt $5A + .byt $5B + .byt $5C + .byt $5D + .byt $5E + .byt $5F + .byt $60 + .byt $61 + .byt $62 + .byt $63 + .byt $64 + .byt $65 + .byt $66 + .byt $67 + .byt $68 + .byt $69 + .byt $6A + .byt $6B + .byt $6C + .byt $6D + .byt $6E + .byt $6F + .byt $70 + .byt $71 + .byt $72 + .byt $73 + .byt $74 + .byt $75 + .byt $76 + .byt $77 + .byt $78 + .byt $79 + .byt $7A + .byt $7B + .byt $7C + .byt $7D + .byt $7E + .byt $7F + .byt $80 + .byt $81 + .byt $82 + .byt $83 + .byt $84 + .byt $85 + .byt $86 + .byt $87 + .byt $88 + .byt $89 + .byt $8A + .byt $8B + .byt $8C + .byt $8D + .byt $8E + .byt $8F + .byt $90 + .byt $91 + .byt $92 + .byt $93 + .byt $94 + .byt $95 + .byt $96 + .byt $97 + .byt $98 + .byt $99 + .byt $9A + .byt $9B + .byt $9C + .byt $9D + .byt $9E + .byt $9F + .byt $A0 + .byt $A1 + .byt $A2 + .byt $A3 + .byt $A4 + .byt $A5 + .byt $A6 + .byt $A7 + .byt $A8 + .byt $A9 + .byt $AA + .byt $AB + .byt $AC + .byt $AD + .byt $AE + .byt $AF + .byt $B0 + .byt $B1 + .byt $B2 + .byt $B3 + .byt $B4 + .byt $B5 + .byt $B6 + .byt $B7 + .byt $B8 + .byt $B9 + .byt $BA + .byt $BB + .byt $BC + .byt $BD + .byt $BE + .byt $BF + .byt $C0 + .byt $C1 + .byt $C2 + .byt $C3 + .byt $C4 + .byt $C5 + .byt $C6 + .byt $C7 + .byt $C8 + .byt $C9 + .byt $CA + .byt $CB + .byt $CC + .byt $CD + .byt $CE + .byt $CF + .byt $D0 + .byt $D1 + .byt $D2 + .byt $D3 + .byt $D4 + .byt $D5 + .byt $D6 + .byt $D7 + .byt $D8 + .byt $D9 + .byt $DA + .byt $DB + .byt $DC + .byt $DD + .byt $DE + .byt $DF + .byt $E0 + .byt $E1 + .byt $E2 + .byt $E3 + .byt $E4 + .byt $E5 + .byt $E6 + .byt $E7 + .byt $E8 + .byt $E9 + .byt $EA + .byt $EB + .byt $EC + .byt $ED + .byt $EE + .byt $EF + .byt $F0 + .byt $F1 + .byt $F2 + .byt $F3 + .byt $F4 + .byt $F5 + .byt $F6 + .byt $F7 + .byt $F8 + .byt $F9 + .byt $FA + .byt $FB + .byt $FC + .byt $FD + .byt $FE + .byt $FF - ; alternative hex values - .byt 0h - .byt 1h - .byt 2h - .byt 3h - .byt 4h - .byt 5h - .byt 6h - .byt 7h - .byt 8h - .byt 9h - .byt 0ah - .byt 0bh - .byt 0ch - .byt 0dh - .byt 0eh - .byt 0fh - .byt 10h - .byt 11h - .byt 12h - .byt 13h - .byt 14h - .byt 15h - .byt 16h - .byt 17h - .byt 18h - .byt 19h - .byt 1ah - .byt 1bh - .byt 1ch - .byt 1dh - .byt 1eh - .byt 1fh - .byt 20h - .byt 21h - .byt 22h - .byt 23h - .byt 24h - .byt 25h - .byt 26h - .byt 27h - .byt 28h - .byt 29h - .byt 2ah - .byt 2bh - .byt 2ch - .byt 2dh - .byt 2eh - .byt 2fh - .byt 30h - .byt 31h - .byt 32h - .byt 33h - .byt 34h - .byt 35h - .byt 36h - .byt 37h - .byt 38h - .byt 39h - .byt 3ah - .byt 3bh - .byt 3ch - .byt 3dh - .byt 3eh - .byt 3fh - .byt 40h - .byt 41h - .byt 42h - .byt 43h - .byt 44h - .byt 45h - .byt 46h - .byt 47h - .byt 48h - .byt 49h - .byt 4ah - .byt 4bh - .byt 4ch - .byt 4dh - .byt 4eh - .byt 4fh - .byt 50h - .byt 51h - .byt 52h - .byt 53h - .byt 54h - .byt 55h - .byt 56h - .byt 57h - .byt 58h - .byt 59h - .byt 5ah - .byt 5bh - .byt 5ch - .byt 5dh - .byt 5eh - .byt 5fh - .byt 60h - .byt 61h - .byt 62h - .byt 63h - .byt 64h - .byt 65h - .byt 66h - .byt 67h - .byt 68h - .byt 69h - .byt 6ah - .byt 6bh - .byt 6ch - .byt 6dh - .byt 6eh - .byt 6fh - .byt 70h - .byt 71h - .byt 72h - .byt 73h - .byt 74h - .byt 75h - .byt 76h - .byt 77h - .byt 78h - .byt 79h - .byt 7ah - .byt 7bh - .byt 7ch - .byt 7dh - .byt 7eh - .byt 7fh - .byt 80h - .byt 81h - .byt 82h - .byt 83h - .byt 84h - .byt 85h - .byt 86h - .byt 87h - .byt 88h - .byt 89h - .byt 8ah - .byt 8bh - .byt 8ch - .byt 8dh - .byt 8eh - .byt 8fh - .byt 90h - .byt 91h - .byt 92h - .byt 93h - .byt 94h - .byt 95h - .byt 96h - .byt 97h - .byt 98h - .byt 99h - .byt 9ah - .byt 9bh - .byt 9ch - .byt 9dh - .byt 9eh - .byt 9fh - .byt 0a0h - .byt 0a1h - .byt 0a2h - .byt 0a3h - .byt 0a4h - .byt 0a5h - .byt 0a6h - .byt 0a7h - .byt 0a8h - .byt 0a9h - .byt 0aah - .byt 0abh - .byt 0ach - .byt 0adh - .byt 0aeh - .byt 0afh - .byt 0b0h - .byt 0b1h - .byt 0b2h - .byt 0b3h - .byt 0b4h - .byt 0b5h - .byt 0b6h - .byt 0b7h - .byt 0b8h - .byt 0b9h - .byt 0bah - .byt 0bbh - .byt 0bch - .byt 0bdh - .byt 0beh - .byt 0bfh - .byt 0c0h - .byt 0c1h - .byt 0c2h - .byt 0c3h - .byt 0c4h - .byt 0c5h - .byt 0c6h - .byt 0c7h - .byt 0c8h - .byt 0c9h - .byt 0cah - .byt 0cbh - .byt 0cch - .byt 0cdh - .byt 0ceh - .byt 0cfh - .byt 0d0h - .byt 0d1h - .byt 0d2h - .byt 0d3h - .byt 0d4h - .byt 0d5h - .byt 0d6h - .byt 0d7h - .byt 0d8h - .byt 0d9h - .byt 0dah - .byt 0dbh - .byt 0dch - .byt 0ddh - .byt 0deh - .byt 0dfh - .byt 0e0h - .byt 0e1h - .byt 0e2h - .byt 0e3h - .byt 0e4h - .byt 0e5h - .byt 0e6h - .byt 0e7h - .byt 0e8h - .byt 0e9h - .byt 0eah - .byt 0ebh - .byt 0ech - .byt 0edh - .byt 0eeh - .byt 0efh - .byt 0f0h - .byt 0f1h - .byt 0f2h - .byt 0f3h - .byt 0f4h - .byt 0f5h - .byt 0f6h - .byt 0f7h - .byt 0f8h - .byt 0f9h - .byt 0fah - .byt 0fbh - .byt 0fch - .byt 0fdh - .byt 0feh - .byt 0ffh + ; alternative hex values + .byt 0h + .byt 1h + .byt 2h + .byt 3h + .byt 4h + .byt 5h + .byt 6h + .byt 7h + .byt 8h + .byt 9h + .byt 0ah + .byt 0bh + .byt 0ch + .byt 0dh + .byt 0eh + .byt 0fh + .byt 10h + .byt 11h + .byt 12h + .byt 13h + .byt 14h + .byt 15h + .byt 16h + .byt 17h + .byt 18h + .byt 19h + .byt 1ah + .byt 1bh + .byt 1ch + .byt 1dh + .byt 1eh + .byt 1fh + .byt 20h + .byt 21h + .byt 22h + .byt 23h + .byt 24h + .byt 25h + .byt 26h + .byt 27h + .byt 28h + .byt 29h + .byt 2ah + .byt 2bh + .byt 2ch + .byt 2dh + .byt 2eh + .byt 2fh + .byt 30h + .byt 31h + .byt 32h + .byt 33h + .byt 34h + .byt 35h + .byt 36h + .byt 37h + .byt 38h + .byt 39h + .byt 3ah + .byt 3bh + .byt 3ch + .byt 3dh + .byt 3eh + .byt 3fh + .byt 40h + .byt 41h + .byt 42h + .byt 43h + .byt 44h + .byt 45h + .byt 46h + .byt 47h + .byt 48h + .byt 49h + .byt 4ah + .byt 4bh + .byt 4ch + .byt 4dh + .byt 4eh + .byt 4fh + .byt 50h + .byt 51h + .byt 52h + .byt 53h + .byt 54h + .byt 55h + .byt 56h + .byt 57h + .byt 58h + .byt 59h + .byt 5ah + .byt 5bh + .byt 5ch + .byt 5dh + .byt 5eh + .byt 5fh + .byt 60h + .byt 61h + .byt 62h + .byt 63h + .byt 64h + .byt 65h + .byt 66h + .byt 67h + .byt 68h + .byt 69h + .byt 6ah + .byt 6bh + .byt 6ch + .byt 6dh + .byt 6eh + .byt 6fh + .byt 70h + .byt 71h + .byt 72h + .byt 73h + .byt 74h + .byt 75h + .byt 76h + .byt 77h + .byt 78h + .byt 79h + .byt 7ah + .byt 7bh + .byt 7ch + .byt 7dh + .byt 7eh + .byt 7fh + .byt 80h + .byt 81h + .byt 82h + .byt 83h + .byt 84h + .byt 85h + .byt 86h + .byt 87h + .byt 88h + .byt 89h + .byt 8ah + .byt 8bh + .byt 8ch + .byt 8dh + .byt 8eh + .byt 8fh + .byt 90h + .byt 91h + .byt 92h + .byt 93h + .byt 94h + .byt 95h + .byt 96h + .byt 97h + .byt 98h + .byt 99h + .byt 9ah + .byt 9bh + .byt 9ch + .byt 9dh + .byt 9eh + .byt 9fh + .byt 0a0h + .byt 0a1h + .byt 0a2h + .byt 0a3h + .byt 0a4h + .byt 0a5h + .byt 0a6h + .byt 0a7h + .byt 0a8h + .byt 0a9h + .byt 0aah + .byt 0abh + .byt 0ach + .byt 0adh + .byt 0aeh + .byt 0afh + .byt 0b0h + .byt 0b1h + .byt 0b2h + .byt 0b3h + .byt 0b4h + .byt 0b5h + .byt 0b6h + .byt 0b7h + .byt 0b8h + .byt 0b9h + .byt 0bah + .byt 0bbh + .byt 0bch + .byt 0bdh + .byt 0beh + .byt 0bfh + .byt 0c0h + .byt 0c1h + .byt 0c2h + .byt 0c3h + .byt 0c4h + .byt 0c5h + .byt 0c6h + .byt 0c7h + .byt 0c8h + .byt 0c9h + .byt 0cah + .byt 0cbh + .byt 0cch + .byt 0cdh + .byt 0ceh + .byt 0cfh + .byt 0d0h + .byt 0d1h + .byt 0d2h + .byt 0d3h + .byt 0d4h + .byt 0d5h + .byt 0d6h + .byt 0d7h + .byt 0d8h + .byt 0d9h + .byt 0dah + .byt 0dbh + .byt 0dch + .byt 0ddh + .byt 0deh + .byt 0dfh + .byt 0e0h + .byt 0e1h + .byt 0e2h + .byt 0e3h + .byt 0e4h + .byt 0e5h + .byt 0e6h + .byt 0e7h + .byt 0e8h + .byt 0e9h + .byt 0eah + .byt 0ebh + .byt 0ech + .byt 0edh + .byt 0eeh + .byt 0efh + .byt 0f0h + .byt 0f1h + .byt 0f2h + .byt 0f3h + .byt 0f4h + .byt 0f5h + .byt 0f6h + .byt 0f7h + .byt 0f8h + .byt 0f9h + .byt 0fah + .byt 0fbh + .byt 0fch + .byt 0fdh + .byt 0feh + .byt 0ffh - ; alternative hex values, uppercase - .byt 0h - .byt 1h - .byt 2h - .byt 3h - .byt 4h - .byt 5h - .byt 6h - .byt 7h - .byt 8h - .byt 9h - .byt 0Ah - .byt 0Bh - .byt 0Ch - .byt 0Dh - .byt 0Eh - .byt 0Fh - .byt 10h - .byt 11h - .byt 12h - .byt 13h - .byt 14h - .byt 15h - .byt 16h - .byt 17h - .byt 18h - .byt 19h - .byt 1Ah - .byt 1Bh - .byt 1Ch - .byt 1Dh - .byt 1Eh - .byt 1Fh - .byt 20h - .byt 21h - .byt 22h - .byt 23h - .byt 24h - .byt 25h - .byt 26h - .byt 27h - .byt 28h - .byt 29h - .byt 2Ah - .byt 2Bh - .byt 2Ch - .byt 2Dh - .byt 2Eh - .byt 2Fh - .byt 30h - .byt 31h - .byt 32h - .byt 33h - .byt 34h - .byt 35h - .byt 36h - .byt 37h - .byt 38h - .byt 39h - .byt 3Ah - .byt 3Bh - .byt 3Ch - .byt 3Dh - .byt 3Eh - .byt 3Fh - .byt 40h - .byt 41h - .byt 42h - .byt 43h - .byt 44h - .byt 45h - .byt 46h - .byt 47h - .byt 48h - .byt 49h - .byt 4Ah - .byt 4Bh - .byt 4Ch - .byt 4Dh - .byt 4Eh - .byt 4Fh - .byt 50h - .byt 51h - .byt 52h - .byt 53h - .byt 54h - .byt 55h - .byt 56h - .byt 57h - .byt 58h - .byt 59h - .byt 5Ah - .byt 5Bh - .byt 5Ch - .byt 5Dh - .byt 5Eh - .byt 5Fh - .byt 60h - .byt 61h - .byt 62h - .byt 63h - .byt 64h - .byt 65h - .byt 66h - .byt 67h - .byt 68h - .byt 69h - .byt 6Ah - .byt 6Bh - .byt 6Ch - .byt 6Dh - .byt 6Eh - .byt 6Fh - .byt 70h - .byt 71h - .byt 72h - .byt 73h - .byt 74h - .byt 75h - .byt 76h - .byt 77h - .byt 78h - .byt 79h - .byt 7Ah - .byt 7Bh - .byt 7Ch - .byt 7Dh - .byt 7Eh - .byt 7Fh - .byt 80h - .byt 81h - .byt 82h - .byt 83h - .byt 84h - .byt 85h - .byt 86h - .byt 87h - .byt 88h - .byt 89h - .byt 8Ah - .byt 8Bh - .byt 8Ch - .byt 8Dh - .byt 8Eh - .byt 8Fh - .byt 90h - .byt 91h - .byt 92h - .byt 93h - .byt 94h - .byt 95h - .byt 96h - .byt 97h - .byt 98h - .byt 99h - .byt 9Ah - .byt 9Bh - .byt 9Ch - .byt 9Dh - .byt 9Eh - .byt 9Fh - .byt 0A0h - .byt 0A1h - .byt 0A2h - .byt 0A3h - .byt 0A4h - .byt 0A5h - .byt 0A6h - .byt 0A7h - .byt 0A8h - .byt 0A9h - .byt 0AAh - .byt 0ABh - .byt 0ACh - .byt 0ADh - .byt 0AEh - .byt 0AFh - .byt 0B0h - .byt 0B1h - .byt 0B2h - .byt 0B3h - .byt 0B4h - .byt 0B5h - .byt 0B6h - .byt 0B7h - .byt 0B8h - .byt 0B9h - .byt 0BAh - .byt 0BBh - .byt 0BCh - .byt 0BDh - .byt 0BEh - .byt 0BFh - .byt 0C0h - .byt 0C1h - .byt 0C2h - .byt 0C3h - .byt 0C4h - .byt 0C5h - .byt 0C6h - .byt 0C7h - .byt 0C8h - .byt 0C9h - .byt 0CAh - .byt 0CBh - .byt 0CCh - .byt 0CDh - .byt 0CEh - .byt 0CFh - .byt 0D0h - .byt 0D1h - .byt 0D2h - .byt 0D3h - .byt 0D4h - .byt 0D5h - .byt 0D6h - .byt 0D7h - .byt 0D8h - .byt 0D9h - .byt 0DAh - .byt 0DBh - .byt 0DCh - .byt 0DDh - .byt 0DEh - .byt 0DFh - .byt 0E0h - .byt 0E1h - .byt 0E2h - .byt 0E3h - .byt 0E4h - .byt 0E5h - .byt 0E6h - .byt 0E7h - .byt 0E8h - .byt 0E9h - .byt 0EAh - .byt 0EBh - .byt 0ECh - .byt 0EDh - .byt 0EEh - .byt 0EFh - .byt 0F0h - .byt 0F1h - .byt 0F2h - .byt 0F3h - .byt 0F4h - .byt 0F5h - .byt 0F6h - .byt 0F7h - .byt 0F8h - .byt 0F9h - .byt 0FAh - .byt 0FBh - .byt 0FCh - .byt 0FDh - .byt 0FEh - .byt 0FFh + ; alternative hex values, uppercase + .byt 0h + .byt 1h + .byt 2h + .byt 3h + .byt 4h + .byt 5h + .byt 6h + .byt 7h + .byt 8h + .byt 9h + .byt 0Ah + .byt 0Bh + .byt 0Ch + .byt 0Dh + .byt 0Eh + .byt 0Fh + .byt 10h + .byt 11h + .byt 12h + .byt 13h + .byt 14h + .byt 15h + .byt 16h + .byt 17h + .byt 18h + .byt 19h + .byt 1Ah + .byt 1Bh + .byt 1Ch + .byt 1Dh + .byt 1Eh + .byt 1Fh + .byt 20h + .byt 21h + .byt 22h + .byt 23h + .byt 24h + .byt 25h + .byt 26h + .byt 27h + .byt 28h + .byt 29h + .byt 2Ah + .byt 2Bh + .byt 2Ch + .byt 2Dh + .byt 2Eh + .byt 2Fh + .byt 30h + .byt 31h + .byt 32h + .byt 33h + .byt 34h + .byt 35h + .byt 36h + .byt 37h + .byt 38h + .byt 39h + .byt 3Ah + .byt 3Bh + .byt 3Ch + .byt 3Dh + .byt 3Eh + .byt 3Fh + .byt 40h + .byt 41h + .byt 42h + .byt 43h + .byt 44h + .byt 45h + .byt 46h + .byt 47h + .byt 48h + .byt 49h + .byt 4Ah + .byt 4Bh + .byt 4Ch + .byt 4Dh + .byt 4Eh + .byt 4Fh + .byt 50h + .byt 51h + .byt 52h + .byt 53h + .byt 54h + .byt 55h + .byt 56h + .byt 57h + .byt 58h + .byt 59h + .byt 5Ah + .byt 5Bh + .byt 5Ch + .byt 5Dh + .byt 5Eh + .byt 5Fh + .byt 60h + .byt 61h + .byt 62h + .byt 63h + .byt 64h + .byt 65h + .byt 66h + .byt 67h + .byt 68h + .byt 69h + .byt 6Ah + .byt 6Bh + .byt 6Ch + .byt 6Dh + .byt 6Eh + .byt 6Fh + .byt 70h + .byt 71h + .byt 72h + .byt 73h + .byt 74h + .byt 75h + .byt 76h + .byt 77h + .byt 78h + .byt 79h + .byt 7Ah + .byt 7Bh + .byt 7Ch + .byt 7Dh + .byt 7Eh + .byt 7Fh + .byt 80h + .byt 81h + .byt 82h + .byt 83h + .byt 84h + .byt 85h + .byt 86h + .byt 87h + .byt 88h + .byt 89h + .byt 8Ah + .byt 8Bh + .byt 8Ch + .byt 8Dh + .byt 8Eh + .byt 8Fh + .byt 90h + .byt 91h + .byt 92h + .byt 93h + .byt 94h + .byt 95h + .byt 96h + .byt 97h + .byt 98h + .byt 99h + .byt 9Ah + .byt 9Bh + .byt 9Ch + .byt 9Dh + .byt 9Eh + .byt 9Fh + .byt 0A0h + .byt 0A1h + .byt 0A2h + .byt 0A3h + .byt 0A4h + .byt 0A5h + .byt 0A6h + .byt 0A7h + .byt 0A8h + .byt 0A9h + .byt 0AAh + .byt 0ABh + .byt 0ACh + .byt 0ADh + .byt 0AEh + .byt 0AFh + .byt 0B0h + .byt 0B1h + .byt 0B2h + .byt 0B3h + .byt 0B4h + .byt 0B5h + .byt 0B6h + .byt 0B7h + .byt 0B8h + .byt 0B9h + .byt 0BAh + .byt 0BBh + .byt 0BCh + .byt 0BDh + .byt 0BEh + .byt 0BFh + .byt 0C0h + .byt 0C1h + .byt 0C2h + .byt 0C3h + .byt 0C4h + .byt 0C5h + .byt 0C6h + .byt 0C7h + .byt 0C8h + .byt 0C9h + .byt 0CAh + .byt 0CBh + .byt 0CCh + .byt 0CDh + .byt 0CEh + .byt 0CFh + .byt 0D0h + .byt 0D1h + .byt 0D2h + .byt 0D3h + .byt 0D4h + .byt 0D5h + .byt 0D6h + .byt 0D7h + .byt 0D8h + .byt 0D9h + .byt 0DAh + .byt 0DBh + .byt 0DCh + .byt 0DDh + .byt 0DEh + .byt 0DFh + .byt 0E0h + .byt 0E1h + .byt 0E2h + .byt 0E3h + .byt 0E4h + .byt 0E5h + .byt 0E6h + .byt 0E7h + .byt 0E8h + .byt 0E9h + .byt 0EAh + .byt 0EBh + .byt 0ECh + .byt 0EDh + .byt 0EEh + .byt 0EFh + .byt 0F0h + .byt 0F1h + .byt 0F2h + .byt 0F3h + .byt 0F4h + .byt 0F5h + .byt 0F6h + .byt 0F7h + .byt 0F8h + .byt 0F9h + .byt 0FAh + .byt 0FBh + .byt 0FCh + .byt 0FDh + .byt 0FEh + .byt 0FFh - ; alternative 2-digit hex values - .byt 00h - .byt 01h - .byt 02h - .byt 03h - .byt 04h - .byt 05h - .byt 06h - .byt 07h - .byt 08h - .byt 09h - .byt 0ah - .byt 0bh - .byt 0ch - .byt 0dh - .byt 0eh - .byt 0fh - .byt 10h - .byt 11h - .byt 12h - .byt 13h - .byt 14h - .byt 15h - .byt 16h - .byt 17h - .byt 18h - .byt 19h - .byt 1ah - .byt 1bh - .byt 1ch - .byt 1dh - .byt 1eh - .byt 1fh - .byt 20h - .byt 21h - .byt 22h - .byt 23h - .byt 24h - .byt 25h - .byt 26h - .byt 27h - .byt 28h - .byt 29h - .byt 2ah - .byt 2bh - .byt 2ch - .byt 2dh - .byt 2eh - .byt 2fh - .byt 30h - .byt 31h - .byt 32h - .byt 33h - .byt 34h - .byt 35h - .byt 36h - .byt 37h - .byt 38h - .byt 39h - .byt 3ah - .byt 3bh - .byt 3ch - .byt 3dh - .byt 3eh - .byt 3fh - .byt 40h - .byt 41h - .byt 42h - .byt 43h - .byt 44h - .byt 45h - .byt 46h - .byt 47h - .byt 48h - .byt 49h - .byt 4ah - .byt 4bh - .byt 4ch - .byt 4dh - .byt 4eh - .byt 4fh - .byt 50h - .byt 51h - .byt 52h - .byt 53h - .byt 54h - .byt 55h - .byt 56h - .byt 57h - .byt 58h - .byt 59h - .byt 5ah - .byt 5bh - .byt 5ch - .byt 5dh - .byt 5eh - .byt 5fh - .byt 60h - .byt 61h - .byt 62h - .byt 63h - .byt 64h - .byt 65h - .byt 66h - .byt 67h - .byt 68h - .byt 69h - .byt 6ah - .byt 6bh - .byt 6ch - .byt 6dh - .byt 6eh - .byt 6fh - .byt 70h - .byt 71h - .byt 72h - .byt 73h - .byt 74h - .byt 75h - .byt 76h - .byt 77h - .byt 78h - .byt 79h - .byt 7ah - .byt 7bh - .byt 7ch - .byt 7dh - .byt 7eh - .byt 7fh - .byt 80h - .byt 81h - .byt 82h - .byt 83h - .byt 84h - .byt 85h - .byt 86h - .byt 87h - .byt 88h - .byt 89h - .byt 8ah - .byt 8bh - .byt 8ch - .byt 8dh - .byt 8eh - .byt 8fh - .byt 90h - .byt 91h - .byt 92h - .byt 93h - .byt 94h - .byt 95h - .byt 96h - .byt 97h - .byt 98h - .byt 99h - .byt 9ah - .byt 9bh - .byt 9ch - .byt 9dh - .byt 9eh - .byt 9fh - .byt 0a0h - .byt 0a1h - .byt 0a2h - .byt 0a3h - .byt 0a4h - .byt 0a5h - .byt 0a6h - .byt 0a7h - .byt 0a8h - .byt 0a9h - .byt 0aah - .byt 0abh - .byt 0ach - .byt 0adh - .byt 0aeh - .byt 0afh - .byt 0b0h - .byt 0b1h - .byt 0b2h - .byt 0b3h - .byt 0b4h - .byt 0b5h - .byt 0b6h - .byt 0b7h - .byt 0b8h - .byt 0b9h - .byt 0bah - .byt 0bbh - .byt 0bch - .byt 0bdh - .byt 0beh - .byt 0bfh - .byt 0c0h - .byt 0c1h - .byt 0c2h - .byt 0c3h - .byt 0c4h - .byt 0c5h - .byt 0c6h - .byt 0c7h - .byt 0c8h - .byt 0c9h - .byt 0cah - .byt 0cbh - .byt 0cch - .byt 0cdh - .byt 0ceh - .byt 0cfh - .byt 0d0h - .byt 0d1h - .byt 0d2h - .byt 0d3h - .byt 0d4h - .byt 0d5h - .byt 0d6h - .byt 0d7h - .byt 0d8h - .byt 0d9h - .byt 0dah - .byt 0dbh - .byt 0dch - .byt 0ddh - .byt 0deh - .byt 0dfh - .byt 0e0h - .byt 0e1h - .byt 0e2h - .byt 0e3h - .byt 0e4h - .byt 0e5h - .byt 0e6h - .byt 0e7h - .byt 0e8h - .byt 0e9h - .byt 0eah - .byt 0ebh - .byt 0ech - .byt 0edh - .byt 0eeh - .byt 0efh - .byt 0f0h - .byt 0f1h - .byt 0f2h - .byt 0f3h - .byt 0f4h - .byt 0f5h - .byt 0f6h - .byt 0f7h - .byt 0f8h - .byt 0f9h - .byt 0fah - .byt 0fbh - .byt 0fch - .byt 0fdh - .byt 0feh - .byt 0ffh + ; alternative 2-digit hex values + .byt 00h + .byt 01h + .byt 02h + .byt 03h + .byt 04h + .byt 05h + .byt 06h + .byt 07h + .byt 08h + .byt 09h + .byt 0ah + .byt 0bh + .byt 0ch + .byt 0dh + .byt 0eh + .byt 0fh + .byt 10h + .byt 11h + .byt 12h + .byt 13h + .byt 14h + .byt 15h + .byt 16h + .byt 17h + .byt 18h + .byt 19h + .byt 1ah + .byt 1bh + .byt 1ch + .byt 1dh + .byt 1eh + .byt 1fh + .byt 20h + .byt 21h + .byt 22h + .byt 23h + .byt 24h + .byt 25h + .byt 26h + .byt 27h + .byt 28h + .byt 29h + .byt 2ah + .byt 2bh + .byt 2ch + .byt 2dh + .byt 2eh + .byt 2fh + .byt 30h + .byt 31h + .byt 32h + .byt 33h + .byt 34h + .byt 35h + .byt 36h + .byt 37h + .byt 38h + .byt 39h + .byt 3ah + .byt 3bh + .byt 3ch + .byt 3dh + .byt 3eh + .byt 3fh + .byt 40h + .byt 41h + .byt 42h + .byt 43h + .byt 44h + .byt 45h + .byt 46h + .byt 47h + .byt 48h + .byt 49h + .byt 4ah + .byt 4bh + .byt 4ch + .byt 4dh + .byt 4eh + .byt 4fh + .byt 50h + .byt 51h + .byt 52h + .byt 53h + .byt 54h + .byt 55h + .byt 56h + .byt 57h + .byt 58h + .byt 59h + .byt 5ah + .byt 5bh + .byt 5ch + .byt 5dh + .byt 5eh + .byt 5fh + .byt 60h + .byt 61h + .byt 62h + .byt 63h + .byt 64h + .byt 65h + .byt 66h + .byt 67h + .byt 68h + .byt 69h + .byt 6ah + .byt 6bh + .byt 6ch + .byt 6dh + .byt 6eh + .byt 6fh + .byt 70h + .byt 71h + .byt 72h + .byt 73h + .byt 74h + .byt 75h + .byt 76h + .byt 77h + .byt 78h + .byt 79h + .byt 7ah + .byt 7bh + .byt 7ch + .byt 7dh + .byt 7eh + .byt 7fh + .byt 80h + .byt 81h + .byt 82h + .byt 83h + .byt 84h + .byt 85h + .byt 86h + .byt 87h + .byt 88h + .byt 89h + .byt 8ah + .byt 8bh + .byt 8ch + .byt 8dh + .byt 8eh + .byt 8fh + .byt 90h + .byt 91h + .byt 92h + .byt 93h + .byt 94h + .byt 95h + .byt 96h + .byt 97h + .byt 98h + .byt 99h + .byt 9ah + .byt 9bh + .byt 9ch + .byt 9dh + .byt 9eh + .byt 9fh + .byt 0a0h + .byt 0a1h + .byt 0a2h + .byt 0a3h + .byt 0a4h + .byt 0a5h + .byt 0a6h + .byt 0a7h + .byt 0a8h + .byt 0a9h + .byt 0aah + .byt 0abh + .byt 0ach + .byt 0adh + .byt 0aeh + .byt 0afh + .byt 0b0h + .byt 0b1h + .byt 0b2h + .byt 0b3h + .byt 0b4h + .byt 0b5h + .byt 0b6h + .byt 0b7h + .byt 0b8h + .byt 0b9h + .byt 0bah + .byt 0bbh + .byt 0bch + .byt 0bdh + .byt 0beh + .byt 0bfh + .byt 0c0h + .byt 0c1h + .byt 0c2h + .byt 0c3h + .byt 0c4h + .byt 0c5h + .byt 0c6h + .byt 0c7h + .byt 0c8h + .byt 0c9h + .byt 0cah + .byt 0cbh + .byt 0cch + .byt 0cdh + .byt 0ceh + .byt 0cfh + .byt 0d0h + .byt 0d1h + .byt 0d2h + .byt 0d3h + .byt 0d4h + .byt 0d5h + .byt 0d6h + .byt 0d7h + .byt 0d8h + .byt 0d9h + .byt 0dah + .byt 0dbh + .byt 0dch + .byt 0ddh + .byt 0deh + .byt 0dfh + .byt 0e0h + .byt 0e1h + .byt 0e2h + .byt 0e3h + .byt 0e4h + .byt 0e5h + .byt 0e6h + .byt 0e7h + .byt 0e8h + .byt 0e9h + .byt 0eah + .byt 0ebh + .byt 0ech + .byt 0edh + .byt 0eeh + .byt 0efh + .byt 0f0h + .byt 0f1h + .byt 0f2h + .byt 0f3h + .byt 0f4h + .byt 0f5h + .byt 0f6h + .byt 0f7h + .byt 0f8h + .byt 0f9h + .byt 0fah + .byt 0fbh + .byt 0fch + .byt 0fdh + .byt 0feh + .byt 0ffh - ; alternative 2-digit hex values, uppercase - .byt 00h - .byt 01h - .byt 02h - .byt 03h - .byt 04h - .byt 05h - .byt 06h - .byt 07h - .byt 08h - .byt 09h - .byt 0Ah - .byt 0Bh - .byt 0Ch - .byt 0Dh - .byt 0Eh - .byt 0Fh - .byt 10h - .byt 11h - .byt 12h - .byt 13h - .byt 14h - .byt 15h - .byt 16h - .byt 17h - .byt 18h - .byt 19h - .byt 1Ah - .byt 1Bh - .byt 1Ch - .byt 1Dh - .byt 1Eh - .byt 1Fh - .byt 20h - .byt 21h - .byt 22h - .byt 23h - .byt 24h - .byt 25h - .byt 26h - .byt 27h - .byt 28h - .byt 29h - .byt 2Ah - .byt 2Bh - .byt 2Ch - .byt 2Dh - .byt 2Eh - .byt 2Fh - .byt 30h - .byt 31h - .byt 32h - .byt 33h - .byt 34h - .byt 35h - .byt 36h - .byt 37h - .byt 38h - .byt 39h - .byt 3Ah - .byt 3Bh - .byt 3Ch - .byt 3Dh - .byt 3Eh - .byt 3Fh - .byt 40h - .byt 41h - .byt 42h - .byt 43h - .byt 44h - .byt 45h - .byt 46h - .byt 47h - .byt 48h - .byt 49h - .byt 4Ah - .byt 4Bh - .byt 4Ch - .byt 4Dh - .byt 4Eh - .byt 4Fh - .byt 50h - .byt 51h - .byt 52h - .byt 53h - .byt 54h - .byt 55h - .byt 56h - .byt 57h - .byt 58h - .byt 59h - .byt 5Ah - .byt 5Bh - .byt 5Ch - .byt 5Dh - .byt 5Eh - .byt 5Fh - .byt 60h - .byt 61h - .byt 62h - .byt 63h - .byt 64h - .byt 65h - .byt 66h - .byt 67h - .byt 68h - .byt 69h - .byt 6Ah - .byt 6Bh - .byt 6Ch - .byt 6Dh - .byt 6Eh - .byt 6Fh - .byt 70h - .byt 71h - .byt 72h - .byt 73h - .byt 74h - .byt 75h - .byt 76h - .byt 77h - .byt 78h - .byt 79h - .byt 7Ah - .byt 7Bh - .byt 7Ch - .byt 7Dh - .byt 7Eh - .byt 7Fh - .byt 80h - .byt 81h - .byt 82h - .byt 83h - .byt 84h - .byt 85h - .byt 86h - .byt 87h - .byt 88h - .byt 89h - .byt 8Ah - .byt 8Bh - .byt 8Ch - .byt 8Dh - .byt 8Eh - .byt 8Fh - .byt 90h - .byt 91h - .byt 92h - .byt 93h - .byt 94h - .byt 95h - .byt 96h - .byt 97h - .byt 98h - .byt 99h - .byt 9Ah - .byt 9Bh - .byt 9Ch - .byt 9Dh - .byt 9Eh - .byt 9Fh - .byt 0A0h - .byt 0A1h - .byt 0A2h - .byt 0A3h - .byt 0A4h - .byt 0A5h - .byt 0A6h - .byt 0A7h - .byt 0A8h - .byt 0A9h - .byt 0AAh - .byt 0ABh - .byt 0ACh - .byt 0ADh - .byt 0AEh - .byt 0AFh - .byt 0B0h - .byt 0B1h - .byt 0B2h - .byt 0B3h - .byt 0B4h - .byt 0B5h - .byt 0B6h - .byt 0B7h - .byt 0B8h - .byt 0B9h - .byt 0BAh - .byt 0BBh - .byt 0BCh - .byt 0BDh - .byt 0BEh - .byt 0BFh - .byt 0C0h - .byt 0C1h - .byt 0C2h - .byt 0C3h - .byt 0C4h - .byt 0C5h - .byt 0C6h - .byt 0C7h - .byt 0C8h - .byt 0C9h - .byt 0CAh - .byt 0CBh - .byt 0CCh - .byt 0CDh - .byt 0CEh - .byt 0CFh - .byt 0D0h - .byt 0D1h - .byt 0D2h - .byt 0D3h - .byt 0D4h - .byt 0D5h - .byt 0D6h - .byt 0D7h - .byt 0D8h - .byt 0D9h - .byt 0DAh - .byt 0DBh - .byt 0DCh - .byt 0DDh - .byt 0DEh - .byt 0DFh - .byt 0E0h - .byt 0E1h - .byt 0E2h - .byt 0E3h - .byt 0E4h - .byt 0E5h - .byt 0E6h - .byt 0E7h - .byt 0E8h - .byt 0E9h - .byt 0EAh - .byt 0EBh - .byt 0ECh - .byt 0EDh - .byt 0EEh - .byt 0EFh - .byt 0F0h - .byt 0F1h - .byt 0F2h - .byt 0F3h - .byt 0F4h - .byt 0F5h - .byt 0F6h - .byt 0F7h - .byt 0F8h - .byt 0F9h - .byt 0FAh - .byt 0FBh - .byt 0FCh - .byt 0FDh - .byt 0FEh - .byt 0FFh + ; alternative 2-digit hex values, uppercase + .byt 00h + .byt 01h + .byt 02h + .byt 03h + .byt 04h + .byt 05h + .byt 06h + .byt 07h + .byt 08h + .byt 09h + .byt 0Ah + .byt 0Bh + .byt 0Ch + .byt 0Dh + .byt 0Eh + .byt 0Fh + .byt 10h + .byt 11h + .byt 12h + .byt 13h + .byt 14h + .byt 15h + .byt 16h + .byt 17h + .byt 18h + .byt 19h + .byt 1Ah + .byt 1Bh + .byt 1Ch + .byt 1Dh + .byt 1Eh + .byt 1Fh + .byt 20h + .byt 21h + .byt 22h + .byt 23h + .byt 24h + .byt 25h + .byt 26h + .byt 27h + .byt 28h + .byt 29h + .byt 2Ah + .byt 2Bh + .byt 2Ch + .byt 2Dh + .byt 2Eh + .byt 2Fh + .byt 30h + .byt 31h + .byt 32h + .byt 33h + .byt 34h + .byt 35h + .byt 36h + .byt 37h + .byt 38h + .byt 39h + .byt 3Ah + .byt 3Bh + .byt 3Ch + .byt 3Dh + .byt 3Eh + .byt 3Fh + .byt 40h + .byt 41h + .byt 42h + .byt 43h + .byt 44h + .byt 45h + .byt 46h + .byt 47h + .byt 48h + .byt 49h + .byt 4Ah + .byt 4Bh + .byt 4Ch + .byt 4Dh + .byt 4Eh + .byt 4Fh + .byt 50h + .byt 51h + .byt 52h + .byt 53h + .byt 54h + .byt 55h + .byt 56h + .byt 57h + .byt 58h + .byt 59h + .byt 5Ah + .byt 5Bh + .byt 5Ch + .byt 5Dh + .byt 5Eh + .byt 5Fh + .byt 60h + .byt 61h + .byt 62h + .byt 63h + .byt 64h + .byt 65h + .byt 66h + .byt 67h + .byt 68h + .byt 69h + .byt 6Ah + .byt 6Bh + .byt 6Ch + .byt 6Dh + .byt 6Eh + .byt 6Fh + .byt 70h + .byt 71h + .byt 72h + .byt 73h + .byt 74h + .byt 75h + .byt 76h + .byt 77h + .byt 78h + .byt 79h + .byt 7Ah + .byt 7Bh + .byt 7Ch + .byt 7Dh + .byt 7Eh + .byt 7Fh + .byt 80h + .byt 81h + .byt 82h + .byt 83h + .byt 84h + .byt 85h + .byt 86h + .byt 87h + .byt 88h + .byt 89h + .byt 8Ah + .byt 8Bh + .byt 8Ch + .byt 8Dh + .byt 8Eh + .byt 8Fh + .byt 90h + .byt 91h + .byt 92h + .byt 93h + .byt 94h + .byt 95h + .byt 96h + .byt 97h + .byt 98h + .byt 99h + .byt 9Ah + .byt 9Bh + .byt 9Ch + .byt 9Dh + .byt 9Eh + .byt 9Fh + .byt 0A0h + .byt 0A1h + .byt 0A2h + .byt 0A3h + .byt 0A4h + .byt 0A5h + .byt 0A6h + .byt 0A7h + .byt 0A8h + .byt 0A9h + .byt 0AAh + .byt 0ABh + .byt 0ACh + .byt 0ADh + .byt 0AEh + .byt 0AFh + .byt 0B0h + .byt 0B1h + .byt 0B2h + .byt 0B3h + .byt 0B4h + .byt 0B5h + .byt 0B6h + .byt 0B7h + .byt 0B8h + .byt 0B9h + .byt 0BAh + .byt 0BBh + .byt 0BCh + .byt 0BDh + .byt 0BEh + .byt 0BFh + .byt 0C0h + .byt 0C1h + .byt 0C2h + .byt 0C3h + .byt 0C4h + .byt 0C5h + .byt 0C6h + .byt 0C7h + .byt 0C8h + .byt 0C9h + .byt 0CAh + .byt 0CBh + .byt 0CCh + .byt 0CDh + .byt 0CEh + .byt 0CFh + .byt 0D0h + .byt 0D1h + .byt 0D2h + .byt 0D3h + .byt 0D4h + .byt 0D5h + .byt 0D6h + .byt 0D7h + .byt 0D8h + .byt 0D9h + .byt 0DAh + .byt 0DBh + .byt 0DCh + .byt 0DDh + .byt 0DEh + .byt 0DFh + .byt 0E0h + .byt 0E1h + .byt 0E2h + .byt 0E3h + .byt 0E4h + .byt 0E5h + .byt 0E6h + .byt 0E7h + .byt 0E8h + .byt 0E9h + .byt 0EAh + .byt 0EBh + .byt 0ECh + .byt 0EDh + .byt 0EEh + .byt 0EFh + .byt 0F0h + .byt 0F1h + .byt 0F2h + .byt 0F3h + .byt 0F4h + .byt 0F5h + .byt 0F6h + .byt 0F7h + .byt 0F8h + .byt 0F9h + .byt 0FAh + .byt 0FBh + .byt 0FCh + .byt 0FDh + .byt 0FEh + .byt 0FFh - ; alternative hex values, always leading zero - .byt 00h - .byt 01h - .byt 02h - .byt 03h - .byt 04h - .byt 05h - .byt 06h - .byt 07h - .byt 08h - .byt 09h - .byt 0ah - .byt 0bh - .byt 0ch - .byt 0dh - .byt 0eh - .byt 0fh - .byt 010h - .byt 011h - .byt 012h - .byt 013h - .byt 014h - .byt 015h - .byt 016h - .byt 017h - .byt 018h - .byt 019h - .byt 01ah - .byt 01bh - .byt 01ch - .byt 01dh - .byt 01eh - .byt 01fh - .byt 020h - .byt 021h - .byt 022h - .byt 023h - .byt 024h - .byt 025h - .byt 026h - .byt 027h - .byt 028h - .byt 029h - .byt 02ah - .byt 02bh - .byt 02ch - .byt 02dh - .byt 02eh - .byt 02fh - .byt 030h - .byt 031h - .byt 032h - .byt 033h - .byt 034h - .byt 035h - .byt 036h - .byt 037h - .byt 038h - .byt 039h - .byt 03ah - .byt 03bh - .byt 03ch - .byt 03dh - .byt 03eh - .byt 03fh - .byt 040h - .byt 041h - .byt 042h - .byt 043h - .byt 044h - .byt 045h - .byt 046h - .byt 047h - .byt 048h - .byt 049h - .byt 04ah - .byt 04bh - .byt 04ch - .byt 04dh - .byt 04eh - .byt 04fh - .byt 050h - .byt 051h - .byt 052h - .byt 053h - .byt 054h - .byt 055h - .byt 056h - .byt 057h - .byt 058h - .byt 059h - .byt 05ah - .byt 05bh - .byt 05ch - .byt 05dh - .byt 05eh - .byt 05fh - .byt 060h - .byt 061h - .byt 062h - .byt 063h - .byt 064h - .byt 065h - .byt 066h - .byt 067h - .byt 068h - .byt 069h - .byt 06ah - .byt 06bh - .byt 06ch - .byt 06dh - .byt 06eh - .byt 06fh - .byt 070h - .byt 071h - .byt 072h - .byt 073h - .byt 074h - .byt 075h - .byt 076h - .byt 077h - .byt 078h - .byt 079h - .byt 07ah - .byt 07bh - .byt 07ch - .byt 07dh - .byt 07eh - .byt 07fh - .byt 080h - .byt 081h - .byt 082h - .byt 083h - .byt 084h - .byt 085h - .byt 086h - .byt 087h - .byt 088h - .byt 089h - .byt 08ah - .byt 08bh - .byt 08ch - .byt 08dh - .byt 08eh - .byt 08fh - .byt 090h - .byt 091h - .byt 092h - .byt 093h - .byt 094h - .byt 095h - .byt 096h - .byt 097h - .byt 098h - .byt 099h - .byt 09ah - .byt 09bh - .byt 09ch - .byt 09dh - .byt 09eh - .byt 09fh - .byt 0a0h - .byt 0a1h - .byt 0a2h - .byt 0a3h - .byt 0a4h - .byt 0a5h - .byt 0a6h - .byt 0a7h - .byt 0a8h - .byt 0a9h - .byt 0aah - .byt 0abh - .byt 0ach - .byt 0adh - .byt 0aeh - .byt 0afh - .byt 0b0h - .byt 0b1h - .byt 0b2h - .byt 0b3h - .byt 0b4h - .byt 0b5h - .byt 0b6h - .byt 0b7h - .byt 0b8h - .byt 0b9h - .byt 0bah - .byt 0bbh - .byt 0bch - .byt 0bdh - .byt 0beh - .byt 0bfh - .byt 0c0h - .byt 0c1h - .byt 0c2h - .byt 0c3h - .byt 0c4h - .byt 0c5h - .byt 0c6h - .byt 0c7h - .byt 0c8h - .byt 0c9h - .byt 0cah - .byt 0cbh - .byt 0cch - .byt 0cdh - .byt 0ceh - .byt 0cfh - .byt 0d0h - .byt 0d1h - .byt 0d2h - .byt 0d3h - .byt 0d4h - .byt 0d5h - .byt 0d6h - .byt 0d7h - .byt 0d8h - .byt 0d9h - .byt 0dah - .byt 0dbh - .byt 0dch - .byt 0ddh - .byt 0deh - .byt 0dfh - .byt 0e0h - .byt 0e1h - .byt 0e2h - .byt 0e3h - .byt 0e4h - .byt 0e5h - .byt 0e6h - .byt 0e7h - .byt 0e8h - .byt 0e9h - .byt 0eah - .byt 0ebh - .byt 0ech - .byt 0edh - .byt 0eeh - .byt 0efh - .byt 0f0h - .byt 0f1h - .byt 0f2h - .byt 0f3h - .byt 0f4h - .byt 0f5h - .byt 0f6h - .byt 0f7h - .byt 0f8h - .byt 0f9h - .byt 0fah - .byt 0fbh - .byt 0fch - .byt 0fdh - .byt 0feh - .byt 0ffh + ; alternative hex values, always leading zero + .byt 00h + .byt 01h + .byt 02h + .byt 03h + .byt 04h + .byt 05h + .byt 06h + .byt 07h + .byt 08h + .byt 09h + .byt 0ah + .byt 0bh + .byt 0ch + .byt 0dh + .byt 0eh + .byt 0fh + .byt 010h + .byt 011h + .byt 012h + .byt 013h + .byt 014h + .byt 015h + .byt 016h + .byt 017h + .byt 018h + .byt 019h + .byt 01ah + .byt 01bh + .byt 01ch + .byt 01dh + .byt 01eh + .byt 01fh + .byt 020h + .byt 021h + .byt 022h + .byt 023h + .byt 024h + .byt 025h + .byt 026h + .byt 027h + .byt 028h + .byt 029h + .byt 02ah + .byt 02bh + .byt 02ch + .byt 02dh + .byt 02eh + .byt 02fh + .byt 030h + .byt 031h + .byt 032h + .byt 033h + .byt 034h + .byt 035h + .byt 036h + .byt 037h + .byt 038h + .byt 039h + .byt 03ah + .byt 03bh + .byt 03ch + .byt 03dh + .byt 03eh + .byt 03fh + .byt 040h + .byt 041h + .byt 042h + .byt 043h + .byt 044h + .byt 045h + .byt 046h + .byt 047h + .byt 048h + .byt 049h + .byt 04ah + .byt 04bh + .byt 04ch + .byt 04dh + .byt 04eh + .byt 04fh + .byt 050h + .byt 051h + .byt 052h + .byt 053h + .byt 054h + .byt 055h + .byt 056h + .byt 057h + .byt 058h + .byt 059h + .byt 05ah + .byt 05bh + .byt 05ch + .byt 05dh + .byt 05eh + .byt 05fh + .byt 060h + .byt 061h + .byt 062h + .byt 063h + .byt 064h + .byt 065h + .byt 066h + .byt 067h + .byt 068h + .byt 069h + .byt 06ah + .byt 06bh + .byt 06ch + .byt 06dh + .byt 06eh + .byt 06fh + .byt 070h + .byt 071h + .byt 072h + .byt 073h + .byt 074h + .byt 075h + .byt 076h + .byt 077h + .byt 078h + .byt 079h + .byt 07ah + .byt 07bh + .byt 07ch + .byt 07dh + .byt 07eh + .byt 07fh + .byt 080h + .byt 081h + .byt 082h + .byt 083h + .byt 084h + .byt 085h + .byt 086h + .byt 087h + .byt 088h + .byt 089h + .byt 08ah + .byt 08bh + .byt 08ch + .byt 08dh + .byt 08eh + .byt 08fh + .byt 090h + .byt 091h + .byt 092h + .byt 093h + .byt 094h + .byt 095h + .byt 096h + .byt 097h + .byt 098h + .byt 099h + .byt 09ah + .byt 09bh + .byt 09ch + .byt 09dh + .byt 09eh + .byt 09fh + .byt 0a0h + .byt 0a1h + .byt 0a2h + .byt 0a3h + .byt 0a4h + .byt 0a5h + .byt 0a6h + .byt 0a7h + .byt 0a8h + .byt 0a9h + .byt 0aah + .byt 0abh + .byt 0ach + .byt 0adh + .byt 0aeh + .byt 0afh + .byt 0b0h + .byt 0b1h + .byt 0b2h + .byt 0b3h + .byt 0b4h + .byt 0b5h + .byt 0b6h + .byt 0b7h + .byt 0b8h + .byt 0b9h + .byt 0bah + .byt 0bbh + .byt 0bch + .byt 0bdh + .byt 0beh + .byt 0bfh + .byt 0c0h + .byt 0c1h + .byt 0c2h + .byt 0c3h + .byt 0c4h + .byt 0c5h + .byt 0c6h + .byt 0c7h + .byt 0c8h + .byt 0c9h + .byt 0cah + .byt 0cbh + .byt 0cch + .byt 0cdh + .byt 0ceh + .byt 0cfh + .byt 0d0h + .byt 0d1h + .byt 0d2h + .byt 0d3h + .byt 0d4h + .byt 0d5h + .byt 0d6h + .byt 0d7h + .byt 0d8h + .byt 0d9h + .byt 0dah + .byt 0dbh + .byt 0dch + .byt 0ddh + .byt 0deh + .byt 0dfh + .byt 0e0h + .byt 0e1h + .byt 0e2h + .byt 0e3h + .byt 0e4h + .byt 0e5h + .byt 0e6h + .byt 0e7h + .byt 0e8h + .byt 0e9h + .byt 0eah + .byt 0ebh + .byt 0ech + .byt 0edh + .byt 0eeh + .byt 0efh + .byt 0f0h + .byt 0f1h + .byt 0f2h + .byt 0f3h + .byt 0f4h + .byt 0f5h + .byt 0f6h + .byt 0f7h + .byt 0f8h + .byt 0f9h + .byt 0fah + .byt 0fbh + .byt 0fch + .byt 0fdh + .byt 0feh + .byt 0ffh - ; binary values, variable length - .byt %0 - .byt %1 - .byt %10 - .byt %11 - .byt %100 - .byt %101 - .byt %110 - .byt %111 - .byt %1000 - .byt %1001 - .byt %1010 - .byt %1011 - .byt %1100 - .byt %1101 - .byt %1110 - .byt %1111 - .byt %10000 - .byt %10001 - .byt %10010 - .byt %10011 - .byt %10100 - .byt %10101 - .byt %10110 - .byt %10111 - .byt %11000 - .byt %11001 - .byt %11010 - .byt %11011 - .byt %11100 - .byt %11101 - .byt %11110 - .byt %11111 - .byt %100000 - .byt %100001 - .byt %100010 - .byt %100011 - .byt %100100 - .byt %100101 - .byt %100110 - .byt %100111 - .byt %101000 - .byt %101001 - .byt %101010 - .byt %101011 - .byt %101100 - .byt %101101 - .byt %101110 - .byt %101111 - .byt %110000 - .byt %110001 - .byt %110010 - .byt %110011 - .byt %110100 - .byt %110101 - .byt %110110 - .byt %110111 - .byt %111000 - .byt %111001 - .byt %111010 - .byt %111011 - .byt %111100 - .byt %111101 - .byt %111110 - .byt %111111 - .byt %1000000 - .byt %1000001 - .byt %1000010 - .byt %1000011 - .byt %1000100 - .byt %1000101 - .byt %1000110 - .byt %1000111 - .byt %1001000 - .byt %1001001 - .byt %1001010 - .byt %1001011 - .byt %1001100 - .byt %1001101 - .byt %1001110 - .byt %1001111 - .byt %1010000 - .byt %1010001 - .byt %1010010 - .byt %1010011 - .byt %1010100 - .byt %1010101 - .byt %1010110 - .byt %1010111 - .byt %1011000 - .byt %1011001 - .byt %1011010 - .byt %1011011 - .byt %1011100 - .byt %1011101 - .byt %1011110 - .byt %1011111 - .byt %1100000 - .byt %1100001 - .byt %1100010 - .byt %1100011 - .byt %1100100 - .byt %1100101 - .byt %1100110 - .byt %1100111 - .byt %1101000 - .byt %1101001 - .byt %1101010 - .byt %1101011 - .byt %1101100 - .byt %1101101 - .byt %1101110 - .byt %1101111 - .byt %1110000 - .byt %1110001 - .byt %1110010 - .byt %1110011 - .byt %1110100 - .byt %1110101 - .byt %1110110 - .byt %1110111 - .byt %1111000 - .byt %1111001 - .byt %1111010 - .byt %1111011 - .byt %1111100 - .byt %1111101 - .byt %1111110 - .byt %1111111 - .byt %10000000 - .byt %10000001 - .byt %10000010 - .byt %10000011 - .byt %10000100 - .byt %10000101 - .byt %10000110 - .byt %10000111 - .byt %10001000 - .byt %10001001 - .byt %10001010 - .byt %10001011 - .byt %10001100 - .byt %10001101 - .byt %10001110 - .byt %10001111 - .byt %10010000 - .byt %10010001 - .byt %10010010 - .byt %10010011 - .byt %10010100 - .byt %10010101 - .byt %10010110 - .byt %10010111 - .byt %10011000 - .byt %10011001 - .byt %10011010 - .byt %10011011 - .byt %10011100 - .byt %10011101 - .byt %10011110 - .byt %10011111 - .byt %10100000 - .byt %10100001 - .byt %10100010 - .byt %10100011 - .byt %10100100 - .byt %10100101 - .byt %10100110 - .byt %10100111 - .byt %10101000 - .byt %10101001 - .byt %10101010 - .byt %10101011 - .byt %10101100 - .byt %10101101 - .byt %10101110 - .byt %10101111 - .byt %10110000 - .byt %10110001 - .byt %10110010 - .byt %10110011 - .byt %10110100 - .byt %10110101 - .byt %10110110 - .byt %10110111 - .byt %10111000 - .byt %10111001 - .byt %10111010 - .byt %10111011 - .byt %10111100 - .byt %10111101 - .byt %10111110 - .byt %10111111 - .byt %11000000 - .byt %11000001 - .byt %11000010 - .byt %11000011 - .byt %11000100 - .byt %11000101 - .byt %11000110 - .byt %11000111 - .byt %11001000 - .byt %11001001 - .byt %11001010 - .byt %11001011 - .byt %11001100 - .byt %11001101 - .byt %11001110 - .byt %11001111 - .byt %11010000 - .byt %11010001 - .byt %11010010 - .byt %11010011 - .byt %11010100 - .byt %11010101 - .byt %11010110 - .byt %11010111 - .byt %11011000 - .byt %11011001 - .byt %11011010 - .byt %11011011 - .byt %11011100 - .byt %11011101 - .byt %11011110 - .byt %11011111 - .byt %11100000 - .byt %11100001 - .byt %11100010 - .byt %11100011 - .byt %11100100 - .byt %11100101 - .byt %11100110 - .byt %11100111 - .byt %11101000 - .byt %11101001 - .byt %11101010 - .byt %11101011 - .byt %11101100 - .byt %11101101 - .byt %11101110 - .byt %11101111 - .byt %11110000 - .byt %11110001 - .byt %11110010 - .byt %11110011 - .byt %11110100 - .byt %11110101 - .byt %11110110 - .byt %11110111 - .byt %11111000 - .byt %11111001 - .byt %11111010 - .byt %11111011 - .byt %11111100 - .byt %11111101 - .byt %11111110 - .byt %11111111 + ; binary values, variable length + .byt %0 + .byt %1 + .byt %10 + .byt %11 + .byt %100 + .byt %101 + .byt %110 + .byt %111 + .byt %1000 + .byt %1001 + .byt %1010 + .byt %1011 + .byt %1100 + .byt %1101 + .byt %1110 + .byt %1111 + .byt %10000 + .byt %10001 + .byt %10010 + .byt %10011 + .byt %10100 + .byt %10101 + .byt %10110 + .byt %10111 + .byt %11000 + .byt %11001 + .byt %11010 + .byt %11011 + .byt %11100 + .byt %11101 + .byt %11110 + .byt %11111 + .byt %100000 + .byt %100001 + .byt %100010 + .byt %100011 + .byt %100100 + .byt %100101 + .byt %100110 + .byt %100111 + .byt %101000 + .byt %101001 + .byt %101010 + .byt %101011 + .byt %101100 + .byt %101101 + .byt %101110 + .byt %101111 + .byt %110000 + .byt %110001 + .byt %110010 + .byt %110011 + .byt %110100 + .byt %110101 + .byt %110110 + .byt %110111 + .byt %111000 + .byt %111001 + .byt %111010 + .byt %111011 + .byt %111100 + .byt %111101 + .byt %111110 + .byt %111111 + .byt %1000000 + .byt %1000001 + .byt %1000010 + .byt %1000011 + .byt %1000100 + .byt %1000101 + .byt %1000110 + .byt %1000111 + .byt %1001000 + .byt %1001001 + .byt %1001010 + .byt %1001011 + .byt %1001100 + .byt %1001101 + .byt %1001110 + .byt %1001111 + .byt %1010000 + .byt %1010001 + .byt %1010010 + .byt %1010011 + .byt %1010100 + .byt %1010101 + .byt %1010110 + .byt %1010111 + .byt %1011000 + .byt %1011001 + .byt %1011010 + .byt %1011011 + .byt %1011100 + .byt %1011101 + .byt %1011110 + .byt %1011111 + .byt %1100000 + .byt %1100001 + .byt %1100010 + .byt %1100011 + .byt %1100100 + .byt %1100101 + .byt %1100110 + .byt %1100111 + .byt %1101000 + .byt %1101001 + .byt %1101010 + .byt %1101011 + .byt %1101100 + .byt %1101101 + .byt %1101110 + .byt %1101111 + .byt %1110000 + .byt %1110001 + .byt %1110010 + .byt %1110011 + .byt %1110100 + .byt %1110101 + .byt %1110110 + .byt %1110111 + .byt %1111000 + .byt %1111001 + .byt %1111010 + .byt %1111011 + .byt %1111100 + .byt %1111101 + .byt %1111110 + .byt %1111111 + .byt %10000000 + .byt %10000001 + .byt %10000010 + .byt %10000011 + .byt %10000100 + .byt %10000101 + .byt %10000110 + .byt %10000111 + .byt %10001000 + .byt %10001001 + .byt %10001010 + .byt %10001011 + .byt %10001100 + .byt %10001101 + .byt %10001110 + .byt %10001111 + .byt %10010000 + .byt %10010001 + .byt %10010010 + .byt %10010011 + .byt %10010100 + .byt %10010101 + .byt %10010110 + .byt %10010111 + .byt %10011000 + .byt %10011001 + .byt %10011010 + .byt %10011011 + .byt %10011100 + .byt %10011101 + .byt %10011110 + .byt %10011111 + .byt %10100000 + .byt %10100001 + .byt %10100010 + .byt %10100011 + .byt %10100100 + .byt %10100101 + .byt %10100110 + .byt %10100111 + .byt %10101000 + .byt %10101001 + .byt %10101010 + .byt %10101011 + .byt %10101100 + .byt %10101101 + .byt %10101110 + .byt %10101111 + .byt %10110000 + .byt %10110001 + .byt %10110010 + .byt %10110011 + .byt %10110100 + .byt %10110101 + .byt %10110110 + .byt %10110111 + .byt %10111000 + .byt %10111001 + .byt %10111010 + .byt %10111011 + .byt %10111100 + .byt %10111101 + .byt %10111110 + .byt %10111111 + .byt %11000000 + .byt %11000001 + .byt %11000010 + .byt %11000011 + .byt %11000100 + .byt %11000101 + .byt %11000110 + .byt %11000111 + .byt %11001000 + .byt %11001001 + .byt %11001010 + .byt %11001011 + .byt %11001100 + .byt %11001101 + .byt %11001110 + .byt %11001111 + .byt %11010000 + .byt %11010001 + .byt %11010010 + .byt %11010011 + .byt %11010100 + .byt %11010101 + .byt %11010110 + .byt %11010111 + .byt %11011000 + .byt %11011001 + .byt %11011010 + .byt %11011011 + .byt %11011100 + .byt %11011101 + .byt %11011110 + .byt %11011111 + .byt %11100000 + .byt %11100001 + .byt %11100010 + .byt %11100011 + .byt %11100100 + .byt %11100101 + .byt %11100110 + .byt %11100111 + .byt %11101000 + .byt %11101001 + .byt %11101010 + .byt %11101011 + .byt %11101100 + .byt %11101101 + .byt %11101110 + .byt %11101111 + .byt %11110000 + .byt %11110001 + .byt %11110010 + .byt %11110011 + .byt %11110100 + .byt %11110101 + .byt %11110110 + .byt %11110111 + .byt %11111000 + .byt %11111001 + .byt %11111010 + .byt %11111011 + .byt %11111100 + .byt %11111101 + .byt %11111110 + .byt %11111111 - ; binary values, full length - .byt %00000000 - .byt %00000001 - .byt %00000010 - .byt %00000011 - .byt %00000100 - .byt %00000101 - .byt %00000110 - .byt %00000111 - .byt %00001000 - .byt %00001001 - .byt %00001010 - .byt %00001011 - .byt %00001100 - .byt %00001101 - .byt %00001110 - .byt %00001111 - .byt %00010000 - .byt %00010001 - .byt %00010010 - .byt %00010011 - .byt %00010100 - .byt %00010101 - .byt %00010110 - .byt %00010111 - .byt %00011000 - .byt %00011001 - .byt %00011010 - .byt %00011011 - .byt %00011100 - .byt %00011101 - .byt %00011110 - .byt %00011111 - .byt %00100000 - .byt %00100001 - .byt %00100010 - .byt %00100011 - .byt %00100100 - .byt %00100101 - .byt %00100110 - .byt %00100111 - .byt %00101000 - .byt %00101001 - .byt %00101010 - .byt %00101011 - .byt %00101100 - .byt %00101101 - .byt %00101110 - .byt %00101111 - .byt %00110000 - .byt %00110001 - .byt %00110010 - .byt %00110011 - .byt %00110100 - .byt %00110101 - .byt %00110110 - .byt %00110111 - .byt %00111000 - .byt %00111001 - .byt %00111010 - .byt %00111011 - .byt %00111100 - .byt %00111101 - .byt %00111110 - .byt %00111111 - .byt %01000000 - .byt %01000001 - .byt %01000010 - .byt %01000011 - .byt %01000100 - .byt %01000101 - .byt %01000110 - .byt %01000111 - .byt %01001000 - .byt %01001001 - .byt %01001010 - .byt %01001011 - .byt %01001100 - .byt %01001101 - .byt %01001110 - .byt %01001111 - .byt %01010000 - .byt %01010001 - .byt %01010010 - .byt %01010011 - .byt %01010100 - .byt %01010101 - .byt %01010110 - .byt %01010111 - .byt %01011000 - .byt %01011001 - .byt %01011010 - .byt %01011011 - .byt %01011100 - .byt %01011101 - .byt %01011110 - .byt %01011111 - .byt %01100000 - .byt %01100001 - .byt %01100010 - .byt %01100011 - .byt %01100100 - .byt %01100101 - .byt %01100110 - .byt %01100111 - .byt %01101000 - .byt %01101001 - .byt %01101010 - .byt %01101011 - .byt %01101100 - .byt %01101101 - .byt %01101110 - .byt %01101111 - .byt %01110000 - .byt %01110001 - .byt %01110010 - .byt %01110011 - .byt %01110100 - .byt %01110101 - .byt %01110110 - .byt %01110111 - .byt %01111000 - .byt %01111001 - .byt %01111010 - .byt %01111011 - .byt %01111100 - .byt %01111101 - .byt %01111110 - .byt %01111111 - .byt %10000000 - .byt %10000001 - .byt %10000010 - .byt %10000011 - .byt %10000100 - .byt %10000101 - .byt %10000110 - .byt %10000111 - .byt %10001000 - .byt %10001001 - .byt %10001010 - .byt %10001011 - .byt %10001100 - .byt %10001101 - .byt %10001110 - .byt %10001111 - .byt %10010000 - .byt %10010001 - .byt %10010010 - .byt %10010011 - .byt %10010100 - .byt %10010101 - .byt %10010110 - .byt %10010111 - .byt %10011000 - .byt %10011001 - .byt %10011010 - .byt %10011011 - .byt %10011100 - .byt %10011101 - .byt %10011110 - .byt %10011111 - .byt %10100000 - .byt %10100001 - .byt %10100010 - .byt %10100011 - .byt %10100100 - .byt %10100101 - .byt %10100110 - .byt %10100111 - .byt %10101000 - .byt %10101001 - .byt %10101010 - .byt %10101011 - .byt %10101100 - .byt %10101101 - .byt %10101110 - .byt %10101111 - .byt %10110000 - .byt %10110001 - .byt %10110010 - .byt %10110011 - .byt %10110100 - .byt %10110101 - .byt %10110110 - .byt %10110111 - .byt %10111000 - .byt %10111001 - .byt %10111010 - .byt %10111011 - .byt %10111100 - .byt %10111101 - .byt %10111110 - .byt %10111111 - .byt %11000000 - .byt %11000001 - .byt %11000010 - .byt %11000011 - .byt %11000100 - .byt %11000101 - .byt %11000110 - .byt %11000111 - .byt %11001000 - .byt %11001001 - .byt %11001010 - .byt %11001011 - .byt %11001100 - .byt %11001101 - .byt %11001110 - .byt %11001111 - .byt %11010000 - .byt %11010001 - .byt %11010010 - .byt %11010011 - .byt %11010100 - .byt %11010101 - .byt %11010110 - .byt %11010111 - .byt %11011000 - .byt %11011001 - .byt %11011010 - .byt %11011011 - .byt %11011100 - .byt %11011101 - .byt %11011110 - .byt %11011111 - .byt %11100000 - .byt %11100001 - .byt %11100010 - .byt %11100011 - .byt %11100100 - .byt %11100101 - .byt %11100110 - .byt %11100111 - .byt %11101000 - .byt %11101001 - .byt %11101010 - .byt %11101011 - .byt %11101100 - .byt %11101101 - .byt %11101110 - .byt %11101111 - .byt %11110000 - .byt %11110001 - .byt %11110010 - .byt %11110011 - .byt %11110100 - .byt %11110101 - .byt %11110110 - .byt %11110111 - .byt %11111000 - .byt %11111001 - .byt %11111010 - .byt %11111011 - .byt %11111100 - .byt %11111101 - .byt %11111110 - .byt %11111111 + ; binary values, full length + .byt %00000000 + .byt %00000001 + .byt %00000010 + .byt %00000011 + .byt %00000100 + .byt %00000101 + .byt %00000110 + .byt %00000111 + .byt %00001000 + .byt %00001001 + .byt %00001010 + .byt %00001011 + .byt %00001100 + .byt %00001101 + .byt %00001110 + .byt %00001111 + .byt %00010000 + .byt %00010001 + .byt %00010010 + .byt %00010011 + .byt %00010100 + .byt %00010101 + .byt %00010110 + .byt %00010111 + .byt %00011000 + .byt %00011001 + .byt %00011010 + .byt %00011011 + .byt %00011100 + .byt %00011101 + .byt %00011110 + .byt %00011111 + .byt %00100000 + .byt %00100001 + .byt %00100010 + .byt %00100011 + .byt %00100100 + .byt %00100101 + .byt %00100110 + .byt %00100111 + .byt %00101000 + .byt %00101001 + .byt %00101010 + .byt %00101011 + .byt %00101100 + .byt %00101101 + .byt %00101110 + .byt %00101111 + .byt %00110000 + .byt %00110001 + .byt %00110010 + .byt %00110011 + .byt %00110100 + .byt %00110101 + .byt %00110110 + .byt %00110111 + .byt %00111000 + .byt %00111001 + .byt %00111010 + .byt %00111011 + .byt %00111100 + .byt %00111101 + .byt %00111110 + .byt %00111111 + .byt %01000000 + .byt %01000001 + .byt %01000010 + .byt %01000011 + .byt %01000100 + .byt %01000101 + .byt %01000110 + .byt %01000111 + .byt %01001000 + .byt %01001001 + .byt %01001010 + .byt %01001011 + .byt %01001100 + .byt %01001101 + .byt %01001110 + .byt %01001111 + .byt %01010000 + .byt %01010001 + .byt %01010010 + .byt %01010011 + .byt %01010100 + .byt %01010101 + .byt %01010110 + .byt %01010111 + .byt %01011000 + .byt %01011001 + .byt %01011010 + .byt %01011011 + .byt %01011100 + .byt %01011101 + .byt %01011110 + .byt %01011111 + .byt %01100000 + .byt %01100001 + .byt %01100010 + .byt %01100011 + .byt %01100100 + .byt %01100101 + .byt %01100110 + .byt %01100111 + .byt %01101000 + .byt %01101001 + .byt %01101010 + .byt %01101011 + .byt %01101100 + .byt %01101101 + .byt %01101110 + .byt %01101111 + .byt %01110000 + .byt %01110001 + .byt %01110010 + .byt %01110011 + .byt %01110100 + .byt %01110101 + .byt %01110110 + .byt %01110111 + .byt %01111000 + .byt %01111001 + .byt %01111010 + .byt %01111011 + .byt %01111100 + .byt %01111101 + .byt %01111110 + .byt %01111111 + .byt %10000000 + .byt %10000001 + .byt %10000010 + .byt %10000011 + .byt %10000100 + .byt %10000101 + .byt %10000110 + .byt %10000111 + .byt %10001000 + .byt %10001001 + .byt %10001010 + .byt %10001011 + .byt %10001100 + .byt %10001101 + .byt %10001110 + .byt %10001111 + .byt %10010000 + .byt %10010001 + .byt %10010010 + .byt %10010011 + .byt %10010100 + .byt %10010101 + .byt %10010110 + .byt %10010111 + .byt %10011000 + .byt %10011001 + .byt %10011010 + .byt %10011011 + .byt %10011100 + .byt %10011101 + .byt %10011110 + .byt %10011111 + .byt %10100000 + .byt %10100001 + .byt %10100010 + .byt %10100011 + .byt %10100100 + .byt %10100101 + .byt %10100110 + .byt %10100111 + .byt %10101000 + .byt %10101001 + .byt %10101010 + .byt %10101011 + .byt %10101100 + .byt %10101101 + .byt %10101110 + .byt %10101111 + .byt %10110000 + .byt %10110001 + .byt %10110010 + .byt %10110011 + .byt %10110100 + .byt %10110101 + .byt %10110110 + .byt %10110111 + .byt %10111000 + .byt %10111001 + .byt %10111010 + .byt %10111011 + .byt %10111100 + .byt %10111101 + .byt %10111110 + .byt %10111111 + .byt %11000000 + .byt %11000001 + .byt %11000010 + .byt %11000011 + .byt %11000100 + .byt %11000101 + .byt %11000110 + .byt %11000111 + .byt %11001000 + .byt %11001001 + .byt %11001010 + .byt %11001011 + .byt %11001100 + .byt %11001101 + .byt %11001110 + .byt %11001111 + .byt %11010000 + .byt %11010001 + .byt %11010010 + .byt %11010011 + .byt %11010100 + .byt %11010101 + .byt %11010110 + .byt %11010111 + .byt %11011000 + .byt %11011001 + .byt %11011010 + .byt %11011011 + .byt %11011100 + .byt %11011101 + .byt %11011110 + .byt %11011111 + .byt %11100000 + .byt %11100001 + .byt %11100010 + .byt %11100011 + .byt %11100100 + .byt %11100101 + .byt %11100110 + .byt %11100111 + .byt %11101000 + .byt %11101001 + .byt %11101010 + .byt %11101011 + .byt %11101100 + .byt %11101101 + .byt %11101110 + .byt %11101111 + .byt %11110000 + .byt %11110001 + .byt %11110010 + .byt %11110011 + .byt %11110100 + .byt %11110101 + .byt %11110110 + .byt %11110111 + .byt %11111000 + .byt %11111001 + .byt %11111010 + .byt %11111011 + .byt %11111100 + .byt %11111101 + .byt %11111110 + .byt %11111111 - ; some character values - .byt ' ' - .byt '!' - .byt '"' - .byt '#' - .byt '$' - .byt '%' - .byt '&' - .byt ''' - .byt '(' - .byt ')' - .byt '*' - .byt '+' - .byt ',' - .byt '-' - .byt '.' - .byt '/' - .byt '0' - .byt '1' - .byt '2' - .byt '3' - .byt '4' - .byt '5' - .byt '6' - .byt '7' - .byt '8' - .byt '9' - .byt ':' - .byt ';' - .byt '<' - .byt '=' - .byt '>' - .byt '?' - .byt '@' - .byt 'A' - .byt 'B' - .byt 'C' - .byt 'D' - .byt 'E' - .byt 'F' - .byt 'G' - .byt 'H' - .byt 'I' - .byt 'J' - .byt 'K' - .byt 'L' - .byt 'M' - .byt 'N' - .byt 'O' - .byt 'P' - .byt 'Q' - .byt 'R' - .byt 'S' - .byt 'T' - .byt 'U' - .byt 'V' - .byt 'W' - .byt 'X' - .byt 'Y' - .byt 'Z' - .byt '[' - .byt '\' - .byt ']' - .byt '^' - .byt '_' - .byt '`' - .byt 'a' - .byt 'b' - .byt 'c' - .byt 'd' - .byt 'e' - .byt 'f' - .byt 'g' - .byt 'h' - .byt 'i' - .byt 'j' - .byt 'k' - .byt 'l' - .byt 'm' - .byt 'n' - .byt 'o' - .byt 'p' - .byt 'q' - .byt 'r' - .byt 's' - .byt 't' - .byt 'u' - .byt 'v' - .byt 'w' - .byt 'x' - .byt 'y' - .byt 'z' - .byt '{' - .byt '|' - .byt '}' - .byt '~' + ; some character values + .byt ' ' + .byt '!' + .byt '"' + .byt '#' + .byt '$' + .byt '%' + .byt '&' + .byt ''' + .byt '(' + .byt ')' + .byt '*' + .byt '+' + .byt ',' + .byt '-' + .byt '.' + .byt '/' + .byt '0' + .byt '1' + .byt '2' + .byt '3' + .byt '4' + .byt '5' + .byt '6' + .byt '7' + .byt '8' + .byt '9' + .byt ':' + .byt ';' + .byt '<' + .byt '=' + .byt '>' + .byt '?' + .byt '@' + .byt 'A' + .byt 'B' + .byt 'C' + .byt 'D' + .byt 'E' + .byt 'F' + .byt 'G' + .byt 'H' + .byt 'I' + .byt 'J' + .byt 'K' + .byt 'L' + .byt 'M' + .byt 'N' + .byt 'O' + .byt 'P' + .byt 'Q' + .byt 'R' + .byt 'S' + .byt 'T' + .byt 'U' + .byt 'V' + .byt 'W' + .byt 'X' + .byt 'Y' + .byt 'Z' + .byt '[' + .byt '\' + .byt ']' + .byt '^' + .byt '_' + .byt '`' + .byt 'a' + .byt 'b' + .byt 'c' + .byt 'd' + .byt 'e' + .byt 'f' + .byt 'g' + .byt 'h' + .byt 'i' + .byt 'j' + .byt 'k' + .byt 'l' + .byt 'm' + .byt 'n' + .byt 'o' + .byt 'p' + .byt 'q' + .byt 'r' + .byt 's' + .byt 't' + .byt 'u' + .byt 'v' + .byt 'w' + .byt 'x' + .byt 'y' + .byt 'z' + .byt '{' + .byt '|' + .byt '}' + .byt '~' - ; multiple values on one line, decimal - .byt 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - .byt 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 - .byt 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 - .byt 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 - .byt 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 - .byt 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95 - .byt 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 - .byt 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 - .byt 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 - .byt 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 - .byt 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 - .byt 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 - .byt 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 - .byt 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 - .byt 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 - .byt 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + ; multiple values on one line, decimal + .byt 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .byt 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .byt 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 + .byt 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 + .byt 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79 + .byt 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95 + .byt 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 + .byt 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .byt 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .byt 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 + .byt 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 + .byt 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 + .byt 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 + .byt 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 + .byt 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 + .byt 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 - ; multiple values on one line, hex - .byt $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f - .byt $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f - .byt $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f - .byt $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f - .byt $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f - .byt $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$5b,$5c,$5d,$5e,$5f - .byt $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f - .byt $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f - .byt $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f - .byt $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f - .byt $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af - .byt $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf - .byt $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf - .byt $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df - .byt $e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef - .byt $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + ; multiple values on one line, hex + .byt $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .byt $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .byt $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f + .byt $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f + .byt $40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f + .byt $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$5b,$5c,$5d,$5e,$5f + .byt $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f + .byt $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .byt $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .byt $90,$91,$92,$93,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f + .byt $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af + .byt $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf + .byt $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf + .byt $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df + .byt $e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef + .byt $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff - ; multiple values on one line, alternative hex - .byt 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh - .byt 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh - .byt 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,2ah,2bh,2ch,2dh,2eh,2fh - .byt 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,3ah,3bh,3ch,3dh,3eh,3fh - .byt 40h,41h,42h,43h,44h,45h,46h,47h,48h,49h,4ah,4bh,4ch,4dh,4eh,4fh - .byt 50h,51h,52h,53h,54h,55h,56h,57h,58h,59h,5ah,5bh,5ch,5dh,5eh,5fh - .byt 60h,61h,62h,63h,64h,65h,66h,67h,68h,69h,6ah,6bh,6ch,6dh,6eh,6fh - .byt 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh - .byt 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh - .byt 90h,91h,92h,93h,94h,95h,96h,97h,98h,99h,9ah,9bh,9ch,9dh,9eh,9fh - .byt 0a0h,0a1h,0a2h,0a3h,0a4h,0a5h,0a6h,0a7h,0a8h,0a9h,0aah,0abh,0ach,0adh,0aeh,0afh - .byt 0b0h,0b1h,0b2h,0b3h,0b4h,0b5h,0b6h,0b7h,0b8h,0b9h,0bah,0bbh,0bch,0bdh,0beh,0bfh - .byt 0c0h,0c1h,0c2h,0c3h,0c4h,0c5h,0c6h,0c7h,0c8h,0c9h,0cah,0cbh,0cch,0cdh,0ceh,0cfh - .byt 0d0h,0d1h,0d2h,0d3h,0d4h,0d5h,0d6h,0d7h,0d8h,0d9h,0dah,0dbh,0dch,0ddh,0deh,0dfh - .byt 0e0h,0e1h,0e2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0e9h,0eah,0ebh,0ech,0edh,0eeh,0efh - .byt 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + ; multiple values on one line, alternative hex + .byt 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .byt 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .byt 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,2ah,2bh,2ch,2dh,2eh,2fh + .byt 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,3ah,3bh,3ch,3dh,3eh,3fh + .byt 40h,41h,42h,43h,44h,45h,46h,47h,48h,49h,4ah,4bh,4ch,4dh,4eh,4fh + .byt 50h,51h,52h,53h,54h,55h,56h,57h,58h,59h,5ah,5bh,5ch,5dh,5eh,5fh + .byt 60h,61h,62h,63h,64h,65h,66h,67h,68h,69h,6ah,6bh,6ch,6dh,6eh,6fh + .byt 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .byt 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .byt 90h,91h,92h,93h,94h,95h,96h,97h,98h,99h,9ah,9bh,9ch,9dh,9eh,9fh + .byt 0a0h,0a1h,0a2h,0a3h,0a4h,0a5h,0a6h,0a7h,0a8h,0a9h,0aah,0abh,0ach,0adh,0aeh,0afh + .byt 0b0h,0b1h,0b2h,0b3h,0b4h,0b5h,0b6h,0b7h,0b8h,0b9h,0bah,0bbh,0bch,0bdh,0beh,0bfh + .byt 0c0h,0c1h,0c2h,0c3h,0c4h,0c5h,0c6h,0c7h,0c8h,0c9h,0cah,0cbh,0cch,0cdh,0ceh,0cfh + .byt 0d0h,0d1h,0d2h,0d3h,0d4h,0d5h,0d6h,0d7h,0d8h,0d9h,0dah,0dbh,0dch,0ddh,0deh,0dfh + .byt 0e0h,0e1h,0e2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0e9h,0eah,0ebh,0ech,0edh,0eeh,0efh + .byt 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh - ; multiple values on one line, characters - .byt ' ','!','"','#','$','%','&',''','(',')','*','+',',','-','.','/' - .byt '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?' - .byt '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O' - .byt 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_' - .byt '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o' - .byt 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~' + ; multiple values on one line, characters + .byt ' ','!','"','#','$','%','&',''','(',')','*','+',',','-','.','/' + .byt '0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?' + .byt '@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O' + .byt 'P','Q','R','S','T','U','V','W','X','Y','Z','[','\',']','^','_' + .byt '`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o' + .byt 'p','q','r','s','t','u','v','w','x','y','z','{','|','}','~' - ; some character strings - .byt " !#$%&'()*+,-." - .byt "0123456789:;<=>" - .byt "@ABCDEFGHIJKLMN" - .byt "PQRSTUVWXYZ[\]^" - .byt "`abcdefghijklmn" - .byt "pqrstuvwxyz{|}" + ; some character strings + .byt " !#$%&'()*+,-." + .byt "0123456789:;<=>" + .byt "@ABCDEFGHIJKLMN" + .byt "PQRSTUVWXYZ[\]^" + .byt "`abcdefghijklmn" + .byt "pqrstuvwxyz{|}" - ; mix some variants - .byt 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh + ; mix some variants + .byt 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/102-word.list-ref b/test/asm/listing/102-word.list-ref index 255db3714..3d55bc3fb 100644 --- a/test/asm/listing/102-word.list-ref +++ b/test/asm/listing/102-word.list-ref @@ -4,6223 +4,6223 @@ Current file: 102-word.s 000000r 1 ; 2022-06-15 Spiro Trikaliotis 000000r 1 000000r 1 -000000r 1 ; upper case pseudo-op -000000r 1 00 00 .WORD 0 -000002r 1 01 00 .WORD 1 -000004r 1 02 00 .WORD 2 -000006r 1 03 00 .WORD 3 -000008r 1 04 00 .WORD 4 -00000Ar 1 05 00 .WORD 5 -00000Cr 1 06 00 .WORD 6 -00000Er 1 07 00 .WORD 7 -000010r 1 08 00 .WORD 8 -000012r 1 09 00 .WORD 9 -000014r 1 0A 00 .WORD 10 -000016r 1 0B 00 .WORD 11 -000018r 1 0C 00 .WORD 12 -00001Ar 1 0D 00 .WORD 13 -00001Cr 1 0E 00 .WORD 14 -00001Er 1 0F 00 .WORD 15 -000020r 1 10 00 .WORD 16 -000022r 1 11 00 .WORD 17 -000024r 1 12 00 .WORD 18 -000026r 1 13 00 .WORD 19 -000028r 1 70 00 .WORD 112 -00002Ar 1 71 00 .WORD 113 -00002Cr 1 72 00 .WORD 114 -00002Er 1 73 00 .WORD 115 -000030r 1 74 00 .WORD 116 -000032r 1 75 00 .WORD 117 -000034r 1 76 00 .WORD 118 -000036r 1 77 00 .WORD 119 -000038r 1 78 00 .WORD 120 -00003Ar 1 79 00 .WORD 121 -00003Cr 1 7A 00 .WORD 122 -00003Er 1 7B 00 .WORD 123 -000040r 1 7C 00 .WORD 124 -000042r 1 7D 00 .WORD 125 -000044r 1 7E 00 .WORD 126 -000046r 1 7F 00 .WORD 127 -000048r 1 80 00 .WORD 128 -00004Ar 1 81 00 .WORD 129 -00004Cr 1 82 00 .WORD 130 -00004Er 1 83 00 .WORD 131 -000050r 1 84 00 .WORD 132 -000052r 1 85 00 .WORD 133 -000054r 1 86 00 .WORD 134 -000056r 1 F0 00 .WORD 240 -000058r 1 F1 00 .WORD 241 -00005Ar 1 F2 00 .WORD 242 -00005Cr 1 F3 00 .WORD 243 -00005Er 1 F4 00 .WORD 244 -000060r 1 F5 00 .WORD 245 -000062r 1 F6 00 .WORD 246 -000064r 1 F7 00 .WORD 247 -000066r 1 F8 00 .WORD 248 -000068r 1 F9 00 .WORD 249 -00006Ar 1 FA 00 .WORD 250 -00006Cr 1 FB 00 .WORD 251 -00006Er 1 FC 00 .WORD 252 -000070r 1 FD 00 .WORD 253 -000072r 1 FE 00 .WORD 254 -000074r 1 FF 00 .WORD 255 -000076r 1 00 01 .WORD 256 -000078r 1 01 01 .WORD 257 -00007Ar 1 02 01 .WORD 258 -00007Cr 1 03 01 .WORD 259 -00007Er 1 D2 0F .WORD 4050 -000080r 1 D3 0F .WORD 4051 -000082r 1 D4 0F .WORD 4052 -000084r 1 D5 0F .WORD 4053 -000086r 1 D6 0F .WORD 4054 -000088r 1 D7 0F .WORD 4055 -00008Ar 1 D8 0F .WORD 4056 -00008Cr 1 D9 0F .WORD 4057 -00008Er 1 DA 0F .WORD 4058 -000090r 1 DB 0F .WORD 4059 -000092r 1 DC 0F .WORD 4060 -000094r 1 DD 0F .WORD 4061 -000096r 1 DE 0F .WORD 4062 -000098r 1 DF 0F .WORD 4063 -00009Ar 1 E0 0F .WORD 4064 -00009Cr 1 E1 0F .WORD 4065 -00009Er 1 E2 0F .WORD 4066 -0000A0r 1 E3 0F .WORD 4067 -0000A2r 1 E4 0F .WORD 4068 -0000A4r 1 E5 0F .WORD 4069 -0000A6r 1 E6 0F .WORD 4070 -0000A8r 1 E7 0F .WORD 4071 -0000AAr 1 E8 0F .WORD 4072 -0000ACr 1 E9 0F .WORD 4073 -0000AEr 1 EA 0F .WORD 4074 -0000B0r 1 EB 0F .WORD 4075 -0000B2r 1 EC 0F .WORD 4076 -0000B4r 1 ED 0F .WORD 4077 -0000B6r 1 EE 0F .WORD 4078 -0000B8r 1 EF 0F .WORD 4079 -0000BAr 1 F0 0F .WORD 4080 -0000BCr 1 F1 0F .WORD 4081 -0000BEr 1 F2 0F .WORD 4082 -0000C0r 1 F3 0F .WORD 4083 -0000C2r 1 F4 0F .WORD 4084 -0000C4r 1 F5 0F .WORD 4085 -0000C6r 1 F6 0F .WORD 4086 -0000C8r 1 F7 0F .WORD 4087 -0000CAr 1 F8 0F .WORD 4088 -0000CCr 1 F9 0F .WORD 4089 -0000CEr 1 FA 0F .WORD 4090 -0000D0r 1 FB 0F .WORD 4091 -0000D2r 1 FC 0F .WORD 4092 -0000D4r 1 FD 0F .WORD 4093 -0000D6r 1 FE 0F .WORD 4094 -0000D8r 1 FF 0F .WORD 4095 -0000DAr 1 00 10 .WORD 4096 -0000DCr 1 01 10 .WORD 4097 -0000DEr 1 02 10 .WORD 4098 -0000E0r 1 03 10 .WORD 4099 -0000E2r 1 04 10 .WORD 4100 -0000E4r 1 05 10 .WORD 4101 -0000E6r 1 06 10 .WORD 4102 -0000E8r 1 07 10 .WORD 4103 -0000EAr 1 08 10 .WORD 4104 -0000ECr 1 F0 7F .WORD 32752 -0000EEr 1 F1 7F .WORD 32753 -0000F0r 1 F2 7F .WORD 32754 -0000F2r 1 F3 7F .WORD 32755 -0000F4r 1 F4 7F .WORD 32756 -0000F6r 1 F5 7F .WORD 32757 -0000F8r 1 F6 7F .WORD 32758 -0000FAr 1 F7 7F .WORD 32759 -0000FCr 1 F8 7F .WORD 32760 -0000FEr 1 F9 7F .WORD 32761 -000100r 1 FA 7F .WORD 32762 -000102r 1 FB 7F .WORD 32763 -000104r 1 FC 7F .WORD 32764 -000106r 1 FD 7F .WORD 32765 -000108r 1 FE 7F .WORD 32766 -00010Ar 1 FF 7F .WORD 32767 -00010Cr 1 00 80 .WORD 32768 -00010Er 1 01 80 .WORD 32769 -000110r 1 02 80 .WORD 32770 -000112r 1 03 80 .WORD 32771 -000114r 1 04 80 .WORD 32772 -000116r 1 05 80 .WORD 32773 -000118r 1 06 80 .WORD 32774 -00011Ar 1 07 80 .WORD 32775 -00011Cr 1 08 80 .WORD 32776 -00011Er 1 09 80 .WORD 32777 -000120r 1 0A 80 .WORD 32778 -000122r 1 0B 80 .WORD 32779 -000124r 1 E1 9F .WORD 40929 -000126r 1 E2 9F .WORD 40930 -000128r 1 E3 9F .WORD 40931 -00012Ar 1 E4 9F .WORD 40932 -00012Cr 1 E5 9F .WORD 40933 -00012Er 1 E6 9F .WORD 40934 -000130r 1 E7 9F .WORD 40935 -000132r 1 E8 9F .WORD 40936 -000134r 1 E9 9F .WORD 40937 -000136r 1 EA 9F .WORD 40938 -000138r 1 EB 9F .WORD 40939 -00013Ar 1 EC 9F .WORD 40940 -00013Cr 1 ED 9F .WORD 40941 -00013Er 1 EE 9F .WORD 40942 -000140r 1 EF 9F .WORD 40943 -000142r 1 F0 9F .WORD 40944 -000144r 1 F1 9F .WORD 40945 -000146r 1 F2 9F .WORD 40946 -000148r 1 F3 9F .WORD 40947 -00014Ar 1 F4 9F .WORD 40948 -00014Cr 1 F5 9F .WORD 40949 -00014Er 1 F6 9F .WORD 40950 -000150r 1 F7 9F .WORD 40951 -000152r 1 F8 9F .WORD 40952 -000154r 1 F9 9F .WORD 40953 -000156r 1 FA 9F .WORD 40954 -000158r 1 FB 9F .WORD 40955 -00015Ar 1 FC 9F .WORD 40956 -00015Cr 1 FD 9F .WORD 40957 -00015Er 1 FE 9F .WORD 40958 -000160r 1 FF 9F .WORD 40959 -000162r 1 00 A0 .WORD 40960 -000164r 1 01 A0 .WORD 40961 -000166r 1 02 A0 .WORD 40962 -000168r 1 03 A0 .WORD 40963 -00016Ar 1 04 A0 .WORD 40964 -00016Cr 1 05 A0 .WORD 40965 -00016Er 1 06 A0 .WORD 40966 -000170r 1 07 A0 .WORD 40967 -000172r 1 08 A0 .WORD 40968 -000174r 1 09 A0 .WORD 40969 -000176r 1 0A A0 .WORD 40970 -000178r 1 0B A0 .WORD 40971 -00017Ar 1 0C A0 .WORD 40972 -00017Cr 1 0D A0 .WORD 40973 -00017Er 1 0E A0 .WORD 40974 -000180r 1 0F A0 .WORD 40975 -000182r 1 E1 AF .WORD 45025 -000184r 1 E2 AF .WORD 45026 -000186r 1 E3 AF .WORD 45027 -000188r 1 E4 AF .WORD 45028 -00018Ar 1 E5 AF .WORD 45029 -00018Cr 1 E6 AF .WORD 45030 -00018Er 1 E7 AF .WORD 45031 -000190r 1 E8 AF .WORD 45032 -000192r 1 E9 AF .WORD 45033 -000194r 1 EA AF .WORD 45034 -000196r 1 EB AF .WORD 45035 -000198r 1 EC AF .WORD 45036 -00019Ar 1 ED AF .WORD 45037 -00019Cr 1 EE AF .WORD 45038 -00019Er 1 EF AF .WORD 45039 -0001A0r 1 F0 AF .WORD 45040 -0001A2r 1 F1 AF .WORD 45041 -0001A4r 1 F2 AF .WORD 45042 -0001A6r 1 F3 AF .WORD 45043 -0001A8r 1 F4 AF .WORD 45044 -0001AAr 1 F5 AF .WORD 45045 -0001ACr 1 F6 AF .WORD 45046 -0001AEr 1 F7 AF .WORD 45047 -0001B0r 1 F8 AF .WORD 45048 -0001B2r 1 F9 AF .WORD 45049 -0001B4r 1 FA AF .WORD 45050 -0001B6r 1 FB AF .WORD 45051 -0001B8r 1 FC AF .WORD 45052 -0001BAr 1 FD AF .WORD 45053 -0001BCr 1 FE AF .WORD 45054 -0001BEr 1 FF AF .WORD 45055 -0001C0r 1 00 B0 .WORD 45056 -0001C2r 1 01 B0 .WORD 45057 -0001C4r 1 02 B0 .WORD 45058 -0001C6r 1 03 B0 .WORD 45059 -0001C8r 1 04 B0 .WORD 45060 -0001CAr 1 05 B0 .WORD 45061 -0001CCr 1 06 B0 .WORD 45062 -0001CEr 1 07 B0 .WORD 45063 -0001D0r 1 08 B0 .WORD 45064 -0001D2r 1 09 B0 .WORD 45065 -0001D4r 1 0A B0 .WORD 45066 -0001D6r 1 0B B0 .WORD 45067 -0001D8r 1 0C B0 .WORD 45068 -0001DAr 1 0D B0 .WORD 45069 -0001DCr 1 0E B0 .WORD 45070 -0001DEr 1 0F B0 .WORD 45071 -0001E0r 1 E1 BF .WORD 49121 -0001E2r 1 E2 BF .WORD 49122 -0001E4r 1 E3 BF .WORD 49123 -0001E6r 1 E4 BF .WORD 49124 -0001E8r 1 E5 BF .WORD 49125 -0001EAr 1 E6 BF .WORD 49126 -0001ECr 1 E7 BF .WORD 49127 -0001EEr 1 E8 BF .WORD 49128 -0001F0r 1 E9 BF .WORD 49129 -0001F2r 1 EA BF .WORD 49130 -0001F4r 1 EB BF .WORD 49131 -0001F6r 1 EC BF .WORD 49132 -0001F8r 1 ED BF .WORD 49133 -0001FAr 1 EE BF .WORD 49134 -0001FCr 1 EF BF .WORD 49135 -0001FEr 1 F0 BF .WORD 49136 -000200r 1 F1 BF .WORD 49137 -000202r 1 F2 BF .WORD 49138 -000204r 1 F3 BF .WORD 49139 -000206r 1 F4 BF .WORD 49140 -000208r 1 F5 BF .WORD 49141 -00020Ar 1 F6 BF .WORD 49142 -00020Cr 1 F7 BF .WORD 49143 -00020Er 1 F8 BF .WORD 49144 -000210r 1 F9 BF .WORD 49145 -000212r 1 FA BF .WORD 49146 -000214r 1 FB BF .WORD 49147 -000216r 1 FC BF .WORD 49148 -000218r 1 FD BF .WORD 49149 -00021Ar 1 FE BF .WORD 49150 -00021Cr 1 FF BF .WORD 49151 -00021Er 1 00 C0 .WORD 49152 -000220r 1 01 C0 .WORD 49153 -000222r 1 02 C0 .WORD 49154 -000224r 1 03 C0 .WORD 49155 -000226r 1 04 C0 .WORD 49156 -000228r 1 05 C0 .WORD 49157 -00022Ar 1 06 C0 .WORD 49158 -00022Cr 1 07 C0 .WORD 49159 -00022Er 1 08 C0 .WORD 49160 -000230r 1 09 C0 .WORD 49161 -000232r 1 0A C0 .WORD 49162 -000234r 1 0B C0 .WORD 49163 -000236r 1 0C C0 .WORD 49164 -000238r 1 0D C0 .WORD 49165 -00023Ar 1 0E C0 .WORD 49166 -00023Cr 1 0F C0 .WORD 49167 -00023Er 1 E1 CF .WORD 53217 -000240r 1 E2 CF .WORD 53218 -000242r 1 E3 CF .WORD 53219 -000244r 1 E4 CF .WORD 53220 -000246r 1 E5 CF .WORD 53221 -000248r 1 E6 CF .WORD 53222 -00024Ar 1 E7 CF .WORD 53223 -00024Cr 1 E8 CF .WORD 53224 -00024Er 1 E9 CF .WORD 53225 -000250r 1 EA CF .WORD 53226 -000252r 1 EB CF .WORD 53227 -000254r 1 EC CF .WORD 53228 -000256r 1 ED CF .WORD 53229 -000258r 1 EE CF .WORD 53230 -00025Ar 1 EF CF .WORD 53231 -00025Cr 1 F0 CF .WORD 53232 -00025Er 1 F1 CF .WORD 53233 -000260r 1 F2 CF .WORD 53234 -000262r 1 F3 CF .WORD 53235 -000264r 1 F4 CF .WORD 53236 -000266r 1 F5 CF .WORD 53237 -000268r 1 F6 CF .WORD 53238 -00026Ar 1 F7 CF .WORD 53239 -00026Cr 1 F8 CF .WORD 53240 -00026Er 1 F9 CF .WORD 53241 -000270r 1 FA CF .WORD 53242 -000272r 1 FB CF .WORD 53243 -000274r 1 FC CF .WORD 53244 -000276r 1 FD CF .WORD 53245 -000278r 1 FE CF .WORD 53246 -00027Ar 1 FF CF .WORD 53247 -00027Cr 1 00 D0 .WORD 53248 -00027Er 1 01 D0 .WORD 53249 -000280r 1 02 D0 .WORD 53250 -000282r 1 03 D0 .WORD 53251 -000284r 1 04 D0 .WORD 53252 -000286r 1 05 D0 .WORD 53253 -000288r 1 06 D0 .WORD 53254 -00028Ar 1 07 D0 .WORD 53255 -00028Cr 1 08 D0 .WORD 53256 -00028Er 1 09 D0 .WORD 53257 -000290r 1 0A D0 .WORD 53258 -000292r 1 0B D0 .WORD 53259 -000294r 1 0C D0 .WORD 53260 -000296r 1 0D D0 .WORD 53261 -000298r 1 0E D0 .WORD 53262 -00029Ar 1 0F D0 .WORD 53263 -00029Cr 1 E1 DF .WORD 57313 -00029Er 1 E2 DF .WORD 57314 -0002A0r 1 E3 DF .WORD 57315 -0002A2r 1 E4 DF .WORD 57316 -0002A4r 1 E5 DF .WORD 57317 -0002A6r 1 E6 DF .WORD 57318 -0002A8r 1 E7 DF .WORD 57319 -0002AAr 1 E8 DF .WORD 57320 -0002ACr 1 E9 DF .WORD 57321 -0002AEr 1 EA DF .WORD 57322 -0002B0r 1 EB DF .WORD 57323 -0002B2r 1 EC DF .WORD 57324 -0002B4r 1 ED DF .WORD 57325 -0002B6r 1 EE DF .WORD 57326 -0002B8r 1 EF DF .WORD 57327 -0002BAr 1 F0 DF .WORD 57328 -0002BCr 1 F1 DF .WORD 57329 -0002BEr 1 F2 DF .WORD 57330 -0002C0r 1 F3 DF .WORD 57331 -0002C2r 1 F4 DF .WORD 57332 -0002C4r 1 F5 DF .WORD 57333 -0002C6r 1 F6 DF .WORD 57334 -0002C8r 1 F7 DF .WORD 57335 -0002CAr 1 F8 DF .WORD 57336 -0002CCr 1 F9 DF .WORD 57337 -0002CEr 1 FA DF .WORD 57338 -0002D0r 1 FB DF .WORD 57339 -0002D2r 1 FC DF .WORD 57340 -0002D4r 1 FD DF .WORD 57341 -0002D6r 1 FE DF .WORD 57342 -0002D8r 1 FF DF .WORD 57343 -0002DAr 1 00 E0 .WORD 57344 -0002DCr 1 01 E0 .WORD 57345 -0002DEr 1 02 E0 .WORD 57346 -0002E0r 1 03 E0 .WORD 57347 -0002E2r 1 04 E0 .WORD 57348 -0002E4r 1 05 E0 .WORD 57349 -0002E6r 1 06 E0 .WORD 57350 -0002E8r 1 07 E0 .WORD 57351 -0002EAr 1 08 E0 .WORD 57352 -0002ECr 1 09 E0 .WORD 57353 -0002EEr 1 0A E0 .WORD 57354 -0002F0r 1 0B E0 .WORD 57355 -0002F2r 1 0C E0 .WORD 57356 -0002F4r 1 0D E0 .WORD 57357 -0002F6r 1 0E E0 .WORD 57358 -0002F8r 1 0F E0 .WORD 57359 -0002FAr 1 E1 EF .WORD 61409 -0002FCr 1 E2 EF .WORD 61410 -0002FEr 1 E3 EF .WORD 61411 -000300r 1 E4 EF .WORD 61412 -000302r 1 E5 EF .WORD 61413 -000304r 1 E6 EF .WORD 61414 -000306r 1 E7 EF .WORD 61415 -000308r 1 E8 EF .WORD 61416 -00030Ar 1 E9 EF .WORD 61417 -00030Cr 1 EA EF .WORD 61418 -00030Er 1 EB EF .WORD 61419 -000310r 1 EC EF .WORD 61420 -000312r 1 ED EF .WORD 61421 -000314r 1 EE EF .WORD 61422 -000316r 1 EF EF .WORD 61423 -000318r 1 F0 EF .WORD 61424 -00031Ar 1 F1 EF .WORD 61425 -00031Cr 1 F2 EF .WORD 61426 -00031Er 1 F3 EF .WORD 61427 -000320r 1 F4 EF .WORD 61428 -000322r 1 F5 EF .WORD 61429 -000324r 1 F6 EF .WORD 61430 -000326r 1 F7 EF .WORD 61431 -000328r 1 F8 EF .WORD 61432 -00032Ar 1 F9 EF .WORD 61433 -00032Cr 1 FA EF .WORD 61434 -00032Er 1 FB EF .WORD 61435 -000330r 1 FC EF .WORD 61436 -000332r 1 FD EF .WORD 61437 -000334r 1 FE EF .WORD 61438 -000336r 1 FF EF .WORD 61439 -000338r 1 00 F0 .WORD 61440 -00033Ar 1 01 F0 .WORD 61441 -00033Cr 1 02 F0 .WORD 61442 -00033Er 1 03 F0 .WORD 61443 -000340r 1 04 F0 .WORD 61444 -000342r 1 05 F0 .WORD 61445 -000344r 1 06 F0 .WORD 61446 -000346r 1 07 F0 .WORD 61447 -000348r 1 08 F0 .WORD 61448 -00034Ar 1 09 F0 .WORD 61449 -00034Cr 1 0A F0 .WORD 61450 -00034Er 1 0B F0 .WORD 61451 -000350r 1 0C F0 .WORD 61452 -000352r 1 0D F0 .WORD 61453 -000354r 1 0E F0 .WORD 61454 -000356r 1 0F F0 .WORD 61455 -000358r 1 E1 FF .WORD 65505 -00035Ar 1 E2 FF .WORD 65506 -00035Cr 1 E3 FF .WORD 65507 -00035Er 1 E4 FF .WORD 65508 -000360r 1 E5 FF .WORD 65509 -000362r 1 E6 FF .WORD 65510 -000364r 1 E7 FF .WORD 65511 -000366r 1 E8 FF .WORD 65512 -000368r 1 E9 FF .WORD 65513 -00036Ar 1 EA FF .WORD 65514 -00036Cr 1 EB FF .WORD 65515 -00036Er 1 EC FF .WORD 65516 -000370r 1 ED FF .WORD 65517 -000372r 1 EE FF .WORD 65518 -000374r 1 EF FF .WORD 65519 -000376r 1 F0 FF .WORD 65520 -000378r 1 F1 FF .WORD 65521 -00037Ar 1 F2 FF .WORD 65522 -00037Cr 1 F3 FF .WORD 65523 -00037Er 1 F4 FF .WORD 65524 -000380r 1 F5 FF .WORD 65525 -000382r 1 F6 FF .WORD 65526 -000384r 1 F7 FF .WORD 65527 -000386r 1 F8 FF .WORD 65528 -000388r 1 F9 FF .WORD 65529 -00038Ar 1 FA FF .WORD 65530 -00038Cr 1 FB FF .WORD 65531 -00038Er 1 FC FF .WORD 65532 -000390r 1 FD FF .WORD 65533 -000392r 1 FE FF .WORD 65534 -000394r 1 FF FF .WORD 65535 +000000r 1 ; upper case pseudo-op +000000r 1 00 00 .WORD 0 +000002r 1 01 00 .WORD 1 +000004r 1 02 00 .WORD 2 +000006r 1 03 00 .WORD 3 +000008r 1 04 00 .WORD 4 +00000Ar 1 05 00 .WORD 5 +00000Cr 1 06 00 .WORD 6 +00000Er 1 07 00 .WORD 7 +000010r 1 08 00 .WORD 8 +000012r 1 09 00 .WORD 9 +000014r 1 0A 00 .WORD 10 +000016r 1 0B 00 .WORD 11 +000018r 1 0C 00 .WORD 12 +00001Ar 1 0D 00 .WORD 13 +00001Cr 1 0E 00 .WORD 14 +00001Er 1 0F 00 .WORD 15 +000020r 1 10 00 .WORD 16 +000022r 1 11 00 .WORD 17 +000024r 1 12 00 .WORD 18 +000026r 1 13 00 .WORD 19 +000028r 1 70 00 .WORD 112 +00002Ar 1 71 00 .WORD 113 +00002Cr 1 72 00 .WORD 114 +00002Er 1 73 00 .WORD 115 +000030r 1 74 00 .WORD 116 +000032r 1 75 00 .WORD 117 +000034r 1 76 00 .WORD 118 +000036r 1 77 00 .WORD 119 +000038r 1 78 00 .WORD 120 +00003Ar 1 79 00 .WORD 121 +00003Cr 1 7A 00 .WORD 122 +00003Er 1 7B 00 .WORD 123 +000040r 1 7C 00 .WORD 124 +000042r 1 7D 00 .WORD 125 +000044r 1 7E 00 .WORD 126 +000046r 1 7F 00 .WORD 127 +000048r 1 80 00 .WORD 128 +00004Ar 1 81 00 .WORD 129 +00004Cr 1 82 00 .WORD 130 +00004Er 1 83 00 .WORD 131 +000050r 1 84 00 .WORD 132 +000052r 1 85 00 .WORD 133 +000054r 1 86 00 .WORD 134 +000056r 1 F0 00 .WORD 240 +000058r 1 F1 00 .WORD 241 +00005Ar 1 F2 00 .WORD 242 +00005Cr 1 F3 00 .WORD 243 +00005Er 1 F4 00 .WORD 244 +000060r 1 F5 00 .WORD 245 +000062r 1 F6 00 .WORD 246 +000064r 1 F7 00 .WORD 247 +000066r 1 F8 00 .WORD 248 +000068r 1 F9 00 .WORD 249 +00006Ar 1 FA 00 .WORD 250 +00006Cr 1 FB 00 .WORD 251 +00006Er 1 FC 00 .WORD 252 +000070r 1 FD 00 .WORD 253 +000072r 1 FE 00 .WORD 254 +000074r 1 FF 00 .WORD 255 +000076r 1 00 01 .WORD 256 +000078r 1 01 01 .WORD 257 +00007Ar 1 02 01 .WORD 258 +00007Cr 1 03 01 .WORD 259 +00007Er 1 D2 0F .WORD 4050 +000080r 1 D3 0F .WORD 4051 +000082r 1 D4 0F .WORD 4052 +000084r 1 D5 0F .WORD 4053 +000086r 1 D6 0F .WORD 4054 +000088r 1 D7 0F .WORD 4055 +00008Ar 1 D8 0F .WORD 4056 +00008Cr 1 D9 0F .WORD 4057 +00008Er 1 DA 0F .WORD 4058 +000090r 1 DB 0F .WORD 4059 +000092r 1 DC 0F .WORD 4060 +000094r 1 DD 0F .WORD 4061 +000096r 1 DE 0F .WORD 4062 +000098r 1 DF 0F .WORD 4063 +00009Ar 1 E0 0F .WORD 4064 +00009Cr 1 E1 0F .WORD 4065 +00009Er 1 E2 0F .WORD 4066 +0000A0r 1 E3 0F .WORD 4067 +0000A2r 1 E4 0F .WORD 4068 +0000A4r 1 E5 0F .WORD 4069 +0000A6r 1 E6 0F .WORD 4070 +0000A8r 1 E7 0F .WORD 4071 +0000AAr 1 E8 0F .WORD 4072 +0000ACr 1 E9 0F .WORD 4073 +0000AEr 1 EA 0F .WORD 4074 +0000B0r 1 EB 0F .WORD 4075 +0000B2r 1 EC 0F .WORD 4076 +0000B4r 1 ED 0F .WORD 4077 +0000B6r 1 EE 0F .WORD 4078 +0000B8r 1 EF 0F .WORD 4079 +0000BAr 1 F0 0F .WORD 4080 +0000BCr 1 F1 0F .WORD 4081 +0000BEr 1 F2 0F .WORD 4082 +0000C0r 1 F3 0F .WORD 4083 +0000C2r 1 F4 0F .WORD 4084 +0000C4r 1 F5 0F .WORD 4085 +0000C6r 1 F6 0F .WORD 4086 +0000C8r 1 F7 0F .WORD 4087 +0000CAr 1 F8 0F .WORD 4088 +0000CCr 1 F9 0F .WORD 4089 +0000CEr 1 FA 0F .WORD 4090 +0000D0r 1 FB 0F .WORD 4091 +0000D2r 1 FC 0F .WORD 4092 +0000D4r 1 FD 0F .WORD 4093 +0000D6r 1 FE 0F .WORD 4094 +0000D8r 1 FF 0F .WORD 4095 +0000DAr 1 00 10 .WORD 4096 +0000DCr 1 01 10 .WORD 4097 +0000DEr 1 02 10 .WORD 4098 +0000E0r 1 03 10 .WORD 4099 +0000E2r 1 04 10 .WORD 4100 +0000E4r 1 05 10 .WORD 4101 +0000E6r 1 06 10 .WORD 4102 +0000E8r 1 07 10 .WORD 4103 +0000EAr 1 08 10 .WORD 4104 +0000ECr 1 F0 7F .WORD 32752 +0000EEr 1 F1 7F .WORD 32753 +0000F0r 1 F2 7F .WORD 32754 +0000F2r 1 F3 7F .WORD 32755 +0000F4r 1 F4 7F .WORD 32756 +0000F6r 1 F5 7F .WORD 32757 +0000F8r 1 F6 7F .WORD 32758 +0000FAr 1 F7 7F .WORD 32759 +0000FCr 1 F8 7F .WORD 32760 +0000FEr 1 F9 7F .WORD 32761 +000100r 1 FA 7F .WORD 32762 +000102r 1 FB 7F .WORD 32763 +000104r 1 FC 7F .WORD 32764 +000106r 1 FD 7F .WORD 32765 +000108r 1 FE 7F .WORD 32766 +00010Ar 1 FF 7F .WORD 32767 +00010Cr 1 00 80 .WORD 32768 +00010Er 1 01 80 .WORD 32769 +000110r 1 02 80 .WORD 32770 +000112r 1 03 80 .WORD 32771 +000114r 1 04 80 .WORD 32772 +000116r 1 05 80 .WORD 32773 +000118r 1 06 80 .WORD 32774 +00011Ar 1 07 80 .WORD 32775 +00011Cr 1 08 80 .WORD 32776 +00011Er 1 09 80 .WORD 32777 +000120r 1 0A 80 .WORD 32778 +000122r 1 0B 80 .WORD 32779 +000124r 1 E1 9F .WORD 40929 +000126r 1 E2 9F .WORD 40930 +000128r 1 E3 9F .WORD 40931 +00012Ar 1 E4 9F .WORD 40932 +00012Cr 1 E5 9F .WORD 40933 +00012Er 1 E6 9F .WORD 40934 +000130r 1 E7 9F .WORD 40935 +000132r 1 E8 9F .WORD 40936 +000134r 1 E9 9F .WORD 40937 +000136r 1 EA 9F .WORD 40938 +000138r 1 EB 9F .WORD 40939 +00013Ar 1 EC 9F .WORD 40940 +00013Cr 1 ED 9F .WORD 40941 +00013Er 1 EE 9F .WORD 40942 +000140r 1 EF 9F .WORD 40943 +000142r 1 F0 9F .WORD 40944 +000144r 1 F1 9F .WORD 40945 +000146r 1 F2 9F .WORD 40946 +000148r 1 F3 9F .WORD 40947 +00014Ar 1 F4 9F .WORD 40948 +00014Cr 1 F5 9F .WORD 40949 +00014Er 1 F6 9F .WORD 40950 +000150r 1 F7 9F .WORD 40951 +000152r 1 F8 9F .WORD 40952 +000154r 1 F9 9F .WORD 40953 +000156r 1 FA 9F .WORD 40954 +000158r 1 FB 9F .WORD 40955 +00015Ar 1 FC 9F .WORD 40956 +00015Cr 1 FD 9F .WORD 40957 +00015Er 1 FE 9F .WORD 40958 +000160r 1 FF 9F .WORD 40959 +000162r 1 00 A0 .WORD 40960 +000164r 1 01 A0 .WORD 40961 +000166r 1 02 A0 .WORD 40962 +000168r 1 03 A0 .WORD 40963 +00016Ar 1 04 A0 .WORD 40964 +00016Cr 1 05 A0 .WORD 40965 +00016Er 1 06 A0 .WORD 40966 +000170r 1 07 A0 .WORD 40967 +000172r 1 08 A0 .WORD 40968 +000174r 1 09 A0 .WORD 40969 +000176r 1 0A A0 .WORD 40970 +000178r 1 0B A0 .WORD 40971 +00017Ar 1 0C A0 .WORD 40972 +00017Cr 1 0D A0 .WORD 40973 +00017Er 1 0E A0 .WORD 40974 +000180r 1 0F A0 .WORD 40975 +000182r 1 E1 AF .WORD 45025 +000184r 1 E2 AF .WORD 45026 +000186r 1 E3 AF .WORD 45027 +000188r 1 E4 AF .WORD 45028 +00018Ar 1 E5 AF .WORD 45029 +00018Cr 1 E6 AF .WORD 45030 +00018Er 1 E7 AF .WORD 45031 +000190r 1 E8 AF .WORD 45032 +000192r 1 E9 AF .WORD 45033 +000194r 1 EA AF .WORD 45034 +000196r 1 EB AF .WORD 45035 +000198r 1 EC AF .WORD 45036 +00019Ar 1 ED AF .WORD 45037 +00019Cr 1 EE AF .WORD 45038 +00019Er 1 EF AF .WORD 45039 +0001A0r 1 F0 AF .WORD 45040 +0001A2r 1 F1 AF .WORD 45041 +0001A4r 1 F2 AF .WORD 45042 +0001A6r 1 F3 AF .WORD 45043 +0001A8r 1 F4 AF .WORD 45044 +0001AAr 1 F5 AF .WORD 45045 +0001ACr 1 F6 AF .WORD 45046 +0001AEr 1 F7 AF .WORD 45047 +0001B0r 1 F8 AF .WORD 45048 +0001B2r 1 F9 AF .WORD 45049 +0001B4r 1 FA AF .WORD 45050 +0001B6r 1 FB AF .WORD 45051 +0001B8r 1 FC AF .WORD 45052 +0001BAr 1 FD AF .WORD 45053 +0001BCr 1 FE AF .WORD 45054 +0001BEr 1 FF AF .WORD 45055 +0001C0r 1 00 B0 .WORD 45056 +0001C2r 1 01 B0 .WORD 45057 +0001C4r 1 02 B0 .WORD 45058 +0001C6r 1 03 B0 .WORD 45059 +0001C8r 1 04 B0 .WORD 45060 +0001CAr 1 05 B0 .WORD 45061 +0001CCr 1 06 B0 .WORD 45062 +0001CEr 1 07 B0 .WORD 45063 +0001D0r 1 08 B0 .WORD 45064 +0001D2r 1 09 B0 .WORD 45065 +0001D4r 1 0A B0 .WORD 45066 +0001D6r 1 0B B0 .WORD 45067 +0001D8r 1 0C B0 .WORD 45068 +0001DAr 1 0D B0 .WORD 45069 +0001DCr 1 0E B0 .WORD 45070 +0001DEr 1 0F B0 .WORD 45071 +0001E0r 1 E1 BF .WORD 49121 +0001E2r 1 E2 BF .WORD 49122 +0001E4r 1 E3 BF .WORD 49123 +0001E6r 1 E4 BF .WORD 49124 +0001E8r 1 E5 BF .WORD 49125 +0001EAr 1 E6 BF .WORD 49126 +0001ECr 1 E7 BF .WORD 49127 +0001EEr 1 E8 BF .WORD 49128 +0001F0r 1 E9 BF .WORD 49129 +0001F2r 1 EA BF .WORD 49130 +0001F4r 1 EB BF .WORD 49131 +0001F6r 1 EC BF .WORD 49132 +0001F8r 1 ED BF .WORD 49133 +0001FAr 1 EE BF .WORD 49134 +0001FCr 1 EF BF .WORD 49135 +0001FEr 1 F0 BF .WORD 49136 +000200r 1 F1 BF .WORD 49137 +000202r 1 F2 BF .WORD 49138 +000204r 1 F3 BF .WORD 49139 +000206r 1 F4 BF .WORD 49140 +000208r 1 F5 BF .WORD 49141 +00020Ar 1 F6 BF .WORD 49142 +00020Cr 1 F7 BF .WORD 49143 +00020Er 1 F8 BF .WORD 49144 +000210r 1 F9 BF .WORD 49145 +000212r 1 FA BF .WORD 49146 +000214r 1 FB BF .WORD 49147 +000216r 1 FC BF .WORD 49148 +000218r 1 FD BF .WORD 49149 +00021Ar 1 FE BF .WORD 49150 +00021Cr 1 FF BF .WORD 49151 +00021Er 1 00 C0 .WORD 49152 +000220r 1 01 C0 .WORD 49153 +000222r 1 02 C0 .WORD 49154 +000224r 1 03 C0 .WORD 49155 +000226r 1 04 C0 .WORD 49156 +000228r 1 05 C0 .WORD 49157 +00022Ar 1 06 C0 .WORD 49158 +00022Cr 1 07 C0 .WORD 49159 +00022Er 1 08 C0 .WORD 49160 +000230r 1 09 C0 .WORD 49161 +000232r 1 0A C0 .WORD 49162 +000234r 1 0B C0 .WORD 49163 +000236r 1 0C C0 .WORD 49164 +000238r 1 0D C0 .WORD 49165 +00023Ar 1 0E C0 .WORD 49166 +00023Cr 1 0F C0 .WORD 49167 +00023Er 1 E1 CF .WORD 53217 +000240r 1 E2 CF .WORD 53218 +000242r 1 E3 CF .WORD 53219 +000244r 1 E4 CF .WORD 53220 +000246r 1 E5 CF .WORD 53221 +000248r 1 E6 CF .WORD 53222 +00024Ar 1 E7 CF .WORD 53223 +00024Cr 1 E8 CF .WORD 53224 +00024Er 1 E9 CF .WORD 53225 +000250r 1 EA CF .WORD 53226 +000252r 1 EB CF .WORD 53227 +000254r 1 EC CF .WORD 53228 +000256r 1 ED CF .WORD 53229 +000258r 1 EE CF .WORD 53230 +00025Ar 1 EF CF .WORD 53231 +00025Cr 1 F0 CF .WORD 53232 +00025Er 1 F1 CF .WORD 53233 +000260r 1 F2 CF .WORD 53234 +000262r 1 F3 CF .WORD 53235 +000264r 1 F4 CF .WORD 53236 +000266r 1 F5 CF .WORD 53237 +000268r 1 F6 CF .WORD 53238 +00026Ar 1 F7 CF .WORD 53239 +00026Cr 1 F8 CF .WORD 53240 +00026Er 1 F9 CF .WORD 53241 +000270r 1 FA CF .WORD 53242 +000272r 1 FB CF .WORD 53243 +000274r 1 FC CF .WORD 53244 +000276r 1 FD CF .WORD 53245 +000278r 1 FE CF .WORD 53246 +00027Ar 1 FF CF .WORD 53247 +00027Cr 1 00 D0 .WORD 53248 +00027Er 1 01 D0 .WORD 53249 +000280r 1 02 D0 .WORD 53250 +000282r 1 03 D0 .WORD 53251 +000284r 1 04 D0 .WORD 53252 +000286r 1 05 D0 .WORD 53253 +000288r 1 06 D0 .WORD 53254 +00028Ar 1 07 D0 .WORD 53255 +00028Cr 1 08 D0 .WORD 53256 +00028Er 1 09 D0 .WORD 53257 +000290r 1 0A D0 .WORD 53258 +000292r 1 0B D0 .WORD 53259 +000294r 1 0C D0 .WORD 53260 +000296r 1 0D D0 .WORD 53261 +000298r 1 0E D0 .WORD 53262 +00029Ar 1 0F D0 .WORD 53263 +00029Cr 1 E1 DF .WORD 57313 +00029Er 1 E2 DF .WORD 57314 +0002A0r 1 E3 DF .WORD 57315 +0002A2r 1 E4 DF .WORD 57316 +0002A4r 1 E5 DF .WORD 57317 +0002A6r 1 E6 DF .WORD 57318 +0002A8r 1 E7 DF .WORD 57319 +0002AAr 1 E8 DF .WORD 57320 +0002ACr 1 E9 DF .WORD 57321 +0002AEr 1 EA DF .WORD 57322 +0002B0r 1 EB DF .WORD 57323 +0002B2r 1 EC DF .WORD 57324 +0002B4r 1 ED DF .WORD 57325 +0002B6r 1 EE DF .WORD 57326 +0002B8r 1 EF DF .WORD 57327 +0002BAr 1 F0 DF .WORD 57328 +0002BCr 1 F1 DF .WORD 57329 +0002BEr 1 F2 DF .WORD 57330 +0002C0r 1 F3 DF .WORD 57331 +0002C2r 1 F4 DF .WORD 57332 +0002C4r 1 F5 DF .WORD 57333 +0002C6r 1 F6 DF .WORD 57334 +0002C8r 1 F7 DF .WORD 57335 +0002CAr 1 F8 DF .WORD 57336 +0002CCr 1 F9 DF .WORD 57337 +0002CEr 1 FA DF .WORD 57338 +0002D0r 1 FB DF .WORD 57339 +0002D2r 1 FC DF .WORD 57340 +0002D4r 1 FD DF .WORD 57341 +0002D6r 1 FE DF .WORD 57342 +0002D8r 1 FF DF .WORD 57343 +0002DAr 1 00 E0 .WORD 57344 +0002DCr 1 01 E0 .WORD 57345 +0002DEr 1 02 E0 .WORD 57346 +0002E0r 1 03 E0 .WORD 57347 +0002E2r 1 04 E0 .WORD 57348 +0002E4r 1 05 E0 .WORD 57349 +0002E6r 1 06 E0 .WORD 57350 +0002E8r 1 07 E0 .WORD 57351 +0002EAr 1 08 E0 .WORD 57352 +0002ECr 1 09 E0 .WORD 57353 +0002EEr 1 0A E0 .WORD 57354 +0002F0r 1 0B E0 .WORD 57355 +0002F2r 1 0C E0 .WORD 57356 +0002F4r 1 0D E0 .WORD 57357 +0002F6r 1 0E E0 .WORD 57358 +0002F8r 1 0F E0 .WORD 57359 +0002FAr 1 E1 EF .WORD 61409 +0002FCr 1 E2 EF .WORD 61410 +0002FEr 1 E3 EF .WORD 61411 +000300r 1 E4 EF .WORD 61412 +000302r 1 E5 EF .WORD 61413 +000304r 1 E6 EF .WORD 61414 +000306r 1 E7 EF .WORD 61415 +000308r 1 E8 EF .WORD 61416 +00030Ar 1 E9 EF .WORD 61417 +00030Cr 1 EA EF .WORD 61418 +00030Er 1 EB EF .WORD 61419 +000310r 1 EC EF .WORD 61420 +000312r 1 ED EF .WORD 61421 +000314r 1 EE EF .WORD 61422 +000316r 1 EF EF .WORD 61423 +000318r 1 F0 EF .WORD 61424 +00031Ar 1 F1 EF .WORD 61425 +00031Cr 1 F2 EF .WORD 61426 +00031Er 1 F3 EF .WORD 61427 +000320r 1 F4 EF .WORD 61428 +000322r 1 F5 EF .WORD 61429 +000324r 1 F6 EF .WORD 61430 +000326r 1 F7 EF .WORD 61431 +000328r 1 F8 EF .WORD 61432 +00032Ar 1 F9 EF .WORD 61433 +00032Cr 1 FA EF .WORD 61434 +00032Er 1 FB EF .WORD 61435 +000330r 1 FC EF .WORD 61436 +000332r 1 FD EF .WORD 61437 +000334r 1 FE EF .WORD 61438 +000336r 1 FF EF .WORD 61439 +000338r 1 00 F0 .WORD 61440 +00033Ar 1 01 F0 .WORD 61441 +00033Cr 1 02 F0 .WORD 61442 +00033Er 1 03 F0 .WORD 61443 +000340r 1 04 F0 .WORD 61444 +000342r 1 05 F0 .WORD 61445 +000344r 1 06 F0 .WORD 61446 +000346r 1 07 F0 .WORD 61447 +000348r 1 08 F0 .WORD 61448 +00034Ar 1 09 F0 .WORD 61449 +00034Cr 1 0A F0 .WORD 61450 +00034Er 1 0B F0 .WORD 61451 +000350r 1 0C F0 .WORD 61452 +000352r 1 0D F0 .WORD 61453 +000354r 1 0E F0 .WORD 61454 +000356r 1 0F F0 .WORD 61455 +000358r 1 E1 FF .WORD 65505 +00035Ar 1 E2 FF .WORD 65506 +00035Cr 1 E3 FF .WORD 65507 +00035Er 1 E4 FF .WORD 65508 +000360r 1 E5 FF .WORD 65509 +000362r 1 E6 FF .WORD 65510 +000364r 1 E7 FF .WORD 65511 +000366r 1 E8 FF .WORD 65512 +000368r 1 E9 FF .WORD 65513 +00036Ar 1 EA FF .WORD 65514 +00036Cr 1 EB FF .WORD 65515 +00036Er 1 EC FF .WORD 65516 +000370r 1 ED FF .WORD 65517 +000372r 1 EE FF .WORD 65518 +000374r 1 EF FF .WORD 65519 +000376r 1 F0 FF .WORD 65520 +000378r 1 F1 FF .WORD 65521 +00037Ar 1 F2 FF .WORD 65522 +00037Cr 1 F3 FF .WORD 65523 +00037Er 1 F4 FF .WORD 65524 +000380r 1 F5 FF .WORD 65525 +000382r 1 F6 FF .WORD 65526 +000384r 1 F7 FF .WORD 65527 +000386r 1 F8 FF .WORD 65528 +000388r 1 F9 FF .WORD 65529 +00038Ar 1 FA FF .WORD 65530 +00038Cr 1 FB FF .WORD 65531 +00038Er 1 FC FF .WORD 65532 +000390r 1 FD FF .WORD 65533 +000392r 1 FE FF .WORD 65534 +000394r 1 FF FF .WORD 65535 000396r 1 -000396r 1 ; lower case pseudo-op -000396r 1 00 00 .word 0 -000398r 1 01 00 .word 1 -00039Ar 1 02 00 .word 2 -00039Cr 1 03 00 .word 3 -00039Er 1 04 00 .word 4 -0003A0r 1 05 00 .word 5 -0003A2r 1 06 00 .word 6 -0003A4r 1 07 00 .word 7 -0003A6r 1 08 00 .word 8 -0003A8r 1 09 00 .word 9 -0003AAr 1 0A 00 .word 10 -0003ACr 1 0B 00 .word 11 -0003AEr 1 0C 00 .word 12 -0003B0r 1 0D 00 .word 13 -0003B2r 1 0E 00 .word 14 -0003B4r 1 0F 00 .word 15 -0003B6r 1 10 00 .word 16 -0003B8r 1 11 00 .word 17 -0003BAr 1 12 00 .word 18 -0003BCr 1 13 00 .word 19 -0003BEr 1 70 00 .word 112 -0003C0r 1 71 00 .word 113 -0003C2r 1 72 00 .word 114 -0003C4r 1 73 00 .word 115 -0003C6r 1 74 00 .word 116 -0003C8r 1 75 00 .word 117 -0003CAr 1 76 00 .word 118 -0003CCr 1 77 00 .word 119 -0003CEr 1 78 00 .word 120 -0003D0r 1 79 00 .word 121 -0003D2r 1 7A 00 .word 122 -0003D4r 1 7B 00 .word 123 -0003D6r 1 7C 00 .word 124 -0003D8r 1 7D 00 .word 125 -0003DAr 1 7E 00 .word 126 -0003DCr 1 7F 00 .word 127 -0003DEr 1 80 00 .word 128 -0003E0r 1 81 00 .word 129 -0003E2r 1 82 00 .word 130 -0003E4r 1 83 00 .word 131 -0003E6r 1 84 00 .word 132 -0003E8r 1 85 00 .word 133 -0003EAr 1 86 00 .word 134 -0003ECr 1 F0 00 .word 240 -0003EEr 1 F1 00 .word 241 -0003F0r 1 F2 00 .word 242 -0003F2r 1 F3 00 .word 243 -0003F4r 1 F4 00 .word 244 -0003F6r 1 F5 00 .word 245 -0003F8r 1 F6 00 .word 246 -0003FAr 1 F7 00 .word 247 -0003FCr 1 F8 00 .word 248 -0003FEr 1 F9 00 .word 249 -000400r 1 FA 00 .word 250 -000402r 1 FB 00 .word 251 -000404r 1 FC 00 .word 252 -000406r 1 FD 00 .word 253 -000408r 1 FE 00 .word 254 -00040Ar 1 FF 00 .word 255 -00040Cr 1 00 01 .word 256 -00040Er 1 01 01 .word 257 -000410r 1 02 01 .word 258 -000412r 1 03 01 .word 259 -000414r 1 D2 0F .word 4050 -000416r 1 D3 0F .word 4051 -000418r 1 D4 0F .word 4052 -00041Ar 1 D5 0F .word 4053 -00041Cr 1 D6 0F .word 4054 -00041Er 1 D7 0F .word 4055 -000420r 1 D8 0F .word 4056 -000422r 1 D9 0F .word 4057 -000424r 1 DA 0F .word 4058 -000426r 1 DB 0F .word 4059 -000428r 1 DC 0F .word 4060 -00042Ar 1 DD 0F .word 4061 -00042Cr 1 DE 0F .word 4062 -00042Er 1 DF 0F .word 4063 -000430r 1 E0 0F .word 4064 -000432r 1 E1 0F .word 4065 -000434r 1 E2 0F .word 4066 -000436r 1 E3 0F .word 4067 -000438r 1 E4 0F .word 4068 -00043Ar 1 E5 0F .word 4069 -00043Cr 1 E6 0F .word 4070 -00043Er 1 E7 0F .word 4071 -000440r 1 E8 0F .word 4072 -000442r 1 E9 0F .word 4073 -000444r 1 EA 0F .word 4074 -000446r 1 EB 0F .word 4075 -000448r 1 EC 0F .word 4076 -00044Ar 1 ED 0F .word 4077 -00044Cr 1 EE 0F .word 4078 -00044Er 1 EF 0F .word 4079 -000450r 1 F0 0F .word 4080 -000452r 1 F1 0F .word 4081 -000454r 1 F2 0F .word 4082 -000456r 1 F3 0F .word 4083 -000458r 1 F4 0F .word 4084 -00045Ar 1 F5 0F .word 4085 -00045Cr 1 F6 0F .word 4086 -00045Er 1 F7 0F .word 4087 -000460r 1 F8 0F .word 4088 -000462r 1 F9 0F .word 4089 -000464r 1 FA 0F .word 4090 -000466r 1 FB 0F .word 4091 -000468r 1 FC 0F .word 4092 -00046Ar 1 FD 0F .word 4093 -00046Cr 1 FE 0F .word 4094 -00046Er 1 FF 0F .word 4095 -000470r 1 00 10 .word 4096 -000472r 1 01 10 .word 4097 -000474r 1 02 10 .word 4098 -000476r 1 03 10 .word 4099 -000478r 1 04 10 .word 4100 -00047Ar 1 05 10 .word 4101 -00047Cr 1 06 10 .word 4102 -00047Er 1 07 10 .word 4103 -000480r 1 08 10 .word 4104 -000482r 1 F0 7F .word 32752 -000484r 1 F1 7F .word 32753 -000486r 1 F2 7F .word 32754 -000488r 1 F3 7F .word 32755 -00048Ar 1 F4 7F .word 32756 -00048Cr 1 F5 7F .word 32757 -00048Er 1 F6 7F .word 32758 -000490r 1 F7 7F .word 32759 -000492r 1 F8 7F .word 32760 -000494r 1 F9 7F .word 32761 -000496r 1 FA 7F .word 32762 -000498r 1 FB 7F .word 32763 -00049Ar 1 FC 7F .word 32764 -00049Cr 1 FD 7F .word 32765 -00049Er 1 FE 7F .word 32766 -0004A0r 1 FF 7F .word 32767 -0004A2r 1 00 80 .word 32768 -0004A4r 1 01 80 .word 32769 -0004A6r 1 02 80 .word 32770 -0004A8r 1 03 80 .word 32771 -0004AAr 1 04 80 .word 32772 -0004ACr 1 05 80 .word 32773 -0004AEr 1 06 80 .word 32774 -0004B0r 1 07 80 .word 32775 -0004B2r 1 08 80 .word 32776 -0004B4r 1 09 80 .word 32777 -0004B6r 1 0A 80 .word 32778 -0004B8r 1 0B 80 .word 32779 -0004BAr 1 E1 9F .word 40929 -0004BCr 1 E2 9F .word 40930 -0004BEr 1 E3 9F .word 40931 -0004C0r 1 E4 9F .word 40932 -0004C2r 1 E5 9F .word 40933 -0004C4r 1 E6 9F .word 40934 -0004C6r 1 E7 9F .word 40935 -0004C8r 1 E8 9F .word 40936 -0004CAr 1 E9 9F .word 40937 -0004CCr 1 EA 9F .word 40938 -0004CEr 1 EB 9F .word 40939 -0004D0r 1 EC 9F .word 40940 -0004D2r 1 ED 9F .word 40941 -0004D4r 1 EE 9F .word 40942 -0004D6r 1 EF 9F .word 40943 -0004D8r 1 F0 9F .word 40944 -0004DAr 1 F1 9F .word 40945 -0004DCr 1 F2 9F .word 40946 -0004DEr 1 F3 9F .word 40947 -0004E0r 1 F4 9F .word 40948 -0004E2r 1 F5 9F .word 40949 -0004E4r 1 F6 9F .word 40950 -0004E6r 1 F7 9F .word 40951 -0004E8r 1 F8 9F .word 40952 -0004EAr 1 F9 9F .word 40953 -0004ECr 1 FA 9F .word 40954 -0004EEr 1 FB 9F .word 40955 -0004F0r 1 FC 9F .word 40956 -0004F2r 1 FD 9F .word 40957 -0004F4r 1 FE 9F .word 40958 -0004F6r 1 FF 9F .word 40959 -0004F8r 1 00 A0 .word 40960 -0004FAr 1 01 A0 .word 40961 -0004FCr 1 02 A0 .word 40962 -0004FEr 1 03 A0 .word 40963 -000500r 1 04 A0 .word 40964 -000502r 1 05 A0 .word 40965 -000504r 1 06 A0 .word 40966 -000506r 1 07 A0 .word 40967 -000508r 1 08 A0 .word 40968 -00050Ar 1 09 A0 .word 40969 -00050Cr 1 0A A0 .word 40970 -00050Er 1 0B A0 .word 40971 -000510r 1 0C A0 .word 40972 -000512r 1 0D A0 .word 40973 -000514r 1 0E A0 .word 40974 -000516r 1 0F A0 .word 40975 -000518r 1 E1 AF .word 45025 -00051Ar 1 E2 AF .word 45026 -00051Cr 1 E3 AF .word 45027 -00051Er 1 E4 AF .word 45028 -000520r 1 E5 AF .word 45029 -000522r 1 E6 AF .word 45030 -000524r 1 E7 AF .word 45031 -000526r 1 E8 AF .word 45032 -000528r 1 E9 AF .word 45033 -00052Ar 1 EA AF .word 45034 -00052Cr 1 EB AF .word 45035 -00052Er 1 EC AF .word 45036 -000530r 1 ED AF .word 45037 -000532r 1 EE AF .word 45038 -000534r 1 EF AF .word 45039 -000536r 1 F0 AF .word 45040 -000538r 1 F1 AF .word 45041 -00053Ar 1 F2 AF .word 45042 -00053Cr 1 F3 AF .word 45043 -00053Er 1 F4 AF .word 45044 -000540r 1 F5 AF .word 45045 -000542r 1 F6 AF .word 45046 -000544r 1 F7 AF .word 45047 -000546r 1 F8 AF .word 45048 -000548r 1 F9 AF .word 45049 -00054Ar 1 FA AF .word 45050 -00054Cr 1 FB AF .word 45051 -00054Er 1 FC AF .word 45052 -000550r 1 FD AF .word 45053 -000552r 1 FE AF .word 45054 -000554r 1 FF AF .word 45055 -000556r 1 00 B0 .word 45056 -000558r 1 01 B0 .word 45057 -00055Ar 1 02 B0 .word 45058 -00055Cr 1 03 B0 .word 45059 -00055Er 1 04 B0 .word 45060 -000560r 1 05 B0 .word 45061 -000562r 1 06 B0 .word 45062 -000564r 1 07 B0 .word 45063 -000566r 1 08 B0 .word 45064 -000568r 1 09 B0 .word 45065 -00056Ar 1 0A B0 .word 45066 -00056Cr 1 0B B0 .word 45067 -00056Er 1 0C B0 .word 45068 -000570r 1 0D B0 .word 45069 -000572r 1 0E B0 .word 45070 -000574r 1 0F B0 .word 45071 -000576r 1 E1 BF .word 49121 -000578r 1 E2 BF .word 49122 -00057Ar 1 E3 BF .word 49123 -00057Cr 1 E4 BF .word 49124 -00057Er 1 E5 BF .word 49125 -000580r 1 E6 BF .word 49126 -000582r 1 E7 BF .word 49127 -000584r 1 E8 BF .word 49128 -000586r 1 E9 BF .word 49129 -000588r 1 EA BF .word 49130 -00058Ar 1 EB BF .word 49131 -00058Cr 1 EC BF .word 49132 -00058Er 1 ED BF .word 49133 -000590r 1 EE BF .word 49134 -000592r 1 EF BF .word 49135 -000594r 1 F0 BF .word 49136 -000596r 1 F1 BF .word 49137 -000598r 1 F2 BF .word 49138 -00059Ar 1 F3 BF .word 49139 -00059Cr 1 F4 BF .word 49140 -00059Er 1 F5 BF .word 49141 -0005A0r 1 F6 BF .word 49142 -0005A2r 1 F7 BF .word 49143 -0005A4r 1 F8 BF .word 49144 -0005A6r 1 F9 BF .word 49145 -0005A8r 1 FA BF .word 49146 -0005AAr 1 FB BF .word 49147 -0005ACr 1 FC BF .word 49148 -0005AEr 1 FD BF .word 49149 -0005B0r 1 FE BF .word 49150 -0005B2r 1 FF BF .word 49151 -0005B4r 1 00 C0 .word 49152 -0005B6r 1 01 C0 .word 49153 -0005B8r 1 02 C0 .word 49154 -0005BAr 1 03 C0 .word 49155 -0005BCr 1 04 C0 .word 49156 -0005BEr 1 05 C0 .word 49157 -0005C0r 1 06 C0 .word 49158 -0005C2r 1 07 C0 .word 49159 -0005C4r 1 08 C0 .word 49160 -0005C6r 1 09 C0 .word 49161 -0005C8r 1 0A C0 .word 49162 -0005CAr 1 0B C0 .word 49163 -0005CCr 1 0C C0 .word 49164 -0005CEr 1 0D C0 .word 49165 -0005D0r 1 0E C0 .word 49166 -0005D2r 1 0F C0 .word 49167 -0005D4r 1 E1 CF .word 53217 -0005D6r 1 E2 CF .word 53218 -0005D8r 1 E3 CF .word 53219 -0005DAr 1 E4 CF .word 53220 -0005DCr 1 E5 CF .word 53221 -0005DEr 1 E6 CF .word 53222 -0005E0r 1 E7 CF .word 53223 -0005E2r 1 E8 CF .word 53224 -0005E4r 1 E9 CF .word 53225 -0005E6r 1 EA CF .word 53226 -0005E8r 1 EB CF .word 53227 -0005EAr 1 EC CF .word 53228 -0005ECr 1 ED CF .word 53229 -0005EEr 1 EE CF .word 53230 -0005F0r 1 EF CF .word 53231 -0005F2r 1 F0 CF .word 53232 -0005F4r 1 F1 CF .word 53233 -0005F6r 1 F2 CF .word 53234 -0005F8r 1 F3 CF .word 53235 -0005FAr 1 F4 CF .word 53236 -0005FCr 1 F5 CF .word 53237 -0005FEr 1 F6 CF .word 53238 -000600r 1 F7 CF .word 53239 -000602r 1 F8 CF .word 53240 -000604r 1 F9 CF .word 53241 -000606r 1 FA CF .word 53242 -000608r 1 FB CF .word 53243 -00060Ar 1 FC CF .word 53244 -00060Cr 1 FD CF .word 53245 -00060Er 1 FE CF .word 53246 -000610r 1 FF CF .word 53247 -000612r 1 00 D0 .word 53248 -000614r 1 01 D0 .word 53249 -000616r 1 02 D0 .word 53250 -000618r 1 03 D0 .word 53251 -00061Ar 1 04 D0 .word 53252 -00061Cr 1 05 D0 .word 53253 -00061Er 1 06 D0 .word 53254 -000620r 1 07 D0 .word 53255 -000622r 1 08 D0 .word 53256 -000624r 1 09 D0 .word 53257 -000626r 1 0A D0 .word 53258 -000628r 1 0B D0 .word 53259 -00062Ar 1 0C D0 .word 53260 -00062Cr 1 0D D0 .word 53261 -00062Er 1 0E D0 .word 53262 -000630r 1 0F D0 .word 53263 -000632r 1 E1 DF .word 57313 -000634r 1 E2 DF .word 57314 -000636r 1 E3 DF .word 57315 -000638r 1 E4 DF .word 57316 -00063Ar 1 E5 DF .word 57317 -00063Cr 1 E6 DF .word 57318 -00063Er 1 E7 DF .word 57319 -000640r 1 E8 DF .word 57320 -000642r 1 E9 DF .word 57321 -000644r 1 EA DF .word 57322 -000646r 1 EB DF .word 57323 -000648r 1 EC DF .word 57324 -00064Ar 1 ED DF .word 57325 -00064Cr 1 EE DF .word 57326 -00064Er 1 EF DF .word 57327 -000650r 1 F0 DF .word 57328 -000652r 1 F1 DF .word 57329 -000654r 1 F2 DF .word 57330 -000656r 1 F3 DF .word 57331 -000658r 1 F4 DF .word 57332 -00065Ar 1 F5 DF .word 57333 -00065Cr 1 F6 DF .word 57334 -00065Er 1 F7 DF .word 57335 -000660r 1 F8 DF .word 57336 -000662r 1 F9 DF .word 57337 -000664r 1 FA DF .word 57338 -000666r 1 FB DF .word 57339 -000668r 1 FC DF .word 57340 -00066Ar 1 FD DF .word 57341 -00066Cr 1 FE DF .word 57342 -00066Er 1 FF DF .word 57343 -000670r 1 00 E0 .word 57344 -000672r 1 01 E0 .word 57345 -000674r 1 02 E0 .word 57346 -000676r 1 03 E0 .word 57347 -000678r 1 04 E0 .word 57348 -00067Ar 1 05 E0 .word 57349 -00067Cr 1 06 E0 .word 57350 -00067Er 1 07 E0 .word 57351 -000680r 1 08 E0 .word 57352 -000682r 1 09 E0 .word 57353 -000684r 1 0A E0 .word 57354 -000686r 1 0B E0 .word 57355 -000688r 1 0C E0 .word 57356 -00068Ar 1 0D E0 .word 57357 -00068Cr 1 0E E0 .word 57358 -00068Er 1 0F E0 .word 57359 -000690r 1 E1 EF .word 61409 -000692r 1 E2 EF .word 61410 -000694r 1 E3 EF .word 61411 -000696r 1 E4 EF .word 61412 -000698r 1 E5 EF .word 61413 -00069Ar 1 E6 EF .word 61414 -00069Cr 1 E7 EF .word 61415 -00069Er 1 E8 EF .word 61416 -0006A0r 1 E9 EF .word 61417 -0006A2r 1 EA EF .word 61418 -0006A4r 1 EB EF .word 61419 -0006A6r 1 EC EF .word 61420 -0006A8r 1 ED EF .word 61421 -0006AAr 1 EE EF .word 61422 -0006ACr 1 EF EF .word 61423 -0006AEr 1 F0 EF .word 61424 -0006B0r 1 F1 EF .word 61425 -0006B2r 1 F2 EF .word 61426 -0006B4r 1 F3 EF .word 61427 -0006B6r 1 F4 EF .word 61428 -0006B8r 1 F5 EF .word 61429 -0006BAr 1 F6 EF .word 61430 -0006BCr 1 F7 EF .word 61431 -0006BEr 1 F8 EF .word 61432 -0006C0r 1 F9 EF .word 61433 -0006C2r 1 FA EF .word 61434 -0006C4r 1 FB EF .word 61435 -0006C6r 1 FC EF .word 61436 -0006C8r 1 FD EF .word 61437 -0006CAr 1 FE EF .word 61438 -0006CCr 1 FF EF .word 61439 -0006CEr 1 00 F0 .word 61440 -0006D0r 1 01 F0 .word 61441 -0006D2r 1 02 F0 .word 61442 -0006D4r 1 03 F0 .word 61443 -0006D6r 1 04 F0 .word 61444 -0006D8r 1 05 F0 .word 61445 -0006DAr 1 06 F0 .word 61446 -0006DCr 1 07 F0 .word 61447 -0006DEr 1 08 F0 .word 61448 -0006E0r 1 09 F0 .word 61449 -0006E2r 1 0A F0 .word 61450 -0006E4r 1 0B F0 .word 61451 -0006E6r 1 0C F0 .word 61452 -0006E8r 1 0D F0 .word 61453 -0006EAr 1 0E F0 .word 61454 -0006ECr 1 0F F0 .word 61455 -0006EEr 1 E1 FF .word 65505 -0006F0r 1 E2 FF .word 65506 -0006F2r 1 E3 FF .word 65507 -0006F4r 1 E4 FF .word 65508 -0006F6r 1 E5 FF .word 65509 -0006F8r 1 E6 FF .word 65510 -0006FAr 1 E7 FF .word 65511 -0006FCr 1 E8 FF .word 65512 -0006FEr 1 E9 FF .word 65513 -000700r 1 EA FF .word 65514 -000702r 1 EB FF .word 65515 -000704r 1 EC FF .word 65516 -000706r 1 ED FF .word 65517 -000708r 1 EE FF .word 65518 -00070Ar 1 EF FF .word 65519 -00070Cr 1 F0 FF .word 65520 -00070Er 1 F1 FF .word 65521 -000710r 1 F2 FF .word 65522 -000712r 1 F3 FF .word 65523 -000714r 1 F4 FF .word 65524 -000716r 1 F5 FF .word 65525 -000718r 1 F6 FF .word 65526 -00071Ar 1 F7 FF .word 65527 -00071Cr 1 F8 FF .word 65528 -00071Er 1 F9 FF .word 65529 -000720r 1 FA FF .word 65530 -000722r 1 FB FF .word 65531 -000724r 1 FC FF .word 65532 -000726r 1 FD FF .word 65533 -000728r 1 FE FF .word 65534 -00072Ar 1 FF FF .word 65535 +000396r 1 ; lower case pseudo-op +000396r 1 00 00 .word 0 +000398r 1 01 00 .word 1 +00039Ar 1 02 00 .word 2 +00039Cr 1 03 00 .word 3 +00039Er 1 04 00 .word 4 +0003A0r 1 05 00 .word 5 +0003A2r 1 06 00 .word 6 +0003A4r 1 07 00 .word 7 +0003A6r 1 08 00 .word 8 +0003A8r 1 09 00 .word 9 +0003AAr 1 0A 00 .word 10 +0003ACr 1 0B 00 .word 11 +0003AEr 1 0C 00 .word 12 +0003B0r 1 0D 00 .word 13 +0003B2r 1 0E 00 .word 14 +0003B4r 1 0F 00 .word 15 +0003B6r 1 10 00 .word 16 +0003B8r 1 11 00 .word 17 +0003BAr 1 12 00 .word 18 +0003BCr 1 13 00 .word 19 +0003BEr 1 70 00 .word 112 +0003C0r 1 71 00 .word 113 +0003C2r 1 72 00 .word 114 +0003C4r 1 73 00 .word 115 +0003C6r 1 74 00 .word 116 +0003C8r 1 75 00 .word 117 +0003CAr 1 76 00 .word 118 +0003CCr 1 77 00 .word 119 +0003CEr 1 78 00 .word 120 +0003D0r 1 79 00 .word 121 +0003D2r 1 7A 00 .word 122 +0003D4r 1 7B 00 .word 123 +0003D6r 1 7C 00 .word 124 +0003D8r 1 7D 00 .word 125 +0003DAr 1 7E 00 .word 126 +0003DCr 1 7F 00 .word 127 +0003DEr 1 80 00 .word 128 +0003E0r 1 81 00 .word 129 +0003E2r 1 82 00 .word 130 +0003E4r 1 83 00 .word 131 +0003E6r 1 84 00 .word 132 +0003E8r 1 85 00 .word 133 +0003EAr 1 86 00 .word 134 +0003ECr 1 F0 00 .word 240 +0003EEr 1 F1 00 .word 241 +0003F0r 1 F2 00 .word 242 +0003F2r 1 F3 00 .word 243 +0003F4r 1 F4 00 .word 244 +0003F6r 1 F5 00 .word 245 +0003F8r 1 F6 00 .word 246 +0003FAr 1 F7 00 .word 247 +0003FCr 1 F8 00 .word 248 +0003FEr 1 F9 00 .word 249 +000400r 1 FA 00 .word 250 +000402r 1 FB 00 .word 251 +000404r 1 FC 00 .word 252 +000406r 1 FD 00 .word 253 +000408r 1 FE 00 .word 254 +00040Ar 1 FF 00 .word 255 +00040Cr 1 00 01 .word 256 +00040Er 1 01 01 .word 257 +000410r 1 02 01 .word 258 +000412r 1 03 01 .word 259 +000414r 1 D2 0F .word 4050 +000416r 1 D3 0F .word 4051 +000418r 1 D4 0F .word 4052 +00041Ar 1 D5 0F .word 4053 +00041Cr 1 D6 0F .word 4054 +00041Er 1 D7 0F .word 4055 +000420r 1 D8 0F .word 4056 +000422r 1 D9 0F .word 4057 +000424r 1 DA 0F .word 4058 +000426r 1 DB 0F .word 4059 +000428r 1 DC 0F .word 4060 +00042Ar 1 DD 0F .word 4061 +00042Cr 1 DE 0F .word 4062 +00042Er 1 DF 0F .word 4063 +000430r 1 E0 0F .word 4064 +000432r 1 E1 0F .word 4065 +000434r 1 E2 0F .word 4066 +000436r 1 E3 0F .word 4067 +000438r 1 E4 0F .word 4068 +00043Ar 1 E5 0F .word 4069 +00043Cr 1 E6 0F .word 4070 +00043Er 1 E7 0F .word 4071 +000440r 1 E8 0F .word 4072 +000442r 1 E9 0F .word 4073 +000444r 1 EA 0F .word 4074 +000446r 1 EB 0F .word 4075 +000448r 1 EC 0F .word 4076 +00044Ar 1 ED 0F .word 4077 +00044Cr 1 EE 0F .word 4078 +00044Er 1 EF 0F .word 4079 +000450r 1 F0 0F .word 4080 +000452r 1 F1 0F .word 4081 +000454r 1 F2 0F .word 4082 +000456r 1 F3 0F .word 4083 +000458r 1 F4 0F .word 4084 +00045Ar 1 F5 0F .word 4085 +00045Cr 1 F6 0F .word 4086 +00045Er 1 F7 0F .word 4087 +000460r 1 F8 0F .word 4088 +000462r 1 F9 0F .word 4089 +000464r 1 FA 0F .word 4090 +000466r 1 FB 0F .word 4091 +000468r 1 FC 0F .word 4092 +00046Ar 1 FD 0F .word 4093 +00046Cr 1 FE 0F .word 4094 +00046Er 1 FF 0F .word 4095 +000470r 1 00 10 .word 4096 +000472r 1 01 10 .word 4097 +000474r 1 02 10 .word 4098 +000476r 1 03 10 .word 4099 +000478r 1 04 10 .word 4100 +00047Ar 1 05 10 .word 4101 +00047Cr 1 06 10 .word 4102 +00047Er 1 07 10 .word 4103 +000480r 1 08 10 .word 4104 +000482r 1 F0 7F .word 32752 +000484r 1 F1 7F .word 32753 +000486r 1 F2 7F .word 32754 +000488r 1 F3 7F .word 32755 +00048Ar 1 F4 7F .word 32756 +00048Cr 1 F5 7F .word 32757 +00048Er 1 F6 7F .word 32758 +000490r 1 F7 7F .word 32759 +000492r 1 F8 7F .word 32760 +000494r 1 F9 7F .word 32761 +000496r 1 FA 7F .word 32762 +000498r 1 FB 7F .word 32763 +00049Ar 1 FC 7F .word 32764 +00049Cr 1 FD 7F .word 32765 +00049Er 1 FE 7F .word 32766 +0004A0r 1 FF 7F .word 32767 +0004A2r 1 00 80 .word 32768 +0004A4r 1 01 80 .word 32769 +0004A6r 1 02 80 .word 32770 +0004A8r 1 03 80 .word 32771 +0004AAr 1 04 80 .word 32772 +0004ACr 1 05 80 .word 32773 +0004AEr 1 06 80 .word 32774 +0004B0r 1 07 80 .word 32775 +0004B2r 1 08 80 .word 32776 +0004B4r 1 09 80 .word 32777 +0004B6r 1 0A 80 .word 32778 +0004B8r 1 0B 80 .word 32779 +0004BAr 1 E1 9F .word 40929 +0004BCr 1 E2 9F .word 40930 +0004BEr 1 E3 9F .word 40931 +0004C0r 1 E4 9F .word 40932 +0004C2r 1 E5 9F .word 40933 +0004C4r 1 E6 9F .word 40934 +0004C6r 1 E7 9F .word 40935 +0004C8r 1 E8 9F .word 40936 +0004CAr 1 E9 9F .word 40937 +0004CCr 1 EA 9F .word 40938 +0004CEr 1 EB 9F .word 40939 +0004D0r 1 EC 9F .word 40940 +0004D2r 1 ED 9F .word 40941 +0004D4r 1 EE 9F .word 40942 +0004D6r 1 EF 9F .word 40943 +0004D8r 1 F0 9F .word 40944 +0004DAr 1 F1 9F .word 40945 +0004DCr 1 F2 9F .word 40946 +0004DEr 1 F3 9F .word 40947 +0004E0r 1 F4 9F .word 40948 +0004E2r 1 F5 9F .word 40949 +0004E4r 1 F6 9F .word 40950 +0004E6r 1 F7 9F .word 40951 +0004E8r 1 F8 9F .word 40952 +0004EAr 1 F9 9F .word 40953 +0004ECr 1 FA 9F .word 40954 +0004EEr 1 FB 9F .word 40955 +0004F0r 1 FC 9F .word 40956 +0004F2r 1 FD 9F .word 40957 +0004F4r 1 FE 9F .word 40958 +0004F6r 1 FF 9F .word 40959 +0004F8r 1 00 A0 .word 40960 +0004FAr 1 01 A0 .word 40961 +0004FCr 1 02 A0 .word 40962 +0004FEr 1 03 A0 .word 40963 +000500r 1 04 A0 .word 40964 +000502r 1 05 A0 .word 40965 +000504r 1 06 A0 .word 40966 +000506r 1 07 A0 .word 40967 +000508r 1 08 A0 .word 40968 +00050Ar 1 09 A0 .word 40969 +00050Cr 1 0A A0 .word 40970 +00050Er 1 0B A0 .word 40971 +000510r 1 0C A0 .word 40972 +000512r 1 0D A0 .word 40973 +000514r 1 0E A0 .word 40974 +000516r 1 0F A0 .word 40975 +000518r 1 E1 AF .word 45025 +00051Ar 1 E2 AF .word 45026 +00051Cr 1 E3 AF .word 45027 +00051Er 1 E4 AF .word 45028 +000520r 1 E5 AF .word 45029 +000522r 1 E6 AF .word 45030 +000524r 1 E7 AF .word 45031 +000526r 1 E8 AF .word 45032 +000528r 1 E9 AF .word 45033 +00052Ar 1 EA AF .word 45034 +00052Cr 1 EB AF .word 45035 +00052Er 1 EC AF .word 45036 +000530r 1 ED AF .word 45037 +000532r 1 EE AF .word 45038 +000534r 1 EF AF .word 45039 +000536r 1 F0 AF .word 45040 +000538r 1 F1 AF .word 45041 +00053Ar 1 F2 AF .word 45042 +00053Cr 1 F3 AF .word 45043 +00053Er 1 F4 AF .word 45044 +000540r 1 F5 AF .word 45045 +000542r 1 F6 AF .word 45046 +000544r 1 F7 AF .word 45047 +000546r 1 F8 AF .word 45048 +000548r 1 F9 AF .word 45049 +00054Ar 1 FA AF .word 45050 +00054Cr 1 FB AF .word 45051 +00054Er 1 FC AF .word 45052 +000550r 1 FD AF .word 45053 +000552r 1 FE AF .word 45054 +000554r 1 FF AF .word 45055 +000556r 1 00 B0 .word 45056 +000558r 1 01 B0 .word 45057 +00055Ar 1 02 B0 .word 45058 +00055Cr 1 03 B0 .word 45059 +00055Er 1 04 B0 .word 45060 +000560r 1 05 B0 .word 45061 +000562r 1 06 B0 .word 45062 +000564r 1 07 B0 .word 45063 +000566r 1 08 B0 .word 45064 +000568r 1 09 B0 .word 45065 +00056Ar 1 0A B0 .word 45066 +00056Cr 1 0B B0 .word 45067 +00056Er 1 0C B0 .word 45068 +000570r 1 0D B0 .word 45069 +000572r 1 0E B0 .word 45070 +000574r 1 0F B0 .word 45071 +000576r 1 E1 BF .word 49121 +000578r 1 E2 BF .word 49122 +00057Ar 1 E3 BF .word 49123 +00057Cr 1 E4 BF .word 49124 +00057Er 1 E5 BF .word 49125 +000580r 1 E6 BF .word 49126 +000582r 1 E7 BF .word 49127 +000584r 1 E8 BF .word 49128 +000586r 1 E9 BF .word 49129 +000588r 1 EA BF .word 49130 +00058Ar 1 EB BF .word 49131 +00058Cr 1 EC BF .word 49132 +00058Er 1 ED BF .word 49133 +000590r 1 EE BF .word 49134 +000592r 1 EF BF .word 49135 +000594r 1 F0 BF .word 49136 +000596r 1 F1 BF .word 49137 +000598r 1 F2 BF .word 49138 +00059Ar 1 F3 BF .word 49139 +00059Cr 1 F4 BF .word 49140 +00059Er 1 F5 BF .word 49141 +0005A0r 1 F6 BF .word 49142 +0005A2r 1 F7 BF .word 49143 +0005A4r 1 F8 BF .word 49144 +0005A6r 1 F9 BF .word 49145 +0005A8r 1 FA BF .word 49146 +0005AAr 1 FB BF .word 49147 +0005ACr 1 FC BF .word 49148 +0005AEr 1 FD BF .word 49149 +0005B0r 1 FE BF .word 49150 +0005B2r 1 FF BF .word 49151 +0005B4r 1 00 C0 .word 49152 +0005B6r 1 01 C0 .word 49153 +0005B8r 1 02 C0 .word 49154 +0005BAr 1 03 C0 .word 49155 +0005BCr 1 04 C0 .word 49156 +0005BEr 1 05 C0 .word 49157 +0005C0r 1 06 C0 .word 49158 +0005C2r 1 07 C0 .word 49159 +0005C4r 1 08 C0 .word 49160 +0005C6r 1 09 C0 .word 49161 +0005C8r 1 0A C0 .word 49162 +0005CAr 1 0B C0 .word 49163 +0005CCr 1 0C C0 .word 49164 +0005CEr 1 0D C0 .word 49165 +0005D0r 1 0E C0 .word 49166 +0005D2r 1 0F C0 .word 49167 +0005D4r 1 E1 CF .word 53217 +0005D6r 1 E2 CF .word 53218 +0005D8r 1 E3 CF .word 53219 +0005DAr 1 E4 CF .word 53220 +0005DCr 1 E5 CF .word 53221 +0005DEr 1 E6 CF .word 53222 +0005E0r 1 E7 CF .word 53223 +0005E2r 1 E8 CF .word 53224 +0005E4r 1 E9 CF .word 53225 +0005E6r 1 EA CF .word 53226 +0005E8r 1 EB CF .word 53227 +0005EAr 1 EC CF .word 53228 +0005ECr 1 ED CF .word 53229 +0005EEr 1 EE CF .word 53230 +0005F0r 1 EF CF .word 53231 +0005F2r 1 F0 CF .word 53232 +0005F4r 1 F1 CF .word 53233 +0005F6r 1 F2 CF .word 53234 +0005F8r 1 F3 CF .word 53235 +0005FAr 1 F4 CF .word 53236 +0005FCr 1 F5 CF .word 53237 +0005FEr 1 F6 CF .word 53238 +000600r 1 F7 CF .word 53239 +000602r 1 F8 CF .word 53240 +000604r 1 F9 CF .word 53241 +000606r 1 FA CF .word 53242 +000608r 1 FB CF .word 53243 +00060Ar 1 FC CF .word 53244 +00060Cr 1 FD CF .word 53245 +00060Er 1 FE CF .word 53246 +000610r 1 FF CF .word 53247 +000612r 1 00 D0 .word 53248 +000614r 1 01 D0 .word 53249 +000616r 1 02 D0 .word 53250 +000618r 1 03 D0 .word 53251 +00061Ar 1 04 D0 .word 53252 +00061Cr 1 05 D0 .word 53253 +00061Er 1 06 D0 .word 53254 +000620r 1 07 D0 .word 53255 +000622r 1 08 D0 .word 53256 +000624r 1 09 D0 .word 53257 +000626r 1 0A D0 .word 53258 +000628r 1 0B D0 .word 53259 +00062Ar 1 0C D0 .word 53260 +00062Cr 1 0D D0 .word 53261 +00062Er 1 0E D0 .word 53262 +000630r 1 0F D0 .word 53263 +000632r 1 E1 DF .word 57313 +000634r 1 E2 DF .word 57314 +000636r 1 E3 DF .word 57315 +000638r 1 E4 DF .word 57316 +00063Ar 1 E5 DF .word 57317 +00063Cr 1 E6 DF .word 57318 +00063Er 1 E7 DF .word 57319 +000640r 1 E8 DF .word 57320 +000642r 1 E9 DF .word 57321 +000644r 1 EA DF .word 57322 +000646r 1 EB DF .word 57323 +000648r 1 EC DF .word 57324 +00064Ar 1 ED DF .word 57325 +00064Cr 1 EE DF .word 57326 +00064Er 1 EF DF .word 57327 +000650r 1 F0 DF .word 57328 +000652r 1 F1 DF .word 57329 +000654r 1 F2 DF .word 57330 +000656r 1 F3 DF .word 57331 +000658r 1 F4 DF .word 57332 +00065Ar 1 F5 DF .word 57333 +00065Cr 1 F6 DF .word 57334 +00065Er 1 F7 DF .word 57335 +000660r 1 F8 DF .word 57336 +000662r 1 F9 DF .word 57337 +000664r 1 FA DF .word 57338 +000666r 1 FB DF .word 57339 +000668r 1 FC DF .word 57340 +00066Ar 1 FD DF .word 57341 +00066Cr 1 FE DF .word 57342 +00066Er 1 FF DF .word 57343 +000670r 1 00 E0 .word 57344 +000672r 1 01 E0 .word 57345 +000674r 1 02 E0 .word 57346 +000676r 1 03 E0 .word 57347 +000678r 1 04 E0 .word 57348 +00067Ar 1 05 E0 .word 57349 +00067Cr 1 06 E0 .word 57350 +00067Er 1 07 E0 .word 57351 +000680r 1 08 E0 .word 57352 +000682r 1 09 E0 .word 57353 +000684r 1 0A E0 .word 57354 +000686r 1 0B E0 .word 57355 +000688r 1 0C E0 .word 57356 +00068Ar 1 0D E0 .word 57357 +00068Cr 1 0E E0 .word 57358 +00068Er 1 0F E0 .word 57359 +000690r 1 E1 EF .word 61409 +000692r 1 E2 EF .word 61410 +000694r 1 E3 EF .word 61411 +000696r 1 E4 EF .word 61412 +000698r 1 E5 EF .word 61413 +00069Ar 1 E6 EF .word 61414 +00069Cr 1 E7 EF .word 61415 +00069Er 1 E8 EF .word 61416 +0006A0r 1 E9 EF .word 61417 +0006A2r 1 EA EF .word 61418 +0006A4r 1 EB EF .word 61419 +0006A6r 1 EC EF .word 61420 +0006A8r 1 ED EF .word 61421 +0006AAr 1 EE EF .word 61422 +0006ACr 1 EF EF .word 61423 +0006AEr 1 F0 EF .word 61424 +0006B0r 1 F1 EF .word 61425 +0006B2r 1 F2 EF .word 61426 +0006B4r 1 F3 EF .word 61427 +0006B6r 1 F4 EF .word 61428 +0006B8r 1 F5 EF .word 61429 +0006BAr 1 F6 EF .word 61430 +0006BCr 1 F7 EF .word 61431 +0006BEr 1 F8 EF .word 61432 +0006C0r 1 F9 EF .word 61433 +0006C2r 1 FA EF .word 61434 +0006C4r 1 FB EF .word 61435 +0006C6r 1 FC EF .word 61436 +0006C8r 1 FD EF .word 61437 +0006CAr 1 FE EF .word 61438 +0006CCr 1 FF EF .word 61439 +0006CEr 1 00 F0 .word 61440 +0006D0r 1 01 F0 .word 61441 +0006D2r 1 02 F0 .word 61442 +0006D4r 1 03 F0 .word 61443 +0006D6r 1 04 F0 .word 61444 +0006D8r 1 05 F0 .word 61445 +0006DAr 1 06 F0 .word 61446 +0006DCr 1 07 F0 .word 61447 +0006DEr 1 08 F0 .word 61448 +0006E0r 1 09 F0 .word 61449 +0006E2r 1 0A F0 .word 61450 +0006E4r 1 0B F0 .word 61451 +0006E6r 1 0C F0 .word 61452 +0006E8r 1 0D F0 .word 61453 +0006EAr 1 0E F0 .word 61454 +0006ECr 1 0F F0 .word 61455 +0006EEr 1 E1 FF .word 65505 +0006F0r 1 E2 FF .word 65506 +0006F2r 1 E3 FF .word 65507 +0006F4r 1 E4 FF .word 65508 +0006F6r 1 E5 FF .word 65509 +0006F8r 1 E6 FF .word 65510 +0006FAr 1 E7 FF .word 65511 +0006FCr 1 E8 FF .word 65512 +0006FEr 1 E9 FF .word 65513 +000700r 1 EA FF .word 65514 +000702r 1 EB FF .word 65515 +000704r 1 EC FF .word 65516 +000706r 1 ED FF .word 65517 +000708r 1 EE FF .word 65518 +00070Ar 1 EF FF .word 65519 +00070Cr 1 F0 FF .word 65520 +00070Er 1 F1 FF .word 65521 +000710r 1 F2 FF .word 65522 +000712r 1 F3 FF .word 65523 +000714r 1 F4 FF .word 65524 +000716r 1 F5 FF .word 65525 +000718r 1 F6 FF .word 65526 +00071Ar 1 F7 FF .word 65527 +00071Cr 1 F8 FF .word 65528 +00071Er 1 F9 FF .word 65529 +000720r 1 FA FF .word 65530 +000722r 1 FB FF .word 65531 +000724r 1 FC FF .word 65532 +000726r 1 FD FF .word 65533 +000728r 1 FE FF .word 65534 +00072Ar 1 FF FF .word 65535 00072Cr 1 -00072Cr 1 ; hex values -00072Cr 1 00 00 .word $0 -00072Er 1 01 00 .word $1 -000730r 1 02 00 .word $2 -000732r 1 03 00 .word $3 -000734r 1 04 00 .word $4 -000736r 1 05 00 .word $5 -000738r 1 06 00 .word $6 -00073Ar 1 07 00 .word $7 -00073Cr 1 08 00 .word $8 -00073Er 1 09 00 .word $9 -000740r 1 0A 00 .word $a -000742r 1 0B 00 .word $b -000744r 1 0C 00 .word $c -000746r 1 0D 00 .word $d -000748r 1 0E 00 .word $e -00074Ar 1 0F 00 .word $f -00074Cr 1 10 00 .word $10 -00074Er 1 11 00 .word $11 -000750r 1 12 00 .word $12 -000752r 1 13 00 .word $13 -000754r 1 70 00 .word $70 -000756r 1 71 00 .word $71 -000758r 1 72 00 .word $72 -00075Ar 1 73 00 .word $73 -00075Cr 1 74 00 .word $74 -00075Er 1 75 00 .word $75 -000760r 1 76 00 .word $76 -000762r 1 77 00 .word $77 -000764r 1 78 00 .word $78 -000766r 1 79 00 .word $79 -000768r 1 7A 00 .word $7a -00076Ar 1 7B 00 .word $7b -00076Cr 1 7C 00 .word $7c -00076Er 1 7D 00 .word $7d -000770r 1 7E 00 .word $7e -000772r 1 7F 00 .word $7f -000774r 1 80 00 .word $80 -000776r 1 81 00 .word $81 -000778r 1 82 00 .word $82 -00077Ar 1 83 00 .word $83 -00077Cr 1 84 00 .word $84 -00077Er 1 85 00 .word $85 -000780r 1 86 00 .word $86 -000782r 1 F0 00 .word $f0 -000784r 1 F1 00 .word $f1 -000786r 1 F2 00 .word $f2 -000788r 1 F3 00 .word $f3 -00078Ar 1 F4 00 .word $f4 -00078Cr 1 F5 00 .word $f5 -00078Er 1 F6 00 .word $f6 -000790r 1 F7 00 .word $f7 -000792r 1 F8 00 .word $f8 -000794r 1 F9 00 .word $f9 -000796r 1 FA 00 .word $fa -000798r 1 FB 00 .word $fb -00079Ar 1 FC 00 .word $fc -00079Cr 1 FD 00 .word $fd -00079Er 1 FE 00 .word $fe -0007A0r 1 FF 00 .word $ff -0007A2r 1 00 01 .word $100 -0007A4r 1 01 01 .word $101 -0007A6r 1 02 01 .word $102 -0007A8r 1 03 01 .word $103 -0007AAr 1 D2 0F .word $fd2 -0007ACr 1 D3 0F .word $fd3 -0007AEr 1 D4 0F .word $fd4 -0007B0r 1 D5 0F .word $fd5 -0007B2r 1 D6 0F .word $fd6 -0007B4r 1 D7 0F .word $fd7 -0007B6r 1 D8 0F .word $fd8 -0007B8r 1 D9 0F .word $fd9 -0007BAr 1 DA 0F .word $fda -0007BCr 1 DB 0F .word $fdb -0007BEr 1 DC 0F .word $fdc -0007C0r 1 DD 0F .word $fdd -0007C2r 1 DE 0F .word $fde -0007C4r 1 DF 0F .word $fdf -0007C6r 1 E0 0F .word $fe0 -0007C8r 1 E1 0F .word $fe1 -0007CAr 1 E2 0F .word $fe2 -0007CCr 1 E3 0F .word $fe3 -0007CEr 1 E4 0F .word $fe4 -0007D0r 1 E5 0F .word $fe5 -0007D2r 1 E6 0F .word $fe6 -0007D4r 1 E7 0F .word $fe7 -0007D6r 1 E8 0F .word $fe8 -0007D8r 1 E9 0F .word $fe9 -0007DAr 1 EA 0F .word $fea -0007DCr 1 EB 0F .word $feb -0007DEr 1 EC 0F .word $fec -0007E0r 1 ED 0F .word $fed -0007E2r 1 EE 0F .word $fee -0007E4r 1 EF 0F .word $fef -0007E6r 1 F0 0F .word $ff0 -0007E8r 1 F1 0F .word $ff1 -0007EAr 1 F2 0F .word $ff2 -0007ECr 1 F3 0F .word $ff3 -0007EEr 1 F4 0F .word $ff4 -0007F0r 1 F5 0F .word $ff5 -0007F2r 1 F6 0F .word $ff6 -0007F4r 1 F7 0F .word $ff7 -0007F6r 1 F8 0F .word $ff8 -0007F8r 1 F9 0F .word $ff9 -0007FAr 1 FA 0F .word $ffa -0007FCr 1 FB 0F .word $ffb -0007FEr 1 FC 0F .word $ffc -000800r 1 FD 0F .word $ffd -000802r 1 FE 0F .word $ffe -000804r 1 FF 0F .word $fff -000806r 1 00 10 .word $1000 -000808r 1 01 10 .word $1001 -00080Ar 1 02 10 .word $1002 -00080Cr 1 03 10 .word $1003 -00080Er 1 04 10 .word $1004 -000810r 1 05 10 .word $1005 -000812r 1 06 10 .word $1006 -000814r 1 07 10 .word $1007 -000816r 1 08 10 .word $1008 -000818r 1 F0 7F .word $7ff0 -00081Ar 1 F1 7F .word $7ff1 -00081Cr 1 F2 7F .word $7ff2 -00081Er 1 F3 7F .word $7ff3 -000820r 1 F4 7F .word $7ff4 -000822r 1 F5 7F .word $7ff5 -000824r 1 F6 7F .word $7ff6 -000826r 1 F7 7F .word $7ff7 -000828r 1 F8 7F .word $7ff8 -00082Ar 1 F9 7F .word $7ff9 -00082Cr 1 FA 7F .word $7ffa -00082Er 1 FB 7F .word $7ffb -000830r 1 FC 7F .word $7ffc -000832r 1 FD 7F .word $7ffd -000834r 1 FE 7F .word $7ffe -000836r 1 FF 7F .word $7fff -000838r 1 00 80 .word $8000 -00083Ar 1 01 80 .word $8001 -00083Cr 1 02 80 .word $8002 -00083Er 1 03 80 .word $8003 -000840r 1 04 80 .word $8004 -000842r 1 05 80 .word $8005 -000844r 1 06 80 .word $8006 -000846r 1 07 80 .word $8007 -000848r 1 08 80 .word $8008 -00084Ar 1 09 80 .word $8009 -00084Cr 1 0A 80 .word $800a -00084Er 1 0B 80 .word $800b -000850r 1 E1 9F .word $9fe1 -000852r 1 E2 9F .word $9fe2 -000854r 1 E3 9F .word $9fe3 -000856r 1 E4 9F .word $9fe4 -000858r 1 E5 9F .word $9fe5 -00085Ar 1 E6 9F .word $9fe6 -00085Cr 1 E7 9F .word $9fe7 -00085Er 1 E8 9F .word $9fe8 -000860r 1 E9 9F .word $9fe9 -000862r 1 EA 9F .word $9fea -000864r 1 EB 9F .word $9feb -000866r 1 EC 9F .word $9fec -000868r 1 ED 9F .word $9fed -00086Ar 1 EE 9F .word $9fee -00086Cr 1 EF 9F .word $9fef -00086Er 1 F0 9F .word $9ff0 -000870r 1 F1 9F .word $9ff1 -000872r 1 F2 9F .word $9ff2 -000874r 1 F3 9F .word $9ff3 -000876r 1 F4 9F .word $9ff4 -000878r 1 F5 9F .word $9ff5 -00087Ar 1 F6 9F .word $9ff6 -00087Cr 1 F7 9F .word $9ff7 -00087Er 1 F8 9F .word $9ff8 -000880r 1 F9 9F .word $9ff9 -000882r 1 FA 9F .word $9ffa -000884r 1 FB 9F .word $9ffb -000886r 1 FC 9F .word $9ffc -000888r 1 FD 9F .word $9ffd -00088Ar 1 FE 9F .word $9ffe -00088Cr 1 FF 9F .word $9fff -00088Er 1 00 A0 .word $a000 -000890r 1 01 A0 .word $a001 -000892r 1 02 A0 .word $a002 -000894r 1 03 A0 .word $a003 -000896r 1 04 A0 .word $a004 -000898r 1 05 A0 .word $a005 -00089Ar 1 06 A0 .word $a006 -00089Cr 1 07 A0 .word $a007 -00089Er 1 08 A0 .word $a008 -0008A0r 1 09 A0 .word $a009 -0008A2r 1 0A A0 .word $a00a -0008A4r 1 0B A0 .word $a00b -0008A6r 1 0C A0 .word $a00c -0008A8r 1 0D A0 .word $a00d -0008AAr 1 0E A0 .word $a00e -0008ACr 1 0F A0 .word $a00f -0008AEr 1 E1 AF .word $afe1 -0008B0r 1 E2 AF .word $afe2 -0008B2r 1 E3 AF .word $afe3 -0008B4r 1 E4 AF .word $afe4 -0008B6r 1 E5 AF .word $afe5 -0008B8r 1 E6 AF .word $afe6 -0008BAr 1 E7 AF .word $afe7 -0008BCr 1 E8 AF .word $afe8 -0008BEr 1 E9 AF .word $afe9 -0008C0r 1 EA AF .word $afea -0008C2r 1 EB AF .word $afeb -0008C4r 1 EC AF .word $afec -0008C6r 1 ED AF .word $afed -0008C8r 1 EE AF .word $afee -0008CAr 1 EF AF .word $afef -0008CCr 1 F0 AF .word $aff0 -0008CEr 1 F1 AF .word $aff1 -0008D0r 1 F2 AF .word $aff2 -0008D2r 1 F3 AF .word $aff3 -0008D4r 1 F4 AF .word $aff4 -0008D6r 1 F5 AF .word $aff5 -0008D8r 1 F6 AF .word $aff6 -0008DAr 1 F7 AF .word $aff7 -0008DCr 1 F8 AF .word $aff8 -0008DEr 1 F9 AF .word $aff9 -0008E0r 1 FA AF .word $affa -0008E2r 1 FB AF .word $affb -0008E4r 1 FC AF .word $affc -0008E6r 1 FD AF .word $affd -0008E8r 1 FE AF .word $affe -0008EAr 1 FF AF .word $afff -0008ECr 1 00 B0 .word $b000 -0008EEr 1 01 B0 .word $b001 -0008F0r 1 02 B0 .word $b002 -0008F2r 1 03 B0 .word $b003 -0008F4r 1 04 B0 .word $b004 -0008F6r 1 05 B0 .word $b005 -0008F8r 1 06 B0 .word $b006 -0008FAr 1 07 B0 .word $b007 -0008FCr 1 08 B0 .word $b008 -0008FEr 1 09 B0 .word $b009 -000900r 1 0A B0 .word $b00a -000902r 1 0B B0 .word $b00b -000904r 1 0C B0 .word $b00c -000906r 1 0D B0 .word $b00d -000908r 1 0E B0 .word $b00e -00090Ar 1 0F B0 .word $b00f -00090Cr 1 E1 BF .word $bfe1 -00090Er 1 E2 BF .word $bfe2 -000910r 1 E3 BF .word $bfe3 -000912r 1 E4 BF .word $bfe4 -000914r 1 E5 BF .word $bfe5 -000916r 1 E6 BF .word $bfe6 -000918r 1 E7 BF .word $bfe7 -00091Ar 1 E8 BF .word $bfe8 -00091Cr 1 E9 BF .word $bfe9 -00091Er 1 EA BF .word $bfea -000920r 1 EB BF .word $bfeb -000922r 1 EC BF .word $bfec -000924r 1 ED BF .word $bfed -000926r 1 EE BF .word $bfee -000928r 1 EF BF .word $bfef -00092Ar 1 F0 BF .word $bff0 -00092Cr 1 F1 BF .word $bff1 -00092Er 1 F2 BF .word $bff2 -000930r 1 F3 BF .word $bff3 -000932r 1 F4 BF .word $bff4 -000934r 1 F5 BF .word $bff5 -000936r 1 F6 BF .word $bff6 -000938r 1 F7 BF .word $bff7 -00093Ar 1 F8 BF .word $bff8 -00093Cr 1 F9 BF .word $bff9 -00093Er 1 FA BF .word $bffa -000940r 1 FB BF .word $bffb -000942r 1 FC BF .word $bffc -000944r 1 FD BF .word $bffd -000946r 1 FE BF .word $bffe -000948r 1 FF BF .word $bfff -00094Ar 1 00 C0 .word $c000 -00094Cr 1 01 C0 .word $c001 -00094Er 1 02 C0 .word $c002 -000950r 1 03 C0 .word $c003 -000952r 1 04 C0 .word $c004 -000954r 1 05 C0 .word $c005 -000956r 1 06 C0 .word $c006 -000958r 1 07 C0 .word $c007 -00095Ar 1 08 C0 .word $c008 -00095Cr 1 09 C0 .word $c009 -00095Er 1 0A C0 .word $c00a -000960r 1 0B C0 .word $c00b -000962r 1 0C C0 .word $c00c -000964r 1 0D C0 .word $c00d -000966r 1 0E C0 .word $c00e -000968r 1 0F C0 .word $c00f -00096Ar 1 E1 CF .word $cfe1 -00096Cr 1 E2 CF .word $cfe2 -00096Er 1 E3 CF .word $cfe3 -000970r 1 E4 CF .word $cfe4 -000972r 1 E5 CF .word $cfe5 -000974r 1 E6 CF .word $cfe6 -000976r 1 E7 CF .word $cfe7 -000978r 1 E8 CF .word $cfe8 -00097Ar 1 E9 CF .word $cfe9 -00097Cr 1 EA CF .word $cfea -00097Er 1 EB CF .word $cfeb -000980r 1 EC CF .word $cfec -000982r 1 ED CF .word $cfed -000984r 1 EE CF .word $cfee -000986r 1 EF CF .word $cfef -000988r 1 F0 CF .word $cff0 -00098Ar 1 F1 CF .word $cff1 -00098Cr 1 F2 CF .word $cff2 -00098Er 1 F3 CF .word $cff3 -000990r 1 F4 CF .word $cff4 -000992r 1 F5 CF .word $cff5 -000994r 1 F6 CF .word $cff6 -000996r 1 F7 CF .word $cff7 -000998r 1 F8 CF .word $cff8 -00099Ar 1 F9 CF .word $cff9 -00099Cr 1 FA CF .word $cffa -00099Er 1 FB CF .word $cffb -0009A0r 1 FC CF .word $cffc -0009A2r 1 FD CF .word $cffd -0009A4r 1 FE CF .word $cffe -0009A6r 1 FF CF .word $cfff -0009A8r 1 00 D0 .word $d000 -0009AAr 1 01 D0 .word $d001 -0009ACr 1 02 D0 .word $d002 -0009AEr 1 03 D0 .word $d003 -0009B0r 1 04 D0 .word $d004 -0009B2r 1 05 D0 .word $d005 -0009B4r 1 06 D0 .word $d006 -0009B6r 1 07 D0 .word $d007 -0009B8r 1 08 D0 .word $d008 -0009BAr 1 09 D0 .word $d009 -0009BCr 1 0A D0 .word $d00a -0009BEr 1 0B D0 .word $d00b -0009C0r 1 0C D0 .word $d00c -0009C2r 1 0D D0 .word $d00d -0009C4r 1 0E D0 .word $d00e -0009C6r 1 0F D0 .word $d00f -0009C8r 1 E1 DF .word $dfe1 -0009CAr 1 E2 DF .word $dfe2 -0009CCr 1 E3 DF .word $dfe3 -0009CEr 1 E4 DF .word $dfe4 -0009D0r 1 E5 DF .word $dfe5 -0009D2r 1 E6 DF .word $dfe6 -0009D4r 1 E7 DF .word $dfe7 -0009D6r 1 E8 DF .word $dfe8 -0009D8r 1 E9 DF .word $dfe9 -0009DAr 1 EA DF .word $dfea -0009DCr 1 EB DF .word $dfeb -0009DEr 1 EC DF .word $dfec -0009E0r 1 ED DF .word $dfed -0009E2r 1 EE DF .word $dfee -0009E4r 1 EF DF .word $dfef -0009E6r 1 F0 DF .word $dff0 -0009E8r 1 F1 DF .word $dff1 -0009EAr 1 F2 DF .word $dff2 -0009ECr 1 F3 DF .word $dff3 -0009EEr 1 F4 DF .word $dff4 -0009F0r 1 F5 DF .word $dff5 -0009F2r 1 F6 DF .word $dff6 -0009F4r 1 F7 DF .word $dff7 -0009F6r 1 F8 DF .word $dff8 -0009F8r 1 F9 DF .word $dff9 -0009FAr 1 FA DF .word $dffa -0009FCr 1 FB DF .word $dffb -0009FEr 1 FC DF .word $dffc -000A00r 1 FD DF .word $dffd -000A02r 1 FE DF .word $dffe -000A04r 1 FF DF .word $dfff -000A06r 1 00 E0 .word $e000 -000A08r 1 01 E0 .word $e001 -000A0Ar 1 02 E0 .word $e002 -000A0Cr 1 03 E0 .word $e003 -000A0Er 1 04 E0 .word $e004 -000A10r 1 05 E0 .word $e005 -000A12r 1 06 E0 .word $e006 -000A14r 1 07 E0 .word $e007 -000A16r 1 08 E0 .word $e008 -000A18r 1 09 E0 .word $e009 -000A1Ar 1 0A E0 .word $e00a -000A1Cr 1 0B E0 .word $e00b -000A1Er 1 0C E0 .word $e00c -000A20r 1 0D E0 .word $e00d -000A22r 1 0E E0 .word $e00e -000A24r 1 0F E0 .word $e00f -000A26r 1 E1 EF .word $efe1 -000A28r 1 E2 EF .word $efe2 -000A2Ar 1 E3 EF .word $efe3 -000A2Cr 1 E4 EF .word $efe4 -000A2Er 1 E5 EF .word $efe5 -000A30r 1 E6 EF .word $efe6 -000A32r 1 E7 EF .word $efe7 -000A34r 1 E8 EF .word $efe8 -000A36r 1 E9 EF .word $efe9 -000A38r 1 EA EF .word $efea -000A3Ar 1 EB EF .word $efeb -000A3Cr 1 EC EF .word $efec -000A3Er 1 ED EF .word $efed -000A40r 1 EE EF .word $efee -000A42r 1 EF EF .word $efef -000A44r 1 F0 EF .word $eff0 -000A46r 1 F1 EF .word $eff1 -000A48r 1 F2 EF .word $eff2 -000A4Ar 1 F3 EF .word $eff3 -000A4Cr 1 F4 EF .word $eff4 -000A4Er 1 F5 EF .word $eff5 -000A50r 1 F6 EF .word $eff6 -000A52r 1 F7 EF .word $eff7 -000A54r 1 F8 EF .word $eff8 -000A56r 1 F9 EF .word $eff9 -000A58r 1 FA EF .word $effa -000A5Ar 1 FB EF .word $effb -000A5Cr 1 FC EF .word $effc -000A5Er 1 FD EF .word $effd -000A60r 1 FE EF .word $effe -000A62r 1 FF EF .word $efff -000A64r 1 00 F0 .word $f000 -000A66r 1 01 F0 .word $f001 -000A68r 1 02 F0 .word $f002 -000A6Ar 1 03 F0 .word $f003 -000A6Cr 1 04 F0 .word $f004 -000A6Er 1 05 F0 .word $f005 -000A70r 1 06 F0 .word $f006 -000A72r 1 07 F0 .word $f007 -000A74r 1 08 F0 .word $f008 -000A76r 1 09 F0 .word $f009 -000A78r 1 0A F0 .word $f00a -000A7Ar 1 0B F0 .word $f00b -000A7Cr 1 0C F0 .word $f00c -000A7Er 1 0D F0 .word $f00d -000A80r 1 0E F0 .word $f00e -000A82r 1 0F F0 .word $f00f -000A84r 1 E1 FF .word $ffe1 -000A86r 1 E2 FF .word $ffe2 -000A88r 1 E3 FF .word $ffe3 -000A8Ar 1 E4 FF .word $ffe4 -000A8Cr 1 E5 FF .word $ffe5 -000A8Er 1 E6 FF .word $ffe6 -000A90r 1 E7 FF .word $ffe7 -000A92r 1 E8 FF .word $ffe8 -000A94r 1 E9 FF .word $ffe9 -000A96r 1 EA FF .word $ffea -000A98r 1 EB FF .word $ffeb -000A9Ar 1 EC FF .word $ffec -000A9Cr 1 ED FF .word $ffed -000A9Er 1 EE FF .word $ffee -000AA0r 1 EF FF .word $ffef -000AA2r 1 F0 FF .word $fff0 -000AA4r 1 F1 FF .word $fff1 -000AA6r 1 F2 FF .word $fff2 -000AA8r 1 F3 FF .word $fff3 -000AAAr 1 F4 FF .word $fff4 -000AACr 1 F5 FF .word $fff5 -000AAEr 1 F6 FF .word $fff6 -000AB0r 1 F7 FF .word $fff7 -000AB2r 1 F8 FF .word $fff8 -000AB4r 1 F9 FF .word $fff9 -000AB6r 1 FA FF .word $fffa -000AB8r 1 FB FF .word $fffb -000ABAr 1 FC FF .word $fffc -000ABCr 1 FD FF .word $fffd -000ABEr 1 FE FF .word $fffe -000AC0r 1 FF FF .word $ffff +00072Cr 1 ; hex values +00072Cr 1 00 00 .word $0 +00072Er 1 01 00 .word $1 +000730r 1 02 00 .word $2 +000732r 1 03 00 .word $3 +000734r 1 04 00 .word $4 +000736r 1 05 00 .word $5 +000738r 1 06 00 .word $6 +00073Ar 1 07 00 .word $7 +00073Cr 1 08 00 .word $8 +00073Er 1 09 00 .word $9 +000740r 1 0A 00 .word $a +000742r 1 0B 00 .word $b +000744r 1 0C 00 .word $c +000746r 1 0D 00 .word $d +000748r 1 0E 00 .word $e +00074Ar 1 0F 00 .word $f +00074Cr 1 10 00 .word $10 +00074Er 1 11 00 .word $11 +000750r 1 12 00 .word $12 +000752r 1 13 00 .word $13 +000754r 1 70 00 .word $70 +000756r 1 71 00 .word $71 +000758r 1 72 00 .word $72 +00075Ar 1 73 00 .word $73 +00075Cr 1 74 00 .word $74 +00075Er 1 75 00 .word $75 +000760r 1 76 00 .word $76 +000762r 1 77 00 .word $77 +000764r 1 78 00 .word $78 +000766r 1 79 00 .word $79 +000768r 1 7A 00 .word $7a +00076Ar 1 7B 00 .word $7b +00076Cr 1 7C 00 .word $7c +00076Er 1 7D 00 .word $7d +000770r 1 7E 00 .word $7e +000772r 1 7F 00 .word $7f +000774r 1 80 00 .word $80 +000776r 1 81 00 .word $81 +000778r 1 82 00 .word $82 +00077Ar 1 83 00 .word $83 +00077Cr 1 84 00 .word $84 +00077Er 1 85 00 .word $85 +000780r 1 86 00 .word $86 +000782r 1 F0 00 .word $f0 +000784r 1 F1 00 .word $f1 +000786r 1 F2 00 .word $f2 +000788r 1 F3 00 .word $f3 +00078Ar 1 F4 00 .word $f4 +00078Cr 1 F5 00 .word $f5 +00078Er 1 F6 00 .word $f6 +000790r 1 F7 00 .word $f7 +000792r 1 F8 00 .word $f8 +000794r 1 F9 00 .word $f9 +000796r 1 FA 00 .word $fa +000798r 1 FB 00 .word $fb +00079Ar 1 FC 00 .word $fc +00079Cr 1 FD 00 .word $fd +00079Er 1 FE 00 .word $fe +0007A0r 1 FF 00 .word $ff +0007A2r 1 00 01 .word $100 +0007A4r 1 01 01 .word $101 +0007A6r 1 02 01 .word $102 +0007A8r 1 03 01 .word $103 +0007AAr 1 D2 0F .word $fd2 +0007ACr 1 D3 0F .word $fd3 +0007AEr 1 D4 0F .word $fd4 +0007B0r 1 D5 0F .word $fd5 +0007B2r 1 D6 0F .word $fd6 +0007B4r 1 D7 0F .word $fd7 +0007B6r 1 D8 0F .word $fd8 +0007B8r 1 D9 0F .word $fd9 +0007BAr 1 DA 0F .word $fda +0007BCr 1 DB 0F .word $fdb +0007BEr 1 DC 0F .word $fdc +0007C0r 1 DD 0F .word $fdd +0007C2r 1 DE 0F .word $fde +0007C4r 1 DF 0F .word $fdf +0007C6r 1 E0 0F .word $fe0 +0007C8r 1 E1 0F .word $fe1 +0007CAr 1 E2 0F .word $fe2 +0007CCr 1 E3 0F .word $fe3 +0007CEr 1 E4 0F .word $fe4 +0007D0r 1 E5 0F .word $fe5 +0007D2r 1 E6 0F .word $fe6 +0007D4r 1 E7 0F .word $fe7 +0007D6r 1 E8 0F .word $fe8 +0007D8r 1 E9 0F .word $fe9 +0007DAr 1 EA 0F .word $fea +0007DCr 1 EB 0F .word $feb +0007DEr 1 EC 0F .word $fec +0007E0r 1 ED 0F .word $fed +0007E2r 1 EE 0F .word $fee +0007E4r 1 EF 0F .word $fef +0007E6r 1 F0 0F .word $ff0 +0007E8r 1 F1 0F .word $ff1 +0007EAr 1 F2 0F .word $ff2 +0007ECr 1 F3 0F .word $ff3 +0007EEr 1 F4 0F .word $ff4 +0007F0r 1 F5 0F .word $ff5 +0007F2r 1 F6 0F .word $ff6 +0007F4r 1 F7 0F .word $ff7 +0007F6r 1 F8 0F .word $ff8 +0007F8r 1 F9 0F .word $ff9 +0007FAr 1 FA 0F .word $ffa +0007FCr 1 FB 0F .word $ffb +0007FEr 1 FC 0F .word $ffc +000800r 1 FD 0F .word $ffd +000802r 1 FE 0F .word $ffe +000804r 1 FF 0F .word $fff +000806r 1 00 10 .word $1000 +000808r 1 01 10 .word $1001 +00080Ar 1 02 10 .word $1002 +00080Cr 1 03 10 .word $1003 +00080Er 1 04 10 .word $1004 +000810r 1 05 10 .word $1005 +000812r 1 06 10 .word $1006 +000814r 1 07 10 .word $1007 +000816r 1 08 10 .word $1008 +000818r 1 F0 7F .word $7ff0 +00081Ar 1 F1 7F .word $7ff1 +00081Cr 1 F2 7F .word $7ff2 +00081Er 1 F3 7F .word $7ff3 +000820r 1 F4 7F .word $7ff4 +000822r 1 F5 7F .word $7ff5 +000824r 1 F6 7F .word $7ff6 +000826r 1 F7 7F .word $7ff7 +000828r 1 F8 7F .word $7ff8 +00082Ar 1 F9 7F .word $7ff9 +00082Cr 1 FA 7F .word $7ffa +00082Er 1 FB 7F .word $7ffb +000830r 1 FC 7F .word $7ffc +000832r 1 FD 7F .word $7ffd +000834r 1 FE 7F .word $7ffe +000836r 1 FF 7F .word $7fff +000838r 1 00 80 .word $8000 +00083Ar 1 01 80 .word $8001 +00083Cr 1 02 80 .word $8002 +00083Er 1 03 80 .word $8003 +000840r 1 04 80 .word $8004 +000842r 1 05 80 .word $8005 +000844r 1 06 80 .word $8006 +000846r 1 07 80 .word $8007 +000848r 1 08 80 .word $8008 +00084Ar 1 09 80 .word $8009 +00084Cr 1 0A 80 .word $800a +00084Er 1 0B 80 .word $800b +000850r 1 E1 9F .word $9fe1 +000852r 1 E2 9F .word $9fe2 +000854r 1 E3 9F .word $9fe3 +000856r 1 E4 9F .word $9fe4 +000858r 1 E5 9F .word $9fe5 +00085Ar 1 E6 9F .word $9fe6 +00085Cr 1 E7 9F .word $9fe7 +00085Er 1 E8 9F .word $9fe8 +000860r 1 E9 9F .word $9fe9 +000862r 1 EA 9F .word $9fea +000864r 1 EB 9F .word $9feb +000866r 1 EC 9F .word $9fec +000868r 1 ED 9F .word $9fed +00086Ar 1 EE 9F .word $9fee +00086Cr 1 EF 9F .word $9fef +00086Er 1 F0 9F .word $9ff0 +000870r 1 F1 9F .word $9ff1 +000872r 1 F2 9F .word $9ff2 +000874r 1 F3 9F .word $9ff3 +000876r 1 F4 9F .word $9ff4 +000878r 1 F5 9F .word $9ff5 +00087Ar 1 F6 9F .word $9ff6 +00087Cr 1 F7 9F .word $9ff7 +00087Er 1 F8 9F .word $9ff8 +000880r 1 F9 9F .word $9ff9 +000882r 1 FA 9F .word $9ffa +000884r 1 FB 9F .word $9ffb +000886r 1 FC 9F .word $9ffc +000888r 1 FD 9F .word $9ffd +00088Ar 1 FE 9F .word $9ffe +00088Cr 1 FF 9F .word $9fff +00088Er 1 00 A0 .word $a000 +000890r 1 01 A0 .word $a001 +000892r 1 02 A0 .word $a002 +000894r 1 03 A0 .word $a003 +000896r 1 04 A0 .word $a004 +000898r 1 05 A0 .word $a005 +00089Ar 1 06 A0 .word $a006 +00089Cr 1 07 A0 .word $a007 +00089Er 1 08 A0 .word $a008 +0008A0r 1 09 A0 .word $a009 +0008A2r 1 0A A0 .word $a00a +0008A4r 1 0B A0 .word $a00b +0008A6r 1 0C A0 .word $a00c +0008A8r 1 0D A0 .word $a00d +0008AAr 1 0E A0 .word $a00e +0008ACr 1 0F A0 .word $a00f +0008AEr 1 E1 AF .word $afe1 +0008B0r 1 E2 AF .word $afe2 +0008B2r 1 E3 AF .word $afe3 +0008B4r 1 E4 AF .word $afe4 +0008B6r 1 E5 AF .word $afe5 +0008B8r 1 E6 AF .word $afe6 +0008BAr 1 E7 AF .word $afe7 +0008BCr 1 E8 AF .word $afe8 +0008BEr 1 E9 AF .word $afe9 +0008C0r 1 EA AF .word $afea +0008C2r 1 EB AF .word $afeb +0008C4r 1 EC AF .word $afec +0008C6r 1 ED AF .word $afed +0008C8r 1 EE AF .word $afee +0008CAr 1 EF AF .word $afef +0008CCr 1 F0 AF .word $aff0 +0008CEr 1 F1 AF .word $aff1 +0008D0r 1 F2 AF .word $aff2 +0008D2r 1 F3 AF .word $aff3 +0008D4r 1 F4 AF .word $aff4 +0008D6r 1 F5 AF .word $aff5 +0008D8r 1 F6 AF .word $aff6 +0008DAr 1 F7 AF .word $aff7 +0008DCr 1 F8 AF .word $aff8 +0008DEr 1 F9 AF .word $aff9 +0008E0r 1 FA AF .word $affa +0008E2r 1 FB AF .word $affb +0008E4r 1 FC AF .word $affc +0008E6r 1 FD AF .word $affd +0008E8r 1 FE AF .word $affe +0008EAr 1 FF AF .word $afff +0008ECr 1 00 B0 .word $b000 +0008EEr 1 01 B0 .word $b001 +0008F0r 1 02 B0 .word $b002 +0008F2r 1 03 B0 .word $b003 +0008F4r 1 04 B0 .word $b004 +0008F6r 1 05 B0 .word $b005 +0008F8r 1 06 B0 .word $b006 +0008FAr 1 07 B0 .word $b007 +0008FCr 1 08 B0 .word $b008 +0008FEr 1 09 B0 .word $b009 +000900r 1 0A B0 .word $b00a +000902r 1 0B B0 .word $b00b +000904r 1 0C B0 .word $b00c +000906r 1 0D B0 .word $b00d +000908r 1 0E B0 .word $b00e +00090Ar 1 0F B0 .word $b00f +00090Cr 1 E1 BF .word $bfe1 +00090Er 1 E2 BF .word $bfe2 +000910r 1 E3 BF .word $bfe3 +000912r 1 E4 BF .word $bfe4 +000914r 1 E5 BF .word $bfe5 +000916r 1 E6 BF .word $bfe6 +000918r 1 E7 BF .word $bfe7 +00091Ar 1 E8 BF .word $bfe8 +00091Cr 1 E9 BF .word $bfe9 +00091Er 1 EA BF .word $bfea +000920r 1 EB BF .word $bfeb +000922r 1 EC BF .word $bfec +000924r 1 ED BF .word $bfed +000926r 1 EE BF .word $bfee +000928r 1 EF BF .word $bfef +00092Ar 1 F0 BF .word $bff0 +00092Cr 1 F1 BF .word $bff1 +00092Er 1 F2 BF .word $bff2 +000930r 1 F3 BF .word $bff3 +000932r 1 F4 BF .word $bff4 +000934r 1 F5 BF .word $bff5 +000936r 1 F6 BF .word $bff6 +000938r 1 F7 BF .word $bff7 +00093Ar 1 F8 BF .word $bff8 +00093Cr 1 F9 BF .word $bff9 +00093Er 1 FA BF .word $bffa +000940r 1 FB BF .word $bffb +000942r 1 FC BF .word $bffc +000944r 1 FD BF .word $bffd +000946r 1 FE BF .word $bffe +000948r 1 FF BF .word $bfff +00094Ar 1 00 C0 .word $c000 +00094Cr 1 01 C0 .word $c001 +00094Er 1 02 C0 .word $c002 +000950r 1 03 C0 .word $c003 +000952r 1 04 C0 .word $c004 +000954r 1 05 C0 .word $c005 +000956r 1 06 C0 .word $c006 +000958r 1 07 C0 .word $c007 +00095Ar 1 08 C0 .word $c008 +00095Cr 1 09 C0 .word $c009 +00095Er 1 0A C0 .word $c00a +000960r 1 0B C0 .word $c00b +000962r 1 0C C0 .word $c00c +000964r 1 0D C0 .word $c00d +000966r 1 0E C0 .word $c00e +000968r 1 0F C0 .word $c00f +00096Ar 1 E1 CF .word $cfe1 +00096Cr 1 E2 CF .word $cfe2 +00096Er 1 E3 CF .word $cfe3 +000970r 1 E4 CF .word $cfe4 +000972r 1 E5 CF .word $cfe5 +000974r 1 E6 CF .word $cfe6 +000976r 1 E7 CF .word $cfe7 +000978r 1 E8 CF .word $cfe8 +00097Ar 1 E9 CF .word $cfe9 +00097Cr 1 EA CF .word $cfea +00097Er 1 EB CF .word $cfeb +000980r 1 EC CF .word $cfec +000982r 1 ED CF .word $cfed +000984r 1 EE CF .word $cfee +000986r 1 EF CF .word $cfef +000988r 1 F0 CF .word $cff0 +00098Ar 1 F1 CF .word $cff1 +00098Cr 1 F2 CF .word $cff2 +00098Er 1 F3 CF .word $cff3 +000990r 1 F4 CF .word $cff4 +000992r 1 F5 CF .word $cff5 +000994r 1 F6 CF .word $cff6 +000996r 1 F7 CF .word $cff7 +000998r 1 F8 CF .word $cff8 +00099Ar 1 F9 CF .word $cff9 +00099Cr 1 FA CF .word $cffa +00099Er 1 FB CF .word $cffb +0009A0r 1 FC CF .word $cffc +0009A2r 1 FD CF .word $cffd +0009A4r 1 FE CF .word $cffe +0009A6r 1 FF CF .word $cfff +0009A8r 1 00 D0 .word $d000 +0009AAr 1 01 D0 .word $d001 +0009ACr 1 02 D0 .word $d002 +0009AEr 1 03 D0 .word $d003 +0009B0r 1 04 D0 .word $d004 +0009B2r 1 05 D0 .word $d005 +0009B4r 1 06 D0 .word $d006 +0009B6r 1 07 D0 .word $d007 +0009B8r 1 08 D0 .word $d008 +0009BAr 1 09 D0 .word $d009 +0009BCr 1 0A D0 .word $d00a +0009BEr 1 0B D0 .word $d00b +0009C0r 1 0C D0 .word $d00c +0009C2r 1 0D D0 .word $d00d +0009C4r 1 0E D0 .word $d00e +0009C6r 1 0F D0 .word $d00f +0009C8r 1 E1 DF .word $dfe1 +0009CAr 1 E2 DF .word $dfe2 +0009CCr 1 E3 DF .word $dfe3 +0009CEr 1 E4 DF .word $dfe4 +0009D0r 1 E5 DF .word $dfe5 +0009D2r 1 E6 DF .word $dfe6 +0009D4r 1 E7 DF .word $dfe7 +0009D6r 1 E8 DF .word $dfe8 +0009D8r 1 E9 DF .word $dfe9 +0009DAr 1 EA DF .word $dfea +0009DCr 1 EB DF .word $dfeb +0009DEr 1 EC DF .word $dfec +0009E0r 1 ED DF .word $dfed +0009E2r 1 EE DF .word $dfee +0009E4r 1 EF DF .word $dfef +0009E6r 1 F0 DF .word $dff0 +0009E8r 1 F1 DF .word $dff1 +0009EAr 1 F2 DF .word $dff2 +0009ECr 1 F3 DF .word $dff3 +0009EEr 1 F4 DF .word $dff4 +0009F0r 1 F5 DF .word $dff5 +0009F2r 1 F6 DF .word $dff6 +0009F4r 1 F7 DF .word $dff7 +0009F6r 1 F8 DF .word $dff8 +0009F8r 1 F9 DF .word $dff9 +0009FAr 1 FA DF .word $dffa +0009FCr 1 FB DF .word $dffb +0009FEr 1 FC DF .word $dffc +000A00r 1 FD DF .word $dffd +000A02r 1 FE DF .word $dffe +000A04r 1 FF DF .word $dfff +000A06r 1 00 E0 .word $e000 +000A08r 1 01 E0 .word $e001 +000A0Ar 1 02 E0 .word $e002 +000A0Cr 1 03 E0 .word $e003 +000A0Er 1 04 E0 .word $e004 +000A10r 1 05 E0 .word $e005 +000A12r 1 06 E0 .word $e006 +000A14r 1 07 E0 .word $e007 +000A16r 1 08 E0 .word $e008 +000A18r 1 09 E0 .word $e009 +000A1Ar 1 0A E0 .word $e00a +000A1Cr 1 0B E0 .word $e00b +000A1Er 1 0C E0 .word $e00c +000A20r 1 0D E0 .word $e00d +000A22r 1 0E E0 .word $e00e +000A24r 1 0F E0 .word $e00f +000A26r 1 E1 EF .word $efe1 +000A28r 1 E2 EF .word $efe2 +000A2Ar 1 E3 EF .word $efe3 +000A2Cr 1 E4 EF .word $efe4 +000A2Er 1 E5 EF .word $efe5 +000A30r 1 E6 EF .word $efe6 +000A32r 1 E7 EF .word $efe7 +000A34r 1 E8 EF .word $efe8 +000A36r 1 E9 EF .word $efe9 +000A38r 1 EA EF .word $efea +000A3Ar 1 EB EF .word $efeb +000A3Cr 1 EC EF .word $efec +000A3Er 1 ED EF .word $efed +000A40r 1 EE EF .word $efee +000A42r 1 EF EF .word $efef +000A44r 1 F0 EF .word $eff0 +000A46r 1 F1 EF .word $eff1 +000A48r 1 F2 EF .word $eff2 +000A4Ar 1 F3 EF .word $eff3 +000A4Cr 1 F4 EF .word $eff4 +000A4Er 1 F5 EF .word $eff5 +000A50r 1 F6 EF .word $eff6 +000A52r 1 F7 EF .word $eff7 +000A54r 1 F8 EF .word $eff8 +000A56r 1 F9 EF .word $eff9 +000A58r 1 FA EF .word $effa +000A5Ar 1 FB EF .word $effb +000A5Cr 1 FC EF .word $effc +000A5Er 1 FD EF .word $effd +000A60r 1 FE EF .word $effe +000A62r 1 FF EF .word $efff +000A64r 1 00 F0 .word $f000 +000A66r 1 01 F0 .word $f001 +000A68r 1 02 F0 .word $f002 +000A6Ar 1 03 F0 .word $f003 +000A6Cr 1 04 F0 .word $f004 +000A6Er 1 05 F0 .word $f005 +000A70r 1 06 F0 .word $f006 +000A72r 1 07 F0 .word $f007 +000A74r 1 08 F0 .word $f008 +000A76r 1 09 F0 .word $f009 +000A78r 1 0A F0 .word $f00a +000A7Ar 1 0B F0 .word $f00b +000A7Cr 1 0C F0 .word $f00c +000A7Er 1 0D F0 .word $f00d +000A80r 1 0E F0 .word $f00e +000A82r 1 0F F0 .word $f00f +000A84r 1 E1 FF .word $ffe1 +000A86r 1 E2 FF .word $ffe2 +000A88r 1 E3 FF .word $ffe3 +000A8Ar 1 E4 FF .word $ffe4 +000A8Cr 1 E5 FF .word $ffe5 +000A8Er 1 E6 FF .word $ffe6 +000A90r 1 E7 FF .word $ffe7 +000A92r 1 E8 FF .word $ffe8 +000A94r 1 E9 FF .word $ffe9 +000A96r 1 EA FF .word $ffea +000A98r 1 EB FF .word $ffeb +000A9Ar 1 EC FF .word $ffec +000A9Cr 1 ED FF .word $ffed +000A9Er 1 EE FF .word $ffee +000AA0r 1 EF FF .word $ffef +000AA2r 1 F0 FF .word $fff0 +000AA4r 1 F1 FF .word $fff1 +000AA6r 1 F2 FF .word $fff2 +000AA8r 1 F3 FF .word $fff3 +000AAAr 1 F4 FF .word $fff4 +000AACr 1 F5 FF .word $fff5 +000AAEr 1 F6 FF .word $fff6 +000AB0r 1 F7 FF .word $fff7 +000AB2r 1 F8 FF .word $fff8 +000AB4r 1 F9 FF .word $fff9 +000AB6r 1 FA FF .word $fffa +000AB8r 1 FB FF .word $fffb +000ABAr 1 FC FF .word $fffc +000ABCr 1 FD FF .word $fffd +000ABEr 1 FE FF .word $fffe +000AC0r 1 FF FF .word $ffff 000AC2r 1 -000AC2r 1 ; hex values, uppercase -000AC2r 1 00 00 .word $0 -000AC4r 1 01 00 .word $1 -000AC6r 1 02 00 .word $2 -000AC8r 1 03 00 .word $3 -000ACAr 1 04 00 .word $4 -000ACCr 1 05 00 .word $5 -000ACEr 1 06 00 .word $6 -000AD0r 1 07 00 .word $7 -000AD2r 1 08 00 .word $8 -000AD4r 1 09 00 .word $9 -000AD6r 1 0A 00 .word $A -000AD8r 1 0B 00 .word $B -000ADAr 1 0C 00 .word $C -000ADCr 1 0D 00 .word $D -000ADEr 1 0E 00 .word $E -000AE0r 1 0F 00 .word $F -000AE2r 1 10 00 .word $10 -000AE4r 1 11 00 .word $11 -000AE6r 1 12 00 .word $12 -000AE8r 1 13 00 .word $13 -000AEAr 1 70 00 .word $70 -000AECr 1 71 00 .word $71 -000AEEr 1 72 00 .word $72 -000AF0r 1 73 00 .word $73 -000AF2r 1 74 00 .word $74 -000AF4r 1 75 00 .word $75 -000AF6r 1 76 00 .word $76 -000AF8r 1 77 00 .word $77 -000AFAr 1 78 00 .word $78 -000AFCr 1 79 00 .word $79 -000AFEr 1 7A 00 .word $7A -000B00r 1 7B 00 .word $7B -000B02r 1 7C 00 .word $7C -000B04r 1 7D 00 .word $7D -000B06r 1 7E 00 .word $7E -000B08r 1 7F 00 .word $7F -000B0Ar 1 80 00 .word $80 -000B0Cr 1 81 00 .word $81 -000B0Er 1 82 00 .word $82 -000B10r 1 83 00 .word $83 -000B12r 1 84 00 .word $84 -000B14r 1 85 00 .word $85 -000B16r 1 86 00 .word $86 -000B18r 1 F0 00 .word $F0 -000B1Ar 1 F1 00 .word $F1 -000B1Cr 1 F2 00 .word $F2 -000B1Er 1 F3 00 .word $F3 -000B20r 1 F4 00 .word $F4 -000B22r 1 F5 00 .word $F5 -000B24r 1 F6 00 .word $F6 -000B26r 1 F7 00 .word $F7 -000B28r 1 F8 00 .word $F8 -000B2Ar 1 F9 00 .word $F9 -000B2Cr 1 FA 00 .word $FA -000B2Er 1 FB 00 .word $FB -000B30r 1 FC 00 .word $FC -000B32r 1 FD 00 .word $FD -000B34r 1 FE 00 .word $FE -000B36r 1 FF 00 .word $FF -000B38r 1 00 01 .word $100 -000B3Ar 1 01 01 .word $101 -000B3Cr 1 02 01 .word $102 -000B3Er 1 03 01 .word $103 -000B40r 1 D2 0F .word $FD2 -000B42r 1 D3 0F .word $FD3 -000B44r 1 D4 0F .word $FD4 -000B46r 1 D5 0F .word $FD5 -000B48r 1 D6 0F .word $FD6 -000B4Ar 1 D7 0F .word $FD7 -000B4Cr 1 D8 0F .word $FD8 -000B4Er 1 D9 0F .word $FD9 -000B50r 1 DA 0F .word $FDA -000B52r 1 DB 0F .word $FDB -000B54r 1 DC 0F .word $FDC -000B56r 1 DD 0F .word $FDD -000B58r 1 DE 0F .word $FDE -000B5Ar 1 DF 0F .word $FDF -000B5Cr 1 E0 0F .word $FE0 -000B5Er 1 E1 0F .word $FE1 -000B60r 1 E2 0F .word $FE2 -000B62r 1 E3 0F .word $FE3 -000B64r 1 E4 0F .word $FE4 -000B66r 1 E5 0F .word $FE5 -000B68r 1 E6 0F .word $FE6 -000B6Ar 1 E7 0F .word $FE7 -000B6Cr 1 E8 0F .word $FE8 -000B6Er 1 E9 0F .word $FE9 -000B70r 1 EA 0F .word $FEA -000B72r 1 EB 0F .word $FEB -000B74r 1 EC 0F .word $FEC -000B76r 1 ED 0F .word $FED -000B78r 1 EE 0F .word $FEE -000B7Ar 1 EF 0F .word $FEF -000B7Cr 1 F0 0F .word $FF0 -000B7Er 1 F1 0F .word $FF1 -000B80r 1 F2 0F .word $FF2 -000B82r 1 F3 0F .word $FF3 -000B84r 1 F4 0F .word $FF4 -000B86r 1 F5 0F .word $FF5 -000B88r 1 F6 0F .word $FF6 -000B8Ar 1 F7 0F .word $FF7 -000B8Cr 1 F8 0F .word $FF8 -000B8Er 1 F9 0F .word $FF9 -000B90r 1 FA 0F .word $FFA -000B92r 1 FB 0F .word $FFB -000B94r 1 FC 0F .word $FFC -000B96r 1 FD 0F .word $FFD -000B98r 1 FE 0F .word $FFE -000B9Ar 1 FF 0F .word $FFF -000B9Cr 1 00 10 .word $1000 -000B9Er 1 01 10 .word $1001 -000BA0r 1 02 10 .word $1002 -000BA2r 1 03 10 .word $1003 -000BA4r 1 04 10 .word $1004 -000BA6r 1 05 10 .word $1005 -000BA8r 1 06 10 .word $1006 -000BAAr 1 07 10 .word $1007 -000BACr 1 08 10 .word $1008 -000BAEr 1 F0 7F .word $7FF0 -000BB0r 1 F1 7F .word $7FF1 -000BB2r 1 F2 7F .word $7FF2 -000BB4r 1 F3 7F .word $7FF3 -000BB6r 1 F4 7F .word $7FF4 -000BB8r 1 F5 7F .word $7FF5 -000BBAr 1 F6 7F .word $7FF6 -000BBCr 1 F7 7F .word $7FF7 -000BBEr 1 F8 7F .word $7FF8 -000BC0r 1 F9 7F .word $7FF9 -000BC2r 1 FA 7F .word $7FFA -000BC4r 1 FB 7F .word $7FFB -000BC6r 1 FC 7F .word $7FFC -000BC8r 1 FD 7F .word $7FFD -000BCAr 1 FE 7F .word $7FFE -000BCCr 1 FF 7F .word $7FFF -000BCEr 1 00 80 .word $8000 -000BD0r 1 01 80 .word $8001 -000BD2r 1 02 80 .word $8002 -000BD4r 1 03 80 .word $8003 -000BD6r 1 04 80 .word $8004 -000BD8r 1 05 80 .word $8005 -000BDAr 1 06 80 .word $8006 -000BDCr 1 07 80 .word $8007 -000BDEr 1 08 80 .word $8008 -000BE0r 1 09 80 .word $8009 -000BE2r 1 0A 80 .word $800A -000BE4r 1 0B 80 .word $800B -000BE6r 1 E1 9F .word $9FE1 -000BE8r 1 E2 9F .word $9FE2 -000BEAr 1 E3 9F .word $9FE3 -000BECr 1 E4 9F .word $9FE4 -000BEEr 1 E5 9F .word $9FE5 -000BF0r 1 E6 9F .word $9FE6 -000BF2r 1 E7 9F .word $9FE7 -000BF4r 1 E8 9F .word $9FE8 -000BF6r 1 E9 9F .word $9FE9 -000BF8r 1 EA 9F .word $9FEA -000BFAr 1 EB 9F .word $9FEB -000BFCr 1 EC 9F .word $9FEC -000BFEr 1 ED 9F .word $9FED -000C00r 1 EE 9F .word $9FEE -000C02r 1 EF 9F .word $9FEF -000C04r 1 F0 9F .word $9FF0 -000C06r 1 F1 9F .word $9FF1 -000C08r 1 F2 9F .word $9FF2 -000C0Ar 1 F3 9F .word $9FF3 -000C0Cr 1 F4 9F .word $9FF4 -000C0Er 1 F5 9F .word $9FF5 -000C10r 1 F6 9F .word $9FF6 -000C12r 1 F7 9F .word $9FF7 -000C14r 1 F8 9F .word $9FF8 -000C16r 1 F9 9F .word $9FF9 -000C18r 1 FA 9F .word $9FFA -000C1Ar 1 FB 9F .word $9FFB -000C1Cr 1 FC 9F .word $9FFC -000C1Er 1 FD 9F .word $9FFD -000C20r 1 FE 9F .word $9FFE -000C22r 1 FF 9F .word $9FFF -000C24r 1 00 A0 .word $A000 -000C26r 1 01 A0 .word $A001 -000C28r 1 02 A0 .word $A002 -000C2Ar 1 03 A0 .word $A003 -000C2Cr 1 04 A0 .word $A004 -000C2Er 1 05 A0 .word $A005 -000C30r 1 06 A0 .word $A006 -000C32r 1 07 A0 .word $A007 -000C34r 1 08 A0 .word $A008 -000C36r 1 09 A0 .word $A009 -000C38r 1 0A A0 .word $A00A -000C3Ar 1 0B A0 .word $A00B -000C3Cr 1 0C A0 .word $A00C -000C3Er 1 0D A0 .word $A00D -000C40r 1 0E A0 .word $A00E -000C42r 1 0F A0 .word $A00F -000C44r 1 E1 AF .word $AFE1 -000C46r 1 E2 AF .word $AFE2 -000C48r 1 E3 AF .word $AFE3 -000C4Ar 1 E4 AF .word $AFE4 -000C4Cr 1 E5 AF .word $AFE5 -000C4Er 1 E6 AF .word $AFE6 -000C50r 1 E7 AF .word $AFE7 -000C52r 1 E8 AF .word $AFE8 -000C54r 1 E9 AF .word $AFE9 -000C56r 1 EA AF .word $AFEA -000C58r 1 EB AF .word $AFEB -000C5Ar 1 EC AF .word $AFEC -000C5Cr 1 ED AF .word $AFED -000C5Er 1 EE AF .word $AFEE -000C60r 1 EF AF .word $AFEF -000C62r 1 F0 AF .word $AFF0 -000C64r 1 F1 AF .word $AFF1 -000C66r 1 F2 AF .word $AFF2 -000C68r 1 F3 AF .word $AFF3 -000C6Ar 1 F4 AF .word $AFF4 -000C6Cr 1 F5 AF .word $AFF5 -000C6Er 1 F6 AF .word $AFF6 -000C70r 1 F7 AF .word $AFF7 -000C72r 1 F8 AF .word $AFF8 -000C74r 1 F9 AF .word $AFF9 -000C76r 1 FA AF .word $AFFA -000C78r 1 FB AF .word $AFFB -000C7Ar 1 FC AF .word $AFFC -000C7Cr 1 FD AF .word $AFFD -000C7Er 1 FE AF .word $AFFE -000C80r 1 FF AF .word $AFFF -000C82r 1 00 B0 .word $B000 -000C84r 1 01 B0 .word $B001 -000C86r 1 02 B0 .word $B002 -000C88r 1 03 B0 .word $B003 -000C8Ar 1 04 B0 .word $B004 -000C8Cr 1 05 B0 .word $B005 -000C8Er 1 06 B0 .word $B006 -000C90r 1 07 B0 .word $B007 -000C92r 1 08 B0 .word $B008 -000C94r 1 09 B0 .word $B009 -000C96r 1 0A B0 .word $B00A -000C98r 1 0B B0 .word $B00B -000C9Ar 1 0C B0 .word $B00C -000C9Cr 1 0D B0 .word $B00D -000C9Er 1 0E B0 .word $B00E -000CA0r 1 0F B0 .word $B00F -000CA2r 1 E1 BF .word $BFE1 -000CA4r 1 E2 BF .word $BFE2 -000CA6r 1 E3 BF .word $BFE3 -000CA8r 1 E4 BF .word $BFE4 -000CAAr 1 E5 BF .word $BFE5 -000CACr 1 E6 BF .word $BFE6 -000CAEr 1 E7 BF .word $BFE7 -000CB0r 1 E8 BF .word $BFE8 -000CB2r 1 E9 BF .word $BFE9 -000CB4r 1 EA BF .word $BFEA -000CB6r 1 EB BF .word $BFEB -000CB8r 1 EC BF .word $BFEC -000CBAr 1 ED BF .word $BFED -000CBCr 1 EE BF .word $BFEE -000CBEr 1 EF BF .word $BFEF -000CC0r 1 F0 BF .word $BFF0 -000CC2r 1 F1 BF .word $BFF1 -000CC4r 1 F2 BF .word $BFF2 -000CC6r 1 F3 BF .word $BFF3 -000CC8r 1 F4 BF .word $BFF4 -000CCAr 1 F5 BF .word $BFF5 -000CCCr 1 F6 BF .word $BFF6 -000CCEr 1 F7 BF .word $BFF7 -000CD0r 1 F8 BF .word $BFF8 -000CD2r 1 F9 BF .word $BFF9 -000CD4r 1 FA BF .word $BFFA -000CD6r 1 FB BF .word $BFFB -000CD8r 1 FC BF .word $BFFC -000CDAr 1 FD BF .word $BFFD -000CDCr 1 FE BF .word $BFFE -000CDEr 1 FF BF .word $BFFF -000CE0r 1 00 C0 .word $C000 -000CE2r 1 01 C0 .word $C001 -000CE4r 1 02 C0 .word $C002 -000CE6r 1 03 C0 .word $C003 -000CE8r 1 04 C0 .word $C004 -000CEAr 1 05 C0 .word $C005 -000CECr 1 06 C0 .word $C006 -000CEEr 1 07 C0 .word $C007 -000CF0r 1 08 C0 .word $C008 -000CF2r 1 09 C0 .word $C009 -000CF4r 1 0A C0 .word $C00A -000CF6r 1 0B C0 .word $C00B -000CF8r 1 0C C0 .word $C00C -000CFAr 1 0D C0 .word $C00D -000CFCr 1 0E C0 .word $C00E -000CFEr 1 0F C0 .word $C00F -000D00r 1 E1 CF .word $CFE1 -000D02r 1 E2 CF .word $CFE2 -000D04r 1 E3 CF .word $CFE3 -000D06r 1 E4 CF .word $CFE4 -000D08r 1 E5 CF .word $CFE5 -000D0Ar 1 E6 CF .word $CFE6 -000D0Cr 1 E7 CF .word $CFE7 -000D0Er 1 E8 CF .word $CFE8 -000D10r 1 E9 CF .word $CFE9 -000D12r 1 EA CF .word $CFEA -000D14r 1 EB CF .word $CFEB -000D16r 1 EC CF .word $CFEC -000D18r 1 ED CF .word $CFED -000D1Ar 1 EE CF .word $CFEE -000D1Cr 1 EF CF .word $CFEF -000D1Er 1 F0 CF .word $CFF0 -000D20r 1 F1 CF .word $CFF1 -000D22r 1 F2 CF .word $CFF2 -000D24r 1 F3 CF .word $CFF3 -000D26r 1 F4 CF .word $CFF4 -000D28r 1 F5 CF .word $CFF5 -000D2Ar 1 F6 CF .word $CFF6 -000D2Cr 1 F7 CF .word $CFF7 -000D2Er 1 F8 CF .word $CFF8 -000D30r 1 F9 CF .word $CFF9 -000D32r 1 FA CF .word $CFFA -000D34r 1 FB CF .word $CFFB -000D36r 1 FC CF .word $CFFC -000D38r 1 FD CF .word $CFFD -000D3Ar 1 FE CF .word $CFFE -000D3Cr 1 FF CF .word $CFFF -000D3Er 1 00 D0 .word $D000 -000D40r 1 01 D0 .word $D001 -000D42r 1 02 D0 .word $D002 -000D44r 1 03 D0 .word $D003 -000D46r 1 04 D0 .word $D004 -000D48r 1 05 D0 .word $D005 -000D4Ar 1 06 D0 .word $D006 -000D4Cr 1 07 D0 .word $D007 -000D4Er 1 08 D0 .word $D008 -000D50r 1 09 D0 .word $D009 -000D52r 1 0A D0 .word $D00A -000D54r 1 0B D0 .word $D00B -000D56r 1 0C D0 .word $D00C -000D58r 1 0D D0 .word $D00D -000D5Ar 1 0E D0 .word $D00E -000D5Cr 1 0F D0 .word $D00F -000D5Er 1 E1 DF .word $DFE1 -000D60r 1 E2 DF .word $DFE2 -000D62r 1 E3 DF .word $DFE3 -000D64r 1 E4 DF .word $DFE4 -000D66r 1 E5 DF .word $DFE5 -000D68r 1 E6 DF .word $DFE6 -000D6Ar 1 E7 DF .word $DFE7 -000D6Cr 1 E8 DF .word $DFE8 -000D6Er 1 E9 DF .word $DFE9 -000D70r 1 EA DF .word $DFEA -000D72r 1 EB DF .word $DFEB -000D74r 1 EC DF .word $DFEC -000D76r 1 ED DF .word $DFED -000D78r 1 EE DF .word $DFEE -000D7Ar 1 EF DF .word $DFEF -000D7Cr 1 F0 DF .word $DFF0 -000D7Er 1 F1 DF .word $DFF1 -000D80r 1 F2 DF .word $DFF2 -000D82r 1 F3 DF .word $DFF3 -000D84r 1 F4 DF .word $DFF4 -000D86r 1 F5 DF .word $DFF5 -000D88r 1 F6 DF .word $DFF6 -000D8Ar 1 F7 DF .word $DFF7 -000D8Cr 1 F8 DF .word $DFF8 -000D8Er 1 F9 DF .word $DFF9 -000D90r 1 FA DF .word $DFFA -000D92r 1 FB DF .word $DFFB -000D94r 1 FC DF .word $DFFC -000D96r 1 FD DF .word $DFFD -000D98r 1 FE DF .word $DFFE -000D9Ar 1 FF DF .word $DFFF -000D9Cr 1 00 E0 .word $E000 -000D9Er 1 01 E0 .word $E001 -000DA0r 1 02 E0 .word $E002 -000DA2r 1 03 E0 .word $E003 -000DA4r 1 04 E0 .word $E004 -000DA6r 1 05 E0 .word $E005 -000DA8r 1 06 E0 .word $E006 -000DAAr 1 07 E0 .word $E007 -000DACr 1 08 E0 .word $E008 -000DAEr 1 09 E0 .word $E009 -000DB0r 1 0A E0 .word $E00A -000DB2r 1 0B E0 .word $E00B -000DB4r 1 0C E0 .word $E00C -000DB6r 1 0D E0 .word $E00D -000DB8r 1 0E E0 .word $E00E -000DBAr 1 0F E0 .word $E00F -000DBCr 1 E1 EF .word $EFE1 -000DBEr 1 E2 EF .word $EFE2 -000DC0r 1 E3 EF .word $EFE3 -000DC2r 1 E4 EF .word $EFE4 -000DC4r 1 E5 EF .word $EFE5 -000DC6r 1 E6 EF .word $EFE6 -000DC8r 1 E7 EF .word $EFE7 -000DCAr 1 E8 EF .word $EFE8 -000DCCr 1 E9 EF .word $EFE9 -000DCEr 1 EA EF .word $EFEA -000DD0r 1 EB EF .word $EFEB -000DD2r 1 EC EF .word $EFEC -000DD4r 1 ED EF .word $EFED -000DD6r 1 EE EF .word $EFEE -000DD8r 1 EF EF .word $EFEF -000DDAr 1 F0 EF .word $EFF0 -000DDCr 1 F1 EF .word $EFF1 -000DDEr 1 F2 EF .word $EFF2 -000DE0r 1 F3 EF .word $EFF3 -000DE2r 1 F4 EF .word $EFF4 -000DE4r 1 F5 EF .word $EFF5 -000DE6r 1 F6 EF .word $EFF6 -000DE8r 1 F7 EF .word $EFF7 -000DEAr 1 F8 EF .word $EFF8 -000DECr 1 F9 EF .word $EFF9 -000DEEr 1 FA EF .word $EFFA -000DF0r 1 FB EF .word $EFFB -000DF2r 1 FC EF .word $EFFC -000DF4r 1 FD EF .word $EFFD -000DF6r 1 FE EF .word $EFFE -000DF8r 1 FF EF .word $EFFF -000DFAr 1 00 F0 .word $F000 -000DFCr 1 01 F0 .word $F001 -000DFEr 1 02 F0 .word $F002 -000E00r 1 03 F0 .word $F003 -000E02r 1 04 F0 .word $F004 -000E04r 1 05 F0 .word $F005 -000E06r 1 06 F0 .word $F006 -000E08r 1 07 F0 .word $F007 -000E0Ar 1 08 F0 .word $F008 -000E0Cr 1 09 F0 .word $F009 -000E0Er 1 0A F0 .word $F00A -000E10r 1 0B F0 .word $F00B -000E12r 1 0C F0 .word $F00C -000E14r 1 0D F0 .word $F00D -000E16r 1 0E F0 .word $F00E -000E18r 1 0F F0 .word $F00F -000E1Ar 1 E1 FF .word $FFE1 -000E1Cr 1 E2 FF .word $FFE2 -000E1Er 1 E3 FF .word $FFE3 -000E20r 1 E4 FF .word $FFE4 -000E22r 1 E5 FF .word $FFE5 -000E24r 1 E6 FF .word $FFE6 -000E26r 1 E7 FF .word $FFE7 -000E28r 1 E8 FF .word $FFE8 -000E2Ar 1 E9 FF .word $FFE9 -000E2Cr 1 EA FF .word $FFEA -000E2Er 1 EB FF .word $FFEB -000E30r 1 EC FF .word $FFEC -000E32r 1 ED FF .word $FFED -000E34r 1 EE FF .word $FFEE -000E36r 1 EF FF .word $FFEF -000E38r 1 F0 FF .word $FFF0 -000E3Ar 1 F1 FF .word $FFF1 -000E3Cr 1 F2 FF .word $FFF2 -000E3Er 1 F3 FF .word $FFF3 -000E40r 1 F4 FF .word $FFF4 -000E42r 1 F5 FF .word $FFF5 -000E44r 1 F6 FF .word $FFF6 -000E46r 1 F7 FF .word $FFF7 -000E48r 1 F8 FF .word $FFF8 -000E4Ar 1 F9 FF .word $FFF9 -000E4Cr 1 FA FF .word $FFFA -000E4Er 1 FB FF .word $FFFB -000E50r 1 FC FF .word $FFFC -000E52r 1 FD FF .word $FFFD -000E54r 1 FE FF .word $FFFE -000E56r 1 FF FF .word $FFFF +000AC2r 1 ; hex values, uppercase +000AC2r 1 00 00 .word $0 +000AC4r 1 01 00 .word $1 +000AC6r 1 02 00 .word $2 +000AC8r 1 03 00 .word $3 +000ACAr 1 04 00 .word $4 +000ACCr 1 05 00 .word $5 +000ACEr 1 06 00 .word $6 +000AD0r 1 07 00 .word $7 +000AD2r 1 08 00 .word $8 +000AD4r 1 09 00 .word $9 +000AD6r 1 0A 00 .word $A +000AD8r 1 0B 00 .word $B +000ADAr 1 0C 00 .word $C +000ADCr 1 0D 00 .word $D +000ADEr 1 0E 00 .word $E +000AE0r 1 0F 00 .word $F +000AE2r 1 10 00 .word $10 +000AE4r 1 11 00 .word $11 +000AE6r 1 12 00 .word $12 +000AE8r 1 13 00 .word $13 +000AEAr 1 70 00 .word $70 +000AECr 1 71 00 .word $71 +000AEEr 1 72 00 .word $72 +000AF0r 1 73 00 .word $73 +000AF2r 1 74 00 .word $74 +000AF4r 1 75 00 .word $75 +000AF6r 1 76 00 .word $76 +000AF8r 1 77 00 .word $77 +000AFAr 1 78 00 .word $78 +000AFCr 1 79 00 .word $79 +000AFEr 1 7A 00 .word $7A +000B00r 1 7B 00 .word $7B +000B02r 1 7C 00 .word $7C +000B04r 1 7D 00 .word $7D +000B06r 1 7E 00 .word $7E +000B08r 1 7F 00 .word $7F +000B0Ar 1 80 00 .word $80 +000B0Cr 1 81 00 .word $81 +000B0Er 1 82 00 .word $82 +000B10r 1 83 00 .word $83 +000B12r 1 84 00 .word $84 +000B14r 1 85 00 .word $85 +000B16r 1 86 00 .word $86 +000B18r 1 F0 00 .word $F0 +000B1Ar 1 F1 00 .word $F1 +000B1Cr 1 F2 00 .word $F2 +000B1Er 1 F3 00 .word $F3 +000B20r 1 F4 00 .word $F4 +000B22r 1 F5 00 .word $F5 +000B24r 1 F6 00 .word $F6 +000B26r 1 F7 00 .word $F7 +000B28r 1 F8 00 .word $F8 +000B2Ar 1 F9 00 .word $F9 +000B2Cr 1 FA 00 .word $FA +000B2Er 1 FB 00 .word $FB +000B30r 1 FC 00 .word $FC +000B32r 1 FD 00 .word $FD +000B34r 1 FE 00 .word $FE +000B36r 1 FF 00 .word $FF +000B38r 1 00 01 .word $100 +000B3Ar 1 01 01 .word $101 +000B3Cr 1 02 01 .word $102 +000B3Er 1 03 01 .word $103 +000B40r 1 D2 0F .word $FD2 +000B42r 1 D3 0F .word $FD3 +000B44r 1 D4 0F .word $FD4 +000B46r 1 D5 0F .word $FD5 +000B48r 1 D6 0F .word $FD6 +000B4Ar 1 D7 0F .word $FD7 +000B4Cr 1 D8 0F .word $FD8 +000B4Er 1 D9 0F .word $FD9 +000B50r 1 DA 0F .word $FDA +000B52r 1 DB 0F .word $FDB +000B54r 1 DC 0F .word $FDC +000B56r 1 DD 0F .word $FDD +000B58r 1 DE 0F .word $FDE +000B5Ar 1 DF 0F .word $FDF +000B5Cr 1 E0 0F .word $FE0 +000B5Er 1 E1 0F .word $FE1 +000B60r 1 E2 0F .word $FE2 +000B62r 1 E3 0F .word $FE3 +000B64r 1 E4 0F .word $FE4 +000B66r 1 E5 0F .word $FE5 +000B68r 1 E6 0F .word $FE6 +000B6Ar 1 E7 0F .word $FE7 +000B6Cr 1 E8 0F .word $FE8 +000B6Er 1 E9 0F .word $FE9 +000B70r 1 EA 0F .word $FEA +000B72r 1 EB 0F .word $FEB +000B74r 1 EC 0F .word $FEC +000B76r 1 ED 0F .word $FED +000B78r 1 EE 0F .word $FEE +000B7Ar 1 EF 0F .word $FEF +000B7Cr 1 F0 0F .word $FF0 +000B7Er 1 F1 0F .word $FF1 +000B80r 1 F2 0F .word $FF2 +000B82r 1 F3 0F .word $FF3 +000B84r 1 F4 0F .word $FF4 +000B86r 1 F5 0F .word $FF5 +000B88r 1 F6 0F .word $FF6 +000B8Ar 1 F7 0F .word $FF7 +000B8Cr 1 F8 0F .word $FF8 +000B8Er 1 F9 0F .word $FF9 +000B90r 1 FA 0F .word $FFA +000B92r 1 FB 0F .word $FFB +000B94r 1 FC 0F .word $FFC +000B96r 1 FD 0F .word $FFD +000B98r 1 FE 0F .word $FFE +000B9Ar 1 FF 0F .word $FFF +000B9Cr 1 00 10 .word $1000 +000B9Er 1 01 10 .word $1001 +000BA0r 1 02 10 .word $1002 +000BA2r 1 03 10 .word $1003 +000BA4r 1 04 10 .word $1004 +000BA6r 1 05 10 .word $1005 +000BA8r 1 06 10 .word $1006 +000BAAr 1 07 10 .word $1007 +000BACr 1 08 10 .word $1008 +000BAEr 1 F0 7F .word $7FF0 +000BB0r 1 F1 7F .word $7FF1 +000BB2r 1 F2 7F .word $7FF2 +000BB4r 1 F3 7F .word $7FF3 +000BB6r 1 F4 7F .word $7FF4 +000BB8r 1 F5 7F .word $7FF5 +000BBAr 1 F6 7F .word $7FF6 +000BBCr 1 F7 7F .word $7FF7 +000BBEr 1 F8 7F .word $7FF8 +000BC0r 1 F9 7F .word $7FF9 +000BC2r 1 FA 7F .word $7FFA +000BC4r 1 FB 7F .word $7FFB +000BC6r 1 FC 7F .word $7FFC +000BC8r 1 FD 7F .word $7FFD +000BCAr 1 FE 7F .word $7FFE +000BCCr 1 FF 7F .word $7FFF +000BCEr 1 00 80 .word $8000 +000BD0r 1 01 80 .word $8001 +000BD2r 1 02 80 .word $8002 +000BD4r 1 03 80 .word $8003 +000BD6r 1 04 80 .word $8004 +000BD8r 1 05 80 .word $8005 +000BDAr 1 06 80 .word $8006 +000BDCr 1 07 80 .word $8007 +000BDEr 1 08 80 .word $8008 +000BE0r 1 09 80 .word $8009 +000BE2r 1 0A 80 .word $800A +000BE4r 1 0B 80 .word $800B +000BE6r 1 E1 9F .word $9FE1 +000BE8r 1 E2 9F .word $9FE2 +000BEAr 1 E3 9F .word $9FE3 +000BECr 1 E4 9F .word $9FE4 +000BEEr 1 E5 9F .word $9FE5 +000BF0r 1 E6 9F .word $9FE6 +000BF2r 1 E7 9F .word $9FE7 +000BF4r 1 E8 9F .word $9FE8 +000BF6r 1 E9 9F .word $9FE9 +000BF8r 1 EA 9F .word $9FEA +000BFAr 1 EB 9F .word $9FEB +000BFCr 1 EC 9F .word $9FEC +000BFEr 1 ED 9F .word $9FED +000C00r 1 EE 9F .word $9FEE +000C02r 1 EF 9F .word $9FEF +000C04r 1 F0 9F .word $9FF0 +000C06r 1 F1 9F .word $9FF1 +000C08r 1 F2 9F .word $9FF2 +000C0Ar 1 F3 9F .word $9FF3 +000C0Cr 1 F4 9F .word $9FF4 +000C0Er 1 F5 9F .word $9FF5 +000C10r 1 F6 9F .word $9FF6 +000C12r 1 F7 9F .word $9FF7 +000C14r 1 F8 9F .word $9FF8 +000C16r 1 F9 9F .word $9FF9 +000C18r 1 FA 9F .word $9FFA +000C1Ar 1 FB 9F .word $9FFB +000C1Cr 1 FC 9F .word $9FFC +000C1Er 1 FD 9F .word $9FFD +000C20r 1 FE 9F .word $9FFE +000C22r 1 FF 9F .word $9FFF +000C24r 1 00 A0 .word $A000 +000C26r 1 01 A0 .word $A001 +000C28r 1 02 A0 .word $A002 +000C2Ar 1 03 A0 .word $A003 +000C2Cr 1 04 A0 .word $A004 +000C2Er 1 05 A0 .word $A005 +000C30r 1 06 A0 .word $A006 +000C32r 1 07 A0 .word $A007 +000C34r 1 08 A0 .word $A008 +000C36r 1 09 A0 .word $A009 +000C38r 1 0A A0 .word $A00A +000C3Ar 1 0B A0 .word $A00B +000C3Cr 1 0C A0 .word $A00C +000C3Er 1 0D A0 .word $A00D +000C40r 1 0E A0 .word $A00E +000C42r 1 0F A0 .word $A00F +000C44r 1 E1 AF .word $AFE1 +000C46r 1 E2 AF .word $AFE2 +000C48r 1 E3 AF .word $AFE3 +000C4Ar 1 E4 AF .word $AFE4 +000C4Cr 1 E5 AF .word $AFE5 +000C4Er 1 E6 AF .word $AFE6 +000C50r 1 E7 AF .word $AFE7 +000C52r 1 E8 AF .word $AFE8 +000C54r 1 E9 AF .word $AFE9 +000C56r 1 EA AF .word $AFEA +000C58r 1 EB AF .word $AFEB +000C5Ar 1 EC AF .word $AFEC +000C5Cr 1 ED AF .word $AFED +000C5Er 1 EE AF .word $AFEE +000C60r 1 EF AF .word $AFEF +000C62r 1 F0 AF .word $AFF0 +000C64r 1 F1 AF .word $AFF1 +000C66r 1 F2 AF .word $AFF2 +000C68r 1 F3 AF .word $AFF3 +000C6Ar 1 F4 AF .word $AFF4 +000C6Cr 1 F5 AF .word $AFF5 +000C6Er 1 F6 AF .word $AFF6 +000C70r 1 F7 AF .word $AFF7 +000C72r 1 F8 AF .word $AFF8 +000C74r 1 F9 AF .word $AFF9 +000C76r 1 FA AF .word $AFFA +000C78r 1 FB AF .word $AFFB +000C7Ar 1 FC AF .word $AFFC +000C7Cr 1 FD AF .word $AFFD +000C7Er 1 FE AF .word $AFFE +000C80r 1 FF AF .word $AFFF +000C82r 1 00 B0 .word $B000 +000C84r 1 01 B0 .word $B001 +000C86r 1 02 B0 .word $B002 +000C88r 1 03 B0 .word $B003 +000C8Ar 1 04 B0 .word $B004 +000C8Cr 1 05 B0 .word $B005 +000C8Er 1 06 B0 .word $B006 +000C90r 1 07 B0 .word $B007 +000C92r 1 08 B0 .word $B008 +000C94r 1 09 B0 .word $B009 +000C96r 1 0A B0 .word $B00A +000C98r 1 0B B0 .word $B00B +000C9Ar 1 0C B0 .word $B00C +000C9Cr 1 0D B0 .word $B00D +000C9Er 1 0E B0 .word $B00E +000CA0r 1 0F B0 .word $B00F +000CA2r 1 E1 BF .word $BFE1 +000CA4r 1 E2 BF .word $BFE2 +000CA6r 1 E3 BF .word $BFE3 +000CA8r 1 E4 BF .word $BFE4 +000CAAr 1 E5 BF .word $BFE5 +000CACr 1 E6 BF .word $BFE6 +000CAEr 1 E7 BF .word $BFE7 +000CB0r 1 E8 BF .word $BFE8 +000CB2r 1 E9 BF .word $BFE9 +000CB4r 1 EA BF .word $BFEA +000CB6r 1 EB BF .word $BFEB +000CB8r 1 EC BF .word $BFEC +000CBAr 1 ED BF .word $BFED +000CBCr 1 EE BF .word $BFEE +000CBEr 1 EF BF .word $BFEF +000CC0r 1 F0 BF .word $BFF0 +000CC2r 1 F1 BF .word $BFF1 +000CC4r 1 F2 BF .word $BFF2 +000CC6r 1 F3 BF .word $BFF3 +000CC8r 1 F4 BF .word $BFF4 +000CCAr 1 F5 BF .word $BFF5 +000CCCr 1 F6 BF .word $BFF6 +000CCEr 1 F7 BF .word $BFF7 +000CD0r 1 F8 BF .word $BFF8 +000CD2r 1 F9 BF .word $BFF9 +000CD4r 1 FA BF .word $BFFA +000CD6r 1 FB BF .word $BFFB +000CD8r 1 FC BF .word $BFFC +000CDAr 1 FD BF .word $BFFD +000CDCr 1 FE BF .word $BFFE +000CDEr 1 FF BF .word $BFFF +000CE0r 1 00 C0 .word $C000 +000CE2r 1 01 C0 .word $C001 +000CE4r 1 02 C0 .word $C002 +000CE6r 1 03 C0 .word $C003 +000CE8r 1 04 C0 .word $C004 +000CEAr 1 05 C0 .word $C005 +000CECr 1 06 C0 .word $C006 +000CEEr 1 07 C0 .word $C007 +000CF0r 1 08 C0 .word $C008 +000CF2r 1 09 C0 .word $C009 +000CF4r 1 0A C0 .word $C00A +000CF6r 1 0B C0 .word $C00B +000CF8r 1 0C C0 .word $C00C +000CFAr 1 0D C0 .word $C00D +000CFCr 1 0E C0 .word $C00E +000CFEr 1 0F C0 .word $C00F +000D00r 1 E1 CF .word $CFE1 +000D02r 1 E2 CF .word $CFE2 +000D04r 1 E3 CF .word $CFE3 +000D06r 1 E4 CF .word $CFE4 +000D08r 1 E5 CF .word $CFE5 +000D0Ar 1 E6 CF .word $CFE6 +000D0Cr 1 E7 CF .word $CFE7 +000D0Er 1 E8 CF .word $CFE8 +000D10r 1 E9 CF .word $CFE9 +000D12r 1 EA CF .word $CFEA +000D14r 1 EB CF .word $CFEB +000D16r 1 EC CF .word $CFEC +000D18r 1 ED CF .word $CFED +000D1Ar 1 EE CF .word $CFEE +000D1Cr 1 EF CF .word $CFEF +000D1Er 1 F0 CF .word $CFF0 +000D20r 1 F1 CF .word $CFF1 +000D22r 1 F2 CF .word $CFF2 +000D24r 1 F3 CF .word $CFF3 +000D26r 1 F4 CF .word $CFF4 +000D28r 1 F5 CF .word $CFF5 +000D2Ar 1 F6 CF .word $CFF6 +000D2Cr 1 F7 CF .word $CFF7 +000D2Er 1 F8 CF .word $CFF8 +000D30r 1 F9 CF .word $CFF9 +000D32r 1 FA CF .word $CFFA +000D34r 1 FB CF .word $CFFB +000D36r 1 FC CF .word $CFFC +000D38r 1 FD CF .word $CFFD +000D3Ar 1 FE CF .word $CFFE +000D3Cr 1 FF CF .word $CFFF +000D3Er 1 00 D0 .word $D000 +000D40r 1 01 D0 .word $D001 +000D42r 1 02 D0 .word $D002 +000D44r 1 03 D0 .word $D003 +000D46r 1 04 D0 .word $D004 +000D48r 1 05 D0 .word $D005 +000D4Ar 1 06 D0 .word $D006 +000D4Cr 1 07 D0 .word $D007 +000D4Er 1 08 D0 .word $D008 +000D50r 1 09 D0 .word $D009 +000D52r 1 0A D0 .word $D00A +000D54r 1 0B D0 .word $D00B +000D56r 1 0C D0 .word $D00C +000D58r 1 0D D0 .word $D00D +000D5Ar 1 0E D0 .word $D00E +000D5Cr 1 0F D0 .word $D00F +000D5Er 1 E1 DF .word $DFE1 +000D60r 1 E2 DF .word $DFE2 +000D62r 1 E3 DF .word $DFE3 +000D64r 1 E4 DF .word $DFE4 +000D66r 1 E5 DF .word $DFE5 +000D68r 1 E6 DF .word $DFE6 +000D6Ar 1 E7 DF .word $DFE7 +000D6Cr 1 E8 DF .word $DFE8 +000D6Er 1 E9 DF .word $DFE9 +000D70r 1 EA DF .word $DFEA +000D72r 1 EB DF .word $DFEB +000D74r 1 EC DF .word $DFEC +000D76r 1 ED DF .word $DFED +000D78r 1 EE DF .word $DFEE +000D7Ar 1 EF DF .word $DFEF +000D7Cr 1 F0 DF .word $DFF0 +000D7Er 1 F1 DF .word $DFF1 +000D80r 1 F2 DF .word $DFF2 +000D82r 1 F3 DF .word $DFF3 +000D84r 1 F4 DF .word $DFF4 +000D86r 1 F5 DF .word $DFF5 +000D88r 1 F6 DF .word $DFF6 +000D8Ar 1 F7 DF .word $DFF7 +000D8Cr 1 F8 DF .word $DFF8 +000D8Er 1 F9 DF .word $DFF9 +000D90r 1 FA DF .word $DFFA +000D92r 1 FB DF .word $DFFB +000D94r 1 FC DF .word $DFFC +000D96r 1 FD DF .word $DFFD +000D98r 1 FE DF .word $DFFE +000D9Ar 1 FF DF .word $DFFF +000D9Cr 1 00 E0 .word $E000 +000D9Er 1 01 E0 .word $E001 +000DA0r 1 02 E0 .word $E002 +000DA2r 1 03 E0 .word $E003 +000DA4r 1 04 E0 .word $E004 +000DA6r 1 05 E0 .word $E005 +000DA8r 1 06 E0 .word $E006 +000DAAr 1 07 E0 .word $E007 +000DACr 1 08 E0 .word $E008 +000DAEr 1 09 E0 .word $E009 +000DB0r 1 0A E0 .word $E00A +000DB2r 1 0B E0 .word $E00B +000DB4r 1 0C E0 .word $E00C +000DB6r 1 0D E0 .word $E00D +000DB8r 1 0E E0 .word $E00E +000DBAr 1 0F E0 .word $E00F +000DBCr 1 E1 EF .word $EFE1 +000DBEr 1 E2 EF .word $EFE2 +000DC0r 1 E3 EF .word $EFE3 +000DC2r 1 E4 EF .word $EFE4 +000DC4r 1 E5 EF .word $EFE5 +000DC6r 1 E6 EF .word $EFE6 +000DC8r 1 E7 EF .word $EFE7 +000DCAr 1 E8 EF .word $EFE8 +000DCCr 1 E9 EF .word $EFE9 +000DCEr 1 EA EF .word $EFEA +000DD0r 1 EB EF .word $EFEB +000DD2r 1 EC EF .word $EFEC +000DD4r 1 ED EF .word $EFED +000DD6r 1 EE EF .word $EFEE +000DD8r 1 EF EF .word $EFEF +000DDAr 1 F0 EF .word $EFF0 +000DDCr 1 F1 EF .word $EFF1 +000DDEr 1 F2 EF .word $EFF2 +000DE0r 1 F3 EF .word $EFF3 +000DE2r 1 F4 EF .word $EFF4 +000DE4r 1 F5 EF .word $EFF5 +000DE6r 1 F6 EF .word $EFF6 +000DE8r 1 F7 EF .word $EFF7 +000DEAr 1 F8 EF .word $EFF8 +000DECr 1 F9 EF .word $EFF9 +000DEEr 1 FA EF .word $EFFA +000DF0r 1 FB EF .word $EFFB +000DF2r 1 FC EF .word $EFFC +000DF4r 1 FD EF .word $EFFD +000DF6r 1 FE EF .word $EFFE +000DF8r 1 FF EF .word $EFFF +000DFAr 1 00 F0 .word $F000 +000DFCr 1 01 F0 .word $F001 +000DFEr 1 02 F0 .word $F002 +000E00r 1 03 F0 .word $F003 +000E02r 1 04 F0 .word $F004 +000E04r 1 05 F0 .word $F005 +000E06r 1 06 F0 .word $F006 +000E08r 1 07 F0 .word $F007 +000E0Ar 1 08 F0 .word $F008 +000E0Cr 1 09 F0 .word $F009 +000E0Er 1 0A F0 .word $F00A +000E10r 1 0B F0 .word $F00B +000E12r 1 0C F0 .word $F00C +000E14r 1 0D F0 .word $F00D +000E16r 1 0E F0 .word $F00E +000E18r 1 0F F0 .word $F00F +000E1Ar 1 E1 FF .word $FFE1 +000E1Cr 1 E2 FF .word $FFE2 +000E1Er 1 E3 FF .word $FFE3 +000E20r 1 E4 FF .word $FFE4 +000E22r 1 E5 FF .word $FFE5 +000E24r 1 E6 FF .word $FFE6 +000E26r 1 E7 FF .word $FFE7 +000E28r 1 E8 FF .word $FFE8 +000E2Ar 1 E9 FF .word $FFE9 +000E2Cr 1 EA FF .word $FFEA +000E2Er 1 EB FF .word $FFEB +000E30r 1 EC FF .word $FFEC +000E32r 1 ED FF .word $FFED +000E34r 1 EE FF .word $FFEE +000E36r 1 EF FF .word $FFEF +000E38r 1 F0 FF .word $FFF0 +000E3Ar 1 F1 FF .word $FFF1 +000E3Cr 1 F2 FF .word $FFF2 +000E3Er 1 F3 FF .word $FFF3 +000E40r 1 F4 FF .word $FFF4 +000E42r 1 F5 FF .word $FFF5 +000E44r 1 F6 FF .word $FFF6 +000E46r 1 F7 FF .word $FFF7 +000E48r 1 F8 FF .word $FFF8 +000E4Ar 1 F9 FF .word $FFF9 +000E4Cr 1 FA FF .word $FFFA +000E4Er 1 FB FF .word $FFFB +000E50r 1 FC FF .word $FFFC +000E52r 1 FD FF .word $FFFD +000E54r 1 FE FF .word $FFFE +000E56r 1 FF FF .word $FFFF 000E58r 1 -000E58r 1 ; 4-digit hex values -000E58r 1 00 00 .word $0000 -000E5Ar 1 01 00 .word $0001 -000E5Cr 1 02 00 .word $0002 -000E5Er 1 03 00 .word $0003 -000E60r 1 04 00 .word $0004 -000E62r 1 05 00 .word $0005 -000E64r 1 06 00 .word $0006 -000E66r 1 07 00 .word $0007 -000E68r 1 08 00 .word $0008 -000E6Ar 1 09 00 .word $0009 -000E6Cr 1 0A 00 .word $000a -000E6Er 1 0B 00 .word $000b -000E70r 1 0C 00 .word $000c -000E72r 1 0D 00 .word $000d -000E74r 1 0E 00 .word $000e -000E76r 1 0F 00 .word $000f -000E78r 1 10 00 .word $0010 -000E7Ar 1 11 00 .word $0011 -000E7Cr 1 12 00 .word $0012 -000E7Er 1 13 00 .word $0013 -000E80r 1 70 00 .word $0070 -000E82r 1 71 00 .word $0071 -000E84r 1 72 00 .word $0072 -000E86r 1 73 00 .word $0073 -000E88r 1 74 00 .word $0074 -000E8Ar 1 75 00 .word $0075 -000E8Cr 1 76 00 .word $0076 -000E8Er 1 77 00 .word $0077 -000E90r 1 78 00 .word $0078 -000E92r 1 79 00 .word $0079 -000E94r 1 7A 00 .word $007a -000E96r 1 7B 00 .word $007b -000E98r 1 7C 00 .word $007c -000E9Ar 1 7D 00 .word $007d -000E9Cr 1 7E 00 .word $007e -000E9Er 1 7F 00 .word $007f -000EA0r 1 80 00 .word $0080 -000EA2r 1 81 00 .word $0081 -000EA4r 1 82 00 .word $0082 -000EA6r 1 83 00 .word $0083 -000EA8r 1 84 00 .word $0084 -000EAAr 1 85 00 .word $0085 -000EACr 1 86 00 .word $0086 -000EAEr 1 F0 00 .word $00f0 -000EB0r 1 F1 00 .word $00f1 -000EB2r 1 F2 00 .word $00f2 -000EB4r 1 F3 00 .word $00f3 -000EB6r 1 F4 00 .word $00f4 -000EB8r 1 F5 00 .word $00f5 -000EBAr 1 F6 00 .word $00f6 -000EBCr 1 F7 00 .word $00f7 -000EBEr 1 F8 00 .word $00f8 -000EC0r 1 F9 00 .word $00f9 -000EC2r 1 FA 00 .word $00fa -000EC4r 1 FB 00 .word $00fb -000EC6r 1 FC 00 .word $00fc -000EC8r 1 FD 00 .word $00fd -000ECAr 1 FE 00 .word $00fe -000ECCr 1 FF 00 .word $00ff -000ECEr 1 00 01 .word $0100 -000ED0r 1 01 01 .word $0101 -000ED2r 1 02 01 .word $0102 -000ED4r 1 03 01 .word $0103 -000ED6r 1 D2 0F .word $0fd2 -000ED8r 1 D3 0F .word $0fd3 -000EDAr 1 D4 0F .word $0fd4 -000EDCr 1 D5 0F .word $0fd5 -000EDEr 1 D6 0F .word $0fd6 -000EE0r 1 D7 0F .word $0fd7 -000EE2r 1 D8 0F .word $0fd8 -000EE4r 1 D9 0F .word $0fd9 -000EE6r 1 DA 0F .word $0fda -000EE8r 1 DB 0F .word $0fdb -000EEAr 1 DC 0F .word $0fdc -000EECr 1 DD 0F .word $0fdd -000EEEr 1 DE 0F .word $0fde -000EF0r 1 DF 0F .word $0fdf -000EF2r 1 E0 0F .word $0fe0 -000EF4r 1 E1 0F .word $0fe1 -000EF6r 1 E2 0F .word $0fe2 -000EF8r 1 E3 0F .word $0fe3 -000EFAr 1 E4 0F .word $0fe4 -000EFCr 1 E5 0F .word $0fe5 -000EFEr 1 E6 0F .word $0fe6 -000F00r 1 E7 0F .word $0fe7 -000F02r 1 E8 0F .word $0fe8 -000F04r 1 E9 0F .word $0fe9 -000F06r 1 EA 0F .word $0fea -000F08r 1 EB 0F .word $0feb -000F0Ar 1 EC 0F .word $0fec -000F0Cr 1 ED 0F .word $0fed -000F0Er 1 EE 0F .word $0fee -000F10r 1 EF 0F .word $0fef -000F12r 1 F0 0F .word $0ff0 -000F14r 1 F1 0F .word $0ff1 -000F16r 1 F2 0F .word $0ff2 -000F18r 1 F3 0F .word $0ff3 -000F1Ar 1 F4 0F .word $0ff4 -000F1Cr 1 F5 0F .word $0ff5 -000F1Er 1 F6 0F .word $0ff6 -000F20r 1 F7 0F .word $0ff7 -000F22r 1 F8 0F .word $0ff8 -000F24r 1 F9 0F .word $0ff9 -000F26r 1 FA 0F .word $0ffa -000F28r 1 FB 0F .word $0ffb -000F2Ar 1 FC 0F .word $0ffc -000F2Cr 1 FD 0F .word $0ffd -000F2Er 1 FE 0F .word $0ffe -000F30r 1 FF 0F .word $0fff -000F32r 1 00 10 .word $1000 -000F34r 1 01 10 .word $1001 -000F36r 1 02 10 .word $1002 -000F38r 1 03 10 .word $1003 -000F3Ar 1 04 10 .word $1004 -000F3Cr 1 05 10 .word $1005 -000F3Er 1 06 10 .word $1006 -000F40r 1 07 10 .word $1007 -000F42r 1 08 10 .word $1008 -000F44r 1 F0 7F .word $7ff0 -000F46r 1 F1 7F .word $7ff1 -000F48r 1 F2 7F .word $7ff2 -000F4Ar 1 F3 7F .word $7ff3 -000F4Cr 1 F4 7F .word $7ff4 -000F4Er 1 F5 7F .word $7ff5 -000F50r 1 F6 7F .word $7ff6 -000F52r 1 F7 7F .word $7ff7 -000F54r 1 F8 7F .word $7ff8 -000F56r 1 F9 7F .word $7ff9 -000F58r 1 FA 7F .word $7ffa -000F5Ar 1 FB 7F .word $7ffb -000F5Cr 1 FC 7F .word $7ffc -000F5Er 1 FD 7F .word $7ffd -000F60r 1 FE 7F .word $7ffe -000F62r 1 FF 7F .word $7fff -000F64r 1 00 80 .word $8000 -000F66r 1 01 80 .word $8001 -000F68r 1 02 80 .word $8002 -000F6Ar 1 03 80 .word $8003 -000F6Cr 1 04 80 .word $8004 -000F6Er 1 05 80 .word $8005 -000F70r 1 06 80 .word $8006 -000F72r 1 07 80 .word $8007 -000F74r 1 08 80 .word $8008 -000F76r 1 09 80 .word $8009 -000F78r 1 0A 80 .word $800a -000F7Ar 1 0B 80 .word $800b -000F7Cr 1 E1 9F .word $9fe1 -000F7Er 1 E2 9F .word $9fe2 -000F80r 1 E3 9F .word $9fe3 -000F82r 1 E4 9F .word $9fe4 -000F84r 1 E5 9F .word $9fe5 -000F86r 1 E6 9F .word $9fe6 -000F88r 1 E7 9F .word $9fe7 -000F8Ar 1 E8 9F .word $9fe8 -000F8Cr 1 E9 9F .word $9fe9 -000F8Er 1 EA 9F .word $9fea -000F90r 1 EB 9F .word $9feb -000F92r 1 EC 9F .word $9fec -000F94r 1 ED 9F .word $9fed -000F96r 1 EE 9F .word $9fee -000F98r 1 EF 9F .word $9fef -000F9Ar 1 F0 9F .word $9ff0 -000F9Cr 1 F1 9F .word $9ff1 -000F9Er 1 F2 9F .word $9ff2 -000FA0r 1 F3 9F .word $9ff3 -000FA2r 1 F4 9F .word $9ff4 -000FA4r 1 F5 9F .word $9ff5 -000FA6r 1 F6 9F .word $9ff6 -000FA8r 1 F7 9F .word $9ff7 -000FAAr 1 F8 9F .word $9ff8 -000FACr 1 F9 9F .word $9ff9 -000FAEr 1 FA 9F .word $9ffa -000FB0r 1 FB 9F .word $9ffb -000FB2r 1 FC 9F .word $9ffc -000FB4r 1 FD 9F .word $9ffd -000FB6r 1 FE 9F .word $9ffe -000FB8r 1 FF 9F .word $9fff -000FBAr 1 00 A0 .word $a000 -000FBCr 1 01 A0 .word $a001 -000FBEr 1 02 A0 .word $a002 -000FC0r 1 03 A0 .word $a003 -000FC2r 1 04 A0 .word $a004 -000FC4r 1 05 A0 .word $a005 -000FC6r 1 06 A0 .word $a006 -000FC8r 1 07 A0 .word $a007 -000FCAr 1 08 A0 .word $a008 -000FCCr 1 09 A0 .word $a009 -000FCEr 1 0A A0 .word $a00a -000FD0r 1 0B A0 .word $a00b -000FD2r 1 0C A0 .word $a00c -000FD4r 1 0D A0 .word $a00d -000FD6r 1 0E A0 .word $a00e -000FD8r 1 0F A0 .word $a00f -000FDAr 1 E1 AF .word $afe1 -000FDCr 1 E2 AF .word $afe2 -000FDEr 1 E3 AF .word $afe3 -000FE0r 1 E4 AF .word $afe4 -000FE2r 1 E5 AF .word $afe5 -000FE4r 1 E6 AF .word $afe6 -000FE6r 1 E7 AF .word $afe7 -000FE8r 1 E8 AF .word $afe8 -000FEAr 1 E9 AF .word $afe9 -000FECr 1 EA AF .word $afea -000FEEr 1 EB AF .word $afeb -000FF0r 1 EC AF .word $afec -000FF2r 1 ED AF .word $afed -000FF4r 1 EE AF .word $afee -000FF6r 1 EF AF .word $afef -000FF8r 1 F0 AF .word $aff0 -000FFAr 1 F1 AF .word $aff1 -000FFCr 1 F2 AF .word $aff2 -000FFEr 1 F3 AF .word $aff3 -001000r 1 F4 AF .word $aff4 -001002r 1 F5 AF .word $aff5 -001004r 1 F6 AF .word $aff6 -001006r 1 F7 AF .word $aff7 -001008r 1 F8 AF .word $aff8 -00100Ar 1 F9 AF .word $aff9 -00100Cr 1 FA AF .word $affa -00100Er 1 FB AF .word $affb -001010r 1 FC AF .word $affc -001012r 1 FD AF .word $affd -001014r 1 FE AF .word $affe -001016r 1 FF AF .word $afff -001018r 1 00 B0 .word $b000 -00101Ar 1 01 B0 .word $b001 -00101Cr 1 02 B0 .word $b002 -00101Er 1 03 B0 .word $b003 -001020r 1 04 B0 .word $b004 -001022r 1 05 B0 .word $b005 -001024r 1 06 B0 .word $b006 -001026r 1 07 B0 .word $b007 -001028r 1 08 B0 .word $b008 -00102Ar 1 09 B0 .word $b009 -00102Cr 1 0A B0 .word $b00a -00102Er 1 0B B0 .word $b00b -001030r 1 0C B0 .word $b00c -001032r 1 0D B0 .word $b00d -001034r 1 0E B0 .word $b00e -001036r 1 0F B0 .word $b00f -001038r 1 E1 BF .word $bfe1 -00103Ar 1 E2 BF .word $bfe2 -00103Cr 1 E3 BF .word $bfe3 -00103Er 1 E4 BF .word $bfe4 -001040r 1 E5 BF .word $bfe5 -001042r 1 E6 BF .word $bfe6 -001044r 1 E7 BF .word $bfe7 -001046r 1 E8 BF .word $bfe8 -001048r 1 E9 BF .word $bfe9 -00104Ar 1 EA BF .word $bfea -00104Cr 1 EB BF .word $bfeb -00104Er 1 EC BF .word $bfec -001050r 1 ED BF .word $bfed -001052r 1 EE BF .word $bfee -001054r 1 EF BF .word $bfef -001056r 1 F0 BF .word $bff0 -001058r 1 F1 BF .word $bff1 -00105Ar 1 F2 BF .word $bff2 -00105Cr 1 F3 BF .word $bff3 -00105Er 1 F4 BF .word $bff4 -001060r 1 F5 BF .word $bff5 -001062r 1 F6 BF .word $bff6 -001064r 1 F7 BF .word $bff7 -001066r 1 F8 BF .word $bff8 -001068r 1 F9 BF .word $bff9 -00106Ar 1 FA BF .word $bffa -00106Cr 1 FB BF .word $bffb -00106Er 1 FC BF .word $bffc -001070r 1 FD BF .word $bffd -001072r 1 FE BF .word $bffe -001074r 1 FF BF .word $bfff -001076r 1 00 C0 .word $c000 -001078r 1 01 C0 .word $c001 -00107Ar 1 02 C0 .word $c002 -00107Cr 1 03 C0 .word $c003 -00107Er 1 04 C0 .word $c004 -001080r 1 05 C0 .word $c005 -001082r 1 06 C0 .word $c006 -001084r 1 07 C0 .word $c007 -001086r 1 08 C0 .word $c008 -001088r 1 09 C0 .word $c009 -00108Ar 1 0A C0 .word $c00a -00108Cr 1 0B C0 .word $c00b -00108Er 1 0C C0 .word $c00c -001090r 1 0D C0 .word $c00d -001092r 1 0E C0 .word $c00e -001094r 1 0F C0 .word $c00f -001096r 1 E1 CF .word $cfe1 -001098r 1 E2 CF .word $cfe2 -00109Ar 1 E3 CF .word $cfe3 -00109Cr 1 E4 CF .word $cfe4 -00109Er 1 E5 CF .word $cfe5 -0010A0r 1 E6 CF .word $cfe6 -0010A2r 1 E7 CF .word $cfe7 -0010A4r 1 E8 CF .word $cfe8 -0010A6r 1 E9 CF .word $cfe9 -0010A8r 1 EA CF .word $cfea -0010AAr 1 EB CF .word $cfeb -0010ACr 1 EC CF .word $cfec -0010AEr 1 ED CF .word $cfed -0010B0r 1 EE CF .word $cfee -0010B2r 1 EF CF .word $cfef -0010B4r 1 F0 CF .word $cff0 -0010B6r 1 F1 CF .word $cff1 -0010B8r 1 F2 CF .word $cff2 -0010BAr 1 F3 CF .word $cff3 -0010BCr 1 F4 CF .word $cff4 -0010BEr 1 F5 CF .word $cff5 -0010C0r 1 F6 CF .word $cff6 -0010C2r 1 F7 CF .word $cff7 -0010C4r 1 F8 CF .word $cff8 -0010C6r 1 F9 CF .word $cff9 -0010C8r 1 FA CF .word $cffa -0010CAr 1 FB CF .word $cffb -0010CCr 1 FC CF .word $cffc -0010CEr 1 FD CF .word $cffd -0010D0r 1 FE CF .word $cffe -0010D2r 1 FF CF .word $cfff -0010D4r 1 00 D0 .word $d000 -0010D6r 1 01 D0 .word $d001 -0010D8r 1 02 D0 .word $d002 -0010DAr 1 03 D0 .word $d003 -0010DCr 1 04 D0 .word $d004 -0010DEr 1 05 D0 .word $d005 -0010E0r 1 06 D0 .word $d006 -0010E2r 1 07 D0 .word $d007 -0010E4r 1 08 D0 .word $d008 -0010E6r 1 09 D0 .word $d009 -0010E8r 1 0A D0 .word $d00a -0010EAr 1 0B D0 .word $d00b -0010ECr 1 0C D0 .word $d00c -0010EEr 1 0D D0 .word $d00d -0010F0r 1 0E D0 .word $d00e -0010F2r 1 0F D0 .word $d00f -0010F4r 1 E1 DF .word $dfe1 -0010F6r 1 E2 DF .word $dfe2 -0010F8r 1 E3 DF .word $dfe3 -0010FAr 1 E4 DF .word $dfe4 -0010FCr 1 E5 DF .word $dfe5 -0010FEr 1 E6 DF .word $dfe6 -001100r 1 E7 DF .word $dfe7 -001102r 1 E8 DF .word $dfe8 -001104r 1 E9 DF .word $dfe9 -001106r 1 EA DF .word $dfea -001108r 1 EB DF .word $dfeb -00110Ar 1 EC DF .word $dfec -00110Cr 1 ED DF .word $dfed -00110Er 1 EE DF .word $dfee -001110r 1 EF DF .word $dfef -001112r 1 F0 DF .word $dff0 -001114r 1 F1 DF .word $dff1 -001116r 1 F2 DF .word $dff2 -001118r 1 F3 DF .word $dff3 -00111Ar 1 F4 DF .word $dff4 -00111Cr 1 F5 DF .word $dff5 -00111Er 1 F6 DF .word $dff6 -001120r 1 F7 DF .word $dff7 -001122r 1 F8 DF .word $dff8 -001124r 1 F9 DF .word $dff9 -001126r 1 FA DF .word $dffa -001128r 1 FB DF .word $dffb -00112Ar 1 FC DF .word $dffc -00112Cr 1 FD DF .word $dffd -00112Er 1 FE DF .word $dffe -001130r 1 FF DF .word $dfff -001132r 1 00 E0 .word $e000 -001134r 1 01 E0 .word $e001 -001136r 1 02 E0 .word $e002 -001138r 1 03 E0 .word $e003 -00113Ar 1 04 E0 .word $e004 -00113Cr 1 05 E0 .word $e005 -00113Er 1 06 E0 .word $e006 -001140r 1 07 E0 .word $e007 -001142r 1 08 E0 .word $e008 -001144r 1 09 E0 .word $e009 -001146r 1 0A E0 .word $e00a -001148r 1 0B E0 .word $e00b -00114Ar 1 0C E0 .word $e00c -00114Cr 1 0D E0 .word $e00d -00114Er 1 0E E0 .word $e00e -001150r 1 0F E0 .word $e00f -001152r 1 E1 EF .word $efe1 -001154r 1 E2 EF .word $efe2 -001156r 1 E3 EF .word $efe3 -001158r 1 E4 EF .word $efe4 -00115Ar 1 E5 EF .word $efe5 -00115Cr 1 E6 EF .word $efe6 -00115Er 1 E7 EF .word $efe7 -001160r 1 E8 EF .word $efe8 -001162r 1 E9 EF .word $efe9 -001164r 1 EA EF .word $efea -001166r 1 EB EF .word $efeb -001168r 1 EC EF .word $efec -00116Ar 1 ED EF .word $efed -00116Cr 1 EE EF .word $efee -00116Er 1 EF EF .word $efef -001170r 1 F0 EF .word $eff0 -001172r 1 F1 EF .word $eff1 -001174r 1 F2 EF .word $eff2 -001176r 1 F3 EF .word $eff3 -001178r 1 F4 EF .word $eff4 -00117Ar 1 F5 EF .word $eff5 -00117Cr 1 F6 EF .word $eff6 -00117Er 1 F7 EF .word $eff7 -001180r 1 F8 EF .word $eff8 -001182r 1 F9 EF .word $eff9 -001184r 1 FA EF .word $effa -001186r 1 FB EF .word $effb -001188r 1 FC EF .word $effc -00118Ar 1 FD EF .word $effd -00118Cr 1 FE EF .word $effe -00118Er 1 FF EF .word $efff -001190r 1 00 F0 .word $f000 -001192r 1 01 F0 .word $f001 -001194r 1 02 F0 .word $f002 -001196r 1 03 F0 .word $f003 -001198r 1 04 F0 .word $f004 -00119Ar 1 05 F0 .word $f005 -00119Cr 1 06 F0 .word $f006 -00119Er 1 07 F0 .word $f007 -0011A0r 1 08 F0 .word $f008 -0011A2r 1 09 F0 .word $f009 -0011A4r 1 0A F0 .word $f00a -0011A6r 1 0B F0 .word $f00b -0011A8r 1 0C F0 .word $f00c -0011AAr 1 0D F0 .word $f00d -0011ACr 1 0E F0 .word $f00e -0011AEr 1 0F F0 .word $f00f -0011B0r 1 E1 FF .word $ffe1 -0011B2r 1 E2 FF .word $ffe2 -0011B4r 1 E3 FF .word $ffe3 -0011B6r 1 E4 FF .word $ffe4 -0011B8r 1 E5 FF .word $ffe5 -0011BAr 1 E6 FF .word $ffe6 -0011BCr 1 E7 FF .word $ffe7 -0011BEr 1 E8 FF .word $ffe8 -0011C0r 1 E9 FF .word $ffe9 -0011C2r 1 EA FF .word $ffea -0011C4r 1 EB FF .word $ffeb -0011C6r 1 EC FF .word $ffec -0011C8r 1 ED FF .word $ffed -0011CAr 1 EE FF .word $ffee -0011CCr 1 EF FF .word $ffef -0011CEr 1 F0 FF .word $fff0 -0011D0r 1 F1 FF .word $fff1 -0011D2r 1 F2 FF .word $fff2 -0011D4r 1 F3 FF .word $fff3 -0011D6r 1 F4 FF .word $fff4 -0011D8r 1 F5 FF .word $fff5 -0011DAr 1 F6 FF .word $fff6 -0011DCr 1 F7 FF .word $fff7 -0011DEr 1 F8 FF .word $fff8 -0011E0r 1 F9 FF .word $fff9 -0011E2r 1 FA FF .word $fffa -0011E4r 1 FB FF .word $fffb -0011E6r 1 FC FF .word $fffc -0011E8r 1 FD FF .word $fffd -0011EAr 1 FE FF .word $fffe -0011ECr 1 FF FF .word $ffff +000E58r 1 ; 4-digit hex values +000E58r 1 00 00 .word $0000 +000E5Ar 1 01 00 .word $0001 +000E5Cr 1 02 00 .word $0002 +000E5Er 1 03 00 .word $0003 +000E60r 1 04 00 .word $0004 +000E62r 1 05 00 .word $0005 +000E64r 1 06 00 .word $0006 +000E66r 1 07 00 .word $0007 +000E68r 1 08 00 .word $0008 +000E6Ar 1 09 00 .word $0009 +000E6Cr 1 0A 00 .word $000a +000E6Er 1 0B 00 .word $000b +000E70r 1 0C 00 .word $000c +000E72r 1 0D 00 .word $000d +000E74r 1 0E 00 .word $000e +000E76r 1 0F 00 .word $000f +000E78r 1 10 00 .word $0010 +000E7Ar 1 11 00 .word $0011 +000E7Cr 1 12 00 .word $0012 +000E7Er 1 13 00 .word $0013 +000E80r 1 70 00 .word $0070 +000E82r 1 71 00 .word $0071 +000E84r 1 72 00 .word $0072 +000E86r 1 73 00 .word $0073 +000E88r 1 74 00 .word $0074 +000E8Ar 1 75 00 .word $0075 +000E8Cr 1 76 00 .word $0076 +000E8Er 1 77 00 .word $0077 +000E90r 1 78 00 .word $0078 +000E92r 1 79 00 .word $0079 +000E94r 1 7A 00 .word $007a +000E96r 1 7B 00 .word $007b +000E98r 1 7C 00 .word $007c +000E9Ar 1 7D 00 .word $007d +000E9Cr 1 7E 00 .word $007e +000E9Er 1 7F 00 .word $007f +000EA0r 1 80 00 .word $0080 +000EA2r 1 81 00 .word $0081 +000EA4r 1 82 00 .word $0082 +000EA6r 1 83 00 .word $0083 +000EA8r 1 84 00 .word $0084 +000EAAr 1 85 00 .word $0085 +000EACr 1 86 00 .word $0086 +000EAEr 1 F0 00 .word $00f0 +000EB0r 1 F1 00 .word $00f1 +000EB2r 1 F2 00 .word $00f2 +000EB4r 1 F3 00 .word $00f3 +000EB6r 1 F4 00 .word $00f4 +000EB8r 1 F5 00 .word $00f5 +000EBAr 1 F6 00 .word $00f6 +000EBCr 1 F7 00 .word $00f7 +000EBEr 1 F8 00 .word $00f8 +000EC0r 1 F9 00 .word $00f9 +000EC2r 1 FA 00 .word $00fa +000EC4r 1 FB 00 .word $00fb +000EC6r 1 FC 00 .word $00fc +000EC8r 1 FD 00 .word $00fd +000ECAr 1 FE 00 .word $00fe +000ECCr 1 FF 00 .word $00ff +000ECEr 1 00 01 .word $0100 +000ED0r 1 01 01 .word $0101 +000ED2r 1 02 01 .word $0102 +000ED4r 1 03 01 .word $0103 +000ED6r 1 D2 0F .word $0fd2 +000ED8r 1 D3 0F .word $0fd3 +000EDAr 1 D4 0F .word $0fd4 +000EDCr 1 D5 0F .word $0fd5 +000EDEr 1 D6 0F .word $0fd6 +000EE0r 1 D7 0F .word $0fd7 +000EE2r 1 D8 0F .word $0fd8 +000EE4r 1 D9 0F .word $0fd9 +000EE6r 1 DA 0F .word $0fda +000EE8r 1 DB 0F .word $0fdb +000EEAr 1 DC 0F .word $0fdc +000EECr 1 DD 0F .word $0fdd +000EEEr 1 DE 0F .word $0fde +000EF0r 1 DF 0F .word $0fdf +000EF2r 1 E0 0F .word $0fe0 +000EF4r 1 E1 0F .word $0fe1 +000EF6r 1 E2 0F .word $0fe2 +000EF8r 1 E3 0F .word $0fe3 +000EFAr 1 E4 0F .word $0fe4 +000EFCr 1 E5 0F .word $0fe5 +000EFEr 1 E6 0F .word $0fe6 +000F00r 1 E7 0F .word $0fe7 +000F02r 1 E8 0F .word $0fe8 +000F04r 1 E9 0F .word $0fe9 +000F06r 1 EA 0F .word $0fea +000F08r 1 EB 0F .word $0feb +000F0Ar 1 EC 0F .word $0fec +000F0Cr 1 ED 0F .word $0fed +000F0Er 1 EE 0F .word $0fee +000F10r 1 EF 0F .word $0fef +000F12r 1 F0 0F .word $0ff0 +000F14r 1 F1 0F .word $0ff1 +000F16r 1 F2 0F .word $0ff2 +000F18r 1 F3 0F .word $0ff3 +000F1Ar 1 F4 0F .word $0ff4 +000F1Cr 1 F5 0F .word $0ff5 +000F1Er 1 F6 0F .word $0ff6 +000F20r 1 F7 0F .word $0ff7 +000F22r 1 F8 0F .word $0ff8 +000F24r 1 F9 0F .word $0ff9 +000F26r 1 FA 0F .word $0ffa +000F28r 1 FB 0F .word $0ffb +000F2Ar 1 FC 0F .word $0ffc +000F2Cr 1 FD 0F .word $0ffd +000F2Er 1 FE 0F .word $0ffe +000F30r 1 FF 0F .word $0fff +000F32r 1 00 10 .word $1000 +000F34r 1 01 10 .word $1001 +000F36r 1 02 10 .word $1002 +000F38r 1 03 10 .word $1003 +000F3Ar 1 04 10 .word $1004 +000F3Cr 1 05 10 .word $1005 +000F3Er 1 06 10 .word $1006 +000F40r 1 07 10 .word $1007 +000F42r 1 08 10 .word $1008 +000F44r 1 F0 7F .word $7ff0 +000F46r 1 F1 7F .word $7ff1 +000F48r 1 F2 7F .word $7ff2 +000F4Ar 1 F3 7F .word $7ff3 +000F4Cr 1 F4 7F .word $7ff4 +000F4Er 1 F5 7F .word $7ff5 +000F50r 1 F6 7F .word $7ff6 +000F52r 1 F7 7F .word $7ff7 +000F54r 1 F8 7F .word $7ff8 +000F56r 1 F9 7F .word $7ff9 +000F58r 1 FA 7F .word $7ffa +000F5Ar 1 FB 7F .word $7ffb +000F5Cr 1 FC 7F .word $7ffc +000F5Er 1 FD 7F .word $7ffd +000F60r 1 FE 7F .word $7ffe +000F62r 1 FF 7F .word $7fff +000F64r 1 00 80 .word $8000 +000F66r 1 01 80 .word $8001 +000F68r 1 02 80 .word $8002 +000F6Ar 1 03 80 .word $8003 +000F6Cr 1 04 80 .word $8004 +000F6Er 1 05 80 .word $8005 +000F70r 1 06 80 .word $8006 +000F72r 1 07 80 .word $8007 +000F74r 1 08 80 .word $8008 +000F76r 1 09 80 .word $8009 +000F78r 1 0A 80 .word $800a +000F7Ar 1 0B 80 .word $800b +000F7Cr 1 E1 9F .word $9fe1 +000F7Er 1 E2 9F .word $9fe2 +000F80r 1 E3 9F .word $9fe3 +000F82r 1 E4 9F .word $9fe4 +000F84r 1 E5 9F .word $9fe5 +000F86r 1 E6 9F .word $9fe6 +000F88r 1 E7 9F .word $9fe7 +000F8Ar 1 E8 9F .word $9fe8 +000F8Cr 1 E9 9F .word $9fe9 +000F8Er 1 EA 9F .word $9fea +000F90r 1 EB 9F .word $9feb +000F92r 1 EC 9F .word $9fec +000F94r 1 ED 9F .word $9fed +000F96r 1 EE 9F .word $9fee +000F98r 1 EF 9F .word $9fef +000F9Ar 1 F0 9F .word $9ff0 +000F9Cr 1 F1 9F .word $9ff1 +000F9Er 1 F2 9F .word $9ff2 +000FA0r 1 F3 9F .word $9ff3 +000FA2r 1 F4 9F .word $9ff4 +000FA4r 1 F5 9F .word $9ff5 +000FA6r 1 F6 9F .word $9ff6 +000FA8r 1 F7 9F .word $9ff7 +000FAAr 1 F8 9F .word $9ff8 +000FACr 1 F9 9F .word $9ff9 +000FAEr 1 FA 9F .word $9ffa +000FB0r 1 FB 9F .word $9ffb +000FB2r 1 FC 9F .word $9ffc +000FB4r 1 FD 9F .word $9ffd +000FB6r 1 FE 9F .word $9ffe +000FB8r 1 FF 9F .word $9fff +000FBAr 1 00 A0 .word $a000 +000FBCr 1 01 A0 .word $a001 +000FBEr 1 02 A0 .word $a002 +000FC0r 1 03 A0 .word $a003 +000FC2r 1 04 A0 .word $a004 +000FC4r 1 05 A0 .word $a005 +000FC6r 1 06 A0 .word $a006 +000FC8r 1 07 A0 .word $a007 +000FCAr 1 08 A0 .word $a008 +000FCCr 1 09 A0 .word $a009 +000FCEr 1 0A A0 .word $a00a +000FD0r 1 0B A0 .word $a00b +000FD2r 1 0C A0 .word $a00c +000FD4r 1 0D A0 .word $a00d +000FD6r 1 0E A0 .word $a00e +000FD8r 1 0F A0 .word $a00f +000FDAr 1 E1 AF .word $afe1 +000FDCr 1 E2 AF .word $afe2 +000FDEr 1 E3 AF .word $afe3 +000FE0r 1 E4 AF .word $afe4 +000FE2r 1 E5 AF .word $afe5 +000FE4r 1 E6 AF .word $afe6 +000FE6r 1 E7 AF .word $afe7 +000FE8r 1 E8 AF .word $afe8 +000FEAr 1 E9 AF .word $afe9 +000FECr 1 EA AF .word $afea +000FEEr 1 EB AF .word $afeb +000FF0r 1 EC AF .word $afec +000FF2r 1 ED AF .word $afed +000FF4r 1 EE AF .word $afee +000FF6r 1 EF AF .word $afef +000FF8r 1 F0 AF .word $aff0 +000FFAr 1 F1 AF .word $aff1 +000FFCr 1 F2 AF .word $aff2 +000FFEr 1 F3 AF .word $aff3 +001000r 1 F4 AF .word $aff4 +001002r 1 F5 AF .word $aff5 +001004r 1 F6 AF .word $aff6 +001006r 1 F7 AF .word $aff7 +001008r 1 F8 AF .word $aff8 +00100Ar 1 F9 AF .word $aff9 +00100Cr 1 FA AF .word $affa +00100Er 1 FB AF .word $affb +001010r 1 FC AF .word $affc +001012r 1 FD AF .word $affd +001014r 1 FE AF .word $affe +001016r 1 FF AF .word $afff +001018r 1 00 B0 .word $b000 +00101Ar 1 01 B0 .word $b001 +00101Cr 1 02 B0 .word $b002 +00101Er 1 03 B0 .word $b003 +001020r 1 04 B0 .word $b004 +001022r 1 05 B0 .word $b005 +001024r 1 06 B0 .word $b006 +001026r 1 07 B0 .word $b007 +001028r 1 08 B0 .word $b008 +00102Ar 1 09 B0 .word $b009 +00102Cr 1 0A B0 .word $b00a +00102Er 1 0B B0 .word $b00b +001030r 1 0C B0 .word $b00c +001032r 1 0D B0 .word $b00d +001034r 1 0E B0 .word $b00e +001036r 1 0F B0 .word $b00f +001038r 1 E1 BF .word $bfe1 +00103Ar 1 E2 BF .word $bfe2 +00103Cr 1 E3 BF .word $bfe3 +00103Er 1 E4 BF .word $bfe4 +001040r 1 E5 BF .word $bfe5 +001042r 1 E6 BF .word $bfe6 +001044r 1 E7 BF .word $bfe7 +001046r 1 E8 BF .word $bfe8 +001048r 1 E9 BF .word $bfe9 +00104Ar 1 EA BF .word $bfea +00104Cr 1 EB BF .word $bfeb +00104Er 1 EC BF .word $bfec +001050r 1 ED BF .word $bfed +001052r 1 EE BF .word $bfee +001054r 1 EF BF .word $bfef +001056r 1 F0 BF .word $bff0 +001058r 1 F1 BF .word $bff1 +00105Ar 1 F2 BF .word $bff2 +00105Cr 1 F3 BF .word $bff3 +00105Er 1 F4 BF .word $bff4 +001060r 1 F5 BF .word $bff5 +001062r 1 F6 BF .word $bff6 +001064r 1 F7 BF .word $bff7 +001066r 1 F8 BF .word $bff8 +001068r 1 F9 BF .word $bff9 +00106Ar 1 FA BF .word $bffa +00106Cr 1 FB BF .word $bffb +00106Er 1 FC BF .word $bffc +001070r 1 FD BF .word $bffd +001072r 1 FE BF .word $bffe +001074r 1 FF BF .word $bfff +001076r 1 00 C0 .word $c000 +001078r 1 01 C0 .word $c001 +00107Ar 1 02 C0 .word $c002 +00107Cr 1 03 C0 .word $c003 +00107Er 1 04 C0 .word $c004 +001080r 1 05 C0 .word $c005 +001082r 1 06 C0 .word $c006 +001084r 1 07 C0 .word $c007 +001086r 1 08 C0 .word $c008 +001088r 1 09 C0 .word $c009 +00108Ar 1 0A C0 .word $c00a +00108Cr 1 0B C0 .word $c00b +00108Er 1 0C C0 .word $c00c +001090r 1 0D C0 .word $c00d +001092r 1 0E C0 .word $c00e +001094r 1 0F C0 .word $c00f +001096r 1 E1 CF .word $cfe1 +001098r 1 E2 CF .word $cfe2 +00109Ar 1 E3 CF .word $cfe3 +00109Cr 1 E4 CF .word $cfe4 +00109Er 1 E5 CF .word $cfe5 +0010A0r 1 E6 CF .word $cfe6 +0010A2r 1 E7 CF .word $cfe7 +0010A4r 1 E8 CF .word $cfe8 +0010A6r 1 E9 CF .word $cfe9 +0010A8r 1 EA CF .word $cfea +0010AAr 1 EB CF .word $cfeb +0010ACr 1 EC CF .word $cfec +0010AEr 1 ED CF .word $cfed +0010B0r 1 EE CF .word $cfee +0010B2r 1 EF CF .word $cfef +0010B4r 1 F0 CF .word $cff0 +0010B6r 1 F1 CF .word $cff1 +0010B8r 1 F2 CF .word $cff2 +0010BAr 1 F3 CF .word $cff3 +0010BCr 1 F4 CF .word $cff4 +0010BEr 1 F5 CF .word $cff5 +0010C0r 1 F6 CF .word $cff6 +0010C2r 1 F7 CF .word $cff7 +0010C4r 1 F8 CF .word $cff8 +0010C6r 1 F9 CF .word $cff9 +0010C8r 1 FA CF .word $cffa +0010CAr 1 FB CF .word $cffb +0010CCr 1 FC CF .word $cffc +0010CEr 1 FD CF .word $cffd +0010D0r 1 FE CF .word $cffe +0010D2r 1 FF CF .word $cfff +0010D4r 1 00 D0 .word $d000 +0010D6r 1 01 D0 .word $d001 +0010D8r 1 02 D0 .word $d002 +0010DAr 1 03 D0 .word $d003 +0010DCr 1 04 D0 .word $d004 +0010DEr 1 05 D0 .word $d005 +0010E0r 1 06 D0 .word $d006 +0010E2r 1 07 D0 .word $d007 +0010E4r 1 08 D0 .word $d008 +0010E6r 1 09 D0 .word $d009 +0010E8r 1 0A D0 .word $d00a +0010EAr 1 0B D0 .word $d00b +0010ECr 1 0C D0 .word $d00c +0010EEr 1 0D D0 .word $d00d +0010F0r 1 0E D0 .word $d00e +0010F2r 1 0F D0 .word $d00f +0010F4r 1 E1 DF .word $dfe1 +0010F6r 1 E2 DF .word $dfe2 +0010F8r 1 E3 DF .word $dfe3 +0010FAr 1 E4 DF .word $dfe4 +0010FCr 1 E5 DF .word $dfe5 +0010FEr 1 E6 DF .word $dfe6 +001100r 1 E7 DF .word $dfe7 +001102r 1 E8 DF .word $dfe8 +001104r 1 E9 DF .word $dfe9 +001106r 1 EA DF .word $dfea +001108r 1 EB DF .word $dfeb +00110Ar 1 EC DF .word $dfec +00110Cr 1 ED DF .word $dfed +00110Er 1 EE DF .word $dfee +001110r 1 EF DF .word $dfef +001112r 1 F0 DF .word $dff0 +001114r 1 F1 DF .word $dff1 +001116r 1 F2 DF .word $dff2 +001118r 1 F3 DF .word $dff3 +00111Ar 1 F4 DF .word $dff4 +00111Cr 1 F5 DF .word $dff5 +00111Er 1 F6 DF .word $dff6 +001120r 1 F7 DF .word $dff7 +001122r 1 F8 DF .word $dff8 +001124r 1 F9 DF .word $dff9 +001126r 1 FA DF .word $dffa +001128r 1 FB DF .word $dffb +00112Ar 1 FC DF .word $dffc +00112Cr 1 FD DF .word $dffd +00112Er 1 FE DF .word $dffe +001130r 1 FF DF .word $dfff +001132r 1 00 E0 .word $e000 +001134r 1 01 E0 .word $e001 +001136r 1 02 E0 .word $e002 +001138r 1 03 E0 .word $e003 +00113Ar 1 04 E0 .word $e004 +00113Cr 1 05 E0 .word $e005 +00113Er 1 06 E0 .word $e006 +001140r 1 07 E0 .word $e007 +001142r 1 08 E0 .word $e008 +001144r 1 09 E0 .word $e009 +001146r 1 0A E0 .word $e00a +001148r 1 0B E0 .word $e00b +00114Ar 1 0C E0 .word $e00c +00114Cr 1 0D E0 .word $e00d +00114Er 1 0E E0 .word $e00e +001150r 1 0F E0 .word $e00f +001152r 1 E1 EF .word $efe1 +001154r 1 E2 EF .word $efe2 +001156r 1 E3 EF .word $efe3 +001158r 1 E4 EF .word $efe4 +00115Ar 1 E5 EF .word $efe5 +00115Cr 1 E6 EF .word $efe6 +00115Er 1 E7 EF .word $efe7 +001160r 1 E8 EF .word $efe8 +001162r 1 E9 EF .word $efe9 +001164r 1 EA EF .word $efea +001166r 1 EB EF .word $efeb +001168r 1 EC EF .word $efec +00116Ar 1 ED EF .word $efed +00116Cr 1 EE EF .word $efee +00116Er 1 EF EF .word $efef +001170r 1 F0 EF .word $eff0 +001172r 1 F1 EF .word $eff1 +001174r 1 F2 EF .word $eff2 +001176r 1 F3 EF .word $eff3 +001178r 1 F4 EF .word $eff4 +00117Ar 1 F5 EF .word $eff5 +00117Cr 1 F6 EF .word $eff6 +00117Er 1 F7 EF .word $eff7 +001180r 1 F8 EF .word $eff8 +001182r 1 F9 EF .word $eff9 +001184r 1 FA EF .word $effa +001186r 1 FB EF .word $effb +001188r 1 FC EF .word $effc +00118Ar 1 FD EF .word $effd +00118Cr 1 FE EF .word $effe +00118Er 1 FF EF .word $efff +001190r 1 00 F0 .word $f000 +001192r 1 01 F0 .word $f001 +001194r 1 02 F0 .word $f002 +001196r 1 03 F0 .word $f003 +001198r 1 04 F0 .word $f004 +00119Ar 1 05 F0 .word $f005 +00119Cr 1 06 F0 .word $f006 +00119Er 1 07 F0 .word $f007 +0011A0r 1 08 F0 .word $f008 +0011A2r 1 09 F0 .word $f009 +0011A4r 1 0A F0 .word $f00a +0011A6r 1 0B F0 .word $f00b +0011A8r 1 0C F0 .word $f00c +0011AAr 1 0D F0 .word $f00d +0011ACr 1 0E F0 .word $f00e +0011AEr 1 0F F0 .word $f00f +0011B0r 1 E1 FF .word $ffe1 +0011B2r 1 E2 FF .word $ffe2 +0011B4r 1 E3 FF .word $ffe3 +0011B6r 1 E4 FF .word $ffe4 +0011B8r 1 E5 FF .word $ffe5 +0011BAr 1 E6 FF .word $ffe6 +0011BCr 1 E7 FF .word $ffe7 +0011BEr 1 E8 FF .word $ffe8 +0011C0r 1 E9 FF .word $ffe9 +0011C2r 1 EA FF .word $ffea +0011C4r 1 EB FF .word $ffeb +0011C6r 1 EC FF .word $ffec +0011C8r 1 ED FF .word $ffed +0011CAr 1 EE FF .word $ffee +0011CCr 1 EF FF .word $ffef +0011CEr 1 F0 FF .word $fff0 +0011D0r 1 F1 FF .word $fff1 +0011D2r 1 F2 FF .word $fff2 +0011D4r 1 F3 FF .word $fff3 +0011D6r 1 F4 FF .word $fff4 +0011D8r 1 F5 FF .word $fff5 +0011DAr 1 F6 FF .word $fff6 +0011DCr 1 F7 FF .word $fff7 +0011DEr 1 F8 FF .word $fff8 +0011E0r 1 F9 FF .word $fff9 +0011E2r 1 FA FF .word $fffa +0011E4r 1 FB FF .word $fffb +0011E6r 1 FC FF .word $fffc +0011E8r 1 FD FF .word $fffd +0011EAr 1 FE FF .word $fffe +0011ECr 1 FF FF .word $ffff 0011EEr 1 -0011EEr 1 ; 4-digit hex values, uppercase -0011EEr 1 00 00 .word $0000 -0011F0r 1 01 00 .word $0001 -0011F2r 1 02 00 .word $0002 -0011F4r 1 03 00 .word $0003 -0011F6r 1 04 00 .word $0004 -0011F8r 1 05 00 .word $0005 -0011FAr 1 06 00 .word $0006 -0011FCr 1 07 00 .word $0007 -0011FEr 1 08 00 .word $0008 -001200r 1 09 00 .word $0009 -001202r 1 0A 00 .word $000A -001204r 1 0B 00 .word $000B -001206r 1 0C 00 .word $000C -001208r 1 0D 00 .word $000D -00120Ar 1 0E 00 .word $000E -00120Cr 1 0F 00 .word $000F -00120Er 1 10 00 .word $0010 -001210r 1 11 00 .word $0011 -001212r 1 12 00 .word $0012 -001214r 1 13 00 .word $0013 -001216r 1 70 00 .word $0070 -001218r 1 71 00 .word $0071 -00121Ar 1 72 00 .word $0072 -00121Cr 1 73 00 .word $0073 -00121Er 1 74 00 .word $0074 -001220r 1 75 00 .word $0075 -001222r 1 76 00 .word $0076 -001224r 1 77 00 .word $0077 -001226r 1 78 00 .word $0078 -001228r 1 79 00 .word $0079 -00122Ar 1 7A 00 .word $007A -00122Cr 1 7B 00 .word $007B -00122Er 1 7C 00 .word $007C -001230r 1 7D 00 .word $007D -001232r 1 7E 00 .word $007E -001234r 1 7F 00 .word $007F -001236r 1 80 00 .word $0080 -001238r 1 81 00 .word $0081 -00123Ar 1 82 00 .word $0082 -00123Cr 1 83 00 .word $0083 -00123Er 1 84 00 .word $0084 -001240r 1 85 00 .word $0085 -001242r 1 86 00 .word $0086 -001244r 1 F0 00 .word $00F0 -001246r 1 F1 00 .word $00F1 -001248r 1 F2 00 .word $00F2 -00124Ar 1 F3 00 .word $00F3 -00124Cr 1 F4 00 .word $00F4 -00124Er 1 F5 00 .word $00F5 -001250r 1 F6 00 .word $00F6 -001252r 1 F7 00 .word $00F7 -001254r 1 F8 00 .word $00F8 -001256r 1 F9 00 .word $00F9 -001258r 1 FA 00 .word $00FA -00125Ar 1 FB 00 .word $00FB -00125Cr 1 FC 00 .word $00FC -00125Er 1 FD 00 .word $00FD -001260r 1 FE 00 .word $00FE -001262r 1 FF 00 .word $00FF -001264r 1 00 01 .word $0100 -001266r 1 01 01 .word $0101 -001268r 1 02 01 .word $0102 -00126Ar 1 03 01 .word $0103 -00126Cr 1 D2 0F .word $0FD2 -00126Er 1 D3 0F .word $0FD3 -001270r 1 D4 0F .word $0FD4 -001272r 1 D5 0F .word $0FD5 -001274r 1 D6 0F .word $0FD6 -001276r 1 D7 0F .word $0FD7 -001278r 1 D8 0F .word $0FD8 -00127Ar 1 D9 0F .word $0FD9 -00127Cr 1 DA 0F .word $0FDA -00127Er 1 DB 0F .word $0FDB -001280r 1 DC 0F .word $0FDC -001282r 1 DD 0F .word $0FDD -001284r 1 DE 0F .word $0FDE -001286r 1 DF 0F .word $0FDF -001288r 1 E0 0F .word $0FE0 -00128Ar 1 E1 0F .word $0FE1 -00128Cr 1 E2 0F .word $0FE2 -00128Er 1 E3 0F .word $0FE3 -001290r 1 E4 0F .word $0FE4 -001292r 1 E5 0F .word $0FE5 -001294r 1 E6 0F .word $0FE6 -001296r 1 E7 0F .word $0FE7 -001298r 1 E8 0F .word $0FE8 -00129Ar 1 E9 0F .word $0FE9 -00129Cr 1 EA 0F .word $0FEA -00129Er 1 EB 0F .word $0FEB -0012A0r 1 EC 0F .word $0FEC -0012A2r 1 ED 0F .word $0FED -0012A4r 1 EE 0F .word $0FEE -0012A6r 1 EF 0F .word $0FEF -0012A8r 1 F0 0F .word $0FF0 -0012AAr 1 F1 0F .word $0FF1 -0012ACr 1 F2 0F .word $0FF2 -0012AEr 1 F3 0F .word $0FF3 -0012B0r 1 F4 0F .word $0FF4 -0012B2r 1 F5 0F .word $0FF5 -0012B4r 1 F6 0F .word $0FF6 -0012B6r 1 F7 0F .word $0FF7 -0012B8r 1 F8 0F .word $0FF8 -0012BAr 1 F9 0F .word $0FF9 -0012BCr 1 FA 0F .word $0FFA -0012BEr 1 FB 0F .word $0FFB -0012C0r 1 FC 0F .word $0FFC -0012C2r 1 FD 0F .word $0FFD -0012C4r 1 FE 0F .word $0FFE -0012C6r 1 FF 0F .word $0FFF -0012C8r 1 00 10 .word $1000 -0012CAr 1 01 10 .word $1001 -0012CCr 1 02 10 .word $1002 -0012CEr 1 03 10 .word $1003 -0012D0r 1 04 10 .word $1004 -0012D2r 1 05 10 .word $1005 -0012D4r 1 06 10 .word $1006 -0012D6r 1 07 10 .word $1007 -0012D8r 1 08 10 .word $1008 -0012DAr 1 F0 7F .word $7FF0 -0012DCr 1 F1 7F .word $7FF1 -0012DEr 1 F2 7F .word $7FF2 -0012E0r 1 F3 7F .word $7FF3 -0012E2r 1 F4 7F .word $7FF4 -0012E4r 1 F5 7F .word $7FF5 -0012E6r 1 F6 7F .word $7FF6 -0012E8r 1 F7 7F .word $7FF7 -0012EAr 1 F8 7F .word $7FF8 -0012ECr 1 F9 7F .word $7FF9 -0012EEr 1 FA 7F .word $7FFA -0012F0r 1 FB 7F .word $7FFB -0012F2r 1 FC 7F .word $7FFC -0012F4r 1 FD 7F .word $7FFD -0012F6r 1 FE 7F .word $7FFE -0012F8r 1 FF 7F .word $7FFF -0012FAr 1 00 80 .word $8000 -0012FCr 1 01 80 .word $8001 -0012FEr 1 02 80 .word $8002 -001300r 1 03 80 .word $8003 -001302r 1 04 80 .word $8004 -001304r 1 05 80 .word $8005 -001306r 1 06 80 .word $8006 -001308r 1 07 80 .word $8007 -00130Ar 1 08 80 .word $8008 -00130Cr 1 09 80 .word $8009 -00130Er 1 0A 80 .word $800A -001310r 1 0B 80 .word $800B -001312r 1 E1 9F .word $9FE1 -001314r 1 E2 9F .word $9FE2 -001316r 1 E3 9F .word $9FE3 -001318r 1 E4 9F .word $9FE4 -00131Ar 1 E5 9F .word $9FE5 -00131Cr 1 E6 9F .word $9FE6 -00131Er 1 E7 9F .word $9FE7 -001320r 1 E8 9F .word $9FE8 -001322r 1 E9 9F .word $9FE9 -001324r 1 EA 9F .word $9FEA -001326r 1 EB 9F .word $9FEB -001328r 1 EC 9F .word $9FEC -00132Ar 1 ED 9F .word $9FED -00132Cr 1 EE 9F .word $9FEE -00132Er 1 EF 9F .word $9FEF -001330r 1 F0 9F .word $9FF0 -001332r 1 F1 9F .word $9FF1 -001334r 1 F2 9F .word $9FF2 -001336r 1 F3 9F .word $9FF3 -001338r 1 F4 9F .word $9FF4 -00133Ar 1 F5 9F .word $9FF5 -00133Cr 1 F6 9F .word $9FF6 -00133Er 1 F7 9F .word $9FF7 -001340r 1 F8 9F .word $9FF8 -001342r 1 F9 9F .word $9FF9 -001344r 1 FA 9F .word $9FFA -001346r 1 FB 9F .word $9FFB -001348r 1 FC 9F .word $9FFC -00134Ar 1 FD 9F .word $9FFD -00134Cr 1 FE 9F .word $9FFE -00134Er 1 FF 9F .word $9FFF -001350r 1 00 A0 .word $A000 -001352r 1 01 A0 .word $A001 -001354r 1 02 A0 .word $A002 -001356r 1 03 A0 .word $A003 -001358r 1 04 A0 .word $A004 -00135Ar 1 05 A0 .word $A005 -00135Cr 1 06 A0 .word $A006 -00135Er 1 07 A0 .word $A007 -001360r 1 08 A0 .word $A008 -001362r 1 09 A0 .word $A009 -001364r 1 0A A0 .word $A00A -001366r 1 0B A0 .word $A00B -001368r 1 0C A0 .word $A00C -00136Ar 1 0D A0 .word $A00D -00136Cr 1 0E A0 .word $A00E -00136Er 1 0F A0 .word $A00F -001370r 1 E1 AF .word $AFE1 -001372r 1 E2 AF .word $AFE2 -001374r 1 E3 AF .word $AFE3 -001376r 1 E4 AF .word $AFE4 -001378r 1 E5 AF .word $AFE5 -00137Ar 1 E6 AF .word $AFE6 -00137Cr 1 E7 AF .word $AFE7 -00137Er 1 E8 AF .word $AFE8 -001380r 1 E9 AF .word $AFE9 -001382r 1 EA AF .word $AFEA -001384r 1 EB AF .word $AFEB -001386r 1 EC AF .word $AFEC -001388r 1 ED AF .word $AFED -00138Ar 1 EE AF .word $AFEE -00138Cr 1 EF AF .word $AFEF -00138Er 1 F0 AF .word $AFF0 -001390r 1 F1 AF .word $AFF1 -001392r 1 F2 AF .word $AFF2 -001394r 1 F3 AF .word $AFF3 -001396r 1 F4 AF .word $AFF4 -001398r 1 F5 AF .word $AFF5 -00139Ar 1 F6 AF .word $AFF6 -00139Cr 1 F7 AF .word $AFF7 -00139Er 1 F8 AF .word $AFF8 -0013A0r 1 F9 AF .word $AFF9 -0013A2r 1 FA AF .word $AFFA -0013A4r 1 FB AF .word $AFFB -0013A6r 1 FC AF .word $AFFC -0013A8r 1 FD AF .word $AFFD -0013AAr 1 FE AF .word $AFFE -0013ACr 1 FF AF .word $AFFF -0013AEr 1 00 B0 .word $B000 -0013B0r 1 01 B0 .word $B001 -0013B2r 1 02 B0 .word $B002 -0013B4r 1 03 B0 .word $B003 -0013B6r 1 04 B0 .word $B004 -0013B8r 1 05 B0 .word $B005 -0013BAr 1 06 B0 .word $B006 -0013BCr 1 07 B0 .word $B007 -0013BEr 1 08 B0 .word $B008 -0013C0r 1 09 B0 .word $B009 -0013C2r 1 0A B0 .word $B00A -0013C4r 1 0B B0 .word $B00B -0013C6r 1 0C B0 .word $B00C -0013C8r 1 0D B0 .word $B00D -0013CAr 1 0E B0 .word $B00E -0013CCr 1 0F B0 .word $B00F -0013CEr 1 E1 BF .word $BFE1 -0013D0r 1 E2 BF .word $BFE2 -0013D2r 1 E3 BF .word $BFE3 -0013D4r 1 E4 BF .word $BFE4 -0013D6r 1 E5 BF .word $BFE5 -0013D8r 1 E6 BF .word $BFE6 -0013DAr 1 E7 BF .word $BFE7 -0013DCr 1 E8 BF .word $BFE8 -0013DEr 1 E9 BF .word $BFE9 -0013E0r 1 EA BF .word $BFEA -0013E2r 1 EB BF .word $BFEB -0013E4r 1 EC BF .word $BFEC -0013E6r 1 ED BF .word $BFED -0013E8r 1 EE BF .word $BFEE -0013EAr 1 EF BF .word $BFEF -0013ECr 1 F0 BF .word $BFF0 -0013EEr 1 F1 BF .word $BFF1 -0013F0r 1 F2 BF .word $BFF2 -0013F2r 1 F3 BF .word $BFF3 -0013F4r 1 F4 BF .word $BFF4 -0013F6r 1 F5 BF .word $BFF5 -0013F8r 1 F6 BF .word $BFF6 -0013FAr 1 F7 BF .word $BFF7 -0013FCr 1 F8 BF .word $BFF8 -0013FEr 1 F9 BF .word $BFF9 -001400r 1 FA BF .word $BFFA -001402r 1 FB BF .word $BFFB -001404r 1 FC BF .word $BFFC -001406r 1 FD BF .word $BFFD -001408r 1 FE BF .word $BFFE -00140Ar 1 FF BF .word $BFFF -00140Cr 1 00 C0 .word $C000 -00140Er 1 01 C0 .word $C001 -001410r 1 02 C0 .word $C002 -001412r 1 03 C0 .word $C003 -001414r 1 04 C0 .word $C004 -001416r 1 05 C0 .word $C005 -001418r 1 06 C0 .word $C006 -00141Ar 1 07 C0 .word $C007 -00141Cr 1 08 C0 .word $C008 -00141Er 1 09 C0 .word $C009 -001420r 1 0A C0 .word $C00A -001422r 1 0B C0 .word $C00B -001424r 1 0C C0 .word $C00C -001426r 1 0D C0 .word $C00D -001428r 1 0E C0 .word $C00E -00142Ar 1 0F C0 .word $C00F -00142Cr 1 E1 CF .word $CFE1 -00142Er 1 E2 CF .word $CFE2 -001430r 1 E3 CF .word $CFE3 -001432r 1 E4 CF .word $CFE4 -001434r 1 E5 CF .word $CFE5 -001436r 1 E6 CF .word $CFE6 -001438r 1 E7 CF .word $CFE7 -00143Ar 1 E8 CF .word $CFE8 -00143Cr 1 E9 CF .word $CFE9 -00143Er 1 EA CF .word $CFEA -001440r 1 EB CF .word $CFEB -001442r 1 EC CF .word $CFEC -001444r 1 ED CF .word $CFED -001446r 1 EE CF .word $CFEE -001448r 1 EF CF .word $CFEF -00144Ar 1 F0 CF .word $CFF0 -00144Cr 1 F1 CF .word $CFF1 -00144Er 1 F2 CF .word $CFF2 -001450r 1 F3 CF .word $CFF3 -001452r 1 F4 CF .word $CFF4 -001454r 1 F5 CF .word $CFF5 -001456r 1 F6 CF .word $CFF6 -001458r 1 F7 CF .word $CFF7 -00145Ar 1 F8 CF .word $CFF8 -00145Cr 1 F9 CF .word $CFF9 -00145Er 1 FA CF .word $CFFA -001460r 1 FB CF .word $CFFB -001462r 1 FC CF .word $CFFC -001464r 1 FD CF .word $CFFD -001466r 1 FE CF .word $CFFE -001468r 1 FF CF .word $CFFF -00146Ar 1 00 D0 .word $D000 -00146Cr 1 01 D0 .word $D001 -00146Er 1 02 D0 .word $D002 -001470r 1 03 D0 .word $D003 -001472r 1 04 D0 .word $D004 -001474r 1 05 D0 .word $D005 -001476r 1 06 D0 .word $D006 -001478r 1 07 D0 .word $D007 -00147Ar 1 08 D0 .word $D008 -00147Cr 1 09 D0 .word $D009 -00147Er 1 0A D0 .word $D00A -001480r 1 0B D0 .word $D00B -001482r 1 0C D0 .word $D00C -001484r 1 0D D0 .word $D00D -001486r 1 0E D0 .word $D00E -001488r 1 0F D0 .word $D00F -00148Ar 1 E1 DF .word $DFE1 -00148Cr 1 E2 DF .word $DFE2 -00148Er 1 E3 DF .word $DFE3 -001490r 1 E4 DF .word $DFE4 -001492r 1 E5 DF .word $DFE5 -001494r 1 E6 DF .word $DFE6 -001496r 1 E7 DF .word $DFE7 -001498r 1 E8 DF .word $DFE8 -00149Ar 1 E9 DF .word $DFE9 -00149Cr 1 EA DF .word $DFEA -00149Er 1 EB DF .word $DFEB -0014A0r 1 EC DF .word $DFEC -0014A2r 1 ED DF .word $DFED -0014A4r 1 EE DF .word $DFEE -0014A6r 1 EF DF .word $DFEF -0014A8r 1 F0 DF .word $DFF0 -0014AAr 1 F1 DF .word $DFF1 -0014ACr 1 F2 DF .word $DFF2 -0014AEr 1 F3 DF .word $DFF3 -0014B0r 1 F4 DF .word $DFF4 -0014B2r 1 F5 DF .word $DFF5 -0014B4r 1 F6 DF .word $DFF6 -0014B6r 1 F7 DF .word $DFF7 -0014B8r 1 F8 DF .word $DFF8 -0014BAr 1 F9 DF .word $DFF9 -0014BCr 1 FA DF .word $DFFA -0014BEr 1 FB DF .word $DFFB -0014C0r 1 FC DF .word $DFFC -0014C2r 1 FD DF .word $DFFD -0014C4r 1 FE DF .word $DFFE -0014C6r 1 FF DF .word $DFFF -0014C8r 1 00 E0 .word $E000 -0014CAr 1 01 E0 .word $E001 -0014CCr 1 02 E0 .word $E002 -0014CEr 1 03 E0 .word $E003 -0014D0r 1 04 E0 .word $E004 -0014D2r 1 05 E0 .word $E005 -0014D4r 1 06 E0 .word $E006 -0014D6r 1 07 E0 .word $E007 -0014D8r 1 08 E0 .word $E008 -0014DAr 1 09 E0 .word $E009 -0014DCr 1 0A E0 .word $E00A -0014DEr 1 0B E0 .word $E00B -0014E0r 1 0C E0 .word $E00C -0014E2r 1 0D E0 .word $E00D -0014E4r 1 0E E0 .word $E00E -0014E6r 1 0F E0 .word $E00F -0014E8r 1 E1 EF .word $EFE1 -0014EAr 1 E2 EF .word $EFE2 -0014ECr 1 E3 EF .word $EFE3 -0014EEr 1 E4 EF .word $EFE4 -0014F0r 1 E5 EF .word $EFE5 -0014F2r 1 E6 EF .word $EFE6 -0014F4r 1 E7 EF .word $EFE7 -0014F6r 1 E8 EF .word $EFE8 -0014F8r 1 E9 EF .word $EFE9 -0014FAr 1 EA EF .word $EFEA -0014FCr 1 EB EF .word $EFEB -0014FEr 1 EC EF .word $EFEC -001500r 1 ED EF .word $EFED -001502r 1 EE EF .word $EFEE -001504r 1 EF EF .word $EFEF -001506r 1 F0 EF .word $EFF0 -001508r 1 F1 EF .word $EFF1 -00150Ar 1 F2 EF .word $EFF2 -00150Cr 1 F3 EF .word $EFF3 -00150Er 1 F4 EF .word $EFF4 -001510r 1 F5 EF .word $EFF5 -001512r 1 F6 EF .word $EFF6 -001514r 1 F7 EF .word $EFF7 -001516r 1 F8 EF .word $EFF8 -001518r 1 F9 EF .word $EFF9 -00151Ar 1 FA EF .word $EFFA -00151Cr 1 FB EF .word $EFFB -00151Er 1 FC EF .word $EFFC -001520r 1 FD EF .word $EFFD -001522r 1 FE EF .word $EFFE -001524r 1 FF EF .word $EFFF -001526r 1 00 F0 .word $F000 -001528r 1 01 F0 .word $F001 -00152Ar 1 02 F0 .word $F002 -00152Cr 1 03 F0 .word $F003 -00152Er 1 04 F0 .word $F004 -001530r 1 05 F0 .word $F005 -001532r 1 06 F0 .word $F006 -001534r 1 07 F0 .word $F007 -001536r 1 08 F0 .word $F008 -001538r 1 09 F0 .word $F009 -00153Ar 1 0A F0 .word $F00A -00153Cr 1 0B F0 .word $F00B -00153Er 1 0C F0 .word $F00C -001540r 1 0D F0 .word $F00D -001542r 1 0E F0 .word $F00E -001544r 1 0F F0 .word $F00F -001546r 1 E1 FF .word $FFE1 -001548r 1 E2 FF .word $FFE2 -00154Ar 1 E3 FF .word $FFE3 -00154Cr 1 E4 FF .word $FFE4 -00154Er 1 E5 FF .word $FFE5 -001550r 1 E6 FF .word $FFE6 -001552r 1 E7 FF .word $FFE7 -001554r 1 E8 FF .word $FFE8 -001556r 1 E9 FF .word $FFE9 -001558r 1 EA FF .word $FFEA -00155Ar 1 EB FF .word $FFEB -00155Cr 1 EC FF .word $FFEC -00155Er 1 ED FF .word $FFED -001560r 1 EE FF .word $FFEE -001562r 1 EF FF .word $FFEF -001564r 1 F0 FF .word $FFF0 -001566r 1 F1 FF .word $FFF1 -001568r 1 F2 FF .word $FFF2 -00156Ar 1 F3 FF .word $FFF3 -00156Cr 1 F4 FF .word $FFF4 -00156Er 1 F5 FF .word $FFF5 -001570r 1 F6 FF .word $FFF6 -001572r 1 F7 FF .word $FFF7 -001574r 1 F8 FF .word $FFF8 -001576r 1 F9 FF .word $FFF9 -001578r 1 FA FF .word $FFFA -00157Ar 1 FB FF .word $FFFB -00157Cr 1 FC FF .word $FFFC -00157Er 1 FD FF .word $FFFD -001580r 1 FE FF .word $FFFE -001582r 1 FF FF .word $FFFF +0011EEr 1 ; 4-digit hex values, uppercase +0011EEr 1 00 00 .word $0000 +0011F0r 1 01 00 .word $0001 +0011F2r 1 02 00 .word $0002 +0011F4r 1 03 00 .word $0003 +0011F6r 1 04 00 .word $0004 +0011F8r 1 05 00 .word $0005 +0011FAr 1 06 00 .word $0006 +0011FCr 1 07 00 .word $0007 +0011FEr 1 08 00 .word $0008 +001200r 1 09 00 .word $0009 +001202r 1 0A 00 .word $000A +001204r 1 0B 00 .word $000B +001206r 1 0C 00 .word $000C +001208r 1 0D 00 .word $000D +00120Ar 1 0E 00 .word $000E +00120Cr 1 0F 00 .word $000F +00120Er 1 10 00 .word $0010 +001210r 1 11 00 .word $0011 +001212r 1 12 00 .word $0012 +001214r 1 13 00 .word $0013 +001216r 1 70 00 .word $0070 +001218r 1 71 00 .word $0071 +00121Ar 1 72 00 .word $0072 +00121Cr 1 73 00 .word $0073 +00121Er 1 74 00 .word $0074 +001220r 1 75 00 .word $0075 +001222r 1 76 00 .word $0076 +001224r 1 77 00 .word $0077 +001226r 1 78 00 .word $0078 +001228r 1 79 00 .word $0079 +00122Ar 1 7A 00 .word $007A +00122Cr 1 7B 00 .word $007B +00122Er 1 7C 00 .word $007C +001230r 1 7D 00 .word $007D +001232r 1 7E 00 .word $007E +001234r 1 7F 00 .word $007F +001236r 1 80 00 .word $0080 +001238r 1 81 00 .word $0081 +00123Ar 1 82 00 .word $0082 +00123Cr 1 83 00 .word $0083 +00123Er 1 84 00 .word $0084 +001240r 1 85 00 .word $0085 +001242r 1 86 00 .word $0086 +001244r 1 F0 00 .word $00F0 +001246r 1 F1 00 .word $00F1 +001248r 1 F2 00 .word $00F2 +00124Ar 1 F3 00 .word $00F3 +00124Cr 1 F4 00 .word $00F4 +00124Er 1 F5 00 .word $00F5 +001250r 1 F6 00 .word $00F6 +001252r 1 F7 00 .word $00F7 +001254r 1 F8 00 .word $00F8 +001256r 1 F9 00 .word $00F9 +001258r 1 FA 00 .word $00FA +00125Ar 1 FB 00 .word $00FB +00125Cr 1 FC 00 .word $00FC +00125Er 1 FD 00 .word $00FD +001260r 1 FE 00 .word $00FE +001262r 1 FF 00 .word $00FF +001264r 1 00 01 .word $0100 +001266r 1 01 01 .word $0101 +001268r 1 02 01 .word $0102 +00126Ar 1 03 01 .word $0103 +00126Cr 1 D2 0F .word $0FD2 +00126Er 1 D3 0F .word $0FD3 +001270r 1 D4 0F .word $0FD4 +001272r 1 D5 0F .word $0FD5 +001274r 1 D6 0F .word $0FD6 +001276r 1 D7 0F .word $0FD7 +001278r 1 D8 0F .word $0FD8 +00127Ar 1 D9 0F .word $0FD9 +00127Cr 1 DA 0F .word $0FDA +00127Er 1 DB 0F .word $0FDB +001280r 1 DC 0F .word $0FDC +001282r 1 DD 0F .word $0FDD +001284r 1 DE 0F .word $0FDE +001286r 1 DF 0F .word $0FDF +001288r 1 E0 0F .word $0FE0 +00128Ar 1 E1 0F .word $0FE1 +00128Cr 1 E2 0F .word $0FE2 +00128Er 1 E3 0F .word $0FE3 +001290r 1 E4 0F .word $0FE4 +001292r 1 E5 0F .word $0FE5 +001294r 1 E6 0F .word $0FE6 +001296r 1 E7 0F .word $0FE7 +001298r 1 E8 0F .word $0FE8 +00129Ar 1 E9 0F .word $0FE9 +00129Cr 1 EA 0F .word $0FEA +00129Er 1 EB 0F .word $0FEB +0012A0r 1 EC 0F .word $0FEC +0012A2r 1 ED 0F .word $0FED +0012A4r 1 EE 0F .word $0FEE +0012A6r 1 EF 0F .word $0FEF +0012A8r 1 F0 0F .word $0FF0 +0012AAr 1 F1 0F .word $0FF1 +0012ACr 1 F2 0F .word $0FF2 +0012AEr 1 F3 0F .word $0FF3 +0012B0r 1 F4 0F .word $0FF4 +0012B2r 1 F5 0F .word $0FF5 +0012B4r 1 F6 0F .word $0FF6 +0012B6r 1 F7 0F .word $0FF7 +0012B8r 1 F8 0F .word $0FF8 +0012BAr 1 F9 0F .word $0FF9 +0012BCr 1 FA 0F .word $0FFA +0012BEr 1 FB 0F .word $0FFB +0012C0r 1 FC 0F .word $0FFC +0012C2r 1 FD 0F .word $0FFD +0012C4r 1 FE 0F .word $0FFE +0012C6r 1 FF 0F .word $0FFF +0012C8r 1 00 10 .word $1000 +0012CAr 1 01 10 .word $1001 +0012CCr 1 02 10 .word $1002 +0012CEr 1 03 10 .word $1003 +0012D0r 1 04 10 .word $1004 +0012D2r 1 05 10 .word $1005 +0012D4r 1 06 10 .word $1006 +0012D6r 1 07 10 .word $1007 +0012D8r 1 08 10 .word $1008 +0012DAr 1 F0 7F .word $7FF0 +0012DCr 1 F1 7F .word $7FF1 +0012DEr 1 F2 7F .word $7FF2 +0012E0r 1 F3 7F .word $7FF3 +0012E2r 1 F4 7F .word $7FF4 +0012E4r 1 F5 7F .word $7FF5 +0012E6r 1 F6 7F .word $7FF6 +0012E8r 1 F7 7F .word $7FF7 +0012EAr 1 F8 7F .word $7FF8 +0012ECr 1 F9 7F .word $7FF9 +0012EEr 1 FA 7F .word $7FFA +0012F0r 1 FB 7F .word $7FFB +0012F2r 1 FC 7F .word $7FFC +0012F4r 1 FD 7F .word $7FFD +0012F6r 1 FE 7F .word $7FFE +0012F8r 1 FF 7F .word $7FFF +0012FAr 1 00 80 .word $8000 +0012FCr 1 01 80 .word $8001 +0012FEr 1 02 80 .word $8002 +001300r 1 03 80 .word $8003 +001302r 1 04 80 .word $8004 +001304r 1 05 80 .word $8005 +001306r 1 06 80 .word $8006 +001308r 1 07 80 .word $8007 +00130Ar 1 08 80 .word $8008 +00130Cr 1 09 80 .word $8009 +00130Er 1 0A 80 .word $800A +001310r 1 0B 80 .word $800B +001312r 1 E1 9F .word $9FE1 +001314r 1 E2 9F .word $9FE2 +001316r 1 E3 9F .word $9FE3 +001318r 1 E4 9F .word $9FE4 +00131Ar 1 E5 9F .word $9FE5 +00131Cr 1 E6 9F .word $9FE6 +00131Er 1 E7 9F .word $9FE7 +001320r 1 E8 9F .word $9FE8 +001322r 1 E9 9F .word $9FE9 +001324r 1 EA 9F .word $9FEA +001326r 1 EB 9F .word $9FEB +001328r 1 EC 9F .word $9FEC +00132Ar 1 ED 9F .word $9FED +00132Cr 1 EE 9F .word $9FEE +00132Er 1 EF 9F .word $9FEF +001330r 1 F0 9F .word $9FF0 +001332r 1 F1 9F .word $9FF1 +001334r 1 F2 9F .word $9FF2 +001336r 1 F3 9F .word $9FF3 +001338r 1 F4 9F .word $9FF4 +00133Ar 1 F5 9F .word $9FF5 +00133Cr 1 F6 9F .word $9FF6 +00133Er 1 F7 9F .word $9FF7 +001340r 1 F8 9F .word $9FF8 +001342r 1 F9 9F .word $9FF9 +001344r 1 FA 9F .word $9FFA +001346r 1 FB 9F .word $9FFB +001348r 1 FC 9F .word $9FFC +00134Ar 1 FD 9F .word $9FFD +00134Cr 1 FE 9F .word $9FFE +00134Er 1 FF 9F .word $9FFF +001350r 1 00 A0 .word $A000 +001352r 1 01 A0 .word $A001 +001354r 1 02 A0 .word $A002 +001356r 1 03 A0 .word $A003 +001358r 1 04 A0 .word $A004 +00135Ar 1 05 A0 .word $A005 +00135Cr 1 06 A0 .word $A006 +00135Er 1 07 A0 .word $A007 +001360r 1 08 A0 .word $A008 +001362r 1 09 A0 .word $A009 +001364r 1 0A A0 .word $A00A +001366r 1 0B A0 .word $A00B +001368r 1 0C A0 .word $A00C +00136Ar 1 0D A0 .word $A00D +00136Cr 1 0E A0 .word $A00E +00136Er 1 0F A0 .word $A00F +001370r 1 E1 AF .word $AFE1 +001372r 1 E2 AF .word $AFE2 +001374r 1 E3 AF .word $AFE3 +001376r 1 E4 AF .word $AFE4 +001378r 1 E5 AF .word $AFE5 +00137Ar 1 E6 AF .word $AFE6 +00137Cr 1 E7 AF .word $AFE7 +00137Er 1 E8 AF .word $AFE8 +001380r 1 E9 AF .word $AFE9 +001382r 1 EA AF .word $AFEA +001384r 1 EB AF .word $AFEB +001386r 1 EC AF .word $AFEC +001388r 1 ED AF .word $AFED +00138Ar 1 EE AF .word $AFEE +00138Cr 1 EF AF .word $AFEF +00138Er 1 F0 AF .word $AFF0 +001390r 1 F1 AF .word $AFF1 +001392r 1 F2 AF .word $AFF2 +001394r 1 F3 AF .word $AFF3 +001396r 1 F4 AF .word $AFF4 +001398r 1 F5 AF .word $AFF5 +00139Ar 1 F6 AF .word $AFF6 +00139Cr 1 F7 AF .word $AFF7 +00139Er 1 F8 AF .word $AFF8 +0013A0r 1 F9 AF .word $AFF9 +0013A2r 1 FA AF .word $AFFA +0013A4r 1 FB AF .word $AFFB +0013A6r 1 FC AF .word $AFFC +0013A8r 1 FD AF .word $AFFD +0013AAr 1 FE AF .word $AFFE +0013ACr 1 FF AF .word $AFFF +0013AEr 1 00 B0 .word $B000 +0013B0r 1 01 B0 .word $B001 +0013B2r 1 02 B0 .word $B002 +0013B4r 1 03 B0 .word $B003 +0013B6r 1 04 B0 .word $B004 +0013B8r 1 05 B0 .word $B005 +0013BAr 1 06 B0 .word $B006 +0013BCr 1 07 B0 .word $B007 +0013BEr 1 08 B0 .word $B008 +0013C0r 1 09 B0 .word $B009 +0013C2r 1 0A B0 .word $B00A +0013C4r 1 0B B0 .word $B00B +0013C6r 1 0C B0 .word $B00C +0013C8r 1 0D B0 .word $B00D +0013CAr 1 0E B0 .word $B00E +0013CCr 1 0F B0 .word $B00F +0013CEr 1 E1 BF .word $BFE1 +0013D0r 1 E2 BF .word $BFE2 +0013D2r 1 E3 BF .word $BFE3 +0013D4r 1 E4 BF .word $BFE4 +0013D6r 1 E5 BF .word $BFE5 +0013D8r 1 E6 BF .word $BFE6 +0013DAr 1 E7 BF .word $BFE7 +0013DCr 1 E8 BF .word $BFE8 +0013DEr 1 E9 BF .word $BFE9 +0013E0r 1 EA BF .word $BFEA +0013E2r 1 EB BF .word $BFEB +0013E4r 1 EC BF .word $BFEC +0013E6r 1 ED BF .word $BFED +0013E8r 1 EE BF .word $BFEE +0013EAr 1 EF BF .word $BFEF +0013ECr 1 F0 BF .word $BFF0 +0013EEr 1 F1 BF .word $BFF1 +0013F0r 1 F2 BF .word $BFF2 +0013F2r 1 F3 BF .word $BFF3 +0013F4r 1 F4 BF .word $BFF4 +0013F6r 1 F5 BF .word $BFF5 +0013F8r 1 F6 BF .word $BFF6 +0013FAr 1 F7 BF .word $BFF7 +0013FCr 1 F8 BF .word $BFF8 +0013FEr 1 F9 BF .word $BFF9 +001400r 1 FA BF .word $BFFA +001402r 1 FB BF .word $BFFB +001404r 1 FC BF .word $BFFC +001406r 1 FD BF .word $BFFD +001408r 1 FE BF .word $BFFE +00140Ar 1 FF BF .word $BFFF +00140Cr 1 00 C0 .word $C000 +00140Er 1 01 C0 .word $C001 +001410r 1 02 C0 .word $C002 +001412r 1 03 C0 .word $C003 +001414r 1 04 C0 .word $C004 +001416r 1 05 C0 .word $C005 +001418r 1 06 C0 .word $C006 +00141Ar 1 07 C0 .word $C007 +00141Cr 1 08 C0 .word $C008 +00141Er 1 09 C0 .word $C009 +001420r 1 0A C0 .word $C00A +001422r 1 0B C0 .word $C00B +001424r 1 0C C0 .word $C00C +001426r 1 0D C0 .word $C00D +001428r 1 0E C0 .word $C00E +00142Ar 1 0F C0 .word $C00F +00142Cr 1 E1 CF .word $CFE1 +00142Er 1 E2 CF .word $CFE2 +001430r 1 E3 CF .word $CFE3 +001432r 1 E4 CF .word $CFE4 +001434r 1 E5 CF .word $CFE5 +001436r 1 E6 CF .word $CFE6 +001438r 1 E7 CF .word $CFE7 +00143Ar 1 E8 CF .word $CFE8 +00143Cr 1 E9 CF .word $CFE9 +00143Er 1 EA CF .word $CFEA +001440r 1 EB CF .word $CFEB +001442r 1 EC CF .word $CFEC +001444r 1 ED CF .word $CFED +001446r 1 EE CF .word $CFEE +001448r 1 EF CF .word $CFEF +00144Ar 1 F0 CF .word $CFF0 +00144Cr 1 F1 CF .word $CFF1 +00144Er 1 F2 CF .word $CFF2 +001450r 1 F3 CF .word $CFF3 +001452r 1 F4 CF .word $CFF4 +001454r 1 F5 CF .word $CFF5 +001456r 1 F6 CF .word $CFF6 +001458r 1 F7 CF .word $CFF7 +00145Ar 1 F8 CF .word $CFF8 +00145Cr 1 F9 CF .word $CFF9 +00145Er 1 FA CF .word $CFFA +001460r 1 FB CF .word $CFFB +001462r 1 FC CF .word $CFFC +001464r 1 FD CF .word $CFFD +001466r 1 FE CF .word $CFFE +001468r 1 FF CF .word $CFFF +00146Ar 1 00 D0 .word $D000 +00146Cr 1 01 D0 .word $D001 +00146Er 1 02 D0 .word $D002 +001470r 1 03 D0 .word $D003 +001472r 1 04 D0 .word $D004 +001474r 1 05 D0 .word $D005 +001476r 1 06 D0 .word $D006 +001478r 1 07 D0 .word $D007 +00147Ar 1 08 D0 .word $D008 +00147Cr 1 09 D0 .word $D009 +00147Er 1 0A D0 .word $D00A +001480r 1 0B D0 .word $D00B +001482r 1 0C D0 .word $D00C +001484r 1 0D D0 .word $D00D +001486r 1 0E D0 .word $D00E +001488r 1 0F D0 .word $D00F +00148Ar 1 E1 DF .word $DFE1 +00148Cr 1 E2 DF .word $DFE2 +00148Er 1 E3 DF .word $DFE3 +001490r 1 E4 DF .word $DFE4 +001492r 1 E5 DF .word $DFE5 +001494r 1 E6 DF .word $DFE6 +001496r 1 E7 DF .word $DFE7 +001498r 1 E8 DF .word $DFE8 +00149Ar 1 E9 DF .word $DFE9 +00149Cr 1 EA DF .word $DFEA +00149Er 1 EB DF .word $DFEB +0014A0r 1 EC DF .word $DFEC +0014A2r 1 ED DF .word $DFED +0014A4r 1 EE DF .word $DFEE +0014A6r 1 EF DF .word $DFEF +0014A8r 1 F0 DF .word $DFF0 +0014AAr 1 F1 DF .word $DFF1 +0014ACr 1 F2 DF .word $DFF2 +0014AEr 1 F3 DF .word $DFF3 +0014B0r 1 F4 DF .word $DFF4 +0014B2r 1 F5 DF .word $DFF5 +0014B4r 1 F6 DF .word $DFF6 +0014B6r 1 F7 DF .word $DFF7 +0014B8r 1 F8 DF .word $DFF8 +0014BAr 1 F9 DF .word $DFF9 +0014BCr 1 FA DF .word $DFFA +0014BEr 1 FB DF .word $DFFB +0014C0r 1 FC DF .word $DFFC +0014C2r 1 FD DF .word $DFFD +0014C4r 1 FE DF .word $DFFE +0014C6r 1 FF DF .word $DFFF +0014C8r 1 00 E0 .word $E000 +0014CAr 1 01 E0 .word $E001 +0014CCr 1 02 E0 .word $E002 +0014CEr 1 03 E0 .word $E003 +0014D0r 1 04 E0 .word $E004 +0014D2r 1 05 E0 .word $E005 +0014D4r 1 06 E0 .word $E006 +0014D6r 1 07 E0 .word $E007 +0014D8r 1 08 E0 .word $E008 +0014DAr 1 09 E0 .word $E009 +0014DCr 1 0A E0 .word $E00A +0014DEr 1 0B E0 .word $E00B +0014E0r 1 0C E0 .word $E00C +0014E2r 1 0D E0 .word $E00D +0014E4r 1 0E E0 .word $E00E +0014E6r 1 0F E0 .word $E00F +0014E8r 1 E1 EF .word $EFE1 +0014EAr 1 E2 EF .word $EFE2 +0014ECr 1 E3 EF .word $EFE3 +0014EEr 1 E4 EF .word $EFE4 +0014F0r 1 E5 EF .word $EFE5 +0014F2r 1 E6 EF .word $EFE6 +0014F4r 1 E7 EF .word $EFE7 +0014F6r 1 E8 EF .word $EFE8 +0014F8r 1 E9 EF .word $EFE9 +0014FAr 1 EA EF .word $EFEA +0014FCr 1 EB EF .word $EFEB +0014FEr 1 EC EF .word $EFEC +001500r 1 ED EF .word $EFED +001502r 1 EE EF .word $EFEE +001504r 1 EF EF .word $EFEF +001506r 1 F0 EF .word $EFF0 +001508r 1 F1 EF .word $EFF1 +00150Ar 1 F2 EF .word $EFF2 +00150Cr 1 F3 EF .word $EFF3 +00150Er 1 F4 EF .word $EFF4 +001510r 1 F5 EF .word $EFF5 +001512r 1 F6 EF .word $EFF6 +001514r 1 F7 EF .word $EFF7 +001516r 1 F8 EF .word $EFF8 +001518r 1 F9 EF .word $EFF9 +00151Ar 1 FA EF .word $EFFA +00151Cr 1 FB EF .word $EFFB +00151Er 1 FC EF .word $EFFC +001520r 1 FD EF .word $EFFD +001522r 1 FE EF .word $EFFE +001524r 1 FF EF .word $EFFF +001526r 1 00 F0 .word $F000 +001528r 1 01 F0 .word $F001 +00152Ar 1 02 F0 .word $F002 +00152Cr 1 03 F0 .word $F003 +00152Er 1 04 F0 .word $F004 +001530r 1 05 F0 .word $F005 +001532r 1 06 F0 .word $F006 +001534r 1 07 F0 .word $F007 +001536r 1 08 F0 .word $F008 +001538r 1 09 F0 .word $F009 +00153Ar 1 0A F0 .word $F00A +00153Cr 1 0B F0 .word $F00B +00153Er 1 0C F0 .word $F00C +001540r 1 0D F0 .word $F00D +001542r 1 0E F0 .word $F00E +001544r 1 0F F0 .word $F00F +001546r 1 E1 FF .word $FFE1 +001548r 1 E2 FF .word $FFE2 +00154Ar 1 E3 FF .word $FFE3 +00154Cr 1 E4 FF .word $FFE4 +00154Er 1 E5 FF .word $FFE5 +001550r 1 E6 FF .word $FFE6 +001552r 1 E7 FF .word $FFE7 +001554r 1 E8 FF .word $FFE8 +001556r 1 E9 FF .word $FFE9 +001558r 1 EA FF .word $FFEA +00155Ar 1 EB FF .word $FFEB +00155Cr 1 EC FF .word $FFEC +00155Er 1 ED FF .word $FFED +001560r 1 EE FF .word $FFEE +001562r 1 EF FF .word $FFEF +001564r 1 F0 FF .word $FFF0 +001566r 1 F1 FF .word $FFF1 +001568r 1 F2 FF .word $FFF2 +00156Ar 1 F3 FF .word $FFF3 +00156Cr 1 F4 FF .word $FFF4 +00156Er 1 F5 FF .word $FFF5 +001570r 1 F6 FF .word $FFF6 +001572r 1 F7 FF .word $FFF7 +001574r 1 F8 FF .word $FFF8 +001576r 1 F9 FF .word $FFF9 +001578r 1 FA FF .word $FFFA +00157Ar 1 FB FF .word $FFFB +00157Cr 1 FC FF .word $FFFC +00157Er 1 FD FF .word $FFFD +001580r 1 FE FF .word $FFFE +001582r 1 FF FF .word $FFFF 001584r 1 -001584r 1 ; alternative hex values -001584r 1 00 00 .word 0h -001586r 1 01 00 .word 1h -001588r 1 02 00 .word 2h -00158Ar 1 03 00 .word 3h -00158Cr 1 04 00 .word 4h -00158Er 1 05 00 .word 5h -001590r 1 06 00 .word 6h -001592r 1 07 00 .word 7h -001594r 1 08 00 .word 8h -001596r 1 09 00 .word 9h -001598r 1 0A 00 .word 0ah -00159Ar 1 0B 00 .word 0bh -00159Cr 1 0C 00 .word 0ch -00159Er 1 0D 00 .word 0dh -0015A0r 1 0E 00 .word 0eh -0015A2r 1 0F 00 .word 0fh -0015A4r 1 10 00 .word 10h -0015A6r 1 11 00 .word 11h -0015A8r 1 12 00 .word 12h -0015AAr 1 13 00 .word 13h -0015ACr 1 70 00 .word 70h -0015AEr 1 71 00 .word 71h -0015B0r 1 72 00 .word 72h -0015B2r 1 73 00 .word 73h -0015B4r 1 74 00 .word 74h -0015B6r 1 75 00 .word 75h -0015B8r 1 76 00 .word 76h -0015BAr 1 77 00 .word 77h -0015BCr 1 78 00 .word 78h -0015BEr 1 79 00 .word 79h -0015C0r 1 7A 00 .word 7ah -0015C2r 1 7B 00 .word 7bh -0015C4r 1 7C 00 .word 7ch -0015C6r 1 7D 00 .word 7dh -0015C8r 1 7E 00 .word 7eh -0015CAr 1 7F 00 .word 7fh -0015CCr 1 80 00 .word 80h -0015CEr 1 81 00 .word 81h -0015D0r 1 82 00 .word 82h -0015D2r 1 83 00 .word 83h -0015D4r 1 84 00 .word 84h -0015D6r 1 85 00 .word 85h -0015D8r 1 86 00 .word 86h -0015DAr 1 F0 00 .word 0f0h -0015DCr 1 F1 00 .word 0f1h -0015DEr 1 F2 00 .word 0f2h -0015E0r 1 F3 00 .word 0f3h -0015E2r 1 F4 00 .word 0f4h -0015E4r 1 F5 00 .word 0f5h -0015E6r 1 F6 00 .word 0f6h -0015E8r 1 F7 00 .word 0f7h -0015EAr 1 F8 00 .word 0f8h -0015ECr 1 F9 00 .word 0f9h -0015EEr 1 FA 00 .word 0fah -0015F0r 1 FB 00 .word 0fbh -0015F2r 1 FC 00 .word 0fch -0015F4r 1 FD 00 .word 0fdh -0015F6r 1 FE 00 .word 0feh -0015F8r 1 FF 00 .word 0ffh -0015FAr 1 00 01 .word 100h -0015FCr 1 01 01 .word 101h -0015FEr 1 02 01 .word 102h -001600r 1 03 01 .word 103h -001602r 1 D2 0F .word 0fd2h -001604r 1 D3 0F .word 0fd3h -001606r 1 D4 0F .word 0fd4h -001608r 1 D5 0F .word 0fd5h -00160Ar 1 D6 0F .word 0fd6h -00160Cr 1 D7 0F .word 0fd7h -00160Er 1 D8 0F .word 0fd8h -001610r 1 D9 0F .word 0fd9h -001612r 1 DA 0F .word 0fdah -001614r 1 DB 0F .word 0fdbh -001616r 1 DC 0F .word 0fdch -001618r 1 DD 0F .word 0fddh -00161Ar 1 DE 0F .word 0fdeh -00161Cr 1 DF 0F .word 0fdfh -00161Er 1 E0 0F .word 0fe0h -001620r 1 E1 0F .word 0fe1h -001622r 1 E2 0F .word 0fe2h -001624r 1 E3 0F .word 0fe3h -001626r 1 E4 0F .word 0fe4h -001628r 1 E5 0F .word 0fe5h -00162Ar 1 E6 0F .word 0fe6h -00162Cr 1 E7 0F .word 0fe7h -00162Er 1 E8 0F .word 0fe8h -001630r 1 E9 0F .word 0fe9h -001632r 1 EA 0F .word 0feah -001634r 1 EB 0F .word 0febh -001636r 1 EC 0F .word 0fech -001638r 1 ED 0F .word 0fedh -00163Ar 1 EE 0F .word 0feeh -00163Cr 1 EF 0F .word 0fefh -00163Er 1 F0 0F .word 0ff0h -001640r 1 F1 0F .word 0ff1h -001642r 1 F2 0F .word 0ff2h -001644r 1 F3 0F .word 0ff3h -001646r 1 F4 0F .word 0ff4h -001648r 1 F5 0F .word 0ff5h -00164Ar 1 F6 0F .word 0ff6h -00164Cr 1 F7 0F .word 0ff7h -00164Er 1 F8 0F .word 0ff8h -001650r 1 F9 0F .word 0ff9h -001652r 1 FA 0F .word 0ffah -001654r 1 FB 0F .word 0ffbh -001656r 1 FC 0F .word 0ffch -001658r 1 FD 0F .word 0ffdh -00165Ar 1 FE 0F .word 0ffeh -00165Cr 1 FF 0F .word 0fffh -00165Er 1 00 10 .word 1000h -001660r 1 01 10 .word 1001h -001662r 1 02 10 .word 1002h -001664r 1 03 10 .word 1003h -001666r 1 04 10 .word 1004h -001668r 1 05 10 .word 1005h -00166Ar 1 06 10 .word 1006h -00166Cr 1 07 10 .word 1007h -00166Er 1 08 10 .word 1008h -001670r 1 F0 7F .word 7ff0h -001672r 1 F1 7F .word 7ff1h -001674r 1 F2 7F .word 7ff2h -001676r 1 F3 7F .word 7ff3h -001678r 1 F4 7F .word 7ff4h -00167Ar 1 F5 7F .word 7ff5h -00167Cr 1 F6 7F .word 7ff6h -00167Er 1 F7 7F .word 7ff7h -001680r 1 F8 7F .word 7ff8h -001682r 1 F9 7F .word 7ff9h -001684r 1 FA 7F .word 7ffah -001686r 1 FB 7F .word 7ffbh -001688r 1 FC 7F .word 7ffch -00168Ar 1 FD 7F .word 7ffdh -00168Cr 1 FE 7F .word 7ffeh -00168Er 1 FF 7F .word 7fffh -001690r 1 00 80 .word 8000h -001692r 1 01 80 .word 8001h -001694r 1 02 80 .word 8002h -001696r 1 03 80 .word 8003h -001698r 1 04 80 .word 8004h -00169Ar 1 05 80 .word 8005h -00169Cr 1 06 80 .word 8006h -00169Er 1 07 80 .word 8007h -0016A0r 1 08 80 .word 8008h -0016A2r 1 09 80 .word 8009h -0016A4r 1 0A 80 .word 800ah -0016A6r 1 0B 80 .word 800bh -0016A8r 1 E1 9F .word 9fe1h -0016AAr 1 E2 9F .word 9fe2h -0016ACr 1 E3 9F .word 9fe3h -0016AEr 1 E4 9F .word 9fe4h -0016B0r 1 E5 9F .word 9fe5h -0016B2r 1 E6 9F .word 9fe6h -0016B4r 1 E7 9F .word 9fe7h -0016B6r 1 E8 9F .word 9fe8h -0016B8r 1 E9 9F .word 9fe9h -0016BAr 1 EA 9F .word 9feah -0016BCr 1 EB 9F .word 9febh -0016BEr 1 EC 9F .word 9fech -0016C0r 1 ED 9F .word 9fedh -0016C2r 1 EE 9F .word 9feeh -0016C4r 1 EF 9F .word 9fefh -0016C6r 1 F0 9F .word 9ff0h -0016C8r 1 F1 9F .word 9ff1h -0016CAr 1 F2 9F .word 9ff2h -0016CCr 1 F3 9F .word 9ff3h -0016CEr 1 F4 9F .word 9ff4h -0016D0r 1 F5 9F .word 9ff5h -0016D2r 1 F6 9F .word 9ff6h -0016D4r 1 F7 9F .word 9ff7h -0016D6r 1 F8 9F .word 9ff8h -0016D8r 1 F9 9F .word 9ff9h -0016DAr 1 FA 9F .word 9ffah -0016DCr 1 FB 9F .word 9ffbh -0016DEr 1 FC 9F .word 9ffch -0016E0r 1 FD 9F .word 9ffdh -0016E2r 1 FE 9F .word 9ffeh -0016E4r 1 FF 9F .word 9fffh -0016E6r 1 00 A0 .word 0a000h -0016E8r 1 01 A0 .word 0a001h -0016EAr 1 02 A0 .word 0a002h -0016ECr 1 03 A0 .word 0a003h -0016EEr 1 04 A0 .word 0a004h -0016F0r 1 05 A0 .word 0a005h -0016F2r 1 06 A0 .word 0a006h -0016F4r 1 07 A0 .word 0a007h -0016F6r 1 08 A0 .word 0a008h -0016F8r 1 09 A0 .word 0a009h -0016FAr 1 0A A0 .word 0a00ah -0016FCr 1 0B A0 .word 0a00bh -0016FEr 1 0C A0 .word 0a00ch -001700r 1 0D A0 .word 0a00dh -001702r 1 0E A0 .word 0a00eh -001704r 1 0F A0 .word 0a00fh -001706r 1 E1 AF .word 0afe1h -001708r 1 E2 AF .word 0afe2h -00170Ar 1 E3 AF .word 0afe3h -00170Cr 1 E4 AF .word 0afe4h -00170Er 1 E5 AF .word 0afe5h -001710r 1 E6 AF .word 0afe6h -001712r 1 E7 AF .word 0afe7h -001714r 1 E8 AF .word 0afe8h -001716r 1 E9 AF .word 0afe9h -001718r 1 EA AF .word 0afeah -00171Ar 1 EB AF .word 0afebh -00171Cr 1 EC AF .word 0afech -00171Er 1 ED AF .word 0afedh -001720r 1 EE AF .word 0afeeh -001722r 1 EF AF .word 0afefh -001724r 1 F0 AF .word 0aff0h -001726r 1 F1 AF .word 0aff1h -001728r 1 F2 AF .word 0aff2h -00172Ar 1 F3 AF .word 0aff3h -00172Cr 1 F4 AF .word 0aff4h -00172Er 1 F5 AF .word 0aff5h -001730r 1 F6 AF .word 0aff6h -001732r 1 F7 AF .word 0aff7h -001734r 1 F8 AF .word 0aff8h -001736r 1 F9 AF .word 0aff9h -001738r 1 FA AF .word 0affah -00173Ar 1 FB AF .word 0affbh -00173Cr 1 FC AF .word 0affch -00173Er 1 FD AF .word 0affdh -001740r 1 FE AF .word 0affeh -001742r 1 FF AF .word 0afffh -001744r 1 00 B0 .word 0b000h -001746r 1 01 B0 .word 0b001h -001748r 1 02 B0 .word 0b002h -00174Ar 1 03 B0 .word 0b003h -00174Cr 1 04 B0 .word 0b004h -00174Er 1 05 B0 .word 0b005h -001750r 1 06 B0 .word 0b006h -001752r 1 07 B0 .word 0b007h -001754r 1 08 B0 .word 0b008h -001756r 1 09 B0 .word 0b009h -001758r 1 0A B0 .word 0b00ah -00175Ar 1 0B B0 .word 0b00bh -00175Cr 1 0C B0 .word 0b00ch -00175Er 1 0D B0 .word 0b00dh -001760r 1 0E B0 .word 0b00eh -001762r 1 0F B0 .word 0b00fh -001764r 1 E1 BF .word 0bfe1h -001766r 1 E2 BF .word 0bfe2h -001768r 1 E3 BF .word 0bfe3h -00176Ar 1 E4 BF .word 0bfe4h -00176Cr 1 E5 BF .word 0bfe5h -00176Er 1 E6 BF .word 0bfe6h -001770r 1 E7 BF .word 0bfe7h -001772r 1 E8 BF .word 0bfe8h -001774r 1 E9 BF .word 0bfe9h -001776r 1 EA BF .word 0bfeah -001778r 1 EB BF .word 0bfebh -00177Ar 1 EC BF .word 0bfech -00177Cr 1 ED BF .word 0bfedh -00177Er 1 EE BF .word 0bfeeh -001780r 1 EF BF .word 0bfefh -001782r 1 F0 BF .word 0bff0h -001784r 1 F1 BF .word 0bff1h -001786r 1 F2 BF .word 0bff2h -001788r 1 F3 BF .word 0bff3h -00178Ar 1 F4 BF .word 0bff4h -00178Cr 1 F5 BF .word 0bff5h -00178Er 1 F6 BF .word 0bff6h -001790r 1 F7 BF .word 0bff7h -001792r 1 F8 BF .word 0bff8h -001794r 1 F9 BF .word 0bff9h -001796r 1 FA BF .word 0bffah -001798r 1 FB BF .word 0bffbh -00179Ar 1 FC BF .word 0bffch -00179Cr 1 FD BF .word 0bffdh -00179Er 1 FE BF .word 0bffeh -0017A0r 1 FF BF .word 0bfffh -0017A2r 1 00 C0 .word 0c000h -0017A4r 1 01 C0 .word 0c001h -0017A6r 1 02 C0 .word 0c002h -0017A8r 1 03 C0 .word 0c003h -0017AAr 1 04 C0 .word 0c004h -0017ACr 1 05 C0 .word 0c005h -0017AEr 1 06 C0 .word 0c006h -0017B0r 1 07 C0 .word 0c007h -0017B2r 1 08 C0 .word 0c008h -0017B4r 1 09 C0 .word 0c009h -0017B6r 1 0A C0 .word 0c00ah -0017B8r 1 0B C0 .word 0c00bh -0017BAr 1 0C C0 .word 0c00ch -0017BCr 1 0D C0 .word 0c00dh -0017BEr 1 0E C0 .word 0c00eh -0017C0r 1 0F C0 .word 0c00fh -0017C2r 1 E1 CF .word 0cfe1h -0017C4r 1 E2 CF .word 0cfe2h -0017C6r 1 E3 CF .word 0cfe3h -0017C8r 1 E4 CF .word 0cfe4h -0017CAr 1 E5 CF .word 0cfe5h -0017CCr 1 E6 CF .word 0cfe6h -0017CEr 1 E7 CF .word 0cfe7h -0017D0r 1 E8 CF .word 0cfe8h -0017D2r 1 E9 CF .word 0cfe9h -0017D4r 1 EA CF .word 0cfeah -0017D6r 1 EB CF .word 0cfebh -0017D8r 1 EC CF .word 0cfech -0017DAr 1 ED CF .word 0cfedh -0017DCr 1 EE CF .word 0cfeeh -0017DEr 1 EF CF .word 0cfefh -0017E0r 1 F0 CF .word 0cff0h -0017E2r 1 F1 CF .word 0cff1h -0017E4r 1 F2 CF .word 0cff2h -0017E6r 1 F3 CF .word 0cff3h -0017E8r 1 F4 CF .word 0cff4h -0017EAr 1 F5 CF .word 0cff5h -0017ECr 1 F6 CF .word 0cff6h -0017EEr 1 F7 CF .word 0cff7h -0017F0r 1 F8 CF .word 0cff8h -0017F2r 1 F9 CF .word 0cff9h -0017F4r 1 FA CF .word 0cffah -0017F6r 1 FB CF .word 0cffbh -0017F8r 1 FC CF .word 0cffch -0017FAr 1 FD CF .word 0cffdh -0017FCr 1 FE CF .word 0cffeh -0017FEr 1 FF CF .word 0cfffh -001800r 1 00 D0 .word 0d000h -001802r 1 01 D0 .word 0d001h -001804r 1 02 D0 .word 0d002h -001806r 1 03 D0 .word 0d003h -001808r 1 04 D0 .word 0d004h -00180Ar 1 05 D0 .word 0d005h -00180Cr 1 06 D0 .word 0d006h -00180Er 1 07 D0 .word 0d007h -001810r 1 08 D0 .word 0d008h -001812r 1 09 D0 .word 0d009h -001814r 1 0A D0 .word 0d00ah -001816r 1 0B D0 .word 0d00bh -001818r 1 0C D0 .word 0d00ch -00181Ar 1 0D D0 .word 0d00dh -00181Cr 1 0E D0 .word 0d00eh -00181Er 1 0F D0 .word 0d00fh -001820r 1 E1 DF .word 0dfe1h -001822r 1 E2 DF .word 0dfe2h -001824r 1 E3 DF .word 0dfe3h -001826r 1 E4 DF .word 0dfe4h -001828r 1 E5 DF .word 0dfe5h -00182Ar 1 E6 DF .word 0dfe6h -00182Cr 1 E7 DF .word 0dfe7h -00182Er 1 E8 DF .word 0dfe8h -001830r 1 E9 DF .word 0dfe9h -001832r 1 EA DF .word 0dfeah -001834r 1 EB DF .word 0dfebh -001836r 1 EC DF .word 0dfech -001838r 1 ED DF .word 0dfedh -00183Ar 1 EE DF .word 0dfeeh -00183Cr 1 EF DF .word 0dfefh -00183Er 1 F0 DF .word 0dff0h -001840r 1 F1 DF .word 0dff1h -001842r 1 F2 DF .word 0dff2h -001844r 1 F3 DF .word 0dff3h -001846r 1 F4 DF .word 0dff4h -001848r 1 F5 DF .word 0dff5h -00184Ar 1 F6 DF .word 0dff6h -00184Cr 1 F7 DF .word 0dff7h -00184Er 1 F8 DF .word 0dff8h -001850r 1 F9 DF .word 0dff9h -001852r 1 FA DF .word 0dffah -001854r 1 FB DF .word 0dffbh -001856r 1 FC DF .word 0dffch -001858r 1 FD DF .word 0dffdh -00185Ar 1 FE DF .word 0dffeh -00185Cr 1 FF DF .word 0dfffh -00185Er 1 00 E0 .word 0e000h -001860r 1 01 E0 .word 0e001h -001862r 1 02 E0 .word 0e002h -001864r 1 03 E0 .word 0e003h -001866r 1 04 E0 .word 0e004h -001868r 1 05 E0 .word 0e005h -00186Ar 1 06 E0 .word 0e006h -00186Cr 1 07 E0 .word 0e007h -00186Er 1 08 E0 .word 0e008h -001870r 1 09 E0 .word 0e009h -001872r 1 0A E0 .word 0e00ah -001874r 1 0B E0 .word 0e00bh -001876r 1 0C E0 .word 0e00ch -001878r 1 0D E0 .word 0e00dh -00187Ar 1 0E E0 .word 0e00eh -00187Cr 1 0F E0 .word 0e00fh -00187Er 1 E1 EF .word 0efe1h -001880r 1 E2 EF .word 0efe2h -001882r 1 E3 EF .word 0efe3h -001884r 1 E4 EF .word 0efe4h -001886r 1 E5 EF .word 0efe5h -001888r 1 E6 EF .word 0efe6h -00188Ar 1 E7 EF .word 0efe7h -00188Cr 1 E8 EF .word 0efe8h -00188Er 1 E9 EF .word 0efe9h -001890r 1 EA EF .word 0efeah -001892r 1 EB EF .word 0efebh -001894r 1 EC EF .word 0efech -001896r 1 ED EF .word 0efedh -001898r 1 EE EF .word 0efeeh -00189Ar 1 EF EF .word 0efefh -00189Cr 1 F0 EF .word 0eff0h -00189Er 1 F1 EF .word 0eff1h -0018A0r 1 F2 EF .word 0eff2h -0018A2r 1 F3 EF .word 0eff3h -0018A4r 1 F4 EF .word 0eff4h -0018A6r 1 F5 EF .word 0eff5h -0018A8r 1 F6 EF .word 0eff6h -0018AAr 1 F7 EF .word 0eff7h -0018ACr 1 F8 EF .word 0eff8h -0018AEr 1 F9 EF .word 0eff9h -0018B0r 1 FA EF .word 0effah -0018B2r 1 FB EF .word 0effbh -0018B4r 1 FC EF .word 0effch -0018B6r 1 FD EF .word 0effdh -0018B8r 1 FE EF .word 0effeh -0018BAr 1 FF EF .word 0efffh -0018BCr 1 00 F0 .word 0f000h -0018BEr 1 01 F0 .word 0f001h -0018C0r 1 02 F0 .word 0f002h -0018C2r 1 03 F0 .word 0f003h -0018C4r 1 04 F0 .word 0f004h -0018C6r 1 05 F0 .word 0f005h -0018C8r 1 06 F0 .word 0f006h -0018CAr 1 07 F0 .word 0f007h -0018CCr 1 08 F0 .word 0f008h -0018CEr 1 09 F0 .word 0f009h -0018D0r 1 0A F0 .word 0f00ah -0018D2r 1 0B F0 .word 0f00bh -0018D4r 1 0C F0 .word 0f00ch -0018D6r 1 0D F0 .word 0f00dh -0018D8r 1 0E F0 .word 0f00eh -0018DAr 1 0F F0 .word 0f00fh -0018DCr 1 E1 FF .word 0ffe1h -0018DEr 1 E2 FF .word 0ffe2h -0018E0r 1 E3 FF .word 0ffe3h -0018E2r 1 E4 FF .word 0ffe4h -0018E4r 1 E5 FF .word 0ffe5h -0018E6r 1 E6 FF .word 0ffe6h -0018E8r 1 E7 FF .word 0ffe7h -0018EAr 1 E8 FF .word 0ffe8h -0018ECr 1 E9 FF .word 0ffe9h -0018EEr 1 EA FF .word 0ffeah -0018F0r 1 EB FF .word 0ffebh -0018F2r 1 EC FF .word 0ffech -0018F4r 1 ED FF .word 0ffedh -0018F6r 1 EE FF .word 0ffeeh -0018F8r 1 EF FF .word 0ffefh -0018FAr 1 F0 FF .word 0fff0h -0018FCr 1 F1 FF .word 0fff1h -0018FEr 1 F2 FF .word 0fff2h -001900r 1 F3 FF .word 0fff3h -001902r 1 F4 FF .word 0fff4h -001904r 1 F5 FF .word 0fff5h -001906r 1 F6 FF .word 0fff6h -001908r 1 F7 FF .word 0fff7h -00190Ar 1 F8 FF .word 0fff8h -00190Cr 1 F9 FF .word 0fff9h -00190Er 1 FA FF .word 0fffah -001910r 1 FB FF .word 0fffbh -001912r 1 FC FF .word 0fffch -001914r 1 FD FF .word 0fffdh -001916r 1 FE FF .word 0fffeh -001918r 1 FF FF .word 0ffffh +001584r 1 ; alternative hex values +001584r 1 00 00 .word 0h +001586r 1 01 00 .word 1h +001588r 1 02 00 .word 2h +00158Ar 1 03 00 .word 3h +00158Cr 1 04 00 .word 4h +00158Er 1 05 00 .word 5h +001590r 1 06 00 .word 6h +001592r 1 07 00 .word 7h +001594r 1 08 00 .word 8h +001596r 1 09 00 .word 9h +001598r 1 0A 00 .word 0ah +00159Ar 1 0B 00 .word 0bh +00159Cr 1 0C 00 .word 0ch +00159Er 1 0D 00 .word 0dh +0015A0r 1 0E 00 .word 0eh +0015A2r 1 0F 00 .word 0fh +0015A4r 1 10 00 .word 10h +0015A6r 1 11 00 .word 11h +0015A8r 1 12 00 .word 12h +0015AAr 1 13 00 .word 13h +0015ACr 1 70 00 .word 70h +0015AEr 1 71 00 .word 71h +0015B0r 1 72 00 .word 72h +0015B2r 1 73 00 .word 73h +0015B4r 1 74 00 .word 74h +0015B6r 1 75 00 .word 75h +0015B8r 1 76 00 .word 76h +0015BAr 1 77 00 .word 77h +0015BCr 1 78 00 .word 78h +0015BEr 1 79 00 .word 79h +0015C0r 1 7A 00 .word 7ah +0015C2r 1 7B 00 .word 7bh +0015C4r 1 7C 00 .word 7ch +0015C6r 1 7D 00 .word 7dh +0015C8r 1 7E 00 .word 7eh +0015CAr 1 7F 00 .word 7fh +0015CCr 1 80 00 .word 80h +0015CEr 1 81 00 .word 81h +0015D0r 1 82 00 .word 82h +0015D2r 1 83 00 .word 83h +0015D4r 1 84 00 .word 84h +0015D6r 1 85 00 .word 85h +0015D8r 1 86 00 .word 86h +0015DAr 1 F0 00 .word 0f0h +0015DCr 1 F1 00 .word 0f1h +0015DEr 1 F2 00 .word 0f2h +0015E0r 1 F3 00 .word 0f3h +0015E2r 1 F4 00 .word 0f4h +0015E4r 1 F5 00 .word 0f5h +0015E6r 1 F6 00 .word 0f6h +0015E8r 1 F7 00 .word 0f7h +0015EAr 1 F8 00 .word 0f8h +0015ECr 1 F9 00 .word 0f9h +0015EEr 1 FA 00 .word 0fah +0015F0r 1 FB 00 .word 0fbh +0015F2r 1 FC 00 .word 0fch +0015F4r 1 FD 00 .word 0fdh +0015F6r 1 FE 00 .word 0feh +0015F8r 1 FF 00 .word 0ffh +0015FAr 1 00 01 .word 100h +0015FCr 1 01 01 .word 101h +0015FEr 1 02 01 .word 102h +001600r 1 03 01 .word 103h +001602r 1 D2 0F .word 0fd2h +001604r 1 D3 0F .word 0fd3h +001606r 1 D4 0F .word 0fd4h +001608r 1 D5 0F .word 0fd5h +00160Ar 1 D6 0F .word 0fd6h +00160Cr 1 D7 0F .word 0fd7h +00160Er 1 D8 0F .word 0fd8h +001610r 1 D9 0F .word 0fd9h +001612r 1 DA 0F .word 0fdah +001614r 1 DB 0F .word 0fdbh +001616r 1 DC 0F .word 0fdch +001618r 1 DD 0F .word 0fddh +00161Ar 1 DE 0F .word 0fdeh +00161Cr 1 DF 0F .word 0fdfh +00161Er 1 E0 0F .word 0fe0h +001620r 1 E1 0F .word 0fe1h +001622r 1 E2 0F .word 0fe2h +001624r 1 E3 0F .word 0fe3h +001626r 1 E4 0F .word 0fe4h +001628r 1 E5 0F .word 0fe5h +00162Ar 1 E6 0F .word 0fe6h +00162Cr 1 E7 0F .word 0fe7h +00162Er 1 E8 0F .word 0fe8h +001630r 1 E9 0F .word 0fe9h +001632r 1 EA 0F .word 0feah +001634r 1 EB 0F .word 0febh +001636r 1 EC 0F .word 0fech +001638r 1 ED 0F .word 0fedh +00163Ar 1 EE 0F .word 0feeh +00163Cr 1 EF 0F .word 0fefh +00163Er 1 F0 0F .word 0ff0h +001640r 1 F1 0F .word 0ff1h +001642r 1 F2 0F .word 0ff2h +001644r 1 F3 0F .word 0ff3h +001646r 1 F4 0F .word 0ff4h +001648r 1 F5 0F .word 0ff5h +00164Ar 1 F6 0F .word 0ff6h +00164Cr 1 F7 0F .word 0ff7h +00164Er 1 F8 0F .word 0ff8h +001650r 1 F9 0F .word 0ff9h +001652r 1 FA 0F .word 0ffah +001654r 1 FB 0F .word 0ffbh +001656r 1 FC 0F .word 0ffch +001658r 1 FD 0F .word 0ffdh +00165Ar 1 FE 0F .word 0ffeh +00165Cr 1 FF 0F .word 0fffh +00165Er 1 00 10 .word 1000h +001660r 1 01 10 .word 1001h +001662r 1 02 10 .word 1002h +001664r 1 03 10 .word 1003h +001666r 1 04 10 .word 1004h +001668r 1 05 10 .word 1005h +00166Ar 1 06 10 .word 1006h +00166Cr 1 07 10 .word 1007h +00166Er 1 08 10 .word 1008h +001670r 1 F0 7F .word 7ff0h +001672r 1 F1 7F .word 7ff1h +001674r 1 F2 7F .word 7ff2h +001676r 1 F3 7F .word 7ff3h +001678r 1 F4 7F .word 7ff4h +00167Ar 1 F5 7F .word 7ff5h +00167Cr 1 F6 7F .word 7ff6h +00167Er 1 F7 7F .word 7ff7h +001680r 1 F8 7F .word 7ff8h +001682r 1 F9 7F .word 7ff9h +001684r 1 FA 7F .word 7ffah +001686r 1 FB 7F .word 7ffbh +001688r 1 FC 7F .word 7ffch +00168Ar 1 FD 7F .word 7ffdh +00168Cr 1 FE 7F .word 7ffeh +00168Er 1 FF 7F .word 7fffh +001690r 1 00 80 .word 8000h +001692r 1 01 80 .word 8001h +001694r 1 02 80 .word 8002h +001696r 1 03 80 .word 8003h +001698r 1 04 80 .word 8004h +00169Ar 1 05 80 .word 8005h +00169Cr 1 06 80 .word 8006h +00169Er 1 07 80 .word 8007h +0016A0r 1 08 80 .word 8008h +0016A2r 1 09 80 .word 8009h +0016A4r 1 0A 80 .word 800ah +0016A6r 1 0B 80 .word 800bh +0016A8r 1 E1 9F .word 9fe1h +0016AAr 1 E2 9F .word 9fe2h +0016ACr 1 E3 9F .word 9fe3h +0016AEr 1 E4 9F .word 9fe4h +0016B0r 1 E5 9F .word 9fe5h +0016B2r 1 E6 9F .word 9fe6h +0016B4r 1 E7 9F .word 9fe7h +0016B6r 1 E8 9F .word 9fe8h +0016B8r 1 E9 9F .word 9fe9h +0016BAr 1 EA 9F .word 9feah +0016BCr 1 EB 9F .word 9febh +0016BEr 1 EC 9F .word 9fech +0016C0r 1 ED 9F .word 9fedh +0016C2r 1 EE 9F .word 9feeh +0016C4r 1 EF 9F .word 9fefh +0016C6r 1 F0 9F .word 9ff0h +0016C8r 1 F1 9F .word 9ff1h +0016CAr 1 F2 9F .word 9ff2h +0016CCr 1 F3 9F .word 9ff3h +0016CEr 1 F4 9F .word 9ff4h +0016D0r 1 F5 9F .word 9ff5h +0016D2r 1 F6 9F .word 9ff6h +0016D4r 1 F7 9F .word 9ff7h +0016D6r 1 F8 9F .word 9ff8h +0016D8r 1 F9 9F .word 9ff9h +0016DAr 1 FA 9F .word 9ffah +0016DCr 1 FB 9F .word 9ffbh +0016DEr 1 FC 9F .word 9ffch +0016E0r 1 FD 9F .word 9ffdh +0016E2r 1 FE 9F .word 9ffeh +0016E4r 1 FF 9F .word 9fffh +0016E6r 1 00 A0 .word 0a000h +0016E8r 1 01 A0 .word 0a001h +0016EAr 1 02 A0 .word 0a002h +0016ECr 1 03 A0 .word 0a003h +0016EEr 1 04 A0 .word 0a004h +0016F0r 1 05 A0 .word 0a005h +0016F2r 1 06 A0 .word 0a006h +0016F4r 1 07 A0 .word 0a007h +0016F6r 1 08 A0 .word 0a008h +0016F8r 1 09 A0 .word 0a009h +0016FAr 1 0A A0 .word 0a00ah +0016FCr 1 0B A0 .word 0a00bh +0016FEr 1 0C A0 .word 0a00ch +001700r 1 0D A0 .word 0a00dh +001702r 1 0E A0 .word 0a00eh +001704r 1 0F A0 .word 0a00fh +001706r 1 E1 AF .word 0afe1h +001708r 1 E2 AF .word 0afe2h +00170Ar 1 E3 AF .word 0afe3h +00170Cr 1 E4 AF .word 0afe4h +00170Er 1 E5 AF .word 0afe5h +001710r 1 E6 AF .word 0afe6h +001712r 1 E7 AF .word 0afe7h +001714r 1 E8 AF .word 0afe8h +001716r 1 E9 AF .word 0afe9h +001718r 1 EA AF .word 0afeah +00171Ar 1 EB AF .word 0afebh +00171Cr 1 EC AF .word 0afech +00171Er 1 ED AF .word 0afedh +001720r 1 EE AF .word 0afeeh +001722r 1 EF AF .word 0afefh +001724r 1 F0 AF .word 0aff0h +001726r 1 F1 AF .word 0aff1h +001728r 1 F2 AF .word 0aff2h +00172Ar 1 F3 AF .word 0aff3h +00172Cr 1 F4 AF .word 0aff4h +00172Er 1 F5 AF .word 0aff5h +001730r 1 F6 AF .word 0aff6h +001732r 1 F7 AF .word 0aff7h +001734r 1 F8 AF .word 0aff8h +001736r 1 F9 AF .word 0aff9h +001738r 1 FA AF .word 0affah +00173Ar 1 FB AF .word 0affbh +00173Cr 1 FC AF .word 0affch +00173Er 1 FD AF .word 0affdh +001740r 1 FE AF .word 0affeh +001742r 1 FF AF .word 0afffh +001744r 1 00 B0 .word 0b000h +001746r 1 01 B0 .word 0b001h +001748r 1 02 B0 .word 0b002h +00174Ar 1 03 B0 .word 0b003h +00174Cr 1 04 B0 .word 0b004h +00174Er 1 05 B0 .word 0b005h +001750r 1 06 B0 .word 0b006h +001752r 1 07 B0 .word 0b007h +001754r 1 08 B0 .word 0b008h +001756r 1 09 B0 .word 0b009h +001758r 1 0A B0 .word 0b00ah +00175Ar 1 0B B0 .word 0b00bh +00175Cr 1 0C B0 .word 0b00ch +00175Er 1 0D B0 .word 0b00dh +001760r 1 0E B0 .word 0b00eh +001762r 1 0F B0 .word 0b00fh +001764r 1 E1 BF .word 0bfe1h +001766r 1 E2 BF .word 0bfe2h +001768r 1 E3 BF .word 0bfe3h +00176Ar 1 E4 BF .word 0bfe4h +00176Cr 1 E5 BF .word 0bfe5h +00176Er 1 E6 BF .word 0bfe6h +001770r 1 E7 BF .word 0bfe7h +001772r 1 E8 BF .word 0bfe8h +001774r 1 E9 BF .word 0bfe9h +001776r 1 EA BF .word 0bfeah +001778r 1 EB BF .word 0bfebh +00177Ar 1 EC BF .word 0bfech +00177Cr 1 ED BF .word 0bfedh +00177Er 1 EE BF .word 0bfeeh +001780r 1 EF BF .word 0bfefh +001782r 1 F0 BF .word 0bff0h +001784r 1 F1 BF .word 0bff1h +001786r 1 F2 BF .word 0bff2h +001788r 1 F3 BF .word 0bff3h +00178Ar 1 F4 BF .word 0bff4h +00178Cr 1 F5 BF .word 0bff5h +00178Er 1 F6 BF .word 0bff6h +001790r 1 F7 BF .word 0bff7h +001792r 1 F8 BF .word 0bff8h +001794r 1 F9 BF .word 0bff9h +001796r 1 FA BF .word 0bffah +001798r 1 FB BF .word 0bffbh +00179Ar 1 FC BF .word 0bffch +00179Cr 1 FD BF .word 0bffdh +00179Er 1 FE BF .word 0bffeh +0017A0r 1 FF BF .word 0bfffh +0017A2r 1 00 C0 .word 0c000h +0017A4r 1 01 C0 .word 0c001h +0017A6r 1 02 C0 .word 0c002h +0017A8r 1 03 C0 .word 0c003h +0017AAr 1 04 C0 .word 0c004h +0017ACr 1 05 C0 .word 0c005h +0017AEr 1 06 C0 .word 0c006h +0017B0r 1 07 C0 .word 0c007h +0017B2r 1 08 C0 .word 0c008h +0017B4r 1 09 C0 .word 0c009h +0017B6r 1 0A C0 .word 0c00ah +0017B8r 1 0B C0 .word 0c00bh +0017BAr 1 0C C0 .word 0c00ch +0017BCr 1 0D C0 .word 0c00dh +0017BEr 1 0E C0 .word 0c00eh +0017C0r 1 0F C0 .word 0c00fh +0017C2r 1 E1 CF .word 0cfe1h +0017C4r 1 E2 CF .word 0cfe2h +0017C6r 1 E3 CF .word 0cfe3h +0017C8r 1 E4 CF .word 0cfe4h +0017CAr 1 E5 CF .word 0cfe5h +0017CCr 1 E6 CF .word 0cfe6h +0017CEr 1 E7 CF .word 0cfe7h +0017D0r 1 E8 CF .word 0cfe8h +0017D2r 1 E9 CF .word 0cfe9h +0017D4r 1 EA CF .word 0cfeah +0017D6r 1 EB CF .word 0cfebh +0017D8r 1 EC CF .word 0cfech +0017DAr 1 ED CF .word 0cfedh +0017DCr 1 EE CF .word 0cfeeh +0017DEr 1 EF CF .word 0cfefh +0017E0r 1 F0 CF .word 0cff0h +0017E2r 1 F1 CF .word 0cff1h +0017E4r 1 F2 CF .word 0cff2h +0017E6r 1 F3 CF .word 0cff3h +0017E8r 1 F4 CF .word 0cff4h +0017EAr 1 F5 CF .word 0cff5h +0017ECr 1 F6 CF .word 0cff6h +0017EEr 1 F7 CF .word 0cff7h +0017F0r 1 F8 CF .word 0cff8h +0017F2r 1 F9 CF .word 0cff9h +0017F4r 1 FA CF .word 0cffah +0017F6r 1 FB CF .word 0cffbh +0017F8r 1 FC CF .word 0cffch +0017FAr 1 FD CF .word 0cffdh +0017FCr 1 FE CF .word 0cffeh +0017FEr 1 FF CF .word 0cfffh +001800r 1 00 D0 .word 0d000h +001802r 1 01 D0 .word 0d001h +001804r 1 02 D0 .word 0d002h +001806r 1 03 D0 .word 0d003h +001808r 1 04 D0 .word 0d004h +00180Ar 1 05 D0 .word 0d005h +00180Cr 1 06 D0 .word 0d006h +00180Er 1 07 D0 .word 0d007h +001810r 1 08 D0 .word 0d008h +001812r 1 09 D0 .word 0d009h +001814r 1 0A D0 .word 0d00ah +001816r 1 0B D0 .word 0d00bh +001818r 1 0C D0 .word 0d00ch +00181Ar 1 0D D0 .word 0d00dh +00181Cr 1 0E D0 .word 0d00eh +00181Er 1 0F D0 .word 0d00fh +001820r 1 E1 DF .word 0dfe1h +001822r 1 E2 DF .word 0dfe2h +001824r 1 E3 DF .word 0dfe3h +001826r 1 E4 DF .word 0dfe4h +001828r 1 E5 DF .word 0dfe5h +00182Ar 1 E6 DF .word 0dfe6h +00182Cr 1 E7 DF .word 0dfe7h +00182Er 1 E8 DF .word 0dfe8h +001830r 1 E9 DF .word 0dfe9h +001832r 1 EA DF .word 0dfeah +001834r 1 EB DF .word 0dfebh +001836r 1 EC DF .word 0dfech +001838r 1 ED DF .word 0dfedh +00183Ar 1 EE DF .word 0dfeeh +00183Cr 1 EF DF .word 0dfefh +00183Er 1 F0 DF .word 0dff0h +001840r 1 F1 DF .word 0dff1h +001842r 1 F2 DF .word 0dff2h +001844r 1 F3 DF .word 0dff3h +001846r 1 F4 DF .word 0dff4h +001848r 1 F5 DF .word 0dff5h +00184Ar 1 F6 DF .word 0dff6h +00184Cr 1 F7 DF .word 0dff7h +00184Er 1 F8 DF .word 0dff8h +001850r 1 F9 DF .word 0dff9h +001852r 1 FA DF .word 0dffah +001854r 1 FB DF .word 0dffbh +001856r 1 FC DF .word 0dffch +001858r 1 FD DF .word 0dffdh +00185Ar 1 FE DF .word 0dffeh +00185Cr 1 FF DF .word 0dfffh +00185Er 1 00 E0 .word 0e000h +001860r 1 01 E0 .word 0e001h +001862r 1 02 E0 .word 0e002h +001864r 1 03 E0 .word 0e003h +001866r 1 04 E0 .word 0e004h +001868r 1 05 E0 .word 0e005h +00186Ar 1 06 E0 .word 0e006h +00186Cr 1 07 E0 .word 0e007h +00186Er 1 08 E0 .word 0e008h +001870r 1 09 E0 .word 0e009h +001872r 1 0A E0 .word 0e00ah +001874r 1 0B E0 .word 0e00bh +001876r 1 0C E0 .word 0e00ch +001878r 1 0D E0 .word 0e00dh +00187Ar 1 0E E0 .word 0e00eh +00187Cr 1 0F E0 .word 0e00fh +00187Er 1 E1 EF .word 0efe1h +001880r 1 E2 EF .word 0efe2h +001882r 1 E3 EF .word 0efe3h +001884r 1 E4 EF .word 0efe4h +001886r 1 E5 EF .word 0efe5h +001888r 1 E6 EF .word 0efe6h +00188Ar 1 E7 EF .word 0efe7h +00188Cr 1 E8 EF .word 0efe8h +00188Er 1 E9 EF .word 0efe9h +001890r 1 EA EF .word 0efeah +001892r 1 EB EF .word 0efebh +001894r 1 EC EF .word 0efech +001896r 1 ED EF .word 0efedh +001898r 1 EE EF .word 0efeeh +00189Ar 1 EF EF .word 0efefh +00189Cr 1 F0 EF .word 0eff0h +00189Er 1 F1 EF .word 0eff1h +0018A0r 1 F2 EF .word 0eff2h +0018A2r 1 F3 EF .word 0eff3h +0018A4r 1 F4 EF .word 0eff4h +0018A6r 1 F5 EF .word 0eff5h +0018A8r 1 F6 EF .word 0eff6h +0018AAr 1 F7 EF .word 0eff7h +0018ACr 1 F8 EF .word 0eff8h +0018AEr 1 F9 EF .word 0eff9h +0018B0r 1 FA EF .word 0effah +0018B2r 1 FB EF .word 0effbh +0018B4r 1 FC EF .word 0effch +0018B6r 1 FD EF .word 0effdh +0018B8r 1 FE EF .word 0effeh +0018BAr 1 FF EF .word 0efffh +0018BCr 1 00 F0 .word 0f000h +0018BEr 1 01 F0 .word 0f001h +0018C0r 1 02 F0 .word 0f002h +0018C2r 1 03 F0 .word 0f003h +0018C4r 1 04 F0 .word 0f004h +0018C6r 1 05 F0 .word 0f005h +0018C8r 1 06 F0 .word 0f006h +0018CAr 1 07 F0 .word 0f007h +0018CCr 1 08 F0 .word 0f008h +0018CEr 1 09 F0 .word 0f009h +0018D0r 1 0A F0 .word 0f00ah +0018D2r 1 0B F0 .word 0f00bh +0018D4r 1 0C F0 .word 0f00ch +0018D6r 1 0D F0 .word 0f00dh +0018D8r 1 0E F0 .word 0f00eh +0018DAr 1 0F F0 .word 0f00fh +0018DCr 1 E1 FF .word 0ffe1h +0018DEr 1 E2 FF .word 0ffe2h +0018E0r 1 E3 FF .word 0ffe3h +0018E2r 1 E4 FF .word 0ffe4h +0018E4r 1 E5 FF .word 0ffe5h +0018E6r 1 E6 FF .word 0ffe6h +0018E8r 1 E7 FF .word 0ffe7h +0018EAr 1 E8 FF .word 0ffe8h +0018ECr 1 E9 FF .word 0ffe9h +0018EEr 1 EA FF .word 0ffeah +0018F0r 1 EB FF .word 0ffebh +0018F2r 1 EC FF .word 0ffech +0018F4r 1 ED FF .word 0ffedh +0018F6r 1 EE FF .word 0ffeeh +0018F8r 1 EF FF .word 0ffefh +0018FAr 1 F0 FF .word 0fff0h +0018FCr 1 F1 FF .word 0fff1h +0018FEr 1 F2 FF .word 0fff2h +001900r 1 F3 FF .word 0fff3h +001902r 1 F4 FF .word 0fff4h +001904r 1 F5 FF .word 0fff5h +001906r 1 F6 FF .word 0fff6h +001908r 1 F7 FF .word 0fff7h +00190Ar 1 F8 FF .word 0fff8h +00190Cr 1 F9 FF .word 0fff9h +00190Er 1 FA FF .word 0fffah +001910r 1 FB FF .word 0fffbh +001912r 1 FC FF .word 0fffch +001914r 1 FD FF .word 0fffdh +001916r 1 FE FF .word 0fffeh +001918r 1 FF FF .word 0ffffh 00191Ar 1 -00191Ar 1 ; alternative hex values, uppercase -00191Ar 1 00 00 .word 0h -00191Cr 1 01 00 .word 1h -00191Er 1 02 00 .word 2h -001920r 1 03 00 .word 3h -001922r 1 04 00 .word 4h -001924r 1 05 00 .word 5h -001926r 1 06 00 .word 6h -001928r 1 07 00 .word 7h -00192Ar 1 08 00 .word 8h -00192Cr 1 09 00 .word 9h -00192Er 1 0A 00 .word 0Ah -001930r 1 0B 00 .word 0Bh -001932r 1 0C 00 .word 0Ch -001934r 1 0D 00 .word 0Dh -001936r 1 0E 00 .word 0Eh -001938r 1 0F 00 .word 0Fh -00193Ar 1 10 00 .word 10h -00193Cr 1 11 00 .word 11h -00193Er 1 12 00 .word 12h -001940r 1 13 00 .word 13h -001942r 1 70 00 .word 70h -001944r 1 71 00 .word 71h -001946r 1 72 00 .word 72h -001948r 1 73 00 .word 73h -00194Ar 1 74 00 .word 74h -00194Cr 1 75 00 .word 75h -00194Er 1 76 00 .word 76h -001950r 1 77 00 .word 77h -001952r 1 78 00 .word 78h -001954r 1 79 00 .word 79h -001956r 1 7A 00 .word 7Ah -001958r 1 7B 00 .word 7Bh -00195Ar 1 7C 00 .word 7Ch -00195Cr 1 7D 00 .word 7Dh -00195Er 1 7E 00 .word 7Eh -001960r 1 7F 00 .word 7Fh -001962r 1 80 00 .word 80h -001964r 1 81 00 .word 81h -001966r 1 82 00 .word 82h -001968r 1 83 00 .word 83h -00196Ar 1 84 00 .word 84h -00196Cr 1 85 00 .word 85h -00196Er 1 86 00 .word 86h -001970r 1 F0 00 .word 0F0h -001972r 1 F1 00 .word 0F1h -001974r 1 F2 00 .word 0F2h -001976r 1 F3 00 .word 0F3h -001978r 1 F4 00 .word 0F4h -00197Ar 1 F5 00 .word 0F5h -00197Cr 1 F6 00 .word 0F6h -00197Er 1 F7 00 .word 0F7h -001980r 1 F8 00 .word 0F8h -001982r 1 F9 00 .word 0F9h -001984r 1 FA 00 .word 0FAh -001986r 1 FB 00 .word 0FBh -001988r 1 FC 00 .word 0FCh -00198Ar 1 FD 00 .word 0FDh -00198Cr 1 FE 00 .word 0FEh -00198Er 1 FF 00 .word 0FFh -001990r 1 00 01 .word 100h -001992r 1 01 01 .word 101h -001994r 1 02 01 .word 102h -001996r 1 03 01 .word 103h -001998r 1 D2 0F .word 0FD2h -00199Ar 1 D3 0F .word 0FD3h -00199Cr 1 D4 0F .word 0FD4h -00199Er 1 D5 0F .word 0FD5h -0019A0r 1 D6 0F .word 0FD6h -0019A2r 1 D7 0F .word 0FD7h -0019A4r 1 D8 0F .word 0FD8h -0019A6r 1 D9 0F .word 0FD9h -0019A8r 1 DA 0F .word 0FDAh -0019AAr 1 DB 0F .word 0FDBh -0019ACr 1 DC 0F .word 0FDCh -0019AEr 1 DD 0F .word 0FDDh -0019B0r 1 DE 0F .word 0FDEh -0019B2r 1 DF 0F .word 0FDFh -0019B4r 1 E0 0F .word 0FE0h -0019B6r 1 E1 0F .word 0FE1h -0019B8r 1 E2 0F .word 0FE2h -0019BAr 1 E3 0F .word 0FE3h -0019BCr 1 E4 0F .word 0FE4h -0019BEr 1 E5 0F .word 0FE5h -0019C0r 1 E6 0F .word 0FE6h -0019C2r 1 E7 0F .word 0FE7h -0019C4r 1 E8 0F .word 0FE8h -0019C6r 1 E9 0F .word 0FE9h -0019C8r 1 EA 0F .word 0FEAh -0019CAr 1 EB 0F .word 0FEBh -0019CCr 1 EC 0F .word 0FECh -0019CEr 1 ED 0F .word 0FEDh -0019D0r 1 EE 0F .word 0FEEh -0019D2r 1 EF 0F .word 0FEFh -0019D4r 1 F0 0F .word 0FF0h -0019D6r 1 F1 0F .word 0FF1h -0019D8r 1 F2 0F .word 0FF2h -0019DAr 1 F3 0F .word 0FF3h -0019DCr 1 F4 0F .word 0FF4h -0019DEr 1 F5 0F .word 0FF5h -0019E0r 1 F6 0F .word 0FF6h -0019E2r 1 F7 0F .word 0FF7h -0019E4r 1 F8 0F .word 0FF8h -0019E6r 1 F9 0F .word 0FF9h -0019E8r 1 FA 0F .word 0FFAh -0019EAr 1 FB 0F .word 0FFBh -0019ECr 1 FC 0F .word 0FFCh -0019EEr 1 FD 0F .word 0FFDh -0019F0r 1 FE 0F .word 0FFEh -0019F2r 1 FF 0F .word 0FFFh -0019F4r 1 00 10 .word 1000h -0019F6r 1 01 10 .word 1001h -0019F8r 1 02 10 .word 1002h -0019FAr 1 03 10 .word 1003h -0019FCr 1 04 10 .word 1004h -0019FEr 1 05 10 .word 1005h -001A00r 1 06 10 .word 1006h -001A02r 1 07 10 .word 1007h -001A04r 1 08 10 .word 1008h -001A06r 1 F0 7F .word 7FF0h -001A08r 1 F1 7F .word 7FF1h -001A0Ar 1 F2 7F .word 7FF2h -001A0Cr 1 F3 7F .word 7FF3h -001A0Er 1 F4 7F .word 7FF4h -001A10r 1 F5 7F .word 7FF5h -001A12r 1 F6 7F .word 7FF6h -001A14r 1 F7 7F .word 7FF7h -001A16r 1 F8 7F .word 7FF8h -001A18r 1 F9 7F .word 7FF9h -001A1Ar 1 FA 7F .word 7FFAh -001A1Cr 1 FB 7F .word 7FFBh -001A1Er 1 FC 7F .word 7FFCh -001A20r 1 FD 7F .word 7FFDh -001A22r 1 FE 7F .word 7FFEh -001A24r 1 FF 7F .word 7FFFh -001A26r 1 00 80 .word 8000h -001A28r 1 01 80 .word 8001h -001A2Ar 1 02 80 .word 8002h -001A2Cr 1 03 80 .word 8003h -001A2Er 1 04 80 .word 8004h -001A30r 1 05 80 .word 8005h -001A32r 1 06 80 .word 8006h -001A34r 1 07 80 .word 8007h -001A36r 1 08 80 .word 8008h -001A38r 1 09 80 .word 8009h -001A3Ar 1 0A 80 .word 800Ah -001A3Cr 1 0B 80 .word 800Bh -001A3Er 1 E1 9F .word 9FE1h -001A40r 1 E2 9F .word 9FE2h -001A42r 1 E3 9F .word 9FE3h -001A44r 1 E4 9F .word 9FE4h -001A46r 1 E5 9F .word 9FE5h -001A48r 1 E6 9F .word 9FE6h -001A4Ar 1 E7 9F .word 9FE7h -001A4Cr 1 E8 9F .word 9FE8h -001A4Er 1 E9 9F .word 9FE9h -001A50r 1 EA 9F .word 9FEAh -001A52r 1 EB 9F .word 9FEBh -001A54r 1 EC 9F .word 9FECh -001A56r 1 ED 9F .word 9FEDh -001A58r 1 EE 9F .word 9FEEh -001A5Ar 1 EF 9F .word 9FEFh -001A5Cr 1 F0 9F .word 9FF0h -001A5Er 1 F1 9F .word 9FF1h -001A60r 1 F2 9F .word 9FF2h -001A62r 1 F3 9F .word 9FF3h -001A64r 1 F4 9F .word 9FF4h -001A66r 1 F5 9F .word 9FF5h -001A68r 1 F6 9F .word 9FF6h -001A6Ar 1 F7 9F .word 9FF7h -001A6Cr 1 F8 9F .word 9FF8h -001A6Er 1 F9 9F .word 9FF9h -001A70r 1 FA 9F .word 9FFAh -001A72r 1 FB 9F .word 9FFBh -001A74r 1 FC 9F .word 9FFCh -001A76r 1 FD 9F .word 9FFDh -001A78r 1 FE 9F .word 9FFEh -001A7Ar 1 FF 9F .word 9FFFh -001A7Cr 1 00 A0 .word 0A000h -001A7Er 1 01 A0 .word 0A001h -001A80r 1 02 A0 .word 0A002h -001A82r 1 03 A0 .word 0A003h -001A84r 1 04 A0 .word 0A004h -001A86r 1 05 A0 .word 0A005h -001A88r 1 06 A0 .word 0A006h -001A8Ar 1 07 A0 .word 0A007h -001A8Cr 1 08 A0 .word 0A008h -001A8Er 1 09 A0 .word 0A009h -001A90r 1 0A A0 .word 0A00Ah -001A92r 1 0B A0 .word 0A00Bh -001A94r 1 0C A0 .word 0A00Ch -001A96r 1 0D A0 .word 0A00Dh -001A98r 1 0E A0 .word 0A00Eh -001A9Ar 1 0F A0 .word 0A00Fh -001A9Cr 1 E1 AF .word 0AFE1h -001A9Er 1 E2 AF .word 0AFE2h -001AA0r 1 E3 AF .word 0AFE3h -001AA2r 1 E4 AF .word 0AFE4h -001AA4r 1 E5 AF .word 0AFE5h -001AA6r 1 E6 AF .word 0AFE6h -001AA8r 1 E7 AF .word 0AFE7h -001AAAr 1 E8 AF .word 0AFE8h -001AACr 1 E9 AF .word 0AFE9h -001AAEr 1 EA AF .word 0AFEAh -001AB0r 1 EB AF .word 0AFEBh -001AB2r 1 EC AF .word 0AFECh -001AB4r 1 ED AF .word 0AFEDh -001AB6r 1 EE AF .word 0AFEEh -001AB8r 1 EF AF .word 0AFEFh -001ABAr 1 F0 AF .word 0AFF0h -001ABCr 1 F1 AF .word 0AFF1h -001ABEr 1 F2 AF .word 0AFF2h -001AC0r 1 F3 AF .word 0AFF3h -001AC2r 1 F4 AF .word 0AFF4h -001AC4r 1 F5 AF .word 0AFF5h -001AC6r 1 F6 AF .word 0AFF6h -001AC8r 1 F7 AF .word 0AFF7h -001ACAr 1 F8 AF .word 0AFF8h -001ACCr 1 F9 AF .word 0AFF9h -001ACEr 1 FA AF .word 0AFFAh -001AD0r 1 FB AF .word 0AFFBh -001AD2r 1 FC AF .word 0AFFCh -001AD4r 1 FD AF .word 0AFFDh -001AD6r 1 FE AF .word 0AFFEh -001AD8r 1 FF AF .word 0AFFFh -001ADAr 1 00 B0 .word 0B000h -001ADCr 1 01 B0 .word 0B001h -001ADEr 1 02 B0 .word 0B002h -001AE0r 1 03 B0 .word 0B003h -001AE2r 1 04 B0 .word 0B004h -001AE4r 1 05 B0 .word 0B005h -001AE6r 1 06 B0 .word 0B006h -001AE8r 1 07 B0 .word 0B007h -001AEAr 1 08 B0 .word 0B008h -001AECr 1 09 B0 .word 0B009h -001AEEr 1 0A B0 .word 0B00Ah -001AF0r 1 0B B0 .word 0B00Bh -001AF2r 1 0C B0 .word 0B00Ch -001AF4r 1 0D B0 .word 0B00Dh -001AF6r 1 0E B0 .word 0B00Eh -001AF8r 1 0F B0 .word 0B00Fh -001AFAr 1 E1 BF .word 0BFE1h -001AFCr 1 E2 BF .word 0BFE2h -001AFEr 1 E3 BF .word 0BFE3h -001B00r 1 E4 BF .word 0BFE4h -001B02r 1 E5 BF .word 0BFE5h -001B04r 1 E6 BF .word 0BFE6h -001B06r 1 E7 BF .word 0BFE7h -001B08r 1 E8 BF .word 0BFE8h -001B0Ar 1 E9 BF .word 0BFE9h -001B0Cr 1 EA BF .word 0BFEAh -001B0Er 1 EB BF .word 0BFEBh -001B10r 1 EC BF .word 0BFECh -001B12r 1 ED BF .word 0BFEDh -001B14r 1 EE BF .word 0BFEEh -001B16r 1 EF BF .word 0BFEFh -001B18r 1 F0 BF .word 0BFF0h -001B1Ar 1 F1 BF .word 0BFF1h -001B1Cr 1 F2 BF .word 0BFF2h -001B1Er 1 F3 BF .word 0BFF3h -001B20r 1 F4 BF .word 0BFF4h -001B22r 1 F5 BF .word 0BFF5h -001B24r 1 F6 BF .word 0BFF6h -001B26r 1 F7 BF .word 0BFF7h -001B28r 1 F8 BF .word 0BFF8h -001B2Ar 1 F9 BF .word 0BFF9h -001B2Cr 1 FA BF .word 0BFFAh -001B2Er 1 FB BF .word 0BFFBh -001B30r 1 FC BF .word 0BFFCh -001B32r 1 FD BF .word 0BFFDh -001B34r 1 FE BF .word 0BFFEh -001B36r 1 FF BF .word 0BFFFh -001B38r 1 00 C0 .word 0C000h -001B3Ar 1 01 C0 .word 0C001h -001B3Cr 1 02 C0 .word 0C002h -001B3Er 1 03 C0 .word 0C003h -001B40r 1 04 C0 .word 0C004h -001B42r 1 05 C0 .word 0C005h -001B44r 1 06 C0 .word 0C006h -001B46r 1 07 C0 .word 0C007h -001B48r 1 08 C0 .word 0C008h -001B4Ar 1 09 C0 .word 0C009h -001B4Cr 1 0A C0 .word 0C00Ah -001B4Er 1 0B C0 .word 0C00Bh -001B50r 1 0C C0 .word 0C00Ch -001B52r 1 0D C0 .word 0C00Dh -001B54r 1 0E C0 .word 0C00Eh -001B56r 1 0F C0 .word 0C00Fh -001B58r 1 E1 CF .word 0CFE1h -001B5Ar 1 E2 CF .word 0CFE2h -001B5Cr 1 E3 CF .word 0CFE3h -001B5Er 1 E4 CF .word 0CFE4h -001B60r 1 E5 CF .word 0CFE5h -001B62r 1 E6 CF .word 0CFE6h -001B64r 1 E7 CF .word 0CFE7h -001B66r 1 E8 CF .word 0CFE8h -001B68r 1 E9 CF .word 0CFE9h -001B6Ar 1 EA CF .word 0CFEAh -001B6Cr 1 EB CF .word 0CFEBh -001B6Er 1 EC CF .word 0CFECh -001B70r 1 ED CF .word 0CFEDh -001B72r 1 EE CF .word 0CFEEh -001B74r 1 EF CF .word 0CFEFh -001B76r 1 F0 CF .word 0CFF0h -001B78r 1 F1 CF .word 0CFF1h -001B7Ar 1 F2 CF .word 0CFF2h -001B7Cr 1 F3 CF .word 0CFF3h -001B7Er 1 F4 CF .word 0CFF4h -001B80r 1 F5 CF .word 0CFF5h -001B82r 1 F6 CF .word 0CFF6h -001B84r 1 F7 CF .word 0CFF7h -001B86r 1 F8 CF .word 0CFF8h -001B88r 1 F9 CF .word 0CFF9h -001B8Ar 1 FA CF .word 0CFFAh -001B8Cr 1 FB CF .word 0CFFBh -001B8Er 1 FC CF .word 0CFFCh -001B90r 1 FD CF .word 0CFFDh -001B92r 1 FE CF .word 0CFFEh -001B94r 1 FF CF .word 0CFFFh -001B96r 1 00 D0 .word 0D000h -001B98r 1 01 D0 .word 0D001h -001B9Ar 1 02 D0 .word 0D002h -001B9Cr 1 03 D0 .word 0D003h -001B9Er 1 04 D0 .word 0D004h -001BA0r 1 05 D0 .word 0D005h -001BA2r 1 06 D0 .word 0D006h -001BA4r 1 07 D0 .word 0D007h -001BA6r 1 08 D0 .word 0D008h -001BA8r 1 09 D0 .word 0D009h -001BAAr 1 0A D0 .word 0D00Ah -001BACr 1 0B D0 .word 0D00Bh -001BAEr 1 0C D0 .word 0D00Ch -001BB0r 1 0D D0 .word 0D00Dh -001BB2r 1 0E D0 .word 0D00Eh -001BB4r 1 0F D0 .word 0D00Fh -001BB6r 1 E1 DF .word 0DFE1h -001BB8r 1 E2 DF .word 0DFE2h -001BBAr 1 E3 DF .word 0DFE3h -001BBCr 1 E4 DF .word 0DFE4h -001BBEr 1 E5 DF .word 0DFE5h -001BC0r 1 E6 DF .word 0DFE6h -001BC2r 1 E7 DF .word 0DFE7h -001BC4r 1 E8 DF .word 0DFE8h -001BC6r 1 E9 DF .word 0DFE9h -001BC8r 1 EA DF .word 0DFEAh -001BCAr 1 EB DF .word 0DFEBh -001BCCr 1 EC DF .word 0DFECh -001BCEr 1 ED DF .word 0DFEDh -001BD0r 1 EE DF .word 0DFEEh -001BD2r 1 EF DF .word 0DFEFh -001BD4r 1 F0 DF .word 0DFF0h -001BD6r 1 F1 DF .word 0DFF1h -001BD8r 1 F2 DF .word 0DFF2h -001BDAr 1 F3 DF .word 0DFF3h -001BDCr 1 F4 DF .word 0DFF4h -001BDEr 1 F5 DF .word 0DFF5h -001BE0r 1 F6 DF .word 0DFF6h -001BE2r 1 F7 DF .word 0DFF7h -001BE4r 1 F8 DF .word 0DFF8h -001BE6r 1 F9 DF .word 0DFF9h -001BE8r 1 FA DF .word 0DFFAh -001BEAr 1 FB DF .word 0DFFBh -001BECr 1 FC DF .word 0DFFCh -001BEEr 1 FD DF .word 0DFFDh -001BF0r 1 FE DF .word 0DFFEh -001BF2r 1 FF DF .word 0DFFFh -001BF4r 1 00 E0 .word 0E000h -001BF6r 1 01 E0 .word 0E001h -001BF8r 1 02 E0 .word 0E002h -001BFAr 1 03 E0 .word 0E003h -001BFCr 1 04 E0 .word 0E004h -001BFEr 1 05 E0 .word 0E005h -001C00r 1 06 E0 .word 0E006h -001C02r 1 07 E0 .word 0E007h -001C04r 1 08 E0 .word 0E008h -001C06r 1 09 E0 .word 0E009h -001C08r 1 0A E0 .word 0E00Ah -001C0Ar 1 0B E0 .word 0E00Bh -001C0Cr 1 0C E0 .word 0E00Ch -001C0Er 1 0D E0 .word 0E00Dh -001C10r 1 0E E0 .word 0E00Eh -001C12r 1 0F E0 .word 0E00Fh -001C14r 1 E1 EF .word 0EFE1h -001C16r 1 E2 EF .word 0EFE2h -001C18r 1 E3 EF .word 0EFE3h -001C1Ar 1 E4 EF .word 0EFE4h -001C1Cr 1 E5 EF .word 0EFE5h -001C1Er 1 E6 EF .word 0EFE6h -001C20r 1 E7 EF .word 0EFE7h -001C22r 1 E8 EF .word 0EFE8h -001C24r 1 E9 EF .word 0EFE9h -001C26r 1 EA EF .word 0EFEAh -001C28r 1 EB EF .word 0EFEBh -001C2Ar 1 EC EF .word 0EFECh -001C2Cr 1 ED EF .word 0EFEDh -001C2Er 1 EE EF .word 0EFEEh -001C30r 1 EF EF .word 0EFEFh -001C32r 1 F0 EF .word 0EFF0h -001C34r 1 F1 EF .word 0EFF1h -001C36r 1 F2 EF .word 0EFF2h -001C38r 1 F3 EF .word 0EFF3h -001C3Ar 1 F4 EF .word 0EFF4h -001C3Cr 1 F5 EF .word 0EFF5h -001C3Er 1 F6 EF .word 0EFF6h -001C40r 1 F7 EF .word 0EFF7h -001C42r 1 F8 EF .word 0EFF8h -001C44r 1 F9 EF .word 0EFF9h -001C46r 1 FA EF .word 0EFFAh -001C48r 1 FB EF .word 0EFFBh -001C4Ar 1 FC EF .word 0EFFCh -001C4Cr 1 FD EF .word 0EFFDh -001C4Er 1 FE EF .word 0EFFEh -001C50r 1 FF EF .word 0EFFFh -001C52r 1 00 F0 .word 0F000h -001C54r 1 01 F0 .word 0F001h -001C56r 1 02 F0 .word 0F002h -001C58r 1 03 F0 .word 0F003h -001C5Ar 1 04 F0 .word 0F004h -001C5Cr 1 05 F0 .word 0F005h -001C5Er 1 06 F0 .word 0F006h -001C60r 1 07 F0 .word 0F007h -001C62r 1 08 F0 .word 0F008h -001C64r 1 09 F0 .word 0F009h -001C66r 1 0A F0 .word 0F00Ah -001C68r 1 0B F0 .word 0F00Bh -001C6Ar 1 0C F0 .word 0F00Ch -001C6Cr 1 0D F0 .word 0F00Dh -001C6Er 1 0E F0 .word 0F00Eh -001C70r 1 0F F0 .word 0F00Fh -001C72r 1 E1 FF .word 0FFE1h -001C74r 1 E2 FF .word 0FFE2h -001C76r 1 E3 FF .word 0FFE3h -001C78r 1 E4 FF .word 0FFE4h -001C7Ar 1 E5 FF .word 0FFE5h -001C7Cr 1 E6 FF .word 0FFE6h -001C7Er 1 E7 FF .word 0FFE7h -001C80r 1 E8 FF .word 0FFE8h -001C82r 1 E9 FF .word 0FFE9h -001C84r 1 EA FF .word 0FFEAh -001C86r 1 EB FF .word 0FFEBh -001C88r 1 EC FF .word 0FFECh -001C8Ar 1 ED FF .word 0FFEDh -001C8Cr 1 EE FF .word 0FFEEh -001C8Er 1 EF FF .word 0FFEFh -001C90r 1 F0 FF .word 0FFF0h -001C92r 1 F1 FF .word 0FFF1h -001C94r 1 F2 FF .word 0FFF2h -001C96r 1 F3 FF .word 0FFF3h -001C98r 1 F4 FF .word 0FFF4h -001C9Ar 1 F5 FF .word 0FFF5h -001C9Cr 1 F6 FF .word 0FFF6h -001C9Er 1 F7 FF .word 0FFF7h -001CA0r 1 F8 FF .word 0FFF8h -001CA2r 1 F9 FF .word 0FFF9h -001CA4r 1 FA FF .word 0FFFAh -001CA6r 1 FB FF .word 0FFFBh -001CA8r 1 FC FF .word 0FFFCh -001CAAr 1 FD FF .word 0FFFDh -001CACr 1 FE FF .word 0FFFEh -001CAEr 1 FF FF .word 0FFFFh +00191Ar 1 ; alternative hex values, uppercase +00191Ar 1 00 00 .word 0h +00191Cr 1 01 00 .word 1h +00191Er 1 02 00 .word 2h +001920r 1 03 00 .word 3h +001922r 1 04 00 .word 4h +001924r 1 05 00 .word 5h +001926r 1 06 00 .word 6h +001928r 1 07 00 .word 7h +00192Ar 1 08 00 .word 8h +00192Cr 1 09 00 .word 9h +00192Er 1 0A 00 .word 0Ah +001930r 1 0B 00 .word 0Bh +001932r 1 0C 00 .word 0Ch +001934r 1 0D 00 .word 0Dh +001936r 1 0E 00 .word 0Eh +001938r 1 0F 00 .word 0Fh +00193Ar 1 10 00 .word 10h +00193Cr 1 11 00 .word 11h +00193Er 1 12 00 .word 12h +001940r 1 13 00 .word 13h +001942r 1 70 00 .word 70h +001944r 1 71 00 .word 71h +001946r 1 72 00 .word 72h +001948r 1 73 00 .word 73h +00194Ar 1 74 00 .word 74h +00194Cr 1 75 00 .word 75h +00194Er 1 76 00 .word 76h +001950r 1 77 00 .word 77h +001952r 1 78 00 .word 78h +001954r 1 79 00 .word 79h +001956r 1 7A 00 .word 7Ah +001958r 1 7B 00 .word 7Bh +00195Ar 1 7C 00 .word 7Ch +00195Cr 1 7D 00 .word 7Dh +00195Er 1 7E 00 .word 7Eh +001960r 1 7F 00 .word 7Fh +001962r 1 80 00 .word 80h +001964r 1 81 00 .word 81h +001966r 1 82 00 .word 82h +001968r 1 83 00 .word 83h +00196Ar 1 84 00 .word 84h +00196Cr 1 85 00 .word 85h +00196Er 1 86 00 .word 86h +001970r 1 F0 00 .word 0F0h +001972r 1 F1 00 .word 0F1h +001974r 1 F2 00 .word 0F2h +001976r 1 F3 00 .word 0F3h +001978r 1 F4 00 .word 0F4h +00197Ar 1 F5 00 .word 0F5h +00197Cr 1 F6 00 .word 0F6h +00197Er 1 F7 00 .word 0F7h +001980r 1 F8 00 .word 0F8h +001982r 1 F9 00 .word 0F9h +001984r 1 FA 00 .word 0FAh +001986r 1 FB 00 .word 0FBh +001988r 1 FC 00 .word 0FCh +00198Ar 1 FD 00 .word 0FDh +00198Cr 1 FE 00 .word 0FEh +00198Er 1 FF 00 .word 0FFh +001990r 1 00 01 .word 100h +001992r 1 01 01 .word 101h +001994r 1 02 01 .word 102h +001996r 1 03 01 .word 103h +001998r 1 D2 0F .word 0FD2h +00199Ar 1 D3 0F .word 0FD3h +00199Cr 1 D4 0F .word 0FD4h +00199Er 1 D5 0F .word 0FD5h +0019A0r 1 D6 0F .word 0FD6h +0019A2r 1 D7 0F .word 0FD7h +0019A4r 1 D8 0F .word 0FD8h +0019A6r 1 D9 0F .word 0FD9h +0019A8r 1 DA 0F .word 0FDAh +0019AAr 1 DB 0F .word 0FDBh +0019ACr 1 DC 0F .word 0FDCh +0019AEr 1 DD 0F .word 0FDDh +0019B0r 1 DE 0F .word 0FDEh +0019B2r 1 DF 0F .word 0FDFh +0019B4r 1 E0 0F .word 0FE0h +0019B6r 1 E1 0F .word 0FE1h +0019B8r 1 E2 0F .word 0FE2h +0019BAr 1 E3 0F .word 0FE3h +0019BCr 1 E4 0F .word 0FE4h +0019BEr 1 E5 0F .word 0FE5h +0019C0r 1 E6 0F .word 0FE6h +0019C2r 1 E7 0F .word 0FE7h +0019C4r 1 E8 0F .word 0FE8h +0019C6r 1 E9 0F .word 0FE9h +0019C8r 1 EA 0F .word 0FEAh +0019CAr 1 EB 0F .word 0FEBh +0019CCr 1 EC 0F .word 0FECh +0019CEr 1 ED 0F .word 0FEDh +0019D0r 1 EE 0F .word 0FEEh +0019D2r 1 EF 0F .word 0FEFh +0019D4r 1 F0 0F .word 0FF0h +0019D6r 1 F1 0F .word 0FF1h +0019D8r 1 F2 0F .word 0FF2h +0019DAr 1 F3 0F .word 0FF3h +0019DCr 1 F4 0F .word 0FF4h +0019DEr 1 F5 0F .word 0FF5h +0019E0r 1 F6 0F .word 0FF6h +0019E2r 1 F7 0F .word 0FF7h +0019E4r 1 F8 0F .word 0FF8h +0019E6r 1 F9 0F .word 0FF9h +0019E8r 1 FA 0F .word 0FFAh +0019EAr 1 FB 0F .word 0FFBh +0019ECr 1 FC 0F .word 0FFCh +0019EEr 1 FD 0F .word 0FFDh +0019F0r 1 FE 0F .word 0FFEh +0019F2r 1 FF 0F .word 0FFFh +0019F4r 1 00 10 .word 1000h +0019F6r 1 01 10 .word 1001h +0019F8r 1 02 10 .word 1002h +0019FAr 1 03 10 .word 1003h +0019FCr 1 04 10 .word 1004h +0019FEr 1 05 10 .word 1005h +001A00r 1 06 10 .word 1006h +001A02r 1 07 10 .word 1007h +001A04r 1 08 10 .word 1008h +001A06r 1 F0 7F .word 7FF0h +001A08r 1 F1 7F .word 7FF1h +001A0Ar 1 F2 7F .word 7FF2h +001A0Cr 1 F3 7F .word 7FF3h +001A0Er 1 F4 7F .word 7FF4h +001A10r 1 F5 7F .word 7FF5h +001A12r 1 F6 7F .word 7FF6h +001A14r 1 F7 7F .word 7FF7h +001A16r 1 F8 7F .word 7FF8h +001A18r 1 F9 7F .word 7FF9h +001A1Ar 1 FA 7F .word 7FFAh +001A1Cr 1 FB 7F .word 7FFBh +001A1Er 1 FC 7F .word 7FFCh +001A20r 1 FD 7F .word 7FFDh +001A22r 1 FE 7F .word 7FFEh +001A24r 1 FF 7F .word 7FFFh +001A26r 1 00 80 .word 8000h +001A28r 1 01 80 .word 8001h +001A2Ar 1 02 80 .word 8002h +001A2Cr 1 03 80 .word 8003h +001A2Er 1 04 80 .word 8004h +001A30r 1 05 80 .word 8005h +001A32r 1 06 80 .word 8006h +001A34r 1 07 80 .word 8007h +001A36r 1 08 80 .word 8008h +001A38r 1 09 80 .word 8009h +001A3Ar 1 0A 80 .word 800Ah +001A3Cr 1 0B 80 .word 800Bh +001A3Er 1 E1 9F .word 9FE1h +001A40r 1 E2 9F .word 9FE2h +001A42r 1 E3 9F .word 9FE3h +001A44r 1 E4 9F .word 9FE4h +001A46r 1 E5 9F .word 9FE5h +001A48r 1 E6 9F .word 9FE6h +001A4Ar 1 E7 9F .word 9FE7h +001A4Cr 1 E8 9F .word 9FE8h +001A4Er 1 E9 9F .word 9FE9h +001A50r 1 EA 9F .word 9FEAh +001A52r 1 EB 9F .word 9FEBh +001A54r 1 EC 9F .word 9FECh +001A56r 1 ED 9F .word 9FEDh +001A58r 1 EE 9F .word 9FEEh +001A5Ar 1 EF 9F .word 9FEFh +001A5Cr 1 F0 9F .word 9FF0h +001A5Er 1 F1 9F .word 9FF1h +001A60r 1 F2 9F .word 9FF2h +001A62r 1 F3 9F .word 9FF3h +001A64r 1 F4 9F .word 9FF4h +001A66r 1 F5 9F .word 9FF5h +001A68r 1 F6 9F .word 9FF6h +001A6Ar 1 F7 9F .word 9FF7h +001A6Cr 1 F8 9F .word 9FF8h +001A6Er 1 F9 9F .word 9FF9h +001A70r 1 FA 9F .word 9FFAh +001A72r 1 FB 9F .word 9FFBh +001A74r 1 FC 9F .word 9FFCh +001A76r 1 FD 9F .word 9FFDh +001A78r 1 FE 9F .word 9FFEh +001A7Ar 1 FF 9F .word 9FFFh +001A7Cr 1 00 A0 .word 0A000h +001A7Er 1 01 A0 .word 0A001h +001A80r 1 02 A0 .word 0A002h +001A82r 1 03 A0 .word 0A003h +001A84r 1 04 A0 .word 0A004h +001A86r 1 05 A0 .word 0A005h +001A88r 1 06 A0 .word 0A006h +001A8Ar 1 07 A0 .word 0A007h +001A8Cr 1 08 A0 .word 0A008h +001A8Er 1 09 A0 .word 0A009h +001A90r 1 0A A0 .word 0A00Ah +001A92r 1 0B A0 .word 0A00Bh +001A94r 1 0C A0 .word 0A00Ch +001A96r 1 0D A0 .word 0A00Dh +001A98r 1 0E A0 .word 0A00Eh +001A9Ar 1 0F A0 .word 0A00Fh +001A9Cr 1 E1 AF .word 0AFE1h +001A9Er 1 E2 AF .word 0AFE2h +001AA0r 1 E3 AF .word 0AFE3h +001AA2r 1 E4 AF .word 0AFE4h +001AA4r 1 E5 AF .word 0AFE5h +001AA6r 1 E6 AF .word 0AFE6h +001AA8r 1 E7 AF .word 0AFE7h +001AAAr 1 E8 AF .word 0AFE8h +001AACr 1 E9 AF .word 0AFE9h +001AAEr 1 EA AF .word 0AFEAh +001AB0r 1 EB AF .word 0AFEBh +001AB2r 1 EC AF .word 0AFECh +001AB4r 1 ED AF .word 0AFEDh +001AB6r 1 EE AF .word 0AFEEh +001AB8r 1 EF AF .word 0AFEFh +001ABAr 1 F0 AF .word 0AFF0h +001ABCr 1 F1 AF .word 0AFF1h +001ABEr 1 F2 AF .word 0AFF2h +001AC0r 1 F3 AF .word 0AFF3h +001AC2r 1 F4 AF .word 0AFF4h +001AC4r 1 F5 AF .word 0AFF5h +001AC6r 1 F6 AF .word 0AFF6h +001AC8r 1 F7 AF .word 0AFF7h +001ACAr 1 F8 AF .word 0AFF8h +001ACCr 1 F9 AF .word 0AFF9h +001ACEr 1 FA AF .word 0AFFAh +001AD0r 1 FB AF .word 0AFFBh +001AD2r 1 FC AF .word 0AFFCh +001AD4r 1 FD AF .word 0AFFDh +001AD6r 1 FE AF .word 0AFFEh +001AD8r 1 FF AF .word 0AFFFh +001ADAr 1 00 B0 .word 0B000h +001ADCr 1 01 B0 .word 0B001h +001ADEr 1 02 B0 .word 0B002h +001AE0r 1 03 B0 .word 0B003h +001AE2r 1 04 B0 .word 0B004h +001AE4r 1 05 B0 .word 0B005h +001AE6r 1 06 B0 .word 0B006h +001AE8r 1 07 B0 .word 0B007h +001AEAr 1 08 B0 .word 0B008h +001AECr 1 09 B0 .word 0B009h +001AEEr 1 0A B0 .word 0B00Ah +001AF0r 1 0B B0 .word 0B00Bh +001AF2r 1 0C B0 .word 0B00Ch +001AF4r 1 0D B0 .word 0B00Dh +001AF6r 1 0E B0 .word 0B00Eh +001AF8r 1 0F B0 .word 0B00Fh +001AFAr 1 E1 BF .word 0BFE1h +001AFCr 1 E2 BF .word 0BFE2h +001AFEr 1 E3 BF .word 0BFE3h +001B00r 1 E4 BF .word 0BFE4h +001B02r 1 E5 BF .word 0BFE5h +001B04r 1 E6 BF .word 0BFE6h +001B06r 1 E7 BF .word 0BFE7h +001B08r 1 E8 BF .word 0BFE8h +001B0Ar 1 E9 BF .word 0BFE9h +001B0Cr 1 EA BF .word 0BFEAh +001B0Er 1 EB BF .word 0BFEBh +001B10r 1 EC BF .word 0BFECh +001B12r 1 ED BF .word 0BFEDh +001B14r 1 EE BF .word 0BFEEh +001B16r 1 EF BF .word 0BFEFh +001B18r 1 F0 BF .word 0BFF0h +001B1Ar 1 F1 BF .word 0BFF1h +001B1Cr 1 F2 BF .word 0BFF2h +001B1Er 1 F3 BF .word 0BFF3h +001B20r 1 F4 BF .word 0BFF4h +001B22r 1 F5 BF .word 0BFF5h +001B24r 1 F6 BF .word 0BFF6h +001B26r 1 F7 BF .word 0BFF7h +001B28r 1 F8 BF .word 0BFF8h +001B2Ar 1 F9 BF .word 0BFF9h +001B2Cr 1 FA BF .word 0BFFAh +001B2Er 1 FB BF .word 0BFFBh +001B30r 1 FC BF .word 0BFFCh +001B32r 1 FD BF .word 0BFFDh +001B34r 1 FE BF .word 0BFFEh +001B36r 1 FF BF .word 0BFFFh +001B38r 1 00 C0 .word 0C000h +001B3Ar 1 01 C0 .word 0C001h +001B3Cr 1 02 C0 .word 0C002h +001B3Er 1 03 C0 .word 0C003h +001B40r 1 04 C0 .word 0C004h +001B42r 1 05 C0 .word 0C005h +001B44r 1 06 C0 .word 0C006h +001B46r 1 07 C0 .word 0C007h +001B48r 1 08 C0 .word 0C008h +001B4Ar 1 09 C0 .word 0C009h +001B4Cr 1 0A C0 .word 0C00Ah +001B4Er 1 0B C0 .word 0C00Bh +001B50r 1 0C C0 .word 0C00Ch +001B52r 1 0D C0 .word 0C00Dh +001B54r 1 0E C0 .word 0C00Eh +001B56r 1 0F C0 .word 0C00Fh +001B58r 1 E1 CF .word 0CFE1h +001B5Ar 1 E2 CF .word 0CFE2h +001B5Cr 1 E3 CF .word 0CFE3h +001B5Er 1 E4 CF .word 0CFE4h +001B60r 1 E5 CF .word 0CFE5h +001B62r 1 E6 CF .word 0CFE6h +001B64r 1 E7 CF .word 0CFE7h +001B66r 1 E8 CF .word 0CFE8h +001B68r 1 E9 CF .word 0CFE9h +001B6Ar 1 EA CF .word 0CFEAh +001B6Cr 1 EB CF .word 0CFEBh +001B6Er 1 EC CF .word 0CFECh +001B70r 1 ED CF .word 0CFEDh +001B72r 1 EE CF .word 0CFEEh +001B74r 1 EF CF .word 0CFEFh +001B76r 1 F0 CF .word 0CFF0h +001B78r 1 F1 CF .word 0CFF1h +001B7Ar 1 F2 CF .word 0CFF2h +001B7Cr 1 F3 CF .word 0CFF3h +001B7Er 1 F4 CF .word 0CFF4h +001B80r 1 F5 CF .word 0CFF5h +001B82r 1 F6 CF .word 0CFF6h +001B84r 1 F7 CF .word 0CFF7h +001B86r 1 F8 CF .word 0CFF8h +001B88r 1 F9 CF .word 0CFF9h +001B8Ar 1 FA CF .word 0CFFAh +001B8Cr 1 FB CF .word 0CFFBh +001B8Er 1 FC CF .word 0CFFCh +001B90r 1 FD CF .word 0CFFDh +001B92r 1 FE CF .word 0CFFEh +001B94r 1 FF CF .word 0CFFFh +001B96r 1 00 D0 .word 0D000h +001B98r 1 01 D0 .word 0D001h +001B9Ar 1 02 D0 .word 0D002h +001B9Cr 1 03 D0 .word 0D003h +001B9Er 1 04 D0 .word 0D004h +001BA0r 1 05 D0 .word 0D005h +001BA2r 1 06 D0 .word 0D006h +001BA4r 1 07 D0 .word 0D007h +001BA6r 1 08 D0 .word 0D008h +001BA8r 1 09 D0 .word 0D009h +001BAAr 1 0A D0 .word 0D00Ah +001BACr 1 0B D0 .word 0D00Bh +001BAEr 1 0C D0 .word 0D00Ch +001BB0r 1 0D D0 .word 0D00Dh +001BB2r 1 0E D0 .word 0D00Eh +001BB4r 1 0F D0 .word 0D00Fh +001BB6r 1 E1 DF .word 0DFE1h +001BB8r 1 E2 DF .word 0DFE2h +001BBAr 1 E3 DF .word 0DFE3h +001BBCr 1 E4 DF .word 0DFE4h +001BBEr 1 E5 DF .word 0DFE5h +001BC0r 1 E6 DF .word 0DFE6h +001BC2r 1 E7 DF .word 0DFE7h +001BC4r 1 E8 DF .word 0DFE8h +001BC6r 1 E9 DF .word 0DFE9h +001BC8r 1 EA DF .word 0DFEAh +001BCAr 1 EB DF .word 0DFEBh +001BCCr 1 EC DF .word 0DFECh +001BCEr 1 ED DF .word 0DFEDh +001BD0r 1 EE DF .word 0DFEEh +001BD2r 1 EF DF .word 0DFEFh +001BD4r 1 F0 DF .word 0DFF0h +001BD6r 1 F1 DF .word 0DFF1h +001BD8r 1 F2 DF .word 0DFF2h +001BDAr 1 F3 DF .word 0DFF3h +001BDCr 1 F4 DF .word 0DFF4h +001BDEr 1 F5 DF .word 0DFF5h +001BE0r 1 F6 DF .word 0DFF6h +001BE2r 1 F7 DF .word 0DFF7h +001BE4r 1 F8 DF .word 0DFF8h +001BE6r 1 F9 DF .word 0DFF9h +001BE8r 1 FA DF .word 0DFFAh +001BEAr 1 FB DF .word 0DFFBh +001BECr 1 FC DF .word 0DFFCh +001BEEr 1 FD DF .word 0DFFDh +001BF0r 1 FE DF .word 0DFFEh +001BF2r 1 FF DF .word 0DFFFh +001BF4r 1 00 E0 .word 0E000h +001BF6r 1 01 E0 .word 0E001h +001BF8r 1 02 E0 .word 0E002h +001BFAr 1 03 E0 .word 0E003h +001BFCr 1 04 E0 .word 0E004h +001BFEr 1 05 E0 .word 0E005h +001C00r 1 06 E0 .word 0E006h +001C02r 1 07 E0 .word 0E007h +001C04r 1 08 E0 .word 0E008h +001C06r 1 09 E0 .word 0E009h +001C08r 1 0A E0 .word 0E00Ah +001C0Ar 1 0B E0 .word 0E00Bh +001C0Cr 1 0C E0 .word 0E00Ch +001C0Er 1 0D E0 .word 0E00Dh +001C10r 1 0E E0 .word 0E00Eh +001C12r 1 0F E0 .word 0E00Fh +001C14r 1 E1 EF .word 0EFE1h +001C16r 1 E2 EF .word 0EFE2h +001C18r 1 E3 EF .word 0EFE3h +001C1Ar 1 E4 EF .word 0EFE4h +001C1Cr 1 E5 EF .word 0EFE5h +001C1Er 1 E6 EF .word 0EFE6h +001C20r 1 E7 EF .word 0EFE7h +001C22r 1 E8 EF .word 0EFE8h +001C24r 1 E9 EF .word 0EFE9h +001C26r 1 EA EF .word 0EFEAh +001C28r 1 EB EF .word 0EFEBh +001C2Ar 1 EC EF .word 0EFECh +001C2Cr 1 ED EF .word 0EFEDh +001C2Er 1 EE EF .word 0EFEEh +001C30r 1 EF EF .word 0EFEFh +001C32r 1 F0 EF .word 0EFF0h +001C34r 1 F1 EF .word 0EFF1h +001C36r 1 F2 EF .word 0EFF2h +001C38r 1 F3 EF .word 0EFF3h +001C3Ar 1 F4 EF .word 0EFF4h +001C3Cr 1 F5 EF .word 0EFF5h +001C3Er 1 F6 EF .word 0EFF6h +001C40r 1 F7 EF .word 0EFF7h +001C42r 1 F8 EF .word 0EFF8h +001C44r 1 F9 EF .word 0EFF9h +001C46r 1 FA EF .word 0EFFAh +001C48r 1 FB EF .word 0EFFBh +001C4Ar 1 FC EF .word 0EFFCh +001C4Cr 1 FD EF .word 0EFFDh +001C4Er 1 FE EF .word 0EFFEh +001C50r 1 FF EF .word 0EFFFh +001C52r 1 00 F0 .word 0F000h +001C54r 1 01 F0 .word 0F001h +001C56r 1 02 F0 .word 0F002h +001C58r 1 03 F0 .word 0F003h +001C5Ar 1 04 F0 .word 0F004h +001C5Cr 1 05 F0 .word 0F005h +001C5Er 1 06 F0 .word 0F006h +001C60r 1 07 F0 .word 0F007h +001C62r 1 08 F0 .word 0F008h +001C64r 1 09 F0 .word 0F009h +001C66r 1 0A F0 .word 0F00Ah +001C68r 1 0B F0 .word 0F00Bh +001C6Ar 1 0C F0 .word 0F00Ch +001C6Cr 1 0D F0 .word 0F00Dh +001C6Er 1 0E F0 .word 0F00Eh +001C70r 1 0F F0 .word 0F00Fh +001C72r 1 E1 FF .word 0FFE1h +001C74r 1 E2 FF .word 0FFE2h +001C76r 1 E3 FF .word 0FFE3h +001C78r 1 E4 FF .word 0FFE4h +001C7Ar 1 E5 FF .word 0FFE5h +001C7Cr 1 E6 FF .word 0FFE6h +001C7Er 1 E7 FF .word 0FFE7h +001C80r 1 E8 FF .word 0FFE8h +001C82r 1 E9 FF .word 0FFE9h +001C84r 1 EA FF .word 0FFEAh +001C86r 1 EB FF .word 0FFEBh +001C88r 1 EC FF .word 0FFECh +001C8Ar 1 ED FF .word 0FFEDh +001C8Cr 1 EE FF .word 0FFEEh +001C8Er 1 EF FF .word 0FFEFh +001C90r 1 F0 FF .word 0FFF0h +001C92r 1 F1 FF .word 0FFF1h +001C94r 1 F2 FF .word 0FFF2h +001C96r 1 F3 FF .word 0FFF3h +001C98r 1 F4 FF .word 0FFF4h +001C9Ar 1 F5 FF .word 0FFF5h +001C9Cr 1 F6 FF .word 0FFF6h +001C9Er 1 F7 FF .word 0FFF7h +001CA0r 1 F8 FF .word 0FFF8h +001CA2r 1 F9 FF .word 0FFF9h +001CA4r 1 FA FF .word 0FFFAh +001CA6r 1 FB FF .word 0FFFBh +001CA8r 1 FC FF .word 0FFFCh +001CAAr 1 FD FF .word 0FFFDh +001CACr 1 FE FF .word 0FFFEh +001CAEr 1 FF FF .word 0FFFFh 001CB0r 1 -001CB0r 1 ; alternative 4-digit hex values -001CB0r 1 00 00 .word 0000h -001CB2r 1 01 00 .word 0001h -001CB4r 1 02 00 .word 0002h -001CB6r 1 03 00 .word 0003h -001CB8r 1 04 00 .word 0004h -001CBAr 1 05 00 .word 0005h -001CBCr 1 06 00 .word 0006h -001CBEr 1 07 00 .word 0007h -001CC0r 1 08 00 .word 0008h -001CC2r 1 09 00 .word 0009h -001CC4r 1 0A 00 .word 000ah -001CC6r 1 0B 00 .word 000bh -001CC8r 1 0C 00 .word 000ch -001CCAr 1 0D 00 .word 000dh -001CCCr 1 0E 00 .word 000eh -001CCEr 1 0F 00 .word 000fh -001CD0r 1 10 00 .word 0010h -001CD2r 1 11 00 .word 0011h -001CD4r 1 12 00 .word 0012h -001CD6r 1 13 00 .word 0013h -001CD8r 1 70 00 .word 0070h -001CDAr 1 71 00 .word 0071h -001CDCr 1 72 00 .word 0072h -001CDEr 1 73 00 .word 0073h -001CE0r 1 74 00 .word 0074h -001CE2r 1 75 00 .word 0075h -001CE4r 1 76 00 .word 0076h -001CE6r 1 77 00 .word 0077h -001CE8r 1 78 00 .word 0078h -001CEAr 1 79 00 .word 0079h -001CECr 1 7A 00 .word 007ah -001CEEr 1 7B 00 .word 007bh -001CF0r 1 7C 00 .word 007ch -001CF2r 1 7D 00 .word 007dh -001CF4r 1 7E 00 .word 007eh -001CF6r 1 7F 00 .word 007fh -001CF8r 1 80 00 .word 0080h -001CFAr 1 81 00 .word 0081h -001CFCr 1 82 00 .word 0082h -001CFEr 1 83 00 .word 0083h -001D00r 1 84 00 .word 0084h -001D02r 1 85 00 .word 0085h -001D04r 1 86 00 .word 0086h -001D06r 1 F0 00 .word 00f0h -001D08r 1 F1 00 .word 00f1h -001D0Ar 1 F2 00 .word 00f2h -001D0Cr 1 F3 00 .word 00f3h -001D0Er 1 F4 00 .word 00f4h -001D10r 1 F5 00 .word 00f5h -001D12r 1 F6 00 .word 00f6h -001D14r 1 F7 00 .word 00f7h -001D16r 1 F8 00 .word 00f8h -001D18r 1 F9 00 .word 00f9h -001D1Ar 1 FA 00 .word 00fah -001D1Cr 1 FB 00 .word 00fbh -001D1Er 1 FC 00 .word 00fch -001D20r 1 FD 00 .word 00fdh -001D22r 1 FE 00 .word 00feh -001D24r 1 FF 00 .word 00ffh -001D26r 1 00 01 .word 0100h -001D28r 1 01 01 .word 0101h -001D2Ar 1 02 01 .word 0102h -001D2Cr 1 03 01 .word 0103h -001D2Er 1 D2 0F .word 0fd2h -001D30r 1 D3 0F .word 0fd3h -001D32r 1 D4 0F .word 0fd4h -001D34r 1 D5 0F .word 0fd5h -001D36r 1 D6 0F .word 0fd6h -001D38r 1 D7 0F .word 0fd7h -001D3Ar 1 D8 0F .word 0fd8h -001D3Cr 1 D9 0F .word 0fd9h -001D3Er 1 DA 0F .word 0fdah -001D40r 1 DB 0F .word 0fdbh -001D42r 1 DC 0F .word 0fdch -001D44r 1 DD 0F .word 0fddh -001D46r 1 DE 0F .word 0fdeh -001D48r 1 DF 0F .word 0fdfh -001D4Ar 1 E0 0F .word 0fe0h -001D4Cr 1 E1 0F .word 0fe1h -001D4Er 1 E2 0F .word 0fe2h -001D50r 1 E3 0F .word 0fe3h -001D52r 1 E4 0F .word 0fe4h -001D54r 1 E5 0F .word 0fe5h -001D56r 1 E6 0F .word 0fe6h -001D58r 1 E7 0F .word 0fe7h -001D5Ar 1 E8 0F .word 0fe8h -001D5Cr 1 E9 0F .word 0fe9h -001D5Er 1 EA 0F .word 0feah -001D60r 1 EB 0F .word 0febh -001D62r 1 EC 0F .word 0fech -001D64r 1 ED 0F .word 0fedh -001D66r 1 EE 0F .word 0feeh -001D68r 1 EF 0F .word 0fefh -001D6Ar 1 F0 0F .word 0ff0h -001D6Cr 1 F1 0F .word 0ff1h -001D6Er 1 F2 0F .word 0ff2h -001D70r 1 F3 0F .word 0ff3h -001D72r 1 F4 0F .word 0ff4h -001D74r 1 F5 0F .word 0ff5h -001D76r 1 F6 0F .word 0ff6h -001D78r 1 F7 0F .word 0ff7h -001D7Ar 1 F8 0F .word 0ff8h -001D7Cr 1 F9 0F .word 0ff9h -001D7Er 1 FA 0F .word 0ffah -001D80r 1 FB 0F .word 0ffbh -001D82r 1 FC 0F .word 0ffch -001D84r 1 FD 0F .word 0ffdh -001D86r 1 FE 0F .word 0ffeh -001D88r 1 FF 0F .word 0fffh -001D8Ar 1 00 10 .word 1000h -001D8Cr 1 01 10 .word 1001h -001D8Er 1 02 10 .word 1002h -001D90r 1 03 10 .word 1003h -001D92r 1 04 10 .word 1004h -001D94r 1 05 10 .word 1005h -001D96r 1 06 10 .word 1006h -001D98r 1 07 10 .word 1007h -001D9Ar 1 08 10 .word 1008h -001D9Cr 1 F0 7F .word 7ff0h -001D9Er 1 F1 7F .word 7ff1h -001DA0r 1 F2 7F .word 7ff2h -001DA2r 1 F3 7F .word 7ff3h -001DA4r 1 F4 7F .word 7ff4h -001DA6r 1 F5 7F .word 7ff5h -001DA8r 1 F6 7F .word 7ff6h -001DAAr 1 F7 7F .word 7ff7h -001DACr 1 F8 7F .word 7ff8h -001DAEr 1 F9 7F .word 7ff9h -001DB0r 1 FA 7F .word 7ffah -001DB2r 1 FB 7F .word 7ffbh -001DB4r 1 FC 7F .word 7ffch -001DB6r 1 FD 7F .word 7ffdh -001DB8r 1 FE 7F .word 7ffeh -001DBAr 1 FF 7F .word 7fffh -001DBCr 1 00 80 .word 8000h -001DBEr 1 01 80 .word 8001h -001DC0r 1 02 80 .word 8002h -001DC2r 1 03 80 .word 8003h -001DC4r 1 04 80 .word 8004h -001DC6r 1 05 80 .word 8005h -001DC8r 1 06 80 .word 8006h -001DCAr 1 07 80 .word 8007h -001DCCr 1 08 80 .word 8008h -001DCEr 1 09 80 .word 8009h -001DD0r 1 0A 80 .word 800ah -001DD2r 1 0B 80 .word 800bh -001DD4r 1 E1 9F .word 9fe1h -001DD6r 1 E2 9F .word 9fe2h -001DD8r 1 E3 9F .word 9fe3h -001DDAr 1 E4 9F .word 9fe4h -001DDCr 1 E5 9F .word 9fe5h -001DDEr 1 E6 9F .word 9fe6h -001DE0r 1 E7 9F .word 9fe7h -001DE2r 1 E8 9F .word 9fe8h -001DE4r 1 E9 9F .word 9fe9h -001DE6r 1 EA 9F .word 9feah -001DE8r 1 EB 9F .word 9febh -001DEAr 1 EC 9F .word 9fech -001DECr 1 ED 9F .word 9fedh -001DEEr 1 EE 9F .word 9feeh -001DF0r 1 EF 9F .word 9fefh -001DF2r 1 F0 9F .word 9ff0h -001DF4r 1 F1 9F .word 9ff1h -001DF6r 1 F2 9F .word 9ff2h -001DF8r 1 F3 9F .word 9ff3h -001DFAr 1 F4 9F .word 9ff4h -001DFCr 1 F5 9F .word 9ff5h -001DFEr 1 F6 9F .word 9ff6h -001E00r 1 F7 9F .word 9ff7h -001E02r 1 F8 9F .word 9ff8h -001E04r 1 F9 9F .word 9ff9h -001E06r 1 FA 9F .word 9ffah -001E08r 1 FB 9F .word 9ffbh -001E0Ar 1 FC 9F .word 9ffch -001E0Cr 1 FD 9F .word 9ffdh -001E0Er 1 FE 9F .word 9ffeh -001E10r 1 FF 9F .word 9fffh -001E12r 1 00 A0 .word 0a000h -001E14r 1 01 A0 .word 0a001h -001E16r 1 02 A0 .word 0a002h -001E18r 1 03 A0 .word 0a003h -001E1Ar 1 04 A0 .word 0a004h -001E1Cr 1 05 A0 .word 0a005h -001E1Er 1 06 A0 .word 0a006h -001E20r 1 07 A0 .word 0a007h -001E22r 1 08 A0 .word 0a008h -001E24r 1 09 A0 .word 0a009h -001E26r 1 0A A0 .word 0a00ah -001E28r 1 0B A0 .word 0a00bh -001E2Ar 1 0C A0 .word 0a00ch -001E2Cr 1 0D A0 .word 0a00dh -001E2Er 1 0E A0 .word 0a00eh -001E30r 1 0F A0 .word 0a00fh -001E32r 1 E1 AF .word 0afe1h -001E34r 1 E2 AF .word 0afe2h -001E36r 1 E3 AF .word 0afe3h -001E38r 1 E4 AF .word 0afe4h -001E3Ar 1 E5 AF .word 0afe5h -001E3Cr 1 E6 AF .word 0afe6h -001E3Er 1 E7 AF .word 0afe7h -001E40r 1 E8 AF .word 0afe8h -001E42r 1 E9 AF .word 0afe9h -001E44r 1 EA AF .word 0afeah -001E46r 1 EB AF .word 0afebh -001E48r 1 EC AF .word 0afech -001E4Ar 1 ED AF .word 0afedh -001E4Cr 1 EE AF .word 0afeeh -001E4Er 1 EF AF .word 0afefh -001E50r 1 F0 AF .word 0aff0h -001E52r 1 F1 AF .word 0aff1h -001E54r 1 F2 AF .word 0aff2h -001E56r 1 F3 AF .word 0aff3h -001E58r 1 F4 AF .word 0aff4h -001E5Ar 1 F5 AF .word 0aff5h -001E5Cr 1 F6 AF .word 0aff6h -001E5Er 1 F7 AF .word 0aff7h -001E60r 1 F8 AF .word 0aff8h -001E62r 1 F9 AF .word 0aff9h -001E64r 1 FA AF .word 0affah -001E66r 1 FB AF .word 0affbh -001E68r 1 FC AF .word 0affch -001E6Ar 1 FD AF .word 0affdh -001E6Cr 1 FE AF .word 0affeh -001E6Er 1 FF AF .word 0afffh -001E70r 1 00 B0 .word 0b000h -001E72r 1 01 B0 .word 0b001h -001E74r 1 02 B0 .word 0b002h -001E76r 1 03 B0 .word 0b003h -001E78r 1 04 B0 .word 0b004h -001E7Ar 1 05 B0 .word 0b005h -001E7Cr 1 06 B0 .word 0b006h -001E7Er 1 07 B0 .word 0b007h -001E80r 1 08 B0 .word 0b008h -001E82r 1 09 B0 .word 0b009h -001E84r 1 0A B0 .word 0b00ah -001E86r 1 0B B0 .word 0b00bh -001E88r 1 0C B0 .word 0b00ch -001E8Ar 1 0D B0 .word 0b00dh -001E8Cr 1 0E B0 .word 0b00eh -001E8Er 1 0F B0 .word 0b00fh -001E90r 1 E1 BF .word 0bfe1h -001E92r 1 E2 BF .word 0bfe2h -001E94r 1 E3 BF .word 0bfe3h -001E96r 1 E4 BF .word 0bfe4h -001E98r 1 E5 BF .word 0bfe5h -001E9Ar 1 E6 BF .word 0bfe6h -001E9Cr 1 E7 BF .word 0bfe7h -001E9Er 1 E8 BF .word 0bfe8h -001EA0r 1 E9 BF .word 0bfe9h -001EA2r 1 EA BF .word 0bfeah -001EA4r 1 EB BF .word 0bfebh -001EA6r 1 EC BF .word 0bfech -001EA8r 1 ED BF .word 0bfedh -001EAAr 1 EE BF .word 0bfeeh -001EACr 1 EF BF .word 0bfefh -001EAEr 1 F0 BF .word 0bff0h -001EB0r 1 F1 BF .word 0bff1h -001EB2r 1 F2 BF .word 0bff2h -001EB4r 1 F3 BF .word 0bff3h -001EB6r 1 F4 BF .word 0bff4h -001EB8r 1 F5 BF .word 0bff5h -001EBAr 1 F6 BF .word 0bff6h -001EBCr 1 F7 BF .word 0bff7h -001EBEr 1 F8 BF .word 0bff8h -001EC0r 1 F9 BF .word 0bff9h -001EC2r 1 FA BF .word 0bffah -001EC4r 1 FB BF .word 0bffbh -001EC6r 1 FC BF .word 0bffch -001EC8r 1 FD BF .word 0bffdh -001ECAr 1 FE BF .word 0bffeh -001ECCr 1 FF BF .word 0bfffh -001ECEr 1 00 C0 .word 0c000h -001ED0r 1 01 C0 .word 0c001h -001ED2r 1 02 C0 .word 0c002h -001ED4r 1 03 C0 .word 0c003h -001ED6r 1 04 C0 .word 0c004h -001ED8r 1 05 C0 .word 0c005h -001EDAr 1 06 C0 .word 0c006h -001EDCr 1 07 C0 .word 0c007h -001EDEr 1 08 C0 .word 0c008h -001EE0r 1 09 C0 .word 0c009h -001EE2r 1 0A C0 .word 0c00ah -001EE4r 1 0B C0 .word 0c00bh -001EE6r 1 0C C0 .word 0c00ch -001EE8r 1 0D C0 .word 0c00dh -001EEAr 1 0E C0 .word 0c00eh -001EECr 1 0F C0 .word 0c00fh -001EEEr 1 E1 CF .word 0cfe1h -001EF0r 1 E2 CF .word 0cfe2h -001EF2r 1 E3 CF .word 0cfe3h -001EF4r 1 E4 CF .word 0cfe4h -001EF6r 1 E5 CF .word 0cfe5h -001EF8r 1 E6 CF .word 0cfe6h -001EFAr 1 E7 CF .word 0cfe7h -001EFCr 1 E8 CF .word 0cfe8h -001EFEr 1 E9 CF .word 0cfe9h -001F00r 1 EA CF .word 0cfeah -001F02r 1 EB CF .word 0cfebh -001F04r 1 EC CF .word 0cfech -001F06r 1 ED CF .word 0cfedh -001F08r 1 EE CF .word 0cfeeh -001F0Ar 1 EF CF .word 0cfefh -001F0Cr 1 F0 CF .word 0cff0h -001F0Er 1 F1 CF .word 0cff1h -001F10r 1 F2 CF .word 0cff2h -001F12r 1 F3 CF .word 0cff3h -001F14r 1 F4 CF .word 0cff4h -001F16r 1 F5 CF .word 0cff5h -001F18r 1 F6 CF .word 0cff6h -001F1Ar 1 F7 CF .word 0cff7h -001F1Cr 1 F8 CF .word 0cff8h -001F1Er 1 F9 CF .word 0cff9h -001F20r 1 FA CF .word 0cffah -001F22r 1 FB CF .word 0cffbh -001F24r 1 FC CF .word 0cffch -001F26r 1 FD CF .word 0cffdh -001F28r 1 FE CF .word 0cffeh -001F2Ar 1 FF CF .word 0cfffh -001F2Cr 1 00 D0 .word 0d000h -001F2Er 1 01 D0 .word 0d001h -001F30r 1 02 D0 .word 0d002h -001F32r 1 03 D0 .word 0d003h -001F34r 1 04 D0 .word 0d004h -001F36r 1 05 D0 .word 0d005h -001F38r 1 06 D0 .word 0d006h -001F3Ar 1 07 D0 .word 0d007h -001F3Cr 1 08 D0 .word 0d008h -001F3Er 1 09 D0 .word 0d009h -001F40r 1 0A D0 .word 0d00ah -001F42r 1 0B D0 .word 0d00bh -001F44r 1 0C D0 .word 0d00ch -001F46r 1 0D D0 .word 0d00dh -001F48r 1 0E D0 .word 0d00eh -001F4Ar 1 0F D0 .word 0d00fh -001F4Cr 1 E1 DF .word 0dfe1h -001F4Er 1 E2 DF .word 0dfe2h -001F50r 1 E3 DF .word 0dfe3h -001F52r 1 E4 DF .word 0dfe4h -001F54r 1 E5 DF .word 0dfe5h -001F56r 1 E6 DF .word 0dfe6h -001F58r 1 E7 DF .word 0dfe7h -001F5Ar 1 E8 DF .word 0dfe8h -001F5Cr 1 E9 DF .word 0dfe9h -001F5Er 1 EA DF .word 0dfeah -001F60r 1 EB DF .word 0dfebh -001F62r 1 EC DF .word 0dfech -001F64r 1 ED DF .word 0dfedh -001F66r 1 EE DF .word 0dfeeh -001F68r 1 EF DF .word 0dfefh -001F6Ar 1 F0 DF .word 0dff0h -001F6Cr 1 F1 DF .word 0dff1h -001F6Er 1 F2 DF .word 0dff2h -001F70r 1 F3 DF .word 0dff3h -001F72r 1 F4 DF .word 0dff4h -001F74r 1 F5 DF .word 0dff5h -001F76r 1 F6 DF .word 0dff6h -001F78r 1 F7 DF .word 0dff7h -001F7Ar 1 F8 DF .word 0dff8h -001F7Cr 1 F9 DF .word 0dff9h -001F7Er 1 FA DF .word 0dffah -001F80r 1 FB DF .word 0dffbh -001F82r 1 FC DF .word 0dffch -001F84r 1 FD DF .word 0dffdh -001F86r 1 FE DF .word 0dffeh -001F88r 1 FF DF .word 0dfffh -001F8Ar 1 00 E0 .word 0e000h -001F8Cr 1 01 E0 .word 0e001h -001F8Er 1 02 E0 .word 0e002h -001F90r 1 03 E0 .word 0e003h -001F92r 1 04 E0 .word 0e004h -001F94r 1 05 E0 .word 0e005h -001F96r 1 06 E0 .word 0e006h -001F98r 1 07 E0 .word 0e007h -001F9Ar 1 08 E0 .word 0e008h -001F9Cr 1 09 E0 .word 0e009h -001F9Er 1 0A E0 .word 0e00ah -001FA0r 1 0B E0 .word 0e00bh -001FA2r 1 0C E0 .word 0e00ch -001FA4r 1 0D E0 .word 0e00dh -001FA6r 1 0E E0 .word 0e00eh -001FA8r 1 0F E0 .word 0e00fh -001FAAr 1 E1 EF .word 0efe1h -001FACr 1 E2 EF .word 0efe2h -001FAEr 1 E3 EF .word 0efe3h -001FB0r 1 E4 EF .word 0efe4h -001FB2r 1 E5 EF .word 0efe5h -001FB4r 1 E6 EF .word 0efe6h -001FB6r 1 E7 EF .word 0efe7h -001FB8r 1 E8 EF .word 0efe8h -001FBAr 1 E9 EF .word 0efe9h -001FBCr 1 EA EF .word 0efeah -001FBEr 1 EB EF .word 0efebh -001FC0r 1 EC EF .word 0efech -001FC2r 1 ED EF .word 0efedh -001FC4r 1 EE EF .word 0efeeh -001FC6r 1 EF EF .word 0efefh -001FC8r 1 F0 EF .word 0eff0h -001FCAr 1 F1 EF .word 0eff1h -001FCCr 1 F2 EF .word 0eff2h -001FCEr 1 F3 EF .word 0eff3h -001FD0r 1 F4 EF .word 0eff4h -001FD2r 1 F5 EF .word 0eff5h -001FD4r 1 F6 EF .word 0eff6h -001FD6r 1 F7 EF .word 0eff7h -001FD8r 1 F8 EF .word 0eff8h -001FDAr 1 F9 EF .word 0eff9h -001FDCr 1 FA EF .word 0effah -001FDEr 1 FB EF .word 0effbh -001FE0r 1 FC EF .word 0effch -001FE2r 1 FD EF .word 0effdh -001FE4r 1 FE EF .word 0effeh -001FE6r 1 FF EF .word 0efffh -001FE8r 1 00 F0 .word 0f000h -001FEAr 1 01 F0 .word 0f001h -001FECr 1 02 F0 .word 0f002h -001FEEr 1 03 F0 .word 0f003h -001FF0r 1 04 F0 .word 0f004h -001FF2r 1 05 F0 .word 0f005h -001FF4r 1 06 F0 .word 0f006h -001FF6r 1 07 F0 .word 0f007h -001FF8r 1 08 F0 .word 0f008h -001FFAr 1 09 F0 .word 0f009h -001FFCr 1 0A F0 .word 0f00ah -001FFEr 1 0B F0 .word 0f00bh -002000r 1 0C F0 .word 0f00ch -002002r 1 0D F0 .word 0f00dh -002004r 1 0E F0 .word 0f00eh -002006r 1 0F F0 .word 0f00fh -002008r 1 E1 FF .word 0ffe1h -00200Ar 1 E2 FF .word 0ffe2h -00200Cr 1 E3 FF .word 0ffe3h -00200Er 1 E4 FF .word 0ffe4h -002010r 1 E5 FF .word 0ffe5h -002012r 1 E6 FF .word 0ffe6h -002014r 1 E7 FF .word 0ffe7h -002016r 1 E8 FF .word 0ffe8h -002018r 1 E9 FF .word 0ffe9h -00201Ar 1 EA FF .word 0ffeah -00201Cr 1 EB FF .word 0ffebh -00201Er 1 EC FF .word 0ffech -002020r 1 ED FF .word 0ffedh -002022r 1 EE FF .word 0ffeeh -002024r 1 EF FF .word 0ffefh -002026r 1 F0 FF .word 0fff0h -002028r 1 F1 FF .word 0fff1h -00202Ar 1 F2 FF .word 0fff2h -00202Cr 1 F3 FF .word 0fff3h -00202Er 1 F4 FF .word 0fff4h -002030r 1 F5 FF .word 0fff5h -002032r 1 F6 FF .word 0fff6h -002034r 1 F7 FF .word 0fff7h -002036r 1 F8 FF .word 0fff8h -002038r 1 F9 FF .word 0fff9h -00203Ar 1 FA FF .word 0fffah -00203Cr 1 FB FF .word 0fffbh -00203Er 1 FC FF .word 0fffch -002040r 1 FD FF .word 0fffdh -002042r 1 FE FF .word 0fffeh -002044r 1 FF FF .word 0ffffh +001CB0r 1 ; alternative 4-digit hex values +001CB0r 1 00 00 .word 0000h +001CB2r 1 01 00 .word 0001h +001CB4r 1 02 00 .word 0002h +001CB6r 1 03 00 .word 0003h +001CB8r 1 04 00 .word 0004h +001CBAr 1 05 00 .word 0005h +001CBCr 1 06 00 .word 0006h +001CBEr 1 07 00 .word 0007h +001CC0r 1 08 00 .word 0008h +001CC2r 1 09 00 .word 0009h +001CC4r 1 0A 00 .word 000ah +001CC6r 1 0B 00 .word 000bh +001CC8r 1 0C 00 .word 000ch +001CCAr 1 0D 00 .word 000dh +001CCCr 1 0E 00 .word 000eh +001CCEr 1 0F 00 .word 000fh +001CD0r 1 10 00 .word 0010h +001CD2r 1 11 00 .word 0011h +001CD4r 1 12 00 .word 0012h +001CD6r 1 13 00 .word 0013h +001CD8r 1 70 00 .word 0070h +001CDAr 1 71 00 .word 0071h +001CDCr 1 72 00 .word 0072h +001CDEr 1 73 00 .word 0073h +001CE0r 1 74 00 .word 0074h +001CE2r 1 75 00 .word 0075h +001CE4r 1 76 00 .word 0076h +001CE6r 1 77 00 .word 0077h +001CE8r 1 78 00 .word 0078h +001CEAr 1 79 00 .word 0079h +001CECr 1 7A 00 .word 007ah +001CEEr 1 7B 00 .word 007bh +001CF0r 1 7C 00 .word 007ch +001CF2r 1 7D 00 .word 007dh +001CF4r 1 7E 00 .word 007eh +001CF6r 1 7F 00 .word 007fh +001CF8r 1 80 00 .word 0080h +001CFAr 1 81 00 .word 0081h +001CFCr 1 82 00 .word 0082h +001CFEr 1 83 00 .word 0083h +001D00r 1 84 00 .word 0084h +001D02r 1 85 00 .word 0085h +001D04r 1 86 00 .word 0086h +001D06r 1 F0 00 .word 00f0h +001D08r 1 F1 00 .word 00f1h +001D0Ar 1 F2 00 .word 00f2h +001D0Cr 1 F3 00 .word 00f3h +001D0Er 1 F4 00 .word 00f4h +001D10r 1 F5 00 .word 00f5h +001D12r 1 F6 00 .word 00f6h +001D14r 1 F7 00 .word 00f7h +001D16r 1 F8 00 .word 00f8h +001D18r 1 F9 00 .word 00f9h +001D1Ar 1 FA 00 .word 00fah +001D1Cr 1 FB 00 .word 00fbh +001D1Er 1 FC 00 .word 00fch +001D20r 1 FD 00 .word 00fdh +001D22r 1 FE 00 .word 00feh +001D24r 1 FF 00 .word 00ffh +001D26r 1 00 01 .word 0100h +001D28r 1 01 01 .word 0101h +001D2Ar 1 02 01 .word 0102h +001D2Cr 1 03 01 .word 0103h +001D2Er 1 D2 0F .word 0fd2h +001D30r 1 D3 0F .word 0fd3h +001D32r 1 D4 0F .word 0fd4h +001D34r 1 D5 0F .word 0fd5h +001D36r 1 D6 0F .word 0fd6h +001D38r 1 D7 0F .word 0fd7h +001D3Ar 1 D8 0F .word 0fd8h +001D3Cr 1 D9 0F .word 0fd9h +001D3Er 1 DA 0F .word 0fdah +001D40r 1 DB 0F .word 0fdbh +001D42r 1 DC 0F .word 0fdch +001D44r 1 DD 0F .word 0fddh +001D46r 1 DE 0F .word 0fdeh +001D48r 1 DF 0F .word 0fdfh +001D4Ar 1 E0 0F .word 0fe0h +001D4Cr 1 E1 0F .word 0fe1h +001D4Er 1 E2 0F .word 0fe2h +001D50r 1 E3 0F .word 0fe3h +001D52r 1 E4 0F .word 0fe4h +001D54r 1 E5 0F .word 0fe5h +001D56r 1 E6 0F .word 0fe6h +001D58r 1 E7 0F .word 0fe7h +001D5Ar 1 E8 0F .word 0fe8h +001D5Cr 1 E9 0F .word 0fe9h +001D5Er 1 EA 0F .word 0feah +001D60r 1 EB 0F .word 0febh +001D62r 1 EC 0F .word 0fech +001D64r 1 ED 0F .word 0fedh +001D66r 1 EE 0F .word 0feeh +001D68r 1 EF 0F .word 0fefh +001D6Ar 1 F0 0F .word 0ff0h +001D6Cr 1 F1 0F .word 0ff1h +001D6Er 1 F2 0F .word 0ff2h +001D70r 1 F3 0F .word 0ff3h +001D72r 1 F4 0F .word 0ff4h +001D74r 1 F5 0F .word 0ff5h +001D76r 1 F6 0F .word 0ff6h +001D78r 1 F7 0F .word 0ff7h +001D7Ar 1 F8 0F .word 0ff8h +001D7Cr 1 F9 0F .word 0ff9h +001D7Er 1 FA 0F .word 0ffah +001D80r 1 FB 0F .word 0ffbh +001D82r 1 FC 0F .word 0ffch +001D84r 1 FD 0F .word 0ffdh +001D86r 1 FE 0F .word 0ffeh +001D88r 1 FF 0F .word 0fffh +001D8Ar 1 00 10 .word 1000h +001D8Cr 1 01 10 .word 1001h +001D8Er 1 02 10 .word 1002h +001D90r 1 03 10 .word 1003h +001D92r 1 04 10 .word 1004h +001D94r 1 05 10 .word 1005h +001D96r 1 06 10 .word 1006h +001D98r 1 07 10 .word 1007h +001D9Ar 1 08 10 .word 1008h +001D9Cr 1 F0 7F .word 7ff0h +001D9Er 1 F1 7F .word 7ff1h +001DA0r 1 F2 7F .word 7ff2h +001DA2r 1 F3 7F .word 7ff3h +001DA4r 1 F4 7F .word 7ff4h +001DA6r 1 F5 7F .word 7ff5h +001DA8r 1 F6 7F .word 7ff6h +001DAAr 1 F7 7F .word 7ff7h +001DACr 1 F8 7F .word 7ff8h +001DAEr 1 F9 7F .word 7ff9h +001DB0r 1 FA 7F .word 7ffah +001DB2r 1 FB 7F .word 7ffbh +001DB4r 1 FC 7F .word 7ffch +001DB6r 1 FD 7F .word 7ffdh +001DB8r 1 FE 7F .word 7ffeh +001DBAr 1 FF 7F .word 7fffh +001DBCr 1 00 80 .word 8000h +001DBEr 1 01 80 .word 8001h +001DC0r 1 02 80 .word 8002h +001DC2r 1 03 80 .word 8003h +001DC4r 1 04 80 .word 8004h +001DC6r 1 05 80 .word 8005h +001DC8r 1 06 80 .word 8006h +001DCAr 1 07 80 .word 8007h +001DCCr 1 08 80 .word 8008h +001DCEr 1 09 80 .word 8009h +001DD0r 1 0A 80 .word 800ah +001DD2r 1 0B 80 .word 800bh +001DD4r 1 E1 9F .word 9fe1h +001DD6r 1 E2 9F .word 9fe2h +001DD8r 1 E3 9F .word 9fe3h +001DDAr 1 E4 9F .word 9fe4h +001DDCr 1 E5 9F .word 9fe5h +001DDEr 1 E6 9F .word 9fe6h +001DE0r 1 E7 9F .word 9fe7h +001DE2r 1 E8 9F .word 9fe8h +001DE4r 1 E9 9F .word 9fe9h +001DE6r 1 EA 9F .word 9feah +001DE8r 1 EB 9F .word 9febh +001DEAr 1 EC 9F .word 9fech +001DECr 1 ED 9F .word 9fedh +001DEEr 1 EE 9F .word 9feeh +001DF0r 1 EF 9F .word 9fefh +001DF2r 1 F0 9F .word 9ff0h +001DF4r 1 F1 9F .word 9ff1h +001DF6r 1 F2 9F .word 9ff2h +001DF8r 1 F3 9F .word 9ff3h +001DFAr 1 F4 9F .word 9ff4h +001DFCr 1 F5 9F .word 9ff5h +001DFEr 1 F6 9F .word 9ff6h +001E00r 1 F7 9F .word 9ff7h +001E02r 1 F8 9F .word 9ff8h +001E04r 1 F9 9F .word 9ff9h +001E06r 1 FA 9F .word 9ffah +001E08r 1 FB 9F .word 9ffbh +001E0Ar 1 FC 9F .word 9ffch +001E0Cr 1 FD 9F .word 9ffdh +001E0Er 1 FE 9F .word 9ffeh +001E10r 1 FF 9F .word 9fffh +001E12r 1 00 A0 .word 0a000h +001E14r 1 01 A0 .word 0a001h +001E16r 1 02 A0 .word 0a002h +001E18r 1 03 A0 .word 0a003h +001E1Ar 1 04 A0 .word 0a004h +001E1Cr 1 05 A0 .word 0a005h +001E1Er 1 06 A0 .word 0a006h +001E20r 1 07 A0 .word 0a007h +001E22r 1 08 A0 .word 0a008h +001E24r 1 09 A0 .word 0a009h +001E26r 1 0A A0 .word 0a00ah +001E28r 1 0B A0 .word 0a00bh +001E2Ar 1 0C A0 .word 0a00ch +001E2Cr 1 0D A0 .word 0a00dh +001E2Er 1 0E A0 .word 0a00eh +001E30r 1 0F A0 .word 0a00fh +001E32r 1 E1 AF .word 0afe1h +001E34r 1 E2 AF .word 0afe2h +001E36r 1 E3 AF .word 0afe3h +001E38r 1 E4 AF .word 0afe4h +001E3Ar 1 E5 AF .word 0afe5h +001E3Cr 1 E6 AF .word 0afe6h +001E3Er 1 E7 AF .word 0afe7h +001E40r 1 E8 AF .word 0afe8h +001E42r 1 E9 AF .word 0afe9h +001E44r 1 EA AF .word 0afeah +001E46r 1 EB AF .word 0afebh +001E48r 1 EC AF .word 0afech +001E4Ar 1 ED AF .word 0afedh +001E4Cr 1 EE AF .word 0afeeh +001E4Er 1 EF AF .word 0afefh +001E50r 1 F0 AF .word 0aff0h +001E52r 1 F1 AF .word 0aff1h +001E54r 1 F2 AF .word 0aff2h +001E56r 1 F3 AF .word 0aff3h +001E58r 1 F4 AF .word 0aff4h +001E5Ar 1 F5 AF .word 0aff5h +001E5Cr 1 F6 AF .word 0aff6h +001E5Er 1 F7 AF .word 0aff7h +001E60r 1 F8 AF .word 0aff8h +001E62r 1 F9 AF .word 0aff9h +001E64r 1 FA AF .word 0affah +001E66r 1 FB AF .word 0affbh +001E68r 1 FC AF .word 0affch +001E6Ar 1 FD AF .word 0affdh +001E6Cr 1 FE AF .word 0affeh +001E6Er 1 FF AF .word 0afffh +001E70r 1 00 B0 .word 0b000h +001E72r 1 01 B0 .word 0b001h +001E74r 1 02 B0 .word 0b002h +001E76r 1 03 B0 .word 0b003h +001E78r 1 04 B0 .word 0b004h +001E7Ar 1 05 B0 .word 0b005h +001E7Cr 1 06 B0 .word 0b006h +001E7Er 1 07 B0 .word 0b007h +001E80r 1 08 B0 .word 0b008h +001E82r 1 09 B0 .word 0b009h +001E84r 1 0A B0 .word 0b00ah +001E86r 1 0B B0 .word 0b00bh +001E88r 1 0C B0 .word 0b00ch +001E8Ar 1 0D B0 .word 0b00dh +001E8Cr 1 0E B0 .word 0b00eh +001E8Er 1 0F B0 .word 0b00fh +001E90r 1 E1 BF .word 0bfe1h +001E92r 1 E2 BF .word 0bfe2h +001E94r 1 E3 BF .word 0bfe3h +001E96r 1 E4 BF .word 0bfe4h +001E98r 1 E5 BF .word 0bfe5h +001E9Ar 1 E6 BF .word 0bfe6h +001E9Cr 1 E7 BF .word 0bfe7h +001E9Er 1 E8 BF .word 0bfe8h +001EA0r 1 E9 BF .word 0bfe9h +001EA2r 1 EA BF .word 0bfeah +001EA4r 1 EB BF .word 0bfebh +001EA6r 1 EC BF .word 0bfech +001EA8r 1 ED BF .word 0bfedh +001EAAr 1 EE BF .word 0bfeeh +001EACr 1 EF BF .word 0bfefh +001EAEr 1 F0 BF .word 0bff0h +001EB0r 1 F1 BF .word 0bff1h +001EB2r 1 F2 BF .word 0bff2h +001EB4r 1 F3 BF .word 0bff3h +001EB6r 1 F4 BF .word 0bff4h +001EB8r 1 F5 BF .word 0bff5h +001EBAr 1 F6 BF .word 0bff6h +001EBCr 1 F7 BF .word 0bff7h +001EBEr 1 F8 BF .word 0bff8h +001EC0r 1 F9 BF .word 0bff9h +001EC2r 1 FA BF .word 0bffah +001EC4r 1 FB BF .word 0bffbh +001EC6r 1 FC BF .word 0bffch +001EC8r 1 FD BF .word 0bffdh +001ECAr 1 FE BF .word 0bffeh +001ECCr 1 FF BF .word 0bfffh +001ECEr 1 00 C0 .word 0c000h +001ED0r 1 01 C0 .word 0c001h +001ED2r 1 02 C0 .word 0c002h +001ED4r 1 03 C0 .word 0c003h +001ED6r 1 04 C0 .word 0c004h +001ED8r 1 05 C0 .word 0c005h +001EDAr 1 06 C0 .word 0c006h +001EDCr 1 07 C0 .word 0c007h +001EDEr 1 08 C0 .word 0c008h +001EE0r 1 09 C0 .word 0c009h +001EE2r 1 0A C0 .word 0c00ah +001EE4r 1 0B C0 .word 0c00bh +001EE6r 1 0C C0 .word 0c00ch +001EE8r 1 0D C0 .word 0c00dh +001EEAr 1 0E C0 .word 0c00eh +001EECr 1 0F C0 .word 0c00fh +001EEEr 1 E1 CF .word 0cfe1h +001EF0r 1 E2 CF .word 0cfe2h +001EF2r 1 E3 CF .word 0cfe3h +001EF4r 1 E4 CF .word 0cfe4h +001EF6r 1 E5 CF .word 0cfe5h +001EF8r 1 E6 CF .word 0cfe6h +001EFAr 1 E7 CF .word 0cfe7h +001EFCr 1 E8 CF .word 0cfe8h +001EFEr 1 E9 CF .word 0cfe9h +001F00r 1 EA CF .word 0cfeah +001F02r 1 EB CF .word 0cfebh +001F04r 1 EC CF .word 0cfech +001F06r 1 ED CF .word 0cfedh +001F08r 1 EE CF .word 0cfeeh +001F0Ar 1 EF CF .word 0cfefh +001F0Cr 1 F0 CF .word 0cff0h +001F0Er 1 F1 CF .word 0cff1h +001F10r 1 F2 CF .word 0cff2h +001F12r 1 F3 CF .word 0cff3h +001F14r 1 F4 CF .word 0cff4h +001F16r 1 F5 CF .word 0cff5h +001F18r 1 F6 CF .word 0cff6h +001F1Ar 1 F7 CF .word 0cff7h +001F1Cr 1 F8 CF .word 0cff8h +001F1Er 1 F9 CF .word 0cff9h +001F20r 1 FA CF .word 0cffah +001F22r 1 FB CF .word 0cffbh +001F24r 1 FC CF .word 0cffch +001F26r 1 FD CF .word 0cffdh +001F28r 1 FE CF .word 0cffeh +001F2Ar 1 FF CF .word 0cfffh +001F2Cr 1 00 D0 .word 0d000h +001F2Er 1 01 D0 .word 0d001h +001F30r 1 02 D0 .word 0d002h +001F32r 1 03 D0 .word 0d003h +001F34r 1 04 D0 .word 0d004h +001F36r 1 05 D0 .word 0d005h +001F38r 1 06 D0 .word 0d006h +001F3Ar 1 07 D0 .word 0d007h +001F3Cr 1 08 D0 .word 0d008h +001F3Er 1 09 D0 .word 0d009h +001F40r 1 0A D0 .word 0d00ah +001F42r 1 0B D0 .word 0d00bh +001F44r 1 0C D0 .word 0d00ch +001F46r 1 0D D0 .word 0d00dh +001F48r 1 0E D0 .word 0d00eh +001F4Ar 1 0F D0 .word 0d00fh +001F4Cr 1 E1 DF .word 0dfe1h +001F4Er 1 E2 DF .word 0dfe2h +001F50r 1 E3 DF .word 0dfe3h +001F52r 1 E4 DF .word 0dfe4h +001F54r 1 E5 DF .word 0dfe5h +001F56r 1 E6 DF .word 0dfe6h +001F58r 1 E7 DF .word 0dfe7h +001F5Ar 1 E8 DF .word 0dfe8h +001F5Cr 1 E9 DF .word 0dfe9h +001F5Er 1 EA DF .word 0dfeah +001F60r 1 EB DF .word 0dfebh +001F62r 1 EC DF .word 0dfech +001F64r 1 ED DF .word 0dfedh +001F66r 1 EE DF .word 0dfeeh +001F68r 1 EF DF .word 0dfefh +001F6Ar 1 F0 DF .word 0dff0h +001F6Cr 1 F1 DF .word 0dff1h +001F6Er 1 F2 DF .word 0dff2h +001F70r 1 F3 DF .word 0dff3h +001F72r 1 F4 DF .word 0dff4h +001F74r 1 F5 DF .word 0dff5h +001F76r 1 F6 DF .word 0dff6h +001F78r 1 F7 DF .word 0dff7h +001F7Ar 1 F8 DF .word 0dff8h +001F7Cr 1 F9 DF .word 0dff9h +001F7Er 1 FA DF .word 0dffah +001F80r 1 FB DF .word 0dffbh +001F82r 1 FC DF .word 0dffch +001F84r 1 FD DF .word 0dffdh +001F86r 1 FE DF .word 0dffeh +001F88r 1 FF DF .word 0dfffh +001F8Ar 1 00 E0 .word 0e000h +001F8Cr 1 01 E0 .word 0e001h +001F8Er 1 02 E0 .word 0e002h +001F90r 1 03 E0 .word 0e003h +001F92r 1 04 E0 .word 0e004h +001F94r 1 05 E0 .word 0e005h +001F96r 1 06 E0 .word 0e006h +001F98r 1 07 E0 .word 0e007h +001F9Ar 1 08 E0 .word 0e008h +001F9Cr 1 09 E0 .word 0e009h +001F9Er 1 0A E0 .word 0e00ah +001FA0r 1 0B E0 .word 0e00bh +001FA2r 1 0C E0 .word 0e00ch +001FA4r 1 0D E0 .word 0e00dh +001FA6r 1 0E E0 .word 0e00eh +001FA8r 1 0F E0 .word 0e00fh +001FAAr 1 E1 EF .word 0efe1h +001FACr 1 E2 EF .word 0efe2h +001FAEr 1 E3 EF .word 0efe3h +001FB0r 1 E4 EF .word 0efe4h +001FB2r 1 E5 EF .word 0efe5h +001FB4r 1 E6 EF .word 0efe6h +001FB6r 1 E7 EF .word 0efe7h +001FB8r 1 E8 EF .word 0efe8h +001FBAr 1 E9 EF .word 0efe9h +001FBCr 1 EA EF .word 0efeah +001FBEr 1 EB EF .word 0efebh +001FC0r 1 EC EF .word 0efech +001FC2r 1 ED EF .word 0efedh +001FC4r 1 EE EF .word 0efeeh +001FC6r 1 EF EF .word 0efefh +001FC8r 1 F0 EF .word 0eff0h +001FCAr 1 F1 EF .word 0eff1h +001FCCr 1 F2 EF .word 0eff2h +001FCEr 1 F3 EF .word 0eff3h +001FD0r 1 F4 EF .word 0eff4h +001FD2r 1 F5 EF .word 0eff5h +001FD4r 1 F6 EF .word 0eff6h +001FD6r 1 F7 EF .word 0eff7h +001FD8r 1 F8 EF .word 0eff8h +001FDAr 1 F9 EF .word 0eff9h +001FDCr 1 FA EF .word 0effah +001FDEr 1 FB EF .word 0effbh +001FE0r 1 FC EF .word 0effch +001FE2r 1 FD EF .word 0effdh +001FE4r 1 FE EF .word 0effeh +001FE6r 1 FF EF .word 0efffh +001FE8r 1 00 F0 .word 0f000h +001FEAr 1 01 F0 .word 0f001h +001FECr 1 02 F0 .word 0f002h +001FEEr 1 03 F0 .word 0f003h +001FF0r 1 04 F0 .word 0f004h +001FF2r 1 05 F0 .word 0f005h +001FF4r 1 06 F0 .word 0f006h +001FF6r 1 07 F0 .word 0f007h +001FF8r 1 08 F0 .word 0f008h +001FFAr 1 09 F0 .word 0f009h +001FFCr 1 0A F0 .word 0f00ah +001FFEr 1 0B F0 .word 0f00bh +002000r 1 0C F0 .word 0f00ch +002002r 1 0D F0 .word 0f00dh +002004r 1 0E F0 .word 0f00eh +002006r 1 0F F0 .word 0f00fh +002008r 1 E1 FF .word 0ffe1h +00200Ar 1 E2 FF .word 0ffe2h +00200Cr 1 E3 FF .word 0ffe3h +00200Er 1 E4 FF .word 0ffe4h +002010r 1 E5 FF .word 0ffe5h +002012r 1 E6 FF .word 0ffe6h +002014r 1 E7 FF .word 0ffe7h +002016r 1 E8 FF .word 0ffe8h +002018r 1 E9 FF .word 0ffe9h +00201Ar 1 EA FF .word 0ffeah +00201Cr 1 EB FF .word 0ffebh +00201Er 1 EC FF .word 0ffech +002020r 1 ED FF .word 0ffedh +002022r 1 EE FF .word 0ffeeh +002024r 1 EF FF .word 0ffefh +002026r 1 F0 FF .word 0fff0h +002028r 1 F1 FF .word 0fff1h +00202Ar 1 F2 FF .word 0fff2h +00202Cr 1 F3 FF .word 0fff3h +00202Er 1 F4 FF .word 0fff4h +002030r 1 F5 FF .word 0fff5h +002032r 1 F6 FF .word 0fff6h +002034r 1 F7 FF .word 0fff7h +002036r 1 F8 FF .word 0fff8h +002038r 1 F9 FF .word 0fff9h +00203Ar 1 FA FF .word 0fffah +00203Cr 1 FB FF .word 0fffbh +00203Er 1 FC FF .word 0fffch +002040r 1 FD FF .word 0fffdh +002042r 1 FE FF .word 0fffeh +002044r 1 FF FF .word 0ffffh 002046r 1 -002046r 1 ; alternative 4-digit hex values, uppercase -002046r 1 00 00 .word 0000h -002048r 1 01 00 .word 0001h -00204Ar 1 02 00 .word 0002h -00204Cr 1 03 00 .word 0003h -00204Er 1 04 00 .word 0004h -002050r 1 05 00 .word 0005h -002052r 1 06 00 .word 0006h -002054r 1 07 00 .word 0007h -002056r 1 08 00 .word 0008h -002058r 1 09 00 .word 0009h -00205Ar 1 0A 00 .word 000Ah -00205Cr 1 0B 00 .word 000Bh -00205Er 1 0C 00 .word 000Ch -002060r 1 0D 00 .word 000Dh -002062r 1 0E 00 .word 000Eh -002064r 1 0F 00 .word 000Fh -002066r 1 10 00 .word 0010h -002068r 1 11 00 .word 0011h -00206Ar 1 12 00 .word 0012h -00206Cr 1 13 00 .word 0013h -00206Er 1 70 00 .word 0070h -002070r 1 71 00 .word 0071h -002072r 1 72 00 .word 0072h -002074r 1 73 00 .word 0073h -002076r 1 74 00 .word 0074h -002078r 1 75 00 .word 0075h -00207Ar 1 76 00 .word 0076h -00207Cr 1 77 00 .word 0077h -00207Er 1 78 00 .word 0078h -002080r 1 79 00 .word 0079h -002082r 1 7A 00 .word 007Ah -002084r 1 7B 00 .word 007Bh -002086r 1 7C 00 .word 007Ch -002088r 1 7D 00 .word 007Dh -00208Ar 1 7E 00 .word 007Eh -00208Cr 1 7F 00 .word 007Fh -00208Er 1 80 00 .word 0080h -002090r 1 81 00 .word 0081h -002092r 1 82 00 .word 0082h -002094r 1 83 00 .word 0083h -002096r 1 84 00 .word 0084h -002098r 1 85 00 .word 0085h -00209Ar 1 86 00 .word 0086h -00209Cr 1 F0 00 .word 00F0h -00209Er 1 F1 00 .word 00F1h -0020A0r 1 F2 00 .word 00F2h -0020A2r 1 F3 00 .word 00F3h -0020A4r 1 F4 00 .word 00F4h -0020A6r 1 F5 00 .word 00F5h -0020A8r 1 F6 00 .word 00F6h -0020AAr 1 F7 00 .word 00F7h -0020ACr 1 F8 00 .word 00F8h -0020AEr 1 F9 00 .word 00F9h -0020B0r 1 FA 00 .word 00FAh -0020B2r 1 FB 00 .word 00FBh -0020B4r 1 FC 00 .word 00FCh -0020B6r 1 FD 00 .word 00FDh -0020B8r 1 FE 00 .word 00FEh -0020BAr 1 FF 00 .word 00FFh -0020BCr 1 00 01 .word 0100h -0020BEr 1 01 01 .word 0101h -0020C0r 1 02 01 .word 0102h -0020C2r 1 03 01 .word 0103h -0020C4r 1 D2 0F .word 0FD2h -0020C6r 1 D3 0F .word 0FD3h -0020C8r 1 D4 0F .word 0FD4h -0020CAr 1 D5 0F .word 0FD5h -0020CCr 1 D6 0F .word 0FD6h -0020CEr 1 D7 0F .word 0FD7h -0020D0r 1 D8 0F .word 0FD8h -0020D2r 1 D9 0F .word 0FD9h -0020D4r 1 DA 0F .word 0FDAh -0020D6r 1 DB 0F .word 0FDBh -0020D8r 1 DC 0F .word 0FDCh -0020DAr 1 DD 0F .word 0FDDh -0020DCr 1 DE 0F .word 0FDEh -0020DEr 1 DF 0F .word 0FDFh -0020E0r 1 E0 0F .word 0FE0h -0020E2r 1 E1 0F .word 0FE1h -0020E4r 1 E2 0F .word 0FE2h -0020E6r 1 E3 0F .word 0FE3h -0020E8r 1 E4 0F .word 0FE4h -0020EAr 1 E5 0F .word 0FE5h -0020ECr 1 E6 0F .word 0FE6h -0020EEr 1 E7 0F .word 0FE7h -0020F0r 1 E8 0F .word 0FE8h -0020F2r 1 E9 0F .word 0FE9h -0020F4r 1 EA 0F .word 0FEAh -0020F6r 1 EB 0F .word 0FEBh -0020F8r 1 EC 0F .word 0FECh -0020FAr 1 ED 0F .word 0FEDh -0020FCr 1 EE 0F .word 0FEEh -0020FEr 1 EF 0F .word 0FEFh -002100r 1 F0 0F .word 0FF0h -002102r 1 F1 0F .word 0FF1h -002104r 1 F2 0F .word 0FF2h -002106r 1 F3 0F .word 0FF3h -002108r 1 F4 0F .word 0FF4h -00210Ar 1 F5 0F .word 0FF5h -00210Cr 1 F6 0F .word 0FF6h -00210Er 1 F7 0F .word 0FF7h -002110r 1 F8 0F .word 0FF8h -002112r 1 F9 0F .word 0FF9h -002114r 1 FA 0F .word 0FFAh -002116r 1 FB 0F .word 0FFBh -002118r 1 FC 0F .word 0FFCh -00211Ar 1 FD 0F .word 0FFDh -00211Cr 1 FE 0F .word 0FFEh -00211Er 1 FF 0F .word 0FFFh -002120r 1 00 10 .word 1000h -002122r 1 01 10 .word 1001h -002124r 1 02 10 .word 1002h -002126r 1 03 10 .word 1003h -002128r 1 04 10 .word 1004h -00212Ar 1 05 10 .word 1005h -00212Cr 1 06 10 .word 1006h -00212Er 1 07 10 .word 1007h -002130r 1 08 10 .word 1008h -002132r 1 F0 7F .word 7FF0h -002134r 1 F1 7F .word 7FF1h -002136r 1 F2 7F .word 7FF2h -002138r 1 F3 7F .word 7FF3h -00213Ar 1 F4 7F .word 7FF4h -00213Cr 1 F5 7F .word 7FF5h -00213Er 1 F6 7F .word 7FF6h -002140r 1 F7 7F .word 7FF7h -002142r 1 F8 7F .word 7FF8h -002144r 1 F9 7F .word 7FF9h -002146r 1 FA 7F .word 7FFAh -002148r 1 FB 7F .word 7FFBh -00214Ar 1 FC 7F .word 7FFCh -00214Cr 1 FD 7F .word 7FFDh -00214Er 1 FE 7F .word 7FFEh -002150r 1 FF 7F .word 7FFFh -002152r 1 00 80 .word 8000h -002154r 1 01 80 .word 8001h -002156r 1 02 80 .word 8002h -002158r 1 03 80 .word 8003h -00215Ar 1 04 80 .word 8004h -00215Cr 1 05 80 .word 8005h -00215Er 1 06 80 .word 8006h -002160r 1 07 80 .word 8007h -002162r 1 08 80 .word 8008h -002164r 1 09 80 .word 8009h -002166r 1 0A 80 .word 800Ah -002168r 1 0B 80 .word 800Bh -00216Ar 1 E1 9F .word 9FE1h -00216Cr 1 E2 9F .word 9FE2h -00216Er 1 E3 9F .word 9FE3h -002170r 1 E4 9F .word 9FE4h -002172r 1 E5 9F .word 9FE5h -002174r 1 E6 9F .word 9FE6h -002176r 1 E7 9F .word 9FE7h -002178r 1 E8 9F .word 9FE8h -00217Ar 1 E9 9F .word 9FE9h -00217Cr 1 EA 9F .word 9FEAh -00217Er 1 EB 9F .word 9FEBh -002180r 1 EC 9F .word 9FECh -002182r 1 ED 9F .word 9FEDh -002184r 1 EE 9F .word 9FEEh -002186r 1 EF 9F .word 9FEFh -002188r 1 F0 9F .word 9FF0h -00218Ar 1 F1 9F .word 9FF1h -00218Cr 1 F2 9F .word 9FF2h -00218Er 1 F3 9F .word 9FF3h -002190r 1 F4 9F .word 9FF4h -002192r 1 F5 9F .word 9FF5h -002194r 1 F6 9F .word 9FF6h -002196r 1 F7 9F .word 9FF7h -002198r 1 F8 9F .word 9FF8h -00219Ar 1 F9 9F .word 9FF9h -00219Cr 1 FA 9F .word 9FFAh -00219Er 1 FB 9F .word 9FFBh -0021A0r 1 FC 9F .word 9FFCh -0021A2r 1 FD 9F .word 9FFDh -0021A4r 1 FE 9F .word 9FFEh -0021A6r 1 FF 9F .word 9FFFh -0021A8r 1 00 A0 .word 0A000h -0021AAr 1 01 A0 .word 0A001h -0021ACr 1 02 A0 .word 0A002h -0021AEr 1 03 A0 .word 0A003h -0021B0r 1 04 A0 .word 0A004h -0021B2r 1 05 A0 .word 0A005h -0021B4r 1 06 A0 .word 0A006h -0021B6r 1 07 A0 .word 0A007h -0021B8r 1 08 A0 .word 0A008h -0021BAr 1 09 A0 .word 0A009h -0021BCr 1 0A A0 .word 0A00Ah -0021BEr 1 0B A0 .word 0A00Bh -0021C0r 1 0C A0 .word 0A00Ch -0021C2r 1 0D A0 .word 0A00Dh -0021C4r 1 0E A0 .word 0A00Eh -0021C6r 1 0F A0 .word 0A00Fh -0021C8r 1 E1 AF .word 0AFE1h -0021CAr 1 E2 AF .word 0AFE2h -0021CCr 1 E3 AF .word 0AFE3h -0021CEr 1 E4 AF .word 0AFE4h -0021D0r 1 E5 AF .word 0AFE5h -0021D2r 1 E6 AF .word 0AFE6h -0021D4r 1 E7 AF .word 0AFE7h -0021D6r 1 E8 AF .word 0AFE8h -0021D8r 1 E9 AF .word 0AFE9h -0021DAr 1 EA AF .word 0AFEAh -0021DCr 1 EB AF .word 0AFEBh -0021DEr 1 EC AF .word 0AFECh -0021E0r 1 ED AF .word 0AFEDh -0021E2r 1 EE AF .word 0AFEEh -0021E4r 1 EF AF .word 0AFEFh -0021E6r 1 F0 AF .word 0AFF0h -0021E8r 1 F1 AF .word 0AFF1h -0021EAr 1 F2 AF .word 0AFF2h -0021ECr 1 F3 AF .word 0AFF3h -0021EEr 1 F4 AF .word 0AFF4h -0021F0r 1 F5 AF .word 0AFF5h -0021F2r 1 F6 AF .word 0AFF6h -0021F4r 1 F7 AF .word 0AFF7h -0021F6r 1 F8 AF .word 0AFF8h -0021F8r 1 F9 AF .word 0AFF9h -0021FAr 1 FA AF .word 0AFFAh -0021FCr 1 FB AF .word 0AFFBh -0021FEr 1 FC AF .word 0AFFCh -002200r 1 FD AF .word 0AFFDh -002202r 1 FE AF .word 0AFFEh -002204r 1 FF AF .word 0AFFFh -002206r 1 00 B0 .word 0B000h -002208r 1 01 B0 .word 0B001h -00220Ar 1 02 B0 .word 0B002h -00220Cr 1 03 B0 .word 0B003h -00220Er 1 04 B0 .word 0B004h -002210r 1 05 B0 .word 0B005h -002212r 1 06 B0 .word 0B006h -002214r 1 07 B0 .word 0B007h -002216r 1 08 B0 .word 0B008h -002218r 1 09 B0 .word 0B009h -00221Ar 1 0A B0 .word 0B00Ah -00221Cr 1 0B B0 .word 0B00Bh -00221Er 1 0C B0 .word 0B00Ch -002220r 1 0D B0 .word 0B00Dh -002222r 1 0E B0 .word 0B00Eh -002224r 1 0F B0 .word 0B00Fh -002226r 1 E1 BF .word 0BFE1h -002228r 1 E2 BF .word 0BFE2h -00222Ar 1 E3 BF .word 0BFE3h -00222Cr 1 E4 BF .word 0BFE4h -00222Er 1 E5 BF .word 0BFE5h -002230r 1 E6 BF .word 0BFE6h -002232r 1 E7 BF .word 0BFE7h -002234r 1 E8 BF .word 0BFE8h -002236r 1 E9 BF .word 0BFE9h -002238r 1 EA BF .word 0BFEAh -00223Ar 1 EB BF .word 0BFEBh -00223Cr 1 EC BF .word 0BFECh -00223Er 1 ED BF .word 0BFEDh -002240r 1 EE BF .word 0BFEEh -002242r 1 EF BF .word 0BFEFh -002244r 1 F0 BF .word 0BFF0h -002246r 1 F1 BF .word 0BFF1h -002248r 1 F2 BF .word 0BFF2h -00224Ar 1 F3 BF .word 0BFF3h -00224Cr 1 F4 BF .word 0BFF4h -00224Er 1 F5 BF .word 0BFF5h -002250r 1 F6 BF .word 0BFF6h -002252r 1 F7 BF .word 0BFF7h -002254r 1 F8 BF .word 0BFF8h -002256r 1 F9 BF .word 0BFF9h -002258r 1 FA BF .word 0BFFAh -00225Ar 1 FB BF .word 0BFFBh -00225Cr 1 FC BF .word 0BFFCh -00225Er 1 FD BF .word 0BFFDh -002260r 1 FE BF .word 0BFFEh -002262r 1 FF BF .word 0BFFFh -002264r 1 00 C0 .word 0C000h -002266r 1 01 C0 .word 0C001h -002268r 1 02 C0 .word 0C002h -00226Ar 1 03 C0 .word 0C003h -00226Cr 1 04 C0 .word 0C004h -00226Er 1 05 C0 .word 0C005h -002270r 1 06 C0 .word 0C006h -002272r 1 07 C0 .word 0C007h -002274r 1 08 C0 .word 0C008h -002276r 1 09 C0 .word 0C009h -002278r 1 0A C0 .word 0C00Ah -00227Ar 1 0B C0 .word 0C00Bh -00227Cr 1 0C C0 .word 0C00Ch -00227Er 1 0D C0 .word 0C00Dh -002280r 1 0E C0 .word 0C00Eh -002282r 1 0F C0 .word 0C00Fh -002284r 1 E1 CF .word 0CFE1h -002286r 1 E2 CF .word 0CFE2h -002288r 1 E3 CF .word 0CFE3h -00228Ar 1 E4 CF .word 0CFE4h -00228Cr 1 E5 CF .word 0CFE5h -00228Er 1 E6 CF .word 0CFE6h -002290r 1 E7 CF .word 0CFE7h -002292r 1 E8 CF .word 0CFE8h -002294r 1 E9 CF .word 0CFE9h -002296r 1 EA CF .word 0CFEAh -002298r 1 EB CF .word 0CFEBh -00229Ar 1 EC CF .word 0CFECh -00229Cr 1 ED CF .word 0CFEDh -00229Er 1 EE CF .word 0CFEEh -0022A0r 1 EF CF .word 0CFEFh -0022A2r 1 F0 CF .word 0CFF0h -0022A4r 1 F1 CF .word 0CFF1h -0022A6r 1 F2 CF .word 0CFF2h -0022A8r 1 F3 CF .word 0CFF3h -0022AAr 1 F4 CF .word 0CFF4h -0022ACr 1 F5 CF .word 0CFF5h -0022AEr 1 F6 CF .word 0CFF6h -0022B0r 1 F7 CF .word 0CFF7h -0022B2r 1 F8 CF .word 0CFF8h -0022B4r 1 F9 CF .word 0CFF9h -0022B6r 1 FA CF .word 0CFFAh -0022B8r 1 FB CF .word 0CFFBh -0022BAr 1 FC CF .word 0CFFCh -0022BCr 1 FD CF .word 0CFFDh -0022BEr 1 FE CF .word 0CFFEh -0022C0r 1 FF CF .word 0CFFFh -0022C2r 1 00 D0 .word 0D000h -0022C4r 1 01 D0 .word 0D001h -0022C6r 1 02 D0 .word 0D002h -0022C8r 1 03 D0 .word 0D003h -0022CAr 1 04 D0 .word 0D004h -0022CCr 1 05 D0 .word 0D005h -0022CEr 1 06 D0 .word 0D006h -0022D0r 1 07 D0 .word 0D007h -0022D2r 1 08 D0 .word 0D008h -0022D4r 1 09 D0 .word 0D009h -0022D6r 1 0A D0 .word 0D00Ah -0022D8r 1 0B D0 .word 0D00Bh -0022DAr 1 0C D0 .word 0D00Ch -0022DCr 1 0D D0 .word 0D00Dh -0022DEr 1 0E D0 .word 0D00Eh -0022E0r 1 0F D0 .word 0D00Fh -0022E2r 1 E1 DF .word 0DFE1h -0022E4r 1 E2 DF .word 0DFE2h -0022E6r 1 E3 DF .word 0DFE3h -0022E8r 1 E4 DF .word 0DFE4h -0022EAr 1 E5 DF .word 0DFE5h -0022ECr 1 E6 DF .word 0DFE6h -0022EEr 1 E7 DF .word 0DFE7h -0022F0r 1 E8 DF .word 0DFE8h -0022F2r 1 E9 DF .word 0DFE9h -0022F4r 1 EA DF .word 0DFEAh -0022F6r 1 EB DF .word 0DFEBh -0022F8r 1 EC DF .word 0DFECh -0022FAr 1 ED DF .word 0DFEDh -0022FCr 1 EE DF .word 0DFEEh -0022FEr 1 EF DF .word 0DFEFh -002300r 1 F0 DF .word 0DFF0h -002302r 1 F1 DF .word 0DFF1h -002304r 1 F2 DF .word 0DFF2h -002306r 1 F3 DF .word 0DFF3h -002308r 1 F4 DF .word 0DFF4h -00230Ar 1 F5 DF .word 0DFF5h -00230Cr 1 F6 DF .word 0DFF6h -00230Er 1 F7 DF .word 0DFF7h -002310r 1 F8 DF .word 0DFF8h -002312r 1 F9 DF .word 0DFF9h -002314r 1 FA DF .word 0DFFAh -002316r 1 FB DF .word 0DFFBh -002318r 1 FC DF .word 0DFFCh -00231Ar 1 FD DF .word 0DFFDh -00231Cr 1 FE DF .word 0DFFEh -00231Er 1 FF DF .word 0DFFFh -002320r 1 00 E0 .word 0E000h -002322r 1 01 E0 .word 0E001h -002324r 1 02 E0 .word 0E002h -002326r 1 03 E0 .word 0E003h -002328r 1 04 E0 .word 0E004h -00232Ar 1 05 E0 .word 0E005h -00232Cr 1 06 E0 .word 0E006h -00232Er 1 07 E0 .word 0E007h -002330r 1 08 E0 .word 0E008h -002332r 1 09 E0 .word 0E009h -002334r 1 0A E0 .word 0E00Ah -002336r 1 0B E0 .word 0E00Bh -002338r 1 0C E0 .word 0E00Ch -00233Ar 1 0D E0 .word 0E00Dh -00233Cr 1 0E E0 .word 0E00Eh -00233Er 1 0F E0 .word 0E00Fh -002340r 1 E1 EF .word 0EFE1h -002342r 1 E2 EF .word 0EFE2h -002344r 1 E3 EF .word 0EFE3h -002346r 1 E4 EF .word 0EFE4h -002348r 1 E5 EF .word 0EFE5h -00234Ar 1 E6 EF .word 0EFE6h -00234Cr 1 E7 EF .word 0EFE7h -00234Er 1 E8 EF .word 0EFE8h -002350r 1 E9 EF .word 0EFE9h -002352r 1 EA EF .word 0EFEAh -002354r 1 EB EF .word 0EFEBh -002356r 1 EC EF .word 0EFECh -002358r 1 ED EF .word 0EFEDh -00235Ar 1 EE EF .word 0EFEEh -00235Cr 1 EF EF .word 0EFEFh -00235Er 1 F0 EF .word 0EFF0h -002360r 1 F1 EF .word 0EFF1h -002362r 1 F2 EF .word 0EFF2h -002364r 1 F3 EF .word 0EFF3h -002366r 1 F4 EF .word 0EFF4h -002368r 1 F5 EF .word 0EFF5h -00236Ar 1 F6 EF .word 0EFF6h -00236Cr 1 F7 EF .word 0EFF7h -00236Er 1 F8 EF .word 0EFF8h -002370r 1 F9 EF .word 0EFF9h -002372r 1 FA EF .word 0EFFAh -002374r 1 FB EF .word 0EFFBh -002376r 1 FC EF .word 0EFFCh -002378r 1 FD EF .word 0EFFDh -00237Ar 1 FE EF .word 0EFFEh -00237Cr 1 FF EF .word 0EFFFh -00237Er 1 00 F0 .word 0F000h -002380r 1 01 F0 .word 0F001h -002382r 1 02 F0 .word 0F002h -002384r 1 03 F0 .word 0F003h -002386r 1 04 F0 .word 0F004h -002388r 1 05 F0 .word 0F005h -00238Ar 1 06 F0 .word 0F006h -00238Cr 1 07 F0 .word 0F007h -00238Er 1 08 F0 .word 0F008h -002390r 1 09 F0 .word 0F009h -002392r 1 0A F0 .word 0F00Ah -002394r 1 0B F0 .word 0F00Bh -002396r 1 0C F0 .word 0F00Ch -002398r 1 0D F0 .word 0F00Dh -00239Ar 1 0E F0 .word 0F00Eh -00239Cr 1 0F F0 .word 0F00Fh -00239Er 1 E1 FF .word 0FFE1h -0023A0r 1 E2 FF .word 0FFE2h -0023A2r 1 E3 FF .word 0FFE3h -0023A4r 1 E4 FF .word 0FFE4h -0023A6r 1 E5 FF .word 0FFE5h -0023A8r 1 E6 FF .word 0FFE6h -0023AAr 1 E7 FF .word 0FFE7h -0023ACr 1 E8 FF .word 0FFE8h -0023AEr 1 E9 FF .word 0FFE9h -0023B0r 1 EA FF .word 0FFEAh -0023B2r 1 EB FF .word 0FFEBh -0023B4r 1 EC FF .word 0FFECh -0023B6r 1 ED FF .word 0FFEDh -0023B8r 1 EE FF .word 0FFEEh -0023BAr 1 EF FF .word 0FFEFh -0023BCr 1 F0 FF .word 0FFF0h -0023BEr 1 F1 FF .word 0FFF1h -0023C0r 1 F2 FF .word 0FFF2h -0023C2r 1 F3 FF .word 0FFF3h -0023C4r 1 F4 FF .word 0FFF4h -0023C6r 1 F5 FF .word 0FFF5h -0023C8r 1 F6 FF .word 0FFF6h -0023CAr 1 F7 FF .word 0FFF7h -0023CCr 1 F8 FF .word 0FFF8h -0023CEr 1 F9 FF .word 0FFF9h -0023D0r 1 FA FF .word 0FFFAh -0023D2r 1 FB FF .word 0FFFBh -0023D4r 1 FC FF .word 0FFFCh -0023D6r 1 FD FF .word 0FFFDh -0023D8r 1 FE FF .word 0FFFEh -0023DAr 1 FF FF .word 0FFFFh +002046r 1 ; alternative 4-digit hex values, uppercase +002046r 1 00 00 .word 0000h +002048r 1 01 00 .word 0001h +00204Ar 1 02 00 .word 0002h +00204Cr 1 03 00 .word 0003h +00204Er 1 04 00 .word 0004h +002050r 1 05 00 .word 0005h +002052r 1 06 00 .word 0006h +002054r 1 07 00 .word 0007h +002056r 1 08 00 .word 0008h +002058r 1 09 00 .word 0009h +00205Ar 1 0A 00 .word 000Ah +00205Cr 1 0B 00 .word 000Bh +00205Er 1 0C 00 .word 000Ch +002060r 1 0D 00 .word 000Dh +002062r 1 0E 00 .word 000Eh +002064r 1 0F 00 .word 000Fh +002066r 1 10 00 .word 0010h +002068r 1 11 00 .word 0011h +00206Ar 1 12 00 .word 0012h +00206Cr 1 13 00 .word 0013h +00206Er 1 70 00 .word 0070h +002070r 1 71 00 .word 0071h +002072r 1 72 00 .word 0072h +002074r 1 73 00 .word 0073h +002076r 1 74 00 .word 0074h +002078r 1 75 00 .word 0075h +00207Ar 1 76 00 .word 0076h +00207Cr 1 77 00 .word 0077h +00207Er 1 78 00 .word 0078h +002080r 1 79 00 .word 0079h +002082r 1 7A 00 .word 007Ah +002084r 1 7B 00 .word 007Bh +002086r 1 7C 00 .word 007Ch +002088r 1 7D 00 .word 007Dh +00208Ar 1 7E 00 .word 007Eh +00208Cr 1 7F 00 .word 007Fh +00208Er 1 80 00 .word 0080h +002090r 1 81 00 .word 0081h +002092r 1 82 00 .word 0082h +002094r 1 83 00 .word 0083h +002096r 1 84 00 .word 0084h +002098r 1 85 00 .word 0085h +00209Ar 1 86 00 .word 0086h +00209Cr 1 F0 00 .word 00F0h +00209Er 1 F1 00 .word 00F1h +0020A0r 1 F2 00 .word 00F2h +0020A2r 1 F3 00 .word 00F3h +0020A4r 1 F4 00 .word 00F4h +0020A6r 1 F5 00 .word 00F5h +0020A8r 1 F6 00 .word 00F6h +0020AAr 1 F7 00 .word 00F7h +0020ACr 1 F8 00 .word 00F8h +0020AEr 1 F9 00 .word 00F9h +0020B0r 1 FA 00 .word 00FAh +0020B2r 1 FB 00 .word 00FBh +0020B4r 1 FC 00 .word 00FCh +0020B6r 1 FD 00 .word 00FDh +0020B8r 1 FE 00 .word 00FEh +0020BAr 1 FF 00 .word 00FFh +0020BCr 1 00 01 .word 0100h +0020BEr 1 01 01 .word 0101h +0020C0r 1 02 01 .word 0102h +0020C2r 1 03 01 .word 0103h +0020C4r 1 D2 0F .word 0FD2h +0020C6r 1 D3 0F .word 0FD3h +0020C8r 1 D4 0F .word 0FD4h +0020CAr 1 D5 0F .word 0FD5h +0020CCr 1 D6 0F .word 0FD6h +0020CEr 1 D7 0F .word 0FD7h +0020D0r 1 D8 0F .word 0FD8h +0020D2r 1 D9 0F .word 0FD9h +0020D4r 1 DA 0F .word 0FDAh +0020D6r 1 DB 0F .word 0FDBh +0020D8r 1 DC 0F .word 0FDCh +0020DAr 1 DD 0F .word 0FDDh +0020DCr 1 DE 0F .word 0FDEh +0020DEr 1 DF 0F .word 0FDFh +0020E0r 1 E0 0F .word 0FE0h +0020E2r 1 E1 0F .word 0FE1h +0020E4r 1 E2 0F .word 0FE2h +0020E6r 1 E3 0F .word 0FE3h +0020E8r 1 E4 0F .word 0FE4h +0020EAr 1 E5 0F .word 0FE5h +0020ECr 1 E6 0F .word 0FE6h +0020EEr 1 E7 0F .word 0FE7h +0020F0r 1 E8 0F .word 0FE8h +0020F2r 1 E9 0F .word 0FE9h +0020F4r 1 EA 0F .word 0FEAh +0020F6r 1 EB 0F .word 0FEBh +0020F8r 1 EC 0F .word 0FECh +0020FAr 1 ED 0F .word 0FEDh +0020FCr 1 EE 0F .word 0FEEh +0020FEr 1 EF 0F .word 0FEFh +002100r 1 F0 0F .word 0FF0h +002102r 1 F1 0F .word 0FF1h +002104r 1 F2 0F .word 0FF2h +002106r 1 F3 0F .word 0FF3h +002108r 1 F4 0F .word 0FF4h +00210Ar 1 F5 0F .word 0FF5h +00210Cr 1 F6 0F .word 0FF6h +00210Er 1 F7 0F .word 0FF7h +002110r 1 F8 0F .word 0FF8h +002112r 1 F9 0F .word 0FF9h +002114r 1 FA 0F .word 0FFAh +002116r 1 FB 0F .word 0FFBh +002118r 1 FC 0F .word 0FFCh +00211Ar 1 FD 0F .word 0FFDh +00211Cr 1 FE 0F .word 0FFEh +00211Er 1 FF 0F .word 0FFFh +002120r 1 00 10 .word 1000h +002122r 1 01 10 .word 1001h +002124r 1 02 10 .word 1002h +002126r 1 03 10 .word 1003h +002128r 1 04 10 .word 1004h +00212Ar 1 05 10 .word 1005h +00212Cr 1 06 10 .word 1006h +00212Er 1 07 10 .word 1007h +002130r 1 08 10 .word 1008h +002132r 1 F0 7F .word 7FF0h +002134r 1 F1 7F .word 7FF1h +002136r 1 F2 7F .word 7FF2h +002138r 1 F3 7F .word 7FF3h +00213Ar 1 F4 7F .word 7FF4h +00213Cr 1 F5 7F .word 7FF5h +00213Er 1 F6 7F .word 7FF6h +002140r 1 F7 7F .word 7FF7h +002142r 1 F8 7F .word 7FF8h +002144r 1 F9 7F .word 7FF9h +002146r 1 FA 7F .word 7FFAh +002148r 1 FB 7F .word 7FFBh +00214Ar 1 FC 7F .word 7FFCh +00214Cr 1 FD 7F .word 7FFDh +00214Er 1 FE 7F .word 7FFEh +002150r 1 FF 7F .word 7FFFh +002152r 1 00 80 .word 8000h +002154r 1 01 80 .word 8001h +002156r 1 02 80 .word 8002h +002158r 1 03 80 .word 8003h +00215Ar 1 04 80 .word 8004h +00215Cr 1 05 80 .word 8005h +00215Er 1 06 80 .word 8006h +002160r 1 07 80 .word 8007h +002162r 1 08 80 .word 8008h +002164r 1 09 80 .word 8009h +002166r 1 0A 80 .word 800Ah +002168r 1 0B 80 .word 800Bh +00216Ar 1 E1 9F .word 9FE1h +00216Cr 1 E2 9F .word 9FE2h +00216Er 1 E3 9F .word 9FE3h +002170r 1 E4 9F .word 9FE4h +002172r 1 E5 9F .word 9FE5h +002174r 1 E6 9F .word 9FE6h +002176r 1 E7 9F .word 9FE7h +002178r 1 E8 9F .word 9FE8h +00217Ar 1 E9 9F .word 9FE9h +00217Cr 1 EA 9F .word 9FEAh +00217Er 1 EB 9F .word 9FEBh +002180r 1 EC 9F .word 9FECh +002182r 1 ED 9F .word 9FEDh +002184r 1 EE 9F .word 9FEEh +002186r 1 EF 9F .word 9FEFh +002188r 1 F0 9F .word 9FF0h +00218Ar 1 F1 9F .word 9FF1h +00218Cr 1 F2 9F .word 9FF2h +00218Er 1 F3 9F .word 9FF3h +002190r 1 F4 9F .word 9FF4h +002192r 1 F5 9F .word 9FF5h +002194r 1 F6 9F .word 9FF6h +002196r 1 F7 9F .word 9FF7h +002198r 1 F8 9F .word 9FF8h +00219Ar 1 F9 9F .word 9FF9h +00219Cr 1 FA 9F .word 9FFAh +00219Er 1 FB 9F .word 9FFBh +0021A0r 1 FC 9F .word 9FFCh +0021A2r 1 FD 9F .word 9FFDh +0021A4r 1 FE 9F .word 9FFEh +0021A6r 1 FF 9F .word 9FFFh +0021A8r 1 00 A0 .word 0A000h +0021AAr 1 01 A0 .word 0A001h +0021ACr 1 02 A0 .word 0A002h +0021AEr 1 03 A0 .word 0A003h +0021B0r 1 04 A0 .word 0A004h +0021B2r 1 05 A0 .word 0A005h +0021B4r 1 06 A0 .word 0A006h +0021B6r 1 07 A0 .word 0A007h +0021B8r 1 08 A0 .word 0A008h +0021BAr 1 09 A0 .word 0A009h +0021BCr 1 0A A0 .word 0A00Ah +0021BEr 1 0B A0 .word 0A00Bh +0021C0r 1 0C A0 .word 0A00Ch +0021C2r 1 0D A0 .word 0A00Dh +0021C4r 1 0E A0 .word 0A00Eh +0021C6r 1 0F A0 .word 0A00Fh +0021C8r 1 E1 AF .word 0AFE1h +0021CAr 1 E2 AF .word 0AFE2h +0021CCr 1 E3 AF .word 0AFE3h +0021CEr 1 E4 AF .word 0AFE4h +0021D0r 1 E5 AF .word 0AFE5h +0021D2r 1 E6 AF .word 0AFE6h +0021D4r 1 E7 AF .word 0AFE7h +0021D6r 1 E8 AF .word 0AFE8h +0021D8r 1 E9 AF .word 0AFE9h +0021DAr 1 EA AF .word 0AFEAh +0021DCr 1 EB AF .word 0AFEBh +0021DEr 1 EC AF .word 0AFECh +0021E0r 1 ED AF .word 0AFEDh +0021E2r 1 EE AF .word 0AFEEh +0021E4r 1 EF AF .word 0AFEFh +0021E6r 1 F0 AF .word 0AFF0h +0021E8r 1 F1 AF .word 0AFF1h +0021EAr 1 F2 AF .word 0AFF2h +0021ECr 1 F3 AF .word 0AFF3h +0021EEr 1 F4 AF .word 0AFF4h +0021F0r 1 F5 AF .word 0AFF5h +0021F2r 1 F6 AF .word 0AFF6h +0021F4r 1 F7 AF .word 0AFF7h +0021F6r 1 F8 AF .word 0AFF8h +0021F8r 1 F9 AF .word 0AFF9h +0021FAr 1 FA AF .word 0AFFAh +0021FCr 1 FB AF .word 0AFFBh +0021FEr 1 FC AF .word 0AFFCh +002200r 1 FD AF .word 0AFFDh +002202r 1 FE AF .word 0AFFEh +002204r 1 FF AF .word 0AFFFh +002206r 1 00 B0 .word 0B000h +002208r 1 01 B0 .word 0B001h +00220Ar 1 02 B0 .word 0B002h +00220Cr 1 03 B0 .word 0B003h +00220Er 1 04 B0 .word 0B004h +002210r 1 05 B0 .word 0B005h +002212r 1 06 B0 .word 0B006h +002214r 1 07 B0 .word 0B007h +002216r 1 08 B0 .word 0B008h +002218r 1 09 B0 .word 0B009h +00221Ar 1 0A B0 .word 0B00Ah +00221Cr 1 0B B0 .word 0B00Bh +00221Er 1 0C B0 .word 0B00Ch +002220r 1 0D B0 .word 0B00Dh +002222r 1 0E B0 .word 0B00Eh +002224r 1 0F B0 .word 0B00Fh +002226r 1 E1 BF .word 0BFE1h +002228r 1 E2 BF .word 0BFE2h +00222Ar 1 E3 BF .word 0BFE3h +00222Cr 1 E4 BF .word 0BFE4h +00222Er 1 E5 BF .word 0BFE5h +002230r 1 E6 BF .word 0BFE6h +002232r 1 E7 BF .word 0BFE7h +002234r 1 E8 BF .word 0BFE8h +002236r 1 E9 BF .word 0BFE9h +002238r 1 EA BF .word 0BFEAh +00223Ar 1 EB BF .word 0BFEBh +00223Cr 1 EC BF .word 0BFECh +00223Er 1 ED BF .word 0BFEDh +002240r 1 EE BF .word 0BFEEh +002242r 1 EF BF .word 0BFEFh +002244r 1 F0 BF .word 0BFF0h +002246r 1 F1 BF .word 0BFF1h +002248r 1 F2 BF .word 0BFF2h +00224Ar 1 F3 BF .word 0BFF3h +00224Cr 1 F4 BF .word 0BFF4h +00224Er 1 F5 BF .word 0BFF5h +002250r 1 F6 BF .word 0BFF6h +002252r 1 F7 BF .word 0BFF7h +002254r 1 F8 BF .word 0BFF8h +002256r 1 F9 BF .word 0BFF9h +002258r 1 FA BF .word 0BFFAh +00225Ar 1 FB BF .word 0BFFBh +00225Cr 1 FC BF .word 0BFFCh +00225Er 1 FD BF .word 0BFFDh +002260r 1 FE BF .word 0BFFEh +002262r 1 FF BF .word 0BFFFh +002264r 1 00 C0 .word 0C000h +002266r 1 01 C0 .word 0C001h +002268r 1 02 C0 .word 0C002h +00226Ar 1 03 C0 .word 0C003h +00226Cr 1 04 C0 .word 0C004h +00226Er 1 05 C0 .word 0C005h +002270r 1 06 C0 .word 0C006h +002272r 1 07 C0 .word 0C007h +002274r 1 08 C0 .word 0C008h +002276r 1 09 C0 .word 0C009h +002278r 1 0A C0 .word 0C00Ah +00227Ar 1 0B C0 .word 0C00Bh +00227Cr 1 0C C0 .word 0C00Ch +00227Er 1 0D C0 .word 0C00Dh +002280r 1 0E C0 .word 0C00Eh +002282r 1 0F C0 .word 0C00Fh +002284r 1 E1 CF .word 0CFE1h +002286r 1 E2 CF .word 0CFE2h +002288r 1 E3 CF .word 0CFE3h +00228Ar 1 E4 CF .word 0CFE4h +00228Cr 1 E5 CF .word 0CFE5h +00228Er 1 E6 CF .word 0CFE6h +002290r 1 E7 CF .word 0CFE7h +002292r 1 E8 CF .word 0CFE8h +002294r 1 E9 CF .word 0CFE9h +002296r 1 EA CF .word 0CFEAh +002298r 1 EB CF .word 0CFEBh +00229Ar 1 EC CF .word 0CFECh +00229Cr 1 ED CF .word 0CFEDh +00229Er 1 EE CF .word 0CFEEh +0022A0r 1 EF CF .word 0CFEFh +0022A2r 1 F0 CF .word 0CFF0h +0022A4r 1 F1 CF .word 0CFF1h +0022A6r 1 F2 CF .word 0CFF2h +0022A8r 1 F3 CF .word 0CFF3h +0022AAr 1 F4 CF .word 0CFF4h +0022ACr 1 F5 CF .word 0CFF5h +0022AEr 1 F6 CF .word 0CFF6h +0022B0r 1 F7 CF .word 0CFF7h +0022B2r 1 F8 CF .word 0CFF8h +0022B4r 1 F9 CF .word 0CFF9h +0022B6r 1 FA CF .word 0CFFAh +0022B8r 1 FB CF .word 0CFFBh +0022BAr 1 FC CF .word 0CFFCh +0022BCr 1 FD CF .word 0CFFDh +0022BEr 1 FE CF .word 0CFFEh +0022C0r 1 FF CF .word 0CFFFh +0022C2r 1 00 D0 .word 0D000h +0022C4r 1 01 D0 .word 0D001h +0022C6r 1 02 D0 .word 0D002h +0022C8r 1 03 D0 .word 0D003h +0022CAr 1 04 D0 .word 0D004h +0022CCr 1 05 D0 .word 0D005h +0022CEr 1 06 D0 .word 0D006h +0022D0r 1 07 D0 .word 0D007h +0022D2r 1 08 D0 .word 0D008h +0022D4r 1 09 D0 .word 0D009h +0022D6r 1 0A D0 .word 0D00Ah +0022D8r 1 0B D0 .word 0D00Bh +0022DAr 1 0C D0 .word 0D00Ch +0022DCr 1 0D D0 .word 0D00Dh +0022DEr 1 0E D0 .word 0D00Eh +0022E0r 1 0F D0 .word 0D00Fh +0022E2r 1 E1 DF .word 0DFE1h +0022E4r 1 E2 DF .word 0DFE2h +0022E6r 1 E3 DF .word 0DFE3h +0022E8r 1 E4 DF .word 0DFE4h +0022EAr 1 E5 DF .word 0DFE5h +0022ECr 1 E6 DF .word 0DFE6h +0022EEr 1 E7 DF .word 0DFE7h +0022F0r 1 E8 DF .word 0DFE8h +0022F2r 1 E9 DF .word 0DFE9h +0022F4r 1 EA DF .word 0DFEAh +0022F6r 1 EB DF .word 0DFEBh +0022F8r 1 EC DF .word 0DFECh +0022FAr 1 ED DF .word 0DFEDh +0022FCr 1 EE DF .word 0DFEEh +0022FEr 1 EF DF .word 0DFEFh +002300r 1 F0 DF .word 0DFF0h +002302r 1 F1 DF .word 0DFF1h +002304r 1 F2 DF .word 0DFF2h +002306r 1 F3 DF .word 0DFF3h +002308r 1 F4 DF .word 0DFF4h +00230Ar 1 F5 DF .word 0DFF5h +00230Cr 1 F6 DF .word 0DFF6h +00230Er 1 F7 DF .word 0DFF7h +002310r 1 F8 DF .word 0DFF8h +002312r 1 F9 DF .word 0DFF9h +002314r 1 FA DF .word 0DFFAh +002316r 1 FB DF .word 0DFFBh +002318r 1 FC DF .word 0DFFCh +00231Ar 1 FD DF .word 0DFFDh +00231Cr 1 FE DF .word 0DFFEh +00231Er 1 FF DF .word 0DFFFh +002320r 1 00 E0 .word 0E000h +002322r 1 01 E0 .word 0E001h +002324r 1 02 E0 .word 0E002h +002326r 1 03 E0 .word 0E003h +002328r 1 04 E0 .word 0E004h +00232Ar 1 05 E0 .word 0E005h +00232Cr 1 06 E0 .word 0E006h +00232Er 1 07 E0 .word 0E007h +002330r 1 08 E0 .word 0E008h +002332r 1 09 E0 .word 0E009h +002334r 1 0A E0 .word 0E00Ah +002336r 1 0B E0 .word 0E00Bh +002338r 1 0C E0 .word 0E00Ch +00233Ar 1 0D E0 .word 0E00Dh +00233Cr 1 0E E0 .word 0E00Eh +00233Er 1 0F E0 .word 0E00Fh +002340r 1 E1 EF .word 0EFE1h +002342r 1 E2 EF .word 0EFE2h +002344r 1 E3 EF .word 0EFE3h +002346r 1 E4 EF .word 0EFE4h +002348r 1 E5 EF .word 0EFE5h +00234Ar 1 E6 EF .word 0EFE6h +00234Cr 1 E7 EF .word 0EFE7h +00234Er 1 E8 EF .word 0EFE8h +002350r 1 E9 EF .word 0EFE9h +002352r 1 EA EF .word 0EFEAh +002354r 1 EB EF .word 0EFEBh +002356r 1 EC EF .word 0EFECh +002358r 1 ED EF .word 0EFEDh +00235Ar 1 EE EF .word 0EFEEh +00235Cr 1 EF EF .word 0EFEFh +00235Er 1 F0 EF .word 0EFF0h +002360r 1 F1 EF .word 0EFF1h +002362r 1 F2 EF .word 0EFF2h +002364r 1 F3 EF .word 0EFF3h +002366r 1 F4 EF .word 0EFF4h +002368r 1 F5 EF .word 0EFF5h +00236Ar 1 F6 EF .word 0EFF6h +00236Cr 1 F7 EF .word 0EFF7h +00236Er 1 F8 EF .word 0EFF8h +002370r 1 F9 EF .word 0EFF9h +002372r 1 FA EF .word 0EFFAh +002374r 1 FB EF .word 0EFFBh +002376r 1 FC EF .word 0EFFCh +002378r 1 FD EF .word 0EFFDh +00237Ar 1 FE EF .word 0EFFEh +00237Cr 1 FF EF .word 0EFFFh +00237Er 1 00 F0 .word 0F000h +002380r 1 01 F0 .word 0F001h +002382r 1 02 F0 .word 0F002h +002384r 1 03 F0 .word 0F003h +002386r 1 04 F0 .word 0F004h +002388r 1 05 F0 .word 0F005h +00238Ar 1 06 F0 .word 0F006h +00238Cr 1 07 F0 .word 0F007h +00238Er 1 08 F0 .word 0F008h +002390r 1 09 F0 .word 0F009h +002392r 1 0A F0 .word 0F00Ah +002394r 1 0B F0 .word 0F00Bh +002396r 1 0C F0 .word 0F00Ch +002398r 1 0D F0 .word 0F00Dh +00239Ar 1 0E F0 .word 0F00Eh +00239Cr 1 0F F0 .word 0F00Fh +00239Er 1 E1 FF .word 0FFE1h +0023A0r 1 E2 FF .word 0FFE2h +0023A2r 1 E3 FF .word 0FFE3h +0023A4r 1 E4 FF .word 0FFE4h +0023A6r 1 E5 FF .word 0FFE5h +0023A8r 1 E6 FF .word 0FFE6h +0023AAr 1 E7 FF .word 0FFE7h +0023ACr 1 E8 FF .word 0FFE8h +0023AEr 1 E9 FF .word 0FFE9h +0023B0r 1 EA FF .word 0FFEAh +0023B2r 1 EB FF .word 0FFEBh +0023B4r 1 EC FF .word 0FFECh +0023B6r 1 ED FF .word 0FFEDh +0023B8r 1 EE FF .word 0FFEEh +0023BAr 1 EF FF .word 0FFEFh +0023BCr 1 F0 FF .word 0FFF0h +0023BEr 1 F1 FF .word 0FFF1h +0023C0r 1 F2 FF .word 0FFF2h +0023C2r 1 F3 FF .word 0FFF3h +0023C4r 1 F4 FF .word 0FFF4h +0023C6r 1 F5 FF .word 0FFF5h +0023C8r 1 F6 FF .word 0FFF6h +0023CAr 1 F7 FF .word 0FFF7h +0023CCr 1 F8 FF .word 0FFF8h +0023CEr 1 F9 FF .word 0FFF9h +0023D0r 1 FA FF .word 0FFFAh +0023D2r 1 FB FF .word 0FFFBh +0023D4r 1 FC FF .word 0FFFCh +0023D6r 1 FD FF .word 0FFFDh +0023D8r 1 FE FF .word 0FFFEh +0023DAr 1 FF FF .word 0FFFFh 0023DCr 1 -0023DCr 1 ; alternative hex values, always leading zero -0023DCr 1 00 00 .word 00h -0023DEr 1 01 00 .word 01h -0023E0r 1 02 00 .word 02h -0023E2r 1 03 00 .word 03h -0023E4r 1 04 00 .word 04h -0023E6r 1 05 00 .word 05h -0023E8r 1 06 00 .word 06h -0023EAr 1 07 00 .word 07h -0023ECr 1 08 00 .word 08h -0023EEr 1 09 00 .word 09h -0023F0r 1 0A 00 .word 0ah -0023F2r 1 0B 00 .word 0bh -0023F4r 1 0C 00 .word 0ch -0023F6r 1 0D 00 .word 0dh -0023F8r 1 0E 00 .word 0eh -0023FAr 1 0F 00 .word 0fh -0023FCr 1 10 00 .word 010h -0023FEr 1 11 00 .word 011h -002400r 1 12 00 .word 012h -002402r 1 13 00 .word 013h -002404r 1 70 00 .word 070h -002406r 1 71 00 .word 071h -002408r 1 72 00 .word 072h -00240Ar 1 73 00 .word 073h -00240Cr 1 74 00 .word 074h -00240Er 1 75 00 .word 075h -002410r 1 76 00 .word 076h -002412r 1 77 00 .word 077h -002414r 1 78 00 .word 078h -002416r 1 79 00 .word 079h -002418r 1 7A 00 .word 07ah -00241Ar 1 7B 00 .word 07bh -00241Cr 1 7C 00 .word 07ch -00241Er 1 7D 00 .word 07dh -002420r 1 7E 00 .word 07eh -002422r 1 7F 00 .word 07fh -002424r 1 80 00 .word 080h -002426r 1 81 00 .word 081h -002428r 1 82 00 .word 082h -00242Ar 1 83 00 .word 083h -00242Cr 1 84 00 .word 084h -00242Er 1 85 00 .word 085h -002430r 1 86 00 .word 086h -002432r 1 F0 00 .word 0f0h -002434r 1 F1 00 .word 0f1h -002436r 1 F2 00 .word 0f2h -002438r 1 F3 00 .word 0f3h -00243Ar 1 F4 00 .word 0f4h -00243Cr 1 F5 00 .word 0f5h -00243Er 1 F6 00 .word 0f6h -002440r 1 F7 00 .word 0f7h -002442r 1 F8 00 .word 0f8h -002444r 1 F9 00 .word 0f9h -002446r 1 FA 00 .word 0fah -002448r 1 FB 00 .word 0fbh -00244Ar 1 FC 00 .word 0fch -00244Cr 1 FD 00 .word 0fdh -00244Er 1 FE 00 .word 0feh -002450r 1 FF 00 .word 0ffh -002452r 1 00 01 .word 0100h -002454r 1 01 01 .word 0101h -002456r 1 02 01 .word 0102h -002458r 1 03 01 .word 0103h -00245Ar 1 D2 0F .word 0fd2h -00245Cr 1 D3 0F .word 0fd3h -00245Er 1 D4 0F .word 0fd4h -002460r 1 D5 0F .word 0fd5h -002462r 1 D6 0F .word 0fd6h -002464r 1 D7 0F .word 0fd7h -002466r 1 D8 0F .word 0fd8h -002468r 1 D9 0F .word 0fd9h -00246Ar 1 DA 0F .word 0fdah -00246Cr 1 DB 0F .word 0fdbh -00246Er 1 DC 0F .word 0fdch -002470r 1 DD 0F .word 0fddh -002472r 1 DE 0F .word 0fdeh -002474r 1 DF 0F .word 0fdfh -002476r 1 E0 0F .word 0fe0h -002478r 1 E1 0F .word 0fe1h -00247Ar 1 E2 0F .word 0fe2h -00247Cr 1 E3 0F .word 0fe3h -00247Er 1 E4 0F .word 0fe4h -002480r 1 E5 0F .word 0fe5h -002482r 1 E6 0F .word 0fe6h -002484r 1 E7 0F .word 0fe7h -002486r 1 E8 0F .word 0fe8h -002488r 1 E9 0F .word 0fe9h -00248Ar 1 EA 0F .word 0feah -00248Cr 1 EB 0F .word 0febh -00248Er 1 EC 0F .word 0fech -002490r 1 ED 0F .word 0fedh -002492r 1 EE 0F .word 0feeh -002494r 1 EF 0F .word 0fefh -002496r 1 F0 0F .word 0ff0h -002498r 1 F1 0F .word 0ff1h -00249Ar 1 F2 0F .word 0ff2h -00249Cr 1 F3 0F .word 0ff3h -00249Er 1 F4 0F .word 0ff4h -0024A0r 1 F5 0F .word 0ff5h -0024A2r 1 F6 0F .word 0ff6h -0024A4r 1 F7 0F .word 0ff7h -0024A6r 1 F8 0F .word 0ff8h -0024A8r 1 F9 0F .word 0ff9h -0024AAr 1 FA 0F .word 0ffah -0024ACr 1 FB 0F .word 0ffbh -0024AEr 1 FC 0F .word 0ffch -0024B0r 1 FD 0F .word 0ffdh -0024B2r 1 FE 0F .word 0ffeh -0024B4r 1 FF 0F .word 0fffh -0024B6r 1 00 10 .word 01000h -0024B8r 1 01 10 .word 01001h -0024BAr 1 02 10 .word 01002h -0024BCr 1 03 10 .word 01003h -0024BEr 1 04 10 .word 01004h -0024C0r 1 05 10 .word 01005h -0024C2r 1 06 10 .word 01006h -0024C4r 1 07 10 .word 01007h -0024C6r 1 08 10 .word 01008h -0024C8r 1 F0 7F .word 07ff0h -0024CAr 1 F1 7F .word 07ff1h -0024CCr 1 F2 7F .word 07ff2h -0024CEr 1 F3 7F .word 07ff3h -0024D0r 1 F4 7F .word 07ff4h -0024D2r 1 F5 7F .word 07ff5h -0024D4r 1 F6 7F .word 07ff6h -0024D6r 1 F7 7F .word 07ff7h -0024D8r 1 F8 7F .word 07ff8h -0024DAr 1 F9 7F .word 07ff9h -0024DCr 1 FA 7F .word 07ffah -0024DEr 1 FB 7F .word 07ffbh -0024E0r 1 FC 7F .word 07ffch -0024E2r 1 FD 7F .word 07ffdh -0024E4r 1 FE 7F .word 07ffeh -0024E6r 1 FF 7F .word 07fffh -0024E8r 1 00 80 .word 08000h -0024EAr 1 01 80 .word 08001h -0024ECr 1 02 80 .word 08002h -0024EEr 1 03 80 .word 08003h -0024F0r 1 04 80 .word 08004h -0024F2r 1 05 80 .word 08005h -0024F4r 1 06 80 .word 08006h -0024F6r 1 07 80 .word 08007h -0024F8r 1 08 80 .word 08008h -0024FAr 1 09 80 .word 08009h -0024FCr 1 0A 80 .word 0800ah -0024FEr 1 0B 80 .word 0800bh -002500r 1 E1 9F .word 09fe1h -002502r 1 E2 9F .word 09fe2h -002504r 1 E3 9F .word 09fe3h -002506r 1 E4 9F .word 09fe4h -002508r 1 E5 9F .word 09fe5h -00250Ar 1 E6 9F .word 09fe6h -00250Cr 1 E7 9F .word 09fe7h -00250Er 1 E8 9F .word 09fe8h -002510r 1 E9 9F .word 09fe9h -002512r 1 EA 9F .word 09feah -002514r 1 EB 9F .word 09febh -002516r 1 EC 9F .word 09fech -002518r 1 ED 9F .word 09fedh -00251Ar 1 EE 9F .word 09feeh -00251Cr 1 EF 9F .word 09fefh -00251Er 1 F0 9F .word 09ff0h -002520r 1 F1 9F .word 09ff1h -002522r 1 F2 9F .word 09ff2h -002524r 1 F3 9F .word 09ff3h -002526r 1 F4 9F .word 09ff4h -002528r 1 F5 9F .word 09ff5h -00252Ar 1 F6 9F .word 09ff6h -00252Cr 1 F7 9F .word 09ff7h -00252Er 1 F8 9F .word 09ff8h -002530r 1 F9 9F .word 09ff9h -002532r 1 FA 9F .word 09ffah -002534r 1 FB 9F .word 09ffbh -002536r 1 FC 9F .word 09ffch -002538r 1 FD 9F .word 09ffdh -00253Ar 1 FE 9F .word 09ffeh -00253Cr 1 FF 9F .word 09fffh -00253Er 1 00 A0 .word 0a000h -002540r 1 01 A0 .word 0a001h -002542r 1 02 A0 .word 0a002h -002544r 1 03 A0 .word 0a003h -002546r 1 04 A0 .word 0a004h -002548r 1 05 A0 .word 0a005h -00254Ar 1 06 A0 .word 0a006h -00254Cr 1 07 A0 .word 0a007h -00254Er 1 08 A0 .word 0a008h -002550r 1 09 A0 .word 0a009h -002552r 1 0A A0 .word 0a00ah -002554r 1 0B A0 .word 0a00bh -002556r 1 0C A0 .word 0a00ch -002558r 1 0D A0 .word 0a00dh -00255Ar 1 0E A0 .word 0a00eh -00255Cr 1 0F A0 .word 0a00fh -00255Er 1 E1 AF .word 0afe1h -002560r 1 E2 AF .word 0afe2h -002562r 1 E3 AF .word 0afe3h -002564r 1 E4 AF .word 0afe4h -002566r 1 E5 AF .word 0afe5h -002568r 1 E6 AF .word 0afe6h -00256Ar 1 E7 AF .word 0afe7h -00256Cr 1 E8 AF .word 0afe8h -00256Er 1 E9 AF .word 0afe9h -002570r 1 EA AF .word 0afeah -002572r 1 EB AF .word 0afebh -002574r 1 EC AF .word 0afech -002576r 1 ED AF .word 0afedh -002578r 1 EE AF .word 0afeeh -00257Ar 1 EF AF .word 0afefh -00257Cr 1 F0 AF .word 0aff0h -00257Er 1 F1 AF .word 0aff1h -002580r 1 F2 AF .word 0aff2h -002582r 1 F3 AF .word 0aff3h -002584r 1 F4 AF .word 0aff4h -002586r 1 F5 AF .word 0aff5h -002588r 1 F6 AF .word 0aff6h -00258Ar 1 F7 AF .word 0aff7h -00258Cr 1 F8 AF .word 0aff8h -00258Er 1 F9 AF .word 0aff9h -002590r 1 FA AF .word 0affah -002592r 1 FB AF .word 0affbh -002594r 1 FC AF .word 0affch -002596r 1 FD AF .word 0affdh -002598r 1 FE AF .word 0affeh -00259Ar 1 FF AF .word 0afffh -00259Cr 1 00 B0 .word 0b000h -00259Er 1 01 B0 .word 0b001h -0025A0r 1 02 B0 .word 0b002h -0025A2r 1 03 B0 .word 0b003h -0025A4r 1 04 B0 .word 0b004h -0025A6r 1 05 B0 .word 0b005h -0025A8r 1 06 B0 .word 0b006h -0025AAr 1 07 B0 .word 0b007h -0025ACr 1 08 B0 .word 0b008h -0025AEr 1 09 B0 .word 0b009h -0025B0r 1 0A B0 .word 0b00ah -0025B2r 1 0B B0 .word 0b00bh -0025B4r 1 0C B0 .word 0b00ch -0025B6r 1 0D B0 .word 0b00dh -0025B8r 1 0E B0 .word 0b00eh -0025BAr 1 0F B0 .word 0b00fh -0025BCr 1 E1 BF .word 0bfe1h -0025BEr 1 E2 BF .word 0bfe2h -0025C0r 1 E3 BF .word 0bfe3h -0025C2r 1 E4 BF .word 0bfe4h -0025C4r 1 E5 BF .word 0bfe5h -0025C6r 1 E6 BF .word 0bfe6h -0025C8r 1 E7 BF .word 0bfe7h -0025CAr 1 E8 BF .word 0bfe8h -0025CCr 1 E9 BF .word 0bfe9h -0025CEr 1 EA BF .word 0bfeah -0025D0r 1 EB BF .word 0bfebh -0025D2r 1 EC BF .word 0bfech -0025D4r 1 ED BF .word 0bfedh -0025D6r 1 EE BF .word 0bfeeh -0025D8r 1 EF BF .word 0bfefh -0025DAr 1 F0 BF .word 0bff0h -0025DCr 1 F1 BF .word 0bff1h -0025DEr 1 F2 BF .word 0bff2h -0025E0r 1 F3 BF .word 0bff3h -0025E2r 1 F4 BF .word 0bff4h -0025E4r 1 F5 BF .word 0bff5h -0025E6r 1 F6 BF .word 0bff6h -0025E8r 1 F7 BF .word 0bff7h -0025EAr 1 F8 BF .word 0bff8h -0025ECr 1 F9 BF .word 0bff9h -0025EEr 1 FA BF .word 0bffah -0025F0r 1 FB BF .word 0bffbh -0025F2r 1 FC BF .word 0bffch -0025F4r 1 FD BF .word 0bffdh -0025F6r 1 FE BF .word 0bffeh -0025F8r 1 FF BF .word 0bfffh -0025FAr 1 00 C0 .word 0c000h -0025FCr 1 01 C0 .word 0c001h -0025FEr 1 02 C0 .word 0c002h -002600r 1 03 C0 .word 0c003h -002602r 1 04 C0 .word 0c004h -002604r 1 05 C0 .word 0c005h -002606r 1 06 C0 .word 0c006h -002608r 1 07 C0 .word 0c007h -00260Ar 1 08 C0 .word 0c008h -00260Cr 1 09 C0 .word 0c009h -00260Er 1 0A C0 .word 0c00ah -002610r 1 0B C0 .word 0c00bh -002612r 1 0C C0 .word 0c00ch -002614r 1 0D C0 .word 0c00dh -002616r 1 0E C0 .word 0c00eh -002618r 1 0F C0 .word 0c00fh -00261Ar 1 E1 CF .word 0cfe1h -00261Cr 1 E2 CF .word 0cfe2h -00261Er 1 E3 CF .word 0cfe3h -002620r 1 E4 CF .word 0cfe4h -002622r 1 E5 CF .word 0cfe5h -002624r 1 E6 CF .word 0cfe6h -002626r 1 E7 CF .word 0cfe7h -002628r 1 E8 CF .word 0cfe8h -00262Ar 1 E9 CF .word 0cfe9h -00262Cr 1 EA CF .word 0cfeah -00262Er 1 EB CF .word 0cfebh -002630r 1 EC CF .word 0cfech -002632r 1 ED CF .word 0cfedh -002634r 1 EE CF .word 0cfeeh -002636r 1 EF CF .word 0cfefh -002638r 1 F0 CF .word 0cff0h -00263Ar 1 F1 CF .word 0cff1h -00263Cr 1 F2 CF .word 0cff2h -00263Er 1 F3 CF .word 0cff3h -002640r 1 F4 CF .word 0cff4h -002642r 1 F5 CF .word 0cff5h -002644r 1 F6 CF .word 0cff6h -002646r 1 F7 CF .word 0cff7h -002648r 1 F8 CF .word 0cff8h -00264Ar 1 F9 CF .word 0cff9h -00264Cr 1 FA CF .word 0cffah -00264Er 1 FB CF .word 0cffbh -002650r 1 FC CF .word 0cffch -002652r 1 FD CF .word 0cffdh -002654r 1 FE CF .word 0cffeh -002656r 1 FF CF .word 0cfffh -002658r 1 00 D0 .word 0d000h -00265Ar 1 01 D0 .word 0d001h -00265Cr 1 02 D0 .word 0d002h -00265Er 1 03 D0 .word 0d003h -002660r 1 04 D0 .word 0d004h -002662r 1 05 D0 .word 0d005h -002664r 1 06 D0 .word 0d006h -002666r 1 07 D0 .word 0d007h -002668r 1 08 D0 .word 0d008h -00266Ar 1 09 D0 .word 0d009h -00266Cr 1 0A D0 .word 0d00ah -00266Er 1 0B D0 .word 0d00bh -002670r 1 0C D0 .word 0d00ch -002672r 1 0D D0 .word 0d00dh -002674r 1 0E D0 .word 0d00eh -002676r 1 0F D0 .word 0d00fh -002678r 1 E1 DF .word 0dfe1h -00267Ar 1 E2 DF .word 0dfe2h -00267Cr 1 E3 DF .word 0dfe3h -00267Er 1 E4 DF .word 0dfe4h -002680r 1 E5 DF .word 0dfe5h -002682r 1 E6 DF .word 0dfe6h -002684r 1 E7 DF .word 0dfe7h -002686r 1 E8 DF .word 0dfe8h -002688r 1 E9 DF .word 0dfe9h -00268Ar 1 EA DF .word 0dfeah -00268Cr 1 EB DF .word 0dfebh -00268Er 1 EC DF .word 0dfech -002690r 1 ED DF .word 0dfedh -002692r 1 EE DF .word 0dfeeh -002694r 1 EF DF .word 0dfefh -002696r 1 F0 DF .word 0dff0h -002698r 1 F1 DF .word 0dff1h -00269Ar 1 F2 DF .word 0dff2h -00269Cr 1 F3 DF .word 0dff3h -00269Er 1 F4 DF .word 0dff4h -0026A0r 1 F5 DF .word 0dff5h -0026A2r 1 F6 DF .word 0dff6h -0026A4r 1 F7 DF .word 0dff7h -0026A6r 1 F8 DF .word 0dff8h -0026A8r 1 F9 DF .word 0dff9h -0026AAr 1 FA DF .word 0dffah -0026ACr 1 FB DF .word 0dffbh -0026AEr 1 FC DF .word 0dffch -0026B0r 1 FD DF .word 0dffdh -0026B2r 1 FE DF .word 0dffeh -0026B4r 1 FF DF .word 0dfffh -0026B6r 1 00 E0 .word 0e000h -0026B8r 1 01 E0 .word 0e001h -0026BAr 1 02 E0 .word 0e002h -0026BCr 1 03 E0 .word 0e003h -0026BEr 1 04 E0 .word 0e004h -0026C0r 1 05 E0 .word 0e005h -0026C2r 1 06 E0 .word 0e006h -0026C4r 1 07 E0 .word 0e007h -0026C6r 1 08 E0 .word 0e008h -0026C8r 1 09 E0 .word 0e009h -0026CAr 1 0A E0 .word 0e00ah -0026CCr 1 0B E0 .word 0e00bh -0026CEr 1 0C E0 .word 0e00ch -0026D0r 1 0D E0 .word 0e00dh -0026D2r 1 0E E0 .word 0e00eh -0026D4r 1 0F E0 .word 0e00fh -0026D6r 1 E1 EF .word 0efe1h -0026D8r 1 E2 EF .word 0efe2h -0026DAr 1 E3 EF .word 0efe3h -0026DCr 1 E4 EF .word 0efe4h -0026DEr 1 E5 EF .word 0efe5h -0026E0r 1 E6 EF .word 0efe6h -0026E2r 1 E7 EF .word 0efe7h -0026E4r 1 E8 EF .word 0efe8h -0026E6r 1 E9 EF .word 0efe9h -0026E8r 1 EA EF .word 0efeah -0026EAr 1 EB EF .word 0efebh -0026ECr 1 EC EF .word 0efech -0026EEr 1 ED EF .word 0efedh -0026F0r 1 EE EF .word 0efeeh -0026F2r 1 EF EF .word 0efefh -0026F4r 1 F0 EF .word 0eff0h -0026F6r 1 F1 EF .word 0eff1h -0026F8r 1 F2 EF .word 0eff2h -0026FAr 1 F3 EF .word 0eff3h -0026FCr 1 F4 EF .word 0eff4h -0026FEr 1 F5 EF .word 0eff5h -002700r 1 F6 EF .word 0eff6h -002702r 1 F7 EF .word 0eff7h -002704r 1 F8 EF .word 0eff8h -002706r 1 F9 EF .word 0eff9h -002708r 1 FA EF .word 0effah -00270Ar 1 FB EF .word 0effbh -00270Cr 1 FC EF .word 0effch -00270Er 1 FD EF .word 0effdh -002710r 1 FE EF .word 0effeh -002712r 1 FF EF .word 0efffh -002714r 1 00 F0 .word 0f000h -002716r 1 01 F0 .word 0f001h -002718r 1 02 F0 .word 0f002h -00271Ar 1 03 F0 .word 0f003h -00271Cr 1 04 F0 .word 0f004h -00271Er 1 05 F0 .word 0f005h -002720r 1 06 F0 .word 0f006h -002722r 1 07 F0 .word 0f007h -002724r 1 08 F0 .word 0f008h -002726r 1 09 F0 .word 0f009h -002728r 1 0A F0 .word 0f00ah -00272Ar 1 0B F0 .word 0f00bh -00272Cr 1 0C F0 .word 0f00ch -00272Er 1 0D F0 .word 0f00dh -002730r 1 0E F0 .word 0f00eh -002732r 1 0F F0 .word 0f00fh -002734r 1 E1 FF .word 0ffe1h -002736r 1 E2 FF .word 0ffe2h -002738r 1 E3 FF .word 0ffe3h -00273Ar 1 E4 FF .word 0ffe4h -00273Cr 1 E5 FF .word 0ffe5h -00273Er 1 E6 FF .word 0ffe6h -002740r 1 E7 FF .word 0ffe7h -002742r 1 E8 FF .word 0ffe8h -002744r 1 E9 FF .word 0ffe9h -002746r 1 EA FF .word 0ffeah -002748r 1 EB FF .word 0ffebh -00274Ar 1 EC FF .word 0ffech -00274Cr 1 ED FF .word 0ffedh -00274Er 1 EE FF .word 0ffeeh -002750r 1 EF FF .word 0ffefh -002752r 1 F0 FF .word 0fff0h -002754r 1 F1 FF .word 0fff1h -002756r 1 F2 FF .word 0fff2h -002758r 1 F3 FF .word 0fff3h -00275Ar 1 F4 FF .word 0fff4h -00275Cr 1 F5 FF .word 0fff5h -00275Er 1 F6 FF .word 0fff6h -002760r 1 F7 FF .word 0fff7h -002762r 1 F8 FF .word 0fff8h -002764r 1 F9 FF .word 0fff9h -002766r 1 FA FF .word 0fffah -002768r 1 FB FF .word 0fffbh -00276Ar 1 FC FF .word 0fffch -00276Cr 1 FD FF .word 0fffdh -00276Er 1 FE FF .word 0fffeh -002770r 1 FF FF .word 0ffffh +0023DCr 1 ; alternative hex values, always leading zero +0023DCr 1 00 00 .word 00h +0023DEr 1 01 00 .word 01h +0023E0r 1 02 00 .word 02h +0023E2r 1 03 00 .word 03h +0023E4r 1 04 00 .word 04h +0023E6r 1 05 00 .word 05h +0023E8r 1 06 00 .word 06h +0023EAr 1 07 00 .word 07h +0023ECr 1 08 00 .word 08h +0023EEr 1 09 00 .word 09h +0023F0r 1 0A 00 .word 0ah +0023F2r 1 0B 00 .word 0bh +0023F4r 1 0C 00 .word 0ch +0023F6r 1 0D 00 .word 0dh +0023F8r 1 0E 00 .word 0eh +0023FAr 1 0F 00 .word 0fh +0023FCr 1 10 00 .word 010h +0023FEr 1 11 00 .word 011h +002400r 1 12 00 .word 012h +002402r 1 13 00 .word 013h +002404r 1 70 00 .word 070h +002406r 1 71 00 .word 071h +002408r 1 72 00 .word 072h +00240Ar 1 73 00 .word 073h +00240Cr 1 74 00 .word 074h +00240Er 1 75 00 .word 075h +002410r 1 76 00 .word 076h +002412r 1 77 00 .word 077h +002414r 1 78 00 .word 078h +002416r 1 79 00 .word 079h +002418r 1 7A 00 .word 07ah +00241Ar 1 7B 00 .word 07bh +00241Cr 1 7C 00 .word 07ch +00241Er 1 7D 00 .word 07dh +002420r 1 7E 00 .word 07eh +002422r 1 7F 00 .word 07fh +002424r 1 80 00 .word 080h +002426r 1 81 00 .word 081h +002428r 1 82 00 .word 082h +00242Ar 1 83 00 .word 083h +00242Cr 1 84 00 .word 084h +00242Er 1 85 00 .word 085h +002430r 1 86 00 .word 086h +002432r 1 F0 00 .word 0f0h +002434r 1 F1 00 .word 0f1h +002436r 1 F2 00 .word 0f2h +002438r 1 F3 00 .word 0f3h +00243Ar 1 F4 00 .word 0f4h +00243Cr 1 F5 00 .word 0f5h +00243Er 1 F6 00 .word 0f6h +002440r 1 F7 00 .word 0f7h +002442r 1 F8 00 .word 0f8h +002444r 1 F9 00 .word 0f9h +002446r 1 FA 00 .word 0fah +002448r 1 FB 00 .word 0fbh +00244Ar 1 FC 00 .word 0fch +00244Cr 1 FD 00 .word 0fdh +00244Er 1 FE 00 .word 0feh +002450r 1 FF 00 .word 0ffh +002452r 1 00 01 .word 0100h +002454r 1 01 01 .word 0101h +002456r 1 02 01 .word 0102h +002458r 1 03 01 .word 0103h +00245Ar 1 D2 0F .word 0fd2h +00245Cr 1 D3 0F .word 0fd3h +00245Er 1 D4 0F .word 0fd4h +002460r 1 D5 0F .word 0fd5h +002462r 1 D6 0F .word 0fd6h +002464r 1 D7 0F .word 0fd7h +002466r 1 D8 0F .word 0fd8h +002468r 1 D9 0F .word 0fd9h +00246Ar 1 DA 0F .word 0fdah +00246Cr 1 DB 0F .word 0fdbh +00246Er 1 DC 0F .word 0fdch +002470r 1 DD 0F .word 0fddh +002472r 1 DE 0F .word 0fdeh +002474r 1 DF 0F .word 0fdfh +002476r 1 E0 0F .word 0fe0h +002478r 1 E1 0F .word 0fe1h +00247Ar 1 E2 0F .word 0fe2h +00247Cr 1 E3 0F .word 0fe3h +00247Er 1 E4 0F .word 0fe4h +002480r 1 E5 0F .word 0fe5h +002482r 1 E6 0F .word 0fe6h +002484r 1 E7 0F .word 0fe7h +002486r 1 E8 0F .word 0fe8h +002488r 1 E9 0F .word 0fe9h +00248Ar 1 EA 0F .word 0feah +00248Cr 1 EB 0F .word 0febh +00248Er 1 EC 0F .word 0fech +002490r 1 ED 0F .word 0fedh +002492r 1 EE 0F .word 0feeh +002494r 1 EF 0F .word 0fefh +002496r 1 F0 0F .word 0ff0h +002498r 1 F1 0F .word 0ff1h +00249Ar 1 F2 0F .word 0ff2h +00249Cr 1 F3 0F .word 0ff3h +00249Er 1 F4 0F .word 0ff4h +0024A0r 1 F5 0F .word 0ff5h +0024A2r 1 F6 0F .word 0ff6h +0024A4r 1 F7 0F .word 0ff7h +0024A6r 1 F8 0F .word 0ff8h +0024A8r 1 F9 0F .word 0ff9h +0024AAr 1 FA 0F .word 0ffah +0024ACr 1 FB 0F .word 0ffbh +0024AEr 1 FC 0F .word 0ffch +0024B0r 1 FD 0F .word 0ffdh +0024B2r 1 FE 0F .word 0ffeh +0024B4r 1 FF 0F .word 0fffh +0024B6r 1 00 10 .word 01000h +0024B8r 1 01 10 .word 01001h +0024BAr 1 02 10 .word 01002h +0024BCr 1 03 10 .word 01003h +0024BEr 1 04 10 .word 01004h +0024C0r 1 05 10 .word 01005h +0024C2r 1 06 10 .word 01006h +0024C4r 1 07 10 .word 01007h +0024C6r 1 08 10 .word 01008h +0024C8r 1 F0 7F .word 07ff0h +0024CAr 1 F1 7F .word 07ff1h +0024CCr 1 F2 7F .word 07ff2h +0024CEr 1 F3 7F .word 07ff3h +0024D0r 1 F4 7F .word 07ff4h +0024D2r 1 F5 7F .word 07ff5h +0024D4r 1 F6 7F .word 07ff6h +0024D6r 1 F7 7F .word 07ff7h +0024D8r 1 F8 7F .word 07ff8h +0024DAr 1 F9 7F .word 07ff9h +0024DCr 1 FA 7F .word 07ffah +0024DEr 1 FB 7F .word 07ffbh +0024E0r 1 FC 7F .word 07ffch +0024E2r 1 FD 7F .word 07ffdh +0024E4r 1 FE 7F .word 07ffeh +0024E6r 1 FF 7F .word 07fffh +0024E8r 1 00 80 .word 08000h +0024EAr 1 01 80 .word 08001h +0024ECr 1 02 80 .word 08002h +0024EEr 1 03 80 .word 08003h +0024F0r 1 04 80 .word 08004h +0024F2r 1 05 80 .word 08005h +0024F4r 1 06 80 .word 08006h +0024F6r 1 07 80 .word 08007h +0024F8r 1 08 80 .word 08008h +0024FAr 1 09 80 .word 08009h +0024FCr 1 0A 80 .word 0800ah +0024FEr 1 0B 80 .word 0800bh +002500r 1 E1 9F .word 09fe1h +002502r 1 E2 9F .word 09fe2h +002504r 1 E3 9F .word 09fe3h +002506r 1 E4 9F .word 09fe4h +002508r 1 E5 9F .word 09fe5h +00250Ar 1 E6 9F .word 09fe6h +00250Cr 1 E7 9F .word 09fe7h +00250Er 1 E8 9F .word 09fe8h +002510r 1 E9 9F .word 09fe9h +002512r 1 EA 9F .word 09feah +002514r 1 EB 9F .word 09febh +002516r 1 EC 9F .word 09fech +002518r 1 ED 9F .word 09fedh +00251Ar 1 EE 9F .word 09feeh +00251Cr 1 EF 9F .word 09fefh +00251Er 1 F0 9F .word 09ff0h +002520r 1 F1 9F .word 09ff1h +002522r 1 F2 9F .word 09ff2h +002524r 1 F3 9F .word 09ff3h +002526r 1 F4 9F .word 09ff4h +002528r 1 F5 9F .word 09ff5h +00252Ar 1 F6 9F .word 09ff6h +00252Cr 1 F7 9F .word 09ff7h +00252Er 1 F8 9F .word 09ff8h +002530r 1 F9 9F .word 09ff9h +002532r 1 FA 9F .word 09ffah +002534r 1 FB 9F .word 09ffbh +002536r 1 FC 9F .word 09ffch +002538r 1 FD 9F .word 09ffdh +00253Ar 1 FE 9F .word 09ffeh +00253Cr 1 FF 9F .word 09fffh +00253Er 1 00 A0 .word 0a000h +002540r 1 01 A0 .word 0a001h +002542r 1 02 A0 .word 0a002h +002544r 1 03 A0 .word 0a003h +002546r 1 04 A0 .word 0a004h +002548r 1 05 A0 .word 0a005h +00254Ar 1 06 A0 .word 0a006h +00254Cr 1 07 A0 .word 0a007h +00254Er 1 08 A0 .word 0a008h +002550r 1 09 A0 .word 0a009h +002552r 1 0A A0 .word 0a00ah +002554r 1 0B A0 .word 0a00bh +002556r 1 0C A0 .word 0a00ch +002558r 1 0D A0 .word 0a00dh +00255Ar 1 0E A0 .word 0a00eh +00255Cr 1 0F A0 .word 0a00fh +00255Er 1 E1 AF .word 0afe1h +002560r 1 E2 AF .word 0afe2h +002562r 1 E3 AF .word 0afe3h +002564r 1 E4 AF .word 0afe4h +002566r 1 E5 AF .word 0afe5h +002568r 1 E6 AF .word 0afe6h +00256Ar 1 E7 AF .word 0afe7h +00256Cr 1 E8 AF .word 0afe8h +00256Er 1 E9 AF .word 0afe9h +002570r 1 EA AF .word 0afeah +002572r 1 EB AF .word 0afebh +002574r 1 EC AF .word 0afech +002576r 1 ED AF .word 0afedh +002578r 1 EE AF .word 0afeeh +00257Ar 1 EF AF .word 0afefh +00257Cr 1 F0 AF .word 0aff0h +00257Er 1 F1 AF .word 0aff1h +002580r 1 F2 AF .word 0aff2h +002582r 1 F3 AF .word 0aff3h +002584r 1 F4 AF .word 0aff4h +002586r 1 F5 AF .word 0aff5h +002588r 1 F6 AF .word 0aff6h +00258Ar 1 F7 AF .word 0aff7h +00258Cr 1 F8 AF .word 0aff8h +00258Er 1 F9 AF .word 0aff9h +002590r 1 FA AF .word 0affah +002592r 1 FB AF .word 0affbh +002594r 1 FC AF .word 0affch +002596r 1 FD AF .word 0affdh +002598r 1 FE AF .word 0affeh +00259Ar 1 FF AF .word 0afffh +00259Cr 1 00 B0 .word 0b000h +00259Er 1 01 B0 .word 0b001h +0025A0r 1 02 B0 .word 0b002h +0025A2r 1 03 B0 .word 0b003h +0025A4r 1 04 B0 .word 0b004h +0025A6r 1 05 B0 .word 0b005h +0025A8r 1 06 B0 .word 0b006h +0025AAr 1 07 B0 .word 0b007h +0025ACr 1 08 B0 .word 0b008h +0025AEr 1 09 B0 .word 0b009h +0025B0r 1 0A B0 .word 0b00ah +0025B2r 1 0B B0 .word 0b00bh +0025B4r 1 0C B0 .word 0b00ch +0025B6r 1 0D B0 .word 0b00dh +0025B8r 1 0E B0 .word 0b00eh +0025BAr 1 0F B0 .word 0b00fh +0025BCr 1 E1 BF .word 0bfe1h +0025BEr 1 E2 BF .word 0bfe2h +0025C0r 1 E3 BF .word 0bfe3h +0025C2r 1 E4 BF .word 0bfe4h +0025C4r 1 E5 BF .word 0bfe5h +0025C6r 1 E6 BF .word 0bfe6h +0025C8r 1 E7 BF .word 0bfe7h +0025CAr 1 E8 BF .word 0bfe8h +0025CCr 1 E9 BF .word 0bfe9h +0025CEr 1 EA BF .word 0bfeah +0025D0r 1 EB BF .word 0bfebh +0025D2r 1 EC BF .word 0bfech +0025D4r 1 ED BF .word 0bfedh +0025D6r 1 EE BF .word 0bfeeh +0025D8r 1 EF BF .word 0bfefh +0025DAr 1 F0 BF .word 0bff0h +0025DCr 1 F1 BF .word 0bff1h +0025DEr 1 F2 BF .word 0bff2h +0025E0r 1 F3 BF .word 0bff3h +0025E2r 1 F4 BF .word 0bff4h +0025E4r 1 F5 BF .word 0bff5h +0025E6r 1 F6 BF .word 0bff6h +0025E8r 1 F7 BF .word 0bff7h +0025EAr 1 F8 BF .word 0bff8h +0025ECr 1 F9 BF .word 0bff9h +0025EEr 1 FA BF .word 0bffah +0025F0r 1 FB BF .word 0bffbh +0025F2r 1 FC BF .word 0bffch +0025F4r 1 FD BF .word 0bffdh +0025F6r 1 FE BF .word 0bffeh +0025F8r 1 FF BF .word 0bfffh +0025FAr 1 00 C0 .word 0c000h +0025FCr 1 01 C0 .word 0c001h +0025FEr 1 02 C0 .word 0c002h +002600r 1 03 C0 .word 0c003h +002602r 1 04 C0 .word 0c004h +002604r 1 05 C0 .word 0c005h +002606r 1 06 C0 .word 0c006h +002608r 1 07 C0 .word 0c007h +00260Ar 1 08 C0 .word 0c008h +00260Cr 1 09 C0 .word 0c009h +00260Er 1 0A C0 .word 0c00ah +002610r 1 0B C0 .word 0c00bh +002612r 1 0C C0 .word 0c00ch +002614r 1 0D C0 .word 0c00dh +002616r 1 0E C0 .word 0c00eh +002618r 1 0F C0 .word 0c00fh +00261Ar 1 E1 CF .word 0cfe1h +00261Cr 1 E2 CF .word 0cfe2h +00261Er 1 E3 CF .word 0cfe3h +002620r 1 E4 CF .word 0cfe4h +002622r 1 E5 CF .word 0cfe5h +002624r 1 E6 CF .word 0cfe6h +002626r 1 E7 CF .word 0cfe7h +002628r 1 E8 CF .word 0cfe8h +00262Ar 1 E9 CF .word 0cfe9h +00262Cr 1 EA CF .word 0cfeah +00262Er 1 EB CF .word 0cfebh +002630r 1 EC CF .word 0cfech +002632r 1 ED CF .word 0cfedh +002634r 1 EE CF .word 0cfeeh +002636r 1 EF CF .word 0cfefh +002638r 1 F0 CF .word 0cff0h +00263Ar 1 F1 CF .word 0cff1h +00263Cr 1 F2 CF .word 0cff2h +00263Er 1 F3 CF .word 0cff3h +002640r 1 F4 CF .word 0cff4h +002642r 1 F5 CF .word 0cff5h +002644r 1 F6 CF .word 0cff6h +002646r 1 F7 CF .word 0cff7h +002648r 1 F8 CF .word 0cff8h +00264Ar 1 F9 CF .word 0cff9h +00264Cr 1 FA CF .word 0cffah +00264Er 1 FB CF .word 0cffbh +002650r 1 FC CF .word 0cffch +002652r 1 FD CF .word 0cffdh +002654r 1 FE CF .word 0cffeh +002656r 1 FF CF .word 0cfffh +002658r 1 00 D0 .word 0d000h +00265Ar 1 01 D0 .word 0d001h +00265Cr 1 02 D0 .word 0d002h +00265Er 1 03 D0 .word 0d003h +002660r 1 04 D0 .word 0d004h +002662r 1 05 D0 .word 0d005h +002664r 1 06 D0 .word 0d006h +002666r 1 07 D0 .word 0d007h +002668r 1 08 D0 .word 0d008h +00266Ar 1 09 D0 .word 0d009h +00266Cr 1 0A D0 .word 0d00ah +00266Er 1 0B D0 .word 0d00bh +002670r 1 0C D0 .word 0d00ch +002672r 1 0D D0 .word 0d00dh +002674r 1 0E D0 .word 0d00eh +002676r 1 0F D0 .word 0d00fh +002678r 1 E1 DF .word 0dfe1h +00267Ar 1 E2 DF .word 0dfe2h +00267Cr 1 E3 DF .word 0dfe3h +00267Er 1 E4 DF .word 0dfe4h +002680r 1 E5 DF .word 0dfe5h +002682r 1 E6 DF .word 0dfe6h +002684r 1 E7 DF .word 0dfe7h +002686r 1 E8 DF .word 0dfe8h +002688r 1 E9 DF .word 0dfe9h +00268Ar 1 EA DF .word 0dfeah +00268Cr 1 EB DF .word 0dfebh +00268Er 1 EC DF .word 0dfech +002690r 1 ED DF .word 0dfedh +002692r 1 EE DF .word 0dfeeh +002694r 1 EF DF .word 0dfefh +002696r 1 F0 DF .word 0dff0h +002698r 1 F1 DF .word 0dff1h +00269Ar 1 F2 DF .word 0dff2h +00269Cr 1 F3 DF .word 0dff3h +00269Er 1 F4 DF .word 0dff4h +0026A0r 1 F5 DF .word 0dff5h +0026A2r 1 F6 DF .word 0dff6h +0026A4r 1 F7 DF .word 0dff7h +0026A6r 1 F8 DF .word 0dff8h +0026A8r 1 F9 DF .word 0dff9h +0026AAr 1 FA DF .word 0dffah +0026ACr 1 FB DF .word 0dffbh +0026AEr 1 FC DF .word 0dffch +0026B0r 1 FD DF .word 0dffdh +0026B2r 1 FE DF .word 0dffeh +0026B4r 1 FF DF .word 0dfffh +0026B6r 1 00 E0 .word 0e000h +0026B8r 1 01 E0 .word 0e001h +0026BAr 1 02 E0 .word 0e002h +0026BCr 1 03 E0 .word 0e003h +0026BEr 1 04 E0 .word 0e004h +0026C0r 1 05 E0 .word 0e005h +0026C2r 1 06 E0 .word 0e006h +0026C4r 1 07 E0 .word 0e007h +0026C6r 1 08 E0 .word 0e008h +0026C8r 1 09 E0 .word 0e009h +0026CAr 1 0A E0 .word 0e00ah +0026CCr 1 0B E0 .word 0e00bh +0026CEr 1 0C E0 .word 0e00ch +0026D0r 1 0D E0 .word 0e00dh +0026D2r 1 0E E0 .word 0e00eh +0026D4r 1 0F E0 .word 0e00fh +0026D6r 1 E1 EF .word 0efe1h +0026D8r 1 E2 EF .word 0efe2h +0026DAr 1 E3 EF .word 0efe3h +0026DCr 1 E4 EF .word 0efe4h +0026DEr 1 E5 EF .word 0efe5h +0026E0r 1 E6 EF .word 0efe6h +0026E2r 1 E7 EF .word 0efe7h +0026E4r 1 E8 EF .word 0efe8h +0026E6r 1 E9 EF .word 0efe9h +0026E8r 1 EA EF .word 0efeah +0026EAr 1 EB EF .word 0efebh +0026ECr 1 EC EF .word 0efech +0026EEr 1 ED EF .word 0efedh +0026F0r 1 EE EF .word 0efeeh +0026F2r 1 EF EF .word 0efefh +0026F4r 1 F0 EF .word 0eff0h +0026F6r 1 F1 EF .word 0eff1h +0026F8r 1 F2 EF .word 0eff2h +0026FAr 1 F3 EF .word 0eff3h +0026FCr 1 F4 EF .word 0eff4h +0026FEr 1 F5 EF .word 0eff5h +002700r 1 F6 EF .word 0eff6h +002702r 1 F7 EF .word 0eff7h +002704r 1 F8 EF .word 0eff8h +002706r 1 F9 EF .word 0eff9h +002708r 1 FA EF .word 0effah +00270Ar 1 FB EF .word 0effbh +00270Cr 1 FC EF .word 0effch +00270Er 1 FD EF .word 0effdh +002710r 1 FE EF .word 0effeh +002712r 1 FF EF .word 0efffh +002714r 1 00 F0 .word 0f000h +002716r 1 01 F0 .word 0f001h +002718r 1 02 F0 .word 0f002h +00271Ar 1 03 F0 .word 0f003h +00271Cr 1 04 F0 .word 0f004h +00271Er 1 05 F0 .word 0f005h +002720r 1 06 F0 .word 0f006h +002722r 1 07 F0 .word 0f007h +002724r 1 08 F0 .word 0f008h +002726r 1 09 F0 .word 0f009h +002728r 1 0A F0 .word 0f00ah +00272Ar 1 0B F0 .word 0f00bh +00272Cr 1 0C F0 .word 0f00ch +00272Er 1 0D F0 .word 0f00dh +002730r 1 0E F0 .word 0f00eh +002732r 1 0F F0 .word 0f00fh +002734r 1 E1 FF .word 0ffe1h +002736r 1 E2 FF .word 0ffe2h +002738r 1 E3 FF .word 0ffe3h +00273Ar 1 E4 FF .word 0ffe4h +00273Cr 1 E5 FF .word 0ffe5h +00273Er 1 E6 FF .word 0ffe6h +002740r 1 E7 FF .word 0ffe7h +002742r 1 E8 FF .word 0ffe8h +002744r 1 E9 FF .word 0ffe9h +002746r 1 EA FF .word 0ffeah +002748r 1 EB FF .word 0ffebh +00274Ar 1 EC FF .word 0ffech +00274Cr 1 ED FF .word 0ffedh +00274Er 1 EE FF .word 0ffeeh +002750r 1 EF FF .word 0ffefh +002752r 1 F0 FF .word 0fff0h +002754r 1 F1 FF .word 0fff1h +002756r 1 F2 FF .word 0fff2h +002758r 1 F3 FF .word 0fff3h +00275Ar 1 F4 FF .word 0fff4h +00275Cr 1 F5 FF .word 0fff5h +00275Er 1 F6 FF .word 0fff6h +002760r 1 F7 FF .word 0fff7h +002762r 1 F8 FF .word 0fff8h +002764r 1 F9 FF .word 0fff9h +002766r 1 FA FF .word 0fffah +002768r 1 FB FF .word 0fffbh +00276Ar 1 FC FF .word 0fffch +00276Cr 1 FD FF .word 0fffdh +00276Er 1 FE FF .word 0fffeh +002770r 1 FF FF .word 0ffffh 002772r 1 -002772r 1 ; binary values, variable length -002772r 1 00 00 .word %0 -002774r 1 01 00 .word %01 -002776r 1 02 00 .word %010 -002778r 1 03 00 .word %011 -00277Ar 1 04 00 .word %0100 -00277Cr 1 05 00 .word %0101 -00277Er 1 06 00 .word %0110 -002780r 1 07 00 .word %0111 -002782r 1 08 00 .word %01000 -002784r 1 09 00 .word %01001 -002786r 1 0A 00 .word %01010 -002788r 1 0B 00 .word %01011 -00278Ar 1 0C 00 .word %01100 -00278Cr 1 0D 00 .word %01101 -00278Er 1 0E 00 .word %01110 -002790r 1 0F 00 .word %01111 -002792r 1 10 00 .word %010000 -002794r 1 11 00 .word %010001 -002796r 1 12 00 .word %010010 -002798r 1 13 00 .word %010011 -00279Ar 1 70 00 .word %01110000 -00279Cr 1 71 00 .word %01110001 -00279Er 1 72 00 .word %01110010 -0027A0r 1 73 00 .word %01110011 -0027A2r 1 74 00 .word %01110100 -0027A4r 1 75 00 .word %01110101 -0027A6r 1 76 00 .word %01110110 -0027A8r 1 77 00 .word %01110111 -0027AAr 1 78 00 .word %01111000 -0027ACr 1 79 00 .word %01111001 -0027AEr 1 7A 00 .word %01111010 -0027B0r 1 7B 00 .word %01111011 -0027B2r 1 7C 00 .word %01111100 -0027B4r 1 7D 00 .word %01111101 -0027B6r 1 7E 00 .word %01111110 -0027B8r 1 7F 00 .word %01111111 -0027BAr 1 80 00 .word %010000000 -0027BCr 1 81 00 .word %010000001 -0027BEr 1 82 00 .word %010000010 -0027C0r 1 83 00 .word %010000011 -0027C2r 1 84 00 .word %010000100 -0027C4r 1 85 00 .word %010000101 -0027C6r 1 86 00 .word %010000110 -0027C8r 1 F0 00 .word %011110000 -0027CAr 1 F1 00 .word %011110001 -0027CCr 1 F2 00 .word %011110010 -0027CEr 1 F3 00 .word %011110011 -0027D0r 1 F4 00 .word %011110100 -0027D2r 1 F5 00 .word %011110101 -0027D4r 1 F6 00 .word %011110110 -0027D6r 1 F7 00 .word %011110111 -0027D8r 1 F8 00 .word %011111000 -0027DAr 1 F9 00 .word %011111001 -0027DCr 1 FA 00 .word %011111010 -0027DEr 1 FB 00 .word %011111011 -0027E0r 1 FC 00 .word %011111100 -0027E2r 1 FD 00 .word %011111101 -0027E4r 1 FE 00 .word %011111110 -0027E6r 1 FF 00 .word %011111111 -0027E8r 1 00 01 .word %100000000 -0027EAr 1 01 01 .word %100000001 -0027ECr 1 02 01 .word %100000010 -0027EEr 1 03 01 .word %100000011 -0027F0r 1 D2 0F .word %111111010010 -0027F2r 1 D3 0F .word %111111010011 -0027F4r 1 D4 0F .word %111111010100 -0027F6r 1 D5 0F .word %111111010101 -0027F8r 1 D6 0F .word %111111010110 -0027FAr 1 D7 0F .word %111111010111 -0027FCr 1 D8 0F .word %111111011000 -0027FEr 1 D9 0F .word %111111011001 -002800r 1 DA 0F .word %111111011010 -002802r 1 DB 0F .word %111111011011 -002804r 1 DC 0F .word %111111011100 -002806r 1 DD 0F .word %111111011101 -002808r 1 DE 0F .word %111111011110 -00280Ar 1 DF 0F .word %111111011111 -00280Cr 1 E0 0F .word %111111100000 -00280Er 1 E1 0F .word %111111100001 -002810r 1 E2 0F .word %111111100010 -002812r 1 E3 0F .word %111111100011 -002814r 1 E4 0F .word %111111100100 -002816r 1 E5 0F .word %111111100101 -002818r 1 E6 0F .word %111111100110 -00281Ar 1 E7 0F .word %111111100111 -00281Cr 1 E8 0F .word %111111101000 -00281Er 1 E9 0F .word %111111101001 -002820r 1 EA 0F .word %111111101010 -002822r 1 EB 0F .word %111111101011 -002824r 1 EC 0F .word %111111101100 -002826r 1 ED 0F .word %111111101101 -002828r 1 EE 0F .word %111111101110 -00282Ar 1 EF 0F .word %111111101111 -00282Cr 1 F0 0F .word %111111110000 -00282Er 1 F1 0F .word %111111110001 -002830r 1 F2 0F .word %111111110010 -002832r 1 F3 0F .word %111111110011 -002834r 1 F4 0F .word %111111110100 -002836r 1 F5 0F .word %111111110101 -002838r 1 F6 0F .word %111111110110 -00283Ar 1 F7 0F .word %111111110111 -00283Cr 1 F8 0F .word %111111111000 -00283Er 1 F9 0F .word %111111111001 -002840r 1 FA 0F .word %111111111010 -002842r 1 FB 0F .word %111111111011 -002844r 1 FC 0F .word %111111111100 -002846r 1 FD 0F .word %111111111101 -002848r 1 FE 0F .word %111111111110 -00284Ar 1 FF 0F .word %111111111111 -00284Cr 1 00 10 .word %1000000000000 -00284Er 1 01 10 .word %1000000000001 -002850r 1 02 10 .word %1000000000010 -002852r 1 03 10 .word %1000000000011 -002854r 1 04 10 .word %1000000000100 -002856r 1 05 10 .word %1000000000101 -002858r 1 06 10 .word %1000000000110 -00285Ar 1 07 10 .word %1000000000111 -00285Cr 1 08 10 .word %1000000001000 -00285Er 1 F0 7F .word %111111111110000 -002860r 1 F1 7F .word %111111111110001 -002862r 1 F2 7F .word %111111111110010 -002864r 1 F3 7F .word %111111111110011 -002866r 1 F4 7F .word %111111111110100 -002868r 1 F5 7F .word %111111111110101 -00286Ar 1 F6 7F .word %111111111110110 -00286Cr 1 F7 7F .word %111111111110111 -00286Er 1 F8 7F .word %111111111111000 -002870r 1 F9 7F .word %111111111111001 -002872r 1 FA 7F .word %111111111111010 -002874r 1 FB 7F .word %111111111111011 -002876r 1 FC 7F .word %111111111111100 -002878r 1 FD 7F .word %111111111111101 -00287Ar 1 FE 7F .word %111111111111110 -00287Cr 1 FF 7F .word %111111111111111 -00287Er 1 00 80 .word %1000000000000000 -002880r 1 01 80 .word %1000000000000001 -002882r 1 02 80 .word %1000000000000010 -002884r 1 03 80 .word %1000000000000011 -002886r 1 04 80 .word %1000000000000100 -002888r 1 05 80 .word %1000000000000101 -00288Ar 1 06 80 .word %1000000000000110 -00288Cr 1 07 80 .word %1000000000000111 -00288Er 1 08 80 .word %1000000000001000 -002890r 1 09 80 .word %1000000000001001 -002892r 1 0A 80 .word %1000000000001010 -002894r 1 0B 80 .word %1000000000001011 -002896r 1 E1 9F .word %1001111111100001 -002898r 1 E2 9F .word %1001111111100010 -00289Ar 1 E3 9F .word %1001111111100011 -00289Cr 1 E4 9F .word %1001111111100100 -00289Er 1 E5 9F .word %1001111111100101 -0028A0r 1 E6 9F .word %1001111111100110 -0028A2r 1 E7 9F .word %1001111111100111 -0028A4r 1 E8 9F .word %1001111111101000 -0028A6r 1 E9 9F .word %1001111111101001 -0028A8r 1 EA 9F .word %1001111111101010 -0028AAr 1 EB 9F .word %1001111111101011 -0028ACr 1 EC 9F .word %1001111111101100 -0028AEr 1 ED 9F .word %1001111111101101 -0028B0r 1 EE 9F .word %1001111111101110 -0028B2r 1 EF 9F .word %1001111111101111 -0028B4r 1 F0 9F .word %1001111111110000 -0028B6r 1 F1 9F .word %1001111111110001 -0028B8r 1 F2 9F .word %1001111111110010 -0028BAr 1 F3 9F .word %1001111111110011 -0028BCr 1 F4 9F .word %1001111111110100 -0028BEr 1 F5 9F .word %1001111111110101 -0028C0r 1 F6 9F .word %1001111111110110 -0028C2r 1 F7 9F .word %1001111111110111 -0028C4r 1 F8 9F .word %1001111111111000 -0028C6r 1 F9 9F .word %1001111111111001 -0028C8r 1 FA 9F .word %1001111111111010 -0028CAr 1 FB 9F .word %1001111111111011 -0028CCr 1 FC 9F .word %1001111111111100 -0028CEr 1 FD 9F .word %1001111111111101 -0028D0r 1 FE 9F .word %1001111111111110 -0028D2r 1 FF 9F .word %1001111111111111 -0028D4r 1 00 A0 .word %1010000000000000 -0028D6r 1 01 A0 .word %1010000000000001 -0028D8r 1 02 A0 .word %1010000000000010 -0028DAr 1 03 A0 .word %1010000000000011 -0028DCr 1 04 A0 .word %1010000000000100 -0028DEr 1 05 A0 .word %1010000000000101 -0028E0r 1 06 A0 .word %1010000000000110 -0028E2r 1 07 A0 .word %1010000000000111 -0028E4r 1 08 A0 .word %1010000000001000 -0028E6r 1 09 A0 .word %1010000000001001 -0028E8r 1 0A A0 .word %1010000000001010 -0028EAr 1 0B A0 .word %1010000000001011 -0028ECr 1 0C A0 .word %1010000000001100 -0028EEr 1 0D A0 .word %1010000000001101 -0028F0r 1 0E A0 .word %1010000000001110 -0028F2r 1 0F A0 .word %1010000000001111 -0028F4r 1 E1 AF .word %1010111111100001 -0028F6r 1 E2 AF .word %1010111111100010 -0028F8r 1 E3 AF .word %1010111111100011 -0028FAr 1 E4 AF .word %1010111111100100 -0028FCr 1 E5 AF .word %1010111111100101 -0028FEr 1 E6 AF .word %1010111111100110 -002900r 1 E7 AF .word %1010111111100111 -002902r 1 E8 AF .word %1010111111101000 -002904r 1 E9 AF .word %1010111111101001 -002906r 1 EA AF .word %1010111111101010 -002908r 1 EB AF .word %1010111111101011 -00290Ar 1 EC AF .word %1010111111101100 -00290Cr 1 ED AF .word %1010111111101101 -00290Er 1 EE AF .word %1010111111101110 -002910r 1 EF AF .word %1010111111101111 -002912r 1 F0 AF .word %1010111111110000 -002914r 1 F1 AF .word %1010111111110001 -002916r 1 F2 AF .word %1010111111110010 -002918r 1 F3 AF .word %1010111111110011 -00291Ar 1 F4 AF .word %1010111111110100 -00291Cr 1 F5 AF .word %1010111111110101 -00291Er 1 F6 AF .word %1010111111110110 -002920r 1 F7 AF .word %1010111111110111 -002922r 1 F8 AF .word %1010111111111000 -002924r 1 F9 AF .word %1010111111111001 -002926r 1 FA AF .word %1010111111111010 -002928r 1 FB AF .word %1010111111111011 -00292Ar 1 FC AF .word %1010111111111100 -00292Cr 1 FD AF .word %1010111111111101 -00292Er 1 FE AF .word %1010111111111110 -002930r 1 FF AF .word %1010111111111111 -002932r 1 00 B0 .word %1011000000000000 -002934r 1 01 B0 .word %1011000000000001 -002936r 1 02 B0 .word %1011000000000010 -002938r 1 03 B0 .word %1011000000000011 -00293Ar 1 04 B0 .word %1011000000000100 -00293Cr 1 05 B0 .word %1011000000000101 -00293Er 1 06 B0 .word %1011000000000110 -002940r 1 07 B0 .word %1011000000000111 -002942r 1 08 B0 .word %1011000000001000 -002944r 1 09 B0 .word %1011000000001001 -002946r 1 0A B0 .word %1011000000001010 -002948r 1 0B B0 .word %1011000000001011 -00294Ar 1 0C B0 .word %1011000000001100 -00294Cr 1 0D B0 .word %1011000000001101 -00294Er 1 0E B0 .word %1011000000001110 -002950r 1 0F B0 .word %1011000000001111 -002952r 1 E1 BF .word %1011111111100001 -002954r 1 E2 BF .word %1011111111100010 -002956r 1 E3 BF .word %1011111111100011 -002958r 1 E4 BF .word %1011111111100100 -00295Ar 1 E5 BF .word %1011111111100101 -00295Cr 1 E6 BF .word %1011111111100110 -00295Er 1 E7 BF .word %1011111111100111 -002960r 1 E8 BF .word %1011111111101000 -002962r 1 E9 BF .word %1011111111101001 -002964r 1 EA BF .word %1011111111101010 -002966r 1 EB BF .word %1011111111101011 -002968r 1 EC BF .word %1011111111101100 -00296Ar 1 ED BF .word %1011111111101101 -00296Cr 1 EE BF .word %1011111111101110 -00296Er 1 EF BF .word %1011111111101111 -002970r 1 F0 BF .word %1011111111110000 -002972r 1 F1 BF .word %1011111111110001 -002974r 1 F2 BF .word %1011111111110010 -002976r 1 F3 BF .word %1011111111110011 -002978r 1 F4 BF .word %1011111111110100 -00297Ar 1 F5 BF .word %1011111111110101 -00297Cr 1 F6 BF .word %1011111111110110 -00297Er 1 F7 BF .word %1011111111110111 -002980r 1 F8 BF .word %1011111111111000 -002982r 1 F9 BF .word %1011111111111001 -002984r 1 FA BF .word %1011111111111010 -002986r 1 FB BF .word %1011111111111011 -002988r 1 FC BF .word %1011111111111100 -00298Ar 1 FD BF .word %1011111111111101 -00298Cr 1 FE BF .word %1011111111111110 -00298Er 1 FF BF .word %1011111111111111 -002990r 1 00 C0 .word %1100000000000000 -002992r 1 01 C0 .word %1100000000000001 -002994r 1 02 C0 .word %1100000000000010 -002996r 1 03 C0 .word %1100000000000011 -002998r 1 04 C0 .word %1100000000000100 -00299Ar 1 05 C0 .word %1100000000000101 -00299Cr 1 06 C0 .word %1100000000000110 -00299Er 1 07 C0 .word %1100000000000111 -0029A0r 1 08 C0 .word %1100000000001000 -0029A2r 1 09 C0 .word %1100000000001001 -0029A4r 1 0A C0 .word %1100000000001010 -0029A6r 1 0B C0 .word %1100000000001011 -0029A8r 1 0C C0 .word %1100000000001100 -0029AAr 1 0D C0 .word %1100000000001101 -0029ACr 1 0E C0 .word %1100000000001110 -0029AEr 1 0F C0 .word %1100000000001111 -0029B0r 1 E1 CF .word %1100111111100001 -0029B2r 1 E2 CF .word %1100111111100010 -0029B4r 1 E3 CF .word %1100111111100011 -0029B6r 1 E4 CF .word %1100111111100100 -0029B8r 1 E5 CF .word %1100111111100101 -0029BAr 1 E6 CF .word %1100111111100110 -0029BCr 1 E7 CF .word %1100111111100111 -0029BEr 1 E8 CF .word %1100111111101000 -0029C0r 1 E9 CF .word %1100111111101001 -0029C2r 1 EA CF .word %1100111111101010 -0029C4r 1 EB CF .word %1100111111101011 -0029C6r 1 EC CF .word %1100111111101100 -0029C8r 1 ED CF .word %1100111111101101 -0029CAr 1 EE CF .word %1100111111101110 -0029CCr 1 EF CF .word %1100111111101111 -0029CEr 1 F0 CF .word %1100111111110000 -0029D0r 1 F1 CF .word %1100111111110001 -0029D2r 1 F2 CF .word %1100111111110010 -0029D4r 1 F3 CF .word %1100111111110011 -0029D6r 1 F4 CF .word %1100111111110100 -0029D8r 1 F5 CF .word %1100111111110101 -0029DAr 1 F6 CF .word %1100111111110110 -0029DCr 1 F7 CF .word %1100111111110111 -0029DEr 1 F8 CF .word %1100111111111000 -0029E0r 1 F9 CF .word %1100111111111001 -0029E2r 1 FA CF .word %1100111111111010 -0029E4r 1 FB CF .word %1100111111111011 -0029E6r 1 FC CF .word %1100111111111100 -0029E8r 1 FD CF .word %1100111111111101 -0029EAr 1 FE CF .word %1100111111111110 -0029ECr 1 FF CF .word %1100111111111111 -0029EEr 1 00 D0 .word %1101000000000000 -0029F0r 1 01 D0 .word %1101000000000001 -0029F2r 1 02 D0 .word %1101000000000010 -0029F4r 1 03 D0 .word %1101000000000011 -0029F6r 1 04 D0 .word %1101000000000100 -0029F8r 1 05 D0 .word %1101000000000101 -0029FAr 1 06 D0 .word %1101000000000110 -0029FCr 1 07 D0 .word %1101000000000111 -0029FEr 1 08 D0 .word %1101000000001000 -002A00r 1 09 D0 .word %1101000000001001 -002A02r 1 0A D0 .word %1101000000001010 -002A04r 1 0B D0 .word %1101000000001011 -002A06r 1 0C D0 .word %1101000000001100 -002A08r 1 0D D0 .word %1101000000001101 -002A0Ar 1 0E D0 .word %1101000000001110 -002A0Cr 1 0F D0 .word %1101000000001111 -002A0Er 1 E1 DF .word %1101111111100001 -002A10r 1 E2 DF .word %1101111111100010 -002A12r 1 E3 DF .word %1101111111100011 -002A14r 1 E4 DF .word %1101111111100100 -002A16r 1 E5 DF .word %1101111111100101 -002A18r 1 E6 DF .word %1101111111100110 -002A1Ar 1 E7 DF .word %1101111111100111 -002A1Cr 1 E8 DF .word %1101111111101000 -002A1Er 1 E9 DF .word %1101111111101001 -002A20r 1 EA DF .word %1101111111101010 -002A22r 1 EB DF .word %1101111111101011 -002A24r 1 EC DF .word %1101111111101100 -002A26r 1 ED DF .word %1101111111101101 -002A28r 1 EE DF .word %1101111111101110 -002A2Ar 1 EF DF .word %1101111111101111 -002A2Cr 1 F0 DF .word %1101111111110000 -002A2Er 1 F1 DF .word %1101111111110001 -002A30r 1 F2 DF .word %1101111111110010 -002A32r 1 F3 DF .word %1101111111110011 -002A34r 1 F4 DF .word %1101111111110100 -002A36r 1 F5 DF .word %1101111111110101 -002A38r 1 F6 DF .word %1101111111110110 -002A3Ar 1 F7 DF .word %1101111111110111 -002A3Cr 1 F8 DF .word %1101111111111000 -002A3Er 1 F9 DF .word %1101111111111001 -002A40r 1 FA DF .word %1101111111111010 -002A42r 1 FB DF .word %1101111111111011 -002A44r 1 FC DF .word %1101111111111100 -002A46r 1 FD DF .word %1101111111111101 -002A48r 1 FE DF .word %1101111111111110 -002A4Ar 1 FF DF .word %1101111111111111 -002A4Cr 1 00 E0 .word %1110000000000000 -002A4Er 1 01 E0 .word %1110000000000001 -002A50r 1 02 E0 .word %1110000000000010 -002A52r 1 03 E0 .word %1110000000000011 -002A54r 1 04 E0 .word %1110000000000100 -002A56r 1 05 E0 .word %1110000000000101 -002A58r 1 06 E0 .word %1110000000000110 -002A5Ar 1 07 E0 .word %1110000000000111 -002A5Cr 1 08 E0 .word %1110000000001000 -002A5Er 1 09 E0 .word %1110000000001001 -002A60r 1 0A E0 .word %1110000000001010 -002A62r 1 0B E0 .word %1110000000001011 -002A64r 1 0C E0 .word %1110000000001100 -002A66r 1 0D E0 .word %1110000000001101 -002A68r 1 0E E0 .word %1110000000001110 -002A6Ar 1 0F E0 .word %1110000000001111 -002A6Cr 1 E1 EF .word %1110111111100001 -002A6Er 1 E2 EF .word %1110111111100010 -002A70r 1 E3 EF .word %1110111111100011 -002A72r 1 E4 EF .word %1110111111100100 -002A74r 1 E5 EF .word %1110111111100101 -002A76r 1 E6 EF .word %1110111111100110 -002A78r 1 E7 EF .word %1110111111100111 -002A7Ar 1 E8 EF .word %1110111111101000 -002A7Cr 1 E9 EF .word %1110111111101001 -002A7Er 1 EA EF .word %1110111111101010 -002A80r 1 EB EF .word %1110111111101011 -002A82r 1 EC EF .word %1110111111101100 -002A84r 1 ED EF .word %1110111111101101 -002A86r 1 EE EF .word %1110111111101110 -002A88r 1 EF EF .word %1110111111101111 -002A8Ar 1 F0 EF .word %1110111111110000 -002A8Cr 1 F1 EF .word %1110111111110001 -002A8Er 1 F2 EF .word %1110111111110010 -002A90r 1 F3 EF .word %1110111111110011 -002A92r 1 F4 EF .word %1110111111110100 -002A94r 1 F5 EF .word %1110111111110101 -002A96r 1 F6 EF .word %1110111111110110 -002A98r 1 F7 EF .word %1110111111110111 -002A9Ar 1 F8 EF .word %1110111111111000 -002A9Cr 1 F9 EF .word %1110111111111001 -002A9Er 1 FA EF .word %1110111111111010 -002AA0r 1 FB EF .word %1110111111111011 -002AA2r 1 FC EF .word %1110111111111100 -002AA4r 1 FD EF .word %1110111111111101 -002AA6r 1 FE EF .word %1110111111111110 -002AA8r 1 FF EF .word %1110111111111111 -002AAAr 1 00 F0 .word %1111000000000000 -002AACr 1 01 F0 .word %1111000000000001 -002AAEr 1 02 F0 .word %1111000000000010 -002AB0r 1 03 F0 .word %1111000000000011 -002AB2r 1 04 F0 .word %1111000000000100 -002AB4r 1 05 F0 .word %1111000000000101 -002AB6r 1 06 F0 .word %1111000000000110 -002AB8r 1 07 F0 .word %1111000000000111 -002ABAr 1 08 F0 .word %1111000000001000 -002ABCr 1 09 F0 .word %1111000000001001 -002ABEr 1 0A F0 .word %1111000000001010 -002AC0r 1 0B F0 .word %1111000000001011 -002AC2r 1 0C F0 .word %1111000000001100 -002AC4r 1 0D F0 .word %1111000000001101 -002AC6r 1 0E F0 .word %1111000000001110 -002AC8r 1 0F F0 .word %1111000000001111 -002ACAr 1 E1 FF .word %1111111111100001 -002ACCr 1 E2 FF .word %1111111111100010 -002ACEr 1 E3 FF .word %1111111111100011 -002AD0r 1 E4 FF .word %1111111111100100 -002AD2r 1 E5 FF .word %1111111111100101 -002AD4r 1 E6 FF .word %1111111111100110 -002AD6r 1 E7 FF .word %1111111111100111 -002AD8r 1 E8 FF .word %1111111111101000 -002ADAr 1 E9 FF .word %1111111111101001 -002ADCr 1 EA FF .word %1111111111101010 -002ADEr 1 EB FF .word %1111111111101011 -002AE0r 1 EC FF .word %1111111111101100 -002AE2r 1 ED FF .word %1111111111101101 -002AE4r 1 EE FF .word %1111111111101110 -002AE6r 1 EF FF .word %1111111111101111 -002AE8r 1 F0 FF .word %1111111111110000 -002AEAr 1 F1 FF .word %1111111111110001 -002AECr 1 F2 FF .word %1111111111110010 -002AEEr 1 F3 FF .word %1111111111110011 -002AF0r 1 F4 FF .word %1111111111110100 -002AF2r 1 F5 FF .word %1111111111110101 -002AF4r 1 F6 FF .word %1111111111110110 -002AF6r 1 F7 FF .word %1111111111110111 -002AF8r 1 F8 FF .word %1111111111111000 -002AFAr 1 F9 FF .word %1111111111111001 -002AFCr 1 FA FF .word %1111111111111010 -002AFEr 1 FB FF .word %1111111111111011 -002B00r 1 FC FF .word %1111111111111100 -002B02r 1 FD FF .word %1111111111111101 -002B04r 1 FE FF .word %1111111111111110 -002B06r 1 FF FF .word %1111111111111111 +002772r 1 ; binary values, variable length +002772r 1 00 00 .word %0 +002774r 1 01 00 .word %01 +002776r 1 02 00 .word %010 +002778r 1 03 00 .word %011 +00277Ar 1 04 00 .word %0100 +00277Cr 1 05 00 .word %0101 +00277Er 1 06 00 .word %0110 +002780r 1 07 00 .word %0111 +002782r 1 08 00 .word %01000 +002784r 1 09 00 .word %01001 +002786r 1 0A 00 .word %01010 +002788r 1 0B 00 .word %01011 +00278Ar 1 0C 00 .word %01100 +00278Cr 1 0D 00 .word %01101 +00278Er 1 0E 00 .word %01110 +002790r 1 0F 00 .word %01111 +002792r 1 10 00 .word %010000 +002794r 1 11 00 .word %010001 +002796r 1 12 00 .word %010010 +002798r 1 13 00 .word %010011 +00279Ar 1 70 00 .word %01110000 +00279Cr 1 71 00 .word %01110001 +00279Er 1 72 00 .word %01110010 +0027A0r 1 73 00 .word %01110011 +0027A2r 1 74 00 .word %01110100 +0027A4r 1 75 00 .word %01110101 +0027A6r 1 76 00 .word %01110110 +0027A8r 1 77 00 .word %01110111 +0027AAr 1 78 00 .word %01111000 +0027ACr 1 79 00 .word %01111001 +0027AEr 1 7A 00 .word %01111010 +0027B0r 1 7B 00 .word %01111011 +0027B2r 1 7C 00 .word %01111100 +0027B4r 1 7D 00 .word %01111101 +0027B6r 1 7E 00 .word %01111110 +0027B8r 1 7F 00 .word %01111111 +0027BAr 1 80 00 .word %010000000 +0027BCr 1 81 00 .word %010000001 +0027BEr 1 82 00 .word %010000010 +0027C0r 1 83 00 .word %010000011 +0027C2r 1 84 00 .word %010000100 +0027C4r 1 85 00 .word %010000101 +0027C6r 1 86 00 .word %010000110 +0027C8r 1 F0 00 .word %011110000 +0027CAr 1 F1 00 .word %011110001 +0027CCr 1 F2 00 .word %011110010 +0027CEr 1 F3 00 .word %011110011 +0027D0r 1 F4 00 .word %011110100 +0027D2r 1 F5 00 .word %011110101 +0027D4r 1 F6 00 .word %011110110 +0027D6r 1 F7 00 .word %011110111 +0027D8r 1 F8 00 .word %011111000 +0027DAr 1 F9 00 .word %011111001 +0027DCr 1 FA 00 .word %011111010 +0027DEr 1 FB 00 .word %011111011 +0027E0r 1 FC 00 .word %011111100 +0027E2r 1 FD 00 .word %011111101 +0027E4r 1 FE 00 .word %011111110 +0027E6r 1 FF 00 .word %011111111 +0027E8r 1 00 01 .word %100000000 +0027EAr 1 01 01 .word %100000001 +0027ECr 1 02 01 .word %100000010 +0027EEr 1 03 01 .word %100000011 +0027F0r 1 D2 0F .word %111111010010 +0027F2r 1 D3 0F .word %111111010011 +0027F4r 1 D4 0F .word %111111010100 +0027F6r 1 D5 0F .word %111111010101 +0027F8r 1 D6 0F .word %111111010110 +0027FAr 1 D7 0F .word %111111010111 +0027FCr 1 D8 0F .word %111111011000 +0027FEr 1 D9 0F .word %111111011001 +002800r 1 DA 0F .word %111111011010 +002802r 1 DB 0F .word %111111011011 +002804r 1 DC 0F .word %111111011100 +002806r 1 DD 0F .word %111111011101 +002808r 1 DE 0F .word %111111011110 +00280Ar 1 DF 0F .word %111111011111 +00280Cr 1 E0 0F .word %111111100000 +00280Er 1 E1 0F .word %111111100001 +002810r 1 E2 0F .word %111111100010 +002812r 1 E3 0F .word %111111100011 +002814r 1 E4 0F .word %111111100100 +002816r 1 E5 0F .word %111111100101 +002818r 1 E6 0F .word %111111100110 +00281Ar 1 E7 0F .word %111111100111 +00281Cr 1 E8 0F .word %111111101000 +00281Er 1 E9 0F .word %111111101001 +002820r 1 EA 0F .word %111111101010 +002822r 1 EB 0F .word %111111101011 +002824r 1 EC 0F .word %111111101100 +002826r 1 ED 0F .word %111111101101 +002828r 1 EE 0F .word %111111101110 +00282Ar 1 EF 0F .word %111111101111 +00282Cr 1 F0 0F .word %111111110000 +00282Er 1 F1 0F .word %111111110001 +002830r 1 F2 0F .word %111111110010 +002832r 1 F3 0F .word %111111110011 +002834r 1 F4 0F .word %111111110100 +002836r 1 F5 0F .word %111111110101 +002838r 1 F6 0F .word %111111110110 +00283Ar 1 F7 0F .word %111111110111 +00283Cr 1 F8 0F .word %111111111000 +00283Er 1 F9 0F .word %111111111001 +002840r 1 FA 0F .word %111111111010 +002842r 1 FB 0F .word %111111111011 +002844r 1 FC 0F .word %111111111100 +002846r 1 FD 0F .word %111111111101 +002848r 1 FE 0F .word %111111111110 +00284Ar 1 FF 0F .word %111111111111 +00284Cr 1 00 10 .word %1000000000000 +00284Er 1 01 10 .word %1000000000001 +002850r 1 02 10 .word %1000000000010 +002852r 1 03 10 .word %1000000000011 +002854r 1 04 10 .word %1000000000100 +002856r 1 05 10 .word %1000000000101 +002858r 1 06 10 .word %1000000000110 +00285Ar 1 07 10 .word %1000000000111 +00285Cr 1 08 10 .word %1000000001000 +00285Er 1 F0 7F .word %111111111110000 +002860r 1 F1 7F .word %111111111110001 +002862r 1 F2 7F .word %111111111110010 +002864r 1 F3 7F .word %111111111110011 +002866r 1 F4 7F .word %111111111110100 +002868r 1 F5 7F .word %111111111110101 +00286Ar 1 F6 7F .word %111111111110110 +00286Cr 1 F7 7F .word %111111111110111 +00286Er 1 F8 7F .word %111111111111000 +002870r 1 F9 7F .word %111111111111001 +002872r 1 FA 7F .word %111111111111010 +002874r 1 FB 7F .word %111111111111011 +002876r 1 FC 7F .word %111111111111100 +002878r 1 FD 7F .word %111111111111101 +00287Ar 1 FE 7F .word %111111111111110 +00287Cr 1 FF 7F .word %111111111111111 +00287Er 1 00 80 .word %1000000000000000 +002880r 1 01 80 .word %1000000000000001 +002882r 1 02 80 .word %1000000000000010 +002884r 1 03 80 .word %1000000000000011 +002886r 1 04 80 .word %1000000000000100 +002888r 1 05 80 .word %1000000000000101 +00288Ar 1 06 80 .word %1000000000000110 +00288Cr 1 07 80 .word %1000000000000111 +00288Er 1 08 80 .word %1000000000001000 +002890r 1 09 80 .word %1000000000001001 +002892r 1 0A 80 .word %1000000000001010 +002894r 1 0B 80 .word %1000000000001011 +002896r 1 E1 9F .word %1001111111100001 +002898r 1 E2 9F .word %1001111111100010 +00289Ar 1 E3 9F .word %1001111111100011 +00289Cr 1 E4 9F .word %1001111111100100 +00289Er 1 E5 9F .word %1001111111100101 +0028A0r 1 E6 9F .word %1001111111100110 +0028A2r 1 E7 9F .word %1001111111100111 +0028A4r 1 E8 9F .word %1001111111101000 +0028A6r 1 E9 9F .word %1001111111101001 +0028A8r 1 EA 9F .word %1001111111101010 +0028AAr 1 EB 9F .word %1001111111101011 +0028ACr 1 EC 9F .word %1001111111101100 +0028AEr 1 ED 9F .word %1001111111101101 +0028B0r 1 EE 9F .word %1001111111101110 +0028B2r 1 EF 9F .word %1001111111101111 +0028B4r 1 F0 9F .word %1001111111110000 +0028B6r 1 F1 9F .word %1001111111110001 +0028B8r 1 F2 9F .word %1001111111110010 +0028BAr 1 F3 9F .word %1001111111110011 +0028BCr 1 F4 9F .word %1001111111110100 +0028BEr 1 F5 9F .word %1001111111110101 +0028C0r 1 F6 9F .word %1001111111110110 +0028C2r 1 F7 9F .word %1001111111110111 +0028C4r 1 F8 9F .word %1001111111111000 +0028C6r 1 F9 9F .word %1001111111111001 +0028C8r 1 FA 9F .word %1001111111111010 +0028CAr 1 FB 9F .word %1001111111111011 +0028CCr 1 FC 9F .word %1001111111111100 +0028CEr 1 FD 9F .word %1001111111111101 +0028D0r 1 FE 9F .word %1001111111111110 +0028D2r 1 FF 9F .word %1001111111111111 +0028D4r 1 00 A0 .word %1010000000000000 +0028D6r 1 01 A0 .word %1010000000000001 +0028D8r 1 02 A0 .word %1010000000000010 +0028DAr 1 03 A0 .word %1010000000000011 +0028DCr 1 04 A0 .word %1010000000000100 +0028DEr 1 05 A0 .word %1010000000000101 +0028E0r 1 06 A0 .word %1010000000000110 +0028E2r 1 07 A0 .word %1010000000000111 +0028E4r 1 08 A0 .word %1010000000001000 +0028E6r 1 09 A0 .word %1010000000001001 +0028E8r 1 0A A0 .word %1010000000001010 +0028EAr 1 0B A0 .word %1010000000001011 +0028ECr 1 0C A0 .word %1010000000001100 +0028EEr 1 0D A0 .word %1010000000001101 +0028F0r 1 0E A0 .word %1010000000001110 +0028F2r 1 0F A0 .word %1010000000001111 +0028F4r 1 E1 AF .word %1010111111100001 +0028F6r 1 E2 AF .word %1010111111100010 +0028F8r 1 E3 AF .word %1010111111100011 +0028FAr 1 E4 AF .word %1010111111100100 +0028FCr 1 E5 AF .word %1010111111100101 +0028FEr 1 E6 AF .word %1010111111100110 +002900r 1 E7 AF .word %1010111111100111 +002902r 1 E8 AF .word %1010111111101000 +002904r 1 E9 AF .word %1010111111101001 +002906r 1 EA AF .word %1010111111101010 +002908r 1 EB AF .word %1010111111101011 +00290Ar 1 EC AF .word %1010111111101100 +00290Cr 1 ED AF .word %1010111111101101 +00290Er 1 EE AF .word %1010111111101110 +002910r 1 EF AF .word %1010111111101111 +002912r 1 F0 AF .word %1010111111110000 +002914r 1 F1 AF .word %1010111111110001 +002916r 1 F2 AF .word %1010111111110010 +002918r 1 F3 AF .word %1010111111110011 +00291Ar 1 F4 AF .word %1010111111110100 +00291Cr 1 F5 AF .word %1010111111110101 +00291Er 1 F6 AF .word %1010111111110110 +002920r 1 F7 AF .word %1010111111110111 +002922r 1 F8 AF .word %1010111111111000 +002924r 1 F9 AF .word %1010111111111001 +002926r 1 FA AF .word %1010111111111010 +002928r 1 FB AF .word %1010111111111011 +00292Ar 1 FC AF .word %1010111111111100 +00292Cr 1 FD AF .word %1010111111111101 +00292Er 1 FE AF .word %1010111111111110 +002930r 1 FF AF .word %1010111111111111 +002932r 1 00 B0 .word %1011000000000000 +002934r 1 01 B0 .word %1011000000000001 +002936r 1 02 B0 .word %1011000000000010 +002938r 1 03 B0 .word %1011000000000011 +00293Ar 1 04 B0 .word %1011000000000100 +00293Cr 1 05 B0 .word %1011000000000101 +00293Er 1 06 B0 .word %1011000000000110 +002940r 1 07 B0 .word %1011000000000111 +002942r 1 08 B0 .word %1011000000001000 +002944r 1 09 B0 .word %1011000000001001 +002946r 1 0A B0 .word %1011000000001010 +002948r 1 0B B0 .word %1011000000001011 +00294Ar 1 0C B0 .word %1011000000001100 +00294Cr 1 0D B0 .word %1011000000001101 +00294Er 1 0E B0 .word %1011000000001110 +002950r 1 0F B0 .word %1011000000001111 +002952r 1 E1 BF .word %1011111111100001 +002954r 1 E2 BF .word %1011111111100010 +002956r 1 E3 BF .word %1011111111100011 +002958r 1 E4 BF .word %1011111111100100 +00295Ar 1 E5 BF .word %1011111111100101 +00295Cr 1 E6 BF .word %1011111111100110 +00295Er 1 E7 BF .word %1011111111100111 +002960r 1 E8 BF .word %1011111111101000 +002962r 1 E9 BF .word %1011111111101001 +002964r 1 EA BF .word %1011111111101010 +002966r 1 EB BF .word %1011111111101011 +002968r 1 EC BF .word %1011111111101100 +00296Ar 1 ED BF .word %1011111111101101 +00296Cr 1 EE BF .word %1011111111101110 +00296Er 1 EF BF .word %1011111111101111 +002970r 1 F0 BF .word %1011111111110000 +002972r 1 F1 BF .word %1011111111110001 +002974r 1 F2 BF .word %1011111111110010 +002976r 1 F3 BF .word %1011111111110011 +002978r 1 F4 BF .word %1011111111110100 +00297Ar 1 F5 BF .word %1011111111110101 +00297Cr 1 F6 BF .word %1011111111110110 +00297Er 1 F7 BF .word %1011111111110111 +002980r 1 F8 BF .word %1011111111111000 +002982r 1 F9 BF .word %1011111111111001 +002984r 1 FA BF .word %1011111111111010 +002986r 1 FB BF .word %1011111111111011 +002988r 1 FC BF .word %1011111111111100 +00298Ar 1 FD BF .word %1011111111111101 +00298Cr 1 FE BF .word %1011111111111110 +00298Er 1 FF BF .word %1011111111111111 +002990r 1 00 C0 .word %1100000000000000 +002992r 1 01 C0 .word %1100000000000001 +002994r 1 02 C0 .word %1100000000000010 +002996r 1 03 C0 .word %1100000000000011 +002998r 1 04 C0 .word %1100000000000100 +00299Ar 1 05 C0 .word %1100000000000101 +00299Cr 1 06 C0 .word %1100000000000110 +00299Er 1 07 C0 .word %1100000000000111 +0029A0r 1 08 C0 .word %1100000000001000 +0029A2r 1 09 C0 .word %1100000000001001 +0029A4r 1 0A C0 .word %1100000000001010 +0029A6r 1 0B C0 .word %1100000000001011 +0029A8r 1 0C C0 .word %1100000000001100 +0029AAr 1 0D C0 .word %1100000000001101 +0029ACr 1 0E C0 .word %1100000000001110 +0029AEr 1 0F C0 .word %1100000000001111 +0029B0r 1 E1 CF .word %1100111111100001 +0029B2r 1 E2 CF .word %1100111111100010 +0029B4r 1 E3 CF .word %1100111111100011 +0029B6r 1 E4 CF .word %1100111111100100 +0029B8r 1 E5 CF .word %1100111111100101 +0029BAr 1 E6 CF .word %1100111111100110 +0029BCr 1 E7 CF .word %1100111111100111 +0029BEr 1 E8 CF .word %1100111111101000 +0029C0r 1 E9 CF .word %1100111111101001 +0029C2r 1 EA CF .word %1100111111101010 +0029C4r 1 EB CF .word %1100111111101011 +0029C6r 1 EC CF .word %1100111111101100 +0029C8r 1 ED CF .word %1100111111101101 +0029CAr 1 EE CF .word %1100111111101110 +0029CCr 1 EF CF .word %1100111111101111 +0029CEr 1 F0 CF .word %1100111111110000 +0029D0r 1 F1 CF .word %1100111111110001 +0029D2r 1 F2 CF .word %1100111111110010 +0029D4r 1 F3 CF .word %1100111111110011 +0029D6r 1 F4 CF .word %1100111111110100 +0029D8r 1 F5 CF .word %1100111111110101 +0029DAr 1 F6 CF .word %1100111111110110 +0029DCr 1 F7 CF .word %1100111111110111 +0029DEr 1 F8 CF .word %1100111111111000 +0029E0r 1 F9 CF .word %1100111111111001 +0029E2r 1 FA CF .word %1100111111111010 +0029E4r 1 FB CF .word %1100111111111011 +0029E6r 1 FC CF .word %1100111111111100 +0029E8r 1 FD CF .word %1100111111111101 +0029EAr 1 FE CF .word %1100111111111110 +0029ECr 1 FF CF .word %1100111111111111 +0029EEr 1 00 D0 .word %1101000000000000 +0029F0r 1 01 D0 .word %1101000000000001 +0029F2r 1 02 D0 .word %1101000000000010 +0029F4r 1 03 D0 .word %1101000000000011 +0029F6r 1 04 D0 .word %1101000000000100 +0029F8r 1 05 D0 .word %1101000000000101 +0029FAr 1 06 D0 .word %1101000000000110 +0029FCr 1 07 D0 .word %1101000000000111 +0029FEr 1 08 D0 .word %1101000000001000 +002A00r 1 09 D0 .word %1101000000001001 +002A02r 1 0A D0 .word %1101000000001010 +002A04r 1 0B D0 .word %1101000000001011 +002A06r 1 0C D0 .word %1101000000001100 +002A08r 1 0D D0 .word %1101000000001101 +002A0Ar 1 0E D0 .word %1101000000001110 +002A0Cr 1 0F D0 .word %1101000000001111 +002A0Er 1 E1 DF .word %1101111111100001 +002A10r 1 E2 DF .word %1101111111100010 +002A12r 1 E3 DF .word %1101111111100011 +002A14r 1 E4 DF .word %1101111111100100 +002A16r 1 E5 DF .word %1101111111100101 +002A18r 1 E6 DF .word %1101111111100110 +002A1Ar 1 E7 DF .word %1101111111100111 +002A1Cr 1 E8 DF .word %1101111111101000 +002A1Er 1 E9 DF .word %1101111111101001 +002A20r 1 EA DF .word %1101111111101010 +002A22r 1 EB DF .word %1101111111101011 +002A24r 1 EC DF .word %1101111111101100 +002A26r 1 ED DF .word %1101111111101101 +002A28r 1 EE DF .word %1101111111101110 +002A2Ar 1 EF DF .word %1101111111101111 +002A2Cr 1 F0 DF .word %1101111111110000 +002A2Er 1 F1 DF .word %1101111111110001 +002A30r 1 F2 DF .word %1101111111110010 +002A32r 1 F3 DF .word %1101111111110011 +002A34r 1 F4 DF .word %1101111111110100 +002A36r 1 F5 DF .word %1101111111110101 +002A38r 1 F6 DF .word %1101111111110110 +002A3Ar 1 F7 DF .word %1101111111110111 +002A3Cr 1 F8 DF .word %1101111111111000 +002A3Er 1 F9 DF .word %1101111111111001 +002A40r 1 FA DF .word %1101111111111010 +002A42r 1 FB DF .word %1101111111111011 +002A44r 1 FC DF .word %1101111111111100 +002A46r 1 FD DF .word %1101111111111101 +002A48r 1 FE DF .word %1101111111111110 +002A4Ar 1 FF DF .word %1101111111111111 +002A4Cr 1 00 E0 .word %1110000000000000 +002A4Er 1 01 E0 .word %1110000000000001 +002A50r 1 02 E0 .word %1110000000000010 +002A52r 1 03 E0 .word %1110000000000011 +002A54r 1 04 E0 .word %1110000000000100 +002A56r 1 05 E0 .word %1110000000000101 +002A58r 1 06 E0 .word %1110000000000110 +002A5Ar 1 07 E0 .word %1110000000000111 +002A5Cr 1 08 E0 .word %1110000000001000 +002A5Er 1 09 E0 .word %1110000000001001 +002A60r 1 0A E0 .word %1110000000001010 +002A62r 1 0B E0 .word %1110000000001011 +002A64r 1 0C E0 .word %1110000000001100 +002A66r 1 0D E0 .word %1110000000001101 +002A68r 1 0E E0 .word %1110000000001110 +002A6Ar 1 0F E0 .word %1110000000001111 +002A6Cr 1 E1 EF .word %1110111111100001 +002A6Er 1 E2 EF .word %1110111111100010 +002A70r 1 E3 EF .word %1110111111100011 +002A72r 1 E4 EF .word %1110111111100100 +002A74r 1 E5 EF .word %1110111111100101 +002A76r 1 E6 EF .word %1110111111100110 +002A78r 1 E7 EF .word %1110111111100111 +002A7Ar 1 E8 EF .word %1110111111101000 +002A7Cr 1 E9 EF .word %1110111111101001 +002A7Er 1 EA EF .word %1110111111101010 +002A80r 1 EB EF .word %1110111111101011 +002A82r 1 EC EF .word %1110111111101100 +002A84r 1 ED EF .word %1110111111101101 +002A86r 1 EE EF .word %1110111111101110 +002A88r 1 EF EF .word %1110111111101111 +002A8Ar 1 F0 EF .word %1110111111110000 +002A8Cr 1 F1 EF .word %1110111111110001 +002A8Er 1 F2 EF .word %1110111111110010 +002A90r 1 F3 EF .word %1110111111110011 +002A92r 1 F4 EF .word %1110111111110100 +002A94r 1 F5 EF .word %1110111111110101 +002A96r 1 F6 EF .word %1110111111110110 +002A98r 1 F7 EF .word %1110111111110111 +002A9Ar 1 F8 EF .word %1110111111111000 +002A9Cr 1 F9 EF .word %1110111111111001 +002A9Er 1 FA EF .word %1110111111111010 +002AA0r 1 FB EF .word %1110111111111011 +002AA2r 1 FC EF .word %1110111111111100 +002AA4r 1 FD EF .word %1110111111111101 +002AA6r 1 FE EF .word %1110111111111110 +002AA8r 1 FF EF .word %1110111111111111 +002AAAr 1 00 F0 .word %1111000000000000 +002AACr 1 01 F0 .word %1111000000000001 +002AAEr 1 02 F0 .word %1111000000000010 +002AB0r 1 03 F0 .word %1111000000000011 +002AB2r 1 04 F0 .word %1111000000000100 +002AB4r 1 05 F0 .word %1111000000000101 +002AB6r 1 06 F0 .word %1111000000000110 +002AB8r 1 07 F0 .word %1111000000000111 +002ABAr 1 08 F0 .word %1111000000001000 +002ABCr 1 09 F0 .word %1111000000001001 +002ABEr 1 0A F0 .word %1111000000001010 +002AC0r 1 0B F0 .word %1111000000001011 +002AC2r 1 0C F0 .word %1111000000001100 +002AC4r 1 0D F0 .word %1111000000001101 +002AC6r 1 0E F0 .word %1111000000001110 +002AC8r 1 0F F0 .word %1111000000001111 +002ACAr 1 E1 FF .word %1111111111100001 +002ACCr 1 E2 FF .word %1111111111100010 +002ACEr 1 E3 FF .word %1111111111100011 +002AD0r 1 E4 FF .word %1111111111100100 +002AD2r 1 E5 FF .word %1111111111100101 +002AD4r 1 E6 FF .word %1111111111100110 +002AD6r 1 E7 FF .word %1111111111100111 +002AD8r 1 E8 FF .word %1111111111101000 +002ADAr 1 E9 FF .word %1111111111101001 +002ADCr 1 EA FF .word %1111111111101010 +002ADEr 1 EB FF .word %1111111111101011 +002AE0r 1 EC FF .word %1111111111101100 +002AE2r 1 ED FF .word %1111111111101101 +002AE4r 1 EE FF .word %1111111111101110 +002AE6r 1 EF FF .word %1111111111101111 +002AE8r 1 F0 FF .word %1111111111110000 +002AEAr 1 F1 FF .word %1111111111110001 +002AECr 1 F2 FF .word %1111111111110010 +002AEEr 1 F3 FF .word %1111111111110011 +002AF0r 1 F4 FF .word %1111111111110100 +002AF2r 1 F5 FF .word %1111111111110101 +002AF4r 1 F6 FF .word %1111111111110110 +002AF6r 1 F7 FF .word %1111111111110111 +002AF8r 1 F8 FF .word %1111111111111000 +002AFAr 1 F9 FF .word %1111111111111001 +002AFCr 1 FA FF .word %1111111111111010 +002AFEr 1 FB FF .word %1111111111111011 +002B00r 1 FC FF .word %1111111111111100 +002B02r 1 FD FF .word %1111111111111101 +002B04r 1 FE FF .word %1111111111111110 +002B06r 1 FF FF .word %1111111111111111 002B08r 1 -002B08r 1 ; binary values, full length -002B08r 1 00 00 .word %0000000000000000 -002B0Ar 1 01 00 .word %0000000000000001 -002B0Cr 1 02 00 .word %0000000000000010 -002B0Er 1 03 00 .word %0000000000000011 -002B10r 1 04 00 .word %0000000000000100 -002B12r 1 05 00 .word %0000000000000101 -002B14r 1 06 00 .word %0000000000000110 -002B16r 1 07 00 .word %0000000000000111 -002B18r 1 08 00 .word %0000000000001000 -002B1Ar 1 09 00 .word %0000000000001001 -002B1Cr 1 0A 00 .word %0000000000001010 -002B1Er 1 0B 00 .word %0000000000001011 -002B20r 1 0C 00 .word %0000000000001100 -002B22r 1 0D 00 .word %0000000000001101 -002B24r 1 0E 00 .word %0000000000001110 -002B26r 1 0F 00 .word %0000000000001111 -002B28r 1 10 00 .word %0000000000010000 -002B2Ar 1 11 00 .word %0000000000010001 -002B2Cr 1 12 00 .word %0000000000010010 -002B2Er 1 13 00 .word %0000000000010011 -002B30r 1 70 00 .word %0000000001110000 -002B32r 1 71 00 .word %0000000001110001 -002B34r 1 72 00 .word %0000000001110010 -002B36r 1 73 00 .word %0000000001110011 -002B38r 1 74 00 .word %0000000001110100 -002B3Ar 1 75 00 .word %0000000001110101 -002B3Cr 1 76 00 .word %0000000001110110 -002B3Er 1 77 00 .word %0000000001110111 -002B40r 1 78 00 .word %0000000001111000 -002B42r 1 79 00 .word %0000000001111001 -002B44r 1 7A 00 .word %0000000001111010 -002B46r 1 7B 00 .word %0000000001111011 -002B48r 1 7C 00 .word %0000000001111100 -002B4Ar 1 7D 00 .word %0000000001111101 -002B4Cr 1 7E 00 .word %0000000001111110 -002B4Er 1 7F 00 .word %0000000001111111 -002B50r 1 80 00 .word %0000000010000000 -002B52r 1 81 00 .word %0000000010000001 -002B54r 1 82 00 .word %0000000010000010 -002B56r 1 83 00 .word %0000000010000011 -002B58r 1 84 00 .word %0000000010000100 -002B5Ar 1 85 00 .word %0000000010000101 -002B5Cr 1 86 00 .word %0000000010000110 -002B5Er 1 F0 00 .word %0000000011110000 -002B60r 1 F1 00 .word %0000000011110001 -002B62r 1 F2 00 .word %0000000011110010 -002B64r 1 F3 00 .word %0000000011110011 -002B66r 1 F4 00 .word %0000000011110100 -002B68r 1 F5 00 .word %0000000011110101 -002B6Ar 1 F6 00 .word %0000000011110110 -002B6Cr 1 F7 00 .word %0000000011110111 -002B6Er 1 F8 00 .word %0000000011111000 -002B70r 1 F9 00 .word %0000000011111001 -002B72r 1 FA 00 .word %0000000011111010 -002B74r 1 FB 00 .word %0000000011111011 -002B76r 1 FC 00 .word %0000000011111100 -002B78r 1 FD 00 .word %0000000011111101 -002B7Ar 1 FE 00 .word %0000000011111110 -002B7Cr 1 FF 00 .word %0000000011111111 -002B7Er 1 00 01 .word %0000000100000000 -002B80r 1 01 01 .word %0000000100000001 -002B82r 1 02 01 .word %0000000100000010 -002B84r 1 03 01 .word %0000000100000011 -002B86r 1 D2 0F .word %0000111111010010 -002B88r 1 D3 0F .word %0000111111010011 -002B8Ar 1 D4 0F .word %0000111111010100 -002B8Cr 1 D5 0F .word %0000111111010101 -002B8Er 1 D6 0F .word %0000111111010110 -002B90r 1 D7 0F .word %0000111111010111 -002B92r 1 D8 0F .word %0000111111011000 -002B94r 1 D9 0F .word %0000111111011001 -002B96r 1 DA 0F .word %0000111111011010 -002B98r 1 DB 0F .word %0000111111011011 -002B9Ar 1 DC 0F .word %0000111111011100 -002B9Cr 1 DD 0F .word %0000111111011101 -002B9Er 1 DE 0F .word %0000111111011110 -002BA0r 1 DF 0F .word %0000111111011111 -002BA2r 1 E0 0F .word %0000111111100000 -002BA4r 1 E1 0F .word %0000111111100001 -002BA6r 1 E2 0F .word %0000111111100010 -002BA8r 1 E3 0F .word %0000111111100011 -002BAAr 1 E4 0F .word %0000111111100100 -002BACr 1 E5 0F .word %0000111111100101 -002BAEr 1 E6 0F .word %0000111111100110 -002BB0r 1 E7 0F .word %0000111111100111 -002BB2r 1 E8 0F .word %0000111111101000 -002BB4r 1 E9 0F .word %0000111111101001 -002BB6r 1 EA 0F .word %0000111111101010 -002BB8r 1 EB 0F .word %0000111111101011 -002BBAr 1 EC 0F .word %0000111111101100 -002BBCr 1 ED 0F .word %0000111111101101 -002BBEr 1 EE 0F .word %0000111111101110 -002BC0r 1 EF 0F .word %0000111111101111 -002BC2r 1 F0 0F .word %0000111111110000 -002BC4r 1 F1 0F .word %0000111111110001 -002BC6r 1 F2 0F .word %0000111111110010 -002BC8r 1 F3 0F .word %0000111111110011 -002BCAr 1 F4 0F .word %0000111111110100 -002BCCr 1 F5 0F .word %0000111111110101 -002BCEr 1 F6 0F .word %0000111111110110 -002BD0r 1 F7 0F .word %0000111111110111 -002BD2r 1 F8 0F .word %0000111111111000 -002BD4r 1 F9 0F .word %0000111111111001 -002BD6r 1 FA 0F .word %0000111111111010 -002BD8r 1 FB 0F .word %0000111111111011 -002BDAr 1 FC 0F .word %0000111111111100 -002BDCr 1 FD 0F .word %0000111111111101 -002BDEr 1 FE 0F .word %0000111111111110 -002BE0r 1 FF 0F .word %0000111111111111 -002BE2r 1 00 10 .word %0001000000000000 -002BE4r 1 01 10 .word %0001000000000001 -002BE6r 1 02 10 .word %0001000000000010 -002BE8r 1 03 10 .word %0001000000000011 -002BEAr 1 04 10 .word %0001000000000100 -002BECr 1 05 10 .word %0001000000000101 -002BEEr 1 06 10 .word %0001000000000110 -002BF0r 1 07 10 .word %0001000000000111 -002BF2r 1 08 10 .word %0001000000001000 -002BF4r 1 F0 7F .word %0111111111110000 -002BF6r 1 F1 7F .word %0111111111110001 -002BF8r 1 F2 7F .word %0111111111110010 -002BFAr 1 F3 7F .word %0111111111110011 -002BFCr 1 F4 7F .word %0111111111110100 -002BFEr 1 F5 7F .word %0111111111110101 -002C00r 1 F6 7F .word %0111111111110110 -002C02r 1 F7 7F .word %0111111111110111 -002C04r 1 F8 7F .word %0111111111111000 -002C06r 1 F9 7F .word %0111111111111001 -002C08r 1 FA 7F .word %0111111111111010 -002C0Ar 1 FB 7F .word %0111111111111011 -002C0Cr 1 FC 7F .word %0111111111111100 -002C0Er 1 FD 7F .word %0111111111111101 -002C10r 1 FE 7F .word %0111111111111110 -002C12r 1 FF 7F .word %0111111111111111 -002C14r 1 00 80 .word %1000000000000000 -002C16r 1 01 80 .word %1000000000000001 -002C18r 1 02 80 .word %1000000000000010 -002C1Ar 1 03 80 .word %1000000000000011 -002C1Cr 1 04 80 .word %1000000000000100 -002C1Er 1 05 80 .word %1000000000000101 -002C20r 1 06 80 .word %1000000000000110 -002C22r 1 07 80 .word %1000000000000111 -002C24r 1 08 80 .word %1000000000001000 -002C26r 1 09 80 .word %1000000000001001 -002C28r 1 0A 80 .word %1000000000001010 -002C2Ar 1 0B 80 .word %1000000000001011 -002C2Cr 1 E1 9F .word %1001111111100001 -002C2Er 1 E2 9F .word %1001111111100010 -002C30r 1 E3 9F .word %1001111111100011 -002C32r 1 E4 9F .word %1001111111100100 -002C34r 1 E5 9F .word %1001111111100101 -002C36r 1 E6 9F .word %1001111111100110 -002C38r 1 E7 9F .word %1001111111100111 -002C3Ar 1 E8 9F .word %1001111111101000 -002C3Cr 1 E9 9F .word %1001111111101001 -002C3Er 1 EA 9F .word %1001111111101010 -002C40r 1 EB 9F .word %1001111111101011 -002C42r 1 EC 9F .word %1001111111101100 -002C44r 1 ED 9F .word %1001111111101101 -002C46r 1 EE 9F .word %1001111111101110 -002C48r 1 EF 9F .word %1001111111101111 -002C4Ar 1 F0 9F .word %1001111111110000 -002C4Cr 1 F1 9F .word %1001111111110001 -002C4Er 1 F2 9F .word %1001111111110010 -002C50r 1 F3 9F .word %1001111111110011 -002C52r 1 F4 9F .word %1001111111110100 -002C54r 1 F5 9F .word %1001111111110101 -002C56r 1 F6 9F .word %1001111111110110 -002C58r 1 F7 9F .word %1001111111110111 -002C5Ar 1 F8 9F .word %1001111111111000 -002C5Cr 1 F9 9F .word %1001111111111001 -002C5Er 1 FA 9F .word %1001111111111010 -002C60r 1 FB 9F .word %1001111111111011 -002C62r 1 FC 9F .word %1001111111111100 -002C64r 1 FD 9F .word %1001111111111101 -002C66r 1 FE 9F .word %1001111111111110 -002C68r 1 FF 9F .word %1001111111111111 -002C6Ar 1 00 A0 .word %1010000000000000 -002C6Cr 1 01 A0 .word %1010000000000001 -002C6Er 1 02 A0 .word %1010000000000010 -002C70r 1 03 A0 .word %1010000000000011 -002C72r 1 04 A0 .word %1010000000000100 -002C74r 1 05 A0 .word %1010000000000101 -002C76r 1 06 A0 .word %1010000000000110 -002C78r 1 07 A0 .word %1010000000000111 -002C7Ar 1 08 A0 .word %1010000000001000 -002C7Cr 1 09 A0 .word %1010000000001001 -002C7Er 1 0A A0 .word %1010000000001010 -002C80r 1 0B A0 .word %1010000000001011 -002C82r 1 0C A0 .word %1010000000001100 -002C84r 1 0D A0 .word %1010000000001101 -002C86r 1 0E A0 .word %1010000000001110 -002C88r 1 0F A0 .word %1010000000001111 -002C8Ar 1 E1 AF .word %1010111111100001 -002C8Cr 1 E2 AF .word %1010111111100010 -002C8Er 1 E3 AF .word %1010111111100011 -002C90r 1 E4 AF .word %1010111111100100 -002C92r 1 E5 AF .word %1010111111100101 -002C94r 1 E6 AF .word %1010111111100110 -002C96r 1 E7 AF .word %1010111111100111 -002C98r 1 E8 AF .word %1010111111101000 -002C9Ar 1 E9 AF .word %1010111111101001 -002C9Cr 1 EA AF .word %1010111111101010 -002C9Er 1 EB AF .word %1010111111101011 -002CA0r 1 EC AF .word %1010111111101100 -002CA2r 1 ED AF .word %1010111111101101 -002CA4r 1 EE AF .word %1010111111101110 -002CA6r 1 EF AF .word %1010111111101111 -002CA8r 1 F0 AF .word %1010111111110000 -002CAAr 1 F1 AF .word %1010111111110001 -002CACr 1 F2 AF .word %1010111111110010 -002CAEr 1 F3 AF .word %1010111111110011 -002CB0r 1 F4 AF .word %1010111111110100 -002CB2r 1 F5 AF .word %1010111111110101 -002CB4r 1 F6 AF .word %1010111111110110 -002CB6r 1 F7 AF .word %1010111111110111 -002CB8r 1 F8 AF .word %1010111111111000 -002CBAr 1 F9 AF .word %1010111111111001 -002CBCr 1 FA AF .word %1010111111111010 -002CBEr 1 FB AF .word %1010111111111011 -002CC0r 1 FC AF .word %1010111111111100 -002CC2r 1 FD AF .word %1010111111111101 -002CC4r 1 FE AF .word %1010111111111110 -002CC6r 1 FF AF .word %1010111111111111 -002CC8r 1 00 B0 .word %1011000000000000 -002CCAr 1 01 B0 .word %1011000000000001 -002CCCr 1 02 B0 .word %1011000000000010 -002CCEr 1 03 B0 .word %1011000000000011 -002CD0r 1 04 B0 .word %1011000000000100 -002CD2r 1 05 B0 .word %1011000000000101 -002CD4r 1 06 B0 .word %1011000000000110 -002CD6r 1 07 B0 .word %1011000000000111 -002CD8r 1 08 B0 .word %1011000000001000 -002CDAr 1 09 B0 .word %1011000000001001 -002CDCr 1 0A B0 .word %1011000000001010 -002CDEr 1 0B B0 .word %1011000000001011 -002CE0r 1 0C B0 .word %1011000000001100 -002CE2r 1 0D B0 .word %1011000000001101 -002CE4r 1 0E B0 .word %1011000000001110 -002CE6r 1 0F B0 .word %1011000000001111 -002CE8r 1 E1 BF .word %1011111111100001 -002CEAr 1 E2 BF .word %1011111111100010 -002CECr 1 E3 BF .word %1011111111100011 -002CEEr 1 E4 BF .word %1011111111100100 -002CF0r 1 E5 BF .word %1011111111100101 -002CF2r 1 E6 BF .word %1011111111100110 -002CF4r 1 E7 BF .word %1011111111100111 -002CF6r 1 E8 BF .word %1011111111101000 -002CF8r 1 E9 BF .word %1011111111101001 -002CFAr 1 EA BF .word %1011111111101010 -002CFCr 1 EB BF .word %1011111111101011 -002CFEr 1 EC BF .word %1011111111101100 -002D00r 1 ED BF .word %1011111111101101 -002D02r 1 EE BF .word %1011111111101110 -002D04r 1 EF BF .word %1011111111101111 -002D06r 1 F0 BF .word %1011111111110000 -002D08r 1 F1 BF .word %1011111111110001 -002D0Ar 1 F2 BF .word %1011111111110010 -002D0Cr 1 F3 BF .word %1011111111110011 -002D0Er 1 F4 BF .word %1011111111110100 -002D10r 1 F5 BF .word %1011111111110101 -002D12r 1 F6 BF .word %1011111111110110 -002D14r 1 F7 BF .word %1011111111110111 -002D16r 1 F8 BF .word %1011111111111000 -002D18r 1 F9 BF .word %1011111111111001 -002D1Ar 1 FA BF .word %1011111111111010 -002D1Cr 1 FB BF .word %1011111111111011 -002D1Er 1 FC BF .word %1011111111111100 -002D20r 1 FD BF .word %1011111111111101 -002D22r 1 FE BF .word %1011111111111110 -002D24r 1 FF BF .word %1011111111111111 -002D26r 1 00 C0 .word %1100000000000000 -002D28r 1 01 C0 .word %1100000000000001 -002D2Ar 1 02 C0 .word %1100000000000010 -002D2Cr 1 03 C0 .word %1100000000000011 -002D2Er 1 04 C0 .word %1100000000000100 -002D30r 1 05 C0 .word %1100000000000101 -002D32r 1 06 C0 .word %1100000000000110 -002D34r 1 07 C0 .word %1100000000000111 -002D36r 1 08 C0 .word %1100000000001000 -002D38r 1 09 C0 .word %1100000000001001 -002D3Ar 1 0A C0 .word %1100000000001010 -002D3Cr 1 0B C0 .word %1100000000001011 -002D3Er 1 0C C0 .word %1100000000001100 -002D40r 1 0D C0 .word %1100000000001101 -002D42r 1 0E C0 .word %1100000000001110 -002D44r 1 0F C0 .word %1100000000001111 -002D46r 1 E1 CF .word %1100111111100001 -002D48r 1 E2 CF .word %1100111111100010 -002D4Ar 1 E3 CF .word %1100111111100011 -002D4Cr 1 E4 CF .word %1100111111100100 -002D4Er 1 E5 CF .word %1100111111100101 -002D50r 1 E6 CF .word %1100111111100110 -002D52r 1 E7 CF .word %1100111111100111 -002D54r 1 E8 CF .word %1100111111101000 -002D56r 1 E9 CF .word %1100111111101001 -002D58r 1 EA CF .word %1100111111101010 -002D5Ar 1 EB CF .word %1100111111101011 -002D5Cr 1 EC CF .word %1100111111101100 -002D5Er 1 ED CF .word %1100111111101101 -002D60r 1 EE CF .word %1100111111101110 -002D62r 1 EF CF .word %1100111111101111 -002D64r 1 F0 CF .word %1100111111110000 -002D66r 1 F1 CF .word %1100111111110001 -002D68r 1 F2 CF .word %1100111111110010 -002D6Ar 1 F3 CF .word %1100111111110011 -002D6Cr 1 F4 CF .word %1100111111110100 -002D6Er 1 F5 CF .word %1100111111110101 -002D70r 1 F6 CF .word %1100111111110110 -002D72r 1 F7 CF .word %1100111111110111 -002D74r 1 F8 CF .word %1100111111111000 -002D76r 1 F9 CF .word %1100111111111001 -002D78r 1 FA CF .word %1100111111111010 -002D7Ar 1 FB CF .word %1100111111111011 -002D7Cr 1 FC CF .word %1100111111111100 -002D7Er 1 FD CF .word %1100111111111101 -002D80r 1 FE CF .word %1100111111111110 -002D82r 1 FF CF .word %1100111111111111 -002D84r 1 00 D0 .word %1101000000000000 -002D86r 1 01 D0 .word %1101000000000001 -002D88r 1 02 D0 .word %1101000000000010 -002D8Ar 1 03 D0 .word %1101000000000011 -002D8Cr 1 04 D0 .word %1101000000000100 -002D8Er 1 05 D0 .word %1101000000000101 -002D90r 1 06 D0 .word %1101000000000110 -002D92r 1 07 D0 .word %1101000000000111 -002D94r 1 08 D0 .word %1101000000001000 -002D96r 1 09 D0 .word %1101000000001001 -002D98r 1 0A D0 .word %1101000000001010 -002D9Ar 1 0B D0 .word %1101000000001011 -002D9Cr 1 0C D0 .word %1101000000001100 -002D9Er 1 0D D0 .word %1101000000001101 -002DA0r 1 0E D0 .word %1101000000001110 -002DA2r 1 0F D0 .word %1101000000001111 -002DA4r 1 E1 DF .word %1101111111100001 -002DA6r 1 E2 DF .word %1101111111100010 -002DA8r 1 E3 DF .word %1101111111100011 -002DAAr 1 E4 DF .word %1101111111100100 -002DACr 1 E5 DF .word %1101111111100101 -002DAEr 1 E6 DF .word %1101111111100110 -002DB0r 1 E7 DF .word %1101111111100111 -002DB2r 1 E8 DF .word %1101111111101000 -002DB4r 1 E9 DF .word %1101111111101001 -002DB6r 1 EA DF .word %1101111111101010 -002DB8r 1 EB DF .word %1101111111101011 -002DBAr 1 EC DF .word %1101111111101100 -002DBCr 1 ED DF .word %1101111111101101 -002DBEr 1 EE DF .word %1101111111101110 -002DC0r 1 EF DF .word %1101111111101111 -002DC2r 1 F0 DF .word %1101111111110000 -002DC4r 1 F1 DF .word %1101111111110001 -002DC6r 1 F2 DF .word %1101111111110010 -002DC8r 1 F3 DF .word %1101111111110011 -002DCAr 1 F4 DF .word %1101111111110100 -002DCCr 1 F5 DF .word %1101111111110101 -002DCEr 1 F6 DF .word %1101111111110110 -002DD0r 1 F7 DF .word %1101111111110111 -002DD2r 1 F8 DF .word %1101111111111000 -002DD4r 1 F9 DF .word %1101111111111001 -002DD6r 1 FA DF .word %1101111111111010 -002DD8r 1 FB DF .word %1101111111111011 -002DDAr 1 FC DF .word %1101111111111100 -002DDCr 1 FD DF .word %1101111111111101 -002DDEr 1 FE DF .word %1101111111111110 -002DE0r 1 FF DF .word %1101111111111111 -002DE2r 1 00 E0 .word %1110000000000000 -002DE4r 1 01 E0 .word %1110000000000001 -002DE6r 1 02 E0 .word %1110000000000010 -002DE8r 1 03 E0 .word %1110000000000011 -002DEAr 1 04 E0 .word %1110000000000100 -002DECr 1 05 E0 .word %1110000000000101 -002DEEr 1 06 E0 .word %1110000000000110 -002DF0r 1 07 E0 .word %1110000000000111 -002DF2r 1 08 E0 .word %1110000000001000 -002DF4r 1 09 E0 .word %1110000000001001 -002DF6r 1 0A E0 .word %1110000000001010 -002DF8r 1 0B E0 .word %1110000000001011 -002DFAr 1 0C E0 .word %1110000000001100 -002DFCr 1 0D E0 .word %1110000000001101 -002DFEr 1 0E E0 .word %1110000000001110 -002E00r 1 0F E0 .word %1110000000001111 -002E02r 1 E1 EF .word %1110111111100001 -002E04r 1 E2 EF .word %1110111111100010 -002E06r 1 E3 EF .word %1110111111100011 -002E08r 1 E4 EF .word %1110111111100100 -002E0Ar 1 E5 EF .word %1110111111100101 -002E0Cr 1 E6 EF .word %1110111111100110 -002E0Er 1 E7 EF .word %1110111111100111 -002E10r 1 E8 EF .word %1110111111101000 -002E12r 1 E9 EF .word %1110111111101001 -002E14r 1 EA EF .word %1110111111101010 -002E16r 1 EB EF .word %1110111111101011 -002E18r 1 EC EF .word %1110111111101100 -002E1Ar 1 ED EF .word %1110111111101101 -002E1Cr 1 EE EF .word %1110111111101110 -002E1Er 1 EF EF .word %1110111111101111 -002E20r 1 F0 EF .word %1110111111110000 -002E22r 1 F1 EF .word %1110111111110001 -002E24r 1 F2 EF .word %1110111111110010 -002E26r 1 F3 EF .word %1110111111110011 -002E28r 1 F4 EF .word %1110111111110100 -002E2Ar 1 F5 EF .word %1110111111110101 -002E2Cr 1 F6 EF .word %1110111111110110 -002E2Er 1 F7 EF .word %1110111111110111 -002E30r 1 F8 EF .word %1110111111111000 -002E32r 1 F9 EF .word %1110111111111001 -002E34r 1 FA EF .word %1110111111111010 -002E36r 1 FB EF .word %1110111111111011 -002E38r 1 FC EF .word %1110111111111100 -002E3Ar 1 FD EF .word %1110111111111101 -002E3Cr 1 FE EF .word %1110111111111110 -002E3Er 1 FF EF .word %1110111111111111 -002E40r 1 00 F0 .word %1111000000000000 -002E42r 1 01 F0 .word %1111000000000001 -002E44r 1 02 F0 .word %1111000000000010 -002E46r 1 03 F0 .word %1111000000000011 -002E48r 1 04 F0 .word %1111000000000100 -002E4Ar 1 05 F0 .word %1111000000000101 -002E4Cr 1 06 F0 .word %1111000000000110 -002E4Er 1 07 F0 .word %1111000000000111 -002E50r 1 08 F0 .word %1111000000001000 -002E52r 1 09 F0 .word %1111000000001001 -002E54r 1 0A F0 .word %1111000000001010 -002E56r 1 0B F0 .word %1111000000001011 -002E58r 1 0C F0 .word %1111000000001100 -002E5Ar 1 0D F0 .word %1111000000001101 -002E5Cr 1 0E F0 .word %1111000000001110 -002E5Er 1 0F F0 .word %1111000000001111 -002E60r 1 E1 FF .word %1111111111100001 -002E62r 1 E2 FF .word %1111111111100010 -002E64r 1 E3 FF .word %1111111111100011 -002E66r 1 E4 FF .word %1111111111100100 -002E68r 1 E5 FF .word %1111111111100101 -002E6Ar 1 E6 FF .word %1111111111100110 -002E6Cr 1 E7 FF .word %1111111111100111 -002E6Er 1 E8 FF .word %1111111111101000 -002E70r 1 E9 FF .word %1111111111101001 -002E72r 1 EA FF .word %1111111111101010 -002E74r 1 EB FF .word %1111111111101011 -002E76r 1 EC FF .word %1111111111101100 -002E78r 1 ED FF .word %1111111111101101 -002E7Ar 1 EE FF .word %1111111111101110 -002E7Cr 1 EF FF .word %1111111111101111 -002E7Er 1 F0 FF .word %1111111111110000 -002E80r 1 F1 FF .word %1111111111110001 -002E82r 1 F2 FF .word %1111111111110010 -002E84r 1 F3 FF .word %1111111111110011 -002E86r 1 F4 FF .word %1111111111110100 -002E88r 1 F5 FF .word %1111111111110101 -002E8Ar 1 F6 FF .word %1111111111110110 -002E8Cr 1 F7 FF .word %1111111111110111 -002E8Er 1 F8 FF .word %1111111111111000 -002E90r 1 F9 FF .word %1111111111111001 -002E92r 1 FA FF .word %1111111111111010 -002E94r 1 FB FF .word %1111111111111011 -002E96r 1 FC FF .word %1111111111111100 -002E98r 1 FD FF .word %1111111111111101 -002E9Ar 1 FE FF .word %1111111111111110 -002E9Cr 1 FF FF .word %1111111111111111 +002B08r 1 ; binary values, full length +002B08r 1 00 00 .word %0000000000000000 +002B0Ar 1 01 00 .word %0000000000000001 +002B0Cr 1 02 00 .word %0000000000000010 +002B0Er 1 03 00 .word %0000000000000011 +002B10r 1 04 00 .word %0000000000000100 +002B12r 1 05 00 .word %0000000000000101 +002B14r 1 06 00 .word %0000000000000110 +002B16r 1 07 00 .word %0000000000000111 +002B18r 1 08 00 .word %0000000000001000 +002B1Ar 1 09 00 .word %0000000000001001 +002B1Cr 1 0A 00 .word %0000000000001010 +002B1Er 1 0B 00 .word %0000000000001011 +002B20r 1 0C 00 .word %0000000000001100 +002B22r 1 0D 00 .word %0000000000001101 +002B24r 1 0E 00 .word %0000000000001110 +002B26r 1 0F 00 .word %0000000000001111 +002B28r 1 10 00 .word %0000000000010000 +002B2Ar 1 11 00 .word %0000000000010001 +002B2Cr 1 12 00 .word %0000000000010010 +002B2Er 1 13 00 .word %0000000000010011 +002B30r 1 70 00 .word %0000000001110000 +002B32r 1 71 00 .word %0000000001110001 +002B34r 1 72 00 .word %0000000001110010 +002B36r 1 73 00 .word %0000000001110011 +002B38r 1 74 00 .word %0000000001110100 +002B3Ar 1 75 00 .word %0000000001110101 +002B3Cr 1 76 00 .word %0000000001110110 +002B3Er 1 77 00 .word %0000000001110111 +002B40r 1 78 00 .word %0000000001111000 +002B42r 1 79 00 .word %0000000001111001 +002B44r 1 7A 00 .word %0000000001111010 +002B46r 1 7B 00 .word %0000000001111011 +002B48r 1 7C 00 .word %0000000001111100 +002B4Ar 1 7D 00 .word %0000000001111101 +002B4Cr 1 7E 00 .word %0000000001111110 +002B4Er 1 7F 00 .word %0000000001111111 +002B50r 1 80 00 .word %0000000010000000 +002B52r 1 81 00 .word %0000000010000001 +002B54r 1 82 00 .word %0000000010000010 +002B56r 1 83 00 .word %0000000010000011 +002B58r 1 84 00 .word %0000000010000100 +002B5Ar 1 85 00 .word %0000000010000101 +002B5Cr 1 86 00 .word %0000000010000110 +002B5Er 1 F0 00 .word %0000000011110000 +002B60r 1 F1 00 .word %0000000011110001 +002B62r 1 F2 00 .word %0000000011110010 +002B64r 1 F3 00 .word %0000000011110011 +002B66r 1 F4 00 .word %0000000011110100 +002B68r 1 F5 00 .word %0000000011110101 +002B6Ar 1 F6 00 .word %0000000011110110 +002B6Cr 1 F7 00 .word %0000000011110111 +002B6Er 1 F8 00 .word %0000000011111000 +002B70r 1 F9 00 .word %0000000011111001 +002B72r 1 FA 00 .word %0000000011111010 +002B74r 1 FB 00 .word %0000000011111011 +002B76r 1 FC 00 .word %0000000011111100 +002B78r 1 FD 00 .word %0000000011111101 +002B7Ar 1 FE 00 .word %0000000011111110 +002B7Cr 1 FF 00 .word %0000000011111111 +002B7Er 1 00 01 .word %0000000100000000 +002B80r 1 01 01 .word %0000000100000001 +002B82r 1 02 01 .word %0000000100000010 +002B84r 1 03 01 .word %0000000100000011 +002B86r 1 D2 0F .word %0000111111010010 +002B88r 1 D3 0F .word %0000111111010011 +002B8Ar 1 D4 0F .word %0000111111010100 +002B8Cr 1 D5 0F .word %0000111111010101 +002B8Er 1 D6 0F .word %0000111111010110 +002B90r 1 D7 0F .word %0000111111010111 +002B92r 1 D8 0F .word %0000111111011000 +002B94r 1 D9 0F .word %0000111111011001 +002B96r 1 DA 0F .word %0000111111011010 +002B98r 1 DB 0F .word %0000111111011011 +002B9Ar 1 DC 0F .word %0000111111011100 +002B9Cr 1 DD 0F .word %0000111111011101 +002B9Er 1 DE 0F .word %0000111111011110 +002BA0r 1 DF 0F .word %0000111111011111 +002BA2r 1 E0 0F .word %0000111111100000 +002BA4r 1 E1 0F .word %0000111111100001 +002BA6r 1 E2 0F .word %0000111111100010 +002BA8r 1 E3 0F .word %0000111111100011 +002BAAr 1 E4 0F .word %0000111111100100 +002BACr 1 E5 0F .word %0000111111100101 +002BAEr 1 E6 0F .word %0000111111100110 +002BB0r 1 E7 0F .word %0000111111100111 +002BB2r 1 E8 0F .word %0000111111101000 +002BB4r 1 E9 0F .word %0000111111101001 +002BB6r 1 EA 0F .word %0000111111101010 +002BB8r 1 EB 0F .word %0000111111101011 +002BBAr 1 EC 0F .word %0000111111101100 +002BBCr 1 ED 0F .word %0000111111101101 +002BBEr 1 EE 0F .word %0000111111101110 +002BC0r 1 EF 0F .word %0000111111101111 +002BC2r 1 F0 0F .word %0000111111110000 +002BC4r 1 F1 0F .word %0000111111110001 +002BC6r 1 F2 0F .word %0000111111110010 +002BC8r 1 F3 0F .word %0000111111110011 +002BCAr 1 F4 0F .word %0000111111110100 +002BCCr 1 F5 0F .word %0000111111110101 +002BCEr 1 F6 0F .word %0000111111110110 +002BD0r 1 F7 0F .word %0000111111110111 +002BD2r 1 F8 0F .word %0000111111111000 +002BD4r 1 F9 0F .word %0000111111111001 +002BD6r 1 FA 0F .word %0000111111111010 +002BD8r 1 FB 0F .word %0000111111111011 +002BDAr 1 FC 0F .word %0000111111111100 +002BDCr 1 FD 0F .word %0000111111111101 +002BDEr 1 FE 0F .word %0000111111111110 +002BE0r 1 FF 0F .word %0000111111111111 +002BE2r 1 00 10 .word %0001000000000000 +002BE4r 1 01 10 .word %0001000000000001 +002BE6r 1 02 10 .word %0001000000000010 +002BE8r 1 03 10 .word %0001000000000011 +002BEAr 1 04 10 .word %0001000000000100 +002BECr 1 05 10 .word %0001000000000101 +002BEEr 1 06 10 .word %0001000000000110 +002BF0r 1 07 10 .word %0001000000000111 +002BF2r 1 08 10 .word %0001000000001000 +002BF4r 1 F0 7F .word %0111111111110000 +002BF6r 1 F1 7F .word %0111111111110001 +002BF8r 1 F2 7F .word %0111111111110010 +002BFAr 1 F3 7F .word %0111111111110011 +002BFCr 1 F4 7F .word %0111111111110100 +002BFEr 1 F5 7F .word %0111111111110101 +002C00r 1 F6 7F .word %0111111111110110 +002C02r 1 F7 7F .word %0111111111110111 +002C04r 1 F8 7F .word %0111111111111000 +002C06r 1 F9 7F .word %0111111111111001 +002C08r 1 FA 7F .word %0111111111111010 +002C0Ar 1 FB 7F .word %0111111111111011 +002C0Cr 1 FC 7F .word %0111111111111100 +002C0Er 1 FD 7F .word %0111111111111101 +002C10r 1 FE 7F .word %0111111111111110 +002C12r 1 FF 7F .word %0111111111111111 +002C14r 1 00 80 .word %1000000000000000 +002C16r 1 01 80 .word %1000000000000001 +002C18r 1 02 80 .word %1000000000000010 +002C1Ar 1 03 80 .word %1000000000000011 +002C1Cr 1 04 80 .word %1000000000000100 +002C1Er 1 05 80 .word %1000000000000101 +002C20r 1 06 80 .word %1000000000000110 +002C22r 1 07 80 .word %1000000000000111 +002C24r 1 08 80 .word %1000000000001000 +002C26r 1 09 80 .word %1000000000001001 +002C28r 1 0A 80 .word %1000000000001010 +002C2Ar 1 0B 80 .word %1000000000001011 +002C2Cr 1 E1 9F .word %1001111111100001 +002C2Er 1 E2 9F .word %1001111111100010 +002C30r 1 E3 9F .word %1001111111100011 +002C32r 1 E4 9F .word %1001111111100100 +002C34r 1 E5 9F .word %1001111111100101 +002C36r 1 E6 9F .word %1001111111100110 +002C38r 1 E7 9F .word %1001111111100111 +002C3Ar 1 E8 9F .word %1001111111101000 +002C3Cr 1 E9 9F .word %1001111111101001 +002C3Er 1 EA 9F .word %1001111111101010 +002C40r 1 EB 9F .word %1001111111101011 +002C42r 1 EC 9F .word %1001111111101100 +002C44r 1 ED 9F .word %1001111111101101 +002C46r 1 EE 9F .word %1001111111101110 +002C48r 1 EF 9F .word %1001111111101111 +002C4Ar 1 F0 9F .word %1001111111110000 +002C4Cr 1 F1 9F .word %1001111111110001 +002C4Er 1 F2 9F .word %1001111111110010 +002C50r 1 F3 9F .word %1001111111110011 +002C52r 1 F4 9F .word %1001111111110100 +002C54r 1 F5 9F .word %1001111111110101 +002C56r 1 F6 9F .word %1001111111110110 +002C58r 1 F7 9F .word %1001111111110111 +002C5Ar 1 F8 9F .word %1001111111111000 +002C5Cr 1 F9 9F .word %1001111111111001 +002C5Er 1 FA 9F .word %1001111111111010 +002C60r 1 FB 9F .word %1001111111111011 +002C62r 1 FC 9F .word %1001111111111100 +002C64r 1 FD 9F .word %1001111111111101 +002C66r 1 FE 9F .word %1001111111111110 +002C68r 1 FF 9F .word %1001111111111111 +002C6Ar 1 00 A0 .word %1010000000000000 +002C6Cr 1 01 A0 .word %1010000000000001 +002C6Er 1 02 A0 .word %1010000000000010 +002C70r 1 03 A0 .word %1010000000000011 +002C72r 1 04 A0 .word %1010000000000100 +002C74r 1 05 A0 .word %1010000000000101 +002C76r 1 06 A0 .word %1010000000000110 +002C78r 1 07 A0 .word %1010000000000111 +002C7Ar 1 08 A0 .word %1010000000001000 +002C7Cr 1 09 A0 .word %1010000000001001 +002C7Er 1 0A A0 .word %1010000000001010 +002C80r 1 0B A0 .word %1010000000001011 +002C82r 1 0C A0 .word %1010000000001100 +002C84r 1 0D A0 .word %1010000000001101 +002C86r 1 0E A0 .word %1010000000001110 +002C88r 1 0F A0 .word %1010000000001111 +002C8Ar 1 E1 AF .word %1010111111100001 +002C8Cr 1 E2 AF .word %1010111111100010 +002C8Er 1 E3 AF .word %1010111111100011 +002C90r 1 E4 AF .word %1010111111100100 +002C92r 1 E5 AF .word %1010111111100101 +002C94r 1 E6 AF .word %1010111111100110 +002C96r 1 E7 AF .word %1010111111100111 +002C98r 1 E8 AF .word %1010111111101000 +002C9Ar 1 E9 AF .word %1010111111101001 +002C9Cr 1 EA AF .word %1010111111101010 +002C9Er 1 EB AF .word %1010111111101011 +002CA0r 1 EC AF .word %1010111111101100 +002CA2r 1 ED AF .word %1010111111101101 +002CA4r 1 EE AF .word %1010111111101110 +002CA6r 1 EF AF .word %1010111111101111 +002CA8r 1 F0 AF .word %1010111111110000 +002CAAr 1 F1 AF .word %1010111111110001 +002CACr 1 F2 AF .word %1010111111110010 +002CAEr 1 F3 AF .word %1010111111110011 +002CB0r 1 F4 AF .word %1010111111110100 +002CB2r 1 F5 AF .word %1010111111110101 +002CB4r 1 F6 AF .word %1010111111110110 +002CB6r 1 F7 AF .word %1010111111110111 +002CB8r 1 F8 AF .word %1010111111111000 +002CBAr 1 F9 AF .word %1010111111111001 +002CBCr 1 FA AF .word %1010111111111010 +002CBEr 1 FB AF .word %1010111111111011 +002CC0r 1 FC AF .word %1010111111111100 +002CC2r 1 FD AF .word %1010111111111101 +002CC4r 1 FE AF .word %1010111111111110 +002CC6r 1 FF AF .word %1010111111111111 +002CC8r 1 00 B0 .word %1011000000000000 +002CCAr 1 01 B0 .word %1011000000000001 +002CCCr 1 02 B0 .word %1011000000000010 +002CCEr 1 03 B0 .word %1011000000000011 +002CD0r 1 04 B0 .word %1011000000000100 +002CD2r 1 05 B0 .word %1011000000000101 +002CD4r 1 06 B0 .word %1011000000000110 +002CD6r 1 07 B0 .word %1011000000000111 +002CD8r 1 08 B0 .word %1011000000001000 +002CDAr 1 09 B0 .word %1011000000001001 +002CDCr 1 0A B0 .word %1011000000001010 +002CDEr 1 0B B0 .word %1011000000001011 +002CE0r 1 0C B0 .word %1011000000001100 +002CE2r 1 0D B0 .word %1011000000001101 +002CE4r 1 0E B0 .word %1011000000001110 +002CE6r 1 0F B0 .word %1011000000001111 +002CE8r 1 E1 BF .word %1011111111100001 +002CEAr 1 E2 BF .word %1011111111100010 +002CECr 1 E3 BF .word %1011111111100011 +002CEEr 1 E4 BF .word %1011111111100100 +002CF0r 1 E5 BF .word %1011111111100101 +002CF2r 1 E6 BF .word %1011111111100110 +002CF4r 1 E7 BF .word %1011111111100111 +002CF6r 1 E8 BF .word %1011111111101000 +002CF8r 1 E9 BF .word %1011111111101001 +002CFAr 1 EA BF .word %1011111111101010 +002CFCr 1 EB BF .word %1011111111101011 +002CFEr 1 EC BF .word %1011111111101100 +002D00r 1 ED BF .word %1011111111101101 +002D02r 1 EE BF .word %1011111111101110 +002D04r 1 EF BF .word %1011111111101111 +002D06r 1 F0 BF .word %1011111111110000 +002D08r 1 F1 BF .word %1011111111110001 +002D0Ar 1 F2 BF .word %1011111111110010 +002D0Cr 1 F3 BF .word %1011111111110011 +002D0Er 1 F4 BF .word %1011111111110100 +002D10r 1 F5 BF .word %1011111111110101 +002D12r 1 F6 BF .word %1011111111110110 +002D14r 1 F7 BF .word %1011111111110111 +002D16r 1 F8 BF .word %1011111111111000 +002D18r 1 F9 BF .word %1011111111111001 +002D1Ar 1 FA BF .word %1011111111111010 +002D1Cr 1 FB BF .word %1011111111111011 +002D1Er 1 FC BF .word %1011111111111100 +002D20r 1 FD BF .word %1011111111111101 +002D22r 1 FE BF .word %1011111111111110 +002D24r 1 FF BF .word %1011111111111111 +002D26r 1 00 C0 .word %1100000000000000 +002D28r 1 01 C0 .word %1100000000000001 +002D2Ar 1 02 C0 .word %1100000000000010 +002D2Cr 1 03 C0 .word %1100000000000011 +002D2Er 1 04 C0 .word %1100000000000100 +002D30r 1 05 C0 .word %1100000000000101 +002D32r 1 06 C0 .word %1100000000000110 +002D34r 1 07 C0 .word %1100000000000111 +002D36r 1 08 C0 .word %1100000000001000 +002D38r 1 09 C0 .word %1100000000001001 +002D3Ar 1 0A C0 .word %1100000000001010 +002D3Cr 1 0B C0 .word %1100000000001011 +002D3Er 1 0C C0 .word %1100000000001100 +002D40r 1 0D C0 .word %1100000000001101 +002D42r 1 0E C0 .word %1100000000001110 +002D44r 1 0F C0 .word %1100000000001111 +002D46r 1 E1 CF .word %1100111111100001 +002D48r 1 E2 CF .word %1100111111100010 +002D4Ar 1 E3 CF .word %1100111111100011 +002D4Cr 1 E4 CF .word %1100111111100100 +002D4Er 1 E5 CF .word %1100111111100101 +002D50r 1 E6 CF .word %1100111111100110 +002D52r 1 E7 CF .word %1100111111100111 +002D54r 1 E8 CF .word %1100111111101000 +002D56r 1 E9 CF .word %1100111111101001 +002D58r 1 EA CF .word %1100111111101010 +002D5Ar 1 EB CF .word %1100111111101011 +002D5Cr 1 EC CF .word %1100111111101100 +002D5Er 1 ED CF .word %1100111111101101 +002D60r 1 EE CF .word %1100111111101110 +002D62r 1 EF CF .word %1100111111101111 +002D64r 1 F0 CF .word %1100111111110000 +002D66r 1 F1 CF .word %1100111111110001 +002D68r 1 F2 CF .word %1100111111110010 +002D6Ar 1 F3 CF .word %1100111111110011 +002D6Cr 1 F4 CF .word %1100111111110100 +002D6Er 1 F5 CF .word %1100111111110101 +002D70r 1 F6 CF .word %1100111111110110 +002D72r 1 F7 CF .word %1100111111110111 +002D74r 1 F8 CF .word %1100111111111000 +002D76r 1 F9 CF .word %1100111111111001 +002D78r 1 FA CF .word %1100111111111010 +002D7Ar 1 FB CF .word %1100111111111011 +002D7Cr 1 FC CF .word %1100111111111100 +002D7Er 1 FD CF .word %1100111111111101 +002D80r 1 FE CF .word %1100111111111110 +002D82r 1 FF CF .word %1100111111111111 +002D84r 1 00 D0 .word %1101000000000000 +002D86r 1 01 D0 .word %1101000000000001 +002D88r 1 02 D0 .word %1101000000000010 +002D8Ar 1 03 D0 .word %1101000000000011 +002D8Cr 1 04 D0 .word %1101000000000100 +002D8Er 1 05 D0 .word %1101000000000101 +002D90r 1 06 D0 .word %1101000000000110 +002D92r 1 07 D0 .word %1101000000000111 +002D94r 1 08 D0 .word %1101000000001000 +002D96r 1 09 D0 .word %1101000000001001 +002D98r 1 0A D0 .word %1101000000001010 +002D9Ar 1 0B D0 .word %1101000000001011 +002D9Cr 1 0C D0 .word %1101000000001100 +002D9Er 1 0D D0 .word %1101000000001101 +002DA0r 1 0E D0 .word %1101000000001110 +002DA2r 1 0F D0 .word %1101000000001111 +002DA4r 1 E1 DF .word %1101111111100001 +002DA6r 1 E2 DF .word %1101111111100010 +002DA8r 1 E3 DF .word %1101111111100011 +002DAAr 1 E4 DF .word %1101111111100100 +002DACr 1 E5 DF .word %1101111111100101 +002DAEr 1 E6 DF .word %1101111111100110 +002DB0r 1 E7 DF .word %1101111111100111 +002DB2r 1 E8 DF .word %1101111111101000 +002DB4r 1 E9 DF .word %1101111111101001 +002DB6r 1 EA DF .word %1101111111101010 +002DB8r 1 EB DF .word %1101111111101011 +002DBAr 1 EC DF .word %1101111111101100 +002DBCr 1 ED DF .word %1101111111101101 +002DBEr 1 EE DF .word %1101111111101110 +002DC0r 1 EF DF .word %1101111111101111 +002DC2r 1 F0 DF .word %1101111111110000 +002DC4r 1 F1 DF .word %1101111111110001 +002DC6r 1 F2 DF .word %1101111111110010 +002DC8r 1 F3 DF .word %1101111111110011 +002DCAr 1 F4 DF .word %1101111111110100 +002DCCr 1 F5 DF .word %1101111111110101 +002DCEr 1 F6 DF .word %1101111111110110 +002DD0r 1 F7 DF .word %1101111111110111 +002DD2r 1 F8 DF .word %1101111111111000 +002DD4r 1 F9 DF .word %1101111111111001 +002DD6r 1 FA DF .word %1101111111111010 +002DD8r 1 FB DF .word %1101111111111011 +002DDAr 1 FC DF .word %1101111111111100 +002DDCr 1 FD DF .word %1101111111111101 +002DDEr 1 FE DF .word %1101111111111110 +002DE0r 1 FF DF .word %1101111111111111 +002DE2r 1 00 E0 .word %1110000000000000 +002DE4r 1 01 E0 .word %1110000000000001 +002DE6r 1 02 E0 .word %1110000000000010 +002DE8r 1 03 E0 .word %1110000000000011 +002DEAr 1 04 E0 .word %1110000000000100 +002DECr 1 05 E0 .word %1110000000000101 +002DEEr 1 06 E0 .word %1110000000000110 +002DF0r 1 07 E0 .word %1110000000000111 +002DF2r 1 08 E0 .word %1110000000001000 +002DF4r 1 09 E0 .word %1110000000001001 +002DF6r 1 0A E0 .word %1110000000001010 +002DF8r 1 0B E0 .word %1110000000001011 +002DFAr 1 0C E0 .word %1110000000001100 +002DFCr 1 0D E0 .word %1110000000001101 +002DFEr 1 0E E0 .word %1110000000001110 +002E00r 1 0F E0 .word %1110000000001111 +002E02r 1 E1 EF .word %1110111111100001 +002E04r 1 E2 EF .word %1110111111100010 +002E06r 1 E3 EF .word %1110111111100011 +002E08r 1 E4 EF .word %1110111111100100 +002E0Ar 1 E5 EF .word %1110111111100101 +002E0Cr 1 E6 EF .word %1110111111100110 +002E0Er 1 E7 EF .word %1110111111100111 +002E10r 1 E8 EF .word %1110111111101000 +002E12r 1 E9 EF .word %1110111111101001 +002E14r 1 EA EF .word %1110111111101010 +002E16r 1 EB EF .word %1110111111101011 +002E18r 1 EC EF .word %1110111111101100 +002E1Ar 1 ED EF .word %1110111111101101 +002E1Cr 1 EE EF .word %1110111111101110 +002E1Er 1 EF EF .word %1110111111101111 +002E20r 1 F0 EF .word %1110111111110000 +002E22r 1 F1 EF .word %1110111111110001 +002E24r 1 F2 EF .word %1110111111110010 +002E26r 1 F3 EF .word %1110111111110011 +002E28r 1 F4 EF .word %1110111111110100 +002E2Ar 1 F5 EF .word %1110111111110101 +002E2Cr 1 F6 EF .word %1110111111110110 +002E2Er 1 F7 EF .word %1110111111110111 +002E30r 1 F8 EF .word %1110111111111000 +002E32r 1 F9 EF .word %1110111111111001 +002E34r 1 FA EF .word %1110111111111010 +002E36r 1 FB EF .word %1110111111111011 +002E38r 1 FC EF .word %1110111111111100 +002E3Ar 1 FD EF .word %1110111111111101 +002E3Cr 1 FE EF .word %1110111111111110 +002E3Er 1 FF EF .word %1110111111111111 +002E40r 1 00 F0 .word %1111000000000000 +002E42r 1 01 F0 .word %1111000000000001 +002E44r 1 02 F0 .word %1111000000000010 +002E46r 1 03 F0 .word %1111000000000011 +002E48r 1 04 F0 .word %1111000000000100 +002E4Ar 1 05 F0 .word %1111000000000101 +002E4Cr 1 06 F0 .word %1111000000000110 +002E4Er 1 07 F0 .word %1111000000000111 +002E50r 1 08 F0 .word %1111000000001000 +002E52r 1 09 F0 .word %1111000000001001 +002E54r 1 0A F0 .word %1111000000001010 +002E56r 1 0B F0 .word %1111000000001011 +002E58r 1 0C F0 .word %1111000000001100 +002E5Ar 1 0D F0 .word %1111000000001101 +002E5Cr 1 0E F0 .word %1111000000001110 +002E5Er 1 0F F0 .word %1111000000001111 +002E60r 1 E1 FF .word %1111111111100001 +002E62r 1 E2 FF .word %1111111111100010 +002E64r 1 E3 FF .word %1111111111100011 +002E66r 1 E4 FF .word %1111111111100100 +002E68r 1 E5 FF .word %1111111111100101 +002E6Ar 1 E6 FF .word %1111111111100110 +002E6Cr 1 E7 FF .word %1111111111100111 +002E6Er 1 E8 FF .word %1111111111101000 +002E70r 1 E9 FF .word %1111111111101001 +002E72r 1 EA FF .word %1111111111101010 +002E74r 1 EB FF .word %1111111111101011 +002E76r 1 EC FF .word %1111111111101100 +002E78r 1 ED FF .word %1111111111101101 +002E7Ar 1 EE FF .word %1111111111101110 +002E7Cr 1 EF FF .word %1111111111101111 +002E7Er 1 F0 FF .word %1111111111110000 +002E80r 1 F1 FF .word %1111111111110001 +002E82r 1 F2 FF .word %1111111111110010 +002E84r 1 F3 FF .word %1111111111110011 +002E86r 1 F4 FF .word %1111111111110100 +002E88r 1 F5 FF .word %1111111111110101 +002E8Ar 1 F6 FF .word %1111111111110110 +002E8Cr 1 F7 FF .word %1111111111110111 +002E8Er 1 F8 FF .word %1111111111111000 +002E90r 1 F9 FF .word %1111111111111001 +002E92r 1 FA FF .word %1111111111111010 +002E94r 1 FB FF .word %1111111111111011 +002E96r 1 FC FF .word %1111111111111100 +002E98r 1 FD FF .word %1111111111111101 +002E9Ar 1 FE FF .word %1111111111111110 +002E9Cr 1 FF FF .word %1111111111111111 002E9Er 1 -002E9Er 1 ; multiple values on one line, decimal -002E9Er 1 00 00 01 00 .word 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +002E9Er 1 ; multiple values on one line, decimal +002E9Er 1 00 00 01 00 .word 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 002EA2r 1 02 00 03 00 002EA6r 1 04 00 05 00 -002EBEr 1 10 00 11 00 .word 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +002EBEr 1 10 00 11 00 .word 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 002EC2r 1 12 00 13 00 002EC6r 1 14 00 15 00 -002EDEr 1 70 00 71 00 .word 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +002EDEr 1 70 00 71 00 .word 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 002EE2r 1 72 00 73 00 002EE6r 1 74 00 75 00 -002EFEr 1 80 00 81 00 .word 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +002EFEr 1 80 00 81 00 .word 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 002F02r 1 82 00 83 00 002F06r 1 84 00 85 00 -002F1Er 1 F0 00 F1 00 .word 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +002F1Er 1 F0 00 F1 00 .word 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 002F22r 1 F2 00 F3 00 002F26r 1 F4 00 F5 00 -002F3Er 1 00 01 01 01 .word 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 +002F3Er 1 00 01 01 01 .word 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 002F42r 1 02 01 03 01 002F46r 1 04 01 05 01 -002F5Er 1 E0 0F E1 0F .word 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 +002F5Er 1 E0 0F E1 0F .word 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 002F62r 1 E2 0F E3 0F 002F66r 1 E4 0F E5 0F -002F7Er 1 F0 0F F1 0F .word 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 +002F7Er 1 F0 0F F1 0F .word 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 002F82r 1 F2 0F F3 0F 002F86r 1 F4 0F F5 0F -002F9Er 1 00 10 01 10 .word 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 +002F9Er 1 00 10 01 10 .word 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 002FA2r 1 02 10 03 10 002FA6r 1 04 10 05 10 -002FBEr 1 F0 7F F1 7F .word 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 +002FBEr 1 F0 7F F1 7F .word 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 002FC2r 1 F2 7F F3 7F 002FC6r 1 F4 7F F5 7F -002FDEr 1 00 80 01 80 .word 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 +002FDEr 1 00 80 01 80 .word 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 002FE2r 1 02 80 03 80 002FE6r 1 04 80 05 80 -002FFEr 1 F0 9F F1 9F .word 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 +002FFEr 1 F0 9F F1 9F .word 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 003002r 1 F2 9F F3 9F 003006r 1 F4 9F F5 9F -00301Er 1 00 A0 01 A0 .word 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 +00301Er 1 00 A0 01 A0 .word 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 003022r 1 02 A0 03 A0 003026r 1 04 A0 05 A0 -00303Er 1 F0 AF F1 AF .word 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 +00303Er 1 F0 AF F1 AF .word 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 003042r 1 F2 AF F3 AF 003046r 1 F4 AF F5 AF -00305Er 1 00 B0 01 B0 .word 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 +00305Er 1 00 B0 01 B0 .word 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 003062r 1 02 B0 03 B0 003066r 1 04 B0 05 B0 -00307Er 1 F0 BF F1 BF .word 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 +00307Er 1 F0 BF F1 BF .word 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 003082r 1 F2 BF F3 BF 003086r 1 F4 BF F5 BF -00309Er 1 00 C0 01 C0 .word 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 +00309Er 1 00 C0 01 C0 .word 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 0030A2r 1 02 C0 03 C0 0030A6r 1 04 C0 05 C0 -0030BEr 1 F0 CF F1 CF .word 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 +0030BEr 1 F0 CF F1 CF .word 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 0030C2r 1 F2 CF F3 CF 0030C6r 1 F4 CF F5 CF -0030DEr 1 00 D0 01 D0 .word 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 +0030DEr 1 00 D0 01 D0 .word 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 0030E2r 1 02 D0 03 D0 0030E6r 1 04 D0 05 D0 -0030FEr 1 F0 DF F1 DF .word 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 +0030FEr 1 F0 DF F1 DF .word 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 003102r 1 F2 DF F3 DF 003106r 1 F4 DF F5 DF -00311Er 1 00 E0 01 E0 .word 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 +00311Er 1 00 E0 01 E0 .word 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 003122r 1 02 E0 03 E0 003126r 1 04 E0 05 E0 -00313Er 1 F0 EF F1 EF .word 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 +00313Er 1 F0 EF F1 EF .word 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 003142r 1 F2 EF F3 EF 003146r 1 F4 EF F5 EF -00315Er 1 00 F0 01 F0 .word 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 +00315Er 1 00 F0 01 F0 .word 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 003162r 1 02 F0 03 F0 003166r 1 04 F0 05 F0 -00317Er 1 F0 FF F1 FF .word 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 +00317Er 1 F0 FF F1 FF .word 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 003182r 1 F2 FF F3 FF 003186r 1 F4 FF F5 FF 00319Er 1 -00319Er 1 ; multiple values on one line, hex -00319Er 1 00 00 01 00 .word $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +00319Er 1 ; multiple values on one line, hex +00319Er 1 00 00 01 00 .word $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f 0031A2r 1 02 00 03 00 0031A6r 1 04 00 05 00 -0031BEr 1 10 00 11 00 .word $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +0031BEr 1 10 00 11 00 .word $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f 0031C2r 1 12 00 13 00 0031C6r 1 14 00 15 00 -0031DEr 1 70 00 71 00 .word $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +0031DEr 1 70 00 71 00 .word $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f 0031E2r 1 72 00 73 00 0031E6r 1 74 00 75 00 -0031FEr 1 80 00 81 00 .word $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +0031FEr 1 80 00 81 00 .word $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f 003202r 1 82 00 83 00 003206r 1 84 00 85 00 -00321Er 1 F0 00 F1 00 .word $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +00321Er 1 F0 00 F1 00 .word $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff 003222r 1 F2 00 F3 00 003226r 1 F4 00 F5 00 -00323Er 1 00 01 01 01 .word $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f +00323Er 1 00 01 01 01 .word $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f 003242r 1 02 01 03 01 003246r 1 04 01 05 01 -00325Er 1 E0 0F E1 0F .word $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef +00325Er 1 E0 0F E1 0F .word $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef 003262r 1 E2 0F E3 0F 003266r 1 E4 0F E5 0F -00327Er 1 F0 0F F1 0F .word $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff +00327Er 1 F0 0F F1 0F .word $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff 003282r 1 F2 0F F3 0F 003286r 1 F4 0F F5 0F -00329Er 1 00 10 01 10 .word $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f +00329Er 1 00 10 01 10 .word $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f 0032A2r 1 02 10 03 10 0032A6r 1 04 10 05 10 -0032BEr 1 F0 7F F1 7F .word $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff +0032BEr 1 F0 7F F1 7F .word $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff 0032C2r 1 F2 7F F3 7F 0032C6r 1 F4 7F F5 7F -0032DEr 1 00 80 01 80 .word $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f +0032DEr 1 00 80 01 80 .word $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f 0032E2r 1 02 80 03 80 0032E6r 1 04 80 05 80 -0032FEr 1 F0 9F F1 9F .word $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff +0032FEr 1 F0 9F F1 9F .word $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff 003302r 1 F2 9F F3 9F 003306r 1 F4 9F F5 9F -00331Er 1 00 A0 01 A0 .word $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f +00331Er 1 00 A0 01 A0 .word $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f 003322r 1 02 A0 03 A0 003326r 1 04 A0 05 A0 -00333Er 1 F0 AF F1 AF .word $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff +00333Er 1 F0 AF F1 AF .word $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff 003342r 1 F2 AF F3 AF 003346r 1 F4 AF F5 AF -00335Er 1 00 B0 01 B0 .word $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f +00335Er 1 00 B0 01 B0 .word $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f 003362r 1 02 B0 03 B0 003366r 1 04 B0 05 B0 -00337Er 1 F0 BF F1 BF .word $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff +00337Er 1 F0 BF F1 BF .word $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff 003382r 1 F2 BF F3 BF 003386r 1 F4 BF F5 BF -00339Er 1 00 C0 01 C0 .word $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f +00339Er 1 00 C0 01 C0 .word $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f 0033A2r 1 02 C0 03 C0 0033A6r 1 04 C0 05 C0 -0033BEr 1 F0 CF F1 CF .word $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff +0033BEr 1 F0 CF F1 CF .word $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff 0033C2r 1 F2 CF F3 CF 0033C6r 1 F4 CF F5 CF -0033DEr 1 00 D0 01 D0 .word $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f +0033DEr 1 00 D0 01 D0 .word $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f 0033E2r 1 02 D0 03 D0 0033E6r 1 04 D0 05 D0 -0033FEr 1 F0 DF F1 DF .word $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff +0033FEr 1 F0 DF F1 DF .word $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff 003402r 1 F2 DF F3 DF 003406r 1 F4 DF F5 DF -00341Er 1 00 E0 01 E0 .word $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f +00341Er 1 00 E0 01 E0 .word $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f 003422r 1 02 E0 03 E0 003426r 1 04 E0 05 E0 -00343Er 1 F0 EF F1 EF .word $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff +00343Er 1 F0 EF F1 EF .word $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff 003442r 1 F2 EF F3 EF 003446r 1 F4 EF F5 EF -00345Er 1 00 F0 01 F0 .word $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f +00345Er 1 00 F0 01 F0 .word $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f 003462r 1 02 F0 03 F0 003466r 1 04 F0 05 F0 -00347Er 1 F0 FF F1 FF .word $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff +00347Er 1 F0 FF F1 FF .word $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff 003482r 1 F2 FF F3 FF 003486r 1 F4 FF F5 FF 00349Er 1 -00349Er 1 ; multiple values on one line, alternative hex -00349Er 1 00 00 01 00 .word 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +00349Er 1 ; multiple values on one line, alternative hex +00349Er 1 00 00 01 00 .word 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh 0034A2r 1 02 00 03 00 0034A6r 1 04 00 05 00 -0034BEr 1 10 00 11 00 .word 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +0034BEr 1 10 00 11 00 .word 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh 0034C2r 1 12 00 13 00 0034C6r 1 14 00 15 00 -0034DEr 1 70 00 71 00 .word 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +0034DEr 1 70 00 71 00 .word 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh 0034E2r 1 72 00 73 00 0034E6r 1 74 00 75 00 -0034FEr 1 80 00 81 00 .word 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +0034FEr 1 80 00 81 00 .word 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh 003502r 1 82 00 83 00 003506r 1 84 00 85 00 -00351Er 1 F0 00 F1 00 .word 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +00351Er 1 F0 00 F1 00 .word 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh 003522r 1 F2 00 F3 00 003526r 1 F4 00 F5 00 -00353Er 1 00 01 01 01 .word 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh +00353Er 1 00 01 01 01 .word 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh 003542r 1 02 01 03 01 003546r 1 04 01 05 01 -00355Er 1 E0 0F E1 0F .word 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh +00355Er 1 E0 0F E1 0F .word 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh 003562r 1 E2 0F E3 0F 003566r 1 E4 0F E5 0F -00357Er 1 F0 0F F1 0F .word 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh +00357Er 1 F0 0F F1 0F .word 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh 003582r 1 F2 0F F3 0F 003586r 1 F4 0F F5 0F -00359Er 1 00 10 01 10 .word 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh +00359Er 1 00 10 01 10 .word 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh 0035A2r 1 02 10 03 10 0035A6r 1 04 10 05 10 -0035BEr 1 F0 7F F1 7F .word 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh +0035BEr 1 F0 7F F1 7F .word 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh 0035C2r 1 F2 7F F3 7F 0035C6r 1 F4 7F F5 7F -0035DEr 1 00 80 01 80 .word 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh +0035DEr 1 00 80 01 80 .word 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh 0035E2r 1 02 80 03 80 0035E6r 1 04 80 05 80 -0035FEr 1 F0 9F F1 9F .word 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh +0035FEr 1 F0 9F F1 9F .word 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh 003602r 1 F2 9F F3 9F 003606r 1 F4 9F F5 9F -00361Er 1 00 A0 01 A0 .word 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh +00361Er 1 00 A0 01 A0 .word 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh 003622r 1 02 A0 03 A0 003626r 1 04 A0 05 A0 -00363Er 1 F0 AF F1 AF .word 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh +00363Er 1 F0 AF F1 AF .word 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh 003642r 1 F2 AF F3 AF 003646r 1 F4 AF F5 AF -00365Er 1 00 B0 01 B0 .word 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh +00365Er 1 00 B0 01 B0 .word 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh 003662r 1 02 B0 03 B0 003666r 1 04 B0 05 B0 -00367Er 1 F0 BF F1 BF .word 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh +00367Er 1 F0 BF F1 BF .word 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh 003682r 1 F2 BF F3 BF 003686r 1 F4 BF F5 BF -00369Er 1 00 C0 01 C0 .word 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh +00369Er 1 00 C0 01 C0 .word 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh 0036A2r 1 02 C0 03 C0 0036A6r 1 04 C0 05 C0 -0036BEr 1 F0 CF F1 CF .word 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh +0036BEr 1 F0 CF F1 CF .word 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh 0036C2r 1 F2 CF F3 CF 0036C6r 1 F4 CF F5 CF -0036DEr 1 00 D0 01 D0 .word 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh +0036DEr 1 00 D0 01 D0 .word 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh 0036E2r 1 02 D0 03 D0 0036E6r 1 04 D0 05 D0 -0036FEr 1 F0 DF F1 DF .word 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh +0036FEr 1 F0 DF F1 DF .word 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh 003702r 1 F2 DF F3 DF 003706r 1 F4 DF F5 DF -00371Er 1 00 E0 01 E0 .word 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh +00371Er 1 00 E0 01 E0 .word 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh 003722r 1 02 E0 03 E0 003726r 1 04 E0 05 E0 -00373Er 1 F0 EF F1 EF .word 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh +00373Er 1 F0 EF F1 EF .word 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh 003742r 1 F2 EF F3 EF 003746r 1 F4 EF F5 EF -00375Er 1 00 F0 01 F0 .word 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh +00375Er 1 00 F0 01 F0 .word 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh 003762r 1 02 F0 03 F0 003766r 1 04 F0 05 F0 -00377Er 1 F0 FF F1 FF .word 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh +00377Er 1 F0 FF F1 FF .word 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh 003782r 1 F2 FF F3 FF 003786r 1 F4 FF F5 FF 00379Er 1 -00379Er 1 ; mix some variants -00379Er 1 0B 00 11 00 .word 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +00379Er 1 ; mix some variants +00379Er 1 0B 00 11 00 .word 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh 0037A2r 1 03 00 11 00 0037A6r 1 61 00 62 00 0037BCr 1 diff --git a/test/asm/listing/102-word.s b/test/asm/listing/102-word.s index 5cb297c5d..cbbc7eff6 100644 --- a/test/asm/listing/102-word.s +++ b/test/asm/listing/102-word.s @@ -1,6076 +1,6076 @@ ; 2022-06-15 Spiro Trikaliotis - ; upper case pseudo-op - .WORD 0 - .WORD 1 - .WORD 2 - .WORD 3 - .WORD 4 - .WORD 5 - .WORD 6 - .WORD 7 - .WORD 8 - .WORD 9 - .WORD 10 - .WORD 11 - .WORD 12 - .WORD 13 - .WORD 14 - .WORD 15 - .WORD 16 - .WORD 17 - .WORD 18 - .WORD 19 - .WORD 112 - .WORD 113 - .WORD 114 - .WORD 115 - .WORD 116 - .WORD 117 - .WORD 118 - .WORD 119 - .WORD 120 - .WORD 121 - .WORD 122 - .WORD 123 - .WORD 124 - .WORD 125 - .WORD 126 - .WORD 127 - .WORD 128 - .WORD 129 - .WORD 130 - .WORD 131 - .WORD 132 - .WORD 133 - .WORD 134 - .WORD 240 - .WORD 241 - .WORD 242 - .WORD 243 - .WORD 244 - .WORD 245 - .WORD 246 - .WORD 247 - .WORD 248 - .WORD 249 - .WORD 250 - .WORD 251 - .WORD 252 - .WORD 253 - .WORD 254 - .WORD 255 - .WORD 256 - .WORD 257 - .WORD 258 - .WORD 259 - .WORD 4050 - .WORD 4051 - .WORD 4052 - .WORD 4053 - .WORD 4054 - .WORD 4055 - .WORD 4056 - .WORD 4057 - .WORD 4058 - .WORD 4059 - .WORD 4060 - .WORD 4061 - .WORD 4062 - .WORD 4063 - .WORD 4064 - .WORD 4065 - .WORD 4066 - .WORD 4067 - .WORD 4068 - .WORD 4069 - .WORD 4070 - .WORD 4071 - .WORD 4072 - .WORD 4073 - .WORD 4074 - .WORD 4075 - .WORD 4076 - .WORD 4077 - .WORD 4078 - .WORD 4079 - .WORD 4080 - .WORD 4081 - .WORD 4082 - .WORD 4083 - .WORD 4084 - .WORD 4085 - .WORD 4086 - .WORD 4087 - .WORD 4088 - .WORD 4089 - .WORD 4090 - .WORD 4091 - .WORD 4092 - .WORD 4093 - .WORD 4094 - .WORD 4095 - .WORD 4096 - .WORD 4097 - .WORD 4098 - .WORD 4099 - .WORD 4100 - .WORD 4101 - .WORD 4102 - .WORD 4103 - .WORD 4104 - .WORD 32752 - .WORD 32753 - .WORD 32754 - .WORD 32755 - .WORD 32756 - .WORD 32757 - .WORD 32758 - .WORD 32759 - .WORD 32760 - .WORD 32761 - .WORD 32762 - .WORD 32763 - .WORD 32764 - .WORD 32765 - .WORD 32766 - .WORD 32767 - .WORD 32768 - .WORD 32769 - .WORD 32770 - .WORD 32771 - .WORD 32772 - .WORD 32773 - .WORD 32774 - .WORD 32775 - .WORD 32776 - .WORD 32777 - .WORD 32778 - .WORD 32779 - .WORD 40929 - .WORD 40930 - .WORD 40931 - .WORD 40932 - .WORD 40933 - .WORD 40934 - .WORD 40935 - .WORD 40936 - .WORD 40937 - .WORD 40938 - .WORD 40939 - .WORD 40940 - .WORD 40941 - .WORD 40942 - .WORD 40943 - .WORD 40944 - .WORD 40945 - .WORD 40946 - .WORD 40947 - .WORD 40948 - .WORD 40949 - .WORD 40950 - .WORD 40951 - .WORD 40952 - .WORD 40953 - .WORD 40954 - .WORD 40955 - .WORD 40956 - .WORD 40957 - .WORD 40958 - .WORD 40959 - .WORD 40960 - .WORD 40961 - .WORD 40962 - .WORD 40963 - .WORD 40964 - .WORD 40965 - .WORD 40966 - .WORD 40967 - .WORD 40968 - .WORD 40969 - .WORD 40970 - .WORD 40971 - .WORD 40972 - .WORD 40973 - .WORD 40974 - .WORD 40975 - .WORD 45025 - .WORD 45026 - .WORD 45027 - .WORD 45028 - .WORD 45029 - .WORD 45030 - .WORD 45031 - .WORD 45032 - .WORD 45033 - .WORD 45034 - .WORD 45035 - .WORD 45036 - .WORD 45037 - .WORD 45038 - .WORD 45039 - .WORD 45040 - .WORD 45041 - .WORD 45042 - .WORD 45043 - .WORD 45044 - .WORD 45045 - .WORD 45046 - .WORD 45047 - .WORD 45048 - .WORD 45049 - .WORD 45050 - .WORD 45051 - .WORD 45052 - .WORD 45053 - .WORD 45054 - .WORD 45055 - .WORD 45056 - .WORD 45057 - .WORD 45058 - .WORD 45059 - .WORD 45060 - .WORD 45061 - .WORD 45062 - .WORD 45063 - .WORD 45064 - .WORD 45065 - .WORD 45066 - .WORD 45067 - .WORD 45068 - .WORD 45069 - .WORD 45070 - .WORD 45071 - .WORD 49121 - .WORD 49122 - .WORD 49123 - .WORD 49124 - .WORD 49125 - .WORD 49126 - .WORD 49127 - .WORD 49128 - .WORD 49129 - .WORD 49130 - .WORD 49131 - .WORD 49132 - .WORD 49133 - .WORD 49134 - .WORD 49135 - .WORD 49136 - .WORD 49137 - .WORD 49138 - .WORD 49139 - .WORD 49140 - .WORD 49141 - .WORD 49142 - .WORD 49143 - .WORD 49144 - .WORD 49145 - .WORD 49146 - .WORD 49147 - .WORD 49148 - .WORD 49149 - .WORD 49150 - .WORD 49151 - .WORD 49152 - .WORD 49153 - .WORD 49154 - .WORD 49155 - .WORD 49156 - .WORD 49157 - .WORD 49158 - .WORD 49159 - .WORD 49160 - .WORD 49161 - .WORD 49162 - .WORD 49163 - .WORD 49164 - .WORD 49165 - .WORD 49166 - .WORD 49167 - .WORD 53217 - .WORD 53218 - .WORD 53219 - .WORD 53220 - .WORD 53221 - .WORD 53222 - .WORD 53223 - .WORD 53224 - .WORD 53225 - .WORD 53226 - .WORD 53227 - .WORD 53228 - .WORD 53229 - .WORD 53230 - .WORD 53231 - .WORD 53232 - .WORD 53233 - .WORD 53234 - .WORD 53235 - .WORD 53236 - .WORD 53237 - .WORD 53238 - .WORD 53239 - .WORD 53240 - .WORD 53241 - .WORD 53242 - .WORD 53243 - .WORD 53244 - .WORD 53245 - .WORD 53246 - .WORD 53247 - .WORD 53248 - .WORD 53249 - .WORD 53250 - .WORD 53251 - .WORD 53252 - .WORD 53253 - .WORD 53254 - .WORD 53255 - .WORD 53256 - .WORD 53257 - .WORD 53258 - .WORD 53259 - .WORD 53260 - .WORD 53261 - .WORD 53262 - .WORD 53263 - .WORD 57313 - .WORD 57314 - .WORD 57315 - .WORD 57316 - .WORD 57317 - .WORD 57318 - .WORD 57319 - .WORD 57320 - .WORD 57321 - .WORD 57322 - .WORD 57323 - .WORD 57324 - .WORD 57325 - .WORD 57326 - .WORD 57327 - .WORD 57328 - .WORD 57329 - .WORD 57330 - .WORD 57331 - .WORD 57332 - .WORD 57333 - .WORD 57334 - .WORD 57335 - .WORD 57336 - .WORD 57337 - .WORD 57338 - .WORD 57339 - .WORD 57340 - .WORD 57341 - .WORD 57342 - .WORD 57343 - .WORD 57344 - .WORD 57345 - .WORD 57346 - .WORD 57347 - .WORD 57348 - .WORD 57349 - .WORD 57350 - .WORD 57351 - .WORD 57352 - .WORD 57353 - .WORD 57354 - .WORD 57355 - .WORD 57356 - .WORD 57357 - .WORD 57358 - .WORD 57359 - .WORD 61409 - .WORD 61410 - .WORD 61411 - .WORD 61412 - .WORD 61413 - .WORD 61414 - .WORD 61415 - .WORD 61416 - .WORD 61417 - .WORD 61418 - .WORD 61419 - .WORD 61420 - .WORD 61421 - .WORD 61422 - .WORD 61423 - .WORD 61424 - .WORD 61425 - .WORD 61426 - .WORD 61427 - .WORD 61428 - .WORD 61429 - .WORD 61430 - .WORD 61431 - .WORD 61432 - .WORD 61433 - .WORD 61434 - .WORD 61435 - .WORD 61436 - .WORD 61437 - .WORD 61438 - .WORD 61439 - .WORD 61440 - .WORD 61441 - .WORD 61442 - .WORD 61443 - .WORD 61444 - .WORD 61445 - .WORD 61446 - .WORD 61447 - .WORD 61448 - .WORD 61449 - .WORD 61450 - .WORD 61451 - .WORD 61452 - .WORD 61453 - .WORD 61454 - .WORD 61455 - .WORD 65505 - .WORD 65506 - .WORD 65507 - .WORD 65508 - .WORD 65509 - .WORD 65510 - .WORD 65511 - .WORD 65512 - .WORD 65513 - .WORD 65514 - .WORD 65515 - .WORD 65516 - .WORD 65517 - .WORD 65518 - .WORD 65519 - .WORD 65520 - .WORD 65521 - .WORD 65522 - .WORD 65523 - .WORD 65524 - .WORD 65525 - .WORD 65526 - .WORD 65527 - .WORD 65528 - .WORD 65529 - .WORD 65530 - .WORD 65531 - .WORD 65532 - .WORD 65533 - .WORD 65534 - .WORD 65535 + ; upper case pseudo-op + .WORD 0 + .WORD 1 + .WORD 2 + .WORD 3 + .WORD 4 + .WORD 5 + .WORD 6 + .WORD 7 + .WORD 8 + .WORD 9 + .WORD 10 + .WORD 11 + .WORD 12 + .WORD 13 + .WORD 14 + .WORD 15 + .WORD 16 + .WORD 17 + .WORD 18 + .WORD 19 + .WORD 112 + .WORD 113 + .WORD 114 + .WORD 115 + .WORD 116 + .WORD 117 + .WORD 118 + .WORD 119 + .WORD 120 + .WORD 121 + .WORD 122 + .WORD 123 + .WORD 124 + .WORD 125 + .WORD 126 + .WORD 127 + .WORD 128 + .WORD 129 + .WORD 130 + .WORD 131 + .WORD 132 + .WORD 133 + .WORD 134 + .WORD 240 + .WORD 241 + .WORD 242 + .WORD 243 + .WORD 244 + .WORD 245 + .WORD 246 + .WORD 247 + .WORD 248 + .WORD 249 + .WORD 250 + .WORD 251 + .WORD 252 + .WORD 253 + .WORD 254 + .WORD 255 + .WORD 256 + .WORD 257 + .WORD 258 + .WORD 259 + .WORD 4050 + .WORD 4051 + .WORD 4052 + .WORD 4053 + .WORD 4054 + .WORD 4055 + .WORD 4056 + .WORD 4057 + .WORD 4058 + .WORD 4059 + .WORD 4060 + .WORD 4061 + .WORD 4062 + .WORD 4063 + .WORD 4064 + .WORD 4065 + .WORD 4066 + .WORD 4067 + .WORD 4068 + .WORD 4069 + .WORD 4070 + .WORD 4071 + .WORD 4072 + .WORD 4073 + .WORD 4074 + .WORD 4075 + .WORD 4076 + .WORD 4077 + .WORD 4078 + .WORD 4079 + .WORD 4080 + .WORD 4081 + .WORD 4082 + .WORD 4083 + .WORD 4084 + .WORD 4085 + .WORD 4086 + .WORD 4087 + .WORD 4088 + .WORD 4089 + .WORD 4090 + .WORD 4091 + .WORD 4092 + .WORD 4093 + .WORD 4094 + .WORD 4095 + .WORD 4096 + .WORD 4097 + .WORD 4098 + .WORD 4099 + .WORD 4100 + .WORD 4101 + .WORD 4102 + .WORD 4103 + .WORD 4104 + .WORD 32752 + .WORD 32753 + .WORD 32754 + .WORD 32755 + .WORD 32756 + .WORD 32757 + .WORD 32758 + .WORD 32759 + .WORD 32760 + .WORD 32761 + .WORD 32762 + .WORD 32763 + .WORD 32764 + .WORD 32765 + .WORD 32766 + .WORD 32767 + .WORD 32768 + .WORD 32769 + .WORD 32770 + .WORD 32771 + .WORD 32772 + .WORD 32773 + .WORD 32774 + .WORD 32775 + .WORD 32776 + .WORD 32777 + .WORD 32778 + .WORD 32779 + .WORD 40929 + .WORD 40930 + .WORD 40931 + .WORD 40932 + .WORD 40933 + .WORD 40934 + .WORD 40935 + .WORD 40936 + .WORD 40937 + .WORD 40938 + .WORD 40939 + .WORD 40940 + .WORD 40941 + .WORD 40942 + .WORD 40943 + .WORD 40944 + .WORD 40945 + .WORD 40946 + .WORD 40947 + .WORD 40948 + .WORD 40949 + .WORD 40950 + .WORD 40951 + .WORD 40952 + .WORD 40953 + .WORD 40954 + .WORD 40955 + .WORD 40956 + .WORD 40957 + .WORD 40958 + .WORD 40959 + .WORD 40960 + .WORD 40961 + .WORD 40962 + .WORD 40963 + .WORD 40964 + .WORD 40965 + .WORD 40966 + .WORD 40967 + .WORD 40968 + .WORD 40969 + .WORD 40970 + .WORD 40971 + .WORD 40972 + .WORD 40973 + .WORD 40974 + .WORD 40975 + .WORD 45025 + .WORD 45026 + .WORD 45027 + .WORD 45028 + .WORD 45029 + .WORD 45030 + .WORD 45031 + .WORD 45032 + .WORD 45033 + .WORD 45034 + .WORD 45035 + .WORD 45036 + .WORD 45037 + .WORD 45038 + .WORD 45039 + .WORD 45040 + .WORD 45041 + .WORD 45042 + .WORD 45043 + .WORD 45044 + .WORD 45045 + .WORD 45046 + .WORD 45047 + .WORD 45048 + .WORD 45049 + .WORD 45050 + .WORD 45051 + .WORD 45052 + .WORD 45053 + .WORD 45054 + .WORD 45055 + .WORD 45056 + .WORD 45057 + .WORD 45058 + .WORD 45059 + .WORD 45060 + .WORD 45061 + .WORD 45062 + .WORD 45063 + .WORD 45064 + .WORD 45065 + .WORD 45066 + .WORD 45067 + .WORD 45068 + .WORD 45069 + .WORD 45070 + .WORD 45071 + .WORD 49121 + .WORD 49122 + .WORD 49123 + .WORD 49124 + .WORD 49125 + .WORD 49126 + .WORD 49127 + .WORD 49128 + .WORD 49129 + .WORD 49130 + .WORD 49131 + .WORD 49132 + .WORD 49133 + .WORD 49134 + .WORD 49135 + .WORD 49136 + .WORD 49137 + .WORD 49138 + .WORD 49139 + .WORD 49140 + .WORD 49141 + .WORD 49142 + .WORD 49143 + .WORD 49144 + .WORD 49145 + .WORD 49146 + .WORD 49147 + .WORD 49148 + .WORD 49149 + .WORD 49150 + .WORD 49151 + .WORD 49152 + .WORD 49153 + .WORD 49154 + .WORD 49155 + .WORD 49156 + .WORD 49157 + .WORD 49158 + .WORD 49159 + .WORD 49160 + .WORD 49161 + .WORD 49162 + .WORD 49163 + .WORD 49164 + .WORD 49165 + .WORD 49166 + .WORD 49167 + .WORD 53217 + .WORD 53218 + .WORD 53219 + .WORD 53220 + .WORD 53221 + .WORD 53222 + .WORD 53223 + .WORD 53224 + .WORD 53225 + .WORD 53226 + .WORD 53227 + .WORD 53228 + .WORD 53229 + .WORD 53230 + .WORD 53231 + .WORD 53232 + .WORD 53233 + .WORD 53234 + .WORD 53235 + .WORD 53236 + .WORD 53237 + .WORD 53238 + .WORD 53239 + .WORD 53240 + .WORD 53241 + .WORD 53242 + .WORD 53243 + .WORD 53244 + .WORD 53245 + .WORD 53246 + .WORD 53247 + .WORD 53248 + .WORD 53249 + .WORD 53250 + .WORD 53251 + .WORD 53252 + .WORD 53253 + .WORD 53254 + .WORD 53255 + .WORD 53256 + .WORD 53257 + .WORD 53258 + .WORD 53259 + .WORD 53260 + .WORD 53261 + .WORD 53262 + .WORD 53263 + .WORD 57313 + .WORD 57314 + .WORD 57315 + .WORD 57316 + .WORD 57317 + .WORD 57318 + .WORD 57319 + .WORD 57320 + .WORD 57321 + .WORD 57322 + .WORD 57323 + .WORD 57324 + .WORD 57325 + .WORD 57326 + .WORD 57327 + .WORD 57328 + .WORD 57329 + .WORD 57330 + .WORD 57331 + .WORD 57332 + .WORD 57333 + .WORD 57334 + .WORD 57335 + .WORD 57336 + .WORD 57337 + .WORD 57338 + .WORD 57339 + .WORD 57340 + .WORD 57341 + .WORD 57342 + .WORD 57343 + .WORD 57344 + .WORD 57345 + .WORD 57346 + .WORD 57347 + .WORD 57348 + .WORD 57349 + .WORD 57350 + .WORD 57351 + .WORD 57352 + .WORD 57353 + .WORD 57354 + .WORD 57355 + .WORD 57356 + .WORD 57357 + .WORD 57358 + .WORD 57359 + .WORD 61409 + .WORD 61410 + .WORD 61411 + .WORD 61412 + .WORD 61413 + .WORD 61414 + .WORD 61415 + .WORD 61416 + .WORD 61417 + .WORD 61418 + .WORD 61419 + .WORD 61420 + .WORD 61421 + .WORD 61422 + .WORD 61423 + .WORD 61424 + .WORD 61425 + .WORD 61426 + .WORD 61427 + .WORD 61428 + .WORD 61429 + .WORD 61430 + .WORD 61431 + .WORD 61432 + .WORD 61433 + .WORD 61434 + .WORD 61435 + .WORD 61436 + .WORD 61437 + .WORD 61438 + .WORD 61439 + .WORD 61440 + .WORD 61441 + .WORD 61442 + .WORD 61443 + .WORD 61444 + .WORD 61445 + .WORD 61446 + .WORD 61447 + .WORD 61448 + .WORD 61449 + .WORD 61450 + .WORD 61451 + .WORD 61452 + .WORD 61453 + .WORD 61454 + .WORD 61455 + .WORD 65505 + .WORD 65506 + .WORD 65507 + .WORD 65508 + .WORD 65509 + .WORD 65510 + .WORD 65511 + .WORD 65512 + .WORD 65513 + .WORD 65514 + .WORD 65515 + .WORD 65516 + .WORD 65517 + .WORD 65518 + .WORD 65519 + .WORD 65520 + .WORD 65521 + .WORD 65522 + .WORD 65523 + .WORD 65524 + .WORD 65525 + .WORD 65526 + .WORD 65527 + .WORD 65528 + .WORD 65529 + .WORD 65530 + .WORD 65531 + .WORD 65532 + .WORD 65533 + .WORD 65534 + .WORD 65535 - ; lower case pseudo-op - .word 0 - .word 1 - .word 2 - .word 3 - .word 4 - .word 5 - .word 6 - .word 7 - .word 8 - .word 9 - .word 10 - .word 11 - .word 12 - .word 13 - .word 14 - .word 15 - .word 16 - .word 17 - .word 18 - .word 19 - .word 112 - .word 113 - .word 114 - .word 115 - .word 116 - .word 117 - .word 118 - .word 119 - .word 120 - .word 121 - .word 122 - .word 123 - .word 124 - .word 125 - .word 126 - .word 127 - .word 128 - .word 129 - .word 130 - .word 131 - .word 132 - .word 133 - .word 134 - .word 240 - .word 241 - .word 242 - .word 243 - .word 244 - .word 245 - .word 246 - .word 247 - .word 248 - .word 249 - .word 250 - .word 251 - .word 252 - .word 253 - .word 254 - .word 255 - .word 256 - .word 257 - .word 258 - .word 259 - .word 4050 - .word 4051 - .word 4052 - .word 4053 - .word 4054 - .word 4055 - .word 4056 - .word 4057 - .word 4058 - .word 4059 - .word 4060 - .word 4061 - .word 4062 - .word 4063 - .word 4064 - .word 4065 - .word 4066 - .word 4067 - .word 4068 - .word 4069 - .word 4070 - .word 4071 - .word 4072 - .word 4073 - .word 4074 - .word 4075 - .word 4076 - .word 4077 - .word 4078 - .word 4079 - .word 4080 - .word 4081 - .word 4082 - .word 4083 - .word 4084 - .word 4085 - .word 4086 - .word 4087 - .word 4088 - .word 4089 - .word 4090 - .word 4091 - .word 4092 - .word 4093 - .word 4094 - .word 4095 - .word 4096 - .word 4097 - .word 4098 - .word 4099 - .word 4100 - .word 4101 - .word 4102 - .word 4103 - .word 4104 - .word 32752 - .word 32753 - .word 32754 - .word 32755 - .word 32756 - .word 32757 - .word 32758 - .word 32759 - .word 32760 - .word 32761 - .word 32762 - .word 32763 - .word 32764 - .word 32765 - .word 32766 - .word 32767 - .word 32768 - .word 32769 - .word 32770 - .word 32771 - .word 32772 - .word 32773 - .word 32774 - .word 32775 - .word 32776 - .word 32777 - .word 32778 - .word 32779 - .word 40929 - .word 40930 - .word 40931 - .word 40932 - .word 40933 - .word 40934 - .word 40935 - .word 40936 - .word 40937 - .word 40938 - .word 40939 - .word 40940 - .word 40941 - .word 40942 - .word 40943 - .word 40944 - .word 40945 - .word 40946 - .word 40947 - .word 40948 - .word 40949 - .word 40950 - .word 40951 - .word 40952 - .word 40953 - .word 40954 - .word 40955 - .word 40956 - .word 40957 - .word 40958 - .word 40959 - .word 40960 - .word 40961 - .word 40962 - .word 40963 - .word 40964 - .word 40965 - .word 40966 - .word 40967 - .word 40968 - .word 40969 - .word 40970 - .word 40971 - .word 40972 - .word 40973 - .word 40974 - .word 40975 - .word 45025 - .word 45026 - .word 45027 - .word 45028 - .word 45029 - .word 45030 - .word 45031 - .word 45032 - .word 45033 - .word 45034 - .word 45035 - .word 45036 - .word 45037 - .word 45038 - .word 45039 - .word 45040 - .word 45041 - .word 45042 - .word 45043 - .word 45044 - .word 45045 - .word 45046 - .word 45047 - .word 45048 - .word 45049 - .word 45050 - .word 45051 - .word 45052 - .word 45053 - .word 45054 - .word 45055 - .word 45056 - .word 45057 - .word 45058 - .word 45059 - .word 45060 - .word 45061 - .word 45062 - .word 45063 - .word 45064 - .word 45065 - .word 45066 - .word 45067 - .word 45068 - .word 45069 - .word 45070 - .word 45071 - .word 49121 - .word 49122 - .word 49123 - .word 49124 - .word 49125 - .word 49126 - .word 49127 - .word 49128 - .word 49129 - .word 49130 - .word 49131 - .word 49132 - .word 49133 - .word 49134 - .word 49135 - .word 49136 - .word 49137 - .word 49138 - .word 49139 - .word 49140 - .word 49141 - .word 49142 - .word 49143 - .word 49144 - .word 49145 - .word 49146 - .word 49147 - .word 49148 - .word 49149 - .word 49150 - .word 49151 - .word 49152 - .word 49153 - .word 49154 - .word 49155 - .word 49156 - .word 49157 - .word 49158 - .word 49159 - .word 49160 - .word 49161 - .word 49162 - .word 49163 - .word 49164 - .word 49165 - .word 49166 - .word 49167 - .word 53217 - .word 53218 - .word 53219 - .word 53220 - .word 53221 - .word 53222 - .word 53223 - .word 53224 - .word 53225 - .word 53226 - .word 53227 - .word 53228 - .word 53229 - .word 53230 - .word 53231 - .word 53232 - .word 53233 - .word 53234 - .word 53235 - .word 53236 - .word 53237 - .word 53238 - .word 53239 - .word 53240 - .word 53241 - .word 53242 - .word 53243 - .word 53244 - .word 53245 - .word 53246 - .word 53247 - .word 53248 - .word 53249 - .word 53250 - .word 53251 - .word 53252 - .word 53253 - .word 53254 - .word 53255 - .word 53256 - .word 53257 - .word 53258 - .word 53259 - .word 53260 - .word 53261 - .word 53262 - .word 53263 - .word 57313 - .word 57314 - .word 57315 - .word 57316 - .word 57317 - .word 57318 - .word 57319 - .word 57320 - .word 57321 - .word 57322 - .word 57323 - .word 57324 - .word 57325 - .word 57326 - .word 57327 - .word 57328 - .word 57329 - .word 57330 - .word 57331 - .word 57332 - .word 57333 - .word 57334 - .word 57335 - .word 57336 - .word 57337 - .word 57338 - .word 57339 - .word 57340 - .word 57341 - .word 57342 - .word 57343 - .word 57344 - .word 57345 - .word 57346 - .word 57347 - .word 57348 - .word 57349 - .word 57350 - .word 57351 - .word 57352 - .word 57353 - .word 57354 - .word 57355 - .word 57356 - .word 57357 - .word 57358 - .word 57359 - .word 61409 - .word 61410 - .word 61411 - .word 61412 - .word 61413 - .word 61414 - .word 61415 - .word 61416 - .word 61417 - .word 61418 - .word 61419 - .word 61420 - .word 61421 - .word 61422 - .word 61423 - .word 61424 - .word 61425 - .word 61426 - .word 61427 - .word 61428 - .word 61429 - .word 61430 - .word 61431 - .word 61432 - .word 61433 - .word 61434 - .word 61435 - .word 61436 - .word 61437 - .word 61438 - .word 61439 - .word 61440 - .word 61441 - .word 61442 - .word 61443 - .word 61444 - .word 61445 - .word 61446 - .word 61447 - .word 61448 - .word 61449 - .word 61450 - .word 61451 - .word 61452 - .word 61453 - .word 61454 - .word 61455 - .word 65505 - .word 65506 - .word 65507 - .word 65508 - .word 65509 - .word 65510 - .word 65511 - .word 65512 - .word 65513 - .word 65514 - .word 65515 - .word 65516 - .word 65517 - .word 65518 - .word 65519 - .word 65520 - .word 65521 - .word 65522 - .word 65523 - .word 65524 - .word 65525 - .word 65526 - .word 65527 - .word 65528 - .word 65529 - .word 65530 - .word 65531 - .word 65532 - .word 65533 - .word 65534 - .word 65535 + ; lower case pseudo-op + .word 0 + .word 1 + .word 2 + .word 3 + .word 4 + .word 5 + .word 6 + .word 7 + .word 8 + .word 9 + .word 10 + .word 11 + .word 12 + .word 13 + .word 14 + .word 15 + .word 16 + .word 17 + .word 18 + .word 19 + .word 112 + .word 113 + .word 114 + .word 115 + .word 116 + .word 117 + .word 118 + .word 119 + .word 120 + .word 121 + .word 122 + .word 123 + .word 124 + .word 125 + .word 126 + .word 127 + .word 128 + .word 129 + .word 130 + .word 131 + .word 132 + .word 133 + .word 134 + .word 240 + .word 241 + .word 242 + .word 243 + .word 244 + .word 245 + .word 246 + .word 247 + .word 248 + .word 249 + .word 250 + .word 251 + .word 252 + .word 253 + .word 254 + .word 255 + .word 256 + .word 257 + .word 258 + .word 259 + .word 4050 + .word 4051 + .word 4052 + .word 4053 + .word 4054 + .word 4055 + .word 4056 + .word 4057 + .word 4058 + .word 4059 + .word 4060 + .word 4061 + .word 4062 + .word 4063 + .word 4064 + .word 4065 + .word 4066 + .word 4067 + .word 4068 + .word 4069 + .word 4070 + .word 4071 + .word 4072 + .word 4073 + .word 4074 + .word 4075 + .word 4076 + .word 4077 + .word 4078 + .word 4079 + .word 4080 + .word 4081 + .word 4082 + .word 4083 + .word 4084 + .word 4085 + .word 4086 + .word 4087 + .word 4088 + .word 4089 + .word 4090 + .word 4091 + .word 4092 + .word 4093 + .word 4094 + .word 4095 + .word 4096 + .word 4097 + .word 4098 + .word 4099 + .word 4100 + .word 4101 + .word 4102 + .word 4103 + .word 4104 + .word 32752 + .word 32753 + .word 32754 + .word 32755 + .word 32756 + .word 32757 + .word 32758 + .word 32759 + .word 32760 + .word 32761 + .word 32762 + .word 32763 + .word 32764 + .word 32765 + .word 32766 + .word 32767 + .word 32768 + .word 32769 + .word 32770 + .word 32771 + .word 32772 + .word 32773 + .word 32774 + .word 32775 + .word 32776 + .word 32777 + .word 32778 + .word 32779 + .word 40929 + .word 40930 + .word 40931 + .word 40932 + .word 40933 + .word 40934 + .word 40935 + .word 40936 + .word 40937 + .word 40938 + .word 40939 + .word 40940 + .word 40941 + .word 40942 + .word 40943 + .word 40944 + .word 40945 + .word 40946 + .word 40947 + .word 40948 + .word 40949 + .word 40950 + .word 40951 + .word 40952 + .word 40953 + .word 40954 + .word 40955 + .word 40956 + .word 40957 + .word 40958 + .word 40959 + .word 40960 + .word 40961 + .word 40962 + .word 40963 + .word 40964 + .word 40965 + .word 40966 + .word 40967 + .word 40968 + .word 40969 + .word 40970 + .word 40971 + .word 40972 + .word 40973 + .word 40974 + .word 40975 + .word 45025 + .word 45026 + .word 45027 + .word 45028 + .word 45029 + .word 45030 + .word 45031 + .word 45032 + .word 45033 + .word 45034 + .word 45035 + .word 45036 + .word 45037 + .word 45038 + .word 45039 + .word 45040 + .word 45041 + .word 45042 + .word 45043 + .word 45044 + .word 45045 + .word 45046 + .word 45047 + .word 45048 + .word 45049 + .word 45050 + .word 45051 + .word 45052 + .word 45053 + .word 45054 + .word 45055 + .word 45056 + .word 45057 + .word 45058 + .word 45059 + .word 45060 + .word 45061 + .word 45062 + .word 45063 + .word 45064 + .word 45065 + .word 45066 + .word 45067 + .word 45068 + .word 45069 + .word 45070 + .word 45071 + .word 49121 + .word 49122 + .word 49123 + .word 49124 + .word 49125 + .word 49126 + .word 49127 + .word 49128 + .word 49129 + .word 49130 + .word 49131 + .word 49132 + .word 49133 + .word 49134 + .word 49135 + .word 49136 + .word 49137 + .word 49138 + .word 49139 + .word 49140 + .word 49141 + .word 49142 + .word 49143 + .word 49144 + .word 49145 + .word 49146 + .word 49147 + .word 49148 + .word 49149 + .word 49150 + .word 49151 + .word 49152 + .word 49153 + .word 49154 + .word 49155 + .word 49156 + .word 49157 + .word 49158 + .word 49159 + .word 49160 + .word 49161 + .word 49162 + .word 49163 + .word 49164 + .word 49165 + .word 49166 + .word 49167 + .word 53217 + .word 53218 + .word 53219 + .word 53220 + .word 53221 + .word 53222 + .word 53223 + .word 53224 + .word 53225 + .word 53226 + .word 53227 + .word 53228 + .word 53229 + .word 53230 + .word 53231 + .word 53232 + .word 53233 + .word 53234 + .word 53235 + .word 53236 + .word 53237 + .word 53238 + .word 53239 + .word 53240 + .word 53241 + .word 53242 + .word 53243 + .word 53244 + .word 53245 + .word 53246 + .word 53247 + .word 53248 + .word 53249 + .word 53250 + .word 53251 + .word 53252 + .word 53253 + .word 53254 + .word 53255 + .word 53256 + .word 53257 + .word 53258 + .word 53259 + .word 53260 + .word 53261 + .word 53262 + .word 53263 + .word 57313 + .word 57314 + .word 57315 + .word 57316 + .word 57317 + .word 57318 + .word 57319 + .word 57320 + .word 57321 + .word 57322 + .word 57323 + .word 57324 + .word 57325 + .word 57326 + .word 57327 + .word 57328 + .word 57329 + .word 57330 + .word 57331 + .word 57332 + .word 57333 + .word 57334 + .word 57335 + .word 57336 + .word 57337 + .word 57338 + .word 57339 + .word 57340 + .word 57341 + .word 57342 + .word 57343 + .word 57344 + .word 57345 + .word 57346 + .word 57347 + .word 57348 + .word 57349 + .word 57350 + .word 57351 + .word 57352 + .word 57353 + .word 57354 + .word 57355 + .word 57356 + .word 57357 + .word 57358 + .word 57359 + .word 61409 + .word 61410 + .word 61411 + .word 61412 + .word 61413 + .word 61414 + .word 61415 + .word 61416 + .word 61417 + .word 61418 + .word 61419 + .word 61420 + .word 61421 + .word 61422 + .word 61423 + .word 61424 + .word 61425 + .word 61426 + .word 61427 + .word 61428 + .word 61429 + .word 61430 + .word 61431 + .word 61432 + .word 61433 + .word 61434 + .word 61435 + .word 61436 + .word 61437 + .word 61438 + .word 61439 + .word 61440 + .word 61441 + .word 61442 + .word 61443 + .word 61444 + .word 61445 + .word 61446 + .word 61447 + .word 61448 + .word 61449 + .word 61450 + .word 61451 + .word 61452 + .word 61453 + .word 61454 + .word 61455 + .word 65505 + .word 65506 + .word 65507 + .word 65508 + .word 65509 + .word 65510 + .word 65511 + .word 65512 + .word 65513 + .word 65514 + .word 65515 + .word 65516 + .word 65517 + .word 65518 + .word 65519 + .word 65520 + .word 65521 + .word 65522 + .word 65523 + .word 65524 + .word 65525 + .word 65526 + .word 65527 + .word 65528 + .word 65529 + .word 65530 + .word 65531 + .word 65532 + .word 65533 + .word 65534 + .word 65535 - ; hex values - .word $0 - .word $1 - .word $2 - .word $3 - .word $4 - .word $5 - .word $6 - .word $7 - .word $8 - .word $9 - .word $a - .word $b - .word $c - .word $d - .word $e - .word $f - .word $10 - .word $11 - .word $12 - .word $13 - .word $70 - .word $71 - .word $72 - .word $73 - .word $74 - .word $75 - .word $76 - .word $77 - .word $78 - .word $79 - .word $7a - .word $7b - .word $7c - .word $7d - .word $7e - .word $7f - .word $80 - .word $81 - .word $82 - .word $83 - .word $84 - .word $85 - .word $86 - .word $f0 - .word $f1 - .word $f2 - .word $f3 - .word $f4 - .word $f5 - .word $f6 - .word $f7 - .word $f8 - .word $f9 - .word $fa - .word $fb - .word $fc - .word $fd - .word $fe - .word $ff - .word $100 - .word $101 - .word $102 - .word $103 - .word $fd2 - .word $fd3 - .word $fd4 - .word $fd5 - .word $fd6 - .word $fd7 - .word $fd8 - .word $fd9 - .word $fda - .word $fdb - .word $fdc - .word $fdd - .word $fde - .word $fdf - .word $fe0 - .word $fe1 - .word $fe2 - .word $fe3 - .word $fe4 - .word $fe5 - .word $fe6 - .word $fe7 - .word $fe8 - .word $fe9 - .word $fea - .word $feb - .word $fec - .word $fed - .word $fee - .word $fef - .word $ff0 - .word $ff1 - .word $ff2 - .word $ff3 - .word $ff4 - .word $ff5 - .word $ff6 - .word $ff7 - .word $ff8 - .word $ff9 - .word $ffa - .word $ffb - .word $ffc - .word $ffd - .word $ffe - .word $fff - .word $1000 - .word $1001 - .word $1002 - .word $1003 - .word $1004 - .word $1005 - .word $1006 - .word $1007 - .word $1008 - .word $7ff0 - .word $7ff1 - .word $7ff2 - .word $7ff3 - .word $7ff4 - .word $7ff5 - .word $7ff6 - .word $7ff7 - .word $7ff8 - .word $7ff9 - .word $7ffa - .word $7ffb - .word $7ffc - .word $7ffd - .word $7ffe - .word $7fff - .word $8000 - .word $8001 - .word $8002 - .word $8003 - .word $8004 - .word $8005 - .word $8006 - .word $8007 - .word $8008 - .word $8009 - .word $800a - .word $800b - .word $9fe1 - .word $9fe2 - .word $9fe3 - .word $9fe4 - .word $9fe5 - .word $9fe6 - .word $9fe7 - .word $9fe8 - .word $9fe9 - .word $9fea - .word $9feb - .word $9fec - .word $9fed - .word $9fee - .word $9fef - .word $9ff0 - .word $9ff1 - .word $9ff2 - .word $9ff3 - .word $9ff4 - .word $9ff5 - .word $9ff6 - .word $9ff7 - .word $9ff8 - .word $9ff9 - .word $9ffa - .word $9ffb - .word $9ffc - .word $9ffd - .word $9ffe - .word $9fff - .word $a000 - .word $a001 - .word $a002 - .word $a003 - .word $a004 - .word $a005 - .word $a006 - .word $a007 - .word $a008 - .word $a009 - .word $a00a - .word $a00b - .word $a00c - .word $a00d - .word $a00e - .word $a00f - .word $afe1 - .word $afe2 - .word $afe3 - .word $afe4 - .word $afe5 - .word $afe6 - .word $afe7 - .word $afe8 - .word $afe9 - .word $afea - .word $afeb - .word $afec - .word $afed - .word $afee - .word $afef - .word $aff0 - .word $aff1 - .word $aff2 - .word $aff3 - .word $aff4 - .word $aff5 - .word $aff6 - .word $aff7 - .word $aff8 - .word $aff9 - .word $affa - .word $affb - .word $affc - .word $affd - .word $affe - .word $afff - .word $b000 - .word $b001 - .word $b002 - .word $b003 - .word $b004 - .word $b005 - .word $b006 - .word $b007 - .word $b008 - .word $b009 - .word $b00a - .word $b00b - .word $b00c - .word $b00d - .word $b00e - .word $b00f - .word $bfe1 - .word $bfe2 - .word $bfe3 - .word $bfe4 - .word $bfe5 - .word $bfe6 - .word $bfe7 - .word $bfe8 - .word $bfe9 - .word $bfea - .word $bfeb - .word $bfec - .word $bfed - .word $bfee - .word $bfef - .word $bff0 - .word $bff1 - .word $bff2 - .word $bff3 - .word $bff4 - .word $bff5 - .word $bff6 - .word $bff7 - .word $bff8 - .word $bff9 - .word $bffa - .word $bffb - .word $bffc - .word $bffd - .word $bffe - .word $bfff - .word $c000 - .word $c001 - .word $c002 - .word $c003 - .word $c004 - .word $c005 - .word $c006 - .word $c007 - .word $c008 - .word $c009 - .word $c00a - .word $c00b - .word $c00c - .word $c00d - .word $c00e - .word $c00f - .word $cfe1 - .word $cfe2 - .word $cfe3 - .word $cfe4 - .word $cfe5 - .word $cfe6 - .word $cfe7 - .word $cfe8 - .word $cfe9 - .word $cfea - .word $cfeb - .word $cfec - .word $cfed - .word $cfee - .word $cfef - .word $cff0 - .word $cff1 - .word $cff2 - .word $cff3 - .word $cff4 - .word $cff5 - .word $cff6 - .word $cff7 - .word $cff8 - .word $cff9 - .word $cffa - .word $cffb - .word $cffc - .word $cffd - .word $cffe - .word $cfff - .word $d000 - .word $d001 - .word $d002 - .word $d003 - .word $d004 - .word $d005 - .word $d006 - .word $d007 - .word $d008 - .word $d009 - .word $d00a - .word $d00b - .word $d00c - .word $d00d - .word $d00e - .word $d00f - .word $dfe1 - .word $dfe2 - .word $dfe3 - .word $dfe4 - .word $dfe5 - .word $dfe6 - .word $dfe7 - .word $dfe8 - .word $dfe9 - .word $dfea - .word $dfeb - .word $dfec - .word $dfed - .word $dfee - .word $dfef - .word $dff0 - .word $dff1 - .word $dff2 - .word $dff3 - .word $dff4 - .word $dff5 - .word $dff6 - .word $dff7 - .word $dff8 - .word $dff9 - .word $dffa - .word $dffb - .word $dffc - .word $dffd - .word $dffe - .word $dfff - .word $e000 - .word $e001 - .word $e002 - .word $e003 - .word $e004 - .word $e005 - .word $e006 - .word $e007 - .word $e008 - .word $e009 - .word $e00a - .word $e00b - .word $e00c - .word $e00d - .word $e00e - .word $e00f - .word $efe1 - .word $efe2 - .word $efe3 - .word $efe4 - .word $efe5 - .word $efe6 - .word $efe7 - .word $efe8 - .word $efe9 - .word $efea - .word $efeb - .word $efec - .word $efed - .word $efee - .word $efef - .word $eff0 - .word $eff1 - .word $eff2 - .word $eff3 - .word $eff4 - .word $eff5 - .word $eff6 - .word $eff7 - .word $eff8 - .word $eff9 - .word $effa - .word $effb - .word $effc - .word $effd - .word $effe - .word $efff - .word $f000 - .word $f001 - .word $f002 - .word $f003 - .word $f004 - .word $f005 - .word $f006 - .word $f007 - .word $f008 - .word $f009 - .word $f00a - .word $f00b - .word $f00c - .word $f00d - .word $f00e - .word $f00f - .word $ffe1 - .word $ffe2 - .word $ffe3 - .word $ffe4 - .word $ffe5 - .word $ffe6 - .word $ffe7 - .word $ffe8 - .word $ffe9 - .word $ffea - .word $ffeb - .word $ffec - .word $ffed - .word $ffee - .word $ffef - .word $fff0 - .word $fff1 - .word $fff2 - .word $fff3 - .word $fff4 - .word $fff5 - .word $fff6 - .word $fff7 - .word $fff8 - .word $fff9 - .word $fffa - .word $fffb - .word $fffc - .word $fffd - .word $fffe - .word $ffff + ; hex values + .word $0 + .word $1 + .word $2 + .word $3 + .word $4 + .word $5 + .word $6 + .word $7 + .word $8 + .word $9 + .word $a + .word $b + .word $c + .word $d + .word $e + .word $f + .word $10 + .word $11 + .word $12 + .word $13 + .word $70 + .word $71 + .word $72 + .word $73 + .word $74 + .word $75 + .word $76 + .word $77 + .word $78 + .word $79 + .word $7a + .word $7b + .word $7c + .word $7d + .word $7e + .word $7f + .word $80 + .word $81 + .word $82 + .word $83 + .word $84 + .word $85 + .word $86 + .word $f0 + .word $f1 + .word $f2 + .word $f3 + .word $f4 + .word $f5 + .word $f6 + .word $f7 + .word $f8 + .word $f9 + .word $fa + .word $fb + .word $fc + .word $fd + .word $fe + .word $ff + .word $100 + .word $101 + .word $102 + .word $103 + .word $fd2 + .word $fd3 + .word $fd4 + .word $fd5 + .word $fd6 + .word $fd7 + .word $fd8 + .word $fd9 + .word $fda + .word $fdb + .word $fdc + .word $fdd + .word $fde + .word $fdf + .word $fe0 + .word $fe1 + .word $fe2 + .word $fe3 + .word $fe4 + .word $fe5 + .word $fe6 + .word $fe7 + .word $fe8 + .word $fe9 + .word $fea + .word $feb + .word $fec + .word $fed + .word $fee + .word $fef + .word $ff0 + .word $ff1 + .word $ff2 + .word $ff3 + .word $ff4 + .word $ff5 + .word $ff6 + .word $ff7 + .word $ff8 + .word $ff9 + .word $ffa + .word $ffb + .word $ffc + .word $ffd + .word $ffe + .word $fff + .word $1000 + .word $1001 + .word $1002 + .word $1003 + .word $1004 + .word $1005 + .word $1006 + .word $1007 + .word $1008 + .word $7ff0 + .word $7ff1 + .word $7ff2 + .word $7ff3 + .word $7ff4 + .word $7ff5 + .word $7ff6 + .word $7ff7 + .word $7ff8 + .word $7ff9 + .word $7ffa + .word $7ffb + .word $7ffc + .word $7ffd + .word $7ffe + .word $7fff + .word $8000 + .word $8001 + .word $8002 + .word $8003 + .word $8004 + .word $8005 + .word $8006 + .word $8007 + .word $8008 + .word $8009 + .word $800a + .word $800b + .word $9fe1 + .word $9fe2 + .word $9fe3 + .word $9fe4 + .word $9fe5 + .word $9fe6 + .word $9fe7 + .word $9fe8 + .word $9fe9 + .word $9fea + .word $9feb + .word $9fec + .word $9fed + .word $9fee + .word $9fef + .word $9ff0 + .word $9ff1 + .word $9ff2 + .word $9ff3 + .word $9ff4 + .word $9ff5 + .word $9ff6 + .word $9ff7 + .word $9ff8 + .word $9ff9 + .word $9ffa + .word $9ffb + .word $9ffc + .word $9ffd + .word $9ffe + .word $9fff + .word $a000 + .word $a001 + .word $a002 + .word $a003 + .word $a004 + .word $a005 + .word $a006 + .word $a007 + .word $a008 + .word $a009 + .word $a00a + .word $a00b + .word $a00c + .word $a00d + .word $a00e + .word $a00f + .word $afe1 + .word $afe2 + .word $afe3 + .word $afe4 + .word $afe5 + .word $afe6 + .word $afe7 + .word $afe8 + .word $afe9 + .word $afea + .word $afeb + .word $afec + .word $afed + .word $afee + .word $afef + .word $aff0 + .word $aff1 + .word $aff2 + .word $aff3 + .word $aff4 + .word $aff5 + .word $aff6 + .word $aff7 + .word $aff8 + .word $aff9 + .word $affa + .word $affb + .word $affc + .word $affd + .word $affe + .word $afff + .word $b000 + .word $b001 + .word $b002 + .word $b003 + .word $b004 + .word $b005 + .word $b006 + .word $b007 + .word $b008 + .word $b009 + .word $b00a + .word $b00b + .word $b00c + .word $b00d + .word $b00e + .word $b00f + .word $bfe1 + .word $bfe2 + .word $bfe3 + .word $bfe4 + .word $bfe5 + .word $bfe6 + .word $bfe7 + .word $bfe8 + .word $bfe9 + .word $bfea + .word $bfeb + .word $bfec + .word $bfed + .word $bfee + .word $bfef + .word $bff0 + .word $bff1 + .word $bff2 + .word $bff3 + .word $bff4 + .word $bff5 + .word $bff6 + .word $bff7 + .word $bff8 + .word $bff9 + .word $bffa + .word $bffb + .word $bffc + .word $bffd + .word $bffe + .word $bfff + .word $c000 + .word $c001 + .word $c002 + .word $c003 + .word $c004 + .word $c005 + .word $c006 + .word $c007 + .word $c008 + .word $c009 + .word $c00a + .word $c00b + .word $c00c + .word $c00d + .word $c00e + .word $c00f + .word $cfe1 + .word $cfe2 + .word $cfe3 + .word $cfe4 + .word $cfe5 + .word $cfe6 + .word $cfe7 + .word $cfe8 + .word $cfe9 + .word $cfea + .word $cfeb + .word $cfec + .word $cfed + .word $cfee + .word $cfef + .word $cff0 + .word $cff1 + .word $cff2 + .word $cff3 + .word $cff4 + .word $cff5 + .word $cff6 + .word $cff7 + .word $cff8 + .word $cff9 + .word $cffa + .word $cffb + .word $cffc + .word $cffd + .word $cffe + .word $cfff + .word $d000 + .word $d001 + .word $d002 + .word $d003 + .word $d004 + .word $d005 + .word $d006 + .word $d007 + .word $d008 + .word $d009 + .word $d00a + .word $d00b + .word $d00c + .word $d00d + .word $d00e + .word $d00f + .word $dfe1 + .word $dfe2 + .word $dfe3 + .word $dfe4 + .word $dfe5 + .word $dfe6 + .word $dfe7 + .word $dfe8 + .word $dfe9 + .word $dfea + .word $dfeb + .word $dfec + .word $dfed + .word $dfee + .word $dfef + .word $dff0 + .word $dff1 + .word $dff2 + .word $dff3 + .word $dff4 + .word $dff5 + .word $dff6 + .word $dff7 + .word $dff8 + .word $dff9 + .word $dffa + .word $dffb + .word $dffc + .word $dffd + .word $dffe + .word $dfff + .word $e000 + .word $e001 + .word $e002 + .word $e003 + .word $e004 + .word $e005 + .word $e006 + .word $e007 + .word $e008 + .word $e009 + .word $e00a + .word $e00b + .word $e00c + .word $e00d + .word $e00e + .word $e00f + .word $efe1 + .word $efe2 + .word $efe3 + .word $efe4 + .word $efe5 + .word $efe6 + .word $efe7 + .word $efe8 + .word $efe9 + .word $efea + .word $efeb + .word $efec + .word $efed + .word $efee + .word $efef + .word $eff0 + .word $eff1 + .word $eff2 + .word $eff3 + .word $eff4 + .word $eff5 + .word $eff6 + .word $eff7 + .word $eff8 + .word $eff9 + .word $effa + .word $effb + .word $effc + .word $effd + .word $effe + .word $efff + .word $f000 + .word $f001 + .word $f002 + .word $f003 + .word $f004 + .word $f005 + .word $f006 + .word $f007 + .word $f008 + .word $f009 + .word $f00a + .word $f00b + .word $f00c + .word $f00d + .word $f00e + .word $f00f + .word $ffe1 + .word $ffe2 + .word $ffe3 + .word $ffe4 + .word $ffe5 + .word $ffe6 + .word $ffe7 + .word $ffe8 + .word $ffe9 + .word $ffea + .word $ffeb + .word $ffec + .word $ffed + .word $ffee + .word $ffef + .word $fff0 + .word $fff1 + .word $fff2 + .word $fff3 + .word $fff4 + .word $fff5 + .word $fff6 + .word $fff7 + .word $fff8 + .word $fff9 + .word $fffa + .word $fffb + .word $fffc + .word $fffd + .word $fffe + .word $ffff - ; hex values, uppercase - .word $0 - .word $1 - .word $2 - .word $3 - .word $4 - .word $5 - .word $6 - .word $7 - .word $8 - .word $9 - .word $A - .word $B - .word $C - .word $D - .word $E - .word $F - .word $10 - .word $11 - .word $12 - .word $13 - .word $70 - .word $71 - .word $72 - .word $73 - .word $74 - .word $75 - .word $76 - .word $77 - .word $78 - .word $79 - .word $7A - .word $7B - .word $7C - .word $7D - .word $7E - .word $7F - .word $80 - .word $81 - .word $82 - .word $83 - .word $84 - .word $85 - .word $86 - .word $F0 - .word $F1 - .word $F2 - .word $F3 - .word $F4 - .word $F5 - .word $F6 - .word $F7 - .word $F8 - .word $F9 - .word $FA - .word $FB - .word $FC - .word $FD - .word $FE - .word $FF - .word $100 - .word $101 - .word $102 - .word $103 - .word $FD2 - .word $FD3 - .word $FD4 - .word $FD5 - .word $FD6 - .word $FD7 - .word $FD8 - .word $FD9 - .word $FDA - .word $FDB - .word $FDC - .word $FDD - .word $FDE - .word $FDF - .word $FE0 - .word $FE1 - .word $FE2 - .word $FE3 - .word $FE4 - .word $FE5 - .word $FE6 - .word $FE7 - .word $FE8 - .word $FE9 - .word $FEA - .word $FEB - .word $FEC - .word $FED - .word $FEE - .word $FEF - .word $FF0 - .word $FF1 - .word $FF2 - .word $FF3 - .word $FF4 - .word $FF5 - .word $FF6 - .word $FF7 - .word $FF8 - .word $FF9 - .word $FFA - .word $FFB - .word $FFC - .word $FFD - .word $FFE - .word $FFF - .word $1000 - .word $1001 - .word $1002 - .word $1003 - .word $1004 - .word $1005 - .word $1006 - .word $1007 - .word $1008 - .word $7FF0 - .word $7FF1 - .word $7FF2 - .word $7FF3 - .word $7FF4 - .word $7FF5 - .word $7FF6 - .word $7FF7 - .word $7FF8 - .word $7FF9 - .word $7FFA - .word $7FFB - .word $7FFC - .word $7FFD - .word $7FFE - .word $7FFF - .word $8000 - .word $8001 - .word $8002 - .word $8003 - .word $8004 - .word $8005 - .word $8006 - .word $8007 - .word $8008 - .word $8009 - .word $800A - .word $800B - .word $9FE1 - .word $9FE2 - .word $9FE3 - .word $9FE4 - .word $9FE5 - .word $9FE6 - .word $9FE7 - .word $9FE8 - .word $9FE9 - .word $9FEA - .word $9FEB - .word $9FEC - .word $9FED - .word $9FEE - .word $9FEF - .word $9FF0 - .word $9FF1 - .word $9FF2 - .word $9FF3 - .word $9FF4 - .word $9FF5 - .word $9FF6 - .word $9FF7 - .word $9FF8 - .word $9FF9 - .word $9FFA - .word $9FFB - .word $9FFC - .word $9FFD - .word $9FFE - .word $9FFF - .word $A000 - .word $A001 - .word $A002 - .word $A003 - .word $A004 - .word $A005 - .word $A006 - .word $A007 - .word $A008 - .word $A009 - .word $A00A - .word $A00B - .word $A00C - .word $A00D - .word $A00E - .word $A00F - .word $AFE1 - .word $AFE2 - .word $AFE3 - .word $AFE4 - .word $AFE5 - .word $AFE6 - .word $AFE7 - .word $AFE8 - .word $AFE9 - .word $AFEA - .word $AFEB - .word $AFEC - .word $AFED - .word $AFEE - .word $AFEF - .word $AFF0 - .word $AFF1 - .word $AFF2 - .word $AFF3 - .word $AFF4 - .word $AFF5 - .word $AFF6 - .word $AFF7 - .word $AFF8 - .word $AFF9 - .word $AFFA - .word $AFFB - .word $AFFC - .word $AFFD - .word $AFFE - .word $AFFF - .word $B000 - .word $B001 - .word $B002 - .word $B003 - .word $B004 - .word $B005 - .word $B006 - .word $B007 - .word $B008 - .word $B009 - .word $B00A - .word $B00B - .word $B00C - .word $B00D - .word $B00E - .word $B00F - .word $BFE1 - .word $BFE2 - .word $BFE3 - .word $BFE4 - .word $BFE5 - .word $BFE6 - .word $BFE7 - .word $BFE8 - .word $BFE9 - .word $BFEA - .word $BFEB - .word $BFEC - .word $BFED - .word $BFEE - .word $BFEF - .word $BFF0 - .word $BFF1 - .word $BFF2 - .word $BFF3 - .word $BFF4 - .word $BFF5 - .word $BFF6 - .word $BFF7 - .word $BFF8 - .word $BFF9 - .word $BFFA - .word $BFFB - .word $BFFC - .word $BFFD - .word $BFFE - .word $BFFF - .word $C000 - .word $C001 - .word $C002 - .word $C003 - .word $C004 - .word $C005 - .word $C006 - .word $C007 - .word $C008 - .word $C009 - .word $C00A - .word $C00B - .word $C00C - .word $C00D - .word $C00E - .word $C00F - .word $CFE1 - .word $CFE2 - .word $CFE3 - .word $CFE4 - .word $CFE5 - .word $CFE6 - .word $CFE7 - .word $CFE8 - .word $CFE9 - .word $CFEA - .word $CFEB - .word $CFEC - .word $CFED - .word $CFEE - .word $CFEF - .word $CFF0 - .word $CFF1 - .word $CFF2 - .word $CFF3 - .word $CFF4 - .word $CFF5 - .word $CFF6 - .word $CFF7 - .word $CFF8 - .word $CFF9 - .word $CFFA - .word $CFFB - .word $CFFC - .word $CFFD - .word $CFFE - .word $CFFF - .word $D000 - .word $D001 - .word $D002 - .word $D003 - .word $D004 - .word $D005 - .word $D006 - .word $D007 - .word $D008 - .word $D009 - .word $D00A - .word $D00B - .word $D00C - .word $D00D - .word $D00E - .word $D00F - .word $DFE1 - .word $DFE2 - .word $DFE3 - .word $DFE4 - .word $DFE5 - .word $DFE6 - .word $DFE7 - .word $DFE8 - .word $DFE9 - .word $DFEA - .word $DFEB - .word $DFEC - .word $DFED - .word $DFEE - .word $DFEF - .word $DFF0 - .word $DFF1 - .word $DFF2 - .word $DFF3 - .word $DFF4 - .word $DFF5 - .word $DFF6 - .word $DFF7 - .word $DFF8 - .word $DFF9 - .word $DFFA - .word $DFFB - .word $DFFC - .word $DFFD - .word $DFFE - .word $DFFF - .word $E000 - .word $E001 - .word $E002 - .word $E003 - .word $E004 - .word $E005 - .word $E006 - .word $E007 - .word $E008 - .word $E009 - .word $E00A - .word $E00B - .word $E00C - .word $E00D - .word $E00E - .word $E00F - .word $EFE1 - .word $EFE2 - .word $EFE3 - .word $EFE4 - .word $EFE5 - .word $EFE6 - .word $EFE7 - .word $EFE8 - .word $EFE9 - .word $EFEA - .word $EFEB - .word $EFEC - .word $EFED - .word $EFEE - .word $EFEF - .word $EFF0 - .word $EFF1 - .word $EFF2 - .word $EFF3 - .word $EFF4 - .word $EFF5 - .word $EFF6 - .word $EFF7 - .word $EFF8 - .word $EFF9 - .word $EFFA - .word $EFFB - .word $EFFC - .word $EFFD - .word $EFFE - .word $EFFF - .word $F000 - .word $F001 - .word $F002 - .word $F003 - .word $F004 - .word $F005 - .word $F006 - .word $F007 - .word $F008 - .word $F009 - .word $F00A - .word $F00B - .word $F00C - .word $F00D - .word $F00E - .word $F00F - .word $FFE1 - .word $FFE2 - .word $FFE3 - .word $FFE4 - .word $FFE5 - .word $FFE6 - .word $FFE7 - .word $FFE8 - .word $FFE9 - .word $FFEA - .word $FFEB - .word $FFEC - .word $FFED - .word $FFEE - .word $FFEF - .word $FFF0 - .word $FFF1 - .word $FFF2 - .word $FFF3 - .word $FFF4 - .word $FFF5 - .word $FFF6 - .word $FFF7 - .word $FFF8 - .word $FFF9 - .word $FFFA - .word $FFFB - .word $FFFC - .word $FFFD - .word $FFFE - .word $FFFF + ; hex values, uppercase + .word $0 + .word $1 + .word $2 + .word $3 + .word $4 + .word $5 + .word $6 + .word $7 + .word $8 + .word $9 + .word $A + .word $B + .word $C + .word $D + .word $E + .word $F + .word $10 + .word $11 + .word $12 + .word $13 + .word $70 + .word $71 + .word $72 + .word $73 + .word $74 + .word $75 + .word $76 + .word $77 + .word $78 + .word $79 + .word $7A + .word $7B + .word $7C + .word $7D + .word $7E + .word $7F + .word $80 + .word $81 + .word $82 + .word $83 + .word $84 + .word $85 + .word $86 + .word $F0 + .word $F1 + .word $F2 + .word $F3 + .word $F4 + .word $F5 + .word $F6 + .word $F7 + .word $F8 + .word $F9 + .word $FA + .word $FB + .word $FC + .word $FD + .word $FE + .word $FF + .word $100 + .word $101 + .word $102 + .word $103 + .word $FD2 + .word $FD3 + .word $FD4 + .word $FD5 + .word $FD6 + .word $FD7 + .word $FD8 + .word $FD9 + .word $FDA + .word $FDB + .word $FDC + .word $FDD + .word $FDE + .word $FDF + .word $FE0 + .word $FE1 + .word $FE2 + .word $FE3 + .word $FE4 + .word $FE5 + .word $FE6 + .word $FE7 + .word $FE8 + .word $FE9 + .word $FEA + .word $FEB + .word $FEC + .word $FED + .word $FEE + .word $FEF + .word $FF0 + .word $FF1 + .word $FF2 + .word $FF3 + .word $FF4 + .word $FF5 + .word $FF6 + .word $FF7 + .word $FF8 + .word $FF9 + .word $FFA + .word $FFB + .word $FFC + .word $FFD + .word $FFE + .word $FFF + .word $1000 + .word $1001 + .word $1002 + .word $1003 + .word $1004 + .word $1005 + .word $1006 + .word $1007 + .word $1008 + .word $7FF0 + .word $7FF1 + .word $7FF2 + .word $7FF3 + .word $7FF4 + .word $7FF5 + .word $7FF6 + .word $7FF7 + .word $7FF8 + .word $7FF9 + .word $7FFA + .word $7FFB + .word $7FFC + .word $7FFD + .word $7FFE + .word $7FFF + .word $8000 + .word $8001 + .word $8002 + .word $8003 + .word $8004 + .word $8005 + .word $8006 + .word $8007 + .word $8008 + .word $8009 + .word $800A + .word $800B + .word $9FE1 + .word $9FE2 + .word $9FE3 + .word $9FE4 + .word $9FE5 + .word $9FE6 + .word $9FE7 + .word $9FE8 + .word $9FE9 + .word $9FEA + .word $9FEB + .word $9FEC + .word $9FED + .word $9FEE + .word $9FEF + .word $9FF0 + .word $9FF1 + .word $9FF2 + .word $9FF3 + .word $9FF4 + .word $9FF5 + .word $9FF6 + .word $9FF7 + .word $9FF8 + .word $9FF9 + .word $9FFA + .word $9FFB + .word $9FFC + .word $9FFD + .word $9FFE + .word $9FFF + .word $A000 + .word $A001 + .word $A002 + .word $A003 + .word $A004 + .word $A005 + .word $A006 + .word $A007 + .word $A008 + .word $A009 + .word $A00A + .word $A00B + .word $A00C + .word $A00D + .word $A00E + .word $A00F + .word $AFE1 + .word $AFE2 + .word $AFE3 + .word $AFE4 + .word $AFE5 + .word $AFE6 + .word $AFE7 + .word $AFE8 + .word $AFE9 + .word $AFEA + .word $AFEB + .word $AFEC + .word $AFED + .word $AFEE + .word $AFEF + .word $AFF0 + .word $AFF1 + .word $AFF2 + .word $AFF3 + .word $AFF4 + .word $AFF5 + .word $AFF6 + .word $AFF7 + .word $AFF8 + .word $AFF9 + .word $AFFA + .word $AFFB + .word $AFFC + .word $AFFD + .word $AFFE + .word $AFFF + .word $B000 + .word $B001 + .word $B002 + .word $B003 + .word $B004 + .word $B005 + .word $B006 + .word $B007 + .word $B008 + .word $B009 + .word $B00A + .word $B00B + .word $B00C + .word $B00D + .word $B00E + .word $B00F + .word $BFE1 + .word $BFE2 + .word $BFE3 + .word $BFE4 + .word $BFE5 + .word $BFE6 + .word $BFE7 + .word $BFE8 + .word $BFE9 + .word $BFEA + .word $BFEB + .word $BFEC + .word $BFED + .word $BFEE + .word $BFEF + .word $BFF0 + .word $BFF1 + .word $BFF2 + .word $BFF3 + .word $BFF4 + .word $BFF5 + .word $BFF6 + .word $BFF7 + .word $BFF8 + .word $BFF9 + .word $BFFA + .word $BFFB + .word $BFFC + .word $BFFD + .word $BFFE + .word $BFFF + .word $C000 + .word $C001 + .word $C002 + .word $C003 + .word $C004 + .word $C005 + .word $C006 + .word $C007 + .word $C008 + .word $C009 + .word $C00A + .word $C00B + .word $C00C + .word $C00D + .word $C00E + .word $C00F + .word $CFE1 + .word $CFE2 + .word $CFE3 + .word $CFE4 + .word $CFE5 + .word $CFE6 + .word $CFE7 + .word $CFE8 + .word $CFE9 + .word $CFEA + .word $CFEB + .word $CFEC + .word $CFED + .word $CFEE + .word $CFEF + .word $CFF0 + .word $CFF1 + .word $CFF2 + .word $CFF3 + .word $CFF4 + .word $CFF5 + .word $CFF6 + .word $CFF7 + .word $CFF8 + .word $CFF9 + .word $CFFA + .word $CFFB + .word $CFFC + .word $CFFD + .word $CFFE + .word $CFFF + .word $D000 + .word $D001 + .word $D002 + .word $D003 + .word $D004 + .word $D005 + .word $D006 + .word $D007 + .word $D008 + .word $D009 + .word $D00A + .word $D00B + .word $D00C + .word $D00D + .word $D00E + .word $D00F + .word $DFE1 + .word $DFE2 + .word $DFE3 + .word $DFE4 + .word $DFE5 + .word $DFE6 + .word $DFE7 + .word $DFE8 + .word $DFE9 + .word $DFEA + .word $DFEB + .word $DFEC + .word $DFED + .word $DFEE + .word $DFEF + .word $DFF0 + .word $DFF1 + .word $DFF2 + .word $DFF3 + .word $DFF4 + .word $DFF5 + .word $DFF6 + .word $DFF7 + .word $DFF8 + .word $DFF9 + .word $DFFA + .word $DFFB + .word $DFFC + .word $DFFD + .word $DFFE + .word $DFFF + .word $E000 + .word $E001 + .word $E002 + .word $E003 + .word $E004 + .word $E005 + .word $E006 + .word $E007 + .word $E008 + .word $E009 + .word $E00A + .word $E00B + .word $E00C + .word $E00D + .word $E00E + .word $E00F + .word $EFE1 + .word $EFE2 + .word $EFE3 + .word $EFE4 + .word $EFE5 + .word $EFE6 + .word $EFE7 + .word $EFE8 + .word $EFE9 + .word $EFEA + .word $EFEB + .word $EFEC + .word $EFED + .word $EFEE + .word $EFEF + .word $EFF0 + .word $EFF1 + .word $EFF2 + .word $EFF3 + .word $EFF4 + .word $EFF5 + .word $EFF6 + .word $EFF7 + .word $EFF8 + .word $EFF9 + .word $EFFA + .word $EFFB + .word $EFFC + .word $EFFD + .word $EFFE + .word $EFFF + .word $F000 + .word $F001 + .word $F002 + .word $F003 + .word $F004 + .word $F005 + .word $F006 + .word $F007 + .word $F008 + .word $F009 + .word $F00A + .word $F00B + .word $F00C + .word $F00D + .word $F00E + .word $F00F + .word $FFE1 + .word $FFE2 + .word $FFE3 + .word $FFE4 + .word $FFE5 + .word $FFE6 + .word $FFE7 + .word $FFE8 + .word $FFE9 + .word $FFEA + .word $FFEB + .word $FFEC + .word $FFED + .word $FFEE + .word $FFEF + .word $FFF0 + .word $FFF1 + .word $FFF2 + .word $FFF3 + .word $FFF4 + .word $FFF5 + .word $FFF6 + .word $FFF7 + .word $FFF8 + .word $FFF9 + .word $FFFA + .word $FFFB + .word $FFFC + .word $FFFD + .word $FFFE + .word $FFFF - ; 4-digit hex values - .word $0000 - .word $0001 - .word $0002 - .word $0003 - .word $0004 - .word $0005 - .word $0006 - .word $0007 - .word $0008 - .word $0009 - .word $000a - .word $000b - .word $000c - .word $000d - .word $000e - .word $000f - .word $0010 - .word $0011 - .word $0012 - .word $0013 - .word $0070 - .word $0071 - .word $0072 - .word $0073 - .word $0074 - .word $0075 - .word $0076 - .word $0077 - .word $0078 - .word $0079 - .word $007a - .word $007b - .word $007c - .word $007d - .word $007e - .word $007f - .word $0080 - .word $0081 - .word $0082 - .word $0083 - .word $0084 - .word $0085 - .word $0086 - .word $00f0 - .word $00f1 - .word $00f2 - .word $00f3 - .word $00f4 - .word $00f5 - .word $00f6 - .word $00f7 - .word $00f8 - .word $00f9 - .word $00fa - .word $00fb - .word $00fc - .word $00fd - .word $00fe - .word $00ff - .word $0100 - .word $0101 - .word $0102 - .word $0103 - .word $0fd2 - .word $0fd3 - .word $0fd4 - .word $0fd5 - .word $0fd6 - .word $0fd7 - .word $0fd8 - .word $0fd9 - .word $0fda - .word $0fdb - .word $0fdc - .word $0fdd - .word $0fde - .word $0fdf - .word $0fe0 - .word $0fe1 - .word $0fe2 - .word $0fe3 - .word $0fe4 - .word $0fe5 - .word $0fe6 - .word $0fe7 - .word $0fe8 - .word $0fe9 - .word $0fea - .word $0feb - .word $0fec - .word $0fed - .word $0fee - .word $0fef - .word $0ff0 - .word $0ff1 - .word $0ff2 - .word $0ff3 - .word $0ff4 - .word $0ff5 - .word $0ff6 - .word $0ff7 - .word $0ff8 - .word $0ff9 - .word $0ffa - .word $0ffb - .word $0ffc - .word $0ffd - .word $0ffe - .word $0fff - .word $1000 - .word $1001 - .word $1002 - .word $1003 - .word $1004 - .word $1005 - .word $1006 - .word $1007 - .word $1008 - .word $7ff0 - .word $7ff1 - .word $7ff2 - .word $7ff3 - .word $7ff4 - .word $7ff5 - .word $7ff6 - .word $7ff7 - .word $7ff8 - .word $7ff9 - .word $7ffa - .word $7ffb - .word $7ffc - .word $7ffd - .word $7ffe - .word $7fff - .word $8000 - .word $8001 - .word $8002 - .word $8003 - .word $8004 - .word $8005 - .word $8006 - .word $8007 - .word $8008 - .word $8009 - .word $800a - .word $800b - .word $9fe1 - .word $9fe2 - .word $9fe3 - .word $9fe4 - .word $9fe5 - .word $9fe6 - .word $9fe7 - .word $9fe8 - .word $9fe9 - .word $9fea - .word $9feb - .word $9fec - .word $9fed - .word $9fee - .word $9fef - .word $9ff0 - .word $9ff1 - .word $9ff2 - .word $9ff3 - .word $9ff4 - .word $9ff5 - .word $9ff6 - .word $9ff7 - .word $9ff8 - .word $9ff9 - .word $9ffa - .word $9ffb - .word $9ffc - .word $9ffd - .word $9ffe - .word $9fff - .word $a000 - .word $a001 - .word $a002 - .word $a003 - .word $a004 - .word $a005 - .word $a006 - .word $a007 - .word $a008 - .word $a009 - .word $a00a - .word $a00b - .word $a00c - .word $a00d - .word $a00e - .word $a00f - .word $afe1 - .word $afe2 - .word $afe3 - .word $afe4 - .word $afe5 - .word $afe6 - .word $afe7 - .word $afe8 - .word $afe9 - .word $afea - .word $afeb - .word $afec - .word $afed - .word $afee - .word $afef - .word $aff0 - .word $aff1 - .word $aff2 - .word $aff3 - .word $aff4 - .word $aff5 - .word $aff6 - .word $aff7 - .word $aff8 - .word $aff9 - .word $affa - .word $affb - .word $affc - .word $affd - .word $affe - .word $afff - .word $b000 - .word $b001 - .word $b002 - .word $b003 - .word $b004 - .word $b005 - .word $b006 - .word $b007 - .word $b008 - .word $b009 - .word $b00a - .word $b00b - .word $b00c - .word $b00d - .word $b00e - .word $b00f - .word $bfe1 - .word $bfe2 - .word $bfe3 - .word $bfe4 - .word $bfe5 - .word $bfe6 - .word $bfe7 - .word $bfe8 - .word $bfe9 - .word $bfea - .word $bfeb - .word $bfec - .word $bfed - .word $bfee - .word $bfef - .word $bff0 - .word $bff1 - .word $bff2 - .word $bff3 - .word $bff4 - .word $bff5 - .word $bff6 - .word $bff7 - .word $bff8 - .word $bff9 - .word $bffa - .word $bffb - .word $bffc - .word $bffd - .word $bffe - .word $bfff - .word $c000 - .word $c001 - .word $c002 - .word $c003 - .word $c004 - .word $c005 - .word $c006 - .word $c007 - .word $c008 - .word $c009 - .word $c00a - .word $c00b - .word $c00c - .word $c00d - .word $c00e - .word $c00f - .word $cfe1 - .word $cfe2 - .word $cfe3 - .word $cfe4 - .word $cfe5 - .word $cfe6 - .word $cfe7 - .word $cfe8 - .word $cfe9 - .word $cfea - .word $cfeb - .word $cfec - .word $cfed - .word $cfee - .word $cfef - .word $cff0 - .word $cff1 - .word $cff2 - .word $cff3 - .word $cff4 - .word $cff5 - .word $cff6 - .word $cff7 - .word $cff8 - .word $cff9 - .word $cffa - .word $cffb - .word $cffc - .word $cffd - .word $cffe - .word $cfff - .word $d000 - .word $d001 - .word $d002 - .word $d003 - .word $d004 - .word $d005 - .word $d006 - .word $d007 - .word $d008 - .word $d009 - .word $d00a - .word $d00b - .word $d00c - .word $d00d - .word $d00e - .word $d00f - .word $dfe1 - .word $dfe2 - .word $dfe3 - .word $dfe4 - .word $dfe5 - .word $dfe6 - .word $dfe7 - .word $dfe8 - .word $dfe9 - .word $dfea - .word $dfeb - .word $dfec - .word $dfed - .word $dfee - .word $dfef - .word $dff0 - .word $dff1 - .word $dff2 - .word $dff3 - .word $dff4 - .word $dff5 - .word $dff6 - .word $dff7 - .word $dff8 - .word $dff9 - .word $dffa - .word $dffb - .word $dffc - .word $dffd - .word $dffe - .word $dfff - .word $e000 - .word $e001 - .word $e002 - .word $e003 - .word $e004 - .word $e005 - .word $e006 - .word $e007 - .word $e008 - .word $e009 - .word $e00a - .word $e00b - .word $e00c - .word $e00d - .word $e00e - .word $e00f - .word $efe1 - .word $efe2 - .word $efe3 - .word $efe4 - .word $efe5 - .word $efe6 - .word $efe7 - .word $efe8 - .word $efe9 - .word $efea - .word $efeb - .word $efec - .word $efed - .word $efee - .word $efef - .word $eff0 - .word $eff1 - .word $eff2 - .word $eff3 - .word $eff4 - .word $eff5 - .word $eff6 - .word $eff7 - .word $eff8 - .word $eff9 - .word $effa - .word $effb - .word $effc - .word $effd - .word $effe - .word $efff - .word $f000 - .word $f001 - .word $f002 - .word $f003 - .word $f004 - .word $f005 - .word $f006 - .word $f007 - .word $f008 - .word $f009 - .word $f00a - .word $f00b - .word $f00c - .word $f00d - .word $f00e - .word $f00f - .word $ffe1 - .word $ffe2 - .word $ffe3 - .word $ffe4 - .word $ffe5 - .word $ffe6 - .word $ffe7 - .word $ffe8 - .word $ffe9 - .word $ffea - .word $ffeb - .word $ffec - .word $ffed - .word $ffee - .word $ffef - .word $fff0 - .word $fff1 - .word $fff2 - .word $fff3 - .word $fff4 - .word $fff5 - .word $fff6 - .word $fff7 - .word $fff8 - .word $fff9 - .word $fffa - .word $fffb - .word $fffc - .word $fffd - .word $fffe - .word $ffff + ; 4-digit hex values + .word $0000 + .word $0001 + .word $0002 + .word $0003 + .word $0004 + .word $0005 + .word $0006 + .word $0007 + .word $0008 + .word $0009 + .word $000a + .word $000b + .word $000c + .word $000d + .word $000e + .word $000f + .word $0010 + .word $0011 + .word $0012 + .word $0013 + .word $0070 + .word $0071 + .word $0072 + .word $0073 + .word $0074 + .word $0075 + .word $0076 + .word $0077 + .word $0078 + .word $0079 + .word $007a + .word $007b + .word $007c + .word $007d + .word $007e + .word $007f + .word $0080 + .word $0081 + .word $0082 + .word $0083 + .word $0084 + .word $0085 + .word $0086 + .word $00f0 + .word $00f1 + .word $00f2 + .word $00f3 + .word $00f4 + .word $00f5 + .word $00f6 + .word $00f7 + .word $00f8 + .word $00f9 + .word $00fa + .word $00fb + .word $00fc + .word $00fd + .word $00fe + .word $00ff + .word $0100 + .word $0101 + .word $0102 + .word $0103 + .word $0fd2 + .word $0fd3 + .word $0fd4 + .word $0fd5 + .word $0fd6 + .word $0fd7 + .word $0fd8 + .word $0fd9 + .word $0fda + .word $0fdb + .word $0fdc + .word $0fdd + .word $0fde + .word $0fdf + .word $0fe0 + .word $0fe1 + .word $0fe2 + .word $0fe3 + .word $0fe4 + .word $0fe5 + .word $0fe6 + .word $0fe7 + .word $0fe8 + .word $0fe9 + .word $0fea + .word $0feb + .word $0fec + .word $0fed + .word $0fee + .word $0fef + .word $0ff0 + .word $0ff1 + .word $0ff2 + .word $0ff3 + .word $0ff4 + .word $0ff5 + .word $0ff6 + .word $0ff7 + .word $0ff8 + .word $0ff9 + .word $0ffa + .word $0ffb + .word $0ffc + .word $0ffd + .word $0ffe + .word $0fff + .word $1000 + .word $1001 + .word $1002 + .word $1003 + .word $1004 + .word $1005 + .word $1006 + .word $1007 + .word $1008 + .word $7ff0 + .word $7ff1 + .word $7ff2 + .word $7ff3 + .word $7ff4 + .word $7ff5 + .word $7ff6 + .word $7ff7 + .word $7ff8 + .word $7ff9 + .word $7ffa + .word $7ffb + .word $7ffc + .word $7ffd + .word $7ffe + .word $7fff + .word $8000 + .word $8001 + .word $8002 + .word $8003 + .word $8004 + .word $8005 + .word $8006 + .word $8007 + .word $8008 + .word $8009 + .word $800a + .word $800b + .word $9fe1 + .word $9fe2 + .word $9fe3 + .word $9fe4 + .word $9fe5 + .word $9fe6 + .word $9fe7 + .word $9fe8 + .word $9fe9 + .word $9fea + .word $9feb + .word $9fec + .word $9fed + .word $9fee + .word $9fef + .word $9ff0 + .word $9ff1 + .word $9ff2 + .word $9ff3 + .word $9ff4 + .word $9ff5 + .word $9ff6 + .word $9ff7 + .word $9ff8 + .word $9ff9 + .word $9ffa + .word $9ffb + .word $9ffc + .word $9ffd + .word $9ffe + .word $9fff + .word $a000 + .word $a001 + .word $a002 + .word $a003 + .word $a004 + .word $a005 + .word $a006 + .word $a007 + .word $a008 + .word $a009 + .word $a00a + .word $a00b + .word $a00c + .word $a00d + .word $a00e + .word $a00f + .word $afe1 + .word $afe2 + .word $afe3 + .word $afe4 + .word $afe5 + .word $afe6 + .word $afe7 + .word $afe8 + .word $afe9 + .word $afea + .word $afeb + .word $afec + .word $afed + .word $afee + .word $afef + .word $aff0 + .word $aff1 + .word $aff2 + .word $aff3 + .word $aff4 + .word $aff5 + .word $aff6 + .word $aff7 + .word $aff8 + .word $aff9 + .word $affa + .word $affb + .word $affc + .word $affd + .word $affe + .word $afff + .word $b000 + .word $b001 + .word $b002 + .word $b003 + .word $b004 + .word $b005 + .word $b006 + .word $b007 + .word $b008 + .word $b009 + .word $b00a + .word $b00b + .word $b00c + .word $b00d + .word $b00e + .word $b00f + .word $bfe1 + .word $bfe2 + .word $bfe3 + .word $bfe4 + .word $bfe5 + .word $bfe6 + .word $bfe7 + .word $bfe8 + .word $bfe9 + .word $bfea + .word $bfeb + .word $bfec + .word $bfed + .word $bfee + .word $bfef + .word $bff0 + .word $bff1 + .word $bff2 + .word $bff3 + .word $bff4 + .word $bff5 + .word $bff6 + .word $bff7 + .word $bff8 + .word $bff9 + .word $bffa + .word $bffb + .word $bffc + .word $bffd + .word $bffe + .word $bfff + .word $c000 + .word $c001 + .word $c002 + .word $c003 + .word $c004 + .word $c005 + .word $c006 + .word $c007 + .word $c008 + .word $c009 + .word $c00a + .word $c00b + .word $c00c + .word $c00d + .word $c00e + .word $c00f + .word $cfe1 + .word $cfe2 + .word $cfe3 + .word $cfe4 + .word $cfe5 + .word $cfe6 + .word $cfe7 + .word $cfe8 + .word $cfe9 + .word $cfea + .word $cfeb + .word $cfec + .word $cfed + .word $cfee + .word $cfef + .word $cff0 + .word $cff1 + .word $cff2 + .word $cff3 + .word $cff4 + .word $cff5 + .word $cff6 + .word $cff7 + .word $cff8 + .word $cff9 + .word $cffa + .word $cffb + .word $cffc + .word $cffd + .word $cffe + .word $cfff + .word $d000 + .word $d001 + .word $d002 + .word $d003 + .word $d004 + .word $d005 + .word $d006 + .word $d007 + .word $d008 + .word $d009 + .word $d00a + .word $d00b + .word $d00c + .word $d00d + .word $d00e + .word $d00f + .word $dfe1 + .word $dfe2 + .word $dfe3 + .word $dfe4 + .word $dfe5 + .word $dfe6 + .word $dfe7 + .word $dfe8 + .word $dfe9 + .word $dfea + .word $dfeb + .word $dfec + .word $dfed + .word $dfee + .word $dfef + .word $dff0 + .word $dff1 + .word $dff2 + .word $dff3 + .word $dff4 + .word $dff5 + .word $dff6 + .word $dff7 + .word $dff8 + .word $dff9 + .word $dffa + .word $dffb + .word $dffc + .word $dffd + .word $dffe + .word $dfff + .word $e000 + .word $e001 + .word $e002 + .word $e003 + .word $e004 + .word $e005 + .word $e006 + .word $e007 + .word $e008 + .word $e009 + .word $e00a + .word $e00b + .word $e00c + .word $e00d + .word $e00e + .word $e00f + .word $efe1 + .word $efe2 + .word $efe3 + .word $efe4 + .word $efe5 + .word $efe6 + .word $efe7 + .word $efe8 + .word $efe9 + .word $efea + .word $efeb + .word $efec + .word $efed + .word $efee + .word $efef + .word $eff0 + .word $eff1 + .word $eff2 + .word $eff3 + .word $eff4 + .word $eff5 + .word $eff6 + .word $eff7 + .word $eff8 + .word $eff9 + .word $effa + .word $effb + .word $effc + .word $effd + .word $effe + .word $efff + .word $f000 + .word $f001 + .word $f002 + .word $f003 + .word $f004 + .word $f005 + .word $f006 + .word $f007 + .word $f008 + .word $f009 + .word $f00a + .word $f00b + .word $f00c + .word $f00d + .word $f00e + .word $f00f + .word $ffe1 + .word $ffe2 + .word $ffe3 + .word $ffe4 + .word $ffe5 + .word $ffe6 + .word $ffe7 + .word $ffe8 + .word $ffe9 + .word $ffea + .word $ffeb + .word $ffec + .word $ffed + .word $ffee + .word $ffef + .word $fff0 + .word $fff1 + .word $fff2 + .word $fff3 + .word $fff4 + .word $fff5 + .word $fff6 + .word $fff7 + .word $fff8 + .word $fff9 + .word $fffa + .word $fffb + .word $fffc + .word $fffd + .word $fffe + .word $ffff - ; 4-digit hex values, uppercase - .word $0000 - .word $0001 - .word $0002 - .word $0003 - .word $0004 - .word $0005 - .word $0006 - .word $0007 - .word $0008 - .word $0009 - .word $000A - .word $000B - .word $000C - .word $000D - .word $000E - .word $000F - .word $0010 - .word $0011 - .word $0012 - .word $0013 - .word $0070 - .word $0071 - .word $0072 - .word $0073 - .word $0074 - .word $0075 - .word $0076 - .word $0077 - .word $0078 - .word $0079 - .word $007A - .word $007B - .word $007C - .word $007D - .word $007E - .word $007F - .word $0080 - .word $0081 - .word $0082 - .word $0083 - .word $0084 - .word $0085 - .word $0086 - .word $00F0 - .word $00F1 - .word $00F2 - .word $00F3 - .word $00F4 - .word $00F5 - .word $00F6 - .word $00F7 - .word $00F8 - .word $00F9 - .word $00FA - .word $00FB - .word $00FC - .word $00FD - .word $00FE - .word $00FF - .word $0100 - .word $0101 - .word $0102 - .word $0103 - .word $0FD2 - .word $0FD3 - .word $0FD4 - .word $0FD5 - .word $0FD6 - .word $0FD7 - .word $0FD8 - .word $0FD9 - .word $0FDA - .word $0FDB - .word $0FDC - .word $0FDD - .word $0FDE - .word $0FDF - .word $0FE0 - .word $0FE1 - .word $0FE2 - .word $0FE3 - .word $0FE4 - .word $0FE5 - .word $0FE6 - .word $0FE7 - .word $0FE8 - .word $0FE9 - .word $0FEA - .word $0FEB - .word $0FEC - .word $0FED - .word $0FEE - .word $0FEF - .word $0FF0 - .word $0FF1 - .word $0FF2 - .word $0FF3 - .word $0FF4 - .word $0FF5 - .word $0FF6 - .word $0FF7 - .word $0FF8 - .word $0FF9 - .word $0FFA - .word $0FFB - .word $0FFC - .word $0FFD - .word $0FFE - .word $0FFF - .word $1000 - .word $1001 - .word $1002 - .word $1003 - .word $1004 - .word $1005 - .word $1006 - .word $1007 - .word $1008 - .word $7FF0 - .word $7FF1 - .word $7FF2 - .word $7FF3 - .word $7FF4 - .word $7FF5 - .word $7FF6 - .word $7FF7 - .word $7FF8 - .word $7FF9 - .word $7FFA - .word $7FFB - .word $7FFC - .word $7FFD - .word $7FFE - .word $7FFF - .word $8000 - .word $8001 - .word $8002 - .word $8003 - .word $8004 - .word $8005 - .word $8006 - .word $8007 - .word $8008 - .word $8009 - .word $800A - .word $800B - .word $9FE1 - .word $9FE2 - .word $9FE3 - .word $9FE4 - .word $9FE5 - .word $9FE6 - .word $9FE7 - .word $9FE8 - .word $9FE9 - .word $9FEA - .word $9FEB - .word $9FEC - .word $9FED - .word $9FEE - .word $9FEF - .word $9FF0 - .word $9FF1 - .word $9FF2 - .word $9FF3 - .word $9FF4 - .word $9FF5 - .word $9FF6 - .word $9FF7 - .word $9FF8 - .word $9FF9 - .word $9FFA - .word $9FFB - .word $9FFC - .word $9FFD - .word $9FFE - .word $9FFF - .word $A000 - .word $A001 - .word $A002 - .word $A003 - .word $A004 - .word $A005 - .word $A006 - .word $A007 - .word $A008 - .word $A009 - .word $A00A - .word $A00B - .word $A00C - .word $A00D - .word $A00E - .word $A00F - .word $AFE1 - .word $AFE2 - .word $AFE3 - .word $AFE4 - .word $AFE5 - .word $AFE6 - .word $AFE7 - .word $AFE8 - .word $AFE9 - .word $AFEA - .word $AFEB - .word $AFEC - .word $AFED - .word $AFEE - .word $AFEF - .word $AFF0 - .word $AFF1 - .word $AFF2 - .word $AFF3 - .word $AFF4 - .word $AFF5 - .word $AFF6 - .word $AFF7 - .word $AFF8 - .word $AFF9 - .word $AFFA - .word $AFFB - .word $AFFC - .word $AFFD - .word $AFFE - .word $AFFF - .word $B000 - .word $B001 - .word $B002 - .word $B003 - .word $B004 - .word $B005 - .word $B006 - .word $B007 - .word $B008 - .word $B009 - .word $B00A - .word $B00B - .word $B00C - .word $B00D - .word $B00E - .word $B00F - .word $BFE1 - .word $BFE2 - .word $BFE3 - .word $BFE4 - .word $BFE5 - .word $BFE6 - .word $BFE7 - .word $BFE8 - .word $BFE9 - .word $BFEA - .word $BFEB - .word $BFEC - .word $BFED - .word $BFEE - .word $BFEF - .word $BFF0 - .word $BFF1 - .word $BFF2 - .word $BFF3 - .word $BFF4 - .word $BFF5 - .word $BFF6 - .word $BFF7 - .word $BFF8 - .word $BFF9 - .word $BFFA - .word $BFFB - .word $BFFC - .word $BFFD - .word $BFFE - .word $BFFF - .word $C000 - .word $C001 - .word $C002 - .word $C003 - .word $C004 - .word $C005 - .word $C006 - .word $C007 - .word $C008 - .word $C009 - .word $C00A - .word $C00B - .word $C00C - .word $C00D - .word $C00E - .word $C00F - .word $CFE1 - .word $CFE2 - .word $CFE3 - .word $CFE4 - .word $CFE5 - .word $CFE6 - .word $CFE7 - .word $CFE8 - .word $CFE9 - .word $CFEA - .word $CFEB - .word $CFEC - .word $CFED - .word $CFEE - .word $CFEF - .word $CFF0 - .word $CFF1 - .word $CFF2 - .word $CFF3 - .word $CFF4 - .word $CFF5 - .word $CFF6 - .word $CFF7 - .word $CFF8 - .word $CFF9 - .word $CFFA - .word $CFFB - .word $CFFC - .word $CFFD - .word $CFFE - .word $CFFF - .word $D000 - .word $D001 - .word $D002 - .word $D003 - .word $D004 - .word $D005 - .word $D006 - .word $D007 - .word $D008 - .word $D009 - .word $D00A - .word $D00B - .word $D00C - .word $D00D - .word $D00E - .word $D00F - .word $DFE1 - .word $DFE2 - .word $DFE3 - .word $DFE4 - .word $DFE5 - .word $DFE6 - .word $DFE7 - .word $DFE8 - .word $DFE9 - .word $DFEA - .word $DFEB - .word $DFEC - .word $DFED - .word $DFEE - .word $DFEF - .word $DFF0 - .word $DFF1 - .word $DFF2 - .word $DFF3 - .word $DFF4 - .word $DFF5 - .word $DFF6 - .word $DFF7 - .word $DFF8 - .word $DFF9 - .word $DFFA - .word $DFFB - .word $DFFC - .word $DFFD - .word $DFFE - .word $DFFF - .word $E000 - .word $E001 - .word $E002 - .word $E003 - .word $E004 - .word $E005 - .word $E006 - .word $E007 - .word $E008 - .word $E009 - .word $E00A - .word $E00B - .word $E00C - .word $E00D - .word $E00E - .word $E00F - .word $EFE1 - .word $EFE2 - .word $EFE3 - .word $EFE4 - .word $EFE5 - .word $EFE6 - .word $EFE7 - .word $EFE8 - .word $EFE9 - .word $EFEA - .word $EFEB - .word $EFEC - .word $EFED - .word $EFEE - .word $EFEF - .word $EFF0 - .word $EFF1 - .word $EFF2 - .word $EFF3 - .word $EFF4 - .word $EFF5 - .word $EFF6 - .word $EFF7 - .word $EFF8 - .word $EFF9 - .word $EFFA - .word $EFFB - .word $EFFC - .word $EFFD - .word $EFFE - .word $EFFF - .word $F000 - .word $F001 - .word $F002 - .word $F003 - .word $F004 - .word $F005 - .word $F006 - .word $F007 - .word $F008 - .word $F009 - .word $F00A - .word $F00B - .word $F00C - .word $F00D - .word $F00E - .word $F00F - .word $FFE1 - .word $FFE2 - .word $FFE3 - .word $FFE4 - .word $FFE5 - .word $FFE6 - .word $FFE7 - .word $FFE8 - .word $FFE9 - .word $FFEA - .word $FFEB - .word $FFEC - .word $FFED - .word $FFEE - .word $FFEF - .word $FFF0 - .word $FFF1 - .word $FFF2 - .word $FFF3 - .word $FFF4 - .word $FFF5 - .word $FFF6 - .word $FFF7 - .word $FFF8 - .word $FFF9 - .word $FFFA - .word $FFFB - .word $FFFC - .word $FFFD - .word $FFFE - .word $FFFF + ; 4-digit hex values, uppercase + .word $0000 + .word $0001 + .word $0002 + .word $0003 + .word $0004 + .word $0005 + .word $0006 + .word $0007 + .word $0008 + .word $0009 + .word $000A + .word $000B + .word $000C + .word $000D + .word $000E + .word $000F + .word $0010 + .word $0011 + .word $0012 + .word $0013 + .word $0070 + .word $0071 + .word $0072 + .word $0073 + .word $0074 + .word $0075 + .word $0076 + .word $0077 + .word $0078 + .word $0079 + .word $007A + .word $007B + .word $007C + .word $007D + .word $007E + .word $007F + .word $0080 + .word $0081 + .word $0082 + .word $0083 + .word $0084 + .word $0085 + .word $0086 + .word $00F0 + .word $00F1 + .word $00F2 + .word $00F3 + .word $00F4 + .word $00F5 + .word $00F6 + .word $00F7 + .word $00F8 + .word $00F9 + .word $00FA + .word $00FB + .word $00FC + .word $00FD + .word $00FE + .word $00FF + .word $0100 + .word $0101 + .word $0102 + .word $0103 + .word $0FD2 + .word $0FD3 + .word $0FD4 + .word $0FD5 + .word $0FD6 + .word $0FD7 + .word $0FD8 + .word $0FD9 + .word $0FDA + .word $0FDB + .word $0FDC + .word $0FDD + .word $0FDE + .word $0FDF + .word $0FE0 + .word $0FE1 + .word $0FE2 + .word $0FE3 + .word $0FE4 + .word $0FE5 + .word $0FE6 + .word $0FE7 + .word $0FE8 + .word $0FE9 + .word $0FEA + .word $0FEB + .word $0FEC + .word $0FED + .word $0FEE + .word $0FEF + .word $0FF0 + .word $0FF1 + .word $0FF2 + .word $0FF3 + .word $0FF4 + .word $0FF5 + .word $0FF6 + .word $0FF7 + .word $0FF8 + .word $0FF9 + .word $0FFA + .word $0FFB + .word $0FFC + .word $0FFD + .word $0FFE + .word $0FFF + .word $1000 + .word $1001 + .word $1002 + .word $1003 + .word $1004 + .word $1005 + .word $1006 + .word $1007 + .word $1008 + .word $7FF0 + .word $7FF1 + .word $7FF2 + .word $7FF3 + .word $7FF4 + .word $7FF5 + .word $7FF6 + .word $7FF7 + .word $7FF8 + .word $7FF9 + .word $7FFA + .word $7FFB + .word $7FFC + .word $7FFD + .word $7FFE + .word $7FFF + .word $8000 + .word $8001 + .word $8002 + .word $8003 + .word $8004 + .word $8005 + .word $8006 + .word $8007 + .word $8008 + .word $8009 + .word $800A + .word $800B + .word $9FE1 + .word $9FE2 + .word $9FE3 + .word $9FE4 + .word $9FE5 + .word $9FE6 + .word $9FE7 + .word $9FE8 + .word $9FE9 + .word $9FEA + .word $9FEB + .word $9FEC + .word $9FED + .word $9FEE + .word $9FEF + .word $9FF0 + .word $9FF1 + .word $9FF2 + .word $9FF3 + .word $9FF4 + .word $9FF5 + .word $9FF6 + .word $9FF7 + .word $9FF8 + .word $9FF9 + .word $9FFA + .word $9FFB + .word $9FFC + .word $9FFD + .word $9FFE + .word $9FFF + .word $A000 + .word $A001 + .word $A002 + .word $A003 + .word $A004 + .word $A005 + .word $A006 + .word $A007 + .word $A008 + .word $A009 + .word $A00A + .word $A00B + .word $A00C + .word $A00D + .word $A00E + .word $A00F + .word $AFE1 + .word $AFE2 + .word $AFE3 + .word $AFE4 + .word $AFE5 + .word $AFE6 + .word $AFE7 + .word $AFE8 + .word $AFE9 + .word $AFEA + .word $AFEB + .word $AFEC + .word $AFED + .word $AFEE + .word $AFEF + .word $AFF0 + .word $AFF1 + .word $AFF2 + .word $AFF3 + .word $AFF4 + .word $AFF5 + .word $AFF6 + .word $AFF7 + .word $AFF8 + .word $AFF9 + .word $AFFA + .word $AFFB + .word $AFFC + .word $AFFD + .word $AFFE + .word $AFFF + .word $B000 + .word $B001 + .word $B002 + .word $B003 + .word $B004 + .word $B005 + .word $B006 + .word $B007 + .word $B008 + .word $B009 + .word $B00A + .word $B00B + .word $B00C + .word $B00D + .word $B00E + .word $B00F + .word $BFE1 + .word $BFE2 + .word $BFE3 + .word $BFE4 + .word $BFE5 + .word $BFE6 + .word $BFE7 + .word $BFE8 + .word $BFE9 + .word $BFEA + .word $BFEB + .word $BFEC + .word $BFED + .word $BFEE + .word $BFEF + .word $BFF0 + .word $BFF1 + .word $BFF2 + .word $BFF3 + .word $BFF4 + .word $BFF5 + .word $BFF6 + .word $BFF7 + .word $BFF8 + .word $BFF9 + .word $BFFA + .word $BFFB + .word $BFFC + .word $BFFD + .word $BFFE + .word $BFFF + .word $C000 + .word $C001 + .word $C002 + .word $C003 + .word $C004 + .word $C005 + .word $C006 + .word $C007 + .word $C008 + .word $C009 + .word $C00A + .word $C00B + .word $C00C + .word $C00D + .word $C00E + .word $C00F + .word $CFE1 + .word $CFE2 + .word $CFE3 + .word $CFE4 + .word $CFE5 + .word $CFE6 + .word $CFE7 + .word $CFE8 + .word $CFE9 + .word $CFEA + .word $CFEB + .word $CFEC + .word $CFED + .word $CFEE + .word $CFEF + .word $CFF0 + .word $CFF1 + .word $CFF2 + .word $CFF3 + .word $CFF4 + .word $CFF5 + .word $CFF6 + .word $CFF7 + .word $CFF8 + .word $CFF9 + .word $CFFA + .word $CFFB + .word $CFFC + .word $CFFD + .word $CFFE + .word $CFFF + .word $D000 + .word $D001 + .word $D002 + .word $D003 + .word $D004 + .word $D005 + .word $D006 + .word $D007 + .word $D008 + .word $D009 + .word $D00A + .word $D00B + .word $D00C + .word $D00D + .word $D00E + .word $D00F + .word $DFE1 + .word $DFE2 + .word $DFE3 + .word $DFE4 + .word $DFE5 + .word $DFE6 + .word $DFE7 + .word $DFE8 + .word $DFE9 + .word $DFEA + .word $DFEB + .word $DFEC + .word $DFED + .word $DFEE + .word $DFEF + .word $DFF0 + .word $DFF1 + .word $DFF2 + .word $DFF3 + .word $DFF4 + .word $DFF5 + .word $DFF6 + .word $DFF7 + .word $DFF8 + .word $DFF9 + .word $DFFA + .word $DFFB + .word $DFFC + .word $DFFD + .word $DFFE + .word $DFFF + .word $E000 + .word $E001 + .word $E002 + .word $E003 + .word $E004 + .word $E005 + .word $E006 + .word $E007 + .word $E008 + .word $E009 + .word $E00A + .word $E00B + .word $E00C + .word $E00D + .word $E00E + .word $E00F + .word $EFE1 + .word $EFE2 + .word $EFE3 + .word $EFE4 + .word $EFE5 + .word $EFE6 + .word $EFE7 + .word $EFE8 + .word $EFE9 + .word $EFEA + .word $EFEB + .word $EFEC + .word $EFED + .word $EFEE + .word $EFEF + .word $EFF0 + .word $EFF1 + .word $EFF2 + .word $EFF3 + .word $EFF4 + .word $EFF5 + .word $EFF6 + .word $EFF7 + .word $EFF8 + .word $EFF9 + .word $EFFA + .word $EFFB + .word $EFFC + .word $EFFD + .word $EFFE + .word $EFFF + .word $F000 + .word $F001 + .word $F002 + .word $F003 + .word $F004 + .word $F005 + .word $F006 + .word $F007 + .word $F008 + .word $F009 + .word $F00A + .word $F00B + .word $F00C + .word $F00D + .word $F00E + .word $F00F + .word $FFE1 + .word $FFE2 + .word $FFE3 + .word $FFE4 + .word $FFE5 + .word $FFE6 + .word $FFE7 + .word $FFE8 + .word $FFE9 + .word $FFEA + .word $FFEB + .word $FFEC + .word $FFED + .word $FFEE + .word $FFEF + .word $FFF0 + .word $FFF1 + .word $FFF2 + .word $FFF3 + .word $FFF4 + .word $FFF5 + .word $FFF6 + .word $FFF7 + .word $FFF8 + .word $FFF9 + .word $FFFA + .word $FFFB + .word $FFFC + .word $FFFD + .word $FFFE + .word $FFFF - ; alternative hex values - .word 0h - .word 1h - .word 2h - .word 3h - .word 4h - .word 5h - .word 6h - .word 7h - .word 8h - .word 9h - .word 0ah - .word 0bh - .word 0ch - .word 0dh - .word 0eh - .word 0fh - .word 10h - .word 11h - .word 12h - .word 13h - .word 70h - .word 71h - .word 72h - .word 73h - .word 74h - .word 75h - .word 76h - .word 77h - .word 78h - .word 79h - .word 7ah - .word 7bh - .word 7ch - .word 7dh - .word 7eh - .word 7fh - .word 80h - .word 81h - .word 82h - .word 83h - .word 84h - .word 85h - .word 86h - .word 0f0h - .word 0f1h - .word 0f2h - .word 0f3h - .word 0f4h - .word 0f5h - .word 0f6h - .word 0f7h - .word 0f8h - .word 0f9h - .word 0fah - .word 0fbh - .word 0fch - .word 0fdh - .word 0feh - .word 0ffh - .word 100h - .word 101h - .word 102h - .word 103h - .word 0fd2h - .word 0fd3h - .word 0fd4h - .word 0fd5h - .word 0fd6h - .word 0fd7h - .word 0fd8h - .word 0fd9h - .word 0fdah - .word 0fdbh - .word 0fdch - .word 0fddh - .word 0fdeh - .word 0fdfh - .word 0fe0h - .word 0fe1h - .word 0fe2h - .word 0fe3h - .word 0fe4h - .word 0fe5h - .word 0fe6h - .word 0fe7h - .word 0fe8h - .word 0fe9h - .word 0feah - .word 0febh - .word 0fech - .word 0fedh - .word 0feeh - .word 0fefh - .word 0ff0h - .word 0ff1h - .word 0ff2h - .word 0ff3h - .word 0ff4h - .word 0ff5h - .word 0ff6h - .word 0ff7h - .word 0ff8h - .word 0ff9h - .word 0ffah - .word 0ffbh - .word 0ffch - .word 0ffdh - .word 0ffeh - .word 0fffh - .word 1000h - .word 1001h - .word 1002h - .word 1003h - .word 1004h - .word 1005h - .word 1006h - .word 1007h - .word 1008h - .word 7ff0h - .word 7ff1h - .word 7ff2h - .word 7ff3h - .word 7ff4h - .word 7ff5h - .word 7ff6h - .word 7ff7h - .word 7ff8h - .word 7ff9h - .word 7ffah - .word 7ffbh - .word 7ffch - .word 7ffdh - .word 7ffeh - .word 7fffh - .word 8000h - .word 8001h - .word 8002h - .word 8003h - .word 8004h - .word 8005h - .word 8006h - .word 8007h - .word 8008h - .word 8009h - .word 800ah - .word 800bh - .word 9fe1h - .word 9fe2h - .word 9fe3h - .word 9fe4h - .word 9fe5h - .word 9fe6h - .word 9fe7h - .word 9fe8h - .word 9fe9h - .word 9feah - .word 9febh - .word 9fech - .word 9fedh - .word 9feeh - .word 9fefh - .word 9ff0h - .word 9ff1h - .word 9ff2h - .word 9ff3h - .word 9ff4h - .word 9ff5h - .word 9ff6h - .word 9ff7h - .word 9ff8h - .word 9ff9h - .word 9ffah - .word 9ffbh - .word 9ffch - .word 9ffdh - .word 9ffeh - .word 9fffh - .word 0a000h - .word 0a001h - .word 0a002h - .word 0a003h - .word 0a004h - .word 0a005h - .word 0a006h - .word 0a007h - .word 0a008h - .word 0a009h - .word 0a00ah - .word 0a00bh - .word 0a00ch - .word 0a00dh - .word 0a00eh - .word 0a00fh - .word 0afe1h - .word 0afe2h - .word 0afe3h - .word 0afe4h - .word 0afe5h - .word 0afe6h - .word 0afe7h - .word 0afe8h - .word 0afe9h - .word 0afeah - .word 0afebh - .word 0afech - .word 0afedh - .word 0afeeh - .word 0afefh - .word 0aff0h - .word 0aff1h - .word 0aff2h - .word 0aff3h - .word 0aff4h - .word 0aff5h - .word 0aff6h - .word 0aff7h - .word 0aff8h - .word 0aff9h - .word 0affah - .word 0affbh - .word 0affch - .word 0affdh - .word 0affeh - .word 0afffh - .word 0b000h - .word 0b001h - .word 0b002h - .word 0b003h - .word 0b004h - .word 0b005h - .word 0b006h - .word 0b007h - .word 0b008h - .word 0b009h - .word 0b00ah - .word 0b00bh - .word 0b00ch - .word 0b00dh - .word 0b00eh - .word 0b00fh - .word 0bfe1h - .word 0bfe2h - .word 0bfe3h - .word 0bfe4h - .word 0bfe5h - .word 0bfe6h - .word 0bfe7h - .word 0bfe8h - .word 0bfe9h - .word 0bfeah - .word 0bfebh - .word 0bfech - .word 0bfedh - .word 0bfeeh - .word 0bfefh - .word 0bff0h - .word 0bff1h - .word 0bff2h - .word 0bff3h - .word 0bff4h - .word 0bff5h - .word 0bff6h - .word 0bff7h - .word 0bff8h - .word 0bff9h - .word 0bffah - .word 0bffbh - .word 0bffch - .word 0bffdh - .word 0bffeh - .word 0bfffh - .word 0c000h - .word 0c001h - .word 0c002h - .word 0c003h - .word 0c004h - .word 0c005h - .word 0c006h - .word 0c007h - .word 0c008h - .word 0c009h - .word 0c00ah - .word 0c00bh - .word 0c00ch - .word 0c00dh - .word 0c00eh - .word 0c00fh - .word 0cfe1h - .word 0cfe2h - .word 0cfe3h - .word 0cfe4h - .word 0cfe5h - .word 0cfe6h - .word 0cfe7h - .word 0cfe8h - .word 0cfe9h - .word 0cfeah - .word 0cfebh - .word 0cfech - .word 0cfedh - .word 0cfeeh - .word 0cfefh - .word 0cff0h - .word 0cff1h - .word 0cff2h - .word 0cff3h - .word 0cff4h - .word 0cff5h - .word 0cff6h - .word 0cff7h - .word 0cff8h - .word 0cff9h - .word 0cffah - .word 0cffbh - .word 0cffch - .word 0cffdh - .word 0cffeh - .word 0cfffh - .word 0d000h - .word 0d001h - .word 0d002h - .word 0d003h - .word 0d004h - .word 0d005h - .word 0d006h - .word 0d007h - .word 0d008h - .word 0d009h - .word 0d00ah - .word 0d00bh - .word 0d00ch - .word 0d00dh - .word 0d00eh - .word 0d00fh - .word 0dfe1h - .word 0dfe2h - .word 0dfe3h - .word 0dfe4h - .word 0dfe5h - .word 0dfe6h - .word 0dfe7h - .word 0dfe8h - .word 0dfe9h - .word 0dfeah - .word 0dfebh - .word 0dfech - .word 0dfedh - .word 0dfeeh - .word 0dfefh - .word 0dff0h - .word 0dff1h - .word 0dff2h - .word 0dff3h - .word 0dff4h - .word 0dff5h - .word 0dff6h - .word 0dff7h - .word 0dff8h - .word 0dff9h - .word 0dffah - .word 0dffbh - .word 0dffch - .word 0dffdh - .word 0dffeh - .word 0dfffh - .word 0e000h - .word 0e001h - .word 0e002h - .word 0e003h - .word 0e004h - .word 0e005h - .word 0e006h - .word 0e007h - .word 0e008h - .word 0e009h - .word 0e00ah - .word 0e00bh - .word 0e00ch - .word 0e00dh - .word 0e00eh - .word 0e00fh - .word 0efe1h - .word 0efe2h - .word 0efe3h - .word 0efe4h - .word 0efe5h - .word 0efe6h - .word 0efe7h - .word 0efe8h - .word 0efe9h - .word 0efeah - .word 0efebh - .word 0efech - .word 0efedh - .word 0efeeh - .word 0efefh - .word 0eff0h - .word 0eff1h - .word 0eff2h - .word 0eff3h - .word 0eff4h - .word 0eff5h - .word 0eff6h - .word 0eff7h - .word 0eff8h - .word 0eff9h - .word 0effah - .word 0effbh - .word 0effch - .word 0effdh - .word 0effeh - .word 0efffh - .word 0f000h - .word 0f001h - .word 0f002h - .word 0f003h - .word 0f004h - .word 0f005h - .word 0f006h - .word 0f007h - .word 0f008h - .word 0f009h - .word 0f00ah - .word 0f00bh - .word 0f00ch - .word 0f00dh - .word 0f00eh - .word 0f00fh - .word 0ffe1h - .word 0ffe2h - .word 0ffe3h - .word 0ffe4h - .word 0ffe5h - .word 0ffe6h - .word 0ffe7h - .word 0ffe8h - .word 0ffe9h - .word 0ffeah - .word 0ffebh - .word 0ffech - .word 0ffedh - .word 0ffeeh - .word 0ffefh - .word 0fff0h - .word 0fff1h - .word 0fff2h - .word 0fff3h - .word 0fff4h - .word 0fff5h - .word 0fff6h - .word 0fff7h - .word 0fff8h - .word 0fff9h - .word 0fffah - .word 0fffbh - .word 0fffch - .word 0fffdh - .word 0fffeh - .word 0ffffh + ; alternative hex values + .word 0h + .word 1h + .word 2h + .word 3h + .word 4h + .word 5h + .word 6h + .word 7h + .word 8h + .word 9h + .word 0ah + .word 0bh + .word 0ch + .word 0dh + .word 0eh + .word 0fh + .word 10h + .word 11h + .word 12h + .word 13h + .word 70h + .word 71h + .word 72h + .word 73h + .word 74h + .word 75h + .word 76h + .word 77h + .word 78h + .word 79h + .word 7ah + .word 7bh + .word 7ch + .word 7dh + .word 7eh + .word 7fh + .word 80h + .word 81h + .word 82h + .word 83h + .word 84h + .word 85h + .word 86h + .word 0f0h + .word 0f1h + .word 0f2h + .word 0f3h + .word 0f4h + .word 0f5h + .word 0f6h + .word 0f7h + .word 0f8h + .word 0f9h + .word 0fah + .word 0fbh + .word 0fch + .word 0fdh + .word 0feh + .word 0ffh + .word 100h + .word 101h + .word 102h + .word 103h + .word 0fd2h + .word 0fd3h + .word 0fd4h + .word 0fd5h + .word 0fd6h + .word 0fd7h + .word 0fd8h + .word 0fd9h + .word 0fdah + .word 0fdbh + .word 0fdch + .word 0fddh + .word 0fdeh + .word 0fdfh + .word 0fe0h + .word 0fe1h + .word 0fe2h + .word 0fe3h + .word 0fe4h + .word 0fe5h + .word 0fe6h + .word 0fe7h + .word 0fe8h + .word 0fe9h + .word 0feah + .word 0febh + .word 0fech + .word 0fedh + .word 0feeh + .word 0fefh + .word 0ff0h + .word 0ff1h + .word 0ff2h + .word 0ff3h + .word 0ff4h + .word 0ff5h + .word 0ff6h + .word 0ff7h + .word 0ff8h + .word 0ff9h + .word 0ffah + .word 0ffbh + .word 0ffch + .word 0ffdh + .word 0ffeh + .word 0fffh + .word 1000h + .word 1001h + .word 1002h + .word 1003h + .word 1004h + .word 1005h + .word 1006h + .word 1007h + .word 1008h + .word 7ff0h + .word 7ff1h + .word 7ff2h + .word 7ff3h + .word 7ff4h + .word 7ff5h + .word 7ff6h + .word 7ff7h + .word 7ff8h + .word 7ff9h + .word 7ffah + .word 7ffbh + .word 7ffch + .word 7ffdh + .word 7ffeh + .word 7fffh + .word 8000h + .word 8001h + .word 8002h + .word 8003h + .word 8004h + .word 8005h + .word 8006h + .word 8007h + .word 8008h + .word 8009h + .word 800ah + .word 800bh + .word 9fe1h + .word 9fe2h + .word 9fe3h + .word 9fe4h + .word 9fe5h + .word 9fe6h + .word 9fe7h + .word 9fe8h + .word 9fe9h + .word 9feah + .word 9febh + .word 9fech + .word 9fedh + .word 9feeh + .word 9fefh + .word 9ff0h + .word 9ff1h + .word 9ff2h + .word 9ff3h + .word 9ff4h + .word 9ff5h + .word 9ff6h + .word 9ff7h + .word 9ff8h + .word 9ff9h + .word 9ffah + .word 9ffbh + .word 9ffch + .word 9ffdh + .word 9ffeh + .word 9fffh + .word 0a000h + .word 0a001h + .word 0a002h + .word 0a003h + .word 0a004h + .word 0a005h + .word 0a006h + .word 0a007h + .word 0a008h + .word 0a009h + .word 0a00ah + .word 0a00bh + .word 0a00ch + .word 0a00dh + .word 0a00eh + .word 0a00fh + .word 0afe1h + .word 0afe2h + .word 0afe3h + .word 0afe4h + .word 0afe5h + .word 0afe6h + .word 0afe7h + .word 0afe8h + .word 0afe9h + .word 0afeah + .word 0afebh + .word 0afech + .word 0afedh + .word 0afeeh + .word 0afefh + .word 0aff0h + .word 0aff1h + .word 0aff2h + .word 0aff3h + .word 0aff4h + .word 0aff5h + .word 0aff6h + .word 0aff7h + .word 0aff8h + .word 0aff9h + .word 0affah + .word 0affbh + .word 0affch + .word 0affdh + .word 0affeh + .word 0afffh + .word 0b000h + .word 0b001h + .word 0b002h + .word 0b003h + .word 0b004h + .word 0b005h + .word 0b006h + .word 0b007h + .word 0b008h + .word 0b009h + .word 0b00ah + .word 0b00bh + .word 0b00ch + .word 0b00dh + .word 0b00eh + .word 0b00fh + .word 0bfe1h + .word 0bfe2h + .word 0bfe3h + .word 0bfe4h + .word 0bfe5h + .word 0bfe6h + .word 0bfe7h + .word 0bfe8h + .word 0bfe9h + .word 0bfeah + .word 0bfebh + .word 0bfech + .word 0bfedh + .word 0bfeeh + .word 0bfefh + .word 0bff0h + .word 0bff1h + .word 0bff2h + .word 0bff3h + .word 0bff4h + .word 0bff5h + .word 0bff6h + .word 0bff7h + .word 0bff8h + .word 0bff9h + .word 0bffah + .word 0bffbh + .word 0bffch + .word 0bffdh + .word 0bffeh + .word 0bfffh + .word 0c000h + .word 0c001h + .word 0c002h + .word 0c003h + .word 0c004h + .word 0c005h + .word 0c006h + .word 0c007h + .word 0c008h + .word 0c009h + .word 0c00ah + .word 0c00bh + .word 0c00ch + .word 0c00dh + .word 0c00eh + .word 0c00fh + .word 0cfe1h + .word 0cfe2h + .word 0cfe3h + .word 0cfe4h + .word 0cfe5h + .word 0cfe6h + .word 0cfe7h + .word 0cfe8h + .word 0cfe9h + .word 0cfeah + .word 0cfebh + .word 0cfech + .word 0cfedh + .word 0cfeeh + .word 0cfefh + .word 0cff0h + .word 0cff1h + .word 0cff2h + .word 0cff3h + .word 0cff4h + .word 0cff5h + .word 0cff6h + .word 0cff7h + .word 0cff8h + .word 0cff9h + .word 0cffah + .word 0cffbh + .word 0cffch + .word 0cffdh + .word 0cffeh + .word 0cfffh + .word 0d000h + .word 0d001h + .word 0d002h + .word 0d003h + .word 0d004h + .word 0d005h + .word 0d006h + .word 0d007h + .word 0d008h + .word 0d009h + .word 0d00ah + .word 0d00bh + .word 0d00ch + .word 0d00dh + .word 0d00eh + .word 0d00fh + .word 0dfe1h + .word 0dfe2h + .word 0dfe3h + .word 0dfe4h + .word 0dfe5h + .word 0dfe6h + .word 0dfe7h + .word 0dfe8h + .word 0dfe9h + .word 0dfeah + .word 0dfebh + .word 0dfech + .word 0dfedh + .word 0dfeeh + .word 0dfefh + .word 0dff0h + .word 0dff1h + .word 0dff2h + .word 0dff3h + .word 0dff4h + .word 0dff5h + .word 0dff6h + .word 0dff7h + .word 0dff8h + .word 0dff9h + .word 0dffah + .word 0dffbh + .word 0dffch + .word 0dffdh + .word 0dffeh + .word 0dfffh + .word 0e000h + .word 0e001h + .word 0e002h + .word 0e003h + .word 0e004h + .word 0e005h + .word 0e006h + .word 0e007h + .word 0e008h + .word 0e009h + .word 0e00ah + .word 0e00bh + .word 0e00ch + .word 0e00dh + .word 0e00eh + .word 0e00fh + .word 0efe1h + .word 0efe2h + .word 0efe3h + .word 0efe4h + .word 0efe5h + .word 0efe6h + .word 0efe7h + .word 0efe8h + .word 0efe9h + .word 0efeah + .word 0efebh + .word 0efech + .word 0efedh + .word 0efeeh + .word 0efefh + .word 0eff0h + .word 0eff1h + .word 0eff2h + .word 0eff3h + .word 0eff4h + .word 0eff5h + .word 0eff6h + .word 0eff7h + .word 0eff8h + .word 0eff9h + .word 0effah + .word 0effbh + .word 0effch + .word 0effdh + .word 0effeh + .word 0efffh + .word 0f000h + .word 0f001h + .word 0f002h + .word 0f003h + .word 0f004h + .word 0f005h + .word 0f006h + .word 0f007h + .word 0f008h + .word 0f009h + .word 0f00ah + .word 0f00bh + .word 0f00ch + .word 0f00dh + .word 0f00eh + .word 0f00fh + .word 0ffe1h + .word 0ffe2h + .word 0ffe3h + .word 0ffe4h + .word 0ffe5h + .word 0ffe6h + .word 0ffe7h + .word 0ffe8h + .word 0ffe9h + .word 0ffeah + .word 0ffebh + .word 0ffech + .word 0ffedh + .word 0ffeeh + .word 0ffefh + .word 0fff0h + .word 0fff1h + .word 0fff2h + .word 0fff3h + .word 0fff4h + .word 0fff5h + .word 0fff6h + .word 0fff7h + .word 0fff8h + .word 0fff9h + .word 0fffah + .word 0fffbh + .word 0fffch + .word 0fffdh + .word 0fffeh + .word 0ffffh - ; alternative hex values, uppercase - .word 0h - .word 1h - .word 2h - .word 3h - .word 4h - .word 5h - .word 6h - .word 7h - .word 8h - .word 9h - .word 0Ah - .word 0Bh - .word 0Ch - .word 0Dh - .word 0Eh - .word 0Fh - .word 10h - .word 11h - .word 12h - .word 13h - .word 70h - .word 71h - .word 72h - .word 73h - .word 74h - .word 75h - .word 76h - .word 77h - .word 78h - .word 79h - .word 7Ah - .word 7Bh - .word 7Ch - .word 7Dh - .word 7Eh - .word 7Fh - .word 80h - .word 81h - .word 82h - .word 83h - .word 84h - .word 85h - .word 86h - .word 0F0h - .word 0F1h - .word 0F2h - .word 0F3h - .word 0F4h - .word 0F5h - .word 0F6h - .word 0F7h - .word 0F8h - .word 0F9h - .word 0FAh - .word 0FBh - .word 0FCh - .word 0FDh - .word 0FEh - .word 0FFh - .word 100h - .word 101h - .word 102h - .word 103h - .word 0FD2h - .word 0FD3h - .word 0FD4h - .word 0FD5h - .word 0FD6h - .word 0FD7h - .word 0FD8h - .word 0FD9h - .word 0FDAh - .word 0FDBh - .word 0FDCh - .word 0FDDh - .word 0FDEh - .word 0FDFh - .word 0FE0h - .word 0FE1h - .word 0FE2h - .word 0FE3h - .word 0FE4h - .word 0FE5h - .word 0FE6h - .word 0FE7h - .word 0FE8h - .word 0FE9h - .word 0FEAh - .word 0FEBh - .word 0FECh - .word 0FEDh - .word 0FEEh - .word 0FEFh - .word 0FF0h - .word 0FF1h - .word 0FF2h - .word 0FF3h - .word 0FF4h - .word 0FF5h - .word 0FF6h - .word 0FF7h - .word 0FF8h - .word 0FF9h - .word 0FFAh - .word 0FFBh - .word 0FFCh - .word 0FFDh - .word 0FFEh - .word 0FFFh - .word 1000h - .word 1001h - .word 1002h - .word 1003h - .word 1004h - .word 1005h - .word 1006h - .word 1007h - .word 1008h - .word 7FF0h - .word 7FF1h - .word 7FF2h - .word 7FF3h - .word 7FF4h - .word 7FF5h - .word 7FF6h - .word 7FF7h - .word 7FF8h - .word 7FF9h - .word 7FFAh - .word 7FFBh - .word 7FFCh - .word 7FFDh - .word 7FFEh - .word 7FFFh - .word 8000h - .word 8001h - .word 8002h - .word 8003h - .word 8004h - .word 8005h - .word 8006h - .word 8007h - .word 8008h - .word 8009h - .word 800Ah - .word 800Bh - .word 9FE1h - .word 9FE2h - .word 9FE3h - .word 9FE4h - .word 9FE5h - .word 9FE6h - .word 9FE7h - .word 9FE8h - .word 9FE9h - .word 9FEAh - .word 9FEBh - .word 9FECh - .word 9FEDh - .word 9FEEh - .word 9FEFh - .word 9FF0h - .word 9FF1h - .word 9FF2h - .word 9FF3h - .word 9FF4h - .word 9FF5h - .word 9FF6h - .word 9FF7h - .word 9FF8h - .word 9FF9h - .word 9FFAh - .word 9FFBh - .word 9FFCh - .word 9FFDh - .word 9FFEh - .word 9FFFh - .word 0A000h - .word 0A001h - .word 0A002h - .word 0A003h - .word 0A004h - .word 0A005h - .word 0A006h - .word 0A007h - .word 0A008h - .word 0A009h - .word 0A00Ah - .word 0A00Bh - .word 0A00Ch - .word 0A00Dh - .word 0A00Eh - .word 0A00Fh - .word 0AFE1h - .word 0AFE2h - .word 0AFE3h - .word 0AFE4h - .word 0AFE5h - .word 0AFE6h - .word 0AFE7h - .word 0AFE8h - .word 0AFE9h - .word 0AFEAh - .word 0AFEBh - .word 0AFECh - .word 0AFEDh - .word 0AFEEh - .word 0AFEFh - .word 0AFF0h - .word 0AFF1h - .word 0AFF2h - .word 0AFF3h - .word 0AFF4h - .word 0AFF5h - .word 0AFF6h - .word 0AFF7h - .word 0AFF8h - .word 0AFF9h - .word 0AFFAh - .word 0AFFBh - .word 0AFFCh - .word 0AFFDh - .word 0AFFEh - .word 0AFFFh - .word 0B000h - .word 0B001h - .word 0B002h - .word 0B003h - .word 0B004h - .word 0B005h - .word 0B006h - .word 0B007h - .word 0B008h - .word 0B009h - .word 0B00Ah - .word 0B00Bh - .word 0B00Ch - .word 0B00Dh - .word 0B00Eh - .word 0B00Fh - .word 0BFE1h - .word 0BFE2h - .word 0BFE3h - .word 0BFE4h - .word 0BFE5h - .word 0BFE6h - .word 0BFE7h - .word 0BFE8h - .word 0BFE9h - .word 0BFEAh - .word 0BFEBh - .word 0BFECh - .word 0BFEDh - .word 0BFEEh - .word 0BFEFh - .word 0BFF0h - .word 0BFF1h - .word 0BFF2h - .word 0BFF3h - .word 0BFF4h - .word 0BFF5h - .word 0BFF6h - .word 0BFF7h - .word 0BFF8h - .word 0BFF9h - .word 0BFFAh - .word 0BFFBh - .word 0BFFCh - .word 0BFFDh - .word 0BFFEh - .word 0BFFFh - .word 0C000h - .word 0C001h - .word 0C002h - .word 0C003h - .word 0C004h - .word 0C005h - .word 0C006h - .word 0C007h - .word 0C008h - .word 0C009h - .word 0C00Ah - .word 0C00Bh - .word 0C00Ch - .word 0C00Dh - .word 0C00Eh - .word 0C00Fh - .word 0CFE1h - .word 0CFE2h - .word 0CFE3h - .word 0CFE4h - .word 0CFE5h - .word 0CFE6h - .word 0CFE7h - .word 0CFE8h - .word 0CFE9h - .word 0CFEAh - .word 0CFEBh - .word 0CFECh - .word 0CFEDh - .word 0CFEEh - .word 0CFEFh - .word 0CFF0h - .word 0CFF1h - .word 0CFF2h - .word 0CFF3h - .word 0CFF4h - .word 0CFF5h - .word 0CFF6h - .word 0CFF7h - .word 0CFF8h - .word 0CFF9h - .word 0CFFAh - .word 0CFFBh - .word 0CFFCh - .word 0CFFDh - .word 0CFFEh - .word 0CFFFh - .word 0D000h - .word 0D001h - .word 0D002h - .word 0D003h - .word 0D004h - .word 0D005h - .word 0D006h - .word 0D007h - .word 0D008h - .word 0D009h - .word 0D00Ah - .word 0D00Bh - .word 0D00Ch - .word 0D00Dh - .word 0D00Eh - .word 0D00Fh - .word 0DFE1h - .word 0DFE2h - .word 0DFE3h - .word 0DFE4h - .word 0DFE5h - .word 0DFE6h - .word 0DFE7h - .word 0DFE8h - .word 0DFE9h - .word 0DFEAh - .word 0DFEBh - .word 0DFECh - .word 0DFEDh - .word 0DFEEh - .word 0DFEFh - .word 0DFF0h - .word 0DFF1h - .word 0DFF2h - .word 0DFF3h - .word 0DFF4h - .word 0DFF5h - .word 0DFF6h - .word 0DFF7h - .word 0DFF8h - .word 0DFF9h - .word 0DFFAh - .word 0DFFBh - .word 0DFFCh - .word 0DFFDh - .word 0DFFEh - .word 0DFFFh - .word 0E000h - .word 0E001h - .word 0E002h - .word 0E003h - .word 0E004h - .word 0E005h - .word 0E006h - .word 0E007h - .word 0E008h - .word 0E009h - .word 0E00Ah - .word 0E00Bh - .word 0E00Ch - .word 0E00Dh - .word 0E00Eh - .word 0E00Fh - .word 0EFE1h - .word 0EFE2h - .word 0EFE3h - .word 0EFE4h - .word 0EFE5h - .word 0EFE6h - .word 0EFE7h - .word 0EFE8h - .word 0EFE9h - .word 0EFEAh - .word 0EFEBh - .word 0EFECh - .word 0EFEDh - .word 0EFEEh - .word 0EFEFh - .word 0EFF0h - .word 0EFF1h - .word 0EFF2h - .word 0EFF3h - .word 0EFF4h - .word 0EFF5h - .word 0EFF6h - .word 0EFF7h - .word 0EFF8h - .word 0EFF9h - .word 0EFFAh - .word 0EFFBh - .word 0EFFCh - .word 0EFFDh - .word 0EFFEh - .word 0EFFFh - .word 0F000h - .word 0F001h - .word 0F002h - .word 0F003h - .word 0F004h - .word 0F005h - .word 0F006h - .word 0F007h - .word 0F008h - .word 0F009h - .word 0F00Ah - .word 0F00Bh - .word 0F00Ch - .word 0F00Dh - .word 0F00Eh - .word 0F00Fh - .word 0FFE1h - .word 0FFE2h - .word 0FFE3h - .word 0FFE4h - .word 0FFE5h - .word 0FFE6h - .word 0FFE7h - .word 0FFE8h - .word 0FFE9h - .word 0FFEAh - .word 0FFEBh - .word 0FFECh - .word 0FFEDh - .word 0FFEEh - .word 0FFEFh - .word 0FFF0h - .word 0FFF1h - .word 0FFF2h - .word 0FFF3h - .word 0FFF4h - .word 0FFF5h - .word 0FFF6h - .word 0FFF7h - .word 0FFF8h - .word 0FFF9h - .word 0FFFAh - .word 0FFFBh - .word 0FFFCh - .word 0FFFDh - .word 0FFFEh - .word 0FFFFh + ; alternative hex values, uppercase + .word 0h + .word 1h + .word 2h + .word 3h + .word 4h + .word 5h + .word 6h + .word 7h + .word 8h + .word 9h + .word 0Ah + .word 0Bh + .word 0Ch + .word 0Dh + .word 0Eh + .word 0Fh + .word 10h + .word 11h + .word 12h + .word 13h + .word 70h + .word 71h + .word 72h + .word 73h + .word 74h + .word 75h + .word 76h + .word 77h + .word 78h + .word 79h + .word 7Ah + .word 7Bh + .word 7Ch + .word 7Dh + .word 7Eh + .word 7Fh + .word 80h + .word 81h + .word 82h + .word 83h + .word 84h + .word 85h + .word 86h + .word 0F0h + .word 0F1h + .word 0F2h + .word 0F3h + .word 0F4h + .word 0F5h + .word 0F6h + .word 0F7h + .word 0F8h + .word 0F9h + .word 0FAh + .word 0FBh + .word 0FCh + .word 0FDh + .word 0FEh + .word 0FFh + .word 100h + .word 101h + .word 102h + .word 103h + .word 0FD2h + .word 0FD3h + .word 0FD4h + .word 0FD5h + .word 0FD6h + .word 0FD7h + .word 0FD8h + .word 0FD9h + .word 0FDAh + .word 0FDBh + .word 0FDCh + .word 0FDDh + .word 0FDEh + .word 0FDFh + .word 0FE0h + .word 0FE1h + .word 0FE2h + .word 0FE3h + .word 0FE4h + .word 0FE5h + .word 0FE6h + .word 0FE7h + .word 0FE8h + .word 0FE9h + .word 0FEAh + .word 0FEBh + .word 0FECh + .word 0FEDh + .word 0FEEh + .word 0FEFh + .word 0FF0h + .word 0FF1h + .word 0FF2h + .word 0FF3h + .word 0FF4h + .word 0FF5h + .word 0FF6h + .word 0FF7h + .word 0FF8h + .word 0FF9h + .word 0FFAh + .word 0FFBh + .word 0FFCh + .word 0FFDh + .word 0FFEh + .word 0FFFh + .word 1000h + .word 1001h + .word 1002h + .word 1003h + .word 1004h + .word 1005h + .word 1006h + .word 1007h + .word 1008h + .word 7FF0h + .word 7FF1h + .word 7FF2h + .word 7FF3h + .word 7FF4h + .word 7FF5h + .word 7FF6h + .word 7FF7h + .word 7FF8h + .word 7FF9h + .word 7FFAh + .word 7FFBh + .word 7FFCh + .word 7FFDh + .word 7FFEh + .word 7FFFh + .word 8000h + .word 8001h + .word 8002h + .word 8003h + .word 8004h + .word 8005h + .word 8006h + .word 8007h + .word 8008h + .word 8009h + .word 800Ah + .word 800Bh + .word 9FE1h + .word 9FE2h + .word 9FE3h + .word 9FE4h + .word 9FE5h + .word 9FE6h + .word 9FE7h + .word 9FE8h + .word 9FE9h + .word 9FEAh + .word 9FEBh + .word 9FECh + .word 9FEDh + .word 9FEEh + .word 9FEFh + .word 9FF0h + .word 9FF1h + .word 9FF2h + .word 9FF3h + .word 9FF4h + .word 9FF5h + .word 9FF6h + .word 9FF7h + .word 9FF8h + .word 9FF9h + .word 9FFAh + .word 9FFBh + .word 9FFCh + .word 9FFDh + .word 9FFEh + .word 9FFFh + .word 0A000h + .word 0A001h + .word 0A002h + .word 0A003h + .word 0A004h + .word 0A005h + .word 0A006h + .word 0A007h + .word 0A008h + .word 0A009h + .word 0A00Ah + .word 0A00Bh + .word 0A00Ch + .word 0A00Dh + .word 0A00Eh + .word 0A00Fh + .word 0AFE1h + .word 0AFE2h + .word 0AFE3h + .word 0AFE4h + .word 0AFE5h + .word 0AFE6h + .word 0AFE7h + .word 0AFE8h + .word 0AFE9h + .word 0AFEAh + .word 0AFEBh + .word 0AFECh + .word 0AFEDh + .word 0AFEEh + .word 0AFEFh + .word 0AFF0h + .word 0AFF1h + .word 0AFF2h + .word 0AFF3h + .word 0AFF4h + .word 0AFF5h + .word 0AFF6h + .word 0AFF7h + .word 0AFF8h + .word 0AFF9h + .word 0AFFAh + .word 0AFFBh + .word 0AFFCh + .word 0AFFDh + .word 0AFFEh + .word 0AFFFh + .word 0B000h + .word 0B001h + .word 0B002h + .word 0B003h + .word 0B004h + .word 0B005h + .word 0B006h + .word 0B007h + .word 0B008h + .word 0B009h + .word 0B00Ah + .word 0B00Bh + .word 0B00Ch + .word 0B00Dh + .word 0B00Eh + .word 0B00Fh + .word 0BFE1h + .word 0BFE2h + .word 0BFE3h + .word 0BFE4h + .word 0BFE5h + .word 0BFE6h + .word 0BFE7h + .word 0BFE8h + .word 0BFE9h + .word 0BFEAh + .word 0BFEBh + .word 0BFECh + .word 0BFEDh + .word 0BFEEh + .word 0BFEFh + .word 0BFF0h + .word 0BFF1h + .word 0BFF2h + .word 0BFF3h + .word 0BFF4h + .word 0BFF5h + .word 0BFF6h + .word 0BFF7h + .word 0BFF8h + .word 0BFF9h + .word 0BFFAh + .word 0BFFBh + .word 0BFFCh + .word 0BFFDh + .word 0BFFEh + .word 0BFFFh + .word 0C000h + .word 0C001h + .word 0C002h + .word 0C003h + .word 0C004h + .word 0C005h + .word 0C006h + .word 0C007h + .word 0C008h + .word 0C009h + .word 0C00Ah + .word 0C00Bh + .word 0C00Ch + .word 0C00Dh + .word 0C00Eh + .word 0C00Fh + .word 0CFE1h + .word 0CFE2h + .word 0CFE3h + .word 0CFE4h + .word 0CFE5h + .word 0CFE6h + .word 0CFE7h + .word 0CFE8h + .word 0CFE9h + .word 0CFEAh + .word 0CFEBh + .word 0CFECh + .word 0CFEDh + .word 0CFEEh + .word 0CFEFh + .word 0CFF0h + .word 0CFF1h + .word 0CFF2h + .word 0CFF3h + .word 0CFF4h + .word 0CFF5h + .word 0CFF6h + .word 0CFF7h + .word 0CFF8h + .word 0CFF9h + .word 0CFFAh + .word 0CFFBh + .word 0CFFCh + .word 0CFFDh + .word 0CFFEh + .word 0CFFFh + .word 0D000h + .word 0D001h + .word 0D002h + .word 0D003h + .word 0D004h + .word 0D005h + .word 0D006h + .word 0D007h + .word 0D008h + .word 0D009h + .word 0D00Ah + .word 0D00Bh + .word 0D00Ch + .word 0D00Dh + .word 0D00Eh + .word 0D00Fh + .word 0DFE1h + .word 0DFE2h + .word 0DFE3h + .word 0DFE4h + .word 0DFE5h + .word 0DFE6h + .word 0DFE7h + .word 0DFE8h + .word 0DFE9h + .word 0DFEAh + .word 0DFEBh + .word 0DFECh + .word 0DFEDh + .word 0DFEEh + .word 0DFEFh + .word 0DFF0h + .word 0DFF1h + .word 0DFF2h + .word 0DFF3h + .word 0DFF4h + .word 0DFF5h + .word 0DFF6h + .word 0DFF7h + .word 0DFF8h + .word 0DFF9h + .word 0DFFAh + .word 0DFFBh + .word 0DFFCh + .word 0DFFDh + .word 0DFFEh + .word 0DFFFh + .word 0E000h + .word 0E001h + .word 0E002h + .word 0E003h + .word 0E004h + .word 0E005h + .word 0E006h + .word 0E007h + .word 0E008h + .word 0E009h + .word 0E00Ah + .word 0E00Bh + .word 0E00Ch + .word 0E00Dh + .word 0E00Eh + .word 0E00Fh + .word 0EFE1h + .word 0EFE2h + .word 0EFE3h + .word 0EFE4h + .word 0EFE5h + .word 0EFE6h + .word 0EFE7h + .word 0EFE8h + .word 0EFE9h + .word 0EFEAh + .word 0EFEBh + .word 0EFECh + .word 0EFEDh + .word 0EFEEh + .word 0EFEFh + .word 0EFF0h + .word 0EFF1h + .word 0EFF2h + .word 0EFF3h + .word 0EFF4h + .word 0EFF5h + .word 0EFF6h + .word 0EFF7h + .word 0EFF8h + .word 0EFF9h + .word 0EFFAh + .word 0EFFBh + .word 0EFFCh + .word 0EFFDh + .word 0EFFEh + .word 0EFFFh + .word 0F000h + .word 0F001h + .word 0F002h + .word 0F003h + .word 0F004h + .word 0F005h + .word 0F006h + .word 0F007h + .word 0F008h + .word 0F009h + .word 0F00Ah + .word 0F00Bh + .word 0F00Ch + .word 0F00Dh + .word 0F00Eh + .word 0F00Fh + .word 0FFE1h + .word 0FFE2h + .word 0FFE3h + .word 0FFE4h + .word 0FFE5h + .word 0FFE6h + .word 0FFE7h + .word 0FFE8h + .word 0FFE9h + .word 0FFEAh + .word 0FFEBh + .word 0FFECh + .word 0FFEDh + .word 0FFEEh + .word 0FFEFh + .word 0FFF0h + .word 0FFF1h + .word 0FFF2h + .word 0FFF3h + .word 0FFF4h + .word 0FFF5h + .word 0FFF6h + .word 0FFF7h + .word 0FFF8h + .word 0FFF9h + .word 0FFFAh + .word 0FFFBh + .word 0FFFCh + .word 0FFFDh + .word 0FFFEh + .word 0FFFFh - ; alternative 4-digit hex values - .word 0000h - .word 0001h - .word 0002h - .word 0003h - .word 0004h - .word 0005h - .word 0006h - .word 0007h - .word 0008h - .word 0009h - .word 000ah - .word 000bh - .word 000ch - .word 000dh - .word 000eh - .word 000fh - .word 0010h - .word 0011h - .word 0012h - .word 0013h - .word 0070h - .word 0071h - .word 0072h - .word 0073h - .word 0074h - .word 0075h - .word 0076h - .word 0077h - .word 0078h - .word 0079h - .word 007ah - .word 007bh - .word 007ch - .word 007dh - .word 007eh - .word 007fh - .word 0080h - .word 0081h - .word 0082h - .word 0083h - .word 0084h - .word 0085h - .word 0086h - .word 00f0h - .word 00f1h - .word 00f2h - .word 00f3h - .word 00f4h - .word 00f5h - .word 00f6h - .word 00f7h - .word 00f8h - .word 00f9h - .word 00fah - .word 00fbh - .word 00fch - .word 00fdh - .word 00feh - .word 00ffh - .word 0100h - .word 0101h - .word 0102h - .word 0103h - .word 0fd2h - .word 0fd3h - .word 0fd4h - .word 0fd5h - .word 0fd6h - .word 0fd7h - .word 0fd8h - .word 0fd9h - .word 0fdah - .word 0fdbh - .word 0fdch - .word 0fddh - .word 0fdeh - .word 0fdfh - .word 0fe0h - .word 0fe1h - .word 0fe2h - .word 0fe3h - .word 0fe4h - .word 0fe5h - .word 0fe6h - .word 0fe7h - .word 0fe8h - .word 0fe9h - .word 0feah - .word 0febh - .word 0fech - .word 0fedh - .word 0feeh - .word 0fefh - .word 0ff0h - .word 0ff1h - .word 0ff2h - .word 0ff3h - .word 0ff4h - .word 0ff5h - .word 0ff6h - .word 0ff7h - .word 0ff8h - .word 0ff9h - .word 0ffah - .word 0ffbh - .word 0ffch - .word 0ffdh - .word 0ffeh - .word 0fffh - .word 1000h - .word 1001h - .word 1002h - .word 1003h - .word 1004h - .word 1005h - .word 1006h - .word 1007h - .word 1008h - .word 7ff0h - .word 7ff1h - .word 7ff2h - .word 7ff3h - .word 7ff4h - .word 7ff5h - .word 7ff6h - .word 7ff7h - .word 7ff8h - .word 7ff9h - .word 7ffah - .word 7ffbh - .word 7ffch - .word 7ffdh - .word 7ffeh - .word 7fffh - .word 8000h - .word 8001h - .word 8002h - .word 8003h - .word 8004h - .word 8005h - .word 8006h - .word 8007h - .word 8008h - .word 8009h - .word 800ah - .word 800bh - .word 9fe1h - .word 9fe2h - .word 9fe3h - .word 9fe4h - .word 9fe5h - .word 9fe6h - .word 9fe7h - .word 9fe8h - .word 9fe9h - .word 9feah - .word 9febh - .word 9fech - .word 9fedh - .word 9feeh - .word 9fefh - .word 9ff0h - .word 9ff1h - .word 9ff2h - .word 9ff3h - .word 9ff4h - .word 9ff5h - .word 9ff6h - .word 9ff7h - .word 9ff8h - .word 9ff9h - .word 9ffah - .word 9ffbh - .word 9ffch - .word 9ffdh - .word 9ffeh - .word 9fffh - .word 0a000h - .word 0a001h - .word 0a002h - .word 0a003h - .word 0a004h - .word 0a005h - .word 0a006h - .word 0a007h - .word 0a008h - .word 0a009h - .word 0a00ah - .word 0a00bh - .word 0a00ch - .word 0a00dh - .word 0a00eh - .word 0a00fh - .word 0afe1h - .word 0afe2h - .word 0afe3h - .word 0afe4h - .word 0afe5h - .word 0afe6h - .word 0afe7h - .word 0afe8h - .word 0afe9h - .word 0afeah - .word 0afebh - .word 0afech - .word 0afedh - .word 0afeeh - .word 0afefh - .word 0aff0h - .word 0aff1h - .word 0aff2h - .word 0aff3h - .word 0aff4h - .word 0aff5h - .word 0aff6h - .word 0aff7h - .word 0aff8h - .word 0aff9h - .word 0affah - .word 0affbh - .word 0affch - .word 0affdh - .word 0affeh - .word 0afffh - .word 0b000h - .word 0b001h - .word 0b002h - .word 0b003h - .word 0b004h - .word 0b005h - .word 0b006h - .word 0b007h - .word 0b008h - .word 0b009h - .word 0b00ah - .word 0b00bh - .word 0b00ch - .word 0b00dh - .word 0b00eh - .word 0b00fh - .word 0bfe1h - .word 0bfe2h - .word 0bfe3h - .word 0bfe4h - .word 0bfe5h - .word 0bfe6h - .word 0bfe7h - .word 0bfe8h - .word 0bfe9h - .word 0bfeah - .word 0bfebh - .word 0bfech - .word 0bfedh - .word 0bfeeh - .word 0bfefh - .word 0bff0h - .word 0bff1h - .word 0bff2h - .word 0bff3h - .word 0bff4h - .word 0bff5h - .word 0bff6h - .word 0bff7h - .word 0bff8h - .word 0bff9h - .word 0bffah - .word 0bffbh - .word 0bffch - .word 0bffdh - .word 0bffeh - .word 0bfffh - .word 0c000h - .word 0c001h - .word 0c002h - .word 0c003h - .word 0c004h - .word 0c005h - .word 0c006h - .word 0c007h - .word 0c008h - .word 0c009h - .word 0c00ah - .word 0c00bh - .word 0c00ch - .word 0c00dh - .word 0c00eh - .word 0c00fh - .word 0cfe1h - .word 0cfe2h - .word 0cfe3h - .word 0cfe4h - .word 0cfe5h - .word 0cfe6h - .word 0cfe7h - .word 0cfe8h - .word 0cfe9h - .word 0cfeah - .word 0cfebh - .word 0cfech - .word 0cfedh - .word 0cfeeh - .word 0cfefh - .word 0cff0h - .word 0cff1h - .word 0cff2h - .word 0cff3h - .word 0cff4h - .word 0cff5h - .word 0cff6h - .word 0cff7h - .word 0cff8h - .word 0cff9h - .word 0cffah - .word 0cffbh - .word 0cffch - .word 0cffdh - .word 0cffeh - .word 0cfffh - .word 0d000h - .word 0d001h - .word 0d002h - .word 0d003h - .word 0d004h - .word 0d005h - .word 0d006h - .word 0d007h - .word 0d008h - .word 0d009h - .word 0d00ah - .word 0d00bh - .word 0d00ch - .word 0d00dh - .word 0d00eh - .word 0d00fh - .word 0dfe1h - .word 0dfe2h - .word 0dfe3h - .word 0dfe4h - .word 0dfe5h - .word 0dfe6h - .word 0dfe7h - .word 0dfe8h - .word 0dfe9h - .word 0dfeah - .word 0dfebh - .word 0dfech - .word 0dfedh - .word 0dfeeh - .word 0dfefh - .word 0dff0h - .word 0dff1h - .word 0dff2h - .word 0dff3h - .word 0dff4h - .word 0dff5h - .word 0dff6h - .word 0dff7h - .word 0dff8h - .word 0dff9h - .word 0dffah - .word 0dffbh - .word 0dffch - .word 0dffdh - .word 0dffeh - .word 0dfffh - .word 0e000h - .word 0e001h - .word 0e002h - .word 0e003h - .word 0e004h - .word 0e005h - .word 0e006h - .word 0e007h - .word 0e008h - .word 0e009h - .word 0e00ah - .word 0e00bh - .word 0e00ch - .word 0e00dh - .word 0e00eh - .word 0e00fh - .word 0efe1h - .word 0efe2h - .word 0efe3h - .word 0efe4h - .word 0efe5h - .word 0efe6h - .word 0efe7h - .word 0efe8h - .word 0efe9h - .word 0efeah - .word 0efebh - .word 0efech - .word 0efedh - .word 0efeeh - .word 0efefh - .word 0eff0h - .word 0eff1h - .word 0eff2h - .word 0eff3h - .word 0eff4h - .word 0eff5h - .word 0eff6h - .word 0eff7h - .word 0eff8h - .word 0eff9h - .word 0effah - .word 0effbh - .word 0effch - .word 0effdh - .word 0effeh - .word 0efffh - .word 0f000h - .word 0f001h - .word 0f002h - .word 0f003h - .word 0f004h - .word 0f005h - .word 0f006h - .word 0f007h - .word 0f008h - .word 0f009h - .word 0f00ah - .word 0f00bh - .word 0f00ch - .word 0f00dh - .word 0f00eh - .word 0f00fh - .word 0ffe1h - .word 0ffe2h - .word 0ffe3h - .word 0ffe4h - .word 0ffe5h - .word 0ffe6h - .word 0ffe7h - .word 0ffe8h - .word 0ffe9h - .word 0ffeah - .word 0ffebh - .word 0ffech - .word 0ffedh - .word 0ffeeh - .word 0ffefh - .word 0fff0h - .word 0fff1h - .word 0fff2h - .word 0fff3h - .word 0fff4h - .word 0fff5h - .word 0fff6h - .word 0fff7h - .word 0fff8h - .word 0fff9h - .word 0fffah - .word 0fffbh - .word 0fffch - .word 0fffdh - .word 0fffeh - .word 0ffffh + ; alternative 4-digit hex values + .word 0000h + .word 0001h + .word 0002h + .word 0003h + .word 0004h + .word 0005h + .word 0006h + .word 0007h + .word 0008h + .word 0009h + .word 000ah + .word 000bh + .word 000ch + .word 000dh + .word 000eh + .word 000fh + .word 0010h + .word 0011h + .word 0012h + .word 0013h + .word 0070h + .word 0071h + .word 0072h + .word 0073h + .word 0074h + .word 0075h + .word 0076h + .word 0077h + .word 0078h + .word 0079h + .word 007ah + .word 007bh + .word 007ch + .word 007dh + .word 007eh + .word 007fh + .word 0080h + .word 0081h + .word 0082h + .word 0083h + .word 0084h + .word 0085h + .word 0086h + .word 00f0h + .word 00f1h + .word 00f2h + .word 00f3h + .word 00f4h + .word 00f5h + .word 00f6h + .word 00f7h + .word 00f8h + .word 00f9h + .word 00fah + .word 00fbh + .word 00fch + .word 00fdh + .word 00feh + .word 00ffh + .word 0100h + .word 0101h + .word 0102h + .word 0103h + .word 0fd2h + .word 0fd3h + .word 0fd4h + .word 0fd5h + .word 0fd6h + .word 0fd7h + .word 0fd8h + .word 0fd9h + .word 0fdah + .word 0fdbh + .word 0fdch + .word 0fddh + .word 0fdeh + .word 0fdfh + .word 0fe0h + .word 0fe1h + .word 0fe2h + .word 0fe3h + .word 0fe4h + .word 0fe5h + .word 0fe6h + .word 0fe7h + .word 0fe8h + .word 0fe9h + .word 0feah + .word 0febh + .word 0fech + .word 0fedh + .word 0feeh + .word 0fefh + .word 0ff0h + .word 0ff1h + .word 0ff2h + .word 0ff3h + .word 0ff4h + .word 0ff5h + .word 0ff6h + .word 0ff7h + .word 0ff8h + .word 0ff9h + .word 0ffah + .word 0ffbh + .word 0ffch + .word 0ffdh + .word 0ffeh + .word 0fffh + .word 1000h + .word 1001h + .word 1002h + .word 1003h + .word 1004h + .word 1005h + .word 1006h + .word 1007h + .word 1008h + .word 7ff0h + .word 7ff1h + .word 7ff2h + .word 7ff3h + .word 7ff4h + .word 7ff5h + .word 7ff6h + .word 7ff7h + .word 7ff8h + .word 7ff9h + .word 7ffah + .word 7ffbh + .word 7ffch + .word 7ffdh + .word 7ffeh + .word 7fffh + .word 8000h + .word 8001h + .word 8002h + .word 8003h + .word 8004h + .word 8005h + .word 8006h + .word 8007h + .word 8008h + .word 8009h + .word 800ah + .word 800bh + .word 9fe1h + .word 9fe2h + .word 9fe3h + .word 9fe4h + .word 9fe5h + .word 9fe6h + .word 9fe7h + .word 9fe8h + .word 9fe9h + .word 9feah + .word 9febh + .word 9fech + .word 9fedh + .word 9feeh + .word 9fefh + .word 9ff0h + .word 9ff1h + .word 9ff2h + .word 9ff3h + .word 9ff4h + .word 9ff5h + .word 9ff6h + .word 9ff7h + .word 9ff8h + .word 9ff9h + .word 9ffah + .word 9ffbh + .word 9ffch + .word 9ffdh + .word 9ffeh + .word 9fffh + .word 0a000h + .word 0a001h + .word 0a002h + .word 0a003h + .word 0a004h + .word 0a005h + .word 0a006h + .word 0a007h + .word 0a008h + .word 0a009h + .word 0a00ah + .word 0a00bh + .word 0a00ch + .word 0a00dh + .word 0a00eh + .word 0a00fh + .word 0afe1h + .word 0afe2h + .word 0afe3h + .word 0afe4h + .word 0afe5h + .word 0afe6h + .word 0afe7h + .word 0afe8h + .word 0afe9h + .word 0afeah + .word 0afebh + .word 0afech + .word 0afedh + .word 0afeeh + .word 0afefh + .word 0aff0h + .word 0aff1h + .word 0aff2h + .word 0aff3h + .word 0aff4h + .word 0aff5h + .word 0aff6h + .word 0aff7h + .word 0aff8h + .word 0aff9h + .word 0affah + .word 0affbh + .word 0affch + .word 0affdh + .word 0affeh + .word 0afffh + .word 0b000h + .word 0b001h + .word 0b002h + .word 0b003h + .word 0b004h + .word 0b005h + .word 0b006h + .word 0b007h + .word 0b008h + .word 0b009h + .word 0b00ah + .word 0b00bh + .word 0b00ch + .word 0b00dh + .word 0b00eh + .word 0b00fh + .word 0bfe1h + .word 0bfe2h + .word 0bfe3h + .word 0bfe4h + .word 0bfe5h + .word 0bfe6h + .word 0bfe7h + .word 0bfe8h + .word 0bfe9h + .word 0bfeah + .word 0bfebh + .word 0bfech + .word 0bfedh + .word 0bfeeh + .word 0bfefh + .word 0bff0h + .word 0bff1h + .word 0bff2h + .word 0bff3h + .word 0bff4h + .word 0bff5h + .word 0bff6h + .word 0bff7h + .word 0bff8h + .word 0bff9h + .word 0bffah + .word 0bffbh + .word 0bffch + .word 0bffdh + .word 0bffeh + .word 0bfffh + .word 0c000h + .word 0c001h + .word 0c002h + .word 0c003h + .word 0c004h + .word 0c005h + .word 0c006h + .word 0c007h + .word 0c008h + .word 0c009h + .word 0c00ah + .word 0c00bh + .word 0c00ch + .word 0c00dh + .word 0c00eh + .word 0c00fh + .word 0cfe1h + .word 0cfe2h + .word 0cfe3h + .word 0cfe4h + .word 0cfe5h + .word 0cfe6h + .word 0cfe7h + .word 0cfe8h + .word 0cfe9h + .word 0cfeah + .word 0cfebh + .word 0cfech + .word 0cfedh + .word 0cfeeh + .word 0cfefh + .word 0cff0h + .word 0cff1h + .word 0cff2h + .word 0cff3h + .word 0cff4h + .word 0cff5h + .word 0cff6h + .word 0cff7h + .word 0cff8h + .word 0cff9h + .word 0cffah + .word 0cffbh + .word 0cffch + .word 0cffdh + .word 0cffeh + .word 0cfffh + .word 0d000h + .word 0d001h + .word 0d002h + .word 0d003h + .word 0d004h + .word 0d005h + .word 0d006h + .word 0d007h + .word 0d008h + .word 0d009h + .word 0d00ah + .word 0d00bh + .word 0d00ch + .word 0d00dh + .word 0d00eh + .word 0d00fh + .word 0dfe1h + .word 0dfe2h + .word 0dfe3h + .word 0dfe4h + .word 0dfe5h + .word 0dfe6h + .word 0dfe7h + .word 0dfe8h + .word 0dfe9h + .word 0dfeah + .word 0dfebh + .word 0dfech + .word 0dfedh + .word 0dfeeh + .word 0dfefh + .word 0dff0h + .word 0dff1h + .word 0dff2h + .word 0dff3h + .word 0dff4h + .word 0dff5h + .word 0dff6h + .word 0dff7h + .word 0dff8h + .word 0dff9h + .word 0dffah + .word 0dffbh + .word 0dffch + .word 0dffdh + .word 0dffeh + .word 0dfffh + .word 0e000h + .word 0e001h + .word 0e002h + .word 0e003h + .word 0e004h + .word 0e005h + .word 0e006h + .word 0e007h + .word 0e008h + .word 0e009h + .word 0e00ah + .word 0e00bh + .word 0e00ch + .word 0e00dh + .word 0e00eh + .word 0e00fh + .word 0efe1h + .word 0efe2h + .word 0efe3h + .word 0efe4h + .word 0efe5h + .word 0efe6h + .word 0efe7h + .word 0efe8h + .word 0efe9h + .word 0efeah + .word 0efebh + .word 0efech + .word 0efedh + .word 0efeeh + .word 0efefh + .word 0eff0h + .word 0eff1h + .word 0eff2h + .word 0eff3h + .word 0eff4h + .word 0eff5h + .word 0eff6h + .word 0eff7h + .word 0eff8h + .word 0eff9h + .word 0effah + .word 0effbh + .word 0effch + .word 0effdh + .word 0effeh + .word 0efffh + .word 0f000h + .word 0f001h + .word 0f002h + .word 0f003h + .word 0f004h + .word 0f005h + .word 0f006h + .word 0f007h + .word 0f008h + .word 0f009h + .word 0f00ah + .word 0f00bh + .word 0f00ch + .word 0f00dh + .word 0f00eh + .word 0f00fh + .word 0ffe1h + .word 0ffe2h + .word 0ffe3h + .word 0ffe4h + .word 0ffe5h + .word 0ffe6h + .word 0ffe7h + .word 0ffe8h + .word 0ffe9h + .word 0ffeah + .word 0ffebh + .word 0ffech + .word 0ffedh + .word 0ffeeh + .word 0ffefh + .word 0fff0h + .word 0fff1h + .word 0fff2h + .word 0fff3h + .word 0fff4h + .word 0fff5h + .word 0fff6h + .word 0fff7h + .word 0fff8h + .word 0fff9h + .word 0fffah + .word 0fffbh + .word 0fffch + .word 0fffdh + .word 0fffeh + .word 0ffffh - ; alternative 4-digit hex values, uppercase - .word 0000h - .word 0001h - .word 0002h - .word 0003h - .word 0004h - .word 0005h - .word 0006h - .word 0007h - .word 0008h - .word 0009h - .word 000Ah - .word 000Bh - .word 000Ch - .word 000Dh - .word 000Eh - .word 000Fh - .word 0010h - .word 0011h - .word 0012h - .word 0013h - .word 0070h - .word 0071h - .word 0072h - .word 0073h - .word 0074h - .word 0075h - .word 0076h - .word 0077h - .word 0078h - .word 0079h - .word 007Ah - .word 007Bh - .word 007Ch - .word 007Dh - .word 007Eh - .word 007Fh - .word 0080h - .word 0081h - .word 0082h - .word 0083h - .word 0084h - .word 0085h - .word 0086h - .word 00F0h - .word 00F1h - .word 00F2h - .word 00F3h - .word 00F4h - .word 00F5h - .word 00F6h - .word 00F7h - .word 00F8h - .word 00F9h - .word 00FAh - .word 00FBh - .word 00FCh - .word 00FDh - .word 00FEh - .word 00FFh - .word 0100h - .word 0101h - .word 0102h - .word 0103h - .word 0FD2h - .word 0FD3h - .word 0FD4h - .word 0FD5h - .word 0FD6h - .word 0FD7h - .word 0FD8h - .word 0FD9h - .word 0FDAh - .word 0FDBh - .word 0FDCh - .word 0FDDh - .word 0FDEh - .word 0FDFh - .word 0FE0h - .word 0FE1h - .word 0FE2h - .word 0FE3h - .word 0FE4h - .word 0FE5h - .word 0FE6h - .word 0FE7h - .word 0FE8h - .word 0FE9h - .word 0FEAh - .word 0FEBh - .word 0FECh - .word 0FEDh - .word 0FEEh - .word 0FEFh - .word 0FF0h - .word 0FF1h - .word 0FF2h - .word 0FF3h - .word 0FF4h - .word 0FF5h - .word 0FF6h - .word 0FF7h - .word 0FF8h - .word 0FF9h - .word 0FFAh - .word 0FFBh - .word 0FFCh - .word 0FFDh - .word 0FFEh - .word 0FFFh - .word 1000h - .word 1001h - .word 1002h - .word 1003h - .word 1004h - .word 1005h - .word 1006h - .word 1007h - .word 1008h - .word 7FF0h - .word 7FF1h - .word 7FF2h - .word 7FF3h - .word 7FF4h - .word 7FF5h - .word 7FF6h - .word 7FF7h - .word 7FF8h - .word 7FF9h - .word 7FFAh - .word 7FFBh - .word 7FFCh - .word 7FFDh - .word 7FFEh - .word 7FFFh - .word 8000h - .word 8001h - .word 8002h - .word 8003h - .word 8004h - .word 8005h - .word 8006h - .word 8007h - .word 8008h - .word 8009h - .word 800Ah - .word 800Bh - .word 9FE1h - .word 9FE2h - .word 9FE3h - .word 9FE4h - .word 9FE5h - .word 9FE6h - .word 9FE7h - .word 9FE8h - .word 9FE9h - .word 9FEAh - .word 9FEBh - .word 9FECh - .word 9FEDh - .word 9FEEh - .word 9FEFh - .word 9FF0h - .word 9FF1h - .word 9FF2h - .word 9FF3h - .word 9FF4h - .word 9FF5h - .word 9FF6h - .word 9FF7h - .word 9FF8h - .word 9FF9h - .word 9FFAh - .word 9FFBh - .word 9FFCh - .word 9FFDh - .word 9FFEh - .word 9FFFh - .word 0A000h - .word 0A001h - .word 0A002h - .word 0A003h - .word 0A004h - .word 0A005h - .word 0A006h - .word 0A007h - .word 0A008h - .word 0A009h - .word 0A00Ah - .word 0A00Bh - .word 0A00Ch - .word 0A00Dh - .word 0A00Eh - .word 0A00Fh - .word 0AFE1h - .word 0AFE2h - .word 0AFE3h - .word 0AFE4h - .word 0AFE5h - .word 0AFE6h - .word 0AFE7h - .word 0AFE8h - .word 0AFE9h - .word 0AFEAh - .word 0AFEBh - .word 0AFECh - .word 0AFEDh - .word 0AFEEh - .word 0AFEFh - .word 0AFF0h - .word 0AFF1h - .word 0AFF2h - .word 0AFF3h - .word 0AFF4h - .word 0AFF5h - .word 0AFF6h - .word 0AFF7h - .word 0AFF8h - .word 0AFF9h - .word 0AFFAh - .word 0AFFBh - .word 0AFFCh - .word 0AFFDh - .word 0AFFEh - .word 0AFFFh - .word 0B000h - .word 0B001h - .word 0B002h - .word 0B003h - .word 0B004h - .word 0B005h - .word 0B006h - .word 0B007h - .word 0B008h - .word 0B009h - .word 0B00Ah - .word 0B00Bh - .word 0B00Ch - .word 0B00Dh - .word 0B00Eh - .word 0B00Fh - .word 0BFE1h - .word 0BFE2h - .word 0BFE3h - .word 0BFE4h - .word 0BFE5h - .word 0BFE6h - .word 0BFE7h - .word 0BFE8h - .word 0BFE9h - .word 0BFEAh - .word 0BFEBh - .word 0BFECh - .word 0BFEDh - .word 0BFEEh - .word 0BFEFh - .word 0BFF0h - .word 0BFF1h - .word 0BFF2h - .word 0BFF3h - .word 0BFF4h - .word 0BFF5h - .word 0BFF6h - .word 0BFF7h - .word 0BFF8h - .word 0BFF9h - .word 0BFFAh - .word 0BFFBh - .word 0BFFCh - .word 0BFFDh - .word 0BFFEh - .word 0BFFFh - .word 0C000h - .word 0C001h - .word 0C002h - .word 0C003h - .word 0C004h - .word 0C005h - .word 0C006h - .word 0C007h - .word 0C008h - .word 0C009h - .word 0C00Ah - .word 0C00Bh - .word 0C00Ch - .word 0C00Dh - .word 0C00Eh - .word 0C00Fh - .word 0CFE1h - .word 0CFE2h - .word 0CFE3h - .word 0CFE4h - .word 0CFE5h - .word 0CFE6h - .word 0CFE7h - .word 0CFE8h - .word 0CFE9h - .word 0CFEAh - .word 0CFEBh - .word 0CFECh - .word 0CFEDh - .word 0CFEEh - .word 0CFEFh - .word 0CFF0h - .word 0CFF1h - .word 0CFF2h - .word 0CFF3h - .word 0CFF4h - .word 0CFF5h - .word 0CFF6h - .word 0CFF7h - .word 0CFF8h - .word 0CFF9h - .word 0CFFAh - .word 0CFFBh - .word 0CFFCh - .word 0CFFDh - .word 0CFFEh - .word 0CFFFh - .word 0D000h - .word 0D001h - .word 0D002h - .word 0D003h - .word 0D004h - .word 0D005h - .word 0D006h - .word 0D007h - .word 0D008h - .word 0D009h - .word 0D00Ah - .word 0D00Bh - .word 0D00Ch - .word 0D00Dh - .word 0D00Eh - .word 0D00Fh - .word 0DFE1h - .word 0DFE2h - .word 0DFE3h - .word 0DFE4h - .word 0DFE5h - .word 0DFE6h - .word 0DFE7h - .word 0DFE8h - .word 0DFE9h - .word 0DFEAh - .word 0DFEBh - .word 0DFECh - .word 0DFEDh - .word 0DFEEh - .word 0DFEFh - .word 0DFF0h - .word 0DFF1h - .word 0DFF2h - .word 0DFF3h - .word 0DFF4h - .word 0DFF5h - .word 0DFF6h - .word 0DFF7h - .word 0DFF8h - .word 0DFF9h - .word 0DFFAh - .word 0DFFBh - .word 0DFFCh - .word 0DFFDh - .word 0DFFEh - .word 0DFFFh - .word 0E000h - .word 0E001h - .word 0E002h - .word 0E003h - .word 0E004h - .word 0E005h - .word 0E006h - .word 0E007h - .word 0E008h - .word 0E009h - .word 0E00Ah - .word 0E00Bh - .word 0E00Ch - .word 0E00Dh - .word 0E00Eh - .word 0E00Fh - .word 0EFE1h - .word 0EFE2h - .word 0EFE3h - .word 0EFE4h - .word 0EFE5h - .word 0EFE6h - .word 0EFE7h - .word 0EFE8h - .word 0EFE9h - .word 0EFEAh - .word 0EFEBh - .word 0EFECh - .word 0EFEDh - .word 0EFEEh - .word 0EFEFh - .word 0EFF0h - .word 0EFF1h - .word 0EFF2h - .word 0EFF3h - .word 0EFF4h - .word 0EFF5h - .word 0EFF6h - .word 0EFF7h - .word 0EFF8h - .word 0EFF9h - .word 0EFFAh - .word 0EFFBh - .word 0EFFCh - .word 0EFFDh - .word 0EFFEh - .word 0EFFFh - .word 0F000h - .word 0F001h - .word 0F002h - .word 0F003h - .word 0F004h - .word 0F005h - .word 0F006h - .word 0F007h - .word 0F008h - .word 0F009h - .word 0F00Ah - .word 0F00Bh - .word 0F00Ch - .word 0F00Dh - .word 0F00Eh - .word 0F00Fh - .word 0FFE1h - .word 0FFE2h - .word 0FFE3h - .word 0FFE4h - .word 0FFE5h - .word 0FFE6h - .word 0FFE7h - .word 0FFE8h - .word 0FFE9h - .word 0FFEAh - .word 0FFEBh - .word 0FFECh - .word 0FFEDh - .word 0FFEEh - .word 0FFEFh - .word 0FFF0h - .word 0FFF1h - .word 0FFF2h - .word 0FFF3h - .word 0FFF4h - .word 0FFF5h - .word 0FFF6h - .word 0FFF7h - .word 0FFF8h - .word 0FFF9h - .word 0FFFAh - .word 0FFFBh - .word 0FFFCh - .word 0FFFDh - .word 0FFFEh - .word 0FFFFh + ; alternative 4-digit hex values, uppercase + .word 0000h + .word 0001h + .word 0002h + .word 0003h + .word 0004h + .word 0005h + .word 0006h + .word 0007h + .word 0008h + .word 0009h + .word 000Ah + .word 000Bh + .word 000Ch + .word 000Dh + .word 000Eh + .word 000Fh + .word 0010h + .word 0011h + .word 0012h + .word 0013h + .word 0070h + .word 0071h + .word 0072h + .word 0073h + .word 0074h + .word 0075h + .word 0076h + .word 0077h + .word 0078h + .word 0079h + .word 007Ah + .word 007Bh + .word 007Ch + .word 007Dh + .word 007Eh + .word 007Fh + .word 0080h + .word 0081h + .word 0082h + .word 0083h + .word 0084h + .word 0085h + .word 0086h + .word 00F0h + .word 00F1h + .word 00F2h + .word 00F3h + .word 00F4h + .word 00F5h + .word 00F6h + .word 00F7h + .word 00F8h + .word 00F9h + .word 00FAh + .word 00FBh + .word 00FCh + .word 00FDh + .word 00FEh + .word 00FFh + .word 0100h + .word 0101h + .word 0102h + .word 0103h + .word 0FD2h + .word 0FD3h + .word 0FD4h + .word 0FD5h + .word 0FD6h + .word 0FD7h + .word 0FD8h + .word 0FD9h + .word 0FDAh + .word 0FDBh + .word 0FDCh + .word 0FDDh + .word 0FDEh + .word 0FDFh + .word 0FE0h + .word 0FE1h + .word 0FE2h + .word 0FE3h + .word 0FE4h + .word 0FE5h + .word 0FE6h + .word 0FE7h + .word 0FE8h + .word 0FE9h + .word 0FEAh + .word 0FEBh + .word 0FECh + .word 0FEDh + .word 0FEEh + .word 0FEFh + .word 0FF0h + .word 0FF1h + .word 0FF2h + .word 0FF3h + .word 0FF4h + .word 0FF5h + .word 0FF6h + .word 0FF7h + .word 0FF8h + .word 0FF9h + .word 0FFAh + .word 0FFBh + .word 0FFCh + .word 0FFDh + .word 0FFEh + .word 0FFFh + .word 1000h + .word 1001h + .word 1002h + .word 1003h + .word 1004h + .word 1005h + .word 1006h + .word 1007h + .word 1008h + .word 7FF0h + .word 7FF1h + .word 7FF2h + .word 7FF3h + .word 7FF4h + .word 7FF5h + .word 7FF6h + .word 7FF7h + .word 7FF8h + .word 7FF9h + .word 7FFAh + .word 7FFBh + .word 7FFCh + .word 7FFDh + .word 7FFEh + .word 7FFFh + .word 8000h + .word 8001h + .word 8002h + .word 8003h + .word 8004h + .word 8005h + .word 8006h + .word 8007h + .word 8008h + .word 8009h + .word 800Ah + .word 800Bh + .word 9FE1h + .word 9FE2h + .word 9FE3h + .word 9FE4h + .word 9FE5h + .word 9FE6h + .word 9FE7h + .word 9FE8h + .word 9FE9h + .word 9FEAh + .word 9FEBh + .word 9FECh + .word 9FEDh + .word 9FEEh + .word 9FEFh + .word 9FF0h + .word 9FF1h + .word 9FF2h + .word 9FF3h + .word 9FF4h + .word 9FF5h + .word 9FF6h + .word 9FF7h + .word 9FF8h + .word 9FF9h + .word 9FFAh + .word 9FFBh + .word 9FFCh + .word 9FFDh + .word 9FFEh + .word 9FFFh + .word 0A000h + .word 0A001h + .word 0A002h + .word 0A003h + .word 0A004h + .word 0A005h + .word 0A006h + .word 0A007h + .word 0A008h + .word 0A009h + .word 0A00Ah + .word 0A00Bh + .word 0A00Ch + .word 0A00Dh + .word 0A00Eh + .word 0A00Fh + .word 0AFE1h + .word 0AFE2h + .word 0AFE3h + .word 0AFE4h + .word 0AFE5h + .word 0AFE6h + .word 0AFE7h + .word 0AFE8h + .word 0AFE9h + .word 0AFEAh + .word 0AFEBh + .word 0AFECh + .word 0AFEDh + .word 0AFEEh + .word 0AFEFh + .word 0AFF0h + .word 0AFF1h + .word 0AFF2h + .word 0AFF3h + .word 0AFF4h + .word 0AFF5h + .word 0AFF6h + .word 0AFF7h + .word 0AFF8h + .word 0AFF9h + .word 0AFFAh + .word 0AFFBh + .word 0AFFCh + .word 0AFFDh + .word 0AFFEh + .word 0AFFFh + .word 0B000h + .word 0B001h + .word 0B002h + .word 0B003h + .word 0B004h + .word 0B005h + .word 0B006h + .word 0B007h + .word 0B008h + .word 0B009h + .word 0B00Ah + .word 0B00Bh + .word 0B00Ch + .word 0B00Dh + .word 0B00Eh + .word 0B00Fh + .word 0BFE1h + .word 0BFE2h + .word 0BFE3h + .word 0BFE4h + .word 0BFE5h + .word 0BFE6h + .word 0BFE7h + .word 0BFE8h + .word 0BFE9h + .word 0BFEAh + .word 0BFEBh + .word 0BFECh + .word 0BFEDh + .word 0BFEEh + .word 0BFEFh + .word 0BFF0h + .word 0BFF1h + .word 0BFF2h + .word 0BFF3h + .word 0BFF4h + .word 0BFF5h + .word 0BFF6h + .word 0BFF7h + .word 0BFF8h + .word 0BFF9h + .word 0BFFAh + .word 0BFFBh + .word 0BFFCh + .word 0BFFDh + .word 0BFFEh + .word 0BFFFh + .word 0C000h + .word 0C001h + .word 0C002h + .word 0C003h + .word 0C004h + .word 0C005h + .word 0C006h + .word 0C007h + .word 0C008h + .word 0C009h + .word 0C00Ah + .word 0C00Bh + .word 0C00Ch + .word 0C00Dh + .word 0C00Eh + .word 0C00Fh + .word 0CFE1h + .word 0CFE2h + .word 0CFE3h + .word 0CFE4h + .word 0CFE5h + .word 0CFE6h + .word 0CFE7h + .word 0CFE8h + .word 0CFE9h + .word 0CFEAh + .word 0CFEBh + .word 0CFECh + .word 0CFEDh + .word 0CFEEh + .word 0CFEFh + .word 0CFF0h + .word 0CFF1h + .word 0CFF2h + .word 0CFF3h + .word 0CFF4h + .word 0CFF5h + .word 0CFF6h + .word 0CFF7h + .word 0CFF8h + .word 0CFF9h + .word 0CFFAh + .word 0CFFBh + .word 0CFFCh + .word 0CFFDh + .word 0CFFEh + .word 0CFFFh + .word 0D000h + .word 0D001h + .word 0D002h + .word 0D003h + .word 0D004h + .word 0D005h + .word 0D006h + .word 0D007h + .word 0D008h + .word 0D009h + .word 0D00Ah + .word 0D00Bh + .word 0D00Ch + .word 0D00Dh + .word 0D00Eh + .word 0D00Fh + .word 0DFE1h + .word 0DFE2h + .word 0DFE3h + .word 0DFE4h + .word 0DFE5h + .word 0DFE6h + .word 0DFE7h + .word 0DFE8h + .word 0DFE9h + .word 0DFEAh + .word 0DFEBh + .word 0DFECh + .word 0DFEDh + .word 0DFEEh + .word 0DFEFh + .word 0DFF0h + .word 0DFF1h + .word 0DFF2h + .word 0DFF3h + .word 0DFF4h + .word 0DFF5h + .word 0DFF6h + .word 0DFF7h + .word 0DFF8h + .word 0DFF9h + .word 0DFFAh + .word 0DFFBh + .word 0DFFCh + .word 0DFFDh + .word 0DFFEh + .word 0DFFFh + .word 0E000h + .word 0E001h + .word 0E002h + .word 0E003h + .word 0E004h + .word 0E005h + .word 0E006h + .word 0E007h + .word 0E008h + .word 0E009h + .word 0E00Ah + .word 0E00Bh + .word 0E00Ch + .word 0E00Dh + .word 0E00Eh + .word 0E00Fh + .word 0EFE1h + .word 0EFE2h + .word 0EFE3h + .word 0EFE4h + .word 0EFE5h + .word 0EFE6h + .word 0EFE7h + .word 0EFE8h + .word 0EFE9h + .word 0EFEAh + .word 0EFEBh + .word 0EFECh + .word 0EFEDh + .word 0EFEEh + .word 0EFEFh + .word 0EFF0h + .word 0EFF1h + .word 0EFF2h + .word 0EFF3h + .word 0EFF4h + .word 0EFF5h + .word 0EFF6h + .word 0EFF7h + .word 0EFF8h + .word 0EFF9h + .word 0EFFAh + .word 0EFFBh + .word 0EFFCh + .word 0EFFDh + .word 0EFFEh + .word 0EFFFh + .word 0F000h + .word 0F001h + .word 0F002h + .word 0F003h + .word 0F004h + .word 0F005h + .word 0F006h + .word 0F007h + .word 0F008h + .word 0F009h + .word 0F00Ah + .word 0F00Bh + .word 0F00Ch + .word 0F00Dh + .word 0F00Eh + .word 0F00Fh + .word 0FFE1h + .word 0FFE2h + .word 0FFE3h + .word 0FFE4h + .word 0FFE5h + .word 0FFE6h + .word 0FFE7h + .word 0FFE8h + .word 0FFE9h + .word 0FFEAh + .word 0FFEBh + .word 0FFECh + .word 0FFEDh + .word 0FFEEh + .word 0FFEFh + .word 0FFF0h + .word 0FFF1h + .word 0FFF2h + .word 0FFF3h + .word 0FFF4h + .word 0FFF5h + .word 0FFF6h + .word 0FFF7h + .word 0FFF8h + .word 0FFF9h + .word 0FFFAh + .word 0FFFBh + .word 0FFFCh + .word 0FFFDh + .word 0FFFEh + .word 0FFFFh - ; alternative hex values, always leading zero - .word 00h - .word 01h - .word 02h - .word 03h - .word 04h - .word 05h - .word 06h - .word 07h - .word 08h - .word 09h - .word 0ah - .word 0bh - .word 0ch - .word 0dh - .word 0eh - .word 0fh - .word 010h - .word 011h - .word 012h - .word 013h - .word 070h - .word 071h - .word 072h - .word 073h - .word 074h - .word 075h - .word 076h - .word 077h - .word 078h - .word 079h - .word 07ah - .word 07bh - .word 07ch - .word 07dh - .word 07eh - .word 07fh - .word 080h - .word 081h - .word 082h - .word 083h - .word 084h - .word 085h - .word 086h - .word 0f0h - .word 0f1h - .word 0f2h - .word 0f3h - .word 0f4h - .word 0f5h - .word 0f6h - .word 0f7h - .word 0f8h - .word 0f9h - .word 0fah - .word 0fbh - .word 0fch - .word 0fdh - .word 0feh - .word 0ffh - .word 0100h - .word 0101h - .word 0102h - .word 0103h - .word 0fd2h - .word 0fd3h - .word 0fd4h - .word 0fd5h - .word 0fd6h - .word 0fd7h - .word 0fd8h - .word 0fd9h - .word 0fdah - .word 0fdbh - .word 0fdch - .word 0fddh - .word 0fdeh - .word 0fdfh - .word 0fe0h - .word 0fe1h - .word 0fe2h - .word 0fe3h - .word 0fe4h - .word 0fe5h - .word 0fe6h - .word 0fe7h - .word 0fe8h - .word 0fe9h - .word 0feah - .word 0febh - .word 0fech - .word 0fedh - .word 0feeh - .word 0fefh - .word 0ff0h - .word 0ff1h - .word 0ff2h - .word 0ff3h - .word 0ff4h - .word 0ff5h - .word 0ff6h - .word 0ff7h - .word 0ff8h - .word 0ff9h - .word 0ffah - .word 0ffbh - .word 0ffch - .word 0ffdh - .word 0ffeh - .word 0fffh - .word 01000h - .word 01001h - .word 01002h - .word 01003h - .word 01004h - .word 01005h - .word 01006h - .word 01007h - .word 01008h - .word 07ff0h - .word 07ff1h - .word 07ff2h - .word 07ff3h - .word 07ff4h - .word 07ff5h - .word 07ff6h - .word 07ff7h - .word 07ff8h - .word 07ff9h - .word 07ffah - .word 07ffbh - .word 07ffch - .word 07ffdh - .word 07ffeh - .word 07fffh - .word 08000h - .word 08001h - .word 08002h - .word 08003h - .word 08004h - .word 08005h - .word 08006h - .word 08007h - .word 08008h - .word 08009h - .word 0800ah - .word 0800bh - .word 09fe1h - .word 09fe2h - .word 09fe3h - .word 09fe4h - .word 09fe5h - .word 09fe6h - .word 09fe7h - .word 09fe8h - .word 09fe9h - .word 09feah - .word 09febh - .word 09fech - .word 09fedh - .word 09feeh - .word 09fefh - .word 09ff0h - .word 09ff1h - .word 09ff2h - .word 09ff3h - .word 09ff4h - .word 09ff5h - .word 09ff6h - .word 09ff7h - .word 09ff8h - .word 09ff9h - .word 09ffah - .word 09ffbh - .word 09ffch - .word 09ffdh - .word 09ffeh - .word 09fffh - .word 0a000h - .word 0a001h - .word 0a002h - .word 0a003h - .word 0a004h - .word 0a005h - .word 0a006h - .word 0a007h - .word 0a008h - .word 0a009h - .word 0a00ah - .word 0a00bh - .word 0a00ch - .word 0a00dh - .word 0a00eh - .word 0a00fh - .word 0afe1h - .word 0afe2h - .word 0afe3h - .word 0afe4h - .word 0afe5h - .word 0afe6h - .word 0afe7h - .word 0afe8h - .word 0afe9h - .word 0afeah - .word 0afebh - .word 0afech - .word 0afedh - .word 0afeeh - .word 0afefh - .word 0aff0h - .word 0aff1h - .word 0aff2h - .word 0aff3h - .word 0aff4h - .word 0aff5h - .word 0aff6h - .word 0aff7h - .word 0aff8h - .word 0aff9h - .word 0affah - .word 0affbh - .word 0affch - .word 0affdh - .word 0affeh - .word 0afffh - .word 0b000h - .word 0b001h - .word 0b002h - .word 0b003h - .word 0b004h - .word 0b005h - .word 0b006h - .word 0b007h - .word 0b008h - .word 0b009h - .word 0b00ah - .word 0b00bh - .word 0b00ch - .word 0b00dh - .word 0b00eh - .word 0b00fh - .word 0bfe1h - .word 0bfe2h - .word 0bfe3h - .word 0bfe4h - .word 0bfe5h - .word 0bfe6h - .word 0bfe7h - .word 0bfe8h - .word 0bfe9h - .word 0bfeah - .word 0bfebh - .word 0bfech - .word 0bfedh - .word 0bfeeh - .word 0bfefh - .word 0bff0h - .word 0bff1h - .word 0bff2h - .word 0bff3h - .word 0bff4h - .word 0bff5h - .word 0bff6h - .word 0bff7h - .word 0bff8h - .word 0bff9h - .word 0bffah - .word 0bffbh - .word 0bffch - .word 0bffdh - .word 0bffeh - .word 0bfffh - .word 0c000h - .word 0c001h - .word 0c002h - .word 0c003h - .word 0c004h - .word 0c005h - .word 0c006h - .word 0c007h - .word 0c008h - .word 0c009h - .word 0c00ah - .word 0c00bh - .word 0c00ch - .word 0c00dh - .word 0c00eh - .word 0c00fh - .word 0cfe1h - .word 0cfe2h - .word 0cfe3h - .word 0cfe4h - .word 0cfe5h - .word 0cfe6h - .word 0cfe7h - .word 0cfe8h - .word 0cfe9h - .word 0cfeah - .word 0cfebh - .word 0cfech - .word 0cfedh - .word 0cfeeh - .word 0cfefh - .word 0cff0h - .word 0cff1h - .word 0cff2h - .word 0cff3h - .word 0cff4h - .word 0cff5h - .word 0cff6h - .word 0cff7h - .word 0cff8h - .word 0cff9h - .word 0cffah - .word 0cffbh - .word 0cffch - .word 0cffdh - .word 0cffeh - .word 0cfffh - .word 0d000h - .word 0d001h - .word 0d002h - .word 0d003h - .word 0d004h - .word 0d005h - .word 0d006h - .word 0d007h - .word 0d008h - .word 0d009h - .word 0d00ah - .word 0d00bh - .word 0d00ch - .word 0d00dh - .word 0d00eh - .word 0d00fh - .word 0dfe1h - .word 0dfe2h - .word 0dfe3h - .word 0dfe4h - .word 0dfe5h - .word 0dfe6h - .word 0dfe7h - .word 0dfe8h - .word 0dfe9h - .word 0dfeah - .word 0dfebh - .word 0dfech - .word 0dfedh - .word 0dfeeh - .word 0dfefh - .word 0dff0h - .word 0dff1h - .word 0dff2h - .word 0dff3h - .word 0dff4h - .word 0dff5h - .word 0dff6h - .word 0dff7h - .word 0dff8h - .word 0dff9h - .word 0dffah - .word 0dffbh - .word 0dffch - .word 0dffdh - .word 0dffeh - .word 0dfffh - .word 0e000h - .word 0e001h - .word 0e002h - .word 0e003h - .word 0e004h - .word 0e005h - .word 0e006h - .word 0e007h - .word 0e008h - .word 0e009h - .word 0e00ah - .word 0e00bh - .word 0e00ch - .word 0e00dh - .word 0e00eh - .word 0e00fh - .word 0efe1h - .word 0efe2h - .word 0efe3h - .word 0efe4h - .word 0efe5h - .word 0efe6h - .word 0efe7h - .word 0efe8h - .word 0efe9h - .word 0efeah - .word 0efebh - .word 0efech - .word 0efedh - .word 0efeeh - .word 0efefh - .word 0eff0h - .word 0eff1h - .word 0eff2h - .word 0eff3h - .word 0eff4h - .word 0eff5h - .word 0eff6h - .word 0eff7h - .word 0eff8h - .word 0eff9h - .word 0effah - .word 0effbh - .word 0effch - .word 0effdh - .word 0effeh - .word 0efffh - .word 0f000h - .word 0f001h - .word 0f002h - .word 0f003h - .word 0f004h - .word 0f005h - .word 0f006h - .word 0f007h - .word 0f008h - .word 0f009h - .word 0f00ah - .word 0f00bh - .word 0f00ch - .word 0f00dh - .word 0f00eh - .word 0f00fh - .word 0ffe1h - .word 0ffe2h - .word 0ffe3h - .word 0ffe4h - .word 0ffe5h - .word 0ffe6h - .word 0ffe7h - .word 0ffe8h - .word 0ffe9h - .word 0ffeah - .word 0ffebh - .word 0ffech - .word 0ffedh - .word 0ffeeh - .word 0ffefh - .word 0fff0h - .word 0fff1h - .word 0fff2h - .word 0fff3h - .word 0fff4h - .word 0fff5h - .word 0fff6h - .word 0fff7h - .word 0fff8h - .word 0fff9h - .word 0fffah - .word 0fffbh - .word 0fffch - .word 0fffdh - .word 0fffeh - .word 0ffffh + ; alternative hex values, always leading zero + .word 00h + .word 01h + .word 02h + .word 03h + .word 04h + .word 05h + .word 06h + .word 07h + .word 08h + .word 09h + .word 0ah + .word 0bh + .word 0ch + .word 0dh + .word 0eh + .word 0fh + .word 010h + .word 011h + .word 012h + .word 013h + .word 070h + .word 071h + .word 072h + .word 073h + .word 074h + .word 075h + .word 076h + .word 077h + .word 078h + .word 079h + .word 07ah + .word 07bh + .word 07ch + .word 07dh + .word 07eh + .word 07fh + .word 080h + .word 081h + .word 082h + .word 083h + .word 084h + .word 085h + .word 086h + .word 0f0h + .word 0f1h + .word 0f2h + .word 0f3h + .word 0f4h + .word 0f5h + .word 0f6h + .word 0f7h + .word 0f8h + .word 0f9h + .word 0fah + .word 0fbh + .word 0fch + .word 0fdh + .word 0feh + .word 0ffh + .word 0100h + .word 0101h + .word 0102h + .word 0103h + .word 0fd2h + .word 0fd3h + .word 0fd4h + .word 0fd5h + .word 0fd6h + .word 0fd7h + .word 0fd8h + .word 0fd9h + .word 0fdah + .word 0fdbh + .word 0fdch + .word 0fddh + .word 0fdeh + .word 0fdfh + .word 0fe0h + .word 0fe1h + .word 0fe2h + .word 0fe3h + .word 0fe4h + .word 0fe5h + .word 0fe6h + .word 0fe7h + .word 0fe8h + .word 0fe9h + .word 0feah + .word 0febh + .word 0fech + .word 0fedh + .word 0feeh + .word 0fefh + .word 0ff0h + .word 0ff1h + .word 0ff2h + .word 0ff3h + .word 0ff4h + .word 0ff5h + .word 0ff6h + .word 0ff7h + .word 0ff8h + .word 0ff9h + .word 0ffah + .word 0ffbh + .word 0ffch + .word 0ffdh + .word 0ffeh + .word 0fffh + .word 01000h + .word 01001h + .word 01002h + .word 01003h + .word 01004h + .word 01005h + .word 01006h + .word 01007h + .word 01008h + .word 07ff0h + .word 07ff1h + .word 07ff2h + .word 07ff3h + .word 07ff4h + .word 07ff5h + .word 07ff6h + .word 07ff7h + .word 07ff8h + .word 07ff9h + .word 07ffah + .word 07ffbh + .word 07ffch + .word 07ffdh + .word 07ffeh + .word 07fffh + .word 08000h + .word 08001h + .word 08002h + .word 08003h + .word 08004h + .word 08005h + .word 08006h + .word 08007h + .word 08008h + .word 08009h + .word 0800ah + .word 0800bh + .word 09fe1h + .word 09fe2h + .word 09fe3h + .word 09fe4h + .word 09fe5h + .word 09fe6h + .word 09fe7h + .word 09fe8h + .word 09fe9h + .word 09feah + .word 09febh + .word 09fech + .word 09fedh + .word 09feeh + .word 09fefh + .word 09ff0h + .word 09ff1h + .word 09ff2h + .word 09ff3h + .word 09ff4h + .word 09ff5h + .word 09ff6h + .word 09ff7h + .word 09ff8h + .word 09ff9h + .word 09ffah + .word 09ffbh + .word 09ffch + .word 09ffdh + .word 09ffeh + .word 09fffh + .word 0a000h + .word 0a001h + .word 0a002h + .word 0a003h + .word 0a004h + .word 0a005h + .word 0a006h + .word 0a007h + .word 0a008h + .word 0a009h + .word 0a00ah + .word 0a00bh + .word 0a00ch + .word 0a00dh + .word 0a00eh + .word 0a00fh + .word 0afe1h + .word 0afe2h + .word 0afe3h + .word 0afe4h + .word 0afe5h + .word 0afe6h + .word 0afe7h + .word 0afe8h + .word 0afe9h + .word 0afeah + .word 0afebh + .word 0afech + .word 0afedh + .word 0afeeh + .word 0afefh + .word 0aff0h + .word 0aff1h + .word 0aff2h + .word 0aff3h + .word 0aff4h + .word 0aff5h + .word 0aff6h + .word 0aff7h + .word 0aff8h + .word 0aff9h + .word 0affah + .word 0affbh + .word 0affch + .word 0affdh + .word 0affeh + .word 0afffh + .word 0b000h + .word 0b001h + .word 0b002h + .word 0b003h + .word 0b004h + .word 0b005h + .word 0b006h + .word 0b007h + .word 0b008h + .word 0b009h + .word 0b00ah + .word 0b00bh + .word 0b00ch + .word 0b00dh + .word 0b00eh + .word 0b00fh + .word 0bfe1h + .word 0bfe2h + .word 0bfe3h + .word 0bfe4h + .word 0bfe5h + .word 0bfe6h + .word 0bfe7h + .word 0bfe8h + .word 0bfe9h + .word 0bfeah + .word 0bfebh + .word 0bfech + .word 0bfedh + .word 0bfeeh + .word 0bfefh + .word 0bff0h + .word 0bff1h + .word 0bff2h + .word 0bff3h + .word 0bff4h + .word 0bff5h + .word 0bff6h + .word 0bff7h + .word 0bff8h + .word 0bff9h + .word 0bffah + .word 0bffbh + .word 0bffch + .word 0bffdh + .word 0bffeh + .word 0bfffh + .word 0c000h + .word 0c001h + .word 0c002h + .word 0c003h + .word 0c004h + .word 0c005h + .word 0c006h + .word 0c007h + .word 0c008h + .word 0c009h + .word 0c00ah + .word 0c00bh + .word 0c00ch + .word 0c00dh + .word 0c00eh + .word 0c00fh + .word 0cfe1h + .word 0cfe2h + .word 0cfe3h + .word 0cfe4h + .word 0cfe5h + .word 0cfe6h + .word 0cfe7h + .word 0cfe8h + .word 0cfe9h + .word 0cfeah + .word 0cfebh + .word 0cfech + .word 0cfedh + .word 0cfeeh + .word 0cfefh + .word 0cff0h + .word 0cff1h + .word 0cff2h + .word 0cff3h + .word 0cff4h + .word 0cff5h + .word 0cff6h + .word 0cff7h + .word 0cff8h + .word 0cff9h + .word 0cffah + .word 0cffbh + .word 0cffch + .word 0cffdh + .word 0cffeh + .word 0cfffh + .word 0d000h + .word 0d001h + .word 0d002h + .word 0d003h + .word 0d004h + .word 0d005h + .word 0d006h + .word 0d007h + .word 0d008h + .word 0d009h + .word 0d00ah + .word 0d00bh + .word 0d00ch + .word 0d00dh + .word 0d00eh + .word 0d00fh + .word 0dfe1h + .word 0dfe2h + .word 0dfe3h + .word 0dfe4h + .word 0dfe5h + .word 0dfe6h + .word 0dfe7h + .word 0dfe8h + .word 0dfe9h + .word 0dfeah + .word 0dfebh + .word 0dfech + .word 0dfedh + .word 0dfeeh + .word 0dfefh + .word 0dff0h + .word 0dff1h + .word 0dff2h + .word 0dff3h + .word 0dff4h + .word 0dff5h + .word 0dff6h + .word 0dff7h + .word 0dff8h + .word 0dff9h + .word 0dffah + .word 0dffbh + .word 0dffch + .word 0dffdh + .word 0dffeh + .word 0dfffh + .word 0e000h + .word 0e001h + .word 0e002h + .word 0e003h + .word 0e004h + .word 0e005h + .word 0e006h + .word 0e007h + .word 0e008h + .word 0e009h + .word 0e00ah + .word 0e00bh + .word 0e00ch + .word 0e00dh + .word 0e00eh + .word 0e00fh + .word 0efe1h + .word 0efe2h + .word 0efe3h + .word 0efe4h + .word 0efe5h + .word 0efe6h + .word 0efe7h + .word 0efe8h + .word 0efe9h + .word 0efeah + .word 0efebh + .word 0efech + .word 0efedh + .word 0efeeh + .word 0efefh + .word 0eff0h + .word 0eff1h + .word 0eff2h + .word 0eff3h + .word 0eff4h + .word 0eff5h + .word 0eff6h + .word 0eff7h + .word 0eff8h + .word 0eff9h + .word 0effah + .word 0effbh + .word 0effch + .word 0effdh + .word 0effeh + .word 0efffh + .word 0f000h + .word 0f001h + .word 0f002h + .word 0f003h + .word 0f004h + .word 0f005h + .word 0f006h + .word 0f007h + .word 0f008h + .word 0f009h + .word 0f00ah + .word 0f00bh + .word 0f00ch + .word 0f00dh + .word 0f00eh + .word 0f00fh + .word 0ffe1h + .word 0ffe2h + .word 0ffe3h + .word 0ffe4h + .word 0ffe5h + .word 0ffe6h + .word 0ffe7h + .word 0ffe8h + .word 0ffe9h + .word 0ffeah + .word 0ffebh + .word 0ffech + .word 0ffedh + .word 0ffeeh + .word 0ffefh + .word 0fff0h + .word 0fff1h + .word 0fff2h + .word 0fff3h + .word 0fff4h + .word 0fff5h + .word 0fff6h + .word 0fff7h + .word 0fff8h + .word 0fff9h + .word 0fffah + .word 0fffbh + .word 0fffch + .word 0fffdh + .word 0fffeh + .word 0ffffh - ; binary values, variable length - .word %0 - .word %01 - .word %010 - .word %011 - .word %0100 - .word %0101 - .word %0110 - .word %0111 - .word %01000 - .word %01001 - .word %01010 - .word %01011 - .word %01100 - .word %01101 - .word %01110 - .word %01111 - .word %010000 - .word %010001 - .word %010010 - .word %010011 - .word %01110000 - .word %01110001 - .word %01110010 - .word %01110011 - .word %01110100 - .word %01110101 - .word %01110110 - .word %01110111 - .word %01111000 - .word %01111001 - .word %01111010 - .word %01111011 - .word %01111100 - .word %01111101 - .word %01111110 - .word %01111111 - .word %010000000 - .word %010000001 - .word %010000010 - .word %010000011 - .word %010000100 - .word %010000101 - .word %010000110 - .word %011110000 - .word %011110001 - .word %011110010 - .word %011110011 - .word %011110100 - .word %011110101 - .word %011110110 - .word %011110111 - .word %011111000 - .word %011111001 - .word %011111010 - .word %011111011 - .word %011111100 - .word %011111101 - .word %011111110 - .word %011111111 - .word %100000000 - .word %100000001 - .word %100000010 - .word %100000011 - .word %111111010010 - .word %111111010011 - .word %111111010100 - .word %111111010101 - .word %111111010110 - .word %111111010111 - .word %111111011000 - .word %111111011001 - .word %111111011010 - .word %111111011011 - .word %111111011100 - .word %111111011101 - .word %111111011110 - .word %111111011111 - .word %111111100000 - .word %111111100001 - .word %111111100010 - .word %111111100011 - .word %111111100100 - .word %111111100101 - .word %111111100110 - .word %111111100111 - .word %111111101000 - .word %111111101001 - .word %111111101010 - .word %111111101011 - .word %111111101100 - .word %111111101101 - .word %111111101110 - .word %111111101111 - .word %111111110000 - .word %111111110001 - .word %111111110010 - .word %111111110011 - .word %111111110100 - .word %111111110101 - .word %111111110110 - .word %111111110111 - .word %111111111000 - .word %111111111001 - .word %111111111010 - .word %111111111011 - .word %111111111100 - .word %111111111101 - .word %111111111110 - .word %111111111111 - .word %1000000000000 - .word %1000000000001 - .word %1000000000010 - .word %1000000000011 - .word %1000000000100 - .word %1000000000101 - .word %1000000000110 - .word %1000000000111 - .word %1000000001000 - .word %111111111110000 - .word %111111111110001 - .word %111111111110010 - .word %111111111110011 - .word %111111111110100 - .word %111111111110101 - .word %111111111110110 - .word %111111111110111 - .word %111111111111000 - .word %111111111111001 - .word %111111111111010 - .word %111111111111011 - .word %111111111111100 - .word %111111111111101 - .word %111111111111110 - .word %111111111111111 - .word %1000000000000000 - .word %1000000000000001 - .word %1000000000000010 - .word %1000000000000011 - .word %1000000000000100 - .word %1000000000000101 - .word %1000000000000110 - .word %1000000000000111 - .word %1000000000001000 - .word %1000000000001001 - .word %1000000000001010 - .word %1000000000001011 - .word %1001111111100001 - .word %1001111111100010 - .word %1001111111100011 - .word %1001111111100100 - .word %1001111111100101 - .word %1001111111100110 - .word %1001111111100111 - .word %1001111111101000 - .word %1001111111101001 - .word %1001111111101010 - .word %1001111111101011 - .word %1001111111101100 - .word %1001111111101101 - .word %1001111111101110 - .word %1001111111101111 - .word %1001111111110000 - .word %1001111111110001 - .word %1001111111110010 - .word %1001111111110011 - .word %1001111111110100 - .word %1001111111110101 - .word %1001111111110110 - .word %1001111111110111 - .word %1001111111111000 - .word %1001111111111001 - .word %1001111111111010 - .word %1001111111111011 - .word %1001111111111100 - .word %1001111111111101 - .word %1001111111111110 - .word %1001111111111111 - .word %1010000000000000 - .word %1010000000000001 - .word %1010000000000010 - .word %1010000000000011 - .word %1010000000000100 - .word %1010000000000101 - .word %1010000000000110 - .word %1010000000000111 - .word %1010000000001000 - .word %1010000000001001 - .word %1010000000001010 - .word %1010000000001011 - .word %1010000000001100 - .word %1010000000001101 - .word %1010000000001110 - .word %1010000000001111 - .word %1010111111100001 - .word %1010111111100010 - .word %1010111111100011 - .word %1010111111100100 - .word %1010111111100101 - .word %1010111111100110 - .word %1010111111100111 - .word %1010111111101000 - .word %1010111111101001 - .word %1010111111101010 - .word %1010111111101011 - .word %1010111111101100 - .word %1010111111101101 - .word %1010111111101110 - .word %1010111111101111 - .word %1010111111110000 - .word %1010111111110001 - .word %1010111111110010 - .word %1010111111110011 - .word %1010111111110100 - .word %1010111111110101 - .word %1010111111110110 - .word %1010111111110111 - .word %1010111111111000 - .word %1010111111111001 - .word %1010111111111010 - .word %1010111111111011 - .word %1010111111111100 - .word %1010111111111101 - .word %1010111111111110 - .word %1010111111111111 - .word %1011000000000000 - .word %1011000000000001 - .word %1011000000000010 - .word %1011000000000011 - .word %1011000000000100 - .word %1011000000000101 - .word %1011000000000110 - .word %1011000000000111 - .word %1011000000001000 - .word %1011000000001001 - .word %1011000000001010 - .word %1011000000001011 - .word %1011000000001100 - .word %1011000000001101 - .word %1011000000001110 - .word %1011000000001111 - .word %1011111111100001 - .word %1011111111100010 - .word %1011111111100011 - .word %1011111111100100 - .word %1011111111100101 - .word %1011111111100110 - .word %1011111111100111 - .word %1011111111101000 - .word %1011111111101001 - .word %1011111111101010 - .word %1011111111101011 - .word %1011111111101100 - .word %1011111111101101 - .word %1011111111101110 - .word %1011111111101111 - .word %1011111111110000 - .word %1011111111110001 - .word %1011111111110010 - .word %1011111111110011 - .word %1011111111110100 - .word %1011111111110101 - .word %1011111111110110 - .word %1011111111110111 - .word %1011111111111000 - .word %1011111111111001 - .word %1011111111111010 - .word %1011111111111011 - .word %1011111111111100 - .word %1011111111111101 - .word %1011111111111110 - .word %1011111111111111 - .word %1100000000000000 - .word %1100000000000001 - .word %1100000000000010 - .word %1100000000000011 - .word %1100000000000100 - .word %1100000000000101 - .word %1100000000000110 - .word %1100000000000111 - .word %1100000000001000 - .word %1100000000001001 - .word %1100000000001010 - .word %1100000000001011 - .word %1100000000001100 - .word %1100000000001101 - .word %1100000000001110 - .word %1100000000001111 - .word %1100111111100001 - .word %1100111111100010 - .word %1100111111100011 - .word %1100111111100100 - .word %1100111111100101 - .word %1100111111100110 - .word %1100111111100111 - .word %1100111111101000 - .word %1100111111101001 - .word %1100111111101010 - .word %1100111111101011 - .word %1100111111101100 - .word %1100111111101101 - .word %1100111111101110 - .word %1100111111101111 - .word %1100111111110000 - .word %1100111111110001 - .word %1100111111110010 - .word %1100111111110011 - .word %1100111111110100 - .word %1100111111110101 - .word %1100111111110110 - .word %1100111111110111 - .word %1100111111111000 - .word %1100111111111001 - .word %1100111111111010 - .word %1100111111111011 - .word %1100111111111100 - .word %1100111111111101 - .word %1100111111111110 - .word %1100111111111111 - .word %1101000000000000 - .word %1101000000000001 - .word %1101000000000010 - .word %1101000000000011 - .word %1101000000000100 - .word %1101000000000101 - .word %1101000000000110 - .word %1101000000000111 - .word %1101000000001000 - .word %1101000000001001 - .word %1101000000001010 - .word %1101000000001011 - .word %1101000000001100 - .word %1101000000001101 - .word %1101000000001110 - .word %1101000000001111 - .word %1101111111100001 - .word %1101111111100010 - .word %1101111111100011 - .word %1101111111100100 - .word %1101111111100101 - .word %1101111111100110 - .word %1101111111100111 - .word %1101111111101000 - .word %1101111111101001 - .word %1101111111101010 - .word %1101111111101011 - .word %1101111111101100 - .word %1101111111101101 - .word %1101111111101110 - .word %1101111111101111 - .word %1101111111110000 - .word %1101111111110001 - .word %1101111111110010 - .word %1101111111110011 - .word %1101111111110100 - .word %1101111111110101 - .word %1101111111110110 - .word %1101111111110111 - .word %1101111111111000 - .word %1101111111111001 - .word %1101111111111010 - .word %1101111111111011 - .word %1101111111111100 - .word %1101111111111101 - .word %1101111111111110 - .word %1101111111111111 - .word %1110000000000000 - .word %1110000000000001 - .word %1110000000000010 - .word %1110000000000011 - .word %1110000000000100 - .word %1110000000000101 - .word %1110000000000110 - .word %1110000000000111 - .word %1110000000001000 - .word %1110000000001001 - .word %1110000000001010 - .word %1110000000001011 - .word %1110000000001100 - .word %1110000000001101 - .word %1110000000001110 - .word %1110000000001111 - .word %1110111111100001 - .word %1110111111100010 - .word %1110111111100011 - .word %1110111111100100 - .word %1110111111100101 - .word %1110111111100110 - .word %1110111111100111 - .word %1110111111101000 - .word %1110111111101001 - .word %1110111111101010 - .word %1110111111101011 - .word %1110111111101100 - .word %1110111111101101 - .word %1110111111101110 - .word %1110111111101111 - .word %1110111111110000 - .word %1110111111110001 - .word %1110111111110010 - .word %1110111111110011 - .word %1110111111110100 - .word %1110111111110101 - .word %1110111111110110 - .word %1110111111110111 - .word %1110111111111000 - .word %1110111111111001 - .word %1110111111111010 - .word %1110111111111011 - .word %1110111111111100 - .word %1110111111111101 - .word %1110111111111110 - .word %1110111111111111 - .word %1111000000000000 - .word %1111000000000001 - .word %1111000000000010 - .word %1111000000000011 - .word %1111000000000100 - .word %1111000000000101 - .word %1111000000000110 - .word %1111000000000111 - .word %1111000000001000 - .word %1111000000001001 - .word %1111000000001010 - .word %1111000000001011 - .word %1111000000001100 - .word %1111000000001101 - .word %1111000000001110 - .word %1111000000001111 - .word %1111111111100001 - .word %1111111111100010 - .word %1111111111100011 - .word %1111111111100100 - .word %1111111111100101 - .word %1111111111100110 - .word %1111111111100111 - .word %1111111111101000 - .word %1111111111101001 - .word %1111111111101010 - .word %1111111111101011 - .word %1111111111101100 - .word %1111111111101101 - .word %1111111111101110 - .word %1111111111101111 - .word %1111111111110000 - .word %1111111111110001 - .word %1111111111110010 - .word %1111111111110011 - .word %1111111111110100 - .word %1111111111110101 - .word %1111111111110110 - .word %1111111111110111 - .word %1111111111111000 - .word %1111111111111001 - .word %1111111111111010 - .word %1111111111111011 - .word %1111111111111100 - .word %1111111111111101 - .word %1111111111111110 - .word %1111111111111111 + ; binary values, variable length + .word %0 + .word %01 + .word %010 + .word %011 + .word %0100 + .word %0101 + .word %0110 + .word %0111 + .word %01000 + .word %01001 + .word %01010 + .word %01011 + .word %01100 + .word %01101 + .word %01110 + .word %01111 + .word %010000 + .word %010001 + .word %010010 + .word %010011 + .word %01110000 + .word %01110001 + .word %01110010 + .word %01110011 + .word %01110100 + .word %01110101 + .word %01110110 + .word %01110111 + .word %01111000 + .word %01111001 + .word %01111010 + .word %01111011 + .word %01111100 + .word %01111101 + .word %01111110 + .word %01111111 + .word %010000000 + .word %010000001 + .word %010000010 + .word %010000011 + .word %010000100 + .word %010000101 + .word %010000110 + .word %011110000 + .word %011110001 + .word %011110010 + .word %011110011 + .word %011110100 + .word %011110101 + .word %011110110 + .word %011110111 + .word %011111000 + .word %011111001 + .word %011111010 + .word %011111011 + .word %011111100 + .word %011111101 + .word %011111110 + .word %011111111 + .word %100000000 + .word %100000001 + .word %100000010 + .word %100000011 + .word %111111010010 + .word %111111010011 + .word %111111010100 + .word %111111010101 + .word %111111010110 + .word %111111010111 + .word %111111011000 + .word %111111011001 + .word %111111011010 + .word %111111011011 + .word %111111011100 + .word %111111011101 + .word %111111011110 + .word %111111011111 + .word %111111100000 + .word %111111100001 + .word %111111100010 + .word %111111100011 + .word %111111100100 + .word %111111100101 + .word %111111100110 + .word %111111100111 + .word %111111101000 + .word %111111101001 + .word %111111101010 + .word %111111101011 + .word %111111101100 + .word %111111101101 + .word %111111101110 + .word %111111101111 + .word %111111110000 + .word %111111110001 + .word %111111110010 + .word %111111110011 + .word %111111110100 + .word %111111110101 + .word %111111110110 + .word %111111110111 + .word %111111111000 + .word %111111111001 + .word %111111111010 + .word %111111111011 + .word %111111111100 + .word %111111111101 + .word %111111111110 + .word %111111111111 + .word %1000000000000 + .word %1000000000001 + .word %1000000000010 + .word %1000000000011 + .word %1000000000100 + .word %1000000000101 + .word %1000000000110 + .word %1000000000111 + .word %1000000001000 + .word %111111111110000 + .word %111111111110001 + .word %111111111110010 + .word %111111111110011 + .word %111111111110100 + .word %111111111110101 + .word %111111111110110 + .word %111111111110111 + .word %111111111111000 + .word %111111111111001 + .word %111111111111010 + .word %111111111111011 + .word %111111111111100 + .word %111111111111101 + .word %111111111111110 + .word %111111111111111 + .word %1000000000000000 + .word %1000000000000001 + .word %1000000000000010 + .word %1000000000000011 + .word %1000000000000100 + .word %1000000000000101 + .word %1000000000000110 + .word %1000000000000111 + .word %1000000000001000 + .word %1000000000001001 + .word %1000000000001010 + .word %1000000000001011 + .word %1001111111100001 + .word %1001111111100010 + .word %1001111111100011 + .word %1001111111100100 + .word %1001111111100101 + .word %1001111111100110 + .word %1001111111100111 + .word %1001111111101000 + .word %1001111111101001 + .word %1001111111101010 + .word %1001111111101011 + .word %1001111111101100 + .word %1001111111101101 + .word %1001111111101110 + .word %1001111111101111 + .word %1001111111110000 + .word %1001111111110001 + .word %1001111111110010 + .word %1001111111110011 + .word %1001111111110100 + .word %1001111111110101 + .word %1001111111110110 + .word %1001111111110111 + .word %1001111111111000 + .word %1001111111111001 + .word %1001111111111010 + .word %1001111111111011 + .word %1001111111111100 + .word %1001111111111101 + .word %1001111111111110 + .word %1001111111111111 + .word %1010000000000000 + .word %1010000000000001 + .word %1010000000000010 + .word %1010000000000011 + .word %1010000000000100 + .word %1010000000000101 + .word %1010000000000110 + .word %1010000000000111 + .word %1010000000001000 + .word %1010000000001001 + .word %1010000000001010 + .word %1010000000001011 + .word %1010000000001100 + .word %1010000000001101 + .word %1010000000001110 + .word %1010000000001111 + .word %1010111111100001 + .word %1010111111100010 + .word %1010111111100011 + .word %1010111111100100 + .word %1010111111100101 + .word %1010111111100110 + .word %1010111111100111 + .word %1010111111101000 + .word %1010111111101001 + .word %1010111111101010 + .word %1010111111101011 + .word %1010111111101100 + .word %1010111111101101 + .word %1010111111101110 + .word %1010111111101111 + .word %1010111111110000 + .word %1010111111110001 + .word %1010111111110010 + .word %1010111111110011 + .word %1010111111110100 + .word %1010111111110101 + .word %1010111111110110 + .word %1010111111110111 + .word %1010111111111000 + .word %1010111111111001 + .word %1010111111111010 + .word %1010111111111011 + .word %1010111111111100 + .word %1010111111111101 + .word %1010111111111110 + .word %1010111111111111 + .word %1011000000000000 + .word %1011000000000001 + .word %1011000000000010 + .word %1011000000000011 + .word %1011000000000100 + .word %1011000000000101 + .word %1011000000000110 + .word %1011000000000111 + .word %1011000000001000 + .word %1011000000001001 + .word %1011000000001010 + .word %1011000000001011 + .word %1011000000001100 + .word %1011000000001101 + .word %1011000000001110 + .word %1011000000001111 + .word %1011111111100001 + .word %1011111111100010 + .word %1011111111100011 + .word %1011111111100100 + .word %1011111111100101 + .word %1011111111100110 + .word %1011111111100111 + .word %1011111111101000 + .word %1011111111101001 + .word %1011111111101010 + .word %1011111111101011 + .word %1011111111101100 + .word %1011111111101101 + .word %1011111111101110 + .word %1011111111101111 + .word %1011111111110000 + .word %1011111111110001 + .word %1011111111110010 + .word %1011111111110011 + .word %1011111111110100 + .word %1011111111110101 + .word %1011111111110110 + .word %1011111111110111 + .word %1011111111111000 + .word %1011111111111001 + .word %1011111111111010 + .word %1011111111111011 + .word %1011111111111100 + .word %1011111111111101 + .word %1011111111111110 + .word %1011111111111111 + .word %1100000000000000 + .word %1100000000000001 + .word %1100000000000010 + .word %1100000000000011 + .word %1100000000000100 + .word %1100000000000101 + .word %1100000000000110 + .word %1100000000000111 + .word %1100000000001000 + .word %1100000000001001 + .word %1100000000001010 + .word %1100000000001011 + .word %1100000000001100 + .word %1100000000001101 + .word %1100000000001110 + .word %1100000000001111 + .word %1100111111100001 + .word %1100111111100010 + .word %1100111111100011 + .word %1100111111100100 + .word %1100111111100101 + .word %1100111111100110 + .word %1100111111100111 + .word %1100111111101000 + .word %1100111111101001 + .word %1100111111101010 + .word %1100111111101011 + .word %1100111111101100 + .word %1100111111101101 + .word %1100111111101110 + .word %1100111111101111 + .word %1100111111110000 + .word %1100111111110001 + .word %1100111111110010 + .word %1100111111110011 + .word %1100111111110100 + .word %1100111111110101 + .word %1100111111110110 + .word %1100111111110111 + .word %1100111111111000 + .word %1100111111111001 + .word %1100111111111010 + .word %1100111111111011 + .word %1100111111111100 + .word %1100111111111101 + .word %1100111111111110 + .word %1100111111111111 + .word %1101000000000000 + .word %1101000000000001 + .word %1101000000000010 + .word %1101000000000011 + .word %1101000000000100 + .word %1101000000000101 + .word %1101000000000110 + .word %1101000000000111 + .word %1101000000001000 + .word %1101000000001001 + .word %1101000000001010 + .word %1101000000001011 + .word %1101000000001100 + .word %1101000000001101 + .word %1101000000001110 + .word %1101000000001111 + .word %1101111111100001 + .word %1101111111100010 + .word %1101111111100011 + .word %1101111111100100 + .word %1101111111100101 + .word %1101111111100110 + .word %1101111111100111 + .word %1101111111101000 + .word %1101111111101001 + .word %1101111111101010 + .word %1101111111101011 + .word %1101111111101100 + .word %1101111111101101 + .word %1101111111101110 + .word %1101111111101111 + .word %1101111111110000 + .word %1101111111110001 + .word %1101111111110010 + .word %1101111111110011 + .word %1101111111110100 + .word %1101111111110101 + .word %1101111111110110 + .word %1101111111110111 + .word %1101111111111000 + .word %1101111111111001 + .word %1101111111111010 + .word %1101111111111011 + .word %1101111111111100 + .word %1101111111111101 + .word %1101111111111110 + .word %1101111111111111 + .word %1110000000000000 + .word %1110000000000001 + .word %1110000000000010 + .word %1110000000000011 + .word %1110000000000100 + .word %1110000000000101 + .word %1110000000000110 + .word %1110000000000111 + .word %1110000000001000 + .word %1110000000001001 + .word %1110000000001010 + .word %1110000000001011 + .word %1110000000001100 + .word %1110000000001101 + .word %1110000000001110 + .word %1110000000001111 + .word %1110111111100001 + .word %1110111111100010 + .word %1110111111100011 + .word %1110111111100100 + .word %1110111111100101 + .word %1110111111100110 + .word %1110111111100111 + .word %1110111111101000 + .word %1110111111101001 + .word %1110111111101010 + .word %1110111111101011 + .word %1110111111101100 + .word %1110111111101101 + .word %1110111111101110 + .word %1110111111101111 + .word %1110111111110000 + .word %1110111111110001 + .word %1110111111110010 + .word %1110111111110011 + .word %1110111111110100 + .word %1110111111110101 + .word %1110111111110110 + .word %1110111111110111 + .word %1110111111111000 + .word %1110111111111001 + .word %1110111111111010 + .word %1110111111111011 + .word %1110111111111100 + .word %1110111111111101 + .word %1110111111111110 + .word %1110111111111111 + .word %1111000000000000 + .word %1111000000000001 + .word %1111000000000010 + .word %1111000000000011 + .word %1111000000000100 + .word %1111000000000101 + .word %1111000000000110 + .word %1111000000000111 + .word %1111000000001000 + .word %1111000000001001 + .word %1111000000001010 + .word %1111000000001011 + .word %1111000000001100 + .word %1111000000001101 + .word %1111000000001110 + .word %1111000000001111 + .word %1111111111100001 + .word %1111111111100010 + .word %1111111111100011 + .word %1111111111100100 + .word %1111111111100101 + .word %1111111111100110 + .word %1111111111100111 + .word %1111111111101000 + .word %1111111111101001 + .word %1111111111101010 + .word %1111111111101011 + .word %1111111111101100 + .word %1111111111101101 + .word %1111111111101110 + .word %1111111111101111 + .word %1111111111110000 + .word %1111111111110001 + .word %1111111111110010 + .word %1111111111110011 + .word %1111111111110100 + .word %1111111111110101 + .word %1111111111110110 + .word %1111111111110111 + .word %1111111111111000 + .word %1111111111111001 + .word %1111111111111010 + .word %1111111111111011 + .word %1111111111111100 + .word %1111111111111101 + .word %1111111111111110 + .word %1111111111111111 - ; binary values, full length - .word %0000000000000000 - .word %0000000000000001 - .word %0000000000000010 - .word %0000000000000011 - .word %0000000000000100 - .word %0000000000000101 - .word %0000000000000110 - .word %0000000000000111 - .word %0000000000001000 - .word %0000000000001001 - .word %0000000000001010 - .word %0000000000001011 - .word %0000000000001100 - .word %0000000000001101 - .word %0000000000001110 - .word %0000000000001111 - .word %0000000000010000 - .word %0000000000010001 - .word %0000000000010010 - .word %0000000000010011 - .word %0000000001110000 - .word %0000000001110001 - .word %0000000001110010 - .word %0000000001110011 - .word %0000000001110100 - .word %0000000001110101 - .word %0000000001110110 - .word %0000000001110111 - .word %0000000001111000 - .word %0000000001111001 - .word %0000000001111010 - .word %0000000001111011 - .word %0000000001111100 - .word %0000000001111101 - .word %0000000001111110 - .word %0000000001111111 - .word %0000000010000000 - .word %0000000010000001 - .word %0000000010000010 - .word %0000000010000011 - .word %0000000010000100 - .word %0000000010000101 - .word %0000000010000110 - .word %0000000011110000 - .word %0000000011110001 - .word %0000000011110010 - .word %0000000011110011 - .word %0000000011110100 - .word %0000000011110101 - .word %0000000011110110 - .word %0000000011110111 - .word %0000000011111000 - .word %0000000011111001 - .word %0000000011111010 - .word %0000000011111011 - .word %0000000011111100 - .word %0000000011111101 - .word %0000000011111110 - .word %0000000011111111 - .word %0000000100000000 - .word %0000000100000001 - .word %0000000100000010 - .word %0000000100000011 - .word %0000111111010010 - .word %0000111111010011 - .word %0000111111010100 - .word %0000111111010101 - .word %0000111111010110 - .word %0000111111010111 - .word %0000111111011000 - .word %0000111111011001 - .word %0000111111011010 - .word %0000111111011011 - .word %0000111111011100 - .word %0000111111011101 - .word %0000111111011110 - .word %0000111111011111 - .word %0000111111100000 - .word %0000111111100001 - .word %0000111111100010 - .word %0000111111100011 - .word %0000111111100100 - .word %0000111111100101 - .word %0000111111100110 - .word %0000111111100111 - .word %0000111111101000 - .word %0000111111101001 - .word %0000111111101010 - .word %0000111111101011 - .word %0000111111101100 - .word %0000111111101101 - .word %0000111111101110 - .word %0000111111101111 - .word %0000111111110000 - .word %0000111111110001 - .word %0000111111110010 - .word %0000111111110011 - .word %0000111111110100 - .word %0000111111110101 - .word %0000111111110110 - .word %0000111111110111 - .word %0000111111111000 - .word %0000111111111001 - .word %0000111111111010 - .word %0000111111111011 - .word %0000111111111100 - .word %0000111111111101 - .word %0000111111111110 - .word %0000111111111111 - .word %0001000000000000 - .word %0001000000000001 - .word %0001000000000010 - .word %0001000000000011 - .word %0001000000000100 - .word %0001000000000101 - .word %0001000000000110 - .word %0001000000000111 - .word %0001000000001000 - .word %0111111111110000 - .word %0111111111110001 - .word %0111111111110010 - .word %0111111111110011 - .word %0111111111110100 - .word %0111111111110101 - .word %0111111111110110 - .word %0111111111110111 - .word %0111111111111000 - .word %0111111111111001 - .word %0111111111111010 - .word %0111111111111011 - .word %0111111111111100 - .word %0111111111111101 - .word %0111111111111110 - .word %0111111111111111 - .word %1000000000000000 - .word %1000000000000001 - .word %1000000000000010 - .word %1000000000000011 - .word %1000000000000100 - .word %1000000000000101 - .word %1000000000000110 - .word %1000000000000111 - .word %1000000000001000 - .word %1000000000001001 - .word %1000000000001010 - .word %1000000000001011 - .word %1001111111100001 - .word %1001111111100010 - .word %1001111111100011 - .word %1001111111100100 - .word %1001111111100101 - .word %1001111111100110 - .word %1001111111100111 - .word %1001111111101000 - .word %1001111111101001 - .word %1001111111101010 - .word %1001111111101011 - .word %1001111111101100 - .word %1001111111101101 - .word %1001111111101110 - .word %1001111111101111 - .word %1001111111110000 - .word %1001111111110001 - .word %1001111111110010 - .word %1001111111110011 - .word %1001111111110100 - .word %1001111111110101 - .word %1001111111110110 - .word %1001111111110111 - .word %1001111111111000 - .word %1001111111111001 - .word %1001111111111010 - .word %1001111111111011 - .word %1001111111111100 - .word %1001111111111101 - .word %1001111111111110 - .word %1001111111111111 - .word %1010000000000000 - .word %1010000000000001 - .word %1010000000000010 - .word %1010000000000011 - .word %1010000000000100 - .word %1010000000000101 - .word %1010000000000110 - .word %1010000000000111 - .word %1010000000001000 - .word %1010000000001001 - .word %1010000000001010 - .word %1010000000001011 - .word %1010000000001100 - .word %1010000000001101 - .word %1010000000001110 - .word %1010000000001111 - .word %1010111111100001 - .word %1010111111100010 - .word %1010111111100011 - .word %1010111111100100 - .word %1010111111100101 - .word %1010111111100110 - .word %1010111111100111 - .word %1010111111101000 - .word %1010111111101001 - .word %1010111111101010 - .word %1010111111101011 - .word %1010111111101100 - .word %1010111111101101 - .word %1010111111101110 - .word %1010111111101111 - .word %1010111111110000 - .word %1010111111110001 - .word %1010111111110010 - .word %1010111111110011 - .word %1010111111110100 - .word %1010111111110101 - .word %1010111111110110 - .word %1010111111110111 - .word %1010111111111000 - .word %1010111111111001 - .word %1010111111111010 - .word %1010111111111011 - .word %1010111111111100 - .word %1010111111111101 - .word %1010111111111110 - .word %1010111111111111 - .word %1011000000000000 - .word %1011000000000001 - .word %1011000000000010 - .word %1011000000000011 - .word %1011000000000100 - .word %1011000000000101 - .word %1011000000000110 - .word %1011000000000111 - .word %1011000000001000 - .word %1011000000001001 - .word %1011000000001010 - .word %1011000000001011 - .word %1011000000001100 - .word %1011000000001101 - .word %1011000000001110 - .word %1011000000001111 - .word %1011111111100001 - .word %1011111111100010 - .word %1011111111100011 - .word %1011111111100100 - .word %1011111111100101 - .word %1011111111100110 - .word %1011111111100111 - .word %1011111111101000 - .word %1011111111101001 - .word %1011111111101010 - .word %1011111111101011 - .word %1011111111101100 - .word %1011111111101101 - .word %1011111111101110 - .word %1011111111101111 - .word %1011111111110000 - .word %1011111111110001 - .word %1011111111110010 - .word %1011111111110011 - .word %1011111111110100 - .word %1011111111110101 - .word %1011111111110110 - .word %1011111111110111 - .word %1011111111111000 - .word %1011111111111001 - .word %1011111111111010 - .word %1011111111111011 - .word %1011111111111100 - .word %1011111111111101 - .word %1011111111111110 - .word %1011111111111111 - .word %1100000000000000 - .word %1100000000000001 - .word %1100000000000010 - .word %1100000000000011 - .word %1100000000000100 - .word %1100000000000101 - .word %1100000000000110 - .word %1100000000000111 - .word %1100000000001000 - .word %1100000000001001 - .word %1100000000001010 - .word %1100000000001011 - .word %1100000000001100 - .word %1100000000001101 - .word %1100000000001110 - .word %1100000000001111 - .word %1100111111100001 - .word %1100111111100010 - .word %1100111111100011 - .word %1100111111100100 - .word %1100111111100101 - .word %1100111111100110 - .word %1100111111100111 - .word %1100111111101000 - .word %1100111111101001 - .word %1100111111101010 - .word %1100111111101011 - .word %1100111111101100 - .word %1100111111101101 - .word %1100111111101110 - .word %1100111111101111 - .word %1100111111110000 - .word %1100111111110001 - .word %1100111111110010 - .word %1100111111110011 - .word %1100111111110100 - .word %1100111111110101 - .word %1100111111110110 - .word %1100111111110111 - .word %1100111111111000 - .word %1100111111111001 - .word %1100111111111010 - .word %1100111111111011 - .word %1100111111111100 - .word %1100111111111101 - .word %1100111111111110 - .word %1100111111111111 - .word %1101000000000000 - .word %1101000000000001 - .word %1101000000000010 - .word %1101000000000011 - .word %1101000000000100 - .word %1101000000000101 - .word %1101000000000110 - .word %1101000000000111 - .word %1101000000001000 - .word %1101000000001001 - .word %1101000000001010 - .word %1101000000001011 - .word %1101000000001100 - .word %1101000000001101 - .word %1101000000001110 - .word %1101000000001111 - .word %1101111111100001 - .word %1101111111100010 - .word %1101111111100011 - .word %1101111111100100 - .word %1101111111100101 - .word %1101111111100110 - .word %1101111111100111 - .word %1101111111101000 - .word %1101111111101001 - .word %1101111111101010 - .word %1101111111101011 - .word %1101111111101100 - .word %1101111111101101 - .word %1101111111101110 - .word %1101111111101111 - .word %1101111111110000 - .word %1101111111110001 - .word %1101111111110010 - .word %1101111111110011 - .word %1101111111110100 - .word %1101111111110101 - .word %1101111111110110 - .word %1101111111110111 - .word %1101111111111000 - .word %1101111111111001 - .word %1101111111111010 - .word %1101111111111011 - .word %1101111111111100 - .word %1101111111111101 - .word %1101111111111110 - .word %1101111111111111 - .word %1110000000000000 - .word %1110000000000001 - .word %1110000000000010 - .word %1110000000000011 - .word %1110000000000100 - .word %1110000000000101 - .word %1110000000000110 - .word %1110000000000111 - .word %1110000000001000 - .word %1110000000001001 - .word %1110000000001010 - .word %1110000000001011 - .word %1110000000001100 - .word %1110000000001101 - .word %1110000000001110 - .word %1110000000001111 - .word %1110111111100001 - .word %1110111111100010 - .word %1110111111100011 - .word %1110111111100100 - .word %1110111111100101 - .word %1110111111100110 - .word %1110111111100111 - .word %1110111111101000 - .word %1110111111101001 - .word %1110111111101010 - .word %1110111111101011 - .word %1110111111101100 - .word %1110111111101101 - .word %1110111111101110 - .word %1110111111101111 - .word %1110111111110000 - .word %1110111111110001 - .word %1110111111110010 - .word %1110111111110011 - .word %1110111111110100 - .word %1110111111110101 - .word %1110111111110110 - .word %1110111111110111 - .word %1110111111111000 - .word %1110111111111001 - .word %1110111111111010 - .word %1110111111111011 - .word %1110111111111100 - .word %1110111111111101 - .word %1110111111111110 - .word %1110111111111111 - .word %1111000000000000 - .word %1111000000000001 - .word %1111000000000010 - .word %1111000000000011 - .word %1111000000000100 - .word %1111000000000101 - .word %1111000000000110 - .word %1111000000000111 - .word %1111000000001000 - .word %1111000000001001 - .word %1111000000001010 - .word %1111000000001011 - .word %1111000000001100 - .word %1111000000001101 - .word %1111000000001110 - .word %1111000000001111 - .word %1111111111100001 - .word %1111111111100010 - .word %1111111111100011 - .word %1111111111100100 - .word %1111111111100101 - .word %1111111111100110 - .word %1111111111100111 - .word %1111111111101000 - .word %1111111111101001 - .word %1111111111101010 - .word %1111111111101011 - .word %1111111111101100 - .word %1111111111101101 - .word %1111111111101110 - .word %1111111111101111 - .word %1111111111110000 - .word %1111111111110001 - .word %1111111111110010 - .word %1111111111110011 - .word %1111111111110100 - .word %1111111111110101 - .word %1111111111110110 - .word %1111111111110111 - .word %1111111111111000 - .word %1111111111111001 - .word %1111111111111010 - .word %1111111111111011 - .word %1111111111111100 - .word %1111111111111101 - .word %1111111111111110 - .word %1111111111111111 + ; binary values, full length + .word %0000000000000000 + .word %0000000000000001 + .word %0000000000000010 + .word %0000000000000011 + .word %0000000000000100 + .word %0000000000000101 + .word %0000000000000110 + .word %0000000000000111 + .word %0000000000001000 + .word %0000000000001001 + .word %0000000000001010 + .word %0000000000001011 + .word %0000000000001100 + .word %0000000000001101 + .word %0000000000001110 + .word %0000000000001111 + .word %0000000000010000 + .word %0000000000010001 + .word %0000000000010010 + .word %0000000000010011 + .word %0000000001110000 + .word %0000000001110001 + .word %0000000001110010 + .word %0000000001110011 + .word %0000000001110100 + .word %0000000001110101 + .word %0000000001110110 + .word %0000000001110111 + .word %0000000001111000 + .word %0000000001111001 + .word %0000000001111010 + .word %0000000001111011 + .word %0000000001111100 + .word %0000000001111101 + .word %0000000001111110 + .word %0000000001111111 + .word %0000000010000000 + .word %0000000010000001 + .word %0000000010000010 + .word %0000000010000011 + .word %0000000010000100 + .word %0000000010000101 + .word %0000000010000110 + .word %0000000011110000 + .word %0000000011110001 + .word %0000000011110010 + .word %0000000011110011 + .word %0000000011110100 + .word %0000000011110101 + .word %0000000011110110 + .word %0000000011110111 + .word %0000000011111000 + .word %0000000011111001 + .word %0000000011111010 + .word %0000000011111011 + .word %0000000011111100 + .word %0000000011111101 + .word %0000000011111110 + .word %0000000011111111 + .word %0000000100000000 + .word %0000000100000001 + .word %0000000100000010 + .word %0000000100000011 + .word %0000111111010010 + .word %0000111111010011 + .word %0000111111010100 + .word %0000111111010101 + .word %0000111111010110 + .word %0000111111010111 + .word %0000111111011000 + .word %0000111111011001 + .word %0000111111011010 + .word %0000111111011011 + .word %0000111111011100 + .word %0000111111011101 + .word %0000111111011110 + .word %0000111111011111 + .word %0000111111100000 + .word %0000111111100001 + .word %0000111111100010 + .word %0000111111100011 + .word %0000111111100100 + .word %0000111111100101 + .word %0000111111100110 + .word %0000111111100111 + .word %0000111111101000 + .word %0000111111101001 + .word %0000111111101010 + .word %0000111111101011 + .word %0000111111101100 + .word %0000111111101101 + .word %0000111111101110 + .word %0000111111101111 + .word %0000111111110000 + .word %0000111111110001 + .word %0000111111110010 + .word %0000111111110011 + .word %0000111111110100 + .word %0000111111110101 + .word %0000111111110110 + .word %0000111111110111 + .word %0000111111111000 + .word %0000111111111001 + .word %0000111111111010 + .word %0000111111111011 + .word %0000111111111100 + .word %0000111111111101 + .word %0000111111111110 + .word %0000111111111111 + .word %0001000000000000 + .word %0001000000000001 + .word %0001000000000010 + .word %0001000000000011 + .word %0001000000000100 + .word %0001000000000101 + .word %0001000000000110 + .word %0001000000000111 + .word %0001000000001000 + .word %0111111111110000 + .word %0111111111110001 + .word %0111111111110010 + .word %0111111111110011 + .word %0111111111110100 + .word %0111111111110101 + .word %0111111111110110 + .word %0111111111110111 + .word %0111111111111000 + .word %0111111111111001 + .word %0111111111111010 + .word %0111111111111011 + .word %0111111111111100 + .word %0111111111111101 + .word %0111111111111110 + .word %0111111111111111 + .word %1000000000000000 + .word %1000000000000001 + .word %1000000000000010 + .word %1000000000000011 + .word %1000000000000100 + .word %1000000000000101 + .word %1000000000000110 + .word %1000000000000111 + .word %1000000000001000 + .word %1000000000001001 + .word %1000000000001010 + .word %1000000000001011 + .word %1001111111100001 + .word %1001111111100010 + .word %1001111111100011 + .word %1001111111100100 + .word %1001111111100101 + .word %1001111111100110 + .word %1001111111100111 + .word %1001111111101000 + .word %1001111111101001 + .word %1001111111101010 + .word %1001111111101011 + .word %1001111111101100 + .word %1001111111101101 + .word %1001111111101110 + .word %1001111111101111 + .word %1001111111110000 + .word %1001111111110001 + .word %1001111111110010 + .word %1001111111110011 + .word %1001111111110100 + .word %1001111111110101 + .word %1001111111110110 + .word %1001111111110111 + .word %1001111111111000 + .word %1001111111111001 + .word %1001111111111010 + .word %1001111111111011 + .word %1001111111111100 + .word %1001111111111101 + .word %1001111111111110 + .word %1001111111111111 + .word %1010000000000000 + .word %1010000000000001 + .word %1010000000000010 + .word %1010000000000011 + .word %1010000000000100 + .word %1010000000000101 + .word %1010000000000110 + .word %1010000000000111 + .word %1010000000001000 + .word %1010000000001001 + .word %1010000000001010 + .word %1010000000001011 + .word %1010000000001100 + .word %1010000000001101 + .word %1010000000001110 + .word %1010000000001111 + .word %1010111111100001 + .word %1010111111100010 + .word %1010111111100011 + .word %1010111111100100 + .word %1010111111100101 + .word %1010111111100110 + .word %1010111111100111 + .word %1010111111101000 + .word %1010111111101001 + .word %1010111111101010 + .word %1010111111101011 + .word %1010111111101100 + .word %1010111111101101 + .word %1010111111101110 + .word %1010111111101111 + .word %1010111111110000 + .word %1010111111110001 + .word %1010111111110010 + .word %1010111111110011 + .word %1010111111110100 + .word %1010111111110101 + .word %1010111111110110 + .word %1010111111110111 + .word %1010111111111000 + .word %1010111111111001 + .word %1010111111111010 + .word %1010111111111011 + .word %1010111111111100 + .word %1010111111111101 + .word %1010111111111110 + .word %1010111111111111 + .word %1011000000000000 + .word %1011000000000001 + .word %1011000000000010 + .word %1011000000000011 + .word %1011000000000100 + .word %1011000000000101 + .word %1011000000000110 + .word %1011000000000111 + .word %1011000000001000 + .word %1011000000001001 + .word %1011000000001010 + .word %1011000000001011 + .word %1011000000001100 + .word %1011000000001101 + .word %1011000000001110 + .word %1011000000001111 + .word %1011111111100001 + .word %1011111111100010 + .word %1011111111100011 + .word %1011111111100100 + .word %1011111111100101 + .word %1011111111100110 + .word %1011111111100111 + .word %1011111111101000 + .word %1011111111101001 + .word %1011111111101010 + .word %1011111111101011 + .word %1011111111101100 + .word %1011111111101101 + .word %1011111111101110 + .word %1011111111101111 + .word %1011111111110000 + .word %1011111111110001 + .word %1011111111110010 + .word %1011111111110011 + .word %1011111111110100 + .word %1011111111110101 + .word %1011111111110110 + .word %1011111111110111 + .word %1011111111111000 + .word %1011111111111001 + .word %1011111111111010 + .word %1011111111111011 + .word %1011111111111100 + .word %1011111111111101 + .word %1011111111111110 + .word %1011111111111111 + .word %1100000000000000 + .word %1100000000000001 + .word %1100000000000010 + .word %1100000000000011 + .word %1100000000000100 + .word %1100000000000101 + .word %1100000000000110 + .word %1100000000000111 + .word %1100000000001000 + .word %1100000000001001 + .word %1100000000001010 + .word %1100000000001011 + .word %1100000000001100 + .word %1100000000001101 + .word %1100000000001110 + .word %1100000000001111 + .word %1100111111100001 + .word %1100111111100010 + .word %1100111111100011 + .word %1100111111100100 + .word %1100111111100101 + .word %1100111111100110 + .word %1100111111100111 + .word %1100111111101000 + .word %1100111111101001 + .word %1100111111101010 + .word %1100111111101011 + .word %1100111111101100 + .word %1100111111101101 + .word %1100111111101110 + .word %1100111111101111 + .word %1100111111110000 + .word %1100111111110001 + .word %1100111111110010 + .word %1100111111110011 + .word %1100111111110100 + .word %1100111111110101 + .word %1100111111110110 + .word %1100111111110111 + .word %1100111111111000 + .word %1100111111111001 + .word %1100111111111010 + .word %1100111111111011 + .word %1100111111111100 + .word %1100111111111101 + .word %1100111111111110 + .word %1100111111111111 + .word %1101000000000000 + .word %1101000000000001 + .word %1101000000000010 + .word %1101000000000011 + .word %1101000000000100 + .word %1101000000000101 + .word %1101000000000110 + .word %1101000000000111 + .word %1101000000001000 + .word %1101000000001001 + .word %1101000000001010 + .word %1101000000001011 + .word %1101000000001100 + .word %1101000000001101 + .word %1101000000001110 + .word %1101000000001111 + .word %1101111111100001 + .word %1101111111100010 + .word %1101111111100011 + .word %1101111111100100 + .word %1101111111100101 + .word %1101111111100110 + .word %1101111111100111 + .word %1101111111101000 + .word %1101111111101001 + .word %1101111111101010 + .word %1101111111101011 + .word %1101111111101100 + .word %1101111111101101 + .word %1101111111101110 + .word %1101111111101111 + .word %1101111111110000 + .word %1101111111110001 + .word %1101111111110010 + .word %1101111111110011 + .word %1101111111110100 + .word %1101111111110101 + .word %1101111111110110 + .word %1101111111110111 + .word %1101111111111000 + .word %1101111111111001 + .word %1101111111111010 + .word %1101111111111011 + .word %1101111111111100 + .word %1101111111111101 + .word %1101111111111110 + .word %1101111111111111 + .word %1110000000000000 + .word %1110000000000001 + .word %1110000000000010 + .word %1110000000000011 + .word %1110000000000100 + .word %1110000000000101 + .word %1110000000000110 + .word %1110000000000111 + .word %1110000000001000 + .word %1110000000001001 + .word %1110000000001010 + .word %1110000000001011 + .word %1110000000001100 + .word %1110000000001101 + .word %1110000000001110 + .word %1110000000001111 + .word %1110111111100001 + .word %1110111111100010 + .word %1110111111100011 + .word %1110111111100100 + .word %1110111111100101 + .word %1110111111100110 + .word %1110111111100111 + .word %1110111111101000 + .word %1110111111101001 + .word %1110111111101010 + .word %1110111111101011 + .word %1110111111101100 + .word %1110111111101101 + .word %1110111111101110 + .word %1110111111101111 + .word %1110111111110000 + .word %1110111111110001 + .word %1110111111110010 + .word %1110111111110011 + .word %1110111111110100 + .word %1110111111110101 + .word %1110111111110110 + .word %1110111111110111 + .word %1110111111111000 + .word %1110111111111001 + .word %1110111111111010 + .word %1110111111111011 + .word %1110111111111100 + .word %1110111111111101 + .word %1110111111111110 + .word %1110111111111111 + .word %1111000000000000 + .word %1111000000000001 + .word %1111000000000010 + .word %1111000000000011 + .word %1111000000000100 + .word %1111000000000101 + .word %1111000000000110 + .word %1111000000000111 + .word %1111000000001000 + .word %1111000000001001 + .word %1111000000001010 + .word %1111000000001011 + .word %1111000000001100 + .word %1111000000001101 + .word %1111000000001110 + .word %1111000000001111 + .word %1111111111100001 + .word %1111111111100010 + .word %1111111111100011 + .word %1111111111100100 + .word %1111111111100101 + .word %1111111111100110 + .word %1111111111100111 + .word %1111111111101000 + .word %1111111111101001 + .word %1111111111101010 + .word %1111111111101011 + .word %1111111111101100 + .word %1111111111101101 + .word %1111111111101110 + .word %1111111111101111 + .word %1111111111110000 + .word %1111111111110001 + .word %1111111111110010 + .word %1111111111110011 + .word %1111111111110100 + .word %1111111111110101 + .word %1111111111110110 + .word %1111111111110111 + .word %1111111111111000 + .word %1111111111111001 + .word %1111111111111010 + .word %1111111111111011 + .word %1111111111111100 + .word %1111111111111101 + .word %1111111111111110 + .word %1111111111111111 - ; multiple values on one line, decimal - .word 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - .word 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 - .word 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 - .word 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 - .word 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 - .word 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 - .word 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 - .word 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 - .word 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 - .word 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 - .word 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 - .word 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 - .word 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 - .word 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 - .word 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 - .word 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 - .word 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 - .word 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 - .word 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 - .word 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 - .word 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 - .word 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 - .word 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 - .word 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 + ; multiple values on one line, decimal + .word 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .word 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .word 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .word 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .word 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + .word 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 + .word 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 + .word 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 + .word 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 + .word 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 + .word 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 + .word 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 + .word 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 + .word 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 + .word 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 + .word 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 + .word 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 + .word 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 + .word 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 + .word 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 + .word 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 + .word 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 + .word 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 + .word 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 - ; multiple values on one line, hex - .word $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f - .word $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f - .word $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f - .word $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f - .word $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff - .word $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f - .word $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef - .word $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff - .word $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f - .word $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff - .word $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f - .word $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff - .word $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f - .word $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff - .word $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f - .word $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff - .word $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f - .word $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff - .word $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f - .word $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff - .word $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f - .word $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff - .word $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f - .word $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff + ; multiple values on one line, hex + .word $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .word $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .word $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .word $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .word $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + .word $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f + .word $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef + .word $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff + .word $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f + .word $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff + .word $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f + .word $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff + .word $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f + .word $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff + .word $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f + .word $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff + .word $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f + .word $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff + .word $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f + .word $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff + .word $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f + .word $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff + .word $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f + .word $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff - ; multiple values on one line, alternative hex - .word 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh - .word 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh - .word 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh - .word 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh - .word 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh - .word 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh - .word 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh - .word 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh - .word 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh - .word 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh - .word 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh - .word 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh - .word 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh - .word 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh - .word 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh - .word 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh - .word 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh - .word 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh - .word 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh - .word 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh - .word 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh - .word 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh - .word 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh - .word 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh + ; multiple values on one line, alternative hex + .word 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .word 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .word 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .word 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .word 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + .word 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh + .word 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh + .word 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh + .word 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh + .word 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh + .word 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh + .word 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh + .word 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh + .word 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh + .word 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh + .word 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh + .word 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh + .word 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh + .word 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh + .word 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh + .word 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh + .word 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh + .word 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh + .word 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh - ; mix some variants - .word 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh + ; mix some variants + .word 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/103-dbyt.list-ref b/test/asm/listing/103-dbyt.list-ref index 27fa2f4ef..4d06dbe26 100644 --- a/test/asm/listing/103-dbyt.list-ref +++ b/test/asm/listing/103-dbyt.list-ref @@ -4,6223 +4,6223 @@ Current file: 103-dbyt.s 000000r 1 ; 2022-06-15 Spiro Trikaliotis 000000r 1 000000r 1 -000000r 1 ; upper case pseudo-op -000000r 1 00 00 .DBYT 0 -000002r 1 00 01 .DBYT 1 -000004r 1 00 02 .DBYT 2 -000006r 1 00 03 .DBYT 3 -000008r 1 00 04 .DBYT 4 -00000Ar 1 00 05 .DBYT 5 -00000Cr 1 00 06 .DBYT 6 -00000Er 1 00 07 .DBYT 7 -000010r 1 00 08 .DBYT 8 -000012r 1 00 09 .DBYT 9 -000014r 1 00 0A .DBYT 10 -000016r 1 00 0B .DBYT 11 -000018r 1 00 0C .DBYT 12 -00001Ar 1 00 0D .DBYT 13 -00001Cr 1 00 0E .DBYT 14 -00001Er 1 00 0F .DBYT 15 -000020r 1 00 10 .DBYT 16 -000022r 1 00 11 .DBYT 17 -000024r 1 00 12 .DBYT 18 -000026r 1 00 13 .DBYT 19 -000028r 1 00 70 .DBYT 112 -00002Ar 1 00 71 .DBYT 113 -00002Cr 1 00 72 .DBYT 114 -00002Er 1 00 73 .DBYT 115 -000030r 1 00 74 .DBYT 116 -000032r 1 00 75 .DBYT 117 -000034r 1 00 76 .DBYT 118 -000036r 1 00 77 .DBYT 119 -000038r 1 00 78 .DBYT 120 -00003Ar 1 00 79 .DBYT 121 -00003Cr 1 00 7A .DBYT 122 -00003Er 1 00 7B .DBYT 123 -000040r 1 00 7C .DBYT 124 -000042r 1 00 7D .DBYT 125 -000044r 1 00 7E .DBYT 126 -000046r 1 00 7F .DBYT 127 -000048r 1 00 80 .DBYT 128 -00004Ar 1 00 81 .DBYT 129 -00004Cr 1 00 82 .DBYT 130 -00004Er 1 00 83 .DBYT 131 -000050r 1 00 84 .DBYT 132 -000052r 1 00 85 .DBYT 133 -000054r 1 00 86 .DBYT 134 -000056r 1 00 F0 .DBYT 240 -000058r 1 00 F1 .DBYT 241 -00005Ar 1 00 F2 .DBYT 242 -00005Cr 1 00 F3 .DBYT 243 -00005Er 1 00 F4 .DBYT 244 -000060r 1 00 F5 .DBYT 245 -000062r 1 00 F6 .DBYT 246 -000064r 1 00 F7 .DBYT 247 -000066r 1 00 F8 .DBYT 248 -000068r 1 00 F9 .DBYT 249 -00006Ar 1 00 FA .DBYT 250 -00006Cr 1 00 FB .DBYT 251 -00006Er 1 00 FC .DBYT 252 -000070r 1 00 FD .DBYT 253 -000072r 1 00 FE .DBYT 254 -000074r 1 00 FF .DBYT 255 -000076r 1 01 00 .DBYT 256 -000078r 1 01 01 .DBYT 257 -00007Ar 1 01 02 .DBYT 258 -00007Cr 1 01 03 .DBYT 259 -00007Er 1 0F D2 .DBYT 4050 -000080r 1 0F D3 .DBYT 4051 -000082r 1 0F D4 .DBYT 4052 -000084r 1 0F D5 .DBYT 4053 -000086r 1 0F D6 .DBYT 4054 -000088r 1 0F D7 .DBYT 4055 -00008Ar 1 0F D8 .DBYT 4056 -00008Cr 1 0F D9 .DBYT 4057 -00008Er 1 0F DA .DBYT 4058 -000090r 1 0F DB .DBYT 4059 -000092r 1 0F DC .DBYT 4060 -000094r 1 0F DD .DBYT 4061 -000096r 1 0F DE .DBYT 4062 -000098r 1 0F DF .DBYT 4063 -00009Ar 1 0F E0 .DBYT 4064 -00009Cr 1 0F E1 .DBYT 4065 -00009Er 1 0F E2 .DBYT 4066 -0000A0r 1 0F E3 .DBYT 4067 -0000A2r 1 0F E4 .DBYT 4068 -0000A4r 1 0F E5 .DBYT 4069 -0000A6r 1 0F E6 .DBYT 4070 -0000A8r 1 0F E7 .DBYT 4071 -0000AAr 1 0F E8 .DBYT 4072 -0000ACr 1 0F E9 .DBYT 4073 -0000AEr 1 0F EA .DBYT 4074 -0000B0r 1 0F EB .DBYT 4075 -0000B2r 1 0F EC .DBYT 4076 -0000B4r 1 0F ED .DBYT 4077 -0000B6r 1 0F EE .DBYT 4078 -0000B8r 1 0F EF .DBYT 4079 -0000BAr 1 0F F0 .DBYT 4080 -0000BCr 1 0F F1 .DBYT 4081 -0000BEr 1 0F F2 .DBYT 4082 -0000C0r 1 0F F3 .DBYT 4083 -0000C2r 1 0F F4 .DBYT 4084 -0000C4r 1 0F F5 .DBYT 4085 -0000C6r 1 0F F6 .DBYT 4086 -0000C8r 1 0F F7 .DBYT 4087 -0000CAr 1 0F F8 .DBYT 4088 -0000CCr 1 0F F9 .DBYT 4089 -0000CEr 1 0F FA .DBYT 4090 -0000D0r 1 0F FB .DBYT 4091 -0000D2r 1 0F FC .DBYT 4092 -0000D4r 1 0F FD .DBYT 4093 -0000D6r 1 0F FE .DBYT 4094 -0000D8r 1 0F FF .DBYT 4095 -0000DAr 1 10 00 .DBYT 4096 -0000DCr 1 10 01 .DBYT 4097 -0000DEr 1 10 02 .DBYT 4098 -0000E0r 1 10 03 .DBYT 4099 -0000E2r 1 10 04 .DBYT 4100 -0000E4r 1 10 05 .DBYT 4101 -0000E6r 1 10 06 .DBYT 4102 -0000E8r 1 10 07 .DBYT 4103 -0000EAr 1 10 08 .DBYT 4104 -0000ECr 1 7F F0 .DBYT 32752 -0000EEr 1 7F F1 .DBYT 32753 -0000F0r 1 7F F2 .DBYT 32754 -0000F2r 1 7F F3 .DBYT 32755 -0000F4r 1 7F F4 .DBYT 32756 -0000F6r 1 7F F5 .DBYT 32757 -0000F8r 1 7F F6 .DBYT 32758 -0000FAr 1 7F F7 .DBYT 32759 -0000FCr 1 7F F8 .DBYT 32760 -0000FEr 1 7F F9 .DBYT 32761 -000100r 1 7F FA .DBYT 32762 -000102r 1 7F FB .DBYT 32763 -000104r 1 7F FC .DBYT 32764 -000106r 1 7F FD .DBYT 32765 -000108r 1 7F FE .DBYT 32766 -00010Ar 1 7F FF .DBYT 32767 -00010Cr 1 80 00 .DBYT 32768 -00010Er 1 80 01 .DBYT 32769 -000110r 1 80 02 .DBYT 32770 -000112r 1 80 03 .DBYT 32771 -000114r 1 80 04 .DBYT 32772 -000116r 1 80 05 .DBYT 32773 -000118r 1 80 06 .DBYT 32774 -00011Ar 1 80 07 .DBYT 32775 -00011Cr 1 80 08 .DBYT 32776 -00011Er 1 80 09 .DBYT 32777 -000120r 1 80 0A .DBYT 32778 -000122r 1 80 0B .DBYT 32779 -000124r 1 9F E1 .DBYT 40929 -000126r 1 9F E2 .DBYT 40930 -000128r 1 9F E3 .DBYT 40931 -00012Ar 1 9F E4 .DBYT 40932 -00012Cr 1 9F E5 .DBYT 40933 -00012Er 1 9F E6 .DBYT 40934 -000130r 1 9F E7 .DBYT 40935 -000132r 1 9F E8 .DBYT 40936 -000134r 1 9F E9 .DBYT 40937 -000136r 1 9F EA .DBYT 40938 -000138r 1 9F EB .DBYT 40939 -00013Ar 1 9F EC .DBYT 40940 -00013Cr 1 9F ED .DBYT 40941 -00013Er 1 9F EE .DBYT 40942 -000140r 1 9F EF .DBYT 40943 -000142r 1 9F F0 .DBYT 40944 -000144r 1 9F F1 .DBYT 40945 -000146r 1 9F F2 .DBYT 40946 -000148r 1 9F F3 .DBYT 40947 -00014Ar 1 9F F4 .DBYT 40948 -00014Cr 1 9F F5 .DBYT 40949 -00014Er 1 9F F6 .DBYT 40950 -000150r 1 9F F7 .DBYT 40951 -000152r 1 9F F8 .DBYT 40952 -000154r 1 9F F9 .DBYT 40953 -000156r 1 9F FA .DBYT 40954 -000158r 1 9F FB .DBYT 40955 -00015Ar 1 9F FC .DBYT 40956 -00015Cr 1 9F FD .DBYT 40957 -00015Er 1 9F FE .DBYT 40958 -000160r 1 9F FF .DBYT 40959 -000162r 1 A0 00 .DBYT 40960 -000164r 1 A0 01 .DBYT 40961 -000166r 1 A0 02 .DBYT 40962 -000168r 1 A0 03 .DBYT 40963 -00016Ar 1 A0 04 .DBYT 40964 -00016Cr 1 A0 05 .DBYT 40965 -00016Er 1 A0 06 .DBYT 40966 -000170r 1 A0 07 .DBYT 40967 -000172r 1 A0 08 .DBYT 40968 -000174r 1 A0 09 .DBYT 40969 -000176r 1 A0 0A .DBYT 40970 -000178r 1 A0 0B .DBYT 40971 -00017Ar 1 A0 0C .DBYT 40972 -00017Cr 1 A0 0D .DBYT 40973 -00017Er 1 A0 0E .DBYT 40974 -000180r 1 A0 0F .DBYT 40975 -000182r 1 AF E1 .DBYT 45025 -000184r 1 AF E2 .DBYT 45026 -000186r 1 AF E3 .DBYT 45027 -000188r 1 AF E4 .DBYT 45028 -00018Ar 1 AF E5 .DBYT 45029 -00018Cr 1 AF E6 .DBYT 45030 -00018Er 1 AF E7 .DBYT 45031 -000190r 1 AF E8 .DBYT 45032 -000192r 1 AF E9 .DBYT 45033 -000194r 1 AF EA .DBYT 45034 -000196r 1 AF EB .DBYT 45035 -000198r 1 AF EC .DBYT 45036 -00019Ar 1 AF ED .DBYT 45037 -00019Cr 1 AF EE .DBYT 45038 -00019Er 1 AF EF .DBYT 45039 -0001A0r 1 AF F0 .DBYT 45040 -0001A2r 1 AF F1 .DBYT 45041 -0001A4r 1 AF F2 .DBYT 45042 -0001A6r 1 AF F3 .DBYT 45043 -0001A8r 1 AF F4 .DBYT 45044 -0001AAr 1 AF F5 .DBYT 45045 -0001ACr 1 AF F6 .DBYT 45046 -0001AEr 1 AF F7 .DBYT 45047 -0001B0r 1 AF F8 .DBYT 45048 -0001B2r 1 AF F9 .DBYT 45049 -0001B4r 1 AF FA .DBYT 45050 -0001B6r 1 AF FB .DBYT 45051 -0001B8r 1 AF FC .DBYT 45052 -0001BAr 1 AF FD .DBYT 45053 -0001BCr 1 AF FE .DBYT 45054 -0001BEr 1 AF FF .DBYT 45055 -0001C0r 1 B0 00 .DBYT 45056 -0001C2r 1 B0 01 .DBYT 45057 -0001C4r 1 B0 02 .DBYT 45058 -0001C6r 1 B0 03 .DBYT 45059 -0001C8r 1 B0 04 .DBYT 45060 -0001CAr 1 B0 05 .DBYT 45061 -0001CCr 1 B0 06 .DBYT 45062 -0001CEr 1 B0 07 .DBYT 45063 -0001D0r 1 B0 08 .DBYT 45064 -0001D2r 1 B0 09 .DBYT 45065 -0001D4r 1 B0 0A .DBYT 45066 -0001D6r 1 B0 0B .DBYT 45067 -0001D8r 1 B0 0C .DBYT 45068 -0001DAr 1 B0 0D .DBYT 45069 -0001DCr 1 B0 0E .DBYT 45070 -0001DEr 1 B0 0F .DBYT 45071 -0001E0r 1 BF E1 .DBYT 49121 -0001E2r 1 BF E2 .DBYT 49122 -0001E4r 1 BF E3 .DBYT 49123 -0001E6r 1 BF E4 .DBYT 49124 -0001E8r 1 BF E5 .DBYT 49125 -0001EAr 1 BF E6 .DBYT 49126 -0001ECr 1 BF E7 .DBYT 49127 -0001EEr 1 BF E8 .DBYT 49128 -0001F0r 1 BF E9 .DBYT 49129 -0001F2r 1 BF EA .DBYT 49130 -0001F4r 1 BF EB .DBYT 49131 -0001F6r 1 BF EC .DBYT 49132 -0001F8r 1 BF ED .DBYT 49133 -0001FAr 1 BF EE .DBYT 49134 -0001FCr 1 BF EF .DBYT 49135 -0001FEr 1 BF F0 .DBYT 49136 -000200r 1 BF F1 .DBYT 49137 -000202r 1 BF F2 .DBYT 49138 -000204r 1 BF F3 .DBYT 49139 -000206r 1 BF F4 .DBYT 49140 -000208r 1 BF F5 .DBYT 49141 -00020Ar 1 BF F6 .DBYT 49142 -00020Cr 1 BF F7 .DBYT 49143 -00020Er 1 BF F8 .DBYT 49144 -000210r 1 BF F9 .DBYT 49145 -000212r 1 BF FA .DBYT 49146 -000214r 1 BF FB .DBYT 49147 -000216r 1 BF FC .DBYT 49148 -000218r 1 BF FD .DBYT 49149 -00021Ar 1 BF FE .DBYT 49150 -00021Cr 1 BF FF .DBYT 49151 -00021Er 1 C0 00 .DBYT 49152 -000220r 1 C0 01 .DBYT 49153 -000222r 1 C0 02 .DBYT 49154 -000224r 1 C0 03 .DBYT 49155 -000226r 1 C0 04 .DBYT 49156 -000228r 1 C0 05 .DBYT 49157 -00022Ar 1 C0 06 .DBYT 49158 -00022Cr 1 C0 07 .DBYT 49159 -00022Er 1 C0 08 .DBYT 49160 -000230r 1 C0 09 .DBYT 49161 -000232r 1 C0 0A .DBYT 49162 -000234r 1 C0 0B .DBYT 49163 -000236r 1 C0 0C .DBYT 49164 -000238r 1 C0 0D .DBYT 49165 -00023Ar 1 C0 0E .DBYT 49166 -00023Cr 1 C0 0F .DBYT 49167 -00023Er 1 CF E1 .DBYT 53217 -000240r 1 CF E2 .DBYT 53218 -000242r 1 CF E3 .DBYT 53219 -000244r 1 CF E4 .DBYT 53220 -000246r 1 CF E5 .DBYT 53221 -000248r 1 CF E6 .DBYT 53222 -00024Ar 1 CF E7 .DBYT 53223 -00024Cr 1 CF E8 .DBYT 53224 -00024Er 1 CF E9 .DBYT 53225 -000250r 1 CF EA .DBYT 53226 -000252r 1 CF EB .DBYT 53227 -000254r 1 CF EC .DBYT 53228 -000256r 1 CF ED .DBYT 53229 -000258r 1 CF EE .DBYT 53230 -00025Ar 1 CF EF .DBYT 53231 -00025Cr 1 CF F0 .DBYT 53232 -00025Er 1 CF F1 .DBYT 53233 -000260r 1 CF F2 .DBYT 53234 -000262r 1 CF F3 .DBYT 53235 -000264r 1 CF F4 .DBYT 53236 -000266r 1 CF F5 .DBYT 53237 -000268r 1 CF F6 .DBYT 53238 -00026Ar 1 CF F7 .DBYT 53239 -00026Cr 1 CF F8 .DBYT 53240 -00026Er 1 CF F9 .DBYT 53241 -000270r 1 CF FA .DBYT 53242 -000272r 1 CF FB .DBYT 53243 -000274r 1 CF FC .DBYT 53244 -000276r 1 CF FD .DBYT 53245 -000278r 1 CF FE .DBYT 53246 -00027Ar 1 CF FF .DBYT 53247 -00027Cr 1 D0 00 .DBYT 53248 -00027Er 1 D0 01 .DBYT 53249 -000280r 1 D0 02 .DBYT 53250 -000282r 1 D0 03 .DBYT 53251 -000284r 1 D0 04 .DBYT 53252 -000286r 1 D0 05 .DBYT 53253 -000288r 1 D0 06 .DBYT 53254 -00028Ar 1 D0 07 .DBYT 53255 -00028Cr 1 D0 08 .DBYT 53256 -00028Er 1 D0 09 .DBYT 53257 -000290r 1 D0 0A .DBYT 53258 -000292r 1 D0 0B .DBYT 53259 -000294r 1 D0 0C .DBYT 53260 -000296r 1 D0 0D .DBYT 53261 -000298r 1 D0 0E .DBYT 53262 -00029Ar 1 D0 0F .DBYT 53263 -00029Cr 1 DF E1 .DBYT 57313 -00029Er 1 DF E2 .DBYT 57314 -0002A0r 1 DF E3 .DBYT 57315 -0002A2r 1 DF E4 .DBYT 57316 -0002A4r 1 DF E5 .DBYT 57317 -0002A6r 1 DF E6 .DBYT 57318 -0002A8r 1 DF E7 .DBYT 57319 -0002AAr 1 DF E8 .DBYT 57320 -0002ACr 1 DF E9 .DBYT 57321 -0002AEr 1 DF EA .DBYT 57322 -0002B0r 1 DF EB .DBYT 57323 -0002B2r 1 DF EC .DBYT 57324 -0002B4r 1 DF ED .DBYT 57325 -0002B6r 1 DF EE .DBYT 57326 -0002B8r 1 DF EF .DBYT 57327 -0002BAr 1 DF F0 .DBYT 57328 -0002BCr 1 DF F1 .DBYT 57329 -0002BEr 1 DF F2 .DBYT 57330 -0002C0r 1 DF F3 .DBYT 57331 -0002C2r 1 DF F4 .DBYT 57332 -0002C4r 1 DF F5 .DBYT 57333 -0002C6r 1 DF F6 .DBYT 57334 -0002C8r 1 DF F7 .DBYT 57335 -0002CAr 1 DF F8 .DBYT 57336 -0002CCr 1 DF F9 .DBYT 57337 -0002CEr 1 DF FA .DBYT 57338 -0002D0r 1 DF FB .DBYT 57339 -0002D2r 1 DF FC .DBYT 57340 -0002D4r 1 DF FD .DBYT 57341 -0002D6r 1 DF FE .DBYT 57342 -0002D8r 1 DF FF .DBYT 57343 -0002DAr 1 E0 00 .DBYT 57344 -0002DCr 1 E0 01 .DBYT 57345 -0002DEr 1 E0 02 .DBYT 57346 -0002E0r 1 E0 03 .DBYT 57347 -0002E2r 1 E0 04 .DBYT 57348 -0002E4r 1 E0 05 .DBYT 57349 -0002E6r 1 E0 06 .DBYT 57350 -0002E8r 1 E0 07 .DBYT 57351 -0002EAr 1 E0 08 .DBYT 57352 -0002ECr 1 E0 09 .DBYT 57353 -0002EEr 1 E0 0A .DBYT 57354 -0002F0r 1 E0 0B .DBYT 57355 -0002F2r 1 E0 0C .DBYT 57356 -0002F4r 1 E0 0D .DBYT 57357 -0002F6r 1 E0 0E .DBYT 57358 -0002F8r 1 E0 0F .DBYT 57359 -0002FAr 1 EF E1 .DBYT 61409 -0002FCr 1 EF E2 .DBYT 61410 -0002FEr 1 EF E3 .DBYT 61411 -000300r 1 EF E4 .DBYT 61412 -000302r 1 EF E5 .DBYT 61413 -000304r 1 EF E6 .DBYT 61414 -000306r 1 EF E7 .DBYT 61415 -000308r 1 EF E8 .DBYT 61416 -00030Ar 1 EF E9 .DBYT 61417 -00030Cr 1 EF EA .DBYT 61418 -00030Er 1 EF EB .DBYT 61419 -000310r 1 EF EC .DBYT 61420 -000312r 1 EF ED .DBYT 61421 -000314r 1 EF EE .DBYT 61422 -000316r 1 EF EF .DBYT 61423 -000318r 1 EF F0 .DBYT 61424 -00031Ar 1 EF F1 .DBYT 61425 -00031Cr 1 EF F2 .DBYT 61426 -00031Er 1 EF F3 .DBYT 61427 -000320r 1 EF F4 .DBYT 61428 -000322r 1 EF F5 .DBYT 61429 -000324r 1 EF F6 .DBYT 61430 -000326r 1 EF F7 .DBYT 61431 -000328r 1 EF F8 .DBYT 61432 -00032Ar 1 EF F9 .DBYT 61433 -00032Cr 1 EF FA .DBYT 61434 -00032Er 1 EF FB .DBYT 61435 -000330r 1 EF FC .DBYT 61436 -000332r 1 EF FD .DBYT 61437 -000334r 1 EF FE .DBYT 61438 -000336r 1 EF FF .DBYT 61439 -000338r 1 F0 00 .DBYT 61440 -00033Ar 1 F0 01 .DBYT 61441 -00033Cr 1 F0 02 .DBYT 61442 -00033Er 1 F0 03 .DBYT 61443 -000340r 1 F0 04 .DBYT 61444 -000342r 1 F0 05 .DBYT 61445 -000344r 1 F0 06 .DBYT 61446 -000346r 1 F0 07 .DBYT 61447 -000348r 1 F0 08 .DBYT 61448 -00034Ar 1 F0 09 .DBYT 61449 -00034Cr 1 F0 0A .DBYT 61450 -00034Er 1 F0 0B .DBYT 61451 -000350r 1 F0 0C .DBYT 61452 -000352r 1 F0 0D .DBYT 61453 -000354r 1 F0 0E .DBYT 61454 -000356r 1 F0 0F .DBYT 61455 -000358r 1 FF E1 .DBYT 65505 -00035Ar 1 FF E2 .DBYT 65506 -00035Cr 1 FF E3 .DBYT 65507 -00035Er 1 FF E4 .DBYT 65508 -000360r 1 FF E5 .DBYT 65509 -000362r 1 FF E6 .DBYT 65510 -000364r 1 FF E7 .DBYT 65511 -000366r 1 FF E8 .DBYT 65512 -000368r 1 FF E9 .DBYT 65513 -00036Ar 1 FF EA .DBYT 65514 -00036Cr 1 FF EB .DBYT 65515 -00036Er 1 FF EC .DBYT 65516 -000370r 1 FF ED .DBYT 65517 -000372r 1 FF EE .DBYT 65518 -000374r 1 FF EF .DBYT 65519 -000376r 1 FF F0 .DBYT 65520 -000378r 1 FF F1 .DBYT 65521 -00037Ar 1 FF F2 .DBYT 65522 -00037Cr 1 FF F3 .DBYT 65523 -00037Er 1 FF F4 .DBYT 65524 -000380r 1 FF F5 .DBYT 65525 -000382r 1 FF F6 .DBYT 65526 -000384r 1 FF F7 .DBYT 65527 -000386r 1 FF F8 .DBYT 65528 -000388r 1 FF F9 .DBYT 65529 -00038Ar 1 FF FA .DBYT 65530 -00038Cr 1 FF FB .DBYT 65531 -00038Er 1 FF FC .DBYT 65532 -000390r 1 FF FD .DBYT 65533 -000392r 1 FF FE .DBYT 65534 -000394r 1 FF FF .DBYT 65535 +000000r 1 ; upper case pseudo-op +000000r 1 00 00 .DBYT 0 +000002r 1 00 01 .DBYT 1 +000004r 1 00 02 .DBYT 2 +000006r 1 00 03 .DBYT 3 +000008r 1 00 04 .DBYT 4 +00000Ar 1 00 05 .DBYT 5 +00000Cr 1 00 06 .DBYT 6 +00000Er 1 00 07 .DBYT 7 +000010r 1 00 08 .DBYT 8 +000012r 1 00 09 .DBYT 9 +000014r 1 00 0A .DBYT 10 +000016r 1 00 0B .DBYT 11 +000018r 1 00 0C .DBYT 12 +00001Ar 1 00 0D .DBYT 13 +00001Cr 1 00 0E .DBYT 14 +00001Er 1 00 0F .DBYT 15 +000020r 1 00 10 .DBYT 16 +000022r 1 00 11 .DBYT 17 +000024r 1 00 12 .DBYT 18 +000026r 1 00 13 .DBYT 19 +000028r 1 00 70 .DBYT 112 +00002Ar 1 00 71 .DBYT 113 +00002Cr 1 00 72 .DBYT 114 +00002Er 1 00 73 .DBYT 115 +000030r 1 00 74 .DBYT 116 +000032r 1 00 75 .DBYT 117 +000034r 1 00 76 .DBYT 118 +000036r 1 00 77 .DBYT 119 +000038r 1 00 78 .DBYT 120 +00003Ar 1 00 79 .DBYT 121 +00003Cr 1 00 7A .DBYT 122 +00003Er 1 00 7B .DBYT 123 +000040r 1 00 7C .DBYT 124 +000042r 1 00 7D .DBYT 125 +000044r 1 00 7E .DBYT 126 +000046r 1 00 7F .DBYT 127 +000048r 1 00 80 .DBYT 128 +00004Ar 1 00 81 .DBYT 129 +00004Cr 1 00 82 .DBYT 130 +00004Er 1 00 83 .DBYT 131 +000050r 1 00 84 .DBYT 132 +000052r 1 00 85 .DBYT 133 +000054r 1 00 86 .DBYT 134 +000056r 1 00 F0 .DBYT 240 +000058r 1 00 F1 .DBYT 241 +00005Ar 1 00 F2 .DBYT 242 +00005Cr 1 00 F3 .DBYT 243 +00005Er 1 00 F4 .DBYT 244 +000060r 1 00 F5 .DBYT 245 +000062r 1 00 F6 .DBYT 246 +000064r 1 00 F7 .DBYT 247 +000066r 1 00 F8 .DBYT 248 +000068r 1 00 F9 .DBYT 249 +00006Ar 1 00 FA .DBYT 250 +00006Cr 1 00 FB .DBYT 251 +00006Er 1 00 FC .DBYT 252 +000070r 1 00 FD .DBYT 253 +000072r 1 00 FE .DBYT 254 +000074r 1 00 FF .DBYT 255 +000076r 1 01 00 .DBYT 256 +000078r 1 01 01 .DBYT 257 +00007Ar 1 01 02 .DBYT 258 +00007Cr 1 01 03 .DBYT 259 +00007Er 1 0F D2 .DBYT 4050 +000080r 1 0F D3 .DBYT 4051 +000082r 1 0F D4 .DBYT 4052 +000084r 1 0F D5 .DBYT 4053 +000086r 1 0F D6 .DBYT 4054 +000088r 1 0F D7 .DBYT 4055 +00008Ar 1 0F D8 .DBYT 4056 +00008Cr 1 0F D9 .DBYT 4057 +00008Er 1 0F DA .DBYT 4058 +000090r 1 0F DB .DBYT 4059 +000092r 1 0F DC .DBYT 4060 +000094r 1 0F DD .DBYT 4061 +000096r 1 0F DE .DBYT 4062 +000098r 1 0F DF .DBYT 4063 +00009Ar 1 0F E0 .DBYT 4064 +00009Cr 1 0F E1 .DBYT 4065 +00009Er 1 0F E2 .DBYT 4066 +0000A0r 1 0F E3 .DBYT 4067 +0000A2r 1 0F E4 .DBYT 4068 +0000A4r 1 0F E5 .DBYT 4069 +0000A6r 1 0F E6 .DBYT 4070 +0000A8r 1 0F E7 .DBYT 4071 +0000AAr 1 0F E8 .DBYT 4072 +0000ACr 1 0F E9 .DBYT 4073 +0000AEr 1 0F EA .DBYT 4074 +0000B0r 1 0F EB .DBYT 4075 +0000B2r 1 0F EC .DBYT 4076 +0000B4r 1 0F ED .DBYT 4077 +0000B6r 1 0F EE .DBYT 4078 +0000B8r 1 0F EF .DBYT 4079 +0000BAr 1 0F F0 .DBYT 4080 +0000BCr 1 0F F1 .DBYT 4081 +0000BEr 1 0F F2 .DBYT 4082 +0000C0r 1 0F F3 .DBYT 4083 +0000C2r 1 0F F4 .DBYT 4084 +0000C4r 1 0F F5 .DBYT 4085 +0000C6r 1 0F F6 .DBYT 4086 +0000C8r 1 0F F7 .DBYT 4087 +0000CAr 1 0F F8 .DBYT 4088 +0000CCr 1 0F F9 .DBYT 4089 +0000CEr 1 0F FA .DBYT 4090 +0000D0r 1 0F FB .DBYT 4091 +0000D2r 1 0F FC .DBYT 4092 +0000D4r 1 0F FD .DBYT 4093 +0000D6r 1 0F FE .DBYT 4094 +0000D8r 1 0F FF .DBYT 4095 +0000DAr 1 10 00 .DBYT 4096 +0000DCr 1 10 01 .DBYT 4097 +0000DEr 1 10 02 .DBYT 4098 +0000E0r 1 10 03 .DBYT 4099 +0000E2r 1 10 04 .DBYT 4100 +0000E4r 1 10 05 .DBYT 4101 +0000E6r 1 10 06 .DBYT 4102 +0000E8r 1 10 07 .DBYT 4103 +0000EAr 1 10 08 .DBYT 4104 +0000ECr 1 7F F0 .DBYT 32752 +0000EEr 1 7F F1 .DBYT 32753 +0000F0r 1 7F F2 .DBYT 32754 +0000F2r 1 7F F3 .DBYT 32755 +0000F4r 1 7F F4 .DBYT 32756 +0000F6r 1 7F F5 .DBYT 32757 +0000F8r 1 7F F6 .DBYT 32758 +0000FAr 1 7F F7 .DBYT 32759 +0000FCr 1 7F F8 .DBYT 32760 +0000FEr 1 7F F9 .DBYT 32761 +000100r 1 7F FA .DBYT 32762 +000102r 1 7F FB .DBYT 32763 +000104r 1 7F FC .DBYT 32764 +000106r 1 7F FD .DBYT 32765 +000108r 1 7F FE .DBYT 32766 +00010Ar 1 7F FF .DBYT 32767 +00010Cr 1 80 00 .DBYT 32768 +00010Er 1 80 01 .DBYT 32769 +000110r 1 80 02 .DBYT 32770 +000112r 1 80 03 .DBYT 32771 +000114r 1 80 04 .DBYT 32772 +000116r 1 80 05 .DBYT 32773 +000118r 1 80 06 .DBYT 32774 +00011Ar 1 80 07 .DBYT 32775 +00011Cr 1 80 08 .DBYT 32776 +00011Er 1 80 09 .DBYT 32777 +000120r 1 80 0A .DBYT 32778 +000122r 1 80 0B .DBYT 32779 +000124r 1 9F E1 .DBYT 40929 +000126r 1 9F E2 .DBYT 40930 +000128r 1 9F E3 .DBYT 40931 +00012Ar 1 9F E4 .DBYT 40932 +00012Cr 1 9F E5 .DBYT 40933 +00012Er 1 9F E6 .DBYT 40934 +000130r 1 9F E7 .DBYT 40935 +000132r 1 9F E8 .DBYT 40936 +000134r 1 9F E9 .DBYT 40937 +000136r 1 9F EA .DBYT 40938 +000138r 1 9F EB .DBYT 40939 +00013Ar 1 9F EC .DBYT 40940 +00013Cr 1 9F ED .DBYT 40941 +00013Er 1 9F EE .DBYT 40942 +000140r 1 9F EF .DBYT 40943 +000142r 1 9F F0 .DBYT 40944 +000144r 1 9F F1 .DBYT 40945 +000146r 1 9F F2 .DBYT 40946 +000148r 1 9F F3 .DBYT 40947 +00014Ar 1 9F F4 .DBYT 40948 +00014Cr 1 9F F5 .DBYT 40949 +00014Er 1 9F F6 .DBYT 40950 +000150r 1 9F F7 .DBYT 40951 +000152r 1 9F F8 .DBYT 40952 +000154r 1 9F F9 .DBYT 40953 +000156r 1 9F FA .DBYT 40954 +000158r 1 9F FB .DBYT 40955 +00015Ar 1 9F FC .DBYT 40956 +00015Cr 1 9F FD .DBYT 40957 +00015Er 1 9F FE .DBYT 40958 +000160r 1 9F FF .DBYT 40959 +000162r 1 A0 00 .DBYT 40960 +000164r 1 A0 01 .DBYT 40961 +000166r 1 A0 02 .DBYT 40962 +000168r 1 A0 03 .DBYT 40963 +00016Ar 1 A0 04 .DBYT 40964 +00016Cr 1 A0 05 .DBYT 40965 +00016Er 1 A0 06 .DBYT 40966 +000170r 1 A0 07 .DBYT 40967 +000172r 1 A0 08 .DBYT 40968 +000174r 1 A0 09 .DBYT 40969 +000176r 1 A0 0A .DBYT 40970 +000178r 1 A0 0B .DBYT 40971 +00017Ar 1 A0 0C .DBYT 40972 +00017Cr 1 A0 0D .DBYT 40973 +00017Er 1 A0 0E .DBYT 40974 +000180r 1 A0 0F .DBYT 40975 +000182r 1 AF E1 .DBYT 45025 +000184r 1 AF E2 .DBYT 45026 +000186r 1 AF E3 .DBYT 45027 +000188r 1 AF E4 .DBYT 45028 +00018Ar 1 AF E5 .DBYT 45029 +00018Cr 1 AF E6 .DBYT 45030 +00018Er 1 AF E7 .DBYT 45031 +000190r 1 AF E8 .DBYT 45032 +000192r 1 AF E9 .DBYT 45033 +000194r 1 AF EA .DBYT 45034 +000196r 1 AF EB .DBYT 45035 +000198r 1 AF EC .DBYT 45036 +00019Ar 1 AF ED .DBYT 45037 +00019Cr 1 AF EE .DBYT 45038 +00019Er 1 AF EF .DBYT 45039 +0001A0r 1 AF F0 .DBYT 45040 +0001A2r 1 AF F1 .DBYT 45041 +0001A4r 1 AF F2 .DBYT 45042 +0001A6r 1 AF F3 .DBYT 45043 +0001A8r 1 AF F4 .DBYT 45044 +0001AAr 1 AF F5 .DBYT 45045 +0001ACr 1 AF F6 .DBYT 45046 +0001AEr 1 AF F7 .DBYT 45047 +0001B0r 1 AF F8 .DBYT 45048 +0001B2r 1 AF F9 .DBYT 45049 +0001B4r 1 AF FA .DBYT 45050 +0001B6r 1 AF FB .DBYT 45051 +0001B8r 1 AF FC .DBYT 45052 +0001BAr 1 AF FD .DBYT 45053 +0001BCr 1 AF FE .DBYT 45054 +0001BEr 1 AF FF .DBYT 45055 +0001C0r 1 B0 00 .DBYT 45056 +0001C2r 1 B0 01 .DBYT 45057 +0001C4r 1 B0 02 .DBYT 45058 +0001C6r 1 B0 03 .DBYT 45059 +0001C8r 1 B0 04 .DBYT 45060 +0001CAr 1 B0 05 .DBYT 45061 +0001CCr 1 B0 06 .DBYT 45062 +0001CEr 1 B0 07 .DBYT 45063 +0001D0r 1 B0 08 .DBYT 45064 +0001D2r 1 B0 09 .DBYT 45065 +0001D4r 1 B0 0A .DBYT 45066 +0001D6r 1 B0 0B .DBYT 45067 +0001D8r 1 B0 0C .DBYT 45068 +0001DAr 1 B0 0D .DBYT 45069 +0001DCr 1 B0 0E .DBYT 45070 +0001DEr 1 B0 0F .DBYT 45071 +0001E0r 1 BF E1 .DBYT 49121 +0001E2r 1 BF E2 .DBYT 49122 +0001E4r 1 BF E3 .DBYT 49123 +0001E6r 1 BF E4 .DBYT 49124 +0001E8r 1 BF E5 .DBYT 49125 +0001EAr 1 BF E6 .DBYT 49126 +0001ECr 1 BF E7 .DBYT 49127 +0001EEr 1 BF E8 .DBYT 49128 +0001F0r 1 BF E9 .DBYT 49129 +0001F2r 1 BF EA .DBYT 49130 +0001F4r 1 BF EB .DBYT 49131 +0001F6r 1 BF EC .DBYT 49132 +0001F8r 1 BF ED .DBYT 49133 +0001FAr 1 BF EE .DBYT 49134 +0001FCr 1 BF EF .DBYT 49135 +0001FEr 1 BF F0 .DBYT 49136 +000200r 1 BF F1 .DBYT 49137 +000202r 1 BF F2 .DBYT 49138 +000204r 1 BF F3 .DBYT 49139 +000206r 1 BF F4 .DBYT 49140 +000208r 1 BF F5 .DBYT 49141 +00020Ar 1 BF F6 .DBYT 49142 +00020Cr 1 BF F7 .DBYT 49143 +00020Er 1 BF F8 .DBYT 49144 +000210r 1 BF F9 .DBYT 49145 +000212r 1 BF FA .DBYT 49146 +000214r 1 BF FB .DBYT 49147 +000216r 1 BF FC .DBYT 49148 +000218r 1 BF FD .DBYT 49149 +00021Ar 1 BF FE .DBYT 49150 +00021Cr 1 BF FF .DBYT 49151 +00021Er 1 C0 00 .DBYT 49152 +000220r 1 C0 01 .DBYT 49153 +000222r 1 C0 02 .DBYT 49154 +000224r 1 C0 03 .DBYT 49155 +000226r 1 C0 04 .DBYT 49156 +000228r 1 C0 05 .DBYT 49157 +00022Ar 1 C0 06 .DBYT 49158 +00022Cr 1 C0 07 .DBYT 49159 +00022Er 1 C0 08 .DBYT 49160 +000230r 1 C0 09 .DBYT 49161 +000232r 1 C0 0A .DBYT 49162 +000234r 1 C0 0B .DBYT 49163 +000236r 1 C0 0C .DBYT 49164 +000238r 1 C0 0D .DBYT 49165 +00023Ar 1 C0 0E .DBYT 49166 +00023Cr 1 C0 0F .DBYT 49167 +00023Er 1 CF E1 .DBYT 53217 +000240r 1 CF E2 .DBYT 53218 +000242r 1 CF E3 .DBYT 53219 +000244r 1 CF E4 .DBYT 53220 +000246r 1 CF E5 .DBYT 53221 +000248r 1 CF E6 .DBYT 53222 +00024Ar 1 CF E7 .DBYT 53223 +00024Cr 1 CF E8 .DBYT 53224 +00024Er 1 CF E9 .DBYT 53225 +000250r 1 CF EA .DBYT 53226 +000252r 1 CF EB .DBYT 53227 +000254r 1 CF EC .DBYT 53228 +000256r 1 CF ED .DBYT 53229 +000258r 1 CF EE .DBYT 53230 +00025Ar 1 CF EF .DBYT 53231 +00025Cr 1 CF F0 .DBYT 53232 +00025Er 1 CF F1 .DBYT 53233 +000260r 1 CF F2 .DBYT 53234 +000262r 1 CF F3 .DBYT 53235 +000264r 1 CF F4 .DBYT 53236 +000266r 1 CF F5 .DBYT 53237 +000268r 1 CF F6 .DBYT 53238 +00026Ar 1 CF F7 .DBYT 53239 +00026Cr 1 CF F8 .DBYT 53240 +00026Er 1 CF F9 .DBYT 53241 +000270r 1 CF FA .DBYT 53242 +000272r 1 CF FB .DBYT 53243 +000274r 1 CF FC .DBYT 53244 +000276r 1 CF FD .DBYT 53245 +000278r 1 CF FE .DBYT 53246 +00027Ar 1 CF FF .DBYT 53247 +00027Cr 1 D0 00 .DBYT 53248 +00027Er 1 D0 01 .DBYT 53249 +000280r 1 D0 02 .DBYT 53250 +000282r 1 D0 03 .DBYT 53251 +000284r 1 D0 04 .DBYT 53252 +000286r 1 D0 05 .DBYT 53253 +000288r 1 D0 06 .DBYT 53254 +00028Ar 1 D0 07 .DBYT 53255 +00028Cr 1 D0 08 .DBYT 53256 +00028Er 1 D0 09 .DBYT 53257 +000290r 1 D0 0A .DBYT 53258 +000292r 1 D0 0B .DBYT 53259 +000294r 1 D0 0C .DBYT 53260 +000296r 1 D0 0D .DBYT 53261 +000298r 1 D0 0E .DBYT 53262 +00029Ar 1 D0 0F .DBYT 53263 +00029Cr 1 DF E1 .DBYT 57313 +00029Er 1 DF E2 .DBYT 57314 +0002A0r 1 DF E3 .DBYT 57315 +0002A2r 1 DF E4 .DBYT 57316 +0002A4r 1 DF E5 .DBYT 57317 +0002A6r 1 DF E6 .DBYT 57318 +0002A8r 1 DF E7 .DBYT 57319 +0002AAr 1 DF E8 .DBYT 57320 +0002ACr 1 DF E9 .DBYT 57321 +0002AEr 1 DF EA .DBYT 57322 +0002B0r 1 DF EB .DBYT 57323 +0002B2r 1 DF EC .DBYT 57324 +0002B4r 1 DF ED .DBYT 57325 +0002B6r 1 DF EE .DBYT 57326 +0002B8r 1 DF EF .DBYT 57327 +0002BAr 1 DF F0 .DBYT 57328 +0002BCr 1 DF F1 .DBYT 57329 +0002BEr 1 DF F2 .DBYT 57330 +0002C0r 1 DF F3 .DBYT 57331 +0002C2r 1 DF F4 .DBYT 57332 +0002C4r 1 DF F5 .DBYT 57333 +0002C6r 1 DF F6 .DBYT 57334 +0002C8r 1 DF F7 .DBYT 57335 +0002CAr 1 DF F8 .DBYT 57336 +0002CCr 1 DF F9 .DBYT 57337 +0002CEr 1 DF FA .DBYT 57338 +0002D0r 1 DF FB .DBYT 57339 +0002D2r 1 DF FC .DBYT 57340 +0002D4r 1 DF FD .DBYT 57341 +0002D6r 1 DF FE .DBYT 57342 +0002D8r 1 DF FF .DBYT 57343 +0002DAr 1 E0 00 .DBYT 57344 +0002DCr 1 E0 01 .DBYT 57345 +0002DEr 1 E0 02 .DBYT 57346 +0002E0r 1 E0 03 .DBYT 57347 +0002E2r 1 E0 04 .DBYT 57348 +0002E4r 1 E0 05 .DBYT 57349 +0002E6r 1 E0 06 .DBYT 57350 +0002E8r 1 E0 07 .DBYT 57351 +0002EAr 1 E0 08 .DBYT 57352 +0002ECr 1 E0 09 .DBYT 57353 +0002EEr 1 E0 0A .DBYT 57354 +0002F0r 1 E0 0B .DBYT 57355 +0002F2r 1 E0 0C .DBYT 57356 +0002F4r 1 E0 0D .DBYT 57357 +0002F6r 1 E0 0E .DBYT 57358 +0002F8r 1 E0 0F .DBYT 57359 +0002FAr 1 EF E1 .DBYT 61409 +0002FCr 1 EF E2 .DBYT 61410 +0002FEr 1 EF E3 .DBYT 61411 +000300r 1 EF E4 .DBYT 61412 +000302r 1 EF E5 .DBYT 61413 +000304r 1 EF E6 .DBYT 61414 +000306r 1 EF E7 .DBYT 61415 +000308r 1 EF E8 .DBYT 61416 +00030Ar 1 EF E9 .DBYT 61417 +00030Cr 1 EF EA .DBYT 61418 +00030Er 1 EF EB .DBYT 61419 +000310r 1 EF EC .DBYT 61420 +000312r 1 EF ED .DBYT 61421 +000314r 1 EF EE .DBYT 61422 +000316r 1 EF EF .DBYT 61423 +000318r 1 EF F0 .DBYT 61424 +00031Ar 1 EF F1 .DBYT 61425 +00031Cr 1 EF F2 .DBYT 61426 +00031Er 1 EF F3 .DBYT 61427 +000320r 1 EF F4 .DBYT 61428 +000322r 1 EF F5 .DBYT 61429 +000324r 1 EF F6 .DBYT 61430 +000326r 1 EF F7 .DBYT 61431 +000328r 1 EF F8 .DBYT 61432 +00032Ar 1 EF F9 .DBYT 61433 +00032Cr 1 EF FA .DBYT 61434 +00032Er 1 EF FB .DBYT 61435 +000330r 1 EF FC .DBYT 61436 +000332r 1 EF FD .DBYT 61437 +000334r 1 EF FE .DBYT 61438 +000336r 1 EF FF .DBYT 61439 +000338r 1 F0 00 .DBYT 61440 +00033Ar 1 F0 01 .DBYT 61441 +00033Cr 1 F0 02 .DBYT 61442 +00033Er 1 F0 03 .DBYT 61443 +000340r 1 F0 04 .DBYT 61444 +000342r 1 F0 05 .DBYT 61445 +000344r 1 F0 06 .DBYT 61446 +000346r 1 F0 07 .DBYT 61447 +000348r 1 F0 08 .DBYT 61448 +00034Ar 1 F0 09 .DBYT 61449 +00034Cr 1 F0 0A .DBYT 61450 +00034Er 1 F0 0B .DBYT 61451 +000350r 1 F0 0C .DBYT 61452 +000352r 1 F0 0D .DBYT 61453 +000354r 1 F0 0E .DBYT 61454 +000356r 1 F0 0F .DBYT 61455 +000358r 1 FF E1 .DBYT 65505 +00035Ar 1 FF E2 .DBYT 65506 +00035Cr 1 FF E3 .DBYT 65507 +00035Er 1 FF E4 .DBYT 65508 +000360r 1 FF E5 .DBYT 65509 +000362r 1 FF E6 .DBYT 65510 +000364r 1 FF E7 .DBYT 65511 +000366r 1 FF E8 .DBYT 65512 +000368r 1 FF E9 .DBYT 65513 +00036Ar 1 FF EA .DBYT 65514 +00036Cr 1 FF EB .DBYT 65515 +00036Er 1 FF EC .DBYT 65516 +000370r 1 FF ED .DBYT 65517 +000372r 1 FF EE .DBYT 65518 +000374r 1 FF EF .DBYT 65519 +000376r 1 FF F0 .DBYT 65520 +000378r 1 FF F1 .DBYT 65521 +00037Ar 1 FF F2 .DBYT 65522 +00037Cr 1 FF F3 .DBYT 65523 +00037Er 1 FF F4 .DBYT 65524 +000380r 1 FF F5 .DBYT 65525 +000382r 1 FF F6 .DBYT 65526 +000384r 1 FF F7 .DBYT 65527 +000386r 1 FF F8 .DBYT 65528 +000388r 1 FF F9 .DBYT 65529 +00038Ar 1 FF FA .DBYT 65530 +00038Cr 1 FF FB .DBYT 65531 +00038Er 1 FF FC .DBYT 65532 +000390r 1 FF FD .DBYT 65533 +000392r 1 FF FE .DBYT 65534 +000394r 1 FF FF .DBYT 65535 000396r 1 -000396r 1 ; lower case pseudo-op -000396r 1 00 00 .dbyt 0 -000398r 1 00 01 .dbyt 1 -00039Ar 1 00 02 .dbyt 2 -00039Cr 1 00 03 .dbyt 3 -00039Er 1 00 04 .dbyt 4 -0003A0r 1 00 05 .dbyt 5 -0003A2r 1 00 06 .dbyt 6 -0003A4r 1 00 07 .dbyt 7 -0003A6r 1 00 08 .dbyt 8 -0003A8r 1 00 09 .dbyt 9 -0003AAr 1 00 0A .dbyt 10 -0003ACr 1 00 0B .dbyt 11 -0003AEr 1 00 0C .dbyt 12 -0003B0r 1 00 0D .dbyt 13 -0003B2r 1 00 0E .dbyt 14 -0003B4r 1 00 0F .dbyt 15 -0003B6r 1 00 10 .dbyt 16 -0003B8r 1 00 11 .dbyt 17 -0003BAr 1 00 12 .dbyt 18 -0003BCr 1 00 13 .dbyt 19 -0003BEr 1 00 70 .dbyt 112 -0003C0r 1 00 71 .dbyt 113 -0003C2r 1 00 72 .dbyt 114 -0003C4r 1 00 73 .dbyt 115 -0003C6r 1 00 74 .dbyt 116 -0003C8r 1 00 75 .dbyt 117 -0003CAr 1 00 76 .dbyt 118 -0003CCr 1 00 77 .dbyt 119 -0003CEr 1 00 78 .dbyt 120 -0003D0r 1 00 79 .dbyt 121 -0003D2r 1 00 7A .dbyt 122 -0003D4r 1 00 7B .dbyt 123 -0003D6r 1 00 7C .dbyt 124 -0003D8r 1 00 7D .dbyt 125 -0003DAr 1 00 7E .dbyt 126 -0003DCr 1 00 7F .dbyt 127 -0003DEr 1 00 80 .dbyt 128 -0003E0r 1 00 81 .dbyt 129 -0003E2r 1 00 82 .dbyt 130 -0003E4r 1 00 83 .dbyt 131 -0003E6r 1 00 84 .dbyt 132 -0003E8r 1 00 85 .dbyt 133 -0003EAr 1 00 86 .dbyt 134 -0003ECr 1 00 F0 .dbyt 240 -0003EEr 1 00 F1 .dbyt 241 -0003F0r 1 00 F2 .dbyt 242 -0003F2r 1 00 F3 .dbyt 243 -0003F4r 1 00 F4 .dbyt 244 -0003F6r 1 00 F5 .dbyt 245 -0003F8r 1 00 F6 .dbyt 246 -0003FAr 1 00 F7 .dbyt 247 -0003FCr 1 00 F8 .dbyt 248 -0003FEr 1 00 F9 .dbyt 249 -000400r 1 00 FA .dbyt 250 -000402r 1 00 FB .dbyt 251 -000404r 1 00 FC .dbyt 252 -000406r 1 00 FD .dbyt 253 -000408r 1 00 FE .dbyt 254 -00040Ar 1 00 FF .dbyt 255 -00040Cr 1 01 00 .dbyt 256 -00040Er 1 01 01 .dbyt 257 -000410r 1 01 02 .dbyt 258 -000412r 1 01 03 .dbyt 259 -000414r 1 0F D2 .dbyt 4050 -000416r 1 0F D3 .dbyt 4051 -000418r 1 0F D4 .dbyt 4052 -00041Ar 1 0F D5 .dbyt 4053 -00041Cr 1 0F D6 .dbyt 4054 -00041Er 1 0F D7 .dbyt 4055 -000420r 1 0F D8 .dbyt 4056 -000422r 1 0F D9 .dbyt 4057 -000424r 1 0F DA .dbyt 4058 -000426r 1 0F DB .dbyt 4059 -000428r 1 0F DC .dbyt 4060 -00042Ar 1 0F DD .dbyt 4061 -00042Cr 1 0F DE .dbyt 4062 -00042Er 1 0F DF .dbyt 4063 -000430r 1 0F E0 .dbyt 4064 -000432r 1 0F E1 .dbyt 4065 -000434r 1 0F E2 .dbyt 4066 -000436r 1 0F E3 .dbyt 4067 -000438r 1 0F E4 .dbyt 4068 -00043Ar 1 0F E5 .dbyt 4069 -00043Cr 1 0F E6 .dbyt 4070 -00043Er 1 0F E7 .dbyt 4071 -000440r 1 0F E8 .dbyt 4072 -000442r 1 0F E9 .dbyt 4073 -000444r 1 0F EA .dbyt 4074 -000446r 1 0F EB .dbyt 4075 -000448r 1 0F EC .dbyt 4076 -00044Ar 1 0F ED .dbyt 4077 -00044Cr 1 0F EE .dbyt 4078 -00044Er 1 0F EF .dbyt 4079 -000450r 1 0F F0 .dbyt 4080 -000452r 1 0F F1 .dbyt 4081 -000454r 1 0F F2 .dbyt 4082 -000456r 1 0F F3 .dbyt 4083 -000458r 1 0F F4 .dbyt 4084 -00045Ar 1 0F F5 .dbyt 4085 -00045Cr 1 0F F6 .dbyt 4086 -00045Er 1 0F F7 .dbyt 4087 -000460r 1 0F F8 .dbyt 4088 -000462r 1 0F F9 .dbyt 4089 -000464r 1 0F FA .dbyt 4090 -000466r 1 0F FB .dbyt 4091 -000468r 1 0F FC .dbyt 4092 -00046Ar 1 0F FD .dbyt 4093 -00046Cr 1 0F FE .dbyt 4094 -00046Er 1 0F FF .dbyt 4095 -000470r 1 10 00 .dbyt 4096 -000472r 1 10 01 .dbyt 4097 -000474r 1 10 02 .dbyt 4098 -000476r 1 10 03 .dbyt 4099 -000478r 1 10 04 .dbyt 4100 -00047Ar 1 10 05 .dbyt 4101 -00047Cr 1 10 06 .dbyt 4102 -00047Er 1 10 07 .dbyt 4103 -000480r 1 10 08 .dbyt 4104 -000482r 1 7F F0 .dbyt 32752 -000484r 1 7F F1 .dbyt 32753 -000486r 1 7F F2 .dbyt 32754 -000488r 1 7F F3 .dbyt 32755 -00048Ar 1 7F F4 .dbyt 32756 -00048Cr 1 7F F5 .dbyt 32757 -00048Er 1 7F F6 .dbyt 32758 -000490r 1 7F F7 .dbyt 32759 -000492r 1 7F F8 .dbyt 32760 -000494r 1 7F F9 .dbyt 32761 -000496r 1 7F FA .dbyt 32762 -000498r 1 7F FB .dbyt 32763 -00049Ar 1 7F FC .dbyt 32764 -00049Cr 1 7F FD .dbyt 32765 -00049Er 1 7F FE .dbyt 32766 -0004A0r 1 7F FF .dbyt 32767 -0004A2r 1 80 00 .dbyt 32768 -0004A4r 1 80 01 .dbyt 32769 -0004A6r 1 80 02 .dbyt 32770 -0004A8r 1 80 03 .dbyt 32771 -0004AAr 1 80 04 .dbyt 32772 -0004ACr 1 80 05 .dbyt 32773 -0004AEr 1 80 06 .dbyt 32774 -0004B0r 1 80 07 .dbyt 32775 -0004B2r 1 80 08 .dbyt 32776 -0004B4r 1 80 09 .dbyt 32777 -0004B6r 1 80 0A .dbyt 32778 -0004B8r 1 80 0B .dbyt 32779 -0004BAr 1 9F E1 .dbyt 40929 -0004BCr 1 9F E2 .dbyt 40930 -0004BEr 1 9F E3 .dbyt 40931 -0004C0r 1 9F E4 .dbyt 40932 -0004C2r 1 9F E5 .dbyt 40933 -0004C4r 1 9F E6 .dbyt 40934 -0004C6r 1 9F E7 .dbyt 40935 -0004C8r 1 9F E8 .dbyt 40936 -0004CAr 1 9F E9 .dbyt 40937 -0004CCr 1 9F EA .dbyt 40938 -0004CEr 1 9F EB .dbyt 40939 -0004D0r 1 9F EC .dbyt 40940 -0004D2r 1 9F ED .dbyt 40941 -0004D4r 1 9F EE .dbyt 40942 -0004D6r 1 9F EF .dbyt 40943 -0004D8r 1 9F F0 .dbyt 40944 -0004DAr 1 9F F1 .dbyt 40945 -0004DCr 1 9F F2 .dbyt 40946 -0004DEr 1 9F F3 .dbyt 40947 -0004E0r 1 9F F4 .dbyt 40948 -0004E2r 1 9F F5 .dbyt 40949 -0004E4r 1 9F F6 .dbyt 40950 -0004E6r 1 9F F7 .dbyt 40951 -0004E8r 1 9F F8 .dbyt 40952 -0004EAr 1 9F F9 .dbyt 40953 -0004ECr 1 9F FA .dbyt 40954 -0004EEr 1 9F FB .dbyt 40955 -0004F0r 1 9F FC .dbyt 40956 -0004F2r 1 9F FD .dbyt 40957 -0004F4r 1 9F FE .dbyt 40958 -0004F6r 1 9F FF .dbyt 40959 -0004F8r 1 A0 00 .dbyt 40960 -0004FAr 1 A0 01 .dbyt 40961 -0004FCr 1 A0 02 .dbyt 40962 -0004FEr 1 A0 03 .dbyt 40963 -000500r 1 A0 04 .dbyt 40964 -000502r 1 A0 05 .dbyt 40965 -000504r 1 A0 06 .dbyt 40966 -000506r 1 A0 07 .dbyt 40967 -000508r 1 A0 08 .dbyt 40968 -00050Ar 1 A0 09 .dbyt 40969 -00050Cr 1 A0 0A .dbyt 40970 -00050Er 1 A0 0B .dbyt 40971 -000510r 1 A0 0C .dbyt 40972 -000512r 1 A0 0D .dbyt 40973 -000514r 1 A0 0E .dbyt 40974 -000516r 1 A0 0F .dbyt 40975 -000518r 1 AF E1 .dbyt 45025 -00051Ar 1 AF E2 .dbyt 45026 -00051Cr 1 AF E3 .dbyt 45027 -00051Er 1 AF E4 .dbyt 45028 -000520r 1 AF E5 .dbyt 45029 -000522r 1 AF E6 .dbyt 45030 -000524r 1 AF E7 .dbyt 45031 -000526r 1 AF E8 .dbyt 45032 -000528r 1 AF E9 .dbyt 45033 -00052Ar 1 AF EA .dbyt 45034 -00052Cr 1 AF EB .dbyt 45035 -00052Er 1 AF EC .dbyt 45036 -000530r 1 AF ED .dbyt 45037 -000532r 1 AF EE .dbyt 45038 -000534r 1 AF EF .dbyt 45039 -000536r 1 AF F0 .dbyt 45040 -000538r 1 AF F1 .dbyt 45041 -00053Ar 1 AF F2 .dbyt 45042 -00053Cr 1 AF F3 .dbyt 45043 -00053Er 1 AF F4 .dbyt 45044 -000540r 1 AF F5 .dbyt 45045 -000542r 1 AF F6 .dbyt 45046 -000544r 1 AF F7 .dbyt 45047 -000546r 1 AF F8 .dbyt 45048 -000548r 1 AF F9 .dbyt 45049 -00054Ar 1 AF FA .dbyt 45050 -00054Cr 1 AF FB .dbyt 45051 -00054Er 1 AF FC .dbyt 45052 -000550r 1 AF FD .dbyt 45053 -000552r 1 AF FE .dbyt 45054 -000554r 1 AF FF .dbyt 45055 -000556r 1 B0 00 .dbyt 45056 -000558r 1 B0 01 .dbyt 45057 -00055Ar 1 B0 02 .dbyt 45058 -00055Cr 1 B0 03 .dbyt 45059 -00055Er 1 B0 04 .dbyt 45060 -000560r 1 B0 05 .dbyt 45061 -000562r 1 B0 06 .dbyt 45062 -000564r 1 B0 07 .dbyt 45063 -000566r 1 B0 08 .dbyt 45064 -000568r 1 B0 09 .dbyt 45065 -00056Ar 1 B0 0A .dbyt 45066 -00056Cr 1 B0 0B .dbyt 45067 -00056Er 1 B0 0C .dbyt 45068 -000570r 1 B0 0D .dbyt 45069 -000572r 1 B0 0E .dbyt 45070 -000574r 1 B0 0F .dbyt 45071 -000576r 1 BF E1 .dbyt 49121 -000578r 1 BF E2 .dbyt 49122 -00057Ar 1 BF E3 .dbyt 49123 -00057Cr 1 BF E4 .dbyt 49124 -00057Er 1 BF E5 .dbyt 49125 -000580r 1 BF E6 .dbyt 49126 -000582r 1 BF E7 .dbyt 49127 -000584r 1 BF E8 .dbyt 49128 -000586r 1 BF E9 .dbyt 49129 -000588r 1 BF EA .dbyt 49130 -00058Ar 1 BF EB .dbyt 49131 -00058Cr 1 BF EC .dbyt 49132 -00058Er 1 BF ED .dbyt 49133 -000590r 1 BF EE .dbyt 49134 -000592r 1 BF EF .dbyt 49135 -000594r 1 BF F0 .dbyt 49136 -000596r 1 BF F1 .dbyt 49137 -000598r 1 BF F2 .dbyt 49138 -00059Ar 1 BF F3 .dbyt 49139 -00059Cr 1 BF F4 .dbyt 49140 -00059Er 1 BF F5 .dbyt 49141 -0005A0r 1 BF F6 .dbyt 49142 -0005A2r 1 BF F7 .dbyt 49143 -0005A4r 1 BF F8 .dbyt 49144 -0005A6r 1 BF F9 .dbyt 49145 -0005A8r 1 BF FA .dbyt 49146 -0005AAr 1 BF FB .dbyt 49147 -0005ACr 1 BF FC .dbyt 49148 -0005AEr 1 BF FD .dbyt 49149 -0005B0r 1 BF FE .dbyt 49150 -0005B2r 1 BF FF .dbyt 49151 -0005B4r 1 C0 00 .dbyt 49152 -0005B6r 1 C0 01 .dbyt 49153 -0005B8r 1 C0 02 .dbyt 49154 -0005BAr 1 C0 03 .dbyt 49155 -0005BCr 1 C0 04 .dbyt 49156 -0005BEr 1 C0 05 .dbyt 49157 -0005C0r 1 C0 06 .dbyt 49158 -0005C2r 1 C0 07 .dbyt 49159 -0005C4r 1 C0 08 .dbyt 49160 -0005C6r 1 C0 09 .dbyt 49161 -0005C8r 1 C0 0A .dbyt 49162 -0005CAr 1 C0 0B .dbyt 49163 -0005CCr 1 C0 0C .dbyt 49164 -0005CEr 1 C0 0D .dbyt 49165 -0005D0r 1 C0 0E .dbyt 49166 -0005D2r 1 C0 0F .dbyt 49167 -0005D4r 1 CF E1 .dbyt 53217 -0005D6r 1 CF E2 .dbyt 53218 -0005D8r 1 CF E3 .dbyt 53219 -0005DAr 1 CF E4 .dbyt 53220 -0005DCr 1 CF E5 .dbyt 53221 -0005DEr 1 CF E6 .dbyt 53222 -0005E0r 1 CF E7 .dbyt 53223 -0005E2r 1 CF E8 .dbyt 53224 -0005E4r 1 CF E9 .dbyt 53225 -0005E6r 1 CF EA .dbyt 53226 -0005E8r 1 CF EB .dbyt 53227 -0005EAr 1 CF EC .dbyt 53228 -0005ECr 1 CF ED .dbyt 53229 -0005EEr 1 CF EE .dbyt 53230 -0005F0r 1 CF EF .dbyt 53231 -0005F2r 1 CF F0 .dbyt 53232 -0005F4r 1 CF F1 .dbyt 53233 -0005F6r 1 CF F2 .dbyt 53234 -0005F8r 1 CF F3 .dbyt 53235 -0005FAr 1 CF F4 .dbyt 53236 -0005FCr 1 CF F5 .dbyt 53237 -0005FEr 1 CF F6 .dbyt 53238 -000600r 1 CF F7 .dbyt 53239 -000602r 1 CF F8 .dbyt 53240 -000604r 1 CF F9 .dbyt 53241 -000606r 1 CF FA .dbyt 53242 -000608r 1 CF FB .dbyt 53243 -00060Ar 1 CF FC .dbyt 53244 -00060Cr 1 CF FD .dbyt 53245 -00060Er 1 CF FE .dbyt 53246 -000610r 1 CF FF .dbyt 53247 -000612r 1 D0 00 .dbyt 53248 -000614r 1 D0 01 .dbyt 53249 -000616r 1 D0 02 .dbyt 53250 -000618r 1 D0 03 .dbyt 53251 -00061Ar 1 D0 04 .dbyt 53252 -00061Cr 1 D0 05 .dbyt 53253 -00061Er 1 D0 06 .dbyt 53254 -000620r 1 D0 07 .dbyt 53255 -000622r 1 D0 08 .dbyt 53256 -000624r 1 D0 09 .dbyt 53257 -000626r 1 D0 0A .dbyt 53258 -000628r 1 D0 0B .dbyt 53259 -00062Ar 1 D0 0C .dbyt 53260 -00062Cr 1 D0 0D .dbyt 53261 -00062Er 1 D0 0E .dbyt 53262 -000630r 1 D0 0F .dbyt 53263 -000632r 1 DF E1 .dbyt 57313 -000634r 1 DF E2 .dbyt 57314 -000636r 1 DF E3 .dbyt 57315 -000638r 1 DF E4 .dbyt 57316 -00063Ar 1 DF E5 .dbyt 57317 -00063Cr 1 DF E6 .dbyt 57318 -00063Er 1 DF E7 .dbyt 57319 -000640r 1 DF E8 .dbyt 57320 -000642r 1 DF E9 .dbyt 57321 -000644r 1 DF EA .dbyt 57322 -000646r 1 DF EB .dbyt 57323 -000648r 1 DF EC .dbyt 57324 -00064Ar 1 DF ED .dbyt 57325 -00064Cr 1 DF EE .dbyt 57326 -00064Er 1 DF EF .dbyt 57327 -000650r 1 DF F0 .dbyt 57328 -000652r 1 DF F1 .dbyt 57329 -000654r 1 DF F2 .dbyt 57330 -000656r 1 DF F3 .dbyt 57331 -000658r 1 DF F4 .dbyt 57332 -00065Ar 1 DF F5 .dbyt 57333 -00065Cr 1 DF F6 .dbyt 57334 -00065Er 1 DF F7 .dbyt 57335 -000660r 1 DF F8 .dbyt 57336 -000662r 1 DF F9 .dbyt 57337 -000664r 1 DF FA .dbyt 57338 -000666r 1 DF FB .dbyt 57339 -000668r 1 DF FC .dbyt 57340 -00066Ar 1 DF FD .dbyt 57341 -00066Cr 1 DF FE .dbyt 57342 -00066Er 1 DF FF .dbyt 57343 -000670r 1 E0 00 .dbyt 57344 -000672r 1 E0 01 .dbyt 57345 -000674r 1 E0 02 .dbyt 57346 -000676r 1 E0 03 .dbyt 57347 -000678r 1 E0 04 .dbyt 57348 -00067Ar 1 E0 05 .dbyt 57349 -00067Cr 1 E0 06 .dbyt 57350 -00067Er 1 E0 07 .dbyt 57351 -000680r 1 E0 08 .dbyt 57352 -000682r 1 E0 09 .dbyt 57353 -000684r 1 E0 0A .dbyt 57354 -000686r 1 E0 0B .dbyt 57355 -000688r 1 E0 0C .dbyt 57356 -00068Ar 1 E0 0D .dbyt 57357 -00068Cr 1 E0 0E .dbyt 57358 -00068Er 1 E0 0F .dbyt 57359 -000690r 1 EF E1 .dbyt 61409 -000692r 1 EF E2 .dbyt 61410 -000694r 1 EF E3 .dbyt 61411 -000696r 1 EF E4 .dbyt 61412 -000698r 1 EF E5 .dbyt 61413 -00069Ar 1 EF E6 .dbyt 61414 -00069Cr 1 EF E7 .dbyt 61415 -00069Er 1 EF E8 .dbyt 61416 -0006A0r 1 EF E9 .dbyt 61417 -0006A2r 1 EF EA .dbyt 61418 -0006A4r 1 EF EB .dbyt 61419 -0006A6r 1 EF EC .dbyt 61420 -0006A8r 1 EF ED .dbyt 61421 -0006AAr 1 EF EE .dbyt 61422 -0006ACr 1 EF EF .dbyt 61423 -0006AEr 1 EF F0 .dbyt 61424 -0006B0r 1 EF F1 .dbyt 61425 -0006B2r 1 EF F2 .dbyt 61426 -0006B4r 1 EF F3 .dbyt 61427 -0006B6r 1 EF F4 .dbyt 61428 -0006B8r 1 EF F5 .dbyt 61429 -0006BAr 1 EF F6 .dbyt 61430 -0006BCr 1 EF F7 .dbyt 61431 -0006BEr 1 EF F8 .dbyt 61432 -0006C0r 1 EF F9 .dbyt 61433 -0006C2r 1 EF FA .dbyt 61434 -0006C4r 1 EF FB .dbyt 61435 -0006C6r 1 EF FC .dbyt 61436 -0006C8r 1 EF FD .dbyt 61437 -0006CAr 1 EF FE .dbyt 61438 -0006CCr 1 EF FF .dbyt 61439 -0006CEr 1 F0 00 .dbyt 61440 -0006D0r 1 F0 01 .dbyt 61441 -0006D2r 1 F0 02 .dbyt 61442 -0006D4r 1 F0 03 .dbyt 61443 -0006D6r 1 F0 04 .dbyt 61444 -0006D8r 1 F0 05 .dbyt 61445 -0006DAr 1 F0 06 .dbyt 61446 -0006DCr 1 F0 07 .dbyt 61447 -0006DEr 1 F0 08 .dbyt 61448 -0006E0r 1 F0 09 .dbyt 61449 -0006E2r 1 F0 0A .dbyt 61450 -0006E4r 1 F0 0B .dbyt 61451 -0006E6r 1 F0 0C .dbyt 61452 -0006E8r 1 F0 0D .dbyt 61453 -0006EAr 1 F0 0E .dbyt 61454 -0006ECr 1 F0 0F .dbyt 61455 -0006EEr 1 FF E1 .dbyt 65505 -0006F0r 1 FF E2 .dbyt 65506 -0006F2r 1 FF E3 .dbyt 65507 -0006F4r 1 FF E4 .dbyt 65508 -0006F6r 1 FF E5 .dbyt 65509 -0006F8r 1 FF E6 .dbyt 65510 -0006FAr 1 FF E7 .dbyt 65511 -0006FCr 1 FF E8 .dbyt 65512 -0006FEr 1 FF E9 .dbyt 65513 -000700r 1 FF EA .dbyt 65514 -000702r 1 FF EB .dbyt 65515 -000704r 1 FF EC .dbyt 65516 -000706r 1 FF ED .dbyt 65517 -000708r 1 FF EE .dbyt 65518 -00070Ar 1 FF EF .dbyt 65519 -00070Cr 1 FF F0 .dbyt 65520 -00070Er 1 FF F1 .dbyt 65521 -000710r 1 FF F2 .dbyt 65522 -000712r 1 FF F3 .dbyt 65523 -000714r 1 FF F4 .dbyt 65524 -000716r 1 FF F5 .dbyt 65525 -000718r 1 FF F6 .dbyt 65526 -00071Ar 1 FF F7 .dbyt 65527 -00071Cr 1 FF F8 .dbyt 65528 -00071Er 1 FF F9 .dbyt 65529 -000720r 1 FF FA .dbyt 65530 -000722r 1 FF FB .dbyt 65531 -000724r 1 FF FC .dbyt 65532 -000726r 1 FF FD .dbyt 65533 -000728r 1 FF FE .dbyt 65534 -00072Ar 1 FF FF .dbyt 65535 +000396r 1 ; lower case pseudo-op +000396r 1 00 00 .dbyt 0 +000398r 1 00 01 .dbyt 1 +00039Ar 1 00 02 .dbyt 2 +00039Cr 1 00 03 .dbyt 3 +00039Er 1 00 04 .dbyt 4 +0003A0r 1 00 05 .dbyt 5 +0003A2r 1 00 06 .dbyt 6 +0003A4r 1 00 07 .dbyt 7 +0003A6r 1 00 08 .dbyt 8 +0003A8r 1 00 09 .dbyt 9 +0003AAr 1 00 0A .dbyt 10 +0003ACr 1 00 0B .dbyt 11 +0003AEr 1 00 0C .dbyt 12 +0003B0r 1 00 0D .dbyt 13 +0003B2r 1 00 0E .dbyt 14 +0003B4r 1 00 0F .dbyt 15 +0003B6r 1 00 10 .dbyt 16 +0003B8r 1 00 11 .dbyt 17 +0003BAr 1 00 12 .dbyt 18 +0003BCr 1 00 13 .dbyt 19 +0003BEr 1 00 70 .dbyt 112 +0003C0r 1 00 71 .dbyt 113 +0003C2r 1 00 72 .dbyt 114 +0003C4r 1 00 73 .dbyt 115 +0003C6r 1 00 74 .dbyt 116 +0003C8r 1 00 75 .dbyt 117 +0003CAr 1 00 76 .dbyt 118 +0003CCr 1 00 77 .dbyt 119 +0003CEr 1 00 78 .dbyt 120 +0003D0r 1 00 79 .dbyt 121 +0003D2r 1 00 7A .dbyt 122 +0003D4r 1 00 7B .dbyt 123 +0003D6r 1 00 7C .dbyt 124 +0003D8r 1 00 7D .dbyt 125 +0003DAr 1 00 7E .dbyt 126 +0003DCr 1 00 7F .dbyt 127 +0003DEr 1 00 80 .dbyt 128 +0003E0r 1 00 81 .dbyt 129 +0003E2r 1 00 82 .dbyt 130 +0003E4r 1 00 83 .dbyt 131 +0003E6r 1 00 84 .dbyt 132 +0003E8r 1 00 85 .dbyt 133 +0003EAr 1 00 86 .dbyt 134 +0003ECr 1 00 F0 .dbyt 240 +0003EEr 1 00 F1 .dbyt 241 +0003F0r 1 00 F2 .dbyt 242 +0003F2r 1 00 F3 .dbyt 243 +0003F4r 1 00 F4 .dbyt 244 +0003F6r 1 00 F5 .dbyt 245 +0003F8r 1 00 F6 .dbyt 246 +0003FAr 1 00 F7 .dbyt 247 +0003FCr 1 00 F8 .dbyt 248 +0003FEr 1 00 F9 .dbyt 249 +000400r 1 00 FA .dbyt 250 +000402r 1 00 FB .dbyt 251 +000404r 1 00 FC .dbyt 252 +000406r 1 00 FD .dbyt 253 +000408r 1 00 FE .dbyt 254 +00040Ar 1 00 FF .dbyt 255 +00040Cr 1 01 00 .dbyt 256 +00040Er 1 01 01 .dbyt 257 +000410r 1 01 02 .dbyt 258 +000412r 1 01 03 .dbyt 259 +000414r 1 0F D2 .dbyt 4050 +000416r 1 0F D3 .dbyt 4051 +000418r 1 0F D4 .dbyt 4052 +00041Ar 1 0F D5 .dbyt 4053 +00041Cr 1 0F D6 .dbyt 4054 +00041Er 1 0F D7 .dbyt 4055 +000420r 1 0F D8 .dbyt 4056 +000422r 1 0F D9 .dbyt 4057 +000424r 1 0F DA .dbyt 4058 +000426r 1 0F DB .dbyt 4059 +000428r 1 0F DC .dbyt 4060 +00042Ar 1 0F DD .dbyt 4061 +00042Cr 1 0F DE .dbyt 4062 +00042Er 1 0F DF .dbyt 4063 +000430r 1 0F E0 .dbyt 4064 +000432r 1 0F E1 .dbyt 4065 +000434r 1 0F E2 .dbyt 4066 +000436r 1 0F E3 .dbyt 4067 +000438r 1 0F E4 .dbyt 4068 +00043Ar 1 0F E5 .dbyt 4069 +00043Cr 1 0F E6 .dbyt 4070 +00043Er 1 0F E7 .dbyt 4071 +000440r 1 0F E8 .dbyt 4072 +000442r 1 0F E9 .dbyt 4073 +000444r 1 0F EA .dbyt 4074 +000446r 1 0F EB .dbyt 4075 +000448r 1 0F EC .dbyt 4076 +00044Ar 1 0F ED .dbyt 4077 +00044Cr 1 0F EE .dbyt 4078 +00044Er 1 0F EF .dbyt 4079 +000450r 1 0F F0 .dbyt 4080 +000452r 1 0F F1 .dbyt 4081 +000454r 1 0F F2 .dbyt 4082 +000456r 1 0F F3 .dbyt 4083 +000458r 1 0F F4 .dbyt 4084 +00045Ar 1 0F F5 .dbyt 4085 +00045Cr 1 0F F6 .dbyt 4086 +00045Er 1 0F F7 .dbyt 4087 +000460r 1 0F F8 .dbyt 4088 +000462r 1 0F F9 .dbyt 4089 +000464r 1 0F FA .dbyt 4090 +000466r 1 0F FB .dbyt 4091 +000468r 1 0F FC .dbyt 4092 +00046Ar 1 0F FD .dbyt 4093 +00046Cr 1 0F FE .dbyt 4094 +00046Er 1 0F FF .dbyt 4095 +000470r 1 10 00 .dbyt 4096 +000472r 1 10 01 .dbyt 4097 +000474r 1 10 02 .dbyt 4098 +000476r 1 10 03 .dbyt 4099 +000478r 1 10 04 .dbyt 4100 +00047Ar 1 10 05 .dbyt 4101 +00047Cr 1 10 06 .dbyt 4102 +00047Er 1 10 07 .dbyt 4103 +000480r 1 10 08 .dbyt 4104 +000482r 1 7F F0 .dbyt 32752 +000484r 1 7F F1 .dbyt 32753 +000486r 1 7F F2 .dbyt 32754 +000488r 1 7F F3 .dbyt 32755 +00048Ar 1 7F F4 .dbyt 32756 +00048Cr 1 7F F5 .dbyt 32757 +00048Er 1 7F F6 .dbyt 32758 +000490r 1 7F F7 .dbyt 32759 +000492r 1 7F F8 .dbyt 32760 +000494r 1 7F F9 .dbyt 32761 +000496r 1 7F FA .dbyt 32762 +000498r 1 7F FB .dbyt 32763 +00049Ar 1 7F FC .dbyt 32764 +00049Cr 1 7F FD .dbyt 32765 +00049Er 1 7F FE .dbyt 32766 +0004A0r 1 7F FF .dbyt 32767 +0004A2r 1 80 00 .dbyt 32768 +0004A4r 1 80 01 .dbyt 32769 +0004A6r 1 80 02 .dbyt 32770 +0004A8r 1 80 03 .dbyt 32771 +0004AAr 1 80 04 .dbyt 32772 +0004ACr 1 80 05 .dbyt 32773 +0004AEr 1 80 06 .dbyt 32774 +0004B0r 1 80 07 .dbyt 32775 +0004B2r 1 80 08 .dbyt 32776 +0004B4r 1 80 09 .dbyt 32777 +0004B6r 1 80 0A .dbyt 32778 +0004B8r 1 80 0B .dbyt 32779 +0004BAr 1 9F E1 .dbyt 40929 +0004BCr 1 9F E2 .dbyt 40930 +0004BEr 1 9F E3 .dbyt 40931 +0004C0r 1 9F E4 .dbyt 40932 +0004C2r 1 9F E5 .dbyt 40933 +0004C4r 1 9F E6 .dbyt 40934 +0004C6r 1 9F E7 .dbyt 40935 +0004C8r 1 9F E8 .dbyt 40936 +0004CAr 1 9F E9 .dbyt 40937 +0004CCr 1 9F EA .dbyt 40938 +0004CEr 1 9F EB .dbyt 40939 +0004D0r 1 9F EC .dbyt 40940 +0004D2r 1 9F ED .dbyt 40941 +0004D4r 1 9F EE .dbyt 40942 +0004D6r 1 9F EF .dbyt 40943 +0004D8r 1 9F F0 .dbyt 40944 +0004DAr 1 9F F1 .dbyt 40945 +0004DCr 1 9F F2 .dbyt 40946 +0004DEr 1 9F F3 .dbyt 40947 +0004E0r 1 9F F4 .dbyt 40948 +0004E2r 1 9F F5 .dbyt 40949 +0004E4r 1 9F F6 .dbyt 40950 +0004E6r 1 9F F7 .dbyt 40951 +0004E8r 1 9F F8 .dbyt 40952 +0004EAr 1 9F F9 .dbyt 40953 +0004ECr 1 9F FA .dbyt 40954 +0004EEr 1 9F FB .dbyt 40955 +0004F0r 1 9F FC .dbyt 40956 +0004F2r 1 9F FD .dbyt 40957 +0004F4r 1 9F FE .dbyt 40958 +0004F6r 1 9F FF .dbyt 40959 +0004F8r 1 A0 00 .dbyt 40960 +0004FAr 1 A0 01 .dbyt 40961 +0004FCr 1 A0 02 .dbyt 40962 +0004FEr 1 A0 03 .dbyt 40963 +000500r 1 A0 04 .dbyt 40964 +000502r 1 A0 05 .dbyt 40965 +000504r 1 A0 06 .dbyt 40966 +000506r 1 A0 07 .dbyt 40967 +000508r 1 A0 08 .dbyt 40968 +00050Ar 1 A0 09 .dbyt 40969 +00050Cr 1 A0 0A .dbyt 40970 +00050Er 1 A0 0B .dbyt 40971 +000510r 1 A0 0C .dbyt 40972 +000512r 1 A0 0D .dbyt 40973 +000514r 1 A0 0E .dbyt 40974 +000516r 1 A0 0F .dbyt 40975 +000518r 1 AF E1 .dbyt 45025 +00051Ar 1 AF E2 .dbyt 45026 +00051Cr 1 AF E3 .dbyt 45027 +00051Er 1 AF E4 .dbyt 45028 +000520r 1 AF E5 .dbyt 45029 +000522r 1 AF E6 .dbyt 45030 +000524r 1 AF E7 .dbyt 45031 +000526r 1 AF E8 .dbyt 45032 +000528r 1 AF E9 .dbyt 45033 +00052Ar 1 AF EA .dbyt 45034 +00052Cr 1 AF EB .dbyt 45035 +00052Er 1 AF EC .dbyt 45036 +000530r 1 AF ED .dbyt 45037 +000532r 1 AF EE .dbyt 45038 +000534r 1 AF EF .dbyt 45039 +000536r 1 AF F0 .dbyt 45040 +000538r 1 AF F1 .dbyt 45041 +00053Ar 1 AF F2 .dbyt 45042 +00053Cr 1 AF F3 .dbyt 45043 +00053Er 1 AF F4 .dbyt 45044 +000540r 1 AF F5 .dbyt 45045 +000542r 1 AF F6 .dbyt 45046 +000544r 1 AF F7 .dbyt 45047 +000546r 1 AF F8 .dbyt 45048 +000548r 1 AF F9 .dbyt 45049 +00054Ar 1 AF FA .dbyt 45050 +00054Cr 1 AF FB .dbyt 45051 +00054Er 1 AF FC .dbyt 45052 +000550r 1 AF FD .dbyt 45053 +000552r 1 AF FE .dbyt 45054 +000554r 1 AF FF .dbyt 45055 +000556r 1 B0 00 .dbyt 45056 +000558r 1 B0 01 .dbyt 45057 +00055Ar 1 B0 02 .dbyt 45058 +00055Cr 1 B0 03 .dbyt 45059 +00055Er 1 B0 04 .dbyt 45060 +000560r 1 B0 05 .dbyt 45061 +000562r 1 B0 06 .dbyt 45062 +000564r 1 B0 07 .dbyt 45063 +000566r 1 B0 08 .dbyt 45064 +000568r 1 B0 09 .dbyt 45065 +00056Ar 1 B0 0A .dbyt 45066 +00056Cr 1 B0 0B .dbyt 45067 +00056Er 1 B0 0C .dbyt 45068 +000570r 1 B0 0D .dbyt 45069 +000572r 1 B0 0E .dbyt 45070 +000574r 1 B0 0F .dbyt 45071 +000576r 1 BF E1 .dbyt 49121 +000578r 1 BF E2 .dbyt 49122 +00057Ar 1 BF E3 .dbyt 49123 +00057Cr 1 BF E4 .dbyt 49124 +00057Er 1 BF E5 .dbyt 49125 +000580r 1 BF E6 .dbyt 49126 +000582r 1 BF E7 .dbyt 49127 +000584r 1 BF E8 .dbyt 49128 +000586r 1 BF E9 .dbyt 49129 +000588r 1 BF EA .dbyt 49130 +00058Ar 1 BF EB .dbyt 49131 +00058Cr 1 BF EC .dbyt 49132 +00058Er 1 BF ED .dbyt 49133 +000590r 1 BF EE .dbyt 49134 +000592r 1 BF EF .dbyt 49135 +000594r 1 BF F0 .dbyt 49136 +000596r 1 BF F1 .dbyt 49137 +000598r 1 BF F2 .dbyt 49138 +00059Ar 1 BF F3 .dbyt 49139 +00059Cr 1 BF F4 .dbyt 49140 +00059Er 1 BF F5 .dbyt 49141 +0005A0r 1 BF F6 .dbyt 49142 +0005A2r 1 BF F7 .dbyt 49143 +0005A4r 1 BF F8 .dbyt 49144 +0005A6r 1 BF F9 .dbyt 49145 +0005A8r 1 BF FA .dbyt 49146 +0005AAr 1 BF FB .dbyt 49147 +0005ACr 1 BF FC .dbyt 49148 +0005AEr 1 BF FD .dbyt 49149 +0005B0r 1 BF FE .dbyt 49150 +0005B2r 1 BF FF .dbyt 49151 +0005B4r 1 C0 00 .dbyt 49152 +0005B6r 1 C0 01 .dbyt 49153 +0005B8r 1 C0 02 .dbyt 49154 +0005BAr 1 C0 03 .dbyt 49155 +0005BCr 1 C0 04 .dbyt 49156 +0005BEr 1 C0 05 .dbyt 49157 +0005C0r 1 C0 06 .dbyt 49158 +0005C2r 1 C0 07 .dbyt 49159 +0005C4r 1 C0 08 .dbyt 49160 +0005C6r 1 C0 09 .dbyt 49161 +0005C8r 1 C0 0A .dbyt 49162 +0005CAr 1 C0 0B .dbyt 49163 +0005CCr 1 C0 0C .dbyt 49164 +0005CEr 1 C0 0D .dbyt 49165 +0005D0r 1 C0 0E .dbyt 49166 +0005D2r 1 C0 0F .dbyt 49167 +0005D4r 1 CF E1 .dbyt 53217 +0005D6r 1 CF E2 .dbyt 53218 +0005D8r 1 CF E3 .dbyt 53219 +0005DAr 1 CF E4 .dbyt 53220 +0005DCr 1 CF E5 .dbyt 53221 +0005DEr 1 CF E6 .dbyt 53222 +0005E0r 1 CF E7 .dbyt 53223 +0005E2r 1 CF E8 .dbyt 53224 +0005E4r 1 CF E9 .dbyt 53225 +0005E6r 1 CF EA .dbyt 53226 +0005E8r 1 CF EB .dbyt 53227 +0005EAr 1 CF EC .dbyt 53228 +0005ECr 1 CF ED .dbyt 53229 +0005EEr 1 CF EE .dbyt 53230 +0005F0r 1 CF EF .dbyt 53231 +0005F2r 1 CF F0 .dbyt 53232 +0005F4r 1 CF F1 .dbyt 53233 +0005F6r 1 CF F2 .dbyt 53234 +0005F8r 1 CF F3 .dbyt 53235 +0005FAr 1 CF F4 .dbyt 53236 +0005FCr 1 CF F5 .dbyt 53237 +0005FEr 1 CF F6 .dbyt 53238 +000600r 1 CF F7 .dbyt 53239 +000602r 1 CF F8 .dbyt 53240 +000604r 1 CF F9 .dbyt 53241 +000606r 1 CF FA .dbyt 53242 +000608r 1 CF FB .dbyt 53243 +00060Ar 1 CF FC .dbyt 53244 +00060Cr 1 CF FD .dbyt 53245 +00060Er 1 CF FE .dbyt 53246 +000610r 1 CF FF .dbyt 53247 +000612r 1 D0 00 .dbyt 53248 +000614r 1 D0 01 .dbyt 53249 +000616r 1 D0 02 .dbyt 53250 +000618r 1 D0 03 .dbyt 53251 +00061Ar 1 D0 04 .dbyt 53252 +00061Cr 1 D0 05 .dbyt 53253 +00061Er 1 D0 06 .dbyt 53254 +000620r 1 D0 07 .dbyt 53255 +000622r 1 D0 08 .dbyt 53256 +000624r 1 D0 09 .dbyt 53257 +000626r 1 D0 0A .dbyt 53258 +000628r 1 D0 0B .dbyt 53259 +00062Ar 1 D0 0C .dbyt 53260 +00062Cr 1 D0 0D .dbyt 53261 +00062Er 1 D0 0E .dbyt 53262 +000630r 1 D0 0F .dbyt 53263 +000632r 1 DF E1 .dbyt 57313 +000634r 1 DF E2 .dbyt 57314 +000636r 1 DF E3 .dbyt 57315 +000638r 1 DF E4 .dbyt 57316 +00063Ar 1 DF E5 .dbyt 57317 +00063Cr 1 DF E6 .dbyt 57318 +00063Er 1 DF E7 .dbyt 57319 +000640r 1 DF E8 .dbyt 57320 +000642r 1 DF E9 .dbyt 57321 +000644r 1 DF EA .dbyt 57322 +000646r 1 DF EB .dbyt 57323 +000648r 1 DF EC .dbyt 57324 +00064Ar 1 DF ED .dbyt 57325 +00064Cr 1 DF EE .dbyt 57326 +00064Er 1 DF EF .dbyt 57327 +000650r 1 DF F0 .dbyt 57328 +000652r 1 DF F1 .dbyt 57329 +000654r 1 DF F2 .dbyt 57330 +000656r 1 DF F3 .dbyt 57331 +000658r 1 DF F4 .dbyt 57332 +00065Ar 1 DF F5 .dbyt 57333 +00065Cr 1 DF F6 .dbyt 57334 +00065Er 1 DF F7 .dbyt 57335 +000660r 1 DF F8 .dbyt 57336 +000662r 1 DF F9 .dbyt 57337 +000664r 1 DF FA .dbyt 57338 +000666r 1 DF FB .dbyt 57339 +000668r 1 DF FC .dbyt 57340 +00066Ar 1 DF FD .dbyt 57341 +00066Cr 1 DF FE .dbyt 57342 +00066Er 1 DF FF .dbyt 57343 +000670r 1 E0 00 .dbyt 57344 +000672r 1 E0 01 .dbyt 57345 +000674r 1 E0 02 .dbyt 57346 +000676r 1 E0 03 .dbyt 57347 +000678r 1 E0 04 .dbyt 57348 +00067Ar 1 E0 05 .dbyt 57349 +00067Cr 1 E0 06 .dbyt 57350 +00067Er 1 E0 07 .dbyt 57351 +000680r 1 E0 08 .dbyt 57352 +000682r 1 E0 09 .dbyt 57353 +000684r 1 E0 0A .dbyt 57354 +000686r 1 E0 0B .dbyt 57355 +000688r 1 E0 0C .dbyt 57356 +00068Ar 1 E0 0D .dbyt 57357 +00068Cr 1 E0 0E .dbyt 57358 +00068Er 1 E0 0F .dbyt 57359 +000690r 1 EF E1 .dbyt 61409 +000692r 1 EF E2 .dbyt 61410 +000694r 1 EF E3 .dbyt 61411 +000696r 1 EF E4 .dbyt 61412 +000698r 1 EF E5 .dbyt 61413 +00069Ar 1 EF E6 .dbyt 61414 +00069Cr 1 EF E7 .dbyt 61415 +00069Er 1 EF E8 .dbyt 61416 +0006A0r 1 EF E9 .dbyt 61417 +0006A2r 1 EF EA .dbyt 61418 +0006A4r 1 EF EB .dbyt 61419 +0006A6r 1 EF EC .dbyt 61420 +0006A8r 1 EF ED .dbyt 61421 +0006AAr 1 EF EE .dbyt 61422 +0006ACr 1 EF EF .dbyt 61423 +0006AEr 1 EF F0 .dbyt 61424 +0006B0r 1 EF F1 .dbyt 61425 +0006B2r 1 EF F2 .dbyt 61426 +0006B4r 1 EF F3 .dbyt 61427 +0006B6r 1 EF F4 .dbyt 61428 +0006B8r 1 EF F5 .dbyt 61429 +0006BAr 1 EF F6 .dbyt 61430 +0006BCr 1 EF F7 .dbyt 61431 +0006BEr 1 EF F8 .dbyt 61432 +0006C0r 1 EF F9 .dbyt 61433 +0006C2r 1 EF FA .dbyt 61434 +0006C4r 1 EF FB .dbyt 61435 +0006C6r 1 EF FC .dbyt 61436 +0006C8r 1 EF FD .dbyt 61437 +0006CAr 1 EF FE .dbyt 61438 +0006CCr 1 EF FF .dbyt 61439 +0006CEr 1 F0 00 .dbyt 61440 +0006D0r 1 F0 01 .dbyt 61441 +0006D2r 1 F0 02 .dbyt 61442 +0006D4r 1 F0 03 .dbyt 61443 +0006D6r 1 F0 04 .dbyt 61444 +0006D8r 1 F0 05 .dbyt 61445 +0006DAr 1 F0 06 .dbyt 61446 +0006DCr 1 F0 07 .dbyt 61447 +0006DEr 1 F0 08 .dbyt 61448 +0006E0r 1 F0 09 .dbyt 61449 +0006E2r 1 F0 0A .dbyt 61450 +0006E4r 1 F0 0B .dbyt 61451 +0006E6r 1 F0 0C .dbyt 61452 +0006E8r 1 F0 0D .dbyt 61453 +0006EAr 1 F0 0E .dbyt 61454 +0006ECr 1 F0 0F .dbyt 61455 +0006EEr 1 FF E1 .dbyt 65505 +0006F0r 1 FF E2 .dbyt 65506 +0006F2r 1 FF E3 .dbyt 65507 +0006F4r 1 FF E4 .dbyt 65508 +0006F6r 1 FF E5 .dbyt 65509 +0006F8r 1 FF E6 .dbyt 65510 +0006FAr 1 FF E7 .dbyt 65511 +0006FCr 1 FF E8 .dbyt 65512 +0006FEr 1 FF E9 .dbyt 65513 +000700r 1 FF EA .dbyt 65514 +000702r 1 FF EB .dbyt 65515 +000704r 1 FF EC .dbyt 65516 +000706r 1 FF ED .dbyt 65517 +000708r 1 FF EE .dbyt 65518 +00070Ar 1 FF EF .dbyt 65519 +00070Cr 1 FF F0 .dbyt 65520 +00070Er 1 FF F1 .dbyt 65521 +000710r 1 FF F2 .dbyt 65522 +000712r 1 FF F3 .dbyt 65523 +000714r 1 FF F4 .dbyt 65524 +000716r 1 FF F5 .dbyt 65525 +000718r 1 FF F6 .dbyt 65526 +00071Ar 1 FF F7 .dbyt 65527 +00071Cr 1 FF F8 .dbyt 65528 +00071Er 1 FF F9 .dbyt 65529 +000720r 1 FF FA .dbyt 65530 +000722r 1 FF FB .dbyt 65531 +000724r 1 FF FC .dbyt 65532 +000726r 1 FF FD .dbyt 65533 +000728r 1 FF FE .dbyt 65534 +00072Ar 1 FF FF .dbyt 65535 00072Cr 1 -00072Cr 1 ; hex values -00072Cr 1 00 00 .dbyt $0 -00072Er 1 00 01 .dbyt $1 -000730r 1 00 02 .dbyt $2 -000732r 1 00 03 .dbyt $3 -000734r 1 00 04 .dbyt $4 -000736r 1 00 05 .dbyt $5 -000738r 1 00 06 .dbyt $6 -00073Ar 1 00 07 .dbyt $7 -00073Cr 1 00 08 .dbyt $8 -00073Er 1 00 09 .dbyt $9 -000740r 1 00 0A .dbyt $a -000742r 1 00 0B .dbyt $b -000744r 1 00 0C .dbyt $c -000746r 1 00 0D .dbyt $d -000748r 1 00 0E .dbyt $e -00074Ar 1 00 0F .dbyt $f -00074Cr 1 00 10 .dbyt $10 -00074Er 1 00 11 .dbyt $11 -000750r 1 00 12 .dbyt $12 -000752r 1 00 13 .dbyt $13 -000754r 1 00 70 .dbyt $70 -000756r 1 00 71 .dbyt $71 -000758r 1 00 72 .dbyt $72 -00075Ar 1 00 73 .dbyt $73 -00075Cr 1 00 74 .dbyt $74 -00075Er 1 00 75 .dbyt $75 -000760r 1 00 76 .dbyt $76 -000762r 1 00 77 .dbyt $77 -000764r 1 00 78 .dbyt $78 -000766r 1 00 79 .dbyt $79 -000768r 1 00 7A .dbyt $7a -00076Ar 1 00 7B .dbyt $7b -00076Cr 1 00 7C .dbyt $7c -00076Er 1 00 7D .dbyt $7d -000770r 1 00 7E .dbyt $7e -000772r 1 00 7F .dbyt $7f -000774r 1 00 80 .dbyt $80 -000776r 1 00 81 .dbyt $81 -000778r 1 00 82 .dbyt $82 -00077Ar 1 00 83 .dbyt $83 -00077Cr 1 00 84 .dbyt $84 -00077Er 1 00 85 .dbyt $85 -000780r 1 00 86 .dbyt $86 -000782r 1 00 F0 .dbyt $f0 -000784r 1 00 F1 .dbyt $f1 -000786r 1 00 F2 .dbyt $f2 -000788r 1 00 F3 .dbyt $f3 -00078Ar 1 00 F4 .dbyt $f4 -00078Cr 1 00 F5 .dbyt $f5 -00078Er 1 00 F6 .dbyt $f6 -000790r 1 00 F7 .dbyt $f7 -000792r 1 00 F8 .dbyt $f8 -000794r 1 00 F9 .dbyt $f9 -000796r 1 00 FA .dbyt $fa -000798r 1 00 FB .dbyt $fb -00079Ar 1 00 FC .dbyt $fc -00079Cr 1 00 FD .dbyt $fd -00079Er 1 00 FE .dbyt $fe -0007A0r 1 00 FF .dbyt $ff -0007A2r 1 01 00 .dbyt $100 -0007A4r 1 01 01 .dbyt $101 -0007A6r 1 01 02 .dbyt $102 -0007A8r 1 01 03 .dbyt $103 -0007AAr 1 0F D2 .dbyt $fd2 -0007ACr 1 0F D3 .dbyt $fd3 -0007AEr 1 0F D4 .dbyt $fd4 -0007B0r 1 0F D5 .dbyt $fd5 -0007B2r 1 0F D6 .dbyt $fd6 -0007B4r 1 0F D7 .dbyt $fd7 -0007B6r 1 0F D8 .dbyt $fd8 -0007B8r 1 0F D9 .dbyt $fd9 -0007BAr 1 0F DA .dbyt $fda -0007BCr 1 0F DB .dbyt $fdb -0007BEr 1 0F DC .dbyt $fdc -0007C0r 1 0F DD .dbyt $fdd -0007C2r 1 0F DE .dbyt $fde -0007C4r 1 0F DF .dbyt $fdf -0007C6r 1 0F E0 .dbyt $fe0 -0007C8r 1 0F E1 .dbyt $fe1 -0007CAr 1 0F E2 .dbyt $fe2 -0007CCr 1 0F E3 .dbyt $fe3 -0007CEr 1 0F E4 .dbyt $fe4 -0007D0r 1 0F E5 .dbyt $fe5 -0007D2r 1 0F E6 .dbyt $fe6 -0007D4r 1 0F E7 .dbyt $fe7 -0007D6r 1 0F E8 .dbyt $fe8 -0007D8r 1 0F E9 .dbyt $fe9 -0007DAr 1 0F EA .dbyt $fea -0007DCr 1 0F EB .dbyt $feb -0007DEr 1 0F EC .dbyt $fec -0007E0r 1 0F ED .dbyt $fed -0007E2r 1 0F EE .dbyt $fee -0007E4r 1 0F EF .dbyt $fef -0007E6r 1 0F F0 .dbyt $ff0 -0007E8r 1 0F F1 .dbyt $ff1 -0007EAr 1 0F F2 .dbyt $ff2 -0007ECr 1 0F F3 .dbyt $ff3 -0007EEr 1 0F F4 .dbyt $ff4 -0007F0r 1 0F F5 .dbyt $ff5 -0007F2r 1 0F F6 .dbyt $ff6 -0007F4r 1 0F F7 .dbyt $ff7 -0007F6r 1 0F F8 .dbyt $ff8 -0007F8r 1 0F F9 .dbyt $ff9 -0007FAr 1 0F FA .dbyt $ffa -0007FCr 1 0F FB .dbyt $ffb -0007FEr 1 0F FC .dbyt $ffc -000800r 1 0F FD .dbyt $ffd -000802r 1 0F FE .dbyt $ffe -000804r 1 0F FF .dbyt $fff -000806r 1 10 00 .dbyt $1000 -000808r 1 10 01 .dbyt $1001 -00080Ar 1 10 02 .dbyt $1002 -00080Cr 1 10 03 .dbyt $1003 -00080Er 1 10 04 .dbyt $1004 -000810r 1 10 05 .dbyt $1005 -000812r 1 10 06 .dbyt $1006 -000814r 1 10 07 .dbyt $1007 -000816r 1 10 08 .dbyt $1008 -000818r 1 7F F0 .dbyt $7ff0 -00081Ar 1 7F F1 .dbyt $7ff1 -00081Cr 1 7F F2 .dbyt $7ff2 -00081Er 1 7F F3 .dbyt $7ff3 -000820r 1 7F F4 .dbyt $7ff4 -000822r 1 7F F5 .dbyt $7ff5 -000824r 1 7F F6 .dbyt $7ff6 -000826r 1 7F F7 .dbyt $7ff7 -000828r 1 7F F8 .dbyt $7ff8 -00082Ar 1 7F F9 .dbyt $7ff9 -00082Cr 1 7F FA .dbyt $7ffa -00082Er 1 7F FB .dbyt $7ffb -000830r 1 7F FC .dbyt $7ffc -000832r 1 7F FD .dbyt $7ffd -000834r 1 7F FE .dbyt $7ffe -000836r 1 7F FF .dbyt $7fff -000838r 1 80 00 .dbyt $8000 -00083Ar 1 80 01 .dbyt $8001 -00083Cr 1 80 02 .dbyt $8002 -00083Er 1 80 03 .dbyt $8003 -000840r 1 80 04 .dbyt $8004 -000842r 1 80 05 .dbyt $8005 -000844r 1 80 06 .dbyt $8006 -000846r 1 80 07 .dbyt $8007 -000848r 1 80 08 .dbyt $8008 -00084Ar 1 80 09 .dbyt $8009 -00084Cr 1 80 0A .dbyt $800a -00084Er 1 80 0B .dbyt $800b -000850r 1 9F E1 .dbyt $9fe1 -000852r 1 9F E2 .dbyt $9fe2 -000854r 1 9F E3 .dbyt $9fe3 -000856r 1 9F E4 .dbyt $9fe4 -000858r 1 9F E5 .dbyt $9fe5 -00085Ar 1 9F E6 .dbyt $9fe6 -00085Cr 1 9F E7 .dbyt $9fe7 -00085Er 1 9F E8 .dbyt $9fe8 -000860r 1 9F E9 .dbyt $9fe9 -000862r 1 9F EA .dbyt $9fea -000864r 1 9F EB .dbyt $9feb -000866r 1 9F EC .dbyt $9fec -000868r 1 9F ED .dbyt $9fed -00086Ar 1 9F EE .dbyt $9fee -00086Cr 1 9F EF .dbyt $9fef -00086Er 1 9F F0 .dbyt $9ff0 -000870r 1 9F F1 .dbyt $9ff1 -000872r 1 9F F2 .dbyt $9ff2 -000874r 1 9F F3 .dbyt $9ff3 -000876r 1 9F F4 .dbyt $9ff4 -000878r 1 9F F5 .dbyt $9ff5 -00087Ar 1 9F F6 .dbyt $9ff6 -00087Cr 1 9F F7 .dbyt $9ff7 -00087Er 1 9F F8 .dbyt $9ff8 -000880r 1 9F F9 .dbyt $9ff9 -000882r 1 9F FA .dbyt $9ffa -000884r 1 9F FB .dbyt $9ffb -000886r 1 9F FC .dbyt $9ffc -000888r 1 9F FD .dbyt $9ffd -00088Ar 1 9F FE .dbyt $9ffe -00088Cr 1 9F FF .dbyt $9fff -00088Er 1 A0 00 .dbyt $a000 -000890r 1 A0 01 .dbyt $a001 -000892r 1 A0 02 .dbyt $a002 -000894r 1 A0 03 .dbyt $a003 -000896r 1 A0 04 .dbyt $a004 -000898r 1 A0 05 .dbyt $a005 -00089Ar 1 A0 06 .dbyt $a006 -00089Cr 1 A0 07 .dbyt $a007 -00089Er 1 A0 08 .dbyt $a008 -0008A0r 1 A0 09 .dbyt $a009 -0008A2r 1 A0 0A .dbyt $a00a -0008A4r 1 A0 0B .dbyt $a00b -0008A6r 1 A0 0C .dbyt $a00c -0008A8r 1 A0 0D .dbyt $a00d -0008AAr 1 A0 0E .dbyt $a00e -0008ACr 1 A0 0F .dbyt $a00f -0008AEr 1 AF E1 .dbyt $afe1 -0008B0r 1 AF E2 .dbyt $afe2 -0008B2r 1 AF E3 .dbyt $afe3 -0008B4r 1 AF E4 .dbyt $afe4 -0008B6r 1 AF E5 .dbyt $afe5 -0008B8r 1 AF E6 .dbyt $afe6 -0008BAr 1 AF E7 .dbyt $afe7 -0008BCr 1 AF E8 .dbyt $afe8 -0008BEr 1 AF E9 .dbyt $afe9 -0008C0r 1 AF EA .dbyt $afea -0008C2r 1 AF EB .dbyt $afeb -0008C4r 1 AF EC .dbyt $afec -0008C6r 1 AF ED .dbyt $afed -0008C8r 1 AF EE .dbyt $afee -0008CAr 1 AF EF .dbyt $afef -0008CCr 1 AF F0 .dbyt $aff0 -0008CEr 1 AF F1 .dbyt $aff1 -0008D0r 1 AF F2 .dbyt $aff2 -0008D2r 1 AF F3 .dbyt $aff3 -0008D4r 1 AF F4 .dbyt $aff4 -0008D6r 1 AF F5 .dbyt $aff5 -0008D8r 1 AF F6 .dbyt $aff6 -0008DAr 1 AF F7 .dbyt $aff7 -0008DCr 1 AF F8 .dbyt $aff8 -0008DEr 1 AF F9 .dbyt $aff9 -0008E0r 1 AF FA .dbyt $affa -0008E2r 1 AF FB .dbyt $affb -0008E4r 1 AF FC .dbyt $affc -0008E6r 1 AF FD .dbyt $affd -0008E8r 1 AF FE .dbyt $affe -0008EAr 1 AF FF .dbyt $afff -0008ECr 1 B0 00 .dbyt $b000 -0008EEr 1 B0 01 .dbyt $b001 -0008F0r 1 B0 02 .dbyt $b002 -0008F2r 1 B0 03 .dbyt $b003 -0008F4r 1 B0 04 .dbyt $b004 -0008F6r 1 B0 05 .dbyt $b005 -0008F8r 1 B0 06 .dbyt $b006 -0008FAr 1 B0 07 .dbyt $b007 -0008FCr 1 B0 08 .dbyt $b008 -0008FEr 1 B0 09 .dbyt $b009 -000900r 1 B0 0A .dbyt $b00a -000902r 1 B0 0B .dbyt $b00b -000904r 1 B0 0C .dbyt $b00c -000906r 1 B0 0D .dbyt $b00d -000908r 1 B0 0E .dbyt $b00e -00090Ar 1 B0 0F .dbyt $b00f -00090Cr 1 BF E1 .dbyt $bfe1 -00090Er 1 BF E2 .dbyt $bfe2 -000910r 1 BF E3 .dbyt $bfe3 -000912r 1 BF E4 .dbyt $bfe4 -000914r 1 BF E5 .dbyt $bfe5 -000916r 1 BF E6 .dbyt $bfe6 -000918r 1 BF E7 .dbyt $bfe7 -00091Ar 1 BF E8 .dbyt $bfe8 -00091Cr 1 BF E9 .dbyt $bfe9 -00091Er 1 BF EA .dbyt $bfea -000920r 1 BF EB .dbyt $bfeb -000922r 1 BF EC .dbyt $bfec -000924r 1 BF ED .dbyt $bfed -000926r 1 BF EE .dbyt $bfee -000928r 1 BF EF .dbyt $bfef -00092Ar 1 BF F0 .dbyt $bff0 -00092Cr 1 BF F1 .dbyt $bff1 -00092Er 1 BF F2 .dbyt $bff2 -000930r 1 BF F3 .dbyt $bff3 -000932r 1 BF F4 .dbyt $bff4 -000934r 1 BF F5 .dbyt $bff5 -000936r 1 BF F6 .dbyt $bff6 -000938r 1 BF F7 .dbyt $bff7 -00093Ar 1 BF F8 .dbyt $bff8 -00093Cr 1 BF F9 .dbyt $bff9 -00093Er 1 BF FA .dbyt $bffa -000940r 1 BF FB .dbyt $bffb -000942r 1 BF FC .dbyt $bffc -000944r 1 BF FD .dbyt $bffd -000946r 1 BF FE .dbyt $bffe -000948r 1 BF FF .dbyt $bfff -00094Ar 1 C0 00 .dbyt $c000 -00094Cr 1 C0 01 .dbyt $c001 -00094Er 1 C0 02 .dbyt $c002 -000950r 1 C0 03 .dbyt $c003 -000952r 1 C0 04 .dbyt $c004 -000954r 1 C0 05 .dbyt $c005 -000956r 1 C0 06 .dbyt $c006 -000958r 1 C0 07 .dbyt $c007 -00095Ar 1 C0 08 .dbyt $c008 -00095Cr 1 C0 09 .dbyt $c009 -00095Er 1 C0 0A .dbyt $c00a -000960r 1 C0 0B .dbyt $c00b -000962r 1 C0 0C .dbyt $c00c -000964r 1 C0 0D .dbyt $c00d -000966r 1 C0 0E .dbyt $c00e -000968r 1 C0 0F .dbyt $c00f -00096Ar 1 CF E1 .dbyt $cfe1 -00096Cr 1 CF E2 .dbyt $cfe2 -00096Er 1 CF E3 .dbyt $cfe3 -000970r 1 CF E4 .dbyt $cfe4 -000972r 1 CF E5 .dbyt $cfe5 -000974r 1 CF E6 .dbyt $cfe6 -000976r 1 CF E7 .dbyt $cfe7 -000978r 1 CF E8 .dbyt $cfe8 -00097Ar 1 CF E9 .dbyt $cfe9 -00097Cr 1 CF EA .dbyt $cfea -00097Er 1 CF EB .dbyt $cfeb -000980r 1 CF EC .dbyt $cfec -000982r 1 CF ED .dbyt $cfed -000984r 1 CF EE .dbyt $cfee -000986r 1 CF EF .dbyt $cfef -000988r 1 CF F0 .dbyt $cff0 -00098Ar 1 CF F1 .dbyt $cff1 -00098Cr 1 CF F2 .dbyt $cff2 -00098Er 1 CF F3 .dbyt $cff3 -000990r 1 CF F4 .dbyt $cff4 -000992r 1 CF F5 .dbyt $cff5 -000994r 1 CF F6 .dbyt $cff6 -000996r 1 CF F7 .dbyt $cff7 -000998r 1 CF F8 .dbyt $cff8 -00099Ar 1 CF F9 .dbyt $cff9 -00099Cr 1 CF FA .dbyt $cffa -00099Er 1 CF FB .dbyt $cffb -0009A0r 1 CF FC .dbyt $cffc -0009A2r 1 CF FD .dbyt $cffd -0009A4r 1 CF FE .dbyt $cffe -0009A6r 1 CF FF .dbyt $cfff -0009A8r 1 D0 00 .dbyt $d000 -0009AAr 1 D0 01 .dbyt $d001 -0009ACr 1 D0 02 .dbyt $d002 -0009AEr 1 D0 03 .dbyt $d003 -0009B0r 1 D0 04 .dbyt $d004 -0009B2r 1 D0 05 .dbyt $d005 -0009B4r 1 D0 06 .dbyt $d006 -0009B6r 1 D0 07 .dbyt $d007 -0009B8r 1 D0 08 .dbyt $d008 -0009BAr 1 D0 09 .dbyt $d009 -0009BCr 1 D0 0A .dbyt $d00a -0009BEr 1 D0 0B .dbyt $d00b -0009C0r 1 D0 0C .dbyt $d00c -0009C2r 1 D0 0D .dbyt $d00d -0009C4r 1 D0 0E .dbyt $d00e -0009C6r 1 D0 0F .dbyt $d00f -0009C8r 1 DF E1 .dbyt $dfe1 -0009CAr 1 DF E2 .dbyt $dfe2 -0009CCr 1 DF E3 .dbyt $dfe3 -0009CEr 1 DF E4 .dbyt $dfe4 -0009D0r 1 DF E5 .dbyt $dfe5 -0009D2r 1 DF E6 .dbyt $dfe6 -0009D4r 1 DF E7 .dbyt $dfe7 -0009D6r 1 DF E8 .dbyt $dfe8 -0009D8r 1 DF E9 .dbyt $dfe9 -0009DAr 1 DF EA .dbyt $dfea -0009DCr 1 DF EB .dbyt $dfeb -0009DEr 1 DF EC .dbyt $dfec -0009E0r 1 DF ED .dbyt $dfed -0009E2r 1 DF EE .dbyt $dfee -0009E4r 1 DF EF .dbyt $dfef -0009E6r 1 DF F0 .dbyt $dff0 -0009E8r 1 DF F1 .dbyt $dff1 -0009EAr 1 DF F2 .dbyt $dff2 -0009ECr 1 DF F3 .dbyt $dff3 -0009EEr 1 DF F4 .dbyt $dff4 -0009F0r 1 DF F5 .dbyt $dff5 -0009F2r 1 DF F6 .dbyt $dff6 -0009F4r 1 DF F7 .dbyt $dff7 -0009F6r 1 DF F8 .dbyt $dff8 -0009F8r 1 DF F9 .dbyt $dff9 -0009FAr 1 DF FA .dbyt $dffa -0009FCr 1 DF FB .dbyt $dffb -0009FEr 1 DF FC .dbyt $dffc -000A00r 1 DF FD .dbyt $dffd -000A02r 1 DF FE .dbyt $dffe -000A04r 1 DF FF .dbyt $dfff -000A06r 1 E0 00 .dbyt $e000 -000A08r 1 E0 01 .dbyt $e001 -000A0Ar 1 E0 02 .dbyt $e002 -000A0Cr 1 E0 03 .dbyt $e003 -000A0Er 1 E0 04 .dbyt $e004 -000A10r 1 E0 05 .dbyt $e005 -000A12r 1 E0 06 .dbyt $e006 -000A14r 1 E0 07 .dbyt $e007 -000A16r 1 E0 08 .dbyt $e008 -000A18r 1 E0 09 .dbyt $e009 -000A1Ar 1 E0 0A .dbyt $e00a -000A1Cr 1 E0 0B .dbyt $e00b -000A1Er 1 E0 0C .dbyt $e00c -000A20r 1 E0 0D .dbyt $e00d -000A22r 1 E0 0E .dbyt $e00e -000A24r 1 E0 0F .dbyt $e00f -000A26r 1 EF E1 .dbyt $efe1 -000A28r 1 EF E2 .dbyt $efe2 -000A2Ar 1 EF E3 .dbyt $efe3 -000A2Cr 1 EF E4 .dbyt $efe4 -000A2Er 1 EF E5 .dbyt $efe5 -000A30r 1 EF E6 .dbyt $efe6 -000A32r 1 EF E7 .dbyt $efe7 -000A34r 1 EF E8 .dbyt $efe8 -000A36r 1 EF E9 .dbyt $efe9 -000A38r 1 EF EA .dbyt $efea -000A3Ar 1 EF EB .dbyt $efeb -000A3Cr 1 EF EC .dbyt $efec -000A3Er 1 EF ED .dbyt $efed -000A40r 1 EF EE .dbyt $efee -000A42r 1 EF EF .dbyt $efef -000A44r 1 EF F0 .dbyt $eff0 -000A46r 1 EF F1 .dbyt $eff1 -000A48r 1 EF F2 .dbyt $eff2 -000A4Ar 1 EF F3 .dbyt $eff3 -000A4Cr 1 EF F4 .dbyt $eff4 -000A4Er 1 EF F5 .dbyt $eff5 -000A50r 1 EF F6 .dbyt $eff6 -000A52r 1 EF F7 .dbyt $eff7 -000A54r 1 EF F8 .dbyt $eff8 -000A56r 1 EF F9 .dbyt $eff9 -000A58r 1 EF FA .dbyt $effa -000A5Ar 1 EF FB .dbyt $effb -000A5Cr 1 EF FC .dbyt $effc -000A5Er 1 EF FD .dbyt $effd -000A60r 1 EF FE .dbyt $effe -000A62r 1 EF FF .dbyt $efff -000A64r 1 F0 00 .dbyt $f000 -000A66r 1 F0 01 .dbyt $f001 -000A68r 1 F0 02 .dbyt $f002 -000A6Ar 1 F0 03 .dbyt $f003 -000A6Cr 1 F0 04 .dbyt $f004 -000A6Er 1 F0 05 .dbyt $f005 -000A70r 1 F0 06 .dbyt $f006 -000A72r 1 F0 07 .dbyt $f007 -000A74r 1 F0 08 .dbyt $f008 -000A76r 1 F0 09 .dbyt $f009 -000A78r 1 F0 0A .dbyt $f00a -000A7Ar 1 F0 0B .dbyt $f00b -000A7Cr 1 F0 0C .dbyt $f00c -000A7Er 1 F0 0D .dbyt $f00d -000A80r 1 F0 0E .dbyt $f00e -000A82r 1 F0 0F .dbyt $f00f -000A84r 1 FF E1 .dbyt $ffe1 -000A86r 1 FF E2 .dbyt $ffe2 -000A88r 1 FF E3 .dbyt $ffe3 -000A8Ar 1 FF E4 .dbyt $ffe4 -000A8Cr 1 FF E5 .dbyt $ffe5 -000A8Er 1 FF E6 .dbyt $ffe6 -000A90r 1 FF E7 .dbyt $ffe7 -000A92r 1 FF E8 .dbyt $ffe8 -000A94r 1 FF E9 .dbyt $ffe9 -000A96r 1 FF EA .dbyt $ffea -000A98r 1 FF EB .dbyt $ffeb -000A9Ar 1 FF EC .dbyt $ffec -000A9Cr 1 FF ED .dbyt $ffed -000A9Er 1 FF EE .dbyt $ffee -000AA0r 1 FF EF .dbyt $ffef -000AA2r 1 FF F0 .dbyt $fff0 -000AA4r 1 FF F1 .dbyt $fff1 -000AA6r 1 FF F2 .dbyt $fff2 -000AA8r 1 FF F3 .dbyt $fff3 -000AAAr 1 FF F4 .dbyt $fff4 -000AACr 1 FF F5 .dbyt $fff5 -000AAEr 1 FF F6 .dbyt $fff6 -000AB0r 1 FF F7 .dbyt $fff7 -000AB2r 1 FF F8 .dbyt $fff8 -000AB4r 1 FF F9 .dbyt $fff9 -000AB6r 1 FF FA .dbyt $fffa -000AB8r 1 FF FB .dbyt $fffb -000ABAr 1 FF FC .dbyt $fffc -000ABCr 1 FF FD .dbyt $fffd -000ABEr 1 FF FE .dbyt $fffe -000AC0r 1 FF FF .dbyt $ffff +00072Cr 1 ; hex values +00072Cr 1 00 00 .dbyt $0 +00072Er 1 00 01 .dbyt $1 +000730r 1 00 02 .dbyt $2 +000732r 1 00 03 .dbyt $3 +000734r 1 00 04 .dbyt $4 +000736r 1 00 05 .dbyt $5 +000738r 1 00 06 .dbyt $6 +00073Ar 1 00 07 .dbyt $7 +00073Cr 1 00 08 .dbyt $8 +00073Er 1 00 09 .dbyt $9 +000740r 1 00 0A .dbyt $a +000742r 1 00 0B .dbyt $b +000744r 1 00 0C .dbyt $c +000746r 1 00 0D .dbyt $d +000748r 1 00 0E .dbyt $e +00074Ar 1 00 0F .dbyt $f +00074Cr 1 00 10 .dbyt $10 +00074Er 1 00 11 .dbyt $11 +000750r 1 00 12 .dbyt $12 +000752r 1 00 13 .dbyt $13 +000754r 1 00 70 .dbyt $70 +000756r 1 00 71 .dbyt $71 +000758r 1 00 72 .dbyt $72 +00075Ar 1 00 73 .dbyt $73 +00075Cr 1 00 74 .dbyt $74 +00075Er 1 00 75 .dbyt $75 +000760r 1 00 76 .dbyt $76 +000762r 1 00 77 .dbyt $77 +000764r 1 00 78 .dbyt $78 +000766r 1 00 79 .dbyt $79 +000768r 1 00 7A .dbyt $7a +00076Ar 1 00 7B .dbyt $7b +00076Cr 1 00 7C .dbyt $7c +00076Er 1 00 7D .dbyt $7d +000770r 1 00 7E .dbyt $7e +000772r 1 00 7F .dbyt $7f +000774r 1 00 80 .dbyt $80 +000776r 1 00 81 .dbyt $81 +000778r 1 00 82 .dbyt $82 +00077Ar 1 00 83 .dbyt $83 +00077Cr 1 00 84 .dbyt $84 +00077Er 1 00 85 .dbyt $85 +000780r 1 00 86 .dbyt $86 +000782r 1 00 F0 .dbyt $f0 +000784r 1 00 F1 .dbyt $f1 +000786r 1 00 F2 .dbyt $f2 +000788r 1 00 F3 .dbyt $f3 +00078Ar 1 00 F4 .dbyt $f4 +00078Cr 1 00 F5 .dbyt $f5 +00078Er 1 00 F6 .dbyt $f6 +000790r 1 00 F7 .dbyt $f7 +000792r 1 00 F8 .dbyt $f8 +000794r 1 00 F9 .dbyt $f9 +000796r 1 00 FA .dbyt $fa +000798r 1 00 FB .dbyt $fb +00079Ar 1 00 FC .dbyt $fc +00079Cr 1 00 FD .dbyt $fd +00079Er 1 00 FE .dbyt $fe +0007A0r 1 00 FF .dbyt $ff +0007A2r 1 01 00 .dbyt $100 +0007A4r 1 01 01 .dbyt $101 +0007A6r 1 01 02 .dbyt $102 +0007A8r 1 01 03 .dbyt $103 +0007AAr 1 0F D2 .dbyt $fd2 +0007ACr 1 0F D3 .dbyt $fd3 +0007AEr 1 0F D4 .dbyt $fd4 +0007B0r 1 0F D5 .dbyt $fd5 +0007B2r 1 0F D6 .dbyt $fd6 +0007B4r 1 0F D7 .dbyt $fd7 +0007B6r 1 0F D8 .dbyt $fd8 +0007B8r 1 0F D9 .dbyt $fd9 +0007BAr 1 0F DA .dbyt $fda +0007BCr 1 0F DB .dbyt $fdb +0007BEr 1 0F DC .dbyt $fdc +0007C0r 1 0F DD .dbyt $fdd +0007C2r 1 0F DE .dbyt $fde +0007C4r 1 0F DF .dbyt $fdf +0007C6r 1 0F E0 .dbyt $fe0 +0007C8r 1 0F E1 .dbyt $fe1 +0007CAr 1 0F E2 .dbyt $fe2 +0007CCr 1 0F E3 .dbyt $fe3 +0007CEr 1 0F E4 .dbyt $fe4 +0007D0r 1 0F E5 .dbyt $fe5 +0007D2r 1 0F E6 .dbyt $fe6 +0007D4r 1 0F E7 .dbyt $fe7 +0007D6r 1 0F E8 .dbyt $fe8 +0007D8r 1 0F E9 .dbyt $fe9 +0007DAr 1 0F EA .dbyt $fea +0007DCr 1 0F EB .dbyt $feb +0007DEr 1 0F EC .dbyt $fec +0007E0r 1 0F ED .dbyt $fed +0007E2r 1 0F EE .dbyt $fee +0007E4r 1 0F EF .dbyt $fef +0007E6r 1 0F F0 .dbyt $ff0 +0007E8r 1 0F F1 .dbyt $ff1 +0007EAr 1 0F F2 .dbyt $ff2 +0007ECr 1 0F F3 .dbyt $ff3 +0007EEr 1 0F F4 .dbyt $ff4 +0007F0r 1 0F F5 .dbyt $ff5 +0007F2r 1 0F F6 .dbyt $ff6 +0007F4r 1 0F F7 .dbyt $ff7 +0007F6r 1 0F F8 .dbyt $ff8 +0007F8r 1 0F F9 .dbyt $ff9 +0007FAr 1 0F FA .dbyt $ffa +0007FCr 1 0F FB .dbyt $ffb +0007FEr 1 0F FC .dbyt $ffc +000800r 1 0F FD .dbyt $ffd +000802r 1 0F FE .dbyt $ffe +000804r 1 0F FF .dbyt $fff +000806r 1 10 00 .dbyt $1000 +000808r 1 10 01 .dbyt $1001 +00080Ar 1 10 02 .dbyt $1002 +00080Cr 1 10 03 .dbyt $1003 +00080Er 1 10 04 .dbyt $1004 +000810r 1 10 05 .dbyt $1005 +000812r 1 10 06 .dbyt $1006 +000814r 1 10 07 .dbyt $1007 +000816r 1 10 08 .dbyt $1008 +000818r 1 7F F0 .dbyt $7ff0 +00081Ar 1 7F F1 .dbyt $7ff1 +00081Cr 1 7F F2 .dbyt $7ff2 +00081Er 1 7F F3 .dbyt $7ff3 +000820r 1 7F F4 .dbyt $7ff4 +000822r 1 7F F5 .dbyt $7ff5 +000824r 1 7F F6 .dbyt $7ff6 +000826r 1 7F F7 .dbyt $7ff7 +000828r 1 7F F8 .dbyt $7ff8 +00082Ar 1 7F F9 .dbyt $7ff9 +00082Cr 1 7F FA .dbyt $7ffa +00082Er 1 7F FB .dbyt $7ffb +000830r 1 7F FC .dbyt $7ffc +000832r 1 7F FD .dbyt $7ffd +000834r 1 7F FE .dbyt $7ffe +000836r 1 7F FF .dbyt $7fff +000838r 1 80 00 .dbyt $8000 +00083Ar 1 80 01 .dbyt $8001 +00083Cr 1 80 02 .dbyt $8002 +00083Er 1 80 03 .dbyt $8003 +000840r 1 80 04 .dbyt $8004 +000842r 1 80 05 .dbyt $8005 +000844r 1 80 06 .dbyt $8006 +000846r 1 80 07 .dbyt $8007 +000848r 1 80 08 .dbyt $8008 +00084Ar 1 80 09 .dbyt $8009 +00084Cr 1 80 0A .dbyt $800a +00084Er 1 80 0B .dbyt $800b +000850r 1 9F E1 .dbyt $9fe1 +000852r 1 9F E2 .dbyt $9fe2 +000854r 1 9F E3 .dbyt $9fe3 +000856r 1 9F E4 .dbyt $9fe4 +000858r 1 9F E5 .dbyt $9fe5 +00085Ar 1 9F E6 .dbyt $9fe6 +00085Cr 1 9F E7 .dbyt $9fe7 +00085Er 1 9F E8 .dbyt $9fe8 +000860r 1 9F E9 .dbyt $9fe9 +000862r 1 9F EA .dbyt $9fea +000864r 1 9F EB .dbyt $9feb +000866r 1 9F EC .dbyt $9fec +000868r 1 9F ED .dbyt $9fed +00086Ar 1 9F EE .dbyt $9fee +00086Cr 1 9F EF .dbyt $9fef +00086Er 1 9F F0 .dbyt $9ff0 +000870r 1 9F F1 .dbyt $9ff1 +000872r 1 9F F2 .dbyt $9ff2 +000874r 1 9F F3 .dbyt $9ff3 +000876r 1 9F F4 .dbyt $9ff4 +000878r 1 9F F5 .dbyt $9ff5 +00087Ar 1 9F F6 .dbyt $9ff6 +00087Cr 1 9F F7 .dbyt $9ff7 +00087Er 1 9F F8 .dbyt $9ff8 +000880r 1 9F F9 .dbyt $9ff9 +000882r 1 9F FA .dbyt $9ffa +000884r 1 9F FB .dbyt $9ffb +000886r 1 9F FC .dbyt $9ffc +000888r 1 9F FD .dbyt $9ffd +00088Ar 1 9F FE .dbyt $9ffe +00088Cr 1 9F FF .dbyt $9fff +00088Er 1 A0 00 .dbyt $a000 +000890r 1 A0 01 .dbyt $a001 +000892r 1 A0 02 .dbyt $a002 +000894r 1 A0 03 .dbyt $a003 +000896r 1 A0 04 .dbyt $a004 +000898r 1 A0 05 .dbyt $a005 +00089Ar 1 A0 06 .dbyt $a006 +00089Cr 1 A0 07 .dbyt $a007 +00089Er 1 A0 08 .dbyt $a008 +0008A0r 1 A0 09 .dbyt $a009 +0008A2r 1 A0 0A .dbyt $a00a +0008A4r 1 A0 0B .dbyt $a00b +0008A6r 1 A0 0C .dbyt $a00c +0008A8r 1 A0 0D .dbyt $a00d +0008AAr 1 A0 0E .dbyt $a00e +0008ACr 1 A0 0F .dbyt $a00f +0008AEr 1 AF E1 .dbyt $afe1 +0008B0r 1 AF E2 .dbyt $afe2 +0008B2r 1 AF E3 .dbyt $afe3 +0008B4r 1 AF E4 .dbyt $afe4 +0008B6r 1 AF E5 .dbyt $afe5 +0008B8r 1 AF E6 .dbyt $afe6 +0008BAr 1 AF E7 .dbyt $afe7 +0008BCr 1 AF E8 .dbyt $afe8 +0008BEr 1 AF E9 .dbyt $afe9 +0008C0r 1 AF EA .dbyt $afea +0008C2r 1 AF EB .dbyt $afeb +0008C4r 1 AF EC .dbyt $afec +0008C6r 1 AF ED .dbyt $afed +0008C8r 1 AF EE .dbyt $afee +0008CAr 1 AF EF .dbyt $afef +0008CCr 1 AF F0 .dbyt $aff0 +0008CEr 1 AF F1 .dbyt $aff1 +0008D0r 1 AF F2 .dbyt $aff2 +0008D2r 1 AF F3 .dbyt $aff3 +0008D4r 1 AF F4 .dbyt $aff4 +0008D6r 1 AF F5 .dbyt $aff5 +0008D8r 1 AF F6 .dbyt $aff6 +0008DAr 1 AF F7 .dbyt $aff7 +0008DCr 1 AF F8 .dbyt $aff8 +0008DEr 1 AF F9 .dbyt $aff9 +0008E0r 1 AF FA .dbyt $affa +0008E2r 1 AF FB .dbyt $affb +0008E4r 1 AF FC .dbyt $affc +0008E6r 1 AF FD .dbyt $affd +0008E8r 1 AF FE .dbyt $affe +0008EAr 1 AF FF .dbyt $afff +0008ECr 1 B0 00 .dbyt $b000 +0008EEr 1 B0 01 .dbyt $b001 +0008F0r 1 B0 02 .dbyt $b002 +0008F2r 1 B0 03 .dbyt $b003 +0008F4r 1 B0 04 .dbyt $b004 +0008F6r 1 B0 05 .dbyt $b005 +0008F8r 1 B0 06 .dbyt $b006 +0008FAr 1 B0 07 .dbyt $b007 +0008FCr 1 B0 08 .dbyt $b008 +0008FEr 1 B0 09 .dbyt $b009 +000900r 1 B0 0A .dbyt $b00a +000902r 1 B0 0B .dbyt $b00b +000904r 1 B0 0C .dbyt $b00c +000906r 1 B0 0D .dbyt $b00d +000908r 1 B0 0E .dbyt $b00e +00090Ar 1 B0 0F .dbyt $b00f +00090Cr 1 BF E1 .dbyt $bfe1 +00090Er 1 BF E2 .dbyt $bfe2 +000910r 1 BF E3 .dbyt $bfe3 +000912r 1 BF E4 .dbyt $bfe4 +000914r 1 BF E5 .dbyt $bfe5 +000916r 1 BF E6 .dbyt $bfe6 +000918r 1 BF E7 .dbyt $bfe7 +00091Ar 1 BF E8 .dbyt $bfe8 +00091Cr 1 BF E9 .dbyt $bfe9 +00091Er 1 BF EA .dbyt $bfea +000920r 1 BF EB .dbyt $bfeb +000922r 1 BF EC .dbyt $bfec +000924r 1 BF ED .dbyt $bfed +000926r 1 BF EE .dbyt $bfee +000928r 1 BF EF .dbyt $bfef +00092Ar 1 BF F0 .dbyt $bff0 +00092Cr 1 BF F1 .dbyt $bff1 +00092Er 1 BF F2 .dbyt $bff2 +000930r 1 BF F3 .dbyt $bff3 +000932r 1 BF F4 .dbyt $bff4 +000934r 1 BF F5 .dbyt $bff5 +000936r 1 BF F6 .dbyt $bff6 +000938r 1 BF F7 .dbyt $bff7 +00093Ar 1 BF F8 .dbyt $bff8 +00093Cr 1 BF F9 .dbyt $bff9 +00093Er 1 BF FA .dbyt $bffa +000940r 1 BF FB .dbyt $bffb +000942r 1 BF FC .dbyt $bffc +000944r 1 BF FD .dbyt $bffd +000946r 1 BF FE .dbyt $bffe +000948r 1 BF FF .dbyt $bfff +00094Ar 1 C0 00 .dbyt $c000 +00094Cr 1 C0 01 .dbyt $c001 +00094Er 1 C0 02 .dbyt $c002 +000950r 1 C0 03 .dbyt $c003 +000952r 1 C0 04 .dbyt $c004 +000954r 1 C0 05 .dbyt $c005 +000956r 1 C0 06 .dbyt $c006 +000958r 1 C0 07 .dbyt $c007 +00095Ar 1 C0 08 .dbyt $c008 +00095Cr 1 C0 09 .dbyt $c009 +00095Er 1 C0 0A .dbyt $c00a +000960r 1 C0 0B .dbyt $c00b +000962r 1 C0 0C .dbyt $c00c +000964r 1 C0 0D .dbyt $c00d +000966r 1 C0 0E .dbyt $c00e +000968r 1 C0 0F .dbyt $c00f +00096Ar 1 CF E1 .dbyt $cfe1 +00096Cr 1 CF E2 .dbyt $cfe2 +00096Er 1 CF E3 .dbyt $cfe3 +000970r 1 CF E4 .dbyt $cfe4 +000972r 1 CF E5 .dbyt $cfe5 +000974r 1 CF E6 .dbyt $cfe6 +000976r 1 CF E7 .dbyt $cfe7 +000978r 1 CF E8 .dbyt $cfe8 +00097Ar 1 CF E9 .dbyt $cfe9 +00097Cr 1 CF EA .dbyt $cfea +00097Er 1 CF EB .dbyt $cfeb +000980r 1 CF EC .dbyt $cfec +000982r 1 CF ED .dbyt $cfed +000984r 1 CF EE .dbyt $cfee +000986r 1 CF EF .dbyt $cfef +000988r 1 CF F0 .dbyt $cff0 +00098Ar 1 CF F1 .dbyt $cff1 +00098Cr 1 CF F2 .dbyt $cff2 +00098Er 1 CF F3 .dbyt $cff3 +000990r 1 CF F4 .dbyt $cff4 +000992r 1 CF F5 .dbyt $cff5 +000994r 1 CF F6 .dbyt $cff6 +000996r 1 CF F7 .dbyt $cff7 +000998r 1 CF F8 .dbyt $cff8 +00099Ar 1 CF F9 .dbyt $cff9 +00099Cr 1 CF FA .dbyt $cffa +00099Er 1 CF FB .dbyt $cffb +0009A0r 1 CF FC .dbyt $cffc +0009A2r 1 CF FD .dbyt $cffd +0009A4r 1 CF FE .dbyt $cffe +0009A6r 1 CF FF .dbyt $cfff +0009A8r 1 D0 00 .dbyt $d000 +0009AAr 1 D0 01 .dbyt $d001 +0009ACr 1 D0 02 .dbyt $d002 +0009AEr 1 D0 03 .dbyt $d003 +0009B0r 1 D0 04 .dbyt $d004 +0009B2r 1 D0 05 .dbyt $d005 +0009B4r 1 D0 06 .dbyt $d006 +0009B6r 1 D0 07 .dbyt $d007 +0009B8r 1 D0 08 .dbyt $d008 +0009BAr 1 D0 09 .dbyt $d009 +0009BCr 1 D0 0A .dbyt $d00a +0009BEr 1 D0 0B .dbyt $d00b +0009C0r 1 D0 0C .dbyt $d00c +0009C2r 1 D0 0D .dbyt $d00d +0009C4r 1 D0 0E .dbyt $d00e +0009C6r 1 D0 0F .dbyt $d00f +0009C8r 1 DF E1 .dbyt $dfe1 +0009CAr 1 DF E2 .dbyt $dfe2 +0009CCr 1 DF E3 .dbyt $dfe3 +0009CEr 1 DF E4 .dbyt $dfe4 +0009D0r 1 DF E5 .dbyt $dfe5 +0009D2r 1 DF E6 .dbyt $dfe6 +0009D4r 1 DF E7 .dbyt $dfe7 +0009D6r 1 DF E8 .dbyt $dfe8 +0009D8r 1 DF E9 .dbyt $dfe9 +0009DAr 1 DF EA .dbyt $dfea +0009DCr 1 DF EB .dbyt $dfeb +0009DEr 1 DF EC .dbyt $dfec +0009E0r 1 DF ED .dbyt $dfed +0009E2r 1 DF EE .dbyt $dfee +0009E4r 1 DF EF .dbyt $dfef +0009E6r 1 DF F0 .dbyt $dff0 +0009E8r 1 DF F1 .dbyt $dff1 +0009EAr 1 DF F2 .dbyt $dff2 +0009ECr 1 DF F3 .dbyt $dff3 +0009EEr 1 DF F4 .dbyt $dff4 +0009F0r 1 DF F5 .dbyt $dff5 +0009F2r 1 DF F6 .dbyt $dff6 +0009F4r 1 DF F7 .dbyt $dff7 +0009F6r 1 DF F8 .dbyt $dff8 +0009F8r 1 DF F9 .dbyt $dff9 +0009FAr 1 DF FA .dbyt $dffa +0009FCr 1 DF FB .dbyt $dffb +0009FEr 1 DF FC .dbyt $dffc +000A00r 1 DF FD .dbyt $dffd +000A02r 1 DF FE .dbyt $dffe +000A04r 1 DF FF .dbyt $dfff +000A06r 1 E0 00 .dbyt $e000 +000A08r 1 E0 01 .dbyt $e001 +000A0Ar 1 E0 02 .dbyt $e002 +000A0Cr 1 E0 03 .dbyt $e003 +000A0Er 1 E0 04 .dbyt $e004 +000A10r 1 E0 05 .dbyt $e005 +000A12r 1 E0 06 .dbyt $e006 +000A14r 1 E0 07 .dbyt $e007 +000A16r 1 E0 08 .dbyt $e008 +000A18r 1 E0 09 .dbyt $e009 +000A1Ar 1 E0 0A .dbyt $e00a +000A1Cr 1 E0 0B .dbyt $e00b +000A1Er 1 E0 0C .dbyt $e00c +000A20r 1 E0 0D .dbyt $e00d +000A22r 1 E0 0E .dbyt $e00e +000A24r 1 E0 0F .dbyt $e00f +000A26r 1 EF E1 .dbyt $efe1 +000A28r 1 EF E2 .dbyt $efe2 +000A2Ar 1 EF E3 .dbyt $efe3 +000A2Cr 1 EF E4 .dbyt $efe4 +000A2Er 1 EF E5 .dbyt $efe5 +000A30r 1 EF E6 .dbyt $efe6 +000A32r 1 EF E7 .dbyt $efe7 +000A34r 1 EF E8 .dbyt $efe8 +000A36r 1 EF E9 .dbyt $efe9 +000A38r 1 EF EA .dbyt $efea +000A3Ar 1 EF EB .dbyt $efeb +000A3Cr 1 EF EC .dbyt $efec +000A3Er 1 EF ED .dbyt $efed +000A40r 1 EF EE .dbyt $efee +000A42r 1 EF EF .dbyt $efef +000A44r 1 EF F0 .dbyt $eff0 +000A46r 1 EF F1 .dbyt $eff1 +000A48r 1 EF F2 .dbyt $eff2 +000A4Ar 1 EF F3 .dbyt $eff3 +000A4Cr 1 EF F4 .dbyt $eff4 +000A4Er 1 EF F5 .dbyt $eff5 +000A50r 1 EF F6 .dbyt $eff6 +000A52r 1 EF F7 .dbyt $eff7 +000A54r 1 EF F8 .dbyt $eff8 +000A56r 1 EF F9 .dbyt $eff9 +000A58r 1 EF FA .dbyt $effa +000A5Ar 1 EF FB .dbyt $effb +000A5Cr 1 EF FC .dbyt $effc +000A5Er 1 EF FD .dbyt $effd +000A60r 1 EF FE .dbyt $effe +000A62r 1 EF FF .dbyt $efff +000A64r 1 F0 00 .dbyt $f000 +000A66r 1 F0 01 .dbyt $f001 +000A68r 1 F0 02 .dbyt $f002 +000A6Ar 1 F0 03 .dbyt $f003 +000A6Cr 1 F0 04 .dbyt $f004 +000A6Er 1 F0 05 .dbyt $f005 +000A70r 1 F0 06 .dbyt $f006 +000A72r 1 F0 07 .dbyt $f007 +000A74r 1 F0 08 .dbyt $f008 +000A76r 1 F0 09 .dbyt $f009 +000A78r 1 F0 0A .dbyt $f00a +000A7Ar 1 F0 0B .dbyt $f00b +000A7Cr 1 F0 0C .dbyt $f00c +000A7Er 1 F0 0D .dbyt $f00d +000A80r 1 F0 0E .dbyt $f00e +000A82r 1 F0 0F .dbyt $f00f +000A84r 1 FF E1 .dbyt $ffe1 +000A86r 1 FF E2 .dbyt $ffe2 +000A88r 1 FF E3 .dbyt $ffe3 +000A8Ar 1 FF E4 .dbyt $ffe4 +000A8Cr 1 FF E5 .dbyt $ffe5 +000A8Er 1 FF E6 .dbyt $ffe6 +000A90r 1 FF E7 .dbyt $ffe7 +000A92r 1 FF E8 .dbyt $ffe8 +000A94r 1 FF E9 .dbyt $ffe9 +000A96r 1 FF EA .dbyt $ffea +000A98r 1 FF EB .dbyt $ffeb +000A9Ar 1 FF EC .dbyt $ffec +000A9Cr 1 FF ED .dbyt $ffed +000A9Er 1 FF EE .dbyt $ffee +000AA0r 1 FF EF .dbyt $ffef +000AA2r 1 FF F0 .dbyt $fff0 +000AA4r 1 FF F1 .dbyt $fff1 +000AA6r 1 FF F2 .dbyt $fff2 +000AA8r 1 FF F3 .dbyt $fff3 +000AAAr 1 FF F4 .dbyt $fff4 +000AACr 1 FF F5 .dbyt $fff5 +000AAEr 1 FF F6 .dbyt $fff6 +000AB0r 1 FF F7 .dbyt $fff7 +000AB2r 1 FF F8 .dbyt $fff8 +000AB4r 1 FF F9 .dbyt $fff9 +000AB6r 1 FF FA .dbyt $fffa +000AB8r 1 FF FB .dbyt $fffb +000ABAr 1 FF FC .dbyt $fffc +000ABCr 1 FF FD .dbyt $fffd +000ABEr 1 FF FE .dbyt $fffe +000AC0r 1 FF FF .dbyt $ffff 000AC2r 1 -000AC2r 1 ; hex values, uppercase -000AC2r 1 00 00 .dbyt $0 -000AC4r 1 00 01 .dbyt $1 -000AC6r 1 00 02 .dbyt $2 -000AC8r 1 00 03 .dbyt $3 -000ACAr 1 00 04 .dbyt $4 -000ACCr 1 00 05 .dbyt $5 -000ACEr 1 00 06 .dbyt $6 -000AD0r 1 00 07 .dbyt $7 -000AD2r 1 00 08 .dbyt $8 -000AD4r 1 00 09 .dbyt $9 -000AD6r 1 00 0A .dbyt $A -000AD8r 1 00 0B .dbyt $B -000ADAr 1 00 0C .dbyt $C -000ADCr 1 00 0D .dbyt $D -000ADEr 1 00 0E .dbyt $E -000AE0r 1 00 0F .dbyt $F -000AE2r 1 00 10 .dbyt $10 -000AE4r 1 00 11 .dbyt $11 -000AE6r 1 00 12 .dbyt $12 -000AE8r 1 00 13 .dbyt $13 -000AEAr 1 00 70 .dbyt $70 -000AECr 1 00 71 .dbyt $71 -000AEEr 1 00 72 .dbyt $72 -000AF0r 1 00 73 .dbyt $73 -000AF2r 1 00 74 .dbyt $74 -000AF4r 1 00 75 .dbyt $75 -000AF6r 1 00 76 .dbyt $76 -000AF8r 1 00 77 .dbyt $77 -000AFAr 1 00 78 .dbyt $78 -000AFCr 1 00 79 .dbyt $79 -000AFEr 1 00 7A .dbyt $7A -000B00r 1 00 7B .dbyt $7B -000B02r 1 00 7C .dbyt $7C -000B04r 1 00 7D .dbyt $7D -000B06r 1 00 7E .dbyt $7E -000B08r 1 00 7F .dbyt $7F -000B0Ar 1 00 80 .dbyt $80 -000B0Cr 1 00 81 .dbyt $81 -000B0Er 1 00 82 .dbyt $82 -000B10r 1 00 83 .dbyt $83 -000B12r 1 00 84 .dbyt $84 -000B14r 1 00 85 .dbyt $85 -000B16r 1 00 86 .dbyt $86 -000B18r 1 00 F0 .dbyt $F0 -000B1Ar 1 00 F1 .dbyt $F1 -000B1Cr 1 00 F2 .dbyt $F2 -000B1Er 1 00 F3 .dbyt $F3 -000B20r 1 00 F4 .dbyt $F4 -000B22r 1 00 F5 .dbyt $F5 -000B24r 1 00 F6 .dbyt $F6 -000B26r 1 00 F7 .dbyt $F7 -000B28r 1 00 F8 .dbyt $F8 -000B2Ar 1 00 F9 .dbyt $F9 -000B2Cr 1 00 FA .dbyt $FA -000B2Er 1 00 FB .dbyt $FB -000B30r 1 00 FC .dbyt $FC -000B32r 1 00 FD .dbyt $FD -000B34r 1 00 FE .dbyt $FE -000B36r 1 00 FF .dbyt $FF -000B38r 1 01 00 .dbyt $100 -000B3Ar 1 01 01 .dbyt $101 -000B3Cr 1 01 02 .dbyt $102 -000B3Er 1 01 03 .dbyt $103 -000B40r 1 0F D2 .dbyt $FD2 -000B42r 1 0F D3 .dbyt $FD3 -000B44r 1 0F D4 .dbyt $FD4 -000B46r 1 0F D5 .dbyt $FD5 -000B48r 1 0F D6 .dbyt $FD6 -000B4Ar 1 0F D7 .dbyt $FD7 -000B4Cr 1 0F D8 .dbyt $FD8 -000B4Er 1 0F D9 .dbyt $FD9 -000B50r 1 0F DA .dbyt $FDA -000B52r 1 0F DB .dbyt $FDB -000B54r 1 0F DC .dbyt $FDC -000B56r 1 0F DD .dbyt $FDD -000B58r 1 0F DE .dbyt $FDE -000B5Ar 1 0F DF .dbyt $FDF -000B5Cr 1 0F E0 .dbyt $FE0 -000B5Er 1 0F E1 .dbyt $FE1 -000B60r 1 0F E2 .dbyt $FE2 -000B62r 1 0F E3 .dbyt $FE3 -000B64r 1 0F E4 .dbyt $FE4 -000B66r 1 0F E5 .dbyt $FE5 -000B68r 1 0F E6 .dbyt $FE6 -000B6Ar 1 0F E7 .dbyt $FE7 -000B6Cr 1 0F E8 .dbyt $FE8 -000B6Er 1 0F E9 .dbyt $FE9 -000B70r 1 0F EA .dbyt $FEA -000B72r 1 0F EB .dbyt $FEB -000B74r 1 0F EC .dbyt $FEC -000B76r 1 0F ED .dbyt $FED -000B78r 1 0F EE .dbyt $FEE -000B7Ar 1 0F EF .dbyt $FEF -000B7Cr 1 0F F0 .dbyt $FF0 -000B7Er 1 0F F1 .dbyt $FF1 -000B80r 1 0F F2 .dbyt $FF2 -000B82r 1 0F F3 .dbyt $FF3 -000B84r 1 0F F4 .dbyt $FF4 -000B86r 1 0F F5 .dbyt $FF5 -000B88r 1 0F F6 .dbyt $FF6 -000B8Ar 1 0F F7 .dbyt $FF7 -000B8Cr 1 0F F8 .dbyt $FF8 -000B8Er 1 0F F9 .dbyt $FF9 -000B90r 1 0F FA .dbyt $FFA -000B92r 1 0F FB .dbyt $FFB -000B94r 1 0F FC .dbyt $FFC -000B96r 1 0F FD .dbyt $FFD -000B98r 1 0F FE .dbyt $FFE -000B9Ar 1 0F FF .dbyt $FFF -000B9Cr 1 10 00 .dbyt $1000 -000B9Er 1 10 01 .dbyt $1001 -000BA0r 1 10 02 .dbyt $1002 -000BA2r 1 10 03 .dbyt $1003 -000BA4r 1 10 04 .dbyt $1004 -000BA6r 1 10 05 .dbyt $1005 -000BA8r 1 10 06 .dbyt $1006 -000BAAr 1 10 07 .dbyt $1007 -000BACr 1 10 08 .dbyt $1008 -000BAEr 1 7F F0 .dbyt $7FF0 -000BB0r 1 7F F1 .dbyt $7FF1 -000BB2r 1 7F F2 .dbyt $7FF2 -000BB4r 1 7F F3 .dbyt $7FF3 -000BB6r 1 7F F4 .dbyt $7FF4 -000BB8r 1 7F F5 .dbyt $7FF5 -000BBAr 1 7F F6 .dbyt $7FF6 -000BBCr 1 7F F7 .dbyt $7FF7 -000BBEr 1 7F F8 .dbyt $7FF8 -000BC0r 1 7F F9 .dbyt $7FF9 -000BC2r 1 7F FA .dbyt $7FFA -000BC4r 1 7F FB .dbyt $7FFB -000BC6r 1 7F FC .dbyt $7FFC -000BC8r 1 7F FD .dbyt $7FFD -000BCAr 1 7F FE .dbyt $7FFE -000BCCr 1 7F FF .dbyt $7FFF -000BCEr 1 80 00 .dbyt $8000 -000BD0r 1 80 01 .dbyt $8001 -000BD2r 1 80 02 .dbyt $8002 -000BD4r 1 80 03 .dbyt $8003 -000BD6r 1 80 04 .dbyt $8004 -000BD8r 1 80 05 .dbyt $8005 -000BDAr 1 80 06 .dbyt $8006 -000BDCr 1 80 07 .dbyt $8007 -000BDEr 1 80 08 .dbyt $8008 -000BE0r 1 80 09 .dbyt $8009 -000BE2r 1 80 0A .dbyt $800A -000BE4r 1 80 0B .dbyt $800B -000BE6r 1 9F E1 .dbyt $9FE1 -000BE8r 1 9F E2 .dbyt $9FE2 -000BEAr 1 9F E3 .dbyt $9FE3 -000BECr 1 9F E4 .dbyt $9FE4 -000BEEr 1 9F E5 .dbyt $9FE5 -000BF0r 1 9F E6 .dbyt $9FE6 -000BF2r 1 9F E7 .dbyt $9FE7 -000BF4r 1 9F E8 .dbyt $9FE8 -000BF6r 1 9F E9 .dbyt $9FE9 -000BF8r 1 9F EA .dbyt $9FEA -000BFAr 1 9F EB .dbyt $9FEB -000BFCr 1 9F EC .dbyt $9FEC -000BFEr 1 9F ED .dbyt $9FED -000C00r 1 9F EE .dbyt $9FEE -000C02r 1 9F EF .dbyt $9FEF -000C04r 1 9F F0 .dbyt $9FF0 -000C06r 1 9F F1 .dbyt $9FF1 -000C08r 1 9F F2 .dbyt $9FF2 -000C0Ar 1 9F F3 .dbyt $9FF3 -000C0Cr 1 9F F4 .dbyt $9FF4 -000C0Er 1 9F F5 .dbyt $9FF5 -000C10r 1 9F F6 .dbyt $9FF6 -000C12r 1 9F F7 .dbyt $9FF7 -000C14r 1 9F F8 .dbyt $9FF8 -000C16r 1 9F F9 .dbyt $9FF9 -000C18r 1 9F FA .dbyt $9FFA -000C1Ar 1 9F FB .dbyt $9FFB -000C1Cr 1 9F FC .dbyt $9FFC -000C1Er 1 9F FD .dbyt $9FFD -000C20r 1 9F FE .dbyt $9FFE -000C22r 1 9F FF .dbyt $9FFF -000C24r 1 A0 00 .dbyt $A000 -000C26r 1 A0 01 .dbyt $A001 -000C28r 1 A0 02 .dbyt $A002 -000C2Ar 1 A0 03 .dbyt $A003 -000C2Cr 1 A0 04 .dbyt $A004 -000C2Er 1 A0 05 .dbyt $A005 -000C30r 1 A0 06 .dbyt $A006 -000C32r 1 A0 07 .dbyt $A007 -000C34r 1 A0 08 .dbyt $A008 -000C36r 1 A0 09 .dbyt $A009 -000C38r 1 A0 0A .dbyt $A00A -000C3Ar 1 A0 0B .dbyt $A00B -000C3Cr 1 A0 0C .dbyt $A00C -000C3Er 1 A0 0D .dbyt $A00D -000C40r 1 A0 0E .dbyt $A00E -000C42r 1 A0 0F .dbyt $A00F -000C44r 1 AF E1 .dbyt $AFE1 -000C46r 1 AF E2 .dbyt $AFE2 -000C48r 1 AF E3 .dbyt $AFE3 -000C4Ar 1 AF E4 .dbyt $AFE4 -000C4Cr 1 AF E5 .dbyt $AFE5 -000C4Er 1 AF E6 .dbyt $AFE6 -000C50r 1 AF E7 .dbyt $AFE7 -000C52r 1 AF E8 .dbyt $AFE8 -000C54r 1 AF E9 .dbyt $AFE9 -000C56r 1 AF EA .dbyt $AFEA -000C58r 1 AF EB .dbyt $AFEB -000C5Ar 1 AF EC .dbyt $AFEC -000C5Cr 1 AF ED .dbyt $AFED -000C5Er 1 AF EE .dbyt $AFEE -000C60r 1 AF EF .dbyt $AFEF -000C62r 1 AF F0 .dbyt $AFF0 -000C64r 1 AF F1 .dbyt $AFF1 -000C66r 1 AF F2 .dbyt $AFF2 -000C68r 1 AF F3 .dbyt $AFF3 -000C6Ar 1 AF F4 .dbyt $AFF4 -000C6Cr 1 AF F5 .dbyt $AFF5 -000C6Er 1 AF F6 .dbyt $AFF6 -000C70r 1 AF F7 .dbyt $AFF7 -000C72r 1 AF F8 .dbyt $AFF8 -000C74r 1 AF F9 .dbyt $AFF9 -000C76r 1 AF FA .dbyt $AFFA -000C78r 1 AF FB .dbyt $AFFB -000C7Ar 1 AF FC .dbyt $AFFC -000C7Cr 1 AF FD .dbyt $AFFD -000C7Er 1 AF FE .dbyt $AFFE -000C80r 1 AF FF .dbyt $AFFF -000C82r 1 B0 00 .dbyt $B000 -000C84r 1 B0 01 .dbyt $B001 -000C86r 1 B0 02 .dbyt $B002 -000C88r 1 B0 03 .dbyt $B003 -000C8Ar 1 B0 04 .dbyt $B004 -000C8Cr 1 B0 05 .dbyt $B005 -000C8Er 1 B0 06 .dbyt $B006 -000C90r 1 B0 07 .dbyt $B007 -000C92r 1 B0 08 .dbyt $B008 -000C94r 1 B0 09 .dbyt $B009 -000C96r 1 B0 0A .dbyt $B00A -000C98r 1 B0 0B .dbyt $B00B -000C9Ar 1 B0 0C .dbyt $B00C -000C9Cr 1 B0 0D .dbyt $B00D -000C9Er 1 B0 0E .dbyt $B00E -000CA0r 1 B0 0F .dbyt $B00F -000CA2r 1 BF E1 .dbyt $BFE1 -000CA4r 1 BF E2 .dbyt $BFE2 -000CA6r 1 BF E3 .dbyt $BFE3 -000CA8r 1 BF E4 .dbyt $BFE4 -000CAAr 1 BF E5 .dbyt $BFE5 -000CACr 1 BF E6 .dbyt $BFE6 -000CAEr 1 BF E7 .dbyt $BFE7 -000CB0r 1 BF E8 .dbyt $BFE8 -000CB2r 1 BF E9 .dbyt $BFE9 -000CB4r 1 BF EA .dbyt $BFEA -000CB6r 1 BF EB .dbyt $BFEB -000CB8r 1 BF EC .dbyt $BFEC -000CBAr 1 BF ED .dbyt $BFED -000CBCr 1 BF EE .dbyt $BFEE -000CBEr 1 BF EF .dbyt $BFEF -000CC0r 1 BF F0 .dbyt $BFF0 -000CC2r 1 BF F1 .dbyt $BFF1 -000CC4r 1 BF F2 .dbyt $BFF2 -000CC6r 1 BF F3 .dbyt $BFF3 -000CC8r 1 BF F4 .dbyt $BFF4 -000CCAr 1 BF F5 .dbyt $BFF5 -000CCCr 1 BF F6 .dbyt $BFF6 -000CCEr 1 BF F7 .dbyt $BFF7 -000CD0r 1 BF F8 .dbyt $BFF8 -000CD2r 1 BF F9 .dbyt $BFF9 -000CD4r 1 BF FA .dbyt $BFFA -000CD6r 1 BF FB .dbyt $BFFB -000CD8r 1 BF FC .dbyt $BFFC -000CDAr 1 BF FD .dbyt $BFFD -000CDCr 1 BF FE .dbyt $BFFE -000CDEr 1 BF FF .dbyt $BFFF -000CE0r 1 C0 00 .dbyt $C000 -000CE2r 1 C0 01 .dbyt $C001 -000CE4r 1 C0 02 .dbyt $C002 -000CE6r 1 C0 03 .dbyt $C003 -000CE8r 1 C0 04 .dbyt $C004 -000CEAr 1 C0 05 .dbyt $C005 -000CECr 1 C0 06 .dbyt $C006 -000CEEr 1 C0 07 .dbyt $C007 -000CF0r 1 C0 08 .dbyt $C008 -000CF2r 1 C0 09 .dbyt $C009 -000CF4r 1 C0 0A .dbyt $C00A -000CF6r 1 C0 0B .dbyt $C00B -000CF8r 1 C0 0C .dbyt $C00C -000CFAr 1 C0 0D .dbyt $C00D -000CFCr 1 C0 0E .dbyt $C00E -000CFEr 1 C0 0F .dbyt $C00F -000D00r 1 CF E1 .dbyt $CFE1 -000D02r 1 CF E2 .dbyt $CFE2 -000D04r 1 CF E3 .dbyt $CFE3 -000D06r 1 CF E4 .dbyt $CFE4 -000D08r 1 CF E5 .dbyt $CFE5 -000D0Ar 1 CF E6 .dbyt $CFE6 -000D0Cr 1 CF E7 .dbyt $CFE7 -000D0Er 1 CF E8 .dbyt $CFE8 -000D10r 1 CF E9 .dbyt $CFE9 -000D12r 1 CF EA .dbyt $CFEA -000D14r 1 CF EB .dbyt $CFEB -000D16r 1 CF EC .dbyt $CFEC -000D18r 1 CF ED .dbyt $CFED -000D1Ar 1 CF EE .dbyt $CFEE -000D1Cr 1 CF EF .dbyt $CFEF -000D1Er 1 CF F0 .dbyt $CFF0 -000D20r 1 CF F1 .dbyt $CFF1 -000D22r 1 CF F2 .dbyt $CFF2 -000D24r 1 CF F3 .dbyt $CFF3 -000D26r 1 CF F4 .dbyt $CFF4 -000D28r 1 CF F5 .dbyt $CFF5 -000D2Ar 1 CF F6 .dbyt $CFF6 -000D2Cr 1 CF F7 .dbyt $CFF7 -000D2Er 1 CF F8 .dbyt $CFF8 -000D30r 1 CF F9 .dbyt $CFF9 -000D32r 1 CF FA .dbyt $CFFA -000D34r 1 CF FB .dbyt $CFFB -000D36r 1 CF FC .dbyt $CFFC -000D38r 1 CF FD .dbyt $CFFD -000D3Ar 1 CF FE .dbyt $CFFE -000D3Cr 1 CF FF .dbyt $CFFF -000D3Er 1 D0 00 .dbyt $D000 -000D40r 1 D0 01 .dbyt $D001 -000D42r 1 D0 02 .dbyt $D002 -000D44r 1 D0 03 .dbyt $D003 -000D46r 1 D0 04 .dbyt $D004 -000D48r 1 D0 05 .dbyt $D005 -000D4Ar 1 D0 06 .dbyt $D006 -000D4Cr 1 D0 07 .dbyt $D007 -000D4Er 1 D0 08 .dbyt $D008 -000D50r 1 D0 09 .dbyt $D009 -000D52r 1 D0 0A .dbyt $D00A -000D54r 1 D0 0B .dbyt $D00B -000D56r 1 D0 0C .dbyt $D00C -000D58r 1 D0 0D .dbyt $D00D -000D5Ar 1 D0 0E .dbyt $D00E -000D5Cr 1 D0 0F .dbyt $D00F -000D5Er 1 DF E1 .dbyt $DFE1 -000D60r 1 DF E2 .dbyt $DFE2 -000D62r 1 DF E3 .dbyt $DFE3 -000D64r 1 DF E4 .dbyt $DFE4 -000D66r 1 DF E5 .dbyt $DFE5 -000D68r 1 DF E6 .dbyt $DFE6 -000D6Ar 1 DF E7 .dbyt $DFE7 -000D6Cr 1 DF E8 .dbyt $DFE8 -000D6Er 1 DF E9 .dbyt $DFE9 -000D70r 1 DF EA .dbyt $DFEA -000D72r 1 DF EB .dbyt $DFEB -000D74r 1 DF EC .dbyt $DFEC -000D76r 1 DF ED .dbyt $DFED -000D78r 1 DF EE .dbyt $DFEE -000D7Ar 1 DF EF .dbyt $DFEF -000D7Cr 1 DF F0 .dbyt $DFF0 -000D7Er 1 DF F1 .dbyt $DFF1 -000D80r 1 DF F2 .dbyt $DFF2 -000D82r 1 DF F3 .dbyt $DFF3 -000D84r 1 DF F4 .dbyt $DFF4 -000D86r 1 DF F5 .dbyt $DFF5 -000D88r 1 DF F6 .dbyt $DFF6 -000D8Ar 1 DF F7 .dbyt $DFF7 -000D8Cr 1 DF F8 .dbyt $DFF8 -000D8Er 1 DF F9 .dbyt $DFF9 -000D90r 1 DF FA .dbyt $DFFA -000D92r 1 DF FB .dbyt $DFFB -000D94r 1 DF FC .dbyt $DFFC -000D96r 1 DF FD .dbyt $DFFD -000D98r 1 DF FE .dbyt $DFFE -000D9Ar 1 DF FF .dbyt $DFFF -000D9Cr 1 E0 00 .dbyt $E000 -000D9Er 1 E0 01 .dbyt $E001 -000DA0r 1 E0 02 .dbyt $E002 -000DA2r 1 E0 03 .dbyt $E003 -000DA4r 1 E0 04 .dbyt $E004 -000DA6r 1 E0 05 .dbyt $E005 -000DA8r 1 E0 06 .dbyt $E006 -000DAAr 1 E0 07 .dbyt $E007 -000DACr 1 E0 08 .dbyt $E008 -000DAEr 1 E0 09 .dbyt $E009 -000DB0r 1 E0 0A .dbyt $E00A -000DB2r 1 E0 0B .dbyt $E00B -000DB4r 1 E0 0C .dbyt $E00C -000DB6r 1 E0 0D .dbyt $E00D -000DB8r 1 E0 0E .dbyt $E00E -000DBAr 1 E0 0F .dbyt $E00F -000DBCr 1 EF E1 .dbyt $EFE1 -000DBEr 1 EF E2 .dbyt $EFE2 -000DC0r 1 EF E3 .dbyt $EFE3 -000DC2r 1 EF E4 .dbyt $EFE4 -000DC4r 1 EF E5 .dbyt $EFE5 -000DC6r 1 EF E6 .dbyt $EFE6 -000DC8r 1 EF E7 .dbyt $EFE7 -000DCAr 1 EF E8 .dbyt $EFE8 -000DCCr 1 EF E9 .dbyt $EFE9 -000DCEr 1 EF EA .dbyt $EFEA -000DD0r 1 EF EB .dbyt $EFEB -000DD2r 1 EF EC .dbyt $EFEC -000DD4r 1 EF ED .dbyt $EFED -000DD6r 1 EF EE .dbyt $EFEE -000DD8r 1 EF EF .dbyt $EFEF -000DDAr 1 EF F0 .dbyt $EFF0 -000DDCr 1 EF F1 .dbyt $EFF1 -000DDEr 1 EF F2 .dbyt $EFF2 -000DE0r 1 EF F3 .dbyt $EFF3 -000DE2r 1 EF F4 .dbyt $EFF4 -000DE4r 1 EF F5 .dbyt $EFF5 -000DE6r 1 EF F6 .dbyt $EFF6 -000DE8r 1 EF F7 .dbyt $EFF7 -000DEAr 1 EF F8 .dbyt $EFF8 -000DECr 1 EF F9 .dbyt $EFF9 -000DEEr 1 EF FA .dbyt $EFFA -000DF0r 1 EF FB .dbyt $EFFB -000DF2r 1 EF FC .dbyt $EFFC -000DF4r 1 EF FD .dbyt $EFFD -000DF6r 1 EF FE .dbyt $EFFE -000DF8r 1 EF FF .dbyt $EFFF -000DFAr 1 F0 00 .dbyt $F000 -000DFCr 1 F0 01 .dbyt $F001 -000DFEr 1 F0 02 .dbyt $F002 -000E00r 1 F0 03 .dbyt $F003 -000E02r 1 F0 04 .dbyt $F004 -000E04r 1 F0 05 .dbyt $F005 -000E06r 1 F0 06 .dbyt $F006 -000E08r 1 F0 07 .dbyt $F007 -000E0Ar 1 F0 08 .dbyt $F008 -000E0Cr 1 F0 09 .dbyt $F009 -000E0Er 1 F0 0A .dbyt $F00A -000E10r 1 F0 0B .dbyt $F00B -000E12r 1 F0 0C .dbyt $F00C -000E14r 1 F0 0D .dbyt $F00D -000E16r 1 F0 0E .dbyt $F00E -000E18r 1 F0 0F .dbyt $F00F -000E1Ar 1 FF E1 .dbyt $FFE1 -000E1Cr 1 FF E2 .dbyt $FFE2 -000E1Er 1 FF E3 .dbyt $FFE3 -000E20r 1 FF E4 .dbyt $FFE4 -000E22r 1 FF E5 .dbyt $FFE5 -000E24r 1 FF E6 .dbyt $FFE6 -000E26r 1 FF E7 .dbyt $FFE7 -000E28r 1 FF E8 .dbyt $FFE8 -000E2Ar 1 FF E9 .dbyt $FFE9 -000E2Cr 1 FF EA .dbyt $FFEA -000E2Er 1 FF EB .dbyt $FFEB -000E30r 1 FF EC .dbyt $FFEC -000E32r 1 FF ED .dbyt $FFED -000E34r 1 FF EE .dbyt $FFEE -000E36r 1 FF EF .dbyt $FFEF -000E38r 1 FF F0 .dbyt $FFF0 -000E3Ar 1 FF F1 .dbyt $FFF1 -000E3Cr 1 FF F2 .dbyt $FFF2 -000E3Er 1 FF F3 .dbyt $FFF3 -000E40r 1 FF F4 .dbyt $FFF4 -000E42r 1 FF F5 .dbyt $FFF5 -000E44r 1 FF F6 .dbyt $FFF6 -000E46r 1 FF F7 .dbyt $FFF7 -000E48r 1 FF F8 .dbyt $FFF8 -000E4Ar 1 FF F9 .dbyt $FFF9 -000E4Cr 1 FF FA .dbyt $FFFA -000E4Er 1 FF FB .dbyt $FFFB -000E50r 1 FF FC .dbyt $FFFC -000E52r 1 FF FD .dbyt $FFFD -000E54r 1 FF FE .dbyt $FFFE -000E56r 1 FF FF .dbyt $FFFF +000AC2r 1 ; hex values, uppercase +000AC2r 1 00 00 .dbyt $0 +000AC4r 1 00 01 .dbyt $1 +000AC6r 1 00 02 .dbyt $2 +000AC8r 1 00 03 .dbyt $3 +000ACAr 1 00 04 .dbyt $4 +000ACCr 1 00 05 .dbyt $5 +000ACEr 1 00 06 .dbyt $6 +000AD0r 1 00 07 .dbyt $7 +000AD2r 1 00 08 .dbyt $8 +000AD4r 1 00 09 .dbyt $9 +000AD6r 1 00 0A .dbyt $A +000AD8r 1 00 0B .dbyt $B +000ADAr 1 00 0C .dbyt $C +000ADCr 1 00 0D .dbyt $D +000ADEr 1 00 0E .dbyt $E +000AE0r 1 00 0F .dbyt $F +000AE2r 1 00 10 .dbyt $10 +000AE4r 1 00 11 .dbyt $11 +000AE6r 1 00 12 .dbyt $12 +000AE8r 1 00 13 .dbyt $13 +000AEAr 1 00 70 .dbyt $70 +000AECr 1 00 71 .dbyt $71 +000AEEr 1 00 72 .dbyt $72 +000AF0r 1 00 73 .dbyt $73 +000AF2r 1 00 74 .dbyt $74 +000AF4r 1 00 75 .dbyt $75 +000AF6r 1 00 76 .dbyt $76 +000AF8r 1 00 77 .dbyt $77 +000AFAr 1 00 78 .dbyt $78 +000AFCr 1 00 79 .dbyt $79 +000AFEr 1 00 7A .dbyt $7A +000B00r 1 00 7B .dbyt $7B +000B02r 1 00 7C .dbyt $7C +000B04r 1 00 7D .dbyt $7D +000B06r 1 00 7E .dbyt $7E +000B08r 1 00 7F .dbyt $7F +000B0Ar 1 00 80 .dbyt $80 +000B0Cr 1 00 81 .dbyt $81 +000B0Er 1 00 82 .dbyt $82 +000B10r 1 00 83 .dbyt $83 +000B12r 1 00 84 .dbyt $84 +000B14r 1 00 85 .dbyt $85 +000B16r 1 00 86 .dbyt $86 +000B18r 1 00 F0 .dbyt $F0 +000B1Ar 1 00 F1 .dbyt $F1 +000B1Cr 1 00 F2 .dbyt $F2 +000B1Er 1 00 F3 .dbyt $F3 +000B20r 1 00 F4 .dbyt $F4 +000B22r 1 00 F5 .dbyt $F5 +000B24r 1 00 F6 .dbyt $F6 +000B26r 1 00 F7 .dbyt $F7 +000B28r 1 00 F8 .dbyt $F8 +000B2Ar 1 00 F9 .dbyt $F9 +000B2Cr 1 00 FA .dbyt $FA +000B2Er 1 00 FB .dbyt $FB +000B30r 1 00 FC .dbyt $FC +000B32r 1 00 FD .dbyt $FD +000B34r 1 00 FE .dbyt $FE +000B36r 1 00 FF .dbyt $FF +000B38r 1 01 00 .dbyt $100 +000B3Ar 1 01 01 .dbyt $101 +000B3Cr 1 01 02 .dbyt $102 +000B3Er 1 01 03 .dbyt $103 +000B40r 1 0F D2 .dbyt $FD2 +000B42r 1 0F D3 .dbyt $FD3 +000B44r 1 0F D4 .dbyt $FD4 +000B46r 1 0F D5 .dbyt $FD5 +000B48r 1 0F D6 .dbyt $FD6 +000B4Ar 1 0F D7 .dbyt $FD7 +000B4Cr 1 0F D8 .dbyt $FD8 +000B4Er 1 0F D9 .dbyt $FD9 +000B50r 1 0F DA .dbyt $FDA +000B52r 1 0F DB .dbyt $FDB +000B54r 1 0F DC .dbyt $FDC +000B56r 1 0F DD .dbyt $FDD +000B58r 1 0F DE .dbyt $FDE +000B5Ar 1 0F DF .dbyt $FDF +000B5Cr 1 0F E0 .dbyt $FE0 +000B5Er 1 0F E1 .dbyt $FE1 +000B60r 1 0F E2 .dbyt $FE2 +000B62r 1 0F E3 .dbyt $FE3 +000B64r 1 0F E4 .dbyt $FE4 +000B66r 1 0F E5 .dbyt $FE5 +000B68r 1 0F E6 .dbyt $FE6 +000B6Ar 1 0F E7 .dbyt $FE7 +000B6Cr 1 0F E8 .dbyt $FE8 +000B6Er 1 0F E9 .dbyt $FE9 +000B70r 1 0F EA .dbyt $FEA +000B72r 1 0F EB .dbyt $FEB +000B74r 1 0F EC .dbyt $FEC +000B76r 1 0F ED .dbyt $FED +000B78r 1 0F EE .dbyt $FEE +000B7Ar 1 0F EF .dbyt $FEF +000B7Cr 1 0F F0 .dbyt $FF0 +000B7Er 1 0F F1 .dbyt $FF1 +000B80r 1 0F F2 .dbyt $FF2 +000B82r 1 0F F3 .dbyt $FF3 +000B84r 1 0F F4 .dbyt $FF4 +000B86r 1 0F F5 .dbyt $FF5 +000B88r 1 0F F6 .dbyt $FF6 +000B8Ar 1 0F F7 .dbyt $FF7 +000B8Cr 1 0F F8 .dbyt $FF8 +000B8Er 1 0F F9 .dbyt $FF9 +000B90r 1 0F FA .dbyt $FFA +000B92r 1 0F FB .dbyt $FFB +000B94r 1 0F FC .dbyt $FFC +000B96r 1 0F FD .dbyt $FFD +000B98r 1 0F FE .dbyt $FFE +000B9Ar 1 0F FF .dbyt $FFF +000B9Cr 1 10 00 .dbyt $1000 +000B9Er 1 10 01 .dbyt $1001 +000BA0r 1 10 02 .dbyt $1002 +000BA2r 1 10 03 .dbyt $1003 +000BA4r 1 10 04 .dbyt $1004 +000BA6r 1 10 05 .dbyt $1005 +000BA8r 1 10 06 .dbyt $1006 +000BAAr 1 10 07 .dbyt $1007 +000BACr 1 10 08 .dbyt $1008 +000BAEr 1 7F F0 .dbyt $7FF0 +000BB0r 1 7F F1 .dbyt $7FF1 +000BB2r 1 7F F2 .dbyt $7FF2 +000BB4r 1 7F F3 .dbyt $7FF3 +000BB6r 1 7F F4 .dbyt $7FF4 +000BB8r 1 7F F5 .dbyt $7FF5 +000BBAr 1 7F F6 .dbyt $7FF6 +000BBCr 1 7F F7 .dbyt $7FF7 +000BBEr 1 7F F8 .dbyt $7FF8 +000BC0r 1 7F F9 .dbyt $7FF9 +000BC2r 1 7F FA .dbyt $7FFA +000BC4r 1 7F FB .dbyt $7FFB +000BC6r 1 7F FC .dbyt $7FFC +000BC8r 1 7F FD .dbyt $7FFD +000BCAr 1 7F FE .dbyt $7FFE +000BCCr 1 7F FF .dbyt $7FFF +000BCEr 1 80 00 .dbyt $8000 +000BD0r 1 80 01 .dbyt $8001 +000BD2r 1 80 02 .dbyt $8002 +000BD4r 1 80 03 .dbyt $8003 +000BD6r 1 80 04 .dbyt $8004 +000BD8r 1 80 05 .dbyt $8005 +000BDAr 1 80 06 .dbyt $8006 +000BDCr 1 80 07 .dbyt $8007 +000BDEr 1 80 08 .dbyt $8008 +000BE0r 1 80 09 .dbyt $8009 +000BE2r 1 80 0A .dbyt $800A +000BE4r 1 80 0B .dbyt $800B +000BE6r 1 9F E1 .dbyt $9FE1 +000BE8r 1 9F E2 .dbyt $9FE2 +000BEAr 1 9F E3 .dbyt $9FE3 +000BECr 1 9F E4 .dbyt $9FE4 +000BEEr 1 9F E5 .dbyt $9FE5 +000BF0r 1 9F E6 .dbyt $9FE6 +000BF2r 1 9F E7 .dbyt $9FE7 +000BF4r 1 9F E8 .dbyt $9FE8 +000BF6r 1 9F E9 .dbyt $9FE9 +000BF8r 1 9F EA .dbyt $9FEA +000BFAr 1 9F EB .dbyt $9FEB +000BFCr 1 9F EC .dbyt $9FEC +000BFEr 1 9F ED .dbyt $9FED +000C00r 1 9F EE .dbyt $9FEE +000C02r 1 9F EF .dbyt $9FEF +000C04r 1 9F F0 .dbyt $9FF0 +000C06r 1 9F F1 .dbyt $9FF1 +000C08r 1 9F F2 .dbyt $9FF2 +000C0Ar 1 9F F3 .dbyt $9FF3 +000C0Cr 1 9F F4 .dbyt $9FF4 +000C0Er 1 9F F5 .dbyt $9FF5 +000C10r 1 9F F6 .dbyt $9FF6 +000C12r 1 9F F7 .dbyt $9FF7 +000C14r 1 9F F8 .dbyt $9FF8 +000C16r 1 9F F9 .dbyt $9FF9 +000C18r 1 9F FA .dbyt $9FFA +000C1Ar 1 9F FB .dbyt $9FFB +000C1Cr 1 9F FC .dbyt $9FFC +000C1Er 1 9F FD .dbyt $9FFD +000C20r 1 9F FE .dbyt $9FFE +000C22r 1 9F FF .dbyt $9FFF +000C24r 1 A0 00 .dbyt $A000 +000C26r 1 A0 01 .dbyt $A001 +000C28r 1 A0 02 .dbyt $A002 +000C2Ar 1 A0 03 .dbyt $A003 +000C2Cr 1 A0 04 .dbyt $A004 +000C2Er 1 A0 05 .dbyt $A005 +000C30r 1 A0 06 .dbyt $A006 +000C32r 1 A0 07 .dbyt $A007 +000C34r 1 A0 08 .dbyt $A008 +000C36r 1 A0 09 .dbyt $A009 +000C38r 1 A0 0A .dbyt $A00A +000C3Ar 1 A0 0B .dbyt $A00B +000C3Cr 1 A0 0C .dbyt $A00C +000C3Er 1 A0 0D .dbyt $A00D +000C40r 1 A0 0E .dbyt $A00E +000C42r 1 A0 0F .dbyt $A00F +000C44r 1 AF E1 .dbyt $AFE1 +000C46r 1 AF E2 .dbyt $AFE2 +000C48r 1 AF E3 .dbyt $AFE3 +000C4Ar 1 AF E4 .dbyt $AFE4 +000C4Cr 1 AF E5 .dbyt $AFE5 +000C4Er 1 AF E6 .dbyt $AFE6 +000C50r 1 AF E7 .dbyt $AFE7 +000C52r 1 AF E8 .dbyt $AFE8 +000C54r 1 AF E9 .dbyt $AFE9 +000C56r 1 AF EA .dbyt $AFEA +000C58r 1 AF EB .dbyt $AFEB +000C5Ar 1 AF EC .dbyt $AFEC +000C5Cr 1 AF ED .dbyt $AFED +000C5Er 1 AF EE .dbyt $AFEE +000C60r 1 AF EF .dbyt $AFEF +000C62r 1 AF F0 .dbyt $AFF0 +000C64r 1 AF F1 .dbyt $AFF1 +000C66r 1 AF F2 .dbyt $AFF2 +000C68r 1 AF F3 .dbyt $AFF3 +000C6Ar 1 AF F4 .dbyt $AFF4 +000C6Cr 1 AF F5 .dbyt $AFF5 +000C6Er 1 AF F6 .dbyt $AFF6 +000C70r 1 AF F7 .dbyt $AFF7 +000C72r 1 AF F8 .dbyt $AFF8 +000C74r 1 AF F9 .dbyt $AFF9 +000C76r 1 AF FA .dbyt $AFFA +000C78r 1 AF FB .dbyt $AFFB +000C7Ar 1 AF FC .dbyt $AFFC +000C7Cr 1 AF FD .dbyt $AFFD +000C7Er 1 AF FE .dbyt $AFFE +000C80r 1 AF FF .dbyt $AFFF +000C82r 1 B0 00 .dbyt $B000 +000C84r 1 B0 01 .dbyt $B001 +000C86r 1 B0 02 .dbyt $B002 +000C88r 1 B0 03 .dbyt $B003 +000C8Ar 1 B0 04 .dbyt $B004 +000C8Cr 1 B0 05 .dbyt $B005 +000C8Er 1 B0 06 .dbyt $B006 +000C90r 1 B0 07 .dbyt $B007 +000C92r 1 B0 08 .dbyt $B008 +000C94r 1 B0 09 .dbyt $B009 +000C96r 1 B0 0A .dbyt $B00A +000C98r 1 B0 0B .dbyt $B00B +000C9Ar 1 B0 0C .dbyt $B00C +000C9Cr 1 B0 0D .dbyt $B00D +000C9Er 1 B0 0E .dbyt $B00E +000CA0r 1 B0 0F .dbyt $B00F +000CA2r 1 BF E1 .dbyt $BFE1 +000CA4r 1 BF E2 .dbyt $BFE2 +000CA6r 1 BF E3 .dbyt $BFE3 +000CA8r 1 BF E4 .dbyt $BFE4 +000CAAr 1 BF E5 .dbyt $BFE5 +000CACr 1 BF E6 .dbyt $BFE6 +000CAEr 1 BF E7 .dbyt $BFE7 +000CB0r 1 BF E8 .dbyt $BFE8 +000CB2r 1 BF E9 .dbyt $BFE9 +000CB4r 1 BF EA .dbyt $BFEA +000CB6r 1 BF EB .dbyt $BFEB +000CB8r 1 BF EC .dbyt $BFEC +000CBAr 1 BF ED .dbyt $BFED +000CBCr 1 BF EE .dbyt $BFEE +000CBEr 1 BF EF .dbyt $BFEF +000CC0r 1 BF F0 .dbyt $BFF0 +000CC2r 1 BF F1 .dbyt $BFF1 +000CC4r 1 BF F2 .dbyt $BFF2 +000CC6r 1 BF F3 .dbyt $BFF3 +000CC8r 1 BF F4 .dbyt $BFF4 +000CCAr 1 BF F5 .dbyt $BFF5 +000CCCr 1 BF F6 .dbyt $BFF6 +000CCEr 1 BF F7 .dbyt $BFF7 +000CD0r 1 BF F8 .dbyt $BFF8 +000CD2r 1 BF F9 .dbyt $BFF9 +000CD4r 1 BF FA .dbyt $BFFA +000CD6r 1 BF FB .dbyt $BFFB +000CD8r 1 BF FC .dbyt $BFFC +000CDAr 1 BF FD .dbyt $BFFD +000CDCr 1 BF FE .dbyt $BFFE +000CDEr 1 BF FF .dbyt $BFFF +000CE0r 1 C0 00 .dbyt $C000 +000CE2r 1 C0 01 .dbyt $C001 +000CE4r 1 C0 02 .dbyt $C002 +000CE6r 1 C0 03 .dbyt $C003 +000CE8r 1 C0 04 .dbyt $C004 +000CEAr 1 C0 05 .dbyt $C005 +000CECr 1 C0 06 .dbyt $C006 +000CEEr 1 C0 07 .dbyt $C007 +000CF0r 1 C0 08 .dbyt $C008 +000CF2r 1 C0 09 .dbyt $C009 +000CF4r 1 C0 0A .dbyt $C00A +000CF6r 1 C0 0B .dbyt $C00B +000CF8r 1 C0 0C .dbyt $C00C +000CFAr 1 C0 0D .dbyt $C00D +000CFCr 1 C0 0E .dbyt $C00E +000CFEr 1 C0 0F .dbyt $C00F +000D00r 1 CF E1 .dbyt $CFE1 +000D02r 1 CF E2 .dbyt $CFE2 +000D04r 1 CF E3 .dbyt $CFE3 +000D06r 1 CF E4 .dbyt $CFE4 +000D08r 1 CF E5 .dbyt $CFE5 +000D0Ar 1 CF E6 .dbyt $CFE6 +000D0Cr 1 CF E7 .dbyt $CFE7 +000D0Er 1 CF E8 .dbyt $CFE8 +000D10r 1 CF E9 .dbyt $CFE9 +000D12r 1 CF EA .dbyt $CFEA +000D14r 1 CF EB .dbyt $CFEB +000D16r 1 CF EC .dbyt $CFEC +000D18r 1 CF ED .dbyt $CFED +000D1Ar 1 CF EE .dbyt $CFEE +000D1Cr 1 CF EF .dbyt $CFEF +000D1Er 1 CF F0 .dbyt $CFF0 +000D20r 1 CF F1 .dbyt $CFF1 +000D22r 1 CF F2 .dbyt $CFF2 +000D24r 1 CF F3 .dbyt $CFF3 +000D26r 1 CF F4 .dbyt $CFF4 +000D28r 1 CF F5 .dbyt $CFF5 +000D2Ar 1 CF F6 .dbyt $CFF6 +000D2Cr 1 CF F7 .dbyt $CFF7 +000D2Er 1 CF F8 .dbyt $CFF8 +000D30r 1 CF F9 .dbyt $CFF9 +000D32r 1 CF FA .dbyt $CFFA +000D34r 1 CF FB .dbyt $CFFB +000D36r 1 CF FC .dbyt $CFFC +000D38r 1 CF FD .dbyt $CFFD +000D3Ar 1 CF FE .dbyt $CFFE +000D3Cr 1 CF FF .dbyt $CFFF +000D3Er 1 D0 00 .dbyt $D000 +000D40r 1 D0 01 .dbyt $D001 +000D42r 1 D0 02 .dbyt $D002 +000D44r 1 D0 03 .dbyt $D003 +000D46r 1 D0 04 .dbyt $D004 +000D48r 1 D0 05 .dbyt $D005 +000D4Ar 1 D0 06 .dbyt $D006 +000D4Cr 1 D0 07 .dbyt $D007 +000D4Er 1 D0 08 .dbyt $D008 +000D50r 1 D0 09 .dbyt $D009 +000D52r 1 D0 0A .dbyt $D00A +000D54r 1 D0 0B .dbyt $D00B +000D56r 1 D0 0C .dbyt $D00C +000D58r 1 D0 0D .dbyt $D00D +000D5Ar 1 D0 0E .dbyt $D00E +000D5Cr 1 D0 0F .dbyt $D00F +000D5Er 1 DF E1 .dbyt $DFE1 +000D60r 1 DF E2 .dbyt $DFE2 +000D62r 1 DF E3 .dbyt $DFE3 +000D64r 1 DF E4 .dbyt $DFE4 +000D66r 1 DF E5 .dbyt $DFE5 +000D68r 1 DF E6 .dbyt $DFE6 +000D6Ar 1 DF E7 .dbyt $DFE7 +000D6Cr 1 DF E8 .dbyt $DFE8 +000D6Er 1 DF E9 .dbyt $DFE9 +000D70r 1 DF EA .dbyt $DFEA +000D72r 1 DF EB .dbyt $DFEB +000D74r 1 DF EC .dbyt $DFEC +000D76r 1 DF ED .dbyt $DFED +000D78r 1 DF EE .dbyt $DFEE +000D7Ar 1 DF EF .dbyt $DFEF +000D7Cr 1 DF F0 .dbyt $DFF0 +000D7Er 1 DF F1 .dbyt $DFF1 +000D80r 1 DF F2 .dbyt $DFF2 +000D82r 1 DF F3 .dbyt $DFF3 +000D84r 1 DF F4 .dbyt $DFF4 +000D86r 1 DF F5 .dbyt $DFF5 +000D88r 1 DF F6 .dbyt $DFF6 +000D8Ar 1 DF F7 .dbyt $DFF7 +000D8Cr 1 DF F8 .dbyt $DFF8 +000D8Er 1 DF F9 .dbyt $DFF9 +000D90r 1 DF FA .dbyt $DFFA +000D92r 1 DF FB .dbyt $DFFB +000D94r 1 DF FC .dbyt $DFFC +000D96r 1 DF FD .dbyt $DFFD +000D98r 1 DF FE .dbyt $DFFE +000D9Ar 1 DF FF .dbyt $DFFF +000D9Cr 1 E0 00 .dbyt $E000 +000D9Er 1 E0 01 .dbyt $E001 +000DA0r 1 E0 02 .dbyt $E002 +000DA2r 1 E0 03 .dbyt $E003 +000DA4r 1 E0 04 .dbyt $E004 +000DA6r 1 E0 05 .dbyt $E005 +000DA8r 1 E0 06 .dbyt $E006 +000DAAr 1 E0 07 .dbyt $E007 +000DACr 1 E0 08 .dbyt $E008 +000DAEr 1 E0 09 .dbyt $E009 +000DB0r 1 E0 0A .dbyt $E00A +000DB2r 1 E0 0B .dbyt $E00B +000DB4r 1 E0 0C .dbyt $E00C +000DB6r 1 E0 0D .dbyt $E00D +000DB8r 1 E0 0E .dbyt $E00E +000DBAr 1 E0 0F .dbyt $E00F +000DBCr 1 EF E1 .dbyt $EFE1 +000DBEr 1 EF E2 .dbyt $EFE2 +000DC0r 1 EF E3 .dbyt $EFE3 +000DC2r 1 EF E4 .dbyt $EFE4 +000DC4r 1 EF E5 .dbyt $EFE5 +000DC6r 1 EF E6 .dbyt $EFE6 +000DC8r 1 EF E7 .dbyt $EFE7 +000DCAr 1 EF E8 .dbyt $EFE8 +000DCCr 1 EF E9 .dbyt $EFE9 +000DCEr 1 EF EA .dbyt $EFEA +000DD0r 1 EF EB .dbyt $EFEB +000DD2r 1 EF EC .dbyt $EFEC +000DD4r 1 EF ED .dbyt $EFED +000DD6r 1 EF EE .dbyt $EFEE +000DD8r 1 EF EF .dbyt $EFEF +000DDAr 1 EF F0 .dbyt $EFF0 +000DDCr 1 EF F1 .dbyt $EFF1 +000DDEr 1 EF F2 .dbyt $EFF2 +000DE0r 1 EF F3 .dbyt $EFF3 +000DE2r 1 EF F4 .dbyt $EFF4 +000DE4r 1 EF F5 .dbyt $EFF5 +000DE6r 1 EF F6 .dbyt $EFF6 +000DE8r 1 EF F7 .dbyt $EFF7 +000DEAr 1 EF F8 .dbyt $EFF8 +000DECr 1 EF F9 .dbyt $EFF9 +000DEEr 1 EF FA .dbyt $EFFA +000DF0r 1 EF FB .dbyt $EFFB +000DF2r 1 EF FC .dbyt $EFFC +000DF4r 1 EF FD .dbyt $EFFD +000DF6r 1 EF FE .dbyt $EFFE +000DF8r 1 EF FF .dbyt $EFFF +000DFAr 1 F0 00 .dbyt $F000 +000DFCr 1 F0 01 .dbyt $F001 +000DFEr 1 F0 02 .dbyt $F002 +000E00r 1 F0 03 .dbyt $F003 +000E02r 1 F0 04 .dbyt $F004 +000E04r 1 F0 05 .dbyt $F005 +000E06r 1 F0 06 .dbyt $F006 +000E08r 1 F0 07 .dbyt $F007 +000E0Ar 1 F0 08 .dbyt $F008 +000E0Cr 1 F0 09 .dbyt $F009 +000E0Er 1 F0 0A .dbyt $F00A +000E10r 1 F0 0B .dbyt $F00B +000E12r 1 F0 0C .dbyt $F00C +000E14r 1 F0 0D .dbyt $F00D +000E16r 1 F0 0E .dbyt $F00E +000E18r 1 F0 0F .dbyt $F00F +000E1Ar 1 FF E1 .dbyt $FFE1 +000E1Cr 1 FF E2 .dbyt $FFE2 +000E1Er 1 FF E3 .dbyt $FFE3 +000E20r 1 FF E4 .dbyt $FFE4 +000E22r 1 FF E5 .dbyt $FFE5 +000E24r 1 FF E6 .dbyt $FFE6 +000E26r 1 FF E7 .dbyt $FFE7 +000E28r 1 FF E8 .dbyt $FFE8 +000E2Ar 1 FF E9 .dbyt $FFE9 +000E2Cr 1 FF EA .dbyt $FFEA +000E2Er 1 FF EB .dbyt $FFEB +000E30r 1 FF EC .dbyt $FFEC +000E32r 1 FF ED .dbyt $FFED +000E34r 1 FF EE .dbyt $FFEE +000E36r 1 FF EF .dbyt $FFEF +000E38r 1 FF F0 .dbyt $FFF0 +000E3Ar 1 FF F1 .dbyt $FFF1 +000E3Cr 1 FF F2 .dbyt $FFF2 +000E3Er 1 FF F3 .dbyt $FFF3 +000E40r 1 FF F4 .dbyt $FFF4 +000E42r 1 FF F5 .dbyt $FFF5 +000E44r 1 FF F6 .dbyt $FFF6 +000E46r 1 FF F7 .dbyt $FFF7 +000E48r 1 FF F8 .dbyt $FFF8 +000E4Ar 1 FF F9 .dbyt $FFF9 +000E4Cr 1 FF FA .dbyt $FFFA +000E4Er 1 FF FB .dbyt $FFFB +000E50r 1 FF FC .dbyt $FFFC +000E52r 1 FF FD .dbyt $FFFD +000E54r 1 FF FE .dbyt $FFFE +000E56r 1 FF FF .dbyt $FFFF 000E58r 1 -000E58r 1 ; 4-digit hex values -000E58r 1 00 00 .dbyt $0000 -000E5Ar 1 00 01 .dbyt $0001 -000E5Cr 1 00 02 .dbyt $0002 -000E5Er 1 00 03 .dbyt $0003 -000E60r 1 00 04 .dbyt $0004 -000E62r 1 00 05 .dbyt $0005 -000E64r 1 00 06 .dbyt $0006 -000E66r 1 00 07 .dbyt $0007 -000E68r 1 00 08 .dbyt $0008 -000E6Ar 1 00 09 .dbyt $0009 -000E6Cr 1 00 0A .dbyt $000a -000E6Er 1 00 0B .dbyt $000b -000E70r 1 00 0C .dbyt $000c -000E72r 1 00 0D .dbyt $000d -000E74r 1 00 0E .dbyt $000e -000E76r 1 00 0F .dbyt $000f -000E78r 1 00 10 .dbyt $0010 -000E7Ar 1 00 11 .dbyt $0011 -000E7Cr 1 00 12 .dbyt $0012 -000E7Er 1 00 13 .dbyt $0013 -000E80r 1 00 70 .dbyt $0070 -000E82r 1 00 71 .dbyt $0071 -000E84r 1 00 72 .dbyt $0072 -000E86r 1 00 73 .dbyt $0073 -000E88r 1 00 74 .dbyt $0074 -000E8Ar 1 00 75 .dbyt $0075 -000E8Cr 1 00 76 .dbyt $0076 -000E8Er 1 00 77 .dbyt $0077 -000E90r 1 00 78 .dbyt $0078 -000E92r 1 00 79 .dbyt $0079 -000E94r 1 00 7A .dbyt $007a -000E96r 1 00 7B .dbyt $007b -000E98r 1 00 7C .dbyt $007c -000E9Ar 1 00 7D .dbyt $007d -000E9Cr 1 00 7E .dbyt $007e -000E9Er 1 00 7F .dbyt $007f -000EA0r 1 00 80 .dbyt $0080 -000EA2r 1 00 81 .dbyt $0081 -000EA4r 1 00 82 .dbyt $0082 -000EA6r 1 00 83 .dbyt $0083 -000EA8r 1 00 84 .dbyt $0084 -000EAAr 1 00 85 .dbyt $0085 -000EACr 1 00 86 .dbyt $0086 -000EAEr 1 00 F0 .dbyt $00f0 -000EB0r 1 00 F1 .dbyt $00f1 -000EB2r 1 00 F2 .dbyt $00f2 -000EB4r 1 00 F3 .dbyt $00f3 -000EB6r 1 00 F4 .dbyt $00f4 -000EB8r 1 00 F5 .dbyt $00f5 -000EBAr 1 00 F6 .dbyt $00f6 -000EBCr 1 00 F7 .dbyt $00f7 -000EBEr 1 00 F8 .dbyt $00f8 -000EC0r 1 00 F9 .dbyt $00f9 -000EC2r 1 00 FA .dbyt $00fa -000EC4r 1 00 FB .dbyt $00fb -000EC6r 1 00 FC .dbyt $00fc -000EC8r 1 00 FD .dbyt $00fd -000ECAr 1 00 FE .dbyt $00fe -000ECCr 1 00 FF .dbyt $00ff -000ECEr 1 01 00 .dbyt $0100 -000ED0r 1 01 01 .dbyt $0101 -000ED2r 1 01 02 .dbyt $0102 -000ED4r 1 01 03 .dbyt $0103 -000ED6r 1 0F D2 .dbyt $0fd2 -000ED8r 1 0F D3 .dbyt $0fd3 -000EDAr 1 0F D4 .dbyt $0fd4 -000EDCr 1 0F D5 .dbyt $0fd5 -000EDEr 1 0F D6 .dbyt $0fd6 -000EE0r 1 0F D7 .dbyt $0fd7 -000EE2r 1 0F D8 .dbyt $0fd8 -000EE4r 1 0F D9 .dbyt $0fd9 -000EE6r 1 0F DA .dbyt $0fda -000EE8r 1 0F DB .dbyt $0fdb -000EEAr 1 0F DC .dbyt $0fdc -000EECr 1 0F DD .dbyt $0fdd -000EEEr 1 0F DE .dbyt $0fde -000EF0r 1 0F DF .dbyt $0fdf -000EF2r 1 0F E0 .dbyt $0fe0 -000EF4r 1 0F E1 .dbyt $0fe1 -000EF6r 1 0F E2 .dbyt $0fe2 -000EF8r 1 0F E3 .dbyt $0fe3 -000EFAr 1 0F E4 .dbyt $0fe4 -000EFCr 1 0F E5 .dbyt $0fe5 -000EFEr 1 0F E6 .dbyt $0fe6 -000F00r 1 0F E7 .dbyt $0fe7 -000F02r 1 0F E8 .dbyt $0fe8 -000F04r 1 0F E9 .dbyt $0fe9 -000F06r 1 0F EA .dbyt $0fea -000F08r 1 0F EB .dbyt $0feb -000F0Ar 1 0F EC .dbyt $0fec -000F0Cr 1 0F ED .dbyt $0fed -000F0Er 1 0F EE .dbyt $0fee -000F10r 1 0F EF .dbyt $0fef -000F12r 1 0F F0 .dbyt $0ff0 -000F14r 1 0F F1 .dbyt $0ff1 -000F16r 1 0F F2 .dbyt $0ff2 -000F18r 1 0F F3 .dbyt $0ff3 -000F1Ar 1 0F F4 .dbyt $0ff4 -000F1Cr 1 0F F5 .dbyt $0ff5 -000F1Er 1 0F F6 .dbyt $0ff6 -000F20r 1 0F F7 .dbyt $0ff7 -000F22r 1 0F F8 .dbyt $0ff8 -000F24r 1 0F F9 .dbyt $0ff9 -000F26r 1 0F FA .dbyt $0ffa -000F28r 1 0F FB .dbyt $0ffb -000F2Ar 1 0F FC .dbyt $0ffc -000F2Cr 1 0F FD .dbyt $0ffd -000F2Er 1 0F FE .dbyt $0ffe -000F30r 1 0F FF .dbyt $0fff -000F32r 1 10 00 .dbyt $1000 -000F34r 1 10 01 .dbyt $1001 -000F36r 1 10 02 .dbyt $1002 -000F38r 1 10 03 .dbyt $1003 -000F3Ar 1 10 04 .dbyt $1004 -000F3Cr 1 10 05 .dbyt $1005 -000F3Er 1 10 06 .dbyt $1006 -000F40r 1 10 07 .dbyt $1007 -000F42r 1 10 08 .dbyt $1008 -000F44r 1 7F F0 .dbyt $7ff0 -000F46r 1 7F F1 .dbyt $7ff1 -000F48r 1 7F F2 .dbyt $7ff2 -000F4Ar 1 7F F3 .dbyt $7ff3 -000F4Cr 1 7F F4 .dbyt $7ff4 -000F4Er 1 7F F5 .dbyt $7ff5 -000F50r 1 7F F6 .dbyt $7ff6 -000F52r 1 7F F7 .dbyt $7ff7 -000F54r 1 7F F8 .dbyt $7ff8 -000F56r 1 7F F9 .dbyt $7ff9 -000F58r 1 7F FA .dbyt $7ffa -000F5Ar 1 7F FB .dbyt $7ffb -000F5Cr 1 7F FC .dbyt $7ffc -000F5Er 1 7F FD .dbyt $7ffd -000F60r 1 7F FE .dbyt $7ffe -000F62r 1 7F FF .dbyt $7fff -000F64r 1 80 00 .dbyt $8000 -000F66r 1 80 01 .dbyt $8001 -000F68r 1 80 02 .dbyt $8002 -000F6Ar 1 80 03 .dbyt $8003 -000F6Cr 1 80 04 .dbyt $8004 -000F6Er 1 80 05 .dbyt $8005 -000F70r 1 80 06 .dbyt $8006 -000F72r 1 80 07 .dbyt $8007 -000F74r 1 80 08 .dbyt $8008 -000F76r 1 80 09 .dbyt $8009 -000F78r 1 80 0A .dbyt $800a -000F7Ar 1 80 0B .dbyt $800b -000F7Cr 1 9F E1 .dbyt $9fe1 -000F7Er 1 9F E2 .dbyt $9fe2 -000F80r 1 9F E3 .dbyt $9fe3 -000F82r 1 9F E4 .dbyt $9fe4 -000F84r 1 9F E5 .dbyt $9fe5 -000F86r 1 9F E6 .dbyt $9fe6 -000F88r 1 9F E7 .dbyt $9fe7 -000F8Ar 1 9F E8 .dbyt $9fe8 -000F8Cr 1 9F E9 .dbyt $9fe9 -000F8Er 1 9F EA .dbyt $9fea -000F90r 1 9F EB .dbyt $9feb -000F92r 1 9F EC .dbyt $9fec -000F94r 1 9F ED .dbyt $9fed -000F96r 1 9F EE .dbyt $9fee -000F98r 1 9F EF .dbyt $9fef -000F9Ar 1 9F F0 .dbyt $9ff0 -000F9Cr 1 9F F1 .dbyt $9ff1 -000F9Er 1 9F F2 .dbyt $9ff2 -000FA0r 1 9F F3 .dbyt $9ff3 -000FA2r 1 9F F4 .dbyt $9ff4 -000FA4r 1 9F F5 .dbyt $9ff5 -000FA6r 1 9F F6 .dbyt $9ff6 -000FA8r 1 9F F7 .dbyt $9ff7 -000FAAr 1 9F F8 .dbyt $9ff8 -000FACr 1 9F F9 .dbyt $9ff9 -000FAEr 1 9F FA .dbyt $9ffa -000FB0r 1 9F FB .dbyt $9ffb -000FB2r 1 9F FC .dbyt $9ffc -000FB4r 1 9F FD .dbyt $9ffd -000FB6r 1 9F FE .dbyt $9ffe -000FB8r 1 9F FF .dbyt $9fff -000FBAr 1 A0 00 .dbyt $a000 -000FBCr 1 A0 01 .dbyt $a001 -000FBEr 1 A0 02 .dbyt $a002 -000FC0r 1 A0 03 .dbyt $a003 -000FC2r 1 A0 04 .dbyt $a004 -000FC4r 1 A0 05 .dbyt $a005 -000FC6r 1 A0 06 .dbyt $a006 -000FC8r 1 A0 07 .dbyt $a007 -000FCAr 1 A0 08 .dbyt $a008 -000FCCr 1 A0 09 .dbyt $a009 -000FCEr 1 A0 0A .dbyt $a00a -000FD0r 1 A0 0B .dbyt $a00b -000FD2r 1 A0 0C .dbyt $a00c -000FD4r 1 A0 0D .dbyt $a00d -000FD6r 1 A0 0E .dbyt $a00e -000FD8r 1 A0 0F .dbyt $a00f -000FDAr 1 AF E1 .dbyt $afe1 -000FDCr 1 AF E2 .dbyt $afe2 -000FDEr 1 AF E3 .dbyt $afe3 -000FE0r 1 AF E4 .dbyt $afe4 -000FE2r 1 AF E5 .dbyt $afe5 -000FE4r 1 AF E6 .dbyt $afe6 -000FE6r 1 AF E7 .dbyt $afe7 -000FE8r 1 AF E8 .dbyt $afe8 -000FEAr 1 AF E9 .dbyt $afe9 -000FECr 1 AF EA .dbyt $afea -000FEEr 1 AF EB .dbyt $afeb -000FF0r 1 AF EC .dbyt $afec -000FF2r 1 AF ED .dbyt $afed -000FF4r 1 AF EE .dbyt $afee -000FF6r 1 AF EF .dbyt $afef -000FF8r 1 AF F0 .dbyt $aff0 -000FFAr 1 AF F1 .dbyt $aff1 -000FFCr 1 AF F2 .dbyt $aff2 -000FFEr 1 AF F3 .dbyt $aff3 -001000r 1 AF F4 .dbyt $aff4 -001002r 1 AF F5 .dbyt $aff5 -001004r 1 AF F6 .dbyt $aff6 -001006r 1 AF F7 .dbyt $aff7 -001008r 1 AF F8 .dbyt $aff8 -00100Ar 1 AF F9 .dbyt $aff9 -00100Cr 1 AF FA .dbyt $affa -00100Er 1 AF FB .dbyt $affb -001010r 1 AF FC .dbyt $affc -001012r 1 AF FD .dbyt $affd -001014r 1 AF FE .dbyt $affe -001016r 1 AF FF .dbyt $afff -001018r 1 B0 00 .dbyt $b000 -00101Ar 1 B0 01 .dbyt $b001 -00101Cr 1 B0 02 .dbyt $b002 -00101Er 1 B0 03 .dbyt $b003 -001020r 1 B0 04 .dbyt $b004 -001022r 1 B0 05 .dbyt $b005 -001024r 1 B0 06 .dbyt $b006 -001026r 1 B0 07 .dbyt $b007 -001028r 1 B0 08 .dbyt $b008 -00102Ar 1 B0 09 .dbyt $b009 -00102Cr 1 B0 0A .dbyt $b00a -00102Er 1 B0 0B .dbyt $b00b -001030r 1 B0 0C .dbyt $b00c -001032r 1 B0 0D .dbyt $b00d -001034r 1 B0 0E .dbyt $b00e -001036r 1 B0 0F .dbyt $b00f -001038r 1 BF E1 .dbyt $bfe1 -00103Ar 1 BF E2 .dbyt $bfe2 -00103Cr 1 BF E3 .dbyt $bfe3 -00103Er 1 BF E4 .dbyt $bfe4 -001040r 1 BF E5 .dbyt $bfe5 -001042r 1 BF E6 .dbyt $bfe6 -001044r 1 BF E7 .dbyt $bfe7 -001046r 1 BF E8 .dbyt $bfe8 -001048r 1 BF E9 .dbyt $bfe9 -00104Ar 1 BF EA .dbyt $bfea -00104Cr 1 BF EB .dbyt $bfeb -00104Er 1 BF EC .dbyt $bfec -001050r 1 BF ED .dbyt $bfed -001052r 1 BF EE .dbyt $bfee -001054r 1 BF EF .dbyt $bfef -001056r 1 BF F0 .dbyt $bff0 -001058r 1 BF F1 .dbyt $bff1 -00105Ar 1 BF F2 .dbyt $bff2 -00105Cr 1 BF F3 .dbyt $bff3 -00105Er 1 BF F4 .dbyt $bff4 -001060r 1 BF F5 .dbyt $bff5 -001062r 1 BF F6 .dbyt $bff6 -001064r 1 BF F7 .dbyt $bff7 -001066r 1 BF F8 .dbyt $bff8 -001068r 1 BF F9 .dbyt $bff9 -00106Ar 1 BF FA .dbyt $bffa -00106Cr 1 BF FB .dbyt $bffb -00106Er 1 BF FC .dbyt $bffc -001070r 1 BF FD .dbyt $bffd -001072r 1 BF FE .dbyt $bffe -001074r 1 BF FF .dbyt $bfff -001076r 1 C0 00 .dbyt $c000 -001078r 1 C0 01 .dbyt $c001 -00107Ar 1 C0 02 .dbyt $c002 -00107Cr 1 C0 03 .dbyt $c003 -00107Er 1 C0 04 .dbyt $c004 -001080r 1 C0 05 .dbyt $c005 -001082r 1 C0 06 .dbyt $c006 -001084r 1 C0 07 .dbyt $c007 -001086r 1 C0 08 .dbyt $c008 -001088r 1 C0 09 .dbyt $c009 -00108Ar 1 C0 0A .dbyt $c00a -00108Cr 1 C0 0B .dbyt $c00b -00108Er 1 C0 0C .dbyt $c00c -001090r 1 C0 0D .dbyt $c00d -001092r 1 C0 0E .dbyt $c00e -001094r 1 C0 0F .dbyt $c00f -001096r 1 CF E1 .dbyt $cfe1 -001098r 1 CF E2 .dbyt $cfe2 -00109Ar 1 CF E3 .dbyt $cfe3 -00109Cr 1 CF E4 .dbyt $cfe4 -00109Er 1 CF E5 .dbyt $cfe5 -0010A0r 1 CF E6 .dbyt $cfe6 -0010A2r 1 CF E7 .dbyt $cfe7 -0010A4r 1 CF E8 .dbyt $cfe8 -0010A6r 1 CF E9 .dbyt $cfe9 -0010A8r 1 CF EA .dbyt $cfea -0010AAr 1 CF EB .dbyt $cfeb -0010ACr 1 CF EC .dbyt $cfec -0010AEr 1 CF ED .dbyt $cfed -0010B0r 1 CF EE .dbyt $cfee -0010B2r 1 CF EF .dbyt $cfef -0010B4r 1 CF F0 .dbyt $cff0 -0010B6r 1 CF F1 .dbyt $cff1 -0010B8r 1 CF F2 .dbyt $cff2 -0010BAr 1 CF F3 .dbyt $cff3 -0010BCr 1 CF F4 .dbyt $cff4 -0010BEr 1 CF F5 .dbyt $cff5 -0010C0r 1 CF F6 .dbyt $cff6 -0010C2r 1 CF F7 .dbyt $cff7 -0010C4r 1 CF F8 .dbyt $cff8 -0010C6r 1 CF F9 .dbyt $cff9 -0010C8r 1 CF FA .dbyt $cffa -0010CAr 1 CF FB .dbyt $cffb -0010CCr 1 CF FC .dbyt $cffc -0010CEr 1 CF FD .dbyt $cffd -0010D0r 1 CF FE .dbyt $cffe -0010D2r 1 CF FF .dbyt $cfff -0010D4r 1 D0 00 .dbyt $d000 -0010D6r 1 D0 01 .dbyt $d001 -0010D8r 1 D0 02 .dbyt $d002 -0010DAr 1 D0 03 .dbyt $d003 -0010DCr 1 D0 04 .dbyt $d004 -0010DEr 1 D0 05 .dbyt $d005 -0010E0r 1 D0 06 .dbyt $d006 -0010E2r 1 D0 07 .dbyt $d007 -0010E4r 1 D0 08 .dbyt $d008 -0010E6r 1 D0 09 .dbyt $d009 -0010E8r 1 D0 0A .dbyt $d00a -0010EAr 1 D0 0B .dbyt $d00b -0010ECr 1 D0 0C .dbyt $d00c -0010EEr 1 D0 0D .dbyt $d00d -0010F0r 1 D0 0E .dbyt $d00e -0010F2r 1 D0 0F .dbyt $d00f -0010F4r 1 DF E1 .dbyt $dfe1 -0010F6r 1 DF E2 .dbyt $dfe2 -0010F8r 1 DF E3 .dbyt $dfe3 -0010FAr 1 DF E4 .dbyt $dfe4 -0010FCr 1 DF E5 .dbyt $dfe5 -0010FEr 1 DF E6 .dbyt $dfe6 -001100r 1 DF E7 .dbyt $dfe7 -001102r 1 DF E8 .dbyt $dfe8 -001104r 1 DF E9 .dbyt $dfe9 -001106r 1 DF EA .dbyt $dfea -001108r 1 DF EB .dbyt $dfeb -00110Ar 1 DF EC .dbyt $dfec -00110Cr 1 DF ED .dbyt $dfed -00110Er 1 DF EE .dbyt $dfee -001110r 1 DF EF .dbyt $dfef -001112r 1 DF F0 .dbyt $dff0 -001114r 1 DF F1 .dbyt $dff1 -001116r 1 DF F2 .dbyt $dff2 -001118r 1 DF F3 .dbyt $dff3 -00111Ar 1 DF F4 .dbyt $dff4 -00111Cr 1 DF F5 .dbyt $dff5 -00111Er 1 DF F6 .dbyt $dff6 -001120r 1 DF F7 .dbyt $dff7 -001122r 1 DF F8 .dbyt $dff8 -001124r 1 DF F9 .dbyt $dff9 -001126r 1 DF FA .dbyt $dffa -001128r 1 DF FB .dbyt $dffb -00112Ar 1 DF FC .dbyt $dffc -00112Cr 1 DF FD .dbyt $dffd -00112Er 1 DF FE .dbyt $dffe -001130r 1 DF FF .dbyt $dfff -001132r 1 E0 00 .dbyt $e000 -001134r 1 E0 01 .dbyt $e001 -001136r 1 E0 02 .dbyt $e002 -001138r 1 E0 03 .dbyt $e003 -00113Ar 1 E0 04 .dbyt $e004 -00113Cr 1 E0 05 .dbyt $e005 -00113Er 1 E0 06 .dbyt $e006 -001140r 1 E0 07 .dbyt $e007 -001142r 1 E0 08 .dbyt $e008 -001144r 1 E0 09 .dbyt $e009 -001146r 1 E0 0A .dbyt $e00a -001148r 1 E0 0B .dbyt $e00b -00114Ar 1 E0 0C .dbyt $e00c -00114Cr 1 E0 0D .dbyt $e00d -00114Er 1 E0 0E .dbyt $e00e -001150r 1 E0 0F .dbyt $e00f -001152r 1 EF E1 .dbyt $efe1 -001154r 1 EF E2 .dbyt $efe2 -001156r 1 EF E3 .dbyt $efe3 -001158r 1 EF E4 .dbyt $efe4 -00115Ar 1 EF E5 .dbyt $efe5 -00115Cr 1 EF E6 .dbyt $efe6 -00115Er 1 EF E7 .dbyt $efe7 -001160r 1 EF E8 .dbyt $efe8 -001162r 1 EF E9 .dbyt $efe9 -001164r 1 EF EA .dbyt $efea -001166r 1 EF EB .dbyt $efeb -001168r 1 EF EC .dbyt $efec -00116Ar 1 EF ED .dbyt $efed -00116Cr 1 EF EE .dbyt $efee -00116Er 1 EF EF .dbyt $efef -001170r 1 EF F0 .dbyt $eff0 -001172r 1 EF F1 .dbyt $eff1 -001174r 1 EF F2 .dbyt $eff2 -001176r 1 EF F3 .dbyt $eff3 -001178r 1 EF F4 .dbyt $eff4 -00117Ar 1 EF F5 .dbyt $eff5 -00117Cr 1 EF F6 .dbyt $eff6 -00117Er 1 EF F7 .dbyt $eff7 -001180r 1 EF F8 .dbyt $eff8 -001182r 1 EF F9 .dbyt $eff9 -001184r 1 EF FA .dbyt $effa -001186r 1 EF FB .dbyt $effb -001188r 1 EF FC .dbyt $effc -00118Ar 1 EF FD .dbyt $effd -00118Cr 1 EF FE .dbyt $effe -00118Er 1 EF FF .dbyt $efff -001190r 1 F0 00 .dbyt $f000 -001192r 1 F0 01 .dbyt $f001 -001194r 1 F0 02 .dbyt $f002 -001196r 1 F0 03 .dbyt $f003 -001198r 1 F0 04 .dbyt $f004 -00119Ar 1 F0 05 .dbyt $f005 -00119Cr 1 F0 06 .dbyt $f006 -00119Er 1 F0 07 .dbyt $f007 -0011A0r 1 F0 08 .dbyt $f008 -0011A2r 1 F0 09 .dbyt $f009 -0011A4r 1 F0 0A .dbyt $f00a -0011A6r 1 F0 0B .dbyt $f00b -0011A8r 1 F0 0C .dbyt $f00c -0011AAr 1 F0 0D .dbyt $f00d -0011ACr 1 F0 0E .dbyt $f00e -0011AEr 1 F0 0F .dbyt $f00f -0011B0r 1 FF E1 .dbyt $ffe1 -0011B2r 1 FF E2 .dbyt $ffe2 -0011B4r 1 FF E3 .dbyt $ffe3 -0011B6r 1 FF E4 .dbyt $ffe4 -0011B8r 1 FF E5 .dbyt $ffe5 -0011BAr 1 FF E6 .dbyt $ffe6 -0011BCr 1 FF E7 .dbyt $ffe7 -0011BEr 1 FF E8 .dbyt $ffe8 -0011C0r 1 FF E9 .dbyt $ffe9 -0011C2r 1 FF EA .dbyt $ffea -0011C4r 1 FF EB .dbyt $ffeb -0011C6r 1 FF EC .dbyt $ffec -0011C8r 1 FF ED .dbyt $ffed -0011CAr 1 FF EE .dbyt $ffee -0011CCr 1 FF EF .dbyt $ffef -0011CEr 1 FF F0 .dbyt $fff0 -0011D0r 1 FF F1 .dbyt $fff1 -0011D2r 1 FF F2 .dbyt $fff2 -0011D4r 1 FF F3 .dbyt $fff3 -0011D6r 1 FF F4 .dbyt $fff4 -0011D8r 1 FF F5 .dbyt $fff5 -0011DAr 1 FF F6 .dbyt $fff6 -0011DCr 1 FF F7 .dbyt $fff7 -0011DEr 1 FF F8 .dbyt $fff8 -0011E0r 1 FF F9 .dbyt $fff9 -0011E2r 1 FF FA .dbyt $fffa -0011E4r 1 FF FB .dbyt $fffb -0011E6r 1 FF FC .dbyt $fffc -0011E8r 1 FF FD .dbyt $fffd -0011EAr 1 FF FE .dbyt $fffe -0011ECr 1 FF FF .dbyt $ffff +000E58r 1 ; 4-digit hex values +000E58r 1 00 00 .dbyt $0000 +000E5Ar 1 00 01 .dbyt $0001 +000E5Cr 1 00 02 .dbyt $0002 +000E5Er 1 00 03 .dbyt $0003 +000E60r 1 00 04 .dbyt $0004 +000E62r 1 00 05 .dbyt $0005 +000E64r 1 00 06 .dbyt $0006 +000E66r 1 00 07 .dbyt $0007 +000E68r 1 00 08 .dbyt $0008 +000E6Ar 1 00 09 .dbyt $0009 +000E6Cr 1 00 0A .dbyt $000a +000E6Er 1 00 0B .dbyt $000b +000E70r 1 00 0C .dbyt $000c +000E72r 1 00 0D .dbyt $000d +000E74r 1 00 0E .dbyt $000e +000E76r 1 00 0F .dbyt $000f +000E78r 1 00 10 .dbyt $0010 +000E7Ar 1 00 11 .dbyt $0011 +000E7Cr 1 00 12 .dbyt $0012 +000E7Er 1 00 13 .dbyt $0013 +000E80r 1 00 70 .dbyt $0070 +000E82r 1 00 71 .dbyt $0071 +000E84r 1 00 72 .dbyt $0072 +000E86r 1 00 73 .dbyt $0073 +000E88r 1 00 74 .dbyt $0074 +000E8Ar 1 00 75 .dbyt $0075 +000E8Cr 1 00 76 .dbyt $0076 +000E8Er 1 00 77 .dbyt $0077 +000E90r 1 00 78 .dbyt $0078 +000E92r 1 00 79 .dbyt $0079 +000E94r 1 00 7A .dbyt $007a +000E96r 1 00 7B .dbyt $007b +000E98r 1 00 7C .dbyt $007c +000E9Ar 1 00 7D .dbyt $007d +000E9Cr 1 00 7E .dbyt $007e +000E9Er 1 00 7F .dbyt $007f +000EA0r 1 00 80 .dbyt $0080 +000EA2r 1 00 81 .dbyt $0081 +000EA4r 1 00 82 .dbyt $0082 +000EA6r 1 00 83 .dbyt $0083 +000EA8r 1 00 84 .dbyt $0084 +000EAAr 1 00 85 .dbyt $0085 +000EACr 1 00 86 .dbyt $0086 +000EAEr 1 00 F0 .dbyt $00f0 +000EB0r 1 00 F1 .dbyt $00f1 +000EB2r 1 00 F2 .dbyt $00f2 +000EB4r 1 00 F3 .dbyt $00f3 +000EB6r 1 00 F4 .dbyt $00f4 +000EB8r 1 00 F5 .dbyt $00f5 +000EBAr 1 00 F6 .dbyt $00f6 +000EBCr 1 00 F7 .dbyt $00f7 +000EBEr 1 00 F8 .dbyt $00f8 +000EC0r 1 00 F9 .dbyt $00f9 +000EC2r 1 00 FA .dbyt $00fa +000EC4r 1 00 FB .dbyt $00fb +000EC6r 1 00 FC .dbyt $00fc +000EC8r 1 00 FD .dbyt $00fd +000ECAr 1 00 FE .dbyt $00fe +000ECCr 1 00 FF .dbyt $00ff +000ECEr 1 01 00 .dbyt $0100 +000ED0r 1 01 01 .dbyt $0101 +000ED2r 1 01 02 .dbyt $0102 +000ED4r 1 01 03 .dbyt $0103 +000ED6r 1 0F D2 .dbyt $0fd2 +000ED8r 1 0F D3 .dbyt $0fd3 +000EDAr 1 0F D4 .dbyt $0fd4 +000EDCr 1 0F D5 .dbyt $0fd5 +000EDEr 1 0F D6 .dbyt $0fd6 +000EE0r 1 0F D7 .dbyt $0fd7 +000EE2r 1 0F D8 .dbyt $0fd8 +000EE4r 1 0F D9 .dbyt $0fd9 +000EE6r 1 0F DA .dbyt $0fda +000EE8r 1 0F DB .dbyt $0fdb +000EEAr 1 0F DC .dbyt $0fdc +000EECr 1 0F DD .dbyt $0fdd +000EEEr 1 0F DE .dbyt $0fde +000EF0r 1 0F DF .dbyt $0fdf +000EF2r 1 0F E0 .dbyt $0fe0 +000EF4r 1 0F E1 .dbyt $0fe1 +000EF6r 1 0F E2 .dbyt $0fe2 +000EF8r 1 0F E3 .dbyt $0fe3 +000EFAr 1 0F E4 .dbyt $0fe4 +000EFCr 1 0F E5 .dbyt $0fe5 +000EFEr 1 0F E6 .dbyt $0fe6 +000F00r 1 0F E7 .dbyt $0fe7 +000F02r 1 0F E8 .dbyt $0fe8 +000F04r 1 0F E9 .dbyt $0fe9 +000F06r 1 0F EA .dbyt $0fea +000F08r 1 0F EB .dbyt $0feb +000F0Ar 1 0F EC .dbyt $0fec +000F0Cr 1 0F ED .dbyt $0fed +000F0Er 1 0F EE .dbyt $0fee +000F10r 1 0F EF .dbyt $0fef +000F12r 1 0F F0 .dbyt $0ff0 +000F14r 1 0F F1 .dbyt $0ff1 +000F16r 1 0F F2 .dbyt $0ff2 +000F18r 1 0F F3 .dbyt $0ff3 +000F1Ar 1 0F F4 .dbyt $0ff4 +000F1Cr 1 0F F5 .dbyt $0ff5 +000F1Er 1 0F F6 .dbyt $0ff6 +000F20r 1 0F F7 .dbyt $0ff7 +000F22r 1 0F F8 .dbyt $0ff8 +000F24r 1 0F F9 .dbyt $0ff9 +000F26r 1 0F FA .dbyt $0ffa +000F28r 1 0F FB .dbyt $0ffb +000F2Ar 1 0F FC .dbyt $0ffc +000F2Cr 1 0F FD .dbyt $0ffd +000F2Er 1 0F FE .dbyt $0ffe +000F30r 1 0F FF .dbyt $0fff +000F32r 1 10 00 .dbyt $1000 +000F34r 1 10 01 .dbyt $1001 +000F36r 1 10 02 .dbyt $1002 +000F38r 1 10 03 .dbyt $1003 +000F3Ar 1 10 04 .dbyt $1004 +000F3Cr 1 10 05 .dbyt $1005 +000F3Er 1 10 06 .dbyt $1006 +000F40r 1 10 07 .dbyt $1007 +000F42r 1 10 08 .dbyt $1008 +000F44r 1 7F F0 .dbyt $7ff0 +000F46r 1 7F F1 .dbyt $7ff1 +000F48r 1 7F F2 .dbyt $7ff2 +000F4Ar 1 7F F3 .dbyt $7ff3 +000F4Cr 1 7F F4 .dbyt $7ff4 +000F4Er 1 7F F5 .dbyt $7ff5 +000F50r 1 7F F6 .dbyt $7ff6 +000F52r 1 7F F7 .dbyt $7ff7 +000F54r 1 7F F8 .dbyt $7ff8 +000F56r 1 7F F9 .dbyt $7ff9 +000F58r 1 7F FA .dbyt $7ffa +000F5Ar 1 7F FB .dbyt $7ffb +000F5Cr 1 7F FC .dbyt $7ffc +000F5Er 1 7F FD .dbyt $7ffd +000F60r 1 7F FE .dbyt $7ffe +000F62r 1 7F FF .dbyt $7fff +000F64r 1 80 00 .dbyt $8000 +000F66r 1 80 01 .dbyt $8001 +000F68r 1 80 02 .dbyt $8002 +000F6Ar 1 80 03 .dbyt $8003 +000F6Cr 1 80 04 .dbyt $8004 +000F6Er 1 80 05 .dbyt $8005 +000F70r 1 80 06 .dbyt $8006 +000F72r 1 80 07 .dbyt $8007 +000F74r 1 80 08 .dbyt $8008 +000F76r 1 80 09 .dbyt $8009 +000F78r 1 80 0A .dbyt $800a +000F7Ar 1 80 0B .dbyt $800b +000F7Cr 1 9F E1 .dbyt $9fe1 +000F7Er 1 9F E2 .dbyt $9fe2 +000F80r 1 9F E3 .dbyt $9fe3 +000F82r 1 9F E4 .dbyt $9fe4 +000F84r 1 9F E5 .dbyt $9fe5 +000F86r 1 9F E6 .dbyt $9fe6 +000F88r 1 9F E7 .dbyt $9fe7 +000F8Ar 1 9F E8 .dbyt $9fe8 +000F8Cr 1 9F E9 .dbyt $9fe9 +000F8Er 1 9F EA .dbyt $9fea +000F90r 1 9F EB .dbyt $9feb +000F92r 1 9F EC .dbyt $9fec +000F94r 1 9F ED .dbyt $9fed +000F96r 1 9F EE .dbyt $9fee +000F98r 1 9F EF .dbyt $9fef +000F9Ar 1 9F F0 .dbyt $9ff0 +000F9Cr 1 9F F1 .dbyt $9ff1 +000F9Er 1 9F F2 .dbyt $9ff2 +000FA0r 1 9F F3 .dbyt $9ff3 +000FA2r 1 9F F4 .dbyt $9ff4 +000FA4r 1 9F F5 .dbyt $9ff5 +000FA6r 1 9F F6 .dbyt $9ff6 +000FA8r 1 9F F7 .dbyt $9ff7 +000FAAr 1 9F F8 .dbyt $9ff8 +000FACr 1 9F F9 .dbyt $9ff9 +000FAEr 1 9F FA .dbyt $9ffa +000FB0r 1 9F FB .dbyt $9ffb +000FB2r 1 9F FC .dbyt $9ffc +000FB4r 1 9F FD .dbyt $9ffd +000FB6r 1 9F FE .dbyt $9ffe +000FB8r 1 9F FF .dbyt $9fff +000FBAr 1 A0 00 .dbyt $a000 +000FBCr 1 A0 01 .dbyt $a001 +000FBEr 1 A0 02 .dbyt $a002 +000FC0r 1 A0 03 .dbyt $a003 +000FC2r 1 A0 04 .dbyt $a004 +000FC4r 1 A0 05 .dbyt $a005 +000FC6r 1 A0 06 .dbyt $a006 +000FC8r 1 A0 07 .dbyt $a007 +000FCAr 1 A0 08 .dbyt $a008 +000FCCr 1 A0 09 .dbyt $a009 +000FCEr 1 A0 0A .dbyt $a00a +000FD0r 1 A0 0B .dbyt $a00b +000FD2r 1 A0 0C .dbyt $a00c +000FD4r 1 A0 0D .dbyt $a00d +000FD6r 1 A0 0E .dbyt $a00e +000FD8r 1 A0 0F .dbyt $a00f +000FDAr 1 AF E1 .dbyt $afe1 +000FDCr 1 AF E2 .dbyt $afe2 +000FDEr 1 AF E3 .dbyt $afe3 +000FE0r 1 AF E4 .dbyt $afe4 +000FE2r 1 AF E5 .dbyt $afe5 +000FE4r 1 AF E6 .dbyt $afe6 +000FE6r 1 AF E7 .dbyt $afe7 +000FE8r 1 AF E8 .dbyt $afe8 +000FEAr 1 AF E9 .dbyt $afe9 +000FECr 1 AF EA .dbyt $afea +000FEEr 1 AF EB .dbyt $afeb +000FF0r 1 AF EC .dbyt $afec +000FF2r 1 AF ED .dbyt $afed +000FF4r 1 AF EE .dbyt $afee +000FF6r 1 AF EF .dbyt $afef +000FF8r 1 AF F0 .dbyt $aff0 +000FFAr 1 AF F1 .dbyt $aff1 +000FFCr 1 AF F2 .dbyt $aff2 +000FFEr 1 AF F3 .dbyt $aff3 +001000r 1 AF F4 .dbyt $aff4 +001002r 1 AF F5 .dbyt $aff5 +001004r 1 AF F6 .dbyt $aff6 +001006r 1 AF F7 .dbyt $aff7 +001008r 1 AF F8 .dbyt $aff8 +00100Ar 1 AF F9 .dbyt $aff9 +00100Cr 1 AF FA .dbyt $affa +00100Er 1 AF FB .dbyt $affb +001010r 1 AF FC .dbyt $affc +001012r 1 AF FD .dbyt $affd +001014r 1 AF FE .dbyt $affe +001016r 1 AF FF .dbyt $afff +001018r 1 B0 00 .dbyt $b000 +00101Ar 1 B0 01 .dbyt $b001 +00101Cr 1 B0 02 .dbyt $b002 +00101Er 1 B0 03 .dbyt $b003 +001020r 1 B0 04 .dbyt $b004 +001022r 1 B0 05 .dbyt $b005 +001024r 1 B0 06 .dbyt $b006 +001026r 1 B0 07 .dbyt $b007 +001028r 1 B0 08 .dbyt $b008 +00102Ar 1 B0 09 .dbyt $b009 +00102Cr 1 B0 0A .dbyt $b00a +00102Er 1 B0 0B .dbyt $b00b +001030r 1 B0 0C .dbyt $b00c +001032r 1 B0 0D .dbyt $b00d +001034r 1 B0 0E .dbyt $b00e +001036r 1 B0 0F .dbyt $b00f +001038r 1 BF E1 .dbyt $bfe1 +00103Ar 1 BF E2 .dbyt $bfe2 +00103Cr 1 BF E3 .dbyt $bfe3 +00103Er 1 BF E4 .dbyt $bfe4 +001040r 1 BF E5 .dbyt $bfe5 +001042r 1 BF E6 .dbyt $bfe6 +001044r 1 BF E7 .dbyt $bfe7 +001046r 1 BF E8 .dbyt $bfe8 +001048r 1 BF E9 .dbyt $bfe9 +00104Ar 1 BF EA .dbyt $bfea +00104Cr 1 BF EB .dbyt $bfeb +00104Er 1 BF EC .dbyt $bfec +001050r 1 BF ED .dbyt $bfed +001052r 1 BF EE .dbyt $bfee +001054r 1 BF EF .dbyt $bfef +001056r 1 BF F0 .dbyt $bff0 +001058r 1 BF F1 .dbyt $bff1 +00105Ar 1 BF F2 .dbyt $bff2 +00105Cr 1 BF F3 .dbyt $bff3 +00105Er 1 BF F4 .dbyt $bff4 +001060r 1 BF F5 .dbyt $bff5 +001062r 1 BF F6 .dbyt $bff6 +001064r 1 BF F7 .dbyt $bff7 +001066r 1 BF F8 .dbyt $bff8 +001068r 1 BF F9 .dbyt $bff9 +00106Ar 1 BF FA .dbyt $bffa +00106Cr 1 BF FB .dbyt $bffb +00106Er 1 BF FC .dbyt $bffc +001070r 1 BF FD .dbyt $bffd +001072r 1 BF FE .dbyt $bffe +001074r 1 BF FF .dbyt $bfff +001076r 1 C0 00 .dbyt $c000 +001078r 1 C0 01 .dbyt $c001 +00107Ar 1 C0 02 .dbyt $c002 +00107Cr 1 C0 03 .dbyt $c003 +00107Er 1 C0 04 .dbyt $c004 +001080r 1 C0 05 .dbyt $c005 +001082r 1 C0 06 .dbyt $c006 +001084r 1 C0 07 .dbyt $c007 +001086r 1 C0 08 .dbyt $c008 +001088r 1 C0 09 .dbyt $c009 +00108Ar 1 C0 0A .dbyt $c00a +00108Cr 1 C0 0B .dbyt $c00b +00108Er 1 C0 0C .dbyt $c00c +001090r 1 C0 0D .dbyt $c00d +001092r 1 C0 0E .dbyt $c00e +001094r 1 C0 0F .dbyt $c00f +001096r 1 CF E1 .dbyt $cfe1 +001098r 1 CF E2 .dbyt $cfe2 +00109Ar 1 CF E3 .dbyt $cfe3 +00109Cr 1 CF E4 .dbyt $cfe4 +00109Er 1 CF E5 .dbyt $cfe5 +0010A0r 1 CF E6 .dbyt $cfe6 +0010A2r 1 CF E7 .dbyt $cfe7 +0010A4r 1 CF E8 .dbyt $cfe8 +0010A6r 1 CF E9 .dbyt $cfe9 +0010A8r 1 CF EA .dbyt $cfea +0010AAr 1 CF EB .dbyt $cfeb +0010ACr 1 CF EC .dbyt $cfec +0010AEr 1 CF ED .dbyt $cfed +0010B0r 1 CF EE .dbyt $cfee +0010B2r 1 CF EF .dbyt $cfef +0010B4r 1 CF F0 .dbyt $cff0 +0010B6r 1 CF F1 .dbyt $cff1 +0010B8r 1 CF F2 .dbyt $cff2 +0010BAr 1 CF F3 .dbyt $cff3 +0010BCr 1 CF F4 .dbyt $cff4 +0010BEr 1 CF F5 .dbyt $cff5 +0010C0r 1 CF F6 .dbyt $cff6 +0010C2r 1 CF F7 .dbyt $cff7 +0010C4r 1 CF F8 .dbyt $cff8 +0010C6r 1 CF F9 .dbyt $cff9 +0010C8r 1 CF FA .dbyt $cffa +0010CAr 1 CF FB .dbyt $cffb +0010CCr 1 CF FC .dbyt $cffc +0010CEr 1 CF FD .dbyt $cffd +0010D0r 1 CF FE .dbyt $cffe +0010D2r 1 CF FF .dbyt $cfff +0010D4r 1 D0 00 .dbyt $d000 +0010D6r 1 D0 01 .dbyt $d001 +0010D8r 1 D0 02 .dbyt $d002 +0010DAr 1 D0 03 .dbyt $d003 +0010DCr 1 D0 04 .dbyt $d004 +0010DEr 1 D0 05 .dbyt $d005 +0010E0r 1 D0 06 .dbyt $d006 +0010E2r 1 D0 07 .dbyt $d007 +0010E4r 1 D0 08 .dbyt $d008 +0010E6r 1 D0 09 .dbyt $d009 +0010E8r 1 D0 0A .dbyt $d00a +0010EAr 1 D0 0B .dbyt $d00b +0010ECr 1 D0 0C .dbyt $d00c +0010EEr 1 D0 0D .dbyt $d00d +0010F0r 1 D0 0E .dbyt $d00e +0010F2r 1 D0 0F .dbyt $d00f +0010F4r 1 DF E1 .dbyt $dfe1 +0010F6r 1 DF E2 .dbyt $dfe2 +0010F8r 1 DF E3 .dbyt $dfe3 +0010FAr 1 DF E4 .dbyt $dfe4 +0010FCr 1 DF E5 .dbyt $dfe5 +0010FEr 1 DF E6 .dbyt $dfe6 +001100r 1 DF E7 .dbyt $dfe7 +001102r 1 DF E8 .dbyt $dfe8 +001104r 1 DF E9 .dbyt $dfe9 +001106r 1 DF EA .dbyt $dfea +001108r 1 DF EB .dbyt $dfeb +00110Ar 1 DF EC .dbyt $dfec +00110Cr 1 DF ED .dbyt $dfed +00110Er 1 DF EE .dbyt $dfee +001110r 1 DF EF .dbyt $dfef +001112r 1 DF F0 .dbyt $dff0 +001114r 1 DF F1 .dbyt $dff1 +001116r 1 DF F2 .dbyt $dff2 +001118r 1 DF F3 .dbyt $dff3 +00111Ar 1 DF F4 .dbyt $dff4 +00111Cr 1 DF F5 .dbyt $dff5 +00111Er 1 DF F6 .dbyt $dff6 +001120r 1 DF F7 .dbyt $dff7 +001122r 1 DF F8 .dbyt $dff8 +001124r 1 DF F9 .dbyt $dff9 +001126r 1 DF FA .dbyt $dffa +001128r 1 DF FB .dbyt $dffb +00112Ar 1 DF FC .dbyt $dffc +00112Cr 1 DF FD .dbyt $dffd +00112Er 1 DF FE .dbyt $dffe +001130r 1 DF FF .dbyt $dfff +001132r 1 E0 00 .dbyt $e000 +001134r 1 E0 01 .dbyt $e001 +001136r 1 E0 02 .dbyt $e002 +001138r 1 E0 03 .dbyt $e003 +00113Ar 1 E0 04 .dbyt $e004 +00113Cr 1 E0 05 .dbyt $e005 +00113Er 1 E0 06 .dbyt $e006 +001140r 1 E0 07 .dbyt $e007 +001142r 1 E0 08 .dbyt $e008 +001144r 1 E0 09 .dbyt $e009 +001146r 1 E0 0A .dbyt $e00a +001148r 1 E0 0B .dbyt $e00b +00114Ar 1 E0 0C .dbyt $e00c +00114Cr 1 E0 0D .dbyt $e00d +00114Er 1 E0 0E .dbyt $e00e +001150r 1 E0 0F .dbyt $e00f +001152r 1 EF E1 .dbyt $efe1 +001154r 1 EF E2 .dbyt $efe2 +001156r 1 EF E3 .dbyt $efe3 +001158r 1 EF E4 .dbyt $efe4 +00115Ar 1 EF E5 .dbyt $efe5 +00115Cr 1 EF E6 .dbyt $efe6 +00115Er 1 EF E7 .dbyt $efe7 +001160r 1 EF E8 .dbyt $efe8 +001162r 1 EF E9 .dbyt $efe9 +001164r 1 EF EA .dbyt $efea +001166r 1 EF EB .dbyt $efeb +001168r 1 EF EC .dbyt $efec +00116Ar 1 EF ED .dbyt $efed +00116Cr 1 EF EE .dbyt $efee +00116Er 1 EF EF .dbyt $efef +001170r 1 EF F0 .dbyt $eff0 +001172r 1 EF F1 .dbyt $eff1 +001174r 1 EF F2 .dbyt $eff2 +001176r 1 EF F3 .dbyt $eff3 +001178r 1 EF F4 .dbyt $eff4 +00117Ar 1 EF F5 .dbyt $eff5 +00117Cr 1 EF F6 .dbyt $eff6 +00117Er 1 EF F7 .dbyt $eff7 +001180r 1 EF F8 .dbyt $eff8 +001182r 1 EF F9 .dbyt $eff9 +001184r 1 EF FA .dbyt $effa +001186r 1 EF FB .dbyt $effb +001188r 1 EF FC .dbyt $effc +00118Ar 1 EF FD .dbyt $effd +00118Cr 1 EF FE .dbyt $effe +00118Er 1 EF FF .dbyt $efff +001190r 1 F0 00 .dbyt $f000 +001192r 1 F0 01 .dbyt $f001 +001194r 1 F0 02 .dbyt $f002 +001196r 1 F0 03 .dbyt $f003 +001198r 1 F0 04 .dbyt $f004 +00119Ar 1 F0 05 .dbyt $f005 +00119Cr 1 F0 06 .dbyt $f006 +00119Er 1 F0 07 .dbyt $f007 +0011A0r 1 F0 08 .dbyt $f008 +0011A2r 1 F0 09 .dbyt $f009 +0011A4r 1 F0 0A .dbyt $f00a +0011A6r 1 F0 0B .dbyt $f00b +0011A8r 1 F0 0C .dbyt $f00c +0011AAr 1 F0 0D .dbyt $f00d +0011ACr 1 F0 0E .dbyt $f00e +0011AEr 1 F0 0F .dbyt $f00f +0011B0r 1 FF E1 .dbyt $ffe1 +0011B2r 1 FF E2 .dbyt $ffe2 +0011B4r 1 FF E3 .dbyt $ffe3 +0011B6r 1 FF E4 .dbyt $ffe4 +0011B8r 1 FF E5 .dbyt $ffe5 +0011BAr 1 FF E6 .dbyt $ffe6 +0011BCr 1 FF E7 .dbyt $ffe7 +0011BEr 1 FF E8 .dbyt $ffe8 +0011C0r 1 FF E9 .dbyt $ffe9 +0011C2r 1 FF EA .dbyt $ffea +0011C4r 1 FF EB .dbyt $ffeb +0011C6r 1 FF EC .dbyt $ffec +0011C8r 1 FF ED .dbyt $ffed +0011CAr 1 FF EE .dbyt $ffee +0011CCr 1 FF EF .dbyt $ffef +0011CEr 1 FF F0 .dbyt $fff0 +0011D0r 1 FF F1 .dbyt $fff1 +0011D2r 1 FF F2 .dbyt $fff2 +0011D4r 1 FF F3 .dbyt $fff3 +0011D6r 1 FF F4 .dbyt $fff4 +0011D8r 1 FF F5 .dbyt $fff5 +0011DAr 1 FF F6 .dbyt $fff6 +0011DCr 1 FF F7 .dbyt $fff7 +0011DEr 1 FF F8 .dbyt $fff8 +0011E0r 1 FF F9 .dbyt $fff9 +0011E2r 1 FF FA .dbyt $fffa +0011E4r 1 FF FB .dbyt $fffb +0011E6r 1 FF FC .dbyt $fffc +0011E8r 1 FF FD .dbyt $fffd +0011EAr 1 FF FE .dbyt $fffe +0011ECr 1 FF FF .dbyt $ffff 0011EEr 1 -0011EEr 1 ; 4-digit hex values, uppercase -0011EEr 1 00 00 .dbyt $0000 -0011F0r 1 00 01 .dbyt $0001 -0011F2r 1 00 02 .dbyt $0002 -0011F4r 1 00 03 .dbyt $0003 -0011F6r 1 00 04 .dbyt $0004 -0011F8r 1 00 05 .dbyt $0005 -0011FAr 1 00 06 .dbyt $0006 -0011FCr 1 00 07 .dbyt $0007 -0011FEr 1 00 08 .dbyt $0008 -001200r 1 00 09 .dbyt $0009 -001202r 1 00 0A .dbyt $000A -001204r 1 00 0B .dbyt $000B -001206r 1 00 0C .dbyt $000C -001208r 1 00 0D .dbyt $000D -00120Ar 1 00 0E .dbyt $000E -00120Cr 1 00 0F .dbyt $000F -00120Er 1 00 10 .dbyt $0010 -001210r 1 00 11 .dbyt $0011 -001212r 1 00 12 .dbyt $0012 -001214r 1 00 13 .dbyt $0013 -001216r 1 00 70 .dbyt $0070 -001218r 1 00 71 .dbyt $0071 -00121Ar 1 00 72 .dbyt $0072 -00121Cr 1 00 73 .dbyt $0073 -00121Er 1 00 74 .dbyt $0074 -001220r 1 00 75 .dbyt $0075 -001222r 1 00 76 .dbyt $0076 -001224r 1 00 77 .dbyt $0077 -001226r 1 00 78 .dbyt $0078 -001228r 1 00 79 .dbyt $0079 -00122Ar 1 00 7A .dbyt $007A -00122Cr 1 00 7B .dbyt $007B -00122Er 1 00 7C .dbyt $007C -001230r 1 00 7D .dbyt $007D -001232r 1 00 7E .dbyt $007E -001234r 1 00 7F .dbyt $007F -001236r 1 00 80 .dbyt $0080 -001238r 1 00 81 .dbyt $0081 -00123Ar 1 00 82 .dbyt $0082 -00123Cr 1 00 83 .dbyt $0083 -00123Er 1 00 84 .dbyt $0084 -001240r 1 00 85 .dbyt $0085 -001242r 1 00 86 .dbyt $0086 -001244r 1 00 F0 .dbyt $00F0 -001246r 1 00 F1 .dbyt $00F1 -001248r 1 00 F2 .dbyt $00F2 -00124Ar 1 00 F3 .dbyt $00F3 -00124Cr 1 00 F4 .dbyt $00F4 -00124Er 1 00 F5 .dbyt $00F5 -001250r 1 00 F6 .dbyt $00F6 -001252r 1 00 F7 .dbyt $00F7 -001254r 1 00 F8 .dbyt $00F8 -001256r 1 00 F9 .dbyt $00F9 -001258r 1 00 FA .dbyt $00FA -00125Ar 1 00 FB .dbyt $00FB -00125Cr 1 00 FC .dbyt $00FC -00125Er 1 00 FD .dbyt $00FD -001260r 1 00 FE .dbyt $00FE -001262r 1 00 FF .dbyt $00FF -001264r 1 01 00 .dbyt $0100 -001266r 1 01 01 .dbyt $0101 -001268r 1 01 02 .dbyt $0102 -00126Ar 1 01 03 .dbyt $0103 -00126Cr 1 0F D2 .dbyt $0FD2 -00126Er 1 0F D3 .dbyt $0FD3 -001270r 1 0F D4 .dbyt $0FD4 -001272r 1 0F D5 .dbyt $0FD5 -001274r 1 0F D6 .dbyt $0FD6 -001276r 1 0F D7 .dbyt $0FD7 -001278r 1 0F D8 .dbyt $0FD8 -00127Ar 1 0F D9 .dbyt $0FD9 -00127Cr 1 0F DA .dbyt $0FDA -00127Er 1 0F DB .dbyt $0FDB -001280r 1 0F DC .dbyt $0FDC -001282r 1 0F DD .dbyt $0FDD -001284r 1 0F DE .dbyt $0FDE -001286r 1 0F DF .dbyt $0FDF -001288r 1 0F E0 .dbyt $0FE0 -00128Ar 1 0F E1 .dbyt $0FE1 -00128Cr 1 0F E2 .dbyt $0FE2 -00128Er 1 0F E3 .dbyt $0FE3 -001290r 1 0F E4 .dbyt $0FE4 -001292r 1 0F E5 .dbyt $0FE5 -001294r 1 0F E6 .dbyt $0FE6 -001296r 1 0F E7 .dbyt $0FE7 -001298r 1 0F E8 .dbyt $0FE8 -00129Ar 1 0F E9 .dbyt $0FE9 -00129Cr 1 0F EA .dbyt $0FEA -00129Er 1 0F EB .dbyt $0FEB -0012A0r 1 0F EC .dbyt $0FEC -0012A2r 1 0F ED .dbyt $0FED -0012A4r 1 0F EE .dbyt $0FEE -0012A6r 1 0F EF .dbyt $0FEF -0012A8r 1 0F F0 .dbyt $0FF0 -0012AAr 1 0F F1 .dbyt $0FF1 -0012ACr 1 0F F2 .dbyt $0FF2 -0012AEr 1 0F F3 .dbyt $0FF3 -0012B0r 1 0F F4 .dbyt $0FF4 -0012B2r 1 0F F5 .dbyt $0FF5 -0012B4r 1 0F F6 .dbyt $0FF6 -0012B6r 1 0F F7 .dbyt $0FF7 -0012B8r 1 0F F8 .dbyt $0FF8 -0012BAr 1 0F F9 .dbyt $0FF9 -0012BCr 1 0F FA .dbyt $0FFA -0012BEr 1 0F FB .dbyt $0FFB -0012C0r 1 0F FC .dbyt $0FFC -0012C2r 1 0F FD .dbyt $0FFD -0012C4r 1 0F FE .dbyt $0FFE -0012C6r 1 0F FF .dbyt $0FFF -0012C8r 1 10 00 .dbyt $1000 -0012CAr 1 10 01 .dbyt $1001 -0012CCr 1 10 02 .dbyt $1002 -0012CEr 1 10 03 .dbyt $1003 -0012D0r 1 10 04 .dbyt $1004 -0012D2r 1 10 05 .dbyt $1005 -0012D4r 1 10 06 .dbyt $1006 -0012D6r 1 10 07 .dbyt $1007 -0012D8r 1 10 08 .dbyt $1008 -0012DAr 1 7F F0 .dbyt $7FF0 -0012DCr 1 7F F1 .dbyt $7FF1 -0012DEr 1 7F F2 .dbyt $7FF2 -0012E0r 1 7F F3 .dbyt $7FF3 -0012E2r 1 7F F4 .dbyt $7FF4 -0012E4r 1 7F F5 .dbyt $7FF5 -0012E6r 1 7F F6 .dbyt $7FF6 -0012E8r 1 7F F7 .dbyt $7FF7 -0012EAr 1 7F F8 .dbyt $7FF8 -0012ECr 1 7F F9 .dbyt $7FF9 -0012EEr 1 7F FA .dbyt $7FFA -0012F0r 1 7F FB .dbyt $7FFB -0012F2r 1 7F FC .dbyt $7FFC -0012F4r 1 7F FD .dbyt $7FFD -0012F6r 1 7F FE .dbyt $7FFE -0012F8r 1 7F FF .dbyt $7FFF -0012FAr 1 80 00 .dbyt $8000 -0012FCr 1 80 01 .dbyt $8001 -0012FEr 1 80 02 .dbyt $8002 -001300r 1 80 03 .dbyt $8003 -001302r 1 80 04 .dbyt $8004 -001304r 1 80 05 .dbyt $8005 -001306r 1 80 06 .dbyt $8006 -001308r 1 80 07 .dbyt $8007 -00130Ar 1 80 08 .dbyt $8008 -00130Cr 1 80 09 .dbyt $8009 -00130Er 1 80 0A .dbyt $800A -001310r 1 80 0B .dbyt $800B -001312r 1 9F E1 .dbyt $9FE1 -001314r 1 9F E2 .dbyt $9FE2 -001316r 1 9F E3 .dbyt $9FE3 -001318r 1 9F E4 .dbyt $9FE4 -00131Ar 1 9F E5 .dbyt $9FE5 -00131Cr 1 9F E6 .dbyt $9FE6 -00131Er 1 9F E7 .dbyt $9FE7 -001320r 1 9F E8 .dbyt $9FE8 -001322r 1 9F E9 .dbyt $9FE9 -001324r 1 9F EA .dbyt $9FEA -001326r 1 9F EB .dbyt $9FEB -001328r 1 9F EC .dbyt $9FEC -00132Ar 1 9F ED .dbyt $9FED -00132Cr 1 9F EE .dbyt $9FEE -00132Er 1 9F EF .dbyt $9FEF -001330r 1 9F F0 .dbyt $9FF0 -001332r 1 9F F1 .dbyt $9FF1 -001334r 1 9F F2 .dbyt $9FF2 -001336r 1 9F F3 .dbyt $9FF3 -001338r 1 9F F4 .dbyt $9FF4 -00133Ar 1 9F F5 .dbyt $9FF5 -00133Cr 1 9F F6 .dbyt $9FF6 -00133Er 1 9F F7 .dbyt $9FF7 -001340r 1 9F F8 .dbyt $9FF8 -001342r 1 9F F9 .dbyt $9FF9 -001344r 1 9F FA .dbyt $9FFA -001346r 1 9F FB .dbyt $9FFB -001348r 1 9F FC .dbyt $9FFC -00134Ar 1 9F FD .dbyt $9FFD -00134Cr 1 9F FE .dbyt $9FFE -00134Er 1 9F FF .dbyt $9FFF -001350r 1 A0 00 .dbyt $A000 -001352r 1 A0 01 .dbyt $A001 -001354r 1 A0 02 .dbyt $A002 -001356r 1 A0 03 .dbyt $A003 -001358r 1 A0 04 .dbyt $A004 -00135Ar 1 A0 05 .dbyt $A005 -00135Cr 1 A0 06 .dbyt $A006 -00135Er 1 A0 07 .dbyt $A007 -001360r 1 A0 08 .dbyt $A008 -001362r 1 A0 09 .dbyt $A009 -001364r 1 A0 0A .dbyt $A00A -001366r 1 A0 0B .dbyt $A00B -001368r 1 A0 0C .dbyt $A00C -00136Ar 1 A0 0D .dbyt $A00D -00136Cr 1 A0 0E .dbyt $A00E -00136Er 1 A0 0F .dbyt $A00F -001370r 1 AF E1 .dbyt $AFE1 -001372r 1 AF E2 .dbyt $AFE2 -001374r 1 AF E3 .dbyt $AFE3 -001376r 1 AF E4 .dbyt $AFE4 -001378r 1 AF E5 .dbyt $AFE5 -00137Ar 1 AF E6 .dbyt $AFE6 -00137Cr 1 AF E7 .dbyt $AFE7 -00137Er 1 AF E8 .dbyt $AFE8 -001380r 1 AF E9 .dbyt $AFE9 -001382r 1 AF EA .dbyt $AFEA -001384r 1 AF EB .dbyt $AFEB -001386r 1 AF EC .dbyt $AFEC -001388r 1 AF ED .dbyt $AFED -00138Ar 1 AF EE .dbyt $AFEE -00138Cr 1 AF EF .dbyt $AFEF -00138Er 1 AF F0 .dbyt $AFF0 -001390r 1 AF F1 .dbyt $AFF1 -001392r 1 AF F2 .dbyt $AFF2 -001394r 1 AF F3 .dbyt $AFF3 -001396r 1 AF F4 .dbyt $AFF4 -001398r 1 AF F5 .dbyt $AFF5 -00139Ar 1 AF F6 .dbyt $AFF6 -00139Cr 1 AF F7 .dbyt $AFF7 -00139Er 1 AF F8 .dbyt $AFF8 -0013A0r 1 AF F9 .dbyt $AFF9 -0013A2r 1 AF FA .dbyt $AFFA -0013A4r 1 AF FB .dbyt $AFFB -0013A6r 1 AF FC .dbyt $AFFC -0013A8r 1 AF FD .dbyt $AFFD -0013AAr 1 AF FE .dbyt $AFFE -0013ACr 1 AF FF .dbyt $AFFF -0013AEr 1 B0 00 .dbyt $B000 -0013B0r 1 B0 01 .dbyt $B001 -0013B2r 1 B0 02 .dbyt $B002 -0013B4r 1 B0 03 .dbyt $B003 -0013B6r 1 B0 04 .dbyt $B004 -0013B8r 1 B0 05 .dbyt $B005 -0013BAr 1 B0 06 .dbyt $B006 -0013BCr 1 B0 07 .dbyt $B007 -0013BEr 1 B0 08 .dbyt $B008 -0013C0r 1 B0 09 .dbyt $B009 -0013C2r 1 B0 0A .dbyt $B00A -0013C4r 1 B0 0B .dbyt $B00B -0013C6r 1 B0 0C .dbyt $B00C -0013C8r 1 B0 0D .dbyt $B00D -0013CAr 1 B0 0E .dbyt $B00E -0013CCr 1 B0 0F .dbyt $B00F -0013CEr 1 BF E1 .dbyt $BFE1 -0013D0r 1 BF E2 .dbyt $BFE2 -0013D2r 1 BF E3 .dbyt $BFE3 -0013D4r 1 BF E4 .dbyt $BFE4 -0013D6r 1 BF E5 .dbyt $BFE5 -0013D8r 1 BF E6 .dbyt $BFE6 -0013DAr 1 BF E7 .dbyt $BFE7 -0013DCr 1 BF E8 .dbyt $BFE8 -0013DEr 1 BF E9 .dbyt $BFE9 -0013E0r 1 BF EA .dbyt $BFEA -0013E2r 1 BF EB .dbyt $BFEB -0013E4r 1 BF EC .dbyt $BFEC -0013E6r 1 BF ED .dbyt $BFED -0013E8r 1 BF EE .dbyt $BFEE -0013EAr 1 BF EF .dbyt $BFEF -0013ECr 1 BF F0 .dbyt $BFF0 -0013EEr 1 BF F1 .dbyt $BFF1 -0013F0r 1 BF F2 .dbyt $BFF2 -0013F2r 1 BF F3 .dbyt $BFF3 -0013F4r 1 BF F4 .dbyt $BFF4 -0013F6r 1 BF F5 .dbyt $BFF5 -0013F8r 1 BF F6 .dbyt $BFF6 -0013FAr 1 BF F7 .dbyt $BFF7 -0013FCr 1 BF F8 .dbyt $BFF8 -0013FEr 1 BF F9 .dbyt $BFF9 -001400r 1 BF FA .dbyt $BFFA -001402r 1 BF FB .dbyt $BFFB -001404r 1 BF FC .dbyt $BFFC -001406r 1 BF FD .dbyt $BFFD -001408r 1 BF FE .dbyt $BFFE -00140Ar 1 BF FF .dbyt $BFFF -00140Cr 1 C0 00 .dbyt $C000 -00140Er 1 C0 01 .dbyt $C001 -001410r 1 C0 02 .dbyt $C002 -001412r 1 C0 03 .dbyt $C003 -001414r 1 C0 04 .dbyt $C004 -001416r 1 C0 05 .dbyt $C005 -001418r 1 C0 06 .dbyt $C006 -00141Ar 1 C0 07 .dbyt $C007 -00141Cr 1 C0 08 .dbyt $C008 -00141Er 1 C0 09 .dbyt $C009 -001420r 1 C0 0A .dbyt $C00A -001422r 1 C0 0B .dbyt $C00B -001424r 1 C0 0C .dbyt $C00C -001426r 1 C0 0D .dbyt $C00D -001428r 1 C0 0E .dbyt $C00E -00142Ar 1 C0 0F .dbyt $C00F -00142Cr 1 CF E1 .dbyt $CFE1 -00142Er 1 CF E2 .dbyt $CFE2 -001430r 1 CF E3 .dbyt $CFE3 -001432r 1 CF E4 .dbyt $CFE4 -001434r 1 CF E5 .dbyt $CFE5 -001436r 1 CF E6 .dbyt $CFE6 -001438r 1 CF E7 .dbyt $CFE7 -00143Ar 1 CF E8 .dbyt $CFE8 -00143Cr 1 CF E9 .dbyt $CFE9 -00143Er 1 CF EA .dbyt $CFEA -001440r 1 CF EB .dbyt $CFEB -001442r 1 CF EC .dbyt $CFEC -001444r 1 CF ED .dbyt $CFED -001446r 1 CF EE .dbyt $CFEE -001448r 1 CF EF .dbyt $CFEF -00144Ar 1 CF F0 .dbyt $CFF0 -00144Cr 1 CF F1 .dbyt $CFF1 -00144Er 1 CF F2 .dbyt $CFF2 -001450r 1 CF F3 .dbyt $CFF3 -001452r 1 CF F4 .dbyt $CFF4 -001454r 1 CF F5 .dbyt $CFF5 -001456r 1 CF F6 .dbyt $CFF6 -001458r 1 CF F7 .dbyt $CFF7 -00145Ar 1 CF F8 .dbyt $CFF8 -00145Cr 1 CF F9 .dbyt $CFF9 -00145Er 1 CF FA .dbyt $CFFA -001460r 1 CF FB .dbyt $CFFB -001462r 1 CF FC .dbyt $CFFC -001464r 1 CF FD .dbyt $CFFD -001466r 1 CF FE .dbyt $CFFE -001468r 1 CF FF .dbyt $CFFF -00146Ar 1 D0 00 .dbyt $D000 -00146Cr 1 D0 01 .dbyt $D001 -00146Er 1 D0 02 .dbyt $D002 -001470r 1 D0 03 .dbyt $D003 -001472r 1 D0 04 .dbyt $D004 -001474r 1 D0 05 .dbyt $D005 -001476r 1 D0 06 .dbyt $D006 -001478r 1 D0 07 .dbyt $D007 -00147Ar 1 D0 08 .dbyt $D008 -00147Cr 1 D0 09 .dbyt $D009 -00147Er 1 D0 0A .dbyt $D00A -001480r 1 D0 0B .dbyt $D00B -001482r 1 D0 0C .dbyt $D00C -001484r 1 D0 0D .dbyt $D00D -001486r 1 D0 0E .dbyt $D00E -001488r 1 D0 0F .dbyt $D00F -00148Ar 1 DF E1 .dbyt $DFE1 -00148Cr 1 DF E2 .dbyt $DFE2 -00148Er 1 DF E3 .dbyt $DFE3 -001490r 1 DF E4 .dbyt $DFE4 -001492r 1 DF E5 .dbyt $DFE5 -001494r 1 DF E6 .dbyt $DFE6 -001496r 1 DF E7 .dbyt $DFE7 -001498r 1 DF E8 .dbyt $DFE8 -00149Ar 1 DF E9 .dbyt $DFE9 -00149Cr 1 DF EA .dbyt $DFEA -00149Er 1 DF EB .dbyt $DFEB -0014A0r 1 DF EC .dbyt $DFEC -0014A2r 1 DF ED .dbyt $DFED -0014A4r 1 DF EE .dbyt $DFEE -0014A6r 1 DF EF .dbyt $DFEF -0014A8r 1 DF F0 .dbyt $DFF0 -0014AAr 1 DF F1 .dbyt $DFF1 -0014ACr 1 DF F2 .dbyt $DFF2 -0014AEr 1 DF F3 .dbyt $DFF3 -0014B0r 1 DF F4 .dbyt $DFF4 -0014B2r 1 DF F5 .dbyt $DFF5 -0014B4r 1 DF F6 .dbyt $DFF6 -0014B6r 1 DF F7 .dbyt $DFF7 -0014B8r 1 DF F8 .dbyt $DFF8 -0014BAr 1 DF F9 .dbyt $DFF9 -0014BCr 1 DF FA .dbyt $DFFA -0014BEr 1 DF FB .dbyt $DFFB -0014C0r 1 DF FC .dbyt $DFFC -0014C2r 1 DF FD .dbyt $DFFD -0014C4r 1 DF FE .dbyt $DFFE -0014C6r 1 DF FF .dbyt $DFFF -0014C8r 1 E0 00 .dbyt $E000 -0014CAr 1 E0 01 .dbyt $E001 -0014CCr 1 E0 02 .dbyt $E002 -0014CEr 1 E0 03 .dbyt $E003 -0014D0r 1 E0 04 .dbyt $E004 -0014D2r 1 E0 05 .dbyt $E005 -0014D4r 1 E0 06 .dbyt $E006 -0014D6r 1 E0 07 .dbyt $E007 -0014D8r 1 E0 08 .dbyt $E008 -0014DAr 1 E0 09 .dbyt $E009 -0014DCr 1 E0 0A .dbyt $E00A -0014DEr 1 E0 0B .dbyt $E00B -0014E0r 1 E0 0C .dbyt $E00C -0014E2r 1 E0 0D .dbyt $E00D -0014E4r 1 E0 0E .dbyt $E00E -0014E6r 1 E0 0F .dbyt $E00F -0014E8r 1 EF E1 .dbyt $EFE1 -0014EAr 1 EF E2 .dbyt $EFE2 -0014ECr 1 EF E3 .dbyt $EFE3 -0014EEr 1 EF E4 .dbyt $EFE4 -0014F0r 1 EF E5 .dbyt $EFE5 -0014F2r 1 EF E6 .dbyt $EFE6 -0014F4r 1 EF E7 .dbyt $EFE7 -0014F6r 1 EF E8 .dbyt $EFE8 -0014F8r 1 EF E9 .dbyt $EFE9 -0014FAr 1 EF EA .dbyt $EFEA -0014FCr 1 EF EB .dbyt $EFEB -0014FEr 1 EF EC .dbyt $EFEC -001500r 1 EF ED .dbyt $EFED -001502r 1 EF EE .dbyt $EFEE -001504r 1 EF EF .dbyt $EFEF -001506r 1 EF F0 .dbyt $EFF0 -001508r 1 EF F1 .dbyt $EFF1 -00150Ar 1 EF F2 .dbyt $EFF2 -00150Cr 1 EF F3 .dbyt $EFF3 -00150Er 1 EF F4 .dbyt $EFF4 -001510r 1 EF F5 .dbyt $EFF5 -001512r 1 EF F6 .dbyt $EFF6 -001514r 1 EF F7 .dbyt $EFF7 -001516r 1 EF F8 .dbyt $EFF8 -001518r 1 EF F9 .dbyt $EFF9 -00151Ar 1 EF FA .dbyt $EFFA -00151Cr 1 EF FB .dbyt $EFFB -00151Er 1 EF FC .dbyt $EFFC -001520r 1 EF FD .dbyt $EFFD -001522r 1 EF FE .dbyt $EFFE -001524r 1 EF FF .dbyt $EFFF -001526r 1 F0 00 .dbyt $F000 -001528r 1 F0 01 .dbyt $F001 -00152Ar 1 F0 02 .dbyt $F002 -00152Cr 1 F0 03 .dbyt $F003 -00152Er 1 F0 04 .dbyt $F004 -001530r 1 F0 05 .dbyt $F005 -001532r 1 F0 06 .dbyt $F006 -001534r 1 F0 07 .dbyt $F007 -001536r 1 F0 08 .dbyt $F008 -001538r 1 F0 09 .dbyt $F009 -00153Ar 1 F0 0A .dbyt $F00A -00153Cr 1 F0 0B .dbyt $F00B -00153Er 1 F0 0C .dbyt $F00C -001540r 1 F0 0D .dbyt $F00D -001542r 1 F0 0E .dbyt $F00E -001544r 1 F0 0F .dbyt $F00F -001546r 1 FF E1 .dbyt $FFE1 -001548r 1 FF E2 .dbyt $FFE2 -00154Ar 1 FF E3 .dbyt $FFE3 -00154Cr 1 FF E4 .dbyt $FFE4 -00154Er 1 FF E5 .dbyt $FFE5 -001550r 1 FF E6 .dbyt $FFE6 -001552r 1 FF E7 .dbyt $FFE7 -001554r 1 FF E8 .dbyt $FFE8 -001556r 1 FF E9 .dbyt $FFE9 -001558r 1 FF EA .dbyt $FFEA -00155Ar 1 FF EB .dbyt $FFEB -00155Cr 1 FF EC .dbyt $FFEC -00155Er 1 FF ED .dbyt $FFED -001560r 1 FF EE .dbyt $FFEE -001562r 1 FF EF .dbyt $FFEF -001564r 1 FF F0 .dbyt $FFF0 -001566r 1 FF F1 .dbyt $FFF1 -001568r 1 FF F2 .dbyt $FFF2 -00156Ar 1 FF F3 .dbyt $FFF3 -00156Cr 1 FF F4 .dbyt $FFF4 -00156Er 1 FF F5 .dbyt $FFF5 -001570r 1 FF F6 .dbyt $FFF6 -001572r 1 FF F7 .dbyt $FFF7 -001574r 1 FF F8 .dbyt $FFF8 -001576r 1 FF F9 .dbyt $FFF9 -001578r 1 FF FA .dbyt $FFFA -00157Ar 1 FF FB .dbyt $FFFB -00157Cr 1 FF FC .dbyt $FFFC -00157Er 1 FF FD .dbyt $FFFD -001580r 1 FF FE .dbyt $FFFE -001582r 1 FF FF .dbyt $FFFF +0011EEr 1 ; 4-digit hex values, uppercase +0011EEr 1 00 00 .dbyt $0000 +0011F0r 1 00 01 .dbyt $0001 +0011F2r 1 00 02 .dbyt $0002 +0011F4r 1 00 03 .dbyt $0003 +0011F6r 1 00 04 .dbyt $0004 +0011F8r 1 00 05 .dbyt $0005 +0011FAr 1 00 06 .dbyt $0006 +0011FCr 1 00 07 .dbyt $0007 +0011FEr 1 00 08 .dbyt $0008 +001200r 1 00 09 .dbyt $0009 +001202r 1 00 0A .dbyt $000A +001204r 1 00 0B .dbyt $000B +001206r 1 00 0C .dbyt $000C +001208r 1 00 0D .dbyt $000D +00120Ar 1 00 0E .dbyt $000E +00120Cr 1 00 0F .dbyt $000F +00120Er 1 00 10 .dbyt $0010 +001210r 1 00 11 .dbyt $0011 +001212r 1 00 12 .dbyt $0012 +001214r 1 00 13 .dbyt $0013 +001216r 1 00 70 .dbyt $0070 +001218r 1 00 71 .dbyt $0071 +00121Ar 1 00 72 .dbyt $0072 +00121Cr 1 00 73 .dbyt $0073 +00121Er 1 00 74 .dbyt $0074 +001220r 1 00 75 .dbyt $0075 +001222r 1 00 76 .dbyt $0076 +001224r 1 00 77 .dbyt $0077 +001226r 1 00 78 .dbyt $0078 +001228r 1 00 79 .dbyt $0079 +00122Ar 1 00 7A .dbyt $007A +00122Cr 1 00 7B .dbyt $007B +00122Er 1 00 7C .dbyt $007C +001230r 1 00 7D .dbyt $007D +001232r 1 00 7E .dbyt $007E +001234r 1 00 7F .dbyt $007F +001236r 1 00 80 .dbyt $0080 +001238r 1 00 81 .dbyt $0081 +00123Ar 1 00 82 .dbyt $0082 +00123Cr 1 00 83 .dbyt $0083 +00123Er 1 00 84 .dbyt $0084 +001240r 1 00 85 .dbyt $0085 +001242r 1 00 86 .dbyt $0086 +001244r 1 00 F0 .dbyt $00F0 +001246r 1 00 F1 .dbyt $00F1 +001248r 1 00 F2 .dbyt $00F2 +00124Ar 1 00 F3 .dbyt $00F3 +00124Cr 1 00 F4 .dbyt $00F4 +00124Er 1 00 F5 .dbyt $00F5 +001250r 1 00 F6 .dbyt $00F6 +001252r 1 00 F7 .dbyt $00F7 +001254r 1 00 F8 .dbyt $00F8 +001256r 1 00 F9 .dbyt $00F9 +001258r 1 00 FA .dbyt $00FA +00125Ar 1 00 FB .dbyt $00FB +00125Cr 1 00 FC .dbyt $00FC +00125Er 1 00 FD .dbyt $00FD +001260r 1 00 FE .dbyt $00FE +001262r 1 00 FF .dbyt $00FF +001264r 1 01 00 .dbyt $0100 +001266r 1 01 01 .dbyt $0101 +001268r 1 01 02 .dbyt $0102 +00126Ar 1 01 03 .dbyt $0103 +00126Cr 1 0F D2 .dbyt $0FD2 +00126Er 1 0F D3 .dbyt $0FD3 +001270r 1 0F D4 .dbyt $0FD4 +001272r 1 0F D5 .dbyt $0FD5 +001274r 1 0F D6 .dbyt $0FD6 +001276r 1 0F D7 .dbyt $0FD7 +001278r 1 0F D8 .dbyt $0FD8 +00127Ar 1 0F D9 .dbyt $0FD9 +00127Cr 1 0F DA .dbyt $0FDA +00127Er 1 0F DB .dbyt $0FDB +001280r 1 0F DC .dbyt $0FDC +001282r 1 0F DD .dbyt $0FDD +001284r 1 0F DE .dbyt $0FDE +001286r 1 0F DF .dbyt $0FDF +001288r 1 0F E0 .dbyt $0FE0 +00128Ar 1 0F E1 .dbyt $0FE1 +00128Cr 1 0F E2 .dbyt $0FE2 +00128Er 1 0F E3 .dbyt $0FE3 +001290r 1 0F E4 .dbyt $0FE4 +001292r 1 0F E5 .dbyt $0FE5 +001294r 1 0F E6 .dbyt $0FE6 +001296r 1 0F E7 .dbyt $0FE7 +001298r 1 0F E8 .dbyt $0FE8 +00129Ar 1 0F E9 .dbyt $0FE9 +00129Cr 1 0F EA .dbyt $0FEA +00129Er 1 0F EB .dbyt $0FEB +0012A0r 1 0F EC .dbyt $0FEC +0012A2r 1 0F ED .dbyt $0FED +0012A4r 1 0F EE .dbyt $0FEE +0012A6r 1 0F EF .dbyt $0FEF +0012A8r 1 0F F0 .dbyt $0FF0 +0012AAr 1 0F F1 .dbyt $0FF1 +0012ACr 1 0F F2 .dbyt $0FF2 +0012AEr 1 0F F3 .dbyt $0FF3 +0012B0r 1 0F F4 .dbyt $0FF4 +0012B2r 1 0F F5 .dbyt $0FF5 +0012B4r 1 0F F6 .dbyt $0FF6 +0012B6r 1 0F F7 .dbyt $0FF7 +0012B8r 1 0F F8 .dbyt $0FF8 +0012BAr 1 0F F9 .dbyt $0FF9 +0012BCr 1 0F FA .dbyt $0FFA +0012BEr 1 0F FB .dbyt $0FFB +0012C0r 1 0F FC .dbyt $0FFC +0012C2r 1 0F FD .dbyt $0FFD +0012C4r 1 0F FE .dbyt $0FFE +0012C6r 1 0F FF .dbyt $0FFF +0012C8r 1 10 00 .dbyt $1000 +0012CAr 1 10 01 .dbyt $1001 +0012CCr 1 10 02 .dbyt $1002 +0012CEr 1 10 03 .dbyt $1003 +0012D0r 1 10 04 .dbyt $1004 +0012D2r 1 10 05 .dbyt $1005 +0012D4r 1 10 06 .dbyt $1006 +0012D6r 1 10 07 .dbyt $1007 +0012D8r 1 10 08 .dbyt $1008 +0012DAr 1 7F F0 .dbyt $7FF0 +0012DCr 1 7F F1 .dbyt $7FF1 +0012DEr 1 7F F2 .dbyt $7FF2 +0012E0r 1 7F F3 .dbyt $7FF3 +0012E2r 1 7F F4 .dbyt $7FF4 +0012E4r 1 7F F5 .dbyt $7FF5 +0012E6r 1 7F F6 .dbyt $7FF6 +0012E8r 1 7F F7 .dbyt $7FF7 +0012EAr 1 7F F8 .dbyt $7FF8 +0012ECr 1 7F F9 .dbyt $7FF9 +0012EEr 1 7F FA .dbyt $7FFA +0012F0r 1 7F FB .dbyt $7FFB +0012F2r 1 7F FC .dbyt $7FFC +0012F4r 1 7F FD .dbyt $7FFD +0012F6r 1 7F FE .dbyt $7FFE +0012F8r 1 7F FF .dbyt $7FFF +0012FAr 1 80 00 .dbyt $8000 +0012FCr 1 80 01 .dbyt $8001 +0012FEr 1 80 02 .dbyt $8002 +001300r 1 80 03 .dbyt $8003 +001302r 1 80 04 .dbyt $8004 +001304r 1 80 05 .dbyt $8005 +001306r 1 80 06 .dbyt $8006 +001308r 1 80 07 .dbyt $8007 +00130Ar 1 80 08 .dbyt $8008 +00130Cr 1 80 09 .dbyt $8009 +00130Er 1 80 0A .dbyt $800A +001310r 1 80 0B .dbyt $800B +001312r 1 9F E1 .dbyt $9FE1 +001314r 1 9F E2 .dbyt $9FE2 +001316r 1 9F E3 .dbyt $9FE3 +001318r 1 9F E4 .dbyt $9FE4 +00131Ar 1 9F E5 .dbyt $9FE5 +00131Cr 1 9F E6 .dbyt $9FE6 +00131Er 1 9F E7 .dbyt $9FE7 +001320r 1 9F E8 .dbyt $9FE8 +001322r 1 9F E9 .dbyt $9FE9 +001324r 1 9F EA .dbyt $9FEA +001326r 1 9F EB .dbyt $9FEB +001328r 1 9F EC .dbyt $9FEC +00132Ar 1 9F ED .dbyt $9FED +00132Cr 1 9F EE .dbyt $9FEE +00132Er 1 9F EF .dbyt $9FEF +001330r 1 9F F0 .dbyt $9FF0 +001332r 1 9F F1 .dbyt $9FF1 +001334r 1 9F F2 .dbyt $9FF2 +001336r 1 9F F3 .dbyt $9FF3 +001338r 1 9F F4 .dbyt $9FF4 +00133Ar 1 9F F5 .dbyt $9FF5 +00133Cr 1 9F F6 .dbyt $9FF6 +00133Er 1 9F F7 .dbyt $9FF7 +001340r 1 9F F8 .dbyt $9FF8 +001342r 1 9F F9 .dbyt $9FF9 +001344r 1 9F FA .dbyt $9FFA +001346r 1 9F FB .dbyt $9FFB +001348r 1 9F FC .dbyt $9FFC +00134Ar 1 9F FD .dbyt $9FFD +00134Cr 1 9F FE .dbyt $9FFE +00134Er 1 9F FF .dbyt $9FFF +001350r 1 A0 00 .dbyt $A000 +001352r 1 A0 01 .dbyt $A001 +001354r 1 A0 02 .dbyt $A002 +001356r 1 A0 03 .dbyt $A003 +001358r 1 A0 04 .dbyt $A004 +00135Ar 1 A0 05 .dbyt $A005 +00135Cr 1 A0 06 .dbyt $A006 +00135Er 1 A0 07 .dbyt $A007 +001360r 1 A0 08 .dbyt $A008 +001362r 1 A0 09 .dbyt $A009 +001364r 1 A0 0A .dbyt $A00A +001366r 1 A0 0B .dbyt $A00B +001368r 1 A0 0C .dbyt $A00C +00136Ar 1 A0 0D .dbyt $A00D +00136Cr 1 A0 0E .dbyt $A00E +00136Er 1 A0 0F .dbyt $A00F +001370r 1 AF E1 .dbyt $AFE1 +001372r 1 AF E2 .dbyt $AFE2 +001374r 1 AF E3 .dbyt $AFE3 +001376r 1 AF E4 .dbyt $AFE4 +001378r 1 AF E5 .dbyt $AFE5 +00137Ar 1 AF E6 .dbyt $AFE6 +00137Cr 1 AF E7 .dbyt $AFE7 +00137Er 1 AF E8 .dbyt $AFE8 +001380r 1 AF E9 .dbyt $AFE9 +001382r 1 AF EA .dbyt $AFEA +001384r 1 AF EB .dbyt $AFEB +001386r 1 AF EC .dbyt $AFEC +001388r 1 AF ED .dbyt $AFED +00138Ar 1 AF EE .dbyt $AFEE +00138Cr 1 AF EF .dbyt $AFEF +00138Er 1 AF F0 .dbyt $AFF0 +001390r 1 AF F1 .dbyt $AFF1 +001392r 1 AF F2 .dbyt $AFF2 +001394r 1 AF F3 .dbyt $AFF3 +001396r 1 AF F4 .dbyt $AFF4 +001398r 1 AF F5 .dbyt $AFF5 +00139Ar 1 AF F6 .dbyt $AFF6 +00139Cr 1 AF F7 .dbyt $AFF7 +00139Er 1 AF F8 .dbyt $AFF8 +0013A0r 1 AF F9 .dbyt $AFF9 +0013A2r 1 AF FA .dbyt $AFFA +0013A4r 1 AF FB .dbyt $AFFB +0013A6r 1 AF FC .dbyt $AFFC +0013A8r 1 AF FD .dbyt $AFFD +0013AAr 1 AF FE .dbyt $AFFE +0013ACr 1 AF FF .dbyt $AFFF +0013AEr 1 B0 00 .dbyt $B000 +0013B0r 1 B0 01 .dbyt $B001 +0013B2r 1 B0 02 .dbyt $B002 +0013B4r 1 B0 03 .dbyt $B003 +0013B6r 1 B0 04 .dbyt $B004 +0013B8r 1 B0 05 .dbyt $B005 +0013BAr 1 B0 06 .dbyt $B006 +0013BCr 1 B0 07 .dbyt $B007 +0013BEr 1 B0 08 .dbyt $B008 +0013C0r 1 B0 09 .dbyt $B009 +0013C2r 1 B0 0A .dbyt $B00A +0013C4r 1 B0 0B .dbyt $B00B +0013C6r 1 B0 0C .dbyt $B00C +0013C8r 1 B0 0D .dbyt $B00D +0013CAr 1 B0 0E .dbyt $B00E +0013CCr 1 B0 0F .dbyt $B00F +0013CEr 1 BF E1 .dbyt $BFE1 +0013D0r 1 BF E2 .dbyt $BFE2 +0013D2r 1 BF E3 .dbyt $BFE3 +0013D4r 1 BF E4 .dbyt $BFE4 +0013D6r 1 BF E5 .dbyt $BFE5 +0013D8r 1 BF E6 .dbyt $BFE6 +0013DAr 1 BF E7 .dbyt $BFE7 +0013DCr 1 BF E8 .dbyt $BFE8 +0013DEr 1 BF E9 .dbyt $BFE9 +0013E0r 1 BF EA .dbyt $BFEA +0013E2r 1 BF EB .dbyt $BFEB +0013E4r 1 BF EC .dbyt $BFEC +0013E6r 1 BF ED .dbyt $BFED +0013E8r 1 BF EE .dbyt $BFEE +0013EAr 1 BF EF .dbyt $BFEF +0013ECr 1 BF F0 .dbyt $BFF0 +0013EEr 1 BF F1 .dbyt $BFF1 +0013F0r 1 BF F2 .dbyt $BFF2 +0013F2r 1 BF F3 .dbyt $BFF3 +0013F4r 1 BF F4 .dbyt $BFF4 +0013F6r 1 BF F5 .dbyt $BFF5 +0013F8r 1 BF F6 .dbyt $BFF6 +0013FAr 1 BF F7 .dbyt $BFF7 +0013FCr 1 BF F8 .dbyt $BFF8 +0013FEr 1 BF F9 .dbyt $BFF9 +001400r 1 BF FA .dbyt $BFFA +001402r 1 BF FB .dbyt $BFFB +001404r 1 BF FC .dbyt $BFFC +001406r 1 BF FD .dbyt $BFFD +001408r 1 BF FE .dbyt $BFFE +00140Ar 1 BF FF .dbyt $BFFF +00140Cr 1 C0 00 .dbyt $C000 +00140Er 1 C0 01 .dbyt $C001 +001410r 1 C0 02 .dbyt $C002 +001412r 1 C0 03 .dbyt $C003 +001414r 1 C0 04 .dbyt $C004 +001416r 1 C0 05 .dbyt $C005 +001418r 1 C0 06 .dbyt $C006 +00141Ar 1 C0 07 .dbyt $C007 +00141Cr 1 C0 08 .dbyt $C008 +00141Er 1 C0 09 .dbyt $C009 +001420r 1 C0 0A .dbyt $C00A +001422r 1 C0 0B .dbyt $C00B +001424r 1 C0 0C .dbyt $C00C +001426r 1 C0 0D .dbyt $C00D +001428r 1 C0 0E .dbyt $C00E +00142Ar 1 C0 0F .dbyt $C00F +00142Cr 1 CF E1 .dbyt $CFE1 +00142Er 1 CF E2 .dbyt $CFE2 +001430r 1 CF E3 .dbyt $CFE3 +001432r 1 CF E4 .dbyt $CFE4 +001434r 1 CF E5 .dbyt $CFE5 +001436r 1 CF E6 .dbyt $CFE6 +001438r 1 CF E7 .dbyt $CFE7 +00143Ar 1 CF E8 .dbyt $CFE8 +00143Cr 1 CF E9 .dbyt $CFE9 +00143Er 1 CF EA .dbyt $CFEA +001440r 1 CF EB .dbyt $CFEB +001442r 1 CF EC .dbyt $CFEC +001444r 1 CF ED .dbyt $CFED +001446r 1 CF EE .dbyt $CFEE +001448r 1 CF EF .dbyt $CFEF +00144Ar 1 CF F0 .dbyt $CFF0 +00144Cr 1 CF F1 .dbyt $CFF1 +00144Er 1 CF F2 .dbyt $CFF2 +001450r 1 CF F3 .dbyt $CFF3 +001452r 1 CF F4 .dbyt $CFF4 +001454r 1 CF F5 .dbyt $CFF5 +001456r 1 CF F6 .dbyt $CFF6 +001458r 1 CF F7 .dbyt $CFF7 +00145Ar 1 CF F8 .dbyt $CFF8 +00145Cr 1 CF F9 .dbyt $CFF9 +00145Er 1 CF FA .dbyt $CFFA +001460r 1 CF FB .dbyt $CFFB +001462r 1 CF FC .dbyt $CFFC +001464r 1 CF FD .dbyt $CFFD +001466r 1 CF FE .dbyt $CFFE +001468r 1 CF FF .dbyt $CFFF +00146Ar 1 D0 00 .dbyt $D000 +00146Cr 1 D0 01 .dbyt $D001 +00146Er 1 D0 02 .dbyt $D002 +001470r 1 D0 03 .dbyt $D003 +001472r 1 D0 04 .dbyt $D004 +001474r 1 D0 05 .dbyt $D005 +001476r 1 D0 06 .dbyt $D006 +001478r 1 D0 07 .dbyt $D007 +00147Ar 1 D0 08 .dbyt $D008 +00147Cr 1 D0 09 .dbyt $D009 +00147Er 1 D0 0A .dbyt $D00A +001480r 1 D0 0B .dbyt $D00B +001482r 1 D0 0C .dbyt $D00C +001484r 1 D0 0D .dbyt $D00D +001486r 1 D0 0E .dbyt $D00E +001488r 1 D0 0F .dbyt $D00F +00148Ar 1 DF E1 .dbyt $DFE1 +00148Cr 1 DF E2 .dbyt $DFE2 +00148Er 1 DF E3 .dbyt $DFE3 +001490r 1 DF E4 .dbyt $DFE4 +001492r 1 DF E5 .dbyt $DFE5 +001494r 1 DF E6 .dbyt $DFE6 +001496r 1 DF E7 .dbyt $DFE7 +001498r 1 DF E8 .dbyt $DFE8 +00149Ar 1 DF E9 .dbyt $DFE9 +00149Cr 1 DF EA .dbyt $DFEA +00149Er 1 DF EB .dbyt $DFEB +0014A0r 1 DF EC .dbyt $DFEC +0014A2r 1 DF ED .dbyt $DFED +0014A4r 1 DF EE .dbyt $DFEE +0014A6r 1 DF EF .dbyt $DFEF +0014A8r 1 DF F0 .dbyt $DFF0 +0014AAr 1 DF F1 .dbyt $DFF1 +0014ACr 1 DF F2 .dbyt $DFF2 +0014AEr 1 DF F3 .dbyt $DFF3 +0014B0r 1 DF F4 .dbyt $DFF4 +0014B2r 1 DF F5 .dbyt $DFF5 +0014B4r 1 DF F6 .dbyt $DFF6 +0014B6r 1 DF F7 .dbyt $DFF7 +0014B8r 1 DF F8 .dbyt $DFF8 +0014BAr 1 DF F9 .dbyt $DFF9 +0014BCr 1 DF FA .dbyt $DFFA +0014BEr 1 DF FB .dbyt $DFFB +0014C0r 1 DF FC .dbyt $DFFC +0014C2r 1 DF FD .dbyt $DFFD +0014C4r 1 DF FE .dbyt $DFFE +0014C6r 1 DF FF .dbyt $DFFF +0014C8r 1 E0 00 .dbyt $E000 +0014CAr 1 E0 01 .dbyt $E001 +0014CCr 1 E0 02 .dbyt $E002 +0014CEr 1 E0 03 .dbyt $E003 +0014D0r 1 E0 04 .dbyt $E004 +0014D2r 1 E0 05 .dbyt $E005 +0014D4r 1 E0 06 .dbyt $E006 +0014D6r 1 E0 07 .dbyt $E007 +0014D8r 1 E0 08 .dbyt $E008 +0014DAr 1 E0 09 .dbyt $E009 +0014DCr 1 E0 0A .dbyt $E00A +0014DEr 1 E0 0B .dbyt $E00B +0014E0r 1 E0 0C .dbyt $E00C +0014E2r 1 E0 0D .dbyt $E00D +0014E4r 1 E0 0E .dbyt $E00E +0014E6r 1 E0 0F .dbyt $E00F +0014E8r 1 EF E1 .dbyt $EFE1 +0014EAr 1 EF E2 .dbyt $EFE2 +0014ECr 1 EF E3 .dbyt $EFE3 +0014EEr 1 EF E4 .dbyt $EFE4 +0014F0r 1 EF E5 .dbyt $EFE5 +0014F2r 1 EF E6 .dbyt $EFE6 +0014F4r 1 EF E7 .dbyt $EFE7 +0014F6r 1 EF E8 .dbyt $EFE8 +0014F8r 1 EF E9 .dbyt $EFE9 +0014FAr 1 EF EA .dbyt $EFEA +0014FCr 1 EF EB .dbyt $EFEB +0014FEr 1 EF EC .dbyt $EFEC +001500r 1 EF ED .dbyt $EFED +001502r 1 EF EE .dbyt $EFEE +001504r 1 EF EF .dbyt $EFEF +001506r 1 EF F0 .dbyt $EFF0 +001508r 1 EF F1 .dbyt $EFF1 +00150Ar 1 EF F2 .dbyt $EFF2 +00150Cr 1 EF F3 .dbyt $EFF3 +00150Er 1 EF F4 .dbyt $EFF4 +001510r 1 EF F5 .dbyt $EFF5 +001512r 1 EF F6 .dbyt $EFF6 +001514r 1 EF F7 .dbyt $EFF7 +001516r 1 EF F8 .dbyt $EFF8 +001518r 1 EF F9 .dbyt $EFF9 +00151Ar 1 EF FA .dbyt $EFFA +00151Cr 1 EF FB .dbyt $EFFB +00151Er 1 EF FC .dbyt $EFFC +001520r 1 EF FD .dbyt $EFFD +001522r 1 EF FE .dbyt $EFFE +001524r 1 EF FF .dbyt $EFFF +001526r 1 F0 00 .dbyt $F000 +001528r 1 F0 01 .dbyt $F001 +00152Ar 1 F0 02 .dbyt $F002 +00152Cr 1 F0 03 .dbyt $F003 +00152Er 1 F0 04 .dbyt $F004 +001530r 1 F0 05 .dbyt $F005 +001532r 1 F0 06 .dbyt $F006 +001534r 1 F0 07 .dbyt $F007 +001536r 1 F0 08 .dbyt $F008 +001538r 1 F0 09 .dbyt $F009 +00153Ar 1 F0 0A .dbyt $F00A +00153Cr 1 F0 0B .dbyt $F00B +00153Er 1 F0 0C .dbyt $F00C +001540r 1 F0 0D .dbyt $F00D +001542r 1 F0 0E .dbyt $F00E +001544r 1 F0 0F .dbyt $F00F +001546r 1 FF E1 .dbyt $FFE1 +001548r 1 FF E2 .dbyt $FFE2 +00154Ar 1 FF E3 .dbyt $FFE3 +00154Cr 1 FF E4 .dbyt $FFE4 +00154Er 1 FF E5 .dbyt $FFE5 +001550r 1 FF E6 .dbyt $FFE6 +001552r 1 FF E7 .dbyt $FFE7 +001554r 1 FF E8 .dbyt $FFE8 +001556r 1 FF E9 .dbyt $FFE9 +001558r 1 FF EA .dbyt $FFEA +00155Ar 1 FF EB .dbyt $FFEB +00155Cr 1 FF EC .dbyt $FFEC +00155Er 1 FF ED .dbyt $FFED +001560r 1 FF EE .dbyt $FFEE +001562r 1 FF EF .dbyt $FFEF +001564r 1 FF F0 .dbyt $FFF0 +001566r 1 FF F1 .dbyt $FFF1 +001568r 1 FF F2 .dbyt $FFF2 +00156Ar 1 FF F3 .dbyt $FFF3 +00156Cr 1 FF F4 .dbyt $FFF4 +00156Er 1 FF F5 .dbyt $FFF5 +001570r 1 FF F6 .dbyt $FFF6 +001572r 1 FF F7 .dbyt $FFF7 +001574r 1 FF F8 .dbyt $FFF8 +001576r 1 FF F9 .dbyt $FFF9 +001578r 1 FF FA .dbyt $FFFA +00157Ar 1 FF FB .dbyt $FFFB +00157Cr 1 FF FC .dbyt $FFFC +00157Er 1 FF FD .dbyt $FFFD +001580r 1 FF FE .dbyt $FFFE +001582r 1 FF FF .dbyt $FFFF 001584r 1 -001584r 1 ; alternative hex values -001584r 1 00 00 .dbyt 0h -001586r 1 00 01 .dbyt 1h -001588r 1 00 02 .dbyt 2h -00158Ar 1 00 03 .dbyt 3h -00158Cr 1 00 04 .dbyt 4h -00158Er 1 00 05 .dbyt 5h -001590r 1 00 06 .dbyt 6h -001592r 1 00 07 .dbyt 7h -001594r 1 00 08 .dbyt 8h -001596r 1 00 09 .dbyt 9h -001598r 1 00 0A .dbyt 0ah -00159Ar 1 00 0B .dbyt 0bh -00159Cr 1 00 0C .dbyt 0ch -00159Er 1 00 0D .dbyt 0dh -0015A0r 1 00 0E .dbyt 0eh -0015A2r 1 00 0F .dbyt 0fh -0015A4r 1 00 10 .dbyt 10h -0015A6r 1 00 11 .dbyt 11h -0015A8r 1 00 12 .dbyt 12h -0015AAr 1 00 13 .dbyt 13h -0015ACr 1 00 70 .dbyt 70h -0015AEr 1 00 71 .dbyt 71h -0015B0r 1 00 72 .dbyt 72h -0015B2r 1 00 73 .dbyt 73h -0015B4r 1 00 74 .dbyt 74h -0015B6r 1 00 75 .dbyt 75h -0015B8r 1 00 76 .dbyt 76h -0015BAr 1 00 77 .dbyt 77h -0015BCr 1 00 78 .dbyt 78h -0015BEr 1 00 79 .dbyt 79h -0015C0r 1 00 7A .dbyt 7ah -0015C2r 1 00 7B .dbyt 7bh -0015C4r 1 00 7C .dbyt 7ch -0015C6r 1 00 7D .dbyt 7dh -0015C8r 1 00 7E .dbyt 7eh -0015CAr 1 00 7F .dbyt 7fh -0015CCr 1 00 80 .dbyt 80h -0015CEr 1 00 81 .dbyt 81h -0015D0r 1 00 82 .dbyt 82h -0015D2r 1 00 83 .dbyt 83h -0015D4r 1 00 84 .dbyt 84h -0015D6r 1 00 85 .dbyt 85h -0015D8r 1 00 86 .dbyt 86h -0015DAr 1 00 F0 .dbyt 0f0h -0015DCr 1 00 F1 .dbyt 0f1h -0015DEr 1 00 F2 .dbyt 0f2h -0015E0r 1 00 F3 .dbyt 0f3h -0015E2r 1 00 F4 .dbyt 0f4h -0015E4r 1 00 F5 .dbyt 0f5h -0015E6r 1 00 F6 .dbyt 0f6h -0015E8r 1 00 F7 .dbyt 0f7h -0015EAr 1 00 F8 .dbyt 0f8h -0015ECr 1 00 F9 .dbyt 0f9h -0015EEr 1 00 FA .dbyt 0fah -0015F0r 1 00 FB .dbyt 0fbh -0015F2r 1 00 FC .dbyt 0fch -0015F4r 1 00 FD .dbyt 0fdh -0015F6r 1 00 FE .dbyt 0feh -0015F8r 1 00 FF .dbyt 0ffh -0015FAr 1 01 00 .dbyt 100h -0015FCr 1 01 01 .dbyt 101h -0015FEr 1 01 02 .dbyt 102h -001600r 1 01 03 .dbyt 103h -001602r 1 0F D2 .dbyt 0fd2h -001604r 1 0F D3 .dbyt 0fd3h -001606r 1 0F D4 .dbyt 0fd4h -001608r 1 0F D5 .dbyt 0fd5h -00160Ar 1 0F D6 .dbyt 0fd6h -00160Cr 1 0F D7 .dbyt 0fd7h -00160Er 1 0F D8 .dbyt 0fd8h -001610r 1 0F D9 .dbyt 0fd9h -001612r 1 0F DA .dbyt 0fdah -001614r 1 0F DB .dbyt 0fdbh -001616r 1 0F DC .dbyt 0fdch -001618r 1 0F DD .dbyt 0fddh -00161Ar 1 0F DE .dbyt 0fdeh -00161Cr 1 0F DF .dbyt 0fdfh -00161Er 1 0F E0 .dbyt 0fe0h -001620r 1 0F E1 .dbyt 0fe1h -001622r 1 0F E2 .dbyt 0fe2h -001624r 1 0F E3 .dbyt 0fe3h -001626r 1 0F E4 .dbyt 0fe4h -001628r 1 0F E5 .dbyt 0fe5h -00162Ar 1 0F E6 .dbyt 0fe6h -00162Cr 1 0F E7 .dbyt 0fe7h -00162Er 1 0F E8 .dbyt 0fe8h -001630r 1 0F E9 .dbyt 0fe9h -001632r 1 0F EA .dbyt 0feah -001634r 1 0F EB .dbyt 0febh -001636r 1 0F EC .dbyt 0fech -001638r 1 0F ED .dbyt 0fedh -00163Ar 1 0F EE .dbyt 0feeh -00163Cr 1 0F EF .dbyt 0fefh -00163Er 1 0F F0 .dbyt 0ff0h -001640r 1 0F F1 .dbyt 0ff1h -001642r 1 0F F2 .dbyt 0ff2h -001644r 1 0F F3 .dbyt 0ff3h -001646r 1 0F F4 .dbyt 0ff4h -001648r 1 0F F5 .dbyt 0ff5h -00164Ar 1 0F F6 .dbyt 0ff6h -00164Cr 1 0F F7 .dbyt 0ff7h -00164Er 1 0F F8 .dbyt 0ff8h -001650r 1 0F F9 .dbyt 0ff9h -001652r 1 0F FA .dbyt 0ffah -001654r 1 0F FB .dbyt 0ffbh -001656r 1 0F FC .dbyt 0ffch -001658r 1 0F FD .dbyt 0ffdh -00165Ar 1 0F FE .dbyt 0ffeh -00165Cr 1 0F FF .dbyt 0fffh -00165Er 1 10 00 .dbyt 1000h -001660r 1 10 01 .dbyt 1001h -001662r 1 10 02 .dbyt 1002h -001664r 1 10 03 .dbyt 1003h -001666r 1 10 04 .dbyt 1004h -001668r 1 10 05 .dbyt 1005h -00166Ar 1 10 06 .dbyt 1006h -00166Cr 1 10 07 .dbyt 1007h -00166Er 1 10 08 .dbyt 1008h -001670r 1 7F F0 .dbyt 7ff0h -001672r 1 7F F1 .dbyt 7ff1h -001674r 1 7F F2 .dbyt 7ff2h -001676r 1 7F F3 .dbyt 7ff3h -001678r 1 7F F4 .dbyt 7ff4h -00167Ar 1 7F F5 .dbyt 7ff5h -00167Cr 1 7F F6 .dbyt 7ff6h -00167Er 1 7F F7 .dbyt 7ff7h -001680r 1 7F F8 .dbyt 7ff8h -001682r 1 7F F9 .dbyt 7ff9h -001684r 1 7F FA .dbyt 7ffah -001686r 1 7F FB .dbyt 7ffbh -001688r 1 7F FC .dbyt 7ffch -00168Ar 1 7F FD .dbyt 7ffdh -00168Cr 1 7F FE .dbyt 7ffeh -00168Er 1 7F FF .dbyt 7fffh -001690r 1 80 00 .dbyt 8000h -001692r 1 80 01 .dbyt 8001h -001694r 1 80 02 .dbyt 8002h -001696r 1 80 03 .dbyt 8003h -001698r 1 80 04 .dbyt 8004h -00169Ar 1 80 05 .dbyt 8005h -00169Cr 1 80 06 .dbyt 8006h -00169Er 1 80 07 .dbyt 8007h -0016A0r 1 80 08 .dbyt 8008h -0016A2r 1 80 09 .dbyt 8009h -0016A4r 1 80 0A .dbyt 800ah -0016A6r 1 80 0B .dbyt 800bh -0016A8r 1 9F E1 .dbyt 9fe1h -0016AAr 1 9F E2 .dbyt 9fe2h -0016ACr 1 9F E3 .dbyt 9fe3h -0016AEr 1 9F E4 .dbyt 9fe4h -0016B0r 1 9F E5 .dbyt 9fe5h -0016B2r 1 9F E6 .dbyt 9fe6h -0016B4r 1 9F E7 .dbyt 9fe7h -0016B6r 1 9F E8 .dbyt 9fe8h -0016B8r 1 9F E9 .dbyt 9fe9h -0016BAr 1 9F EA .dbyt 9feah -0016BCr 1 9F EB .dbyt 9febh -0016BEr 1 9F EC .dbyt 9fech -0016C0r 1 9F ED .dbyt 9fedh -0016C2r 1 9F EE .dbyt 9feeh -0016C4r 1 9F EF .dbyt 9fefh -0016C6r 1 9F F0 .dbyt 9ff0h -0016C8r 1 9F F1 .dbyt 9ff1h -0016CAr 1 9F F2 .dbyt 9ff2h -0016CCr 1 9F F3 .dbyt 9ff3h -0016CEr 1 9F F4 .dbyt 9ff4h -0016D0r 1 9F F5 .dbyt 9ff5h -0016D2r 1 9F F6 .dbyt 9ff6h -0016D4r 1 9F F7 .dbyt 9ff7h -0016D6r 1 9F F8 .dbyt 9ff8h -0016D8r 1 9F F9 .dbyt 9ff9h -0016DAr 1 9F FA .dbyt 9ffah -0016DCr 1 9F FB .dbyt 9ffbh -0016DEr 1 9F FC .dbyt 9ffch -0016E0r 1 9F FD .dbyt 9ffdh -0016E2r 1 9F FE .dbyt 9ffeh -0016E4r 1 9F FF .dbyt 9fffh -0016E6r 1 A0 00 .dbyt 0a000h -0016E8r 1 A0 01 .dbyt 0a001h -0016EAr 1 A0 02 .dbyt 0a002h -0016ECr 1 A0 03 .dbyt 0a003h -0016EEr 1 A0 04 .dbyt 0a004h -0016F0r 1 A0 05 .dbyt 0a005h -0016F2r 1 A0 06 .dbyt 0a006h -0016F4r 1 A0 07 .dbyt 0a007h -0016F6r 1 A0 08 .dbyt 0a008h -0016F8r 1 A0 09 .dbyt 0a009h -0016FAr 1 A0 0A .dbyt 0a00ah -0016FCr 1 A0 0B .dbyt 0a00bh -0016FEr 1 A0 0C .dbyt 0a00ch -001700r 1 A0 0D .dbyt 0a00dh -001702r 1 A0 0E .dbyt 0a00eh -001704r 1 A0 0F .dbyt 0a00fh -001706r 1 AF E1 .dbyt 0afe1h -001708r 1 AF E2 .dbyt 0afe2h -00170Ar 1 AF E3 .dbyt 0afe3h -00170Cr 1 AF E4 .dbyt 0afe4h -00170Er 1 AF E5 .dbyt 0afe5h -001710r 1 AF E6 .dbyt 0afe6h -001712r 1 AF E7 .dbyt 0afe7h -001714r 1 AF E8 .dbyt 0afe8h -001716r 1 AF E9 .dbyt 0afe9h -001718r 1 AF EA .dbyt 0afeah -00171Ar 1 AF EB .dbyt 0afebh -00171Cr 1 AF EC .dbyt 0afech -00171Er 1 AF ED .dbyt 0afedh -001720r 1 AF EE .dbyt 0afeeh -001722r 1 AF EF .dbyt 0afefh -001724r 1 AF F0 .dbyt 0aff0h -001726r 1 AF F1 .dbyt 0aff1h -001728r 1 AF F2 .dbyt 0aff2h -00172Ar 1 AF F3 .dbyt 0aff3h -00172Cr 1 AF F4 .dbyt 0aff4h -00172Er 1 AF F5 .dbyt 0aff5h -001730r 1 AF F6 .dbyt 0aff6h -001732r 1 AF F7 .dbyt 0aff7h -001734r 1 AF F8 .dbyt 0aff8h -001736r 1 AF F9 .dbyt 0aff9h -001738r 1 AF FA .dbyt 0affah -00173Ar 1 AF FB .dbyt 0affbh -00173Cr 1 AF FC .dbyt 0affch -00173Er 1 AF FD .dbyt 0affdh -001740r 1 AF FE .dbyt 0affeh -001742r 1 AF FF .dbyt 0afffh -001744r 1 B0 00 .dbyt 0b000h -001746r 1 B0 01 .dbyt 0b001h -001748r 1 B0 02 .dbyt 0b002h -00174Ar 1 B0 03 .dbyt 0b003h -00174Cr 1 B0 04 .dbyt 0b004h -00174Er 1 B0 05 .dbyt 0b005h -001750r 1 B0 06 .dbyt 0b006h -001752r 1 B0 07 .dbyt 0b007h -001754r 1 B0 08 .dbyt 0b008h -001756r 1 B0 09 .dbyt 0b009h -001758r 1 B0 0A .dbyt 0b00ah -00175Ar 1 B0 0B .dbyt 0b00bh -00175Cr 1 B0 0C .dbyt 0b00ch -00175Er 1 B0 0D .dbyt 0b00dh -001760r 1 B0 0E .dbyt 0b00eh -001762r 1 B0 0F .dbyt 0b00fh -001764r 1 BF E1 .dbyt 0bfe1h -001766r 1 BF E2 .dbyt 0bfe2h -001768r 1 BF E3 .dbyt 0bfe3h -00176Ar 1 BF E4 .dbyt 0bfe4h -00176Cr 1 BF E5 .dbyt 0bfe5h -00176Er 1 BF E6 .dbyt 0bfe6h -001770r 1 BF E7 .dbyt 0bfe7h -001772r 1 BF E8 .dbyt 0bfe8h -001774r 1 BF E9 .dbyt 0bfe9h -001776r 1 BF EA .dbyt 0bfeah -001778r 1 BF EB .dbyt 0bfebh -00177Ar 1 BF EC .dbyt 0bfech -00177Cr 1 BF ED .dbyt 0bfedh -00177Er 1 BF EE .dbyt 0bfeeh -001780r 1 BF EF .dbyt 0bfefh -001782r 1 BF F0 .dbyt 0bff0h -001784r 1 BF F1 .dbyt 0bff1h -001786r 1 BF F2 .dbyt 0bff2h -001788r 1 BF F3 .dbyt 0bff3h -00178Ar 1 BF F4 .dbyt 0bff4h -00178Cr 1 BF F5 .dbyt 0bff5h -00178Er 1 BF F6 .dbyt 0bff6h -001790r 1 BF F7 .dbyt 0bff7h -001792r 1 BF F8 .dbyt 0bff8h -001794r 1 BF F9 .dbyt 0bff9h -001796r 1 BF FA .dbyt 0bffah -001798r 1 BF FB .dbyt 0bffbh -00179Ar 1 BF FC .dbyt 0bffch -00179Cr 1 BF FD .dbyt 0bffdh -00179Er 1 BF FE .dbyt 0bffeh -0017A0r 1 BF FF .dbyt 0bfffh -0017A2r 1 C0 00 .dbyt 0c000h -0017A4r 1 C0 01 .dbyt 0c001h -0017A6r 1 C0 02 .dbyt 0c002h -0017A8r 1 C0 03 .dbyt 0c003h -0017AAr 1 C0 04 .dbyt 0c004h -0017ACr 1 C0 05 .dbyt 0c005h -0017AEr 1 C0 06 .dbyt 0c006h -0017B0r 1 C0 07 .dbyt 0c007h -0017B2r 1 C0 08 .dbyt 0c008h -0017B4r 1 C0 09 .dbyt 0c009h -0017B6r 1 C0 0A .dbyt 0c00ah -0017B8r 1 C0 0B .dbyt 0c00bh -0017BAr 1 C0 0C .dbyt 0c00ch -0017BCr 1 C0 0D .dbyt 0c00dh -0017BEr 1 C0 0E .dbyt 0c00eh -0017C0r 1 C0 0F .dbyt 0c00fh -0017C2r 1 CF E1 .dbyt 0cfe1h -0017C4r 1 CF E2 .dbyt 0cfe2h -0017C6r 1 CF E3 .dbyt 0cfe3h -0017C8r 1 CF E4 .dbyt 0cfe4h -0017CAr 1 CF E5 .dbyt 0cfe5h -0017CCr 1 CF E6 .dbyt 0cfe6h -0017CEr 1 CF E7 .dbyt 0cfe7h -0017D0r 1 CF E8 .dbyt 0cfe8h -0017D2r 1 CF E9 .dbyt 0cfe9h -0017D4r 1 CF EA .dbyt 0cfeah -0017D6r 1 CF EB .dbyt 0cfebh -0017D8r 1 CF EC .dbyt 0cfech -0017DAr 1 CF ED .dbyt 0cfedh -0017DCr 1 CF EE .dbyt 0cfeeh -0017DEr 1 CF EF .dbyt 0cfefh -0017E0r 1 CF F0 .dbyt 0cff0h -0017E2r 1 CF F1 .dbyt 0cff1h -0017E4r 1 CF F2 .dbyt 0cff2h -0017E6r 1 CF F3 .dbyt 0cff3h -0017E8r 1 CF F4 .dbyt 0cff4h -0017EAr 1 CF F5 .dbyt 0cff5h -0017ECr 1 CF F6 .dbyt 0cff6h -0017EEr 1 CF F7 .dbyt 0cff7h -0017F0r 1 CF F8 .dbyt 0cff8h -0017F2r 1 CF F9 .dbyt 0cff9h -0017F4r 1 CF FA .dbyt 0cffah -0017F6r 1 CF FB .dbyt 0cffbh -0017F8r 1 CF FC .dbyt 0cffch -0017FAr 1 CF FD .dbyt 0cffdh -0017FCr 1 CF FE .dbyt 0cffeh -0017FEr 1 CF FF .dbyt 0cfffh -001800r 1 D0 00 .dbyt 0d000h -001802r 1 D0 01 .dbyt 0d001h -001804r 1 D0 02 .dbyt 0d002h -001806r 1 D0 03 .dbyt 0d003h -001808r 1 D0 04 .dbyt 0d004h -00180Ar 1 D0 05 .dbyt 0d005h -00180Cr 1 D0 06 .dbyt 0d006h -00180Er 1 D0 07 .dbyt 0d007h -001810r 1 D0 08 .dbyt 0d008h -001812r 1 D0 09 .dbyt 0d009h -001814r 1 D0 0A .dbyt 0d00ah -001816r 1 D0 0B .dbyt 0d00bh -001818r 1 D0 0C .dbyt 0d00ch -00181Ar 1 D0 0D .dbyt 0d00dh -00181Cr 1 D0 0E .dbyt 0d00eh -00181Er 1 D0 0F .dbyt 0d00fh -001820r 1 DF E1 .dbyt 0dfe1h -001822r 1 DF E2 .dbyt 0dfe2h -001824r 1 DF E3 .dbyt 0dfe3h -001826r 1 DF E4 .dbyt 0dfe4h -001828r 1 DF E5 .dbyt 0dfe5h -00182Ar 1 DF E6 .dbyt 0dfe6h -00182Cr 1 DF E7 .dbyt 0dfe7h -00182Er 1 DF E8 .dbyt 0dfe8h -001830r 1 DF E9 .dbyt 0dfe9h -001832r 1 DF EA .dbyt 0dfeah -001834r 1 DF EB .dbyt 0dfebh -001836r 1 DF EC .dbyt 0dfech -001838r 1 DF ED .dbyt 0dfedh -00183Ar 1 DF EE .dbyt 0dfeeh -00183Cr 1 DF EF .dbyt 0dfefh -00183Er 1 DF F0 .dbyt 0dff0h -001840r 1 DF F1 .dbyt 0dff1h -001842r 1 DF F2 .dbyt 0dff2h -001844r 1 DF F3 .dbyt 0dff3h -001846r 1 DF F4 .dbyt 0dff4h -001848r 1 DF F5 .dbyt 0dff5h -00184Ar 1 DF F6 .dbyt 0dff6h -00184Cr 1 DF F7 .dbyt 0dff7h -00184Er 1 DF F8 .dbyt 0dff8h -001850r 1 DF F9 .dbyt 0dff9h -001852r 1 DF FA .dbyt 0dffah -001854r 1 DF FB .dbyt 0dffbh -001856r 1 DF FC .dbyt 0dffch -001858r 1 DF FD .dbyt 0dffdh -00185Ar 1 DF FE .dbyt 0dffeh -00185Cr 1 DF FF .dbyt 0dfffh -00185Er 1 E0 00 .dbyt 0e000h -001860r 1 E0 01 .dbyt 0e001h -001862r 1 E0 02 .dbyt 0e002h -001864r 1 E0 03 .dbyt 0e003h -001866r 1 E0 04 .dbyt 0e004h -001868r 1 E0 05 .dbyt 0e005h -00186Ar 1 E0 06 .dbyt 0e006h -00186Cr 1 E0 07 .dbyt 0e007h -00186Er 1 E0 08 .dbyt 0e008h -001870r 1 E0 09 .dbyt 0e009h -001872r 1 E0 0A .dbyt 0e00ah -001874r 1 E0 0B .dbyt 0e00bh -001876r 1 E0 0C .dbyt 0e00ch -001878r 1 E0 0D .dbyt 0e00dh -00187Ar 1 E0 0E .dbyt 0e00eh -00187Cr 1 E0 0F .dbyt 0e00fh -00187Er 1 EF E1 .dbyt 0efe1h -001880r 1 EF E2 .dbyt 0efe2h -001882r 1 EF E3 .dbyt 0efe3h -001884r 1 EF E4 .dbyt 0efe4h -001886r 1 EF E5 .dbyt 0efe5h -001888r 1 EF E6 .dbyt 0efe6h -00188Ar 1 EF E7 .dbyt 0efe7h -00188Cr 1 EF E8 .dbyt 0efe8h -00188Er 1 EF E9 .dbyt 0efe9h -001890r 1 EF EA .dbyt 0efeah -001892r 1 EF EB .dbyt 0efebh -001894r 1 EF EC .dbyt 0efech -001896r 1 EF ED .dbyt 0efedh -001898r 1 EF EE .dbyt 0efeeh -00189Ar 1 EF EF .dbyt 0efefh -00189Cr 1 EF F0 .dbyt 0eff0h -00189Er 1 EF F1 .dbyt 0eff1h -0018A0r 1 EF F2 .dbyt 0eff2h -0018A2r 1 EF F3 .dbyt 0eff3h -0018A4r 1 EF F4 .dbyt 0eff4h -0018A6r 1 EF F5 .dbyt 0eff5h -0018A8r 1 EF F6 .dbyt 0eff6h -0018AAr 1 EF F7 .dbyt 0eff7h -0018ACr 1 EF F8 .dbyt 0eff8h -0018AEr 1 EF F9 .dbyt 0eff9h -0018B0r 1 EF FA .dbyt 0effah -0018B2r 1 EF FB .dbyt 0effbh -0018B4r 1 EF FC .dbyt 0effch -0018B6r 1 EF FD .dbyt 0effdh -0018B8r 1 EF FE .dbyt 0effeh -0018BAr 1 EF FF .dbyt 0efffh -0018BCr 1 F0 00 .dbyt 0f000h -0018BEr 1 F0 01 .dbyt 0f001h -0018C0r 1 F0 02 .dbyt 0f002h -0018C2r 1 F0 03 .dbyt 0f003h -0018C4r 1 F0 04 .dbyt 0f004h -0018C6r 1 F0 05 .dbyt 0f005h -0018C8r 1 F0 06 .dbyt 0f006h -0018CAr 1 F0 07 .dbyt 0f007h -0018CCr 1 F0 08 .dbyt 0f008h -0018CEr 1 F0 09 .dbyt 0f009h -0018D0r 1 F0 0A .dbyt 0f00ah -0018D2r 1 F0 0B .dbyt 0f00bh -0018D4r 1 F0 0C .dbyt 0f00ch -0018D6r 1 F0 0D .dbyt 0f00dh -0018D8r 1 F0 0E .dbyt 0f00eh -0018DAr 1 F0 0F .dbyt 0f00fh -0018DCr 1 FF E1 .dbyt 0ffe1h -0018DEr 1 FF E2 .dbyt 0ffe2h -0018E0r 1 FF E3 .dbyt 0ffe3h -0018E2r 1 FF E4 .dbyt 0ffe4h -0018E4r 1 FF E5 .dbyt 0ffe5h -0018E6r 1 FF E6 .dbyt 0ffe6h -0018E8r 1 FF E7 .dbyt 0ffe7h -0018EAr 1 FF E8 .dbyt 0ffe8h -0018ECr 1 FF E9 .dbyt 0ffe9h -0018EEr 1 FF EA .dbyt 0ffeah -0018F0r 1 FF EB .dbyt 0ffebh -0018F2r 1 FF EC .dbyt 0ffech -0018F4r 1 FF ED .dbyt 0ffedh -0018F6r 1 FF EE .dbyt 0ffeeh -0018F8r 1 FF EF .dbyt 0ffefh -0018FAr 1 FF F0 .dbyt 0fff0h -0018FCr 1 FF F1 .dbyt 0fff1h -0018FEr 1 FF F2 .dbyt 0fff2h -001900r 1 FF F3 .dbyt 0fff3h -001902r 1 FF F4 .dbyt 0fff4h -001904r 1 FF F5 .dbyt 0fff5h -001906r 1 FF F6 .dbyt 0fff6h -001908r 1 FF F7 .dbyt 0fff7h -00190Ar 1 FF F8 .dbyt 0fff8h -00190Cr 1 FF F9 .dbyt 0fff9h -00190Er 1 FF FA .dbyt 0fffah -001910r 1 FF FB .dbyt 0fffbh -001912r 1 FF FC .dbyt 0fffch -001914r 1 FF FD .dbyt 0fffdh -001916r 1 FF FE .dbyt 0fffeh -001918r 1 FF FF .dbyt 0ffffh +001584r 1 ; alternative hex values +001584r 1 00 00 .dbyt 0h +001586r 1 00 01 .dbyt 1h +001588r 1 00 02 .dbyt 2h +00158Ar 1 00 03 .dbyt 3h +00158Cr 1 00 04 .dbyt 4h +00158Er 1 00 05 .dbyt 5h +001590r 1 00 06 .dbyt 6h +001592r 1 00 07 .dbyt 7h +001594r 1 00 08 .dbyt 8h +001596r 1 00 09 .dbyt 9h +001598r 1 00 0A .dbyt 0ah +00159Ar 1 00 0B .dbyt 0bh +00159Cr 1 00 0C .dbyt 0ch +00159Er 1 00 0D .dbyt 0dh +0015A0r 1 00 0E .dbyt 0eh +0015A2r 1 00 0F .dbyt 0fh +0015A4r 1 00 10 .dbyt 10h +0015A6r 1 00 11 .dbyt 11h +0015A8r 1 00 12 .dbyt 12h +0015AAr 1 00 13 .dbyt 13h +0015ACr 1 00 70 .dbyt 70h +0015AEr 1 00 71 .dbyt 71h +0015B0r 1 00 72 .dbyt 72h +0015B2r 1 00 73 .dbyt 73h +0015B4r 1 00 74 .dbyt 74h +0015B6r 1 00 75 .dbyt 75h +0015B8r 1 00 76 .dbyt 76h +0015BAr 1 00 77 .dbyt 77h +0015BCr 1 00 78 .dbyt 78h +0015BEr 1 00 79 .dbyt 79h +0015C0r 1 00 7A .dbyt 7ah +0015C2r 1 00 7B .dbyt 7bh +0015C4r 1 00 7C .dbyt 7ch +0015C6r 1 00 7D .dbyt 7dh +0015C8r 1 00 7E .dbyt 7eh +0015CAr 1 00 7F .dbyt 7fh +0015CCr 1 00 80 .dbyt 80h +0015CEr 1 00 81 .dbyt 81h +0015D0r 1 00 82 .dbyt 82h +0015D2r 1 00 83 .dbyt 83h +0015D4r 1 00 84 .dbyt 84h +0015D6r 1 00 85 .dbyt 85h +0015D8r 1 00 86 .dbyt 86h +0015DAr 1 00 F0 .dbyt 0f0h +0015DCr 1 00 F1 .dbyt 0f1h +0015DEr 1 00 F2 .dbyt 0f2h +0015E0r 1 00 F3 .dbyt 0f3h +0015E2r 1 00 F4 .dbyt 0f4h +0015E4r 1 00 F5 .dbyt 0f5h +0015E6r 1 00 F6 .dbyt 0f6h +0015E8r 1 00 F7 .dbyt 0f7h +0015EAr 1 00 F8 .dbyt 0f8h +0015ECr 1 00 F9 .dbyt 0f9h +0015EEr 1 00 FA .dbyt 0fah +0015F0r 1 00 FB .dbyt 0fbh +0015F2r 1 00 FC .dbyt 0fch +0015F4r 1 00 FD .dbyt 0fdh +0015F6r 1 00 FE .dbyt 0feh +0015F8r 1 00 FF .dbyt 0ffh +0015FAr 1 01 00 .dbyt 100h +0015FCr 1 01 01 .dbyt 101h +0015FEr 1 01 02 .dbyt 102h +001600r 1 01 03 .dbyt 103h +001602r 1 0F D2 .dbyt 0fd2h +001604r 1 0F D3 .dbyt 0fd3h +001606r 1 0F D4 .dbyt 0fd4h +001608r 1 0F D5 .dbyt 0fd5h +00160Ar 1 0F D6 .dbyt 0fd6h +00160Cr 1 0F D7 .dbyt 0fd7h +00160Er 1 0F D8 .dbyt 0fd8h +001610r 1 0F D9 .dbyt 0fd9h +001612r 1 0F DA .dbyt 0fdah +001614r 1 0F DB .dbyt 0fdbh +001616r 1 0F DC .dbyt 0fdch +001618r 1 0F DD .dbyt 0fddh +00161Ar 1 0F DE .dbyt 0fdeh +00161Cr 1 0F DF .dbyt 0fdfh +00161Er 1 0F E0 .dbyt 0fe0h +001620r 1 0F E1 .dbyt 0fe1h +001622r 1 0F E2 .dbyt 0fe2h +001624r 1 0F E3 .dbyt 0fe3h +001626r 1 0F E4 .dbyt 0fe4h +001628r 1 0F E5 .dbyt 0fe5h +00162Ar 1 0F E6 .dbyt 0fe6h +00162Cr 1 0F E7 .dbyt 0fe7h +00162Er 1 0F E8 .dbyt 0fe8h +001630r 1 0F E9 .dbyt 0fe9h +001632r 1 0F EA .dbyt 0feah +001634r 1 0F EB .dbyt 0febh +001636r 1 0F EC .dbyt 0fech +001638r 1 0F ED .dbyt 0fedh +00163Ar 1 0F EE .dbyt 0feeh +00163Cr 1 0F EF .dbyt 0fefh +00163Er 1 0F F0 .dbyt 0ff0h +001640r 1 0F F1 .dbyt 0ff1h +001642r 1 0F F2 .dbyt 0ff2h +001644r 1 0F F3 .dbyt 0ff3h +001646r 1 0F F4 .dbyt 0ff4h +001648r 1 0F F5 .dbyt 0ff5h +00164Ar 1 0F F6 .dbyt 0ff6h +00164Cr 1 0F F7 .dbyt 0ff7h +00164Er 1 0F F8 .dbyt 0ff8h +001650r 1 0F F9 .dbyt 0ff9h +001652r 1 0F FA .dbyt 0ffah +001654r 1 0F FB .dbyt 0ffbh +001656r 1 0F FC .dbyt 0ffch +001658r 1 0F FD .dbyt 0ffdh +00165Ar 1 0F FE .dbyt 0ffeh +00165Cr 1 0F FF .dbyt 0fffh +00165Er 1 10 00 .dbyt 1000h +001660r 1 10 01 .dbyt 1001h +001662r 1 10 02 .dbyt 1002h +001664r 1 10 03 .dbyt 1003h +001666r 1 10 04 .dbyt 1004h +001668r 1 10 05 .dbyt 1005h +00166Ar 1 10 06 .dbyt 1006h +00166Cr 1 10 07 .dbyt 1007h +00166Er 1 10 08 .dbyt 1008h +001670r 1 7F F0 .dbyt 7ff0h +001672r 1 7F F1 .dbyt 7ff1h +001674r 1 7F F2 .dbyt 7ff2h +001676r 1 7F F3 .dbyt 7ff3h +001678r 1 7F F4 .dbyt 7ff4h +00167Ar 1 7F F5 .dbyt 7ff5h +00167Cr 1 7F F6 .dbyt 7ff6h +00167Er 1 7F F7 .dbyt 7ff7h +001680r 1 7F F8 .dbyt 7ff8h +001682r 1 7F F9 .dbyt 7ff9h +001684r 1 7F FA .dbyt 7ffah +001686r 1 7F FB .dbyt 7ffbh +001688r 1 7F FC .dbyt 7ffch +00168Ar 1 7F FD .dbyt 7ffdh +00168Cr 1 7F FE .dbyt 7ffeh +00168Er 1 7F FF .dbyt 7fffh +001690r 1 80 00 .dbyt 8000h +001692r 1 80 01 .dbyt 8001h +001694r 1 80 02 .dbyt 8002h +001696r 1 80 03 .dbyt 8003h +001698r 1 80 04 .dbyt 8004h +00169Ar 1 80 05 .dbyt 8005h +00169Cr 1 80 06 .dbyt 8006h +00169Er 1 80 07 .dbyt 8007h +0016A0r 1 80 08 .dbyt 8008h +0016A2r 1 80 09 .dbyt 8009h +0016A4r 1 80 0A .dbyt 800ah +0016A6r 1 80 0B .dbyt 800bh +0016A8r 1 9F E1 .dbyt 9fe1h +0016AAr 1 9F E2 .dbyt 9fe2h +0016ACr 1 9F E3 .dbyt 9fe3h +0016AEr 1 9F E4 .dbyt 9fe4h +0016B0r 1 9F E5 .dbyt 9fe5h +0016B2r 1 9F E6 .dbyt 9fe6h +0016B4r 1 9F E7 .dbyt 9fe7h +0016B6r 1 9F E8 .dbyt 9fe8h +0016B8r 1 9F E9 .dbyt 9fe9h +0016BAr 1 9F EA .dbyt 9feah +0016BCr 1 9F EB .dbyt 9febh +0016BEr 1 9F EC .dbyt 9fech +0016C0r 1 9F ED .dbyt 9fedh +0016C2r 1 9F EE .dbyt 9feeh +0016C4r 1 9F EF .dbyt 9fefh +0016C6r 1 9F F0 .dbyt 9ff0h +0016C8r 1 9F F1 .dbyt 9ff1h +0016CAr 1 9F F2 .dbyt 9ff2h +0016CCr 1 9F F3 .dbyt 9ff3h +0016CEr 1 9F F4 .dbyt 9ff4h +0016D0r 1 9F F5 .dbyt 9ff5h +0016D2r 1 9F F6 .dbyt 9ff6h +0016D4r 1 9F F7 .dbyt 9ff7h +0016D6r 1 9F F8 .dbyt 9ff8h +0016D8r 1 9F F9 .dbyt 9ff9h +0016DAr 1 9F FA .dbyt 9ffah +0016DCr 1 9F FB .dbyt 9ffbh +0016DEr 1 9F FC .dbyt 9ffch +0016E0r 1 9F FD .dbyt 9ffdh +0016E2r 1 9F FE .dbyt 9ffeh +0016E4r 1 9F FF .dbyt 9fffh +0016E6r 1 A0 00 .dbyt 0a000h +0016E8r 1 A0 01 .dbyt 0a001h +0016EAr 1 A0 02 .dbyt 0a002h +0016ECr 1 A0 03 .dbyt 0a003h +0016EEr 1 A0 04 .dbyt 0a004h +0016F0r 1 A0 05 .dbyt 0a005h +0016F2r 1 A0 06 .dbyt 0a006h +0016F4r 1 A0 07 .dbyt 0a007h +0016F6r 1 A0 08 .dbyt 0a008h +0016F8r 1 A0 09 .dbyt 0a009h +0016FAr 1 A0 0A .dbyt 0a00ah +0016FCr 1 A0 0B .dbyt 0a00bh +0016FEr 1 A0 0C .dbyt 0a00ch +001700r 1 A0 0D .dbyt 0a00dh +001702r 1 A0 0E .dbyt 0a00eh +001704r 1 A0 0F .dbyt 0a00fh +001706r 1 AF E1 .dbyt 0afe1h +001708r 1 AF E2 .dbyt 0afe2h +00170Ar 1 AF E3 .dbyt 0afe3h +00170Cr 1 AF E4 .dbyt 0afe4h +00170Er 1 AF E5 .dbyt 0afe5h +001710r 1 AF E6 .dbyt 0afe6h +001712r 1 AF E7 .dbyt 0afe7h +001714r 1 AF E8 .dbyt 0afe8h +001716r 1 AF E9 .dbyt 0afe9h +001718r 1 AF EA .dbyt 0afeah +00171Ar 1 AF EB .dbyt 0afebh +00171Cr 1 AF EC .dbyt 0afech +00171Er 1 AF ED .dbyt 0afedh +001720r 1 AF EE .dbyt 0afeeh +001722r 1 AF EF .dbyt 0afefh +001724r 1 AF F0 .dbyt 0aff0h +001726r 1 AF F1 .dbyt 0aff1h +001728r 1 AF F2 .dbyt 0aff2h +00172Ar 1 AF F3 .dbyt 0aff3h +00172Cr 1 AF F4 .dbyt 0aff4h +00172Er 1 AF F5 .dbyt 0aff5h +001730r 1 AF F6 .dbyt 0aff6h +001732r 1 AF F7 .dbyt 0aff7h +001734r 1 AF F8 .dbyt 0aff8h +001736r 1 AF F9 .dbyt 0aff9h +001738r 1 AF FA .dbyt 0affah +00173Ar 1 AF FB .dbyt 0affbh +00173Cr 1 AF FC .dbyt 0affch +00173Er 1 AF FD .dbyt 0affdh +001740r 1 AF FE .dbyt 0affeh +001742r 1 AF FF .dbyt 0afffh +001744r 1 B0 00 .dbyt 0b000h +001746r 1 B0 01 .dbyt 0b001h +001748r 1 B0 02 .dbyt 0b002h +00174Ar 1 B0 03 .dbyt 0b003h +00174Cr 1 B0 04 .dbyt 0b004h +00174Er 1 B0 05 .dbyt 0b005h +001750r 1 B0 06 .dbyt 0b006h +001752r 1 B0 07 .dbyt 0b007h +001754r 1 B0 08 .dbyt 0b008h +001756r 1 B0 09 .dbyt 0b009h +001758r 1 B0 0A .dbyt 0b00ah +00175Ar 1 B0 0B .dbyt 0b00bh +00175Cr 1 B0 0C .dbyt 0b00ch +00175Er 1 B0 0D .dbyt 0b00dh +001760r 1 B0 0E .dbyt 0b00eh +001762r 1 B0 0F .dbyt 0b00fh +001764r 1 BF E1 .dbyt 0bfe1h +001766r 1 BF E2 .dbyt 0bfe2h +001768r 1 BF E3 .dbyt 0bfe3h +00176Ar 1 BF E4 .dbyt 0bfe4h +00176Cr 1 BF E5 .dbyt 0bfe5h +00176Er 1 BF E6 .dbyt 0bfe6h +001770r 1 BF E7 .dbyt 0bfe7h +001772r 1 BF E8 .dbyt 0bfe8h +001774r 1 BF E9 .dbyt 0bfe9h +001776r 1 BF EA .dbyt 0bfeah +001778r 1 BF EB .dbyt 0bfebh +00177Ar 1 BF EC .dbyt 0bfech +00177Cr 1 BF ED .dbyt 0bfedh +00177Er 1 BF EE .dbyt 0bfeeh +001780r 1 BF EF .dbyt 0bfefh +001782r 1 BF F0 .dbyt 0bff0h +001784r 1 BF F1 .dbyt 0bff1h +001786r 1 BF F2 .dbyt 0bff2h +001788r 1 BF F3 .dbyt 0bff3h +00178Ar 1 BF F4 .dbyt 0bff4h +00178Cr 1 BF F5 .dbyt 0bff5h +00178Er 1 BF F6 .dbyt 0bff6h +001790r 1 BF F7 .dbyt 0bff7h +001792r 1 BF F8 .dbyt 0bff8h +001794r 1 BF F9 .dbyt 0bff9h +001796r 1 BF FA .dbyt 0bffah +001798r 1 BF FB .dbyt 0bffbh +00179Ar 1 BF FC .dbyt 0bffch +00179Cr 1 BF FD .dbyt 0bffdh +00179Er 1 BF FE .dbyt 0bffeh +0017A0r 1 BF FF .dbyt 0bfffh +0017A2r 1 C0 00 .dbyt 0c000h +0017A4r 1 C0 01 .dbyt 0c001h +0017A6r 1 C0 02 .dbyt 0c002h +0017A8r 1 C0 03 .dbyt 0c003h +0017AAr 1 C0 04 .dbyt 0c004h +0017ACr 1 C0 05 .dbyt 0c005h +0017AEr 1 C0 06 .dbyt 0c006h +0017B0r 1 C0 07 .dbyt 0c007h +0017B2r 1 C0 08 .dbyt 0c008h +0017B4r 1 C0 09 .dbyt 0c009h +0017B6r 1 C0 0A .dbyt 0c00ah +0017B8r 1 C0 0B .dbyt 0c00bh +0017BAr 1 C0 0C .dbyt 0c00ch +0017BCr 1 C0 0D .dbyt 0c00dh +0017BEr 1 C0 0E .dbyt 0c00eh +0017C0r 1 C0 0F .dbyt 0c00fh +0017C2r 1 CF E1 .dbyt 0cfe1h +0017C4r 1 CF E2 .dbyt 0cfe2h +0017C6r 1 CF E3 .dbyt 0cfe3h +0017C8r 1 CF E4 .dbyt 0cfe4h +0017CAr 1 CF E5 .dbyt 0cfe5h +0017CCr 1 CF E6 .dbyt 0cfe6h +0017CEr 1 CF E7 .dbyt 0cfe7h +0017D0r 1 CF E8 .dbyt 0cfe8h +0017D2r 1 CF E9 .dbyt 0cfe9h +0017D4r 1 CF EA .dbyt 0cfeah +0017D6r 1 CF EB .dbyt 0cfebh +0017D8r 1 CF EC .dbyt 0cfech +0017DAr 1 CF ED .dbyt 0cfedh +0017DCr 1 CF EE .dbyt 0cfeeh +0017DEr 1 CF EF .dbyt 0cfefh +0017E0r 1 CF F0 .dbyt 0cff0h +0017E2r 1 CF F1 .dbyt 0cff1h +0017E4r 1 CF F2 .dbyt 0cff2h +0017E6r 1 CF F3 .dbyt 0cff3h +0017E8r 1 CF F4 .dbyt 0cff4h +0017EAr 1 CF F5 .dbyt 0cff5h +0017ECr 1 CF F6 .dbyt 0cff6h +0017EEr 1 CF F7 .dbyt 0cff7h +0017F0r 1 CF F8 .dbyt 0cff8h +0017F2r 1 CF F9 .dbyt 0cff9h +0017F4r 1 CF FA .dbyt 0cffah +0017F6r 1 CF FB .dbyt 0cffbh +0017F8r 1 CF FC .dbyt 0cffch +0017FAr 1 CF FD .dbyt 0cffdh +0017FCr 1 CF FE .dbyt 0cffeh +0017FEr 1 CF FF .dbyt 0cfffh +001800r 1 D0 00 .dbyt 0d000h +001802r 1 D0 01 .dbyt 0d001h +001804r 1 D0 02 .dbyt 0d002h +001806r 1 D0 03 .dbyt 0d003h +001808r 1 D0 04 .dbyt 0d004h +00180Ar 1 D0 05 .dbyt 0d005h +00180Cr 1 D0 06 .dbyt 0d006h +00180Er 1 D0 07 .dbyt 0d007h +001810r 1 D0 08 .dbyt 0d008h +001812r 1 D0 09 .dbyt 0d009h +001814r 1 D0 0A .dbyt 0d00ah +001816r 1 D0 0B .dbyt 0d00bh +001818r 1 D0 0C .dbyt 0d00ch +00181Ar 1 D0 0D .dbyt 0d00dh +00181Cr 1 D0 0E .dbyt 0d00eh +00181Er 1 D0 0F .dbyt 0d00fh +001820r 1 DF E1 .dbyt 0dfe1h +001822r 1 DF E2 .dbyt 0dfe2h +001824r 1 DF E3 .dbyt 0dfe3h +001826r 1 DF E4 .dbyt 0dfe4h +001828r 1 DF E5 .dbyt 0dfe5h +00182Ar 1 DF E6 .dbyt 0dfe6h +00182Cr 1 DF E7 .dbyt 0dfe7h +00182Er 1 DF E8 .dbyt 0dfe8h +001830r 1 DF E9 .dbyt 0dfe9h +001832r 1 DF EA .dbyt 0dfeah +001834r 1 DF EB .dbyt 0dfebh +001836r 1 DF EC .dbyt 0dfech +001838r 1 DF ED .dbyt 0dfedh +00183Ar 1 DF EE .dbyt 0dfeeh +00183Cr 1 DF EF .dbyt 0dfefh +00183Er 1 DF F0 .dbyt 0dff0h +001840r 1 DF F1 .dbyt 0dff1h +001842r 1 DF F2 .dbyt 0dff2h +001844r 1 DF F3 .dbyt 0dff3h +001846r 1 DF F4 .dbyt 0dff4h +001848r 1 DF F5 .dbyt 0dff5h +00184Ar 1 DF F6 .dbyt 0dff6h +00184Cr 1 DF F7 .dbyt 0dff7h +00184Er 1 DF F8 .dbyt 0dff8h +001850r 1 DF F9 .dbyt 0dff9h +001852r 1 DF FA .dbyt 0dffah +001854r 1 DF FB .dbyt 0dffbh +001856r 1 DF FC .dbyt 0dffch +001858r 1 DF FD .dbyt 0dffdh +00185Ar 1 DF FE .dbyt 0dffeh +00185Cr 1 DF FF .dbyt 0dfffh +00185Er 1 E0 00 .dbyt 0e000h +001860r 1 E0 01 .dbyt 0e001h +001862r 1 E0 02 .dbyt 0e002h +001864r 1 E0 03 .dbyt 0e003h +001866r 1 E0 04 .dbyt 0e004h +001868r 1 E0 05 .dbyt 0e005h +00186Ar 1 E0 06 .dbyt 0e006h +00186Cr 1 E0 07 .dbyt 0e007h +00186Er 1 E0 08 .dbyt 0e008h +001870r 1 E0 09 .dbyt 0e009h +001872r 1 E0 0A .dbyt 0e00ah +001874r 1 E0 0B .dbyt 0e00bh +001876r 1 E0 0C .dbyt 0e00ch +001878r 1 E0 0D .dbyt 0e00dh +00187Ar 1 E0 0E .dbyt 0e00eh +00187Cr 1 E0 0F .dbyt 0e00fh +00187Er 1 EF E1 .dbyt 0efe1h +001880r 1 EF E2 .dbyt 0efe2h +001882r 1 EF E3 .dbyt 0efe3h +001884r 1 EF E4 .dbyt 0efe4h +001886r 1 EF E5 .dbyt 0efe5h +001888r 1 EF E6 .dbyt 0efe6h +00188Ar 1 EF E7 .dbyt 0efe7h +00188Cr 1 EF E8 .dbyt 0efe8h +00188Er 1 EF E9 .dbyt 0efe9h +001890r 1 EF EA .dbyt 0efeah +001892r 1 EF EB .dbyt 0efebh +001894r 1 EF EC .dbyt 0efech +001896r 1 EF ED .dbyt 0efedh +001898r 1 EF EE .dbyt 0efeeh +00189Ar 1 EF EF .dbyt 0efefh +00189Cr 1 EF F0 .dbyt 0eff0h +00189Er 1 EF F1 .dbyt 0eff1h +0018A0r 1 EF F2 .dbyt 0eff2h +0018A2r 1 EF F3 .dbyt 0eff3h +0018A4r 1 EF F4 .dbyt 0eff4h +0018A6r 1 EF F5 .dbyt 0eff5h +0018A8r 1 EF F6 .dbyt 0eff6h +0018AAr 1 EF F7 .dbyt 0eff7h +0018ACr 1 EF F8 .dbyt 0eff8h +0018AEr 1 EF F9 .dbyt 0eff9h +0018B0r 1 EF FA .dbyt 0effah +0018B2r 1 EF FB .dbyt 0effbh +0018B4r 1 EF FC .dbyt 0effch +0018B6r 1 EF FD .dbyt 0effdh +0018B8r 1 EF FE .dbyt 0effeh +0018BAr 1 EF FF .dbyt 0efffh +0018BCr 1 F0 00 .dbyt 0f000h +0018BEr 1 F0 01 .dbyt 0f001h +0018C0r 1 F0 02 .dbyt 0f002h +0018C2r 1 F0 03 .dbyt 0f003h +0018C4r 1 F0 04 .dbyt 0f004h +0018C6r 1 F0 05 .dbyt 0f005h +0018C8r 1 F0 06 .dbyt 0f006h +0018CAr 1 F0 07 .dbyt 0f007h +0018CCr 1 F0 08 .dbyt 0f008h +0018CEr 1 F0 09 .dbyt 0f009h +0018D0r 1 F0 0A .dbyt 0f00ah +0018D2r 1 F0 0B .dbyt 0f00bh +0018D4r 1 F0 0C .dbyt 0f00ch +0018D6r 1 F0 0D .dbyt 0f00dh +0018D8r 1 F0 0E .dbyt 0f00eh +0018DAr 1 F0 0F .dbyt 0f00fh +0018DCr 1 FF E1 .dbyt 0ffe1h +0018DEr 1 FF E2 .dbyt 0ffe2h +0018E0r 1 FF E3 .dbyt 0ffe3h +0018E2r 1 FF E4 .dbyt 0ffe4h +0018E4r 1 FF E5 .dbyt 0ffe5h +0018E6r 1 FF E6 .dbyt 0ffe6h +0018E8r 1 FF E7 .dbyt 0ffe7h +0018EAr 1 FF E8 .dbyt 0ffe8h +0018ECr 1 FF E9 .dbyt 0ffe9h +0018EEr 1 FF EA .dbyt 0ffeah +0018F0r 1 FF EB .dbyt 0ffebh +0018F2r 1 FF EC .dbyt 0ffech +0018F4r 1 FF ED .dbyt 0ffedh +0018F6r 1 FF EE .dbyt 0ffeeh +0018F8r 1 FF EF .dbyt 0ffefh +0018FAr 1 FF F0 .dbyt 0fff0h +0018FCr 1 FF F1 .dbyt 0fff1h +0018FEr 1 FF F2 .dbyt 0fff2h +001900r 1 FF F3 .dbyt 0fff3h +001902r 1 FF F4 .dbyt 0fff4h +001904r 1 FF F5 .dbyt 0fff5h +001906r 1 FF F6 .dbyt 0fff6h +001908r 1 FF F7 .dbyt 0fff7h +00190Ar 1 FF F8 .dbyt 0fff8h +00190Cr 1 FF F9 .dbyt 0fff9h +00190Er 1 FF FA .dbyt 0fffah +001910r 1 FF FB .dbyt 0fffbh +001912r 1 FF FC .dbyt 0fffch +001914r 1 FF FD .dbyt 0fffdh +001916r 1 FF FE .dbyt 0fffeh +001918r 1 FF FF .dbyt 0ffffh 00191Ar 1 -00191Ar 1 ; alternative hex values, uppercase -00191Ar 1 00 00 .dbyt 0h -00191Cr 1 00 01 .dbyt 1h -00191Er 1 00 02 .dbyt 2h -001920r 1 00 03 .dbyt 3h -001922r 1 00 04 .dbyt 4h -001924r 1 00 05 .dbyt 5h -001926r 1 00 06 .dbyt 6h -001928r 1 00 07 .dbyt 7h -00192Ar 1 00 08 .dbyt 8h -00192Cr 1 00 09 .dbyt 9h -00192Er 1 00 0A .dbyt 0Ah -001930r 1 00 0B .dbyt 0Bh -001932r 1 00 0C .dbyt 0Ch -001934r 1 00 0D .dbyt 0Dh -001936r 1 00 0E .dbyt 0Eh -001938r 1 00 0F .dbyt 0Fh -00193Ar 1 00 10 .dbyt 10h -00193Cr 1 00 11 .dbyt 11h -00193Er 1 00 12 .dbyt 12h -001940r 1 00 13 .dbyt 13h -001942r 1 00 70 .dbyt 70h -001944r 1 00 71 .dbyt 71h -001946r 1 00 72 .dbyt 72h -001948r 1 00 73 .dbyt 73h -00194Ar 1 00 74 .dbyt 74h -00194Cr 1 00 75 .dbyt 75h -00194Er 1 00 76 .dbyt 76h -001950r 1 00 77 .dbyt 77h -001952r 1 00 78 .dbyt 78h -001954r 1 00 79 .dbyt 79h -001956r 1 00 7A .dbyt 7Ah -001958r 1 00 7B .dbyt 7Bh -00195Ar 1 00 7C .dbyt 7Ch -00195Cr 1 00 7D .dbyt 7Dh -00195Er 1 00 7E .dbyt 7Eh -001960r 1 00 7F .dbyt 7Fh -001962r 1 00 80 .dbyt 80h -001964r 1 00 81 .dbyt 81h -001966r 1 00 82 .dbyt 82h -001968r 1 00 83 .dbyt 83h -00196Ar 1 00 84 .dbyt 84h -00196Cr 1 00 85 .dbyt 85h -00196Er 1 00 86 .dbyt 86h -001970r 1 00 F0 .dbyt 0F0h -001972r 1 00 F1 .dbyt 0F1h -001974r 1 00 F2 .dbyt 0F2h -001976r 1 00 F3 .dbyt 0F3h -001978r 1 00 F4 .dbyt 0F4h -00197Ar 1 00 F5 .dbyt 0F5h -00197Cr 1 00 F6 .dbyt 0F6h -00197Er 1 00 F7 .dbyt 0F7h -001980r 1 00 F8 .dbyt 0F8h -001982r 1 00 F9 .dbyt 0F9h -001984r 1 00 FA .dbyt 0FAh -001986r 1 00 FB .dbyt 0FBh -001988r 1 00 FC .dbyt 0FCh -00198Ar 1 00 FD .dbyt 0FDh -00198Cr 1 00 FE .dbyt 0FEh -00198Er 1 00 FF .dbyt 0FFh -001990r 1 01 00 .dbyt 100h -001992r 1 01 01 .dbyt 101h -001994r 1 01 02 .dbyt 102h -001996r 1 01 03 .dbyt 103h -001998r 1 0F D2 .dbyt 0FD2h -00199Ar 1 0F D3 .dbyt 0FD3h -00199Cr 1 0F D4 .dbyt 0FD4h -00199Er 1 0F D5 .dbyt 0FD5h -0019A0r 1 0F D6 .dbyt 0FD6h -0019A2r 1 0F D7 .dbyt 0FD7h -0019A4r 1 0F D8 .dbyt 0FD8h -0019A6r 1 0F D9 .dbyt 0FD9h -0019A8r 1 0F DA .dbyt 0FDAh -0019AAr 1 0F DB .dbyt 0FDBh -0019ACr 1 0F DC .dbyt 0FDCh -0019AEr 1 0F DD .dbyt 0FDDh -0019B0r 1 0F DE .dbyt 0FDEh -0019B2r 1 0F DF .dbyt 0FDFh -0019B4r 1 0F E0 .dbyt 0FE0h -0019B6r 1 0F E1 .dbyt 0FE1h -0019B8r 1 0F E2 .dbyt 0FE2h -0019BAr 1 0F E3 .dbyt 0FE3h -0019BCr 1 0F E4 .dbyt 0FE4h -0019BEr 1 0F E5 .dbyt 0FE5h -0019C0r 1 0F E6 .dbyt 0FE6h -0019C2r 1 0F E7 .dbyt 0FE7h -0019C4r 1 0F E8 .dbyt 0FE8h -0019C6r 1 0F E9 .dbyt 0FE9h -0019C8r 1 0F EA .dbyt 0FEAh -0019CAr 1 0F EB .dbyt 0FEBh -0019CCr 1 0F EC .dbyt 0FECh -0019CEr 1 0F ED .dbyt 0FEDh -0019D0r 1 0F EE .dbyt 0FEEh -0019D2r 1 0F EF .dbyt 0FEFh -0019D4r 1 0F F0 .dbyt 0FF0h -0019D6r 1 0F F1 .dbyt 0FF1h -0019D8r 1 0F F2 .dbyt 0FF2h -0019DAr 1 0F F3 .dbyt 0FF3h -0019DCr 1 0F F4 .dbyt 0FF4h -0019DEr 1 0F F5 .dbyt 0FF5h -0019E0r 1 0F F6 .dbyt 0FF6h -0019E2r 1 0F F7 .dbyt 0FF7h -0019E4r 1 0F F8 .dbyt 0FF8h -0019E6r 1 0F F9 .dbyt 0FF9h -0019E8r 1 0F FA .dbyt 0FFAh -0019EAr 1 0F FB .dbyt 0FFBh -0019ECr 1 0F FC .dbyt 0FFCh -0019EEr 1 0F FD .dbyt 0FFDh -0019F0r 1 0F FE .dbyt 0FFEh -0019F2r 1 0F FF .dbyt 0FFFh -0019F4r 1 10 00 .dbyt 1000h -0019F6r 1 10 01 .dbyt 1001h -0019F8r 1 10 02 .dbyt 1002h -0019FAr 1 10 03 .dbyt 1003h -0019FCr 1 10 04 .dbyt 1004h -0019FEr 1 10 05 .dbyt 1005h -001A00r 1 10 06 .dbyt 1006h -001A02r 1 10 07 .dbyt 1007h -001A04r 1 10 08 .dbyt 1008h -001A06r 1 7F F0 .dbyt 7FF0h -001A08r 1 7F F1 .dbyt 7FF1h -001A0Ar 1 7F F2 .dbyt 7FF2h -001A0Cr 1 7F F3 .dbyt 7FF3h -001A0Er 1 7F F4 .dbyt 7FF4h -001A10r 1 7F F5 .dbyt 7FF5h -001A12r 1 7F F6 .dbyt 7FF6h -001A14r 1 7F F7 .dbyt 7FF7h -001A16r 1 7F F8 .dbyt 7FF8h -001A18r 1 7F F9 .dbyt 7FF9h -001A1Ar 1 7F FA .dbyt 7FFAh -001A1Cr 1 7F FB .dbyt 7FFBh -001A1Er 1 7F FC .dbyt 7FFCh -001A20r 1 7F FD .dbyt 7FFDh -001A22r 1 7F FE .dbyt 7FFEh -001A24r 1 7F FF .dbyt 7FFFh -001A26r 1 80 00 .dbyt 8000h -001A28r 1 80 01 .dbyt 8001h -001A2Ar 1 80 02 .dbyt 8002h -001A2Cr 1 80 03 .dbyt 8003h -001A2Er 1 80 04 .dbyt 8004h -001A30r 1 80 05 .dbyt 8005h -001A32r 1 80 06 .dbyt 8006h -001A34r 1 80 07 .dbyt 8007h -001A36r 1 80 08 .dbyt 8008h -001A38r 1 80 09 .dbyt 8009h -001A3Ar 1 80 0A .dbyt 800Ah -001A3Cr 1 80 0B .dbyt 800Bh -001A3Er 1 9F E1 .dbyt 9FE1h -001A40r 1 9F E2 .dbyt 9FE2h -001A42r 1 9F E3 .dbyt 9FE3h -001A44r 1 9F E4 .dbyt 9FE4h -001A46r 1 9F E5 .dbyt 9FE5h -001A48r 1 9F E6 .dbyt 9FE6h -001A4Ar 1 9F E7 .dbyt 9FE7h -001A4Cr 1 9F E8 .dbyt 9FE8h -001A4Er 1 9F E9 .dbyt 9FE9h -001A50r 1 9F EA .dbyt 9FEAh -001A52r 1 9F EB .dbyt 9FEBh -001A54r 1 9F EC .dbyt 9FECh -001A56r 1 9F ED .dbyt 9FEDh -001A58r 1 9F EE .dbyt 9FEEh -001A5Ar 1 9F EF .dbyt 9FEFh -001A5Cr 1 9F F0 .dbyt 9FF0h -001A5Er 1 9F F1 .dbyt 9FF1h -001A60r 1 9F F2 .dbyt 9FF2h -001A62r 1 9F F3 .dbyt 9FF3h -001A64r 1 9F F4 .dbyt 9FF4h -001A66r 1 9F F5 .dbyt 9FF5h -001A68r 1 9F F6 .dbyt 9FF6h -001A6Ar 1 9F F7 .dbyt 9FF7h -001A6Cr 1 9F F8 .dbyt 9FF8h -001A6Er 1 9F F9 .dbyt 9FF9h -001A70r 1 9F FA .dbyt 9FFAh -001A72r 1 9F FB .dbyt 9FFBh -001A74r 1 9F FC .dbyt 9FFCh -001A76r 1 9F FD .dbyt 9FFDh -001A78r 1 9F FE .dbyt 9FFEh -001A7Ar 1 9F FF .dbyt 9FFFh -001A7Cr 1 A0 00 .dbyt 0A000h -001A7Er 1 A0 01 .dbyt 0A001h -001A80r 1 A0 02 .dbyt 0A002h -001A82r 1 A0 03 .dbyt 0A003h -001A84r 1 A0 04 .dbyt 0A004h -001A86r 1 A0 05 .dbyt 0A005h -001A88r 1 A0 06 .dbyt 0A006h -001A8Ar 1 A0 07 .dbyt 0A007h -001A8Cr 1 A0 08 .dbyt 0A008h -001A8Er 1 A0 09 .dbyt 0A009h -001A90r 1 A0 0A .dbyt 0A00Ah -001A92r 1 A0 0B .dbyt 0A00Bh -001A94r 1 A0 0C .dbyt 0A00Ch -001A96r 1 A0 0D .dbyt 0A00Dh -001A98r 1 A0 0E .dbyt 0A00Eh -001A9Ar 1 A0 0F .dbyt 0A00Fh -001A9Cr 1 AF E1 .dbyt 0AFE1h -001A9Er 1 AF E2 .dbyt 0AFE2h -001AA0r 1 AF E3 .dbyt 0AFE3h -001AA2r 1 AF E4 .dbyt 0AFE4h -001AA4r 1 AF E5 .dbyt 0AFE5h -001AA6r 1 AF E6 .dbyt 0AFE6h -001AA8r 1 AF E7 .dbyt 0AFE7h -001AAAr 1 AF E8 .dbyt 0AFE8h -001AACr 1 AF E9 .dbyt 0AFE9h -001AAEr 1 AF EA .dbyt 0AFEAh -001AB0r 1 AF EB .dbyt 0AFEBh -001AB2r 1 AF EC .dbyt 0AFECh -001AB4r 1 AF ED .dbyt 0AFEDh -001AB6r 1 AF EE .dbyt 0AFEEh -001AB8r 1 AF EF .dbyt 0AFEFh -001ABAr 1 AF F0 .dbyt 0AFF0h -001ABCr 1 AF F1 .dbyt 0AFF1h -001ABEr 1 AF F2 .dbyt 0AFF2h -001AC0r 1 AF F3 .dbyt 0AFF3h -001AC2r 1 AF F4 .dbyt 0AFF4h -001AC4r 1 AF F5 .dbyt 0AFF5h -001AC6r 1 AF F6 .dbyt 0AFF6h -001AC8r 1 AF F7 .dbyt 0AFF7h -001ACAr 1 AF F8 .dbyt 0AFF8h -001ACCr 1 AF F9 .dbyt 0AFF9h -001ACEr 1 AF FA .dbyt 0AFFAh -001AD0r 1 AF FB .dbyt 0AFFBh -001AD2r 1 AF FC .dbyt 0AFFCh -001AD4r 1 AF FD .dbyt 0AFFDh -001AD6r 1 AF FE .dbyt 0AFFEh -001AD8r 1 AF FF .dbyt 0AFFFh -001ADAr 1 B0 00 .dbyt 0B000h -001ADCr 1 B0 01 .dbyt 0B001h -001ADEr 1 B0 02 .dbyt 0B002h -001AE0r 1 B0 03 .dbyt 0B003h -001AE2r 1 B0 04 .dbyt 0B004h -001AE4r 1 B0 05 .dbyt 0B005h -001AE6r 1 B0 06 .dbyt 0B006h -001AE8r 1 B0 07 .dbyt 0B007h -001AEAr 1 B0 08 .dbyt 0B008h -001AECr 1 B0 09 .dbyt 0B009h -001AEEr 1 B0 0A .dbyt 0B00Ah -001AF0r 1 B0 0B .dbyt 0B00Bh -001AF2r 1 B0 0C .dbyt 0B00Ch -001AF4r 1 B0 0D .dbyt 0B00Dh -001AF6r 1 B0 0E .dbyt 0B00Eh -001AF8r 1 B0 0F .dbyt 0B00Fh -001AFAr 1 BF E1 .dbyt 0BFE1h -001AFCr 1 BF E2 .dbyt 0BFE2h -001AFEr 1 BF E3 .dbyt 0BFE3h -001B00r 1 BF E4 .dbyt 0BFE4h -001B02r 1 BF E5 .dbyt 0BFE5h -001B04r 1 BF E6 .dbyt 0BFE6h -001B06r 1 BF E7 .dbyt 0BFE7h -001B08r 1 BF E8 .dbyt 0BFE8h -001B0Ar 1 BF E9 .dbyt 0BFE9h -001B0Cr 1 BF EA .dbyt 0BFEAh -001B0Er 1 BF EB .dbyt 0BFEBh -001B10r 1 BF EC .dbyt 0BFECh -001B12r 1 BF ED .dbyt 0BFEDh -001B14r 1 BF EE .dbyt 0BFEEh -001B16r 1 BF EF .dbyt 0BFEFh -001B18r 1 BF F0 .dbyt 0BFF0h -001B1Ar 1 BF F1 .dbyt 0BFF1h -001B1Cr 1 BF F2 .dbyt 0BFF2h -001B1Er 1 BF F3 .dbyt 0BFF3h -001B20r 1 BF F4 .dbyt 0BFF4h -001B22r 1 BF F5 .dbyt 0BFF5h -001B24r 1 BF F6 .dbyt 0BFF6h -001B26r 1 BF F7 .dbyt 0BFF7h -001B28r 1 BF F8 .dbyt 0BFF8h -001B2Ar 1 BF F9 .dbyt 0BFF9h -001B2Cr 1 BF FA .dbyt 0BFFAh -001B2Er 1 BF FB .dbyt 0BFFBh -001B30r 1 BF FC .dbyt 0BFFCh -001B32r 1 BF FD .dbyt 0BFFDh -001B34r 1 BF FE .dbyt 0BFFEh -001B36r 1 BF FF .dbyt 0BFFFh -001B38r 1 C0 00 .dbyt 0C000h -001B3Ar 1 C0 01 .dbyt 0C001h -001B3Cr 1 C0 02 .dbyt 0C002h -001B3Er 1 C0 03 .dbyt 0C003h -001B40r 1 C0 04 .dbyt 0C004h -001B42r 1 C0 05 .dbyt 0C005h -001B44r 1 C0 06 .dbyt 0C006h -001B46r 1 C0 07 .dbyt 0C007h -001B48r 1 C0 08 .dbyt 0C008h -001B4Ar 1 C0 09 .dbyt 0C009h -001B4Cr 1 C0 0A .dbyt 0C00Ah -001B4Er 1 C0 0B .dbyt 0C00Bh -001B50r 1 C0 0C .dbyt 0C00Ch -001B52r 1 C0 0D .dbyt 0C00Dh -001B54r 1 C0 0E .dbyt 0C00Eh -001B56r 1 C0 0F .dbyt 0C00Fh -001B58r 1 CF E1 .dbyt 0CFE1h -001B5Ar 1 CF E2 .dbyt 0CFE2h -001B5Cr 1 CF E3 .dbyt 0CFE3h -001B5Er 1 CF E4 .dbyt 0CFE4h -001B60r 1 CF E5 .dbyt 0CFE5h -001B62r 1 CF E6 .dbyt 0CFE6h -001B64r 1 CF E7 .dbyt 0CFE7h -001B66r 1 CF E8 .dbyt 0CFE8h -001B68r 1 CF E9 .dbyt 0CFE9h -001B6Ar 1 CF EA .dbyt 0CFEAh -001B6Cr 1 CF EB .dbyt 0CFEBh -001B6Er 1 CF EC .dbyt 0CFECh -001B70r 1 CF ED .dbyt 0CFEDh -001B72r 1 CF EE .dbyt 0CFEEh -001B74r 1 CF EF .dbyt 0CFEFh -001B76r 1 CF F0 .dbyt 0CFF0h -001B78r 1 CF F1 .dbyt 0CFF1h -001B7Ar 1 CF F2 .dbyt 0CFF2h -001B7Cr 1 CF F3 .dbyt 0CFF3h -001B7Er 1 CF F4 .dbyt 0CFF4h -001B80r 1 CF F5 .dbyt 0CFF5h -001B82r 1 CF F6 .dbyt 0CFF6h -001B84r 1 CF F7 .dbyt 0CFF7h -001B86r 1 CF F8 .dbyt 0CFF8h -001B88r 1 CF F9 .dbyt 0CFF9h -001B8Ar 1 CF FA .dbyt 0CFFAh -001B8Cr 1 CF FB .dbyt 0CFFBh -001B8Er 1 CF FC .dbyt 0CFFCh -001B90r 1 CF FD .dbyt 0CFFDh -001B92r 1 CF FE .dbyt 0CFFEh -001B94r 1 CF FF .dbyt 0CFFFh -001B96r 1 D0 00 .dbyt 0D000h -001B98r 1 D0 01 .dbyt 0D001h -001B9Ar 1 D0 02 .dbyt 0D002h -001B9Cr 1 D0 03 .dbyt 0D003h -001B9Er 1 D0 04 .dbyt 0D004h -001BA0r 1 D0 05 .dbyt 0D005h -001BA2r 1 D0 06 .dbyt 0D006h -001BA4r 1 D0 07 .dbyt 0D007h -001BA6r 1 D0 08 .dbyt 0D008h -001BA8r 1 D0 09 .dbyt 0D009h -001BAAr 1 D0 0A .dbyt 0D00Ah -001BACr 1 D0 0B .dbyt 0D00Bh -001BAEr 1 D0 0C .dbyt 0D00Ch -001BB0r 1 D0 0D .dbyt 0D00Dh -001BB2r 1 D0 0E .dbyt 0D00Eh -001BB4r 1 D0 0F .dbyt 0D00Fh -001BB6r 1 DF E1 .dbyt 0DFE1h -001BB8r 1 DF E2 .dbyt 0DFE2h -001BBAr 1 DF E3 .dbyt 0DFE3h -001BBCr 1 DF E4 .dbyt 0DFE4h -001BBEr 1 DF E5 .dbyt 0DFE5h -001BC0r 1 DF E6 .dbyt 0DFE6h -001BC2r 1 DF E7 .dbyt 0DFE7h -001BC4r 1 DF E8 .dbyt 0DFE8h -001BC6r 1 DF E9 .dbyt 0DFE9h -001BC8r 1 DF EA .dbyt 0DFEAh -001BCAr 1 DF EB .dbyt 0DFEBh -001BCCr 1 DF EC .dbyt 0DFECh -001BCEr 1 DF ED .dbyt 0DFEDh -001BD0r 1 DF EE .dbyt 0DFEEh -001BD2r 1 DF EF .dbyt 0DFEFh -001BD4r 1 DF F0 .dbyt 0DFF0h -001BD6r 1 DF F1 .dbyt 0DFF1h -001BD8r 1 DF F2 .dbyt 0DFF2h -001BDAr 1 DF F3 .dbyt 0DFF3h -001BDCr 1 DF F4 .dbyt 0DFF4h -001BDEr 1 DF F5 .dbyt 0DFF5h -001BE0r 1 DF F6 .dbyt 0DFF6h -001BE2r 1 DF F7 .dbyt 0DFF7h -001BE4r 1 DF F8 .dbyt 0DFF8h -001BE6r 1 DF F9 .dbyt 0DFF9h -001BE8r 1 DF FA .dbyt 0DFFAh -001BEAr 1 DF FB .dbyt 0DFFBh -001BECr 1 DF FC .dbyt 0DFFCh -001BEEr 1 DF FD .dbyt 0DFFDh -001BF0r 1 DF FE .dbyt 0DFFEh -001BF2r 1 DF FF .dbyt 0DFFFh -001BF4r 1 E0 00 .dbyt 0E000h -001BF6r 1 E0 01 .dbyt 0E001h -001BF8r 1 E0 02 .dbyt 0E002h -001BFAr 1 E0 03 .dbyt 0E003h -001BFCr 1 E0 04 .dbyt 0E004h -001BFEr 1 E0 05 .dbyt 0E005h -001C00r 1 E0 06 .dbyt 0E006h -001C02r 1 E0 07 .dbyt 0E007h -001C04r 1 E0 08 .dbyt 0E008h -001C06r 1 E0 09 .dbyt 0E009h -001C08r 1 E0 0A .dbyt 0E00Ah -001C0Ar 1 E0 0B .dbyt 0E00Bh -001C0Cr 1 E0 0C .dbyt 0E00Ch -001C0Er 1 E0 0D .dbyt 0E00Dh -001C10r 1 E0 0E .dbyt 0E00Eh -001C12r 1 E0 0F .dbyt 0E00Fh -001C14r 1 EF E1 .dbyt 0EFE1h -001C16r 1 EF E2 .dbyt 0EFE2h -001C18r 1 EF E3 .dbyt 0EFE3h -001C1Ar 1 EF E4 .dbyt 0EFE4h -001C1Cr 1 EF E5 .dbyt 0EFE5h -001C1Er 1 EF E6 .dbyt 0EFE6h -001C20r 1 EF E7 .dbyt 0EFE7h -001C22r 1 EF E8 .dbyt 0EFE8h -001C24r 1 EF E9 .dbyt 0EFE9h -001C26r 1 EF EA .dbyt 0EFEAh -001C28r 1 EF EB .dbyt 0EFEBh -001C2Ar 1 EF EC .dbyt 0EFECh -001C2Cr 1 EF ED .dbyt 0EFEDh -001C2Er 1 EF EE .dbyt 0EFEEh -001C30r 1 EF EF .dbyt 0EFEFh -001C32r 1 EF F0 .dbyt 0EFF0h -001C34r 1 EF F1 .dbyt 0EFF1h -001C36r 1 EF F2 .dbyt 0EFF2h -001C38r 1 EF F3 .dbyt 0EFF3h -001C3Ar 1 EF F4 .dbyt 0EFF4h -001C3Cr 1 EF F5 .dbyt 0EFF5h -001C3Er 1 EF F6 .dbyt 0EFF6h -001C40r 1 EF F7 .dbyt 0EFF7h -001C42r 1 EF F8 .dbyt 0EFF8h -001C44r 1 EF F9 .dbyt 0EFF9h -001C46r 1 EF FA .dbyt 0EFFAh -001C48r 1 EF FB .dbyt 0EFFBh -001C4Ar 1 EF FC .dbyt 0EFFCh -001C4Cr 1 EF FD .dbyt 0EFFDh -001C4Er 1 EF FE .dbyt 0EFFEh -001C50r 1 EF FF .dbyt 0EFFFh -001C52r 1 F0 00 .dbyt 0F000h -001C54r 1 F0 01 .dbyt 0F001h -001C56r 1 F0 02 .dbyt 0F002h -001C58r 1 F0 03 .dbyt 0F003h -001C5Ar 1 F0 04 .dbyt 0F004h -001C5Cr 1 F0 05 .dbyt 0F005h -001C5Er 1 F0 06 .dbyt 0F006h -001C60r 1 F0 07 .dbyt 0F007h -001C62r 1 F0 08 .dbyt 0F008h -001C64r 1 F0 09 .dbyt 0F009h -001C66r 1 F0 0A .dbyt 0F00Ah -001C68r 1 F0 0B .dbyt 0F00Bh -001C6Ar 1 F0 0C .dbyt 0F00Ch -001C6Cr 1 F0 0D .dbyt 0F00Dh -001C6Er 1 F0 0E .dbyt 0F00Eh -001C70r 1 F0 0F .dbyt 0F00Fh -001C72r 1 FF E1 .dbyt 0FFE1h -001C74r 1 FF E2 .dbyt 0FFE2h -001C76r 1 FF E3 .dbyt 0FFE3h -001C78r 1 FF E4 .dbyt 0FFE4h -001C7Ar 1 FF E5 .dbyt 0FFE5h -001C7Cr 1 FF E6 .dbyt 0FFE6h -001C7Er 1 FF E7 .dbyt 0FFE7h -001C80r 1 FF E8 .dbyt 0FFE8h -001C82r 1 FF E9 .dbyt 0FFE9h -001C84r 1 FF EA .dbyt 0FFEAh -001C86r 1 FF EB .dbyt 0FFEBh -001C88r 1 FF EC .dbyt 0FFECh -001C8Ar 1 FF ED .dbyt 0FFEDh -001C8Cr 1 FF EE .dbyt 0FFEEh -001C8Er 1 FF EF .dbyt 0FFEFh -001C90r 1 FF F0 .dbyt 0FFF0h -001C92r 1 FF F1 .dbyt 0FFF1h -001C94r 1 FF F2 .dbyt 0FFF2h -001C96r 1 FF F3 .dbyt 0FFF3h -001C98r 1 FF F4 .dbyt 0FFF4h -001C9Ar 1 FF F5 .dbyt 0FFF5h -001C9Cr 1 FF F6 .dbyt 0FFF6h -001C9Er 1 FF F7 .dbyt 0FFF7h -001CA0r 1 FF F8 .dbyt 0FFF8h -001CA2r 1 FF F9 .dbyt 0FFF9h -001CA4r 1 FF FA .dbyt 0FFFAh -001CA6r 1 FF FB .dbyt 0FFFBh -001CA8r 1 FF FC .dbyt 0FFFCh -001CAAr 1 FF FD .dbyt 0FFFDh -001CACr 1 FF FE .dbyt 0FFFEh -001CAEr 1 FF FF .dbyt 0FFFFh +00191Ar 1 ; alternative hex values, uppercase +00191Ar 1 00 00 .dbyt 0h +00191Cr 1 00 01 .dbyt 1h +00191Er 1 00 02 .dbyt 2h +001920r 1 00 03 .dbyt 3h +001922r 1 00 04 .dbyt 4h +001924r 1 00 05 .dbyt 5h +001926r 1 00 06 .dbyt 6h +001928r 1 00 07 .dbyt 7h +00192Ar 1 00 08 .dbyt 8h +00192Cr 1 00 09 .dbyt 9h +00192Er 1 00 0A .dbyt 0Ah +001930r 1 00 0B .dbyt 0Bh +001932r 1 00 0C .dbyt 0Ch +001934r 1 00 0D .dbyt 0Dh +001936r 1 00 0E .dbyt 0Eh +001938r 1 00 0F .dbyt 0Fh +00193Ar 1 00 10 .dbyt 10h +00193Cr 1 00 11 .dbyt 11h +00193Er 1 00 12 .dbyt 12h +001940r 1 00 13 .dbyt 13h +001942r 1 00 70 .dbyt 70h +001944r 1 00 71 .dbyt 71h +001946r 1 00 72 .dbyt 72h +001948r 1 00 73 .dbyt 73h +00194Ar 1 00 74 .dbyt 74h +00194Cr 1 00 75 .dbyt 75h +00194Er 1 00 76 .dbyt 76h +001950r 1 00 77 .dbyt 77h +001952r 1 00 78 .dbyt 78h +001954r 1 00 79 .dbyt 79h +001956r 1 00 7A .dbyt 7Ah +001958r 1 00 7B .dbyt 7Bh +00195Ar 1 00 7C .dbyt 7Ch +00195Cr 1 00 7D .dbyt 7Dh +00195Er 1 00 7E .dbyt 7Eh +001960r 1 00 7F .dbyt 7Fh +001962r 1 00 80 .dbyt 80h +001964r 1 00 81 .dbyt 81h +001966r 1 00 82 .dbyt 82h +001968r 1 00 83 .dbyt 83h +00196Ar 1 00 84 .dbyt 84h +00196Cr 1 00 85 .dbyt 85h +00196Er 1 00 86 .dbyt 86h +001970r 1 00 F0 .dbyt 0F0h +001972r 1 00 F1 .dbyt 0F1h +001974r 1 00 F2 .dbyt 0F2h +001976r 1 00 F3 .dbyt 0F3h +001978r 1 00 F4 .dbyt 0F4h +00197Ar 1 00 F5 .dbyt 0F5h +00197Cr 1 00 F6 .dbyt 0F6h +00197Er 1 00 F7 .dbyt 0F7h +001980r 1 00 F8 .dbyt 0F8h +001982r 1 00 F9 .dbyt 0F9h +001984r 1 00 FA .dbyt 0FAh +001986r 1 00 FB .dbyt 0FBh +001988r 1 00 FC .dbyt 0FCh +00198Ar 1 00 FD .dbyt 0FDh +00198Cr 1 00 FE .dbyt 0FEh +00198Er 1 00 FF .dbyt 0FFh +001990r 1 01 00 .dbyt 100h +001992r 1 01 01 .dbyt 101h +001994r 1 01 02 .dbyt 102h +001996r 1 01 03 .dbyt 103h +001998r 1 0F D2 .dbyt 0FD2h +00199Ar 1 0F D3 .dbyt 0FD3h +00199Cr 1 0F D4 .dbyt 0FD4h +00199Er 1 0F D5 .dbyt 0FD5h +0019A0r 1 0F D6 .dbyt 0FD6h +0019A2r 1 0F D7 .dbyt 0FD7h +0019A4r 1 0F D8 .dbyt 0FD8h +0019A6r 1 0F D9 .dbyt 0FD9h +0019A8r 1 0F DA .dbyt 0FDAh +0019AAr 1 0F DB .dbyt 0FDBh +0019ACr 1 0F DC .dbyt 0FDCh +0019AEr 1 0F DD .dbyt 0FDDh +0019B0r 1 0F DE .dbyt 0FDEh +0019B2r 1 0F DF .dbyt 0FDFh +0019B4r 1 0F E0 .dbyt 0FE0h +0019B6r 1 0F E1 .dbyt 0FE1h +0019B8r 1 0F E2 .dbyt 0FE2h +0019BAr 1 0F E3 .dbyt 0FE3h +0019BCr 1 0F E4 .dbyt 0FE4h +0019BEr 1 0F E5 .dbyt 0FE5h +0019C0r 1 0F E6 .dbyt 0FE6h +0019C2r 1 0F E7 .dbyt 0FE7h +0019C4r 1 0F E8 .dbyt 0FE8h +0019C6r 1 0F E9 .dbyt 0FE9h +0019C8r 1 0F EA .dbyt 0FEAh +0019CAr 1 0F EB .dbyt 0FEBh +0019CCr 1 0F EC .dbyt 0FECh +0019CEr 1 0F ED .dbyt 0FEDh +0019D0r 1 0F EE .dbyt 0FEEh +0019D2r 1 0F EF .dbyt 0FEFh +0019D4r 1 0F F0 .dbyt 0FF0h +0019D6r 1 0F F1 .dbyt 0FF1h +0019D8r 1 0F F2 .dbyt 0FF2h +0019DAr 1 0F F3 .dbyt 0FF3h +0019DCr 1 0F F4 .dbyt 0FF4h +0019DEr 1 0F F5 .dbyt 0FF5h +0019E0r 1 0F F6 .dbyt 0FF6h +0019E2r 1 0F F7 .dbyt 0FF7h +0019E4r 1 0F F8 .dbyt 0FF8h +0019E6r 1 0F F9 .dbyt 0FF9h +0019E8r 1 0F FA .dbyt 0FFAh +0019EAr 1 0F FB .dbyt 0FFBh +0019ECr 1 0F FC .dbyt 0FFCh +0019EEr 1 0F FD .dbyt 0FFDh +0019F0r 1 0F FE .dbyt 0FFEh +0019F2r 1 0F FF .dbyt 0FFFh +0019F4r 1 10 00 .dbyt 1000h +0019F6r 1 10 01 .dbyt 1001h +0019F8r 1 10 02 .dbyt 1002h +0019FAr 1 10 03 .dbyt 1003h +0019FCr 1 10 04 .dbyt 1004h +0019FEr 1 10 05 .dbyt 1005h +001A00r 1 10 06 .dbyt 1006h +001A02r 1 10 07 .dbyt 1007h +001A04r 1 10 08 .dbyt 1008h +001A06r 1 7F F0 .dbyt 7FF0h +001A08r 1 7F F1 .dbyt 7FF1h +001A0Ar 1 7F F2 .dbyt 7FF2h +001A0Cr 1 7F F3 .dbyt 7FF3h +001A0Er 1 7F F4 .dbyt 7FF4h +001A10r 1 7F F5 .dbyt 7FF5h +001A12r 1 7F F6 .dbyt 7FF6h +001A14r 1 7F F7 .dbyt 7FF7h +001A16r 1 7F F8 .dbyt 7FF8h +001A18r 1 7F F9 .dbyt 7FF9h +001A1Ar 1 7F FA .dbyt 7FFAh +001A1Cr 1 7F FB .dbyt 7FFBh +001A1Er 1 7F FC .dbyt 7FFCh +001A20r 1 7F FD .dbyt 7FFDh +001A22r 1 7F FE .dbyt 7FFEh +001A24r 1 7F FF .dbyt 7FFFh +001A26r 1 80 00 .dbyt 8000h +001A28r 1 80 01 .dbyt 8001h +001A2Ar 1 80 02 .dbyt 8002h +001A2Cr 1 80 03 .dbyt 8003h +001A2Er 1 80 04 .dbyt 8004h +001A30r 1 80 05 .dbyt 8005h +001A32r 1 80 06 .dbyt 8006h +001A34r 1 80 07 .dbyt 8007h +001A36r 1 80 08 .dbyt 8008h +001A38r 1 80 09 .dbyt 8009h +001A3Ar 1 80 0A .dbyt 800Ah +001A3Cr 1 80 0B .dbyt 800Bh +001A3Er 1 9F E1 .dbyt 9FE1h +001A40r 1 9F E2 .dbyt 9FE2h +001A42r 1 9F E3 .dbyt 9FE3h +001A44r 1 9F E4 .dbyt 9FE4h +001A46r 1 9F E5 .dbyt 9FE5h +001A48r 1 9F E6 .dbyt 9FE6h +001A4Ar 1 9F E7 .dbyt 9FE7h +001A4Cr 1 9F E8 .dbyt 9FE8h +001A4Er 1 9F E9 .dbyt 9FE9h +001A50r 1 9F EA .dbyt 9FEAh +001A52r 1 9F EB .dbyt 9FEBh +001A54r 1 9F EC .dbyt 9FECh +001A56r 1 9F ED .dbyt 9FEDh +001A58r 1 9F EE .dbyt 9FEEh +001A5Ar 1 9F EF .dbyt 9FEFh +001A5Cr 1 9F F0 .dbyt 9FF0h +001A5Er 1 9F F1 .dbyt 9FF1h +001A60r 1 9F F2 .dbyt 9FF2h +001A62r 1 9F F3 .dbyt 9FF3h +001A64r 1 9F F4 .dbyt 9FF4h +001A66r 1 9F F5 .dbyt 9FF5h +001A68r 1 9F F6 .dbyt 9FF6h +001A6Ar 1 9F F7 .dbyt 9FF7h +001A6Cr 1 9F F8 .dbyt 9FF8h +001A6Er 1 9F F9 .dbyt 9FF9h +001A70r 1 9F FA .dbyt 9FFAh +001A72r 1 9F FB .dbyt 9FFBh +001A74r 1 9F FC .dbyt 9FFCh +001A76r 1 9F FD .dbyt 9FFDh +001A78r 1 9F FE .dbyt 9FFEh +001A7Ar 1 9F FF .dbyt 9FFFh +001A7Cr 1 A0 00 .dbyt 0A000h +001A7Er 1 A0 01 .dbyt 0A001h +001A80r 1 A0 02 .dbyt 0A002h +001A82r 1 A0 03 .dbyt 0A003h +001A84r 1 A0 04 .dbyt 0A004h +001A86r 1 A0 05 .dbyt 0A005h +001A88r 1 A0 06 .dbyt 0A006h +001A8Ar 1 A0 07 .dbyt 0A007h +001A8Cr 1 A0 08 .dbyt 0A008h +001A8Er 1 A0 09 .dbyt 0A009h +001A90r 1 A0 0A .dbyt 0A00Ah +001A92r 1 A0 0B .dbyt 0A00Bh +001A94r 1 A0 0C .dbyt 0A00Ch +001A96r 1 A0 0D .dbyt 0A00Dh +001A98r 1 A0 0E .dbyt 0A00Eh +001A9Ar 1 A0 0F .dbyt 0A00Fh +001A9Cr 1 AF E1 .dbyt 0AFE1h +001A9Er 1 AF E2 .dbyt 0AFE2h +001AA0r 1 AF E3 .dbyt 0AFE3h +001AA2r 1 AF E4 .dbyt 0AFE4h +001AA4r 1 AF E5 .dbyt 0AFE5h +001AA6r 1 AF E6 .dbyt 0AFE6h +001AA8r 1 AF E7 .dbyt 0AFE7h +001AAAr 1 AF E8 .dbyt 0AFE8h +001AACr 1 AF E9 .dbyt 0AFE9h +001AAEr 1 AF EA .dbyt 0AFEAh +001AB0r 1 AF EB .dbyt 0AFEBh +001AB2r 1 AF EC .dbyt 0AFECh +001AB4r 1 AF ED .dbyt 0AFEDh +001AB6r 1 AF EE .dbyt 0AFEEh +001AB8r 1 AF EF .dbyt 0AFEFh +001ABAr 1 AF F0 .dbyt 0AFF0h +001ABCr 1 AF F1 .dbyt 0AFF1h +001ABEr 1 AF F2 .dbyt 0AFF2h +001AC0r 1 AF F3 .dbyt 0AFF3h +001AC2r 1 AF F4 .dbyt 0AFF4h +001AC4r 1 AF F5 .dbyt 0AFF5h +001AC6r 1 AF F6 .dbyt 0AFF6h +001AC8r 1 AF F7 .dbyt 0AFF7h +001ACAr 1 AF F8 .dbyt 0AFF8h +001ACCr 1 AF F9 .dbyt 0AFF9h +001ACEr 1 AF FA .dbyt 0AFFAh +001AD0r 1 AF FB .dbyt 0AFFBh +001AD2r 1 AF FC .dbyt 0AFFCh +001AD4r 1 AF FD .dbyt 0AFFDh +001AD6r 1 AF FE .dbyt 0AFFEh +001AD8r 1 AF FF .dbyt 0AFFFh +001ADAr 1 B0 00 .dbyt 0B000h +001ADCr 1 B0 01 .dbyt 0B001h +001ADEr 1 B0 02 .dbyt 0B002h +001AE0r 1 B0 03 .dbyt 0B003h +001AE2r 1 B0 04 .dbyt 0B004h +001AE4r 1 B0 05 .dbyt 0B005h +001AE6r 1 B0 06 .dbyt 0B006h +001AE8r 1 B0 07 .dbyt 0B007h +001AEAr 1 B0 08 .dbyt 0B008h +001AECr 1 B0 09 .dbyt 0B009h +001AEEr 1 B0 0A .dbyt 0B00Ah +001AF0r 1 B0 0B .dbyt 0B00Bh +001AF2r 1 B0 0C .dbyt 0B00Ch +001AF4r 1 B0 0D .dbyt 0B00Dh +001AF6r 1 B0 0E .dbyt 0B00Eh +001AF8r 1 B0 0F .dbyt 0B00Fh +001AFAr 1 BF E1 .dbyt 0BFE1h +001AFCr 1 BF E2 .dbyt 0BFE2h +001AFEr 1 BF E3 .dbyt 0BFE3h +001B00r 1 BF E4 .dbyt 0BFE4h +001B02r 1 BF E5 .dbyt 0BFE5h +001B04r 1 BF E6 .dbyt 0BFE6h +001B06r 1 BF E7 .dbyt 0BFE7h +001B08r 1 BF E8 .dbyt 0BFE8h +001B0Ar 1 BF E9 .dbyt 0BFE9h +001B0Cr 1 BF EA .dbyt 0BFEAh +001B0Er 1 BF EB .dbyt 0BFEBh +001B10r 1 BF EC .dbyt 0BFECh +001B12r 1 BF ED .dbyt 0BFEDh +001B14r 1 BF EE .dbyt 0BFEEh +001B16r 1 BF EF .dbyt 0BFEFh +001B18r 1 BF F0 .dbyt 0BFF0h +001B1Ar 1 BF F1 .dbyt 0BFF1h +001B1Cr 1 BF F2 .dbyt 0BFF2h +001B1Er 1 BF F3 .dbyt 0BFF3h +001B20r 1 BF F4 .dbyt 0BFF4h +001B22r 1 BF F5 .dbyt 0BFF5h +001B24r 1 BF F6 .dbyt 0BFF6h +001B26r 1 BF F7 .dbyt 0BFF7h +001B28r 1 BF F8 .dbyt 0BFF8h +001B2Ar 1 BF F9 .dbyt 0BFF9h +001B2Cr 1 BF FA .dbyt 0BFFAh +001B2Er 1 BF FB .dbyt 0BFFBh +001B30r 1 BF FC .dbyt 0BFFCh +001B32r 1 BF FD .dbyt 0BFFDh +001B34r 1 BF FE .dbyt 0BFFEh +001B36r 1 BF FF .dbyt 0BFFFh +001B38r 1 C0 00 .dbyt 0C000h +001B3Ar 1 C0 01 .dbyt 0C001h +001B3Cr 1 C0 02 .dbyt 0C002h +001B3Er 1 C0 03 .dbyt 0C003h +001B40r 1 C0 04 .dbyt 0C004h +001B42r 1 C0 05 .dbyt 0C005h +001B44r 1 C0 06 .dbyt 0C006h +001B46r 1 C0 07 .dbyt 0C007h +001B48r 1 C0 08 .dbyt 0C008h +001B4Ar 1 C0 09 .dbyt 0C009h +001B4Cr 1 C0 0A .dbyt 0C00Ah +001B4Er 1 C0 0B .dbyt 0C00Bh +001B50r 1 C0 0C .dbyt 0C00Ch +001B52r 1 C0 0D .dbyt 0C00Dh +001B54r 1 C0 0E .dbyt 0C00Eh +001B56r 1 C0 0F .dbyt 0C00Fh +001B58r 1 CF E1 .dbyt 0CFE1h +001B5Ar 1 CF E2 .dbyt 0CFE2h +001B5Cr 1 CF E3 .dbyt 0CFE3h +001B5Er 1 CF E4 .dbyt 0CFE4h +001B60r 1 CF E5 .dbyt 0CFE5h +001B62r 1 CF E6 .dbyt 0CFE6h +001B64r 1 CF E7 .dbyt 0CFE7h +001B66r 1 CF E8 .dbyt 0CFE8h +001B68r 1 CF E9 .dbyt 0CFE9h +001B6Ar 1 CF EA .dbyt 0CFEAh +001B6Cr 1 CF EB .dbyt 0CFEBh +001B6Er 1 CF EC .dbyt 0CFECh +001B70r 1 CF ED .dbyt 0CFEDh +001B72r 1 CF EE .dbyt 0CFEEh +001B74r 1 CF EF .dbyt 0CFEFh +001B76r 1 CF F0 .dbyt 0CFF0h +001B78r 1 CF F1 .dbyt 0CFF1h +001B7Ar 1 CF F2 .dbyt 0CFF2h +001B7Cr 1 CF F3 .dbyt 0CFF3h +001B7Er 1 CF F4 .dbyt 0CFF4h +001B80r 1 CF F5 .dbyt 0CFF5h +001B82r 1 CF F6 .dbyt 0CFF6h +001B84r 1 CF F7 .dbyt 0CFF7h +001B86r 1 CF F8 .dbyt 0CFF8h +001B88r 1 CF F9 .dbyt 0CFF9h +001B8Ar 1 CF FA .dbyt 0CFFAh +001B8Cr 1 CF FB .dbyt 0CFFBh +001B8Er 1 CF FC .dbyt 0CFFCh +001B90r 1 CF FD .dbyt 0CFFDh +001B92r 1 CF FE .dbyt 0CFFEh +001B94r 1 CF FF .dbyt 0CFFFh +001B96r 1 D0 00 .dbyt 0D000h +001B98r 1 D0 01 .dbyt 0D001h +001B9Ar 1 D0 02 .dbyt 0D002h +001B9Cr 1 D0 03 .dbyt 0D003h +001B9Er 1 D0 04 .dbyt 0D004h +001BA0r 1 D0 05 .dbyt 0D005h +001BA2r 1 D0 06 .dbyt 0D006h +001BA4r 1 D0 07 .dbyt 0D007h +001BA6r 1 D0 08 .dbyt 0D008h +001BA8r 1 D0 09 .dbyt 0D009h +001BAAr 1 D0 0A .dbyt 0D00Ah +001BACr 1 D0 0B .dbyt 0D00Bh +001BAEr 1 D0 0C .dbyt 0D00Ch +001BB0r 1 D0 0D .dbyt 0D00Dh +001BB2r 1 D0 0E .dbyt 0D00Eh +001BB4r 1 D0 0F .dbyt 0D00Fh +001BB6r 1 DF E1 .dbyt 0DFE1h +001BB8r 1 DF E2 .dbyt 0DFE2h +001BBAr 1 DF E3 .dbyt 0DFE3h +001BBCr 1 DF E4 .dbyt 0DFE4h +001BBEr 1 DF E5 .dbyt 0DFE5h +001BC0r 1 DF E6 .dbyt 0DFE6h +001BC2r 1 DF E7 .dbyt 0DFE7h +001BC4r 1 DF E8 .dbyt 0DFE8h +001BC6r 1 DF E9 .dbyt 0DFE9h +001BC8r 1 DF EA .dbyt 0DFEAh +001BCAr 1 DF EB .dbyt 0DFEBh +001BCCr 1 DF EC .dbyt 0DFECh +001BCEr 1 DF ED .dbyt 0DFEDh +001BD0r 1 DF EE .dbyt 0DFEEh +001BD2r 1 DF EF .dbyt 0DFEFh +001BD4r 1 DF F0 .dbyt 0DFF0h +001BD6r 1 DF F1 .dbyt 0DFF1h +001BD8r 1 DF F2 .dbyt 0DFF2h +001BDAr 1 DF F3 .dbyt 0DFF3h +001BDCr 1 DF F4 .dbyt 0DFF4h +001BDEr 1 DF F5 .dbyt 0DFF5h +001BE0r 1 DF F6 .dbyt 0DFF6h +001BE2r 1 DF F7 .dbyt 0DFF7h +001BE4r 1 DF F8 .dbyt 0DFF8h +001BE6r 1 DF F9 .dbyt 0DFF9h +001BE8r 1 DF FA .dbyt 0DFFAh +001BEAr 1 DF FB .dbyt 0DFFBh +001BECr 1 DF FC .dbyt 0DFFCh +001BEEr 1 DF FD .dbyt 0DFFDh +001BF0r 1 DF FE .dbyt 0DFFEh +001BF2r 1 DF FF .dbyt 0DFFFh +001BF4r 1 E0 00 .dbyt 0E000h +001BF6r 1 E0 01 .dbyt 0E001h +001BF8r 1 E0 02 .dbyt 0E002h +001BFAr 1 E0 03 .dbyt 0E003h +001BFCr 1 E0 04 .dbyt 0E004h +001BFEr 1 E0 05 .dbyt 0E005h +001C00r 1 E0 06 .dbyt 0E006h +001C02r 1 E0 07 .dbyt 0E007h +001C04r 1 E0 08 .dbyt 0E008h +001C06r 1 E0 09 .dbyt 0E009h +001C08r 1 E0 0A .dbyt 0E00Ah +001C0Ar 1 E0 0B .dbyt 0E00Bh +001C0Cr 1 E0 0C .dbyt 0E00Ch +001C0Er 1 E0 0D .dbyt 0E00Dh +001C10r 1 E0 0E .dbyt 0E00Eh +001C12r 1 E0 0F .dbyt 0E00Fh +001C14r 1 EF E1 .dbyt 0EFE1h +001C16r 1 EF E2 .dbyt 0EFE2h +001C18r 1 EF E3 .dbyt 0EFE3h +001C1Ar 1 EF E4 .dbyt 0EFE4h +001C1Cr 1 EF E5 .dbyt 0EFE5h +001C1Er 1 EF E6 .dbyt 0EFE6h +001C20r 1 EF E7 .dbyt 0EFE7h +001C22r 1 EF E8 .dbyt 0EFE8h +001C24r 1 EF E9 .dbyt 0EFE9h +001C26r 1 EF EA .dbyt 0EFEAh +001C28r 1 EF EB .dbyt 0EFEBh +001C2Ar 1 EF EC .dbyt 0EFECh +001C2Cr 1 EF ED .dbyt 0EFEDh +001C2Er 1 EF EE .dbyt 0EFEEh +001C30r 1 EF EF .dbyt 0EFEFh +001C32r 1 EF F0 .dbyt 0EFF0h +001C34r 1 EF F1 .dbyt 0EFF1h +001C36r 1 EF F2 .dbyt 0EFF2h +001C38r 1 EF F3 .dbyt 0EFF3h +001C3Ar 1 EF F4 .dbyt 0EFF4h +001C3Cr 1 EF F5 .dbyt 0EFF5h +001C3Er 1 EF F6 .dbyt 0EFF6h +001C40r 1 EF F7 .dbyt 0EFF7h +001C42r 1 EF F8 .dbyt 0EFF8h +001C44r 1 EF F9 .dbyt 0EFF9h +001C46r 1 EF FA .dbyt 0EFFAh +001C48r 1 EF FB .dbyt 0EFFBh +001C4Ar 1 EF FC .dbyt 0EFFCh +001C4Cr 1 EF FD .dbyt 0EFFDh +001C4Er 1 EF FE .dbyt 0EFFEh +001C50r 1 EF FF .dbyt 0EFFFh +001C52r 1 F0 00 .dbyt 0F000h +001C54r 1 F0 01 .dbyt 0F001h +001C56r 1 F0 02 .dbyt 0F002h +001C58r 1 F0 03 .dbyt 0F003h +001C5Ar 1 F0 04 .dbyt 0F004h +001C5Cr 1 F0 05 .dbyt 0F005h +001C5Er 1 F0 06 .dbyt 0F006h +001C60r 1 F0 07 .dbyt 0F007h +001C62r 1 F0 08 .dbyt 0F008h +001C64r 1 F0 09 .dbyt 0F009h +001C66r 1 F0 0A .dbyt 0F00Ah +001C68r 1 F0 0B .dbyt 0F00Bh +001C6Ar 1 F0 0C .dbyt 0F00Ch +001C6Cr 1 F0 0D .dbyt 0F00Dh +001C6Er 1 F0 0E .dbyt 0F00Eh +001C70r 1 F0 0F .dbyt 0F00Fh +001C72r 1 FF E1 .dbyt 0FFE1h +001C74r 1 FF E2 .dbyt 0FFE2h +001C76r 1 FF E3 .dbyt 0FFE3h +001C78r 1 FF E4 .dbyt 0FFE4h +001C7Ar 1 FF E5 .dbyt 0FFE5h +001C7Cr 1 FF E6 .dbyt 0FFE6h +001C7Er 1 FF E7 .dbyt 0FFE7h +001C80r 1 FF E8 .dbyt 0FFE8h +001C82r 1 FF E9 .dbyt 0FFE9h +001C84r 1 FF EA .dbyt 0FFEAh +001C86r 1 FF EB .dbyt 0FFEBh +001C88r 1 FF EC .dbyt 0FFECh +001C8Ar 1 FF ED .dbyt 0FFEDh +001C8Cr 1 FF EE .dbyt 0FFEEh +001C8Er 1 FF EF .dbyt 0FFEFh +001C90r 1 FF F0 .dbyt 0FFF0h +001C92r 1 FF F1 .dbyt 0FFF1h +001C94r 1 FF F2 .dbyt 0FFF2h +001C96r 1 FF F3 .dbyt 0FFF3h +001C98r 1 FF F4 .dbyt 0FFF4h +001C9Ar 1 FF F5 .dbyt 0FFF5h +001C9Cr 1 FF F6 .dbyt 0FFF6h +001C9Er 1 FF F7 .dbyt 0FFF7h +001CA0r 1 FF F8 .dbyt 0FFF8h +001CA2r 1 FF F9 .dbyt 0FFF9h +001CA4r 1 FF FA .dbyt 0FFFAh +001CA6r 1 FF FB .dbyt 0FFFBh +001CA8r 1 FF FC .dbyt 0FFFCh +001CAAr 1 FF FD .dbyt 0FFFDh +001CACr 1 FF FE .dbyt 0FFFEh +001CAEr 1 FF FF .dbyt 0FFFFh 001CB0r 1 -001CB0r 1 ; alternative 4-digit hex values -001CB0r 1 00 00 .dbyt 0000h -001CB2r 1 00 01 .dbyt 0001h -001CB4r 1 00 02 .dbyt 0002h -001CB6r 1 00 03 .dbyt 0003h -001CB8r 1 00 04 .dbyt 0004h -001CBAr 1 00 05 .dbyt 0005h -001CBCr 1 00 06 .dbyt 0006h -001CBEr 1 00 07 .dbyt 0007h -001CC0r 1 00 08 .dbyt 0008h -001CC2r 1 00 09 .dbyt 0009h -001CC4r 1 00 0A .dbyt 000ah -001CC6r 1 00 0B .dbyt 000bh -001CC8r 1 00 0C .dbyt 000ch -001CCAr 1 00 0D .dbyt 000dh -001CCCr 1 00 0E .dbyt 000eh -001CCEr 1 00 0F .dbyt 000fh -001CD0r 1 00 10 .dbyt 0010h -001CD2r 1 00 11 .dbyt 0011h -001CD4r 1 00 12 .dbyt 0012h -001CD6r 1 00 13 .dbyt 0013h -001CD8r 1 00 70 .dbyt 0070h -001CDAr 1 00 71 .dbyt 0071h -001CDCr 1 00 72 .dbyt 0072h -001CDEr 1 00 73 .dbyt 0073h -001CE0r 1 00 74 .dbyt 0074h -001CE2r 1 00 75 .dbyt 0075h -001CE4r 1 00 76 .dbyt 0076h -001CE6r 1 00 77 .dbyt 0077h -001CE8r 1 00 78 .dbyt 0078h -001CEAr 1 00 79 .dbyt 0079h -001CECr 1 00 7A .dbyt 007ah -001CEEr 1 00 7B .dbyt 007bh -001CF0r 1 00 7C .dbyt 007ch -001CF2r 1 00 7D .dbyt 007dh -001CF4r 1 00 7E .dbyt 007eh -001CF6r 1 00 7F .dbyt 007fh -001CF8r 1 00 80 .dbyt 0080h -001CFAr 1 00 81 .dbyt 0081h -001CFCr 1 00 82 .dbyt 0082h -001CFEr 1 00 83 .dbyt 0083h -001D00r 1 00 84 .dbyt 0084h -001D02r 1 00 85 .dbyt 0085h -001D04r 1 00 86 .dbyt 0086h -001D06r 1 00 F0 .dbyt 00f0h -001D08r 1 00 F1 .dbyt 00f1h -001D0Ar 1 00 F2 .dbyt 00f2h -001D0Cr 1 00 F3 .dbyt 00f3h -001D0Er 1 00 F4 .dbyt 00f4h -001D10r 1 00 F5 .dbyt 00f5h -001D12r 1 00 F6 .dbyt 00f6h -001D14r 1 00 F7 .dbyt 00f7h -001D16r 1 00 F8 .dbyt 00f8h -001D18r 1 00 F9 .dbyt 00f9h -001D1Ar 1 00 FA .dbyt 00fah -001D1Cr 1 00 FB .dbyt 00fbh -001D1Er 1 00 FC .dbyt 00fch -001D20r 1 00 FD .dbyt 00fdh -001D22r 1 00 FE .dbyt 00feh -001D24r 1 00 FF .dbyt 00ffh -001D26r 1 01 00 .dbyt 0100h -001D28r 1 01 01 .dbyt 0101h -001D2Ar 1 01 02 .dbyt 0102h -001D2Cr 1 01 03 .dbyt 0103h -001D2Er 1 0F D2 .dbyt 0fd2h -001D30r 1 0F D3 .dbyt 0fd3h -001D32r 1 0F D4 .dbyt 0fd4h -001D34r 1 0F D5 .dbyt 0fd5h -001D36r 1 0F D6 .dbyt 0fd6h -001D38r 1 0F D7 .dbyt 0fd7h -001D3Ar 1 0F D8 .dbyt 0fd8h -001D3Cr 1 0F D9 .dbyt 0fd9h -001D3Er 1 0F DA .dbyt 0fdah -001D40r 1 0F DB .dbyt 0fdbh -001D42r 1 0F DC .dbyt 0fdch -001D44r 1 0F DD .dbyt 0fddh -001D46r 1 0F DE .dbyt 0fdeh -001D48r 1 0F DF .dbyt 0fdfh -001D4Ar 1 0F E0 .dbyt 0fe0h -001D4Cr 1 0F E1 .dbyt 0fe1h -001D4Er 1 0F E2 .dbyt 0fe2h -001D50r 1 0F E3 .dbyt 0fe3h -001D52r 1 0F E4 .dbyt 0fe4h -001D54r 1 0F E5 .dbyt 0fe5h -001D56r 1 0F E6 .dbyt 0fe6h -001D58r 1 0F E7 .dbyt 0fe7h -001D5Ar 1 0F E8 .dbyt 0fe8h -001D5Cr 1 0F E9 .dbyt 0fe9h -001D5Er 1 0F EA .dbyt 0feah -001D60r 1 0F EB .dbyt 0febh -001D62r 1 0F EC .dbyt 0fech -001D64r 1 0F ED .dbyt 0fedh -001D66r 1 0F EE .dbyt 0feeh -001D68r 1 0F EF .dbyt 0fefh -001D6Ar 1 0F F0 .dbyt 0ff0h -001D6Cr 1 0F F1 .dbyt 0ff1h -001D6Er 1 0F F2 .dbyt 0ff2h -001D70r 1 0F F3 .dbyt 0ff3h -001D72r 1 0F F4 .dbyt 0ff4h -001D74r 1 0F F5 .dbyt 0ff5h -001D76r 1 0F F6 .dbyt 0ff6h -001D78r 1 0F F7 .dbyt 0ff7h -001D7Ar 1 0F F8 .dbyt 0ff8h -001D7Cr 1 0F F9 .dbyt 0ff9h -001D7Er 1 0F FA .dbyt 0ffah -001D80r 1 0F FB .dbyt 0ffbh -001D82r 1 0F FC .dbyt 0ffch -001D84r 1 0F FD .dbyt 0ffdh -001D86r 1 0F FE .dbyt 0ffeh -001D88r 1 0F FF .dbyt 0fffh -001D8Ar 1 10 00 .dbyt 1000h -001D8Cr 1 10 01 .dbyt 1001h -001D8Er 1 10 02 .dbyt 1002h -001D90r 1 10 03 .dbyt 1003h -001D92r 1 10 04 .dbyt 1004h -001D94r 1 10 05 .dbyt 1005h -001D96r 1 10 06 .dbyt 1006h -001D98r 1 10 07 .dbyt 1007h -001D9Ar 1 10 08 .dbyt 1008h -001D9Cr 1 7F F0 .dbyt 7ff0h -001D9Er 1 7F F1 .dbyt 7ff1h -001DA0r 1 7F F2 .dbyt 7ff2h -001DA2r 1 7F F3 .dbyt 7ff3h -001DA4r 1 7F F4 .dbyt 7ff4h -001DA6r 1 7F F5 .dbyt 7ff5h -001DA8r 1 7F F6 .dbyt 7ff6h -001DAAr 1 7F F7 .dbyt 7ff7h -001DACr 1 7F F8 .dbyt 7ff8h -001DAEr 1 7F F9 .dbyt 7ff9h -001DB0r 1 7F FA .dbyt 7ffah -001DB2r 1 7F FB .dbyt 7ffbh -001DB4r 1 7F FC .dbyt 7ffch -001DB6r 1 7F FD .dbyt 7ffdh -001DB8r 1 7F FE .dbyt 7ffeh -001DBAr 1 7F FF .dbyt 7fffh -001DBCr 1 80 00 .dbyt 8000h -001DBEr 1 80 01 .dbyt 8001h -001DC0r 1 80 02 .dbyt 8002h -001DC2r 1 80 03 .dbyt 8003h -001DC4r 1 80 04 .dbyt 8004h -001DC6r 1 80 05 .dbyt 8005h -001DC8r 1 80 06 .dbyt 8006h -001DCAr 1 80 07 .dbyt 8007h -001DCCr 1 80 08 .dbyt 8008h -001DCEr 1 80 09 .dbyt 8009h -001DD0r 1 80 0A .dbyt 800ah -001DD2r 1 80 0B .dbyt 800bh -001DD4r 1 9F E1 .dbyt 9fe1h -001DD6r 1 9F E2 .dbyt 9fe2h -001DD8r 1 9F E3 .dbyt 9fe3h -001DDAr 1 9F E4 .dbyt 9fe4h -001DDCr 1 9F E5 .dbyt 9fe5h -001DDEr 1 9F E6 .dbyt 9fe6h -001DE0r 1 9F E7 .dbyt 9fe7h -001DE2r 1 9F E8 .dbyt 9fe8h -001DE4r 1 9F E9 .dbyt 9fe9h -001DE6r 1 9F EA .dbyt 9feah -001DE8r 1 9F EB .dbyt 9febh -001DEAr 1 9F EC .dbyt 9fech -001DECr 1 9F ED .dbyt 9fedh -001DEEr 1 9F EE .dbyt 9feeh -001DF0r 1 9F EF .dbyt 9fefh -001DF2r 1 9F F0 .dbyt 9ff0h -001DF4r 1 9F F1 .dbyt 9ff1h -001DF6r 1 9F F2 .dbyt 9ff2h -001DF8r 1 9F F3 .dbyt 9ff3h -001DFAr 1 9F F4 .dbyt 9ff4h -001DFCr 1 9F F5 .dbyt 9ff5h -001DFEr 1 9F F6 .dbyt 9ff6h -001E00r 1 9F F7 .dbyt 9ff7h -001E02r 1 9F F8 .dbyt 9ff8h -001E04r 1 9F F9 .dbyt 9ff9h -001E06r 1 9F FA .dbyt 9ffah -001E08r 1 9F FB .dbyt 9ffbh -001E0Ar 1 9F FC .dbyt 9ffch -001E0Cr 1 9F FD .dbyt 9ffdh -001E0Er 1 9F FE .dbyt 9ffeh -001E10r 1 9F FF .dbyt 9fffh -001E12r 1 A0 00 .dbyt 0a000h -001E14r 1 A0 01 .dbyt 0a001h -001E16r 1 A0 02 .dbyt 0a002h -001E18r 1 A0 03 .dbyt 0a003h -001E1Ar 1 A0 04 .dbyt 0a004h -001E1Cr 1 A0 05 .dbyt 0a005h -001E1Er 1 A0 06 .dbyt 0a006h -001E20r 1 A0 07 .dbyt 0a007h -001E22r 1 A0 08 .dbyt 0a008h -001E24r 1 A0 09 .dbyt 0a009h -001E26r 1 A0 0A .dbyt 0a00ah -001E28r 1 A0 0B .dbyt 0a00bh -001E2Ar 1 A0 0C .dbyt 0a00ch -001E2Cr 1 A0 0D .dbyt 0a00dh -001E2Er 1 A0 0E .dbyt 0a00eh -001E30r 1 A0 0F .dbyt 0a00fh -001E32r 1 AF E1 .dbyt 0afe1h -001E34r 1 AF E2 .dbyt 0afe2h -001E36r 1 AF E3 .dbyt 0afe3h -001E38r 1 AF E4 .dbyt 0afe4h -001E3Ar 1 AF E5 .dbyt 0afe5h -001E3Cr 1 AF E6 .dbyt 0afe6h -001E3Er 1 AF E7 .dbyt 0afe7h -001E40r 1 AF E8 .dbyt 0afe8h -001E42r 1 AF E9 .dbyt 0afe9h -001E44r 1 AF EA .dbyt 0afeah -001E46r 1 AF EB .dbyt 0afebh -001E48r 1 AF EC .dbyt 0afech -001E4Ar 1 AF ED .dbyt 0afedh -001E4Cr 1 AF EE .dbyt 0afeeh -001E4Er 1 AF EF .dbyt 0afefh -001E50r 1 AF F0 .dbyt 0aff0h -001E52r 1 AF F1 .dbyt 0aff1h -001E54r 1 AF F2 .dbyt 0aff2h -001E56r 1 AF F3 .dbyt 0aff3h -001E58r 1 AF F4 .dbyt 0aff4h -001E5Ar 1 AF F5 .dbyt 0aff5h -001E5Cr 1 AF F6 .dbyt 0aff6h -001E5Er 1 AF F7 .dbyt 0aff7h -001E60r 1 AF F8 .dbyt 0aff8h -001E62r 1 AF F9 .dbyt 0aff9h -001E64r 1 AF FA .dbyt 0affah -001E66r 1 AF FB .dbyt 0affbh -001E68r 1 AF FC .dbyt 0affch -001E6Ar 1 AF FD .dbyt 0affdh -001E6Cr 1 AF FE .dbyt 0affeh -001E6Er 1 AF FF .dbyt 0afffh -001E70r 1 B0 00 .dbyt 0b000h -001E72r 1 B0 01 .dbyt 0b001h -001E74r 1 B0 02 .dbyt 0b002h -001E76r 1 B0 03 .dbyt 0b003h -001E78r 1 B0 04 .dbyt 0b004h -001E7Ar 1 B0 05 .dbyt 0b005h -001E7Cr 1 B0 06 .dbyt 0b006h -001E7Er 1 B0 07 .dbyt 0b007h -001E80r 1 B0 08 .dbyt 0b008h -001E82r 1 B0 09 .dbyt 0b009h -001E84r 1 B0 0A .dbyt 0b00ah -001E86r 1 B0 0B .dbyt 0b00bh -001E88r 1 B0 0C .dbyt 0b00ch -001E8Ar 1 B0 0D .dbyt 0b00dh -001E8Cr 1 B0 0E .dbyt 0b00eh -001E8Er 1 B0 0F .dbyt 0b00fh -001E90r 1 BF E1 .dbyt 0bfe1h -001E92r 1 BF E2 .dbyt 0bfe2h -001E94r 1 BF E3 .dbyt 0bfe3h -001E96r 1 BF E4 .dbyt 0bfe4h -001E98r 1 BF E5 .dbyt 0bfe5h -001E9Ar 1 BF E6 .dbyt 0bfe6h -001E9Cr 1 BF E7 .dbyt 0bfe7h -001E9Er 1 BF E8 .dbyt 0bfe8h -001EA0r 1 BF E9 .dbyt 0bfe9h -001EA2r 1 BF EA .dbyt 0bfeah -001EA4r 1 BF EB .dbyt 0bfebh -001EA6r 1 BF EC .dbyt 0bfech -001EA8r 1 BF ED .dbyt 0bfedh -001EAAr 1 BF EE .dbyt 0bfeeh -001EACr 1 BF EF .dbyt 0bfefh -001EAEr 1 BF F0 .dbyt 0bff0h -001EB0r 1 BF F1 .dbyt 0bff1h -001EB2r 1 BF F2 .dbyt 0bff2h -001EB4r 1 BF F3 .dbyt 0bff3h -001EB6r 1 BF F4 .dbyt 0bff4h -001EB8r 1 BF F5 .dbyt 0bff5h -001EBAr 1 BF F6 .dbyt 0bff6h -001EBCr 1 BF F7 .dbyt 0bff7h -001EBEr 1 BF F8 .dbyt 0bff8h -001EC0r 1 BF F9 .dbyt 0bff9h -001EC2r 1 BF FA .dbyt 0bffah -001EC4r 1 BF FB .dbyt 0bffbh -001EC6r 1 BF FC .dbyt 0bffch -001EC8r 1 BF FD .dbyt 0bffdh -001ECAr 1 BF FE .dbyt 0bffeh -001ECCr 1 BF FF .dbyt 0bfffh -001ECEr 1 C0 00 .dbyt 0c000h -001ED0r 1 C0 01 .dbyt 0c001h -001ED2r 1 C0 02 .dbyt 0c002h -001ED4r 1 C0 03 .dbyt 0c003h -001ED6r 1 C0 04 .dbyt 0c004h -001ED8r 1 C0 05 .dbyt 0c005h -001EDAr 1 C0 06 .dbyt 0c006h -001EDCr 1 C0 07 .dbyt 0c007h -001EDEr 1 C0 08 .dbyt 0c008h -001EE0r 1 C0 09 .dbyt 0c009h -001EE2r 1 C0 0A .dbyt 0c00ah -001EE4r 1 C0 0B .dbyt 0c00bh -001EE6r 1 C0 0C .dbyt 0c00ch -001EE8r 1 C0 0D .dbyt 0c00dh -001EEAr 1 C0 0E .dbyt 0c00eh -001EECr 1 C0 0F .dbyt 0c00fh -001EEEr 1 CF E1 .dbyt 0cfe1h -001EF0r 1 CF E2 .dbyt 0cfe2h -001EF2r 1 CF E3 .dbyt 0cfe3h -001EF4r 1 CF E4 .dbyt 0cfe4h -001EF6r 1 CF E5 .dbyt 0cfe5h -001EF8r 1 CF E6 .dbyt 0cfe6h -001EFAr 1 CF E7 .dbyt 0cfe7h -001EFCr 1 CF E8 .dbyt 0cfe8h -001EFEr 1 CF E9 .dbyt 0cfe9h -001F00r 1 CF EA .dbyt 0cfeah -001F02r 1 CF EB .dbyt 0cfebh -001F04r 1 CF EC .dbyt 0cfech -001F06r 1 CF ED .dbyt 0cfedh -001F08r 1 CF EE .dbyt 0cfeeh -001F0Ar 1 CF EF .dbyt 0cfefh -001F0Cr 1 CF F0 .dbyt 0cff0h -001F0Er 1 CF F1 .dbyt 0cff1h -001F10r 1 CF F2 .dbyt 0cff2h -001F12r 1 CF F3 .dbyt 0cff3h -001F14r 1 CF F4 .dbyt 0cff4h -001F16r 1 CF F5 .dbyt 0cff5h -001F18r 1 CF F6 .dbyt 0cff6h -001F1Ar 1 CF F7 .dbyt 0cff7h -001F1Cr 1 CF F8 .dbyt 0cff8h -001F1Er 1 CF F9 .dbyt 0cff9h -001F20r 1 CF FA .dbyt 0cffah -001F22r 1 CF FB .dbyt 0cffbh -001F24r 1 CF FC .dbyt 0cffch -001F26r 1 CF FD .dbyt 0cffdh -001F28r 1 CF FE .dbyt 0cffeh -001F2Ar 1 CF FF .dbyt 0cfffh -001F2Cr 1 D0 00 .dbyt 0d000h -001F2Er 1 D0 01 .dbyt 0d001h -001F30r 1 D0 02 .dbyt 0d002h -001F32r 1 D0 03 .dbyt 0d003h -001F34r 1 D0 04 .dbyt 0d004h -001F36r 1 D0 05 .dbyt 0d005h -001F38r 1 D0 06 .dbyt 0d006h -001F3Ar 1 D0 07 .dbyt 0d007h -001F3Cr 1 D0 08 .dbyt 0d008h -001F3Er 1 D0 09 .dbyt 0d009h -001F40r 1 D0 0A .dbyt 0d00ah -001F42r 1 D0 0B .dbyt 0d00bh -001F44r 1 D0 0C .dbyt 0d00ch -001F46r 1 D0 0D .dbyt 0d00dh -001F48r 1 D0 0E .dbyt 0d00eh -001F4Ar 1 D0 0F .dbyt 0d00fh -001F4Cr 1 DF E1 .dbyt 0dfe1h -001F4Er 1 DF E2 .dbyt 0dfe2h -001F50r 1 DF E3 .dbyt 0dfe3h -001F52r 1 DF E4 .dbyt 0dfe4h -001F54r 1 DF E5 .dbyt 0dfe5h -001F56r 1 DF E6 .dbyt 0dfe6h -001F58r 1 DF E7 .dbyt 0dfe7h -001F5Ar 1 DF E8 .dbyt 0dfe8h -001F5Cr 1 DF E9 .dbyt 0dfe9h -001F5Er 1 DF EA .dbyt 0dfeah -001F60r 1 DF EB .dbyt 0dfebh -001F62r 1 DF EC .dbyt 0dfech -001F64r 1 DF ED .dbyt 0dfedh -001F66r 1 DF EE .dbyt 0dfeeh -001F68r 1 DF EF .dbyt 0dfefh -001F6Ar 1 DF F0 .dbyt 0dff0h -001F6Cr 1 DF F1 .dbyt 0dff1h -001F6Er 1 DF F2 .dbyt 0dff2h -001F70r 1 DF F3 .dbyt 0dff3h -001F72r 1 DF F4 .dbyt 0dff4h -001F74r 1 DF F5 .dbyt 0dff5h -001F76r 1 DF F6 .dbyt 0dff6h -001F78r 1 DF F7 .dbyt 0dff7h -001F7Ar 1 DF F8 .dbyt 0dff8h -001F7Cr 1 DF F9 .dbyt 0dff9h -001F7Er 1 DF FA .dbyt 0dffah -001F80r 1 DF FB .dbyt 0dffbh -001F82r 1 DF FC .dbyt 0dffch -001F84r 1 DF FD .dbyt 0dffdh -001F86r 1 DF FE .dbyt 0dffeh -001F88r 1 DF FF .dbyt 0dfffh -001F8Ar 1 E0 00 .dbyt 0e000h -001F8Cr 1 E0 01 .dbyt 0e001h -001F8Er 1 E0 02 .dbyt 0e002h -001F90r 1 E0 03 .dbyt 0e003h -001F92r 1 E0 04 .dbyt 0e004h -001F94r 1 E0 05 .dbyt 0e005h -001F96r 1 E0 06 .dbyt 0e006h -001F98r 1 E0 07 .dbyt 0e007h -001F9Ar 1 E0 08 .dbyt 0e008h -001F9Cr 1 E0 09 .dbyt 0e009h -001F9Er 1 E0 0A .dbyt 0e00ah -001FA0r 1 E0 0B .dbyt 0e00bh -001FA2r 1 E0 0C .dbyt 0e00ch -001FA4r 1 E0 0D .dbyt 0e00dh -001FA6r 1 E0 0E .dbyt 0e00eh -001FA8r 1 E0 0F .dbyt 0e00fh -001FAAr 1 EF E1 .dbyt 0efe1h -001FACr 1 EF E2 .dbyt 0efe2h -001FAEr 1 EF E3 .dbyt 0efe3h -001FB0r 1 EF E4 .dbyt 0efe4h -001FB2r 1 EF E5 .dbyt 0efe5h -001FB4r 1 EF E6 .dbyt 0efe6h -001FB6r 1 EF E7 .dbyt 0efe7h -001FB8r 1 EF E8 .dbyt 0efe8h -001FBAr 1 EF E9 .dbyt 0efe9h -001FBCr 1 EF EA .dbyt 0efeah -001FBEr 1 EF EB .dbyt 0efebh -001FC0r 1 EF EC .dbyt 0efech -001FC2r 1 EF ED .dbyt 0efedh -001FC4r 1 EF EE .dbyt 0efeeh -001FC6r 1 EF EF .dbyt 0efefh -001FC8r 1 EF F0 .dbyt 0eff0h -001FCAr 1 EF F1 .dbyt 0eff1h -001FCCr 1 EF F2 .dbyt 0eff2h -001FCEr 1 EF F3 .dbyt 0eff3h -001FD0r 1 EF F4 .dbyt 0eff4h -001FD2r 1 EF F5 .dbyt 0eff5h -001FD4r 1 EF F6 .dbyt 0eff6h -001FD6r 1 EF F7 .dbyt 0eff7h -001FD8r 1 EF F8 .dbyt 0eff8h -001FDAr 1 EF F9 .dbyt 0eff9h -001FDCr 1 EF FA .dbyt 0effah -001FDEr 1 EF FB .dbyt 0effbh -001FE0r 1 EF FC .dbyt 0effch -001FE2r 1 EF FD .dbyt 0effdh -001FE4r 1 EF FE .dbyt 0effeh -001FE6r 1 EF FF .dbyt 0efffh -001FE8r 1 F0 00 .dbyt 0f000h -001FEAr 1 F0 01 .dbyt 0f001h -001FECr 1 F0 02 .dbyt 0f002h -001FEEr 1 F0 03 .dbyt 0f003h -001FF0r 1 F0 04 .dbyt 0f004h -001FF2r 1 F0 05 .dbyt 0f005h -001FF4r 1 F0 06 .dbyt 0f006h -001FF6r 1 F0 07 .dbyt 0f007h -001FF8r 1 F0 08 .dbyt 0f008h -001FFAr 1 F0 09 .dbyt 0f009h -001FFCr 1 F0 0A .dbyt 0f00ah -001FFEr 1 F0 0B .dbyt 0f00bh -002000r 1 F0 0C .dbyt 0f00ch -002002r 1 F0 0D .dbyt 0f00dh -002004r 1 F0 0E .dbyt 0f00eh -002006r 1 F0 0F .dbyt 0f00fh -002008r 1 FF E1 .dbyt 0ffe1h -00200Ar 1 FF E2 .dbyt 0ffe2h -00200Cr 1 FF E3 .dbyt 0ffe3h -00200Er 1 FF E4 .dbyt 0ffe4h -002010r 1 FF E5 .dbyt 0ffe5h -002012r 1 FF E6 .dbyt 0ffe6h -002014r 1 FF E7 .dbyt 0ffe7h -002016r 1 FF E8 .dbyt 0ffe8h -002018r 1 FF E9 .dbyt 0ffe9h -00201Ar 1 FF EA .dbyt 0ffeah -00201Cr 1 FF EB .dbyt 0ffebh -00201Er 1 FF EC .dbyt 0ffech -002020r 1 FF ED .dbyt 0ffedh -002022r 1 FF EE .dbyt 0ffeeh -002024r 1 FF EF .dbyt 0ffefh -002026r 1 FF F0 .dbyt 0fff0h -002028r 1 FF F1 .dbyt 0fff1h -00202Ar 1 FF F2 .dbyt 0fff2h -00202Cr 1 FF F3 .dbyt 0fff3h -00202Er 1 FF F4 .dbyt 0fff4h -002030r 1 FF F5 .dbyt 0fff5h -002032r 1 FF F6 .dbyt 0fff6h -002034r 1 FF F7 .dbyt 0fff7h -002036r 1 FF F8 .dbyt 0fff8h -002038r 1 FF F9 .dbyt 0fff9h -00203Ar 1 FF FA .dbyt 0fffah -00203Cr 1 FF FB .dbyt 0fffbh -00203Er 1 FF FC .dbyt 0fffch -002040r 1 FF FD .dbyt 0fffdh -002042r 1 FF FE .dbyt 0fffeh -002044r 1 FF FF .dbyt 0ffffh +001CB0r 1 ; alternative 4-digit hex values +001CB0r 1 00 00 .dbyt 0000h +001CB2r 1 00 01 .dbyt 0001h +001CB4r 1 00 02 .dbyt 0002h +001CB6r 1 00 03 .dbyt 0003h +001CB8r 1 00 04 .dbyt 0004h +001CBAr 1 00 05 .dbyt 0005h +001CBCr 1 00 06 .dbyt 0006h +001CBEr 1 00 07 .dbyt 0007h +001CC0r 1 00 08 .dbyt 0008h +001CC2r 1 00 09 .dbyt 0009h +001CC4r 1 00 0A .dbyt 000ah +001CC6r 1 00 0B .dbyt 000bh +001CC8r 1 00 0C .dbyt 000ch +001CCAr 1 00 0D .dbyt 000dh +001CCCr 1 00 0E .dbyt 000eh +001CCEr 1 00 0F .dbyt 000fh +001CD0r 1 00 10 .dbyt 0010h +001CD2r 1 00 11 .dbyt 0011h +001CD4r 1 00 12 .dbyt 0012h +001CD6r 1 00 13 .dbyt 0013h +001CD8r 1 00 70 .dbyt 0070h +001CDAr 1 00 71 .dbyt 0071h +001CDCr 1 00 72 .dbyt 0072h +001CDEr 1 00 73 .dbyt 0073h +001CE0r 1 00 74 .dbyt 0074h +001CE2r 1 00 75 .dbyt 0075h +001CE4r 1 00 76 .dbyt 0076h +001CE6r 1 00 77 .dbyt 0077h +001CE8r 1 00 78 .dbyt 0078h +001CEAr 1 00 79 .dbyt 0079h +001CECr 1 00 7A .dbyt 007ah +001CEEr 1 00 7B .dbyt 007bh +001CF0r 1 00 7C .dbyt 007ch +001CF2r 1 00 7D .dbyt 007dh +001CF4r 1 00 7E .dbyt 007eh +001CF6r 1 00 7F .dbyt 007fh +001CF8r 1 00 80 .dbyt 0080h +001CFAr 1 00 81 .dbyt 0081h +001CFCr 1 00 82 .dbyt 0082h +001CFEr 1 00 83 .dbyt 0083h +001D00r 1 00 84 .dbyt 0084h +001D02r 1 00 85 .dbyt 0085h +001D04r 1 00 86 .dbyt 0086h +001D06r 1 00 F0 .dbyt 00f0h +001D08r 1 00 F1 .dbyt 00f1h +001D0Ar 1 00 F2 .dbyt 00f2h +001D0Cr 1 00 F3 .dbyt 00f3h +001D0Er 1 00 F4 .dbyt 00f4h +001D10r 1 00 F5 .dbyt 00f5h +001D12r 1 00 F6 .dbyt 00f6h +001D14r 1 00 F7 .dbyt 00f7h +001D16r 1 00 F8 .dbyt 00f8h +001D18r 1 00 F9 .dbyt 00f9h +001D1Ar 1 00 FA .dbyt 00fah +001D1Cr 1 00 FB .dbyt 00fbh +001D1Er 1 00 FC .dbyt 00fch +001D20r 1 00 FD .dbyt 00fdh +001D22r 1 00 FE .dbyt 00feh +001D24r 1 00 FF .dbyt 00ffh +001D26r 1 01 00 .dbyt 0100h +001D28r 1 01 01 .dbyt 0101h +001D2Ar 1 01 02 .dbyt 0102h +001D2Cr 1 01 03 .dbyt 0103h +001D2Er 1 0F D2 .dbyt 0fd2h +001D30r 1 0F D3 .dbyt 0fd3h +001D32r 1 0F D4 .dbyt 0fd4h +001D34r 1 0F D5 .dbyt 0fd5h +001D36r 1 0F D6 .dbyt 0fd6h +001D38r 1 0F D7 .dbyt 0fd7h +001D3Ar 1 0F D8 .dbyt 0fd8h +001D3Cr 1 0F D9 .dbyt 0fd9h +001D3Er 1 0F DA .dbyt 0fdah +001D40r 1 0F DB .dbyt 0fdbh +001D42r 1 0F DC .dbyt 0fdch +001D44r 1 0F DD .dbyt 0fddh +001D46r 1 0F DE .dbyt 0fdeh +001D48r 1 0F DF .dbyt 0fdfh +001D4Ar 1 0F E0 .dbyt 0fe0h +001D4Cr 1 0F E1 .dbyt 0fe1h +001D4Er 1 0F E2 .dbyt 0fe2h +001D50r 1 0F E3 .dbyt 0fe3h +001D52r 1 0F E4 .dbyt 0fe4h +001D54r 1 0F E5 .dbyt 0fe5h +001D56r 1 0F E6 .dbyt 0fe6h +001D58r 1 0F E7 .dbyt 0fe7h +001D5Ar 1 0F E8 .dbyt 0fe8h +001D5Cr 1 0F E9 .dbyt 0fe9h +001D5Er 1 0F EA .dbyt 0feah +001D60r 1 0F EB .dbyt 0febh +001D62r 1 0F EC .dbyt 0fech +001D64r 1 0F ED .dbyt 0fedh +001D66r 1 0F EE .dbyt 0feeh +001D68r 1 0F EF .dbyt 0fefh +001D6Ar 1 0F F0 .dbyt 0ff0h +001D6Cr 1 0F F1 .dbyt 0ff1h +001D6Er 1 0F F2 .dbyt 0ff2h +001D70r 1 0F F3 .dbyt 0ff3h +001D72r 1 0F F4 .dbyt 0ff4h +001D74r 1 0F F5 .dbyt 0ff5h +001D76r 1 0F F6 .dbyt 0ff6h +001D78r 1 0F F7 .dbyt 0ff7h +001D7Ar 1 0F F8 .dbyt 0ff8h +001D7Cr 1 0F F9 .dbyt 0ff9h +001D7Er 1 0F FA .dbyt 0ffah +001D80r 1 0F FB .dbyt 0ffbh +001D82r 1 0F FC .dbyt 0ffch +001D84r 1 0F FD .dbyt 0ffdh +001D86r 1 0F FE .dbyt 0ffeh +001D88r 1 0F FF .dbyt 0fffh +001D8Ar 1 10 00 .dbyt 1000h +001D8Cr 1 10 01 .dbyt 1001h +001D8Er 1 10 02 .dbyt 1002h +001D90r 1 10 03 .dbyt 1003h +001D92r 1 10 04 .dbyt 1004h +001D94r 1 10 05 .dbyt 1005h +001D96r 1 10 06 .dbyt 1006h +001D98r 1 10 07 .dbyt 1007h +001D9Ar 1 10 08 .dbyt 1008h +001D9Cr 1 7F F0 .dbyt 7ff0h +001D9Er 1 7F F1 .dbyt 7ff1h +001DA0r 1 7F F2 .dbyt 7ff2h +001DA2r 1 7F F3 .dbyt 7ff3h +001DA4r 1 7F F4 .dbyt 7ff4h +001DA6r 1 7F F5 .dbyt 7ff5h +001DA8r 1 7F F6 .dbyt 7ff6h +001DAAr 1 7F F7 .dbyt 7ff7h +001DACr 1 7F F8 .dbyt 7ff8h +001DAEr 1 7F F9 .dbyt 7ff9h +001DB0r 1 7F FA .dbyt 7ffah +001DB2r 1 7F FB .dbyt 7ffbh +001DB4r 1 7F FC .dbyt 7ffch +001DB6r 1 7F FD .dbyt 7ffdh +001DB8r 1 7F FE .dbyt 7ffeh +001DBAr 1 7F FF .dbyt 7fffh +001DBCr 1 80 00 .dbyt 8000h +001DBEr 1 80 01 .dbyt 8001h +001DC0r 1 80 02 .dbyt 8002h +001DC2r 1 80 03 .dbyt 8003h +001DC4r 1 80 04 .dbyt 8004h +001DC6r 1 80 05 .dbyt 8005h +001DC8r 1 80 06 .dbyt 8006h +001DCAr 1 80 07 .dbyt 8007h +001DCCr 1 80 08 .dbyt 8008h +001DCEr 1 80 09 .dbyt 8009h +001DD0r 1 80 0A .dbyt 800ah +001DD2r 1 80 0B .dbyt 800bh +001DD4r 1 9F E1 .dbyt 9fe1h +001DD6r 1 9F E2 .dbyt 9fe2h +001DD8r 1 9F E3 .dbyt 9fe3h +001DDAr 1 9F E4 .dbyt 9fe4h +001DDCr 1 9F E5 .dbyt 9fe5h +001DDEr 1 9F E6 .dbyt 9fe6h +001DE0r 1 9F E7 .dbyt 9fe7h +001DE2r 1 9F E8 .dbyt 9fe8h +001DE4r 1 9F E9 .dbyt 9fe9h +001DE6r 1 9F EA .dbyt 9feah +001DE8r 1 9F EB .dbyt 9febh +001DEAr 1 9F EC .dbyt 9fech +001DECr 1 9F ED .dbyt 9fedh +001DEEr 1 9F EE .dbyt 9feeh +001DF0r 1 9F EF .dbyt 9fefh +001DF2r 1 9F F0 .dbyt 9ff0h +001DF4r 1 9F F1 .dbyt 9ff1h +001DF6r 1 9F F2 .dbyt 9ff2h +001DF8r 1 9F F3 .dbyt 9ff3h +001DFAr 1 9F F4 .dbyt 9ff4h +001DFCr 1 9F F5 .dbyt 9ff5h +001DFEr 1 9F F6 .dbyt 9ff6h +001E00r 1 9F F7 .dbyt 9ff7h +001E02r 1 9F F8 .dbyt 9ff8h +001E04r 1 9F F9 .dbyt 9ff9h +001E06r 1 9F FA .dbyt 9ffah +001E08r 1 9F FB .dbyt 9ffbh +001E0Ar 1 9F FC .dbyt 9ffch +001E0Cr 1 9F FD .dbyt 9ffdh +001E0Er 1 9F FE .dbyt 9ffeh +001E10r 1 9F FF .dbyt 9fffh +001E12r 1 A0 00 .dbyt 0a000h +001E14r 1 A0 01 .dbyt 0a001h +001E16r 1 A0 02 .dbyt 0a002h +001E18r 1 A0 03 .dbyt 0a003h +001E1Ar 1 A0 04 .dbyt 0a004h +001E1Cr 1 A0 05 .dbyt 0a005h +001E1Er 1 A0 06 .dbyt 0a006h +001E20r 1 A0 07 .dbyt 0a007h +001E22r 1 A0 08 .dbyt 0a008h +001E24r 1 A0 09 .dbyt 0a009h +001E26r 1 A0 0A .dbyt 0a00ah +001E28r 1 A0 0B .dbyt 0a00bh +001E2Ar 1 A0 0C .dbyt 0a00ch +001E2Cr 1 A0 0D .dbyt 0a00dh +001E2Er 1 A0 0E .dbyt 0a00eh +001E30r 1 A0 0F .dbyt 0a00fh +001E32r 1 AF E1 .dbyt 0afe1h +001E34r 1 AF E2 .dbyt 0afe2h +001E36r 1 AF E3 .dbyt 0afe3h +001E38r 1 AF E4 .dbyt 0afe4h +001E3Ar 1 AF E5 .dbyt 0afe5h +001E3Cr 1 AF E6 .dbyt 0afe6h +001E3Er 1 AF E7 .dbyt 0afe7h +001E40r 1 AF E8 .dbyt 0afe8h +001E42r 1 AF E9 .dbyt 0afe9h +001E44r 1 AF EA .dbyt 0afeah +001E46r 1 AF EB .dbyt 0afebh +001E48r 1 AF EC .dbyt 0afech +001E4Ar 1 AF ED .dbyt 0afedh +001E4Cr 1 AF EE .dbyt 0afeeh +001E4Er 1 AF EF .dbyt 0afefh +001E50r 1 AF F0 .dbyt 0aff0h +001E52r 1 AF F1 .dbyt 0aff1h +001E54r 1 AF F2 .dbyt 0aff2h +001E56r 1 AF F3 .dbyt 0aff3h +001E58r 1 AF F4 .dbyt 0aff4h +001E5Ar 1 AF F5 .dbyt 0aff5h +001E5Cr 1 AF F6 .dbyt 0aff6h +001E5Er 1 AF F7 .dbyt 0aff7h +001E60r 1 AF F8 .dbyt 0aff8h +001E62r 1 AF F9 .dbyt 0aff9h +001E64r 1 AF FA .dbyt 0affah +001E66r 1 AF FB .dbyt 0affbh +001E68r 1 AF FC .dbyt 0affch +001E6Ar 1 AF FD .dbyt 0affdh +001E6Cr 1 AF FE .dbyt 0affeh +001E6Er 1 AF FF .dbyt 0afffh +001E70r 1 B0 00 .dbyt 0b000h +001E72r 1 B0 01 .dbyt 0b001h +001E74r 1 B0 02 .dbyt 0b002h +001E76r 1 B0 03 .dbyt 0b003h +001E78r 1 B0 04 .dbyt 0b004h +001E7Ar 1 B0 05 .dbyt 0b005h +001E7Cr 1 B0 06 .dbyt 0b006h +001E7Er 1 B0 07 .dbyt 0b007h +001E80r 1 B0 08 .dbyt 0b008h +001E82r 1 B0 09 .dbyt 0b009h +001E84r 1 B0 0A .dbyt 0b00ah +001E86r 1 B0 0B .dbyt 0b00bh +001E88r 1 B0 0C .dbyt 0b00ch +001E8Ar 1 B0 0D .dbyt 0b00dh +001E8Cr 1 B0 0E .dbyt 0b00eh +001E8Er 1 B0 0F .dbyt 0b00fh +001E90r 1 BF E1 .dbyt 0bfe1h +001E92r 1 BF E2 .dbyt 0bfe2h +001E94r 1 BF E3 .dbyt 0bfe3h +001E96r 1 BF E4 .dbyt 0bfe4h +001E98r 1 BF E5 .dbyt 0bfe5h +001E9Ar 1 BF E6 .dbyt 0bfe6h +001E9Cr 1 BF E7 .dbyt 0bfe7h +001E9Er 1 BF E8 .dbyt 0bfe8h +001EA0r 1 BF E9 .dbyt 0bfe9h +001EA2r 1 BF EA .dbyt 0bfeah +001EA4r 1 BF EB .dbyt 0bfebh +001EA6r 1 BF EC .dbyt 0bfech +001EA8r 1 BF ED .dbyt 0bfedh +001EAAr 1 BF EE .dbyt 0bfeeh +001EACr 1 BF EF .dbyt 0bfefh +001EAEr 1 BF F0 .dbyt 0bff0h +001EB0r 1 BF F1 .dbyt 0bff1h +001EB2r 1 BF F2 .dbyt 0bff2h +001EB4r 1 BF F3 .dbyt 0bff3h +001EB6r 1 BF F4 .dbyt 0bff4h +001EB8r 1 BF F5 .dbyt 0bff5h +001EBAr 1 BF F6 .dbyt 0bff6h +001EBCr 1 BF F7 .dbyt 0bff7h +001EBEr 1 BF F8 .dbyt 0bff8h +001EC0r 1 BF F9 .dbyt 0bff9h +001EC2r 1 BF FA .dbyt 0bffah +001EC4r 1 BF FB .dbyt 0bffbh +001EC6r 1 BF FC .dbyt 0bffch +001EC8r 1 BF FD .dbyt 0bffdh +001ECAr 1 BF FE .dbyt 0bffeh +001ECCr 1 BF FF .dbyt 0bfffh +001ECEr 1 C0 00 .dbyt 0c000h +001ED0r 1 C0 01 .dbyt 0c001h +001ED2r 1 C0 02 .dbyt 0c002h +001ED4r 1 C0 03 .dbyt 0c003h +001ED6r 1 C0 04 .dbyt 0c004h +001ED8r 1 C0 05 .dbyt 0c005h +001EDAr 1 C0 06 .dbyt 0c006h +001EDCr 1 C0 07 .dbyt 0c007h +001EDEr 1 C0 08 .dbyt 0c008h +001EE0r 1 C0 09 .dbyt 0c009h +001EE2r 1 C0 0A .dbyt 0c00ah +001EE4r 1 C0 0B .dbyt 0c00bh +001EE6r 1 C0 0C .dbyt 0c00ch +001EE8r 1 C0 0D .dbyt 0c00dh +001EEAr 1 C0 0E .dbyt 0c00eh +001EECr 1 C0 0F .dbyt 0c00fh +001EEEr 1 CF E1 .dbyt 0cfe1h +001EF0r 1 CF E2 .dbyt 0cfe2h +001EF2r 1 CF E3 .dbyt 0cfe3h +001EF4r 1 CF E4 .dbyt 0cfe4h +001EF6r 1 CF E5 .dbyt 0cfe5h +001EF8r 1 CF E6 .dbyt 0cfe6h +001EFAr 1 CF E7 .dbyt 0cfe7h +001EFCr 1 CF E8 .dbyt 0cfe8h +001EFEr 1 CF E9 .dbyt 0cfe9h +001F00r 1 CF EA .dbyt 0cfeah +001F02r 1 CF EB .dbyt 0cfebh +001F04r 1 CF EC .dbyt 0cfech +001F06r 1 CF ED .dbyt 0cfedh +001F08r 1 CF EE .dbyt 0cfeeh +001F0Ar 1 CF EF .dbyt 0cfefh +001F0Cr 1 CF F0 .dbyt 0cff0h +001F0Er 1 CF F1 .dbyt 0cff1h +001F10r 1 CF F2 .dbyt 0cff2h +001F12r 1 CF F3 .dbyt 0cff3h +001F14r 1 CF F4 .dbyt 0cff4h +001F16r 1 CF F5 .dbyt 0cff5h +001F18r 1 CF F6 .dbyt 0cff6h +001F1Ar 1 CF F7 .dbyt 0cff7h +001F1Cr 1 CF F8 .dbyt 0cff8h +001F1Er 1 CF F9 .dbyt 0cff9h +001F20r 1 CF FA .dbyt 0cffah +001F22r 1 CF FB .dbyt 0cffbh +001F24r 1 CF FC .dbyt 0cffch +001F26r 1 CF FD .dbyt 0cffdh +001F28r 1 CF FE .dbyt 0cffeh +001F2Ar 1 CF FF .dbyt 0cfffh +001F2Cr 1 D0 00 .dbyt 0d000h +001F2Er 1 D0 01 .dbyt 0d001h +001F30r 1 D0 02 .dbyt 0d002h +001F32r 1 D0 03 .dbyt 0d003h +001F34r 1 D0 04 .dbyt 0d004h +001F36r 1 D0 05 .dbyt 0d005h +001F38r 1 D0 06 .dbyt 0d006h +001F3Ar 1 D0 07 .dbyt 0d007h +001F3Cr 1 D0 08 .dbyt 0d008h +001F3Er 1 D0 09 .dbyt 0d009h +001F40r 1 D0 0A .dbyt 0d00ah +001F42r 1 D0 0B .dbyt 0d00bh +001F44r 1 D0 0C .dbyt 0d00ch +001F46r 1 D0 0D .dbyt 0d00dh +001F48r 1 D0 0E .dbyt 0d00eh +001F4Ar 1 D0 0F .dbyt 0d00fh +001F4Cr 1 DF E1 .dbyt 0dfe1h +001F4Er 1 DF E2 .dbyt 0dfe2h +001F50r 1 DF E3 .dbyt 0dfe3h +001F52r 1 DF E4 .dbyt 0dfe4h +001F54r 1 DF E5 .dbyt 0dfe5h +001F56r 1 DF E6 .dbyt 0dfe6h +001F58r 1 DF E7 .dbyt 0dfe7h +001F5Ar 1 DF E8 .dbyt 0dfe8h +001F5Cr 1 DF E9 .dbyt 0dfe9h +001F5Er 1 DF EA .dbyt 0dfeah +001F60r 1 DF EB .dbyt 0dfebh +001F62r 1 DF EC .dbyt 0dfech +001F64r 1 DF ED .dbyt 0dfedh +001F66r 1 DF EE .dbyt 0dfeeh +001F68r 1 DF EF .dbyt 0dfefh +001F6Ar 1 DF F0 .dbyt 0dff0h +001F6Cr 1 DF F1 .dbyt 0dff1h +001F6Er 1 DF F2 .dbyt 0dff2h +001F70r 1 DF F3 .dbyt 0dff3h +001F72r 1 DF F4 .dbyt 0dff4h +001F74r 1 DF F5 .dbyt 0dff5h +001F76r 1 DF F6 .dbyt 0dff6h +001F78r 1 DF F7 .dbyt 0dff7h +001F7Ar 1 DF F8 .dbyt 0dff8h +001F7Cr 1 DF F9 .dbyt 0dff9h +001F7Er 1 DF FA .dbyt 0dffah +001F80r 1 DF FB .dbyt 0dffbh +001F82r 1 DF FC .dbyt 0dffch +001F84r 1 DF FD .dbyt 0dffdh +001F86r 1 DF FE .dbyt 0dffeh +001F88r 1 DF FF .dbyt 0dfffh +001F8Ar 1 E0 00 .dbyt 0e000h +001F8Cr 1 E0 01 .dbyt 0e001h +001F8Er 1 E0 02 .dbyt 0e002h +001F90r 1 E0 03 .dbyt 0e003h +001F92r 1 E0 04 .dbyt 0e004h +001F94r 1 E0 05 .dbyt 0e005h +001F96r 1 E0 06 .dbyt 0e006h +001F98r 1 E0 07 .dbyt 0e007h +001F9Ar 1 E0 08 .dbyt 0e008h +001F9Cr 1 E0 09 .dbyt 0e009h +001F9Er 1 E0 0A .dbyt 0e00ah +001FA0r 1 E0 0B .dbyt 0e00bh +001FA2r 1 E0 0C .dbyt 0e00ch +001FA4r 1 E0 0D .dbyt 0e00dh +001FA6r 1 E0 0E .dbyt 0e00eh +001FA8r 1 E0 0F .dbyt 0e00fh +001FAAr 1 EF E1 .dbyt 0efe1h +001FACr 1 EF E2 .dbyt 0efe2h +001FAEr 1 EF E3 .dbyt 0efe3h +001FB0r 1 EF E4 .dbyt 0efe4h +001FB2r 1 EF E5 .dbyt 0efe5h +001FB4r 1 EF E6 .dbyt 0efe6h +001FB6r 1 EF E7 .dbyt 0efe7h +001FB8r 1 EF E8 .dbyt 0efe8h +001FBAr 1 EF E9 .dbyt 0efe9h +001FBCr 1 EF EA .dbyt 0efeah +001FBEr 1 EF EB .dbyt 0efebh +001FC0r 1 EF EC .dbyt 0efech +001FC2r 1 EF ED .dbyt 0efedh +001FC4r 1 EF EE .dbyt 0efeeh +001FC6r 1 EF EF .dbyt 0efefh +001FC8r 1 EF F0 .dbyt 0eff0h +001FCAr 1 EF F1 .dbyt 0eff1h +001FCCr 1 EF F2 .dbyt 0eff2h +001FCEr 1 EF F3 .dbyt 0eff3h +001FD0r 1 EF F4 .dbyt 0eff4h +001FD2r 1 EF F5 .dbyt 0eff5h +001FD4r 1 EF F6 .dbyt 0eff6h +001FD6r 1 EF F7 .dbyt 0eff7h +001FD8r 1 EF F8 .dbyt 0eff8h +001FDAr 1 EF F9 .dbyt 0eff9h +001FDCr 1 EF FA .dbyt 0effah +001FDEr 1 EF FB .dbyt 0effbh +001FE0r 1 EF FC .dbyt 0effch +001FE2r 1 EF FD .dbyt 0effdh +001FE4r 1 EF FE .dbyt 0effeh +001FE6r 1 EF FF .dbyt 0efffh +001FE8r 1 F0 00 .dbyt 0f000h +001FEAr 1 F0 01 .dbyt 0f001h +001FECr 1 F0 02 .dbyt 0f002h +001FEEr 1 F0 03 .dbyt 0f003h +001FF0r 1 F0 04 .dbyt 0f004h +001FF2r 1 F0 05 .dbyt 0f005h +001FF4r 1 F0 06 .dbyt 0f006h +001FF6r 1 F0 07 .dbyt 0f007h +001FF8r 1 F0 08 .dbyt 0f008h +001FFAr 1 F0 09 .dbyt 0f009h +001FFCr 1 F0 0A .dbyt 0f00ah +001FFEr 1 F0 0B .dbyt 0f00bh +002000r 1 F0 0C .dbyt 0f00ch +002002r 1 F0 0D .dbyt 0f00dh +002004r 1 F0 0E .dbyt 0f00eh +002006r 1 F0 0F .dbyt 0f00fh +002008r 1 FF E1 .dbyt 0ffe1h +00200Ar 1 FF E2 .dbyt 0ffe2h +00200Cr 1 FF E3 .dbyt 0ffe3h +00200Er 1 FF E4 .dbyt 0ffe4h +002010r 1 FF E5 .dbyt 0ffe5h +002012r 1 FF E6 .dbyt 0ffe6h +002014r 1 FF E7 .dbyt 0ffe7h +002016r 1 FF E8 .dbyt 0ffe8h +002018r 1 FF E9 .dbyt 0ffe9h +00201Ar 1 FF EA .dbyt 0ffeah +00201Cr 1 FF EB .dbyt 0ffebh +00201Er 1 FF EC .dbyt 0ffech +002020r 1 FF ED .dbyt 0ffedh +002022r 1 FF EE .dbyt 0ffeeh +002024r 1 FF EF .dbyt 0ffefh +002026r 1 FF F0 .dbyt 0fff0h +002028r 1 FF F1 .dbyt 0fff1h +00202Ar 1 FF F2 .dbyt 0fff2h +00202Cr 1 FF F3 .dbyt 0fff3h +00202Er 1 FF F4 .dbyt 0fff4h +002030r 1 FF F5 .dbyt 0fff5h +002032r 1 FF F6 .dbyt 0fff6h +002034r 1 FF F7 .dbyt 0fff7h +002036r 1 FF F8 .dbyt 0fff8h +002038r 1 FF F9 .dbyt 0fff9h +00203Ar 1 FF FA .dbyt 0fffah +00203Cr 1 FF FB .dbyt 0fffbh +00203Er 1 FF FC .dbyt 0fffch +002040r 1 FF FD .dbyt 0fffdh +002042r 1 FF FE .dbyt 0fffeh +002044r 1 FF FF .dbyt 0ffffh 002046r 1 -002046r 1 ; alternative 4-digit hex values, uppercase -002046r 1 00 00 .dbyt 0000h -002048r 1 00 01 .dbyt 0001h -00204Ar 1 00 02 .dbyt 0002h -00204Cr 1 00 03 .dbyt 0003h -00204Er 1 00 04 .dbyt 0004h -002050r 1 00 05 .dbyt 0005h -002052r 1 00 06 .dbyt 0006h -002054r 1 00 07 .dbyt 0007h -002056r 1 00 08 .dbyt 0008h -002058r 1 00 09 .dbyt 0009h -00205Ar 1 00 0A .dbyt 000Ah -00205Cr 1 00 0B .dbyt 000Bh -00205Er 1 00 0C .dbyt 000Ch -002060r 1 00 0D .dbyt 000Dh -002062r 1 00 0E .dbyt 000Eh -002064r 1 00 0F .dbyt 000Fh -002066r 1 00 10 .dbyt 0010h -002068r 1 00 11 .dbyt 0011h -00206Ar 1 00 12 .dbyt 0012h -00206Cr 1 00 13 .dbyt 0013h -00206Er 1 00 70 .dbyt 0070h -002070r 1 00 71 .dbyt 0071h -002072r 1 00 72 .dbyt 0072h -002074r 1 00 73 .dbyt 0073h -002076r 1 00 74 .dbyt 0074h -002078r 1 00 75 .dbyt 0075h -00207Ar 1 00 76 .dbyt 0076h -00207Cr 1 00 77 .dbyt 0077h -00207Er 1 00 78 .dbyt 0078h -002080r 1 00 79 .dbyt 0079h -002082r 1 00 7A .dbyt 007Ah -002084r 1 00 7B .dbyt 007Bh -002086r 1 00 7C .dbyt 007Ch -002088r 1 00 7D .dbyt 007Dh -00208Ar 1 00 7E .dbyt 007Eh -00208Cr 1 00 7F .dbyt 007Fh -00208Er 1 00 80 .dbyt 0080h -002090r 1 00 81 .dbyt 0081h -002092r 1 00 82 .dbyt 0082h -002094r 1 00 83 .dbyt 0083h -002096r 1 00 84 .dbyt 0084h -002098r 1 00 85 .dbyt 0085h -00209Ar 1 00 86 .dbyt 0086h -00209Cr 1 00 F0 .dbyt 00F0h -00209Er 1 00 F1 .dbyt 00F1h -0020A0r 1 00 F2 .dbyt 00F2h -0020A2r 1 00 F3 .dbyt 00F3h -0020A4r 1 00 F4 .dbyt 00F4h -0020A6r 1 00 F5 .dbyt 00F5h -0020A8r 1 00 F6 .dbyt 00F6h -0020AAr 1 00 F7 .dbyt 00F7h -0020ACr 1 00 F8 .dbyt 00F8h -0020AEr 1 00 F9 .dbyt 00F9h -0020B0r 1 00 FA .dbyt 00FAh -0020B2r 1 00 FB .dbyt 00FBh -0020B4r 1 00 FC .dbyt 00FCh -0020B6r 1 00 FD .dbyt 00FDh -0020B8r 1 00 FE .dbyt 00FEh -0020BAr 1 00 FF .dbyt 00FFh -0020BCr 1 01 00 .dbyt 0100h -0020BEr 1 01 01 .dbyt 0101h -0020C0r 1 01 02 .dbyt 0102h -0020C2r 1 01 03 .dbyt 0103h -0020C4r 1 0F D2 .dbyt 0FD2h -0020C6r 1 0F D3 .dbyt 0FD3h -0020C8r 1 0F D4 .dbyt 0FD4h -0020CAr 1 0F D5 .dbyt 0FD5h -0020CCr 1 0F D6 .dbyt 0FD6h -0020CEr 1 0F D7 .dbyt 0FD7h -0020D0r 1 0F D8 .dbyt 0FD8h -0020D2r 1 0F D9 .dbyt 0FD9h -0020D4r 1 0F DA .dbyt 0FDAh -0020D6r 1 0F DB .dbyt 0FDBh -0020D8r 1 0F DC .dbyt 0FDCh -0020DAr 1 0F DD .dbyt 0FDDh -0020DCr 1 0F DE .dbyt 0FDEh -0020DEr 1 0F DF .dbyt 0FDFh -0020E0r 1 0F E0 .dbyt 0FE0h -0020E2r 1 0F E1 .dbyt 0FE1h -0020E4r 1 0F E2 .dbyt 0FE2h -0020E6r 1 0F E3 .dbyt 0FE3h -0020E8r 1 0F E4 .dbyt 0FE4h -0020EAr 1 0F E5 .dbyt 0FE5h -0020ECr 1 0F E6 .dbyt 0FE6h -0020EEr 1 0F E7 .dbyt 0FE7h -0020F0r 1 0F E8 .dbyt 0FE8h -0020F2r 1 0F E9 .dbyt 0FE9h -0020F4r 1 0F EA .dbyt 0FEAh -0020F6r 1 0F EB .dbyt 0FEBh -0020F8r 1 0F EC .dbyt 0FECh -0020FAr 1 0F ED .dbyt 0FEDh -0020FCr 1 0F EE .dbyt 0FEEh -0020FEr 1 0F EF .dbyt 0FEFh -002100r 1 0F F0 .dbyt 0FF0h -002102r 1 0F F1 .dbyt 0FF1h -002104r 1 0F F2 .dbyt 0FF2h -002106r 1 0F F3 .dbyt 0FF3h -002108r 1 0F F4 .dbyt 0FF4h -00210Ar 1 0F F5 .dbyt 0FF5h -00210Cr 1 0F F6 .dbyt 0FF6h -00210Er 1 0F F7 .dbyt 0FF7h -002110r 1 0F F8 .dbyt 0FF8h -002112r 1 0F F9 .dbyt 0FF9h -002114r 1 0F FA .dbyt 0FFAh -002116r 1 0F FB .dbyt 0FFBh -002118r 1 0F FC .dbyt 0FFCh -00211Ar 1 0F FD .dbyt 0FFDh -00211Cr 1 0F FE .dbyt 0FFEh -00211Er 1 0F FF .dbyt 0FFFh -002120r 1 10 00 .dbyt 1000h -002122r 1 10 01 .dbyt 1001h -002124r 1 10 02 .dbyt 1002h -002126r 1 10 03 .dbyt 1003h -002128r 1 10 04 .dbyt 1004h -00212Ar 1 10 05 .dbyt 1005h -00212Cr 1 10 06 .dbyt 1006h -00212Er 1 10 07 .dbyt 1007h -002130r 1 10 08 .dbyt 1008h -002132r 1 7F F0 .dbyt 7FF0h -002134r 1 7F F1 .dbyt 7FF1h -002136r 1 7F F2 .dbyt 7FF2h -002138r 1 7F F3 .dbyt 7FF3h -00213Ar 1 7F F4 .dbyt 7FF4h -00213Cr 1 7F F5 .dbyt 7FF5h -00213Er 1 7F F6 .dbyt 7FF6h -002140r 1 7F F7 .dbyt 7FF7h -002142r 1 7F F8 .dbyt 7FF8h -002144r 1 7F F9 .dbyt 7FF9h -002146r 1 7F FA .dbyt 7FFAh -002148r 1 7F FB .dbyt 7FFBh -00214Ar 1 7F FC .dbyt 7FFCh -00214Cr 1 7F FD .dbyt 7FFDh -00214Er 1 7F FE .dbyt 7FFEh -002150r 1 7F FF .dbyt 7FFFh -002152r 1 80 00 .dbyt 8000h -002154r 1 80 01 .dbyt 8001h -002156r 1 80 02 .dbyt 8002h -002158r 1 80 03 .dbyt 8003h -00215Ar 1 80 04 .dbyt 8004h -00215Cr 1 80 05 .dbyt 8005h -00215Er 1 80 06 .dbyt 8006h -002160r 1 80 07 .dbyt 8007h -002162r 1 80 08 .dbyt 8008h -002164r 1 80 09 .dbyt 8009h -002166r 1 80 0A .dbyt 800Ah -002168r 1 80 0B .dbyt 800Bh -00216Ar 1 9F E1 .dbyt 9FE1h -00216Cr 1 9F E2 .dbyt 9FE2h -00216Er 1 9F E3 .dbyt 9FE3h -002170r 1 9F E4 .dbyt 9FE4h -002172r 1 9F E5 .dbyt 9FE5h -002174r 1 9F E6 .dbyt 9FE6h -002176r 1 9F E7 .dbyt 9FE7h -002178r 1 9F E8 .dbyt 9FE8h -00217Ar 1 9F E9 .dbyt 9FE9h -00217Cr 1 9F EA .dbyt 9FEAh -00217Er 1 9F EB .dbyt 9FEBh -002180r 1 9F EC .dbyt 9FECh -002182r 1 9F ED .dbyt 9FEDh -002184r 1 9F EE .dbyt 9FEEh -002186r 1 9F EF .dbyt 9FEFh -002188r 1 9F F0 .dbyt 9FF0h -00218Ar 1 9F F1 .dbyt 9FF1h -00218Cr 1 9F F2 .dbyt 9FF2h -00218Er 1 9F F3 .dbyt 9FF3h -002190r 1 9F F4 .dbyt 9FF4h -002192r 1 9F F5 .dbyt 9FF5h -002194r 1 9F F6 .dbyt 9FF6h -002196r 1 9F F7 .dbyt 9FF7h -002198r 1 9F F8 .dbyt 9FF8h -00219Ar 1 9F F9 .dbyt 9FF9h -00219Cr 1 9F FA .dbyt 9FFAh -00219Er 1 9F FB .dbyt 9FFBh -0021A0r 1 9F FC .dbyt 9FFCh -0021A2r 1 9F FD .dbyt 9FFDh -0021A4r 1 9F FE .dbyt 9FFEh -0021A6r 1 9F FF .dbyt 9FFFh -0021A8r 1 A0 00 .dbyt 0A000h -0021AAr 1 A0 01 .dbyt 0A001h -0021ACr 1 A0 02 .dbyt 0A002h -0021AEr 1 A0 03 .dbyt 0A003h -0021B0r 1 A0 04 .dbyt 0A004h -0021B2r 1 A0 05 .dbyt 0A005h -0021B4r 1 A0 06 .dbyt 0A006h -0021B6r 1 A0 07 .dbyt 0A007h -0021B8r 1 A0 08 .dbyt 0A008h -0021BAr 1 A0 09 .dbyt 0A009h -0021BCr 1 A0 0A .dbyt 0A00Ah -0021BEr 1 A0 0B .dbyt 0A00Bh -0021C0r 1 A0 0C .dbyt 0A00Ch -0021C2r 1 A0 0D .dbyt 0A00Dh -0021C4r 1 A0 0E .dbyt 0A00Eh -0021C6r 1 A0 0F .dbyt 0A00Fh -0021C8r 1 AF E1 .dbyt 0AFE1h -0021CAr 1 AF E2 .dbyt 0AFE2h -0021CCr 1 AF E3 .dbyt 0AFE3h -0021CEr 1 AF E4 .dbyt 0AFE4h -0021D0r 1 AF E5 .dbyt 0AFE5h -0021D2r 1 AF E6 .dbyt 0AFE6h -0021D4r 1 AF E7 .dbyt 0AFE7h -0021D6r 1 AF E8 .dbyt 0AFE8h -0021D8r 1 AF E9 .dbyt 0AFE9h -0021DAr 1 AF EA .dbyt 0AFEAh -0021DCr 1 AF EB .dbyt 0AFEBh -0021DEr 1 AF EC .dbyt 0AFECh -0021E0r 1 AF ED .dbyt 0AFEDh -0021E2r 1 AF EE .dbyt 0AFEEh -0021E4r 1 AF EF .dbyt 0AFEFh -0021E6r 1 AF F0 .dbyt 0AFF0h -0021E8r 1 AF F1 .dbyt 0AFF1h -0021EAr 1 AF F2 .dbyt 0AFF2h -0021ECr 1 AF F3 .dbyt 0AFF3h -0021EEr 1 AF F4 .dbyt 0AFF4h -0021F0r 1 AF F5 .dbyt 0AFF5h -0021F2r 1 AF F6 .dbyt 0AFF6h -0021F4r 1 AF F7 .dbyt 0AFF7h -0021F6r 1 AF F8 .dbyt 0AFF8h -0021F8r 1 AF F9 .dbyt 0AFF9h -0021FAr 1 AF FA .dbyt 0AFFAh -0021FCr 1 AF FB .dbyt 0AFFBh -0021FEr 1 AF FC .dbyt 0AFFCh -002200r 1 AF FD .dbyt 0AFFDh -002202r 1 AF FE .dbyt 0AFFEh -002204r 1 AF FF .dbyt 0AFFFh -002206r 1 B0 00 .dbyt 0B000h -002208r 1 B0 01 .dbyt 0B001h -00220Ar 1 B0 02 .dbyt 0B002h -00220Cr 1 B0 03 .dbyt 0B003h -00220Er 1 B0 04 .dbyt 0B004h -002210r 1 B0 05 .dbyt 0B005h -002212r 1 B0 06 .dbyt 0B006h -002214r 1 B0 07 .dbyt 0B007h -002216r 1 B0 08 .dbyt 0B008h -002218r 1 B0 09 .dbyt 0B009h -00221Ar 1 B0 0A .dbyt 0B00Ah -00221Cr 1 B0 0B .dbyt 0B00Bh -00221Er 1 B0 0C .dbyt 0B00Ch -002220r 1 B0 0D .dbyt 0B00Dh -002222r 1 B0 0E .dbyt 0B00Eh -002224r 1 B0 0F .dbyt 0B00Fh -002226r 1 BF E1 .dbyt 0BFE1h -002228r 1 BF E2 .dbyt 0BFE2h -00222Ar 1 BF E3 .dbyt 0BFE3h -00222Cr 1 BF E4 .dbyt 0BFE4h -00222Er 1 BF E5 .dbyt 0BFE5h -002230r 1 BF E6 .dbyt 0BFE6h -002232r 1 BF E7 .dbyt 0BFE7h -002234r 1 BF E8 .dbyt 0BFE8h -002236r 1 BF E9 .dbyt 0BFE9h -002238r 1 BF EA .dbyt 0BFEAh -00223Ar 1 BF EB .dbyt 0BFEBh -00223Cr 1 BF EC .dbyt 0BFECh -00223Er 1 BF ED .dbyt 0BFEDh -002240r 1 BF EE .dbyt 0BFEEh -002242r 1 BF EF .dbyt 0BFEFh -002244r 1 BF F0 .dbyt 0BFF0h -002246r 1 BF F1 .dbyt 0BFF1h -002248r 1 BF F2 .dbyt 0BFF2h -00224Ar 1 BF F3 .dbyt 0BFF3h -00224Cr 1 BF F4 .dbyt 0BFF4h -00224Er 1 BF F5 .dbyt 0BFF5h -002250r 1 BF F6 .dbyt 0BFF6h -002252r 1 BF F7 .dbyt 0BFF7h -002254r 1 BF F8 .dbyt 0BFF8h -002256r 1 BF F9 .dbyt 0BFF9h -002258r 1 BF FA .dbyt 0BFFAh -00225Ar 1 BF FB .dbyt 0BFFBh -00225Cr 1 BF FC .dbyt 0BFFCh -00225Er 1 BF FD .dbyt 0BFFDh -002260r 1 BF FE .dbyt 0BFFEh -002262r 1 BF FF .dbyt 0BFFFh -002264r 1 C0 00 .dbyt 0C000h -002266r 1 C0 01 .dbyt 0C001h -002268r 1 C0 02 .dbyt 0C002h -00226Ar 1 C0 03 .dbyt 0C003h -00226Cr 1 C0 04 .dbyt 0C004h -00226Er 1 C0 05 .dbyt 0C005h -002270r 1 C0 06 .dbyt 0C006h -002272r 1 C0 07 .dbyt 0C007h -002274r 1 C0 08 .dbyt 0C008h -002276r 1 C0 09 .dbyt 0C009h -002278r 1 C0 0A .dbyt 0C00Ah -00227Ar 1 C0 0B .dbyt 0C00Bh -00227Cr 1 C0 0C .dbyt 0C00Ch -00227Er 1 C0 0D .dbyt 0C00Dh -002280r 1 C0 0E .dbyt 0C00Eh -002282r 1 C0 0F .dbyt 0C00Fh -002284r 1 CF E1 .dbyt 0CFE1h -002286r 1 CF E2 .dbyt 0CFE2h -002288r 1 CF E3 .dbyt 0CFE3h -00228Ar 1 CF E4 .dbyt 0CFE4h -00228Cr 1 CF E5 .dbyt 0CFE5h -00228Er 1 CF E6 .dbyt 0CFE6h -002290r 1 CF E7 .dbyt 0CFE7h -002292r 1 CF E8 .dbyt 0CFE8h -002294r 1 CF E9 .dbyt 0CFE9h -002296r 1 CF EA .dbyt 0CFEAh -002298r 1 CF EB .dbyt 0CFEBh -00229Ar 1 CF EC .dbyt 0CFECh -00229Cr 1 CF ED .dbyt 0CFEDh -00229Er 1 CF EE .dbyt 0CFEEh -0022A0r 1 CF EF .dbyt 0CFEFh -0022A2r 1 CF F0 .dbyt 0CFF0h -0022A4r 1 CF F1 .dbyt 0CFF1h -0022A6r 1 CF F2 .dbyt 0CFF2h -0022A8r 1 CF F3 .dbyt 0CFF3h -0022AAr 1 CF F4 .dbyt 0CFF4h -0022ACr 1 CF F5 .dbyt 0CFF5h -0022AEr 1 CF F6 .dbyt 0CFF6h -0022B0r 1 CF F7 .dbyt 0CFF7h -0022B2r 1 CF F8 .dbyt 0CFF8h -0022B4r 1 CF F9 .dbyt 0CFF9h -0022B6r 1 CF FA .dbyt 0CFFAh -0022B8r 1 CF FB .dbyt 0CFFBh -0022BAr 1 CF FC .dbyt 0CFFCh -0022BCr 1 CF FD .dbyt 0CFFDh -0022BEr 1 CF FE .dbyt 0CFFEh -0022C0r 1 CF FF .dbyt 0CFFFh -0022C2r 1 D0 00 .dbyt 0D000h -0022C4r 1 D0 01 .dbyt 0D001h -0022C6r 1 D0 02 .dbyt 0D002h -0022C8r 1 D0 03 .dbyt 0D003h -0022CAr 1 D0 04 .dbyt 0D004h -0022CCr 1 D0 05 .dbyt 0D005h -0022CEr 1 D0 06 .dbyt 0D006h -0022D0r 1 D0 07 .dbyt 0D007h -0022D2r 1 D0 08 .dbyt 0D008h -0022D4r 1 D0 09 .dbyt 0D009h -0022D6r 1 D0 0A .dbyt 0D00Ah -0022D8r 1 D0 0B .dbyt 0D00Bh -0022DAr 1 D0 0C .dbyt 0D00Ch -0022DCr 1 D0 0D .dbyt 0D00Dh -0022DEr 1 D0 0E .dbyt 0D00Eh -0022E0r 1 D0 0F .dbyt 0D00Fh -0022E2r 1 DF E1 .dbyt 0DFE1h -0022E4r 1 DF E2 .dbyt 0DFE2h -0022E6r 1 DF E3 .dbyt 0DFE3h -0022E8r 1 DF E4 .dbyt 0DFE4h -0022EAr 1 DF E5 .dbyt 0DFE5h -0022ECr 1 DF E6 .dbyt 0DFE6h -0022EEr 1 DF E7 .dbyt 0DFE7h -0022F0r 1 DF E8 .dbyt 0DFE8h -0022F2r 1 DF E9 .dbyt 0DFE9h -0022F4r 1 DF EA .dbyt 0DFEAh -0022F6r 1 DF EB .dbyt 0DFEBh -0022F8r 1 DF EC .dbyt 0DFECh -0022FAr 1 DF ED .dbyt 0DFEDh -0022FCr 1 DF EE .dbyt 0DFEEh -0022FEr 1 DF EF .dbyt 0DFEFh -002300r 1 DF F0 .dbyt 0DFF0h -002302r 1 DF F1 .dbyt 0DFF1h -002304r 1 DF F2 .dbyt 0DFF2h -002306r 1 DF F3 .dbyt 0DFF3h -002308r 1 DF F4 .dbyt 0DFF4h -00230Ar 1 DF F5 .dbyt 0DFF5h -00230Cr 1 DF F6 .dbyt 0DFF6h -00230Er 1 DF F7 .dbyt 0DFF7h -002310r 1 DF F8 .dbyt 0DFF8h -002312r 1 DF F9 .dbyt 0DFF9h -002314r 1 DF FA .dbyt 0DFFAh -002316r 1 DF FB .dbyt 0DFFBh -002318r 1 DF FC .dbyt 0DFFCh -00231Ar 1 DF FD .dbyt 0DFFDh -00231Cr 1 DF FE .dbyt 0DFFEh -00231Er 1 DF FF .dbyt 0DFFFh -002320r 1 E0 00 .dbyt 0E000h -002322r 1 E0 01 .dbyt 0E001h -002324r 1 E0 02 .dbyt 0E002h -002326r 1 E0 03 .dbyt 0E003h -002328r 1 E0 04 .dbyt 0E004h -00232Ar 1 E0 05 .dbyt 0E005h -00232Cr 1 E0 06 .dbyt 0E006h -00232Er 1 E0 07 .dbyt 0E007h -002330r 1 E0 08 .dbyt 0E008h -002332r 1 E0 09 .dbyt 0E009h -002334r 1 E0 0A .dbyt 0E00Ah -002336r 1 E0 0B .dbyt 0E00Bh -002338r 1 E0 0C .dbyt 0E00Ch -00233Ar 1 E0 0D .dbyt 0E00Dh -00233Cr 1 E0 0E .dbyt 0E00Eh -00233Er 1 E0 0F .dbyt 0E00Fh -002340r 1 EF E1 .dbyt 0EFE1h -002342r 1 EF E2 .dbyt 0EFE2h -002344r 1 EF E3 .dbyt 0EFE3h -002346r 1 EF E4 .dbyt 0EFE4h -002348r 1 EF E5 .dbyt 0EFE5h -00234Ar 1 EF E6 .dbyt 0EFE6h -00234Cr 1 EF E7 .dbyt 0EFE7h -00234Er 1 EF E8 .dbyt 0EFE8h -002350r 1 EF E9 .dbyt 0EFE9h -002352r 1 EF EA .dbyt 0EFEAh -002354r 1 EF EB .dbyt 0EFEBh -002356r 1 EF EC .dbyt 0EFECh -002358r 1 EF ED .dbyt 0EFEDh -00235Ar 1 EF EE .dbyt 0EFEEh -00235Cr 1 EF EF .dbyt 0EFEFh -00235Er 1 EF F0 .dbyt 0EFF0h -002360r 1 EF F1 .dbyt 0EFF1h -002362r 1 EF F2 .dbyt 0EFF2h -002364r 1 EF F3 .dbyt 0EFF3h -002366r 1 EF F4 .dbyt 0EFF4h -002368r 1 EF F5 .dbyt 0EFF5h -00236Ar 1 EF F6 .dbyt 0EFF6h -00236Cr 1 EF F7 .dbyt 0EFF7h -00236Er 1 EF F8 .dbyt 0EFF8h -002370r 1 EF F9 .dbyt 0EFF9h -002372r 1 EF FA .dbyt 0EFFAh -002374r 1 EF FB .dbyt 0EFFBh -002376r 1 EF FC .dbyt 0EFFCh -002378r 1 EF FD .dbyt 0EFFDh -00237Ar 1 EF FE .dbyt 0EFFEh -00237Cr 1 EF FF .dbyt 0EFFFh -00237Er 1 F0 00 .dbyt 0F000h -002380r 1 F0 01 .dbyt 0F001h -002382r 1 F0 02 .dbyt 0F002h -002384r 1 F0 03 .dbyt 0F003h -002386r 1 F0 04 .dbyt 0F004h -002388r 1 F0 05 .dbyt 0F005h -00238Ar 1 F0 06 .dbyt 0F006h -00238Cr 1 F0 07 .dbyt 0F007h -00238Er 1 F0 08 .dbyt 0F008h -002390r 1 F0 09 .dbyt 0F009h -002392r 1 F0 0A .dbyt 0F00Ah -002394r 1 F0 0B .dbyt 0F00Bh -002396r 1 F0 0C .dbyt 0F00Ch -002398r 1 F0 0D .dbyt 0F00Dh -00239Ar 1 F0 0E .dbyt 0F00Eh -00239Cr 1 F0 0F .dbyt 0F00Fh -00239Er 1 FF E1 .dbyt 0FFE1h -0023A0r 1 FF E2 .dbyt 0FFE2h -0023A2r 1 FF E3 .dbyt 0FFE3h -0023A4r 1 FF E4 .dbyt 0FFE4h -0023A6r 1 FF E5 .dbyt 0FFE5h -0023A8r 1 FF E6 .dbyt 0FFE6h -0023AAr 1 FF E7 .dbyt 0FFE7h -0023ACr 1 FF E8 .dbyt 0FFE8h -0023AEr 1 FF E9 .dbyt 0FFE9h -0023B0r 1 FF EA .dbyt 0FFEAh -0023B2r 1 FF EB .dbyt 0FFEBh -0023B4r 1 FF EC .dbyt 0FFECh -0023B6r 1 FF ED .dbyt 0FFEDh -0023B8r 1 FF EE .dbyt 0FFEEh -0023BAr 1 FF EF .dbyt 0FFEFh -0023BCr 1 FF F0 .dbyt 0FFF0h -0023BEr 1 FF F1 .dbyt 0FFF1h -0023C0r 1 FF F2 .dbyt 0FFF2h -0023C2r 1 FF F3 .dbyt 0FFF3h -0023C4r 1 FF F4 .dbyt 0FFF4h -0023C6r 1 FF F5 .dbyt 0FFF5h -0023C8r 1 FF F6 .dbyt 0FFF6h -0023CAr 1 FF F7 .dbyt 0FFF7h -0023CCr 1 FF F8 .dbyt 0FFF8h -0023CEr 1 FF F9 .dbyt 0FFF9h -0023D0r 1 FF FA .dbyt 0FFFAh -0023D2r 1 FF FB .dbyt 0FFFBh -0023D4r 1 FF FC .dbyt 0FFFCh -0023D6r 1 FF FD .dbyt 0FFFDh -0023D8r 1 FF FE .dbyt 0FFFEh -0023DAr 1 FF FF .dbyt 0FFFFh +002046r 1 ; alternative 4-digit hex values, uppercase +002046r 1 00 00 .dbyt 0000h +002048r 1 00 01 .dbyt 0001h +00204Ar 1 00 02 .dbyt 0002h +00204Cr 1 00 03 .dbyt 0003h +00204Er 1 00 04 .dbyt 0004h +002050r 1 00 05 .dbyt 0005h +002052r 1 00 06 .dbyt 0006h +002054r 1 00 07 .dbyt 0007h +002056r 1 00 08 .dbyt 0008h +002058r 1 00 09 .dbyt 0009h +00205Ar 1 00 0A .dbyt 000Ah +00205Cr 1 00 0B .dbyt 000Bh +00205Er 1 00 0C .dbyt 000Ch +002060r 1 00 0D .dbyt 000Dh +002062r 1 00 0E .dbyt 000Eh +002064r 1 00 0F .dbyt 000Fh +002066r 1 00 10 .dbyt 0010h +002068r 1 00 11 .dbyt 0011h +00206Ar 1 00 12 .dbyt 0012h +00206Cr 1 00 13 .dbyt 0013h +00206Er 1 00 70 .dbyt 0070h +002070r 1 00 71 .dbyt 0071h +002072r 1 00 72 .dbyt 0072h +002074r 1 00 73 .dbyt 0073h +002076r 1 00 74 .dbyt 0074h +002078r 1 00 75 .dbyt 0075h +00207Ar 1 00 76 .dbyt 0076h +00207Cr 1 00 77 .dbyt 0077h +00207Er 1 00 78 .dbyt 0078h +002080r 1 00 79 .dbyt 0079h +002082r 1 00 7A .dbyt 007Ah +002084r 1 00 7B .dbyt 007Bh +002086r 1 00 7C .dbyt 007Ch +002088r 1 00 7D .dbyt 007Dh +00208Ar 1 00 7E .dbyt 007Eh +00208Cr 1 00 7F .dbyt 007Fh +00208Er 1 00 80 .dbyt 0080h +002090r 1 00 81 .dbyt 0081h +002092r 1 00 82 .dbyt 0082h +002094r 1 00 83 .dbyt 0083h +002096r 1 00 84 .dbyt 0084h +002098r 1 00 85 .dbyt 0085h +00209Ar 1 00 86 .dbyt 0086h +00209Cr 1 00 F0 .dbyt 00F0h +00209Er 1 00 F1 .dbyt 00F1h +0020A0r 1 00 F2 .dbyt 00F2h +0020A2r 1 00 F3 .dbyt 00F3h +0020A4r 1 00 F4 .dbyt 00F4h +0020A6r 1 00 F5 .dbyt 00F5h +0020A8r 1 00 F6 .dbyt 00F6h +0020AAr 1 00 F7 .dbyt 00F7h +0020ACr 1 00 F8 .dbyt 00F8h +0020AEr 1 00 F9 .dbyt 00F9h +0020B0r 1 00 FA .dbyt 00FAh +0020B2r 1 00 FB .dbyt 00FBh +0020B4r 1 00 FC .dbyt 00FCh +0020B6r 1 00 FD .dbyt 00FDh +0020B8r 1 00 FE .dbyt 00FEh +0020BAr 1 00 FF .dbyt 00FFh +0020BCr 1 01 00 .dbyt 0100h +0020BEr 1 01 01 .dbyt 0101h +0020C0r 1 01 02 .dbyt 0102h +0020C2r 1 01 03 .dbyt 0103h +0020C4r 1 0F D2 .dbyt 0FD2h +0020C6r 1 0F D3 .dbyt 0FD3h +0020C8r 1 0F D4 .dbyt 0FD4h +0020CAr 1 0F D5 .dbyt 0FD5h +0020CCr 1 0F D6 .dbyt 0FD6h +0020CEr 1 0F D7 .dbyt 0FD7h +0020D0r 1 0F D8 .dbyt 0FD8h +0020D2r 1 0F D9 .dbyt 0FD9h +0020D4r 1 0F DA .dbyt 0FDAh +0020D6r 1 0F DB .dbyt 0FDBh +0020D8r 1 0F DC .dbyt 0FDCh +0020DAr 1 0F DD .dbyt 0FDDh +0020DCr 1 0F DE .dbyt 0FDEh +0020DEr 1 0F DF .dbyt 0FDFh +0020E0r 1 0F E0 .dbyt 0FE0h +0020E2r 1 0F E1 .dbyt 0FE1h +0020E4r 1 0F E2 .dbyt 0FE2h +0020E6r 1 0F E3 .dbyt 0FE3h +0020E8r 1 0F E4 .dbyt 0FE4h +0020EAr 1 0F E5 .dbyt 0FE5h +0020ECr 1 0F E6 .dbyt 0FE6h +0020EEr 1 0F E7 .dbyt 0FE7h +0020F0r 1 0F E8 .dbyt 0FE8h +0020F2r 1 0F E9 .dbyt 0FE9h +0020F4r 1 0F EA .dbyt 0FEAh +0020F6r 1 0F EB .dbyt 0FEBh +0020F8r 1 0F EC .dbyt 0FECh +0020FAr 1 0F ED .dbyt 0FEDh +0020FCr 1 0F EE .dbyt 0FEEh +0020FEr 1 0F EF .dbyt 0FEFh +002100r 1 0F F0 .dbyt 0FF0h +002102r 1 0F F1 .dbyt 0FF1h +002104r 1 0F F2 .dbyt 0FF2h +002106r 1 0F F3 .dbyt 0FF3h +002108r 1 0F F4 .dbyt 0FF4h +00210Ar 1 0F F5 .dbyt 0FF5h +00210Cr 1 0F F6 .dbyt 0FF6h +00210Er 1 0F F7 .dbyt 0FF7h +002110r 1 0F F8 .dbyt 0FF8h +002112r 1 0F F9 .dbyt 0FF9h +002114r 1 0F FA .dbyt 0FFAh +002116r 1 0F FB .dbyt 0FFBh +002118r 1 0F FC .dbyt 0FFCh +00211Ar 1 0F FD .dbyt 0FFDh +00211Cr 1 0F FE .dbyt 0FFEh +00211Er 1 0F FF .dbyt 0FFFh +002120r 1 10 00 .dbyt 1000h +002122r 1 10 01 .dbyt 1001h +002124r 1 10 02 .dbyt 1002h +002126r 1 10 03 .dbyt 1003h +002128r 1 10 04 .dbyt 1004h +00212Ar 1 10 05 .dbyt 1005h +00212Cr 1 10 06 .dbyt 1006h +00212Er 1 10 07 .dbyt 1007h +002130r 1 10 08 .dbyt 1008h +002132r 1 7F F0 .dbyt 7FF0h +002134r 1 7F F1 .dbyt 7FF1h +002136r 1 7F F2 .dbyt 7FF2h +002138r 1 7F F3 .dbyt 7FF3h +00213Ar 1 7F F4 .dbyt 7FF4h +00213Cr 1 7F F5 .dbyt 7FF5h +00213Er 1 7F F6 .dbyt 7FF6h +002140r 1 7F F7 .dbyt 7FF7h +002142r 1 7F F8 .dbyt 7FF8h +002144r 1 7F F9 .dbyt 7FF9h +002146r 1 7F FA .dbyt 7FFAh +002148r 1 7F FB .dbyt 7FFBh +00214Ar 1 7F FC .dbyt 7FFCh +00214Cr 1 7F FD .dbyt 7FFDh +00214Er 1 7F FE .dbyt 7FFEh +002150r 1 7F FF .dbyt 7FFFh +002152r 1 80 00 .dbyt 8000h +002154r 1 80 01 .dbyt 8001h +002156r 1 80 02 .dbyt 8002h +002158r 1 80 03 .dbyt 8003h +00215Ar 1 80 04 .dbyt 8004h +00215Cr 1 80 05 .dbyt 8005h +00215Er 1 80 06 .dbyt 8006h +002160r 1 80 07 .dbyt 8007h +002162r 1 80 08 .dbyt 8008h +002164r 1 80 09 .dbyt 8009h +002166r 1 80 0A .dbyt 800Ah +002168r 1 80 0B .dbyt 800Bh +00216Ar 1 9F E1 .dbyt 9FE1h +00216Cr 1 9F E2 .dbyt 9FE2h +00216Er 1 9F E3 .dbyt 9FE3h +002170r 1 9F E4 .dbyt 9FE4h +002172r 1 9F E5 .dbyt 9FE5h +002174r 1 9F E6 .dbyt 9FE6h +002176r 1 9F E7 .dbyt 9FE7h +002178r 1 9F E8 .dbyt 9FE8h +00217Ar 1 9F E9 .dbyt 9FE9h +00217Cr 1 9F EA .dbyt 9FEAh +00217Er 1 9F EB .dbyt 9FEBh +002180r 1 9F EC .dbyt 9FECh +002182r 1 9F ED .dbyt 9FEDh +002184r 1 9F EE .dbyt 9FEEh +002186r 1 9F EF .dbyt 9FEFh +002188r 1 9F F0 .dbyt 9FF0h +00218Ar 1 9F F1 .dbyt 9FF1h +00218Cr 1 9F F2 .dbyt 9FF2h +00218Er 1 9F F3 .dbyt 9FF3h +002190r 1 9F F4 .dbyt 9FF4h +002192r 1 9F F5 .dbyt 9FF5h +002194r 1 9F F6 .dbyt 9FF6h +002196r 1 9F F7 .dbyt 9FF7h +002198r 1 9F F8 .dbyt 9FF8h +00219Ar 1 9F F9 .dbyt 9FF9h +00219Cr 1 9F FA .dbyt 9FFAh +00219Er 1 9F FB .dbyt 9FFBh +0021A0r 1 9F FC .dbyt 9FFCh +0021A2r 1 9F FD .dbyt 9FFDh +0021A4r 1 9F FE .dbyt 9FFEh +0021A6r 1 9F FF .dbyt 9FFFh +0021A8r 1 A0 00 .dbyt 0A000h +0021AAr 1 A0 01 .dbyt 0A001h +0021ACr 1 A0 02 .dbyt 0A002h +0021AEr 1 A0 03 .dbyt 0A003h +0021B0r 1 A0 04 .dbyt 0A004h +0021B2r 1 A0 05 .dbyt 0A005h +0021B4r 1 A0 06 .dbyt 0A006h +0021B6r 1 A0 07 .dbyt 0A007h +0021B8r 1 A0 08 .dbyt 0A008h +0021BAr 1 A0 09 .dbyt 0A009h +0021BCr 1 A0 0A .dbyt 0A00Ah +0021BEr 1 A0 0B .dbyt 0A00Bh +0021C0r 1 A0 0C .dbyt 0A00Ch +0021C2r 1 A0 0D .dbyt 0A00Dh +0021C4r 1 A0 0E .dbyt 0A00Eh +0021C6r 1 A0 0F .dbyt 0A00Fh +0021C8r 1 AF E1 .dbyt 0AFE1h +0021CAr 1 AF E2 .dbyt 0AFE2h +0021CCr 1 AF E3 .dbyt 0AFE3h +0021CEr 1 AF E4 .dbyt 0AFE4h +0021D0r 1 AF E5 .dbyt 0AFE5h +0021D2r 1 AF E6 .dbyt 0AFE6h +0021D4r 1 AF E7 .dbyt 0AFE7h +0021D6r 1 AF E8 .dbyt 0AFE8h +0021D8r 1 AF E9 .dbyt 0AFE9h +0021DAr 1 AF EA .dbyt 0AFEAh +0021DCr 1 AF EB .dbyt 0AFEBh +0021DEr 1 AF EC .dbyt 0AFECh +0021E0r 1 AF ED .dbyt 0AFEDh +0021E2r 1 AF EE .dbyt 0AFEEh +0021E4r 1 AF EF .dbyt 0AFEFh +0021E6r 1 AF F0 .dbyt 0AFF0h +0021E8r 1 AF F1 .dbyt 0AFF1h +0021EAr 1 AF F2 .dbyt 0AFF2h +0021ECr 1 AF F3 .dbyt 0AFF3h +0021EEr 1 AF F4 .dbyt 0AFF4h +0021F0r 1 AF F5 .dbyt 0AFF5h +0021F2r 1 AF F6 .dbyt 0AFF6h +0021F4r 1 AF F7 .dbyt 0AFF7h +0021F6r 1 AF F8 .dbyt 0AFF8h +0021F8r 1 AF F9 .dbyt 0AFF9h +0021FAr 1 AF FA .dbyt 0AFFAh +0021FCr 1 AF FB .dbyt 0AFFBh +0021FEr 1 AF FC .dbyt 0AFFCh +002200r 1 AF FD .dbyt 0AFFDh +002202r 1 AF FE .dbyt 0AFFEh +002204r 1 AF FF .dbyt 0AFFFh +002206r 1 B0 00 .dbyt 0B000h +002208r 1 B0 01 .dbyt 0B001h +00220Ar 1 B0 02 .dbyt 0B002h +00220Cr 1 B0 03 .dbyt 0B003h +00220Er 1 B0 04 .dbyt 0B004h +002210r 1 B0 05 .dbyt 0B005h +002212r 1 B0 06 .dbyt 0B006h +002214r 1 B0 07 .dbyt 0B007h +002216r 1 B0 08 .dbyt 0B008h +002218r 1 B0 09 .dbyt 0B009h +00221Ar 1 B0 0A .dbyt 0B00Ah +00221Cr 1 B0 0B .dbyt 0B00Bh +00221Er 1 B0 0C .dbyt 0B00Ch +002220r 1 B0 0D .dbyt 0B00Dh +002222r 1 B0 0E .dbyt 0B00Eh +002224r 1 B0 0F .dbyt 0B00Fh +002226r 1 BF E1 .dbyt 0BFE1h +002228r 1 BF E2 .dbyt 0BFE2h +00222Ar 1 BF E3 .dbyt 0BFE3h +00222Cr 1 BF E4 .dbyt 0BFE4h +00222Er 1 BF E5 .dbyt 0BFE5h +002230r 1 BF E6 .dbyt 0BFE6h +002232r 1 BF E7 .dbyt 0BFE7h +002234r 1 BF E8 .dbyt 0BFE8h +002236r 1 BF E9 .dbyt 0BFE9h +002238r 1 BF EA .dbyt 0BFEAh +00223Ar 1 BF EB .dbyt 0BFEBh +00223Cr 1 BF EC .dbyt 0BFECh +00223Er 1 BF ED .dbyt 0BFEDh +002240r 1 BF EE .dbyt 0BFEEh +002242r 1 BF EF .dbyt 0BFEFh +002244r 1 BF F0 .dbyt 0BFF0h +002246r 1 BF F1 .dbyt 0BFF1h +002248r 1 BF F2 .dbyt 0BFF2h +00224Ar 1 BF F3 .dbyt 0BFF3h +00224Cr 1 BF F4 .dbyt 0BFF4h +00224Er 1 BF F5 .dbyt 0BFF5h +002250r 1 BF F6 .dbyt 0BFF6h +002252r 1 BF F7 .dbyt 0BFF7h +002254r 1 BF F8 .dbyt 0BFF8h +002256r 1 BF F9 .dbyt 0BFF9h +002258r 1 BF FA .dbyt 0BFFAh +00225Ar 1 BF FB .dbyt 0BFFBh +00225Cr 1 BF FC .dbyt 0BFFCh +00225Er 1 BF FD .dbyt 0BFFDh +002260r 1 BF FE .dbyt 0BFFEh +002262r 1 BF FF .dbyt 0BFFFh +002264r 1 C0 00 .dbyt 0C000h +002266r 1 C0 01 .dbyt 0C001h +002268r 1 C0 02 .dbyt 0C002h +00226Ar 1 C0 03 .dbyt 0C003h +00226Cr 1 C0 04 .dbyt 0C004h +00226Er 1 C0 05 .dbyt 0C005h +002270r 1 C0 06 .dbyt 0C006h +002272r 1 C0 07 .dbyt 0C007h +002274r 1 C0 08 .dbyt 0C008h +002276r 1 C0 09 .dbyt 0C009h +002278r 1 C0 0A .dbyt 0C00Ah +00227Ar 1 C0 0B .dbyt 0C00Bh +00227Cr 1 C0 0C .dbyt 0C00Ch +00227Er 1 C0 0D .dbyt 0C00Dh +002280r 1 C0 0E .dbyt 0C00Eh +002282r 1 C0 0F .dbyt 0C00Fh +002284r 1 CF E1 .dbyt 0CFE1h +002286r 1 CF E2 .dbyt 0CFE2h +002288r 1 CF E3 .dbyt 0CFE3h +00228Ar 1 CF E4 .dbyt 0CFE4h +00228Cr 1 CF E5 .dbyt 0CFE5h +00228Er 1 CF E6 .dbyt 0CFE6h +002290r 1 CF E7 .dbyt 0CFE7h +002292r 1 CF E8 .dbyt 0CFE8h +002294r 1 CF E9 .dbyt 0CFE9h +002296r 1 CF EA .dbyt 0CFEAh +002298r 1 CF EB .dbyt 0CFEBh +00229Ar 1 CF EC .dbyt 0CFECh +00229Cr 1 CF ED .dbyt 0CFEDh +00229Er 1 CF EE .dbyt 0CFEEh +0022A0r 1 CF EF .dbyt 0CFEFh +0022A2r 1 CF F0 .dbyt 0CFF0h +0022A4r 1 CF F1 .dbyt 0CFF1h +0022A6r 1 CF F2 .dbyt 0CFF2h +0022A8r 1 CF F3 .dbyt 0CFF3h +0022AAr 1 CF F4 .dbyt 0CFF4h +0022ACr 1 CF F5 .dbyt 0CFF5h +0022AEr 1 CF F6 .dbyt 0CFF6h +0022B0r 1 CF F7 .dbyt 0CFF7h +0022B2r 1 CF F8 .dbyt 0CFF8h +0022B4r 1 CF F9 .dbyt 0CFF9h +0022B6r 1 CF FA .dbyt 0CFFAh +0022B8r 1 CF FB .dbyt 0CFFBh +0022BAr 1 CF FC .dbyt 0CFFCh +0022BCr 1 CF FD .dbyt 0CFFDh +0022BEr 1 CF FE .dbyt 0CFFEh +0022C0r 1 CF FF .dbyt 0CFFFh +0022C2r 1 D0 00 .dbyt 0D000h +0022C4r 1 D0 01 .dbyt 0D001h +0022C6r 1 D0 02 .dbyt 0D002h +0022C8r 1 D0 03 .dbyt 0D003h +0022CAr 1 D0 04 .dbyt 0D004h +0022CCr 1 D0 05 .dbyt 0D005h +0022CEr 1 D0 06 .dbyt 0D006h +0022D0r 1 D0 07 .dbyt 0D007h +0022D2r 1 D0 08 .dbyt 0D008h +0022D4r 1 D0 09 .dbyt 0D009h +0022D6r 1 D0 0A .dbyt 0D00Ah +0022D8r 1 D0 0B .dbyt 0D00Bh +0022DAr 1 D0 0C .dbyt 0D00Ch +0022DCr 1 D0 0D .dbyt 0D00Dh +0022DEr 1 D0 0E .dbyt 0D00Eh +0022E0r 1 D0 0F .dbyt 0D00Fh +0022E2r 1 DF E1 .dbyt 0DFE1h +0022E4r 1 DF E2 .dbyt 0DFE2h +0022E6r 1 DF E3 .dbyt 0DFE3h +0022E8r 1 DF E4 .dbyt 0DFE4h +0022EAr 1 DF E5 .dbyt 0DFE5h +0022ECr 1 DF E6 .dbyt 0DFE6h +0022EEr 1 DF E7 .dbyt 0DFE7h +0022F0r 1 DF E8 .dbyt 0DFE8h +0022F2r 1 DF E9 .dbyt 0DFE9h +0022F4r 1 DF EA .dbyt 0DFEAh +0022F6r 1 DF EB .dbyt 0DFEBh +0022F8r 1 DF EC .dbyt 0DFECh +0022FAr 1 DF ED .dbyt 0DFEDh +0022FCr 1 DF EE .dbyt 0DFEEh +0022FEr 1 DF EF .dbyt 0DFEFh +002300r 1 DF F0 .dbyt 0DFF0h +002302r 1 DF F1 .dbyt 0DFF1h +002304r 1 DF F2 .dbyt 0DFF2h +002306r 1 DF F3 .dbyt 0DFF3h +002308r 1 DF F4 .dbyt 0DFF4h +00230Ar 1 DF F5 .dbyt 0DFF5h +00230Cr 1 DF F6 .dbyt 0DFF6h +00230Er 1 DF F7 .dbyt 0DFF7h +002310r 1 DF F8 .dbyt 0DFF8h +002312r 1 DF F9 .dbyt 0DFF9h +002314r 1 DF FA .dbyt 0DFFAh +002316r 1 DF FB .dbyt 0DFFBh +002318r 1 DF FC .dbyt 0DFFCh +00231Ar 1 DF FD .dbyt 0DFFDh +00231Cr 1 DF FE .dbyt 0DFFEh +00231Er 1 DF FF .dbyt 0DFFFh +002320r 1 E0 00 .dbyt 0E000h +002322r 1 E0 01 .dbyt 0E001h +002324r 1 E0 02 .dbyt 0E002h +002326r 1 E0 03 .dbyt 0E003h +002328r 1 E0 04 .dbyt 0E004h +00232Ar 1 E0 05 .dbyt 0E005h +00232Cr 1 E0 06 .dbyt 0E006h +00232Er 1 E0 07 .dbyt 0E007h +002330r 1 E0 08 .dbyt 0E008h +002332r 1 E0 09 .dbyt 0E009h +002334r 1 E0 0A .dbyt 0E00Ah +002336r 1 E0 0B .dbyt 0E00Bh +002338r 1 E0 0C .dbyt 0E00Ch +00233Ar 1 E0 0D .dbyt 0E00Dh +00233Cr 1 E0 0E .dbyt 0E00Eh +00233Er 1 E0 0F .dbyt 0E00Fh +002340r 1 EF E1 .dbyt 0EFE1h +002342r 1 EF E2 .dbyt 0EFE2h +002344r 1 EF E3 .dbyt 0EFE3h +002346r 1 EF E4 .dbyt 0EFE4h +002348r 1 EF E5 .dbyt 0EFE5h +00234Ar 1 EF E6 .dbyt 0EFE6h +00234Cr 1 EF E7 .dbyt 0EFE7h +00234Er 1 EF E8 .dbyt 0EFE8h +002350r 1 EF E9 .dbyt 0EFE9h +002352r 1 EF EA .dbyt 0EFEAh +002354r 1 EF EB .dbyt 0EFEBh +002356r 1 EF EC .dbyt 0EFECh +002358r 1 EF ED .dbyt 0EFEDh +00235Ar 1 EF EE .dbyt 0EFEEh +00235Cr 1 EF EF .dbyt 0EFEFh +00235Er 1 EF F0 .dbyt 0EFF0h +002360r 1 EF F1 .dbyt 0EFF1h +002362r 1 EF F2 .dbyt 0EFF2h +002364r 1 EF F3 .dbyt 0EFF3h +002366r 1 EF F4 .dbyt 0EFF4h +002368r 1 EF F5 .dbyt 0EFF5h +00236Ar 1 EF F6 .dbyt 0EFF6h +00236Cr 1 EF F7 .dbyt 0EFF7h +00236Er 1 EF F8 .dbyt 0EFF8h +002370r 1 EF F9 .dbyt 0EFF9h +002372r 1 EF FA .dbyt 0EFFAh +002374r 1 EF FB .dbyt 0EFFBh +002376r 1 EF FC .dbyt 0EFFCh +002378r 1 EF FD .dbyt 0EFFDh +00237Ar 1 EF FE .dbyt 0EFFEh +00237Cr 1 EF FF .dbyt 0EFFFh +00237Er 1 F0 00 .dbyt 0F000h +002380r 1 F0 01 .dbyt 0F001h +002382r 1 F0 02 .dbyt 0F002h +002384r 1 F0 03 .dbyt 0F003h +002386r 1 F0 04 .dbyt 0F004h +002388r 1 F0 05 .dbyt 0F005h +00238Ar 1 F0 06 .dbyt 0F006h +00238Cr 1 F0 07 .dbyt 0F007h +00238Er 1 F0 08 .dbyt 0F008h +002390r 1 F0 09 .dbyt 0F009h +002392r 1 F0 0A .dbyt 0F00Ah +002394r 1 F0 0B .dbyt 0F00Bh +002396r 1 F0 0C .dbyt 0F00Ch +002398r 1 F0 0D .dbyt 0F00Dh +00239Ar 1 F0 0E .dbyt 0F00Eh +00239Cr 1 F0 0F .dbyt 0F00Fh +00239Er 1 FF E1 .dbyt 0FFE1h +0023A0r 1 FF E2 .dbyt 0FFE2h +0023A2r 1 FF E3 .dbyt 0FFE3h +0023A4r 1 FF E4 .dbyt 0FFE4h +0023A6r 1 FF E5 .dbyt 0FFE5h +0023A8r 1 FF E6 .dbyt 0FFE6h +0023AAr 1 FF E7 .dbyt 0FFE7h +0023ACr 1 FF E8 .dbyt 0FFE8h +0023AEr 1 FF E9 .dbyt 0FFE9h +0023B0r 1 FF EA .dbyt 0FFEAh +0023B2r 1 FF EB .dbyt 0FFEBh +0023B4r 1 FF EC .dbyt 0FFECh +0023B6r 1 FF ED .dbyt 0FFEDh +0023B8r 1 FF EE .dbyt 0FFEEh +0023BAr 1 FF EF .dbyt 0FFEFh +0023BCr 1 FF F0 .dbyt 0FFF0h +0023BEr 1 FF F1 .dbyt 0FFF1h +0023C0r 1 FF F2 .dbyt 0FFF2h +0023C2r 1 FF F3 .dbyt 0FFF3h +0023C4r 1 FF F4 .dbyt 0FFF4h +0023C6r 1 FF F5 .dbyt 0FFF5h +0023C8r 1 FF F6 .dbyt 0FFF6h +0023CAr 1 FF F7 .dbyt 0FFF7h +0023CCr 1 FF F8 .dbyt 0FFF8h +0023CEr 1 FF F9 .dbyt 0FFF9h +0023D0r 1 FF FA .dbyt 0FFFAh +0023D2r 1 FF FB .dbyt 0FFFBh +0023D4r 1 FF FC .dbyt 0FFFCh +0023D6r 1 FF FD .dbyt 0FFFDh +0023D8r 1 FF FE .dbyt 0FFFEh +0023DAr 1 FF FF .dbyt 0FFFFh 0023DCr 1 -0023DCr 1 ; alternative hex values, always leading zero -0023DCr 1 00 00 .dbyt 00h -0023DEr 1 00 01 .dbyt 01h -0023E0r 1 00 02 .dbyt 02h -0023E2r 1 00 03 .dbyt 03h -0023E4r 1 00 04 .dbyt 04h -0023E6r 1 00 05 .dbyt 05h -0023E8r 1 00 06 .dbyt 06h -0023EAr 1 00 07 .dbyt 07h -0023ECr 1 00 08 .dbyt 08h -0023EEr 1 00 09 .dbyt 09h -0023F0r 1 00 0A .dbyt 0ah -0023F2r 1 00 0B .dbyt 0bh -0023F4r 1 00 0C .dbyt 0ch -0023F6r 1 00 0D .dbyt 0dh -0023F8r 1 00 0E .dbyt 0eh -0023FAr 1 00 0F .dbyt 0fh -0023FCr 1 00 10 .dbyt 010h -0023FEr 1 00 11 .dbyt 011h -002400r 1 00 12 .dbyt 012h -002402r 1 00 13 .dbyt 013h -002404r 1 00 70 .dbyt 070h -002406r 1 00 71 .dbyt 071h -002408r 1 00 72 .dbyt 072h -00240Ar 1 00 73 .dbyt 073h -00240Cr 1 00 74 .dbyt 074h -00240Er 1 00 75 .dbyt 075h -002410r 1 00 76 .dbyt 076h -002412r 1 00 77 .dbyt 077h -002414r 1 00 78 .dbyt 078h -002416r 1 00 79 .dbyt 079h -002418r 1 00 7A .dbyt 07ah -00241Ar 1 00 7B .dbyt 07bh -00241Cr 1 00 7C .dbyt 07ch -00241Er 1 00 7D .dbyt 07dh -002420r 1 00 7E .dbyt 07eh -002422r 1 00 7F .dbyt 07fh -002424r 1 00 80 .dbyt 080h -002426r 1 00 81 .dbyt 081h -002428r 1 00 82 .dbyt 082h -00242Ar 1 00 83 .dbyt 083h -00242Cr 1 00 84 .dbyt 084h -00242Er 1 00 85 .dbyt 085h -002430r 1 00 86 .dbyt 086h -002432r 1 00 F0 .dbyt 0f0h -002434r 1 00 F1 .dbyt 0f1h -002436r 1 00 F2 .dbyt 0f2h -002438r 1 00 F3 .dbyt 0f3h -00243Ar 1 00 F4 .dbyt 0f4h -00243Cr 1 00 F5 .dbyt 0f5h -00243Er 1 00 F6 .dbyt 0f6h -002440r 1 00 F7 .dbyt 0f7h -002442r 1 00 F8 .dbyt 0f8h -002444r 1 00 F9 .dbyt 0f9h -002446r 1 00 FA .dbyt 0fah -002448r 1 00 FB .dbyt 0fbh -00244Ar 1 00 FC .dbyt 0fch -00244Cr 1 00 FD .dbyt 0fdh -00244Er 1 00 FE .dbyt 0feh -002450r 1 00 FF .dbyt 0ffh -002452r 1 01 00 .dbyt 0100h -002454r 1 01 01 .dbyt 0101h -002456r 1 01 02 .dbyt 0102h -002458r 1 01 03 .dbyt 0103h -00245Ar 1 0F D2 .dbyt 0fd2h -00245Cr 1 0F D3 .dbyt 0fd3h -00245Er 1 0F D4 .dbyt 0fd4h -002460r 1 0F D5 .dbyt 0fd5h -002462r 1 0F D6 .dbyt 0fd6h -002464r 1 0F D7 .dbyt 0fd7h -002466r 1 0F D8 .dbyt 0fd8h -002468r 1 0F D9 .dbyt 0fd9h -00246Ar 1 0F DA .dbyt 0fdah -00246Cr 1 0F DB .dbyt 0fdbh -00246Er 1 0F DC .dbyt 0fdch -002470r 1 0F DD .dbyt 0fddh -002472r 1 0F DE .dbyt 0fdeh -002474r 1 0F DF .dbyt 0fdfh -002476r 1 0F E0 .dbyt 0fe0h -002478r 1 0F E1 .dbyt 0fe1h -00247Ar 1 0F E2 .dbyt 0fe2h -00247Cr 1 0F E3 .dbyt 0fe3h -00247Er 1 0F E4 .dbyt 0fe4h -002480r 1 0F E5 .dbyt 0fe5h -002482r 1 0F E6 .dbyt 0fe6h -002484r 1 0F E7 .dbyt 0fe7h -002486r 1 0F E8 .dbyt 0fe8h -002488r 1 0F E9 .dbyt 0fe9h -00248Ar 1 0F EA .dbyt 0feah -00248Cr 1 0F EB .dbyt 0febh -00248Er 1 0F EC .dbyt 0fech -002490r 1 0F ED .dbyt 0fedh -002492r 1 0F EE .dbyt 0feeh -002494r 1 0F EF .dbyt 0fefh -002496r 1 0F F0 .dbyt 0ff0h -002498r 1 0F F1 .dbyt 0ff1h -00249Ar 1 0F F2 .dbyt 0ff2h -00249Cr 1 0F F3 .dbyt 0ff3h -00249Er 1 0F F4 .dbyt 0ff4h -0024A0r 1 0F F5 .dbyt 0ff5h -0024A2r 1 0F F6 .dbyt 0ff6h -0024A4r 1 0F F7 .dbyt 0ff7h -0024A6r 1 0F F8 .dbyt 0ff8h -0024A8r 1 0F F9 .dbyt 0ff9h -0024AAr 1 0F FA .dbyt 0ffah -0024ACr 1 0F FB .dbyt 0ffbh -0024AEr 1 0F FC .dbyt 0ffch -0024B0r 1 0F FD .dbyt 0ffdh -0024B2r 1 0F FE .dbyt 0ffeh -0024B4r 1 0F FF .dbyt 0fffh -0024B6r 1 10 00 .dbyt 01000h -0024B8r 1 10 01 .dbyt 01001h -0024BAr 1 10 02 .dbyt 01002h -0024BCr 1 10 03 .dbyt 01003h -0024BEr 1 10 04 .dbyt 01004h -0024C0r 1 10 05 .dbyt 01005h -0024C2r 1 10 06 .dbyt 01006h -0024C4r 1 10 07 .dbyt 01007h -0024C6r 1 10 08 .dbyt 01008h -0024C8r 1 7F F0 .dbyt 07ff0h -0024CAr 1 7F F1 .dbyt 07ff1h -0024CCr 1 7F F2 .dbyt 07ff2h -0024CEr 1 7F F3 .dbyt 07ff3h -0024D0r 1 7F F4 .dbyt 07ff4h -0024D2r 1 7F F5 .dbyt 07ff5h -0024D4r 1 7F F6 .dbyt 07ff6h -0024D6r 1 7F F7 .dbyt 07ff7h -0024D8r 1 7F F8 .dbyt 07ff8h -0024DAr 1 7F F9 .dbyt 07ff9h -0024DCr 1 7F FA .dbyt 07ffah -0024DEr 1 7F FB .dbyt 07ffbh -0024E0r 1 7F FC .dbyt 07ffch -0024E2r 1 7F FD .dbyt 07ffdh -0024E4r 1 7F FE .dbyt 07ffeh -0024E6r 1 7F FF .dbyt 07fffh -0024E8r 1 80 00 .dbyt 08000h -0024EAr 1 80 01 .dbyt 08001h -0024ECr 1 80 02 .dbyt 08002h -0024EEr 1 80 03 .dbyt 08003h -0024F0r 1 80 04 .dbyt 08004h -0024F2r 1 80 05 .dbyt 08005h -0024F4r 1 80 06 .dbyt 08006h -0024F6r 1 80 07 .dbyt 08007h -0024F8r 1 80 08 .dbyt 08008h -0024FAr 1 80 09 .dbyt 08009h -0024FCr 1 80 0A .dbyt 0800ah -0024FEr 1 80 0B .dbyt 0800bh -002500r 1 9F E1 .dbyt 09fe1h -002502r 1 9F E2 .dbyt 09fe2h -002504r 1 9F E3 .dbyt 09fe3h -002506r 1 9F E4 .dbyt 09fe4h -002508r 1 9F E5 .dbyt 09fe5h -00250Ar 1 9F E6 .dbyt 09fe6h -00250Cr 1 9F E7 .dbyt 09fe7h -00250Er 1 9F E8 .dbyt 09fe8h -002510r 1 9F E9 .dbyt 09fe9h -002512r 1 9F EA .dbyt 09feah -002514r 1 9F EB .dbyt 09febh -002516r 1 9F EC .dbyt 09fech -002518r 1 9F ED .dbyt 09fedh -00251Ar 1 9F EE .dbyt 09feeh -00251Cr 1 9F EF .dbyt 09fefh -00251Er 1 9F F0 .dbyt 09ff0h -002520r 1 9F F1 .dbyt 09ff1h -002522r 1 9F F2 .dbyt 09ff2h -002524r 1 9F F3 .dbyt 09ff3h -002526r 1 9F F4 .dbyt 09ff4h -002528r 1 9F F5 .dbyt 09ff5h -00252Ar 1 9F F6 .dbyt 09ff6h -00252Cr 1 9F F7 .dbyt 09ff7h -00252Er 1 9F F8 .dbyt 09ff8h -002530r 1 9F F9 .dbyt 09ff9h -002532r 1 9F FA .dbyt 09ffah -002534r 1 9F FB .dbyt 09ffbh -002536r 1 9F FC .dbyt 09ffch -002538r 1 9F FD .dbyt 09ffdh -00253Ar 1 9F FE .dbyt 09ffeh -00253Cr 1 9F FF .dbyt 09fffh -00253Er 1 A0 00 .dbyt 0a000h -002540r 1 A0 01 .dbyt 0a001h -002542r 1 A0 02 .dbyt 0a002h -002544r 1 A0 03 .dbyt 0a003h -002546r 1 A0 04 .dbyt 0a004h -002548r 1 A0 05 .dbyt 0a005h -00254Ar 1 A0 06 .dbyt 0a006h -00254Cr 1 A0 07 .dbyt 0a007h -00254Er 1 A0 08 .dbyt 0a008h -002550r 1 A0 09 .dbyt 0a009h -002552r 1 A0 0A .dbyt 0a00ah -002554r 1 A0 0B .dbyt 0a00bh -002556r 1 A0 0C .dbyt 0a00ch -002558r 1 A0 0D .dbyt 0a00dh -00255Ar 1 A0 0E .dbyt 0a00eh -00255Cr 1 A0 0F .dbyt 0a00fh -00255Er 1 AF E1 .dbyt 0afe1h -002560r 1 AF E2 .dbyt 0afe2h -002562r 1 AF E3 .dbyt 0afe3h -002564r 1 AF E4 .dbyt 0afe4h -002566r 1 AF E5 .dbyt 0afe5h -002568r 1 AF E6 .dbyt 0afe6h -00256Ar 1 AF E7 .dbyt 0afe7h -00256Cr 1 AF E8 .dbyt 0afe8h -00256Er 1 AF E9 .dbyt 0afe9h -002570r 1 AF EA .dbyt 0afeah -002572r 1 AF EB .dbyt 0afebh -002574r 1 AF EC .dbyt 0afech -002576r 1 AF ED .dbyt 0afedh -002578r 1 AF EE .dbyt 0afeeh -00257Ar 1 AF EF .dbyt 0afefh -00257Cr 1 AF F0 .dbyt 0aff0h -00257Er 1 AF F1 .dbyt 0aff1h -002580r 1 AF F2 .dbyt 0aff2h -002582r 1 AF F3 .dbyt 0aff3h -002584r 1 AF F4 .dbyt 0aff4h -002586r 1 AF F5 .dbyt 0aff5h -002588r 1 AF F6 .dbyt 0aff6h -00258Ar 1 AF F7 .dbyt 0aff7h -00258Cr 1 AF F8 .dbyt 0aff8h -00258Er 1 AF F9 .dbyt 0aff9h -002590r 1 AF FA .dbyt 0affah -002592r 1 AF FB .dbyt 0affbh -002594r 1 AF FC .dbyt 0affch -002596r 1 AF FD .dbyt 0affdh -002598r 1 AF FE .dbyt 0affeh -00259Ar 1 AF FF .dbyt 0afffh -00259Cr 1 B0 00 .dbyt 0b000h -00259Er 1 B0 01 .dbyt 0b001h -0025A0r 1 B0 02 .dbyt 0b002h -0025A2r 1 B0 03 .dbyt 0b003h -0025A4r 1 B0 04 .dbyt 0b004h -0025A6r 1 B0 05 .dbyt 0b005h -0025A8r 1 B0 06 .dbyt 0b006h -0025AAr 1 B0 07 .dbyt 0b007h -0025ACr 1 B0 08 .dbyt 0b008h -0025AEr 1 B0 09 .dbyt 0b009h -0025B0r 1 B0 0A .dbyt 0b00ah -0025B2r 1 B0 0B .dbyt 0b00bh -0025B4r 1 B0 0C .dbyt 0b00ch -0025B6r 1 B0 0D .dbyt 0b00dh -0025B8r 1 B0 0E .dbyt 0b00eh -0025BAr 1 B0 0F .dbyt 0b00fh -0025BCr 1 BF E1 .dbyt 0bfe1h -0025BEr 1 BF E2 .dbyt 0bfe2h -0025C0r 1 BF E3 .dbyt 0bfe3h -0025C2r 1 BF E4 .dbyt 0bfe4h -0025C4r 1 BF E5 .dbyt 0bfe5h -0025C6r 1 BF E6 .dbyt 0bfe6h -0025C8r 1 BF E7 .dbyt 0bfe7h -0025CAr 1 BF E8 .dbyt 0bfe8h -0025CCr 1 BF E9 .dbyt 0bfe9h -0025CEr 1 BF EA .dbyt 0bfeah -0025D0r 1 BF EB .dbyt 0bfebh -0025D2r 1 BF EC .dbyt 0bfech -0025D4r 1 BF ED .dbyt 0bfedh -0025D6r 1 BF EE .dbyt 0bfeeh -0025D8r 1 BF EF .dbyt 0bfefh -0025DAr 1 BF F0 .dbyt 0bff0h -0025DCr 1 BF F1 .dbyt 0bff1h -0025DEr 1 BF F2 .dbyt 0bff2h -0025E0r 1 BF F3 .dbyt 0bff3h -0025E2r 1 BF F4 .dbyt 0bff4h -0025E4r 1 BF F5 .dbyt 0bff5h -0025E6r 1 BF F6 .dbyt 0bff6h -0025E8r 1 BF F7 .dbyt 0bff7h -0025EAr 1 BF F8 .dbyt 0bff8h -0025ECr 1 BF F9 .dbyt 0bff9h -0025EEr 1 BF FA .dbyt 0bffah -0025F0r 1 BF FB .dbyt 0bffbh -0025F2r 1 BF FC .dbyt 0bffch -0025F4r 1 BF FD .dbyt 0bffdh -0025F6r 1 BF FE .dbyt 0bffeh -0025F8r 1 BF FF .dbyt 0bfffh -0025FAr 1 C0 00 .dbyt 0c000h -0025FCr 1 C0 01 .dbyt 0c001h -0025FEr 1 C0 02 .dbyt 0c002h -002600r 1 C0 03 .dbyt 0c003h -002602r 1 C0 04 .dbyt 0c004h -002604r 1 C0 05 .dbyt 0c005h -002606r 1 C0 06 .dbyt 0c006h -002608r 1 C0 07 .dbyt 0c007h -00260Ar 1 C0 08 .dbyt 0c008h -00260Cr 1 C0 09 .dbyt 0c009h -00260Er 1 C0 0A .dbyt 0c00ah -002610r 1 C0 0B .dbyt 0c00bh -002612r 1 C0 0C .dbyt 0c00ch -002614r 1 C0 0D .dbyt 0c00dh -002616r 1 C0 0E .dbyt 0c00eh -002618r 1 C0 0F .dbyt 0c00fh -00261Ar 1 CF E1 .dbyt 0cfe1h -00261Cr 1 CF E2 .dbyt 0cfe2h -00261Er 1 CF E3 .dbyt 0cfe3h -002620r 1 CF E4 .dbyt 0cfe4h -002622r 1 CF E5 .dbyt 0cfe5h -002624r 1 CF E6 .dbyt 0cfe6h -002626r 1 CF E7 .dbyt 0cfe7h -002628r 1 CF E8 .dbyt 0cfe8h -00262Ar 1 CF E9 .dbyt 0cfe9h -00262Cr 1 CF EA .dbyt 0cfeah -00262Er 1 CF EB .dbyt 0cfebh -002630r 1 CF EC .dbyt 0cfech -002632r 1 CF ED .dbyt 0cfedh -002634r 1 CF EE .dbyt 0cfeeh -002636r 1 CF EF .dbyt 0cfefh -002638r 1 CF F0 .dbyt 0cff0h -00263Ar 1 CF F1 .dbyt 0cff1h -00263Cr 1 CF F2 .dbyt 0cff2h -00263Er 1 CF F3 .dbyt 0cff3h -002640r 1 CF F4 .dbyt 0cff4h -002642r 1 CF F5 .dbyt 0cff5h -002644r 1 CF F6 .dbyt 0cff6h -002646r 1 CF F7 .dbyt 0cff7h -002648r 1 CF F8 .dbyt 0cff8h -00264Ar 1 CF F9 .dbyt 0cff9h -00264Cr 1 CF FA .dbyt 0cffah -00264Er 1 CF FB .dbyt 0cffbh -002650r 1 CF FC .dbyt 0cffch -002652r 1 CF FD .dbyt 0cffdh -002654r 1 CF FE .dbyt 0cffeh -002656r 1 CF FF .dbyt 0cfffh -002658r 1 D0 00 .dbyt 0d000h -00265Ar 1 D0 01 .dbyt 0d001h -00265Cr 1 D0 02 .dbyt 0d002h -00265Er 1 D0 03 .dbyt 0d003h -002660r 1 D0 04 .dbyt 0d004h -002662r 1 D0 05 .dbyt 0d005h -002664r 1 D0 06 .dbyt 0d006h -002666r 1 D0 07 .dbyt 0d007h -002668r 1 D0 08 .dbyt 0d008h -00266Ar 1 D0 09 .dbyt 0d009h -00266Cr 1 D0 0A .dbyt 0d00ah -00266Er 1 D0 0B .dbyt 0d00bh -002670r 1 D0 0C .dbyt 0d00ch -002672r 1 D0 0D .dbyt 0d00dh -002674r 1 D0 0E .dbyt 0d00eh -002676r 1 D0 0F .dbyt 0d00fh -002678r 1 DF E1 .dbyt 0dfe1h -00267Ar 1 DF E2 .dbyt 0dfe2h -00267Cr 1 DF E3 .dbyt 0dfe3h -00267Er 1 DF E4 .dbyt 0dfe4h -002680r 1 DF E5 .dbyt 0dfe5h -002682r 1 DF E6 .dbyt 0dfe6h -002684r 1 DF E7 .dbyt 0dfe7h -002686r 1 DF E8 .dbyt 0dfe8h -002688r 1 DF E9 .dbyt 0dfe9h -00268Ar 1 DF EA .dbyt 0dfeah -00268Cr 1 DF EB .dbyt 0dfebh -00268Er 1 DF EC .dbyt 0dfech -002690r 1 DF ED .dbyt 0dfedh -002692r 1 DF EE .dbyt 0dfeeh -002694r 1 DF EF .dbyt 0dfefh -002696r 1 DF F0 .dbyt 0dff0h -002698r 1 DF F1 .dbyt 0dff1h -00269Ar 1 DF F2 .dbyt 0dff2h -00269Cr 1 DF F3 .dbyt 0dff3h -00269Er 1 DF F4 .dbyt 0dff4h -0026A0r 1 DF F5 .dbyt 0dff5h -0026A2r 1 DF F6 .dbyt 0dff6h -0026A4r 1 DF F7 .dbyt 0dff7h -0026A6r 1 DF F8 .dbyt 0dff8h -0026A8r 1 DF F9 .dbyt 0dff9h -0026AAr 1 DF FA .dbyt 0dffah -0026ACr 1 DF FB .dbyt 0dffbh -0026AEr 1 DF FC .dbyt 0dffch -0026B0r 1 DF FD .dbyt 0dffdh -0026B2r 1 DF FE .dbyt 0dffeh -0026B4r 1 DF FF .dbyt 0dfffh -0026B6r 1 E0 00 .dbyt 0e000h -0026B8r 1 E0 01 .dbyt 0e001h -0026BAr 1 E0 02 .dbyt 0e002h -0026BCr 1 E0 03 .dbyt 0e003h -0026BEr 1 E0 04 .dbyt 0e004h -0026C0r 1 E0 05 .dbyt 0e005h -0026C2r 1 E0 06 .dbyt 0e006h -0026C4r 1 E0 07 .dbyt 0e007h -0026C6r 1 E0 08 .dbyt 0e008h -0026C8r 1 E0 09 .dbyt 0e009h -0026CAr 1 E0 0A .dbyt 0e00ah -0026CCr 1 E0 0B .dbyt 0e00bh -0026CEr 1 E0 0C .dbyt 0e00ch -0026D0r 1 E0 0D .dbyt 0e00dh -0026D2r 1 E0 0E .dbyt 0e00eh -0026D4r 1 E0 0F .dbyt 0e00fh -0026D6r 1 EF E1 .dbyt 0efe1h -0026D8r 1 EF E2 .dbyt 0efe2h -0026DAr 1 EF E3 .dbyt 0efe3h -0026DCr 1 EF E4 .dbyt 0efe4h -0026DEr 1 EF E5 .dbyt 0efe5h -0026E0r 1 EF E6 .dbyt 0efe6h -0026E2r 1 EF E7 .dbyt 0efe7h -0026E4r 1 EF E8 .dbyt 0efe8h -0026E6r 1 EF E9 .dbyt 0efe9h -0026E8r 1 EF EA .dbyt 0efeah -0026EAr 1 EF EB .dbyt 0efebh -0026ECr 1 EF EC .dbyt 0efech -0026EEr 1 EF ED .dbyt 0efedh -0026F0r 1 EF EE .dbyt 0efeeh -0026F2r 1 EF EF .dbyt 0efefh -0026F4r 1 EF F0 .dbyt 0eff0h -0026F6r 1 EF F1 .dbyt 0eff1h -0026F8r 1 EF F2 .dbyt 0eff2h -0026FAr 1 EF F3 .dbyt 0eff3h -0026FCr 1 EF F4 .dbyt 0eff4h -0026FEr 1 EF F5 .dbyt 0eff5h -002700r 1 EF F6 .dbyt 0eff6h -002702r 1 EF F7 .dbyt 0eff7h -002704r 1 EF F8 .dbyt 0eff8h -002706r 1 EF F9 .dbyt 0eff9h -002708r 1 EF FA .dbyt 0effah -00270Ar 1 EF FB .dbyt 0effbh -00270Cr 1 EF FC .dbyt 0effch -00270Er 1 EF FD .dbyt 0effdh -002710r 1 EF FE .dbyt 0effeh -002712r 1 EF FF .dbyt 0efffh -002714r 1 F0 00 .dbyt 0f000h -002716r 1 F0 01 .dbyt 0f001h -002718r 1 F0 02 .dbyt 0f002h -00271Ar 1 F0 03 .dbyt 0f003h -00271Cr 1 F0 04 .dbyt 0f004h -00271Er 1 F0 05 .dbyt 0f005h -002720r 1 F0 06 .dbyt 0f006h -002722r 1 F0 07 .dbyt 0f007h -002724r 1 F0 08 .dbyt 0f008h -002726r 1 F0 09 .dbyt 0f009h -002728r 1 F0 0A .dbyt 0f00ah -00272Ar 1 F0 0B .dbyt 0f00bh -00272Cr 1 F0 0C .dbyt 0f00ch -00272Er 1 F0 0D .dbyt 0f00dh -002730r 1 F0 0E .dbyt 0f00eh -002732r 1 F0 0F .dbyt 0f00fh -002734r 1 FF E1 .dbyt 0ffe1h -002736r 1 FF E2 .dbyt 0ffe2h -002738r 1 FF E3 .dbyt 0ffe3h -00273Ar 1 FF E4 .dbyt 0ffe4h -00273Cr 1 FF E5 .dbyt 0ffe5h -00273Er 1 FF E6 .dbyt 0ffe6h -002740r 1 FF E7 .dbyt 0ffe7h -002742r 1 FF E8 .dbyt 0ffe8h -002744r 1 FF E9 .dbyt 0ffe9h -002746r 1 FF EA .dbyt 0ffeah -002748r 1 FF EB .dbyt 0ffebh -00274Ar 1 FF EC .dbyt 0ffech -00274Cr 1 FF ED .dbyt 0ffedh -00274Er 1 FF EE .dbyt 0ffeeh -002750r 1 FF EF .dbyt 0ffefh -002752r 1 FF F0 .dbyt 0fff0h -002754r 1 FF F1 .dbyt 0fff1h -002756r 1 FF F2 .dbyt 0fff2h -002758r 1 FF F3 .dbyt 0fff3h -00275Ar 1 FF F4 .dbyt 0fff4h -00275Cr 1 FF F5 .dbyt 0fff5h -00275Er 1 FF F6 .dbyt 0fff6h -002760r 1 FF F7 .dbyt 0fff7h -002762r 1 FF F8 .dbyt 0fff8h -002764r 1 FF F9 .dbyt 0fff9h -002766r 1 FF FA .dbyt 0fffah -002768r 1 FF FB .dbyt 0fffbh -00276Ar 1 FF FC .dbyt 0fffch -00276Cr 1 FF FD .dbyt 0fffdh -00276Er 1 FF FE .dbyt 0fffeh -002770r 1 FF FF .dbyt 0ffffh +0023DCr 1 ; alternative hex values, always leading zero +0023DCr 1 00 00 .dbyt 00h +0023DEr 1 00 01 .dbyt 01h +0023E0r 1 00 02 .dbyt 02h +0023E2r 1 00 03 .dbyt 03h +0023E4r 1 00 04 .dbyt 04h +0023E6r 1 00 05 .dbyt 05h +0023E8r 1 00 06 .dbyt 06h +0023EAr 1 00 07 .dbyt 07h +0023ECr 1 00 08 .dbyt 08h +0023EEr 1 00 09 .dbyt 09h +0023F0r 1 00 0A .dbyt 0ah +0023F2r 1 00 0B .dbyt 0bh +0023F4r 1 00 0C .dbyt 0ch +0023F6r 1 00 0D .dbyt 0dh +0023F8r 1 00 0E .dbyt 0eh +0023FAr 1 00 0F .dbyt 0fh +0023FCr 1 00 10 .dbyt 010h +0023FEr 1 00 11 .dbyt 011h +002400r 1 00 12 .dbyt 012h +002402r 1 00 13 .dbyt 013h +002404r 1 00 70 .dbyt 070h +002406r 1 00 71 .dbyt 071h +002408r 1 00 72 .dbyt 072h +00240Ar 1 00 73 .dbyt 073h +00240Cr 1 00 74 .dbyt 074h +00240Er 1 00 75 .dbyt 075h +002410r 1 00 76 .dbyt 076h +002412r 1 00 77 .dbyt 077h +002414r 1 00 78 .dbyt 078h +002416r 1 00 79 .dbyt 079h +002418r 1 00 7A .dbyt 07ah +00241Ar 1 00 7B .dbyt 07bh +00241Cr 1 00 7C .dbyt 07ch +00241Er 1 00 7D .dbyt 07dh +002420r 1 00 7E .dbyt 07eh +002422r 1 00 7F .dbyt 07fh +002424r 1 00 80 .dbyt 080h +002426r 1 00 81 .dbyt 081h +002428r 1 00 82 .dbyt 082h +00242Ar 1 00 83 .dbyt 083h +00242Cr 1 00 84 .dbyt 084h +00242Er 1 00 85 .dbyt 085h +002430r 1 00 86 .dbyt 086h +002432r 1 00 F0 .dbyt 0f0h +002434r 1 00 F1 .dbyt 0f1h +002436r 1 00 F2 .dbyt 0f2h +002438r 1 00 F3 .dbyt 0f3h +00243Ar 1 00 F4 .dbyt 0f4h +00243Cr 1 00 F5 .dbyt 0f5h +00243Er 1 00 F6 .dbyt 0f6h +002440r 1 00 F7 .dbyt 0f7h +002442r 1 00 F8 .dbyt 0f8h +002444r 1 00 F9 .dbyt 0f9h +002446r 1 00 FA .dbyt 0fah +002448r 1 00 FB .dbyt 0fbh +00244Ar 1 00 FC .dbyt 0fch +00244Cr 1 00 FD .dbyt 0fdh +00244Er 1 00 FE .dbyt 0feh +002450r 1 00 FF .dbyt 0ffh +002452r 1 01 00 .dbyt 0100h +002454r 1 01 01 .dbyt 0101h +002456r 1 01 02 .dbyt 0102h +002458r 1 01 03 .dbyt 0103h +00245Ar 1 0F D2 .dbyt 0fd2h +00245Cr 1 0F D3 .dbyt 0fd3h +00245Er 1 0F D4 .dbyt 0fd4h +002460r 1 0F D5 .dbyt 0fd5h +002462r 1 0F D6 .dbyt 0fd6h +002464r 1 0F D7 .dbyt 0fd7h +002466r 1 0F D8 .dbyt 0fd8h +002468r 1 0F D9 .dbyt 0fd9h +00246Ar 1 0F DA .dbyt 0fdah +00246Cr 1 0F DB .dbyt 0fdbh +00246Er 1 0F DC .dbyt 0fdch +002470r 1 0F DD .dbyt 0fddh +002472r 1 0F DE .dbyt 0fdeh +002474r 1 0F DF .dbyt 0fdfh +002476r 1 0F E0 .dbyt 0fe0h +002478r 1 0F E1 .dbyt 0fe1h +00247Ar 1 0F E2 .dbyt 0fe2h +00247Cr 1 0F E3 .dbyt 0fe3h +00247Er 1 0F E4 .dbyt 0fe4h +002480r 1 0F E5 .dbyt 0fe5h +002482r 1 0F E6 .dbyt 0fe6h +002484r 1 0F E7 .dbyt 0fe7h +002486r 1 0F E8 .dbyt 0fe8h +002488r 1 0F E9 .dbyt 0fe9h +00248Ar 1 0F EA .dbyt 0feah +00248Cr 1 0F EB .dbyt 0febh +00248Er 1 0F EC .dbyt 0fech +002490r 1 0F ED .dbyt 0fedh +002492r 1 0F EE .dbyt 0feeh +002494r 1 0F EF .dbyt 0fefh +002496r 1 0F F0 .dbyt 0ff0h +002498r 1 0F F1 .dbyt 0ff1h +00249Ar 1 0F F2 .dbyt 0ff2h +00249Cr 1 0F F3 .dbyt 0ff3h +00249Er 1 0F F4 .dbyt 0ff4h +0024A0r 1 0F F5 .dbyt 0ff5h +0024A2r 1 0F F6 .dbyt 0ff6h +0024A4r 1 0F F7 .dbyt 0ff7h +0024A6r 1 0F F8 .dbyt 0ff8h +0024A8r 1 0F F9 .dbyt 0ff9h +0024AAr 1 0F FA .dbyt 0ffah +0024ACr 1 0F FB .dbyt 0ffbh +0024AEr 1 0F FC .dbyt 0ffch +0024B0r 1 0F FD .dbyt 0ffdh +0024B2r 1 0F FE .dbyt 0ffeh +0024B4r 1 0F FF .dbyt 0fffh +0024B6r 1 10 00 .dbyt 01000h +0024B8r 1 10 01 .dbyt 01001h +0024BAr 1 10 02 .dbyt 01002h +0024BCr 1 10 03 .dbyt 01003h +0024BEr 1 10 04 .dbyt 01004h +0024C0r 1 10 05 .dbyt 01005h +0024C2r 1 10 06 .dbyt 01006h +0024C4r 1 10 07 .dbyt 01007h +0024C6r 1 10 08 .dbyt 01008h +0024C8r 1 7F F0 .dbyt 07ff0h +0024CAr 1 7F F1 .dbyt 07ff1h +0024CCr 1 7F F2 .dbyt 07ff2h +0024CEr 1 7F F3 .dbyt 07ff3h +0024D0r 1 7F F4 .dbyt 07ff4h +0024D2r 1 7F F5 .dbyt 07ff5h +0024D4r 1 7F F6 .dbyt 07ff6h +0024D6r 1 7F F7 .dbyt 07ff7h +0024D8r 1 7F F8 .dbyt 07ff8h +0024DAr 1 7F F9 .dbyt 07ff9h +0024DCr 1 7F FA .dbyt 07ffah +0024DEr 1 7F FB .dbyt 07ffbh +0024E0r 1 7F FC .dbyt 07ffch +0024E2r 1 7F FD .dbyt 07ffdh +0024E4r 1 7F FE .dbyt 07ffeh +0024E6r 1 7F FF .dbyt 07fffh +0024E8r 1 80 00 .dbyt 08000h +0024EAr 1 80 01 .dbyt 08001h +0024ECr 1 80 02 .dbyt 08002h +0024EEr 1 80 03 .dbyt 08003h +0024F0r 1 80 04 .dbyt 08004h +0024F2r 1 80 05 .dbyt 08005h +0024F4r 1 80 06 .dbyt 08006h +0024F6r 1 80 07 .dbyt 08007h +0024F8r 1 80 08 .dbyt 08008h +0024FAr 1 80 09 .dbyt 08009h +0024FCr 1 80 0A .dbyt 0800ah +0024FEr 1 80 0B .dbyt 0800bh +002500r 1 9F E1 .dbyt 09fe1h +002502r 1 9F E2 .dbyt 09fe2h +002504r 1 9F E3 .dbyt 09fe3h +002506r 1 9F E4 .dbyt 09fe4h +002508r 1 9F E5 .dbyt 09fe5h +00250Ar 1 9F E6 .dbyt 09fe6h +00250Cr 1 9F E7 .dbyt 09fe7h +00250Er 1 9F E8 .dbyt 09fe8h +002510r 1 9F E9 .dbyt 09fe9h +002512r 1 9F EA .dbyt 09feah +002514r 1 9F EB .dbyt 09febh +002516r 1 9F EC .dbyt 09fech +002518r 1 9F ED .dbyt 09fedh +00251Ar 1 9F EE .dbyt 09feeh +00251Cr 1 9F EF .dbyt 09fefh +00251Er 1 9F F0 .dbyt 09ff0h +002520r 1 9F F1 .dbyt 09ff1h +002522r 1 9F F2 .dbyt 09ff2h +002524r 1 9F F3 .dbyt 09ff3h +002526r 1 9F F4 .dbyt 09ff4h +002528r 1 9F F5 .dbyt 09ff5h +00252Ar 1 9F F6 .dbyt 09ff6h +00252Cr 1 9F F7 .dbyt 09ff7h +00252Er 1 9F F8 .dbyt 09ff8h +002530r 1 9F F9 .dbyt 09ff9h +002532r 1 9F FA .dbyt 09ffah +002534r 1 9F FB .dbyt 09ffbh +002536r 1 9F FC .dbyt 09ffch +002538r 1 9F FD .dbyt 09ffdh +00253Ar 1 9F FE .dbyt 09ffeh +00253Cr 1 9F FF .dbyt 09fffh +00253Er 1 A0 00 .dbyt 0a000h +002540r 1 A0 01 .dbyt 0a001h +002542r 1 A0 02 .dbyt 0a002h +002544r 1 A0 03 .dbyt 0a003h +002546r 1 A0 04 .dbyt 0a004h +002548r 1 A0 05 .dbyt 0a005h +00254Ar 1 A0 06 .dbyt 0a006h +00254Cr 1 A0 07 .dbyt 0a007h +00254Er 1 A0 08 .dbyt 0a008h +002550r 1 A0 09 .dbyt 0a009h +002552r 1 A0 0A .dbyt 0a00ah +002554r 1 A0 0B .dbyt 0a00bh +002556r 1 A0 0C .dbyt 0a00ch +002558r 1 A0 0D .dbyt 0a00dh +00255Ar 1 A0 0E .dbyt 0a00eh +00255Cr 1 A0 0F .dbyt 0a00fh +00255Er 1 AF E1 .dbyt 0afe1h +002560r 1 AF E2 .dbyt 0afe2h +002562r 1 AF E3 .dbyt 0afe3h +002564r 1 AF E4 .dbyt 0afe4h +002566r 1 AF E5 .dbyt 0afe5h +002568r 1 AF E6 .dbyt 0afe6h +00256Ar 1 AF E7 .dbyt 0afe7h +00256Cr 1 AF E8 .dbyt 0afe8h +00256Er 1 AF E9 .dbyt 0afe9h +002570r 1 AF EA .dbyt 0afeah +002572r 1 AF EB .dbyt 0afebh +002574r 1 AF EC .dbyt 0afech +002576r 1 AF ED .dbyt 0afedh +002578r 1 AF EE .dbyt 0afeeh +00257Ar 1 AF EF .dbyt 0afefh +00257Cr 1 AF F0 .dbyt 0aff0h +00257Er 1 AF F1 .dbyt 0aff1h +002580r 1 AF F2 .dbyt 0aff2h +002582r 1 AF F3 .dbyt 0aff3h +002584r 1 AF F4 .dbyt 0aff4h +002586r 1 AF F5 .dbyt 0aff5h +002588r 1 AF F6 .dbyt 0aff6h +00258Ar 1 AF F7 .dbyt 0aff7h +00258Cr 1 AF F8 .dbyt 0aff8h +00258Er 1 AF F9 .dbyt 0aff9h +002590r 1 AF FA .dbyt 0affah +002592r 1 AF FB .dbyt 0affbh +002594r 1 AF FC .dbyt 0affch +002596r 1 AF FD .dbyt 0affdh +002598r 1 AF FE .dbyt 0affeh +00259Ar 1 AF FF .dbyt 0afffh +00259Cr 1 B0 00 .dbyt 0b000h +00259Er 1 B0 01 .dbyt 0b001h +0025A0r 1 B0 02 .dbyt 0b002h +0025A2r 1 B0 03 .dbyt 0b003h +0025A4r 1 B0 04 .dbyt 0b004h +0025A6r 1 B0 05 .dbyt 0b005h +0025A8r 1 B0 06 .dbyt 0b006h +0025AAr 1 B0 07 .dbyt 0b007h +0025ACr 1 B0 08 .dbyt 0b008h +0025AEr 1 B0 09 .dbyt 0b009h +0025B0r 1 B0 0A .dbyt 0b00ah +0025B2r 1 B0 0B .dbyt 0b00bh +0025B4r 1 B0 0C .dbyt 0b00ch +0025B6r 1 B0 0D .dbyt 0b00dh +0025B8r 1 B0 0E .dbyt 0b00eh +0025BAr 1 B0 0F .dbyt 0b00fh +0025BCr 1 BF E1 .dbyt 0bfe1h +0025BEr 1 BF E2 .dbyt 0bfe2h +0025C0r 1 BF E3 .dbyt 0bfe3h +0025C2r 1 BF E4 .dbyt 0bfe4h +0025C4r 1 BF E5 .dbyt 0bfe5h +0025C6r 1 BF E6 .dbyt 0bfe6h +0025C8r 1 BF E7 .dbyt 0bfe7h +0025CAr 1 BF E8 .dbyt 0bfe8h +0025CCr 1 BF E9 .dbyt 0bfe9h +0025CEr 1 BF EA .dbyt 0bfeah +0025D0r 1 BF EB .dbyt 0bfebh +0025D2r 1 BF EC .dbyt 0bfech +0025D4r 1 BF ED .dbyt 0bfedh +0025D6r 1 BF EE .dbyt 0bfeeh +0025D8r 1 BF EF .dbyt 0bfefh +0025DAr 1 BF F0 .dbyt 0bff0h +0025DCr 1 BF F1 .dbyt 0bff1h +0025DEr 1 BF F2 .dbyt 0bff2h +0025E0r 1 BF F3 .dbyt 0bff3h +0025E2r 1 BF F4 .dbyt 0bff4h +0025E4r 1 BF F5 .dbyt 0bff5h +0025E6r 1 BF F6 .dbyt 0bff6h +0025E8r 1 BF F7 .dbyt 0bff7h +0025EAr 1 BF F8 .dbyt 0bff8h +0025ECr 1 BF F9 .dbyt 0bff9h +0025EEr 1 BF FA .dbyt 0bffah +0025F0r 1 BF FB .dbyt 0bffbh +0025F2r 1 BF FC .dbyt 0bffch +0025F4r 1 BF FD .dbyt 0bffdh +0025F6r 1 BF FE .dbyt 0bffeh +0025F8r 1 BF FF .dbyt 0bfffh +0025FAr 1 C0 00 .dbyt 0c000h +0025FCr 1 C0 01 .dbyt 0c001h +0025FEr 1 C0 02 .dbyt 0c002h +002600r 1 C0 03 .dbyt 0c003h +002602r 1 C0 04 .dbyt 0c004h +002604r 1 C0 05 .dbyt 0c005h +002606r 1 C0 06 .dbyt 0c006h +002608r 1 C0 07 .dbyt 0c007h +00260Ar 1 C0 08 .dbyt 0c008h +00260Cr 1 C0 09 .dbyt 0c009h +00260Er 1 C0 0A .dbyt 0c00ah +002610r 1 C0 0B .dbyt 0c00bh +002612r 1 C0 0C .dbyt 0c00ch +002614r 1 C0 0D .dbyt 0c00dh +002616r 1 C0 0E .dbyt 0c00eh +002618r 1 C0 0F .dbyt 0c00fh +00261Ar 1 CF E1 .dbyt 0cfe1h +00261Cr 1 CF E2 .dbyt 0cfe2h +00261Er 1 CF E3 .dbyt 0cfe3h +002620r 1 CF E4 .dbyt 0cfe4h +002622r 1 CF E5 .dbyt 0cfe5h +002624r 1 CF E6 .dbyt 0cfe6h +002626r 1 CF E7 .dbyt 0cfe7h +002628r 1 CF E8 .dbyt 0cfe8h +00262Ar 1 CF E9 .dbyt 0cfe9h +00262Cr 1 CF EA .dbyt 0cfeah +00262Er 1 CF EB .dbyt 0cfebh +002630r 1 CF EC .dbyt 0cfech +002632r 1 CF ED .dbyt 0cfedh +002634r 1 CF EE .dbyt 0cfeeh +002636r 1 CF EF .dbyt 0cfefh +002638r 1 CF F0 .dbyt 0cff0h +00263Ar 1 CF F1 .dbyt 0cff1h +00263Cr 1 CF F2 .dbyt 0cff2h +00263Er 1 CF F3 .dbyt 0cff3h +002640r 1 CF F4 .dbyt 0cff4h +002642r 1 CF F5 .dbyt 0cff5h +002644r 1 CF F6 .dbyt 0cff6h +002646r 1 CF F7 .dbyt 0cff7h +002648r 1 CF F8 .dbyt 0cff8h +00264Ar 1 CF F9 .dbyt 0cff9h +00264Cr 1 CF FA .dbyt 0cffah +00264Er 1 CF FB .dbyt 0cffbh +002650r 1 CF FC .dbyt 0cffch +002652r 1 CF FD .dbyt 0cffdh +002654r 1 CF FE .dbyt 0cffeh +002656r 1 CF FF .dbyt 0cfffh +002658r 1 D0 00 .dbyt 0d000h +00265Ar 1 D0 01 .dbyt 0d001h +00265Cr 1 D0 02 .dbyt 0d002h +00265Er 1 D0 03 .dbyt 0d003h +002660r 1 D0 04 .dbyt 0d004h +002662r 1 D0 05 .dbyt 0d005h +002664r 1 D0 06 .dbyt 0d006h +002666r 1 D0 07 .dbyt 0d007h +002668r 1 D0 08 .dbyt 0d008h +00266Ar 1 D0 09 .dbyt 0d009h +00266Cr 1 D0 0A .dbyt 0d00ah +00266Er 1 D0 0B .dbyt 0d00bh +002670r 1 D0 0C .dbyt 0d00ch +002672r 1 D0 0D .dbyt 0d00dh +002674r 1 D0 0E .dbyt 0d00eh +002676r 1 D0 0F .dbyt 0d00fh +002678r 1 DF E1 .dbyt 0dfe1h +00267Ar 1 DF E2 .dbyt 0dfe2h +00267Cr 1 DF E3 .dbyt 0dfe3h +00267Er 1 DF E4 .dbyt 0dfe4h +002680r 1 DF E5 .dbyt 0dfe5h +002682r 1 DF E6 .dbyt 0dfe6h +002684r 1 DF E7 .dbyt 0dfe7h +002686r 1 DF E8 .dbyt 0dfe8h +002688r 1 DF E9 .dbyt 0dfe9h +00268Ar 1 DF EA .dbyt 0dfeah +00268Cr 1 DF EB .dbyt 0dfebh +00268Er 1 DF EC .dbyt 0dfech +002690r 1 DF ED .dbyt 0dfedh +002692r 1 DF EE .dbyt 0dfeeh +002694r 1 DF EF .dbyt 0dfefh +002696r 1 DF F0 .dbyt 0dff0h +002698r 1 DF F1 .dbyt 0dff1h +00269Ar 1 DF F2 .dbyt 0dff2h +00269Cr 1 DF F3 .dbyt 0dff3h +00269Er 1 DF F4 .dbyt 0dff4h +0026A0r 1 DF F5 .dbyt 0dff5h +0026A2r 1 DF F6 .dbyt 0dff6h +0026A4r 1 DF F7 .dbyt 0dff7h +0026A6r 1 DF F8 .dbyt 0dff8h +0026A8r 1 DF F9 .dbyt 0dff9h +0026AAr 1 DF FA .dbyt 0dffah +0026ACr 1 DF FB .dbyt 0dffbh +0026AEr 1 DF FC .dbyt 0dffch +0026B0r 1 DF FD .dbyt 0dffdh +0026B2r 1 DF FE .dbyt 0dffeh +0026B4r 1 DF FF .dbyt 0dfffh +0026B6r 1 E0 00 .dbyt 0e000h +0026B8r 1 E0 01 .dbyt 0e001h +0026BAr 1 E0 02 .dbyt 0e002h +0026BCr 1 E0 03 .dbyt 0e003h +0026BEr 1 E0 04 .dbyt 0e004h +0026C0r 1 E0 05 .dbyt 0e005h +0026C2r 1 E0 06 .dbyt 0e006h +0026C4r 1 E0 07 .dbyt 0e007h +0026C6r 1 E0 08 .dbyt 0e008h +0026C8r 1 E0 09 .dbyt 0e009h +0026CAr 1 E0 0A .dbyt 0e00ah +0026CCr 1 E0 0B .dbyt 0e00bh +0026CEr 1 E0 0C .dbyt 0e00ch +0026D0r 1 E0 0D .dbyt 0e00dh +0026D2r 1 E0 0E .dbyt 0e00eh +0026D4r 1 E0 0F .dbyt 0e00fh +0026D6r 1 EF E1 .dbyt 0efe1h +0026D8r 1 EF E2 .dbyt 0efe2h +0026DAr 1 EF E3 .dbyt 0efe3h +0026DCr 1 EF E4 .dbyt 0efe4h +0026DEr 1 EF E5 .dbyt 0efe5h +0026E0r 1 EF E6 .dbyt 0efe6h +0026E2r 1 EF E7 .dbyt 0efe7h +0026E4r 1 EF E8 .dbyt 0efe8h +0026E6r 1 EF E9 .dbyt 0efe9h +0026E8r 1 EF EA .dbyt 0efeah +0026EAr 1 EF EB .dbyt 0efebh +0026ECr 1 EF EC .dbyt 0efech +0026EEr 1 EF ED .dbyt 0efedh +0026F0r 1 EF EE .dbyt 0efeeh +0026F2r 1 EF EF .dbyt 0efefh +0026F4r 1 EF F0 .dbyt 0eff0h +0026F6r 1 EF F1 .dbyt 0eff1h +0026F8r 1 EF F2 .dbyt 0eff2h +0026FAr 1 EF F3 .dbyt 0eff3h +0026FCr 1 EF F4 .dbyt 0eff4h +0026FEr 1 EF F5 .dbyt 0eff5h +002700r 1 EF F6 .dbyt 0eff6h +002702r 1 EF F7 .dbyt 0eff7h +002704r 1 EF F8 .dbyt 0eff8h +002706r 1 EF F9 .dbyt 0eff9h +002708r 1 EF FA .dbyt 0effah +00270Ar 1 EF FB .dbyt 0effbh +00270Cr 1 EF FC .dbyt 0effch +00270Er 1 EF FD .dbyt 0effdh +002710r 1 EF FE .dbyt 0effeh +002712r 1 EF FF .dbyt 0efffh +002714r 1 F0 00 .dbyt 0f000h +002716r 1 F0 01 .dbyt 0f001h +002718r 1 F0 02 .dbyt 0f002h +00271Ar 1 F0 03 .dbyt 0f003h +00271Cr 1 F0 04 .dbyt 0f004h +00271Er 1 F0 05 .dbyt 0f005h +002720r 1 F0 06 .dbyt 0f006h +002722r 1 F0 07 .dbyt 0f007h +002724r 1 F0 08 .dbyt 0f008h +002726r 1 F0 09 .dbyt 0f009h +002728r 1 F0 0A .dbyt 0f00ah +00272Ar 1 F0 0B .dbyt 0f00bh +00272Cr 1 F0 0C .dbyt 0f00ch +00272Er 1 F0 0D .dbyt 0f00dh +002730r 1 F0 0E .dbyt 0f00eh +002732r 1 F0 0F .dbyt 0f00fh +002734r 1 FF E1 .dbyt 0ffe1h +002736r 1 FF E2 .dbyt 0ffe2h +002738r 1 FF E3 .dbyt 0ffe3h +00273Ar 1 FF E4 .dbyt 0ffe4h +00273Cr 1 FF E5 .dbyt 0ffe5h +00273Er 1 FF E6 .dbyt 0ffe6h +002740r 1 FF E7 .dbyt 0ffe7h +002742r 1 FF E8 .dbyt 0ffe8h +002744r 1 FF E9 .dbyt 0ffe9h +002746r 1 FF EA .dbyt 0ffeah +002748r 1 FF EB .dbyt 0ffebh +00274Ar 1 FF EC .dbyt 0ffech +00274Cr 1 FF ED .dbyt 0ffedh +00274Er 1 FF EE .dbyt 0ffeeh +002750r 1 FF EF .dbyt 0ffefh +002752r 1 FF F0 .dbyt 0fff0h +002754r 1 FF F1 .dbyt 0fff1h +002756r 1 FF F2 .dbyt 0fff2h +002758r 1 FF F3 .dbyt 0fff3h +00275Ar 1 FF F4 .dbyt 0fff4h +00275Cr 1 FF F5 .dbyt 0fff5h +00275Er 1 FF F6 .dbyt 0fff6h +002760r 1 FF F7 .dbyt 0fff7h +002762r 1 FF F8 .dbyt 0fff8h +002764r 1 FF F9 .dbyt 0fff9h +002766r 1 FF FA .dbyt 0fffah +002768r 1 FF FB .dbyt 0fffbh +00276Ar 1 FF FC .dbyt 0fffch +00276Cr 1 FF FD .dbyt 0fffdh +00276Er 1 FF FE .dbyt 0fffeh +002770r 1 FF FF .dbyt 0ffffh 002772r 1 -002772r 1 ; binary values, variable length -002772r 1 00 00 .dbyt %0 -002774r 1 00 01 .dbyt %01 -002776r 1 00 02 .dbyt %010 -002778r 1 00 03 .dbyt %011 -00277Ar 1 00 04 .dbyt %0100 -00277Cr 1 00 05 .dbyt %0101 -00277Er 1 00 06 .dbyt %0110 -002780r 1 00 07 .dbyt %0111 -002782r 1 00 08 .dbyt %01000 -002784r 1 00 09 .dbyt %01001 -002786r 1 00 0A .dbyt %01010 -002788r 1 00 0B .dbyt %01011 -00278Ar 1 00 0C .dbyt %01100 -00278Cr 1 00 0D .dbyt %01101 -00278Er 1 00 0E .dbyt %01110 -002790r 1 00 0F .dbyt %01111 -002792r 1 00 10 .dbyt %010000 -002794r 1 00 11 .dbyt %010001 -002796r 1 00 12 .dbyt %010010 -002798r 1 00 13 .dbyt %010011 -00279Ar 1 00 70 .dbyt %01110000 -00279Cr 1 00 71 .dbyt %01110001 -00279Er 1 00 72 .dbyt %01110010 -0027A0r 1 00 73 .dbyt %01110011 -0027A2r 1 00 74 .dbyt %01110100 -0027A4r 1 00 75 .dbyt %01110101 -0027A6r 1 00 76 .dbyt %01110110 -0027A8r 1 00 77 .dbyt %01110111 -0027AAr 1 00 78 .dbyt %01111000 -0027ACr 1 00 79 .dbyt %01111001 -0027AEr 1 00 7A .dbyt %01111010 -0027B0r 1 00 7B .dbyt %01111011 -0027B2r 1 00 7C .dbyt %01111100 -0027B4r 1 00 7D .dbyt %01111101 -0027B6r 1 00 7E .dbyt %01111110 -0027B8r 1 00 7F .dbyt %01111111 -0027BAr 1 00 80 .dbyt %010000000 -0027BCr 1 00 81 .dbyt %010000001 -0027BEr 1 00 82 .dbyt %010000010 -0027C0r 1 00 83 .dbyt %010000011 -0027C2r 1 00 84 .dbyt %010000100 -0027C4r 1 00 85 .dbyt %010000101 -0027C6r 1 00 86 .dbyt %010000110 -0027C8r 1 00 F0 .dbyt %011110000 -0027CAr 1 00 F1 .dbyt %011110001 -0027CCr 1 00 F2 .dbyt %011110010 -0027CEr 1 00 F3 .dbyt %011110011 -0027D0r 1 00 F4 .dbyt %011110100 -0027D2r 1 00 F5 .dbyt %011110101 -0027D4r 1 00 F6 .dbyt %011110110 -0027D6r 1 00 F7 .dbyt %011110111 -0027D8r 1 00 F8 .dbyt %011111000 -0027DAr 1 00 F9 .dbyt %011111001 -0027DCr 1 00 FA .dbyt %011111010 -0027DEr 1 00 FB .dbyt %011111011 -0027E0r 1 00 FC .dbyt %011111100 -0027E2r 1 00 FD .dbyt %011111101 -0027E4r 1 00 FE .dbyt %011111110 -0027E6r 1 00 FF .dbyt %011111111 -0027E8r 1 01 00 .dbyt %100000000 -0027EAr 1 01 01 .dbyt %100000001 -0027ECr 1 01 02 .dbyt %100000010 -0027EEr 1 01 03 .dbyt %100000011 -0027F0r 1 0F D2 .dbyt %111111010010 -0027F2r 1 0F D3 .dbyt %111111010011 -0027F4r 1 0F D4 .dbyt %111111010100 -0027F6r 1 0F D5 .dbyt %111111010101 -0027F8r 1 0F D6 .dbyt %111111010110 -0027FAr 1 0F D7 .dbyt %111111010111 -0027FCr 1 0F D8 .dbyt %111111011000 -0027FEr 1 0F D9 .dbyt %111111011001 -002800r 1 0F DA .dbyt %111111011010 -002802r 1 0F DB .dbyt %111111011011 -002804r 1 0F DC .dbyt %111111011100 -002806r 1 0F DD .dbyt %111111011101 -002808r 1 0F DE .dbyt %111111011110 -00280Ar 1 0F DF .dbyt %111111011111 -00280Cr 1 0F E0 .dbyt %111111100000 -00280Er 1 0F E1 .dbyt %111111100001 -002810r 1 0F E2 .dbyt %111111100010 -002812r 1 0F E3 .dbyt %111111100011 -002814r 1 0F E4 .dbyt %111111100100 -002816r 1 0F E5 .dbyt %111111100101 -002818r 1 0F E6 .dbyt %111111100110 -00281Ar 1 0F E7 .dbyt %111111100111 -00281Cr 1 0F E8 .dbyt %111111101000 -00281Er 1 0F E9 .dbyt %111111101001 -002820r 1 0F EA .dbyt %111111101010 -002822r 1 0F EB .dbyt %111111101011 -002824r 1 0F EC .dbyt %111111101100 -002826r 1 0F ED .dbyt %111111101101 -002828r 1 0F EE .dbyt %111111101110 -00282Ar 1 0F EF .dbyt %111111101111 -00282Cr 1 0F F0 .dbyt %111111110000 -00282Er 1 0F F1 .dbyt %111111110001 -002830r 1 0F F2 .dbyt %111111110010 -002832r 1 0F F3 .dbyt %111111110011 -002834r 1 0F F4 .dbyt %111111110100 -002836r 1 0F F5 .dbyt %111111110101 -002838r 1 0F F6 .dbyt %111111110110 -00283Ar 1 0F F7 .dbyt %111111110111 -00283Cr 1 0F F8 .dbyt %111111111000 -00283Er 1 0F F9 .dbyt %111111111001 -002840r 1 0F FA .dbyt %111111111010 -002842r 1 0F FB .dbyt %111111111011 -002844r 1 0F FC .dbyt %111111111100 -002846r 1 0F FD .dbyt %111111111101 -002848r 1 0F FE .dbyt %111111111110 -00284Ar 1 0F FF .dbyt %111111111111 -00284Cr 1 10 00 .dbyt %1000000000000 -00284Er 1 10 01 .dbyt %1000000000001 -002850r 1 10 02 .dbyt %1000000000010 -002852r 1 10 03 .dbyt %1000000000011 -002854r 1 10 04 .dbyt %1000000000100 -002856r 1 10 05 .dbyt %1000000000101 -002858r 1 10 06 .dbyt %1000000000110 -00285Ar 1 10 07 .dbyt %1000000000111 -00285Cr 1 10 08 .dbyt %1000000001000 -00285Er 1 7F F0 .dbyt %111111111110000 -002860r 1 7F F1 .dbyt %111111111110001 -002862r 1 7F F2 .dbyt %111111111110010 -002864r 1 7F F3 .dbyt %111111111110011 -002866r 1 7F F4 .dbyt %111111111110100 -002868r 1 7F F5 .dbyt %111111111110101 -00286Ar 1 7F F6 .dbyt %111111111110110 -00286Cr 1 7F F7 .dbyt %111111111110111 -00286Er 1 7F F8 .dbyt %111111111111000 -002870r 1 7F F9 .dbyt %111111111111001 -002872r 1 7F FA .dbyt %111111111111010 -002874r 1 7F FB .dbyt %111111111111011 -002876r 1 7F FC .dbyt %111111111111100 -002878r 1 7F FD .dbyt %111111111111101 -00287Ar 1 7F FE .dbyt %111111111111110 -00287Cr 1 7F FF .dbyt %111111111111111 -00287Er 1 80 00 .dbyt %1000000000000000 -002880r 1 80 01 .dbyt %1000000000000001 -002882r 1 80 02 .dbyt %1000000000000010 -002884r 1 80 03 .dbyt %1000000000000011 -002886r 1 80 04 .dbyt %1000000000000100 -002888r 1 80 05 .dbyt %1000000000000101 -00288Ar 1 80 06 .dbyt %1000000000000110 -00288Cr 1 80 07 .dbyt %1000000000000111 -00288Er 1 80 08 .dbyt %1000000000001000 -002890r 1 80 09 .dbyt %1000000000001001 -002892r 1 80 0A .dbyt %1000000000001010 -002894r 1 80 0B .dbyt %1000000000001011 -002896r 1 9F E1 .dbyt %1001111111100001 -002898r 1 9F E2 .dbyt %1001111111100010 -00289Ar 1 9F E3 .dbyt %1001111111100011 -00289Cr 1 9F E4 .dbyt %1001111111100100 -00289Er 1 9F E5 .dbyt %1001111111100101 -0028A0r 1 9F E6 .dbyt %1001111111100110 -0028A2r 1 9F E7 .dbyt %1001111111100111 -0028A4r 1 9F E8 .dbyt %1001111111101000 -0028A6r 1 9F E9 .dbyt %1001111111101001 -0028A8r 1 9F EA .dbyt %1001111111101010 -0028AAr 1 9F EB .dbyt %1001111111101011 -0028ACr 1 9F EC .dbyt %1001111111101100 -0028AEr 1 9F ED .dbyt %1001111111101101 -0028B0r 1 9F EE .dbyt %1001111111101110 -0028B2r 1 9F EF .dbyt %1001111111101111 -0028B4r 1 9F F0 .dbyt %1001111111110000 -0028B6r 1 9F F1 .dbyt %1001111111110001 -0028B8r 1 9F F2 .dbyt %1001111111110010 -0028BAr 1 9F F3 .dbyt %1001111111110011 -0028BCr 1 9F F4 .dbyt %1001111111110100 -0028BEr 1 9F F5 .dbyt %1001111111110101 -0028C0r 1 9F F6 .dbyt %1001111111110110 -0028C2r 1 9F F7 .dbyt %1001111111110111 -0028C4r 1 9F F8 .dbyt %1001111111111000 -0028C6r 1 9F F9 .dbyt %1001111111111001 -0028C8r 1 9F FA .dbyt %1001111111111010 -0028CAr 1 9F FB .dbyt %1001111111111011 -0028CCr 1 9F FC .dbyt %1001111111111100 -0028CEr 1 9F FD .dbyt %1001111111111101 -0028D0r 1 9F FE .dbyt %1001111111111110 -0028D2r 1 9F FF .dbyt %1001111111111111 -0028D4r 1 A0 00 .dbyt %1010000000000000 -0028D6r 1 A0 01 .dbyt %1010000000000001 -0028D8r 1 A0 02 .dbyt %1010000000000010 -0028DAr 1 A0 03 .dbyt %1010000000000011 -0028DCr 1 A0 04 .dbyt %1010000000000100 -0028DEr 1 A0 05 .dbyt %1010000000000101 -0028E0r 1 A0 06 .dbyt %1010000000000110 -0028E2r 1 A0 07 .dbyt %1010000000000111 -0028E4r 1 A0 08 .dbyt %1010000000001000 -0028E6r 1 A0 09 .dbyt %1010000000001001 -0028E8r 1 A0 0A .dbyt %1010000000001010 -0028EAr 1 A0 0B .dbyt %1010000000001011 -0028ECr 1 A0 0C .dbyt %1010000000001100 -0028EEr 1 A0 0D .dbyt %1010000000001101 -0028F0r 1 A0 0E .dbyt %1010000000001110 -0028F2r 1 A0 0F .dbyt %1010000000001111 -0028F4r 1 AF E1 .dbyt %1010111111100001 -0028F6r 1 AF E2 .dbyt %1010111111100010 -0028F8r 1 AF E3 .dbyt %1010111111100011 -0028FAr 1 AF E4 .dbyt %1010111111100100 -0028FCr 1 AF E5 .dbyt %1010111111100101 -0028FEr 1 AF E6 .dbyt %1010111111100110 -002900r 1 AF E7 .dbyt %1010111111100111 -002902r 1 AF E8 .dbyt %1010111111101000 -002904r 1 AF E9 .dbyt %1010111111101001 -002906r 1 AF EA .dbyt %1010111111101010 -002908r 1 AF EB .dbyt %1010111111101011 -00290Ar 1 AF EC .dbyt %1010111111101100 -00290Cr 1 AF ED .dbyt %1010111111101101 -00290Er 1 AF EE .dbyt %1010111111101110 -002910r 1 AF EF .dbyt %1010111111101111 -002912r 1 AF F0 .dbyt %1010111111110000 -002914r 1 AF F1 .dbyt %1010111111110001 -002916r 1 AF F2 .dbyt %1010111111110010 -002918r 1 AF F3 .dbyt %1010111111110011 -00291Ar 1 AF F4 .dbyt %1010111111110100 -00291Cr 1 AF F5 .dbyt %1010111111110101 -00291Er 1 AF F6 .dbyt %1010111111110110 -002920r 1 AF F7 .dbyt %1010111111110111 -002922r 1 AF F8 .dbyt %1010111111111000 -002924r 1 AF F9 .dbyt %1010111111111001 -002926r 1 AF FA .dbyt %1010111111111010 -002928r 1 AF FB .dbyt %1010111111111011 -00292Ar 1 AF FC .dbyt %1010111111111100 -00292Cr 1 AF FD .dbyt %1010111111111101 -00292Er 1 AF FE .dbyt %1010111111111110 -002930r 1 AF FF .dbyt %1010111111111111 -002932r 1 B0 00 .dbyt %1011000000000000 -002934r 1 B0 01 .dbyt %1011000000000001 -002936r 1 B0 02 .dbyt %1011000000000010 -002938r 1 B0 03 .dbyt %1011000000000011 -00293Ar 1 B0 04 .dbyt %1011000000000100 -00293Cr 1 B0 05 .dbyt %1011000000000101 -00293Er 1 B0 06 .dbyt %1011000000000110 -002940r 1 B0 07 .dbyt %1011000000000111 -002942r 1 B0 08 .dbyt %1011000000001000 -002944r 1 B0 09 .dbyt %1011000000001001 -002946r 1 B0 0A .dbyt %1011000000001010 -002948r 1 B0 0B .dbyt %1011000000001011 -00294Ar 1 B0 0C .dbyt %1011000000001100 -00294Cr 1 B0 0D .dbyt %1011000000001101 -00294Er 1 B0 0E .dbyt %1011000000001110 -002950r 1 B0 0F .dbyt %1011000000001111 -002952r 1 BF E1 .dbyt %1011111111100001 -002954r 1 BF E2 .dbyt %1011111111100010 -002956r 1 BF E3 .dbyt %1011111111100011 -002958r 1 BF E4 .dbyt %1011111111100100 -00295Ar 1 BF E5 .dbyt %1011111111100101 -00295Cr 1 BF E6 .dbyt %1011111111100110 -00295Er 1 BF E7 .dbyt %1011111111100111 -002960r 1 BF E8 .dbyt %1011111111101000 -002962r 1 BF E9 .dbyt %1011111111101001 -002964r 1 BF EA .dbyt %1011111111101010 -002966r 1 BF EB .dbyt %1011111111101011 -002968r 1 BF EC .dbyt %1011111111101100 -00296Ar 1 BF ED .dbyt %1011111111101101 -00296Cr 1 BF EE .dbyt %1011111111101110 -00296Er 1 BF EF .dbyt %1011111111101111 -002970r 1 BF F0 .dbyt %1011111111110000 -002972r 1 BF F1 .dbyt %1011111111110001 -002974r 1 BF F2 .dbyt %1011111111110010 -002976r 1 BF F3 .dbyt %1011111111110011 -002978r 1 BF F4 .dbyt %1011111111110100 -00297Ar 1 BF F5 .dbyt %1011111111110101 -00297Cr 1 BF F6 .dbyt %1011111111110110 -00297Er 1 BF F7 .dbyt %1011111111110111 -002980r 1 BF F8 .dbyt %1011111111111000 -002982r 1 BF F9 .dbyt %1011111111111001 -002984r 1 BF FA .dbyt %1011111111111010 -002986r 1 BF FB .dbyt %1011111111111011 -002988r 1 BF FC .dbyt %1011111111111100 -00298Ar 1 BF FD .dbyt %1011111111111101 -00298Cr 1 BF FE .dbyt %1011111111111110 -00298Er 1 BF FF .dbyt %1011111111111111 -002990r 1 C0 00 .dbyt %1100000000000000 -002992r 1 C0 01 .dbyt %1100000000000001 -002994r 1 C0 02 .dbyt %1100000000000010 -002996r 1 C0 03 .dbyt %1100000000000011 -002998r 1 C0 04 .dbyt %1100000000000100 -00299Ar 1 C0 05 .dbyt %1100000000000101 -00299Cr 1 C0 06 .dbyt %1100000000000110 -00299Er 1 C0 07 .dbyt %1100000000000111 -0029A0r 1 C0 08 .dbyt %1100000000001000 -0029A2r 1 C0 09 .dbyt %1100000000001001 -0029A4r 1 C0 0A .dbyt %1100000000001010 -0029A6r 1 C0 0B .dbyt %1100000000001011 -0029A8r 1 C0 0C .dbyt %1100000000001100 -0029AAr 1 C0 0D .dbyt %1100000000001101 -0029ACr 1 C0 0E .dbyt %1100000000001110 -0029AEr 1 C0 0F .dbyt %1100000000001111 -0029B0r 1 CF E1 .dbyt %1100111111100001 -0029B2r 1 CF E2 .dbyt %1100111111100010 -0029B4r 1 CF E3 .dbyt %1100111111100011 -0029B6r 1 CF E4 .dbyt %1100111111100100 -0029B8r 1 CF E5 .dbyt %1100111111100101 -0029BAr 1 CF E6 .dbyt %1100111111100110 -0029BCr 1 CF E7 .dbyt %1100111111100111 -0029BEr 1 CF E8 .dbyt %1100111111101000 -0029C0r 1 CF E9 .dbyt %1100111111101001 -0029C2r 1 CF EA .dbyt %1100111111101010 -0029C4r 1 CF EB .dbyt %1100111111101011 -0029C6r 1 CF EC .dbyt %1100111111101100 -0029C8r 1 CF ED .dbyt %1100111111101101 -0029CAr 1 CF EE .dbyt %1100111111101110 -0029CCr 1 CF EF .dbyt %1100111111101111 -0029CEr 1 CF F0 .dbyt %1100111111110000 -0029D0r 1 CF F1 .dbyt %1100111111110001 -0029D2r 1 CF F2 .dbyt %1100111111110010 -0029D4r 1 CF F3 .dbyt %1100111111110011 -0029D6r 1 CF F4 .dbyt %1100111111110100 -0029D8r 1 CF F5 .dbyt %1100111111110101 -0029DAr 1 CF F6 .dbyt %1100111111110110 -0029DCr 1 CF F7 .dbyt %1100111111110111 -0029DEr 1 CF F8 .dbyt %1100111111111000 -0029E0r 1 CF F9 .dbyt %1100111111111001 -0029E2r 1 CF FA .dbyt %1100111111111010 -0029E4r 1 CF FB .dbyt %1100111111111011 -0029E6r 1 CF FC .dbyt %1100111111111100 -0029E8r 1 CF FD .dbyt %1100111111111101 -0029EAr 1 CF FE .dbyt %1100111111111110 -0029ECr 1 CF FF .dbyt %1100111111111111 -0029EEr 1 D0 00 .dbyt %1101000000000000 -0029F0r 1 D0 01 .dbyt %1101000000000001 -0029F2r 1 D0 02 .dbyt %1101000000000010 -0029F4r 1 D0 03 .dbyt %1101000000000011 -0029F6r 1 D0 04 .dbyt %1101000000000100 -0029F8r 1 D0 05 .dbyt %1101000000000101 -0029FAr 1 D0 06 .dbyt %1101000000000110 -0029FCr 1 D0 07 .dbyt %1101000000000111 -0029FEr 1 D0 08 .dbyt %1101000000001000 -002A00r 1 D0 09 .dbyt %1101000000001001 -002A02r 1 D0 0A .dbyt %1101000000001010 -002A04r 1 D0 0B .dbyt %1101000000001011 -002A06r 1 D0 0C .dbyt %1101000000001100 -002A08r 1 D0 0D .dbyt %1101000000001101 -002A0Ar 1 D0 0E .dbyt %1101000000001110 -002A0Cr 1 D0 0F .dbyt %1101000000001111 -002A0Er 1 DF E1 .dbyt %1101111111100001 -002A10r 1 DF E2 .dbyt %1101111111100010 -002A12r 1 DF E3 .dbyt %1101111111100011 -002A14r 1 DF E4 .dbyt %1101111111100100 -002A16r 1 DF E5 .dbyt %1101111111100101 -002A18r 1 DF E6 .dbyt %1101111111100110 -002A1Ar 1 DF E7 .dbyt %1101111111100111 -002A1Cr 1 DF E8 .dbyt %1101111111101000 -002A1Er 1 DF E9 .dbyt %1101111111101001 -002A20r 1 DF EA .dbyt %1101111111101010 -002A22r 1 DF EB .dbyt %1101111111101011 -002A24r 1 DF EC .dbyt %1101111111101100 -002A26r 1 DF ED .dbyt %1101111111101101 -002A28r 1 DF EE .dbyt %1101111111101110 -002A2Ar 1 DF EF .dbyt %1101111111101111 -002A2Cr 1 DF F0 .dbyt %1101111111110000 -002A2Er 1 DF F1 .dbyt %1101111111110001 -002A30r 1 DF F2 .dbyt %1101111111110010 -002A32r 1 DF F3 .dbyt %1101111111110011 -002A34r 1 DF F4 .dbyt %1101111111110100 -002A36r 1 DF F5 .dbyt %1101111111110101 -002A38r 1 DF F6 .dbyt %1101111111110110 -002A3Ar 1 DF F7 .dbyt %1101111111110111 -002A3Cr 1 DF F8 .dbyt %1101111111111000 -002A3Er 1 DF F9 .dbyt %1101111111111001 -002A40r 1 DF FA .dbyt %1101111111111010 -002A42r 1 DF FB .dbyt %1101111111111011 -002A44r 1 DF FC .dbyt %1101111111111100 -002A46r 1 DF FD .dbyt %1101111111111101 -002A48r 1 DF FE .dbyt %1101111111111110 -002A4Ar 1 DF FF .dbyt %1101111111111111 -002A4Cr 1 E0 00 .dbyt %1110000000000000 -002A4Er 1 E0 01 .dbyt %1110000000000001 -002A50r 1 E0 02 .dbyt %1110000000000010 -002A52r 1 E0 03 .dbyt %1110000000000011 -002A54r 1 E0 04 .dbyt %1110000000000100 -002A56r 1 E0 05 .dbyt %1110000000000101 -002A58r 1 E0 06 .dbyt %1110000000000110 -002A5Ar 1 E0 07 .dbyt %1110000000000111 -002A5Cr 1 E0 08 .dbyt %1110000000001000 -002A5Er 1 E0 09 .dbyt %1110000000001001 -002A60r 1 E0 0A .dbyt %1110000000001010 -002A62r 1 E0 0B .dbyt %1110000000001011 -002A64r 1 E0 0C .dbyt %1110000000001100 -002A66r 1 E0 0D .dbyt %1110000000001101 -002A68r 1 E0 0E .dbyt %1110000000001110 -002A6Ar 1 E0 0F .dbyt %1110000000001111 -002A6Cr 1 EF E1 .dbyt %1110111111100001 -002A6Er 1 EF E2 .dbyt %1110111111100010 -002A70r 1 EF E3 .dbyt %1110111111100011 -002A72r 1 EF E4 .dbyt %1110111111100100 -002A74r 1 EF E5 .dbyt %1110111111100101 -002A76r 1 EF E6 .dbyt %1110111111100110 -002A78r 1 EF E7 .dbyt %1110111111100111 -002A7Ar 1 EF E8 .dbyt %1110111111101000 -002A7Cr 1 EF E9 .dbyt %1110111111101001 -002A7Er 1 EF EA .dbyt %1110111111101010 -002A80r 1 EF EB .dbyt %1110111111101011 -002A82r 1 EF EC .dbyt %1110111111101100 -002A84r 1 EF ED .dbyt %1110111111101101 -002A86r 1 EF EE .dbyt %1110111111101110 -002A88r 1 EF EF .dbyt %1110111111101111 -002A8Ar 1 EF F0 .dbyt %1110111111110000 -002A8Cr 1 EF F1 .dbyt %1110111111110001 -002A8Er 1 EF F2 .dbyt %1110111111110010 -002A90r 1 EF F3 .dbyt %1110111111110011 -002A92r 1 EF F4 .dbyt %1110111111110100 -002A94r 1 EF F5 .dbyt %1110111111110101 -002A96r 1 EF F6 .dbyt %1110111111110110 -002A98r 1 EF F7 .dbyt %1110111111110111 -002A9Ar 1 EF F8 .dbyt %1110111111111000 -002A9Cr 1 EF F9 .dbyt %1110111111111001 -002A9Er 1 EF FA .dbyt %1110111111111010 -002AA0r 1 EF FB .dbyt %1110111111111011 -002AA2r 1 EF FC .dbyt %1110111111111100 -002AA4r 1 EF FD .dbyt %1110111111111101 -002AA6r 1 EF FE .dbyt %1110111111111110 -002AA8r 1 EF FF .dbyt %1110111111111111 -002AAAr 1 F0 00 .dbyt %1111000000000000 -002AACr 1 F0 01 .dbyt %1111000000000001 -002AAEr 1 F0 02 .dbyt %1111000000000010 -002AB0r 1 F0 03 .dbyt %1111000000000011 -002AB2r 1 F0 04 .dbyt %1111000000000100 -002AB4r 1 F0 05 .dbyt %1111000000000101 -002AB6r 1 F0 06 .dbyt %1111000000000110 -002AB8r 1 F0 07 .dbyt %1111000000000111 -002ABAr 1 F0 08 .dbyt %1111000000001000 -002ABCr 1 F0 09 .dbyt %1111000000001001 -002ABEr 1 F0 0A .dbyt %1111000000001010 -002AC0r 1 F0 0B .dbyt %1111000000001011 -002AC2r 1 F0 0C .dbyt %1111000000001100 -002AC4r 1 F0 0D .dbyt %1111000000001101 -002AC6r 1 F0 0E .dbyt %1111000000001110 -002AC8r 1 F0 0F .dbyt %1111000000001111 -002ACAr 1 FF E1 .dbyt %1111111111100001 -002ACCr 1 FF E2 .dbyt %1111111111100010 -002ACEr 1 FF E3 .dbyt %1111111111100011 -002AD0r 1 FF E4 .dbyt %1111111111100100 -002AD2r 1 FF E5 .dbyt %1111111111100101 -002AD4r 1 FF E6 .dbyt %1111111111100110 -002AD6r 1 FF E7 .dbyt %1111111111100111 -002AD8r 1 FF E8 .dbyt %1111111111101000 -002ADAr 1 FF E9 .dbyt %1111111111101001 -002ADCr 1 FF EA .dbyt %1111111111101010 -002ADEr 1 FF EB .dbyt %1111111111101011 -002AE0r 1 FF EC .dbyt %1111111111101100 -002AE2r 1 FF ED .dbyt %1111111111101101 -002AE4r 1 FF EE .dbyt %1111111111101110 -002AE6r 1 FF EF .dbyt %1111111111101111 -002AE8r 1 FF F0 .dbyt %1111111111110000 -002AEAr 1 FF F1 .dbyt %1111111111110001 -002AECr 1 FF F2 .dbyt %1111111111110010 -002AEEr 1 FF F3 .dbyt %1111111111110011 -002AF0r 1 FF F4 .dbyt %1111111111110100 -002AF2r 1 FF F5 .dbyt %1111111111110101 -002AF4r 1 FF F6 .dbyt %1111111111110110 -002AF6r 1 FF F7 .dbyt %1111111111110111 -002AF8r 1 FF F8 .dbyt %1111111111111000 -002AFAr 1 FF F9 .dbyt %1111111111111001 -002AFCr 1 FF FA .dbyt %1111111111111010 -002AFEr 1 FF FB .dbyt %1111111111111011 -002B00r 1 FF FC .dbyt %1111111111111100 -002B02r 1 FF FD .dbyt %1111111111111101 -002B04r 1 FF FE .dbyt %1111111111111110 -002B06r 1 FF FF .dbyt %1111111111111111 +002772r 1 ; binary values, variable length +002772r 1 00 00 .dbyt %0 +002774r 1 00 01 .dbyt %01 +002776r 1 00 02 .dbyt %010 +002778r 1 00 03 .dbyt %011 +00277Ar 1 00 04 .dbyt %0100 +00277Cr 1 00 05 .dbyt %0101 +00277Er 1 00 06 .dbyt %0110 +002780r 1 00 07 .dbyt %0111 +002782r 1 00 08 .dbyt %01000 +002784r 1 00 09 .dbyt %01001 +002786r 1 00 0A .dbyt %01010 +002788r 1 00 0B .dbyt %01011 +00278Ar 1 00 0C .dbyt %01100 +00278Cr 1 00 0D .dbyt %01101 +00278Er 1 00 0E .dbyt %01110 +002790r 1 00 0F .dbyt %01111 +002792r 1 00 10 .dbyt %010000 +002794r 1 00 11 .dbyt %010001 +002796r 1 00 12 .dbyt %010010 +002798r 1 00 13 .dbyt %010011 +00279Ar 1 00 70 .dbyt %01110000 +00279Cr 1 00 71 .dbyt %01110001 +00279Er 1 00 72 .dbyt %01110010 +0027A0r 1 00 73 .dbyt %01110011 +0027A2r 1 00 74 .dbyt %01110100 +0027A4r 1 00 75 .dbyt %01110101 +0027A6r 1 00 76 .dbyt %01110110 +0027A8r 1 00 77 .dbyt %01110111 +0027AAr 1 00 78 .dbyt %01111000 +0027ACr 1 00 79 .dbyt %01111001 +0027AEr 1 00 7A .dbyt %01111010 +0027B0r 1 00 7B .dbyt %01111011 +0027B2r 1 00 7C .dbyt %01111100 +0027B4r 1 00 7D .dbyt %01111101 +0027B6r 1 00 7E .dbyt %01111110 +0027B8r 1 00 7F .dbyt %01111111 +0027BAr 1 00 80 .dbyt %010000000 +0027BCr 1 00 81 .dbyt %010000001 +0027BEr 1 00 82 .dbyt %010000010 +0027C0r 1 00 83 .dbyt %010000011 +0027C2r 1 00 84 .dbyt %010000100 +0027C4r 1 00 85 .dbyt %010000101 +0027C6r 1 00 86 .dbyt %010000110 +0027C8r 1 00 F0 .dbyt %011110000 +0027CAr 1 00 F1 .dbyt %011110001 +0027CCr 1 00 F2 .dbyt %011110010 +0027CEr 1 00 F3 .dbyt %011110011 +0027D0r 1 00 F4 .dbyt %011110100 +0027D2r 1 00 F5 .dbyt %011110101 +0027D4r 1 00 F6 .dbyt %011110110 +0027D6r 1 00 F7 .dbyt %011110111 +0027D8r 1 00 F8 .dbyt %011111000 +0027DAr 1 00 F9 .dbyt %011111001 +0027DCr 1 00 FA .dbyt %011111010 +0027DEr 1 00 FB .dbyt %011111011 +0027E0r 1 00 FC .dbyt %011111100 +0027E2r 1 00 FD .dbyt %011111101 +0027E4r 1 00 FE .dbyt %011111110 +0027E6r 1 00 FF .dbyt %011111111 +0027E8r 1 01 00 .dbyt %100000000 +0027EAr 1 01 01 .dbyt %100000001 +0027ECr 1 01 02 .dbyt %100000010 +0027EEr 1 01 03 .dbyt %100000011 +0027F0r 1 0F D2 .dbyt %111111010010 +0027F2r 1 0F D3 .dbyt %111111010011 +0027F4r 1 0F D4 .dbyt %111111010100 +0027F6r 1 0F D5 .dbyt %111111010101 +0027F8r 1 0F D6 .dbyt %111111010110 +0027FAr 1 0F D7 .dbyt %111111010111 +0027FCr 1 0F D8 .dbyt %111111011000 +0027FEr 1 0F D9 .dbyt %111111011001 +002800r 1 0F DA .dbyt %111111011010 +002802r 1 0F DB .dbyt %111111011011 +002804r 1 0F DC .dbyt %111111011100 +002806r 1 0F DD .dbyt %111111011101 +002808r 1 0F DE .dbyt %111111011110 +00280Ar 1 0F DF .dbyt %111111011111 +00280Cr 1 0F E0 .dbyt %111111100000 +00280Er 1 0F E1 .dbyt %111111100001 +002810r 1 0F E2 .dbyt %111111100010 +002812r 1 0F E3 .dbyt %111111100011 +002814r 1 0F E4 .dbyt %111111100100 +002816r 1 0F E5 .dbyt %111111100101 +002818r 1 0F E6 .dbyt %111111100110 +00281Ar 1 0F E7 .dbyt %111111100111 +00281Cr 1 0F E8 .dbyt %111111101000 +00281Er 1 0F E9 .dbyt %111111101001 +002820r 1 0F EA .dbyt %111111101010 +002822r 1 0F EB .dbyt %111111101011 +002824r 1 0F EC .dbyt %111111101100 +002826r 1 0F ED .dbyt %111111101101 +002828r 1 0F EE .dbyt %111111101110 +00282Ar 1 0F EF .dbyt %111111101111 +00282Cr 1 0F F0 .dbyt %111111110000 +00282Er 1 0F F1 .dbyt %111111110001 +002830r 1 0F F2 .dbyt %111111110010 +002832r 1 0F F3 .dbyt %111111110011 +002834r 1 0F F4 .dbyt %111111110100 +002836r 1 0F F5 .dbyt %111111110101 +002838r 1 0F F6 .dbyt %111111110110 +00283Ar 1 0F F7 .dbyt %111111110111 +00283Cr 1 0F F8 .dbyt %111111111000 +00283Er 1 0F F9 .dbyt %111111111001 +002840r 1 0F FA .dbyt %111111111010 +002842r 1 0F FB .dbyt %111111111011 +002844r 1 0F FC .dbyt %111111111100 +002846r 1 0F FD .dbyt %111111111101 +002848r 1 0F FE .dbyt %111111111110 +00284Ar 1 0F FF .dbyt %111111111111 +00284Cr 1 10 00 .dbyt %1000000000000 +00284Er 1 10 01 .dbyt %1000000000001 +002850r 1 10 02 .dbyt %1000000000010 +002852r 1 10 03 .dbyt %1000000000011 +002854r 1 10 04 .dbyt %1000000000100 +002856r 1 10 05 .dbyt %1000000000101 +002858r 1 10 06 .dbyt %1000000000110 +00285Ar 1 10 07 .dbyt %1000000000111 +00285Cr 1 10 08 .dbyt %1000000001000 +00285Er 1 7F F0 .dbyt %111111111110000 +002860r 1 7F F1 .dbyt %111111111110001 +002862r 1 7F F2 .dbyt %111111111110010 +002864r 1 7F F3 .dbyt %111111111110011 +002866r 1 7F F4 .dbyt %111111111110100 +002868r 1 7F F5 .dbyt %111111111110101 +00286Ar 1 7F F6 .dbyt %111111111110110 +00286Cr 1 7F F7 .dbyt %111111111110111 +00286Er 1 7F F8 .dbyt %111111111111000 +002870r 1 7F F9 .dbyt %111111111111001 +002872r 1 7F FA .dbyt %111111111111010 +002874r 1 7F FB .dbyt %111111111111011 +002876r 1 7F FC .dbyt %111111111111100 +002878r 1 7F FD .dbyt %111111111111101 +00287Ar 1 7F FE .dbyt %111111111111110 +00287Cr 1 7F FF .dbyt %111111111111111 +00287Er 1 80 00 .dbyt %1000000000000000 +002880r 1 80 01 .dbyt %1000000000000001 +002882r 1 80 02 .dbyt %1000000000000010 +002884r 1 80 03 .dbyt %1000000000000011 +002886r 1 80 04 .dbyt %1000000000000100 +002888r 1 80 05 .dbyt %1000000000000101 +00288Ar 1 80 06 .dbyt %1000000000000110 +00288Cr 1 80 07 .dbyt %1000000000000111 +00288Er 1 80 08 .dbyt %1000000000001000 +002890r 1 80 09 .dbyt %1000000000001001 +002892r 1 80 0A .dbyt %1000000000001010 +002894r 1 80 0B .dbyt %1000000000001011 +002896r 1 9F E1 .dbyt %1001111111100001 +002898r 1 9F E2 .dbyt %1001111111100010 +00289Ar 1 9F E3 .dbyt %1001111111100011 +00289Cr 1 9F E4 .dbyt %1001111111100100 +00289Er 1 9F E5 .dbyt %1001111111100101 +0028A0r 1 9F E6 .dbyt %1001111111100110 +0028A2r 1 9F E7 .dbyt %1001111111100111 +0028A4r 1 9F E8 .dbyt %1001111111101000 +0028A6r 1 9F E9 .dbyt %1001111111101001 +0028A8r 1 9F EA .dbyt %1001111111101010 +0028AAr 1 9F EB .dbyt %1001111111101011 +0028ACr 1 9F EC .dbyt %1001111111101100 +0028AEr 1 9F ED .dbyt %1001111111101101 +0028B0r 1 9F EE .dbyt %1001111111101110 +0028B2r 1 9F EF .dbyt %1001111111101111 +0028B4r 1 9F F0 .dbyt %1001111111110000 +0028B6r 1 9F F1 .dbyt %1001111111110001 +0028B8r 1 9F F2 .dbyt %1001111111110010 +0028BAr 1 9F F3 .dbyt %1001111111110011 +0028BCr 1 9F F4 .dbyt %1001111111110100 +0028BEr 1 9F F5 .dbyt %1001111111110101 +0028C0r 1 9F F6 .dbyt %1001111111110110 +0028C2r 1 9F F7 .dbyt %1001111111110111 +0028C4r 1 9F F8 .dbyt %1001111111111000 +0028C6r 1 9F F9 .dbyt %1001111111111001 +0028C8r 1 9F FA .dbyt %1001111111111010 +0028CAr 1 9F FB .dbyt %1001111111111011 +0028CCr 1 9F FC .dbyt %1001111111111100 +0028CEr 1 9F FD .dbyt %1001111111111101 +0028D0r 1 9F FE .dbyt %1001111111111110 +0028D2r 1 9F FF .dbyt %1001111111111111 +0028D4r 1 A0 00 .dbyt %1010000000000000 +0028D6r 1 A0 01 .dbyt %1010000000000001 +0028D8r 1 A0 02 .dbyt %1010000000000010 +0028DAr 1 A0 03 .dbyt %1010000000000011 +0028DCr 1 A0 04 .dbyt %1010000000000100 +0028DEr 1 A0 05 .dbyt %1010000000000101 +0028E0r 1 A0 06 .dbyt %1010000000000110 +0028E2r 1 A0 07 .dbyt %1010000000000111 +0028E4r 1 A0 08 .dbyt %1010000000001000 +0028E6r 1 A0 09 .dbyt %1010000000001001 +0028E8r 1 A0 0A .dbyt %1010000000001010 +0028EAr 1 A0 0B .dbyt %1010000000001011 +0028ECr 1 A0 0C .dbyt %1010000000001100 +0028EEr 1 A0 0D .dbyt %1010000000001101 +0028F0r 1 A0 0E .dbyt %1010000000001110 +0028F2r 1 A0 0F .dbyt %1010000000001111 +0028F4r 1 AF E1 .dbyt %1010111111100001 +0028F6r 1 AF E2 .dbyt %1010111111100010 +0028F8r 1 AF E3 .dbyt %1010111111100011 +0028FAr 1 AF E4 .dbyt %1010111111100100 +0028FCr 1 AF E5 .dbyt %1010111111100101 +0028FEr 1 AF E6 .dbyt %1010111111100110 +002900r 1 AF E7 .dbyt %1010111111100111 +002902r 1 AF E8 .dbyt %1010111111101000 +002904r 1 AF E9 .dbyt %1010111111101001 +002906r 1 AF EA .dbyt %1010111111101010 +002908r 1 AF EB .dbyt %1010111111101011 +00290Ar 1 AF EC .dbyt %1010111111101100 +00290Cr 1 AF ED .dbyt %1010111111101101 +00290Er 1 AF EE .dbyt %1010111111101110 +002910r 1 AF EF .dbyt %1010111111101111 +002912r 1 AF F0 .dbyt %1010111111110000 +002914r 1 AF F1 .dbyt %1010111111110001 +002916r 1 AF F2 .dbyt %1010111111110010 +002918r 1 AF F3 .dbyt %1010111111110011 +00291Ar 1 AF F4 .dbyt %1010111111110100 +00291Cr 1 AF F5 .dbyt %1010111111110101 +00291Er 1 AF F6 .dbyt %1010111111110110 +002920r 1 AF F7 .dbyt %1010111111110111 +002922r 1 AF F8 .dbyt %1010111111111000 +002924r 1 AF F9 .dbyt %1010111111111001 +002926r 1 AF FA .dbyt %1010111111111010 +002928r 1 AF FB .dbyt %1010111111111011 +00292Ar 1 AF FC .dbyt %1010111111111100 +00292Cr 1 AF FD .dbyt %1010111111111101 +00292Er 1 AF FE .dbyt %1010111111111110 +002930r 1 AF FF .dbyt %1010111111111111 +002932r 1 B0 00 .dbyt %1011000000000000 +002934r 1 B0 01 .dbyt %1011000000000001 +002936r 1 B0 02 .dbyt %1011000000000010 +002938r 1 B0 03 .dbyt %1011000000000011 +00293Ar 1 B0 04 .dbyt %1011000000000100 +00293Cr 1 B0 05 .dbyt %1011000000000101 +00293Er 1 B0 06 .dbyt %1011000000000110 +002940r 1 B0 07 .dbyt %1011000000000111 +002942r 1 B0 08 .dbyt %1011000000001000 +002944r 1 B0 09 .dbyt %1011000000001001 +002946r 1 B0 0A .dbyt %1011000000001010 +002948r 1 B0 0B .dbyt %1011000000001011 +00294Ar 1 B0 0C .dbyt %1011000000001100 +00294Cr 1 B0 0D .dbyt %1011000000001101 +00294Er 1 B0 0E .dbyt %1011000000001110 +002950r 1 B0 0F .dbyt %1011000000001111 +002952r 1 BF E1 .dbyt %1011111111100001 +002954r 1 BF E2 .dbyt %1011111111100010 +002956r 1 BF E3 .dbyt %1011111111100011 +002958r 1 BF E4 .dbyt %1011111111100100 +00295Ar 1 BF E5 .dbyt %1011111111100101 +00295Cr 1 BF E6 .dbyt %1011111111100110 +00295Er 1 BF E7 .dbyt %1011111111100111 +002960r 1 BF E8 .dbyt %1011111111101000 +002962r 1 BF E9 .dbyt %1011111111101001 +002964r 1 BF EA .dbyt %1011111111101010 +002966r 1 BF EB .dbyt %1011111111101011 +002968r 1 BF EC .dbyt %1011111111101100 +00296Ar 1 BF ED .dbyt %1011111111101101 +00296Cr 1 BF EE .dbyt %1011111111101110 +00296Er 1 BF EF .dbyt %1011111111101111 +002970r 1 BF F0 .dbyt %1011111111110000 +002972r 1 BF F1 .dbyt %1011111111110001 +002974r 1 BF F2 .dbyt %1011111111110010 +002976r 1 BF F3 .dbyt %1011111111110011 +002978r 1 BF F4 .dbyt %1011111111110100 +00297Ar 1 BF F5 .dbyt %1011111111110101 +00297Cr 1 BF F6 .dbyt %1011111111110110 +00297Er 1 BF F7 .dbyt %1011111111110111 +002980r 1 BF F8 .dbyt %1011111111111000 +002982r 1 BF F9 .dbyt %1011111111111001 +002984r 1 BF FA .dbyt %1011111111111010 +002986r 1 BF FB .dbyt %1011111111111011 +002988r 1 BF FC .dbyt %1011111111111100 +00298Ar 1 BF FD .dbyt %1011111111111101 +00298Cr 1 BF FE .dbyt %1011111111111110 +00298Er 1 BF FF .dbyt %1011111111111111 +002990r 1 C0 00 .dbyt %1100000000000000 +002992r 1 C0 01 .dbyt %1100000000000001 +002994r 1 C0 02 .dbyt %1100000000000010 +002996r 1 C0 03 .dbyt %1100000000000011 +002998r 1 C0 04 .dbyt %1100000000000100 +00299Ar 1 C0 05 .dbyt %1100000000000101 +00299Cr 1 C0 06 .dbyt %1100000000000110 +00299Er 1 C0 07 .dbyt %1100000000000111 +0029A0r 1 C0 08 .dbyt %1100000000001000 +0029A2r 1 C0 09 .dbyt %1100000000001001 +0029A4r 1 C0 0A .dbyt %1100000000001010 +0029A6r 1 C0 0B .dbyt %1100000000001011 +0029A8r 1 C0 0C .dbyt %1100000000001100 +0029AAr 1 C0 0D .dbyt %1100000000001101 +0029ACr 1 C0 0E .dbyt %1100000000001110 +0029AEr 1 C0 0F .dbyt %1100000000001111 +0029B0r 1 CF E1 .dbyt %1100111111100001 +0029B2r 1 CF E2 .dbyt %1100111111100010 +0029B4r 1 CF E3 .dbyt %1100111111100011 +0029B6r 1 CF E4 .dbyt %1100111111100100 +0029B8r 1 CF E5 .dbyt %1100111111100101 +0029BAr 1 CF E6 .dbyt %1100111111100110 +0029BCr 1 CF E7 .dbyt %1100111111100111 +0029BEr 1 CF E8 .dbyt %1100111111101000 +0029C0r 1 CF E9 .dbyt %1100111111101001 +0029C2r 1 CF EA .dbyt %1100111111101010 +0029C4r 1 CF EB .dbyt %1100111111101011 +0029C6r 1 CF EC .dbyt %1100111111101100 +0029C8r 1 CF ED .dbyt %1100111111101101 +0029CAr 1 CF EE .dbyt %1100111111101110 +0029CCr 1 CF EF .dbyt %1100111111101111 +0029CEr 1 CF F0 .dbyt %1100111111110000 +0029D0r 1 CF F1 .dbyt %1100111111110001 +0029D2r 1 CF F2 .dbyt %1100111111110010 +0029D4r 1 CF F3 .dbyt %1100111111110011 +0029D6r 1 CF F4 .dbyt %1100111111110100 +0029D8r 1 CF F5 .dbyt %1100111111110101 +0029DAr 1 CF F6 .dbyt %1100111111110110 +0029DCr 1 CF F7 .dbyt %1100111111110111 +0029DEr 1 CF F8 .dbyt %1100111111111000 +0029E0r 1 CF F9 .dbyt %1100111111111001 +0029E2r 1 CF FA .dbyt %1100111111111010 +0029E4r 1 CF FB .dbyt %1100111111111011 +0029E6r 1 CF FC .dbyt %1100111111111100 +0029E8r 1 CF FD .dbyt %1100111111111101 +0029EAr 1 CF FE .dbyt %1100111111111110 +0029ECr 1 CF FF .dbyt %1100111111111111 +0029EEr 1 D0 00 .dbyt %1101000000000000 +0029F0r 1 D0 01 .dbyt %1101000000000001 +0029F2r 1 D0 02 .dbyt %1101000000000010 +0029F4r 1 D0 03 .dbyt %1101000000000011 +0029F6r 1 D0 04 .dbyt %1101000000000100 +0029F8r 1 D0 05 .dbyt %1101000000000101 +0029FAr 1 D0 06 .dbyt %1101000000000110 +0029FCr 1 D0 07 .dbyt %1101000000000111 +0029FEr 1 D0 08 .dbyt %1101000000001000 +002A00r 1 D0 09 .dbyt %1101000000001001 +002A02r 1 D0 0A .dbyt %1101000000001010 +002A04r 1 D0 0B .dbyt %1101000000001011 +002A06r 1 D0 0C .dbyt %1101000000001100 +002A08r 1 D0 0D .dbyt %1101000000001101 +002A0Ar 1 D0 0E .dbyt %1101000000001110 +002A0Cr 1 D0 0F .dbyt %1101000000001111 +002A0Er 1 DF E1 .dbyt %1101111111100001 +002A10r 1 DF E2 .dbyt %1101111111100010 +002A12r 1 DF E3 .dbyt %1101111111100011 +002A14r 1 DF E4 .dbyt %1101111111100100 +002A16r 1 DF E5 .dbyt %1101111111100101 +002A18r 1 DF E6 .dbyt %1101111111100110 +002A1Ar 1 DF E7 .dbyt %1101111111100111 +002A1Cr 1 DF E8 .dbyt %1101111111101000 +002A1Er 1 DF E9 .dbyt %1101111111101001 +002A20r 1 DF EA .dbyt %1101111111101010 +002A22r 1 DF EB .dbyt %1101111111101011 +002A24r 1 DF EC .dbyt %1101111111101100 +002A26r 1 DF ED .dbyt %1101111111101101 +002A28r 1 DF EE .dbyt %1101111111101110 +002A2Ar 1 DF EF .dbyt %1101111111101111 +002A2Cr 1 DF F0 .dbyt %1101111111110000 +002A2Er 1 DF F1 .dbyt %1101111111110001 +002A30r 1 DF F2 .dbyt %1101111111110010 +002A32r 1 DF F3 .dbyt %1101111111110011 +002A34r 1 DF F4 .dbyt %1101111111110100 +002A36r 1 DF F5 .dbyt %1101111111110101 +002A38r 1 DF F6 .dbyt %1101111111110110 +002A3Ar 1 DF F7 .dbyt %1101111111110111 +002A3Cr 1 DF F8 .dbyt %1101111111111000 +002A3Er 1 DF F9 .dbyt %1101111111111001 +002A40r 1 DF FA .dbyt %1101111111111010 +002A42r 1 DF FB .dbyt %1101111111111011 +002A44r 1 DF FC .dbyt %1101111111111100 +002A46r 1 DF FD .dbyt %1101111111111101 +002A48r 1 DF FE .dbyt %1101111111111110 +002A4Ar 1 DF FF .dbyt %1101111111111111 +002A4Cr 1 E0 00 .dbyt %1110000000000000 +002A4Er 1 E0 01 .dbyt %1110000000000001 +002A50r 1 E0 02 .dbyt %1110000000000010 +002A52r 1 E0 03 .dbyt %1110000000000011 +002A54r 1 E0 04 .dbyt %1110000000000100 +002A56r 1 E0 05 .dbyt %1110000000000101 +002A58r 1 E0 06 .dbyt %1110000000000110 +002A5Ar 1 E0 07 .dbyt %1110000000000111 +002A5Cr 1 E0 08 .dbyt %1110000000001000 +002A5Er 1 E0 09 .dbyt %1110000000001001 +002A60r 1 E0 0A .dbyt %1110000000001010 +002A62r 1 E0 0B .dbyt %1110000000001011 +002A64r 1 E0 0C .dbyt %1110000000001100 +002A66r 1 E0 0D .dbyt %1110000000001101 +002A68r 1 E0 0E .dbyt %1110000000001110 +002A6Ar 1 E0 0F .dbyt %1110000000001111 +002A6Cr 1 EF E1 .dbyt %1110111111100001 +002A6Er 1 EF E2 .dbyt %1110111111100010 +002A70r 1 EF E3 .dbyt %1110111111100011 +002A72r 1 EF E4 .dbyt %1110111111100100 +002A74r 1 EF E5 .dbyt %1110111111100101 +002A76r 1 EF E6 .dbyt %1110111111100110 +002A78r 1 EF E7 .dbyt %1110111111100111 +002A7Ar 1 EF E8 .dbyt %1110111111101000 +002A7Cr 1 EF E9 .dbyt %1110111111101001 +002A7Er 1 EF EA .dbyt %1110111111101010 +002A80r 1 EF EB .dbyt %1110111111101011 +002A82r 1 EF EC .dbyt %1110111111101100 +002A84r 1 EF ED .dbyt %1110111111101101 +002A86r 1 EF EE .dbyt %1110111111101110 +002A88r 1 EF EF .dbyt %1110111111101111 +002A8Ar 1 EF F0 .dbyt %1110111111110000 +002A8Cr 1 EF F1 .dbyt %1110111111110001 +002A8Er 1 EF F2 .dbyt %1110111111110010 +002A90r 1 EF F3 .dbyt %1110111111110011 +002A92r 1 EF F4 .dbyt %1110111111110100 +002A94r 1 EF F5 .dbyt %1110111111110101 +002A96r 1 EF F6 .dbyt %1110111111110110 +002A98r 1 EF F7 .dbyt %1110111111110111 +002A9Ar 1 EF F8 .dbyt %1110111111111000 +002A9Cr 1 EF F9 .dbyt %1110111111111001 +002A9Er 1 EF FA .dbyt %1110111111111010 +002AA0r 1 EF FB .dbyt %1110111111111011 +002AA2r 1 EF FC .dbyt %1110111111111100 +002AA4r 1 EF FD .dbyt %1110111111111101 +002AA6r 1 EF FE .dbyt %1110111111111110 +002AA8r 1 EF FF .dbyt %1110111111111111 +002AAAr 1 F0 00 .dbyt %1111000000000000 +002AACr 1 F0 01 .dbyt %1111000000000001 +002AAEr 1 F0 02 .dbyt %1111000000000010 +002AB0r 1 F0 03 .dbyt %1111000000000011 +002AB2r 1 F0 04 .dbyt %1111000000000100 +002AB4r 1 F0 05 .dbyt %1111000000000101 +002AB6r 1 F0 06 .dbyt %1111000000000110 +002AB8r 1 F0 07 .dbyt %1111000000000111 +002ABAr 1 F0 08 .dbyt %1111000000001000 +002ABCr 1 F0 09 .dbyt %1111000000001001 +002ABEr 1 F0 0A .dbyt %1111000000001010 +002AC0r 1 F0 0B .dbyt %1111000000001011 +002AC2r 1 F0 0C .dbyt %1111000000001100 +002AC4r 1 F0 0D .dbyt %1111000000001101 +002AC6r 1 F0 0E .dbyt %1111000000001110 +002AC8r 1 F0 0F .dbyt %1111000000001111 +002ACAr 1 FF E1 .dbyt %1111111111100001 +002ACCr 1 FF E2 .dbyt %1111111111100010 +002ACEr 1 FF E3 .dbyt %1111111111100011 +002AD0r 1 FF E4 .dbyt %1111111111100100 +002AD2r 1 FF E5 .dbyt %1111111111100101 +002AD4r 1 FF E6 .dbyt %1111111111100110 +002AD6r 1 FF E7 .dbyt %1111111111100111 +002AD8r 1 FF E8 .dbyt %1111111111101000 +002ADAr 1 FF E9 .dbyt %1111111111101001 +002ADCr 1 FF EA .dbyt %1111111111101010 +002ADEr 1 FF EB .dbyt %1111111111101011 +002AE0r 1 FF EC .dbyt %1111111111101100 +002AE2r 1 FF ED .dbyt %1111111111101101 +002AE4r 1 FF EE .dbyt %1111111111101110 +002AE6r 1 FF EF .dbyt %1111111111101111 +002AE8r 1 FF F0 .dbyt %1111111111110000 +002AEAr 1 FF F1 .dbyt %1111111111110001 +002AECr 1 FF F2 .dbyt %1111111111110010 +002AEEr 1 FF F3 .dbyt %1111111111110011 +002AF0r 1 FF F4 .dbyt %1111111111110100 +002AF2r 1 FF F5 .dbyt %1111111111110101 +002AF4r 1 FF F6 .dbyt %1111111111110110 +002AF6r 1 FF F7 .dbyt %1111111111110111 +002AF8r 1 FF F8 .dbyt %1111111111111000 +002AFAr 1 FF F9 .dbyt %1111111111111001 +002AFCr 1 FF FA .dbyt %1111111111111010 +002AFEr 1 FF FB .dbyt %1111111111111011 +002B00r 1 FF FC .dbyt %1111111111111100 +002B02r 1 FF FD .dbyt %1111111111111101 +002B04r 1 FF FE .dbyt %1111111111111110 +002B06r 1 FF FF .dbyt %1111111111111111 002B08r 1 -002B08r 1 ; binary values, full length -002B08r 1 00 00 .dbyt %0000000000000000 -002B0Ar 1 00 01 .dbyt %0000000000000001 -002B0Cr 1 00 02 .dbyt %0000000000000010 -002B0Er 1 00 03 .dbyt %0000000000000011 -002B10r 1 00 04 .dbyt %0000000000000100 -002B12r 1 00 05 .dbyt %0000000000000101 -002B14r 1 00 06 .dbyt %0000000000000110 -002B16r 1 00 07 .dbyt %0000000000000111 -002B18r 1 00 08 .dbyt %0000000000001000 -002B1Ar 1 00 09 .dbyt %0000000000001001 -002B1Cr 1 00 0A .dbyt %0000000000001010 -002B1Er 1 00 0B .dbyt %0000000000001011 -002B20r 1 00 0C .dbyt %0000000000001100 -002B22r 1 00 0D .dbyt %0000000000001101 -002B24r 1 00 0E .dbyt %0000000000001110 -002B26r 1 00 0F .dbyt %0000000000001111 -002B28r 1 00 10 .dbyt %0000000000010000 -002B2Ar 1 00 11 .dbyt %0000000000010001 -002B2Cr 1 00 12 .dbyt %0000000000010010 -002B2Er 1 00 13 .dbyt %0000000000010011 -002B30r 1 00 70 .dbyt %0000000001110000 -002B32r 1 00 71 .dbyt %0000000001110001 -002B34r 1 00 72 .dbyt %0000000001110010 -002B36r 1 00 73 .dbyt %0000000001110011 -002B38r 1 00 74 .dbyt %0000000001110100 -002B3Ar 1 00 75 .dbyt %0000000001110101 -002B3Cr 1 00 76 .dbyt %0000000001110110 -002B3Er 1 00 77 .dbyt %0000000001110111 -002B40r 1 00 78 .dbyt %0000000001111000 -002B42r 1 00 79 .dbyt %0000000001111001 -002B44r 1 00 7A .dbyt %0000000001111010 -002B46r 1 00 7B .dbyt %0000000001111011 -002B48r 1 00 7C .dbyt %0000000001111100 -002B4Ar 1 00 7D .dbyt %0000000001111101 -002B4Cr 1 00 7E .dbyt %0000000001111110 -002B4Er 1 00 7F .dbyt %0000000001111111 -002B50r 1 00 80 .dbyt %0000000010000000 -002B52r 1 00 81 .dbyt %0000000010000001 -002B54r 1 00 82 .dbyt %0000000010000010 -002B56r 1 00 83 .dbyt %0000000010000011 -002B58r 1 00 84 .dbyt %0000000010000100 -002B5Ar 1 00 85 .dbyt %0000000010000101 -002B5Cr 1 00 86 .dbyt %0000000010000110 -002B5Er 1 00 F0 .dbyt %0000000011110000 -002B60r 1 00 F1 .dbyt %0000000011110001 -002B62r 1 00 F2 .dbyt %0000000011110010 -002B64r 1 00 F3 .dbyt %0000000011110011 -002B66r 1 00 F4 .dbyt %0000000011110100 -002B68r 1 00 F5 .dbyt %0000000011110101 -002B6Ar 1 00 F6 .dbyt %0000000011110110 -002B6Cr 1 00 F7 .dbyt %0000000011110111 -002B6Er 1 00 F8 .dbyt %0000000011111000 -002B70r 1 00 F9 .dbyt %0000000011111001 -002B72r 1 00 FA .dbyt %0000000011111010 -002B74r 1 00 FB .dbyt %0000000011111011 -002B76r 1 00 FC .dbyt %0000000011111100 -002B78r 1 00 FD .dbyt %0000000011111101 -002B7Ar 1 00 FE .dbyt %0000000011111110 -002B7Cr 1 00 FF .dbyt %0000000011111111 -002B7Er 1 01 00 .dbyt %0000000100000000 -002B80r 1 01 01 .dbyt %0000000100000001 -002B82r 1 01 02 .dbyt %0000000100000010 -002B84r 1 01 03 .dbyt %0000000100000011 -002B86r 1 0F D2 .dbyt %0000111111010010 -002B88r 1 0F D3 .dbyt %0000111111010011 -002B8Ar 1 0F D4 .dbyt %0000111111010100 -002B8Cr 1 0F D5 .dbyt %0000111111010101 -002B8Er 1 0F D6 .dbyt %0000111111010110 -002B90r 1 0F D7 .dbyt %0000111111010111 -002B92r 1 0F D8 .dbyt %0000111111011000 -002B94r 1 0F D9 .dbyt %0000111111011001 -002B96r 1 0F DA .dbyt %0000111111011010 -002B98r 1 0F DB .dbyt %0000111111011011 -002B9Ar 1 0F DC .dbyt %0000111111011100 -002B9Cr 1 0F DD .dbyt %0000111111011101 -002B9Er 1 0F DE .dbyt %0000111111011110 -002BA0r 1 0F DF .dbyt %0000111111011111 -002BA2r 1 0F E0 .dbyt %0000111111100000 -002BA4r 1 0F E1 .dbyt %0000111111100001 -002BA6r 1 0F E2 .dbyt %0000111111100010 -002BA8r 1 0F E3 .dbyt %0000111111100011 -002BAAr 1 0F E4 .dbyt %0000111111100100 -002BACr 1 0F E5 .dbyt %0000111111100101 -002BAEr 1 0F E6 .dbyt %0000111111100110 -002BB0r 1 0F E7 .dbyt %0000111111100111 -002BB2r 1 0F E8 .dbyt %0000111111101000 -002BB4r 1 0F E9 .dbyt %0000111111101001 -002BB6r 1 0F EA .dbyt %0000111111101010 -002BB8r 1 0F EB .dbyt %0000111111101011 -002BBAr 1 0F EC .dbyt %0000111111101100 -002BBCr 1 0F ED .dbyt %0000111111101101 -002BBEr 1 0F EE .dbyt %0000111111101110 -002BC0r 1 0F EF .dbyt %0000111111101111 -002BC2r 1 0F F0 .dbyt %0000111111110000 -002BC4r 1 0F F1 .dbyt %0000111111110001 -002BC6r 1 0F F2 .dbyt %0000111111110010 -002BC8r 1 0F F3 .dbyt %0000111111110011 -002BCAr 1 0F F4 .dbyt %0000111111110100 -002BCCr 1 0F F5 .dbyt %0000111111110101 -002BCEr 1 0F F6 .dbyt %0000111111110110 -002BD0r 1 0F F7 .dbyt %0000111111110111 -002BD2r 1 0F F8 .dbyt %0000111111111000 -002BD4r 1 0F F9 .dbyt %0000111111111001 -002BD6r 1 0F FA .dbyt %0000111111111010 -002BD8r 1 0F FB .dbyt %0000111111111011 -002BDAr 1 0F FC .dbyt %0000111111111100 -002BDCr 1 0F FD .dbyt %0000111111111101 -002BDEr 1 0F FE .dbyt %0000111111111110 -002BE0r 1 0F FF .dbyt %0000111111111111 -002BE2r 1 10 00 .dbyt %0001000000000000 -002BE4r 1 10 01 .dbyt %0001000000000001 -002BE6r 1 10 02 .dbyt %0001000000000010 -002BE8r 1 10 03 .dbyt %0001000000000011 -002BEAr 1 10 04 .dbyt %0001000000000100 -002BECr 1 10 05 .dbyt %0001000000000101 -002BEEr 1 10 06 .dbyt %0001000000000110 -002BF0r 1 10 07 .dbyt %0001000000000111 -002BF2r 1 10 08 .dbyt %0001000000001000 -002BF4r 1 7F F0 .dbyt %0111111111110000 -002BF6r 1 7F F1 .dbyt %0111111111110001 -002BF8r 1 7F F2 .dbyt %0111111111110010 -002BFAr 1 7F F3 .dbyt %0111111111110011 -002BFCr 1 7F F4 .dbyt %0111111111110100 -002BFEr 1 7F F5 .dbyt %0111111111110101 -002C00r 1 7F F6 .dbyt %0111111111110110 -002C02r 1 7F F7 .dbyt %0111111111110111 -002C04r 1 7F F8 .dbyt %0111111111111000 -002C06r 1 7F F9 .dbyt %0111111111111001 -002C08r 1 7F FA .dbyt %0111111111111010 -002C0Ar 1 7F FB .dbyt %0111111111111011 -002C0Cr 1 7F FC .dbyt %0111111111111100 -002C0Er 1 7F FD .dbyt %0111111111111101 -002C10r 1 7F FE .dbyt %0111111111111110 -002C12r 1 7F FF .dbyt %0111111111111111 -002C14r 1 80 00 .dbyt %1000000000000000 -002C16r 1 80 01 .dbyt %1000000000000001 -002C18r 1 80 02 .dbyt %1000000000000010 -002C1Ar 1 80 03 .dbyt %1000000000000011 -002C1Cr 1 80 04 .dbyt %1000000000000100 -002C1Er 1 80 05 .dbyt %1000000000000101 -002C20r 1 80 06 .dbyt %1000000000000110 -002C22r 1 80 07 .dbyt %1000000000000111 -002C24r 1 80 08 .dbyt %1000000000001000 -002C26r 1 80 09 .dbyt %1000000000001001 -002C28r 1 80 0A .dbyt %1000000000001010 -002C2Ar 1 80 0B .dbyt %1000000000001011 -002C2Cr 1 9F E1 .dbyt %1001111111100001 -002C2Er 1 9F E2 .dbyt %1001111111100010 -002C30r 1 9F E3 .dbyt %1001111111100011 -002C32r 1 9F E4 .dbyt %1001111111100100 -002C34r 1 9F E5 .dbyt %1001111111100101 -002C36r 1 9F E6 .dbyt %1001111111100110 -002C38r 1 9F E7 .dbyt %1001111111100111 -002C3Ar 1 9F E8 .dbyt %1001111111101000 -002C3Cr 1 9F E9 .dbyt %1001111111101001 -002C3Er 1 9F EA .dbyt %1001111111101010 -002C40r 1 9F EB .dbyt %1001111111101011 -002C42r 1 9F EC .dbyt %1001111111101100 -002C44r 1 9F ED .dbyt %1001111111101101 -002C46r 1 9F EE .dbyt %1001111111101110 -002C48r 1 9F EF .dbyt %1001111111101111 -002C4Ar 1 9F F0 .dbyt %1001111111110000 -002C4Cr 1 9F F1 .dbyt %1001111111110001 -002C4Er 1 9F F2 .dbyt %1001111111110010 -002C50r 1 9F F3 .dbyt %1001111111110011 -002C52r 1 9F F4 .dbyt %1001111111110100 -002C54r 1 9F F5 .dbyt %1001111111110101 -002C56r 1 9F F6 .dbyt %1001111111110110 -002C58r 1 9F F7 .dbyt %1001111111110111 -002C5Ar 1 9F F8 .dbyt %1001111111111000 -002C5Cr 1 9F F9 .dbyt %1001111111111001 -002C5Er 1 9F FA .dbyt %1001111111111010 -002C60r 1 9F FB .dbyt %1001111111111011 -002C62r 1 9F FC .dbyt %1001111111111100 -002C64r 1 9F FD .dbyt %1001111111111101 -002C66r 1 9F FE .dbyt %1001111111111110 -002C68r 1 9F FF .dbyt %1001111111111111 -002C6Ar 1 A0 00 .dbyt %1010000000000000 -002C6Cr 1 A0 01 .dbyt %1010000000000001 -002C6Er 1 A0 02 .dbyt %1010000000000010 -002C70r 1 A0 03 .dbyt %1010000000000011 -002C72r 1 A0 04 .dbyt %1010000000000100 -002C74r 1 A0 05 .dbyt %1010000000000101 -002C76r 1 A0 06 .dbyt %1010000000000110 -002C78r 1 A0 07 .dbyt %1010000000000111 -002C7Ar 1 A0 08 .dbyt %1010000000001000 -002C7Cr 1 A0 09 .dbyt %1010000000001001 -002C7Er 1 A0 0A .dbyt %1010000000001010 -002C80r 1 A0 0B .dbyt %1010000000001011 -002C82r 1 A0 0C .dbyt %1010000000001100 -002C84r 1 A0 0D .dbyt %1010000000001101 -002C86r 1 A0 0E .dbyt %1010000000001110 -002C88r 1 A0 0F .dbyt %1010000000001111 -002C8Ar 1 AF E1 .dbyt %1010111111100001 -002C8Cr 1 AF E2 .dbyt %1010111111100010 -002C8Er 1 AF E3 .dbyt %1010111111100011 -002C90r 1 AF E4 .dbyt %1010111111100100 -002C92r 1 AF E5 .dbyt %1010111111100101 -002C94r 1 AF E6 .dbyt %1010111111100110 -002C96r 1 AF E7 .dbyt %1010111111100111 -002C98r 1 AF E8 .dbyt %1010111111101000 -002C9Ar 1 AF E9 .dbyt %1010111111101001 -002C9Cr 1 AF EA .dbyt %1010111111101010 -002C9Er 1 AF EB .dbyt %1010111111101011 -002CA0r 1 AF EC .dbyt %1010111111101100 -002CA2r 1 AF ED .dbyt %1010111111101101 -002CA4r 1 AF EE .dbyt %1010111111101110 -002CA6r 1 AF EF .dbyt %1010111111101111 -002CA8r 1 AF F0 .dbyt %1010111111110000 -002CAAr 1 AF F1 .dbyt %1010111111110001 -002CACr 1 AF F2 .dbyt %1010111111110010 -002CAEr 1 AF F3 .dbyt %1010111111110011 -002CB0r 1 AF F4 .dbyt %1010111111110100 -002CB2r 1 AF F5 .dbyt %1010111111110101 -002CB4r 1 AF F6 .dbyt %1010111111110110 -002CB6r 1 AF F7 .dbyt %1010111111110111 -002CB8r 1 AF F8 .dbyt %1010111111111000 -002CBAr 1 AF F9 .dbyt %1010111111111001 -002CBCr 1 AF FA .dbyt %1010111111111010 -002CBEr 1 AF FB .dbyt %1010111111111011 -002CC0r 1 AF FC .dbyt %1010111111111100 -002CC2r 1 AF FD .dbyt %1010111111111101 -002CC4r 1 AF FE .dbyt %1010111111111110 -002CC6r 1 AF FF .dbyt %1010111111111111 -002CC8r 1 B0 00 .dbyt %1011000000000000 -002CCAr 1 B0 01 .dbyt %1011000000000001 -002CCCr 1 B0 02 .dbyt %1011000000000010 -002CCEr 1 B0 03 .dbyt %1011000000000011 -002CD0r 1 B0 04 .dbyt %1011000000000100 -002CD2r 1 B0 05 .dbyt %1011000000000101 -002CD4r 1 B0 06 .dbyt %1011000000000110 -002CD6r 1 B0 07 .dbyt %1011000000000111 -002CD8r 1 B0 08 .dbyt %1011000000001000 -002CDAr 1 B0 09 .dbyt %1011000000001001 -002CDCr 1 B0 0A .dbyt %1011000000001010 -002CDEr 1 B0 0B .dbyt %1011000000001011 -002CE0r 1 B0 0C .dbyt %1011000000001100 -002CE2r 1 B0 0D .dbyt %1011000000001101 -002CE4r 1 B0 0E .dbyt %1011000000001110 -002CE6r 1 B0 0F .dbyt %1011000000001111 -002CE8r 1 BF E1 .dbyt %1011111111100001 -002CEAr 1 BF E2 .dbyt %1011111111100010 -002CECr 1 BF E3 .dbyt %1011111111100011 -002CEEr 1 BF E4 .dbyt %1011111111100100 -002CF0r 1 BF E5 .dbyt %1011111111100101 -002CF2r 1 BF E6 .dbyt %1011111111100110 -002CF4r 1 BF E7 .dbyt %1011111111100111 -002CF6r 1 BF E8 .dbyt %1011111111101000 -002CF8r 1 BF E9 .dbyt %1011111111101001 -002CFAr 1 BF EA .dbyt %1011111111101010 -002CFCr 1 BF EB .dbyt %1011111111101011 -002CFEr 1 BF EC .dbyt %1011111111101100 -002D00r 1 BF ED .dbyt %1011111111101101 -002D02r 1 BF EE .dbyt %1011111111101110 -002D04r 1 BF EF .dbyt %1011111111101111 -002D06r 1 BF F0 .dbyt %1011111111110000 -002D08r 1 BF F1 .dbyt %1011111111110001 -002D0Ar 1 BF F2 .dbyt %1011111111110010 -002D0Cr 1 BF F3 .dbyt %1011111111110011 -002D0Er 1 BF F4 .dbyt %1011111111110100 -002D10r 1 BF F5 .dbyt %1011111111110101 -002D12r 1 BF F6 .dbyt %1011111111110110 -002D14r 1 BF F7 .dbyt %1011111111110111 -002D16r 1 BF F8 .dbyt %1011111111111000 -002D18r 1 BF F9 .dbyt %1011111111111001 -002D1Ar 1 BF FA .dbyt %1011111111111010 -002D1Cr 1 BF FB .dbyt %1011111111111011 -002D1Er 1 BF FC .dbyt %1011111111111100 -002D20r 1 BF FD .dbyt %1011111111111101 -002D22r 1 BF FE .dbyt %1011111111111110 -002D24r 1 BF FF .dbyt %1011111111111111 -002D26r 1 C0 00 .dbyt %1100000000000000 -002D28r 1 C0 01 .dbyt %1100000000000001 -002D2Ar 1 C0 02 .dbyt %1100000000000010 -002D2Cr 1 C0 03 .dbyt %1100000000000011 -002D2Er 1 C0 04 .dbyt %1100000000000100 -002D30r 1 C0 05 .dbyt %1100000000000101 -002D32r 1 C0 06 .dbyt %1100000000000110 -002D34r 1 C0 07 .dbyt %1100000000000111 -002D36r 1 C0 08 .dbyt %1100000000001000 -002D38r 1 C0 09 .dbyt %1100000000001001 -002D3Ar 1 C0 0A .dbyt %1100000000001010 -002D3Cr 1 C0 0B .dbyt %1100000000001011 -002D3Er 1 C0 0C .dbyt %1100000000001100 -002D40r 1 C0 0D .dbyt %1100000000001101 -002D42r 1 C0 0E .dbyt %1100000000001110 -002D44r 1 C0 0F .dbyt %1100000000001111 -002D46r 1 CF E1 .dbyt %1100111111100001 -002D48r 1 CF E2 .dbyt %1100111111100010 -002D4Ar 1 CF E3 .dbyt %1100111111100011 -002D4Cr 1 CF E4 .dbyt %1100111111100100 -002D4Er 1 CF E5 .dbyt %1100111111100101 -002D50r 1 CF E6 .dbyt %1100111111100110 -002D52r 1 CF E7 .dbyt %1100111111100111 -002D54r 1 CF E8 .dbyt %1100111111101000 -002D56r 1 CF E9 .dbyt %1100111111101001 -002D58r 1 CF EA .dbyt %1100111111101010 -002D5Ar 1 CF EB .dbyt %1100111111101011 -002D5Cr 1 CF EC .dbyt %1100111111101100 -002D5Er 1 CF ED .dbyt %1100111111101101 -002D60r 1 CF EE .dbyt %1100111111101110 -002D62r 1 CF EF .dbyt %1100111111101111 -002D64r 1 CF F0 .dbyt %1100111111110000 -002D66r 1 CF F1 .dbyt %1100111111110001 -002D68r 1 CF F2 .dbyt %1100111111110010 -002D6Ar 1 CF F3 .dbyt %1100111111110011 -002D6Cr 1 CF F4 .dbyt %1100111111110100 -002D6Er 1 CF F5 .dbyt %1100111111110101 -002D70r 1 CF F6 .dbyt %1100111111110110 -002D72r 1 CF F7 .dbyt %1100111111110111 -002D74r 1 CF F8 .dbyt %1100111111111000 -002D76r 1 CF F9 .dbyt %1100111111111001 -002D78r 1 CF FA .dbyt %1100111111111010 -002D7Ar 1 CF FB .dbyt %1100111111111011 -002D7Cr 1 CF FC .dbyt %1100111111111100 -002D7Er 1 CF FD .dbyt %1100111111111101 -002D80r 1 CF FE .dbyt %1100111111111110 -002D82r 1 CF FF .dbyt %1100111111111111 -002D84r 1 D0 00 .dbyt %1101000000000000 -002D86r 1 D0 01 .dbyt %1101000000000001 -002D88r 1 D0 02 .dbyt %1101000000000010 -002D8Ar 1 D0 03 .dbyt %1101000000000011 -002D8Cr 1 D0 04 .dbyt %1101000000000100 -002D8Er 1 D0 05 .dbyt %1101000000000101 -002D90r 1 D0 06 .dbyt %1101000000000110 -002D92r 1 D0 07 .dbyt %1101000000000111 -002D94r 1 D0 08 .dbyt %1101000000001000 -002D96r 1 D0 09 .dbyt %1101000000001001 -002D98r 1 D0 0A .dbyt %1101000000001010 -002D9Ar 1 D0 0B .dbyt %1101000000001011 -002D9Cr 1 D0 0C .dbyt %1101000000001100 -002D9Er 1 D0 0D .dbyt %1101000000001101 -002DA0r 1 D0 0E .dbyt %1101000000001110 -002DA2r 1 D0 0F .dbyt %1101000000001111 -002DA4r 1 DF E1 .dbyt %1101111111100001 -002DA6r 1 DF E2 .dbyt %1101111111100010 -002DA8r 1 DF E3 .dbyt %1101111111100011 -002DAAr 1 DF E4 .dbyt %1101111111100100 -002DACr 1 DF E5 .dbyt %1101111111100101 -002DAEr 1 DF E6 .dbyt %1101111111100110 -002DB0r 1 DF E7 .dbyt %1101111111100111 -002DB2r 1 DF E8 .dbyt %1101111111101000 -002DB4r 1 DF E9 .dbyt %1101111111101001 -002DB6r 1 DF EA .dbyt %1101111111101010 -002DB8r 1 DF EB .dbyt %1101111111101011 -002DBAr 1 DF EC .dbyt %1101111111101100 -002DBCr 1 DF ED .dbyt %1101111111101101 -002DBEr 1 DF EE .dbyt %1101111111101110 -002DC0r 1 DF EF .dbyt %1101111111101111 -002DC2r 1 DF F0 .dbyt %1101111111110000 -002DC4r 1 DF F1 .dbyt %1101111111110001 -002DC6r 1 DF F2 .dbyt %1101111111110010 -002DC8r 1 DF F3 .dbyt %1101111111110011 -002DCAr 1 DF F4 .dbyt %1101111111110100 -002DCCr 1 DF F5 .dbyt %1101111111110101 -002DCEr 1 DF F6 .dbyt %1101111111110110 -002DD0r 1 DF F7 .dbyt %1101111111110111 -002DD2r 1 DF F8 .dbyt %1101111111111000 -002DD4r 1 DF F9 .dbyt %1101111111111001 -002DD6r 1 DF FA .dbyt %1101111111111010 -002DD8r 1 DF FB .dbyt %1101111111111011 -002DDAr 1 DF FC .dbyt %1101111111111100 -002DDCr 1 DF FD .dbyt %1101111111111101 -002DDEr 1 DF FE .dbyt %1101111111111110 -002DE0r 1 DF FF .dbyt %1101111111111111 -002DE2r 1 E0 00 .dbyt %1110000000000000 -002DE4r 1 E0 01 .dbyt %1110000000000001 -002DE6r 1 E0 02 .dbyt %1110000000000010 -002DE8r 1 E0 03 .dbyt %1110000000000011 -002DEAr 1 E0 04 .dbyt %1110000000000100 -002DECr 1 E0 05 .dbyt %1110000000000101 -002DEEr 1 E0 06 .dbyt %1110000000000110 -002DF0r 1 E0 07 .dbyt %1110000000000111 -002DF2r 1 E0 08 .dbyt %1110000000001000 -002DF4r 1 E0 09 .dbyt %1110000000001001 -002DF6r 1 E0 0A .dbyt %1110000000001010 -002DF8r 1 E0 0B .dbyt %1110000000001011 -002DFAr 1 E0 0C .dbyt %1110000000001100 -002DFCr 1 E0 0D .dbyt %1110000000001101 -002DFEr 1 E0 0E .dbyt %1110000000001110 -002E00r 1 E0 0F .dbyt %1110000000001111 -002E02r 1 EF E1 .dbyt %1110111111100001 -002E04r 1 EF E2 .dbyt %1110111111100010 -002E06r 1 EF E3 .dbyt %1110111111100011 -002E08r 1 EF E4 .dbyt %1110111111100100 -002E0Ar 1 EF E5 .dbyt %1110111111100101 -002E0Cr 1 EF E6 .dbyt %1110111111100110 -002E0Er 1 EF E7 .dbyt %1110111111100111 -002E10r 1 EF E8 .dbyt %1110111111101000 -002E12r 1 EF E9 .dbyt %1110111111101001 -002E14r 1 EF EA .dbyt %1110111111101010 -002E16r 1 EF EB .dbyt %1110111111101011 -002E18r 1 EF EC .dbyt %1110111111101100 -002E1Ar 1 EF ED .dbyt %1110111111101101 -002E1Cr 1 EF EE .dbyt %1110111111101110 -002E1Er 1 EF EF .dbyt %1110111111101111 -002E20r 1 EF F0 .dbyt %1110111111110000 -002E22r 1 EF F1 .dbyt %1110111111110001 -002E24r 1 EF F2 .dbyt %1110111111110010 -002E26r 1 EF F3 .dbyt %1110111111110011 -002E28r 1 EF F4 .dbyt %1110111111110100 -002E2Ar 1 EF F5 .dbyt %1110111111110101 -002E2Cr 1 EF F6 .dbyt %1110111111110110 -002E2Er 1 EF F7 .dbyt %1110111111110111 -002E30r 1 EF F8 .dbyt %1110111111111000 -002E32r 1 EF F9 .dbyt %1110111111111001 -002E34r 1 EF FA .dbyt %1110111111111010 -002E36r 1 EF FB .dbyt %1110111111111011 -002E38r 1 EF FC .dbyt %1110111111111100 -002E3Ar 1 EF FD .dbyt %1110111111111101 -002E3Cr 1 EF FE .dbyt %1110111111111110 -002E3Er 1 EF FF .dbyt %1110111111111111 -002E40r 1 F0 00 .dbyt %1111000000000000 -002E42r 1 F0 01 .dbyt %1111000000000001 -002E44r 1 F0 02 .dbyt %1111000000000010 -002E46r 1 F0 03 .dbyt %1111000000000011 -002E48r 1 F0 04 .dbyt %1111000000000100 -002E4Ar 1 F0 05 .dbyt %1111000000000101 -002E4Cr 1 F0 06 .dbyt %1111000000000110 -002E4Er 1 F0 07 .dbyt %1111000000000111 -002E50r 1 F0 08 .dbyt %1111000000001000 -002E52r 1 F0 09 .dbyt %1111000000001001 -002E54r 1 F0 0A .dbyt %1111000000001010 -002E56r 1 F0 0B .dbyt %1111000000001011 -002E58r 1 F0 0C .dbyt %1111000000001100 -002E5Ar 1 F0 0D .dbyt %1111000000001101 -002E5Cr 1 F0 0E .dbyt %1111000000001110 -002E5Er 1 F0 0F .dbyt %1111000000001111 -002E60r 1 FF E1 .dbyt %1111111111100001 -002E62r 1 FF E2 .dbyt %1111111111100010 -002E64r 1 FF E3 .dbyt %1111111111100011 -002E66r 1 FF E4 .dbyt %1111111111100100 -002E68r 1 FF E5 .dbyt %1111111111100101 -002E6Ar 1 FF E6 .dbyt %1111111111100110 -002E6Cr 1 FF E7 .dbyt %1111111111100111 -002E6Er 1 FF E8 .dbyt %1111111111101000 -002E70r 1 FF E9 .dbyt %1111111111101001 -002E72r 1 FF EA .dbyt %1111111111101010 -002E74r 1 FF EB .dbyt %1111111111101011 -002E76r 1 FF EC .dbyt %1111111111101100 -002E78r 1 FF ED .dbyt %1111111111101101 -002E7Ar 1 FF EE .dbyt %1111111111101110 -002E7Cr 1 FF EF .dbyt %1111111111101111 -002E7Er 1 FF F0 .dbyt %1111111111110000 -002E80r 1 FF F1 .dbyt %1111111111110001 -002E82r 1 FF F2 .dbyt %1111111111110010 -002E84r 1 FF F3 .dbyt %1111111111110011 -002E86r 1 FF F4 .dbyt %1111111111110100 -002E88r 1 FF F5 .dbyt %1111111111110101 -002E8Ar 1 FF F6 .dbyt %1111111111110110 -002E8Cr 1 FF F7 .dbyt %1111111111110111 -002E8Er 1 FF F8 .dbyt %1111111111111000 -002E90r 1 FF F9 .dbyt %1111111111111001 -002E92r 1 FF FA .dbyt %1111111111111010 -002E94r 1 FF FB .dbyt %1111111111111011 -002E96r 1 FF FC .dbyt %1111111111111100 -002E98r 1 FF FD .dbyt %1111111111111101 -002E9Ar 1 FF FE .dbyt %1111111111111110 -002E9Cr 1 FF FF .dbyt %1111111111111111 +002B08r 1 ; binary values, full length +002B08r 1 00 00 .dbyt %0000000000000000 +002B0Ar 1 00 01 .dbyt %0000000000000001 +002B0Cr 1 00 02 .dbyt %0000000000000010 +002B0Er 1 00 03 .dbyt %0000000000000011 +002B10r 1 00 04 .dbyt %0000000000000100 +002B12r 1 00 05 .dbyt %0000000000000101 +002B14r 1 00 06 .dbyt %0000000000000110 +002B16r 1 00 07 .dbyt %0000000000000111 +002B18r 1 00 08 .dbyt %0000000000001000 +002B1Ar 1 00 09 .dbyt %0000000000001001 +002B1Cr 1 00 0A .dbyt %0000000000001010 +002B1Er 1 00 0B .dbyt %0000000000001011 +002B20r 1 00 0C .dbyt %0000000000001100 +002B22r 1 00 0D .dbyt %0000000000001101 +002B24r 1 00 0E .dbyt %0000000000001110 +002B26r 1 00 0F .dbyt %0000000000001111 +002B28r 1 00 10 .dbyt %0000000000010000 +002B2Ar 1 00 11 .dbyt %0000000000010001 +002B2Cr 1 00 12 .dbyt %0000000000010010 +002B2Er 1 00 13 .dbyt %0000000000010011 +002B30r 1 00 70 .dbyt %0000000001110000 +002B32r 1 00 71 .dbyt %0000000001110001 +002B34r 1 00 72 .dbyt %0000000001110010 +002B36r 1 00 73 .dbyt %0000000001110011 +002B38r 1 00 74 .dbyt %0000000001110100 +002B3Ar 1 00 75 .dbyt %0000000001110101 +002B3Cr 1 00 76 .dbyt %0000000001110110 +002B3Er 1 00 77 .dbyt %0000000001110111 +002B40r 1 00 78 .dbyt %0000000001111000 +002B42r 1 00 79 .dbyt %0000000001111001 +002B44r 1 00 7A .dbyt %0000000001111010 +002B46r 1 00 7B .dbyt %0000000001111011 +002B48r 1 00 7C .dbyt %0000000001111100 +002B4Ar 1 00 7D .dbyt %0000000001111101 +002B4Cr 1 00 7E .dbyt %0000000001111110 +002B4Er 1 00 7F .dbyt %0000000001111111 +002B50r 1 00 80 .dbyt %0000000010000000 +002B52r 1 00 81 .dbyt %0000000010000001 +002B54r 1 00 82 .dbyt %0000000010000010 +002B56r 1 00 83 .dbyt %0000000010000011 +002B58r 1 00 84 .dbyt %0000000010000100 +002B5Ar 1 00 85 .dbyt %0000000010000101 +002B5Cr 1 00 86 .dbyt %0000000010000110 +002B5Er 1 00 F0 .dbyt %0000000011110000 +002B60r 1 00 F1 .dbyt %0000000011110001 +002B62r 1 00 F2 .dbyt %0000000011110010 +002B64r 1 00 F3 .dbyt %0000000011110011 +002B66r 1 00 F4 .dbyt %0000000011110100 +002B68r 1 00 F5 .dbyt %0000000011110101 +002B6Ar 1 00 F6 .dbyt %0000000011110110 +002B6Cr 1 00 F7 .dbyt %0000000011110111 +002B6Er 1 00 F8 .dbyt %0000000011111000 +002B70r 1 00 F9 .dbyt %0000000011111001 +002B72r 1 00 FA .dbyt %0000000011111010 +002B74r 1 00 FB .dbyt %0000000011111011 +002B76r 1 00 FC .dbyt %0000000011111100 +002B78r 1 00 FD .dbyt %0000000011111101 +002B7Ar 1 00 FE .dbyt %0000000011111110 +002B7Cr 1 00 FF .dbyt %0000000011111111 +002B7Er 1 01 00 .dbyt %0000000100000000 +002B80r 1 01 01 .dbyt %0000000100000001 +002B82r 1 01 02 .dbyt %0000000100000010 +002B84r 1 01 03 .dbyt %0000000100000011 +002B86r 1 0F D2 .dbyt %0000111111010010 +002B88r 1 0F D3 .dbyt %0000111111010011 +002B8Ar 1 0F D4 .dbyt %0000111111010100 +002B8Cr 1 0F D5 .dbyt %0000111111010101 +002B8Er 1 0F D6 .dbyt %0000111111010110 +002B90r 1 0F D7 .dbyt %0000111111010111 +002B92r 1 0F D8 .dbyt %0000111111011000 +002B94r 1 0F D9 .dbyt %0000111111011001 +002B96r 1 0F DA .dbyt %0000111111011010 +002B98r 1 0F DB .dbyt %0000111111011011 +002B9Ar 1 0F DC .dbyt %0000111111011100 +002B9Cr 1 0F DD .dbyt %0000111111011101 +002B9Er 1 0F DE .dbyt %0000111111011110 +002BA0r 1 0F DF .dbyt %0000111111011111 +002BA2r 1 0F E0 .dbyt %0000111111100000 +002BA4r 1 0F E1 .dbyt %0000111111100001 +002BA6r 1 0F E2 .dbyt %0000111111100010 +002BA8r 1 0F E3 .dbyt %0000111111100011 +002BAAr 1 0F E4 .dbyt %0000111111100100 +002BACr 1 0F E5 .dbyt %0000111111100101 +002BAEr 1 0F E6 .dbyt %0000111111100110 +002BB0r 1 0F E7 .dbyt %0000111111100111 +002BB2r 1 0F E8 .dbyt %0000111111101000 +002BB4r 1 0F E9 .dbyt %0000111111101001 +002BB6r 1 0F EA .dbyt %0000111111101010 +002BB8r 1 0F EB .dbyt %0000111111101011 +002BBAr 1 0F EC .dbyt %0000111111101100 +002BBCr 1 0F ED .dbyt %0000111111101101 +002BBEr 1 0F EE .dbyt %0000111111101110 +002BC0r 1 0F EF .dbyt %0000111111101111 +002BC2r 1 0F F0 .dbyt %0000111111110000 +002BC4r 1 0F F1 .dbyt %0000111111110001 +002BC6r 1 0F F2 .dbyt %0000111111110010 +002BC8r 1 0F F3 .dbyt %0000111111110011 +002BCAr 1 0F F4 .dbyt %0000111111110100 +002BCCr 1 0F F5 .dbyt %0000111111110101 +002BCEr 1 0F F6 .dbyt %0000111111110110 +002BD0r 1 0F F7 .dbyt %0000111111110111 +002BD2r 1 0F F8 .dbyt %0000111111111000 +002BD4r 1 0F F9 .dbyt %0000111111111001 +002BD6r 1 0F FA .dbyt %0000111111111010 +002BD8r 1 0F FB .dbyt %0000111111111011 +002BDAr 1 0F FC .dbyt %0000111111111100 +002BDCr 1 0F FD .dbyt %0000111111111101 +002BDEr 1 0F FE .dbyt %0000111111111110 +002BE0r 1 0F FF .dbyt %0000111111111111 +002BE2r 1 10 00 .dbyt %0001000000000000 +002BE4r 1 10 01 .dbyt %0001000000000001 +002BE6r 1 10 02 .dbyt %0001000000000010 +002BE8r 1 10 03 .dbyt %0001000000000011 +002BEAr 1 10 04 .dbyt %0001000000000100 +002BECr 1 10 05 .dbyt %0001000000000101 +002BEEr 1 10 06 .dbyt %0001000000000110 +002BF0r 1 10 07 .dbyt %0001000000000111 +002BF2r 1 10 08 .dbyt %0001000000001000 +002BF4r 1 7F F0 .dbyt %0111111111110000 +002BF6r 1 7F F1 .dbyt %0111111111110001 +002BF8r 1 7F F2 .dbyt %0111111111110010 +002BFAr 1 7F F3 .dbyt %0111111111110011 +002BFCr 1 7F F4 .dbyt %0111111111110100 +002BFEr 1 7F F5 .dbyt %0111111111110101 +002C00r 1 7F F6 .dbyt %0111111111110110 +002C02r 1 7F F7 .dbyt %0111111111110111 +002C04r 1 7F F8 .dbyt %0111111111111000 +002C06r 1 7F F9 .dbyt %0111111111111001 +002C08r 1 7F FA .dbyt %0111111111111010 +002C0Ar 1 7F FB .dbyt %0111111111111011 +002C0Cr 1 7F FC .dbyt %0111111111111100 +002C0Er 1 7F FD .dbyt %0111111111111101 +002C10r 1 7F FE .dbyt %0111111111111110 +002C12r 1 7F FF .dbyt %0111111111111111 +002C14r 1 80 00 .dbyt %1000000000000000 +002C16r 1 80 01 .dbyt %1000000000000001 +002C18r 1 80 02 .dbyt %1000000000000010 +002C1Ar 1 80 03 .dbyt %1000000000000011 +002C1Cr 1 80 04 .dbyt %1000000000000100 +002C1Er 1 80 05 .dbyt %1000000000000101 +002C20r 1 80 06 .dbyt %1000000000000110 +002C22r 1 80 07 .dbyt %1000000000000111 +002C24r 1 80 08 .dbyt %1000000000001000 +002C26r 1 80 09 .dbyt %1000000000001001 +002C28r 1 80 0A .dbyt %1000000000001010 +002C2Ar 1 80 0B .dbyt %1000000000001011 +002C2Cr 1 9F E1 .dbyt %1001111111100001 +002C2Er 1 9F E2 .dbyt %1001111111100010 +002C30r 1 9F E3 .dbyt %1001111111100011 +002C32r 1 9F E4 .dbyt %1001111111100100 +002C34r 1 9F E5 .dbyt %1001111111100101 +002C36r 1 9F E6 .dbyt %1001111111100110 +002C38r 1 9F E7 .dbyt %1001111111100111 +002C3Ar 1 9F E8 .dbyt %1001111111101000 +002C3Cr 1 9F E9 .dbyt %1001111111101001 +002C3Er 1 9F EA .dbyt %1001111111101010 +002C40r 1 9F EB .dbyt %1001111111101011 +002C42r 1 9F EC .dbyt %1001111111101100 +002C44r 1 9F ED .dbyt %1001111111101101 +002C46r 1 9F EE .dbyt %1001111111101110 +002C48r 1 9F EF .dbyt %1001111111101111 +002C4Ar 1 9F F0 .dbyt %1001111111110000 +002C4Cr 1 9F F1 .dbyt %1001111111110001 +002C4Er 1 9F F2 .dbyt %1001111111110010 +002C50r 1 9F F3 .dbyt %1001111111110011 +002C52r 1 9F F4 .dbyt %1001111111110100 +002C54r 1 9F F5 .dbyt %1001111111110101 +002C56r 1 9F F6 .dbyt %1001111111110110 +002C58r 1 9F F7 .dbyt %1001111111110111 +002C5Ar 1 9F F8 .dbyt %1001111111111000 +002C5Cr 1 9F F9 .dbyt %1001111111111001 +002C5Er 1 9F FA .dbyt %1001111111111010 +002C60r 1 9F FB .dbyt %1001111111111011 +002C62r 1 9F FC .dbyt %1001111111111100 +002C64r 1 9F FD .dbyt %1001111111111101 +002C66r 1 9F FE .dbyt %1001111111111110 +002C68r 1 9F FF .dbyt %1001111111111111 +002C6Ar 1 A0 00 .dbyt %1010000000000000 +002C6Cr 1 A0 01 .dbyt %1010000000000001 +002C6Er 1 A0 02 .dbyt %1010000000000010 +002C70r 1 A0 03 .dbyt %1010000000000011 +002C72r 1 A0 04 .dbyt %1010000000000100 +002C74r 1 A0 05 .dbyt %1010000000000101 +002C76r 1 A0 06 .dbyt %1010000000000110 +002C78r 1 A0 07 .dbyt %1010000000000111 +002C7Ar 1 A0 08 .dbyt %1010000000001000 +002C7Cr 1 A0 09 .dbyt %1010000000001001 +002C7Er 1 A0 0A .dbyt %1010000000001010 +002C80r 1 A0 0B .dbyt %1010000000001011 +002C82r 1 A0 0C .dbyt %1010000000001100 +002C84r 1 A0 0D .dbyt %1010000000001101 +002C86r 1 A0 0E .dbyt %1010000000001110 +002C88r 1 A0 0F .dbyt %1010000000001111 +002C8Ar 1 AF E1 .dbyt %1010111111100001 +002C8Cr 1 AF E2 .dbyt %1010111111100010 +002C8Er 1 AF E3 .dbyt %1010111111100011 +002C90r 1 AF E4 .dbyt %1010111111100100 +002C92r 1 AF E5 .dbyt %1010111111100101 +002C94r 1 AF E6 .dbyt %1010111111100110 +002C96r 1 AF E7 .dbyt %1010111111100111 +002C98r 1 AF E8 .dbyt %1010111111101000 +002C9Ar 1 AF E9 .dbyt %1010111111101001 +002C9Cr 1 AF EA .dbyt %1010111111101010 +002C9Er 1 AF EB .dbyt %1010111111101011 +002CA0r 1 AF EC .dbyt %1010111111101100 +002CA2r 1 AF ED .dbyt %1010111111101101 +002CA4r 1 AF EE .dbyt %1010111111101110 +002CA6r 1 AF EF .dbyt %1010111111101111 +002CA8r 1 AF F0 .dbyt %1010111111110000 +002CAAr 1 AF F1 .dbyt %1010111111110001 +002CACr 1 AF F2 .dbyt %1010111111110010 +002CAEr 1 AF F3 .dbyt %1010111111110011 +002CB0r 1 AF F4 .dbyt %1010111111110100 +002CB2r 1 AF F5 .dbyt %1010111111110101 +002CB4r 1 AF F6 .dbyt %1010111111110110 +002CB6r 1 AF F7 .dbyt %1010111111110111 +002CB8r 1 AF F8 .dbyt %1010111111111000 +002CBAr 1 AF F9 .dbyt %1010111111111001 +002CBCr 1 AF FA .dbyt %1010111111111010 +002CBEr 1 AF FB .dbyt %1010111111111011 +002CC0r 1 AF FC .dbyt %1010111111111100 +002CC2r 1 AF FD .dbyt %1010111111111101 +002CC4r 1 AF FE .dbyt %1010111111111110 +002CC6r 1 AF FF .dbyt %1010111111111111 +002CC8r 1 B0 00 .dbyt %1011000000000000 +002CCAr 1 B0 01 .dbyt %1011000000000001 +002CCCr 1 B0 02 .dbyt %1011000000000010 +002CCEr 1 B0 03 .dbyt %1011000000000011 +002CD0r 1 B0 04 .dbyt %1011000000000100 +002CD2r 1 B0 05 .dbyt %1011000000000101 +002CD4r 1 B0 06 .dbyt %1011000000000110 +002CD6r 1 B0 07 .dbyt %1011000000000111 +002CD8r 1 B0 08 .dbyt %1011000000001000 +002CDAr 1 B0 09 .dbyt %1011000000001001 +002CDCr 1 B0 0A .dbyt %1011000000001010 +002CDEr 1 B0 0B .dbyt %1011000000001011 +002CE0r 1 B0 0C .dbyt %1011000000001100 +002CE2r 1 B0 0D .dbyt %1011000000001101 +002CE4r 1 B0 0E .dbyt %1011000000001110 +002CE6r 1 B0 0F .dbyt %1011000000001111 +002CE8r 1 BF E1 .dbyt %1011111111100001 +002CEAr 1 BF E2 .dbyt %1011111111100010 +002CECr 1 BF E3 .dbyt %1011111111100011 +002CEEr 1 BF E4 .dbyt %1011111111100100 +002CF0r 1 BF E5 .dbyt %1011111111100101 +002CF2r 1 BF E6 .dbyt %1011111111100110 +002CF4r 1 BF E7 .dbyt %1011111111100111 +002CF6r 1 BF E8 .dbyt %1011111111101000 +002CF8r 1 BF E9 .dbyt %1011111111101001 +002CFAr 1 BF EA .dbyt %1011111111101010 +002CFCr 1 BF EB .dbyt %1011111111101011 +002CFEr 1 BF EC .dbyt %1011111111101100 +002D00r 1 BF ED .dbyt %1011111111101101 +002D02r 1 BF EE .dbyt %1011111111101110 +002D04r 1 BF EF .dbyt %1011111111101111 +002D06r 1 BF F0 .dbyt %1011111111110000 +002D08r 1 BF F1 .dbyt %1011111111110001 +002D0Ar 1 BF F2 .dbyt %1011111111110010 +002D0Cr 1 BF F3 .dbyt %1011111111110011 +002D0Er 1 BF F4 .dbyt %1011111111110100 +002D10r 1 BF F5 .dbyt %1011111111110101 +002D12r 1 BF F6 .dbyt %1011111111110110 +002D14r 1 BF F7 .dbyt %1011111111110111 +002D16r 1 BF F8 .dbyt %1011111111111000 +002D18r 1 BF F9 .dbyt %1011111111111001 +002D1Ar 1 BF FA .dbyt %1011111111111010 +002D1Cr 1 BF FB .dbyt %1011111111111011 +002D1Er 1 BF FC .dbyt %1011111111111100 +002D20r 1 BF FD .dbyt %1011111111111101 +002D22r 1 BF FE .dbyt %1011111111111110 +002D24r 1 BF FF .dbyt %1011111111111111 +002D26r 1 C0 00 .dbyt %1100000000000000 +002D28r 1 C0 01 .dbyt %1100000000000001 +002D2Ar 1 C0 02 .dbyt %1100000000000010 +002D2Cr 1 C0 03 .dbyt %1100000000000011 +002D2Er 1 C0 04 .dbyt %1100000000000100 +002D30r 1 C0 05 .dbyt %1100000000000101 +002D32r 1 C0 06 .dbyt %1100000000000110 +002D34r 1 C0 07 .dbyt %1100000000000111 +002D36r 1 C0 08 .dbyt %1100000000001000 +002D38r 1 C0 09 .dbyt %1100000000001001 +002D3Ar 1 C0 0A .dbyt %1100000000001010 +002D3Cr 1 C0 0B .dbyt %1100000000001011 +002D3Er 1 C0 0C .dbyt %1100000000001100 +002D40r 1 C0 0D .dbyt %1100000000001101 +002D42r 1 C0 0E .dbyt %1100000000001110 +002D44r 1 C0 0F .dbyt %1100000000001111 +002D46r 1 CF E1 .dbyt %1100111111100001 +002D48r 1 CF E2 .dbyt %1100111111100010 +002D4Ar 1 CF E3 .dbyt %1100111111100011 +002D4Cr 1 CF E4 .dbyt %1100111111100100 +002D4Er 1 CF E5 .dbyt %1100111111100101 +002D50r 1 CF E6 .dbyt %1100111111100110 +002D52r 1 CF E7 .dbyt %1100111111100111 +002D54r 1 CF E8 .dbyt %1100111111101000 +002D56r 1 CF E9 .dbyt %1100111111101001 +002D58r 1 CF EA .dbyt %1100111111101010 +002D5Ar 1 CF EB .dbyt %1100111111101011 +002D5Cr 1 CF EC .dbyt %1100111111101100 +002D5Er 1 CF ED .dbyt %1100111111101101 +002D60r 1 CF EE .dbyt %1100111111101110 +002D62r 1 CF EF .dbyt %1100111111101111 +002D64r 1 CF F0 .dbyt %1100111111110000 +002D66r 1 CF F1 .dbyt %1100111111110001 +002D68r 1 CF F2 .dbyt %1100111111110010 +002D6Ar 1 CF F3 .dbyt %1100111111110011 +002D6Cr 1 CF F4 .dbyt %1100111111110100 +002D6Er 1 CF F5 .dbyt %1100111111110101 +002D70r 1 CF F6 .dbyt %1100111111110110 +002D72r 1 CF F7 .dbyt %1100111111110111 +002D74r 1 CF F8 .dbyt %1100111111111000 +002D76r 1 CF F9 .dbyt %1100111111111001 +002D78r 1 CF FA .dbyt %1100111111111010 +002D7Ar 1 CF FB .dbyt %1100111111111011 +002D7Cr 1 CF FC .dbyt %1100111111111100 +002D7Er 1 CF FD .dbyt %1100111111111101 +002D80r 1 CF FE .dbyt %1100111111111110 +002D82r 1 CF FF .dbyt %1100111111111111 +002D84r 1 D0 00 .dbyt %1101000000000000 +002D86r 1 D0 01 .dbyt %1101000000000001 +002D88r 1 D0 02 .dbyt %1101000000000010 +002D8Ar 1 D0 03 .dbyt %1101000000000011 +002D8Cr 1 D0 04 .dbyt %1101000000000100 +002D8Er 1 D0 05 .dbyt %1101000000000101 +002D90r 1 D0 06 .dbyt %1101000000000110 +002D92r 1 D0 07 .dbyt %1101000000000111 +002D94r 1 D0 08 .dbyt %1101000000001000 +002D96r 1 D0 09 .dbyt %1101000000001001 +002D98r 1 D0 0A .dbyt %1101000000001010 +002D9Ar 1 D0 0B .dbyt %1101000000001011 +002D9Cr 1 D0 0C .dbyt %1101000000001100 +002D9Er 1 D0 0D .dbyt %1101000000001101 +002DA0r 1 D0 0E .dbyt %1101000000001110 +002DA2r 1 D0 0F .dbyt %1101000000001111 +002DA4r 1 DF E1 .dbyt %1101111111100001 +002DA6r 1 DF E2 .dbyt %1101111111100010 +002DA8r 1 DF E3 .dbyt %1101111111100011 +002DAAr 1 DF E4 .dbyt %1101111111100100 +002DACr 1 DF E5 .dbyt %1101111111100101 +002DAEr 1 DF E6 .dbyt %1101111111100110 +002DB0r 1 DF E7 .dbyt %1101111111100111 +002DB2r 1 DF E8 .dbyt %1101111111101000 +002DB4r 1 DF E9 .dbyt %1101111111101001 +002DB6r 1 DF EA .dbyt %1101111111101010 +002DB8r 1 DF EB .dbyt %1101111111101011 +002DBAr 1 DF EC .dbyt %1101111111101100 +002DBCr 1 DF ED .dbyt %1101111111101101 +002DBEr 1 DF EE .dbyt %1101111111101110 +002DC0r 1 DF EF .dbyt %1101111111101111 +002DC2r 1 DF F0 .dbyt %1101111111110000 +002DC4r 1 DF F1 .dbyt %1101111111110001 +002DC6r 1 DF F2 .dbyt %1101111111110010 +002DC8r 1 DF F3 .dbyt %1101111111110011 +002DCAr 1 DF F4 .dbyt %1101111111110100 +002DCCr 1 DF F5 .dbyt %1101111111110101 +002DCEr 1 DF F6 .dbyt %1101111111110110 +002DD0r 1 DF F7 .dbyt %1101111111110111 +002DD2r 1 DF F8 .dbyt %1101111111111000 +002DD4r 1 DF F9 .dbyt %1101111111111001 +002DD6r 1 DF FA .dbyt %1101111111111010 +002DD8r 1 DF FB .dbyt %1101111111111011 +002DDAr 1 DF FC .dbyt %1101111111111100 +002DDCr 1 DF FD .dbyt %1101111111111101 +002DDEr 1 DF FE .dbyt %1101111111111110 +002DE0r 1 DF FF .dbyt %1101111111111111 +002DE2r 1 E0 00 .dbyt %1110000000000000 +002DE4r 1 E0 01 .dbyt %1110000000000001 +002DE6r 1 E0 02 .dbyt %1110000000000010 +002DE8r 1 E0 03 .dbyt %1110000000000011 +002DEAr 1 E0 04 .dbyt %1110000000000100 +002DECr 1 E0 05 .dbyt %1110000000000101 +002DEEr 1 E0 06 .dbyt %1110000000000110 +002DF0r 1 E0 07 .dbyt %1110000000000111 +002DF2r 1 E0 08 .dbyt %1110000000001000 +002DF4r 1 E0 09 .dbyt %1110000000001001 +002DF6r 1 E0 0A .dbyt %1110000000001010 +002DF8r 1 E0 0B .dbyt %1110000000001011 +002DFAr 1 E0 0C .dbyt %1110000000001100 +002DFCr 1 E0 0D .dbyt %1110000000001101 +002DFEr 1 E0 0E .dbyt %1110000000001110 +002E00r 1 E0 0F .dbyt %1110000000001111 +002E02r 1 EF E1 .dbyt %1110111111100001 +002E04r 1 EF E2 .dbyt %1110111111100010 +002E06r 1 EF E3 .dbyt %1110111111100011 +002E08r 1 EF E4 .dbyt %1110111111100100 +002E0Ar 1 EF E5 .dbyt %1110111111100101 +002E0Cr 1 EF E6 .dbyt %1110111111100110 +002E0Er 1 EF E7 .dbyt %1110111111100111 +002E10r 1 EF E8 .dbyt %1110111111101000 +002E12r 1 EF E9 .dbyt %1110111111101001 +002E14r 1 EF EA .dbyt %1110111111101010 +002E16r 1 EF EB .dbyt %1110111111101011 +002E18r 1 EF EC .dbyt %1110111111101100 +002E1Ar 1 EF ED .dbyt %1110111111101101 +002E1Cr 1 EF EE .dbyt %1110111111101110 +002E1Er 1 EF EF .dbyt %1110111111101111 +002E20r 1 EF F0 .dbyt %1110111111110000 +002E22r 1 EF F1 .dbyt %1110111111110001 +002E24r 1 EF F2 .dbyt %1110111111110010 +002E26r 1 EF F3 .dbyt %1110111111110011 +002E28r 1 EF F4 .dbyt %1110111111110100 +002E2Ar 1 EF F5 .dbyt %1110111111110101 +002E2Cr 1 EF F6 .dbyt %1110111111110110 +002E2Er 1 EF F7 .dbyt %1110111111110111 +002E30r 1 EF F8 .dbyt %1110111111111000 +002E32r 1 EF F9 .dbyt %1110111111111001 +002E34r 1 EF FA .dbyt %1110111111111010 +002E36r 1 EF FB .dbyt %1110111111111011 +002E38r 1 EF FC .dbyt %1110111111111100 +002E3Ar 1 EF FD .dbyt %1110111111111101 +002E3Cr 1 EF FE .dbyt %1110111111111110 +002E3Er 1 EF FF .dbyt %1110111111111111 +002E40r 1 F0 00 .dbyt %1111000000000000 +002E42r 1 F0 01 .dbyt %1111000000000001 +002E44r 1 F0 02 .dbyt %1111000000000010 +002E46r 1 F0 03 .dbyt %1111000000000011 +002E48r 1 F0 04 .dbyt %1111000000000100 +002E4Ar 1 F0 05 .dbyt %1111000000000101 +002E4Cr 1 F0 06 .dbyt %1111000000000110 +002E4Er 1 F0 07 .dbyt %1111000000000111 +002E50r 1 F0 08 .dbyt %1111000000001000 +002E52r 1 F0 09 .dbyt %1111000000001001 +002E54r 1 F0 0A .dbyt %1111000000001010 +002E56r 1 F0 0B .dbyt %1111000000001011 +002E58r 1 F0 0C .dbyt %1111000000001100 +002E5Ar 1 F0 0D .dbyt %1111000000001101 +002E5Cr 1 F0 0E .dbyt %1111000000001110 +002E5Er 1 F0 0F .dbyt %1111000000001111 +002E60r 1 FF E1 .dbyt %1111111111100001 +002E62r 1 FF E2 .dbyt %1111111111100010 +002E64r 1 FF E3 .dbyt %1111111111100011 +002E66r 1 FF E4 .dbyt %1111111111100100 +002E68r 1 FF E5 .dbyt %1111111111100101 +002E6Ar 1 FF E6 .dbyt %1111111111100110 +002E6Cr 1 FF E7 .dbyt %1111111111100111 +002E6Er 1 FF E8 .dbyt %1111111111101000 +002E70r 1 FF E9 .dbyt %1111111111101001 +002E72r 1 FF EA .dbyt %1111111111101010 +002E74r 1 FF EB .dbyt %1111111111101011 +002E76r 1 FF EC .dbyt %1111111111101100 +002E78r 1 FF ED .dbyt %1111111111101101 +002E7Ar 1 FF EE .dbyt %1111111111101110 +002E7Cr 1 FF EF .dbyt %1111111111101111 +002E7Er 1 FF F0 .dbyt %1111111111110000 +002E80r 1 FF F1 .dbyt %1111111111110001 +002E82r 1 FF F2 .dbyt %1111111111110010 +002E84r 1 FF F3 .dbyt %1111111111110011 +002E86r 1 FF F4 .dbyt %1111111111110100 +002E88r 1 FF F5 .dbyt %1111111111110101 +002E8Ar 1 FF F6 .dbyt %1111111111110110 +002E8Cr 1 FF F7 .dbyt %1111111111110111 +002E8Er 1 FF F8 .dbyt %1111111111111000 +002E90r 1 FF F9 .dbyt %1111111111111001 +002E92r 1 FF FA .dbyt %1111111111111010 +002E94r 1 FF FB .dbyt %1111111111111011 +002E96r 1 FF FC .dbyt %1111111111111100 +002E98r 1 FF FD .dbyt %1111111111111101 +002E9Ar 1 FF FE .dbyt %1111111111111110 +002E9Cr 1 FF FF .dbyt %1111111111111111 002E9Er 1 -002E9Er 1 ; multiple values on one line, decimal -002E9Er 1 00 00 00 01 .dbyt 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +002E9Er 1 ; multiple values on one line, decimal +002E9Er 1 00 00 00 01 .dbyt 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 002EA2r 1 00 02 00 03 002EA6r 1 00 04 00 05 -002EBEr 1 00 10 00 11 .dbyt 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +002EBEr 1 00 10 00 11 .dbyt 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 002EC2r 1 00 12 00 13 002EC6r 1 00 14 00 15 -002EDEr 1 00 70 00 71 .dbyt 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +002EDEr 1 00 70 00 71 .dbyt 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 002EE2r 1 00 72 00 73 002EE6r 1 00 74 00 75 -002EFEr 1 00 80 00 81 .dbyt 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +002EFEr 1 00 80 00 81 .dbyt 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 002F02r 1 00 82 00 83 002F06r 1 00 84 00 85 -002F1Er 1 00 F0 00 F1 .dbyt 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +002F1Er 1 00 F0 00 F1 .dbyt 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 002F22r 1 00 F2 00 F3 002F26r 1 00 F4 00 F5 -002F3Er 1 01 00 01 01 .dbyt 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 +002F3Er 1 01 00 01 01 .dbyt 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 002F42r 1 01 02 01 03 002F46r 1 01 04 01 05 -002F5Er 1 0F E0 0F E1 .dbyt 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 +002F5Er 1 0F E0 0F E1 .dbyt 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 002F62r 1 0F E2 0F E3 002F66r 1 0F E4 0F E5 -002F7Er 1 0F F0 0F F1 .dbyt 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 +002F7Er 1 0F F0 0F F1 .dbyt 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 002F82r 1 0F F2 0F F3 002F86r 1 0F F4 0F F5 -002F9Er 1 10 00 10 01 .dbyt 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 +002F9Er 1 10 00 10 01 .dbyt 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 002FA2r 1 10 02 10 03 002FA6r 1 10 04 10 05 -002FBEr 1 7F F0 7F F1 .dbyt 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 +002FBEr 1 7F F0 7F F1 .dbyt 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 002FC2r 1 7F F2 7F F3 002FC6r 1 7F F4 7F F5 -002FDEr 1 80 00 80 01 .dbyt 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 +002FDEr 1 80 00 80 01 .dbyt 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 002FE2r 1 80 02 80 03 002FE6r 1 80 04 80 05 -002FFEr 1 9F F0 9F F1 .dbyt 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 +002FFEr 1 9F F0 9F F1 .dbyt 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 003002r 1 9F F2 9F F3 003006r 1 9F F4 9F F5 -00301Er 1 A0 00 A0 01 .dbyt 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 +00301Er 1 A0 00 A0 01 .dbyt 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 003022r 1 A0 02 A0 03 003026r 1 A0 04 A0 05 -00303Er 1 AF F0 AF F1 .dbyt 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 +00303Er 1 AF F0 AF F1 .dbyt 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 003042r 1 AF F2 AF F3 003046r 1 AF F4 AF F5 -00305Er 1 B0 00 B0 01 .dbyt 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 +00305Er 1 B0 00 B0 01 .dbyt 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 003062r 1 B0 02 B0 03 003066r 1 B0 04 B0 05 -00307Er 1 BF F0 BF F1 .dbyt 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 +00307Er 1 BF F0 BF F1 .dbyt 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 003082r 1 BF F2 BF F3 003086r 1 BF F4 BF F5 -00309Er 1 C0 00 C0 01 .dbyt 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 +00309Er 1 C0 00 C0 01 .dbyt 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 0030A2r 1 C0 02 C0 03 0030A6r 1 C0 04 C0 05 -0030BEr 1 CF F0 CF F1 .dbyt 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 +0030BEr 1 CF F0 CF F1 .dbyt 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 0030C2r 1 CF F2 CF F3 0030C6r 1 CF F4 CF F5 -0030DEr 1 D0 00 D0 01 .dbyt 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 +0030DEr 1 D0 00 D0 01 .dbyt 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 0030E2r 1 D0 02 D0 03 0030E6r 1 D0 04 D0 05 -0030FEr 1 DF F0 DF F1 .dbyt 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 +0030FEr 1 DF F0 DF F1 .dbyt 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 003102r 1 DF F2 DF F3 003106r 1 DF F4 DF F5 -00311Er 1 E0 00 E0 01 .dbyt 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 +00311Er 1 E0 00 E0 01 .dbyt 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 003122r 1 E0 02 E0 03 003126r 1 E0 04 E0 05 -00313Er 1 EF F0 EF F1 .dbyt 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 +00313Er 1 EF F0 EF F1 .dbyt 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 003142r 1 EF F2 EF F3 003146r 1 EF F4 EF F5 -00315Er 1 F0 00 F0 01 .dbyt 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 +00315Er 1 F0 00 F0 01 .dbyt 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 003162r 1 F0 02 F0 03 003166r 1 F0 04 F0 05 -00317Er 1 FF F0 FF F1 .dbyt 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 +00317Er 1 FF F0 FF F1 .dbyt 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 003182r 1 FF F2 FF F3 003186r 1 FF F4 FF F5 00319Er 1 -00319Er 1 ; multiple values on one line, hex -00319Er 1 00 00 00 01 .dbyt $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +00319Er 1 ; multiple values on one line, hex +00319Er 1 00 00 00 01 .dbyt $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f 0031A2r 1 00 02 00 03 0031A6r 1 00 04 00 05 -0031BEr 1 00 10 00 11 .dbyt $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +0031BEr 1 00 10 00 11 .dbyt $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f 0031C2r 1 00 12 00 13 0031C6r 1 00 14 00 15 -0031DEr 1 00 70 00 71 .dbyt $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +0031DEr 1 00 70 00 71 .dbyt $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f 0031E2r 1 00 72 00 73 0031E6r 1 00 74 00 75 -0031FEr 1 00 80 00 81 .dbyt $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +0031FEr 1 00 80 00 81 .dbyt $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f 003202r 1 00 82 00 83 003206r 1 00 84 00 85 -00321Er 1 00 F0 00 F1 .dbyt $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +00321Er 1 00 F0 00 F1 .dbyt $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff 003222r 1 00 F2 00 F3 003226r 1 00 F4 00 F5 -00323Er 1 01 00 01 01 .dbyt $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f +00323Er 1 01 00 01 01 .dbyt $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f 003242r 1 01 02 01 03 003246r 1 01 04 01 05 -00325Er 1 0F E0 0F E1 .dbyt $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef +00325Er 1 0F E0 0F E1 .dbyt $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef 003262r 1 0F E2 0F E3 003266r 1 0F E4 0F E5 -00327Er 1 0F F0 0F F1 .dbyt $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff +00327Er 1 0F F0 0F F1 .dbyt $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff 003282r 1 0F F2 0F F3 003286r 1 0F F4 0F F5 -00329Er 1 10 00 10 01 .dbyt $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f +00329Er 1 10 00 10 01 .dbyt $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f 0032A2r 1 10 02 10 03 0032A6r 1 10 04 10 05 -0032BEr 1 7F F0 7F F1 .dbyt $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff +0032BEr 1 7F F0 7F F1 .dbyt $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff 0032C2r 1 7F F2 7F F3 0032C6r 1 7F F4 7F F5 -0032DEr 1 80 00 80 01 .dbyt $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f +0032DEr 1 80 00 80 01 .dbyt $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f 0032E2r 1 80 02 80 03 0032E6r 1 80 04 80 05 -0032FEr 1 9F F0 9F F1 .dbyt $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff +0032FEr 1 9F F0 9F F1 .dbyt $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff 003302r 1 9F F2 9F F3 003306r 1 9F F4 9F F5 -00331Er 1 A0 00 A0 01 .dbyt $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f +00331Er 1 A0 00 A0 01 .dbyt $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f 003322r 1 A0 02 A0 03 003326r 1 A0 04 A0 05 -00333Er 1 AF F0 AF F1 .dbyt $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff +00333Er 1 AF F0 AF F1 .dbyt $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff 003342r 1 AF F2 AF F3 003346r 1 AF F4 AF F5 -00335Er 1 B0 00 B0 01 .dbyt $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f +00335Er 1 B0 00 B0 01 .dbyt $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f 003362r 1 B0 02 B0 03 003366r 1 B0 04 B0 05 -00337Er 1 BF F0 BF F1 .dbyt $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff +00337Er 1 BF F0 BF F1 .dbyt $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff 003382r 1 BF F2 BF F3 003386r 1 BF F4 BF F5 -00339Er 1 C0 00 C0 01 .dbyt $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f +00339Er 1 C0 00 C0 01 .dbyt $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f 0033A2r 1 C0 02 C0 03 0033A6r 1 C0 04 C0 05 -0033BEr 1 CF F0 CF F1 .dbyt $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff +0033BEr 1 CF F0 CF F1 .dbyt $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff 0033C2r 1 CF F2 CF F3 0033C6r 1 CF F4 CF F5 -0033DEr 1 D0 00 D0 01 .dbyt $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f +0033DEr 1 D0 00 D0 01 .dbyt $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f 0033E2r 1 D0 02 D0 03 0033E6r 1 D0 04 D0 05 -0033FEr 1 DF F0 DF F1 .dbyt $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff +0033FEr 1 DF F0 DF F1 .dbyt $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff 003402r 1 DF F2 DF F3 003406r 1 DF F4 DF F5 -00341Er 1 E0 00 E0 01 .dbyt $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f +00341Er 1 E0 00 E0 01 .dbyt $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f 003422r 1 E0 02 E0 03 003426r 1 E0 04 E0 05 -00343Er 1 EF F0 EF F1 .dbyt $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff +00343Er 1 EF F0 EF F1 .dbyt $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff 003442r 1 EF F2 EF F3 003446r 1 EF F4 EF F5 -00345Er 1 F0 00 F0 01 .dbyt $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f +00345Er 1 F0 00 F0 01 .dbyt $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f 003462r 1 F0 02 F0 03 003466r 1 F0 04 F0 05 -00347Er 1 FF F0 FF F1 .dbyt $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff +00347Er 1 FF F0 FF F1 .dbyt $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff 003482r 1 FF F2 FF F3 003486r 1 FF F4 FF F5 00349Er 1 -00349Er 1 ; multiple values on one line, alternative hex -00349Er 1 00 00 00 01 .dbyt 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +00349Er 1 ; multiple values on one line, alternative hex +00349Er 1 00 00 00 01 .dbyt 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh 0034A2r 1 00 02 00 03 0034A6r 1 00 04 00 05 -0034BEr 1 00 10 00 11 .dbyt 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +0034BEr 1 00 10 00 11 .dbyt 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh 0034C2r 1 00 12 00 13 0034C6r 1 00 14 00 15 -0034DEr 1 00 70 00 71 .dbyt 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +0034DEr 1 00 70 00 71 .dbyt 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh 0034E2r 1 00 72 00 73 0034E6r 1 00 74 00 75 -0034FEr 1 00 80 00 81 .dbyt 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +0034FEr 1 00 80 00 81 .dbyt 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh 003502r 1 00 82 00 83 003506r 1 00 84 00 85 -00351Er 1 00 F0 00 F1 .dbyt 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +00351Er 1 00 F0 00 F1 .dbyt 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh 003522r 1 00 F2 00 F3 003526r 1 00 F4 00 F5 -00353Er 1 01 00 01 01 .dbyt 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh +00353Er 1 01 00 01 01 .dbyt 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh 003542r 1 01 02 01 03 003546r 1 01 04 01 05 -00355Er 1 0F E0 0F E1 .dbyt 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh +00355Er 1 0F E0 0F E1 .dbyt 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh 003562r 1 0F E2 0F E3 003566r 1 0F E4 0F E5 -00357Er 1 0F F0 0F F1 .dbyt 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh +00357Er 1 0F F0 0F F1 .dbyt 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh 003582r 1 0F F2 0F F3 003586r 1 0F F4 0F F5 -00359Er 1 10 00 10 01 .dbyt 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh +00359Er 1 10 00 10 01 .dbyt 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh 0035A2r 1 10 02 10 03 0035A6r 1 10 04 10 05 -0035BEr 1 7F F0 7F F1 .dbyt 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh +0035BEr 1 7F F0 7F F1 .dbyt 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh 0035C2r 1 7F F2 7F F3 0035C6r 1 7F F4 7F F5 -0035DEr 1 80 00 80 01 .dbyt 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh +0035DEr 1 80 00 80 01 .dbyt 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh 0035E2r 1 80 02 80 03 0035E6r 1 80 04 80 05 -0035FEr 1 9F F0 9F F1 .dbyt 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh +0035FEr 1 9F F0 9F F1 .dbyt 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh 003602r 1 9F F2 9F F3 003606r 1 9F F4 9F F5 -00361Er 1 A0 00 A0 01 .dbyt 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh +00361Er 1 A0 00 A0 01 .dbyt 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh 003622r 1 A0 02 A0 03 003626r 1 A0 04 A0 05 -00363Er 1 AF F0 AF F1 .dbyt 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh +00363Er 1 AF F0 AF F1 .dbyt 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh 003642r 1 AF F2 AF F3 003646r 1 AF F4 AF F5 -00365Er 1 B0 00 B0 01 .dbyt 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh +00365Er 1 B0 00 B0 01 .dbyt 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh 003662r 1 B0 02 B0 03 003666r 1 B0 04 B0 05 -00367Er 1 BF F0 BF F1 .dbyt 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh +00367Er 1 BF F0 BF F1 .dbyt 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh 003682r 1 BF F2 BF F3 003686r 1 BF F4 BF F5 -00369Er 1 C0 00 C0 01 .dbyt 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh +00369Er 1 C0 00 C0 01 .dbyt 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh 0036A2r 1 C0 02 C0 03 0036A6r 1 C0 04 C0 05 -0036BEr 1 CF F0 CF F1 .dbyt 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh +0036BEr 1 CF F0 CF F1 .dbyt 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh 0036C2r 1 CF F2 CF F3 0036C6r 1 CF F4 CF F5 -0036DEr 1 D0 00 D0 01 .dbyt 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh +0036DEr 1 D0 00 D0 01 .dbyt 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh 0036E2r 1 D0 02 D0 03 0036E6r 1 D0 04 D0 05 -0036FEr 1 DF F0 DF F1 .dbyt 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh +0036FEr 1 DF F0 DF F1 .dbyt 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh 003702r 1 DF F2 DF F3 003706r 1 DF F4 DF F5 -00371Er 1 E0 00 E0 01 .dbyt 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh +00371Er 1 E0 00 E0 01 .dbyt 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh 003722r 1 E0 02 E0 03 003726r 1 E0 04 E0 05 -00373Er 1 EF F0 EF F1 .dbyt 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh +00373Er 1 EF F0 EF F1 .dbyt 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh 003742r 1 EF F2 EF F3 003746r 1 EF F4 EF F5 -00375Er 1 F0 00 F0 01 .dbyt 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh +00375Er 1 F0 00 F0 01 .dbyt 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh 003762r 1 F0 02 F0 03 003766r 1 F0 04 F0 05 -00377Er 1 FF F0 FF F1 .dbyt 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh +00377Er 1 FF F0 FF F1 .dbyt 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh 003782r 1 FF F2 FF F3 003786r 1 FF F4 FF F5 00379Er 1 -00379Er 1 ; mix some variants -00379Er 1 00 0B 00 11 .dbyt 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +00379Er 1 ; mix some variants +00379Er 1 00 0B 00 11 .dbyt 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh 0037A2r 1 00 03 00 11 0037A6r 1 00 61 00 62 0037BCr 1 diff --git a/test/asm/listing/103-dbyt.s b/test/asm/listing/103-dbyt.s index 1c415b6b0..1e0427dc3 100644 --- a/test/asm/listing/103-dbyt.s +++ b/test/asm/listing/103-dbyt.s @@ -1,6076 +1,6076 @@ ; 2022-06-15 Spiro Trikaliotis - ; upper case pseudo-op - .DBYT 0 - .DBYT 1 - .DBYT 2 - .DBYT 3 - .DBYT 4 - .DBYT 5 - .DBYT 6 - .DBYT 7 - .DBYT 8 - .DBYT 9 - .DBYT 10 - .DBYT 11 - .DBYT 12 - .DBYT 13 - .DBYT 14 - .DBYT 15 - .DBYT 16 - .DBYT 17 - .DBYT 18 - .DBYT 19 - .DBYT 112 - .DBYT 113 - .DBYT 114 - .DBYT 115 - .DBYT 116 - .DBYT 117 - .DBYT 118 - .DBYT 119 - .DBYT 120 - .DBYT 121 - .DBYT 122 - .DBYT 123 - .DBYT 124 - .DBYT 125 - .DBYT 126 - .DBYT 127 - .DBYT 128 - .DBYT 129 - .DBYT 130 - .DBYT 131 - .DBYT 132 - .DBYT 133 - .DBYT 134 - .DBYT 240 - .DBYT 241 - .DBYT 242 - .DBYT 243 - .DBYT 244 - .DBYT 245 - .DBYT 246 - .DBYT 247 - .DBYT 248 - .DBYT 249 - .DBYT 250 - .DBYT 251 - .DBYT 252 - .DBYT 253 - .DBYT 254 - .DBYT 255 - .DBYT 256 - .DBYT 257 - .DBYT 258 - .DBYT 259 - .DBYT 4050 - .DBYT 4051 - .DBYT 4052 - .DBYT 4053 - .DBYT 4054 - .DBYT 4055 - .DBYT 4056 - .DBYT 4057 - .DBYT 4058 - .DBYT 4059 - .DBYT 4060 - .DBYT 4061 - .DBYT 4062 - .DBYT 4063 - .DBYT 4064 - .DBYT 4065 - .DBYT 4066 - .DBYT 4067 - .DBYT 4068 - .DBYT 4069 - .DBYT 4070 - .DBYT 4071 - .DBYT 4072 - .DBYT 4073 - .DBYT 4074 - .DBYT 4075 - .DBYT 4076 - .DBYT 4077 - .DBYT 4078 - .DBYT 4079 - .DBYT 4080 - .DBYT 4081 - .DBYT 4082 - .DBYT 4083 - .DBYT 4084 - .DBYT 4085 - .DBYT 4086 - .DBYT 4087 - .DBYT 4088 - .DBYT 4089 - .DBYT 4090 - .DBYT 4091 - .DBYT 4092 - .DBYT 4093 - .DBYT 4094 - .DBYT 4095 - .DBYT 4096 - .DBYT 4097 - .DBYT 4098 - .DBYT 4099 - .DBYT 4100 - .DBYT 4101 - .DBYT 4102 - .DBYT 4103 - .DBYT 4104 - .DBYT 32752 - .DBYT 32753 - .DBYT 32754 - .DBYT 32755 - .DBYT 32756 - .DBYT 32757 - .DBYT 32758 - .DBYT 32759 - .DBYT 32760 - .DBYT 32761 - .DBYT 32762 - .DBYT 32763 - .DBYT 32764 - .DBYT 32765 - .DBYT 32766 - .DBYT 32767 - .DBYT 32768 - .DBYT 32769 - .DBYT 32770 - .DBYT 32771 - .DBYT 32772 - .DBYT 32773 - .DBYT 32774 - .DBYT 32775 - .DBYT 32776 - .DBYT 32777 - .DBYT 32778 - .DBYT 32779 - .DBYT 40929 - .DBYT 40930 - .DBYT 40931 - .DBYT 40932 - .DBYT 40933 - .DBYT 40934 - .DBYT 40935 - .DBYT 40936 - .DBYT 40937 - .DBYT 40938 - .DBYT 40939 - .DBYT 40940 - .DBYT 40941 - .DBYT 40942 - .DBYT 40943 - .DBYT 40944 - .DBYT 40945 - .DBYT 40946 - .DBYT 40947 - .DBYT 40948 - .DBYT 40949 - .DBYT 40950 - .DBYT 40951 - .DBYT 40952 - .DBYT 40953 - .DBYT 40954 - .DBYT 40955 - .DBYT 40956 - .DBYT 40957 - .DBYT 40958 - .DBYT 40959 - .DBYT 40960 - .DBYT 40961 - .DBYT 40962 - .DBYT 40963 - .DBYT 40964 - .DBYT 40965 - .DBYT 40966 - .DBYT 40967 - .DBYT 40968 - .DBYT 40969 - .DBYT 40970 - .DBYT 40971 - .DBYT 40972 - .DBYT 40973 - .DBYT 40974 - .DBYT 40975 - .DBYT 45025 - .DBYT 45026 - .DBYT 45027 - .DBYT 45028 - .DBYT 45029 - .DBYT 45030 - .DBYT 45031 - .DBYT 45032 - .DBYT 45033 - .DBYT 45034 - .DBYT 45035 - .DBYT 45036 - .DBYT 45037 - .DBYT 45038 - .DBYT 45039 - .DBYT 45040 - .DBYT 45041 - .DBYT 45042 - .DBYT 45043 - .DBYT 45044 - .DBYT 45045 - .DBYT 45046 - .DBYT 45047 - .DBYT 45048 - .DBYT 45049 - .DBYT 45050 - .DBYT 45051 - .DBYT 45052 - .DBYT 45053 - .DBYT 45054 - .DBYT 45055 - .DBYT 45056 - .DBYT 45057 - .DBYT 45058 - .DBYT 45059 - .DBYT 45060 - .DBYT 45061 - .DBYT 45062 - .DBYT 45063 - .DBYT 45064 - .DBYT 45065 - .DBYT 45066 - .DBYT 45067 - .DBYT 45068 - .DBYT 45069 - .DBYT 45070 - .DBYT 45071 - .DBYT 49121 - .DBYT 49122 - .DBYT 49123 - .DBYT 49124 - .DBYT 49125 - .DBYT 49126 - .DBYT 49127 - .DBYT 49128 - .DBYT 49129 - .DBYT 49130 - .DBYT 49131 - .DBYT 49132 - .DBYT 49133 - .DBYT 49134 - .DBYT 49135 - .DBYT 49136 - .DBYT 49137 - .DBYT 49138 - .DBYT 49139 - .DBYT 49140 - .DBYT 49141 - .DBYT 49142 - .DBYT 49143 - .DBYT 49144 - .DBYT 49145 - .DBYT 49146 - .DBYT 49147 - .DBYT 49148 - .DBYT 49149 - .DBYT 49150 - .DBYT 49151 - .DBYT 49152 - .DBYT 49153 - .DBYT 49154 - .DBYT 49155 - .DBYT 49156 - .DBYT 49157 - .DBYT 49158 - .DBYT 49159 - .DBYT 49160 - .DBYT 49161 - .DBYT 49162 - .DBYT 49163 - .DBYT 49164 - .DBYT 49165 - .DBYT 49166 - .DBYT 49167 - .DBYT 53217 - .DBYT 53218 - .DBYT 53219 - .DBYT 53220 - .DBYT 53221 - .DBYT 53222 - .DBYT 53223 - .DBYT 53224 - .DBYT 53225 - .DBYT 53226 - .DBYT 53227 - .DBYT 53228 - .DBYT 53229 - .DBYT 53230 - .DBYT 53231 - .DBYT 53232 - .DBYT 53233 - .DBYT 53234 - .DBYT 53235 - .DBYT 53236 - .DBYT 53237 - .DBYT 53238 - .DBYT 53239 - .DBYT 53240 - .DBYT 53241 - .DBYT 53242 - .DBYT 53243 - .DBYT 53244 - .DBYT 53245 - .DBYT 53246 - .DBYT 53247 - .DBYT 53248 - .DBYT 53249 - .DBYT 53250 - .DBYT 53251 - .DBYT 53252 - .DBYT 53253 - .DBYT 53254 - .DBYT 53255 - .DBYT 53256 - .DBYT 53257 - .DBYT 53258 - .DBYT 53259 - .DBYT 53260 - .DBYT 53261 - .DBYT 53262 - .DBYT 53263 - .DBYT 57313 - .DBYT 57314 - .DBYT 57315 - .DBYT 57316 - .DBYT 57317 - .DBYT 57318 - .DBYT 57319 - .DBYT 57320 - .DBYT 57321 - .DBYT 57322 - .DBYT 57323 - .DBYT 57324 - .DBYT 57325 - .DBYT 57326 - .DBYT 57327 - .DBYT 57328 - .DBYT 57329 - .DBYT 57330 - .DBYT 57331 - .DBYT 57332 - .DBYT 57333 - .DBYT 57334 - .DBYT 57335 - .DBYT 57336 - .DBYT 57337 - .DBYT 57338 - .DBYT 57339 - .DBYT 57340 - .DBYT 57341 - .DBYT 57342 - .DBYT 57343 - .DBYT 57344 - .DBYT 57345 - .DBYT 57346 - .DBYT 57347 - .DBYT 57348 - .DBYT 57349 - .DBYT 57350 - .DBYT 57351 - .DBYT 57352 - .DBYT 57353 - .DBYT 57354 - .DBYT 57355 - .DBYT 57356 - .DBYT 57357 - .DBYT 57358 - .DBYT 57359 - .DBYT 61409 - .DBYT 61410 - .DBYT 61411 - .DBYT 61412 - .DBYT 61413 - .DBYT 61414 - .DBYT 61415 - .DBYT 61416 - .DBYT 61417 - .DBYT 61418 - .DBYT 61419 - .DBYT 61420 - .DBYT 61421 - .DBYT 61422 - .DBYT 61423 - .DBYT 61424 - .DBYT 61425 - .DBYT 61426 - .DBYT 61427 - .DBYT 61428 - .DBYT 61429 - .DBYT 61430 - .DBYT 61431 - .DBYT 61432 - .DBYT 61433 - .DBYT 61434 - .DBYT 61435 - .DBYT 61436 - .DBYT 61437 - .DBYT 61438 - .DBYT 61439 - .DBYT 61440 - .DBYT 61441 - .DBYT 61442 - .DBYT 61443 - .DBYT 61444 - .DBYT 61445 - .DBYT 61446 - .DBYT 61447 - .DBYT 61448 - .DBYT 61449 - .DBYT 61450 - .DBYT 61451 - .DBYT 61452 - .DBYT 61453 - .DBYT 61454 - .DBYT 61455 - .DBYT 65505 - .DBYT 65506 - .DBYT 65507 - .DBYT 65508 - .DBYT 65509 - .DBYT 65510 - .DBYT 65511 - .DBYT 65512 - .DBYT 65513 - .DBYT 65514 - .DBYT 65515 - .DBYT 65516 - .DBYT 65517 - .DBYT 65518 - .DBYT 65519 - .DBYT 65520 - .DBYT 65521 - .DBYT 65522 - .DBYT 65523 - .DBYT 65524 - .DBYT 65525 - .DBYT 65526 - .DBYT 65527 - .DBYT 65528 - .DBYT 65529 - .DBYT 65530 - .DBYT 65531 - .DBYT 65532 - .DBYT 65533 - .DBYT 65534 - .DBYT 65535 + ; upper case pseudo-op + .DBYT 0 + .DBYT 1 + .DBYT 2 + .DBYT 3 + .DBYT 4 + .DBYT 5 + .DBYT 6 + .DBYT 7 + .DBYT 8 + .DBYT 9 + .DBYT 10 + .DBYT 11 + .DBYT 12 + .DBYT 13 + .DBYT 14 + .DBYT 15 + .DBYT 16 + .DBYT 17 + .DBYT 18 + .DBYT 19 + .DBYT 112 + .DBYT 113 + .DBYT 114 + .DBYT 115 + .DBYT 116 + .DBYT 117 + .DBYT 118 + .DBYT 119 + .DBYT 120 + .DBYT 121 + .DBYT 122 + .DBYT 123 + .DBYT 124 + .DBYT 125 + .DBYT 126 + .DBYT 127 + .DBYT 128 + .DBYT 129 + .DBYT 130 + .DBYT 131 + .DBYT 132 + .DBYT 133 + .DBYT 134 + .DBYT 240 + .DBYT 241 + .DBYT 242 + .DBYT 243 + .DBYT 244 + .DBYT 245 + .DBYT 246 + .DBYT 247 + .DBYT 248 + .DBYT 249 + .DBYT 250 + .DBYT 251 + .DBYT 252 + .DBYT 253 + .DBYT 254 + .DBYT 255 + .DBYT 256 + .DBYT 257 + .DBYT 258 + .DBYT 259 + .DBYT 4050 + .DBYT 4051 + .DBYT 4052 + .DBYT 4053 + .DBYT 4054 + .DBYT 4055 + .DBYT 4056 + .DBYT 4057 + .DBYT 4058 + .DBYT 4059 + .DBYT 4060 + .DBYT 4061 + .DBYT 4062 + .DBYT 4063 + .DBYT 4064 + .DBYT 4065 + .DBYT 4066 + .DBYT 4067 + .DBYT 4068 + .DBYT 4069 + .DBYT 4070 + .DBYT 4071 + .DBYT 4072 + .DBYT 4073 + .DBYT 4074 + .DBYT 4075 + .DBYT 4076 + .DBYT 4077 + .DBYT 4078 + .DBYT 4079 + .DBYT 4080 + .DBYT 4081 + .DBYT 4082 + .DBYT 4083 + .DBYT 4084 + .DBYT 4085 + .DBYT 4086 + .DBYT 4087 + .DBYT 4088 + .DBYT 4089 + .DBYT 4090 + .DBYT 4091 + .DBYT 4092 + .DBYT 4093 + .DBYT 4094 + .DBYT 4095 + .DBYT 4096 + .DBYT 4097 + .DBYT 4098 + .DBYT 4099 + .DBYT 4100 + .DBYT 4101 + .DBYT 4102 + .DBYT 4103 + .DBYT 4104 + .DBYT 32752 + .DBYT 32753 + .DBYT 32754 + .DBYT 32755 + .DBYT 32756 + .DBYT 32757 + .DBYT 32758 + .DBYT 32759 + .DBYT 32760 + .DBYT 32761 + .DBYT 32762 + .DBYT 32763 + .DBYT 32764 + .DBYT 32765 + .DBYT 32766 + .DBYT 32767 + .DBYT 32768 + .DBYT 32769 + .DBYT 32770 + .DBYT 32771 + .DBYT 32772 + .DBYT 32773 + .DBYT 32774 + .DBYT 32775 + .DBYT 32776 + .DBYT 32777 + .DBYT 32778 + .DBYT 32779 + .DBYT 40929 + .DBYT 40930 + .DBYT 40931 + .DBYT 40932 + .DBYT 40933 + .DBYT 40934 + .DBYT 40935 + .DBYT 40936 + .DBYT 40937 + .DBYT 40938 + .DBYT 40939 + .DBYT 40940 + .DBYT 40941 + .DBYT 40942 + .DBYT 40943 + .DBYT 40944 + .DBYT 40945 + .DBYT 40946 + .DBYT 40947 + .DBYT 40948 + .DBYT 40949 + .DBYT 40950 + .DBYT 40951 + .DBYT 40952 + .DBYT 40953 + .DBYT 40954 + .DBYT 40955 + .DBYT 40956 + .DBYT 40957 + .DBYT 40958 + .DBYT 40959 + .DBYT 40960 + .DBYT 40961 + .DBYT 40962 + .DBYT 40963 + .DBYT 40964 + .DBYT 40965 + .DBYT 40966 + .DBYT 40967 + .DBYT 40968 + .DBYT 40969 + .DBYT 40970 + .DBYT 40971 + .DBYT 40972 + .DBYT 40973 + .DBYT 40974 + .DBYT 40975 + .DBYT 45025 + .DBYT 45026 + .DBYT 45027 + .DBYT 45028 + .DBYT 45029 + .DBYT 45030 + .DBYT 45031 + .DBYT 45032 + .DBYT 45033 + .DBYT 45034 + .DBYT 45035 + .DBYT 45036 + .DBYT 45037 + .DBYT 45038 + .DBYT 45039 + .DBYT 45040 + .DBYT 45041 + .DBYT 45042 + .DBYT 45043 + .DBYT 45044 + .DBYT 45045 + .DBYT 45046 + .DBYT 45047 + .DBYT 45048 + .DBYT 45049 + .DBYT 45050 + .DBYT 45051 + .DBYT 45052 + .DBYT 45053 + .DBYT 45054 + .DBYT 45055 + .DBYT 45056 + .DBYT 45057 + .DBYT 45058 + .DBYT 45059 + .DBYT 45060 + .DBYT 45061 + .DBYT 45062 + .DBYT 45063 + .DBYT 45064 + .DBYT 45065 + .DBYT 45066 + .DBYT 45067 + .DBYT 45068 + .DBYT 45069 + .DBYT 45070 + .DBYT 45071 + .DBYT 49121 + .DBYT 49122 + .DBYT 49123 + .DBYT 49124 + .DBYT 49125 + .DBYT 49126 + .DBYT 49127 + .DBYT 49128 + .DBYT 49129 + .DBYT 49130 + .DBYT 49131 + .DBYT 49132 + .DBYT 49133 + .DBYT 49134 + .DBYT 49135 + .DBYT 49136 + .DBYT 49137 + .DBYT 49138 + .DBYT 49139 + .DBYT 49140 + .DBYT 49141 + .DBYT 49142 + .DBYT 49143 + .DBYT 49144 + .DBYT 49145 + .DBYT 49146 + .DBYT 49147 + .DBYT 49148 + .DBYT 49149 + .DBYT 49150 + .DBYT 49151 + .DBYT 49152 + .DBYT 49153 + .DBYT 49154 + .DBYT 49155 + .DBYT 49156 + .DBYT 49157 + .DBYT 49158 + .DBYT 49159 + .DBYT 49160 + .DBYT 49161 + .DBYT 49162 + .DBYT 49163 + .DBYT 49164 + .DBYT 49165 + .DBYT 49166 + .DBYT 49167 + .DBYT 53217 + .DBYT 53218 + .DBYT 53219 + .DBYT 53220 + .DBYT 53221 + .DBYT 53222 + .DBYT 53223 + .DBYT 53224 + .DBYT 53225 + .DBYT 53226 + .DBYT 53227 + .DBYT 53228 + .DBYT 53229 + .DBYT 53230 + .DBYT 53231 + .DBYT 53232 + .DBYT 53233 + .DBYT 53234 + .DBYT 53235 + .DBYT 53236 + .DBYT 53237 + .DBYT 53238 + .DBYT 53239 + .DBYT 53240 + .DBYT 53241 + .DBYT 53242 + .DBYT 53243 + .DBYT 53244 + .DBYT 53245 + .DBYT 53246 + .DBYT 53247 + .DBYT 53248 + .DBYT 53249 + .DBYT 53250 + .DBYT 53251 + .DBYT 53252 + .DBYT 53253 + .DBYT 53254 + .DBYT 53255 + .DBYT 53256 + .DBYT 53257 + .DBYT 53258 + .DBYT 53259 + .DBYT 53260 + .DBYT 53261 + .DBYT 53262 + .DBYT 53263 + .DBYT 57313 + .DBYT 57314 + .DBYT 57315 + .DBYT 57316 + .DBYT 57317 + .DBYT 57318 + .DBYT 57319 + .DBYT 57320 + .DBYT 57321 + .DBYT 57322 + .DBYT 57323 + .DBYT 57324 + .DBYT 57325 + .DBYT 57326 + .DBYT 57327 + .DBYT 57328 + .DBYT 57329 + .DBYT 57330 + .DBYT 57331 + .DBYT 57332 + .DBYT 57333 + .DBYT 57334 + .DBYT 57335 + .DBYT 57336 + .DBYT 57337 + .DBYT 57338 + .DBYT 57339 + .DBYT 57340 + .DBYT 57341 + .DBYT 57342 + .DBYT 57343 + .DBYT 57344 + .DBYT 57345 + .DBYT 57346 + .DBYT 57347 + .DBYT 57348 + .DBYT 57349 + .DBYT 57350 + .DBYT 57351 + .DBYT 57352 + .DBYT 57353 + .DBYT 57354 + .DBYT 57355 + .DBYT 57356 + .DBYT 57357 + .DBYT 57358 + .DBYT 57359 + .DBYT 61409 + .DBYT 61410 + .DBYT 61411 + .DBYT 61412 + .DBYT 61413 + .DBYT 61414 + .DBYT 61415 + .DBYT 61416 + .DBYT 61417 + .DBYT 61418 + .DBYT 61419 + .DBYT 61420 + .DBYT 61421 + .DBYT 61422 + .DBYT 61423 + .DBYT 61424 + .DBYT 61425 + .DBYT 61426 + .DBYT 61427 + .DBYT 61428 + .DBYT 61429 + .DBYT 61430 + .DBYT 61431 + .DBYT 61432 + .DBYT 61433 + .DBYT 61434 + .DBYT 61435 + .DBYT 61436 + .DBYT 61437 + .DBYT 61438 + .DBYT 61439 + .DBYT 61440 + .DBYT 61441 + .DBYT 61442 + .DBYT 61443 + .DBYT 61444 + .DBYT 61445 + .DBYT 61446 + .DBYT 61447 + .DBYT 61448 + .DBYT 61449 + .DBYT 61450 + .DBYT 61451 + .DBYT 61452 + .DBYT 61453 + .DBYT 61454 + .DBYT 61455 + .DBYT 65505 + .DBYT 65506 + .DBYT 65507 + .DBYT 65508 + .DBYT 65509 + .DBYT 65510 + .DBYT 65511 + .DBYT 65512 + .DBYT 65513 + .DBYT 65514 + .DBYT 65515 + .DBYT 65516 + .DBYT 65517 + .DBYT 65518 + .DBYT 65519 + .DBYT 65520 + .DBYT 65521 + .DBYT 65522 + .DBYT 65523 + .DBYT 65524 + .DBYT 65525 + .DBYT 65526 + .DBYT 65527 + .DBYT 65528 + .DBYT 65529 + .DBYT 65530 + .DBYT 65531 + .DBYT 65532 + .DBYT 65533 + .DBYT 65534 + .DBYT 65535 - ; lower case pseudo-op - .dbyt 0 - .dbyt 1 - .dbyt 2 - .dbyt 3 - .dbyt 4 - .dbyt 5 - .dbyt 6 - .dbyt 7 - .dbyt 8 - .dbyt 9 - .dbyt 10 - .dbyt 11 - .dbyt 12 - .dbyt 13 - .dbyt 14 - .dbyt 15 - .dbyt 16 - .dbyt 17 - .dbyt 18 - .dbyt 19 - .dbyt 112 - .dbyt 113 - .dbyt 114 - .dbyt 115 - .dbyt 116 - .dbyt 117 - .dbyt 118 - .dbyt 119 - .dbyt 120 - .dbyt 121 - .dbyt 122 - .dbyt 123 - .dbyt 124 - .dbyt 125 - .dbyt 126 - .dbyt 127 - .dbyt 128 - .dbyt 129 - .dbyt 130 - .dbyt 131 - .dbyt 132 - .dbyt 133 - .dbyt 134 - .dbyt 240 - .dbyt 241 - .dbyt 242 - .dbyt 243 - .dbyt 244 - .dbyt 245 - .dbyt 246 - .dbyt 247 - .dbyt 248 - .dbyt 249 - .dbyt 250 - .dbyt 251 - .dbyt 252 - .dbyt 253 - .dbyt 254 - .dbyt 255 - .dbyt 256 - .dbyt 257 - .dbyt 258 - .dbyt 259 - .dbyt 4050 - .dbyt 4051 - .dbyt 4052 - .dbyt 4053 - .dbyt 4054 - .dbyt 4055 - .dbyt 4056 - .dbyt 4057 - .dbyt 4058 - .dbyt 4059 - .dbyt 4060 - .dbyt 4061 - .dbyt 4062 - .dbyt 4063 - .dbyt 4064 - .dbyt 4065 - .dbyt 4066 - .dbyt 4067 - .dbyt 4068 - .dbyt 4069 - .dbyt 4070 - .dbyt 4071 - .dbyt 4072 - .dbyt 4073 - .dbyt 4074 - .dbyt 4075 - .dbyt 4076 - .dbyt 4077 - .dbyt 4078 - .dbyt 4079 - .dbyt 4080 - .dbyt 4081 - .dbyt 4082 - .dbyt 4083 - .dbyt 4084 - .dbyt 4085 - .dbyt 4086 - .dbyt 4087 - .dbyt 4088 - .dbyt 4089 - .dbyt 4090 - .dbyt 4091 - .dbyt 4092 - .dbyt 4093 - .dbyt 4094 - .dbyt 4095 - .dbyt 4096 - .dbyt 4097 - .dbyt 4098 - .dbyt 4099 - .dbyt 4100 - .dbyt 4101 - .dbyt 4102 - .dbyt 4103 - .dbyt 4104 - .dbyt 32752 - .dbyt 32753 - .dbyt 32754 - .dbyt 32755 - .dbyt 32756 - .dbyt 32757 - .dbyt 32758 - .dbyt 32759 - .dbyt 32760 - .dbyt 32761 - .dbyt 32762 - .dbyt 32763 - .dbyt 32764 - .dbyt 32765 - .dbyt 32766 - .dbyt 32767 - .dbyt 32768 - .dbyt 32769 - .dbyt 32770 - .dbyt 32771 - .dbyt 32772 - .dbyt 32773 - .dbyt 32774 - .dbyt 32775 - .dbyt 32776 - .dbyt 32777 - .dbyt 32778 - .dbyt 32779 - .dbyt 40929 - .dbyt 40930 - .dbyt 40931 - .dbyt 40932 - .dbyt 40933 - .dbyt 40934 - .dbyt 40935 - .dbyt 40936 - .dbyt 40937 - .dbyt 40938 - .dbyt 40939 - .dbyt 40940 - .dbyt 40941 - .dbyt 40942 - .dbyt 40943 - .dbyt 40944 - .dbyt 40945 - .dbyt 40946 - .dbyt 40947 - .dbyt 40948 - .dbyt 40949 - .dbyt 40950 - .dbyt 40951 - .dbyt 40952 - .dbyt 40953 - .dbyt 40954 - .dbyt 40955 - .dbyt 40956 - .dbyt 40957 - .dbyt 40958 - .dbyt 40959 - .dbyt 40960 - .dbyt 40961 - .dbyt 40962 - .dbyt 40963 - .dbyt 40964 - .dbyt 40965 - .dbyt 40966 - .dbyt 40967 - .dbyt 40968 - .dbyt 40969 - .dbyt 40970 - .dbyt 40971 - .dbyt 40972 - .dbyt 40973 - .dbyt 40974 - .dbyt 40975 - .dbyt 45025 - .dbyt 45026 - .dbyt 45027 - .dbyt 45028 - .dbyt 45029 - .dbyt 45030 - .dbyt 45031 - .dbyt 45032 - .dbyt 45033 - .dbyt 45034 - .dbyt 45035 - .dbyt 45036 - .dbyt 45037 - .dbyt 45038 - .dbyt 45039 - .dbyt 45040 - .dbyt 45041 - .dbyt 45042 - .dbyt 45043 - .dbyt 45044 - .dbyt 45045 - .dbyt 45046 - .dbyt 45047 - .dbyt 45048 - .dbyt 45049 - .dbyt 45050 - .dbyt 45051 - .dbyt 45052 - .dbyt 45053 - .dbyt 45054 - .dbyt 45055 - .dbyt 45056 - .dbyt 45057 - .dbyt 45058 - .dbyt 45059 - .dbyt 45060 - .dbyt 45061 - .dbyt 45062 - .dbyt 45063 - .dbyt 45064 - .dbyt 45065 - .dbyt 45066 - .dbyt 45067 - .dbyt 45068 - .dbyt 45069 - .dbyt 45070 - .dbyt 45071 - .dbyt 49121 - .dbyt 49122 - .dbyt 49123 - .dbyt 49124 - .dbyt 49125 - .dbyt 49126 - .dbyt 49127 - .dbyt 49128 - .dbyt 49129 - .dbyt 49130 - .dbyt 49131 - .dbyt 49132 - .dbyt 49133 - .dbyt 49134 - .dbyt 49135 - .dbyt 49136 - .dbyt 49137 - .dbyt 49138 - .dbyt 49139 - .dbyt 49140 - .dbyt 49141 - .dbyt 49142 - .dbyt 49143 - .dbyt 49144 - .dbyt 49145 - .dbyt 49146 - .dbyt 49147 - .dbyt 49148 - .dbyt 49149 - .dbyt 49150 - .dbyt 49151 - .dbyt 49152 - .dbyt 49153 - .dbyt 49154 - .dbyt 49155 - .dbyt 49156 - .dbyt 49157 - .dbyt 49158 - .dbyt 49159 - .dbyt 49160 - .dbyt 49161 - .dbyt 49162 - .dbyt 49163 - .dbyt 49164 - .dbyt 49165 - .dbyt 49166 - .dbyt 49167 - .dbyt 53217 - .dbyt 53218 - .dbyt 53219 - .dbyt 53220 - .dbyt 53221 - .dbyt 53222 - .dbyt 53223 - .dbyt 53224 - .dbyt 53225 - .dbyt 53226 - .dbyt 53227 - .dbyt 53228 - .dbyt 53229 - .dbyt 53230 - .dbyt 53231 - .dbyt 53232 - .dbyt 53233 - .dbyt 53234 - .dbyt 53235 - .dbyt 53236 - .dbyt 53237 - .dbyt 53238 - .dbyt 53239 - .dbyt 53240 - .dbyt 53241 - .dbyt 53242 - .dbyt 53243 - .dbyt 53244 - .dbyt 53245 - .dbyt 53246 - .dbyt 53247 - .dbyt 53248 - .dbyt 53249 - .dbyt 53250 - .dbyt 53251 - .dbyt 53252 - .dbyt 53253 - .dbyt 53254 - .dbyt 53255 - .dbyt 53256 - .dbyt 53257 - .dbyt 53258 - .dbyt 53259 - .dbyt 53260 - .dbyt 53261 - .dbyt 53262 - .dbyt 53263 - .dbyt 57313 - .dbyt 57314 - .dbyt 57315 - .dbyt 57316 - .dbyt 57317 - .dbyt 57318 - .dbyt 57319 - .dbyt 57320 - .dbyt 57321 - .dbyt 57322 - .dbyt 57323 - .dbyt 57324 - .dbyt 57325 - .dbyt 57326 - .dbyt 57327 - .dbyt 57328 - .dbyt 57329 - .dbyt 57330 - .dbyt 57331 - .dbyt 57332 - .dbyt 57333 - .dbyt 57334 - .dbyt 57335 - .dbyt 57336 - .dbyt 57337 - .dbyt 57338 - .dbyt 57339 - .dbyt 57340 - .dbyt 57341 - .dbyt 57342 - .dbyt 57343 - .dbyt 57344 - .dbyt 57345 - .dbyt 57346 - .dbyt 57347 - .dbyt 57348 - .dbyt 57349 - .dbyt 57350 - .dbyt 57351 - .dbyt 57352 - .dbyt 57353 - .dbyt 57354 - .dbyt 57355 - .dbyt 57356 - .dbyt 57357 - .dbyt 57358 - .dbyt 57359 - .dbyt 61409 - .dbyt 61410 - .dbyt 61411 - .dbyt 61412 - .dbyt 61413 - .dbyt 61414 - .dbyt 61415 - .dbyt 61416 - .dbyt 61417 - .dbyt 61418 - .dbyt 61419 - .dbyt 61420 - .dbyt 61421 - .dbyt 61422 - .dbyt 61423 - .dbyt 61424 - .dbyt 61425 - .dbyt 61426 - .dbyt 61427 - .dbyt 61428 - .dbyt 61429 - .dbyt 61430 - .dbyt 61431 - .dbyt 61432 - .dbyt 61433 - .dbyt 61434 - .dbyt 61435 - .dbyt 61436 - .dbyt 61437 - .dbyt 61438 - .dbyt 61439 - .dbyt 61440 - .dbyt 61441 - .dbyt 61442 - .dbyt 61443 - .dbyt 61444 - .dbyt 61445 - .dbyt 61446 - .dbyt 61447 - .dbyt 61448 - .dbyt 61449 - .dbyt 61450 - .dbyt 61451 - .dbyt 61452 - .dbyt 61453 - .dbyt 61454 - .dbyt 61455 - .dbyt 65505 - .dbyt 65506 - .dbyt 65507 - .dbyt 65508 - .dbyt 65509 - .dbyt 65510 - .dbyt 65511 - .dbyt 65512 - .dbyt 65513 - .dbyt 65514 - .dbyt 65515 - .dbyt 65516 - .dbyt 65517 - .dbyt 65518 - .dbyt 65519 - .dbyt 65520 - .dbyt 65521 - .dbyt 65522 - .dbyt 65523 - .dbyt 65524 - .dbyt 65525 - .dbyt 65526 - .dbyt 65527 - .dbyt 65528 - .dbyt 65529 - .dbyt 65530 - .dbyt 65531 - .dbyt 65532 - .dbyt 65533 - .dbyt 65534 - .dbyt 65535 + ; lower case pseudo-op + .dbyt 0 + .dbyt 1 + .dbyt 2 + .dbyt 3 + .dbyt 4 + .dbyt 5 + .dbyt 6 + .dbyt 7 + .dbyt 8 + .dbyt 9 + .dbyt 10 + .dbyt 11 + .dbyt 12 + .dbyt 13 + .dbyt 14 + .dbyt 15 + .dbyt 16 + .dbyt 17 + .dbyt 18 + .dbyt 19 + .dbyt 112 + .dbyt 113 + .dbyt 114 + .dbyt 115 + .dbyt 116 + .dbyt 117 + .dbyt 118 + .dbyt 119 + .dbyt 120 + .dbyt 121 + .dbyt 122 + .dbyt 123 + .dbyt 124 + .dbyt 125 + .dbyt 126 + .dbyt 127 + .dbyt 128 + .dbyt 129 + .dbyt 130 + .dbyt 131 + .dbyt 132 + .dbyt 133 + .dbyt 134 + .dbyt 240 + .dbyt 241 + .dbyt 242 + .dbyt 243 + .dbyt 244 + .dbyt 245 + .dbyt 246 + .dbyt 247 + .dbyt 248 + .dbyt 249 + .dbyt 250 + .dbyt 251 + .dbyt 252 + .dbyt 253 + .dbyt 254 + .dbyt 255 + .dbyt 256 + .dbyt 257 + .dbyt 258 + .dbyt 259 + .dbyt 4050 + .dbyt 4051 + .dbyt 4052 + .dbyt 4053 + .dbyt 4054 + .dbyt 4055 + .dbyt 4056 + .dbyt 4057 + .dbyt 4058 + .dbyt 4059 + .dbyt 4060 + .dbyt 4061 + .dbyt 4062 + .dbyt 4063 + .dbyt 4064 + .dbyt 4065 + .dbyt 4066 + .dbyt 4067 + .dbyt 4068 + .dbyt 4069 + .dbyt 4070 + .dbyt 4071 + .dbyt 4072 + .dbyt 4073 + .dbyt 4074 + .dbyt 4075 + .dbyt 4076 + .dbyt 4077 + .dbyt 4078 + .dbyt 4079 + .dbyt 4080 + .dbyt 4081 + .dbyt 4082 + .dbyt 4083 + .dbyt 4084 + .dbyt 4085 + .dbyt 4086 + .dbyt 4087 + .dbyt 4088 + .dbyt 4089 + .dbyt 4090 + .dbyt 4091 + .dbyt 4092 + .dbyt 4093 + .dbyt 4094 + .dbyt 4095 + .dbyt 4096 + .dbyt 4097 + .dbyt 4098 + .dbyt 4099 + .dbyt 4100 + .dbyt 4101 + .dbyt 4102 + .dbyt 4103 + .dbyt 4104 + .dbyt 32752 + .dbyt 32753 + .dbyt 32754 + .dbyt 32755 + .dbyt 32756 + .dbyt 32757 + .dbyt 32758 + .dbyt 32759 + .dbyt 32760 + .dbyt 32761 + .dbyt 32762 + .dbyt 32763 + .dbyt 32764 + .dbyt 32765 + .dbyt 32766 + .dbyt 32767 + .dbyt 32768 + .dbyt 32769 + .dbyt 32770 + .dbyt 32771 + .dbyt 32772 + .dbyt 32773 + .dbyt 32774 + .dbyt 32775 + .dbyt 32776 + .dbyt 32777 + .dbyt 32778 + .dbyt 32779 + .dbyt 40929 + .dbyt 40930 + .dbyt 40931 + .dbyt 40932 + .dbyt 40933 + .dbyt 40934 + .dbyt 40935 + .dbyt 40936 + .dbyt 40937 + .dbyt 40938 + .dbyt 40939 + .dbyt 40940 + .dbyt 40941 + .dbyt 40942 + .dbyt 40943 + .dbyt 40944 + .dbyt 40945 + .dbyt 40946 + .dbyt 40947 + .dbyt 40948 + .dbyt 40949 + .dbyt 40950 + .dbyt 40951 + .dbyt 40952 + .dbyt 40953 + .dbyt 40954 + .dbyt 40955 + .dbyt 40956 + .dbyt 40957 + .dbyt 40958 + .dbyt 40959 + .dbyt 40960 + .dbyt 40961 + .dbyt 40962 + .dbyt 40963 + .dbyt 40964 + .dbyt 40965 + .dbyt 40966 + .dbyt 40967 + .dbyt 40968 + .dbyt 40969 + .dbyt 40970 + .dbyt 40971 + .dbyt 40972 + .dbyt 40973 + .dbyt 40974 + .dbyt 40975 + .dbyt 45025 + .dbyt 45026 + .dbyt 45027 + .dbyt 45028 + .dbyt 45029 + .dbyt 45030 + .dbyt 45031 + .dbyt 45032 + .dbyt 45033 + .dbyt 45034 + .dbyt 45035 + .dbyt 45036 + .dbyt 45037 + .dbyt 45038 + .dbyt 45039 + .dbyt 45040 + .dbyt 45041 + .dbyt 45042 + .dbyt 45043 + .dbyt 45044 + .dbyt 45045 + .dbyt 45046 + .dbyt 45047 + .dbyt 45048 + .dbyt 45049 + .dbyt 45050 + .dbyt 45051 + .dbyt 45052 + .dbyt 45053 + .dbyt 45054 + .dbyt 45055 + .dbyt 45056 + .dbyt 45057 + .dbyt 45058 + .dbyt 45059 + .dbyt 45060 + .dbyt 45061 + .dbyt 45062 + .dbyt 45063 + .dbyt 45064 + .dbyt 45065 + .dbyt 45066 + .dbyt 45067 + .dbyt 45068 + .dbyt 45069 + .dbyt 45070 + .dbyt 45071 + .dbyt 49121 + .dbyt 49122 + .dbyt 49123 + .dbyt 49124 + .dbyt 49125 + .dbyt 49126 + .dbyt 49127 + .dbyt 49128 + .dbyt 49129 + .dbyt 49130 + .dbyt 49131 + .dbyt 49132 + .dbyt 49133 + .dbyt 49134 + .dbyt 49135 + .dbyt 49136 + .dbyt 49137 + .dbyt 49138 + .dbyt 49139 + .dbyt 49140 + .dbyt 49141 + .dbyt 49142 + .dbyt 49143 + .dbyt 49144 + .dbyt 49145 + .dbyt 49146 + .dbyt 49147 + .dbyt 49148 + .dbyt 49149 + .dbyt 49150 + .dbyt 49151 + .dbyt 49152 + .dbyt 49153 + .dbyt 49154 + .dbyt 49155 + .dbyt 49156 + .dbyt 49157 + .dbyt 49158 + .dbyt 49159 + .dbyt 49160 + .dbyt 49161 + .dbyt 49162 + .dbyt 49163 + .dbyt 49164 + .dbyt 49165 + .dbyt 49166 + .dbyt 49167 + .dbyt 53217 + .dbyt 53218 + .dbyt 53219 + .dbyt 53220 + .dbyt 53221 + .dbyt 53222 + .dbyt 53223 + .dbyt 53224 + .dbyt 53225 + .dbyt 53226 + .dbyt 53227 + .dbyt 53228 + .dbyt 53229 + .dbyt 53230 + .dbyt 53231 + .dbyt 53232 + .dbyt 53233 + .dbyt 53234 + .dbyt 53235 + .dbyt 53236 + .dbyt 53237 + .dbyt 53238 + .dbyt 53239 + .dbyt 53240 + .dbyt 53241 + .dbyt 53242 + .dbyt 53243 + .dbyt 53244 + .dbyt 53245 + .dbyt 53246 + .dbyt 53247 + .dbyt 53248 + .dbyt 53249 + .dbyt 53250 + .dbyt 53251 + .dbyt 53252 + .dbyt 53253 + .dbyt 53254 + .dbyt 53255 + .dbyt 53256 + .dbyt 53257 + .dbyt 53258 + .dbyt 53259 + .dbyt 53260 + .dbyt 53261 + .dbyt 53262 + .dbyt 53263 + .dbyt 57313 + .dbyt 57314 + .dbyt 57315 + .dbyt 57316 + .dbyt 57317 + .dbyt 57318 + .dbyt 57319 + .dbyt 57320 + .dbyt 57321 + .dbyt 57322 + .dbyt 57323 + .dbyt 57324 + .dbyt 57325 + .dbyt 57326 + .dbyt 57327 + .dbyt 57328 + .dbyt 57329 + .dbyt 57330 + .dbyt 57331 + .dbyt 57332 + .dbyt 57333 + .dbyt 57334 + .dbyt 57335 + .dbyt 57336 + .dbyt 57337 + .dbyt 57338 + .dbyt 57339 + .dbyt 57340 + .dbyt 57341 + .dbyt 57342 + .dbyt 57343 + .dbyt 57344 + .dbyt 57345 + .dbyt 57346 + .dbyt 57347 + .dbyt 57348 + .dbyt 57349 + .dbyt 57350 + .dbyt 57351 + .dbyt 57352 + .dbyt 57353 + .dbyt 57354 + .dbyt 57355 + .dbyt 57356 + .dbyt 57357 + .dbyt 57358 + .dbyt 57359 + .dbyt 61409 + .dbyt 61410 + .dbyt 61411 + .dbyt 61412 + .dbyt 61413 + .dbyt 61414 + .dbyt 61415 + .dbyt 61416 + .dbyt 61417 + .dbyt 61418 + .dbyt 61419 + .dbyt 61420 + .dbyt 61421 + .dbyt 61422 + .dbyt 61423 + .dbyt 61424 + .dbyt 61425 + .dbyt 61426 + .dbyt 61427 + .dbyt 61428 + .dbyt 61429 + .dbyt 61430 + .dbyt 61431 + .dbyt 61432 + .dbyt 61433 + .dbyt 61434 + .dbyt 61435 + .dbyt 61436 + .dbyt 61437 + .dbyt 61438 + .dbyt 61439 + .dbyt 61440 + .dbyt 61441 + .dbyt 61442 + .dbyt 61443 + .dbyt 61444 + .dbyt 61445 + .dbyt 61446 + .dbyt 61447 + .dbyt 61448 + .dbyt 61449 + .dbyt 61450 + .dbyt 61451 + .dbyt 61452 + .dbyt 61453 + .dbyt 61454 + .dbyt 61455 + .dbyt 65505 + .dbyt 65506 + .dbyt 65507 + .dbyt 65508 + .dbyt 65509 + .dbyt 65510 + .dbyt 65511 + .dbyt 65512 + .dbyt 65513 + .dbyt 65514 + .dbyt 65515 + .dbyt 65516 + .dbyt 65517 + .dbyt 65518 + .dbyt 65519 + .dbyt 65520 + .dbyt 65521 + .dbyt 65522 + .dbyt 65523 + .dbyt 65524 + .dbyt 65525 + .dbyt 65526 + .dbyt 65527 + .dbyt 65528 + .dbyt 65529 + .dbyt 65530 + .dbyt 65531 + .dbyt 65532 + .dbyt 65533 + .dbyt 65534 + .dbyt 65535 - ; hex values - .dbyt $0 - .dbyt $1 - .dbyt $2 - .dbyt $3 - .dbyt $4 - .dbyt $5 - .dbyt $6 - .dbyt $7 - .dbyt $8 - .dbyt $9 - .dbyt $a - .dbyt $b - .dbyt $c - .dbyt $d - .dbyt $e - .dbyt $f - .dbyt $10 - .dbyt $11 - .dbyt $12 - .dbyt $13 - .dbyt $70 - .dbyt $71 - .dbyt $72 - .dbyt $73 - .dbyt $74 - .dbyt $75 - .dbyt $76 - .dbyt $77 - .dbyt $78 - .dbyt $79 - .dbyt $7a - .dbyt $7b - .dbyt $7c - .dbyt $7d - .dbyt $7e - .dbyt $7f - .dbyt $80 - .dbyt $81 - .dbyt $82 - .dbyt $83 - .dbyt $84 - .dbyt $85 - .dbyt $86 - .dbyt $f0 - .dbyt $f1 - .dbyt $f2 - .dbyt $f3 - .dbyt $f4 - .dbyt $f5 - .dbyt $f6 - .dbyt $f7 - .dbyt $f8 - .dbyt $f9 - .dbyt $fa - .dbyt $fb - .dbyt $fc - .dbyt $fd - .dbyt $fe - .dbyt $ff - .dbyt $100 - .dbyt $101 - .dbyt $102 - .dbyt $103 - .dbyt $fd2 - .dbyt $fd3 - .dbyt $fd4 - .dbyt $fd5 - .dbyt $fd6 - .dbyt $fd7 - .dbyt $fd8 - .dbyt $fd9 - .dbyt $fda - .dbyt $fdb - .dbyt $fdc - .dbyt $fdd - .dbyt $fde - .dbyt $fdf - .dbyt $fe0 - .dbyt $fe1 - .dbyt $fe2 - .dbyt $fe3 - .dbyt $fe4 - .dbyt $fe5 - .dbyt $fe6 - .dbyt $fe7 - .dbyt $fe8 - .dbyt $fe9 - .dbyt $fea - .dbyt $feb - .dbyt $fec - .dbyt $fed - .dbyt $fee - .dbyt $fef - .dbyt $ff0 - .dbyt $ff1 - .dbyt $ff2 - .dbyt $ff3 - .dbyt $ff4 - .dbyt $ff5 - .dbyt $ff6 - .dbyt $ff7 - .dbyt $ff8 - .dbyt $ff9 - .dbyt $ffa - .dbyt $ffb - .dbyt $ffc - .dbyt $ffd - .dbyt $ffe - .dbyt $fff - .dbyt $1000 - .dbyt $1001 - .dbyt $1002 - .dbyt $1003 - .dbyt $1004 - .dbyt $1005 - .dbyt $1006 - .dbyt $1007 - .dbyt $1008 - .dbyt $7ff0 - .dbyt $7ff1 - .dbyt $7ff2 - .dbyt $7ff3 - .dbyt $7ff4 - .dbyt $7ff5 - .dbyt $7ff6 - .dbyt $7ff7 - .dbyt $7ff8 - .dbyt $7ff9 - .dbyt $7ffa - .dbyt $7ffb - .dbyt $7ffc - .dbyt $7ffd - .dbyt $7ffe - .dbyt $7fff - .dbyt $8000 - .dbyt $8001 - .dbyt $8002 - .dbyt $8003 - .dbyt $8004 - .dbyt $8005 - .dbyt $8006 - .dbyt $8007 - .dbyt $8008 - .dbyt $8009 - .dbyt $800a - .dbyt $800b - .dbyt $9fe1 - .dbyt $9fe2 - .dbyt $9fe3 - .dbyt $9fe4 - .dbyt $9fe5 - .dbyt $9fe6 - .dbyt $9fe7 - .dbyt $9fe8 - .dbyt $9fe9 - .dbyt $9fea - .dbyt $9feb - .dbyt $9fec - .dbyt $9fed - .dbyt $9fee - .dbyt $9fef - .dbyt $9ff0 - .dbyt $9ff1 - .dbyt $9ff2 - .dbyt $9ff3 - .dbyt $9ff4 - .dbyt $9ff5 - .dbyt $9ff6 - .dbyt $9ff7 - .dbyt $9ff8 - .dbyt $9ff9 - .dbyt $9ffa - .dbyt $9ffb - .dbyt $9ffc - .dbyt $9ffd - .dbyt $9ffe - .dbyt $9fff - .dbyt $a000 - .dbyt $a001 - .dbyt $a002 - .dbyt $a003 - .dbyt $a004 - .dbyt $a005 - .dbyt $a006 - .dbyt $a007 - .dbyt $a008 - .dbyt $a009 - .dbyt $a00a - .dbyt $a00b - .dbyt $a00c - .dbyt $a00d - .dbyt $a00e - .dbyt $a00f - .dbyt $afe1 - .dbyt $afe2 - .dbyt $afe3 - .dbyt $afe4 - .dbyt $afe5 - .dbyt $afe6 - .dbyt $afe7 - .dbyt $afe8 - .dbyt $afe9 - .dbyt $afea - .dbyt $afeb - .dbyt $afec - .dbyt $afed - .dbyt $afee - .dbyt $afef - .dbyt $aff0 - .dbyt $aff1 - .dbyt $aff2 - .dbyt $aff3 - .dbyt $aff4 - .dbyt $aff5 - .dbyt $aff6 - .dbyt $aff7 - .dbyt $aff8 - .dbyt $aff9 - .dbyt $affa - .dbyt $affb - .dbyt $affc - .dbyt $affd - .dbyt $affe - .dbyt $afff - .dbyt $b000 - .dbyt $b001 - .dbyt $b002 - .dbyt $b003 - .dbyt $b004 - .dbyt $b005 - .dbyt $b006 - .dbyt $b007 - .dbyt $b008 - .dbyt $b009 - .dbyt $b00a - .dbyt $b00b - .dbyt $b00c - .dbyt $b00d - .dbyt $b00e - .dbyt $b00f - .dbyt $bfe1 - .dbyt $bfe2 - .dbyt $bfe3 - .dbyt $bfe4 - .dbyt $bfe5 - .dbyt $bfe6 - .dbyt $bfe7 - .dbyt $bfe8 - .dbyt $bfe9 - .dbyt $bfea - .dbyt $bfeb - .dbyt $bfec - .dbyt $bfed - .dbyt $bfee - .dbyt $bfef - .dbyt $bff0 - .dbyt $bff1 - .dbyt $bff2 - .dbyt $bff3 - .dbyt $bff4 - .dbyt $bff5 - .dbyt $bff6 - .dbyt $bff7 - .dbyt $bff8 - .dbyt $bff9 - .dbyt $bffa - .dbyt $bffb - .dbyt $bffc - .dbyt $bffd - .dbyt $bffe - .dbyt $bfff - .dbyt $c000 - .dbyt $c001 - .dbyt $c002 - .dbyt $c003 - .dbyt $c004 - .dbyt $c005 - .dbyt $c006 - .dbyt $c007 - .dbyt $c008 - .dbyt $c009 - .dbyt $c00a - .dbyt $c00b - .dbyt $c00c - .dbyt $c00d - .dbyt $c00e - .dbyt $c00f - .dbyt $cfe1 - .dbyt $cfe2 - .dbyt $cfe3 - .dbyt $cfe4 - .dbyt $cfe5 - .dbyt $cfe6 - .dbyt $cfe7 - .dbyt $cfe8 - .dbyt $cfe9 - .dbyt $cfea - .dbyt $cfeb - .dbyt $cfec - .dbyt $cfed - .dbyt $cfee - .dbyt $cfef - .dbyt $cff0 - .dbyt $cff1 - .dbyt $cff2 - .dbyt $cff3 - .dbyt $cff4 - .dbyt $cff5 - .dbyt $cff6 - .dbyt $cff7 - .dbyt $cff8 - .dbyt $cff9 - .dbyt $cffa - .dbyt $cffb - .dbyt $cffc - .dbyt $cffd - .dbyt $cffe - .dbyt $cfff - .dbyt $d000 - .dbyt $d001 - .dbyt $d002 - .dbyt $d003 - .dbyt $d004 - .dbyt $d005 - .dbyt $d006 - .dbyt $d007 - .dbyt $d008 - .dbyt $d009 - .dbyt $d00a - .dbyt $d00b - .dbyt $d00c - .dbyt $d00d - .dbyt $d00e - .dbyt $d00f - .dbyt $dfe1 - .dbyt $dfe2 - .dbyt $dfe3 - .dbyt $dfe4 - .dbyt $dfe5 - .dbyt $dfe6 - .dbyt $dfe7 - .dbyt $dfe8 - .dbyt $dfe9 - .dbyt $dfea - .dbyt $dfeb - .dbyt $dfec - .dbyt $dfed - .dbyt $dfee - .dbyt $dfef - .dbyt $dff0 - .dbyt $dff1 - .dbyt $dff2 - .dbyt $dff3 - .dbyt $dff4 - .dbyt $dff5 - .dbyt $dff6 - .dbyt $dff7 - .dbyt $dff8 - .dbyt $dff9 - .dbyt $dffa - .dbyt $dffb - .dbyt $dffc - .dbyt $dffd - .dbyt $dffe - .dbyt $dfff - .dbyt $e000 - .dbyt $e001 - .dbyt $e002 - .dbyt $e003 - .dbyt $e004 - .dbyt $e005 - .dbyt $e006 - .dbyt $e007 - .dbyt $e008 - .dbyt $e009 - .dbyt $e00a - .dbyt $e00b - .dbyt $e00c - .dbyt $e00d - .dbyt $e00e - .dbyt $e00f - .dbyt $efe1 - .dbyt $efe2 - .dbyt $efe3 - .dbyt $efe4 - .dbyt $efe5 - .dbyt $efe6 - .dbyt $efe7 - .dbyt $efe8 - .dbyt $efe9 - .dbyt $efea - .dbyt $efeb - .dbyt $efec - .dbyt $efed - .dbyt $efee - .dbyt $efef - .dbyt $eff0 - .dbyt $eff1 - .dbyt $eff2 - .dbyt $eff3 - .dbyt $eff4 - .dbyt $eff5 - .dbyt $eff6 - .dbyt $eff7 - .dbyt $eff8 - .dbyt $eff9 - .dbyt $effa - .dbyt $effb - .dbyt $effc - .dbyt $effd - .dbyt $effe - .dbyt $efff - .dbyt $f000 - .dbyt $f001 - .dbyt $f002 - .dbyt $f003 - .dbyt $f004 - .dbyt $f005 - .dbyt $f006 - .dbyt $f007 - .dbyt $f008 - .dbyt $f009 - .dbyt $f00a - .dbyt $f00b - .dbyt $f00c - .dbyt $f00d - .dbyt $f00e - .dbyt $f00f - .dbyt $ffe1 - .dbyt $ffe2 - .dbyt $ffe3 - .dbyt $ffe4 - .dbyt $ffe5 - .dbyt $ffe6 - .dbyt $ffe7 - .dbyt $ffe8 - .dbyt $ffe9 - .dbyt $ffea - .dbyt $ffeb - .dbyt $ffec - .dbyt $ffed - .dbyt $ffee - .dbyt $ffef - .dbyt $fff0 - .dbyt $fff1 - .dbyt $fff2 - .dbyt $fff3 - .dbyt $fff4 - .dbyt $fff5 - .dbyt $fff6 - .dbyt $fff7 - .dbyt $fff8 - .dbyt $fff9 - .dbyt $fffa - .dbyt $fffb - .dbyt $fffc - .dbyt $fffd - .dbyt $fffe - .dbyt $ffff + ; hex values + .dbyt $0 + .dbyt $1 + .dbyt $2 + .dbyt $3 + .dbyt $4 + .dbyt $5 + .dbyt $6 + .dbyt $7 + .dbyt $8 + .dbyt $9 + .dbyt $a + .dbyt $b + .dbyt $c + .dbyt $d + .dbyt $e + .dbyt $f + .dbyt $10 + .dbyt $11 + .dbyt $12 + .dbyt $13 + .dbyt $70 + .dbyt $71 + .dbyt $72 + .dbyt $73 + .dbyt $74 + .dbyt $75 + .dbyt $76 + .dbyt $77 + .dbyt $78 + .dbyt $79 + .dbyt $7a + .dbyt $7b + .dbyt $7c + .dbyt $7d + .dbyt $7e + .dbyt $7f + .dbyt $80 + .dbyt $81 + .dbyt $82 + .dbyt $83 + .dbyt $84 + .dbyt $85 + .dbyt $86 + .dbyt $f0 + .dbyt $f1 + .dbyt $f2 + .dbyt $f3 + .dbyt $f4 + .dbyt $f5 + .dbyt $f6 + .dbyt $f7 + .dbyt $f8 + .dbyt $f9 + .dbyt $fa + .dbyt $fb + .dbyt $fc + .dbyt $fd + .dbyt $fe + .dbyt $ff + .dbyt $100 + .dbyt $101 + .dbyt $102 + .dbyt $103 + .dbyt $fd2 + .dbyt $fd3 + .dbyt $fd4 + .dbyt $fd5 + .dbyt $fd6 + .dbyt $fd7 + .dbyt $fd8 + .dbyt $fd9 + .dbyt $fda + .dbyt $fdb + .dbyt $fdc + .dbyt $fdd + .dbyt $fde + .dbyt $fdf + .dbyt $fe0 + .dbyt $fe1 + .dbyt $fe2 + .dbyt $fe3 + .dbyt $fe4 + .dbyt $fe5 + .dbyt $fe6 + .dbyt $fe7 + .dbyt $fe8 + .dbyt $fe9 + .dbyt $fea + .dbyt $feb + .dbyt $fec + .dbyt $fed + .dbyt $fee + .dbyt $fef + .dbyt $ff0 + .dbyt $ff1 + .dbyt $ff2 + .dbyt $ff3 + .dbyt $ff4 + .dbyt $ff5 + .dbyt $ff6 + .dbyt $ff7 + .dbyt $ff8 + .dbyt $ff9 + .dbyt $ffa + .dbyt $ffb + .dbyt $ffc + .dbyt $ffd + .dbyt $ffe + .dbyt $fff + .dbyt $1000 + .dbyt $1001 + .dbyt $1002 + .dbyt $1003 + .dbyt $1004 + .dbyt $1005 + .dbyt $1006 + .dbyt $1007 + .dbyt $1008 + .dbyt $7ff0 + .dbyt $7ff1 + .dbyt $7ff2 + .dbyt $7ff3 + .dbyt $7ff4 + .dbyt $7ff5 + .dbyt $7ff6 + .dbyt $7ff7 + .dbyt $7ff8 + .dbyt $7ff9 + .dbyt $7ffa + .dbyt $7ffb + .dbyt $7ffc + .dbyt $7ffd + .dbyt $7ffe + .dbyt $7fff + .dbyt $8000 + .dbyt $8001 + .dbyt $8002 + .dbyt $8003 + .dbyt $8004 + .dbyt $8005 + .dbyt $8006 + .dbyt $8007 + .dbyt $8008 + .dbyt $8009 + .dbyt $800a + .dbyt $800b + .dbyt $9fe1 + .dbyt $9fe2 + .dbyt $9fe3 + .dbyt $9fe4 + .dbyt $9fe5 + .dbyt $9fe6 + .dbyt $9fe7 + .dbyt $9fe8 + .dbyt $9fe9 + .dbyt $9fea + .dbyt $9feb + .dbyt $9fec + .dbyt $9fed + .dbyt $9fee + .dbyt $9fef + .dbyt $9ff0 + .dbyt $9ff1 + .dbyt $9ff2 + .dbyt $9ff3 + .dbyt $9ff4 + .dbyt $9ff5 + .dbyt $9ff6 + .dbyt $9ff7 + .dbyt $9ff8 + .dbyt $9ff9 + .dbyt $9ffa + .dbyt $9ffb + .dbyt $9ffc + .dbyt $9ffd + .dbyt $9ffe + .dbyt $9fff + .dbyt $a000 + .dbyt $a001 + .dbyt $a002 + .dbyt $a003 + .dbyt $a004 + .dbyt $a005 + .dbyt $a006 + .dbyt $a007 + .dbyt $a008 + .dbyt $a009 + .dbyt $a00a + .dbyt $a00b + .dbyt $a00c + .dbyt $a00d + .dbyt $a00e + .dbyt $a00f + .dbyt $afe1 + .dbyt $afe2 + .dbyt $afe3 + .dbyt $afe4 + .dbyt $afe5 + .dbyt $afe6 + .dbyt $afe7 + .dbyt $afe8 + .dbyt $afe9 + .dbyt $afea + .dbyt $afeb + .dbyt $afec + .dbyt $afed + .dbyt $afee + .dbyt $afef + .dbyt $aff0 + .dbyt $aff1 + .dbyt $aff2 + .dbyt $aff3 + .dbyt $aff4 + .dbyt $aff5 + .dbyt $aff6 + .dbyt $aff7 + .dbyt $aff8 + .dbyt $aff9 + .dbyt $affa + .dbyt $affb + .dbyt $affc + .dbyt $affd + .dbyt $affe + .dbyt $afff + .dbyt $b000 + .dbyt $b001 + .dbyt $b002 + .dbyt $b003 + .dbyt $b004 + .dbyt $b005 + .dbyt $b006 + .dbyt $b007 + .dbyt $b008 + .dbyt $b009 + .dbyt $b00a + .dbyt $b00b + .dbyt $b00c + .dbyt $b00d + .dbyt $b00e + .dbyt $b00f + .dbyt $bfe1 + .dbyt $bfe2 + .dbyt $bfe3 + .dbyt $bfe4 + .dbyt $bfe5 + .dbyt $bfe6 + .dbyt $bfe7 + .dbyt $bfe8 + .dbyt $bfe9 + .dbyt $bfea + .dbyt $bfeb + .dbyt $bfec + .dbyt $bfed + .dbyt $bfee + .dbyt $bfef + .dbyt $bff0 + .dbyt $bff1 + .dbyt $bff2 + .dbyt $bff3 + .dbyt $bff4 + .dbyt $bff5 + .dbyt $bff6 + .dbyt $bff7 + .dbyt $bff8 + .dbyt $bff9 + .dbyt $bffa + .dbyt $bffb + .dbyt $bffc + .dbyt $bffd + .dbyt $bffe + .dbyt $bfff + .dbyt $c000 + .dbyt $c001 + .dbyt $c002 + .dbyt $c003 + .dbyt $c004 + .dbyt $c005 + .dbyt $c006 + .dbyt $c007 + .dbyt $c008 + .dbyt $c009 + .dbyt $c00a + .dbyt $c00b + .dbyt $c00c + .dbyt $c00d + .dbyt $c00e + .dbyt $c00f + .dbyt $cfe1 + .dbyt $cfe2 + .dbyt $cfe3 + .dbyt $cfe4 + .dbyt $cfe5 + .dbyt $cfe6 + .dbyt $cfe7 + .dbyt $cfe8 + .dbyt $cfe9 + .dbyt $cfea + .dbyt $cfeb + .dbyt $cfec + .dbyt $cfed + .dbyt $cfee + .dbyt $cfef + .dbyt $cff0 + .dbyt $cff1 + .dbyt $cff2 + .dbyt $cff3 + .dbyt $cff4 + .dbyt $cff5 + .dbyt $cff6 + .dbyt $cff7 + .dbyt $cff8 + .dbyt $cff9 + .dbyt $cffa + .dbyt $cffb + .dbyt $cffc + .dbyt $cffd + .dbyt $cffe + .dbyt $cfff + .dbyt $d000 + .dbyt $d001 + .dbyt $d002 + .dbyt $d003 + .dbyt $d004 + .dbyt $d005 + .dbyt $d006 + .dbyt $d007 + .dbyt $d008 + .dbyt $d009 + .dbyt $d00a + .dbyt $d00b + .dbyt $d00c + .dbyt $d00d + .dbyt $d00e + .dbyt $d00f + .dbyt $dfe1 + .dbyt $dfe2 + .dbyt $dfe3 + .dbyt $dfe4 + .dbyt $dfe5 + .dbyt $dfe6 + .dbyt $dfe7 + .dbyt $dfe8 + .dbyt $dfe9 + .dbyt $dfea + .dbyt $dfeb + .dbyt $dfec + .dbyt $dfed + .dbyt $dfee + .dbyt $dfef + .dbyt $dff0 + .dbyt $dff1 + .dbyt $dff2 + .dbyt $dff3 + .dbyt $dff4 + .dbyt $dff5 + .dbyt $dff6 + .dbyt $dff7 + .dbyt $dff8 + .dbyt $dff9 + .dbyt $dffa + .dbyt $dffb + .dbyt $dffc + .dbyt $dffd + .dbyt $dffe + .dbyt $dfff + .dbyt $e000 + .dbyt $e001 + .dbyt $e002 + .dbyt $e003 + .dbyt $e004 + .dbyt $e005 + .dbyt $e006 + .dbyt $e007 + .dbyt $e008 + .dbyt $e009 + .dbyt $e00a + .dbyt $e00b + .dbyt $e00c + .dbyt $e00d + .dbyt $e00e + .dbyt $e00f + .dbyt $efe1 + .dbyt $efe2 + .dbyt $efe3 + .dbyt $efe4 + .dbyt $efe5 + .dbyt $efe6 + .dbyt $efe7 + .dbyt $efe8 + .dbyt $efe9 + .dbyt $efea + .dbyt $efeb + .dbyt $efec + .dbyt $efed + .dbyt $efee + .dbyt $efef + .dbyt $eff0 + .dbyt $eff1 + .dbyt $eff2 + .dbyt $eff3 + .dbyt $eff4 + .dbyt $eff5 + .dbyt $eff6 + .dbyt $eff7 + .dbyt $eff8 + .dbyt $eff9 + .dbyt $effa + .dbyt $effb + .dbyt $effc + .dbyt $effd + .dbyt $effe + .dbyt $efff + .dbyt $f000 + .dbyt $f001 + .dbyt $f002 + .dbyt $f003 + .dbyt $f004 + .dbyt $f005 + .dbyt $f006 + .dbyt $f007 + .dbyt $f008 + .dbyt $f009 + .dbyt $f00a + .dbyt $f00b + .dbyt $f00c + .dbyt $f00d + .dbyt $f00e + .dbyt $f00f + .dbyt $ffe1 + .dbyt $ffe2 + .dbyt $ffe3 + .dbyt $ffe4 + .dbyt $ffe5 + .dbyt $ffe6 + .dbyt $ffe7 + .dbyt $ffe8 + .dbyt $ffe9 + .dbyt $ffea + .dbyt $ffeb + .dbyt $ffec + .dbyt $ffed + .dbyt $ffee + .dbyt $ffef + .dbyt $fff0 + .dbyt $fff1 + .dbyt $fff2 + .dbyt $fff3 + .dbyt $fff4 + .dbyt $fff5 + .dbyt $fff6 + .dbyt $fff7 + .dbyt $fff8 + .dbyt $fff9 + .dbyt $fffa + .dbyt $fffb + .dbyt $fffc + .dbyt $fffd + .dbyt $fffe + .dbyt $ffff - ; hex values, uppercase - .dbyt $0 - .dbyt $1 - .dbyt $2 - .dbyt $3 - .dbyt $4 - .dbyt $5 - .dbyt $6 - .dbyt $7 - .dbyt $8 - .dbyt $9 - .dbyt $A - .dbyt $B - .dbyt $C - .dbyt $D - .dbyt $E - .dbyt $F - .dbyt $10 - .dbyt $11 - .dbyt $12 - .dbyt $13 - .dbyt $70 - .dbyt $71 - .dbyt $72 - .dbyt $73 - .dbyt $74 - .dbyt $75 - .dbyt $76 - .dbyt $77 - .dbyt $78 - .dbyt $79 - .dbyt $7A - .dbyt $7B - .dbyt $7C - .dbyt $7D - .dbyt $7E - .dbyt $7F - .dbyt $80 - .dbyt $81 - .dbyt $82 - .dbyt $83 - .dbyt $84 - .dbyt $85 - .dbyt $86 - .dbyt $F0 - .dbyt $F1 - .dbyt $F2 - .dbyt $F3 - .dbyt $F4 - .dbyt $F5 - .dbyt $F6 - .dbyt $F7 - .dbyt $F8 - .dbyt $F9 - .dbyt $FA - .dbyt $FB - .dbyt $FC - .dbyt $FD - .dbyt $FE - .dbyt $FF - .dbyt $100 - .dbyt $101 - .dbyt $102 - .dbyt $103 - .dbyt $FD2 - .dbyt $FD3 - .dbyt $FD4 - .dbyt $FD5 - .dbyt $FD6 - .dbyt $FD7 - .dbyt $FD8 - .dbyt $FD9 - .dbyt $FDA - .dbyt $FDB - .dbyt $FDC - .dbyt $FDD - .dbyt $FDE - .dbyt $FDF - .dbyt $FE0 - .dbyt $FE1 - .dbyt $FE2 - .dbyt $FE3 - .dbyt $FE4 - .dbyt $FE5 - .dbyt $FE6 - .dbyt $FE7 - .dbyt $FE8 - .dbyt $FE9 - .dbyt $FEA - .dbyt $FEB - .dbyt $FEC - .dbyt $FED - .dbyt $FEE - .dbyt $FEF - .dbyt $FF0 - .dbyt $FF1 - .dbyt $FF2 - .dbyt $FF3 - .dbyt $FF4 - .dbyt $FF5 - .dbyt $FF6 - .dbyt $FF7 - .dbyt $FF8 - .dbyt $FF9 - .dbyt $FFA - .dbyt $FFB - .dbyt $FFC - .dbyt $FFD - .dbyt $FFE - .dbyt $FFF - .dbyt $1000 - .dbyt $1001 - .dbyt $1002 - .dbyt $1003 - .dbyt $1004 - .dbyt $1005 - .dbyt $1006 - .dbyt $1007 - .dbyt $1008 - .dbyt $7FF0 - .dbyt $7FF1 - .dbyt $7FF2 - .dbyt $7FF3 - .dbyt $7FF4 - .dbyt $7FF5 - .dbyt $7FF6 - .dbyt $7FF7 - .dbyt $7FF8 - .dbyt $7FF9 - .dbyt $7FFA - .dbyt $7FFB - .dbyt $7FFC - .dbyt $7FFD - .dbyt $7FFE - .dbyt $7FFF - .dbyt $8000 - .dbyt $8001 - .dbyt $8002 - .dbyt $8003 - .dbyt $8004 - .dbyt $8005 - .dbyt $8006 - .dbyt $8007 - .dbyt $8008 - .dbyt $8009 - .dbyt $800A - .dbyt $800B - .dbyt $9FE1 - .dbyt $9FE2 - .dbyt $9FE3 - .dbyt $9FE4 - .dbyt $9FE5 - .dbyt $9FE6 - .dbyt $9FE7 - .dbyt $9FE8 - .dbyt $9FE9 - .dbyt $9FEA - .dbyt $9FEB - .dbyt $9FEC - .dbyt $9FED - .dbyt $9FEE - .dbyt $9FEF - .dbyt $9FF0 - .dbyt $9FF1 - .dbyt $9FF2 - .dbyt $9FF3 - .dbyt $9FF4 - .dbyt $9FF5 - .dbyt $9FF6 - .dbyt $9FF7 - .dbyt $9FF8 - .dbyt $9FF9 - .dbyt $9FFA - .dbyt $9FFB - .dbyt $9FFC - .dbyt $9FFD - .dbyt $9FFE - .dbyt $9FFF - .dbyt $A000 - .dbyt $A001 - .dbyt $A002 - .dbyt $A003 - .dbyt $A004 - .dbyt $A005 - .dbyt $A006 - .dbyt $A007 - .dbyt $A008 - .dbyt $A009 - .dbyt $A00A - .dbyt $A00B - .dbyt $A00C - .dbyt $A00D - .dbyt $A00E - .dbyt $A00F - .dbyt $AFE1 - .dbyt $AFE2 - .dbyt $AFE3 - .dbyt $AFE4 - .dbyt $AFE5 - .dbyt $AFE6 - .dbyt $AFE7 - .dbyt $AFE8 - .dbyt $AFE9 - .dbyt $AFEA - .dbyt $AFEB - .dbyt $AFEC - .dbyt $AFED - .dbyt $AFEE - .dbyt $AFEF - .dbyt $AFF0 - .dbyt $AFF1 - .dbyt $AFF2 - .dbyt $AFF3 - .dbyt $AFF4 - .dbyt $AFF5 - .dbyt $AFF6 - .dbyt $AFF7 - .dbyt $AFF8 - .dbyt $AFF9 - .dbyt $AFFA - .dbyt $AFFB - .dbyt $AFFC - .dbyt $AFFD - .dbyt $AFFE - .dbyt $AFFF - .dbyt $B000 - .dbyt $B001 - .dbyt $B002 - .dbyt $B003 - .dbyt $B004 - .dbyt $B005 - .dbyt $B006 - .dbyt $B007 - .dbyt $B008 - .dbyt $B009 - .dbyt $B00A - .dbyt $B00B - .dbyt $B00C - .dbyt $B00D - .dbyt $B00E - .dbyt $B00F - .dbyt $BFE1 - .dbyt $BFE2 - .dbyt $BFE3 - .dbyt $BFE4 - .dbyt $BFE5 - .dbyt $BFE6 - .dbyt $BFE7 - .dbyt $BFE8 - .dbyt $BFE9 - .dbyt $BFEA - .dbyt $BFEB - .dbyt $BFEC - .dbyt $BFED - .dbyt $BFEE - .dbyt $BFEF - .dbyt $BFF0 - .dbyt $BFF1 - .dbyt $BFF2 - .dbyt $BFF3 - .dbyt $BFF4 - .dbyt $BFF5 - .dbyt $BFF6 - .dbyt $BFF7 - .dbyt $BFF8 - .dbyt $BFF9 - .dbyt $BFFA - .dbyt $BFFB - .dbyt $BFFC - .dbyt $BFFD - .dbyt $BFFE - .dbyt $BFFF - .dbyt $C000 - .dbyt $C001 - .dbyt $C002 - .dbyt $C003 - .dbyt $C004 - .dbyt $C005 - .dbyt $C006 - .dbyt $C007 - .dbyt $C008 - .dbyt $C009 - .dbyt $C00A - .dbyt $C00B - .dbyt $C00C - .dbyt $C00D - .dbyt $C00E - .dbyt $C00F - .dbyt $CFE1 - .dbyt $CFE2 - .dbyt $CFE3 - .dbyt $CFE4 - .dbyt $CFE5 - .dbyt $CFE6 - .dbyt $CFE7 - .dbyt $CFE8 - .dbyt $CFE9 - .dbyt $CFEA - .dbyt $CFEB - .dbyt $CFEC - .dbyt $CFED - .dbyt $CFEE - .dbyt $CFEF - .dbyt $CFF0 - .dbyt $CFF1 - .dbyt $CFF2 - .dbyt $CFF3 - .dbyt $CFF4 - .dbyt $CFF5 - .dbyt $CFF6 - .dbyt $CFF7 - .dbyt $CFF8 - .dbyt $CFF9 - .dbyt $CFFA - .dbyt $CFFB - .dbyt $CFFC - .dbyt $CFFD - .dbyt $CFFE - .dbyt $CFFF - .dbyt $D000 - .dbyt $D001 - .dbyt $D002 - .dbyt $D003 - .dbyt $D004 - .dbyt $D005 - .dbyt $D006 - .dbyt $D007 - .dbyt $D008 - .dbyt $D009 - .dbyt $D00A - .dbyt $D00B - .dbyt $D00C - .dbyt $D00D - .dbyt $D00E - .dbyt $D00F - .dbyt $DFE1 - .dbyt $DFE2 - .dbyt $DFE3 - .dbyt $DFE4 - .dbyt $DFE5 - .dbyt $DFE6 - .dbyt $DFE7 - .dbyt $DFE8 - .dbyt $DFE9 - .dbyt $DFEA - .dbyt $DFEB - .dbyt $DFEC - .dbyt $DFED - .dbyt $DFEE - .dbyt $DFEF - .dbyt $DFF0 - .dbyt $DFF1 - .dbyt $DFF2 - .dbyt $DFF3 - .dbyt $DFF4 - .dbyt $DFF5 - .dbyt $DFF6 - .dbyt $DFF7 - .dbyt $DFF8 - .dbyt $DFF9 - .dbyt $DFFA - .dbyt $DFFB - .dbyt $DFFC - .dbyt $DFFD - .dbyt $DFFE - .dbyt $DFFF - .dbyt $E000 - .dbyt $E001 - .dbyt $E002 - .dbyt $E003 - .dbyt $E004 - .dbyt $E005 - .dbyt $E006 - .dbyt $E007 - .dbyt $E008 - .dbyt $E009 - .dbyt $E00A - .dbyt $E00B - .dbyt $E00C - .dbyt $E00D - .dbyt $E00E - .dbyt $E00F - .dbyt $EFE1 - .dbyt $EFE2 - .dbyt $EFE3 - .dbyt $EFE4 - .dbyt $EFE5 - .dbyt $EFE6 - .dbyt $EFE7 - .dbyt $EFE8 - .dbyt $EFE9 - .dbyt $EFEA - .dbyt $EFEB - .dbyt $EFEC - .dbyt $EFED - .dbyt $EFEE - .dbyt $EFEF - .dbyt $EFF0 - .dbyt $EFF1 - .dbyt $EFF2 - .dbyt $EFF3 - .dbyt $EFF4 - .dbyt $EFF5 - .dbyt $EFF6 - .dbyt $EFF7 - .dbyt $EFF8 - .dbyt $EFF9 - .dbyt $EFFA - .dbyt $EFFB - .dbyt $EFFC - .dbyt $EFFD - .dbyt $EFFE - .dbyt $EFFF - .dbyt $F000 - .dbyt $F001 - .dbyt $F002 - .dbyt $F003 - .dbyt $F004 - .dbyt $F005 - .dbyt $F006 - .dbyt $F007 - .dbyt $F008 - .dbyt $F009 - .dbyt $F00A - .dbyt $F00B - .dbyt $F00C - .dbyt $F00D - .dbyt $F00E - .dbyt $F00F - .dbyt $FFE1 - .dbyt $FFE2 - .dbyt $FFE3 - .dbyt $FFE4 - .dbyt $FFE5 - .dbyt $FFE6 - .dbyt $FFE7 - .dbyt $FFE8 - .dbyt $FFE9 - .dbyt $FFEA - .dbyt $FFEB - .dbyt $FFEC - .dbyt $FFED - .dbyt $FFEE - .dbyt $FFEF - .dbyt $FFF0 - .dbyt $FFF1 - .dbyt $FFF2 - .dbyt $FFF3 - .dbyt $FFF4 - .dbyt $FFF5 - .dbyt $FFF6 - .dbyt $FFF7 - .dbyt $FFF8 - .dbyt $FFF9 - .dbyt $FFFA - .dbyt $FFFB - .dbyt $FFFC - .dbyt $FFFD - .dbyt $FFFE - .dbyt $FFFF + ; hex values, uppercase + .dbyt $0 + .dbyt $1 + .dbyt $2 + .dbyt $3 + .dbyt $4 + .dbyt $5 + .dbyt $6 + .dbyt $7 + .dbyt $8 + .dbyt $9 + .dbyt $A + .dbyt $B + .dbyt $C + .dbyt $D + .dbyt $E + .dbyt $F + .dbyt $10 + .dbyt $11 + .dbyt $12 + .dbyt $13 + .dbyt $70 + .dbyt $71 + .dbyt $72 + .dbyt $73 + .dbyt $74 + .dbyt $75 + .dbyt $76 + .dbyt $77 + .dbyt $78 + .dbyt $79 + .dbyt $7A + .dbyt $7B + .dbyt $7C + .dbyt $7D + .dbyt $7E + .dbyt $7F + .dbyt $80 + .dbyt $81 + .dbyt $82 + .dbyt $83 + .dbyt $84 + .dbyt $85 + .dbyt $86 + .dbyt $F0 + .dbyt $F1 + .dbyt $F2 + .dbyt $F3 + .dbyt $F4 + .dbyt $F5 + .dbyt $F6 + .dbyt $F7 + .dbyt $F8 + .dbyt $F9 + .dbyt $FA + .dbyt $FB + .dbyt $FC + .dbyt $FD + .dbyt $FE + .dbyt $FF + .dbyt $100 + .dbyt $101 + .dbyt $102 + .dbyt $103 + .dbyt $FD2 + .dbyt $FD3 + .dbyt $FD4 + .dbyt $FD5 + .dbyt $FD6 + .dbyt $FD7 + .dbyt $FD8 + .dbyt $FD9 + .dbyt $FDA + .dbyt $FDB + .dbyt $FDC + .dbyt $FDD + .dbyt $FDE + .dbyt $FDF + .dbyt $FE0 + .dbyt $FE1 + .dbyt $FE2 + .dbyt $FE3 + .dbyt $FE4 + .dbyt $FE5 + .dbyt $FE6 + .dbyt $FE7 + .dbyt $FE8 + .dbyt $FE9 + .dbyt $FEA + .dbyt $FEB + .dbyt $FEC + .dbyt $FED + .dbyt $FEE + .dbyt $FEF + .dbyt $FF0 + .dbyt $FF1 + .dbyt $FF2 + .dbyt $FF3 + .dbyt $FF4 + .dbyt $FF5 + .dbyt $FF6 + .dbyt $FF7 + .dbyt $FF8 + .dbyt $FF9 + .dbyt $FFA + .dbyt $FFB + .dbyt $FFC + .dbyt $FFD + .dbyt $FFE + .dbyt $FFF + .dbyt $1000 + .dbyt $1001 + .dbyt $1002 + .dbyt $1003 + .dbyt $1004 + .dbyt $1005 + .dbyt $1006 + .dbyt $1007 + .dbyt $1008 + .dbyt $7FF0 + .dbyt $7FF1 + .dbyt $7FF2 + .dbyt $7FF3 + .dbyt $7FF4 + .dbyt $7FF5 + .dbyt $7FF6 + .dbyt $7FF7 + .dbyt $7FF8 + .dbyt $7FF9 + .dbyt $7FFA + .dbyt $7FFB + .dbyt $7FFC + .dbyt $7FFD + .dbyt $7FFE + .dbyt $7FFF + .dbyt $8000 + .dbyt $8001 + .dbyt $8002 + .dbyt $8003 + .dbyt $8004 + .dbyt $8005 + .dbyt $8006 + .dbyt $8007 + .dbyt $8008 + .dbyt $8009 + .dbyt $800A + .dbyt $800B + .dbyt $9FE1 + .dbyt $9FE2 + .dbyt $9FE3 + .dbyt $9FE4 + .dbyt $9FE5 + .dbyt $9FE6 + .dbyt $9FE7 + .dbyt $9FE8 + .dbyt $9FE9 + .dbyt $9FEA + .dbyt $9FEB + .dbyt $9FEC + .dbyt $9FED + .dbyt $9FEE + .dbyt $9FEF + .dbyt $9FF0 + .dbyt $9FF1 + .dbyt $9FF2 + .dbyt $9FF3 + .dbyt $9FF4 + .dbyt $9FF5 + .dbyt $9FF6 + .dbyt $9FF7 + .dbyt $9FF8 + .dbyt $9FF9 + .dbyt $9FFA + .dbyt $9FFB + .dbyt $9FFC + .dbyt $9FFD + .dbyt $9FFE + .dbyt $9FFF + .dbyt $A000 + .dbyt $A001 + .dbyt $A002 + .dbyt $A003 + .dbyt $A004 + .dbyt $A005 + .dbyt $A006 + .dbyt $A007 + .dbyt $A008 + .dbyt $A009 + .dbyt $A00A + .dbyt $A00B + .dbyt $A00C + .dbyt $A00D + .dbyt $A00E + .dbyt $A00F + .dbyt $AFE1 + .dbyt $AFE2 + .dbyt $AFE3 + .dbyt $AFE4 + .dbyt $AFE5 + .dbyt $AFE6 + .dbyt $AFE7 + .dbyt $AFE8 + .dbyt $AFE9 + .dbyt $AFEA + .dbyt $AFEB + .dbyt $AFEC + .dbyt $AFED + .dbyt $AFEE + .dbyt $AFEF + .dbyt $AFF0 + .dbyt $AFF1 + .dbyt $AFF2 + .dbyt $AFF3 + .dbyt $AFF4 + .dbyt $AFF5 + .dbyt $AFF6 + .dbyt $AFF7 + .dbyt $AFF8 + .dbyt $AFF9 + .dbyt $AFFA + .dbyt $AFFB + .dbyt $AFFC + .dbyt $AFFD + .dbyt $AFFE + .dbyt $AFFF + .dbyt $B000 + .dbyt $B001 + .dbyt $B002 + .dbyt $B003 + .dbyt $B004 + .dbyt $B005 + .dbyt $B006 + .dbyt $B007 + .dbyt $B008 + .dbyt $B009 + .dbyt $B00A + .dbyt $B00B + .dbyt $B00C + .dbyt $B00D + .dbyt $B00E + .dbyt $B00F + .dbyt $BFE1 + .dbyt $BFE2 + .dbyt $BFE3 + .dbyt $BFE4 + .dbyt $BFE5 + .dbyt $BFE6 + .dbyt $BFE7 + .dbyt $BFE8 + .dbyt $BFE9 + .dbyt $BFEA + .dbyt $BFEB + .dbyt $BFEC + .dbyt $BFED + .dbyt $BFEE + .dbyt $BFEF + .dbyt $BFF0 + .dbyt $BFF1 + .dbyt $BFF2 + .dbyt $BFF3 + .dbyt $BFF4 + .dbyt $BFF5 + .dbyt $BFF6 + .dbyt $BFF7 + .dbyt $BFF8 + .dbyt $BFF9 + .dbyt $BFFA + .dbyt $BFFB + .dbyt $BFFC + .dbyt $BFFD + .dbyt $BFFE + .dbyt $BFFF + .dbyt $C000 + .dbyt $C001 + .dbyt $C002 + .dbyt $C003 + .dbyt $C004 + .dbyt $C005 + .dbyt $C006 + .dbyt $C007 + .dbyt $C008 + .dbyt $C009 + .dbyt $C00A + .dbyt $C00B + .dbyt $C00C + .dbyt $C00D + .dbyt $C00E + .dbyt $C00F + .dbyt $CFE1 + .dbyt $CFE2 + .dbyt $CFE3 + .dbyt $CFE4 + .dbyt $CFE5 + .dbyt $CFE6 + .dbyt $CFE7 + .dbyt $CFE8 + .dbyt $CFE9 + .dbyt $CFEA + .dbyt $CFEB + .dbyt $CFEC + .dbyt $CFED + .dbyt $CFEE + .dbyt $CFEF + .dbyt $CFF0 + .dbyt $CFF1 + .dbyt $CFF2 + .dbyt $CFF3 + .dbyt $CFF4 + .dbyt $CFF5 + .dbyt $CFF6 + .dbyt $CFF7 + .dbyt $CFF8 + .dbyt $CFF9 + .dbyt $CFFA + .dbyt $CFFB + .dbyt $CFFC + .dbyt $CFFD + .dbyt $CFFE + .dbyt $CFFF + .dbyt $D000 + .dbyt $D001 + .dbyt $D002 + .dbyt $D003 + .dbyt $D004 + .dbyt $D005 + .dbyt $D006 + .dbyt $D007 + .dbyt $D008 + .dbyt $D009 + .dbyt $D00A + .dbyt $D00B + .dbyt $D00C + .dbyt $D00D + .dbyt $D00E + .dbyt $D00F + .dbyt $DFE1 + .dbyt $DFE2 + .dbyt $DFE3 + .dbyt $DFE4 + .dbyt $DFE5 + .dbyt $DFE6 + .dbyt $DFE7 + .dbyt $DFE8 + .dbyt $DFE9 + .dbyt $DFEA + .dbyt $DFEB + .dbyt $DFEC + .dbyt $DFED + .dbyt $DFEE + .dbyt $DFEF + .dbyt $DFF0 + .dbyt $DFF1 + .dbyt $DFF2 + .dbyt $DFF3 + .dbyt $DFF4 + .dbyt $DFF5 + .dbyt $DFF6 + .dbyt $DFF7 + .dbyt $DFF8 + .dbyt $DFF9 + .dbyt $DFFA + .dbyt $DFFB + .dbyt $DFFC + .dbyt $DFFD + .dbyt $DFFE + .dbyt $DFFF + .dbyt $E000 + .dbyt $E001 + .dbyt $E002 + .dbyt $E003 + .dbyt $E004 + .dbyt $E005 + .dbyt $E006 + .dbyt $E007 + .dbyt $E008 + .dbyt $E009 + .dbyt $E00A + .dbyt $E00B + .dbyt $E00C + .dbyt $E00D + .dbyt $E00E + .dbyt $E00F + .dbyt $EFE1 + .dbyt $EFE2 + .dbyt $EFE3 + .dbyt $EFE4 + .dbyt $EFE5 + .dbyt $EFE6 + .dbyt $EFE7 + .dbyt $EFE8 + .dbyt $EFE9 + .dbyt $EFEA + .dbyt $EFEB + .dbyt $EFEC + .dbyt $EFED + .dbyt $EFEE + .dbyt $EFEF + .dbyt $EFF0 + .dbyt $EFF1 + .dbyt $EFF2 + .dbyt $EFF3 + .dbyt $EFF4 + .dbyt $EFF5 + .dbyt $EFF6 + .dbyt $EFF7 + .dbyt $EFF8 + .dbyt $EFF9 + .dbyt $EFFA + .dbyt $EFFB + .dbyt $EFFC + .dbyt $EFFD + .dbyt $EFFE + .dbyt $EFFF + .dbyt $F000 + .dbyt $F001 + .dbyt $F002 + .dbyt $F003 + .dbyt $F004 + .dbyt $F005 + .dbyt $F006 + .dbyt $F007 + .dbyt $F008 + .dbyt $F009 + .dbyt $F00A + .dbyt $F00B + .dbyt $F00C + .dbyt $F00D + .dbyt $F00E + .dbyt $F00F + .dbyt $FFE1 + .dbyt $FFE2 + .dbyt $FFE3 + .dbyt $FFE4 + .dbyt $FFE5 + .dbyt $FFE6 + .dbyt $FFE7 + .dbyt $FFE8 + .dbyt $FFE9 + .dbyt $FFEA + .dbyt $FFEB + .dbyt $FFEC + .dbyt $FFED + .dbyt $FFEE + .dbyt $FFEF + .dbyt $FFF0 + .dbyt $FFF1 + .dbyt $FFF2 + .dbyt $FFF3 + .dbyt $FFF4 + .dbyt $FFF5 + .dbyt $FFF6 + .dbyt $FFF7 + .dbyt $FFF8 + .dbyt $FFF9 + .dbyt $FFFA + .dbyt $FFFB + .dbyt $FFFC + .dbyt $FFFD + .dbyt $FFFE + .dbyt $FFFF - ; 4-digit hex values - .dbyt $0000 - .dbyt $0001 - .dbyt $0002 - .dbyt $0003 - .dbyt $0004 - .dbyt $0005 - .dbyt $0006 - .dbyt $0007 - .dbyt $0008 - .dbyt $0009 - .dbyt $000a - .dbyt $000b - .dbyt $000c - .dbyt $000d - .dbyt $000e - .dbyt $000f - .dbyt $0010 - .dbyt $0011 - .dbyt $0012 - .dbyt $0013 - .dbyt $0070 - .dbyt $0071 - .dbyt $0072 - .dbyt $0073 - .dbyt $0074 - .dbyt $0075 - .dbyt $0076 - .dbyt $0077 - .dbyt $0078 - .dbyt $0079 - .dbyt $007a - .dbyt $007b - .dbyt $007c - .dbyt $007d - .dbyt $007e - .dbyt $007f - .dbyt $0080 - .dbyt $0081 - .dbyt $0082 - .dbyt $0083 - .dbyt $0084 - .dbyt $0085 - .dbyt $0086 - .dbyt $00f0 - .dbyt $00f1 - .dbyt $00f2 - .dbyt $00f3 - .dbyt $00f4 - .dbyt $00f5 - .dbyt $00f6 - .dbyt $00f7 - .dbyt $00f8 - .dbyt $00f9 - .dbyt $00fa - .dbyt $00fb - .dbyt $00fc - .dbyt $00fd - .dbyt $00fe - .dbyt $00ff - .dbyt $0100 - .dbyt $0101 - .dbyt $0102 - .dbyt $0103 - .dbyt $0fd2 - .dbyt $0fd3 - .dbyt $0fd4 - .dbyt $0fd5 - .dbyt $0fd6 - .dbyt $0fd7 - .dbyt $0fd8 - .dbyt $0fd9 - .dbyt $0fda - .dbyt $0fdb - .dbyt $0fdc - .dbyt $0fdd - .dbyt $0fde - .dbyt $0fdf - .dbyt $0fe0 - .dbyt $0fe1 - .dbyt $0fe2 - .dbyt $0fe3 - .dbyt $0fe4 - .dbyt $0fe5 - .dbyt $0fe6 - .dbyt $0fe7 - .dbyt $0fe8 - .dbyt $0fe9 - .dbyt $0fea - .dbyt $0feb - .dbyt $0fec - .dbyt $0fed - .dbyt $0fee - .dbyt $0fef - .dbyt $0ff0 - .dbyt $0ff1 - .dbyt $0ff2 - .dbyt $0ff3 - .dbyt $0ff4 - .dbyt $0ff5 - .dbyt $0ff6 - .dbyt $0ff7 - .dbyt $0ff8 - .dbyt $0ff9 - .dbyt $0ffa - .dbyt $0ffb - .dbyt $0ffc - .dbyt $0ffd - .dbyt $0ffe - .dbyt $0fff - .dbyt $1000 - .dbyt $1001 - .dbyt $1002 - .dbyt $1003 - .dbyt $1004 - .dbyt $1005 - .dbyt $1006 - .dbyt $1007 - .dbyt $1008 - .dbyt $7ff0 - .dbyt $7ff1 - .dbyt $7ff2 - .dbyt $7ff3 - .dbyt $7ff4 - .dbyt $7ff5 - .dbyt $7ff6 - .dbyt $7ff7 - .dbyt $7ff8 - .dbyt $7ff9 - .dbyt $7ffa - .dbyt $7ffb - .dbyt $7ffc - .dbyt $7ffd - .dbyt $7ffe - .dbyt $7fff - .dbyt $8000 - .dbyt $8001 - .dbyt $8002 - .dbyt $8003 - .dbyt $8004 - .dbyt $8005 - .dbyt $8006 - .dbyt $8007 - .dbyt $8008 - .dbyt $8009 - .dbyt $800a - .dbyt $800b - .dbyt $9fe1 - .dbyt $9fe2 - .dbyt $9fe3 - .dbyt $9fe4 - .dbyt $9fe5 - .dbyt $9fe6 - .dbyt $9fe7 - .dbyt $9fe8 - .dbyt $9fe9 - .dbyt $9fea - .dbyt $9feb - .dbyt $9fec - .dbyt $9fed - .dbyt $9fee - .dbyt $9fef - .dbyt $9ff0 - .dbyt $9ff1 - .dbyt $9ff2 - .dbyt $9ff3 - .dbyt $9ff4 - .dbyt $9ff5 - .dbyt $9ff6 - .dbyt $9ff7 - .dbyt $9ff8 - .dbyt $9ff9 - .dbyt $9ffa - .dbyt $9ffb - .dbyt $9ffc - .dbyt $9ffd - .dbyt $9ffe - .dbyt $9fff - .dbyt $a000 - .dbyt $a001 - .dbyt $a002 - .dbyt $a003 - .dbyt $a004 - .dbyt $a005 - .dbyt $a006 - .dbyt $a007 - .dbyt $a008 - .dbyt $a009 - .dbyt $a00a - .dbyt $a00b - .dbyt $a00c - .dbyt $a00d - .dbyt $a00e - .dbyt $a00f - .dbyt $afe1 - .dbyt $afe2 - .dbyt $afe3 - .dbyt $afe4 - .dbyt $afe5 - .dbyt $afe6 - .dbyt $afe7 - .dbyt $afe8 - .dbyt $afe9 - .dbyt $afea - .dbyt $afeb - .dbyt $afec - .dbyt $afed - .dbyt $afee - .dbyt $afef - .dbyt $aff0 - .dbyt $aff1 - .dbyt $aff2 - .dbyt $aff3 - .dbyt $aff4 - .dbyt $aff5 - .dbyt $aff6 - .dbyt $aff7 - .dbyt $aff8 - .dbyt $aff9 - .dbyt $affa - .dbyt $affb - .dbyt $affc - .dbyt $affd - .dbyt $affe - .dbyt $afff - .dbyt $b000 - .dbyt $b001 - .dbyt $b002 - .dbyt $b003 - .dbyt $b004 - .dbyt $b005 - .dbyt $b006 - .dbyt $b007 - .dbyt $b008 - .dbyt $b009 - .dbyt $b00a - .dbyt $b00b - .dbyt $b00c - .dbyt $b00d - .dbyt $b00e - .dbyt $b00f - .dbyt $bfe1 - .dbyt $bfe2 - .dbyt $bfe3 - .dbyt $bfe4 - .dbyt $bfe5 - .dbyt $bfe6 - .dbyt $bfe7 - .dbyt $bfe8 - .dbyt $bfe9 - .dbyt $bfea - .dbyt $bfeb - .dbyt $bfec - .dbyt $bfed - .dbyt $bfee - .dbyt $bfef - .dbyt $bff0 - .dbyt $bff1 - .dbyt $bff2 - .dbyt $bff3 - .dbyt $bff4 - .dbyt $bff5 - .dbyt $bff6 - .dbyt $bff7 - .dbyt $bff8 - .dbyt $bff9 - .dbyt $bffa - .dbyt $bffb - .dbyt $bffc - .dbyt $bffd - .dbyt $bffe - .dbyt $bfff - .dbyt $c000 - .dbyt $c001 - .dbyt $c002 - .dbyt $c003 - .dbyt $c004 - .dbyt $c005 - .dbyt $c006 - .dbyt $c007 - .dbyt $c008 - .dbyt $c009 - .dbyt $c00a - .dbyt $c00b - .dbyt $c00c - .dbyt $c00d - .dbyt $c00e - .dbyt $c00f - .dbyt $cfe1 - .dbyt $cfe2 - .dbyt $cfe3 - .dbyt $cfe4 - .dbyt $cfe5 - .dbyt $cfe6 - .dbyt $cfe7 - .dbyt $cfe8 - .dbyt $cfe9 - .dbyt $cfea - .dbyt $cfeb - .dbyt $cfec - .dbyt $cfed - .dbyt $cfee - .dbyt $cfef - .dbyt $cff0 - .dbyt $cff1 - .dbyt $cff2 - .dbyt $cff3 - .dbyt $cff4 - .dbyt $cff5 - .dbyt $cff6 - .dbyt $cff7 - .dbyt $cff8 - .dbyt $cff9 - .dbyt $cffa - .dbyt $cffb - .dbyt $cffc - .dbyt $cffd - .dbyt $cffe - .dbyt $cfff - .dbyt $d000 - .dbyt $d001 - .dbyt $d002 - .dbyt $d003 - .dbyt $d004 - .dbyt $d005 - .dbyt $d006 - .dbyt $d007 - .dbyt $d008 - .dbyt $d009 - .dbyt $d00a - .dbyt $d00b - .dbyt $d00c - .dbyt $d00d - .dbyt $d00e - .dbyt $d00f - .dbyt $dfe1 - .dbyt $dfe2 - .dbyt $dfe3 - .dbyt $dfe4 - .dbyt $dfe5 - .dbyt $dfe6 - .dbyt $dfe7 - .dbyt $dfe8 - .dbyt $dfe9 - .dbyt $dfea - .dbyt $dfeb - .dbyt $dfec - .dbyt $dfed - .dbyt $dfee - .dbyt $dfef - .dbyt $dff0 - .dbyt $dff1 - .dbyt $dff2 - .dbyt $dff3 - .dbyt $dff4 - .dbyt $dff5 - .dbyt $dff6 - .dbyt $dff7 - .dbyt $dff8 - .dbyt $dff9 - .dbyt $dffa - .dbyt $dffb - .dbyt $dffc - .dbyt $dffd - .dbyt $dffe - .dbyt $dfff - .dbyt $e000 - .dbyt $e001 - .dbyt $e002 - .dbyt $e003 - .dbyt $e004 - .dbyt $e005 - .dbyt $e006 - .dbyt $e007 - .dbyt $e008 - .dbyt $e009 - .dbyt $e00a - .dbyt $e00b - .dbyt $e00c - .dbyt $e00d - .dbyt $e00e - .dbyt $e00f - .dbyt $efe1 - .dbyt $efe2 - .dbyt $efe3 - .dbyt $efe4 - .dbyt $efe5 - .dbyt $efe6 - .dbyt $efe7 - .dbyt $efe8 - .dbyt $efe9 - .dbyt $efea - .dbyt $efeb - .dbyt $efec - .dbyt $efed - .dbyt $efee - .dbyt $efef - .dbyt $eff0 - .dbyt $eff1 - .dbyt $eff2 - .dbyt $eff3 - .dbyt $eff4 - .dbyt $eff5 - .dbyt $eff6 - .dbyt $eff7 - .dbyt $eff8 - .dbyt $eff9 - .dbyt $effa - .dbyt $effb - .dbyt $effc - .dbyt $effd - .dbyt $effe - .dbyt $efff - .dbyt $f000 - .dbyt $f001 - .dbyt $f002 - .dbyt $f003 - .dbyt $f004 - .dbyt $f005 - .dbyt $f006 - .dbyt $f007 - .dbyt $f008 - .dbyt $f009 - .dbyt $f00a - .dbyt $f00b - .dbyt $f00c - .dbyt $f00d - .dbyt $f00e - .dbyt $f00f - .dbyt $ffe1 - .dbyt $ffe2 - .dbyt $ffe3 - .dbyt $ffe4 - .dbyt $ffe5 - .dbyt $ffe6 - .dbyt $ffe7 - .dbyt $ffe8 - .dbyt $ffe9 - .dbyt $ffea - .dbyt $ffeb - .dbyt $ffec - .dbyt $ffed - .dbyt $ffee - .dbyt $ffef - .dbyt $fff0 - .dbyt $fff1 - .dbyt $fff2 - .dbyt $fff3 - .dbyt $fff4 - .dbyt $fff5 - .dbyt $fff6 - .dbyt $fff7 - .dbyt $fff8 - .dbyt $fff9 - .dbyt $fffa - .dbyt $fffb - .dbyt $fffc - .dbyt $fffd - .dbyt $fffe - .dbyt $ffff + ; 4-digit hex values + .dbyt $0000 + .dbyt $0001 + .dbyt $0002 + .dbyt $0003 + .dbyt $0004 + .dbyt $0005 + .dbyt $0006 + .dbyt $0007 + .dbyt $0008 + .dbyt $0009 + .dbyt $000a + .dbyt $000b + .dbyt $000c + .dbyt $000d + .dbyt $000e + .dbyt $000f + .dbyt $0010 + .dbyt $0011 + .dbyt $0012 + .dbyt $0013 + .dbyt $0070 + .dbyt $0071 + .dbyt $0072 + .dbyt $0073 + .dbyt $0074 + .dbyt $0075 + .dbyt $0076 + .dbyt $0077 + .dbyt $0078 + .dbyt $0079 + .dbyt $007a + .dbyt $007b + .dbyt $007c + .dbyt $007d + .dbyt $007e + .dbyt $007f + .dbyt $0080 + .dbyt $0081 + .dbyt $0082 + .dbyt $0083 + .dbyt $0084 + .dbyt $0085 + .dbyt $0086 + .dbyt $00f0 + .dbyt $00f1 + .dbyt $00f2 + .dbyt $00f3 + .dbyt $00f4 + .dbyt $00f5 + .dbyt $00f6 + .dbyt $00f7 + .dbyt $00f8 + .dbyt $00f9 + .dbyt $00fa + .dbyt $00fb + .dbyt $00fc + .dbyt $00fd + .dbyt $00fe + .dbyt $00ff + .dbyt $0100 + .dbyt $0101 + .dbyt $0102 + .dbyt $0103 + .dbyt $0fd2 + .dbyt $0fd3 + .dbyt $0fd4 + .dbyt $0fd5 + .dbyt $0fd6 + .dbyt $0fd7 + .dbyt $0fd8 + .dbyt $0fd9 + .dbyt $0fda + .dbyt $0fdb + .dbyt $0fdc + .dbyt $0fdd + .dbyt $0fde + .dbyt $0fdf + .dbyt $0fe0 + .dbyt $0fe1 + .dbyt $0fe2 + .dbyt $0fe3 + .dbyt $0fe4 + .dbyt $0fe5 + .dbyt $0fe6 + .dbyt $0fe7 + .dbyt $0fe8 + .dbyt $0fe9 + .dbyt $0fea + .dbyt $0feb + .dbyt $0fec + .dbyt $0fed + .dbyt $0fee + .dbyt $0fef + .dbyt $0ff0 + .dbyt $0ff1 + .dbyt $0ff2 + .dbyt $0ff3 + .dbyt $0ff4 + .dbyt $0ff5 + .dbyt $0ff6 + .dbyt $0ff7 + .dbyt $0ff8 + .dbyt $0ff9 + .dbyt $0ffa + .dbyt $0ffb + .dbyt $0ffc + .dbyt $0ffd + .dbyt $0ffe + .dbyt $0fff + .dbyt $1000 + .dbyt $1001 + .dbyt $1002 + .dbyt $1003 + .dbyt $1004 + .dbyt $1005 + .dbyt $1006 + .dbyt $1007 + .dbyt $1008 + .dbyt $7ff0 + .dbyt $7ff1 + .dbyt $7ff2 + .dbyt $7ff3 + .dbyt $7ff4 + .dbyt $7ff5 + .dbyt $7ff6 + .dbyt $7ff7 + .dbyt $7ff8 + .dbyt $7ff9 + .dbyt $7ffa + .dbyt $7ffb + .dbyt $7ffc + .dbyt $7ffd + .dbyt $7ffe + .dbyt $7fff + .dbyt $8000 + .dbyt $8001 + .dbyt $8002 + .dbyt $8003 + .dbyt $8004 + .dbyt $8005 + .dbyt $8006 + .dbyt $8007 + .dbyt $8008 + .dbyt $8009 + .dbyt $800a + .dbyt $800b + .dbyt $9fe1 + .dbyt $9fe2 + .dbyt $9fe3 + .dbyt $9fe4 + .dbyt $9fe5 + .dbyt $9fe6 + .dbyt $9fe7 + .dbyt $9fe8 + .dbyt $9fe9 + .dbyt $9fea + .dbyt $9feb + .dbyt $9fec + .dbyt $9fed + .dbyt $9fee + .dbyt $9fef + .dbyt $9ff0 + .dbyt $9ff1 + .dbyt $9ff2 + .dbyt $9ff3 + .dbyt $9ff4 + .dbyt $9ff5 + .dbyt $9ff6 + .dbyt $9ff7 + .dbyt $9ff8 + .dbyt $9ff9 + .dbyt $9ffa + .dbyt $9ffb + .dbyt $9ffc + .dbyt $9ffd + .dbyt $9ffe + .dbyt $9fff + .dbyt $a000 + .dbyt $a001 + .dbyt $a002 + .dbyt $a003 + .dbyt $a004 + .dbyt $a005 + .dbyt $a006 + .dbyt $a007 + .dbyt $a008 + .dbyt $a009 + .dbyt $a00a + .dbyt $a00b + .dbyt $a00c + .dbyt $a00d + .dbyt $a00e + .dbyt $a00f + .dbyt $afe1 + .dbyt $afe2 + .dbyt $afe3 + .dbyt $afe4 + .dbyt $afe5 + .dbyt $afe6 + .dbyt $afe7 + .dbyt $afe8 + .dbyt $afe9 + .dbyt $afea + .dbyt $afeb + .dbyt $afec + .dbyt $afed + .dbyt $afee + .dbyt $afef + .dbyt $aff0 + .dbyt $aff1 + .dbyt $aff2 + .dbyt $aff3 + .dbyt $aff4 + .dbyt $aff5 + .dbyt $aff6 + .dbyt $aff7 + .dbyt $aff8 + .dbyt $aff9 + .dbyt $affa + .dbyt $affb + .dbyt $affc + .dbyt $affd + .dbyt $affe + .dbyt $afff + .dbyt $b000 + .dbyt $b001 + .dbyt $b002 + .dbyt $b003 + .dbyt $b004 + .dbyt $b005 + .dbyt $b006 + .dbyt $b007 + .dbyt $b008 + .dbyt $b009 + .dbyt $b00a + .dbyt $b00b + .dbyt $b00c + .dbyt $b00d + .dbyt $b00e + .dbyt $b00f + .dbyt $bfe1 + .dbyt $bfe2 + .dbyt $bfe3 + .dbyt $bfe4 + .dbyt $bfe5 + .dbyt $bfe6 + .dbyt $bfe7 + .dbyt $bfe8 + .dbyt $bfe9 + .dbyt $bfea + .dbyt $bfeb + .dbyt $bfec + .dbyt $bfed + .dbyt $bfee + .dbyt $bfef + .dbyt $bff0 + .dbyt $bff1 + .dbyt $bff2 + .dbyt $bff3 + .dbyt $bff4 + .dbyt $bff5 + .dbyt $bff6 + .dbyt $bff7 + .dbyt $bff8 + .dbyt $bff9 + .dbyt $bffa + .dbyt $bffb + .dbyt $bffc + .dbyt $bffd + .dbyt $bffe + .dbyt $bfff + .dbyt $c000 + .dbyt $c001 + .dbyt $c002 + .dbyt $c003 + .dbyt $c004 + .dbyt $c005 + .dbyt $c006 + .dbyt $c007 + .dbyt $c008 + .dbyt $c009 + .dbyt $c00a + .dbyt $c00b + .dbyt $c00c + .dbyt $c00d + .dbyt $c00e + .dbyt $c00f + .dbyt $cfe1 + .dbyt $cfe2 + .dbyt $cfe3 + .dbyt $cfe4 + .dbyt $cfe5 + .dbyt $cfe6 + .dbyt $cfe7 + .dbyt $cfe8 + .dbyt $cfe9 + .dbyt $cfea + .dbyt $cfeb + .dbyt $cfec + .dbyt $cfed + .dbyt $cfee + .dbyt $cfef + .dbyt $cff0 + .dbyt $cff1 + .dbyt $cff2 + .dbyt $cff3 + .dbyt $cff4 + .dbyt $cff5 + .dbyt $cff6 + .dbyt $cff7 + .dbyt $cff8 + .dbyt $cff9 + .dbyt $cffa + .dbyt $cffb + .dbyt $cffc + .dbyt $cffd + .dbyt $cffe + .dbyt $cfff + .dbyt $d000 + .dbyt $d001 + .dbyt $d002 + .dbyt $d003 + .dbyt $d004 + .dbyt $d005 + .dbyt $d006 + .dbyt $d007 + .dbyt $d008 + .dbyt $d009 + .dbyt $d00a + .dbyt $d00b + .dbyt $d00c + .dbyt $d00d + .dbyt $d00e + .dbyt $d00f + .dbyt $dfe1 + .dbyt $dfe2 + .dbyt $dfe3 + .dbyt $dfe4 + .dbyt $dfe5 + .dbyt $dfe6 + .dbyt $dfe7 + .dbyt $dfe8 + .dbyt $dfe9 + .dbyt $dfea + .dbyt $dfeb + .dbyt $dfec + .dbyt $dfed + .dbyt $dfee + .dbyt $dfef + .dbyt $dff0 + .dbyt $dff1 + .dbyt $dff2 + .dbyt $dff3 + .dbyt $dff4 + .dbyt $dff5 + .dbyt $dff6 + .dbyt $dff7 + .dbyt $dff8 + .dbyt $dff9 + .dbyt $dffa + .dbyt $dffb + .dbyt $dffc + .dbyt $dffd + .dbyt $dffe + .dbyt $dfff + .dbyt $e000 + .dbyt $e001 + .dbyt $e002 + .dbyt $e003 + .dbyt $e004 + .dbyt $e005 + .dbyt $e006 + .dbyt $e007 + .dbyt $e008 + .dbyt $e009 + .dbyt $e00a + .dbyt $e00b + .dbyt $e00c + .dbyt $e00d + .dbyt $e00e + .dbyt $e00f + .dbyt $efe1 + .dbyt $efe2 + .dbyt $efe3 + .dbyt $efe4 + .dbyt $efe5 + .dbyt $efe6 + .dbyt $efe7 + .dbyt $efe8 + .dbyt $efe9 + .dbyt $efea + .dbyt $efeb + .dbyt $efec + .dbyt $efed + .dbyt $efee + .dbyt $efef + .dbyt $eff0 + .dbyt $eff1 + .dbyt $eff2 + .dbyt $eff3 + .dbyt $eff4 + .dbyt $eff5 + .dbyt $eff6 + .dbyt $eff7 + .dbyt $eff8 + .dbyt $eff9 + .dbyt $effa + .dbyt $effb + .dbyt $effc + .dbyt $effd + .dbyt $effe + .dbyt $efff + .dbyt $f000 + .dbyt $f001 + .dbyt $f002 + .dbyt $f003 + .dbyt $f004 + .dbyt $f005 + .dbyt $f006 + .dbyt $f007 + .dbyt $f008 + .dbyt $f009 + .dbyt $f00a + .dbyt $f00b + .dbyt $f00c + .dbyt $f00d + .dbyt $f00e + .dbyt $f00f + .dbyt $ffe1 + .dbyt $ffe2 + .dbyt $ffe3 + .dbyt $ffe4 + .dbyt $ffe5 + .dbyt $ffe6 + .dbyt $ffe7 + .dbyt $ffe8 + .dbyt $ffe9 + .dbyt $ffea + .dbyt $ffeb + .dbyt $ffec + .dbyt $ffed + .dbyt $ffee + .dbyt $ffef + .dbyt $fff0 + .dbyt $fff1 + .dbyt $fff2 + .dbyt $fff3 + .dbyt $fff4 + .dbyt $fff5 + .dbyt $fff6 + .dbyt $fff7 + .dbyt $fff8 + .dbyt $fff9 + .dbyt $fffa + .dbyt $fffb + .dbyt $fffc + .dbyt $fffd + .dbyt $fffe + .dbyt $ffff - ; 4-digit hex values, uppercase - .dbyt $0000 - .dbyt $0001 - .dbyt $0002 - .dbyt $0003 - .dbyt $0004 - .dbyt $0005 - .dbyt $0006 - .dbyt $0007 - .dbyt $0008 - .dbyt $0009 - .dbyt $000A - .dbyt $000B - .dbyt $000C - .dbyt $000D - .dbyt $000E - .dbyt $000F - .dbyt $0010 - .dbyt $0011 - .dbyt $0012 - .dbyt $0013 - .dbyt $0070 - .dbyt $0071 - .dbyt $0072 - .dbyt $0073 - .dbyt $0074 - .dbyt $0075 - .dbyt $0076 - .dbyt $0077 - .dbyt $0078 - .dbyt $0079 - .dbyt $007A - .dbyt $007B - .dbyt $007C - .dbyt $007D - .dbyt $007E - .dbyt $007F - .dbyt $0080 - .dbyt $0081 - .dbyt $0082 - .dbyt $0083 - .dbyt $0084 - .dbyt $0085 - .dbyt $0086 - .dbyt $00F0 - .dbyt $00F1 - .dbyt $00F2 - .dbyt $00F3 - .dbyt $00F4 - .dbyt $00F5 - .dbyt $00F6 - .dbyt $00F7 - .dbyt $00F8 - .dbyt $00F9 - .dbyt $00FA - .dbyt $00FB - .dbyt $00FC - .dbyt $00FD - .dbyt $00FE - .dbyt $00FF - .dbyt $0100 - .dbyt $0101 - .dbyt $0102 - .dbyt $0103 - .dbyt $0FD2 - .dbyt $0FD3 - .dbyt $0FD4 - .dbyt $0FD5 - .dbyt $0FD6 - .dbyt $0FD7 - .dbyt $0FD8 - .dbyt $0FD9 - .dbyt $0FDA - .dbyt $0FDB - .dbyt $0FDC - .dbyt $0FDD - .dbyt $0FDE - .dbyt $0FDF - .dbyt $0FE0 - .dbyt $0FE1 - .dbyt $0FE2 - .dbyt $0FE3 - .dbyt $0FE4 - .dbyt $0FE5 - .dbyt $0FE6 - .dbyt $0FE7 - .dbyt $0FE8 - .dbyt $0FE9 - .dbyt $0FEA - .dbyt $0FEB - .dbyt $0FEC - .dbyt $0FED - .dbyt $0FEE - .dbyt $0FEF - .dbyt $0FF0 - .dbyt $0FF1 - .dbyt $0FF2 - .dbyt $0FF3 - .dbyt $0FF4 - .dbyt $0FF5 - .dbyt $0FF6 - .dbyt $0FF7 - .dbyt $0FF8 - .dbyt $0FF9 - .dbyt $0FFA - .dbyt $0FFB - .dbyt $0FFC - .dbyt $0FFD - .dbyt $0FFE - .dbyt $0FFF - .dbyt $1000 - .dbyt $1001 - .dbyt $1002 - .dbyt $1003 - .dbyt $1004 - .dbyt $1005 - .dbyt $1006 - .dbyt $1007 - .dbyt $1008 - .dbyt $7FF0 - .dbyt $7FF1 - .dbyt $7FF2 - .dbyt $7FF3 - .dbyt $7FF4 - .dbyt $7FF5 - .dbyt $7FF6 - .dbyt $7FF7 - .dbyt $7FF8 - .dbyt $7FF9 - .dbyt $7FFA - .dbyt $7FFB - .dbyt $7FFC - .dbyt $7FFD - .dbyt $7FFE - .dbyt $7FFF - .dbyt $8000 - .dbyt $8001 - .dbyt $8002 - .dbyt $8003 - .dbyt $8004 - .dbyt $8005 - .dbyt $8006 - .dbyt $8007 - .dbyt $8008 - .dbyt $8009 - .dbyt $800A - .dbyt $800B - .dbyt $9FE1 - .dbyt $9FE2 - .dbyt $9FE3 - .dbyt $9FE4 - .dbyt $9FE5 - .dbyt $9FE6 - .dbyt $9FE7 - .dbyt $9FE8 - .dbyt $9FE9 - .dbyt $9FEA - .dbyt $9FEB - .dbyt $9FEC - .dbyt $9FED - .dbyt $9FEE - .dbyt $9FEF - .dbyt $9FF0 - .dbyt $9FF1 - .dbyt $9FF2 - .dbyt $9FF3 - .dbyt $9FF4 - .dbyt $9FF5 - .dbyt $9FF6 - .dbyt $9FF7 - .dbyt $9FF8 - .dbyt $9FF9 - .dbyt $9FFA - .dbyt $9FFB - .dbyt $9FFC - .dbyt $9FFD - .dbyt $9FFE - .dbyt $9FFF - .dbyt $A000 - .dbyt $A001 - .dbyt $A002 - .dbyt $A003 - .dbyt $A004 - .dbyt $A005 - .dbyt $A006 - .dbyt $A007 - .dbyt $A008 - .dbyt $A009 - .dbyt $A00A - .dbyt $A00B - .dbyt $A00C - .dbyt $A00D - .dbyt $A00E - .dbyt $A00F - .dbyt $AFE1 - .dbyt $AFE2 - .dbyt $AFE3 - .dbyt $AFE4 - .dbyt $AFE5 - .dbyt $AFE6 - .dbyt $AFE7 - .dbyt $AFE8 - .dbyt $AFE9 - .dbyt $AFEA - .dbyt $AFEB - .dbyt $AFEC - .dbyt $AFED - .dbyt $AFEE - .dbyt $AFEF - .dbyt $AFF0 - .dbyt $AFF1 - .dbyt $AFF2 - .dbyt $AFF3 - .dbyt $AFF4 - .dbyt $AFF5 - .dbyt $AFF6 - .dbyt $AFF7 - .dbyt $AFF8 - .dbyt $AFF9 - .dbyt $AFFA - .dbyt $AFFB - .dbyt $AFFC - .dbyt $AFFD - .dbyt $AFFE - .dbyt $AFFF - .dbyt $B000 - .dbyt $B001 - .dbyt $B002 - .dbyt $B003 - .dbyt $B004 - .dbyt $B005 - .dbyt $B006 - .dbyt $B007 - .dbyt $B008 - .dbyt $B009 - .dbyt $B00A - .dbyt $B00B - .dbyt $B00C - .dbyt $B00D - .dbyt $B00E - .dbyt $B00F - .dbyt $BFE1 - .dbyt $BFE2 - .dbyt $BFE3 - .dbyt $BFE4 - .dbyt $BFE5 - .dbyt $BFE6 - .dbyt $BFE7 - .dbyt $BFE8 - .dbyt $BFE9 - .dbyt $BFEA - .dbyt $BFEB - .dbyt $BFEC - .dbyt $BFED - .dbyt $BFEE - .dbyt $BFEF - .dbyt $BFF0 - .dbyt $BFF1 - .dbyt $BFF2 - .dbyt $BFF3 - .dbyt $BFF4 - .dbyt $BFF5 - .dbyt $BFF6 - .dbyt $BFF7 - .dbyt $BFF8 - .dbyt $BFF9 - .dbyt $BFFA - .dbyt $BFFB - .dbyt $BFFC - .dbyt $BFFD - .dbyt $BFFE - .dbyt $BFFF - .dbyt $C000 - .dbyt $C001 - .dbyt $C002 - .dbyt $C003 - .dbyt $C004 - .dbyt $C005 - .dbyt $C006 - .dbyt $C007 - .dbyt $C008 - .dbyt $C009 - .dbyt $C00A - .dbyt $C00B - .dbyt $C00C - .dbyt $C00D - .dbyt $C00E - .dbyt $C00F - .dbyt $CFE1 - .dbyt $CFE2 - .dbyt $CFE3 - .dbyt $CFE4 - .dbyt $CFE5 - .dbyt $CFE6 - .dbyt $CFE7 - .dbyt $CFE8 - .dbyt $CFE9 - .dbyt $CFEA - .dbyt $CFEB - .dbyt $CFEC - .dbyt $CFED - .dbyt $CFEE - .dbyt $CFEF - .dbyt $CFF0 - .dbyt $CFF1 - .dbyt $CFF2 - .dbyt $CFF3 - .dbyt $CFF4 - .dbyt $CFF5 - .dbyt $CFF6 - .dbyt $CFF7 - .dbyt $CFF8 - .dbyt $CFF9 - .dbyt $CFFA - .dbyt $CFFB - .dbyt $CFFC - .dbyt $CFFD - .dbyt $CFFE - .dbyt $CFFF - .dbyt $D000 - .dbyt $D001 - .dbyt $D002 - .dbyt $D003 - .dbyt $D004 - .dbyt $D005 - .dbyt $D006 - .dbyt $D007 - .dbyt $D008 - .dbyt $D009 - .dbyt $D00A - .dbyt $D00B - .dbyt $D00C - .dbyt $D00D - .dbyt $D00E - .dbyt $D00F - .dbyt $DFE1 - .dbyt $DFE2 - .dbyt $DFE3 - .dbyt $DFE4 - .dbyt $DFE5 - .dbyt $DFE6 - .dbyt $DFE7 - .dbyt $DFE8 - .dbyt $DFE9 - .dbyt $DFEA - .dbyt $DFEB - .dbyt $DFEC - .dbyt $DFED - .dbyt $DFEE - .dbyt $DFEF - .dbyt $DFF0 - .dbyt $DFF1 - .dbyt $DFF2 - .dbyt $DFF3 - .dbyt $DFF4 - .dbyt $DFF5 - .dbyt $DFF6 - .dbyt $DFF7 - .dbyt $DFF8 - .dbyt $DFF9 - .dbyt $DFFA - .dbyt $DFFB - .dbyt $DFFC - .dbyt $DFFD - .dbyt $DFFE - .dbyt $DFFF - .dbyt $E000 - .dbyt $E001 - .dbyt $E002 - .dbyt $E003 - .dbyt $E004 - .dbyt $E005 - .dbyt $E006 - .dbyt $E007 - .dbyt $E008 - .dbyt $E009 - .dbyt $E00A - .dbyt $E00B - .dbyt $E00C - .dbyt $E00D - .dbyt $E00E - .dbyt $E00F - .dbyt $EFE1 - .dbyt $EFE2 - .dbyt $EFE3 - .dbyt $EFE4 - .dbyt $EFE5 - .dbyt $EFE6 - .dbyt $EFE7 - .dbyt $EFE8 - .dbyt $EFE9 - .dbyt $EFEA - .dbyt $EFEB - .dbyt $EFEC - .dbyt $EFED - .dbyt $EFEE - .dbyt $EFEF - .dbyt $EFF0 - .dbyt $EFF1 - .dbyt $EFF2 - .dbyt $EFF3 - .dbyt $EFF4 - .dbyt $EFF5 - .dbyt $EFF6 - .dbyt $EFF7 - .dbyt $EFF8 - .dbyt $EFF9 - .dbyt $EFFA - .dbyt $EFFB - .dbyt $EFFC - .dbyt $EFFD - .dbyt $EFFE - .dbyt $EFFF - .dbyt $F000 - .dbyt $F001 - .dbyt $F002 - .dbyt $F003 - .dbyt $F004 - .dbyt $F005 - .dbyt $F006 - .dbyt $F007 - .dbyt $F008 - .dbyt $F009 - .dbyt $F00A - .dbyt $F00B - .dbyt $F00C - .dbyt $F00D - .dbyt $F00E - .dbyt $F00F - .dbyt $FFE1 - .dbyt $FFE2 - .dbyt $FFE3 - .dbyt $FFE4 - .dbyt $FFE5 - .dbyt $FFE6 - .dbyt $FFE7 - .dbyt $FFE8 - .dbyt $FFE9 - .dbyt $FFEA - .dbyt $FFEB - .dbyt $FFEC - .dbyt $FFED - .dbyt $FFEE - .dbyt $FFEF - .dbyt $FFF0 - .dbyt $FFF1 - .dbyt $FFF2 - .dbyt $FFF3 - .dbyt $FFF4 - .dbyt $FFF5 - .dbyt $FFF6 - .dbyt $FFF7 - .dbyt $FFF8 - .dbyt $FFF9 - .dbyt $FFFA - .dbyt $FFFB - .dbyt $FFFC - .dbyt $FFFD - .dbyt $FFFE - .dbyt $FFFF + ; 4-digit hex values, uppercase + .dbyt $0000 + .dbyt $0001 + .dbyt $0002 + .dbyt $0003 + .dbyt $0004 + .dbyt $0005 + .dbyt $0006 + .dbyt $0007 + .dbyt $0008 + .dbyt $0009 + .dbyt $000A + .dbyt $000B + .dbyt $000C + .dbyt $000D + .dbyt $000E + .dbyt $000F + .dbyt $0010 + .dbyt $0011 + .dbyt $0012 + .dbyt $0013 + .dbyt $0070 + .dbyt $0071 + .dbyt $0072 + .dbyt $0073 + .dbyt $0074 + .dbyt $0075 + .dbyt $0076 + .dbyt $0077 + .dbyt $0078 + .dbyt $0079 + .dbyt $007A + .dbyt $007B + .dbyt $007C + .dbyt $007D + .dbyt $007E + .dbyt $007F + .dbyt $0080 + .dbyt $0081 + .dbyt $0082 + .dbyt $0083 + .dbyt $0084 + .dbyt $0085 + .dbyt $0086 + .dbyt $00F0 + .dbyt $00F1 + .dbyt $00F2 + .dbyt $00F3 + .dbyt $00F4 + .dbyt $00F5 + .dbyt $00F6 + .dbyt $00F7 + .dbyt $00F8 + .dbyt $00F9 + .dbyt $00FA + .dbyt $00FB + .dbyt $00FC + .dbyt $00FD + .dbyt $00FE + .dbyt $00FF + .dbyt $0100 + .dbyt $0101 + .dbyt $0102 + .dbyt $0103 + .dbyt $0FD2 + .dbyt $0FD3 + .dbyt $0FD4 + .dbyt $0FD5 + .dbyt $0FD6 + .dbyt $0FD7 + .dbyt $0FD8 + .dbyt $0FD9 + .dbyt $0FDA + .dbyt $0FDB + .dbyt $0FDC + .dbyt $0FDD + .dbyt $0FDE + .dbyt $0FDF + .dbyt $0FE0 + .dbyt $0FE1 + .dbyt $0FE2 + .dbyt $0FE3 + .dbyt $0FE4 + .dbyt $0FE5 + .dbyt $0FE6 + .dbyt $0FE7 + .dbyt $0FE8 + .dbyt $0FE9 + .dbyt $0FEA + .dbyt $0FEB + .dbyt $0FEC + .dbyt $0FED + .dbyt $0FEE + .dbyt $0FEF + .dbyt $0FF0 + .dbyt $0FF1 + .dbyt $0FF2 + .dbyt $0FF3 + .dbyt $0FF4 + .dbyt $0FF5 + .dbyt $0FF6 + .dbyt $0FF7 + .dbyt $0FF8 + .dbyt $0FF9 + .dbyt $0FFA + .dbyt $0FFB + .dbyt $0FFC + .dbyt $0FFD + .dbyt $0FFE + .dbyt $0FFF + .dbyt $1000 + .dbyt $1001 + .dbyt $1002 + .dbyt $1003 + .dbyt $1004 + .dbyt $1005 + .dbyt $1006 + .dbyt $1007 + .dbyt $1008 + .dbyt $7FF0 + .dbyt $7FF1 + .dbyt $7FF2 + .dbyt $7FF3 + .dbyt $7FF4 + .dbyt $7FF5 + .dbyt $7FF6 + .dbyt $7FF7 + .dbyt $7FF8 + .dbyt $7FF9 + .dbyt $7FFA + .dbyt $7FFB + .dbyt $7FFC + .dbyt $7FFD + .dbyt $7FFE + .dbyt $7FFF + .dbyt $8000 + .dbyt $8001 + .dbyt $8002 + .dbyt $8003 + .dbyt $8004 + .dbyt $8005 + .dbyt $8006 + .dbyt $8007 + .dbyt $8008 + .dbyt $8009 + .dbyt $800A + .dbyt $800B + .dbyt $9FE1 + .dbyt $9FE2 + .dbyt $9FE3 + .dbyt $9FE4 + .dbyt $9FE5 + .dbyt $9FE6 + .dbyt $9FE7 + .dbyt $9FE8 + .dbyt $9FE9 + .dbyt $9FEA + .dbyt $9FEB + .dbyt $9FEC + .dbyt $9FED + .dbyt $9FEE + .dbyt $9FEF + .dbyt $9FF0 + .dbyt $9FF1 + .dbyt $9FF2 + .dbyt $9FF3 + .dbyt $9FF4 + .dbyt $9FF5 + .dbyt $9FF6 + .dbyt $9FF7 + .dbyt $9FF8 + .dbyt $9FF9 + .dbyt $9FFA + .dbyt $9FFB + .dbyt $9FFC + .dbyt $9FFD + .dbyt $9FFE + .dbyt $9FFF + .dbyt $A000 + .dbyt $A001 + .dbyt $A002 + .dbyt $A003 + .dbyt $A004 + .dbyt $A005 + .dbyt $A006 + .dbyt $A007 + .dbyt $A008 + .dbyt $A009 + .dbyt $A00A + .dbyt $A00B + .dbyt $A00C + .dbyt $A00D + .dbyt $A00E + .dbyt $A00F + .dbyt $AFE1 + .dbyt $AFE2 + .dbyt $AFE3 + .dbyt $AFE4 + .dbyt $AFE5 + .dbyt $AFE6 + .dbyt $AFE7 + .dbyt $AFE8 + .dbyt $AFE9 + .dbyt $AFEA + .dbyt $AFEB + .dbyt $AFEC + .dbyt $AFED + .dbyt $AFEE + .dbyt $AFEF + .dbyt $AFF0 + .dbyt $AFF1 + .dbyt $AFF2 + .dbyt $AFF3 + .dbyt $AFF4 + .dbyt $AFF5 + .dbyt $AFF6 + .dbyt $AFF7 + .dbyt $AFF8 + .dbyt $AFF9 + .dbyt $AFFA + .dbyt $AFFB + .dbyt $AFFC + .dbyt $AFFD + .dbyt $AFFE + .dbyt $AFFF + .dbyt $B000 + .dbyt $B001 + .dbyt $B002 + .dbyt $B003 + .dbyt $B004 + .dbyt $B005 + .dbyt $B006 + .dbyt $B007 + .dbyt $B008 + .dbyt $B009 + .dbyt $B00A + .dbyt $B00B + .dbyt $B00C + .dbyt $B00D + .dbyt $B00E + .dbyt $B00F + .dbyt $BFE1 + .dbyt $BFE2 + .dbyt $BFE3 + .dbyt $BFE4 + .dbyt $BFE5 + .dbyt $BFE6 + .dbyt $BFE7 + .dbyt $BFE8 + .dbyt $BFE9 + .dbyt $BFEA + .dbyt $BFEB + .dbyt $BFEC + .dbyt $BFED + .dbyt $BFEE + .dbyt $BFEF + .dbyt $BFF0 + .dbyt $BFF1 + .dbyt $BFF2 + .dbyt $BFF3 + .dbyt $BFF4 + .dbyt $BFF5 + .dbyt $BFF6 + .dbyt $BFF7 + .dbyt $BFF8 + .dbyt $BFF9 + .dbyt $BFFA + .dbyt $BFFB + .dbyt $BFFC + .dbyt $BFFD + .dbyt $BFFE + .dbyt $BFFF + .dbyt $C000 + .dbyt $C001 + .dbyt $C002 + .dbyt $C003 + .dbyt $C004 + .dbyt $C005 + .dbyt $C006 + .dbyt $C007 + .dbyt $C008 + .dbyt $C009 + .dbyt $C00A + .dbyt $C00B + .dbyt $C00C + .dbyt $C00D + .dbyt $C00E + .dbyt $C00F + .dbyt $CFE1 + .dbyt $CFE2 + .dbyt $CFE3 + .dbyt $CFE4 + .dbyt $CFE5 + .dbyt $CFE6 + .dbyt $CFE7 + .dbyt $CFE8 + .dbyt $CFE9 + .dbyt $CFEA + .dbyt $CFEB + .dbyt $CFEC + .dbyt $CFED + .dbyt $CFEE + .dbyt $CFEF + .dbyt $CFF0 + .dbyt $CFF1 + .dbyt $CFF2 + .dbyt $CFF3 + .dbyt $CFF4 + .dbyt $CFF5 + .dbyt $CFF6 + .dbyt $CFF7 + .dbyt $CFF8 + .dbyt $CFF9 + .dbyt $CFFA + .dbyt $CFFB + .dbyt $CFFC + .dbyt $CFFD + .dbyt $CFFE + .dbyt $CFFF + .dbyt $D000 + .dbyt $D001 + .dbyt $D002 + .dbyt $D003 + .dbyt $D004 + .dbyt $D005 + .dbyt $D006 + .dbyt $D007 + .dbyt $D008 + .dbyt $D009 + .dbyt $D00A + .dbyt $D00B + .dbyt $D00C + .dbyt $D00D + .dbyt $D00E + .dbyt $D00F + .dbyt $DFE1 + .dbyt $DFE2 + .dbyt $DFE3 + .dbyt $DFE4 + .dbyt $DFE5 + .dbyt $DFE6 + .dbyt $DFE7 + .dbyt $DFE8 + .dbyt $DFE9 + .dbyt $DFEA + .dbyt $DFEB + .dbyt $DFEC + .dbyt $DFED + .dbyt $DFEE + .dbyt $DFEF + .dbyt $DFF0 + .dbyt $DFF1 + .dbyt $DFF2 + .dbyt $DFF3 + .dbyt $DFF4 + .dbyt $DFF5 + .dbyt $DFF6 + .dbyt $DFF7 + .dbyt $DFF8 + .dbyt $DFF9 + .dbyt $DFFA + .dbyt $DFFB + .dbyt $DFFC + .dbyt $DFFD + .dbyt $DFFE + .dbyt $DFFF + .dbyt $E000 + .dbyt $E001 + .dbyt $E002 + .dbyt $E003 + .dbyt $E004 + .dbyt $E005 + .dbyt $E006 + .dbyt $E007 + .dbyt $E008 + .dbyt $E009 + .dbyt $E00A + .dbyt $E00B + .dbyt $E00C + .dbyt $E00D + .dbyt $E00E + .dbyt $E00F + .dbyt $EFE1 + .dbyt $EFE2 + .dbyt $EFE3 + .dbyt $EFE4 + .dbyt $EFE5 + .dbyt $EFE6 + .dbyt $EFE7 + .dbyt $EFE8 + .dbyt $EFE9 + .dbyt $EFEA + .dbyt $EFEB + .dbyt $EFEC + .dbyt $EFED + .dbyt $EFEE + .dbyt $EFEF + .dbyt $EFF0 + .dbyt $EFF1 + .dbyt $EFF2 + .dbyt $EFF3 + .dbyt $EFF4 + .dbyt $EFF5 + .dbyt $EFF6 + .dbyt $EFF7 + .dbyt $EFF8 + .dbyt $EFF9 + .dbyt $EFFA + .dbyt $EFFB + .dbyt $EFFC + .dbyt $EFFD + .dbyt $EFFE + .dbyt $EFFF + .dbyt $F000 + .dbyt $F001 + .dbyt $F002 + .dbyt $F003 + .dbyt $F004 + .dbyt $F005 + .dbyt $F006 + .dbyt $F007 + .dbyt $F008 + .dbyt $F009 + .dbyt $F00A + .dbyt $F00B + .dbyt $F00C + .dbyt $F00D + .dbyt $F00E + .dbyt $F00F + .dbyt $FFE1 + .dbyt $FFE2 + .dbyt $FFE3 + .dbyt $FFE4 + .dbyt $FFE5 + .dbyt $FFE6 + .dbyt $FFE7 + .dbyt $FFE8 + .dbyt $FFE9 + .dbyt $FFEA + .dbyt $FFEB + .dbyt $FFEC + .dbyt $FFED + .dbyt $FFEE + .dbyt $FFEF + .dbyt $FFF0 + .dbyt $FFF1 + .dbyt $FFF2 + .dbyt $FFF3 + .dbyt $FFF4 + .dbyt $FFF5 + .dbyt $FFF6 + .dbyt $FFF7 + .dbyt $FFF8 + .dbyt $FFF9 + .dbyt $FFFA + .dbyt $FFFB + .dbyt $FFFC + .dbyt $FFFD + .dbyt $FFFE + .dbyt $FFFF - ; alternative hex values - .dbyt 0h - .dbyt 1h - .dbyt 2h - .dbyt 3h - .dbyt 4h - .dbyt 5h - .dbyt 6h - .dbyt 7h - .dbyt 8h - .dbyt 9h - .dbyt 0ah - .dbyt 0bh - .dbyt 0ch - .dbyt 0dh - .dbyt 0eh - .dbyt 0fh - .dbyt 10h - .dbyt 11h - .dbyt 12h - .dbyt 13h - .dbyt 70h - .dbyt 71h - .dbyt 72h - .dbyt 73h - .dbyt 74h - .dbyt 75h - .dbyt 76h - .dbyt 77h - .dbyt 78h - .dbyt 79h - .dbyt 7ah - .dbyt 7bh - .dbyt 7ch - .dbyt 7dh - .dbyt 7eh - .dbyt 7fh - .dbyt 80h - .dbyt 81h - .dbyt 82h - .dbyt 83h - .dbyt 84h - .dbyt 85h - .dbyt 86h - .dbyt 0f0h - .dbyt 0f1h - .dbyt 0f2h - .dbyt 0f3h - .dbyt 0f4h - .dbyt 0f5h - .dbyt 0f6h - .dbyt 0f7h - .dbyt 0f8h - .dbyt 0f9h - .dbyt 0fah - .dbyt 0fbh - .dbyt 0fch - .dbyt 0fdh - .dbyt 0feh - .dbyt 0ffh - .dbyt 100h - .dbyt 101h - .dbyt 102h - .dbyt 103h - .dbyt 0fd2h - .dbyt 0fd3h - .dbyt 0fd4h - .dbyt 0fd5h - .dbyt 0fd6h - .dbyt 0fd7h - .dbyt 0fd8h - .dbyt 0fd9h - .dbyt 0fdah - .dbyt 0fdbh - .dbyt 0fdch - .dbyt 0fddh - .dbyt 0fdeh - .dbyt 0fdfh - .dbyt 0fe0h - .dbyt 0fe1h - .dbyt 0fe2h - .dbyt 0fe3h - .dbyt 0fe4h - .dbyt 0fe5h - .dbyt 0fe6h - .dbyt 0fe7h - .dbyt 0fe8h - .dbyt 0fe9h - .dbyt 0feah - .dbyt 0febh - .dbyt 0fech - .dbyt 0fedh - .dbyt 0feeh - .dbyt 0fefh - .dbyt 0ff0h - .dbyt 0ff1h - .dbyt 0ff2h - .dbyt 0ff3h - .dbyt 0ff4h - .dbyt 0ff5h - .dbyt 0ff6h - .dbyt 0ff7h - .dbyt 0ff8h - .dbyt 0ff9h - .dbyt 0ffah - .dbyt 0ffbh - .dbyt 0ffch - .dbyt 0ffdh - .dbyt 0ffeh - .dbyt 0fffh - .dbyt 1000h - .dbyt 1001h - .dbyt 1002h - .dbyt 1003h - .dbyt 1004h - .dbyt 1005h - .dbyt 1006h - .dbyt 1007h - .dbyt 1008h - .dbyt 7ff0h - .dbyt 7ff1h - .dbyt 7ff2h - .dbyt 7ff3h - .dbyt 7ff4h - .dbyt 7ff5h - .dbyt 7ff6h - .dbyt 7ff7h - .dbyt 7ff8h - .dbyt 7ff9h - .dbyt 7ffah - .dbyt 7ffbh - .dbyt 7ffch - .dbyt 7ffdh - .dbyt 7ffeh - .dbyt 7fffh - .dbyt 8000h - .dbyt 8001h - .dbyt 8002h - .dbyt 8003h - .dbyt 8004h - .dbyt 8005h - .dbyt 8006h - .dbyt 8007h - .dbyt 8008h - .dbyt 8009h - .dbyt 800ah - .dbyt 800bh - .dbyt 9fe1h - .dbyt 9fe2h - .dbyt 9fe3h - .dbyt 9fe4h - .dbyt 9fe5h - .dbyt 9fe6h - .dbyt 9fe7h - .dbyt 9fe8h - .dbyt 9fe9h - .dbyt 9feah - .dbyt 9febh - .dbyt 9fech - .dbyt 9fedh - .dbyt 9feeh - .dbyt 9fefh - .dbyt 9ff0h - .dbyt 9ff1h - .dbyt 9ff2h - .dbyt 9ff3h - .dbyt 9ff4h - .dbyt 9ff5h - .dbyt 9ff6h - .dbyt 9ff7h - .dbyt 9ff8h - .dbyt 9ff9h - .dbyt 9ffah - .dbyt 9ffbh - .dbyt 9ffch - .dbyt 9ffdh - .dbyt 9ffeh - .dbyt 9fffh - .dbyt 0a000h - .dbyt 0a001h - .dbyt 0a002h - .dbyt 0a003h - .dbyt 0a004h - .dbyt 0a005h - .dbyt 0a006h - .dbyt 0a007h - .dbyt 0a008h - .dbyt 0a009h - .dbyt 0a00ah - .dbyt 0a00bh - .dbyt 0a00ch - .dbyt 0a00dh - .dbyt 0a00eh - .dbyt 0a00fh - .dbyt 0afe1h - .dbyt 0afe2h - .dbyt 0afe3h - .dbyt 0afe4h - .dbyt 0afe5h - .dbyt 0afe6h - .dbyt 0afe7h - .dbyt 0afe8h - .dbyt 0afe9h - .dbyt 0afeah - .dbyt 0afebh - .dbyt 0afech - .dbyt 0afedh - .dbyt 0afeeh - .dbyt 0afefh - .dbyt 0aff0h - .dbyt 0aff1h - .dbyt 0aff2h - .dbyt 0aff3h - .dbyt 0aff4h - .dbyt 0aff5h - .dbyt 0aff6h - .dbyt 0aff7h - .dbyt 0aff8h - .dbyt 0aff9h - .dbyt 0affah - .dbyt 0affbh - .dbyt 0affch - .dbyt 0affdh - .dbyt 0affeh - .dbyt 0afffh - .dbyt 0b000h - .dbyt 0b001h - .dbyt 0b002h - .dbyt 0b003h - .dbyt 0b004h - .dbyt 0b005h - .dbyt 0b006h - .dbyt 0b007h - .dbyt 0b008h - .dbyt 0b009h - .dbyt 0b00ah - .dbyt 0b00bh - .dbyt 0b00ch - .dbyt 0b00dh - .dbyt 0b00eh - .dbyt 0b00fh - .dbyt 0bfe1h - .dbyt 0bfe2h - .dbyt 0bfe3h - .dbyt 0bfe4h - .dbyt 0bfe5h - .dbyt 0bfe6h - .dbyt 0bfe7h - .dbyt 0bfe8h - .dbyt 0bfe9h - .dbyt 0bfeah - .dbyt 0bfebh - .dbyt 0bfech - .dbyt 0bfedh - .dbyt 0bfeeh - .dbyt 0bfefh - .dbyt 0bff0h - .dbyt 0bff1h - .dbyt 0bff2h - .dbyt 0bff3h - .dbyt 0bff4h - .dbyt 0bff5h - .dbyt 0bff6h - .dbyt 0bff7h - .dbyt 0bff8h - .dbyt 0bff9h - .dbyt 0bffah - .dbyt 0bffbh - .dbyt 0bffch - .dbyt 0bffdh - .dbyt 0bffeh - .dbyt 0bfffh - .dbyt 0c000h - .dbyt 0c001h - .dbyt 0c002h - .dbyt 0c003h - .dbyt 0c004h - .dbyt 0c005h - .dbyt 0c006h - .dbyt 0c007h - .dbyt 0c008h - .dbyt 0c009h - .dbyt 0c00ah - .dbyt 0c00bh - .dbyt 0c00ch - .dbyt 0c00dh - .dbyt 0c00eh - .dbyt 0c00fh - .dbyt 0cfe1h - .dbyt 0cfe2h - .dbyt 0cfe3h - .dbyt 0cfe4h - .dbyt 0cfe5h - .dbyt 0cfe6h - .dbyt 0cfe7h - .dbyt 0cfe8h - .dbyt 0cfe9h - .dbyt 0cfeah - .dbyt 0cfebh - .dbyt 0cfech - .dbyt 0cfedh - .dbyt 0cfeeh - .dbyt 0cfefh - .dbyt 0cff0h - .dbyt 0cff1h - .dbyt 0cff2h - .dbyt 0cff3h - .dbyt 0cff4h - .dbyt 0cff5h - .dbyt 0cff6h - .dbyt 0cff7h - .dbyt 0cff8h - .dbyt 0cff9h - .dbyt 0cffah - .dbyt 0cffbh - .dbyt 0cffch - .dbyt 0cffdh - .dbyt 0cffeh - .dbyt 0cfffh - .dbyt 0d000h - .dbyt 0d001h - .dbyt 0d002h - .dbyt 0d003h - .dbyt 0d004h - .dbyt 0d005h - .dbyt 0d006h - .dbyt 0d007h - .dbyt 0d008h - .dbyt 0d009h - .dbyt 0d00ah - .dbyt 0d00bh - .dbyt 0d00ch - .dbyt 0d00dh - .dbyt 0d00eh - .dbyt 0d00fh - .dbyt 0dfe1h - .dbyt 0dfe2h - .dbyt 0dfe3h - .dbyt 0dfe4h - .dbyt 0dfe5h - .dbyt 0dfe6h - .dbyt 0dfe7h - .dbyt 0dfe8h - .dbyt 0dfe9h - .dbyt 0dfeah - .dbyt 0dfebh - .dbyt 0dfech - .dbyt 0dfedh - .dbyt 0dfeeh - .dbyt 0dfefh - .dbyt 0dff0h - .dbyt 0dff1h - .dbyt 0dff2h - .dbyt 0dff3h - .dbyt 0dff4h - .dbyt 0dff5h - .dbyt 0dff6h - .dbyt 0dff7h - .dbyt 0dff8h - .dbyt 0dff9h - .dbyt 0dffah - .dbyt 0dffbh - .dbyt 0dffch - .dbyt 0dffdh - .dbyt 0dffeh - .dbyt 0dfffh - .dbyt 0e000h - .dbyt 0e001h - .dbyt 0e002h - .dbyt 0e003h - .dbyt 0e004h - .dbyt 0e005h - .dbyt 0e006h - .dbyt 0e007h - .dbyt 0e008h - .dbyt 0e009h - .dbyt 0e00ah - .dbyt 0e00bh - .dbyt 0e00ch - .dbyt 0e00dh - .dbyt 0e00eh - .dbyt 0e00fh - .dbyt 0efe1h - .dbyt 0efe2h - .dbyt 0efe3h - .dbyt 0efe4h - .dbyt 0efe5h - .dbyt 0efe6h - .dbyt 0efe7h - .dbyt 0efe8h - .dbyt 0efe9h - .dbyt 0efeah - .dbyt 0efebh - .dbyt 0efech - .dbyt 0efedh - .dbyt 0efeeh - .dbyt 0efefh - .dbyt 0eff0h - .dbyt 0eff1h - .dbyt 0eff2h - .dbyt 0eff3h - .dbyt 0eff4h - .dbyt 0eff5h - .dbyt 0eff6h - .dbyt 0eff7h - .dbyt 0eff8h - .dbyt 0eff9h - .dbyt 0effah - .dbyt 0effbh - .dbyt 0effch - .dbyt 0effdh - .dbyt 0effeh - .dbyt 0efffh - .dbyt 0f000h - .dbyt 0f001h - .dbyt 0f002h - .dbyt 0f003h - .dbyt 0f004h - .dbyt 0f005h - .dbyt 0f006h - .dbyt 0f007h - .dbyt 0f008h - .dbyt 0f009h - .dbyt 0f00ah - .dbyt 0f00bh - .dbyt 0f00ch - .dbyt 0f00dh - .dbyt 0f00eh - .dbyt 0f00fh - .dbyt 0ffe1h - .dbyt 0ffe2h - .dbyt 0ffe3h - .dbyt 0ffe4h - .dbyt 0ffe5h - .dbyt 0ffe6h - .dbyt 0ffe7h - .dbyt 0ffe8h - .dbyt 0ffe9h - .dbyt 0ffeah - .dbyt 0ffebh - .dbyt 0ffech - .dbyt 0ffedh - .dbyt 0ffeeh - .dbyt 0ffefh - .dbyt 0fff0h - .dbyt 0fff1h - .dbyt 0fff2h - .dbyt 0fff3h - .dbyt 0fff4h - .dbyt 0fff5h - .dbyt 0fff6h - .dbyt 0fff7h - .dbyt 0fff8h - .dbyt 0fff9h - .dbyt 0fffah - .dbyt 0fffbh - .dbyt 0fffch - .dbyt 0fffdh - .dbyt 0fffeh - .dbyt 0ffffh + ; alternative hex values + .dbyt 0h + .dbyt 1h + .dbyt 2h + .dbyt 3h + .dbyt 4h + .dbyt 5h + .dbyt 6h + .dbyt 7h + .dbyt 8h + .dbyt 9h + .dbyt 0ah + .dbyt 0bh + .dbyt 0ch + .dbyt 0dh + .dbyt 0eh + .dbyt 0fh + .dbyt 10h + .dbyt 11h + .dbyt 12h + .dbyt 13h + .dbyt 70h + .dbyt 71h + .dbyt 72h + .dbyt 73h + .dbyt 74h + .dbyt 75h + .dbyt 76h + .dbyt 77h + .dbyt 78h + .dbyt 79h + .dbyt 7ah + .dbyt 7bh + .dbyt 7ch + .dbyt 7dh + .dbyt 7eh + .dbyt 7fh + .dbyt 80h + .dbyt 81h + .dbyt 82h + .dbyt 83h + .dbyt 84h + .dbyt 85h + .dbyt 86h + .dbyt 0f0h + .dbyt 0f1h + .dbyt 0f2h + .dbyt 0f3h + .dbyt 0f4h + .dbyt 0f5h + .dbyt 0f6h + .dbyt 0f7h + .dbyt 0f8h + .dbyt 0f9h + .dbyt 0fah + .dbyt 0fbh + .dbyt 0fch + .dbyt 0fdh + .dbyt 0feh + .dbyt 0ffh + .dbyt 100h + .dbyt 101h + .dbyt 102h + .dbyt 103h + .dbyt 0fd2h + .dbyt 0fd3h + .dbyt 0fd4h + .dbyt 0fd5h + .dbyt 0fd6h + .dbyt 0fd7h + .dbyt 0fd8h + .dbyt 0fd9h + .dbyt 0fdah + .dbyt 0fdbh + .dbyt 0fdch + .dbyt 0fddh + .dbyt 0fdeh + .dbyt 0fdfh + .dbyt 0fe0h + .dbyt 0fe1h + .dbyt 0fe2h + .dbyt 0fe3h + .dbyt 0fe4h + .dbyt 0fe5h + .dbyt 0fe6h + .dbyt 0fe7h + .dbyt 0fe8h + .dbyt 0fe9h + .dbyt 0feah + .dbyt 0febh + .dbyt 0fech + .dbyt 0fedh + .dbyt 0feeh + .dbyt 0fefh + .dbyt 0ff0h + .dbyt 0ff1h + .dbyt 0ff2h + .dbyt 0ff3h + .dbyt 0ff4h + .dbyt 0ff5h + .dbyt 0ff6h + .dbyt 0ff7h + .dbyt 0ff8h + .dbyt 0ff9h + .dbyt 0ffah + .dbyt 0ffbh + .dbyt 0ffch + .dbyt 0ffdh + .dbyt 0ffeh + .dbyt 0fffh + .dbyt 1000h + .dbyt 1001h + .dbyt 1002h + .dbyt 1003h + .dbyt 1004h + .dbyt 1005h + .dbyt 1006h + .dbyt 1007h + .dbyt 1008h + .dbyt 7ff0h + .dbyt 7ff1h + .dbyt 7ff2h + .dbyt 7ff3h + .dbyt 7ff4h + .dbyt 7ff5h + .dbyt 7ff6h + .dbyt 7ff7h + .dbyt 7ff8h + .dbyt 7ff9h + .dbyt 7ffah + .dbyt 7ffbh + .dbyt 7ffch + .dbyt 7ffdh + .dbyt 7ffeh + .dbyt 7fffh + .dbyt 8000h + .dbyt 8001h + .dbyt 8002h + .dbyt 8003h + .dbyt 8004h + .dbyt 8005h + .dbyt 8006h + .dbyt 8007h + .dbyt 8008h + .dbyt 8009h + .dbyt 800ah + .dbyt 800bh + .dbyt 9fe1h + .dbyt 9fe2h + .dbyt 9fe3h + .dbyt 9fe4h + .dbyt 9fe5h + .dbyt 9fe6h + .dbyt 9fe7h + .dbyt 9fe8h + .dbyt 9fe9h + .dbyt 9feah + .dbyt 9febh + .dbyt 9fech + .dbyt 9fedh + .dbyt 9feeh + .dbyt 9fefh + .dbyt 9ff0h + .dbyt 9ff1h + .dbyt 9ff2h + .dbyt 9ff3h + .dbyt 9ff4h + .dbyt 9ff5h + .dbyt 9ff6h + .dbyt 9ff7h + .dbyt 9ff8h + .dbyt 9ff9h + .dbyt 9ffah + .dbyt 9ffbh + .dbyt 9ffch + .dbyt 9ffdh + .dbyt 9ffeh + .dbyt 9fffh + .dbyt 0a000h + .dbyt 0a001h + .dbyt 0a002h + .dbyt 0a003h + .dbyt 0a004h + .dbyt 0a005h + .dbyt 0a006h + .dbyt 0a007h + .dbyt 0a008h + .dbyt 0a009h + .dbyt 0a00ah + .dbyt 0a00bh + .dbyt 0a00ch + .dbyt 0a00dh + .dbyt 0a00eh + .dbyt 0a00fh + .dbyt 0afe1h + .dbyt 0afe2h + .dbyt 0afe3h + .dbyt 0afe4h + .dbyt 0afe5h + .dbyt 0afe6h + .dbyt 0afe7h + .dbyt 0afe8h + .dbyt 0afe9h + .dbyt 0afeah + .dbyt 0afebh + .dbyt 0afech + .dbyt 0afedh + .dbyt 0afeeh + .dbyt 0afefh + .dbyt 0aff0h + .dbyt 0aff1h + .dbyt 0aff2h + .dbyt 0aff3h + .dbyt 0aff4h + .dbyt 0aff5h + .dbyt 0aff6h + .dbyt 0aff7h + .dbyt 0aff8h + .dbyt 0aff9h + .dbyt 0affah + .dbyt 0affbh + .dbyt 0affch + .dbyt 0affdh + .dbyt 0affeh + .dbyt 0afffh + .dbyt 0b000h + .dbyt 0b001h + .dbyt 0b002h + .dbyt 0b003h + .dbyt 0b004h + .dbyt 0b005h + .dbyt 0b006h + .dbyt 0b007h + .dbyt 0b008h + .dbyt 0b009h + .dbyt 0b00ah + .dbyt 0b00bh + .dbyt 0b00ch + .dbyt 0b00dh + .dbyt 0b00eh + .dbyt 0b00fh + .dbyt 0bfe1h + .dbyt 0bfe2h + .dbyt 0bfe3h + .dbyt 0bfe4h + .dbyt 0bfe5h + .dbyt 0bfe6h + .dbyt 0bfe7h + .dbyt 0bfe8h + .dbyt 0bfe9h + .dbyt 0bfeah + .dbyt 0bfebh + .dbyt 0bfech + .dbyt 0bfedh + .dbyt 0bfeeh + .dbyt 0bfefh + .dbyt 0bff0h + .dbyt 0bff1h + .dbyt 0bff2h + .dbyt 0bff3h + .dbyt 0bff4h + .dbyt 0bff5h + .dbyt 0bff6h + .dbyt 0bff7h + .dbyt 0bff8h + .dbyt 0bff9h + .dbyt 0bffah + .dbyt 0bffbh + .dbyt 0bffch + .dbyt 0bffdh + .dbyt 0bffeh + .dbyt 0bfffh + .dbyt 0c000h + .dbyt 0c001h + .dbyt 0c002h + .dbyt 0c003h + .dbyt 0c004h + .dbyt 0c005h + .dbyt 0c006h + .dbyt 0c007h + .dbyt 0c008h + .dbyt 0c009h + .dbyt 0c00ah + .dbyt 0c00bh + .dbyt 0c00ch + .dbyt 0c00dh + .dbyt 0c00eh + .dbyt 0c00fh + .dbyt 0cfe1h + .dbyt 0cfe2h + .dbyt 0cfe3h + .dbyt 0cfe4h + .dbyt 0cfe5h + .dbyt 0cfe6h + .dbyt 0cfe7h + .dbyt 0cfe8h + .dbyt 0cfe9h + .dbyt 0cfeah + .dbyt 0cfebh + .dbyt 0cfech + .dbyt 0cfedh + .dbyt 0cfeeh + .dbyt 0cfefh + .dbyt 0cff0h + .dbyt 0cff1h + .dbyt 0cff2h + .dbyt 0cff3h + .dbyt 0cff4h + .dbyt 0cff5h + .dbyt 0cff6h + .dbyt 0cff7h + .dbyt 0cff8h + .dbyt 0cff9h + .dbyt 0cffah + .dbyt 0cffbh + .dbyt 0cffch + .dbyt 0cffdh + .dbyt 0cffeh + .dbyt 0cfffh + .dbyt 0d000h + .dbyt 0d001h + .dbyt 0d002h + .dbyt 0d003h + .dbyt 0d004h + .dbyt 0d005h + .dbyt 0d006h + .dbyt 0d007h + .dbyt 0d008h + .dbyt 0d009h + .dbyt 0d00ah + .dbyt 0d00bh + .dbyt 0d00ch + .dbyt 0d00dh + .dbyt 0d00eh + .dbyt 0d00fh + .dbyt 0dfe1h + .dbyt 0dfe2h + .dbyt 0dfe3h + .dbyt 0dfe4h + .dbyt 0dfe5h + .dbyt 0dfe6h + .dbyt 0dfe7h + .dbyt 0dfe8h + .dbyt 0dfe9h + .dbyt 0dfeah + .dbyt 0dfebh + .dbyt 0dfech + .dbyt 0dfedh + .dbyt 0dfeeh + .dbyt 0dfefh + .dbyt 0dff0h + .dbyt 0dff1h + .dbyt 0dff2h + .dbyt 0dff3h + .dbyt 0dff4h + .dbyt 0dff5h + .dbyt 0dff6h + .dbyt 0dff7h + .dbyt 0dff8h + .dbyt 0dff9h + .dbyt 0dffah + .dbyt 0dffbh + .dbyt 0dffch + .dbyt 0dffdh + .dbyt 0dffeh + .dbyt 0dfffh + .dbyt 0e000h + .dbyt 0e001h + .dbyt 0e002h + .dbyt 0e003h + .dbyt 0e004h + .dbyt 0e005h + .dbyt 0e006h + .dbyt 0e007h + .dbyt 0e008h + .dbyt 0e009h + .dbyt 0e00ah + .dbyt 0e00bh + .dbyt 0e00ch + .dbyt 0e00dh + .dbyt 0e00eh + .dbyt 0e00fh + .dbyt 0efe1h + .dbyt 0efe2h + .dbyt 0efe3h + .dbyt 0efe4h + .dbyt 0efe5h + .dbyt 0efe6h + .dbyt 0efe7h + .dbyt 0efe8h + .dbyt 0efe9h + .dbyt 0efeah + .dbyt 0efebh + .dbyt 0efech + .dbyt 0efedh + .dbyt 0efeeh + .dbyt 0efefh + .dbyt 0eff0h + .dbyt 0eff1h + .dbyt 0eff2h + .dbyt 0eff3h + .dbyt 0eff4h + .dbyt 0eff5h + .dbyt 0eff6h + .dbyt 0eff7h + .dbyt 0eff8h + .dbyt 0eff9h + .dbyt 0effah + .dbyt 0effbh + .dbyt 0effch + .dbyt 0effdh + .dbyt 0effeh + .dbyt 0efffh + .dbyt 0f000h + .dbyt 0f001h + .dbyt 0f002h + .dbyt 0f003h + .dbyt 0f004h + .dbyt 0f005h + .dbyt 0f006h + .dbyt 0f007h + .dbyt 0f008h + .dbyt 0f009h + .dbyt 0f00ah + .dbyt 0f00bh + .dbyt 0f00ch + .dbyt 0f00dh + .dbyt 0f00eh + .dbyt 0f00fh + .dbyt 0ffe1h + .dbyt 0ffe2h + .dbyt 0ffe3h + .dbyt 0ffe4h + .dbyt 0ffe5h + .dbyt 0ffe6h + .dbyt 0ffe7h + .dbyt 0ffe8h + .dbyt 0ffe9h + .dbyt 0ffeah + .dbyt 0ffebh + .dbyt 0ffech + .dbyt 0ffedh + .dbyt 0ffeeh + .dbyt 0ffefh + .dbyt 0fff0h + .dbyt 0fff1h + .dbyt 0fff2h + .dbyt 0fff3h + .dbyt 0fff4h + .dbyt 0fff5h + .dbyt 0fff6h + .dbyt 0fff7h + .dbyt 0fff8h + .dbyt 0fff9h + .dbyt 0fffah + .dbyt 0fffbh + .dbyt 0fffch + .dbyt 0fffdh + .dbyt 0fffeh + .dbyt 0ffffh - ; alternative hex values, uppercase - .dbyt 0h - .dbyt 1h - .dbyt 2h - .dbyt 3h - .dbyt 4h - .dbyt 5h - .dbyt 6h - .dbyt 7h - .dbyt 8h - .dbyt 9h - .dbyt 0Ah - .dbyt 0Bh - .dbyt 0Ch - .dbyt 0Dh - .dbyt 0Eh - .dbyt 0Fh - .dbyt 10h - .dbyt 11h - .dbyt 12h - .dbyt 13h - .dbyt 70h - .dbyt 71h - .dbyt 72h - .dbyt 73h - .dbyt 74h - .dbyt 75h - .dbyt 76h - .dbyt 77h - .dbyt 78h - .dbyt 79h - .dbyt 7Ah - .dbyt 7Bh - .dbyt 7Ch - .dbyt 7Dh - .dbyt 7Eh - .dbyt 7Fh - .dbyt 80h - .dbyt 81h - .dbyt 82h - .dbyt 83h - .dbyt 84h - .dbyt 85h - .dbyt 86h - .dbyt 0F0h - .dbyt 0F1h - .dbyt 0F2h - .dbyt 0F3h - .dbyt 0F4h - .dbyt 0F5h - .dbyt 0F6h - .dbyt 0F7h - .dbyt 0F8h - .dbyt 0F9h - .dbyt 0FAh - .dbyt 0FBh - .dbyt 0FCh - .dbyt 0FDh - .dbyt 0FEh - .dbyt 0FFh - .dbyt 100h - .dbyt 101h - .dbyt 102h - .dbyt 103h - .dbyt 0FD2h - .dbyt 0FD3h - .dbyt 0FD4h - .dbyt 0FD5h - .dbyt 0FD6h - .dbyt 0FD7h - .dbyt 0FD8h - .dbyt 0FD9h - .dbyt 0FDAh - .dbyt 0FDBh - .dbyt 0FDCh - .dbyt 0FDDh - .dbyt 0FDEh - .dbyt 0FDFh - .dbyt 0FE0h - .dbyt 0FE1h - .dbyt 0FE2h - .dbyt 0FE3h - .dbyt 0FE4h - .dbyt 0FE5h - .dbyt 0FE6h - .dbyt 0FE7h - .dbyt 0FE8h - .dbyt 0FE9h - .dbyt 0FEAh - .dbyt 0FEBh - .dbyt 0FECh - .dbyt 0FEDh - .dbyt 0FEEh - .dbyt 0FEFh - .dbyt 0FF0h - .dbyt 0FF1h - .dbyt 0FF2h - .dbyt 0FF3h - .dbyt 0FF4h - .dbyt 0FF5h - .dbyt 0FF6h - .dbyt 0FF7h - .dbyt 0FF8h - .dbyt 0FF9h - .dbyt 0FFAh - .dbyt 0FFBh - .dbyt 0FFCh - .dbyt 0FFDh - .dbyt 0FFEh - .dbyt 0FFFh - .dbyt 1000h - .dbyt 1001h - .dbyt 1002h - .dbyt 1003h - .dbyt 1004h - .dbyt 1005h - .dbyt 1006h - .dbyt 1007h - .dbyt 1008h - .dbyt 7FF0h - .dbyt 7FF1h - .dbyt 7FF2h - .dbyt 7FF3h - .dbyt 7FF4h - .dbyt 7FF5h - .dbyt 7FF6h - .dbyt 7FF7h - .dbyt 7FF8h - .dbyt 7FF9h - .dbyt 7FFAh - .dbyt 7FFBh - .dbyt 7FFCh - .dbyt 7FFDh - .dbyt 7FFEh - .dbyt 7FFFh - .dbyt 8000h - .dbyt 8001h - .dbyt 8002h - .dbyt 8003h - .dbyt 8004h - .dbyt 8005h - .dbyt 8006h - .dbyt 8007h - .dbyt 8008h - .dbyt 8009h - .dbyt 800Ah - .dbyt 800Bh - .dbyt 9FE1h - .dbyt 9FE2h - .dbyt 9FE3h - .dbyt 9FE4h - .dbyt 9FE5h - .dbyt 9FE6h - .dbyt 9FE7h - .dbyt 9FE8h - .dbyt 9FE9h - .dbyt 9FEAh - .dbyt 9FEBh - .dbyt 9FECh - .dbyt 9FEDh - .dbyt 9FEEh - .dbyt 9FEFh - .dbyt 9FF0h - .dbyt 9FF1h - .dbyt 9FF2h - .dbyt 9FF3h - .dbyt 9FF4h - .dbyt 9FF5h - .dbyt 9FF6h - .dbyt 9FF7h - .dbyt 9FF8h - .dbyt 9FF9h - .dbyt 9FFAh - .dbyt 9FFBh - .dbyt 9FFCh - .dbyt 9FFDh - .dbyt 9FFEh - .dbyt 9FFFh - .dbyt 0A000h - .dbyt 0A001h - .dbyt 0A002h - .dbyt 0A003h - .dbyt 0A004h - .dbyt 0A005h - .dbyt 0A006h - .dbyt 0A007h - .dbyt 0A008h - .dbyt 0A009h - .dbyt 0A00Ah - .dbyt 0A00Bh - .dbyt 0A00Ch - .dbyt 0A00Dh - .dbyt 0A00Eh - .dbyt 0A00Fh - .dbyt 0AFE1h - .dbyt 0AFE2h - .dbyt 0AFE3h - .dbyt 0AFE4h - .dbyt 0AFE5h - .dbyt 0AFE6h - .dbyt 0AFE7h - .dbyt 0AFE8h - .dbyt 0AFE9h - .dbyt 0AFEAh - .dbyt 0AFEBh - .dbyt 0AFECh - .dbyt 0AFEDh - .dbyt 0AFEEh - .dbyt 0AFEFh - .dbyt 0AFF0h - .dbyt 0AFF1h - .dbyt 0AFF2h - .dbyt 0AFF3h - .dbyt 0AFF4h - .dbyt 0AFF5h - .dbyt 0AFF6h - .dbyt 0AFF7h - .dbyt 0AFF8h - .dbyt 0AFF9h - .dbyt 0AFFAh - .dbyt 0AFFBh - .dbyt 0AFFCh - .dbyt 0AFFDh - .dbyt 0AFFEh - .dbyt 0AFFFh - .dbyt 0B000h - .dbyt 0B001h - .dbyt 0B002h - .dbyt 0B003h - .dbyt 0B004h - .dbyt 0B005h - .dbyt 0B006h - .dbyt 0B007h - .dbyt 0B008h - .dbyt 0B009h - .dbyt 0B00Ah - .dbyt 0B00Bh - .dbyt 0B00Ch - .dbyt 0B00Dh - .dbyt 0B00Eh - .dbyt 0B00Fh - .dbyt 0BFE1h - .dbyt 0BFE2h - .dbyt 0BFE3h - .dbyt 0BFE4h - .dbyt 0BFE5h - .dbyt 0BFE6h - .dbyt 0BFE7h - .dbyt 0BFE8h - .dbyt 0BFE9h - .dbyt 0BFEAh - .dbyt 0BFEBh - .dbyt 0BFECh - .dbyt 0BFEDh - .dbyt 0BFEEh - .dbyt 0BFEFh - .dbyt 0BFF0h - .dbyt 0BFF1h - .dbyt 0BFF2h - .dbyt 0BFF3h - .dbyt 0BFF4h - .dbyt 0BFF5h - .dbyt 0BFF6h - .dbyt 0BFF7h - .dbyt 0BFF8h - .dbyt 0BFF9h - .dbyt 0BFFAh - .dbyt 0BFFBh - .dbyt 0BFFCh - .dbyt 0BFFDh - .dbyt 0BFFEh - .dbyt 0BFFFh - .dbyt 0C000h - .dbyt 0C001h - .dbyt 0C002h - .dbyt 0C003h - .dbyt 0C004h - .dbyt 0C005h - .dbyt 0C006h - .dbyt 0C007h - .dbyt 0C008h - .dbyt 0C009h - .dbyt 0C00Ah - .dbyt 0C00Bh - .dbyt 0C00Ch - .dbyt 0C00Dh - .dbyt 0C00Eh - .dbyt 0C00Fh - .dbyt 0CFE1h - .dbyt 0CFE2h - .dbyt 0CFE3h - .dbyt 0CFE4h - .dbyt 0CFE5h - .dbyt 0CFE6h - .dbyt 0CFE7h - .dbyt 0CFE8h - .dbyt 0CFE9h - .dbyt 0CFEAh - .dbyt 0CFEBh - .dbyt 0CFECh - .dbyt 0CFEDh - .dbyt 0CFEEh - .dbyt 0CFEFh - .dbyt 0CFF0h - .dbyt 0CFF1h - .dbyt 0CFF2h - .dbyt 0CFF3h - .dbyt 0CFF4h - .dbyt 0CFF5h - .dbyt 0CFF6h - .dbyt 0CFF7h - .dbyt 0CFF8h - .dbyt 0CFF9h - .dbyt 0CFFAh - .dbyt 0CFFBh - .dbyt 0CFFCh - .dbyt 0CFFDh - .dbyt 0CFFEh - .dbyt 0CFFFh - .dbyt 0D000h - .dbyt 0D001h - .dbyt 0D002h - .dbyt 0D003h - .dbyt 0D004h - .dbyt 0D005h - .dbyt 0D006h - .dbyt 0D007h - .dbyt 0D008h - .dbyt 0D009h - .dbyt 0D00Ah - .dbyt 0D00Bh - .dbyt 0D00Ch - .dbyt 0D00Dh - .dbyt 0D00Eh - .dbyt 0D00Fh - .dbyt 0DFE1h - .dbyt 0DFE2h - .dbyt 0DFE3h - .dbyt 0DFE4h - .dbyt 0DFE5h - .dbyt 0DFE6h - .dbyt 0DFE7h - .dbyt 0DFE8h - .dbyt 0DFE9h - .dbyt 0DFEAh - .dbyt 0DFEBh - .dbyt 0DFECh - .dbyt 0DFEDh - .dbyt 0DFEEh - .dbyt 0DFEFh - .dbyt 0DFF0h - .dbyt 0DFF1h - .dbyt 0DFF2h - .dbyt 0DFF3h - .dbyt 0DFF4h - .dbyt 0DFF5h - .dbyt 0DFF6h - .dbyt 0DFF7h - .dbyt 0DFF8h - .dbyt 0DFF9h - .dbyt 0DFFAh - .dbyt 0DFFBh - .dbyt 0DFFCh - .dbyt 0DFFDh - .dbyt 0DFFEh - .dbyt 0DFFFh - .dbyt 0E000h - .dbyt 0E001h - .dbyt 0E002h - .dbyt 0E003h - .dbyt 0E004h - .dbyt 0E005h - .dbyt 0E006h - .dbyt 0E007h - .dbyt 0E008h - .dbyt 0E009h - .dbyt 0E00Ah - .dbyt 0E00Bh - .dbyt 0E00Ch - .dbyt 0E00Dh - .dbyt 0E00Eh - .dbyt 0E00Fh - .dbyt 0EFE1h - .dbyt 0EFE2h - .dbyt 0EFE3h - .dbyt 0EFE4h - .dbyt 0EFE5h - .dbyt 0EFE6h - .dbyt 0EFE7h - .dbyt 0EFE8h - .dbyt 0EFE9h - .dbyt 0EFEAh - .dbyt 0EFEBh - .dbyt 0EFECh - .dbyt 0EFEDh - .dbyt 0EFEEh - .dbyt 0EFEFh - .dbyt 0EFF0h - .dbyt 0EFF1h - .dbyt 0EFF2h - .dbyt 0EFF3h - .dbyt 0EFF4h - .dbyt 0EFF5h - .dbyt 0EFF6h - .dbyt 0EFF7h - .dbyt 0EFF8h - .dbyt 0EFF9h - .dbyt 0EFFAh - .dbyt 0EFFBh - .dbyt 0EFFCh - .dbyt 0EFFDh - .dbyt 0EFFEh - .dbyt 0EFFFh - .dbyt 0F000h - .dbyt 0F001h - .dbyt 0F002h - .dbyt 0F003h - .dbyt 0F004h - .dbyt 0F005h - .dbyt 0F006h - .dbyt 0F007h - .dbyt 0F008h - .dbyt 0F009h - .dbyt 0F00Ah - .dbyt 0F00Bh - .dbyt 0F00Ch - .dbyt 0F00Dh - .dbyt 0F00Eh - .dbyt 0F00Fh - .dbyt 0FFE1h - .dbyt 0FFE2h - .dbyt 0FFE3h - .dbyt 0FFE4h - .dbyt 0FFE5h - .dbyt 0FFE6h - .dbyt 0FFE7h - .dbyt 0FFE8h - .dbyt 0FFE9h - .dbyt 0FFEAh - .dbyt 0FFEBh - .dbyt 0FFECh - .dbyt 0FFEDh - .dbyt 0FFEEh - .dbyt 0FFEFh - .dbyt 0FFF0h - .dbyt 0FFF1h - .dbyt 0FFF2h - .dbyt 0FFF3h - .dbyt 0FFF4h - .dbyt 0FFF5h - .dbyt 0FFF6h - .dbyt 0FFF7h - .dbyt 0FFF8h - .dbyt 0FFF9h - .dbyt 0FFFAh - .dbyt 0FFFBh - .dbyt 0FFFCh - .dbyt 0FFFDh - .dbyt 0FFFEh - .dbyt 0FFFFh + ; alternative hex values, uppercase + .dbyt 0h + .dbyt 1h + .dbyt 2h + .dbyt 3h + .dbyt 4h + .dbyt 5h + .dbyt 6h + .dbyt 7h + .dbyt 8h + .dbyt 9h + .dbyt 0Ah + .dbyt 0Bh + .dbyt 0Ch + .dbyt 0Dh + .dbyt 0Eh + .dbyt 0Fh + .dbyt 10h + .dbyt 11h + .dbyt 12h + .dbyt 13h + .dbyt 70h + .dbyt 71h + .dbyt 72h + .dbyt 73h + .dbyt 74h + .dbyt 75h + .dbyt 76h + .dbyt 77h + .dbyt 78h + .dbyt 79h + .dbyt 7Ah + .dbyt 7Bh + .dbyt 7Ch + .dbyt 7Dh + .dbyt 7Eh + .dbyt 7Fh + .dbyt 80h + .dbyt 81h + .dbyt 82h + .dbyt 83h + .dbyt 84h + .dbyt 85h + .dbyt 86h + .dbyt 0F0h + .dbyt 0F1h + .dbyt 0F2h + .dbyt 0F3h + .dbyt 0F4h + .dbyt 0F5h + .dbyt 0F6h + .dbyt 0F7h + .dbyt 0F8h + .dbyt 0F9h + .dbyt 0FAh + .dbyt 0FBh + .dbyt 0FCh + .dbyt 0FDh + .dbyt 0FEh + .dbyt 0FFh + .dbyt 100h + .dbyt 101h + .dbyt 102h + .dbyt 103h + .dbyt 0FD2h + .dbyt 0FD3h + .dbyt 0FD4h + .dbyt 0FD5h + .dbyt 0FD6h + .dbyt 0FD7h + .dbyt 0FD8h + .dbyt 0FD9h + .dbyt 0FDAh + .dbyt 0FDBh + .dbyt 0FDCh + .dbyt 0FDDh + .dbyt 0FDEh + .dbyt 0FDFh + .dbyt 0FE0h + .dbyt 0FE1h + .dbyt 0FE2h + .dbyt 0FE3h + .dbyt 0FE4h + .dbyt 0FE5h + .dbyt 0FE6h + .dbyt 0FE7h + .dbyt 0FE8h + .dbyt 0FE9h + .dbyt 0FEAh + .dbyt 0FEBh + .dbyt 0FECh + .dbyt 0FEDh + .dbyt 0FEEh + .dbyt 0FEFh + .dbyt 0FF0h + .dbyt 0FF1h + .dbyt 0FF2h + .dbyt 0FF3h + .dbyt 0FF4h + .dbyt 0FF5h + .dbyt 0FF6h + .dbyt 0FF7h + .dbyt 0FF8h + .dbyt 0FF9h + .dbyt 0FFAh + .dbyt 0FFBh + .dbyt 0FFCh + .dbyt 0FFDh + .dbyt 0FFEh + .dbyt 0FFFh + .dbyt 1000h + .dbyt 1001h + .dbyt 1002h + .dbyt 1003h + .dbyt 1004h + .dbyt 1005h + .dbyt 1006h + .dbyt 1007h + .dbyt 1008h + .dbyt 7FF0h + .dbyt 7FF1h + .dbyt 7FF2h + .dbyt 7FF3h + .dbyt 7FF4h + .dbyt 7FF5h + .dbyt 7FF6h + .dbyt 7FF7h + .dbyt 7FF8h + .dbyt 7FF9h + .dbyt 7FFAh + .dbyt 7FFBh + .dbyt 7FFCh + .dbyt 7FFDh + .dbyt 7FFEh + .dbyt 7FFFh + .dbyt 8000h + .dbyt 8001h + .dbyt 8002h + .dbyt 8003h + .dbyt 8004h + .dbyt 8005h + .dbyt 8006h + .dbyt 8007h + .dbyt 8008h + .dbyt 8009h + .dbyt 800Ah + .dbyt 800Bh + .dbyt 9FE1h + .dbyt 9FE2h + .dbyt 9FE3h + .dbyt 9FE4h + .dbyt 9FE5h + .dbyt 9FE6h + .dbyt 9FE7h + .dbyt 9FE8h + .dbyt 9FE9h + .dbyt 9FEAh + .dbyt 9FEBh + .dbyt 9FECh + .dbyt 9FEDh + .dbyt 9FEEh + .dbyt 9FEFh + .dbyt 9FF0h + .dbyt 9FF1h + .dbyt 9FF2h + .dbyt 9FF3h + .dbyt 9FF4h + .dbyt 9FF5h + .dbyt 9FF6h + .dbyt 9FF7h + .dbyt 9FF8h + .dbyt 9FF9h + .dbyt 9FFAh + .dbyt 9FFBh + .dbyt 9FFCh + .dbyt 9FFDh + .dbyt 9FFEh + .dbyt 9FFFh + .dbyt 0A000h + .dbyt 0A001h + .dbyt 0A002h + .dbyt 0A003h + .dbyt 0A004h + .dbyt 0A005h + .dbyt 0A006h + .dbyt 0A007h + .dbyt 0A008h + .dbyt 0A009h + .dbyt 0A00Ah + .dbyt 0A00Bh + .dbyt 0A00Ch + .dbyt 0A00Dh + .dbyt 0A00Eh + .dbyt 0A00Fh + .dbyt 0AFE1h + .dbyt 0AFE2h + .dbyt 0AFE3h + .dbyt 0AFE4h + .dbyt 0AFE5h + .dbyt 0AFE6h + .dbyt 0AFE7h + .dbyt 0AFE8h + .dbyt 0AFE9h + .dbyt 0AFEAh + .dbyt 0AFEBh + .dbyt 0AFECh + .dbyt 0AFEDh + .dbyt 0AFEEh + .dbyt 0AFEFh + .dbyt 0AFF0h + .dbyt 0AFF1h + .dbyt 0AFF2h + .dbyt 0AFF3h + .dbyt 0AFF4h + .dbyt 0AFF5h + .dbyt 0AFF6h + .dbyt 0AFF7h + .dbyt 0AFF8h + .dbyt 0AFF9h + .dbyt 0AFFAh + .dbyt 0AFFBh + .dbyt 0AFFCh + .dbyt 0AFFDh + .dbyt 0AFFEh + .dbyt 0AFFFh + .dbyt 0B000h + .dbyt 0B001h + .dbyt 0B002h + .dbyt 0B003h + .dbyt 0B004h + .dbyt 0B005h + .dbyt 0B006h + .dbyt 0B007h + .dbyt 0B008h + .dbyt 0B009h + .dbyt 0B00Ah + .dbyt 0B00Bh + .dbyt 0B00Ch + .dbyt 0B00Dh + .dbyt 0B00Eh + .dbyt 0B00Fh + .dbyt 0BFE1h + .dbyt 0BFE2h + .dbyt 0BFE3h + .dbyt 0BFE4h + .dbyt 0BFE5h + .dbyt 0BFE6h + .dbyt 0BFE7h + .dbyt 0BFE8h + .dbyt 0BFE9h + .dbyt 0BFEAh + .dbyt 0BFEBh + .dbyt 0BFECh + .dbyt 0BFEDh + .dbyt 0BFEEh + .dbyt 0BFEFh + .dbyt 0BFF0h + .dbyt 0BFF1h + .dbyt 0BFF2h + .dbyt 0BFF3h + .dbyt 0BFF4h + .dbyt 0BFF5h + .dbyt 0BFF6h + .dbyt 0BFF7h + .dbyt 0BFF8h + .dbyt 0BFF9h + .dbyt 0BFFAh + .dbyt 0BFFBh + .dbyt 0BFFCh + .dbyt 0BFFDh + .dbyt 0BFFEh + .dbyt 0BFFFh + .dbyt 0C000h + .dbyt 0C001h + .dbyt 0C002h + .dbyt 0C003h + .dbyt 0C004h + .dbyt 0C005h + .dbyt 0C006h + .dbyt 0C007h + .dbyt 0C008h + .dbyt 0C009h + .dbyt 0C00Ah + .dbyt 0C00Bh + .dbyt 0C00Ch + .dbyt 0C00Dh + .dbyt 0C00Eh + .dbyt 0C00Fh + .dbyt 0CFE1h + .dbyt 0CFE2h + .dbyt 0CFE3h + .dbyt 0CFE4h + .dbyt 0CFE5h + .dbyt 0CFE6h + .dbyt 0CFE7h + .dbyt 0CFE8h + .dbyt 0CFE9h + .dbyt 0CFEAh + .dbyt 0CFEBh + .dbyt 0CFECh + .dbyt 0CFEDh + .dbyt 0CFEEh + .dbyt 0CFEFh + .dbyt 0CFF0h + .dbyt 0CFF1h + .dbyt 0CFF2h + .dbyt 0CFF3h + .dbyt 0CFF4h + .dbyt 0CFF5h + .dbyt 0CFF6h + .dbyt 0CFF7h + .dbyt 0CFF8h + .dbyt 0CFF9h + .dbyt 0CFFAh + .dbyt 0CFFBh + .dbyt 0CFFCh + .dbyt 0CFFDh + .dbyt 0CFFEh + .dbyt 0CFFFh + .dbyt 0D000h + .dbyt 0D001h + .dbyt 0D002h + .dbyt 0D003h + .dbyt 0D004h + .dbyt 0D005h + .dbyt 0D006h + .dbyt 0D007h + .dbyt 0D008h + .dbyt 0D009h + .dbyt 0D00Ah + .dbyt 0D00Bh + .dbyt 0D00Ch + .dbyt 0D00Dh + .dbyt 0D00Eh + .dbyt 0D00Fh + .dbyt 0DFE1h + .dbyt 0DFE2h + .dbyt 0DFE3h + .dbyt 0DFE4h + .dbyt 0DFE5h + .dbyt 0DFE6h + .dbyt 0DFE7h + .dbyt 0DFE8h + .dbyt 0DFE9h + .dbyt 0DFEAh + .dbyt 0DFEBh + .dbyt 0DFECh + .dbyt 0DFEDh + .dbyt 0DFEEh + .dbyt 0DFEFh + .dbyt 0DFF0h + .dbyt 0DFF1h + .dbyt 0DFF2h + .dbyt 0DFF3h + .dbyt 0DFF4h + .dbyt 0DFF5h + .dbyt 0DFF6h + .dbyt 0DFF7h + .dbyt 0DFF8h + .dbyt 0DFF9h + .dbyt 0DFFAh + .dbyt 0DFFBh + .dbyt 0DFFCh + .dbyt 0DFFDh + .dbyt 0DFFEh + .dbyt 0DFFFh + .dbyt 0E000h + .dbyt 0E001h + .dbyt 0E002h + .dbyt 0E003h + .dbyt 0E004h + .dbyt 0E005h + .dbyt 0E006h + .dbyt 0E007h + .dbyt 0E008h + .dbyt 0E009h + .dbyt 0E00Ah + .dbyt 0E00Bh + .dbyt 0E00Ch + .dbyt 0E00Dh + .dbyt 0E00Eh + .dbyt 0E00Fh + .dbyt 0EFE1h + .dbyt 0EFE2h + .dbyt 0EFE3h + .dbyt 0EFE4h + .dbyt 0EFE5h + .dbyt 0EFE6h + .dbyt 0EFE7h + .dbyt 0EFE8h + .dbyt 0EFE9h + .dbyt 0EFEAh + .dbyt 0EFEBh + .dbyt 0EFECh + .dbyt 0EFEDh + .dbyt 0EFEEh + .dbyt 0EFEFh + .dbyt 0EFF0h + .dbyt 0EFF1h + .dbyt 0EFF2h + .dbyt 0EFF3h + .dbyt 0EFF4h + .dbyt 0EFF5h + .dbyt 0EFF6h + .dbyt 0EFF7h + .dbyt 0EFF8h + .dbyt 0EFF9h + .dbyt 0EFFAh + .dbyt 0EFFBh + .dbyt 0EFFCh + .dbyt 0EFFDh + .dbyt 0EFFEh + .dbyt 0EFFFh + .dbyt 0F000h + .dbyt 0F001h + .dbyt 0F002h + .dbyt 0F003h + .dbyt 0F004h + .dbyt 0F005h + .dbyt 0F006h + .dbyt 0F007h + .dbyt 0F008h + .dbyt 0F009h + .dbyt 0F00Ah + .dbyt 0F00Bh + .dbyt 0F00Ch + .dbyt 0F00Dh + .dbyt 0F00Eh + .dbyt 0F00Fh + .dbyt 0FFE1h + .dbyt 0FFE2h + .dbyt 0FFE3h + .dbyt 0FFE4h + .dbyt 0FFE5h + .dbyt 0FFE6h + .dbyt 0FFE7h + .dbyt 0FFE8h + .dbyt 0FFE9h + .dbyt 0FFEAh + .dbyt 0FFEBh + .dbyt 0FFECh + .dbyt 0FFEDh + .dbyt 0FFEEh + .dbyt 0FFEFh + .dbyt 0FFF0h + .dbyt 0FFF1h + .dbyt 0FFF2h + .dbyt 0FFF3h + .dbyt 0FFF4h + .dbyt 0FFF5h + .dbyt 0FFF6h + .dbyt 0FFF7h + .dbyt 0FFF8h + .dbyt 0FFF9h + .dbyt 0FFFAh + .dbyt 0FFFBh + .dbyt 0FFFCh + .dbyt 0FFFDh + .dbyt 0FFFEh + .dbyt 0FFFFh - ; alternative 4-digit hex values - .dbyt 0000h - .dbyt 0001h - .dbyt 0002h - .dbyt 0003h - .dbyt 0004h - .dbyt 0005h - .dbyt 0006h - .dbyt 0007h - .dbyt 0008h - .dbyt 0009h - .dbyt 000ah - .dbyt 000bh - .dbyt 000ch - .dbyt 000dh - .dbyt 000eh - .dbyt 000fh - .dbyt 0010h - .dbyt 0011h - .dbyt 0012h - .dbyt 0013h - .dbyt 0070h - .dbyt 0071h - .dbyt 0072h - .dbyt 0073h - .dbyt 0074h - .dbyt 0075h - .dbyt 0076h - .dbyt 0077h - .dbyt 0078h - .dbyt 0079h - .dbyt 007ah - .dbyt 007bh - .dbyt 007ch - .dbyt 007dh - .dbyt 007eh - .dbyt 007fh - .dbyt 0080h - .dbyt 0081h - .dbyt 0082h - .dbyt 0083h - .dbyt 0084h - .dbyt 0085h - .dbyt 0086h - .dbyt 00f0h - .dbyt 00f1h - .dbyt 00f2h - .dbyt 00f3h - .dbyt 00f4h - .dbyt 00f5h - .dbyt 00f6h - .dbyt 00f7h - .dbyt 00f8h - .dbyt 00f9h - .dbyt 00fah - .dbyt 00fbh - .dbyt 00fch - .dbyt 00fdh - .dbyt 00feh - .dbyt 00ffh - .dbyt 0100h - .dbyt 0101h - .dbyt 0102h - .dbyt 0103h - .dbyt 0fd2h - .dbyt 0fd3h - .dbyt 0fd4h - .dbyt 0fd5h - .dbyt 0fd6h - .dbyt 0fd7h - .dbyt 0fd8h - .dbyt 0fd9h - .dbyt 0fdah - .dbyt 0fdbh - .dbyt 0fdch - .dbyt 0fddh - .dbyt 0fdeh - .dbyt 0fdfh - .dbyt 0fe0h - .dbyt 0fe1h - .dbyt 0fe2h - .dbyt 0fe3h - .dbyt 0fe4h - .dbyt 0fe5h - .dbyt 0fe6h - .dbyt 0fe7h - .dbyt 0fe8h - .dbyt 0fe9h - .dbyt 0feah - .dbyt 0febh - .dbyt 0fech - .dbyt 0fedh - .dbyt 0feeh - .dbyt 0fefh - .dbyt 0ff0h - .dbyt 0ff1h - .dbyt 0ff2h - .dbyt 0ff3h - .dbyt 0ff4h - .dbyt 0ff5h - .dbyt 0ff6h - .dbyt 0ff7h - .dbyt 0ff8h - .dbyt 0ff9h - .dbyt 0ffah - .dbyt 0ffbh - .dbyt 0ffch - .dbyt 0ffdh - .dbyt 0ffeh - .dbyt 0fffh - .dbyt 1000h - .dbyt 1001h - .dbyt 1002h - .dbyt 1003h - .dbyt 1004h - .dbyt 1005h - .dbyt 1006h - .dbyt 1007h - .dbyt 1008h - .dbyt 7ff0h - .dbyt 7ff1h - .dbyt 7ff2h - .dbyt 7ff3h - .dbyt 7ff4h - .dbyt 7ff5h - .dbyt 7ff6h - .dbyt 7ff7h - .dbyt 7ff8h - .dbyt 7ff9h - .dbyt 7ffah - .dbyt 7ffbh - .dbyt 7ffch - .dbyt 7ffdh - .dbyt 7ffeh - .dbyt 7fffh - .dbyt 8000h - .dbyt 8001h - .dbyt 8002h - .dbyt 8003h - .dbyt 8004h - .dbyt 8005h - .dbyt 8006h - .dbyt 8007h - .dbyt 8008h - .dbyt 8009h - .dbyt 800ah - .dbyt 800bh - .dbyt 9fe1h - .dbyt 9fe2h - .dbyt 9fe3h - .dbyt 9fe4h - .dbyt 9fe5h - .dbyt 9fe6h - .dbyt 9fe7h - .dbyt 9fe8h - .dbyt 9fe9h - .dbyt 9feah - .dbyt 9febh - .dbyt 9fech - .dbyt 9fedh - .dbyt 9feeh - .dbyt 9fefh - .dbyt 9ff0h - .dbyt 9ff1h - .dbyt 9ff2h - .dbyt 9ff3h - .dbyt 9ff4h - .dbyt 9ff5h - .dbyt 9ff6h - .dbyt 9ff7h - .dbyt 9ff8h - .dbyt 9ff9h - .dbyt 9ffah - .dbyt 9ffbh - .dbyt 9ffch - .dbyt 9ffdh - .dbyt 9ffeh - .dbyt 9fffh - .dbyt 0a000h - .dbyt 0a001h - .dbyt 0a002h - .dbyt 0a003h - .dbyt 0a004h - .dbyt 0a005h - .dbyt 0a006h - .dbyt 0a007h - .dbyt 0a008h - .dbyt 0a009h - .dbyt 0a00ah - .dbyt 0a00bh - .dbyt 0a00ch - .dbyt 0a00dh - .dbyt 0a00eh - .dbyt 0a00fh - .dbyt 0afe1h - .dbyt 0afe2h - .dbyt 0afe3h - .dbyt 0afe4h - .dbyt 0afe5h - .dbyt 0afe6h - .dbyt 0afe7h - .dbyt 0afe8h - .dbyt 0afe9h - .dbyt 0afeah - .dbyt 0afebh - .dbyt 0afech - .dbyt 0afedh - .dbyt 0afeeh - .dbyt 0afefh - .dbyt 0aff0h - .dbyt 0aff1h - .dbyt 0aff2h - .dbyt 0aff3h - .dbyt 0aff4h - .dbyt 0aff5h - .dbyt 0aff6h - .dbyt 0aff7h - .dbyt 0aff8h - .dbyt 0aff9h - .dbyt 0affah - .dbyt 0affbh - .dbyt 0affch - .dbyt 0affdh - .dbyt 0affeh - .dbyt 0afffh - .dbyt 0b000h - .dbyt 0b001h - .dbyt 0b002h - .dbyt 0b003h - .dbyt 0b004h - .dbyt 0b005h - .dbyt 0b006h - .dbyt 0b007h - .dbyt 0b008h - .dbyt 0b009h - .dbyt 0b00ah - .dbyt 0b00bh - .dbyt 0b00ch - .dbyt 0b00dh - .dbyt 0b00eh - .dbyt 0b00fh - .dbyt 0bfe1h - .dbyt 0bfe2h - .dbyt 0bfe3h - .dbyt 0bfe4h - .dbyt 0bfe5h - .dbyt 0bfe6h - .dbyt 0bfe7h - .dbyt 0bfe8h - .dbyt 0bfe9h - .dbyt 0bfeah - .dbyt 0bfebh - .dbyt 0bfech - .dbyt 0bfedh - .dbyt 0bfeeh - .dbyt 0bfefh - .dbyt 0bff0h - .dbyt 0bff1h - .dbyt 0bff2h - .dbyt 0bff3h - .dbyt 0bff4h - .dbyt 0bff5h - .dbyt 0bff6h - .dbyt 0bff7h - .dbyt 0bff8h - .dbyt 0bff9h - .dbyt 0bffah - .dbyt 0bffbh - .dbyt 0bffch - .dbyt 0bffdh - .dbyt 0bffeh - .dbyt 0bfffh - .dbyt 0c000h - .dbyt 0c001h - .dbyt 0c002h - .dbyt 0c003h - .dbyt 0c004h - .dbyt 0c005h - .dbyt 0c006h - .dbyt 0c007h - .dbyt 0c008h - .dbyt 0c009h - .dbyt 0c00ah - .dbyt 0c00bh - .dbyt 0c00ch - .dbyt 0c00dh - .dbyt 0c00eh - .dbyt 0c00fh - .dbyt 0cfe1h - .dbyt 0cfe2h - .dbyt 0cfe3h - .dbyt 0cfe4h - .dbyt 0cfe5h - .dbyt 0cfe6h - .dbyt 0cfe7h - .dbyt 0cfe8h - .dbyt 0cfe9h - .dbyt 0cfeah - .dbyt 0cfebh - .dbyt 0cfech - .dbyt 0cfedh - .dbyt 0cfeeh - .dbyt 0cfefh - .dbyt 0cff0h - .dbyt 0cff1h - .dbyt 0cff2h - .dbyt 0cff3h - .dbyt 0cff4h - .dbyt 0cff5h - .dbyt 0cff6h - .dbyt 0cff7h - .dbyt 0cff8h - .dbyt 0cff9h - .dbyt 0cffah - .dbyt 0cffbh - .dbyt 0cffch - .dbyt 0cffdh - .dbyt 0cffeh - .dbyt 0cfffh - .dbyt 0d000h - .dbyt 0d001h - .dbyt 0d002h - .dbyt 0d003h - .dbyt 0d004h - .dbyt 0d005h - .dbyt 0d006h - .dbyt 0d007h - .dbyt 0d008h - .dbyt 0d009h - .dbyt 0d00ah - .dbyt 0d00bh - .dbyt 0d00ch - .dbyt 0d00dh - .dbyt 0d00eh - .dbyt 0d00fh - .dbyt 0dfe1h - .dbyt 0dfe2h - .dbyt 0dfe3h - .dbyt 0dfe4h - .dbyt 0dfe5h - .dbyt 0dfe6h - .dbyt 0dfe7h - .dbyt 0dfe8h - .dbyt 0dfe9h - .dbyt 0dfeah - .dbyt 0dfebh - .dbyt 0dfech - .dbyt 0dfedh - .dbyt 0dfeeh - .dbyt 0dfefh - .dbyt 0dff0h - .dbyt 0dff1h - .dbyt 0dff2h - .dbyt 0dff3h - .dbyt 0dff4h - .dbyt 0dff5h - .dbyt 0dff6h - .dbyt 0dff7h - .dbyt 0dff8h - .dbyt 0dff9h - .dbyt 0dffah - .dbyt 0dffbh - .dbyt 0dffch - .dbyt 0dffdh - .dbyt 0dffeh - .dbyt 0dfffh - .dbyt 0e000h - .dbyt 0e001h - .dbyt 0e002h - .dbyt 0e003h - .dbyt 0e004h - .dbyt 0e005h - .dbyt 0e006h - .dbyt 0e007h - .dbyt 0e008h - .dbyt 0e009h - .dbyt 0e00ah - .dbyt 0e00bh - .dbyt 0e00ch - .dbyt 0e00dh - .dbyt 0e00eh - .dbyt 0e00fh - .dbyt 0efe1h - .dbyt 0efe2h - .dbyt 0efe3h - .dbyt 0efe4h - .dbyt 0efe5h - .dbyt 0efe6h - .dbyt 0efe7h - .dbyt 0efe8h - .dbyt 0efe9h - .dbyt 0efeah - .dbyt 0efebh - .dbyt 0efech - .dbyt 0efedh - .dbyt 0efeeh - .dbyt 0efefh - .dbyt 0eff0h - .dbyt 0eff1h - .dbyt 0eff2h - .dbyt 0eff3h - .dbyt 0eff4h - .dbyt 0eff5h - .dbyt 0eff6h - .dbyt 0eff7h - .dbyt 0eff8h - .dbyt 0eff9h - .dbyt 0effah - .dbyt 0effbh - .dbyt 0effch - .dbyt 0effdh - .dbyt 0effeh - .dbyt 0efffh - .dbyt 0f000h - .dbyt 0f001h - .dbyt 0f002h - .dbyt 0f003h - .dbyt 0f004h - .dbyt 0f005h - .dbyt 0f006h - .dbyt 0f007h - .dbyt 0f008h - .dbyt 0f009h - .dbyt 0f00ah - .dbyt 0f00bh - .dbyt 0f00ch - .dbyt 0f00dh - .dbyt 0f00eh - .dbyt 0f00fh - .dbyt 0ffe1h - .dbyt 0ffe2h - .dbyt 0ffe3h - .dbyt 0ffe4h - .dbyt 0ffe5h - .dbyt 0ffe6h - .dbyt 0ffe7h - .dbyt 0ffe8h - .dbyt 0ffe9h - .dbyt 0ffeah - .dbyt 0ffebh - .dbyt 0ffech - .dbyt 0ffedh - .dbyt 0ffeeh - .dbyt 0ffefh - .dbyt 0fff0h - .dbyt 0fff1h - .dbyt 0fff2h - .dbyt 0fff3h - .dbyt 0fff4h - .dbyt 0fff5h - .dbyt 0fff6h - .dbyt 0fff7h - .dbyt 0fff8h - .dbyt 0fff9h - .dbyt 0fffah - .dbyt 0fffbh - .dbyt 0fffch - .dbyt 0fffdh - .dbyt 0fffeh - .dbyt 0ffffh + ; alternative 4-digit hex values + .dbyt 0000h + .dbyt 0001h + .dbyt 0002h + .dbyt 0003h + .dbyt 0004h + .dbyt 0005h + .dbyt 0006h + .dbyt 0007h + .dbyt 0008h + .dbyt 0009h + .dbyt 000ah + .dbyt 000bh + .dbyt 000ch + .dbyt 000dh + .dbyt 000eh + .dbyt 000fh + .dbyt 0010h + .dbyt 0011h + .dbyt 0012h + .dbyt 0013h + .dbyt 0070h + .dbyt 0071h + .dbyt 0072h + .dbyt 0073h + .dbyt 0074h + .dbyt 0075h + .dbyt 0076h + .dbyt 0077h + .dbyt 0078h + .dbyt 0079h + .dbyt 007ah + .dbyt 007bh + .dbyt 007ch + .dbyt 007dh + .dbyt 007eh + .dbyt 007fh + .dbyt 0080h + .dbyt 0081h + .dbyt 0082h + .dbyt 0083h + .dbyt 0084h + .dbyt 0085h + .dbyt 0086h + .dbyt 00f0h + .dbyt 00f1h + .dbyt 00f2h + .dbyt 00f3h + .dbyt 00f4h + .dbyt 00f5h + .dbyt 00f6h + .dbyt 00f7h + .dbyt 00f8h + .dbyt 00f9h + .dbyt 00fah + .dbyt 00fbh + .dbyt 00fch + .dbyt 00fdh + .dbyt 00feh + .dbyt 00ffh + .dbyt 0100h + .dbyt 0101h + .dbyt 0102h + .dbyt 0103h + .dbyt 0fd2h + .dbyt 0fd3h + .dbyt 0fd4h + .dbyt 0fd5h + .dbyt 0fd6h + .dbyt 0fd7h + .dbyt 0fd8h + .dbyt 0fd9h + .dbyt 0fdah + .dbyt 0fdbh + .dbyt 0fdch + .dbyt 0fddh + .dbyt 0fdeh + .dbyt 0fdfh + .dbyt 0fe0h + .dbyt 0fe1h + .dbyt 0fe2h + .dbyt 0fe3h + .dbyt 0fe4h + .dbyt 0fe5h + .dbyt 0fe6h + .dbyt 0fe7h + .dbyt 0fe8h + .dbyt 0fe9h + .dbyt 0feah + .dbyt 0febh + .dbyt 0fech + .dbyt 0fedh + .dbyt 0feeh + .dbyt 0fefh + .dbyt 0ff0h + .dbyt 0ff1h + .dbyt 0ff2h + .dbyt 0ff3h + .dbyt 0ff4h + .dbyt 0ff5h + .dbyt 0ff6h + .dbyt 0ff7h + .dbyt 0ff8h + .dbyt 0ff9h + .dbyt 0ffah + .dbyt 0ffbh + .dbyt 0ffch + .dbyt 0ffdh + .dbyt 0ffeh + .dbyt 0fffh + .dbyt 1000h + .dbyt 1001h + .dbyt 1002h + .dbyt 1003h + .dbyt 1004h + .dbyt 1005h + .dbyt 1006h + .dbyt 1007h + .dbyt 1008h + .dbyt 7ff0h + .dbyt 7ff1h + .dbyt 7ff2h + .dbyt 7ff3h + .dbyt 7ff4h + .dbyt 7ff5h + .dbyt 7ff6h + .dbyt 7ff7h + .dbyt 7ff8h + .dbyt 7ff9h + .dbyt 7ffah + .dbyt 7ffbh + .dbyt 7ffch + .dbyt 7ffdh + .dbyt 7ffeh + .dbyt 7fffh + .dbyt 8000h + .dbyt 8001h + .dbyt 8002h + .dbyt 8003h + .dbyt 8004h + .dbyt 8005h + .dbyt 8006h + .dbyt 8007h + .dbyt 8008h + .dbyt 8009h + .dbyt 800ah + .dbyt 800bh + .dbyt 9fe1h + .dbyt 9fe2h + .dbyt 9fe3h + .dbyt 9fe4h + .dbyt 9fe5h + .dbyt 9fe6h + .dbyt 9fe7h + .dbyt 9fe8h + .dbyt 9fe9h + .dbyt 9feah + .dbyt 9febh + .dbyt 9fech + .dbyt 9fedh + .dbyt 9feeh + .dbyt 9fefh + .dbyt 9ff0h + .dbyt 9ff1h + .dbyt 9ff2h + .dbyt 9ff3h + .dbyt 9ff4h + .dbyt 9ff5h + .dbyt 9ff6h + .dbyt 9ff7h + .dbyt 9ff8h + .dbyt 9ff9h + .dbyt 9ffah + .dbyt 9ffbh + .dbyt 9ffch + .dbyt 9ffdh + .dbyt 9ffeh + .dbyt 9fffh + .dbyt 0a000h + .dbyt 0a001h + .dbyt 0a002h + .dbyt 0a003h + .dbyt 0a004h + .dbyt 0a005h + .dbyt 0a006h + .dbyt 0a007h + .dbyt 0a008h + .dbyt 0a009h + .dbyt 0a00ah + .dbyt 0a00bh + .dbyt 0a00ch + .dbyt 0a00dh + .dbyt 0a00eh + .dbyt 0a00fh + .dbyt 0afe1h + .dbyt 0afe2h + .dbyt 0afe3h + .dbyt 0afe4h + .dbyt 0afe5h + .dbyt 0afe6h + .dbyt 0afe7h + .dbyt 0afe8h + .dbyt 0afe9h + .dbyt 0afeah + .dbyt 0afebh + .dbyt 0afech + .dbyt 0afedh + .dbyt 0afeeh + .dbyt 0afefh + .dbyt 0aff0h + .dbyt 0aff1h + .dbyt 0aff2h + .dbyt 0aff3h + .dbyt 0aff4h + .dbyt 0aff5h + .dbyt 0aff6h + .dbyt 0aff7h + .dbyt 0aff8h + .dbyt 0aff9h + .dbyt 0affah + .dbyt 0affbh + .dbyt 0affch + .dbyt 0affdh + .dbyt 0affeh + .dbyt 0afffh + .dbyt 0b000h + .dbyt 0b001h + .dbyt 0b002h + .dbyt 0b003h + .dbyt 0b004h + .dbyt 0b005h + .dbyt 0b006h + .dbyt 0b007h + .dbyt 0b008h + .dbyt 0b009h + .dbyt 0b00ah + .dbyt 0b00bh + .dbyt 0b00ch + .dbyt 0b00dh + .dbyt 0b00eh + .dbyt 0b00fh + .dbyt 0bfe1h + .dbyt 0bfe2h + .dbyt 0bfe3h + .dbyt 0bfe4h + .dbyt 0bfe5h + .dbyt 0bfe6h + .dbyt 0bfe7h + .dbyt 0bfe8h + .dbyt 0bfe9h + .dbyt 0bfeah + .dbyt 0bfebh + .dbyt 0bfech + .dbyt 0bfedh + .dbyt 0bfeeh + .dbyt 0bfefh + .dbyt 0bff0h + .dbyt 0bff1h + .dbyt 0bff2h + .dbyt 0bff3h + .dbyt 0bff4h + .dbyt 0bff5h + .dbyt 0bff6h + .dbyt 0bff7h + .dbyt 0bff8h + .dbyt 0bff9h + .dbyt 0bffah + .dbyt 0bffbh + .dbyt 0bffch + .dbyt 0bffdh + .dbyt 0bffeh + .dbyt 0bfffh + .dbyt 0c000h + .dbyt 0c001h + .dbyt 0c002h + .dbyt 0c003h + .dbyt 0c004h + .dbyt 0c005h + .dbyt 0c006h + .dbyt 0c007h + .dbyt 0c008h + .dbyt 0c009h + .dbyt 0c00ah + .dbyt 0c00bh + .dbyt 0c00ch + .dbyt 0c00dh + .dbyt 0c00eh + .dbyt 0c00fh + .dbyt 0cfe1h + .dbyt 0cfe2h + .dbyt 0cfe3h + .dbyt 0cfe4h + .dbyt 0cfe5h + .dbyt 0cfe6h + .dbyt 0cfe7h + .dbyt 0cfe8h + .dbyt 0cfe9h + .dbyt 0cfeah + .dbyt 0cfebh + .dbyt 0cfech + .dbyt 0cfedh + .dbyt 0cfeeh + .dbyt 0cfefh + .dbyt 0cff0h + .dbyt 0cff1h + .dbyt 0cff2h + .dbyt 0cff3h + .dbyt 0cff4h + .dbyt 0cff5h + .dbyt 0cff6h + .dbyt 0cff7h + .dbyt 0cff8h + .dbyt 0cff9h + .dbyt 0cffah + .dbyt 0cffbh + .dbyt 0cffch + .dbyt 0cffdh + .dbyt 0cffeh + .dbyt 0cfffh + .dbyt 0d000h + .dbyt 0d001h + .dbyt 0d002h + .dbyt 0d003h + .dbyt 0d004h + .dbyt 0d005h + .dbyt 0d006h + .dbyt 0d007h + .dbyt 0d008h + .dbyt 0d009h + .dbyt 0d00ah + .dbyt 0d00bh + .dbyt 0d00ch + .dbyt 0d00dh + .dbyt 0d00eh + .dbyt 0d00fh + .dbyt 0dfe1h + .dbyt 0dfe2h + .dbyt 0dfe3h + .dbyt 0dfe4h + .dbyt 0dfe5h + .dbyt 0dfe6h + .dbyt 0dfe7h + .dbyt 0dfe8h + .dbyt 0dfe9h + .dbyt 0dfeah + .dbyt 0dfebh + .dbyt 0dfech + .dbyt 0dfedh + .dbyt 0dfeeh + .dbyt 0dfefh + .dbyt 0dff0h + .dbyt 0dff1h + .dbyt 0dff2h + .dbyt 0dff3h + .dbyt 0dff4h + .dbyt 0dff5h + .dbyt 0dff6h + .dbyt 0dff7h + .dbyt 0dff8h + .dbyt 0dff9h + .dbyt 0dffah + .dbyt 0dffbh + .dbyt 0dffch + .dbyt 0dffdh + .dbyt 0dffeh + .dbyt 0dfffh + .dbyt 0e000h + .dbyt 0e001h + .dbyt 0e002h + .dbyt 0e003h + .dbyt 0e004h + .dbyt 0e005h + .dbyt 0e006h + .dbyt 0e007h + .dbyt 0e008h + .dbyt 0e009h + .dbyt 0e00ah + .dbyt 0e00bh + .dbyt 0e00ch + .dbyt 0e00dh + .dbyt 0e00eh + .dbyt 0e00fh + .dbyt 0efe1h + .dbyt 0efe2h + .dbyt 0efe3h + .dbyt 0efe4h + .dbyt 0efe5h + .dbyt 0efe6h + .dbyt 0efe7h + .dbyt 0efe8h + .dbyt 0efe9h + .dbyt 0efeah + .dbyt 0efebh + .dbyt 0efech + .dbyt 0efedh + .dbyt 0efeeh + .dbyt 0efefh + .dbyt 0eff0h + .dbyt 0eff1h + .dbyt 0eff2h + .dbyt 0eff3h + .dbyt 0eff4h + .dbyt 0eff5h + .dbyt 0eff6h + .dbyt 0eff7h + .dbyt 0eff8h + .dbyt 0eff9h + .dbyt 0effah + .dbyt 0effbh + .dbyt 0effch + .dbyt 0effdh + .dbyt 0effeh + .dbyt 0efffh + .dbyt 0f000h + .dbyt 0f001h + .dbyt 0f002h + .dbyt 0f003h + .dbyt 0f004h + .dbyt 0f005h + .dbyt 0f006h + .dbyt 0f007h + .dbyt 0f008h + .dbyt 0f009h + .dbyt 0f00ah + .dbyt 0f00bh + .dbyt 0f00ch + .dbyt 0f00dh + .dbyt 0f00eh + .dbyt 0f00fh + .dbyt 0ffe1h + .dbyt 0ffe2h + .dbyt 0ffe3h + .dbyt 0ffe4h + .dbyt 0ffe5h + .dbyt 0ffe6h + .dbyt 0ffe7h + .dbyt 0ffe8h + .dbyt 0ffe9h + .dbyt 0ffeah + .dbyt 0ffebh + .dbyt 0ffech + .dbyt 0ffedh + .dbyt 0ffeeh + .dbyt 0ffefh + .dbyt 0fff0h + .dbyt 0fff1h + .dbyt 0fff2h + .dbyt 0fff3h + .dbyt 0fff4h + .dbyt 0fff5h + .dbyt 0fff6h + .dbyt 0fff7h + .dbyt 0fff8h + .dbyt 0fff9h + .dbyt 0fffah + .dbyt 0fffbh + .dbyt 0fffch + .dbyt 0fffdh + .dbyt 0fffeh + .dbyt 0ffffh - ; alternative 4-digit hex values, uppercase - .dbyt 0000h - .dbyt 0001h - .dbyt 0002h - .dbyt 0003h - .dbyt 0004h - .dbyt 0005h - .dbyt 0006h - .dbyt 0007h - .dbyt 0008h - .dbyt 0009h - .dbyt 000Ah - .dbyt 000Bh - .dbyt 000Ch - .dbyt 000Dh - .dbyt 000Eh - .dbyt 000Fh - .dbyt 0010h - .dbyt 0011h - .dbyt 0012h - .dbyt 0013h - .dbyt 0070h - .dbyt 0071h - .dbyt 0072h - .dbyt 0073h - .dbyt 0074h - .dbyt 0075h - .dbyt 0076h - .dbyt 0077h - .dbyt 0078h - .dbyt 0079h - .dbyt 007Ah - .dbyt 007Bh - .dbyt 007Ch - .dbyt 007Dh - .dbyt 007Eh - .dbyt 007Fh - .dbyt 0080h - .dbyt 0081h - .dbyt 0082h - .dbyt 0083h - .dbyt 0084h - .dbyt 0085h - .dbyt 0086h - .dbyt 00F0h - .dbyt 00F1h - .dbyt 00F2h - .dbyt 00F3h - .dbyt 00F4h - .dbyt 00F5h - .dbyt 00F6h - .dbyt 00F7h - .dbyt 00F8h - .dbyt 00F9h - .dbyt 00FAh - .dbyt 00FBh - .dbyt 00FCh - .dbyt 00FDh - .dbyt 00FEh - .dbyt 00FFh - .dbyt 0100h - .dbyt 0101h - .dbyt 0102h - .dbyt 0103h - .dbyt 0FD2h - .dbyt 0FD3h - .dbyt 0FD4h - .dbyt 0FD5h - .dbyt 0FD6h - .dbyt 0FD7h - .dbyt 0FD8h - .dbyt 0FD9h - .dbyt 0FDAh - .dbyt 0FDBh - .dbyt 0FDCh - .dbyt 0FDDh - .dbyt 0FDEh - .dbyt 0FDFh - .dbyt 0FE0h - .dbyt 0FE1h - .dbyt 0FE2h - .dbyt 0FE3h - .dbyt 0FE4h - .dbyt 0FE5h - .dbyt 0FE6h - .dbyt 0FE7h - .dbyt 0FE8h - .dbyt 0FE9h - .dbyt 0FEAh - .dbyt 0FEBh - .dbyt 0FECh - .dbyt 0FEDh - .dbyt 0FEEh - .dbyt 0FEFh - .dbyt 0FF0h - .dbyt 0FF1h - .dbyt 0FF2h - .dbyt 0FF3h - .dbyt 0FF4h - .dbyt 0FF5h - .dbyt 0FF6h - .dbyt 0FF7h - .dbyt 0FF8h - .dbyt 0FF9h - .dbyt 0FFAh - .dbyt 0FFBh - .dbyt 0FFCh - .dbyt 0FFDh - .dbyt 0FFEh - .dbyt 0FFFh - .dbyt 1000h - .dbyt 1001h - .dbyt 1002h - .dbyt 1003h - .dbyt 1004h - .dbyt 1005h - .dbyt 1006h - .dbyt 1007h - .dbyt 1008h - .dbyt 7FF0h - .dbyt 7FF1h - .dbyt 7FF2h - .dbyt 7FF3h - .dbyt 7FF4h - .dbyt 7FF5h - .dbyt 7FF6h - .dbyt 7FF7h - .dbyt 7FF8h - .dbyt 7FF9h - .dbyt 7FFAh - .dbyt 7FFBh - .dbyt 7FFCh - .dbyt 7FFDh - .dbyt 7FFEh - .dbyt 7FFFh - .dbyt 8000h - .dbyt 8001h - .dbyt 8002h - .dbyt 8003h - .dbyt 8004h - .dbyt 8005h - .dbyt 8006h - .dbyt 8007h - .dbyt 8008h - .dbyt 8009h - .dbyt 800Ah - .dbyt 800Bh - .dbyt 9FE1h - .dbyt 9FE2h - .dbyt 9FE3h - .dbyt 9FE4h - .dbyt 9FE5h - .dbyt 9FE6h - .dbyt 9FE7h - .dbyt 9FE8h - .dbyt 9FE9h - .dbyt 9FEAh - .dbyt 9FEBh - .dbyt 9FECh - .dbyt 9FEDh - .dbyt 9FEEh - .dbyt 9FEFh - .dbyt 9FF0h - .dbyt 9FF1h - .dbyt 9FF2h - .dbyt 9FF3h - .dbyt 9FF4h - .dbyt 9FF5h - .dbyt 9FF6h - .dbyt 9FF7h - .dbyt 9FF8h - .dbyt 9FF9h - .dbyt 9FFAh - .dbyt 9FFBh - .dbyt 9FFCh - .dbyt 9FFDh - .dbyt 9FFEh - .dbyt 9FFFh - .dbyt 0A000h - .dbyt 0A001h - .dbyt 0A002h - .dbyt 0A003h - .dbyt 0A004h - .dbyt 0A005h - .dbyt 0A006h - .dbyt 0A007h - .dbyt 0A008h - .dbyt 0A009h - .dbyt 0A00Ah - .dbyt 0A00Bh - .dbyt 0A00Ch - .dbyt 0A00Dh - .dbyt 0A00Eh - .dbyt 0A00Fh - .dbyt 0AFE1h - .dbyt 0AFE2h - .dbyt 0AFE3h - .dbyt 0AFE4h - .dbyt 0AFE5h - .dbyt 0AFE6h - .dbyt 0AFE7h - .dbyt 0AFE8h - .dbyt 0AFE9h - .dbyt 0AFEAh - .dbyt 0AFEBh - .dbyt 0AFECh - .dbyt 0AFEDh - .dbyt 0AFEEh - .dbyt 0AFEFh - .dbyt 0AFF0h - .dbyt 0AFF1h - .dbyt 0AFF2h - .dbyt 0AFF3h - .dbyt 0AFF4h - .dbyt 0AFF5h - .dbyt 0AFF6h - .dbyt 0AFF7h - .dbyt 0AFF8h - .dbyt 0AFF9h - .dbyt 0AFFAh - .dbyt 0AFFBh - .dbyt 0AFFCh - .dbyt 0AFFDh - .dbyt 0AFFEh - .dbyt 0AFFFh - .dbyt 0B000h - .dbyt 0B001h - .dbyt 0B002h - .dbyt 0B003h - .dbyt 0B004h - .dbyt 0B005h - .dbyt 0B006h - .dbyt 0B007h - .dbyt 0B008h - .dbyt 0B009h - .dbyt 0B00Ah - .dbyt 0B00Bh - .dbyt 0B00Ch - .dbyt 0B00Dh - .dbyt 0B00Eh - .dbyt 0B00Fh - .dbyt 0BFE1h - .dbyt 0BFE2h - .dbyt 0BFE3h - .dbyt 0BFE4h - .dbyt 0BFE5h - .dbyt 0BFE6h - .dbyt 0BFE7h - .dbyt 0BFE8h - .dbyt 0BFE9h - .dbyt 0BFEAh - .dbyt 0BFEBh - .dbyt 0BFECh - .dbyt 0BFEDh - .dbyt 0BFEEh - .dbyt 0BFEFh - .dbyt 0BFF0h - .dbyt 0BFF1h - .dbyt 0BFF2h - .dbyt 0BFF3h - .dbyt 0BFF4h - .dbyt 0BFF5h - .dbyt 0BFF6h - .dbyt 0BFF7h - .dbyt 0BFF8h - .dbyt 0BFF9h - .dbyt 0BFFAh - .dbyt 0BFFBh - .dbyt 0BFFCh - .dbyt 0BFFDh - .dbyt 0BFFEh - .dbyt 0BFFFh - .dbyt 0C000h - .dbyt 0C001h - .dbyt 0C002h - .dbyt 0C003h - .dbyt 0C004h - .dbyt 0C005h - .dbyt 0C006h - .dbyt 0C007h - .dbyt 0C008h - .dbyt 0C009h - .dbyt 0C00Ah - .dbyt 0C00Bh - .dbyt 0C00Ch - .dbyt 0C00Dh - .dbyt 0C00Eh - .dbyt 0C00Fh - .dbyt 0CFE1h - .dbyt 0CFE2h - .dbyt 0CFE3h - .dbyt 0CFE4h - .dbyt 0CFE5h - .dbyt 0CFE6h - .dbyt 0CFE7h - .dbyt 0CFE8h - .dbyt 0CFE9h - .dbyt 0CFEAh - .dbyt 0CFEBh - .dbyt 0CFECh - .dbyt 0CFEDh - .dbyt 0CFEEh - .dbyt 0CFEFh - .dbyt 0CFF0h - .dbyt 0CFF1h - .dbyt 0CFF2h - .dbyt 0CFF3h - .dbyt 0CFF4h - .dbyt 0CFF5h - .dbyt 0CFF6h - .dbyt 0CFF7h - .dbyt 0CFF8h - .dbyt 0CFF9h - .dbyt 0CFFAh - .dbyt 0CFFBh - .dbyt 0CFFCh - .dbyt 0CFFDh - .dbyt 0CFFEh - .dbyt 0CFFFh - .dbyt 0D000h - .dbyt 0D001h - .dbyt 0D002h - .dbyt 0D003h - .dbyt 0D004h - .dbyt 0D005h - .dbyt 0D006h - .dbyt 0D007h - .dbyt 0D008h - .dbyt 0D009h - .dbyt 0D00Ah - .dbyt 0D00Bh - .dbyt 0D00Ch - .dbyt 0D00Dh - .dbyt 0D00Eh - .dbyt 0D00Fh - .dbyt 0DFE1h - .dbyt 0DFE2h - .dbyt 0DFE3h - .dbyt 0DFE4h - .dbyt 0DFE5h - .dbyt 0DFE6h - .dbyt 0DFE7h - .dbyt 0DFE8h - .dbyt 0DFE9h - .dbyt 0DFEAh - .dbyt 0DFEBh - .dbyt 0DFECh - .dbyt 0DFEDh - .dbyt 0DFEEh - .dbyt 0DFEFh - .dbyt 0DFF0h - .dbyt 0DFF1h - .dbyt 0DFF2h - .dbyt 0DFF3h - .dbyt 0DFF4h - .dbyt 0DFF5h - .dbyt 0DFF6h - .dbyt 0DFF7h - .dbyt 0DFF8h - .dbyt 0DFF9h - .dbyt 0DFFAh - .dbyt 0DFFBh - .dbyt 0DFFCh - .dbyt 0DFFDh - .dbyt 0DFFEh - .dbyt 0DFFFh - .dbyt 0E000h - .dbyt 0E001h - .dbyt 0E002h - .dbyt 0E003h - .dbyt 0E004h - .dbyt 0E005h - .dbyt 0E006h - .dbyt 0E007h - .dbyt 0E008h - .dbyt 0E009h - .dbyt 0E00Ah - .dbyt 0E00Bh - .dbyt 0E00Ch - .dbyt 0E00Dh - .dbyt 0E00Eh - .dbyt 0E00Fh - .dbyt 0EFE1h - .dbyt 0EFE2h - .dbyt 0EFE3h - .dbyt 0EFE4h - .dbyt 0EFE5h - .dbyt 0EFE6h - .dbyt 0EFE7h - .dbyt 0EFE8h - .dbyt 0EFE9h - .dbyt 0EFEAh - .dbyt 0EFEBh - .dbyt 0EFECh - .dbyt 0EFEDh - .dbyt 0EFEEh - .dbyt 0EFEFh - .dbyt 0EFF0h - .dbyt 0EFF1h - .dbyt 0EFF2h - .dbyt 0EFF3h - .dbyt 0EFF4h - .dbyt 0EFF5h - .dbyt 0EFF6h - .dbyt 0EFF7h - .dbyt 0EFF8h - .dbyt 0EFF9h - .dbyt 0EFFAh - .dbyt 0EFFBh - .dbyt 0EFFCh - .dbyt 0EFFDh - .dbyt 0EFFEh - .dbyt 0EFFFh - .dbyt 0F000h - .dbyt 0F001h - .dbyt 0F002h - .dbyt 0F003h - .dbyt 0F004h - .dbyt 0F005h - .dbyt 0F006h - .dbyt 0F007h - .dbyt 0F008h - .dbyt 0F009h - .dbyt 0F00Ah - .dbyt 0F00Bh - .dbyt 0F00Ch - .dbyt 0F00Dh - .dbyt 0F00Eh - .dbyt 0F00Fh - .dbyt 0FFE1h - .dbyt 0FFE2h - .dbyt 0FFE3h - .dbyt 0FFE4h - .dbyt 0FFE5h - .dbyt 0FFE6h - .dbyt 0FFE7h - .dbyt 0FFE8h - .dbyt 0FFE9h - .dbyt 0FFEAh - .dbyt 0FFEBh - .dbyt 0FFECh - .dbyt 0FFEDh - .dbyt 0FFEEh - .dbyt 0FFEFh - .dbyt 0FFF0h - .dbyt 0FFF1h - .dbyt 0FFF2h - .dbyt 0FFF3h - .dbyt 0FFF4h - .dbyt 0FFF5h - .dbyt 0FFF6h - .dbyt 0FFF7h - .dbyt 0FFF8h - .dbyt 0FFF9h - .dbyt 0FFFAh - .dbyt 0FFFBh - .dbyt 0FFFCh - .dbyt 0FFFDh - .dbyt 0FFFEh - .dbyt 0FFFFh + ; alternative 4-digit hex values, uppercase + .dbyt 0000h + .dbyt 0001h + .dbyt 0002h + .dbyt 0003h + .dbyt 0004h + .dbyt 0005h + .dbyt 0006h + .dbyt 0007h + .dbyt 0008h + .dbyt 0009h + .dbyt 000Ah + .dbyt 000Bh + .dbyt 000Ch + .dbyt 000Dh + .dbyt 000Eh + .dbyt 000Fh + .dbyt 0010h + .dbyt 0011h + .dbyt 0012h + .dbyt 0013h + .dbyt 0070h + .dbyt 0071h + .dbyt 0072h + .dbyt 0073h + .dbyt 0074h + .dbyt 0075h + .dbyt 0076h + .dbyt 0077h + .dbyt 0078h + .dbyt 0079h + .dbyt 007Ah + .dbyt 007Bh + .dbyt 007Ch + .dbyt 007Dh + .dbyt 007Eh + .dbyt 007Fh + .dbyt 0080h + .dbyt 0081h + .dbyt 0082h + .dbyt 0083h + .dbyt 0084h + .dbyt 0085h + .dbyt 0086h + .dbyt 00F0h + .dbyt 00F1h + .dbyt 00F2h + .dbyt 00F3h + .dbyt 00F4h + .dbyt 00F5h + .dbyt 00F6h + .dbyt 00F7h + .dbyt 00F8h + .dbyt 00F9h + .dbyt 00FAh + .dbyt 00FBh + .dbyt 00FCh + .dbyt 00FDh + .dbyt 00FEh + .dbyt 00FFh + .dbyt 0100h + .dbyt 0101h + .dbyt 0102h + .dbyt 0103h + .dbyt 0FD2h + .dbyt 0FD3h + .dbyt 0FD4h + .dbyt 0FD5h + .dbyt 0FD6h + .dbyt 0FD7h + .dbyt 0FD8h + .dbyt 0FD9h + .dbyt 0FDAh + .dbyt 0FDBh + .dbyt 0FDCh + .dbyt 0FDDh + .dbyt 0FDEh + .dbyt 0FDFh + .dbyt 0FE0h + .dbyt 0FE1h + .dbyt 0FE2h + .dbyt 0FE3h + .dbyt 0FE4h + .dbyt 0FE5h + .dbyt 0FE6h + .dbyt 0FE7h + .dbyt 0FE8h + .dbyt 0FE9h + .dbyt 0FEAh + .dbyt 0FEBh + .dbyt 0FECh + .dbyt 0FEDh + .dbyt 0FEEh + .dbyt 0FEFh + .dbyt 0FF0h + .dbyt 0FF1h + .dbyt 0FF2h + .dbyt 0FF3h + .dbyt 0FF4h + .dbyt 0FF5h + .dbyt 0FF6h + .dbyt 0FF7h + .dbyt 0FF8h + .dbyt 0FF9h + .dbyt 0FFAh + .dbyt 0FFBh + .dbyt 0FFCh + .dbyt 0FFDh + .dbyt 0FFEh + .dbyt 0FFFh + .dbyt 1000h + .dbyt 1001h + .dbyt 1002h + .dbyt 1003h + .dbyt 1004h + .dbyt 1005h + .dbyt 1006h + .dbyt 1007h + .dbyt 1008h + .dbyt 7FF0h + .dbyt 7FF1h + .dbyt 7FF2h + .dbyt 7FF3h + .dbyt 7FF4h + .dbyt 7FF5h + .dbyt 7FF6h + .dbyt 7FF7h + .dbyt 7FF8h + .dbyt 7FF9h + .dbyt 7FFAh + .dbyt 7FFBh + .dbyt 7FFCh + .dbyt 7FFDh + .dbyt 7FFEh + .dbyt 7FFFh + .dbyt 8000h + .dbyt 8001h + .dbyt 8002h + .dbyt 8003h + .dbyt 8004h + .dbyt 8005h + .dbyt 8006h + .dbyt 8007h + .dbyt 8008h + .dbyt 8009h + .dbyt 800Ah + .dbyt 800Bh + .dbyt 9FE1h + .dbyt 9FE2h + .dbyt 9FE3h + .dbyt 9FE4h + .dbyt 9FE5h + .dbyt 9FE6h + .dbyt 9FE7h + .dbyt 9FE8h + .dbyt 9FE9h + .dbyt 9FEAh + .dbyt 9FEBh + .dbyt 9FECh + .dbyt 9FEDh + .dbyt 9FEEh + .dbyt 9FEFh + .dbyt 9FF0h + .dbyt 9FF1h + .dbyt 9FF2h + .dbyt 9FF3h + .dbyt 9FF4h + .dbyt 9FF5h + .dbyt 9FF6h + .dbyt 9FF7h + .dbyt 9FF8h + .dbyt 9FF9h + .dbyt 9FFAh + .dbyt 9FFBh + .dbyt 9FFCh + .dbyt 9FFDh + .dbyt 9FFEh + .dbyt 9FFFh + .dbyt 0A000h + .dbyt 0A001h + .dbyt 0A002h + .dbyt 0A003h + .dbyt 0A004h + .dbyt 0A005h + .dbyt 0A006h + .dbyt 0A007h + .dbyt 0A008h + .dbyt 0A009h + .dbyt 0A00Ah + .dbyt 0A00Bh + .dbyt 0A00Ch + .dbyt 0A00Dh + .dbyt 0A00Eh + .dbyt 0A00Fh + .dbyt 0AFE1h + .dbyt 0AFE2h + .dbyt 0AFE3h + .dbyt 0AFE4h + .dbyt 0AFE5h + .dbyt 0AFE6h + .dbyt 0AFE7h + .dbyt 0AFE8h + .dbyt 0AFE9h + .dbyt 0AFEAh + .dbyt 0AFEBh + .dbyt 0AFECh + .dbyt 0AFEDh + .dbyt 0AFEEh + .dbyt 0AFEFh + .dbyt 0AFF0h + .dbyt 0AFF1h + .dbyt 0AFF2h + .dbyt 0AFF3h + .dbyt 0AFF4h + .dbyt 0AFF5h + .dbyt 0AFF6h + .dbyt 0AFF7h + .dbyt 0AFF8h + .dbyt 0AFF9h + .dbyt 0AFFAh + .dbyt 0AFFBh + .dbyt 0AFFCh + .dbyt 0AFFDh + .dbyt 0AFFEh + .dbyt 0AFFFh + .dbyt 0B000h + .dbyt 0B001h + .dbyt 0B002h + .dbyt 0B003h + .dbyt 0B004h + .dbyt 0B005h + .dbyt 0B006h + .dbyt 0B007h + .dbyt 0B008h + .dbyt 0B009h + .dbyt 0B00Ah + .dbyt 0B00Bh + .dbyt 0B00Ch + .dbyt 0B00Dh + .dbyt 0B00Eh + .dbyt 0B00Fh + .dbyt 0BFE1h + .dbyt 0BFE2h + .dbyt 0BFE3h + .dbyt 0BFE4h + .dbyt 0BFE5h + .dbyt 0BFE6h + .dbyt 0BFE7h + .dbyt 0BFE8h + .dbyt 0BFE9h + .dbyt 0BFEAh + .dbyt 0BFEBh + .dbyt 0BFECh + .dbyt 0BFEDh + .dbyt 0BFEEh + .dbyt 0BFEFh + .dbyt 0BFF0h + .dbyt 0BFF1h + .dbyt 0BFF2h + .dbyt 0BFF3h + .dbyt 0BFF4h + .dbyt 0BFF5h + .dbyt 0BFF6h + .dbyt 0BFF7h + .dbyt 0BFF8h + .dbyt 0BFF9h + .dbyt 0BFFAh + .dbyt 0BFFBh + .dbyt 0BFFCh + .dbyt 0BFFDh + .dbyt 0BFFEh + .dbyt 0BFFFh + .dbyt 0C000h + .dbyt 0C001h + .dbyt 0C002h + .dbyt 0C003h + .dbyt 0C004h + .dbyt 0C005h + .dbyt 0C006h + .dbyt 0C007h + .dbyt 0C008h + .dbyt 0C009h + .dbyt 0C00Ah + .dbyt 0C00Bh + .dbyt 0C00Ch + .dbyt 0C00Dh + .dbyt 0C00Eh + .dbyt 0C00Fh + .dbyt 0CFE1h + .dbyt 0CFE2h + .dbyt 0CFE3h + .dbyt 0CFE4h + .dbyt 0CFE5h + .dbyt 0CFE6h + .dbyt 0CFE7h + .dbyt 0CFE8h + .dbyt 0CFE9h + .dbyt 0CFEAh + .dbyt 0CFEBh + .dbyt 0CFECh + .dbyt 0CFEDh + .dbyt 0CFEEh + .dbyt 0CFEFh + .dbyt 0CFF0h + .dbyt 0CFF1h + .dbyt 0CFF2h + .dbyt 0CFF3h + .dbyt 0CFF4h + .dbyt 0CFF5h + .dbyt 0CFF6h + .dbyt 0CFF7h + .dbyt 0CFF8h + .dbyt 0CFF9h + .dbyt 0CFFAh + .dbyt 0CFFBh + .dbyt 0CFFCh + .dbyt 0CFFDh + .dbyt 0CFFEh + .dbyt 0CFFFh + .dbyt 0D000h + .dbyt 0D001h + .dbyt 0D002h + .dbyt 0D003h + .dbyt 0D004h + .dbyt 0D005h + .dbyt 0D006h + .dbyt 0D007h + .dbyt 0D008h + .dbyt 0D009h + .dbyt 0D00Ah + .dbyt 0D00Bh + .dbyt 0D00Ch + .dbyt 0D00Dh + .dbyt 0D00Eh + .dbyt 0D00Fh + .dbyt 0DFE1h + .dbyt 0DFE2h + .dbyt 0DFE3h + .dbyt 0DFE4h + .dbyt 0DFE5h + .dbyt 0DFE6h + .dbyt 0DFE7h + .dbyt 0DFE8h + .dbyt 0DFE9h + .dbyt 0DFEAh + .dbyt 0DFEBh + .dbyt 0DFECh + .dbyt 0DFEDh + .dbyt 0DFEEh + .dbyt 0DFEFh + .dbyt 0DFF0h + .dbyt 0DFF1h + .dbyt 0DFF2h + .dbyt 0DFF3h + .dbyt 0DFF4h + .dbyt 0DFF5h + .dbyt 0DFF6h + .dbyt 0DFF7h + .dbyt 0DFF8h + .dbyt 0DFF9h + .dbyt 0DFFAh + .dbyt 0DFFBh + .dbyt 0DFFCh + .dbyt 0DFFDh + .dbyt 0DFFEh + .dbyt 0DFFFh + .dbyt 0E000h + .dbyt 0E001h + .dbyt 0E002h + .dbyt 0E003h + .dbyt 0E004h + .dbyt 0E005h + .dbyt 0E006h + .dbyt 0E007h + .dbyt 0E008h + .dbyt 0E009h + .dbyt 0E00Ah + .dbyt 0E00Bh + .dbyt 0E00Ch + .dbyt 0E00Dh + .dbyt 0E00Eh + .dbyt 0E00Fh + .dbyt 0EFE1h + .dbyt 0EFE2h + .dbyt 0EFE3h + .dbyt 0EFE4h + .dbyt 0EFE5h + .dbyt 0EFE6h + .dbyt 0EFE7h + .dbyt 0EFE8h + .dbyt 0EFE9h + .dbyt 0EFEAh + .dbyt 0EFEBh + .dbyt 0EFECh + .dbyt 0EFEDh + .dbyt 0EFEEh + .dbyt 0EFEFh + .dbyt 0EFF0h + .dbyt 0EFF1h + .dbyt 0EFF2h + .dbyt 0EFF3h + .dbyt 0EFF4h + .dbyt 0EFF5h + .dbyt 0EFF6h + .dbyt 0EFF7h + .dbyt 0EFF8h + .dbyt 0EFF9h + .dbyt 0EFFAh + .dbyt 0EFFBh + .dbyt 0EFFCh + .dbyt 0EFFDh + .dbyt 0EFFEh + .dbyt 0EFFFh + .dbyt 0F000h + .dbyt 0F001h + .dbyt 0F002h + .dbyt 0F003h + .dbyt 0F004h + .dbyt 0F005h + .dbyt 0F006h + .dbyt 0F007h + .dbyt 0F008h + .dbyt 0F009h + .dbyt 0F00Ah + .dbyt 0F00Bh + .dbyt 0F00Ch + .dbyt 0F00Dh + .dbyt 0F00Eh + .dbyt 0F00Fh + .dbyt 0FFE1h + .dbyt 0FFE2h + .dbyt 0FFE3h + .dbyt 0FFE4h + .dbyt 0FFE5h + .dbyt 0FFE6h + .dbyt 0FFE7h + .dbyt 0FFE8h + .dbyt 0FFE9h + .dbyt 0FFEAh + .dbyt 0FFEBh + .dbyt 0FFECh + .dbyt 0FFEDh + .dbyt 0FFEEh + .dbyt 0FFEFh + .dbyt 0FFF0h + .dbyt 0FFF1h + .dbyt 0FFF2h + .dbyt 0FFF3h + .dbyt 0FFF4h + .dbyt 0FFF5h + .dbyt 0FFF6h + .dbyt 0FFF7h + .dbyt 0FFF8h + .dbyt 0FFF9h + .dbyt 0FFFAh + .dbyt 0FFFBh + .dbyt 0FFFCh + .dbyt 0FFFDh + .dbyt 0FFFEh + .dbyt 0FFFFh - ; alternative hex values, always leading zero - .dbyt 00h - .dbyt 01h - .dbyt 02h - .dbyt 03h - .dbyt 04h - .dbyt 05h - .dbyt 06h - .dbyt 07h - .dbyt 08h - .dbyt 09h - .dbyt 0ah - .dbyt 0bh - .dbyt 0ch - .dbyt 0dh - .dbyt 0eh - .dbyt 0fh - .dbyt 010h - .dbyt 011h - .dbyt 012h - .dbyt 013h - .dbyt 070h - .dbyt 071h - .dbyt 072h - .dbyt 073h - .dbyt 074h - .dbyt 075h - .dbyt 076h - .dbyt 077h - .dbyt 078h - .dbyt 079h - .dbyt 07ah - .dbyt 07bh - .dbyt 07ch - .dbyt 07dh - .dbyt 07eh - .dbyt 07fh - .dbyt 080h - .dbyt 081h - .dbyt 082h - .dbyt 083h - .dbyt 084h - .dbyt 085h - .dbyt 086h - .dbyt 0f0h - .dbyt 0f1h - .dbyt 0f2h - .dbyt 0f3h - .dbyt 0f4h - .dbyt 0f5h - .dbyt 0f6h - .dbyt 0f7h - .dbyt 0f8h - .dbyt 0f9h - .dbyt 0fah - .dbyt 0fbh - .dbyt 0fch - .dbyt 0fdh - .dbyt 0feh - .dbyt 0ffh - .dbyt 0100h - .dbyt 0101h - .dbyt 0102h - .dbyt 0103h - .dbyt 0fd2h - .dbyt 0fd3h - .dbyt 0fd4h - .dbyt 0fd5h - .dbyt 0fd6h - .dbyt 0fd7h - .dbyt 0fd8h - .dbyt 0fd9h - .dbyt 0fdah - .dbyt 0fdbh - .dbyt 0fdch - .dbyt 0fddh - .dbyt 0fdeh - .dbyt 0fdfh - .dbyt 0fe0h - .dbyt 0fe1h - .dbyt 0fe2h - .dbyt 0fe3h - .dbyt 0fe4h - .dbyt 0fe5h - .dbyt 0fe6h - .dbyt 0fe7h - .dbyt 0fe8h - .dbyt 0fe9h - .dbyt 0feah - .dbyt 0febh - .dbyt 0fech - .dbyt 0fedh - .dbyt 0feeh - .dbyt 0fefh - .dbyt 0ff0h - .dbyt 0ff1h - .dbyt 0ff2h - .dbyt 0ff3h - .dbyt 0ff4h - .dbyt 0ff5h - .dbyt 0ff6h - .dbyt 0ff7h - .dbyt 0ff8h - .dbyt 0ff9h - .dbyt 0ffah - .dbyt 0ffbh - .dbyt 0ffch - .dbyt 0ffdh - .dbyt 0ffeh - .dbyt 0fffh - .dbyt 01000h - .dbyt 01001h - .dbyt 01002h - .dbyt 01003h - .dbyt 01004h - .dbyt 01005h - .dbyt 01006h - .dbyt 01007h - .dbyt 01008h - .dbyt 07ff0h - .dbyt 07ff1h - .dbyt 07ff2h - .dbyt 07ff3h - .dbyt 07ff4h - .dbyt 07ff5h - .dbyt 07ff6h - .dbyt 07ff7h - .dbyt 07ff8h - .dbyt 07ff9h - .dbyt 07ffah - .dbyt 07ffbh - .dbyt 07ffch - .dbyt 07ffdh - .dbyt 07ffeh - .dbyt 07fffh - .dbyt 08000h - .dbyt 08001h - .dbyt 08002h - .dbyt 08003h - .dbyt 08004h - .dbyt 08005h - .dbyt 08006h - .dbyt 08007h - .dbyt 08008h - .dbyt 08009h - .dbyt 0800ah - .dbyt 0800bh - .dbyt 09fe1h - .dbyt 09fe2h - .dbyt 09fe3h - .dbyt 09fe4h - .dbyt 09fe5h - .dbyt 09fe6h - .dbyt 09fe7h - .dbyt 09fe8h - .dbyt 09fe9h - .dbyt 09feah - .dbyt 09febh - .dbyt 09fech - .dbyt 09fedh - .dbyt 09feeh - .dbyt 09fefh - .dbyt 09ff0h - .dbyt 09ff1h - .dbyt 09ff2h - .dbyt 09ff3h - .dbyt 09ff4h - .dbyt 09ff5h - .dbyt 09ff6h - .dbyt 09ff7h - .dbyt 09ff8h - .dbyt 09ff9h - .dbyt 09ffah - .dbyt 09ffbh - .dbyt 09ffch - .dbyt 09ffdh - .dbyt 09ffeh - .dbyt 09fffh - .dbyt 0a000h - .dbyt 0a001h - .dbyt 0a002h - .dbyt 0a003h - .dbyt 0a004h - .dbyt 0a005h - .dbyt 0a006h - .dbyt 0a007h - .dbyt 0a008h - .dbyt 0a009h - .dbyt 0a00ah - .dbyt 0a00bh - .dbyt 0a00ch - .dbyt 0a00dh - .dbyt 0a00eh - .dbyt 0a00fh - .dbyt 0afe1h - .dbyt 0afe2h - .dbyt 0afe3h - .dbyt 0afe4h - .dbyt 0afe5h - .dbyt 0afe6h - .dbyt 0afe7h - .dbyt 0afe8h - .dbyt 0afe9h - .dbyt 0afeah - .dbyt 0afebh - .dbyt 0afech - .dbyt 0afedh - .dbyt 0afeeh - .dbyt 0afefh - .dbyt 0aff0h - .dbyt 0aff1h - .dbyt 0aff2h - .dbyt 0aff3h - .dbyt 0aff4h - .dbyt 0aff5h - .dbyt 0aff6h - .dbyt 0aff7h - .dbyt 0aff8h - .dbyt 0aff9h - .dbyt 0affah - .dbyt 0affbh - .dbyt 0affch - .dbyt 0affdh - .dbyt 0affeh - .dbyt 0afffh - .dbyt 0b000h - .dbyt 0b001h - .dbyt 0b002h - .dbyt 0b003h - .dbyt 0b004h - .dbyt 0b005h - .dbyt 0b006h - .dbyt 0b007h - .dbyt 0b008h - .dbyt 0b009h - .dbyt 0b00ah - .dbyt 0b00bh - .dbyt 0b00ch - .dbyt 0b00dh - .dbyt 0b00eh - .dbyt 0b00fh - .dbyt 0bfe1h - .dbyt 0bfe2h - .dbyt 0bfe3h - .dbyt 0bfe4h - .dbyt 0bfe5h - .dbyt 0bfe6h - .dbyt 0bfe7h - .dbyt 0bfe8h - .dbyt 0bfe9h - .dbyt 0bfeah - .dbyt 0bfebh - .dbyt 0bfech - .dbyt 0bfedh - .dbyt 0bfeeh - .dbyt 0bfefh - .dbyt 0bff0h - .dbyt 0bff1h - .dbyt 0bff2h - .dbyt 0bff3h - .dbyt 0bff4h - .dbyt 0bff5h - .dbyt 0bff6h - .dbyt 0bff7h - .dbyt 0bff8h - .dbyt 0bff9h - .dbyt 0bffah - .dbyt 0bffbh - .dbyt 0bffch - .dbyt 0bffdh - .dbyt 0bffeh - .dbyt 0bfffh - .dbyt 0c000h - .dbyt 0c001h - .dbyt 0c002h - .dbyt 0c003h - .dbyt 0c004h - .dbyt 0c005h - .dbyt 0c006h - .dbyt 0c007h - .dbyt 0c008h - .dbyt 0c009h - .dbyt 0c00ah - .dbyt 0c00bh - .dbyt 0c00ch - .dbyt 0c00dh - .dbyt 0c00eh - .dbyt 0c00fh - .dbyt 0cfe1h - .dbyt 0cfe2h - .dbyt 0cfe3h - .dbyt 0cfe4h - .dbyt 0cfe5h - .dbyt 0cfe6h - .dbyt 0cfe7h - .dbyt 0cfe8h - .dbyt 0cfe9h - .dbyt 0cfeah - .dbyt 0cfebh - .dbyt 0cfech - .dbyt 0cfedh - .dbyt 0cfeeh - .dbyt 0cfefh - .dbyt 0cff0h - .dbyt 0cff1h - .dbyt 0cff2h - .dbyt 0cff3h - .dbyt 0cff4h - .dbyt 0cff5h - .dbyt 0cff6h - .dbyt 0cff7h - .dbyt 0cff8h - .dbyt 0cff9h - .dbyt 0cffah - .dbyt 0cffbh - .dbyt 0cffch - .dbyt 0cffdh - .dbyt 0cffeh - .dbyt 0cfffh - .dbyt 0d000h - .dbyt 0d001h - .dbyt 0d002h - .dbyt 0d003h - .dbyt 0d004h - .dbyt 0d005h - .dbyt 0d006h - .dbyt 0d007h - .dbyt 0d008h - .dbyt 0d009h - .dbyt 0d00ah - .dbyt 0d00bh - .dbyt 0d00ch - .dbyt 0d00dh - .dbyt 0d00eh - .dbyt 0d00fh - .dbyt 0dfe1h - .dbyt 0dfe2h - .dbyt 0dfe3h - .dbyt 0dfe4h - .dbyt 0dfe5h - .dbyt 0dfe6h - .dbyt 0dfe7h - .dbyt 0dfe8h - .dbyt 0dfe9h - .dbyt 0dfeah - .dbyt 0dfebh - .dbyt 0dfech - .dbyt 0dfedh - .dbyt 0dfeeh - .dbyt 0dfefh - .dbyt 0dff0h - .dbyt 0dff1h - .dbyt 0dff2h - .dbyt 0dff3h - .dbyt 0dff4h - .dbyt 0dff5h - .dbyt 0dff6h - .dbyt 0dff7h - .dbyt 0dff8h - .dbyt 0dff9h - .dbyt 0dffah - .dbyt 0dffbh - .dbyt 0dffch - .dbyt 0dffdh - .dbyt 0dffeh - .dbyt 0dfffh - .dbyt 0e000h - .dbyt 0e001h - .dbyt 0e002h - .dbyt 0e003h - .dbyt 0e004h - .dbyt 0e005h - .dbyt 0e006h - .dbyt 0e007h - .dbyt 0e008h - .dbyt 0e009h - .dbyt 0e00ah - .dbyt 0e00bh - .dbyt 0e00ch - .dbyt 0e00dh - .dbyt 0e00eh - .dbyt 0e00fh - .dbyt 0efe1h - .dbyt 0efe2h - .dbyt 0efe3h - .dbyt 0efe4h - .dbyt 0efe5h - .dbyt 0efe6h - .dbyt 0efe7h - .dbyt 0efe8h - .dbyt 0efe9h - .dbyt 0efeah - .dbyt 0efebh - .dbyt 0efech - .dbyt 0efedh - .dbyt 0efeeh - .dbyt 0efefh - .dbyt 0eff0h - .dbyt 0eff1h - .dbyt 0eff2h - .dbyt 0eff3h - .dbyt 0eff4h - .dbyt 0eff5h - .dbyt 0eff6h - .dbyt 0eff7h - .dbyt 0eff8h - .dbyt 0eff9h - .dbyt 0effah - .dbyt 0effbh - .dbyt 0effch - .dbyt 0effdh - .dbyt 0effeh - .dbyt 0efffh - .dbyt 0f000h - .dbyt 0f001h - .dbyt 0f002h - .dbyt 0f003h - .dbyt 0f004h - .dbyt 0f005h - .dbyt 0f006h - .dbyt 0f007h - .dbyt 0f008h - .dbyt 0f009h - .dbyt 0f00ah - .dbyt 0f00bh - .dbyt 0f00ch - .dbyt 0f00dh - .dbyt 0f00eh - .dbyt 0f00fh - .dbyt 0ffe1h - .dbyt 0ffe2h - .dbyt 0ffe3h - .dbyt 0ffe4h - .dbyt 0ffe5h - .dbyt 0ffe6h - .dbyt 0ffe7h - .dbyt 0ffe8h - .dbyt 0ffe9h - .dbyt 0ffeah - .dbyt 0ffebh - .dbyt 0ffech - .dbyt 0ffedh - .dbyt 0ffeeh - .dbyt 0ffefh - .dbyt 0fff0h - .dbyt 0fff1h - .dbyt 0fff2h - .dbyt 0fff3h - .dbyt 0fff4h - .dbyt 0fff5h - .dbyt 0fff6h - .dbyt 0fff7h - .dbyt 0fff8h - .dbyt 0fff9h - .dbyt 0fffah - .dbyt 0fffbh - .dbyt 0fffch - .dbyt 0fffdh - .dbyt 0fffeh - .dbyt 0ffffh + ; alternative hex values, always leading zero + .dbyt 00h + .dbyt 01h + .dbyt 02h + .dbyt 03h + .dbyt 04h + .dbyt 05h + .dbyt 06h + .dbyt 07h + .dbyt 08h + .dbyt 09h + .dbyt 0ah + .dbyt 0bh + .dbyt 0ch + .dbyt 0dh + .dbyt 0eh + .dbyt 0fh + .dbyt 010h + .dbyt 011h + .dbyt 012h + .dbyt 013h + .dbyt 070h + .dbyt 071h + .dbyt 072h + .dbyt 073h + .dbyt 074h + .dbyt 075h + .dbyt 076h + .dbyt 077h + .dbyt 078h + .dbyt 079h + .dbyt 07ah + .dbyt 07bh + .dbyt 07ch + .dbyt 07dh + .dbyt 07eh + .dbyt 07fh + .dbyt 080h + .dbyt 081h + .dbyt 082h + .dbyt 083h + .dbyt 084h + .dbyt 085h + .dbyt 086h + .dbyt 0f0h + .dbyt 0f1h + .dbyt 0f2h + .dbyt 0f3h + .dbyt 0f4h + .dbyt 0f5h + .dbyt 0f6h + .dbyt 0f7h + .dbyt 0f8h + .dbyt 0f9h + .dbyt 0fah + .dbyt 0fbh + .dbyt 0fch + .dbyt 0fdh + .dbyt 0feh + .dbyt 0ffh + .dbyt 0100h + .dbyt 0101h + .dbyt 0102h + .dbyt 0103h + .dbyt 0fd2h + .dbyt 0fd3h + .dbyt 0fd4h + .dbyt 0fd5h + .dbyt 0fd6h + .dbyt 0fd7h + .dbyt 0fd8h + .dbyt 0fd9h + .dbyt 0fdah + .dbyt 0fdbh + .dbyt 0fdch + .dbyt 0fddh + .dbyt 0fdeh + .dbyt 0fdfh + .dbyt 0fe0h + .dbyt 0fe1h + .dbyt 0fe2h + .dbyt 0fe3h + .dbyt 0fe4h + .dbyt 0fe5h + .dbyt 0fe6h + .dbyt 0fe7h + .dbyt 0fe8h + .dbyt 0fe9h + .dbyt 0feah + .dbyt 0febh + .dbyt 0fech + .dbyt 0fedh + .dbyt 0feeh + .dbyt 0fefh + .dbyt 0ff0h + .dbyt 0ff1h + .dbyt 0ff2h + .dbyt 0ff3h + .dbyt 0ff4h + .dbyt 0ff5h + .dbyt 0ff6h + .dbyt 0ff7h + .dbyt 0ff8h + .dbyt 0ff9h + .dbyt 0ffah + .dbyt 0ffbh + .dbyt 0ffch + .dbyt 0ffdh + .dbyt 0ffeh + .dbyt 0fffh + .dbyt 01000h + .dbyt 01001h + .dbyt 01002h + .dbyt 01003h + .dbyt 01004h + .dbyt 01005h + .dbyt 01006h + .dbyt 01007h + .dbyt 01008h + .dbyt 07ff0h + .dbyt 07ff1h + .dbyt 07ff2h + .dbyt 07ff3h + .dbyt 07ff4h + .dbyt 07ff5h + .dbyt 07ff6h + .dbyt 07ff7h + .dbyt 07ff8h + .dbyt 07ff9h + .dbyt 07ffah + .dbyt 07ffbh + .dbyt 07ffch + .dbyt 07ffdh + .dbyt 07ffeh + .dbyt 07fffh + .dbyt 08000h + .dbyt 08001h + .dbyt 08002h + .dbyt 08003h + .dbyt 08004h + .dbyt 08005h + .dbyt 08006h + .dbyt 08007h + .dbyt 08008h + .dbyt 08009h + .dbyt 0800ah + .dbyt 0800bh + .dbyt 09fe1h + .dbyt 09fe2h + .dbyt 09fe3h + .dbyt 09fe4h + .dbyt 09fe5h + .dbyt 09fe6h + .dbyt 09fe7h + .dbyt 09fe8h + .dbyt 09fe9h + .dbyt 09feah + .dbyt 09febh + .dbyt 09fech + .dbyt 09fedh + .dbyt 09feeh + .dbyt 09fefh + .dbyt 09ff0h + .dbyt 09ff1h + .dbyt 09ff2h + .dbyt 09ff3h + .dbyt 09ff4h + .dbyt 09ff5h + .dbyt 09ff6h + .dbyt 09ff7h + .dbyt 09ff8h + .dbyt 09ff9h + .dbyt 09ffah + .dbyt 09ffbh + .dbyt 09ffch + .dbyt 09ffdh + .dbyt 09ffeh + .dbyt 09fffh + .dbyt 0a000h + .dbyt 0a001h + .dbyt 0a002h + .dbyt 0a003h + .dbyt 0a004h + .dbyt 0a005h + .dbyt 0a006h + .dbyt 0a007h + .dbyt 0a008h + .dbyt 0a009h + .dbyt 0a00ah + .dbyt 0a00bh + .dbyt 0a00ch + .dbyt 0a00dh + .dbyt 0a00eh + .dbyt 0a00fh + .dbyt 0afe1h + .dbyt 0afe2h + .dbyt 0afe3h + .dbyt 0afe4h + .dbyt 0afe5h + .dbyt 0afe6h + .dbyt 0afe7h + .dbyt 0afe8h + .dbyt 0afe9h + .dbyt 0afeah + .dbyt 0afebh + .dbyt 0afech + .dbyt 0afedh + .dbyt 0afeeh + .dbyt 0afefh + .dbyt 0aff0h + .dbyt 0aff1h + .dbyt 0aff2h + .dbyt 0aff3h + .dbyt 0aff4h + .dbyt 0aff5h + .dbyt 0aff6h + .dbyt 0aff7h + .dbyt 0aff8h + .dbyt 0aff9h + .dbyt 0affah + .dbyt 0affbh + .dbyt 0affch + .dbyt 0affdh + .dbyt 0affeh + .dbyt 0afffh + .dbyt 0b000h + .dbyt 0b001h + .dbyt 0b002h + .dbyt 0b003h + .dbyt 0b004h + .dbyt 0b005h + .dbyt 0b006h + .dbyt 0b007h + .dbyt 0b008h + .dbyt 0b009h + .dbyt 0b00ah + .dbyt 0b00bh + .dbyt 0b00ch + .dbyt 0b00dh + .dbyt 0b00eh + .dbyt 0b00fh + .dbyt 0bfe1h + .dbyt 0bfe2h + .dbyt 0bfe3h + .dbyt 0bfe4h + .dbyt 0bfe5h + .dbyt 0bfe6h + .dbyt 0bfe7h + .dbyt 0bfe8h + .dbyt 0bfe9h + .dbyt 0bfeah + .dbyt 0bfebh + .dbyt 0bfech + .dbyt 0bfedh + .dbyt 0bfeeh + .dbyt 0bfefh + .dbyt 0bff0h + .dbyt 0bff1h + .dbyt 0bff2h + .dbyt 0bff3h + .dbyt 0bff4h + .dbyt 0bff5h + .dbyt 0bff6h + .dbyt 0bff7h + .dbyt 0bff8h + .dbyt 0bff9h + .dbyt 0bffah + .dbyt 0bffbh + .dbyt 0bffch + .dbyt 0bffdh + .dbyt 0bffeh + .dbyt 0bfffh + .dbyt 0c000h + .dbyt 0c001h + .dbyt 0c002h + .dbyt 0c003h + .dbyt 0c004h + .dbyt 0c005h + .dbyt 0c006h + .dbyt 0c007h + .dbyt 0c008h + .dbyt 0c009h + .dbyt 0c00ah + .dbyt 0c00bh + .dbyt 0c00ch + .dbyt 0c00dh + .dbyt 0c00eh + .dbyt 0c00fh + .dbyt 0cfe1h + .dbyt 0cfe2h + .dbyt 0cfe3h + .dbyt 0cfe4h + .dbyt 0cfe5h + .dbyt 0cfe6h + .dbyt 0cfe7h + .dbyt 0cfe8h + .dbyt 0cfe9h + .dbyt 0cfeah + .dbyt 0cfebh + .dbyt 0cfech + .dbyt 0cfedh + .dbyt 0cfeeh + .dbyt 0cfefh + .dbyt 0cff0h + .dbyt 0cff1h + .dbyt 0cff2h + .dbyt 0cff3h + .dbyt 0cff4h + .dbyt 0cff5h + .dbyt 0cff6h + .dbyt 0cff7h + .dbyt 0cff8h + .dbyt 0cff9h + .dbyt 0cffah + .dbyt 0cffbh + .dbyt 0cffch + .dbyt 0cffdh + .dbyt 0cffeh + .dbyt 0cfffh + .dbyt 0d000h + .dbyt 0d001h + .dbyt 0d002h + .dbyt 0d003h + .dbyt 0d004h + .dbyt 0d005h + .dbyt 0d006h + .dbyt 0d007h + .dbyt 0d008h + .dbyt 0d009h + .dbyt 0d00ah + .dbyt 0d00bh + .dbyt 0d00ch + .dbyt 0d00dh + .dbyt 0d00eh + .dbyt 0d00fh + .dbyt 0dfe1h + .dbyt 0dfe2h + .dbyt 0dfe3h + .dbyt 0dfe4h + .dbyt 0dfe5h + .dbyt 0dfe6h + .dbyt 0dfe7h + .dbyt 0dfe8h + .dbyt 0dfe9h + .dbyt 0dfeah + .dbyt 0dfebh + .dbyt 0dfech + .dbyt 0dfedh + .dbyt 0dfeeh + .dbyt 0dfefh + .dbyt 0dff0h + .dbyt 0dff1h + .dbyt 0dff2h + .dbyt 0dff3h + .dbyt 0dff4h + .dbyt 0dff5h + .dbyt 0dff6h + .dbyt 0dff7h + .dbyt 0dff8h + .dbyt 0dff9h + .dbyt 0dffah + .dbyt 0dffbh + .dbyt 0dffch + .dbyt 0dffdh + .dbyt 0dffeh + .dbyt 0dfffh + .dbyt 0e000h + .dbyt 0e001h + .dbyt 0e002h + .dbyt 0e003h + .dbyt 0e004h + .dbyt 0e005h + .dbyt 0e006h + .dbyt 0e007h + .dbyt 0e008h + .dbyt 0e009h + .dbyt 0e00ah + .dbyt 0e00bh + .dbyt 0e00ch + .dbyt 0e00dh + .dbyt 0e00eh + .dbyt 0e00fh + .dbyt 0efe1h + .dbyt 0efe2h + .dbyt 0efe3h + .dbyt 0efe4h + .dbyt 0efe5h + .dbyt 0efe6h + .dbyt 0efe7h + .dbyt 0efe8h + .dbyt 0efe9h + .dbyt 0efeah + .dbyt 0efebh + .dbyt 0efech + .dbyt 0efedh + .dbyt 0efeeh + .dbyt 0efefh + .dbyt 0eff0h + .dbyt 0eff1h + .dbyt 0eff2h + .dbyt 0eff3h + .dbyt 0eff4h + .dbyt 0eff5h + .dbyt 0eff6h + .dbyt 0eff7h + .dbyt 0eff8h + .dbyt 0eff9h + .dbyt 0effah + .dbyt 0effbh + .dbyt 0effch + .dbyt 0effdh + .dbyt 0effeh + .dbyt 0efffh + .dbyt 0f000h + .dbyt 0f001h + .dbyt 0f002h + .dbyt 0f003h + .dbyt 0f004h + .dbyt 0f005h + .dbyt 0f006h + .dbyt 0f007h + .dbyt 0f008h + .dbyt 0f009h + .dbyt 0f00ah + .dbyt 0f00bh + .dbyt 0f00ch + .dbyt 0f00dh + .dbyt 0f00eh + .dbyt 0f00fh + .dbyt 0ffe1h + .dbyt 0ffe2h + .dbyt 0ffe3h + .dbyt 0ffe4h + .dbyt 0ffe5h + .dbyt 0ffe6h + .dbyt 0ffe7h + .dbyt 0ffe8h + .dbyt 0ffe9h + .dbyt 0ffeah + .dbyt 0ffebh + .dbyt 0ffech + .dbyt 0ffedh + .dbyt 0ffeeh + .dbyt 0ffefh + .dbyt 0fff0h + .dbyt 0fff1h + .dbyt 0fff2h + .dbyt 0fff3h + .dbyt 0fff4h + .dbyt 0fff5h + .dbyt 0fff6h + .dbyt 0fff7h + .dbyt 0fff8h + .dbyt 0fff9h + .dbyt 0fffah + .dbyt 0fffbh + .dbyt 0fffch + .dbyt 0fffdh + .dbyt 0fffeh + .dbyt 0ffffh - ; binary values, variable length - .dbyt %0 - .dbyt %01 - .dbyt %010 - .dbyt %011 - .dbyt %0100 - .dbyt %0101 - .dbyt %0110 - .dbyt %0111 - .dbyt %01000 - .dbyt %01001 - .dbyt %01010 - .dbyt %01011 - .dbyt %01100 - .dbyt %01101 - .dbyt %01110 - .dbyt %01111 - .dbyt %010000 - .dbyt %010001 - .dbyt %010010 - .dbyt %010011 - .dbyt %01110000 - .dbyt %01110001 - .dbyt %01110010 - .dbyt %01110011 - .dbyt %01110100 - .dbyt %01110101 - .dbyt %01110110 - .dbyt %01110111 - .dbyt %01111000 - .dbyt %01111001 - .dbyt %01111010 - .dbyt %01111011 - .dbyt %01111100 - .dbyt %01111101 - .dbyt %01111110 - .dbyt %01111111 - .dbyt %010000000 - .dbyt %010000001 - .dbyt %010000010 - .dbyt %010000011 - .dbyt %010000100 - .dbyt %010000101 - .dbyt %010000110 - .dbyt %011110000 - .dbyt %011110001 - .dbyt %011110010 - .dbyt %011110011 - .dbyt %011110100 - .dbyt %011110101 - .dbyt %011110110 - .dbyt %011110111 - .dbyt %011111000 - .dbyt %011111001 - .dbyt %011111010 - .dbyt %011111011 - .dbyt %011111100 - .dbyt %011111101 - .dbyt %011111110 - .dbyt %011111111 - .dbyt %100000000 - .dbyt %100000001 - .dbyt %100000010 - .dbyt %100000011 - .dbyt %111111010010 - .dbyt %111111010011 - .dbyt %111111010100 - .dbyt %111111010101 - .dbyt %111111010110 - .dbyt %111111010111 - .dbyt %111111011000 - .dbyt %111111011001 - .dbyt %111111011010 - .dbyt %111111011011 - .dbyt %111111011100 - .dbyt %111111011101 - .dbyt %111111011110 - .dbyt %111111011111 - .dbyt %111111100000 - .dbyt %111111100001 - .dbyt %111111100010 - .dbyt %111111100011 - .dbyt %111111100100 - .dbyt %111111100101 - .dbyt %111111100110 - .dbyt %111111100111 - .dbyt %111111101000 - .dbyt %111111101001 - .dbyt %111111101010 - .dbyt %111111101011 - .dbyt %111111101100 - .dbyt %111111101101 - .dbyt %111111101110 - .dbyt %111111101111 - .dbyt %111111110000 - .dbyt %111111110001 - .dbyt %111111110010 - .dbyt %111111110011 - .dbyt %111111110100 - .dbyt %111111110101 - .dbyt %111111110110 - .dbyt %111111110111 - .dbyt %111111111000 - .dbyt %111111111001 - .dbyt %111111111010 - .dbyt %111111111011 - .dbyt %111111111100 - .dbyt %111111111101 - .dbyt %111111111110 - .dbyt %111111111111 - .dbyt %1000000000000 - .dbyt %1000000000001 - .dbyt %1000000000010 - .dbyt %1000000000011 - .dbyt %1000000000100 - .dbyt %1000000000101 - .dbyt %1000000000110 - .dbyt %1000000000111 - .dbyt %1000000001000 - .dbyt %111111111110000 - .dbyt %111111111110001 - .dbyt %111111111110010 - .dbyt %111111111110011 - .dbyt %111111111110100 - .dbyt %111111111110101 - .dbyt %111111111110110 - .dbyt %111111111110111 - .dbyt %111111111111000 - .dbyt %111111111111001 - .dbyt %111111111111010 - .dbyt %111111111111011 - .dbyt %111111111111100 - .dbyt %111111111111101 - .dbyt %111111111111110 - .dbyt %111111111111111 - .dbyt %1000000000000000 - .dbyt %1000000000000001 - .dbyt %1000000000000010 - .dbyt %1000000000000011 - .dbyt %1000000000000100 - .dbyt %1000000000000101 - .dbyt %1000000000000110 - .dbyt %1000000000000111 - .dbyt %1000000000001000 - .dbyt %1000000000001001 - .dbyt %1000000000001010 - .dbyt %1000000000001011 - .dbyt %1001111111100001 - .dbyt %1001111111100010 - .dbyt %1001111111100011 - .dbyt %1001111111100100 - .dbyt %1001111111100101 - .dbyt %1001111111100110 - .dbyt %1001111111100111 - .dbyt %1001111111101000 - .dbyt %1001111111101001 - .dbyt %1001111111101010 - .dbyt %1001111111101011 - .dbyt %1001111111101100 - .dbyt %1001111111101101 - .dbyt %1001111111101110 - .dbyt %1001111111101111 - .dbyt %1001111111110000 - .dbyt %1001111111110001 - .dbyt %1001111111110010 - .dbyt %1001111111110011 - .dbyt %1001111111110100 - .dbyt %1001111111110101 - .dbyt %1001111111110110 - .dbyt %1001111111110111 - .dbyt %1001111111111000 - .dbyt %1001111111111001 - .dbyt %1001111111111010 - .dbyt %1001111111111011 - .dbyt %1001111111111100 - .dbyt %1001111111111101 - .dbyt %1001111111111110 - .dbyt %1001111111111111 - .dbyt %1010000000000000 - .dbyt %1010000000000001 - .dbyt %1010000000000010 - .dbyt %1010000000000011 - .dbyt %1010000000000100 - .dbyt %1010000000000101 - .dbyt %1010000000000110 - .dbyt %1010000000000111 - .dbyt %1010000000001000 - .dbyt %1010000000001001 - .dbyt %1010000000001010 - .dbyt %1010000000001011 - .dbyt %1010000000001100 - .dbyt %1010000000001101 - .dbyt %1010000000001110 - .dbyt %1010000000001111 - .dbyt %1010111111100001 - .dbyt %1010111111100010 - .dbyt %1010111111100011 - .dbyt %1010111111100100 - .dbyt %1010111111100101 - .dbyt %1010111111100110 - .dbyt %1010111111100111 - .dbyt %1010111111101000 - .dbyt %1010111111101001 - .dbyt %1010111111101010 - .dbyt %1010111111101011 - .dbyt %1010111111101100 - .dbyt %1010111111101101 - .dbyt %1010111111101110 - .dbyt %1010111111101111 - .dbyt %1010111111110000 - .dbyt %1010111111110001 - .dbyt %1010111111110010 - .dbyt %1010111111110011 - .dbyt %1010111111110100 - .dbyt %1010111111110101 - .dbyt %1010111111110110 - .dbyt %1010111111110111 - .dbyt %1010111111111000 - .dbyt %1010111111111001 - .dbyt %1010111111111010 - .dbyt %1010111111111011 - .dbyt %1010111111111100 - .dbyt %1010111111111101 - .dbyt %1010111111111110 - .dbyt %1010111111111111 - .dbyt %1011000000000000 - .dbyt %1011000000000001 - .dbyt %1011000000000010 - .dbyt %1011000000000011 - .dbyt %1011000000000100 - .dbyt %1011000000000101 - .dbyt %1011000000000110 - .dbyt %1011000000000111 - .dbyt %1011000000001000 - .dbyt %1011000000001001 - .dbyt %1011000000001010 - .dbyt %1011000000001011 - .dbyt %1011000000001100 - .dbyt %1011000000001101 - .dbyt %1011000000001110 - .dbyt %1011000000001111 - .dbyt %1011111111100001 - .dbyt %1011111111100010 - .dbyt %1011111111100011 - .dbyt %1011111111100100 - .dbyt %1011111111100101 - .dbyt %1011111111100110 - .dbyt %1011111111100111 - .dbyt %1011111111101000 - .dbyt %1011111111101001 - .dbyt %1011111111101010 - .dbyt %1011111111101011 - .dbyt %1011111111101100 - .dbyt %1011111111101101 - .dbyt %1011111111101110 - .dbyt %1011111111101111 - .dbyt %1011111111110000 - .dbyt %1011111111110001 - .dbyt %1011111111110010 - .dbyt %1011111111110011 - .dbyt %1011111111110100 - .dbyt %1011111111110101 - .dbyt %1011111111110110 - .dbyt %1011111111110111 - .dbyt %1011111111111000 - .dbyt %1011111111111001 - .dbyt %1011111111111010 - .dbyt %1011111111111011 - .dbyt %1011111111111100 - .dbyt %1011111111111101 - .dbyt %1011111111111110 - .dbyt %1011111111111111 - .dbyt %1100000000000000 - .dbyt %1100000000000001 - .dbyt %1100000000000010 - .dbyt %1100000000000011 - .dbyt %1100000000000100 - .dbyt %1100000000000101 - .dbyt %1100000000000110 - .dbyt %1100000000000111 - .dbyt %1100000000001000 - .dbyt %1100000000001001 - .dbyt %1100000000001010 - .dbyt %1100000000001011 - .dbyt %1100000000001100 - .dbyt %1100000000001101 - .dbyt %1100000000001110 - .dbyt %1100000000001111 - .dbyt %1100111111100001 - .dbyt %1100111111100010 - .dbyt %1100111111100011 - .dbyt %1100111111100100 - .dbyt %1100111111100101 - .dbyt %1100111111100110 - .dbyt %1100111111100111 - .dbyt %1100111111101000 - .dbyt %1100111111101001 - .dbyt %1100111111101010 - .dbyt %1100111111101011 - .dbyt %1100111111101100 - .dbyt %1100111111101101 - .dbyt %1100111111101110 - .dbyt %1100111111101111 - .dbyt %1100111111110000 - .dbyt %1100111111110001 - .dbyt %1100111111110010 - .dbyt %1100111111110011 - .dbyt %1100111111110100 - .dbyt %1100111111110101 - .dbyt %1100111111110110 - .dbyt %1100111111110111 - .dbyt %1100111111111000 - .dbyt %1100111111111001 - .dbyt %1100111111111010 - .dbyt %1100111111111011 - .dbyt %1100111111111100 - .dbyt %1100111111111101 - .dbyt %1100111111111110 - .dbyt %1100111111111111 - .dbyt %1101000000000000 - .dbyt %1101000000000001 - .dbyt %1101000000000010 - .dbyt %1101000000000011 - .dbyt %1101000000000100 - .dbyt %1101000000000101 - .dbyt %1101000000000110 - .dbyt %1101000000000111 - .dbyt %1101000000001000 - .dbyt %1101000000001001 - .dbyt %1101000000001010 - .dbyt %1101000000001011 - .dbyt %1101000000001100 - .dbyt %1101000000001101 - .dbyt %1101000000001110 - .dbyt %1101000000001111 - .dbyt %1101111111100001 - .dbyt %1101111111100010 - .dbyt %1101111111100011 - .dbyt %1101111111100100 - .dbyt %1101111111100101 - .dbyt %1101111111100110 - .dbyt %1101111111100111 - .dbyt %1101111111101000 - .dbyt %1101111111101001 - .dbyt %1101111111101010 - .dbyt %1101111111101011 - .dbyt %1101111111101100 - .dbyt %1101111111101101 - .dbyt %1101111111101110 - .dbyt %1101111111101111 - .dbyt %1101111111110000 - .dbyt %1101111111110001 - .dbyt %1101111111110010 - .dbyt %1101111111110011 - .dbyt %1101111111110100 - .dbyt %1101111111110101 - .dbyt %1101111111110110 - .dbyt %1101111111110111 - .dbyt %1101111111111000 - .dbyt %1101111111111001 - .dbyt %1101111111111010 - .dbyt %1101111111111011 - .dbyt %1101111111111100 - .dbyt %1101111111111101 - .dbyt %1101111111111110 - .dbyt %1101111111111111 - .dbyt %1110000000000000 - .dbyt %1110000000000001 - .dbyt %1110000000000010 - .dbyt %1110000000000011 - .dbyt %1110000000000100 - .dbyt %1110000000000101 - .dbyt %1110000000000110 - .dbyt %1110000000000111 - .dbyt %1110000000001000 - .dbyt %1110000000001001 - .dbyt %1110000000001010 - .dbyt %1110000000001011 - .dbyt %1110000000001100 - .dbyt %1110000000001101 - .dbyt %1110000000001110 - .dbyt %1110000000001111 - .dbyt %1110111111100001 - .dbyt %1110111111100010 - .dbyt %1110111111100011 - .dbyt %1110111111100100 - .dbyt %1110111111100101 - .dbyt %1110111111100110 - .dbyt %1110111111100111 - .dbyt %1110111111101000 - .dbyt %1110111111101001 - .dbyt %1110111111101010 - .dbyt %1110111111101011 - .dbyt %1110111111101100 - .dbyt %1110111111101101 - .dbyt %1110111111101110 - .dbyt %1110111111101111 - .dbyt %1110111111110000 - .dbyt %1110111111110001 - .dbyt %1110111111110010 - .dbyt %1110111111110011 - .dbyt %1110111111110100 - .dbyt %1110111111110101 - .dbyt %1110111111110110 - .dbyt %1110111111110111 - .dbyt %1110111111111000 - .dbyt %1110111111111001 - .dbyt %1110111111111010 - .dbyt %1110111111111011 - .dbyt %1110111111111100 - .dbyt %1110111111111101 - .dbyt %1110111111111110 - .dbyt %1110111111111111 - .dbyt %1111000000000000 - .dbyt %1111000000000001 - .dbyt %1111000000000010 - .dbyt %1111000000000011 - .dbyt %1111000000000100 - .dbyt %1111000000000101 - .dbyt %1111000000000110 - .dbyt %1111000000000111 - .dbyt %1111000000001000 - .dbyt %1111000000001001 - .dbyt %1111000000001010 - .dbyt %1111000000001011 - .dbyt %1111000000001100 - .dbyt %1111000000001101 - .dbyt %1111000000001110 - .dbyt %1111000000001111 - .dbyt %1111111111100001 - .dbyt %1111111111100010 - .dbyt %1111111111100011 - .dbyt %1111111111100100 - .dbyt %1111111111100101 - .dbyt %1111111111100110 - .dbyt %1111111111100111 - .dbyt %1111111111101000 - .dbyt %1111111111101001 - .dbyt %1111111111101010 - .dbyt %1111111111101011 - .dbyt %1111111111101100 - .dbyt %1111111111101101 - .dbyt %1111111111101110 - .dbyt %1111111111101111 - .dbyt %1111111111110000 - .dbyt %1111111111110001 - .dbyt %1111111111110010 - .dbyt %1111111111110011 - .dbyt %1111111111110100 - .dbyt %1111111111110101 - .dbyt %1111111111110110 - .dbyt %1111111111110111 - .dbyt %1111111111111000 - .dbyt %1111111111111001 - .dbyt %1111111111111010 - .dbyt %1111111111111011 - .dbyt %1111111111111100 - .dbyt %1111111111111101 - .dbyt %1111111111111110 - .dbyt %1111111111111111 + ; binary values, variable length + .dbyt %0 + .dbyt %01 + .dbyt %010 + .dbyt %011 + .dbyt %0100 + .dbyt %0101 + .dbyt %0110 + .dbyt %0111 + .dbyt %01000 + .dbyt %01001 + .dbyt %01010 + .dbyt %01011 + .dbyt %01100 + .dbyt %01101 + .dbyt %01110 + .dbyt %01111 + .dbyt %010000 + .dbyt %010001 + .dbyt %010010 + .dbyt %010011 + .dbyt %01110000 + .dbyt %01110001 + .dbyt %01110010 + .dbyt %01110011 + .dbyt %01110100 + .dbyt %01110101 + .dbyt %01110110 + .dbyt %01110111 + .dbyt %01111000 + .dbyt %01111001 + .dbyt %01111010 + .dbyt %01111011 + .dbyt %01111100 + .dbyt %01111101 + .dbyt %01111110 + .dbyt %01111111 + .dbyt %010000000 + .dbyt %010000001 + .dbyt %010000010 + .dbyt %010000011 + .dbyt %010000100 + .dbyt %010000101 + .dbyt %010000110 + .dbyt %011110000 + .dbyt %011110001 + .dbyt %011110010 + .dbyt %011110011 + .dbyt %011110100 + .dbyt %011110101 + .dbyt %011110110 + .dbyt %011110111 + .dbyt %011111000 + .dbyt %011111001 + .dbyt %011111010 + .dbyt %011111011 + .dbyt %011111100 + .dbyt %011111101 + .dbyt %011111110 + .dbyt %011111111 + .dbyt %100000000 + .dbyt %100000001 + .dbyt %100000010 + .dbyt %100000011 + .dbyt %111111010010 + .dbyt %111111010011 + .dbyt %111111010100 + .dbyt %111111010101 + .dbyt %111111010110 + .dbyt %111111010111 + .dbyt %111111011000 + .dbyt %111111011001 + .dbyt %111111011010 + .dbyt %111111011011 + .dbyt %111111011100 + .dbyt %111111011101 + .dbyt %111111011110 + .dbyt %111111011111 + .dbyt %111111100000 + .dbyt %111111100001 + .dbyt %111111100010 + .dbyt %111111100011 + .dbyt %111111100100 + .dbyt %111111100101 + .dbyt %111111100110 + .dbyt %111111100111 + .dbyt %111111101000 + .dbyt %111111101001 + .dbyt %111111101010 + .dbyt %111111101011 + .dbyt %111111101100 + .dbyt %111111101101 + .dbyt %111111101110 + .dbyt %111111101111 + .dbyt %111111110000 + .dbyt %111111110001 + .dbyt %111111110010 + .dbyt %111111110011 + .dbyt %111111110100 + .dbyt %111111110101 + .dbyt %111111110110 + .dbyt %111111110111 + .dbyt %111111111000 + .dbyt %111111111001 + .dbyt %111111111010 + .dbyt %111111111011 + .dbyt %111111111100 + .dbyt %111111111101 + .dbyt %111111111110 + .dbyt %111111111111 + .dbyt %1000000000000 + .dbyt %1000000000001 + .dbyt %1000000000010 + .dbyt %1000000000011 + .dbyt %1000000000100 + .dbyt %1000000000101 + .dbyt %1000000000110 + .dbyt %1000000000111 + .dbyt %1000000001000 + .dbyt %111111111110000 + .dbyt %111111111110001 + .dbyt %111111111110010 + .dbyt %111111111110011 + .dbyt %111111111110100 + .dbyt %111111111110101 + .dbyt %111111111110110 + .dbyt %111111111110111 + .dbyt %111111111111000 + .dbyt %111111111111001 + .dbyt %111111111111010 + .dbyt %111111111111011 + .dbyt %111111111111100 + .dbyt %111111111111101 + .dbyt %111111111111110 + .dbyt %111111111111111 + .dbyt %1000000000000000 + .dbyt %1000000000000001 + .dbyt %1000000000000010 + .dbyt %1000000000000011 + .dbyt %1000000000000100 + .dbyt %1000000000000101 + .dbyt %1000000000000110 + .dbyt %1000000000000111 + .dbyt %1000000000001000 + .dbyt %1000000000001001 + .dbyt %1000000000001010 + .dbyt %1000000000001011 + .dbyt %1001111111100001 + .dbyt %1001111111100010 + .dbyt %1001111111100011 + .dbyt %1001111111100100 + .dbyt %1001111111100101 + .dbyt %1001111111100110 + .dbyt %1001111111100111 + .dbyt %1001111111101000 + .dbyt %1001111111101001 + .dbyt %1001111111101010 + .dbyt %1001111111101011 + .dbyt %1001111111101100 + .dbyt %1001111111101101 + .dbyt %1001111111101110 + .dbyt %1001111111101111 + .dbyt %1001111111110000 + .dbyt %1001111111110001 + .dbyt %1001111111110010 + .dbyt %1001111111110011 + .dbyt %1001111111110100 + .dbyt %1001111111110101 + .dbyt %1001111111110110 + .dbyt %1001111111110111 + .dbyt %1001111111111000 + .dbyt %1001111111111001 + .dbyt %1001111111111010 + .dbyt %1001111111111011 + .dbyt %1001111111111100 + .dbyt %1001111111111101 + .dbyt %1001111111111110 + .dbyt %1001111111111111 + .dbyt %1010000000000000 + .dbyt %1010000000000001 + .dbyt %1010000000000010 + .dbyt %1010000000000011 + .dbyt %1010000000000100 + .dbyt %1010000000000101 + .dbyt %1010000000000110 + .dbyt %1010000000000111 + .dbyt %1010000000001000 + .dbyt %1010000000001001 + .dbyt %1010000000001010 + .dbyt %1010000000001011 + .dbyt %1010000000001100 + .dbyt %1010000000001101 + .dbyt %1010000000001110 + .dbyt %1010000000001111 + .dbyt %1010111111100001 + .dbyt %1010111111100010 + .dbyt %1010111111100011 + .dbyt %1010111111100100 + .dbyt %1010111111100101 + .dbyt %1010111111100110 + .dbyt %1010111111100111 + .dbyt %1010111111101000 + .dbyt %1010111111101001 + .dbyt %1010111111101010 + .dbyt %1010111111101011 + .dbyt %1010111111101100 + .dbyt %1010111111101101 + .dbyt %1010111111101110 + .dbyt %1010111111101111 + .dbyt %1010111111110000 + .dbyt %1010111111110001 + .dbyt %1010111111110010 + .dbyt %1010111111110011 + .dbyt %1010111111110100 + .dbyt %1010111111110101 + .dbyt %1010111111110110 + .dbyt %1010111111110111 + .dbyt %1010111111111000 + .dbyt %1010111111111001 + .dbyt %1010111111111010 + .dbyt %1010111111111011 + .dbyt %1010111111111100 + .dbyt %1010111111111101 + .dbyt %1010111111111110 + .dbyt %1010111111111111 + .dbyt %1011000000000000 + .dbyt %1011000000000001 + .dbyt %1011000000000010 + .dbyt %1011000000000011 + .dbyt %1011000000000100 + .dbyt %1011000000000101 + .dbyt %1011000000000110 + .dbyt %1011000000000111 + .dbyt %1011000000001000 + .dbyt %1011000000001001 + .dbyt %1011000000001010 + .dbyt %1011000000001011 + .dbyt %1011000000001100 + .dbyt %1011000000001101 + .dbyt %1011000000001110 + .dbyt %1011000000001111 + .dbyt %1011111111100001 + .dbyt %1011111111100010 + .dbyt %1011111111100011 + .dbyt %1011111111100100 + .dbyt %1011111111100101 + .dbyt %1011111111100110 + .dbyt %1011111111100111 + .dbyt %1011111111101000 + .dbyt %1011111111101001 + .dbyt %1011111111101010 + .dbyt %1011111111101011 + .dbyt %1011111111101100 + .dbyt %1011111111101101 + .dbyt %1011111111101110 + .dbyt %1011111111101111 + .dbyt %1011111111110000 + .dbyt %1011111111110001 + .dbyt %1011111111110010 + .dbyt %1011111111110011 + .dbyt %1011111111110100 + .dbyt %1011111111110101 + .dbyt %1011111111110110 + .dbyt %1011111111110111 + .dbyt %1011111111111000 + .dbyt %1011111111111001 + .dbyt %1011111111111010 + .dbyt %1011111111111011 + .dbyt %1011111111111100 + .dbyt %1011111111111101 + .dbyt %1011111111111110 + .dbyt %1011111111111111 + .dbyt %1100000000000000 + .dbyt %1100000000000001 + .dbyt %1100000000000010 + .dbyt %1100000000000011 + .dbyt %1100000000000100 + .dbyt %1100000000000101 + .dbyt %1100000000000110 + .dbyt %1100000000000111 + .dbyt %1100000000001000 + .dbyt %1100000000001001 + .dbyt %1100000000001010 + .dbyt %1100000000001011 + .dbyt %1100000000001100 + .dbyt %1100000000001101 + .dbyt %1100000000001110 + .dbyt %1100000000001111 + .dbyt %1100111111100001 + .dbyt %1100111111100010 + .dbyt %1100111111100011 + .dbyt %1100111111100100 + .dbyt %1100111111100101 + .dbyt %1100111111100110 + .dbyt %1100111111100111 + .dbyt %1100111111101000 + .dbyt %1100111111101001 + .dbyt %1100111111101010 + .dbyt %1100111111101011 + .dbyt %1100111111101100 + .dbyt %1100111111101101 + .dbyt %1100111111101110 + .dbyt %1100111111101111 + .dbyt %1100111111110000 + .dbyt %1100111111110001 + .dbyt %1100111111110010 + .dbyt %1100111111110011 + .dbyt %1100111111110100 + .dbyt %1100111111110101 + .dbyt %1100111111110110 + .dbyt %1100111111110111 + .dbyt %1100111111111000 + .dbyt %1100111111111001 + .dbyt %1100111111111010 + .dbyt %1100111111111011 + .dbyt %1100111111111100 + .dbyt %1100111111111101 + .dbyt %1100111111111110 + .dbyt %1100111111111111 + .dbyt %1101000000000000 + .dbyt %1101000000000001 + .dbyt %1101000000000010 + .dbyt %1101000000000011 + .dbyt %1101000000000100 + .dbyt %1101000000000101 + .dbyt %1101000000000110 + .dbyt %1101000000000111 + .dbyt %1101000000001000 + .dbyt %1101000000001001 + .dbyt %1101000000001010 + .dbyt %1101000000001011 + .dbyt %1101000000001100 + .dbyt %1101000000001101 + .dbyt %1101000000001110 + .dbyt %1101000000001111 + .dbyt %1101111111100001 + .dbyt %1101111111100010 + .dbyt %1101111111100011 + .dbyt %1101111111100100 + .dbyt %1101111111100101 + .dbyt %1101111111100110 + .dbyt %1101111111100111 + .dbyt %1101111111101000 + .dbyt %1101111111101001 + .dbyt %1101111111101010 + .dbyt %1101111111101011 + .dbyt %1101111111101100 + .dbyt %1101111111101101 + .dbyt %1101111111101110 + .dbyt %1101111111101111 + .dbyt %1101111111110000 + .dbyt %1101111111110001 + .dbyt %1101111111110010 + .dbyt %1101111111110011 + .dbyt %1101111111110100 + .dbyt %1101111111110101 + .dbyt %1101111111110110 + .dbyt %1101111111110111 + .dbyt %1101111111111000 + .dbyt %1101111111111001 + .dbyt %1101111111111010 + .dbyt %1101111111111011 + .dbyt %1101111111111100 + .dbyt %1101111111111101 + .dbyt %1101111111111110 + .dbyt %1101111111111111 + .dbyt %1110000000000000 + .dbyt %1110000000000001 + .dbyt %1110000000000010 + .dbyt %1110000000000011 + .dbyt %1110000000000100 + .dbyt %1110000000000101 + .dbyt %1110000000000110 + .dbyt %1110000000000111 + .dbyt %1110000000001000 + .dbyt %1110000000001001 + .dbyt %1110000000001010 + .dbyt %1110000000001011 + .dbyt %1110000000001100 + .dbyt %1110000000001101 + .dbyt %1110000000001110 + .dbyt %1110000000001111 + .dbyt %1110111111100001 + .dbyt %1110111111100010 + .dbyt %1110111111100011 + .dbyt %1110111111100100 + .dbyt %1110111111100101 + .dbyt %1110111111100110 + .dbyt %1110111111100111 + .dbyt %1110111111101000 + .dbyt %1110111111101001 + .dbyt %1110111111101010 + .dbyt %1110111111101011 + .dbyt %1110111111101100 + .dbyt %1110111111101101 + .dbyt %1110111111101110 + .dbyt %1110111111101111 + .dbyt %1110111111110000 + .dbyt %1110111111110001 + .dbyt %1110111111110010 + .dbyt %1110111111110011 + .dbyt %1110111111110100 + .dbyt %1110111111110101 + .dbyt %1110111111110110 + .dbyt %1110111111110111 + .dbyt %1110111111111000 + .dbyt %1110111111111001 + .dbyt %1110111111111010 + .dbyt %1110111111111011 + .dbyt %1110111111111100 + .dbyt %1110111111111101 + .dbyt %1110111111111110 + .dbyt %1110111111111111 + .dbyt %1111000000000000 + .dbyt %1111000000000001 + .dbyt %1111000000000010 + .dbyt %1111000000000011 + .dbyt %1111000000000100 + .dbyt %1111000000000101 + .dbyt %1111000000000110 + .dbyt %1111000000000111 + .dbyt %1111000000001000 + .dbyt %1111000000001001 + .dbyt %1111000000001010 + .dbyt %1111000000001011 + .dbyt %1111000000001100 + .dbyt %1111000000001101 + .dbyt %1111000000001110 + .dbyt %1111000000001111 + .dbyt %1111111111100001 + .dbyt %1111111111100010 + .dbyt %1111111111100011 + .dbyt %1111111111100100 + .dbyt %1111111111100101 + .dbyt %1111111111100110 + .dbyt %1111111111100111 + .dbyt %1111111111101000 + .dbyt %1111111111101001 + .dbyt %1111111111101010 + .dbyt %1111111111101011 + .dbyt %1111111111101100 + .dbyt %1111111111101101 + .dbyt %1111111111101110 + .dbyt %1111111111101111 + .dbyt %1111111111110000 + .dbyt %1111111111110001 + .dbyt %1111111111110010 + .dbyt %1111111111110011 + .dbyt %1111111111110100 + .dbyt %1111111111110101 + .dbyt %1111111111110110 + .dbyt %1111111111110111 + .dbyt %1111111111111000 + .dbyt %1111111111111001 + .dbyt %1111111111111010 + .dbyt %1111111111111011 + .dbyt %1111111111111100 + .dbyt %1111111111111101 + .dbyt %1111111111111110 + .dbyt %1111111111111111 - ; binary values, full length - .dbyt %0000000000000000 - .dbyt %0000000000000001 - .dbyt %0000000000000010 - .dbyt %0000000000000011 - .dbyt %0000000000000100 - .dbyt %0000000000000101 - .dbyt %0000000000000110 - .dbyt %0000000000000111 - .dbyt %0000000000001000 - .dbyt %0000000000001001 - .dbyt %0000000000001010 - .dbyt %0000000000001011 - .dbyt %0000000000001100 - .dbyt %0000000000001101 - .dbyt %0000000000001110 - .dbyt %0000000000001111 - .dbyt %0000000000010000 - .dbyt %0000000000010001 - .dbyt %0000000000010010 - .dbyt %0000000000010011 - .dbyt %0000000001110000 - .dbyt %0000000001110001 - .dbyt %0000000001110010 - .dbyt %0000000001110011 - .dbyt %0000000001110100 - .dbyt %0000000001110101 - .dbyt %0000000001110110 - .dbyt %0000000001110111 - .dbyt %0000000001111000 - .dbyt %0000000001111001 - .dbyt %0000000001111010 - .dbyt %0000000001111011 - .dbyt %0000000001111100 - .dbyt %0000000001111101 - .dbyt %0000000001111110 - .dbyt %0000000001111111 - .dbyt %0000000010000000 - .dbyt %0000000010000001 - .dbyt %0000000010000010 - .dbyt %0000000010000011 - .dbyt %0000000010000100 - .dbyt %0000000010000101 - .dbyt %0000000010000110 - .dbyt %0000000011110000 - .dbyt %0000000011110001 - .dbyt %0000000011110010 - .dbyt %0000000011110011 - .dbyt %0000000011110100 - .dbyt %0000000011110101 - .dbyt %0000000011110110 - .dbyt %0000000011110111 - .dbyt %0000000011111000 - .dbyt %0000000011111001 - .dbyt %0000000011111010 - .dbyt %0000000011111011 - .dbyt %0000000011111100 - .dbyt %0000000011111101 - .dbyt %0000000011111110 - .dbyt %0000000011111111 - .dbyt %0000000100000000 - .dbyt %0000000100000001 - .dbyt %0000000100000010 - .dbyt %0000000100000011 - .dbyt %0000111111010010 - .dbyt %0000111111010011 - .dbyt %0000111111010100 - .dbyt %0000111111010101 - .dbyt %0000111111010110 - .dbyt %0000111111010111 - .dbyt %0000111111011000 - .dbyt %0000111111011001 - .dbyt %0000111111011010 - .dbyt %0000111111011011 - .dbyt %0000111111011100 - .dbyt %0000111111011101 - .dbyt %0000111111011110 - .dbyt %0000111111011111 - .dbyt %0000111111100000 - .dbyt %0000111111100001 - .dbyt %0000111111100010 - .dbyt %0000111111100011 - .dbyt %0000111111100100 - .dbyt %0000111111100101 - .dbyt %0000111111100110 - .dbyt %0000111111100111 - .dbyt %0000111111101000 - .dbyt %0000111111101001 - .dbyt %0000111111101010 - .dbyt %0000111111101011 - .dbyt %0000111111101100 - .dbyt %0000111111101101 - .dbyt %0000111111101110 - .dbyt %0000111111101111 - .dbyt %0000111111110000 - .dbyt %0000111111110001 - .dbyt %0000111111110010 - .dbyt %0000111111110011 - .dbyt %0000111111110100 - .dbyt %0000111111110101 - .dbyt %0000111111110110 - .dbyt %0000111111110111 - .dbyt %0000111111111000 - .dbyt %0000111111111001 - .dbyt %0000111111111010 - .dbyt %0000111111111011 - .dbyt %0000111111111100 - .dbyt %0000111111111101 - .dbyt %0000111111111110 - .dbyt %0000111111111111 - .dbyt %0001000000000000 - .dbyt %0001000000000001 - .dbyt %0001000000000010 - .dbyt %0001000000000011 - .dbyt %0001000000000100 - .dbyt %0001000000000101 - .dbyt %0001000000000110 - .dbyt %0001000000000111 - .dbyt %0001000000001000 - .dbyt %0111111111110000 - .dbyt %0111111111110001 - .dbyt %0111111111110010 - .dbyt %0111111111110011 - .dbyt %0111111111110100 - .dbyt %0111111111110101 - .dbyt %0111111111110110 - .dbyt %0111111111110111 - .dbyt %0111111111111000 - .dbyt %0111111111111001 - .dbyt %0111111111111010 - .dbyt %0111111111111011 - .dbyt %0111111111111100 - .dbyt %0111111111111101 - .dbyt %0111111111111110 - .dbyt %0111111111111111 - .dbyt %1000000000000000 - .dbyt %1000000000000001 - .dbyt %1000000000000010 - .dbyt %1000000000000011 - .dbyt %1000000000000100 - .dbyt %1000000000000101 - .dbyt %1000000000000110 - .dbyt %1000000000000111 - .dbyt %1000000000001000 - .dbyt %1000000000001001 - .dbyt %1000000000001010 - .dbyt %1000000000001011 - .dbyt %1001111111100001 - .dbyt %1001111111100010 - .dbyt %1001111111100011 - .dbyt %1001111111100100 - .dbyt %1001111111100101 - .dbyt %1001111111100110 - .dbyt %1001111111100111 - .dbyt %1001111111101000 - .dbyt %1001111111101001 - .dbyt %1001111111101010 - .dbyt %1001111111101011 - .dbyt %1001111111101100 - .dbyt %1001111111101101 - .dbyt %1001111111101110 - .dbyt %1001111111101111 - .dbyt %1001111111110000 - .dbyt %1001111111110001 - .dbyt %1001111111110010 - .dbyt %1001111111110011 - .dbyt %1001111111110100 - .dbyt %1001111111110101 - .dbyt %1001111111110110 - .dbyt %1001111111110111 - .dbyt %1001111111111000 - .dbyt %1001111111111001 - .dbyt %1001111111111010 - .dbyt %1001111111111011 - .dbyt %1001111111111100 - .dbyt %1001111111111101 - .dbyt %1001111111111110 - .dbyt %1001111111111111 - .dbyt %1010000000000000 - .dbyt %1010000000000001 - .dbyt %1010000000000010 - .dbyt %1010000000000011 - .dbyt %1010000000000100 - .dbyt %1010000000000101 - .dbyt %1010000000000110 - .dbyt %1010000000000111 - .dbyt %1010000000001000 - .dbyt %1010000000001001 - .dbyt %1010000000001010 - .dbyt %1010000000001011 - .dbyt %1010000000001100 - .dbyt %1010000000001101 - .dbyt %1010000000001110 - .dbyt %1010000000001111 - .dbyt %1010111111100001 - .dbyt %1010111111100010 - .dbyt %1010111111100011 - .dbyt %1010111111100100 - .dbyt %1010111111100101 - .dbyt %1010111111100110 - .dbyt %1010111111100111 - .dbyt %1010111111101000 - .dbyt %1010111111101001 - .dbyt %1010111111101010 - .dbyt %1010111111101011 - .dbyt %1010111111101100 - .dbyt %1010111111101101 - .dbyt %1010111111101110 - .dbyt %1010111111101111 - .dbyt %1010111111110000 - .dbyt %1010111111110001 - .dbyt %1010111111110010 - .dbyt %1010111111110011 - .dbyt %1010111111110100 - .dbyt %1010111111110101 - .dbyt %1010111111110110 - .dbyt %1010111111110111 - .dbyt %1010111111111000 - .dbyt %1010111111111001 - .dbyt %1010111111111010 - .dbyt %1010111111111011 - .dbyt %1010111111111100 - .dbyt %1010111111111101 - .dbyt %1010111111111110 - .dbyt %1010111111111111 - .dbyt %1011000000000000 - .dbyt %1011000000000001 - .dbyt %1011000000000010 - .dbyt %1011000000000011 - .dbyt %1011000000000100 - .dbyt %1011000000000101 - .dbyt %1011000000000110 - .dbyt %1011000000000111 - .dbyt %1011000000001000 - .dbyt %1011000000001001 - .dbyt %1011000000001010 - .dbyt %1011000000001011 - .dbyt %1011000000001100 - .dbyt %1011000000001101 - .dbyt %1011000000001110 - .dbyt %1011000000001111 - .dbyt %1011111111100001 - .dbyt %1011111111100010 - .dbyt %1011111111100011 - .dbyt %1011111111100100 - .dbyt %1011111111100101 - .dbyt %1011111111100110 - .dbyt %1011111111100111 - .dbyt %1011111111101000 - .dbyt %1011111111101001 - .dbyt %1011111111101010 - .dbyt %1011111111101011 - .dbyt %1011111111101100 - .dbyt %1011111111101101 - .dbyt %1011111111101110 - .dbyt %1011111111101111 - .dbyt %1011111111110000 - .dbyt %1011111111110001 - .dbyt %1011111111110010 - .dbyt %1011111111110011 - .dbyt %1011111111110100 - .dbyt %1011111111110101 - .dbyt %1011111111110110 - .dbyt %1011111111110111 - .dbyt %1011111111111000 - .dbyt %1011111111111001 - .dbyt %1011111111111010 - .dbyt %1011111111111011 - .dbyt %1011111111111100 - .dbyt %1011111111111101 - .dbyt %1011111111111110 - .dbyt %1011111111111111 - .dbyt %1100000000000000 - .dbyt %1100000000000001 - .dbyt %1100000000000010 - .dbyt %1100000000000011 - .dbyt %1100000000000100 - .dbyt %1100000000000101 - .dbyt %1100000000000110 - .dbyt %1100000000000111 - .dbyt %1100000000001000 - .dbyt %1100000000001001 - .dbyt %1100000000001010 - .dbyt %1100000000001011 - .dbyt %1100000000001100 - .dbyt %1100000000001101 - .dbyt %1100000000001110 - .dbyt %1100000000001111 - .dbyt %1100111111100001 - .dbyt %1100111111100010 - .dbyt %1100111111100011 - .dbyt %1100111111100100 - .dbyt %1100111111100101 - .dbyt %1100111111100110 - .dbyt %1100111111100111 - .dbyt %1100111111101000 - .dbyt %1100111111101001 - .dbyt %1100111111101010 - .dbyt %1100111111101011 - .dbyt %1100111111101100 - .dbyt %1100111111101101 - .dbyt %1100111111101110 - .dbyt %1100111111101111 - .dbyt %1100111111110000 - .dbyt %1100111111110001 - .dbyt %1100111111110010 - .dbyt %1100111111110011 - .dbyt %1100111111110100 - .dbyt %1100111111110101 - .dbyt %1100111111110110 - .dbyt %1100111111110111 - .dbyt %1100111111111000 - .dbyt %1100111111111001 - .dbyt %1100111111111010 - .dbyt %1100111111111011 - .dbyt %1100111111111100 - .dbyt %1100111111111101 - .dbyt %1100111111111110 - .dbyt %1100111111111111 - .dbyt %1101000000000000 - .dbyt %1101000000000001 - .dbyt %1101000000000010 - .dbyt %1101000000000011 - .dbyt %1101000000000100 - .dbyt %1101000000000101 - .dbyt %1101000000000110 - .dbyt %1101000000000111 - .dbyt %1101000000001000 - .dbyt %1101000000001001 - .dbyt %1101000000001010 - .dbyt %1101000000001011 - .dbyt %1101000000001100 - .dbyt %1101000000001101 - .dbyt %1101000000001110 - .dbyt %1101000000001111 - .dbyt %1101111111100001 - .dbyt %1101111111100010 - .dbyt %1101111111100011 - .dbyt %1101111111100100 - .dbyt %1101111111100101 - .dbyt %1101111111100110 - .dbyt %1101111111100111 - .dbyt %1101111111101000 - .dbyt %1101111111101001 - .dbyt %1101111111101010 - .dbyt %1101111111101011 - .dbyt %1101111111101100 - .dbyt %1101111111101101 - .dbyt %1101111111101110 - .dbyt %1101111111101111 - .dbyt %1101111111110000 - .dbyt %1101111111110001 - .dbyt %1101111111110010 - .dbyt %1101111111110011 - .dbyt %1101111111110100 - .dbyt %1101111111110101 - .dbyt %1101111111110110 - .dbyt %1101111111110111 - .dbyt %1101111111111000 - .dbyt %1101111111111001 - .dbyt %1101111111111010 - .dbyt %1101111111111011 - .dbyt %1101111111111100 - .dbyt %1101111111111101 - .dbyt %1101111111111110 - .dbyt %1101111111111111 - .dbyt %1110000000000000 - .dbyt %1110000000000001 - .dbyt %1110000000000010 - .dbyt %1110000000000011 - .dbyt %1110000000000100 - .dbyt %1110000000000101 - .dbyt %1110000000000110 - .dbyt %1110000000000111 - .dbyt %1110000000001000 - .dbyt %1110000000001001 - .dbyt %1110000000001010 - .dbyt %1110000000001011 - .dbyt %1110000000001100 - .dbyt %1110000000001101 - .dbyt %1110000000001110 - .dbyt %1110000000001111 - .dbyt %1110111111100001 - .dbyt %1110111111100010 - .dbyt %1110111111100011 - .dbyt %1110111111100100 - .dbyt %1110111111100101 - .dbyt %1110111111100110 - .dbyt %1110111111100111 - .dbyt %1110111111101000 - .dbyt %1110111111101001 - .dbyt %1110111111101010 - .dbyt %1110111111101011 - .dbyt %1110111111101100 - .dbyt %1110111111101101 - .dbyt %1110111111101110 - .dbyt %1110111111101111 - .dbyt %1110111111110000 - .dbyt %1110111111110001 - .dbyt %1110111111110010 - .dbyt %1110111111110011 - .dbyt %1110111111110100 - .dbyt %1110111111110101 - .dbyt %1110111111110110 - .dbyt %1110111111110111 - .dbyt %1110111111111000 - .dbyt %1110111111111001 - .dbyt %1110111111111010 - .dbyt %1110111111111011 - .dbyt %1110111111111100 - .dbyt %1110111111111101 - .dbyt %1110111111111110 - .dbyt %1110111111111111 - .dbyt %1111000000000000 - .dbyt %1111000000000001 - .dbyt %1111000000000010 - .dbyt %1111000000000011 - .dbyt %1111000000000100 - .dbyt %1111000000000101 - .dbyt %1111000000000110 - .dbyt %1111000000000111 - .dbyt %1111000000001000 - .dbyt %1111000000001001 - .dbyt %1111000000001010 - .dbyt %1111000000001011 - .dbyt %1111000000001100 - .dbyt %1111000000001101 - .dbyt %1111000000001110 - .dbyt %1111000000001111 - .dbyt %1111111111100001 - .dbyt %1111111111100010 - .dbyt %1111111111100011 - .dbyt %1111111111100100 - .dbyt %1111111111100101 - .dbyt %1111111111100110 - .dbyt %1111111111100111 - .dbyt %1111111111101000 - .dbyt %1111111111101001 - .dbyt %1111111111101010 - .dbyt %1111111111101011 - .dbyt %1111111111101100 - .dbyt %1111111111101101 - .dbyt %1111111111101110 - .dbyt %1111111111101111 - .dbyt %1111111111110000 - .dbyt %1111111111110001 - .dbyt %1111111111110010 - .dbyt %1111111111110011 - .dbyt %1111111111110100 - .dbyt %1111111111110101 - .dbyt %1111111111110110 - .dbyt %1111111111110111 - .dbyt %1111111111111000 - .dbyt %1111111111111001 - .dbyt %1111111111111010 - .dbyt %1111111111111011 - .dbyt %1111111111111100 - .dbyt %1111111111111101 - .dbyt %1111111111111110 - .dbyt %1111111111111111 + ; binary values, full length + .dbyt %0000000000000000 + .dbyt %0000000000000001 + .dbyt %0000000000000010 + .dbyt %0000000000000011 + .dbyt %0000000000000100 + .dbyt %0000000000000101 + .dbyt %0000000000000110 + .dbyt %0000000000000111 + .dbyt %0000000000001000 + .dbyt %0000000000001001 + .dbyt %0000000000001010 + .dbyt %0000000000001011 + .dbyt %0000000000001100 + .dbyt %0000000000001101 + .dbyt %0000000000001110 + .dbyt %0000000000001111 + .dbyt %0000000000010000 + .dbyt %0000000000010001 + .dbyt %0000000000010010 + .dbyt %0000000000010011 + .dbyt %0000000001110000 + .dbyt %0000000001110001 + .dbyt %0000000001110010 + .dbyt %0000000001110011 + .dbyt %0000000001110100 + .dbyt %0000000001110101 + .dbyt %0000000001110110 + .dbyt %0000000001110111 + .dbyt %0000000001111000 + .dbyt %0000000001111001 + .dbyt %0000000001111010 + .dbyt %0000000001111011 + .dbyt %0000000001111100 + .dbyt %0000000001111101 + .dbyt %0000000001111110 + .dbyt %0000000001111111 + .dbyt %0000000010000000 + .dbyt %0000000010000001 + .dbyt %0000000010000010 + .dbyt %0000000010000011 + .dbyt %0000000010000100 + .dbyt %0000000010000101 + .dbyt %0000000010000110 + .dbyt %0000000011110000 + .dbyt %0000000011110001 + .dbyt %0000000011110010 + .dbyt %0000000011110011 + .dbyt %0000000011110100 + .dbyt %0000000011110101 + .dbyt %0000000011110110 + .dbyt %0000000011110111 + .dbyt %0000000011111000 + .dbyt %0000000011111001 + .dbyt %0000000011111010 + .dbyt %0000000011111011 + .dbyt %0000000011111100 + .dbyt %0000000011111101 + .dbyt %0000000011111110 + .dbyt %0000000011111111 + .dbyt %0000000100000000 + .dbyt %0000000100000001 + .dbyt %0000000100000010 + .dbyt %0000000100000011 + .dbyt %0000111111010010 + .dbyt %0000111111010011 + .dbyt %0000111111010100 + .dbyt %0000111111010101 + .dbyt %0000111111010110 + .dbyt %0000111111010111 + .dbyt %0000111111011000 + .dbyt %0000111111011001 + .dbyt %0000111111011010 + .dbyt %0000111111011011 + .dbyt %0000111111011100 + .dbyt %0000111111011101 + .dbyt %0000111111011110 + .dbyt %0000111111011111 + .dbyt %0000111111100000 + .dbyt %0000111111100001 + .dbyt %0000111111100010 + .dbyt %0000111111100011 + .dbyt %0000111111100100 + .dbyt %0000111111100101 + .dbyt %0000111111100110 + .dbyt %0000111111100111 + .dbyt %0000111111101000 + .dbyt %0000111111101001 + .dbyt %0000111111101010 + .dbyt %0000111111101011 + .dbyt %0000111111101100 + .dbyt %0000111111101101 + .dbyt %0000111111101110 + .dbyt %0000111111101111 + .dbyt %0000111111110000 + .dbyt %0000111111110001 + .dbyt %0000111111110010 + .dbyt %0000111111110011 + .dbyt %0000111111110100 + .dbyt %0000111111110101 + .dbyt %0000111111110110 + .dbyt %0000111111110111 + .dbyt %0000111111111000 + .dbyt %0000111111111001 + .dbyt %0000111111111010 + .dbyt %0000111111111011 + .dbyt %0000111111111100 + .dbyt %0000111111111101 + .dbyt %0000111111111110 + .dbyt %0000111111111111 + .dbyt %0001000000000000 + .dbyt %0001000000000001 + .dbyt %0001000000000010 + .dbyt %0001000000000011 + .dbyt %0001000000000100 + .dbyt %0001000000000101 + .dbyt %0001000000000110 + .dbyt %0001000000000111 + .dbyt %0001000000001000 + .dbyt %0111111111110000 + .dbyt %0111111111110001 + .dbyt %0111111111110010 + .dbyt %0111111111110011 + .dbyt %0111111111110100 + .dbyt %0111111111110101 + .dbyt %0111111111110110 + .dbyt %0111111111110111 + .dbyt %0111111111111000 + .dbyt %0111111111111001 + .dbyt %0111111111111010 + .dbyt %0111111111111011 + .dbyt %0111111111111100 + .dbyt %0111111111111101 + .dbyt %0111111111111110 + .dbyt %0111111111111111 + .dbyt %1000000000000000 + .dbyt %1000000000000001 + .dbyt %1000000000000010 + .dbyt %1000000000000011 + .dbyt %1000000000000100 + .dbyt %1000000000000101 + .dbyt %1000000000000110 + .dbyt %1000000000000111 + .dbyt %1000000000001000 + .dbyt %1000000000001001 + .dbyt %1000000000001010 + .dbyt %1000000000001011 + .dbyt %1001111111100001 + .dbyt %1001111111100010 + .dbyt %1001111111100011 + .dbyt %1001111111100100 + .dbyt %1001111111100101 + .dbyt %1001111111100110 + .dbyt %1001111111100111 + .dbyt %1001111111101000 + .dbyt %1001111111101001 + .dbyt %1001111111101010 + .dbyt %1001111111101011 + .dbyt %1001111111101100 + .dbyt %1001111111101101 + .dbyt %1001111111101110 + .dbyt %1001111111101111 + .dbyt %1001111111110000 + .dbyt %1001111111110001 + .dbyt %1001111111110010 + .dbyt %1001111111110011 + .dbyt %1001111111110100 + .dbyt %1001111111110101 + .dbyt %1001111111110110 + .dbyt %1001111111110111 + .dbyt %1001111111111000 + .dbyt %1001111111111001 + .dbyt %1001111111111010 + .dbyt %1001111111111011 + .dbyt %1001111111111100 + .dbyt %1001111111111101 + .dbyt %1001111111111110 + .dbyt %1001111111111111 + .dbyt %1010000000000000 + .dbyt %1010000000000001 + .dbyt %1010000000000010 + .dbyt %1010000000000011 + .dbyt %1010000000000100 + .dbyt %1010000000000101 + .dbyt %1010000000000110 + .dbyt %1010000000000111 + .dbyt %1010000000001000 + .dbyt %1010000000001001 + .dbyt %1010000000001010 + .dbyt %1010000000001011 + .dbyt %1010000000001100 + .dbyt %1010000000001101 + .dbyt %1010000000001110 + .dbyt %1010000000001111 + .dbyt %1010111111100001 + .dbyt %1010111111100010 + .dbyt %1010111111100011 + .dbyt %1010111111100100 + .dbyt %1010111111100101 + .dbyt %1010111111100110 + .dbyt %1010111111100111 + .dbyt %1010111111101000 + .dbyt %1010111111101001 + .dbyt %1010111111101010 + .dbyt %1010111111101011 + .dbyt %1010111111101100 + .dbyt %1010111111101101 + .dbyt %1010111111101110 + .dbyt %1010111111101111 + .dbyt %1010111111110000 + .dbyt %1010111111110001 + .dbyt %1010111111110010 + .dbyt %1010111111110011 + .dbyt %1010111111110100 + .dbyt %1010111111110101 + .dbyt %1010111111110110 + .dbyt %1010111111110111 + .dbyt %1010111111111000 + .dbyt %1010111111111001 + .dbyt %1010111111111010 + .dbyt %1010111111111011 + .dbyt %1010111111111100 + .dbyt %1010111111111101 + .dbyt %1010111111111110 + .dbyt %1010111111111111 + .dbyt %1011000000000000 + .dbyt %1011000000000001 + .dbyt %1011000000000010 + .dbyt %1011000000000011 + .dbyt %1011000000000100 + .dbyt %1011000000000101 + .dbyt %1011000000000110 + .dbyt %1011000000000111 + .dbyt %1011000000001000 + .dbyt %1011000000001001 + .dbyt %1011000000001010 + .dbyt %1011000000001011 + .dbyt %1011000000001100 + .dbyt %1011000000001101 + .dbyt %1011000000001110 + .dbyt %1011000000001111 + .dbyt %1011111111100001 + .dbyt %1011111111100010 + .dbyt %1011111111100011 + .dbyt %1011111111100100 + .dbyt %1011111111100101 + .dbyt %1011111111100110 + .dbyt %1011111111100111 + .dbyt %1011111111101000 + .dbyt %1011111111101001 + .dbyt %1011111111101010 + .dbyt %1011111111101011 + .dbyt %1011111111101100 + .dbyt %1011111111101101 + .dbyt %1011111111101110 + .dbyt %1011111111101111 + .dbyt %1011111111110000 + .dbyt %1011111111110001 + .dbyt %1011111111110010 + .dbyt %1011111111110011 + .dbyt %1011111111110100 + .dbyt %1011111111110101 + .dbyt %1011111111110110 + .dbyt %1011111111110111 + .dbyt %1011111111111000 + .dbyt %1011111111111001 + .dbyt %1011111111111010 + .dbyt %1011111111111011 + .dbyt %1011111111111100 + .dbyt %1011111111111101 + .dbyt %1011111111111110 + .dbyt %1011111111111111 + .dbyt %1100000000000000 + .dbyt %1100000000000001 + .dbyt %1100000000000010 + .dbyt %1100000000000011 + .dbyt %1100000000000100 + .dbyt %1100000000000101 + .dbyt %1100000000000110 + .dbyt %1100000000000111 + .dbyt %1100000000001000 + .dbyt %1100000000001001 + .dbyt %1100000000001010 + .dbyt %1100000000001011 + .dbyt %1100000000001100 + .dbyt %1100000000001101 + .dbyt %1100000000001110 + .dbyt %1100000000001111 + .dbyt %1100111111100001 + .dbyt %1100111111100010 + .dbyt %1100111111100011 + .dbyt %1100111111100100 + .dbyt %1100111111100101 + .dbyt %1100111111100110 + .dbyt %1100111111100111 + .dbyt %1100111111101000 + .dbyt %1100111111101001 + .dbyt %1100111111101010 + .dbyt %1100111111101011 + .dbyt %1100111111101100 + .dbyt %1100111111101101 + .dbyt %1100111111101110 + .dbyt %1100111111101111 + .dbyt %1100111111110000 + .dbyt %1100111111110001 + .dbyt %1100111111110010 + .dbyt %1100111111110011 + .dbyt %1100111111110100 + .dbyt %1100111111110101 + .dbyt %1100111111110110 + .dbyt %1100111111110111 + .dbyt %1100111111111000 + .dbyt %1100111111111001 + .dbyt %1100111111111010 + .dbyt %1100111111111011 + .dbyt %1100111111111100 + .dbyt %1100111111111101 + .dbyt %1100111111111110 + .dbyt %1100111111111111 + .dbyt %1101000000000000 + .dbyt %1101000000000001 + .dbyt %1101000000000010 + .dbyt %1101000000000011 + .dbyt %1101000000000100 + .dbyt %1101000000000101 + .dbyt %1101000000000110 + .dbyt %1101000000000111 + .dbyt %1101000000001000 + .dbyt %1101000000001001 + .dbyt %1101000000001010 + .dbyt %1101000000001011 + .dbyt %1101000000001100 + .dbyt %1101000000001101 + .dbyt %1101000000001110 + .dbyt %1101000000001111 + .dbyt %1101111111100001 + .dbyt %1101111111100010 + .dbyt %1101111111100011 + .dbyt %1101111111100100 + .dbyt %1101111111100101 + .dbyt %1101111111100110 + .dbyt %1101111111100111 + .dbyt %1101111111101000 + .dbyt %1101111111101001 + .dbyt %1101111111101010 + .dbyt %1101111111101011 + .dbyt %1101111111101100 + .dbyt %1101111111101101 + .dbyt %1101111111101110 + .dbyt %1101111111101111 + .dbyt %1101111111110000 + .dbyt %1101111111110001 + .dbyt %1101111111110010 + .dbyt %1101111111110011 + .dbyt %1101111111110100 + .dbyt %1101111111110101 + .dbyt %1101111111110110 + .dbyt %1101111111110111 + .dbyt %1101111111111000 + .dbyt %1101111111111001 + .dbyt %1101111111111010 + .dbyt %1101111111111011 + .dbyt %1101111111111100 + .dbyt %1101111111111101 + .dbyt %1101111111111110 + .dbyt %1101111111111111 + .dbyt %1110000000000000 + .dbyt %1110000000000001 + .dbyt %1110000000000010 + .dbyt %1110000000000011 + .dbyt %1110000000000100 + .dbyt %1110000000000101 + .dbyt %1110000000000110 + .dbyt %1110000000000111 + .dbyt %1110000000001000 + .dbyt %1110000000001001 + .dbyt %1110000000001010 + .dbyt %1110000000001011 + .dbyt %1110000000001100 + .dbyt %1110000000001101 + .dbyt %1110000000001110 + .dbyt %1110000000001111 + .dbyt %1110111111100001 + .dbyt %1110111111100010 + .dbyt %1110111111100011 + .dbyt %1110111111100100 + .dbyt %1110111111100101 + .dbyt %1110111111100110 + .dbyt %1110111111100111 + .dbyt %1110111111101000 + .dbyt %1110111111101001 + .dbyt %1110111111101010 + .dbyt %1110111111101011 + .dbyt %1110111111101100 + .dbyt %1110111111101101 + .dbyt %1110111111101110 + .dbyt %1110111111101111 + .dbyt %1110111111110000 + .dbyt %1110111111110001 + .dbyt %1110111111110010 + .dbyt %1110111111110011 + .dbyt %1110111111110100 + .dbyt %1110111111110101 + .dbyt %1110111111110110 + .dbyt %1110111111110111 + .dbyt %1110111111111000 + .dbyt %1110111111111001 + .dbyt %1110111111111010 + .dbyt %1110111111111011 + .dbyt %1110111111111100 + .dbyt %1110111111111101 + .dbyt %1110111111111110 + .dbyt %1110111111111111 + .dbyt %1111000000000000 + .dbyt %1111000000000001 + .dbyt %1111000000000010 + .dbyt %1111000000000011 + .dbyt %1111000000000100 + .dbyt %1111000000000101 + .dbyt %1111000000000110 + .dbyt %1111000000000111 + .dbyt %1111000000001000 + .dbyt %1111000000001001 + .dbyt %1111000000001010 + .dbyt %1111000000001011 + .dbyt %1111000000001100 + .dbyt %1111000000001101 + .dbyt %1111000000001110 + .dbyt %1111000000001111 + .dbyt %1111111111100001 + .dbyt %1111111111100010 + .dbyt %1111111111100011 + .dbyt %1111111111100100 + .dbyt %1111111111100101 + .dbyt %1111111111100110 + .dbyt %1111111111100111 + .dbyt %1111111111101000 + .dbyt %1111111111101001 + .dbyt %1111111111101010 + .dbyt %1111111111101011 + .dbyt %1111111111101100 + .dbyt %1111111111101101 + .dbyt %1111111111101110 + .dbyt %1111111111101111 + .dbyt %1111111111110000 + .dbyt %1111111111110001 + .dbyt %1111111111110010 + .dbyt %1111111111110011 + .dbyt %1111111111110100 + .dbyt %1111111111110101 + .dbyt %1111111111110110 + .dbyt %1111111111110111 + .dbyt %1111111111111000 + .dbyt %1111111111111001 + .dbyt %1111111111111010 + .dbyt %1111111111111011 + .dbyt %1111111111111100 + .dbyt %1111111111111101 + .dbyt %1111111111111110 + .dbyt %1111111111111111 - ; multiple values on one line, decimal - .dbyt 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - .dbyt 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 - .dbyt 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 - .dbyt 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 - .dbyt 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 - .dbyt 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 - .dbyt 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 - .dbyt 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 - .dbyt 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 - .dbyt 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 - .dbyt 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 - .dbyt 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 - .dbyt 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 - .dbyt 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 - .dbyt 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 - .dbyt 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 - .dbyt 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 - .dbyt 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 - .dbyt 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 - .dbyt 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 - .dbyt 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 - .dbyt 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 - .dbyt 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 - .dbyt 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 + ; multiple values on one line, decimal + .dbyt 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .dbyt 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .dbyt 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .dbyt 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .dbyt 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + .dbyt 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 + .dbyt 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 + .dbyt 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 + .dbyt 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 + .dbyt 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 + .dbyt 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 + .dbyt 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 + .dbyt 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 + .dbyt 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 + .dbyt 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 + .dbyt 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 + .dbyt 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 + .dbyt 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 + .dbyt 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 + .dbyt 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 + .dbyt 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 + .dbyt 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 + .dbyt 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 + .dbyt 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 - ; multiple values on one line, hex - .dbyt $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f - .dbyt $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f - .dbyt $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f - .dbyt $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f - .dbyt $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff - .dbyt $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f - .dbyt $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef - .dbyt $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff - .dbyt $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f - .dbyt $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff - .dbyt $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f - .dbyt $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff - .dbyt $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f - .dbyt $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff - .dbyt $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f - .dbyt $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff - .dbyt $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f - .dbyt $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff - .dbyt $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f - .dbyt $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff - .dbyt $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f - .dbyt $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff - .dbyt $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f - .dbyt $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff + ; multiple values on one line, hex + .dbyt $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .dbyt $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .dbyt $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .dbyt $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .dbyt $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + .dbyt $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f + .dbyt $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef + .dbyt $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff + .dbyt $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f + .dbyt $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff + .dbyt $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f + .dbyt $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff + .dbyt $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f + .dbyt $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff + .dbyt $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f + .dbyt $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff + .dbyt $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f + .dbyt $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff + .dbyt $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f + .dbyt $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff + .dbyt $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f + .dbyt $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff + .dbyt $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f + .dbyt $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff - ; multiple values on one line, alternative hex - .dbyt 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh - .dbyt 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh - .dbyt 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh - .dbyt 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh - .dbyt 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh - .dbyt 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh - .dbyt 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh - .dbyt 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh - .dbyt 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh - .dbyt 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh - .dbyt 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh - .dbyt 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh - .dbyt 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh - .dbyt 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh - .dbyt 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh - .dbyt 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh - .dbyt 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh - .dbyt 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh - .dbyt 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh - .dbyt 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh - .dbyt 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh - .dbyt 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh - .dbyt 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh - .dbyt 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh + ; multiple values on one line, alternative hex + .dbyt 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .dbyt 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .dbyt 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .dbyt 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .dbyt 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + .dbyt 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh + .dbyt 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh + .dbyt 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh + .dbyt 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh + .dbyt 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh + .dbyt 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh + .dbyt 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh + .dbyt 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh + .dbyt 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh + .dbyt 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh + .dbyt 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh + .dbyt 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh + .dbyt 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh + .dbyt 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh + .dbyt 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh + .dbyt 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh + .dbyt 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh + .dbyt 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh + .dbyt 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh - ; mix some variants - .dbyt 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh + ; mix some variants + .dbyt 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/104-dword.list-ref b/test/asm/listing/104-dword.list-ref index 1416aaa22..b449b45a8 100644 --- a/test/asm/listing/104-dword.list-ref +++ b/test/asm/listing/104-dword.list-ref @@ -4,5003 +4,5003 @@ Current file: 104-dword.s 000000r 1 ; 2022-06-15 Spiro Trikaliotis 000000r 1 000000r 1 -000000r 1 ; upper case pseudo-op -000000r 1 00 00 00 00 .DWORD 0 -000004r 1 01 00 00 00 .DWORD 1 -000008r 1 02 00 00 00 .DWORD 2 -00000Cr 1 03 00 00 00 .DWORD 3 -000010r 1 04 00 00 00 .DWORD 4 -000014r 1 05 00 00 00 .DWORD 5 -000018r 1 06 00 00 00 .DWORD 6 -00001Cr 1 07 00 00 00 .DWORD 7 -000020r 1 08 00 00 00 .DWORD 8 -000024r 1 09 00 00 00 .DWORD 9 -000028r 1 0A 00 00 00 .DWORD 10 -00002Cr 1 0B 00 00 00 .DWORD 11 -000030r 1 0C 00 00 00 .DWORD 12 -000034r 1 0D 00 00 00 .DWORD 13 -000038r 1 0E 00 00 00 .DWORD 14 -00003Cr 1 0F 00 00 00 .DWORD 15 -000040r 1 10 00 00 00 .DWORD 16 -000044r 1 11 00 00 00 .DWORD 17 -000048r 1 12 00 00 00 .DWORD 18 -00004Cr 1 13 00 00 00 .DWORD 19 -000050r 1 70 00 00 00 .DWORD 112 -000054r 1 71 00 00 00 .DWORD 113 -000058r 1 72 00 00 00 .DWORD 114 -00005Cr 1 73 00 00 00 .DWORD 115 -000060r 1 74 00 00 00 .DWORD 116 -000064r 1 75 00 00 00 .DWORD 117 -000068r 1 76 00 00 00 .DWORD 118 -00006Cr 1 77 00 00 00 .DWORD 119 -000070r 1 78 00 00 00 .DWORD 120 -000074r 1 79 00 00 00 .DWORD 121 -000078r 1 7A 00 00 00 .DWORD 122 -00007Cr 1 7B 00 00 00 .DWORD 123 -000080r 1 7C 00 00 00 .DWORD 124 -000084r 1 7D 00 00 00 .DWORD 125 -000088r 1 7E 00 00 00 .DWORD 126 -00008Cr 1 7F 00 00 00 .DWORD 127 -000090r 1 80 00 00 00 .DWORD 128 -000094r 1 81 00 00 00 .DWORD 129 -000098r 1 82 00 00 00 .DWORD 130 -00009Cr 1 83 00 00 00 .DWORD 131 -0000A0r 1 84 00 00 00 .DWORD 132 -0000A4r 1 85 00 00 00 .DWORD 133 -0000A8r 1 86 00 00 00 .DWORD 134 -0000ACr 1 F0 00 00 00 .DWORD 240 -0000B0r 1 F1 00 00 00 .DWORD 241 -0000B4r 1 F2 00 00 00 .DWORD 242 -0000B8r 1 F3 00 00 00 .DWORD 243 -0000BCr 1 F4 00 00 00 .DWORD 244 -0000C0r 1 F5 00 00 00 .DWORD 245 -0000C4r 1 F6 00 00 00 .DWORD 246 -0000C8r 1 F7 00 00 00 .DWORD 247 -0000CCr 1 F8 00 00 00 .DWORD 248 -0000D0r 1 F9 00 00 00 .DWORD 249 -0000D4r 1 FA 00 00 00 .DWORD 250 -0000D8r 1 FB 00 00 00 .DWORD 251 -0000DCr 1 FC 00 00 00 .DWORD 252 -0000E0r 1 FD 00 00 00 .DWORD 253 -0000E4r 1 FE 00 00 00 .DWORD 254 -0000E8r 1 FF 00 00 00 .DWORD 255 -0000ECr 1 00 01 00 00 .DWORD 256 -0000F0r 1 01 01 00 00 .DWORD 257 -0000F4r 1 02 01 00 00 .DWORD 258 -0000F8r 1 03 01 00 00 .DWORD 259 -0000FCr 1 D2 0F 00 00 .DWORD 4050 -000100r 1 D3 0F 00 00 .DWORD 4051 -000104r 1 D4 0F 00 00 .DWORD 4052 -000108r 1 D5 0F 00 00 .DWORD 4053 -00010Cr 1 D6 0F 00 00 .DWORD 4054 -000110r 1 D7 0F 00 00 .DWORD 4055 -000114r 1 D8 0F 00 00 .DWORD 4056 -000118r 1 D9 0F 00 00 .DWORD 4057 -00011Cr 1 DA 0F 00 00 .DWORD 4058 -000120r 1 DB 0F 00 00 .DWORD 4059 -000124r 1 DC 0F 00 00 .DWORD 4060 -000128r 1 DD 0F 00 00 .DWORD 4061 -00012Cr 1 DE 0F 00 00 .DWORD 4062 -000130r 1 DF 0F 00 00 .DWORD 4063 -000134r 1 E0 0F 00 00 .DWORD 4064 -000138r 1 E1 0F 00 00 .DWORD 4065 -00013Cr 1 E2 0F 00 00 .DWORD 4066 -000140r 1 E3 0F 00 00 .DWORD 4067 -000144r 1 E4 0F 00 00 .DWORD 4068 -000148r 1 E5 0F 00 00 .DWORD 4069 -00014Cr 1 E6 0F 00 00 .DWORD 4070 -000150r 1 E7 0F 00 00 .DWORD 4071 -000154r 1 E8 0F 00 00 .DWORD 4072 -000158r 1 E9 0F 00 00 .DWORD 4073 -00015Cr 1 EA 0F 00 00 .DWORD 4074 -000160r 1 EB 0F 00 00 .DWORD 4075 -000164r 1 EC 0F 00 00 .DWORD 4076 -000168r 1 ED 0F 00 00 .DWORD 4077 -00016Cr 1 EE 0F 00 00 .DWORD 4078 -000170r 1 EF 0F 00 00 .DWORD 4079 -000174r 1 F0 0F 00 00 .DWORD 4080 -000178r 1 F1 0F 00 00 .DWORD 4081 -00017Cr 1 F2 0F 00 00 .DWORD 4082 -000180r 1 F3 0F 00 00 .DWORD 4083 -000184r 1 F4 0F 00 00 .DWORD 4084 -000188r 1 F5 0F 00 00 .DWORD 4085 -00018Cr 1 F6 0F 00 00 .DWORD 4086 -000190r 1 F7 0F 00 00 .DWORD 4087 -000194r 1 F8 0F 00 00 .DWORD 4088 -000198r 1 F9 0F 00 00 .DWORD 4089 -00019Cr 1 FA 0F 00 00 .DWORD 4090 -0001A0r 1 FB 0F 00 00 .DWORD 4091 -0001A4r 1 FC 0F 00 00 .DWORD 4092 -0001A8r 1 FD 0F 00 00 .DWORD 4093 -0001ACr 1 FE 0F 00 00 .DWORD 4094 -0001B0r 1 FF 0F 00 00 .DWORD 4095 -0001B4r 1 00 10 00 00 .DWORD 4096 -0001B8r 1 01 10 00 00 .DWORD 4097 -0001BCr 1 02 10 00 00 .DWORD 4098 -0001C0r 1 03 10 00 00 .DWORD 4099 -0001C4r 1 04 10 00 00 .DWORD 4100 -0001C8r 1 05 10 00 00 .DWORD 4101 -0001CCr 1 06 10 00 00 .DWORD 4102 -0001D0r 1 07 10 00 00 .DWORD 4103 -0001D4r 1 08 10 00 00 .DWORD 4104 -0001D8r 1 F0 7F 00 00 .DWORD 32752 -0001DCr 1 F1 7F 00 00 .DWORD 32753 -0001E0r 1 F2 7F 00 00 .DWORD 32754 -0001E4r 1 F3 7F 00 00 .DWORD 32755 -0001E8r 1 F4 7F 00 00 .DWORD 32756 -0001ECr 1 F5 7F 00 00 .DWORD 32757 -0001F0r 1 F6 7F 00 00 .DWORD 32758 -0001F4r 1 F7 7F 00 00 .DWORD 32759 -0001F8r 1 F8 7F 00 00 .DWORD 32760 -0001FCr 1 F9 7F 00 00 .DWORD 32761 -000200r 1 FA 7F 00 00 .DWORD 32762 -000204r 1 FB 7F 00 00 .DWORD 32763 -000208r 1 FC 7F 00 00 .DWORD 32764 -00020Cr 1 FD 7F 00 00 .DWORD 32765 -000210r 1 FE 7F 00 00 .DWORD 32766 -000214r 1 FF 7F 00 00 .DWORD 32767 -000218r 1 00 80 00 00 .DWORD 32768 -00021Cr 1 01 80 00 00 .DWORD 32769 -000220r 1 02 80 00 00 .DWORD 32770 -000224r 1 03 80 00 00 .DWORD 32771 -000228r 1 04 80 00 00 .DWORD 32772 -00022Cr 1 05 80 00 00 .DWORD 32773 -000230r 1 06 80 00 00 .DWORD 32774 -000234r 1 07 80 00 00 .DWORD 32775 -000238r 1 08 80 00 00 .DWORD 32776 -00023Cr 1 09 80 00 00 .DWORD 32777 -000240r 1 0A 80 00 00 .DWORD 32778 -000244r 1 0B 80 00 00 .DWORD 32779 -000248r 1 E1 9F 00 00 .DWORD 40929 -00024Cr 1 E2 9F 00 00 .DWORD 40930 -000250r 1 E3 9F 00 00 .DWORD 40931 -000254r 1 E4 9F 00 00 .DWORD 40932 -000258r 1 E5 9F 00 00 .DWORD 40933 -00025Cr 1 E6 9F 00 00 .DWORD 40934 -000260r 1 E7 9F 00 00 .DWORD 40935 -000264r 1 E8 9F 00 00 .DWORD 40936 -000268r 1 E9 9F 00 00 .DWORD 40937 -00026Cr 1 EA 9F 00 00 .DWORD 40938 -000270r 1 EB 9F 00 00 .DWORD 40939 -000274r 1 EC 9F 00 00 .DWORD 40940 -000278r 1 ED 9F 00 00 .DWORD 40941 -00027Cr 1 EE 9F 00 00 .DWORD 40942 -000280r 1 EF 9F 00 00 .DWORD 40943 -000284r 1 F0 9F 00 00 .DWORD 40944 -000288r 1 F1 9F 00 00 .DWORD 40945 -00028Cr 1 F2 9F 00 00 .DWORD 40946 -000290r 1 F3 9F 00 00 .DWORD 40947 -000294r 1 F4 9F 00 00 .DWORD 40948 -000298r 1 F5 9F 00 00 .DWORD 40949 -00029Cr 1 F6 9F 00 00 .DWORD 40950 -0002A0r 1 F7 9F 00 00 .DWORD 40951 -0002A4r 1 F8 9F 00 00 .DWORD 40952 -0002A8r 1 F9 9F 00 00 .DWORD 40953 -0002ACr 1 FA 9F 00 00 .DWORD 40954 -0002B0r 1 FB 9F 00 00 .DWORD 40955 -0002B4r 1 FC 9F 00 00 .DWORD 40956 -0002B8r 1 FD 9F 00 00 .DWORD 40957 -0002BCr 1 FE 9F 00 00 .DWORD 40958 -0002C0r 1 FF 9F 00 00 .DWORD 40959 -0002C4r 1 00 A0 00 00 .DWORD 40960 -0002C8r 1 01 A0 00 00 .DWORD 40961 -0002CCr 1 02 A0 00 00 .DWORD 40962 -0002D0r 1 03 A0 00 00 .DWORD 40963 -0002D4r 1 04 A0 00 00 .DWORD 40964 -0002D8r 1 05 A0 00 00 .DWORD 40965 -0002DCr 1 06 A0 00 00 .DWORD 40966 -0002E0r 1 07 A0 00 00 .DWORD 40967 -0002E4r 1 08 A0 00 00 .DWORD 40968 -0002E8r 1 09 A0 00 00 .DWORD 40969 -0002ECr 1 0A A0 00 00 .DWORD 40970 -0002F0r 1 0B A0 00 00 .DWORD 40971 -0002F4r 1 0C A0 00 00 .DWORD 40972 -0002F8r 1 0D A0 00 00 .DWORD 40973 -0002FCr 1 0E A0 00 00 .DWORD 40974 -000300r 1 0F A0 00 00 .DWORD 40975 -000304r 1 E1 AF 00 00 .DWORD 45025 -000308r 1 E2 AF 00 00 .DWORD 45026 -00030Cr 1 E3 AF 00 00 .DWORD 45027 -000310r 1 E4 AF 00 00 .DWORD 45028 -000314r 1 E5 AF 00 00 .DWORD 45029 -000318r 1 E6 AF 00 00 .DWORD 45030 -00031Cr 1 E7 AF 00 00 .DWORD 45031 -000320r 1 E8 AF 00 00 .DWORD 45032 -000324r 1 E9 AF 00 00 .DWORD 45033 -000328r 1 EA AF 00 00 .DWORD 45034 -00032Cr 1 EB AF 00 00 .DWORD 45035 -000330r 1 EC AF 00 00 .DWORD 45036 -000334r 1 ED AF 00 00 .DWORD 45037 -000338r 1 EE AF 00 00 .DWORD 45038 -00033Cr 1 EF AF 00 00 .DWORD 45039 -000340r 1 F0 AF 00 00 .DWORD 45040 -000344r 1 F1 AF 00 00 .DWORD 45041 -000348r 1 F2 AF 00 00 .DWORD 45042 -00034Cr 1 F3 AF 00 00 .DWORD 45043 -000350r 1 F4 AF 00 00 .DWORD 45044 -000354r 1 F5 AF 00 00 .DWORD 45045 -000358r 1 F6 AF 00 00 .DWORD 45046 -00035Cr 1 F7 AF 00 00 .DWORD 45047 -000360r 1 F8 AF 00 00 .DWORD 45048 -000364r 1 F9 AF 00 00 .DWORD 45049 -000368r 1 FA AF 00 00 .DWORD 45050 -00036Cr 1 FB AF 00 00 .DWORD 45051 -000370r 1 FC AF 00 00 .DWORD 45052 -000374r 1 FD AF 00 00 .DWORD 45053 -000378r 1 FE AF 00 00 .DWORD 45054 -00037Cr 1 FF AF 00 00 .DWORD 45055 -000380r 1 00 B0 00 00 .DWORD 45056 -000384r 1 01 B0 00 00 .DWORD 45057 -000388r 1 02 B0 00 00 .DWORD 45058 -00038Cr 1 03 B0 00 00 .DWORD 45059 -000390r 1 04 B0 00 00 .DWORD 45060 -000394r 1 05 B0 00 00 .DWORD 45061 -000398r 1 06 B0 00 00 .DWORD 45062 -00039Cr 1 07 B0 00 00 .DWORD 45063 -0003A0r 1 08 B0 00 00 .DWORD 45064 -0003A4r 1 09 B0 00 00 .DWORD 45065 -0003A8r 1 0A B0 00 00 .DWORD 45066 -0003ACr 1 0B B0 00 00 .DWORD 45067 -0003B0r 1 0C B0 00 00 .DWORD 45068 -0003B4r 1 0D B0 00 00 .DWORD 45069 -0003B8r 1 0E B0 00 00 .DWORD 45070 -0003BCr 1 0F B0 00 00 .DWORD 45071 -0003C0r 1 E1 FF 00 00 .DWORD 65505 -0003C4r 1 E2 FF 00 00 .DWORD 65506 -0003C8r 1 E3 FF 00 00 .DWORD 65507 -0003CCr 1 E4 FF 00 00 .DWORD 65508 -0003D0r 1 E5 FF 00 00 .DWORD 65509 -0003D4r 1 E6 FF 00 00 .DWORD 65510 -0003D8r 1 E7 FF 00 00 .DWORD 65511 -0003DCr 1 E8 FF 00 00 .DWORD 65512 -0003E0r 1 E9 FF 00 00 .DWORD 65513 -0003E4r 1 EA FF 00 00 .DWORD 65514 -0003E8r 1 EB FF 00 00 .DWORD 65515 -0003ECr 1 EC FF 00 00 .DWORD 65516 -0003F0r 1 ED FF 00 00 .DWORD 65517 -0003F4r 1 EE FF 00 00 .DWORD 65518 -0003F8r 1 EF FF 00 00 .DWORD 65519 -0003FCr 1 F0 FF 00 00 .DWORD 65520 -000400r 1 F1 FF 00 00 .DWORD 65521 -000404r 1 F2 FF 00 00 .DWORD 65522 -000408r 1 F3 FF 00 00 .DWORD 65523 -00040Cr 1 F4 FF 00 00 .DWORD 65524 -000410r 1 F5 FF 00 00 .DWORD 65525 -000414r 1 F6 FF 00 00 .DWORD 65526 -000418r 1 F7 FF 00 00 .DWORD 65527 -00041Cr 1 F8 FF 00 00 .DWORD 65528 -000420r 1 F9 FF 00 00 .DWORD 65529 -000424r 1 FA FF 00 00 .DWORD 65530 -000428r 1 FB FF 00 00 .DWORD 65531 -00042Cr 1 FC FF 00 00 .DWORD 65532 -000430r 1 FD FF 00 00 .DWORD 65533 -000434r 1 FE FF 00 00 .DWORD 65534 -000438r 1 FF FF 00 00 .DWORD 65535 -00043Cr 1 00 00 01 00 .DWORD 65536 -000440r 1 01 00 01 00 .DWORD 65537 -000444r 1 02 00 01 00 .DWORD 65538 -000448r 1 03 00 01 00 .DWORD 65539 -00044Cr 1 04 00 01 00 .DWORD 65540 -000450r 1 05 00 01 00 .DWORD 65541 -000454r 1 06 00 01 00 .DWORD 65542 -000458r 1 07 00 01 00 .DWORD 65543 -00045Cr 1 08 00 01 00 .DWORD 65544 -000460r 1 09 00 01 00 .DWORD 65545 -000464r 1 0A 00 01 00 .DWORD 65546 -000468r 1 0B 00 01 00 .DWORD 65547 -00046Cr 1 0C 00 01 00 .DWORD 65548 -000470r 1 0D 00 01 00 .DWORD 65549 -000474r 1 0E 00 01 00 .DWORD 65550 -000478r 1 0F 00 01 00 .DWORD 65551 -00047Cr 1 F0 FF FF 7F .DWORD 2147483632 -000480r 1 F1 FF FF 7F .DWORD 2147483633 -000484r 1 F2 FF FF 7F .DWORD 2147483634 -000488r 1 F3 FF FF 7F .DWORD 2147483635 -00048Cr 1 F4 FF FF 7F .DWORD 2147483636 -000490r 1 F5 FF FF 7F .DWORD 2147483637 -000494r 1 F6 FF FF 7F .DWORD 2147483638 -000498r 1 F7 FF FF 7F .DWORD 2147483639 -00049Cr 1 F8 FF FF 7F .DWORD 2147483640 -0004A0r 1 F9 FF FF 7F .DWORD 2147483641 -0004A4r 1 FA FF FF 7F .DWORD 2147483642 -0004A8r 1 FB FF FF 7F .DWORD 2147483643 -0004ACr 1 FC FF FF 7F .DWORD 2147483644 -0004B0r 1 FD FF FF 7F .DWORD 2147483645 -0004B4r 1 FE FF FF 7F .DWORD 2147483646 -0004B8r 1 FF FF FF 7F .DWORD 2147483647 -0004BCr 1 00 00 00 80 .DWORD 2147483648 -0004C0r 1 01 00 00 80 .DWORD 2147483649 -0004C4r 1 02 00 00 80 .DWORD 2147483650 -0004C8r 1 03 00 00 80 .DWORD 2147483651 -0004CCr 1 04 00 00 80 .DWORD 2147483652 -0004D0r 1 05 00 00 80 .DWORD 2147483653 -0004D4r 1 06 00 00 80 .DWORD 2147483654 -0004D8r 1 07 00 00 80 .DWORD 2147483655 -0004DCr 1 08 00 00 80 .DWORD 2147483656 -0004E0r 1 09 00 00 80 .DWORD 2147483657 -0004E4r 1 0A 00 00 80 .DWORD 2147483658 -0004E8r 1 0B 00 00 80 .DWORD 2147483659 -0004ECr 1 0C 00 00 80 .DWORD 2147483660 -0004F0r 1 0D 00 00 80 .DWORD 2147483661 -0004F4r 1 0E 00 00 80 .DWORD 2147483662 -0004F8r 1 0F 00 00 80 .DWORD 2147483663 -0004FCr 1 F0 FF FF 9F .DWORD 2684354544 -000500r 1 F1 FF FF 9F .DWORD 2684354545 -000504r 1 F2 FF FF 9F .DWORD 2684354546 -000508r 1 F3 FF FF 9F .DWORD 2684354547 -00050Cr 1 F4 FF FF 9F .DWORD 2684354548 -000510r 1 F5 FF FF 9F .DWORD 2684354549 -000514r 1 F6 FF FF 9F .DWORD 2684354550 -000518r 1 F7 FF FF 9F .DWORD 2684354551 -00051Cr 1 F8 FF FF 9F .DWORD 2684354552 -000520r 1 F9 FF FF 9F .DWORD 2684354553 -000524r 1 FA FF FF 9F .DWORD 2684354554 -000528r 1 FB FF FF 9F .DWORD 2684354555 -00052Cr 1 FC FF FF 9F .DWORD 2684354556 -000530r 1 FD FF FF 9F .DWORD 2684354557 -000534r 1 FE FF FF 9F .DWORD 2684354558 -000538r 1 FF FF FF 9F .DWORD 2684354559 -00053Cr 1 00 00 00 A0 .DWORD 2684354560 -000540r 1 01 00 00 A0 .DWORD 2684354561 -000544r 1 02 00 00 A0 .DWORD 2684354562 -000548r 1 03 00 00 A0 .DWORD 2684354563 -00054Cr 1 04 00 00 A0 .DWORD 2684354564 -000550r 1 05 00 00 A0 .DWORD 2684354565 -000554r 1 06 00 00 A0 .DWORD 2684354566 -000558r 1 07 00 00 A0 .DWORD 2684354567 -00055Cr 1 08 00 00 A0 .DWORD 2684354568 -000560r 1 09 00 00 A0 .DWORD 2684354569 -000564r 1 0A 00 00 A0 .DWORD 2684354570 -000568r 1 0B 00 00 A0 .DWORD 2684354571 -00056Cr 1 0C 00 00 A0 .DWORD 2684354572 -000570r 1 0D 00 00 A0 .DWORD 2684354573 -000574r 1 0E 00 00 A0 .DWORD 2684354574 -000578r 1 0F 00 00 A0 .DWORD 2684354575 -00057Cr 1 F0 FF FF FF .DWORD 4294967280 -000580r 1 F1 FF FF FF .DWORD 4294967281 -000584r 1 F2 FF FF FF .DWORD 4294967282 -000588r 1 F3 FF FF FF .DWORD 4294967283 -00058Cr 1 F4 FF FF FF .DWORD 4294967284 -000590r 1 F5 FF FF FF .DWORD 4294967285 -000594r 1 F6 FF FF FF .DWORD 4294967286 -000598r 1 F7 FF FF FF .DWORD 4294967287 -00059Cr 1 F8 FF FF FF .DWORD 4294967288 -0005A0r 1 F9 FF FF FF .DWORD 4294967289 -0005A4r 1 FA FF FF FF .DWORD 4294967290 -0005A8r 1 FB FF FF FF .DWORD 4294967291 -0005ACr 1 FC FF FF FF .DWORD 4294967292 -0005B0r 1 FD FF FF FF .DWORD 4294967293 -0005B4r 1 FE FF FF FF .DWORD 4294967294 -0005B8r 1 FF FF FF FF .DWORD 4294967295 +000000r 1 ; upper case pseudo-op +000000r 1 00 00 00 00 .DWORD 0 +000004r 1 01 00 00 00 .DWORD 1 +000008r 1 02 00 00 00 .DWORD 2 +00000Cr 1 03 00 00 00 .DWORD 3 +000010r 1 04 00 00 00 .DWORD 4 +000014r 1 05 00 00 00 .DWORD 5 +000018r 1 06 00 00 00 .DWORD 6 +00001Cr 1 07 00 00 00 .DWORD 7 +000020r 1 08 00 00 00 .DWORD 8 +000024r 1 09 00 00 00 .DWORD 9 +000028r 1 0A 00 00 00 .DWORD 10 +00002Cr 1 0B 00 00 00 .DWORD 11 +000030r 1 0C 00 00 00 .DWORD 12 +000034r 1 0D 00 00 00 .DWORD 13 +000038r 1 0E 00 00 00 .DWORD 14 +00003Cr 1 0F 00 00 00 .DWORD 15 +000040r 1 10 00 00 00 .DWORD 16 +000044r 1 11 00 00 00 .DWORD 17 +000048r 1 12 00 00 00 .DWORD 18 +00004Cr 1 13 00 00 00 .DWORD 19 +000050r 1 70 00 00 00 .DWORD 112 +000054r 1 71 00 00 00 .DWORD 113 +000058r 1 72 00 00 00 .DWORD 114 +00005Cr 1 73 00 00 00 .DWORD 115 +000060r 1 74 00 00 00 .DWORD 116 +000064r 1 75 00 00 00 .DWORD 117 +000068r 1 76 00 00 00 .DWORD 118 +00006Cr 1 77 00 00 00 .DWORD 119 +000070r 1 78 00 00 00 .DWORD 120 +000074r 1 79 00 00 00 .DWORD 121 +000078r 1 7A 00 00 00 .DWORD 122 +00007Cr 1 7B 00 00 00 .DWORD 123 +000080r 1 7C 00 00 00 .DWORD 124 +000084r 1 7D 00 00 00 .DWORD 125 +000088r 1 7E 00 00 00 .DWORD 126 +00008Cr 1 7F 00 00 00 .DWORD 127 +000090r 1 80 00 00 00 .DWORD 128 +000094r 1 81 00 00 00 .DWORD 129 +000098r 1 82 00 00 00 .DWORD 130 +00009Cr 1 83 00 00 00 .DWORD 131 +0000A0r 1 84 00 00 00 .DWORD 132 +0000A4r 1 85 00 00 00 .DWORD 133 +0000A8r 1 86 00 00 00 .DWORD 134 +0000ACr 1 F0 00 00 00 .DWORD 240 +0000B0r 1 F1 00 00 00 .DWORD 241 +0000B4r 1 F2 00 00 00 .DWORD 242 +0000B8r 1 F3 00 00 00 .DWORD 243 +0000BCr 1 F4 00 00 00 .DWORD 244 +0000C0r 1 F5 00 00 00 .DWORD 245 +0000C4r 1 F6 00 00 00 .DWORD 246 +0000C8r 1 F7 00 00 00 .DWORD 247 +0000CCr 1 F8 00 00 00 .DWORD 248 +0000D0r 1 F9 00 00 00 .DWORD 249 +0000D4r 1 FA 00 00 00 .DWORD 250 +0000D8r 1 FB 00 00 00 .DWORD 251 +0000DCr 1 FC 00 00 00 .DWORD 252 +0000E0r 1 FD 00 00 00 .DWORD 253 +0000E4r 1 FE 00 00 00 .DWORD 254 +0000E8r 1 FF 00 00 00 .DWORD 255 +0000ECr 1 00 01 00 00 .DWORD 256 +0000F0r 1 01 01 00 00 .DWORD 257 +0000F4r 1 02 01 00 00 .DWORD 258 +0000F8r 1 03 01 00 00 .DWORD 259 +0000FCr 1 D2 0F 00 00 .DWORD 4050 +000100r 1 D3 0F 00 00 .DWORD 4051 +000104r 1 D4 0F 00 00 .DWORD 4052 +000108r 1 D5 0F 00 00 .DWORD 4053 +00010Cr 1 D6 0F 00 00 .DWORD 4054 +000110r 1 D7 0F 00 00 .DWORD 4055 +000114r 1 D8 0F 00 00 .DWORD 4056 +000118r 1 D9 0F 00 00 .DWORD 4057 +00011Cr 1 DA 0F 00 00 .DWORD 4058 +000120r 1 DB 0F 00 00 .DWORD 4059 +000124r 1 DC 0F 00 00 .DWORD 4060 +000128r 1 DD 0F 00 00 .DWORD 4061 +00012Cr 1 DE 0F 00 00 .DWORD 4062 +000130r 1 DF 0F 00 00 .DWORD 4063 +000134r 1 E0 0F 00 00 .DWORD 4064 +000138r 1 E1 0F 00 00 .DWORD 4065 +00013Cr 1 E2 0F 00 00 .DWORD 4066 +000140r 1 E3 0F 00 00 .DWORD 4067 +000144r 1 E4 0F 00 00 .DWORD 4068 +000148r 1 E5 0F 00 00 .DWORD 4069 +00014Cr 1 E6 0F 00 00 .DWORD 4070 +000150r 1 E7 0F 00 00 .DWORD 4071 +000154r 1 E8 0F 00 00 .DWORD 4072 +000158r 1 E9 0F 00 00 .DWORD 4073 +00015Cr 1 EA 0F 00 00 .DWORD 4074 +000160r 1 EB 0F 00 00 .DWORD 4075 +000164r 1 EC 0F 00 00 .DWORD 4076 +000168r 1 ED 0F 00 00 .DWORD 4077 +00016Cr 1 EE 0F 00 00 .DWORD 4078 +000170r 1 EF 0F 00 00 .DWORD 4079 +000174r 1 F0 0F 00 00 .DWORD 4080 +000178r 1 F1 0F 00 00 .DWORD 4081 +00017Cr 1 F2 0F 00 00 .DWORD 4082 +000180r 1 F3 0F 00 00 .DWORD 4083 +000184r 1 F4 0F 00 00 .DWORD 4084 +000188r 1 F5 0F 00 00 .DWORD 4085 +00018Cr 1 F6 0F 00 00 .DWORD 4086 +000190r 1 F7 0F 00 00 .DWORD 4087 +000194r 1 F8 0F 00 00 .DWORD 4088 +000198r 1 F9 0F 00 00 .DWORD 4089 +00019Cr 1 FA 0F 00 00 .DWORD 4090 +0001A0r 1 FB 0F 00 00 .DWORD 4091 +0001A4r 1 FC 0F 00 00 .DWORD 4092 +0001A8r 1 FD 0F 00 00 .DWORD 4093 +0001ACr 1 FE 0F 00 00 .DWORD 4094 +0001B0r 1 FF 0F 00 00 .DWORD 4095 +0001B4r 1 00 10 00 00 .DWORD 4096 +0001B8r 1 01 10 00 00 .DWORD 4097 +0001BCr 1 02 10 00 00 .DWORD 4098 +0001C0r 1 03 10 00 00 .DWORD 4099 +0001C4r 1 04 10 00 00 .DWORD 4100 +0001C8r 1 05 10 00 00 .DWORD 4101 +0001CCr 1 06 10 00 00 .DWORD 4102 +0001D0r 1 07 10 00 00 .DWORD 4103 +0001D4r 1 08 10 00 00 .DWORD 4104 +0001D8r 1 F0 7F 00 00 .DWORD 32752 +0001DCr 1 F1 7F 00 00 .DWORD 32753 +0001E0r 1 F2 7F 00 00 .DWORD 32754 +0001E4r 1 F3 7F 00 00 .DWORD 32755 +0001E8r 1 F4 7F 00 00 .DWORD 32756 +0001ECr 1 F5 7F 00 00 .DWORD 32757 +0001F0r 1 F6 7F 00 00 .DWORD 32758 +0001F4r 1 F7 7F 00 00 .DWORD 32759 +0001F8r 1 F8 7F 00 00 .DWORD 32760 +0001FCr 1 F9 7F 00 00 .DWORD 32761 +000200r 1 FA 7F 00 00 .DWORD 32762 +000204r 1 FB 7F 00 00 .DWORD 32763 +000208r 1 FC 7F 00 00 .DWORD 32764 +00020Cr 1 FD 7F 00 00 .DWORD 32765 +000210r 1 FE 7F 00 00 .DWORD 32766 +000214r 1 FF 7F 00 00 .DWORD 32767 +000218r 1 00 80 00 00 .DWORD 32768 +00021Cr 1 01 80 00 00 .DWORD 32769 +000220r 1 02 80 00 00 .DWORD 32770 +000224r 1 03 80 00 00 .DWORD 32771 +000228r 1 04 80 00 00 .DWORD 32772 +00022Cr 1 05 80 00 00 .DWORD 32773 +000230r 1 06 80 00 00 .DWORD 32774 +000234r 1 07 80 00 00 .DWORD 32775 +000238r 1 08 80 00 00 .DWORD 32776 +00023Cr 1 09 80 00 00 .DWORD 32777 +000240r 1 0A 80 00 00 .DWORD 32778 +000244r 1 0B 80 00 00 .DWORD 32779 +000248r 1 E1 9F 00 00 .DWORD 40929 +00024Cr 1 E2 9F 00 00 .DWORD 40930 +000250r 1 E3 9F 00 00 .DWORD 40931 +000254r 1 E4 9F 00 00 .DWORD 40932 +000258r 1 E5 9F 00 00 .DWORD 40933 +00025Cr 1 E6 9F 00 00 .DWORD 40934 +000260r 1 E7 9F 00 00 .DWORD 40935 +000264r 1 E8 9F 00 00 .DWORD 40936 +000268r 1 E9 9F 00 00 .DWORD 40937 +00026Cr 1 EA 9F 00 00 .DWORD 40938 +000270r 1 EB 9F 00 00 .DWORD 40939 +000274r 1 EC 9F 00 00 .DWORD 40940 +000278r 1 ED 9F 00 00 .DWORD 40941 +00027Cr 1 EE 9F 00 00 .DWORD 40942 +000280r 1 EF 9F 00 00 .DWORD 40943 +000284r 1 F0 9F 00 00 .DWORD 40944 +000288r 1 F1 9F 00 00 .DWORD 40945 +00028Cr 1 F2 9F 00 00 .DWORD 40946 +000290r 1 F3 9F 00 00 .DWORD 40947 +000294r 1 F4 9F 00 00 .DWORD 40948 +000298r 1 F5 9F 00 00 .DWORD 40949 +00029Cr 1 F6 9F 00 00 .DWORD 40950 +0002A0r 1 F7 9F 00 00 .DWORD 40951 +0002A4r 1 F8 9F 00 00 .DWORD 40952 +0002A8r 1 F9 9F 00 00 .DWORD 40953 +0002ACr 1 FA 9F 00 00 .DWORD 40954 +0002B0r 1 FB 9F 00 00 .DWORD 40955 +0002B4r 1 FC 9F 00 00 .DWORD 40956 +0002B8r 1 FD 9F 00 00 .DWORD 40957 +0002BCr 1 FE 9F 00 00 .DWORD 40958 +0002C0r 1 FF 9F 00 00 .DWORD 40959 +0002C4r 1 00 A0 00 00 .DWORD 40960 +0002C8r 1 01 A0 00 00 .DWORD 40961 +0002CCr 1 02 A0 00 00 .DWORD 40962 +0002D0r 1 03 A0 00 00 .DWORD 40963 +0002D4r 1 04 A0 00 00 .DWORD 40964 +0002D8r 1 05 A0 00 00 .DWORD 40965 +0002DCr 1 06 A0 00 00 .DWORD 40966 +0002E0r 1 07 A0 00 00 .DWORD 40967 +0002E4r 1 08 A0 00 00 .DWORD 40968 +0002E8r 1 09 A0 00 00 .DWORD 40969 +0002ECr 1 0A A0 00 00 .DWORD 40970 +0002F0r 1 0B A0 00 00 .DWORD 40971 +0002F4r 1 0C A0 00 00 .DWORD 40972 +0002F8r 1 0D A0 00 00 .DWORD 40973 +0002FCr 1 0E A0 00 00 .DWORD 40974 +000300r 1 0F A0 00 00 .DWORD 40975 +000304r 1 E1 AF 00 00 .DWORD 45025 +000308r 1 E2 AF 00 00 .DWORD 45026 +00030Cr 1 E3 AF 00 00 .DWORD 45027 +000310r 1 E4 AF 00 00 .DWORD 45028 +000314r 1 E5 AF 00 00 .DWORD 45029 +000318r 1 E6 AF 00 00 .DWORD 45030 +00031Cr 1 E7 AF 00 00 .DWORD 45031 +000320r 1 E8 AF 00 00 .DWORD 45032 +000324r 1 E9 AF 00 00 .DWORD 45033 +000328r 1 EA AF 00 00 .DWORD 45034 +00032Cr 1 EB AF 00 00 .DWORD 45035 +000330r 1 EC AF 00 00 .DWORD 45036 +000334r 1 ED AF 00 00 .DWORD 45037 +000338r 1 EE AF 00 00 .DWORD 45038 +00033Cr 1 EF AF 00 00 .DWORD 45039 +000340r 1 F0 AF 00 00 .DWORD 45040 +000344r 1 F1 AF 00 00 .DWORD 45041 +000348r 1 F2 AF 00 00 .DWORD 45042 +00034Cr 1 F3 AF 00 00 .DWORD 45043 +000350r 1 F4 AF 00 00 .DWORD 45044 +000354r 1 F5 AF 00 00 .DWORD 45045 +000358r 1 F6 AF 00 00 .DWORD 45046 +00035Cr 1 F7 AF 00 00 .DWORD 45047 +000360r 1 F8 AF 00 00 .DWORD 45048 +000364r 1 F9 AF 00 00 .DWORD 45049 +000368r 1 FA AF 00 00 .DWORD 45050 +00036Cr 1 FB AF 00 00 .DWORD 45051 +000370r 1 FC AF 00 00 .DWORD 45052 +000374r 1 FD AF 00 00 .DWORD 45053 +000378r 1 FE AF 00 00 .DWORD 45054 +00037Cr 1 FF AF 00 00 .DWORD 45055 +000380r 1 00 B0 00 00 .DWORD 45056 +000384r 1 01 B0 00 00 .DWORD 45057 +000388r 1 02 B0 00 00 .DWORD 45058 +00038Cr 1 03 B0 00 00 .DWORD 45059 +000390r 1 04 B0 00 00 .DWORD 45060 +000394r 1 05 B0 00 00 .DWORD 45061 +000398r 1 06 B0 00 00 .DWORD 45062 +00039Cr 1 07 B0 00 00 .DWORD 45063 +0003A0r 1 08 B0 00 00 .DWORD 45064 +0003A4r 1 09 B0 00 00 .DWORD 45065 +0003A8r 1 0A B0 00 00 .DWORD 45066 +0003ACr 1 0B B0 00 00 .DWORD 45067 +0003B0r 1 0C B0 00 00 .DWORD 45068 +0003B4r 1 0D B0 00 00 .DWORD 45069 +0003B8r 1 0E B0 00 00 .DWORD 45070 +0003BCr 1 0F B0 00 00 .DWORD 45071 +0003C0r 1 E1 FF 00 00 .DWORD 65505 +0003C4r 1 E2 FF 00 00 .DWORD 65506 +0003C8r 1 E3 FF 00 00 .DWORD 65507 +0003CCr 1 E4 FF 00 00 .DWORD 65508 +0003D0r 1 E5 FF 00 00 .DWORD 65509 +0003D4r 1 E6 FF 00 00 .DWORD 65510 +0003D8r 1 E7 FF 00 00 .DWORD 65511 +0003DCr 1 E8 FF 00 00 .DWORD 65512 +0003E0r 1 E9 FF 00 00 .DWORD 65513 +0003E4r 1 EA FF 00 00 .DWORD 65514 +0003E8r 1 EB FF 00 00 .DWORD 65515 +0003ECr 1 EC FF 00 00 .DWORD 65516 +0003F0r 1 ED FF 00 00 .DWORD 65517 +0003F4r 1 EE FF 00 00 .DWORD 65518 +0003F8r 1 EF FF 00 00 .DWORD 65519 +0003FCr 1 F0 FF 00 00 .DWORD 65520 +000400r 1 F1 FF 00 00 .DWORD 65521 +000404r 1 F2 FF 00 00 .DWORD 65522 +000408r 1 F3 FF 00 00 .DWORD 65523 +00040Cr 1 F4 FF 00 00 .DWORD 65524 +000410r 1 F5 FF 00 00 .DWORD 65525 +000414r 1 F6 FF 00 00 .DWORD 65526 +000418r 1 F7 FF 00 00 .DWORD 65527 +00041Cr 1 F8 FF 00 00 .DWORD 65528 +000420r 1 F9 FF 00 00 .DWORD 65529 +000424r 1 FA FF 00 00 .DWORD 65530 +000428r 1 FB FF 00 00 .DWORD 65531 +00042Cr 1 FC FF 00 00 .DWORD 65532 +000430r 1 FD FF 00 00 .DWORD 65533 +000434r 1 FE FF 00 00 .DWORD 65534 +000438r 1 FF FF 00 00 .DWORD 65535 +00043Cr 1 00 00 01 00 .DWORD 65536 +000440r 1 01 00 01 00 .DWORD 65537 +000444r 1 02 00 01 00 .DWORD 65538 +000448r 1 03 00 01 00 .DWORD 65539 +00044Cr 1 04 00 01 00 .DWORD 65540 +000450r 1 05 00 01 00 .DWORD 65541 +000454r 1 06 00 01 00 .DWORD 65542 +000458r 1 07 00 01 00 .DWORD 65543 +00045Cr 1 08 00 01 00 .DWORD 65544 +000460r 1 09 00 01 00 .DWORD 65545 +000464r 1 0A 00 01 00 .DWORD 65546 +000468r 1 0B 00 01 00 .DWORD 65547 +00046Cr 1 0C 00 01 00 .DWORD 65548 +000470r 1 0D 00 01 00 .DWORD 65549 +000474r 1 0E 00 01 00 .DWORD 65550 +000478r 1 0F 00 01 00 .DWORD 65551 +00047Cr 1 F0 FF FF 7F .DWORD 2147483632 +000480r 1 F1 FF FF 7F .DWORD 2147483633 +000484r 1 F2 FF FF 7F .DWORD 2147483634 +000488r 1 F3 FF FF 7F .DWORD 2147483635 +00048Cr 1 F4 FF FF 7F .DWORD 2147483636 +000490r 1 F5 FF FF 7F .DWORD 2147483637 +000494r 1 F6 FF FF 7F .DWORD 2147483638 +000498r 1 F7 FF FF 7F .DWORD 2147483639 +00049Cr 1 F8 FF FF 7F .DWORD 2147483640 +0004A0r 1 F9 FF FF 7F .DWORD 2147483641 +0004A4r 1 FA FF FF 7F .DWORD 2147483642 +0004A8r 1 FB FF FF 7F .DWORD 2147483643 +0004ACr 1 FC FF FF 7F .DWORD 2147483644 +0004B0r 1 FD FF FF 7F .DWORD 2147483645 +0004B4r 1 FE FF FF 7F .DWORD 2147483646 +0004B8r 1 FF FF FF 7F .DWORD 2147483647 +0004BCr 1 00 00 00 80 .DWORD 2147483648 +0004C0r 1 01 00 00 80 .DWORD 2147483649 +0004C4r 1 02 00 00 80 .DWORD 2147483650 +0004C8r 1 03 00 00 80 .DWORD 2147483651 +0004CCr 1 04 00 00 80 .DWORD 2147483652 +0004D0r 1 05 00 00 80 .DWORD 2147483653 +0004D4r 1 06 00 00 80 .DWORD 2147483654 +0004D8r 1 07 00 00 80 .DWORD 2147483655 +0004DCr 1 08 00 00 80 .DWORD 2147483656 +0004E0r 1 09 00 00 80 .DWORD 2147483657 +0004E4r 1 0A 00 00 80 .DWORD 2147483658 +0004E8r 1 0B 00 00 80 .DWORD 2147483659 +0004ECr 1 0C 00 00 80 .DWORD 2147483660 +0004F0r 1 0D 00 00 80 .DWORD 2147483661 +0004F4r 1 0E 00 00 80 .DWORD 2147483662 +0004F8r 1 0F 00 00 80 .DWORD 2147483663 +0004FCr 1 F0 FF FF 9F .DWORD 2684354544 +000500r 1 F1 FF FF 9F .DWORD 2684354545 +000504r 1 F2 FF FF 9F .DWORD 2684354546 +000508r 1 F3 FF FF 9F .DWORD 2684354547 +00050Cr 1 F4 FF FF 9F .DWORD 2684354548 +000510r 1 F5 FF FF 9F .DWORD 2684354549 +000514r 1 F6 FF FF 9F .DWORD 2684354550 +000518r 1 F7 FF FF 9F .DWORD 2684354551 +00051Cr 1 F8 FF FF 9F .DWORD 2684354552 +000520r 1 F9 FF FF 9F .DWORD 2684354553 +000524r 1 FA FF FF 9F .DWORD 2684354554 +000528r 1 FB FF FF 9F .DWORD 2684354555 +00052Cr 1 FC FF FF 9F .DWORD 2684354556 +000530r 1 FD FF FF 9F .DWORD 2684354557 +000534r 1 FE FF FF 9F .DWORD 2684354558 +000538r 1 FF FF FF 9F .DWORD 2684354559 +00053Cr 1 00 00 00 A0 .DWORD 2684354560 +000540r 1 01 00 00 A0 .DWORD 2684354561 +000544r 1 02 00 00 A0 .DWORD 2684354562 +000548r 1 03 00 00 A0 .DWORD 2684354563 +00054Cr 1 04 00 00 A0 .DWORD 2684354564 +000550r 1 05 00 00 A0 .DWORD 2684354565 +000554r 1 06 00 00 A0 .DWORD 2684354566 +000558r 1 07 00 00 A0 .DWORD 2684354567 +00055Cr 1 08 00 00 A0 .DWORD 2684354568 +000560r 1 09 00 00 A0 .DWORD 2684354569 +000564r 1 0A 00 00 A0 .DWORD 2684354570 +000568r 1 0B 00 00 A0 .DWORD 2684354571 +00056Cr 1 0C 00 00 A0 .DWORD 2684354572 +000570r 1 0D 00 00 A0 .DWORD 2684354573 +000574r 1 0E 00 00 A0 .DWORD 2684354574 +000578r 1 0F 00 00 A0 .DWORD 2684354575 +00057Cr 1 F0 FF FF FF .DWORD 4294967280 +000580r 1 F1 FF FF FF .DWORD 4294967281 +000584r 1 F2 FF FF FF .DWORD 4294967282 +000588r 1 F3 FF FF FF .DWORD 4294967283 +00058Cr 1 F4 FF FF FF .DWORD 4294967284 +000590r 1 F5 FF FF FF .DWORD 4294967285 +000594r 1 F6 FF FF FF .DWORD 4294967286 +000598r 1 F7 FF FF FF .DWORD 4294967287 +00059Cr 1 F8 FF FF FF .DWORD 4294967288 +0005A0r 1 F9 FF FF FF .DWORD 4294967289 +0005A4r 1 FA FF FF FF .DWORD 4294967290 +0005A8r 1 FB FF FF FF .DWORD 4294967291 +0005ACr 1 FC FF FF FF .DWORD 4294967292 +0005B0r 1 FD FF FF FF .DWORD 4294967293 +0005B4r 1 FE FF FF FF .DWORD 4294967294 +0005B8r 1 FF FF FF FF .DWORD 4294967295 0005BCr 1 -0005BCr 1 ; lower case pseudo-op -0005BCr 1 00 00 00 00 .dword 0 -0005C0r 1 01 00 00 00 .dword 1 -0005C4r 1 02 00 00 00 .dword 2 -0005C8r 1 03 00 00 00 .dword 3 -0005CCr 1 04 00 00 00 .dword 4 -0005D0r 1 05 00 00 00 .dword 5 -0005D4r 1 06 00 00 00 .dword 6 -0005D8r 1 07 00 00 00 .dword 7 -0005DCr 1 08 00 00 00 .dword 8 -0005E0r 1 09 00 00 00 .dword 9 -0005E4r 1 0A 00 00 00 .dword 10 -0005E8r 1 0B 00 00 00 .dword 11 -0005ECr 1 0C 00 00 00 .dword 12 -0005F0r 1 0D 00 00 00 .dword 13 -0005F4r 1 0E 00 00 00 .dword 14 -0005F8r 1 0F 00 00 00 .dword 15 -0005FCr 1 10 00 00 00 .dword 16 -000600r 1 11 00 00 00 .dword 17 -000604r 1 12 00 00 00 .dword 18 -000608r 1 13 00 00 00 .dword 19 -00060Cr 1 70 00 00 00 .dword 112 -000610r 1 71 00 00 00 .dword 113 -000614r 1 72 00 00 00 .dword 114 -000618r 1 73 00 00 00 .dword 115 -00061Cr 1 74 00 00 00 .dword 116 -000620r 1 75 00 00 00 .dword 117 -000624r 1 76 00 00 00 .dword 118 -000628r 1 77 00 00 00 .dword 119 -00062Cr 1 78 00 00 00 .dword 120 -000630r 1 79 00 00 00 .dword 121 -000634r 1 7A 00 00 00 .dword 122 -000638r 1 7B 00 00 00 .dword 123 -00063Cr 1 7C 00 00 00 .dword 124 -000640r 1 7D 00 00 00 .dword 125 -000644r 1 7E 00 00 00 .dword 126 -000648r 1 7F 00 00 00 .dword 127 -00064Cr 1 80 00 00 00 .dword 128 -000650r 1 81 00 00 00 .dword 129 -000654r 1 82 00 00 00 .dword 130 -000658r 1 83 00 00 00 .dword 131 -00065Cr 1 84 00 00 00 .dword 132 -000660r 1 85 00 00 00 .dword 133 -000664r 1 86 00 00 00 .dword 134 -000668r 1 F0 00 00 00 .dword 240 -00066Cr 1 F1 00 00 00 .dword 241 -000670r 1 F2 00 00 00 .dword 242 -000674r 1 F3 00 00 00 .dword 243 -000678r 1 F4 00 00 00 .dword 244 -00067Cr 1 F5 00 00 00 .dword 245 -000680r 1 F6 00 00 00 .dword 246 -000684r 1 F7 00 00 00 .dword 247 -000688r 1 F8 00 00 00 .dword 248 -00068Cr 1 F9 00 00 00 .dword 249 -000690r 1 FA 00 00 00 .dword 250 -000694r 1 FB 00 00 00 .dword 251 -000698r 1 FC 00 00 00 .dword 252 -00069Cr 1 FD 00 00 00 .dword 253 -0006A0r 1 FE 00 00 00 .dword 254 -0006A4r 1 FF 00 00 00 .dword 255 -0006A8r 1 00 01 00 00 .dword 256 -0006ACr 1 01 01 00 00 .dword 257 -0006B0r 1 02 01 00 00 .dword 258 -0006B4r 1 03 01 00 00 .dword 259 -0006B8r 1 D2 0F 00 00 .dword 4050 -0006BCr 1 D3 0F 00 00 .dword 4051 -0006C0r 1 D4 0F 00 00 .dword 4052 -0006C4r 1 D5 0F 00 00 .dword 4053 -0006C8r 1 D6 0F 00 00 .dword 4054 -0006CCr 1 D7 0F 00 00 .dword 4055 -0006D0r 1 D8 0F 00 00 .dword 4056 -0006D4r 1 D9 0F 00 00 .dword 4057 -0006D8r 1 DA 0F 00 00 .dword 4058 -0006DCr 1 DB 0F 00 00 .dword 4059 -0006E0r 1 DC 0F 00 00 .dword 4060 -0006E4r 1 DD 0F 00 00 .dword 4061 -0006E8r 1 DE 0F 00 00 .dword 4062 -0006ECr 1 DF 0F 00 00 .dword 4063 -0006F0r 1 E0 0F 00 00 .dword 4064 -0006F4r 1 E1 0F 00 00 .dword 4065 -0006F8r 1 E2 0F 00 00 .dword 4066 -0006FCr 1 E3 0F 00 00 .dword 4067 -000700r 1 E4 0F 00 00 .dword 4068 -000704r 1 E5 0F 00 00 .dword 4069 -000708r 1 E6 0F 00 00 .dword 4070 -00070Cr 1 E7 0F 00 00 .dword 4071 -000710r 1 E8 0F 00 00 .dword 4072 -000714r 1 E9 0F 00 00 .dword 4073 -000718r 1 EA 0F 00 00 .dword 4074 -00071Cr 1 EB 0F 00 00 .dword 4075 -000720r 1 EC 0F 00 00 .dword 4076 -000724r 1 ED 0F 00 00 .dword 4077 -000728r 1 EE 0F 00 00 .dword 4078 -00072Cr 1 EF 0F 00 00 .dword 4079 -000730r 1 F0 0F 00 00 .dword 4080 -000734r 1 F1 0F 00 00 .dword 4081 -000738r 1 F2 0F 00 00 .dword 4082 -00073Cr 1 F3 0F 00 00 .dword 4083 -000740r 1 F4 0F 00 00 .dword 4084 -000744r 1 F5 0F 00 00 .dword 4085 -000748r 1 F6 0F 00 00 .dword 4086 -00074Cr 1 F7 0F 00 00 .dword 4087 -000750r 1 F8 0F 00 00 .dword 4088 -000754r 1 F9 0F 00 00 .dword 4089 -000758r 1 FA 0F 00 00 .dword 4090 -00075Cr 1 FB 0F 00 00 .dword 4091 -000760r 1 FC 0F 00 00 .dword 4092 -000764r 1 FD 0F 00 00 .dword 4093 -000768r 1 FE 0F 00 00 .dword 4094 -00076Cr 1 FF 0F 00 00 .dword 4095 -000770r 1 00 10 00 00 .dword 4096 -000774r 1 01 10 00 00 .dword 4097 -000778r 1 02 10 00 00 .dword 4098 -00077Cr 1 03 10 00 00 .dword 4099 -000780r 1 04 10 00 00 .dword 4100 -000784r 1 05 10 00 00 .dword 4101 -000788r 1 06 10 00 00 .dword 4102 -00078Cr 1 07 10 00 00 .dword 4103 -000790r 1 08 10 00 00 .dword 4104 -000794r 1 F0 7F 00 00 .dword 32752 -000798r 1 F1 7F 00 00 .dword 32753 -00079Cr 1 F2 7F 00 00 .dword 32754 -0007A0r 1 F3 7F 00 00 .dword 32755 -0007A4r 1 F4 7F 00 00 .dword 32756 -0007A8r 1 F5 7F 00 00 .dword 32757 -0007ACr 1 F6 7F 00 00 .dword 32758 -0007B0r 1 F7 7F 00 00 .dword 32759 -0007B4r 1 F8 7F 00 00 .dword 32760 -0007B8r 1 F9 7F 00 00 .dword 32761 -0007BCr 1 FA 7F 00 00 .dword 32762 -0007C0r 1 FB 7F 00 00 .dword 32763 -0007C4r 1 FC 7F 00 00 .dword 32764 -0007C8r 1 FD 7F 00 00 .dword 32765 -0007CCr 1 FE 7F 00 00 .dword 32766 -0007D0r 1 FF 7F 00 00 .dword 32767 -0007D4r 1 00 80 00 00 .dword 32768 -0007D8r 1 01 80 00 00 .dword 32769 -0007DCr 1 02 80 00 00 .dword 32770 -0007E0r 1 03 80 00 00 .dword 32771 -0007E4r 1 04 80 00 00 .dword 32772 -0007E8r 1 05 80 00 00 .dword 32773 -0007ECr 1 06 80 00 00 .dword 32774 -0007F0r 1 07 80 00 00 .dword 32775 -0007F4r 1 08 80 00 00 .dword 32776 -0007F8r 1 09 80 00 00 .dword 32777 -0007FCr 1 0A 80 00 00 .dword 32778 -000800r 1 0B 80 00 00 .dword 32779 -000804r 1 E1 9F 00 00 .dword 40929 -000808r 1 E2 9F 00 00 .dword 40930 -00080Cr 1 E3 9F 00 00 .dword 40931 -000810r 1 E4 9F 00 00 .dword 40932 -000814r 1 E5 9F 00 00 .dword 40933 -000818r 1 E6 9F 00 00 .dword 40934 -00081Cr 1 E7 9F 00 00 .dword 40935 -000820r 1 E8 9F 00 00 .dword 40936 -000824r 1 E9 9F 00 00 .dword 40937 -000828r 1 EA 9F 00 00 .dword 40938 -00082Cr 1 EB 9F 00 00 .dword 40939 -000830r 1 EC 9F 00 00 .dword 40940 -000834r 1 ED 9F 00 00 .dword 40941 -000838r 1 EE 9F 00 00 .dword 40942 -00083Cr 1 EF 9F 00 00 .dword 40943 -000840r 1 F0 9F 00 00 .dword 40944 -000844r 1 F1 9F 00 00 .dword 40945 -000848r 1 F2 9F 00 00 .dword 40946 -00084Cr 1 F3 9F 00 00 .dword 40947 -000850r 1 F4 9F 00 00 .dword 40948 -000854r 1 F5 9F 00 00 .dword 40949 -000858r 1 F6 9F 00 00 .dword 40950 -00085Cr 1 F7 9F 00 00 .dword 40951 -000860r 1 F8 9F 00 00 .dword 40952 -000864r 1 F9 9F 00 00 .dword 40953 -000868r 1 FA 9F 00 00 .dword 40954 -00086Cr 1 FB 9F 00 00 .dword 40955 -000870r 1 FC 9F 00 00 .dword 40956 -000874r 1 FD 9F 00 00 .dword 40957 -000878r 1 FE 9F 00 00 .dword 40958 -00087Cr 1 FF 9F 00 00 .dword 40959 -000880r 1 00 A0 00 00 .dword 40960 -000884r 1 01 A0 00 00 .dword 40961 -000888r 1 02 A0 00 00 .dword 40962 -00088Cr 1 03 A0 00 00 .dword 40963 -000890r 1 04 A0 00 00 .dword 40964 -000894r 1 05 A0 00 00 .dword 40965 -000898r 1 06 A0 00 00 .dword 40966 -00089Cr 1 07 A0 00 00 .dword 40967 -0008A0r 1 08 A0 00 00 .dword 40968 -0008A4r 1 09 A0 00 00 .dword 40969 -0008A8r 1 0A A0 00 00 .dword 40970 -0008ACr 1 0B A0 00 00 .dword 40971 -0008B0r 1 0C A0 00 00 .dword 40972 -0008B4r 1 0D A0 00 00 .dword 40973 -0008B8r 1 0E A0 00 00 .dword 40974 -0008BCr 1 0F A0 00 00 .dword 40975 -0008C0r 1 E1 AF 00 00 .dword 45025 -0008C4r 1 E2 AF 00 00 .dword 45026 -0008C8r 1 E3 AF 00 00 .dword 45027 -0008CCr 1 E4 AF 00 00 .dword 45028 -0008D0r 1 E5 AF 00 00 .dword 45029 -0008D4r 1 E6 AF 00 00 .dword 45030 -0008D8r 1 E7 AF 00 00 .dword 45031 -0008DCr 1 E8 AF 00 00 .dword 45032 -0008E0r 1 E9 AF 00 00 .dword 45033 -0008E4r 1 EA AF 00 00 .dword 45034 -0008E8r 1 EB AF 00 00 .dword 45035 -0008ECr 1 EC AF 00 00 .dword 45036 -0008F0r 1 ED AF 00 00 .dword 45037 -0008F4r 1 EE AF 00 00 .dword 45038 -0008F8r 1 EF AF 00 00 .dword 45039 -0008FCr 1 F0 AF 00 00 .dword 45040 -000900r 1 F1 AF 00 00 .dword 45041 -000904r 1 F2 AF 00 00 .dword 45042 -000908r 1 F3 AF 00 00 .dword 45043 -00090Cr 1 F4 AF 00 00 .dword 45044 -000910r 1 F5 AF 00 00 .dword 45045 -000914r 1 F6 AF 00 00 .dword 45046 -000918r 1 F7 AF 00 00 .dword 45047 -00091Cr 1 F8 AF 00 00 .dword 45048 -000920r 1 F9 AF 00 00 .dword 45049 -000924r 1 FA AF 00 00 .dword 45050 -000928r 1 FB AF 00 00 .dword 45051 -00092Cr 1 FC AF 00 00 .dword 45052 -000930r 1 FD AF 00 00 .dword 45053 -000934r 1 FE AF 00 00 .dword 45054 -000938r 1 FF AF 00 00 .dword 45055 -00093Cr 1 00 B0 00 00 .dword 45056 -000940r 1 01 B0 00 00 .dword 45057 -000944r 1 02 B0 00 00 .dword 45058 -000948r 1 03 B0 00 00 .dword 45059 -00094Cr 1 04 B0 00 00 .dword 45060 -000950r 1 05 B0 00 00 .dword 45061 -000954r 1 06 B0 00 00 .dword 45062 -000958r 1 07 B0 00 00 .dword 45063 -00095Cr 1 08 B0 00 00 .dword 45064 -000960r 1 09 B0 00 00 .dword 45065 -000964r 1 0A B0 00 00 .dword 45066 -000968r 1 0B B0 00 00 .dword 45067 -00096Cr 1 0C B0 00 00 .dword 45068 -000970r 1 0D B0 00 00 .dword 45069 -000974r 1 0E B0 00 00 .dword 45070 -000978r 1 0F B0 00 00 .dword 45071 -00097Cr 1 E1 FF 00 00 .dword 65505 -000980r 1 E2 FF 00 00 .dword 65506 -000984r 1 E3 FF 00 00 .dword 65507 -000988r 1 E4 FF 00 00 .dword 65508 -00098Cr 1 E5 FF 00 00 .dword 65509 -000990r 1 E6 FF 00 00 .dword 65510 -000994r 1 E7 FF 00 00 .dword 65511 -000998r 1 E8 FF 00 00 .dword 65512 -00099Cr 1 E9 FF 00 00 .dword 65513 -0009A0r 1 EA FF 00 00 .dword 65514 -0009A4r 1 EB FF 00 00 .dword 65515 -0009A8r 1 EC FF 00 00 .dword 65516 -0009ACr 1 ED FF 00 00 .dword 65517 -0009B0r 1 EE FF 00 00 .dword 65518 -0009B4r 1 EF FF 00 00 .dword 65519 -0009B8r 1 F0 FF 00 00 .dword 65520 -0009BCr 1 F1 FF 00 00 .dword 65521 -0009C0r 1 F2 FF 00 00 .dword 65522 -0009C4r 1 F3 FF 00 00 .dword 65523 -0009C8r 1 F4 FF 00 00 .dword 65524 -0009CCr 1 F5 FF 00 00 .dword 65525 -0009D0r 1 F6 FF 00 00 .dword 65526 -0009D4r 1 F7 FF 00 00 .dword 65527 -0009D8r 1 F8 FF 00 00 .dword 65528 -0009DCr 1 F9 FF 00 00 .dword 65529 -0009E0r 1 FA FF 00 00 .dword 65530 -0009E4r 1 FB FF 00 00 .dword 65531 -0009E8r 1 FC FF 00 00 .dword 65532 -0009ECr 1 FD FF 00 00 .dword 65533 -0009F0r 1 FE FF 00 00 .dword 65534 -0009F4r 1 FF FF 00 00 .dword 65535 -0009F8r 1 00 00 01 00 .dword 65536 -0009FCr 1 01 00 01 00 .dword 65537 -000A00r 1 02 00 01 00 .dword 65538 -000A04r 1 03 00 01 00 .dword 65539 -000A08r 1 04 00 01 00 .dword 65540 -000A0Cr 1 05 00 01 00 .dword 65541 -000A10r 1 06 00 01 00 .dword 65542 -000A14r 1 07 00 01 00 .dword 65543 -000A18r 1 08 00 01 00 .dword 65544 -000A1Cr 1 09 00 01 00 .dword 65545 -000A20r 1 0A 00 01 00 .dword 65546 -000A24r 1 0B 00 01 00 .dword 65547 -000A28r 1 0C 00 01 00 .dword 65548 -000A2Cr 1 0D 00 01 00 .dword 65549 -000A30r 1 0E 00 01 00 .dword 65550 -000A34r 1 0F 00 01 00 .dword 65551 -000A38r 1 F0 FF FF 7F .dword 2147483632 -000A3Cr 1 F1 FF FF 7F .dword 2147483633 -000A40r 1 F2 FF FF 7F .dword 2147483634 -000A44r 1 F3 FF FF 7F .dword 2147483635 -000A48r 1 F4 FF FF 7F .dword 2147483636 -000A4Cr 1 F5 FF FF 7F .dword 2147483637 -000A50r 1 F6 FF FF 7F .dword 2147483638 -000A54r 1 F7 FF FF 7F .dword 2147483639 -000A58r 1 F8 FF FF 7F .dword 2147483640 -000A5Cr 1 F9 FF FF 7F .dword 2147483641 -000A60r 1 FA FF FF 7F .dword 2147483642 -000A64r 1 FB FF FF 7F .dword 2147483643 -000A68r 1 FC FF FF 7F .dword 2147483644 -000A6Cr 1 FD FF FF 7F .dword 2147483645 -000A70r 1 FE FF FF 7F .dword 2147483646 -000A74r 1 FF FF FF 7F .dword 2147483647 -000A78r 1 00 00 00 80 .dword 2147483648 -000A7Cr 1 01 00 00 80 .dword 2147483649 -000A80r 1 02 00 00 80 .dword 2147483650 -000A84r 1 03 00 00 80 .dword 2147483651 -000A88r 1 04 00 00 80 .dword 2147483652 -000A8Cr 1 05 00 00 80 .dword 2147483653 -000A90r 1 06 00 00 80 .dword 2147483654 -000A94r 1 07 00 00 80 .dword 2147483655 -000A98r 1 08 00 00 80 .dword 2147483656 -000A9Cr 1 09 00 00 80 .dword 2147483657 -000AA0r 1 0A 00 00 80 .dword 2147483658 -000AA4r 1 0B 00 00 80 .dword 2147483659 -000AA8r 1 0C 00 00 80 .dword 2147483660 -000AACr 1 0D 00 00 80 .dword 2147483661 -000AB0r 1 0E 00 00 80 .dword 2147483662 -000AB4r 1 0F 00 00 80 .dword 2147483663 -000AB8r 1 F0 FF FF 9F .dword 2684354544 -000ABCr 1 F1 FF FF 9F .dword 2684354545 -000AC0r 1 F2 FF FF 9F .dword 2684354546 -000AC4r 1 F3 FF FF 9F .dword 2684354547 -000AC8r 1 F4 FF FF 9F .dword 2684354548 -000ACCr 1 F5 FF FF 9F .dword 2684354549 -000AD0r 1 F6 FF FF 9F .dword 2684354550 -000AD4r 1 F7 FF FF 9F .dword 2684354551 -000AD8r 1 F8 FF FF 9F .dword 2684354552 -000ADCr 1 F9 FF FF 9F .dword 2684354553 -000AE0r 1 FA FF FF 9F .dword 2684354554 -000AE4r 1 FB FF FF 9F .dword 2684354555 -000AE8r 1 FC FF FF 9F .dword 2684354556 -000AECr 1 FD FF FF 9F .dword 2684354557 -000AF0r 1 FE FF FF 9F .dword 2684354558 -000AF4r 1 FF FF FF 9F .dword 2684354559 -000AF8r 1 00 00 00 A0 .dword 2684354560 -000AFCr 1 01 00 00 A0 .dword 2684354561 -000B00r 1 02 00 00 A0 .dword 2684354562 -000B04r 1 03 00 00 A0 .dword 2684354563 -000B08r 1 04 00 00 A0 .dword 2684354564 -000B0Cr 1 05 00 00 A0 .dword 2684354565 -000B10r 1 06 00 00 A0 .dword 2684354566 -000B14r 1 07 00 00 A0 .dword 2684354567 -000B18r 1 08 00 00 A0 .dword 2684354568 -000B1Cr 1 09 00 00 A0 .dword 2684354569 -000B20r 1 0A 00 00 A0 .dword 2684354570 -000B24r 1 0B 00 00 A0 .dword 2684354571 -000B28r 1 0C 00 00 A0 .dword 2684354572 -000B2Cr 1 0D 00 00 A0 .dword 2684354573 -000B30r 1 0E 00 00 A0 .dword 2684354574 -000B34r 1 0F 00 00 A0 .dword 2684354575 -000B38r 1 F0 FF FF FF .dword 4294967280 -000B3Cr 1 F1 FF FF FF .dword 4294967281 -000B40r 1 F2 FF FF FF .dword 4294967282 -000B44r 1 F3 FF FF FF .dword 4294967283 -000B48r 1 F4 FF FF FF .dword 4294967284 -000B4Cr 1 F5 FF FF FF .dword 4294967285 -000B50r 1 F6 FF FF FF .dword 4294967286 -000B54r 1 F7 FF FF FF .dword 4294967287 -000B58r 1 F8 FF FF FF .dword 4294967288 -000B5Cr 1 F9 FF FF FF .dword 4294967289 -000B60r 1 FA FF FF FF .dword 4294967290 -000B64r 1 FB FF FF FF .dword 4294967291 -000B68r 1 FC FF FF FF .dword 4294967292 -000B6Cr 1 FD FF FF FF .dword 4294967293 -000B70r 1 FE FF FF FF .dword 4294967294 -000B74r 1 FF FF FF FF .dword 4294967295 +0005BCr 1 ; lower case pseudo-op +0005BCr 1 00 00 00 00 .dword 0 +0005C0r 1 01 00 00 00 .dword 1 +0005C4r 1 02 00 00 00 .dword 2 +0005C8r 1 03 00 00 00 .dword 3 +0005CCr 1 04 00 00 00 .dword 4 +0005D0r 1 05 00 00 00 .dword 5 +0005D4r 1 06 00 00 00 .dword 6 +0005D8r 1 07 00 00 00 .dword 7 +0005DCr 1 08 00 00 00 .dword 8 +0005E0r 1 09 00 00 00 .dword 9 +0005E4r 1 0A 00 00 00 .dword 10 +0005E8r 1 0B 00 00 00 .dword 11 +0005ECr 1 0C 00 00 00 .dword 12 +0005F0r 1 0D 00 00 00 .dword 13 +0005F4r 1 0E 00 00 00 .dword 14 +0005F8r 1 0F 00 00 00 .dword 15 +0005FCr 1 10 00 00 00 .dword 16 +000600r 1 11 00 00 00 .dword 17 +000604r 1 12 00 00 00 .dword 18 +000608r 1 13 00 00 00 .dword 19 +00060Cr 1 70 00 00 00 .dword 112 +000610r 1 71 00 00 00 .dword 113 +000614r 1 72 00 00 00 .dword 114 +000618r 1 73 00 00 00 .dword 115 +00061Cr 1 74 00 00 00 .dword 116 +000620r 1 75 00 00 00 .dword 117 +000624r 1 76 00 00 00 .dword 118 +000628r 1 77 00 00 00 .dword 119 +00062Cr 1 78 00 00 00 .dword 120 +000630r 1 79 00 00 00 .dword 121 +000634r 1 7A 00 00 00 .dword 122 +000638r 1 7B 00 00 00 .dword 123 +00063Cr 1 7C 00 00 00 .dword 124 +000640r 1 7D 00 00 00 .dword 125 +000644r 1 7E 00 00 00 .dword 126 +000648r 1 7F 00 00 00 .dword 127 +00064Cr 1 80 00 00 00 .dword 128 +000650r 1 81 00 00 00 .dword 129 +000654r 1 82 00 00 00 .dword 130 +000658r 1 83 00 00 00 .dword 131 +00065Cr 1 84 00 00 00 .dword 132 +000660r 1 85 00 00 00 .dword 133 +000664r 1 86 00 00 00 .dword 134 +000668r 1 F0 00 00 00 .dword 240 +00066Cr 1 F1 00 00 00 .dword 241 +000670r 1 F2 00 00 00 .dword 242 +000674r 1 F3 00 00 00 .dword 243 +000678r 1 F4 00 00 00 .dword 244 +00067Cr 1 F5 00 00 00 .dword 245 +000680r 1 F6 00 00 00 .dword 246 +000684r 1 F7 00 00 00 .dword 247 +000688r 1 F8 00 00 00 .dword 248 +00068Cr 1 F9 00 00 00 .dword 249 +000690r 1 FA 00 00 00 .dword 250 +000694r 1 FB 00 00 00 .dword 251 +000698r 1 FC 00 00 00 .dword 252 +00069Cr 1 FD 00 00 00 .dword 253 +0006A0r 1 FE 00 00 00 .dword 254 +0006A4r 1 FF 00 00 00 .dword 255 +0006A8r 1 00 01 00 00 .dword 256 +0006ACr 1 01 01 00 00 .dword 257 +0006B0r 1 02 01 00 00 .dword 258 +0006B4r 1 03 01 00 00 .dword 259 +0006B8r 1 D2 0F 00 00 .dword 4050 +0006BCr 1 D3 0F 00 00 .dword 4051 +0006C0r 1 D4 0F 00 00 .dword 4052 +0006C4r 1 D5 0F 00 00 .dword 4053 +0006C8r 1 D6 0F 00 00 .dword 4054 +0006CCr 1 D7 0F 00 00 .dword 4055 +0006D0r 1 D8 0F 00 00 .dword 4056 +0006D4r 1 D9 0F 00 00 .dword 4057 +0006D8r 1 DA 0F 00 00 .dword 4058 +0006DCr 1 DB 0F 00 00 .dword 4059 +0006E0r 1 DC 0F 00 00 .dword 4060 +0006E4r 1 DD 0F 00 00 .dword 4061 +0006E8r 1 DE 0F 00 00 .dword 4062 +0006ECr 1 DF 0F 00 00 .dword 4063 +0006F0r 1 E0 0F 00 00 .dword 4064 +0006F4r 1 E1 0F 00 00 .dword 4065 +0006F8r 1 E2 0F 00 00 .dword 4066 +0006FCr 1 E3 0F 00 00 .dword 4067 +000700r 1 E4 0F 00 00 .dword 4068 +000704r 1 E5 0F 00 00 .dword 4069 +000708r 1 E6 0F 00 00 .dword 4070 +00070Cr 1 E7 0F 00 00 .dword 4071 +000710r 1 E8 0F 00 00 .dword 4072 +000714r 1 E9 0F 00 00 .dword 4073 +000718r 1 EA 0F 00 00 .dword 4074 +00071Cr 1 EB 0F 00 00 .dword 4075 +000720r 1 EC 0F 00 00 .dword 4076 +000724r 1 ED 0F 00 00 .dword 4077 +000728r 1 EE 0F 00 00 .dword 4078 +00072Cr 1 EF 0F 00 00 .dword 4079 +000730r 1 F0 0F 00 00 .dword 4080 +000734r 1 F1 0F 00 00 .dword 4081 +000738r 1 F2 0F 00 00 .dword 4082 +00073Cr 1 F3 0F 00 00 .dword 4083 +000740r 1 F4 0F 00 00 .dword 4084 +000744r 1 F5 0F 00 00 .dword 4085 +000748r 1 F6 0F 00 00 .dword 4086 +00074Cr 1 F7 0F 00 00 .dword 4087 +000750r 1 F8 0F 00 00 .dword 4088 +000754r 1 F9 0F 00 00 .dword 4089 +000758r 1 FA 0F 00 00 .dword 4090 +00075Cr 1 FB 0F 00 00 .dword 4091 +000760r 1 FC 0F 00 00 .dword 4092 +000764r 1 FD 0F 00 00 .dword 4093 +000768r 1 FE 0F 00 00 .dword 4094 +00076Cr 1 FF 0F 00 00 .dword 4095 +000770r 1 00 10 00 00 .dword 4096 +000774r 1 01 10 00 00 .dword 4097 +000778r 1 02 10 00 00 .dword 4098 +00077Cr 1 03 10 00 00 .dword 4099 +000780r 1 04 10 00 00 .dword 4100 +000784r 1 05 10 00 00 .dword 4101 +000788r 1 06 10 00 00 .dword 4102 +00078Cr 1 07 10 00 00 .dword 4103 +000790r 1 08 10 00 00 .dword 4104 +000794r 1 F0 7F 00 00 .dword 32752 +000798r 1 F1 7F 00 00 .dword 32753 +00079Cr 1 F2 7F 00 00 .dword 32754 +0007A0r 1 F3 7F 00 00 .dword 32755 +0007A4r 1 F4 7F 00 00 .dword 32756 +0007A8r 1 F5 7F 00 00 .dword 32757 +0007ACr 1 F6 7F 00 00 .dword 32758 +0007B0r 1 F7 7F 00 00 .dword 32759 +0007B4r 1 F8 7F 00 00 .dword 32760 +0007B8r 1 F9 7F 00 00 .dword 32761 +0007BCr 1 FA 7F 00 00 .dword 32762 +0007C0r 1 FB 7F 00 00 .dword 32763 +0007C4r 1 FC 7F 00 00 .dword 32764 +0007C8r 1 FD 7F 00 00 .dword 32765 +0007CCr 1 FE 7F 00 00 .dword 32766 +0007D0r 1 FF 7F 00 00 .dword 32767 +0007D4r 1 00 80 00 00 .dword 32768 +0007D8r 1 01 80 00 00 .dword 32769 +0007DCr 1 02 80 00 00 .dword 32770 +0007E0r 1 03 80 00 00 .dword 32771 +0007E4r 1 04 80 00 00 .dword 32772 +0007E8r 1 05 80 00 00 .dword 32773 +0007ECr 1 06 80 00 00 .dword 32774 +0007F0r 1 07 80 00 00 .dword 32775 +0007F4r 1 08 80 00 00 .dword 32776 +0007F8r 1 09 80 00 00 .dword 32777 +0007FCr 1 0A 80 00 00 .dword 32778 +000800r 1 0B 80 00 00 .dword 32779 +000804r 1 E1 9F 00 00 .dword 40929 +000808r 1 E2 9F 00 00 .dword 40930 +00080Cr 1 E3 9F 00 00 .dword 40931 +000810r 1 E4 9F 00 00 .dword 40932 +000814r 1 E5 9F 00 00 .dword 40933 +000818r 1 E6 9F 00 00 .dword 40934 +00081Cr 1 E7 9F 00 00 .dword 40935 +000820r 1 E8 9F 00 00 .dword 40936 +000824r 1 E9 9F 00 00 .dword 40937 +000828r 1 EA 9F 00 00 .dword 40938 +00082Cr 1 EB 9F 00 00 .dword 40939 +000830r 1 EC 9F 00 00 .dword 40940 +000834r 1 ED 9F 00 00 .dword 40941 +000838r 1 EE 9F 00 00 .dword 40942 +00083Cr 1 EF 9F 00 00 .dword 40943 +000840r 1 F0 9F 00 00 .dword 40944 +000844r 1 F1 9F 00 00 .dword 40945 +000848r 1 F2 9F 00 00 .dword 40946 +00084Cr 1 F3 9F 00 00 .dword 40947 +000850r 1 F4 9F 00 00 .dword 40948 +000854r 1 F5 9F 00 00 .dword 40949 +000858r 1 F6 9F 00 00 .dword 40950 +00085Cr 1 F7 9F 00 00 .dword 40951 +000860r 1 F8 9F 00 00 .dword 40952 +000864r 1 F9 9F 00 00 .dword 40953 +000868r 1 FA 9F 00 00 .dword 40954 +00086Cr 1 FB 9F 00 00 .dword 40955 +000870r 1 FC 9F 00 00 .dword 40956 +000874r 1 FD 9F 00 00 .dword 40957 +000878r 1 FE 9F 00 00 .dword 40958 +00087Cr 1 FF 9F 00 00 .dword 40959 +000880r 1 00 A0 00 00 .dword 40960 +000884r 1 01 A0 00 00 .dword 40961 +000888r 1 02 A0 00 00 .dword 40962 +00088Cr 1 03 A0 00 00 .dword 40963 +000890r 1 04 A0 00 00 .dword 40964 +000894r 1 05 A0 00 00 .dword 40965 +000898r 1 06 A0 00 00 .dword 40966 +00089Cr 1 07 A0 00 00 .dword 40967 +0008A0r 1 08 A0 00 00 .dword 40968 +0008A4r 1 09 A0 00 00 .dword 40969 +0008A8r 1 0A A0 00 00 .dword 40970 +0008ACr 1 0B A0 00 00 .dword 40971 +0008B0r 1 0C A0 00 00 .dword 40972 +0008B4r 1 0D A0 00 00 .dword 40973 +0008B8r 1 0E A0 00 00 .dword 40974 +0008BCr 1 0F A0 00 00 .dword 40975 +0008C0r 1 E1 AF 00 00 .dword 45025 +0008C4r 1 E2 AF 00 00 .dword 45026 +0008C8r 1 E3 AF 00 00 .dword 45027 +0008CCr 1 E4 AF 00 00 .dword 45028 +0008D0r 1 E5 AF 00 00 .dword 45029 +0008D4r 1 E6 AF 00 00 .dword 45030 +0008D8r 1 E7 AF 00 00 .dword 45031 +0008DCr 1 E8 AF 00 00 .dword 45032 +0008E0r 1 E9 AF 00 00 .dword 45033 +0008E4r 1 EA AF 00 00 .dword 45034 +0008E8r 1 EB AF 00 00 .dword 45035 +0008ECr 1 EC AF 00 00 .dword 45036 +0008F0r 1 ED AF 00 00 .dword 45037 +0008F4r 1 EE AF 00 00 .dword 45038 +0008F8r 1 EF AF 00 00 .dword 45039 +0008FCr 1 F0 AF 00 00 .dword 45040 +000900r 1 F1 AF 00 00 .dword 45041 +000904r 1 F2 AF 00 00 .dword 45042 +000908r 1 F3 AF 00 00 .dword 45043 +00090Cr 1 F4 AF 00 00 .dword 45044 +000910r 1 F5 AF 00 00 .dword 45045 +000914r 1 F6 AF 00 00 .dword 45046 +000918r 1 F7 AF 00 00 .dword 45047 +00091Cr 1 F8 AF 00 00 .dword 45048 +000920r 1 F9 AF 00 00 .dword 45049 +000924r 1 FA AF 00 00 .dword 45050 +000928r 1 FB AF 00 00 .dword 45051 +00092Cr 1 FC AF 00 00 .dword 45052 +000930r 1 FD AF 00 00 .dword 45053 +000934r 1 FE AF 00 00 .dword 45054 +000938r 1 FF AF 00 00 .dword 45055 +00093Cr 1 00 B0 00 00 .dword 45056 +000940r 1 01 B0 00 00 .dword 45057 +000944r 1 02 B0 00 00 .dword 45058 +000948r 1 03 B0 00 00 .dword 45059 +00094Cr 1 04 B0 00 00 .dword 45060 +000950r 1 05 B0 00 00 .dword 45061 +000954r 1 06 B0 00 00 .dword 45062 +000958r 1 07 B0 00 00 .dword 45063 +00095Cr 1 08 B0 00 00 .dword 45064 +000960r 1 09 B0 00 00 .dword 45065 +000964r 1 0A B0 00 00 .dword 45066 +000968r 1 0B B0 00 00 .dword 45067 +00096Cr 1 0C B0 00 00 .dword 45068 +000970r 1 0D B0 00 00 .dword 45069 +000974r 1 0E B0 00 00 .dword 45070 +000978r 1 0F B0 00 00 .dword 45071 +00097Cr 1 E1 FF 00 00 .dword 65505 +000980r 1 E2 FF 00 00 .dword 65506 +000984r 1 E3 FF 00 00 .dword 65507 +000988r 1 E4 FF 00 00 .dword 65508 +00098Cr 1 E5 FF 00 00 .dword 65509 +000990r 1 E6 FF 00 00 .dword 65510 +000994r 1 E7 FF 00 00 .dword 65511 +000998r 1 E8 FF 00 00 .dword 65512 +00099Cr 1 E9 FF 00 00 .dword 65513 +0009A0r 1 EA FF 00 00 .dword 65514 +0009A4r 1 EB FF 00 00 .dword 65515 +0009A8r 1 EC FF 00 00 .dword 65516 +0009ACr 1 ED FF 00 00 .dword 65517 +0009B0r 1 EE FF 00 00 .dword 65518 +0009B4r 1 EF FF 00 00 .dword 65519 +0009B8r 1 F0 FF 00 00 .dword 65520 +0009BCr 1 F1 FF 00 00 .dword 65521 +0009C0r 1 F2 FF 00 00 .dword 65522 +0009C4r 1 F3 FF 00 00 .dword 65523 +0009C8r 1 F4 FF 00 00 .dword 65524 +0009CCr 1 F5 FF 00 00 .dword 65525 +0009D0r 1 F6 FF 00 00 .dword 65526 +0009D4r 1 F7 FF 00 00 .dword 65527 +0009D8r 1 F8 FF 00 00 .dword 65528 +0009DCr 1 F9 FF 00 00 .dword 65529 +0009E0r 1 FA FF 00 00 .dword 65530 +0009E4r 1 FB FF 00 00 .dword 65531 +0009E8r 1 FC FF 00 00 .dword 65532 +0009ECr 1 FD FF 00 00 .dword 65533 +0009F0r 1 FE FF 00 00 .dword 65534 +0009F4r 1 FF FF 00 00 .dword 65535 +0009F8r 1 00 00 01 00 .dword 65536 +0009FCr 1 01 00 01 00 .dword 65537 +000A00r 1 02 00 01 00 .dword 65538 +000A04r 1 03 00 01 00 .dword 65539 +000A08r 1 04 00 01 00 .dword 65540 +000A0Cr 1 05 00 01 00 .dword 65541 +000A10r 1 06 00 01 00 .dword 65542 +000A14r 1 07 00 01 00 .dword 65543 +000A18r 1 08 00 01 00 .dword 65544 +000A1Cr 1 09 00 01 00 .dword 65545 +000A20r 1 0A 00 01 00 .dword 65546 +000A24r 1 0B 00 01 00 .dword 65547 +000A28r 1 0C 00 01 00 .dword 65548 +000A2Cr 1 0D 00 01 00 .dword 65549 +000A30r 1 0E 00 01 00 .dword 65550 +000A34r 1 0F 00 01 00 .dword 65551 +000A38r 1 F0 FF FF 7F .dword 2147483632 +000A3Cr 1 F1 FF FF 7F .dword 2147483633 +000A40r 1 F2 FF FF 7F .dword 2147483634 +000A44r 1 F3 FF FF 7F .dword 2147483635 +000A48r 1 F4 FF FF 7F .dword 2147483636 +000A4Cr 1 F5 FF FF 7F .dword 2147483637 +000A50r 1 F6 FF FF 7F .dword 2147483638 +000A54r 1 F7 FF FF 7F .dword 2147483639 +000A58r 1 F8 FF FF 7F .dword 2147483640 +000A5Cr 1 F9 FF FF 7F .dword 2147483641 +000A60r 1 FA FF FF 7F .dword 2147483642 +000A64r 1 FB FF FF 7F .dword 2147483643 +000A68r 1 FC FF FF 7F .dword 2147483644 +000A6Cr 1 FD FF FF 7F .dword 2147483645 +000A70r 1 FE FF FF 7F .dword 2147483646 +000A74r 1 FF FF FF 7F .dword 2147483647 +000A78r 1 00 00 00 80 .dword 2147483648 +000A7Cr 1 01 00 00 80 .dword 2147483649 +000A80r 1 02 00 00 80 .dword 2147483650 +000A84r 1 03 00 00 80 .dword 2147483651 +000A88r 1 04 00 00 80 .dword 2147483652 +000A8Cr 1 05 00 00 80 .dword 2147483653 +000A90r 1 06 00 00 80 .dword 2147483654 +000A94r 1 07 00 00 80 .dword 2147483655 +000A98r 1 08 00 00 80 .dword 2147483656 +000A9Cr 1 09 00 00 80 .dword 2147483657 +000AA0r 1 0A 00 00 80 .dword 2147483658 +000AA4r 1 0B 00 00 80 .dword 2147483659 +000AA8r 1 0C 00 00 80 .dword 2147483660 +000AACr 1 0D 00 00 80 .dword 2147483661 +000AB0r 1 0E 00 00 80 .dword 2147483662 +000AB4r 1 0F 00 00 80 .dword 2147483663 +000AB8r 1 F0 FF FF 9F .dword 2684354544 +000ABCr 1 F1 FF FF 9F .dword 2684354545 +000AC0r 1 F2 FF FF 9F .dword 2684354546 +000AC4r 1 F3 FF FF 9F .dword 2684354547 +000AC8r 1 F4 FF FF 9F .dword 2684354548 +000ACCr 1 F5 FF FF 9F .dword 2684354549 +000AD0r 1 F6 FF FF 9F .dword 2684354550 +000AD4r 1 F7 FF FF 9F .dword 2684354551 +000AD8r 1 F8 FF FF 9F .dword 2684354552 +000ADCr 1 F9 FF FF 9F .dword 2684354553 +000AE0r 1 FA FF FF 9F .dword 2684354554 +000AE4r 1 FB FF FF 9F .dword 2684354555 +000AE8r 1 FC FF FF 9F .dword 2684354556 +000AECr 1 FD FF FF 9F .dword 2684354557 +000AF0r 1 FE FF FF 9F .dword 2684354558 +000AF4r 1 FF FF FF 9F .dword 2684354559 +000AF8r 1 00 00 00 A0 .dword 2684354560 +000AFCr 1 01 00 00 A0 .dword 2684354561 +000B00r 1 02 00 00 A0 .dword 2684354562 +000B04r 1 03 00 00 A0 .dword 2684354563 +000B08r 1 04 00 00 A0 .dword 2684354564 +000B0Cr 1 05 00 00 A0 .dword 2684354565 +000B10r 1 06 00 00 A0 .dword 2684354566 +000B14r 1 07 00 00 A0 .dword 2684354567 +000B18r 1 08 00 00 A0 .dword 2684354568 +000B1Cr 1 09 00 00 A0 .dword 2684354569 +000B20r 1 0A 00 00 A0 .dword 2684354570 +000B24r 1 0B 00 00 A0 .dword 2684354571 +000B28r 1 0C 00 00 A0 .dword 2684354572 +000B2Cr 1 0D 00 00 A0 .dword 2684354573 +000B30r 1 0E 00 00 A0 .dword 2684354574 +000B34r 1 0F 00 00 A0 .dword 2684354575 +000B38r 1 F0 FF FF FF .dword 4294967280 +000B3Cr 1 F1 FF FF FF .dword 4294967281 +000B40r 1 F2 FF FF FF .dword 4294967282 +000B44r 1 F3 FF FF FF .dword 4294967283 +000B48r 1 F4 FF FF FF .dword 4294967284 +000B4Cr 1 F5 FF FF FF .dword 4294967285 +000B50r 1 F6 FF FF FF .dword 4294967286 +000B54r 1 F7 FF FF FF .dword 4294967287 +000B58r 1 F8 FF FF FF .dword 4294967288 +000B5Cr 1 F9 FF FF FF .dword 4294967289 +000B60r 1 FA FF FF FF .dword 4294967290 +000B64r 1 FB FF FF FF .dword 4294967291 +000B68r 1 FC FF FF FF .dword 4294967292 +000B6Cr 1 FD FF FF FF .dword 4294967293 +000B70r 1 FE FF FF FF .dword 4294967294 +000B74r 1 FF FF FF FF .dword 4294967295 000B78r 1 -000B78r 1 ; hex values -000B78r 1 00 00 00 00 .dword $0 -000B7Cr 1 01 00 00 00 .dword $1 -000B80r 1 02 00 00 00 .dword $2 -000B84r 1 03 00 00 00 .dword $3 -000B88r 1 04 00 00 00 .dword $4 -000B8Cr 1 05 00 00 00 .dword $5 -000B90r 1 06 00 00 00 .dword $6 -000B94r 1 07 00 00 00 .dword $7 -000B98r 1 08 00 00 00 .dword $8 -000B9Cr 1 09 00 00 00 .dword $9 -000BA0r 1 0A 00 00 00 .dword $a -000BA4r 1 0B 00 00 00 .dword $b -000BA8r 1 0C 00 00 00 .dword $c -000BACr 1 0D 00 00 00 .dword $d -000BB0r 1 0E 00 00 00 .dword $e -000BB4r 1 0F 00 00 00 .dword $f -000BB8r 1 10 00 00 00 .dword $10 -000BBCr 1 11 00 00 00 .dword $11 -000BC0r 1 12 00 00 00 .dword $12 -000BC4r 1 13 00 00 00 .dword $13 -000BC8r 1 70 00 00 00 .dword $70 -000BCCr 1 71 00 00 00 .dword $71 -000BD0r 1 72 00 00 00 .dword $72 -000BD4r 1 73 00 00 00 .dword $73 -000BD8r 1 74 00 00 00 .dword $74 -000BDCr 1 75 00 00 00 .dword $75 -000BE0r 1 76 00 00 00 .dword $76 -000BE4r 1 77 00 00 00 .dword $77 -000BE8r 1 78 00 00 00 .dword $78 -000BECr 1 79 00 00 00 .dword $79 -000BF0r 1 7A 00 00 00 .dword $7a -000BF4r 1 7B 00 00 00 .dword $7b -000BF8r 1 7C 00 00 00 .dword $7c -000BFCr 1 7D 00 00 00 .dword $7d -000C00r 1 7E 00 00 00 .dword $7e -000C04r 1 7F 00 00 00 .dword $7f -000C08r 1 80 00 00 00 .dword $80 -000C0Cr 1 81 00 00 00 .dword $81 -000C10r 1 82 00 00 00 .dword $82 -000C14r 1 83 00 00 00 .dword $83 -000C18r 1 84 00 00 00 .dword $84 -000C1Cr 1 85 00 00 00 .dword $85 -000C20r 1 86 00 00 00 .dword $86 -000C24r 1 F0 00 00 00 .dword $f0 -000C28r 1 F1 00 00 00 .dword $f1 -000C2Cr 1 F2 00 00 00 .dword $f2 -000C30r 1 F3 00 00 00 .dword $f3 -000C34r 1 F4 00 00 00 .dword $f4 -000C38r 1 F5 00 00 00 .dword $f5 -000C3Cr 1 F6 00 00 00 .dword $f6 -000C40r 1 F7 00 00 00 .dword $f7 -000C44r 1 F8 00 00 00 .dword $f8 -000C48r 1 F9 00 00 00 .dword $f9 -000C4Cr 1 FA 00 00 00 .dword $fa -000C50r 1 FB 00 00 00 .dword $fb -000C54r 1 FC 00 00 00 .dword $fc -000C58r 1 FD 00 00 00 .dword $fd -000C5Cr 1 FE 00 00 00 .dword $fe -000C60r 1 FF 00 00 00 .dword $ff -000C64r 1 00 01 00 00 .dword $100 -000C68r 1 01 01 00 00 .dword $101 -000C6Cr 1 02 01 00 00 .dword $102 -000C70r 1 03 01 00 00 .dword $103 -000C74r 1 D2 0F 00 00 .dword $fd2 -000C78r 1 D3 0F 00 00 .dword $fd3 -000C7Cr 1 D4 0F 00 00 .dword $fd4 -000C80r 1 D5 0F 00 00 .dword $fd5 -000C84r 1 D6 0F 00 00 .dword $fd6 -000C88r 1 D7 0F 00 00 .dword $fd7 -000C8Cr 1 D8 0F 00 00 .dword $fd8 -000C90r 1 D9 0F 00 00 .dword $fd9 -000C94r 1 DA 0F 00 00 .dword $fda -000C98r 1 DB 0F 00 00 .dword $fdb -000C9Cr 1 DC 0F 00 00 .dword $fdc -000CA0r 1 DD 0F 00 00 .dword $fdd -000CA4r 1 DE 0F 00 00 .dword $fde -000CA8r 1 DF 0F 00 00 .dword $fdf -000CACr 1 E0 0F 00 00 .dword $fe0 -000CB0r 1 E1 0F 00 00 .dword $fe1 -000CB4r 1 E2 0F 00 00 .dword $fe2 -000CB8r 1 E3 0F 00 00 .dword $fe3 -000CBCr 1 E4 0F 00 00 .dword $fe4 -000CC0r 1 E5 0F 00 00 .dword $fe5 -000CC4r 1 E6 0F 00 00 .dword $fe6 -000CC8r 1 E7 0F 00 00 .dword $fe7 -000CCCr 1 E8 0F 00 00 .dword $fe8 -000CD0r 1 E9 0F 00 00 .dword $fe9 -000CD4r 1 EA 0F 00 00 .dword $fea -000CD8r 1 EB 0F 00 00 .dword $feb -000CDCr 1 EC 0F 00 00 .dword $fec -000CE0r 1 ED 0F 00 00 .dword $fed -000CE4r 1 EE 0F 00 00 .dword $fee -000CE8r 1 EF 0F 00 00 .dword $fef -000CECr 1 F0 0F 00 00 .dword $ff0 -000CF0r 1 F1 0F 00 00 .dword $ff1 -000CF4r 1 F2 0F 00 00 .dword $ff2 -000CF8r 1 F3 0F 00 00 .dword $ff3 -000CFCr 1 F4 0F 00 00 .dword $ff4 -000D00r 1 F5 0F 00 00 .dword $ff5 -000D04r 1 F6 0F 00 00 .dword $ff6 -000D08r 1 F7 0F 00 00 .dword $ff7 -000D0Cr 1 F8 0F 00 00 .dword $ff8 -000D10r 1 F9 0F 00 00 .dword $ff9 -000D14r 1 FA 0F 00 00 .dword $ffa -000D18r 1 FB 0F 00 00 .dword $ffb -000D1Cr 1 FC 0F 00 00 .dword $ffc -000D20r 1 FD 0F 00 00 .dword $ffd -000D24r 1 FE 0F 00 00 .dword $ffe -000D28r 1 FF 0F 00 00 .dword $fff -000D2Cr 1 00 10 00 00 .dword $1000 -000D30r 1 01 10 00 00 .dword $1001 -000D34r 1 02 10 00 00 .dword $1002 -000D38r 1 03 10 00 00 .dword $1003 -000D3Cr 1 04 10 00 00 .dword $1004 -000D40r 1 05 10 00 00 .dword $1005 -000D44r 1 06 10 00 00 .dword $1006 -000D48r 1 07 10 00 00 .dword $1007 -000D4Cr 1 08 10 00 00 .dword $1008 -000D50r 1 F0 7F 00 00 .dword $7ff0 -000D54r 1 F1 7F 00 00 .dword $7ff1 -000D58r 1 F2 7F 00 00 .dword $7ff2 -000D5Cr 1 F3 7F 00 00 .dword $7ff3 -000D60r 1 F4 7F 00 00 .dword $7ff4 -000D64r 1 F5 7F 00 00 .dword $7ff5 -000D68r 1 F6 7F 00 00 .dword $7ff6 -000D6Cr 1 F7 7F 00 00 .dword $7ff7 -000D70r 1 F8 7F 00 00 .dword $7ff8 -000D74r 1 F9 7F 00 00 .dword $7ff9 -000D78r 1 FA 7F 00 00 .dword $7ffa -000D7Cr 1 FB 7F 00 00 .dword $7ffb -000D80r 1 FC 7F 00 00 .dword $7ffc -000D84r 1 FD 7F 00 00 .dword $7ffd -000D88r 1 FE 7F 00 00 .dword $7ffe -000D8Cr 1 FF 7F 00 00 .dword $7fff -000D90r 1 00 80 00 00 .dword $8000 -000D94r 1 01 80 00 00 .dword $8001 -000D98r 1 02 80 00 00 .dword $8002 -000D9Cr 1 03 80 00 00 .dword $8003 -000DA0r 1 04 80 00 00 .dword $8004 -000DA4r 1 05 80 00 00 .dword $8005 -000DA8r 1 06 80 00 00 .dword $8006 -000DACr 1 07 80 00 00 .dword $8007 -000DB0r 1 08 80 00 00 .dword $8008 -000DB4r 1 09 80 00 00 .dword $8009 -000DB8r 1 0A 80 00 00 .dword $800a -000DBCr 1 0B 80 00 00 .dword $800b -000DC0r 1 E1 9F 00 00 .dword $9fe1 -000DC4r 1 E2 9F 00 00 .dword $9fe2 -000DC8r 1 E3 9F 00 00 .dword $9fe3 -000DCCr 1 E4 9F 00 00 .dword $9fe4 -000DD0r 1 E5 9F 00 00 .dword $9fe5 -000DD4r 1 E6 9F 00 00 .dword $9fe6 -000DD8r 1 E7 9F 00 00 .dword $9fe7 -000DDCr 1 E8 9F 00 00 .dword $9fe8 -000DE0r 1 E9 9F 00 00 .dword $9fe9 -000DE4r 1 EA 9F 00 00 .dword $9fea -000DE8r 1 EB 9F 00 00 .dword $9feb -000DECr 1 EC 9F 00 00 .dword $9fec -000DF0r 1 ED 9F 00 00 .dword $9fed -000DF4r 1 EE 9F 00 00 .dword $9fee -000DF8r 1 EF 9F 00 00 .dword $9fef -000DFCr 1 F0 9F 00 00 .dword $9ff0 -000E00r 1 F1 9F 00 00 .dword $9ff1 -000E04r 1 F2 9F 00 00 .dword $9ff2 -000E08r 1 F3 9F 00 00 .dword $9ff3 -000E0Cr 1 F4 9F 00 00 .dword $9ff4 -000E10r 1 F5 9F 00 00 .dword $9ff5 -000E14r 1 F6 9F 00 00 .dword $9ff6 -000E18r 1 F7 9F 00 00 .dword $9ff7 -000E1Cr 1 F8 9F 00 00 .dword $9ff8 -000E20r 1 F9 9F 00 00 .dword $9ff9 -000E24r 1 FA 9F 00 00 .dword $9ffa -000E28r 1 FB 9F 00 00 .dword $9ffb -000E2Cr 1 FC 9F 00 00 .dword $9ffc -000E30r 1 FD 9F 00 00 .dword $9ffd -000E34r 1 FE 9F 00 00 .dword $9ffe -000E38r 1 FF 9F 00 00 .dword $9fff -000E3Cr 1 00 A0 00 00 .dword $a000 -000E40r 1 01 A0 00 00 .dword $a001 -000E44r 1 02 A0 00 00 .dword $a002 -000E48r 1 03 A0 00 00 .dword $a003 -000E4Cr 1 04 A0 00 00 .dword $a004 -000E50r 1 05 A0 00 00 .dword $a005 -000E54r 1 06 A0 00 00 .dword $a006 -000E58r 1 07 A0 00 00 .dword $a007 -000E5Cr 1 08 A0 00 00 .dword $a008 -000E60r 1 09 A0 00 00 .dword $a009 -000E64r 1 0A A0 00 00 .dword $a00a -000E68r 1 0B A0 00 00 .dword $a00b -000E6Cr 1 0C A0 00 00 .dword $a00c -000E70r 1 0D A0 00 00 .dword $a00d -000E74r 1 0E A0 00 00 .dword $a00e -000E78r 1 0F A0 00 00 .dword $a00f -000E7Cr 1 E1 AF 00 00 .dword $afe1 -000E80r 1 E2 AF 00 00 .dword $afe2 -000E84r 1 E3 AF 00 00 .dword $afe3 -000E88r 1 E4 AF 00 00 .dword $afe4 -000E8Cr 1 E5 AF 00 00 .dword $afe5 -000E90r 1 E6 AF 00 00 .dword $afe6 -000E94r 1 E7 AF 00 00 .dword $afe7 -000E98r 1 E8 AF 00 00 .dword $afe8 -000E9Cr 1 E9 AF 00 00 .dword $afe9 -000EA0r 1 EA AF 00 00 .dword $afea -000EA4r 1 EB AF 00 00 .dword $afeb -000EA8r 1 EC AF 00 00 .dword $afec -000EACr 1 ED AF 00 00 .dword $afed -000EB0r 1 EE AF 00 00 .dword $afee -000EB4r 1 EF AF 00 00 .dword $afef -000EB8r 1 F0 AF 00 00 .dword $aff0 -000EBCr 1 F1 AF 00 00 .dword $aff1 -000EC0r 1 F2 AF 00 00 .dword $aff2 -000EC4r 1 F3 AF 00 00 .dword $aff3 -000EC8r 1 F4 AF 00 00 .dword $aff4 -000ECCr 1 F5 AF 00 00 .dword $aff5 -000ED0r 1 F6 AF 00 00 .dword $aff6 -000ED4r 1 F7 AF 00 00 .dword $aff7 -000ED8r 1 F8 AF 00 00 .dword $aff8 -000EDCr 1 F9 AF 00 00 .dword $aff9 -000EE0r 1 FA AF 00 00 .dword $affa -000EE4r 1 FB AF 00 00 .dword $affb -000EE8r 1 FC AF 00 00 .dword $affc -000EECr 1 FD AF 00 00 .dword $affd -000EF0r 1 FE AF 00 00 .dword $affe -000EF4r 1 FF AF 00 00 .dword $afff -000EF8r 1 00 B0 00 00 .dword $b000 -000EFCr 1 01 B0 00 00 .dword $b001 -000F00r 1 02 B0 00 00 .dword $b002 -000F04r 1 03 B0 00 00 .dword $b003 -000F08r 1 04 B0 00 00 .dword $b004 -000F0Cr 1 05 B0 00 00 .dword $b005 -000F10r 1 06 B0 00 00 .dword $b006 -000F14r 1 07 B0 00 00 .dword $b007 -000F18r 1 08 B0 00 00 .dword $b008 -000F1Cr 1 09 B0 00 00 .dword $b009 -000F20r 1 0A B0 00 00 .dword $b00a -000F24r 1 0B B0 00 00 .dword $b00b -000F28r 1 0C B0 00 00 .dword $b00c -000F2Cr 1 0D B0 00 00 .dword $b00d -000F30r 1 0E B0 00 00 .dword $b00e -000F34r 1 0F B0 00 00 .dword $b00f -000F38r 1 E1 FF 00 00 .dword $ffe1 -000F3Cr 1 E2 FF 00 00 .dword $ffe2 -000F40r 1 E3 FF 00 00 .dword $ffe3 -000F44r 1 E4 FF 00 00 .dword $ffe4 -000F48r 1 E5 FF 00 00 .dword $ffe5 -000F4Cr 1 E6 FF 00 00 .dword $ffe6 -000F50r 1 E7 FF 00 00 .dword $ffe7 -000F54r 1 E8 FF 00 00 .dword $ffe8 -000F58r 1 E9 FF 00 00 .dword $ffe9 -000F5Cr 1 EA FF 00 00 .dword $ffea -000F60r 1 EB FF 00 00 .dword $ffeb -000F64r 1 EC FF 00 00 .dword $ffec -000F68r 1 ED FF 00 00 .dword $ffed -000F6Cr 1 EE FF 00 00 .dword $ffee -000F70r 1 EF FF 00 00 .dword $ffef -000F74r 1 F0 FF 00 00 .dword $fff0 -000F78r 1 F1 FF 00 00 .dword $fff1 -000F7Cr 1 F2 FF 00 00 .dword $fff2 -000F80r 1 F3 FF 00 00 .dword $fff3 -000F84r 1 F4 FF 00 00 .dword $fff4 -000F88r 1 F5 FF 00 00 .dword $fff5 -000F8Cr 1 F6 FF 00 00 .dword $fff6 -000F90r 1 F7 FF 00 00 .dword $fff7 -000F94r 1 F8 FF 00 00 .dword $fff8 -000F98r 1 F9 FF 00 00 .dword $fff9 -000F9Cr 1 FA FF 00 00 .dword $fffa -000FA0r 1 FB FF 00 00 .dword $fffb -000FA4r 1 FC FF 00 00 .dword $fffc -000FA8r 1 FD FF 00 00 .dword $fffd -000FACr 1 FE FF 00 00 .dword $fffe -000FB0r 1 FF FF 00 00 .dword $ffff -000FB4r 1 00 00 01 00 .dword $10000 -000FB8r 1 01 00 01 00 .dword $10001 -000FBCr 1 02 00 01 00 .dword $10002 -000FC0r 1 03 00 01 00 .dword $10003 -000FC4r 1 04 00 01 00 .dword $10004 -000FC8r 1 05 00 01 00 .dword $10005 -000FCCr 1 06 00 01 00 .dword $10006 -000FD0r 1 07 00 01 00 .dword $10007 -000FD4r 1 08 00 01 00 .dword $10008 -000FD8r 1 09 00 01 00 .dword $10009 -000FDCr 1 0A 00 01 00 .dword $1000a -000FE0r 1 0B 00 01 00 .dword $1000b -000FE4r 1 0C 00 01 00 .dword $1000c -000FE8r 1 0D 00 01 00 .dword $1000d -000FECr 1 0E 00 01 00 .dword $1000e -000FF0r 1 0F 00 01 00 .dword $1000f -000FF4r 1 F0 FF FF 7F .dword $7ffffff0 -000FF8r 1 F1 FF FF 7F .dword $7ffffff1 -000FFCr 1 F2 FF FF 7F .dword $7ffffff2 -001000r 1 F3 FF FF 7F .dword $7ffffff3 -001004r 1 F4 FF FF 7F .dword $7ffffff4 -001008r 1 F5 FF FF 7F .dword $7ffffff5 -00100Cr 1 F6 FF FF 7F .dword $7ffffff6 -001010r 1 F7 FF FF 7F .dword $7ffffff7 -001014r 1 F8 FF FF 7F .dword $7ffffff8 -001018r 1 F9 FF FF 7F .dword $7ffffff9 -00101Cr 1 FA FF FF 7F .dword $7ffffffa -001020r 1 FB FF FF 7F .dword $7ffffffb -001024r 1 FC FF FF 7F .dword $7ffffffc -001028r 1 FD FF FF 7F .dword $7ffffffd -00102Cr 1 FE FF FF 7F .dword $7ffffffe -001030r 1 FF FF FF 7F .dword $7fffffff -001034r 1 00 00 00 80 .dword $80000000 -001038r 1 01 00 00 80 .dword $80000001 -00103Cr 1 02 00 00 80 .dword $80000002 -001040r 1 03 00 00 80 .dword $80000003 -001044r 1 04 00 00 80 .dword $80000004 -001048r 1 05 00 00 80 .dword $80000005 -00104Cr 1 06 00 00 80 .dword $80000006 -001050r 1 07 00 00 80 .dword $80000007 -001054r 1 08 00 00 80 .dword $80000008 -001058r 1 09 00 00 80 .dword $80000009 -00105Cr 1 0A 00 00 80 .dword $8000000a -001060r 1 0B 00 00 80 .dword $8000000b -001064r 1 0C 00 00 80 .dword $8000000c -001068r 1 0D 00 00 80 .dword $8000000d -00106Cr 1 0E 00 00 80 .dword $8000000e -001070r 1 0F 00 00 80 .dword $8000000f -001074r 1 F0 FF FF 9F .dword $9ffffff0 -001078r 1 F1 FF FF 9F .dword $9ffffff1 -00107Cr 1 F2 FF FF 9F .dword $9ffffff2 -001080r 1 F3 FF FF 9F .dword $9ffffff3 -001084r 1 F4 FF FF 9F .dword $9ffffff4 -001088r 1 F5 FF FF 9F .dword $9ffffff5 -00108Cr 1 F6 FF FF 9F .dword $9ffffff6 -001090r 1 F7 FF FF 9F .dword $9ffffff7 -001094r 1 F8 FF FF 9F .dword $9ffffff8 -001098r 1 F9 FF FF 9F .dword $9ffffff9 -00109Cr 1 FA FF FF 9F .dword $9ffffffa -0010A0r 1 FB FF FF 9F .dword $9ffffffb -0010A4r 1 FC FF FF 9F .dword $9ffffffc -0010A8r 1 FD FF FF 9F .dword $9ffffffd -0010ACr 1 FE FF FF 9F .dword $9ffffffe -0010B0r 1 FF FF FF 9F .dword $9fffffff -0010B4r 1 00 00 00 A0 .dword $a0000000 -0010B8r 1 01 00 00 A0 .dword $a0000001 -0010BCr 1 02 00 00 A0 .dword $a0000002 -0010C0r 1 03 00 00 A0 .dword $a0000003 -0010C4r 1 04 00 00 A0 .dword $a0000004 -0010C8r 1 05 00 00 A0 .dword $a0000005 -0010CCr 1 06 00 00 A0 .dword $a0000006 -0010D0r 1 07 00 00 A0 .dword $a0000007 -0010D4r 1 08 00 00 A0 .dword $a0000008 -0010D8r 1 09 00 00 A0 .dword $a0000009 -0010DCr 1 0A 00 00 A0 .dword $a000000a -0010E0r 1 0B 00 00 A0 .dword $a000000b -0010E4r 1 0C 00 00 A0 .dword $a000000c -0010E8r 1 0D 00 00 A0 .dword $a000000d -0010ECr 1 0E 00 00 A0 .dword $a000000e -0010F0r 1 0F 00 00 A0 .dword $a000000f -0010F4r 1 F0 FF FF FF .dword $fffffff0 -0010F8r 1 F1 FF FF FF .dword $fffffff1 -0010FCr 1 F2 FF FF FF .dword $fffffff2 -001100r 1 F3 FF FF FF .dword $fffffff3 -001104r 1 F4 FF FF FF .dword $fffffff4 -001108r 1 F5 FF FF FF .dword $fffffff5 -00110Cr 1 F6 FF FF FF .dword $fffffff6 -001110r 1 F7 FF FF FF .dword $fffffff7 -001114r 1 F8 FF FF FF .dword $fffffff8 -001118r 1 F9 FF FF FF .dword $fffffff9 -00111Cr 1 FA FF FF FF .dword $fffffffa -001120r 1 FB FF FF FF .dword $fffffffb -001124r 1 FC FF FF FF .dword $fffffffc -001128r 1 FD FF FF FF .dword $fffffffd -00112Cr 1 FE FF FF FF .dword $fffffffe -001130r 1 FF FF FF FF .dword $ffffffff +000B78r 1 ; hex values +000B78r 1 00 00 00 00 .dword $0 +000B7Cr 1 01 00 00 00 .dword $1 +000B80r 1 02 00 00 00 .dword $2 +000B84r 1 03 00 00 00 .dword $3 +000B88r 1 04 00 00 00 .dword $4 +000B8Cr 1 05 00 00 00 .dword $5 +000B90r 1 06 00 00 00 .dword $6 +000B94r 1 07 00 00 00 .dword $7 +000B98r 1 08 00 00 00 .dword $8 +000B9Cr 1 09 00 00 00 .dword $9 +000BA0r 1 0A 00 00 00 .dword $a +000BA4r 1 0B 00 00 00 .dword $b +000BA8r 1 0C 00 00 00 .dword $c +000BACr 1 0D 00 00 00 .dword $d +000BB0r 1 0E 00 00 00 .dword $e +000BB4r 1 0F 00 00 00 .dword $f +000BB8r 1 10 00 00 00 .dword $10 +000BBCr 1 11 00 00 00 .dword $11 +000BC0r 1 12 00 00 00 .dword $12 +000BC4r 1 13 00 00 00 .dword $13 +000BC8r 1 70 00 00 00 .dword $70 +000BCCr 1 71 00 00 00 .dword $71 +000BD0r 1 72 00 00 00 .dword $72 +000BD4r 1 73 00 00 00 .dword $73 +000BD8r 1 74 00 00 00 .dword $74 +000BDCr 1 75 00 00 00 .dword $75 +000BE0r 1 76 00 00 00 .dword $76 +000BE4r 1 77 00 00 00 .dword $77 +000BE8r 1 78 00 00 00 .dword $78 +000BECr 1 79 00 00 00 .dword $79 +000BF0r 1 7A 00 00 00 .dword $7a +000BF4r 1 7B 00 00 00 .dword $7b +000BF8r 1 7C 00 00 00 .dword $7c +000BFCr 1 7D 00 00 00 .dword $7d +000C00r 1 7E 00 00 00 .dword $7e +000C04r 1 7F 00 00 00 .dword $7f +000C08r 1 80 00 00 00 .dword $80 +000C0Cr 1 81 00 00 00 .dword $81 +000C10r 1 82 00 00 00 .dword $82 +000C14r 1 83 00 00 00 .dword $83 +000C18r 1 84 00 00 00 .dword $84 +000C1Cr 1 85 00 00 00 .dword $85 +000C20r 1 86 00 00 00 .dword $86 +000C24r 1 F0 00 00 00 .dword $f0 +000C28r 1 F1 00 00 00 .dword $f1 +000C2Cr 1 F2 00 00 00 .dword $f2 +000C30r 1 F3 00 00 00 .dword $f3 +000C34r 1 F4 00 00 00 .dword $f4 +000C38r 1 F5 00 00 00 .dword $f5 +000C3Cr 1 F6 00 00 00 .dword $f6 +000C40r 1 F7 00 00 00 .dword $f7 +000C44r 1 F8 00 00 00 .dword $f8 +000C48r 1 F9 00 00 00 .dword $f9 +000C4Cr 1 FA 00 00 00 .dword $fa +000C50r 1 FB 00 00 00 .dword $fb +000C54r 1 FC 00 00 00 .dword $fc +000C58r 1 FD 00 00 00 .dword $fd +000C5Cr 1 FE 00 00 00 .dword $fe +000C60r 1 FF 00 00 00 .dword $ff +000C64r 1 00 01 00 00 .dword $100 +000C68r 1 01 01 00 00 .dword $101 +000C6Cr 1 02 01 00 00 .dword $102 +000C70r 1 03 01 00 00 .dword $103 +000C74r 1 D2 0F 00 00 .dword $fd2 +000C78r 1 D3 0F 00 00 .dword $fd3 +000C7Cr 1 D4 0F 00 00 .dword $fd4 +000C80r 1 D5 0F 00 00 .dword $fd5 +000C84r 1 D6 0F 00 00 .dword $fd6 +000C88r 1 D7 0F 00 00 .dword $fd7 +000C8Cr 1 D8 0F 00 00 .dword $fd8 +000C90r 1 D9 0F 00 00 .dword $fd9 +000C94r 1 DA 0F 00 00 .dword $fda +000C98r 1 DB 0F 00 00 .dword $fdb +000C9Cr 1 DC 0F 00 00 .dword $fdc +000CA0r 1 DD 0F 00 00 .dword $fdd +000CA4r 1 DE 0F 00 00 .dword $fde +000CA8r 1 DF 0F 00 00 .dword $fdf +000CACr 1 E0 0F 00 00 .dword $fe0 +000CB0r 1 E1 0F 00 00 .dword $fe1 +000CB4r 1 E2 0F 00 00 .dword $fe2 +000CB8r 1 E3 0F 00 00 .dword $fe3 +000CBCr 1 E4 0F 00 00 .dword $fe4 +000CC0r 1 E5 0F 00 00 .dword $fe5 +000CC4r 1 E6 0F 00 00 .dword $fe6 +000CC8r 1 E7 0F 00 00 .dword $fe7 +000CCCr 1 E8 0F 00 00 .dword $fe8 +000CD0r 1 E9 0F 00 00 .dword $fe9 +000CD4r 1 EA 0F 00 00 .dword $fea +000CD8r 1 EB 0F 00 00 .dword $feb +000CDCr 1 EC 0F 00 00 .dword $fec +000CE0r 1 ED 0F 00 00 .dword $fed +000CE4r 1 EE 0F 00 00 .dword $fee +000CE8r 1 EF 0F 00 00 .dword $fef +000CECr 1 F0 0F 00 00 .dword $ff0 +000CF0r 1 F1 0F 00 00 .dword $ff1 +000CF4r 1 F2 0F 00 00 .dword $ff2 +000CF8r 1 F3 0F 00 00 .dword $ff3 +000CFCr 1 F4 0F 00 00 .dword $ff4 +000D00r 1 F5 0F 00 00 .dword $ff5 +000D04r 1 F6 0F 00 00 .dword $ff6 +000D08r 1 F7 0F 00 00 .dword $ff7 +000D0Cr 1 F8 0F 00 00 .dword $ff8 +000D10r 1 F9 0F 00 00 .dword $ff9 +000D14r 1 FA 0F 00 00 .dword $ffa +000D18r 1 FB 0F 00 00 .dword $ffb +000D1Cr 1 FC 0F 00 00 .dword $ffc +000D20r 1 FD 0F 00 00 .dword $ffd +000D24r 1 FE 0F 00 00 .dword $ffe +000D28r 1 FF 0F 00 00 .dword $fff +000D2Cr 1 00 10 00 00 .dword $1000 +000D30r 1 01 10 00 00 .dword $1001 +000D34r 1 02 10 00 00 .dword $1002 +000D38r 1 03 10 00 00 .dword $1003 +000D3Cr 1 04 10 00 00 .dword $1004 +000D40r 1 05 10 00 00 .dword $1005 +000D44r 1 06 10 00 00 .dword $1006 +000D48r 1 07 10 00 00 .dword $1007 +000D4Cr 1 08 10 00 00 .dword $1008 +000D50r 1 F0 7F 00 00 .dword $7ff0 +000D54r 1 F1 7F 00 00 .dword $7ff1 +000D58r 1 F2 7F 00 00 .dword $7ff2 +000D5Cr 1 F3 7F 00 00 .dword $7ff3 +000D60r 1 F4 7F 00 00 .dword $7ff4 +000D64r 1 F5 7F 00 00 .dword $7ff5 +000D68r 1 F6 7F 00 00 .dword $7ff6 +000D6Cr 1 F7 7F 00 00 .dword $7ff7 +000D70r 1 F8 7F 00 00 .dword $7ff8 +000D74r 1 F9 7F 00 00 .dword $7ff9 +000D78r 1 FA 7F 00 00 .dword $7ffa +000D7Cr 1 FB 7F 00 00 .dword $7ffb +000D80r 1 FC 7F 00 00 .dword $7ffc +000D84r 1 FD 7F 00 00 .dword $7ffd +000D88r 1 FE 7F 00 00 .dword $7ffe +000D8Cr 1 FF 7F 00 00 .dword $7fff +000D90r 1 00 80 00 00 .dword $8000 +000D94r 1 01 80 00 00 .dword $8001 +000D98r 1 02 80 00 00 .dword $8002 +000D9Cr 1 03 80 00 00 .dword $8003 +000DA0r 1 04 80 00 00 .dword $8004 +000DA4r 1 05 80 00 00 .dword $8005 +000DA8r 1 06 80 00 00 .dword $8006 +000DACr 1 07 80 00 00 .dword $8007 +000DB0r 1 08 80 00 00 .dword $8008 +000DB4r 1 09 80 00 00 .dword $8009 +000DB8r 1 0A 80 00 00 .dword $800a +000DBCr 1 0B 80 00 00 .dword $800b +000DC0r 1 E1 9F 00 00 .dword $9fe1 +000DC4r 1 E2 9F 00 00 .dword $9fe2 +000DC8r 1 E3 9F 00 00 .dword $9fe3 +000DCCr 1 E4 9F 00 00 .dword $9fe4 +000DD0r 1 E5 9F 00 00 .dword $9fe5 +000DD4r 1 E6 9F 00 00 .dword $9fe6 +000DD8r 1 E7 9F 00 00 .dword $9fe7 +000DDCr 1 E8 9F 00 00 .dword $9fe8 +000DE0r 1 E9 9F 00 00 .dword $9fe9 +000DE4r 1 EA 9F 00 00 .dword $9fea +000DE8r 1 EB 9F 00 00 .dword $9feb +000DECr 1 EC 9F 00 00 .dword $9fec +000DF0r 1 ED 9F 00 00 .dword $9fed +000DF4r 1 EE 9F 00 00 .dword $9fee +000DF8r 1 EF 9F 00 00 .dword $9fef +000DFCr 1 F0 9F 00 00 .dword $9ff0 +000E00r 1 F1 9F 00 00 .dword $9ff1 +000E04r 1 F2 9F 00 00 .dword $9ff2 +000E08r 1 F3 9F 00 00 .dword $9ff3 +000E0Cr 1 F4 9F 00 00 .dword $9ff4 +000E10r 1 F5 9F 00 00 .dword $9ff5 +000E14r 1 F6 9F 00 00 .dword $9ff6 +000E18r 1 F7 9F 00 00 .dword $9ff7 +000E1Cr 1 F8 9F 00 00 .dword $9ff8 +000E20r 1 F9 9F 00 00 .dword $9ff9 +000E24r 1 FA 9F 00 00 .dword $9ffa +000E28r 1 FB 9F 00 00 .dword $9ffb +000E2Cr 1 FC 9F 00 00 .dword $9ffc +000E30r 1 FD 9F 00 00 .dword $9ffd +000E34r 1 FE 9F 00 00 .dword $9ffe +000E38r 1 FF 9F 00 00 .dword $9fff +000E3Cr 1 00 A0 00 00 .dword $a000 +000E40r 1 01 A0 00 00 .dword $a001 +000E44r 1 02 A0 00 00 .dword $a002 +000E48r 1 03 A0 00 00 .dword $a003 +000E4Cr 1 04 A0 00 00 .dword $a004 +000E50r 1 05 A0 00 00 .dword $a005 +000E54r 1 06 A0 00 00 .dword $a006 +000E58r 1 07 A0 00 00 .dword $a007 +000E5Cr 1 08 A0 00 00 .dword $a008 +000E60r 1 09 A0 00 00 .dword $a009 +000E64r 1 0A A0 00 00 .dword $a00a +000E68r 1 0B A0 00 00 .dword $a00b +000E6Cr 1 0C A0 00 00 .dword $a00c +000E70r 1 0D A0 00 00 .dword $a00d +000E74r 1 0E A0 00 00 .dword $a00e +000E78r 1 0F A0 00 00 .dword $a00f +000E7Cr 1 E1 AF 00 00 .dword $afe1 +000E80r 1 E2 AF 00 00 .dword $afe2 +000E84r 1 E3 AF 00 00 .dword $afe3 +000E88r 1 E4 AF 00 00 .dword $afe4 +000E8Cr 1 E5 AF 00 00 .dword $afe5 +000E90r 1 E6 AF 00 00 .dword $afe6 +000E94r 1 E7 AF 00 00 .dword $afe7 +000E98r 1 E8 AF 00 00 .dword $afe8 +000E9Cr 1 E9 AF 00 00 .dword $afe9 +000EA0r 1 EA AF 00 00 .dword $afea +000EA4r 1 EB AF 00 00 .dword $afeb +000EA8r 1 EC AF 00 00 .dword $afec +000EACr 1 ED AF 00 00 .dword $afed +000EB0r 1 EE AF 00 00 .dword $afee +000EB4r 1 EF AF 00 00 .dword $afef +000EB8r 1 F0 AF 00 00 .dword $aff0 +000EBCr 1 F1 AF 00 00 .dword $aff1 +000EC0r 1 F2 AF 00 00 .dword $aff2 +000EC4r 1 F3 AF 00 00 .dword $aff3 +000EC8r 1 F4 AF 00 00 .dword $aff4 +000ECCr 1 F5 AF 00 00 .dword $aff5 +000ED0r 1 F6 AF 00 00 .dword $aff6 +000ED4r 1 F7 AF 00 00 .dword $aff7 +000ED8r 1 F8 AF 00 00 .dword $aff8 +000EDCr 1 F9 AF 00 00 .dword $aff9 +000EE0r 1 FA AF 00 00 .dword $affa +000EE4r 1 FB AF 00 00 .dword $affb +000EE8r 1 FC AF 00 00 .dword $affc +000EECr 1 FD AF 00 00 .dword $affd +000EF0r 1 FE AF 00 00 .dword $affe +000EF4r 1 FF AF 00 00 .dword $afff +000EF8r 1 00 B0 00 00 .dword $b000 +000EFCr 1 01 B0 00 00 .dword $b001 +000F00r 1 02 B0 00 00 .dword $b002 +000F04r 1 03 B0 00 00 .dword $b003 +000F08r 1 04 B0 00 00 .dword $b004 +000F0Cr 1 05 B0 00 00 .dword $b005 +000F10r 1 06 B0 00 00 .dword $b006 +000F14r 1 07 B0 00 00 .dword $b007 +000F18r 1 08 B0 00 00 .dword $b008 +000F1Cr 1 09 B0 00 00 .dword $b009 +000F20r 1 0A B0 00 00 .dword $b00a +000F24r 1 0B B0 00 00 .dword $b00b +000F28r 1 0C B0 00 00 .dword $b00c +000F2Cr 1 0D B0 00 00 .dword $b00d +000F30r 1 0E B0 00 00 .dword $b00e +000F34r 1 0F B0 00 00 .dword $b00f +000F38r 1 E1 FF 00 00 .dword $ffe1 +000F3Cr 1 E2 FF 00 00 .dword $ffe2 +000F40r 1 E3 FF 00 00 .dword $ffe3 +000F44r 1 E4 FF 00 00 .dword $ffe4 +000F48r 1 E5 FF 00 00 .dword $ffe5 +000F4Cr 1 E6 FF 00 00 .dword $ffe6 +000F50r 1 E7 FF 00 00 .dword $ffe7 +000F54r 1 E8 FF 00 00 .dword $ffe8 +000F58r 1 E9 FF 00 00 .dword $ffe9 +000F5Cr 1 EA FF 00 00 .dword $ffea +000F60r 1 EB FF 00 00 .dword $ffeb +000F64r 1 EC FF 00 00 .dword $ffec +000F68r 1 ED FF 00 00 .dword $ffed +000F6Cr 1 EE FF 00 00 .dword $ffee +000F70r 1 EF FF 00 00 .dword $ffef +000F74r 1 F0 FF 00 00 .dword $fff0 +000F78r 1 F1 FF 00 00 .dword $fff1 +000F7Cr 1 F2 FF 00 00 .dword $fff2 +000F80r 1 F3 FF 00 00 .dword $fff3 +000F84r 1 F4 FF 00 00 .dword $fff4 +000F88r 1 F5 FF 00 00 .dword $fff5 +000F8Cr 1 F6 FF 00 00 .dword $fff6 +000F90r 1 F7 FF 00 00 .dword $fff7 +000F94r 1 F8 FF 00 00 .dword $fff8 +000F98r 1 F9 FF 00 00 .dword $fff9 +000F9Cr 1 FA FF 00 00 .dword $fffa +000FA0r 1 FB FF 00 00 .dword $fffb +000FA4r 1 FC FF 00 00 .dword $fffc +000FA8r 1 FD FF 00 00 .dword $fffd +000FACr 1 FE FF 00 00 .dword $fffe +000FB0r 1 FF FF 00 00 .dword $ffff +000FB4r 1 00 00 01 00 .dword $10000 +000FB8r 1 01 00 01 00 .dword $10001 +000FBCr 1 02 00 01 00 .dword $10002 +000FC0r 1 03 00 01 00 .dword $10003 +000FC4r 1 04 00 01 00 .dword $10004 +000FC8r 1 05 00 01 00 .dword $10005 +000FCCr 1 06 00 01 00 .dword $10006 +000FD0r 1 07 00 01 00 .dword $10007 +000FD4r 1 08 00 01 00 .dword $10008 +000FD8r 1 09 00 01 00 .dword $10009 +000FDCr 1 0A 00 01 00 .dword $1000a +000FE0r 1 0B 00 01 00 .dword $1000b +000FE4r 1 0C 00 01 00 .dword $1000c +000FE8r 1 0D 00 01 00 .dword $1000d +000FECr 1 0E 00 01 00 .dword $1000e +000FF0r 1 0F 00 01 00 .dword $1000f +000FF4r 1 F0 FF FF 7F .dword $7ffffff0 +000FF8r 1 F1 FF FF 7F .dword $7ffffff1 +000FFCr 1 F2 FF FF 7F .dword $7ffffff2 +001000r 1 F3 FF FF 7F .dword $7ffffff3 +001004r 1 F4 FF FF 7F .dword $7ffffff4 +001008r 1 F5 FF FF 7F .dword $7ffffff5 +00100Cr 1 F6 FF FF 7F .dword $7ffffff6 +001010r 1 F7 FF FF 7F .dword $7ffffff7 +001014r 1 F8 FF FF 7F .dword $7ffffff8 +001018r 1 F9 FF FF 7F .dword $7ffffff9 +00101Cr 1 FA FF FF 7F .dword $7ffffffa +001020r 1 FB FF FF 7F .dword $7ffffffb +001024r 1 FC FF FF 7F .dword $7ffffffc +001028r 1 FD FF FF 7F .dword $7ffffffd +00102Cr 1 FE FF FF 7F .dword $7ffffffe +001030r 1 FF FF FF 7F .dword $7fffffff +001034r 1 00 00 00 80 .dword $80000000 +001038r 1 01 00 00 80 .dword $80000001 +00103Cr 1 02 00 00 80 .dword $80000002 +001040r 1 03 00 00 80 .dword $80000003 +001044r 1 04 00 00 80 .dword $80000004 +001048r 1 05 00 00 80 .dword $80000005 +00104Cr 1 06 00 00 80 .dword $80000006 +001050r 1 07 00 00 80 .dword $80000007 +001054r 1 08 00 00 80 .dword $80000008 +001058r 1 09 00 00 80 .dword $80000009 +00105Cr 1 0A 00 00 80 .dword $8000000a +001060r 1 0B 00 00 80 .dword $8000000b +001064r 1 0C 00 00 80 .dword $8000000c +001068r 1 0D 00 00 80 .dword $8000000d +00106Cr 1 0E 00 00 80 .dword $8000000e +001070r 1 0F 00 00 80 .dword $8000000f +001074r 1 F0 FF FF 9F .dword $9ffffff0 +001078r 1 F1 FF FF 9F .dword $9ffffff1 +00107Cr 1 F2 FF FF 9F .dword $9ffffff2 +001080r 1 F3 FF FF 9F .dword $9ffffff3 +001084r 1 F4 FF FF 9F .dword $9ffffff4 +001088r 1 F5 FF FF 9F .dword $9ffffff5 +00108Cr 1 F6 FF FF 9F .dword $9ffffff6 +001090r 1 F7 FF FF 9F .dword $9ffffff7 +001094r 1 F8 FF FF 9F .dword $9ffffff8 +001098r 1 F9 FF FF 9F .dword $9ffffff9 +00109Cr 1 FA FF FF 9F .dword $9ffffffa +0010A0r 1 FB FF FF 9F .dword $9ffffffb +0010A4r 1 FC FF FF 9F .dword $9ffffffc +0010A8r 1 FD FF FF 9F .dword $9ffffffd +0010ACr 1 FE FF FF 9F .dword $9ffffffe +0010B0r 1 FF FF FF 9F .dword $9fffffff +0010B4r 1 00 00 00 A0 .dword $a0000000 +0010B8r 1 01 00 00 A0 .dword $a0000001 +0010BCr 1 02 00 00 A0 .dword $a0000002 +0010C0r 1 03 00 00 A0 .dword $a0000003 +0010C4r 1 04 00 00 A0 .dword $a0000004 +0010C8r 1 05 00 00 A0 .dword $a0000005 +0010CCr 1 06 00 00 A0 .dword $a0000006 +0010D0r 1 07 00 00 A0 .dword $a0000007 +0010D4r 1 08 00 00 A0 .dword $a0000008 +0010D8r 1 09 00 00 A0 .dword $a0000009 +0010DCr 1 0A 00 00 A0 .dword $a000000a +0010E0r 1 0B 00 00 A0 .dword $a000000b +0010E4r 1 0C 00 00 A0 .dword $a000000c +0010E8r 1 0D 00 00 A0 .dword $a000000d +0010ECr 1 0E 00 00 A0 .dword $a000000e +0010F0r 1 0F 00 00 A0 .dword $a000000f +0010F4r 1 F0 FF FF FF .dword $fffffff0 +0010F8r 1 F1 FF FF FF .dword $fffffff1 +0010FCr 1 F2 FF FF FF .dword $fffffff2 +001100r 1 F3 FF FF FF .dword $fffffff3 +001104r 1 F4 FF FF FF .dword $fffffff4 +001108r 1 F5 FF FF FF .dword $fffffff5 +00110Cr 1 F6 FF FF FF .dword $fffffff6 +001110r 1 F7 FF FF FF .dword $fffffff7 +001114r 1 F8 FF FF FF .dword $fffffff8 +001118r 1 F9 FF FF FF .dword $fffffff9 +00111Cr 1 FA FF FF FF .dword $fffffffa +001120r 1 FB FF FF FF .dword $fffffffb +001124r 1 FC FF FF FF .dword $fffffffc +001128r 1 FD FF FF FF .dword $fffffffd +00112Cr 1 FE FF FF FF .dword $fffffffe +001130r 1 FF FF FF FF .dword $ffffffff 001134r 1 -001134r 1 ; hex values, uppercase -001134r 1 00 00 00 00 .dword $0 -001138r 1 01 00 00 00 .dword $1 -00113Cr 1 02 00 00 00 .dword $2 -001140r 1 03 00 00 00 .dword $3 -001144r 1 04 00 00 00 .dword $4 -001148r 1 05 00 00 00 .dword $5 -00114Cr 1 06 00 00 00 .dword $6 -001150r 1 07 00 00 00 .dword $7 -001154r 1 08 00 00 00 .dword $8 -001158r 1 09 00 00 00 .dword $9 -00115Cr 1 0A 00 00 00 .dword $A -001160r 1 0B 00 00 00 .dword $B -001164r 1 0C 00 00 00 .dword $C -001168r 1 0D 00 00 00 .dword $D -00116Cr 1 0E 00 00 00 .dword $E -001170r 1 0F 00 00 00 .dword $F -001174r 1 10 00 00 00 .dword $10 -001178r 1 11 00 00 00 .dword $11 -00117Cr 1 12 00 00 00 .dword $12 -001180r 1 13 00 00 00 .dword $13 -001184r 1 70 00 00 00 .dword $70 -001188r 1 71 00 00 00 .dword $71 -00118Cr 1 72 00 00 00 .dword $72 -001190r 1 73 00 00 00 .dword $73 -001194r 1 74 00 00 00 .dword $74 -001198r 1 75 00 00 00 .dword $75 -00119Cr 1 76 00 00 00 .dword $76 -0011A0r 1 77 00 00 00 .dword $77 -0011A4r 1 78 00 00 00 .dword $78 -0011A8r 1 79 00 00 00 .dword $79 -0011ACr 1 7A 00 00 00 .dword $7A -0011B0r 1 7B 00 00 00 .dword $7B -0011B4r 1 7C 00 00 00 .dword $7C -0011B8r 1 7D 00 00 00 .dword $7D -0011BCr 1 7E 00 00 00 .dword $7E -0011C0r 1 7F 00 00 00 .dword $7F -0011C4r 1 80 00 00 00 .dword $80 -0011C8r 1 81 00 00 00 .dword $81 -0011CCr 1 82 00 00 00 .dword $82 -0011D0r 1 83 00 00 00 .dword $83 -0011D4r 1 84 00 00 00 .dword $84 -0011D8r 1 85 00 00 00 .dword $85 -0011DCr 1 86 00 00 00 .dword $86 -0011E0r 1 F0 00 00 00 .dword $F0 -0011E4r 1 F1 00 00 00 .dword $F1 -0011E8r 1 F2 00 00 00 .dword $F2 -0011ECr 1 F3 00 00 00 .dword $F3 -0011F0r 1 F4 00 00 00 .dword $F4 -0011F4r 1 F5 00 00 00 .dword $F5 -0011F8r 1 F6 00 00 00 .dword $F6 -0011FCr 1 F7 00 00 00 .dword $F7 -001200r 1 F8 00 00 00 .dword $F8 -001204r 1 F9 00 00 00 .dword $F9 -001208r 1 FA 00 00 00 .dword $FA -00120Cr 1 FB 00 00 00 .dword $FB -001210r 1 FC 00 00 00 .dword $FC -001214r 1 FD 00 00 00 .dword $FD -001218r 1 FE 00 00 00 .dword $FE -00121Cr 1 FF 00 00 00 .dword $FF -001220r 1 00 01 00 00 .dword $100 -001224r 1 01 01 00 00 .dword $101 -001228r 1 02 01 00 00 .dword $102 -00122Cr 1 03 01 00 00 .dword $103 -001230r 1 D2 0F 00 00 .dword $FD2 -001234r 1 D3 0F 00 00 .dword $FD3 -001238r 1 D4 0F 00 00 .dword $FD4 -00123Cr 1 D5 0F 00 00 .dword $FD5 -001240r 1 D6 0F 00 00 .dword $FD6 -001244r 1 D7 0F 00 00 .dword $FD7 -001248r 1 D8 0F 00 00 .dword $FD8 -00124Cr 1 D9 0F 00 00 .dword $FD9 -001250r 1 DA 0F 00 00 .dword $FDA -001254r 1 DB 0F 00 00 .dword $FDB -001258r 1 DC 0F 00 00 .dword $FDC -00125Cr 1 DD 0F 00 00 .dword $FDD -001260r 1 DE 0F 00 00 .dword $FDE -001264r 1 DF 0F 00 00 .dword $FDF -001268r 1 E0 0F 00 00 .dword $FE0 -00126Cr 1 E1 0F 00 00 .dword $FE1 -001270r 1 E2 0F 00 00 .dword $FE2 -001274r 1 E3 0F 00 00 .dword $FE3 -001278r 1 E4 0F 00 00 .dword $FE4 -00127Cr 1 E5 0F 00 00 .dword $FE5 -001280r 1 E6 0F 00 00 .dword $FE6 -001284r 1 E7 0F 00 00 .dword $FE7 -001288r 1 E8 0F 00 00 .dword $FE8 -00128Cr 1 E9 0F 00 00 .dword $FE9 -001290r 1 EA 0F 00 00 .dword $FEA -001294r 1 EB 0F 00 00 .dword $FEB -001298r 1 EC 0F 00 00 .dword $FEC -00129Cr 1 ED 0F 00 00 .dword $FED -0012A0r 1 EE 0F 00 00 .dword $FEE -0012A4r 1 EF 0F 00 00 .dword $FEF -0012A8r 1 F0 0F 00 00 .dword $FF0 -0012ACr 1 F1 0F 00 00 .dword $FF1 -0012B0r 1 F2 0F 00 00 .dword $FF2 -0012B4r 1 F3 0F 00 00 .dword $FF3 -0012B8r 1 F4 0F 00 00 .dword $FF4 -0012BCr 1 F5 0F 00 00 .dword $FF5 -0012C0r 1 F6 0F 00 00 .dword $FF6 -0012C4r 1 F7 0F 00 00 .dword $FF7 -0012C8r 1 F8 0F 00 00 .dword $FF8 -0012CCr 1 F9 0F 00 00 .dword $FF9 -0012D0r 1 FA 0F 00 00 .dword $FFA -0012D4r 1 FB 0F 00 00 .dword $FFB -0012D8r 1 FC 0F 00 00 .dword $FFC -0012DCr 1 FD 0F 00 00 .dword $FFD -0012E0r 1 FE 0F 00 00 .dword $FFE -0012E4r 1 FF 0F 00 00 .dword $FFF -0012E8r 1 00 10 00 00 .dword $1000 -0012ECr 1 01 10 00 00 .dword $1001 -0012F0r 1 02 10 00 00 .dword $1002 -0012F4r 1 03 10 00 00 .dword $1003 -0012F8r 1 04 10 00 00 .dword $1004 -0012FCr 1 05 10 00 00 .dword $1005 -001300r 1 06 10 00 00 .dword $1006 -001304r 1 07 10 00 00 .dword $1007 -001308r 1 08 10 00 00 .dword $1008 -00130Cr 1 F0 7F 00 00 .dword $7FF0 -001310r 1 F1 7F 00 00 .dword $7FF1 -001314r 1 F2 7F 00 00 .dword $7FF2 -001318r 1 F3 7F 00 00 .dword $7FF3 -00131Cr 1 F4 7F 00 00 .dword $7FF4 -001320r 1 F5 7F 00 00 .dword $7FF5 -001324r 1 F6 7F 00 00 .dword $7FF6 -001328r 1 F7 7F 00 00 .dword $7FF7 -00132Cr 1 F8 7F 00 00 .dword $7FF8 -001330r 1 F9 7F 00 00 .dword $7FF9 -001334r 1 FA 7F 00 00 .dword $7FFA -001338r 1 FB 7F 00 00 .dword $7FFB -00133Cr 1 FC 7F 00 00 .dword $7FFC -001340r 1 FD 7F 00 00 .dword $7FFD -001344r 1 FE 7F 00 00 .dword $7FFE -001348r 1 FF 7F 00 00 .dword $7FFF -00134Cr 1 00 80 00 00 .dword $8000 -001350r 1 01 80 00 00 .dword $8001 -001354r 1 02 80 00 00 .dword $8002 -001358r 1 03 80 00 00 .dword $8003 -00135Cr 1 04 80 00 00 .dword $8004 -001360r 1 05 80 00 00 .dword $8005 -001364r 1 06 80 00 00 .dword $8006 -001368r 1 07 80 00 00 .dword $8007 -00136Cr 1 08 80 00 00 .dword $8008 -001370r 1 09 80 00 00 .dword $8009 -001374r 1 0A 80 00 00 .dword $800A -001378r 1 0B 80 00 00 .dword $800B -00137Cr 1 E1 9F 00 00 .dword $9FE1 -001380r 1 E2 9F 00 00 .dword $9FE2 -001384r 1 E3 9F 00 00 .dword $9FE3 -001388r 1 E4 9F 00 00 .dword $9FE4 -00138Cr 1 E5 9F 00 00 .dword $9FE5 -001390r 1 E6 9F 00 00 .dword $9FE6 -001394r 1 E7 9F 00 00 .dword $9FE7 -001398r 1 E8 9F 00 00 .dword $9FE8 -00139Cr 1 E9 9F 00 00 .dword $9FE9 -0013A0r 1 EA 9F 00 00 .dword $9FEA -0013A4r 1 EB 9F 00 00 .dword $9FEB -0013A8r 1 EC 9F 00 00 .dword $9FEC -0013ACr 1 ED 9F 00 00 .dword $9FED -0013B0r 1 EE 9F 00 00 .dword $9FEE -0013B4r 1 EF 9F 00 00 .dword $9FEF -0013B8r 1 F0 9F 00 00 .dword $9FF0 -0013BCr 1 F1 9F 00 00 .dword $9FF1 -0013C0r 1 F2 9F 00 00 .dword $9FF2 -0013C4r 1 F3 9F 00 00 .dword $9FF3 -0013C8r 1 F4 9F 00 00 .dword $9FF4 -0013CCr 1 F5 9F 00 00 .dword $9FF5 -0013D0r 1 F6 9F 00 00 .dword $9FF6 -0013D4r 1 F7 9F 00 00 .dword $9FF7 -0013D8r 1 F8 9F 00 00 .dword $9FF8 -0013DCr 1 F9 9F 00 00 .dword $9FF9 -0013E0r 1 FA 9F 00 00 .dword $9FFA -0013E4r 1 FB 9F 00 00 .dword $9FFB -0013E8r 1 FC 9F 00 00 .dword $9FFC -0013ECr 1 FD 9F 00 00 .dword $9FFD -0013F0r 1 FE 9F 00 00 .dword $9FFE -0013F4r 1 FF 9F 00 00 .dword $9FFF -0013F8r 1 00 A0 00 00 .dword $A000 -0013FCr 1 01 A0 00 00 .dword $A001 -001400r 1 02 A0 00 00 .dword $A002 -001404r 1 03 A0 00 00 .dword $A003 -001408r 1 04 A0 00 00 .dword $A004 -00140Cr 1 05 A0 00 00 .dword $A005 -001410r 1 06 A0 00 00 .dword $A006 -001414r 1 07 A0 00 00 .dword $A007 -001418r 1 08 A0 00 00 .dword $A008 -00141Cr 1 09 A0 00 00 .dword $A009 -001420r 1 0A A0 00 00 .dword $A00A -001424r 1 0B A0 00 00 .dword $A00B -001428r 1 0C A0 00 00 .dword $A00C -00142Cr 1 0D A0 00 00 .dword $A00D -001430r 1 0E A0 00 00 .dword $A00E -001434r 1 0F A0 00 00 .dword $A00F -001438r 1 E1 AF 00 00 .dword $AFE1 -00143Cr 1 E2 AF 00 00 .dword $AFE2 -001440r 1 E3 AF 00 00 .dword $AFE3 -001444r 1 E4 AF 00 00 .dword $AFE4 -001448r 1 E5 AF 00 00 .dword $AFE5 -00144Cr 1 E6 AF 00 00 .dword $AFE6 -001450r 1 E7 AF 00 00 .dword $AFE7 -001454r 1 E8 AF 00 00 .dword $AFE8 -001458r 1 E9 AF 00 00 .dword $AFE9 -00145Cr 1 EA AF 00 00 .dword $AFEA -001460r 1 EB AF 00 00 .dword $AFEB -001464r 1 EC AF 00 00 .dword $AFEC -001468r 1 ED AF 00 00 .dword $AFED -00146Cr 1 EE AF 00 00 .dword $AFEE -001470r 1 EF AF 00 00 .dword $AFEF -001474r 1 F0 AF 00 00 .dword $AFF0 -001478r 1 F1 AF 00 00 .dword $AFF1 -00147Cr 1 F2 AF 00 00 .dword $AFF2 -001480r 1 F3 AF 00 00 .dword $AFF3 -001484r 1 F4 AF 00 00 .dword $AFF4 -001488r 1 F5 AF 00 00 .dword $AFF5 -00148Cr 1 F6 AF 00 00 .dword $AFF6 -001490r 1 F7 AF 00 00 .dword $AFF7 -001494r 1 F8 AF 00 00 .dword $AFF8 -001498r 1 F9 AF 00 00 .dword $AFF9 -00149Cr 1 FA AF 00 00 .dword $AFFA -0014A0r 1 FB AF 00 00 .dword $AFFB -0014A4r 1 FC AF 00 00 .dword $AFFC -0014A8r 1 FD AF 00 00 .dword $AFFD -0014ACr 1 FE AF 00 00 .dword $AFFE -0014B0r 1 FF AF 00 00 .dword $AFFF -0014B4r 1 00 B0 00 00 .dword $B000 -0014B8r 1 01 B0 00 00 .dword $B001 -0014BCr 1 02 B0 00 00 .dword $B002 -0014C0r 1 03 B0 00 00 .dword $B003 -0014C4r 1 04 B0 00 00 .dword $B004 -0014C8r 1 05 B0 00 00 .dword $B005 -0014CCr 1 06 B0 00 00 .dword $B006 -0014D0r 1 07 B0 00 00 .dword $B007 -0014D4r 1 08 B0 00 00 .dword $B008 -0014D8r 1 09 B0 00 00 .dword $B009 -0014DCr 1 0A B0 00 00 .dword $B00A -0014E0r 1 0B B0 00 00 .dword $B00B -0014E4r 1 0C B0 00 00 .dword $B00C -0014E8r 1 0D B0 00 00 .dword $B00D -0014ECr 1 0E B0 00 00 .dword $B00E -0014F0r 1 0F B0 00 00 .dword $B00F -0014F4r 1 E1 FF 00 00 .dword $FFE1 -0014F8r 1 E2 FF 00 00 .dword $FFE2 -0014FCr 1 E3 FF 00 00 .dword $FFE3 -001500r 1 E4 FF 00 00 .dword $FFE4 -001504r 1 E5 FF 00 00 .dword $FFE5 -001508r 1 E6 FF 00 00 .dword $FFE6 -00150Cr 1 E7 FF 00 00 .dword $FFE7 -001510r 1 E8 FF 00 00 .dword $FFE8 -001514r 1 E9 FF 00 00 .dword $FFE9 -001518r 1 EA FF 00 00 .dword $FFEA -00151Cr 1 EB FF 00 00 .dword $FFEB -001520r 1 EC FF 00 00 .dword $FFEC -001524r 1 ED FF 00 00 .dword $FFED -001528r 1 EE FF 00 00 .dword $FFEE -00152Cr 1 EF FF 00 00 .dword $FFEF -001530r 1 F0 FF 00 00 .dword $FFF0 -001534r 1 F1 FF 00 00 .dword $FFF1 -001538r 1 F2 FF 00 00 .dword $FFF2 -00153Cr 1 F3 FF 00 00 .dword $FFF3 -001540r 1 F4 FF 00 00 .dword $FFF4 -001544r 1 F5 FF 00 00 .dword $FFF5 -001548r 1 F6 FF 00 00 .dword $FFF6 -00154Cr 1 F7 FF 00 00 .dword $FFF7 -001550r 1 F8 FF 00 00 .dword $FFF8 -001554r 1 F9 FF 00 00 .dword $FFF9 -001558r 1 FA FF 00 00 .dword $FFFA -00155Cr 1 FB FF 00 00 .dword $FFFB -001560r 1 FC FF 00 00 .dword $FFFC -001564r 1 FD FF 00 00 .dword $FFFD -001568r 1 FE FF 00 00 .dword $FFFE -00156Cr 1 FF FF 00 00 .dword $FFFF -001570r 1 00 00 01 00 .dword $10000 -001574r 1 01 00 01 00 .dword $10001 -001578r 1 02 00 01 00 .dword $10002 -00157Cr 1 03 00 01 00 .dword $10003 -001580r 1 04 00 01 00 .dword $10004 -001584r 1 05 00 01 00 .dword $10005 -001588r 1 06 00 01 00 .dword $10006 -00158Cr 1 07 00 01 00 .dword $10007 -001590r 1 08 00 01 00 .dword $10008 -001594r 1 09 00 01 00 .dword $10009 -001598r 1 0A 00 01 00 .dword $1000A -00159Cr 1 0B 00 01 00 .dword $1000B -0015A0r 1 0C 00 01 00 .dword $1000C -0015A4r 1 0D 00 01 00 .dword $1000D -0015A8r 1 0E 00 01 00 .dword $1000E -0015ACr 1 0F 00 01 00 .dword $1000F -0015B0r 1 F0 FF FF 7F .dword $7FFFFFF0 -0015B4r 1 F1 FF FF 7F .dword $7FFFFFF1 -0015B8r 1 F2 FF FF 7F .dword $7FFFFFF2 -0015BCr 1 F3 FF FF 7F .dword $7FFFFFF3 -0015C0r 1 F4 FF FF 7F .dword $7FFFFFF4 -0015C4r 1 F5 FF FF 7F .dword $7FFFFFF5 -0015C8r 1 F6 FF FF 7F .dword $7FFFFFF6 -0015CCr 1 F7 FF FF 7F .dword $7FFFFFF7 -0015D0r 1 F8 FF FF 7F .dword $7FFFFFF8 -0015D4r 1 F9 FF FF 7F .dword $7FFFFFF9 -0015D8r 1 FA FF FF 7F .dword $7FFFFFFA -0015DCr 1 FB FF FF 7F .dword $7FFFFFFB -0015E0r 1 FC FF FF 7F .dword $7FFFFFFC -0015E4r 1 FD FF FF 7F .dword $7FFFFFFD -0015E8r 1 FE FF FF 7F .dword $7FFFFFFE -0015ECr 1 FF FF FF 7F .dword $7FFFFFFF -0015F0r 1 00 00 00 80 .dword $80000000 -0015F4r 1 01 00 00 80 .dword $80000001 -0015F8r 1 02 00 00 80 .dword $80000002 -0015FCr 1 03 00 00 80 .dword $80000003 -001600r 1 04 00 00 80 .dword $80000004 -001604r 1 05 00 00 80 .dword $80000005 -001608r 1 06 00 00 80 .dword $80000006 -00160Cr 1 07 00 00 80 .dword $80000007 -001610r 1 08 00 00 80 .dword $80000008 -001614r 1 09 00 00 80 .dword $80000009 -001618r 1 0A 00 00 80 .dword $8000000A -00161Cr 1 0B 00 00 80 .dword $8000000B -001620r 1 0C 00 00 80 .dword $8000000C -001624r 1 0D 00 00 80 .dword $8000000D -001628r 1 0E 00 00 80 .dword $8000000E -00162Cr 1 0F 00 00 80 .dword $8000000F -001630r 1 F0 FF FF 9F .dword $9FFFFFF0 -001634r 1 F1 FF FF 9F .dword $9FFFFFF1 -001638r 1 F2 FF FF 9F .dword $9FFFFFF2 -00163Cr 1 F3 FF FF 9F .dword $9FFFFFF3 -001640r 1 F4 FF FF 9F .dword $9FFFFFF4 -001644r 1 F5 FF FF 9F .dword $9FFFFFF5 -001648r 1 F6 FF FF 9F .dword $9FFFFFF6 -00164Cr 1 F7 FF FF 9F .dword $9FFFFFF7 -001650r 1 F8 FF FF 9F .dword $9FFFFFF8 -001654r 1 F9 FF FF 9F .dword $9FFFFFF9 -001658r 1 FA FF FF 9F .dword $9FFFFFFA -00165Cr 1 FB FF FF 9F .dword $9FFFFFFB -001660r 1 FC FF FF 9F .dword $9FFFFFFC -001664r 1 FD FF FF 9F .dword $9FFFFFFD -001668r 1 FE FF FF 9F .dword $9FFFFFFE -00166Cr 1 FF FF FF 9F .dword $9FFFFFFF -001670r 1 00 00 00 A0 .dword $A0000000 -001674r 1 01 00 00 A0 .dword $A0000001 -001678r 1 02 00 00 A0 .dword $A0000002 -00167Cr 1 03 00 00 A0 .dword $A0000003 -001680r 1 04 00 00 A0 .dword $A0000004 -001684r 1 05 00 00 A0 .dword $A0000005 -001688r 1 06 00 00 A0 .dword $A0000006 -00168Cr 1 07 00 00 A0 .dword $A0000007 -001690r 1 08 00 00 A0 .dword $A0000008 -001694r 1 09 00 00 A0 .dword $A0000009 -001698r 1 0A 00 00 A0 .dword $A000000A -00169Cr 1 0B 00 00 A0 .dword $A000000B -0016A0r 1 0C 00 00 A0 .dword $A000000C -0016A4r 1 0D 00 00 A0 .dword $A000000D -0016A8r 1 0E 00 00 A0 .dword $A000000E -0016ACr 1 0F 00 00 A0 .dword $A000000F -0016B0r 1 F0 FF FF FF .dword $FFFFFFF0 -0016B4r 1 F1 FF FF FF .dword $FFFFFFF1 -0016B8r 1 F2 FF FF FF .dword $FFFFFFF2 -0016BCr 1 F3 FF FF FF .dword $FFFFFFF3 -0016C0r 1 F4 FF FF FF .dword $FFFFFFF4 -0016C4r 1 F5 FF FF FF .dword $FFFFFFF5 -0016C8r 1 F6 FF FF FF .dword $FFFFFFF6 -0016CCr 1 F7 FF FF FF .dword $FFFFFFF7 -0016D0r 1 F8 FF FF FF .dword $FFFFFFF8 -0016D4r 1 F9 FF FF FF .dword $FFFFFFF9 -0016D8r 1 FA FF FF FF .dword $FFFFFFFA -0016DCr 1 FB FF FF FF .dword $FFFFFFFB -0016E0r 1 FC FF FF FF .dword $FFFFFFFC -0016E4r 1 FD FF FF FF .dword $FFFFFFFD -0016E8r 1 FE FF FF FF .dword $FFFFFFFE -0016ECr 1 FF FF FF FF .dword $FFFFFFFF +001134r 1 ; hex values, uppercase +001134r 1 00 00 00 00 .dword $0 +001138r 1 01 00 00 00 .dword $1 +00113Cr 1 02 00 00 00 .dword $2 +001140r 1 03 00 00 00 .dword $3 +001144r 1 04 00 00 00 .dword $4 +001148r 1 05 00 00 00 .dword $5 +00114Cr 1 06 00 00 00 .dword $6 +001150r 1 07 00 00 00 .dword $7 +001154r 1 08 00 00 00 .dword $8 +001158r 1 09 00 00 00 .dword $9 +00115Cr 1 0A 00 00 00 .dword $A +001160r 1 0B 00 00 00 .dword $B +001164r 1 0C 00 00 00 .dword $C +001168r 1 0D 00 00 00 .dword $D +00116Cr 1 0E 00 00 00 .dword $E +001170r 1 0F 00 00 00 .dword $F +001174r 1 10 00 00 00 .dword $10 +001178r 1 11 00 00 00 .dword $11 +00117Cr 1 12 00 00 00 .dword $12 +001180r 1 13 00 00 00 .dword $13 +001184r 1 70 00 00 00 .dword $70 +001188r 1 71 00 00 00 .dword $71 +00118Cr 1 72 00 00 00 .dword $72 +001190r 1 73 00 00 00 .dword $73 +001194r 1 74 00 00 00 .dword $74 +001198r 1 75 00 00 00 .dword $75 +00119Cr 1 76 00 00 00 .dword $76 +0011A0r 1 77 00 00 00 .dword $77 +0011A4r 1 78 00 00 00 .dword $78 +0011A8r 1 79 00 00 00 .dword $79 +0011ACr 1 7A 00 00 00 .dword $7A +0011B0r 1 7B 00 00 00 .dword $7B +0011B4r 1 7C 00 00 00 .dword $7C +0011B8r 1 7D 00 00 00 .dword $7D +0011BCr 1 7E 00 00 00 .dword $7E +0011C0r 1 7F 00 00 00 .dword $7F +0011C4r 1 80 00 00 00 .dword $80 +0011C8r 1 81 00 00 00 .dword $81 +0011CCr 1 82 00 00 00 .dword $82 +0011D0r 1 83 00 00 00 .dword $83 +0011D4r 1 84 00 00 00 .dword $84 +0011D8r 1 85 00 00 00 .dword $85 +0011DCr 1 86 00 00 00 .dword $86 +0011E0r 1 F0 00 00 00 .dword $F0 +0011E4r 1 F1 00 00 00 .dword $F1 +0011E8r 1 F2 00 00 00 .dword $F2 +0011ECr 1 F3 00 00 00 .dword $F3 +0011F0r 1 F4 00 00 00 .dword $F4 +0011F4r 1 F5 00 00 00 .dword $F5 +0011F8r 1 F6 00 00 00 .dword $F6 +0011FCr 1 F7 00 00 00 .dword $F7 +001200r 1 F8 00 00 00 .dword $F8 +001204r 1 F9 00 00 00 .dword $F9 +001208r 1 FA 00 00 00 .dword $FA +00120Cr 1 FB 00 00 00 .dword $FB +001210r 1 FC 00 00 00 .dword $FC +001214r 1 FD 00 00 00 .dword $FD +001218r 1 FE 00 00 00 .dword $FE +00121Cr 1 FF 00 00 00 .dword $FF +001220r 1 00 01 00 00 .dword $100 +001224r 1 01 01 00 00 .dword $101 +001228r 1 02 01 00 00 .dword $102 +00122Cr 1 03 01 00 00 .dword $103 +001230r 1 D2 0F 00 00 .dword $FD2 +001234r 1 D3 0F 00 00 .dword $FD3 +001238r 1 D4 0F 00 00 .dword $FD4 +00123Cr 1 D5 0F 00 00 .dword $FD5 +001240r 1 D6 0F 00 00 .dword $FD6 +001244r 1 D7 0F 00 00 .dword $FD7 +001248r 1 D8 0F 00 00 .dword $FD8 +00124Cr 1 D9 0F 00 00 .dword $FD9 +001250r 1 DA 0F 00 00 .dword $FDA +001254r 1 DB 0F 00 00 .dword $FDB +001258r 1 DC 0F 00 00 .dword $FDC +00125Cr 1 DD 0F 00 00 .dword $FDD +001260r 1 DE 0F 00 00 .dword $FDE +001264r 1 DF 0F 00 00 .dword $FDF +001268r 1 E0 0F 00 00 .dword $FE0 +00126Cr 1 E1 0F 00 00 .dword $FE1 +001270r 1 E2 0F 00 00 .dword $FE2 +001274r 1 E3 0F 00 00 .dword $FE3 +001278r 1 E4 0F 00 00 .dword $FE4 +00127Cr 1 E5 0F 00 00 .dword $FE5 +001280r 1 E6 0F 00 00 .dword $FE6 +001284r 1 E7 0F 00 00 .dword $FE7 +001288r 1 E8 0F 00 00 .dword $FE8 +00128Cr 1 E9 0F 00 00 .dword $FE9 +001290r 1 EA 0F 00 00 .dword $FEA +001294r 1 EB 0F 00 00 .dword $FEB +001298r 1 EC 0F 00 00 .dword $FEC +00129Cr 1 ED 0F 00 00 .dword $FED +0012A0r 1 EE 0F 00 00 .dword $FEE +0012A4r 1 EF 0F 00 00 .dword $FEF +0012A8r 1 F0 0F 00 00 .dword $FF0 +0012ACr 1 F1 0F 00 00 .dword $FF1 +0012B0r 1 F2 0F 00 00 .dword $FF2 +0012B4r 1 F3 0F 00 00 .dword $FF3 +0012B8r 1 F4 0F 00 00 .dword $FF4 +0012BCr 1 F5 0F 00 00 .dword $FF5 +0012C0r 1 F6 0F 00 00 .dword $FF6 +0012C4r 1 F7 0F 00 00 .dword $FF7 +0012C8r 1 F8 0F 00 00 .dword $FF8 +0012CCr 1 F9 0F 00 00 .dword $FF9 +0012D0r 1 FA 0F 00 00 .dword $FFA +0012D4r 1 FB 0F 00 00 .dword $FFB +0012D8r 1 FC 0F 00 00 .dword $FFC +0012DCr 1 FD 0F 00 00 .dword $FFD +0012E0r 1 FE 0F 00 00 .dword $FFE +0012E4r 1 FF 0F 00 00 .dword $FFF +0012E8r 1 00 10 00 00 .dword $1000 +0012ECr 1 01 10 00 00 .dword $1001 +0012F0r 1 02 10 00 00 .dword $1002 +0012F4r 1 03 10 00 00 .dword $1003 +0012F8r 1 04 10 00 00 .dword $1004 +0012FCr 1 05 10 00 00 .dword $1005 +001300r 1 06 10 00 00 .dword $1006 +001304r 1 07 10 00 00 .dword $1007 +001308r 1 08 10 00 00 .dword $1008 +00130Cr 1 F0 7F 00 00 .dword $7FF0 +001310r 1 F1 7F 00 00 .dword $7FF1 +001314r 1 F2 7F 00 00 .dword $7FF2 +001318r 1 F3 7F 00 00 .dword $7FF3 +00131Cr 1 F4 7F 00 00 .dword $7FF4 +001320r 1 F5 7F 00 00 .dword $7FF5 +001324r 1 F6 7F 00 00 .dword $7FF6 +001328r 1 F7 7F 00 00 .dword $7FF7 +00132Cr 1 F8 7F 00 00 .dword $7FF8 +001330r 1 F9 7F 00 00 .dword $7FF9 +001334r 1 FA 7F 00 00 .dword $7FFA +001338r 1 FB 7F 00 00 .dword $7FFB +00133Cr 1 FC 7F 00 00 .dword $7FFC +001340r 1 FD 7F 00 00 .dword $7FFD +001344r 1 FE 7F 00 00 .dword $7FFE +001348r 1 FF 7F 00 00 .dword $7FFF +00134Cr 1 00 80 00 00 .dword $8000 +001350r 1 01 80 00 00 .dword $8001 +001354r 1 02 80 00 00 .dword $8002 +001358r 1 03 80 00 00 .dword $8003 +00135Cr 1 04 80 00 00 .dword $8004 +001360r 1 05 80 00 00 .dword $8005 +001364r 1 06 80 00 00 .dword $8006 +001368r 1 07 80 00 00 .dword $8007 +00136Cr 1 08 80 00 00 .dword $8008 +001370r 1 09 80 00 00 .dword $8009 +001374r 1 0A 80 00 00 .dword $800A +001378r 1 0B 80 00 00 .dword $800B +00137Cr 1 E1 9F 00 00 .dword $9FE1 +001380r 1 E2 9F 00 00 .dword $9FE2 +001384r 1 E3 9F 00 00 .dword $9FE3 +001388r 1 E4 9F 00 00 .dword $9FE4 +00138Cr 1 E5 9F 00 00 .dword $9FE5 +001390r 1 E6 9F 00 00 .dword $9FE6 +001394r 1 E7 9F 00 00 .dword $9FE7 +001398r 1 E8 9F 00 00 .dword $9FE8 +00139Cr 1 E9 9F 00 00 .dword $9FE9 +0013A0r 1 EA 9F 00 00 .dword $9FEA +0013A4r 1 EB 9F 00 00 .dword $9FEB +0013A8r 1 EC 9F 00 00 .dword $9FEC +0013ACr 1 ED 9F 00 00 .dword $9FED +0013B0r 1 EE 9F 00 00 .dword $9FEE +0013B4r 1 EF 9F 00 00 .dword $9FEF +0013B8r 1 F0 9F 00 00 .dword $9FF0 +0013BCr 1 F1 9F 00 00 .dword $9FF1 +0013C0r 1 F2 9F 00 00 .dword $9FF2 +0013C4r 1 F3 9F 00 00 .dword $9FF3 +0013C8r 1 F4 9F 00 00 .dword $9FF4 +0013CCr 1 F5 9F 00 00 .dword $9FF5 +0013D0r 1 F6 9F 00 00 .dword $9FF6 +0013D4r 1 F7 9F 00 00 .dword $9FF7 +0013D8r 1 F8 9F 00 00 .dword $9FF8 +0013DCr 1 F9 9F 00 00 .dword $9FF9 +0013E0r 1 FA 9F 00 00 .dword $9FFA +0013E4r 1 FB 9F 00 00 .dword $9FFB +0013E8r 1 FC 9F 00 00 .dword $9FFC +0013ECr 1 FD 9F 00 00 .dword $9FFD +0013F0r 1 FE 9F 00 00 .dword $9FFE +0013F4r 1 FF 9F 00 00 .dword $9FFF +0013F8r 1 00 A0 00 00 .dword $A000 +0013FCr 1 01 A0 00 00 .dword $A001 +001400r 1 02 A0 00 00 .dword $A002 +001404r 1 03 A0 00 00 .dword $A003 +001408r 1 04 A0 00 00 .dword $A004 +00140Cr 1 05 A0 00 00 .dword $A005 +001410r 1 06 A0 00 00 .dword $A006 +001414r 1 07 A0 00 00 .dword $A007 +001418r 1 08 A0 00 00 .dword $A008 +00141Cr 1 09 A0 00 00 .dword $A009 +001420r 1 0A A0 00 00 .dword $A00A +001424r 1 0B A0 00 00 .dword $A00B +001428r 1 0C A0 00 00 .dword $A00C +00142Cr 1 0D A0 00 00 .dword $A00D +001430r 1 0E A0 00 00 .dword $A00E +001434r 1 0F A0 00 00 .dword $A00F +001438r 1 E1 AF 00 00 .dword $AFE1 +00143Cr 1 E2 AF 00 00 .dword $AFE2 +001440r 1 E3 AF 00 00 .dword $AFE3 +001444r 1 E4 AF 00 00 .dword $AFE4 +001448r 1 E5 AF 00 00 .dword $AFE5 +00144Cr 1 E6 AF 00 00 .dword $AFE6 +001450r 1 E7 AF 00 00 .dword $AFE7 +001454r 1 E8 AF 00 00 .dword $AFE8 +001458r 1 E9 AF 00 00 .dword $AFE9 +00145Cr 1 EA AF 00 00 .dword $AFEA +001460r 1 EB AF 00 00 .dword $AFEB +001464r 1 EC AF 00 00 .dword $AFEC +001468r 1 ED AF 00 00 .dword $AFED +00146Cr 1 EE AF 00 00 .dword $AFEE +001470r 1 EF AF 00 00 .dword $AFEF +001474r 1 F0 AF 00 00 .dword $AFF0 +001478r 1 F1 AF 00 00 .dword $AFF1 +00147Cr 1 F2 AF 00 00 .dword $AFF2 +001480r 1 F3 AF 00 00 .dword $AFF3 +001484r 1 F4 AF 00 00 .dword $AFF4 +001488r 1 F5 AF 00 00 .dword $AFF5 +00148Cr 1 F6 AF 00 00 .dword $AFF6 +001490r 1 F7 AF 00 00 .dword $AFF7 +001494r 1 F8 AF 00 00 .dword $AFF8 +001498r 1 F9 AF 00 00 .dword $AFF9 +00149Cr 1 FA AF 00 00 .dword $AFFA +0014A0r 1 FB AF 00 00 .dword $AFFB +0014A4r 1 FC AF 00 00 .dword $AFFC +0014A8r 1 FD AF 00 00 .dword $AFFD +0014ACr 1 FE AF 00 00 .dword $AFFE +0014B0r 1 FF AF 00 00 .dword $AFFF +0014B4r 1 00 B0 00 00 .dword $B000 +0014B8r 1 01 B0 00 00 .dword $B001 +0014BCr 1 02 B0 00 00 .dword $B002 +0014C0r 1 03 B0 00 00 .dword $B003 +0014C4r 1 04 B0 00 00 .dword $B004 +0014C8r 1 05 B0 00 00 .dword $B005 +0014CCr 1 06 B0 00 00 .dword $B006 +0014D0r 1 07 B0 00 00 .dword $B007 +0014D4r 1 08 B0 00 00 .dword $B008 +0014D8r 1 09 B0 00 00 .dword $B009 +0014DCr 1 0A B0 00 00 .dword $B00A +0014E0r 1 0B B0 00 00 .dword $B00B +0014E4r 1 0C B0 00 00 .dword $B00C +0014E8r 1 0D B0 00 00 .dword $B00D +0014ECr 1 0E B0 00 00 .dword $B00E +0014F0r 1 0F B0 00 00 .dword $B00F +0014F4r 1 E1 FF 00 00 .dword $FFE1 +0014F8r 1 E2 FF 00 00 .dword $FFE2 +0014FCr 1 E3 FF 00 00 .dword $FFE3 +001500r 1 E4 FF 00 00 .dword $FFE4 +001504r 1 E5 FF 00 00 .dword $FFE5 +001508r 1 E6 FF 00 00 .dword $FFE6 +00150Cr 1 E7 FF 00 00 .dword $FFE7 +001510r 1 E8 FF 00 00 .dword $FFE8 +001514r 1 E9 FF 00 00 .dword $FFE9 +001518r 1 EA FF 00 00 .dword $FFEA +00151Cr 1 EB FF 00 00 .dword $FFEB +001520r 1 EC FF 00 00 .dword $FFEC +001524r 1 ED FF 00 00 .dword $FFED +001528r 1 EE FF 00 00 .dword $FFEE +00152Cr 1 EF FF 00 00 .dword $FFEF +001530r 1 F0 FF 00 00 .dword $FFF0 +001534r 1 F1 FF 00 00 .dword $FFF1 +001538r 1 F2 FF 00 00 .dword $FFF2 +00153Cr 1 F3 FF 00 00 .dword $FFF3 +001540r 1 F4 FF 00 00 .dword $FFF4 +001544r 1 F5 FF 00 00 .dword $FFF5 +001548r 1 F6 FF 00 00 .dword $FFF6 +00154Cr 1 F7 FF 00 00 .dword $FFF7 +001550r 1 F8 FF 00 00 .dword $FFF8 +001554r 1 F9 FF 00 00 .dword $FFF9 +001558r 1 FA FF 00 00 .dword $FFFA +00155Cr 1 FB FF 00 00 .dword $FFFB +001560r 1 FC FF 00 00 .dword $FFFC +001564r 1 FD FF 00 00 .dword $FFFD +001568r 1 FE FF 00 00 .dword $FFFE +00156Cr 1 FF FF 00 00 .dword $FFFF +001570r 1 00 00 01 00 .dword $10000 +001574r 1 01 00 01 00 .dword $10001 +001578r 1 02 00 01 00 .dword $10002 +00157Cr 1 03 00 01 00 .dword $10003 +001580r 1 04 00 01 00 .dword $10004 +001584r 1 05 00 01 00 .dword $10005 +001588r 1 06 00 01 00 .dword $10006 +00158Cr 1 07 00 01 00 .dword $10007 +001590r 1 08 00 01 00 .dword $10008 +001594r 1 09 00 01 00 .dword $10009 +001598r 1 0A 00 01 00 .dword $1000A +00159Cr 1 0B 00 01 00 .dword $1000B +0015A0r 1 0C 00 01 00 .dword $1000C +0015A4r 1 0D 00 01 00 .dword $1000D +0015A8r 1 0E 00 01 00 .dword $1000E +0015ACr 1 0F 00 01 00 .dword $1000F +0015B0r 1 F0 FF FF 7F .dword $7FFFFFF0 +0015B4r 1 F1 FF FF 7F .dword $7FFFFFF1 +0015B8r 1 F2 FF FF 7F .dword $7FFFFFF2 +0015BCr 1 F3 FF FF 7F .dword $7FFFFFF3 +0015C0r 1 F4 FF FF 7F .dword $7FFFFFF4 +0015C4r 1 F5 FF FF 7F .dword $7FFFFFF5 +0015C8r 1 F6 FF FF 7F .dword $7FFFFFF6 +0015CCr 1 F7 FF FF 7F .dword $7FFFFFF7 +0015D0r 1 F8 FF FF 7F .dword $7FFFFFF8 +0015D4r 1 F9 FF FF 7F .dword $7FFFFFF9 +0015D8r 1 FA FF FF 7F .dword $7FFFFFFA +0015DCr 1 FB FF FF 7F .dword $7FFFFFFB +0015E0r 1 FC FF FF 7F .dword $7FFFFFFC +0015E4r 1 FD FF FF 7F .dword $7FFFFFFD +0015E8r 1 FE FF FF 7F .dword $7FFFFFFE +0015ECr 1 FF FF FF 7F .dword $7FFFFFFF +0015F0r 1 00 00 00 80 .dword $80000000 +0015F4r 1 01 00 00 80 .dword $80000001 +0015F8r 1 02 00 00 80 .dword $80000002 +0015FCr 1 03 00 00 80 .dword $80000003 +001600r 1 04 00 00 80 .dword $80000004 +001604r 1 05 00 00 80 .dword $80000005 +001608r 1 06 00 00 80 .dword $80000006 +00160Cr 1 07 00 00 80 .dword $80000007 +001610r 1 08 00 00 80 .dword $80000008 +001614r 1 09 00 00 80 .dword $80000009 +001618r 1 0A 00 00 80 .dword $8000000A +00161Cr 1 0B 00 00 80 .dword $8000000B +001620r 1 0C 00 00 80 .dword $8000000C +001624r 1 0D 00 00 80 .dword $8000000D +001628r 1 0E 00 00 80 .dword $8000000E +00162Cr 1 0F 00 00 80 .dword $8000000F +001630r 1 F0 FF FF 9F .dword $9FFFFFF0 +001634r 1 F1 FF FF 9F .dword $9FFFFFF1 +001638r 1 F2 FF FF 9F .dword $9FFFFFF2 +00163Cr 1 F3 FF FF 9F .dword $9FFFFFF3 +001640r 1 F4 FF FF 9F .dword $9FFFFFF4 +001644r 1 F5 FF FF 9F .dword $9FFFFFF5 +001648r 1 F6 FF FF 9F .dword $9FFFFFF6 +00164Cr 1 F7 FF FF 9F .dword $9FFFFFF7 +001650r 1 F8 FF FF 9F .dword $9FFFFFF8 +001654r 1 F9 FF FF 9F .dword $9FFFFFF9 +001658r 1 FA FF FF 9F .dword $9FFFFFFA +00165Cr 1 FB FF FF 9F .dword $9FFFFFFB +001660r 1 FC FF FF 9F .dword $9FFFFFFC +001664r 1 FD FF FF 9F .dword $9FFFFFFD +001668r 1 FE FF FF 9F .dword $9FFFFFFE +00166Cr 1 FF FF FF 9F .dword $9FFFFFFF +001670r 1 00 00 00 A0 .dword $A0000000 +001674r 1 01 00 00 A0 .dword $A0000001 +001678r 1 02 00 00 A0 .dword $A0000002 +00167Cr 1 03 00 00 A0 .dword $A0000003 +001680r 1 04 00 00 A0 .dword $A0000004 +001684r 1 05 00 00 A0 .dword $A0000005 +001688r 1 06 00 00 A0 .dword $A0000006 +00168Cr 1 07 00 00 A0 .dword $A0000007 +001690r 1 08 00 00 A0 .dword $A0000008 +001694r 1 09 00 00 A0 .dword $A0000009 +001698r 1 0A 00 00 A0 .dword $A000000A +00169Cr 1 0B 00 00 A0 .dword $A000000B +0016A0r 1 0C 00 00 A0 .dword $A000000C +0016A4r 1 0D 00 00 A0 .dword $A000000D +0016A8r 1 0E 00 00 A0 .dword $A000000E +0016ACr 1 0F 00 00 A0 .dword $A000000F +0016B0r 1 F0 FF FF FF .dword $FFFFFFF0 +0016B4r 1 F1 FF FF FF .dword $FFFFFFF1 +0016B8r 1 F2 FF FF FF .dword $FFFFFFF2 +0016BCr 1 F3 FF FF FF .dword $FFFFFFF3 +0016C0r 1 F4 FF FF FF .dword $FFFFFFF4 +0016C4r 1 F5 FF FF FF .dword $FFFFFFF5 +0016C8r 1 F6 FF FF FF .dword $FFFFFFF6 +0016CCr 1 F7 FF FF FF .dword $FFFFFFF7 +0016D0r 1 F8 FF FF FF .dword $FFFFFFF8 +0016D4r 1 F9 FF FF FF .dword $FFFFFFF9 +0016D8r 1 FA FF FF FF .dword $FFFFFFFA +0016DCr 1 FB FF FF FF .dword $FFFFFFFB +0016E0r 1 FC FF FF FF .dword $FFFFFFFC +0016E4r 1 FD FF FF FF .dword $FFFFFFFD +0016E8r 1 FE FF FF FF .dword $FFFFFFFE +0016ECr 1 FF FF FF FF .dword $FFFFFFFF 0016F0r 1 -0016F0r 1 ; 8-digit hex values -0016F0r 1 00 00 00 00 .dword $00000000 -0016F4r 1 01 00 00 00 .dword $00000001 -0016F8r 1 02 00 00 00 .dword $00000002 -0016FCr 1 03 00 00 00 .dword $00000003 -001700r 1 04 00 00 00 .dword $00000004 -001704r 1 05 00 00 00 .dword $00000005 -001708r 1 06 00 00 00 .dword $00000006 -00170Cr 1 07 00 00 00 .dword $00000007 -001710r 1 08 00 00 00 .dword $00000008 -001714r 1 09 00 00 00 .dword $00000009 -001718r 1 0A 00 00 00 .dword $0000000a -00171Cr 1 0B 00 00 00 .dword $0000000b -001720r 1 0C 00 00 00 .dword $0000000c -001724r 1 0D 00 00 00 .dword $0000000d -001728r 1 0E 00 00 00 .dword $0000000e -00172Cr 1 0F 00 00 00 .dword $0000000f -001730r 1 10 00 00 00 .dword $00000010 -001734r 1 11 00 00 00 .dword $00000011 -001738r 1 12 00 00 00 .dword $00000012 -00173Cr 1 13 00 00 00 .dword $00000013 -001740r 1 70 00 00 00 .dword $00000070 -001744r 1 71 00 00 00 .dword $00000071 -001748r 1 72 00 00 00 .dword $00000072 -00174Cr 1 73 00 00 00 .dword $00000073 -001750r 1 74 00 00 00 .dword $00000074 -001754r 1 75 00 00 00 .dword $00000075 -001758r 1 76 00 00 00 .dword $00000076 -00175Cr 1 77 00 00 00 .dword $00000077 -001760r 1 78 00 00 00 .dword $00000078 -001764r 1 79 00 00 00 .dword $00000079 -001768r 1 7A 00 00 00 .dword $0000007a -00176Cr 1 7B 00 00 00 .dword $0000007b -001770r 1 7C 00 00 00 .dword $0000007c -001774r 1 7D 00 00 00 .dword $0000007d -001778r 1 7E 00 00 00 .dword $0000007e -00177Cr 1 7F 00 00 00 .dword $0000007f -001780r 1 80 00 00 00 .dword $00000080 -001784r 1 81 00 00 00 .dword $00000081 -001788r 1 82 00 00 00 .dword $00000082 -00178Cr 1 83 00 00 00 .dword $00000083 -001790r 1 84 00 00 00 .dword $00000084 -001794r 1 85 00 00 00 .dword $00000085 -001798r 1 86 00 00 00 .dword $00000086 -00179Cr 1 F0 00 00 00 .dword $000000f0 -0017A0r 1 F1 00 00 00 .dword $000000f1 -0017A4r 1 F2 00 00 00 .dword $000000f2 -0017A8r 1 F3 00 00 00 .dword $000000f3 -0017ACr 1 F4 00 00 00 .dword $000000f4 -0017B0r 1 F5 00 00 00 .dword $000000f5 -0017B4r 1 F6 00 00 00 .dword $000000f6 -0017B8r 1 F7 00 00 00 .dword $000000f7 -0017BCr 1 F8 00 00 00 .dword $000000f8 -0017C0r 1 F9 00 00 00 .dword $000000f9 -0017C4r 1 FA 00 00 00 .dword $000000fa -0017C8r 1 FB 00 00 00 .dword $000000fb -0017CCr 1 FC 00 00 00 .dword $000000fc -0017D0r 1 FD 00 00 00 .dword $000000fd -0017D4r 1 FE 00 00 00 .dword $000000fe -0017D8r 1 FF 00 00 00 .dword $000000ff -0017DCr 1 00 01 00 00 .dword $00000100 -0017E0r 1 01 01 00 00 .dword $00000101 -0017E4r 1 02 01 00 00 .dword $00000102 -0017E8r 1 03 01 00 00 .dword $00000103 -0017ECr 1 D2 0F 00 00 .dword $00000fd2 -0017F0r 1 D3 0F 00 00 .dword $00000fd3 -0017F4r 1 D4 0F 00 00 .dword $00000fd4 -0017F8r 1 D5 0F 00 00 .dword $00000fd5 -0017FCr 1 D6 0F 00 00 .dword $00000fd6 -001800r 1 D7 0F 00 00 .dword $00000fd7 -001804r 1 D8 0F 00 00 .dword $00000fd8 -001808r 1 D9 0F 00 00 .dword $00000fd9 -00180Cr 1 DA 0F 00 00 .dword $00000fda -001810r 1 DB 0F 00 00 .dword $00000fdb -001814r 1 DC 0F 00 00 .dword $00000fdc -001818r 1 DD 0F 00 00 .dword $00000fdd -00181Cr 1 DE 0F 00 00 .dword $00000fde -001820r 1 DF 0F 00 00 .dword $00000fdf -001824r 1 E0 0F 00 00 .dword $00000fe0 -001828r 1 E1 0F 00 00 .dword $00000fe1 -00182Cr 1 E2 0F 00 00 .dword $00000fe2 -001830r 1 E3 0F 00 00 .dword $00000fe3 -001834r 1 E4 0F 00 00 .dword $00000fe4 -001838r 1 E5 0F 00 00 .dword $00000fe5 -00183Cr 1 E6 0F 00 00 .dword $00000fe6 -001840r 1 E7 0F 00 00 .dword $00000fe7 -001844r 1 E8 0F 00 00 .dword $00000fe8 -001848r 1 E9 0F 00 00 .dword $00000fe9 -00184Cr 1 EA 0F 00 00 .dword $00000fea -001850r 1 EB 0F 00 00 .dword $00000feb -001854r 1 EC 0F 00 00 .dword $00000fec -001858r 1 ED 0F 00 00 .dword $00000fed -00185Cr 1 EE 0F 00 00 .dword $00000fee -001860r 1 EF 0F 00 00 .dword $00000fef -001864r 1 F0 0F 00 00 .dword $00000ff0 -001868r 1 F1 0F 00 00 .dword $00000ff1 -00186Cr 1 F2 0F 00 00 .dword $00000ff2 -001870r 1 F3 0F 00 00 .dword $00000ff3 -001874r 1 F4 0F 00 00 .dword $00000ff4 -001878r 1 F5 0F 00 00 .dword $00000ff5 -00187Cr 1 F6 0F 00 00 .dword $00000ff6 -001880r 1 F7 0F 00 00 .dword $00000ff7 -001884r 1 F8 0F 00 00 .dword $00000ff8 -001888r 1 F9 0F 00 00 .dword $00000ff9 -00188Cr 1 FA 0F 00 00 .dword $00000ffa -001890r 1 FB 0F 00 00 .dword $00000ffb -001894r 1 FC 0F 00 00 .dword $00000ffc -001898r 1 FD 0F 00 00 .dword $00000ffd -00189Cr 1 FE 0F 00 00 .dword $00000ffe -0018A0r 1 FF 0F 00 00 .dword $00000fff -0018A4r 1 00 10 00 00 .dword $00001000 -0018A8r 1 01 10 00 00 .dword $00001001 -0018ACr 1 02 10 00 00 .dword $00001002 -0018B0r 1 03 10 00 00 .dword $00001003 -0018B4r 1 04 10 00 00 .dword $00001004 -0018B8r 1 05 10 00 00 .dword $00001005 -0018BCr 1 06 10 00 00 .dword $00001006 -0018C0r 1 07 10 00 00 .dword $00001007 -0018C4r 1 08 10 00 00 .dword $00001008 -0018C8r 1 F0 7F 00 00 .dword $00007ff0 -0018CCr 1 F1 7F 00 00 .dword $00007ff1 -0018D0r 1 F2 7F 00 00 .dword $00007ff2 -0018D4r 1 F3 7F 00 00 .dword $00007ff3 -0018D8r 1 F4 7F 00 00 .dword $00007ff4 -0018DCr 1 F5 7F 00 00 .dword $00007ff5 -0018E0r 1 F6 7F 00 00 .dword $00007ff6 -0018E4r 1 F7 7F 00 00 .dword $00007ff7 -0018E8r 1 F8 7F 00 00 .dword $00007ff8 -0018ECr 1 F9 7F 00 00 .dword $00007ff9 -0018F0r 1 FA 7F 00 00 .dword $00007ffa -0018F4r 1 FB 7F 00 00 .dword $00007ffb -0018F8r 1 FC 7F 00 00 .dword $00007ffc -0018FCr 1 FD 7F 00 00 .dword $00007ffd -001900r 1 FE 7F 00 00 .dword $00007ffe -001904r 1 FF 7F 00 00 .dword $00007fff -001908r 1 00 80 00 00 .dword $00008000 -00190Cr 1 01 80 00 00 .dword $00008001 -001910r 1 02 80 00 00 .dword $00008002 -001914r 1 03 80 00 00 .dword $00008003 -001918r 1 04 80 00 00 .dword $00008004 -00191Cr 1 05 80 00 00 .dword $00008005 -001920r 1 06 80 00 00 .dword $00008006 -001924r 1 07 80 00 00 .dword $00008007 -001928r 1 08 80 00 00 .dword $00008008 -00192Cr 1 09 80 00 00 .dword $00008009 -001930r 1 0A 80 00 00 .dword $0000800a -001934r 1 0B 80 00 00 .dword $0000800b -001938r 1 E1 9F 00 00 .dword $00009fe1 -00193Cr 1 E2 9F 00 00 .dword $00009fe2 -001940r 1 E3 9F 00 00 .dword $00009fe3 -001944r 1 E4 9F 00 00 .dword $00009fe4 -001948r 1 E5 9F 00 00 .dword $00009fe5 -00194Cr 1 E6 9F 00 00 .dword $00009fe6 -001950r 1 E7 9F 00 00 .dword $00009fe7 -001954r 1 E8 9F 00 00 .dword $00009fe8 -001958r 1 E9 9F 00 00 .dword $00009fe9 -00195Cr 1 EA 9F 00 00 .dword $00009fea -001960r 1 EB 9F 00 00 .dword $00009feb -001964r 1 EC 9F 00 00 .dword $00009fec -001968r 1 ED 9F 00 00 .dword $00009fed -00196Cr 1 EE 9F 00 00 .dword $00009fee -001970r 1 EF 9F 00 00 .dword $00009fef -001974r 1 F0 9F 00 00 .dword $00009ff0 -001978r 1 F1 9F 00 00 .dword $00009ff1 -00197Cr 1 F2 9F 00 00 .dword $00009ff2 -001980r 1 F3 9F 00 00 .dword $00009ff3 -001984r 1 F4 9F 00 00 .dword $00009ff4 -001988r 1 F5 9F 00 00 .dword $00009ff5 -00198Cr 1 F6 9F 00 00 .dword $00009ff6 -001990r 1 F7 9F 00 00 .dword $00009ff7 -001994r 1 F8 9F 00 00 .dword $00009ff8 -001998r 1 F9 9F 00 00 .dword $00009ff9 -00199Cr 1 FA 9F 00 00 .dword $00009ffa -0019A0r 1 FB 9F 00 00 .dword $00009ffb -0019A4r 1 FC 9F 00 00 .dword $00009ffc -0019A8r 1 FD 9F 00 00 .dword $00009ffd -0019ACr 1 FE 9F 00 00 .dword $00009ffe -0019B0r 1 FF 9F 00 00 .dword $00009fff -0019B4r 1 00 A0 00 00 .dword $0000a000 -0019B8r 1 01 A0 00 00 .dword $0000a001 -0019BCr 1 02 A0 00 00 .dword $0000a002 -0019C0r 1 03 A0 00 00 .dword $0000a003 -0019C4r 1 04 A0 00 00 .dword $0000a004 -0019C8r 1 05 A0 00 00 .dword $0000a005 -0019CCr 1 06 A0 00 00 .dword $0000a006 -0019D0r 1 07 A0 00 00 .dword $0000a007 -0019D4r 1 08 A0 00 00 .dword $0000a008 -0019D8r 1 09 A0 00 00 .dword $0000a009 -0019DCr 1 0A A0 00 00 .dword $0000a00a -0019E0r 1 0B A0 00 00 .dword $0000a00b -0019E4r 1 0C A0 00 00 .dword $0000a00c -0019E8r 1 0D A0 00 00 .dword $0000a00d -0019ECr 1 0E A0 00 00 .dword $0000a00e -0019F0r 1 0F A0 00 00 .dword $0000a00f -0019F4r 1 E1 AF 00 00 .dword $0000afe1 -0019F8r 1 E2 AF 00 00 .dword $0000afe2 -0019FCr 1 E3 AF 00 00 .dword $0000afe3 -001A00r 1 E4 AF 00 00 .dword $0000afe4 -001A04r 1 E5 AF 00 00 .dword $0000afe5 -001A08r 1 E6 AF 00 00 .dword $0000afe6 -001A0Cr 1 E7 AF 00 00 .dword $0000afe7 -001A10r 1 E8 AF 00 00 .dword $0000afe8 -001A14r 1 E9 AF 00 00 .dword $0000afe9 -001A18r 1 EA AF 00 00 .dword $0000afea -001A1Cr 1 EB AF 00 00 .dword $0000afeb -001A20r 1 EC AF 00 00 .dword $0000afec -001A24r 1 ED AF 00 00 .dword $0000afed -001A28r 1 EE AF 00 00 .dword $0000afee -001A2Cr 1 EF AF 00 00 .dword $0000afef -001A30r 1 F0 AF 00 00 .dword $0000aff0 -001A34r 1 F1 AF 00 00 .dword $0000aff1 -001A38r 1 F2 AF 00 00 .dword $0000aff2 -001A3Cr 1 F3 AF 00 00 .dword $0000aff3 -001A40r 1 F4 AF 00 00 .dword $0000aff4 -001A44r 1 F5 AF 00 00 .dword $0000aff5 -001A48r 1 F6 AF 00 00 .dword $0000aff6 -001A4Cr 1 F7 AF 00 00 .dword $0000aff7 -001A50r 1 F8 AF 00 00 .dword $0000aff8 -001A54r 1 F9 AF 00 00 .dword $0000aff9 -001A58r 1 FA AF 00 00 .dword $0000affa -001A5Cr 1 FB AF 00 00 .dword $0000affb -001A60r 1 FC AF 00 00 .dword $0000affc -001A64r 1 FD AF 00 00 .dword $0000affd -001A68r 1 FE AF 00 00 .dword $0000affe -001A6Cr 1 FF AF 00 00 .dword $0000afff -001A70r 1 00 B0 00 00 .dword $0000b000 -001A74r 1 01 B0 00 00 .dword $0000b001 -001A78r 1 02 B0 00 00 .dword $0000b002 -001A7Cr 1 03 B0 00 00 .dword $0000b003 -001A80r 1 04 B0 00 00 .dword $0000b004 -001A84r 1 05 B0 00 00 .dword $0000b005 -001A88r 1 06 B0 00 00 .dword $0000b006 -001A8Cr 1 07 B0 00 00 .dword $0000b007 -001A90r 1 08 B0 00 00 .dword $0000b008 -001A94r 1 09 B0 00 00 .dword $0000b009 -001A98r 1 0A B0 00 00 .dword $0000b00a -001A9Cr 1 0B B0 00 00 .dword $0000b00b -001AA0r 1 0C B0 00 00 .dword $0000b00c -001AA4r 1 0D B0 00 00 .dword $0000b00d -001AA8r 1 0E B0 00 00 .dword $0000b00e -001AACr 1 0F B0 00 00 .dword $0000b00f -001AB0r 1 E1 FF 00 00 .dword $0000ffe1 -001AB4r 1 E2 FF 00 00 .dword $0000ffe2 -001AB8r 1 E3 FF 00 00 .dword $0000ffe3 -001ABCr 1 E4 FF 00 00 .dword $0000ffe4 -001AC0r 1 E5 FF 00 00 .dword $0000ffe5 -001AC4r 1 E6 FF 00 00 .dword $0000ffe6 -001AC8r 1 E7 FF 00 00 .dword $0000ffe7 -001ACCr 1 E8 FF 00 00 .dword $0000ffe8 -001AD0r 1 E9 FF 00 00 .dword $0000ffe9 -001AD4r 1 EA FF 00 00 .dword $0000ffea -001AD8r 1 EB FF 00 00 .dword $0000ffeb -001ADCr 1 EC FF 00 00 .dword $0000ffec -001AE0r 1 ED FF 00 00 .dword $0000ffed -001AE4r 1 EE FF 00 00 .dword $0000ffee -001AE8r 1 EF FF 00 00 .dword $0000ffef -001AECr 1 F0 FF 00 00 .dword $0000fff0 -001AF0r 1 F1 FF 00 00 .dword $0000fff1 -001AF4r 1 F2 FF 00 00 .dword $0000fff2 -001AF8r 1 F3 FF 00 00 .dword $0000fff3 -001AFCr 1 F4 FF 00 00 .dword $0000fff4 -001B00r 1 F5 FF 00 00 .dword $0000fff5 -001B04r 1 F6 FF 00 00 .dword $0000fff6 -001B08r 1 F7 FF 00 00 .dword $0000fff7 -001B0Cr 1 F8 FF 00 00 .dword $0000fff8 -001B10r 1 F9 FF 00 00 .dword $0000fff9 -001B14r 1 FA FF 00 00 .dword $0000fffa -001B18r 1 FB FF 00 00 .dword $0000fffb -001B1Cr 1 FC FF 00 00 .dword $0000fffc -001B20r 1 FD FF 00 00 .dword $0000fffd -001B24r 1 FE FF 00 00 .dword $0000fffe -001B28r 1 FF FF 00 00 .dword $0000ffff -001B2Cr 1 00 00 01 00 .dword $00010000 -001B30r 1 01 00 01 00 .dword $00010001 -001B34r 1 02 00 01 00 .dword $00010002 -001B38r 1 03 00 01 00 .dword $00010003 -001B3Cr 1 04 00 01 00 .dword $00010004 -001B40r 1 05 00 01 00 .dword $00010005 -001B44r 1 06 00 01 00 .dword $00010006 -001B48r 1 07 00 01 00 .dword $00010007 -001B4Cr 1 08 00 01 00 .dword $00010008 -001B50r 1 09 00 01 00 .dword $00010009 -001B54r 1 0A 00 01 00 .dword $0001000a -001B58r 1 0B 00 01 00 .dword $0001000b -001B5Cr 1 0C 00 01 00 .dword $0001000c -001B60r 1 0D 00 01 00 .dword $0001000d -001B64r 1 0E 00 01 00 .dword $0001000e -001B68r 1 0F 00 01 00 .dword $0001000f -001B6Cr 1 F0 FF FF 7F .dword $7ffffff0 -001B70r 1 F1 FF FF 7F .dword $7ffffff1 -001B74r 1 F2 FF FF 7F .dword $7ffffff2 -001B78r 1 F3 FF FF 7F .dword $7ffffff3 -001B7Cr 1 F4 FF FF 7F .dword $7ffffff4 -001B80r 1 F5 FF FF 7F .dword $7ffffff5 -001B84r 1 F6 FF FF 7F .dword $7ffffff6 -001B88r 1 F7 FF FF 7F .dword $7ffffff7 -001B8Cr 1 F8 FF FF 7F .dword $7ffffff8 -001B90r 1 F9 FF FF 7F .dword $7ffffff9 -001B94r 1 FA FF FF 7F .dword $7ffffffa -001B98r 1 FB FF FF 7F .dword $7ffffffb -001B9Cr 1 FC FF FF 7F .dword $7ffffffc -001BA0r 1 FD FF FF 7F .dword $7ffffffd -001BA4r 1 FE FF FF 7F .dword $7ffffffe -001BA8r 1 FF FF FF 7F .dword $7fffffff -001BACr 1 00 00 00 80 .dword $80000000 -001BB0r 1 01 00 00 80 .dword $80000001 -001BB4r 1 02 00 00 80 .dword $80000002 -001BB8r 1 03 00 00 80 .dword $80000003 -001BBCr 1 04 00 00 80 .dword $80000004 -001BC0r 1 05 00 00 80 .dword $80000005 -001BC4r 1 06 00 00 80 .dword $80000006 -001BC8r 1 07 00 00 80 .dword $80000007 -001BCCr 1 08 00 00 80 .dword $80000008 -001BD0r 1 09 00 00 80 .dword $80000009 -001BD4r 1 0A 00 00 80 .dword $8000000a -001BD8r 1 0B 00 00 80 .dword $8000000b -001BDCr 1 0C 00 00 80 .dword $8000000c -001BE0r 1 0D 00 00 80 .dword $8000000d -001BE4r 1 0E 00 00 80 .dword $8000000e -001BE8r 1 0F 00 00 80 .dword $8000000f -001BECr 1 F0 FF FF 9F .dword $9ffffff0 -001BF0r 1 F1 FF FF 9F .dword $9ffffff1 -001BF4r 1 F2 FF FF 9F .dword $9ffffff2 -001BF8r 1 F3 FF FF 9F .dword $9ffffff3 -001BFCr 1 F4 FF FF 9F .dword $9ffffff4 -001C00r 1 F5 FF FF 9F .dword $9ffffff5 -001C04r 1 F6 FF FF 9F .dword $9ffffff6 -001C08r 1 F7 FF FF 9F .dword $9ffffff7 -001C0Cr 1 F8 FF FF 9F .dword $9ffffff8 -001C10r 1 F9 FF FF 9F .dword $9ffffff9 -001C14r 1 FA FF FF 9F .dword $9ffffffa -001C18r 1 FB FF FF 9F .dword $9ffffffb -001C1Cr 1 FC FF FF 9F .dword $9ffffffc -001C20r 1 FD FF FF 9F .dword $9ffffffd -001C24r 1 FE FF FF 9F .dword $9ffffffe -001C28r 1 FF FF FF 9F .dword $9fffffff -001C2Cr 1 00 00 00 A0 .dword $a0000000 -001C30r 1 01 00 00 A0 .dword $a0000001 -001C34r 1 02 00 00 A0 .dword $a0000002 -001C38r 1 03 00 00 A0 .dword $a0000003 -001C3Cr 1 04 00 00 A0 .dword $a0000004 -001C40r 1 05 00 00 A0 .dword $a0000005 -001C44r 1 06 00 00 A0 .dword $a0000006 -001C48r 1 07 00 00 A0 .dword $a0000007 -001C4Cr 1 08 00 00 A0 .dword $a0000008 -001C50r 1 09 00 00 A0 .dword $a0000009 -001C54r 1 0A 00 00 A0 .dword $a000000a -001C58r 1 0B 00 00 A0 .dword $a000000b -001C5Cr 1 0C 00 00 A0 .dword $a000000c -001C60r 1 0D 00 00 A0 .dword $a000000d -001C64r 1 0E 00 00 A0 .dword $a000000e -001C68r 1 0F 00 00 A0 .dword $a000000f -001C6Cr 1 F0 FF FF FF .dword $fffffff0 -001C70r 1 F1 FF FF FF .dword $fffffff1 -001C74r 1 F2 FF FF FF .dword $fffffff2 -001C78r 1 F3 FF FF FF .dword $fffffff3 -001C7Cr 1 F4 FF FF FF .dword $fffffff4 -001C80r 1 F5 FF FF FF .dword $fffffff5 -001C84r 1 F6 FF FF FF .dword $fffffff6 -001C88r 1 F7 FF FF FF .dword $fffffff7 -001C8Cr 1 F8 FF FF FF .dword $fffffff8 -001C90r 1 F9 FF FF FF .dword $fffffff9 -001C94r 1 FA FF FF FF .dword $fffffffa -001C98r 1 FB FF FF FF .dword $fffffffb -001C9Cr 1 FC FF FF FF .dword $fffffffc -001CA0r 1 FD FF FF FF .dword $fffffffd -001CA4r 1 FE FF FF FF .dword $fffffffe -001CA8r 1 FF FF FF FF .dword $ffffffff +0016F0r 1 ; 8-digit hex values +0016F0r 1 00 00 00 00 .dword $00000000 +0016F4r 1 01 00 00 00 .dword $00000001 +0016F8r 1 02 00 00 00 .dword $00000002 +0016FCr 1 03 00 00 00 .dword $00000003 +001700r 1 04 00 00 00 .dword $00000004 +001704r 1 05 00 00 00 .dword $00000005 +001708r 1 06 00 00 00 .dword $00000006 +00170Cr 1 07 00 00 00 .dword $00000007 +001710r 1 08 00 00 00 .dword $00000008 +001714r 1 09 00 00 00 .dword $00000009 +001718r 1 0A 00 00 00 .dword $0000000a +00171Cr 1 0B 00 00 00 .dword $0000000b +001720r 1 0C 00 00 00 .dword $0000000c +001724r 1 0D 00 00 00 .dword $0000000d +001728r 1 0E 00 00 00 .dword $0000000e +00172Cr 1 0F 00 00 00 .dword $0000000f +001730r 1 10 00 00 00 .dword $00000010 +001734r 1 11 00 00 00 .dword $00000011 +001738r 1 12 00 00 00 .dword $00000012 +00173Cr 1 13 00 00 00 .dword $00000013 +001740r 1 70 00 00 00 .dword $00000070 +001744r 1 71 00 00 00 .dword $00000071 +001748r 1 72 00 00 00 .dword $00000072 +00174Cr 1 73 00 00 00 .dword $00000073 +001750r 1 74 00 00 00 .dword $00000074 +001754r 1 75 00 00 00 .dword $00000075 +001758r 1 76 00 00 00 .dword $00000076 +00175Cr 1 77 00 00 00 .dword $00000077 +001760r 1 78 00 00 00 .dword $00000078 +001764r 1 79 00 00 00 .dword $00000079 +001768r 1 7A 00 00 00 .dword $0000007a +00176Cr 1 7B 00 00 00 .dword $0000007b +001770r 1 7C 00 00 00 .dword $0000007c +001774r 1 7D 00 00 00 .dword $0000007d +001778r 1 7E 00 00 00 .dword $0000007e +00177Cr 1 7F 00 00 00 .dword $0000007f +001780r 1 80 00 00 00 .dword $00000080 +001784r 1 81 00 00 00 .dword $00000081 +001788r 1 82 00 00 00 .dword $00000082 +00178Cr 1 83 00 00 00 .dword $00000083 +001790r 1 84 00 00 00 .dword $00000084 +001794r 1 85 00 00 00 .dword $00000085 +001798r 1 86 00 00 00 .dword $00000086 +00179Cr 1 F0 00 00 00 .dword $000000f0 +0017A0r 1 F1 00 00 00 .dword $000000f1 +0017A4r 1 F2 00 00 00 .dword $000000f2 +0017A8r 1 F3 00 00 00 .dword $000000f3 +0017ACr 1 F4 00 00 00 .dword $000000f4 +0017B0r 1 F5 00 00 00 .dword $000000f5 +0017B4r 1 F6 00 00 00 .dword $000000f6 +0017B8r 1 F7 00 00 00 .dword $000000f7 +0017BCr 1 F8 00 00 00 .dword $000000f8 +0017C0r 1 F9 00 00 00 .dword $000000f9 +0017C4r 1 FA 00 00 00 .dword $000000fa +0017C8r 1 FB 00 00 00 .dword $000000fb +0017CCr 1 FC 00 00 00 .dword $000000fc +0017D0r 1 FD 00 00 00 .dword $000000fd +0017D4r 1 FE 00 00 00 .dword $000000fe +0017D8r 1 FF 00 00 00 .dword $000000ff +0017DCr 1 00 01 00 00 .dword $00000100 +0017E0r 1 01 01 00 00 .dword $00000101 +0017E4r 1 02 01 00 00 .dword $00000102 +0017E8r 1 03 01 00 00 .dword $00000103 +0017ECr 1 D2 0F 00 00 .dword $00000fd2 +0017F0r 1 D3 0F 00 00 .dword $00000fd3 +0017F4r 1 D4 0F 00 00 .dword $00000fd4 +0017F8r 1 D5 0F 00 00 .dword $00000fd5 +0017FCr 1 D6 0F 00 00 .dword $00000fd6 +001800r 1 D7 0F 00 00 .dword $00000fd7 +001804r 1 D8 0F 00 00 .dword $00000fd8 +001808r 1 D9 0F 00 00 .dword $00000fd9 +00180Cr 1 DA 0F 00 00 .dword $00000fda +001810r 1 DB 0F 00 00 .dword $00000fdb +001814r 1 DC 0F 00 00 .dword $00000fdc +001818r 1 DD 0F 00 00 .dword $00000fdd +00181Cr 1 DE 0F 00 00 .dword $00000fde +001820r 1 DF 0F 00 00 .dword $00000fdf +001824r 1 E0 0F 00 00 .dword $00000fe0 +001828r 1 E1 0F 00 00 .dword $00000fe1 +00182Cr 1 E2 0F 00 00 .dword $00000fe2 +001830r 1 E3 0F 00 00 .dword $00000fe3 +001834r 1 E4 0F 00 00 .dword $00000fe4 +001838r 1 E5 0F 00 00 .dword $00000fe5 +00183Cr 1 E6 0F 00 00 .dword $00000fe6 +001840r 1 E7 0F 00 00 .dword $00000fe7 +001844r 1 E8 0F 00 00 .dword $00000fe8 +001848r 1 E9 0F 00 00 .dword $00000fe9 +00184Cr 1 EA 0F 00 00 .dword $00000fea +001850r 1 EB 0F 00 00 .dword $00000feb +001854r 1 EC 0F 00 00 .dword $00000fec +001858r 1 ED 0F 00 00 .dword $00000fed +00185Cr 1 EE 0F 00 00 .dword $00000fee +001860r 1 EF 0F 00 00 .dword $00000fef +001864r 1 F0 0F 00 00 .dword $00000ff0 +001868r 1 F1 0F 00 00 .dword $00000ff1 +00186Cr 1 F2 0F 00 00 .dword $00000ff2 +001870r 1 F3 0F 00 00 .dword $00000ff3 +001874r 1 F4 0F 00 00 .dword $00000ff4 +001878r 1 F5 0F 00 00 .dword $00000ff5 +00187Cr 1 F6 0F 00 00 .dword $00000ff6 +001880r 1 F7 0F 00 00 .dword $00000ff7 +001884r 1 F8 0F 00 00 .dword $00000ff8 +001888r 1 F9 0F 00 00 .dword $00000ff9 +00188Cr 1 FA 0F 00 00 .dword $00000ffa +001890r 1 FB 0F 00 00 .dword $00000ffb +001894r 1 FC 0F 00 00 .dword $00000ffc +001898r 1 FD 0F 00 00 .dword $00000ffd +00189Cr 1 FE 0F 00 00 .dword $00000ffe +0018A0r 1 FF 0F 00 00 .dword $00000fff +0018A4r 1 00 10 00 00 .dword $00001000 +0018A8r 1 01 10 00 00 .dword $00001001 +0018ACr 1 02 10 00 00 .dword $00001002 +0018B0r 1 03 10 00 00 .dword $00001003 +0018B4r 1 04 10 00 00 .dword $00001004 +0018B8r 1 05 10 00 00 .dword $00001005 +0018BCr 1 06 10 00 00 .dword $00001006 +0018C0r 1 07 10 00 00 .dword $00001007 +0018C4r 1 08 10 00 00 .dword $00001008 +0018C8r 1 F0 7F 00 00 .dword $00007ff0 +0018CCr 1 F1 7F 00 00 .dword $00007ff1 +0018D0r 1 F2 7F 00 00 .dword $00007ff2 +0018D4r 1 F3 7F 00 00 .dword $00007ff3 +0018D8r 1 F4 7F 00 00 .dword $00007ff4 +0018DCr 1 F5 7F 00 00 .dword $00007ff5 +0018E0r 1 F6 7F 00 00 .dword $00007ff6 +0018E4r 1 F7 7F 00 00 .dword $00007ff7 +0018E8r 1 F8 7F 00 00 .dword $00007ff8 +0018ECr 1 F9 7F 00 00 .dword $00007ff9 +0018F0r 1 FA 7F 00 00 .dword $00007ffa +0018F4r 1 FB 7F 00 00 .dword $00007ffb +0018F8r 1 FC 7F 00 00 .dword $00007ffc +0018FCr 1 FD 7F 00 00 .dword $00007ffd +001900r 1 FE 7F 00 00 .dword $00007ffe +001904r 1 FF 7F 00 00 .dword $00007fff +001908r 1 00 80 00 00 .dword $00008000 +00190Cr 1 01 80 00 00 .dword $00008001 +001910r 1 02 80 00 00 .dword $00008002 +001914r 1 03 80 00 00 .dword $00008003 +001918r 1 04 80 00 00 .dword $00008004 +00191Cr 1 05 80 00 00 .dword $00008005 +001920r 1 06 80 00 00 .dword $00008006 +001924r 1 07 80 00 00 .dword $00008007 +001928r 1 08 80 00 00 .dword $00008008 +00192Cr 1 09 80 00 00 .dword $00008009 +001930r 1 0A 80 00 00 .dword $0000800a +001934r 1 0B 80 00 00 .dword $0000800b +001938r 1 E1 9F 00 00 .dword $00009fe1 +00193Cr 1 E2 9F 00 00 .dword $00009fe2 +001940r 1 E3 9F 00 00 .dword $00009fe3 +001944r 1 E4 9F 00 00 .dword $00009fe4 +001948r 1 E5 9F 00 00 .dword $00009fe5 +00194Cr 1 E6 9F 00 00 .dword $00009fe6 +001950r 1 E7 9F 00 00 .dword $00009fe7 +001954r 1 E8 9F 00 00 .dword $00009fe8 +001958r 1 E9 9F 00 00 .dword $00009fe9 +00195Cr 1 EA 9F 00 00 .dword $00009fea +001960r 1 EB 9F 00 00 .dword $00009feb +001964r 1 EC 9F 00 00 .dword $00009fec +001968r 1 ED 9F 00 00 .dword $00009fed +00196Cr 1 EE 9F 00 00 .dword $00009fee +001970r 1 EF 9F 00 00 .dword $00009fef +001974r 1 F0 9F 00 00 .dword $00009ff0 +001978r 1 F1 9F 00 00 .dword $00009ff1 +00197Cr 1 F2 9F 00 00 .dword $00009ff2 +001980r 1 F3 9F 00 00 .dword $00009ff3 +001984r 1 F4 9F 00 00 .dword $00009ff4 +001988r 1 F5 9F 00 00 .dword $00009ff5 +00198Cr 1 F6 9F 00 00 .dword $00009ff6 +001990r 1 F7 9F 00 00 .dword $00009ff7 +001994r 1 F8 9F 00 00 .dword $00009ff8 +001998r 1 F9 9F 00 00 .dword $00009ff9 +00199Cr 1 FA 9F 00 00 .dword $00009ffa +0019A0r 1 FB 9F 00 00 .dword $00009ffb +0019A4r 1 FC 9F 00 00 .dword $00009ffc +0019A8r 1 FD 9F 00 00 .dword $00009ffd +0019ACr 1 FE 9F 00 00 .dword $00009ffe +0019B0r 1 FF 9F 00 00 .dword $00009fff +0019B4r 1 00 A0 00 00 .dword $0000a000 +0019B8r 1 01 A0 00 00 .dword $0000a001 +0019BCr 1 02 A0 00 00 .dword $0000a002 +0019C0r 1 03 A0 00 00 .dword $0000a003 +0019C4r 1 04 A0 00 00 .dword $0000a004 +0019C8r 1 05 A0 00 00 .dword $0000a005 +0019CCr 1 06 A0 00 00 .dword $0000a006 +0019D0r 1 07 A0 00 00 .dword $0000a007 +0019D4r 1 08 A0 00 00 .dword $0000a008 +0019D8r 1 09 A0 00 00 .dword $0000a009 +0019DCr 1 0A A0 00 00 .dword $0000a00a +0019E0r 1 0B A0 00 00 .dword $0000a00b +0019E4r 1 0C A0 00 00 .dword $0000a00c +0019E8r 1 0D A0 00 00 .dword $0000a00d +0019ECr 1 0E A0 00 00 .dword $0000a00e +0019F0r 1 0F A0 00 00 .dword $0000a00f +0019F4r 1 E1 AF 00 00 .dword $0000afe1 +0019F8r 1 E2 AF 00 00 .dword $0000afe2 +0019FCr 1 E3 AF 00 00 .dword $0000afe3 +001A00r 1 E4 AF 00 00 .dword $0000afe4 +001A04r 1 E5 AF 00 00 .dword $0000afe5 +001A08r 1 E6 AF 00 00 .dword $0000afe6 +001A0Cr 1 E7 AF 00 00 .dword $0000afe7 +001A10r 1 E8 AF 00 00 .dword $0000afe8 +001A14r 1 E9 AF 00 00 .dword $0000afe9 +001A18r 1 EA AF 00 00 .dword $0000afea +001A1Cr 1 EB AF 00 00 .dword $0000afeb +001A20r 1 EC AF 00 00 .dword $0000afec +001A24r 1 ED AF 00 00 .dword $0000afed +001A28r 1 EE AF 00 00 .dword $0000afee +001A2Cr 1 EF AF 00 00 .dword $0000afef +001A30r 1 F0 AF 00 00 .dword $0000aff0 +001A34r 1 F1 AF 00 00 .dword $0000aff1 +001A38r 1 F2 AF 00 00 .dword $0000aff2 +001A3Cr 1 F3 AF 00 00 .dword $0000aff3 +001A40r 1 F4 AF 00 00 .dword $0000aff4 +001A44r 1 F5 AF 00 00 .dword $0000aff5 +001A48r 1 F6 AF 00 00 .dword $0000aff6 +001A4Cr 1 F7 AF 00 00 .dword $0000aff7 +001A50r 1 F8 AF 00 00 .dword $0000aff8 +001A54r 1 F9 AF 00 00 .dword $0000aff9 +001A58r 1 FA AF 00 00 .dword $0000affa +001A5Cr 1 FB AF 00 00 .dword $0000affb +001A60r 1 FC AF 00 00 .dword $0000affc +001A64r 1 FD AF 00 00 .dword $0000affd +001A68r 1 FE AF 00 00 .dword $0000affe +001A6Cr 1 FF AF 00 00 .dword $0000afff +001A70r 1 00 B0 00 00 .dword $0000b000 +001A74r 1 01 B0 00 00 .dword $0000b001 +001A78r 1 02 B0 00 00 .dword $0000b002 +001A7Cr 1 03 B0 00 00 .dword $0000b003 +001A80r 1 04 B0 00 00 .dword $0000b004 +001A84r 1 05 B0 00 00 .dword $0000b005 +001A88r 1 06 B0 00 00 .dword $0000b006 +001A8Cr 1 07 B0 00 00 .dword $0000b007 +001A90r 1 08 B0 00 00 .dword $0000b008 +001A94r 1 09 B0 00 00 .dword $0000b009 +001A98r 1 0A B0 00 00 .dword $0000b00a +001A9Cr 1 0B B0 00 00 .dword $0000b00b +001AA0r 1 0C B0 00 00 .dword $0000b00c +001AA4r 1 0D B0 00 00 .dword $0000b00d +001AA8r 1 0E B0 00 00 .dword $0000b00e +001AACr 1 0F B0 00 00 .dword $0000b00f +001AB0r 1 E1 FF 00 00 .dword $0000ffe1 +001AB4r 1 E2 FF 00 00 .dword $0000ffe2 +001AB8r 1 E3 FF 00 00 .dword $0000ffe3 +001ABCr 1 E4 FF 00 00 .dword $0000ffe4 +001AC0r 1 E5 FF 00 00 .dword $0000ffe5 +001AC4r 1 E6 FF 00 00 .dword $0000ffe6 +001AC8r 1 E7 FF 00 00 .dword $0000ffe7 +001ACCr 1 E8 FF 00 00 .dword $0000ffe8 +001AD0r 1 E9 FF 00 00 .dword $0000ffe9 +001AD4r 1 EA FF 00 00 .dword $0000ffea +001AD8r 1 EB FF 00 00 .dword $0000ffeb +001ADCr 1 EC FF 00 00 .dword $0000ffec +001AE0r 1 ED FF 00 00 .dword $0000ffed +001AE4r 1 EE FF 00 00 .dword $0000ffee +001AE8r 1 EF FF 00 00 .dword $0000ffef +001AECr 1 F0 FF 00 00 .dword $0000fff0 +001AF0r 1 F1 FF 00 00 .dword $0000fff1 +001AF4r 1 F2 FF 00 00 .dword $0000fff2 +001AF8r 1 F3 FF 00 00 .dword $0000fff3 +001AFCr 1 F4 FF 00 00 .dword $0000fff4 +001B00r 1 F5 FF 00 00 .dword $0000fff5 +001B04r 1 F6 FF 00 00 .dword $0000fff6 +001B08r 1 F7 FF 00 00 .dword $0000fff7 +001B0Cr 1 F8 FF 00 00 .dword $0000fff8 +001B10r 1 F9 FF 00 00 .dword $0000fff9 +001B14r 1 FA FF 00 00 .dword $0000fffa +001B18r 1 FB FF 00 00 .dword $0000fffb +001B1Cr 1 FC FF 00 00 .dword $0000fffc +001B20r 1 FD FF 00 00 .dword $0000fffd +001B24r 1 FE FF 00 00 .dword $0000fffe +001B28r 1 FF FF 00 00 .dword $0000ffff +001B2Cr 1 00 00 01 00 .dword $00010000 +001B30r 1 01 00 01 00 .dword $00010001 +001B34r 1 02 00 01 00 .dword $00010002 +001B38r 1 03 00 01 00 .dword $00010003 +001B3Cr 1 04 00 01 00 .dword $00010004 +001B40r 1 05 00 01 00 .dword $00010005 +001B44r 1 06 00 01 00 .dword $00010006 +001B48r 1 07 00 01 00 .dword $00010007 +001B4Cr 1 08 00 01 00 .dword $00010008 +001B50r 1 09 00 01 00 .dword $00010009 +001B54r 1 0A 00 01 00 .dword $0001000a +001B58r 1 0B 00 01 00 .dword $0001000b +001B5Cr 1 0C 00 01 00 .dword $0001000c +001B60r 1 0D 00 01 00 .dword $0001000d +001B64r 1 0E 00 01 00 .dword $0001000e +001B68r 1 0F 00 01 00 .dword $0001000f +001B6Cr 1 F0 FF FF 7F .dword $7ffffff0 +001B70r 1 F1 FF FF 7F .dword $7ffffff1 +001B74r 1 F2 FF FF 7F .dword $7ffffff2 +001B78r 1 F3 FF FF 7F .dword $7ffffff3 +001B7Cr 1 F4 FF FF 7F .dword $7ffffff4 +001B80r 1 F5 FF FF 7F .dword $7ffffff5 +001B84r 1 F6 FF FF 7F .dword $7ffffff6 +001B88r 1 F7 FF FF 7F .dword $7ffffff7 +001B8Cr 1 F8 FF FF 7F .dword $7ffffff8 +001B90r 1 F9 FF FF 7F .dword $7ffffff9 +001B94r 1 FA FF FF 7F .dword $7ffffffa +001B98r 1 FB FF FF 7F .dword $7ffffffb +001B9Cr 1 FC FF FF 7F .dword $7ffffffc +001BA0r 1 FD FF FF 7F .dword $7ffffffd +001BA4r 1 FE FF FF 7F .dword $7ffffffe +001BA8r 1 FF FF FF 7F .dword $7fffffff +001BACr 1 00 00 00 80 .dword $80000000 +001BB0r 1 01 00 00 80 .dword $80000001 +001BB4r 1 02 00 00 80 .dword $80000002 +001BB8r 1 03 00 00 80 .dword $80000003 +001BBCr 1 04 00 00 80 .dword $80000004 +001BC0r 1 05 00 00 80 .dword $80000005 +001BC4r 1 06 00 00 80 .dword $80000006 +001BC8r 1 07 00 00 80 .dword $80000007 +001BCCr 1 08 00 00 80 .dword $80000008 +001BD0r 1 09 00 00 80 .dword $80000009 +001BD4r 1 0A 00 00 80 .dword $8000000a +001BD8r 1 0B 00 00 80 .dword $8000000b +001BDCr 1 0C 00 00 80 .dword $8000000c +001BE0r 1 0D 00 00 80 .dword $8000000d +001BE4r 1 0E 00 00 80 .dword $8000000e +001BE8r 1 0F 00 00 80 .dword $8000000f +001BECr 1 F0 FF FF 9F .dword $9ffffff0 +001BF0r 1 F1 FF FF 9F .dword $9ffffff1 +001BF4r 1 F2 FF FF 9F .dword $9ffffff2 +001BF8r 1 F3 FF FF 9F .dword $9ffffff3 +001BFCr 1 F4 FF FF 9F .dword $9ffffff4 +001C00r 1 F5 FF FF 9F .dword $9ffffff5 +001C04r 1 F6 FF FF 9F .dword $9ffffff6 +001C08r 1 F7 FF FF 9F .dword $9ffffff7 +001C0Cr 1 F8 FF FF 9F .dword $9ffffff8 +001C10r 1 F9 FF FF 9F .dword $9ffffff9 +001C14r 1 FA FF FF 9F .dword $9ffffffa +001C18r 1 FB FF FF 9F .dword $9ffffffb +001C1Cr 1 FC FF FF 9F .dword $9ffffffc +001C20r 1 FD FF FF 9F .dword $9ffffffd +001C24r 1 FE FF FF 9F .dword $9ffffffe +001C28r 1 FF FF FF 9F .dword $9fffffff +001C2Cr 1 00 00 00 A0 .dword $a0000000 +001C30r 1 01 00 00 A0 .dword $a0000001 +001C34r 1 02 00 00 A0 .dword $a0000002 +001C38r 1 03 00 00 A0 .dword $a0000003 +001C3Cr 1 04 00 00 A0 .dword $a0000004 +001C40r 1 05 00 00 A0 .dword $a0000005 +001C44r 1 06 00 00 A0 .dword $a0000006 +001C48r 1 07 00 00 A0 .dword $a0000007 +001C4Cr 1 08 00 00 A0 .dword $a0000008 +001C50r 1 09 00 00 A0 .dword $a0000009 +001C54r 1 0A 00 00 A0 .dword $a000000a +001C58r 1 0B 00 00 A0 .dword $a000000b +001C5Cr 1 0C 00 00 A0 .dword $a000000c +001C60r 1 0D 00 00 A0 .dword $a000000d +001C64r 1 0E 00 00 A0 .dword $a000000e +001C68r 1 0F 00 00 A0 .dword $a000000f +001C6Cr 1 F0 FF FF FF .dword $fffffff0 +001C70r 1 F1 FF FF FF .dword $fffffff1 +001C74r 1 F2 FF FF FF .dword $fffffff2 +001C78r 1 F3 FF FF FF .dword $fffffff3 +001C7Cr 1 F4 FF FF FF .dword $fffffff4 +001C80r 1 F5 FF FF FF .dword $fffffff5 +001C84r 1 F6 FF FF FF .dword $fffffff6 +001C88r 1 F7 FF FF FF .dword $fffffff7 +001C8Cr 1 F8 FF FF FF .dword $fffffff8 +001C90r 1 F9 FF FF FF .dword $fffffff9 +001C94r 1 FA FF FF FF .dword $fffffffa +001C98r 1 FB FF FF FF .dword $fffffffb +001C9Cr 1 FC FF FF FF .dword $fffffffc +001CA0r 1 FD FF FF FF .dword $fffffffd +001CA4r 1 FE FF FF FF .dword $fffffffe +001CA8r 1 FF FF FF FF .dword $ffffffff 001CACr 1 -001CACr 1 ; 8-digit hex values, uppercase -001CACr 1 00 00 00 00 .dword $00000000 -001CB0r 1 01 00 00 00 .dword $00000001 -001CB4r 1 02 00 00 00 .dword $00000002 -001CB8r 1 03 00 00 00 .dword $00000003 -001CBCr 1 04 00 00 00 .dword $00000004 -001CC0r 1 05 00 00 00 .dword $00000005 -001CC4r 1 06 00 00 00 .dword $00000006 -001CC8r 1 07 00 00 00 .dword $00000007 -001CCCr 1 08 00 00 00 .dword $00000008 -001CD0r 1 09 00 00 00 .dword $00000009 -001CD4r 1 0A 00 00 00 .dword $0000000A -001CD8r 1 0B 00 00 00 .dword $0000000B -001CDCr 1 0C 00 00 00 .dword $0000000C -001CE0r 1 0D 00 00 00 .dword $0000000D -001CE4r 1 0E 00 00 00 .dword $0000000E -001CE8r 1 0F 00 00 00 .dword $0000000F -001CECr 1 10 00 00 00 .dword $00000010 -001CF0r 1 11 00 00 00 .dword $00000011 -001CF4r 1 12 00 00 00 .dword $00000012 -001CF8r 1 13 00 00 00 .dword $00000013 -001CFCr 1 70 00 00 00 .dword $00000070 -001D00r 1 71 00 00 00 .dword $00000071 -001D04r 1 72 00 00 00 .dword $00000072 -001D08r 1 73 00 00 00 .dword $00000073 -001D0Cr 1 74 00 00 00 .dword $00000074 -001D10r 1 75 00 00 00 .dword $00000075 -001D14r 1 76 00 00 00 .dword $00000076 -001D18r 1 77 00 00 00 .dword $00000077 -001D1Cr 1 78 00 00 00 .dword $00000078 -001D20r 1 79 00 00 00 .dword $00000079 -001D24r 1 7A 00 00 00 .dword $0000007A -001D28r 1 7B 00 00 00 .dword $0000007B -001D2Cr 1 7C 00 00 00 .dword $0000007C -001D30r 1 7D 00 00 00 .dword $0000007D -001D34r 1 7E 00 00 00 .dword $0000007E -001D38r 1 7F 00 00 00 .dword $0000007F -001D3Cr 1 80 00 00 00 .dword $00000080 -001D40r 1 81 00 00 00 .dword $00000081 -001D44r 1 82 00 00 00 .dword $00000082 -001D48r 1 83 00 00 00 .dword $00000083 -001D4Cr 1 84 00 00 00 .dword $00000084 -001D50r 1 85 00 00 00 .dword $00000085 -001D54r 1 86 00 00 00 .dword $00000086 -001D58r 1 F0 00 00 00 .dword $000000F0 -001D5Cr 1 F1 00 00 00 .dword $000000F1 -001D60r 1 F2 00 00 00 .dword $000000F2 -001D64r 1 F3 00 00 00 .dword $000000F3 -001D68r 1 F4 00 00 00 .dword $000000F4 -001D6Cr 1 F5 00 00 00 .dword $000000F5 -001D70r 1 F6 00 00 00 .dword $000000F6 -001D74r 1 F7 00 00 00 .dword $000000F7 -001D78r 1 F8 00 00 00 .dword $000000F8 -001D7Cr 1 F9 00 00 00 .dword $000000F9 -001D80r 1 FA 00 00 00 .dword $000000FA -001D84r 1 FB 00 00 00 .dword $000000FB -001D88r 1 FC 00 00 00 .dword $000000FC -001D8Cr 1 FD 00 00 00 .dword $000000FD -001D90r 1 FE 00 00 00 .dword $000000FE -001D94r 1 FF 00 00 00 .dword $000000FF -001D98r 1 00 01 00 00 .dword $00000100 -001D9Cr 1 01 01 00 00 .dword $00000101 -001DA0r 1 02 01 00 00 .dword $00000102 -001DA4r 1 03 01 00 00 .dword $00000103 -001DA8r 1 D2 0F 00 00 .dword $00000FD2 -001DACr 1 D3 0F 00 00 .dword $00000FD3 -001DB0r 1 D4 0F 00 00 .dword $00000FD4 -001DB4r 1 D5 0F 00 00 .dword $00000FD5 -001DB8r 1 D6 0F 00 00 .dword $00000FD6 -001DBCr 1 D7 0F 00 00 .dword $00000FD7 -001DC0r 1 D8 0F 00 00 .dword $00000FD8 -001DC4r 1 D9 0F 00 00 .dword $00000FD9 -001DC8r 1 DA 0F 00 00 .dword $00000FDA -001DCCr 1 DB 0F 00 00 .dword $00000FDB -001DD0r 1 DC 0F 00 00 .dword $00000FDC -001DD4r 1 DD 0F 00 00 .dword $00000FDD -001DD8r 1 DE 0F 00 00 .dword $00000FDE -001DDCr 1 DF 0F 00 00 .dword $00000FDF -001DE0r 1 E0 0F 00 00 .dword $00000FE0 -001DE4r 1 E1 0F 00 00 .dword $00000FE1 -001DE8r 1 E2 0F 00 00 .dword $00000FE2 -001DECr 1 E3 0F 00 00 .dword $00000FE3 -001DF0r 1 E4 0F 00 00 .dword $00000FE4 -001DF4r 1 E5 0F 00 00 .dword $00000FE5 -001DF8r 1 E6 0F 00 00 .dword $00000FE6 -001DFCr 1 E7 0F 00 00 .dword $00000FE7 -001E00r 1 E8 0F 00 00 .dword $00000FE8 -001E04r 1 E9 0F 00 00 .dword $00000FE9 -001E08r 1 EA 0F 00 00 .dword $00000FEA -001E0Cr 1 EB 0F 00 00 .dword $00000FEB -001E10r 1 EC 0F 00 00 .dword $00000FEC -001E14r 1 ED 0F 00 00 .dword $00000FED -001E18r 1 EE 0F 00 00 .dword $00000FEE -001E1Cr 1 EF 0F 00 00 .dword $00000FEF -001E20r 1 F0 0F 00 00 .dword $00000FF0 -001E24r 1 F1 0F 00 00 .dword $00000FF1 -001E28r 1 F2 0F 00 00 .dword $00000FF2 -001E2Cr 1 F3 0F 00 00 .dword $00000FF3 -001E30r 1 F4 0F 00 00 .dword $00000FF4 -001E34r 1 F5 0F 00 00 .dword $00000FF5 -001E38r 1 F6 0F 00 00 .dword $00000FF6 -001E3Cr 1 F7 0F 00 00 .dword $00000FF7 -001E40r 1 F8 0F 00 00 .dword $00000FF8 -001E44r 1 F9 0F 00 00 .dword $00000FF9 -001E48r 1 FA 0F 00 00 .dword $00000FFA -001E4Cr 1 FB 0F 00 00 .dword $00000FFB -001E50r 1 FC 0F 00 00 .dword $00000FFC -001E54r 1 FD 0F 00 00 .dword $00000FFD -001E58r 1 FE 0F 00 00 .dword $00000FFE -001E5Cr 1 FF 0F 00 00 .dword $00000FFF -001E60r 1 00 10 00 00 .dword $00001000 -001E64r 1 01 10 00 00 .dword $00001001 -001E68r 1 02 10 00 00 .dword $00001002 -001E6Cr 1 03 10 00 00 .dword $00001003 -001E70r 1 04 10 00 00 .dword $00001004 -001E74r 1 05 10 00 00 .dword $00001005 -001E78r 1 06 10 00 00 .dword $00001006 -001E7Cr 1 07 10 00 00 .dword $00001007 -001E80r 1 08 10 00 00 .dword $00001008 -001E84r 1 F0 7F 00 00 .dword $00007FF0 -001E88r 1 F1 7F 00 00 .dword $00007FF1 -001E8Cr 1 F2 7F 00 00 .dword $00007FF2 -001E90r 1 F3 7F 00 00 .dword $00007FF3 -001E94r 1 F4 7F 00 00 .dword $00007FF4 -001E98r 1 F5 7F 00 00 .dword $00007FF5 -001E9Cr 1 F6 7F 00 00 .dword $00007FF6 -001EA0r 1 F7 7F 00 00 .dword $00007FF7 -001EA4r 1 F8 7F 00 00 .dword $00007FF8 -001EA8r 1 F9 7F 00 00 .dword $00007FF9 -001EACr 1 FA 7F 00 00 .dword $00007FFA -001EB0r 1 FB 7F 00 00 .dword $00007FFB -001EB4r 1 FC 7F 00 00 .dword $00007FFC -001EB8r 1 FD 7F 00 00 .dword $00007FFD -001EBCr 1 FE 7F 00 00 .dword $00007FFE -001EC0r 1 FF 7F 00 00 .dword $00007FFF -001EC4r 1 00 80 00 00 .dword $00008000 -001EC8r 1 01 80 00 00 .dword $00008001 -001ECCr 1 02 80 00 00 .dword $00008002 -001ED0r 1 03 80 00 00 .dword $00008003 -001ED4r 1 04 80 00 00 .dword $00008004 -001ED8r 1 05 80 00 00 .dword $00008005 -001EDCr 1 06 80 00 00 .dword $00008006 -001EE0r 1 07 80 00 00 .dword $00008007 -001EE4r 1 08 80 00 00 .dword $00008008 -001EE8r 1 09 80 00 00 .dword $00008009 -001EECr 1 0A 80 00 00 .dword $0000800A -001EF0r 1 0B 80 00 00 .dword $0000800B -001EF4r 1 E1 9F 00 00 .dword $00009FE1 -001EF8r 1 E2 9F 00 00 .dword $00009FE2 -001EFCr 1 E3 9F 00 00 .dword $00009FE3 -001F00r 1 E4 9F 00 00 .dword $00009FE4 -001F04r 1 E5 9F 00 00 .dword $00009FE5 -001F08r 1 E6 9F 00 00 .dword $00009FE6 -001F0Cr 1 E7 9F 00 00 .dword $00009FE7 -001F10r 1 E8 9F 00 00 .dword $00009FE8 -001F14r 1 E9 9F 00 00 .dword $00009FE9 -001F18r 1 EA 9F 00 00 .dword $00009FEA -001F1Cr 1 EB 9F 00 00 .dword $00009FEB -001F20r 1 EC 9F 00 00 .dword $00009FEC -001F24r 1 ED 9F 00 00 .dword $00009FED -001F28r 1 EE 9F 00 00 .dword $00009FEE -001F2Cr 1 EF 9F 00 00 .dword $00009FEF -001F30r 1 F0 9F 00 00 .dword $00009FF0 -001F34r 1 F1 9F 00 00 .dword $00009FF1 -001F38r 1 F2 9F 00 00 .dword $00009FF2 -001F3Cr 1 F3 9F 00 00 .dword $00009FF3 -001F40r 1 F4 9F 00 00 .dword $00009FF4 -001F44r 1 F5 9F 00 00 .dword $00009FF5 -001F48r 1 F6 9F 00 00 .dword $00009FF6 -001F4Cr 1 F7 9F 00 00 .dword $00009FF7 -001F50r 1 F8 9F 00 00 .dword $00009FF8 -001F54r 1 F9 9F 00 00 .dword $00009FF9 -001F58r 1 FA 9F 00 00 .dword $00009FFA -001F5Cr 1 FB 9F 00 00 .dword $00009FFB -001F60r 1 FC 9F 00 00 .dword $00009FFC -001F64r 1 FD 9F 00 00 .dword $00009FFD -001F68r 1 FE 9F 00 00 .dword $00009FFE -001F6Cr 1 FF 9F 00 00 .dword $00009FFF -001F70r 1 00 A0 00 00 .dword $0000A000 -001F74r 1 01 A0 00 00 .dword $0000A001 -001F78r 1 02 A0 00 00 .dword $0000A002 -001F7Cr 1 03 A0 00 00 .dword $0000A003 -001F80r 1 04 A0 00 00 .dword $0000A004 -001F84r 1 05 A0 00 00 .dword $0000A005 -001F88r 1 06 A0 00 00 .dword $0000A006 -001F8Cr 1 07 A0 00 00 .dword $0000A007 -001F90r 1 08 A0 00 00 .dword $0000A008 -001F94r 1 09 A0 00 00 .dword $0000A009 -001F98r 1 0A A0 00 00 .dword $0000A00A -001F9Cr 1 0B A0 00 00 .dword $0000A00B -001FA0r 1 0C A0 00 00 .dword $0000A00C -001FA4r 1 0D A0 00 00 .dword $0000A00D -001FA8r 1 0E A0 00 00 .dword $0000A00E -001FACr 1 0F A0 00 00 .dword $0000A00F -001FB0r 1 E1 AF 00 00 .dword $0000AFE1 -001FB4r 1 E2 AF 00 00 .dword $0000AFE2 -001FB8r 1 E3 AF 00 00 .dword $0000AFE3 -001FBCr 1 E4 AF 00 00 .dword $0000AFE4 -001FC0r 1 E5 AF 00 00 .dword $0000AFE5 -001FC4r 1 E6 AF 00 00 .dword $0000AFE6 -001FC8r 1 E7 AF 00 00 .dword $0000AFE7 -001FCCr 1 E8 AF 00 00 .dword $0000AFE8 -001FD0r 1 E9 AF 00 00 .dword $0000AFE9 -001FD4r 1 EA AF 00 00 .dword $0000AFEA -001FD8r 1 EB AF 00 00 .dword $0000AFEB -001FDCr 1 EC AF 00 00 .dword $0000AFEC -001FE0r 1 ED AF 00 00 .dword $0000AFED -001FE4r 1 EE AF 00 00 .dword $0000AFEE -001FE8r 1 EF AF 00 00 .dword $0000AFEF -001FECr 1 F0 AF 00 00 .dword $0000AFF0 -001FF0r 1 F1 AF 00 00 .dword $0000AFF1 -001FF4r 1 F2 AF 00 00 .dword $0000AFF2 -001FF8r 1 F3 AF 00 00 .dword $0000AFF3 -001FFCr 1 F4 AF 00 00 .dword $0000AFF4 -002000r 1 F5 AF 00 00 .dword $0000AFF5 -002004r 1 F6 AF 00 00 .dword $0000AFF6 -002008r 1 F7 AF 00 00 .dword $0000AFF7 -00200Cr 1 F8 AF 00 00 .dword $0000AFF8 -002010r 1 F9 AF 00 00 .dword $0000AFF9 -002014r 1 FA AF 00 00 .dword $0000AFFA -002018r 1 FB AF 00 00 .dword $0000AFFB -00201Cr 1 FC AF 00 00 .dword $0000AFFC -002020r 1 FD AF 00 00 .dword $0000AFFD -002024r 1 FE AF 00 00 .dword $0000AFFE -002028r 1 FF AF 00 00 .dword $0000AFFF -00202Cr 1 00 B0 00 00 .dword $0000B000 -002030r 1 01 B0 00 00 .dword $0000B001 -002034r 1 02 B0 00 00 .dword $0000B002 -002038r 1 03 B0 00 00 .dword $0000B003 -00203Cr 1 04 B0 00 00 .dword $0000B004 -002040r 1 05 B0 00 00 .dword $0000B005 -002044r 1 06 B0 00 00 .dword $0000B006 -002048r 1 07 B0 00 00 .dword $0000B007 -00204Cr 1 08 B0 00 00 .dword $0000B008 -002050r 1 09 B0 00 00 .dword $0000B009 -002054r 1 0A B0 00 00 .dword $0000B00A -002058r 1 0B B0 00 00 .dword $0000B00B -00205Cr 1 0C B0 00 00 .dword $0000B00C -002060r 1 0D B0 00 00 .dword $0000B00D -002064r 1 0E B0 00 00 .dword $0000B00E -002068r 1 0F B0 00 00 .dword $0000B00F -00206Cr 1 E1 FF 00 00 .dword $0000FFE1 -002070r 1 E2 FF 00 00 .dword $0000FFE2 -002074r 1 E3 FF 00 00 .dword $0000FFE3 -002078r 1 E4 FF 00 00 .dword $0000FFE4 -00207Cr 1 E5 FF 00 00 .dword $0000FFE5 -002080r 1 E6 FF 00 00 .dword $0000FFE6 -002084r 1 E7 FF 00 00 .dword $0000FFE7 -002088r 1 E8 FF 00 00 .dword $0000FFE8 -00208Cr 1 E9 FF 00 00 .dword $0000FFE9 -002090r 1 EA FF 00 00 .dword $0000FFEA -002094r 1 EB FF 00 00 .dword $0000FFEB -002098r 1 EC FF 00 00 .dword $0000FFEC -00209Cr 1 ED FF 00 00 .dword $0000FFED -0020A0r 1 EE FF 00 00 .dword $0000FFEE -0020A4r 1 EF FF 00 00 .dword $0000FFEF -0020A8r 1 F0 FF 00 00 .dword $0000FFF0 -0020ACr 1 F1 FF 00 00 .dword $0000FFF1 -0020B0r 1 F2 FF 00 00 .dword $0000FFF2 -0020B4r 1 F3 FF 00 00 .dword $0000FFF3 -0020B8r 1 F4 FF 00 00 .dword $0000FFF4 -0020BCr 1 F5 FF 00 00 .dword $0000FFF5 -0020C0r 1 F6 FF 00 00 .dword $0000FFF6 -0020C4r 1 F7 FF 00 00 .dword $0000FFF7 -0020C8r 1 F8 FF 00 00 .dword $0000FFF8 -0020CCr 1 F9 FF 00 00 .dword $0000FFF9 -0020D0r 1 FA FF 00 00 .dword $0000FFFA -0020D4r 1 FB FF 00 00 .dword $0000FFFB -0020D8r 1 FC FF 00 00 .dword $0000FFFC -0020DCr 1 FD FF 00 00 .dword $0000FFFD -0020E0r 1 FE FF 00 00 .dword $0000FFFE -0020E4r 1 FF FF 00 00 .dword $0000FFFF -0020E8r 1 00 00 01 00 .dword $00010000 -0020ECr 1 01 00 01 00 .dword $00010001 -0020F0r 1 02 00 01 00 .dword $00010002 -0020F4r 1 03 00 01 00 .dword $00010003 -0020F8r 1 04 00 01 00 .dword $00010004 -0020FCr 1 05 00 01 00 .dword $00010005 -002100r 1 06 00 01 00 .dword $00010006 -002104r 1 07 00 01 00 .dword $00010007 -002108r 1 08 00 01 00 .dword $00010008 -00210Cr 1 09 00 01 00 .dword $00010009 -002110r 1 0A 00 01 00 .dword $0001000A -002114r 1 0B 00 01 00 .dword $0001000B -002118r 1 0C 00 01 00 .dword $0001000C -00211Cr 1 0D 00 01 00 .dword $0001000D -002120r 1 0E 00 01 00 .dword $0001000E -002124r 1 0F 00 01 00 .dword $0001000F -002128r 1 F0 FF FF 7F .dword $7FFFFFF0 -00212Cr 1 F1 FF FF 7F .dword $7FFFFFF1 -002130r 1 F2 FF FF 7F .dword $7FFFFFF2 -002134r 1 F3 FF FF 7F .dword $7FFFFFF3 -002138r 1 F4 FF FF 7F .dword $7FFFFFF4 -00213Cr 1 F5 FF FF 7F .dword $7FFFFFF5 -002140r 1 F6 FF FF 7F .dword $7FFFFFF6 -002144r 1 F7 FF FF 7F .dword $7FFFFFF7 -002148r 1 F8 FF FF 7F .dword $7FFFFFF8 -00214Cr 1 F9 FF FF 7F .dword $7FFFFFF9 -002150r 1 FA FF FF 7F .dword $7FFFFFFA -002154r 1 FB FF FF 7F .dword $7FFFFFFB -002158r 1 FC FF FF 7F .dword $7FFFFFFC -00215Cr 1 FD FF FF 7F .dword $7FFFFFFD -002160r 1 FE FF FF 7F .dword $7FFFFFFE -002164r 1 FF FF FF 7F .dword $7FFFFFFF -002168r 1 00 00 00 80 .dword $80000000 -00216Cr 1 01 00 00 80 .dword $80000001 -002170r 1 02 00 00 80 .dword $80000002 -002174r 1 03 00 00 80 .dword $80000003 -002178r 1 04 00 00 80 .dword $80000004 -00217Cr 1 05 00 00 80 .dword $80000005 -002180r 1 06 00 00 80 .dword $80000006 -002184r 1 07 00 00 80 .dword $80000007 -002188r 1 08 00 00 80 .dword $80000008 -00218Cr 1 09 00 00 80 .dword $80000009 -002190r 1 0A 00 00 80 .dword $8000000A -002194r 1 0B 00 00 80 .dword $8000000B -002198r 1 0C 00 00 80 .dword $8000000C -00219Cr 1 0D 00 00 80 .dword $8000000D -0021A0r 1 0E 00 00 80 .dword $8000000E -0021A4r 1 0F 00 00 80 .dword $8000000F -0021A8r 1 F0 FF FF 9F .dword $9FFFFFF0 -0021ACr 1 F1 FF FF 9F .dword $9FFFFFF1 -0021B0r 1 F2 FF FF 9F .dword $9FFFFFF2 -0021B4r 1 F3 FF FF 9F .dword $9FFFFFF3 -0021B8r 1 F4 FF FF 9F .dword $9FFFFFF4 -0021BCr 1 F5 FF FF 9F .dword $9FFFFFF5 -0021C0r 1 F6 FF FF 9F .dword $9FFFFFF6 -0021C4r 1 F7 FF FF 9F .dword $9FFFFFF7 -0021C8r 1 F8 FF FF 9F .dword $9FFFFFF8 -0021CCr 1 F9 FF FF 9F .dword $9FFFFFF9 -0021D0r 1 FA FF FF 9F .dword $9FFFFFFA -0021D4r 1 FB FF FF 9F .dword $9FFFFFFB -0021D8r 1 FC FF FF 9F .dword $9FFFFFFC -0021DCr 1 FD FF FF 9F .dword $9FFFFFFD -0021E0r 1 FE FF FF 9F .dword $9FFFFFFE -0021E4r 1 FF FF FF 9F .dword $9FFFFFFF -0021E8r 1 00 00 00 A0 .dword $A0000000 -0021ECr 1 01 00 00 A0 .dword $A0000001 -0021F0r 1 02 00 00 A0 .dword $A0000002 -0021F4r 1 03 00 00 A0 .dword $A0000003 -0021F8r 1 04 00 00 A0 .dword $A0000004 -0021FCr 1 05 00 00 A0 .dword $A0000005 -002200r 1 06 00 00 A0 .dword $A0000006 -002204r 1 07 00 00 A0 .dword $A0000007 -002208r 1 08 00 00 A0 .dword $A0000008 -00220Cr 1 09 00 00 A0 .dword $A0000009 -002210r 1 0A 00 00 A0 .dword $A000000A -002214r 1 0B 00 00 A0 .dword $A000000B -002218r 1 0C 00 00 A0 .dword $A000000C -00221Cr 1 0D 00 00 A0 .dword $A000000D -002220r 1 0E 00 00 A0 .dword $A000000E -002224r 1 0F 00 00 A0 .dword $A000000F -002228r 1 F0 FF FF FF .dword $FFFFFFF0 -00222Cr 1 F1 FF FF FF .dword $FFFFFFF1 -002230r 1 F2 FF FF FF .dword $FFFFFFF2 -002234r 1 F3 FF FF FF .dword $FFFFFFF3 -002238r 1 F4 FF FF FF .dword $FFFFFFF4 -00223Cr 1 F5 FF FF FF .dword $FFFFFFF5 -002240r 1 F6 FF FF FF .dword $FFFFFFF6 -002244r 1 F7 FF FF FF .dword $FFFFFFF7 -002248r 1 F8 FF FF FF .dword $FFFFFFF8 -00224Cr 1 F9 FF FF FF .dword $FFFFFFF9 -002250r 1 FA FF FF FF .dword $FFFFFFFA -002254r 1 FB FF FF FF .dword $FFFFFFFB -002258r 1 FC FF FF FF .dword $FFFFFFFC -00225Cr 1 FD FF FF FF .dword $FFFFFFFD -002260r 1 FE FF FF FF .dword $FFFFFFFE -002264r 1 FF FF FF FF .dword $FFFFFFFF +001CACr 1 ; 8-digit hex values, uppercase +001CACr 1 00 00 00 00 .dword $00000000 +001CB0r 1 01 00 00 00 .dword $00000001 +001CB4r 1 02 00 00 00 .dword $00000002 +001CB8r 1 03 00 00 00 .dword $00000003 +001CBCr 1 04 00 00 00 .dword $00000004 +001CC0r 1 05 00 00 00 .dword $00000005 +001CC4r 1 06 00 00 00 .dword $00000006 +001CC8r 1 07 00 00 00 .dword $00000007 +001CCCr 1 08 00 00 00 .dword $00000008 +001CD0r 1 09 00 00 00 .dword $00000009 +001CD4r 1 0A 00 00 00 .dword $0000000A +001CD8r 1 0B 00 00 00 .dword $0000000B +001CDCr 1 0C 00 00 00 .dword $0000000C +001CE0r 1 0D 00 00 00 .dword $0000000D +001CE4r 1 0E 00 00 00 .dword $0000000E +001CE8r 1 0F 00 00 00 .dword $0000000F +001CECr 1 10 00 00 00 .dword $00000010 +001CF0r 1 11 00 00 00 .dword $00000011 +001CF4r 1 12 00 00 00 .dword $00000012 +001CF8r 1 13 00 00 00 .dword $00000013 +001CFCr 1 70 00 00 00 .dword $00000070 +001D00r 1 71 00 00 00 .dword $00000071 +001D04r 1 72 00 00 00 .dword $00000072 +001D08r 1 73 00 00 00 .dword $00000073 +001D0Cr 1 74 00 00 00 .dword $00000074 +001D10r 1 75 00 00 00 .dword $00000075 +001D14r 1 76 00 00 00 .dword $00000076 +001D18r 1 77 00 00 00 .dword $00000077 +001D1Cr 1 78 00 00 00 .dword $00000078 +001D20r 1 79 00 00 00 .dword $00000079 +001D24r 1 7A 00 00 00 .dword $0000007A +001D28r 1 7B 00 00 00 .dword $0000007B +001D2Cr 1 7C 00 00 00 .dword $0000007C +001D30r 1 7D 00 00 00 .dword $0000007D +001D34r 1 7E 00 00 00 .dword $0000007E +001D38r 1 7F 00 00 00 .dword $0000007F +001D3Cr 1 80 00 00 00 .dword $00000080 +001D40r 1 81 00 00 00 .dword $00000081 +001D44r 1 82 00 00 00 .dword $00000082 +001D48r 1 83 00 00 00 .dword $00000083 +001D4Cr 1 84 00 00 00 .dword $00000084 +001D50r 1 85 00 00 00 .dword $00000085 +001D54r 1 86 00 00 00 .dword $00000086 +001D58r 1 F0 00 00 00 .dword $000000F0 +001D5Cr 1 F1 00 00 00 .dword $000000F1 +001D60r 1 F2 00 00 00 .dword $000000F2 +001D64r 1 F3 00 00 00 .dword $000000F3 +001D68r 1 F4 00 00 00 .dword $000000F4 +001D6Cr 1 F5 00 00 00 .dword $000000F5 +001D70r 1 F6 00 00 00 .dword $000000F6 +001D74r 1 F7 00 00 00 .dword $000000F7 +001D78r 1 F8 00 00 00 .dword $000000F8 +001D7Cr 1 F9 00 00 00 .dword $000000F9 +001D80r 1 FA 00 00 00 .dword $000000FA +001D84r 1 FB 00 00 00 .dword $000000FB +001D88r 1 FC 00 00 00 .dword $000000FC +001D8Cr 1 FD 00 00 00 .dword $000000FD +001D90r 1 FE 00 00 00 .dword $000000FE +001D94r 1 FF 00 00 00 .dword $000000FF +001D98r 1 00 01 00 00 .dword $00000100 +001D9Cr 1 01 01 00 00 .dword $00000101 +001DA0r 1 02 01 00 00 .dword $00000102 +001DA4r 1 03 01 00 00 .dword $00000103 +001DA8r 1 D2 0F 00 00 .dword $00000FD2 +001DACr 1 D3 0F 00 00 .dword $00000FD3 +001DB0r 1 D4 0F 00 00 .dword $00000FD4 +001DB4r 1 D5 0F 00 00 .dword $00000FD5 +001DB8r 1 D6 0F 00 00 .dword $00000FD6 +001DBCr 1 D7 0F 00 00 .dword $00000FD7 +001DC0r 1 D8 0F 00 00 .dword $00000FD8 +001DC4r 1 D9 0F 00 00 .dword $00000FD9 +001DC8r 1 DA 0F 00 00 .dword $00000FDA +001DCCr 1 DB 0F 00 00 .dword $00000FDB +001DD0r 1 DC 0F 00 00 .dword $00000FDC +001DD4r 1 DD 0F 00 00 .dword $00000FDD +001DD8r 1 DE 0F 00 00 .dword $00000FDE +001DDCr 1 DF 0F 00 00 .dword $00000FDF +001DE0r 1 E0 0F 00 00 .dword $00000FE0 +001DE4r 1 E1 0F 00 00 .dword $00000FE1 +001DE8r 1 E2 0F 00 00 .dword $00000FE2 +001DECr 1 E3 0F 00 00 .dword $00000FE3 +001DF0r 1 E4 0F 00 00 .dword $00000FE4 +001DF4r 1 E5 0F 00 00 .dword $00000FE5 +001DF8r 1 E6 0F 00 00 .dword $00000FE6 +001DFCr 1 E7 0F 00 00 .dword $00000FE7 +001E00r 1 E8 0F 00 00 .dword $00000FE8 +001E04r 1 E9 0F 00 00 .dword $00000FE9 +001E08r 1 EA 0F 00 00 .dword $00000FEA +001E0Cr 1 EB 0F 00 00 .dword $00000FEB +001E10r 1 EC 0F 00 00 .dword $00000FEC +001E14r 1 ED 0F 00 00 .dword $00000FED +001E18r 1 EE 0F 00 00 .dword $00000FEE +001E1Cr 1 EF 0F 00 00 .dword $00000FEF +001E20r 1 F0 0F 00 00 .dword $00000FF0 +001E24r 1 F1 0F 00 00 .dword $00000FF1 +001E28r 1 F2 0F 00 00 .dword $00000FF2 +001E2Cr 1 F3 0F 00 00 .dword $00000FF3 +001E30r 1 F4 0F 00 00 .dword $00000FF4 +001E34r 1 F5 0F 00 00 .dword $00000FF5 +001E38r 1 F6 0F 00 00 .dword $00000FF6 +001E3Cr 1 F7 0F 00 00 .dword $00000FF7 +001E40r 1 F8 0F 00 00 .dword $00000FF8 +001E44r 1 F9 0F 00 00 .dword $00000FF9 +001E48r 1 FA 0F 00 00 .dword $00000FFA +001E4Cr 1 FB 0F 00 00 .dword $00000FFB +001E50r 1 FC 0F 00 00 .dword $00000FFC +001E54r 1 FD 0F 00 00 .dword $00000FFD +001E58r 1 FE 0F 00 00 .dword $00000FFE +001E5Cr 1 FF 0F 00 00 .dword $00000FFF +001E60r 1 00 10 00 00 .dword $00001000 +001E64r 1 01 10 00 00 .dword $00001001 +001E68r 1 02 10 00 00 .dword $00001002 +001E6Cr 1 03 10 00 00 .dword $00001003 +001E70r 1 04 10 00 00 .dword $00001004 +001E74r 1 05 10 00 00 .dword $00001005 +001E78r 1 06 10 00 00 .dword $00001006 +001E7Cr 1 07 10 00 00 .dword $00001007 +001E80r 1 08 10 00 00 .dword $00001008 +001E84r 1 F0 7F 00 00 .dword $00007FF0 +001E88r 1 F1 7F 00 00 .dword $00007FF1 +001E8Cr 1 F2 7F 00 00 .dword $00007FF2 +001E90r 1 F3 7F 00 00 .dword $00007FF3 +001E94r 1 F4 7F 00 00 .dword $00007FF4 +001E98r 1 F5 7F 00 00 .dword $00007FF5 +001E9Cr 1 F6 7F 00 00 .dword $00007FF6 +001EA0r 1 F7 7F 00 00 .dword $00007FF7 +001EA4r 1 F8 7F 00 00 .dword $00007FF8 +001EA8r 1 F9 7F 00 00 .dword $00007FF9 +001EACr 1 FA 7F 00 00 .dword $00007FFA +001EB0r 1 FB 7F 00 00 .dword $00007FFB +001EB4r 1 FC 7F 00 00 .dword $00007FFC +001EB8r 1 FD 7F 00 00 .dword $00007FFD +001EBCr 1 FE 7F 00 00 .dword $00007FFE +001EC0r 1 FF 7F 00 00 .dword $00007FFF +001EC4r 1 00 80 00 00 .dword $00008000 +001EC8r 1 01 80 00 00 .dword $00008001 +001ECCr 1 02 80 00 00 .dword $00008002 +001ED0r 1 03 80 00 00 .dword $00008003 +001ED4r 1 04 80 00 00 .dword $00008004 +001ED8r 1 05 80 00 00 .dword $00008005 +001EDCr 1 06 80 00 00 .dword $00008006 +001EE0r 1 07 80 00 00 .dword $00008007 +001EE4r 1 08 80 00 00 .dword $00008008 +001EE8r 1 09 80 00 00 .dword $00008009 +001EECr 1 0A 80 00 00 .dword $0000800A +001EF0r 1 0B 80 00 00 .dword $0000800B +001EF4r 1 E1 9F 00 00 .dword $00009FE1 +001EF8r 1 E2 9F 00 00 .dword $00009FE2 +001EFCr 1 E3 9F 00 00 .dword $00009FE3 +001F00r 1 E4 9F 00 00 .dword $00009FE4 +001F04r 1 E5 9F 00 00 .dword $00009FE5 +001F08r 1 E6 9F 00 00 .dword $00009FE6 +001F0Cr 1 E7 9F 00 00 .dword $00009FE7 +001F10r 1 E8 9F 00 00 .dword $00009FE8 +001F14r 1 E9 9F 00 00 .dword $00009FE9 +001F18r 1 EA 9F 00 00 .dword $00009FEA +001F1Cr 1 EB 9F 00 00 .dword $00009FEB +001F20r 1 EC 9F 00 00 .dword $00009FEC +001F24r 1 ED 9F 00 00 .dword $00009FED +001F28r 1 EE 9F 00 00 .dword $00009FEE +001F2Cr 1 EF 9F 00 00 .dword $00009FEF +001F30r 1 F0 9F 00 00 .dword $00009FF0 +001F34r 1 F1 9F 00 00 .dword $00009FF1 +001F38r 1 F2 9F 00 00 .dword $00009FF2 +001F3Cr 1 F3 9F 00 00 .dword $00009FF3 +001F40r 1 F4 9F 00 00 .dword $00009FF4 +001F44r 1 F5 9F 00 00 .dword $00009FF5 +001F48r 1 F6 9F 00 00 .dword $00009FF6 +001F4Cr 1 F7 9F 00 00 .dword $00009FF7 +001F50r 1 F8 9F 00 00 .dword $00009FF8 +001F54r 1 F9 9F 00 00 .dword $00009FF9 +001F58r 1 FA 9F 00 00 .dword $00009FFA +001F5Cr 1 FB 9F 00 00 .dword $00009FFB +001F60r 1 FC 9F 00 00 .dword $00009FFC +001F64r 1 FD 9F 00 00 .dword $00009FFD +001F68r 1 FE 9F 00 00 .dword $00009FFE +001F6Cr 1 FF 9F 00 00 .dword $00009FFF +001F70r 1 00 A0 00 00 .dword $0000A000 +001F74r 1 01 A0 00 00 .dword $0000A001 +001F78r 1 02 A0 00 00 .dword $0000A002 +001F7Cr 1 03 A0 00 00 .dword $0000A003 +001F80r 1 04 A0 00 00 .dword $0000A004 +001F84r 1 05 A0 00 00 .dword $0000A005 +001F88r 1 06 A0 00 00 .dword $0000A006 +001F8Cr 1 07 A0 00 00 .dword $0000A007 +001F90r 1 08 A0 00 00 .dword $0000A008 +001F94r 1 09 A0 00 00 .dword $0000A009 +001F98r 1 0A A0 00 00 .dword $0000A00A +001F9Cr 1 0B A0 00 00 .dword $0000A00B +001FA0r 1 0C A0 00 00 .dword $0000A00C +001FA4r 1 0D A0 00 00 .dword $0000A00D +001FA8r 1 0E A0 00 00 .dword $0000A00E +001FACr 1 0F A0 00 00 .dword $0000A00F +001FB0r 1 E1 AF 00 00 .dword $0000AFE1 +001FB4r 1 E2 AF 00 00 .dword $0000AFE2 +001FB8r 1 E3 AF 00 00 .dword $0000AFE3 +001FBCr 1 E4 AF 00 00 .dword $0000AFE4 +001FC0r 1 E5 AF 00 00 .dword $0000AFE5 +001FC4r 1 E6 AF 00 00 .dword $0000AFE6 +001FC8r 1 E7 AF 00 00 .dword $0000AFE7 +001FCCr 1 E8 AF 00 00 .dword $0000AFE8 +001FD0r 1 E9 AF 00 00 .dword $0000AFE9 +001FD4r 1 EA AF 00 00 .dword $0000AFEA +001FD8r 1 EB AF 00 00 .dword $0000AFEB +001FDCr 1 EC AF 00 00 .dword $0000AFEC +001FE0r 1 ED AF 00 00 .dword $0000AFED +001FE4r 1 EE AF 00 00 .dword $0000AFEE +001FE8r 1 EF AF 00 00 .dword $0000AFEF +001FECr 1 F0 AF 00 00 .dword $0000AFF0 +001FF0r 1 F1 AF 00 00 .dword $0000AFF1 +001FF4r 1 F2 AF 00 00 .dword $0000AFF2 +001FF8r 1 F3 AF 00 00 .dword $0000AFF3 +001FFCr 1 F4 AF 00 00 .dword $0000AFF4 +002000r 1 F5 AF 00 00 .dword $0000AFF5 +002004r 1 F6 AF 00 00 .dword $0000AFF6 +002008r 1 F7 AF 00 00 .dword $0000AFF7 +00200Cr 1 F8 AF 00 00 .dword $0000AFF8 +002010r 1 F9 AF 00 00 .dword $0000AFF9 +002014r 1 FA AF 00 00 .dword $0000AFFA +002018r 1 FB AF 00 00 .dword $0000AFFB +00201Cr 1 FC AF 00 00 .dword $0000AFFC +002020r 1 FD AF 00 00 .dword $0000AFFD +002024r 1 FE AF 00 00 .dword $0000AFFE +002028r 1 FF AF 00 00 .dword $0000AFFF +00202Cr 1 00 B0 00 00 .dword $0000B000 +002030r 1 01 B0 00 00 .dword $0000B001 +002034r 1 02 B0 00 00 .dword $0000B002 +002038r 1 03 B0 00 00 .dword $0000B003 +00203Cr 1 04 B0 00 00 .dword $0000B004 +002040r 1 05 B0 00 00 .dword $0000B005 +002044r 1 06 B0 00 00 .dword $0000B006 +002048r 1 07 B0 00 00 .dword $0000B007 +00204Cr 1 08 B0 00 00 .dword $0000B008 +002050r 1 09 B0 00 00 .dword $0000B009 +002054r 1 0A B0 00 00 .dword $0000B00A +002058r 1 0B B0 00 00 .dword $0000B00B +00205Cr 1 0C B0 00 00 .dword $0000B00C +002060r 1 0D B0 00 00 .dword $0000B00D +002064r 1 0E B0 00 00 .dword $0000B00E +002068r 1 0F B0 00 00 .dword $0000B00F +00206Cr 1 E1 FF 00 00 .dword $0000FFE1 +002070r 1 E2 FF 00 00 .dword $0000FFE2 +002074r 1 E3 FF 00 00 .dword $0000FFE3 +002078r 1 E4 FF 00 00 .dword $0000FFE4 +00207Cr 1 E5 FF 00 00 .dword $0000FFE5 +002080r 1 E6 FF 00 00 .dword $0000FFE6 +002084r 1 E7 FF 00 00 .dword $0000FFE7 +002088r 1 E8 FF 00 00 .dword $0000FFE8 +00208Cr 1 E9 FF 00 00 .dword $0000FFE9 +002090r 1 EA FF 00 00 .dword $0000FFEA +002094r 1 EB FF 00 00 .dword $0000FFEB +002098r 1 EC FF 00 00 .dword $0000FFEC +00209Cr 1 ED FF 00 00 .dword $0000FFED +0020A0r 1 EE FF 00 00 .dword $0000FFEE +0020A4r 1 EF FF 00 00 .dword $0000FFEF +0020A8r 1 F0 FF 00 00 .dword $0000FFF0 +0020ACr 1 F1 FF 00 00 .dword $0000FFF1 +0020B0r 1 F2 FF 00 00 .dword $0000FFF2 +0020B4r 1 F3 FF 00 00 .dword $0000FFF3 +0020B8r 1 F4 FF 00 00 .dword $0000FFF4 +0020BCr 1 F5 FF 00 00 .dword $0000FFF5 +0020C0r 1 F6 FF 00 00 .dword $0000FFF6 +0020C4r 1 F7 FF 00 00 .dword $0000FFF7 +0020C8r 1 F8 FF 00 00 .dword $0000FFF8 +0020CCr 1 F9 FF 00 00 .dword $0000FFF9 +0020D0r 1 FA FF 00 00 .dword $0000FFFA +0020D4r 1 FB FF 00 00 .dword $0000FFFB +0020D8r 1 FC FF 00 00 .dword $0000FFFC +0020DCr 1 FD FF 00 00 .dword $0000FFFD +0020E0r 1 FE FF 00 00 .dword $0000FFFE +0020E4r 1 FF FF 00 00 .dword $0000FFFF +0020E8r 1 00 00 01 00 .dword $00010000 +0020ECr 1 01 00 01 00 .dword $00010001 +0020F0r 1 02 00 01 00 .dword $00010002 +0020F4r 1 03 00 01 00 .dword $00010003 +0020F8r 1 04 00 01 00 .dword $00010004 +0020FCr 1 05 00 01 00 .dword $00010005 +002100r 1 06 00 01 00 .dword $00010006 +002104r 1 07 00 01 00 .dword $00010007 +002108r 1 08 00 01 00 .dword $00010008 +00210Cr 1 09 00 01 00 .dword $00010009 +002110r 1 0A 00 01 00 .dword $0001000A +002114r 1 0B 00 01 00 .dword $0001000B +002118r 1 0C 00 01 00 .dword $0001000C +00211Cr 1 0D 00 01 00 .dword $0001000D +002120r 1 0E 00 01 00 .dword $0001000E +002124r 1 0F 00 01 00 .dword $0001000F +002128r 1 F0 FF FF 7F .dword $7FFFFFF0 +00212Cr 1 F1 FF FF 7F .dword $7FFFFFF1 +002130r 1 F2 FF FF 7F .dword $7FFFFFF2 +002134r 1 F3 FF FF 7F .dword $7FFFFFF3 +002138r 1 F4 FF FF 7F .dword $7FFFFFF4 +00213Cr 1 F5 FF FF 7F .dword $7FFFFFF5 +002140r 1 F6 FF FF 7F .dword $7FFFFFF6 +002144r 1 F7 FF FF 7F .dword $7FFFFFF7 +002148r 1 F8 FF FF 7F .dword $7FFFFFF8 +00214Cr 1 F9 FF FF 7F .dword $7FFFFFF9 +002150r 1 FA FF FF 7F .dword $7FFFFFFA +002154r 1 FB FF FF 7F .dword $7FFFFFFB +002158r 1 FC FF FF 7F .dword $7FFFFFFC +00215Cr 1 FD FF FF 7F .dword $7FFFFFFD +002160r 1 FE FF FF 7F .dword $7FFFFFFE +002164r 1 FF FF FF 7F .dword $7FFFFFFF +002168r 1 00 00 00 80 .dword $80000000 +00216Cr 1 01 00 00 80 .dword $80000001 +002170r 1 02 00 00 80 .dword $80000002 +002174r 1 03 00 00 80 .dword $80000003 +002178r 1 04 00 00 80 .dword $80000004 +00217Cr 1 05 00 00 80 .dword $80000005 +002180r 1 06 00 00 80 .dword $80000006 +002184r 1 07 00 00 80 .dword $80000007 +002188r 1 08 00 00 80 .dword $80000008 +00218Cr 1 09 00 00 80 .dword $80000009 +002190r 1 0A 00 00 80 .dword $8000000A +002194r 1 0B 00 00 80 .dword $8000000B +002198r 1 0C 00 00 80 .dword $8000000C +00219Cr 1 0D 00 00 80 .dword $8000000D +0021A0r 1 0E 00 00 80 .dword $8000000E +0021A4r 1 0F 00 00 80 .dword $8000000F +0021A8r 1 F0 FF FF 9F .dword $9FFFFFF0 +0021ACr 1 F1 FF FF 9F .dword $9FFFFFF1 +0021B0r 1 F2 FF FF 9F .dword $9FFFFFF2 +0021B4r 1 F3 FF FF 9F .dword $9FFFFFF3 +0021B8r 1 F4 FF FF 9F .dword $9FFFFFF4 +0021BCr 1 F5 FF FF 9F .dword $9FFFFFF5 +0021C0r 1 F6 FF FF 9F .dword $9FFFFFF6 +0021C4r 1 F7 FF FF 9F .dword $9FFFFFF7 +0021C8r 1 F8 FF FF 9F .dword $9FFFFFF8 +0021CCr 1 F9 FF FF 9F .dword $9FFFFFF9 +0021D0r 1 FA FF FF 9F .dword $9FFFFFFA +0021D4r 1 FB FF FF 9F .dword $9FFFFFFB +0021D8r 1 FC FF FF 9F .dword $9FFFFFFC +0021DCr 1 FD FF FF 9F .dword $9FFFFFFD +0021E0r 1 FE FF FF 9F .dword $9FFFFFFE +0021E4r 1 FF FF FF 9F .dword $9FFFFFFF +0021E8r 1 00 00 00 A0 .dword $A0000000 +0021ECr 1 01 00 00 A0 .dword $A0000001 +0021F0r 1 02 00 00 A0 .dword $A0000002 +0021F4r 1 03 00 00 A0 .dword $A0000003 +0021F8r 1 04 00 00 A0 .dword $A0000004 +0021FCr 1 05 00 00 A0 .dword $A0000005 +002200r 1 06 00 00 A0 .dword $A0000006 +002204r 1 07 00 00 A0 .dword $A0000007 +002208r 1 08 00 00 A0 .dword $A0000008 +00220Cr 1 09 00 00 A0 .dword $A0000009 +002210r 1 0A 00 00 A0 .dword $A000000A +002214r 1 0B 00 00 A0 .dword $A000000B +002218r 1 0C 00 00 A0 .dword $A000000C +00221Cr 1 0D 00 00 A0 .dword $A000000D +002220r 1 0E 00 00 A0 .dword $A000000E +002224r 1 0F 00 00 A0 .dword $A000000F +002228r 1 F0 FF FF FF .dword $FFFFFFF0 +00222Cr 1 F1 FF FF FF .dword $FFFFFFF1 +002230r 1 F2 FF FF FF .dword $FFFFFFF2 +002234r 1 F3 FF FF FF .dword $FFFFFFF3 +002238r 1 F4 FF FF FF .dword $FFFFFFF4 +00223Cr 1 F5 FF FF FF .dword $FFFFFFF5 +002240r 1 F6 FF FF FF .dword $FFFFFFF6 +002244r 1 F7 FF FF FF .dword $FFFFFFF7 +002248r 1 F8 FF FF FF .dword $FFFFFFF8 +00224Cr 1 F9 FF FF FF .dword $FFFFFFF9 +002250r 1 FA FF FF FF .dword $FFFFFFFA +002254r 1 FB FF FF FF .dword $FFFFFFFB +002258r 1 FC FF FF FF .dword $FFFFFFFC +00225Cr 1 FD FF FF FF .dword $FFFFFFFD +002260r 1 FE FF FF FF .dword $FFFFFFFE +002264r 1 FF FF FF FF .dword $FFFFFFFF 002268r 1 -002268r 1 ; alternative hex values -002268r 1 00 00 00 00 .dword 0h -00226Cr 1 01 00 00 00 .dword 1h -002270r 1 02 00 00 00 .dword 2h -002274r 1 03 00 00 00 .dword 3h -002278r 1 04 00 00 00 .dword 4h -00227Cr 1 05 00 00 00 .dword 5h -002280r 1 06 00 00 00 .dword 6h -002284r 1 07 00 00 00 .dword 7h -002288r 1 08 00 00 00 .dword 8h -00228Cr 1 09 00 00 00 .dword 9h -002290r 1 0A 00 00 00 .dword 0ah -002294r 1 0B 00 00 00 .dword 0bh -002298r 1 0C 00 00 00 .dword 0ch -00229Cr 1 0D 00 00 00 .dword 0dh -0022A0r 1 0E 00 00 00 .dword 0eh -0022A4r 1 0F 00 00 00 .dword 0fh -0022A8r 1 10 00 00 00 .dword 10h -0022ACr 1 11 00 00 00 .dword 11h -0022B0r 1 12 00 00 00 .dword 12h -0022B4r 1 13 00 00 00 .dword 13h -0022B8r 1 70 00 00 00 .dword 70h -0022BCr 1 71 00 00 00 .dword 71h -0022C0r 1 72 00 00 00 .dword 72h -0022C4r 1 73 00 00 00 .dword 73h -0022C8r 1 74 00 00 00 .dword 74h -0022CCr 1 75 00 00 00 .dword 75h -0022D0r 1 76 00 00 00 .dword 76h -0022D4r 1 77 00 00 00 .dword 77h -0022D8r 1 78 00 00 00 .dword 78h -0022DCr 1 79 00 00 00 .dword 79h -0022E0r 1 7A 00 00 00 .dword 7ah -0022E4r 1 7B 00 00 00 .dword 7bh -0022E8r 1 7C 00 00 00 .dword 7ch -0022ECr 1 7D 00 00 00 .dword 7dh -0022F0r 1 7E 00 00 00 .dword 7eh -0022F4r 1 7F 00 00 00 .dword 7fh -0022F8r 1 80 00 00 00 .dword 80h -0022FCr 1 81 00 00 00 .dword 81h -002300r 1 82 00 00 00 .dword 82h -002304r 1 83 00 00 00 .dword 83h -002308r 1 84 00 00 00 .dword 84h -00230Cr 1 85 00 00 00 .dword 85h -002310r 1 86 00 00 00 .dword 86h -002314r 1 F0 00 00 00 .dword 0f0h -002318r 1 F1 00 00 00 .dword 0f1h -00231Cr 1 F2 00 00 00 .dword 0f2h -002320r 1 F3 00 00 00 .dword 0f3h -002324r 1 F4 00 00 00 .dword 0f4h -002328r 1 F5 00 00 00 .dword 0f5h -00232Cr 1 F6 00 00 00 .dword 0f6h -002330r 1 F7 00 00 00 .dword 0f7h -002334r 1 F8 00 00 00 .dword 0f8h -002338r 1 F9 00 00 00 .dword 0f9h -00233Cr 1 FA 00 00 00 .dword 0fah -002340r 1 FB 00 00 00 .dword 0fbh -002344r 1 FC 00 00 00 .dword 0fch -002348r 1 FD 00 00 00 .dword 0fdh -00234Cr 1 FE 00 00 00 .dword 0feh -002350r 1 FF 00 00 00 .dword 0ffh -002354r 1 00 01 00 00 .dword 100h -002358r 1 01 01 00 00 .dword 101h -00235Cr 1 02 01 00 00 .dword 102h -002360r 1 03 01 00 00 .dword 103h -002364r 1 D2 0F 00 00 .dword 0fd2h -002368r 1 D3 0F 00 00 .dword 0fd3h -00236Cr 1 D4 0F 00 00 .dword 0fd4h -002370r 1 D5 0F 00 00 .dword 0fd5h -002374r 1 D6 0F 00 00 .dword 0fd6h -002378r 1 D7 0F 00 00 .dword 0fd7h -00237Cr 1 D8 0F 00 00 .dword 0fd8h -002380r 1 D9 0F 00 00 .dword 0fd9h -002384r 1 DA 0F 00 00 .dword 0fdah -002388r 1 DB 0F 00 00 .dword 0fdbh -00238Cr 1 DC 0F 00 00 .dword 0fdch -002390r 1 DD 0F 00 00 .dword 0fddh -002394r 1 DE 0F 00 00 .dword 0fdeh -002398r 1 DF 0F 00 00 .dword 0fdfh -00239Cr 1 E0 0F 00 00 .dword 0fe0h -0023A0r 1 E1 0F 00 00 .dword 0fe1h -0023A4r 1 E2 0F 00 00 .dword 0fe2h -0023A8r 1 E3 0F 00 00 .dword 0fe3h -0023ACr 1 E4 0F 00 00 .dword 0fe4h -0023B0r 1 E5 0F 00 00 .dword 0fe5h -0023B4r 1 E6 0F 00 00 .dword 0fe6h -0023B8r 1 E7 0F 00 00 .dword 0fe7h -0023BCr 1 E8 0F 00 00 .dword 0fe8h -0023C0r 1 E9 0F 00 00 .dword 0fe9h -0023C4r 1 EA 0F 00 00 .dword 0feah -0023C8r 1 EB 0F 00 00 .dword 0febh -0023CCr 1 EC 0F 00 00 .dword 0fech -0023D0r 1 ED 0F 00 00 .dword 0fedh -0023D4r 1 EE 0F 00 00 .dword 0feeh -0023D8r 1 EF 0F 00 00 .dword 0fefh -0023DCr 1 F0 0F 00 00 .dword 0ff0h -0023E0r 1 F1 0F 00 00 .dword 0ff1h -0023E4r 1 F2 0F 00 00 .dword 0ff2h -0023E8r 1 F3 0F 00 00 .dword 0ff3h -0023ECr 1 F4 0F 00 00 .dword 0ff4h -0023F0r 1 F5 0F 00 00 .dword 0ff5h -0023F4r 1 F6 0F 00 00 .dword 0ff6h -0023F8r 1 F7 0F 00 00 .dword 0ff7h -0023FCr 1 F8 0F 00 00 .dword 0ff8h -002400r 1 F9 0F 00 00 .dword 0ff9h -002404r 1 FA 0F 00 00 .dword 0ffah -002408r 1 FB 0F 00 00 .dword 0ffbh -00240Cr 1 FC 0F 00 00 .dword 0ffch -002410r 1 FD 0F 00 00 .dword 0ffdh -002414r 1 FE 0F 00 00 .dword 0ffeh -002418r 1 FF 0F 00 00 .dword 0fffh -00241Cr 1 00 10 00 00 .dword 1000h -002420r 1 01 10 00 00 .dword 1001h -002424r 1 02 10 00 00 .dword 1002h -002428r 1 03 10 00 00 .dword 1003h -00242Cr 1 04 10 00 00 .dword 1004h -002430r 1 05 10 00 00 .dword 1005h -002434r 1 06 10 00 00 .dword 1006h -002438r 1 07 10 00 00 .dword 1007h -00243Cr 1 08 10 00 00 .dword 1008h -002440r 1 F0 7F 00 00 .dword 7ff0h -002444r 1 F1 7F 00 00 .dword 7ff1h -002448r 1 F2 7F 00 00 .dword 7ff2h -00244Cr 1 F3 7F 00 00 .dword 7ff3h -002450r 1 F4 7F 00 00 .dword 7ff4h -002454r 1 F5 7F 00 00 .dword 7ff5h -002458r 1 F6 7F 00 00 .dword 7ff6h -00245Cr 1 F7 7F 00 00 .dword 7ff7h -002460r 1 F8 7F 00 00 .dword 7ff8h -002464r 1 F9 7F 00 00 .dword 7ff9h -002468r 1 FA 7F 00 00 .dword 7ffah -00246Cr 1 FB 7F 00 00 .dword 7ffbh -002470r 1 FC 7F 00 00 .dword 7ffch -002474r 1 FD 7F 00 00 .dword 7ffdh -002478r 1 FE 7F 00 00 .dword 7ffeh -00247Cr 1 FF 7F 00 00 .dword 7fffh -002480r 1 00 80 00 00 .dword 8000h -002484r 1 01 80 00 00 .dword 8001h -002488r 1 02 80 00 00 .dword 8002h -00248Cr 1 03 80 00 00 .dword 8003h -002490r 1 04 80 00 00 .dword 8004h -002494r 1 05 80 00 00 .dword 8005h -002498r 1 06 80 00 00 .dword 8006h -00249Cr 1 07 80 00 00 .dword 8007h -0024A0r 1 08 80 00 00 .dword 8008h -0024A4r 1 09 80 00 00 .dword 8009h -0024A8r 1 0A 80 00 00 .dword 800ah -0024ACr 1 0B 80 00 00 .dword 800bh -0024B0r 1 E1 9F 00 00 .dword 9fe1h -0024B4r 1 E2 9F 00 00 .dword 9fe2h -0024B8r 1 E3 9F 00 00 .dword 9fe3h -0024BCr 1 E4 9F 00 00 .dword 9fe4h -0024C0r 1 E5 9F 00 00 .dword 9fe5h -0024C4r 1 E6 9F 00 00 .dword 9fe6h -0024C8r 1 E7 9F 00 00 .dword 9fe7h -0024CCr 1 E8 9F 00 00 .dword 9fe8h -0024D0r 1 E9 9F 00 00 .dword 9fe9h -0024D4r 1 EA 9F 00 00 .dword 9feah -0024D8r 1 EB 9F 00 00 .dword 9febh -0024DCr 1 EC 9F 00 00 .dword 9fech -0024E0r 1 ED 9F 00 00 .dword 9fedh -0024E4r 1 EE 9F 00 00 .dword 9feeh -0024E8r 1 EF 9F 00 00 .dword 9fefh -0024ECr 1 F0 9F 00 00 .dword 9ff0h -0024F0r 1 F1 9F 00 00 .dword 9ff1h -0024F4r 1 F2 9F 00 00 .dword 9ff2h -0024F8r 1 F3 9F 00 00 .dword 9ff3h -0024FCr 1 F4 9F 00 00 .dword 9ff4h -002500r 1 F5 9F 00 00 .dword 9ff5h -002504r 1 F6 9F 00 00 .dword 9ff6h -002508r 1 F7 9F 00 00 .dword 9ff7h -00250Cr 1 F8 9F 00 00 .dword 9ff8h -002510r 1 F9 9F 00 00 .dword 9ff9h -002514r 1 FA 9F 00 00 .dword 9ffah -002518r 1 FB 9F 00 00 .dword 9ffbh -00251Cr 1 FC 9F 00 00 .dword 9ffch -002520r 1 FD 9F 00 00 .dword 9ffdh -002524r 1 FE 9F 00 00 .dword 9ffeh -002528r 1 FF 9F 00 00 .dword 9fffh -00252Cr 1 00 A0 00 00 .dword 0a000h -002530r 1 01 A0 00 00 .dword 0a001h -002534r 1 02 A0 00 00 .dword 0a002h -002538r 1 03 A0 00 00 .dword 0a003h -00253Cr 1 04 A0 00 00 .dword 0a004h -002540r 1 05 A0 00 00 .dword 0a005h -002544r 1 06 A0 00 00 .dword 0a006h -002548r 1 07 A0 00 00 .dword 0a007h -00254Cr 1 08 A0 00 00 .dword 0a008h -002550r 1 09 A0 00 00 .dword 0a009h -002554r 1 0A A0 00 00 .dword 0a00ah -002558r 1 0B A0 00 00 .dword 0a00bh -00255Cr 1 0C A0 00 00 .dword 0a00ch -002560r 1 0D A0 00 00 .dword 0a00dh -002564r 1 0E A0 00 00 .dword 0a00eh -002568r 1 0F A0 00 00 .dword 0a00fh -00256Cr 1 E1 AF 00 00 .dword 0afe1h -002570r 1 E2 AF 00 00 .dword 0afe2h -002574r 1 E3 AF 00 00 .dword 0afe3h -002578r 1 E4 AF 00 00 .dword 0afe4h -00257Cr 1 E5 AF 00 00 .dword 0afe5h -002580r 1 E6 AF 00 00 .dword 0afe6h -002584r 1 E7 AF 00 00 .dword 0afe7h -002588r 1 E8 AF 00 00 .dword 0afe8h -00258Cr 1 E9 AF 00 00 .dword 0afe9h -002590r 1 EA AF 00 00 .dword 0afeah -002594r 1 EB AF 00 00 .dword 0afebh -002598r 1 EC AF 00 00 .dword 0afech -00259Cr 1 ED AF 00 00 .dword 0afedh -0025A0r 1 EE AF 00 00 .dword 0afeeh -0025A4r 1 EF AF 00 00 .dword 0afefh -0025A8r 1 F0 AF 00 00 .dword 0aff0h -0025ACr 1 F1 AF 00 00 .dword 0aff1h -0025B0r 1 F2 AF 00 00 .dword 0aff2h -0025B4r 1 F3 AF 00 00 .dword 0aff3h -0025B8r 1 F4 AF 00 00 .dword 0aff4h -0025BCr 1 F5 AF 00 00 .dword 0aff5h -0025C0r 1 F6 AF 00 00 .dword 0aff6h -0025C4r 1 F7 AF 00 00 .dword 0aff7h -0025C8r 1 F8 AF 00 00 .dword 0aff8h -0025CCr 1 F9 AF 00 00 .dword 0aff9h -0025D0r 1 FA AF 00 00 .dword 0affah -0025D4r 1 FB AF 00 00 .dword 0affbh -0025D8r 1 FC AF 00 00 .dword 0affch -0025DCr 1 FD AF 00 00 .dword 0affdh -0025E0r 1 FE AF 00 00 .dword 0affeh -0025E4r 1 FF AF 00 00 .dword 0afffh -0025E8r 1 00 B0 00 00 .dword 0b000h -0025ECr 1 01 B0 00 00 .dword 0b001h -0025F0r 1 02 B0 00 00 .dword 0b002h -0025F4r 1 03 B0 00 00 .dword 0b003h -0025F8r 1 04 B0 00 00 .dword 0b004h -0025FCr 1 05 B0 00 00 .dword 0b005h -002600r 1 06 B0 00 00 .dword 0b006h -002604r 1 07 B0 00 00 .dword 0b007h -002608r 1 08 B0 00 00 .dword 0b008h -00260Cr 1 09 B0 00 00 .dword 0b009h -002610r 1 0A B0 00 00 .dword 0b00ah -002614r 1 0B B0 00 00 .dword 0b00bh -002618r 1 0C B0 00 00 .dword 0b00ch -00261Cr 1 0D B0 00 00 .dword 0b00dh -002620r 1 0E B0 00 00 .dword 0b00eh -002624r 1 0F B0 00 00 .dword 0b00fh -002628r 1 E1 FF 00 00 .dword 0ffe1h -00262Cr 1 E2 FF 00 00 .dword 0ffe2h -002630r 1 E3 FF 00 00 .dword 0ffe3h -002634r 1 E4 FF 00 00 .dword 0ffe4h -002638r 1 E5 FF 00 00 .dword 0ffe5h -00263Cr 1 E6 FF 00 00 .dword 0ffe6h -002640r 1 E7 FF 00 00 .dword 0ffe7h -002644r 1 E8 FF 00 00 .dword 0ffe8h -002648r 1 E9 FF 00 00 .dword 0ffe9h -00264Cr 1 EA FF 00 00 .dword 0ffeah -002650r 1 EB FF 00 00 .dword 0ffebh -002654r 1 EC FF 00 00 .dword 0ffech -002658r 1 ED FF 00 00 .dword 0ffedh -00265Cr 1 EE FF 00 00 .dword 0ffeeh -002660r 1 EF FF 00 00 .dword 0ffefh -002664r 1 F0 FF 00 00 .dword 0fff0h -002668r 1 F1 FF 00 00 .dword 0fff1h -00266Cr 1 F2 FF 00 00 .dword 0fff2h -002670r 1 F3 FF 00 00 .dword 0fff3h -002674r 1 F4 FF 00 00 .dword 0fff4h -002678r 1 F5 FF 00 00 .dword 0fff5h -00267Cr 1 F6 FF 00 00 .dword 0fff6h -002680r 1 F7 FF 00 00 .dword 0fff7h -002684r 1 F8 FF 00 00 .dword 0fff8h -002688r 1 F9 FF 00 00 .dword 0fff9h -00268Cr 1 FA FF 00 00 .dword 0fffah -002690r 1 FB FF 00 00 .dword 0fffbh -002694r 1 FC FF 00 00 .dword 0fffch -002698r 1 FD FF 00 00 .dword 0fffdh -00269Cr 1 FE FF 00 00 .dword 0fffeh -0026A0r 1 FF FF 00 00 .dword 0ffffh -0026A4r 1 00 00 01 00 .dword 10000h -0026A8r 1 01 00 01 00 .dword 10001h -0026ACr 1 02 00 01 00 .dword 10002h -0026B0r 1 03 00 01 00 .dword 10003h -0026B4r 1 04 00 01 00 .dword 10004h -0026B8r 1 05 00 01 00 .dword 10005h -0026BCr 1 06 00 01 00 .dword 10006h -0026C0r 1 07 00 01 00 .dword 10007h -0026C4r 1 08 00 01 00 .dword 10008h -0026C8r 1 09 00 01 00 .dword 10009h -0026CCr 1 0A 00 01 00 .dword 1000ah -0026D0r 1 0B 00 01 00 .dword 1000bh -0026D4r 1 0C 00 01 00 .dword 1000ch -0026D8r 1 0D 00 01 00 .dword 1000dh -0026DCr 1 0E 00 01 00 .dword 1000eh -0026E0r 1 0F 00 01 00 .dword 1000fh -0026E4r 1 F0 FF FF 7F .dword 7ffffff0h -0026E8r 1 F1 FF FF 7F .dword 7ffffff1h -0026ECr 1 F2 FF FF 7F .dword 7ffffff2h -0026F0r 1 F3 FF FF 7F .dword 7ffffff3h -0026F4r 1 F4 FF FF 7F .dword 7ffffff4h -0026F8r 1 F5 FF FF 7F .dword 7ffffff5h -0026FCr 1 F6 FF FF 7F .dword 7ffffff6h -002700r 1 F7 FF FF 7F .dword 7ffffff7h -002704r 1 F8 FF FF 7F .dword 7ffffff8h -002708r 1 F9 FF FF 7F .dword 7ffffff9h -00270Cr 1 FA FF FF 7F .dword 7ffffffah -002710r 1 FB FF FF 7F .dword 7ffffffbh -002714r 1 FC FF FF 7F .dword 7ffffffch -002718r 1 FD FF FF 7F .dword 7ffffffdh -00271Cr 1 FE FF FF 7F .dword 7ffffffeh -002720r 1 FF FF FF 7F .dword 7fffffffh -002724r 1 00 00 00 80 .dword 80000000h -002728r 1 01 00 00 80 .dword 80000001h -00272Cr 1 02 00 00 80 .dword 80000002h -002730r 1 03 00 00 80 .dword 80000003h -002734r 1 04 00 00 80 .dword 80000004h -002738r 1 05 00 00 80 .dword 80000005h -00273Cr 1 06 00 00 80 .dword 80000006h -002740r 1 07 00 00 80 .dword 80000007h -002744r 1 08 00 00 80 .dword 80000008h -002748r 1 09 00 00 80 .dword 80000009h -00274Cr 1 0A 00 00 80 .dword 8000000ah -002750r 1 0B 00 00 80 .dword 8000000bh -002754r 1 0C 00 00 80 .dword 8000000ch -002758r 1 0D 00 00 80 .dword 8000000dh -00275Cr 1 0E 00 00 80 .dword 8000000eh -002760r 1 0F 00 00 80 .dword 8000000fh -002764r 1 F0 FF FF 9F .dword 9ffffff0h -002768r 1 F1 FF FF 9F .dword 9ffffff1h -00276Cr 1 F2 FF FF 9F .dword 9ffffff2h -002770r 1 F3 FF FF 9F .dword 9ffffff3h -002774r 1 F4 FF FF 9F .dword 9ffffff4h -002778r 1 F5 FF FF 9F .dword 9ffffff5h -00277Cr 1 F6 FF FF 9F .dword 9ffffff6h -002780r 1 F7 FF FF 9F .dword 9ffffff7h -002784r 1 F8 FF FF 9F .dword 9ffffff8h -002788r 1 F9 FF FF 9F .dword 9ffffff9h -00278Cr 1 FA FF FF 9F .dword 9ffffffah -002790r 1 FB FF FF 9F .dword 9ffffffbh -002794r 1 FC FF FF 9F .dword 9ffffffch -002798r 1 FD FF FF 9F .dword 9ffffffdh -00279Cr 1 FE FF FF 9F .dword 9ffffffeh -0027A0r 1 FF FF FF 9F .dword 9fffffffh -0027A4r 1 00 00 00 A0 .dword 0a0000000h -0027A8r 1 01 00 00 A0 .dword 0a0000001h -0027ACr 1 02 00 00 A0 .dword 0a0000002h -0027B0r 1 03 00 00 A0 .dword 0a0000003h -0027B4r 1 04 00 00 A0 .dword 0a0000004h -0027B8r 1 05 00 00 A0 .dword 0a0000005h -0027BCr 1 06 00 00 A0 .dword 0a0000006h -0027C0r 1 07 00 00 A0 .dword 0a0000007h -0027C4r 1 08 00 00 A0 .dword 0a0000008h -0027C8r 1 09 00 00 A0 .dword 0a0000009h -0027CCr 1 0A 00 00 A0 .dword 0a000000ah -0027D0r 1 0B 00 00 A0 .dword 0a000000bh -0027D4r 1 0C 00 00 A0 .dword 0a000000ch -0027D8r 1 0D 00 00 A0 .dword 0a000000dh -0027DCr 1 0E 00 00 A0 .dword 0a000000eh -0027E0r 1 0F 00 00 A0 .dword 0a000000fh -0027E4r 1 F0 FF FF FF .dword 0fffffff0h -0027E8r 1 F1 FF FF FF .dword 0fffffff1h -0027ECr 1 F2 FF FF FF .dword 0fffffff2h -0027F0r 1 F3 FF FF FF .dword 0fffffff3h -0027F4r 1 F4 FF FF FF .dword 0fffffff4h -0027F8r 1 F5 FF FF FF .dword 0fffffff5h -0027FCr 1 F6 FF FF FF .dword 0fffffff6h -002800r 1 F7 FF FF FF .dword 0fffffff7h -002804r 1 F8 FF FF FF .dword 0fffffff8h -002808r 1 F9 FF FF FF .dword 0fffffff9h -00280Cr 1 FA FF FF FF .dword 0fffffffah -002810r 1 FB FF FF FF .dword 0fffffffbh -002814r 1 FC FF FF FF .dword 0fffffffch -002818r 1 FD FF FF FF .dword 0fffffffdh -00281Cr 1 FE FF FF FF .dword 0fffffffeh -002820r 1 FF FF FF FF .dword 0ffffffffh +002268r 1 ; alternative hex values +002268r 1 00 00 00 00 .dword 0h +00226Cr 1 01 00 00 00 .dword 1h +002270r 1 02 00 00 00 .dword 2h +002274r 1 03 00 00 00 .dword 3h +002278r 1 04 00 00 00 .dword 4h +00227Cr 1 05 00 00 00 .dword 5h +002280r 1 06 00 00 00 .dword 6h +002284r 1 07 00 00 00 .dword 7h +002288r 1 08 00 00 00 .dword 8h +00228Cr 1 09 00 00 00 .dword 9h +002290r 1 0A 00 00 00 .dword 0ah +002294r 1 0B 00 00 00 .dword 0bh +002298r 1 0C 00 00 00 .dword 0ch +00229Cr 1 0D 00 00 00 .dword 0dh +0022A0r 1 0E 00 00 00 .dword 0eh +0022A4r 1 0F 00 00 00 .dword 0fh +0022A8r 1 10 00 00 00 .dword 10h +0022ACr 1 11 00 00 00 .dword 11h +0022B0r 1 12 00 00 00 .dword 12h +0022B4r 1 13 00 00 00 .dword 13h +0022B8r 1 70 00 00 00 .dword 70h +0022BCr 1 71 00 00 00 .dword 71h +0022C0r 1 72 00 00 00 .dword 72h +0022C4r 1 73 00 00 00 .dword 73h +0022C8r 1 74 00 00 00 .dword 74h +0022CCr 1 75 00 00 00 .dword 75h +0022D0r 1 76 00 00 00 .dword 76h +0022D4r 1 77 00 00 00 .dword 77h +0022D8r 1 78 00 00 00 .dword 78h +0022DCr 1 79 00 00 00 .dword 79h +0022E0r 1 7A 00 00 00 .dword 7ah +0022E4r 1 7B 00 00 00 .dword 7bh +0022E8r 1 7C 00 00 00 .dword 7ch +0022ECr 1 7D 00 00 00 .dword 7dh +0022F0r 1 7E 00 00 00 .dword 7eh +0022F4r 1 7F 00 00 00 .dword 7fh +0022F8r 1 80 00 00 00 .dword 80h +0022FCr 1 81 00 00 00 .dword 81h +002300r 1 82 00 00 00 .dword 82h +002304r 1 83 00 00 00 .dword 83h +002308r 1 84 00 00 00 .dword 84h +00230Cr 1 85 00 00 00 .dword 85h +002310r 1 86 00 00 00 .dword 86h +002314r 1 F0 00 00 00 .dword 0f0h +002318r 1 F1 00 00 00 .dword 0f1h +00231Cr 1 F2 00 00 00 .dword 0f2h +002320r 1 F3 00 00 00 .dword 0f3h +002324r 1 F4 00 00 00 .dword 0f4h +002328r 1 F5 00 00 00 .dword 0f5h +00232Cr 1 F6 00 00 00 .dword 0f6h +002330r 1 F7 00 00 00 .dword 0f7h +002334r 1 F8 00 00 00 .dword 0f8h +002338r 1 F9 00 00 00 .dword 0f9h +00233Cr 1 FA 00 00 00 .dword 0fah +002340r 1 FB 00 00 00 .dword 0fbh +002344r 1 FC 00 00 00 .dword 0fch +002348r 1 FD 00 00 00 .dword 0fdh +00234Cr 1 FE 00 00 00 .dword 0feh +002350r 1 FF 00 00 00 .dword 0ffh +002354r 1 00 01 00 00 .dword 100h +002358r 1 01 01 00 00 .dword 101h +00235Cr 1 02 01 00 00 .dword 102h +002360r 1 03 01 00 00 .dword 103h +002364r 1 D2 0F 00 00 .dword 0fd2h +002368r 1 D3 0F 00 00 .dword 0fd3h +00236Cr 1 D4 0F 00 00 .dword 0fd4h +002370r 1 D5 0F 00 00 .dword 0fd5h +002374r 1 D6 0F 00 00 .dword 0fd6h +002378r 1 D7 0F 00 00 .dword 0fd7h +00237Cr 1 D8 0F 00 00 .dword 0fd8h +002380r 1 D9 0F 00 00 .dword 0fd9h +002384r 1 DA 0F 00 00 .dword 0fdah +002388r 1 DB 0F 00 00 .dword 0fdbh +00238Cr 1 DC 0F 00 00 .dword 0fdch +002390r 1 DD 0F 00 00 .dword 0fddh +002394r 1 DE 0F 00 00 .dword 0fdeh +002398r 1 DF 0F 00 00 .dword 0fdfh +00239Cr 1 E0 0F 00 00 .dword 0fe0h +0023A0r 1 E1 0F 00 00 .dword 0fe1h +0023A4r 1 E2 0F 00 00 .dword 0fe2h +0023A8r 1 E3 0F 00 00 .dword 0fe3h +0023ACr 1 E4 0F 00 00 .dword 0fe4h +0023B0r 1 E5 0F 00 00 .dword 0fe5h +0023B4r 1 E6 0F 00 00 .dword 0fe6h +0023B8r 1 E7 0F 00 00 .dword 0fe7h +0023BCr 1 E8 0F 00 00 .dword 0fe8h +0023C0r 1 E9 0F 00 00 .dword 0fe9h +0023C4r 1 EA 0F 00 00 .dword 0feah +0023C8r 1 EB 0F 00 00 .dword 0febh +0023CCr 1 EC 0F 00 00 .dword 0fech +0023D0r 1 ED 0F 00 00 .dword 0fedh +0023D4r 1 EE 0F 00 00 .dword 0feeh +0023D8r 1 EF 0F 00 00 .dword 0fefh +0023DCr 1 F0 0F 00 00 .dword 0ff0h +0023E0r 1 F1 0F 00 00 .dword 0ff1h +0023E4r 1 F2 0F 00 00 .dword 0ff2h +0023E8r 1 F3 0F 00 00 .dword 0ff3h +0023ECr 1 F4 0F 00 00 .dword 0ff4h +0023F0r 1 F5 0F 00 00 .dword 0ff5h +0023F4r 1 F6 0F 00 00 .dword 0ff6h +0023F8r 1 F7 0F 00 00 .dword 0ff7h +0023FCr 1 F8 0F 00 00 .dword 0ff8h +002400r 1 F9 0F 00 00 .dword 0ff9h +002404r 1 FA 0F 00 00 .dword 0ffah +002408r 1 FB 0F 00 00 .dword 0ffbh +00240Cr 1 FC 0F 00 00 .dword 0ffch +002410r 1 FD 0F 00 00 .dword 0ffdh +002414r 1 FE 0F 00 00 .dword 0ffeh +002418r 1 FF 0F 00 00 .dword 0fffh +00241Cr 1 00 10 00 00 .dword 1000h +002420r 1 01 10 00 00 .dword 1001h +002424r 1 02 10 00 00 .dword 1002h +002428r 1 03 10 00 00 .dword 1003h +00242Cr 1 04 10 00 00 .dword 1004h +002430r 1 05 10 00 00 .dword 1005h +002434r 1 06 10 00 00 .dword 1006h +002438r 1 07 10 00 00 .dword 1007h +00243Cr 1 08 10 00 00 .dword 1008h +002440r 1 F0 7F 00 00 .dword 7ff0h +002444r 1 F1 7F 00 00 .dword 7ff1h +002448r 1 F2 7F 00 00 .dword 7ff2h +00244Cr 1 F3 7F 00 00 .dword 7ff3h +002450r 1 F4 7F 00 00 .dword 7ff4h +002454r 1 F5 7F 00 00 .dword 7ff5h +002458r 1 F6 7F 00 00 .dword 7ff6h +00245Cr 1 F7 7F 00 00 .dword 7ff7h +002460r 1 F8 7F 00 00 .dword 7ff8h +002464r 1 F9 7F 00 00 .dword 7ff9h +002468r 1 FA 7F 00 00 .dword 7ffah +00246Cr 1 FB 7F 00 00 .dword 7ffbh +002470r 1 FC 7F 00 00 .dword 7ffch +002474r 1 FD 7F 00 00 .dword 7ffdh +002478r 1 FE 7F 00 00 .dword 7ffeh +00247Cr 1 FF 7F 00 00 .dword 7fffh +002480r 1 00 80 00 00 .dword 8000h +002484r 1 01 80 00 00 .dword 8001h +002488r 1 02 80 00 00 .dword 8002h +00248Cr 1 03 80 00 00 .dword 8003h +002490r 1 04 80 00 00 .dword 8004h +002494r 1 05 80 00 00 .dword 8005h +002498r 1 06 80 00 00 .dword 8006h +00249Cr 1 07 80 00 00 .dword 8007h +0024A0r 1 08 80 00 00 .dword 8008h +0024A4r 1 09 80 00 00 .dword 8009h +0024A8r 1 0A 80 00 00 .dword 800ah +0024ACr 1 0B 80 00 00 .dword 800bh +0024B0r 1 E1 9F 00 00 .dword 9fe1h +0024B4r 1 E2 9F 00 00 .dword 9fe2h +0024B8r 1 E3 9F 00 00 .dword 9fe3h +0024BCr 1 E4 9F 00 00 .dword 9fe4h +0024C0r 1 E5 9F 00 00 .dword 9fe5h +0024C4r 1 E6 9F 00 00 .dword 9fe6h +0024C8r 1 E7 9F 00 00 .dword 9fe7h +0024CCr 1 E8 9F 00 00 .dword 9fe8h +0024D0r 1 E9 9F 00 00 .dword 9fe9h +0024D4r 1 EA 9F 00 00 .dword 9feah +0024D8r 1 EB 9F 00 00 .dword 9febh +0024DCr 1 EC 9F 00 00 .dword 9fech +0024E0r 1 ED 9F 00 00 .dword 9fedh +0024E4r 1 EE 9F 00 00 .dword 9feeh +0024E8r 1 EF 9F 00 00 .dword 9fefh +0024ECr 1 F0 9F 00 00 .dword 9ff0h +0024F0r 1 F1 9F 00 00 .dword 9ff1h +0024F4r 1 F2 9F 00 00 .dword 9ff2h +0024F8r 1 F3 9F 00 00 .dword 9ff3h +0024FCr 1 F4 9F 00 00 .dword 9ff4h +002500r 1 F5 9F 00 00 .dword 9ff5h +002504r 1 F6 9F 00 00 .dword 9ff6h +002508r 1 F7 9F 00 00 .dword 9ff7h +00250Cr 1 F8 9F 00 00 .dword 9ff8h +002510r 1 F9 9F 00 00 .dword 9ff9h +002514r 1 FA 9F 00 00 .dword 9ffah +002518r 1 FB 9F 00 00 .dword 9ffbh +00251Cr 1 FC 9F 00 00 .dword 9ffch +002520r 1 FD 9F 00 00 .dword 9ffdh +002524r 1 FE 9F 00 00 .dword 9ffeh +002528r 1 FF 9F 00 00 .dword 9fffh +00252Cr 1 00 A0 00 00 .dword 0a000h +002530r 1 01 A0 00 00 .dword 0a001h +002534r 1 02 A0 00 00 .dword 0a002h +002538r 1 03 A0 00 00 .dword 0a003h +00253Cr 1 04 A0 00 00 .dword 0a004h +002540r 1 05 A0 00 00 .dword 0a005h +002544r 1 06 A0 00 00 .dword 0a006h +002548r 1 07 A0 00 00 .dword 0a007h +00254Cr 1 08 A0 00 00 .dword 0a008h +002550r 1 09 A0 00 00 .dword 0a009h +002554r 1 0A A0 00 00 .dword 0a00ah +002558r 1 0B A0 00 00 .dword 0a00bh +00255Cr 1 0C A0 00 00 .dword 0a00ch +002560r 1 0D A0 00 00 .dword 0a00dh +002564r 1 0E A0 00 00 .dword 0a00eh +002568r 1 0F A0 00 00 .dword 0a00fh +00256Cr 1 E1 AF 00 00 .dword 0afe1h +002570r 1 E2 AF 00 00 .dword 0afe2h +002574r 1 E3 AF 00 00 .dword 0afe3h +002578r 1 E4 AF 00 00 .dword 0afe4h +00257Cr 1 E5 AF 00 00 .dword 0afe5h +002580r 1 E6 AF 00 00 .dword 0afe6h +002584r 1 E7 AF 00 00 .dword 0afe7h +002588r 1 E8 AF 00 00 .dword 0afe8h +00258Cr 1 E9 AF 00 00 .dword 0afe9h +002590r 1 EA AF 00 00 .dword 0afeah +002594r 1 EB AF 00 00 .dword 0afebh +002598r 1 EC AF 00 00 .dword 0afech +00259Cr 1 ED AF 00 00 .dword 0afedh +0025A0r 1 EE AF 00 00 .dword 0afeeh +0025A4r 1 EF AF 00 00 .dword 0afefh +0025A8r 1 F0 AF 00 00 .dword 0aff0h +0025ACr 1 F1 AF 00 00 .dword 0aff1h +0025B0r 1 F2 AF 00 00 .dword 0aff2h +0025B4r 1 F3 AF 00 00 .dword 0aff3h +0025B8r 1 F4 AF 00 00 .dword 0aff4h +0025BCr 1 F5 AF 00 00 .dword 0aff5h +0025C0r 1 F6 AF 00 00 .dword 0aff6h +0025C4r 1 F7 AF 00 00 .dword 0aff7h +0025C8r 1 F8 AF 00 00 .dword 0aff8h +0025CCr 1 F9 AF 00 00 .dword 0aff9h +0025D0r 1 FA AF 00 00 .dword 0affah +0025D4r 1 FB AF 00 00 .dword 0affbh +0025D8r 1 FC AF 00 00 .dword 0affch +0025DCr 1 FD AF 00 00 .dword 0affdh +0025E0r 1 FE AF 00 00 .dword 0affeh +0025E4r 1 FF AF 00 00 .dword 0afffh +0025E8r 1 00 B0 00 00 .dword 0b000h +0025ECr 1 01 B0 00 00 .dword 0b001h +0025F0r 1 02 B0 00 00 .dword 0b002h +0025F4r 1 03 B0 00 00 .dword 0b003h +0025F8r 1 04 B0 00 00 .dword 0b004h +0025FCr 1 05 B0 00 00 .dword 0b005h +002600r 1 06 B0 00 00 .dword 0b006h +002604r 1 07 B0 00 00 .dword 0b007h +002608r 1 08 B0 00 00 .dword 0b008h +00260Cr 1 09 B0 00 00 .dword 0b009h +002610r 1 0A B0 00 00 .dword 0b00ah +002614r 1 0B B0 00 00 .dword 0b00bh +002618r 1 0C B0 00 00 .dword 0b00ch +00261Cr 1 0D B0 00 00 .dword 0b00dh +002620r 1 0E B0 00 00 .dword 0b00eh +002624r 1 0F B0 00 00 .dword 0b00fh +002628r 1 E1 FF 00 00 .dword 0ffe1h +00262Cr 1 E2 FF 00 00 .dword 0ffe2h +002630r 1 E3 FF 00 00 .dword 0ffe3h +002634r 1 E4 FF 00 00 .dword 0ffe4h +002638r 1 E5 FF 00 00 .dword 0ffe5h +00263Cr 1 E6 FF 00 00 .dword 0ffe6h +002640r 1 E7 FF 00 00 .dword 0ffe7h +002644r 1 E8 FF 00 00 .dword 0ffe8h +002648r 1 E9 FF 00 00 .dword 0ffe9h +00264Cr 1 EA FF 00 00 .dword 0ffeah +002650r 1 EB FF 00 00 .dword 0ffebh +002654r 1 EC FF 00 00 .dword 0ffech +002658r 1 ED FF 00 00 .dword 0ffedh +00265Cr 1 EE FF 00 00 .dword 0ffeeh +002660r 1 EF FF 00 00 .dword 0ffefh +002664r 1 F0 FF 00 00 .dword 0fff0h +002668r 1 F1 FF 00 00 .dword 0fff1h +00266Cr 1 F2 FF 00 00 .dword 0fff2h +002670r 1 F3 FF 00 00 .dword 0fff3h +002674r 1 F4 FF 00 00 .dword 0fff4h +002678r 1 F5 FF 00 00 .dword 0fff5h +00267Cr 1 F6 FF 00 00 .dword 0fff6h +002680r 1 F7 FF 00 00 .dword 0fff7h +002684r 1 F8 FF 00 00 .dword 0fff8h +002688r 1 F9 FF 00 00 .dword 0fff9h +00268Cr 1 FA FF 00 00 .dword 0fffah +002690r 1 FB FF 00 00 .dword 0fffbh +002694r 1 FC FF 00 00 .dword 0fffch +002698r 1 FD FF 00 00 .dword 0fffdh +00269Cr 1 FE FF 00 00 .dword 0fffeh +0026A0r 1 FF FF 00 00 .dword 0ffffh +0026A4r 1 00 00 01 00 .dword 10000h +0026A8r 1 01 00 01 00 .dword 10001h +0026ACr 1 02 00 01 00 .dword 10002h +0026B0r 1 03 00 01 00 .dword 10003h +0026B4r 1 04 00 01 00 .dword 10004h +0026B8r 1 05 00 01 00 .dword 10005h +0026BCr 1 06 00 01 00 .dword 10006h +0026C0r 1 07 00 01 00 .dword 10007h +0026C4r 1 08 00 01 00 .dword 10008h +0026C8r 1 09 00 01 00 .dword 10009h +0026CCr 1 0A 00 01 00 .dword 1000ah +0026D0r 1 0B 00 01 00 .dword 1000bh +0026D4r 1 0C 00 01 00 .dword 1000ch +0026D8r 1 0D 00 01 00 .dword 1000dh +0026DCr 1 0E 00 01 00 .dword 1000eh +0026E0r 1 0F 00 01 00 .dword 1000fh +0026E4r 1 F0 FF FF 7F .dword 7ffffff0h +0026E8r 1 F1 FF FF 7F .dword 7ffffff1h +0026ECr 1 F2 FF FF 7F .dword 7ffffff2h +0026F0r 1 F3 FF FF 7F .dword 7ffffff3h +0026F4r 1 F4 FF FF 7F .dword 7ffffff4h +0026F8r 1 F5 FF FF 7F .dword 7ffffff5h +0026FCr 1 F6 FF FF 7F .dword 7ffffff6h +002700r 1 F7 FF FF 7F .dword 7ffffff7h +002704r 1 F8 FF FF 7F .dword 7ffffff8h +002708r 1 F9 FF FF 7F .dword 7ffffff9h +00270Cr 1 FA FF FF 7F .dword 7ffffffah +002710r 1 FB FF FF 7F .dword 7ffffffbh +002714r 1 FC FF FF 7F .dword 7ffffffch +002718r 1 FD FF FF 7F .dword 7ffffffdh +00271Cr 1 FE FF FF 7F .dword 7ffffffeh +002720r 1 FF FF FF 7F .dword 7fffffffh +002724r 1 00 00 00 80 .dword 80000000h +002728r 1 01 00 00 80 .dword 80000001h +00272Cr 1 02 00 00 80 .dword 80000002h +002730r 1 03 00 00 80 .dword 80000003h +002734r 1 04 00 00 80 .dword 80000004h +002738r 1 05 00 00 80 .dword 80000005h +00273Cr 1 06 00 00 80 .dword 80000006h +002740r 1 07 00 00 80 .dword 80000007h +002744r 1 08 00 00 80 .dword 80000008h +002748r 1 09 00 00 80 .dword 80000009h +00274Cr 1 0A 00 00 80 .dword 8000000ah +002750r 1 0B 00 00 80 .dword 8000000bh +002754r 1 0C 00 00 80 .dword 8000000ch +002758r 1 0D 00 00 80 .dword 8000000dh +00275Cr 1 0E 00 00 80 .dword 8000000eh +002760r 1 0F 00 00 80 .dword 8000000fh +002764r 1 F0 FF FF 9F .dword 9ffffff0h +002768r 1 F1 FF FF 9F .dword 9ffffff1h +00276Cr 1 F2 FF FF 9F .dword 9ffffff2h +002770r 1 F3 FF FF 9F .dword 9ffffff3h +002774r 1 F4 FF FF 9F .dword 9ffffff4h +002778r 1 F5 FF FF 9F .dword 9ffffff5h +00277Cr 1 F6 FF FF 9F .dword 9ffffff6h +002780r 1 F7 FF FF 9F .dword 9ffffff7h +002784r 1 F8 FF FF 9F .dword 9ffffff8h +002788r 1 F9 FF FF 9F .dword 9ffffff9h +00278Cr 1 FA FF FF 9F .dword 9ffffffah +002790r 1 FB FF FF 9F .dword 9ffffffbh +002794r 1 FC FF FF 9F .dword 9ffffffch +002798r 1 FD FF FF 9F .dword 9ffffffdh +00279Cr 1 FE FF FF 9F .dword 9ffffffeh +0027A0r 1 FF FF FF 9F .dword 9fffffffh +0027A4r 1 00 00 00 A0 .dword 0a0000000h +0027A8r 1 01 00 00 A0 .dword 0a0000001h +0027ACr 1 02 00 00 A0 .dword 0a0000002h +0027B0r 1 03 00 00 A0 .dword 0a0000003h +0027B4r 1 04 00 00 A0 .dword 0a0000004h +0027B8r 1 05 00 00 A0 .dword 0a0000005h +0027BCr 1 06 00 00 A0 .dword 0a0000006h +0027C0r 1 07 00 00 A0 .dword 0a0000007h +0027C4r 1 08 00 00 A0 .dword 0a0000008h +0027C8r 1 09 00 00 A0 .dword 0a0000009h +0027CCr 1 0A 00 00 A0 .dword 0a000000ah +0027D0r 1 0B 00 00 A0 .dword 0a000000bh +0027D4r 1 0C 00 00 A0 .dword 0a000000ch +0027D8r 1 0D 00 00 A0 .dword 0a000000dh +0027DCr 1 0E 00 00 A0 .dword 0a000000eh +0027E0r 1 0F 00 00 A0 .dword 0a000000fh +0027E4r 1 F0 FF FF FF .dword 0fffffff0h +0027E8r 1 F1 FF FF FF .dword 0fffffff1h +0027ECr 1 F2 FF FF FF .dword 0fffffff2h +0027F0r 1 F3 FF FF FF .dword 0fffffff3h +0027F4r 1 F4 FF FF FF .dword 0fffffff4h +0027F8r 1 F5 FF FF FF .dword 0fffffff5h +0027FCr 1 F6 FF FF FF .dword 0fffffff6h +002800r 1 F7 FF FF FF .dword 0fffffff7h +002804r 1 F8 FF FF FF .dword 0fffffff8h +002808r 1 F9 FF FF FF .dword 0fffffff9h +00280Cr 1 FA FF FF FF .dword 0fffffffah +002810r 1 FB FF FF FF .dword 0fffffffbh +002814r 1 FC FF FF FF .dword 0fffffffch +002818r 1 FD FF FF FF .dword 0fffffffdh +00281Cr 1 FE FF FF FF .dword 0fffffffeh +002820r 1 FF FF FF FF .dword 0ffffffffh 002824r 1 -002824r 1 ; alternative hex values, uppercase -002824r 1 00 00 00 00 .dword 0h -002828r 1 01 00 00 00 .dword 1h -00282Cr 1 02 00 00 00 .dword 2h -002830r 1 03 00 00 00 .dword 3h -002834r 1 04 00 00 00 .dword 4h -002838r 1 05 00 00 00 .dword 5h -00283Cr 1 06 00 00 00 .dword 6h -002840r 1 07 00 00 00 .dword 7h -002844r 1 08 00 00 00 .dword 8h -002848r 1 09 00 00 00 .dword 9h -00284Cr 1 0A 00 00 00 .dword 0Ah -002850r 1 0B 00 00 00 .dword 0Bh -002854r 1 0C 00 00 00 .dword 0Ch -002858r 1 0D 00 00 00 .dword 0Dh -00285Cr 1 0E 00 00 00 .dword 0Eh -002860r 1 0F 00 00 00 .dword 0Fh -002864r 1 10 00 00 00 .dword 10h -002868r 1 11 00 00 00 .dword 11h -00286Cr 1 12 00 00 00 .dword 12h -002870r 1 13 00 00 00 .dword 13h -002874r 1 70 00 00 00 .dword 70h -002878r 1 71 00 00 00 .dword 71h -00287Cr 1 72 00 00 00 .dword 72h -002880r 1 73 00 00 00 .dword 73h -002884r 1 74 00 00 00 .dword 74h -002888r 1 75 00 00 00 .dword 75h -00288Cr 1 76 00 00 00 .dword 76h -002890r 1 77 00 00 00 .dword 77h -002894r 1 78 00 00 00 .dword 78h -002898r 1 79 00 00 00 .dword 79h -00289Cr 1 7A 00 00 00 .dword 7Ah -0028A0r 1 7B 00 00 00 .dword 7Bh -0028A4r 1 7C 00 00 00 .dword 7Ch -0028A8r 1 7D 00 00 00 .dword 7Dh -0028ACr 1 7E 00 00 00 .dword 7Eh -0028B0r 1 7F 00 00 00 .dword 7Fh -0028B4r 1 80 00 00 00 .dword 80h -0028B8r 1 81 00 00 00 .dword 81h -0028BCr 1 82 00 00 00 .dword 82h -0028C0r 1 83 00 00 00 .dword 83h -0028C4r 1 84 00 00 00 .dword 84h -0028C8r 1 85 00 00 00 .dword 85h -0028CCr 1 86 00 00 00 .dword 86h -0028D0r 1 F0 00 00 00 .dword 0F0h -0028D4r 1 F1 00 00 00 .dword 0F1h -0028D8r 1 F2 00 00 00 .dword 0F2h -0028DCr 1 F3 00 00 00 .dword 0F3h -0028E0r 1 F4 00 00 00 .dword 0F4h -0028E4r 1 F5 00 00 00 .dword 0F5h -0028E8r 1 F6 00 00 00 .dword 0F6h -0028ECr 1 F7 00 00 00 .dword 0F7h -0028F0r 1 F8 00 00 00 .dword 0F8h -0028F4r 1 F9 00 00 00 .dword 0F9h -0028F8r 1 FA 00 00 00 .dword 0FAh -0028FCr 1 FB 00 00 00 .dword 0FBh -002900r 1 FC 00 00 00 .dword 0FCh -002904r 1 FD 00 00 00 .dword 0FDh -002908r 1 FE 00 00 00 .dword 0FEh -00290Cr 1 FF 00 00 00 .dword 0FFh -002910r 1 00 01 00 00 .dword 100h -002914r 1 01 01 00 00 .dword 101h -002918r 1 02 01 00 00 .dword 102h -00291Cr 1 03 01 00 00 .dword 103h -002920r 1 D2 0F 00 00 .dword 0FD2h -002924r 1 D3 0F 00 00 .dword 0FD3h -002928r 1 D4 0F 00 00 .dword 0FD4h -00292Cr 1 D5 0F 00 00 .dword 0FD5h -002930r 1 D6 0F 00 00 .dword 0FD6h -002934r 1 D7 0F 00 00 .dword 0FD7h -002938r 1 D8 0F 00 00 .dword 0FD8h -00293Cr 1 D9 0F 00 00 .dword 0FD9h -002940r 1 DA 0F 00 00 .dword 0FDAh -002944r 1 DB 0F 00 00 .dword 0FDBh -002948r 1 DC 0F 00 00 .dword 0FDCh -00294Cr 1 DD 0F 00 00 .dword 0FDDh -002950r 1 DE 0F 00 00 .dword 0FDEh -002954r 1 DF 0F 00 00 .dword 0FDFh -002958r 1 E0 0F 00 00 .dword 0FE0h -00295Cr 1 E1 0F 00 00 .dword 0FE1h -002960r 1 E2 0F 00 00 .dword 0FE2h -002964r 1 E3 0F 00 00 .dword 0FE3h -002968r 1 E4 0F 00 00 .dword 0FE4h -00296Cr 1 E5 0F 00 00 .dword 0FE5h -002970r 1 E6 0F 00 00 .dword 0FE6h -002974r 1 E7 0F 00 00 .dword 0FE7h -002978r 1 E8 0F 00 00 .dword 0FE8h -00297Cr 1 E9 0F 00 00 .dword 0FE9h -002980r 1 EA 0F 00 00 .dword 0FEAh -002984r 1 EB 0F 00 00 .dword 0FEBh -002988r 1 EC 0F 00 00 .dword 0FECh -00298Cr 1 ED 0F 00 00 .dword 0FEDh -002990r 1 EE 0F 00 00 .dword 0FEEh -002994r 1 EF 0F 00 00 .dword 0FEFh -002998r 1 F0 0F 00 00 .dword 0FF0h -00299Cr 1 F1 0F 00 00 .dword 0FF1h -0029A0r 1 F2 0F 00 00 .dword 0FF2h -0029A4r 1 F3 0F 00 00 .dword 0FF3h -0029A8r 1 F4 0F 00 00 .dword 0FF4h -0029ACr 1 F5 0F 00 00 .dword 0FF5h -0029B0r 1 F6 0F 00 00 .dword 0FF6h -0029B4r 1 F7 0F 00 00 .dword 0FF7h -0029B8r 1 F8 0F 00 00 .dword 0FF8h -0029BCr 1 F9 0F 00 00 .dword 0FF9h -0029C0r 1 FA 0F 00 00 .dword 0FFAh -0029C4r 1 FB 0F 00 00 .dword 0FFBh -0029C8r 1 FC 0F 00 00 .dword 0FFCh -0029CCr 1 FD 0F 00 00 .dword 0FFDh -0029D0r 1 FE 0F 00 00 .dword 0FFEh -0029D4r 1 FF 0F 00 00 .dword 0FFFh -0029D8r 1 00 10 00 00 .dword 1000h -0029DCr 1 01 10 00 00 .dword 1001h -0029E0r 1 02 10 00 00 .dword 1002h -0029E4r 1 03 10 00 00 .dword 1003h -0029E8r 1 04 10 00 00 .dword 1004h -0029ECr 1 05 10 00 00 .dword 1005h -0029F0r 1 06 10 00 00 .dword 1006h -0029F4r 1 07 10 00 00 .dword 1007h -0029F8r 1 08 10 00 00 .dword 1008h -0029FCr 1 F0 7F 00 00 .dword 7FF0h -002A00r 1 F1 7F 00 00 .dword 7FF1h -002A04r 1 F2 7F 00 00 .dword 7FF2h -002A08r 1 F3 7F 00 00 .dword 7FF3h -002A0Cr 1 F4 7F 00 00 .dword 7FF4h -002A10r 1 F5 7F 00 00 .dword 7FF5h -002A14r 1 F6 7F 00 00 .dword 7FF6h -002A18r 1 F7 7F 00 00 .dword 7FF7h -002A1Cr 1 F8 7F 00 00 .dword 7FF8h -002A20r 1 F9 7F 00 00 .dword 7FF9h -002A24r 1 FA 7F 00 00 .dword 7FFAh -002A28r 1 FB 7F 00 00 .dword 7FFBh -002A2Cr 1 FC 7F 00 00 .dword 7FFCh -002A30r 1 FD 7F 00 00 .dword 7FFDh -002A34r 1 FE 7F 00 00 .dword 7FFEh -002A38r 1 FF 7F 00 00 .dword 7FFFh -002A3Cr 1 00 80 00 00 .dword 8000h -002A40r 1 01 80 00 00 .dword 8001h -002A44r 1 02 80 00 00 .dword 8002h -002A48r 1 03 80 00 00 .dword 8003h -002A4Cr 1 04 80 00 00 .dword 8004h -002A50r 1 05 80 00 00 .dword 8005h -002A54r 1 06 80 00 00 .dword 8006h -002A58r 1 07 80 00 00 .dword 8007h -002A5Cr 1 08 80 00 00 .dword 8008h -002A60r 1 09 80 00 00 .dword 8009h -002A64r 1 0A 80 00 00 .dword 800Ah -002A68r 1 0B 80 00 00 .dword 800Bh -002A6Cr 1 E1 9F 00 00 .dword 9FE1h -002A70r 1 E2 9F 00 00 .dword 9FE2h -002A74r 1 E3 9F 00 00 .dword 9FE3h -002A78r 1 E4 9F 00 00 .dword 9FE4h -002A7Cr 1 E5 9F 00 00 .dword 9FE5h -002A80r 1 E6 9F 00 00 .dword 9FE6h -002A84r 1 E7 9F 00 00 .dword 9FE7h -002A88r 1 E8 9F 00 00 .dword 9FE8h -002A8Cr 1 E9 9F 00 00 .dword 9FE9h -002A90r 1 EA 9F 00 00 .dword 9FEAh -002A94r 1 EB 9F 00 00 .dword 9FEBh -002A98r 1 EC 9F 00 00 .dword 9FECh -002A9Cr 1 ED 9F 00 00 .dword 9FEDh -002AA0r 1 EE 9F 00 00 .dword 9FEEh -002AA4r 1 EF 9F 00 00 .dword 9FEFh -002AA8r 1 F0 9F 00 00 .dword 9FF0h -002AACr 1 F1 9F 00 00 .dword 9FF1h -002AB0r 1 F2 9F 00 00 .dword 9FF2h -002AB4r 1 F3 9F 00 00 .dword 9FF3h -002AB8r 1 F4 9F 00 00 .dword 9FF4h -002ABCr 1 F5 9F 00 00 .dword 9FF5h -002AC0r 1 F6 9F 00 00 .dword 9FF6h -002AC4r 1 F7 9F 00 00 .dword 9FF7h -002AC8r 1 F8 9F 00 00 .dword 9FF8h -002ACCr 1 F9 9F 00 00 .dword 9FF9h -002AD0r 1 FA 9F 00 00 .dword 9FFAh -002AD4r 1 FB 9F 00 00 .dword 9FFBh -002AD8r 1 FC 9F 00 00 .dword 9FFCh -002ADCr 1 FD 9F 00 00 .dword 9FFDh -002AE0r 1 FE 9F 00 00 .dword 9FFEh -002AE4r 1 FF 9F 00 00 .dword 9FFFh -002AE8r 1 00 A0 00 00 .dword 0A000h -002AECr 1 01 A0 00 00 .dword 0A001h -002AF0r 1 02 A0 00 00 .dword 0A002h -002AF4r 1 03 A0 00 00 .dword 0A003h -002AF8r 1 04 A0 00 00 .dword 0A004h -002AFCr 1 05 A0 00 00 .dword 0A005h -002B00r 1 06 A0 00 00 .dword 0A006h -002B04r 1 07 A0 00 00 .dword 0A007h -002B08r 1 08 A0 00 00 .dword 0A008h -002B0Cr 1 09 A0 00 00 .dword 0A009h -002B10r 1 0A A0 00 00 .dword 0A00Ah -002B14r 1 0B A0 00 00 .dword 0A00Bh -002B18r 1 0C A0 00 00 .dword 0A00Ch -002B1Cr 1 0D A0 00 00 .dword 0A00Dh -002B20r 1 0E A0 00 00 .dword 0A00Eh -002B24r 1 0F A0 00 00 .dword 0A00Fh -002B28r 1 E1 AF 00 00 .dword 0AFE1h -002B2Cr 1 E2 AF 00 00 .dword 0AFE2h -002B30r 1 E3 AF 00 00 .dword 0AFE3h -002B34r 1 E4 AF 00 00 .dword 0AFE4h -002B38r 1 E5 AF 00 00 .dword 0AFE5h -002B3Cr 1 E6 AF 00 00 .dword 0AFE6h -002B40r 1 E7 AF 00 00 .dword 0AFE7h -002B44r 1 E8 AF 00 00 .dword 0AFE8h -002B48r 1 E9 AF 00 00 .dword 0AFE9h -002B4Cr 1 EA AF 00 00 .dword 0AFEAh -002B50r 1 EB AF 00 00 .dword 0AFEBh -002B54r 1 EC AF 00 00 .dword 0AFECh -002B58r 1 ED AF 00 00 .dword 0AFEDh -002B5Cr 1 EE AF 00 00 .dword 0AFEEh -002B60r 1 EF AF 00 00 .dword 0AFEFh -002B64r 1 F0 AF 00 00 .dword 0AFF0h -002B68r 1 F1 AF 00 00 .dword 0AFF1h -002B6Cr 1 F2 AF 00 00 .dword 0AFF2h -002B70r 1 F3 AF 00 00 .dword 0AFF3h -002B74r 1 F4 AF 00 00 .dword 0AFF4h -002B78r 1 F5 AF 00 00 .dword 0AFF5h -002B7Cr 1 F6 AF 00 00 .dword 0AFF6h -002B80r 1 F7 AF 00 00 .dword 0AFF7h -002B84r 1 F8 AF 00 00 .dword 0AFF8h -002B88r 1 F9 AF 00 00 .dword 0AFF9h -002B8Cr 1 FA AF 00 00 .dword 0AFFAh -002B90r 1 FB AF 00 00 .dword 0AFFBh -002B94r 1 FC AF 00 00 .dword 0AFFCh -002B98r 1 FD AF 00 00 .dword 0AFFDh -002B9Cr 1 FE AF 00 00 .dword 0AFFEh -002BA0r 1 FF AF 00 00 .dword 0AFFFh -002BA4r 1 00 B0 00 00 .dword 0B000h -002BA8r 1 01 B0 00 00 .dword 0B001h -002BACr 1 02 B0 00 00 .dword 0B002h -002BB0r 1 03 B0 00 00 .dword 0B003h -002BB4r 1 04 B0 00 00 .dword 0B004h -002BB8r 1 05 B0 00 00 .dword 0B005h -002BBCr 1 06 B0 00 00 .dword 0B006h -002BC0r 1 07 B0 00 00 .dword 0B007h -002BC4r 1 08 B0 00 00 .dword 0B008h -002BC8r 1 09 B0 00 00 .dword 0B009h -002BCCr 1 0A B0 00 00 .dword 0B00Ah -002BD0r 1 0B B0 00 00 .dword 0B00Bh -002BD4r 1 0C B0 00 00 .dword 0B00Ch -002BD8r 1 0D B0 00 00 .dword 0B00Dh -002BDCr 1 0E B0 00 00 .dword 0B00Eh -002BE0r 1 0F B0 00 00 .dword 0B00Fh -002BE4r 1 E1 FF 00 00 .dword 0FFE1h -002BE8r 1 E2 FF 00 00 .dword 0FFE2h -002BECr 1 E3 FF 00 00 .dword 0FFE3h -002BF0r 1 E4 FF 00 00 .dword 0FFE4h -002BF4r 1 E5 FF 00 00 .dword 0FFE5h -002BF8r 1 E6 FF 00 00 .dword 0FFE6h -002BFCr 1 E7 FF 00 00 .dword 0FFE7h -002C00r 1 E8 FF 00 00 .dword 0FFE8h -002C04r 1 E9 FF 00 00 .dword 0FFE9h -002C08r 1 EA FF 00 00 .dword 0FFEAh -002C0Cr 1 EB FF 00 00 .dword 0FFEBh -002C10r 1 EC FF 00 00 .dword 0FFECh -002C14r 1 ED FF 00 00 .dword 0FFEDh -002C18r 1 EE FF 00 00 .dword 0FFEEh -002C1Cr 1 EF FF 00 00 .dword 0FFEFh -002C20r 1 F0 FF 00 00 .dword 0FFF0h -002C24r 1 F1 FF 00 00 .dword 0FFF1h -002C28r 1 F2 FF 00 00 .dword 0FFF2h -002C2Cr 1 F3 FF 00 00 .dword 0FFF3h -002C30r 1 F4 FF 00 00 .dword 0FFF4h -002C34r 1 F5 FF 00 00 .dword 0FFF5h -002C38r 1 F6 FF 00 00 .dword 0FFF6h -002C3Cr 1 F7 FF 00 00 .dword 0FFF7h -002C40r 1 F8 FF 00 00 .dword 0FFF8h -002C44r 1 F9 FF 00 00 .dword 0FFF9h -002C48r 1 FA FF 00 00 .dword 0FFFAh -002C4Cr 1 FB FF 00 00 .dword 0FFFBh -002C50r 1 FC FF 00 00 .dword 0FFFCh -002C54r 1 FD FF 00 00 .dword 0FFFDh -002C58r 1 FE FF 00 00 .dword 0FFFEh -002C5Cr 1 FF FF 00 00 .dword 0FFFFh -002C60r 1 00 00 01 00 .dword 10000h -002C64r 1 01 00 01 00 .dword 10001h -002C68r 1 02 00 01 00 .dword 10002h -002C6Cr 1 03 00 01 00 .dword 10003h -002C70r 1 04 00 01 00 .dword 10004h -002C74r 1 05 00 01 00 .dword 10005h -002C78r 1 06 00 01 00 .dword 10006h -002C7Cr 1 07 00 01 00 .dword 10007h -002C80r 1 08 00 01 00 .dword 10008h -002C84r 1 09 00 01 00 .dword 10009h -002C88r 1 0A 00 01 00 .dword 1000Ah -002C8Cr 1 0B 00 01 00 .dword 1000Bh -002C90r 1 0C 00 01 00 .dword 1000Ch -002C94r 1 0D 00 01 00 .dword 1000Dh -002C98r 1 0E 00 01 00 .dword 1000Eh -002C9Cr 1 0F 00 01 00 .dword 1000Fh -002CA0r 1 F0 FF FF 7F .dword 7FFFFFF0h -002CA4r 1 F1 FF FF 7F .dword 7FFFFFF1h -002CA8r 1 F2 FF FF 7F .dword 7FFFFFF2h -002CACr 1 F3 FF FF 7F .dword 7FFFFFF3h -002CB0r 1 F4 FF FF 7F .dword 7FFFFFF4h -002CB4r 1 F5 FF FF 7F .dword 7FFFFFF5h -002CB8r 1 F6 FF FF 7F .dword 7FFFFFF6h -002CBCr 1 F7 FF FF 7F .dword 7FFFFFF7h -002CC0r 1 F8 FF FF 7F .dword 7FFFFFF8h -002CC4r 1 F9 FF FF 7F .dword 7FFFFFF9h -002CC8r 1 FA FF FF 7F .dword 7FFFFFFAh -002CCCr 1 FB FF FF 7F .dword 7FFFFFFBh -002CD0r 1 FC FF FF 7F .dword 7FFFFFFCh -002CD4r 1 FD FF FF 7F .dword 7FFFFFFDh -002CD8r 1 FE FF FF 7F .dword 7FFFFFFEh -002CDCr 1 FF FF FF 7F .dword 7FFFFFFFh -002CE0r 1 00 00 00 80 .dword 80000000h -002CE4r 1 01 00 00 80 .dword 80000001h -002CE8r 1 02 00 00 80 .dword 80000002h -002CECr 1 03 00 00 80 .dword 80000003h -002CF0r 1 04 00 00 80 .dword 80000004h -002CF4r 1 05 00 00 80 .dword 80000005h -002CF8r 1 06 00 00 80 .dword 80000006h -002CFCr 1 07 00 00 80 .dword 80000007h -002D00r 1 08 00 00 80 .dword 80000008h -002D04r 1 09 00 00 80 .dword 80000009h -002D08r 1 0A 00 00 80 .dword 8000000Ah -002D0Cr 1 0B 00 00 80 .dword 8000000Bh -002D10r 1 0C 00 00 80 .dword 8000000Ch -002D14r 1 0D 00 00 80 .dword 8000000Dh -002D18r 1 0E 00 00 80 .dword 8000000Eh -002D1Cr 1 0F 00 00 80 .dword 8000000Fh -002D20r 1 F0 FF FF 9F .dword 9FFFFFF0h -002D24r 1 F1 FF FF 9F .dword 9FFFFFF1h -002D28r 1 F2 FF FF 9F .dword 9FFFFFF2h -002D2Cr 1 F3 FF FF 9F .dword 9FFFFFF3h -002D30r 1 F4 FF FF 9F .dword 9FFFFFF4h -002D34r 1 F5 FF FF 9F .dword 9FFFFFF5h -002D38r 1 F6 FF FF 9F .dword 9FFFFFF6h -002D3Cr 1 F7 FF FF 9F .dword 9FFFFFF7h -002D40r 1 F8 FF FF 9F .dword 9FFFFFF8h -002D44r 1 F9 FF FF 9F .dword 9FFFFFF9h -002D48r 1 FA FF FF 9F .dword 9FFFFFFAh -002D4Cr 1 FB FF FF 9F .dword 9FFFFFFBh -002D50r 1 FC FF FF 9F .dword 9FFFFFFCh -002D54r 1 FD FF FF 9F .dword 9FFFFFFDh -002D58r 1 FE FF FF 9F .dword 9FFFFFFEh -002D5Cr 1 FF FF FF 9F .dword 9FFFFFFFh -002D60r 1 00 00 00 A0 .dword 0A0000000h -002D64r 1 01 00 00 A0 .dword 0A0000001h -002D68r 1 02 00 00 A0 .dword 0A0000002h -002D6Cr 1 03 00 00 A0 .dword 0A0000003h -002D70r 1 04 00 00 A0 .dword 0A0000004h -002D74r 1 05 00 00 A0 .dword 0A0000005h -002D78r 1 06 00 00 A0 .dword 0A0000006h -002D7Cr 1 07 00 00 A0 .dword 0A0000007h -002D80r 1 08 00 00 A0 .dword 0A0000008h -002D84r 1 09 00 00 A0 .dword 0A0000009h -002D88r 1 0A 00 00 A0 .dword 0A000000Ah -002D8Cr 1 0B 00 00 A0 .dword 0A000000Bh -002D90r 1 0C 00 00 A0 .dword 0A000000Ch -002D94r 1 0D 00 00 A0 .dword 0A000000Dh -002D98r 1 0E 00 00 A0 .dword 0A000000Eh -002D9Cr 1 0F 00 00 A0 .dword 0A000000Fh -002DA0r 1 F0 FF FF FF .dword 0FFFFFFF0h -002DA4r 1 F1 FF FF FF .dword 0FFFFFFF1h -002DA8r 1 F2 FF FF FF .dword 0FFFFFFF2h -002DACr 1 F3 FF FF FF .dword 0FFFFFFF3h -002DB0r 1 F4 FF FF FF .dword 0FFFFFFF4h -002DB4r 1 F5 FF FF FF .dword 0FFFFFFF5h -002DB8r 1 F6 FF FF FF .dword 0FFFFFFF6h -002DBCr 1 F7 FF FF FF .dword 0FFFFFFF7h -002DC0r 1 F8 FF FF FF .dword 0FFFFFFF8h -002DC4r 1 F9 FF FF FF .dword 0FFFFFFF9h -002DC8r 1 FA FF FF FF .dword 0FFFFFFFAh -002DCCr 1 FB FF FF FF .dword 0FFFFFFFBh -002DD0r 1 FC FF FF FF .dword 0FFFFFFFCh -002DD4r 1 FD FF FF FF .dword 0FFFFFFFDh -002DD8r 1 FE FF FF FF .dword 0FFFFFFFEh -002DDCr 1 FF FF FF FF .dword 0FFFFFFFFh +002824r 1 ; alternative hex values, uppercase +002824r 1 00 00 00 00 .dword 0h +002828r 1 01 00 00 00 .dword 1h +00282Cr 1 02 00 00 00 .dword 2h +002830r 1 03 00 00 00 .dword 3h +002834r 1 04 00 00 00 .dword 4h +002838r 1 05 00 00 00 .dword 5h +00283Cr 1 06 00 00 00 .dword 6h +002840r 1 07 00 00 00 .dword 7h +002844r 1 08 00 00 00 .dword 8h +002848r 1 09 00 00 00 .dword 9h +00284Cr 1 0A 00 00 00 .dword 0Ah +002850r 1 0B 00 00 00 .dword 0Bh +002854r 1 0C 00 00 00 .dword 0Ch +002858r 1 0D 00 00 00 .dword 0Dh +00285Cr 1 0E 00 00 00 .dword 0Eh +002860r 1 0F 00 00 00 .dword 0Fh +002864r 1 10 00 00 00 .dword 10h +002868r 1 11 00 00 00 .dword 11h +00286Cr 1 12 00 00 00 .dword 12h +002870r 1 13 00 00 00 .dword 13h +002874r 1 70 00 00 00 .dword 70h +002878r 1 71 00 00 00 .dword 71h +00287Cr 1 72 00 00 00 .dword 72h +002880r 1 73 00 00 00 .dword 73h +002884r 1 74 00 00 00 .dword 74h +002888r 1 75 00 00 00 .dword 75h +00288Cr 1 76 00 00 00 .dword 76h +002890r 1 77 00 00 00 .dword 77h +002894r 1 78 00 00 00 .dword 78h +002898r 1 79 00 00 00 .dword 79h +00289Cr 1 7A 00 00 00 .dword 7Ah +0028A0r 1 7B 00 00 00 .dword 7Bh +0028A4r 1 7C 00 00 00 .dword 7Ch +0028A8r 1 7D 00 00 00 .dword 7Dh +0028ACr 1 7E 00 00 00 .dword 7Eh +0028B0r 1 7F 00 00 00 .dword 7Fh +0028B4r 1 80 00 00 00 .dword 80h +0028B8r 1 81 00 00 00 .dword 81h +0028BCr 1 82 00 00 00 .dword 82h +0028C0r 1 83 00 00 00 .dword 83h +0028C4r 1 84 00 00 00 .dword 84h +0028C8r 1 85 00 00 00 .dword 85h +0028CCr 1 86 00 00 00 .dword 86h +0028D0r 1 F0 00 00 00 .dword 0F0h +0028D4r 1 F1 00 00 00 .dword 0F1h +0028D8r 1 F2 00 00 00 .dword 0F2h +0028DCr 1 F3 00 00 00 .dword 0F3h +0028E0r 1 F4 00 00 00 .dword 0F4h +0028E4r 1 F5 00 00 00 .dword 0F5h +0028E8r 1 F6 00 00 00 .dword 0F6h +0028ECr 1 F7 00 00 00 .dword 0F7h +0028F0r 1 F8 00 00 00 .dword 0F8h +0028F4r 1 F9 00 00 00 .dword 0F9h +0028F8r 1 FA 00 00 00 .dword 0FAh +0028FCr 1 FB 00 00 00 .dword 0FBh +002900r 1 FC 00 00 00 .dword 0FCh +002904r 1 FD 00 00 00 .dword 0FDh +002908r 1 FE 00 00 00 .dword 0FEh +00290Cr 1 FF 00 00 00 .dword 0FFh +002910r 1 00 01 00 00 .dword 100h +002914r 1 01 01 00 00 .dword 101h +002918r 1 02 01 00 00 .dword 102h +00291Cr 1 03 01 00 00 .dword 103h +002920r 1 D2 0F 00 00 .dword 0FD2h +002924r 1 D3 0F 00 00 .dword 0FD3h +002928r 1 D4 0F 00 00 .dword 0FD4h +00292Cr 1 D5 0F 00 00 .dword 0FD5h +002930r 1 D6 0F 00 00 .dword 0FD6h +002934r 1 D7 0F 00 00 .dword 0FD7h +002938r 1 D8 0F 00 00 .dword 0FD8h +00293Cr 1 D9 0F 00 00 .dword 0FD9h +002940r 1 DA 0F 00 00 .dword 0FDAh +002944r 1 DB 0F 00 00 .dword 0FDBh +002948r 1 DC 0F 00 00 .dword 0FDCh +00294Cr 1 DD 0F 00 00 .dword 0FDDh +002950r 1 DE 0F 00 00 .dword 0FDEh +002954r 1 DF 0F 00 00 .dword 0FDFh +002958r 1 E0 0F 00 00 .dword 0FE0h +00295Cr 1 E1 0F 00 00 .dword 0FE1h +002960r 1 E2 0F 00 00 .dword 0FE2h +002964r 1 E3 0F 00 00 .dword 0FE3h +002968r 1 E4 0F 00 00 .dword 0FE4h +00296Cr 1 E5 0F 00 00 .dword 0FE5h +002970r 1 E6 0F 00 00 .dword 0FE6h +002974r 1 E7 0F 00 00 .dword 0FE7h +002978r 1 E8 0F 00 00 .dword 0FE8h +00297Cr 1 E9 0F 00 00 .dword 0FE9h +002980r 1 EA 0F 00 00 .dword 0FEAh +002984r 1 EB 0F 00 00 .dword 0FEBh +002988r 1 EC 0F 00 00 .dword 0FECh +00298Cr 1 ED 0F 00 00 .dword 0FEDh +002990r 1 EE 0F 00 00 .dword 0FEEh +002994r 1 EF 0F 00 00 .dword 0FEFh +002998r 1 F0 0F 00 00 .dword 0FF0h +00299Cr 1 F1 0F 00 00 .dword 0FF1h +0029A0r 1 F2 0F 00 00 .dword 0FF2h +0029A4r 1 F3 0F 00 00 .dword 0FF3h +0029A8r 1 F4 0F 00 00 .dword 0FF4h +0029ACr 1 F5 0F 00 00 .dword 0FF5h +0029B0r 1 F6 0F 00 00 .dword 0FF6h +0029B4r 1 F7 0F 00 00 .dword 0FF7h +0029B8r 1 F8 0F 00 00 .dword 0FF8h +0029BCr 1 F9 0F 00 00 .dword 0FF9h +0029C0r 1 FA 0F 00 00 .dword 0FFAh +0029C4r 1 FB 0F 00 00 .dword 0FFBh +0029C8r 1 FC 0F 00 00 .dword 0FFCh +0029CCr 1 FD 0F 00 00 .dword 0FFDh +0029D0r 1 FE 0F 00 00 .dword 0FFEh +0029D4r 1 FF 0F 00 00 .dword 0FFFh +0029D8r 1 00 10 00 00 .dword 1000h +0029DCr 1 01 10 00 00 .dword 1001h +0029E0r 1 02 10 00 00 .dword 1002h +0029E4r 1 03 10 00 00 .dword 1003h +0029E8r 1 04 10 00 00 .dword 1004h +0029ECr 1 05 10 00 00 .dword 1005h +0029F0r 1 06 10 00 00 .dword 1006h +0029F4r 1 07 10 00 00 .dword 1007h +0029F8r 1 08 10 00 00 .dword 1008h +0029FCr 1 F0 7F 00 00 .dword 7FF0h +002A00r 1 F1 7F 00 00 .dword 7FF1h +002A04r 1 F2 7F 00 00 .dword 7FF2h +002A08r 1 F3 7F 00 00 .dword 7FF3h +002A0Cr 1 F4 7F 00 00 .dword 7FF4h +002A10r 1 F5 7F 00 00 .dword 7FF5h +002A14r 1 F6 7F 00 00 .dword 7FF6h +002A18r 1 F7 7F 00 00 .dword 7FF7h +002A1Cr 1 F8 7F 00 00 .dword 7FF8h +002A20r 1 F9 7F 00 00 .dword 7FF9h +002A24r 1 FA 7F 00 00 .dword 7FFAh +002A28r 1 FB 7F 00 00 .dword 7FFBh +002A2Cr 1 FC 7F 00 00 .dword 7FFCh +002A30r 1 FD 7F 00 00 .dword 7FFDh +002A34r 1 FE 7F 00 00 .dword 7FFEh +002A38r 1 FF 7F 00 00 .dword 7FFFh +002A3Cr 1 00 80 00 00 .dword 8000h +002A40r 1 01 80 00 00 .dword 8001h +002A44r 1 02 80 00 00 .dword 8002h +002A48r 1 03 80 00 00 .dword 8003h +002A4Cr 1 04 80 00 00 .dword 8004h +002A50r 1 05 80 00 00 .dword 8005h +002A54r 1 06 80 00 00 .dword 8006h +002A58r 1 07 80 00 00 .dword 8007h +002A5Cr 1 08 80 00 00 .dword 8008h +002A60r 1 09 80 00 00 .dword 8009h +002A64r 1 0A 80 00 00 .dword 800Ah +002A68r 1 0B 80 00 00 .dword 800Bh +002A6Cr 1 E1 9F 00 00 .dword 9FE1h +002A70r 1 E2 9F 00 00 .dword 9FE2h +002A74r 1 E3 9F 00 00 .dword 9FE3h +002A78r 1 E4 9F 00 00 .dword 9FE4h +002A7Cr 1 E5 9F 00 00 .dword 9FE5h +002A80r 1 E6 9F 00 00 .dword 9FE6h +002A84r 1 E7 9F 00 00 .dword 9FE7h +002A88r 1 E8 9F 00 00 .dword 9FE8h +002A8Cr 1 E9 9F 00 00 .dword 9FE9h +002A90r 1 EA 9F 00 00 .dword 9FEAh +002A94r 1 EB 9F 00 00 .dword 9FEBh +002A98r 1 EC 9F 00 00 .dword 9FECh +002A9Cr 1 ED 9F 00 00 .dword 9FEDh +002AA0r 1 EE 9F 00 00 .dword 9FEEh +002AA4r 1 EF 9F 00 00 .dword 9FEFh +002AA8r 1 F0 9F 00 00 .dword 9FF0h +002AACr 1 F1 9F 00 00 .dword 9FF1h +002AB0r 1 F2 9F 00 00 .dword 9FF2h +002AB4r 1 F3 9F 00 00 .dword 9FF3h +002AB8r 1 F4 9F 00 00 .dword 9FF4h +002ABCr 1 F5 9F 00 00 .dword 9FF5h +002AC0r 1 F6 9F 00 00 .dword 9FF6h +002AC4r 1 F7 9F 00 00 .dword 9FF7h +002AC8r 1 F8 9F 00 00 .dword 9FF8h +002ACCr 1 F9 9F 00 00 .dword 9FF9h +002AD0r 1 FA 9F 00 00 .dword 9FFAh +002AD4r 1 FB 9F 00 00 .dword 9FFBh +002AD8r 1 FC 9F 00 00 .dword 9FFCh +002ADCr 1 FD 9F 00 00 .dword 9FFDh +002AE0r 1 FE 9F 00 00 .dword 9FFEh +002AE4r 1 FF 9F 00 00 .dword 9FFFh +002AE8r 1 00 A0 00 00 .dword 0A000h +002AECr 1 01 A0 00 00 .dword 0A001h +002AF0r 1 02 A0 00 00 .dword 0A002h +002AF4r 1 03 A0 00 00 .dword 0A003h +002AF8r 1 04 A0 00 00 .dword 0A004h +002AFCr 1 05 A0 00 00 .dword 0A005h +002B00r 1 06 A0 00 00 .dword 0A006h +002B04r 1 07 A0 00 00 .dword 0A007h +002B08r 1 08 A0 00 00 .dword 0A008h +002B0Cr 1 09 A0 00 00 .dword 0A009h +002B10r 1 0A A0 00 00 .dword 0A00Ah +002B14r 1 0B A0 00 00 .dword 0A00Bh +002B18r 1 0C A0 00 00 .dword 0A00Ch +002B1Cr 1 0D A0 00 00 .dword 0A00Dh +002B20r 1 0E A0 00 00 .dword 0A00Eh +002B24r 1 0F A0 00 00 .dword 0A00Fh +002B28r 1 E1 AF 00 00 .dword 0AFE1h +002B2Cr 1 E2 AF 00 00 .dword 0AFE2h +002B30r 1 E3 AF 00 00 .dword 0AFE3h +002B34r 1 E4 AF 00 00 .dword 0AFE4h +002B38r 1 E5 AF 00 00 .dword 0AFE5h +002B3Cr 1 E6 AF 00 00 .dword 0AFE6h +002B40r 1 E7 AF 00 00 .dword 0AFE7h +002B44r 1 E8 AF 00 00 .dword 0AFE8h +002B48r 1 E9 AF 00 00 .dword 0AFE9h +002B4Cr 1 EA AF 00 00 .dword 0AFEAh +002B50r 1 EB AF 00 00 .dword 0AFEBh +002B54r 1 EC AF 00 00 .dword 0AFECh +002B58r 1 ED AF 00 00 .dword 0AFEDh +002B5Cr 1 EE AF 00 00 .dword 0AFEEh +002B60r 1 EF AF 00 00 .dword 0AFEFh +002B64r 1 F0 AF 00 00 .dword 0AFF0h +002B68r 1 F1 AF 00 00 .dword 0AFF1h +002B6Cr 1 F2 AF 00 00 .dword 0AFF2h +002B70r 1 F3 AF 00 00 .dword 0AFF3h +002B74r 1 F4 AF 00 00 .dword 0AFF4h +002B78r 1 F5 AF 00 00 .dword 0AFF5h +002B7Cr 1 F6 AF 00 00 .dword 0AFF6h +002B80r 1 F7 AF 00 00 .dword 0AFF7h +002B84r 1 F8 AF 00 00 .dword 0AFF8h +002B88r 1 F9 AF 00 00 .dword 0AFF9h +002B8Cr 1 FA AF 00 00 .dword 0AFFAh +002B90r 1 FB AF 00 00 .dword 0AFFBh +002B94r 1 FC AF 00 00 .dword 0AFFCh +002B98r 1 FD AF 00 00 .dword 0AFFDh +002B9Cr 1 FE AF 00 00 .dword 0AFFEh +002BA0r 1 FF AF 00 00 .dword 0AFFFh +002BA4r 1 00 B0 00 00 .dword 0B000h +002BA8r 1 01 B0 00 00 .dword 0B001h +002BACr 1 02 B0 00 00 .dword 0B002h +002BB0r 1 03 B0 00 00 .dword 0B003h +002BB4r 1 04 B0 00 00 .dword 0B004h +002BB8r 1 05 B0 00 00 .dword 0B005h +002BBCr 1 06 B0 00 00 .dword 0B006h +002BC0r 1 07 B0 00 00 .dword 0B007h +002BC4r 1 08 B0 00 00 .dword 0B008h +002BC8r 1 09 B0 00 00 .dword 0B009h +002BCCr 1 0A B0 00 00 .dword 0B00Ah +002BD0r 1 0B B0 00 00 .dword 0B00Bh +002BD4r 1 0C B0 00 00 .dword 0B00Ch +002BD8r 1 0D B0 00 00 .dword 0B00Dh +002BDCr 1 0E B0 00 00 .dword 0B00Eh +002BE0r 1 0F B0 00 00 .dword 0B00Fh +002BE4r 1 E1 FF 00 00 .dword 0FFE1h +002BE8r 1 E2 FF 00 00 .dword 0FFE2h +002BECr 1 E3 FF 00 00 .dword 0FFE3h +002BF0r 1 E4 FF 00 00 .dword 0FFE4h +002BF4r 1 E5 FF 00 00 .dword 0FFE5h +002BF8r 1 E6 FF 00 00 .dword 0FFE6h +002BFCr 1 E7 FF 00 00 .dword 0FFE7h +002C00r 1 E8 FF 00 00 .dword 0FFE8h +002C04r 1 E9 FF 00 00 .dword 0FFE9h +002C08r 1 EA FF 00 00 .dword 0FFEAh +002C0Cr 1 EB FF 00 00 .dword 0FFEBh +002C10r 1 EC FF 00 00 .dword 0FFECh +002C14r 1 ED FF 00 00 .dword 0FFEDh +002C18r 1 EE FF 00 00 .dword 0FFEEh +002C1Cr 1 EF FF 00 00 .dword 0FFEFh +002C20r 1 F0 FF 00 00 .dword 0FFF0h +002C24r 1 F1 FF 00 00 .dword 0FFF1h +002C28r 1 F2 FF 00 00 .dword 0FFF2h +002C2Cr 1 F3 FF 00 00 .dword 0FFF3h +002C30r 1 F4 FF 00 00 .dword 0FFF4h +002C34r 1 F5 FF 00 00 .dword 0FFF5h +002C38r 1 F6 FF 00 00 .dword 0FFF6h +002C3Cr 1 F7 FF 00 00 .dword 0FFF7h +002C40r 1 F8 FF 00 00 .dword 0FFF8h +002C44r 1 F9 FF 00 00 .dword 0FFF9h +002C48r 1 FA FF 00 00 .dword 0FFFAh +002C4Cr 1 FB FF 00 00 .dword 0FFFBh +002C50r 1 FC FF 00 00 .dword 0FFFCh +002C54r 1 FD FF 00 00 .dword 0FFFDh +002C58r 1 FE FF 00 00 .dword 0FFFEh +002C5Cr 1 FF FF 00 00 .dword 0FFFFh +002C60r 1 00 00 01 00 .dword 10000h +002C64r 1 01 00 01 00 .dword 10001h +002C68r 1 02 00 01 00 .dword 10002h +002C6Cr 1 03 00 01 00 .dword 10003h +002C70r 1 04 00 01 00 .dword 10004h +002C74r 1 05 00 01 00 .dword 10005h +002C78r 1 06 00 01 00 .dword 10006h +002C7Cr 1 07 00 01 00 .dword 10007h +002C80r 1 08 00 01 00 .dword 10008h +002C84r 1 09 00 01 00 .dword 10009h +002C88r 1 0A 00 01 00 .dword 1000Ah +002C8Cr 1 0B 00 01 00 .dword 1000Bh +002C90r 1 0C 00 01 00 .dword 1000Ch +002C94r 1 0D 00 01 00 .dword 1000Dh +002C98r 1 0E 00 01 00 .dword 1000Eh +002C9Cr 1 0F 00 01 00 .dword 1000Fh +002CA0r 1 F0 FF FF 7F .dword 7FFFFFF0h +002CA4r 1 F1 FF FF 7F .dword 7FFFFFF1h +002CA8r 1 F2 FF FF 7F .dword 7FFFFFF2h +002CACr 1 F3 FF FF 7F .dword 7FFFFFF3h +002CB0r 1 F4 FF FF 7F .dword 7FFFFFF4h +002CB4r 1 F5 FF FF 7F .dword 7FFFFFF5h +002CB8r 1 F6 FF FF 7F .dword 7FFFFFF6h +002CBCr 1 F7 FF FF 7F .dword 7FFFFFF7h +002CC0r 1 F8 FF FF 7F .dword 7FFFFFF8h +002CC4r 1 F9 FF FF 7F .dword 7FFFFFF9h +002CC8r 1 FA FF FF 7F .dword 7FFFFFFAh +002CCCr 1 FB FF FF 7F .dword 7FFFFFFBh +002CD0r 1 FC FF FF 7F .dword 7FFFFFFCh +002CD4r 1 FD FF FF 7F .dword 7FFFFFFDh +002CD8r 1 FE FF FF 7F .dword 7FFFFFFEh +002CDCr 1 FF FF FF 7F .dword 7FFFFFFFh +002CE0r 1 00 00 00 80 .dword 80000000h +002CE4r 1 01 00 00 80 .dword 80000001h +002CE8r 1 02 00 00 80 .dword 80000002h +002CECr 1 03 00 00 80 .dword 80000003h +002CF0r 1 04 00 00 80 .dword 80000004h +002CF4r 1 05 00 00 80 .dword 80000005h +002CF8r 1 06 00 00 80 .dword 80000006h +002CFCr 1 07 00 00 80 .dword 80000007h +002D00r 1 08 00 00 80 .dword 80000008h +002D04r 1 09 00 00 80 .dword 80000009h +002D08r 1 0A 00 00 80 .dword 8000000Ah +002D0Cr 1 0B 00 00 80 .dword 8000000Bh +002D10r 1 0C 00 00 80 .dword 8000000Ch +002D14r 1 0D 00 00 80 .dword 8000000Dh +002D18r 1 0E 00 00 80 .dword 8000000Eh +002D1Cr 1 0F 00 00 80 .dword 8000000Fh +002D20r 1 F0 FF FF 9F .dword 9FFFFFF0h +002D24r 1 F1 FF FF 9F .dword 9FFFFFF1h +002D28r 1 F2 FF FF 9F .dword 9FFFFFF2h +002D2Cr 1 F3 FF FF 9F .dword 9FFFFFF3h +002D30r 1 F4 FF FF 9F .dword 9FFFFFF4h +002D34r 1 F5 FF FF 9F .dword 9FFFFFF5h +002D38r 1 F6 FF FF 9F .dword 9FFFFFF6h +002D3Cr 1 F7 FF FF 9F .dword 9FFFFFF7h +002D40r 1 F8 FF FF 9F .dword 9FFFFFF8h +002D44r 1 F9 FF FF 9F .dword 9FFFFFF9h +002D48r 1 FA FF FF 9F .dword 9FFFFFFAh +002D4Cr 1 FB FF FF 9F .dword 9FFFFFFBh +002D50r 1 FC FF FF 9F .dword 9FFFFFFCh +002D54r 1 FD FF FF 9F .dword 9FFFFFFDh +002D58r 1 FE FF FF 9F .dword 9FFFFFFEh +002D5Cr 1 FF FF FF 9F .dword 9FFFFFFFh +002D60r 1 00 00 00 A0 .dword 0A0000000h +002D64r 1 01 00 00 A0 .dword 0A0000001h +002D68r 1 02 00 00 A0 .dword 0A0000002h +002D6Cr 1 03 00 00 A0 .dword 0A0000003h +002D70r 1 04 00 00 A0 .dword 0A0000004h +002D74r 1 05 00 00 A0 .dword 0A0000005h +002D78r 1 06 00 00 A0 .dword 0A0000006h +002D7Cr 1 07 00 00 A0 .dword 0A0000007h +002D80r 1 08 00 00 A0 .dword 0A0000008h +002D84r 1 09 00 00 A0 .dword 0A0000009h +002D88r 1 0A 00 00 A0 .dword 0A000000Ah +002D8Cr 1 0B 00 00 A0 .dword 0A000000Bh +002D90r 1 0C 00 00 A0 .dword 0A000000Ch +002D94r 1 0D 00 00 A0 .dword 0A000000Dh +002D98r 1 0E 00 00 A0 .dword 0A000000Eh +002D9Cr 1 0F 00 00 A0 .dword 0A000000Fh +002DA0r 1 F0 FF FF FF .dword 0FFFFFFF0h +002DA4r 1 F1 FF FF FF .dword 0FFFFFFF1h +002DA8r 1 F2 FF FF FF .dword 0FFFFFFF2h +002DACr 1 F3 FF FF FF .dword 0FFFFFFF3h +002DB0r 1 F4 FF FF FF .dword 0FFFFFFF4h +002DB4r 1 F5 FF FF FF .dword 0FFFFFFF5h +002DB8r 1 F6 FF FF FF .dword 0FFFFFFF6h +002DBCr 1 F7 FF FF FF .dword 0FFFFFFF7h +002DC0r 1 F8 FF FF FF .dword 0FFFFFFF8h +002DC4r 1 F9 FF FF FF .dword 0FFFFFFF9h +002DC8r 1 FA FF FF FF .dword 0FFFFFFFAh +002DCCr 1 FB FF FF FF .dword 0FFFFFFFBh +002DD0r 1 FC FF FF FF .dword 0FFFFFFFCh +002DD4r 1 FD FF FF FF .dword 0FFFFFFFDh +002DD8r 1 FE FF FF FF .dword 0FFFFFFFEh +002DDCr 1 FF FF FF FF .dword 0FFFFFFFFh 002DE0r 1 -002DE0r 1 ; alternative 8-digit hex values -002DE0r 1 00 00 00 00 .dword 00000000h -002DE4r 1 01 00 00 00 .dword 00000001h -002DE8r 1 02 00 00 00 .dword 00000002h -002DECr 1 03 00 00 00 .dword 00000003h -002DF0r 1 04 00 00 00 .dword 00000004h -002DF4r 1 05 00 00 00 .dword 00000005h -002DF8r 1 06 00 00 00 .dword 00000006h -002DFCr 1 07 00 00 00 .dword 00000007h -002E00r 1 08 00 00 00 .dword 00000008h -002E04r 1 09 00 00 00 .dword 00000009h -002E08r 1 0A 00 00 00 .dword 0000000ah -002E0Cr 1 0B 00 00 00 .dword 0000000bh -002E10r 1 0C 00 00 00 .dword 0000000ch -002E14r 1 0D 00 00 00 .dword 0000000dh -002E18r 1 0E 00 00 00 .dword 0000000eh -002E1Cr 1 0F 00 00 00 .dword 0000000fh -002E20r 1 10 00 00 00 .dword 00000010h -002E24r 1 11 00 00 00 .dword 00000011h -002E28r 1 12 00 00 00 .dword 00000012h -002E2Cr 1 13 00 00 00 .dword 00000013h -002E30r 1 70 00 00 00 .dword 00000070h -002E34r 1 71 00 00 00 .dword 00000071h -002E38r 1 72 00 00 00 .dword 00000072h -002E3Cr 1 73 00 00 00 .dword 00000073h -002E40r 1 74 00 00 00 .dword 00000074h -002E44r 1 75 00 00 00 .dword 00000075h -002E48r 1 76 00 00 00 .dword 00000076h -002E4Cr 1 77 00 00 00 .dword 00000077h -002E50r 1 78 00 00 00 .dword 00000078h -002E54r 1 79 00 00 00 .dword 00000079h -002E58r 1 7A 00 00 00 .dword 0000007ah -002E5Cr 1 7B 00 00 00 .dword 0000007bh -002E60r 1 7C 00 00 00 .dword 0000007ch -002E64r 1 7D 00 00 00 .dword 0000007dh -002E68r 1 7E 00 00 00 .dword 0000007eh -002E6Cr 1 7F 00 00 00 .dword 0000007fh -002E70r 1 80 00 00 00 .dword 00000080h -002E74r 1 81 00 00 00 .dword 00000081h -002E78r 1 82 00 00 00 .dword 00000082h -002E7Cr 1 83 00 00 00 .dword 00000083h -002E80r 1 84 00 00 00 .dword 00000084h -002E84r 1 85 00 00 00 .dword 00000085h -002E88r 1 86 00 00 00 .dword 00000086h -002E8Cr 1 F0 00 00 00 .dword 000000f0h -002E90r 1 F1 00 00 00 .dword 000000f1h -002E94r 1 F2 00 00 00 .dword 000000f2h -002E98r 1 F3 00 00 00 .dword 000000f3h -002E9Cr 1 F4 00 00 00 .dword 000000f4h -002EA0r 1 F5 00 00 00 .dword 000000f5h -002EA4r 1 F6 00 00 00 .dword 000000f6h -002EA8r 1 F7 00 00 00 .dword 000000f7h -002EACr 1 F8 00 00 00 .dword 000000f8h -002EB0r 1 F9 00 00 00 .dword 000000f9h -002EB4r 1 FA 00 00 00 .dword 000000fah -002EB8r 1 FB 00 00 00 .dword 000000fbh -002EBCr 1 FC 00 00 00 .dword 000000fch -002EC0r 1 FD 00 00 00 .dword 000000fdh -002EC4r 1 FE 00 00 00 .dword 000000feh -002EC8r 1 FF 00 00 00 .dword 000000ffh -002ECCr 1 00 01 00 00 .dword 00000100h -002ED0r 1 01 01 00 00 .dword 00000101h -002ED4r 1 02 01 00 00 .dword 00000102h -002ED8r 1 03 01 00 00 .dword 00000103h -002EDCr 1 D2 0F 00 00 .dword 00000fd2h -002EE0r 1 D3 0F 00 00 .dword 00000fd3h -002EE4r 1 D4 0F 00 00 .dword 00000fd4h -002EE8r 1 D5 0F 00 00 .dword 00000fd5h -002EECr 1 D6 0F 00 00 .dword 00000fd6h -002EF0r 1 D7 0F 00 00 .dword 00000fd7h -002EF4r 1 D8 0F 00 00 .dword 00000fd8h -002EF8r 1 D9 0F 00 00 .dword 00000fd9h -002EFCr 1 DA 0F 00 00 .dword 00000fdah -002F00r 1 DB 0F 00 00 .dword 00000fdbh -002F04r 1 DC 0F 00 00 .dword 00000fdch -002F08r 1 DD 0F 00 00 .dword 00000fddh -002F0Cr 1 DE 0F 00 00 .dword 00000fdeh -002F10r 1 DF 0F 00 00 .dword 00000fdfh -002F14r 1 E0 0F 00 00 .dword 00000fe0h -002F18r 1 E1 0F 00 00 .dword 00000fe1h -002F1Cr 1 E2 0F 00 00 .dword 00000fe2h -002F20r 1 E3 0F 00 00 .dword 00000fe3h -002F24r 1 E4 0F 00 00 .dword 00000fe4h -002F28r 1 E5 0F 00 00 .dword 00000fe5h -002F2Cr 1 E6 0F 00 00 .dword 00000fe6h -002F30r 1 E7 0F 00 00 .dword 00000fe7h -002F34r 1 E8 0F 00 00 .dword 00000fe8h -002F38r 1 E9 0F 00 00 .dword 00000fe9h -002F3Cr 1 EA 0F 00 00 .dword 00000feah -002F40r 1 EB 0F 00 00 .dword 00000febh -002F44r 1 EC 0F 00 00 .dword 00000fech -002F48r 1 ED 0F 00 00 .dword 00000fedh -002F4Cr 1 EE 0F 00 00 .dword 00000feeh -002F50r 1 EF 0F 00 00 .dword 00000fefh -002F54r 1 F0 0F 00 00 .dword 00000ff0h -002F58r 1 F1 0F 00 00 .dword 00000ff1h -002F5Cr 1 F2 0F 00 00 .dword 00000ff2h -002F60r 1 F3 0F 00 00 .dword 00000ff3h -002F64r 1 F4 0F 00 00 .dword 00000ff4h -002F68r 1 F5 0F 00 00 .dword 00000ff5h -002F6Cr 1 F6 0F 00 00 .dword 00000ff6h -002F70r 1 F7 0F 00 00 .dword 00000ff7h -002F74r 1 F8 0F 00 00 .dword 00000ff8h -002F78r 1 F9 0F 00 00 .dword 00000ff9h -002F7Cr 1 FA 0F 00 00 .dword 00000ffah -002F80r 1 FB 0F 00 00 .dword 00000ffbh -002F84r 1 FC 0F 00 00 .dword 00000ffch -002F88r 1 FD 0F 00 00 .dword 00000ffdh -002F8Cr 1 FE 0F 00 00 .dword 00000ffeh -002F90r 1 FF 0F 00 00 .dword 00000fffh -002F94r 1 00 10 00 00 .dword 00001000h -002F98r 1 01 10 00 00 .dword 00001001h -002F9Cr 1 02 10 00 00 .dword 00001002h -002FA0r 1 03 10 00 00 .dword 00001003h -002FA4r 1 04 10 00 00 .dword 00001004h -002FA8r 1 05 10 00 00 .dword 00001005h -002FACr 1 06 10 00 00 .dword 00001006h -002FB0r 1 07 10 00 00 .dword 00001007h -002FB4r 1 08 10 00 00 .dword 00001008h -002FB8r 1 F0 7F 00 00 .dword 00007ff0h -002FBCr 1 F1 7F 00 00 .dword 00007ff1h -002FC0r 1 F2 7F 00 00 .dword 00007ff2h -002FC4r 1 F3 7F 00 00 .dword 00007ff3h -002FC8r 1 F4 7F 00 00 .dword 00007ff4h -002FCCr 1 F5 7F 00 00 .dword 00007ff5h -002FD0r 1 F6 7F 00 00 .dword 00007ff6h -002FD4r 1 F7 7F 00 00 .dword 00007ff7h -002FD8r 1 F8 7F 00 00 .dword 00007ff8h -002FDCr 1 F9 7F 00 00 .dword 00007ff9h -002FE0r 1 FA 7F 00 00 .dword 00007ffah -002FE4r 1 FB 7F 00 00 .dword 00007ffbh -002FE8r 1 FC 7F 00 00 .dword 00007ffch -002FECr 1 FD 7F 00 00 .dword 00007ffdh -002FF0r 1 FE 7F 00 00 .dword 00007ffeh -002FF4r 1 FF 7F 00 00 .dword 00007fffh -002FF8r 1 00 80 00 00 .dword 00008000h -002FFCr 1 01 80 00 00 .dword 00008001h -003000r 1 02 80 00 00 .dword 00008002h -003004r 1 03 80 00 00 .dword 00008003h -003008r 1 04 80 00 00 .dword 00008004h -00300Cr 1 05 80 00 00 .dword 00008005h -003010r 1 06 80 00 00 .dword 00008006h -003014r 1 07 80 00 00 .dword 00008007h -003018r 1 08 80 00 00 .dword 00008008h -00301Cr 1 09 80 00 00 .dword 00008009h -003020r 1 0A 80 00 00 .dword 0000800ah -003024r 1 0B 80 00 00 .dword 0000800bh -003028r 1 E1 9F 00 00 .dword 00009fe1h -00302Cr 1 E2 9F 00 00 .dword 00009fe2h -003030r 1 E3 9F 00 00 .dword 00009fe3h -003034r 1 E4 9F 00 00 .dword 00009fe4h -003038r 1 E5 9F 00 00 .dword 00009fe5h -00303Cr 1 E6 9F 00 00 .dword 00009fe6h -003040r 1 E7 9F 00 00 .dword 00009fe7h -003044r 1 E8 9F 00 00 .dword 00009fe8h -003048r 1 E9 9F 00 00 .dword 00009fe9h -00304Cr 1 EA 9F 00 00 .dword 00009feah -003050r 1 EB 9F 00 00 .dword 00009febh -003054r 1 EC 9F 00 00 .dword 00009fech -003058r 1 ED 9F 00 00 .dword 00009fedh -00305Cr 1 EE 9F 00 00 .dword 00009feeh -003060r 1 EF 9F 00 00 .dword 00009fefh -003064r 1 F0 9F 00 00 .dword 00009ff0h -003068r 1 F1 9F 00 00 .dword 00009ff1h -00306Cr 1 F2 9F 00 00 .dword 00009ff2h -003070r 1 F3 9F 00 00 .dword 00009ff3h -003074r 1 F4 9F 00 00 .dword 00009ff4h -003078r 1 F5 9F 00 00 .dword 00009ff5h -00307Cr 1 F6 9F 00 00 .dword 00009ff6h -003080r 1 F7 9F 00 00 .dword 00009ff7h -003084r 1 F8 9F 00 00 .dword 00009ff8h -003088r 1 F9 9F 00 00 .dword 00009ff9h -00308Cr 1 FA 9F 00 00 .dword 00009ffah -003090r 1 FB 9F 00 00 .dword 00009ffbh -003094r 1 FC 9F 00 00 .dword 00009ffch -003098r 1 FD 9F 00 00 .dword 00009ffdh -00309Cr 1 FE 9F 00 00 .dword 00009ffeh -0030A0r 1 FF 9F 00 00 .dword 00009fffh -0030A4r 1 00 A0 00 00 .dword 0000a000h -0030A8r 1 01 A0 00 00 .dword 0000a001h -0030ACr 1 02 A0 00 00 .dword 0000a002h -0030B0r 1 03 A0 00 00 .dword 0000a003h -0030B4r 1 04 A0 00 00 .dword 0000a004h -0030B8r 1 05 A0 00 00 .dword 0000a005h -0030BCr 1 06 A0 00 00 .dword 0000a006h -0030C0r 1 07 A0 00 00 .dword 0000a007h -0030C4r 1 08 A0 00 00 .dword 0000a008h -0030C8r 1 09 A0 00 00 .dword 0000a009h -0030CCr 1 0A A0 00 00 .dword 0000a00ah -0030D0r 1 0B A0 00 00 .dword 0000a00bh -0030D4r 1 0C A0 00 00 .dword 0000a00ch -0030D8r 1 0D A0 00 00 .dword 0000a00dh -0030DCr 1 0E A0 00 00 .dword 0000a00eh -0030E0r 1 0F A0 00 00 .dword 0000a00fh -0030E4r 1 E1 AF 00 00 .dword 0000afe1h -0030E8r 1 E2 AF 00 00 .dword 0000afe2h -0030ECr 1 E3 AF 00 00 .dword 0000afe3h -0030F0r 1 E4 AF 00 00 .dword 0000afe4h -0030F4r 1 E5 AF 00 00 .dword 0000afe5h -0030F8r 1 E6 AF 00 00 .dword 0000afe6h -0030FCr 1 E7 AF 00 00 .dword 0000afe7h -003100r 1 E8 AF 00 00 .dword 0000afe8h -003104r 1 E9 AF 00 00 .dword 0000afe9h -003108r 1 EA AF 00 00 .dword 0000afeah -00310Cr 1 EB AF 00 00 .dword 0000afebh -003110r 1 EC AF 00 00 .dword 0000afech -003114r 1 ED AF 00 00 .dword 0000afedh -003118r 1 EE AF 00 00 .dword 0000afeeh -00311Cr 1 EF AF 00 00 .dword 0000afefh -003120r 1 F0 AF 00 00 .dword 0000aff0h -003124r 1 F1 AF 00 00 .dword 0000aff1h -003128r 1 F2 AF 00 00 .dword 0000aff2h -00312Cr 1 F3 AF 00 00 .dword 0000aff3h -003130r 1 F4 AF 00 00 .dword 0000aff4h -003134r 1 F5 AF 00 00 .dword 0000aff5h -003138r 1 F6 AF 00 00 .dword 0000aff6h -00313Cr 1 F7 AF 00 00 .dword 0000aff7h -003140r 1 F8 AF 00 00 .dword 0000aff8h -003144r 1 F9 AF 00 00 .dword 0000aff9h -003148r 1 FA AF 00 00 .dword 0000affah -00314Cr 1 FB AF 00 00 .dword 0000affbh -003150r 1 FC AF 00 00 .dword 0000affch -003154r 1 FD AF 00 00 .dword 0000affdh -003158r 1 FE AF 00 00 .dword 0000affeh -00315Cr 1 FF AF 00 00 .dword 0000afffh -003160r 1 00 B0 00 00 .dword 0000b000h -003164r 1 01 B0 00 00 .dword 0000b001h -003168r 1 02 B0 00 00 .dword 0000b002h -00316Cr 1 03 B0 00 00 .dword 0000b003h -003170r 1 04 B0 00 00 .dword 0000b004h -003174r 1 05 B0 00 00 .dword 0000b005h -003178r 1 06 B0 00 00 .dword 0000b006h -00317Cr 1 07 B0 00 00 .dword 0000b007h -003180r 1 08 B0 00 00 .dword 0000b008h -003184r 1 09 B0 00 00 .dword 0000b009h -003188r 1 0A B0 00 00 .dword 0000b00ah -00318Cr 1 0B B0 00 00 .dword 0000b00bh -003190r 1 0C B0 00 00 .dword 0000b00ch -003194r 1 0D B0 00 00 .dword 0000b00dh -003198r 1 0E B0 00 00 .dword 0000b00eh -00319Cr 1 0F B0 00 00 .dword 0000b00fh -0031A0r 1 E1 FF 00 00 .dword 0000ffe1h -0031A4r 1 E2 FF 00 00 .dword 0000ffe2h -0031A8r 1 E3 FF 00 00 .dword 0000ffe3h -0031ACr 1 E4 FF 00 00 .dword 0000ffe4h -0031B0r 1 E5 FF 00 00 .dword 0000ffe5h -0031B4r 1 E6 FF 00 00 .dword 0000ffe6h -0031B8r 1 E7 FF 00 00 .dword 0000ffe7h -0031BCr 1 E8 FF 00 00 .dword 0000ffe8h -0031C0r 1 E9 FF 00 00 .dword 0000ffe9h -0031C4r 1 EA FF 00 00 .dword 0000ffeah -0031C8r 1 EB FF 00 00 .dword 0000ffebh -0031CCr 1 EC FF 00 00 .dword 0000ffech -0031D0r 1 ED FF 00 00 .dword 0000ffedh -0031D4r 1 EE FF 00 00 .dword 0000ffeeh -0031D8r 1 EF FF 00 00 .dword 0000ffefh -0031DCr 1 F0 FF 00 00 .dword 0000fff0h -0031E0r 1 F1 FF 00 00 .dword 0000fff1h -0031E4r 1 F2 FF 00 00 .dword 0000fff2h -0031E8r 1 F3 FF 00 00 .dword 0000fff3h -0031ECr 1 F4 FF 00 00 .dword 0000fff4h -0031F0r 1 F5 FF 00 00 .dword 0000fff5h -0031F4r 1 F6 FF 00 00 .dword 0000fff6h -0031F8r 1 F7 FF 00 00 .dword 0000fff7h -0031FCr 1 F8 FF 00 00 .dword 0000fff8h -003200r 1 F9 FF 00 00 .dword 0000fff9h -003204r 1 FA FF 00 00 .dword 0000fffah -003208r 1 FB FF 00 00 .dword 0000fffbh -00320Cr 1 FC FF 00 00 .dword 0000fffch -003210r 1 FD FF 00 00 .dword 0000fffdh -003214r 1 FE FF 00 00 .dword 0000fffeh -003218r 1 FF FF 00 00 .dword 0000ffffh -00321Cr 1 00 00 01 00 .dword 00010000h -003220r 1 01 00 01 00 .dword 00010001h -003224r 1 02 00 01 00 .dword 00010002h -003228r 1 03 00 01 00 .dword 00010003h -00322Cr 1 04 00 01 00 .dword 00010004h -003230r 1 05 00 01 00 .dword 00010005h -003234r 1 06 00 01 00 .dword 00010006h -003238r 1 07 00 01 00 .dword 00010007h -00323Cr 1 08 00 01 00 .dword 00010008h -003240r 1 09 00 01 00 .dword 00010009h -003244r 1 0A 00 01 00 .dword 0001000ah -003248r 1 0B 00 01 00 .dword 0001000bh -00324Cr 1 0C 00 01 00 .dword 0001000ch -003250r 1 0D 00 01 00 .dword 0001000dh -003254r 1 0E 00 01 00 .dword 0001000eh -003258r 1 0F 00 01 00 .dword 0001000fh -00325Cr 1 F0 FF FF 7F .dword 7ffffff0h -003260r 1 F1 FF FF 7F .dword 7ffffff1h -003264r 1 F2 FF FF 7F .dword 7ffffff2h -003268r 1 F3 FF FF 7F .dword 7ffffff3h -00326Cr 1 F4 FF FF 7F .dword 7ffffff4h -003270r 1 F5 FF FF 7F .dword 7ffffff5h -003274r 1 F6 FF FF 7F .dword 7ffffff6h -003278r 1 F7 FF FF 7F .dword 7ffffff7h -00327Cr 1 F8 FF FF 7F .dword 7ffffff8h -003280r 1 F9 FF FF 7F .dword 7ffffff9h -003284r 1 FA FF FF 7F .dword 7ffffffah -003288r 1 FB FF FF 7F .dword 7ffffffbh -00328Cr 1 FC FF FF 7F .dword 7ffffffch -003290r 1 FD FF FF 7F .dword 7ffffffdh -003294r 1 FE FF FF 7F .dword 7ffffffeh -003298r 1 FF FF FF 7F .dword 7fffffffh -00329Cr 1 00 00 00 80 .dword 80000000h -0032A0r 1 01 00 00 80 .dword 80000001h -0032A4r 1 02 00 00 80 .dword 80000002h -0032A8r 1 03 00 00 80 .dword 80000003h -0032ACr 1 04 00 00 80 .dword 80000004h -0032B0r 1 05 00 00 80 .dword 80000005h -0032B4r 1 06 00 00 80 .dword 80000006h -0032B8r 1 07 00 00 80 .dword 80000007h -0032BCr 1 08 00 00 80 .dword 80000008h -0032C0r 1 09 00 00 80 .dword 80000009h -0032C4r 1 0A 00 00 80 .dword 8000000ah -0032C8r 1 0B 00 00 80 .dword 8000000bh -0032CCr 1 0C 00 00 80 .dword 8000000ch -0032D0r 1 0D 00 00 80 .dword 8000000dh -0032D4r 1 0E 00 00 80 .dword 8000000eh -0032D8r 1 0F 00 00 80 .dword 8000000fh -0032DCr 1 F0 FF FF 9F .dword 9ffffff0h -0032E0r 1 F1 FF FF 9F .dword 9ffffff1h -0032E4r 1 F2 FF FF 9F .dword 9ffffff2h -0032E8r 1 F3 FF FF 9F .dword 9ffffff3h -0032ECr 1 F4 FF FF 9F .dword 9ffffff4h -0032F0r 1 F5 FF FF 9F .dword 9ffffff5h -0032F4r 1 F6 FF FF 9F .dword 9ffffff6h -0032F8r 1 F7 FF FF 9F .dword 9ffffff7h -0032FCr 1 F8 FF FF 9F .dword 9ffffff8h -003300r 1 F9 FF FF 9F .dword 9ffffff9h -003304r 1 FA FF FF 9F .dword 9ffffffah -003308r 1 FB FF FF 9F .dword 9ffffffbh -00330Cr 1 FC FF FF 9F .dword 9ffffffch -003310r 1 FD FF FF 9F .dword 9ffffffdh -003314r 1 FE FF FF 9F .dword 9ffffffeh -003318r 1 FF FF FF 9F .dword 9fffffffh -00331Cr 1 00 00 00 A0 .dword 0a0000000h -003320r 1 01 00 00 A0 .dword 0a0000001h -003324r 1 02 00 00 A0 .dword 0a0000002h -003328r 1 03 00 00 A0 .dword 0a0000003h -00332Cr 1 04 00 00 A0 .dword 0a0000004h -003330r 1 05 00 00 A0 .dword 0a0000005h -003334r 1 06 00 00 A0 .dword 0a0000006h -003338r 1 07 00 00 A0 .dword 0a0000007h -00333Cr 1 08 00 00 A0 .dword 0a0000008h -003340r 1 09 00 00 A0 .dword 0a0000009h -003344r 1 0A 00 00 A0 .dword 0a000000ah -003348r 1 0B 00 00 A0 .dword 0a000000bh -00334Cr 1 0C 00 00 A0 .dword 0a000000ch -003350r 1 0D 00 00 A0 .dword 0a000000dh -003354r 1 0E 00 00 A0 .dword 0a000000eh -003358r 1 0F 00 00 A0 .dword 0a000000fh -00335Cr 1 F0 FF FF FF .dword 0fffffff0h -003360r 1 F1 FF FF FF .dword 0fffffff1h -003364r 1 F2 FF FF FF .dword 0fffffff2h -003368r 1 F3 FF FF FF .dword 0fffffff3h -00336Cr 1 F4 FF FF FF .dword 0fffffff4h -003370r 1 F5 FF FF FF .dword 0fffffff5h -003374r 1 F6 FF FF FF .dword 0fffffff6h -003378r 1 F7 FF FF FF .dword 0fffffff7h -00337Cr 1 F8 FF FF FF .dword 0fffffff8h -003380r 1 F9 FF FF FF .dword 0fffffff9h -003384r 1 FA FF FF FF .dword 0fffffffah -003388r 1 FB FF FF FF .dword 0fffffffbh -00338Cr 1 FC FF FF FF .dword 0fffffffch -003390r 1 FD FF FF FF .dword 0fffffffdh -003394r 1 FE FF FF FF .dword 0fffffffeh -003398r 1 FF FF FF FF .dword 0ffffffffh +002DE0r 1 ; alternative 8-digit hex values +002DE0r 1 00 00 00 00 .dword 00000000h +002DE4r 1 01 00 00 00 .dword 00000001h +002DE8r 1 02 00 00 00 .dword 00000002h +002DECr 1 03 00 00 00 .dword 00000003h +002DF0r 1 04 00 00 00 .dword 00000004h +002DF4r 1 05 00 00 00 .dword 00000005h +002DF8r 1 06 00 00 00 .dword 00000006h +002DFCr 1 07 00 00 00 .dword 00000007h +002E00r 1 08 00 00 00 .dword 00000008h +002E04r 1 09 00 00 00 .dword 00000009h +002E08r 1 0A 00 00 00 .dword 0000000ah +002E0Cr 1 0B 00 00 00 .dword 0000000bh +002E10r 1 0C 00 00 00 .dword 0000000ch +002E14r 1 0D 00 00 00 .dword 0000000dh +002E18r 1 0E 00 00 00 .dword 0000000eh +002E1Cr 1 0F 00 00 00 .dword 0000000fh +002E20r 1 10 00 00 00 .dword 00000010h +002E24r 1 11 00 00 00 .dword 00000011h +002E28r 1 12 00 00 00 .dword 00000012h +002E2Cr 1 13 00 00 00 .dword 00000013h +002E30r 1 70 00 00 00 .dword 00000070h +002E34r 1 71 00 00 00 .dword 00000071h +002E38r 1 72 00 00 00 .dword 00000072h +002E3Cr 1 73 00 00 00 .dword 00000073h +002E40r 1 74 00 00 00 .dword 00000074h +002E44r 1 75 00 00 00 .dword 00000075h +002E48r 1 76 00 00 00 .dword 00000076h +002E4Cr 1 77 00 00 00 .dword 00000077h +002E50r 1 78 00 00 00 .dword 00000078h +002E54r 1 79 00 00 00 .dword 00000079h +002E58r 1 7A 00 00 00 .dword 0000007ah +002E5Cr 1 7B 00 00 00 .dword 0000007bh +002E60r 1 7C 00 00 00 .dword 0000007ch +002E64r 1 7D 00 00 00 .dword 0000007dh +002E68r 1 7E 00 00 00 .dword 0000007eh +002E6Cr 1 7F 00 00 00 .dword 0000007fh +002E70r 1 80 00 00 00 .dword 00000080h +002E74r 1 81 00 00 00 .dword 00000081h +002E78r 1 82 00 00 00 .dword 00000082h +002E7Cr 1 83 00 00 00 .dword 00000083h +002E80r 1 84 00 00 00 .dword 00000084h +002E84r 1 85 00 00 00 .dword 00000085h +002E88r 1 86 00 00 00 .dword 00000086h +002E8Cr 1 F0 00 00 00 .dword 000000f0h +002E90r 1 F1 00 00 00 .dword 000000f1h +002E94r 1 F2 00 00 00 .dword 000000f2h +002E98r 1 F3 00 00 00 .dword 000000f3h +002E9Cr 1 F4 00 00 00 .dword 000000f4h +002EA0r 1 F5 00 00 00 .dword 000000f5h +002EA4r 1 F6 00 00 00 .dword 000000f6h +002EA8r 1 F7 00 00 00 .dword 000000f7h +002EACr 1 F8 00 00 00 .dword 000000f8h +002EB0r 1 F9 00 00 00 .dword 000000f9h +002EB4r 1 FA 00 00 00 .dword 000000fah +002EB8r 1 FB 00 00 00 .dword 000000fbh +002EBCr 1 FC 00 00 00 .dword 000000fch +002EC0r 1 FD 00 00 00 .dword 000000fdh +002EC4r 1 FE 00 00 00 .dword 000000feh +002EC8r 1 FF 00 00 00 .dword 000000ffh +002ECCr 1 00 01 00 00 .dword 00000100h +002ED0r 1 01 01 00 00 .dword 00000101h +002ED4r 1 02 01 00 00 .dword 00000102h +002ED8r 1 03 01 00 00 .dword 00000103h +002EDCr 1 D2 0F 00 00 .dword 00000fd2h +002EE0r 1 D3 0F 00 00 .dword 00000fd3h +002EE4r 1 D4 0F 00 00 .dword 00000fd4h +002EE8r 1 D5 0F 00 00 .dword 00000fd5h +002EECr 1 D6 0F 00 00 .dword 00000fd6h +002EF0r 1 D7 0F 00 00 .dword 00000fd7h +002EF4r 1 D8 0F 00 00 .dword 00000fd8h +002EF8r 1 D9 0F 00 00 .dword 00000fd9h +002EFCr 1 DA 0F 00 00 .dword 00000fdah +002F00r 1 DB 0F 00 00 .dword 00000fdbh +002F04r 1 DC 0F 00 00 .dword 00000fdch +002F08r 1 DD 0F 00 00 .dword 00000fddh +002F0Cr 1 DE 0F 00 00 .dword 00000fdeh +002F10r 1 DF 0F 00 00 .dword 00000fdfh +002F14r 1 E0 0F 00 00 .dword 00000fe0h +002F18r 1 E1 0F 00 00 .dword 00000fe1h +002F1Cr 1 E2 0F 00 00 .dword 00000fe2h +002F20r 1 E3 0F 00 00 .dword 00000fe3h +002F24r 1 E4 0F 00 00 .dword 00000fe4h +002F28r 1 E5 0F 00 00 .dword 00000fe5h +002F2Cr 1 E6 0F 00 00 .dword 00000fe6h +002F30r 1 E7 0F 00 00 .dword 00000fe7h +002F34r 1 E8 0F 00 00 .dword 00000fe8h +002F38r 1 E9 0F 00 00 .dword 00000fe9h +002F3Cr 1 EA 0F 00 00 .dword 00000feah +002F40r 1 EB 0F 00 00 .dword 00000febh +002F44r 1 EC 0F 00 00 .dword 00000fech +002F48r 1 ED 0F 00 00 .dword 00000fedh +002F4Cr 1 EE 0F 00 00 .dword 00000feeh +002F50r 1 EF 0F 00 00 .dword 00000fefh +002F54r 1 F0 0F 00 00 .dword 00000ff0h +002F58r 1 F1 0F 00 00 .dword 00000ff1h +002F5Cr 1 F2 0F 00 00 .dword 00000ff2h +002F60r 1 F3 0F 00 00 .dword 00000ff3h +002F64r 1 F4 0F 00 00 .dword 00000ff4h +002F68r 1 F5 0F 00 00 .dword 00000ff5h +002F6Cr 1 F6 0F 00 00 .dword 00000ff6h +002F70r 1 F7 0F 00 00 .dword 00000ff7h +002F74r 1 F8 0F 00 00 .dword 00000ff8h +002F78r 1 F9 0F 00 00 .dword 00000ff9h +002F7Cr 1 FA 0F 00 00 .dword 00000ffah +002F80r 1 FB 0F 00 00 .dword 00000ffbh +002F84r 1 FC 0F 00 00 .dword 00000ffch +002F88r 1 FD 0F 00 00 .dword 00000ffdh +002F8Cr 1 FE 0F 00 00 .dword 00000ffeh +002F90r 1 FF 0F 00 00 .dword 00000fffh +002F94r 1 00 10 00 00 .dword 00001000h +002F98r 1 01 10 00 00 .dword 00001001h +002F9Cr 1 02 10 00 00 .dword 00001002h +002FA0r 1 03 10 00 00 .dword 00001003h +002FA4r 1 04 10 00 00 .dword 00001004h +002FA8r 1 05 10 00 00 .dword 00001005h +002FACr 1 06 10 00 00 .dword 00001006h +002FB0r 1 07 10 00 00 .dword 00001007h +002FB4r 1 08 10 00 00 .dword 00001008h +002FB8r 1 F0 7F 00 00 .dword 00007ff0h +002FBCr 1 F1 7F 00 00 .dword 00007ff1h +002FC0r 1 F2 7F 00 00 .dword 00007ff2h +002FC4r 1 F3 7F 00 00 .dword 00007ff3h +002FC8r 1 F4 7F 00 00 .dword 00007ff4h +002FCCr 1 F5 7F 00 00 .dword 00007ff5h +002FD0r 1 F6 7F 00 00 .dword 00007ff6h +002FD4r 1 F7 7F 00 00 .dword 00007ff7h +002FD8r 1 F8 7F 00 00 .dword 00007ff8h +002FDCr 1 F9 7F 00 00 .dword 00007ff9h +002FE0r 1 FA 7F 00 00 .dword 00007ffah +002FE4r 1 FB 7F 00 00 .dword 00007ffbh +002FE8r 1 FC 7F 00 00 .dword 00007ffch +002FECr 1 FD 7F 00 00 .dword 00007ffdh +002FF0r 1 FE 7F 00 00 .dword 00007ffeh +002FF4r 1 FF 7F 00 00 .dword 00007fffh +002FF8r 1 00 80 00 00 .dword 00008000h +002FFCr 1 01 80 00 00 .dword 00008001h +003000r 1 02 80 00 00 .dword 00008002h +003004r 1 03 80 00 00 .dword 00008003h +003008r 1 04 80 00 00 .dword 00008004h +00300Cr 1 05 80 00 00 .dword 00008005h +003010r 1 06 80 00 00 .dword 00008006h +003014r 1 07 80 00 00 .dword 00008007h +003018r 1 08 80 00 00 .dword 00008008h +00301Cr 1 09 80 00 00 .dword 00008009h +003020r 1 0A 80 00 00 .dword 0000800ah +003024r 1 0B 80 00 00 .dword 0000800bh +003028r 1 E1 9F 00 00 .dword 00009fe1h +00302Cr 1 E2 9F 00 00 .dword 00009fe2h +003030r 1 E3 9F 00 00 .dword 00009fe3h +003034r 1 E4 9F 00 00 .dword 00009fe4h +003038r 1 E5 9F 00 00 .dword 00009fe5h +00303Cr 1 E6 9F 00 00 .dword 00009fe6h +003040r 1 E7 9F 00 00 .dword 00009fe7h +003044r 1 E8 9F 00 00 .dword 00009fe8h +003048r 1 E9 9F 00 00 .dword 00009fe9h +00304Cr 1 EA 9F 00 00 .dword 00009feah +003050r 1 EB 9F 00 00 .dword 00009febh +003054r 1 EC 9F 00 00 .dword 00009fech +003058r 1 ED 9F 00 00 .dword 00009fedh +00305Cr 1 EE 9F 00 00 .dword 00009feeh +003060r 1 EF 9F 00 00 .dword 00009fefh +003064r 1 F0 9F 00 00 .dword 00009ff0h +003068r 1 F1 9F 00 00 .dword 00009ff1h +00306Cr 1 F2 9F 00 00 .dword 00009ff2h +003070r 1 F3 9F 00 00 .dword 00009ff3h +003074r 1 F4 9F 00 00 .dword 00009ff4h +003078r 1 F5 9F 00 00 .dword 00009ff5h +00307Cr 1 F6 9F 00 00 .dword 00009ff6h +003080r 1 F7 9F 00 00 .dword 00009ff7h +003084r 1 F8 9F 00 00 .dword 00009ff8h +003088r 1 F9 9F 00 00 .dword 00009ff9h +00308Cr 1 FA 9F 00 00 .dword 00009ffah +003090r 1 FB 9F 00 00 .dword 00009ffbh +003094r 1 FC 9F 00 00 .dword 00009ffch +003098r 1 FD 9F 00 00 .dword 00009ffdh +00309Cr 1 FE 9F 00 00 .dword 00009ffeh +0030A0r 1 FF 9F 00 00 .dword 00009fffh +0030A4r 1 00 A0 00 00 .dword 0000a000h +0030A8r 1 01 A0 00 00 .dword 0000a001h +0030ACr 1 02 A0 00 00 .dword 0000a002h +0030B0r 1 03 A0 00 00 .dword 0000a003h +0030B4r 1 04 A0 00 00 .dword 0000a004h +0030B8r 1 05 A0 00 00 .dword 0000a005h +0030BCr 1 06 A0 00 00 .dword 0000a006h +0030C0r 1 07 A0 00 00 .dword 0000a007h +0030C4r 1 08 A0 00 00 .dword 0000a008h +0030C8r 1 09 A0 00 00 .dword 0000a009h +0030CCr 1 0A A0 00 00 .dword 0000a00ah +0030D0r 1 0B A0 00 00 .dword 0000a00bh +0030D4r 1 0C A0 00 00 .dword 0000a00ch +0030D8r 1 0D A0 00 00 .dword 0000a00dh +0030DCr 1 0E A0 00 00 .dword 0000a00eh +0030E0r 1 0F A0 00 00 .dword 0000a00fh +0030E4r 1 E1 AF 00 00 .dword 0000afe1h +0030E8r 1 E2 AF 00 00 .dword 0000afe2h +0030ECr 1 E3 AF 00 00 .dword 0000afe3h +0030F0r 1 E4 AF 00 00 .dword 0000afe4h +0030F4r 1 E5 AF 00 00 .dword 0000afe5h +0030F8r 1 E6 AF 00 00 .dword 0000afe6h +0030FCr 1 E7 AF 00 00 .dword 0000afe7h +003100r 1 E8 AF 00 00 .dword 0000afe8h +003104r 1 E9 AF 00 00 .dword 0000afe9h +003108r 1 EA AF 00 00 .dword 0000afeah +00310Cr 1 EB AF 00 00 .dword 0000afebh +003110r 1 EC AF 00 00 .dword 0000afech +003114r 1 ED AF 00 00 .dword 0000afedh +003118r 1 EE AF 00 00 .dword 0000afeeh +00311Cr 1 EF AF 00 00 .dword 0000afefh +003120r 1 F0 AF 00 00 .dword 0000aff0h +003124r 1 F1 AF 00 00 .dword 0000aff1h +003128r 1 F2 AF 00 00 .dword 0000aff2h +00312Cr 1 F3 AF 00 00 .dword 0000aff3h +003130r 1 F4 AF 00 00 .dword 0000aff4h +003134r 1 F5 AF 00 00 .dword 0000aff5h +003138r 1 F6 AF 00 00 .dword 0000aff6h +00313Cr 1 F7 AF 00 00 .dword 0000aff7h +003140r 1 F8 AF 00 00 .dword 0000aff8h +003144r 1 F9 AF 00 00 .dword 0000aff9h +003148r 1 FA AF 00 00 .dword 0000affah +00314Cr 1 FB AF 00 00 .dword 0000affbh +003150r 1 FC AF 00 00 .dword 0000affch +003154r 1 FD AF 00 00 .dword 0000affdh +003158r 1 FE AF 00 00 .dword 0000affeh +00315Cr 1 FF AF 00 00 .dword 0000afffh +003160r 1 00 B0 00 00 .dword 0000b000h +003164r 1 01 B0 00 00 .dword 0000b001h +003168r 1 02 B0 00 00 .dword 0000b002h +00316Cr 1 03 B0 00 00 .dword 0000b003h +003170r 1 04 B0 00 00 .dword 0000b004h +003174r 1 05 B0 00 00 .dword 0000b005h +003178r 1 06 B0 00 00 .dword 0000b006h +00317Cr 1 07 B0 00 00 .dword 0000b007h +003180r 1 08 B0 00 00 .dword 0000b008h +003184r 1 09 B0 00 00 .dword 0000b009h +003188r 1 0A B0 00 00 .dword 0000b00ah +00318Cr 1 0B B0 00 00 .dword 0000b00bh +003190r 1 0C B0 00 00 .dword 0000b00ch +003194r 1 0D B0 00 00 .dword 0000b00dh +003198r 1 0E B0 00 00 .dword 0000b00eh +00319Cr 1 0F B0 00 00 .dword 0000b00fh +0031A0r 1 E1 FF 00 00 .dword 0000ffe1h +0031A4r 1 E2 FF 00 00 .dword 0000ffe2h +0031A8r 1 E3 FF 00 00 .dword 0000ffe3h +0031ACr 1 E4 FF 00 00 .dword 0000ffe4h +0031B0r 1 E5 FF 00 00 .dword 0000ffe5h +0031B4r 1 E6 FF 00 00 .dword 0000ffe6h +0031B8r 1 E7 FF 00 00 .dword 0000ffe7h +0031BCr 1 E8 FF 00 00 .dword 0000ffe8h +0031C0r 1 E9 FF 00 00 .dword 0000ffe9h +0031C4r 1 EA FF 00 00 .dword 0000ffeah +0031C8r 1 EB FF 00 00 .dword 0000ffebh +0031CCr 1 EC FF 00 00 .dword 0000ffech +0031D0r 1 ED FF 00 00 .dword 0000ffedh +0031D4r 1 EE FF 00 00 .dword 0000ffeeh +0031D8r 1 EF FF 00 00 .dword 0000ffefh +0031DCr 1 F0 FF 00 00 .dword 0000fff0h +0031E0r 1 F1 FF 00 00 .dword 0000fff1h +0031E4r 1 F2 FF 00 00 .dword 0000fff2h +0031E8r 1 F3 FF 00 00 .dword 0000fff3h +0031ECr 1 F4 FF 00 00 .dword 0000fff4h +0031F0r 1 F5 FF 00 00 .dword 0000fff5h +0031F4r 1 F6 FF 00 00 .dword 0000fff6h +0031F8r 1 F7 FF 00 00 .dword 0000fff7h +0031FCr 1 F8 FF 00 00 .dword 0000fff8h +003200r 1 F9 FF 00 00 .dword 0000fff9h +003204r 1 FA FF 00 00 .dword 0000fffah +003208r 1 FB FF 00 00 .dword 0000fffbh +00320Cr 1 FC FF 00 00 .dword 0000fffch +003210r 1 FD FF 00 00 .dword 0000fffdh +003214r 1 FE FF 00 00 .dword 0000fffeh +003218r 1 FF FF 00 00 .dword 0000ffffh +00321Cr 1 00 00 01 00 .dword 00010000h +003220r 1 01 00 01 00 .dword 00010001h +003224r 1 02 00 01 00 .dword 00010002h +003228r 1 03 00 01 00 .dword 00010003h +00322Cr 1 04 00 01 00 .dword 00010004h +003230r 1 05 00 01 00 .dword 00010005h +003234r 1 06 00 01 00 .dword 00010006h +003238r 1 07 00 01 00 .dword 00010007h +00323Cr 1 08 00 01 00 .dword 00010008h +003240r 1 09 00 01 00 .dword 00010009h +003244r 1 0A 00 01 00 .dword 0001000ah +003248r 1 0B 00 01 00 .dword 0001000bh +00324Cr 1 0C 00 01 00 .dword 0001000ch +003250r 1 0D 00 01 00 .dword 0001000dh +003254r 1 0E 00 01 00 .dword 0001000eh +003258r 1 0F 00 01 00 .dword 0001000fh +00325Cr 1 F0 FF FF 7F .dword 7ffffff0h +003260r 1 F1 FF FF 7F .dword 7ffffff1h +003264r 1 F2 FF FF 7F .dword 7ffffff2h +003268r 1 F3 FF FF 7F .dword 7ffffff3h +00326Cr 1 F4 FF FF 7F .dword 7ffffff4h +003270r 1 F5 FF FF 7F .dword 7ffffff5h +003274r 1 F6 FF FF 7F .dword 7ffffff6h +003278r 1 F7 FF FF 7F .dword 7ffffff7h +00327Cr 1 F8 FF FF 7F .dword 7ffffff8h +003280r 1 F9 FF FF 7F .dword 7ffffff9h +003284r 1 FA FF FF 7F .dword 7ffffffah +003288r 1 FB FF FF 7F .dword 7ffffffbh +00328Cr 1 FC FF FF 7F .dword 7ffffffch +003290r 1 FD FF FF 7F .dword 7ffffffdh +003294r 1 FE FF FF 7F .dword 7ffffffeh +003298r 1 FF FF FF 7F .dword 7fffffffh +00329Cr 1 00 00 00 80 .dword 80000000h +0032A0r 1 01 00 00 80 .dword 80000001h +0032A4r 1 02 00 00 80 .dword 80000002h +0032A8r 1 03 00 00 80 .dword 80000003h +0032ACr 1 04 00 00 80 .dword 80000004h +0032B0r 1 05 00 00 80 .dword 80000005h +0032B4r 1 06 00 00 80 .dword 80000006h +0032B8r 1 07 00 00 80 .dword 80000007h +0032BCr 1 08 00 00 80 .dword 80000008h +0032C0r 1 09 00 00 80 .dword 80000009h +0032C4r 1 0A 00 00 80 .dword 8000000ah +0032C8r 1 0B 00 00 80 .dword 8000000bh +0032CCr 1 0C 00 00 80 .dword 8000000ch +0032D0r 1 0D 00 00 80 .dword 8000000dh +0032D4r 1 0E 00 00 80 .dword 8000000eh +0032D8r 1 0F 00 00 80 .dword 8000000fh +0032DCr 1 F0 FF FF 9F .dword 9ffffff0h +0032E0r 1 F1 FF FF 9F .dword 9ffffff1h +0032E4r 1 F2 FF FF 9F .dword 9ffffff2h +0032E8r 1 F3 FF FF 9F .dword 9ffffff3h +0032ECr 1 F4 FF FF 9F .dword 9ffffff4h +0032F0r 1 F5 FF FF 9F .dword 9ffffff5h +0032F4r 1 F6 FF FF 9F .dword 9ffffff6h +0032F8r 1 F7 FF FF 9F .dword 9ffffff7h +0032FCr 1 F8 FF FF 9F .dword 9ffffff8h +003300r 1 F9 FF FF 9F .dword 9ffffff9h +003304r 1 FA FF FF 9F .dword 9ffffffah +003308r 1 FB FF FF 9F .dword 9ffffffbh +00330Cr 1 FC FF FF 9F .dword 9ffffffch +003310r 1 FD FF FF 9F .dword 9ffffffdh +003314r 1 FE FF FF 9F .dword 9ffffffeh +003318r 1 FF FF FF 9F .dword 9fffffffh +00331Cr 1 00 00 00 A0 .dword 0a0000000h +003320r 1 01 00 00 A0 .dword 0a0000001h +003324r 1 02 00 00 A0 .dword 0a0000002h +003328r 1 03 00 00 A0 .dword 0a0000003h +00332Cr 1 04 00 00 A0 .dword 0a0000004h +003330r 1 05 00 00 A0 .dword 0a0000005h +003334r 1 06 00 00 A0 .dword 0a0000006h +003338r 1 07 00 00 A0 .dword 0a0000007h +00333Cr 1 08 00 00 A0 .dword 0a0000008h +003340r 1 09 00 00 A0 .dword 0a0000009h +003344r 1 0A 00 00 A0 .dword 0a000000ah +003348r 1 0B 00 00 A0 .dword 0a000000bh +00334Cr 1 0C 00 00 A0 .dword 0a000000ch +003350r 1 0D 00 00 A0 .dword 0a000000dh +003354r 1 0E 00 00 A0 .dword 0a000000eh +003358r 1 0F 00 00 A0 .dword 0a000000fh +00335Cr 1 F0 FF FF FF .dword 0fffffff0h +003360r 1 F1 FF FF FF .dword 0fffffff1h +003364r 1 F2 FF FF FF .dword 0fffffff2h +003368r 1 F3 FF FF FF .dword 0fffffff3h +00336Cr 1 F4 FF FF FF .dword 0fffffff4h +003370r 1 F5 FF FF FF .dword 0fffffff5h +003374r 1 F6 FF FF FF .dword 0fffffff6h +003378r 1 F7 FF FF FF .dword 0fffffff7h +00337Cr 1 F8 FF FF FF .dword 0fffffff8h +003380r 1 F9 FF FF FF .dword 0fffffff9h +003384r 1 FA FF FF FF .dword 0fffffffah +003388r 1 FB FF FF FF .dword 0fffffffbh +00338Cr 1 FC FF FF FF .dword 0fffffffch +003390r 1 FD FF FF FF .dword 0fffffffdh +003394r 1 FE FF FF FF .dword 0fffffffeh +003398r 1 FF FF FF FF .dword 0ffffffffh 00339Cr 1 -00339Cr 1 ; alternative 8-digit hex values, uppercase -00339Cr 1 00 00 00 00 .dword 00000000h -0033A0r 1 01 00 00 00 .dword 00000001h -0033A4r 1 02 00 00 00 .dword 00000002h -0033A8r 1 03 00 00 00 .dword 00000003h -0033ACr 1 04 00 00 00 .dword 00000004h -0033B0r 1 05 00 00 00 .dword 00000005h -0033B4r 1 06 00 00 00 .dword 00000006h -0033B8r 1 07 00 00 00 .dword 00000007h -0033BCr 1 08 00 00 00 .dword 00000008h -0033C0r 1 09 00 00 00 .dword 00000009h -0033C4r 1 0A 00 00 00 .dword 0000000Ah -0033C8r 1 0B 00 00 00 .dword 0000000Bh -0033CCr 1 0C 00 00 00 .dword 0000000Ch -0033D0r 1 0D 00 00 00 .dword 0000000Dh -0033D4r 1 0E 00 00 00 .dword 0000000Eh -0033D8r 1 0F 00 00 00 .dword 0000000Fh -0033DCr 1 10 00 00 00 .dword 00000010h -0033E0r 1 11 00 00 00 .dword 00000011h -0033E4r 1 12 00 00 00 .dword 00000012h -0033E8r 1 13 00 00 00 .dword 00000013h -0033ECr 1 70 00 00 00 .dword 00000070h -0033F0r 1 71 00 00 00 .dword 00000071h -0033F4r 1 72 00 00 00 .dword 00000072h -0033F8r 1 73 00 00 00 .dword 00000073h -0033FCr 1 74 00 00 00 .dword 00000074h -003400r 1 75 00 00 00 .dword 00000075h -003404r 1 76 00 00 00 .dword 00000076h -003408r 1 77 00 00 00 .dword 00000077h -00340Cr 1 78 00 00 00 .dword 00000078h -003410r 1 79 00 00 00 .dword 00000079h -003414r 1 7A 00 00 00 .dword 0000007Ah -003418r 1 7B 00 00 00 .dword 0000007Bh -00341Cr 1 7C 00 00 00 .dword 0000007Ch -003420r 1 7D 00 00 00 .dword 0000007Dh -003424r 1 7E 00 00 00 .dword 0000007Eh -003428r 1 7F 00 00 00 .dword 0000007Fh -00342Cr 1 80 00 00 00 .dword 00000080h -003430r 1 81 00 00 00 .dword 00000081h -003434r 1 82 00 00 00 .dword 00000082h -003438r 1 83 00 00 00 .dword 00000083h -00343Cr 1 84 00 00 00 .dword 00000084h -003440r 1 85 00 00 00 .dword 00000085h -003444r 1 86 00 00 00 .dword 00000086h -003448r 1 F0 00 00 00 .dword 000000F0h -00344Cr 1 F1 00 00 00 .dword 000000F1h -003450r 1 F2 00 00 00 .dword 000000F2h -003454r 1 F3 00 00 00 .dword 000000F3h -003458r 1 F4 00 00 00 .dword 000000F4h -00345Cr 1 F5 00 00 00 .dword 000000F5h -003460r 1 F6 00 00 00 .dword 000000F6h -003464r 1 F7 00 00 00 .dword 000000F7h -003468r 1 F8 00 00 00 .dword 000000F8h -00346Cr 1 F9 00 00 00 .dword 000000F9h -003470r 1 FA 00 00 00 .dword 000000FAh -003474r 1 FB 00 00 00 .dword 000000FBh -003478r 1 FC 00 00 00 .dword 000000FCh -00347Cr 1 FD 00 00 00 .dword 000000FDh -003480r 1 FE 00 00 00 .dword 000000FEh -003484r 1 FF 00 00 00 .dword 000000FFh -003488r 1 00 01 00 00 .dword 00000100h -00348Cr 1 01 01 00 00 .dword 00000101h -003490r 1 02 01 00 00 .dword 00000102h -003494r 1 03 01 00 00 .dword 00000103h -003498r 1 D2 0F 00 00 .dword 00000FD2h -00349Cr 1 D3 0F 00 00 .dword 00000FD3h -0034A0r 1 D4 0F 00 00 .dword 00000FD4h -0034A4r 1 D5 0F 00 00 .dword 00000FD5h -0034A8r 1 D6 0F 00 00 .dword 00000FD6h -0034ACr 1 D7 0F 00 00 .dword 00000FD7h -0034B0r 1 D8 0F 00 00 .dword 00000FD8h -0034B4r 1 D9 0F 00 00 .dword 00000FD9h -0034B8r 1 DA 0F 00 00 .dword 00000FDAh -0034BCr 1 DB 0F 00 00 .dword 00000FDBh -0034C0r 1 DC 0F 00 00 .dword 00000FDCh -0034C4r 1 DD 0F 00 00 .dword 00000FDDh -0034C8r 1 DE 0F 00 00 .dword 00000FDEh -0034CCr 1 DF 0F 00 00 .dword 00000FDFh -0034D0r 1 E0 0F 00 00 .dword 00000FE0h -0034D4r 1 E1 0F 00 00 .dword 00000FE1h -0034D8r 1 E2 0F 00 00 .dword 00000FE2h -0034DCr 1 E3 0F 00 00 .dword 00000FE3h -0034E0r 1 E4 0F 00 00 .dword 00000FE4h -0034E4r 1 E5 0F 00 00 .dword 00000FE5h -0034E8r 1 E6 0F 00 00 .dword 00000FE6h -0034ECr 1 E7 0F 00 00 .dword 00000FE7h -0034F0r 1 E8 0F 00 00 .dword 00000FE8h -0034F4r 1 E9 0F 00 00 .dword 00000FE9h -0034F8r 1 EA 0F 00 00 .dword 00000FEAh -0034FCr 1 EB 0F 00 00 .dword 00000FEBh -003500r 1 EC 0F 00 00 .dword 00000FECh -003504r 1 ED 0F 00 00 .dword 00000FEDh -003508r 1 EE 0F 00 00 .dword 00000FEEh -00350Cr 1 EF 0F 00 00 .dword 00000FEFh -003510r 1 F0 0F 00 00 .dword 00000FF0h -003514r 1 F1 0F 00 00 .dword 00000FF1h -003518r 1 F2 0F 00 00 .dword 00000FF2h -00351Cr 1 F3 0F 00 00 .dword 00000FF3h -003520r 1 F4 0F 00 00 .dword 00000FF4h -003524r 1 F5 0F 00 00 .dword 00000FF5h -003528r 1 F6 0F 00 00 .dword 00000FF6h -00352Cr 1 F7 0F 00 00 .dword 00000FF7h -003530r 1 F8 0F 00 00 .dword 00000FF8h -003534r 1 F9 0F 00 00 .dword 00000FF9h -003538r 1 FA 0F 00 00 .dword 00000FFAh -00353Cr 1 FB 0F 00 00 .dword 00000FFBh -003540r 1 FC 0F 00 00 .dword 00000FFCh -003544r 1 FD 0F 00 00 .dword 00000FFDh -003548r 1 FE 0F 00 00 .dword 00000FFEh -00354Cr 1 FF 0F 00 00 .dword 00000FFFh -003550r 1 00 10 00 00 .dword 00001000h -003554r 1 01 10 00 00 .dword 00001001h -003558r 1 02 10 00 00 .dword 00001002h -00355Cr 1 03 10 00 00 .dword 00001003h -003560r 1 04 10 00 00 .dword 00001004h -003564r 1 05 10 00 00 .dword 00001005h -003568r 1 06 10 00 00 .dword 00001006h -00356Cr 1 07 10 00 00 .dword 00001007h -003570r 1 08 10 00 00 .dword 00001008h -003574r 1 F0 7F 00 00 .dword 00007FF0h -003578r 1 F1 7F 00 00 .dword 00007FF1h -00357Cr 1 F2 7F 00 00 .dword 00007FF2h -003580r 1 F3 7F 00 00 .dword 00007FF3h -003584r 1 F4 7F 00 00 .dword 00007FF4h -003588r 1 F5 7F 00 00 .dword 00007FF5h -00358Cr 1 F6 7F 00 00 .dword 00007FF6h -003590r 1 F7 7F 00 00 .dword 00007FF7h -003594r 1 F8 7F 00 00 .dword 00007FF8h -003598r 1 F9 7F 00 00 .dword 00007FF9h -00359Cr 1 FA 7F 00 00 .dword 00007FFAh -0035A0r 1 FB 7F 00 00 .dword 00007FFBh -0035A4r 1 FC 7F 00 00 .dword 00007FFCh -0035A8r 1 FD 7F 00 00 .dword 00007FFDh -0035ACr 1 FE 7F 00 00 .dword 00007FFEh -0035B0r 1 FF 7F 00 00 .dword 00007FFFh -0035B4r 1 00 80 00 00 .dword 00008000h -0035B8r 1 01 80 00 00 .dword 00008001h -0035BCr 1 02 80 00 00 .dword 00008002h -0035C0r 1 03 80 00 00 .dword 00008003h -0035C4r 1 04 80 00 00 .dword 00008004h -0035C8r 1 05 80 00 00 .dword 00008005h -0035CCr 1 06 80 00 00 .dword 00008006h -0035D0r 1 07 80 00 00 .dword 00008007h -0035D4r 1 08 80 00 00 .dword 00008008h -0035D8r 1 09 80 00 00 .dword 00008009h -0035DCr 1 0A 80 00 00 .dword 0000800Ah -0035E0r 1 0B 80 00 00 .dword 0000800Bh -0035E4r 1 E1 9F 00 00 .dword 00009FE1h -0035E8r 1 E2 9F 00 00 .dword 00009FE2h -0035ECr 1 E3 9F 00 00 .dword 00009FE3h -0035F0r 1 E4 9F 00 00 .dword 00009FE4h -0035F4r 1 E5 9F 00 00 .dword 00009FE5h -0035F8r 1 E6 9F 00 00 .dword 00009FE6h -0035FCr 1 E7 9F 00 00 .dword 00009FE7h -003600r 1 E8 9F 00 00 .dword 00009FE8h -003604r 1 E9 9F 00 00 .dword 00009FE9h -003608r 1 EA 9F 00 00 .dword 00009FEAh -00360Cr 1 EB 9F 00 00 .dword 00009FEBh -003610r 1 EC 9F 00 00 .dword 00009FECh -003614r 1 ED 9F 00 00 .dword 00009FEDh -003618r 1 EE 9F 00 00 .dword 00009FEEh -00361Cr 1 EF 9F 00 00 .dword 00009FEFh -003620r 1 F0 9F 00 00 .dword 00009FF0h -003624r 1 F1 9F 00 00 .dword 00009FF1h -003628r 1 F2 9F 00 00 .dword 00009FF2h -00362Cr 1 F3 9F 00 00 .dword 00009FF3h -003630r 1 F4 9F 00 00 .dword 00009FF4h -003634r 1 F5 9F 00 00 .dword 00009FF5h -003638r 1 F6 9F 00 00 .dword 00009FF6h -00363Cr 1 F7 9F 00 00 .dword 00009FF7h -003640r 1 F8 9F 00 00 .dword 00009FF8h -003644r 1 F9 9F 00 00 .dword 00009FF9h -003648r 1 FA 9F 00 00 .dword 00009FFAh -00364Cr 1 FB 9F 00 00 .dword 00009FFBh -003650r 1 FC 9F 00 00 .dword 00009FFCh -003654r 1 FD 9F 00 00 .dword 00009FFDh -003658r 1 FE 9F 00 00 .dword 00009FFEh -00365Cr 1 FF 9F 00 00 .dword 00009FFFh -003660r 1 00 A0 00 00 .dword 0000A000h -003664r 1 01 A0 00 00 .dword 0000A001h -003668r 1 02 A0 00 00 .dword 0000A002h -00366Cr 1 03 A0 00 00 .dword 0000A003h -003670r 1 04 A0 00 00 .dword 0000A004h -003674r 1 05 A0 00 00 .dword 0000A005h -003678r 1 06 A0 00 00 .dword 0000A006h -00367Cr 1 07 A0 00 00 .dword 0000A007h -003680r 1 08 A0 00 00 .dword 0000A008h -003684r 1 09 A0 00 00 .dword 0000A009h -003688r 1 0A A0 00 00 .dword 0000A00Ah -00368Cr 1 0B A0 00 00 .dword 0000A00Bh -003690r 1 0C A0 00 00 .dword 0000A00Ch -003694r 1 0D A0 00 00 .dword 0000A00Dh -003698r 1 0E A0 00 00 .dword 0000A00Eh -00369Cr 1 0F A0 00 00 .dword 0000A00Fh -0036A0r 1 E1 AF 00 00 .dword 0000AFE1h -0036A4r 1 E2 AF 00 00 .dword 0000AFE2h -0036A8r 1 E3 AF 00 00 .dword 0000AFE3h -0036ACr 1 E4 AF 00 00 .dword 0000AFE4h -0036B0r 1 E5 AF 00 00 .dword 0000AFE5h -0036B4r 1 E6 AF 00 00 .dword 0000AFE6h -0036B8r 1 E7 AF 00 00 .dword 0000AFE7h -0036BCr 1 E8 AF 00 00 .dword 0000AFE8h -0036C0r 1 E9 AF 00 00 .dword 0000AFE9h -0036C4r 1 EA AF 00 00 .dword 0000AFEAh -0036C8r 1 EB AF 00 00 .dword 0000AFEBh -0036CCr 1 EC AF 00 00 .dword 0000AFECh -0036D0r 1 ED AF 00 00 .dword 0000AFEDh -0036D4r 1 EE AF 00 00 .dword 0000AFEEh -0036D8r 1 EF AF 00 00 .dword 0000AFEFh -0036DCr 1 F0 AF 00 00 .dword 0000AFF0h -0036E0r 1 F1 AF 00 00 .dword 0000AFF1h -0036E4r 1 F2 AF 00 00 .dword 0000AFF2h -0036E8r 1 F3 AF 00 00 .dword 0000AFF3h -0036ECr 1 F4 AF 00 00 .dword 0000AFF4h -0036F0r 1 F5 AF 00 00 .dword 0000AFF5h -0036F4r 1 F6 AF 00 00 .dword 0000AFF6h -0036F8r 1 F7 AF 00 00 .dword 0000AFF7h -0036FCr 1 F8 AF 00 00 .dword 0000AFF8h -003700r 1 F9 AF 00 00 .dword 0000AFF9h -003704r 1 FA AF 00 00 .dword 0000AFFAh -003708r 1 FB AF 00 00 .dword 0000AFFBh -00370Cr 1 FC AF 00 00 .dword 0000AFFCh -003710r 1 FD AF 00 00 .dword 0000AFFDh -003714r 1 FE AF 00 00 .dword 0000AFFEh -003718r 1 FF AF 00 00 .dword 0000AFFFh -00371Cr 1 00 B0 00 00 .dword 0000B000h -003720r 1 01 B0 00 00 .dword 0000B001h -003724r 1 02 B0 00 00 .dword 0000B002h -003728r 1 03 B0 00 00 .dword 0000B003h -00372Cr 1 04 B0 00 00 .dword 0000B004h -003730r 1 05 B0 00 00 .dword 0000B005h -003734r 1 06 B0 00 00 .dword 0000B006h -003738r 1 07 B0 00 00 .dword 0000B007h -00373Cr 1 08 B0 00 00 .dword 0000B008h -003740r 1 09 B0 00 00 .dword 0000B009h -003744r 1 0A B0 00 00 .dword 0000B00Ah -003748r 1 0B B0 00 00 .dword 0000B00Bh -00374Cr 1 0C B0 00 00 .dword 0000B00Ch -003750r 1 0D B0 00 00 .dword 0000B00Dh -003754r 1 0E B0 00 00 .dword 0000B00Eh -003758r 1 0F B0 00 00 .dword 0000B00Fh -00375Cr 1 E1 FF 00 00 .dword 0000FFE1h -003760r 1 E2 FF 00 00 .dword 0000FFE2h -003764r 1 E3 FF 00 00 .dword 0000FFE3h -003768r 1 E4 FF 00 00 .dword 0000FFE4h -00376Cr 1 E5 FF 00 00 .dword 0000FFE5h -003770r 1 E6 FF 00 00 .dword 0000FFE6h -003774r 1 E7 FF 00 00 .dword 0000FFE7h -003778r 1 E8 FF 00 00 .dword 0000FFE8h -00377Cr 1 E9 FF 00 00 .dword 0000FFE9h -003780r 1 EA FF 00 00 .dword 0000FFEAh -003784r 1 EB FF 00 00 .dword 0000FFEBh -003788r 1 EC FF 00 00 .dword 0000FFECh -00378Cr 1 ED FF 00 00 .dword 0000FFEDh -003790r 1 EE FF 00 00 .dword 0000FFEEh -003794r 1 EF FF 00 00 .dword 0000FFEFh -003798r 1 F0 FF 00 00 .dword 0000FFF0h -00379Cr 1 F1 FF 00 00 .dword 0000FFF1h -0037A0r 1 F2 FF 00 00 .dword 0000FFF2h -0037A4r 1 F3 FF 00 00 .dword 0000FFF3h -0037A8r 1 F4 FF 00 00 .dword 0000FFF4h -0037ACr 1 F5 FF 00 00 .dword 0000FFF5h -0037B0r 1 F6 FF 00 00 .dword 0000FFF6h -0037B4r 1 F7 FF 00 00 .dword 0000FFF7h -0037B8r 1 F8 FF 00 00 .dword 0000FFF8h -0037BCr 1 F9 FF 00 00 .dword 0000FFF9h -0037C0r 1 FA FF 00 00 .dword 0000FFFAh -0037C4r 1 FB FF 00 00 .dword 0000FFFBh -0037C8r 1 FC FF 00 00 .dword 0000FFFCh -0037CCr 1 FD FF 00 00 .dword 0000FFFDh -0037D0r 1 FE FF 00 00 .dword 0000FFFEh -0037D4r 1 FF FF 00 00 .dword 0000FFFFh -0037D8r 1 00 00 01 00 .dword 00010000h -0037DCr 1 01 00 01 00 .dword 00010001h -0037E0r 1 02 00 01 00 .dword 00010002h -0037E4r 1 03 00 01 00 .dword 00010003h -0037E8r 1 04 00 01 00 .dword 00010004h -0037ECr 1 05 00 01 00 .dword 00010005h -0037F0r 1 06 00 01 00 .dword 00010006h -0037F4r 1 07 00 01 00 .dword 00010007h -0037F8r 1 08 00 01 00 .dword 00010008h -0037FCr 1 09 00 01 00 .dword 00010009h -003800r 1 0A 00 01 00 .dword 0001000Ah -003804r 1 0B 00 01 00 .dword 0001000Bh -003808r 1 0C 00 01 00 .dword 0001000Ch -00380Cr 1 0D 00 01 00 .dword 0001000Dh -003810r 1 0E 00 01 00 .dword 0001000Eh -003814r 1 0F 00 01 00 .dword 0001000Fh -003818r 1 F0 FF FF 7F .dword 7FFFFFF0h -00381Cr 1 F1 FF FF 7F .dword 7FFFFFF1h -003820r 1 F2 FF FF 7F .dword 7FFFFFF2h -003824r 1 F3 FF FF 7F .dword 7FFFFFF3h -003828r 1 F4 FF FF 7F .dword 7FFFFFF4h -00382Cr 1 F5 FF FF 7F .dword 7FFFFFF5h -003830r 1 F6 FF FF 7F .dword 7FFFFFF6h -003834r 1 F7 FF FF 7F .dword 7FFFFFF7h -003838r 1 F8 FF FF 7F .dword 7FFFFFF8h -00383Cr 1 F9 FF FF 7F .dword 7FFFFFF9h -003840r 1 FA FF FF 7F .dword 7FFFFFFAh -003844r 1 FB FF FF 7F .dword 7FFFFFFBh -003848r 1 FC FF FF 7F .dword 7FFFFFFCh -00384Cr 1 FD FF FF 7F .dword 7FFFFFFDh -003850r 1 FE FF FF 7F .dword 7FFFFFFEh -003854r 1 FF FF FF 7F .dword 7FFFFFFFh -003858r 1 00 00 00 80 .dword 80000000h -00385Cr 1 01 00 00 80 .dword 80000001h -003860r 1 02 00 00 80 .dword 80000002h -003864r 1 03 00 00 80 .dword 80000003h -003868r 1 04 00 00 80 .dword 80000004h -00386Cr 1 05 00 00 80 .dword 80000005h -003870r 1 06 00 00 80 .dword 80000006h -003874r 1 07 00 00 80 .dword 80000007h -003878r 1 08 00 00 80 .dword 80000008h -00387Cr 1 09 00 00 80 .dword 80000009h -003880r 1 0A 00 00 80 .dword 8000000Ah -003884r 1 0B 00 00 80 .dword 8000000Bh -003888r 1 0C 00 00 80 .dword 8000000Ch -00388Cr 1 0D 00 00 80 .dword 8000000Dh -003890r 1 0E 00 00 80 .dword 8000000Eh -003894r 1 0F 00 00 80 .dword 8000000Fh -003898r 1 F0 FF FF 9F .dword 9FFFFFF0h -00389Cr 1 F1 FF FF 9F .dword 9FFFFFF1h -0038A0r 1 F2 FF FF 9F .dword 9FFFFFF2h -0038A4r 1 F3 FF FF 9F .dword 9FFFFFF3h -0038A8r 1 F4 FF FF 9F .dword 9FFFFFF4h -0038ACr 1 F5 FF FF 9F .dword 9FFFFFF5h -0038B0r 1 F6 FF FF 9F .dword 9FFFFFF6h -0038B4r 1 F7 FF FF 9F .dword 9FFFFFF7h -0038B8r 1 F8 FF FF 9F .dword 9FFFFFF8h -0038BCr 1 F9 FF FF 9F .dword 9FFFFFF9h -0038C0r 1 FA FF FF 9F .dword 9FFFFFFAh -0038C4r 1 FB FF FF 9F .dword 9FFFFFFBh -0038C8r 1 FC FF FF 9F .dword 9FFFFFFCh -0038CCr 1 FD FF FF 9F .dword 9FFFFFFDh -0038D0r 1 FE FF FF 9F .dword 9FFFFFFEh -0038D4r 1 FF FF FF 9F .dword 9FFFFFFFh -0038D8r 1 00 00 00 A0 .dword 0A0000000h -0038DCr 1 01 00 00 A0 .dword 0A0000001h -0038E0r 1 02 00 00 A0 .dword 0A0000002h -0038E4r 1 03 00 00 A0 .dword 0A0000003h -0038E8r 1 04 00 00 A0 .dword 0A0000004h -0038ECr 1 05 00 00 A0 .dword 0A0000005h -0038F0r 1 06 00 00 A0 .dword 0A0000006h -0038F4r 1 07 00 00 A0 .dword 0A0000007h -0038F8r 1 08 00 00 A0 .dword 0A0000008h -0038FCr 1 09 00 00 A0 .dword 0A0000009h -003900r 1 0A 00 00 A0 .dword 0A000000Ah -003904r 1 0B 00 00 A0 .dword 0A000000Bh -003908r 1 0C 00 00 A0 .dword 0A000000Ch -00390Cr 1 0D 00 00 A0 .dword 0A000000Dh -003910r 1 0E 00 00 A0 .dword 0A000000Eh -003914r 1 0F 00 00 A0 .dword 0A000000Fh -003918r 1 F0 FF FF FF .dword 0FFFFFFF0h -00391Cr 1 F1 FF FF FF .dword 0FFFFFFF1h -003920r 1 F2 FF FF FF .dword 0FFFFFFF2h -003924r 1 F3 FF FF FF .dword 0FFFFFFF3h -003928r 1 F4 FF FF FF .dword 0FFFFFFF4h -00392Cr 1 F5 FF FF FF .dword 0FFFFFFF5h -003930r 1 F6 FF FF FF .dword 0FFFFFFF6h -003934r 1 F7 FF FF FF .dword 0FFFFFFF7h -003938r 1 F8 FF FF FF .dword 0FFFFFFF8h -00393Cr 1 F9 FF FF FF .dword 0FFFFFFF9h -003940r 1 FA FF FF FF .dword 0FFFFFFFAh -003944r 1 FB FF FF FF .dword 0FFFFFFFBh -003948r 1 FC FF FF FF .dword 0FFFFFFFCh -00394Cr 1 FD FF FF FF .dword 0FFFFFFFDh -003950r 1 FE FF FF FF .dword 0FFFFFFFEh -003954r 1 FF FF FF FF .dword 0FFFFFFFFh +00339Cr 1 ; alternative 8-digit hex values, uppercase +00339Cr 1 00 00 00 00 .dword 00000000h +0033A0r 1 01 00 00 00 .dword 00000001h +0033A4r 1 02 00 00 00 .dword 00000002h +0033A8r 1 03 00 00 00 .dword 00000003h +0033ACr 1 04 00 00 00 .dword 00000004h +0033B0r 1 05 00 00 00 .dword 00000005h +0033B4r 1 06 00 00 00 .dword 00000006h +0033B8r 1 07 00 00 00 .dword 00000007h +0033BCr 1 08 00 00 00 .dword 00000008h +0033C0r 1 09 00 00 00 .dword 00000009h +0033C4r 1 0A 00 00 00 .dword 0000000Ah +0033C8r 1 0B 00 00 00 .dword 0000000Bh +0033CCr 1 0C 00 00 00 .dword 0000000Ch +0033D0r 1 0D 00 00 00 .dword 0000000Dh +0033D4r 1 0E 00 00 00 .dword 0000000Eh +0033D8r 1 0F 00 00 00 .dword 0000000Fh +0033DCr 1 10 00 00 00 .dword 00000010h +0033E0r 1 11 00 00 00 .dword 00000011h +0033E4r 1 12 00 00 00 .dword 00000012h +0033E8r 1 13 00 00 00 .dword 00000013h +0033ECr 1 70 00 00 00 .dword 00000070h +0033F0r 1 71 00 00 00 .dword 00000071h +0033F4r 1 72 00 00 00 .dword 00000072h +0033F8r 1 73 00 00 00 .dword 00000073h +0033FCr 1 74 00 00 00 .dword 00000074h +003400r 1 75 00 00 00 .dword 00000075h +003404r 1 76 00 00 00 .dword 00000076h +003408r 1 77 00 00 00 .dword 00000077h +00340Cr 1 78 00 00 00 .dword 00000078h +003410r 1 79 00 00 00 .dword 00000079h +003414r 1 7A 00 00 00 .dword 0000007Ah +003418r 1 7B 00 00 00 .dword 0000007Bh +00341Cr 1 7C 00 00 00 .dword 0000007Ch +003420r 1 7D 00 00 00 .dword 0000007Dh +003424r 1 7E 00 00 00 .dword 0000007Eh +003428r 1 7F 00 00 00 .dword 0000007Fh +00342Cr 1 80 00 00 00 .dword 00000080h +003430r 1 81 00 00 00 .dword 00000081h +003434r 1 82 00 00 00 .dword 00000082h +003438r 1 83 00 00 00 .dword 00000083h +00343Cr 1 84 00 00 00 .dword 00000084h +003440r 1 85 00 00 00 .dword 00000085h +003444r 1 86 00 00 00 .dword 00000086h +003448r 1 F0 00 00 00 .dword 000000F0h +00344Cr 1 F1 00 00 00 .dword 000000F1h +003450r 1 F2 00 00 00 .dword 000000F2h +003454r 1 F3 00 00 00 .dword 000000F3h +003458r 1 F4 00 00 00 .dword 000000F4h +00345Cr 1 F5 00 00 00 .dword 000000F5h +003460r 1 F6 00 00 00 .dword 000000F6h +003464r 1 F7 00 00 00 .dword 000000F7h +003468r 1 F8 00 00 00 .dword 000000F8h +00346Cr 1 F9 00 00 00 .dword 000000F9h +003470r 1 FA 00 00 00 .dword 000000FAh +003474r 1 FB 00 00 00 .dword 000000FBh +003478r 1 FC 00 00 00 .dword 000000FCh +00347Cr 1 FD 00 00 00 .dword 000000FDh +003480r 1 FE 00 00 00 .dword 000000FEh +003484r 1 FF 00 00 00 .dword 000000FFh +003488r 1 00 01 00 00 .dword 00000100h +00348Cr 1 01 01 00 00 .dword 00000101h +003490r 1 02 01 00 00 .dword 00000102h +003494r 1 03 01 00 00 .dword 00000103h +003498r 1 D2 0F 00 00 .dword 00000FD2h +00349Cr 1 D3 0F 00 00 .dword 00000FD3h +0034A0r 1 D4 0F 00 00 .dword 00000FD4h +0034A4r 1 D5 0F 00 00 .dword 00000FD5h +0034A8r 1 D6 0F 00 00 .dword 00000FD6h +0034ACr 1 D7 0F 00 00 .dword 00000FD7h +0034B0r 1 D8 0F 00 00 .dword 00000FD8h +0034B4r 1 D9 0F 00 00 .dword 00000FD9h +0034B8r 1 DA 0F 00 00 .dword 00000FDAh +0034BCr 1 DB 0F 00 00 .dword 00000FDBh +0034C0r 1 DC 0F 00 00 .dword 00000FDCh +0034C4r 1 DD 0F 00 00 .dword 00000FDDh +0034C8r 1 DE 0F 00 00 .dword 00000FDEh +0034CCr 1 DF 0F 00 00 .dword 00000FDFh +0034D0r 1 E0 0F 00 00 .dword 00000FE0h +0034D4r 1 E1 0F 00 00 .dword 00000FE1h +0034D8r 1 E2 0F 00 00 .dword 00000FE2h +0034DCr 1 E3 0F 00 00 .dword 00000FE3h +0034E0r 1 E4 0F 00 00 .dword 00000FE4h +0034E4r 1 E5 0F 00 00 .dword 00000FE5h +0034E8r 1 E6 0F 00 00 .dword 00000FE6h +0034ECr 1 E7 0F 00 00 .dword 00000FE7h +0034F0r 1 E8 0F 00 00 .dword 00000FE8h +0034F4r 1 E9 0F 00 00 .dword 00000FE9h +0034F8r 1 EA 0F 00 00 .dword 00000FEAh +0034FCr 1 EB 0F 00 00 .dword 00000FEBh +003500r 1 EC 0F 00 00 .dword 00000FECh +003504r 1 ED 0F 00 00 .dword 00000FEDh +003508r 1 EE 0F 00 00 .dword 00000FEEh +00350Cr 1 EF 0F 00 00 .dword 00000FEFh +003510r 1 F0 0F 00 00 .dword 00000FF0h +003514r 1 F1 0F 00 00 .dword 00000FF1h +003518r 1 F2 0F 00 00 .dword 00000FF2h +00351Cr 1 F3 0F 00 00 .dword 00000FF3h +003520r 1 F4 0F 00 00 .dword 00000FF4h +003524r 1 F5 0F 00 00 .dword 00000FF5h +003528r 1 F6 0F 00 00 .dword 00000FF6h +00352Cr 1 F7 0F 00 00 .dword 00000FF7h +003530r 1 F8 0F 00 00 .dword 00000FF8h +003534r 1 F9 0F 00 00 .dword 00000FF9h +003538r 1 FA 0F 00 00 .dword 00000FFAh +00353Cr 1 FB 0F 00 00 .dword 00000FFBh +003540r 1 FC 0F 00 00 .dword 00000FFCh +003544r 1 FD 0F 00 00 .dword 00000FFDh +003548r 1 FE 0F 00 00 .dword 00000FFEh +00354Cr 1 FF 0F 00 00 .dword 00000FFFh +003550r 1 00 10 00 00 .dword 00001000h +003554r 1 01 10 00 00 .dword 00001001h +003558r 1 02 10 00 00 .dword 00001002h +00355Cr 1 03 10 00 00 .dword 00001003h +003560r 1 04 10 00 00 .dword 00001004h +003564r 1 05 10 00 00 .dword 00001005h +003568r 1 06 10 00 00 .dword 00001006h +00356Cr 1 07 10 00 00 .dword 00001007h +003570r 1 08 10 00 00 .dword 00001008h +003574r 1 F0 7F 00 00 .dword 00007FF0h +003578r 1 F1 7F 00 00 .dword 00007FF1h +00357Cr 1 F2 7F 00 00 .dword 00007FF2h +003580r 1 F3 7F 00 00 .dword 00007FF3h +003584r 1 F4 7F 00 00 .dword 00007FF4h +003588r 1 F5 7F 00 00 .dword 00007FF5h +00358Cr 1 F6 7F 00 00 .dword 00007FF6h +003590r 1 F7 7F 00 00 .dword 00007FF7h +003594r 1 F8 7F 00 00 .dword 00007FF8h +003598r 1 F9 7F 00 00 .dword 00007FF9h +00359Cr 1 FA 7F 00 00 .dword 00007FFAh +0035A0r 1 FB 7F 00 00 .dword 00007FFBh +0035A4r 1 FC 7F 00 00 .dword 00007FFCh +0035A8r 1 FD 7F 00 00 .dword 00007FFDh +0035ACr 1 FE 7F 00 00 .dword 00007FFEh +0035B0r 1 FF 7F 00 00 .dword 00007FFFh +0035B4r 1 00 80 00 00 .dword 00008000h +0035B8r 1 01 80 00 00 .dword 00008001h +0035BCr 1 02 80 00 00 .dword 00008002h +0035C0r 1 03 80 00 00 .dword 00008003h +0035C4r 1 04 80 00 00 .dword 00008004h +0035C8r 1 05 80 00 00 .dword 00008005h +0035CCr 1 06 80 00 00 .dword 00008006h +0035D0r 1 07 80 00 00 .dword 00008007h +0035D4r 1 08 80 00 00 .dword 00008008h +0035D8r 1 09 80 00 00 .dword 00008009h +0035DCr 1 0A 80 00 00 .dword 0000800Ah +0035E0r 1 0B 80 00 00 .dword 0000800Bh +0035E4r 1 E1 9F 00 00 .dword 00009FE1h +0035E8r 1 E2 9F 00 00 .dword 00009FE2h +0035ECr 1 E3 9F 00 00 .dword 00009FE3h +0035F0r 1 E4 9F 00 00 .dword 00009FE4h +0035F4r 1 E5 9F 00 00 .dword 00009FE5h +0035F8r 1 E6 9F 00 00 .dword 00009FE6h +0035FCr 1 E7 9F 00 00 .dword 00009FE7h +003600r 1 E8 9F 00 00 .dword 00009FE8h +003604r 1 E9 9F 00 00 .dword 00009FE9h +003608r 1 EA 9F 00 00 .dword 00009FEAh +00360Cr 1 EB 9F 00 00 .dword 00009FEBh +003610r 1 EC 9F 00 00 .dword 00009FECh +003614r 1 ED 9F 00 00 .dword 00009FEDh +003618r 1 EE 9F 00 00 .dword 00009FEEh +00361Cr 1 EF 9F 00 00 .dword 00009FEFh +003620r 1 F0 9F 00 00 .dword 00009FF0h +003624r 1 F1 9F 00 00 .dword 00009FF1h +003628r 1 F2 9F 00 00 .dword 00009FF2h +00362Cr 1 F3 9F 00 00 .dword 00009FF3h +003630r 1 F4 9F 00 00 .dword 00009FF4h +003634r 1 F5 9F 00 00 .dword 00009FF5h +003638r 1 F6 9F 00 00 .dword 00009FF6h +00363Cr 1 F7 9F 00 00 .dword 00009FF7h +003640r 1 F8 9F 00 00 .dword 00009FF8h +003644r 1 F9 9F 00 00 .dword 00009FF9h +003648r 1 FA 9F 00 00 .dword 00009FFAh +00364Cr 1 FB 9F 00 00 .dword 00009FFBh +003650r 1 FC 9F 00 00 .dword 00009FFCh +003654r 1 FD 9F 00 00 .dword 00009FFDh +003658r 1 FE 9F 00 00 .dword 00009FFEh +00365Cr 1 FF 9F 00 00 .dword 00009FFFh +003660r 1 00 A0 00 00 .dword 0000A000h +003664r 1 01 A0 00 00 .dword 0000A001h +003668r 1 02 A0 00 00 .dword 0000A002h +00366Cr 1 03 A0 00 00 .dword 0000A003h +003670r 1 04 A0 00 00 .dword 0000A004h +003674r 1 05 A0 00 00 .dword 0000A005h +003678r 1 06 A0 00 00 .dword 0000A006h +00367Cr 1 07 A0 00 00 .dword 0000A007h +003680r 1 08 A0 00 00 .dword 0000A008h +003684r 1 09 A0 00 00 .dword 0000A009h +003688r 1 0A A0 00 00 .dword 0000A00Ah +00368Cr 1 0B A0 00 00 .dword 0000A00Bh +003690r 1 0C A0 00 00 .dword 0000A00Ch +003694r 1 0D A0 00 00 .dword 0000A00Dh +003698r 1 0E A0 00 00 .dword 0000A00Eh +00369Cr 1 0F A0 00 00 .dword 0000A00Fh +0036A0r 1 E1 AF 00 00 .dword 0000AFE1h +0036A4r 1 E2 AF 00 00 .dword 0000AFE2h +0036A8r 1 E3 AF 00 00 .dword 0000AFE3h +0036ACr 1 E4 AF 00 00 .dword 0000AFE4h +0036B0r 1 E5 AF 00 00 .dword 0000AFE5h +0036B4r 1 E6 AF 00 00 .dword 0000AFE6h +0036B8r 1 E7 AF 00 00 .dword 0000AFE7h +0036BCr 1 E8 AF 00 00 .dword 0000AFE8h +0036C0r 1 E9 AF 00 00 .dword 0000AFE9h +0036C4r 1 EA AF 00 00 .dword 0000AFEAh +0036C8r 1 EB AF 00 00 .dword 0000AFEBh +0036CCr 1 EC AF 00 00 .dword 0000AFECh +0036D0r 1 ED AF 00 00 .dword 0000AFEDh +0036D4r 1 EE AF 00 00 .dword 0000AFEEh +0036D8r 1 EF AF 00 00 .dword 0000AFEFh +0036DCr 1 F0 AF 00 00 .dword 0000AFF0h +0036E0r 1 F1 AF 00 00 .dword 0000AFF1h +0036E4r 1 F2 AF 00 00 .dword 0000AFF2h +0036E8r 1 F3 AF 00 00 .dword 0000AFF3h +0036ECr 1 F4 AF 00 00 .dword 0000AFF4h +0036F0r 1 F5 AF 00 00 .dword 0000AFF5h +0036F4r 1 F6 AF 00 00 .dword 0000AFF6h +0036F8r 1 F7 AF 00 00 .dword 0000AFF7h +0036FCr 1 F8 AF 00 00 .dword 0000AFF8h +003700r 1 F9 AF 00 00 .dword 0000AFF9h +003704r 1 FA AF 00 00 .dword 0000AFFAh +003708r 1 FB AF 00 00 .dword 0000AFFBh +00370Cr 1 FC AF 00 00 .dword 0000AFFCh +003710r 1 FD AF 00 00 .dword 0000AFFDh +003714r 1 FE AF 00 00 .dword 0000AFFEh +003718r 1 FF AF 00 00 .dword 0000AFFFh +00371Cr 1 00 B0 00 00 .dword 0000B000h +003720r 1 01 B0 00 00 .dword 0000B001h +003724r 1 02 B0 00 00 .dword 0000B002h +003728r 1 03 B0 00 00 .dword 0000B003h +00372Cr 1 04 B0 00 00 .dword 0000B004h +003730r 1 05 B0 00 00 .dword 0000B005h +003734r 1 06 B0 00 00 .dword 0000B006h +003738r 1 07 B0 00 00 .dword 0000B007h +00373Cr 1 08 B0 00 00 .dword 0000B008h +003740r 1 09 B0 00 00 .dword 0000B009h +003744r 1 0A B0 00 00 .dword 0000B00Ah +003748r 1 0B B0 00 00 .dword 0000B00Bh +00374Cr 1 0C B0 00 00 .dword 0000B00Ch +003750r 1 0D B0 00 00 .dword 0000B00Dh +003754r 1 0E B0 00 00 .dword 0000B00Eh +003758r 1 0F B0 00 00 .dword 0000B00Fh +00375Cr 1 E1 FF 00 00 .dword 0000FFE1h +003760r 1 E2 FF 00 00 .dword 0000FFE2h +003764r 1 E3 FF 00 00 .dword 0000FFE3h +003768r 1 E4 FF 00 00 .dword 0000FFE4h +00376Cr 1 E5 FF 00 00 .dword 0000FFE5h +003770r 1 E6 FF 00 00 .dword 0000FFE6h +003774r 1 E7 FF 00 00 .dword 0000FFE7h +003778r 1 E8 FF 00 00 .dword 0000FFE8h +00377Cr 1 E9 FF 00 00 .dword 0000FFE9h +003780r 1 EA FF 00 00 .dword 0000FFEAh +003784r 1 EB FF 00 00 .dword 0000FFEBh +003788r 1 EC FF 00 00 .dword 0000FFECh +00378Cr 1 ED FF 00 00 .dword 0000FFEDh +003790r 1 EE FF 00 00 .dword 0000FFEEh +003794r 1 EF FF 00 00 .dword 0000FFEFh +003798r 1 F0 FF 00 00 .dword 0000FFF0h +00379Cr 1 F1 FF 00 00 .dword 0000FFF1h +0037A0r 1 F2 FF 00 00 .dword 0000FFF2h +0037A4r 1 F3 FF 00 00 .dword 0000FFF3h +0037A8r 1 F4 FF 00 00 .dword 0000FFF4h +0037ACr 1 F5 FF 00 00 .dword 0000FFF5h +0037B0r 1 F6 FF 00 00 .dword 0000FFF6h +0037B4r 1 F7 FF 00 00 .dword 0000FFF7h +0037B8r 1 F8 FF 00 00 .dword 0000FFF8h +0037BCr 1 F9 FF 00 00 .dword 0000FFF9h +0037C0r 1 FA FF 00 00 .dword 0000FFFAh +0037C4r 1 FB FF 00 00 .dword 0000FFFBh +0037C8r 1 FC FF 00 00 .dword 0000FFFCh +0037CCr 1 FD FF 00 00 .dword 0000FFFDh +0037D0r 1 FE FF 00 00 .dword 0000FFFEh +0037D4r 1 FF FF 00 00 .dword 0000FFFFh +0037D8r 1 00 00 01 00 .dword 00010000h +0037DCr 1 01 00 01 00 .dword 00010001h +0037E0r 1 02 00 01 00 .dword 00010002h +0037E4r 1 03 00 01 00 .dword 00010003h +0037E8r 1 04 00 01 00 .dword 00010004h +0037ECr 1 05 00 01 00 .dword 00010005h +0037F0r 1 06 00 01 00 .dword 00010006h +0037F4r 1 07 00 01 00 .dword 00010007h +0037F8r 1 08 00 01 00 .dword 00010008h +0037FCr 1 09 00 01 00 .dword 00010009h +003800r 1 0A 00 01 00 .dword 0001000Ah +003804r 1 0B 00 01 00 .dword 0001000Bh +003808r 1 0C 00 01 00 .dword 0001000Ch +00380Cr 1 0D 00 01 00 .dword 0001000Dh +003810r 1 0E 00 01 00 .dword 0001000Eh +003814r 1 0F 00 01 00 .dword 0001000Fh +003818r 1 F0 FF FF 7F .dword 7FFFFFF0h +00381Cr 1 F1 FF FF 7F .dword 7FFFFFF1h +003820r 1 F2 FF FF 7F .dword 7FFFFFF2h +003824r 1 F3 FF FF 7F .dword 7FFFFFF3h +003828r 1 F4 FF FF 7F .dword 7FFFFFF4h +00382Cr 1 F5 FF FF 7F .dword 7FFFFFF5h +003830r 1 F6 FF FF 7F .dword 7FFFFFF6h +003834r 1 F7 FF FF 7F .dword 7FFFFFF7h +003838r 1 F8 FF FF 7F .dword 7FFFFFF8h +00383Cr 1 F9 FF FF 7F .dword 7FFFFFF9h +003840r 1 FA FF FF 7F .dword 7FFFFFFAh +003844r 1 FB FF FF 7F .dword 7FFFFFFBh +003848r 1 FC FF FF 7F .dword 7FFFFFFCh +00384Cr 1 FD FF FF 7F .dword 7FFFFFFDh +003850r 1 FE FF FF 7F .dword 7FFFFFFEh +003854r 1 FF FF FF 7F .dword 7FFFFFFFh +003858r 1 00 00 00 80 .dword 80000000h +00385Cr 1 01 00 00 80 .dword 80000001h +003860r 1 02 00 00 80 .dword 80000002h +003864r 1 03 00 00 80 .dword 80000003h +003868r 1 04 00 00 80 .dword 80000004h +00386Cr 1 05 00 00 80 .dword 80000005h +003870r 1 06 00 00 80 .dword 80000006h +003874r 1 07 00 00 80 .dword 80000007h +003878r 1 08 00 00 80 .dword 80000008h +00387Cr 1 09 00 00 80 .dword 80000009h +003880r 1 0A 00 00 80 .dword 8000000Ah +003884r 1 0B 00 00 80 .dword 8000000Bh +003888r 1 0C 00 00 80 .dword 8000000Ch +00388Cr 1 0D 00 00 80 .dword 8000000Dh +003890r 1 0E 00 00 80 .dword 8000000Eh +003894r 1 0F 00 00 80 .dword 8000000Fh +003898r 1 F0 FF FF 9F .dword 9FFFFFF0h +00389Cr 1 F1 FF FF 9F .dword 9FFFFFF1h +0038A0r 1 F2 FF FF 9F .dword 9FFFFFF2h +0038A4r 1 F3 FF FF 9F .dword 9FFFFFF3h +0038A8r 1 F4 FF FF 9F .dword 9FFFFFF4h +0038ACr 1 F5 FF FF 9F .dword 9FFFFFF5h +0038B0r 1 F6 FF FF 9F .dword 9FFFFFF6h +0038B4r 1 F7 FF FF 9F .dword 9FFFFFF7h +0038B8r 1 F8 FF FF 9F .dword 9FFFFFF8h +0038BCr 1 F9 FF FF 9F .dword 9FFFFFF9h +0038C0r 1 FA FF FF 9F .dword 9FFFFFFAh +0038C4r 1 FB FF FF 9F .dword 9FFFFFFBh +0038C8r 1 FC FF FF 9F .dword 9FFFFFFCh +0038CCr 1 FD FF FF 9F .dword 9FFFFFFDh +0038D0r 1 FE FF FF 9F .dword 9FFFFFFEh +0038D4r 1 FF FF FF 9F .dword 9FFFFFFFh +0038D8r 1 00 00 00 A0 .dword 0A0000000h +0038DCr 1 01 00 00 A0 .dword 0A0000001h +0038E0r 1 02 00 00 A0 .dword 0A0000002h +0038E4r 1 03 00 00 A0 .dword 0A0000003h +0038E8r 1 04 00 00 A0 .dword 0A0000004h +0038ECr 1 05 00 00 A0 .dword 0A0000005h +0038F0r 1 06 00 00 A0 .dword 0A0000006h +0038F4r 1 07 00 00 A0 .dword 0A0000007h +0038F8r 1 08 00 00 A0 .dword 0A0000008h +0038FCr 1 09 00 00 A0 .dword 0A0000009h +003900r 1 0A 00 00 A0 .dword 0A000000Ah +003904r 1 0B 00 00 A0 .dword 0A000000Bh +003908r 1 0C 00 00 A0 .dword 0A000000Ch +00390Cr 1 0D 00 00 A0 .dword 0A000000Dh +003910r 1 0E 00 00 A0 .dword 0A000000Eh +003914r 1 0F 00 00 A0 .dword 0A000000Fh +003918r 1 F0 FF FF FF .dword 0FFFFFFF0h +00391Cr 1 F1 FF FF FF .dword 0FFFFFFF1h +003920r 1 F2 FF FF FF .dword 0FFFFFFF2h +003924r 1 F3 FF FF FF .dword 0FFFFFFF3h +003928r 1 F4 FF FF FF .dword 0FFFFFFF4h +00392Cr 1 F5 FF FF FF .dword 0FFFFFFF5h +003930r 1 F6 FF FF FF .dword 0FFFFFFF6h +003934r 1 F7 FF FF FF .dword 0FFFFFFF7h +003938r 1 F8 FF FF FF .dword 0FFFFFFF8h +00393Cr 1 F9 FF FF FF .dword 0FFFFFFF9h +003940r 1 FA FF FF FF .dword 0FFFFFFFAh +003944r 1 FB FF FF FF .dword 0FFFFFFFBh +003948r 1 FC FF FF FF .dword 0FFFFFFFCh +00394Cr 1 FD FF FF FF .dword 0FFFFFFFDh +003950r 1 FE FF FF FF .dword 0FFFFFFFEh +003954r 1 FF FF FF FF .dword 0FFFFFFFFh 003958r 1 -003958r 1 ; alternative hex values, always leading zero -003958r 1 00 00 00 00 .dword 00h -00395Cr 1 01 00 00 00 .dword 01h -003960r 1 02 00 00 00 .dword 02h -003964r 1 03 00 00 00 .dword 03h -003968r 1 04 00 00 00 .dword 04h -00396Cr 1 05 00 00 00 .dword 05h -003970r 1 06 00 00 00 .dword 06h -003974r 1 07 00 00 00 .dword 07h -003978r 1 08 00 00 00 .dword 08h -00397Cr 1 09 00 00 00 .dword 09h -003980r 1 0A 00 00 00 .dword 0ah -003984r 1 0B 00 00 00 .dword 0bh -003988r 1 0C 00 00 00 .dword 0ch -00398Cr 1 0D 00 00 00 .dword 0dh -003990r 1 0E 00 00 00 .dword 0eh -003994r 1 0F 00 00 00 .dword 0fh -003998r 1 10 00 00 00 .dword 010h -00399Cr 1 11 00 00 00 .dword 011h -0039A0r 1 12 00 00 00 .dword 012h -0039A4r 1 13 00 00 00 .dword 013h -0039A8r 1 70 00 00 00 .dword 070h -0039ACr 1 71 00 00 00 .dword 071h -0039B0r 1 72 00 00 00 .dword 072h -0039B4r 1 73 00 00 00 .dword 073h -0039B8r 1 74 00 00 00 .dword 074h -0039BCr 1 75 00 00 00 .dword 075h -0039C0r 1 76 00 00 00 .dword 076h -0039C4r 1 77 00 00 00 .dword 077h -0039C8r 1 78 00 00 00 .dword 078h -0039CCr 1 79 00 00 00 .dword 079h -0039D0r 1 7A 00 00 00 .dword 07ah -0039D4r 1 7B 00 00 00 .dword 07bh -0039D8r 1 7C 00 00 00 .dword 07ch -0039DCr 1 7D 00 00 00 .dword 07dh -0039E0r 1 7E 00 00 00 .dword 07eh -0039E4r 1 7F 00 00 00 .dword 07fh -0039E8r 1 80 00 00 00 .dword 080h -0039ECr 1 81 00 00 00 .dword 081h -0039F0r 1 82 00 00 00 .dword 082h -0039F4r 1 83 00 00 00 .dword 083h -0039F8r 1 84 00 00 00 .dword 084h -0039FCr 1 85 00 00 00 .dword 085h -003A00r 1 86 00 00 00 .dword 086h -003A04r 1 F0 00 00 00 .dword 0f0h -003A08r 1 F1 00 00 00 .dword 0f1h -003A0Cr 1 F2 00 00 00 .dword 0f2h -003A10r 1 F3 00 00 00 .dword 0f3h -003A14r 1 F4 00 00 00 .dword 0f4h -003A18r 1 F5 00 00 00 .dword 0f5h -003A1Cr 1 F6 00 00 00 .dword 0f6h -003A20r 1 F7 00 00 00 .dword 0f7h -003A24r 1 F8 00 00 00 .dword 0f8h -003A28r 1 F9 00 00 00 .dword 0f9h -003A2Cr 1 FA 00 00 00 .dword 0fah -003A30r 1 FB 00 00 00 .dword 0fbh -003A34r 1 FC 00 00 00 .dword 0fch -003A38r 1 FD 00 00 00 .dword 0fdh -003A3Cr 1 FE 00 00 00 .dword 0feh -003A40r 1 FF 00 00 00 .dword 0ffh -003A44r 1 00 01 00 00 .dword 0100h -003A48r 1 01 01 00 00 .dword 0101h -003A4Cr 1 02 01 00 00 .dword 0102h -003A50r 1 03 01 00 00 .dword 0103h -003A54r 1 D2 0F 00 00 .dword 0fd2h -003A58r 1 D3 0F 00 00 .dword 0fd3h -003A5Cr 1 D4 0F 00 00 .dword 0fd4h -003A60r 1 D5 0F 00 00 .dword 0fd5h -003A64r 1 D6 0F 00 00 .dword 0fd6h -003A68r 1 D7 0F 00 00 .dword 0fd7h -003A6Cr 1 D8 0F 00 00 .dword 0fd8h -003A70r 1 D9 0F 00 00 .dword 0fd9h -003A74r 1 DA 0F 00 00 .dword 0fdah -003A78r 1 DB 0F 00 00 .dword 0fdbh -003A7Cr 1 DC 0F 00 00 .dword 0fdch -003A80r 1 DD 0F 00 00 .dword 0fddh -003A84r 1 DE 0F 00 00 .dword 0fdeh -003A88r 1 DF 0F 00 00 .dword 0fdfh -003A8Cr 1 E0 0F 00 00 .dword 0fe0h -003A90r 1 E1 0F 00 00 .dword 0fe1h -003A94r 1 E2 0F 00 00 .dword 0fe2h -003A98r 1 E3 0F 00 00 .dword 0fe3h -003A9Cr 1 E4 0F 00 00 .dword 0fe4h -003AA0r 1 E5 0F 00 00 .dword 0fe5h -003AA4r 1 E6 0F 00 00 .dword 0fe6h -003AA8r 1 E7 0F 00 00 .dword 0fe7h -003AACr 1 E8 0F 00 00 .dword 0fe8h -003AB0r 1 E9 0F 00 00 .dword 0fe9h -003AB4r 1 EA 0F 00 00 .dword 0feah -003AB8r 1 EB 0F 00 00 .dword 0febh -003ABCr 1 EC 0F 00 00 .dword 0fech -003AC0r 1 ED 0F 00 00 .dword 0fedh -003AC4r 1 EE 0F 00 00 .dword 0feeh -003AC8r 1 EF 0F 00 00 .dword 0fefh -003ACCr 1 F0 0F 00 00 .dword 0ff0h -003AD0r 1 F1 0F 00 00 .dword 0ff1h -003AD4r 1 F2 0F 00 00 .dword 0ff2h -003AD8r 1 F3 0F 00 00 .dword 0ff3h -003ADCr 1 F4 0F 00 00 .dword 0ff4h -003AE0r 1 F5 0F 00 00 .dword 0ff5h -003AE4r 1 F6 0F 00 00 .dword 0ff6h -003AE8r 1 F7 0F 00 00 .dword 0ff7h -003AECr 1 F8 0F 00 00 .dword 0ff8h -003AF0r 1 F9 0F 00 00 .dword 0ff9h -003AF4r 1 FA 0F 00 00 .dword 0ffah -003AF8r 1 FB 0F 00 00 .dword 0ffbh -003AFCr 1 FC 0F 00 00 .dword 0ffch -003B00r 1 FD 0F 00 00 .dword 0ffdh -003B04r 1 FE 0F 00 00 .dword 0ffeh -003B08r 1 FF 0F 00 00 .dword 0fffh -003B0Cr 1 00 10 00 00 .dword 01000h -003B10r 1 01 10 00 00 .dword 01001h -003B14r 1 02 10 00 00 .dword 01002h -003B18r 1 03 10 00 00 .dword 01003h -003B1Cr 1 04 10 00 00 .dword 01004h -003B20r 1 05 10 00 00 .dword 01005h -003B24r 1 06 10 00 00 .dword 01006h -003B28r 1 07 10 00 00 .dword 01007h -003B2Cr 1 08 10 00 00 .dword 01008h -003B30r 1 F0 7F 00 00 .dword 07ff0h -003B34r 1 F1 7F 00 00 .dword 07ff1h -003B38r 1 F2 7F 00 00 .dword 07ff2h -003B3Cr 1 F3 7F 00 00 .dword 07ff3h -003B40r 1 F4 7F 00 00 .dword 07ff4h -003B44r 1 F5 7F 00 00 .dword 07ff5h -003B48r 1 F6 7F 00 00 .dword 07ff6h -003B4Cr 1 F7 7F 00 00 .dword 07ff7h -003B50r 1 F8 7F 00 00 .dword 07ff8h -003B54r 1 F9 7F 00 00 .dword 07ff9h -003B58r 1 FA 7F 00 00 .dword 07ffah -003B5Cr 1 FB 7F 00 00 .dword 07ffbh -003B60r 1 FC 7F 00 00 .dword 07ffch -003B64r 1 FD 7F 00 00 .dword 07ffdh -003B68r 1 FE 7F 00 00 .dword 07ffeh -003B6Cr 1 FF 7F 00 00 .dword 07fffh -003B70r 1 00 80 00 00 .dword 08000h -003B74r 1 01 80 00 00 .dword 08001h -003B78r 1 02 80 00 00 .dword 08002h -003B7Cr 1 03 80 00 00 .dword 08003h -003B80r 1 04 80 00 00 .dword 08004h -003B84r 1 05 80 00 00 .dword 08005h -003B88r 1 06 80 00 00 .dword 08006h -003B8Cr 1 07 80 00 00 .dword 08007h -003B90r 1 08 80 00 00 .dword 08008h -003B94r 1 09 80 00 00 .dword 08009h -003B98r 1 0A 80 00 00 .dword 0800ah -003B9Cr 1 0B 80 00 00 .dword 0800bh -003BA0r 1 E1 9F 00 00 .dword 09fe1h -003BA4r 1 E2 9F 00 00 .dword 09fe2h -003BA8r 1 E3 9F 00 00 .dword 09fe3h -003BACr 1 E4 9F 00 00 .dword 09fe4h -003BB0r 1 E5 9F 00 00 .dword 09fe5h -003BB4r 1 E6 9F 00 00 .dword 09fe6h -003BB8r 1 E7 9F 00 00 .dword 09fe7h -003BBCr 1 E8 9F 00 00 .dword 09fe8h -003BC0r 1 E9 9F 00 00 .dword 09fe9h -003BC4r 1 EA 9F 00 00 .dword 09feah -003BC8r 1 EB 9F 00 00 .dword 09febh -003BCCr 1 EC 9F 00 00 .dword 09fech -003BD0r 1 ED 9F 00 00 .dword 09fedh -003BD4r 1 EE 9F 00 00 .dword 09feeh -003BD8r 1 EF 9F 00 00 .dword 09fefh -003BDCr 1 F0 9F 00 00 .dword 09ff0h -003BE0r 1 F1 9F 00 00 .dword 09ff1h -003BE4r 1 F2 9F 00 00 .dword 09ff2h -003BE8r 1 F3 9F 00 00 .dword 09ff3h -003BECr 1 F4 9F 00 00 .dword 09ff4h -003BF0r 1 F5 9F 00 00 .dword 09ff5h -003BF4r 1 F6 9F 00 00 .dword 09ff6h -003BF8r 1 F7 9F 00 00 .dword 09ff7h -003BFCr 1 F8 9F 00 00 .dword 09ff8h -003C00r 1 F9 9F 00 00 .dword 09ff9h -003C04r 1 FA 9F 00 00 .dword 09ffah -003C08r 1 FB 9F 00 00 .dword 09ffbh -003C0Cr 1 FC 9F 00 00 .dword 09ffch -003C10r 1 FD 9F 00 00 .dword 09ffdh -003C14r 1 FE 9F 00 00 .dword 09ffeh -003C18r 1 FF 9F 00 00 .dword 09fffh -003C1Cr 1 00 A0 00 00 .dword 0a000h -003C20r 1 01 A0 00 00 .dword 0a001h -003C24r 1 02 A0 00 00 .dword 0a002h -003C28r 1 03 A0 00 00 .dword 0a003h -003C2Cr 1 04 A0 00 00 .dword 0a004h -003C30r 1 05 A0 00 00 .dword 0a005h -003C34r 1 06 A0 00 00 .dword 0a006h -003C38r 1 07 A0 00 00 .dword 0a007h -003C3Cr 1 08 A0 00 00 .dword 0a008h -003C40r 1 09 A0 00 00 .dword 0a009h -003C44r 1 0A A0 00 00 .dword 0a00ah -003C48r 1 0B A0 00 00 .dword 0a00bh -003C4Cr 1 0C A0 00 00 .dword 0a00ch -003C50r 1 0D A0 00 00 .dword 0a00dh -003C54r 1 0E A0 00 00 .dword 0a00eh -003C58r 1 0F A0 00 00 .dword 0a00fh -003C5Cr 1 E1 AF 00 00 .dword 0afe1h -003C60r 1 E2 AF 00 00 .dword 0afe2h -003C64r 1 E3 AF 00 00 .dword 0afe3h -003C68r 1 E4 AF 00 00 .dword 0afe4h -003C6Cr 1 E5 AF 00 00 .dword 0afe5h -003C70r 1 E6 AF 00 00 .dword 0afe6h -003C74r 1 E7 AF 00 00 .dword 0afe7h -003C78r 1 E8 AF 00 00 .dword 0afe8h -003C7Cr 1 E9 AF 00 00 .dword 0afe9h -003C80r 1 EA AF 00 00 .dword 0afeah -003C84r 1 EB AF 00 00 .dword 0afebh -003C88r 1 EC AF 00 00 .dword 0afech -003C8Cr 1 ED AF 00 00 .dword 0afedh -003C90r 1 EE AF 00 00 .dword 0afeeh -003C94r 1 EF AF 00 00 .dword 0afefh -003C98r 1 F0 AF 00 00 .dword 0aff0h -003C9Cr 1 F1 AF 00 00 .dword 0aff1h -003CA0r 1 F2 AF 00 00 .dword 0aff2h -003CA4r 1 F3 AF 00 00 .dword 0aff3h -003CA8r 1 F4 AF 00 00 .dword 0aff4h -003CACr 1 F5 AF 00 00 .dword 0aff5h -003CB0r 1 F6 AF 00 00 .dword 0aff6h -003CB4r 1 F7 AF 00 00 .dword 0aff7h -003CB8r 1 F8 AF 00 00 .dword 0aff8h -003CBCr 1 F9 AF 00 00 .dword 0aff9h -003CC0r 1 FA AF 00 00 .dword 0affah -003CC4r 1 FB AF 00 00 .dword 0affbh -003CC8r 1 FC AF 00 00 .dword 0affch -003CCCr 1 FD AF 00 00 .dword 0affdh -003CD0r 1 FE AF 00 00 .dword 0affeh -003CD4r 1 FF AF 00 00 .dword 0afffh -003CD8r 1 00 B0 00 00 .dword 0b000h -003CDCr 1 01 B0 00 00 .dword 0b001h -003CE0r 1 02 B0 00 00 .dword 0b002h -003CE4r 1 03 B0 00 00 .dword 0b003h -003CE8r 1 04 B0 00 00 .dword 0b004h -003CECr 1 05 B0 00 00 .dword 0b005h -003CF0r 1 06 B0 00 00 .dword 0b006h -003CF4r 1 07 B0 00 00 .dword 0b007h -003CF8r 1 08 B0 00 00 .dword 0b008h -003CFCr 1 09 B0 00 00 .dword 0b009h -003D00r 1 0A B0 00 00 .dword 0b00ah -003D04r 1 0B B0 00 00 .dword 0b00bh -003D08r 1 0C B0 00 00 .dword 0b00ch -003D0Cr 1 0D B0 00 00 .dword 0b00dh -003D10r 1 0E B0 00 00 .dword 0b00eh -003D14r 1 0F B0 00 00 .dword 0b00fh -003D18r 1 E1 FF 00 00 .dword 0ffe1h -003D1Cr 1 E2 FF 00 00 .dword 0ffe2h -003D20r 1 E3 FF 00 00 .dword 0ffe3h -003D24r 1 E4 FF 00 00 .dword 0ffe4h -003D28r 1 E5 FF 00 00 .dword 0ffe5h -003D2Cr 1 E6 FF 00 00 .dword 0ffe6h -003D30r 1 E7 FF 00 00 .dword 0ffe7h -003D34r 1 E8 FF 00 00 .dword 0ffe8h -003D38r 1 E9 FF 00 00 .dword 0ffe9h -003D3Cr 1 EA FF 00 00 .dword 0ffeah -003D40r 1 EB FF 00 00 .dword 0ffebh -003D44r 1 EC FF 00 00 .dword 0ffech -003D48r 1 ED FF 00 00 .dword 0ffedh -003D4Cr 1 EE FF 00 00 .dword 0ffeeh -003D50r 1 EF FF 00 00 .dword 0ffefh -003D54r 1 F0 FF 00 00 .dword 0fff0h -003D58r 1 F1 FF 00 00 .dword 0fff1h -003D5Cr 1 F2 FF 00 00 .dword 0fff2h -003D60r 1 F3 FF 00 00 .dword 0fff3h -003D64r 1 F4 FF 00 00 .dword 0fff4h -003D68r 1 F5 FF 00 00 .dword 0fff5h -003D6Cr 1 F6 FF 00 00 .dword 0fff6h -003D70r 1 F7 FF 00 00 .dword 0fff7h -003D74r 1 F8 FF 00 00 .dword 0fff8h -003D78r 1 F9 FF 00 00 .dword 0fff9h -003D7Cr 1 FA FF 00 00 .dword 0fffah -003D80r 1 FB FF 00 00 .dword 0fffbh -003D84r 1 FC FF 00 00 .dword 0fffch -003D88r 1 FD FF 00 00 .dword 0fffdh -003D8Cr 1 FE FF 00 00 .dword 0fffeh -003D90r 1 FF FF 00 00 .dword 0ffffh -003D94r 1 00 00 01 00 .dword 010000h -003D98r 1 01 00 01 00 .dword 010001h -003D9Cr 1 02 00 01 00 .dword 010002h -003DA0r 1 03 00 01 00 .dword 010003h -003DA4r 1 04 00 01 00 .dword 010004h -003DA8r 1 05 00 01 00 .dword 010005h -003DACr 1 06 00 01 00 .dword 010006h -003DB0r 1 07 00 01 00 .dword 010007h -003DB4r 1 08 00 01 00 .dword 010008h -003DB8r 1 09 00 01 00 .dword 010009h -003DBCr 1 0A 00 01 00 .dword 01000ah -003DC0r 1 0B 00 01 00 .dword 01000bh -003DC4r 1 0C 00 01 00 .dword 01000ch -003DC8r 1 0D 00 01 00 .dword 01000dh -003DCCr 1 0E 00 01 00 .dword 01000eh -003DD0r 1 0F 00 01 00 .dword 01000fh -003DD4r 1 F0 FF FF 7F .dword 07ffffff0h -003DD8r 1 F1 FF FF 7F .dword 07ffffff1h -003DDCr 1 F2 FF FF 7F .dword 07ffffff2h -003DE0r 1 F3 FF FF 7F .dword 07ffffff3h -003DE4r 1 F4 FF FF 7F .dword 07ffffff4h -003DE8r 1 F5 FF FF 7F .dword 07ffffff5h -003DECr 1 F6 FF FF 7F .dword 07ffffff6h -003DF0r 1 F7 FF FF 7F .dword 07ffffff7h -003DF4r 1 F8 FF FF 7F .dword 07ffffff8h -003DF8r 1 F9 FF FF 7F .dword 07ffffff9h -003DFCr 1 FA FF FF 7F .dword 07ffffffah -003E00r 1 FB FF FF 7F .dword 07ffffffbh -003E04r 1 FC FF FF 7F .dword 07ffffffch -003E08r 1 FD FF FF 7F .dword 07ffffffdh -003E0Cr 1 FE FF FF 7F .dword 07ffffffeh -003E10r 1 FF FF FF 7F .dword 07fffffffh -003E14r 1 00 00 00 80 .dword 080000000h -003E18r 1 01 00 00 80 .dword 080000001h -003E1Cr 1 02 00 00 80 .dword 080000002h -003E20r 1 03 00 00 80 .dword 080000003h -003E24r 1 04 00 00 80 .dword 080000004h -003E28r 1 05 00 00 80 .dword 080000005h -003E2Cr 1 06 00 00 80 .dword 080000006h -003E30r 1 07 00 00 80 .dword 080000007h -003E34r 1 08 00 00 80 .dword 080000008h -003E38r 1 09 00 00 80 .dword 080000009h -003E3Cr 1 0A 00 00 80 .dword 08000000ah -003E40r 1 0B 00 00 80 .dword 08000000bh -003E44r 1 0C 00 00 80 .dword 08000000ch -003E48r 1 0D 00 00 80 .dword 08000000dh -003E4Cr 1 0E 00 00 80 .dword 08000000eh -003E50r 1 0F 00 00 80 .dword 08000000fh -003E54r 1 F0 FF FF 9F .dword 09ffffff0h -003E58r 1 F1 FF FF 9F .dword 09ffffff1h -003E5Cr 1 F2 FF FF 9F .dword 09ffffff2h -003E60r 1 F3 FF FF 9F .dword 09ffffff3h -003E64r 1 F4 FF FF 9F .dword 09ffffff4h -003E68r 1 F5 FF FF 9F .dword 09ffffff5h -003E6Cr 1 F6 FF FF 9F .dword 09ffffff6h -003E70r 1 F7 FF FF 9F .dword 09ffffff7h -003E74r 1 F8 FF FF 9F .dword 09ffffff8h -003E78r 1 F9 FF FF 9F .dword 09ffffff9h -003E7Cr 1 FA FF FF 9F .dword 09ffffffah -003E80r 1 FB FF FF 9F .dword 09ffffffbh -003E84r 1 FC FF FF 9F .dword 09ffffffch -003E88r 1 FD FF FF 9F .dword 09ffffffdh -003E8Cr 1 FE FF FF 9F .dword 09ffffffeh -003E90r 1 FF FF FF 9F .dword 09fffffffh -003E94r 1 00 00 00 A0 .dword 0a0000000h -003E98r 1 01 00 00 A0 .dword 0a0000001h -003E9Cr 1 02 00 00 A0 .dword 0a0000002h -003EA0r 1 03 00 00 A0 .dword 0a0000003h -003EA4r 1 04 00 00 A0 .dword 0a0000004h -003EA8r 1 05 00 00 A0 .dword 0a0000005h -003EACr 1 06 00 00 A0 .dword 0a0000006h -003EB0r 1 07 00 00 A0 .dword 0a0000007h -003EB4r 1 08 00 00 A0 .dword 0a0000008h -003EB8r 1 09 00 00 A0 .dword 0a0000009h -003EBCr 1 0A 00 00 A0 .dword 0a000000ah -003EC0r 1 0B 00 00 A0 .dword 0a000000bh -003EC4r 1 0C 00 00 A0 .dword 0a000000ch -003EC8r 1 0D 00 00 A0 .dword 0a000000dh -003ECCr 1 0E 00 00 A0 .dword 0a000000eh -003ED0r 1 0F 00 00 A0 .dword 0a000000fh -003ED4r 1 F0 FF FF FF .dword 0fffffff0h -003ED8r 1 F1 FF FF FF .dword 0fffffff1h -003EDCr 1 F2 FF FF FF .dword 0fffffff2h -003EE0r 1 F3 FF FF FF .dword 0fffffff3h -003EE4r 1 F4 FF FF FF .dword 0fffffff4h -003EE8r 1 F5 FF FF FF .dword 0fffffff5h -003EECr 1 F6 FF FF FF .dword 0fffffff6h -003EF0r 1 F7 FF FF FF .dword 0fffffff7h -003EF4r 1 F8 FF FF FF .dword 0fffffff8h -003EF8r 1 F9 FF FF FF .dword 0fffffff9h -003EFCr 1 FA FF FF FF .dword 0fffffffah -003F00r 1 FB FF FF FF .dword 0fffffffbh -003F04r 1 FC FF FF FF .dword 0fffffffch -003F08r 1 FD FF FF FF .dword 0fffffffdh -003F0Cr 1 FE FF FF FF .dword 0fffffffeh -003F10r 1 FF FF FF FF .dword 0ffffffffh +003958r 1 ; alternative hex values, always leading zero +003958r 1 00 00 00 00 .dword 00h +00395Cr 1 01 00 00 00 .dword 01h +003960r 1 02 00 00 00 .dword 02h +003964r 1 03 00 00 00 .dword 03h +003968r 1 04 00 00 00 .dword 04h +00396Cr 1 05 00 00 00 .dword 05h +003970r 1 06 00 00 00 .dword 06h +003974r 1 07 00 00 00 .dword 07h +003978r 1 08 00 00 00 .dword 08h +00397Cr 1 09 00 00 00 .dword 09h +003980r 1 0A 00 00 00 .dword 0ah +003984r 1 0B 00 00 00 .dword 0bh +003988r 1 0C 00 00 00 .dword 0ch +00398Cr 1 0D 00 00 00 .dword 0dh +003990r 1 0E 00 00 00 .dword 0eh +003994r 1 0F 00 00 00 .dword 0fh +003998r 1 10 00 00 00 .dword 010h +00399Cr 1 11 00 00 00 .dword 011h +0039A0r 1 12 00 00 00 .dword 012h +0039A4r 1 13 00 00 00 .dword 013h +0039A8r 1 70 00 00 00 .dword 070h +0039ACr 1 71 00 00 00 .dword 071h +0039B0r 1 72 00 00 00 .dword 072h +0039B4r 1 73 00 00 00 .dword 073h +0039B8r 1 74 00 00 00 .dword 074h +0039BCr 1 75 00 00 00 .dword 075h +0039C0r 1 76 00 00 00 .dword 076h +0039C4r 1 77 00 00 00 .dword 077h +0039C8r 1 78 00 00 00 .dword 078h +0039CCr 1 79 00 00 00 .dword 079h +0039D0r 1 7A 00 00 00 .dword 07ah +0039D4r 1 7B 00 00 00 .dword 07bh +0039D8r 1 7C 00 00 00 .dword 07ch +0039DCr 1 7D 00 00 00 .dword 07dh +0039E0r 1 7E 00 00 00 .dword 07eh +0039E4r 1 7F 00 00 00 .dword 07fh +0039E8r 1 80 00 00 00 .dword 080h +0039ECr 1 81 00 00 00 .dword 081h +0039F0r 1 82 00 00 00 .dword 082h +0039F4r 1 83 00 00 00 .dword 083h +0039F8r 1 84 00 00 00 .dword 084h +0039FCr 1 85 00 00 00 .dword 085h +003A00r 1 86 00 00 00 .dword 086h +003A04r 1 F0 00 00 00 .dword 0f0h +003A08r 1 F1 00 00 00 .dword 0f1h +003A0Cr 1 F2 00 00 00 .dword 0f2h +003A10r 1 F3 00 00 00 .dword 0f3h +003A14r 1 F4 00 00 00 .dword 0f4h +003A18r 1 F5 00 00 00 .dword 0f5h +003A1Cr 1 F6 00 00 00 .dword 0f6h +003A20r 1 F7 00 00 00 .dword 0f7h +003A24r 1 F8 00 00 00 .dword 0f8h +003A28r 1 F9 00 00 00 .dword 0f9h +003A2Cr 1 FA 00 00 00 .dword 0fah +003A30r 1 FB 00 00 00 .dword 0fbh +003A34r 1 FC 00 00 00 .dword 0fch +003A38r 1 FD 00 00 00 .dword 0fdh +003A3Cr 1 FE 00 00 00 .dword 0feh +003A40r 1 FF 00 00 00 .dword 0ffh +003A44r 1 00 01 00 00 .dword 0100h +003A48r 1 01 01 00 00 .dword 0101h +003A4Cr 1 02 01 00 00 .dword 0102h +003A50r 1 03 01 00 00 .dword 0103h +003A54r 1 D2 0F 00 00 .dword 0fd2h +003A58r 1 D3 0F 00 00 .dword 0fd3h +003A5Cr 1 D4 0F 00 00 .dword 0fd4h +003A60r 1 D5 0F 00 00 .dword 0fd5h +003A64r 1 D6 0F 00 00 .dword 0fd6h +003A68r 1 D7 0F 00 00 .dword 0fd7h +003A6Cr 1 D8 0F 00 00 .dword 0fd8h +003A70r 1 D9 0F 00 00 .dword 0fd9h +003A74r 1 DA 0F 00 00 .dword 0fdah +003A78r 1 DB 0F 00 00 .dword 0fdbh +003A7Cr 1 DC 0F 00 00 .dword 0fdch +003A80r 1 DD 0F 00 00 .dword 0fddh +003A84r 1 DE 0F 00 00 .dword 0fdeh +003A88r 1 DF 0F 00 00 .dword 0fdfh +003A8Cr 1 E0 0F 00 00 .dword 0fe0h +003A90r 1 E1 0F 00 00 .dword 0fe1h +003A94r 1 E2 0F 00 00 .dword 0fe2h +003A98r 1 E3 0F 00 00 .dword 0fe3h +003A9Cr 1 E4 0F 00 00 .dword 0fe4h +003AA0r 1 E5 0F 00 00 .dword 0fe5h +003AA4r 1 E6 0F 00 00 .dword 0fe6h +003AA8r 1 E7 0F 00 00 .dword 0fe7h +003AACr 1 E8 0F 00 00 .dword 0fe8h +003AB0r 1 E9 0F 00 00 .dword 0fe9h +003AB4r 1 EA 0F 00 00 .dword 0feah +003AB8r 1 EB 0F 00 00 .dword 0febh +003ABCr 1 EC 0F 00 00 .dword 0fech +003AC0r 1 ED 0F 00 00 .dword 0fedh +003AC4r 1 EE 0F 00 00 .dword 0feeh +003AC8r 1 EF 0F 00 00 .dword 0fefh +003ACCr 1 F0 0F 00 00 .dword 0ff0h +003AD0r 1 F1 0F 00 00 .dword 0ff1h +003AD4r 1 F2 0F 00 00 .dword 0ff2h +003AD8r 1 F3 0F 00 00 .dword 0ff3h +003ADCr 1 F4 0F 00 00 .dword 0ff4h +003AE0r 1 F5 0F 00 00 .dword 0ff5h +003AE4r 1 F6 0F 00 00 .dword 0ff6h +003AE8r 1 F7 0F 00 00 .dword 0ff7h +003AECr 1 F8 0F 00 00 .dword 0ff8h +003AF0r 1 F9 0F 00 00 .dword 0ff9h +003AF4r 1 FA 0F 00 00 .dword 0ffah +003AF8r 1 FB 0F 00 00 .dword 0ffbh +003AFCr 1 FC 0F 00 00 .dword 0ffch +003B00r 1 FD 0F 00 00 .dword 0ffdh +003B04r 1 FE 0F 00 00 .dword 0ffeh +003B08r 1 FF 0F 00 00 .dword 0fffh +003B0Cr 1 00 10 00 00 .dword 01000h +003B10r 1 01 10 00 00 .dword 01001h +003B14r 1 02 10 00 00 .dword 01002h +003B18r 1 03 10 00 00 .dword 01003h +003B1Cr 1 04 10 00 00 .dword 01004h +003B20r 1 05 10 00 00 .dword 01005h +003B24r 1 06 10 00 00 .dword 01006h +003B28r 1 07 10 00 00 .dword 01007h +003B2Cr 1 08 10 00 00 .dword 01008h +003B30r 1 F0 7F 00 00 .dword 07ff0h +003B34r 1 F1 7F 00 00 .dword 07ff1h +003B38r 1 F2 7F 00 00 .dword 07ff2h +003B3Cr 1 F3 7F 00 00 .dword 07ff3h +003B40r 1 F4 7F 00 00 .dword 07ff4h +003B44r 1 F5 7F 00 00 .dword 07ff5h +003B48r 1 F6 7F 00 00 .dword 07ff6h +003B4Cr 1 F7 7F 00 00 .dword 07ff7h +003B50r 1 F8 7F 00 00 .dword 07ff8h +003B54r 1 F9 7F 00 00 .dword 07ff9h +003B58r 1 FA 7F 00 00 .dword 07ffah +003B5Cr 1 FB 7F 00 00 .dword 07ffbh +003B60r 1 FC 7F 00 00 .dword 07ffch +003B64r 1 FD 7F 00 00 .dword 07ffdh +003B68r 1 FE 7F 00 00 .dword 07ffeh +003B6Cr 1 FF 7F 00 00 .dword 07fffh +003B70r 1 00 80 00 00 .dword 08000h +003B74r 1 01 80 00 00 .dword 08001h +003B78r 1 02 80 00 00 .dword 08002h +003B7Cr 1 03 80 00 00 .dword 08003h +003B80r 1 04 80 00 00 .dword 08004h +003B84r 1 05 80 00 00 .dword 08005h +003B88r 1 06 80 00 00 .dword 08006h +003B8Cr 1 07 80 00 00 .dword 08007h +003B90r 1 08 80 00 00 .dword 08008h +003B94r 1 09 80 00 00 .dword 08009h +003B98r 1 0A 80 00 00 .dword 0800ah +003B9Cr 1 0B 80 00 00 .dword 0800bh +003BA0r 1 E1 9F 00 00 .dword 09fe1h +003BA4r 1 E2 9F 00 00 .dword 09fe2h +003BA8r 1 E3 9F 00 00 .dword 09fe3h +003BACr 1 E4 9F 00 00 .dword 09fe4h +003BB0r 1 E5 9F 00 00 .dword 09fe5h +003BB4r 1 E6 9F 00 00 .dword 09fe6h +003BB8r 1 E7 9F 00 00 .dword 09fe7h +003BBCr 1 E8 9F 00 00 .dword 09fe8h +003BC0r 1 E9 9F 00 00 .dword 09fe9h +003BC4r 1 EA 9F 00 00 .dword 09feah +003BC8r 1 EB 9F 00 00 .dword 09febh +003BCCr 1 EC 9F 00 00 .dword 09fech +003BD0r 1 ED 9F 00 00 .dword 09fedh +003BD4r 1 EE 9F 00 00 .dword 09feeh +003BD8r 1 EF 9F 00 00 .dword 09fefh +003BDCr 1 F0 9F 00 00 .dword 09ff0h +003BE0r 1 F1 9F 00 00 .dword 09ff1h +003BE4r 1 F2 9F 00 00 .dword 09ff2h +003BE8r 1 F3 9F 00 00 .dword 09ff3h +003BECr 1 F4 9F 00 00 .dword 09ff4h +003BF0r 1 F5 9F 00 00 .dword 09ff5h +003BF4r 1 F6 9F 00 00 .dword 09ff6h +003BF8r 1 F7 9F 00 00 .dword 09ff7h +003BFCr 1 F8 9F 00 00 .dword 09ff8h +003C00r 1 F9 9F 00 00 .dword 09ff9h +003C04r 1 FA 9F 00 00 .dword 09ffah +003C08r 1 FB 9F 00 00 .dword 09ffbh +003C0Cr 1 FC 9F 00 00 .dword 09ffch +003C10r 1 FD 9F 00 00 .dword 09ffdh +003C14r 1 FE 9F 00 00 .dword 09ffeh +003C18r 1 FF 9F 00 00 .dword 09fffh +003C1Cr 1 00 A0 00 00 .dword 0a000h +003C20r 1 01 A0 00 00 .dword 0a001h +003C24r 1 02 A0 00 00 .dword 0a002h +003C28r 1 03 A0 00 00 .dword 0a003h +003C2Cr 1 04 A0 00 00 .dword 0a004h +003C30r 1 05 A0 00 00 .dword 0a005h +003C34r 1 06 A0 00 00 .dword 0a006h +003C38r 1 07 A0 00 00 .dword 0a007h +003C3Cr 1 08 A0 00 00 .dword 0a008h +003C40r 1 09 A0 00 00 .dword 0a009h +003C44r 1 0A A0 00 00 .dword 0a00ah +003C48r 1 0B A0 00 00 .dword 0a00bh +003C4Cr 1 0C A0 00 00 .dword 0a00ch +003C50r 1 0D A0 00 00 .dword 0a00dh +003C54r 1 0E A0 00 00 .dword 0a00eh +003C58r 1 0F A0 00 00 .dword 0a00fh +003C5Cr 1 E1 AF 00 00 .dword 0afe1h +003C60r 1 E2 AF 00 00 .dword 0afe2h +003C64r 1 E3 AF 00 00 .dword 0afe3h +003C68r 1 E4 AF 00 00 .dword 0afe4h +003C6Cr 1 E5 AF 00 00 .dword 0afe5h +003C70r 1 E6 AF 00 00 .dword 0afe6h +003C74r 1 E7 AF 00 00 .dword 0afe7h +003C78r 1 E8 AF 00 00 .dword 0afe8h +003C7Cr 1 E9 AF 00 00 .dword 0afe9h +003C80r 1 EA AF 00 00 .dword 0afeah +003C84r 1 EB AF 00 00 .dword 0afebh +003C88r 1 EC AF 00 00 .dword 0afech +003C8Cr 1 ED AF 00 00 .dword 0afedh +003C90r 1 EE AF 00 00 .dword 0afeeh +003C94r 1 EF AF 00 00 .dword 0afefh +003C98r 1 F0 AF 00 00 .dword 0aff0h +003C9Cr 1 F1 AF 00 00 .dword 0aff1h +003CA0r 1 F2 AF 00 00 .dword 0aff2h +003CA4r 1 F3 AF 00 00 .dword 0aff3h +003CA8r 1 F4 AF 00 00 .dword 0aff4h +003CACr 1 F5 AF 00 00 .dword 0aff5h +003CB0r 1 F6 AF 00 00 .dword 0aff6h +003CB4r 1 F7 AF 00 00 .dword 0aff7h +003CB8r 1 F8 AF 00 00 .dword 0aff8h +003CBCr 1 F9 AF 00 00 .dword 0aff9h +003CC0r 1 FA AF 00 00 .dword 0affah +003CC4r 1 FB AF 00 00 .dword 0affbh +003CC8r 1 FC AF 00 00 .dword 0affch +003CCCr 1 FD AF 00 00 .dword 0affdh +003CD0r 1 FE AF 00 00 .dword 0affeh +003CD4r 1 FF AF 00 00 .dword 0afffh +003CD8r 1 00 B0 00 00 .dword 0b000h +003CDCr 1 01 B0 00 00 .dword 0b001h +003CE0r 1 02 B0 00 00 .dword 0b002h +003CE4r 1 03 B0 00 00 .dword 0b003h +003CE8r 1 04 B0 00 00 .dword 0b004h +003CECr 1 05 B0 00 00 .dword 0b005h +003CF0r 1 06 B0 00 00 .dword 0b006h +003CF4r 1 07 B0 00 00 .dword 0b007h +003CF8r 1 08 B0 00 00 .dword 0b008h +003CFCr 1 09 B0 00 00 .dword 0b009h +003D00r 1 0A B0 00 00 .dword 0b00ah +003D04r 1 0B B0 00 00 .dword 0b00bh +003D08r 1 0C B0 00 00 .dword 0b00ch +003D0Cr 1 0D B0 00 00 .dword 0b00dh +003D10r 1 0E B0 00 00 .dword 0b00eh +003D14r 1 0F B0 00 00 .dword 0b00fh +003D18r 1 E1 FF 00 00 .dword 0ffe1h +003D1Cr 1 E2 FF 00 00 .dword 0ffe2h +003D20r 1 E3 FF 00 00 .dword 0ffe3h +003D24r 1 E4 FF 00 00 .dword 0ffe4h +003D28r 1 E5 FF 00 00 .dword 0ffe5h +003D2Cr 1 E6 FF 00 00 .dword 0ffe6h +003D30r 1 E7 FF 00 00 .dword 0ffe7h +003D34r 1 E8 FF 00 00 .dword 0ffe8h +003D38r 1 E9 FF 00 00 .dword 0ffe9h +003D3Cr 1 EA FF 00 00 .dword 0ffeah +003D40r 1 EB FF 00 00 .dword 0ffebh +003D44r 1 EC FF 00 00 .dword 0ffech +003D48r 1 ED FF 00 00 .dword 0ffedh +003D4Cr 1 EE FF 00 00 .dword 0ffeeh +003D50r 1 EF FF 00 00 .dword 0ffefh +003D54r 1 F0 FF 00 00 .dword 0fff0h +003D58r 1 F1 FF 00 00 .dword 0fff1h +003D5Cr 1 F2 FF 00 00 .dword 0fff2h +003D60r 1 F3 FF 00 00 .dword 0fff3h +003D64r 1 F4 FF 00 00 .dword 0fff4h +003D68r 1 F5 FF 00 00 .dword 0fff5h +003D6Cr 1 F6 FF 00 00 .dword 0fff6h +003D70r 1 F7 FF 00 00 .dword 0fff7h +003D74r 1 F8 FF 00 00 .dword 0fff8h +003D78r 1 F9 FF 00 00 .dword 0fff9h +003D7Cr 1 FA FF 00 00 .dword 0fffah +003D80r 1 FB FF 00 00 .dword 0fffbh +003D84r 1 FC FF 00 00 .dword 0fffch +003D88r 1 FD FF 00 00 .dword 0fffdh +003D8Cr 1 FE FF 00 00 .dword 0fffeh +003D90r 1 FF FF 00 00 .dword 0ffffh +003D94r 1 00 00 01 00 .dword 010000h +003D98r 1 01 00 01 00 .dword 010001h +003D9Cr 1 02 00 01 00 .dword 010002h +003DA0r 1 03 00 01 00 .dword 010003h +003DA4r 1 04 00 01 00 .dword 010004h +003DA8r 1 05 00 01 00 .dword 010005h +003DACr 1 06 00 01 00 .dword 010006h +003DB0r 1 07 00 01 00 .dword 010007h +003DB4r 1 08 00 01 00 .dword 010008h +003DB8r 1 09 00 01 00 .dword 010009h +003DBCr 1 0A 00 01 00 .dword 01000ah +003DC0r 1 0B 00 01 00 .dword 01000bh +003DC4r 1 0C 00 01 00 .dword 01000ch +003DC8r 1 0D 00 01 00 .dword 01000dh +003DCCr 1 0E 00 01 00 .dword 01000eh +003DD0r 1 0F 00 01 00 .dword 01000fh +003DD4r 1 F0 FF FF 7F .dword 07ffffff0h +003DD8r 1 F1 FF FF 7F .dword 07ffffff1h +003DDCr 1 F2 FF FF 7F .dword 07ffffff2h +003DE0r 1 F3 FF FF 7F .dword 07ffffff3h +003DE4r 1 F4 FF FF 7F .dword 07ffffff4h +003DE8r 1 F5 FF FF 7F .dword 07ffffff5h +003DECr 1 F6 FF FF 7F .dword 07ffffff6h +003DF0r 1 F7 FF FF 7F .dword 07ffffff7h +003DF4r 1 F8 FF FF 7F .dword 07ffffff8h +003DF8r 1 F9 FF FF 7F .dword 07ffffff9h +003DFCr 1 FA FF FF 7F .dword 07ffffffah +003E00r 1 FB FF FF 7F .dword 07ffffffbh +003E04r 1 FC FF FF 7F .dword 07ffffffch +003E08r 1 FD FF FF 7F .dword 07ffffffdh +003E0Cr 1 FE FF FF 7F .dword 07ffffffeh +003E10r 1 FF FF FF 7F .dword 07fffffffh +003E14r 1 00 00 00 80 .dword 080000000h +003E18r 1 01 00 00 80 .dword 080000001h +003E1Cr 1 02 00 00 80 .dword 080000002h +003E20r 1 03 00 00 80 .dword 080000003h +003E24r 1 04 00 00 80 .dword 080000004h +003E28r 1 05 00 00 80 .dword 080000005h +003E2Cr 1 06 00 00 80 .dword 080000006h +003E30r 1 07 00 00 80 .dword 080000007h +003E34r 1 08 00 00 80 .dword 080000008h +003E38r 1 09 00 00 80 .dword 080000009h +003E3Cr 1 0A 00 00 80 .dword 08000000ah +003E40r 1 0B 00 00 80 .dword 08000000bh +003E44r 1 0C 00 00 80 .dword 08000000ch +003E48r 1 0D 00 00 80 .dword 08000000dh +003E4Cr 1 0E 00 00 80 .dword 08000000eh +003E50r 1 0F 00 00 80 .dword 08000000fh +003E54r 1 F0 FF FF 9F .dword 09ffffff0h +003E58r 1 F1 FF FF 9F .dword 09ffffff1h +003E5Cr 1 F2 FF FF 9F .dword 09ffffff2h +003E60r 1 F3 FF FF 9F .dword 09ffffff3h +003E64r 1 F4 FF FF 9F .dword 09ffffff4h +003E68r 1 F5 FF FF 9F .dword 09ffffff5h +003E6Cr 1 F6 FF FF 9F .dword 09ffffff6h +003E70r 1 F7 FF FF 9F .dword 09ffffff7h +003E74r 1 F8 FF FF 9F .dword 09ffffff8h +003E78r 1 F9 FF FF 9F .dword 09ffffff9h +003E7Cr 1 FA FF FF 9F .dword 09ffffffah +003E80r 1 FB FF FF 9F .dword 09ffffffbh +003E84r 1 FC FF FF 9F .dword 09ffffffch +003E88r 1 FD FF FF 9F .dword 09ffffffdh +003E8Cr 1 FE FF FF 9F .dword 09ffffffeh +003E90r 1 FF FF FF 9F .dword 09fffffffh +003E94r 1 00 00 00 A0 .dword 0a0000000h +003E98r 1 01 00 00 A0 .dword 0a0000001h +003E9Cr 1 02 00 00 A0 .dword 0a0000002h +003EA0r 1 03 00 00 A0 .dword 0a0000003h +003EA4r 1 04 00 00 A0 .dword 0a0000004h +003EA8r 1 05 00 00 A0 .dword 0a0000005h +003EACr 1 06 00 00 A0 .dword 0a0000006h +003EB0r 1 07 00 00 A0 .dword 0a0000007h +003EB4r 1 08 00 00 A0 .dword 0a0000008h +003EB8r 1 09 00 00 A0 .dword 0a0000009h +003EBCr 1 0A 00 00 A0 .dword 0a000000ah +003EC0r 1 0B 00 00 A0 .dword 0a000000bh +003EC4r 1 0C 00 00 A0 .dword 0a000000ch +003EC8r 1 0D 00 00 A0 .dword 0a000000dh +003ECCr 1 0E 00 00 A0 .dword 0a000000eh +003ED0r 1 0F 00 00 A0 .dword 0a000000fh +003ED4r 1 F0 FF FF FF .dword 0fffffff0h +003ED8r 1 F1 FF FF FF .dword 0fffffff1h +003EDCr 1 F2 FF FF FF .dword 0fffffff2h +003EE0r 1 F3 FF FF FF .dword 0fffffff3h +003EE4r 1 F4 FF FF FF .dword 0fffffff4h +003EE8r 1 F5 FF FF FF .dword 0fffffff5h +003EECr 1 F6 FF FF FF .dword 0fffffff6h +003EF0r 1 F7 FF FF FF .dword 0fffffff7h +003EF4r 1 F8 FF FF FF .dword 0fffffff8h +003EF8r 1 F9 FF FF FF .dword 0fffffff9h +003EFCr 1 FA FF FF FF .dword 0fffffffah +003F00r 1 FB FF FF FF .dword 0fffffffbh +003F04r 1 FC FF FF FF .dword 0fffffffch +003F08r 1 FD FF FF FF .dword 0fffffffdh +003F0Cr 1 FE FF FF FF .dword 0fffffffeh +003F10r 1 FF FF FF FF .dword 0ffffffffh 003F14r 1 -003F14r 1 ; binary values, variable length -003F14r 1 00 00 00 00 .dword %0 -003F18r 1 01 00 00 00 .dword %01 -003F1Cr 1 02 00 00 00 .dword %010 -003F20r 1 03 00 00 00 .dword %011 -003F24r 1 04 00 00 00 .dword %0100 -003F28r 1 05 00 00 00 .dword %0101 -003F2Cr 1 06 00 00 00 .dword %0110 -003F30r 1 07 00 00 00 .dword %0111 -003F34r 1 08 00 00 00 .dword %01000 -003F38r 1 09 00 00 00 .dword %01001 -003F3Cr 1 0A 00 00 00 .dword %01010 -003F40r 1 0B 00 00 00 .dword %01011 -003F44r 1 0C 00 00 00 .dword %01100 -003F48r 1 0D 00 00 00 .dword %01101 -003F4Cr 1 0E 00 00 00 .dword %01110 -003F50r 1 0F 00 00 00 .dword %01111 -003F54r 1 10 00 00 00 .dword %010000 -003F58r 1 11 00 00 00 .dword %010001 -003F5Cr 1 12 00 00 00 .dword %010010 -003F60r 1 13 00 00 00 .dword %010011 -003F64r 1 70 00 00 00 .dword %01110000 -003F68r 1 71 00 00 00 .dword %01110001 -003F6Cr 1 72 00 00 00 .dword %01110010 -003F70r 1 73 00 00 00 .dword %01110011 -003F74r 1 74 00 00 00 .dword %01110100 -003F78r 1 75 00 00 00 .dword %01110101 -003F7Cr 1 76 00 00 00 .dword %01110110 -003F80r 1 77 00 00 00 .dword %01110111 -003F84r 1 78 00 00 00 .dword %01111000 -003F88r 1 79 00 00 00 .dword %01111001 -003F8Cr 1 7A 00 00 00 .dword %01111010 -003F90r 1 7B 00 00 00 .dword %01111011 -003F94r 1 7C 00 00 00 .dword %01111100 -003F98r 1 7D 00 00 00 .dword %01111101 -003F9Cr 1 7E 00 00 00 .dword %01111110 -003FA0r 1 7F 00 00 00 .dword %01111111 -003FA4r 1 80 00 00 00 .dword %010000000 -003FA8r 1 81 00 00 00 .dword %010000001 -003FACr 1 82 00 00 00 .dword %010000010 -003FB0r 1 83 00 00 00 .dword %010000011 -003FB4r 1 84 00 00 00 .dword %010000100 -003FB8r 1 85 00 00 00 .dword %010000101 -003FBCr 1 86 00 00 00 .dword %010000110 -003FC0r 1 F0 00 00 00 .dword %011110000 -003FC4r 1 F1 00 00 00 .dword %011110001 -003FC8r 1 F2 00 00 00 .dword %011110010 -003FCCr 1 F3 00 00 00 .dword %011110011 -003FD0r 1 F4 00 00 00 .dword %011110100 -003FD4r 1 F5 00 00 00 .dword %011110101 -003FD8r 1 F6 00 00 00 .dword %011110110 -003FDCr 1 F7 00 00 00 .dword %011110111 -003FE0r 1 F8 00 00 00 .dword %011111000 -003FE4r 1 F9 00 00 00 .dword %011111001 -003FE8r 1 FA 00 00 00 .dword %011111010 -003FECr 1 FB 00 00 00 .dword %011111011 -003FF0r 1 FC 00 00 00 .dword %011111100 -003FF4r 1 FD 00 00 00 .dword %011111101 -003FF8r 1 FE 00 00 00 .dword %011111110 -003FFCr 1 FF 00 00 00 .dword %011111111 -004000r 1 00 01 00 00 .dword %0100000000 -004004r 1 01 01 00 00 .dword %0100000001 -004008r 1 02 01 00 00 .dword %0100000010 -00400Cr 1 03 01 00 00 .dword %0100000011 -004010r 1 D2 0F 00 00 .dword %0111111010010 -004014r 1 D3 0F 00 00 .dword %0111111010011 -004018r 1 D4 0F 00 00 .dword %0111111010100 -00401Cr 1 D5 0F 00 00 .dword %0111111010101 -004020r 1 D6 0F 00 00 .dword %0111111010110 -004024r 1 D7 0F 00 00 .dword %0111111010111 -004028r 1 D8 0F 00 00 .dword %0111111011000 -00402Cr 1 D9 0F 00 00 .dword %0111111011001 -004030r 1 DA 0F 00 00 .dword %0111111011010 -004034r 1 DB 0F 00 00 .dword %0111111011011 -004038r 1 DC 0F 00 00 .dword %0111111011100 -00403Cr 1 DD 0F 00 00 .dword %0111111011101 -004040r 1 DE 0F 00 00 .dword %0111111011110 -004044r 1 DF 0F 00 00 .dword %0111111011111 -004048r 1 E0 0F 00 00 .dword %0111111100000 -00404Cr 1 E1 0F 00 00 .dword %0111111100001 -004050r 1 E2 0F 00 00 .dword %0111111100010 -004054r 1 E3 0F 00 00 .dword %0111111100011 -004058r 1 E4 0F 00 00 .dword %0111111100100 -00405Cr 1 E5 0F 00 00 .dword %0111111100101 -004060r 1 E6 0F 00 00 .dword %0111111100110 -004064r 1 E7 0F 00 00 .dword %0111111100111 -004068r 1 E8 0F 00 00 .dword %0111111101000 -00406Cr 1 E9 0F 00 00 .dword %0111111101001 -004070r 1 EA 0F 00 00 .dword %0111111101010 -004074r 1 EB 0F 00 00 .dword %0111111101011 -004078r 1 EC 0F 00 00 .dword %0111111101100 -00407Cr 1 ED 0F 00 00 .dword %0111111101101 -004080r 1 EE 0F 00 00 .dword %0111111101110 -004084r 1 EF 0F 00 00 .dword %0111111101111 -004088r 1 F0 0F 00 00 .dword %0111111110000 -00408Cr 1 F1 0F 00 00 .dword %0111111110001 -004090r 1 F2 0F 00 00 .dword %0111111110010 -004094r 1 F3 0F 00 00 .dword %0111111110011 -004098r 1 F4 0F 00 00 .dword %0111111110100 -00409Cr 1 F5 0F 00 00 .dword %0111111110101 -0040A0r 1 F6 0F 00 00 .dword %0111111110110 -0040A4r 1 F7 0F 00 00 .dword %0111111110111 -0040A8r 1 F8 0F 00 00 .dword %0111111111000 -0040ACr 1 F9 0F 00 00 .dword %0111111111001 -0040B0r 1 FA 0F 00 00 .dword %0111111111010 -0040B4r 1 FB 0F 00 00 .dword %0111111111011 -0040B8r 1 FC 0F 00 00 .dword %0111111111100 -0040BCr 1 FD 0F 00 00 .dword %0111111111101 -0040C0r 1 FE 0F 00 00 .dword %0111111111110 -0040C4r 1 FF 0F 00 00 .dword %0111111111111 -0040C8r 1 00 10 00 00 .dword %01000000000000 -0040CCr 1 01 10 00 00 .dword %01000000000001 -0040D0r 1 02 10 00 00 .dword %01000000000010 -0040D4r 1 03 10 00 00 .dword %01000000000011 -0040D8r 1 04 10 00 00 .dword %01000000000100 -0040DCr 1 05 10 00 00 .dword %01000000000101 -0040E0r 1 06 10 00 00 .dword %01000000000110 -0040E4r 1 07 10 00 00 .dword %01000000000111 -0040E8r 1 08 10 00 00 .dword %01000000001000 -0040ECr 1 F0 7F 00 00 .dword %0111111111110000 -0040F0r 1 F1 7F 00 00 .dword %0111111111110001 -0040F4r 1 F2 7F 00 00 .dword %0111111111110010 -0040F8r 1 F3 7F 00 00 .dword %0111111111110011 -0040FCr 1 F4 7F 00 00 .dword %0111111111110100 -004100r 1 F5 7F 00 00 .dword %0111111111110101 -004104r 1 F6 7F 00 00 .dword %0111111111110110 -004108r 1 F7 7F 00 00 .dword %0111111111110111 -00410Cr 1 F8 7F 00 00 .dword %0111111111111000 -004110r 1 F9 7F 00 00 .dword %0111111111111001 -004114r 1 FA 7F 00 00 .dword %0111111111111010 -004118r 1 FB 7F 00 00 .dword %0111111111111011 -00411Cr 1 FC 7F 00 00 .dword %0111111111111100 -004120r 1 FD 7F 00 00 .dword %0111111111111101 -004124r 1 FE 7F 00 00 .dword %0111111111111110 -004128r 1 FF 7F 00 00 .dword %0111111111111111 -00412Cr 1 00 80 00 00 .dword %01000000000000000 -004130r 1 01 80 00 00 .dword %01000000000000001 -004134r 1 02 80 00 00 .dword %01000000000000010 -004138r 1 03 80 00 00 .dword %01000000000000011 -00413Cr 1 04 80 00 00 .dword %01000000000000100 -004140r 1 05 80 00 00 .dword %01000000000000101 -004144r 1 06 80 00 00 .dword %01000000000000110 -004148r 1 07 80 00 00 .dword %01000000000000111 -00414Cr 1 08 80 00 00 .dword %01000000000001000 -004150r 1 09 80 00 00 .dword %01000000000001001 -004154r 1 0A 80 00 00 .dword %01000000000001010 -004158r 1 0B 80 00 00 .dword %01000000000001011 -00415Cr 1 E1 9F 00 00 .dword %01001111111100001 -004160r 1 E2 9F 00 00 .dword %01001111111100010 -004164r 1 E3 9F 00 00 .dword %01001111111100011 -004168r 1 E4 9F 00 00 .dword %01001111111100100 -00416Cr 1 E5 9F 00 00 .dword %01001111111100101 -004170r 1 E6 9F 00 00 .dword %01001111111100110 -004174r 1 E7 9F 00 00 .dword %01001111111100111 -004178r 1 E8 9F 00 00 .dword %01001111111101000 -00417Cr 1 E9 9F 00 00 .dword %01001111111101001 -004180r 1 EA 9F 00 00 .dword %01001111111101010 -004184r 1 EB 9F 00 00 .dword %01001111111101011 -004188r 1 EC 9F 00 00 .dword %01001111111101100 -00418Cr 1 ED 9F 00 00 .dword %01001111111101101 -004190r 1 EE 9F 00 00 .dword %01001111111101110 -004194r 1 EF 9F 00 00 .dword %01001111111101111 -004198r 1 F0 9F 00 00 .dword %01001111111110000 -00419Cr 1 F1 9F 00 00 .dword %01001111111110001 -0041A0r 1 F2 9F 00 00 .dword %01001111111110010 -0041A4r 1 F3 9F 00 00 .dword %01001111111110011 -0041A8r 1 F4 9F 00 00 .dword %01001111111110100 -0041ACr 1 F5 9F 00 00 .dword %01001111111110101 -0041B0r 1 F6 9F 00 00 .dword %01001111111110110 -0041B4r 1 F7 9F 00 00 .dword %01001111111110111 -0041B8r 1 F8 9F 00 00 .dword %01001111111111000 -0041BCr 1 F9 9F 00 00 .dword %01001111111111001 -0041C0r 1 FA 9F 00 00 .dword %01001111111111010 -0041C4r 1 FB 9F 00 00 .dword %01001111111111011 -0041C8r 1 FC 9F 00 00 .dword %01001111111111100 -0041CCr 1 FD 9F 00 00 .dword %01001111111111101 -0041D0r 1 FE 9F 00 00 .dword %01001111111111110 -0041D4r 1 FF 9F 00 00 .dword %01001111111111111 -0041D8r 1 00 A0 00 00 .dword %01010000000000000 -0041DCr 1 01 A0 00 00 .dword %01010000000000001 -0041E0r 1 02 A0 00 00 .dword %01010000000000010 -0041E4r 1 03 A0 00 00 .dword %01010000000000011 -0041E8r 1 04 A0 00 00 .dword %01010000000000100 -0041ECr 1 05 A0 00 00 .dword %01010000000000101 -0041F0r 1 06 A0 00 00 .dword %01010000000000110 -0041F4r 1 07 A0 00 00 .dword %01010000000000111 -0041F8r 1 08 A0 00 00 .dword %01010000000001000 -0041FCr 1 09 A0 00 00 .dword %01010000000001001 -004200r 1 0A A0 00 00 .dword %01010000000001010 -004204r 1 0B A0 00 00 .dword %01010000000001011 -004208r 1 0C A0 00 00 .dword %01010000000001100 -00420Cr 1 0D A0 00 00 .dword %01010000000001101 -004210r 1 0E A0 00 00 .dword %01010000000001110 -004214r 1 0F A0 00 00 .dword %01010000000001111 -004218r 1 E1 AF 00 00 .dword %01010111111100001 -00421Cr 1 E2 AF 00 00 .dword %01010111111100010 -004220r 1 E3 AF 00 00 .dword %01010111111100011 -004224r 1 E4 AF 00 00 .dword %01010111111100100 -004228r 1 E5 AF 00 00 .dword %01010111111100101 -00422Cr 1 E6 AF 00 00 .dword %01010111111100110 -004230r 1 E7 AF 00 00 .dword %01010111111100111 -004234r 1 E8 AF 00 00 .dword %01010111111101000 -004238r 1 E9 AF 00 00 .dword %01010111111101001 -00423Cr 1 EA AF 00 00 .dword %01010111111101010 -004240r 1 EB AF 00 00 .dword %01010111111101011 -004244r 1 EC AF 00 00 .dword %01010111111101100 -004248r 1 ED AF 00 00 .dword %01010111111101101 -00424Cr 1 EE AF 00 00 .dword %01010111111101110 -004250r 1 EF AF 00 00 .dword %01010111111101111 -004254r 1 F0 AF 00 00 .dword %01010111111110000 -004258r 1 F1 AF 00 00 .dword %01010111111110001 -00425Cr 1 F2 AF 00 00 .dword %01010111111110010 -004260r 1 F3 AF 00 00 .dword %01010111111110011 -004264r 1 F4 AF 00 00 .dword %01010111111110100 -004268r 1 F5 AF 00 00 .dword %01010111111110101 -00426Cr 1 F6 AF 00 00 .dword %01010111111110110 -004270r 1 F7 AF 00 00 .dword %01010111111110111 -004274r 1 F8 AF 00 00 .dword %01010111111111000 -004278r 1 F9 AF 00 00 .dword %01010111111111001 -00427Cr 1 FA AF 00 00 .dword %01010111111111010 -004280r 1 FB AF 00 00 .dword %01010111111111011 -004284r 1 FC AF 00 00 .dword %01010111111111100 -004288r 1 FD AF 00 00 .dword %01010111111111101 -00428Cr 1 FE AF 00 00 .dword %01010111111111110 -004290r 1 FF AF 00 00 .dword %01010111111111111 -004294r 1 00 B0 00 00 .dword %01011000000000000 -004298r 1 01 B0 00 00 .dword %01011000000000001 -00429Cr 1 02 B0 00 00 .dword %01011000000000010 -0042A0r 1 03 B0 00 00 .dword %01011000000000011 -0042A4r 1 04 B0 00 00 .dword %01011000000000100 -0042A8r 1 05 B0 00 00 .dword %01011000000000101 -0042ACr 1 06 B0 00 00 .dword %01011000000000110 -0042B0r 1 07 B0 00 00 .dword %01011000000000111 -0042B4r 1 08 B0 00 00 .dword %01011000000001000 -0042B8r 1 09 B0 00 00 .dword %01011000000001001 -0042BCr 1 0A B0 00 00 .dword %01011000000001010 -0042C0r 1 0B B0 00 00 .dword %01011000000001011 -0042C4r 1 0C B0 00 00 .dword %01011000000001100 -0042C8r 1 0D B0 00 00 .dword %01011000000001101 -0042CCr 1 0E B0 00 00 .dword %01011000000001110 -0042D0r 1 0F B0 00 00 .dword %01011000000001111 -0042D4r 1 E1 FF 00 00 .dword %01111111111100001 -0042D8r 1 E2 FF 00 00 .dword %01111111111100010 -0042DCr 1 E3 FF 00 00 .dword %01111111111100011 -0042E0r 1 E4 FF 00 00 .dword %01111111111100100 -0042E4r 1 E5 FF 00 00 .dword %01111111111100101 -0042E8r 1 E6 FF 00 00 .dword %01111111111100110 -0042ECr 1 E7 FF 00 00 .dword %01111111111100111 -0042F0r 1 E8 FF 00 00 .dword %01111111111101000 -0042F4r 1 E9 FF 00 00 .dword %01111111111101001 -0042F8r 1 EA FF 00 00 .dword %01111111111101010 -0042FCr 1 EB FF 00 00 .dword %01111111111101011 -004300r 1 EC FF 00 00 .dword %01111111111101100 -004304r 1 ED FF 00 00 .dword %01111111111101101 -004308r 1 EE FF 00 00 .dword %01111111111101110 -00430Cr 1 EF FF 00 00 .dword %01111111111101111 -004310r 1 F0 FF 00 00 .dword %01111111111110000 -004314r 1 F1 FF 00 00 .dword %01111111111110001 -004318r 1 F2 FF 00 00 .dword %01111111111110010 -00431Cr 1 F3 FF 00 00 .dword %01111111111110011 -004320r 1 F4 FF 00 00 .dword %01111111111110100 -004324r 1 F5 FF 00 00 .dword %01111111111110101 -004328r 1 F6 FF 00 00 .dword %01111111111110110 -00432Cr 1 F7 FF 00 00 .dword %01111111111110111 -004330r 1 F8 FF 00 00 .dword %01111111111111000 -004334r 1 F9 FF 00 00 .dword %01111111111111001 -004338r 1 FA FF 00 00 .dword %01111111111111010 -00433Cr 1 FB FF 00 00 .dword %01111111111111011 -004340r 1 FC FF 00 00 .dword %01111111111111100 -004344r 1 FD FF 00 00 .dword %01111111111111101 -004348r 1 FE FF 00 00 .dword %01111111111111110 -00434Cr 1 FF FF 00 00 .dword %01111111111111111 -004350r 1 00 00 01 00 .dword %010000000000000000 -004354r 1 01 00 01 00 .dword %010000000000000001 -004358r 1 02 00 01 00 .dword %010000000000000010 -00435Cr 1 03 00 01 00 .dword %010000000000000011 -004360r 1 04 00 01 00 .dword %010000000000000100 -004364r 1 05 00 01 00 .dword %010000000000000101 -004368r 1 06 00 01 00 .dword %010000000000000110 -00436Cr 1 07 00 01 00 .dword %010000000000000111 -004370r 1 08 00 01 00 .dword %010000000000001000 -004374r 1 09 00 01 00 .dword %010000000000001001 -004378r 1 0A 00 01 00 .dword %010000000000001010 -00437Cr 1 0B 00 01 00 .dword %010000000000001011 -004380r 1 0C 00 01 00 .dword %010000000000001100 -004384r 1 0D 00 01 00 .dword %010000000000001101 -004388r 1 0E 00 01 00 .dword %010000000000001110 -00438Cr 1 0F 00 01 00 .dword %010000000000001111 -004390r 1 F0 FF FF 7F .dword %1111111111111111111111111110000 -004394r 1 F1 FF FF 7F .dword %1111111111111111111111111110001 -004398r 1 F2 FF FF 7F .dword %1111111111111111111111111110010 -00439Cr 1 F3 FF FF 7F .dword %1111111111111111111111111110011 -0043A0r 1 F4 FF FF 7F .dword %1111111111111111111111111110100 -0043A4r 1 F5 FF FF 7F .dword %1111111111111111111111111110101 -0043A8r 1 F6 FF FF 7F .dword %1111111111111111111111111110110 -0043ACr 1 F7 FF FF 7F .dword %1111111111111111111111111110111 -0043B0r 1 F8 FF FF 7F .dword %1111111111111111111111111111000 -0043B4r 1 F9 FF FF 7F .dword %1111111111111111111111111111001 -0043B8r 1 FA FF FF 7F .dword %1111111111111111111111111111010 -0043BCr 1 FB FF FF 7F .dword %1111111111111111111111111111011 -0043C0r 1 FC FF FF 7F .dword %1111111111111111111111111111100 -0043C4r 1 FD FF FF 7F .dword %1111111111111111111111111111101 -0043C8r 1 FE FF FF 7F .dword %1111111111111111111111111111110 -0043CCr 1 FF FF FF 7F .dword %1111111111111111111111111111111 -0043D0r 1 00 00 00 80 .dword %10000000000000000000000000000000 -0043D4r 1 01 00 00 80 .dword %10000000000000000000000000000001 -0043D8r 1 02 00 00 80 .dword %10000000000000000000000000000010 -0043DCr 1 03 00 00 80 .dword %10000000000000000000000000000011 -0043E0r 1 04 00 00 80 .dword %10000000000000000000000000000100 -0043E4r 1 05 00 00 80 .dword %10000000000000000000000000000101 -0043E8r 1 06 00 00 80 .dword %10000000000000000000000000000110 -0043ECr 1 07 00 00 80 .dword %10000000000000000000000000000111 -0043F0r 1 08 00 00 80 .dword %10000000000000000000000000001000 -0043F4r 1 09 00 00 80 .dword %10000000000000000000000000001001 -0043F8r 1 0A 00 00 80 .dword %10000000000000000000000000001010 -0043FCr 1 0B 00 00 80 .dword %10000000000000000000000000001011 -004400r 1 0C 00 00 80 .dword %10000000000000000000000000001100 -004404r 1 0D 00 00 80 .dword %10000000000000000000000000001101 -004408r 1 0E 00 00 80 .dword %10000000000000000000000000001110 -00440Cr 1 0F 00 00 80 .dword %10000000000000000000000000001111 -004410r 1 F0 FF FF 9F .dword %10011111111111111111111111110000 -004414r 1 F1 FF FF 9F .dword %10011111111111111111111111110001 -004418r 1 F2 FF FF 9F .dword %10011111111111111111111111110010 -00441Cr 1 F3 FF FF 9F .dword %10011111111111111111111111110011 -004420r 1 F4 FF FF 9F .dword %10011111111111111111111111110100 -004424r 1 F5 FF FF 9F .dword %10011111111111111111111111110101 -004428r 1 F6 FF FF 9F .dword %10011111111111111111111111110110 -00442Cr 1 F7 FF FF 9F .dword %10011111111111111111111111110111 -004430r 1 F8 FF FF 9F .dword %10011111111111111111111111111000 -004434r 1 F9 FF FF 9F .dword %10011111111111111111111111111001 -004438r 1 FA FF FF 9F .dword %10011111111111111111111111111010 -00443Cr 1 FB FF FF 9F .dword %10011111111111111111111111111011 -004440r 1 FC FF FF 9F .dword %10011111111111111111111111111100 -004444r 1 FD FF FF 9F .dword %10011111111111111111111111111101 -004448r 1 FE FF FF 9F .dword %10011111111111111111111111111110 -00444Cr 1 FF FF FF 9F .dword %10011111111111111111111111111111 -004450r 1 00 00 00 A0 .dword %10100000000000000000000000000000 -004454r 1 01 00 00 A0 .dword %10100000000000000000000000000001 -004458r 1 02 00 00 A0 .dword %10100000000000000000000000000010 -00445Cr 1 03 00 00 A0 .dword %10100000000000000000000000000011 -004460r 1 04 00 00 A0 .dword %10100000000000000000000000000100 -004464r 1 05 00 00 A0 .dword %10100000000000000000000000000101 -004468r 1 06 00 00 A0 .dword %10100000000000000000000000000110 -00446Cr 1 07 00 00 A0 .dword %10100000000000000000000000000111 -004470r 1 08 00 00 A0 .dword %10100000000000000000000000001000 -004474r 1 09 00 00 A0 .dword %10100000000000000000000000001001 -004478r 1 0A 00 00 A0 .dword %10100000000000000000000000001010 -00447Cr 1 0B 00 00 A0 .dword %10100000000000000000000000001011 -004480r 1 0C 00 00 A0 .dword %10100000000000000000000000001100 -004484r 1 0D 00 00 A0 .dword %10100000000000000000000000001101 -004488r 1 0E 00 00 A0 .dword %10100000000000000000000000001110 -00448Cr 1 0F 00 00 A0 .dword %10100000000000000000000000001111 -004490r 1 F0 FF FF FF .dword %11111111111111111111111111110000 -004494r 1 F1 FF FF FF .dword %11111111111111111111111111110001 -004498r 1 F2 FF FF FF .dword %11111111111111111111111111110010 -00449Cr 1 F3 FF FF FF .dword %11111111111111111111111111110011 -0044A0r 1 F4 FF FF FF .dword %11111111111111111111111111110100 -0044A4r 1 F5 FF FF FF .dword %11111111111111111111111111110101 -0044A8r 1 F6 FF FF FF .dword %11111111111111111111111111110110 -0044ACr 1 F7 FF FF FF .dword %11111111111111111111111111110111 -0044B0r 1 F8 FF FF FF .dword %11111111111111111111111111111000 -0044B4r 1 F9 FF FF FF .dword %11111111111111111111111111111001 -0044B8r 1 FA FF FF FF .dword %11111111111111111111111111111010 -0044BCr 1 FB FF FF FF .dword %11111111111111111111111111111011 -0044C0r 1 FC FF FF FF .dword %11111111111111111111111111111100 -0044C4r 1 FD FF FF FF .dword %11111111111111111111111111111101 -0044C8r 1 FE FF FF FF .dword %11111111111111111111111111111110 -0044CCr 1 FF FF FF FF .dword %11111111111111111111111111111111 +003F14r 1 ; binary values, variable length +003F14r 1 00 00 00 00 .dword %0 +003F18r 1 01 00 00 00 .dword %01 +003F1Cr 1 02 00 00 00 .dword %010 +003F20r 1 03 00 00 00 .dword %011 +003F24r 1 04 00 00 00 .dword %0100 +003F28r 1 05 00 00 00 .dword %0101 +003F2Cr 1 06 00 00 00 .dword %0110 +003F30r 1 07 00 00 00 .dword %0111 +003F34r 1 08 00 00 00 .dword %01000 +003F38r 1 09 00 00 00 .dword %01001 +003F3Cr 1 0A 00 00 00 .dword %01010 +003F40r 1 0B 00 00 00 .dword %01011 +003F44r 1 0C 00 00 00 .dword %01100 +003F48r 1 0D 00 00 00 .dword %01101 +003F4Cr 1 0E 00 00 00 .dword %01110 +003F50r 1 0F 00 00 00 .dword %01111 +003F54r 1 10 00 00 00 .dword %010000 +003F58r 1 11 00 00 00 .dword %010001 +003F5Cr 1 12 00 00 00 .dword %010010 +003F60r 1 13 00 00 00 .dword %010011 +003F64r 1 70 00 00 00 .dword %01110000 +003F68r 1 71 00 00 00 .dword %01110001 +003F6Cr 1 72 00 00 00 .dword %01110010 +003F70r 1 73 00 00 00 .dword %01110011 +003F74r 1 74 00 00 00 .dword %01110100 +003F78r 1 75 00 00 00 .dword %01110101 +003F7Cr 1 76 00 00 00 .dword %01110110 +003F80r 1 77 00 00 00 .dword %01110111 +003F84r 1 78 00 00 00 .dword %01111000 +003F88r 1 79 00 00 00 .dword %01111001 +003F8Cr 1 7A 00 00 00 .dword %01111010 +003F90r 1 7B 00 00 00 .dword %01111011 +003F94r 1 7C 00 00 00 .dword %01111100 +003F98r 1 7D 00 00 00 .dword %01111101 +003F9Cr 1 7E 00 00 00 .dword %01111110 +003FA0r 1 7F 00 00 00 .dword %01111111 +003FA4r 1 80 00 00 00 .dword %010000000 +003FA8r 1 81 00 00 00 .dword %010000001 +003FACr 1 82 00 00 00 .dword %010000010 +003FB0r 1 83 00 00 00 .dword %010000011 +003FB4r 1 84 00 00 00 .dword %010000100 +003FB8r 1 85 00 00 00 .dword %010000101 +003FBCr 1 86 00 00 00 .dword %010000110 +003FC0r 1 F0 00 00 00 .dword %011110000 +003FC4r 1 F1 00 00 00 .dword %011110001 +003FC8r 1 F2 00 00 00 .dword %011110010 +003FCCr 1 F3 00 00 00 .dword %011110011 +003FD0r 1 F4 00 00 00 .dword %011110100 +003FD4r 1 F5 00 00 00 .dword %011110101 +003FD8r 1 F6 00 00 00 .dword %011110110 +003FDCr 1 F7 00 00 00 .dword %011110111 +003FE0r 1 F8 00 00 00 .dword %011111000 +003FE4r 1 F9 00 00 00 .dword %011111001 +003FE8r 1 FA 00 00 00 .dword %011111010 +003FECr 1 FB 00 00 00 .dword %011111011 +003FF0r 1 FC 00 00 00 .dword %011111100 +003FF4r 1 FD 00 00 00 .dword %011111101 +003FF8r 1 FE 00 00 00 .dword %011111110 +003FFCr 1 FF 00 00 00 .dword %011111111 +004000r 1 00 01 00 00 .dword %0100000000 +004004r 1 01 01 00 00 .dword %0100000001 +004008r 1 02 01 00 00 .dword %0100000010 +00400Cr 1 03 01 00 00 .dword %0100000011 +004010r 1 D2 0F 00 00 .dword %0111111010010 +004014r 1 D3 0F 00 00 .dword %0111111010011 +004018r 1 D4 0F 00 00 .dword %0111111010100 +00401Cr 1 D5 0F 00 00 .dword %0111111010101 +004020r 1 D6 0F 00 00 .dword %0111111010110 +004024r 1 D7 0F 00 00 .dword %0111111010111 +004028r 1 D8 0F 00 00 .dword %0111111011000 +00402Cr 1 D9 0F 00 00 .dword %0111111011001 +004030r 1 DA 0F 00 00 .dword %0111111011010 +004034r 1 DB 0F 00 00 .dword %0111111011011 +004038r 1 DC 0F 00 00 .dword %0111111011100 +00403Cr 1 DD 0F 00 00 .dword %0111111011101 +004040r 1 DE 0F 00 00 .dword %0111111011110 +004044r 1 DF 0F 00 00 .dword %0111111011111 +004048r 1 E0 0F 00 00 .dword %0111111100000 +00404Cr 1 E1 0F 00 00 .dword %0111111100001 +004050r 1 E2 0F 00 00 .dword %0111111100010 +004054r 1 E3 0F 00 00 .dword %0111111100011 +004058r 1 E4 0F 00 00 .dword %0111111100100 +00405Cr 1 E5 0F 00 00 .dword %0111111100101 +004060r 1 E6 0F 00 00 .dword %0111111100110 +004064r 1 E7 0F 00 00 .dword %0111111100111 +004068r 1 E8 0F 00 00 .dword %0111111101000 +00406Cr 1 E9 0F 00 00 .dword %0111111101001 +004070r 1 EA 0F 00 00 .dword %0111111101010 +004074r 1 EB 0F 00 00 .dword %0111111101011 +004078r 1 EC 0F 00 00 .dword %0111111101100 +00407Cr 1 ED 0F 00 00 .dword %0111111101101 +004080r 1 EE 0F 00 00 .dword %0111111101110 +004084r 1 EF 0F 00 00 .dword %0111111101111 +004088r 1 F0 0F 00 00 .dword %0111111110000 +00408Cr 1 F1 0F 00 00 .dword %0111111110001 +004090r 1 F2 0F 00 00 .dword %0111111110010 +004094r 1 F3 0F 00 00 .dword %0111111110011 +004098r 1 F4 0F 00 00 .dword %0111111110100 +00409Cr 1 F5 0F 00 00 .dword %0111111110101 +0040A0r 1 F6 0F 00 00 .dword %0111111110110 +0040A4r 1 F7 0F 00 00 .dword %0111111110111 +0040A8r 1 F8 0F 00 00 .dword %0111111111000 +0040ACr 1 F9 0F 00 00 .dword %0111111111001 +0040B0r 1 FA 0F 00 00 .dword %0111111111010 +0040B4r 1 FB 0F 00 00 .dword %0111111111011 +0040B8r 1 FC 0F 00 00 .dword %0111111111100 +0040BCr 1 FD 0F 00 00 .dword %0111111111101 +0040C0r 1 FE 0F 00 00 .dword %0111111111110 +0040C4r 1 FF 0F 00 00 .dword %0111111111111 +0040C8r 1 00 10 00 00 .dword %01000000000000 +0040CCr 1 01 10 00 00 .dword %01000000000001 +0040D0r 1 02 10 00 00 .dword %01000000000010 +0040D4r 1 03 10 00 00 .dword %01000000000011 +0040D8r 1 04 10 00 00 .dword %01000000000100 +0040DCr 1 05 10 00 00 .dword %01000000000101 +0040E0r 1 06 10 00 00 .dword %01000000000110 +0040E4r 1 07 10 00 00 .dword %01000000000111 +0040E8r 1 08 10 00 00 .dword %01000000001000 +0040ECr 1 F0 7F 00 00 .dword %0111111111110000 +0040F0r 1 F1 7F 00 00 .dword %0111111111110001 +0040F4r 1 F2 7F 00 00 .dword %0111111111110010 +0040F8r 1 F3 7F 00 00 .dword %0111111111110011 +0040FCr 1 F4 7F 00 00 .dword %0111111111110100 +004100r 1 F5 7F 00 00 .dword %0111111111110101 +004104r 1 F6 7F 00 00 .dword %0111111111110110 +004108r 1 F7 7F 00 00 .dword %0111111111110111 +00410Cr 1 F8 7F 00 00 .dword %0111111111111000 +004110r 1 F9 7F 00 00 .dword %0111111111111001 +004114r 1 FA 7F 00 00 .dword %0111111111111010 +004118r 1 FB 7F 00 00 .dword %0111111111111011 +00411Cr 1 FC 7F 00 00 .dword %0111111111111100 +004120r 1 FD 7F 00 00 .dword %0111111111111101 +004124r 1 FE 7F 00 00 .dword %0111111111111110 +004128r 1 FF 7F 00 00 .dword %0111111111111111 +00412Cr 1 00 80 00 00 .dword %01000000000000000 +004130r 1 01 80 00 00 .dword %01000000000000001 +004134r 1 02 80 00 00 .dword %01000000000000010 +004138r 1 03 80 00 00 .dword %01000000000000011 +00413Cr 1 04 80 00 00 .dword %01000000000000100 +004140r 1 05 80 00 00 .dword %01000000000000101 +004144r 1 06 80 00 00 .dword %01000000000000110 +004148r 1 07 80 00 00 .dword %01000000000000111 +00414Cr 1 08 80 00 00 .dword %01000000000001000 +004150r 1 09 80 00 00 .dword %01000000000001001 +004154r 1 0A 80 00 00 .dword %01000000000001010 +004158r 1 0B 80 00 00 .dword %01000000000001011 +00415Cr 1 E1 9F 00 00 .dword %01001111111100001 +004160r 1 E2 9F 00 00 .dword %01001111111100010 +004164r 1 E3 9F 00 00 .dword %01001111111100011 +004168r 1 E4 9F 00 00 .dword %01001111111100100 +00416Cr 1 E5 9F 00 00 .dword %01001111111100101 +004170r 1 E6 9F 00 00 .dword %01001111111100110 +004174r 1 E7 9F 00 00 .dword %01001111111100111 +004178r 1 E8 9F 00 00 .dword %01001111111101000 +00417Cr 1 E9 9F 00 00 .dword %01001111111101001 +004180r 1 EA 9F 00 00 .dword %01001111111101010 +004184r 1 EB 9F 00 00 .dword %01001111111101011 +004188r 1 EC 9F 00 00 .dword %01001111111101100 +00418Cr 1 ED 9F 00 00 .dword %01001111111101101 +004190r 1 EE 9F 00 00 .dword %01001111111101110 +004194r 1 EF 9F 00 00 .dword %01001111111101111 +004198r 1 F0 9F 00 00 .dword %01001111111110000 +00419Cr 1 F1 9F 00 00 .dword %01001111111110001 +0041A0r 1 F2 9F 00 00 .dword %01001111111110010 +0041A4r 1 F3 9F 00 00 .dword %01001111111110011 +0041A8r 1 F4 9F 00 00 .dword %01001111111110100 +0041ACr 1 F5 9F 00 00 .dword %01001111111110101 +0041B0r 1 F6 9F 00 00 .dword %01001111111110110 +0041B4r 1 F7 9F 00 00 .dword %01001111111110111 +0041B8r 1 F8 9F 00 00 .dword %01001111111111000 +0041BCr 1 F9 9F 00 00 .dword %01001111111111001 +0041C0r 1 FA 9F 00 00 .dword %01001111111111010 +0041C4r 1 FB 9F 00 00 .dword %01001111111111011 +0041C8r 1 FC 9F 00 00 .dword %01001111111111100 +0041CCr 1 FD 9F 00 00 .dword %01001111111111101 +0041D0r 1 FE 9F 00 00 .dword %01001111111111110 +0041D4r 1 FF 9F 00 00 .dword %01001111111111111 +0041D8r 1 00 A0 00 00 .dword %01010000000000000 +0041DCr 1 01 A0 00 00 .dword %01010000000000001 +0041E0r 1 02 A0 00 00 .dword %01010000000000010 +0041E4r 1 03 A0 00 00 .dword %01010000000000011 +0041E8r 1 04 A0 00 00 .dword %01010000000000100 +0041ECr 1 05 A0 00 00 .dword %01010000000000101 +0041F0r 1 06 A0 00 00 .dword %01010000000000110 +0041F4r 1 07 A0 00 00 .dword %01010000000000111 +0041F8r 1 08 A0 00 00 .dword %01010000000001000 +0041FCr 1 09 A0 00 00 .dword %01010000000001001 +004200r 1 0A A0 00 00 .dword %01010000000001010 +004204r 1 0B A0 00 00 .dword %01010000000001011 +004208r 1 0C A0 00 00 .dword %01010000000001100 +00420Cr 1 0D A0 00 00 .dword %01010000000001101 +004210r 1 0E A0 00 00 .dword %01010000000001110 +004214r 1 0F A0 00 00 .dword %01010000000001111 +004218r 1 E1 AF 00 00 .dword %01010111111100001 +00421Cr 1 E2 AF 00 00 .dword %01010111111100010 +004220r 1 E3 AF 00 00 .dword %01010111111100011 +004224r 1 E4 AF 00 00 .dword %01010111111100100 +004228r 1 E5 AF 00 00 .dword %01010111111100101 +00422Cr 1 E6 AF 00 00 .dword %01010111111100110 +004230r 1 E7 AF 00 00 .dword %01010111111100111 +004234r 1 E8 AF 00 00 .dword %01010111111101000 +004238r 1 E9 AF 00 00 .dword %01010111111101001 +00423Cr 1 EA AF 00 00 .dword %01010111111101010 +004240r 1 EB AF 00 00 .dword %01010111111101011 +004244r 1 EC AF 00 00 .dword %01010111111101100 +004248r 1 ED AF 00 00 .dword %01010111111101101 +00424Cr 1 EE AF 00 00 .dword %01010111111101110 +004250r 1 EF AF 00 00 .dword %01010111111101111 +004254r 1 F0 AF 00 00 .dword %01010111111110000 +004258r 1 F1 AF 00 00 .dword %01010111111110001 +00425Cr 1 F2 AF 00 00 .dword %01010111111110010 +004260r 1 F3 AF 00 00 .dword %01010111111110011 +004264r 1 F4 AF 00 00 .dword %01010111111110100 +004268r 1 F5 AF 00 00 .dword %01010111111110101 +00426Cr 1 F6 AF 00 00 .dword %01010111111110110 +004270r 1 F7 AF 00 00 .dword %01010111111110111 +004274r 1 F8 AF 00 00 .dword %01010111111111000 +004278r 1 F9 AF 00 00 .dword %01010111111111001 +00427Cr 1 FA AF 00 00 .dword %01010111111111010 +004280r 1 FB AF 00 00 .dword %01010111111111011 +004284r 1 FC AF 00 00 .dword %01010111111111100 +004288r 1 FD AF 00 00 .dword %01010111111111101 +00428Cr 1 FE AF 00 00 .dword %01010111111111110 +004290r 1 FF AF 00 00 .dword %01010111111111111 +004294r 1 00 B0 00 00 .dword %01011000000000000 +004298r 1 01 B0 00 00 .dword %01011000000000001 +00429Cr 1 02 B0 00 00 .dword %01011000000000010 +0042A0r 1 03 B0 00 00 .dword %01011000000000011 +0042A4r 1 04 B0 00 00 .dword %01011000000000100 +0042A8r 1 05 B0 00 00 .dword %01011000000000101 +0042ACr 1 06 B0 00 00 .dword %01011000000000110 +0042B0r 1 07 B0 00 00 .dword %01011000000000111 +0042B4r 1 08 B0 00 00 .dword %01011000000001000 +0042B8r 1 09 B0 00 00 .dword %01011000000001001 +0042BCr 1 0A B0 00 00 .dword %01011000000001010 +0042C0r 1 0B B0 00 00 .dword %01011000000001011 +0042C4r 1 0C B0 00 00 .dword %01011000000001100 +0042C8r 1 0D B0 00 00 .dword %01011000000001101 +0042CCr 1 0E B0 00 00 .dword %01011000000001110 +0042D0r 1 0F B0 00 00 .dword %01011000000001111 +0042D4r 1 E1 FF 00 00 .dword %01111111111100001 +0042D8r 1 E2 FF 00 00 .dword %01111111111100010 +0042DCr 1 E3 FF 00 00 .dword %01111111111100011 +0042E0r 1 E4 FF 00 00 .dword %01111111111100100 +0042E4r 1 E5 FF 00 00 .dword %01111111111100101 +0042E8r 1 E6 FF 00 00 .dword %01111111111100110 +0042ECr 1 E7 FF 00 00 .dword %01111111111100111 +0042F0r 1 E8 FF 00 00 .dword %01111111111101000 +0042F4r 1 E9 FF 00 00 .dword %01111111111101001 +0042F8r 1 EA FF 00 00 .dword %01111111111101010 +0042FCr 1 EB FF 00 00 .dword %01111111111101011 +004300r 1 EC FF 00 00 .dword %01111111111101100 +004304r 1 ED FF 00 00 .dword %01111111111101101 +004308r 1 EE FF 00 00 .dword %01111111111101110 +00430Cr 1 EF FF 00 00 .dword %01111111111101111 +004310r 1 F0 FF 00 00 .dword %01111111111110000 +004314r 1 F1 FF 00 00 .dword %01111111111110001 +004318r 1 F2 FF 00 00 .dword %01111111111110010 +00431Cr 1 F3 FF 00 00 .dword %01111111111110011 +004320r 1 F4 FF 00 00 .dword %01111111111110100 +004324r 1 F5 FF 00 00 .dword %01111111111110101 +004328r 1 F6 FF 00 00 .dword %01111111111110110 +00432Cr 1 F7 FF 00 00 .dword %01111111111110111 +004330r 1 F8 FF 00 00 .dword %01111111111111000 +004334r 1 F9 FF 00 00 .dword %01111111111111001 +004338r 1 FA FF 00 00 .dword %01111111111111010 +00433Cr 1 FB FF 00 00 .dword %01111111111111011 +004340r 1 FC FF 00 00 .dword %01111111111111100 +004344r 1 FD FF 00 00 .dword %01111111111111101 +004348r 1 FE FF 00 00 .dword %01111111111111110 +00434Cr 1 FF FF 00 00 .dword %01111111111111111 +004350r 1 00 00 01 00 .dword %010000000000000000 +004354r 1 01 00 01 00 .dword %010000000000000001 +004358r 1 02 00 01 00 .dword %010000000000000010 +00435Cr 1 03 00 01 00 .dword %010000000000000011 +004360r 1 04 00 01 00 .dword %010000000000000100 +004364r 1 05 00 01 00 .dword %010000000000000101 +004368r 1 06 00 01 00 .dword %010000000000000110 +00436Cr 1 07 00 01 00 .dword %010000000000000111 +004370r 1 08 00 01 00 .dword %010000000000001000 +004374r 1 09 00 01 00 .dword %010000000000001001 +004378r 1 0A 00 01 00 .dword %010000000000001010 +00437Cr 1 0B 00 01 00 .dword %010000000000001011 +004380r 1 0C 00 01 00 .dword %010000000000001100 +004384r 1 0D 00 01 00 .dword %010000000000001101 +004388r 1 0E 00 01 00 .dword %010000000000001110 +00438Cr 1 0F 00 01 00 .dword %010000000000001111 +004390r 1 F0 FF FF 7F .dword %1111111111111111111111111110000 +004394r 1 F1 FF FF 7F .dword %1111111111111111111111111110001 +004398r 1 F2 FF FF 7F .dword %1111111111111111111111111110010 +00439Cr 1 F3 FF FF 7F .dword %1111111111111111111111111110011 +0043A0r 1 F4 FF FF 7F .dword %1111111111111111111111111110100 +0043A4r 1 F5 FF FF 7F .dword %1111111111111111111111111110101 +0043A8r 1 F6 FF FF 7F .dword %1111111111111111111111111110110 +0043ACr 1 F7 FF FF 7F .dword %1111111111111111111111111110111 +0043B0r 1 F8 FF FF 7F .dword %1111111111111111111111111111000 +0043B4r 1 F9 FF FF 7F .dword %1111111111111111111111111111001 +0043B8r 1 FA FF FF 7F .dword %1111111111111111111111111111010 +0043BCr 1 FB FF FF 7F .dword %1111111111111111111111111111011 +0043C0r 1 FC FF FF 7F .dword %1111111111111111111111111111100 +0043C4r 1 FD FF FF 7F .dword %1111111111111111111111111111101 +0043C8r 1 FE FF FF 7F .dword %1111111111111111111111111111110 +0043CCr 1 FF FF FF 7F .dword %1111111111111111111111111111111 +0043D0r 1 00 00 00 80 .dword %10000000000000000000000000000000 +0043D4r 1 01 00 00 80 .dword %10000000000000000000000000000001 +0043D8r 1 02 00 00 80 .dword %10000000000000000000000000000010 +0043DCr 1 03 00 00 80 .dword %10000000000000000000000000000011 +0043E0r 1 04 00 00 80 .dword %10000000000000000000000000000100 +0043E4r 1 05 00 00 80 .dword %10000000000000000000000000000101 +0043E8r 1 06 00 00 80 .dword %10000000000000000000000000000110 +0043ECr 1 07 00 00 80 .dword %10000000000000000000000000000111 +0043F0r 1 08 00 00 80 .dword %10000000000000000000000000001000 +0043F4r 1 09 00 00 80 .dword %10000000000000000000000000001001 +0043F8r 1 0A 00 00 80 .dword %10000000000000000000000000001010 +0043FCr 1 0B 00 00 80 .dword %10000000000000000000000000001011 +004400r 1 0C 00 00 80 .dword %10000000000000000000000000001100 +004404r 1 0D 00 00 80 .dword %10000000000000000000000000001101 +004408r 1 0E 00 00 80 .dword %10000000000000000000000000001110 +00440Cr 1 0F 00 00 80 .dword %10000000000000000000000000001111 +004410r 1 F0 FF FF 9F .dword %10011111111111111111111111110000 +004414r 1 F1 FF FF 9F .dword %10011111111111111111111111110001 +004418r 1 F2 FF FF 9F .dword %10011111111111111111111111110010 +00441Cr 1 F3 FF FF 9F .dword %10011111111111111111111111110011 +004420r 1 F4 FF FF 9F .dword %10011111111111111111111111110100 +004424r 1 F5 FF FF 9F .dword %10011111111111111111111111110101 +004428r 1 F6 FF FF 9F .dword %10011111111111111111111111110110 +00442Cr 1 F7 FF FF 9F .dword %10011111111111111111111111110111 +004430r 1 F8 FF FF 9F .dword %10011111111111111111111111111000 +004434r 1 F9 FF FF 9F .dword %10011111111111111111111111111001 +004438r 1 FA FF FF 9F .dword %10011111111111111111111111111010 +00443Cr 1 FB FF FF 9F .dword %10011111111111111111111111111011 +004440r 1 FC FF FF 9F .dword %10011111111111111111111111111100 +004444r 1 FD FF FF 9F .dword %10011111111111111111111111111101 +004448r 1 FE FF FF 9F .dword %10011111111111111111111111111110 +00444Cr 1 FF FF FF 9F .dword %10011111111111111111111111111111 +004450r 1 00 00 00 A0 .dword %10100000000000000000000000000000 +004454r 1 01 00 00 A0 .dword %10100000000000000000000000000001 +004458r 1 02 00 00 A0 .dword %10100000000000000000000000000010 +00445Cr 1 03 00 00 A0 .dword %10100000000000000000000000000011 +004460r 1 04 00 00 A0 .dword %10100000000000000000000000000100 +004464r 1 05 00 00 A0 .dword %10100000000000000000000000000101 +004468r 1 06 00 00 A0 .dword %10100000000000000000000000000110 +00446Cr 1 07 00 00 A0 .dword %10100000000000000000000000000111 +004470r 1 08 00 00 A0 .dword %10100000000000000000000000001000 +004474r 1 09 00 00 A0 .dword %10100000000000000000000000001001 +004478r 1 0A 00 00 A0 .dword %10100000000000000000000000001010 +00447Cr 1 0B 00 00 A0 .dword %10100000000000000000000000001011 +004480r 1 0C 00 00 A0 .dword %10100000000000000000000000001100 +004484r 1 0D 00 00 A0 .dword %10100000000000000000000000001101 +004488r 1 0E 00 00 A0 .dword %10100000000000000000000000001110 +00448Cr 1 0F 00 00 A0 .dword %10100000000000000000000000001111 +004490r 1 F0 FF FF FF .dword %11111111111111111111111111110000 +004494r 1 F1 FF FF FF .dword %11111111111111111111111111110001 +004498r 1 F2 FF FF FF .dword %11111111111111111111111111110010 +00449Cr 1 F3 FF FF FF .dword %11111111111111111111111111110011 +0044A0r 1 F4 FF FF FF .dword %11111111111111111111111111110100 +0044A4r 1 F5 FF FF FF .dword %11111111111111111111111111110101 +0044A8r 1 F6 FF FF FF .dword %11111111111111111111111111110110 +0044ACr 1 F7 FF FF FF .dword %11111111111111111111111111110111 +0044B0r 1 F8 FF FF FF .dword %11111111111111111111111111111000 +0044B4r 1 F9 FF FF FF .dword %11111111111111111111111111111001 +0044B8r 1 FA FF FF FF .dword %11111111111111111111111111111010 +0044BCr 1 FB FF FF FF .dword %11111111111111111111111111111011 +0044C0r 1 FC FF FF FF .dword %11111111111111111111111111111100 +0044C4r 1 FD FF FF FF .dword %11111111111111111111111111111101 +0044C8r 1 FE FF FF FF .dword %11111111111111111111111111111110 +0044CCr 1 FF FF FF FF .dword %11111111111111111111111111111111 0044D0r 1 -0044D0r 1 ; binary values, full length -0044D0r 1 00 00 00 00 .dword %00000000000000000000000000000000 -0044D4r 1 01 00 00 00 .dword %00000000000000000000000000000001 -0044D8r 1 02 00 00 00 .dword %00000000000000000000000000000010 -0044DCr 1 03 00 00 00 .dword %00000000000000000000000000000011 -0044E0r 1 04 00 00 00 .dword %00000000000000000000000000000100 -0044E4r 1 05 00 00 00 .dword %00000000000000000000000000000101 -0044E8r 1 06 00 00 00 .dword %00000000000000000000000000000110 -0044ECr 1 07 00 00 00 .dword %00000000000000000000000000000111 -0044F0r 1 08 00 00 00 .dword %00000000000000000000000000001000 -0044F4r 1 09 00 00 00 .dword %00000000000000000000000000001001 -0044F8r 1 0A 00 00 00 .dword %00000000000000000000000000001010 -0044FCr 1 0B 00 00 00 .dword %00000000000000000000000000001011 -004500r 1 0C 00 00 00 .dword %00000000000000000000000000001100 -004504r 1 0D 00 00 00 .dword %00000000000000000000000000001101 -004508r 1 0E 00 00 00 .dword %00000000000000000000000000001110 -00450Cr 1 0F 00 00 00 .dword %00000000000000000000000000001111 -004510r 1 10 00 00 00 .dword %00000000000000000000000000010000 -004514r 1 11 00 00 00 .dword %00000000000000000000000000010001 -004518r 1 12 00 00 00 .dword %00000000000000000000000000010010 -00451Cr 1 13 00 00 00 .dword %00000000000000000000000000010011 -004520r 1 70 00 00 00 .dword %00000000000000000000000001110000 -004524r 1 71 00 00 00 .dword %00000000000000000000000001110001 -004528r 1 72 00 00 00 .dword %00000000000000000000000001110010 -00452Cr 1 73 00 00 00 .dword %00000000000000000000000001110011 -004530r 1 74 00 00 00 .dword %00000000000000000000000001110100 -004534r 1 75 00 00 00 .dword %00000000000000000000000001110101 -004538r 1 76 00 00 00 .dword %00000000000000000000000001110110 -00453Cr 1 77 00 00 00 .dword %00000000000000000000000001110111 -004540r 1 78 00 00 00 .dword %00000000000000000000000001111000 -004544r 1 79 00 00 00 .dword %00000000000000000000000001111001 -004548r 1 7A 00 00 00 .dword %00000000000000000000000001111010 -00454Cr 1 7B 00 00 00 .dword %00000000000000000000000001111011 -004550r 1 7C 00 00 00 .dword %00000000000000000000000001111100 -004554r 1 7D 00 00 00 .dword %00000000000000000000000001111101 -004558r 1 7E 00 00 00 .dword %00000000000000000000000001111110 -00455Cr 1 7F 00 00 00 .dword %00000000000000000000000001111111 -004560r 1 80 00 00 00 .dword %00000000000000000000000010000000 -004564r 1 81 00 00 00 .dword %00000000000000000000000010000001 -004568r 1 82 00 00 00 .dword %00000000000000000000000010000010 -00456Cr 1 83 00 00 00 .dword %00000000000000000000000010000011 -004570r 1 84 00 00 00 .dword %00000000000000000000000010000100 -004574r 1 85 00 00 00 .dword %00000000000000000000000010000101 -004578r 1 86 00 00 00 .dword %00000000000000000000000010000110 -00457Cr 1 F0 00 00 00 .dword %00000000000000000000000011110000 -004580r 1 F1 00 00 00 .dword %00000000000000000000000011110001 -004584r 1 F2 00 00 00 .dword %00000000000000000000000011110010 -004588r 1 F3 00 00 00 .dword %00000000000000000000000011110011 -00458Cr 1 F4 00 00 00 .dword %00000000000000000000000011110100 -004590r 1 F5 00 00 00 .dword %00000000000000000000000011110101 -004594r 1 F6 00 00 00 .dword %00000000000000000000000011110110 -004598r 1 F7 00 00 00 .dword %00000000000000000000000011110111 -00459Cr 1 F8 00 00 00 .dword %00000000000000000000000011111000 -0045A0r 1 F9 00 00 00 .dword %00000000000000000000000011111001 -0045A4r 1 FA 00 00 00 .dword %00000000000000000000000011111010 -0045A8r 1 FB 00 00 00 .dword %00000000000000000000000011111011 -0045ACr 1 FC 00 00 00 .dword %00000000000000000000000011111100 -0045B0r 1 FD 00 00 00 .dword %00000000000000000000000011111101 -0045B4r 1 FE 00 00 00 .dword %00000000000000000000000011111110 -0045B8r 1 FF 00 00 00 .dword %00000000000000000000000011111111 -0045BCr 1 00 01 00 00 .dword %00000000000000000000000100000000 -0045C0r 1 01 01 00 00 .dword %00000000000000000000000100000001 -0045C4r 1 02 01 00 00 .dword %00000000000000000000000100000010 -0045C8r 1 03 01 00 00 .dword %00000000000000000000000100000011 -0045CCr 1 D2 0F 00 00 .dword %00000000000000000000111111010010 -0045D0r 1 D3 0F 00 00 .dword %00000000000000000000111111010011 -0045D4r 1 D4 0F 00 00 .dword %00000000000000000000111111010100 -0045D8r 1 D5 0F 00 00 .dword %00000000000000000000111111010101 -0045DCr 1 D6 0F 00 00 .dword %00000000000000000000111111010110 -0045E0r 1 D7 0F 00 00 .dword %00000000000000000000111111010111 -0045E4r 1 D8 0F 00 00 .dword %00000000000000000000111111011000 -0045E8r 1 D9 0F 00 00 .dword %00000000000000000000111111011001 -0045ECr 1 DA 0F 00 00 .dword %00000000000000000000111111011010 -0045F0r 1 DB 0F 00 00 .dword %00000000000000000000111111011011 -0045F4r 1 DC 0F 00 00 .dword %00000000000000000000111111011100 -0045F8r 1 DD 0F 00 00 .dword %00000000000000000000111111011101 -0045FCr 1 DE 0F 00 00 .dword %00000000000000000000111111011110 -004600r 1 DF 0F 00 00 .dword %00000000000000000000111111011111 -004604r 1 E0 0F 00 00 .dword %00000000000000000000111111100000 -004608r 1 E1 0F 00 00 .dword %00000000000000000000111111100001 -00460Cr 1 E2 0F 00 00 .dword %00000000000000000000111111100010 -004610r 1 E3 0F 00 00 .dword %00000000000000000000111111100011 -004614r 1 E4 0F 00 00 .dword %00000000000000000000111111100100 -004618r 1 E5 0F 00 00 .dword %00000000000000000000111111100101 -00461Cr 1 E6 0F 00 00 .dword %00000000000000000000111111100110 -004620r 1 E7 0F 00 00 .dword %00000000000000000000111111100111 -004624r 1 E8 0F 00 00 .dword %00000000000000000000111111101000 -004628r 1 E9 0F 00 00 .dword %00000000000000000000111111101001 -00462Cr 1 EA 0F 00 00 .dword %00000000000000000000111111101010 -004630r 1 EB 0F 00 00 .dword %00000000000000000000111111101011 -004634r 1 EC 0F 00 00 .dword %00000000000000000000111111101100 -004638r 1 ED 0F 00 00 .dword %00000000000000000000111111101101 -00463Cr 1 EE 0F 00 00 .dword %00000000000000000000111111101110 -004640r 1 EF 0F 00 00 .dword %00000000000000000000111111101111 -004644r 1 F0 0F 00 00 .dword %00000000000000000000111111110000 -004648r 1 F1 0F 00 00 .dword %00000000000000000000111111110001 -00464Cr 1 F2 0F 00 00 .dword %00000000000000000000111111110010 -004650r 1 F3 0F 00 00 .dword %00000000000000000000111111110011 -004654r 1 F4 0F 00 00 .dword %00000000000000000000111111110100 -004658r 1 F5 0F 00 00 .dword %00000000000000000000111111110101 -00465Cr 1 F6 0F 00 00 .dword %00000000000000000000111111110110 -004660r 1 F7 0F 00 00 .dword %00000000000000000000111111110111 -004664r 1 F8 0F 00 00 .dword %00000000000000000000111111111000 -004668r 1 F9 0F 00 00 .dword %00000000000000000000111111111001 -00466Cr 1 FA 0F 00 00 .dword %00000000000000000000111111111010 -004670r 1 FB 0F 00 00 .dword %00000000000000000000111111111011 -004674r 1 FC 0F 00 00 .dword %00000000000000000000111111111100 -004678r 1 FD 0F 00 00 .dword %00000000000000000000111111111101 -00467Cr 1 FE 0F 00 00 .dword %00000000000000000000111111111110 -004680r 1 FF 0F 00 00 .dword %00000000000000000000111111111111 -004684r 1 00 10 00 00 .dword %00000000000000000001000000000000 -004688r 1 01 10 00 00 .dword %00000000000000000001000000000001 -00468Cr 1 02 10 00 00 .dword %00000000000000000001000000000010 -004690r 1 03 10 00 00 .dword %00000000000000000001000000000011 -004694r 1 04 10 00 00 .dword %00000000000000000001000000000100 -004698r 1 05 10 00 00 .dword %00000000000000000001000000000101 -00469Cr 1 06 10 00 00 .dword %00000000000000000001000000000110 -0046A0r 1 07 10 00 00 .dword %00000000000000000001000000000111 -0046A4r 1 08 10 00 00 .dword %00000000000000000001000000001000 -0046A8r 1 F0 7F 00 00 .dword %00000000000000000111111111110000 -0046ACr 1 F1 7F 00 00 .dword %00000000000000000111111111110001 -0046B0r 1 F2 7F 00 00 .dword %00000000000000000111111111110010 -0046B4r 1 F3 7F 00 00 .dword %00000000000000000111111111110011 -0046B8r 1 F4 7F 00 00 .dword %00000000000000000111111111110100 -0046BCr 1 F5 7F 00 00 .dword %00000000000000000111111111110101 -0046C0r 1 F6 7F 00 00 .dword %00000000000000000111111111110110 -0046C4r 1 F7 7F 00 00 .dword %00000000000000000111111111110111 -0046C8r 1 F8 7F 00 00 .dword %00000000000000000111111111111000 -0046CCr 1 F9 7F 00 00 .dword %00000000000000000111111111111001 -0046D0r 1 FA 7F 00 00 .dword %00000000000000000111111111111010 -0046D4r 1 FB 7F 00 00 .dword %00000000000000000111111111111011 -0046D8r 1 FC 7F 00 00 .dword %00000000000000000111111111111100 -0046DCr 1 FD 7F 00 00 .dword %00000000000000000111111111111101 -0046E0r 1 FE 7F 00 00 .dword %00000000000000000111111111111110 -0046E4r 1 FF 7F 00 00 .dword %00000000000000000111111111111111 -0046E8r 1 00 80 00 00 .dword %00000000000000001000000000000000 -0046ECr 1 01 80 00 00 .dword %00000000000000001000000000000001 -0046F0r 1 02 80 00 00 .dword %00000000000000001000000000000010 -0046F4r 1 03 80 00 00 .dword %00000000000000001000000000000011 -0046F8r 1 04 80 00 00 .dword %00000000000000001000000000000100 -0046FCr 1 05 80 00 00 .dword %00000000000000001000000000000101 -004700r 1 06 80 00 00 .dword %00000000000000001000000000000110 -004704r 1 07 80 00 00 .dword %00000000000000001000000000000111 -004708r 1 08 80 00 00 .dword %00000000000000001000000000001000 -00470Cr 1 09 80 00 00 .dword %00000000000000001000000000001001 -004710r 1 0A 80 00 00 .dword %00000000000000001000000000001010 -004714r 1 0B 80 00 00 .dword %00000000000000001000000000001011 -004718r 1 E1 9F 00 00 .dword %00000000000000001001111111100001 -00471Cr 1 E2 9F 00 00 .dword %00000000000000001001111111100010 -004720r 1 E3 9F 00 00 .dword %00000000000000001001111111100011 -004724r 1 E4 9F 00 00 .dword %00000000000000001001111111100100 -004728r 1 E5 9F 00 00 .dword %00000000000000001001111111100101 -00472Cr 1 E6 9F 00 00 .dword %00000000000000001001111111100110 -004730r 1 E7 9F 00 00 .dword %00000000000000001001111111100111 -004734r 1 E8 9F 00 00 .dword %00000000000000001001111111101000 -004738r 1 E9 9F 00 00 .dword %00000000000000001001111111101001 -00473Cr 1 EA 9F 00 00 .dword %00000000000000001001111111101010 -004740r 1 EB 9F 00 00 .dword %00000000000000001001111111101011 -004744r 1 EC 9F 00 00 .dword %00000000000000001001111111101100 -004748r 1 ED 9F 00 00 .dword %00000000000000001001111111101101 -00474Cr 1 EE 9F 00 00 .dword %00000000000000001001111111101110 -004750r 1 EF 9F 00 00 .dword %00000000000000001001111111101111 -004754r 1 F0 9F 00 00 .dword %00000000000000001001111111110000 -004758r 1 F1 9F 00 00 .dword %00000000000000001001111111110001 -00475Cr 1 F2 9F 00 00 .dword %00000000000000001001111111110010 -004760r 1 F3 9F 00 00 .dword %00000000000000001001111111110011 -004764r 1 F4 9F 00 00 .dword %00000000000000001001111111110100 -004768r 1 F5 9F 00 00 .dword %00000000000000001001111111110101 -00476Cr 1 F6 9F 00 00 .dword %00000000000000001001111111110110 -004770r 1 F7 9F 00 00 .dword %00000000000000001001111111110111 -004774r 1 F8 9F 00 00 .dword %00000000000000001001111111111000 -004778r 1 F9 9F 00 00 .dword %00000000000000001001111111111001 -00477Cr 1 FA 9F 00 00 .dword %00000000000000001001111111111010 -004780r 1 FB 9F 00 00 .dword %00000000000000001001111111111011 -004784r 1 FC 9F 00 00 .dword %00000000000000001001111111111100 -004788r 1 FD 9F 00 00 .dword %00000000000000001001111111111101 -00478Cr 1 FE 9F 00 00 .dword %00000000000000001001111111111110 -004790r 1 FF 9F 00 00 .dword %00000000000000001001111111111111 -004794r 1 00 A0 00 00 .dword %00000000000000001010000000000000 -004798r 1 01 A0 00 00 .dword %00000000000000001010000000000001 -00479Cr 1 02 A0 00 00 .dword %00000000000000001010000000000010 -0047A0r 1 03 A0 00 00 .dword %00000000000000001010000000000011 -0047A4r 1 04 A0 00 00 .dword %00000000000000001010000000000100 -0047A8r 1 05 A0 00 00 .dword %00000000000000001010000000000101 -0047ACr 1 06 A0 00 00 .dword %00000000000000001010000000000110 -0047B0r 1 07 A0 00 00 .dword %00000000000000001010000000000111 -0047B4r 1 08 A0 00 00 .dword %00000000000000001010000000001000 -0047B8r 1 09 A0 00 00 .dword %00000000000000001010000000001001 -0047BCr 1 0A A0 00 00 .dword %00000000000000001010000000001010 -0047C0r 1 0B A0 00 00 .dword %00000000000000001010000000001011 -0047C4r 1 0C A0 00 00 .dword %00000000000000001010000000001100 -0047C8r 1 0D A0 00 00 .dword %00000000000000001010000000001101 -0047CCr 1 0E A0 00 00 .dword %00000000000000001010000000001110 -0047D0r 1 0F A0 00 00 .dword %00000000000000001010000000001111 -0047D4r 1 E1 AF 00 00 .dword %00000000000000001010111111100001 -0047D8r 1 E2 AF 00 00 .dword %00000000000000001010111111100010 -0047DCr 1 E3 AF 00 00 .dword %00000000000000001010111111100011 -0047E0r 1 E4 AF 00 00 .dword %00000000000000001010111111100100 -0047E4r 1 E5 AF 00 00 .dword %00000000000000001010111111100101 -0047E8r 1 E6 AF 00 00 .dword %00000000000000001010111111100110 -0047ECr 1 E7 AF 00 00 .dword %00000000000000001010111111100111 -0047F0r 1 E8 AF 00 00 .dword %00000000000000001010111111101000 -0047F4r 1 E9 AF 00 00 .dword %00000000000000001010111111101001 -0047F8r 1 EA AF 00 00 .dword %00000000000000001010111111101010 -0047FCr 1 EB AF 00 00 .dword %00000000000000001010111111101011 -004800r 1 EC AF 00 00 .dword %00000000000000001010111111101100 -004804r 1 ED AF 00 00 .dword %00000000000000001010111111101101 -004808r 1 EE AF 00 00 .dword %00000000000000001010111111101110 -00480Cr 1 EF AF 00 00 .dword %00000000000000001010111111101111 -004810r 1 F0 AF 00 00 .dword %00000000000000001010111111110000 -004814r 1 F1 AF 00 00 .dword %00000000000000001010111111110001 -004818r 1 F2 AF 00 00 .dword %00000000000000001010111111110010 -00481Cr 1 F3 AF 00 00 .dword %00000000000000001010111111110011 -004820r 1 F4 AF 00 00 .dword %00000000000000001010111111110100 -004824r 1 F5 AF 00 00 .dword %00000000000000001010111111110101 -004828r 1 F6 AF 00 00 .dword %00000000000000001010111111110110 -00482Cr 1 F7 AF 00 00 .dword %00000000000000001010111111110111 -004830r 1 F8 AF 00 00 .dword %00000000000000001010111111111000 -004834r 1 F9 AF 00 00 .dword %00000000000000001010111111111001 -004838r 1 FA AF 00 00 .dword %00000000000000001010111111111010 -00483Cr 1 FB AF 00 00 .dword %00000000000000001010111111111011 -004840r 1 FC AF 00 00 .dword %00000000000000001010111111111100 -004844r 1 FD AF 00 00 .dword %00000000000000001010111111111101 -004848r 1 FE AF 00 00 .dword %00000000000000001010111111111110 -00484Cr 1 FF AF 00 00 .dword %00000000000000001010111111111111 -004850r 1 00 B0 00 00 .dword %00000000000000001011000000000000 -004854r 1 01 B0 00 00 .dword %00000000000000001011000000000001 -004858r 1 02 B0 00 00 .dword %00000000000000001011000000000010 -00485Cr 1 03 B0 00 00 .dword %00000000000000001011000000000011 -004860r 1 04 B0 00 00 .dword %00000000000000001011000000000100 -004864r 1 05 B0 00 00 .dword %00000000000000001011000000000101 -004868r 1 06 B0 00 00 .dword %00000000000000001011000000000110 -00486Cr 1 07 B0 00 00 .dword %00000000000000001011000000000111 -004870r 1 08 B0 00 00 .dword %00000000000000001011000000001000 -004874r 1 09 B0 00 00 .dword %00000000000000001011000000001001 -004878r 1 0A B0 00 00 .dword %00000000000000001011000000001010 -00487Cr 1 0B B0 00 00 .dword %00000000000000001011000000001011 -004880r 1 0C B0 00 00 .dword %00000000000000001011000000001100 -004884r 1 0D B0 00 00 .dword %00000000000000001011000000001101 -004888r 1 0E B0 00 00 .dword %00000000000000001011000000001110 -00488Cr 1 0F B0 00 00 .dword %00000000000000001011000000001111 -004890r 1 E1 FF 00 00 .dword %00000000000000001111111111100001 -004894r 1 E2 FF 00 00 .dword %00000000000000001111111111100010 -004898r 1 E3 FF 00 00 .dword %00000000000000001111111111100011 -00489Cr 1 E4 FF 00 00 .dword %00000000000000001111111111100100 -0048A0r 1 E5 FF 00 00 .dword %00000000000000001111111111100101 -0048A4r 1 E6 FF 00 00 .dword %00000000000000001111111111100110 -0048A8r 1 E7 FF 00 00 .dword %00000000000000001111111111100111 -0048ACr 1 E8 FF 00 00 .dword %00000000000000001111111111101000 -0048B0r 1 E9 FF 00 00 .dword %00000000000000001111111111101001 -0048B4r 1 EA FF 00 00 .dword %00000000000000001111111111101010 -0048B8r 1 EB FF 00 00 .dword %00000000000000001111111111101011 -0048BCr 1 EC FF 00 00 .dword %00000000000000001111111111101100 -0048C0r 1 ED FF 00 00 .dword %00000000000000001111111111101101 -0048C4r 1 EE FF 00 00 .dword %00000000000000001111111111101110 -0048C8r 1 EF FF 00 00 .dword %00000000000000001111111111101111 -0048CCr 1 F0 FF 00 00 .dword %00000000000000001111111111110000 -0048D0r 1 F1 FF 00 00 .dword %00000000000000001111111111110001 -0048D4r 1 F2 FF 00 00 .dword %00000000000000001111111111110010 -0048D8r 1 F3 FF 00 00 .dword %00000000000000001111111111110011 -0048DCr 1 F4 FF 00 00 .dword %00000000000000001111111111110100 -0048E0r 1 F5 FF 00 00 .dword %00000000000000001111111111110101 -0048E4r 1 F6 FF 00 00 .dword %00000000000000001111111111110110 -0048E8r 1 F7 FF 00 00 .dword %00000000000000001111111111110111 -0048ECr 1 F8 FF 00 00 .dword %00000000000000001111111111111000 -0048F0r 1 F9 FF 00 00 .dword %00000000000000001111111111111001 -0048F4r 1 FA FF 00 00 .dword %00000000000000001111111111111010 -0048F8r 1 FB FF 00 00 .dword %00000000000000001111111111111011 -0048FCr 1 FC FF 00 00 .dword %00000000000000001111111111111100 -004900r 1 FD FF 00 00 .dword %00000000000000001111111111111101 -004904r 1 FE FF 00 00 .dword %00000000000000001111111111111110 -004908r 1 FF FF 00 00 .dword %00000000000000001111111111111111 -00490Cr 1 00 00 01 00 .dword %00000000000000010000000000000000 -004910r 1 01 00 01 00 .dword %00000000000000010000000000000001 -004914r 1 02 00 01 00 .dword %00000000000000010000000000000010 -004918r 1 03 00 01 00 .dword %00000000000000010000000000000011 -00491Cr 1 04 00 01 00 .dword %00000000000000010000000000000100 -004920r 1 05 00 01 00 .dword %00000000000000010000000000000101 -004924r 1 06 00 01 00 .dword %00000000000000010000000000000110 -004928r 1 07 00 01 00 .dword %00000000000000010000000000000111 -00492Cr 1 08 00 01 00 .dword %00000000000000010000000000001000 -004930r 1 09 00 01 00 .dword %00000000000000010000000000001001 -004934r 1 0A 00 01 00 .dword %00000000000000010000000000001010 -004938r 1 0B 00 01 00 .dword %00000000000000010000000000001011 -00493Cr 1 0C 00 01 00 .dword %00000000000000010000000000001100 -004940r 1 0D 00 01 00 .dword %00000000000000010000000000001101 -004944r 1 0E 00 01 00 .dword %00000000000000010000000000001110 -004948r 1 0F 00 01 00 .dword %00000000000000010000000000001111 -00494Cr 1 F0 FF FF 7F .dword %01111111111111111111111111110000 -004950r 1 F1 FF FF 7F .dword %01111111111111111111111111110001 -004954r 1 F2 FF FF 7F .dword %01111111111111111111111111110010 -004958r 1 F3 FF FF 7F .dword %01111111111111111111111111110011 -00495Cr 1 F4 FF FF 7F .dword %01111111111111111111111111110100 -004960r 1 F5 FF FF 7F .dword %01111111111111111111111111110101 -004964r 1 F6 FF FF 7F .dword %01111111111111111111111111110110 -004968r 1 F7 FF FF 7F .dword %01111111111111111111111111110111 -00496Cr 1 F8 FF FF 7F .dword %01111111111111111111111111111000 -004970r 1 F9 FF FF 7F .dword %01111111111111111111111111111001 -004974r 1 FA FF FF 7F .dword %01111111111111111111111111111010 -004978r 1 FB FF FF 7F .dword %01111111111111111111111111111011 -00497Cr 1 FC FF FF 7F .dword %01111111111111111111111111111100 -004980r 1 FD FF FF 7F .dword %01111111111111111111111111111101 -004984r 1 FE FF FF 7F .dword %01111111111111111111111111111110 -004988r 1 FF FF FF 7F .dword %01111111111111111111111111111111 -00498Cr 1 00 00 00 80 .dword %10000000000000000000000000000000 -004990r 1 01 00 00 80 .dword %10000000000000000000000000000001 -004994r 1 02 00 00 80 .dword %10000000000000000000000000000010 -004998r 1 03 00 00 80 .dword %10000000000000000000000000000011 -00499Cr 1 04 00 00 80 .dword %10000000000000000000000000000100 -0049A0r 1 05 00 00 80 .dword %10000000000000000000000000000101 -0049A4r 1 06 00 00 80 .dword %10000000000000000000000000000110 -0049A8r 1 07 00 00 80 .dword %10000000000000000000000000000111 -0049ACr 1 08 00 00 80 .dword %10000000000000000000000000001000 -0049B0r 1 09 00 00 80 .dword %10000000000000000000000000001001 -0049B4r 1 0A 00 00 80 .dword %10000000000000000000000000001010 -0049B8r 1 0B 00 00 80 .dword %10000000000000000000000000001011 -0049BCr 1 0C 00 00 80 .dword %10000000000000000000000000001100 -0049C0r 1 0D 00 00 80 .dword %10000000000000000000000000001101 -0049C4r 1 0E 00 00 80 .dword %10000000000000000000000000001110 -0049C8r 1 0F 00 00 80 .dword %10000000000000000000000000001111 -0049CCr 1 F0 FF FF 9F .dword %10011111111111111111111111110000 -0049D0r 1 F1 FF FF 9F .dword %10011111111111111111111111110001 -0049D4r 1 F2 FF FF 9F .dword %10011111111111111111111111110010 -0049D8r 1 F3 FF FF 9F .dword %10011111111111111111111111110011 -0049DCr 1 F4 FF FF 9F .dword %10011111111111111111111111110100 -0049E0r 1 F5 FF FF 9F .dword %10011111111111111111111111110101 -0049E4r 1 F6 FF FF 9F .dword %10011111111111111111111111110110 -0049E8r 1 F7 FF FF 9F .dword %10011111111111111111111111110111 -0049ECr 1 F8 FF FF 9F .dword %10011111111111111111111111111000 -0049F0r 1 F9 FF FF 9F .dword %10011111111111111111111111111001 -0049F4r 1 FA FF FF 9F .dword %10011111111111111111111111111010 -0049F8r 1 FB FF FF 9F .dword %10011111111111111111111111111011 -0049FCr 1 FC FF FF 9F .dword %10011111111111111111111111111100 -004A00r 1 FD FF FF 9F .dword %10011111111111111111111111111101 -004A04r 1 FE FF FF 9F .dword %10011111111111111111111111111110 -004A08r 1 FF FF FF 9F .dword %10011111111111111111111111111111 -004A0Cr 1 00 00 00 A0 .dword %10100000000000000000000000000000 -004A10r 1 01 00 00 A0 .dword %10100000000000000000000000000001 -004A14r 1 02 00 00 A0 .dword %10100000000000000000000000000010 -004A18r 1 03 00 00 A0 .dword %10100000000000000000000000000011 -004A1Cr 1 04 00 00 A0 .dword %10100000000000000000000000000100 -004A20r 1 05 00 00 A0 .dword %10100000000000000000000000000101 -004A24r 1 06 00 00 A0 .dword %10100000000000000000000000000110 -004A28r 1 07 00 00 A0 .dword %10100000000000000000000000000111 -004A2Cr 1 08 00 00 A0 .dword %10100000000000000000000000001000 -004A30r 1 09 00 00 A0 .dword %10100000000000000000000000001001 -004A34r 1 0A 00 00 A0 .dword %10100000000000000000000000001010 -004A38r 1 0B 00 00 A0 .dword %10100000000000000000000000001011 -004A3Cr 1 0C 00 00 A0 .dword %10100000000000000000000000001100 -004A40r 1 0D 00 00 A0 .dword %10100000000000000000000000001101 -004A44r 1 0E 00 00 A0 .dword %10100000000000000000000000001110 -004A48r 1 0F 00 00 A0 .dword %10100000000000000000000000001111 -004A4Cr 1 F0 FF FF FF .dword %11111111111111111111111111110000 -004A50r 1 F1 FF FF FF .dword %11111111111111111111111111110001 -004A54r 1 F2 FF FF FF .dword %11111111111111111111111111110010 -004A58r 1 F3 FF FF FF .dword %11111111111111111111111111110011 -004A5Cr 1 F4 FF FF FF .dword %11111111111111111111111111110100 -004A60r 1 F5 FF FF FF .dword %11111111111111111111111111110101 -004A64r 1 F6 FF FF FF .dword %11111111111111111111111111110110 -004A68r 1 F7 FF FF FF .dword %11111111111111111111111111110111 -004A6Cr 1 F8 FF FF FF .dword %11111111111111111111111111111000 -004A70r 1 F9 FF FF FF .dword %11111111111111111111111111111001 -004A74r 1 FA FF FF FF .dword %11111111111111111111111111111010 -004A78r 1 FB FF FF FF .dword %11111111111111111111111111111011 -004A7Cr 1 FC FF FF FF .dword %11111111111111111111111111111100 -004A80r 1 FD FF FF FF .dword %11111111111111111111111111111101 -004A84r 1 FE FF FF FF .dword %11111111111111111111111111111110 -004A88r 1 FF FF FF FF .dword %11111111111111111111111111111111 +0044D0r 1 ; binary values, full length +0044D0r 1 00 00 00 00 .dword %00000000000000000000000000000000 +0044D4r 1 01 00 00 00 .dword %00000000000000000000000000000001 +0044D8r 1 02 00 00 00 .dword %00000000000000000000000000000010 +0044DCr 1 03 00 00 00 .dword %00000000000000000000000000000011 +0044E0r 1 04 00 00 00 .dword %00000000000000000000000000000100 +0044E4r 1 05 00 00 00 .dword %00000000000000000000000000000101 +0044E8r 1 06 00 00 00 .dword %00000000000000000000000000000110 +0044ECr 1 07 00 00 00 .dword %00000000000000000000000000000111 +0044F0r 1 08 00 00 00 .dword %00000000000000000000000000001000 +0044F4r 1 09 00 00 00 .dword %00000000000000000000000000001001 +0044F8r 1 0A 00 00 00 .dword %00000000000000000000000000001010 +0044FCr 1 0B 00 00 00 .dword %00000000000000000000000000001011 +004500r 1 0C 00 00 00 .dword %00000000000000000000000000001100 +004504r 1 0D 00 00 00 .dword %00000000000000000000000000001101 +004508r 1 0E 00 00 00 .dword %00000000000000000000000000001110 +00450Cr 1 0F 00 00 00 .dword %00000000000000000000000000001111 +004510r 1 10 00 00 00 .dword %00000000000000000000000000010000 +004514r 1 11 00 00 00 .dword %00000000000000000000000000010001 +004518r 1 12 00 00 00 .dword %00000000000000000000000000010010 +00451Cr 1 13 00 00 00 .dword %00000000000000000000000000010011 +004520r 1 70 00 00 00 .dword %00000000000000000000000001110000 +004524r 1 71 00 00 00 .dword %00000000000000000000000001110001 +004528r 1 72 00 00 00 .dword %00000000000000000000000001110010 +00452Cr 1 73 00 00 00 .dword %00000000000000000000000001110011 +004530r 1 74 00 00 00 .dword %00000000000000000000000001110100 +004534r 1 75 00 00 00 .dword %00000000000000000000000001110101 +004538r 1 76 00 00 00 .dword %00000000000000000000000001110110 +00453Cr 1 77 00 00 00 .dword %00000000000000000000000001110111 +004540r 1 78 00 00 00 .dword %00000000000000000000000001111000 +004544r 1 79 00 00 00 .dword %00000000000000000000000001111001 +004548r 1 7A 00 00 00 .dword %00000000000000000000000001111010 +00454Cr 1 7B 00 00 00 .dword %00000000000000000000000001111011 +004550r 1 7C 00 00 00 .dword %00000000000000000000000001111100 +004554r 1 7D 00 00 00 .dword %00000000000000000000000001111101 +004558r 1 7E 00 00 00 .dword %00000000000000000000000001111110 +00455Cr 1 7F 00 00 00 .dword %00000000000000000000000001111111 +004560r 1 80 00 00 00 .dword %00000000000000000000000010000000 +004564r 1 81 00 00 00 .dword %00000000000000000000000010000001 +004568r 1 82 00 00 00 .dword %00000000000000000000000010000010 +00456Cr 1 83 00 00 00 .dword %00000000000000000000000010000011 +004570r 1 84 00 00 00 .dword %00000000000000000000000010000100 +004574r 1 85 00 00 00 .dword %00000000000000000000000010000101 +004578r 1 86 00 00 00 .dword %00000000000000000000000010000110 +00457Cr 1 F0 00 00 00 .dword %00000000000000000000000011110000 +004580r 1 F1 00 00 00 .dword %00000000000000000000000011110001 +004584r 1 F2 00 00 00 .dword %00000000000000000000000011110010 +004588r 1 F3 00 00 00 .dword %00000000000000000000000011110011 +00458Cr 1 F4 00 00 00 .dword %00000000000000000000000011110100 +004590r 1 F5 00 00 00 .dword %00000000000000000000000011110101 +004594r 1 F6 00 00 00 .dword %00000000000000000000000011110110 +004598r 1 F7 00 00 00 .dword %00000000000000000000000011110111 +00459Cr 1 F8 00 00 00 .dword %00000000000000000000000011111000 +0045A0r 1 F9 00 00 00 .dword %00000000000000000000000011111001 +0045A4r 1 FA 00 00 00 .dword %00000000000000000000000011111010 +0045A8r 1 FB 00 00 00 .dword %00000000000000000000000011111011 +0045ACr 1 FC 00 00 00 .dword %00000000000000000000000011111100 +0045B0r 1 FD 00 00 00 .dword %00000000000000000000000011111101 +0045B4r 1 FE 00 00 00 .dword %00000000000000000000000011111110 +0045B8r 1 FF 00 00 00 .dword %00000000000000000000000011111111 +0045BCr 1 00 01 00 00 .dword %00000000000000000000000100000000 +0045C0r 1 01 01 00 00 .dword %00000000000000000000000100000001 +0045C4r 1 02 01 00 00 .dword %00000000000000000000000100000010 +0045C8r 1 03 01 00 00 .dword %00000000000000000000000100000011 +0045CCr 1 D2 0F 00 00 .dword %00000000000000000000111111010010 +0045D0r 1 D3 0F 00 00 .dword %00000000000000000000111111010011 +0045D4r 1 D4 0F 00 00 .dword %00000000000000000000111111010100 +0045D8r 1 D5 0F 00 00 .dword %00000000000000000000111111010101 +0045DCr 1 D6 0F 00 00 .dword %00000000000000000000111111010110 +0045E0r 1 D7 0F 00 00 .dword %00000000000000000000111111010111 +0045E4r 1 D8 0F 00 00 .dword %00000000000000000000111111011000 +0045E8r 1 D9 0F 00 00 .dword %00000000000000000000111111011001 +0045ECr 1 DA 0F 00 00 .dword %00000000000000000000111111011010 +0045F0r 1 DB 0F 00 00 .dword %00000000000000000000111111011011 +0045F4r 1 DC 0F 00 00 .dword %00000000000000000000111111011100 +0045F8r 1 DD 0F 00 00 .dword %00000000000000000000111111011101 +0045FCr 1 DE 0F 00 00 .dword %00000000000000000000111111011110 +004600r 1 DF 0F 00 00 .dword %00000000000000000000111111011111 +004604r 1 E0 0F 00 00 .dword %00000000000000000000111111100000 +004608r 1 E1 0F 00 00 .dword %00000000000000000000111111100001 +00460Cr 1 E2 0F 00 00 .dword %00000000000000000000111111100010 +004610r 1 E3 0F 00 00 .dword %00000000000000000000111111100011 +004614r 1 E4 0F 00 00 .dword %00000000000000000000111111100100 +004618r 1 E5 0F 00 00 .dword %00000000000000000000111111100101 +00461Cr 1 E6 0F 00 00 .dword %00000000000000000000111111100110 +004620r 1 E7 0F 00 00 .dword %00000000000000000000111111100111 +004624r 1 E8 0F 00 00 .dword %00000000000000000000111111101000 +004628r 1 E9 0F 00 00 .dword %00000000000000000000111111101001 +00462Cr 1 EA 0F 00 00 .dword %00000000000000000000111111101010 +004630r 1 EB 0F 00 00 .dword %00000000000000000000111111101011 +004634r 1 EC 0F 00 00 .dword %00000000000000000000111111101100 +004638r 1 ED 0F 00 00 .dword %00000000000000000000111111101101 +00463Cr 1 EE 0F 00 00 .dword %00000000000000000000111111101110 +004640r 1 EF 0F 00 00 .dword %00000000000000000000111111101111 +004644r 1 F0 0F 00 00 .dword %00000000000000000000111111110000 +004648r 1 F1 0F 00 00 .dword %00000000000000000000111111110001 +00464Cr 1 F2 0F 00 00 .dword %00000000000000000000111111110010 +004650r 1 F3 0F 00 00 .dword %00000000000000000000111111110011 +004654r 1 F4 0F 00 00 .dword %00000000000000000000111111110100 +004658r 1 F5 0F 00 00 .dword %00000000000000000000111111110101 +00465Cr 1 F6 0F 00 00 .dword %00000000000000000000111111110110 +004660r 1 F7 0F 00 00 .dword %00000000000000000000111111110111 +004664r 1 F8 0F 00 00 .dword %00000000000000000000111111111000 +004668r 1 F9 0F 00 00 .dword %00000000000000000000111111111001 +00466Cr 1 FA 0F 00 00 .dword %00000000000000000000111111111010 +004670r 1 FB 0F 00 00 .dword %00000000000000000000111111111011 +004674r 1 FC 0F 00 00 .dword %00000000000000000000111111111100 +004678r 1 FD 0F 00 00 .dword %00000000000000000000111111111101 +00467Cr 1 FE 0F 00 00 .dword %00000000000000000000111111111110 +004680r 1 FF 0F 00 00 .dword %00000000000000000000111111111111 +004684r 1 00 10 00 00 .dword %00000000000000000001000000000000 +004688r 1 01 10 00 00 .dword %00000000000000000001000000000001 +00468Cr 1 02 10 00 00 .dword %00000000000000000001000000000010 +004690r 1 03 10 00 00 .dword %00000000000000000001000000000011 +004694r 1 04 10 00 00 .dword %00000000000000000001000000000100 +004698r 1 05 10 00 00 .dword %00000000000000000001000000000101 +00469Cr 1 06 10 00 00 .dword %00000000000000000001000000000110 +0046A0r 1 07 10 00 00 .dword %00000000000000000001000000000111 +0046A4r 1 08 10 00 00 .dword %00000000000000000001000000001000 +0046A8r 1 F0 7F 00 00 .dword %00000000000000000111111111110000 +0046ACr 1 F1 7F 00 00 .dword %00000000000000000111111111110001 +0046B0r 1 F2 7F 00 00 .dword %00000000000000000111111111110010 +0046B4r 1 F3 7F 00 00 .dword %00000000000000000111111111110011 +0046B8r 1 F4 7F 00 00 .dword %00000000000000000111111111110100 +0046BCr 1 F5 7F 00 00 .dword %00000000000000000111111111110101 +0046C0r 1 F6 7F 00 00 .dword %00000000000000000111111111110110 +0046C4r 1 F7 7F 00 00 .dword %00000000000000000111111111110111 +0046C8r 1 F8 7F 00 00 .dword %00000000000000000111111111111000 +0046CCr 1 F9 7F 00 00 .dword %00000000000000000111111111111001 +0046D0r 1 FA 7F 00 00 .dword %00000000000000000111111111111010 +0046D4r 1 FB 7F 00 00 .dword %00000000000000000111111111111011 +0046D8r 1 FC 7F 00 00 .dword %00000000000000000111111111111100 +0046DCr 1 FD 7F 00 00 .dword %00000000000000000111111111111101 +0046E0r 1 FE 7F 00 00 .dword %00000000000000000111111111111110 +0046E4r 1 FF 7F 00 00 .dword %00000000000000000111111111111111 +0046E8r 1 00 80 00 00 .dword %00000000000000001000000000000000 +0046ECr 1 01 80 00 00 .dword %00000000000000001000000000000001 +0046F0r 1 02 80 00 00 .dword %00000000000000001000000000000010 +0046F4r 1 03 80 00 00 .dword %00000000000000001000000000000011 +0046F8r 1 04 80 00 00 .dword %00000000000000001000000000000100 +0046FCr 1 05 80 00 00 .dword %00000000000000001000000000000101 +004700r 1 06 80 00 00 .dword %00000000000000001000000000000110 +004704r 1 07 80 00 00 .dword %00000000000000001000000000000111 +004708r 1 08 80 00 00 .dword %00000000000000001000000000001000 +00470Cr 1 09 80 00 00 .dword %00000000000000001000000000001001 +004710r 1 0A 80 00 00 .dword %00000000000000001000000000001010 +004714r 1 0B 80 00 00 .dword %00000000000000001000000000001011 +004718r 1 E1 9F 00 00 .dword %00000000000000001001111111100001 +00471Cr 1 E2 9F 00 00 .dword %00000000000000001001111111100010 +004720r 1 E3 9F 00 00 .dword %00000000000000001001111111100011 +004724r 1 E4 9F 00 00 .dword %00000000000000001001111111100100 +004728r 1 E5 9F 00 00 .dword %00000000000000001001111111100101 +00472Cr 1 E6 9F 00 00 .dword %00000000000000001001111111100110 +004730r 1 E7 9F 00 00 .dword %00000000000000001001111111100111 +004734r 1 E8 9F 00 00 .dword %00000000000000001001111111101000 +004738r 1 E9 9F 00 00 .dword %00000000000000001001111111101001 +00473Cr 1 EA 9F 00 00 .dword %00000000000000001001111111101010 +004740r 1 EB 9F 00 00 .dword %00000000000000001001111111101011 +004744r 1 EC 9F 00 00 .dword %00000000000000001001111111101100 +004748r 1 ED 9F 00 00 .dword %00000000000000001001111111101101 +00474Cr 1 EE 9F 00 00 .dword %00000000000000001001111111101110 +004750r 1 EF 9F 00 00 .dword %00000000000000001001111111101111 +004754r 1 F0 9F 00 00 .dword %00000000000000001001111111110000 +004758r 1 F1 9F 00 00 .dword %00000000000000001001111111110001 +00475Cr 1 F2 9F 00 00 .dword %00000000000000001001111111110010 +004760r 1 F3 9F 00 00 .dword %00000000000000001001111111110011 +004764r 1 F4 9F 00 00 .dword %00000000000000001001111111110100 +004768r 1 F5 9F 00 00 .dword %00000000000000001001111111110101 +00476Cr 1 F6 9F 00 00 .dword %00000000000000001001111111110110 +004770r 1 F7 9F 00 00 .dword %00000000000000001001111111110111 +004774r 1 F8 9F 00 00 .dword %00000000000000001001111111111000 +004778r 1 F9 9F 00 00 .dword %00000000000000001001111111111001 +00477Cr 1 FA 9F 00 00 .dword %00000000000000001001111111111010 +004780r 1 FB 9F 00 00 .dword %00000000000000001001111111111011 +004784r 1 FC 9F 00 00 .dword %00000000000000001001111111111100 +004788r 1 FD 9F 00 00 .dword %00000000000000001001111111111101 +00478Cr 1 FE 9F 00 00 .dword %00000000000000001001111111111110 +004790r 1 FF 9F 00 00 .dword %00000000000000001001111111111111 +004794r 1 00 A0 00 00 .dword %00000000000000001010000000000000 +004798r 1 01 A0 00 00 .dword %00000000000000001010000000000001 +00479Cr 1 02 A0 00 00 .dword %00000000000000001010000000000010 +0047A0r 1 03 A0 00 00 .dword %00000000000000001010000000000011 +0047A4r 1 04 A0 00 00 .dword %00000000000000001010000000000100 +0047A8r 1 05 A0 00 00 .dword %00000000000000001010000000000101 +0047ACr 1 06 A0 00 00 .dword %00000000000000001010000000000110 +0047B0r 1 07 A0 00 00 .dword %00000000000000001010000000000111 +0047B4r 1 08 A0 00 00 .dword %00000000000000001010000000001000 +0047B8r 1 09 A0 00 00 .dword %00000000000000001010000000001001 +0047BCr 1 0A A0 00 00 .dword %00000000000000001010000000001010 +0047C0r 1 0B A0 00 00 .dword %00000000000000001010000000001011 +0047C4r 1 0C A0 00 00 .dword %00000000000000001010000000001100 +0047C8r 1 0D A0 00 00 .dword %00000000000000001010000000001101 +0047CCr 1 0E A0 00 00 .dword %00000000000000001010000000001110 +0047D0r 1 0F A0 00 00 .dword %00000000000000001010000000001111 +0047D4r 1 E1 AF 00 00 .dword %00000000000000001010111111100001 +0047D8r 1 E2 AF 00 00 .dword %00000000000000001010111111100010 +0047DCr 1 E3 AF 00 00 .dword %00000000000000001010111111100011 +0047E0r 1 E4 AF 00 00 .dword %00000000000000001010111111100100 +0047E4r 1 E5 AF 00 00 .dword %00000000000000001010111111100101 +0047E8r 1 E6 AF 00 00 .dword %00000000000000001010111111100110 +0047ECr 1 E7 AF 00 00 .dword %00000000000000001010111111100111 +0047F0r 1 E8 AF 00 00 .dword %00000000000000001010111111101000 +0047F4r 1 E9 AF 00 00 .dword %00000000000000001010111111101001 +0047F8r 1 EA AF 00 00 .dword %00000000000000001010111111101010 +0047FCr 1 EB AF 00 00 .dword %00000000000000001010111111101011 +004800r 1 EC AF 00 00 .dword %00000000000000001010111111101100 +004804r 1 ED AF 00 00 .dword %00000000000000001010111111101101 +004808r 1 EE AF 00 00 .dword %00000000000000001010111111101110 +00480Cr 1 EF AF 00 00 .dword %00000000000000001010111111101111 +004810r 1 F0 AF 00 00 .dword %00000000000000001010111111110000 +004814r 1 F1 AF 00 00 .dword %00000000000000001010111111110001 +004818r 1 F2 AF 00 00 .dword %00000000000000001010111111110010 +00481Cr 1 F3 AF 00 00 .dword %00000000000000001010111111110011 +004820r 1 F4 AF 00 00 .dword %00000000000000001010111111110100 +004824r 1 F5 AF 00 00 .dword %00000000000000001010111111110101 +004828r 1 F6 AF 00 00 .dword %00000000000000001010111111110110 +00482Cr 1 F7 AF 00 00 .dword %00000000000000001010111111110111 +004830r 1 F8 AF 00 00 .dword %00000000000000001010111111111000 +004834r 1 F9 AF 00 00 .dword %00000000000000001010111111111001 +004838r 1 FA AF 00 00 .dword %00000000000000001010111111111010 +00483Cr 1 FB AF 00 00 .dword %00000000000000001010111111111011 +004840r 1 FC AF 00 00 .dword %00000000000000001010111111111100 +004844r 1 FD AF 00 00 .dword %00000000000000001010111111111101 +004848r 1 FE AF 00 00 .dword %00000000000000001010111111111110 +00484Cr 1 FF AF 00 00 .dword %00000000000000001010111111111111 +004850r 1 00 B0 00 00 .dword %00000000000000001011000000000000 +004854r 1 01 B0 00 00 .dword %00000000000000001011000000000001 +004858r 1 02 B0 00 00 .dword %00000000000000001011000000000010 +00485Cr 1 03 B0 00 00 .dword %00000000000000001011000000000011 +004860r 1 04 B0 00 00 .dword %00000000000000001011000000000100 +004864r 1 05 B0 00 00 .dword %00000000000000001011000000000101 +004868r 1 06 B0 00 00 .dword %00000000000000001011000000000110 +00486Cr 1 07 B0 00 00 .dword %00000000000000001011000000000111 +004870r 1 08 B0 00 00 .dword %00000000000000001011000000001000 +004874r 1 09 B0 00 00 .dword %00000000000000001011000000001001 +004878r 1 0A B0 00 00 .dword %00000000000000001011000000001010 +00487Cr 1 0B B0 00 00 .dword %00000000000000001011000000001011 +004880r 1 0C B0 00 00 .dword %00000000000000001011000000001100 +004884r 1 0D B0 00 00 .dword %00000000000000001011000000001101 +004888r 1 0E B0 00 00 .dword %00000000000000001011000000001110 +00488Cr 1 0F B0 00 00 .dword %00000000000000001011000000001111 +004890r 1 E1 FF 00 00 .dword %00000000000000001111111111100001 +004894r 1 E2 FF 00 00 .dword %00000000000000001111111111100010 +004898r 1 E3 FF 00 00 .dword %00000000000000001111111111100011 +00489Cr 1 E4 FF 00 00 .dword %00000000000000001111111111100100 +0048A0r 1 E5 FF 00 00 .dword %00000000000000001111111111100101 +0048A4r 1 E6 FF 00 00 .dword %00000000000000001111111111100110 +0048A8r 1 E7 FF 00 00 .dword %00000000000000001111111111100111 +0048ACr 1 E8 FF 00 00 .dword %00000000000000001111111111101000 +0048B0r 1 E9 FF 00 00 .dword %00000000000000001111111111101001 +0048B4r 1 EA FF 00 00 .dword %00000000000000001111111111101010 +0048B8r 1 EB FF 00 00 .dword %00000000000000001111111111101011 +0048BCr 1 EC FF 00 00 .dword %00000000000000001111111111101100 +0048C0r 1 ED FF 00 00 .dword %00000000000000001111111111101101 +0048C4r 1 EE FF 00 00 .dword %00000000000000001111111111101110 +0048C8r 1 EF FF 00 00 .dword %00000000000000001111111111101111 +0048CCr 1 F0 FF 00 00 .dword %00000000000000001111111111110000 +0048D0r 1 F1 FF 00 00 .dword %00000000000000001111111111110001 +0048D4r 1 F2 FF 00 00 .dword %00000000000000001111111111110010 +0048D8r 1 F3 FF 00 00 .dword %00000000000000001111111111110011 +0048DCr 1 F4 FF 00 00 .dword %00000000000000001111111111110100 +0048E0r 1 F5 FF 00 00 .dword %00000000000000001111111111110101 +0048E4r 1 F6 FF 00 00 .dword %00000000000000001111111111110110 +0048E8r 1 F7 FF 00 00 .dword %00000000000000001111111111110111 +0048ECr 1 F8 FF 00 00 .dword %00000000000000001111111111111000 +0048F0r 1 F9 FF 00 00 .dword %00000000000000001111111111111001 +0048F4r 1 FA FF 00 00 .dword %00000000000000001111111111111010 +0048F8r 1 FB FF 00 00 .dword %00000000000000001111111111111011 +0048FCr 1 FC FF 00 00 .dword %00000000000000001111111111111100 +004900r 1 FD FF 00 00 .dword %00000000000000001111111111111101 +004904r 1 FE FF 00 00 .dword %00000000000000001111111111111110 +004908r 1 FF FF 00 00 .dword %00000000000000001111111111111111 +00490Cr 1 00 00 01 00 .dword %00000000000000010000000000000000 +004910r 1 01 00 01 00 .dword %00000000000000010000000000000001 +004914r 1 02 00 01 00 .dword %00000000000000010000000000000010 +004918r 1 03 00 01 00 .dword %00000000000000010000000000000011 +00491Cr 1 04 00 01 00 .dword %00000000000000010000000000000100 +004920r 1 05 00 01 00 .dword %00000000000000010000000000000101 +004924r 1 06 00 01 00 .dword %00000000000000010000000000000110 +004928r 1 07 00 01 00 .dword %00000000000000010000000000000111 +00492Cr 1 08 00 01 00 .dword %00000000000000010000000000001000 +004930r 1 09 00 01 00 .dword %00000000000000010000000000001001 +004934r 1 0A 00 01 00 .dword %00000000000000010000000000001010 +004938r 1 0B 00 01 00 .dword %00000000000000010000000000001011 +00493Cr 1 0C 00 01 00 .dword %00000000000000010000000000001100 +004940r 1 0D 00 01 00 .dword %00000000000000010000000000001101 +004944r 1 0E 00 01 00 .dword %00000000000000010000000000001110 +004948r 1 0F 00 01 00 .dword %00000000000000010000000000001111 +00494Cr 1 F0 FF FF 7F .dword %01111111111111111111111111110000 +004950r 1 F1 FF FF 7F .dword %01111111111111111111111111110001 +004954r 1 F2 FF FF 7F .dword %01111111111111111111111111110010 +004958r 1 F3 FF FF 7F .dword %01111111111111111111111111110011 +00495Cr 1 F4 FF FF 7F .dword %01111111111111111111111111110100 +004960r 1 F5 FF FF 7F .dword %01111111111111111111111111110101 +004964r 1 F6 FF FF 7F .dword %01111111111111111111111111110110 +004968r 1 F7 FF FF 7F .dword %01111111111111111111111111110111 +00496Cr 1 F8 FF FF 7F .dword %01111111111111111111111111111000 +004970r 1 F9 FF FF 7F .dword %01111111111111111111111111111001 +004974r 1 FA FF FF 7F .dword %01111111111111111111111111111010 +004978r 1 FB FF FF 7F .dword %01111111111111111111111111111011 +00497Cr 1 FC FF FF 7F .dword %01111111111111111111111111111100 +004980r 1 FD FF FF 7F .dword %01111111111111111111111111111101 +004984r 1 FE FF FF 7F .dword %01111111111111111111111111111110 +004988r 1 FF FF FF 7F .dword %01111111111111111111111111111111 +00498Cr 1 00 00 00 80 .dword %10000000000000000000000000000000 +004990r 1 01 00 00 80 .dword %10000000000000000000000000000001 +004994r 1 02 00 00 80 .dword %10000000000000000000000000000010 +004998r 1 03 00 00 80 .dword %10000000000000000000000000000011 +00499Cr 1 04 00 00 80 .dword %10000000000000000000000000000100 +0049A0r 1 05 00 00 80 .dword %10000000000000000000000000000101 +0049A4r 1 06 00 00 80 .dword %10000000000000000000000000000110 +0049A8r 1 07 00 00 80 .dword %10000000000000000000000000000111 +0049ACr 1 08 00 00 80 .dword %10000000000000000000000000001000 +0049B0r 1 09 00 00 80 .dword %10000000000000000000000000001001 +0049B4r 1 0A 00 00 80 .dword %10000000000000000000000000001010 +0049B8r 1 0B 00 00 80 .dword %10000000000000000000000000001011 +0049BCr 1 0C 00 00 80 .dword %10000000000000000000000000001100 +0049C0r 1 0D 00 00 80 .dword %10000000000000000000000000001101 +0049C4r 1 0E 00 00 80 .dword %10000000000000000000000000001110 +0049C8r 1 0F 00 00 80 .dword %10000000000000000000000000001111 +0049CCr 1 F0 FF FF 9F .dword %10011111111111111111111111110000 +0049D0r 1 F1 FF FF 9F .dword %10011111111111111111111111110001 +0049D4r 1 F2 FF FF 9F .dword %10011111111111111111111111110010 +0049D8r 1 F3 FF FF 9F .dword %10011111111111111111111111110011 +0049DCr 1 F4 FF FF 9F .dword %10011111111111111111111111110100 +0049E0r 1 F5 FF FF 9F .dword %10011111111111111111111111110101 +0049E4r 1 F6 FF FF 9F .dword %10011111111111111111111111110110 +0049E8r 1 F7 FF FF 9F .dword %10011111111111111111111111110111 +0049ECr 1 F8 FF FF 9F .dword %10011111111111111111111111111000 +0049F0r 1 F9 FF FF 9F .dword %10011111111111111111111111111001 +0049F4r 1 FA FF FF 9F .dword %10011111111111111111111111111010 +0049F8r 1 FB FF FF 9F .dword %10011111111111111111111111111011 +0049FCr 1 FC FF FF 9F .dword %10011111111111111111111111111100 +004A00r 1 FD FF FF 9F .dword %10011111111111111111111111111101 +004A04r 1 FE FF FF 9F .dword %10011111111111111111111111111110 +004A08r 1 FF FF FF 9F .dword %10011111111111111111111111111111 +004A0Cr 1 00 00 00 A0 .dword %10100000000000000000000000000000 +004A10r 1 01 00 00 A0 .dword %10100000000000000000000000000001 +004A14r 1 02 00 00 A0 .dword %10100000000000000000000000000010 +004A18r 1 03 00 00 A0 .dword %10100000000000000000000000000011 +004A1Cr 1 04 00 00 A0 .dword %10100000000000000000000000000100 +004A20r 1 05 00 00 A0 .dword %10100000000000000000000000000101 +004A24r 1 06 00 00 A0 .dword %10100000000000000000000000000110 +004A28r 1 07 00 00 A0 .dword %10100000000000000000000000000111 +004A2Cr 1 08 00 00 A0 .dword %10100000000000000000000000001000 +004A30r 1 09 00 00 A0 .dword %10100000000000000000000000001001 +004A34r 1 0A 00 00 A0 .dword %10100000000000000000000000001010 +004A38r 1 0B 00 00 A0 .dword %10100000000000000000000000001011 +004A3Cr 1 0C 00 00 A0 .dword %10100000000000000000000000001100 +004A40r 1 0D 00 00 A0 .dword %10100000000000000000000000001101 +004A44r 1 0E 00 00 A0 .dword %10100000000000000000000000001110 +004A48r 1 0F 00 00 A0 .dword %10100000000000000000000000001111 +004A4Cr 1 F0 FF FF FF .dword %11111111111111111111111111110000 +004A50r 1 F1 FF FF FF .dword %11111111111111111111111111110001 +004A54r 1 F2 FF FF FF .dword %11111111111111111111111111110010 +004A58r 1 F3 FF FF FF .dword %11111111111111111111111111110011 +004A5Cr 1 F4 FF FF FF .dword %11111111111111111111111111110100 +004A60r 1 F5 FF FF FF .dword %11111111111111111111111111110101 +004A64r 1 F6 FF FF FF .dword %11111111111111111111111111110110 +004A68r 1 F7 FF FF FF .dword %11111111111111111111111111110111 +004A6Cr 1 F8 FF FF FF .dword %11111111111111111111111111111000 +004A70r 1 F9 FF FF FF .dword %11111111111111111111111111111001 +004A74r 1 FA FF FF FF .dword %11111111111111111111111111111010 +004A78r 1 FB FF FF FF .dword %11111111111111111111111111111011 +004A7Cr 1 FC FF FF FF .dword %11111111111111111111111111111100 +004A80r 1 FD FF FF FF .dword %11111111111111111111111111111101 +004A84r 1 FE FF FF FF .dword %11111111111111111111111111111110 +004A88r 1 FF FF FF FF .dword %11111111111111111111111111111111 004A8Cr 1 -004A8Cr 1 ; multiple values on one line, decimal -004A8Cr 1 00 00 00 00 .dword 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +004A8Cr 1 ; multiple values on one line, decimal +004A8Cr 1 00 00 00 00 .dword 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 004A90r 1 01 00 00 00 004A94r 1 02 00 00 00 -004ACCr 1 10 00 00 00 .dword 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +004ACCr 1 10 00 00 00 .dword 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 004AD0r 1 11 00 00 00 004AD4r 1 12 00 00 00 -004B0Cr 1 70 00 00 00 .dword 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +004B0Cr 1 70 00 00 00 .dword 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 004B10r 1 71 00 00 00 004B14r 1 72 00 00 00 -004B4Cr 1 80 00 00 00 .dword 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +004B4Cr 1 80 00 00 00 .dword 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 004B50r 1 81 00 00 00 004B54r 1 82 00 00 00 -004B8Cr 1 F0 00 00 00 .dword 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +004B8Cr 1 F0 00 00 00 .dword 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 004B90r 1 F1 00 00 00 004B94r 1 F2 00 00 00 -004BCCr 1 00 01 00 00 .dword 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 +004BCCr 1 00 01 00 00 .dword 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 004BD0r 1 01 01 00 00 004BD4r 1 02 01 00 00 -004C0Cr 1 E0 0F 00 00 .dword 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 +004C0Cr 1 E0 0F 00 00 .dword 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 004C10r 1 E1 0F 00 00 004C14r 1 E2 0F 00 00 -004C4Cr 1 F0 0F 00 00 .dword 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 +004C4Cr 1 F0 0F 00 00 .dword 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 004C50r 1 F1 0F 00 00 004C54r 1 F2 0F 00 00 -004C8Cr 1 00 10 00 00 .dword 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 +004C8Cr 1 00 10 00 00 .dword 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 004C90r 1 01 10 00 00 004C94r 1 02 10 00 00 -004CCCr 1 F0 7F 00 00 .dword 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 +004CCCr 1 F0 7F 00 00 .dword 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 004CD0r 1 F1 7F 00 00 004CD4r 1 F2 7F 00 00 -004D0Cr 1 00 80 00 00 .dword 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 +004D0Cr 1 00 80 00 00 .dword 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 004D10r 1 01 80 00 00 004D14r 1 02 80 00 00 -004D4Cr 1 F0 9F 00 00 .dword 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 +004D4Cr 1 F0 9F 00 00 .dword 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 004D50r 1 F1 9F 00 00 004D54r 1 F2 9F 00 00 -004D8Cr 1 00 A0 00 00 .dword 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 +004D8Cr 1 00 A0 00 00 .dword 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 004D90r 1 01 A0 00 00 004D94r 1 02 A0 00 00 -004DCCr 1 F0 AF 00 00 .dword 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 +004DCCr 1 F0 AF 00 00 .dword 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 004DD0r 1 F1 AF 00 00 004DD4r 1 F2 AF 00 00 -004E0Cr 1 00 B0 00 00 .dword 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 +004E0Cr 1 00 B0 00 00 .dword 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 004E10r 1 01 B0 00 00 004E14r 1 02 B0 00 00 -004E4Cr 1 F0 FF 00 00 .dword 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 +004E4Cr 1 F0 FF 00 00 .dword 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 004E50r 1 F1 FF 00 00 004E54r 1 F2 FF 00 00 -004E8Cr 1 00 00 01 00 .dword 65536,65537,65538,65539,65540,65541,65542,65543,65544,65545,65546,65547,65548,65549,65550,65551 +004E8Cr 1 00 00 01 00 .dword 65536,65537,65538,65539,65540,65541,65542,65543,65544,65545,65546,65547,65548,65549,65550,65551 004E90r 1 01 00 01 00 004E94r 1 02 00 01 00 -004ECCr 1 FF FF FF 7F .dword 2147483647,2147483648,2147483649,2147483650,2147483651,2147483652,2147483653,2147483654,2147483655,2147483656,2147483657,2147483658,2147483659,2147483660,2147483661,2147483662 +004ECCr 1 FF FF FF 7F .dword 2147483647,2147483648,2147483649,2147483650,2147483651,2147483652,2147483653,2147483654,2147483655,2147483656,2147483657,2147483658,2147483659,2147483660,2147483661,2147483662 004ED0r 1 00 00 00 80 004ED4r 1 01 00 00 80 -004F0Cr 1 0F 00 00 80 .dword 2147483663,2147483664,2147483665,2147483666,2147483667,2147483668,2147483669,2147483670,2147483671,2147483672,2147483673,2147483674,2147483675,2147483676,2147483677,2147483678 +004F0Cr 1 0F 00 00 80 .dword 2147483663,2147483664,2147483665,2147483666,2147483667,2147483668,2147483669,2147483670,2147483671,2147483672,2147483673,2147483674,2147483675,2147483676,2147483677,2147483678 004F10r 1 10 00 00 80 004F14r 1 11 00 00 80 -004F4Cr 1 FF FF FF 9F .dword 2684354559,2684354560,2684354561,2684354562,2684354563,2684354564,2684354565,2684354566,2684354567,2684354568,2684354569,2684354570,2684354571,2684354572,2684354573,2684354574 +004F4Cr 1 FF FF FF 9F .dword 2684354559,2684354560,2684354561,2684354562,2684354563,2684354564,2684354565,2684354566,2684354567,2684354568,2684354569,2684354570,2684354571,2684354572,2684354573,2684354574 004F50r 1 00 00 00 A0 004F54r 1 01 00 00 A0 -004F8Cr 1 0F 00 00 A0 .dword 2684354575,2684354576,2684354577,2684354578,2684354579,2684354580,2684354581,2684354582,2684354583,2684354584,2684354585,2684354586,2684354587,2684354588,2684354589,2684354590 +004F8Cr 1 0F 00 00 A0 .dword 2684354575,2684354576,2684354577,2684354578,2684354579,2684354580,2684354581,2684354582,2684354583,2684354584,2684354585,2684354586,2684354587,2684354588,2684354589,2684354590 004F90r 1 10 00 00 A0 004F94r 1 11 00 00 A0 -004FCCr 1 FF FF FF FF .dword 4294967295 +004FCCr 1 FF FF FF FF .dword 4294967295 004FD0r 1 -004FD0r 1 ; multiple values on one line, hex -004FD0r 1 00 00 00 00 .dword $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +004FD0r 1 ; multiple values on one line, hex +004FD0r 1 00 00 00 00 .dword $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f 004FD4r 1 01 00 00 00 004FD8r 1 02 00 00 00 -005010r 1 10 00 00 00 .dword $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +005010r 1 10 00 00 00 .dword $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f 005014r 1 11 00 00 00 005018r 1 12 00 00 00 -005050r 1 70 00 00 00 .dword $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +005050r 1 70 00 00 00 .dword $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f 005054r 1 71 00 00 00 005058r 1 72 00 00 00 -005090r 1 80 00 00 00 .dword $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +005090r 1 80 00 00 00 .dword $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f 005094r 1 81 00 00 00 005098r 1 82 00 00 00 -0050D0r 1 F0 00 00 00 .dword $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +0050D0r 1 F0 00 00 00 .dword $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff 0050D4r 1 F1 00 00 00 0050D8r 1 F2 00 00 00 -005110r 1 00 01 00 00 .dword $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f +005110r 1 00 01 00 00 .dword $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f 005114r 1 01 01 00 00 005118r 1 02 01 00 00 -005150r 1 E0 0F 00 00 .dword $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef +005150r 1 E0 0F 00 00 .dword $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef 005154r 1 E1 0F 00 00 005158r 1 E2 0F 00 00 -005190r 1 F0 0F 00 00 .dword $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff +005190r 1 F0 0F 00 00 .dword $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff 005194r 1 F1 0F 00 00 005198r 1 F2 0F 00 00 -0051D0r 1 00 10 00 00 .dword $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f +0051D0r 1 00 10 00 00 .dword $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f 0051D4r 1 01 10 00 00 0051D8r 1 02 10 00 00 -005210r 1 F0 7F 00 00 .dword $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff +005210r 1 F0 7F 00 00 .dword $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff 005214r 1 F1 7F 00 00 005218r 1 F2 7F 00 00 -005250r 1 00 80 00 00 .dword $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f +005250r 1 00 80 00 00 .dword $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f 005254r 1 01 80 00 00 005258r 1 02 80 00 00 -005290r 1 F0 9F 00 00 .dword $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff +005290r 1 F0 9F 00 00 .dword $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff 005294r 1 F1 9F 00 00 005298r 1 F2 9F 00 00 -0052D0r 1 00 A0 00 00 .dword $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f +0052D0r 1 00 A0 00 00 .dword $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f 0052D4r 1 01 A0 00 00 0052D8r 1 02 A0 00 00 -005310r 1 F0 AF 00 00 .dword $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff +005310r 1 F0 AF 00 00 .dword $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff 005314r 1 F1 AF 00 00 005318r 1 F2 AF 00 00 -005350r 1 00 B0 00 00 .dword $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f +005350r 1 00 B0 00 00 .dword $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f 005354r 1 01 B0 00 00 005358r 1 02 B0 00 00 -005390r 1 F0 FF 00 00 .dword $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff +005390r 1 F0 FF 00 00 .dword $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff 005394r 1 F1 FF 00 00 005398r 1 F2 FF 00 00 -0053D0r 1 00 00 01 00 .dword $10000,$10001,$10002,$10003,$10004,$10005,$10006,$10007,$10008,$10009,$1000a,$1000b,$1000c,$1000d,$1000e,$1000f +0053D0r 1 00 00 01 00 .dword $10000,$10001,$10002,$10003,$10004,$10005,$10006,$10007,$10008,$10009,$1000a,$1000b,$1000c,$1000d,$1000e,$1000f 0053D4r 1 01 00 01 00 0053D8r 1 02 00 01 00 -005410r 1 FF FF FF 7F .dword $7fffffff,$80000000,$80000001,$80000002,$80000003,$80000004,$80000005,$80000006,$80000007,$80000008,$80000009,$8000000a,$8000000b,$8000000c,$8000000d,$8000000e +005410r 1 FF FF FF 7F .dword $7fffffff,$80000000,$80000001,$80000002,$80000003,$80000004,$80000005,$80000006,$80000007,$80000008,$80000009,$8000000a,$8000000b,$8000000c,$8000000d,$8000000e 005414r 1 00 00 00 80 005418r 1 01 00 00 80 -005450r 1 0F 00 00 80 .dword $8000000f,$80000010,$80000011,$80000012,$80000013,$80000014,$80000015,$80000016,$80000017,$80000018,$80000019,$8000001a,$8000001b,$8000001c,$8000001d,$8000001e +005450r 1 0F 00 00 80 .dword $8000000f,$80000010,$80000011,$80000012,$80000013,$80000014,$80000015,$80000016,$80000017,$80000018,$80000019,$8000001a,$8000001b,$8000001c,$8000001d,$8000001e 005454r 1 10 00 00 80 005458r 1 11 00 00 80 -005490r 1 FF FF FF 9F .dword $9fffffff,$a0000000,$a0000001,$a0000002,$a0000003,$a0000004,$a0000005,$a0000006,$a0000007,$a0000008,$a0000009,$a000000a,$a000000b,$a000000c,$a000000d,$a000000e +005490r 1 FF FF FF 9F .dword $9fffffff,$a0000000,$a0000001,$a0000002,$a0000003,$a0000004,$a0000005,$a0000006,$a0000007,$a0000008,$a0000009,$a000000a,$a000000b,$a000000c,$a000000d,$a000000e 005494r 1 00 00 00 A0 005498r 1 01 00 00 A0 -0054D0r 1 0F 00 00 A0 .dword $a000000f,$a0000010,$a0000011,$a0000012,$a0000013,$a0000014,$a0000015,$a0000016,$a0000017,$a0000018,$a0000019,$a000001a,$a000001b,$a000001c,$a000001d,$a000001e +0054D0r 1 0F 00 00 A0 .dword $a000000f,$a0000010,$a0000011,$a0000012,$a0000013,$a0000014,$a0000015,$a0000016,$a0000017,$a0000018,$a0000019,$a000001a,$a000001b,$a000001c,$a000001d,$a000001e 0054D4r 1 10 00 00 A0 0054D8r 1 11 00 00 A0 -005510r 1 FF FF FF FF .dword $ffffffff +005510r 1 FF FF FF FF .dword $ffffffff 005514r 1 -005514r 1 ; multiple values on one line, alternative hex -005514r 1 00 00 00 00 .dword 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +005514r 1 ; multiple values on one line, alternative hex +005514r 1 00 00 00 00 .dword 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh 005518r 1 01 00 00 00 00551Cr 1 02 00 00 00 -005554r 1 10 00 00 00 .dword 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +005554r 1 10 00 00 00 .dword 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh 005558r 1 11 00 00 00 00555Cr 1 12 00 00 00 -005594r 1 70 00 00 00 .dword 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +005594r 1 70 00 00 00 .dword 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh 005598r 1 71 00 00 00 00559Cr 1 72 00 00 00 -0055D4r 1 80 00 00 00 .dword 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +0055D4r 1 80 00 00 00 .dword 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh 0055D8r 1 81 00 00 00 0055DCr 1 82 00 00 00 -005614r 1 F0 00 00 00 .dword 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +005614r 1 F0 00 00 00 .dword 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh 005618r 1 F1 00 00 00 00561Cr 1 F2 00 00 00 -005654r 1 00 01 00 00 .dword 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh +005654r 1 00 01 00 00 .dword 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh 005658r 1 01 01 00 00 00565Cr 1 02 01 00 00 -005694r 1 E0 0F 00 00 .dword 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh +005694r 1 E0 0F 00 00 .dword 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh 005698r 1 E1 0F 00 00 00569Cr 1 E2 0F 00 00 -0056D4r 1 F0 0F 00 00 .dword 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh +0056D4r 1 F0 0F 00 00 .dword 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh 0056D8r 1 F1 0F 00 00 0056DCr 1 F2 0F 00 00 -005714r 1 00 10 00 00 .dword 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh +005714r 1 00 10 00 00 .dword 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh 005718r 1 01 10 00 00 00571Cr 1 02 10 00 00 -005754r 1 F0 7F 00 00 .dword 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh +005754r 1 F0 7F 00 00 .dword 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh 005758r 1 F1 7F 00 00 00575Cr 1 F2 7F 00 00 -005794r 1 00 80 00 00 .dword 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh +005794r 1 00 80 00 00 .dword 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh 005798r 1 01 80 00 00 00579Cr 1 02 80 00 00 -0057D4r 1 F0 9F 00 00 .dword 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh +0057D4r 1 F0 9F 00 00 .dword 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh 0057D8r 1 F1 9F 00 00 0057DCr 1 F2 9F 00 00 -005814r 1 00 A0 00 00 .dword 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh +005814r 1 00 A0 00 00 .dword 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh 005818r 1 01 A0 00 00 00581Cr 1 02 A0 00 00 -005854r 1 F0 AF 00 00 .dword 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh +005854r 1 F0 AF 00 00 .dword 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh 005858r 1 F1 AF 00 00 00585Cr 1 F2 AF 00 00 -005894r 1 00 B0 00 00 .dword 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh +005894r 1 00 B0 00 00 .dword 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh 005898r 1 01 B0 00 00 00589Cr 1 02 B0 00 00 -0058D4r 1 F0 FF 00 00 .dword 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh +0058D4r 1 F0 FF 00 00 .dword 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh 0058D8r 1 F1 FF 00 00 0058DCr 1 F2 FF 00 00 -005914r 1 00 00 01 00 .dword 10000h,10001h,10002h,10003h,10004h,10005h,10006h,10007h,10008h,10009h,1000ah,1000bh,1000ch,1000dh,1000eh,1000fh +005914r 1 00 00 01 00 .dword 10000h,10001h,10002h,10003h,10004h,10005h,10006h,10007h,10008h,10009h,1000ah,1000bh,1000ch,1000dh,1000eh,1000fh 005918r 1 01 00 01 00 00591Cr 1 02 00 01 00 -005954r 1 FF FF FF 7F .dword 7fffffffh,80000000h,80000001h,80000002h,80000003h,80000004h,80000005h,80000006h,80000007h,80000008h,80000009h,8000000ah,8000000bh,8000000ch,8000000dh,8000000eh +005954r 1 FF FF FF 7F .dword 7fffffffh,80000000h,80000001h,80000002h,80000003h,80000004h,80000005h,80000006h,80000007h,80000008h,80000009h,8000000ah,8000000bh,8000000ch,8000000dh,8000000eh 005958r 1 00 00 00 80 00595Cr 1 01 00 00 80 -005994r 1 0F 00 00 80 .dword 8000000fh,80000010h,80000011h,80000012h,80000013h,80000014h,80000015h,80000016h,80000017h,80000018h,80000019h,8000001ah,8000001bh,8000001ch,8000001dh,8000001eh +005994r 1 0F 00 00 80 .dword 8000000fh,80000010h,80000011h,80000012h,80000013h,80000014h,80000015h,80000016h,80000017h,80000018h,80000019h,8000001ah,8000001bh,8000001ch,8000001dh,8000001eh 005998r 1 10 00 00 80 00599Cr 1 11 00 00 80 -0059D4r 1 FF FF FF 9F .dword 9fffffffh,0a0000000h,0a0000001h,0a0000002h,0a0000003h,0a0000004h,0a0000005h,0a0000006h,0a0000007h,0a0000008h,0a0000009h,0a000000ah,0a000000bh,0a000000ch,0a000000dh,0a000000eh +0059D4r 1 FF FF FF 9F .dword 9fffffffh,0a0000000h,0a0000001h,0a0000002h,0a0000003h,0a0000004h,0a0000005h,0a0000006h,0a0000007h,0a0000008h,0a0000009h,0a000000ah,0a000000bh,0a000000ch,0a000000dh,0a000000eh 0059D8r 1 00 00 00 A0 0059DCr 1 01 00 00 A0 -005A14r 1 0F 00 00 A0 .dword 0a000000fh,0a0000010h,0a0000011h,0a0000012h,0a0000013h,0a0000014h,0a0000015h,0a0000016h,0a0000017h,0a0000018h,0a0000019h,0a000001ah,0a000001bh,0a000001ch,0a000001dh,0a000001eh +005A14r 1 0F 00 00 A0 .dword 0a000000fh,0a0000010h,0a0000011h,0a0000012h,0a0000013h,0a0000014h,0a0000015h,0a0000016h,0a0000017h,0a0000018h,0a0000019h,0a000001ah,0a000001bh,0a000001ch,0a000001dh,0a000001eh 005A18r 1 10 00 00 A0 005A1Cr 1 11 00 00 A0 -005A54r 1 FF FF FF FF .dword 0ffffffffh +005A54r 1 FF FF FF FF .dword 0ffffffffh 005A58r 1 -005A58r 1 ; mix some variants -005A58r 1 0B 00 00 00 .dword 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +005A58r 1 ; mix some variants +005A58r 1 0B 00 00 00 .dword 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh 005A5Cr 1 11 00 00 00 005A60r 1 03 00 00 00 005A94r 1 diff --git a/test/asm/listing/104-dword.s b/test/asm/listing/104-dword.s index 401935821..b7da26ff0 100644 --- a/test/asm/listing/104-dword.s +++ b/test/asm/listing/104-dword.s @@ -1,4874 +1,4874 @@ ; 2022-06-15 Spiro Trikaliotis - ; upper case pseudo-op - .DWORD 0 - .DWORD 1 - .DWORD 2 - .DWORD 3 - .DWORD 4 - .DWORD 5 - .DWORD 6 - .DWORD 7 - .DWORD 8 - .DWORD 9 - .DWORD 10 - .DWORD 11 - .DWORD 12 - .DWORD 13 - .DWORD 14 - .DWORD 15 - .DWORD 16 - .DWORD 17 - .DWORD 18 - .DWORD 19 - .DWORD 112 - .DWORD 113 - .DWORD 114 - .DWORD 115 - .DWORD 116 - .DWORD 117 - .DWORD 118 - .DWORD 119 - .DWORD 120 - .DWORD 121 - .DWORD 122 - .DWORD 123 - .DWORD 124 - .DWORD 125 - .DWORD 126 - .DWORD 127 - .DWORD 128 - .DWORD 129 - .DWORD 130 - .DWORD 131 - .DWORD 132 - .DWORD 133 - .DWORD 134 - .DWORD 240 - .DWORD 241 - .DWORD 242 - .DWORD 243 - .DWORD 244 - .DWORD 245 - .DWORD 246 - .DWORD 247 - .DWORD 248 - .DWORD 249 - .DWORD 250 - .DWORD 251 - .DWORD 252 - .DWORD 253 - .DWORD 254 - .DWORD 255 - .DWORD 256 - .DWORD 257 - .DWORD 258 - .DWORD 259 - .DWORD 4050 - .DWORD 4051 - .DWORD 4052 - .DWORD 4053 - .DWORD 4054 - .DWORD 4055 - .DWORD 4056 - .DWORD 4057 - .DWORD 4058 - .DWORD 4059 - .DWORD 4060 - .DWORD 4061 - .DWORD 4062 - .DWORD 4063 - .DWORD 4064 - .DWORD 4065 - .DWORD 4066 - .DWORD 4067 - .DWORD 4068 - .DWORD 4069 - .DWORD 4070 - .DWORD 4071 - .DWORD 4072 - .DWORD 4073 - .DWORD 4074 - .DWORD 4075 - .DWORD 4076 - .DWORD 4077 - .DWORD 4078 - .DWORD 4079 - .DWORD 4080 - .DWORD 4081 - .DWORD 4082 - .DWORD 4083 - .DWORD 4084 - .DWORD 4085 - .DWORD 4086 - .DWORD 4087 - .DWORD 4088 - .DWORD 4089 - .DWORD 4090 - .DWORD 4091 - .DWORD 4092 - .DWORD 4093 - .DWORD 4094 - .DWORD 4095 - .DWORD 4096 - .DWORD 4097 - .DWORD 4098 - .DWORD 4099 - .DWORD 4100 - .DWORD 4101 - .DWORD 4102 - .DWORD 4103 - .DWORD 4104 - .DWORD 32752 - .DWORD 32753 - .DWORD 32754 - .DWORD 32755 - .DWORD 32756 - .DWORD 32757 - .DWORD 32758 - .DWORD 32759 - .DWORD 32760 - .DWORD 32761 - .DWORD 32762 - .DWORD 32763 - .DWORD 32764 - .DWORD 32765 - .DWORD 32766 - .DWORD 32767 - .DWORD 32768 - .DWORD 32769 - .DWORD 32770 - .DWORD 32771 - .DWORD 32772 - .DWORD 32773 - .DWORD 32774 - .DWORD 32775 - .DWORD 32776 - .DWORD 32777 - .DWORD 32778 - .DWORD 32779 - .DWORD 40929 - .DWORD 40930 - .DWORD 40931 - .DWORD 40932 - .DWORD 40933 - .DWORD 40934 - .DWORD 40935 - .DWORD 40936 - .DWORD 40937 - .DWORD 40938 - .DWORD 40939 - .DWORD 40940 - .DWORD 40941 - .DWORD 40942 - .DWORD 40943 - .DWORD 40944 - .DWORD 40945 - .DWORD 40946 - .DWORD 40947 - .DWORD 40948 - .DWORD 40949 - .DWORD 40950 - .DWORD 40951 - .DWORD 40952 - .DWORD 40953 - .DWORD 40954 - .DWORD 40955 - .DWORD 40956 - .DWORD 40957 - .DWORD 40958 - .DWORD 40959 - .DWORD 40960 - .DWORD 40961 - .DWORD 40962 - .DWORD 40963 - .DWORD 40964 - .DWORD 40965 - .DWORD 40966 - .DWORD 40967 - .DWORD 40968 - .DWORD 40969 - .DWORD 40970 - .DWORD 40971 - .DWORD 40972 - .DWORD 40973 - .DWORD 40974 - .DWORD 40975 - .DWORD 45025 - .DWORD 45026 - .DWORD 45027 - .DWORD 45028 - .DWORD 45029 - .DWORD 45030 - .DWORD 45031 - .DWORD 45032 - .DWORD 45033 - .DWORD 45034 - .DWORD 45035 - .DWORD 45036 - .DWORD 45037 - .DWORD 45038 - .DWORD 45039 - .DWORD 45040 - .DWORD 45041 - .DWORD 45042 - .DWORD 45043 - .DWORD 45044 - .DWORD 45045 - .DWORD 45046 - .DWORD 45047 - .DWORD 45048 - .DWORD 45049 - .DWORD 45050 - .DWORD 45051 - .DWORD 45052 - .DWORD 45053 - .DWORD 45054 - .DWORD 45055 - .DWORD 45056 - .DWORD 45057 - .DWORD 45058 - .DWORD 45059 - .DWORD 45060 - .DWORD 45061 - .DWORD 45062 - .DWORD 45063 - .DWORD 45064 - .DWORD 45065 - .DWORD 45066 - .DWORD 45067 - .DWORD 45068 - .DWORD 45069 - .DWORD 45070 - .DWORD 45071 - .DWORD 65505 - .DWORD 65506 - .DWORD 65507 - .DWORD 65508 - .DWORD 65509 - .DWORD 65510 - .DWORD 65511 - .DWORD 65512 - .DWORD 65513 - .DWORD 65514 - .DWORD 65515 - .DWORD 65516 - .DWORD 65517 - .DWORD 65518 - .DWORD 65519 - .DWORD 65520 - .DWORD 65521 - .DWORD 65522 - .DWORD 65523 - .DWORD 65524 - .DWORD 65525 - .DWORD 65526 - .DWORD 65527 - .DWORD 65528 - .DWORD 65529 - .DWORD 65530 - .DWORD 65531 - .DWORD 65532 - .DWORD 65533 - .DWORD 65534 - .DWORD 65535 - .DWORD 65536 - .DWORD 65537 - .DWORD 65538 - .DWORD 65539 - .DWORD 65540 - .DWORD 65541 - .DWORD 65542 - .DWORD 65543 - .DWORD 65544 - .DWORD 65545 - .DWORD 65546 - .DWORD 65547 - .DWORD 65548 - .DWORD 65549 - .DWORD 65550 - .DWORD 65551 - .DWORD 2147483632 - .DWORD 2147483633 - .DWORD 2147483634 - .DWORD 2147483635 - .DWORD 2147483636 - .DWORD 2147483637 - .DWORD 2147483638 - .DWORD 2147483639 - .DWORD 2147483640 - .DWORD 2147483641 - .DWORD 2147483642 - .DWORD 2147483643 - .DWORD 2147483644 - .DWORD 2147483645 - .DWORD 2147483646 - .DWORD 2147483647 - .DWORD 2147483648 - .DWORD 2147483649 - .DWORD 2147483650 - .DWORD 2147483651 - .DWORD 2147483652 - .DWORD 2147483653 - .DWORD 2147483654 - .DWORD 2147483655 - .DWORD 2147483656 - .DWORD 2147483657 - .DWORD 2147483658 - .DWORD 2147483659 - .DWORD 2147483660 - .DWORD 2147483661 - .DWORD 2147483662 - .DWORD 2147483663 - .DWORD 2684354544 - .DWORD 2684354545 - .DWORD 2684354546 - .DWORD 2684354547 - .DWORD 2684354548 - .DWORD 2684354549 - .DWORD 2684354550 - .DWORD 2684354551 - .DWORD 2684354552 - .DWORD 2684354553 - .DWORD 2684354554 - .DWORD 2684354555 - .DWORD 2684354556 - .DWORD 2684354557 - .DWORD 2684354558 - .DWORD 2684354559 - .DWORD 2684354560 - .DWORD 2684354561 - .DWORD 2684354562 - .DWORD 2684354563 - .DWORD 2684354564 - .DWORD 2684354565 - .DWORD 2684354566 - .DWORD 2684354567 - .DWORD 2684354568 - .DWORD 2684354569 - .DWORD 2684354570 - .DWORD 2684354571 - .DWORD 2684354572 - .DWORD 2684354573 - .DWORD 2684354574 - .DWORD 2684354575 - .DWORD 4294967280 - .DWORD 4294967281 - .DWORD 4294967282 - .DWORD 4294967283 - .DWORD 4294967284 - .DWORD 4294967285 - .DWORD 4294967286 - .DWORD 4294967287 - .DWORD 4294967288 - .DWORD 4294967289 - .DWORD 4294967290 - .DWORD 4294967291 - .DWORD 4294967292 - .DWORD 4294967293 - .DWORD 4294967294 - .DWORD 4294967295 + ; upper case pseudo-op + .DWORD 0 + .DWORD 1 + .DWORD 2 + .DWORD 3 + .DWORD 4 + .DWORD 5 + .DWORD 6 + .DWORD 7 + .DWORD 8 + .DWORD 9 + .DWORD 10 + .DWORD 11 + .DWORD 12 + .DWORD 13 + .DWORD 14 + .DWORD 15 + .DWORD 16 + .DWORD 17 + .DWORD 18 + .DWORD 19 + .DWORD 112 + .DWORD 113 + .DWORD 114 + .DWORD 115 + .DWORD 116 + .DWORD 117 + .DWORD 118 + .DWORD 119 + .DWORD 120 + .DWORD 121 + .DWORD 122 + .DWORD 123 + .DWORD 124 + .DWORD 125 + .DWORD 126 + .DWORD 127 + .DWORD 128 + .DWORD 129 + .DWORD 130 + .DWORD 131 + .DWORD 132 + .DWORD 133 + .DWORD 134 + .DWORD 240 + .DWORD 241 + .DWORD 242 + .DWORD 243 + .DWORD 244 + .DWORD 245 + .DWORD 246 + .DWORD 247 + .DWORD 248 + .DWORD 249 + .DWORD 250 + .DWORD 251 + .DWORD 252 + .DWORD 253 + .DWORD 254 + .DWORD 255 + .DWORD 256 + .DWORD 257 + .DWORD 258 + .DWORD 259 + .DWORD 4050 + .DWORD 4051 + .DWORD 4052 + .DWORD 4053 + .DWORD 4054 + .DWORD 4055 + .DWORD 4056 + .DWORD 4057 + .DWORD 4058 + .DWORD 4059 + .DWORD 4060 + .DWORD 4061 + .DWORD 4062 + .DWORD 4063 + .DWORD 4064 + .DWORD 4065 + .DWORD 4066 + .DWORD 4067 + .DWORD 4068 + .DWORD 4069 + .DWORD 4070 + .DWORD 4071 + .DWORD 4072 + .DWORD 4073 + .DWORD 4074 + .DWORD 4075 + .DWORD 4076 + .DWORD 4077 + .DWORD 4078 + .DWORD 4079 + .DWORD 4080 + .DWORD 4081 + .DWORD 4082 + .DWORD 4083 + .DWORD 4084 + .DWORD 4085 + .DWORD 4086 + .DWORD 4087 + .DWORD 4088 + .DWORD 4089 + .DWORD 4090 + .DWORD 4091 + .DWORD 4092 + .DWORD 4093 + .DWORD 4094 + .DWORD 4095 + .DWORD 4096 + .DWORD 4097 + .DWORD 4098 + .DWORD 4099 + .DWORD 4100 + .DWORD 4101 + .DWORD 4102 + .DWORD 4103 + .DWORD 4104 + .DWORD 32752 + .DWORD 32753 + .DWORD 32754 + .DWORD 32755 + .DWORD 32756 + .DWORD 32757 + .DWORD 32758 + .DWORD 32759 + .DWORD 32760 + .DWORD 32761 + .DWORD 32762 + .DWORD 32763 + .DWORD 32764 + .DWORD 32765 + .DWORD 32766 + .DWORD 32767 + .DWORD 32768 + .DWORD 32769 + .DWORD 32770 + .DWORD 32771 + .DWORD 32772 + .DWORD 32773 + .DWORD 32774 + .DWORD 32775 + .DWORD 32776 + .DWORD 32777 + .DWORD 32778 + .DWORD 32779 + .DWORD 40929 + .DWORD 40930 + .DWORD 40931 + .DWORD 40932 + .DWORD 40933 + .DWORD 40934 + .DWORD 40935 + .DWORD 40936 + .DWORD 40937 + .DWORD 40938 + .DWORD 40939 + .DWORD 40940 + .DWORD 40941 + .DWORD 40942 + .DWORD 40943 + .DWORD 40944 + .DWORD 40945 + .DWORD 40946 + .DWORD 40947 + .DWORD 40948 + .DWORD 40949 + .DWORD 40950 + .DWORD 40951 + .DWORD 40952 + .DWORD 40953 + .DWORD 40954 + .DWORD 40955 + .DWORD 40956 + .DWORD 40957 + .DWORD 40958 + .DWORD 40959 + .DWORD 40960 + .DWORD 40961 + .DWORD 40962 + .DWORD 40963 + .DWORD 40964 + .DWORD 40965 + .DWORD 40966 + .DWORD 40967 + .DWORD 40968 + .DWORD 40969 + .DWORD 40970 + .DWORD 40971 + .DWORD 40972 + .DWORD 40973 + .DWORD 40974 + .DWORD 40975 + .DWORD 45025 + .DWORD 45026 + .DWORD 45027 + .DWORD 45028 + .DWORD 45029 + .DWORD 45030 + .DWORD 45031 + .DWORD 45032 + .DWORD 45033 + .DWORD 45034 + .DWORD 45035 + .DWORD 45036 + .DWORD 45037 + .DWORD 45038 + .DWORD 45039 + .DWORD 45040 + .DWORD 45041 + .DWORD 45042 + .DWORD 45043 + .DWORD 45044 + .DWORD 45045 + .DWORD 45046 + .DWORD 45047 + .DWORD 45048 + .DWORD 45049 + .DWORD 45050 + .DWORD 45051 + .DWORD 45052 + .DWORD 45053 + .DWORD 45054 + .DWORD 45055 + .DWORD 45056 + .DWORD 45057 + .DWORD 45058 + .DWORD 45059 + .DWORD 45060 + .DWORD 45061 + .DWORD 45062 + .DWORD 45063 + .DWORD 45064 + .DWORD 45065 + .DWORD 45066 + .DWORD 45067 + .DWORD 45068 + .DWORD 45069 + .DWORD 45070 + .DWORD 45071 + .DWORD 65505 + .DWORD 65506 + .DWORD 65507 + .DWORD 65508 + .DWORD 65509 + .DWORD 65510 + .DWORD 65511 + .DWORD 65512 + .DWORD 65513 + .DWORD 65514 + .DWORD 65515 + .DWORD 65516 + .DWORD 65517 + .DWORD 65518 + .DWORD 65519 + .DWORD 65520 + .DWORD 65521 + .DWORD 65522 + .DWORD 65523 + .DWORD 65524 + .DWORD 65525 + .DWORD 65526 + .DWORD 65527 + .DWORD 65528 + .DWORD 65529 + .DWORD 65530 + .DWORD 65531 + .DWORD 65532 + .DWORD 65533 + .DWORD 65534 + .DWORD 65535 + .DWORD 65536 + .DWORD 65537 + .DWORD 65538 + .DWORD 65539 + .DWORD 65540 + .DWORD 65541 + .DWORD 65542 + .DWORD 65543 + .DWORD 65544 + .DWORD 65545 + .DWORD 65546 + .DWORD 65547 + .DWORD 65548 + .DWORD 65549 + .DWORD 65550 + .DWORD 65551 + .DWORD 2147483632 + .DWORD 2147483633 + .DWORD 2147483634 + .DWORD 2147483635 + .DWORD 2147483636 + .DWORD 2147483637 + .DWORD 2147483638 + .DWORD 2147483639 + .DWORD 2147483640 + .DWORD 2147483641 + .DWORD 2147483642 + .DWORD 2147483643 + .DWORD 2147483644 + .DWORD 2147483645 + .DWORD 2147483646 + .DWORD 2147483647 + .DWORD 2147483648 + .DWORD 2147483649 + .DWORD 2147483650 + .DWORD 2147483651 + .DWORD 2147483652 + .DWORD 2147483653 + .DWORD 2147483654 + .DWORD 2147483655 + .DWORD 2147483656 + .DWORD 2147483657 + .DWORD 2147483658 + .DWORD 2147483659 + .DWORD 2147483660 + .DWORD 2147483661 + .DWORD 2147483662 + .DWORD 2147483663 + .DWORD 2684354544 + .DWORD 2684354545 + .DWORD 2684354546 + .DWORD 2684354547 + .DWORD 2684354548 + .DWORD 2684354549 + .DWORD 2684354550 + .DWORD 2684354551 + .DWORD 2684354552 + .DWORD 2684354553 + .DWORD 2684354554 + .DWORD 2684354555 + .DWORD 2684354556 + .DWORD 2684354557 + .DWORD 2684354558 + .DWORD 2684354559 + .DWORD 2684354560 + .DWORD 2684354561 + .DWORD 2684354562 + .DWORD 2684354563 + .DWORD 2684354564 + .DWORD 2684354565 + .DWORD 2684354566 + .DWORD 2684354567 + .DWORD 2684354568 + .DWORD 2684354569 + .DWORD 2684354570 + .DWORD 2684354571 + .DWORD 2684354572 + .DWORD 2684354573 + .DWORD 2684354574 + .DWORD 2684354575 + .DWORD 4294967280 + .DWORD 4294967281 + .DWORD 4294967282 + .DWORD 4294967283 + .DWORD 4294967284 + .DWORD 4294967285 + .DWORD 4294967286 + .DWORD 4294967287 + .DWORD 4294967288 + .DWORD 4294967289 + .DWORD 4294967290 + .DWORD 4294967291 + .DWORD 4294967292 + .DWORD 4294967293 + .DWORD 4294967294 + .DWORD 4294967295 - ; lower case pseudo-op - .dword 0 - .dword 1 - .dword 2 - .dword 3 - .dword 4 - .dword 5 - .dword 6 - .dword 7 - .dword 8 - .dword 9 - .dword 10 - .dword 11 - .dword 12 - .dword 13 - .dword 14 - .dword 15 - .dword 16 - .dword 17 - .dword 18 - .dword 19 - .dword 112 - .dword 113 - .dword 114 - .dword 115 - .dword 116 - .dword 117 - .dword 118 - .dword 119 - .dword 120 - .dword 121 - .dword 122 - .dword 123 - .dword 124 - .dword 125 - .dword 126 - .dword 127 - .dword 128 - .dword 129 - .dword 130 - .dword 131 - .dword 132 - .dword 133 - .dword 134 - .dword 240 - .dword 241 - .dword 242 - .dword 243 - .dword 244 - .dword 245 - .dword 246 - .dword 247 - .dword 248 - .dword 249 - .dword 250 - .dword 251 - .dword 252 - .dword 253 - .dword 254 - .dword 255 - .dword 256 - .dword 257 - .dword 258 - .dword 259 - .dword 4050 - .dword 4051 - .dword 4052 - .dword 4053 - .dword 4054 - .dword 4055 - .dword 4056 - .dword 4057 - .dword 4058 - .dword 4059 - .dword 4060 - .dword 4061 - .dword 4062 - .dword 4063 - .dword 4064 - .dword 4065 - .dword 4066 - .dword 4067 - .dword 4068 - .dword 4069 - .dword 4070 - .dword 4071 - .dword 4072 - .dword 4073 - .dword 4074 - .dword 4075 - .dword 4076 - .dword 4077 - .dword 4078 - .dword 4079 - .dword 4080 - .dword 4081 - .dword 4082 - .dword 4083 - .dword 4084 - .dword 4085 - .dword 4086 - .dword 4087 - .dword 4088 - .dword 4089 - .dword 4090 - .dword 4091 - .dword 4092 - .dword 4093 - .dword 4094 - .dword 4095 - .dword 4096 - .dword 4097 - .dword 4098 - .dword 4099 - .dword 4100 - .dword 4101 - .dword 4102 - .dword 4103 - .dword 4104 - .dword 32752 - .dword 32753 - .dword 32754 - .dword 32755 - .dword 32756 - .dword 32757 - .dword 32758 - .dword 32759 - .dword 32760 - .dword 32761 - .dword 32762 - .dword 32763 - .dword 32764 - .dword 32765 - .dword 32766 - .dword 32767 - .dword 32768 - .dword 32769 - .dword 32770 - .dword 32771 - .dword 32772 - .dword 32773 - .dword 32774 - .dword 32775 - .dword 32776 - .dword 32777 - .dword 32778 - .dword 32779 - .dword 40929 - .dword 40930 - .dword 40931 - .dword 40932 - .dword 40933 - .dword 40934 - .dword 40935 - .dword 40936 - .dword 40937 - .dword 40938 - .dword 40939 - .dword 40940 - .dword 40941 - .dword 40942 - .dword 40943 - .dword 40944 - .dword 40945 - .dword 40946 - .dword 40947 - .dword 40948 - .dword 40949 - .dword 40950 - .dword 40951 - .dword 40952 - .dword 40953 - .dword 40954 - .dword 40955 - .dword 40956 - .dword 40957 - .dword 40958 - .dword 40959 - .dword 40960 - .dword 40961 - .dword 40962 - .dword 40963 - .dword 40964 - .dword 40965 - .dword 40966 - .dword 40967 - .dword 40968 - .dword 40969 - .dword 40970 - .dword 40971 - .dword 40972 - .dword 40973 - .dword 40974 - .dword 40975 - .dword 45025 - .dword 45026 - .dword 45027 - .dword 45028 - .dword 45029 - .dword 45030 - .dword 45031 - .dword 45032 - .dword 45033 - .dword 45034 - .dword 45035 - .dword 45036 - .dword 45037 - .dword 45038 - .dword 45039 - .dword 45040 - .dword 45041 - .dword 45042 - .dword 45043 - .dword 45044 - .dword 45045 - .dword 45046 - .dword 45047 - .dword 45048 - .dword 45049 - .dword 45050 - .dword 45051 - .dword 45052 - .dword 45053 - .dword 45054 - .dword 45055 - .dword 45056 - .dword 45057 - .dword 45058 - .dword 45059 - .dword 45060 - .dword 45061 - .dword 45062 - .dword 45063 - .dword 45064 - .dword 45065 - .dword 45066 - .dword 45067 - .dword 45068 - .dword 45069 - .dword 45070 - .dword 45071 - .dword 65505 - .dword 65506 - .dword 65507 - .dword 65508 - .dword 65509 - .dword 65510 - .dword 65511 - .dword 65512 - .dword 65513 - .dword 65514 - .dword 65515 - .dword 65516 - .dword 65517 - .dword 65518 - .dword 65519 - .dword 65520 - .dword 65521 - .dword 65522 - .dword 65523 - .dword 65524 - .dword 65525 - .dword 65526 - .dword 65527 - .dword 65528 - .dword 65529 - .dword 65530 - .dword 65531 - .dword 65532 - .dword 65533 - .dword 65534 - .dword 65535 - .dword 65536 - .dword 65537 - .dword 65538 - .dword 65539 - .dword 65540 - .dword 65541 - .dword 65542 - .dword 65543 - .dword 65544 - .dword 65545 - .dword 65546 - .dword 65547 - .dword 65548 - .dword 65549 - .dword 65550 - .dword 65551 - .dword 2147483632 - .dword 2147483633 - .dword 2147483634 - .dword 2147483635 - .dword 2147483636 - .dword 2147483637 - .dword 2147483638 - .dword 2147483639 - .dword 2147483640 - .dword 2147483641 - .dword 2147483642 - .dword 2147483643 - .dword 2147483644 - .dword 2147483645 - .dword 2147483646 - .dword 2147483647 - .dword 2147483648 - .dword 2147483649 - .dword 2147483650 - .dword 2147483651 - .dword 2147483652 - .dword 2147483653 - .dword 2147483654 - .dword 2147483655 - .dword 2147483656 - .dword 2147483657 - .dword 2147483658 - .dword 2147483659 - .dword 2147483660 - .dword 2147483661 - .dword 2147483662 - .dword 2147483663 - .dword 2684354544 - .dword 2684354545 - .dword 2684354546 - .dword 2684354547 - .dword 2684354548 - .dword 2684354549 - .dword 2684354550 - .dword 2684354551 - .dword 2684354552 - .dword 2684354553 - .dword 2684354554 - .dword 2684354555 - .dword 2684354556 - .dword 2684354557 - .dword 2684354558 - .dword 2684354559 - .dword 2684354560 - .dword 2684354561 - .dword 2684354562 - .dword 2684354563 - .dword 2684354564 - .dword 2684354565 - .dword 2684354566 - .dword 2684354567 - .dword 2684354568 - .dword 2684354569 - .dword 2684354570 - .dword 2684354571 - .dword 2684354572 - .dword 2684354573 - .dword 2684354574 - .dword 2684354575 - .dword 4294967280 - .dword 4294967281 - .dword 4294967282 - .dword 4294967283 - .dword 4294967284 - .dword 4294967285 - .dword 4294967286 - .dword 4294967287 - .dword 4294967288 - .dword 4294967289 - .dword 4294967290 - .dword 4294967291 - .dword 4294967292 - .dword 4294967293 - .dword 4294967294 - .dword 4294967295 + ; lower case pseudo-op + .dword 0 + .dword 1 + .dword 2 + .dword 3 + .dword 4 + .dword 5 + .dword 6 + .dword 7 + .dword 8 + .dword 9 + .dword 10 + .dword 11 + .dword 12 + .dword 13 + .dword 14 + .dword 15 + .dword 16 + .dword 17 + .dword 18 + .dword 19 + .dword 112 + .dword 113 + .dword 114 + .dword 115 + .dword 116 + .dword 117 + .dword 118 + .dword 119 + .dword 120 + .dword 121 + .dword 122 + .dword 123 + .dword 124 + .dword 125 + .dword 126 + .dword 127 + .dword 128 + .dword 129 + .dword 130 + .dword 131 + .dword 132 + .dword 133 + .dword 134 + .dword 240 + .dword 241 + .dword 242 + .dword 243 + .dword 244 + .dword 245 + .dword 246 + .dword 247 + .dword 248 + .dword 249 + .dword 250 + .dword 251 + .dword 252 + .dword 253 + .dword 254 + .dword 255 + .dword 256 + .dword 257 + .dword 258 + .dword 259 + .dword 4050 + .dword 4051 + .dword 4052 + .dword 4053 + .dword 4054 + .dword 4055 + .dword 4056 + .dword 4057 + .dword 4058 + .dword 4059 + .dword 4060 + .dword 4061 + .dword 4062 + .dword 4063 + .dword 4064 + .dword 4065 + .dword 4066 + .dword 4067 + .dword 4068 + .dword 4069 + .dword 4070 + .dword 4071 + .dword 4072 + .dword 4073 + .dword 4074 + .dword 4075 + .dword 4076 + .dword 4077 + .dword 4078 + .dword 4079 + .dword 4080 + .dword 4081 + .dword 4082 + .dword 4083 + .dword 4084 + .dword 4085 + .dword 4086 + .dword 4087 + .dword 4088 + .dword 4089 + .dword 4090 + .dword 4091 + .dword 4092 + .dword 4093 + .dword 4094 + .dword 4095 + .dword 4096 + .dword 4097 + .dword 4098 + .dword 4099 + .dword 4100 + .dword 4101 + .dword 4102 + .dword 4103 + .dword 4104 + .dword 32752 + .dword 32753 + .dword 32754 + .dword 32755 + .dword 32756 + .dword 32757 + .dword 32758 + .dword 32759 + .dword 32760 + .dword 32761 + .dword 32762 + .dword 32763 + .dword 32764 + .dword 32765 + .dword 32766 + .dword 32767 + .dword 32768 + .dword 32769 + .dword 32770 + .dword 32771 + .dword 32772 + .dword 32773 + .dword 32774 + .dword 32775 + .dword 32776 + .dword 32777 + .dword 32778 + .dword 32779 + .dword 40929 + .dword 40930 + .dword 40931 + .dword 40932 + .dword 40933 + .dword 40934 + .dword 40935 + .dword 40936 + .dword 40937 + .dword 40938 + .dword 40939 + .dword 40940 + .dword 40941 + .dword 40942 + .dword 40943 + .dword 40944 + .dword 40945 + .dword 40946 + .dword 40947 + .dword 40948 + .dword 40949 + .dword 40950 + .dword 40951 + .dword 40952 + .dword 40953 + .dword 40954 + .dword 40955 + .dword 40956 + .dword 40957 + .dword 40958 + .dword 40959 + .dword 40960 + .dword 40961 + .dword 40962 + .dword 40963 + .dword 40964 + .dword 40965 + .dword 40966 + .dword 40967 + .dword 40968 + .dword 40969 + .dword 40970 + .dword 40971 + .dword 40972 + .dword 40973 + .dword 40974 + .dword 40975 + .dword 45025 + .dword 45026 + .dword 45027 + .dword 45028 + .dword 45029 + .dword 45030 + .dword 45031 + .dword 45032 + .dword 45033 + .dword 45034 + .dword 45035 + .dword 45036 + .dword 45037 + .dword 45038 + .dword 45039 + .dword 45040 + .dword 45041 + .dword 45042 + .dword 45043 + .dword 45044 + .dword 45045 + .dword 45046 + .dword 45047 + .dword 45048 + .dword 45049 + .dword 45050 + .dword 45051 + .dword 45052 + .dword 45053 + .dword 45054 + .dword 45055 + .dword 45056 + .dword 45057 + .dword 45058 + .dword 45059 + .dword 45060 + .dword 45061 + .dword 45062 + .dword 45063 + .dword 45064 + .dword 45065 + .dword 45066 + .dword 45067 + .dword 45068 + .dword 45069 + .dword 45070 + .dword 45071 + .dword 65505 + .dword 65506 + .dword 65507 + .dword 65508 + .dword 65509 + .dword 65510 + .dword 65511 + .dword 65512 + .dword 65513 + .dword 65514 + .dword 65515 + .dword 65516 + .dword 65517 + .dword 65518 + .dword 65519 + .dword 65520 + .dword 65521 + .dword 65522 + .dword 65523 + .dword 65524 + .dword 65525 + .dword 65526 + .dword 65527 + .dword 65528 + .dword 65529 + .dword 65530 + .dword 65531 + .dword 65532 + .dword 65533 + .dword 65534 + .dword 65535 + .dword 65536 + .dword 65537 + .dword 65538 + .dword 65539 + .dword 65540 + .dword 65541 + .dword 65542 + .dword 65543 + .dword 65544 + .dword 65545 + .dword 65546 + .dword 65547 + .dword 65548 + .dword 65549 + .dword 65550 + .dword 65551 + .dword 2147483632 + .dword 2147483633 + .dword 2147483634 + .dword 2147483635 + .dword 2147483636 + .dword 2147483637 + .dword 2147483638 + .dword 2147483639 + .dword 2147483640 + .dword 2147483641 + .dword 2147483642 + .dword 2147483643 + .dword 2147483644 + .dword 2147483645 + .dword 2147483646 + .dword 2147483647 + .dword 2147483648 + .dword 2147483649 + .dword 2147483650 + .dword 2147483651 + .dword 2147483652 + .dword 2147483653 + .dword 2147483654 + .dword 2147483655 + .dword 2147483656 + .dword 2147483657 + .dword 2147483658 + .dword 2147483659 + .dword 2147483660 + .dword 2147483661 + .dword 2147483662 + .dword 2147483663 + .dword 2684354544 + .dword 2684354545 + .dword 2684354546 + .dword 2684354547 + .dword 2684354548 + .dword 2684354549 + .dword 2684354550 + .dword 2684354551 + .dword 2684354552 + .dword 2684354553 + .dword 2684354554 + .dword 2684354555 + .dword 2684354556 + .dword 2684354557 + .dword 2684354558 + .dword 2684354559 + .dword 2684354560 + .dword 2684354561 + .dword 2684354562 + .dword 2684354563 + .dword 2684354564 + .dword 2684354565 + .dword 2684354566 + .dword 2684354567 + .dword 2684354568 + .dword 2684354569 + .dword 2684354570 + .dword 2684354571 + .dword 2684354572 + .dword 2684354573 + .dword 2684354574 + .dword 2684354575 + .dword 4294967280 + .dword 4294967281 + .dword 4294967282 + .dword 4294967283 + .dword 4294967284 + .dword 4294967285 + .dword 4294967286 + .dword 4294967287 + .dword 4294967288 + .dword 4294967289 + .dword 4294967290 + .dword 4294967291 + .dword 4294967292 + .dword 4294967293 + .dword 4294967294 + .dword 4294967295 - ; hex values - .dword $0 - .dword $1 - .dword $2 - .dword $3 - .dword $4 - .dword $5 - .dword $6 - .dword $7 - .dword $8 - .dword $9 - .dword $a - .dword $b - .dword $c - .dword $d - .dword $e - .dword $f - .dword $10 - .dword $11 - .dword $12 - .dword $13 - .dword $70 - .dword $71 - .dword $72 - .dword $73 - .dword $74 - .dword $75 - .dword $76 - .dword $77 - .dword $78 - .dword $79 - .dword $7a - .dword $7b - .dword $7c - .dword $7d - .dword $7e - .dword $7f - .dword $80 - .dword $81 - .dword $82 - .dword $83 - .dword $84 - .dword $85 - .dword $86 - .dword $f0 - .dword $f1 - .dword $f2 - .dword $f3 - .dword $f4 - .dword $f5 - .dword $f6 - .dword $f7 - .dword $f8 - .dword $f9 - .dword $fa - .dword $fb - .dword $fc - .dword $fd - .dword $fe - .dword $ff - .dword $100 - .dword $101 - .dword $102 - .dword $103 - .dword $fd2 - .dword $fd3 - .dword $fd4 - .dword $fd5 - .dword $fd6 - .dword $fd7 - .dword $fd8 - .dword $fd9 - .dword $fda - .dword $fdb - .dword $fdc - .dword $fdd - .dword $fde - .dword $fdf - .dword $fe0 - .dword $fe1 - .dword $fe2 - .dword $fe3 - .dword $fe4 - .dword $fe5 - .dword $fe6 - .dword $fe7 - .dword $fe8 - .dword $fe9 - .dword $fea - .dword $feb - .dword $fec - .dword $fed - .dword $fee - .dword $fef - .dword $ff0 - .dword $ff1 - .dword $ff2 - .dword $ff3 - .dword $ff4 - .dword $ff5 - .dword $ff6 - .dword $ff7 - .dword $ff8 - .dword $ff9 - .dword $ffa - .dword $ffb - .dword $ffc - .dword $ffd - .dword $ffe - .dword $fff - .dword $1000 - .dword $1001 - .dword $1002 - .dword $1003 - .dword $1004 - .dword $1005 - .dword $1006 - .dword $1007 - .dword $1008 - .dword $7ff0 - .dword $7ff1 - .dword $7ff2 - .dword $7ff3 - .dword $7ff4 - .dword $7ff5 - .dword $7ff6 - .dword $7ff7 - .dword $7ff8 - .dword $7ff9 - .dword $7ffa - .dword $7ffb - .dword $7ffc - .dword $7ffd - .dword $7ffe - .dword $7fff - .dword $8000 - .dword $8001 - .dword $8002 - .dword $8003 - .dword $8004 - .dword $8005 - .dword $8006 - .dword $8007 - .dword $8008 - .dword $8009 - .dword $800a - .dword $800b - .dword $9fe1 - .dword $9fe2 - .dword $9fe3 - .dword $9fe4 - .dword $9fe5 - .dword $9fe6 - .dword $9fe7 - .dword $9fe8 - .dword $9fe9 - .dword $9fea - .dword $9feb - .dword $9fec - .dword $9fed - .dword $9fee - .dword $9fef - .dword $9ff0 - .dword $9ff1 - .dword $9ff2 - .dword $9ff3 - .dword $9ff4 - .dword $9ff5 - .dword $9ff6 - .dword $9ff7 - .dword $9ff8 - .dword $9ff9 - .dword $9ffa - .dword $9ffb - .dword $9ffc - .dword $9ffd - .dword $9ffe - .dword $9fff - .dword $a000 - .dword $a001 - .dword $a002 - .dword $a003 - .dword $a004 - .dword $a005 - .dword $a006 - .dword $a007 - .dword $a008 - .dword $a009 - .dword $a00a - .dword $a00b - .dword $a00c - .dword $a00d - .dword $a00e - .dword $a00f - .dword $afe1 - .dword $afe2 - .dword $afe3 - .dword $afe4 - .dword $afe5 - .dword $afe6 - .dword $afe7 - .dword $afe8 - .dword $afe9 - .dword $afea - .dword $afeb - .dword $afec - .dword $afed - .dword $afee - .dword $afef - .dword $aff0 - .dword $aff1 - .dword $aff2 - .dword $aff3 - .dword $aff4 - .dword $aff5 - .dword $aff6 - .dword $aff7 - .dword $aff8 - .dword $aff9 - .dword $affa - .dword $affb - .dword $affc - .dword $affd - .dword $affe - .dword $afff - .dword $b000 - .dword $b001 - .dword $b002 - .dword $b003 - .dword $b004 - .dword $b005 - .dword $b006 - .dword $b007 - .dword $b008 - .dword $b009 - .dword $b00a - .dword $b00b - .dword $b00c - .dword $b00d - .dword $b00e - .dword $b00f - .dword $ffe1 - .dword $ffe2 - .dword $ffe3 - .dword $ffe4 - .dword $ffe5 - .dword $ffe6 - .dword $ffe7 - .dword $ffe8 - .dword $ffe9 - .dword $ffea - .dword $ffeb - .dword $ffec - .dword $ffed - .dword $ffee - .dword $ffef - .dword $fff0 - .dword $fff1 - .dword $fff2 - .dword $fff3 - .dword $fff4 - .dword $fff5 - .dword $fff6 - .dword $fff7 - .dword $fff8 - .dword $fff9 - .dword $fffa - .dword $fffb - .dword $fffc - .dword $fffd - .dword $fffe - .dword $ffff - .dword $10000 - .dword $10001 - .dword $10002 - .dword $10003 - .dword $10004 - .dword $10005 - .dword $10006 - .dword $10007 - .dword $10008 - .dword $10009 - .dword $1000a - .dword $1000b - .dword $1000c - .dword $1000d - .dword $1000e - .dword $1000f - .dword $7ffffff0 - .dword $7ffffff1 - .dword $7ffffff2 - .dword $7ffffff3 - .dword $7ffffff4 - .dword $7ffffff5 - .dword $7ffffff6 - .dword $7ffffff7 - .dword $7ffffff8 - .dword $7ffffff9 - .dword $7ffffffa - .dword $7ffffffb - .dword $7ffffffc - .dword $7ffffffd - .dword $7ffffffe - .dword $7fffffff - .dword $80000000 - .dword $80000001 - .dword $80000002 - .dword $80000003 - .dword $80000004 - .dword $80000005 - .dword $80000006 - .dword $80000007 - .dword $80000008 - .dword $80000009 - .dword $8000000a - .dword $8000000b - .dword $8000000c - .dword $8000000d - .dword $8000000e - .dword $8000000f - .dword $9ffffff0 - .dword $9ffffff1 - .dword $9ffffff2 - .dword $9ffffff3 - .dword $9ffffff4 - .dword $9ffffff5 - .dword $9ffffff6 - .dword $9ffffff7 - .dword $9ffffff8 - .dword $9ffffff9 - .dword $9ffffffa - .dword $9ffffffb - .dword $9ffffffc - .dword $9ffffffd - .dword $9ffffffe - .dword $9fffffff - .dword $a0000000 - .dword $a0000001 - .dword $a0000002 - .dword $a0000003 - .dword $a0000004 - .dword $a0000005 - .dword $a0000006 - .dword $a0000007 - .dword $a0000008 - .dword $a0000009 - .dword $a000000a - .dword $a000000b - .dword $a000000c - .dword $a000000d - .dword $a000000e - .dword $a000000f - .dword $fffffff0 - .dword $fffffff1 - .dword $fffffff2 - .dword $fffffff3 - .dword $fffffff4 - .dword $fffffff5 - .dword $fffffff6 - .dword $fffffff7 - .dword $fffffff8 - .dword $fffffff9 - .dword $fffffffa - .dword $fffffffb - .dword $fffffffc - .dword $fffffffd - .dword $fffffffe - .dword $ffffffff + ; hex values + .dword $0 + .dword $1 + .dword $2 + .dword $3 + .dword $4 + .dword $5 + .dword $6 + .dword $7 + .dword $8 + .dword $9 + .dword $a + .dword $b + .dword $c + .dword $d + .dword $e + .dword $f + .dword $10 + .dword $11 + .dword $12 + .dword $13 + .dword $70 + .dword $71 + .dword $72 + .dword $73 + .dword $74 + .dword $75 + .dword $76 + .dword $77 + .dword $78 + .dword $79 + .dword $7a + .dword $7b + .dword $7c + .dword $7d + .dword $7e + .dword $7f + .dword $80 + .dword $81 + .dword $82 + .dword $83 + .dword $84 + .dword $85 + .dword $86 + .dword $f0 + .dword $f1 + .dword $f2 + .dword $f3 + .dword $f4 + .dword $f5 + .dword $f6 + .dword $f7 + .dword $f8 + .dword $f9 + .dword $fa + .dword $fb + .dword $fc + .dword $fd + .dword $fe + .dword $ff + .dword $100 + .dword $101 + .dword $102 + .dword $103 + .dword $fd2 + .dword $fd3 + .dword $fd4 + .dword $fd5 + .dword $fd6 + .dword $fd7 + .dword $fd8 + .dword $fd9 + .dword $fda + .dword $fdb + .dword $fdc + .dword $fdd + .dword $fde + .dword $fdf + .dword $fe0 + .dword $fe1 + .dword $fe2 + .dword $fe3 + .dword $fe4 + .dword $fe5 + .dword $fe6 + .dword $fe7 + .dword $fe8 + .dword $fe9 + .dword $fea + .dword $feb + .dword $fec + .dword $fed + .dword $fee + .dword $fef + .dword $ff0 + .dword $ff1 + .dword $ff2 + .dword $ff3 + .dword $ff4 + .dword $ff5 + .dword $ff6 + .dword $ff7 + .dword $ff8 + .dword $ff9 + .dword $ffa + .dword $ffb + .dword $ffc + .dword $ffd + .dword $ffe + .dword $fff + .dword $1000 + .dword $1001 + .dword $1002 + .dword $1003 + .dword $1004 + .dword $1005 + .dword $1006 + .dword $1007 + .dword $1008 + .dword $7ff0 + .dword $7ff1 + .dword $7ff2 + .dword $7ff3 + .dword $7ff4 + .dword $7ff5 + .dword $7ff6 + .dword $7ff7 + .dword $7ff8 + .dword $7ff9 + .dword $7ffa + .dword $7ffb + .dword $7ffc + .dword $7ffd + .dword $7ffe + .dword $7fff + .dword $8000 + .dword $8001 + .dword $8002 + .dword $8003 + .dword $8004 + .dword $8005 + .dword $8006 + .dword $8007 + .dword $8008 + .dword $8009 + .dword $800a + .dword $800b + .dword $9fe1 + .dword $9fe2 + .dword $9fe3 + .dword $9fe4 + .dword $9fe5 + .dword $9fe6 + .dword $9fe7 + .dword $9fe8 + .dword $9fe9 + .dword $9fea + .dword $9feb + .dword $9fec + .dword $9fed + .dword $9fee + .dword $9fef + .dword $9ff0 + .dword $9ff1 + .dword $9ff2 + .dword $9ff3 + .dword $9ff4 + .dword $9ff5 + .dword $9ff6 + .dword $9ff7 + .dword $9ff8 + .dword $9ff9 + .dword $9ffa + .dword $9ffb + .dword $9ffc + .dword $9ffd + .dword $9ffe + .dword $9fff + .dword $a000 + .dword $a001 + .dword $a002 + .dword $a003 + .dword $a004 + .dword $a005 + .dword $a006 + .dword $a007 + .dword $a008 + .dword $a009 + .dword $a00a + .dword $a00b + .dword $a00c + .dword $a00d + .dword $a00e + .dword $a00f + .dword $afe1 + .dword $afe2 + .dword $afe3 + .dword $afe4 + .dword $afe5 + .dword $afe6 + .dword $afe7 + .dword $afe8 + .dword $afe9 + .dword $afea + .dword $afeb + .dword $afec + .dword $afed + .dword $afee + .dword $afef + .dword $aff0 + .dword $aff1 + .dword $aff2 + .dword $aff3 + .dword $aff4 + .dword $aff5 + .dword $aff6 + .dword $aff7 + .dword $aff8 + .dword $aff9 + .dword $affa + .dword $affb + .dword $affc + .dword $affd + .dword $affe + .dword $afff + .dword $b000 + .dword $b001 + .dword $b002 + .dword $b003 + .dword $b004 + .dword $b005 + .dword $b006 + .dword $b007 + .dword $b008 + .dword $b009 + .dword $b00a + .dword $b00b + .dword $b00c + .dword $b00d + .dword $b00e + .dword $b00f + .dword $ffe1 + .dword $ffe2 + .dword $ffe3 + .dword $ffe4 + .dword $ffe5 + .dword $ffe6 + .dword $ffe7 + .dword $ffe8 + .dword $ffe9 + .dword $ffea + .dword $ffeb + .dword $ffec + .dword $ffed + .dword $ffee + .dword $ffef + .dword $fff0 + .dword $fff1 + .dword $fff2 + .dword $fff3 + .dword $fff4 + .dword $fff5 + .dword $fff6 + .dword $fff7 + .dword $fff8 + .dword $fff9 + .dword $fffa + .dword $fffb + .dword $fffc + .dword $fffd + .dword $fffe + .dword $ffff + .dword $10000 + .dword $10001 + .dword $10002 + .dword $10003 + .dword $10004 + .dword $10005 + .dword $10006 + .dword $10007 + .dword $10008 + .dword $10009 + .dword $1000a + .dword $1000b + .dword $1000c + .dword $1000d + .dword $1000e + .dword $1000f + .dword $7ffffff0 + .dword $7ffffff1 + .dword $7ffffff2 + .dword $7ffffff3 + .dword $7ffffff4 + .dword $7ffffff5 + .dword $7ffffff6 + .dword $7ffffff7 + .dword $7ffffff8 + .dword $7ffffff9 + .dword $7ffffffa + .dword $7ffffffb + .dword $7ffffffc + .dword $7ffffffd + .dword $7ffffffe + .dword $7fffffff + .dword $80000000 + .dword $80000001 + .dword $80000002 + .dword $80000003 + .dword $80000004 + .dword $80000005 + .dword $80000006 + .dword $80000007 + .dword $80000008 + .dword $80000009 + .dword $8000000a + .dword $8000000b + .dword $8000000c + .dword $8000000d + .dword $8000000e + .dword $8000000f + .dword $9ffffff0 + .dword $9ffffff1 + .dword $9ffffff2 + .dword $9ffffff3 + .dword $9ffffff4 + .dword $9ffffff5 + .dword $9ffffff6 + .dword $9ffffff7 + .dword $9ffffff8 + .dword $9ffffff9 + .dword $9ffffffa + .dword $9ffffffb + .dword $9ffffffc + .dword $9ffffffd + .dword $9ffffffe + .dword $9fffffff + .dword $a0000000 + .dword $a0000001 + .dword $a0000002 + .dword $a0000003 + .dword $a0000004 + .dword $a0000005 + .dword $a0000006 + .dword $a0000007 + .dword $a0000008 + .dword $a0000009 + .dword $a000000a + .dword $a000000b + .dword $a000000c + .dword $a000000d + .dword $a000000e + .dword $a000000f + .dword $fffffff0 + .dword $fffffff1 + .dword $fffffff2 + .dword $fffffff3 + .dword $fffffff4 + .dword $fffffff5 + .dword $fffffff6 + .dword $fffffff7 + .dword $fffffff8 + .dword $fffffff9 + .dword $fffffffa + .dword $fffffffb + .dword $fffffffc + .dword $fffffffd + .dword $fffffffe + .dword $ffffffff - ; hex values, uppercase - .dword $0 - .dword $1 - .dword $2 - .dword $3 - .dword $4 - .dword $5 - .dword $6 - .dword $7 - .dword $8 - .dword $9 - .dword $A - .dword $B - .dword $C - .dword $D - .dword $E - .dword $F - .dword $10 - .dword $11 - .dword $12 - .dword $13 - .dword $70 - .dword $71 - .dword $72 - .dword $73 - .dword $74 - .dword $75 - .dword $76 - .dword $77 - .dword $78 - .dword $79 - .dword $7A - .dword $7B - .dword $7C - .dword $7D - .dword $7E - .dword $7F - .dword $80 - .dword $81 - .dword $82 - .dword $83 - .dword $84 - .dword $85 - .dword $86 - .dword $F0 - .dword $F1 - .dword $F2 - .dword $F3 - .dword $F4 - .dword $F5 - .dword $F6 - .dword $F7 - .dword $F8 - .dword $F9 - .dword $FA - .dword $FB - .dword $FC - .dword $FD - .dword $FE - .dword $FF - .dword $100 - .dword $101 - .dword $102 - .dword $103 - .dword $FD2 - .dword $FD3 - .dword $FD4 - .dword $FD5 - .dword $FD6 - .dword $FD7 - .dword $FD8 - .dword $FD9 - .dword $FDA - .dword $FDB - .dword $FDC - .dword $FDD - .dword $FDE - .dword $FDF - .dword $FE0 - .dword $FE1 - .dword $FE2 - .dword $FE3 - .dword $FE4 - .dword $FE5 - .dword $FE6 - .dword $FE7 - .dword $FE8 - .dword $FE9 - .dword $FEA - .dword $FEB - .dword $FEC - .dword $FED - .dword $FEE - .dword $FEF - .dword $FF0 - .dword $FF1 - .dword $FF2 - .dword $FF3 - .dword $FF4 - .dword $FF5 - .dword $FF6 - .dword $FF7 - .dword $FF8 - .dword $FF9 - .dword $FFA - .dword $FFB - .dword $FFC - .dword $FFD - .dword $FFE - .dword $FFF - .dword $1000 - .dword $1001 - .dword $1002 - .dword $1003 - .dword $1004 - .dword $1005 - .dword $1006 - .dword $1007 - .dword $1008 - .dword $7FF0 - .dword $7FF1 - .dword $7FF2 - .dword $7FF3 - .dword $7FF4 - .dword $7FF5 - .dword $7FF6 - .dword $7FF7 - .dword $7FF8 - .dword $7FF9 - .dword $7FFA - .dword $7FFB - .dword $7FFC - .dword $7FFD - .dword $7FFE - .dword $7FFF - .dword $8000 - .dword $8001 - .dword $8002 - .dword $8003 - .dword $8004 - .dword $8005 - .dword $8006 - .dword $8007 - .dword $8008 - .dword $8009 - .dword $800A - .dword $800B - .dword $9FE1 - .dword $9FE2 - .dword $9FE3 - .dword $9FE4 - .dword $9FE5 - .dword $9FE6 - .dword $9FE7 - .dword $9FE8 - .dword $9FE9 - .dword $9FEA - .dword $9FEB - .dword $9FEC - .dword $9FED - .dword $9FEE - .dword $9FEF - .dword $9FF0 - .dword $9FF1 - .dword $9FF2 - .dword $9FF3 - .dword $9FF4 - .dword $9FF5 - .dword $9FF6 - .dword $9FF7 - .dword $9FF8 - .dword $9FF9 - .dword $9FFA - .dword $9FFB - .dword $9FFC - .dword $9FFD - .dword $9FFE - .dword $9FFF - .dword $A000 - .dword $A001 - .dword $A002 - .dword $A003 - .dword $A004 - .dword $A005 - .dword $A006 - .dword $A007 - .dword $A008 - .dword $A009 - .dword $A00A - .dword $A00B - .dword $A00C - .dword $A00D - .dword $A00E - .dword $A00F - .dword $AFE1 - .dword $AFE2 - .dword $AFE3 - .dword $AFE4 - .dword $AFE5 - .dword $AFE6 - .dword $AFE7 - .dword $AFE8 - .dword $AFE9 - .dword $AFEA - .dword $AFEB - .dword $AFEC - .dword $AFED - .dword $AFEE - .dword $AFEF - .dword $AFF0 - .dword $AFF1 - .dword $AFF2 - .dword $AFF3 - .dword $AFF4 - .dword $AFF5 - .dword $AFF6 - .dword $AFF7 - .dword $AFF8 - .dword $AFF9 - .dword $AFFA - .dword $AFFB - .dword $AFFC - .dword $AFFD - .dword $AFFE - .dword $AFFF - .dword $B000 - .dword $B001 - .dword $B002 - .dword $B003 - .dword $B004 - .dword $B005 - .dword $B006 - .dword $B007 - .dword $B008 - .dword $B009 - .dword $B00A - .dword $B00B - .dword $B00C - .dword $B00D - .dword $B00E - .dword $B00F - .dword $FFE1 - .dword $FFE2 - .dword $FFE3 - .dword $FFE4 - .dword $FFE5 - .dword $FFE6 - .dword $FFE7 - .dword $FFE8 - .dword $FFE9 - .dword $FFEA - .dword $FFEB - .dword $FFEC - .dword $FFED - .dword $FFEE - .dword $FFEF - .dword $FFF0 - .dword $FFF1 - .dword $FFF2 - .dword $FFF3 - .dword $FFF4 - .dword $FFF5 - .dword $FFF6 - .dword $FFF7 - .dword $FFF8 - .dword $FFF9 - .dword $FFFA - .dword $FFFB - .dword $FFFC - .dword $FFFD - .dword $FFFE - .dword $FFFF - .dword $10000 - .dword $10001 - .dword $10002 - .dword $10003 - .dword $10004 - .dword $10005 - .dword $10006 - .dword $10007 - .dword $10008 - .dword $10009 - .dword $1000A - .dword $1000B - .dword $1000C - .dword $1000D - .dword $1000E - .dword $1000F - .dword $7FFFFFF0 - .dword $7FFFFFF1 - .dword $7FFFFFF2 - .dword $7FFFFFF3 - .dword $7FFFFFF4 - .dword $7FFFFFF5 - .dword $7FFFFFF6 - .dword $7FFFFFF7 - .dword $7FFFFFF8 - .dword $7FFFFFF9 - .dword $7FFFFFFA - .dword $7FFFFFFB - .dword $7FFFFFFC - .dword $7FFFFFFD - .dword $7FFFFFFE - .dword $7FFFFFFF - .dword $80000000 - .dword $80000001 - .dword $80000002 - .dword $80000003 - .dword $80000004 - .dword $80000005 - .dword $80000006 - .dword $80000007 - .dword $80000008 - .dword $80000009 - .dword $8000000A - .dword $8000000B - .dword $8000000C - .dword $8000000D - .dword $8000000E - .dword $8000000F - .dword $9FFFFFF0 - .dword $9FFFFFF1 - .dword $9FFFFFF2 - .dword $9FFFFFF3 - .dword $9FFFFFF4 - .dword $9FFFFFF5 - .dword $9FFFFFF6 - .dword $9FFFFFF7 - .dword $9FFFFFF8 - .dword $9FFFFFF9 - .dword $9FFFFFFA - .dword $9FFFFFFB - .dword $9FFFFFFC - .dword $9FFFFFFD - .dword $9FFFFFFE - .dword $9FFFFFFF - .dword $A0000000 - .dword $A0000001 - .dword $A0000002 - .dword $A0000003 - .dword $A0000004 - .dword $A0000005 - .dword $A0000006 - .dword $A0000007 - .dword $A0000008 - .dword $A0000009 - .dword $A000000A - .dword $A000000B - .dword $A000000C - .dword $A000000D - .dword $A000000E - .dword $A000000F - .dword $FFFFFFF0 - .dword $FFFFFFF1 - .dword $FFFFFFF2 - .dword $FFFFFFF3 - .dword $FFFFFFF4 - .dword $FFFFFFF5 - .dword $FFFFFFF6 - .dword $FFFFFFF7 - .dword $FFFFFFF8 - .dword $FFFFFFF9 - .dword $FFFFFFFA - .dword $FFFFFFFB - .dword $FFFFFFFC - .dword $FFFFFFFD - .dword $FFFFFFFE - .dword $FFFFFFFF + ; hex values, uppercase + .dword $0 + .dword $1 + .dword $2 + .dword $3 + .dword $4 + .dword $5 + .dword $6 + .dword $7 + .dword $8 + .dword $9 + .dword $A + .dword $B + .dword $C + .dword $D + .dword $E + .dword $F + .dword $10 + .dword $11 + .dword $12 + .dword $13 + .dword $70 + .dword $71 + .dword $72 + .dword $73 + .dword $74 + .dword $75 + .dword $76 + .dword $77 + .dword $78 + .dword $79 + .dword $7A + .dword $7B + .dword $7C + .dword $7D + .dword $7E + .dword $7F + .dword $80 + .dword $81 + .dword $82 + .dword $83 + .dword $84 + .dword $85 + .dword $86 + .dword $F0 + .dword $F1 + .dword $F2 + .dword $F3 + .dword $F4 + .dword $F5 + .dword $F6 + .dword $F7 + .dword $F8 + .dword $F9 + .dword $FA + .dword $FB + .dword $FC + .dword $FD + .dword $FE + .dword $FF + .dword $100 + .dword $101 + .dword $102 + .dword $103 + .dword $FD2 + .dword $FD3 + .dword $FD4 + .dword $FD5 + .dword $FD6 + .dword $FD7 + .dword $FD8 + .dword $FD9 + .dword $FDA + .dword $FDB + .dword $FDC + .dword $FDD + .dword $FDE + .dword $FDF + .dword $FE0 + .dword $FE1 + .dword $FE2 + .dword $FE3 + .dword $FE4 + .dword $FE5 + .dword $FE6 + .dword $FE7 + .dword $FE8 + .dword $FE9 + .dword $FEA + .dword $FEB + .dword $FEC + .dword $FED + .dword $FEE + .dword $FEF + .dword $FF0 + .dword $FF1 + .dword $FF2 + .dword $FF3 + .dword $FF4 + .dword $FF5 + .dword $FF6 + .dword $FF7 + .dword $FF8 + .dword $FF9 + .dword $FFA + .dword $FFB + .dword $FFC + .dword $FFD + .dword $FFE + .dword $FFF + .dword $1000 + .dword $1001 + .dword $1002 + .dword $1003 + .dword $1004 + .dword $1005 + .dword $1006 + .dword $1007 + .dword $1008 + .dword $7FF0 + .dword $7FF1 + .dword $7FF2 + .dword $7FF3 + .dword $7FF4 + .dword $7FF5 + .dword $7FF6 + .dword $7FF7 + .dword $7FF8 + .dword $7FF9 + .dword $7FFA + .dword $7FFB + .dword $7FFC + .dword $7FFD + .dword $7FFE + .dword $7FFF + .dword $8000 + .dword $8001 + .dword $8002 + .dword $8003 + .dword $8004 + .dword $8005 + .dword $8006 + .dword $8007 + .dword $8008 + .dword $8009 + .dword $800A + .dword $800B + .dword $9FE1 + .dword $9FE2 + .dword $9FE3 + .dword $9FE4 + .dword $9FE5 + .dword $9FE6 + .dword $9FE7 + .dword $9FE8 + .dword $9FE9 + .dword $9FEA + .dword $9FEB + .dword $9FEC + .dword $9FED + .dword $9FEE + .dword $9FEF + .dword $9FF0 + .dword $9FF1 + .dword $9FF2 + .dword $9FF3 + .dword $9FF4 + .dword $9FF5 + .dword $9FF6 + .dword $9FF7 + .dword $9FF8 + .dword $9FF9 + .dword $9FFA + .dword $9FFB + .dword $9FFC + .dword $9FFD + .dword $9FFE + .dword $9FFF + .dword $A000 + .dword $A001 + .dword $A002 + .dword $A003 + .dword $A004 + .dword $A005 + .dword $A006 + .dword $A007 + .dword $A008 + .dword $A009 + .dword $A00A + .dword $A00B + .dword $A00C + .dword $A00D + .dword $A00E + .dword $A00F + .dword $AFE1 + .dword $AFE2 + .dword $AFE3 + .dword $AFE4 + .dword $AFE5 + .dword $AFE6 + .dword $AFE7 + .dword $AFE8 + .dword $AFE9 + .dword $AFEA + .dword $AFEB + .dword $AFEC + .dword $AFED + .dword $AFEE + .dword $AFEF + .dword $AFF0 + .dword $AFF1 + .dword $AFF2 + .dword $AFF3 + .dword $AFF4 + .dword $AFF5 + .dword $AFF6 + .dword $AFF7 + .dword $AFF8 + .dword $AFF9 + .dword $AFFA + .dword $AFFB + .dword $AFFC + .dword $AFFD + .dword $AFFE + .dword $AFFF + .dword $B000 + .dword $B001 + .dword $B002 + .dword $B003 + .dword $B004 + .dword $B005 + .dword $B006 + .dword $B007 + .dword $B008 + .dword $B009 + .dword $B00A + .dword $B00B + .dword $B00C + .dword $B00D + .dword $B00E + .dword $B00F + .dword $FFE1 + .dword $FFE2 + .dword $FFE3 + .dword $FFE4 + .dword $FFE5 + .dword $FFE6 + .dword $FFE7 + .dword $FFE8 + .dword $FFE9 + .dword $FFEA + .dword $FFEB + .dword $FFEC + .dword $FFED + .dword $FFEE + .dword $FFEF + .dword $FFF0 + .dword $FFF1 + .dword $FFF2 + .dword $FFF3 + .dword $FFF4 + .dword $FFF5 + .dword $FFF6 + .dword $FFF7 + .dword $FFF8 + .dword $FFF9 + .dword $FFFA + .dword $FFFB + .dword $FFFC + .dword $FFFD + .dword $FFFE + .dword $FFFF + .dword $10000 + .dword $10001 + .dword $10002 + .dword $10003 + .dword $10004 + .dword $10005 + .dword $10006 + .dword $10007 + .dword $10008 + .dword $10009 + .dword $1000A + .dword $1000B + .dword $1000C + .dword $1000D + .dword $1000E + .dword $1000F + .dword $7FFFFFF0 + .dword $7FFFFFF1 + .dword $7FFFFFF2 + .dword $7FFFFFF3 + .dword $7FFFFFF4 + .dword $7FFFFFF5 + .dword $7FFFFFF6 + .dword $7FFFFFF7 + .dword $7FFFFFF8 + .dword $7FFFFFF9 + .dword $7FFFFFFA + .dword $7FFFFFFB + .dword $7FFFFFFC + .dword $7FFFFFFD + .dword $7FFFFFFE + .dword $7FFFFFFF + .dword $80000000 + .dword $80000001 + .dword $80000002 + .dword $80000003 + .dword $80000004 + .dword $80000005 + .dword $80000006 + .dword $80000007 + .dword $80000008 + .dword $80000009 + .dword $8000000A + .dword $8000000B + .dword $8000000C + .dword $8000000D + .dword $8000000E + .dword $8000000F + .dword $9FFFFFF0 + .dword $9FFFFFF1 + .dword $9FFFFFF2 + .dword $9FFFFFF3 + .dword $9FFFFFF4 + .dword $9FFFFFF5 + .dword $9FFFFFF6 + .dword $9FFFFFF7 + .dword $9FFFFFF8 + .dword $9FFFFFF9 + .dword $9FFFFFFA + .dword $9FFFFFFB + .dword $9FFFFFFC + .dword $9FFFFFFD + .dword $9FFFFFFE + .dword $9FFFFFFF + .dword $A0000000 + .dword $A0000001 + .dword $A0000002 + .dword $A0000003 + .dword $A0000004 + .dword $A0000005 + .dword $A0000006 + .dword $A0000007 + .dword $A0000008 + .dword $A0000009 + .dword $A000000A + .dword $A000000B + .dword $A000000C + .dword $A000000D + .dword $A000000E + .dword $A000000F + .dword $FFFFFFF0 + .dword $FFFFFFF1 + .dword $FFFFFFF2 + .dword $FFFFFFF3 + .dword $FFFFFFF4 + .dword $FFFFFFF5 + .dword $FFFFFFF6 + .dword $FFFFFFF7 + .dword $FFFFFFF8 + .dword $FFFFFFF9 + .dword $FFFFFFFA + .dword $FFFFFFFB + .dword $FFFFFFFC + .dword $FFFFFFFD + .dword $FFFFFFFE + .dword $FFFFFFFF - ; 8-digit hex values - .dword $00000000 - .dword $00000001 - .dword $00000002 - .dword $00000003 - .dword $00000004 - .dword $00000005 - .dword $00000006 - .dword $00000007 - .dword $00000008 - .dword $00000009 - .dword $0000000a - .dword $0000000b - .dword $0000000c - .dword $0000000d - .dword $0000000e - .dword $0000000f - .dword $00000010 - .dword $00000011 - .dword $00000012 - .dword $00000013 - .dword $00000070 - .dword $00000071 - .dword $00000072 - .dword $00000073 - .dword $00000074 - .dword $00000075 - .dword $00000076 - .dword $00000077 - .dword $00000078 - .dword $00000079 - .dword $0000007a - .dword $0000007b - .dword $0000007c - .dword $0000007d - .dword $0000007e - .dword $0000007f - .dword $00000080 - .dword $00000081 - .dword $00000082 - .dword $00000083 - .dword $00000084 - .dword $00000085 - .dword $00000086 - .dword $000000f0 - .dword $000000f1 - .dword $000000f2 - .dword $000000f3 - .dword $000000f4 - .dword $000000f5 - .dword $000000f6 - .dword $000000f7 - .dword $000000f8 - .dword $000000f9 - .dword $000000fa - .dword $000000fb - .dword $000000fc - .dword $000000fd - .dword $000000fe - .dword $000000ff - .dword $00000100 - .dword $00000101 - .dword $00000102 - .dword $00000103 - .dword $00000fd2 - .dword $00000fd3 - .dword $00000fd4 - .dword $00000fd5 - .dword $00000fd6 - .dword $00000fd7 - .dword $00000fd8 - .dword $00000fd9 - .dword $00000fda - .dword $00000fdb - .dword $00000fdc - .dword $00000fdd - .dword $00000fde - .dword $00000fdf - .dword $00000fe0 - .dword $00000fe1 - .dword $00000fe2 - .dword $00000fe3 - .dword $00000fe4 - .dword $00000fe5 - .dword $00000fe6 - .dword $00000fe7 - .dword $00000fe8 - .dword $00000fe9 - .dword $00000fea - .dword $00000feb - .dword $00000fec - .dword $00000fed - .dword $00000fee - .dword $00000fef - .dword $00000ff0 - .dword $00000ff1 - .dword $00000ff2 - .dword $00000ff3 - .dword $00000ff4 - .dword $00000ff5 - .dword $00000ff6 - .dword $00000ff7 - .dword $00000ff8 - .dword $00000ff9 - .dword $00000ffa - .dword $00000ffb - .dword $00000ffc - .dword $00000ffd - .dword $00000ffe - .dword $00000fff - .dword $00001000 - .dword $00001001 - .dword $00001002 - .dword $00001003 - .dword $00001004 - .dword $00001005 - .dword $00001006 - .dword $00001007 - .dword $00001008 - .dword $00007ff0 - .dword $00007ff1 - .dword $00007ff2 - .dword $00007ff3 - .dword $00007ff4 - .dword $00007ff5 - .dword $00007ff6 - .dword $00007ff7 - .dword $00007ff8 - .dword $00007ff9 - .dword $00007ffa - .dword $00007ffb - .dword $00007ffc - .dword $00007ffd - .dword $00007ffe - .dword $00007fff - .dword $00008000 - .dword $00008001 - .dword $00008002 - .dword $00008003 - .dword $00008004 - .dword $00008005 - .dword $00008006 - .dword $00008007 - .dword $00008008 - .dword $00008009 - .dword $0000800a - .dword $0000800b - .dword $00009fe1 - .dword $00009fe2 - .dword $00009fe3 - .dword $00009fe4 - .dword $00009fe5 - .dword $00009fe6 - .dword $00009fe7 - .dword $00009fe8 - .dword $00009fe9 - .dword $00009fea - .dword $00009feb - .dword $00009fec - .dword $00009fed - .dword $00009fee - .dword $00009fef - .dword $00009ff0 - .dword $00009ff1 - .dword $00009ff2 - .dword $00009ff3 - .dword $00009ff4 - .dword $00009ff5 - .dword $00009ff6 - .dword $00009ff7 - .dword $00009ff8 - .dword $00009ff9 - .dword $00009ffa - .dword $00009ffb - .dword $00009ffc - .dword $00009ffd - .dword $00009ffe - .dword $00009fff - .dword $0000a000 - .dword $0000a001 - .dword $0000a002 - .dword $0000a003 - .dword $0000a004 - .dword $0000a005 - .dword $0000a006 - .dword $0000a007 - .dword $0000a008 - .dword $0000a009 - .dword $0000a00a - .dword $0000a00b - .dword $0000a00c - .dword $0000a00d - .dword $0000a00e - .dword $0000a00f - .dword $0000afe1 - .dword $0000afe2 - .dword $0000afe3 - .dword $0000afe4 - .dword $0000afe5 - .dword $0000afe6 - .dword $0000afe7 - .dword $0000afe8 - .dword $0000afe9 - .dword $0000afea - .dword $0000afeb - .dword $0000afec - .dword $0000afed - .dword $0000afee - .dword $0000afef - .dword $0000aff0 - .dword $0000aff1 - .dword $0000aff2 - .dword $0000aff3 - .dword $0000aff4 - .dword $0000aff5 - .dword $0000aff6 - .dword $0000aff7 - .dword $0000aff8 - .dword $0000aff9 - .dword $0000affa - .dword $0000affb - .dword $0000affc - .dword $0000affd - .dword $0000affe - .dword $0000afff - .dword $0000b000 - .dword $0000b001 - .dword $0000b002 - .dword $0000b003 - .dword $0000b004 - .dword $0000b005 - .dword $0000b006 - .dword $0000b007 - .dword $0000b008 - .dword $0000b009 - .dword $0000b00a - .dword $0000b00b - .dword $0000b00c - .dword $0000b00d - .dword $0000b00e - .dword $0000b00f - .dword $0000ffe1 - .dword $0000ffe2 - .dword $0000ffe3 - .dword $0000ffe4 - .dword $0000ffe5 - .dword $0000ffe6 - .dword $0000ffe7 - .dword $0000ffe8 - .dword $0000ffe9 - .dword $0000ffea - .dword $0000ffeb - .dword $0000ffec - .dword $0000ffed - .dword $0000ffee - .dword $0000ffef - .dword $0000fff0 - .dword $0000fff1 - .dword $0000fff2 - .dword $0000fff3 - .dword $0000fff4 - .dword $0000fff5 - .dword $0000fff6 - .dword $0000fff7 - .dword $0000fff8 - .dword $0000fff9 - .dword $0000fffa - .dword $0000fffb - .dword $0000fffc - .dword $0000fffd - .dword $0000fffe - .dword $0000ffff - .dword $00010000 - .dword $00010001 - .dword $00010002 - .dword $00010003 - .dword $00010004 - .dword $00010005 - .dword $00010006 - .dword $00010007 - .dword $00010008 - .dword $00010009 - .dword $0001000a - .dword $0001000b - .dword $0001000c - .dword $0001000d - .dword $0001000e - .dword $0001000f - .dword $7ffffff0 - .dword $7ffffff1 - .dword $7ffffff2 - .dword $7ffffff3 - .dword $7ffffff4 - .dword $7ffffff5 - .dword $7ffffff6 - .dword $7ffffff7 - .dword $7ffffff8 - .dword $7ffffff9 - .dword $7ffffffa - .dword $7ffffffb - .dword $7ffffffc - .dword $7ffffffd - .dword $7ffffffe - .dword $7fffffff - .dword $80000000 - .dword $80000001 - .dword $80000002 - .dword $80000003 - .dword $80000004 - .dword $80000005 - .dword $80000006 - .dword $80000007 - .dword $80000008 - .dword $80000009 - .dword $8000000a - .dword $8000000b - .dword $8000000c - .dword $8000000d - .dword $8000000e - .dword $8000000f - .dword $9ffffff0 - .dword $9ffffff1 - .dword $9ffffff2 - .dword $9ffffff3 - .dword $9ffffff4 - .dword $9ffffff5 - .dword $9ffffff6 - .dword $9ffffff7 - .dword $9ffffff8 - .dword $9ffffff9 - .dword $9ffffffa - .dword $9ffffffb - .dword $9ffffffc - .dword $9ffffffd - .dword $9ffffffe - .dword $9fffffff - .dword $a0000000 - .dword $a0000001 - .dword $a0000002 - .dword $a0000003 - .dword $a0000004 - .dword $a0000005 - .dword $a0000006 - .dword $a0000007 - .dword $a0000008 - .dword $a0000009 - .dword $a000000a - .dword $a000000b - .dword $a000000c - .dword $a000000d - .dword $a000000e - .dword $a000000f - .dword $fffffff0 - .dword $fffffff1 - .dword $fffffff2 - .dword $fffffff3 - .dword $fffffff4 - .dword $fffffff5 - .dword $fffffff6 - .dword $fffffff7 - .dword $fffffff8 - .dword $fffffff9 - .dword $fffffffa - .dword $fffffffb - .dword $fffffffc - .dword $fffffffd - .dword $fffffffe - .dword $ffffffff + ; 8-digit hex values + .dword $00000000 + .dword $00000001 + .dword $00000002 + .dword $00000003 + .dword $00000004 + .dword $00000005 + .dword $00000006 + .dword $00000007 + .dword $00000008 + .dword $00000009 + .dword $0000000a + .dword $0000000b + .dword $0000000c + .dword $0000000d + .dword $0000000e + .dword $0000000f + .dword $00000010 + .dword $00000011 + .dword $00000012 + .dword $00000013 + .dword $00000070 + .dword $00000071 + .dword $00000072 + .dword $00000073 + .dword $00000074 + .dword $00000075 + .dword $00000076 + .dword $00000077 + .dword $00000078 + .dword $00000079 + .dword $0000007a + .dword $0000007b + .dword $0000007c + .dword $0000007d + .dword $0000007e + .dword $0000007f + .dword $00000080 + .dword $00000081 + .dword $00000082 + .dword $00000083 + .dword $00000084 + .dword $00000085 + .dword $00000086 + .dword $000000f0 + .dword $000000f1 + .dword $000000f2 + .dword $000000f3 + .dword $000000f4 + .dword $000000f5 + .dword $000000f6 + .dword $000000f7 + .dword $000000f8 + .dword $000000f9 + .dword $000000fa + .dword $000000fb + .dword $000000fc + .dword $000000fd + .dword $000000fe + .dword $000000ff + .dword $00000100 + .dword $00000101 + .dword $00000102 + .dword $00000103 + .dword $00000fd2 + .dword $00000fd3 + .dword $00000fd4 + .dword $00000fd5 + .dword $00000fd6 + .dword $00000fd7 + .dword $00000fd8 + .dword $00000fd9 + .dword $00000fda + .dword $00000fdb + .dword $00000fdc + .dword $00000fdd + .dword $00000fde + .dword $00000fdf + .dword $00000fe0 + .dword $00000fe1 + .dword $00000fe2 + .dword $00000fe3 + .dword $00000fe4 + .dword $00000fe5 + .dword $00000fe6 + .dword $00000fe7 + .dword $00000fe8 + .dword $00000fe9 + .dword $00000fea + .dword $00000feb + .dword $00000fec + .dword $00000fed + .dword $00000fee + .dword $00000fef + .dword $00000ff0 + .dword $00000ff1 + .dword $00000ff2 + .dword $00000ff3 + .dword $00000ff4 + .dword $00000ff5 + .dword $00000ff6 + .dword $00000ff7 + .dword $00000ff8 + .dword $00000ff9 + .dword $00000ffa + .dword $00000ffb + .dword $00000ffc + .dword $00000ffd + .dword $00000ffe + .dword $00000fff + .dword $00001000 + .dword $00001001 + .dword $00001002 + .dword $00001003 + .dword $00001004 + .dword $00001005 + .dword $00001006 + .dword $00001007 + .dword $00001008 + .dword $00007ff0 + .dword $00007ff1 + .dword $00007ff2 + .dword $00007ff3 + .dword $00007ff4 + .dword $00007ff5 + .dword $00007ff6 + .dword $00007ff7 + .dword $00007ff8 + .dword $00007ff9 + .dword $00007ffa + .dword $00007ffb + .dword $00007ffc + .dword $00007ffd + .dword $00007ffe + .dword $00007fff + .dword $00008000 + .dword $00008001 + .dword $00008002 + .dword $00008003 + .dword $00008004 + .dword $00008005 + .dword $00008006 + .dword $00008007 + .dword $00008008 + .dword $00008009 + .dword $0000800a + .dword $0000800b + .dword $00009fe1 + .dword $00009fe2 + .dword $00009fe3 + .dword $00009fe4 + .dword $00009fe5 + .dword $00009fe6 + .dword $00009fe7 + .dword $00009fe8 + .dword $00009fe9 + .dword $00009fea + .dword $00009feb + .dword $00009fec + .dword $00009fed + .dword $00009fee + .dword $00009fef + .dword $00009ff0 + .dword $00009ff1 + .dword $00009ff2 + .dword $00009ff3 + .dword $00009ff4 + .dword $00009ff5 + .dword $00009ff6 + .dword $00009ff7 + .dword $00009ff8 + .dword $00009ff9 + .dword $00009ffa + .dword $00009ffb + .dword $00009ffc + .dword $00009ffd + .dword $00009ffe + .dword $00009fff + .dword $0000a000 + .dword $0000a001 + .dword $0000a002 + .dword $0000a003 + .dword $0000a004 + .dword $0000a005 + .dword $0000a006 + .dword $0000a007 + .dword $0000a008 + .dword $0000a009 + .dword $0000a00a + .dword $0000a00b + .dword $0000a00c + .dword $0000a00d + .dword $0000a00e + .dword $0000a00f + .dword $0000afe1 + .dword $0000afe2 + .dword $0000afe3 + .dword $0000afe4 + .dword $0000afe5 + .dword $0000afe6 + .dword $0000afe7 + .dword $0000afe8 + .dword $0000afe9 + .dword $0000afea + .dword $0000afeb + .dword $0000afec + .dword $0000afed + .dword $0000afee + .dword $0000afef + .dword $0000aff0 + .dword $0000aff1 + .dword $0000aff2 + .dword $0000aff3 + .dword $0000aff4 + .dword $0000aff5 + .dword $0000aff6 + .dword $0000aff7 + .dword $0000aff8 + .dword $0000aff9 + .dword $0000affa + .dword $0000affb + .dword $0000affc + .dword $0000affd + .dword $0000affe + .dword $0000afff + .dword $0000b000 + .dword $0000b001 + .dword $0000b002 + .dword $0000b003 + .dword $0000b004 + .dword $0000b005 + .dword $0000b006 + .dword $0000b007 + .dword $0000b008 + .dword $0000b009 + .dword $0000b00a + .dword $0000b00b + .dword $0000b00c + .dword $0000b00d + .dword $0000b00e + .dword $0000b00f + .dword $0000ffe1 + .dword $0000ffe2 + .dword $0000ffe3 + .dword $0000ffe4 + .dword $0000ffe5 + .dword $0000ffe6 + .dword $0000ffe7 + .dword $0000ffe8 + .dword $0000ffe9 + .dword $0000ffea + .dword $0000ffeb + .dword $0000ffec + .dword $0000ffed + .dword $0000ffee + .dword $0000ffef + .dword $0000fff0 + .dword $0000fff1 + .dword $0000fff2 + .dword $0000fff3 + .dword $0000fff4 + .dword $0000fff5 + .dword $0000fff6 + .dword $0000fff7 + .dword $0000fff8 + .dword $0000fff9 + .dword $0000fffa + .dword $0000fffb + .dword $0000fffc + .dword $0000fffd + .dword $0000fffe + .dword $0000ffff + .dword $00010000 + .dword $00010001 + .dword $00010002 + .dword $00010003 + .dword $00010004 + .dword $00010005 + .dword $00010006 + .dword $00010007 + .dword $00010008 + .dword $00010009 + .dword $0001000a + .dword $0001000b + .dword $0001000c + .dword $0001000d + .dword $0001000e + .dword $0001000f + .dword $7ffffff0 + .dword $7ffffff1 + .dword $7ffffff2 + .dword $7ffffff3 + .dword $7ffffff4 + .dword $7ffffff5 + .dword $7ffffff6 + .dword $7ffffff7 + .dword $7ffffff8 + .dword $7ffffff9 + .dword $7ffffffa + .dword $7ffffffb + .dword $7ffffffc + .dword $7ffffffd + .dword $7ffffffe + .dword $7fffffff + .dword $80000000 + .dword $80000001 + .dword $80000002 + .dword $80000003 + .dword $80000004 + .dword $80000005 + .dword $80000006 + .dword $80000007 + .dword $80000008 + .dword $80000009 + .dword $8000000a + .dword $8000000b + .dword $8000000c + .dword $8000000d + .dword $8000000e + .dword $8000000f + .dword $9ffffff0 + .dword $9ffffff1 + .dword $9ffffff2 + .dword $9ffffff3 + .dword $9ffffff4 + .dword $9ffffff5 + .dword $9ffffff6 + .dword $9ffffff7 + .dword $9ffffff8 + .dword $9ffffff9 + .dword $9ffffffa + .dword $9ffffffb + .dword $9ffffffc + .dword $9ffffffd + .dword $9ffffffe + .dword $9fffffff + .dword $a0000000 + .dword $a0000001 + .dword $a0000002 + .dword $a0000003 + .dword $a0000004 + .dword $a0000005 + .dword $a0000006 + .dword $a0000007 + .dword $a0000008 + .dword $a0000009 + .dword $a000000a + .dword $a000000b + .dword $a000000c + .dword $a000000d + .dword $a000000e + .dword $a000000f + .dword $fffffff0 + .dword $fffffff1 + .dword $fffffff2 + .dword $fffffff3 + .dword $fffffff4 + .dword $fffffff5 + .dword $fffffff6 + .dword $fffffff7 + .dword $fffffff8 + .dword $fffffff9 + .dword $fffffffa + .dword $fffffffb + .dword $fffffffc + .dword $fffffffd + .dword $fffffffe + .dword $ffffffff - ; 8-digit hex values, uppercase - .dword $00000000 - .dword $00000001 - .dword $00000002 - .dword $00000003 - .dword $00000004 - .dword $00000005 - .dword $00000006 - .dword $00000007 - .dword $00000008 - .dword $00000009 - .dword $0000000A - .dword $0000000B - .dword $0000000C - .dword $0000000D - .dword $0000000E - .dword $0000000F - .dword $00000010 - .dword $00000011 - .dword $00000012 - .dword $00000013 - .dword $00000070 - .dword $00000071 - .dword $00000072 - .dword $00000073 - .dword $00000074 - .dword $00000075 - .dword $00000076 - .dword $00000077 - .dword $00000078 - .dword $00000079 - .dword $0000007A - .dword $0000007B - .dword $0000007C - .dword $0000007D - .dword $0000007E - .dword $0000007F - .dword $00000080 - .dword $00000081 - .dword $00000082 - .dword $00000083 - .dword $00000084 - .dword $00000085 - .dword $00000086 - .dword $000000F0 - .dword $000000F1 - .dword $000000F2 - .dword $000000F3 - .dword $000000F4 - .dword $000000F5 - .dword $000000F6 - .dword $000000F7 - .dword $000000F8 - .dword $000000F9 - .dword $000000FA - .dword $000000FB - .dword $000000FC - .dword $000000FD - .dword $000000FE - .dword $000000FF - .dword $00000100 - .dword $00000101 - .dword $00000102 - .dword $00000103 - .dword $00000FD2 - .dword $00000FD3 - .dword $00000FD4 - .dword $00000FD5 - .dword $00000FD6 - .dword $00000FD7 - .dword $00000FD8 - .dword $00000FD9 - .dword $00000FDA - .dword $00000FDB - .dword $00000FDC - .dword $00000FDD - .dword $00000FDE - .dword $00000FDF - .dword $00000FE0 - .dword $00000FE1 - .dword $00000FE2 - .dword $00000FE3 - .dword $00000FE4 - .dword $00000FE5 - .dword $00000FE6 - .dword $00000FE7 - .dword $00000FE8 - .dword $00000FE9 - .dword $00000FEA - .dword $00000FEB - .dword $00000FEC - .dword $00000FED - .dword $00000FEE - .dword $00000FEF - .dword $00000FF0 - .dword $00000FF1 - .dword $00000FF2 - .dword $00000FF3 - .dword $00000FF4 - .dword $00000FF5 - .dword $00000FF6 - .dword $00000FF7 - .dword $00000FF8 - .dword $00000FF9 - .dword $00000FFA - .dword $00000FFB - .dword $00000FFC - .dword $00000FFD - .dword $00000FFE - .dword $00000FFF - .dword $00001000 - .dword $00001001 - .dword $00001002 - .dword $00001003 - .dword $00001004 - .dword $00001005 - .dword $00001006 - .dword $00001007 - .dword $00001008 - .dword $00007FF0 - .dword $00007FF1 - .dword $00007FF2 - .dword $00007FF3 - .dword $00007FF4 - .dword $00007FF5 - .dword $00007FF6 - .dword $00007FF7 - .dword $00007FF8 - .dword $00007FF9 - .dword $00007FFA - .dword $00007FFB - .dword $00007FFC - .dword $00007FFD - .dword $00007FFE - .dword $00007FFF - .dword $00008000 - .dword $00008001 - .dword $00008002 - .dword $00008003 - .dword $00008004 - .dword $00008005 - .dword $00008006 - .dword $00008007 - .dword $00008008 - .dword $00008009 - .dword $0000800A - .dword $0000800B - .dword $00009FE1 - .dword $00009FE2 - .dword $00009FE3 - .dword $00009FE4 - .dword $00009FE5 - .dword $00009FE6 - .dword $00009FE7 - .dword $00009FE8 - .dword $00009FE9 - .dword $00009FEA - .dword $00009FEB - .dword $00009FEC - .dword $00009FED - .dword $00009FEE - .dword $00009FEF - .dword $00009FF0 - .dword $00009FF1 - .dword $00009FF2 - .dword $00009FF3 - .dword $00009FF4 - .dword $00009FF5 - .dword $00009FF6 - .dword $00009FF7 - .dword $00009FF8 - .dword $00009FF9 - .dword $00009FFA - .dword $00009FFB - .dword $00009FFC - .dword $00009FFD - .dword $00009FFE - .dword $00009FFF - .dword $0000A000 - .dword $0000A001 - .dword $0000A002 - .dword $0000A003 - .dword $0000A004 - .dword $0000A005 - .dword $0000A006 - .dword $0000A007 - .dword $0000A008 - .dword $0000A009 - .dword $0000A00A - .dword $0000A00B - .dword $0000A00C - .dword $0000A00D - .dword $0000A00E - .dword $0000A00F - .dword $0000AFE1 - .dword $0000AFE2 - .dword $0000AFE3 - .dword $0000AFE4 - .dword $0000AFE5 - .dword $0000AFE6 - .dword $0000AFE7 - .dword $0000AFE8 - .dword $0000AFE9 - .dword $0000AFEA - .dword $0000AFEB - .dword $0000AFEC - .dword $0000AFED - .dword $0000AFEE - .dword $0000AFEF - .dword $0000AFF0 - .dword $0000AFF1 - .dword $0000AFF2 - .dword $0000AFF3 - .dword $0000AFF4 - .dword $0000AFF5 - .dword $0000AFF6 - .dword $0000AFF7 - .dword $0000AFF8 - .dword $0000AFF9 - .dword $0000AFFA - .dword $0000AFFB - .dword $0000AFFC - .dword $0000AFFD - .dword $0000AFFE - .dword $0000AFFF - .dword $0000B000 - .dword $0000B001 - .dword $0000B002 - .dword $0000B003 - .dword $0000B004 - .dword $0000B005 - .dword $0000B006 - .dword $0000B007 - .dword $0000B008 - .dword $0000B009 - .dword $0000B00A - .dword $0000B00B - .dword $0000B00C - .dword $0000B00D - .dword $0000B00E - .dword $0000B00F - .dword $0000FFE1 - .dword $0000FFE2 - .dword $0000FFE3 - .dword $0000FFE4 - .dword $0000FFE5 - .dword $0000FFE6 - .dword $0000FFE7 - .dword $0000FFE8 - .dword $0000FFE9 - .dword $0000FFEA - .dword $0000FFEB - .dword $0000FFEC - .dword $0000FFED - .dword $0000FFEE - .dword $0000FFEF - .dword $0000FFF0 - .dword $0000FFF1 - .dword $0000FFF2 - .dword $0000FFF3 - .dword $0000FFF4 - .dword $0000FFF5 - .dword $0000FFF6 - .dword $0000FFF7 - .dword $0000FFF8 - .dword $0000FFF9 - .dword $0000FFFA - .dword $0000FFFB - .dword $0000FFFC - .dword $0000FFFD - .dword $0000FFFE - .dword $0000FFFF - .dword $00010000 - .dword $00010001 - .dword $00010002 - .dword $00010003 - .dword $00010004 - .dword $00010005 - .dword $00010006 - .dword $00010007 - .dword $00010008 - .dword $00010009 - .dword $0001000A - .dword $0001000B - .dword $0001000C - .dword $0001000D - .dword $0001000E - .dword $0001000F - .dword $7FFFFFF0 - .dword $7FFFFFF1 - .dword $7FFFFFF2 - .dword $7FFFFFF3 - .dword $7FFFFFF4 - .dword $7FFFFFF5 - .dword $7FFFFFF6 - .dword $7FFFFFF7 - .dword $7FFFFFF8 - .dword $7FFFFFF9 - .dword $7FFFFFFA - .dword $7FFFFFFB - .dword $7FFFFFFC - .dword $7FFFFFFD - .dword $7FFFFFFE - .dword $7FFFFFFF - .dword $80000000 - .dword $80000001 - .dword $80000002 - .dword $80000003 - .dword $80000004 - .dword $80000005 - .dword $80000006 - .dword $80000007 - .dword $80000008 - .dword $80000009 - .dword $8000000A - .dword $8000000B - .dword $8000000C - .dword $8000000D - .dword $8000000E - .dword $8000000F - .dword $9FFFFFF0 - .dword $9FFFFFF1 - .dword $9FFFFFF2 - .dword $9FFFFFF3 - .dword $9FFFFFF4 - .dword $9FFFFFF5 - .dword $9FFFFFF6 - .dword $9FFFFFF7 - .dword $9FFFFFF8 - .dword $9FFFFFF9 - .dword $9FFFFFFA - .dword $9FFFFFFB - .dword $9FFFFFFC - .dword $9FFFFFFD - .dword $9FFFFFFE - .dword $9FFFFFFF - .dword $A0000000 - .dword $A0000001 - .dword $A0000002 - .dword $A0000003 - .dword $A0000004 - .dword $A0000005 - .dword $A0000006 - .dword $A0000007 - .dword $A0000008 - .dword $A0000009 - .dword $A000000A - .dword $A000000B - .dword $A000000C - .dword $A000000D - .dword $A000000E - .dword $A000000F - .dword $FFFFFFF0 - .dword $FFFFFFF1 - .dword $FFFFFFF2 - .dword $FFFFFFF3 - .dword $FFFFFFF4 - .dword $FFFFFFF5 - .dword $FFFFFFF6 - .dword $FFFFFFF7 - .dword $FFFFFFF8 - .dword $FFFFFFF9 - .dword $FFFFFFFA - .dword $FFFFFFFB - .dword $FFFFFFFC - .dword $FFFFFFFD - .dword $FFFFFFFE - .dword $FFFFFFFF + ; 8-digit hex values, uppercase + .dword $00000000 + .dword $00000001 + .dword $00000002 + .dword $00000003 + .dword $00000004 + .dword $00000005 + .dword $00000006 + .dword $00000007 + .dword $00000008 + .dword $00000009 + .dword $0000000A + .dword $0000000B + .dword $0000000C + .dword $0000000D + .dword $0000000E + .dword $0000000F + .dword $00000010 + .dword $00000011 + .dword $00000012 + .dword $00000013 + .dword $00000070 + .dword $00000071 + .dword $00000072 + .dword $00000073 + .dword $00000074 + .dword $00000075 + .dword $00000076 + .dword $00000077 + .dword $00000078 + .dword $00000079 + .dword $0000007A + .dword $0000007B + .dword $0000007C + .dword $0000007D + .dword $0000007E + .dword $0000007F + .dword $00000080 + .dword $00000081 + .dword $00000082 + .dword $00000083 + .dword $00000084 + .dword $00000085 + .dword $00000086 + .dword $000000F0 + .dword $000000F1 + .dword $000000F2 + .dword $000000F3 + .dword $000000F4 + .dword $000000F5 + .dword $000000F6 + .dword $000000F7 + .dword $000000F8 + .dword $000000F9 + .dword $000000FA + .dword $000000FB + .dword $000000FC + .dword $000000FD + .dword $000000FE + .dword $000000FF + .dword $00000100 + .dword $00000101 + .dword $00000102 + .dword $00000103 + .dword $00000FD2 + .dword $00000FD3 + .dword $00000FD4 + .dword $00000FD5 + .dword $00000FD6 + .dword $00000FD7 + .dword $00000FD8 + .dword $00000FD9 + .dword $00000FDA + .dword $00000FDB + .dword $00000FDC + .dword $00000FDD + .dword $00000FDE + .dword $00000FDF + .dword $00000FE0 + .dword $00000FE1 + .dword $00000FE2 + .dword $00000FE3 + .dword $00000FE4 + .dword $00000FE5 + .dword $00000FE6 + .dword $00000FE7 + .dword $00000FE8 + .dword $00000FE9 + .dword $00000FEA + .dword $00000FEB + .dword $00000FEC + .dword $00000FED + .dword $00000FEE + .dword $00000FEF + .dword $00000FF0 + .dword $00000FF1 + .dword $00000FF2 + .dword $00000FF3 + .dword $00000FF4 + .dword $00000FF5 + .dword $00000FF6 + .dword $00000FF7 + .dword $00000FF8 + .dword $00000FF9 + .dword $00000FFA + .dword $00000FFB + .dword $00000FFC + .dword $00000FFD + .dword $00000FFE + .dword $00000FFF + .dword $00001000 + .dword $00001001 + .dword $00001002 + .dword $00001003 + .dword $00001004 + .dword $00001005 + .dword $00001006 + .dword $00001007 + .dword $00001008 + .dword $00007FF0 + .dword $00007FF1 + .dword $00007FF2 + .dword $00007FF3 + .dword $00007FF4 + .dword $00007FF5 + .dword $00007FF6 + .dword $00007FF7 + .dword $00007FF8 + .dword $00007FF9 + .dword $00007FFA + .dword $00007FFB + .dword $00007FFC + .dword $00007FFD + .dword $00007FFE + .dword $00007FFF + .dword $00008000 + .dword $00008001 + .dword $00008002 + .dword $00008003 + .dword $00008004 + .dword $00008005 + .dword $00008006 + .dword $00008007 + .dword $00008008 + .dword $00008009 + .dword $0000800A + .dword $0000800B + .dword $00009FE1 + .dword $00009FE2 + .dword $00009FE3 + .dword $00009FE4 + .dword $00009FE5 + .dword $00009FE6 + .dword $00009FE7 + .dword $00009FE8 + .dword $00009FE9 + .dword $00009FEA + .dword $00009FEB + .dword $00009FEC + .dword $00009FED + .dword $00009FEE + .dword $00009FEF + .dword $00009FF0 + .dword $00009FF1 + .dword $00009FF2 + .dword $00009FF3 + .dword $00009FF4 + .dword $00009FF5 + .dword $00009FF6 + .dword $00009FF7 + .dword $00009FF8 + .dword $00009FF9 + .dword $00009FFA + .dword $00009FFB + .dword $00009FFC + .dword $00009FFD + .dword $00009FFE + .dword $00009FFF + .dword $0000A000 + .dword $0000A001 + .dword $0000A002 + .dword $0000A003 + .dword $0000A004 + .dword $0000A005 + .dword $0000A006 + .dword $0000A007 + .dword $0000A008 + .dword $0000A009 + .dword $0000A00A + .dword $0000A00B + .dword $0000A00C + .dword $0000A00D + .dword $0000A00E + .dword $0000A00F + .dword $0000AFE1 + .dword $0000AFE2 + .dword $0000AFE3 + .dword $0000AFE4 + .dword $0000AFE5 + .dword $0000AFE6 + .dword $0000AFE7 + .dword $0000AFE8 + .dword $0000AFE9 + .dword $0000AFEA + .dword $0000AFEB + .dword $0000AFEC + .dword $0000AFED + .dword $0000AFEE + .dword $0000AFEF + .dword $0000AFF0 + .dword $0000AFF1 + .dword $0000AFF2 + .dword $0000AFF3 + .dword $0000AFF4 + .dword $0000AFF5 + .dword $0000AFF6 + .dword $0000AFF7 + .dword $0000AFF8 + .dword $0000AFF9 + .dword $0000AFFA + .dword $0000AFFB + .dword $0000AFFC + .dword $0000AFFD + .dword $0000AFFE + .dword $0000AFFF + .dword $0000B000 + .dword $0000B001 + .dword $0000B002 + .dword $0000B003 + .dword $0000B004 + .dword $0000B005 + .dword $0000B006 + .dword $0000B007 + .dword $0000B008 + .dword $0000B009 + .dword $0000B00A + .dword $0000B00B + .dword $0000B00C + .dword $0000B00D + .dword $0000B00E + .dword $0000B00F + .dword $0000FFE1 + .dword $0000FFE2 + .dword $0000FFE3 + .dword $0000FFE4 + .dword $0000FFE5 + .dword $0000FFE6 + .dword $0000FFE7 + .dword $0000FFE8 + .dword $0000FFE9 + .dword $0000FFEA + .dword $0000FFEB + .dword $0000FFEC + .dword $0000FFED + .dword $0000FFEE + .dword $0000FFEF + .dword $0000FFF0 + .dword $0000FFF1 + .dword $0000FFF2 + .dword $0000FFF3 + .dword $0000FFF4 + .dword $0000FFF5 + .dword $0000FFF6 + .dword $0000FFF7 + .dword $0000FFF8 + .dword $0000FFF9 + .dword $0000FFFA + .dword $0000FFFB + .dword $0000FFFC + .dword $0000FFFD + .dword $0000FFFE + .dword $0000FFFF + .dword $00010000 + .dword $00010001 + .dword $00010002 + .dword $00010003 + .dword $00010004 + .dword $00010005 + .dword $00010006 + .dword $00010007 + .dword $00010008 + .dword $00010009 + .dword $0001000A + .dword $0001000B + .dword $0001000C + .dword $0001000D + .dword $0001000E + .dword $0001000F + .dword $7FFFFFF0 + .dword $7FFFFFF1 + .dword $7FFFFFF2 + .dword $7FFFFFF3 + .dword $7FFFFFF4 + .dword $7FFFFFF5 + .dword $7FFFFFF6 + .dword $7FFFFFF7 + .dword $7FFFFFF8 + .dword $7FFFFFF9 + .dword $7FFFFFFA + .dword $7FFFFFFB + .dword $7FFFFFFC + .dword $7FFFFFFD + .dword $7FFFFFFE + .dword $7FFFFFFF + .dword $80000000 + .dword $80000001 + .dword $80000002 + .dword $80000003 + .dword $80000004 + .dword $80000005 + .dword $80000006 + .dword $80000007 + .dword $80000008 + .dword $80000009 + .dword $8000000A + .dword $8000000B + .dword $8000000C + .dword $8000000D + .dword $8000000E + .dword $8000000F + .dword $9FFFFFF0 + .dword $9FFFFFF1 + .dword $9FFFFFF2 + .dword $9FFFFFF3 + .dword $9FFFFFF4 + .dword $9FFFFFF5 + .dword $9FFFFFF6 + .dword $9FFFFFF7 + .dword $9FFFFFF8 + .dword $9FFFFFF9 + .dword $9FFFFFFA + .dword $9FFFFFFB + .dword $9FFFFFFC + .dword $9FFFFFFD + .dword $9FFFFFFE + .dword $9FFFFFFF + .dword $A0000000 + .dword $A0000001 + .dword $A0000002 + .dword $A0000003 + .dword $A0000004 + .dword $A0000005 + .dword $A0000006 + .dword $A0000007 + .dword $A0000008 + .dword $A0000009 + .dword $A000000A + .dword $A000000B + .dword $A000000C + .dword $A000000D + .dword $A000000E + .dword $A000000F + .dword $FFFFFFF0 + .dword $FFFFFFF1 + .dword $FFFFFFF2 + .dword $FFFFFFF3 + .dword $FFFFFFF4 + .dword $FFFFFFF5 + .dword $FFFFFFF6 + .dword $FFFFFFF7 + .dword $FFFFFFF8 + .dword $FFFFFFF9 + .dword $FFFFFFFA + .dword $FFFFFFFB + .dword $FFFFFFFC + .dword $FFFFFFFD + .dword $FFFFFFFE + .dword $FFFFFFFF - ; alternative hex values - .dword 0h - .dword 1h - .dword 2h - .dword 3h - .dword 4h - .dword 5h - .dword 6h - .dword 7h - .dword 8h - .dword 9h - .dword 0ah - .dword 0bh - .dword 0ch - .dword 0dh - .dword 0eh - .dword 0fh - .dword 10h - .dword 11h - .dword 12h - .dword 13h - .dword 70h - .dword 71h - .dword 72h - .dword 73h - .dword 74h - .dword 75h - .dword 76h - .dword 77h - .dword 78h - .dword 79h - .dword 7ah - .dword 7bh - .dword 7ch - .dword 7dh - .dword 7eh - .dword 7fh - .dword 80h - .dword 81h - .dword 82h - .dword 83h - .dword 84h - .dword 85h - .dword 86h - .dword 0f0h - .dword 0f1h - .dword 0f2h - .dword 0f3h - .dword 0f4h - .dword 0f5h - .dword 0f6h - .dword 0f7h - .dword 0f8h - .dword 0f9h - .dword 0fah - .dword 0fbh - .dword 0fch - .dword 0fdh - .dword 0feh - .dword 0ffh - .dword 100h - .dword 101h - .dword 102h - .dword 103h - .dword 0fd2h - .dword 0fd3h - .dword 0fd4h - .dword 0fd5h - .dword 0fd6h - .dword 0fd7h - .dword 0fd8h - .dword 0fd9h - .dword 0fdah - .dword 0fdbh - .dword 0fdch - .dword 0fddh - .dword 0fdeh - .dword 0fdfh - .dword 0fe0h - .dword 0fe1h - .dword 0fe2h - .dword 0fe3h - .dword 0fe4h - .dword 0fe5h - .dword 0fe6h - .dword 0fe7h - .dword 0fe8h - .dword 0fe9h - .dword 0feah - .dword 0febh - .dword 0fech - .dword 0fedh - .dword 0feeh - .dword 0fefh - .dword 0ff0h - .dword 0ff1h - .dword 0ff2h - .dword 0ff3h - .dword 0ff4h - .dword 0ff5h - .dword 0ff6h - .dword 0ff7h - .dword 0ff8h - .dword 0ff9h - .dword 0ffah - .dword 0ffbh - .dword 0ffch - .dword 0ffdh - .dword 0ffeh - .dword 0fffh - .dword 1000h - .dword 1001h - .dword 1002h - .dword 1003h - .dword 1004h - .dword 1005h - .dword 1006h - .dword 1007h - .dword 1008h - .dword 7ff0h - .dword 7ff1h - .dword 7ff2h - .dword 7ff3h - .dword 7ff4h - .dword 7ff5h - .dword 7ff6h - .dword 7ff7h - .dword 7ff8h - .dword 7ff9h - .dword 7ffah - .dword 7ffbh - .dword 7ffch - .dword 7ffdh - .dword 7ffeh - .dword 7fffh - .dword 8000h - .dword 8001h - .dword 8002h - .dword 8003h - .dword 8004h - .dword 8005h - .dword 8006h - .dword 8007h - .dword 8008h - .dword 8009h - .dword 800ah - .dword 800bh - .dword 9fe1h - .dword 9fe2h - .dword 9fe3h - .dword 9fe4h - .dword 9fe5h - .dword 9fe6h - .dword 9fe7h - .dword 9fe8h - .dword 9fe9h - .dword 9feah - .dword 9febh - .dword 9fech - .dword 9fedh - .dword 9feeh - .dword 9fefh - .dword 9ff0h - .dword 9ff1h - .dword 9ff2h - .dword 9ff3h - .dword 9ff4h - .dword 9ff5h - .dword 9ff6h - .dword 9ff7h - .dword 9ff8h - .dword 9ff9h - .dword 9ffah - .dword 9ffbh - .dword 9ffch - .dword 9ffdh - .dword 9ffeh - .dword 9fffh - .dword 0a000h - .dword 0a001h - .dword 0a002h - .dword 0a003h - .dword 0a004h - .dword 0a005h - .dword 0a006h - .dword 0a007h - .dword 0a008h - .dword 0a009h - .dword 0a00ah - .dword 0a00bh - .dword 0a00ch - .dword 0a00dh - .dword 0a00eh - .dword 0a00fh - .dword 0afe1h - .dword 0afe2h - .dword 0afe3h - .dword 0afe4h - .dword 0afe5h - .dword 0afe6h - .dword 0afe7h - .dword 0afe8h - .dword 0afe9h - .dword 0afeah - .dword 0afebh - .dword 0afech - .dword 0afedh - .dword 0afeeh - .dword 0afefh - .dword 0aff0h - .dword 0aff1h - .dword 0aff2h - .dword 0aff3h - .dword 0aff4h - .dword 0aff5h - .dword 0aff6h - .dword 0aff7h - .dword 0aff8h - .dword 0aff9h - .dword 0affah - .dword 0affbh - .dword 0affch - .dword 0affdh - .dword 0affeh - .dword 0afffh - .dword 0b000h - .dword 0b001h - .dword 0b002h - .dword 0b003h - .dword 0b004h - .dword 0b005h - .dword 0b006h - .dword 0b007h - .dword 0b008h - .dword 0b009h - .dword 0b00ah - .dword 0b00bh - .dword 0b00ch - .dword 0b00dh - .dword 0b00eh - .dword 0b00fh - .dword 0ffe1h - .dword 0ffe2h - .dword 0ffe3h - .dword 0ffe4h - .dword 0ffe5h - .dword 0ffe6h - .dword 0ffe7h - .dword 0ffe8h - .dword 0ffe9h - .dword 0ffeah - .dword 0ffebh - .dword 0ffech - .dword 0ffedh - .dword 0ffeeh - .dword 0ffefh - .dword 0fff0h - .dword 0fff1h - .dword 0fff2h - .dword 0fff3h - .dword 0fff4h - .dword 0fff5h - .dword 0fff6h - .dword 0fff7h - .dword 0fff8h - .dword 0fff9h - .dword 0fffah - .dword 0fffbh - .dword 0fffch - .dword 0fffdh - .dword 0fffeh - .dword 0ffffh - .dword 10000h - .dword 10001h - .dword 10002h - .dword 10003h - .dword 10004h - .dword 10005h - .dword 10006h - .dword 10007h - .dword 10008h - .dword 10009h - .dword 1000ah - .dword 1000bh - .dword 1000ch - .dword 1000dh - .dword 1000eh - .dword 1000fh - .dword 7ffffff0h - .dword 7ffffff1h - .dword 7ffffff2h - .dword 7ffffff3h - .dword 7ffffff4h - .dword 7ffffff5h - .dword 7ffffff6h - .dword 7ffffff7h - .dword 7ffffff8h - .dword 7ffffff9h - .dword 7ffffffah - .dword 7ffffffbh - .dword 7ffffffch - .dword 7ffffffdh - .dword 7ffffffeh - .dword 7fffffffh - .dword 80000000h - .dword 80000001h - .dword 80000002h - .dword 80000003h - .dword 80000004h - .dword 80000005h - .dword 80000006h - .dword 80000007h - .dword 80000008h - .dword 80000009h - .dword 8000000ah - .dword 8000000bh - .dword 8000000ch - .dword 8000000dh - .dword 8000000eh - .dword 8000000fh - .dword 9ffffff0h - .dword 9ffffff1h - .dword 9ffffff2h - .dword 9ffffff3h - .dword 9ffffff4h - .dword 9ffffff5h - .dword 9ffffff6h - .dword 9ffffff7h - .dword 9ffffff8h - .dword 9ffffff9h - .dword 9ffffffah - .dword 9ffffffbh - .dword 9ffffffch - .dword 9ffffffdh - .dword 9ffffffeh - .dword 9fffffffh - .dword 0a0000000h - .dword 0a0000001h - .dword 0a0000002h - .dword 0a0000003h - .dword 0a0000004h - .dword 0a0000005h - .dword 0a0000006h - .dword 0a0000007h - .dword 0a0000008h - .dword 0a0000009h - .dword 0a000000ah - .dword 0a000000bh - .dword 0a000000ch - .dword 0a000000dh - .dword 0a000000eh - .dword 0a000000fh - .dword 0fffffff0h - .dword 0fffffff1h - .dword 0fffffff2h - .dword 0fffffff3h - .dword 0fffffff4h - .dword 0fffffff5h - .dword 0fffffff6h - .dword 0fffffff7h - .dword 0fffffff8h - .dword 0fffffff9h - .dword 0fffffffah - .dword 0fffffffbh - .dword 0fffffffch - .dword 0fffffffdh - .dword 0fffffffeh - .dword 0ffffffffh + ; alternative hex values + .dword 0h + .dword 1h + .dword 2h + .dword 3h + .dword 4h + .dword 5h + .dword 6h + .dword 7h + .dword 8h + .dword 9h + .dword 0ah + .dword 0bh + .dword 0ch + .dword 0dh + .dword 0eh + .dword 0fh + .dword 10h + .dword 11h + .dword 12h + .dword 13h + .dword 70h + .dword 71h + .dword 72h + .dword 73h + .dword 74h + .dword 75h + .dword 76h + .dword 77h + .dword 78h + .dword 79h + .dword 7ah + .dword 7bh + .dword 7ch + .dword 7dh + .dword 7eh + .dword 7fh + .dword 80h + .dword 81h + .dword 82h + .dword 83h + .dword 84h + .dword 85h + .dword 86h + .dword 0f0h + .dword 0f1h + .dword 0f2h + .dword 0f3h + .dword 0f4h + .dword 0f5h + .dword 0f6h + .dword 0f7h + .dword 0f8h + .dword 0f9h + .dword 0fah + .dword 0fbh + .dword 0fch + .dword 0fdh + .dword 0feh + .dword 0ffh + .dword 100h + .dword 101h + .dword 102h + .dword 103h + .dword 0fd2h + .dword 0fd3h + .dword 0fd4h + .dword 0fd5h + .dword 0fd6h + .dword 0fd7h + .dword 0fd8h + .dword 0fd9h + .dword 0fdah + .dword 0fdbh + .dword 0fdch + .dword 0fddh + .dword 0fdeh + .dword 0fdfh + .dword 0fe0h + .dword 0fe1h + .dword 0fe2h + .dword 0fe3h + .dword 0fe4h + .dword 0fe5h + .dword 0fe6h + .dword 0fe7h + .dword 0fe8h + .dword 0fe9h + .dword 0feah + .dword 0febh + .dword 0fech + .dword 0fedh + .dword 0feeh + .dword 0fefh + .dword 0ff0h + .dword 0ff1h + .dword 0ff2h + .dword 0ff3h + .dword 0ff4h + .dword 0ff5h + .dword 0ff6h + .dword 0ff7h + .dword 0ff8h + .dword 0ff9h + .dword 0ffah + .dword 0ffbh + .dword 0ffch + .dword 0ffdh + .dword 0ffeh + .dword 0fffh + .dword 1000h + .dword 1001h + .dword 1002h + .dword 1003h + .dword 1004h + .dword 1005h + .dword 1006h + .dword 1007h + .dword 1008h + .dword 7ff0h + .dword 7ff1h + .dword 7ff2h + .dword 7ff3h + .dword 7ff4h + .dword 7ff5h + .dword 7ff6h + .dword 7ff7h + .dword 7ff8h + .dword 7ff9h + .dword 7ffah + .dword 7ffbh + .dword 7ffch + .dword 7ffdh + .dword 7ffeh + .dword 7fffh + .dword 8000h + .dword 8001h + .dword 8002h + .dword 8003h + .dword 8004h + .dword 8005h + .dword 8006h + .dword 8007h + .dword 8008h + .dword 8009h + .dword 800ah + .dword 800bh + .dword 9fe1h + .dword 9fe2h + .dword 9fe3h + .dword 9fe4h + .dword 9fe5h + .dword 9fe6h + .dword 9fe7h + .dword 9fe8h + .dword 9fe9h + .dword 9feah + .dword 9febh + .dword 9fech + .dword 9fedh + .dword 9feeh + .dword 9fefh + .dword 9ff0h + .dword 9ff1h + .dword 9ff2h + .dword 9ff3h + .dword 9ff4h + .dword 9ff5h + .dword 9ff6h + .dword 9ff7h + .dword 9ff8h + .dword 9ff9h + .dword 9ffah + .dword 9ffbh + .dword 9ffch + .dword 9ffdh + .dword 9ffeh + .dword 9fffh + .dword 0a000h + .dword 0a001h + .dword 0a002h + .dword 0a003h + .dword 0a004h + .dword 0a005h + .dword 0a006h + .dword 0a007h + .dword 0a008h + .dword 0a009h + .dword 0a00ah + .dword 0a00bh + .dword 0a00ch + .dword 0a00dh + .dword 0a00eh + .dword 0a00fh + .dword 0afe1h + .dword 0afe2h + .dword 0afe3h + .dword 0afe4h + .dword 0afe5h + .dword 0afe6h + .dword 0afe7h + .dword 0afe8h + .dword 0afe9h + .dword 0afeah + .dword 0afebh + .dword 0afech + .dword 0afedh + .dword 0afeeh + .dword 0afefh + .dword 0aff0h + .dword 0aff1h + .dword 0aff2h + .dword 0aff3h + .dword 0aff4h + .dword 0aff5h + .dword 0aff6h + .dword 0aff7h + .dword 0aff8h + .dword 0aff9h + .dword 0affah + .dword 0affbh + .dword 0affch + .dword 0affdh + .dword 0affeh + .dword 0afffh + .dword 0b000h + .dword 0b001h + .dword 0b002h + .dword 0b003h + .dword 0b004h + .dword 0b005h + .dword 0b006h + .dword 0b007h + .dword 0b008h + .dword 0b009h + .dword 0b00ah + .dword 0b00bh + .dword 0b00ch + .dword 0b00dh + .dword 0b00eh + .dword 0b00fh + .dword 0ffe1h + .dword 0ffe2h + .dword 0ffe3h + .dword 0ffe4h + .dword 0ffe5h + .dword 0ffe6h + .dword 0ffe7h + .dword 0ffe8h + .dword 0ffe9h + .dword 0ffeah + .dword 0ffebh + .dword 0ffech + .dword 0ffedh + .dword 0ffeeh + .dword 0ffefh + .dword 0fff0h + .dword 0fff1h + .dword 0fff2h + .dword 0fff3h + .dword 0fff4h + .dword 0fff5h + .dword 0fff6h + .dword 0fff7h + .dword 0fff8h + .dword 0fff9h + .dword 0fffah + .dword 0fffbh + .dword 0fffch + .dword 0fffdh + .dword 0fffeh + .dword 0ffffh + .dword 10000h + .dword 10001h + .dword 10002h + .dword 10003h + .dword 10004h + .dword 10005h + .dword 10006h + .dword 10007h + .dword 10008h + .dword 10009h + .dword 1000ah + .dword 1000bh + .dword 1000ch + .dword 1000dh + .dword 1000eh + .dword 1000fh + .dword 7ffffff0h + .dword 7ffffff1h + .dword 7ffffff2h + .dword 7ffffff3h + .dword 7ffffff4h + .dword 7ffffff5h + .dword 7ffffff6h + .dword 7ffffff7h + .dword 7ffffff8h + .dword 7ffffff9h + .dword 7ffffffah + .dword 7ffffffbh + .dword 7ffffffch + .dword 7ffffffdh + .dword 7ffffffeh + .dword 7fffffffh + .dword 80000000h + .dword 80000001h + .dword 80000002h + .dword 80000003h + .dword 80000004h + .dword 80000005h + .dword 80000006h + .dword 80000007h + .dword 80000008h + .dword 80000009h + .dword 8000000ah + .dword 8000000bh + .dword 8000000ch + .dword 8000000dh + .dword 8000000eh + .dword 8000000fh + .dword 9ffffff0h + .dword 9ffffff1h + .dword 9ffffff2h + .dword 9ffffff3h + .dword 9ffffff4h + .dword 9ffffff5h + .dword 9ffffff6h + .dword 9ffffff7h + .dword 9ffffff8h + .dword 9ffffff9h + .dword 9ffffffah + .dword 9ffffffbh + .dword 9ffffffch + .dword 9ffffffdh + .dword 9ffffffeh + .dword 9fffffffh + .dword 0a0000000h + .dword 0a0000001h + .dword 0a0000002h + .dword 0a0000003h + .dword 0a0000004h + .dword 0a0000005h + .dword 0a0000006h + .dword 0a0000007h + .dword 0a0000008h + .dword 0a0000009h + .dword 0a000000ah + .dword 0a000000bh + .dword 0a000000ch + .dword 0a000000dh + .dword 0a000000eh + .dword 0a000000fh + .dword 0fffffff0h + .dword 0fffffff1h + .dword 0fffffff2h + .dword 0fffffff3h + .dword 0fffffff4h + .dword 0fffffff5h + .dword 0fffffff6h + .dword 0fffffff7h + .dword 0fffffff8h + .dword 0fffffff9h + .dword 0fffffffah + .dword 0fffffffbh + .dword 0fffffffch + .dword 0fffffffdh + .dword 0fffffffeh + .dword 0ffffffffh - ; alternative hex values, uppercase - .dword 0h - .dword 1h - .dword 2h - .dword 3h - .dword 4h - .dword 5h - .dword 6h - .dword 7h - .dword 8h - .dword 9h - .dword 0Ah - .dword 0Bh - .dword 0Ch - .dword 0Dh - .dword 0Eh - .dword 0Fh - .dword 10h - .dword 11h - .dword 12h - .dword 13h - .dword 70h - .dword 71h - .dword 72h - .dword 73h - .dword 74h - .dword 75h - .dword 76h - .dword 77h - .dword 78h - .dword 79h - .dword 7Ah - .dword 7Bh - .dword 7Ch - .dword 7Dh - .dword 7Eh - .dword 7Fh - .dword 80h - .dword 81h - .dword 82h - .dword 83h - .dword 84h - .dword 85h - .dword 86h - .dword 0F0h - .dword 0F1h - .dword 0F2h - .dword 0F3h - .dword 0F4h - .dword 0F5h - .dword 0F6h - .dword 0F7h - .dword 0F8h - .dword 0F9h - .dword 0FAh - .dword 0FBh - .dword 0FCh - .dword 0FDh - .dword 0FEh - .dword 0FFh - .dword 100h - .dword 101h - .dword 102h - .dword 103h - .dword 0FD2h - .dword 0FD3h - .dword 0FD4h - .dword 0FD5h - .dword 0FD6h - .dword 0FD7h - .dword 0FD8h - .dword 0FD9h - .dword 0FDAh - .dword 0FDBh - .dword 0FDCh - .dword 0FDDh - .dword 0FDEh - .dword 0FDFh - .dword 0FE0h - .dword 0FE1h - .dword 0FE2h - .dword 0FE3h - .dword 0FE4h - .dword 0FE5h - .dword 0FE6h - .dword 0FE7h - .dword 0FE8h - .dword 0FE9h - .dword 0FEAh - .dword 0FEBh - .dword 0FECh - .dword 0FEDh - .dword 0FEEh - .dword 0FEFh - .dword 0FF0h - .dword 0FF1h - .dword 0FF2h - .dword 0FF3h - .dword 0FF4h - .dword 0FF5h - .dword 0FF6h - .dword 0FF7h - .dword 0FF8h - .dword 0FF9h - .dword 0FFAh - .dword 0FFBh - .dword 0FFCh - .dword 0FFDh - .dword 0FFEh - .dword 0FFFh - .dword 1000h - .dword 1001h - .dword 1002h - .dword 1003h - .dword 1004h - .dword 1005h - .dword 1006h - .dword 1007h - .dword 1008h - .dword 7FF0h - .dword 7FF1h - .dword 7FF2h - .dword 7FF3h - .dword 7FF4h - .dword 7FF5h - .dword 7FF6h - .dword 7FF7h - .dword 7FF8h - .dword 7FF9h - .dword 7FFAh - .dword 7FFBh - .dword 7FFCh - .dword 7FFDh - .dword 7FFEh - .dword 7FFFh - .dword 8000h - .dword 8001h - .dword 8002h - .dword 8003h - .dword 8004h - .dword 8005h - .dword 8006h - .dword 8007h - .dword 8008h - .dword 8009h - .dword 800Ah - .dword 800Bh - .dword 9FE1h - .dword 9FE2h - .dword 9FE3h - .dword 9FE4h - .dword 9FE5h - .dword 9FE6h - .dword 9FE7h - .dword 9FE8h - .dword 9FE9h - .dword 9FEAh - .dword 9FEBh - .dword 9FECh - .dword 9FEDh - .dword 9FEEh - .dword 9FEFh - .dword 9FF0h - .dword 9FF1h - .dword 9FF2h - .dword 9FF3h - .dword 9FF4h - .dword 9FF5h - .dword 9FF6h - .dword 9FF7h - .dword 9FF8h - .dword 9FF9h - .dword 9FFAh - .dword 9FFBh - .dword 9FFCh - .dword 9FFDh - .dword 9FFEh - .dword 9FFFh - .dword 0A000h - .dword 0A001h - .dword 0A002h - .dword 0A003h - .dword 0A004h - .dword 0A005h - .dword 0A006h - .dword 0A007h - .dword 0A008h - .dword 0A009h - .dword 0A00Ah - .dword 0A00Bh - .dword 0A00Ch - .dword 0A00Dh - .dword 0A00Eh - .dword 0A00Fh - .dword 0AFE1h - .dword 0AFE2h - .dword 0AFE3h - .dword 0AFE4h - .dword 0AFE5h - .dword 0AFE6h - .dword 0AFE7h - .dword 0AFE8h - .dword 0AFE9h - .dword 0AFEAh - .dword 0AFEBh - .dword 0AFECh - .dword 0AFEDh - .dword 0AFEEh - .dword 0AFEFh - .dword 0AFF0h - .dword 0AFF1h - .dword 0AFF2h - .dword 0AFF3h - .dword 0AFF4h - .dword 0AFF5h - .dword 0AFF6h - .dword 0AFF7h - .dword 0AFF8h - .dword 0AFF9h - .dword 0AFFAh - .dword 0AFFBh - .dword 0AFFCh - .dword 0AFFDh - .dword 0AFFEh - .dword 0AFFFh - .dword 0B000h - .dword 0B001h - .dword 0B002h - .dword 0B003h - .dword 0B004h - .dword 0B005h - .dword 0B006h - .dword 0B007h - .dword 0B008h - .dword 0B009h - .dword 0B00Ah - .dword 0B00Bh - .dword 0B00Ch - .dword 0B00Dh - .dword 0B00Eh - .dword 0B00Fh - .dword 0FFE1h - .dword 0FFE2h - .dword 0FFE3h - .dword 0FFE4h - .dword 0FFE5h - .dword 0FFE6h - .dword 0FFE7h - .dword 0FFE8h - .dword 0FFE9h - .dword 0FFEAh - .dword 0FFEBh - .dword 0FFECh - .dword 0FFEDh - .dword 0FFEEh - .dword 0FFEFh - .dword 0FFF0h - .dword 0FFF1h - .dword 0FFF2h - .dword 0FFF3h - .dword 0FFF4h - .dword 0FFF5h - .dword 0FFF6h - .dword 0FFF7h - .dword 0FFF8h - .dword 0FFF9h - .dword 0FFFAh - .dword 0FFFBh - .dword 0FFFCh - .dword 0FFFDh - .dword 0FFFEh - .dword 0FFFFh - .dword 10000h - .dword 10001h - .dword 10002h - .dword 10003h - .dword 10004h - .dword 10005h - .dword 10006h - .dword 10007h - .dword 10008h - .dword 10009h - .dword 1000Ah - .dword 1000Bh - .dword 1000Ch - .dword 1000Dh - .dword 1000Eh - .dword 1000Fh - .dword 7FFFFFF0h - .dword 7FFFFFF1h - .dword 7FFFFFF2h - .dword 7FFFFFF3h - .dword 7FFFFFF4h - .dword 7FFFFFF5h - .dword 7FFFFFF6h - .dword 7FFFFFF7h - .dword 7FFFFFF8h - .dword 7FFFFFF9h - .dword 7FFFFFFAh - .dword 7FFFFFFBh - .dword 7FFFFFFCh - .dword 7FFFFFFDh - .dword 7FFFFFFEh - .dword 7FFFFFFFh - .dword 80000000h - .dword 80000001h - .dword 80000002h - .dword 80000003h - .dword 80000004h - .dword 80000005h - .dword 80000006h - .dword 80000007h - .dword 80000008h - .dword 80000009h - .dword 8000000Ah - .dword 8000000Bh - .dword 8000000Ch - .dword 8000000Dh - .dword 8000000Eh - .dword 8000000Fh - .dword 9FFFFFF0h - .dword 9FFFFFF1h - .dword 9FFFFFF2h - .dword 9FFFFFF3h - .dword 9FFFFFF4h - .dword 9FFFFFF5h - .dword 9FFFFFF6h - .dword 9FFFFFF7h - .dword 9FFFFFF8h - .dword 9FFFFFF9h - .dword 9FFFFFFAh - .dword 9FFFFFFBh - .dword 9FFFFFFCh - .dword 9FFFFFFDh - .dword 9FFFFFFEh - .dword 9FFFFFFFh - .dword 0A0000000h - .dword 0A0000001h - .dword 0A0000002h - .dword 0A0000003h - .dword 0A0000004h - .dword 0A0000005h - .dword 0A0000006h - .dword 0A0000007h - .dword 0A0000008h - .dword 0A0000009h - .dword 0A000000Ah - .dword 0A000000Bh - .dword 0A000000Ch - .dword 0A000000Dh - .dword 0A000000Eh - .dword 0A000000Fh - .dword 0FFFFFFF0h - .dword 0FFFFFFF1h - .dword 0FFFFFFF2h - .dword 0FFFFFFF3h - .dword 0FFFFFFF4h - .dword 0FFFFFFF5h - .dword 0FFFFFFF6h - .dword 0FFFFFFF7h - .dword 0FFFFFFF8h - .dword 0FFFFFFF9h - .dword 0FFFFFFFAh - .dword 0FFFFFFFBh - .dword 0FFFFFFFCh - .dword 0FFFFFFFDh - .dword 0FFFFFFFEh - .dword 0FFFFFFFFh + ; alternative hex values, uppercase + .dword 0h + .dword 1h + .dword 2h + .dword 3h + .dword 4h + .dword 5h + .dword 6h + .dword 7h + .dword 8h + .dword 9h + .dword 0Ah + .dword 0Bh + .dword 0Ch + .dword 0Dh + .dword 0Eh + .dword 0Fh + .dword 10h + .dword 11h + .dword 12h + .dword 13h + .dword 70h + .dword 71h + .dword 72h + .dword 73h + .dword 74h + .dword 75h + .dword 76h + .dword 77h + .dword 78h + .dword 79h + .dword 7Ah + .dword 7Bh + .dword 7Ch + .dword 7Dh + .dword 7Eh + .dword 7Fh + .dword 80h + .dword 81h + .dword 82h + .dword 83h + .dword 84h + .dword 85h + .dword 86h + .dword 0F0h + .dword 0F1h + .dword 0F2h + .dword 0F3h + .dword 0F4h + .dword 0F5h + .dword 0F6h + .dword 0F7h + .dword 0F8h + .dword 0F9h + .dword 0FAh + .dword 0FBh + .dword 0FCh + .dword 0FDh + .dword 0FEh + .dword 0FFh + .dword 100h + .dword 101h + .dword 102h + .dword 103h + .dword 0FD2h + .dword 0FD3h + .dword 0FD4h + .dword 0FD5h + .dword 0FD6h + .dword 0FD7h + .dword 0FD8h + .dword 0FD9h + .dword 0FDAh + .dword 0FDBh + .dword 0FDCh + .dword 0FDDh + .dword 0FDEh + .dword 0FDFh + .dword 0FE0h + .dword 0FE1h + .dword 0FE2h + .dword 0FE3h + .dword 0FE4h + .dword 0FE5h + .dword 0FE6h + .dword 0FE7h + .dword 0FE8h + .dword 0FE9h + .dword 0FEAh + .dword 0FEBh + .dword 0FECh + .dword 0FEDh + .dword 0FEEh + .dword 0FEFh + .dword 0FF0h + .dword 0FF1h + .dword 0FF2h + .dword 0FF3h + .dword 0FF4h + .dword 0FF5h + .dword 0FF6h + .dword 0FF7h + .dword 0FF8h + .dword 0FF9h + .dword 0FFAh + .dword 0FFBh + .dword 0FFCh + .dword 0FFDh + .dword 0FFEh + .dword 0FFFh + .dword 1000h + .dword 1001h + .dword 1002h + .dword 1003h + .dword 1004h + .dword 1005h + .dword 1006h + .dword 1007h + .dword 1008h + .dword 7FF0h + .dword 7FF1h + .dword 7FF2h + .dword 7FF3h + .dword 7FF4h + .dword 7FF5h + .dword 7FF6h + .dword 7FF7h + .dword 7FF8h + .dword 7FF9h + .dword 7FFAh + .dword 7FFBh + .dword 7FFCh + .dword 7FFDh + .dword 7FFEh + .dword 7FFFh + .dword 8000h + .dword 8001h + .dword 8002h + .dword 8003h + .dword 8004h + .dword 8005h + .dword 8006h + .dword 8007h + .dword 8008h + .dword 8009h + .dword 800Ah + .dword 800Bh + .dword 9FE1h + .dword 9FE2h + .dword 9FE3h + .dword 9FE4h + .dword 9FE5h + .dword 9FE6h + .dword 9FE7h + .dword 9FE8h + .dword 9FE9h + .dword 9FEAh + .dword 9FEBh + .dword 9FECh + .dword 9FEDh + .dword 9FEEh + .dword 9FEFh + .dword 9FF0h + .dword 9FF1h + .dword 9FF2h + .dword 9FF3h + .dword 9FF4h + .dword 9FF5h + .dword 9FF6h + .dword 9FF7h + .dword 9FF8h + .dword 9FF9h + .dword 9FFAh + .dword 9FFBh + .dword 9FFCh + .dword 9FFDh + .dword 9FFEh + .dword 9FFFh + .dword 0A000h + .dword 0A001h + .dword 0A002h + .dword 0A003h + .dword 0A004h + .dword 0A005h + .dword 0A006h + .dword 0A007h + .dword 0A008h + .dword 0A009h + .dword 0A00Ah + .dword 0A00Bh + .dword 0A00Ch + .dword 0A00Dh + .dword 0A00Eh + .dword 0A00Fh + .dword 0AFE1h + .dword 0AFE2h + .dword 0AFE3h + .dword 0AFE4h + .dword 0AFE5h + .dword 0AFE6h + .dword 0AFE7h + .dword 0AFE8h + .dword 0AFE9h + .dword 0AFEAh + .dword 0AFEBh + .dword 0AFECh + .dword 0AFEDh + .dword 0AFEEh + .dword 0AFEFh + .dword 0AFF0h + .dword 0AFF1h + .dword 0AFF2h + .dword 0AFF3h + .dword 0AFF4h + .dword 0AFF5h + .dword 0AFF6h + .dword 0AFF7h + .dword 0AFF8h + .dword 0AFF9h + .dword 0AFFAh + .dword 0AFFBh + .dword 0AFFCh + .dword 0AFFDh + .dword 0AFFEh + .dword 0AFFFh + .dword 0B000h + .dword 0B001h + .dword 0B002h + .dword 0B003h + .dword 0B004h + .dword 0B005h + .dword 0B006h + .dword 0B007h + .dword 0B008h + .dword 0B009h + .dword 0B00Ah + .dword 0B00Bh + .dword 0B00Ch + .dword 0B00Dh + .dword 0B00Eh + .dword 0B00Fh + .dword 0FFE1h + .dword 0FFE2h + .dword 0FFE3h + .dword 0FFE4h + .dword 0FFE5h + .dword 0FFE6h + .dword 0FFE7h + .dword 0FFE8h + .dword 0FFE9h + .dword 0FFEAh + .dword 0FFEBh + .dword 0FFECh + .dword 0FFEDh + .dword 0FFEEh + .dword 0FFEFh + .dword 0FFF0h + .dword 0FFF1h + .dword 0FFF2h + .dword 0FFF3h + .dword 0FFF4h + .dword 0FFF5h + .dword 0FFF6h + .dword 0FFF7h + .dword 0FFF8h + .dword 0FFF9h + .dword 0FFFAh + .dword 0FFFBh + .dword 0FFFCh + .dword 0FFFDh + .dword 0FFFEh + .dword 0FFFFh + .dword 10000h + .dword 10001h + .dword 10002h + .dword 10003h + .dword 10004h + .dword 10005h + .dword 10006h + .dword 10007h + .dword 10008h + .dword 10009h + .dword 1000Ah + .dword 1000Bh + .dword 1000Ch + .dword 1000Dh + .dword 1000Eh + .dword 1000Fh + .dword 7FFFFFF0h + .dword 7FFFFFF1h + .dword 7FFFFFF2h + .dword 7FFFFFF3h + .dword 7FFFFFF4h + .dword 7FFFFFF5h + .dword 7FFFFFF6h + .dword 7FFFFFF7h + .dword 7FFFFFF8h + .dword 7FFFFFF9h + .dword 7FFFFFFAh + .dword 7FFFFFFBh + .dword 7FFFFFFCh + .dword 7FFFFFFDh + .dword 7FFFFFFEh + .dword 7FFFFFFFh + .dword 80000000h + .dword 80000001h + .dword 80000002h + .dword 80000003h + .dword 80000004h + .dword 80000005h + .dword 80000006h + .dword 80000007h + .dword 80000008h + .dword 80000009h + .dword 8000000Ah + .dword 8000000Bh + .dword 8000000Ch + .dword 8000000Dh + .dword 8000000Eh + .dword 8000000Fh + .dword 9FFFFFF0h + .dword 9FFFFFF1h + .dword 9FFFFFF2h + .dword 9FFFFFF3h + .dword 9FFFFFF4h + .dword 9FFFFFF5h + .dword 9FFFFFF6h + .dword 9FFFFFF7h + .dword 9FFFFFF8h + .dword 9FFFFFF9h + .dword 9FFFFFFAh + .dword 9FFFFFFBh + .dword 9FFFFFFCh + .dword 9FFFFFFDh + .dword 9FFFFFFEh + .dword 9FFFFFFFh + .dword 0A0000000h + .dword 0A0000001h + .dword 0A0000002h + .dword 0A0000003h + .dword 0A0000004h + .dword 0A0000005h + .dword 0A0000006h + .dword 0A0000007h + .dword 0A0000008h + .dword 0A0000009h + .dword 0A000000Ah + .dword 0A000000Bh + .dword 0A000000Ch + .dword 0A000000Dh + .dword 0A000000Eh + .dword 0A000000Fh + .dword 0FFFFFFF0h + .dword 0FFFFFFF1h + .dword 0FFFFFFF2h + .dword 0FFFFFFF3h + .dword 0FFFFFFF4h + .dword 0FFFFFFF5h + .dword 0FFFFFFF6h + .dword 0FFFFFFF7h + .dword 0FFFFFFF8h + .dword 0FFFFFFF9h + .dword 0FFFFFFFAh + .dword 0FFFFFFFBh + .dword 0FFFFFFFCh + .dword 0FFFFFFFDh + .dword 0FFFFFFFEh + .dword 0FFFFFFFFh - ; alternative 8-digit hex values - .dword 00000000h - .dword 00000001h - .dword 00000002h - .dword 00000003h - .dword 00000004h - .dword 00000005h - .dword 00000006h - .dword 00000007h - .dword 00000008h - .dword 00000009h - .dword 0000000ah - .dword 0000000bh - .dword 0000000ch - .dword 0000000dh - .dword 0000000eh - .dword 0000000fh - .dword 00000010h - .dword 00000011h - .dword 00000012h - .dword 00000013h - .dword 00000070h - .dword 00000071h - .dword 00000072h - .dword 00000073h - .dword 00000074h - .dword 00000075h - .dword 00000076h - .dword 00000077h - .dword 00000078h - .dword 00000079h - .dword 0000007ah - .dword 0000007bh - .dword 0000007ch - .dword 0000007dh - .dword 0000007eh - .dword 0000007fh - .dword 00000080h - .dword 00000081h - .dword 00000082h - .dword 00000083h - .dword 00000084h - .dword 00000085h - .dword 00000086h - .dword 000000f0h - .dword 000000f1h - .dword 000000f2h - .dword 000000f3h - .dword 000000f4h - .dword 000000f5h - .dword 000000f6h - .dword 000000f7h - .dword 000000f8h - .dword 000000f9h - .dword 000000fah - .dword 000000fbh - .dword 000000fch - .dword 000000fdh - .dword 000000feh - .dword 000000ffh - .dword 00000100h - .dword 00000101h - .dword 00000102h - .dword 00000103h - .dword 00000fd2h - .dword 00000fd3h - .dword 00000fd4h - .dword 00000fd5h - .dword 00000fd6h - .dword 00000fd7h - .dword 00000fd8h - .dword 00000fd9h - .dword 00000fdah - .dword 00000fdbh - .dword 00000fdch - .dword 00000fddh - .dword 00000fdeh - .dword 00000fdfh - .dword 00000fe0h - .dword 00000fe1h - .dword 00000fe2h - .dword 00000fe3h - .dword 00000fe4h - .dword 00000fe5h - .dword 00000fe6h - .dword 00000fe7h - .dword 00000fe8h - .dword 00000fe9h - .dword 00000feah - .dword 00000febh - .dword 00000fech - .dword 00000fedh - .dword 00000feeh - .dword 00000fefh - .dword 00000ff0h - .dword 00000ff1h - .dword 00000ff2h - .dword 00000ff3h - .dword 00000ff4h - .dword 00000ff5h - .dword 00000ff6h - .dword 00000ff7h - .dword 00000ff8h - .dword 00000ff9h - .dword 00000ffah - .dword 00000ffbh - .dword 00000ffch - .dword 00000ffdh - .dword 00000ffeh - .dword 00000fffh - .dword 00001000h - .dword 00001001h - .dword 00001002h - .dword 00001003h - .dword 00001004h - .dword 00001005h - .dword 00001006h - .dword 00001007h - .dword 00001008h - .dword 00007ff0h - .dword 00007ff1h - .dword 00007ff2h - .dword 00007ff3h - .dword 00007ff4h - .dword 00007ff5h - .dword 00007ff6h - .dword 00007ff7h - .dword 00007ff8h - .dword 00007ff9h - .dword 00007ffah - .dword 00007ffbh - .dword 00007ffch - .dword 00007ffdh - .dword 00007ffeh - .dword 00007fffh - .dword 00008000h - .dword 00008001h - .dword 00008002h - .dword 00008003h - .dword 00008004h - .dword 00008005h - .dword 00008006h - .dword 00008007h - .dword 00008008h - .dword 00008009h - .dword 0000800ah - .dword 0000800bh - .dword 00009fe1h - .dword 00009fe2h - .dword 00009fe3h - .dword 00009fe4h - .dword 00009fe5h - .dword 00009fe6h - .dword 00009fe7h - .dword 00009fe8h - .dword 00009fe9h - .dword 00009feah - .dword 00009febh - .dword 00009fech - .dword 00009fedh - .dword 00009feeh - .dword 00009fefh - .dword 00009ff0h - .dword 00009ff1h - .dword 00009ff2h - .dword 00009ff3h - .dword 00009ff4h - .dword 00009ff5h - .dword 00009ff6h - .dword 00009ff7h - .dword 00009ff8h - .dword 00009ff9h - .dword 00009ffah - .dword 00009ffbh - .dword 00009ffch - .dword 00009ffdh - .dword 00009ffeh - .dword 00009fffh - .dword 0000a000h - .dword 0000a001h - .dword 0000a002h - .dword 0000a003h - .dword 0000a004h - .dword 0000a005h - .dword 0000a006h - .dword 0000a007h - .dword 0000a008h - .dword 0000a009h - .dword 0000a00ah - .dword 0000a00bh - .dword 0000a00ch - .dword 0000a00dh - .dword 0000a00eh - .dword 0000a00fh - .dword 0000afe1h - .dword 0000afe2h - .dword 0000afe3h - .dword 0000afe4h - .dword 0000afe5h - .dword 0000afe6h - .dword 0000afe7h - .dword 0000afe8h - .dword 0000afe9h - .dword 0000afeah - .dword 0000afebh - .dword 0000afech - .dword 0000afedh - .dword 0000afeeh - .dword 0000afefh - .dword 0000aff0h - .dword 0000aff1h - .dword 0000aff2h - .dword 0000aff3h - .dword 0000aff4h - .dword 0000aff5h - .dword 0000aff6h - .dword 0000aff7h - .dword 0000aff8h - .dword 0000aff9h - .dword 0000affah - .dword 0000affbh - .dword 0000affch - .dword 0000affdh - .dword 0000affeh - .dword 0000afffh - .dword 0000b000h - .dword 0000b001h - .dword 0000b002h - .dword 0000b003h - .dword 0000b004h - .dword 0000b005h - .dword 0000b006h - .dword 0000b007h - .dword 0000b008h - .dword 0000b009h - .dword 0000b00ah - .dword 0000b00bh - .dword 0000b00ch - .dword 0000b00dh - .dword 0000b00eh - .dword 0000b00fh - .dword 0000ffe1h - .dword 0000ffe2h - .dword 0000ffe3h - .dword 0000ffe4h - .dword 0000ffe5h - .dword 0000ffe6h - .dword 0000ffe7h - .dword 0000ffe8h - .dword 0000ffe9h - .dword 0000ffeah - .dword 0000ffebh - .dword 0000ffech - .dword 0000ffedh - .dword 0000ffeeh - .dword 0000ffefh - .dword 0000fff0h - .dword 0000fff1h - .dword 0000fff2h - .dword 0000fff3h - .dword 0000fff4h - .dword 0000fff5h - .dword 0000fff6h - .dword 0000fff7h - .dword 0000fff8h - .dword 0000fff9h - .dword 0000fffah - .dword 0000fffbh - .dword 0000fffch - .dword 0000fffdh - .dword 0000fffeh - .dword 0000ffffh - .dword 00010000h - .dword 00010001h - .dword 00010002h - .dword 00010003h - .dword 00010004h - .dword 00010005h - .dword 00010006h - .dword 00010007h - .dword 00010008h - .dword 00010009h - .dword 0001000ah - .dword 0001000bh - .dword 0001000ch - .dword 0001000dh - .dword 0001000eh - .dword 0001000fh - .dword 7ffffff0h - .dword 7ffffff1h - .dword 7ffffff2h - .dword 7ffffff3h - .dword 7ffffff4h - .dword 7ffffff5h - .dword 7ffffff6h - .dword 7ffffff7h - .dword 7ffffff8h - .dword 7ffffff9h - .dword 7ffffffah - .dword 7ffffffbh - .dword 7ffffffch - .dword 7ffffffdh - .dword 7ffffffeh - .dword 7fffffffh - .dword 80000000h - .dword 80000001h - .dword 80000002h - .dword 80000003h - .dword 80000004h - .dword 80000005h - .dword 80000006h - .dword 80000007h - .dword 80000008h - .dword 80000009h - .dword 8000000ah - .dword 8000000bh - .dword 8000000ch - .dword 8000000dh - .dword 8000000eh - .dword 8000000fh - .dword 9ffffff0h - .dword 9ffffff1h - .dword 9ffffff2h - .dword 9ffffff3h - .dword 9ffffff4h - .dword 9ffffff5h - .dword 9ffffff6h - .dword 9ffffff7h - .dword 9ffffff8h - .dword 9ffffff9h - .dword 9ffffffah - .dword 9ffffffbh - .dword 9ffffffch - .dword 9ffffffdh - .dword 9ffffffeh - .dword 9fffffffh - .dword 0a0000000h - .dword 0a0000001h - .dword 0a0000002h - .dword 0a0000003h - .dword 0a0000004h - .dword 0a0000005h - .dword 0a0000006h - .dword 0a0000007h - .dword 0a0000008h - .dword 0a0000009h - .dword 0a000000ah - .dword 0a000000bh - .dword 0a000000ch - .dword 0a000000dh - .dword 0a000000eh - .dword 0a000000fh - .dword 0fffffff0h - .dword 0fffffff1h - .dword 0fffffff2h - .dword 0fffffff3h - .dword 0fffffff4h - .dword 0fffffff5h - .dword 0fffffff6h - .dword 0fffffff7h - .dword 0fffffff8h - .dword 0fffffff9h - .dword 0fffffffah - .dword 0fffffffbh - .dword 0fffffffch - .dword 0fffffffdh - .dword 0fffffffeh - .dword 0ffffffffh + ; alternative 8-digit hex values + .dword 00000000h + .dword 00000001h + .dword 00000002h + .dword 00000003h + .dword 00000004h + .dword 00000005h + .dword 00000006h + .dword 00000007h + .dword 00000008h + .dword 00000009h + .dword 0000000ah + .dword 0000000bh + .dword 0000000ch + .dword 0000000dh + .dword 0000000eh + .dword 0000000fh + .dword 00000010h + .dword 00000011h + .dword 00000012h + .dword 00000013h + .dword 00000070h + .dword 00000071h + .dword 00000072h + .dword 00000073h + .dword 00000074h + .dword 00000075h + .dword 00000076h + .dword 00000077h + .dword 00000078h + .dword 00000079h + .dword 0000007ah + .dword 0000007bh + .dword 0000007ch + .dword 0000007dh + .dword 0000007eh + .dword 0000007fh + .dword 00000080h + .dword 00000081h + .dword 00000082h + .dword 00000083h + .dword 00000084h + .dword 00000085h + .dword 00000086h + .dword 000000f0h + .dword 000000f1h + .dword 000000f2h + .dword 000000f3h + .dword 000000f4h + .dword 000000f5h + .dword 000000f6h + .dword 000000f7h + .dword 000000f8h + .dword 000000f9h + .dword 000000fah + .dword 000000fbh + .dword 000000fch + .dword 000000fdh + .dword 000000feh + .dword 000000ffh + .dword 00000100h + .dword 00000101h + .dword 00000102h + .dword 00000103h + .dword 00000fd2h + .dword 00000fd3h + .dword 00000fd4h + .dword 00000fd5h + .dword 00000fd6h + .dword 00000fd7h + .dword 00000fd8h + .dword 00000fd9h + .dword 00000fdah + .dword 00000fdbh + .dword 00000fdch + .dword 00000fddh + .dword 00000fdeh + .dword 00000fdfh + .dword 00000fe0h + .dword 00000fe1h + .dword 00000fe2h + .dword 00000fe3h + .dword 00000fe4h + .dword 00000fe5h + .dword 00000fe6h + .dword 00000fe7h + .dword 00000fe8h + .dword 00000fe9h + .dword 00000feah + .dword 00000febh + .dword 00000fech + .dword 00000fedh + .dword 00000feeh + .dword 00000fefh + .dword 00000ff0h + .dword 00000ff1h + .dword 00000ff2h + .dword 00000ff3h + .dword 00000ff4h + .dword 00000ff5h + .dword 00000ff6h + .dword 00000ff7h + .dword 00000ff8h + .dword 00000ff9h + .dword 00000ffah + .dword 00000ffbh + .dword 00000ffch + .dword 00000ffdh + .dword 00000ffeh + .dword 00000fffh + .dword 00001000h + .dword 00001001h + .dword 00001002h + .dword 00001003h + .dword 00001004h + .dword 00001005h + .dword 00001006h + .dword 00001007h + .dword 00001008h + .dword 00007ff0h + .dword 00007ff1h + .dword 00007ff2h + .dword 00007ff3h + .dword 00007ff4h + .dword 00007ff5h + .dword 00007ff6h + .dword 00007ff7h + .dword 00007ff8h + .dword 00007ff9h + .dword 00007ffah + .dword 00007ffbh + .dword 00007ffch + .dword 00007ffdh + .dword 00007ffeh + .dword 00007fffh + .dword 00008000h + .dword 00008001h + .dword 00008002h + .dword 00008003h + .dword 00008004h + .dword 00008005h + .dword 00008006h + .dword 00008007h + .dword 00008008h + .dword 00008009h + .dword 0000800ah + .dword 0000800bh + .dword 00009fe1h + .dword 00009fe2h + .dword 00009fe3h + .dword 00009fe4h + .dword 00009fe5h + .dword 00009fe6h + .dword 00009fe7h + .dword 00009fe8h + .dword 00009fe9h + .dword 00009feah + .dword 00009febh + .dword 00009fech + .dword 00009fedh + .dword 00009feeh + .dword 00009fefh + .dword 00009ff0h + .dword 00009ff1h + .dword 00009ff2h + .dword 00009ff3h + .dword 00009ff4h + .dword 00009ff5h + .dword 00009ff6h + .dword 00009ff7h + .dword 00009ff8h + .dword 00009ff9h + .dword 00009ffah + .dword 00009ffbh + .dword 00009ffch + .dword 00009ffdh + .dword 00009ffeh + .dword 00009fffh + .dword 0000a000h + .dword 0000a001h + .dword 0000a002h + .dword 0000a003h + .dword 0000a004h + .dword 0000a005h + .dword 0000a006h + .dword 0000a007h + .dword 0000a008h + .dword 0000a009h + .dword 0000a00ah + .dword 0000a00bh + .dword 0000a00ch + .dword 0000a00dh + .dword 0000a00eh + .dword 0000a00fh + .dword 0000afe1h + .dword 0000afe2h + .dword 0000afe3h + .dword 0000afe4h + .dword 0000afe5h + .dword 0000afe6h + .dword 0000afe7h + .dword 0000afe8h + .dword 0000afe9h + .dword 0000afeah + .dword 0000afebh + .dword 0000afech + .dword 0000afedh + .dword 0000afeeh + .dword 0000afefh + .dword 0000aff0h + .dword 0000aff1h + .dword 0000aff2h + .dword 0000aff3h + .dword 0000aff4h + .dword 0000aff5h + .dword 0000aff6h + .dword 0000aff7h + .dword 0000aff8h + .dword 0000aff9h + .dword 0000affah + .dword 0000affbh + .dword 0000affch + .dword 0000affdh + .dword 0000affeh + .dword 0000afffh + .dword 0000b000h + .dword 0000b001h + .dword 0000b002h + .dword 0000b003h + .dword 0000b004h + .dword 0000b005h + .dword 0000b006h + .dword 0000b007h + .dword 0000b008h + .dword 0000b009h + .dword 0000b00ah + .dword 0000b00bh + .dword 0000b00ch + .dword 0000b00dh + .dword 0000b00eh + .dword 0000b00fh + .dword 0000ffe1h + .dword 0000ffe2h + .dword 0000ffe3h + .dword 0000ffe4h + .dword 0000ffe5h + .dword 0000ffe6h + .dword 0000ffe7h + .dword 0000ffe8h + .dword 0000ffe9h + .dword 0000ffeah + .dword 0000ffebh + .dword 0000ffech + .dword 0000ffedh + .dword 0000ffeeh + .dword 0000ffefh + .dword 0000fff0h + .dword 0000fff1h + .dword 0000fff2h + .dword 0000fff3h + .dword 0000fff4h + .dword 0000fff5h + .dword 0000fff6h + .dword 0000fff7h + .dword 0000fff8h + .dword 0000fff9h + .dword 0000fffah + .dword 0000fffbh + .dword 0000fffch + .dword 0000fffdh + .dword 0000fffeh + .dword 0000ffffh + .dword 00010000h + .dword 00010001h + .dword 00010002h + .dword 00010003h + .dword 00010004h + .dword 00010005h + .dword 00010006h + .dword 00010007h + .dword 00010008h + .dword 00010009h + .dword 0001000ah + .dword 0001000bh + .dword 0001000ch + .dword 0001000dh + .dword 0001000eh + .dword 0001000fh + .dword 7ffffff0h + .dword 7ffffff1h + .dword 7ffffff2h + .dword 7ffffff3h + .dword 7ffffff4h + .dword 7ffffff5h + .dword 7ffffff6h + .dword 7ffffff7h + .dword 7ffffff8h + .dword 7ffffff9h + .dword 7ffffffah + .dword 7ffffffbh + .dword 7ffffffch + .dword 7ffffffdh + .dword 7ffffffeh + .dword 7fffffffh + .dword 80000000h + .dword 80000001h + .dword 80000002h + .dword 80000003h + .dword 80000004h + .dword 80000005h + .dword 80000006h + .dword 80000007h + .dword 80000008h + .dword 80000009h + .dword 8000000ah + .dword 8000000bh + .dword 8000000ch + .dword 8000000dh + .dword 8000000eh + .dword 8000000fh + .dword 9ffffff0h + .dword 9ffffff1h + .dword 9ffffff2h + .dword 9ffffff3h + .dword 9ffffff4h + .dword 9ffffff5h + .dword 9ffffff6h + .dword 9ffffff7h + .dword 9ffffff8h + .dword 9ffffff9h + .dword 9ffffffah + .dword 9ffffffbh + .dword 9ffffffch + .dword 9ffffffdh + .dword 9ffffffeh + .dword 9fffffffh + .dword 0a0000000h + .dword 0a0000001h + .dword 0a0000002h + .dword 0a0000003h + .dword 0a0000004h + .dword 0a0000005h + .dword 0a0000006h + .dword 0a0000007h + .dword 0a0000008h + .dword 0a0000009h + .dword 0a000000ah + .dword 0a000000bh + .dword 0a000000ch + .dword 0a000000dh + .dword 0a000000eh + .dword 0a000000fh + .dword 0fffffff0h + .dword 0fffffff1h + .dword 0fffffff2h + .dword 0fffffff3h + .dword 0fffffff4h + .dword 0fffffff5h + .dword 0fffffff6h + .dword 0fffffff7h + .dword 0fffffff8h + .dword 0fffffff9h + .dword 0fffffffah + .dword 0fffffffbh + .dword 0fffffffch + .dword 0fffffffdh + .dword 0fffffffeh + .dword 0ffffffffh - ; alternative 8-digit hex values, uppercase - .dword 00000000h - .dword 00000001h - .dword 00000002h - .dword 00000003h - .dword 00000004h - .dword 00000005h - .dword 00000006h - .dword 00000007h - .dword 00000008h - .dword 00000009h - .dword 0000000Ah - .dword 0000000Bh - .dword 0000000Ch - .dword 0000000Dh - .dword 0000000Eh - .dword 0000000Fh - .dword 00000010h - .dword 00000011h - .dword 00000012h - .dword 00000013h - .dword 00000070h - .dword 00000071h - .dword 00000072h - .dword 00000073h - .dword 00000074h - .dword 00000075h - .dword 00000076h - .dword 00000077h - .dword 00000078h - .dword 00000079h - .dword 0000007Ah - .dword 0000007Bh - .dword 0000007Ch - .dword 0000007Dh - .dword 0000007Eh - .dword 0000007Fh - .dword 00000080h - .dword 00000081h - .dword 00000082h - .dword 00000083h - .dword 00000084h - .dword 00000085h - .dword 00000086h - .dword 000000F0h - .dword 000000F1h - .dword 000000F2h - .dword 000000F3h - .dword 000000F4h - .dword 000000F5h - .dword 000000F6h - .dword 000000F7h - .dword 000000F8h - .dword 000000F9h - .dword 000000FAh - .dword 000000FBh - .dword 000000FCh - .dword 000000FDh - .dword 000000FEh - .dword 000000FFh - .dword 00000100h - .dword 00000101h - .dword 00000102h - .dword 00000103h - .dword 00000FD2h - .dword 00000FD3h - .dword 00000FD4h - .dword 00000FD5h - .dword 00000FD6h - .dword 00000FD7h - .dword 00000FD8h - .dword 00000FD9h - .dword 00000FDAh - .dword 00000FDBh - .dword 00000FDCh - .dword 00000FDDh - .dword 00000FDEh - .dword 00000FDFh - .dword 00000FE0h - .dword 00000FE1h - .dword 00000FE2h - .dword 00000FE3h - .dword 00000FE4h - .dword 00000FE5h - .dword 00000FE6h - .dword 00000FE7h - .dword 00000FE8h - .dword 00000FE9h - .dword 00000FEAh - .dword 00000FEBh - .dword 00000FECh - .dword 00000FEDh - .dword 00000FEEh - .dword 00000FEFh - .dword 00000FF0h - .dword 00000FF1h - .dword 00000FF2h - .dword 00000FF3h - .dword 00000FF4h - .dword 00000FF5h - .dword 00000FF6h - .dword 00000FF7h - .dword 00000FF8h - .dword 00000FF9h - .dword 00000FFAh - .dword 00000FFBh - .dword 00000FFCh - .dword 00000FFDh - .dword 00000FFEh - .dword 00000FFFh - .dword 00001000h - .dword 00001001h - .dword 00001002h - .dword 00001003h - .dword 00001004h - .dword 00001005h - .dword 00001006h - .dword 00001007h - .dword 00001008h - .dword 00007FF0h - .dword 00007FF1h - .dword 00007FF2h - .dword 00007FF3h - .dword 00007FF4h - .dword 00007FF5h - .dword 00007FF6h - .dword 00007FF7h - .dword 00007FF8h - .dword 00007FF9h - .dword 00007FFAh - .dword 00007FFBh - .dword 00007FFCh - .dword 00007FFDh - .dword 00007FFEh - .dword 00007FFFh - .dword 00008000h - .dword 00008001h - .dword 00008002h - .dword 00008003h - .dword 00008004h - .dword 00008005h - .dword 00008006h - .dword 00008007h - .dword 00008008h - .dword 00008009h - .dword 0000800Ah - .dword 0000800Bh - .dword 00009FE1h - .dword 00009FE2h - .dword 00009FE3h - .dword 00009FE4h - .dword 00009FE5h - .dword 00009FE6h - .dword 00009FE7h - .dword 00009FE8h - .dword 00009FE9h - .dword 00009FEAh - .dword 00009FEBh - .dword 00009FECh - .dword 00009FEDh - .dword 00009FEEh - .dword 00009FEFh - .dword 00009FF0h - .dword 00009FF1h - .dword 00009FF2h - .dword 00009FF3h - .dword 00009FF4h - .dword 00009FF5h - .dword 00009FF6h - .dword 00009FF7h - .dword 00009FF8h - .dword 00009FF9h - .dword 00009FFAh - .dword 00009FFBh - .dword 00009FFCh - .dword 00009FFDh - .dword 00009FFEh - .dword 00009FFFh - .dword 0000A000h - .dword 0000A001h - .dword 0000A002h - .dword 0000A003h - .dword 0000A004h - .dword 0000A005h - .dword 0000A006h - .dword 0000A007h - .dword 0000A008h - .dword 0000A009h - .dword 0000A00Ah - .dword 0000A00Bh - .dword 0000A00Ch - .dword 0000A00Dh - .dword 0000A00Eh - .dword 0000A00Fh - .dword 0000AFE1h - .dword 0000AFE2h - .dword 0000AFE3h - .dword 0000AFE4h - .dword 0000AFE5h - .dword 0000AFE6h - .dword 0000AFE7h - .dword 0000AFE8h - .dword 0000AFE9h - .dword 0000AFEAh - .dword 0000AFEBh - .dword 0000AFECh - .dword 0000AFEDh - .dword 0000AFEEh - .dword 0000AFEFh - .dword 0000AFF0h - .dword 0000AFF1h - .dword 0000AFF2h - .dword 0000AFF3h - .dword 0000AFF4h - .dword 0000AFF5h - .dword 0000AFF6h - .dword 0000AFF7h - .dword 0000AFF8h - .dword 0000AFF9h - .dword 0000AFFAh - .dword 0000AFFBh - .dword 0000AFFCh - .dword 0000AFFDh - .dword 0000AFFEh - .dword 0000AFFFh - .dword 0000B000h - .dword 0000B001h - .dword 0000B002h - .dword 0000B003h - .dword 0000B004h - .dword 0000B005h - .dword 0000B006h - .dword 0000B007h - .dword 0000B008h - .dword 0000B009h - .dword 0000B00Ah - .dword 0000B00Bh - .dword 0000B00Ch - .dword 0000B00Dh - .dword 0000B00Eh - .dword 0000B00Fh - .dword 0000FFE1h - .dword 0000FFE2h - .dword 0000FFE3h - .dword 0000FFE4h - .dword 0000FFE5h - .dword 0000FFE6h - .dword 0000FFE7h - .dword 0000FFE8h - .dword 0000FFE9h - .dword 0000FFEAh - .dword 0000FFEBh - .dword 0000FFECh - .dword 0000FFEDh - .dword 0000FFEEh - .dword 0000FFEFh - .dword 0000FFF0h - .dword 0000FFF1h - .dword 0000FFF2h - .dword 0000FFF3h - .dword 0000FFF4h - .dword 0000FFF5h - .dword 0000FFF6h - .dword 0000FFF7h - .dword 0000FFF8h - .dword 0000FFF9h - .dword 0000FFFAh - .dword 0000FFFBh - .dword 0000FFFCh - .dword 0000FFFDh - .dword 0000FFFEh - .dword 0000FFFFh - .dword 00010000h - .dword 00010001h - .dword 00010002h - .dword 00010003h - .dword 00010004h - .dword 00010005h - .dword 00010006h - .dword 00010007h - .dword 00010008h - .dword 00010009h - .dword 0001000Ah - .dword 0001000Bh - .dword 0001000Ch - .dword 0001000Dh - .dword 0001000Eh - .dword 0001000Fh - .dword 7FFFFFF0h - .dword 7FFFFFF1h - .dword 7FFFFFF2h - .dword 7FFFFFF3h - .dword 7FFFFFF4h - .dword 7FFFFFF5h - .dword 7FFFFFF6h - .dword 7FFFFFF7h - .dword 7FFFFFF8h - .dword 7FFFFFF9h - .dword 7FFFFFFAh - .dword 7FFFFFFBh - .dword 7FFFFFFCh - .dword 7FFFFFFDh - .dword 7FFFFFFEh - .dword 7FFFFFFFh - .dword 80000000h - .dword 80000001h - .dword 80000002h - .dword 80000003h - .dword 80000004h - .dword 80000005h - .dword 80000006h - .dword 80000007h - .dword 80000008h - .dword 80000009h - .dword 8000000Ah - .dword 8000000Bh - .dword 8000000Ch - .dword 8000000Dh - .dword 8000000Eh - .dword 8000000Fh - .dword 9FFFFFF0h - .dword 9FFFFFF1h - .dword 9FFFFFF2h - .dword 9FFFFFF3h - .dword 9FFFFFF4h - .dword 9FFFFFF5h - .dword 9FFFFFF6h - .dword 9FFFFFF7h - .dword 9FFFFFF8h - .dword 9FFFFFF9h - .dword 9FFFFFFAh - .dword 9FFFFFFBh - .dword 9FFFFFFCh - .dword 9FFFFFFDh - .dword 9FFFFFFEh - .dword 9FFFFFFFh - .dword 0A0000000h - .dword 0A0000001h - .dword 0A0000002h - .dword 0A0000003h - .dword 0A0000004h - .dword 0A0000005h - .dword 0A0000006h - .dword 0A0000007h - .dword 0A0000008h - .dword 0A0000009h - .dword 0A000000Ah - .dword 0A000000Bh - .dword 0A000000Ch - .dword 0A000000Dh - .dword 0A000000Eh - .dword 0A000000Fh - .dword 0FFFFFFF0h - .dword 0FFFFFFF1h - .dword 0FFFFFFF2h - .dword 0FFFFFFF3h - .dword 0FFFFFFF4h - .dword 0FFFFFFF5h - .dword 0FFFFFFF6h - .dword 0FFFFFFF7h - .dword 0FFFFFFF8h - .dword 0FFFFFFF9h - .dword 0FFFFFFFAh - .dword 0FFFFFFFBh - .dword 0FFFFFFFCh - .dword 0FFFFFFFDh - .dword 0FFFFFFFEh - .dword 0FFFFFFFFh + ; alternative 8-digit hex values, uppercase + .dword 00000000h + .dword 00000001h + .dword 00000002h + .dword 00000003h + .dword 00000004h + .dword 00000005h + .dword 00000006h + .dword 00000007h + .dword 00000008h + .dword 00000009h + .dword 0000000Ah + .dword 0000000Bh + .dword 0000000Ch + .dword 0000000Dh + .dword 0000000Eh + .dword 0000000Fh + .dword 00000010h + .dword 00000011h + .dword 00000012h + .dword 00000013h + .dword 00000070h + .dword 00000071h + .dword 00000072h + .dword 00000073h + .dword 00000074h + .dword 00000075h + .dword 00000076h + .dword 00000077h + .dword 00000078h + .dword 00000079h + .dword 0000007Ah + .dword 0000007Bh + .dword 0000007Ch + .dword 0000007Dh + .dword 0000007Eh + .dword 0000007Fh + .dword 00000080h + .dword 00000081h + .dword 00000082h + .dword 00000083h + .dword 00000084h + .dword 00000085h + .dword 00000086h + .dword 000000F0h + .dword 000000F1h + .dword 000000F2h + .dword 000000F3h + .dword 000000F4h + .dword 000000F5h + .dword 000000F6h + .dword 000000F7h + .dword 000000F8h + .dword 000000F9h + .dword 000000FAh + .dword 000000FBh + .dword 000000FCh + .dword 000000FDh + .dword 000000FEh + .dword 000000FFh + .dword 00000100h + .dword 00000101h + .dword 00000102h + .dword 00000103h + .dword 00000FD2h + .dword 00000FD3h + .dword 00000FD4h + .dword 00000FD5h + .dword 00000FD6h + .dword 00000FD7h + .dword 00000FD8h + .dword 00000FD9h + .dword 00000FDAh + .dword 00000FDBh + .dword 00000FDCh + .dword 00000FDDh + .dword 00000FDEh + .dword 00000FDFh + .dword 00000FE0h + .dword 00000FE1h + .dword 00000FE2h + .dword 00000FE3h + .dword 00000FE4h + .dword 00000FE5h + .dword 00000FE6h + .dword 00000FE7h + .dword 00000FE8h + .dword 00000FE9h + .dword 00000FEAh + .dword 00000FEBh + .dword 00000FECh + .dword 00000FEDh + .dword 00000FEEh + .dword 00000FEFh + .dword 00000FF0h + .dword 00000FF1h + .dword 00000FF2h + .dword 00000FF3h + .dword 00000FF4h + .dword 00000FF5h + .dword 00000FF6h + .dword 00000FF7h + .dword 00000FF8h + .dword 00000FF9h + .dword 00000FFAh + .dword 00000FFBh + .dword 00000FFCh + .dword 00000FFDh + .dword 00000FFEh + .dword 00000FFFh + .dword 00001000h + .dword 00001001h + .dword 00001002h + .dword 00001003h + .dword 00001004h + .dword 00001005h + .dword 00001006h + .dword 00001007h + .dword 00001008h + .dword 00007FF0h + .dword 00007FF1h + .dword 00007FF2h + .dword 00007FF3h + .dword 00007FF4h + .dword 00007FF5h + .dword 00007FF6h + .dword 00007FF7h + .dword 00007FF8h + .dword 00007FF9h + .dword 00007FFAh + .dword 00007FFBh + .dword 00007FFCh + .dword 00007FFDh + .dword 00007FFEh + .dword 00007FFFh + .dword 00008000h + .dword 00008001h + .dword 00008002h + .dword 00008003h + .dword 00008004h + .dword 00008005h + .dword 00008006h + .dword 00008007h + .dword 00008008h + .dword 00008009h + .dword 0000800Ah + .dword 0000800Bh + .dword 00009FE1h + .dword 00009FE2h + .dword 00009FE3h + .dword 00009FE4h + .dword 00009FE5h + .dword 00009FE6h + .dword 00009FE7h + .dword 00009FE8h + .dword 00009FE9h + .dword 00009FEAh + .dword 00009FEBh + .dword 00009FECh + .dword 00009FEDh + .dword 00009FEEh + .dword 00009FEFh + .dword 00009FF0h + .dword 00009FF1h + .dword 00009FF2h + .dword 00009FF3h + .dword 00009FF4h + .dword 00009FF5h + .dword 00009FF6h + .dword 00009FF7h + .dword 00009FF8h + .dword 00009FF9h + .dword 00009FFAh + .dword 00009FFBh + .dword 00009FFCh + .dword 00009FFDh + .dword 00009FFEh + .dword 00009FFFh + .dword 0000A000h + .dword 0000A001h + .dword 0000A002h + .dword 0000A003h + .dword 0000A004h + .dword 0000A005h + .dword 0000A006h + .dword 0000A007h + .dword 0000A008h + .dword 0000A009h + .dword 0000A00Ah + .dword 0000A00Bh + .dword 0000A00Ch + .dword 0000A00Dh + .dword 0000A00Eh + .dword 0000A00Fh + .dword 0000AFE1h + .dword 0000AFE2h + .dword 0000AFE3h + .dword 0000AFE4h + .dword 0000AFE5h + .dword 0000AFE6h + .dword 0000AFE7h + .dword 0000AFE8h + .dword 0000AFE9h + .dword 0000AFEAh + .dword 0000AFEBh + .dword 0000AFECh + .dword 0000AFEDh + .dword 0000AFEEh + .dword 0000AFEFh + .dword 0000AFF0h + .dword 0000AFF1h + .dword 0000AFF2h + .dword 0000AFF3h + .dword 0000AFF4h + .dword 0000AFF5h + .dword 0000AFF6h + .dword 0000AFF7h + .dword 0000AFF8h + .dword 0000AFF9h + .dword 0000AFFAh + .dword 0000AFFBh + .dword 0000AFFCh + .dword 0000AFFDh + .dword 0000AFFEh + .dword 0000AFFFh + .dword 0000B000h + .dword 0000B001h + .dword 0000B002h + .dword 0000B003h + .dword 0000B004h + .dword 0000B005h + .dword 0000B006h + .dword 0000B007h + .dword 0000B008h + .dword 0000B009h + .dword 0000B00Ah + .dword 0000B00Bh + .dword 0000B00Ch + .dword 0000B00Dh + .dword 0000B00Eh + .dword 0000B00Fh + .dword 0000FFE1h + .dword 0000FFE2h + .dword 0000FFE3h + .dword 0000FFE4h + .dword 0000FFE5h + .dword 0000FFE6h + .dword 0000FFE7h + .dword 0000FFE8h + .dword 0000FFE9h + .dword 0000FFEAh + .dword 0000FFEBh + .dword 0000FFECh + .dword 0000FFEDh + .dword 0000FFEEh + .dword 0000FFEFh + .dword 0000FFF0h + .dword 0000FFF1h + .dword 0000FFF2h + .dword 0000FFF3h + .dword 0000FFF4h + .dword 0000FFF5h + .dword 0000FFF6h + .dword 0000FFF7h + .dword 0000FFF8h + .dword 0000FFF9h + .dword 0000FFFAh + .dword 0000FFFBh + .dword 0000FFFCh + .dword 0000FFFDh + .dword 0000FFFEh + .dword 0000FFFFh + .dword 00010000h + .dword 00010001h + .dword 00010002h + .dword 00010003h + .dword 00010004h + .dword 00010005h + .dword 00010006h + .dword 00010007h + .dword 00010008h + .dword 00010009h + .dword 0001000Ah + .dword 0001000Bh + .dword 0001000Ch + .dword 0001000Dh + .dword 0001000Eh + .dword 0001000Fh + .dword 7FFFFFF0h + .dword 7FFFFFF1h + .dword 7FFFFFF2h + .dword 7FFFFFF3h + .dword 7FFFFFF4h + .dword 7FFFFFF5h + .dword 7FFFFFF6h + .dword 7FFFFFF7h + .dword 7FFFFFF8h + .dword 7FFFFFF9h + .dword 7FFFFFFAh + .dword 7FFFFFFBh + .dword 7FFFFFFCh + .dword 7FFFFFFDh + .dword 7FFFFFFEh + .dword 7FFFFFFFh + .dword 80000000h + .dword 80000001h + .dword 80000002h + .dword 80000003h + .dword 80000004h + .dword 80000005h + .dword 80000006h + .dword 80000007h + .dword 80000008h + .dword 80000009h + .dword 8000000Ah + .dword 8000000Bh + .dword 8000000Ch + .dword 8000000Dh + .dword 8000000Eh + .dword 8000000Fh + .dword 9FFFFFF0h + .dword 9FFFFFF1h + .dword 9FFFFFF2h + .dword 9FFFFFF3h + .dword 9FFFFFF4h + .dword 9FFFFFF5h + .dword 9FFFFFF6h + .dword 9FFFFFF7h + .dword 9FFFFFF8h + .dword 9FFFFFF9h + .dword 9FFFFFFAh + .dword 9FFFFFFBh + .dword 9FFFFFFCh + .dword 9FFFFFFDh + .dword 9FFFFFFEh + .dword 9FFFFFFFh + .dword 0A0000000h + .dword 0A0000001h + .dword 0A0000002h + .dword 0A0000003h + .dword 0A0000004h + .dword 0A0000005h + .dword 0A0000006h + .dword 0A0000007h + .dword 0A0000008h + .dword 0A0000009h + .dword 0A000000Ah + .dword 0A000000Bh + .dword 0A000000Ch + .dword 0A000000Dh + .dword 0A000000Eh + .dword 0A000000Fh + .dword 0FFFFFFF0h + .dword 0FFFFFFF1h + .dword 0FFFFFFF2h + .dword 0FFFFFFF3h + .dword 0FFFFFFF4h + .dword 0FFFFFFF5h + .dword 0FFFFFFF6h + .dword 0FFFFFFF7h + .dword 0FFFFFFF8h + .dword 0FFFFFFF9h + .dword 0FFFFFFFAh + .dword 0FFFFFFFBh + .dword 0FFFFFFFCh + .dword 0FFFFFFFDh + .dword 0FFFFFFFEh + .dword 0FFFFFFFFh - ; alternative hex values, always leading zero - .dword 00h - .dword 01h - .dword 02h - .dword 03h - .dword 04h - .dword 05h - .dword 06h - .dword 07h - .dword 08h - .dword 09h - .dword 0ah - .dword 0bh - .dword 0ch - .dword 0dh - .dword 0eh - .dword 0fh - .dword 010h - .dword 011h - .dword 012h - .dword 013h - .dword 070h - .dword 071h - .dword 072h - .dword 073h - .dword 074h - .dword 075h - .dword 076h - .dword 077h - .dword 078h - .dword 079h - .dword 07ah - .dword 07bh - .dword 07ch - .dword 07dh - .dword 07eh - .dword 07fh - .dword 080h - .dword 081h - .dword 082h - .dword 083h - .dword 084h - .dword 085h - .dword 086h - .dword 0f0h - .dword 0f1h - .dword 0f2h - .dword 0f3h - .dword 0f4h - .dword 0f5h - .dword 0f6h - .dword 0f7h - .dword 0f8h - .dword 0f9h - .dword 0fah - .dword 0fbh - .dword 0fch - .dword 0fdh - .dword 0feh - .dword 0ffh - .dword 0100h - .dword 0101h - .dword 0102h - .dword 0103h - .dword 0fd2h - .dword 0fd3h - .dword 0fd4h - .dword 0fd5h - .dword 0fd6h - .dword 0fd7h - .dword 0fd8h - .dword 0fd9h - .dword 0fdah - .dword 0fdbh - .dword 0fdch - .dword 0fddh - .dword 0fdeh - .dword 0fdfh - .dword 0fe0h - .dword 0fe1h - .dword 0fe2h - .dword 0fe3h - .dword 0fe4h - .dword 0fe5h - .dword 0fe6h - .dword 0fe7h - .dword 0fe8h - .dword 0fe9h - .dword 0feah - .dword 0febh - .dword 0fech - .dword 0fedh - .dword 0feeh - .dword 0fefh - .dword 0ff0h - .dword 0ff1h - .dword 0ff2h - .dword 0ff3h - .dword 0ff4h - .dword 0ff5h - .dword 0ff6h - .dword 0ff7h - .dword 0ff8h - .dword 0ff9h - .dword 0ffah - .dword 0ffbh - .dword 0ffch - .dword 0ffdh - .dword 0ffeh - .dword 0fffh - .dword 01000h - .dword 01001h - .dword 01002h - .dword 01003h - .dword 01004h - .dword 01005h - .dword 01006h - .dword 01007h - .dword 01008h - .dword 07ff0h - .dword 07ff1h - .dword 07ff2h - .dword 07ff3h - .dword 07ff4h - .dword 07ff5h - .dword 07ff6h - .dword 07ff7h - .dword 07ff8h - .dword 07ff9h - .dword 07ffah - .dword 07ffbh - .dword 07ffch - .dword 07ffdh - .dword 07ffeh - .dword 07fffh - .dword 08000h - .dword 08001h - .dword 08002h - .dword 08003h - .dword 08004h - .dword 08005h - .dword 08006h - .dword 08007h - .dword 08008h - .dword 08009h - .dword 0800ah - .dword 0800bh - .dword 09fe1h - .dword 09fe2h - .dword 09fe3h - .dword 09fe4h - .dword 09fe5h - .dword 09fe6h - .dword 09fe7h - .dword 09fe8h - .dword 09fe9h - .dword 09feah - .dword 09febh - .dword 09fech - .dword 09fedh - .dword 09feeh - .dword 09fefh - .dword 09ff0h - .dword 09ff1h - .dword 09ff2h - .dword 09ff3h - .dword 09ff4h - .dword 09ff5h - .dword 09ff6h - .dword 09ff7h - .dword 09ff8h - .dword 09ff9h - .dword 09ffah - .dword 09ffbh - .dword 09ffch - .dword 09ffdh - .dword 09ffeh - .dword 09fffh - .dword 0a000h - .dword 0a001h - .dword 0a002h - .dword 0a003h - .dword 0a004h - .dword 0a005h - .dword 0a006h - .dword 0a007h - .dword 0a008h - .dword 0a009h - .dword 0a00ah - .dword 0a00bh - .dword 0a00ch - .dword 0a00dh - .dword 0a00eh - .dword 0a00fh - .dword 0afe1h - .dword 0afe2h - .dword 0afe3h - .dword 0afe4h - .dword 0afe5h - .dword 0afe6h - .dword 0afe7h - .dword 0afe8h - .dword 0afe9h - .dword 0afeah - .dword 0afebh - .dword 0afech - .dword 0afedh - .dword 0afeeh - .dword 0afefh - .dword 0aff0h - .dword 0aff1h - .dword 0aff2h - .dword 0aff3h - .dword 0aff4h - .dword 0aff5h - .dword 0aff6h - .dword 0aff7h - .dword 0aff8h - .dword 0aff9h - .dword 0affah - .dword 0affbh - .dword 0affch - .dword 0affdh - .dword 0affeh - .dword 0afffh - .dword 0b000h - .dword 0b001h - .dword 0b002h - .dword 0b003h - .dword 0b004h - .dword 0b005h - .dword 0b006h - .dword 0b007h - .dword 0b008h - .dword 0b009h - .dword 0b00ah - .dword 0b00bh - .dword 0b00ch - .dword 0b00dh - .dword 0b00eh - .dword 0b00fh - .dword 0ffe1h - .dword 0ffe2h - .dword 0ffe3h - .dword 0ffe4h - .dword 0ffe5h - .dword 0ffe6h - .dword 0ffe7h - .dword 0ffe8h - .dword 0ffe9h - .dword 0ffeah - .dword 0ffebh - .dword 0ffech - .dword 0ffedh - .dword 0ffeeh - .dword 0ffefh - .dword 0fff0h - .dword 0fff1h - .dword 0fff2h - .dword 0fff3h - .dword 0fff4h - .dword 0fff5h - .dword 0fff6h - .dword 0fff7h - .dword 0fff8h - .dword 0fff9h - .dword 0fffah - .dword 0fffbh - .dword 0fffch - .dword 0fffdh - .dword 0fffeh - .dword 0ffffh - .dword 010000h - .dword 010001h - .dword 010002h - .dword 010003h - .dword 010004h - .dword 010005h - .dword 010006h - .dword 010007h - .dword 010008h - .dword 010009h - .dword 01000ah - .dword 01000bh - .dword 01000ch - .dword 01000dh - .dword 01000eh - .dword 01000fh - .dword 07ffffff0h - .dword 07ffffff1h - .dword 07ffffff2h - .dword 07ffffff3h - .dword 07ffffff4h - .dword 07ffffff5h - .dword 07ffffff6h - .dword 07ffffff7h - .dword 07ffffff8h - .dword 07ffffff9h - .dword 07ffffffah - .dword 07ffffffbh - .dword 07ffffffch - .dword 07ffffffdh - .dword 07ffffffeh - .dword 07fffffffh - .dword 080000000h - .dword 080000001h - .dword 080000002h - .dword 080000003h - .dword 080000004h - .dword 080000005h - .dword 080000006h - .dword 080000007h - .dword 080000008h - .dword 080000009h - .dword 08000000ah - .dword 08000000bh - .dword 08000000ch - .dword 08000000dh - .dword 08000000eh - .dword 08000000fh - .dword 09ffffff0h - .dword 09ffffff1h - .dword 09ffffff2h - .dword 09ffffff3h - .dword 09ffffff4h - .dword 09ffffff5h - .dword 09ffffff6h - .dword 09ffffff7h - .dword 09ffffff8h - .dword 09ffffff9h - .dword 09ffffffah - .dword 09ffffffbh - .dword 09ffffffch - .dword 09ffffffdh - .dword 09ffffffeh - .dword 09fffffffh - .dword 0a0000000h - .dword 0a0000001h - .dword 0a0000002h - .dword 0a0000003h - .dword 0a0000004h - .dword 0a0000005h - .dword 0a0000006h - .dword 0a0000007h - .dword 0a0000008h - .dword 0a0000009h - .dword 0a000000ah - .dword 0a000000bh - .dword 0a000000ch - .dword 0a000000dh - .dword 0a000000eh - .dword 0a000000fh - .dword 0fffffff0h - .dword 0fffffff1h - .dword 0fffffff2h - .dword 0fffffff3h - .dword 0fffffff4h - .dword 0fffffff5h - .dword 0fffffff6h - .dword 0fffffff7h - .dword 0fffffff8h - .dword 0fffffff9h - .dword 0fffffffah - .dword 0fffffffbh - .dword 0fffffffch - .dword 0fffffffdh - .dword 0fffffffeh - .dword 0ffffffffh + ; alternative hex values, always leading zero + .dword 00h + .dword 01h + .dword 02h + .dword 03h + .dword 04h + .dword 05h + .dword 06h + .dword 07h + .dword 08h + .dword 09h + .dword 0ah + .dword 0bh + .dword 0ch + .dword 0dh + .dword 0eh + .dword 0fh + .dword 010h + .dword 011h + .dword 012h + .dword 013h + .dword 070h + .dword 071h + .dword 072h + .dword 073h + .dword 074h + .dword 075h + .dword 076h + .dword 077h + .dword 078h + .dword 079h + .dword 07ah + .dword 07bh + .dword 07ch + .dword 07dh + .dword 07eh + .dword 07fh + .dword 080h + .dword 081h + .dword 082h + .dword 083h + .dword 084h + .dword 085h + .dword 086h + .dword 0f0h + .dword 0f1h + .dword 0f2h + .dword 0f3h + .dword 0f4h + .dword 0f5h + .dword 0f6h + .dword 0f7h + .dword 0f8h + .dword 0f9h + .dword 0fah + .dword 0fbh + .dword 0fch + .dword 0fdh + .dword 0feh + .dword 0ffh + .dword 0100h + .dword 0101h + .dword 0102h + .dword 0103h + .dword 0fd2h + .dword 0fd3h + .dword 0fd4h + .dword 0fd5h + .dword 0fd6h + .dword 0fd7h + .dword 0fd8h + .dword 0fd9h + .dword 0fdah + .dword 0fdbh + .dword 0fdch + .dword 0fddh + .dword 0fdeh + .dword 0fdfh + .dword 0fe0h + .dword 0fe1h + .dword 0fe2h + .dword 0fe3h + .dword 0fe4h + .dword 0fe5h + .dword 0fe6h + .dword 0fe7h + .dword 0fe8h + .dword 0fe9h + .dword 0feah + .dword 0febh + .dword 0fech + .dword 0fedh + .dword 0feeh + .dword 0fefh + .dword 0ff0h + .dword 0ff1h + .dword 0ff2h + .dword 0ff3h + .dword 0ff4h + .dword 0ff5h + .dword 0ff6h + .dword 0ff7h + .dword 0ff8h + .dword 0ff9h + .dword 0ffah + .dword 0ffbh + .dword 0ffch + .dword 0ffdh + .dword 0ffeh + .dword 0fffh + .dword 01000h + .dword 01001h + .dword 01002h + .dword 01003h + .dword 01004h + .dword 01005h + .dword 01006h + .dword 01007h + .dword 01008h + .dword 07ff0h + .dword 07ff1h + .dword 07ff2h + .dword 07ff3h + .dword 07ff4h + .dword 07ff5h + .dword 07ff6h + .dword 07ff7h + .dword 07ff8h + .dword 07ff9h + .dword 07ffah + .dword 07ffbh + .dword 07ffch + .dword 07ffdh + .dword 07ffeh + .dword 07fffh + .dword 08000h + .dword 08001h + .dword 08002h + .dword 08003h + .dword 08004h + .dword 08005h + .dword 08006h + .dword 08007h + .dword 08008h + .dword 08009h + .dword 0800ah + .dword 0800bh + .dword 09fe1h + .dword 09fe2h + .dword 09fe3h + .dword 09fe4h + .dword 09fe5h + .dword 09fe6h + .dword 09fe7h + .dword 09fe8h + .dword 09fe9h + .dword 09feah + .dword 09febh + .dword 09fech + .dword 09fedh + .dword 09feeh + .dword 09fefh + .dword 09ff0h + .dword 09ff1h + .dword 09ff2h + .dword 09ff3h + .dword 09ff4h + .dword 09ff5h + .dword 09ff6h + .dword 09ff7h + .dword 09ff8h + .dword 09ff9h + .dword 09ffah + .dword 09ffbh + .dword 09ffch + .dword 09ffdh + .dword 09ffeh + .dword 09fffh + .dword 0a000h + .dword 0a001h + .dword 0a002h + .dword 0a003h + .dword 0a004h + .dword 0a005h + .dword 0a006h + .dword 0a007h + .dword 0a008h + .dword 0a009h + .dword 0a00ah + .dword 0a00bh + .dword 0a00ch + .dword 0a00dh + .dword 0a00eh + .dword 0a00fh + .dword 0afe1h + .dword 0afe2h + .dword 0afe3h + .dword 0afe4h + .dword 0afe5h + .dword 0afe6h + .dword 0afe7h + .dword 0afe8h + .dword 0afe9h + .dword 0afeah + .dword 0afebh + .dword 0afech + .dword 0afedh + .dword 0afeeh + .dword 0afefh + .dword 0aff0h + .dword 0aff1h + .dword 0aff2h + .dword 0aff3h + .dword 0aff4h + .dword 0aff5h + .dword 0aff6h + .dword 0aff7h + .dword 0aff8h + .dword 0aff9h + .dword 0affah + .dword 0affbh + .dword 0affch + .dword 0affdh + .dword 0affeh + .dword 0afffh + .dword 0b000h + .dword 0b001h + .dword 0b002h + .dword 0b003h + .dword 0b004h + .dword 0b005h + .dword 0b006h + .dword 0b007h + .dword 0b008h + .dword 0b009h + .dword 0b00ah + .dword 0b00bh + .dword 0b00ch + .dword 0b00dh + .dword 0b00eh + .dword 0b00fh + .dword 0ffe1h + .dword 0ffe2h + .dword 0ffe3h + .dword 0ffe4h + .dword 0ffe5h + .dword 0ffe6h + .dword 0ffe7h + .dword 0ffe8h + .dword 0ffe9h + .dword 0ffeah + .dword 0ffebh + .dword 0ffech + .dword 0ffedh + .dword 0ffeeh + .dword 0ffefh + .dword 0fff0h + .dword 0fff1h + .dword 0fff2h + .dword 0fff3h + .dword 0fff4h + .dword 0fff5h + .dword 0fff6h + .dword 0fff7h + .dword 0fff8h + .dword 0fff9h + .dword 0fffah + .dword 0fffbh + .dword 0fffch + .dword 0fffdh + .dword 0fffeh + .dword 0ffffh + .dword 010000h + .dword 010001h + .dword 010002h + .dword 010003h + .dword 010004h + .dword 010005h + .dword 010006h + .dword 010007h + .dword 010008h + .dword 010009h + .dword 01000ah + .dword 01000bh + .dword 01000ch + .dword 01000dh + .dword 01000eh + .dword 01000fh + .dword 07ffffff0h + .dword 07ffffff1h + .dword 07ffffff2h + .dword 07ffffff3h + .dword 07ffffff4h + .dword 07ffffff5h + .dword 07ffffff6h + .dword 07ffffff7h + .dword 07ffffff8h + .dword 07ffffff9h + .dword 07ffffffah + .dword 07ffffffbh + .dword 07ffffffch + .dword 07ffffffdh + .dword 07ffffffeh + .dword 07fffffffh + .dword 080000000h + .dword 080000001h + .dword 080000002h + .dword 080000003h + .dword 080000004h + .dword 080000005h + .dword 080000006h + .dword 080000007h + .dword 080000008h + .dword 080000009h + .dword 08000000ah + .dword 08000000bh + .dword 08000000ch + .dword 08000000dh + .dword 08000000eh + .dword 08000000fh + .dword 09ffffff0h + .dword 09ffffff1h + .dword 09ffffff2h + .dword 09ffffff3h + .dword 09ffffff4h + .dword 09ffffff5h + .dword 09ffffff6h + .dword 09ffffff7h + .dword 09ffffff8h + .dword 09ffffff9h + .dword 09ffffffah + .dword 09ffffffbh + .dword 09ffffffch + .dword 09ffffffdh + .dword 09ffffffeh + .dword 09fffffffh + .dword 0a0000000h + .dword 0a0000001h + .dword 0a0000002h + .dword 0a0000003h + .dword 0a0000004h + .dword 0a0000005h + .dword 0a0000006h + .dword 0a0000007h + .dword 0a0000008h + .dword 0a0000009h + .dword 0a000000ah + .dword 0a000000bh + .dword 0a000000ch + .dword 0a000000dh + .dword 0a000000eh + .dword 0a000000fh + .dword 0fffffff0h + .dword 0fffffff1h + .dword 0fffffff2h + .dword 0fffffff3h + .dword 0fffffff4h + .dword 0fffffff5h + .dword 0fffffff6h + .dword 0fffffff7h + .dword 0fffffff8h + .dword 0fffffff9h + .dword 0fffffffah + .dword 0fffffffbh + .dword 0fffffffch + .dword 0fffffffdh + .dword 0fffffffeh + .dword 0ffffffffh - ; binary values, variable length - .dword %0 - .dword %01 - .dword %010 - .dword %011 - .dword %0100 - .dword %0101 - .dword %0110 - .dword %0111 - .dword %01000 - .dword %01001 - .dword %01010 - .dword %01011 - .dword %01100 - .dword %01101 - .dword %01110 - .dword %01111 - .dword %010000 - .dword %010001 - .dword %010010 - .dword %010011 - .dword %01110000 - .dword %01110001 - .dword %01110010 - .dword %01110011 - .dword %01110100 - .dword %01110101 - .dword %01110110 - .dword %01110111 - .dword %01111000 - .dword %01111001 - .dword %01111010 - .dword %01111011 - .dword %01111100 - .dword %01111101 - .dword %01111110 - .dword %01111111 - .dword %010000000 - .dword %010000001 - .dword %010000010 - .dword %010000011 - .dword %010000100 - .dword %010000101 - .dword %010000110 - .dword %011110000 - .dword %011110001 - .dword %011110010 - .dword %011110011 - .dword %011110100 - .dword %011110101 - .dword %011110110 - .dword %011110111 - .dword %011111000 - .dword %011111001 - .dword %011111010 - .dword %011111011 - .dword %011111100 - .dword %011111101 - .dword %011111110 - .dword %011111111 - .dword %0100000000 - .dword %0100000001 - .dword %0100000010 - .dword %0100000011 - .dword %0111111010010 - .dword %0111111010011 - .dword %0111111010100 - .dword %0111111010101 - .dword %0111111010110 - .dword %0111111010111 - .dword %0111111011000 - .dword %0111111011001 - .dword %0111111011010 - .dword %0111111011011 - .dword %0111111011100 - .dword %0111111011101 - .dword %0111111011110 - .dword %0111111011111 - .dword %0111111100000 - .dword %0111111100001 - .dword %0111111100010 - .dword %0111111100011 - .dword %0111111100100 - .dword %0111111100101 - .dword %0111111100110 - .dword %0111111100111 - .dword %0111111101000 - .dword %0111111101001 - .dword %0111111101010 - .dword %0111111101011 - .dword %0111111101100 - .dword %0111111101101 - .dword %0111111101110 - .dword %0111111101111 - .dword %0111111110000 - .dword %0111111110001 - .dword %0111111110010 - .dword %0111111110011 - .dword %0111111110100 - .dword %0111111110101 - .dword %0111111110110 - .dword %0111111110111 - .dword %0111111111000 - .dword %0111111111001 - .dword %0111111111010 - .dword %0111111111011 - .dword %0111111111100 - .dword %0111111111101 - .dword %0111111111110 - .dword %0111111111111 - .dword %01000000000000 - .dword %01000000000001 - .dword %01000000000010 - .dword %01000000000011 - .dword %01000000000100 - .dword %01000000000101 - .dword %01000000000110 - .dword %01000000000111 - .dword %01000000001000 - .dword %0111111111110000 - .dword %0111111111110001 - .dword %0111111111110010 - .dword %0111111111110011 - .dword %0111111111110100 - .dword %0111111111110101 - .dword %0111111111110110 - .dword %0111111111110111 - .dword %0111111111111000 - .dword %0111111111111001 - .dword %0111111111111010 - .dword %0111111111111011 - .dword %0111111111111100 - .dword %0111111111111101 - .dword %0111111111111110 - .dword %0111111111111111 - .dword %01000000000000000 - .dword %01000000000000001 - .dword %01000000000000010 - .dword %01000000000000011 - .dword %01000000000000100 - .dword %01000000000000101 - .dword %01000000000000110 - .dword %01000000000000111 - .dword %01000000000001000 - .dword %01000000000001001 - .dword %01000000000001010 - .dword %01000000000001011 - .dword %01001111111100001 - .dword %01001111111100010 - .dword %01001111111100011 - .dword %01001111111100100 - .dword %01001111111100101 - .dword %01001111111100110 - .dword %01001111111100111 - .dword %01001111111101000 - .dword %01001111111101001 - .dword %01001111111101010 - .dword %01001111111101011 - .dword %01001111111101100 - .dword %01001111111101101 - .dword %01001111111101110 - .dword %01001111111101111 - .dword %01001111111110000 - .dword %01001111111110001 - .dword %01001111111110010 - .dword %01001111111110011 - .dword %01001111111110100 - .dword %01001111111110101 - .dword %01001111111110110 - .dword %01001111111110111 - .dword %01001111111111000 - .dword %01001111111111001 - .dword %01001111111111010 - .dword %01001111111111011 - .dword %01001111111111100 - .dword %01001111111111101 - .dword %01001111111111110 - .dword %01001111111111111 - .dword %01010000000000000 - .dword %01010000000000001 - .dword %01010000000000010 - .dword %01010000000000011 - .dword %01010000000000100 - .dword %01010000000000101 - .dword %01010000000000110 - .dword %01010000000000111 - .dword %01010000000001000 - .dword %01010000000001001 - .dword %01010000000001010 - .dword %01010000000001011 - .dword %01010000000001100 - .dword %01010000000001101 - .dword %01010000000001110 - .dword %01010000000001111 - .dword %01010111111100001 - .dword %01010111111100010 - .dword %01010111111100011 - .dword %01010111111100100 - .dword %01010111111100101 - .dword %01010111111100110 - .dword %01010111111100111 - .dword %01010111111101000 - .dword %01010111111101001 - .dword %01010111111101010 - .dword %01010111111101011 - .dword %01010111111101100 - .dword %01010111111101101 - .dword %01010111111101110 - .dword %01010111111101111 - .dword %01010111111110000 - .dword %01010111111110001 - .dword %01010111111110010 - .dword %01010111111110011 - .dword %01010111111110100 - .dword %01010111111110101 - .dword %01010111111110110 - .dword %01010111111110111 - .dword %01010111111111000 - .dword %01010111111111001 - .dword %01010111111111010 - .dword %01010111111111011 - .dword %01010111111111100 - .dword %01010111111111101 - .dword %01010111111111110 - .dword %01010111111111111 - .dword %01011000000000000 - .dword %01011000000000001 - .dword %01011000000000010 - .dword %01011000000000011 - .dword %01011000000000100 - .dword %01011000000000101 - .dword %01011000000000110 - .dword %01011000000000111 - .dword %01011000000001000 - .dword %01011000000001001 - .dword %01011000000001010 - .dword %01011000000001011 - .dword %01011000000001100 - .dword %01011000000001101 - .dword %01011000000001110 - .dword %01011000000001111 - .dword %01111111111100001 - .dword %01111111111100010 - .dword %01111111111100011 - .dword %01111111111100100 - .dword %01111111111100101 - .dword %01111111111100110 - .dword %01111111111100111 - .dword %01111111111101000 - .dword %01111111111101001 - .dword %01111111111101010 - .dword %01111111111101011 - .dword %01111111111101100 - .dword %01111111111101101 - .dword %01111111111101110 - .dword %01111111111101111 - .dword %01111111111110000 - .dword %01111111111110001 - .dword %01111111111110010 - .dword %01111111111110011 - .dword %01111111111110100 - .dword %01111111111110101 - .dword %01111111111110110 - .dword %01111111111110111 - .dword %01111111111111000 - .dword %01111111111111001 - .dword %01111111111111010 - .dword %01111111111111011 - .dword %01111111111111100 - .dword %01111111111111101 - .dword %01111111111111110 - .dword %01111111111111111 - .dword %010000000000000000 - .dword %010000000000000001 - .dword %010000000000000010 - .dword %010000000000000011 - .dword %010000000000000100 - .dword %010000000000000101 - .dword %010000000000000110 - .dword %010000000000000111 - .dword %010000000000001000 - .dword %010000000000001001 - .dword %010000000000001010 - .dword %010000000000001011 - .dword %010000000000001100 - .dword %010000000000001101 - .dword %010000000000001110 - .dword %010000000000001111 - .dword %1111111111111111111111111110000 - .dword %1111111111111111111111111110001 - .dword %1111111111111111111111111110010 - .dword %1111111111111111111111111110011 - .dword %1111111111111111111111111110100 - .dword %1111111111111111111111111110101 - .dword %1111111111111111111111111110110 - .dword %1111111111111111111111111110111 - .dword %1111111111111111111111111111000 - .dword %1111111111111111111111111111001 - .dword %1111111111111111111111111111010 - .dword %1111111111111111111111111111011 - .dword %1111111111111111111111111111100 - .dword %1111111111111111111111111111101 - .dword %1111111111111111111111111111110 - .dword %1111111111111111111111111111111 - .dword %10000000000000000000000000000000 - .dword %10000000000000000000000000000001 - .dword %10000000000000000000000000000010 - .dword %10000000000000000000000000000011 - .dword %10000000000000000000000000000100 - .dword %10000000000000000000000000000101 - .dword %10000000000000000000000000000110 - .dword %10000000000000000000000000000111 - .dword %10000000000000000000000000001000 - .dword %10000000000000000000000000001001 - .dword %10000000000000000000000000001010 - .dword %10000000000000000000000000001011 - .dword %10000000000000000000000000001100 - .dword %10000000000000000000000000001101 - .dword %10000000000000000000000000001110 - .dword %10000000000000000000000000001111 - .dword %10011111111111111111111111110000 - .dword %10011111111111111111111111110001 - .dword %10011111111111111111111111110010 - .dword %10011111111111111111111111110011 - .dword %10011111111111111111111111110100 - .dword %10011111111111111111111111110101 - .dword %10011111111111111111111111110110 - .dword %10011111111111111111111111110111 - .dword %10011111111111111111111111111000 - .dword %10011111111111111111111111111001 - .dword %10011111111111111111111111111010 - .dword %10011111111111111111111111111011 - .dword %10011111111111111111111111111100 - .dword %10011111111111111111111111111101 - .dword %10011111111111111111111111111110 - .dword %10011111111111111111111111111111 - .dword %10100000000000000000000000000000 - .dword %10100000000000000000000000000001 - .dword %10100000000000000000000000000010 - .dword %10100000000000000000000000000011 - .dword %10100000000000000000000000000100 - .dword %10100000000000000000000000000101 - .dword %10100000000000000000000000000110 - .dword %10100000000000000000000000000111 - .dword %10100000000000000000000000001000 - .dword %10100000000000000000000000001001 - .dword %10100000000000000000000000001010 - .dword %10100000000000000000000000001011 - .dword %10100000000000000000000000001100 - .dword %10100000000000000000000000001101 - .dword %10100000000000000000000000001110 - .dword %10100000000000000000000000001111 - .dword %11111111111111111111111111110000 - .dword %11111111111111111111111111110001 - .dword %11111111111111111111111111110010 - .dword %11111111111111111111111111110011 - .dword %11111111111111111111111111110100 - .dword %11111111111111111111111111110101 - .dword %11111111111111111111111111110110 - .dword %11111111111111111111111111110111 - .dword %11111111111111111111111111111000 - .dword %11111111111111111111111111111001 - .dword %11111111111111111111111111111010 - .dword %11111111111111111111111111111011 - .dword %11111111111111111111111111111100 - .dword %11111111111111111111111111111101 - .dword %11111111111111111111111111111110 - .dword %11111111111111111111111111111111 + ; binary values, variable length + .dword %0 + .dword %01 + .dword %010 + .dword %011 + .dword %0100 + .dword %0101 + .dword %0110 + .dword %0111 + .dword %01000 + .dword %01001 + .dword %01010 + .dword %01011 + .dword %01100 + .dword %01101 + .dword %01110 + .dword %01111 + .dword %010000 + .dword %010001 + .dword %010010 + .dword %010011 + .dword %01110000 + .dword %01110001 + .dword %01110010 + .dword %01110011 + .dword %01110100 + .dword %01110101 + .dword %01110110 + .dword %01110111 + .dword %01111000 + .dword %01111001 + .dword %01111010 + .dword %01111011 + .dword %01111100 + .dword %01111101 + .dword %01111110 + .dword %01111111 + .dword %010000000 + .dword %010000001 + .dword %010000010 + .dword %010000011 + .dword %010000100 + .dword %010000101 + .dword %010000110 + .dword %011110000 + .dword %011110001 + .dword %011110010 + .dword %011110011 + .dword %011110100 + .dword %011110101 + .dword %011110110 + .dword %011110111 + .dword %011111000 + .dword %011111001 + .dword %011111010 + .dword %011111011 + .dword %011111100 + .dword %011111101 + .dword %011111110 + .dword %011111111 + .dword %0100000000 + .dword %0100000001 + .dword %0100000010 + .dword %0100000011 + .dword %0111111010010 + .dword %0111111010011 + .dword %0111111010100 + .dword %0111111010101 + .dword %0111111010110 + .dword %0111111010111 + .dword %0111111011000 + .dword %0111111011001 + .dword %0111111011010 + .dword %0111111011011 + .dword %0111111011100 + .dword %0111111011101 + .dword %0111111011110 + .dword %0111111011111 + .dword %0111111100000 + .dword %0111111100001 + .dword %0111111100010 + .dword %0111111100011 + .dword %0111111100100 + .dword %0111111100101 + .dword %0111111100110 + .dword %0111111100111 + .dword %0111111101000 + .dword %0111111101001 + .dword %0111111101010 + .dword %0111111101011 + .dword %0111111101100 + .dword %0111111101101 + .dword %0111111101110 + .dword %0111111101111 + .dword %0111111110000 + .dword %0111111110001 + .dword %0111111110010 + .dword %0111111110011 + .dword %0111111110100 + .dword %0111111110101 + .dword %0111111110110 + .dword %0111111110111 + .dword %0111111111000 + .dword %0111111111001 + .dword %0111111111010 + .dword %0111111111011 + .dword %0111111111100 + .dword %0111111111101 + .dword %0111111111110 + .dword %0111111111111 + .dword %01000000000000 + .dword %01000000000001 + .dword %01000000000010 + .dword %01000000000011 + .dword %01000000000100 + .dword %01000000000101 + .dword %01000000000110 + .dword %01000000000111 + .dword %01000000001000 + .dword %0111111111110000 + .dword %0111111111110001 + .dword %0111111111110010 + .dword %0111111111110011 + .dword %0111111111110100 + .dword %0111111111110101 + .dword %0111111111110110 + .dword %0111111111110111 + .dword %0111111111111000 + .dword %0111111111111001 + .dword %0111111111111010 + .dword %0111111111111011 + .dword %0111111111111100 + .dword %0111111111111101 + .dword %0111111111111110 + .dword %0111111111111111 + .dword %01000000000000000 + .dword %01000000000000001 + .dword %01000000000000010 + .dword %01000000000000011 + .dword %01000000000000100 + .dword %01000000000000101 + .dword %01000000000000110 + .dword %01000000000000111 + .dword %01000000000001000 + .dword %01000000000001001 + .dword %01000000000001010 + .dword %01000000000001011 + .dword %01001111111100001 + .dword %01001111111100010 + .dword %01001111111100011 + .dword %01001111111100100 + .dword %01001111111100101 + .dword %01001111111100110 + .dword %01001111111100111 + .dword %01001111111101000 + .dword %01001111111101001 + .dword %01001111111101010 + .dword %01001111111101011 + .dword %01001111111101100 + .dword %01001111111101101 + .dword %01001111111101110 + .dword %01001111111101111 + .dword %01001111111110000 + .dword %01001111111110001 + .dword %01001111111110010 + .dword %01001111111110011 + .dword %01001111111110100 + .dword %01001111111110101 + .dword %01001111111110110 + .dword %01001111111110111 + .dword %01001111111111000 + .dword %01001111111111001 + .dword %01001111111111010 + .dword %01001111111111011 + .dword %01001111111111100 + .dword %01001111111111101 + .dword %01001111111111110 + .dword %01001111111111111 + .dword %01010000000000000 + .dword %01010000000000001 + .dword %01010000000000010 + .dword %01010000000000011 + .dword %01010000000000100 + .dword %01010000000000101 + .dword %01010000000000110 + .dword %01010000000000111 + .dword %01010000000001000 + .dword %01010000000001001 + .dword %01010000000001010 + .dword %01010000000001011 + .dword %01010000000001100 + .dword %01010000000001101 + .dword %01010000000001110 + .dword %01010000000001111 + .dword %01010111111100001 + .dword %01010111111100010 + .dword %01010111111100011 + .dword %01010111111100100 + .dword %01010111111100101 + .dword %01010111111100110 + .dword %01010111111100111 + .dword %01010111111101000 + .dword %01010111111101001 + .dword %01010111111101010 + .dword %01010111111101011 + .dword %01010111111101100 + .dword %01010111111101101 + .dword %01010111111101110 + .dword %01010111111101111 + .dword %01010111111110000 + .dword %01010111111110001 + .dword %01010111111110010 + .dword %01010111111110011 + .dword %01010111111110100 + .dword %01010111111110101 + .dword %01010111111110110 + .dword %01010111111110111 + .dword %01010111111111000 + .dword %01010111111111001 + .dword %01010111111111010 + .dword %01010111111111011 + .dword %01010111111111100 + .dword %01010111111111101 + .dword %01010111111111110 + .dword %01010111111111111 + .dword %01011000000000000 + .dword %01011000000000001 + .dword %01011000000000010 + .dword %01011000000000011 + .dword %01011000000000100 + .dword %01011000000000101 + .dword %01011000000000110 + .dword %01011000000000111 + .dword %01011000000001000 + .dword %01011000000001001 + .dword %01011000000001010 + .dword %01011000000001011 + .dword %01011000000001100 + .dword %01011000000001101 + .dword %01011000000001110 + .dword %01011000000001111 + .dword %01111111111100001 + .dword %01111111111100010 + .dword %01111111111100011 + .dword %01111111111100100 + .dword %01111111111100101 + .dword %01111111111100110 + .dword %01111111111100111 + .dword %01111111111101000 + .dword %01111111111101001 + .dword %01111111111101010 + .dword %01111111111101011 + .dword %01111111111101100 + .dword %01111111111101101 + .dword %01111111111101110 + .dword %01111111111101111 + .dword %01111111111110000 + .dword %01111111111110001 + .dword %01111111111110010 + .dword %01111111111110011 + .dword %01111111111110100 + .dword %01111111111110101 + .dword %01111111111110110 + .dword %01111111111110111 + .dword %01111111111111000 + .dword %01111111111111001 + .dword %01111111111111010 + .dword %01111111111111011 + .dword %01111111111111100 + .dword %01111111111111101 + .dword %01111111111111110 + .dword %01111111111111111 + .dword %010000000000000000 + .dword %010000000000000001 + .dword %010000000000000010 + .dword %010000000000000011 + .dword %010000000000000100 + .dword %010000000000000101 + .dword %010000000000000110 + .dword %010000000000000111 + .dword %010000000000001000 + .dword %010000000000001001 + .dword %010000000000001010 + .dword %010000000000001011 + .dword %010000000000001100 + .dword %010000000000001101 + .dword %010000000000001110 + .dword %010000000000001111 + .dword %1111111111111111111111111110000 + .dword %1111111111111111111111111110001 + .dword %1111111111111111111111111110010 + .dword %1111111111111111111111111110011 + .dword %1111111111111111111111111110100 + .dword %1111111111111111111111111110101 + .dword %1111111111111111111111111110110 + .dword %1111111111111111111111111110111 + .dword %1111111111111111111111111111000 + .dword %1111111111111111111111111111001 + .dword %1111111111111111111111111111010 + .dword %1111111111111111111111111111011 + .dword %1111111111111111111111111111100 + .dword %1111111111111111111111111111101 + .dword %1111111111111111111111111111110 + .dword %1111111111111111111111111111111 + .dword %10000000000000000000000000000000 + .dword %10000000000000000000000000000001 + .dword %10000000000000000000000000000010 + .dword %10000000000000000000000000000011 + .dword %10000000000000000000000000000100 + .dword %10000000000000000000000000000101 + .dword %10000000000000000000000000000110 + .dword %10000000000000000000000000000111 + .dword %10000000000000000000000000001000 + .dword %10000000000000000000000000001001 + .dword %10000000000000000000000000001010 + .dword %10000000000000000000000000001011 + .dword %10000000000000000000000000001100 + .dword %10000000000000000000000000001101 + .dword %10000000000000000000000000001110 + .dword %10000000000000000000000000001111 + .dword %10011111111111111111111111110000 + .dword %10011111111111111111111111110001 + .dword %10011111111111111111111111110010 + .dword %10011111111111111111111111110011 + .dword %10011111111111111111111111110100 + .dword %10011111111111111111111111110101 + .dword %10011111111111111111111111110110 + .dword %10011111111111111111111111110111 + .dword %10011111111111111111111111111000 + .dword %10011111111111111111111111111001 + .dword %10011111111111111111111111111010 + .dword %10011111111111111111111111111011 + .dword %10011111111111111111111111111100 + .dword %10011111111111111111111111111101 + .dword %10011111111111111111111111111110 + .dword %10011111111111111111111111111111 + .dword %10100000000000000000000000000000 + .dword %10100000000000000000000000000001 + .dword %10100000000000000000000000000010 + .dword %10100000000000000000000000000011 + .dword %10100000000000000000000000000100 + .dword %10100000000000000000000000000101 + .dword %10100000000000000000000000000110 + .dword %10100000000000000000000000000111 + .dword %10100000000000000000000000001000 + .dword %10100000000000000000000000001001 + .dword %10100000000000000000000000001010 + .dword %10100000000000000000000000001011 + .dword %10100000000000000000000000001100 + .dword %10100000000000000000000000001101 + .dword %10100000000000000000000000001110 + .dword %10100000000000000000000000001111 + .dword %11111111111111111111111111110000 + .dword %11111111111111111111111111110001 + .dword %11111111111111111111111111110010 + .dword %11111111111111111111111111110011 + .dword %11111111111111111111111111110100 + .dword %11111111111111111111111111110101 + .dword %11111111111111111111111111110110 + .dword %11111111111111111111111111110111 + .dword %11111111111111111111111111111000 + .dword %11111111111111111111111111111001 + .dword %11111111111111111111111111111010 + .dword %11111111111111111111111111111011 + .dword %11111111111111111111111111111100 + .dword %11111111111111111111111111111101 + .dword %11111111111111111111111111111110 + .dword %11111111111111111111111111111111 - ; binary values, full length - .dword %00000000000000000000000000000000 - .dword %00000000000000000000000000000001 - .dword %00000000000000000000000000000010 - .dword %00000000000000000000000000000011 - .dword %00000000000000000000000000000100 - .dword %00000000000000000000000000000101 - .dword %00000000000000000000000000000110 - .dword %00000000000000000000000000000111 - .dword %00000000000000000000000000001000 - .dword %00000000000000000000000000001001 - .dword %00000000000000000000000000001010 - .dword %00000000000000000000000000001011 - .dword %00000000000000000000000000001100 - .dword %00000000000000000000000000001101 - .dword %00000000000000000000000000001110 - .dword %00000000000000000000000000001111 - .dword %00000000000000000000000000010000 - .dword %00000000000000000000000000010001 - .dword %00000000000000000000000000010010 - .dword %00000000000000000000000000010011 - .dword %00000000000000000000000001110000 - .dword %00000000000000000000000001110001 - .dword %00000000000000000000000001110010 - .dword %00000000000000000000000001110011 - .dword %00000000000000000000000001110100 - .dword %00000000000000000000000001110101 - .dword %00000000000000000000000001110110 - .dword %00000000000000000000000001110111 - .dword %00000000000000000000000001111000 - .dword %00000000000000000000000001111001 - .dword %00000000000000000000000001111010 - .dword %00000000000000000000000001111011 - .dword %00000000000000000000000001111100 - .dword %00000000000000000000000001111101 - .dword %00000000000000000000000001111110 - .dword %00000000000000000000000001111111 - .dword %00000000000000000000000010000000 - .dword %00000000000000000000000010000001 - .dword %00000000000000000000000010000010 - .dword %00000000000000000000000010000011 - .dword %00000000000000000000000010000100 - .dword %00000000000000000000000010000101 - .dword %00000000000000000000000010000110 - .dword %00000000000000000000000011110000 - .dword %00000000000000000000000011110001 - .dword %00000000000000000000000011110010 - .dword %00000000000000000000000011110011 - .dword %00000000000000000000000011110100 - .dword %00000000000000000000000011110101 - .dword %00000000000000000000000011110110 - .dword %00000000000000000000000011110111 - .dword %00000000000000000000000011111000 - .dword %00000000000000000000000011111001 - .dword %00000000000000000000000011111010 - .dword %00000000000000000000000011111011 - .dword %00000000000000000000000011111100 - .dword %00000000000000000000000011111101 - .dword %00000000000000000000000011111110 - .dword %00000000000000000000000011111111 - .dword %00000000000000000000000100000000 - .dword %00000000000000000000000100000001 - .dword %00000000000000000000000100000010 - .dword %00000000000000000000000100000011 - .dword %00000000000000000000111111010010 - .dword %00000000000000000000111111010011 - .dword %00000000000000000000111111010100 - .dword %00000000000000000000111111010101 - .dword %00000000000000000000111111010110 - .dword %00000000000000000000111111010111 - .dword %00000000000000000000111111011000 - .dword %00000000000000000000111111011001 - .dword %00000000000000000000111111011010 - .dword %00000000000000000000111111011011 - .dword %00000000000000000000111111011100 - .dword %00000000000000000000111111011101 - .dword %00000000000000000000111111011110 - .dword %00000000000000000000111111011111 - .dword %00000000000000000000111111100000 - .dword %00000000000000000000111111100001 - .dword %00000000000000000000111111100010 - .dword %00000000000000000000111111100011 - .dword %00000000000000000000111111100100 - .dword %00000000000000000000111111100101 - .dword %00000000000000000000111111100110 - .dword %00000000000000000000111111100111 - .dword %00000000000000000000111111101000 - .dword %00000000000000000000111111101001 - .dword %00000000000000000000111111101010 - .dword %00000000000000000000111111101011 - .dword %00000000000000000000111111101100 - .dword %00000000000000000000111111101101 - .dword %00000000000000000000111111101110 - .dword %00000000000000000000111111101111 - .dword %00000000000000000000111111110000 - .dword %00000000000000000000111111110001 - .dword %00000000000000000000111111110010 - .dword %00000000000000000000111111110011 - .dword %00000000000000000000111111110100 - .dword %00000000000000000000111111110101 - .dword %00000000000000000000111111110110 - .dword %00000000000000000000111111110111 - .dword %00000000000000000000111111111000 - .dword %00000000000000000000111111111001 - .dword %00000000000000000000111111111010 - .dword %00000000000000000000111111111011 - .dword %00000000000000000000111111111100 - .dword %00000000000000000000111111111101 - .dword %00000000000000000000111111111110 - .dword %00000000000000000000111111111111 - .dword %00000000000000000001000000000000 - .dword %00000000000000000001000000000001 - .dword %00000000000000000001000000000010 - .dword %00000000000000000001000000000011 - .dword %00000000000000000001000000000100 - .dword %00000000000000000001000000000101 - .dword %00000000000000000001000000000110 - .dword %00000000000000000001000000000111 - .dword %00000000000000000001000000001000 - .dword %00000000000000000111111111110000 - .dword %00000000000000000111111111110001 - .dword %00000000000000000111111111110010 - .dword %00000000000000000111111111110011 - .dword %00000000000000000111111111110100 - .dword %00000000000000000111111111110101 - .dword %00000000000000000111111111110110 - .dword %00000000000000000111111111110111 - .dword %00000000000000000111111111111000 - .dword %00000000000000000111111111111001 - .dword %00000000000000000111111111111010 - .dword %00000000000000000111111111111011 - .dword %00000000000000000111111111111100 - .dword %00000000000000000111111111111101 - .dword %00000000000000000111111111111110 - .dword %00000000000000000111111111111111 - .dword %00000000000000001000000000000000 - .dword %00000000000000001000000000000001 - .dword %00000000000000001000000000000010 - .dword %00000000000000001000000000000011 - .dword %00000000000000001000000000000100 - .dword %00000000000000001000000000000101 - .dword %00000000000000001000000000000110 - .dword %00000000000000001000000000000111 - .dword %00000000000000001000000000001000 - .dword %00000000000000001000000000001001 - .dword %00000000000000001000000000001010 - .dword %00000000000000001000000000001011 - .dword %00000000000000001001111111100001 - .dword %00000000000000001001111111100010 - .dword %00000000000000001001111111100011 - .dword %00000000000000001001111111100100 - .dword %00000000000000001001111111100101 - .dword %00000000000000001001111111100110 - .dword %00000000000000001001111111100111 - .dword %00000000000000001001111111101000 - .dword %00000000000000001001111111101001 - .dword %00000000000000001001111111101010 - .dword %00000000000000001001111111101011 - .dword %00000000000000001001111111101100 - .dword %00000000000000001001111111101101 - .dword %00000000000000001001111111101110 - .dword %00000000000000001001111111101111 - .dword %00000000000000001001111111110000 - .dword %00000000000000001001111111110001 - .dword %00000000000000001001111111110010 - .dword %00000000000000001001111111110011 - .dword %00000000000000001001111111110100 - .dword %00000000000000001001111111110101 - .dword %00000000000000001001111111110110 - .dword %00000000000000001001111111110111 - .dword %00000000000000001001111111111000 - .dword %00000000000000001001111111111001 - .dword %00000000000000001001111111111010 - .dword %00000000000000001001111111111011 - .dword %00000000000000001001111111111100 - .dword %00000000000000001001111111111101 - .dword %00000000000000001001111111111110 - .dword %00000000000000001001111111111111 - .dword %00000000000000001010000000000000 - .dword %00000000000000001010000000000001 - .dword %00000000000000001010000000000010 - .dword %00000000000000001010000000000011 - .dword %00000000000000001010000000000100 - .dword %00000000000000001010000000000101 - .dword %00000000000000001010000000000110 - .dword %00000000000000001010000000000111 - .dword %00000000000000001010000000001000 - .dword %00000000000000001010000000001001 - .dword %00000000000000001010000000001010 - .dword %00000000000000001010000000001011 - .dword %00000000000000001010000000001100 - .dword %00000000000000001010000000001101 - .dword %00000000000000001010000000001110 - .dword %00000000000000001010000000001111 - .dword %00000000000000001010111111100001 - .dword %00000000000000001010111111100010 - .dword %00000000000000001010111111100011 - .dword %00000000000000001010111111100100 - .dword %00000000000000001010111111100101 - .dword %00000000000000001010111111100110 - .dword %00000000000000001010111111100111 - .dword %00000000000000001010111111101000 - .dword %00000000000000001010111111101001 - .dword %00000000000000001010111111101010 - .dword %00000000000000001010111111101011 - .dword %00000000000000001010111111101100 - .dword %00000000000000001010111111101101 - .dword %00000000000000001010111111101110 - .dword %00000000000000001010111111101111 - .dword %00000000000000001010111111110000 - .dword %00000000000000001010111111110001 - .dword %00000000000000001010111111110010 - .dword %00000000000000001010111111110011 - .dword %00000000000000001010111111110100 - .dword %00000000000000001010111111110101 - .dword %00000000000000001010111111110110 - .dword %00000000000000001010111111110111 - .dword %00000000000000001010111111111000 - .dword %00000000000000001010111111111001 - .dword %00000000000000001010111111111010 - .dword %00000000000000001010111111111011 - .dword %00000000000000001010111111111100 - .dword %00000000000000001010111111111101 - .dword %00000000000000001010111111111110 - .dword %00000000000000001010111111111111 - .dword %00000000000000001011000000000000 - .dword %00000000000000001011000000000001 - .dword %00000000000000001011000000000010 - .dword %00000000000000001011000000000011 - .dword %00000000000000001011000000000100 - .dword %00000000000000001011000000000101 - .dword %00000000000000001011000000000110 - .dword %00000000000000001011000000000111 - .dword %00000000000000001011000000001000 - .dword %00000000000000001011000000001001 - .dword %00000000000000001011000000001010 - .dword %00000000000000001011000000001011 - .dword %00000000000000001011000000001100 - .dword %00000000000000001011000000001101 - .dword %00000000000000001011000000001110 - .dword %00000000000000001011000000001111 - .dword %00000000000000001111111111100001 - .dword %00000000000000001111111111100010 - .dword %00000000000000001111111111100011 - .dword %00000000000000001111111111100100 - .dword %00000000000000001111111111100101 - .dword %00000000000000001111111111100110 - .dword %00000000000000001111111111100111 - .dword %00000000000000001111111111101000 - .dword %00000000000000001111111111101001 - .dword %00000000000000001111111111101010 - .dword %00000000000000001111111111101011 - .dword %00000000000000001111111111101100 - .dword %00000000000000001111111111101101 - .dword %00000000000000001111111111101110 - .dword %00000000000000001111111111101111 - .dword %00000000000000001111111111110000 - .dword %00000000000000001111111111110001 - .dword %00000000000000001111111111110010 - .dword %00000000000000001111111111110011 - .dword %00000000000000001111111111110100 - .dword %00000000000000001111111111110101 - .dword %00000000000000001111111111110110 - .dword %00000000000000001111111111110111 - .dword %00000000000000001111111111111000 - .dword %00000000000000001111111111111001 - .dword %00000000000000001111111111111010 - .dword %00000000000000001111111111111011 - .dword %00000000000000001111111111111100 - .dword %00000000000000001111111111111101 - .dword %00000000000000001111111111111110 - .dword %00000000000000001111111111111111 - .dword %00000000000000010000000000000000 - .dword %00000000000000010000000000000001 - .dword %00000000000000010000000000000010 - .dword %00000000000000010000000000000011 - .dword %00000000000000010000000000000100 - .dword %00000000000000010000000000000101 - .dword %00000000000000010000000000000110 - .dword %00000000000000010000000000000111 - .dword %00000000000000010000000000001000 - .dword %00000000000000010000000000001001 - .dword %00000000000000010000000000001010 - .dword %00000000000000010000000000001011 - .dword %00000000000000010000000000001100 - .dword %00000000000000010000000000001101 - .dword %00000000000000010000000000001110 - .dword %00000000000000010000000000001111 - .dword %01111111111111111111111111110000 - .dword %01111111111111111111111111110001 - .dword %01111111111111111111111111110010 - .dword %01111111111111111111111111110011 - .dword %01111111111111111111111111110100 - .dword %01111111111111111111111111110101 - .dword %01111111111111111111111111110110 - .dword %01111111111111111111111111110111 - .dword %01111111111111111111111111111000 - .dword %01111111111111111111111111111001 - .dword %01111111111111111111111111111010 - .dword %01111111111111111111111111111011 - .dword %01111111111111111111111111111100 - .dword %01111111111111111111111111111101 - .dword %01111111111111111111111111111110 - .dword %01111111111111111111111111111111 - .dword %10000000000000000000000000000000 - .dword %10000000000000000000000000000001 - .dword %10000000000000000000000000000010 - .dword %10000000000000000000000000000011 - .dword %10000000000000000000000000000100 - .dword %10000000000000000000000000000101 - .dword %10000000000000000000000000000110 - .dword %10000000000000000000000000000111 - .dword %10000000000000000000000000001000 - .dword %10000000000000000000000000001001 - .dword %10000000000000000000000000001010 - .dword %10000000000000000000000000001011 - .dword %10000000000000000000000000001100 - .dword %10000000000000000000000000001101 - .dword %10000000000000000000000000001110 - .dword %10000000000000000000000000001111 - .dword %10011111111111111111111111110000 - .dword %10011111111111111111111111110001 - .dword %10011111111111111111111111110010 - .dword %10011111111111111111111111110011 - .dword %10011111111111111111111111110100 - .dword %10011111111111111111111111110101 - .dword %10011111111111111111111111110110 - .dword %10011111111111111111111111110111 - .dword %10011111111111111111111111111000 - .dword %10011111111111111111111111111001 - .dword %10011111111111111111111111111010 - .dword %10011111111111111111111111111011 - .dword %10011111111111111111111111111100 - .dword %10011111111111111111111111111101 - .dword %10011111111111111111111111111110 - .dword %10011111111111111111111111111111 - .dword %10100000000000000000000000000000 - .dword %10100000000000000000000000000001 - .dword %10100000000000000000000000000010 - .dword %10100000000000000000000000000011 - .dword %10100000000000000000000000000100 - .dword %10100000000000000000000000000101 - .dword %10100000000000000000000000000110 - .dword %10100000000000000000000000000111 - .dword %10100000000000000000000000001000 - .dword %10100000000000000000000000001001 - .dword %10100000000000000000000000001010 - .dword %10100000000000000000000000001011 - .dword %10100000000000000000000000001100 - .dword %10100000000000000000000000001101 - .dword %10100000000000000000000000001110 - .dword %10100000000000000000000000001111 - .dword %11111111111111111111111111110000 - .dword %11111111111111111111111111110001 - .dword %11111111111111111111111111110010 - .dword %11111111111111111111111111110011 - .dword %11111111111111111111111111110100 - .dword %11111111111111111111111111110101 - .dword %11111111111111111111111111110110 - .dword %11111111111111111111111111110111 - .dword %11111111111111111111111111111000 - .dword %11111111111111111111111111111001 - .dword %11111111111111111111111111111010 - .dword %11111111111111111111111111111011 - .dword %11111111111111111111111111111100 - .dword %11111111111111111111111111111101 - .dword %11111111111111111111111111111110 - .dword %11111111111111111111111111111111 + ; binary values, full length + .dword %00000000000000000000000000000000 + .dword %00000000000000000000000000000001 + .dword %00000000000000000000000000000010 + .dword %00000000000000000000000000000011 + .dword %00000000000000000000000000000100 + .dword %00000000000000000000000000000101 + .dword %00000000000000000000000000000110 + .dword %00000000000000000000000000000111 + .dword %00000000000000000000000000001000 + .dword %00000000000000000000000000001001 + .dword %00000000000000000000000000001010 + .dword %00000000000000000000000000001011 + .dword %00000000000000000000000000001100 + .dword %00000000000000000000000000001101 + .dword %00000000000000000000000000001110 + .dword %00000000000000000000000000001111 + .dword %00000000000000000000000000010000 + .dword %00000000000000000000000000010001 + .dword %00000000000000000000000000010010 + .dword %00000000000000000000000000010011 + .dword %00000000000000000000000001110000 + .dword %00000000000000000000000001110001 + .dword %00000000000000000000000001110010 + .dword %00000000000000000000000001110011 + .dword %00000000000000000000000001110100 + .dword %00000000000000000000000001110101 + .dword %00000000000000000000000001110110 + .dword %00000000000000000000000001110111 + .dword %00000000000000000000000001111000 + .dword %00000000000000000000000001111001 + .dword %00000000000000000000000001111010 + .dword %00000000000000000000000001111011 + .dword %00000000000000000000000001111100 + .dword %00000000000000000000000001111101 + .dword %00000000000000000000000001111110 + .dword %00000000000000000000000001111111 + .dword %00000000000000000000000010000000 + .dword %00000000000000000000000010000001 + .dword %00000000000000000000000010000010 + .dword %00000000000000000000000010000011 + .dword %00000000000000000000000010000100 + .dword %00000000000000000000000010000101 + .dword %00000000000000000000000010000110 + .dword %00000000000000000000000011110000 + .dword %00000000000000000000000011110001 + .dword %00000000000000000000000011110010 + .dword %00000000000000000000000011110011 + .dword %00000000000000000000000011110100 + .dword %00000000000000000000000011110101 + .dword %00000000000000000000000011110110 + .dword %00000000000000000000000011110111 + .dword %00000000000000000000000011111000 + .dword %00000000000000000000000011111001 + .dword %00000000000000000000000011111010 + .dword %00000000000000000000000011111011 + .dword %00000000000000000000000011111100 + .dword %00000000000000000000000011111101 + .dword %00000000000000000000000011111110 + .dword %00000000000000000000000011111111 + .dword %00000000000000000000000100000000 + .dword %00000000000000000000000100000001 + .dword %00000000000000000000000100000010 + .dword %00000000000000000000000100000011 + .dword %00000000000000000000111111010010 + .dword %00000000000000000000111111010011 + .dword %00000000000000000000111111010100 + .dword %00000000000000000000111111010101 + .dword %00000000000000000000111111010110 + .dword %00000000000000000000111111010111 + .dword %00000000000000000000111111011000 + .dword %00000000000000000000111111011001 + .dword %00000000000000000000111111011010 + .dword %00000000000000000000111111011011 + .dword %00000000000000000000111111011100 + .dword %00000000000000000000111111011101 + .dword %00000000000000000000111111011110 + .dword %00000000000000000000111111011111 + .dword %00000000000000000000111111100000 + .dword %00000000000000000000111111100001 + .dword %00000000000000000000111111100010 + .dword %00000000000000000000111111100011 + .dword %00000000000000000000111111100100 + .dword %00000000000000000000111111100101 + .dword %00000000000000000000111111100110 + .dword %00000000000000000000111111100111 + .dword %00000000000000000000111111101000 + .dword %00000000000000000000111111101001 + .dword %00000000000000000000111111101010 + .dword %00000000000000000000111111101011 + .dword %00000000000000000000111111101100 + .dword %00000000000000000000111111101101 + .dword %00000000000000000000111111101110 + .dword %00000000000000000000111111101111 + .dword %00000000000000000000111111110000 + .dword %00000000000000000000111111110001 + .dword %00000000000000000000111111110010 + .dword %00000000000000000000111111110011 + .dword %00000000000000000000111111110100 + .dword %00000000000000000000111111110101 + .dword %00000000000000000000111111110110 + .dword %00000000000000000000111111110111 + .dword %00000000000000000000111111111000 + .dword %00000000000000000000111111111001 + .dword %00000000000000000000111111111010 + .dword %00000000000000000000111111111011 + .dword %00000000000000000000111111111100 + .dword %00000000000000000000111111111101 + .dword %00000000000000000000111111111110 + .dword %00000000000000000000111111111111 + .dword %00000000000000000001000000000000 + .dword %00000000000000000001000000000001 + .dword %00000000000000000001000000000010 + .dword %00000000000000000001000000000011 + .dword %00000000000000000001000000000100 + .dword %00000000000000000001000000000101 + .dword %00000000000000000001000000000110 + .dword %00000000000000000001000000000111 + .dword %00000000000000000001000000001000 + .dword %00000000000000000111111111110000 + .dword %00000000000000000111111111110001 + .dword %00000000000000000111111111110010 + .dword %00000000000000000111111111110011 + .dword %00000000000000000111111111110100 + .dword %00000000000000000111111111110101 + .dword %00000000000000000111111111110110 + .dword %00000000000000000111111111110111 + .dword %00000000000000000111111111111000 + .dword %00000000000000000111111111111001 + .dword %00000000000000000111111111111010 + .dword %00000000000000000111111111111011 + .dword %00000000000000000111111111111100 + .dword %00000000000000000111111111111101 + .dword %00000000000000000111111111111110 + .dword %00000000000000000111111111111111 + .dword %00000000000000001000000000000000 + .dword %00000000000000001000000000000001 + .dword %00000000000000001000000000000010 + .dword %00000000000000001000000000000011 + .dword %00000000000000001000000000000100 + .dword %00000000000000001000000000000101 + .dword %00000000000000001000000000000110 + .dword %00000000000000001000000000000111 + .dword %00000000000000001000000000001000 + .dword %00000000000000001000000000001001 + .dword %00000000000000001000000000001010 + .dword %00000000000000001000000000001011 + .dword %00000000000000001001111111100001 + .dword %00000000000000001001111111100010 + .dword %00000000000000001001111111100011 + .dword %00000000000000001001111111100100 + .dword %00000000000000001001111111100101 + .dword %00000000000000001001111111100110 + .dword %00000000000000001001111111100111 + .dword %00000000000000001001111111101000 + .dword %00000000000000001001111111101001 + .dword %00000000000000001001111111101010 + .dword %00000000000000001001111111101011 + .dword %00000000000000001001111111101100 + .dword %00000000000000001001111111101101 + .dword %00000000000000001001111111101110 + .dword %00000000000000001001111111101111 + .dword %00000000000000001001111111110000 + .dword %00000000000000001001111111110001 + .dword %00000000000000001001111111110010 + .dword %00000000000000001001111111110011 + .dword %00000000000000001001111111110100 + .dword %00000000000000001001111111110101 + .dword %00000000000000001001111111110110 + .dword %00000000000000001001111111110111 + .dword %00000000000000001001111111111000 + .dword %00000000000000001001111111111001 + .dword %00000000000000001001111111111010 + .dword %00000000000000001001111111111011 + .dword %00000000000000001001111111111100 + .dword %00000000000000001001111111111101 + .dword %00000000000000001001111111111110 + .dword %00000000000000001001111111111111 + .dword %00000000000000001010000000000000 + .dword %00000000000000001010000000000001 + .dword %00000000000000001010000000000010 + .dword %00000000000000001010000000000011 + .dword %00000000000000001010000000000100 + .dword %00000000000000001010000000000101 + .dword %00000000000000001010000000000110 + .dword %00000000000000001010000000000111 + .dword %00000000000000001010000000001000 + .dword %00000000000000001010000000001001 + .dword %00000000000000001010000000001010 + .dword %00000000000000001010000000001011 + .dword %00000000000000001010000000001100 + .dword %00000000000000001010000000001101 + .dword %00000000000000001010000000001110 + .dword %00000000000000001010000000001111 + .dword %00000000000000001010111111100001 + .dword %00000000000000001010111111100010 + .dword %00000000000000001010111111100011 + .dword %00000000000000001010111111100100 + .dword %00000000000000001010111111100101 + .dword %00000000000000001010111111100110 + .dword %00000000000000001010111111100111 + .dword %00000000000000001010111111101000 + .dword %00000000000000001010111111101001 + .dword %00000000000000001010111111101010 + .dword %00000000000000001010111111101011 + .dword %00000000000000001010111111101100 + .dword %00000000000000001010111111101101 + .dword %00000000000000001010111111101110 + .dword %00000000000000001010111111101111 + .dword %00000000000000001010111111110000 + .dword %00000000000000001010111111110001 + .dword %00000000000000001010111111110010 + .dword %00000000000000001010111111110011 + .dword %00000000000000001010111111110100 + .dword %00000000000000001010111111110101 + .dword %00000000000000001010111111110110 + .dword %00000000000000001010111111110111 + .dword %00000000000000001010111111111000 + .dword %00000000000000001010111111111001 + .dword %00000000000000001010111111111010 + .dword %00000000000000001010111111111011 + .dword %00000000000000001010111111111100 + .dword %00000000000000001010111111111101 + .dword %00000000000000001010111111111110 + .dword %00000000000000001010111111111111 + .dword %00000000000000001011000000000000 + .dword %00000000000000001011000000000001 + .dword %00000000000000001011000000000010 + .dword %00000000000000001011000000000011 + .dword %00000000000000001011000000000100 + .dword %00000000000000001011000000000101 + .dword %00000000000000001011000000000110 + .dword %00000000000000001011000000000111 + .dword %00000000000000001011000000001000 + .dword %00000000000000001011000000001001 + .dword %00000000000000001011000000001010 + .dword %00000000000000001011000000001011 + .dword %00000000000000001011000000001100 + .dword %00000000000000001011000000001101 + .dword %00000000000000001011000000001110 + .dword %00000000000000001011000000001111 + .dword %00000000000000001111111111100001 + .dword %00000000000000001111111111100010 + .dword %00000000000000001111111111100011 + .dword %00000000000000001111111111100100 + .dword %00000000000000001111111111100101 + .dword %00000000000000001111111111100110 + .dword %00000000000000001111111111100111 + .dword %00000000000000001111111111101000 + .dword %00000000000000001111111111101001 + .dword %00000000000000001111111111101010 + .dword %00000000000000001111111111101011 + .dword %00000000000000001111111111101100 + .dword %00000000000000001111111111101101 + .dword %00000000000000001111111111101110 + .dword %00000000000000001111111111101111 + .dword %00000000000000001111111111110000 + .dword %00000000000000001111111111110001 + .dword %00000000000000001111111111110010 + .dword %00000000000000001111111111110011 + .dword %00000000000000001111111111110100 + .dword %00000000000000001111111111110101 + .dword %00000000000000001111111111110110 + .dword %00000000000000001111111111110111 + .dword %00000000000000001111111111111000 + .dword %00000000000000001111111111111001 + .dword %00000000000000001111111111111010 + .dword %00000000000000001111111111111011 + .dword %00000000000000001111111111111100 + .dword %00000000000000001111111111111101 + .dword %00000000000000001111111111111110 + .dword %00000000000000001111111111111111 + .dword %00000000000000010000000000000000 + .dword %00000000000000010000000000000001 + .dword %00000000000000010000000000000010 + .dword %00000000000000010000000000000011 + .dword %00000000000000010000000000000100 + .dword %00000000000000010000000000000101 + .dword %00000000000000010000000000000110 + .dword %00000000000000010000000000000111 + .dword %00000000000000010000000000001000 + .dword %00000000000000010000000000001001 + .dword %00000000000000010000000000001010 + .dword %00000000000000010000000000001011 + .dword %00000000000000010000000000001100 + .dword %00000000000000010000000000001101 + .dword %00000000000000010000000000001110 + .dword %00000000000000010000000000001111 + .dword %01111111111111111111111111110000 + .dword %01111111111111111111111111110001 + .dword %01111111111111111111111111110010 + .dword %01111111111111111111111111110011 + .dword %01111111111111111111111111110100 + .dword %01111111111111111111111111110101 + .dword %01111111111111111111111111110110 + .dword %01111111111111111111111111110111 + .dword %01111111111111111111111111111000 + .dword %01111111111111111111111111111001 + .dword %01111111111111111111111111111010 + .dword %01111111111111111111111111111011 + .dword %01111111111111111111111111111100 + .dword %01111111111111111111111111111101 + .dword %01111111111111111111111111111110 + .dword %01111111111111111111111111111111 + .dword %10000000000000000000000000000000 + .dword %10000000000000000000000000000001 + .dword %10000000000000000000000000000010 + .dword %10000000000000000000000000000011 + .dword %10000000000000000000000000000100 + .dword %10000000000000000000000000000101 + .dword %10000000000000000000000000000110 + .dword %10000000000000000000000000000111 + .dword %10000000000000000000000000001000 + .dword %10000000000000000000000000001001 + .dword %10000000000000000000000000001010 + .dword %10000000000000000000000000001011 + .dword %10000000000000000000000000001100 + .dword %10000000000000000000000000001101 + .dword %10000000000000000000000000001110 + .dword %10000000000000000000000000001111 + .dword %10011111111111111111111111110000 + .dword %10011111111111111111111111110001 + .dword %10011111111111111111111111110010 + .dword %10011111111111111111111111110011 + .dword %10011111111111111111111111110100 + .dword %10011111111111111111111111110101 + .dword %10011111111111111111111111110110 + .dword %10011111111111111111111111110111 + .dword %10011111111111111111111111111000 + .dword %10011111111111111111111111111001 + .dword %10011111111111111111111111111010 + .dword %10011111111111111111111111111011 + .dword %10011111111111111111111111111100 + .dword %10011111111111111111111111111101 + .dword %10011111111111111111111111111110 + .dword %10011111111111111111111111111111 + .dword %10100000000000000000000000000000 + .dword %10100000000000000000000000000001 + .dword %10100000000000000000000000000010 + .dword %10100000000000000000000000000011 + .dword %10100000000000000000000000000100 + .dword %10100000000000000000000000000101 + .dword %10100000000000000000000000000110 + .dword %10100000000000000000000000000111 + .dword %10100000000000000000000000001000 + .dword %10100000000000000000000000001001 + .dword %10100000000000000000000000001010 + .dword %10100000000000000000000000001011 + .dword %10100000000000000000000000001100 + .dword %10100000000000000000000000001101 + .dword %10100000000000000000000000001110 + .dword %10100000000000000000000000001111 + .dword %11111111111111111111111111110000 + .dword %11111111111111111111111111110001 + .dword %11111111111111111111111111110010 + .dword %11111111111111111111111111110011 + .dword %11111111111111111111111111110100 + .dword %11111111111111111111111111110101 + .dword %11111111111111111111111111110110 + .dword %11111111111111111111111111110111 + .dword %11111111111111111111111111111000 + .dword %11111111111111111111111111111001 + .dword %11111111111111111111111111111010 + .dword %11111111111111111111111111111011 + .dword %11111111111111111111111111111100 + .dword %11111111111111111111111111111101 + .dword %11111111111111111111111111111110 + .dword %11111111111111111111111111111111 - ; multiple values on one line, decimal - .dword 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - .dword 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 - .dword 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 - .dword 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 - .dword 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 - .dword 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 - .dword 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 - .dword 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 - .dword 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 - .dword 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 - .dword 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 - .dword 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 - .dword 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 - .dword 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 - .dword 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 - .dword 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 - .dword 65536,65537,65538,65539,65540,65541,65542,65543,65544,65545,65546,65547,65548,65549,65550,65551 - .dword 2147483647,2147483648,2147483649,2147483650,2147483651,2147483652,2147483653,2147483654,2147483655,2147483656,2147483657,2147483658,2147483659,2147483660,2147483661,2147483662 - .dword 2147483663,2147483664,2147483665,2147483666,2147483667,2147483668,2147483669,2147483670,2147483671,2147483672,2147483673,2147483674,2147483675,2147483676,2147483677,2147483678 - .dword 2684354559,2684354560,2684354561,2684354562,2684354563,2684354564,2684354565,2684354566,2684354567,2684354568,2684354569,2684354570,2684354571,2684354572,2684354573,2684354574 - .dword 2684354575,2684354576,2684354577,2684354578,2684354579,2684354580,2684354581,2684354582,2684354583,2684354584,2684354585,2684354586,2684354587,2684354588,2684354589,2684354590 - .dword 4294967295 + ; multiple values on one line, decimal + .dword 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .dword 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .dword 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .dword 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .dword 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + .dword 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 + .dword 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 + .dword 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 + .dword 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 + .dword 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 + .dword 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 + .dword 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 + .dword 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 + .dword 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 + .dword 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 + .dword 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 + .dword 65536,65537,65538,65539,65540,65541,65542,65543,65544,65545,65546,65547,65548,65549,65550,65551 + .dword 2147483647,2147483648,2147483649,2147483650,2147483651,2147483652,2147483653,2147483654,2147483655,2147483656,2147483657,2147483658,2147483659,2147483660,2147483661,2147483662 + .dword 2147483663,2147483664,2147483665,2147483666,2147483667,2147483668,2147483669,2147483670,2147483671,2147483672,2147483673,2147483674,2147483675,2147483676,2147483677,2147483678 + .dword 2684354559,2684354560,2684354561,2684354562,2684354563,2684354564,2684354565,2684354566,2684354567,2684354568,2684354569,2684354570,2684354571,2684354572,2684354573,2684354574 + .dword 2684354575,2684354576,2684354577,2684354578,2684354579,2684354580,2684354581,2684354582,2684354583,2684354584,2684354585,2684354586,2684354587,2684354588,2684354589,2684354590 + .dword 4294967295 - ; multiple values on one line, hex - .dword $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f - .dword $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f - .dword $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f - .dword $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f - .dword $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff - .dword $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f - .dword $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef - .dword $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff - .dword $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f - .dword $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff - .dword $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f - .dword $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff - .dword $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f - .dword $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff - .dword $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f - .dword $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff - .dword $10000,$10001,$10002,$10003,$10004,$10005,$10006,$10007,$10008,$10009,$1000a,$1000b,$1000c,$1000d,$1000e,$1000f - .dword $7fffffff,$80000000,$80000001,$80000002,$80000003,$80000004,$80000005,$80000006,$80000007,$80000008,$80000009,$8000000a,$8000000b,$8000000c,$8000000d,$8000000e - .dword $8000000f,$80000010,$80000011,$80000012,$80000013,$80000014,$80000015,$80000016,$80000017,$80000018,$80000019,$8000001a,$8000001b,$8000001c,$8000001d,$8000001e - .dword $9fffffff,$a0000000,$a0000001,$a0000002,$a0000003,$a0000004,$a0000005,$a0000006,$a0000007,$a0000008,$a0000009,$a000000a,$a000000b,$a000000c,$a000000d,$a000000e - .dword $a000000f,$a0000010,$a0000011,$a0000012,$a0000013,$a0000014,$a0000015,$a0000016,$a0000017,$a0000018,$a0000019,$a000001a,$a000001b,$a000001c,$a000001d,$a000001e - .dword $ffffffff + ; multiple values on one line, hex + .dword $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .dword $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .dword $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .dword $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .dword $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + .dword $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f + .dword $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef + .dword $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff + .dword $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f + .dword $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff + .dword $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f + .dword $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff + .dword $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f + .dword $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff + .dword $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f + .dword $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff + .dword $10000,$10001,$10002,$10003,$10004,$10005,$10006,$10007,$10008,$10009,$1000a,$1000b,$1000c,$1000d,$1000e,$1000f + .dword $7fffffff,$80000000,$80000001,$80000002,$80000003,$80000004,$80000005,$80000006,$80000007,$80000008,$80000009,$8000000a,$8000000b,$8000000c,$8000000d,$8000000e + .dword $8000000f,$80000010,$80000011,$80000012,$80000013,$80000014,$80000015,$80000016,$80000017,$80000018,$80000019,$8000001a,$8000001b,$8000001c,$8000001d,$8000001e + .dword $9fffffff,$a0000000,$a0000001,$a0000002,$a0000003,$a0000004,$a0000005,$a0000006,$a0000007,$a0000008,$a0000009,$a000000a,$a000000b,$a000000c,$a000000d,$a000000e + .dword $a000000f,$a0000010,$a0000011,$a0000012,$a0000013,$a0000014,$a0000015,$a0000016,$a0000017,$a0000018,$a0000019,$a000001a,$a000001b,$a000001c,$a000001d,$a000001e + .dword $ffffffff - ; multiple values on one line, alternative hex - .dword 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh - .dword 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh - .dword 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh - .dword 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh - .dword 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh - .dword 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh - .dword 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh - .dword 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh - .dword 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh - .dword 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh - .dword 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh - .dword 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh - .dword 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh - .dword 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh - .dword 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh - .dword 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh - .dword 10000h,10001h,10002h,10003h,10004h,10005h,10006h,10007h,10008h,10009h,1000ah,1000bh,1000ch,1000dh,1000eh,1000fh - .dword 7fffffffh,80000000h,80000001h,80000002h,80000003h,80000004h,80000005h,80000006h,80000007h,80000008h,80000009h,8000000ah,8000000bh,8000000ch,8000000dh,8000000eh - .dword 8000000fh,80000010h,80000011h,80000012h,80000013h,80000014h,80000015h,80000016h,80000017h,80000018h,80000019h,8000001ah,8000001bh,8000001ch,8000001dh,8000001eh - .dword 9fffffffh,0a0000000h,0a0000001h,0a0000002h,0a0000003h,0a0000004h,0a0000005h,0a0000006h,0a0000007h,0a0000008h,0a0000009h,0a000000ah,0a000000bh,0a000000ch,0a000000dh,0a000000eh - .dword 0a000000fh,0a0000010h,0a0000011h,0a0000012h,0a0000013h,0a0000014h,0a0000015h,0a0000016h,0a0000017h,0a0000018h,0a0000019h,0a000001ah,0a000001bh,0a000001ch,0a000001dh,0a000001eh - .dword 0ffffffffh + ; multiple values on one line, alternative hex + .dword 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .dword 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .dword 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .dword 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .dword 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + .dword 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh + .dword 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh + .dword 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh + .dword 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh + .dword 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh + .dword 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh + .dword 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh + .dword 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh + .dword 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh + .dword 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh + .dword 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh + .dword 10000h,10001h,10002h,10003h,10004h,10005h,10006h,10007h,10008h,10009h,1000ah,1000bh,1000ch,1000dh,1000eh,1000fh + .dword 7fffffffh,80000000h,80000001h,80000002h,80000003h,80000004h,80000005h,80000006h,80000007h,80000008h,80000009h,8000000ah,8000000bh,8000000ch,8000000dh,8000000eh + .dword 8000000fh,80000010h,80000011h,80000012h,80000013h,80000014h,80000015h,80000016h,80000017h,80000018h,80000019h,8000001ah,8000001bh,8000001ch,8000001dh,8000001eh + .dword 9fffffffh,0a0000000h,0a0000001h,0a0000002h,0a0000003h,0a0000004h,0a0000005h,0a0000006h,0a0000007h,0a0000008h,0a0000009h,0a000000ah,0a000000bh,0a000000ch,0a000000dh,0a000000eh + .dword 0a000000fh,0a0000010h,0a0000011h,0a0000012h,0a0000013h,0a0000014h,0a0000015h,0a0000016h,0a0000017h,0a0000018h,0a0000019h,0a000001ah,0a000001bh,0a000001ch,0a000001dh,0a000001eh + .dword 0ffffffffh - ; mix some variants - .dword 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh + ; mix some variants + .dword 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/105-faraddr.list-ref b/test/asm/listing/105-faraddr.list-ref index 3b1711681..5a8966de9 100644 --- a/test/asm/listing/105-faraddr.list-ref +++ b/test/asm/listing/105-faraddr.list-ref @@ -4,6918 +4,6918 @@ Current file: 105-faraddr.s 000000r 1 ; 2022-06-15 Spiro Trikaliotis 000000r 1 000000r 1 -000000r 1 ; upper case pseudo-op -000000r 1 00 00 00 .FARADDR 0 -000003r 1 01 00 00 .FARADDR 1 -000006r 1 02 00 00 .FARADDR 2 -000009r 1 03 00 00 .FARADDR 3 -00000Cr 1 04 00 00 .FARADDR 4 -00000Fr 1 05 00 00 .FARADDR 5 -000012r 1 06 00 00 .FARADDR 6 -000015r 1 07 00 00 .FARADDR 7 -000018r 1 08 00 00 .FARADDR 8 -00001Br 1 09 00 00 .FARADDR 9 -00001Er 1 0A 00 00 .FARADDR 10 -000021r 1 0B 00 00 .FARADDR 11 -000024r 1 0C 00 00 .FARADDR 12 -000027r 1 0D 00 00 .FARADDR 13 -00002Ar 1 0E 00 00 .FARADDR 14 -00002Dr 1 0F 00 00 .FARADDR 15 -000030r 1 10 00 00 .FARADDR 16 -000033r 1 11 00 00 .FARADDR 17 -000036r 1 12 00 00 .FARADDR 18 -000039r 1 13 00 00 .FARADDR 19 -00003Cr 1 70 00 00 .FARADDR 112 -00003Fr 1 71 00 00 .FARADDR 113 -000042r 1 72 00 00 .FARADDR 114 -000045r 1 73 00 00 .FARADDR 115 -000048r 1 74 00 00 .FARADDR 116 -00004Br 1 75 00 00 .FARADDR 117 -00004Er 1 76 00 00 .FARADDR 118 -000051r 1 77 00 00 .FARADDR 119 -000054r 1 78 00 00 .FARADDR 120 -000057r 1 79 00 00 .FARADDR 121 -00005Ar 1 7A 00 00 .FARADDR 122 -00005Dr 1 7B 00 00 .FARADDR 123 -000060r 1 7C 00 00 .FARADDR 124 -000063r 1 7D 00 00 .FARADDR 125 -000066r 1 7E 00 00 .FARADDR 126 -000069r 1 7F 00 00 .FARADDR 127 -00006Cr 1 80 00 00 .FARADDR 128 -00006Fr 1 81 00 00 .FARADDR 129 -000072r 1 82 00 00 .FARADDR 130 -000075r 1 83 00 00 .FARADDR 131 -000078r 1 84 00 00 .FARADDR 132 -00007Br 1 85 00 00 .FARADDR 133 -00007Er 1 86 00 00 .FARADDR 134 -000081r 1 F0 00 00 .FARADDR 240 -000084r 1 F1 00 00 .FARADDR 241 -000087r 1 F2 00 00 .FARADDR 242 -00008Ar 1 F3 00 00 .FARADDR 243 -00008Dr 1 F4 00 00 .FARADDR 244 -000090r 1 F5 00 00 .FARADDR 245 -000093r 1 F6 00 00 .FARADDR 246 -000096r 1 F7 00 00 .FARADDR 247 -000099r 1 F8 00 00 .FARADDR 248 -00009Cr 1 F9 00 00 .FARADDR 249 -00009Fr 1 FA 00 00 .FARADDR 250 -0000A2r 1 FB 00 00 .FARADDR 251 -0000A5r 1 FC 00 00 .FARADDR 252 -0000A8r 1 FD 00 00 .FARADDR 253 -0000ABr 1 FE 00 00 .FARADDR 254 -0000AEr 1 FF 00 00 .FARADDR 255 -0000B1r 1 00 01 00 .FARADDR 256 -0000B4r 1 01 01 00 .FARADDR 257 -0000B7r 1 02 01 00 .FARADDR 258 -0000BAr 1 03 01 00 .FARADDR 259 -0000BDr 1 D2 0F 00 .FARADDR 4050 -0000C0r 1 D3 0F 00 .FARADDR 4051 -0000C3r 1 D4 0F 00 .FARADDR 4052 -0000C6r 1 D5 0F 00 .FARADDR 4053 -0000C9r 1 D6 0F 00 .FARADDR 4054 -0000CCr 1 D7 0F 00 .FARADDR 4055 -0000CFr 1 D8 0F 00 .FARADDR 4056 -0000D2r 1 D9 0F 00 .FARADDR 4057 -0000D5r 1 DA 0F 00 .FARADDR 4058 -0000D8r 1 DB 0F 00 .FARADDR 4059 -0000DBr 1 DC 0F 00 .FARADDR 4060 -0000DEr 1 DD 0F 00 .FARADDR 4061 -0000E1r 1 DE 0F 00 .FARADDR 4062 -0000E4r 1 DF 0F 00 .FARADDR 4063 -0000E7r 1 E0 0F 00 .FARADDR 4064 -0000EAr 1 E1 0F 00 .FARADDR 4065 -0000EDr 1 E2 0F 00 .FARADDR 4066 -0000F0r 1 E3 0F 00 .FARADDR 4067 -0000F3r 1 E4 0F 00 .FARADDR 4068 -0000F6r 1 E5 0F 00 .FARADDR 4069 -0000F9r 1 E6 0F 00 .FARADDR 4070 -0000FCr 1 E7 0F 00 .FARADDR 4071 -0000FFr 1 E8 0F 00 .FARADDR 4072 -000102r 1 E9 0F 00 .FARADDR 4073 -000105r 1 EA 0F 00 .FARADDR 4074 -000108r 1 EB 0F 00 .FARADDR 4075 -00010Br 1 EC 0F 00 .FARADDR 4076 -00010Er 1 ED 0F 00 .FARADDR 4077 -000111r 1 EE 0F 00 .FARADDR 4078 -000114r 1 EF 0F 00 .FARADDR 4079 -000117r 1 F0 0F 00 .FARADDR 4080 -00011Ar 1 F1 0F 00 .FARADDR 4081 -00011Dr 1 F2 0F 00 .FARADDR 4082 -000120r 1 F3 0F 00 .FARADDR 4083 -000123r 1 F4 0F 00 .FARADDR 4084 -000126r 1 F5 0F 00 .FARADDR 4085 -000129r 1 F6 0F 00 .FARADDR 4086 -00012Cr 1 F7 0F 00 .FARADDR 4087 -00012Fr 1 F8 0F 00 .FARADDR 4088 -000132r 1 F9 0F 00 .FARADDR 4089 -000135r 1 FA 0F 00 .FARADDR 4090 -000138r 1 FB 0F 00 .FARADDR 4091 -00013Br 1 FC 0F 00 .FARADDR 4092 -00013Er 1 FD 0F 00 .FARADDR 4093 -000141r 1 FE 0F 00 .FARADDR 4094 -000144r 1 FF 0F 00 .FARADDR 4095 -000147r 1 00 10 00 .FARADDR 4096 -00014Ar 1 01 10 00 .FARADDR 4097 -00014Dr 1 02 10 00 .FARADDR 4098 -000150r 1 03 10 00 .FARADDR 4099 -000153r 1 04 10 00 .FARADDR 4100 -000156r 1 05 10 00 .FARADDR 4101 -000159r 1 06 10 00 .FARADDR 4102 -00015Cr 1 07 10 00 .FARADDR 4103 -00015Fr 1 08 10 00 .FARADDR 4104 -000162r 1 F0 7F 00 .FARADDR 32752 -000165r 1 F1 7F 00 .FARADDR 32753 -000168r 1 F2 7F 00 .FARADDR 32754 -00016Br 1 F3 7F 00 .FARADDR 32755 -00016Er 1 F4 7F 00 .FARADDR 32756 -000171r 1 F5 7F 00 .FARADDR 32757 -000174r 1 F6 7F 00 .FARADDR 32758 -000177r 1 F7 7F 00 .FARADDR 32759 -00017Ar 1 F8 7F 00 .FARADDR 32760 -00017Dr 1 F9 7F 00 .FARADDR 32761 -000180r 1 FA 7F 00 .FARADDR 32762 -000183r 1 FB 7F 00 .FARADDR 32763 -000186r 1 FC 7F 00 .FARADDR 32764 -000189r 1 FD 7F 00 .FARADDR 32765 -00018Cr 1 FE 7F 00 .FARADDR 32766 -00018Fr 1 FF 7F 00 .FARADDR 32767 -000192r 1 00 80 00 .FARADDR 32768 -000195r 1 01 80 00 .FARADDR 32769 -000198r 1 02 80 00 .FARADDR 32770 -00019Br 1 03 80 00 .FARADDR 32771 -00019Er 1 04 80 00 .FARADDR 32772 -0001A1r 1 05 80 00 .FARADDR 32773 -0001A4r 1 06 80 00 .FARADDR 32774 -0001A7r 1 07 80 00 .FARADDR 32775 -0001AAr 1 08 80 00 .FARADDR 32776 -0001ADr 1 09 80 00 .FARADDR 32777 -0001B0r 1 0A 80 00 .FARADDR 32778 -0001B3r 1 0B 80 00 .FARADDR 32779 -0001B6r 1 E1 9F 00 .FARADDR 40929 -0001B9r 1 E2 9F 00 .FARADDR 40930 -0001BCr 1 E3 9F 00 .FARADDR 40931 -0001BFr 1 E4 9F 00 .FARADDR 40932 -0001C2r 1 E5 9F 00 .FARADDR 40933 -0001C5r 1 E6 9F 00 .FARADDR 40934 -0001C8r 1 E7 9F 00 .FARADDR 40935 -0001CBr 1 E8 9F 00 .FARADDR 40936 -0001CEr 1 E9 9F 00 .FARADDR 40937 -0001D1r 1 EA 9F 00 .FARADDR 40938 -0001D4r 1 EB 9F 00 .FARADDR 40939 -0001D7r 1 EC 9F 00 .FARADDR 40940 -0001DAr 1 ED 9F 00 .FARADDR 40941 -0001DDr 1 EE 9F 00 .FARADDR 40942 -0001E0r 1 EF 9F 00 .FARADDR 40943 -0001E3r 1 F0 9F 00 .FARADDR 40944 -0001E6r 1 F1 9F 00 .FARADDR 40945 -0001E9r 1 F2 9F 00 .FARADDR 40946 -0001ECr 1 F3 9F 00 .FARADDR 40947 -0001EFr 1 F4 9F 00 .FARADDR 40948 -0001F2r 1 F5 9F 00 .FARADDR 40949 -0001F5r 1 F6 9F 00 .FARADDR 40950 -0001F8r 1 F7 9F 00 .FARADDR 40951 -0001FBr 1 F8 9F 00 .FARADDR 40952 -0001FEr 1 F9 9F 00 .FARADDR 40953 -000201r 1 FA 9F 00 .FARADDR 40954 -000204r 1 FB 9F 00 .FARADDR 40955 -000207r 1 FC 9F 00 .FARADDR 40956 -00020Ar 1 FD 9F 00 .FARADDR 40957 -00020Dr 1 FE 9F 00 .FARADDR 40958 -000210r 1 FF 9F 00 .FARADDR 40959 -000213r 1 00 A0 00 .FARADDR 40960 -000216r 1 01 A0 00 .FARADDR 40961 -000219r 1 02 A0 00 .FARADDR 40962 -00021Cr 1 03 A0 00 .FARADDR 40963 -00021Fr 1 04 A0 00 .FARADDR 40964 -000222r 1 05 A0 00 .FARADDR 40965 -000225r 1 06 A0 00 .FARADDR 40966 -000228r 1 07 A0 00 .FARADDR 40967 -00022Br 1 08 A0 00 .FARADDR 40968 -00022Er 1 09 A0 00 .FARADDR 40969 -000231r 1 0A A0 00 .FARADDR 40970 -000234r 1 0B A0 00 .FARADDR 40971 -000237r 1 0C A0 00 .FARADDR 40972 -00023Ar 1 0D A0 00 .FARADDR 40973 -00023Dr 1 0E A0 00 .FARADDR 40974 -000240r 1 0F A0 00 .FARADDR 40975 -000243r 1 E1 AF 00 .FARADDR 45025 -000246r 1 E2 AF 00 .FARADDR 45026 -000249r 1 E3 AF 00 .FARADDR 45027 -00024Cr 1 E4 AF 00 .FARADDR 45028 -00024Fr 1 E5 AF 00 .FARADDR 45029 -000252r 1 E6 AF 00 .FARADDR 45030 -000255r 1 E7 AF 00 .FARADDR 45031 -000258r 1 E8 AF 00 .FARADDR 45032 -00025Br 1 E9 AF 00 .FARADDR 45033 -00025Er 1 EA AF 00 .FARADDR 45034 -000261r 1 EB AF 00 .FARADDR 45035 -000264r 1 EC AF 00 .FARADDR 45036 -000267r 1 ED AF 00 .FARADDR 45037 -00026Ar 1 EE AF 00 .FARADDR 45038 -00026Dr 1 EF AF 00 .FARADDR 45039 -000270r 1 F0 AF 00 .FARADDR 45040 -000273r 1 F1 AF 00 .FARADDR 45041 -000276r 1 F2 AF 00 .FARADDR 45042 -000279r 1 F3 AF 00 .FARADDR 45043 -00027Cr 1 F4 AF 00 .FARADDR 45044 -00027Fr 1 F5 AF 00 .FARADDR 45045 -000282r 1 F6 AF 00 .FARADDR 45046 -000285r 1 F7 AF 00 .FARADDR 45047 -000288r 1 F8 AF 00 .FARADDR 45048 -00028Br 1 F9 AF 00 .FARADDR 45049 -00028Er 1 FA AF 00 .FARADDR 45050 -000291r 1 FB AF 00 .FARADDR 45051 -000294r 1 FC AF 00 .FARADDR 45052 -000297r 1 FD AF 00 .FARADDR 45053 -00029Ar 1 FE AF 00 .FARADDR 45054 -00029Dr 1 FF AF 00 .FARADDR 45055 -0002A0r 1 00 B0 00 .FARADDR 45056 -0002A3r 1 01 B0 00 .FARADDR 45057 -0002A6r 1 02 B0 00 .FARADDR 45058 -0002A9r 1 03 B0 00 .FARADDR 45059 -0002ACr 1 04 B0 00 .FARADDR 45060 -0002AFr 1 05 B0 00 .FARADDR 45061 -0002B2r 1 06 B0 00 .FARADDR 45062 -0002B5r 1 07 B0 00 .FARADDR 45063 -0002B8r 1 08 B0 00 .FARADDR 45064 -0002BBr 1 09 B0 00 .FARADDR 45065 -0002BEr 1 0A B0 00 .FARADDR 45066 -0002C1r 1 0B B0 00 .FARADDR 45067 -0002C4r 1 0C B0 00 .FARADDR 45068 -0002C7r 1 0D B0 00 .FARADDR 45069 -0002CAr 1 0E B0 00 .FARADDR 45070 -0002CDr 1 0F B0 00 .FARADDR 45071 -0002D0r 1 E1 FF 00 .FARADDR 65505 -0002D3r 1 E2 FF 00 .FARADDR 65506 -0002D6r 1 E3 FF 00 .FARADDR 65507 -0002D9r 1 E4 FF 00 .FARADDR 65508 -0002DCr 1 E5 FF 00 .FARADDR 65509 -0002DFr 1 E6 FF 00 .FARADDR 65510 -0002E2r 1 E7 FF 00 .FARADDR 65511 -0002E5r 1 E8 FF 00 .FARADDR 65512 -0002E8r 1 E9 FF 00 .FARADDR 65513 -0002EBr 1 EA FF 00 .FARADDR 65514 -0002EEr 1 EB FF 00 .FARADDR 65515 -0002F1r 1 EC FF 00 .FARADDR 65516 -0002F4r 1 ED FF 00 .FARADDR 65517 -0002F7r 1 EE FF 00 .FARADDR 65518 -0002FAr 1 EF FF 00 .FARADDR 65519 -0002FDr 1 F0 FF 00 .FARADDR 65520 -000300r 1 F1 FF 00 .FARADDR 65521 -000303r 1 F2 FF 00 .FARADDR 65522 -000306r 1 F3 FF 00 .FARADDR 65523 -000309r 1 F4 FF 00 .FARADDR 65524 -00030Cr 1 F5 FF 00 .FARADDR 65525 -00030Fr 1 F6 FF 00 .FARADDR 65526 -000312r 1 F7 FF 00 .FARADDR 65527 -000315r 1 F8 FF 00 .FARADDR 65528 -000318r 1 F9 FF 00 .FARADDR 65529 -00031Br 1 FA FF 00 .FARADDR 65530 -00031Er 1 FB FF 00 .FARADDR 65531 -000321r 1 FC FF 00 .FARADDR 65532 -000324r 1 FD FF 00 .FARADDR 65533 -000327r 1 FE FF 00 .FARADDR 65534 -00032Ar 1 FF FF 00 .FARADDR 65535 -00032Dr 1 00 00 01 .FARADDR 65536 -000330r 1 01 00 01 .FARADDR 65537 -000333r 1 02 00 01 .FARADDR 65538 -000336r 1 03 00 01 .FARADDR 65539 -000339r 1 04 00 01 .FARADDR 65540 -00033Cr 1 05 00 01 .FARADDR 65541 -00033Fr 1 06 00 01 .FARADDR 65542 -000342r 1 07 00 01 .FARADDR 65543 -000345r 1 08 00 01 .FARADDR 65544 -000348r 1 09 00 01 .FARADDR 65545 -00034Br 1 0A 00 01 .FARADDR 65546 -00034Er 1 0B 00 01 .FARADDR 65547 -000351r 1 0C 00 01 .FARADDR 65548 -000354r 1 0D 00 01 .FARADDR 65549 -000357r 1 0E 00 01 .FARADDR 65550 -00035Ar 1 0F 00 01 .FARADDR 65551 -00035Dr 1 E1 FF 10 .FARADDR 1114081 -000360r 1 E2 FF 10 .FARADDR 1114082 -000363r 1 E3 FF 10 .FARADDR 1114083 -000366r 1 E4 FF 10 .FARADDR 1114084 -000369r 1 E5 FF 10 .FARADDR 1114085 -00036Cr 1 E6 FF 10 .FARADDR 1114086 -00036Fr 1 E7 FF 10 .FARADDR 1114087 -000372r 1 E8 FF 10 .FARADDR 1114088 -000375r 1 E9 FF 10 .FARADDR 1114089 -000378r 1 EA FF 10 .FARADDR 1114090 -00037Br 1 EB FF 10 .FARADDR 1114091 -00037Er 1 EC FF 10 .FARADDR 1114092 -000381r 1 ED FF 10 .FARADDR 1114093 -000384r 1 EE FF 10 .FARADDR 1114094 -000387r 1 EF FF 10 .FARADDR 1114095 -00038Ar 1 F0 FF 10 .FARADDR 1114096 -00038Dr 1 F1 FF 10 .FARADDR 1114097 -000390r 1 F2 FF 10 .FARADDR 1114098 -000393r 1 F3 FF 10 .FARADDR 1114099 -000396r 1 F4 FF 10 .FARADDR 1114100 -000399r 1 F5 FF 10 .FARADDR 1114101 -00039Cr 1 F6 FF 10 .FARADDR 1114102 -00039Fr 1 F7 FF 10 .FARADDR 1114103 -0003A2r 1 F8 FF 10 .FARADDR 1114104 -0003A5r 1 F9 FF 10 .FARADDR 1114105 -0003A8r 1 FA FF 10 .FARADDR 1114106 -0003ABr 1 FB FF 10 .FARADDR 1114107 -0003AEr 1 FC FF 10 .FARADDR 1114108 -0003B1r 1 FD FF 10 .FARADDR 1114109 -0003B4r 1 FE FF 10 .FARADDR 1114110 -0003B7r 1 FF FF 10 .FARADDR 1114111 -0003BAr 1 00 00 11 .FARADDR 1114112 -0003BDr 1 01 00 11 .FARADDR 1114113 -0003C0r 1 02 00 11 .FARADDR 1114114 -0003C3r 1 03 00 11 .FARADDR 1114115 -0003C6r 1 04 00 11 .FARADDR 1114116 -0003C9r 1 05 00 11 .FARADDR 1114117 -0003CCr 1 06 00 11 .FARADDR 1114118 -0003CFr 1 07 00 11 .FARADDR 1114119 -0003D2r 1 08 00 11 .FARADDR 1114120 -0003D5r 1 09 00 11 .FARADDR 1114121 -0003D8r 1 0A 00 11 .FARADDR 1114122 -0003DBr 1 0B 00 11 .FARADDR 1114123 -0003DEr 1 0C 00 11 .FARADDR 1114124 -0003E1r 1 0D 00 11 .FARADDR 1114125 -0003E4r 1 0E 00 11 .FARADDR 1114126 -0003E7r 1 0F 00 11 .FARADDR 1114127 -0003EAr 1 E1 FF 20 .FARADDR 2162657 -0003EDr 1 E2 FF 20 .FARADDR 2162658 -0003F0r 1 E3 FF 20 .FARADDR 2162659 -0003F3r 1 E4 FF 20 .FARADDR 2162660 -0003F6r 1 E5 FF 20 .FARADDR 2162661 -0003F9r 1 E6 FF 20 .FARADDR 2162662 -0003FCr 1 E7 FF 20 .FARADDR 2162663 -0003FFr 1 E8 FF 20 .FARADDR 2162664 -000402r 1 E9 FF 20 .FARADDR 2162665 -000405r 1 EA FF 20 .FARADDR 2162666 -000408r 1 EB FF 20 .FARADDR 2162667 -00040Br 1 EC FF 20 .FARADDR 2162668 -00040Er 1 ED FF 20 .FARADDR 2162669 -000411r 1 EE FF 20 .FARADDR 2162670 -000414r 1 EF FF 20 .FARADDR 2162671 -000417r 1 F0 FF 20 .FARADDR 2162672 -00041Ar 1 F1 FF 20 .FARADDR 2162673 -00041Dr 1 F2 FF 20 .FARADDR 2162674 -000420r 1 F3 FF 20 .FARADDR 2162675 -000423r 1 F4 FF 20 .FARADDR 2162676 -000426r 1 F5 FF 20 .FARADDR 2162677 -000429r 1 F6 FF 20 .FARADDR 2162678 -00042Cr 1 F7 FF 20 .FARADDR 2162679 -00042Fr 1 F8 FF 20 .FARADDR 2162680 -000432r 1 F9 FF 20 .FARADDR 2162681 -000435r 1 FA FF 20 .FARADDR 2162682 -000438r 1 FB FF 20 .FARADDR 2162683 -00043Br 1 FC FF 20 .FARADDR 2162684 -00043Er 1 FD FF 20 .FARADDR 2162685 -000441r 1 FE FF 20 .FARADDR 2162686 -000444r 1 FF FF 20 .FARADDR 2162687 -000447r 1 00 00 21 .FARADDR 2162688 -00044Ar 1 01 00 21 .FARADDR 2162689 -00044Dr 1 02 00 21 .FARADDR 2162690 -000450r 1 03 00 21 .FARADDR 2162691 -000453r 1 04 00 21 .FARADDR 2162692 -000456r 1 05 00 21 .FARADDR 2162693 -000459r 1 06 00 21 .FARADDR 2162694 -00045Cr 1 07 00 21 .FARADDR 2162695 -00045Fr 1 08 00 21 .FARADDR 2162696 -000462r 1 09 00 21 .FARADDR 2162697 -000465r 1 0A 00 21 .FARADDR 2162698 -000468r 1 0B 00 21 .FARADDR 2162699 -00046Br 1 0C 00 21 .FARADDR 2162700 -00046Er 1 0D 00 21 .FARADDR 2162701 -000471r 1 0E 00 21 .FARADDR 2162702 -000474r 1 0F 00 21 .FARADDR 2162703 -000477r 1 E1 FF 7F .FARADDR 8388577 -00047Ar 1 E2 FF 7F .FARADDR 8388578 -00047Dr 1 E3 FF 7F .FARADDR 8388579 -000480r 1 E4 FF 7F .FARADDR 8388580 -000483r 1 E5 FF 7F .FARADDR 8388581 -000486r 1 E6 FF 7F .FARADDR 8388582 -000489r 1 E7 FF 7F .FARADDR 8388583 -00048Cr 1 E8 FF 7F .FARADDR 8388584 -00048Fr 1 E9 FF 7F .FARADDR 8388585 -000492r 1 EA FF 7F .FARADDR 8388586 -000495r 1 EB FF 7F .FARADDR 8388587 -000498r 1 EC FF 7F .FARADDR 8388588 -00049Br 1 ED FF 7F .FARADDR 8388589 -00049Er 1 EE FF 7F .FARADDR 8388590 -0004A1r 1 EF FF 7F .FARADDR 8388591 -0004A4r 1 F0 FF 7F .FARADDR 8388592 -0004A7r 1 F1 FF 7F .FARADDR 8388593 -0004AAr 1 F2 FF 7F .FARADDR 8388594 -0004ADr 1 F3 FF 7F .FARADDR 8388595 -0004B0r 1 F4 FF 7F .FARADDR 8388596 -0004B3r 1 F5 FF 7F .FARADDR 8388597 -0004B6r 1 F6 FF 7F .FARADDR 8388598 -0004B9r 1 F7 FF 7F .FARADDR 8388599 -0004BCr 1 F8 FF 7F .FARADDR 8388600 -0004BFr 1 F9 FF 7F .FARADDR 8388601 -0004C2r 1 FA FF 7F .FARADDR 8388602 -0004C5r 1 FB FF 7F .FARADDR 8388603 -0004C8r 1 FC FF 7F .FARADDR 8388604 -0004CBr 1 FD FF 7F .FARADDR 8388605 -0004CEr 1 FE FF 7F .FARADDR 8388606 -0004D1r 1 FF FF 7F .FARADDR 8388607 -0004D4r 1 00 00 80 .FARADDR 8388608 -0004D7r 1 01 00 80 .FARADDR 8388609 -0004DAr 1 02 00 80 .FARADDR 8388610 -0004DDr 1 03 00 80 .FARADDR 8388611 -0004E0r 1 04 00 80 .FARADDR 8388612 -0004E3r 1 05 00 80 .FARADDR 8388613 -0004E6r 1 06 00 80 .FARADDR 8388614 -0004E9r 1 07 00 80 .FARADDR 8388615 -0004ECr 1 08 00 80 .FARADDR 8388616 -0004EFr 1 09 00 80 .FARADDR 8388617 -0004F2r 1 0A 00 80 .FARADDR 8388618 -0004F5r 1 0B 00 80 .FARADDR 8388619 -0004F8r 1 0C 00 80 .FARADDR 8388620 -0004FBr 1 0D 00 80 .FARADDR 8388621 -0004FEr 1 0E 00 80 .FARADDR 8388622 -000501r 1 0F 00 80 .FARADDR 8388623 -000504r 1 E1 FF 9F .FARADDR 10485729 -000507r 1 E2 FF 9F .FARADDR 10485730 -00050Ar 1 E3 FF 9F .FARADDR 10485731 -00050Dr 1 E4 FF 9F .FARADDR 10485732 -000510r 1 E5 FF 9F .FARADDR 10485733 -000513r 1 E6 FF 9F .FARADDR 10485734 -000516r 1 E7 FF 9F .FARADDR 10485735 -000519r 1 E8 FF 9F .FARADDR 10485736 -00051Cr 1 E9 FF 9F .FARADDR 10485737 -00051Fr 1 EA FF 9F .FARADDR 10485738 -000522r 1 EB FF 9F .FARADDR 10485739 -000525r 1 EC FF 9F .FARADDR 10485740 -000528r 1 ED FF 9F .FARADDR 10485741 -00052Br 1 EE FF 9F .FARADDR 10485742 -00052Er 1 EF FF 9F .FARADDR 10485743 -000531r 1 F0 FF 9F .FARADDR 10485744 -000534r 1 F1 FF 9F .FARADDR 10485745 -000537r 1 F2 FF 9F .FARADDR 10485746 -00053Ar 1 F3 FF 9F .FARADDR 10485747 -00053Dr 1 F4 FF 9F .FARADDR 10485748 -000540r 1 F5 FF 9F .FARADDR 10485749 -000543r 1 F6 FF 9F .FARADDR 10485750 -000546r 1 F7 FF 9F .FARADDR 10485751 -000549r 1 F8 FF 9F .FARADDR 10485752 -00054Cr 1 F9 FF 9F .FARADDR 10485753 -00054Fr 1 FA FF 9F .FARADDR 10485754 -000552r 1 FB FF 9F .FARADDR 10485755 -000555r 1 FC FF 9F .FARADDR 10485756 -000558r 1 FD FF 9F .FARADDR 10485757 -00055Br 1 FE FF 9F .FARADDR 10485758 -00055Er 1 FF FF 9F .FARADDR 10485759 -000561r 1 00 00 A0 .FARADDR 10485760 -000564r 1 01 00 A0 .FARADDR 10485761 -000567r 1 02 00 A0 .FARADDR 10485762 -00056Ar 1 03 00 A0 .FARADDR 10485763 -00056Dr 1 04 00 A0 .FARADDR 10485764 -000570r 1 05 00 A0 .FARADDR 10485765 -000573r 1 06 00 A0 .FARADDR 10485766 -000576r 1 07 00 A0 .FARADDR 10485767 -000579r 1 08 00 A0 .FARADDR 10485768 -00057Cr 1 09 00 A0 .FARADDR 10485769 -00057Fr 1 0A 00 A0 .FARADDR 10485770 -000582r 1 0B 00 A0 .FARADDR 10485771 -000585r 1 0C 00 A0 .FARADDR 10485772 -000588r 1 0D 00 A0 .FARADDR 10485773 -00058Br 1 0E 00 A0 .FARADDR 10485774 -00058Er 1 0F 00 A0 .FARADDR 10485775 -000591r 1 E1 FF FF .FARADDR 16777185 -000594r 1 E2 FF FF .FARADDR 16777186 -000597r 1 E3 FF FF .FARADDR 16777187 -00059Ar 1 E4 FF FF .FARADDR 16777188 -00059Dr 1 E5 FF FF .FARADDR 16777189 -0005A0r 1 E6 FF FF .FARADDR 16777190 -0005A3r 1 E7 FF FF .FARADDR 16777191 -0005A6r 1 E8 FF FF .FARADDR 16777192 -0005A9r 1 E9 FF FF .FARADDR 16777193 -0005ACr 1 EA FF FF .FARADDR 16777194 -0005AFr 1 EB FF FF .FARADDR 16777195 -0005B2r 1 EC FF FF .FARADDR 16777196 -0005B5r 1 ED FF FF .FARADDR 16777197 -0005B8r 1 EE FF FF .FARADDR 16777198 -0005BBr 1 EF FF FF .FARADDR 16777199 -0005BEr 1 F0 FF FF .FARADDR 16777200 -0005C1r 1 F1 FF FF .FARADDR 16777201 -0005C4r 1 F2 FF FF .FARADDR 16777202 -0005C7r 1 F3 FF FF .FARADDR 16777203 -0005CAr 1 F4 FF FF .FARADDR 16777204 -0005CDr 1 F5 FF FF .FARADDR 16777205 -0005D0r 1 F6 FF FF .FARADDR 16777206 -0005D3r 1 F7 FF FF .FARADDR 16777207 -0005D6r 1 F8 FF FF .FARADDR 16777208 -0005D9r 1 F9 FF FF .FARADDR 16777209 -0005DCr 1 FA FF FF .FARADDR 16777210 -0005DFr 1 FB FF FF .FARADDR 16777211 -0005E2r 1 FC FF FF .FARADDR 16777212 -0005E5r 1 FD FF FF .FARADDR 16777213 -0005E8r 1 FE FF FF .FARADDR 16777214 -0005EBr 1 FF FF FF .FARADDR 16777215 +000000r 1 ; upper case pseudo-op +000000r 1 00 00 00 .FARADDR 0 +000003r 1 01 00 00 .FARADDR 1 +000006r 1 02 00 00 .FARADDR 2 +000009r 1 03 00 00 .FARADDR 3 +00000Cr 1 04 00 00 .FARADDR 4 +00000Fr 1 05 00 00 .FARADDR 5 +000012r 1 06 00 00 .FARADDR 6 +000015r 1 07 00 00 .FARADDR 7 +000018r 1 08 00 00 .FARADDR 8 +00001Br 1 09 00 00 .FARADDR 9 +00001Er 1 0A 00 00 .FARADDR 10 +000021r 1 0B 00 00 .FARADDR 11 +000024r 1 0C 00 00 .FARADDR 12 +000027r 1 0D 00 00 .FARADDR 13 +00002Ar 1 0E 00 00 .FARADDR 14 +00002Dr 1 0F 00 00 .FARADDR 15 +000030r 1 10 00 00 .FARADDR 16 +000033r 1 11 00 00 .FARADDR 17 +000036r 1 12 00 00 .FARADDR 18 +000039r 1 13 00 00 .FARADDR 19 +00003Cr 1 70 00 00 .FARADDR 112 +00003Fr 1 71 00 00 .FARADDR 113 +000042r 1 72 00 00 .FARADDR 114 +000045r 1 73 00 00 .FARADDR 115 +000048r 1 74 00 00 .FARADDR 116 +00004Br 1 75 00 00 .FARADDR 117 +00004Er 1 76 00 00 .FARADDR 118 +000051r 1 77 00 00 .FARADDR 119 +000054r 1 78 00 00 .FARADDR 120 +000057r 1 79 00 00 .FARADDR 121 +00005Ar 1 7A 00 00 .FARADDR 122 +00005Dr 1 7B 00 00 .FARADDR 123 +000060r 1 7C 00 00 .FARADDR 124 +000063r 1 7D 00 00 .FARADDR 125 +000066r 1 7E 00 00 .FARADDR 126 +000069r 1 7F 00 00 .FARADDR 127 +00006Cr 1 80 00 00 .FARADDR 128 +00006Fr 1 81 00 00 .FARADDR 129 +000072r 1 82 00 00 .FARADDR 130 +000075r 1 83 00 00 .FARADDR 131 +000078r 1 84 00 00 .FARADDR 132 +00007Br 1 85 00 00 .FARADDR 133 +00007Er 1 86 00 00 .FARADDR 134 +000081r 1 F0 00 00 .FARADDR 240 +000084r 1 F1 00 00 .FARADDR 241 +000087r 1 F2 00 00 .FARADDR 242 +00008Ar 1 F3 00 00 .FARADDR 243 +00008Dr 1 F4 00 00 .FARADDR 244 +000090r 1 F5 00 00 .FARADDR 245 +000093r 1 F6 00 00 .FARADDR 246 +000096r 1 F7 00 00 .FARADDR 247 +000099r 1 F8 00 00 .FARADDR 248 +00009Cr 1 F9 00 00 .FARADDR 249 +00009Fr 1 FA 00 00 .FARADDR 250 +0000A2r 1 FB 00 00 .FARADDR 251 +0000A5r 1 FC 00 00 .FARADDR 252 +0000A8r 1 FD 00 00 .FARADDR 253 +0000ABr 1 FE 00 00 .FARADDR 254 +0000AEr 1 FF 00 00 .FARADDR 255 +0000B1r 1 00 01 00 .FARADDR 256 +0000B4r 1 01 01 00 .FARADDR 257 +0000B7r 1 02 01 00 .FARADDR 258 +0000BAr 1 03 01 00 .FARADDR 259 +0000BDr 1 D2 0F 00 .FARADDR 4050 +0000C0r 1 D3 0F 00 .FARADDR 4051 +0000C3r 1 D4 0F 00 .FARADDR 4052 +0000C6r 1 D5 0F 00 .FARADDR 4053 +0000C9r 1 D6 0F 00 .FARADDR 4054 +0000CCr 1 D7 0F 00 .FARADDR 4055 +0000CFr 1 D8 0F 00 .FARADDR 4056 +0000D2r 1 D9 0F 00 .FARADDR 4057 +0000D5r 1 DA 0F 00 .FARADDR 4058 +0000D8r 1 DB 0F 00 .FARADDR 4059 +0000DBr 1 DC 0F 00 .FARADDR 4060 +0000DEr 1 DD 0F 00 .FARADDR 4061 +0000E1r 1 DE 0F 00 .FARADDR 4062 +0000E4r 1 DF 0F 00 .FARADDR 4063 +0000E7r 1 E0 0F 00 .FARADDR 4064 +0000EAr 1 E1 0F 00 .FARADDR 4065 +0000EDr 1 E2 0F 00 .FARADDR 4066 +0000F0r 1 E3 0F 00 .FARADDR 4067 +0000F3r 1 E4 0F 00 .FARADDR 4068 +0000F6r 1 E5 0F 00 .FARADDR 4069 +0000F9r 1 E6 0F 00 .FARADDR 4070 +0000FCr 1 E7 0F 00 .FARADDR 4071 +0000FFr 1 E8 0F 00 .FARADDR 4072 +000102r 1 E9 0F 00 .FARADDR 4073 +000105r 1 EA 0F 00 .FARADDR 4074 +000108r 1 EB 0F 00 .FARADDR 4075 +00010Br 1 EC 0F 00 .FARADDR 4076 +00010Er 1 ED 0F 00 .FARADDR 4077 +000111r 1 EE 0F 00 .FARADDR 4078 +000114r 1 EF 0F 00 .FARADDR 4079 +000117r 1 F0 0F 00 .FARADDR 4080 +00011Ar 1 F1 0F 00 .FARADDR 4081 +00011Dr 1 F2 0F 00 .FARADDR 4082 +000120r 1 F3 0F 00 .FARADDR 4083 +000123r 1 F4 0F 00 .FARADDR 4084 +000126r 1 F5 0F 00 .FARADDR 4085 +000129r 1 F6 0F 00 .FARADDR 4086 +00012Cr 1 F7 0F 00 .FARADDR 4087 +00012Fr 1 F8 0F 00 .FARADDR 4088 +000132r 1 F9 0F 00 .FARADDR 4089 +000135r 1 FA 0F 00 .FARADDR 4090 +000138r 1 FB 0F 00 .FARADDR 4091 +00013Br 1 FC 0F 00 .FARADDR 4092 +00013Er 1 FD 0F 00 .FARADDR 4093 +000141r 1 FE 0F 00 .FARADDR 4094 +000144r 1 FF 0F 00 .FARADDR 4095 +000147r 1 00 10 00 .FARADDR 4096 +00014Ar 1 01 10 00 .FARADDR 4097 +00014Dr 1 02 10 00 .FARADDR 4098 +000150r 1 03 10 00 .FARADDR 4099 +000153r 1 04 10 00 .FARADDR 4100 +000156r 1 05 10 00 .FARADDR 4101 +000159r 1 06 10 00 .FARADDR 4102 +00015Cr 1 07 10 00 .FARADDR 4103 +00015Fr 1 08 10 00 .FARADDR 4104 +000162r 1 F0 7F 00 .FARADDR 32752 +000165r 1 F1 7F 00 .FARADDR 32753 +000168r 1 F2 7F 00 .FARADDR 32754 +00016Br 1 F3 7F 00 .FARADDR 32755 +00016Er 1 F4 7F 00 .FARADDR 32756 +000171r 1 F5 7F 00 .FARADDR 32757 +000174r 1 F6 7F 00 .FARADDR 32758 +000177r 1 F7 7F 00 .FARADDR 32759 +00017Ar 1 F8 7F 00 .FARADDR 32760 +00017Dr 1 F9 7F 00 .FARADDR 32761 +000180r 1 FA 7F 00 .FARADDR 32762 +000183r 1 FB 7F 00 .FARADDR 32763 +000186r 1 FC 7F 00 .FARADDR 32764 +000189r 1 FD 7F 00 .FARADDR 32765 +00018Cr 1 FE 7F 00 .FARADDR 32766 +00018Fr 1 FF 7F 00 .FARADDR 32767 +000192r 1 00 80 00 .FARADDR 32768 +000195r 1 01 80 00 .FARADDR 32769 +000198r 1 02 80 00 .FARADDR 32770 +00019Br 1 03 80 00 .FARADDR 32771 +00019Er 1 04 80 00 .FARADDR 32772 +0001A1r 1 05 80 00 .FARADDR 32773 +0001A4r 1 06 80 00 .FARADDR 32774 +0001A7r 1 07 80 00 .FARADDR 32775 +0001AAr 1 08 80 00 .FARADDR 32776 +0001ADr 1 09 80 00 .FARADDR 32777 +0001B0r 1 0A 80 00 .FARADDR 32778 +0001B3r 1 0B 80 00 .FARADDR 32779 +0001B6r 1 E1 9F 00 .FARADDR 40929 +0001B9r 1 E2 9F 00 .FARADDR 40930 +0001BCr 1 E3 9F 00 .FARADDR 40931 +0001BFr 1 E4 9F 00 .FARADDR 40932 +0001C2r 1 E5 9F 00 .FARADDR 40933 +0001C5r 1 E6 9F 00 .FARADDR 40934 +0001C8r 1 E7 9F 00 .FARADDR 40935 +0001CBr 1 E8 9F 00 .FARADDR 40936 +0001CEr 1 E9 9F 00 .FARADDR 40937 +0001D1r 1 EA 9F 00 .FARADDR 40938 +0001D4r 1 EB 9F 00 .FARADDR 40939 +0001D7r 1 EC 9F 00 .FARADDR 40940 +0001DAr 1 ED 9F 00 .FARADDR 40941 +0001DDr 1 EE 9F 00 .FARADDR 40942 +0001E0r 1 EF 9F 00 .FARADDR 40943 +0001E3r 1 F0 9F 00 .FARADDR 40944 +0001E6r 1 F1 9F 00 .FARADDR 40945 +0001E9r 1 F2 9F 00 .FARADDR 40946 +0001ECr 1 F3 9F 00 .FARADDR 40947 +0001EFr 1 F4 9F 00 .FARADDR 40948 +0001F2r 1 F5 9F 00 .FARADDR 40949 +0001F5r 1 F6 9F 00 .FARADDR 40950 +0001F8r 1 F7 9F 00 .FARADDR 40951 +0001FBr 1 F8 9F 00 .FARADDR 40952 +0001FEr 1 F9 9F 00 .FARADDR 40953 +000201r 1 FA 9F 00 .FARADDR 40954 +000204r 1 FB 9F 00 .FARADDR 40955 +000207r 1 FC 9F 00 .FARADDR 40956 +00020Ar 1 FD 9F 00 .FARADDR 40957 +00020Dr 1 FE 9F 00 .FARADDR 40958 +000210r 1 FF 9F 00 .FARADDR 40959 +000213r 1 00 A0 00 .FARADDR 40960 +000216r 1 01 A0 00 .FARADDR 40961 +000219r 1 02 A0 00 .FARADDR 40962 +00021Cr 1 03 A0 00 .FARADDR 40963 +00021Fr 1 04 A0 00 .FARADDR 40964 +000222r 1 05 A0 00 .FARADDR 40965 +000225r 1 06 A0 00 .FARADDR 40966 +000228r 1 07 A0 00 .FARADDR 40967 +00022Br 1 08 A0 00 .FARADDR 40968 +00022Er 1 09 A0 00 .FARADDR 40969 +000231r 1 0A A0 00 .FARADDR 40970 +000234r 1 0B A0 00 .FARADDR 40971 +000237r 1 0C A0 00 .FARADDR 40972 +00023Ar 1 0D A0 00 .FARADDR 40973 +00023Dr 1 0E A0 00 .FARADDR 40974 +000240r 1 0F A0 00 .FARADDR 40975 +000243r 1 E1 AF 00 .FARADDR 45025 +000246r 1 E2 AF 00 .FARADDR 45026 +000249r 1 E3 AF 00 .FARADDR 45027 +00024Cr 1 E4 AF 00 .FARADDR 45028 +00024Fr 1 E5 AF 00 .FARADDR 45029 +000252r 1 E6 AF 00 .FARADDR 45030 +000255r 1 E7 AF 00 .FARADDR 45031 +000258r 1 E8 AF 00 .FARADDR 45032 +00025Br 1 E9 AF 00 .FARADDR 45033 +00025Er 1 EA AF 00 .FARADDR 45034 +000261r 1 EB AF 00 .FARADDR 45035 +000264r 1 EC AF 00 .FARADDR 45036 +000267r 1 ED AF 00 .FARADDR 45037 +00026Ar 1 EE AF 00 .FARADDR 45038 +00026Dr 1 EF AF 00 .FARADDR 45039 +000270r 1 F0 AF 00 .FARADDR 45040 +000273r 1 F1 AF 00 .FARADDR 45041 +000276r 1 F2 AF 00 .FARADDR 45042 +000279r 1 F3 AF 00 .FARADDR 45043 +00027Cr 1 F4 AF 00 .FARADDR 45044 +00027Fr 1 F5 AF 00 .FARADDR 45045 +000282r 1 F6 AF 00 .FARADDR 45046 +000285r 1 F7 AF 00 .FARADDR 45047 +000288r 1 F8 AF 00 .FARADDR 45048 +00028Br 1 F9 AF 00 .FARADDR 45049 +00028Er 1 FA AF 00 .FARADDR 45050 +000291r 1 FB AF 00 .FARADDR 45051 +000294r 1 FC AF 00 .FARADDR 45052 +000297r 1 FD AF 00 .FARADDR 45053 +00029Ar 1 FE AF 00 .FARADDR 45054 +00029Dr 1 FF AF 00 .FARADDR 45055 +0002A0r 1 00 B0 00 .FARADDR 45056 +0002A3r 1 01 B0 00 .FARADDR 45057 +0002A6r 1 02 B0 00 .FARADDR 45058 +0002A9r 1 03 B0 00 .FARADDR 45059 +0002ACr 1 04 B0 00 .FARADDR 45060 +0002AFr 1 05 B0 00 .FARADDR 45061 +0002B2r 1 06 B0 00 .FARADDR 45062 +0002B5r 1 07 B0 00 .FARADDR 45063 +0002B8r 1 08 B0 00 .FARADDR 45064 +0002BBr 1 09 B0 00 .FARADDR 45065 +0002BEr 1 0A B0 00 .FARADDR 45066 +0002C1r 1 0B B0 00 .FARADDR 45067 +0002C4r 1 0C B0 00 .FARADDR 45068 +0002C7r 1 0D B0 00 .FARADDR 45069 +0002CAr 1 0E B0 00 .FARADDR 45070 +0002CDr 1 0F B0 00 .FARADDR 45071 +0002D0r 1 E1 FF 00 .FARADDR 65505 +0002D3r 1 E2 FF 00 .FARADDR 65506 +0002D6r 1 E3 FF 00 .FARADDR 65507 +0002D9r 1 E4 FF 00 .FARADDR 65508 +0002DCr 1 E5 FF 00 .FARADDR 65509 +0002DFr 1 E6 FF 00 .FARADDR 65510 +0002E2r 1 E7 FF 00 .FARADDR 65511 +0002E5r 1 E8 FF 00 .FARADDR 65512 +0002E8r 1 E9 FF 00 .FARADDR 65513 +0002EBr 1 EA FF 00 .FARADDR 65514 +0002EEr 1 EB FF 00 .FARADDR 65515 +0002F1r 1 EC FF 00 .FARADDR 65516 +0002F4r 1 ED FF 00 .FARADDR 65517 +0002F7r 1 EE FF 00 .FARADDR 65518 +0002FAr 1 EF FF 00 .FARADDR 65519 +0002FDr 1 F0 FF 00 .FARADDR 65520 +000300r 1 F1 FF 00 .FARADDR 65521 +000303r 1 F2 FF 00 .FARADDR 65522 +000306r 1 F3 FF 00 .FARADDR 65523 +000309r 1 F4 FF 00 .FARADDR 65524 +00030Cr 1 F5 FF 00 .FARADDR 65525 +00030Fr 1 F6 FF 00 .FARADDR 65526 +000312r 1 F7 FF 00 .FARADDR 65527 +000315r 1 F8 FF 00 .FARADDR 65528 +000318r 1 F9 FF 00 .FARADDR 65529 +00031Br 1 FA FF 00 .FARADDR 65530 +00031Er 1 FB FF 00 .FARADDR 65531 +000321r 1 FC FF 00 .FARADDR 65532 +000324r 1 FD FF 00 .FARADDR 65533 +000327r 1 FE FF 00 .FARADDR 65534 +00032Ar 1 FF FF 00 .FARADDR 65535 +00032Dr 1 00 00 01 .FARADDR 65536 +000330r 1 01 00 01 .FARADDR 65537 +000333r 1 02 00 01 .FARADDR 65538 +000336r 1 03 00 01 .FARADDR 65539 +000339r 1 04 00 01 .FARADDR 65540 +00033Cr 1 05 00 01 .FARADDR 65541 +00033Fr 1 06 00 01 .FARADDR 65542 +000342r 1 07 00 01 .FARADDR 65543 +000345r 1 08 00 01 .FARADDR 65544 +000348r 1 09 00 01 .FARADDR 65545 +00034Br 1 0A 00 01 .FARADDR 65546 +00034Er 1 0B 00 01 .FARADDR 65547 +000351r 1 0C 00 01 .FARADDR 65548 +000354r 1 0D 00 01 .FARADDR 65549 +000357r 1 0E 00 01 .FARADDR 65550 +00035Ar 1 0F 00 01 .FARADDR 65551 +00035Dr 1 E1 FF 10 .FARADDR 1114081 +000360r 1 E2 FF 10 .FARADDR 1114082 +000363r 1 E3 FF 10 .FARADDR 1114083 +000366r 1 E4 FF 10 .FARADDR 1114084 +000369r 1 E5 FF 10 .FARADDR 1114085 +00036Cr 1 E6 FF 10 .FARADDR 1114086 +00036Fr 1 E7 FF 10 .FARADDR 1114087 +000372r 1 E8 FF 10 .FARADDR 1114088 +000375r 1 E9 FF 10 .FARADDR 1114089 +000378r 1 EA FF 10 .FARADDR 1114090 +00037Br 1 EB FF 10 .FARADDR 1114091 +00037Er 1 EC FF 10 .FARADDR 1114092 +000381r 1 ED FF 10 .FARADDR 1114093 +000384r 1 EE FF 10 .FARADDR 1114094 +000387r 1 EF FF 10 .FARADDR 1114095 +00038Ar 1 F0 FF 10 .FARADDR 1114096 +00038Dr 1 F1 FF 10 .FARADDR 1114097 +000390r 1 F2 FF 10 .FARADDR 1114098 +000393r 1 F3 FF 10 .FARADDR 1114099 +000396r 1 F4 FF 10 .FARADDR 1114100 +000399r 1 F5 FF 10 .FARADDR 1114101 +00039Cr 1 F6 FF 10 .FARADDR 1114102 +00039Fr 1 F7 FF 10 .FARADDR 1114103 +0003A2r 1 F8 FF 10 .FARADDR 1114104 +0003A5r 1 F9 FF 10 .FARADDR 1114105 +0003A8r 1 FA FF 10 .FARADDR 1114106 +0003ABr 1 FB FF 10 .FARADDR 1114107 +0003AEr 1 FC FF 10 .FARADDR 1114108 +0003B1r 1 FD FF 10 .FARADDR 1114109 +0003B4r 1 FE FF 10 .FARADDR 1114110 +0003B7r 1 FF FF 10 .FARADDR 1114111 +0003BAr 1 00 00 11 .FARADDR 1114112 +0003BDr 1 01 00 11 .FARADDR 1114113 +0003C0r 1 02 00 11 .FARADDR 1114114 +0003C3r 1 03 00 11 .FARADDR 1114115 +0003C6r 1 04 00 11 .FARADDR 1114116 +0003C9r 1 05 00 11 .FARADDR 1114117 +0003CCr 1 06 00 11 .FARADDR 1114118 +0003CFr 1 07 00 11 .FARADDR 1114119 +0003D2r 1 08 00 11 .FARADDR 1114120 +0003D5r 1 09 00 11 .FARADDR 1114121 +0003D8r 1 0A 00 11 .FARADDR 1114122 +0003DBr 1 0B 00 11 .FARADDR 1114123 +0003DEr 1 0C 00 11 .FARADDR 1114124 +0003E1r 1 0D 00 11 .FARADDR 1114125 +0003E4r 1 0E 00 11 .FARADDR 1114126 +0003E7r 1 0F 00 11 .FARADDR 1114127 +0003EAr 1 E1 FF 20 .FARADDR 2162657 +0003EDr 1 E2 FF 20 .FARADDR 2162658 +0003F0r 1 E3 FF 20 .FARADDR 2162659 +0003F3r 1 E4 FF 20 .FARADDR 2162660 +0003F6r 1 E5 FF 20 .FARADDR 2162661 +0003F9r 1 E6 FF 20 .FARADDR 2162662 +0003FCr 1 E7 FF 20 .FARADDR 2162663 +0003FFr 1 E8 FF 20 .FARADDR 2162664 +000402r 1 E9 FF 20 .FARADDR 2162665 +000405r 1 EA FF 20 .FARADDR 2162666 +000408r 1 EB FF 20 .FARADDR 2162667 +00040Br 1 EC FF 20 .FARADDR 2162668 +00040Er 1 ED FF 20 .FARADDR 2162669 +000411r 1 EE FF 20 .FARADDR 2162670 +000414r 1 EF FF 20 .FARADDR 2162671 +000417r 1 F0 FF 20 .FARADDR 2162672 +00041Ar 1 F1 FF 20 .FARADDR 2162673 +00041Dr 1 F2 FF 20 .FARADDR 2162674 +000420r 1 F3 FF 20 .FARADDR 2162675 +000423r 1 F4 FF 20 .FARADDR 2162676 +000426r 1 F5 FF 20 .FARADDR 2162677 +000429r 1 F6 FF 20 .FARADDR 2162678 +00042Cr 1 F7 FF 20 .FARADDR 2162679 +00042Fr 1 F8 FF 20 .FARADDR 2162680 +000432r 1 F9 FF 20 .FARADDR 2162681 +000435r 1 FA FF 20 .FARADDR 2162682 +000438r 1 FB FF 20 .FARADDR 2162683 +00043Br 1 FC FF 20 .FARADDR 2162684 +00043Er 1 FD FF 20 .FARADDR 2162685 +000441r 1 FE FF 20 .FARADDR 2162686 +000444r 1 FF FF 20 .FARADDR 2162687 +000447r 1 00 00 21 .FARADDR 2162688 +00044Ar 1 01 00 21 .FARADDR 2162689 +00044Dr 1 02 00 21 .FARADDR 2162690 +000450r 1 03 00 21 .FARADDR 2162691 +000453r 1 04 00 21 .FARADDR 2162692 +000456r 1 05 00 21 .FARADDR 2162693 +000459r 1 06 00 21 .FARADDR 2162694 +00045Cr 1 07 00 21 .FARADDR 2162695 +00045Fr 1 08 00 21 .FARADDR 2162696 +000462r 1 09 00 21 .FARADDR 2162697 +000465r 1 0A 00 21 .FARADDR 2162698 +000468r 1 0B 00 21 .FARADDR 2162699 +00046Br 1 0C 00 21 .FARADDR 2162700 +00046Er 1 0D 00 21 .FARADDR 2162701 +000471r 1 0E 00 21 .FARADDR 2162702 +000474r 1 0F 00 21 .FARADDR 2162703 +000477r 1 E1 FF 7F .FARADDR 8388577 +00047Ar 1 E2 FF 7F .FARADDR 8388578 +00047Dr 1 E3 FF 7F .FARADDR 8388579 +000480r 1 E4 FF 7F .FARADDR 8388580 +000483r 1 E5 FF 7F .FARADDR 8388581 +000486r 1 E6 FF 7F .FARADDR 8388582 +000489r 1 E7 FF 7F .FARADDR 8388583 +00048Cr 1 E8 FF 7F .FARADDR 8388584 +00048Fr 1 E9 FF 7F .FARADDR 8388585 +000492r 1 EA FF 7F .FARADDR 8388586 +000495r 1 EB FF 7F .FARADDR 8388587 +000498r 1 EC FF 7F .FARADDR 8388588 +00049Br 1 ED FF 7F .FARADDR 8388589 +00049Er 1 EE FF 7F .FARADDR 8388590 +0004A1r 1 EF FF 7F .FARADDR 8388591 +0004A4r 1 F0 FF 7F .FARADDR 8388592 +0004A7r 1 F1 FF 7F .FARADDR 8388593 +0004AAr 1 F2 FF 7F .FARADDR 8388594 +0004ADr 1 F3 FF 7F .FARADDR 8388595 +0004B0r 1 F4 FF 7F .FARADDR 8388596 +0004B3r 1 F5 FF 7F .FARADDR 8388597 +0004B6r 1 F6 FF 7F .FARADDR 8388598 +0004B9r 1 F7 FF 7F .FARADDR 8388599 +0004BCr 1 F8 FF 7F .FARADDR 8388600 +0004BFr 1 F9 FF 7F .FARADDR 8388601 +0004C2r 1 FA FF 7F .FARADDR 8388602 +0004C5r 1 FB FF 7F .FARADDR 8388603 +0004C8r 1 FC FF 7F .FARADDR 8388604 +0004CBr 1 FD FF 7F .FARADDR 8388605 +0004CEr 1 FE FF 7F .FARADDR 8388606 +0004D1r 1 FF FF 7F .FARADDR 8388607 +0004D4r 1 00 00 80 .FARADDR 8388608 +0004D7r 1 01 00 80 .FARADDR 8388609 +0004DAr 1 02 00 80 .FARADDR 8388610 +0004DDr 1 03 00 80 .FARADDR 8388611 +0004E0r 1 04 00 80 .FARADDR 8388612 +0004E3r 1 05 00 80 .FARADDR 8388613 +0004E6r 1 06 00 80 .FARADDR 8388614 +0004E9r 1 07 00 80 .FARADDR 8388615 +0004ECr 1 08 00 80 .FARADDR 8388616 +0004EFr 1 09 00 80 .FARADDR 8388617 +0004F2r 1 0A 00 80 .FARADDR 8388618 +0004F5r 1 0B 00 80 .FARADDR 8388619 +0004F8r 1 0C 00 80 .FARADDR 8388620 +0004FBr 1 0D 00 80 .FARADDR 8388621 +0004FEr 1 0E 00 80 .FARADDR 8388622 +000501r 1 0F 00 80 .FARADDR 8388623 +000504r 1 E1 FF 9F .FARADDR 10485729 +000507r 1 E2 FF 9F .FARADDR 10485730 +00050Ar 1 E3 FF 9F .FARADDR 10485731 +00050Dr 1 E4 FF 9F .FARADDR 10485732 +000510r 1 E5 FF 9F .FARADDR 10485733 +000513r 1 E6 FF 9F .FARADDR 10485734 +000516r 1 E7 FF 9F .FARADDR 10485735 +000519r 1 E8 FF 9F .FARADDR 10485736 +00051Cr 1 E9 FF 9F .FARADDR 10485737 +00051Fr 1 EA FF 9F .FARADDR 10485738 +000522r 1 EB FF 9F .FARADDR 10485739 +000525r 1 EC FF 9F .FARADDR 10485740 +000528r 1 ED FF 9F .FARADDR 10485741 +00052Br 1 EE FF 9F .FARADDR 10485742 +00052Er 1 EF FF 9F .FARADDR 10485743 +000531r 1 F0 FF 9F .FARADDR 10485744 +000534r 1 F1 FF 9F .FARADDR 10485745 +000537r 1 F2 FF 9F .FARADDR 10485746 +00053Ar 1 F3 FF 9F .FARADDR 10485747 +00053Dr 1 F4 FF 9F .FARADDR 10485748 +000540r 1 F5 FF 9F .FARADDR 10485749 +000543r 1 F6 FF 9F .FARADDR 10485750 +000546r 1 F7 FF 9F .FARADDR 10485751 +000549r 1 F8 FF 9F .FARADDR 10485752 +00054Cr 1 F9 FF 9F .FARADDR 10485753 +00054Fr 1 FA FF 9F .FARADDR 10485754 +000552r 1 FB FF 9F .FARADDR 10485755 +000555r 1 FC FF 9F .FARADDR 10485756 +000558r 1 FD FF 9F .FARADDR 10485757 +00055Br 1 FE FF 9F .FARADDR 10485758 +00055Er 1 FF FF 9F .FARADDR 10485759 +000561r 1 00 00 A0 .FARADDR 10485760 +000564r 1 01 00 A0 .FARADDR 10485761 +000567r 1 02 00 A0 .FARADDR 10485762 +00056Ar 1 03 00 A0 .FARADDR 10485763 +00056Dr 1 04 00 A0 .FARADDR 10485764 +000570r 1 05 00 A0 .FARADDR 10485765 +000573r 1 06 00 A0 .FARADDR 10485766 +000576r 1 07 00 A0 .FARADDR 10485767 +000579r 1 08 00 A0 .FARADDR 10485768 +00057Cr 1 09 00 A0 .FARADDR 10485769 +00057Fr 1 0A 00 A0 .FARADDR 10485770 +000582r 1 0B 00 A0 .FARADDR 10485771 +000585r 1 0C 00 A0 .FARADDR 10485772 +000588r 1 0D 00 A0 .FARADDR 10485773 +00058Br 1 0E 00 A0 .FARADDR 10485774 +00058Er 1 0F 00 A0 .FARADDR 10485775 +000591r 1 E1 FF FF .FARADDR 16777185 +000594r 1 E2 FF FF .FARADDR 16777186 +000597r 1 E3 FF FF .FARADDR 16777187 +00059Ar 1 E4 FF FF .FARADDR 16777188 +00059Dr 1 E5 FF FF .FARADDR 16777189 +0005A0r 1 E6 FF FF .FARADDR 16777190 +0005A3r 1 E7 FF FF .FARADDR 16777191 +0005A6r 1 E8 FF FF .FARADDR 16777192 +0005A9r 1 E9 FF FF .FARADDR 16777193 +0005ACr 1 EA FF FF .FARADDR 16777194 +0005AFr 1 EB FF FF .FARADDR 16777195 +0005B2r 1 EC FF FF .FARADDR 16777196 +0005B5r 1 ED FF FF .FARADDR 16777197 +0005B8r 1 EE FF FF .FARADDR 16777198 +0005BBr 1 EF FF FF .FARADDR 16777199 +0005BEr 1 F0 FF FF .FARADDR 16777200 +0005C1r 1 F1 FF FF .FARADDR 16777201 +0005C4r 1 F2 FF FF .FARADDR 16777202 +0005C7r 1 F3 FF FF .FARADDR 16777203 +0005CAr 1 F4 FF FF .FARADDR 16777204 +0005CDr 1 F5 FF FF .FARADDR 16777205 +0005D0r 1 F6 FF FF .FARADDR 16777206 +0005D3r 1 F7 FF FF .FARADDR 16777207 +0005D6r 1 F8 FF FF .FARADDR 16777208 +0005D9r 1 F9 FF FF .FARADDR 16777209 +0005DCr 1 FA FF FF .FARADDR 16777210 +0005DFr 1 FB FF FF .FARADDR 16777211 +0005E2r 1 FC FF FF .FARADDR 16777212 +0005E5r 1 FD FF FF .FARADDR 16777213 +0005E8r 1 FE FF FF .FARADDR 16777214 +0005EBr 1 FF FF FF .FARADDR 16777215 0005EEr 1 -0005EEr 1 ; lower case pseudo-op -0005EEr 1 00 00 00 .faraddr 0 -0005F1r 1 01 00 00 .faraddr 1 -0005F4r 1 02 00 00 .faraddr 2 -0005F7r 1 03 00 00 .faraddr 3 -0005FAr 1 04 00 00 .faraddr 4 -0005FDr 1 05 00 00 .faraddr 5 -000600r 1 06 00 00 .faraddr 6 -000603r 1 07 00 00 .faraddr 7 -000606r 1 08 00 00 .faraddr 8 -000609r 1 09 00 00 .faraddr 9 -00060Cr 1 0A 00 00 .faraddr 10 -00060Fr 1 0B 00 00 .faraddr 11 -000612r 1 0C 00 00 .faraddr 12 -000615r 1 0D 00 00 .faraddr 13 -000618r 1 0E 00 00 .faraddr 14 -00061Br 1 0F 00 00 .faraddr 15 -00061Er 1 10 00 00 .faraddr 16 -000621r 1 11 00 00 .faraddr 17 -000624r 1 12 00 00 .faraddr 18 -000627r 1 13 00 00 .faraddr 19 -00062Ar 1 70 00 00 .faraddr 112 -00062Dr 1 71 00 00 .faraddr 113 -000630r 1 72 00 00 .faraddr 114 -000633r 1 73 00 00 .faraddr 115 -000636r 1 74 00 00 .faraddr 116 -000639r 1 75 00 00 .faraddr 117 -00063Cr 1 76 00 00 .faraddr 118 -00063Fr 1 77 00 00 .faraddr 119 -000642r 1 78 00 00 .faraddr 120 -000645r 1 79 00 00 .faraddr 121 -000648r 1 7A 00 00 .faraddr 122 -00064Br 1 7B 00 00 .faraddr 123 -00064Er 1 7C 00 00 .faraddr 124 -000651r 1 7D 00 00 .faraddr 125 -000654r 1 7E 00 00 .faraddr 126 -000657r 1 7F 00 00 .faraddr 127 -00065Ar 1 80 00 00 .faraddr 128 -00065Dr 1 81 00 00 .faraddr 129 -000660r 1 82 00 00 .faraddr 130 -000663r 1 83 00 00 .faraddr 131 -000666r 1 84 00 00 .faraddr 132 -000669r 1 85 00 00 .faraddr 133 -00066Cr 1 86 00 00 .faraddr 134 -00066Fr 1 F0 00 00 .faraddr 240 -000672r 1 F1 00 00 .faraddr 241 -000675r 1 F2 00 00 .faraddr 242 -000678r 1 F3 00 00 .faraddr 243 -00067Br 1 F4 00 00 .faraddr 244 -00067Er 1 F5 00 00 .faraddr 245 -000681r 1 F6 00 00 .faraddr 246 -000684r 1 F7 00 00 .faraddr 247 -000687r 1 F8 00 00 .faraddr 248 -00068Ar 1 F9 00 00 .faraddr 249 -00068Dr 1 FA 00 00 .faraddr 250 -000690r 1 FB 00 00 .faraddr 251 -000693r 1 FC 00 00 .faraddr 252 -000696r 1 FD 00 00 .faraddr 253 -000699r 1 FE 00 00 .faraddr 254 -00069Cr 1 FF 00 00 .faraddr 255 -00069Fr 1 00 01 00 .faraddr 256 -0006A2r 1 01 01 00 .faraddr 257 -0006A5r 1 02 01 00 .faraddr 258 -0006A8r 1 03 01 00 .faraddr 259 -0006ABr 1 D2 0F 00 .faraddr 4050 -0006AEr 1 D3 0F 00 .faraddr 4051 -0006B1r 1 D4 0F 00 .faraddr 4052 -0006B4r 1 D5 0F 00 .faraddr 4053 -0006B7r 1 D6 0F 00 .faraddr 4054 -0006BAr 1 D7 0F 00 .faraddr 4055 -0006BDr 1 D8 0F 00 .faraddr 4056 -0006C0r 1 D9 0F 00 .faraddr 4057 -0006C3r 1 DA 0F 00 .faraddr 4058 -0006C6r 1 DB 0F 00 .faraddr 4059 -0006C9r 1 DC 0F 00 .faraddr 4060 -0006CCr 1 DD 0F 00 .faraddr 4061 -0006CFr 1 DE 0F 00 .faraddr 4062 -0006D2r 1 DF 0F 00 .faraddr 4063 -0006D5r 1 E0 0F 00 .faraddr 4064 -0006D8r 1 E1 0F 00 .faraddr 4065 -0006DBr 1 E2 0F 00 .faraddr 4066 -0006DEr 1 E3 0F 00 .faraddr 4067 -0006E1r 1 E4 0F 00 .faraddr 4068 -0006E4r 1 E5 0F 00 .faraddr 4069 -0006E7r 1 E6 0F 00 .faraddr 4070 -0006EAr 1 E7 0F 00 .faraddr 4071 -0006EDr 1 E8 0F 00 .faraddr 4072 -0006F0r 1 E9 0F 00 .faraddr 4073 -0006F3r 1 EA 0F 00 .faraddr 4074 -0006F6r 1 EB 0F 00 .faraddr 4075 -0006F9r 1 EC 0F 00 .faraddr 4076 -0006FCr 1 ED 0F 00 .faraddr 4077 -0006FFr 1 EE 0F 00 .faraddr 4078 -000702r 1 EF 0F 00 .faraddr 4079 -000705r 1 F0 0F 00 .faraddr 4080 -000708r 1 F1 0F 00 .faraddr 4081 -00070Br 1 F2 0F 00 .faraddr 4082 -00070Er 1 F3 0F 00 .faraddr 4083 -000711r 1 F4 0F 00 .faraddr 4084 -000714r 1 F5 0F 00 .faraddr 4085 -000717r 1 F6 0F 00 .faraddr 4086 -00071Ar 1 F7 0F 00 .faraddr 4087 -00071Dr 1 F8 0F 00 .faraddr 4088 -000720r 1 F9 0F 00 .faraddr 4089 -000723r 1 FA 0F 00 .faraddr 4090 -000726r 1 FB 0F 00 .faraddr 4091 -000729r 1 FC 0F 00 .faraddr 4092 -00072Cr 1 FD 0F 00 .faraddr 4093 -00072Fr 1 FE 0F 00 .faraddr 4094 -000732r 1 FF 0F 00 .faraddr 4095 -000735r 1 00 10 00 .faraddr 4096 -000738r 1 01 10 00 .faraddr 4097 -00073Br 1 02 10 00 .faraddr 4098 -00073Er 1 03 10 00 .faraddr 4099 -000741r 1 04 10 00 .faraddr 4100 -000744r 1 05 10 00 .faraddr 4101 -000747r 1 06 10 00 .faraddr 4102 -00074Ar 1 07 10 00 .faraddr 4103 -00074Dr 1 08 10 00 .faraddr 4104 -000750r 1 F0 7F 00 .faraddr 32752 -000753r 1 F1 7F 00 .faraddr 32753 -000756r 1 F2 7F 00 .faraddr 32754 -000759r 1 F3 7F 00 .faraddr 32755 -00075Cr 1 F4 7F 00 .faraddr 32756 -00075Fr 1 F5 7F 00 .faraddr 32757 -000762r 1 F6 7F 00 .faraddr 32758 -000765r 1 F7 7F 00 .faraddr 32759 -000768r 1 F8 7F 00 .faraddr 32760 -00076Br 1 F9 7F 00 .faraddr 32761 -00076Er 1 FA 7F 00 .faraddr 32762 -000771r 1 FB 7F 00 .faraddr 32763 -000774r 1 FC 7F 00 .faraddr 32764 -000777r 1 FD 7F 00 .faraddr 32765 -00077Ar 1 FE 7F 00 .faraddr 32766 -00077Dr 1 FF 7F 00 .faraddr 32767 -000780r 1 00 80 00 .faraddr 32768 -000783r 1 01 80 00 .faraddr 32769 -000786r 1 02 80 00 .faraddr 32770 -000789r 1 03 80 00 .faraddr 32771 -00078Cr 1 04 80 00 .faraddr 32772 -00078Fr 1 05 80 00 .faraddr 32773 -000792r 1 06 80 00 .faraddr 32774 -000795r 1 07 80 00 .faraddr 32775 -000798r 1 08 80 00 .faraddr 32776 -00079Br 1 09 80 00 .faraddr 32777 -00079Er 1 0A 80 00 .faraddr 32778 -0007A1r 1 0B 80 00 .faraddr 32779 -0007A4r 1 E1 9F 00 .faraddr 40929 -0007A7r 1 E2 9F 00 .faraddr 40930 -0007AAr 1 E3 9F 00 .faraddr 40931 -0007ADr 1 E4 9F 00 .faraddr 40932 -0007B0r 1 E5 9F 00 .faraddr 40933 -0007B3r 1 E6 9F 00 .faraddr 40934 -0007B6r 1 E7 9F 00 .faraddr 40935 -0007B9r 1 E8 9F 00 .faraddr 40936 -0007BCr 1 E9 9F 00 .faraddr 40937 -0007BFr 1 EA 9F 00 .faraddr 40938 -0007C2r 1 EB 9F 00 .faraddr 40939 -0007C5r 1 EC 9F 00 .faraddr 40940 -0007C8r 1 ED 9F 00 .faraddr 40941 -0007CBr 1 EE 9F 00 .faraddr 40942 -0007CEr 1 EF 9F 00 .faraddr 40943 -0007D1r 1 F0 9F 00 .faraddr 40944 -0007D4r 1 F1 9F 00 .faraddr 40945 -0007D7r 1 F2 9F 00 .faraddr 40946 -0007DAr 1 F3 9F 00 .faraddr 40947 -0007DDr 1 F4 9F 00 .faraddr 40948 -0007E0r 1 F5 9F 00 .faraddr 40949 -0007E3r 1 F6 9F 00 .faraddr 40950 -0007E6r 1 F7 9F 00 .faraddr 40951 -0007E9r 1 F8 9F 00 .faraddr 40952 -0007ECr 1 F9 9F 00 .faraddr 40953 -0007EFr 1 FA 9F 00 .faraddr 40954 -0007F2r 1 FB 9F 00 .faraddr 40955 -0007F5r 1 FC 9F 00 .faraddr 40956 -0007F8r 1 FD 9F 00 .faraddr 40957 -0007FBr 1 FE 9F 00 .faraddr 40958 -0007FEr 1 FF 9F 00 .faraddr 40959 -000801r 1 00 A0 00 .faraddr 40960 -000804r 1 01 A0 00 .faraddr 40961 -000807r 1 02 A0 00 .faraddr 40962 -00080Ar 1 03 A0 00 .faraddr 40963 -00080Dr 1 04 A0 00 .faraddr 40964 -000810r 1 05 A0 00 .faraddr 40965 -000813r 1 06 A0 00 .faraddr 40966 -000816r 1 07 A0 00 .faraddr 40967 -000819r 1 08 A0 00 .faraddr 40968 -00081Cr 1 09 A0 00 .faraddr 40969 -00081Fr 1 0A A0 00 .faraddr 40970 -000822r 1 0B A0 00 .faraddr 40971 -000825r 1 0C A0 00 .faraddr 40972 -000828r 1 0D A0 00 .faraddr 40973 -00082Br 1 0E A0 00 .faraddr 40974 -00082Er 1 0F A0 00 .faraddr 40975 -000831r 1 E1 AF 00 .faraddr 45025 -000834r 1 E2 AF 00 .faraddr 45026 -000837r 1 E3 AF 00 .faraddr 45027 -00083Ar 1 E4 AF 00 .faraddr 45028 -00083Dr 1 E5 AF 00 .faraddr 45029 -000840r 1 E6 AF 00 .faraddr 45030 -000843r 1 E7 AF 00 .faraddr 45031 -000846r 1 E8 AF 00 .faraddr 45032 -000849r 1 E9 AF 00 .faraddr 45033 -00084Cr 1 EA AF 00 .faraddr 45034 -00084Fr 1 EB AF 00 .faraddr 45035 -000852r 1 EC AF 00 .faraddr 45036 -000855r 1 ED AF 00 .faraddr 45037 -000858r 1 EE AF 00 .faraddr 45038 -00085Br 1 EF AF 00 .faraddr 45039 -00085Er 1 F0 AF 00 .faraddr 45040 -000861r 1 F1 AF 00 .faraddr 45041 -000864r 1 F2 AF 00 .faraddr 45042 -000867r 1 F3 AF 00 .faraddr 45043 -00086Ar 1 F4 AF 00 .faraddr 45044 -00086Dr 1 F5 AF 00 .faraddr 45045 -000870r 1 F6 AF 00 .faraddr 45046 -000873r 1 F7 AF 00 .faraddr 45047 -000876r 1 F8 AF 00 .faraddr 45048 -000879r 1 F9 AF 00 .faraddr 45049 -00087Cr 1 FA AF 00 .faraddr 45050 -00087Fr 1 FB AF 00 .faraddr 45051 -000882r 1 FC AF 00 .faraddr 45052 -000885r 1 FD AF 00 .faraddr 45053 -000888r 1 FE AF 00 .faraddr 45054 -00088Br 1 FF AF 00 .faraddr 45055 -00088Er 1 00 B0 00 .faraddr 45056 -000891r 1 01 B0 00 .faraddr 45057 -000894r 1 02 B0 00 .faraddr 45058 -000897r 1 03 B0 00 .faraddr 45059 -00089Ar 1 04 B0 00 .faraddr 45060 -00089Dr 1 05 B0 00 .faraddr 45061 -0008A0r 1 06 B0 00 .faraddr 45062 -0008A3r 1 07 B0 00 .faraddr 45063 -0008A6r 1 08 B0 00 .faraddr 45064 -0008A9r 1 09 B0 00 .faraddr 45065 -0008ACr 1 0A B0 00 .faraddr 45066 -0008AFr 1 0B B0 00 .faraddr 45067 -0008B2r 1 0C B0 00 .faraddr 45068 -0008B5r 1 0D B0 00 .faraddr 45069 -0008B8r 1 0E B0 00 .faraddr 45070 -0008BBr 1 0F B0 00 .faraddr 45071 -0008BEr 1 E1 FF 00 .faraddr 65505 -0008C1r 1 E2 FF 00 .faraddr 65506 -0008C4r 1 E3 FF 00 .faraddr 65507 -0008C7r 1 E4 FF 00 .faraddr 65508 -0008CAr 1 E5 FF 00 .faraddr 65509 -0008CDr 1 E6 FF 00 .faraddr 65510 -0008D0r 1 E7 FF 00 .faraddr 65511 -0008D3r 1 E8 FF 00 .faraddr 65512 -0008D6r 1 E9 FF 00 .faraddr 65513 -0008D9r 1 EA FF 00 .faraddr 65514 -0008DCr 1 EB FF 00 .faraddr 65515 -0008DFr 1 EC FF 00 .faraddr 65516 -0008E2r 1 ED FF 00 .faraddr 65517 -0008E5r 1 EE FF 00 .faraddr 65518 -0008E8r 1 EF FF 00 .faraddr 65519 -0008EBr 1 F0 FF 00 .faraddr 65520 -0008EEr 1 F1 FF 00 .faraddr 65521 -0008F1r 1 F2 FF 00 .faraddr 65522 -0008F4r 1 F3 FF 00 .faraddr 65523 -0008F7r 1 F4 FF 00 .faraddr 65524 -0008FAr 1 F5 FF 00 .faraddr 65525 -0008FDr 1 F6 FF 00 .faraddr 65526 -000900r 1 F7 FF 00 .faraddr 65527 -000903r 1 F8 FF 00 .faraddr 65528 -000906r 1 F9 FF 00 .faraddr 65529 -000909r 1 FA FF 00 .faraddr 65530 -00090Cr 1 FB FF 00 .faraddr 65531 -00090Fr 1 FC FF 00 .faraddr 65532 -000912r 1 FD FF 00 .faraddr 65533 -000915r 1 FE FF 00 .faraddr 65534 -000918r 1 FF FF 00 .faraddr 65535 -00091Br 1 00 00 01 .faraddr 65536 -00091Er 1 01 00 01 .faraddr 65537 -000921r 1 02 00 01 .faraddr 65538 -000924r 1 03 00 01 .faraddr 65539 -000927r 1 04 00 01 .faraddr 65540 -00092Ar 1 05 00 01 .faraddr 65541 -00092Dr 1 06 00 01 .faraddr 65542 -000930r 1 07 00 01 .faraddr 65543 -000933r 1 08 00 01 .faraddr 65544 -000936r 1 09 00 01 .faraddr 65545 -000939r 1 0A 00 01 .faraddr 65546 -00093Cr 1 0B 00 01 .faraddr 65547 -00093Fr 1 0C 00 01 .faraddr 65548 -000942r 1 0D 00 01 .faraddr 65549 -000945r 1 0E 00 01 .faraddr 65550 -000948r 1 0F 00 01 .faraddr 65551 -00094Br 1 E1 FF 10 .faraddr 1114081 -00094Er 1 E2 FF 10 .faraddr 1114082 -000951r 1 E3 FF 10 .faraddr 1114083 -000954r 1 E4 FF 10 .faraddr 1114084 -000957r 1 E5 FF 10 .faraddr 1114085 -00095Ar 1 E6 FF 10 .faraddr 1114086 -00095Dr 1 E7 FF 10 .faraddr 1114087 -000960r 1 E8 FF 10 .faraddr 1114088 -000963r 1 E9 FF 10 .faraddr 1114089 -000966r 1 EA FF 10 .faraddr 1114090 -000969r 1 EB FF 10 .faraddr 1114091 -00096Cr 1 EC FF 10 .faraddr 1114092 -00096Fr 1 ED FF 10 .faraddr 1114093 -000972r 1 EE FF 10 .faraddr 1114094 -000975r 1 EF FF 10 .faraddr 1114095 -000978r 1 F0 FF 10 .faraddr 1114096 -00097Br 1 F1 FF 10 .faraddr 1114097 -00097Er 1 F2 FF 10 .faraddr 1114098 -000981r 1 F3 FF 10 .faraddr 1114099 -000984r 1 F4 FF 10 .faraddr 1114100 -000987r 1 F5 FF 10 .faraddr 1114101 -00098Ar 1 F6 FF 10 .faraddr 1114102 -00098Dr 1 F7 FF 10 .faraddr 1114103 -000990r 1 F8 FF 10 .faraddr 1114104 -000993r 1 F9 FF 10 .faraddr 1114105 -000996r 1 FA FF 10 .faraddr 1114106 -000999r 1 FB FF 10 .faraddr 1114107 -00099Cr 1 FC FF 10 .faraddr 1114108 -00099Fr 1 FD FF 10 .faraddr 1114109 -0009A2r 1 FE FF 10 .faraddr 1114110 -0009A5r 1 FF FF 10 .faraddr 1114111 -0009A8r 1 00 00 11 .faraddr 1114112 -0009ABr 1 01 00 11 .faraddr 1114113 -0009AEr 1 02 00 11 .faraddr 1114114 -0009B1r 1 03 00 11 .faraddr 1114115 -0009B4r 1 04 00 11 .faraddr 1114116 -0009B7r 1 05 00 11 .faraddr 1114117 -0009BAr 1 06 00 11 .faraddr 1114118 -0009BDr 1 07 00 11 .faraddr 1114119 -0009C0r 1 08 00 11 .faraddr 1114120 -0009C3r 1 09 00 11 .faraddr 1114121 -0009C6r 1 0A 00 11 .faraddr 1114122 -0009C9r 1 0B 00 11 .faraddr 1114123 -0009CCr 1 0C 00 11 .faraddr 1114124 -0009CFr 1 0D 00 11 .faraddr 1114125 -0009D2r 1 0E 00 11 .faraddr 1114126 -0009D5r 1 0F 00 11 .faraddr 1114127 -0009D8r 1 E1 FF 20 .faraddr 2162657 -0009DBr 1 E2 FF 20 .faraddr 2162658 -0009DEr 1 E3 FF 20 .faraddr 2162659 -0009E1r 1 E4 FF 20 .faraddr 2162660 -0009E4r 1 E5 FF 20 .faraddr 2162661 -0009E7r 1 E6 FF 20 .faraddr 2162662 -0009EAr 1 E7 FF 20 .faraddr 2162663 -0009EDr 1 E8 FF 20 .faraddr 2162664 -0009F0r 1 E9 FF 20 .faraddr 2162665 -0009F3r 1 EA FF 20 .faraddr 2162666 -0009F6r 1 EB FF 20 .faraddr 2162667 -0009F9r 1 EC FF 20 .faraddr 2162668 -0009FCr 1 ED FF 20 .faraddr 2162669 -0009FFr 1 EE FF 20 .faraddr 2162670 -000A02r 1 EF FF 20 .faraddr 2162671 -000A05r 1 F0 FF 20 .faraddr 2162672 -000A08r 1 F1 FF 20 .faraddr 2162673 -000A0Br 1 F2 FF 20 .faraddr 2162674 -000A0Er 1 F3 FF 20 .faraddr 2162675 -000A11r 1 F4 FF 20 .faraddr 2162676 -000A14r 1 F5 FF 20 .faraddr 2162677 -000A17r 1 F6 FF 20 .faraddr 2162678 -000A1Ar 1 F7 FF 20 .faraddr 2162679 -000A1Dr 1 F8 FF 20 .faraddr 2162680 -000A20r 1 F9 FF 20 .faraddr 2162681 -000A23r 1 FA FF 20 .faraddr 2162682 -000A26r 1 FB FF 20 .faraddr 2162683 -000A29r 1 FC FF 20 .faraddr 2162684 -000A2Cr 1 FD FF 20 .faraddr 2162685 -000A2Fr 1 FE FF 20 .faraddr 2162686 -000A32r 1 FF FF 20 .faraddr 2162687 -000A35r 1 00 00 21 .faraddr 2162688 -000A38r 1 01 00 21 .faraddr 2162689 -000A3Br 1 02 00 21 .faraddr 2162690 -000A3Er 1 03 00 21 .faraddr 2162691 -000A41r 1 04 00 21 .faraddr 2162692 -000A44r 1 05 00 21 .faraddr 2162693 -000A47r 1 06 00 21 .faraddr 2162694 -000A4Ar 1 07 00 21 .faraddr 2162695 -000A4Dr 1 08 00 21 .faraddr 2162696 -000A50r 1 09 00 21 .faraddr 2162697 -000A53r 1 0A 00 21 .faraddr 2162698 -000A56r 1 0B 00 21 .faraddr 2162699 -000A59r 1 0C 00 21 .faraddr 2162700 -000A5Cr 1 0D 00 21 .faraddr 2162701 -000A5Fr 1 0E 00 21 .faraddr 2162702 -000A62r 1 0F 00 21 .faraddr 2162703 -000A65r 1 E1 FF 7F .faraddr 8388577 -000A68r 1 E2 FF 7F .faraddr 8388578 -000A6Br 1 E3 FF 7F .faraddr 8388579 -000A6Er 1 E4 FF 7F .faraddr 8388580 -000A71r 1 E5 FF 7F .faraddr 8388581 -000A74r 1 E6 FF 7F .faraddr 8388582 -000A77r 1 E7 FF 7F .faraddr 8388583 -000A7Ar 1 E8 FF 7F .faraddr 8388584 -000A7Dr 1 E9 FF 7F .faraddr 8388585 -000A80r 1 EA FF 7F .faraddr 8388586 -000A83r 1 EB FF 7F .faraddr 8388587 -000A86r 1 EC FF 7F .faraddr 8388588 -000A89r 1 ED FF 7F .faraddr 8388589 -000A8Cr 1 EE FF 7F .faraddr 8388590 -000A8Fr 1 EF FF 7F .faraddr 8388591 -000A92r 1 F0 FF 7F .faraddr 8388592 -000A95r 1 F1 FF 7F .faraddr 8388593 -000A98r 1 F2 FF 7F .faraddr 8388594 -000A9Br 1 F3 FF 7F .faraddr 8388595 -000A9Er 1 F4 FF 7F .faraddr 8388596 -000AA1r 1 F5 FF 7F .faraddr 8388597 -000AA4r 1 F6 FF 7F .faraddr 8388598 -000AA7r 1 F7 FF 7F .faraddr 8388599 -000AAAr 1 F8 FF 7F .faraddr 8388600 -000AADr 1 F9 FF 7F .faraddr 8388601 -000AB0r 1 FA FF 7F .faraddr 8388602 -000AB3r 1 FB FF 7F .faraddr 8388603 -000AB6r 1 FC FF 7F .faraddr 8388604 -000AB9r 1 FD FF 7F .faraddr 8388605 -000ABCr 1 FE FF 7F .faraddr 8388606 -000ABFr 1 FF FF 7F .faraddr 8388607 -000AC2r 1 00 00 80 .faraddr 8388608 -000AC5r 1 01 00 80 .faraddr 8388609 -000AC8r 1 02 00 80 .faraddr 8388610 -000ACBr 1 03 00 80 .faraddr 8388611 -000ACEr 1 04 00 80 .faraddr 8388612 -000AD1r 1 05 00 80 .faraddr 8388613 -000AD4r 1 06 00 80 .faraddr 8388614 -000AD7r 1 07 00 80 .faraddr 8388615 -000ADAr 1 08 00 80 .faraddr 8388616 -000ADDr 1 09 00 80 .faraddr 8388617 -000AE0r 1 0A 00 80 .faraddr 8388618 -000AE3r 1 0B 00 80 .faraddr 8388619 -000AE6r 1 0C 00 80 .faraddr 8388620 -000AE9r 1 0D 00 80 .faraddr 8388621 -000AECr 1 0E 00 80 .faraddr 8388622 -000AEFr 1 0F 00 80 .faraddr 8388623 -000AF2r 1 E1 FF 9F .faraddr 10485729 -000AF5r 1 E2 FF 9F .faraddr 10485730 -000AF8r 1 E3 FF 9F .faraddr 10485731 -000AFBr 1 E4 FF 9F .faraddr 10485732 -000AFEr 1 E5 FF 9F .faraddr 10485733 -000B01r 1 E6 FF 9F .faraddr 10485734 -000B04r 1 E7 FF 9F .faraddr 10485735 -000B07r 1 E8 FF 9F .faraddr 10485736 -000B0Ar 1 E9 FF 9F .faraddr 10485737 -000B0Dr 1 EA FF 9F .faraddr 10485738 -000B10r 1 EB FF 9F .faraddr 10485739 -000B13r 1 EC FF 9F .faraddr 10485740 -000B16r 1 ED FF 9F .faraddr 10485741 -000B19r 1 EE FF 9F .faraddr 10485742 -000B1Cr 1 EF FF 9F .faraddr 10485743 -000B1Fr 1 F0 FF 9F .faraddr 10485744 -000B22r 1 F1 FF 9F .faraddr 10485745 -000B25r 1 F2 FF 9F .faraddr 10485746 -000B28r 1 F3 FF 9F .faraddr 10485747 -000B2Br 1 F4 FF 9F .faraddr 10485748 -000B2Er 1 F5 FF 9F .faraddr 10485749 -000B31r 1 F6 FF 9F .faraddr 10485750 -000B34r 1 F7 FF 9F .faraddr 10485751 -000B37r 1 F8 FF 9F .faraddr 10485752 -000B3Ar 1 F9 FF 9F .faraddr 10485753 -000B3Dr 1 FA FF 9F .faraddr 10485754 -000B40r 1 FB FF 9F .faraddr 10485755 -000B43r 1 FC FF 9F .faraddr 10485756 -000B46r 1 FD FF 9F .faraddr 10485757 -000B49r 1 FE FF 9F .faraddr 10485758 -000B4Cr 1 FF FF 9F .faraddr 10485759 -000B4Fr 1 00 00 A0 .faraddr 10485760 -000B52r 1 01 00 A0 .faraddr 10485761 -000B55r 1 02 00 A0 .faraddr 10485762 -000B58r 1 03 00 A0 .faraddr 10485763 -000B5Br 1 04 00 A0 .faraddr 10485764 -000B5Er 1 05 00 A0 .faraddr 10485765 -000B61r 1 06 00 A0 .faraddr 10485766 -000B64r 1 07 00 A0 .faraddr 10485767 -000B67r 1 08 00 A0 .faraddr 10485768 -000B6Ar 1 09 00 A0 .faraddr 10485769 -000B6Dr 1 0A 00 A0 .faraddr 10485770 -000B70r 1 0B 00 A0 .faraddr 10485771 -000B73r 1 0C 00 A0 .faraddr 10485772 -000B76r 1 0D 00 A0 .faraddr 10485773 -000B79r 1 0E 00 A0 .faraddr 10485774 -000B7Cr 1 0F 00 A0 .faraddr 10485775 -000B7Fr 1 E1 FF FF .faraddr 16777185 -000B82r 1 E2 FF FF .faraddr 16777186 -000B85r 1 E3 FF FF .faraddr 16777187 -000B88r 1 E4 FF FF .faraddr 16777188 -000B8Br 1 E5 FF FF .faraddr 16777189 -000B8Er 1 E6 FF FF .faraddr 16777190 -000B91r 1 E7 FF FF .faraddr 16777191 -000B94r 1 E8 FF FF .faraddr 16777192 -000B97r 1 E9 FF FF .faraddr 16777193 -000B9Ar 1 EA FF FF .faraddr 16777194 -000B9Dr 1 EB FF FF .faraddr 16777195 -000BA0r 1 EC FF FF .faraddr 16777196 -000BA3r 1 ED FF FF .faraddr 16777197 -000BA6r 1 EE FF FF .faraddr 16777198 -000BA9r 1 EF FF FF .faraddr 16777199 -000BACr 1 F0 FF FF .faraddr 16777200 -000BAFr 1 F1 FF FF .faraddr 16777201 -000BB2r 1 F2 FF FF .faraddr 16777202 -000BB5r 1 F3 FF FF .faraddr 16777203 -000BB8r 1 F4 FF FF .faraddr 16777204 -000BBBr 1 F5 FF FF .faraddr 16777205 -000BBEr 1 F6 FF FF .faraddr 16777206 -000BC1r 1 F7 FF FF .faraddr 16777207 -000BC4r 1 F8 FF FF .faraddr 16777208 -000BC7r 1 F9 FF FF .faraddr 16777209 -000BCAr 1 FA FF FF .faraddr 16777210 -000BCDr 1 FB FF FF .faraddr 16777211 -000BD0r 1 FC FF FF .faraddr 16777212 -000BD3r 1 FD FF FF .faraddr 16777213 -000BD6r 1 FE FF FF .faraddr 16777214 -000BD9r 1 FF FF FF .faraddr 16777215 +0005EEr 1 ; lower case pseudo-op +0005EEr 1 00 00 00 .faraddr 0 +0005F1r 1 01 00 00 .faraddr 1 +0005F4r 1 02 00 00 .faraddr 2 +0005F7r 1 03 00 00 .faraddr 3 +0005FAr 1 04 00 00 .faraddr 4 +0005FDr 1 05 00 00 .faraddr 5 +000600r 1 06 00 00 .faraddr 6 +000603r 1 07 00 00 .faraddr 7 +000606r 1 08 00 00 .faraddr 8 +000609r 1 09 00 00 .faraddr 9 +00060Cr 1 0A 00 00 .faraddr 10 +00060Fr 1 0B 00 00 .faraddr 11 +000612r 1 0C 00 00 .faraddr 12 +000615r 1 0D 00 00 .faraddr 13 +000618r 1 0E 00 00 .faraddr 14 +00061Br 1 0F 00 00 .faraddr 15 +00061Er 1 10 00 00 .faraddr 16 +000621r 1 11 00 00 .faraddr 17 +000624r 1 12 00 00 .faraddr 18 +000627r 1 13 00 00 .faraddr 19 +00062Ar 1 70 00 00 .faraddr 112 +00062Dr 1 71 00 00 .faraddr 113 +000630r 1 72 00 00 .faraddr 114 +000633r 1 73 00 00 .faraddr 115 +000636r 1 74 00 00 .faraddr 116 +000639r 1 75 00 00 .faraddr 117 +00063Cr 1 76 00 00 .faraddr 118 +00063Fr 1 77 00 00 .faraddr 119 +000642r 1 78 00 00 .faraddr 120 +000645r 1 79 00 00 .faraddr 121 +000648r 1 7A 00 00 .faraddr 122 +00064Br 1 7B 00 00 .faraddr 123 +00064Er 1 7C 00 00 .faraddr 124 +000651r 1 7D 00 00 .faraddr 125 +000654r 1 7E 00 00 .faraddr 126 +000657r 1 7F 00 00 .faraddr 127 +00065Ar 1 80 00 00 .faraddr 128 +00065Dr 1 81 00 00 .faraddr 129 +000660r 1 82 00 00 .faraddr 130 +000663r 1 83 00 00 .faraddr 131 +000666r 1 84 00 00 .faraddr 132 +000669r 1 85 00 00 .faraddr 133 +00066Cr 1 86 00 00 .faraddr 134 +00066Fr 1 F0 00 00 .faraddr 240 +000672r 1 F1 00 00 .faraddr 241 +000675r 1 F2 00 00 .faraddr 242 +000678r 1 F3 00 00 .faraddr 243 +00067Br 1 F4 00 00 .faraddr 244 +00067Er 1 F5 00 00 .faraddr 245 +000681r 1 F6 00 00 .faraddr 246 +000684r 1 F7 00 00 .faraddr 247 +000687r 1 F8 00 00 .faraddr 248 +00068Ar 1 F9 00 00 .faraddr 249 +00068Dr 1 FA 00 00 .faraddr 250 +000690r 1 FB 00 00 .faraddr 251 +000693r 1 FC 00 00 .faraddr 252 +000696r 1 FD 00 00 .faraddr 253 +000699r 1 FE 00 00 .faraddr 254 +00069Cr 1 FF 00 00 .faraddr 255 +00069Fr 1 00 01 00 .faraddr 256 +0006A2r 1 01 01 00 .faraddr 257 +0006A5r 1 02 01 00 .faraddr 258 +0006A8r 1 03 01 00 .faraddr 259 +0006ABr 1 D2 0F 00 .faraddr 4050 +0006AEr 1 D3 0F 00 .faraddr 4051 +0006B1r 1 D4 0F 00 .faraddr 4052 +0006B4r 1 D5 0F 00 .faraddr 4053 +0006B7r 1 D6 0F 00 .faraddr 4054 +0006BAr 1 D7 0F 00 .faraddr 4055 +0006BDr 1 D8 0F 00 .faraddr 4056 +0006C0r 1 D9 0F 00 .faraddr 4057 +0006C3r 1 DA 0F 00 .faraddr 4058 +0006C6r 1 DB 0F 00 .faraddr 4059 +0006C9r 1 DC 0F 00 .faraddr 4060 +0006CCr 1 DD 0F 00 .faraddr 4061 +0006CFr 1 DE 0F 00 .faraddr 4062 +0006D2r 1 DF 0F 00 .faraddr 4063 +0006D5r 1 E0 0F 00 .faraddr 4064 +0006D8r 1 E1 0F 00 .faraddr 4065 +0006DBr 1 E2 0F 00 .faraddr 4066 +0006DEr 1 E3 0F 00 .faraddr 4067 +0006E1r 1 E4 0F 00 .faraddr 4068 +0006E4r 1 E5 0F 00 .faraddr 4069 +0006E7r 1 E6 0F 00 .faraddr 4070 +0006EAr 1 E7 0F 00 .faraddr 4071 +0006EDr 1 E8 0F 00 .faraddr 4072 +0006F0r 1 E9 0F 00 .faraddr 4073 +0006F3r 1 EA 0F 00 .faraddr 4074 +0006F6r 1 EB 0F 00 .faraddr 4075 +0006F9r 1 EC 0F 00 .faraddr 4076 +0006FCr 1 ED 0F 00 .faraddr 4077 +0006FFr 1 EE 0F 00 .faraddr 4078 +000702r 1 EF 0F 00 .faraddr 4079 +000705r 1 F0 0F 00 .faraddr 4080 +000708r 1 F1 0F 00 .faraddr 4081 +00070Br 1 F2 0F 00 .faraddr 4082 +00070Er 1 F3 0F 00 .faraddr 4083 +000711r 1 F4 0F 00 .faraddr 4084 +000714r 1 F5 0F 00 .faraddr 4085 +000717r 1 F6 0F 00 .faraddr 4086 +00071Ar 1 F7 0F 00 .faraddr 4087 +00071Dr 1 F8 0F 00 .faraddr 4088 +000720r 1 F9 0F 00 .faraddr 4089 +000723r 1 FA 0F 00 .faraddr 4090 +000726r 1 FB 0F 00 .faraddr 4091 +000729r 1 FC 0F 00 .faraddr 4092 +00072Cr 1 FD 0F 00 .faraddr 4093 +00072Fr 1 FE 0F 00 .faraddr 4094 +000732r 1 FF 0F 00 .faraddr 4095 +000735r 1 00 10 00 .faraddr 4096 +000738r 1 01 10 00 .faraddr 4097 +00073Br 1 02 10 00 .faraddr 4098 +00073Er 1 03 10 00 .faraddr 4099 +000741r 1 04 10 00 .faraddr 4100 +000744r 1 05 10 00 .faraddr 4101 +000747r 1 06 10 00 .faraddr 4102 +00074Ar 1 07 10 00 .faraddr 4103 +00074Dr 1 08 10 00 .faraddr 4104 +000750r 1 F0 7F 00 .faraddr 32752 +000753r 1 F1 7F 00 .faraddr 32753 +000756r 1 F2 7F 00 .faraddr 32754 +000759r 1 F3 7F 00 .faraddr 32755 +00075Cr 1 F4 7F 00 .faraddr 32756 +00075Fr 1 F5 7F 00 .faraddr 32757 +000762r 1 F6 7F 00 .faraddr 32758 +000765r 1 F7 7F 00 .faraddr 32759 +000768r 1 F8 7F 00 .faraddr 32760 +00076Br 1 F9 7F 00 .faraddr 32761 +00076Er 1 FA 7F 00 .faraddr 32762 +000771r 1 FB 7F 00 .faraddr 32763 +000774r 1 FC 7F 00 .faraddr 32764 +000777r 1 FD 7F 00 .faraddr 32765 +00077Ar 1 FE 7F 00 .faraddr 32766 +00077Dr 1 FF 7F 00 .faraddr 32767 +000780r 1 00 80 00 .faraddr 32768 +000783r 1 01 80 00 .faraddr 32769 +000786r 1 02 80 00 .faraddr 32770 +000789r 1 03 80 00 .faraddr 32771 +00078Cr 1 04 80 00 .faraddr 32772 +00078Fr 1 05 80 00 .faraddr 32773 +000792r 1 06 80 00 .faraddr 32774 +000795r 1 07 80 00 .faraddr 32775 +000798r 1 08 80 00 .faraddr 32776 +00079Br 1 09 80 00 .faraddr 32777 +00079Er 1 0A 80 00 .faraddr 32778 +0007A1r 1 0B 80 00 .faraddr 32779 +0007A4r 1 E1 9F 00 .faraddr 40929 +0007A7r 1 E2 9F 00 .faraddr 40930 +0007AAr 1 E3 9F 00 .faraddr 40931 +0007ADr 1 E4 9F 00 .faraddr 40932 +0007B0r 1 E5 9F 00 .faraddr 40933 +0007B3r 1 E6 9F 00 .faraddr 40934 +0007B6r 1 E7 9F 00 .faraddr 40935 +0007B9r 1 E8 9F 00 .faraddr 40936 +0007BCr 1 E9 9F 00 .faraddr 40937 +0007BFr 1 EA 9F 00 .faraddr 40938 +0007C2r 1 EB 9F 00 .faraddr 40939 +0007C5r 1 EC 9F 00 .faraddr 40940 +0007C8r 1 ED 9F 00 .faraddr 40941 +0007CBr 1 EE 9F 00 .faraddr 40942 +0007CEr 1 EF 9F 00 .faraddr 40943 +0007D1r 1 F0 9F 00 .faraddr 40944 +0007D4r 1 F1 9F 00 .faraddr 40945 +0007D7r 1 F2 9F 00 .faraddr 40946 +0007DAr 1 F3 9F 00 .faraddr 40947 +0007DDr 1 F4 9F 00 .faraddr 40948 +0007E0r 1 F5 9F 00 .faraddr 40949 +0007E3r 1 F6 9F 00 .faraddr 40950 +0007E6r 1 F7 9F 00 .faraddr 40951 +0007E9r 1 F8 9F 00 .faraddr 40952 +0007ECr 1 F9 9F 00 .faraddr 40953 +0007EFr 1 FA 9F 00 .faraddr 40954 +0007F2r 1 FB 9F 00 .faraddr 40955 +0007F5r 1 FC 9F 00 .faraddr 40956 +0007F8r 1 FD 9F 00 .faraddr 40957 +0007FBr 1 FE 9F 00 .faraddr 40958 +0007FEr 1 FF 9F 00 .faraddr 40959 +000801r 1 00 A0 00 .faraddr 40960 +000804r 1 01 A0 00 .faraddr 40961 +000807r 1 02 A0 00 .faraddr 40962 +00080Ar 1 03 A0 00 .faraddr 40963 +00080Dr 1 04 A0 00 .faraddr 40964 +000810r 1 05 A0 00 .faraddr 40965 +000813r 1 06 A0 00 .faraddr 40966 +000816r 1 07 A0 00 .faraddr 40967 +000819r 1 08 A0 00 .faraddr 40968 +00081Cr 1 09 A0 00 .faraddr 40969 +00081Fr 1 0A A0 00 .faraddr 40970 +000822r 1 0B A0 00 .faraddr 40971 +000825r 1 0C A0 00 .faraddr 40972 +000828r 1 0D A0 00 .faraddr 40973 +00082Br 1 0E A0 00 .faraddr 40974 +00082Er 1 0F A0 00 .faraddr 40975 +000831r 1 E1 AF 00 .faraddr 45025 +000834r 1 E2 AF 00 .faraddr 45026 +000837r 1 E3 AF 00 .faraddr 45027 +00083Ar 1 E4 AF 00 .faraddr 45028 +00083Dr 1 E5 AF 00 .faraddr 45029 +000840r 1 E6 AF 00 .faraddr 45030 +000843r 1 E7 AF 00 .faraddr 45031 +000846r 1 E8 AF 00 .faraddr 45032 +000849r 1 E9 AF 00 .faraddr 45033 +00084Cr 1 EA AF 00 .faraddr 45034 +00084Fr 1 EB AF 00 .faraddr 45035 +000852r 1 EC AF 00 .faraddr 45036 +000855r 1 ED AF 00 .faraddr 45037 +000858r 1 EE AF 00 .faraddr 45038 +00085Br 1 EF AF 00 .faraddr 45039 +00085Er 1 F0 AF 00 .faraddr 45040 +000861r 1 F1 AF 00 .faraddr 45041 +000864r 1 F2 AF 00 .faraddr 45042 +000867r 1 F3 AF 00 .faraddr 45043 +00086Ar 1 F4 AF 00 .faraddr 45044 +00086Dr 1 F5 AF 00 .faraddr 45045 +000870r 1 F6 AF 00 .faraddr 45046 +000873r 1 F7 AF 00 .faraddr 45047 +000876r 1 F8 AF 00 .faraddr 45048 +000879r 1 F9 AF 00 .faraddr 45049 +00087Cr 1 FA AF 00 .faraddr 45050 +00087Fr 1 FB AF 00 .faraddr 45051 +000882r 1 FC AF 00 .faraddr 45052 +000885r 1 FD AF 00 .faraddr 45053 +000888r 1 FE AF 00 .faraddr 45054 +00088Br 1 FF AF 00 .faraddr 45055 +00088Er 1 00 B0 00 .faraddr 45056 +000891r 1 01 B0 00 .faraddr 45057 +000894r 1 02 B0 00 .faraddr 45058 +000897r 1 03 B0 00 .faraddr 45059 +00089Ar 1 04 B0 00 .faraddr 45060 +00089Dr 1 05 B0 00 .faraddr 45061 +0008A0r 1 06 B0 00 .faraddr 45062 +0008A3r 1 07 B0 00 .faraddr 45063 +0008A6r 1 08 B0 00 .faraddr 45064 +0008A9r 1 09 B0 00 .faraddr 45065 +0008ACr 1 0A B0 00 .faraddr 45066 +0008AFr 1 0B B0 00 .faraddr 45067 +0008B2r 1 0C B0 00 .faraddr 45068 +0008B5r 1 0D B0 00 .faraddr 45069 +0008B8r 1 0E B0 00 .faraddr 45070 +0008BBr 1 0F B0 00 .faraddr 45071 +0008BEr 1 E1 FF 00 .faraddr 65505 +0008C1r 1 E2 FF 00 .faraddr 65506 +0008C4r 1 E3 FF 00 .faraddr 65507 +0008C7r 1 E4 FF 00 .faraddr 65508 +0008CAr 1 E5 FF 00 .faraddr 65509 +0008CDr 1 E6 FF 00 .faraddr 65510 +0008D0r 1 E7 FF 00 .faraddr 65511 +0008D3r 1 E8 FF 00 .faraddr 65512 +0008D6r 1 E9 FF 00 .faraddr 65513 +0008D9r 1 EA FF 00 .faraddr 65514 +0008DCr 1 EB FF 00 .faraddr 65515 +0008DFr 1 EC FF 00 .faraddr 65516 +0008E2r 1 ED FF 00 .faraddr 65517 +0008E5r 1 EE FF 00 .faraddr 65518 +0008E8r 1 EF FF 00 .faraddr 65519 +0008EBr 1 F0 FF 00 .faraddr 65520 +0008EEr 1 F1 FF 00 .faraddr 65521 +0008F1r 1 F2 FF 00 .faraddr 65522 +0008F4r 1 F3 FF 00 .faraddr 65523 +0008F7r 1 F4 FF 00 .faraddr 65524 +0008FAr 1 F5 FF 00 .faraddr 65525 +0008FDr 1 F6 FF 00 .faraddr 65526 +000900r 1 F7 FF 00 .faraddr 65527 +000903r 1 F8 FF 00 .faraddr 65528 +000906r 1 F9 FF 00 .faraddr 65529 +000909r 1 FA FF 00 .faraddr 65530 +00090Cr 1 FB FF 00 .faraddr 65531 +00090Fr 1 FC FF 00 .faraddr 65532 +000912r 1 FD FF 00 .faraddr 65533 +000915r 1 FE FF 00 .faraddr 65534 +000918r 1 FF FF 00 .faraddr 65535 +00091Br 1 00 00 01 .faraddr 65536 +00091Er 1 01 00 01 .faraddr 65537 +000921r 1 02 00 01 .faraddr 65538 +000924r 1 03 00 01 .faraddr 65539 +000927r 1 04 00 01 .faraddr 65540 +00092Ar 1 05 00 01 .faraddr 65541 +00092Dr 1 06 00 01 .faraddr 65542 +000930r 1 07 00 01 .faraddr 65543 +000933r 1 08 00 01 .faraddr 65544 +000936r 1 09 00 01 .faraddr 65545 +000939r 1 0A 00 01 .faraddr 65546 +00093Cr 1 0B 00 01 .faraddr 65547 +00093Fr 1 0C 00 01 .faraddr 65548 +000942r 1 0D 00 01 .faraddr 65549 +000945r 1 0E 00 01 .faraddr 65550 +000948r 1 0F 00 01 .faraddr 65551 +00094Br 1 E1 FF 10 .faraddr 1114081 +00094Er 1 E2 FF 10 .faraddr 1114082 +000951r 1 E3 FF 10 .faraddr 1114083 +000954r 1 E4 FF 10 .faraddr 1114084 +000957r 1 E5 FF 10 .faraddr 1114085 +00095Ar 1 E6 FF 10 .faraddr 1114086 +00095Dr 1 E7 FF 10 .faraddr 1114087 +000960r 1 E8 FF 10 .faraddr 1114088 +000963r 1 E9 FF 10 .faraddr 1114089 +000966r 1 EA FF 10 .faraddr 1114090 +000969r 1 EB FF 10 .faraddr 1114091 +00096Cr 1 EC FF 10 .faraddr 1114092 +00096Fr 1 ED FF 10 .faraddr 1114093 +000972r 1 EE FF 10 .faraddr 1114094 +000975r 1 EF FF 10 .faraddr 1114095 +000978r 1 F0 FF 10 .faraddr 1114096 +00097Br 1 F1 FF 10 .faraddr 1114097 +00097Er 1 F2 FF 10 .faraddr 1114098 +000981r 1 F3 FF 10 .faraddr 1114099 +000984r 1 F4 FF 10 .faraddr 1114100 +000987r 1 F5 FF 10 .faraddr 1114101 +00098Ar 1 F6 FF 10 .faraddr 1114102 +00098Dr 1 F7 FF 10 .faraddr 1114103 +000990r 1 F8 FF 10 .faraddr 1114104 +000993r 1 F9 FF 10 .faraddr 1114105 +000996r 1 FA FF 10 .faraddr 1114106 +000999r 1 FB FF 10 .faraddr 1114107 +00099Cr 1 FC FF 10 .faraddr 1114108 +00099Fr 1 FD FF 10 .faraddr 1114109 +0009A2r 1 FE FF 10 .faraddr 1114110 +0009A5r 1 FF FF 10 .faraddr 1114111 +0009A8r 1 00 00 11 .faraddr 1114112 +0009ABr 1 01 00 11 .faraddr 1114113 +0009AEr 1 02 00 11 .faraddr 1114114 +0009B1r 1 03 00 11 .faraddr 1114115 +0009B4r 1 04 00 11 .faraddr 1114116 +0009B7r 1 05 00 11 .faraddr 1114117 +0009BAr 1 06 00 11 .faraddr 1114118 +0009BDr 1 07 00 11 .faraddr 1114119 +0009C0r 1 08 00 11 .faraddr 1114120 +0009C3r 1 09 00 11 .faraddr 1114121 +0009C6r 1 0A 00 11 .faraddr 1114122 +0009C9r 1 0B 00 11 .faraddr 1114123 +0009CCr 1 0C 00 11 .faraddr 1114124 +0009CFr 1 0D 00 11 .faraddr 1114125 +0009D2r 1 0E 00 11 .faraddr 1114126 +0009D5r 1 0F 00 11 .faraddr 1114127 +0009D8r 1 E1 FF 20 .faraddr 2162657 +0009DBr 1 E2 FF 20 .faraddr 2162658 +0009DEr 1 E3 FF 20 .faraddr 2162659 +0009E1r 1 E4 FF 20 .faraddr 2162660 +0009E4r 1 E5 FF 20 .faraddr 2162661 +0009E7r 1 E6 FF 20 .faraddr 2162662 +0009EAr 1 E7 FF 20 .faraddr 2162663 +0009EDr 1 E8 FF 20 .faraddr 2162664 +0009F0r 1 E9 FF 20 .faraddr 2162665 +0009F3r 1 EA FF 20 .faraddr 2162666 +0009F6r 1 EB FF 20 .faraddr 2162667 +0009F9r 1 EC FF 20 .faraddr 2162668 +0009FCr 1 ED FF 20 .faraddr 2162669 +0009FFr 1 EE FF 20 .faraddr 2162670 +000A02r 1 EF FF 20 .faraddr 2162671 +000A05r 1 F0 FF 20 .faraddr 2162672 +000A08r 1 F1 FF 20 .faraddr 2162673 +000A0Br 1 F2 FF 20 .faraddr 2162674 +000A0Er 1 F3 FF 20 .faraddr 2162675 +000A11r 1 F4 FF 20 .faraddr 2162676 +000A14r 1 F5 FF 20 .faraddr 2162677 +000A17r 1 F6 FF 20 .faraddr 2162678 +000A1Ar 1 F7 FF 20 .faraddr 2162679 +000A1Dr 1 F8 FF 20 .faraddr 2162680 +000A20r 1 F9 FF 20 .faraddr 2162681 +000A23r 1 FA FF 20 .faraddr 2162682 +000A26r 1 FB FF 20 .faraddr 2162683 +000A29r 1 FC FF 20 .faraddr 2162684 +000A2Cr 1 FD FF 20 .faraddr 2162685 +000A2Fr 1 FE FF 20 .faraddr 2162686 +000A32r 1 FF FF 20 .faraddr 2162687 +000A35r 1 00 00 21 .faraddr 2162688 +000A38r 1 01 00 21 .faraddr 2162689 +000A3Br 1 02 00 21 .faraddr 2162690 +000A3Er 1 03 00 21 .faraddr 2162691 +000A41r 1 04 00 21 .faraddr 2162692 +000A44r 1 05 00 21 .faraddr 2162693 +000A47r 1 06 00 21 .faraddr 2162694 +000A4Ar 1 07 00 21 .faraddr 2162695 +000A4Dr 1 08 00 21 .faraddr 2162696 +000A50r 1 09 00 21 .faraddr 2162697 +000A53r 1 0A 00 21 .faraddr 2162698 +000A56r 1 0B 00 21 .faraddr 2162699 +000A59r 1 0C 00 21 .faraddr 2162700 +000A5Cr 1 0D 00 21 .faraddr 2162701 +000A5Fr 1 0E 00 21 .faraddr 2162702 +000A62r 1 0F 00 21 .faraddr 2162703 +000A65r 1 E1 FF 7F .faraddr 8388577 +000A68r 1 E2 FF 7F .faraddr 8388578 +000A6Br 1 E3 FF 7F .faraddr 8388579 +000A6Er 1 E4 FF 7F .faraddr 8388580 +000A71r 1 E5 FF 7F .faraddr 8388581 +000A74r 1 E6 FF 7F .faraddr 8388582 +000A77r 1 E7 FF 7F .faraddr 8388583 +000A7Ar 1 E8 FF 7F .faraddr 8388584 +000A7Dr 1 E9 FF 7F .faraddr 8388585 +000A80r 1 EA FF 7F .faraddr 8388586 +000A83r 1 EB FF 7F .faraddr 8388587 +000A86r 1 EC FF 7F .faraddr 8388588 +000A89r 1 ED FF 7F .faraddr 8388589 +000A8Cr 1 EE FF 7F .faraddr 8388590 +000A8Fr 1 EF FF 7F .faraddr 8388591 +000A92r 1 F0 FF 7F .faraddr 8388592 +000A95r 1 F1 FF 7F .faraddr 8388593 +000A98r 1 F2 FF 7F .faraddr 8388594 +000A9Br 1 F3 FF 7F .faraddr 8388595 +000A9Er 1 F4 FF 7F .faraddr 8388596 +000AA1r 1 F5 FF 7F .faraddr 8388597 +000AA4r 1 F6 FF 7F .faraddr 8388598 +000AA7r 1 F7 FF 7F .faraddr 8388599 +000AAAr 1 F8 FF 7F .faraddr 8388600 +000AADr 1 F9 FF 7F .faraddr 8388601 +000AB0r 1 FA FF 7F .faraddr 8388602 +000AB3r 1 FB FF 7F .faraddr 8388603 +000AB6r 1 FC FF 7F .faraddr 8388604 +000AB9r 1 FD FF 7F .faraddr 8388605 +000ABCr 1 FE FF 7F .faraddr 8388606 +000ABFr 1 FF FF 7F .faraddr 8388607 +000AC2r 1 00 00 80 .faraddr 8388608 +000AC5r 1 01 00 80 .faraddr 8388609 +000AC8r 1 02 00 80 .faraddr 8388610 +000ACBr 1 03 00 80 .faraddr 8388611 +000ACEr 1 04 00 80 .faraddr 8388612 +000AD1r 1 05 00 80 .faraddr 8388613 +000AD4r 1 06 00 80 .faraddr 8388614 +000AD7r 1 07 00 80 .faraddr 8388615 +000ADAr 1 08 00 80 .faraddr 8388616 +000ADDr 1 09 00 80 .faraddr 8388617 +000AE0r 1 0A 00 80 .faraddr 8388618 +000AE3r 1 0B 00 80 .faraddr 8388619 +000AE6r 1 0C 00 80 .faraddr 8388620 +000AE9r 1 0D 00 80 .faraddr 8388621 +000AECr 1 0E 00 80 .faraddr 8388622 +000AEFr 1 0F 00 80 .faraddr 8388623 +000AF2r 1 E1 FF 9F .faraddr 10485729 +000AF5r 1 E2 FF 9F .faraddr 10485730 +000AF8r 1 E3 FF 9F .faraddr 10485731 +000AFBr 1 E4 FF 9F .faraddr 10485732 +000AFEr 1 E5 FF 9F .faraddr 10485733 +000B01r 1 E6 FF 9F .faraddr 10485734 +000B04r 1 E7 FF 9F .faraddr 10485735 +000B07r 1 E8 FF 9F .faraddr 10485736 +000B0Ar 1 E9 FF 9F .faraddr 10485737 +000B0Dr 1 EA FF 9F .faraddr 10485738 +000B10r 1 EB FF 9F .faraddr 10485739 +000B13r 1 EC FF 9F .faraddr 10485740 +000B16r 1 ED FF 9F .faraddr 10485741 +000B19r 1 EE FF 9F .faraddr 10485742 +000B1Cr 1 EF FF 9F .faraddr 10485743 +000B1Fr 1 F0 FF 9F .faraddr 10485744 +000B22r 1 F1 FF 9F .faraddr 10485745 +000B25r 1 F2 FF 9F .faraddr 10485746 +000B28r 1 F3 FF 9F .faraddr 10485747 +000B2Br 1 F4 FF 9F .faraddr 10485748 +000B2Er 1 F5 FF 9F .faraddr 10485749 +000B31r 1 F6 FF 9F .faraddr 10485750 +000B34r 1 F7 FF 9F .faraddr 10485751 +000B37r 1 F8 FF 9F .faraddr 10485752 +000B3Ar 1 F9 FF 9F .faraddr 10485753 +000B3Dr 1 FA FF 9F .faraddr 10485754 +000B40r 1 FB FF 9F .faraddr 10485755 +000B43r 1 FC FF 9F .faraddr 10485756 +000B46r 1 FD FF 9F .faraddr 10485757 +000B49r 1 FE FF 9F .faraddr 10485758 +000B4Cr 1 FF FF 9F .faraddr 10485759 +000B4Fr 1 00 00 A0 .faraddr 10485760 +000B52r 1 01 00 A0 .faraddr 10485761 +000B55r 1 02 00 A0 .faraddr 10485762 +000B58r 1 03 00 A0 .faraddr 10485763 +000B5Br 1 04 00 A0 .faraddr 10485764 +000B5Er 1 05 00 A0 .faraddr 10485765 +000B61r 1 06 00 A0 .faraddr 10485766 +000B64r 1 07 00 A0 .faraddr 10485767 +000B67r 1 08 00 A0 .faraddr 10485768 +000B6Ar 1 09 00 A0 .faraddr 10485769 +000B6Dr 1 0A 00 A0 .faraddr 10485770 +000B70r 1 0B 00 A0 .faraddr 10485771 +000B73r 1 0C 00 A0 .faraddr 10485772 +000B76r 1 0D 00 A0 .faraddr 10485773 +000B79r 1 0E 00 A0 .faraddr 10485774 +000B7Cr 1 0F 00 A0 .faraddr 10485775 +000B7Fr 1 E1 FF FF .faraddr 16777185 +000B82r 1 E2 FF FF .faraddr 16777186 +000B85r 1 E3 FF FF .faraddr 16777187 +000B88r 1 E4 FF FF .faraddr 16777188 +000B8Br 1 E5 FF FF .faraddr 16777189 +000B8Er 1 E6 FF FF .faraddr 16777190 +000B91r 1 E7 FF FF .faraddr 16777191 +000B94r 1 E8 FF FF .faraddr 16777192 +000B97r 1 E9 FF FF .faraddr 16777193 +000B9Ar 1 EA FF FF .faraddr 16777194 +000B9Dr 1 EB FF FF .faraddr 16777195 +000BA0r 1 EC FF FF .faraddr 16777196 +000BA3r 1 ED FF FF .faraddr 16777197 +000BA6r 1 EE FF FF .faraddr 16777198 +000BA9r 1 EF FF FF .faraddr 16777199 +000BACr 1 F0 FF FF .faraddr 16777200 +000BAFr 1 F1 FF FF .faraddr 16777201 +000BB2r 1 F2 FF FF .faraddr 16777202 +000BB5r 1 F3 FF FF .faraddr 16777203 +000BB8r 1 F4 FF FF .faraddr 16777204 +000BBBr 1 F5 FF FF .faraddr 16777205 +000BBEr 1 F6 FF FF .faraddr 16777206 +000BC1r 1 F7 FF FF .faraddr 16777207 +000BC4r 1 F8 FF FF .faraddr 16777208 +000BC7r 1 F9 FF FF .faraddr 16777209 +000BCAr 1 FA FF FF .faraddr 16777210 +000BCDr 1 FB FF FF .faraddr 16777211 +000BD0r 1 FC FF FF .faraddr 16777212 +000BD3r 1 FD FF FF .faraddr 16777213 +000BD6r 1 FE FF FF .faraddr 16777214 +000BD9r 1 FF FF FF .faraddr 16777215 000BDCr 1 -000BDCr 1 ; hex values -000BDCr 1 00 00 00 .faraddr $0 -000BDFr 1 01 00 00 .faraddr $1 -000BE2r 1 02 00 00 .faraddr $2 -000BE5r 1 03 00 00 .faraddr $3 -000BE8r 1 04 00 00 .faraddr $4 -000BEBr 1 05 00 00 .faraddr $5 -000BEEr 1 06 00 00 .faraddr $6 -000BF1r 1 07 00 00 .faraddr $7 -000BF4r 1 08 00 00 .faraddr $8 -000BF7r 1 09 00 00 .faraddr $9 -000BFAr 1 0A 00 00 .faraddr $a -000BFDr 1 0B 00 00 .faraddr $b -000C00r 1 0C 00 00 .faraddr $c -000C03r 1 0D 00 00 .faraddr $d -000C06r 1 0E 00 00 .faraddr $e -000C09r 1 0F 00 00 .faraddr $f -000C0Cr 1 10 00 00 .faraddr $10 -000C0Fr 1 11 00 00 .faraddr $11 -000C12r 1 12 00 00 .faraddr $12 -000C15r 1 13 00 00 .faraddr $13 -000C18r 1 70 00 00 .faraddr $70 -000C1Br 1 71 00 00 .faraddr $71 -000C1Er 1 72 00 00 .faraddr $72 -000C21r 1 73 00 00 .faraddr $73 -000C24r 1 74 00 00 .faraddr $74 -000C27r 1 75 00 00 .faraddr $75 -000C2Ar 1 76 00 00 .faraddr $76 -000C2Dr 1 77 00 00 .faraddr $77 -000C30r 1 78 00 00 .faraddr $78 -000C33r 1 79 00 00 .faraddr $79 -000C36r 1 7A 00 00 .faraddr $7a -000C39r 1 7B 00 00 .faraddr $7b -000C3Cr 1 7C 00 00 .faraddr $7c -000C3Fr 1 7D 00 00 .faraddr $7d -000C42r 1 7E 00 00 .faraddr $7e -000C45r 1 7F 00 00 .faraddr $7f -000C48r 1 80 00 00 .faraddr $80 -000C4Br 1 81 00 00 .faraddr $81 -000C4Er 1 82 00 00 .faraddr $82 -000C51r 1 83 00 00 .faraddr $83 -000C54r 1 84 00 00 .faraddr $84 -000C57r 1 85 00 00 .faraddr $85 -000C5Ar 1 86 00 00 .faraddr $86 -000C5Dr 1 F0 00 00 .faraddr $f0 -000C60r 1 F1 00 00 .faraddr $f1 -000C63r 1 F2 00 00 .faraddr $f2 -000C66r 1 F3 00 00 .faraddr $f3 -000C69r 1 F4 00 00 .faraddr $f4 -000C6Cr 1 F5 00 00 .faraddr $f5 -000C6Fr 1 F6 00 00 .faraddr $f6 -000C72r 1 F7 00 00 .faraddr $f7 -000C75r 1 F8 00 00 .faraddr $f8 -000C78r 1 F9 00 00 .faraddr $f9 -000C7Br 1 FA 00 00 .faraddr $fa -000C7Er 1 FB 00 00 .faraddr $fb -000C81r 1 FC 00 00 .faraddr $fc -000C84r 1 FD 00 00 .faraddr $fd -000C87r 1 FE 00 00 .faraddr $fe -000C8Ar 1 FF 00 00 .faraddr $ff -000C8Dr 1 00 01 00 .faraddr $100 -000C90r 1 01 01 00 .faraddr $101 -000C93r 1 02 01 00 .faraddr $102 -000C96r 1 03 01 00 .faraddr $103 -000C99r 1 D2 0F 00 .faraddr $fd2 -000C9Cr 1 D3 0F 00 .faraddr $fd3 -000C9Fr 1 D4 0F 00 .faraddr $fd4 -000CA2r 1 D5 0F 00 .faraddr $fd5 -000CA5r 1 D6 0F 00 .faraddr $fd6 -000CA8r 1 D7 0F 00 .faraddr $fd7 -000CABr 1 D8 0F 00 .faraddr $fd8 -000CAEr 1 D9 0F 00 .faraddr $fd9 -000CB1r 1 DA 0F 00 .faraddr $fda -000CB4r 1 DB 0F 00 .faraddr $fdb -000CB7r 1 DC 0F 00 .faraddr $fdc -000CBAr 1 DD 0F 00 .faraddr $fdd -000CBDr 1 DE 0F 00 .faraddr $fde -000CC0r 1 DF 0F 00 .faraddr $fdf -000CC3r 1 E0 0F 00 .faraddr $fe0 -000CC6r 1 E1 0F 00 .faraddr $fe1 -000CC9r 1 E2 0F 00 .faraddr $fe2 -000CCCr 1 E3 0F 00 .faraddr $fe3 -000CCFr 1 E4 0F 00 .faraddr $fe4 -000CD2r 1 E5 0F 00 .faraddr $fe5 -000CD5r 1 E6 0F 00 .faraddr $fe6 -000CD8r 1 E7 0F 00 .faraddr $fe7 -000CDBr 1 E8 0F 00 .faraddr $fe8 -000CDEr 1 E9 0F 00 .faraddr $fe9 -000CE1r 1 EA 0F 00 .faraddr $fea -000CE4r 1 EB 0F 00 .faraddr $feb -000CE7r 1 EC 0F 00 .faraddr $fec -000CEAr 1 ED 0F 00 .faraddr $fed -000CEDr 1 EE 0F 00 .faraddr $fee -000CF0r 1 EF 0F 00 .faraddr $fef -000CF3r 1 F0 0F 00 .faraddr $ff0 -000CF6r 1 F1 0F 00 .faraddr $ff1 -000CF9r 1 F2 0F 00 .faraddr $ff2 -000CFCr 1 F3 0F 00 .faraddr $ff3 -000CFFr 1 F4 0F 00 .faraddr $ff4 -000D02r 1 F5 0F 00 .faraddr $ff5 -000D05r 1 F6 0F 00 .faraddr $ff6 -000D08r 1 F7 0F 00 .faraddr $ff7 -000D0Br 1 F8 0F 00 .faraddr $ff8 -000D0Er 1 F9 0F 00 .faraddr $ff9 -000D11r 1 FA 0F 00 .faraddr $ffa -000D14r 1 FB 0F 00 .faraddr $ffb -000D17r 1 FC 0F 00 .faraddr $ffc -000D1Ar 1 FD 0F 00 .faraddr $ffd -000D1Dr 1 FE 0F 00 .faraddr $ffe -000D20r 1 FF 0F 00 .faraddr $fff -000D23r 1 00 10 00 .faraddr $1000 -000D26r 1 01 10 00 .faraddr $1001 -000D29r 1 02 10 00 .faraddr $1002 -000D2Cr 1 03 10 00 .faraddr $1003 -000D2Fr 1 04 10 00 .faraddr $1004 -000D32r 1 05 10 00 .faraddr $1005 -000D35r 1 06 10 00 .faraddr $1006 -000D38r 1 07 10 00 .faraddr $1007 -000D3Br 1 08 10 00 .faraddr $1008 -000D3Er 1 F0 7F 00 .faraddr $7ff0 -000D41r 1 F1 7F 00 .faraddr $7ff1 -000D44r 1 F2 7F 00 .faraddr $7ff2 -000D47r 1 F3 7F 00 .faraddr $7ff3 -000D4Ar 1 F4 7F 00 .faraddr $7ff4 -000D4Dr 1 F5 7F 00 .faraddr $7ff5 -000D50r 1 F6 7F 00 .faraddr $7ff6 -000D53r 1 F7 7F 00 .faraddr $7ff7 -000D56r 1 F8 7F 00 .faraddr $7ff8 -000D59r 1 F9 7F 00 .faraddr $7ff9 -000D5Cr 1 FA 7F 00 .faraddr $7ffa -000D5Fr 1 FB 7F 00 .faraddr $7ffb -000D62r 1 FC 7F 00 .faraddr $7ffc -000D65r 1 FD 7F 00 .faraddr $7ffd -000D68r 1 FE 7F 00 .faraddr $7ffe -000D6Br 1 FF 7F 00 .faraddr $7fff -000D6Er 1 00 80 00 .faraddr $8000 -000D71r 1 01 80 00 .faraddr $8001 -000D74r 1 02 80 00 .faraddr $8002 -000D77r 1 03 80 00 .faraddr $8003 -000D7Ar 1 04 80 00 .faraddr $8004 -000D7Dr 1 05 80 00 .faraddr $8005 -000D80r 1 06 80 00 .faraddr $8006 -000D83r 1 07 80 00 .faraddr $8007 -000D86r 1 08 80 00 .faraddr $8008 -000D89r 1 09 80 00 .faraddr $8009 -000D8Cr 1 0A 80 00 .faraddr $800a -000D8Fr 1 0B 80 00 .faraddr $800b -000D92r 1 E1 9F 00 .faraddr $9fe1 -000D95r 1 E2 9F 00 .faraddr $9fe2 -000D98r 1 E3 9F 00 .faraddr $9fe3 -000D9Br 1 E4 9F 00 .faraddr $9fe4 -000D9Er 1 E5 9F 00 .faraddr $9fe5 -000DA1r 1 E6 9F 00 .faraddr $9fe6 -000DA4r 1 E7 9F 00 .faraddr $9fe7 -000DA7r 1 E8 9F 00 .faraddr $9fe8 -000DAAr 1 E9 9F 00 .faraddr $9fe9 -000DADr 1 EA 9F 00 .faraddr $9fea -000DB0r 1 EB 9F 00 .faraddr $9feb -000DB3r 1 EC 9F 00 .faraddr $9fec -000DB6r 1 ED 9F 00 .faraddr $9fed -000DB9r 1 EE 9F 00 .faraddr $9fee -000DBCr 1 EF 9F 00 .faraddr $9fef -000DBFr 1 F0 9F 00 .faraddr $9ff0 -000DC2r 1 F1 9F 00 .faraddr $9ff1 -000DC5r 1 F2 9F 00 .faraddr $9ff2 -000DC8r 1 F3 9F 00 .faraddr $9ff3 -000DCBr 1 F4 9F 00 .faraddr $9ff4 -000DCEr 1 F5 9F 00 .faraddr $9ff5 -000DD1r 1 F6 9F 00 .faraddr $9ff6 -000DD4r 1 F7 9F 00 .faraddr $9ff7 -000DD7r 1 F8 9F 00 .faraddr $9ff8 -000DDAr 1 F9 9F 00 .faraddr $9ff9 -000DDDr 1 FA 9F 00 .faraddr $9ffa -000DE0r 1 FB 9F 00 .faraddr $9ffb -000DE3r 1 FC 9F 00 .faraddr $9ffc -000DE6r 1 FD 9F 00 .faraddr $9ffd -000DE9r 1 FE 9F 00 .faraddr $9ffe -000DECr 1 FF 9F 00 .faraddr $9fff -000DEFr 1 00 A0 00 .faraddr $a000 -000DF2r 1 01 A0 00 .faraddr $a001 -000DF5r 1 02 A0 00 .faraddr $a002 -000DF8r 1 03 A0 00 .faraddr $a003 -000DFBr 1 04 A0 00 .faraddr $a004 -000DFEr 1 05 A0 00 .faraddr $a005 -000E01r 1 06 A0 00 .faraddr $a006 -000E04r 1 07 A0 00 .faraddr $a007 -000E07r 1 08 A0 00 .faraddr $a008 -000E0Ar 1 09 A0 00 .faraddr $a009 -000E0Dr 1 0A A0 00 .faraddr $a00a -000E10r 1 0B A0 00 .faraddr $a00b -000E13r 1 0C A0 00 .faraddr $a00c -000E16r 1 0D A0 00 .faraddr $a00d -000E19r 1 0E A0 00 .faraddr $a00e -000E1Cr 1 0F A0 00 .faraddr $a00f -000E1Fr 1 E1 AF 00 .faraddr $afe1 -000E22r 1 E2 AF 00 .faraddr $afe2 -000E25r 1 E3 AF 00 .faraddr $afe3 -000E28r 1 E4 AF 00 .faraddr $afe4 -000E2Br 1 E5 AF 00 .faraddr $afe5 -000E2Er 1 E6 AF 00 .faraddr $afe6 -000E31r 1 E7 AF 00 .faraddr $afe7 -000E34r 1 E8 AF 00 .faraddr $afe8 -000E37r 1 E9 AF 00 .faraddr $afe9 -000E3Ar 1 EA AF 00 .faraddr $afea -000E3Dr 1 EB AF 00 .faraddr $afeb -000E40r 1 EC AF 00 .faraddr $afec -000E43r 1 ED AF 00 .faraddr $afed -000E46r 1 EE AF 00 .faraddr $afee -000E49r 1 EF AF 00 .faraddr $afef -000E4Cr 1 F0 AF 00 .faraddr $aff0 -000E4Fr 1 F1 AF 00 .faraddr $aff1 -000E52r 1 F2 AF 00 .faraddr $aff2 -000E55r 1 F3 AF 00 .faraddr $aff3 -000E58r 1 F4 AF 00 .faraddr $aff4 -000E5Br 1 F5 AF 00 .faraddr $aff5 -000E5Er 1 F6 AF 00 .faraddr $aff6 -000E61r 1 F7 AF 00 .faraddr $aff7 -000E64r 1 F8 AF 00 .faraddr $aff8 -000E67r 1 F9 AF 00 .faraddr $aff9 -000E6Ar 1 FA AF 00 .faraddr $affa -000E6Dr 1 FB AF 00 .faraddr $affb -000E70r 1 FC AF 00 .faraddr $affc -000E73r 1 FD AF 00 .faraddr $affd -000E76r 1 FE AF 00 .faraddr $affe -000E79r 1 FF AF 00 .faraddr $afff -000E7Cr 1 00 B0 00 .faraddr $b000 -000E7Fr 1 01 B0 00 .faraddr $b001 -000E82r 1 02 B0 00 .faraddr $b002 -000E85r 1 03 B0 00 .faraddr $b003 -000E88r 1 04 B0 00 .faraddr $b004 -000E8Br 1 05 B0 00 .faraddr $b005 -000E8Er 1 06 B0 00 .faraddr $b006 -000E91r 1 07 B0 00 .faraddr $b007 -000E94r 1 08 B0 00 .faraddr $b008 -000E97r 1 09 B0 00 .faraddr $b009 -000E9Ar 1 0A B0 00 .faraddr $b00a -000E9Dr 1 0B B0 00 .faraddr $b00b -000EA0r 1 0C B0 00 .faraddr $b00c -000EA3r 1 0D B0 00 .faraddr $b00d -000EA6r 1 0E B0 00 .faraddr $b00e -000EA9r 1 0F B0 00 .faraddr $b00f -000EACr 1 E1 FF 00 .faraddr $ffe1 -000EAFr 1 E2 FF 00 .faraddr $ffe2 -000EB2r 1 E3 FF 00 .faraddr $ffe3 -000EB5r 1 E4 FF 00 .faraddr $ffe4 -000EB8r 1 E5 FF 00 .faraddr $ffe5 -000EBBr 1 E6 FF 00 .faraddr $ffe6 -000EBEr 1 E7 FF 00 .faraddr $ffe7 -000EC1r 1 E8 FF 00 .faraddr $ffe8 -000EC4r 1 E9 FF 00 .faraddr $ffe9 -000EC7r 1 EA FF 00 .faraddr $ffea -000ECAr 1 EB FF 00 .faraddr $ffeb -000ECDr 1 EC FF 00 .faraddr $ffec -000ED0r 1 ED FF 00 .faraddr $ffed -000ED3r 1 EE FF 00 .faraddr $ffee -000ED6r 1 EF FF 00 .faraddr $ffef -000ED9r 1 F0 FF 00 .faraddr $fff0 -000EDCr 1 F1 FF 00 .faraddr $fff1 -000EDFr 1 F2 FF 00 .faraddr $fff2 -000EE2r 1 F3 FF 00 .faraddr $fff3 -000EE5r 1 F4 FF 00 .faraddr $fff4 -000EE8r 1 F5 FF 00 .faraddr $fff5 -000EEBr 1 F6 FF 00 .faraddr $fff6 -000EEEr 1 F7 FF 00 .faraddr $fff7 -000EF1r 1 F8 FF 00 .faraddr $fff8 -000EF4r 1 F9 FF 00 .faraddr $fff9 -000EF7r 1 FA FF 00 .faraddr $fffa -000EFAr 1 FB FF 00 .faraddr $fffb -000EFDr 1 FC FF 00 .faraddr $fffc -000F00r 1 FD FF 00 .faraddr $fffd -000F03r 1 FE FF 00 .faraddr $fffe -000F06r 1 FF FF 00 .faraddr $ffff -000F09r 1 00 00 01 .faraddr $10000 -000F0Cr 1 01 00 01 .faraddr $10001 -000F0Fr 1 02 00 01 .faraddr $10002 -000F12r 1 03 00 01 .faraddr $10003 -000F15r 1 04 00 01 .faraddr $10004 -000F18r 1 05 00 01 .faraddr $10005 -000F1Br 1 06 00 01 .faraddr $10006 -000F1Er 1 07 00 01 .faraddr $10007 -000F21r 1 08 00 01 .faraddr $10008 -000F24r 1 09 00 01 .faraddr $10009 -000F27r 1 0A 00 01 .faraddr $1000a -000F2Ar 1 0B 00 01 .faraddr $1000b -000F2Dr 1 0C 00 01 .faraddr $1000c -000F30r 1 0D 00 01 .faraddr $1000d -000F33r 1 0E 00 01 .faraddr $1000e -000F36r 1 0F 00 01 .faraddr $1000f -000F39r 1 E1 FF 10 .faraddr $10ffe1 -000F3Cr 1 E2 FF 10 .faraddr $10ffe2 -000F3Fr 1 E3 FF 10 .faraddr $10ffe3 -000F42r 1 E4 FF 10 .faraddr $10ffe4 -000F45r 1 E5 FF 10 .faraddr $10ffe5 -000F48r 1 E6 FF 10 .faraddr $10ffe6 -000F4Br 1 E7 FF 10 .faraddr $10ffe7 -000F4Er 1 E8 FF 10 .faraddr $10ffe8 -000F51r 1 E9 FF 10 .faraddr $10ffe9 -000F54r 1 EA FF 10 .faraddr $10ffea -000F57r 1 EB FF 10 .faraddr $10ffeb -000F5Ar 1 EC FF 10 .faraddr $10ffec -000F5Dr 1 ED FF 10 .faraddr $10ffed -000F60r 1 EE FF 10 .faraddr $10ffee -000F63r 1 EF FF 10 .faraddr $10ffef -000F66r 1 F0 FF 10 .faraddr $10fff0 -000F69r 1 F1 FF 10 .faraddr $10fff1 -000F6Cr 1 F2 FF 10 .faraddr $10fff2 -000F6Fr 1 F3 FF 10 .faraddr $10fff3 -000F72r 1 F4 FF 10 .faraddr $10fff4 -000F75r 1 F5 FF 10 .faraddr $10fff5 -000F78r 1 F6 FF 10 .faraddr $10fff6 -000F7Br 1 F7 FF 10 .faraddr $10fff7 -000F7Er 1 F8 FF 10 .faraddr $10fff8 -000F81r 1 F9 FF 10 .faraddr $10fff9 -000F84r 1 FA FF 10 .faraddr $10fffa -000F87r 1 FB FF 10 .faraddr $10fffb -000F8Ar 1 FC FF 10 .faraddr $10fffc -000F8Dr 1 FD FF 10 .faraddr $10fffd -000F90r 1 FE FF 10 .faraddr $10fffe -000F93r 1 FF FF 10 .faraddr $10ffff -000F96r 1 00 00 11 .faraddr $110000 -000F99r 1 01 00 11 .faraddr $110001 -000F9Cr 1 02 00 11 .faraddr $110002 -000F9Fr 1 03 00 11 .faraddr $110003 -000FA2r 1 04 00 11 .faraddr $110004 -000FA5r 1 05 00 11 .faraddr $110005 -000FA8r 1 06 00 11 .faraddr $110006 -000FABr 1 07 00 11 .faraddr $110007 -000FAEr 1 08 00 11 .faraddr $110008 -000FB1r 1 09 00 11 .faraddr $110009 -000FB4r 1 0A 00 11 .faraddr $11000a -000FB7r 1 0B 00 11 .faraddr $11000b -000FBAr 1 0C 00 11 .faraddr $11000c -000FBDr 1 0D 00 11 .faraddr $11000d -000FC0r 1 0E 00 11 .faraddr $11000e -000FC3r 1 0F 00 11 .faraddr $11000f -000FC6r 1 E1 FF 20 .faraddr $20ffe1 -000FC9r 1 E2 FF 20 .faraddr $20ffe2 -000FCCr 1 E3 FF 20 .faraddr $20ffe3 -000FCFr 1 E4 FF 20 .faraddr $20ffe4 -000FD2r 1 E5 FF 20 .faraddr $20ffe5 -000FD5r 1 E6 FF 20 .faraddr $20ffe6 -000FD8r 1 E7 FF 20 .faraddr $20ffe7 -000FDBr 1 E8 FF 20 .faraddr $20ffe8 -000FDEr 1 E9 FF 20 .faraddr $20ffe9 -000FE1r 1 EA FF 20 .faraddr $20ffea -000FE4r 1 EB FF 20 .faraddr $20ffeb -000FE7r 1 EC FF 20 .faraddr $20ffec -000FEAr 1 ED FF 20 .faraddr $20ffed -000FEDr 1 EE FF 20 .faraddr $20ffee -000FF0r 1 EF FF 20 .faraddr $20ffef -000FF3r 1 F0 FF 20 .faraddr $20fff0 -000FF6r 1 F1 FF 20 .faraddr $20fff1 -000FF9r 1 F2 FF 20 .faraddr $20fff2 -000FFCr 1 F3 FF 20 .faraddr $20fff3 -000FFFr 1 F4 FF 20 .faraddr $20fff4 -001002r 1 F5 FF 20 .faraddr $20fff5 -001005r 1 F6 FF 20 .faraddr $20fff6 -001008r 1 F7 FF 20 .faraddr $20fff7 -00100Br 1 F8 FF 20 .faraddr $20fff8 -00100Er 1 F9 FF 20 .faraddr $20fff9 -001011r 1 FA FF 20 .faraddr $20fffa -001014r 1 FB FF 20 .faraddr $20fffb -001017r 1 FC FF 20 .faraddr $20fffc -00101Ar 1 FD FF 20 .faraddr $20fffd -00101Dr 1 FE FF 20 .faraddr $20fffe -001020r 1 FF FF 20 .faraddr $20ffff -001023r 1 00 00 21 .faraddr $210000 -001026r 1 01 00 21 .faraddr $210001 -001029r 1 02 00 21 .faraddr $210002 -00102Cr 1 03 00 21 .faraddr $210003 -00102Fr 1 04 00 21 .faraddr $210004 -001032r 1 05 00 21 .faraddr $210005 -001035r 1 06 00 21 .faraddr $210006 -001038r 1 07 00 21 .faraddr $210007 -00103Br 1 08 00 21 .faraddr $210008 -00103Er 1 09 00 21 .faraddr $210009 -001041r 1 0A 00 21 .faraddr $21000a -001044r 1 0B 00 21 .faraddr $21000b -001047r 1 0C 00 21 .faraddr $21000c -00104Ar 1 0D 00 21 .faraddr $21000d -00104Dr 1 0E 00 21 .faraddr $21000e -001050r 1 0F 00 21 .faraddr $21000f -001053r 1 E1 FF 7F .faraddr $7fffe1 -001056r 1 E2 FF 7F .faraddr $7fffe2 -001059r 1 E3 FF 7F .faraddr $7fffe3 -00105Cr 1 E4 FF 7F .faraddr $7fffe4 -00105Fr 1 E5 FF 7F .faraddr $7fffe5 -001062r 1 E6 FF 7F .faraddr $7fffe6 -001065r 1 E7 FF 7F .faraddr $7fffe7 -001068r 1 E8 FF 7F .faraddr $7fffe8 -00106Br 1 E9 FF 7F .faraddr $7fffe9 -00106Er 1 EA FF 7F .faraddr $7fffea -001071r 1 EB FF 7F .faraddr $7fffeb -001074r 1 EC FF 7F .faraddr $7fffec -001077r 1 ED FF 7F .faraddr $7fffed -00107Ar 1 EE FF 7F .faraddr $7fffee -00107Dr 1 EF FF 7F .faraddr $7fffef -001080r 1 F0 FF 7F .faraddr $7ffff0 -001083r 1 F1 FF 7F .faraddr $7ffff1 -001086r 1 F2 FF 7F .faraddr $7ffff2 -001089r 1 F3 FF 7F .faraddr $7ffff3 -00108Cr 1 F4 FF 7F .faraddr $7ffff4 -00108Fr 1 F5 FF 7F .faraddr $7ffff5 -001092r 1 F6 FF 7F .faraddr $7ffff6 -001095r 1 F7 FF 7F .faraddr $7ffff7 -001098r 1 F8 FF 7F .faraddr $7ffff8 -00109Br 1 F9 FF 7F .faraddr $7ffff9 -00109Er 1 FA FF 7F .faraddr $7ffffa -0010A1r 1 FB FF 7F .faraddr $7ffffb -0010A4r 1 FC FF 7F .faraddr $7ffffc -0010A7r 1 FD FF 7F .faraddr $7ffffd -0010AAr 1 FE FF 7F .faraddr $7ffffe -0010ADr 1 FF FF 7F .faraddr $7fffff -0010B0r 1 00 00 80 .faraddr $800000 -0010B3r 1 01 00 80 .faraddr $800001 -0010B6r 1 02 00 80 .faraddr $800002 -0010B9r 1 03 00 80 .faraddr $800003 -0010BCr 1 04 00 80 .faraddr $800004 -0010BFr 1 05 00 80 .faraddr $800005 -0010C2r 1 06 00 80 .faraddr $800006 -0010C5r 1 07 00 80 .faraddr $800007 -0010C8r 1 08 00 80 .faraddr $800008 -0010CBr 1 09 00 80 .faraddr $800009 -0010CEr 1 0A 00 80 .faraddr $80000a -0010D1r 1 0B 00 80 .faraddr $80000b -0010D4r 1 0C 00 80 .faraddr $80000c -0010D7r 1 0D 00 80 .faraddr $80000d -0010DAr 1 0E 00 80 .faraddr $80000e -0010DDr 1 0F 00 80 .faraddr $80000f -0010E0r 1 E1 FF 9F .faraddr $9fffe1 -0010E3r 1 E2 FF 9F .faraddr $9fffe2 -0010E6r 1 E3 FF 9F .faraddr $9fffe3 -0010E9r 1 E4 FF 9F .faraddr $9fffe4 -0010ECr 1 E5 FF 9F .faraddr $9fffe5 -0010EFr 1 E6 FF 9F .faraddr $9fffe6 -0010F2r 1 E7 FF 9F .faraddr $9fffe7 -0010F5r 1 E8 FF 9F .faraddr $9fffe8 -0010F8r 1 E9 FF 9F .faraddr $9fffe9 -0010FBr 1 EA FF 9F .faraddr $9fffea -0010FEr 1 EB FF 9F .faraddr $9fffeb -001101r 1 EC FF 9F .faraddr $9fffec -001104r 1 ED FF 9F .faraddr $9fffed -001107r 1 EE FF 9F .faraddr $9fffee -00110Ar 1 EF FF 9F .faraddr $9fffef -00110Dr 1 F0 FF 9F .faraddr $9ffff0 -001110r 1 F1 FF 9F .faraddr $9ffff1 -001113r 1 F2 FF 9F .faraddr $9ffff2 -001116r 1 F3 FF 9F .faraddr $9ffff3 -001119r 1 F4 FF 9F .faraddr $9ffff4 -00111Cr 1 F5 FF 9F .faraddr $9ffff5 -00111Fr 1 F6 FF 9F .faraddr $9ffff6 -001122r 1 F7 FF 9F .faraddr $9ffff7 -001125r 1 F8 FF 9F .faraddr $9ffff8 -001128r 1 F9 FF 9F .faraddr $9ffff9 -00112Br 1 FA FF 9F .faraddr $9ffffa -00112Er 1 FB FF 9F .faraddr $9ffffb -001131r 1 FC FF 9F .faraddr $9ffffc -001134r 1 FD FF 9F .faraddr $9ffffd -001137r 1 FE FF 9F .faraddr $9ffffe -00113Ar 1 FF FF 9F .faraddr $9fffff -00113Dr 1 00 00 A0 .faraddr $a00000 -001140r 1 01 00 A0 .faraddr $a00001 -001143r 1 02 00 A0 .faraddr $a00002 -001146r 1 03 00 A0 .faraddr $a00003 -001149r 1 04 00 A0 .faraddr $a00004 -00114Cr 1 05 00 A0 .faraddr $a00005 -00114Fr 1 06 00 A0 .faraddr $a00006 -001152r 1 07 00 A0 .faraddr $a00007 -001155r 1 08 00 A0 .faraddr $a00008 -001158r 1 09 00 A0 .faraddr $a00009 -00115Br 1 0A 00 A0 .faraddr $a0000a -00115Er 1 0B 00 A0 .faraddr $a0000b -001161r 1 0C 00 A0 .faraddr $a0000c -001164r 1 0D 00 A0 .faraddr $a0000d -001167r 1 0E 00 A0 .faraddr $a0000e -00116Ar 1 0F 00 A0 .faraddr $a0000f -00116Dr 1 E1 FF FF .faraddr $ffffe1 -001170r 1 E2 FF FF .faraddr $ffffe2 -001173r 1 E3 FF FF .faraddr $ffffe3 -001176r 1 E4 FF FF .faraddr $ffffe4 -001179r 1 E5 FF FF .faraddr $ffffe5 -00117Cr 1 E6 FF FF .faraddr $ffffe6 -00117Fr 1 E7 FF FF .faraddr $ffffe7 -001182r 1 E8 FF FF .faraddr $ffffe8 -001185r 1 E9 FF FF .faraddr $ffffe9 -001188r 1 EA FF FF .faraddr $ffffea -00118Br 1 EB FF FF .faraddr $ffffeb -00118Er 1 EC FF FF .faraddr $ffffec -001191r 1 ED FF FF .faraddr $ffffed -001194r 1 EE FF FF .faraddr $ffffee -001197r 1 EF FF FF .faraddr $ffffef -00119Ar 1 F0 FF FF .faraddr $fffff0 -00119Dr 1 F1 FF FF .faraddr $fffff1 -0011A0r 1 F2 FF FF .faraddr $fffff2 -0011A3r 1 F3 FF FF .faraddr $fffff3 -0011A6r 1 F4 FF FF .faraddr $fffff4 -0011A9r 1 F5 FF FF .faraddr $fffff5 -0011ACr 1 F6 FF FF .faraddr $fffff6 -0011AFr 1 F7 FF FF .faraddr $fffff7 -0011B2r 1 F8 FF FF .faraddr $fffff8 -0011B5r 1 F9 FF FF .faraddr $fffff9 -0011B8r 1 FA FF FF .faraddr $fffffa -0011BBr 1 FB FF FF .faraddr $fffffb -0011BEr 1 FC FF FF .faraddr $fffffc -0011C1r 1 FD FF FF .faraddr $fffffd -0011C4r 1 FE FF FF .faraddr $fffffe -0011C7r 1 FF FF FF .faraddr $ffffff +000BDCr 1 ; hex values +000BDCr 1 00 00 00 .faraddr $0 +000BDFr 1 01 00 00 .faraddr $1 +000BE2r 1 02 00 00 .faraddr $2 +000BE5r 1 03 00 00 .faraddr $3 +000BE8r 1 04 00 00 .faraddr $4 +000BEBr 1 05 00 00 .faraddr $5 +000BEEr 1 06 00 00 .faraddr $6 +000BF1r 1 07 00 00 .faraddr $7 +000BF4r 1 08 00 00 .faraddr $8 +000BF7r 1 09 00 00 .faraddr $9 +000BFAr 1 0A 00 00 .faraddr $a +000BFDr 1 0B 00 00 .faraddr $b +000C00r 1 0C 00 00 .faraddr $c +000C03r 1 0D 00 00 .faraddr $d +000C06r 1 0E 00 00 .faraddr $e +000C09r 1 0F 00 00 .faraddr $f +000C0Cr 1 10 00 00 .faraddr $10 +000C0Fr 1 11 00 00 .faraddr $11 +000C12r 1 12 00 00 .faraddr $12 +000C15r 1 13 00 00 .faraddr $13 +000C18r 1 70 00 00 .faraddr $70 +000C1Br 1 71 00 00 .faraddr $71 +000C1Er 1 72 00 00 .faraddr $72 +000C21r 1 73 00 00 .faraddr $73 +000C24r 1 74 00 00 .faraddr $74 +000C27r 1 75 00 00 .faraddr $75 +000C2Ar 1 76 00 00 .faraddr $76 +000C2Dr 1 77 00 00 .faraddr $77 +000C30r 1 78 00 00 .faraddr $78 +000C33r 1 79 00 00 .faraddr $79 +000C36r 1 7A 00 00 .faraddr $7a +000C39r 1 7B 00 00 .faraddr $7b +000C3Cr 1 7C 00 00 .faraddr $7c +000C3Fr 1 7D 00 00 .faraddr $7d +000C42r 1 7E 00 00 .faraddr $7e +000C45r 1 7F 00 00 .faraddr $7f +000C48r 1 80 00 00 .faraddr $80 +000C4Br 1 81 00 00 .faraddr $81 +000C4Er 1 82 00 00 .faraddr $82 +000C51r 1 83 00 00 .faraddr $83 +000C54r 1 84 00 00 .faraddr $84 +000C57r 1 85 00 00 .faraddr $85 +000C5Ar 1 86 00 00 .faraddr $86 +000C5Dr 1 F0 00 00 .faraddr $f0 +000C60r 1 F1 00 00 .faraddr $f1 +000C63r 1 F2 00 00 .faraddr $f2 +000C66r 1 F3 00 00 .faraddr $f3 +000C69r 1 F4 00 00 .faraddr $f4 +000C6Cr 1 F5 00 00 .faraddr $f5 +000C6Fr 1 F6 00 00 .faraddr $f6 +000C72r 1 F7 00 00 .faraddr $f7 +000C75r 1 F8 00 00 .faraddr $f8 +000C78r 1 F9 00 00 .faraddr $f9 +000C7Br 1 FA 00 00 .faraddr $fa +000C7Er 1 FB 00 00 .faraddr $fb +000C81r 1 FC 00 00 .faraddr $fc +000C84r 1 FD 00 00 .faraddr $fd +000C87r 1 FE 00 00 .faraddr $fe +000C8Ar 1 FF 00 00 .faraddr $ff +000C8Dr 1 00 01 00 .faraddr $100 +000C90r 1 01 01 00 .faraddr $101 +000C93r 1 02 01 00 .faraddr $102 +000C96r 1 03 01 00 .faraddr $103 +000C99r 1 D2 0F 00 .faraddr $fd2 +000C9Cr 1 D3 0F 00 .faraddr $fd3 +000C9Fr 1 D4 0F 00 .faraddr $fd4 +000CA2r 1 D5 0F 00 .faraddr $fd5 +000CA5r 1 D6 0F 00 .faraddr $fd6 +000CA8r 1 D7 0F 00 .faraddr $fd7 +000CABr 1 D8 0F 00 .faraddr $fd8 +000CAEr 1 D9 0F 00 .faraddr $fd9 +000CB1r 1 DA 0F 00 .faraddr $fda +000CB4r 1 DB 0F 00 .faraddr $fdb +000CB7r 1 DC 0F 00 .faraddr $fdc +000CBAr 1 DD 0F 00 .faraddr $fdd +000CBDr 1 DE 0F 00 .faraddr $fde +000CC0r 1 DF 0F 00 .faraddr $fdf +000CC3r 1 E0 0F 00 .faraddr $fe0 +000CC6r 1 E1 0F 00 .faraddr $fe1 +000CC9r 1 E2 0F 00 .faraddr $fe2 +000CCCr 1 E3 0F 00 .faraddr $fe3 +000CCFr 1 E4 0F 00 .faraddr $fe4 +000CD2r 1 E5 0F 00 .faraddr $fe5 +000CD5r 1 E6 0F 00 .faraddr $fe6 +000CD8r 1 E7 0F 00 .faraddr $fe7 +000CDBr 1 E8 0F 00 .faraddr $fe8 +000CDEr 1 E9 0F 00 .faraddr $fe9 +000CE1r 1 EA 0F 00 .faraddr $fea +000CE4r 1 EB 0F 00 .faraddr $feb +000CE7r 1 EC 0F 00 .faraddr $fec +000CEAr 1 ED 0F 00 .faraddr $fed +000CEDr 1 EE 0F 00 .faraddr $fee +000CF0r 1 EF 0F 00 .faraddr $fef +000CF3r 1 F0 0F 00 .faraddr $ff0 +000CF6r 1 F1 0F 00 .faraddr $ff1 +000CF9r 1 F2 0F 00 .faraddr $ff2 +000CFCr 1 F3 0F 00 .faraddr $ff3 +000CFFr 1 F4 0F 00 .faraddr $ff4 +000D02r 1 F5 0F 00 .faraddr $ff5 +000D05r 1 F6 0F 00 .faraddr $ff6 +000D08r 1 F7 0F 00 .faraddr $ff7 +000D0Br 1 F8 0F 00 .faraddr $ff8 +000D0Er 1 F9 0F 00 .faraddr $ff9 +000D11r 1 FA 0F 00 .faraddr $ffa +000D14r 1 FB 0F 00 .faraddr $ffb +000D17r 1 FC 0F 00 .faraddr $ffc +000D1Ar 1 FD 0F 00 .faraddr $ffd +000D1Dr 1 FE 0F 00 .faraddr $ffe +000D20r 1 FF 0F 00 .faraddr $fff +000D23r 1 00 10 00 .faraddr $1000 +000D26r 1 01 10 00 .faraddr $1001 +000D29r 1 02 10 00 .faraddr $1002 +000D2Cr 1 03 10 00 .faraddr $1003 +000D2Fr 1 04 10 00 .faraddr $1004 +000D32r 1 05 10 00 .faraddr $1005 +000D35r 1 06 10 00 .faraddr $1006 +000D38r 1 07 10 00 .faraddr $1007 +000D3Br 1 08 10 00 .faraddr $1008 +000D3Er 1 F0 7F 00 .faraddr $7ff0 +000D41r 1 F1 7F 00 .faraddr $7ff1 +000D44r 1 F2 7F 00 .faraddr $7ff2 +000D47r 1 F3 7F 00 .faraddr $7ff3 +000D4Ar 1 F4 7F 00 .faraddr $7ff4 +000D4Dr 1 F5 7F 00 .faraddr $7ff5 +000D50r 1 F6 7F 00 .faraddr $7ff6 +000D53r 1 F7 7F 00 .faraddr $7ff7 +000D56r 1 F8 7F 00 .faraddr $7ff8 +000D59r 1 F9 7F 00 .faraddr $7ff9 +000D5Cr 1 FA 7F 00 .faraddr $7ffa +000D5Fr 1 FB 7F 00 .faraddr $7ffb +000D62r 1 FC 7F 00 .faraddr $7ffc +000D65r 1 FD 7F 00 .faraddr $7ffd +000D68r 1 FE 7F 00 .faraddr $7ffe +000D6Br 1 FF 7F 00 .faraddr $7fff +000D6Er 1 00 80 00 .faraddr $8000 +000D71r 1 01 80 00 .faraddr $8001 +000D74r 1 02 80 00 .faraddr $8002 +000D77r 1 03 80 00 .faraddr $8003 +000D7Ar 1 04 80 00 .faraddr $8004 +000D7Dr 1 05 80 00 .faraddr $8005 +000D80r 1 06 80 00 .faraddr $8006 +000D83r 1 07 80 00 .faraddr $8007 +000D86r 1 08 80 00 .faraddr $8008 +000D89r 1 09 80 00 .faraddr $8009 +000D8Cr 1 0A 80 00 .faraddr $800a +000D8Fr 1 0B 80 00 .faraddr $800b +000D92r 1 E1 9F 00 .faraddr $9fe1 +000D95r 1 E2 9F 00 .faraddr $9fe2 +000D98r 1 E3 9F 00 .faraddr $9fe3 +000D9Br 1 E4 9F 00 .faraddr $9fe4 +000D9Er 1 E5 9F 00 .faraddr $9fe5 +000DA1r 1 E6 9F 00 .faraddr $9fe6 +000DA4r 1 E7 9F 00 .faraddr $9fe7 +000DA7r 1 E8 9F 00 .faraddr $9fe8 +000DAAr 1 E9 9F 00 .faraddr $9fe9 +000DADr 1 EA 9F 00 .faraddr $9fea +000DB0r 1 EB 9F 00 .faraddr $9feb +000DB3r 1 EC 9F 00 .faraddr $9fec +000DB6r 1 ED 9F 00 .faraddr $9fed +000DB9r 1 EE 9F 00 .faraddr $9fee +000DBCr 1 EF 9F 00 .faraddr $9fef +000DBFr 1 F0 9F 00 .faraddr $9ff0 +000DC2r 1 F1 9F 00 .faraddr $9ff1 +000DC5r 1 F2 9F 00 .faraddr $9ff2 +000DC8r 1 F3 9F 00 .faraddr $9ff3 +000DCBr 1 F4 9F 00 .faraddr $9ff4 +000DCEr 1 F5 9F 00 .faraddr $9ff5 +000DD1r 1 F6 9F 00 .faraddr $9ff6 +000DD4r 1 F7 9F 00 .faraddr $9ff7 +000DD7r 1 F8 9F 00 .faraddr $9ff8 +000DDAr 1 F9 9F 00 .faraddr $9ff9 +000DDDr 1 FA 9F 00 .faraddr $9ffa +000DE0r 1 FB 9F 00 .faraddr $9ffb +000DE3r 1 FC 9F 00 .faraddr $9ffc +000DE6r 1 FD 9F 00 .faraddr $9ffd +000DE9r 1 FE 9F 00 .faraddr $9ffe +000DECr 1 FF 9F 00 .faraddr $9fff +000DEFr 1 00 A0 00 .faraddr $a000 +000DF2r 1 01 A0 00 .faraddr $a001 +000DF5r 1 02 A0 00 .faraddr $a002 +000DF8r 1 03 A0 00 .faraddr $a003 +000DFBr 1 04 A0 00 .faraddr $a004 +000DFEr 1 05 A0 00 .faraddr $a005 +000E01r 1 06 A0 00 .faraddr $a006 +000E04r 1 07 A0 00 .faraddr $a007 +000E07r 1 08 A0 00 .faraddr $a008 +000E0Ar 1 09 A0 00 .faraddr $a009 +000E0Dr 1 0A A0 00 .faraddr $a00a +000E10r 1 0B A0 00 .faraddr $a00b +000E13r 1 0C A0 00 .faraddr $a00c +000E16r 1 0D A0 00 .faraddr $a00d +000E19r 1 0E A0 00 .faraddr $a00e +000E1Cr 1 0F A0 00 .faraddr $a00f +000E1Fr 1 E1 AF 00 .faraddr $afe1 +000E22r 1 E2 AF 00 .faraddr $afe2 +000E25r 1 E3 AF 00 .faraddr $afe3 +000E28r 1 E4 AF 00 .faraddr $afe4 +000E2Br 1 E5 AF 00 .faraddr $afe5 +000E2Er 1 E6 AF 00 .faraddr $afe6 +000E31r 1 E7 AF 00 .faraddr $afe7 +000E34r 1 E8 AF 00 .faraddr $afe8 +000E37r 1 E9 AF 00 .faraddr $afe9 +000E3Ar 1 EA AF 00 .faraddr $afea +000E3Dr 1 EB AF 00 .faraddr $afeb +000E40r 1 EC AF 00 .faraddr $afec +000E43r 1 ED AF 00 .faraddr $afed +000E46r 1 EE AF 00 .faraddr $afee +000E49r 1 EF AF 00 .faraddr $afef +000E4Cr 1 F0 AF 00 .faraddr $aff0 +000E4Fr 1 F1 AF 00 .faraddr $aff1 +000E52r 1 F2 AF 00 .faraddr $aff2 +000E55r 1 F3 AF 00 .faraddr $aff3 +000E58r 1 F4 AF 00 .faraddr $aff4 +000E5Br 1 F5 AF 00 .faraddr $aff5 +000E5Er 1 F6 AF 00 .faraddr $aff6 +000E61r 1 F7 AF 00 .faraddr $aff7 +000E64r 1 F8 AF 00 .faraddr $aff8 +000E67r 1 F9 AF 00 .faraddr $aff9 +000E6Ar 1 FA AF 00 .faraddr $affa +000E6Dr 1 FB AF 00 .faraddr $affb +000E70r 1 FC AF 00 .faraddr $affc +000E73r 1 FD AF 00 .faraddr $affd +000E76r 1 FE AF 00 .faraddr $affe +000E79r 1 FF AF 00 .faraddr $afff +000E7Cr 1 00 B0 00 .faraddr $b000 +000E7Fr 1 01 B0 00 .faraddr $b001 +000E82r 1 02 B0 00 .faraddr $b002 +000E85r 1 03 B0 00 .faraddr $b003 +000E88r 1 04 B0 00 .faraddr $b004 +000E8Br 1 05 B0 00 .faraddr $b005 +000E8Er 1 06 B0 00 .faraddr $b006 +000E91r 1 07 B0 00 .faraddr $b007 +000E94r 1 08 B0 00 .faraddr $b008 +000E97r 1 09 B0 00 .faraddr $b009 +000E9Ar 1 0A B0 00 .faraddr $b00a +000E9Dr 1 0B B0 00 .faraddr $b00b +000EA0r 1 0C B0 00 .faraddr $b00c +000EA3r 1 0D B0 00 .faraddr $b00d +000EA6r 1 0E B0 00 .faraddr $b00e +000EA9r 1 0F B0 00 .faraddr $b00f +000EACr 1 E1 FF 00 .faraddr $ffe1 +000EAFr 1 E2 FF 00 .faraddr $ffe2 +000EB2r 1 E3 FF 00 .faraddr $ffe3 +000EB5r 1 E4 FF 00 .faraddr $ffe4 +000EB8r 1 E5 FF 00 .faraddr $ffe5 +000EBBr 1 E6 FF 00 .faraddr $ffe6 +000EBEr 1 E7 FF 00 .faraddr $ffe7 +000EC1r 1 E8 FF 00 .faraddr $ffe8 +000EC4r 1 E9 FF 00 .faraddr $ffe9 +000EC7r 1 EA FF 00 .faraddr $ffea +000ECAr 1 EB FF 00 .faraddr $ffeb +000ECDr 1 EC FF 00 .faraddr $ffec +000ED0r 1 ED FF 00 .faraddr $ffed +000ED3r 1 EE FF 00 .faraddr $ffee +000ED6r 1 EF FF 00 .faraddr $ffef +000ED9r 1 F0 FF 00 .faraddr $fff0 +000EDCr 1 F1 FF 00 .faraddr $fff1 +000EDFr 1 F2 FF 00 .faraddr $fff2 +000EE2r 1 F3 FF 00 .faraddr $fff3 +000EE5r 1 F4 FF 00 .faraddr $fff4 +000EE8r 1 F5 FF 00 .faraddr $fff5 +000EEBr 1 F6 FF 00 .faraddr $fff6 +000EEEr 1 F7 FF 00 .faraddr $fff7 +000EF1r 1 F8 FF 00 .faraddr $fff8 +000EF4r 1 F9 FF 00 .faraddr $fff9 +000EF7r 1 FA FF 00 .faraddr $fffa +000EFAr 1 FB FF 00 .faraddr $fffb +000EFDr 1 FC FF 00 .faraddr $fffc +000F00r 1 FD FF 00 .faraddr $fffd +000F03r 1 FE FF 00 .faraddr $fffe +000F06r 1 FF FF 00 .faraddr $ffff +000F09r 1 00 00 01 .faraddr $10000 +000F0Cr 1 01 00 01 .faraddr $10001 +000F0Fr 1 02 00 01 .faraddr $10002 +000F12r 1 03 00 01 .faraddr $10003 +000F15r 1 04 00 01 .faraddr $10004 +000F18r 1 05 00 01 .faraddr $10005 +000F1Br 1 06 00 01 .faraddr $10006 +000F1Er 1 07 00 01 .faraddr $10007 +000F21r 1 08 00 01 .faraddr $10008 +000F24r 1 09 00 01 .faraddr $10009 +000F27r 1 0A 00 01 .faraddr $1000a +000F2Ar 1 0B 00 01 .faraddr $1000b +000F2Dr 1 0C 00 01 .faraddr $1000c +000F30r 1 0D 00 01 .faraddr $1000d +000F33r 1 0E 00 01 .faraddr $1000e +000F36r 1 0F 00 01 .faraddr $1000f +000F39r 1 E1 FF 10 .faraddr $10ffe1 +000F3Cr 1 E2 FF 10 .faraddr $10ffe2 +000F3Fr 1 E3 FF 10 .faraddr $10ffe3 +000F42r 1 E4 FF 10 .faraddr $10ffe4 +000F45r 1 E5 FF 10 .faraddr $10ffe5 +000F48r 1 E6 FF 10 .faraddr $10ffe6 +000F4Br 1 E7 FF 10 .faraddr $10ffe7 +000F4Er 1 E8 FF 10 .faraddr $10ffe8 +000F51r 1 E9 FF 10 .faraddr $10ffe9 +000F54r 1 EA FF 10 .faraddr $10ffea +000F57r 1 EB FF 10 .faraddr $10ffeb +000F5Ar 1 EC FF 10 .faraddr $10ffec +000F5Dr 1 ED FF 10 .faraddr $10ffed +000F60r 1 EE FF 10 .faraddr $10ffee +000F63r 1 EF FF 10 .faraddr $10ffef +000F66r 1 F0 FF 10 .faraddr $10fff0 +000F69r 1 F1 FF 10 .faraddr $10fff1 +000F6Cr 1 F2 FF 10 .faraddr $10fff2 +000F6Fr 1 F3 FF 10 .faraddr $10fff3 +000F72r 1 F4 FF 10 .faraddr $10fff4 +000F75r 1 F5 FF 10 .faraddr $10fff5 +000F78r 1 F6 FF 10 .faraddr $10fff6 +000F7Br 1 F7 FF 10 .faraddr $10fff7 +000F7Er 1 F8 FF 10 .faraddr $10fff8 +000F81r 1 F9 FF 10 .faraddr $10fff9 +000F84r 1 FA FF 10 .faraddr $10fffa +000F87r 1 FB FF 10 .faraddr $10fffb +000F8Ar 1 FC FF 10 .faraddr $10fffc +000F8Dr 1 FD FF 10 .faraddr $10fffd +000F90r 1 FE FF 10 .faraddr $10fffe +000F93r 1 FF FF 10 .faraddr $10ffff +000F96r 1 00 00 11 .faraddr $110000 +000F99r 1 01 00 11 .faraddr $110001 +000F9Cr 1 02 00 11 .faraddr $110002 +000F9Fr 1 03 00 11 .faraddr $110003 +000FA2r 1 04 00 11 .faraddr $110004 +000FA5r 1 05 00 11 .faraddr $110005 +000FA8r 1 06 00 11 .faraddr $110006 +000FABr 1 07 00 11 .faraddr $110007 +000FAEr 1 08 00 11 .faraddr $110008 +000FB1r 1 09 00 11 .faraddr $110009 +000FB4r 1 0A 00 11 .faraddr $11000a +000FB7r 1 0B 00 11 .faraddr $11000b +000FBAr 1 0C 00 11 .faraddr $11000c +000FBDr 1 0D 00 11 .faraddr $11000d +000FC0r 1 0E 00 11 .faraddr $11000e +000FC3r 1 0F 00 11 .faraddr $11000f +000FC6r 1 E1 FF 20 .faraddr $20ffe1 +000FC9r 1 E2 FF 20 .faraddr $20ffe2 +000FCCr 1 E3 FF 20 .faraddr $20ffe3 +000FCFr 1 E4 FF 20 .faraddr $20ffe4 +000FD2r 1 E5 FF 20 .faraddr $20ffe5 +000FD5r 1 E6 FF 20 .faraddr $20ffe6 +000FD8r 1 E7 FF 20 .faraddr $20ffe7 +000FDBr 1 E8 FF 20 .faraddr $20ffe8 +000FDEr 1 E9 FF 20 .faraddr $20ffe9 +000FE1r 1 EA FF 20 .faraddr $20ffea +000FE4r 1 EB FF 20 .faraddr $20ffeb +000FE7r 1 EC FF 20 .faraddr $20ffec +000FEAr 1 ED FF 20 .faraddr $20ffed +000FEDr 1 EE FF 20 .faraddr $20ffee +000FF0r 1 EF FF 20 .faraddr $20ffef +000FF3r 1 F0 FF 20 .faraddr $20fff0 +000FF6r 1 F1 FF 20 .faraddr $20fff1 +000FF9r 1 F2 FF 20 .faraddr $20fff2 +000FFCr 1 F3 FF 20 .faraddr $20fff3 +000FFFr 1 F4 FF 20 .faraddr $20fff4 +001002r 1 F5 FF 20 .faraddr $20fff5 +001005r 1 F6 FF 20 .faraddr $20fff6 +001008r 1 F7 FF 20 .faraddr $20fff7 +00100Br 1 F8 FF 20 .faraddr $20fff8 +00100Er 1 F9 FF 20 .faraddr $20fff9 +001011r 1 FA FF 20 .faraddr $20fffa +001014r 1 FB FF 20 .faraddr $20fffb +001017r 1 FC FF 20 .faraddr $20fffc +00101Ar 1 FD FF 20 .faraddr $20fffd +00101Dr 1 FE FF 20 .faraddr $20fffe +001020r 1 FF FF 20 .faraddr $20ffff +001023r 1 00 00 21 .faraddr $210000 +001026r 1 01 00 21 .faraddr $210001 +001029r 1 02 00 21 .faraddr $210002 +00102Cr 1 03 00 21 .faraddr $210003 +00102Fr 1 04 00 21 .faraddr $210004 +001032r 1 05 00 21 .faraddr $210005 +001035r 1 06 00 21 .faraddr $210006 +001038r 1 07 00 21 .faraddr $210007 +00103Br 1 08 00 21 .faraddr $210008 +00103Er 1 09 00 21 .faraddr $210009 +001041r 1 0A 00 21 .faraddr $21000a +001044r 1 0B 00 21 .faraddr $21000b +001047r 1 0C 00 21 .faraddr $21000c +00104Ar 1 0D 00 21 .faraddr $21000d +00104Dr 1 0E 00 21 .faraddr $21000e +001050r 1 0F 00 21 .faraddr $21000f +001053r 1 E1 FF 7F .faraddr $7fffe1 +001056r 1 E2 FF 7F .faraddr $7fffe2 +001059r 1 E3 FF 7F .faraddr $7fffe3 +00105Cr 1 E4 FF 7F .faraddr $7fffe4 +00105Fr 1 E5 FF 7F .faraddr $7fffe5 +001062r 1 E6 FF 7F .faraddr $7fffe6 +001065r 1 E7 FF 7F .faraddr $7fffe7 +001068r 1 E8 FF 7F .faraddr $7fffe8 +00106Br 1 E9 FF 7F .faraddr $7fffe9 +00106Er 1 EA FF 7F .faraddr $7fffea +001071r 1 EB FF 7F .faraddr $7fffeb +001074r 1 EC FF 7F .faraddr $7fffec +001077r 1 ED FF 7F .faraddr $7fffed +00107Ar 1 EE FF 7F .faraddr $7fffee +00107Dr 1 EF FF 7F .faraddr $7fffef +001080r 1 F0 FF 7F .faraddr $7ffff0 +001083r 1 F1 FF 7F .faraddr $7ffff1 +001086r 1 F2 FF 7F .faraddr $7ffff2 +001089r 1 F3 FF 7F .faraddr $7ffff3 +00108Cr 1 F4 FF 7F .faraddr $7ffff4 +00108Fr 1 F5 FF 7F .faraddr $7ffff5 +001092r 1 F6 FF 7F .faraddr $7ffff6 +001095r 1 F7 FF 7F .faraddr $7ffff7 +001098r 1 F8 FF 7F .faraddr $7ffff8 +00109Br 1 F9 FF 7F .faraddr $7ffff9 +00109Er 1 FA FF 7F .faraddr $7ffffa +0010A1r 1 FB FF 7F .faraddr $7ffffb +0010A4r 1 FC FF 7F .faraddr $7ffffc +0010A7r 1 FD FF 7F .faraddr $7ffffd +0010AAr 1 FE FF 7F .faraddr $7ffffe +0010ADr 1 FF FF 7F .faraddr $7fffff +0010B0r 1 00 00 80 .faraddr $800000 +0010B3r 1 01 00 80 .faraddr $800001 +0010B6r 1 02 00 80 .faraddr $800002 +0010B9r 1 03 00 80 .faraddr $800003 +0010BCr 1 04 00 80 .faraddr $800004 +0010BFr 1 05 00 80 .faraddr $800005 +0010C2r 1 06 00 80 .faraddr $800006 +0010C5r 1 07 00 80 .faraddr $800007 +0010C8r 1 08 00 80 .faraddr $800008 +0010CBr 1 09 00 80 .faraddr $800009 +0010CEr 1 0A 00 80 .faraddr $80000a +0010D1r 1 0B 00 80 .faraddr $80000b +0010D4r 1 0C 00 80 .faraddr $80000c +0010D7r 1 0D 00 80 .faraddr $80000d +0010DAr 1 0E 00 80 .faraddr $80000e +0010DDr 1 0F 00 80 .faraddr $80000f +0010E0r 1 E1 FF 9F .faraddr $9fffe1 +0010E3r 1 E2 FF 9F .faraddr $9fffe2 +0010E6r 1 E3 FF 9F .faraddr $9fffe3 +0010E9r 1 E4 FF 9F .faraddr $9fffe4 +0010ECr 1 E5 FF 9F .faraddr $9fffe5 +0010EFr 1 E6 FF 9F .faraddr $9fffe6 +0010F2r 1 E7 FF 9F .faraddr $9fffe7 +0010F5r 1 E8 FF 9F .faraddr $9fffe8 +0010F8r 1 E9 FF 9F .faraddr $9fffe9 +0010FBr 1 EA FF 9F .faraddr $9fffea +0010FEr 1 EB FF 9F .faraddr $9fffeb +001101r 1 EC FF 9F .faraddr $9fffec +001104r 1 ED FF 9F .faraddr $9fffed +001107r 1 EE FF 9F .faraddr $9fffee +00110Ar 1 EF FF 9F .faraddr $9fffef +00110Dr 1 F0 FF 9F .faraddr $9ffff0 +001110r 1 F1 FF 9F .faraddr $9ffff1 +001113r 1 F2 FF 9F .faraddr $9ffff2 +001116r 1 F3 FF 9F .faraddr $9ffff3 +001119r 1 F4 FF 9F .faraddr $9ffff4 +00111Cr 1 F5 FF 9F .faraddr $9ffff5 +00111Fr 1 F6 FF 9F .faraddr $9ffff6 +001122r 1 F7 FF 9F .faraddr $9ffff7 +001125r 1 F8 FF 9F .faraddr $9ffff8 +001128r 1 F9 FF 9F .faraddr $9ffff9 +00112Br 1 FA FF 9F .faraddr $9ffffa +00112Er 1 FB FF 9F .faraddr $9ffffb +001131r 1 FC FF 9F .faraddr $9ffffc +001134r 1 FD FF 9F .faraddr $9ffffd +001137r 1 FE FF 9F .faraddr $9ffffe +00113Ar 1 FF FF 9F .faraddr $9fffff +00113Dr 1 00 00 A0 .faraddr $a00000 +001140r 1 01 00 A0 .faraddr $a00001 +001143r 1 02 00 A0 .faraddr $a00002 +001146r 1 03 00 A0 .faraddr $a00003 +001149r 1 04 00 A0 .faraddr $a00004 +00114Cr 1 05 00 A0 .faraddr $a00005 +00114Fr 1 06 00 A0 .faraddr $a00006 +001152r 1 07 00 A0 .faraddr $a00007 +001155r 1 08 00 A0 .faraddr $a00008 +001158r 1 09 00 A0 .faraddr $a00009 +00115Br 1 0A 00 A0 .faraddr $a0000a +00115Er 1 0B 00 A0 .faraddr $a0000b +001161r 1 0C 00 A0 .faraddr $a0000c +001164r 1 0D 00 A0 .faraddr $a0000d +001167r 1 0E 00 A0 .faraddr $a0000e +00116Ar 1 0F 00 A0 .faraddr $a0000f +00116Dr 1 E1 FF FF .faraddr $ffffe1 +001170r 1 E2 FF FF .faraddr $ffffe2 +001173r 1 E3 FF FF .faraddr $ffffe3 +001176r 1 E4 FF FF .faraddr $ffffe4 +001179r 1 E5 FF FF .faraddr $ffffe5 +00117Cr 1 E6 FF FF .faraddr $ffffe6 +00117Fr 1 E7 FF FF .faraddr $ffffe7 +001182r 1 E8 FF FF .faraddr $ffffe8 +001185r 1 E9 FF FF .faraddr $ffffe9 +001188r 1 EA FF FF .faraddr $ffffea +00118Br 1 EB FF FF .faraddr $ffffeb +00118Er 1 EC FF FF .faraddr $ffffec +001191r 1 ED FF FF .faraddr $ffffed +001194r 1 EE FF FF .faraddr $ffffee +001197r 1 EF FF FF .faraddr $ffffef +00119Ar 1 F0 FF FF .faraddr $fffff0 +00119Dr 1 F1 FF FF .faraddr $fffff1 +0011A0r 1 F2 FF FF .faraddr $fffff2 +0011A3r 1 F3 FF FF .faraddr $fffff3 +0011A6r 1 F4 FF FF .faraddr $fffff4 +0011A9r 1 F5 FF FF .faraddr $fffff5 +0011ACr 1 F6 FF FF .faraddr $fffff6 +0011AFr 1 F7 FF FF .faraddr $fffff7 +0011B2r 1 F8 FF FF .faraddr $fffff8 +0011B5r 1 F9 FF FF .faraddr $fffff9 +0011B8r 1 FA FF FF .faraddr $fffffa +0011BBr 1 FB FF FF .faraddr $fffffb +0011BEr 1 FC FF FF .faraddr $fffffc +0011C1r 1 FD FF FF .faraddr $fffffd +0011C4r 1 FE FF FF .faraddr $fffffe +0011C7r 1 FF FF FF .faraddr $ffffff 0011CAr 1 -0011CAr 1 ; hex values, uppercase -0011CAr 1 00 00 00 .faraddr $0 -0011CDr 1 01 00 00 .faraddr $1 -0011D0r 1 02 00 00 .faraddr $2 -0011D3r 1 03 00 00 .faraddr $3 -0011D6r 1 04 00 00 .faraddr $4 -0011D9r 1 05 00 00 .faraddr $5 -0011DCr 1 06 00 00 .faraddr $6 -0011DFr 1 07 00 00 .faraddr $7 -0011E2r 1 08 00 00 .faraddr $8 -0011E5r 1 09 00 00 .faraddr $9 -0011E8r 1 0A 00 00 .faraddr $A -0011EBr 1 0B 00 00 .faraddr $B -0011EEr 1 0C 00 00 .faraddr $C -0011F1r 1 0D 00 00 .faraddr $D -0011F4r 1 0E 00 00 .faraddr $E -0011F7r 1 0F 00 00 .faraddr $F -0011FAr 1 10 00 00 .faraddr $10 -0011FDr 1 11 00 00 .faraddr $11 -001200r 1 12 00 00 .faraddr $12 -001203r 1 13 00 00 .faraddr $13 -001206r 1 70 00 00 .faraddr $70 -001209r 1 71 00 00 .faraddr $71 -00120Cr 1 72 00 00 .faraddr $72 -00120Fr 1 73 00 00 .faraddr $73 -001212r 1 74 00 00 .faraddr $74 -001215r 1 75 00 00 .faraddr $75 -001218r 1 76 00 00 .faraddr $76 -00121Br 1 77 00 00 .faraddr $77 -00121Er 1 78 00 00 .faraddr $78 -001221r 1 79 00 00 .faraddr $79 -001224r 1 7A 00 00 .faraddr $7A -001227r 1 7B 00 00 .faraddr $7B -00122Ar 1 7C 00 00 .faraddr $7C -00122Dr 1 7D 00 00 .faraddr $7D -001230r 1 7E 00 00 .faraddr $7E -001233r 1 7F 00 00 .faraddr $7F -001236r 1 80 00 00 .faraddr $80 -001239r 1 81 00 00 .faraddr $81 -00123Cr 1 82 00 00 .faraddr $82 -00123Fr 1 83 00 00 .faraddr $83 -001242r 1 84 00 00 .faraddr $84 -001245r 1 85 00 00 .faraddr $85 -001248r 1 86 00 00 .faraddr $86 -00124Br 1 F0 00 00 .faraddr $F0 -00124Er 1 F1 00 00 .faraddr $F1 -001251r 1 F2 00 00 .faraddr $F2 -001254r 1 F3 00 00 .faraddr $F3 -001257r 1 F4 00 00 .faraddr $F4 -00125Ar 1 F5 00 00 .faraddr $F5 -00125Dr 1 F6 00 00 .faraddr $F6 -001260r 1 F7 00 00 .faraddr $F7 -001263r 1 F8 00 00 .faraddr $F8 -001266r 1 F9 00 00 .faraddr $F9 -001269r 1 FA 00 00 .faraddr $FA -00126Cr 1 FB 00 00 .faraddr $FB -00126Fr 1 FC 00 00 .faraddr $FC -001272r 1 FD 00 00 .faraddr $FD -001275r 1 FE 00 00 .faraddr $FE -001278r 1 FF 00 00 .faraddr $FF -00127Br 1 00 01 00 .faraddr $100 -00127Er 1 01 01 00 .faraddr $101 -001281r 1 02 01 00 .faraddr $102 -001284r 1 03 01 00 .faraddr $103 -001287r 1 D2 0F 00 .faraddr $FD2 -00128Ar 1 D3 0F 00 .faraddr $FD3 -00128Dr 1 D4 0F 00 .faraddr $FD4 -001290r 1 D5 0F 00 .faraddr $FD5 -001293r 1 D6 0F 00 .faraddr $FD6 -001296r 1 D7 0F 00 .faraddr $FD7 -001299r 1 D8 0F 00 .faraddr $FD8 -00129Cr 1 D9 0F 00 .faraddr $FD9 -00129Fr 1 DA 0F 00 .faraddr $FDA -0012A2r 1 DB 0F 00 .faraddr $FDB -0012A5r 1 DC 0F 00 .faraddr $FDC -0012A8r 1 DD 0F 00 .faraddr $FDD -0012ABr 1 DE 0F 00 .faraddr $FDE -0012AEr 1 DF 0F 00 .faraddr $FDF -0012B1r 1 E0 0F 00 .faraddr $FE0 -0012B4r 1 E1 0F 00 .faraddr $FE1 -0012B7r 1 E2 0F 00 .faraddr $FE2 -0012BAr 1 E3 0F 00 .faraddr $FE3 -0012BDr 1 E4 0F 00 .faraddr $FE4 -0012C0r 1 E5 0F 00 .faraddr $FE5 -0012C3r 1 E6 0F 00 .faraddr $FE6 -0012C6r 1 E7 0F 00 .faraddr $FE7 -0012C9r 1 E8 0F 00 .faraddr $FE8 -0012CCr 1 E9 0F 00 .faraddr $FE9 -0012CFr 1 EA 0F 00 .faraddr $FEA -0012D2r 1 EB 0F 00 .faraddr $FEB -0012D5r 1 EC 0F 00 .faraddr $FEC -0012D8r 1 ED 0F 00 .faraddr $FED -0012DBr 1 EE 0F 00 .faraddr $FEE -0012DEr 1 EF 0F 00 .faraddr $FEF -0012E1r 1 F0 0F 00 .faraddr $FF0 -0012E4r 1 F1 0F 00 .faraddr $FF1 -0012E7r 1 F2 0F 00 .faraddr $FF2 -0012EAr 1 F3 0F 00 .faraddr $FF3 -0012EDr 1 F4 0F 00 .faraddr $FF4 -0012F0r 1 F5 0F 00 .faraddr $FF5 -0012F3r 1 F6 0F 00 .faraddr $FF6 -0012F6r 1 F7 0F 00 .faraddr $FF7 -0012F9r 1 F8 0F 00 .faraddr $FF8 -0012FCr 1 F9 0F 00 .faraddr $FF9 -0012FFr 1 FA 0F 00 .faraddr $FFA -001302r 1 FB 0F 00 .faraddr $FFB -001305r 1 FC 0F 00 .faraddr $FFC -001308r 1 FD 0F 00 .faraddr $FFD -00130Br 1 FE 0F 00 .faraddr $FFE -00130Er 1 FF 0F 00 .faraddr $FFF -001311r 1 00 10 00 .faraddr $1000 -001314r 1 01 10 00 .faraddr $1001 -001317r 1 02 10 00 .faraddr $1002 -00131Ar 1 03 10 00 .faraddr $1003 -00131Dr 1 04 10 00 .faraddr $1004 -001320r 1 05 10 00 .faraddr $1005 -001323r 1 06 10 00 .faraddr $1006 -001326r 1 07 10 00 .faraddr $1007 -001329r 1 08 10 00 .faraddr $1008 -00132Cr 1 F0 7F 00 .faraddr $7FF0 -00132Fr 1 F1 7F 00 .faraddr $7FF1 -001332r 1 F2 7F 00 .faraddr $7FF2 -001335r 1 F3 7F 00 .faraddr $7FF3 -001338r 1 F4 7F 00 .faraddr $7FF4 -00133Br 1 F5 7F 00 .faraddr $7FF5 -00133Er 1 F6 7F 00 .faraddr $7FF6 -001341r 1 F7 7F 00 .faraddr $7FF7 -001344r 1 F8 7F 00 .faraddr $7FF8 -001347r 1 F9 7F 00 .faraddr $7FF9 -00134Ar 1 FA 7F 00 .faraddr $7FFA -00134Dr 1 FB 7F 00 .faraddr $7FFB -001350r 1 FC 7F 00 .faraddr $7FFC -001353r 1 FD 7F 00 .faraddr $7FFD -001356r 1 FE 7F 00 .faraddr $7FFE -001359r 1 FF 7F 00 .faraddr $7FFF -00135Cr 1 00 80 00 .faraddr $8000 -00135Fr 1 01 80 00 .faraddr $8001 -001362r 1 02 80 00 .faraddr $8002 -001365r 1 03 80 00 .faraddr $8003 -001368r 1 04 80 00 .faraddr $8004 -00136Br 1 05 80 00 .faraddr $8005 -00136Er 1 06 80 00 .faraddr $8006 -001371r 1 07 80 00 .faraddr $8007 -001374r 1 08 80 00 .faraddr $8008 -001377r 1 09 80 00 .faraddr $8009 -00137Ar 1 0A 80 00 .faraddr $800A -00137Dr 1 0B 80 00 .faraddr $800B -001380r 1 E1 9F 00 .faraddr $9FE1 -001383r 1 E2 9F 00 .faraddr $9FE2 -001386r 1 E3 9F 00 .faraddr $9FE3 -001389r 1 E4 9F 00 .faraddr $9FE4 -00138Cr 1 E5 9F 00 .faraddr $9FE5 -00138Fr 1 E6 9F 00 .faraddr $9FE6 -001392r 1 E7 9F 00 .faraddr $9FE7 -001395r 1 E8 9F 00 .faraddr $9FE8 -001398r 1 E9 9F 00 .faraddr $9FE9 -00139Br 1 EA 9F 00 .faraddr $9FEA -00139Er 1 EB 9F 00 .faraddr $9FEB -0013A1r 1 EC 9F 00 .faraddr $9FEC -0013A4r 1 ED 9F 00 .faraddr $9FED -0013A7r 1 EE 9F 00 .faraddr $9FEE -0013AAr 1 EF 9F 00 .faraddr $9FEF -0013ADr 1 F0 9F 00 .faraddr $9FF0 -0013B0r 1 F1 9F 00 .faraddr $9FF1 -0013B3r 1 F2 9F 00 .faraddr $9FF2 -0013B6r 1 F3 9F 00 .faraddr $9FF3 -0013B9r 1 F4 9F 00 .faraddr $9FF4 -0013BCr 1 F5 9F 00 .faraddr $9FF5 -0013BFr 1 F6 9F 00 .faraddr $9FF6 -0013C2r 1 F7 9F 00 .faraddr $9FF7 -0013C5r 1 F8 9F 00 .faraddr $9FF8 -0013C8r 1 F9 9F 00 .faraddr $9FF9 -0013CBr 1 FA 9F 00 .faraddr $9FFA -0013CEr 1 FB 9F 00 .faraddr $9FFB -0013D1r 1 FC 9F 00 .faraddr $9FFC -0013D4r 1 FD 9F 00 .faraddr $9FFD -0013D7r 1 FE 9F 00 .faraddr $9FFE -0013DAr 1 FF 9F 00 .faraddr $9FFF -0013DDr 1 00 A0 00 .faraddr $A000 -0013E0r 1 01 A0 00 .faraddr $A001 -0013E3r 1 02 A0 00 .faraddr $A002 -0013E6r 1 03 A0 00 .faraddr $A003 -0013E9r 1 04 A0 00 .faraddr $A004 -0013ECr 1 05 A0 00 .faraddr $A005 -0013EFr 1 06 A0 00 .faraddr $A006 -0013F2r 1 07 A0 00 .faraddr $A007 -0013F5r 1 08 A0 00 .faraddr $A008 -0013F8r 1 09 A0 00 .faraddr $A009 -0013FBr 1 0A A0 00 .faraddr $A00A -0013FEr 1 0B A0 00 .faraddr $A00B -001401r 1 0C A0 00 .faraddr $A00C -001404r 1 0D A0 00 .faraddr $A00D -001407r 1 0E A0 00 .faraddr $A00E -00140Ar 1 0F A0 00 .faraddr $A00F -00140Dr 1 E1 AF 00 .faraddr $AFE1 -001410r 1 E2 AF 00 .faraddr $AFE2 -001413r 1 E3 AF 00 .faraddr $AFE3 -001416r 1 E4 AF 00 .faraddr $AFE4 -001419r 1 E5 AF 00 .faraddr $AFE5 -00141Cr 1 E6 AF 00 .faraddr $AFE6 -00141Fr 1 E7 AF 00 .faraddr $AFE7 -001422r 1 E8 AF 00 .faraddr $AFE8 -001425r 1 E9 AF 00 .faraddr $AFE9 -001428r 1 EA AF 00 .faraddr $AFEA -00142Br 1 EB AF 00 .faraddr $AFEB -00142Er 1 EC AF 00 .faraddr $AFEC -001431r 1 ED AF 00 .faraddr $AFED -001434r 1 EE AF 00 .faraddr $AFEE -001437r 1 EF AF 00 .faraddr $AFEF -00143Ar 1 F0 AF 00 .faraddr $AFF0 -00143Dr 1 F1 AF 00 .faraddr $AFF1 -001440r 1 F2 AF 00 .faraddr $AFF2 -001443r 1 F3 AF 00 .faraddr $AFF3 -001446r 1 F4 AF 00 .faraddr $AFF4 -001449r 1 F5 AF 00 .faraddr $AFF5 -00144Cr 1 F6 AF 00 .faraddr $AFF6 -00144Fr 1 F7 AF 00 .faraddr $AFF7 -001452r 1 F8 AF 00 .faraddr $AFF8 -001455r 1 F9 AF 00 .faraddr $AFF9 -001458r 1 FA AF 00 .faraddr $AFFA -00145Br 1 FB AF 00 .faraddr $AFFB -00145Er 1 FC AF 00 .faraddr $AFFC -001461r 1 FD AF 00 .faraddr $AFFD -001464r 1 FE AF 00 .faraddr $AFFE -001467r 1 FF AF 00 .faraddr $AFFF -00146Ar 1 00 B0 00 .faraddr $B000 -00146Dr 1 01 B0 00 .faraddr $B001 -001470r 1 02 B0 00 .faraddr $B002 -001473r 1 03 B0 00 .faraddr $B003 -001476r 1 04 B0 00 .faraddr $B004 -001479r 1 05 B0 00 .faraddr $B005 -00147Cr 1 06 B0 00 .faraddr $B006 -00147Fr 1 07 B0 00 .faraddr $B007 -001482r 1 08 B0 00 .faraddr $B008 -001485r 1 09 B0 00 .faraddr $B009 -001488r 1 0A B0 00 .faraddr $B00A -00148Br 1 0B B0 00 .faraddr $B00B -00148Er 1 0C B0 00 .faraddr $B00C -001491r 1 0D B0 00 .faraddr $B00D -001494r 1 0E B0 00 .faraddr $B00E -001497r 1 0F B0 00 .faraddr $B00F -00149Ar 1 E1 FF 00 .faraddr $FFE1 -00149Dr 1 E2 FF 00 .faraddr $FFE2 -0014A0r 1 E3 FF 00 .faraddr $FFE3 -0014A3r 1 E4 FF 00 .faraddr $FFE4 -0014A6r 1 E5 FF 00 .faraddr $FFE5 -0014A9r 1 E6 FF 00 .faraddr $FFE6 -0014ACr 1 E7 FF 00 .faraddr $FFE7 -0014AFr 1 E8 FF 00 .faraddr $FFE8 -0014B2r 1 E9 FF 00 .faraddr $FFE9 -0014B5r 1 EA FF 00 .faraddr $FFEA -0014B8r 1 EB FF 00 .faraddr $FFEB -0014BBr 1 EC FF 00 .faraddr $FFEC -0014BEr 1 ED FF 00 .faraddr $FFED -0014C1r 1 EE FF 00 .faraddr $FFEE -0014C4r 1 EF FF 00 .faraddr $FFEF -0014C7r 1 F0 FF 00 .faraddr $FFF0 -0014CAr 1 F1 FF 00 .faraddr $FFF1 -0014CDr 1 F2 FF 00 .faraddr $FFF2 -0014D0r 1 F3 FF 00 .faraddr $FFF3 -0014D3r 1 F4 FF 00 .faraddr $FFF4 -0014D6r 1 F5 FF 00 .faraddr $FFF5 -0014D9r 1 F6 FF 00 .faraddr $FFF6 -0014DCr 1 F7 FF 00 .faraddr $FFF7 -0014DFr 1 F8 FF 00 .faraddr $FFF8 -0014E2r 1 F9 FF 00 .faraddr $FFF9 -0014E5r 1 FA FF 00 .faraddr $FFFA -0014E8r 1 FB FF 00 .faraddr $FFFB -0014EBr 1 FC FF 00 .faraddr $FFFC -0014EEr 1 FD FF 00 .faraddr $FFFD -0014F1r 1 FE FF 00 .faraddr $FFFE -0014F4r 1 FF FF 00 .faraddr $FFFF -0014F7r 1 00 00 01 .faraddr $10000 -0014FAr 1 01 00 01 .faraddr $10001 -0014FDr 1 02 00 01 .faraddr $10002 -001500r 1 03 00 01 .faraddr $10003 -001503r 1 04 00 01 .faraddr $10004 -001506r 1 05 00 01 .faraddr $10005 -001509r 1 06 00 01 .faraddr $10006 -00150Cr 1 07 00 01 .faraddr $10007 -00150Fr 1 08 00 01 .faraddr $10008 -001512r 1 09 00 01 .faraddr $10009 -001515r 1 0A 00 01 .faraddr $1000A -001518r 1 0B 00 01 .faraddr $1000B -00151Br 1 0C 00 01 .faraddr $1000C -00151Er 1 0D 00 01 .faraddr $1000D -001521r 1 0E 00 01 .faraddr $1000E -001524r 1 0F 00 01 .faraddr $1000F -001527r 1 E1 FF 10 .faraddr $10FFE1 -00152Ar 1 E2 FF 10 .faraddr $10FFE2 -00152Dr 1 E3 FF 10 .faraddr $10FFE3 -001530r 1 E4 FF 10 .faraddr $10FFE4 -001533r 1 E5 FF 10 .faraddr $10FFE5 -001536r 1 E6 FF 10 .faraddr $10FFE6 -001539r 1 E7 FF 10 .faraddr $10FFE7 -00153Cr 1 E8 FF 10 .faraddr $10FFE8 -00153Fr 1 E9 FF 10 .faraddr $10FFE9 -001542r 1 EA FF 10 .faraddr $10FFEA -001545r 1 EB FF 10 .faraddr $10FFEB -001548r 1 EC FF 10 .faraddr $10FFEC -00154Br 1 ED FF 10 .faraddr $10FFED -00154Er 1 EE FF 10 .faraddr $10FFEE -001551r 1 EF FF 10 .faraddr $10FFEF -001554r 1 F0 FF 10 .faraddr $10FFF0 -001557r 1 F1 FF 10 .faraddr $10FFF1 -00155Ar 1 F2 FF 10 .faraddr $10FFF2 -00155Dr 1 F3 FF 10 .faraddr $10FFF3 -001560r 1 F4 FF 10 .faraddr $10FFF4 -001563r 1 F5 FF 10 .faraddr $10FFF5 -001566r 1 F6 FF 10 .faraddr $10FFF6 -001569r 1 F7 FF 10 .faraddr $10FFF7 -00156Cr 1 F8 FF 10 .faraddr $10FFF8 -00156Fr 1 F9 FF 10 .faraddr $10FFF9 -001572r 1 FA FF 10 .faraddr $10FFFA -001575r 1 FB FF 10 .faraddr $10FFFB -001578r 1 FC FF 10 .faraddr $10FFFC -00157Br 1 FD FF 10 .faraddr $10FFFD -00157Er 1 FE FF 10 .faraddr $10FFFE -001581r 1 FF FF 10 .faraddr $10FFFF -001584r 1 00 00 11 .faraddr $110000 -001587r 1 01 00 11 .faraddr $110001 -00158Ar 1 02 00 11 .faraddr $110002 -00158Dr 1 03 00 11 .faraddr $110003 -001590r 1 04 00 11 .faraddr $110004 -001593r 1 05 00 11 .faraddr $110005 -001596r 1 06 00 11 .faraddr $110006 -001599r 1 07 00 11 .faraddr $110007 -00159Cr 1 08 00 11 .faraddr $110008 -00159Fr 1 09 00 11 .faraddr $110009 -0015A2r 1 0A 00 11 .faraddr $11000A -0015A5r 1 0B 00 11 .faraddr $11000B -0015A8r 1 0C 00 11 .faraddr $11000C -0015ABr 1 0D 00 11 .faraddr $11000D -0015AEr 1 0E 00 11 .faraddr $11000E -0015B1r 1 0F 00 11 .faraddr $11000F -0015B4r 1 E1 FF 20 .faraddr $20FFE1 -0015B7r 1 E2 FF 20 .faraddr $20FFE2 -0015BAr 1 E3 FF 20 .faraddr $20FFE3 -0015BDr 1 E4 FF 20 .faraddr $20FFE4 -0015C0r 1 E5 FF 20 .faraddr $20FFE5 -0015C3r 1 E6 FF 20 .faraddr $20FFE6 -0015C6r 1 E7 FF 20 .faraddr $20FFE7 -0015C9r 1 E8 FF 20 .faraddr $20FFE8 -0015CCr 1 E9 FF 20 .faraddr $20FFE9 -0015CFr 1 EA FF 20 .faraddr $20FFEA -0015D2r 1 EB FF 20 .faraddr $20FFEB -0015D5r 1 EC FF 20 .faraddr $20FFEC -0015D8r 1 ED FF 20 .faraddr $20FFED -0015DBr 1 EE FF 20 .faraddr $20FFEE -0015DEr 1 EF FF 20 .faraddr $20FFEF -0015E1r 1 F0 FF 20 .faraddr $20FFF0 -0015E4r 1 F1 FF 20 .faraddr $20FFF1 -0015E7r 1 F2 FF 20 .faraddr $20FFF2 -0015EAr 1 F3 FF 20 .faraddr $20FFF3 -0015EDr 1 F4 FF 20 .faraddr $20FFF4 -0015F0r 1 F5 FF 20 .faraddr $20FFF5 -0015F3r 1 F6 FF 20 .faraddr $20FFF6 -0015F6r 1 F7 FF 20 .faraddr $20FFF7 -0015F9r 1 F8 FF 20 .faraddr $20FFF8 -0015FCr 1 F9 FF 20 .faraddr $20FFF9 -0015FFr 1 FA FF 20 .faraddr $20FFFA -001602r 1 FB FF 20 .faraddr $20FFFB -001605r 1 FC FF 20 .faraddr $20FFFC -001608r 1 FD FF 20 .faraddr $20FFFD -00160Br 1 FE FF 20 .faraddr $20FFFE -00160Er 1 FF FF 20 .faraddr $20FFFF -001611r 1 00 00 21 .faraddr $210000 -001614r 1 01 00 21 .faraddr $210001 -001617r 1 02 00 21 .faraddr $210002 -00161Ar 1 03 00 21 .faraddr $210003 -00161Dr 1 04 00 21 .faraddr $210004 -001620r 1 05 00 21 .faraddr $210005 -001623r 1 06 00 21 .faraddr $210006 -001626r 1 07 00 21 .faraddr $210007 -001629r 1 08 00 21 .faraddr $210008 -00162Cr 1 09 00 21 .faraddr $210009 -00162Fr 1 0A 00 21 .faraddr $21000A -001632r 1 0B 00 21 .faraddr $21000B -001635r 1 0C 00 21 .faraddr $21000C -001638r 1 0D 00 21 .faraddr $21000D -00163Br 1 0E 00 21 .faraddr $21000E -00163Er 1 0F 00 21 .faraddr $21000F -001641r 1 E1 FF 7F .faraddr $7FFFE1 -001644r 1 E2 FF 7F .faraddr $7FFFE2 -001647r 1 E3 FF 7F .faraddr $7FFFE3 -00164Ar 1 E4 FF 7F .faraddr $7FFFE4 -00164Dr 1 E5 FF 7F .faraddr $7FFFE5 -001650r 1 E6 FF 7F .faraddr $7FFFE6 -001653r 1 E7 FF 7F .faraddr $7FFFE7 -001656r 1 E8 FF 7F .faraddr $7FFFE8 -001659r 1 E9 FF 7F .faraddr $7FFFE9 -00165Cr 1 EA FF 7F .faraddr $7FFFEA -00165Fr 1 EB FF 7F .faraddr $7FFFEB -001662r 1 EC FF 7F .faraddr $7FFFEC -001665r 1 ED FF 7F .faraddr $7FFFED -001668r 1 EE FF 7F .faraddr $7FFFEE -00166Br 1 EF FF 7F .faraddr $7FFFEF -00166Er 1 F0 FF 7F .faraddr $7FFFF0 -001671r 1 F1 FF 7F .faraddr $7FFFF1 -001674r 1 F2 FF 7F .faraddr $7FFFF2 -001677r 1 F3 FF 7F .faraddr $7FFFF3 -00167Ar 1 F4 FF 7F .faraddr $7FFFF4 -00167Dr 1 F5 FF 7F .faraddr $7FFFF5 -001680r 1 F6 FF 7F .faraddr $7FFFF6 -001683r 1 F7 FF 7F .faraddr $7FFFF7 -001686r 1 F8 FF 7F .faraddr $7FFFF8 -001689r 1 F9 FF 7F .faraddr $7FFFF9 -00168Cr 1 FA FF 7F .faraddr $7FFFFA -00168Fr 1 FB FF 7F .faraddr $7FFFFB -001692r 1 FC FF 7F .faraddr $7FFFFC -001695r 1 FD FF 7F .faraddr $7FFFFD -001698r 1 FE FF 7F .faraddr $7FFFFE -00169Br 1 FF FF 7F .faraddr $7FFFFF -00169Er 1 00 00 80 .faraddr $800000 -0016A1r 1 01 00 80 .faraddr $800001 -0016A4r 1 02 00 80 .faraddr $800002 -0016A7r 1 03 00 80 .faraddr $800003 -0016AAr 1 04 00 80 .faraddr $800004 -0016ADr 1 05 00 80 .faraddr $800005 -0016B0r 1 06 00 80 .faraddr $800006 -0016B3r 1 07 00 80 .faraddr $800007 -0016B6r 1 08 00 80 .faraddr $800008 -0016B9r 1 09 00 80 .faraddr $800009 -0016BCr 1 0A 00 80 .faraddr $80000A -0016BFr 1 0B 00 80 .faraddr $80000B -0016C2r 1 0C 00 80 .faraddr $80000C -0016C5r 1 0D 00 80 .faraddr $80000D -0016C8r 1 0E 00 80 .faraddr $80000E -0016CBr 1 0F 00 80 .faraddr $80000F -0016CEr 1 E1 FF 9F .faraddr $9FFFE1 -0016D1r 1 E2 FF 9F .faraddr $9FFFE2 -0016D4r 1 E3 FF 9F .faraddr $9FFFE3 -0016D7r 1 E4 FF 9F .faraddr $9FFFE4 -0016DAr 1 E5 FF 9F .faraddr $9FFFE5 -0016DDr 1 E6 FF 9F .faraddr $9FFFE6 -0016E0r 1 E7 FF 9F .faraddr $9FFFE7 -0016E3r 1 E8 FF 9F .faraddr $9FFFE8 -0016E6r 1 E9 FF 9F .faraddr $9FFFE9 -0016E9r 1 EA FF 9F .faraddr $9FFFEA -0016ECr 1 EB FF 9F .faraddr $9FFFEB -0016EFr 1 EC FF 9F .faraddr $9FFFEC -0016F2r 1 ED FF 9F .faraddr $9FFFED -0016F5r 1 EE FF 9F .faraddr $9FFFEE -0016F8r 1 EF FF 9F .faraddr $9FFFEF -0016FBr 1 F0 FF 9F .faraddr $9FFFF0 -0016FEr 1 F1 FF 9F .faraddr $9FFFF1 -001701r 1 F2 FF 9F .faraddr $9FFFF2 -001704r 1 F3 FF 9F .faraddr $9FFFF3 -001707r 1 F4 FF 9F .faraddr $9FFFF4 -00170Ar 1 F5 FF 9F .faraddr $9FFFF5 -00170Dr 1 F6 FF 9F .faraddr $9FFFF6 -001710r 1 F7 FF 9F .faraddr $9FFFF7 -001713r 1 F8 FF 9F .faraddr $9FFFF8 -001716r 1 F9 FF 9F .faraddr $9FFFF9 -001719r 1 FA FF 9F .faraddr $9FFFFA -00171Cr 1 FB FF 9F .faraddr $9FFFFB -00171Fr 1 FC FF 9F .faraddr $9FFFFC -001722r 1 FD FF 9F .faraddr $9FFFFD -001725r 1 FE FF 9F .faraddr $9FFFFE -001728r 1 FF FF 9F .faraddr $9FFFFF -00172Br 1 00 00 A0 .faraddr $A00000 -00172Er 1 01 00 A0 .faraddr $A00001 -001731r 1 02 00 A0 .faraddr $A00002 -001734r 1 03 00 A0 .faraddr $A00003 -001737r 1 04 00 A0 .faraddr $A00004 -00173Ar 1 05 00 A0 .faraddr $A00005 -00173Dr 1 06 00 A0 .faraddr $A00006 -001740r 1 07 00 A0 .faraddr $A00007 -001743r 1 08 00 A0 .faraddr $A00008 -001746r 1 09 00 A0 .faraddr $A00009 -001749r 1 0A 00 A0 .faraddr $A0000A -00174Cr 1 0B 00 A0 .faraddr $A0000B -00174Fr 1 0C 00 A0 .faraddr $A0000C -001752r 1 0D 00 A0 .faraddr $A0000D -001755r 1 0E 00 A0 .faraddr $A0000E -001758r 1 0F 00 A0 .faraddr $A0000F -00175Br 1 E1 FF FF .faraddr $FFFFE1 -00175Er 1 E2 FF FF .faraddr $FFFFE2 -001761r 1 E3 FF FF .faraddr $FFFFE3 -001764r 1 E4 FF FF .faraddr $FFFFE4 -001767r 1 E5 FF FF .faraddr $FFFFE5 -00176Ar 1 E6 FF FF .faraddr $FFFFE6 -00176Dr 1 E7 FF FF .faraddr $FFFFE7 -001770r 1 E8 FF FF .faraddr $FFFFE8 -001773r 1 E9 FF FF .faraddr $FFFFE9 -001776r 1 EA FF FF .faraddr $FFFFEA -001779r 1 EB FF FF .faraddr $FFFFEB -00177Cr 1 EC FF FF .faraddr $FFFFEC -00177Fr 1 ED FF FF .faraddr $FFFFED -001782r 1 EE FF FF .faraddr $FFFFEE -001785r 1 EF FF FF .faraddr $FFFFEF -001788r 1 F0 FF FF .faraddr $FFFFF0 -00178Br 1 F1 FF FF .faraddr $FFFFF1 -00178Er 1 F2 FF FF .faraddr $FFFFF2 -001791r 1 F3 FF FF .faraddr $FFFFF3 -001794r 1 F4 FF FF .faraddr $FFFFF4 -001797r 1 F5 FF FF .faraddr $FFFFF5 -00179Ar 1 F6 FF FF .faraddr $FFFFF6 -00179Dr 1 F7 FF FF .faraddr $FFFFF7 -0017A0r 1 F8 FF FF .faraddr $FFFFF8 -0017A3r 1 F9 FF FF .faraddr $FFFFF9 -0017A6r 1 FA FF FF .faraddr $FFFFFA -0017A9r 1 FB FF FF .faraddr $FFFFFB -0017ACr 1 FC FF FF .faraddr $FFFFFC -0017AFr 1 FD FF FF .faraddr $FFFFFD -0017B2r 1 FE FF FF .faraddr $FFFFFE -0017B5r 1 FF FF FF .faraddr $FFFFFF +0011CAr 1 ; hex values, uppercase +0011CAr 1 00 00 00 .faraddr $0 +0011CDr 1 01 00 00 .faraddr $1 +0011D0r 1 02 00 00 .faraddr $2 +0011D3r 1 03 00 00 .faraddr $3 +0011D6r 1 04 00 00 .faraddr $4 +0011D9r 1 05 00 00 .faraddr $5 +0011DCr 1 06 00 00 .faraddr $6 +0011DFr 1 07 00 00 .faraddr $7 +0011E2r 1 08 00 00 .faraddr $8 +0011E5r 1 09 00 00 .faraddr $9 +0011E8r 1 0A 00 00 .faraddr $A +0011EBr 1 0B 00 00 .faraddr $B +0011EEr 1 0C 00 00 .faraddr $C +0011F1r 1 0D 00 00 .faraddr $D +0011F4r 1 0E 00 00 .faraddr $E +0011F7r 1 0F 00 00 .faraddr $F +0011FAr 1 10 00 00 .faraddr $10 +0011FDr 1 11 00 00 .faraddr $11 +001200r 1 12 00 00 .faraddr $12 +001203r 1 13 00 00 .faraddr $13 +001206r 1 70 00 00 .faraddr $70 +001209r 1 71 00 00 .faraddr $71 +00120Cr 1 72 00 00 .faraddr $72 +00120Fr 1 73 00 00 .faraddr $73 +001212r 1 74 00 00 .faraddr $74 +001215r 1 75 00 00 .faraddr $75 +001218r 1 76 00 00 .faraddr $76 +00121Br 1 77 00 00 .faraddr $77 +00121Er 1 78 00 00 .faraddr $78 +001221r 1 79 00 00 .faraddr $79 +001224r 1 7A 00 00 .faraddr $7A +001227r 1 7B 00 00 .faraddr $7B +00122Ar 1 7C 00 00 .faraddr $7C +00122Dr 1 7D 00 00 .faraddr $7D +001230r 1 7E 00 00 .faraddr $7E +001233r 1 7F 00 00 .faraddr $7F +001236r 1 80 00 00 .faraddr $80 +001239r 1 81 00 00 .faraddr $81 +00123Cr 1 82 00 00 .faraddr $82 +00123Fr 1 83 00 00 .faraddr $83 +001242r 1 84 00 00 .faraddr $84 +001245r 1 85 00 00 .faraddr $85 +001248r 1 86 00 00 .faraddr $86 +00124Br 1 F0 00 00 .faraddr $F0 +00124Er 1 F1 00 00 .faraddr $F1 +001251r 1 F2 00 00 .faraddr $F2 +001254r 1 F3 00 00 .faraddr $F3 +001257r 1 F4 00 00 .faraddr $F4 +00125Ar 1 F5 00 00 .faraddr $F5 +00125Dr 1 F6 00 00 .faraddr $F6 +001260r 1 F7 00 00 .faraddr $F7 +001263r 1 F8 00 00 .faraddr $F8 +001266r 1 F9 00 00 .faraddr $F9 +001269r 1 FA 00 00 .faraddr $FA +00126Cr 1 FB 00 00 .faraddr $FB +00126Fr 1 FC 00 00 .faraddr $FC +001272r 1 FD 00 00 .faraddr $FD +001275r 1 FE 00 00 .faraddr $FE +001278r 1 FF 00 00 .faraddr $FF +00127Br 1 00 01 00 .faraddr $100 +00127Er 1 01 01 00 .faraddr $101 +001281r 1 02 01 00 .faraddr $102 +001284r 1 03 01 00 .faraddr $103 +001287r 1 D2 0F 00 .faraddr $FD2 +00128Ar 1 D3 0F 00 .faraddr $FD3 +00128Dr 1 D4 0F 00 .faraddr $FD4 +001290r 1 D5 0F 00 .faraddr $FD5 +001293r 1 D6 0F 00 .faraddr $FD6 +001296r 1 D7 0F 00 .faraddr $FD7 +001299r 1 D8 0F 00 .faraddr $FD8 +00129Cr 1 D9 0F 00 .faraddr $FD9 +00129Fr 1 DA 0F 00 .faraddr $FDA +0012A2r 1 DB 0F 00 .faraddr $FDB +0012A5r 1 DC 0F 00 .faraddr $FDC +0012A8r 1 DD 0F 00 .faraddr $FDD +0012ABr 1 DE 0F 00 .faraddr $FDE +0012AEr 1 DF 0F 00 .faraddr $FDF +0012B1r 1 E0 0F 00 .faraddr $FE0 +0012B4r 1 E1 0F 00 .faraddr $FE1 +0012B7r 1 E2 0F 00 .faraddr $FE2 +0012BAr 1 E3 0F 00 .faraddr $FE3 +0012BDr 1 E4 0F 00 .faraddr $FE4 +0012C0r 1 E5 0F 00 .faraddr $FE5 +0012C3r 1 E6 0F 00 .faraddr $FE6 +0012C6r 1 E7 0F 00 .faraddr $FE7 +0012C9r 1 E8 0F 00 .faraddr $FE8 +0012CCr 1 E9 0F 00 .faraddr $FE9 +0012CFr 1 EA 0F 00 .faraddr $FEA +0012D2r 1 EB 0F 00 .faraddr $FEB +0012D5r 1 EC 0F 00 .faraddr $FEC +0012D8r 1 ED 0F 00 .faraddr $FED +0012DBr 1 EE 0F 00 .faraddr $FEE +0012DEr 1 EF 0F 00 .faraddr $FEF +0012E1r 1 F0 0F 00 .faraddr $FF0 +0012E4r 1 F1 0F 00 .faraddr $FF1 +0012E7r 1 F2 0F 00 .faraddr $FF2 +0012EAr 1 F3 0F 00 .faraddr $FF3 +0012EDr 1 F4 0F 00 .faraddr $FF4 +0012F0r 1 F5 0F 00 .faraddr $FF5 +0012F3r 1 F6 0F 00 .faraddr $FF6 +0012F6r 1 F7 0F 00 .faraddr $FF7 +0012F9r 1 F8 0F 00 .faraddr $FF8 +0012FCr 1 F9 0F 00 .faraddr $FF9 +0012FFr 1 FA 0F 00 .faraddr $FFA +001302r 1 FB 0F 00 .faraddr $FFB +001305r 1 FC 0F 00 .faraddr $FFC +001308r 1 FD 0F 00 .faraddr $FFD +00130Br 1 FE 0F 00 .faraddr $FFE +00130Er 1 FF 0F 00 .faraddr $FFF +001311r 1 00 10 00 .faraddr $1000 +001314r 1 01 10 00 .faraddr $1001 +001317r 1 02 10 00 .faraddr $1002 +00131Ar 1 03 10 00 .faraddr $1003 +00131Dr 1 04 10 00 .faraddr $1004 +001320r 1 05 10 00 .faraddr $1005 +001323r 1 06 10 00 .faraddr $1006 +001326r 1 07 10 00 .faraddr $1007 +001329r 1 08 10 00 .faraddr $1008 +00132Cr 1 F0 7F 00 .faraddr $7FF0 +00132Fr 1 F1 7F 00 .faraddr $7FF1 +001332r 1 F2 7F 00 .faraddr $7FF2 +001335r 1 F3 7F 00 .faraddr $7FF3 +001338r 1 F4 7F 00 .faraddr $7FF4 +00133Br 1 F5 7F 00 .faraddr $7FF5 +00133Er 1 F6 7F 00 .faraddr $7FF6 +001341r 1 F7 7F 00 .faraddr $7FF7 +001344r 1 F8 7F 00 .faraddr $7FF8 +001347r 1 F9 7F 00 .faraddr $7FF9 +00134Ar 1 FA 7F 00 .faraddr $7FFA +00134Dr 1 FB 7F 00 .faraddr $7FFB +001350r 1 FC 7F 00 .faraddr $7FFC +001353r 1 FD 7F 00 .faraddr $7FFD +001356r 1 FE 7F 00 .faraddr $7FFE +001359r 1 FF 7F 00 .faraddr $7FFF +00135Cr 1 00 80 00 .faraddr $8000 +00135Fr 1 01 80 00 .faraddr $8001 +001362r 1 02 80 00 .faraddr $8002 +001365r 1 03 80 00 .faraddr $8003 +001368r 1 04 80 00 .faraddr $8004 +00136Br 1 05 80 00 .faraddr $8005 +00136Er 1 06 80 00 .faraddr $8006 +001371r 1 07 80 00 .faraddr $8007 +001374r 1 08 80 00 .faraddr $8008 +001377r 1 09 80 00 .faraddr $8009 +00137Ar 1 0A 80 00 .faraddr $800A +00137Dr 1 0B 80 00 .faraddr $800B +001380r 1 E1 9F 00 .faraddr $9FE1 +001383r 1 E2 9F 00 .faraddr $9FE2 +001386r 1 E3 9F 00 .faraddr $9FE3 +001389r 1 E4 9F 00 .faraddr $9FE4 +00138Cr 1 E5 9F 00 .faraddr $9FE5 +00138Fr 1 E6 9F 00 .faraddr $9FE6 +001392r 1 E7 9F 00 .faraddr $9FE7 +001395r 1 E8 9F 00 .faraddr $9FE8 +001398r 1 E9 9F 00 .faraddr $9FE9 +00139Br 1 EA 9F 00 .faraddr $9FEA +00139Er 1 EB 9F 00 .faraddr $9FEB +0013A1r 1 EC 9F 00 .faraddr $9FEC +0013A4r 1 ED 9F 00 .faraddr $9FED +0013A7r 1 EE 9F 00 .faraddr $9FEE +0013AAr 1 EF 9F 00 .faraddr $9FEF +0013ADr 1 F0 9F 00 .faraddr $9FF0 +0013B0r 1 F1 9F 00 .faraddr $9FF1 +0013B3r 1 F2 9F 00 .faraddr $9FF2 +0013B6r 1 F3 9F 00 .faraddr $9FF3 +0013B9r 1 F4 9F 00 .faraddr $9FF4 +0013BCr 1 F5 9F 00 .faraddr $9FF5 +0013BFr 1 F6 9F 00 .faraddr $9FF6 +0013C2r 1 F7 9F 00 .faraddr $9FF7 +0013C5r 1 F8 9F 00 .faraddr $9FF8 +0013C8r 1 F9 9F 00 .faraddr $9FF9 +0013CBr 1 FA 9F 00 .faraddr $9FFA +0013CEr 1 FB 9F 00 .faraddr $9FFB +0013D1r 1 FC 9F 00 .faraddr $9FFC +0013D4r 1 FD 9F 00 .faraddr $9FFD +0013D7r 1 FE 9F 00 .faraddr $9FFE +0013DAr 1 FF 9F 00 .faraddr $9FFF +0013DDr 1 00 A0 00 .faraddr $A000 +0013E0r 1 01 A0 00 .faraddr $A001 +0013E3r 1 02 A0 00 .faraddr $A002 +0013E6r 1 03 A0 00 .faraddr $A003 +0013E9r 1 04 A0 00 .faraddr $A004 +0013ECr 1 05 A0 00 .faraddr $A005 +0013EFr 1 06 A0 00 .faraddr $A006 +0013F2r 1 07 A0 00 .faraddr $A007 +0013F5r 1 08 A0 00 .faraddr $A008 +0013F8r 1 09 A0 00 .faraddr $A009 +0013FBr 1 0A A0 00 .faraddr $A00A +0013FEr 1 0B A0 00 .faraddr $A00B +001401r 1 0C A0 00 .faraddr $A00C +001404r 1 0D A0 00 .faraddr $A00D +001407r 1 0E A0 00 .faraddr $A00E +00140Ar 1 0F A0 00 .faraddr $A00F +00140Dr 1 E1 AF 00 .faraddr $AFE1 +001410r 1 E2 AF 00 .faraddr $AFE2 +001413r 1 E3 AF 00 .faraddr $AFE3 +001416r 1 E4 AF 00 .faraddr $AFE4 +001419r 1 E5 AF 00 .faraddr $AFE5 +00141Cr 1 E6 AF 00 .faraddr $AFE6 +00141Fr 1 E7 AF 00 .faraddr $AFE7 +001422r 1 E8 AF 00 .faraddr $AFE8 +001425r 1 E9 AF 00 .faraddr $AFE9 +001428r 1 EA AF 00 .faraddr $AFEA +00142Br 1 EB AF 00 .faraddr $AFEB +00142Er 1 EC AF 00 .faraddr $AFEC +001431r 1 ED AF 00 .faraddr $AFED +001434r 1 EE AF 00 .faraddr $AFEE +001437r 1 EF AF 00 .faraddr $AFEF +00143Ar 1 F0 AF 00 .faraddr $AFF0 +00143Dr 1 F1 AF 00 .faraddr $AFF1 +001440r 1 F2 AF 00 .faraddr $AFF2 +001443r 1 F3 AF 00 .faraddr $AFF3 +001446r 1 F4 AF 00 .faraddr $AFF4 +001449r 1 F5 AF 00 .faraddr $AFF5 +00144Cr 1 F6 AF 00 .faraddr $AFF6 +00144Fr 1 F7 AF 00 .faraddr $AFF7 +001452r 1 F8 AF 00 .faraddr $AFF8 +001455r 1 F9 AF 00 .faraddr $AFF9 +001458r 1 FA AF 00 .faraddr $AFFA +00145Br 1 FB AF 00 .faraddr $AFFB +00145Er 1 FC AF 00 .faraddr $AFFC +001461r 1 FD AF 00 .faraddr $AFFD +001464r 1 FE AF 00 .faraddr $AFFE +001467r 1 FF AF 00 .faraddr $AFFF +00146Ar 1 00 B0 00 .faraddr $B000 +00146Dr 1 01 B0 00 .faraddr $B001 +001470r 1 02 B0 00 .faraddr $B002 +001473r 1 03 B0 00 .faraddr $B003 +001476r 1 04 B0 00 .faraddr $B004 +001479r 1 05 B0 00 .faraddr $B005 +00147Cr 1 06 B0 00 .faraddr $B006 +00147Fr 1 07 B0 00 .faraddr $B007 +001482r 1 08 B0 00 .faraddr $B008 +001485r 1 09 B0 00 .faraddr $B009 +001488r 1 0A B0 00 .faraddr $B00A +00148Br 1 0B B0 00 .faraddr $B00B +00148Er 1 0C B0 00 .faraddr $B00C +001491r 1 0D B0 00 .faraddr $B00D +001494r 1 0E B0 00 .faraddr $B00E +001497r 1 0F B0 00 .faraddr $B00F +00149Ar 1 E1 FF 00 .faraddr $FFE1 +00149Dr 1 E2 FF 00 .faraddr $FFE2 +0014A0r 1 E3 FF 00 .faraddr $FFE3 +0014A3r 1 E4 FF 00 .faraddr $FFE4 +0014A6r 1 E5 FF 00 .faraddr $FFE5 +0014A9r 1 E6 FF 00 .faraddr $FFE6 +0014ACr 1 E7 FF 00 .faraddr $FFE7 +0014AFr 1 E8 FF 00 .faraddr $FFE8 +0014B2r 1 E9 FF 00 .faraddr $FFE9 +0014B5r 1 EA FF 00 .faraddr $FFEA +0014B8r 1 EB FF 00 .faraddr $FFEB +0014BBr 1 EC FF 00 .faraddr $FFEC +0014BEr 1 ED FF 00 .faraddr $FFED +0014C1r 1 EE FF 00 .faraddr $FFEE +0014C4r 1 EF FF 00 .faraddr $FFEF +0014C7r 1 F0 FF 00 .faraddr $FFF0 +0014CAr 1 F1 FF 00 .faraddr $FFF1 +0014CDr 1 F2 FF 00 .faraddr $FFF2 +0014D0r 1 F3 FF 00 .faraddr $FFF3 +0014D3r 1 F4 FF 00 .faraddr $FFF4 +0014D6r 1 F5 FF 00 .faraddr $FFF5 +0014D9r 1 F6 FF 00 .faraddr $FFF6 +0014DCr 1 F7 FF 00 .faraddr $FFF7 +0014DFr 1 F8 FF 00 .faraddr $FFF8 +0014E2r 1 F9 FF 00 .faraddr $FFF9 +0014E5r 1 FA FF 00 .faraddr $FFFA +0014E8r 1 FB FF 00 .faraddr $FFFB +0014EBr 1 FC FF 00 .faraddr $FFFC +0014EEr 1 FD FF 00 .faraddr $FFFD +0014F1r 1 FE FF 00 .faraddr $FFFE +0014F4r 1 FF FF 00 .faraddr $FFFF +0014F7r 1 00 00 01 .faraddr $10000 +0014FAr 1 01 00 01 .faraddr $10001 +0014FDr 1 02 00 01 .faraddr $10002 +001500r 1 03 00 01 .faraddr $10003 +001503r 1 04 00 01 .faraddr $10004 +001506r 1 05 00 01 .faraddr $10005 +001509r 1 06 00 01 .faraddr $10006 +00150Cr 1 07 00 01 .faraddr $10007 +00150Fr 1 08 00 01 .faraddr $10008 +001512r 1 09 00 01 .faraddr $10009 +001515r 1 0A 00 01 .faraddr $1000A +001518r 1 0B 00 01 .faraddr $1000B +00151Br 1 0C 00 01 .faraddr $1000C +00151Er 1 0D 00 01 .faraddr $1000D +001521r 1 0E 00 01 .faraddr $1000E +001524r 1 0F 00 01 .faraddr $1000F +001527r 1 E1 FF 10 .faraddr $10FFE1 +00152Ar 1 E2 FF 10 .faraddr $10FFE2 +00152Dr 1 E3 FF 10 .faraddr $10FFE3 +001530r 1 E4 FF 10 .faraddr $10FFE4 +001533r 1 E5 FF 10 .faraddr $10FFE5 +001536r 1 E6 FF 10 .faraddr $10FFE6 +001539r 1 E7 FF 10 .faraddr $10FFE7 +00153Cr 1 E8 FF 10 .faraddr $10FFE8 +00153Fr 1 E9 FF 10 .faraddr $10FFE9 +001542r 1 EA FF 10 .faraddr $10FFEA +001545r 1 EB FF 10 .faraddr $10FFEB +001548r 1 EC FF 10 .faraddr $10FFEC +00154Br 1 ED FF 10 .faraddr $10FFED +00154Er 1 EE FF 10 .faraddr $10FFEE +001551r 1 EF FF 10 .faraddr $10FFEF +001554r 1 F0 FF 10 .faraddr $10FFF0 +001557r 1 F1 FF 10 .faraddr $10FFF1 +00155Ar 1 F2 FF 10 .faraddr $10FFF2 +00155Dr 1 F3 FF 10 .faraddr $10FFF3 +001560r 1 F4 FF 10 .faraddr $10FFF4 +001563r 1 F5 FF 10 .faraddr $10FFF5 +001566r 1 F6 FF 10 .faraddr $10FFF6 +001569r 1 F7 FF 10 .faraddr $10FFF7 +00156Cr 1 F8 FF 10 .faraddr $10FFF8 +00156Fr 1 F9 FF 10 .faraddr $10FFF9 +001572r 1 FA FF 10 .faraddr $10FFFA +001575r 1 FB FF 10 .faraddr $10FFFB +001578r 1 FC FF 10 .faraddr $10FFFC +00157Br 1 FD FF 10 .faraddr $10FFFD +00157Er 1 FE FF 10 .faraddr $10FFFE +001581r 1 FF FF 10 .faraddr $10FFFF +001584r 1 00 00 11 .faraddr $110000 +001587r 1 01 00 11 .faraddr $110001 +00158Ar 1 02 00 11 .faraddr $110002 +00158Dr 1 03 00 11 .faraddr $110003 +001590r 1 04 00 11 .faraddr $110004 +001593r 1 05 00 11 .faraddr $110005 +001596r 1 06 00 11 .faraddr $110006 +001599r 1 07 00 11 .faraddr $110007 +00159Cr 1 08 00 11 .faraddr $110008 +00159Fr 1 09 00 11 .faraddr $110009 +0015A2r 1 0A 00 11 .faraddr $11000A +0015A5r 1 0B 00 11 .faraddr $11000B +0015A8r 1 0C 00 11 .faraddr $11000C +0015ABr 1 0D 00 11 .faraddr $11000D +0015AEr 1 0E 00 11 .faraddr $11000E +0015B1r 1 0F 00 11 .faraddr $11000F +0015B4r 1 E1 FF 20 .faraddr $20FFE1 +0015B7r 1 E2 FF 20 .faraddr $20FFE2 +0015BAr 1 E3 FF 20 .faraddr $20FFE3 +0015BDr 1 E4 FF 20 .faraddr $20FFE4 +0015C0r 1 E5 FF 20 .faraddr $20FFE5 +0015C3r 1 E6 FF 20 .faraddr $20FFE6 +0015C6r 1 E7 FF 20 .faraddr $20FFE7 +0015C9r 1 E8 FF 20 .faraddr $20FFE8 +0015CCr 1 E9 FF 20 .faraddr $20FFE9 +0015CFr 1 EA FF 20 .faraddr $20FFEA +0015D2r 1 EB FF 20 .faraddr $20FFEB +0015D5r 1 EC FF 20 .faraddr $20FFEC +0015D8r 1 ED FF 20 .faraddr $20FFED +0015DBr 1 EE FF 20 .faraddr $20FFEE +0015DEr 1 EF FF 20 .faraddr $20FFEF +0015E1r 1 F0 FF 20 .faraddr $20FFF0 +0015E4r 1 F1 FF 20 .faraddr $20FFF1 +0015E7r 1 F2 FF 20 .faraddr $20FFF2 +0015EAr 1 F3 FF 20 .faraddr $20FFF3 +0015EDr 1 F4 FF 20 .faraddr $20FFF4 +0015F0r 1 F5 FF 20 .faraddr $20FFF5 +0015F3r 1 F6 FF 20 .faraddr $20FFF6 +0015F6r 1 F7 FF 20 .faraddr $20FFF7 +0015F9r 1 F8 FF 20 .faraddr $20FFF8 +0015FCr 1 F9 FF 20 .faraddr $20FFF9 +0015FFr 1 FA FF 20 .faraddr $20FFFA +001602r 1 FB FF 20 .faraddr $20FFFB +001605r 1 FC FF 20 .faraddr $20FFFC +001608r 1 FD FF 20 .faraddr $20FFFD +00160Br 1 FE FF 20 .faraddr $20FFFE +00160Er 1 FF FF 20 .faraddr $20FFFF +001611r 1 00 00 21 .faraddr $210000 +001614r 1 01 00 21 .faraddr $210001 +001617r 1 02 00 21 .faraddr $210002 +00161Ar 1 03 00 21 .faraddr $210003 +00161Dr 1 04 00 21 .faraddr $210004 +001620r 1 05 00 21 .faraddr $210005 +001623r 1 06 00 21 .faraddr $210006 +001626r 1 07 00 21 .faraddr $210007 +001629r 1 08 00 21 .faraddr $210008 +00162Cr 1 09 00 21 .faraddr $210009 +00162Fr 1 0A 00 21 .faraddr $21000A +001632r 1 0B 00 21 .faraddr $21000B +001635r 1 0C 00 21 .faraddr $21000C +001638r 1 0D 00 21 .faraddr $21000D +00163Br 1 0E 00 21 .faraddr $21000E +00163Er 1 0F 00 21 .faraddr $21000F +001641r 1 E1 FF 7F .faraddr $7FFFE1 +001644r 1 E2 FF 7F .faraddr $7FFFE2 +001647r 1 E3 FF 7F .faraddr $7FFFE3 +00164Ar 1 E4 FF 7F .faraddr $7FFFE4 +00164Dr 1 E5 FF 7F .faraddr $7FFFE5 +001650r 1 E6 FF 7F .faraddr $7FFFE6 +001653r 1 E7 FF 7F .faraddr $7FFFE7 +001656r 1 E8 FF 7F .faraddr $7FFFE8 +001659r 1 E9 FF 7F .faraddr $7FFFE9 +00165Cr 1 EA FF 7F .faraddr $7FFFEA +00165Fr 1 EB FF 7F .faraddr $7FFFEB +001662r 1 EC FF 7F .faraddr $7FFFEC +001665r 1 ED FF 7F .faraddr $7FFFED +001668r 1 EE FF 7F .faraddr $7FFFEE +00166Br 1 EF FF 7F .faraddr $7FFFEF +00166Er 1 F0 FF 7F .faraddr $7FFFF0 +001671r 1 F1 FF 7F .faraddr $7FFFF1 +001674r 1 F2 FF 7F .faraddr $7FFFF2 +001677r 1 F3 FF 7F .faraddr $7FFFF3 +00167Ar 1 F4 FF 7F .faraddr $7FFFF4 +00167Dr 1 F5 FF 7F .faraddr $7FFFF5 +001680r 1 F6 FF 7F .faraddr $7FFFF6 +001683r 1 F7 FF 7F .faraddr $7FFFF7 +001686r 1 F8 FF 7F .faraddr $7FFFF8 +001689r 1 F9 FF 7F .faraddr $7FFFF9 +00168Cr 1 FA FF 7F .faraddr $7FFFFA +00168Fr 1 FB FF 7F .faraddr $7FFFFB +001692r 1 FC FF 7F .faraddr $7FFFFC +001695r 1 FD FF 7F .faraddr $7FFFFD +001698r 1 FE FF 7F .faraddr $7FFFFE +00169Br 1 FF FF 7F .faraddr $7FFFFF +00169Er 1 00 00 80 .faraddr $800000 +0016A1r 1 01 00 80 .faraddr $800001 +0016A4r 1 02 00 80 .faraddr $800002 +0016A7r 1 03 00 80 .faraddr $800003 +0016AAr 1 04 00 80 .faraddr $800004 +0016ADr 1 05 00 80 .faraddr $800005 +0016B0r 1 06 00 80 .faraddr $800006 +0016B3r 1 07 00 80 .faraddr $800007 +0016B6r 1 08 00 80 .faraddr $800008 +0016B9r 1 09 00 80 .faraddr $800009 +0016BCr 1 0A 00 80 .faraddr $80000A +0016BFr 1 0B 00 80 .faraddr $80000B +0016C2r 1 0C 00 80 .faraddr $80000C +0016C5r 1 0D 00 80 .faraddr $80000D +0016C8r 1 0E 00 80 .faraddr $80000E +0016CBr 1 0F 00 80 .faraddr $80000F +0016CEr 1 E1 FF 9F .faraddr $9FFFE1 +0016D1r 1 E2 FF 9F .faraddr $9FFFE2 +0016D4r 1 E3 FF 9F .faraddr $9FFFE3 +0016D7r 1 E4 FF 9F .faraddr $9FFFE4 +0016DAr 1 E5 FF 9F .faraddr $9FFFE5 +0016DDr 1 E6 FF 9F .faraddr $9FFFE6 +0016E0r 1 E7 FF 9F .faraddr $9FFFE7 +0016E3r 1 E8 FF 9F .faraddr $9FFFE8 +0016E6r 1 E9 FF 9F .faraddr $9FFFE9 +0016E9r 1 EA FF 9F .faraddr $9FFFEA +0016ECr 1 EB FF 9F .faraddr $9FFFEB +0016EFr 1 EC FF 9F .faraddr $9FFFEC +0016F2r 1 ED FF 9F .faraddr $9FFFED +0016F5r 1 EE FF 9F .faraddr $9FFFEE +0016F8r 1 EF FF 9F .faraddr $9FFFEF +0016FBr 1 F0 FF 9F .faraddr $9FFFF0 +0016FEr 1 F1 FF 9F .faraddr $9FFFF1 +001701r 1 F2 FF 9F .faraddr $9FFFF2 +001704r 1 F3 FF 9F .faraddr $9FFFF3 +001707r 1 F4 FF 9F .faraddr $9FFFF4 +00170Ar 1 F5 FF 9F .faraddr $9FFFF5 +00170Dr 1 F6 FF 9F .faraddr $9FFFF6 +001710r 1 F7 FF 9F .faraddr $9FFFF7 +001713r 1 F8 FF 9F .faraddr $9FFFF8 +001716r 1 F9 FF 9F .faraddr $9FFFF9 +001719r 1 FA FF 9F .faraddr $9FFFFA +00171Cr 1 FB FF 9F .faraddr $9FFFFB +00171Fr 1 FC FF 9F .faraddr $9FFFFC +001722r 1 FD FF 9F .faraddr $9FFFFD +001725r 1 FE FF 9F .faraddr $9FFFFE +001728r 1 FF FF 9F .faraddr $9FFFFF +00172Br 1 00 00 A0 .faraddr $A00000 +00172Er 1 01 00 A0 .faraddr $A00001 +001731r 1 02 00 A0 .faraddr $A00002 +001734r 1 03 00 A0 .faraddr $A00003 +001737r 1 04 00 A0 .faraddr $A00004 +00173Ar 1 05 00 A0 .faraddr $A00005 +00173Dr 1 06 00 A0 .faraddr $A00006 +001740r 1 07 00 A0 .faraddr $A00007 +001743r 1 08 00 A0 .faraddr $A00008 +001746r 1 09 00 A0 .faraddr $A00009 +001749r 1 0A 00 A0 .faraddr $A0000A +00174Cr 1 0B 00 A0 .faraddr $A0000B +00174Fr 1 0C 00 A0 .faraddr $A0000C +001752r 1 0D 00 A0 .faraddr $A0000D +001755r 1 0E 00 A0 .faraddr $A0000E +001758r 1 0F 00 A0 .faraddr $A0000F +00175Br 1 E1 FF FF .faraddr $FFFFE1 +00175Er 1 E2 FF FF .faraddr $FFFFE2 +001761r 1 E3 FF FF .faraddr $FFFFE3 +001764r 1 E4 FF FF .faraddr $FFFFE4 +001767r 1 E5 FF FF .faraddr $FFFFE5 +00176Ar 1 E6 FF FF .faraddr $FFFFE6 +00176Dr 1 E7 FF FF .faraddr $FFFFE7 +001770r 1 E8 FF FF .faraddr $FFFFE8 +001773r 1 E9 FF FF .faraddr $FFFFE9 +001776r 1 EA FF FF .faraddr $FFFFEA +001779r 1 EB FF FF .faraddr $FFFFEB +00177Cr 1 EC FF FF .faraddr $FFFFEC +00177Fr 1 ED FF FF .faraddr $FFFFED +001782r 1 EE FF FF .faraddr $FFFFEE +001785r 1 EF FF FF .faraddr $FFFFEF +001788r 1 F0 FF FF .faraddr $FFFFF0 +00178Br 1 F1 FF FF .faraddr $FFFFF1 +00178Er 1 F2 FF FF .faraddr $FFFFF2 +001791r 1 F3 FF FF .faraddr $FFFFF3 +001794r 1 F4 FF FF .faraddr $FFFFF4 +001797r 1 F5 FF FF .faraddr $FFFFF5 +00179Ar 1 F6 FF FF .faraddr $FFFFF6 +00179Dr 1 F7 FF FF .faraddr $FFFFF7 +0017A0r 1 F8 FF FF .faraddr $FFFFF8 +0017A3r 1 F9 FF FF .faraddr $FFFFF9 +0017A6r 1 FA FF FF .faraddr $FFFFFA +0017A9r 1 FB FF FF .faraddr $FFFFFB +0017ACr 1 FC FF FF .faraddr $FFFFFC +0017AFr 1 FD FF FF .faraddr $FFFFFD +0017B2r 1 FE FF FF .faraddr $FFFFFE +0017B5r 1 FF FF FF .faraddr $FFFFFF 0017B8r 1 -0017B8r 1 ; 8-digit hex values -0017B8r 1 00 00 00 .faraddr $00000000 -0017BBr 1 01 00 00 .faraddr $00000001 -0017BEr 1 02 00 00 .faraddr $00000002 -0017C1r 1 03 00 00 .faraddr $00000003 -0017C4r 1 04 00 00 .faraddr $00000004 -0017C7r 1 05 00 00 .faraddr $00000005 -0017CAr 1 06 00 00 .faraddr $00000006 -0017CDr 1 07 00 00 .faraddr $00000007 -0017D0r 1 08 00 00 .faraddr $00000008 -0017D3r 1 09 00 00 .faraddr $00000009 -0017D6r 1 0A 00 00 .faraddr $0000000a -0017D9r 1 0B 00 00 .faraddr $0000000b -0017DCr 1 0C 00 00 .faraddr $0000000c -0017DFr 1 0D 00 00 .faraddr $0000000d -0017E2r 1 0E 00 00 .faraddr $0000000e -0017E5r 1 0F 00 00 .faraddr $0000000f -0017E8r 1 10 00 00 .faraddr $00000010 -0017EBr 1 11 00 00 .faraddr $00000011 -0017EEr 1 12 00 00 .faraddr $00000012 -0017F1r 1 13 00 00 .faraddr $00000013 -0017F4r 1 70 00 00 .faraddr $00000070 -0017F7r 1 71 00 00 .faraddr $00000071 -0017FAr 1 72 00 00 .faraddr $00000072 -0017FDr 1 73 00 00 .faraddr $00000073 -001800r 1 74 00 00 .faraddr $00000074 -001803r 1 75 00 00 .faraddr $00000075 -001806r 1 76 00 00 .faraddr $00000076 -001809r 1 77 00 00 .faraddr $00000077 -00180Cr 1 78 00 00 .faraddr $00000078 -00180Fr 1 79 00 00 .faraddr $00000079 -001812r 1 7A 00 00 .faraddr $0000007a -001815r 1 7B 00 00 .faraddr $0000007b -001818r 1 7C 00 00 .faraddr $0000007c -00181Br 1 7D 00 00 .faraddr $0000007d -00181Er 1 7E 00 00 .faraddr $0000007e -001821r 1 7F 00 00 .faraddr $0000007f -001824r 1 80 00 00 .faraddr $00000080 -001827r 1 81 00 00 .faraddr $00000081 -00182Ar 1 82 00 00 .faraddr $00000082 -00182Dr 1 83 00 00 .faraddr $00000083 -001830r 1 84 00 00 .faraddr $00000084 -001833r 1 85 00 00 .faraddr $00000085 -001836r 1 86 00 00 .faraddr $00000086 -001839r 1 F0 00 00 .faraddr $000000f0 -00183Cr 1 F1 00 00 .faraddr $000000f1 -00183Fr 1 F2 00 00 .faraddr $000000f2 -001842r 1 F3 00 00 .faraddr $000000f3 -001845r 1 F4 00 00 .faraddr $000000f4 -001848r 1 F5 00 00 .faraddr $000000f5 -00184Br 1 F6 00 00 .faraddr $000000f6 -00184Er 1 F7 00 00 .faraddr $000000f7 -001851r 1 F8 00 00 .faraddr $000000f8 -001854r 1 F9 00 00 .faraddr $000000f9 -001857r 1 FA 00 00 .faraddr $000000fa -00185Ar 1 FB 00 00 .faraddr $000000fb -00185Dr 1 FC 00 00 .faraddr $000000fc -001860r 1 FD 00 00 .faraddr $000000fd -001863r 1 FE 00 00 .faraddr $000000fe -001866r 1 FF 00 00 .faraddr $000000ff -001869r 1 00 01 00 .faraddr $00000100 -00186Cr 1 01 01 00 .faraddr $00000101 -00186Fr 1 02 01 00 .faraddr $00000102 -001872r 1 03 01 00 .faraddr $00000103 -001875r 1 D2 0F 00 .faraddr $00000fd2 -001878r 1 D3 0F 00 .faraddr $00000fd3 -00187Br 1 D4 0F 00 .faraddr $00000fd4 -00187Er 1 D5 0F 00 .faraddr $00000fd5 -001881r 1 D6 0F 00 .faraddr $00000fd6 -001884r 1 D7 0F 00 .faraddr $00000fd7 -001887r 1 D8 0F 00 .faraddr $00000fd8 -00188Ar 1 D9 0F 00 .faraddr $00000fd9 -00188Dr 1 DA 0F 00 .faraddr $00000fda -001890r 1 DB 0F 00 .faraddr $00000fdb -001893r 1 DC 0F 00 .faraddr $00000fdc -001896r 1 DD 0F 00 .faraddr $00000fdd -001899r 1 DE 0F 00 .faraddr $00000fde -00189Cr 1 DF 0F 00 .faraddr $00000fdf -00189Fr 1 E0 0F 00 .faraddr $00000fe0 -0018A2r 1 E1 0F 00 .faraddr $00000fe1 -0018A5r 1 E2 0F 00 .faraddr $00000fe2 -0018A8r 1 E3 0F 00 .faraddr $00000fe3 -0018ABr 1 E4 0F 00 .faraddr $00000fe4 -0018AEr 1 E5 0F 00 .faraddr $00000fe5 -0018B1r 1 E6 0F 00 .faraddr $00000fe6 -0018B4r 1 E7 0F 00 .faraddr $00000fe7 -0018B7r 1 E8 0F 00 .faraddr $00000fe8 -0018BAr 1 E9 0F 00 .faraddr $00000fe9 -0018BDr 1 EA 0F 00 .faraddr $00000fea -0018C0r 1 EB 0F 00 .faraddr $00000feb -0018C3r 1 EC 0F 00 .faraddr $00000fec -0018C6r 1 ED 0F 00 .faraddr $00000fed -0018C9r 1 EE 0F 00 .faraddr $00000fee -0018CCr 1 EF 0F 00 .faraddr $00000fef -0018CFr 1 F0 0F 00 .faraddr $00000ff0 -0018D2r 1 F1 0F 00 .faraddr $00000ff1 -0018D5r 1 F2 0F 00 .faraddr $00000ff2 -0018D8r 1 F3 0F 00 .faraddr $00000ff3 -0018DBr 1 F4 0F 00 .faraddr $00000ff4 -0018DEr 1 F5 0F 00 .faraddr $00000ff5 -0018E1r 1 F6 0F 00 .faraddr $00000ff6 -0018E4r 1 F7 0F 00 .faraddr $00000ff7 -0018E7r 1 F8 0F 00 .faraddr $00000ff8 -0018EAr 1 F9 0F 00 .faraddr $00000ff9 -0018EDr 1 FA 0F 00 .faraddr $00000ffa -0018F0r 1 FB 0F 00 .faraddr $00000ffb -0018F3r 1 FC 0F 00 .faraddr $00000ffc -0018F6r 1 FD 0F 00 .faraddr $00000ffd -0018F9r 1 FE 0F 00 .faraddr $00000ffe -0018FCr 1 FF 0F 00 .faraddr $00000fff -0018FFr 1 00 10 00 .faraddr $00001000 -001902r 1 01 10 00 .faraddr $00001001 -001905r 1 02 10 00 .faraddr $00001002 -001908r 1 03 10 00 .faraddr $00001003 -00190Br 1 04 10 00 .faraddr $00001004 -00190Er 1 05 10 00 .faraddr $00001005 -001911r 1 06 10 00 .faraddr $00001006 -001914r 1 07 10 00 .faraddr $00001007 -001917r 1 08 10 00 .faraddr $00001008 -00191Ar 1 F0 7F 00 .faraddr $00007ff0 -00191Dr 1 F1 7F 00 .faraddr $00007ff1 -001920r 1 F2 7F 00 .faraddr $00007ff2 -001923r 1 F3 7F 00 .faraddr $00007ff3 -001926r 1 F4 7F 00 .faraddr $00007ff4 -001929r 1 F5 7F 00 .faraddr $00007ff5 -00192Cr 1 F6 7F 00 .faraddr $00007ff6 -00192Fr 1 F7 7F 00 .faraddr $00007ff7 -001932r 1 F8 7F 00 .faraddr $00007ff8 -001935r 1 F9 7F 00 .faraddr $00007ff9 -001938r 1 FA 7F 00 .faraddr $00007ffa -00193Br 1 FB 7F 00 .faraddr $00007ffb -00193Er 1 FC 7F 00 .faraddr $00007ffc -001941r 1 FD 7F 00 .faraddr $00007ffd -001944r 1 FE 7F 00 .faraddr $00007ffe -001947r 1 FF 7F 00 .faraddr $00007fff -00194Ar 1 00 80 00 .faraddr $00008000 -00194Dr 1 01 80 00 .faraddr $00008001 -001950r 1 02 80 00 .faraddr $00008002 -001953r 1 03 80 00 .faraddr $00008003 -001956r 1 04 80 00 .faraddr $00008004 -001959r 1 05 80 00 .faraddr $00008005 -00195Cr 1 06 80 00 .faraddr $00008006 -00195Fr 1 07 80 00 .faraddr $00008007 -001962r 1 08 80 00 .faraddr $00008008 -001965r 1 09 80 00 .faraddr $00008009 -001968r 1 0A 80 00 .faraddr $0000800a -00196Br 1 0B 80 00 .faraddr $0000800b -00196Er 1 E1 9F 00 .faraddr $00009fe1 -001971r 1 E2 9F 00 .faraddr $00009fe2 -001974r 1 E3 9F 00 .faraddr $00009fe3 -001977r 1 E4 9F 00 .faraddr $00009fe4 -00197Ar 1 E5 9F 00 .faraddr $00009fe5 -00197Dr 1 E6 9F 00 .faraddr $00009fe6 -001980r 1 E7 9F 00 .faraddr $00009fe7 -001983r 1 E8 9F 00 .faraddr $00009fe8 -001986r 1 E9 9F 00 .faraddr $00009fe9 -001989r 1 EA 9F 00 .faraddr $00009fea -00198Cr 1 EB 9F 00 .faraddr $00009feb -00198Fr 1 EC 9F 00 .faraddr $00009fec -001992r 1 ED 9F 00 .faraddr $00009fed -001995r 1 EE 9F 00 .faraddr $00009fee -001998r 1 EF 9F 00 .faraddr $00009fef -00199Br 1 F0 9F 00 .faraddr $00009ff0 -00199Er 1 F1 9F 00 .faraddr $00009ff1 -0019A1r 1 F2 9F 00 .faraddr $00009ff2 -0019A4r 1 F3 9F 00 .faraddr $00009ff3 -0019A7r 1 F4 9F 00 .faraddr $00009ff4 -0019AAr 1 F5 9F 00 .faraddr $00009ff5 -0019ADr 1 F6 9F 00 .faraddr $00009ff6 -0019B0r 1 F7 9F 00 .faraddr $00009ff7 -0019B3r 1 F8 9F 00 .faraddr $00009ff8 -0019B6r 1 F9 9F 00 .faraddr $00009ff9 -0019B9r 1 FA 9F 00 .faraddr $00009ffa -0019BCr 1 FB 9F 00 .faraddr $00009ffb -0019BFr 1 FC 9F 00 .faraddr $00009ffc -0019C2r 1 FD 9F 00 .faraddr $00009ffd -0019C5r 1 FE 9F 00 .faraddr $00009ffe -0019C8r 1 FF 9F 00 .faraddr $00009fff -0019CBr 1 00 A0 00 .faraddr $0000a000 -0019CEr 1 01 A0 00 .faraddr $0000a001 -0019D1r 1 02 A0 00 .faraddr $0000a002 -0019D4r 1 03 A0 00 .faraddr $0000a003 -0019D7r 1 04 A0 00 .faraddr $0000a004 -0019DAr 1 05 A0 00 .faraddr $0000a005 -0019DDr 1 06 A0 00 .faraddr $0000a006 -0019E0r 1 07 A0 00 .faraddr $0000a007 -0019E3r 1 08 A0 00 .faraddr $0000a008 -0019E6r 1 09 A0 00 .faraddr $0000a009 -0019E9r 1 0A A0 00 .faraddr $0000a00a -0019ECr 1 0B A0 00 .faraddr $0000a00b -0019EFr 1 0C A0 00 .faraddr $0000a00c -0019F2r 1 0D A0 00 .faraddr $0000a00d -0019F5r 1 0E A0 00 .faraddr $0000a00e -0019F8r 1 0F A0 00 .faraddr $0000a00f -0019FBr 1 E1 AF 00 .faraddr $0000afe1 -0019FEr 1 E2 AF 00 .faraddr $0000afe2 -001A01r 1 E3 AF 00 .faraddr $0000afe3 -001A04r 1 E4 AF 00 .faraddr $0000afe4 -001A07r 1 E5 AF 00 .faraddr $0000afe5 -001A0Ar 1 E6 AF 00 .faraddr $0000afe6 -001A0Dr 1 E7 AF 00 .faraddr $0000afe7 -001A10r 1 E8 AF 00 .faraddr $0000afe8 -001A13r 1 E9 AF 00 .faraddr $0000afe9 -001A16r 1 EA AF 00 .faraddr $0000afea -001A19r 1 EB AF 00 .faraddr $0000afeb -001A1Cr 1 EC AF 00 .faraddr $0000afec -001A1Fr 1 ED AF 00 .faraddr $0000afed -001A22r 1 EE AF 00 .faraddr $0000afee -001A25r 1 EF AF 00 .faraddr $0000afef -001A28r 1 F0 AF 00 .faraddr $0000aff0 -001A2Br 1 F1 AF 00 .faraddr $0000aff1 -001A2Er 1 F2 AF 00 .faraddr $0000aff2 -001A31r 1 F3 AF 00 .faraddr $0000aff3 -001A34r 1 F4 AF 00 .faraddr $0000aff4 -001A37r 1 F5 AF 00 .faraddr $0000aff5 -001A3Ar 1 F6 AF 00 .faraddr $0000aff6 -001A3Dr 1 F7 AF 00 .faraddr $0000aff7 -001A40r 1 F8 AF 00 .faraddr $0000aff8 -001A43r 1 F9 AF 00 .faraddr $0000aff9 -001A46r 1 FA AF 00 .faraddr $0000affa -001A49r 1 FB AF 00 .faraddr $0000affb -001A4Cr 1 FC AF 00 .faraddr $0000affc -001A4Fr 1 FD AF 00 .faraddr $0000affd -001A52r 1 FE AF 00 .faraddr $0000affe -001A55r 1 FF AF 00 .faraddr $0000afff -001A58r 1 00 B0 00 .faraddr $0000b000 -001A5Br 1 01 B0 00 .faraddr $0000b001 -001A5Er 1 02 B0 00 .faraddr $0000b002 -001A61r 1 03 B0 00 .faraddr $0000b003 -001A64r 1 04 B0 00 .faraddr $0000b004 -001A67r 1 05 B0 00 .faraddr $0000b005 -001A6Ar 1 06 B0 00 .faraddr $0000b006 -001A6Dr 1 07 B0 00 .faraddr $0000b007 -001A70r 1 08 B0 00 .faraddr $0000b008 -001A73r 1 09 B0 00 .faraddr $0000b009 -001A76r 1 0A B0 00 .faraddr $0000b00a -001A79r 1 0B B0 00 .faraddr $0000b00b -001A7Cr 1 0C B0 00 .faraddr $0000b00c -001A7Fr 1 0D B0 00 .faraddr $0000b00d -001A82r 1 0E B0 00 .faraddr $0000b00e -001A85r 1 0F B0 00 .faraddr $0000b00f -001A88r 1 E1 FF 00 .faraddr $0000ffe1 -001A8Br 1 E2 FF 00 .faraddr $0000ffe2 -001A8Er 1 E3 FF 00 .faraddr $0000ffe3 -001A91r 1 E4 FF 00 .faraddr $0000ffe4 -001A94r 1 E5 FF 00 .faraddr $0000ffe5 -001A97r 1 E6 FF 00 .faraddr $0000ffe6 -001A9Ar 1 E7 FF 00 .faraddr $0000ffe7 -001A9Dr 1 E8 FF 00 .faraddr $0000ffe8 -001AA0r 1 E9 FF 00 .faraddr $0000ffe9 -001AA3r 1 EA FF 00 .faraddr $0000ffea -001AA6r 1 EB FF 00 .faraddr $0000ffeb -001AA9r 1 EC FF 00 .faraddr $0000ffec -001AACr 1 ED FF 00 .faraddr $0000ffed -001AAFr 1 EE FF 00 .faraddr $0000ffee -001AB2r 1 EF FF 00 .faraddr $0000ffef -001AB5r 1 F0 FF 00 .faraddr $0000fff0 -001AB8r 1 F1 FF 00 .faraddr $0000fff1 -001ABBr 1 F2 FF 00 .faraddr $0000fff2 -001ABEr 1 F3 FF 00 .faraddr $0000fff3 -001AC1r 1 F4 FF 00 .faraddr $0000fff4 -001AC4r 1 F5 FF 00 .faraddr $0000fff5 -001AC7r 1 F6 FF 00 .faraddr $0000fff6 -001ACAr 1 F7 FF 00 .faraddr $0000fff7 -001ACDr 1 F8 FF 00 .faraddr $0000fff8 -001AD0r 1 F9 FF 00 .faraddr $0000fff9 -001AD3r 1 FA FF 00 .faraddr $0000fffa -001AD6r 1 FB FF 00 .faraddr $0000fffb -001AD9r 1 FC FF 00 .faraddr $0000fffc -001ADCr 1 FD FF 00 .faraddr $0000fffd -001ADFr 1 FE FF 00 .faraddr $0000fffe -001AE2r 1 FF FF 00 .faraddr $0000ffff -001AE5r 1 00 00 01 .faraddr $00010000 -001AE8r 1 01 00 01 .faraddr $00010001 -001AEBr 1 02 00 01 .faraddr $00010002 -001AEEr 1 03 00 01 .faraddr $00010003 -001AF1r 1 04 00 01 .faraddr $00010004 -001AF4r 1 05 00 01 .faraddr $00010005 -001AF7r 1 06 00 01 .faraddr $00010006 -001AFAr 1 07 00 01 .faraddr $00010007 -001AFDr 1 08 00 01 .faraddr $00010008 -001B00r 1 09 00 01 .faraddr $00010009 -001B03r 1 0A 00 01 .faraddr $0001000a -001B06r 1 0B 00 01 .faraddr $0001000b -001B09r 1 0C 00 01 .faraddr $0001000c -001B0Cr 1 0D 00 01 .faraddr $0001000d -001B0Fr 1 0E 00 01 .faraddr $0001000e -001B12r 1 0F 00 01 .faraddr $0001000f -001B15r 1 E1 FF 10 .faraddr $0010ffe1 -001B18r 1 E2 FF 10 .faraddr $0010ffe2 -001B1Br 1 E3 FF 10 .faraddr $0010ffe3 -001B1Er 1 E4 FF 10 .faraddr $0010ffe4 -001B21r 1 E5 FF 10 .faraddr $0010ffe5 -001B24r 1 E6 FF 10 .faraddr $0010ffe6 -001B27r 1 E7 FF 10 .faraddr $0010ffe7 -001B2Ar 1 E8 FF 10 .faraddr $0010ffe8 -001B2Dr 1 E9 FF 10 .faraddr $0010ffe9 -001B30r 1 EA FF 10 .faraddr $0010ffea -001B33r 1 EB FF 10 .faraddr $0010ffeb -001B36r 1 EC FF 10 .faraddr $0010ffec -001B39r 1 ED FF 10 .faraddr $0010ffed -001B3Cr 1 EE FF 10 .faraddr $0010ffee -001B3Fr 1 EF FF 10 .faraddr $0010ffef -001B42r 1 F0 FF 10 .faraddr $0010fff0 -001B45r 1 F1 FF 10 .faraddr $0010fff1 -001B48r 1 F2 FF 10 .faraddr $0010fff2 -001B4Br 1 F3 FF 10 .faraddr $0010fff3 -001B4Er 1 F4 FF 10 .faraddr $0010fff4 -001B51r 1 F5 FF 10 .faraddr $0010fff5 -001B54r 1 F6 FF 10 .faraddr $0010fff6 -001B57r 1 F7 FF 10 .faraddr $0010fff7 -001B5Ar 1 F8 FF 10 .faraddr $0010fff8 -001B5Dr 1 F9 FF 10 .faraddr $0010fff9 -001B60r 1 FA FF 10 .faraddr $0010fffa -001B63r 1 FB FF 10 .faraddr $0010fffb -001B66r 1 FC FF 10 .faraddr $0010fffc -001B69r 1 FD FF 10 .faraddr $0010fffd -001B6Cr 1 FE FF 10 .faraddr $0010fffe -001B6Fr 1 FF FF 10 .faraddr $0010ffff -001B72r 1 00 00 11 .faraddr $00110000 -001B75r 1 01 00 11 .faraddr $00110001 -001B78r 1 02 00 11 .faraddr $00110002 -001B7Br 1 03 00 11 .faraddr $00110003 -001B7Er 1 04 00 11 .faraddr $00110004 -001B81r 1 05 00 11 .faraddr $00110005 -001B84r 1 06 00 11 .faraddr $00110006 -001B87r 1 07 00 11 .faraddr $00110007 -001B8Ar 1 08 00 11 .faraddr $00110008 -001B8Dr 1 09 00 11 .faraddr $00110009 -001B90r 1 0A 00 11 .faraddr $0011000a -001B93r 1 0B 00 11 .faraddr $0011000b -001B96r 1 0C 00 11 .faraddr $0011000c -001B99r 1 0D 00 11 .faraddr $0011000d -001B9Cr 1 0E 00 11 .faraddr $0011000e -001B9Fr 1 0F 00 11 .faraddr $0011000f -001BA2r 1 E1 FF 20 .faraddr $0020ffe1 -001BA5r 1 E2 FF 20 .faraddr $0020ffe2 -001BA8r 1 E3 FF 20 .faraddr $0020ffe3 -001BABr 1 E4 FF 20 .faraddr $0020ffe4 -001BAEr 1 E5 FF 20 .faraddr $0020ffe5 -001BB1r 1 E6 FF 20 .faraddr $0020ffe6 -001BB4r 1 E7 FF 20 .faraddr $0020ffe7 -001BB7r 1 E8 FF 20 .faraddr $0020ffe8 -001BBAr 1 E9 FF 20 .faraddr $0020ffe9 -001BBDr 1 EA FF 20 .faraddr $0020ffea -001BC0r 1 EB FF 20 .faraddr $0020ffeb -001BC3r 1 EC FF 20 .faraddr $0020ffec -001BC6r 1 ED FF 20 .faraddr $0020ffed -001BC9r 1 EE FF 20 .faraddr $0020ffee -001BCCr 1 EF FF 20 .faraddr $0020ffef -001BCFr 1 F0 FF 20 .faraddr $0020fff0 -001BD2r 1 F1 FF 20 .faraddr $0020fff1 -001BD5r 1 F2 FF 20 .faraddr $0020fff2 -001BD8r 1 F3 FF 20 .faraddr $0020fff3 -001BDBr 1 F4 FF 20 .faraddr $0020fff4 -001BDEr 1 F5 FF 20 .faraddr $0020fff5 -001BE1r 1 F6 FF 20 .faraddr $0020fff6 -001BE4r 1 F7 FF 20 .faraddr $0020fff7 -001BE7r 1 F8 FF 20 .faraddr $0020fff8 -001BEAr 1 F9 FF 20 .faraddr $0020fff9 -001BEDr 1 FA FF 20 .faraddr $0020fffa -001BF0r 1 FB FF 20 .faraddr $0020fffb -001BF3r 1 FC FF 20 .faraddr $0020fffc -001BF6r 1 FD FF 20 .faraddr $0020fffd -001BF9r 1 FE FF 20 .faraddr $0020fffe -001BFCr 1 FF FF 20 .faraddr $0020ffff -001BFFr 1 00 00 21 .faraddr $00210000 -001C02r 1 01 00 21 .faraddr $00210001 -001C05r 1 02 00 21 .faraddr $00210002 -001C08r 1 03 00 21 .faraddr $00210003 -001C0Br 1 04 00 21 .faraddr $00210004 -001C0Er 1 05 00 21 .faraddr $00210005 -001C11r 1 06 00 21 .faraddr $00210006 -001C14r 1 07 00 21 .faraddr $00210007 -001C17r 1 08 00 21 .faraddr $00210008 -001C1Ar 1 09 00 21 .faraddr $00210009 -001C1Dr 1 0A 00 21 .faraddr $0021000a -001C20r 1 0B 00 21 .faraddr $0021000b -001C23r 1 0C 00 21 .faraddr $0021000c -001C26r 1 0D 00 21 .faraddr $0021000d -001C29r 1 0E 00 21 .faraddr $0021000e -001C2Cr 1 0F 00 21 .faraddr $0021000f -001C2Fr 1 E1 FF 7F .faraddr $007fffe1 -001C32r 1 E2 FF 7F .faraddr $007fffe2 -001C35r 1 E3 FF 7F .faraddr $007fffe3 -001C38r 1 E4 FF 7F .faraddr $007fffe4 -001C3Br 1 E5 FF 7F .faraddr $007fffe5 -001C3Er 1 E6 FF 7F .faraddr $007fffe6 -001C41r 1 E7 FF 7F .faraddr $007fffe7 -001C44r 1 E8 FF 7F .faraddr $007fffe8 -001C47r 1 E9 FF 7F .faraddr $007fffe9 -001C4Ar 1 EA FF 7F .faraddr $007fffea -001C4Dr 1 EB FF 7F .faraddr $007fffeb -001C50r 1 EC FF 7F .faraddr $007fffec -001C53r 1 ED FF 7F .faraddr $007fffed -001C56r 1 EE FF 7F .faraddr $007fffee -001C59r 1 EF FF 7F .faraddr $007fffef -001C5Cr 1 F0 FF 7F .faraddr $007ffff0 -001C5Fr 1 F1 FF 7F .faraddr $007ffff1 -001C62r 1 F2 FF 7F .faraddr $007ffff2 -001C65r 1 F3 FF 7F .faraddr $007ffff3 -001C68r 1 F4 FF 7F .faraddr $007ffff4 -001C6Br 1 F5 FF 7F .faraddr $007ffff5 -001C6Er 1 F6 FF 7F .faraddr $007ffff6 -001C71r 1 F7 FF 7F .faraddr $007ffff7 -001C74r 1 F8 FF 7F .faraddr $007ffff8 -001C77r 1 F9 FF 7F .faraddr $007ffff9 -001C7Ar 1 FA FF 7F .faraddr $007ffffa -001C7Dr 1 FB FF 7F .faraddr $007ffffb -001C80r 1 FC FF 7F .faraddr $007ffffc -001C83r 1 FD FF 7F .faraddr $007ffffd -001C86r 1 FE FF 7F .faraddr $007ffffe -001C89r 1 FF FF 7F .faraddr $007fffff -001C8Cr 1 00 00 80 .faraddr $00800000 -001C8Fr 1 01 00 80 .faraddr $00800001 -001C92r 1 02 00 80 .faraddr $00800002 -001C95r 1 03 00 80 .faraddr $00800003 -001C98r 1 04 00 80 .faraddr $00800004 -001C9Br 1 05 00 80 .faraddr $00800005 -001C9Er 1 06 00 80 .faraddr $00800006 -001CA1r 1 07 00 80 .faraddr $00800007 -001CA4r 1 08 00 80 .faraddr $00800008 -001CA7r 1 09 00 80 .faraddr $00800009 -001CAAr 1 0A 00 80 .faraddr $0080000a -001CADr 1 0B 00 80 .faraddr $0080000b -001CB0r 1 0C 00 80 .faraddr $0080000c -001CB3r 1 0D 00 80 .faraddr $0080000d -001CB6r 1 0E 00 80 .faraddr $0080000e -001CB9r 1 0F 00 80 .faraddr $0080000f -001CBCr 1 E1 FF 9F .faraddr $009fffe1 -001CBFr 1 E2 FF 9F .faraddr $009fffe2 -001CC2r 1 E3 FF 9F .faraddr $009fffe3 -001CC5r 1 E4 FF 9F .faraddr $009fffe4 -001CC8r 1 E5 FF 9F .faraddr $009fffe5 -001CCBr 1 E6 FF 9F .faraddr $009fffe6 -001CCEr 1 E7 FF 9F .faraddr $009fffe7 -001CD1r 1 E8 FF 9F .faraddr $009fffe8 -001CD4r 1 E9 FF 9F .faraddr $009fffe9 -001CD7r 1 EA FF 9F .faraddr $009fffea -001CDAr 1 EB FF 9F .faraddr $009fffeb -001CDDr 1 EC FF 9F .faraddr $009fffec -001CE0r 1 ED FF 9F .faraddr $009fffed -001CE3r 1 EE FF 9F .faraddr $009fffee -001CE6r 1 EF FF 9F .faraddr $009fffef -001CE9r 1 F0 FF 9F .faraddr $009ffff0 -001CECr 1 F1 FF 9F .faraddr $009ffff1 -001CEFr 1 F2 FF 9F .faraddr $009ffff2 -001CF2r 1 F3 FF 9F .faraddr $009ffff3 -001CF5r 1 F4 FF 9F .faraddr $009ffff4 -001CF8r 1 F5 FF 9F .faraddr $009ffff5 -001CFBr 1 F6 FF 9F .faraddr $009ffff6 -001CFEr 1 F7 FF 9F .faraddr $009ffff7 -001D01r 1 F8 FF 9F .faraddr $009ffff8 -001D04r 1 F9 FF 9F .faraddr $009ffff9 -001D07r 1 FA FF 9F .faraddr $009ffffa -001D0Ar 1 FB FF 9F .faraddr $009ffffb -001D0Dr 1 FC FF 9F .faraddr $009ffffc -001D10r 1 FD FF 9F .faraddr $009ffffd -001D13r 1 FE FF 9F .faraddr $009ffffe -001D16r 1 FF FF 9F .faraddr $009fffff -001D19r 1 00 00 A0 .faraddr $00a00000 -001D1Cr 1 01 00 A0 .faraddr $00a00001 -001D1Fr 1 02 00 A0 .faraddr $00a00002 -001D22r 1 03 00 A0 .faraddr $00a00003 -001D25r 1 04 00 A0 .faraddr $00a00004 -001D28r 1 05 00 A0 .faraddr $00a00005 -001D2Br 1 06 00 A0 .faraddr $00a00006 -001D2Er 1 07 00 A0 .faraddr $00a00007 -001D31r 1 08 00 A0 .faraddr $00a00008 -001D34r 1 09 00 A0 .faraddr $00a00009 -001D37r 1 0A 00 A0 .faraddr $00a0000a -001D3Ar 1 0B 00 A0 .faraddr $00a0000b -001D3Dr 1 0C 00 A0 .faraddr $00a0000c -001D40r 1 0D 00 A0 .faraddr $00a0000d -001D43r 1 0E 00 A0 .faraddr $00a0000e -001D46r 1 0F 00 A0 .faraddr $00a0000f -001D49r 1 E1 FF FF .faraddr $00ffffe1 -001D4Cr 1 E2 FF FF .faraddr $00ffffe2 -001D4Fr 1 E3 FF FF .faraddr $00ffffe3 -001D52r 1 E4 FF FF .faraddr $00ffffe4 -001D55r 1 E5 FF FF .faraddr $00ffffe5 -001D58r 1 E6 FF FF .faraddr $00ffffe6 -001D5Br 1 E7 FF FF .faraddr $00ffffe7 -001D5Er 1 E8 FF FF .faraddr $00ffffe8 -001D61r 1 E9 FF FF .faraddr $00ffffe9 -001D64r 1 EA FF FF .faraddr $00ffffea -001D67r 1 EB FF FF .faraddr $00ffffeb -001D6Ar 1 EC FF FF .faraddr $00ffffec -001D6Dr 1 ED FF FF .faraddr $00ffffed -001D70r 1 EE FF FF .faraddr $00ffffee -001D73r 1 EF FF FF .faraddr $00ffffef -001D76r 1 F0 FF FF .faraddr $00fffff0 -001D79r 1 F1 FF FF .faraddr $00fffff1 -001D7Cr 1 F2 FF FF .faraddr $00fffff2 -001D7Fr 1 F3 FF FF .faraddr $00fffff3 -001D82r 1 F4 FF FF .faraddr $00fffff4 -001D85r 1 F5 FF FF .faraddr $00fffff5 -001D88r 1 F6 FF FF .faraddr $00fffff6 -001D8Br 1 F7 FF FF .faraddr $00fffff7 -001D8Er 1 F8 FF FF .faraddr $00fffff8 -001D91r 1 F9 FF FF .faraddr $00fffff9 -001D94r 1 FA FF FF .faraddr $00fffffa -001D97r 1 FB FF FF .faraddr $00fffffb -001D9Ar 1 FC FF FF .faraddr $00fffffc -001D9Dr 1 FD FF FF .faraddr $00fffffd -001DA0r 1 FE FF FF .faraddr $00fffffe -001DA3r 1 FF FF FF .faraddr $00ffffff +0017B8r 1 ; 8-digit hex values +0017B8r 1 00 00 00 .faraddr $00000000 +0017BBr 1 01 00 00 .faraddr $00000001 +0017BEr 1 02 00 00 .faraddr $00000002 +0017C1r 1 03 00 00 .faraddr $00000003 +0017C4r 1 04 00 00 .faraddr $00000004 +0017C7r 1 05 00 00 .faraddr $00000005 +0017CAr 1 06 00 00 .faraddr $00000006 +0017CDr 1 07 00 00 .faraddr $00000007 +0017D0r 1 08 00 00 .faraddr $00000008 +0017D3r 1 09 00 00 .faraddr $00000009 +0017D6r 1 0A 00 00 .faraddr $0000000a +0017D9r 1 0B 00 00 .faraddr $0000000b +0017DCr 1 0C 00 00 .faraddr $0000000c +0017DFr 1 0D 00 00 .faraddr $0000000d +0017E2r 1 0E 00 00 .faraddr $0000000e +0017E5r 1 0F 00 00 .faraddr $0000000f +0017E8r 1 10 00 00 .faraddr $00000010 +0017EBr 1 11 00 00 .faraddr $00000011 +0017EEr 1 12 00 00 .faraddr $00000012 +0017F1r 1 13 00 00 .faraddr $00000013 +0017F4r 1 70 00 00 .faraddr $00000070 +0017F7r 1 71 00 00 .faraddr $00000071 +0017FAr 1 72 00 00 .faraddr $00000072 +0017FDr 1 73 00 00 .faraddr $00000073 +001800r 1 74 00 00 .faraddr $00000074 +001803r 1 75 00 00 .faraddr $00000075 +001806r 1 76 00 00 .faraddr $00000076 +001809r 1 77 00 00 .faraddr $00000077 +00180Cr 1 78 00 00 .faraddr $00000078 +00180Fr 1 79 00 00 .faraddr $00000079 +001812r 1 7A 00 00 .faraddr $0000007a +001815r 1 7B 00 00 .faraddr $0000007b +001818r 1 7C 00 00 .faraddr $0000007c +00181Br 1 7D 00 00 .faraddr $0000007d +00181Er 1 7E 00 00 .faraddr $0000007e +001821r 1 7F 00 00 .faraddr $0000007f +001824r 1 80 00 00 .faraddr $00000080 +001827r 1 81 00 00 .faraddr $00000081 +00182Ar 1 82 00 00 .faraddr $00000082 +00182Dr 1 83 00 00 .faraddr $00000083 +001830r 1 84 00 00 .faraddr $00000084 +001833r 1 85 00 00 .faraddr $00000085 +001836r 1 86 00 00 .faraddr $00000086 +001839r 1 F0 00 00 .faraddr $000000f0 +00183Cr 1 F1 00 00 .faraddr $000000f1 +00183Fr 1 F2 00 00 .faraddr $000000f2 +001842r 1 F3 00 00 .faraddr $000000f3 +001845r 1 F4 00 00 .faraddr $000000f4 +001848r 1 F5 00 00 .faraddr $000000f5 +00184Br 1 F6 00 00 .faraddr $000000f6 +00184Er 1 F7 00 00 .faraddr $000000f7 +001851r 1 F8 00 00 .faraddr $000000f8 +001854r 1 F9 00 00 .faraddr $000000f9 +001857r 1 FA 00 00 .faraddr $000000fa +00185Ar 1 FB 00 00 .faraddr $000000fb +00185Dr 1 FC 00 00 .faraddr $000000fc +001860r 1 FD 00 00 .faraddr $000000fd +001863r 1 FE 00 00 .faraddr $000000fe +001866r 1 FF 00 00 .faraddr $000000ff +001869r 1 00 01 00 .faraddr $00000100 +00186Cr 1 01 01 00 .faraddr $00000101 +00186Fr 1 02 01 00 .faraddr $00000102 +001872r 1 03 01 00 .faraddr $00000103 +001875r 1 D2 0F 00 .faraddr $00000fd2 +001878r 1 D3 0F 00 .faraddr $00000fd3 +00187Br 1 D4 0F 00 .faraddr $00000fd4 +00187Er 1 D5 0F 00 .faraddr $00000fd5 +001881r 1 D6 0F 00 .faraddr $00000fd6 +001884r 1 D7 0F 00 .faraddr $00000fd7 +001887r 1 D8 0F 00 .faraddr $00000fd8 +00188Ar 1 D9 0F 00 .faraddr $00000fd9 +00188Dr 1 DA 0F 00 .faraddr $00000fda +001890r 1 DB 0F 00 .faraddr $00000fdb +001893r 1 DC 0F 00 .faraddr $00000fdc +001896r 1 DD 0F 00 .faraddr $00000fdd +001899r 1 DE 0F 00 .faraddr $00000fde +00189Cr 1 DF 0F 00 .faraddr $00000fdf +00189Fr 1 E0 0F 00 .faraddr $00000fe0 +0018A2r 1 E1 0F 00 .faraddr $00000fe1 +0018A5r 1 E2 0F 00 .faraddr $00000fe2 +0018A8r 1 E3 0F 00 .faraddr $00000fe3 +0018ABr 1 E4 0F 00 .faraddr $00000fe4 +0018AEr 1 E5 0F 00 .faraddr $00000fe5 +0018B1r 1 E6 0F 00 .faraddr $00000fe6 +0018B4r 1 E7 0F 00 .faraddr $00000fe7 +0018B7r 1 E8 0F 00 .faraddr $00000fe8 +0018BAr 1 E9 0F 00 .faraddr $00000fe9 +0018BDr 1 EA 0F 00 .faraddr $00000fea +0018C0r 1 EB 0F 00 .faraddr $00000feb +0018C3r 1 EC 0F 00 .faraddr $00000fec +0018C6r 1 ED 0F 00 .faraddr $00000fed +0018C9r 1 EE 0F 00 .faraddr $00000fee +0018CCr 1 EF 0F 00 .faraddr $00000fef +0018CFr 1 F0 0F 00 .faraddr $00000ff0 +0018D2r 1 F1 0F 00 .faraddr $00000ff1 +0018D5r 1 F2 0F 00 .faraddr $00000ff2 +0018D8r 1 F3 0F 00 .faraddr $00000ff3 +0018DBr 1 F4 0F 00 .faraddr $00000ff4 +0018DEr 1 F5 0F 00 .faraddr $00000ff5 +0018E1r 1 F6 0F 00 .faraddr $00000ff6 +0018E4r 1 F7 0F 00 .faraddr $00000ff7 +0018E7r 1 F8 0F 00 .faraddr $00000ff8 +0018EAr 1 F9 0F 00 .faraddr $00000ff9 +0018EDr 1 FA 0F 00 .faraddr $00000ffa +0018F0r 1 FB 0F 00 .faraddr $00000ffb +0018F3r 1 FC 0F 00 .faraddr $00000ffc +0018F6r 1 FD 0F 00 .faraddr $00000ffd +0018F9r 1 FE 0F 00 .faraddr $00000ffe +0018FCr 1 FF 0F 00 .faraddr $00000fff +0018FFr 1 00 10 00 .faraddr $00001000 +001902r 1 01 10 00 .faraddr $00001001 +001905r 1 02 10 00 .faraddr $00001002 +001908r 1 03 10 00 .faraddr $00001003 +00190Br 1 04 10 00 .faraddr $00001004 +00190Er 1 05 10 00 .faraddr $00001005 +001911r 1 06 10 00 .faraddr $00001006 +001914r 1 07 10 00 .faraddr $00001007 +001917r 1 08 10 00 .faraddr $00001008 +00191Ar 1 F0 7F 00 .faraddr $00007ff0 +00191Dr 1 F1 7F 00 .faraddr $00007ff1 +001920r 1 F2 7F 00 .faraddr $00007ff2 +001923r 1 F3 7F 00 .faraddr $00007ff3 +001926r 1 F4 7F 00 .faraddr $00007ff4 +001929r 1 F5 7F 00 .faraddr $00007ff5 +00192Cr 1 F6 7F 00 .faraddr $00007ff6 +00192Fr 1 F7 7F 00 .faraddr $00007ff7 +001932r 1 F8 7F 00 .faraddr $00007ff8 +001935r 1 F9 7F 00 .faraddr $00007ff9 +001938r 1 FA 7F 00 .faraddr $00007ffa +00193Br 1 FB 7F 00 .faraddr $00007ffb +00193Er 1 FC 7F 00 .faraddr $00007ffc +001941r 1 FD 7F 00 .faraddr $00007ffd +001944r 1 FE 7F 00 .faraddr $00007ffe +001947r 1 FF 7F 00 .faraddr $00007fff +00194Ar 1 00 80 00 .faraddr $00008000 +00194Dr 1 01 80 00 .faraddr $00008001 +001950r 1 02 80 00 .faraddr $00008002 +001953r 1 03 80 00 .faraddr $00008003 +001956r 1 04 80 00 .faraddr $00008004 +001959r 1 05 80 00 .faraddr $00008005 +00195Cr 1 06 80 00 .faraddr $00008006 +00195Fr 1 07 80 00 .faraddr $00008007 +001962r 1 08 80 00 .faraddr $00008008 +001965r 1 09 80 00 .faraddr $00008009 +001968r 1 0A 80 00 .faraddr $0000800a +00196Br 1 0B 80 00 .faraddr $0000800b +00196Er 1 E1 9F 00 .faraddr $00009fe1 +001971r 1 E2 9F 00 .faraddr $00009fe2 +001974r 1 E3 9F 00 .faraddr $00009fe3 +001977r 1 E4 9F 00 .faraddr $00009fe4 +00197Ar 1 E5 9F 00 .faraddr $00009fe5 +00197Dr 1 E6 9F 00 .faraddr $00009fe6 +001980r 1 E7 9F 00 .faraddr $00009fe7 +001983r 1 E8 9F 00 .faraddr $00009fe8 +001986r 1 E9 9F 00 .faraddr $00009fe9 +001989r 1 EA 9F 00 .faraddr $00009fea +00198Cr 1 EB 9F 00 .faraddr $00009feb +00198Fr 1 EC 9F 00 .faraddr $00009fec +001992r 1 ED 9F 00 .faraddr $00009fed +001995r 1 EE 9F 00 .faraddr $00009fee +001998r 1 EF 9F 00 .faraddr $00009fef +00199Br 1 F0 9F 00 .faraddr $00009ff0 +00199Er 1 F1 9F 00 .faraddr $00009ff1 +0019A1r 1 F2 9F 00 .faraddr $00009ff2 +0019A4r 1 F3 9F 00 .faraddr $00009ff3 +0019A7r 1 F4 9F 00 .faraddr $00009ff4 +0019AAr 1 F5 9F 00 .faraddr $00009ff5 +0019ADr 1 F6 9F 00 .faraddr $00009ff6 +0019B0r 1 F7 9F 00 .faraddr $00009ff7 +0019B3r 1 F8 9F 00 .faraddr $00009ff8 +0019B6r 1 F9 9F 00 .faraddr $00009ff9 +0019B9r 1 FA 9F 00 .faraddr $00009ffa +0019BCr 1 FB 9F 00 .faraddr $00009ffb +0019BFr 1 FC 9F 00 .faraddr $00009ffc +0019C2r 1 FD 9F 00 .faraddr $00009ffd +0019C5r 1 FE 9F 00 .faraddr $00009ffe +0019C8r 1 FF 9F 00 .faraddr $00009fff +0019CBr 1 00 A0 00 .faraddr $0000a000 +0019CEr 1 01 A0 00 .faraddr $0000a001 +0019D1r 1 02 A0 00 .faraddr $0000a002 +0019D4r 1 03 A0 00 .faraddr $0000a003 +0019D7r 1 04 A0 00 .faraddr $0000a004 +0019DAr 1 05 A0 00 .faraddr $0000a005 +0019DDr 1 06 A0 00 .faraddr $0000a006 +0019E0r 1 07 A0 00 .faraddr $0000a007 +0019E3r 1 08 A0 00 .faraddr $0000a008 +0019E6r 1 09 A0 00 .faraddr $0000a009 +0019E9r 1 0A A0 00 .faraddr $0000a00a +0019ECr 1 0B A0 00 .faraddr $0000a00b +0019EFr 1 0C A0 00 .faraddr $0000a00c +0019F2r 1 0D A0 00 .faraddr $0000a00d +0019F5r 1 0E A0 00 .faraddr $0000a00e +0019F8r 1 0F A0 00 .faraddr $0000a00f +0019FBr 1 E1 AF 00 .faraddr $0000afe1 +0019FEr 1 E2 AF 00 .faraddr $0000afe2 +001A01r 1 E3 AF 00 .faraddr $0000afe3 +001A04r 1 E4 AF 00 .faraddr $0000afe4 +001A07r 1 E5 AF 00 .faraddr $0000afe5 +001A0Ar 1 E6 AF 00 .faraddr $0000afe6 +001A0Dr 1 E7 AF 00 .faraddr $0000afe7 +001A10r 1 E8 AF 00 .faraddr $0000afe8 +001A13r 1 E9 AF 00 .faraddr $0000afe9 +001A16r 1 EA AF 00 .faraddr $0000afea +001A19r 1 EB AF 00 .faraddr $0000afeb +001A1Cr 1 EC AF 00 .faraddr $0000afec +001A1Fr 1 ED AF 00 .faraddr $0000afed +001A22r 1 EE AF 00 .faraddr $0000afee +001A25r 1 EF AF 00 .faraddr $0000afef +001A28r 1 F0 AF 00 .faraddr $0000aff0 +001A2Br 1 F1 AF 00 .faraddr $0000aff1 +001A2Er 1 F2 AF 00 .faraddr $0000aff2 +001A31r 1 F3 AF 00 .faraddr $0000aff3 +001A34r 1 F4 AF 00 .faraddr $0000aff4 +001A37r 1 F5 AF 00 .faraddr $0000aff5 +001A3Ar 1 F6 AF 00 .faraddr $0000aff6 +001A3Dr 1 F7 AF 00 .faraddr $0000aff7 +001A40r 1 F8 AF 00 .faraddr $0000aff8 +001A43r 1 F9 AF 00 .faraddr $0000aff9 +001A46r 1 FA AF 00 .faraddr $0000affa +001A49r 1 FB AF 00 .faraddr $0000affb +001A4Cr 1 FC AF 00 .faraddr $0000affc +001A4Fr 1 FD AF 00 .faraddr $0000affd +001A52r 1 FE AF 00 .faraddr $0000affe +001A55r 1 FF AF 00 .faraddr $0000afff +001A58r 1 00 B0 00 .faraddr $0000b000 +001A5Br 1 01 B0 00 .faraddr $0000b001 +001A5Er 1 02 B0 00 .faraddr $0000b002 +001A61r 1 03 B0 00 .faraddr $0000b003 +001A64r 1 04 B0 00 .faraddr $0000b004 +001A67r 1 05 B0 00 .faraddr $0000b005 +001A6Ar 1 06 B0 00 .faraddr $0000b006 +001A6Dr 1 07 B0 00 .faraddr $0000b007 +001A70r 1 08 B0 00 .faraddr $0000b008 +001A73r 1 09 B0 00 .faraddr $0000b009 +001A76r 1 0A B0 00 .faraddr $0000b00a +001A79r 1 0B B0 00 .faraddr $0000b00b +001A7Cr 1 0C B0 00 .faraddr $0000b00c +001A7Fr 1 0D B0 00 .faraddr $0000b00d +001A82r 1 0E B0 00 .faraddr $0000b00e +001A85r 1 0F B0 00 .faraddr $0000b00f +001A88r 1 E1 FF 00 .faraddr $0000ffe1 +001A8Br 1 E2 FF 00 .faraddr $0000ffe2 +001A8Er 1 E3 FF 00 .faraddr $0000ffe3 +001A91r 1 E4 FF 00 .faraddr $0000ffe4 +001A94r 1 E5 FF 00 .faraddr $0000ffe5 +001A97r 1 E6 FF 00 .faraddr $0000ffe6 +001A9Ar 1 E7 FF 00 .faraddr $0000ffe7 +001A9Dr 1 E8 FF 00 .faraddr $0000ffe8 +001AA0r 1 E9 FF 00 .faraddr $0000ffe9 +001AA3r 1 EA FF 00 .faraddr $0000ffea +001AA6r 1 EB FF 00 .faraddr $0000ffeb +001AA9r 1 EC FF 00 .faraddr $0000ffec +001AACr 1 ED FF 00 .faraddr $0000ffed +001AAFr 1 EE FF 00 .faraddr $0000ffee +001AB2r 1 EF FF 00 .faraddr $0000ffef +001AB5r 1 F0 FF 00 .faraddr $0000fff0 +001AB8r 1 F1 FF 00 .faraddr $0000fff1 +001ABBr 1 F2 FF 00 .faraddr $0000fff2 +001ABEr 1 F3 FF 00 .faraddr $0000fff3 +001AC1r 1 F4 FF 00 .faraddr $0000fff4 +001AC4r 1 F5 FF 00 .faraddr $0000fff5 +001AC7r 1 F6 FF 00 .faraddr $0000fff6 +001ACAr 1 F7 FF 00 .faraddr $0000fff7 +001ACDr 1 F8 FF 00 .faraddr $0000fff8 +001AD0r 1 F9 FF 00 .faraddr $0000fff9 +001AD3r 1 FA FF 00 .faraddr $0000fffa +001AD6r 1 FB FF 00 .faraddr $0000fffb +001AD9r 1 FC FF 00 .faraddr $0000fffc +001ADCr 1 FD FF 00 .faraddr $0000fffd +001ADFr 1 FE FF 00 .faraddr $0000fffe +001AE2r 1 FF FF 00 .faraddr $0000ffff +001AE5r 1 00 00 01 .faraddr $00010000 +001AE8r 1 01 00 01 .faraddr $00010001 +001AEBr 1 02 00 01 .faraddr $00010002 +001AEEr 1 03 00 01 .faraddr $00010003 +001AF1r 1 04 00 01 .faraddr $00010004 +001AF4r 1 05 00 01 .faraddr $00010005 +001AF7r 1 06 00 01 .faraddr $00010006 +001AFAr 1 07 00 01 .faraddr $00010007 +001AFDr 1 08 00 01 .faraddr $00010008 +001B00r 1 09 00 01 .faraddr $00010009 +001B03r 1 0A 00 01 .faraddr $0001000a +001B06r 1 0B 00 01 .faraddr $0001000b +001B09r 1 0C 00 01 .faraddr $0001000c +001B0Cr 1 0D 00 01 .faraddr $0001000d +001B0Fr 1 0E 00 01 .faraddr $0001000e +001B12r 1 0F 00 01 .faraddr $0001000f +001B15r 1 E1 FF 10 .faraddr $0010ffe1 +001B18r 1 E2 FF 10 .faraddr $0010ffe2 +001B1Br 1 E3 FF 10 .faraddr $0010ffe3 +001B1Er 1 E4 FF 10 .faraddr $0010ffe4 +001B21r 1 E5 FF 10 .faraddr $0010ffe5 +001B24r 1 E6 FF 10 .faraddr $0010ffe6 +001B27r 1 E7 FF 10 .faraddr $0010ffe7 +001B2Ar 1 E8 FF 10 .faraddr $0010ffe8 +001B2Dr 1 E9 FF 10 .faraddr $0010ffe9 +001B30r 1 EA FF 10 .faraddr $0010ffea +001B33r 1 EB FF 10 .faraddr $0010ffeb +001B36r 1 EC FF 10 .faraddr $0010ffec +001B39r 1 ED FF 10 .faraddr $0010ffed +001B3Cr 1 EE FF 10 .faraddr $0010ffee +001B3Fr 1 EF FF 10 .faraddr $0010ffef +001B42r 1 F0 FF 10 .faraddr $0010fff0 +001B45r 1 F1 FF 10 .faraddr $0010fff1 +001B48r 1 F2 FF 10 .faraddr $0010fff2 +001B4Br 1 F3 FF 10 .faraddr $0010fff3 +001B4Er 1 F4 FF 10 .faraddr $0010fff4 +001B51r 1 F5 FF 10 .faraddr $0010fff5 +001B54r 1 F6 FF 10 .faraddr $0010fff6 +001B57r 1 F7 FF 10 .faraddr $0010fff7 +001B5Ar 1 F8 FF 10 .faraddr $0010fff8 +001B5Dr 1 F9 FF 10 .faraddr $0010fff9 +001B60r 1 FA FF 10 .faraddr $0010fffa +001B63r 1 FB FF 10 .faraddr $0010fffb +001B66r 1 FC FF 10 .faraddr $0010fffc +001B69r 1 FD FF 10 .faraddr $0010fffd +001B6Cr 1 FE FF 10 .faraddr $0010fffe +001B6Fr 1 FF FF 10 .faraddr $0010ffff +001B72r 1 00 00 11 .faraddr $00110000 +001B75r 1 01 00 11 .faraddr $00110001 +001B78r 1 02 00 11 .faraddr $00110002 +001B7Br 1 03 00 11 .faraddr $00110003 +001B7Er 1 04 00 11 .faraddr $00110004 +001B81r 1 05 00 11 .faraddr $00110005 +001B84r 1 06 00 11 .faraddr $00110006 +001B87r 1 07 00 11 .faraddr $00110007 +001B8Ar 1 08 00 11 .faraddr $00110008 +001B8Dr 1 09 00 11 .faraddr $00110009 +001B90r 1 0A 00 11 .faraddr $0011000a +001B93r 1 0B 00 11 .faraddr $0011000b +001B96r 1 0C 00 11 .faraddr $0011000c +001B99r 1 0D 00 11 .faraddr $0011000d +001B9Cr 1 0E 00 11 .faraddr $0011000e +001B9Fr 1 0F 00 11 .faraddr $0011000f +001BA2r 1 E1 FF 20 .faraddr $0020ffe1 +001BA5r 1 E2 FF 20 .faraddr $0020ffe2 +001BA8r 1 E3 FF 20 .faraddr $0020ffe3 +001BABr 1 E4 FF 20 .faraddr $0020ffe4 +001BAEr 1 E5 FF 20 .faraddr $0020ffe5 +001BB1r 1 E6 FF 20 .faraddr $0020ffe6 +001BB4r 1 E7 FF 20 .faraddr $0020ffe7 +001BB7r 1 E8 FF 20 .faraddr $0020ffe8 +001BBAr 1 E9 FF 20 .faraddr $0020ffe9 +001BBDr 1 EA FF 20 .faraddr $0020ffea +001BC0r 1 EB FF 20 .faraddr $0020ffeb +001BC3r 1 EC FF 20 .faraddr $0020ffec +001BC6r 1 ED FF 20 .faraddr $0020ffed +001BC9r 1 EE FF 20 .faraddr $0020ffee +001BCCr 1 EF FF 20 .faraddr $0020ffef +001BCFr 1 F0 FF 20 .faraddr $0020fff0 +001BD2r 1 F1 FF 20 .faraddr $0020fff1 +001BD5r 1 F2 FF 20 .faraddr $0020fff2 +001BD8r 1 F3 FF 20 .faraddr $0020fff3 +001BDBr 1 F4 FF 20 .faraddr $0020fff4 +001BDEr 1 F5 FF 20 .faraddr $0020fff5 +001BE1r 1 F6 FF 20 .faraddr $0020fff6 +001BE4r 1 F7 FF 20 .faraddr $0020fff7 +001BE7r 1 F8 FF 20 .faraddr $0020fff8 +001BEAr 1 F9 FF 20 .faraddr $0020fff9 +001BEDr 1 FA FF 20 .faraddr $0020fffa +001BF0r 1 FB FF 20 .faraddr $0020fffb +001BF3r 1 FC FF 20 .faraddr $0020fffc +001BF6r 1 FD FF 20 .faraddr $0020fffd +001BF9r 1 FE FF 20 .faraddr $0020fffe +001BFCr 1 FF FF 20 .faraddr $0020ffff +001BFFr 1 00 00 21 .faraddr $00210000 +001C02r 1 01 00 21 .faraddr $00210001 +001C05r 1 02 00 21 .faraddr $00210002 +001C08r 1 03 00 21 .faraddr $00210003 +001C0Br 1 04 00 21 .faraddr $00210004 +001C0Er 1 05 00 21 .faraddr $00210005 +001C11r 1 06 00 21 .faraddr $00210006 +001C14r 1 07 00 21 .faraddr $00210007 +001C17r 1 08 00 21 .faraddr $00210008 +001C1Ar 1 09 00 21 .faraddr $00210009 +001C1Dr 1 0A 00 21 .faraddr $0021000a +001C20r 1 0B 00 21 .faraddr $0021000b +001C23r 1 0C 00 21 .faraddr $0021000c +001C26r 1 0D 00 21 .faraddr $0021000d +001C29r 1 0E 00 21 .faraddr $0021000e +001C2Cr 1 0F 00 21 .faraddr $0021000f +001C2Fr 1 E1 FF 7F .faraddr $007fffe1 +001C32r 1 E2 FF 7F .faraddr $007fffe2 +001C35r 1 E3 FF 7F .faraddr $007fffe3 +001C38r 1 E4 FF 7F .faraddr $007fffe4 +001C3Br 1 E5 FF 7F .faraddr $007fffe5 +001C3Er 1 E6 FF 7F .faraddr $007fffe6 +001C41r 1 E7 FF 7F .faraddr $007fffe7 +001C44r 1 E8 FF 7F .faraddr $007fffe8 +001C47r 1 E9 FF 7F .faraddr $007fffe9 +001C4Ar 1 EA FF 7F .faraddr $007fffea +001C4Dr 1 EB FF 7F .faraddr $007fffeb +001C50r 1 EC FF 7F .faraddr $007fffec +001C53r 1 ED FF 7F .faraddr $007fffed +001C56r 1 EE FF 7F .faraddr $007fffee +001C59r 1 EF FF 7F .faraddr $007fffef +001C5Cr 1 F0 FF 7F .faraddr $007ffff0 +001C5Fr 1 F1 FF 7F .faraddr $007ffff1 +001C62r 1 F2 FF 7F .faraddr $007ffff2 +001C65r 1 F3 FF 7F .faraddr $007ffff3 +001C68r 1 F4 FF 7F .faraddr $007ffff4 +001C6Br 1 F5 FF 7F .faraddr $007ffff5 +001C6Er 1 F6 FF 7F .faraddr $007ffff6 +001C71r 1 F7 FF 7F .faraddr $007ffff7 +001C74r 1 F8 FF 7F .faraddr $007ffff8 +001C77r 1 F9 FF 7F .faraddr $007ffff9 +001C7Ar 1 FA FF 7F .faraddr $007ffffa +001C7Dr 1 FB FF 7F .faraddr $007ffffb +001C80r 1 FC FF 7F .faraddr $007ffffc +001C83r 1 FD FF 7F .faraddr $007ffffd +001C86r 1 FE FF 7F .faraddr $007ffffe +001C89r 1 FF FF 7F .faraddr $007fffff +001C8Cr 1 00 00 80 .faraddr $00800000 +001C8Fr 1 01 00 80 .faraddr $00800001 +001C92r 1 02 00 80 .faraddr $00800002 +001C95r 1 03 00 80 .faraddr $00800003 +001C98r 1 04 00 80 .faraddr $00800004 +001C9Br 1 05 00 80 .faraddr $00800005 +001C9Er 1 06 00 80 .faraddr $00800006 +001CA1r 1 07 00 80 .faraddr $00800007 +001CA4r 1 08 00 80 .faraddr $00800008 +001CA7r 1 09 00 80 .faraddr $00800009 +001CAAr 1 0A 00 80 .faraddr $0080000a +001CADr 1 0B 00 80 .faraddr $0080000b +001CB0r 1 0C 00 80 .faraddr $0080000c +001CB3r 1 0D 00 80 .faraddr $0080000d +001CB6r 1 0E 00 80 .faraddr $0080000e +001CB9r 1 0F 00 80 .faraddr $0080000f +001CBCr 1 E1 FF 9F .faraddr $009fffe1 +001CBFr 1 E2 FF 9F .faraddr $009fffe2 +001CC2r 1 E3 FF 9F .faraddr $009fffe3 +001CC5r 1 E4 FF 9F .faraddr $009fffe4 +001CC8r 1 E5 FF 9F .faraddr $009fffe5 +001CCBr 1 E6 FF 9F .faraddr $009fffe6 +001CCEr 1 E7 FF 9F .faraddr $009fffe7 +001CD1r 1 E8 FF 9F .faraddr $009fffe8 +001CD4r 1 E9 FF 9F .faraddr $009fffe9 +001CD7r 1 EA FF 9F .faraddr $009fffea +001CDAr 1 EB FF 9F .faraddr $009fffeb +001CDDr 1 EC FF 9F .faraddr $009fffec +001CE0r 1 ED FF 9F .faraddr $009fffed +001CE3r 1 EE FF 9F .faraddr $009fffee +001CE6r 1 EF FF 9F .faraddr $009fffef +001CE9r 1 F0 FF 9F .faraddr $009ffff0 +001CECr 1 F1 FF 9F .faraddr $009ffff1 +001CEFr 1 F2 FF 9F .faraddr $009ffff2 +001CF2r 1 F3 FF 9F .faraddr $009ffff3 +001CF5r 1 F4 FF 9F .faraddr $009ffff4 +001CF8r 1 F5 FF 9F .faraddr $009ffff5 +001CFBr 1 F6 FF 9F .faraddr $009ffff6 +001CFEr 1 F7 FF 9F .faraddr $009ffff7 +001D01r 1 F8 FF 9F .faraddr $009ffff8 +001D04r 1 F9 FF 9F .faraddr $009ffff9 +001D07r 1 FA FF 9F .faraddr $009ffffa +001D0Ar 1 FB FF 9F .faraddr $009ffffb +001D0Dr 1 FC FF 9F .faraddr $009ffffc +001D10r 1 FD FF 9F .faraddr $009ffffd +001D13r 1 FE FF 9F .faraddr $009ffffe +001D16r 1 FF FF 9F .faraddr $009fffff +001D19r 1 00 00 A0 .faraddr $00a00000 +001D1Cr 1 01 00 A0 .faraddr $00a00001 +001D1Fr 1 02 00 A0 .faraddr $00a00002 +001D22r 1 03 00 A0 .faraddr $00a00003 +001D25r 1 04 00 A0 .faraddr $00a00004 +001D28r 1 05 00 A0 .faraddr $00a00005 +001D2Br 1 06 00 A0 .faraddr $00a00006 +001D2Er 1 07 00 A0 .faraddr $00a00007 +001D31r 1 08 00 A0 .faraddr $00a00008 +001D34r 1 09 00 A0 .faraddr $00a00009 +001D37r 1 0A 00 A0 .faraddr $00a0000a +001D3Ar 1 0B 00 A0 .faraddr $00a0000b +001D3Dr 1 0C 00 A0 .faraddr $00a0000c +001D40r 1 0D 00 A0 .faraddr $00a0000d +001D43r 1 0E 00 A0 .faraddr $00a0000e +001D46r 1 0F 00 A0 .faraddr $00a0000f +001D49r 1 E1 FF FF .faraddr $00ffffe1 +001D4Cr 1 E2 FF FF .faraddr $00ffffe2 +001D4Fr 1 E3 FF FF .faraddr $00ffffe3 +001D52r 1 E4 FF FF .faraddr $00ffffe4 +001D55r 1 E5 FF FF .faraddr $00ffffe5 +001D58r 1 E6 FF FF .faraddr $00ffffe6 +001D5Br 1 E7 FF FF .faraddr $00ffffe7 +001D5Er 1 E8 FF FF .faraddr $00ffffe8 +001D61r 1 E9 FF FF .faraddr $00ffffe9 +001D64r 1 EA FF FF .faraddr $00ffffea +001D67r 1 EB FF FF .faraddr $00ffffeb +001D6Ar 1 EC FF FF .faraddr $00ffffec +001D6Dr 1 ED FF FF .faraddr $00ffffed +001D70r 1 EE FF FF .faraddr $00ffffee +001D73r 1 EF FF FF .faraddr $00ffffef +001D76r 1 F0 FF FF .faraddr $00fffff0 +001D79r 1 F1 FF FF .faraddr $00fffff1 +001D7Cr 1 F2 FF FF .faraddr $00fffff2 +001D7Fr 1 F3 FF FF .faraddr $00fffff3 +001D82r 1 F4 FF FF .faraddr $00fffff4 +001D85r 1 F5 FF FF .faraddr $00fffff5 +001D88r 1 F6 FF FF .faraddr $00fffff6 +001D8Br 1 F7 FF FF .faraddr $00fffff7 +001D8Er 1 F8 FF FF .faraddr $00fffff8 +001D91r 1 F9 FF FF .faraddr $00fffff9 +001D94r 1 FA FF FF .faraddr $00fffffa +001D97r 1 FB FF FF .faraddr $00fffffb +001D9Ar 1 FC FF FF .faraddr $00fffffc +001D9Dr 1 FD FF FF .faraddr $00fffffd +001DA0r 1 FE FF FF .faraddr $00fffffe +001DA3r 1 FF FF FF .faraddr $00ffffff 001DA6r 1 -001DA6r 1 ; 8-digit hex values, uppercase -001DA6r 1 00 00 00 .faraddr $00000000 -001DA9r 1 01 00 00 .faraddr $00000001 -001DACr 1 02 00 00 .faraddr $00000002 -001DAFr 1 03 00 00 .faraddr $00000003 -001DB2r 1 04 00 00 .faraddr $00000004 -001DB5r 1 05 00 00 .faraddr $00000005 -001DB8r 1 06 00 00 .faraddr $00000006 -001DBBr 1 07 00 00 .faraddr $00000007 -001DBEr 1 08 00 00 .faraddr $00000008 -001DC1r 1 09 00 00 .faraddr $00000009 -001DC4r 1 0A 00 00 .faraddr $0000000A -001DC7r 1 0B 00 00 .faraddr $0000000B -001DCAr 1 0C 00 00 .faraddr $0000000C -001DCDr 1 0D 00 00 .faraddr $0000000D -001DD0r 1 0E 00 00 .faraddr $0000000E -001DD3r 1 0F 00 00 .faraddr $0000000F -001DD6r 1 10 00 00 .faraddr $00000010 -001DD9r 1 11 00 00 .faraddr $00000011 -001DDCr 1 12 00 00 .faraddr $00000012 -001DDFr 1 13 00 00 .faraddr $00000013 -001DE2r 1 70 00 00 .faraddr $00000070 -001DE5r 1 71 00 00 .faraddr $00000071 -001DE8r 1 72 00 00 .faraddr $00000072 -001DEBr 1 73 00 00 .faraddr $00000073 -001DEEr 1 74 00 00 .faraddr $00000074 -001DF1r 1 75 00 00 .faraddr $00000075 -001DF4r 1 76 00 00 .faraddr $00000076 -001DF7r 1 77 00 00 .faraddr $00000077 -001DFAr 1 78 00 00 .faraddr $00000078 -001DFDr 1 79 00 00 .faraddr $00000079 -001E00r 1 7A 00 00 .faraddr $0000007A -001E03r 1 7B 00 00 .faraddr $0000007B -001E06r 1 7C 00 00 .faraddr $0000007C -001E09r 1 7D 00 00 .faraddr $0000007D -001E0Cr 1 7E 00 00 .faraddr $0000007E -001E0Fr 1 7F 00 00 .faraddr $0000007F -001E12r 1 80 00 00 .faraddr $00000080 -001E15r 1 81 00 00 .faraddr $00000081 -001E18r 1 82 00 00 .faraddr $00000082 -001E1Br 1 83 00 00 .faraddr $00000083 -001E1Er 1 84 00 00 .faraddr $00000084 -001E21r 1 85 00 00 .faraddr $00000085 -001E24r 1 86 00 00 .faraddr $00000086 -001E27r 1 F0 00 00 .faraddr $000000F0 -001E2Ar 1 F1 00 00 .faraddr $000000F1 -001E2Dr 1 F2 00 00 .faraddr $000000F2 -001E30r 1 F3 00 00 .faraddr $000000F3 -001E33r 1 F4 00 00 .faraddr $000000F4 -001E36r 1 F5 00 00 .faraddr $000000F5 -001E39r 1 F6 00 00 .faraddr $000000F6 -001E3Cr 1 F7 00 00 .faraddr $000000F7 -001E3Fr 1 F8 00 00 .faraddr $000000F8 -001E42r 1 F9 00 00 .faraddr $000000F9 -001E45r 1 FA 00 00 .faraddr $000000FA -001E48r 1 FB 00 00 .faraddr $000000FB -001E4Br 1 FC 00 00 .faraddr $000000FC -001E4Er 1 FD 00 00 .faraddr $000000FD -001E51r 1 FE 00 00 .faraddr $000000FE -001E54r 1 FF 00 00 .faraddr $000000FF -001E57r 1 00 01 00 .faraddr $00000100 -001E5Ar 1 01 01 00 .faraddr $00000101 -001E5Dr 1 02 01 00 .faraddr $00000102 -001E60r 1 03 01 00 .faraddr $00000103 -001E63r 1 D2 0F 00 .faraddr $00000FD2 -001E66r 1 D3 0F 00 .faraddr $00000FD3 -001E69r 1 D4 0F 00 .faraddr $00000FD4 -001E6Cr 1 D5 0F 00 .faraddr $00000FD5 -001E6Fr 1 D6 0F 00 .faraddr $00000FD6 -001E72r 1 D7 0F 00 .faraddr $00000FD7 -001E75r 1 D8 0F 00 .faraddr $00000FD8 -001E78r 1 D9 0F 00 .faraddr $00000FD9 -001E7Br 1 DA 0F 00 .faraddr $00000FDA -001E7Er 1 DB 0F 00 .faraddr $00000FDB -001E81r 1 DC 0F 00 .faraddr $00000FDC -001E84r 1 DD 0F 00 .faraddr $00000FDD -001E87r 1 DE 0F 00 .faraddr $00000FDE -001E8Ar 1 DF 0F 00 .faraddr $00000FDF -001E8Dr 1 E0 0F 00 .faraddr $00000FE0 -001E90r 1 E1 0F 00 .faraddr $00000FE1 -001E93r 1 E2 0F 00 .faraddr $00000FE2 -001E96r 1 E3 0F 00 .faraddr $00000FE3 -001E99r 1 E4 0F 00 .faraddr $00000FE4 -001E9Cr 1 E5 0F 00 .faraddr $00000FE5 -001E9Fr 1 E6 0F 00 .faraddr $00000FE6 -001EA2r 1 E7 0F 00 .faraddr $00000FE7 -001EA5r 1 E8 0F 00 .faraddr $00000FE8 -001EA8r 1 E9 0F 00 .faraddr $00000FE9 -001EABr 1 EA 0F 00 .faraddr $00000FEA -001EAEr 1 EB 0F 00 .faraddr $00000FEB -001EB1r 1 EC 0F 00 .faraddr $00000FEC -001EB4r 1 ED 0F 00 .faraddr $00000FED -001EB7r 1 EE 0F 00 .faraddr $00000FEE -001EBAr 1 EF 0F 00 .faraddr $00000FEF -001EBDr 1 F0 0F 00 .faraddr $00000FF0 -001EC0r 1 F1 0F 00 .faraddr $00000FF1 -001EC3r 1 F2 0F 00 .faraddr $00000FF2 -001EC6r 1 F3 0F 00 .faraddr $00000FF3 -001EC9r 1 F4 0F 00 .faraddr $00000FF4 -001ECCr 1 F5 0F 00 .faraddr $00000FF5 -001ECFr 1 F6 0F 00 .faraddr $00000FF6 -001ED2r 1 F7 0F 00 .faraddr $00000FF7 -001ED5r 1 F8 0F 00 .faraddr $00000FF8 -001ED8r 1 F9 0F 00 .faraddr $00000FF9 -001EDBr 1 FA 0F 00 .faraddr $00000FFA -001EDEr 1 FB 0F 00 .faraddr $00000FFB -001EE1r 1 FC 0F 00 .faraddr $00000FFC -001EE4r 1 FD 0F 00 .faraddr $00000FFD -001EE7r 1 FE 0F 00 .faraddr $00000FFE -001EEAr 1 FF 0F 00 .faraddr $00000FFF -001EEDr 1 00 10 00 .faraddr $00001000 -001EF0r 1 01 10 00 .faraddr $00001001 -001EF3r 1 02 10 00 .faraddr $00001002 -001EF6r 1 03 10 00 .faraddr $00001003 -001EF9r 1 04 10 00 .faraddr $00001004 -001EFCr 1 05 10 00 .faraddr $00001005 -001EFFr 1 06 10 00 .faraddr $00001006 -001F02r 1 07 10 00 .faraddr $00001007 -001F05r 1 08 10 00 .faraddr $00001008 -001F08r 1 F0 7F 00 .faraddr $00007FF0 -001F0Br 1 F1 7F 00 .faraddr $00007FF1 -001F0Er 1 F2 7F 00 .faraddr $00007FF2 -001F11r 1 F3 7F 00 .faraddr $00007FF3 -001F14r 1 F4 7F 00 .faraddr $00007FF4 -001F17r 1 F5 7F 00 .faraddr $00007FF5 -001F1Ar 1 F6 7F 00 .faraddr $00007FF6 -001F1Dr 1 F7 7F 00 .faraddr $00007FF7 -001F20r 1 F8 7F 00 .faraddr $00007FF8 -001F23r 1 F9 7F 00 .faraddr $00007FF9 -001F26r 1 FA 7F 00 .faraddr $00007FFA -001F29r 1 FB 7F 00 .faraddr $00007FFB -001F2Cr 1 FC 7F 00 .faraddr $00007FFC -001F2Fr 1 FD 7F 00 .faraddr $00007FFD -001F32r 1 FE 7F 00 .faraddr $00007FFE -001F35r 1 FF 7F 00 .faraddr $00007FFF -001F38r 1 00 80 00 .faraddr $00008000 -001F3Br 1 01 80 00 .faraddr $00008001 -001F3Er 1 02 80 00 .faraddr $00008002 -001F41r 1 03 80 00 .faraddr $00008003 -001F44r 1 04 80 00 .faraddr $00008004 -001F47r 1 05 80 00 .faraddr $00008005 -001F4Ar 1 06 80 00 .faraddr $00008006 -001F4Dr 1 07 80 00 .faraddr $00008007 -001F50r 1 08 80 00 .faraddr $00008008 -001F53r 1 09 80 00 .faraddr $00008009 -001F56r 1 0A 80 00 .faraddr $0000800A -001F59r 1 0B 80 00 .faraddr $0000800B -001F5Cr 1 E1 9F 00 .faraddr $00009FE1 -001F5Fr 1 E2 9F 00 .faraddr $00009FE2 -001F62r 1 E3 9F 00 .faraddr $00009FE3 -001F65r 1 E4 9F 00 .faraddr $00009FE4 -001F68r 1 E5 9F 00 .faraddr $00009FE5 -001F6Br 1 E6 9F 00 .faraddr $00009FE6 -001F6Er 1 E7 9F 00 .faraddr $00009FE7 -001F71r 1 E8 9F 00 .faraddr $00009FE8 -001F74r 1 E9 9F 00 .faraddr $00009FE9 -001F77r 1 EA 9F 00 .faraddr $00009FEA -001F7Ar 1 EB 9F 00 .faraddr $00009FEB -001F7Dr 1 EC 9F 00 .faraddr $00009FEC -001F80r 1 ED 9F 00 .faraddr $00009FED -001F83r 1 EE 9F 00 .faraddr $00009FEE -001F86r 1 EF 9F 00 .faraddr $00009FEF -001F89r 1 F0 9F 00 .faraddr $00009FF0 -001F8Cr 1 F1 9F 00 .faraddr $00009FF1 -001F8Fr 1 F2 9F 00 .faraddr $00009FF2 -001F92r 1 F3 9F 00 .faraddr $00009FF3 -001F95r 1 F4 9F 00 .faraddr $00009FF4 -001F98r 1 F5 9F 00 .faraddr $00009FF5 -001F9Br 1 F6 9F 00 .faraddr $00009FF6 -001F9Er 1 F7 9F 00 .faraddr $00009FF7 -001FA1r 1 F8 9F 00 .faraddr $00009FF8 -001FA4r 1 F9 9F 00 .faraddr $00009FF9 -001FA7r 1 FA 9F 00 .faraddr $00009FFA -001FAAr 1 FB 9F 00 .faraddr $00009FFB -001FADr 1 FC 9F 00 .faraddr $00009FFC -001FB0r 1 FD 9F 00 .faraddr $00009FFD -001FB3r 1 FE 9F 00 .faraddr $00009FFE -001FB6r 1 FF 9F 00 .faraddr $00009FFF -001FB9r 1 00 A0 00 .faraddr $0000A000 -001FBCr 1 01 A0 00 .faraddr $0000A001 -001FBFr 1 02 A0 00 .faraddr $0000A002 -001FC2r 1 03 A0 00 .faraddr $0000A003 -001FC5r 1 04 A0 00 .faraddr $0000A004 -001FC8r 1 05 A0 00 .faraddr $0000A005 -001FCBr 1 06 A0 00 .faraddr $0000A006 -001FCEr 1 07 A0 00 .faraddr $0000A007 -001FD1r 1 08 A0 00 .faraddr $0000A008 -001FD4r 1 09 A0 00 .faraddr $0000A009 -001FD7r 1 0A A0 00 .faraddr $0000A00A -001FDAr 1 0B A0 00 .faraddr $0000A00B -001FDDr 1 0C A0 00 .faraddr $0000A00C -001FE0r 1 0D A0 00 .faraddr $0000A00D -001FE3r 1 0E A0 00 .faraddr $0000A00E -001FE6r 1 0F A0 00 .faraddr $0000A00F -001FE9r 1 E1 AF 00 .faraddr $0000AFE1 -001FECr 1 E2 AF 00 .faraddr $0000AFE2 -001FEFr 1 E3 AF 00 .faraddr $0000AFE3 -001FF2r 1 E4 AF 00 .faraddr $0000AFE4 -001FF5r 1 E5 AF 00 .faraddr $0000AFE5 -001FF8r 1 E6 AF 00 .faraddr $0000AFE6 -001FFBr 1 E7 AF 00 .faraddr $0000AFE7 -001FFEr 1 E8 AF 00 .faraddr $0000AFE8 -002001r 1 E9 AF 00 .faraddr $0000AFE9 -002004r 1 EA AF 00 .faraddr $0000AFEA -002007r 1 EB AF 00 .faraddr $0000AFEB -00200Ar 1 EC AF 00 .faraddr $0000AFEC -00200Dr 1 ED AF 00 .faraddr $0000AFED -002010r 1 EE AF 00 .faraddr $0000AFEE -002013r 1 EF AF 00 .faraddr $0000AFEF -002016r 1 F0 AF 00 .faraddr $0000AFF0 -002019r 1 F1 AF 00 .faraddr $0000AFF1 -00201Cr 1 F2 AF 00 .faraddr $0000AFF2 -00201Fr 1 F3 AF 00 .faraddr $0000AFF3 -002022r 1 F4 AF 00 .faraddr $0000AFF4 -002025r 1 F5 AF 00 .faraddr $0000AFF5 -002028r 1 F6 AF 00 .faraddr $0000AFF6 -00202Br 1 F7 AF 00 .faraddr $0000AFF7 -00202Er 1 F8 AF 00 .faraddr $0000AFF8 -002031r 1 F9 AF 00 .faraddr $0000AFF9 -002034r 1 FA AF 00 .faraddr $0000AFFA -002037r 1 FB AF 00 .faraddr $0000AFFB -00203Ar 1 FC AF 00 .faraddr $0000AFFC -00203Dr 1 FD AF 00 .faraddr $0000AFFD -002040r 1 FE AF 00 .faraddr $0000AFFE -002043r 1 FF AF 00 .faraddr $0000AFFF -002046r 1 00 B0 00 .faraddr $0000B000 -002049r 1 01 B0 00 .faraddr $0000B001 -00204Cr 1 02 B0 00 .faraddr $0000B002 -00204Fr 1 03 B0 00 .faraddr $0000B003 -002052r 1 04 B0 00 .faraddr $0000B004 -002055r 1 05 B0 00 .faraddr $0000B005 -002058r 1 06 B0 00 .faraddr $0000B006 -00205Br 1 07 B0 00 .faraddr $0000B007 -00205Er 1 08 B0 00 .faraddr $0000B008 -002061r 1 09 B0 00 .faraddr $0000B009 -002064r 1 0A B0 00 .faraddr $0000B00A -002067r 1 0B B0 00 .faraddr $0000B00B -00206Ar 1 0C B0 00 .faraddr $0000B00C -00206Dr 1 0D B0 00 .faraddr $0000B00D -002070r 1 0E B0 00 .faraddr $0000B00E -002073r 1 0F B0 00 .faraddr $0000B00F -002076r 1 E1 FF 00 .faraddr $0000FFE1 -002079r 1 E2 FF 00 .faraddr $0000FFE2 -00207Cr 1 E3 FF 00 .faraddr $0000FFE3 -00207Fr 1 E4 FF 00 .faraddr $0000FFE4 -002082r 1 E5 FF 00 .faraddr $0000FFE5 -002085r 1 E6 FF 00 .faraddr $0000FFE6 -002088r 1 E7 FF 00 .faraddr $0000FFE7 -00208Br 1 E8 FF 00 .faraddr $0000FFE8 -00208Er 1 E9 FF 00 .faraddr $0000FFE9 -002091r 1 EA FF 00 .faraddr $0000FFEA -002094r 1 EB FF 00 .faraddr $0000FFEB -002097r 1 EC FF 00 .faraddr $0000FFEC -00209Ar 1 ED FF 00 .faraddr $0000FFED -00209Dr 1 EE FF 00 .faraddr $0000FFEE -0020A0r 1 EF FF 00 .faraddr $0000FFEF -0020A3r 1 F0 FF 00 .faraddr $0000FFF0 -0020A6r 1 F1 FF 00 .faraddr $0000FFF1 -0020A9r 1 F2 FF 00 .faraddr $0000FFF2 -0020ACr 1 F3 FF 00 .faraddr $0000FFF3 -0020AFr 1 F4 FF 00 .faraddr $0000FFF4 -0020B2r 1 F5 FF 00 .faraddr $0000FFF5 -0020B5r 1 F6 FF 00 .faraddr $0000FFF6 -0020B8r 1 F7 FF 00 .faraddr $0000FFF7 -0020BBr 1 F8 FF 00 .faraddr $0000FFF8 -0020BEr 1 F9 FF 00 .faraddr $0000FFF9 -0020C1r 1 FA FF 00 .faraddr $0000FFFA -0020C4r 1 FB FF 00 .faraddr $0000FFFB -0020C7r 1 FC FF 00 .faraddr $0000FFFC -0020CAr 1 FD FF 00 .faraddr $0000FFFD -0020CDr 1 FE FF 00 .faraddr $0000FFFE -0020D0r 1 FF FF 00 .faraddr $0000FFFF -0020D3r 1 00 00 01 .faraddr $00010000 -0020D6r 1 01 00 01 .faraddr $00010001 -0020D9r 1 02 00 01 .faraddr $00010002 -0020DCr 1 03 00 01 .faraddr $00010003 -0020DFr 1 04 00 01 .faraddr $00010004 -0020E2r 1 05 00 01 .faraddr $00010005 -0020E5r 1 06 00 01 .faraddr $00010006 -0020E8r 1 07 00 01 .faraddr $00010007 -0020EBr 1 08 00 01 .faraddr $00010008 -0020EEr 1 09 00 01 .faraddr $00010009 -0020F1r 1 0A 00 01 .faraddr $0001000A -0020F4r 1 0B 00 01 .faraddr $0001000B -0020F7r 1 0C 00 01 .faraddr $0001000C -0020FAr 1 0D 00 01 .faraddr $0001000D -0020FDr 1 0E 00 01 .faraddr $0001000E -002100r 1 0F 00 01 .faraddr $0001000F -002103r 1 E1 FF 10 .faraddr $0010FFE1 -002106r 1 E2 FF 10 .faraddr $0010FFE2 -002109r 1 E3 FF 10 .faraddr $0010FFE3 -00210Cr 1 E4 FF 10 .faraddr $0010FFE4 -00210Fr 1 E5 FF 10 .faraddr $0010FFE5 -002112r 1 E6 FF 10 .faraddr $0010FFE6 -002115r 1 E7 FF 10 .faraddr $0010FFE7 -002118r 1 E8 FF 10 .faraddr $0010FFE8 -00211Br 1 E9 FF 10 .faraddr $0010FFE9 -00211Er 1 EA FF 10 .faraddr $0010FFEA -002121r 1 EB FF 10 .faraddr $0010FFEB -002124r 1 EC FF 10 .faraddr $0010FFEC -002127r 1 ED FF 10 .faraddr $0010FFED -00212Ar 1 EE FF 10 .faraddr $0010FFEE -00212Dr 1 EF FF 10 .faraddr $0010FFEF -002130r 1 F0 FF 10 .faraddr $0010FFF0 -002133r 1 F1 FF 10 .faraddr $0010FFF1 -002136r 1 F2 FF 10 .faraddr $0010FFF2 -002139r 1 F3 FF 10 .faraddr $0010FFF3 -00213Cr 1 F4 FF 10 .faraddr $0010FFF4 -00213Fr 1 F5 FF 10 .faraddr $0010FFF5 -002142r 1 F6 FF 10 .faraddr $0010FFF6 -002145r 1 F7 FF 10 .faraddr $0010FFF7 -002148r 1 F8 FF 10 .faraddr $0010FFF8 -00214Br 1 F9 FF 10 .faraddr $0010FFF9 -00214Er 1 FA FF 10 .faraddr $0010FFFA -002151r 1 FB FF 10 .faraddr $0010FFFB -002154r 1 FC FF 10 .faraddr $0010FFFC -002157r 1 FD FF 10 .faraddr $0010FFFD -00215Ar 1 FE FF 10 .faraddr $0010FFFE -00215Dr 1 FF FF 10 .faraddr $0010FFFF -002160r 1 00 00 11 .faraddr $00110000 -002163r 1 01 00 11 .faraddr $00110001 -002166r 1 02 00 11 .faraddr $00110002 -002169r 1 03 00 11 .faraddr $00110003 -00216Cr 1 04 00 11 .faraddr $00110004 -00216Fr 1 05 00 11 .faraddr $00110005 -002172r 1 06 00 11 .faraddr $00110006 -002175r 1 07 00 11 .faraddr $00110007 -002178r 1 08 00 11 .faraddr $00110008 -00217Br 1 09 00 11 .faraddr $00110009 -00217Er 1 0A 00 11 .faraddr $0011000A -002181r 1 0B 00 11 .faraddr $0011000B -002184r 1 0C 00 11 .faraddr $0011000C -002187r 1 0D 00 11 .faraddr $0011000D -00218Ar 1 0E 00 11 .faraddr $0011000E -00218Dr 1 0F 00 11 .faraddr $0011000F -002190r 1 E1 FF 20 .faraddr $0020FFE1 -002193r 1 E2 FF 20 .faraddr $0020FFE2 -002196r 1 E3 FF 20 .faraddr $0020FFE3 -002199r 1 E4 FF 20 .faraddr $0020FFE4 -00219Cr 1 E5 FF 20 .faraddr $0020FFE5 -00219Fr 1 E6 FF 20 .faraddr $0020FFE6 -0021A2r 1 E7 FF 20 .faraddr $0020FFE7 -0021A5r 1 E8 FF 20 .faraddr $0020FFE8 -0021A8r 1 E9 FF 20 .faraddr $0020FFE9 -0021ABr 1 EA FF 20 .faraddr $0020FFEA -0021AEr 1 EB FF 20 .faraddr $0020FFEB -0021B1r 1 EC FF 20 .faraddr $0020FFEC -0021B4r 1 ED FF 20 .faraddr $0020FFED -0021B7r 1 EE FF 20 .faraddr $0020FFEE -0021BAr 1 EF FF 20 .faraddr $0020FFEF -0021BDr 1 F0 FF 20 .faraddr $0020FFF0 -0021C0r 1 F1 FF 20 .faraddr $0020FFF1 -0021C3r 1 F2 FF 20 .faraddr $0020FFF2 -0021C6r 1 F3 FF 20 .faraddr $0020FFF3 -0021C9r 1 F4 FF 20 .faraddr $0020FFF4 -0021CCr 1 F5 FF 20 .faraddr $0020FFF5 -0021CFr 1 F6 FF 20 .faraddr $0020FFF6 -0021D2r 1 F7 FF 20 .faraddr $0020FFF7 -0021D5r 1 F8 FF 20 .faraddr $0020FFF8 -0021D8r 1 F9 FF 20 .faraddr $0020FFF9 -0021DBr 1 FA FF 20 .faraddr $0020FFFA -0021DEr 1 FB FF 20 .faraddr $0020FFFB -0021E1r 1 FC FF 20 .faraddr $0020FFFC -0021E4r 1 FD FF 20 .faraddr $0020FFFD -0021E7r 1 FE FF 20 .faraddr $0020FFFE -0021EAr 1 FF FF 20 .faraddr $0020FFFF -0021EDr 1 00 00 21 .faraddr $00210000 -0021F0r 1 01 00 21 .faraddr $00210001 -0021F3r 1 02 00 21 .faraddr $00210002 -0021F6r 1 03 00 21 .faraddr $00210003 -0021F9r 1 04 00 21 .faraddr $00210004 -0021FCr 1 05 00 21 .faraddr $00210005 -0021FFr 1 06 00 21 .faraddr $00210006 -002202r 1 07 00 21 .faraddr $00210007 -002205r 1 08 00 21 .faraddr $00210008 -002208r 1 09 00 21 .faraddr $00210009 -00220Br 1 0A 00 21 .faraddr $0021000A -00220Er 1 0B 00 21 .faraddr $0021000B -002211r 1 0C 00 21 .faraddr $0021000C -002214r 1 0D 00 21 .faraddr $0021000D -002217r 1 0E 00 21 .faraddr $0021000E -00221Ar 1 0F 00 21 .faraddr $0021000F -00221Dr 1 E1 FF 7F .faraddr $007FFFE1 -002220r 1 E2 FF 7F .faraddr $007FFFE2 -002223r 1 E3 FF 7F .faraddr $007FFFE3 -002226r 1 E4 FF 7F .faraddr $007FFFE4 -002229r 1 E5 FF 7F .faraddr $007FFFE5 -00222Cr 1 E6 FF 7F .faraddr $007FFFE6 -00222Fr 1 E7 FF 7F .faraddr $007FFFE7 -002232r 1 E8 FF 7F .faraddr $007FFFE8 -002235r 1 E9 FF 7F .faraddr $007FFFE9 -002238r 1 EA FF 7F .faraddr $007FFFEA -00223Br 1 EB FF 7F .faraddr $007FFFEB -00223Er 1 EC FF 7F .faraddr $007FFFEC -002241r 1 ED FF 7F .faraddr $007FFFED -002244r 1 EE FF 7F .faraddr $007FFFEE -002247r 1 EF FF 7F .faraddr $007FFFEF -00224Ar 1 F0 FF 7F .faraddr $007FFFF0 -00224Dr 1 F1 FF 7F .faraddr $007FFFF1 -002250r 1 F2 FF 7F .faraddr $007FFFF2 -002253r 1 F3 FF 7F .faraddr $007FFFF3 -002256r 1 F4 FF 7F .faraddr $007FFFF4 -002259r 1 F5 FF 7F .faraddr $007FFFF5 -00225Cr 1 F6 FF 7F .faraddr $007FFFF6 -00225Fr 1 F7 FF 7F .faraddr $007FFFF7 -002262r 1 F8 FF 7F .faraddr $007FFFF8 -002265r 1 F9 FF 7F .faraddr $007FFFF9 -002268r 1 FA FF 7F .faraddr $007FFFFA -00226Br 1 FB FF 7F .faraddr $007FFFFB -00226Er 1 FC FF 7F .faraddr $007FFFFC -002271r 1 FD FF 7F .faraddr $007FFFFD -002274r 1 FE FF 7F .faraddr $007FFFFE -002277r 1 FF FF 7F .faraddr $007FFFFF -00227Ar 1 00 00 80 .faraddr $00800000 -00227Dr 1 01 00 80 .faraddr $00800001 -002280r 1 02 00 80 .faraddr $00800002 -002283r 1 03 00 80 .faraddr $00800003 -002286r 1 04 00 80 .faraddr $00800004 -002289r 1 05 00 80 .faraddr $00800005 -00228Cr 1 06 00 80 .faraddr $00800006 -00228Fr 1 07 00 80 .faraddr $00800007 -002292r 1 08 00 80 .faraddr $00800008 -002295r 1 09 00 80 .faraddr $00800009 -002298r 1 0A 00 80 .faraddr $0080000A -00229Br 1 0B 00 80 .faraddr $0080000B -00229Er 1 0C 00 80 .faraddr $0080000C -0022A1r 1 0D 00 80 .faraddr $0080000D -0022A4r 1 0E 00 80 .faraddr $0080000E -0022A7r 1 0F 00 80 .faraddr $0080000F -0022AAr 1 E1 FF 9F .faraddr $009FFFE1 -0022ADr 1 E2 FF 9F .faraddr $009FFFE2 -0022B0r 1 E3 FF 9F .faraddr $009FFFE3 -0022B3r 1 E4 FF 9F .faraddr $009FFFE4 -0022B6r 1 E5 FF 9F .faraddr $009FFFE5 -0022B9r 1 E6 FF 9F .faraddr $009FFFE6 -0022BCr 1 E7 FF 9F .faraddr $009FFFE7 -0022BFr 1 E8 FF 9F .faraddr $009FFFE8 -0022C2r 1 E9 FF 9F .faraddr $009FFFE9 -0022C5r 1 EA FF 9F .faraddr $009FFFEA -0022C8r 1 EB FF 9F .faraddr $009FFFEB -0022CBr 1 EC FF 9F .faraddr $009FFFEC -0022CEr 1 ED FF 9F .faraddr $009FFFED -0022D1r 1 EE FF 9F .faraddr $009FFFEE -0022D4r 1 EF FF 9F .faraddr $009FFFEF -0022D7r 1 F0 FF 9F .faraddr $009FFFF0 -0022DAr 1 F1 FF 9F .faraddr $009FFFF1 -0022DDr 1 F2 FF 9F .faraddr $009FFFF2 -0022E0r 1 F3 FF 9F .faraddr $009FFFF3 -0022E3r 1 F4 FF 9F .faraddr $009FFFF4 -0022E6r 1 F5 FF 9F .faraddr $009FFFF5 -0022E9r 1 F6 FF 9F .faraddr $009FFFF6 -0022ECr 1 F7 FF 9F .faraddr $009FFFF7 -0022EFr 1 F8 FF 9F .faraddr $009FFFF8 -0022F2r 1 F9 FF 9F .faraddr $009FFFF9 -0022F5r 1 FA FF 9F .faraddr $009FFFFA -0022F8r 1 FB FF 9F .faraddr $009FFFFB -0022FBr 1 FC FF 9F .faraddr $009FFFFC -0022FEr 1 FD FF 9F .faraddr $009FFFFD -002301r 1 FE FF 9F .faraddr $009FFFFE -002304r 1 FF FF 9F .faraddr $009FFFFF -002307r 1 00 00 A0 .faraddr $00A00000 -00230Ar 1 01 00 A0 .faraddr $00A00001 -00230Dr 1 02 00 A0 .faraddr $00A00002 -002310r 1 03 00 A0 .faraddr $00A00003 -002313r 1 04 00 A0 .faraddr $00A00004 -002316r 1 05 00 A0 .faraddr $00A00005 -002319r 1 06 00 A0 .faraddr $00A00006 -00231Cr 1 07 00 A0 .faraddr $00A00007 -00231Fr 1 08 00 A0 .faraddr $00A00008 -002322r 1 09 00 A0 .faraddr $00A00009 -002325r 1 0A 00 A0 .faraddr $00A0000A -002328r 1 0B 00 A0 .faraddr $00A0000B -00232Br 1 0C 00 A0 .faraddr $00A0000C -00232Er 1 0D 00 A0 .faraddr $00A0000D -002331r 1 0E 00 A0 .faraddr $00A0000E -002334r 1 0F 00 A0 .faraddr $00A0000F -002337r 1 E1 FF FF .faraddr $00FFFFE1 -00233Ar 1 E2 FF FF .faraddr $00FFFFE2 -00233Dr 1 E3 FF FF .faraddr $00FFFFE3 -002340r 1 E4 FF FF .faraddr $00FFFFE4 -002343r 1 E5 FF FF .faraddr $00FFFFE5 -002346r 1 E6 FF FF .faraddr $00FFFFE6 -002349r 1 E7 FF FF .faraddr $00FFFFE7 -00234Cr 1 E8 FF FF .faraddr $00FFFFE8 -00234Fr 1 E9 FF FF .faraddr $00FFFFE9 -002352r 1 EA FF FF .faraddr $00FFFFEA -002355r 1 EB FF FF .faraddr $00FFFFEB -002358r 1 EC FF FF .faraddr $00FFFFEC -00235Br 1 ED FF FF .faraddr $00FFFFED -00235Er 1 EE FF FF .faraddr $00FFFFEE -002361r 1 EF FF FF .faraddr $00FFFFEF -002364r 1 F0 FF FF .faraddr $00FFFFF0 -002367r 1 F1 FF FF .faraddr $00FFFFF1 -00236Ar 1 F2 FF FF .faraddr $00FFFFF2 -00236Dr 1 F3 FF FF .faraddr $00FFFFF3 -002370r 1 F4 FF FF .faraddr $00FFFFF4 -002373r 1 F5 FF FF .faraddr $00FFFFF5 -002376r 1 F6 FF FF .faraddr $00FFFFF6 -002379r 1 F7 FF FF .faraddr $00FFFFF7 -00237Cr 1 F8 FF FF .faraddr $00FFFFF8 -00237Fr 1 F9 FF FF .faraddr $00FFFFF9 -002382r 1 FA FF FF .faraddr $00FFFFFA -002385r 1 FB FF FF .faraddr $00FFFFFB -002388r 1 FC FF FF .faraddr $00FFFFFC -00238Br 1 FD FF FF .faraddr $00FFFFFD -00238Er 1 FE FF FF .faraddr $00FFFFFE -002391r 1 FF FF FF .faraddr $00FFFFFF +001DA6r 1 ; 8-digit hex values, uppercase +001DA6r 1 00 00 00 .faraddr $00000000 +001DA9r 1 01 00 00 .faraddr $00000001 +001DACr 1 02 00 00 .faraddr $00000002 +001DAFr 1 03 00 00 .faraddr $00000003 +001DB2r 1 04 00 00 .faraddr $00000004 +001DB5r 1 05 00 00 .faraddr $00000005 +001DB8r 1 06 00 00 .faraddr $00000006 +001DBBr 1 07 00 00 .faraddr $00000007 +001DBEr 1 08 00 00 .faraddr $00000008 +001DC1r 1 09 00 00 .faraddr $00000009 +001DC4r 1 0A 00 00 .faraddr $0000000A +001DC7r 1 0B 00 00 .faraddr $0000000B +001DCAr 1 0C 00 00 .faraddr $0000000C +001DCDr 1 0D 00 00 .faraddr $0000000D +001DD0r 1 0E 00 00 .faraddr $0000000E +001DD3r 1 0F 00 00 .faraddr $0000000F +001DD6r 1 10 00 00 .faraddr $00000010 +001DD9r 1 11 00 00 .faraddr $00000011 +001DDCr 1 12 00 00 .faraddr $00000012 +001DDFr 1 13 00 00 .faraddr $00000013 +001DE2r 1 70 00 00 .faraddr $00000070 +001DE5r 1 71 00 00 .faraddr $00000071 +001DE8r 1 72 00 00 .faraddr $00000072 +001DEBr 1 73 00 00 .faraddr $00000073 +001DEEr 1 74 00 00 .faraddr $00000074 +001DF1r 1 75 00 00 .faraddr $00000075 +001DF4r 1 76 00 00 .faraddr $00000076 +001DF7r 1 77 00 00 .faraddr $00000077 +001DFAr 1 78 00 00 .faraddr $00000078 +001DFDr 1 79 00 00 .faraddr $00000079 +001E00r 1 7A 00 00 .faraddr $0000007A +001E03r 1 7B 00 00 .faraddr $0000007B +001E06r 1 7C 00 00 .faraddr $0000007C +001E09r 1 7D 00 00 .faraddr $0000007D +001E0Cr 1 7E 00 00 .faraddr $0000007E +001E0Fr 1 7F 00 00 .faraddr $0000007F +001E12r 1 80 00 00 .faraddr $00000080 +001E15r 1 81 00 00 .faraddr $00000081 +001E18r 1 82 00 00 .faraddr $00000082 +001E1Br 1 83 00 00 .faraddr $00000083 +001E1Er 1 84 00 00 .faraddr $00000084 +001E21r 1 85 00 00 .faraddr $00000085 +001E24r 1 86 00 00 .faraddr $00000086 +001E27r 1 F0 00 00 .faraddr $000000F0 +001E2Ar 1 F1 00 00 .faraddr $000000F1 +001E2Dr 1 F2 00 00 .faraddr $000000F2 +001E30r 1 F3 00 00 .faraddr $000000F3 +001E33r 1 F4 00 00 .faraddr $000000F4 +001E36r 1 F5 00 00 .faraddr $000000F5 +001E39r 1 F6 00 00 .faraddr $000000F6 +001E3Cr 1 F7 00 00 .faraddr $000000F7 +001E3Fr 1 F8 00 00 .faraddr $000000F8 +001E42r 1 F9 00 00 .faraddr $000000F9 +001E45r 1 FA 00 00 .faraddr $000000FA +001E48r 1 FB 00 00 .faraddr $000000FB +001E4Br 1 FC 00 00 .faraddr $000000FC +001E4Er 1 FD 00 00 .faraddr $000000FD +001E51r 1 FE 00 00 .faraddr $000000FE +001E54r 1 FF 00 00 .faraddr $000000FF +001E57r 1 00 01 00 .faraddr $00000100 +001E5Ar 1 01 01 00 .faraddr $00000101 +001E5Dr 1 02 01 00 .faraddr $00000102 +001E60r 1 03 01 00 .faraddr $00000103 +001E63r 1 D2 0F 00 .faraddr $00000FD2 +001E66r 1 D3 0F 00 .faraddr $00000FD3 +001E69r 1 D4 0F 00 .faraddr $00000FD4 +001E6Cr 1 D5 0F 00 .faraddr $00000FD5 +001E6Fr 1 D6 0F 00 .faraddr $00000FD6 +001E72r 1 D7 0F 00 .faraddr $00000FD7 +001E75r 1 D8 0F 00 .faraddr $00000FD8 +001E78r 1 D9 0F 00 .faraddr $00000FD9 +001E7Br 1 DA 0F 00 .faraddr $00000FDA +001E7Er 1 DB 0F 00 .faraddr $00000FDB +001E81r 1 DC 0F 00 .faraddr $00000FDC +001E84r 1 DD 0F 00 .faraddr $00000FDD +001E87r 1 DE 0F 00 .faraddr $00000FDE +001E8Ar 1 DF 0F 00 .faraddr $00000FDF +001E8Dr 1 E0 0F 00 .faraddr $00000FE0 +001E90r 1 E1 0F 00 .faraddr $00000FE1 +001E93r 1 E2 0F 00 .faraddr $00000FE2 +001E96r 1 E3 0F 00 .faraddr $00000FE3 +001E99r 1 E4 0F 00 .faraddr $00000FE4 +001E9Cr 1 E5 0F 00 .faraddr $00000FE5 +001E9Fr 1 E6 0F 00 .faraddr $00000FE6 +001EA2r 1 E7 0F 00 .faraddr $00000FE7 +001EA5r 1 E8 0F 00 .faraddr $00000FE8 +001EA8r 1 E9 0F 00 .faraddr $00000FE9 +001EABr 1 EA 0F 00 .faraddr $00000FEA +001EAEr 1 EB 0F 00 .faraddr $00000FEB +001EB1r 1 EC 0F 00 .faraddr $00000FEC +001EB4r 1 ED 0F 00 .faraddr $00000FED +001EB7r 1 EE 0F 00 .faraddr $00000FEE +001EBAr 1 EF 0F 00 .faraddr $00000FEF +001EBDr 1 F0 0F 00 .faraddr $00000FF0 +001EC0r 1 F1 0F 00 .faraddr $00000FF1 +001EC3r 1 F2 0F 00 .faraddr $00000FF2 +001EC6r 1 F3 0F 00 .faraddr $00000FF3 +001EC9r 1 F4 0F 00 .faraddr $00000FF4 +001ECCr 1 F5 0F 00 .faraddr $00000FF5 +001ECFr 1 F6 0F 00 .faraddr $00000FF6 +001ED2r 1 F7 0F 00 .faraddr $00000FF7 +001ED5r 1 F8 0F 00 .faraddr $00000FF8 +001ED8r 1 F9 0F 00 .faraddr $00000FF9 +001EDBr 1 FA 0F 00 .faraddr $00000FFA +001EDEr 1 FB 0F 00 .faraddr $00000FFB +001EE1r 1 FC 0F 00 .faraddr $00000FFC +001EE4r 1 FD 0F 00 .faraddr $00000FFD +001EE7r 1 FE 0F 00 .faraddr $00000FFE +001EEAr 1 FF 0F 00 .faraddr $00000FFF +001EEDr 1 00 10 00 .faraddr $00001000 +001EF0r 1 01 10 00 .faraddr $00001001 +001EF3r 1 02 10 00 .faraddr $00001002 +001EF6r 1 03 10 00 .faraddr $00001003 +001EF9r 1 04 10 00 .faraddr $00001004 +001EFCr 1 05 10 00 .faraddr $00001005 +001EFFr 1 06 10 00 .faraddr $00001006 +001F02r 1 07 10 00 .faraddr $00001007 +001F05r 1 08 10 00 .faraddr $00001008 +001F08r 1 F0 7F 00 .faraddr $00007FF0 +001F0Br 1 F1 7F 00 .faraddr $00007FF1 +001F0Er 1 F2 7F 00 .faraddr $00007FF2 +001F11r 1 F3 7F 00 .faraddr $00007FF3 +001F14r 1 F4 7F 00 .faraddr $00007FF4 +001F17r 1 F5 7F 00 .faraddr $00007FF5 +001F1Ar 1 F6 7F 00 .faraddr $00007FF6 +001F1Dr 1 F7 7F 00 .faraddr $00007FF7 +001F20r 1 F8 7F 00 .faraddr $00007FF8 +001F23r 1 F9 7F 00 .faraddr $00007FF9 +001F26r 1 FA 7F 00 .faraddr $00007FFA +001F29r 1 FB 7F 00 .faraddr $00007FFB +001F2Cr 1 FC 7F 00 .faraddr $00007FFC +001F2Fr 1 FD 7F 00 .faraddr $00007FFD +001F32r 1 FE 7F 00 .faraddr $00007FFE +001F35r 1 FF 7F 00 .faraddr $00007FFF +001F38r 1 00 80 00 .faraddr $00008000 +001F3Br 1 01 80 00 .faraddr $00008001 +001F3Er 1 02 80 00 .faraddr $00008002 +001F41r 1 03 80 00 .faraddr $00008003 +001F44r 1 04 80 00 .faraddr $00008004 +001F47r 1 05 80 00 .faraddr $00008005 +001F4Ar 1 06 80 00 .faraddr $00008006 +001F4Dr 1 07 80 00 .faraddr $00008007 +001F50r 1 08 80 00 .faraddr $00008008 +001F53r 1 09 80 00 .faraddr $00008009 +001F56r 1 0A 80 00 .faraddr $0000800A +001F59r 1 0B 80 00 .faraddr $0000800B +001F5Cr 1 E1 9F 00 .faraddr $00009FE1 +001F5Fr 1 E2 9F 00 .faraddr $00009FE2 +001F62r 1 E3 9F 00 .faraddr $00009FE3 +001F65r 1 E4 9F 00 .faraddr $00009FE4 +001F68r 1 E5 9F 00 .faraddr $00009FE5 +001F6Br 1 E6 9F 00 .faraddr $00009FE6 +001F6Er 1 E7 9F 00 .faraddr $00009FE7 +001F71r 1 E8 9F 00 .faraddr $00009FE8 +001F74r 1 E9 9F 00 .faraddr $00009FE9 +001F77r 1 EA 9F 00 .faraddr $00009FEA +001F7Ar 1 EB 9F 00 .faraddr $00009FEB +001F7Dr 1 EC 9F 00 .faraddr $00009FEC +001F80r 1 ED 9F 00 .faraddr $00009FED +001F83r 1 EE 9F 00 .faraddr $00009FEE +001F86r 1 EF 9F 00 .faraddr $00009FEF +001F89r 1 F0 9F 00 .faraddr $00009FF0 +001F8Cr 1 F1 9F 00 .faraddr $00009FF1 +001F8Fr 1 F2 9F 00 .faraddr $00009FF2 +001F92r 1 F3 9F 00 .faraddr $00009FF3 +001F95r 1 F4 9F 00 .faraddr $00009FF4 +001F98r 1 F5 9F 00 .faraddr $00009FF5 +001F9Br 1 F6 9F 00 .faraddr $00009FF6 +001F9Er 1 F7 9F 00 .faraddr $00009FF7 +001FA1r 1 F8 9F 00 .faraddr $00009FF8 +001FA4r 1 F9 9F 00 .faraddr $00009FF9 +001FA7r 1 FA 9F 00 .faraddr $00009FFA +001FAAr 1 FB 9F 00 .faraddr $00009FFB +001FADr 1 FC 9F 00 .faraddr $00009FFC +001FB0r 1 FD 9F 00 .faraddr $00009FFD +001FB3r 1 FE 9F 00 .faraddr $00009FFE +001FB6r 1 FF 9F 00 .faraddr $00009FFF +001FB9r 1 00 A0 00 .faraddr $0000A000 +001FBCr 1 01 A0 00 .faraddr $0000A001 +001FBFr 1 02 A0 00 .faraddr $0000A002 +001FC2r 1 03 A0 00 .faraddr $0000A003 +001FC5r 1 04 A0 00 .faraddr $0000A004 +001FC8r 1 05 A0 00 .faraddr $0000A005 +001FCBr 1 06 A0 00 .faraddr $0000A006 +001FCEr 1 07 A0 00 .faraddr $0000A007 +001FD1r 1 08 A0 00 .faraddr $0000A008 +001FD4r 1 09 A0 00 .faraddr $0000A009 +001FD7r 1 0A A0 00 .faraddr $0000A00A +001FDAr 1 0B A0 00 .faraddr $0000A00B +001FDDr 1 0C A0 00 .faraddr $0000A00C +001FE0r 1 0D A0 00 .faraddr $0000A00D +001FE3r 1 0E A0 00 .faraddr $0000A00E +001FE6r 1 0F A0 00 .faraddr $0000A00F +001FE9r 1 E1 AF 00 .faraddr $0000AFE1 +001FECr 1 E2 AF 00 .faraddr $0000AFE2 +001FEFr 1 E3 AF 00 .faraddr $0000AFE3 +001FF2r 1 E4 AF 00 .faraddr $0000AFE4 +001FF5r 1 E5 AF 00 .faraddr $0000AFE5 +001FF8r 1 E6 AF 00 .faraddr $0000AFE6 +001FFBr 1 E7 AF 00 .faraddr $0000AFE7 +001FFEr 1 E8 AF 00 .faraddr $0000AFE8 +002001r 1 E9 AF 00 .faraddr $0000AFE9 +002004r 1 EA AF 00 .faraddr $0000AFEA +002007r 1 EB AF 00 .faraddr $0000AFEB +00200Ar 1 EC AF 00 .faraddr $0000AFEC +00200Dr 1 ED AF 00 .faraddr $0000AFED +002010r 1 EE AF 00 .faraddr $0000AFEE +002013r 1 EF AF 00 .faraddr $0000AFEF +002016r 1 F0 AF 00 .faraddr $0000AFF0 +002019r 1 F1 AF 00 .faraddr $0000AFF1 +00201Cr 1 F2 AF 00 .faraddr $0000AFF2 +00201Fr 1 F3 AF 00 .faraddr $0000AFF3 +002022r 1 F4 AF 00 .faraddr $0000AFF4 +002025r 1 F5 AF 00 .faraddr $0000AFF5 +002028r 1 F6 AF 00 .faraddr $0000AFF6 +00202Br 1 F7 AF 00 .faraddr $0000AFF7 +00202Er 1 F8 AF 00 .faraddr $0000AFF8 +002031r 1 F9 AF 00 .faraddr $0000AFF9 +002034r 1 FA AF 00 .faraddr $0000AFFA +002037r 1 FB AF 00 .faraddr $0000AFFB +00203Ar 1 FC AF 00 .faraddr $0000AFFC +00203Dr 1 FD AF 00 .faraddr $0000AFFD +002040r 1 FE AF 00 .faraddr $0000AFFE +002043r 1 FF AF 00 .faraddr $0000AFFF +002046r 1 00 B0 00 .faraddr $0000B000 +002049r 1 01 B0 00 .faraddr $0000B001 +00204Cr 1 02 B0 00 .faraddr $0000B002 +00204Fr 1 03 B0 00 .faraddr $0000B003 +002052r 1 04 B0 00 .faraddr $0000B004 +002055r 1 05 B0 00 .faraddr $0000B005 +002058r 1 06 B0 00 .faraddr $0000B006 +00205Br 1 07 B0 00 .faraddr $0000B007 +00205Er 1 08 B0 00 .faraddr $0000B008 +002061r 1 09 B0 00 .faraddr $0000B009 +002064r 1 0A B0 00 .faraddr $0000B00A +002067r 1 0B B0 00 .faraddr $0000B00B +00206Ar 1 0C B0 00 .faraddr $0000B00C +00206Dr 1 0D B0 00 .faraddr $0000B00D +002070r 1 0E B0 00 .faraddr $0000B00E +002073r 1 0F B0 00 .faraddr $0000B00F +002076r 1 E1 FF 00 .faraddr $0000FFE1 +002079r 1 E2 FF 00 .faraddr $0000FFE2 +00207Cr 1 E3 FF 00 .faraddr $0000FFE3 +00207Fr 1 E4 FF 00 .faraddr $0000FFE4 +002082r 1 E5 FF 00 .faraddr $0000FFE5 +002085r 1 E6 FF 00 .faraddr $0000FFE6 +002088r 1 E7 FF 00 .faraddr $0000FFE7 +00208Br 1 E8 FF 00 .faraddr $0000FFE8 +00208Er 1 E9 FF 00 .faraddr $0000FFE9 +002091r 1 EA FF 00 .faraddr $0000FFEA +002094r 1 EB FF 00 .faraddr $0000FFEB +002097r 1 EC FF 00 .faraddr $0000FFEC +00209Ar 1 ED FF 00 .faraddr $0000FFED +00209Dr 1 EE FF 00 .faraddr $0000FFEE +0020A0r 1 EF FF 00 .faraddr $0000FFEF +0020A3r 1 F0 FF 00 .faraddr $0000FFF0 +0020A6r 1 F1 FF 00 .faraddr $0000FFF1 +0020A9r 1 F2 FF 00 .faraddr $0000FFF2 +0020ACr 1 F3 FF 00 .faraddr $0000FFF3 +0020AFr 1 F4 FF 00 .faraddr $0000FFF4 +0020B2r 1 F5 FF 00 .faraddr $0000FFF5 +0020B5r 1 F6 FF 00 .faraddr $0000FFF6 +0020B8r 1 F7 FF 00 .faraddr $0000FFF7 +0020BBr 1 F8 FF 00 .faraddr $0000FFF8 +0020BEr 1 F9 FF 00 .faraddr $0000FFF9 +0020C1r 1 FA FF 00 .faraddr $0000FFFA +0020C4r 1 FB FF 00 .faraddr $0000FFFB +0020C7r 1 FC FF 00 .faraddr $0000FFFC +0020CAr 1 FD FF 00 .faraddr $0000FFFD +0020CDr 1 FE FF 00 .faraddr $0000FFFE +0020D0r 1 FF FF 00 .faraddr $0000FFFF +0020D3r 1 00 00 01 .faraddr $00010000 +0020D6r 1 01 00 01 .faraddr $00010001 +0020D9r 1 02 00 01 .faraddr $00010002 +0020DCr 1 03 00 01 .faraddr $00010003 +0020DFr 1 04 00 01 .faraddr $00010004 +0020E2r 1 05 00 01 .faraddr $00010005 +0020E5r 1 06 00 01 .faraddr $00010006 +0020E8r 1 07 00 01 .faraddr $00010007 +0020EBr 1 08 00 01 .faraddr $00010008 +0020EEr 1 09 00 01 .faraddr $00010009 +0020F1r 1 0A 00 01 .faraddr $0001000A +0020F4r 1 0B 00 01 .faraddr $0001000B +0020F7r 1 0C 00 01 .faraddr $0001000C +0020FAr 1 0D 00 01 .faraddr $0001000D +0020FDr 1 0E 00 01 .faraddr $0001000E +002100r 1 0F 00 01 .faraddr $0001000F +002103r 1 E1 FF 10 .faraddr $0010FFE1 +002106r 1 E2 FF 10 .faraddr $0010FFE2 +002109r 1 E3 FF 10 .faraddr $0010FFE3 +00210Cr 1 E4 FF 10 .faraddr $0010FFE4 +00210Fr 1 E5 FF 10 .faraddr $0010FFE5 +002112r 1 E6 FF 10 .faraddr $0010FFE6 +002115r 1 E7 FF 10 .faraddr $0010FFE7 +002118r 1 E8 FF 10 .faraddr $0010FFE8 +00211Br 1 E9 FF 10 .faraddr $0010FFE9 +00211Er 1 EA FF 10 .faraddr $0010FFEA +002121r 1 EB FF 10 .faraddr $0010FFEB +002124r 1 EC FF 10 .faraddr $0010FFEC +002127r 1 ED FF 10 .faraddr $0010FFED +00212Ar 1 EE FF 10 .faraddr $0010FFEE +00212Dr 1 EF FF 10 .faraddr $0010FFEF +002130r 1 F0 FF 10 .faraddr $0010FFF0 +002133r 1 F1 FF 10 .faraddr $0010FFF1 +002136r 1 F2 FF 10 .faraddr $0010FFF2 +002139r 1 F3 FF 10 .faraddr $0010FFF3 +00213Cr 1 F4 FF 10 .faraddr $0010FFF4 +00213Fr 1 F5 FF 10 .faraddr $0010FFF5 +002142r 1 F6 FF 10 .faraddr $0010FFF6 +002145r 1 F7 FF 10 .faraddr $0010FFF7 +002148r 1 F8 FF 10 .faraddr $0010FFF8 +00214Br 1 F9 FF 10 .faraddr $0010FFF9 +00214Er 1 FA FF 10 .faraddr $0010FFFA +002151r 1 FB FF 10 .faraddr $0010FFFB +002154r 1 FC FF 10 .faraddr $0010FFFC +002157r 1 FD FF 10 .faraddr $0010FFFD +00215Ar 1 FE FF 10 .faraddr $0010FFFE +00215Dr 1 FF FF 10 .faraddr $0010FFFF +002160r 1 00 00 11 .faraddr $00110000 +002163r 1 01 00 11 .faraddr $00110001 +002166r 1 02 00 11 .faraddr $00110002 +002169r 1 03 00 11 .faraddr $00110003 +00216Cr 1 04 00 11 .faraddr $00110004 +00216Fr 1 05 00 11 .faraddr $00110005 +002172r 1 06 00 11 .faraddr $00110006 +002175r 1 07 00 11 .faraddr $00110007 +002178r 1 08 00 11 .faraddr $00110008 +00217Br 1 09 00 11 .faraddr $00110009 +00217Er 1 0A 00 11 .faraddr $0011000A +002181r 1 0B 00 11 .faraddr $0011000B +002184r 1 0C 00 11 .faraddr $0011000C +002187r 1 0D 00 11 .faraddr $0011000D +00218Ar 1 0E 00 11 .faraddr $0011000E +00218Dr 1 0F 00 11 .faraddr $0011000F +002190r 1 E1 FF 20 .faraddr $0020FFE1 +002193r 1 E2 FF 20 .faraddr $0020FFE2 +002196r 1 E3 FF 20 .faraddr $0020FFE3 +002199r 1 E4 FF 20 .faraddr $0020FFE4 +00219Cr 1 E5 FF 20 .faraddr $0020FFE5 +00219Fr 1 E6 FF 20 .faraddr $0020FFE6 +0021A2r 1 E7 FF 20 .faraddr $0020FFE7 +0021A5r 1 E8 FF 20 .faraddr $0020FFE8 +0021A8r 1 E9 FF 20 .faraddr $0020FFE9 +0021ABr 1 EA FF 20 .faraddr $0020FFEA +0021AEr 1 EB FF 20 .faraddr $0020FFEB +0021B1r 1 EC FF 20 .faraddr $0020FFEC +0021B4r 1 ED FF 20 .faraddr $0020FFED +0021B7r 1 EE FF 20 .faraddr $0020FFEE +0021BAr 1 EF FF 20 .faraddr $0020FFEF +0021BDr 1 F0 FF 20 .faraddr $0020FFF0 +0021C0r 1 F1 FF 20 .faraddr $0020FFF1 +0021C3r 1 F2 FF 20 .faraddr $0020FFF2 +0021C6r 1 F3 FF 20 .faraddr $0020FFF3 +0021C9r 1 F4 FF 20 .faraddr $0020FFF4 +0021CCr 1 F5 FF 20 .faraddr $0020FFF5 +0021CFr 1 F6 FF 20 .faraddr $0020FFF6 +0021D2r 1 F7 FF 20 .faraddr $0020FFF7 +0021D5r 1 F8 FF 20 .faraddr $0020FFF8 +0021D8r 1 F9 FF 20 .faraddr $0020FFF9 +0021DBr 1 FA FF 20 .faraddr $0020FFFA +0021DEr 1 FB FF 20 .faraddr $0020FFFB +0021E1r 1 FC FF 20 .faraddr $0020FFFC +0021E4r 1 FD FF 20 .faraddr $0020FFFD +0021E7r 1 FE FF 20 .faraddr $0020FFFE +0021EAr 1 FF FF 20 .faraddr $0020FFFF +0021EDr 1 00 00 21 .faraddr $00210000 +0021F0r 1 01 00 21 .faraddr $00210001 +0021F3r 1 02 00 21 .faraddr $00210002 +0021F6r 1 03 00 21 .faraddr $00210003 +0021F9r 1 04 00 21 .faraddr $00210004 +0021FCr 1 05 00 21 .faraddr $00210005 +0021FFr 1 06 00 21 .faraddr $00210006 +002202r 1 07 00 21 .faraddr $00210007 +002205r 1 08 00 21 .faraddr $00210008 +002208r 1 09 00 21 .faraddr $00210009 +00220Br 1 0A 00 21 .faraddr $0021000A +00220Er 1 0B 00 21 .faraddr $0021000B +002211r 1 0C 00 21 .faraddr $0021000C +002214r 1 0D 00 21 .faraddr $0021000D +002217r 1 0E 00 21 .faraddr $0021000E +00221Ar 1 0F 00 21 .faraddr $0021000F +00221Dr 1 E1 FF 7F .faraddr $007FFFE1 +002220r 1 E2 FF 7F .faraddr $007FFFE2 +002223r 1 E3 FF 7F .faraddr $007FFFE3 +002226r 1 E4 FF 7F .faraddr $007FFFE4 +002229r 1 E5 FF 7F .faraddr $007FFFE5 +00222Cr 1 E6 FF 7F .faraddr $007FFFE6 +00222Fr 1 E7 FF 7F .faraddr $007FFFE7 +002232r 1 E8 FF 7F .faraddr $007FFFE8 +002235r 1 E9 FF 7F .faraddr $007FFFE9 +002238r 1 EA FF 7F .faraddr $007FFFEA +00223Br 1 EB FF 7F .faraddr $007FFFEB +00223Er 1 EC FF 7F .faraddr $007FFFEC +002241r 1 ED FF 7F .faraddr $007FFFED +002244r 1 EE FF 7F .faraddr $007FFFEE +002247r 1 EF FF 7F .faraddr $007FFFEF +00224Ar 1 F0 FF 7F .faraddr $007FFFF0 +00224Dr 1 F1 FF 7F .faraddr $007FFFF1 +002250r 1 F2 FF 7F .faraddr $007FFFF2 +002253r 1 F3 FF 7F .faraddr $007FFFF3 +002256r 1 F4 FF 7F .faraddr $007FFFF4 +002259r 1 F5 FF 7F .faraddr $007FFFF5 +00225Cr 1 F6 FF 7F .faraddr $007FFFF6 +00225Fr 1 F7 FF 7F .faraddr $007FFFF7 +002262r 1 F8 FF 7F .faraddr $007FFFF8 +002265r 1 F9 FF 7F .faraddr $007FFFF9 +002268r 1 FA FF 7F .faraddr $007FFFFA +00226Br 1 FB FF 7F .faraddr $007FFFFB +00226Er 1 FC FF 7F .faraddr $007FFFFC +002271r 1 FD FF 7F .faraddr $007FFFFD +002274r 1 FE FF 7F .faraddr $007FFFFE +002277r 1 FF FF 7F .faraddr $007FFFFF +00227Ar 1 00 00 80 .faraddr $00800000 +00227Dr 1 01 00 80 .faraddr $00800001 +002280r 1 02 00 80 .faraddr $00800002 +002283r 1 03 00 80 .faraddr $00800003 +002286r 1 04 00 80 .faraddr $00800004 +002289r 1 05 00 80 .faraddr $00800005 +00228Cr 1 06 00 80 .faraddr $00800006 +00228Fr 1 07 00 80 .faraddr $00800007 +002292r 1 08 00 80 .faraddr $00800008 +002295r 1 09 00 80 .faraddr $00800009 +002298r 1 0A 00 80 .faraddr $0080000A +00229Br 1 0B 00 80 .faraddr $0080000B +00229Er 1 0C 00 80 .faraddr $0080000C +0022A1r 1 0D 00 80 .faraddr $0080000D +0022A4r 1 0E 00 80 .faraddr $0080000E +0022A7r 1 0F 00 80 .faraddr $0080000F +0022AAr 1 E1 FF 9F .faraddr $009FFFE1 +0022ADr 1 E2 FF 9F .faraddr $009FFFE2 +0022B0r 1 E3 FF 9F .faraddr $009FFFE3 +0022B3r 1 E4 FF 9F .faraddr $009FFFE4 +0022B6r 1 E5 FF 9F .faraddr $009FFFE5 +0022B9r 1 E6 FF 9F .faraddr $009FFFE6 +0022BCr 1 E7 FF 9F .faraddr $009FFFE7 +0022BFr 1 E8 FF 9F .faraddr $009FFFE8 +0022C2r 1 E9 FF 9F .faraddr $009FFFE9 +0022C5r 1 EA FF 9F .faraddr $009FFFEA +0022C8r 1 EB FF 9F .faraddr $009FFFEB +0022CBr 1 EC FF 9F .faraddr $009FFFEC +0022CEr 1 ED FF 9F .faraddr $009FFFED +0022D1r 1 EE FF 9F .faraddr $009FFFEE +0022D4r 1 EF FF 9F .faraddr $009FFFEF +0022D7r 1 F0 FF 9F .faraddr $009FFFF0 +0022DAr 1 F1 FF 9F .faraddr $009FFFF1 +0022DDr 1 F2 FF 9F .faraddr $009FFFF2 +0022E0r 1 F3 FF 9F .faraddr $009FFFF3 +0022E3r 1 F4 FF 9F .faraddr $009FFFF4 +0022E6r 1 F5 FF 9F .faraddr $009FFFF5 +0022E9r 1 F6 FF 9F .faraddr $009FFFF6 +0022ECr 1 F7 FF 9F .faraddr $009FFFF7 +0022EFr 1 F8 FF 9F .faraddr $009FFFF8 +0022F2r 1 F9 FF 9F .faraddr $009FFFF9 +0022F5r 1 FA FF 9F .faraddr $009FFFFA +0022F8r 1 FB FF 9F .faraddr $009FFFFB +0022FBr 1 FC FF 9F .faraddr $009FFFFC +0022FEr 1 FD FF 9F .faraddr $009FFFFD +002301r 1 FE FF 9F .faraddr $009FFFFE +002304r 1 FF FF 9F .faraddr $009FFFFF +002307r 1 00 00 A0 .faraddr $00A00000 +00230Ar 1 01 00 A0 .faraddr $00A00001 +00230Dr 1 02 00 A0 .faraddr $00A00002 +002310r 1 03 00 A0 .faraddr $00A00003 +002313r 1 04 00 A0 .faraddr $00A00004 +002316r 1 05 00 A0 .faraddr $00A00005 +002319r 1 06 00 A0 .faraddr $00A00006 +00231Cr 1 07 00 A0 .faraddr $00A00007 +00231Fr 1 08 00 A0 .faraddr $00A00008 +002322r 1 09 00 A0 .faraddr $00A00009 +002325r 1 0A 00 A0 .faraddr $00A0000A +002328r 1 0B 00 A0 .faraddr $00A0000B +00232Br 1 0C 00 A0 .faraddr $00A0000C +00232Er 1 0D 00 A0 .faraddr $00A0000D +002331r 1 0E 00 A0 .faraddr $00A0000E +002334r 1 0F 00 A0 .faraddr $00A0000F +002337r 1 E1 FF FF .faraddr $00FFFFE1 +00233Ar 1 E2 FF FF .faraddr $00FFFFE2 +00233Dr 1 E3 FF FF .faraddr $00FFFFE3 +002340r 1 E4 FF FF .faraddr $00FFFFE4 +002343r 1 E5 FF FF .faraddr $00FFFFE5 +002346r 1 E6 FF FF .faraddr $00FFFFE6 +002349r 1 E7 FF FF .faraddr $00FFFFE7 +00234Cr 1 E8 FF FF .faraddr $00FFFFE8 +00234Fr 1 E9 FF FF .faraddr $00FFFFE9 +002352r 1 EA FF FF .faraddr $00FFFFEA +002355r 1 EB FF FF .faraddr $00FFFFEB +002358r 1 EC FF FF .faraddr $00FFFFEC +00235Br 1 ED FF FF .faraddr $00FFFFED +00235Er 1 EE FF FF .faraddr $00FFFFEE +002361r 1 EF FF FF .faraddr $00FFFFEF +002364r 1 F0 FF FF .faraddr $00FFFFF0 +002367r 1 F1 FF FF .faraddr $00FFFFF1 +00236Ar 1 F2 FF FF .faraddr $00FFFFF2 +00236Dr 1 F3 FF FF .faraddr $00FFFFF3 +002370r 1 F4 FF FF .faraddr $00FFFFF4 +002373r 1 F5 FF FF .faraddr $00FFFFF5 +002376r 1 F6 FF FF .faraddr $00FFFFF6 +002379r 1 F7 FF FF .faraddr $00FFFFF7 +00237Cr 1 F8 FF FF .faraddr $00FFFFF8 +00237Fr 1 F9 FF FF .faraddr $00FFFFF9 +002382r 1 FA FF FF .faraddr $00FFFFFA +002385r 1 FB FF FF .faraddr $00FFFFFB +002388r 1 FC FF FF .faraddr $00FFFFFC +00238Br 1 FD FF FF .faraddr $00FFFFFD +00238Er 1 FE FF FF .faraddr $00FFFFFE +002391r 1 FF FF FF .faraddr $00FFFFFF 002394r 1 -002394r 1 ; alternative hex values -002394r 1 00 00 00 .faraddr 0h -002397r 1 01 00 00 .faraddr 1h -00239Ar 1 02 00 00 .faraddr 2h -00239Dr 1 03 00 00 .faraddr 3h -0023A0r 1 04 00 00 .faraddr 4h -0023A3r 1 05 00 00 .faraddr 5h -0023A6r 1 06 00 00 .faraddr 6h -0023A9r 1 07 00 00 .faraddr 7h -0023ACr 1 08 00 00 .faraddr 8h -0023AFr 1 09 00 00 .faraddr 9h -0023B2r 1 0A 00 00 .faraddr 0ah -0023B5r 1 0B 00 00 .faraddr 0bh -0023B8r 1 0C 00 00 .faraddr 0ch -0023BBr 1 0D 00 00 .faraddr 0dh -0023BEr 1 0E 00 00 .faraddr 0eh -0023C1r 1 0F 00 00 .faraddr 0fh -0023C4r 1 10 00 00 .faraddr 10h -0023C7r 1 11 00 00 .faraddr 11h -0023CAr 1 12 00 00 .faraddr 12h -0023CDr 1 13 00 00 .faraddr 13h -0023D0r 1 70 00 00 .faraddr 70h -0023D3r 1 71 00 00 .faraddr 71h -0023D6r 1 72 00 00 .faraddr 72h -0023D9r 1 73 00 00 .faraddr 73h -0023DCr 1 74 00 00 .faraddr 74h -0023DFr 1 75 00 00 .faraddr 75h -0023E2r 1 76 00 00 .faraddr 76h -0023E5r 1 77 00 00 .faraddr 77h -0023E8r 1 78 00 00 .faraddr 78h -0023EBr 1 79 00 00 .faraddr 79h -0023EEr 1 7A 00 00 .faraddr 7ah -0023F1r 1 7B 00 00 .faraddr 7bh -0023F4r 1 7C 00 00 .faraddr 7ch -0023F7r 1 7D 00 00 .faraddr 7dh -0023FAr 1 7E 00 00 .faraddr 7eh -0023FDr 1 7F 00 00 .faraddr 7fh -002400r 1 80 00 00 .faraddr 80h -002403r 1 81 00 00 .faraddr 81h -002406r 1 82 00 00 .faraddr 82h -002409r 1 83 00 00 .faraddr 83h -00240Cr 1 84 00 00 .faraddr 84h -00240Fr 1 85 00 00 .faraddr 85h -002412r 1 86 00 00 .faraddr 86h -002415r 1 F0 00 00 .faraddr 0f0h -002418r 1 F1 00 00 .faraddr 0f1h -00241Br 1 F2 00 00 .faraddr 0f2h -00241Er 1 F3 00 00 .faraddr 0f3h -002421r 1 F4 00 00 .faraddr 0f4h -002424r 1 F5 00 00 .faraddr 0f5h -002427r 1 F6 00 00 .faraddr 0f6h -00242Ar 1 F7 00 00 .faraddr 0f7h -00242Dr 1 F8 00 00 .faraddr 0f8h -002430r 1 F9 00 00 .faraddr 0f9h -002433r 1 FA 00 00 .faraddr 0fah -002436r 1 FB 00 00 .faraddr 0fbh -002439r 1 FC 00 00 .faraddr 0fch -00243Cr 1 FD 00 00 .faraddr 0fdh -00243Fr 1 FE 00 00 .faraddr 0feh -002442r 1 FF 00 00 .faraddr 0ffh -002445r 1 00 01 00 .faraddr 100h -002448r 1 01 01 00 .faraddr 101h -00244Br 1 02 01 00 .faraddr 102h -00244Er 1 03 01 00 .faraddr 103h -002451r 1 D2 0F 00 .faraddr 0fd2h -002454r 1 D3 0F 00 .faraddr 0fd3h -002457r 1 D4 0F 00 .faraddr 0fd4h -00245Ar 1 D5 0F 00 .faraddr 0fd5h -00245Dr 1 D6 0F 00 .faraddr 0fd6h -002460r 1 D7 0F 00 .faraddr 0fd7h -002463r 1 D8 0F 00 .faraddr 0fd8h -002466r 1 D9 0F 00 .faraddr 0fd9h -002469r 1 DA 0F 00 .faraddr 0fdah -00246Cr 1 DB 0F 00 .faraddr 0fdbh -00246Fr 1 DC 0F 00 .faraddr 0fdch -002472r 1 DD 0F 00 .faraddr 0fddh -002475r 1 DE 0F 00 .faraddr 0fdeh -002478r 1 DF 0F 00 .faraddr 0fdfh -00247Br 1 E0 0F 00 .faraddr 0fe0h -00247Er 1 E1 0F 00 .faraddr 0fe1h -002481r 1 E2 0F 00 .faraddr 0fe2h -002484r 1 E3 0F 00 .faraddr 0fe3h -002487r 1 E4 0F 00 .faraddr 0fe4h -00248Ar 1 E5 0F 00 .faraddr 0fe5h -00248Dr 1 E6 0F 00 .faraddr 0fe6h -002490r 1 E7 0F 00 .faraddr 0fe7h -002493r 1 E8 0F 00 .faraddr 0fe8h -002496r 1 E9 0F 00 .faraddr 0fe9h -002499r 1 EA 0F 00 .faraddr 0feah -00249Cr 1 EB 0F 00 .faraddr 0febh -00249Fr 1 EC 0F 00 .faraddr 0fech -0024A2r 1 ED 0F 00 .faraddr 0fedh -0024A5r 1 EE 0F 00 .faraddr 0feeh -0024A8r 1 EF 0F 00 .faraddr 0fefh -0024ABr 1 F0 0F 00 .faraddr 0ff0h -0024AEr 1 F1 0F 00 .faraddr 0ff1h -0024B1r 1 F2 0F 00 .faraddr 0ff2h -0024B4r 1 F3 0F 00 .faraddr 0ff3h -0024B7r 1 F4 0F 00 .faraddr 0ff4h -0024BAr 1 F5 0F 00 .faraddr 0ff5h -0024BDr 1 F6 0F 00 .faraddr 0ff6h -0024C0r 1 F7 0F 00 .faraddr 0ff7h -0024C3r 1 F8 0F 00 .faraddr 0ff8h -0024C6r 1 F9 0F 00 .faraddr 0ff9h -0024C9r 1 FA 0F 00 .faraddr 0ffah -0024CCr 1 FB 0F 00 .faraddr 0ffbh -0024CFr 1 FC 0F 00 .faraddr 0ffch -0024D2r 1 FD 0F 00 .faraddr 0ffdh -0024D5r 1 FE 0F 00 .faraddr 0ffeh -0024D8r 1 FF 0F 00 .faraddr 0fffh -0024DBr 1 00 10 00 .faraddr 1000h -0024DEr 1 01 10 00 .faraddr 1001h -0024E1r 1 02 10 00 .faraddr 1002h -0024E4r 1 03 10 00 .faraddr 1003h -0024E7r 1 04 10 00 .faraddr 1004h -0024EAr 1 05 10 00 .faraddr 1005h -0024EDr 1 06 10 00 .faraddr 1006h -0024F0r 1 07 10 00 .faraddr 1007h -0024F3r 1 08 10 00 .faraddr 1008h -0024F6r 1 F0 7F 00 .faraddr 7ff0h -0024F9r 1 F1 7F 00 .faraddr 7ff1h -0024FCr 1 F2 7F 00 .faraddr 7ff2h -0024FFr 1 F3 7F 00 .faraddr 7ff3h -002502r 1 F4 7F 00 .faraddr 7ff4h -002505r 1 F5 7F 00 .faraddr 7ff5h -002508r 1 F6 7F 00 .faraddr 7ff6h -00250Br 1 F7 7F 00 .faraddr 7ff7h -00250Er 1 F8 7F 00 .faraddr 7ff8h -002511r 1 F9 7F 00 .faraddr 7ff9h -002514r 1 FA 7F 00 .faraddr 7ffah -002517r 1 FB 7F 00 .faraddr 7ffbh -00251Ar 1 FC 7F 00 .faraddr 7ffch -00251Dr 1 FD 7F 00 .faraddr 7ffdh -002520r 1 FE 7F 00 .faraddr 7ffeh -002523r 1 FF 7F 00 .faraddr 7fffh -002526r 1 00 80 00 .faraddr 8000h -002529r 1 01 80 00 .faraddr 8001h -00252Cr 1 02 80 00 .faraddr 8002h -00252Fr 1 03 80 00 .faraddr 8003h -002532r 1 04 80 00 .faraddr 8004h -002535r 1 05 80 00 .faraddr 8005h -002538r 1 06 80 00 .faraddr 8006h -00253Br 1 07 80 00 .faraddr 8007h -00253Er 1 08 80 00 .faraddr 8008h -002541r 1 09 80 00 .faraddr 8009h -002544r 1 0A 80 00 .faraddr 800ah -002547r 1 0B 80 00 .faraddr 800bh -00254Ar 1 E1 9F 00 .faraddr 9fe1h -00254Dr 1 E2 9F 00 .faraddr 9fe2h -002550r 1 E3 9F 00 .faraddr 9fe3h -002553r 1 E4 9F 00 .faraddr 9fe4h -002556r 1 E5 9F 00 .faraddr 9fe5h -002559r 1 E6 9F 00 .faraddr 9fe6h -00255Cr 1 E7 9F 00 .faraddr 9fe7h -00255Fr 1 E8 9F 00 .faraddr 9fe8h -002562r 1 E9 9F 00 .faraddr 9fe9h -002565r 1 EA 9F 00 .faraddr 9feah -002568r 1 EB 9F 00 .faraddr 9febh -00256Br 1 EC 9F 00 .faraddr 9fech -00256Er 1 ED 9F 00 .faraddr 9fedh -002571r 1 EE 9F 00 .faraddr 9feeh -002574r 1 EF 9F 00 .faraddr 9fefh -002577r 1 F0 9F 00 .faraddr 9ff0h -00257Ar 1 F1 9F 00 .faraddr 9ff1h -00257Dr 1 F2 9F 00 .faraddr 9ff2h -002580r 1 F3 9F 00 .faraddr 9ff3h -002583r 1 F4 9F 00 .faraddr 9ff4h -002586r 1 F5 9F 00 .faraddr 9ff5h -002589r 1 F6 9F 00 .faraddr 9ff6h -00258Cr 1 F7 9F 00 .faraddr 9ff7h -00258Fr 1 F8 9F 00 .faraddr 9ff8h -002592r 1 F9 9F 00 .faraddr 9ff9h -002595r 1 FA 9F 00 .faraddr 9ffah -002598r 1 FB 9F 00 .faraddr 9ffbh -00259Br 1 FC 9F 00 .faraddr 9ffch -00259Er 1 FD 9F 00 .faraddr 9ffdh -0025A1r 1 FE 9F 00 .faraddr 9ffeh -0025A4r 1 FF 9F 00 .faraddr 9fffh -0025A7r 1 00 A0 00 .faraddr 0a000h -0025AAr 1 01 A0 00 .faraddr 0a001h -0025ADr 1 02 A0 00 .faraddr 0a002h -0025B0r 1 03 A0 00 .faraddr 0a003h -0025B3r 1 04 A0 00 .faraddr 0a004h -0025B6r 1 05 A0 00 .faraddr 0a005h -0025B9r 1 06 A0 00 .faraddr 0a006h -0025BCr 1 07 A0 00 .faraddr 0a007h -0025BFr 1 08 A0 00 .faraddr 0a008h -0025C2r 1 09 A0 00 .faraddr 0a009h -0025C5r 1 0A A0 00 .faraddr 0a00ah -0025C8r 1 0B A0 00 .faraddr 0a00bh -0025CBr 1 0C A0 00 .faraddr 0a00ch -0025CEr 1 0D A0 00 .faraddr 0a00dh -0025D1r 1 0E A0 00 .faraddr 0a00eh -0025D4r 1 0F A0 00 .faraddr 0a00fh -0025D7r 1 E1 AF 00 .faraddr 0afe1h -0025DAr 1 E2 AF 00 .faraddr 0afe2h -0025DDr 1 E3 AF 00 .faraddr 0afe3h -0025E0r 1 E4 AF 00 .faraddr 0afe4h -0025E3r 1 E5 AF 00 .faraddr 0afe5h -0025E6r 1 E6 AF 00 .faraddr 0afe6h -0025E9r 1 E7 AF 00 .faraddr 0afe7h -0025ECr 1 E8 AF 00 .faraddr 0afe8h -0025EFr 1 E9 AF 00 .faraddr 0afe9h -0025F2r 1 EA AF 00 .faraddr 0afeah -0025F5r 1 EB AF 00 .faraddr 0afebh -0025F8r 1 EC AF 00 .faraddr 0afech -0025FBr 1 ED AF 00 .faraddr 0afedh -0025FEr 1 EE AF 00 .faraddr 0afeeh -002601r 1 EF AF 00 .faraddr 0afefh -002604r 1 F0 AF 00 .faraddr 0aff0h -002607r 1 F1 AF 00 .faraddr 0aff1h -00260Ar 1 F2 AF 00 .faraddr 0aff2h -00260Dr 1 F3 AF 00 .faraddr 0aff3h -002610r 1 F4 AF 00 .faraddr 0aff4h -002613r 1 F5 AF 00 .faraddr 0aff5h -002616r 1 F6 AF 00 .faraddr 0aff6h -002619r 1 F7 AF 00 .faraddr 0aff7h -00261Cr 1 F8 AF 00 .faraddr 0aff8h -00261Fr 1 F9 AF 00 .faraddr 0aff9h -002622r 1 FA AF 00 .faraddr 0affah -002625r 1 FB AF 00 .faraddr 0affbh -002628r 1 FC AF 00 .faraddr 0affch -00262Br 1 FD AF 00 .faraddr 0affdh -00262Er 1 FE AF 00 .faraddr 0affeh -002631r 1 FF AF 00 .faraddr 0afffh -002634r 1 00 B0 00 .faraddr 0b000h -002637r 1 01 B0 00 .faraddr 0b001h -00263Ar 1 02 B0 00 .faraddr 0b002h -00263Dr 1 03 B0 00 .faraddr 0b003h -002640r 1 04 B0 00 .faraddr 0b004h -002643r 1 05 B0 00 .faraddr 0b005h -002646r 1 06 B0 00 .faraddr 0b006h -002649r 1 07 B0 00 .faraddr 0b007h -00264Cr 1 08 B0 00 .faraddr 0b008h -00264Fr 1 09 B0 00 .faraddr 0b009h -002652r 1 0A B0 00 .faraddr 0b00ah -002655r 1 0B B0 00 .faraddr 0b00bh -002658r 1 0C B0 00 .faraddr 0b00ch -00265Br 1 0D B0 00 .faraddr 0b00dh -00265Er 1 0E B0 00 .faraddr 0b00eh -002661r 1 0F B0 00 .faraddr 0b00fh -002664r 1 E1 FF 00 .faraddr 0ffe1h -002667r 1 E2 FF 00 .faraddr 0ffe2h -00266Ar 1 E3 FF 00 .faraddr 0ffe3h -00266Dr 1 E4 FF 00 .faraddr 0ffe4h -002670r 1 E5 FF 00 .faraddr 0ffe5h -002673r 1 E6 FF 00 .faraddr 0ffe6h -002676r 1 E7 FF 00 .faraddr 0ffe7h -002679r 1 E8 FF 00 .faraddr 0ffe8h -00267Cr 1 E9 FF 00 .faraddr 0ffe9h -00267Fr 1 EA FF 00 .faraddr 0ffeah -002682r 1 EB FF 00 .faraddr 0ffebh -002685r 1 EC FF 00 .faraddr 0ffech -002688r 1 ED FF 00 .faraddr 0ffedh -00268Br 1 EE FF 00 .faraddr 0ffeeh -00268Er 1 EF FF 00 .faraddr 0ffefh -002691r 1 F0 FF 00 .faraddr 0fff0h -002694r 1 F1 FF 00 .faraddr 0fff1h -002697r 1 F2 FF 00 .faraddr 0fff2h -00269Ar 1 F3 FF 00 .faraddr 0fff3h -00269Dr 1 F4 FF 00 .faraddr 0fff4h -0026A0r 1 F5 FF 00 .faraddr 0fff5h -0026A3r 1 F6 FF 00 .faraddr 0fff6h -0026A6r 1 F7 FF 00 .faraddr 0fff7h -0026A9r 1 F8 FF 00 .faraddr 0fff8h -0026ACr 1 F9 FF 00 .faraddr 0fff9h -0026AFr 1 FA FF 00 .faraddr 0fffah -0026B2r 1 FB FF 00 .faraddr 0fffbh -0026B5r 1 FC FF 00 .faraddr 0fffch -0026B8r 1 FD FF 00 .faraddr 0fffdh -0026BBr 1 FE FF 00 .faraddr 0fffeh -0026BEr 1 FF FF 00 .faraddr 0ffffh -0026C1r 1 00 00 01 .faraddr 10000h -0026C4r 1 01 00 01 .faraddr 10001h -0026C7r 1 02 00 01 .faraddr 10002h -0026CAr 1 03 00 01 .faraddr 10003h -0026CDr 1 04 00 01 .faraddr 10004h -0026D0r 1 05 00 01 .faraddr 10005h -0026D3r 1 06 00 01 .faraddr 10006h -0026D6r 1 07 00 01 .faraddr 10007h -0026D9r 1 08 00 01 .faraddr 10008h -0026DCr 1 09 00 01 .faraddr 10009h -0026DFr 1 0A 00 01 .faraddr 1000ah -0026E2r 1 0B 00 01 .faraddr 1000bh -0026E5r 1 0C 00 01 .faraddr 1000ch -0026E8r 1 0D 00 01 .faraddr 1000dh -0026EBr 1 0E 00 01 .faraddr 1000eh -0026EEr 1 0F 00 01 .faraddr 1000fh -0026F1r 1 E1 FF 10 .faraddr 10ffe1h -0026F4r 1 E2 FF 10 .faraddr 10ffe2h -0026F7r 1 E3 FF 10 .faraddr 10ffe3h -0026FAr 1 E4 FF 10 .faraddr 10ffe4h -0026FDr 1 E5 FF 10 .faraddr 10ffe5h -002700r 1 E6 FF 10 .faraddr 10ffe6h -002703r 1 E7 FF 10 .faraddr 10ffe7h -002706r 1 E8 FF 10 .faraddr 10ffe8h -002709r 1 E9 FF 10 .faraddr 10ffe9h -00270Cr 1 EA FF 10 .faraddr 10ffeah -00270Fr 1 EB FF 10 .faraddr 10ffebh -002712r 1 EC FF 10 .faraddr 10ffech -002715r 1 ED FF 10 .faraddr 10ffedh -002718r 1 EE FF 10 .faraddr 10ffeeh -00271Br 1 EF FF 10 .faraddr 10ffefh -00271Er 1 F0 FF 10 .faraddr 10fff0h -002721r 1 F1 FF 10 .faraddr 10fff1h -002724r 1 F2 FF 10 .faraddr 10fff2h -002727r 1 F3 FF 10 .faraddr 10fff3h -00272Ar 1 F4 FF 10 .faraddr 10fff4h -00272Dr 1 F5 FF 10 .faraddr 10fff5h -002730r 1 F6 FF 10 .faraddr 10fff6h -002733r 1 F7 FF 10 .faraddr 10fff7h -002736r 1 F8 FF 10 .faraddr 10fff8h -002739r 1 F9 FF 10 .faraddr 10fff9h -00273Cr 1 FA FF 10 .faraddr 10fffah -00273Fr 1 FB FF 10 .faraddr 10fffbh -002742r 1 FC FF 10 .faraddr 10fffch -002745r 1 FD FF 10 .faraddr 10fffdh -002748r 1 FE FF 10 .faraddr 10fffeh -00274Br 1 FF FF 10 .faraddr 10ffffh -00274Er 1 00 00 11 .faraddr 110000h -002751r 1 01 00 11 .faraddr 110001h -002754r 1 02 00 11 .faraddr 110002h -002757r 1 03 00 11 .faraddr 110003h -00275Ar 1 04 00 11 .faraddr 110004h -00275Dr 1 05 00 11 .faraddr 110005h -002760r 1 06 00 11 .faraddr 110006h -002763r 1 07 00 11 .faraddr 110007h -002766r 1 08 00 11 .faraddr 110008h -002769r 1 09 00 11 .faraddr 110009h -00276Cr 1 0A 00 11 .faraddr 11000ah -00276Fr 1 0B 00 11 .faraddr 11000bh -002772r 1 0C 00 11 .faraddr 11000ch -002775r 1 0D 00 11 .faraddr 11000dh -002778r 1 0E 00 11 .faraddr 11000eh -00277Br 1 0F 00 11 .faraddr 11000fh -00277Er 1 E1 FF 20 .faraddr 20ffe1h -002781r 1 E2 FF 20 .faraddr 20ffe2h -002784r 1 E3 FF 20 .faraddr 20ffe3h -002787r 1 E4 FF 20 .faraddr 20ffe4h -00278Ar 1 E5 FF 20 .faraddr 20ffe5h -00278Dr 1 E6 FF 20 .faraddr 20ffe6h -002790r 1 E7 FF 20 .faraddr 20ffe7h -002793r 1 E8 FF 20 .faraddr 20ffe8h -002796r 1 E9 FF 20 .faraddr 20ffe9h -002799r 1 EA FF 20 .faraddr 20ffeah -00279Cr 1 EB FF 20 .faraddr 20ffebh -00279Fr 1 EC FF 20 .faraddr 20ffech -0027A2r 1 ED FF 20 .faraddr 20ffedh -0027A5r 1 EE FF 20 .faraddr 20ffeeh -0027A8r 1 EF FF 20 .faraddr 20ffefh -0027ABr 1 F0 FF 20 .faraddr 20fff0h -0027AEr 1 F1 FF 20 .faraddr 20fff1h -0027B1r 1 F2 FF 20 .faraddr 20fff2h -0027B4r 1 F3 FF 20 .faraddr 20fff3h -0027B7r 1 F4 FF 20 .faraddr 20fff4h -0027BAr 1 F5 FF 20 .faraddr 20fff5h -0027BDr 1 F6 FF 20 .faraddr 20fff6h -0027C0r 1 F7 FF 20 .faraddr 20fff7h -0027C3r 1 F8 FF 20 .faraddr 20fff8h -0027C6r 1 F9 FF 20 .faraddr 20fff9h -0027C9r 1 FA FF 20 .faraddr 20fffah -0027CCr 1 FB FF 20 .faraddr 20fffbh -0027CFr 1 FC FF 20 .faraddr 20fffch -0027D2r 1 FD FF 20 .faraddr 20fffdh -0027D5r 1 FE FF 20 .faraddr 20fffeh -0027D8r 1 FF FF 20 .faraddr 20ffffh -0027DBr 1 00 00 21 .faraddr 210000h -0027DEr 1 01 00 21 .faraddr 210001h -0027E1r 1 02 00 21 .faraddr 210002h -0027E4r 1 03 00 21 .faraddr 210003h -0027E7r 1 04 00 21 .faraddr 210004h -0027EAr 1 05 00 21 .faraddr 210005h -0027EDr 1 06 00 21 .faraddr 210006h -0027F0r 1 07 00 21 .faraddr 210007h -0027F3r 1 08 00 21 .faraddr 210008h -0027F6r 1 09 00 21 .faraddr 210009h -0027F9r 1 0A 00 21 .faraddr 21000ah -0027FCr 1 0B 00 21 .faraddr 21000bh -0027FFr 1 0C 00 21 .faraddr 21000ch -002802r 1 0D 00 21 .faraddr 21000dh -002805r 1 0E 00 21 .faraddr 21000eh -002808r 1 0F 00 21 .faraddr 21000fh -00280Br 1 E1 FF 7F .faraddr 7fffe1h -00280Er 1 E2 FF 7F .faraddr 7fffe2h -002811r 1 E3 FF 7F .faraddr 7fffe3h -002814r 1 E4 FF 7F .faraddr 7fffe4h -002817r 1 E5 FF 7F .faraddr 7fffe5h -00281Ar 1 E6 FF 7F .faraddr 7fffe6h -00281Dr 1 E7 FF 7F .faraddr 7fffe7h -002820r 1 E8 FF 7F .faraddr 7fffe8h -002823r 1 E9 FF 7F .faraddr 7fffe9h -002826r 1 EA FF 7F .faraddr 7fffeah -002829r 1 EB FF 7F .faraddr 7fffebh -00282Cr 1 EC FF 7F .faraddr 7fffech -00282Fr 1 ED FF 7F .faraddr 7fffedh -002832r 1 EE FF 7F .faraddr 7fffeeh -002835r 1 EF FF 7F .faraddr 7fffefh -002838r 1 F0 FF 7F .faraddr 7ffff0h -00283Br 1 F1 FF 7F .faraddr 7ffff1h -00283Er 1 F2 FF 7F .faraddr 7ffff2h -002841r 1 F3 FF 7F .faraddr 7ffff3h -002844r 1 F4 FF 7F .faraddr 7ffff4h -002847r 1 F5 FF 7F .faraddr 7ffff5h -00284Ar 1 F6 FF 7F .faraddr 7ffff6h -00284Dr 1 F7 FF 7F .faraddr 7ffff7h -002850r 1 F8 FF 7F .faraddr 7ffff8h -002853r 1 F9 FF 7F .faraddr 7ffff9h -002856r 1 FA FF 7F .faraddr 7ffffah -002859r 1 FB FF 7F .faraddr 7ffffbh -00285Cr 1 FC FF 7F .faraddr 7ffffch -00285Fr 1 FD FF 7F .faraddr 7ffffdh -002862r 1 FE FF 7F .faraddr 7ffffeh -002865r 1 FF FF 7F .faraddr 7fffffh -002868r 1 00 00 80 .faraddr 800000h -00286Br 1 01 00 80 .faraddr 800001h -00286Er 1 02 00 80 .faraddr 800002h -002871r 1 03 00 80 .faraddr 800003h -002874r 1 04 00 80 .faraddr 800004h -002877r 1 05 00 80 .faraddr 800005h -00287Ar 1 06 00 80 .faraddr 800006h -00287Dr 1 07 00 80 .faraddr 800007h -002880r 1 08 00 80 .faraddr 800008h -002883r 1 09 00 80 .faraddr 800009h -002886r 1 0A 00 80 .faraddr 80000ah -002889r 1 0B 00 80 .faraddr 80000bh -00288Cr 1 0C 00 80 .faraddr 80000ch -00288Fr 1 0D 00 80 .faraddr 80000dh -002892r 1 0E 00 80 .faraddr 80000eh -002895r 1 0F 00 80 .faraddr 80000fh -002898r 1 E1 FF 9F .faraddr 9fffe1h -00289Br 1 E2 FF 9F .faraddr 9fffe2h -00289Er 1 E3 FF 9F .faraddr 9fffe3h -0028A1r 1 E4 FF 9F .faraddr 9fffe4h -0028A4r 1 E5 FF 9F .faraddr 9fffe5h -0028A7r 1 E6 FF 9F .faraddr 9fffe6h -0028AAr 1 E7 FF 9F .faraddr 9fffe7h -0028ADr 1 E8 FF 9F .faraddr 9fffe8h -0028B0r 1 E9 FF 9F .faraddr 9fffe9h -0028B3r 1 EA FF 9F .faraddr 9fffeah -0028B6r 1 EB FF 9F .faraddr 9fffebh -0028B9r 1 EC FF 9F .faraddr 9fffech -0028BCr 1 ED FF 9F .faraddr 9fffedh -0028BFr 1 EE FF 9F .faraddr 9fffeeh -0028C2r 1 EF FF 9F .faraddr 9fffefh -0028C5r 1 F0 FF 9F .faraddr 9ffff0h -0028C8r 1 F1 FF 9F .faraddr 9ffff1h -0028CBr 1 F2 FF 9F .faraddr 9ffff2h -0028CEr 1 F3 FF 9F .faraddr 9ffff3h -0028D1r 1 F4 FF 9F .faraddr 9ffff4h -0028D4r 1 F5 FF 9F .faraddr 9ffff5h -0028D7r 1 F6 FF 9F .faraddr 9ffff6h -0028DAr 1 F7 FF 9F .faraddr 9ffff7h -0028DDr 1 F8 FF 9F .faraddr 9ffff8h -0028E0r 1 F9 FF 9F .faraddr 9ffff9h -0028E3r 1 FA FF 9F .faraddr 9ffffah -0028E6r 1 FB FF 9F .faraddr 9ffffbh -0028E9r 1 FC FF 9F .faraddr 9ffffch -0028ECr 1 FD FF 9F .faraddr 9ffffdh -0028EFr 1 FE FF 9F .faraddr 9ffffeh -0028F2r 1 FF FF 9F .faraddr 9fffffh -0028F5r 1 00 00 A0 .faraddr 0a00000h -0028F8r 1 01 00 A0 .faraddr 0a00001h -0028FBr 1 02 00 A0 .faraddr 0a00002h -0028FEr 1 03 00 A0 .faraddr 0a00003h -002901r 1 04 00 A0 .faraddr 0a00004h -002904r 1 05 00 A0 .faraddr 0a00005h -002907r 1 06 00 A0 .faraddr 0a00006h -00290Ar 1 07 00 A0 .faraddr 0a00007h -00290Dr 1 08 00 A0 .faraddr 0a00008h -002910r 1 09 00 A0 .faraddr 0a00009h -002913r 1 0A 00 A0 .faraddr 0a0000ah -002916r 1 0B 00 A0 .faraddr 0a0000bh -002919r 1 0C 00 A0 .faraddr 0a0000ch -00291Cr 1 0D 00 A0 .faraddr 0a0000dh -00291Fr 1 0E 00 A0 .faraddr 0a0000eh -002922r 1 0F 00 A0 .faraddr 0a0000fh -002925r 1 E1 FF FF .faraddr 0ffffe1h -002928r 1 E2 FF FF .faraddr 0ffffe2h -00292Br 1 E3 FF FF .faraddr 0ffffe3h -00292Er 1 E4 FF FF .faraddr 0ffffe4h -002931r 1 E5 FF FF .faraddr 0ffffe5h -002934r 1 E6 FF FF .faraddr 0ffffe6h -002937r 1 E7 FF FF .faraddr 0ffffe7h -00293Ar 1 E8 FF FF .faraddr 0ffffe8h -00293Dr 1 E9 FF FF .faraddr 0ffffe9h -002940r 1 EA FF FF .faraddr 0ffffeah -002943r 1 EB FF FF .faraddr 0ffffebh -002946r 1 EC FF FF .faraddr 0ffffech -002949r 1 ED FF FF .faraddr 0ffffedh -00294Cr 1 EE FF FF .faraddr 0ffffeeh -00294Fr 1 EF FF FF .faraddr 0ffffefh -002952r 1 F0 FF FF .faraddr 0fffff0h -002955r 1 F1 FF FF .faraddr 0fffff1h -002958r 1 F2 FF FF .faraddr 0fffff2h -00295Br 1 F3 FF FF .faraddr 0fffff3h -00295Er 1 F4 FF FF .faraddr 0fffff4h -002961r 1 F5 FF FF .faraddr 0fffff5h -002964r 1 F6 FF FF .faraddr 0fffff6h -002967r 1 F7 FF FF .faraddr 0fffff7h -00296Ar 1 F8 FF FF .faraddr 0fffff8h -00296Dr 1 F9 FF FF .faraddr 0fffff9h -002970r 1 FA FF FF .faraddr 0fffffah -002973r 1 FB FF FF .faraddr 0fffffbh -002976r 1 FC FF FF .faraddr 0fffffch -002979r 1 FD FF FF .faraddr 0fffffdh -00297Cr 1 FE FF FF .faraddr 0fffffeh -00297Fr 1 FF FF FF .faraddr 0ffffffh +002394r 1 ; alternative hex values +002394r 1 00 00 00 .faraddr 0h +002397r 1 01 00 00 .faraddr 1h +00239Ar 1 02 00 00 .faraddr 2h +00239Dr 1 03 00 00 .faraddr 3h +0023A0r 1 04 00 00 .faraddr 4h +0023A3r 1 05 00 00 .faraddr 5h +0023A6r 1 06 00 00 .faraddr 6h +0023A9r 1 07 00 00 .faraddr 7h +0023ACr 1 08 00 00 .faraddr 8h +0023AFr 1 09 00 00 .faraddr 9h +0023B2r 1 0A 00 00 .faraddr 0ah +0023B5r 1 0B 00 00 .faraddr 0bh +0023B8r 1 0C 00 00 .faraddr 0ch +0023BBr 1 0D 00 00 .faraddr 0dh +0023BEr 1 0E 00 00 .faraddr 0eh +0023C1r 1 0F 00 00 .faraddr 0fh +0023C4r 1 10 00 00 .faraddr 10h +0023C7r 1 11 00 00 .faraddr 11h +0023CAr 1 12 00 00 .faraddr 12h +0023CDr 1 13 00 00 .faraddr 13h +0023D0r 1 70 00 00 .faraddr 70h +0023D3r 1 71 00 00 .faraddr 71h +0023D6r 1 72 00 00 .faraddr 72h +0023D9r 1 73 00 00 .faraddr 73h +0023DCr 1 74 00 00 .faraddr 74h +0023DFr 1 75 00 00 .faraddr 75h +0023E2r 1 76 00 00 .faraddr 76h +0023E5r 1 77 00 00 .faraddr 77h +0023E8r 1 78 00 00 .faraddr 78h +0023EBr 1 79 00 00 .faraddr 79h +0023EEr 1 7A 00 00 .faraddr 7ah +0023F1r 1 7B 00 00 .faraddr 7bh +0023F4r 1 7C 00 00 .faraddr 7ch +0023F7r 1 7D 00 00 .faraddr 7dh +0023FAr 1 7E 00 00 .faraddr 7eh +0023FDr 1 7F 00 00 .faraddr 7fh +002400r 1 80 00 00 .faraddr 80h +002403r 1 81 00 00 .faraddr 81h +002406r 1 82 00 00 .faraddr 82h +002409r 1 83 00 00 .faraddr 83h +00240Cr 1 84 00 00 .faraddr 84h +00240Fr 1 85 00 00 .faraddr 85h +002412r 1 86 00 00 .faraddr 86h +002415r 1 F0 00 00 .faraddr 0f0h +002418r 1 F1 00 00 .faraddr 0f1h +00241Br 1 F2 00 00 .faraddr 0f2h +00241Er 1 F3 00 00 .faraddr 0f3h +002421r 1 F4 00 00 .faraddr 0f4h +002424r 1 F5 00 00 .faraddr 0f5h +002427r 1 F6 00 00 .faraddr 0f6h +00242Ar 1 F7 00 00 .faraddr 0f7h +00242Dr 1 F8 00 00 .faraddr 0f8h +002430r 1 F9 00 00 .faraddr 0f9h +002433r 1 FA 00 00 .faraddr 0fah +002436r 1 FB 00 00 .faraddr 0fbh +002439r 1 FC 00 00 .faraddr 0fch +00243Cr 1 FD 00 00 .faraddr 0fdh +00243Fr 1 FE 00 00 .faraddr 0feh +002442r 1 FF 00 00 .faraddr 0ffh +002445r 1 00 01 00 .faraddr 100h +002448r 1 01 01 00 .faraddr 101h +00244Br 1 02 01 00 .faraddr 102h +00244Er 1 03 01 00 .faraddr 103h +002451r 1 D2 0F 00 .faraddr 0fd2h +002454r 1 D3 0F 00 .faraddr 0fd3h +002457r 1 D4 0F 00 .faraddr 0fd4h +00245Ar 1 D5 0F 00 .faraddr 0fd5h +00245Dr 1 D6 0F 00 .faraddr 0fd6h +002460r 1 D7 0F 00 .faraddr 0fd7h +002463r 1 D8 0F 00 .faraddr 0fd8h +002466r 1 D9 0F 00 .faraddr 0fd9h +002469r 1 DA 0F 00 .faraddr 0fdah +00246Cr 1 DB 0F 00 .faraddr 0fdbh +00246Fr 1 DC 0F 00 .faraddr 0fdch +002472r 1 DD 0F 00 .faraddr 0fddh +002475r 1 DE 0F 00 .faraddr 0fdeh +002478r 1 DF 0F 00 .faraddr 0fdfh +00247Br 1 E0 0F 00 .faraddr 0fe0h +00247Er 1 E1 0F 00 .faraddr 0fe1h +002481r 1 E2 0F 00 .faraddr 0fe2h +002484r 1 E3 0F 00 .faraddr 0fe3h +002487r 1 E4 0F 00 .faraddr 0fe4h +00248Ar 1 E5 0F 00 .faraddr 0fe5h +00248Dr 1 E6 0F 00 .faraddr 0fe6h +002490r 1 E7 0F 00 .faraddr 0fe7h +002493r 1 E8 0F 00 .faraddr 0fe8h +002496r 1 E9 0F 00 .faraddr 0fe9h +002499r 1 EA 0F 00 .faraddr 0feah +00249Cr 1 EB 0F 00 .faraddr 0febh +00249Fr 1 EC 0F 00 .faraddr 0fech +0024A2r 1 ED 0F 00 .faraddr 0fedh +0024A5r 1 EE 0F 00 .faraddr 0feeh +0024A8r 1 EF 0F 00 .faraddr 0fefh +0024ABr 1 F0 0F 00 .faraddr 0ff0h +0024AEr 1 F1 0F 00 .faraddr 0ff1h +0024B1r 1 F2 0F 00 .faraddr 0ff2h +0024B4r 1 F3 0F 00 .faraddr 0ff3h +0024B7r 1 F4 0F 00 .faraddr 0ff4h +0024BAr 1 F5 0F 00 .faraddr 0ff5h +0024BDr 1 F6 0F 00 .faraddr 0ff6h +0024C0r 1 F7 0F 00 .faraddr 0ff7h +0024C3r 1 F8 0F 00 .faraddr 0ff8h +0024C6r 1 F9 0F 00 .faraddr 0ff9h +0024C9r 1 FA 0F 00 .faraddr 0ffah +0024CCr 1 FB 0F 00 .faraddr 0ffbh +0024CFr 1 FC 0F 00 .faraddr 0ffch +0024D2r 1 FD 0F 00 .faraddr 0ffdh +0024D5r 1 FE 0F 00 .faraddr 0ffeh +0024D8r 1 FF 0F 00 .faraddr 0fffh +0024DBr 1 00 10 00 .faraddr 1000h +0024DEr 1 01 10 00 .faraddr 1001h +0024E1r 1 02 10 00 .faraddr 1002h +0024E4r 1 03 10 00 .faraddr 1003h +0024E7r 1 04 10 00 .faraddr 1004h +0024EAr 1 05 10 00 .faraddr 1005h +0024EDr 1 06 10 00 .faraddr 1006h +0024F0r 1 07 10 00 .faraddr 1007h +0024F3r 1 08 10 00 .faraddr 1008h +0024F6r 1 F0 7F 00 .faraddr 7ff0h +0024F9r 1 F1 7F 00 .faraddr 7ff1h +0024FCr 1 F2 7F 00 .faraddr 7ff2h +0024FFr 1 F3 7F 00 .faraddr 7ff3h +002502r 1 F4 7F 00 .faraddr 7ff4h +002505r 1 F5 7F 00 .faraddr 7ff5h +002508r 1 F6 7F 00 .faraddr 7ff6h +00250Br 1 F7 7F 00 .faraddr 7ff7h +00250Er 1 F8 7F 00 .faraddr 7ff8h +002511r 1 F9 7F 00 .faraddr 7ff9h +002514r 1 FA 7F 00 .faraddr 7ffah +002517r 1 FB 7F 00 .faraddr 7ffbh +00251Ar 1 FC 7F 00 .faraddr 7ffch +00251Dr 1 FD 7F 00 .faraddr 7ffdh +002520r 1 FE 7F 00 .faraddr 7ffeh +002523r 1 FF 7F 00 .faraddr 7fffh +002526r 1 00 80 00 .faraddr 8000h +002529r 1 01 80 00 .faraddr 8001h +00252Cr 1 02 80 00 .faraddr 8002h +00252Fr 1 03 80 00 .faraddr 8003h +002532r 1 04 80 00 .faraddr 8004h +002535r 1 05 80 00 .faraddr 8005h +002538r 1 06 80 00 .faraddr 8006h +00253Br 1 07 80 00 .faraddr 8007h +00253Er 1 08 80 00 .faraddr 8008h +002541r 1 09 80 00 .faraddr 8009h +002544r 1 0A 80 00 .faraddr 800ah +002547r 1 0B 80 00 .faraddr 800bh +00254Ar 1 E1 9F 00 .faraddr 9fe1h +00254Dr 1 E2 9F 00 .faraddr 9fe2h +002550r 1 E3 9F 00 .faraddr 9fe3h +002553r 1 E4 9F 00 .faraddr 9fe4h +002556r 1 E5 9F 00 .faraddr 9fe5h +002559r 1 E6 9F 00 .faraddr 9fe6h +00255Cr 1 E7 9F 00 .faraddr 9fe7h +00255Fr 1 E8 9F 00 .faraddr 9fe8h +002562r 1 E9 9F 00 .faraddr 9fe9h +002565r 1 EA 9F 00 .faraddr 9feah +002568r 1 EB 9F 00 .faraddr 9febh +00256Br 1 EC 9F 00 .faraddr 9fech +00256Er 1 ED 9F 00 .faraddr 9fedh +002571r 1 EE 9F 00 .faraddr 9feeh +002574r 1 EF 9F 00 .faraddr 9fefh +002577r 1 F0 9F 00 .faraddr 9ff0h +00257Ar 1 F1 9F 00 .faraddr 9ff1h +00257Dr 1 F2 9F 00 .faraddr 9ff2h +002580r 1 F3 9F 00 .faraddr 9ff3h +002583r 1 F4 9F 00 .faraddr 9ff4h +002586r 1 F5 9F 00 .faraddr 9ff5h +002589r 1 F6 9F 00 .faraddr 9ff6h +00258Cr 1 F7 9F 00 .faraddr 9ff7h +00258Fr 1 F8 9F 00 .faraddr 9ff8h +002592r 1 F9 9F 00 .faraddr 9ff9h +002595r 1 FA 9F 00 .faraddr 9ffah +002598r 1 FB 9F 00 .faraddr 9ffbh +00259Br 1 FC 9F 00 .faraddr 9ffch +00259Er 1 FD 9F 00 .faraddr 9ffdh +0025A1r 1 FE 9F 00 .faraddr 9ffeh +0025A4r 1 FF 9F 00 .faraddr 9fffh +0025A7r 1 00 A0 00 .faraddr 0a000h +0025AAr 1 01 A0 00 .faraddr 0a001h +0025ADr 1 02 A0 00 .faraddr 0a002h +0025B0r 1 03 A0 00 .faraddr 0a003h +0025B3r 1 04 A0 00 .faraddr 0a004h +0025B6r 1 05 A0 00 .faraddr 0a005h +0025B9r 1 06 A0 00 .faraddr 0a006h +0025BCr 1 07 A0 00 .faraddr 0a007h +0025BFr 1 08 A0 00 .faraddr 0a008h +0025C2r 1 09 A0 00 .faraddr 0a009h +0025C5r 1 0A A0 00 .faraddr 0a00ah +0025C8r 1 0B A0 00 .faraddr 0a00bh +0025CBr 1 0C A0 00 .faraddr 0a00ch +0025CEr 1 0D A0 00 .faraddr 0a00dh +0025D1r 1 0E A0 00 .faraddr 0a00eh +0025D4r 1 0F A0 00 .faraddr 0a00fh +0025D7r 1 E1 AF 00 .faraddr 0afe1h +0025DAr 1 E2 AF 00 .faraddr 0afe2h +0025DDr 1 E3 AF 00 .faraddr 0afe3h +0025E0r 1 E4 AF 00 .faraddr 0afe4h +0025E3r 1 E5 AF 00 .faraddr 0afe5h +0025E6r 1 E6 AF 00 .faraddr 0afe6h +0025E9r 1 E7 AF 00 .faraddr 0afe7h +0025ECr 1 E8 AF 00 .faraddr 0afe8h +0025EFr 1 E9 AF 00 .faraddr 0afe9h +0025F2r 1 EA AF 00 .faraddr 0afeah +0025F5r 1 EB AF 00 .faraddr 0afebh +0025F8r 1 EC AF 00 .faraddr 0afech +0025FBr 1 ED AF 00 .faraddr 0afedh +0025FEr 1 EE AF 00 .faraddr 0afeeh +002601r 1 EF AF 00 .faraddr 0afefh +002604r 1 F0 AF 00 .faraddr 0aff0h +002607r 1 F1 AF 00 .faraddr 0aff1h +00260Ar 1 F2 AF 00 .faraddr 0aff2h +00260Dr 1 F3 AF 00 .faraddr 0aff3h +002610r 1 F4 AF 00 .faraddr 0aff4h +002613r 1 F5 AF 00 .faraddr 0aff5h +002616r 1 F6 AF 00 .faraddr 0aff6h +002619r 1 F7 AF 00 .faraddr 0aff7h +00261Cr 1 F8 AF 00 .faraddr 0aff8h +00261Fr 1 F9 AF 00 .faraddr 0aff9h +002622r 1 FA AF 00 .faraddr 0affah +002625r 1 FB AF 00 .faraddr 0affbh +002628r 1 FC AF 00 .faraddr 0affch +00262Br 1 FD AF 00 .faraddr 0affdh +00262Er 1 FE AF 00 .faraddr 0affeh +002631r 1 FF AF 00 .faraddr 0afffh +002634r 1 00 B0 00 .faraddr 0b000h +002637r 1 01 B0 00 .faraddr 0b001h +00263Ar 1 02 B0 00 .faraddr 0b002h +00263Dr 1 03 B0 00 .faraddr 0b003h +002640r 1 04 B0 00 .faraddr 0b004h +002643r 1 05 B0 00 .faraddr 0b005h +002646r 1 06 B0 00 .faraddr 0b006h +002649r 1 07 B0 00 .faraddr 0b007h +00264Cr 1 08 B0 00 .faraddr 0b008h +00264Fr 1 09 B0 00 .faraddr 0b009h +002652r 1 0A B0 00 .faraddr 0b00ah +002655r 1 0B B0 00 .faraddr 0b00bh +002658r 1 0C B0 00 .faraddr 0b00ch +00265Br 1 0D B0 00 .faraddr 0b00dh +00265Er 1 0E B0 00 .faraddr 0b00eh +002661r 1 0F B0 00 .faraddr 0b00fh +002664r 1 E1 FF 00 .faraddr 0ffe1h +002667r 1 E2 FF 00 .faraddr 0ffe2h +00266Ar 1 E3 FF 00 .faraddr 0ffe3h +00266Dr 1 E4 FF 00 .faraddr 0ffe4h +002670r 1 E5 FF 00 .faraddr 0ffe5h +002673r 1 E6 FF 00 .faraddr 0ffe6h +002676r 1 E7 FF 00 .faraddr 0ffe7h +002679r 1 E8 FF 00 .faraddr 0ffe8h +00267Cr 1 E9 FF 00 .faraddr 0ffe9h +00267Fr 1 EA FF 00 .faraddr 0ffeah +002682r 1 EB FF 00 .faraddr 0ffebh +002685r 1 EC FF 00 .faraddr 0ffech +002688r 1 ED FF 00 .faraddr 0ffedh +00268Br 1 EE FF 00 .faraddr 0ffeeh +00268Er 1 EF FF 00 .faraddr 0ffefh +002691r 1 F0 FF 00 .faraddr 0fff0h +002694r 1 F1 FF 00 .faraddr 0fff1h +002697r 1 F2 FF 00 .faraddr 0fff2h +00269Ar 1 F3 FF 00 .faraddr 0fff3h +00269Dr 1 F4 FF 00 .faraddr 0fff4h +0026A0r 1 F5 FF 00 .faraddr 0fff5h +0026A3r 1 F6 FF 00 .faraddr 0fff6h +0026A6r 1 F7 FF 00 .faraddr 0fff7h +0026A9r 1 F8 FF 00 .faraddr 0fff8h +0026ACr 1 F9 FF 00 .faraddr 0fff9h +0026AFr 1 FA FF 00 .faraddr 0fffah +0026B2r 1 FB FF 00 .faraddr 0fffbh +0026B5r 1 FC FF 00 .faraddr 0fffch +0026B8r 1 FD FF 00 .faraddr 0fffdh +0026BBr 1 FE FF 00 .faraddr 0fffeh +0026BEr 1 FF FF 00 .faraddr 0ffffh +0026C1r 1 00 00 01 .faraddr 10000h +0026C4r 1 01 00 01 .faraddr 10001h +0026C7r 1 02 00 01 .faraddr 10002h +0026CAr 1 03 00 01 .faraddr 10003h +0026CDr 1 04 00 01 .faraddr 10004h +0026D0r 1 05 00 01 .faraddr 10005h +0026D3r 1 06 00 01 .faraddr 10006h +0026D6r 1 07 00 01 .faraddr 10007h +0026D9r 1 08 00 01 .faraddr 10008h +0026DCr 1 09 00 01 .faraddr 10009h +0026DFr 1 0A 00 01 .faraddr 1000ah +0026E2r 1 0B 00 01 .faraddr 1000bh +0026E5r 1 0C 00 01 .faraddr 1000ch +0026E8r 1 0D 00 01 .faraddr 1000dh +0026EBr 1 0E 00 01 .faraddr 1000eh +0026EEr 1 0F 00 01 .faraddr 1000fh +0026F1r 1 E1 FF 10 .faraddr 10ffe1h +0026F4r 1 E2 FF 10 .faraddr 10ffe2h +0026F7r 1 E3 FF 10 .faraddr 10ffe3h +0026FAr 1 E4 FF 10 .faraddr 10ffe4h +0026FDr 1 E5 FF 10 .faraddr 10ffe5h +002700r 1 E6 FF 10 .faraddr 10ffe6h +002703r 1 E7 FF 10 .faraddr 10ffe7h +002706r 1 E8 FF 10 .faraddr 10ffe8h +002709r 1 E9 FF 10 .faraddr 10ffe9h +00270Cr 1 EA FF 10 .faraddr 10ffeah +00270Fr 1 EB FF 10 .faraddr 10ffebh +002712r 1 EC FF 10 .faraddr 10ffech +002715r 1 ED FF 10 .faraddr 10ffedh +002718r 1 EE FF 10 .faraddr 10ffeeh +00271Br 1 EF FF 10 .faraddr 10ffefh +00271Er 1 F0 FF 10 .faraddr 10fff0h +002721r 1 F1 FF 10 .faraddr 10fff1h +002724r 1 F2 FF 10 .faraddr 10fff2h +002727r 1 F3 FF 10 .faraddr 10fff3h +00272Ar 1 F4 FF 10 .faraddr 10fff4h +00272Dr 1 F5 FF 10 .faraddr 10fff5h +002730r 1 F6 FF 10 .faraddr 10fff6h +002733r 1 F7 FF 10 .faraddr 10fff7h +002736r 1 F8 FF 10 .faraddr 10fff8h +002739r 1 F9 FF 10 .faraddr 10fff9h +00273Cr 1 FA FF 10 .faraddr 10fffah +00273Fr 1 FB FF 10 .faraddr 10fffbh +002742r 1 FC FF 10 .faraddr 10fffch +002745r 1 FD FF 10 .faraddr 10fffdh +002748r 1 FE FF 10 .faraddr 10fffeh +00274Br 1 FF FF 10 .faraddr 10ffffh +00274Er 1 00 00 11 .faraddr 110000h +002751r 1 01 00 11 .faraddr 110001h +002754r 1 02 00 11 .faraddr 110002h +002757r 1 03 00 11 .faraddr 110003h +00275Ar 1 04 00 11 .faraddr 110004h +00275Dr 1 05 00 11 .faraddr 110005h +002760r 1 06 00 11 .faraddr 110006h +002763r 1 07 00 11 .faraddr 110007h +002766r 1 08 00 11 .faraddr 110008h +002769r 1 09 00 11 .faraddr 110009h +00276Cr 1 0A 00 11 .faraddr 11000ah +00276Fr 1 0B 00 11 .faraddr 11000bh +002772r 1 0C 00 11 .faraddr 11000ch +002775r 1 0D 00 11 .faraddr 11000dh +002778r 1 0E 00 11 .faraddr 11000eh +00277Br 1 0F 00 11 .faraddr 11000fh +00277Er 1 E1 FF 20 .faraddr 20ffe1h +002781r 1 E2 FF 20 .faraddr 20ffe2h +002784r 1 E3 FF 20 .faraddr 20ffe3h +002787r 1 E4 FF 20 .faraddr 20ffe4h +00278Ar 1 E5 FF 20 .faraddr 20ffe5h +00278Dr 1 E6 FF 20 .faraddr 20ffe6h +002790r 1 E7 FF 20 .faraddr 20ffe7h +002793r 1 E8 FF 20 .faraddr 20ffe8h +002796r 1 E9 FF 20 .faraddr 20ffe9h +002799r 1 EA FF 20 .faraddr 20ffeah +00279Cr 1 EB FF 20 .faraddr 20ffebh +00279Fr 1 EC FF 20 .faraddr 20ffech +0027A2r 1 ED FF 20 .faraddr 20ffedh +0027A5r 1 EE FF 20 .faraddr 20ffeeh +0027A8r 1 EF FF 20 .faraddr 20ffefh +0027ABr 1 F0 FF 20 .faraddr 20fff0h +0027AEr 1 F1 FF 20 .faraddr 20fff1h +0027B1r 1 F2 FF 20 .faraddr 20fff2h +0027B4r 1 F3 FF 20 .faraddr 20fff3h +0027B7r 1 F4 FF 20 .faraddr 20fff4h +0027BAr 1 F5 FF 20 .faraddr 20fff5h +0027BDr 1 F6 FF 20 .faraddr 20fff6h +0027C0r 1 F7 FF 20 .faraddr 20fff7h +0027C3r 1 F8 FF 20 .faraddr 20fff8h +0027C6r 1 F9 FF 20 .faraddr 20fff9h +0027C9r 1 FA FF 20 .faraddr 20fffah +0027CCr 1 FB FF 20 .faraddr 20fffbh +0027CFr 1 FC FF 20 .faraddr 20fffch +0027D2r 1 FD FF 20 .faraddr 20fffdh +0027D5r 1 FE FF 20 .faraddr 20fffeh +0027D8r 1 FF FF 20 .faraddr 20ffffh +0027DBr 1 00 00 21 .faraddr 210000h +0027DEr 1 01 00 21 .faraddr 210001h +0027E1r 1 02 00 21 .faraddr 210002h +0027E4r 1 03 00 21 .faraddr 210003h +0027E7r 1 04 00 21 .faraddr 210004h +0027EAr 1 05 00 21 .faraddr 210005h +0027EDr 1 06 00 21 .faraddr 210006h +0027F0r 1 07 00 21 .faraddr 210007h +0027F3r 1 08 00 21 .faraddr 210008h +0027F6r 1 09 00 21 .faraddr 210009h +0027F9r 1 0A 00 21 .faraddr 21000ah +0027FCr 1 0B 00 21 .faraddr 21000bh +0027FFr 1 0C 00 21 .faraddr 21000ch +002802r 1 0D 00 21 .faraddr 21000dh +002805r 1 0E 00 21 .faraddr 21000eh +002808r 1 0F 00 21 .faraddr 21000fh +00280Br 1 E1 FF 7F .faraddr 7fffe1h +00280Er 1 E2 FF 7F .faraddr 7fffe2h +002811r 1 E3 FF 7F .faraddr 7fffe3h +002814r 1 E4 FF 7F .faraddr 7fffe4h +002817r 1 E5 FF 7F .faraddr 7fffe5h +00281Ar 1 E6 FF 7F .faraddr 7fffe6h +00281Dr 1 E7 FF 7F .faraddr 7fffe7h +002820r 1 E8 FF 7F .faraddr 7fffe8h +002823r 1 E9 FF 7F .faraddr 7fffe9h +002826r 1 EA FF 7F .faraddr 7fffeah +002829r 1 EB FF 7F .faraddr 7fffebh +00282Cr 1 EC FF 7F .faraddr 7fffech +00282Fr 1 ED FF 7F .faraddr 7fffedh +002832r 1 EE FF 7F .faraddr 7fffeeh +002835r 1 EF FF 7F .faraddr 7fffefh +002838r 1 F0 FF 7F .faraddr 7ffff0h +00283Br 1 F1 FF 7F .faraddr 7ffff1h +00283Er 1 F2 FF 7F .faraddr 7ffff2h +002841r 1 F3 FF 7F .faraddr 7ffff3h +002844r 1 F4 FF 7F .faraddr 7ffff4h +002847r 1 F5 FF 7F .faraddr 7ffff5h +00284Ar 1 F6 FF 7F .faraddr 7ffff6h +00284Dr 1 F7 FF 7F .faraddr 7ffff7h +002850r 1 F8 FF 7F .faraddr 7ffff8h +002853r 1 F9 FF 7F .faraddr 7ffff9h +002856r 1 FA FF 7F .faraddr 7ffffah +002859r 1 FB FF 7F .faraddr 7ffffbh +00285Cr 1 FC FF 7F .faraddr 7ffffch +00285Fr 1 FD FF 7F .faraddr 7ffffdh +002862r 1 FE FF 7F .faraddr 7ffffeh +002865r 1 FF FF 7F .faraddr 7fffffh +002868r 1 00 00 80 .faraddr 800000h +00286Br 1 01 00 80 .faraddr 800001h +00286Er 1 02 00 80 .faraddr 800002h +002871r 1 03 00 80 .faraddr 800003h +002874r 1 04 00 80 .faraddr 800004h +002877r 1 05 00 80 .faraddr 800005h +00287Ar 1 06 00 80 .faraddr 800006h +00287Dr 1 07 00 80 .faraddr 800007h +002880r 1 08 00 80 .faraddr 800008h +002883r 1 09 00 80 .faraddr 800009h +002886r 1 0A 00 80 .faraddr 80000ah +002889r 1 0B 00 80 .faraddr 80000bh +00288Cr 1 0C 00 80 .faraddr 80000ch +00288Fr 1 0D 00 80 .faraddr 80000dh +002892r 1 0E 00 80 .faraddr 80000eh +002895r 1 0F 00 80 .faraddr 80000fh +002898r 1 E1 FF 9F .faraddr 9fffe1h +00289Br 1 E2 FF 9F .faraddr 9fffe2h +00289Er 1 E3 FF 9F .faraddr 9fffe3h +0028A1r 1 E4 FF 9F .faraddr 9fffe4h +0028A4r 1 E5 FF 9F .faraddr 9fffe5h +0028A7r 1 E6 FF 9F .faraddr 9fffe6h +0028AAr 1 E7 FF 9F .faraddr 9fffe7h +0028ADr 1 E8 FF 9F .faraddr 9fffe8h +0028B0r 1 E9 FF 9F .faraddr 9fffe9h +0028B3r 1 EA FF 9F .faraddr 9fffeah +0028B6r 1 EB FF 9F .faraddr 9fffebh +0028B9r 1 EC FF 9F .faraddr 9fffech +0028BCr 1 ED FF 9F .faraddr 9fffedh +0028BFr 1 EE FF 9F .faraddr 9fffeeh +0028C2r 1 EF FF 9F .faraddr 9fffefh +0028C5r 1 F0 FF 9F .faraddr 9ffff0h +0028C8r 1 F1 FF 9F .faraddr 9ffff1h +0028CBr 1 F2 FF 9F .faraddr 9ffff2h +0028CEr 1 F3 FF 9F .faraddr 9ffff3h +0028D1r 1 F4 FF 9F .faraddr 9ffff4h +0028D4r 1 F5 FF 9F .faraddr 9ffff5h +0028D7r 1 F6 FF 9F .faraddr 9ffff6h +0028DAr 1 F7 FF 9F .faraddr 9ffff7h +0028DDr 1 F8 FF 9F .faraddr 9ffff8h +0028E0r 1 F9 FF 9F .faraddr 9ffff9h +0028E3r 1 FA FF 9F .faraddr 9ffffah +0028E6r 1 FB FF 9F .faraddr 9ffffbh +0028E9r 1 FC FF 9F .faraddr 9ffffch +0028ECr 1 FD FF 9F .faraddr 9ffffdh +0028EFr 1 FE FF 9F .faraddr 9ffffeh +0028F2r 1 FF FF 9F .faraddr 9fffffh +0028F5r 1 00 00 A0 .faraddr 0a00000h +0028F8r 1 01 00 A0 .faraddr 0a00001h +0028FBr 1 02 00 A0 .faraddr 0a00002h +0028FEr 1 03 00 A0 .faraddr 0a00003h +002901r 1 04 00 A0 .faraddr 0a00004h +002904r 1 05 00 A0 .faraddr 0a00005h +002907r 1 06 00 A0 .faraddr 0a00006h +00290Ar 1 07 00 A0 .faraddr 0a00007h +00290Dr 1 08 00 A0 .faraddr 0a00008h +002910r 1 09 00 A0 .faraddr 0a00009h +002913r 1 0A 00 A0 .faraddr 0a0000ah +002916r 1 0B 00 A0 .faraddr 0a0000bh +002919r 1 0C 00 A0 .faraddr 0a0000ch +00291Cr 1 0D 00 A0 .faraddr 0a0000dh +00291Fr 1 0E 00 A0 .faraddr 0a0000eh +002922r 1 0F 00 A0 .faraddr 0a0000fh +002925r 1 E1 FF FF .faraddr 0ffffe1h +002928r 1 E2 FF FF .faraddr 0ffffe2h +00292Br 1 E3 FF FF .faraddr 0ffffe3h +00292Er 1 E4 FF FF .faraddr 0ffffe4h +002931r 1 E5 FF FF .faraddr 0ffffe5h +002934r 1 E6 FF FF .faraddr 0ffffe6h +002937r 1 E7 FF FF .faraddr 0ffffe7h +00293Ar 1 E8 FF FF .faraddr 0ffffe8h +00293Dr 1 E9 FF FF .faraddr 0ffffe9h +002940r 1 EA FF FF .faraddr 0ffffeah +002943r 1 EB FF FF .faraddr 0ffffebh +002946r 1 EC FF FF .faraddr 0ffffech +002949r 1 ED FF FF .faraddr 0ffffedh +00294Cr 1 EE FF FF .faraddr 0ffffeeh +00294Fr 1 EF FF FF .faraddr 0ffffefh +002952r 1 F0 FF FF .faraddr 0fffff0h +002955r 1 F1 FF FF .faraddr 0fffff1h +002958r 1 F2 FF FF .faraddr 0fffff2h +00295Br 1 F3 FF FF .faraddr 0fffff3h +00295Er 1 F4 FF FF .faraddr 0fffff4h +002961r 1 F5 FF FF .faraddr 0fffff5h +002964r 1 F6 FF FF .faraddr 0fffff6h +002967r 1 F7 FF FF .faraddr 0fffff7h +00296Ar 1 F8 FF FF .faraddr 0fffff8h +00296Dr 1 F9 FF FF .faraddr 0fffff9h +002970r 1 FA FF FF .faraddr 0fffffah +002973r 1 FB FF FF .faraddr 0fffffbh +002976r 1 FC FF FF .faraddr 0fffffch +002979r 1 FD FF FF .faraddr 0fffffdh +00297Cr 1 FE FF FF .faraddr 0fffffeh +00297Fr 1 FF FF FF .faraddr 0ffffffh 002982r 1 -002982r 1 ; alternative hex values, uppercase -002982r 1 00 00 00 .faraddr 0h -002985r 1 01 00 00 .faraddr 1h -002988r 1 02 00 00 .faraddr 2h -00298Br 1 03 00 00 .faraddr 3h -00298Er 1 04 00 00 .faraddr 4h -002991r 1 05 00 00 .faraddr 5h -002994r 1 06 00 00 .faraddr 6h -002997r 1 07 00 00 .faraddr 7h -00299Ar 1 08 00 00 .faraddr 8h -00299Dr 1 09 00 00 .faraddr 9h -0029A0r 1 0A 00 00 .faraddr 0Ah -0029A3r 1 0B 00 00 .faraddr 0Bh -0029A6r 1 0C 00 00 .faraddr 0Ch -0029A9r 1 0D 00 00 .faraddr 0Dh -0029ACr 1 0E 00 00 .faraddr 0Eh -0029AFr 1 0F 00 00 .faraddr 0Fh -0029B2r 1 10 00 00 .faraddr 10h -0029B5r 1 11 00 00 .faraddr 11h -0029B8r 1 12 00 00 .faraddr 12h -0029BBr 1 13 00 00 .faraddr 13h -0029BEr 1 70 00 00 .faraddr 70h -0029C1r 1 71 00 00 .faraddr 71h -0029C4r 1 72 00 00 .faraddr 72h -0029C7r 1 73 00 00 .faraddr 73h -0029CAr 1 74 00 00 .faraddr 74h -0029CDr 1 75 00 00 .faraddr 75h -0029D0r 1 76 00 00 .faraddr 76h -0029D3r 1 77 00 00 .faraddr 77h -0029D6r 1 78 00 00 .faraddr 78h -0029D9r 1 79 00 00 .faraddr 79h -0029DCr 1 7A 00 00 .faraddr 7Ah -0029DFr 1 7B 00 00 .faraddr 7Bh -0029E2r 1 7C 00 00 .faraddr 7Ch -0029E5r 1 7D 00 00 .faraddr 7Dh -0029E8r 1 7E 00 00 .faraddr 7Eh -0029EBr 1 7F 00 00 .faraddr 7Fh -0029EEr 1 80 00 00 .faraddr 80h -0029F1r 1 81 00 00 .faraddr 81h -0029F4r 1 82 00 00 .faraddr 82h -0029F7r 1 83 00 00 .faraddr 83h -0029FAr 1 84 00 00 .faraddr 84h -0029FDr 1 85 00 00 .faraddr 85h -002A00r 1 86 00 00 .faraddr 86h -002A03r 1 F0 00 00 .faraddr 0F0h -002A06r 1 F1 00 00 .faraddr 0F1h -002A09r 1 F2 00 00 .faraddr 0F2h -002A0Cr 1 F3 00 00 .faraddr 0F3h -002A0Fr 1 F4 00 00 .faraddr 0F4h -002A12r 1 F5 00 00 .faraddr 0F5h -002A15r 1 F6 00 00 .faraddr 0F6h -002A18r 1 F7 00 00 .faraddr 0F7h -002A1Br 1 F8 00 00 .faraddr 0F8h -002A1Er 1 F9 00 00 .faraddr 0F9h -002A21r 1 FA 00 00 .faraddr 0FAh -002A24r 1 FB 00 00 .faraddr 0FBh -002A27r 1 FC 00 00 .faraddr 0FCh -002A2Ar 1 FD 00 00 .faraddr 0FDh -002A2Dr 1 FE 00 00 .faraddr 0FEh -002A30r 1 FF 00 00 .faraddr 0FFh -002A33r 1 00 01 00 .faraddr 100h -002A36r 1 01 01 00 .faraddr 101h -002A39r 1 02 01 00 .faraddr 102h -002A3Cr 1 03 01 00 .faraddr 103h -002A3Fr 1 D2 0F 00 .faraddr 0FD2h -002A42r 1 D3 0F 00 .faraddr 0FD3h -002A45r 1 D4 0F 00 .faraddr 0FD4h -002A48r 1 D5 0F 00 .faraddr 0FD5h -002A4Br 1 D6 0F 00 .faraddr 0FD6h -002A4Er 1 D7 0F 00 .faraddr 0FD7h -002A51r 1 D8 0F 00 .faraddr 0FD8h -002A54r 1 D9 0F 00 .faraddr 0FD9h -002A57r 1 DA 0F 00 .faraddr 0FDAh -002A5Ar 1 DB 0F 00 .faraddr 0FDBh -002A5Dr 1 DC 0F 00 .faraddr 0FDCh -002A60r 1 DD 0F 00 .faraddr 0FDDh -002A63r 1 DE 0F 00 .faraddr 0FDEh -002A66r 1 DF 0F 00 .faraddr 0FDFh -002A69r 1 E0 0F 00 .faraddr 0FE0h -002A6Cr 1 E1 0F 00 .faraddr 0FE1h -002A6Fr 1 E2 0F 00 .faraddr 0FE2h -002A72r 1 E3 0F 00 .faraddr 0FE3h -002A75r 1 E4 0F 00 .faraddr 0FE4h -002A78r 1 E5 0F 00 .faraddr 0FE5h -002A7Br 1 E6 0F 00 .faraddr 0FE6h -002A7Er 1 E7 0F 00 .faraddr 0FE7h -002A81r 1 E8 0F 00 .faraddr 0FE8h -002A84r 1 E9 0F 00 .faraddr 0FE9h -002A87r 1 EA 0F 00 .faraddr 0FEAh -002A8Ar 1 EB 0F 00 .faraddr 0FEBh -002A8Dr 1 EC 0F 00 .faraddr 0FECh -002A90r 1 ED 0F 00 .faraddr 0FEDh -002A93r 1 EE 0F 00 .faraddr 0FEEh -002A96r 1 EF 0F 00 .faraddr 0FEFh -002A99r 1 F0 0F 00 .faraddr 0FF0h -002A9Cr 1 F1 0F 00 .faraddr 0FF1h -002A9Fr 1 F2 0F 00 .faraddr 0FF2h -002AA2r 1 F3 0F 00 .faraddr 0FF3h -002AA5r 1 F4 0F 00 .faraddr 0FF4h -002AA8r 1 F5 0F 00 .faraddr 0FF5h -002AABr 1 F6 0F 00 .faraddr 0FF6h -002AAEr 1 F7 0F 00 .faraddr 0FF7h -002AB1r 1 F8 0F 00 .faraddr 0FF8h -002AB4r 1 F9 0F 00 .faraddr 0FF9h -002AB7r 1 FA 0F 00 .faraddr 0FFAh -002ABAr 1 FB 0F 00 .faraddr 0FFBh -002ABDr 1 FC 0F 00 .faraddr 0FFCh -002AC0r 1 FD 0F 00 .faraddr 0FFDh -002AC3r 1 FE 0F 00 .faraddr 0FFEh -002AC6r 1 FF 0F 00 .faraddr 0FFFh -002AC9r 1 00 10 00 .faraddr 1000h -002ACCr 1 01 10 00 .faraddr 1001h -002ACFr 1 02 10 00 .faraddr 1002h -002AD2r 1 03 10 00 .faraddr 1003h -002AD5r 1 04 10 00 .faraddr 1004h -002AD8r 1 05 10 00 .faraddr 1005h -002ADBr 1 06 10 00 .faraddr 1006h -002ADEr 1 07 10 00 .faraddr 1007h -002AE1r 1 08 10 00 .faraddr 1008h -002AE4r 1 F0 7F 00 .faraddr 7FF0h -002AE7r 1 F1 7F 00 .faraddr 7FF1h -002AEAr 1 F2 7F 00 .faraddr 7FF2h -002AEDr 1 F3 7F 00 .faraddr 7FF3h -002AF0r 1 F4 7F 00 .faraddr 7FF4h -002AF3r 1 F5 7F 00 .faraddr 7FF5h -002AF6r 1 F6 7F 00 .faraddr 7FF6h -002AF9r 1 F7 7F 00 .faraddr 7FF7h -002AFCr 1 F8 7F 00 .faraddr 7FF8h -002AFFr 1 F9 7F 00 .faraddr 7FF9h -002B02r 1 FA 7F 00 .faraddr 7FFAh -002B05r 1 FB 7F 00 .faraddr 7FFBh -002B08r 1 FC 7F 00 .faraddr 7FFCh -002B0Br 1 FD 7F 00 .faraddr 7FFDh -002B0Er 1 FE 7F 00 .faraddr 7FFEh -002B11r 1 FF 7F 00 .faraddr 7FFFh -002B14r 1 00 80 00 .faraddr 8000h -002B17r 1 01 80 00 .faraddr 8001h -002B1Ar 1 02 80 00 .faraddr 8002h -002B1Dr 1 03 80 00 .faraddr 8003h -002B20r 1 04 80 00 .faraddr 8004h -002B23r 1 05 80 00 .faraddr 8005h -002B26r 1 06 80 00 .faraddr 8006h -002B29r 1 07 80 00 .faraddr 8007h -002B2Cr 1 08 80 00 .faraddr 8008h -002B2Fr 1 09 80 00 .faraddr 8009h -002B32r 1 0A 80 00 .faraddr 800Ah -002B35r 1 0B 80 00 .faraddr 800Bh -002B38r 1 E1 9F 00 .faraddr 9FE1h -002B3Br 1 E2 9F 00 .faraddr 9FE2h -002B3Er 1 E3 9F 00 .faraddr 9FE3h -002B41r 1 E4 9F 00 .faraddr 9FE4h -002B44r 1 E5 9F 00 .faraddr 9FE5h -002B47r 1 E6 9F 00 .faraddr 9FE6h -002B4Ar 1 E7 9F 00 .faraddr 9FE7h -002B4Dr 1 E8 9F 00 .faraddr 9FE8h -002B50r 1 E9 9F 00 .faraddr 9FE9h -002B53r 1 EA 9F 00 .faraddr 9FEAh -002B56r 1 EB 9F 00 .faraddr 9FEBh -002B59r 1 EC 9F 00 .faraddr 9FECh -002B5Cr 1 ED 9F 00 .faraddr 9FEDh -002B5Fr 1 EE 9F 00 .faraddr 9FEEh -002B62r 1 EF 9F 00 .faraddr 9FEFh -002B65r 1 F0 9F 00 .faraddr 9FF0h -002B68r 1 F1 9F 00 .faraddr 9FF1h -002B6Br 1 F2 9F 00 .faraddr 9FF2h -002B6Er 1 F3 9F 00 .faraddr 9FF3h -002B71r 1 F4 9F 00 .faraddr 9FF4h -002B74r 1 F5 9F 00 .faraddr 9FF5h -002B77r 1 F6 9F 00 .faraddr 9FF6h -002B7Ar 1 F7 9F 00 .faraddr 9FF7h -002B7Dr 1 F8 9F 00 .faraddr 9FF8h -002B80r 1 F9 9F 00 .faraddr 9FF9h -002B83r 1 FA 9F 00 .faraddr 9FFAh -002B86r 1 FB 9F 00 .faraddr 9FFBh -002B89r 1 FC 9F 00 .faraddr 9FFCh -002B8Cr 1 FD 9F 00 .faraddr 9FFDh -002B8Fr 1 FE 9F 00 .faraddr 9FFEh -002B92r 1 FF 9F 00 .faraddr 9FFFh -002B95r 1 00 A0 00 .faraddr 0A000h -002B98r 1 01 A0 00 .faraddr 0A001h -002B9Br 1 02 A0 00 .faraddr 0A002h -002B9Er 1 03 A0 00 .faraddr 0A003h -002BA1r 1 04 A0 00 .faraddr 0A004h -002BA4r 1 05 A0 00 .faraddr 0A005h -002BA7r 1 06 A0 00 .faraddr 0A006h -002BAAr 1 07 A0 00 .faraddr 0A007h -002BADr 1 08 A0 00 .faraddr 0A008h -002BB0r 1 09 A0 00 .faraddr 0A009h -002BB3r 1 0A A0 00 .faraddr 0A00Ah -002BB6r 1 0B A0 00 .faraddr 0A00Bh -002BB9r 1 0C A0 00 .faraddr 0A00Ch -002BBCr 1 0D A0 00 .faraddr 0A00Dh -002BBFr 1 0E A0 00 .faraddr 0A00Eh -002BC2r 1 0F A0 00 .faraddr 0A00Fh -002BC5r 1 E1 AF 00 .faraddr 0AFE1h -002BC8r 1 E2 AF 00 .faraddr 0AFE2h -002BCBr 1 E3 AF 00 .faraddr 0AFE3h -002BCEr 1 E4 AF 00 .faraddr 0AFE4h -002BD1r 1 E5 AF 00 .faraddr 0AFE5h -002BD4r 1 E6 AF 00 .faraddr 0AFE6h -002BD7r 1 E7 AF 00 .faraddr 0AFE7h -002BDAr 1 E8 AF 00 .faraddr 0AFE8h -002BDDr 1 E9 AF 00 .faraddr 0AFE9h -002BE0r 1 EA AF 00 .faraddr 0AFEAh -002BE3r 1 EB AF 00 .faraddr 0AFEBh -002BE6r 1 EC AF 00 .faraddr 0AFECh -002BE9r 1 ED AF 00 .faraddr 0AFEDh -002BECr 1 EE AF 00 .faraddr 0AFEEh -002BEFr 1 EF AF 00 .faraddr 0AFEFh -002BF2r 1 F0 AF 00 .faraddr 0AFF0h -002BF5r 1 F1 AF 00 .faraddr 0AFF1h -002BF8r 1 F2 AF 00 .faraddr 0AFF2h -002BFBr 1 F3 AF 00 .faraddr 0AFF3h -002BFEr 1 F4 AF 00 .faraddr 0AFF4h -002C01r 1 F5 AF 00 .faraddr 0AFF5h -002C04r 1 F6 AF 00 .faraddr 0AFF6h -002C07r 1 F7 AF 00 .faraddr 0AFF7h -002C0Ar 1 F8 AF 00 .faraddr 0AFF8h -002C0Dr 1 F9 AF 00 .faraddr 0AFF9h -002C10r 1 FA AF 00 .faraddr 0AFFAh -002C13r 1 FB AF 00 .faraddr 0AFFBh -002C16r 1 FC AF 00 .faraddr 0AFFCh -002C19r 1 FD AF 00 .faraddr 0AFFDh -002C1Cr 1 FE AF 00 .faraddr 0AFFEh -002C1Fr 1 FF AF 00 .faraddr 0AFFFh -002C22r 1 00 B0 00 .faraddr 0B000h -002C25r 1 01 B0 00 .faraddr 0B001h -002C28r 1 02 B0 00 .faraddr 0B002h -002C2Br 1 03 B0 00 .faraddr 0B003h -002C2Er 1 04 B0 00 .faraddr 0B004h -002C31r 1 05 B0 00 .faraddr 0B005h -002C34r 1 06 B0 00 .faraddr 0B006h -002C37r 1 07 B0 00 .faraddr 0B007h -002C3Ar 1 08 B0 00 .faraddr 0B008h -002C3Dr 1 09 B0 00 .faraddr 0B009h -002C40r 1 0A B0 00 .faraddr 0B00Ah -002C43r 1 0B B0 00 .faraddr 0B00Bh -002C46r 1 0C B0 00 .faraddr 0B00Ch -002C49r 1 0D B0 00 .faraddr 0B00Dh -002C4Cr 1 0E B0 00 .faraddr 0B00Eh -002C4Fr 1 0F B0 00 .faraddr 0B00Fh -002C52r 1 E1 FF 00 .faraddr 0FFE1h -002C55r 1 E2 FF 00 .faraddr 0FFE2h -002C58r 1 E3 FF 00 .faraddr 0FFE3h -002C5Br 1 E4 FF 00 .faraddr 0FFE4h -002C5Er 1 E5 FF 00 .faraddr 0FFE5h -002C61r 1 E6 FF 00 .faraddr 0FFE6h -002C64r 1 E7 FF 00 .faraddr 0FFE7h -002C67r 1 E8 FF 00 .faraddr 0FFE8h -002C6Ar 1 E9 FF 00 .faraddr 0FFE9h -002C6Dr 1 EA FF 00 .faraddr 0FFEAh -002C70r 1 EB FF 00 .faraddr 0FFEBh -002C73r 1 EC FF 00 .faraddr 0FFECh -002C76r 1 ED FF 00 .faraddr 0FFEDh -002C79r 1 EE FF 00 .faraddr 0FFEEh -002C7Cr 1 EF FF 00 .faraddr 0FFEFh -002C7Fr 1 F0 FF 00 .faraddr 0FFF0h -002C82r 1 F1 FF 00 .faraddr 0FFF1h -002C85r 1 F2 FF 00 .faraddr 0FFF2h -002C88r 1 F3 FF 00 .faraddr 0FFF3h -002C8Br 1 F4 FF 00 .faraddr 0FFF4h -002C8Er 1 F5 FF 00 .faraddr 0FFF5h -002C91r 1 F6 FF 00 .faraddr 0FFF6h -002C94r 1 F7 FF 00 .faraddr 0FFF7h -002C97r 1 F8 FF 00 .faraddr 0FFF8h -002C9Ar 1 F9 FF 00 .faraddr 0FFF9h -002C9Dr 1 FA FF 00 .faraddr 0FFFAh -002CA0r 1 FB FF 00 .faraddr 0FFFBh -002CA3r 1 FC FF 00 .faraddr 0FFFCh -002CA6r 1 FD FF 00 .faraddr 0FFFDh -002CA9r 1 FE FF 00 .faraddr 0FFFEh -002CACr 1 FF FF 00 .faraddr 0FFFFh -002CAFr 1 00 00 01 .faraddr 10000h -002CB2r 1 01 00 01 .faraddr 10001h -002CB5r 1 02 00 01 .faraddr 10002h -002CB8r 1 03 00 01 .faraddr 10003h -002CBBr 1 04 00 01 .faraddr 10004h -002CBEr 1 05 00 01 .faraddr 10005h -002CC1r 1 06 00 01 .faraddr 10006h -002CC4r 1 07 00 01 .faraddr 10007h -002CC7r 1 08 00 01 .faraddr 10008h -002CCAr 1 09 00 01 .faraddr 10009h -002CCDr 1 0A 00 01 .faraddr 1000Ah -002CD0r 1 0B 00 01 .faraddr 1000Bh -002CD3r 1 0C 00 01 .faraddr 1000Ch -002CD6r 1 0D 00 01 .faraddr 1000Dh -002CD9r 1 0E 00 01 .faraddr 1000Eh -002CDCr 1 0F 00 01 .faraddr 1000Fh -002CDFr 1 E1 FF 10 .faraddr 10FFE1h -002CE2r 1 E2 FF 10 .faraddr 10FFE2h -002CE5r 1 E3 FF 10 .faraddr 10FFE3h -002CE8r 1 E4 FF 10 .faraddr 10FFE4h -002CEBr 1 E5 FF 10 .faraddr 10FFE5h -002CEEr 1 E6 FF 10 .faraddr 10FFE6h -002CF1r 1 E7 FF 10 .faraddr 10FFE7h -002CF4r 1 E8 FF 10 .faraddr 10FFE8h -002CF7r 1 E9 FF 10 .faraddr 10FFE9h -002CFAr 1 EA FF 10 .faraddr 10FFEAh -002CFDr 1 EB FF 10 .faraddr 10FFEBh -002D00r 1 EC FF 10 .faraddr 10FFECh -002D03r 1 ED FF 10 .faraddr 10FFEDh -002D06r 1 EE FF 10 .faraddr 10FFEEh -002D09r 1 EF FF 10 .faraddr 10FFEFh -002D0Cr 1 F0 FF 10 .faraddr 10FFF0h -002D0Fr 1 F1 FF 10 .faraddr 10FFF1h -002D12r 1 F2 FF 10 .faraddr 10FFF2h -002D15r 1 F3 FF 10 .faraddr 10FFF3h -002D18r 1 F4 FF 10 .faraddr 10FFF4h -002D1Br 1 F5 FF 10 .faraddr 10FFF5h -002D1Er 1 F6 FF 10 .faraddr 10FFF6h -002D21r 1 F7 FF 10 .faraddr 10FFF7h -002D24r 1 F8 FF 10 .faraddr 10FFF8h -002D27r 1 F9 FF 10 .faraddr 10FFF9h -002D2Ar 1 FA FF 10 .faraddr 10FFFAh -002D2Dr 1 FB FF 10 .faraddr 10FFFBh -002D30r 1 FC FF 10 .faraddr 10FFFCh -002D33r 1 FD FF 10 .faraddr 10FFFDh -002D36r 1 FE FF 10 .faraddr 10FFFEh -002D39r 1 FF FF 10 .faraddr 10FFFFh -002D3Cr 1 00 00 11 .faraddr 110000h -002D3Fr 1 01 00 11 .faraddr 110001h -002D42r 1 02 00 11 .faraddr 110002h -002D45r 1 03 00 11 .faraddr 110003h -002D48r 1 04 00 11 .faraddr 110004h -002D4Br 1 05 00 11 .faraddr 110005h -002D4Er 1 06 00 11 .faraddr 110006h -002D51r 1 07 00 11 .faraddr 110007h -002D54r 1 08 00 11 .faraddr 110008h -002D57r 1 09 00 11 .faraddr 110009h -002D5Ar 1 0A 00 11 .faraddr 11000Ah -002D5Dr 1 0B 00 11 .faraddr 11000Bh -002D60r 1 0C 00 11 .faraddr 11000Ch -002D63r 1 0D 00 11 .faraddr 11000Dh -002D66r 1 0E 00 11 .faraddr 11000Eh -002D69r 1 0F 00 11 .faraddr 11000Fh -002D6Cr 1 E1 FF 20 .faraddr 20FFE1h -002D6Fr 1 E2 FF 20 .faraddr 20FFE2h -002D72r 1 E3 FF 20 .faraddr 20FFE3h -002D75r 1 E4 FF 20 .faraddr 20FFE4h -002D78r 1 E5 FF 20 .faraddr 20FFE5h -002D7Br 1 E6 FF 20 .faraddr 20FFE6h -002D7Er 1 E7 FF 20 .faraddr 20FFE7h -002D81r 1 E8 FF 20 .faraddr 20FFE8h -002D84r 1 E9 FF 20 .faraddr 20FFE9h -002D87r 1 EA FF 20 .faraddr 20FFEAh -002D8Ar 1 EB FF 20 .faraddr 20FFEBh -002D8Dr 1 EC FF 20 .faraddr 20FFECh -002D90r 1 ED FF 20 .faraddr 20FFEDh -002D93r 1 EE FF 20 .faraddr 20FFEEh -002D96r 1 EF FF 20 .faraddr 20FFEFh -002D99r 1 F0 FF 20 .faraddr 20FFF0h -002D9Cr 1 F1 FF 20 .faraddr 20FFF1h -002D9Fr 1 F2 FF 20 .faraddr 20FFF2h -002DA2r 1 F3 FF 20 .faraddr 20FFF3h -002DA5r 1 F4 FF 20 .faraddr 20FFF4h -002DA8r 1 F5 FF 20 .faraddr 20FFF5h -002DABr 1 F6 FF 20 .faraddr 20FFF6h -002DAEr 1 F7 FF 20 .faraddr 20FFF7h -002DB1r 1 F8 FF 20 .faraddr 20FFF8h -002DB4r 1 F9 FF 20 .faraddr 20FFF9h -002DB7r 1 FA FF 20 .faraddr 20FFFAh -002DBAr 1 FB FF 20 .faraddr 20FFFBh -002DBDr 1 FC FF 20 .faraddr 20FFFCh -002DC0r 1 FD FF 20 .faraddr 20FFFDh -002DC3r 1 FE FF 20 .faraddr 20FFFEh -002DC6r 1 FF FF 20 .faraddr 20FFFFh -002DC9r 1 00 00 21 .faraddr 210000h -002DCCr 1 01 00 21 .faraddr 210001h -002DCFr 1 02 00 21 .faraddr 210002h -002DD2r 1 03 00 21 .faraddr 210003h -002DD5r 1 04 00 21 .faraddr 210004h -002DD8r 1 05 00 21 .faraddr 210005h -002DDBr 1 06 00 21 .faraddr 210006h -002DDEr 1 07 00 21 .faraddr 210007h -002DE1r 1 08 00 21 .faraddr 210008h -002DE4r 1 09 00 21 .faraddr 210009h -002DE7r 1 0A 00 21 .faraddr 21000Ah -002DEAr 1 0B 00 21 .faraddr 21000Bh -002DEDr 1 0C 00 21 .faraddr 21000Ch -002DF0r 1 0D 00 21 .faraddr 21000Dh -002DF3r 1 0E 00 21 .faraddr 21000Eh -002DF6r 1 0F 00 21 .faraddr 21000Fh -002DF9r 1 E1 FF 7F .faraddr 7FFFE1h -002DFCr 1 E2 FF 7F .faraddr 7FFFE2h -002DFFr 1 E3 FF 7F .faraddr 7FFFE3h -002E02r 1 E4 FF 7F .faraddr 7FFFE4h -002E05r 1 E5 FF 7F .faraddr 7FFFE5h -002E08r 1 E6 FF 7F .faraddr 7FFFE6h -002E0Br 1 E7 FF 7F .faraddr 7FFFE7h -002E0Er 1 E8 FF 7F .faraddr 7FFFE8h -002E11r 1 E9 FF 7F .faraddr 7FFFE9h -002E14r 1 EA FF 7F .faraddr 7FFFEAh -002E17r 1 EB FF 7F .faraddr 7FFFEBh -002E1Ar 1 EC FF 7F .faraddr 7FFFECh -002E1Dr 1 ED FF 7F .faraddr 7FFFEDh -002E20r 1 EE FF 7F .faraddr 7FFFEEh -002E23r 1 EF FF 7F .faraddr 7FFFEFh -002E26r 1 F0 FF 7F .faraddr 7FFFF0h -002E29r 1 F1 FF 7F .faraddr 7FFFF1h -002E2Cr 1 F2 FF 7F .faraddr 7FFFF2h -002E2Fr 1 F3 FF 7F .faraddr 7FFFF3h -002E32r 1 F4 FF 7F .faraddr 7FFFF4h -002E35r 1 F5 FF 7F .faraddr 7FFFF5h -002E38r 1 F6 FF 7F .faraddr 7FFFF6h -002E3Br 1 F7 FF 7F .faraddr 7FFFF7h -002E3Er 1 F8 FF 7F .faraddr 7FFFF8h -002E41r 1 F9 FF 7F .faraddr 7FFFF9h -002E44r 1 FA FF 7F .faraddr 7FFFFAh -002E47r 1 FB FF 7F .faraddr 7FFFFBh -002E4Ar 1 FC FF 7F .faraddr 7FFFFCh -002E4Dr 1 FD FF 7F .faraddr 7FFFFDh -002E50r 1 FE FF 7F .faraddr 7FFFFEh -002E53r 1 FF FF 7F .faraddr 7FFFFFh -002E56r 1 00 00 80 .faraddr 800000h -002E59r 1 01 00 80 .faraddr 800001h -002E5Cr 1 02 00 80 .faraddr 800002h -002E5Fr 1 03 00 80 .faraddr 800003h -002E62r 1 04 00 80 .faraddr 800004h -002E65r 1 05 00 80 .faraddr 800005h -002E68r 1 06 00 80 .faraddr 800006h -002E6Br 1 07 00 80 .faraddr 800007h -002E6Er 1 08 00 80 .faraddr 800008h -002E71r 1 09 00 80 .faraddr 800009h -002E74r 1 0A 00 80 .faraddr 80000Ah -002E77r 1 0B 00 80 .faraddr 80000Bh -002E7Ar 1 0C 00 80 .faraddr 80000Ch -002E7Dr 1 0D 00 80 .faraddr 80000Dh -002E80r 1 0E 00 80 .faraddr 80000Eh -002E83r 1 0F 00 80 .faraddr 80000Fh -002E86r 1 E1 FF 9F .faraddr 9FFFE1h -002E89r 1 E2 FF 9F .faraddr 9FFFE2h -002E8Cr 1 E3 FF 9F .faraddr 9FFFE3h -002E8Fr 1 E4 FF 9F .faraddr 9FFFE4h -002E92r 1 E5 FF 9F .faraddr 9FFFE5h -002E95r 1 E6 FF 9F .faraddr 9FFFE6h -002E98r 1 E7 FF 9F .faraddr 9FFFE7h -002E9Br 1 E8 FF 9F .faraddr 9FFFE8h -002E9Er 1 E9 FF 9F .faraddr 9FFFE9h -002EA1r 1 EA FF 9F .faraddr 9FFFEAh -002EA4r 1 EB FF 9F .faraddr 9FFFEBh -002EA7r 1 EC FF 9F .faraddr 9FFFECh -002EAAr 1 ED FF 9F .faraddr 9FFFEDh -002EADr 1 EE FF 9F .faraddr 9FFFEEh -002EB0r 1 EF FF 9F .faraddr 9FFFEFh -002EB3r 1 F0 FF 9F .faraddr 9FFFF0h -002EB6r 1 F1 FF 9F .faraddr 9FFFF1h -002EB9r 1 F2 FF 9F .faraddr 9FFFF2h -002EBCr 1 F3 FF 9F .faraddr 9FFFF3h -002EBFr 1 F4 FF 9F .faraddr 9FFFF4h -002EC2r 1 F5 FF 9F .faraddr 9FFFF5h -002EC5r 1 F6 FF 9F .faraddr 9FFFF6h -002EC8r 1 F7 FF 9F .faraddr 9FFFF7h -002ECBr 1 F8 FF 9F .faraddr 9FFFF8h -002ECEr 1 F9 FF 9F .faraddr 9FFFF9h -002ED1r 1 FA FF 9F .faraddr 9FFFFAh -002ED4r 1 FB FF 9F .faraddr 9FFFFBh -002ED7r 1 FC FF 9F .faraddr 9FFFFCh -002EDAr 1 FD FF 9F .faraddr 9FFFFDh -002EDDr 1 FE FF 9F .faraddr 9FFFFEh -002EE0r 1 FF FF 9F .faraddr 9FFFFFh -002EE3r 1 00 00 A0 .faraddr 0A00000h -002EE6r 1 01 00 A0 .faraddr 0A00001h -002EE9r 1 02 00 A0 .faraddr 0A00002h -002EECr 1 03 00 A0 .faraddr 0A00003h -002EEFr 1 04 00 A0 .faraddr 0A00004h -002EF2r 1 05 00 A0 .faraddr 0A00005h -002EF5r 1 06 00 A0 .faraddr 0A00006h -002EF8r 1 07 00 A0 .faraddr 0A00007h -002EFBr 1 08 00 A0 .faraddr 0A00008h -002EFEr 1 09 00 A0 .faraddr 0A00009h -002F01r 1 0A 00 A0 .faraddr 0A0000Ah -002F04r 1 0B 00 A0 .faraddr 0A0000Bh -002F07r 1 0C 00 A0 .faraddr 0A0000Ch -002F0Ar 1 0D 00 A0 .faraddr 0A0000Dh -002F0Dr 1 0E 00 A0 .faraddr 0A0000Eh -002F10r 1 0F 00 A0 .faraddr 0A0000Fh -002F13r 1 E1 FF FF .faraddr 0FFFFE1h -002F16r 1 E2 FF FF .faraddr 0FFFFE2h -002F19r 1 E3 FF FF .faraddr 0FFFFE3h -002F1Cr 1 E4 FF FF .faraddr 0FFFFE4h -002F1Fr 1 E5 FF FF .faraddr 0FFFFE5h -002F22r 1 E6 FF FF .faraddr 0FFFFE6h -002F25r 1 E7 FF FF .faraddr 0FFFFE7h -002F28r 1 E8 FF FF .faraddr 0FFFFE8h -002F2Br 1 E9 FF FF .faraddr 0FFFFE9h -002F2Er 1 EA FF FF .faraddr 0FFFFEAh -002F31r 1 EB FF FF .faraddr 0FFFFEBh -002F34r 1 EC FF FF .faraddr 0FFFFECh -002F37r 1 ED FF FF .faraddr 0FFFFEDh -002F3Ar 1 EE FF FF .faraddr 0FFFFEEh -002F3Dr 1 EF FF FF .faraddr 0FFFFEFh -002F40r 1 F0 FF FF .faraddr 0FFFFF0h -002F43r 1 F1 FF FF .faraddr 0FFFFF1h -002F46r 1 F2 FF FF .faraddr 0FFFFF2h -002F49r 1 F3 FF FF .faraddr 0FFFFF3h -002F4Cr 1 F4 FF FF .faraddr 0FFFFF4h -002F4Fr 1 F5 FF FF .faraddr 0FFFFF5h -002F52r 1 F6 FF FF .faraddr 0FFFFF6h -002F55r 1 F7 FF FF .faraddr 0FFFFF7h -002F58r 1 F8 FF FF .faraddr 0FFFFF8h -002F5Br 1 F9 FF FF .faraddr 0FFFFF9h -002F5Er 1 FA FF FF .faraddr 0FFFFFAh -002F61r 1 FB FF FF .faraddr 0FFFFFBh -002F64r 1 FC FF FF .faraddr 0FFFFFCh -002F67r 1 FD FF FF .faraddr 0FFFFFDh -002F6Ar 1 FE FF FF .faraddr 0FFFFFEh -002F6Dr 1 FF FF FF .faraddr 0FFFFFFh +002982r 1 ; alternative hex values, uppercase +002982r 1 00 00 00 .faraddr 0h +002985r 1 01 00 00 .faraddr 1h +002988r 1 02 00 00 .faraddr 2h +00298Br 1 03 00 00 .faraddr 3h +00298Er 1 04 00 00 .faraddr 4h +002991r 1 05 00 00 .faraddr 5h +002994r 1 06 00 00 .faraddr 6h +002997r 1 07 00 00 .faraddr 7h +00299Ar 1 08 00 00 .faraddr 8h +00299Dr 1 09 00 00 .faraddr 9h +0029A0r 1 0A 00 00 .faraddr 0Ah +0029A3r 1 0B 00 00 .faraddr 0Bh +0029A6r 1 0C 00 00 .faraddr 0Ch +0029A9r 1 0D 00 00 .faraddr 0Dh +0029ACr 1 0E 00 00 .faraddr 0Eh +0029AFr 1 0F 00 00 .faraddr 0Fh +0029B2r 1 10 00 00 .faraddr 10h +0029B5r 1 11 00 00 .faraddr 11h +0029B8r 1 12 00 00 .faraddr 12h +0029BBr 1 13 00 00 .faraddr 13h +0029BEr 1 70 00 00 .faraddr 70h +0029C1r 1 71 00 00 .faraddr 71h +0029C4r 1 72 00 00 .faraddr 72h +0029C7r 1 73 00 00 .faraddr 73h +0029CAr 1 74 00 00 .faraddr 74h +0029CDr 1 75 00 00 .faraddr 75h +0029D0r 1 76 00 00 .faraddr 76h +0029D3r 1 77 00 00 .faraddr 77h +0029D6r 1 78 00 00 .faraddr 78h +0029D9r 1 79 00 00 .faraddr 79h +0029DCr 1 7A 00 00 .faraddr 7Ah +0029DFr 1 7B 00 00 .faraddr 7Bh +0029E2r 1 7C 00 00 .faraddr 7Ch +0029E5r 1 7D 00 00 .faraddr 7Dh +0029E8r 1 7E 00 00 .faraddr 7Eh +0029EBr 1 7F 00 00 .faraddr 7Fh +0029EEr 1 80 00 00 .faraddr 80h +0029F1r 1 81 00 00 .faraddr 81h +0029F4r 1 82 00 00 .faraddr 82h +0029F7r 1 83 00 00 .faraddr 83h +0029FAr 1 84 00 00 .faraddr 84h +0029FDr 1 85 00 00 .faraddr 85h +002A00r 1 86 00 00 .faraddr 86h +002A03r 1 F0 00 00 .faraddr 0F0h +002A06r 1 F1 00 00 .faraddr 0F1h +002A09r 1 F2 00 00 .faraddr 0F2h +002A0Cr 1 F3 00 00 .faraddr 0F3h +002A0Fr 1 F4 00 00 .faraddr 0F4h +002A12r 1 F5 00 00 .faraddr 0F5h +002A15r 1 F6 00 00 .faraddr 0F6h +002A18r 1 F7 00 00 .faraddr 0F7h +002A1Br 1 F8 00 00 .faraddr 0F8h +002A1Er 1 F9 00 00 .faraddr 0F9h +002A21r 1 FA 00 00 .faraddr 0FAh +002A24r 1 FB 00 00 .faraddr 0FBh +002A27r 1 FC 00 00 .faraddr 0FCh +002A2Ar 1 FD 00 00 .faraddr 0FDh +002A2Dr 1 FE 00 00 .faraddr 0FEh +002A30r 1 FF 00 00 .faraddr 0FFh +002A33r 1 00 01 00 .faraddr 100h +002A36r 1 01 01 00 .faraddr 101h +002A39r 1 02 01 00 .faraddr 102h +002A3Cr 1 03 01 00 .faraddr 103h +002A3Fr 1 D2 0F 00 .faraddr 0FD2h +002A42r 1 D3 0F 00 .faraddr 0FD3h +002A45r 1 D4 0F 00 .faraddr 0FD4h +002A48r 1 D5 0F 00 .faraddr 0FD5h +002A4Br 1 D6 0F 00 .faraddr 0FD6h +002A4Er 1 D7 0F 00 .faraddr 0FD7h +002A51r 1 D8 0F 00 .faraddr 0FD8h +002A54r 1 D9 0F 00 .faraddr 0FD9h +002A57r 1 DA 0F 00 .faraddr 0FDAh +002A5Ar 1 DB 0F 00 .faraddr 0FDBh +002A5Dr 1 DC 0F 00 .faraddr 0FDCh +002A60r 1 DD 0F 00 .faraddr 0FDDh +002A63r 1 DE 0F 00 .faraddr 0FDEh +002A66r 1 DF 0F 00 .faraddr 0FDFh +002A69r 1 E0 0F 00 .faraddr 0FE0h +002A6Cr 1 E1 0F 00 .faraddr 0FE1h +002A6Fr 1 E2 0F 00 .faraddr 0FE2h +002A72r 1 E3 0F 00 .faraddr 0FE3h +002A75r 1 E4 0F 00 .faraddr 0FE4h +002A78r 1 E5 0F 00 .faraddr 0FE5h +002A7Br 1 E6 0F 00 .faraddr 0FE6h +002A7Er 1 E7 0F 00 .faraddr 0FE7h +002A81r 1 E8 0F 00 .faraddr 0FE8h +002A84r 1 E9 0F 00 .faraddr 0FE9h +002A87r 1 EA 0F 00 .faraddr 0FEAh +002A8Ar 1 EB 0F 00 .faraddr 0FEBh +002A8Dr 1 EC 0F 00 .faraddr 0FECh +002A90r 1 ED 0F 00 .faraddr 0FEDh +002A93r 1 EE 0F 00 .faraddr 0FEEh +002A96r 1 EF 0F 00 .faraddr 0FEFh +002A99r 1 F0 0F 00 .faraddr 0FF0h +002A9Cr 1 F1 0F 00 .faraddr 0FF1h +002A9Fr 1 F2 0F 00 .faraddr 0FF2h +002AA2r 1 F3 0F 00 .faraddr 0FF3h +002AA5r 1 F4 0F 00 .faraddr 0FF4h +002AA8r 1 F5 0F 00 .faraddr 0FF5h +002AABr 1 F6 0F 00 .faraddr 0FF6h +002AAEr 1 F7 0F 00 .faraddr 0FF7h +002AB1r 1 F8 0F 00 .faraddr 0FF8h +002AB4r 1 F9 0F 00 .faraddr 0FF9h +002AB7r 1 FA 0F 00 .faraddr 0FFAh +002ABAr 1 FB 0F 00 .faraddr 0FFBh +002ABDr 1 FC 0F 00 .faraddr 0FFCh +002AC0r 1 FD 0F 00 .faraddr 0FFDh +002AC3r 1 FE 0F 00 .faraddr 0FFEh +002AC6r 1 FF 0F 00 .faraddr 0FFFh +002AC9r 1 00 10 00 .faraddr 1000h +002ACCr 1 01 10 00 .faraddr 1001h +002ACFr 1 02 10 00 .faraddr 1002h +002AD2r 1 03 10 00 .faraddr 1003h +002AD5r 1 04 10 00 .faraddr 1004h +002AD8r 1 05 10 00 .faraddr 1005h +002ADBr 1 06 10 00 .faraddr 1006h +002ADEr 1 07 10 00 .faraddr 1007h +002AE1r 1 08 10 00 .faraddr 1008h +002AE4r 1 F0 7F 00 .faraddr 7FF0h +002AE7r 1 F1 7F 00 .faraddr 7FF1h +002AEAr 1 F2 7F 00 .faraddr 7FF2h +002AEDr 1 F3 7F 00 .faraddr 7FF3h +002AF0r 1 F4 7F 00 .faraddr 7FF4h +002AF3r 1 F5 7F 00 .faraddr 7FF5h +002AF6r 1 F6 7F 00 .faraddr 7FF6h +002AF9r 1 F7 7F 00 .faraddr 7FF7h +002AFCr 1 F8 7F 00 .faraddr 7FF8h +002AFFr 1 F9 7F 00 .faraddr 7FF9h +002B02r 1 FA 7F 00 .faraddr 7FFAh +002B05r 1 FB 7F 00 .faraddr 7FFBh +002B08r 1 FC 7F 00 .faraddr 7FFCh +002B0Br 1 FD 7F 00 .faraddr 7FFDh +002B0Er 1 FE 7F 00 .faraddr 7FFEh +002B11r 1 FF 7F 00 .faraddr 7FFFh +002B14r 1 00 80 00 .faraddr 8000h +002B17r 1 01 80 00 .faraddr 8001h +002B1Ar 1 02 80 00 .faraddr 8002h +002B1Dr 1 03 80 00 .faraddr 8003h +002B20r 1 04 80 00 .faraddr 8004h +002B23r 1 05 80 00 .faraddr 8005h +002B26r 1 06 80 00 .faraddr 8006h +002B29r 1 07 80 00 .faraddr 8007h +002B2Cr 1 08 80 00 .faraddr 8008h +002B2Fr 1 09 80 00 .faraddr 8009h +002B32r 1 0A 80 00 .faraddr 800Ah +002B35r 1 0B 80 00 .faraddr 800Bh +002B38r 1 E1 9F 00 .faraddr 9FE1h +002B3Br 1 E2 9F 00 .faraddr 9FE2h +002B3Er 1 E3 9F 00 .faraddr 9FE3h +002B41r 1 E4 9F 00 .faraddr 9FE4h +002B44r 1 E5 9F 00 .faraddr 9FE5h +002B47r 1 E6 9F 00 .faraddr 9FE6h +002B4Ar 1 E7 9F 00 .faraddr 9FE7h +002B4Dr 1 E8 9F 00 .faraddr 9FE8h +002B50r 1 E9 9F 00 .faraddr 9FE9h +002B53r 1 EA 9F 00 .faraddr 9FEAh +002B56r 1 EB 9F 00 .faraddr 9FEBh +002B59r 1 EC 9F 00 .faraddr 9FECh +002B5Cr 1 ED 9F 00 .faraddr 9FEDh +002B5Fr 1 EE 9F 00 .faraddr 9FEEh +002B62r 1 EF 9F 00 .faraddr 9FEFh +002B65r 1 F0 9F 00 .faraddr 9FF0h +002B68r 1 F1 9F 00 .faraddr 9FF1h +002B6Br 1 F2 9F 00 .faraddr 9FF2h +002B6Er 1 F3 9F 00 .faraddr 9FF3h +002B71r 1 F4 9F 00 .faraddr 9FF4h +002B74r 1 F5 9F 00 .faraddr 9FF5h +002B77r 1 F6 9F 00 .faraddr 9FF6h +002B7Ar 1 F7 9F 00 .faraddr 9FF7h +002B7Dr 1 F8 9F 00 .faraddr 9FF8h +002B80r 1 F9 9F 00 .faraddr 9FF9h +002B83r 1 FA 9F 00 .faraddr 9FFAh +002B86r 1 FB 9F 00 .faraddr 9FFBh +002B89r 1 FC 9F 00 .faraddr 9FFCh +002B8Cr 1 FD 9F 00 .faraddr 9FFDh +002B8Fr 1 FE 9F 00 .faraddr 9FFEh +002B92r 1 FF 9F 00 .faraddr 9FFFh +002B95r 1 00 A0 00 .faraddr 0A000h +002B98r 1 01 A0 00 .faraddr 0A001h +002B9Br 1 02 A0 00 .faraddr 0A002h +002B9Er 1 03 A0 00 .faraddr 0A003h +002BA1r 1 04 A0 00 .faraddr 0A004h +002BA4r 1 05 A0 00 .faraddr 0A005h +002BA7r 1 06 A0 00 .faraddr 0A006h +002BAAr 1 07 A0 00 .faraddr 0A007h +002BADr 1 08 A0 00 .faraddr 0A008h +002BB0r 1 09 A0 00 .faraddr 0A009h +002BB3r 1 0A A0 00 .faraddr 0A00Ah +002BB6r 1 0B A0 00 .faraddr 0A00Bh +002BB9r 1 0C A0 00 .faraddr 0A00Ch +002BBCr 1 0D A0 00 .faraddr 0A00Dh +002BBFr 1 0E A0 00 .faraddr 0A00Eh +002BC2r 1 0F A0 00 .faraddr 0A00Fh +002BC5r 1 E1 AF 00 .faraddr 0AFE1h +002BC8r 1 E2 AF 00 .faraddr 0AFE2h +002BCBr 1 E3 AF 00 .faraddr 0AFE3h +002BCEr 1 E4 AF 00 .faraddr 0AFE4h +002BD1r 1 E5 AF 00 .faraddr 0AFE5h +002BD4r 1 E6 AF 00 .faraddr 0AFE6h +002BD7r 1 E7 AF 00 .faraddr 0AFE7h +002BDAr 1 E8 AF 00 .faraddr 0AFE8h +002BDDr 1 E9 AF 00 .faraddr 0AFE9h +002BE0r 1 EA AF 00 .faraddr 0AFEAh +002BE3r 1 EB AF 00 .faraddr 0AFEBh +002BE6r 1 EC AF 00 .faraddr 0AFECh +002BE9r 1 ED AF 00 .faraddr 0AFEDh +002BECr 1 EE AF 00 .faraddr 0AFEEh +002BEFr 1 EF AF 00 .faraddr 0AFEFh +002BF2r 1 F0 AF 00 .faraddr 0AFF0h +002BF5r 1 F1 AF 00 .faraddr 0AFF1h +002BF8r 1 F2 AF 00 .faraddr 0AFF2h +002BFBr 1 F3 AF 00 .faraddr 0AFF3h +002BFEr 1 F4 AF 00 .faraddr 0AFF4h +002C01r 1 F5 AF 00 .faraddr 0AFF5h +002C04r 1 F6 AF 00 .faraddr 0AFF6h +002C07r 1 F7 AF 00 .faraddr 0AFF7h +002C0Ar 1 F8 AF 00 .faraddr 0AFF8h +002C0Dr 1 F9 AF 00 .faraddr 0AFF9h +002C10r 1 FA AF 00 .faraddr 0AFFAh +002C13r 1 FB AF 00 .faraddr 0AFFBh +002C16r 1 FC AF 00 .faraddr 0AFFCh +002C19r 1 FD AF 00 .faraddr 0AFFDh +002C1Cr 1 FE AF 00 .faraddr 0AFFEh +002C1Fr 1 FF AF 00 .faraddr 0AFFFh +002C22r 1 00 B0 00 .faraddr 0B000h +002C25r 1 01 B0 00 .faraddr 0B001h +002C28r 1 02 B0 00 .faraddr 0B002h +002C2Br 1 03 B0 00 .faraddr 0B003h +002C2Er 1 04 B0 00 .faraddr 0B004h +002C31r 1 05 B0 00 .faraddr 0B005h +002C34r 1 06 B0 00 .faraddr 0B006h +002C37r 1 07 B0 00 .faraddr 0B007h +002C3Ar 1 08 B0 00 .faraddr 0B008h +002C3Dr 1 09 B0 00 .faraddr 0B009h +002C40r 1 0A B0 00 .faraddr 0B00Ah +002C43r 1 0B B0 00 .faraddr 0B00Bh +002C46r 1 0C B0 00 .faraddr 0B00Ch +002C49r 1 0D B0 00 .faraddr 0B00Dh +002C4Cr 1 0E B0 00 .faraddr 0B00Eh +002C4Fr 1 0F B0 00 .faraddr 0B00Fh +002C52r 1 E1 FF 00 .faraddr 0FFE1h +002C55r 1 E2 FF 00 .faraddr 0FFE2h +002C58r 1 E3 FF 00 .faraddr 0FFE3h +002C5Br 1 E4 FF 00 .faraddr 0FFE4h +002C5Er 1 E5 FF 00 .faraddr 0FFE5h +002C61r 1 E6 FF 00 .faraddr 0FFE6h +002C64r 1 E7 FF 00 .faraddr 0FFE7h +002C67r 1 E8 FF 00 .faraddr 0FFE8h +002C6Ar 1 E9 FF 00 .faraddr 0FFE9h +002C6Dr 1 EA FF 00 .faraddr 0FFEAh +002C70r 1 EB FF 00 .faraddr 0FFEBh +002C73r 1 EC FF 00 .faraddr 0FFECh +002C76r 1 ED FF 00 .faraddr 0FFEDh +002C79r 1 EE FF 00 .faraddr 0FFEEh +002C7Cr 1 EF FF 00 .faraddr 0FFEFh +002C7Fr 1 F0 FF 00 .faraddr 0FFF0h +002C82r 1 F1 FF 00 .faraddr 0FFF1h +002C85r 1 F2 FF 00 .faraddr 0FFF2h +002C88r 1 F3 FF 00 .faraddr 0FFF3h +002C8Br 1 F4 FF 00 .faraddr 0FFF4h +002C8Er 1 F5 FF 00 .faraddr 0FFF5h +002C91r 1 F6 FF 00 .faraddr 0FFF6h +002C94r 1 F7 FF 00 .faraddr 0FFF7h +002C97r 1 F8 FF 00 .faraddr 0FFF8h +002C9Ar 1 F9 FF 00 .faraddr 0FFF9h +002C9Dr 1 FA FF 00 .faraddr 0FFFAh +002CA0r 1 FB FF 00 .faraddr 0FFFBh +002CA3r 1 FC FF 00 .faraddr 0FFFCh +002CA6r 1 FD FF 00 .faraddr 0FFFDh +002CA9r 1 FE FF 00 .faraddr 0FFFEh +002CACr 1 FF FF 00 .faraddr 0FFFFh +002CAFr 1 00 00 01 .faraddr 10000h +002CB2r 1 01 00 01 .faraddr 10001h +002CB5r 1 02 00 01 .faraddr 10002h +002CB8r 1 03 00 01 .faraddr 10003h +002CBBr 1 04 00 01 .faraddr 10004h +002CBEr 1 05 00 01 .faraddr 10005h +002CC1r 1 06 00 01 .faraddr 10006h +002CC4r 1 07 00 01 .faraddr 10007h +002CC7r 1 08 00 01 .faraddr 10008h +002CCAr 1 09 00 01 .faraddr 10009h +002CCDr 1 0A 00 01 .faraddr 1000Ah +002CD0r 1 0B 00 01 .faraddr 1000Bh +002CD3r 1 0C 00 01 .faraddr 1000Ch +002CD6r 1 0D 00 01 .faraddr 1000Dh +002CD9r 1 0E 00 01 .faraddr 1000Eh +002CDCr 1 0F 00 01 .faraddr 1000Fh +002CDFr 1 E1 FF 10 .faraddr 10FFE1h +002CE2r 1 E2 FF 10 .faraddr 10FFE2h +002CE5r 1 E3 FF 10 .faraddr 10FFE3h +002CE8r 1 E4 FF 10 .faraddr 10FFE4h +002CEBr 1 E5 FF 10 .faraddr 10FFE5h +002CEEr 1 E6 FF 10 .faraddr 10FFE6h +002CF1r 1 E7 FF 10 .faraddr 10FFE7h +002CF4r 1 E8 FF 10 .faraddr 10FFE8h +002CF7r 1 E9 FF 10 .faraddr 10FFE9h +002CFAr 1 EA FF 10 .faraddr 10FFEAh +002CFDr 1 EB FF 10 .faraddr 10FFEBh +002D00r 1 EC FF 10 .faraddr 10FFECh +002D03r 1 ED FF 10 .faraddr 10FFEDh +002D06r 1 EE FF 10 .faraddr 10FFEEh +002D09r 1 EF FF 10 .faraddr 10FFEFh +002D0Cr 1 F0 FF 10 .faraddr 10FFF0h +002D0Fr 1 F1 FF 10 .faraddr 10FFF1h +002D12r 1 F2 FF 10 .faraddr 10FFF2h +002D15r 1 F3 FF 10 .faraddr 10FFF3h +002D18r 1 F4 FF 10 .faraddr 10FFF4h +002D1Br 1 F5 FF 10 .faraddr 10FFF5h +002D1Er 1 F6 FF 10 .faraddr 10FFF6h +002D21r 1 F7 FF 10 .faraddr 10FFF7h +002D24r 1 F8 FF 10 .faraddr 10FFF8h +002D27r 1 F9 FF 10 .faraddr 10FFF9h +002D2Ar 1 FA FF 10 .faraddr 10FFFAh +002D2Dr 1 FB FF 10 .faraddr 10FFFBh +002D30r 1 FC FF 10 .faraddr 10FFFCh +002D33r 1 FD FF 10 .faraddr 10FFFDh +002D36r 1 FE FF 10 .faraddr 10FFFEh +002D39r 1 FF FF 10 .faraddr 10FFFFh +002D3Cr 1 00 00 11 .faraddr 110000h +002D3Fr 1 01 00 11 .faraddr 110001h +002D42r 1 02 00 11 .faraddr 110002h +002D45r 1 03 00 11 .faraddr 110003h +002D48r 1 04 00 11 .faraddr 110004h +002D4Br 1 05 00 11 .faraddr 110005h +002D4Er 1 06 00 11 .faraddr 110006h +002D51r 1 07 00 11 .faraddr 110007h +002D54r 1 08 00 11 .faraddr 110008h +002D57r 1 09 00 11 .faraddr 110009h +002D5Ar 1 0A 00 11 .faraddr 11000Ah +002D5Dr 1 0B 00 11 .faraddr 11000Bh +002D60r 1 0C 00 11 .faraddr 11000Ch +002D63r 1 0D 00 11 .faraddr 11000Dh +002D66r 1 0E 00 11 .faraddr 11000Eh +002D69r 1 0F 00 11 .faraddr 11000Fh +002D6Cr 1 E1 FF 20 .faraddr 20FFE1h +002D6Fr 1 E2 FF 20 .faraddr 20FFE2h +002D72r 1 E3 FF 20 .faraddr 20FFE3h +002D75r 1 E4 FF 20 .faraddr 20FFE4h +002D78r 1 E5 FF 20 .faraddr 20FFE5h +002D7Br 1 E6 FF 20 .faraddr 20FFE6h +002D7Er 1 E7 FF 20 .faraddr 20FFE7h +002D81r 1 E8 FF 20 .faraddr 20FFE8h +002D84r 1 E9 FF 20 .faraddr 20FFE9h +002D87r 1 EA FF 20 .faraddr 20FFEAh +002D8Ar 1 EB FF 20 .faraddr 20FFEBh +002D8Dr 1 EC FF 20 .faraddr 20FFECh +002D90r 1 ED FF 20 .faraddr 20FFEDh +002D93r 1 EE FF 20 .faraddr 20FFEEh +002D96r 1 EF FF 20 .faraddr 20FFEFh +002D99r 1 F0 FF 20 .faraddr 20FFF0h +002D9Cr 1 F1 FF 20 .faraddr 20FFF1h +002D9Fr 1 F2 FF 20 .faraddr 20FFF2h +002DA2r 1 F3 FF 20 .faraddr 20FFF3h +002DA5r 1 F4 FF 20 .faraddr 20FFF4h +002DA8r 1 F5 FF 20 .faraddr 20FFF5h +002DABr 1 F6 FF 20 .faraddr 20FFF6h +002DAEr 1 F7 FF 20 .faraddr 20FFF7h +002DB1r 1 F8 FF 20 .faraddr 20FFF8h +002DB4r 1 F9 FF 20 .faraddr 20FFF9h +002DB7r 1 FA FF 20 .faraddr 20FFFAh +002DBAr 1 FB FF 20 .faraddr 20FFFBh +002DBDr 1 FC FF 20 .faraddr 20FFFCh +002DC0r 1 FD FF 20 .faraddr 20FFFDh +002DC3r 1 FE FF 20 .faraddr 20FFFEh +002DC6r 1 FF FF 20 .faraddr 20FFFFh +002DC9r 1 00 00 21 .faraddr 210000h +002DCCr 1 01 00 21 .faraddr 210001h +002DCFr 1 02 00 21 .faraddr 210002h +002DD2r 1 03 00 21 .faraddr 210003h +002DD5r 1 04 00 21 .faraddr 210004h +002DD8r 1 05 00 21 .faraddr 210005h +002DDBr 1 06 00 21 .faraddr 210006h +002DDEr 1 07 00 21 .faraddr 210007h +002DE1r 1 08 00 21 .faraddr 210008h +002DE4r 1 09 00 21 .faraddr 210009h +002DE7r 1 0A 00 21 .faraddr 21000Ah +002DEAr 1 0B 00 21 .faraddr 21000Bh +002DEDr 1 0C 00 21 .faraddr 21000Ch +002DF0r 1 0D 00 21 .faraddr 21000Dh +002DF3r 1 0E 00 21 .faraddr 21000Eh +002DF6r 1 0F 00 21 .faraddr 21000Fh +002DF9r 1 E1 FF 7F .faraddr 7FFFE1h +002DFCr 1 E2 FF 7F .faraddr 7FFFE2h +002DFFr 1 E3 FF 7F .faraddr 7FFFE3h +002E02r 1 E4 FF 7F .faraddr 7FFFE4h +002E05r 1 E5 FF 7F .faraddr 7FFFE5h +002E08r 1 E6 FF 7F .faraddr 7FFFE6h +002E0Br 1 E7 FF 7F .faraddr 7FFFE7h +002E0Er 1 E8 FF 7F .faraddr 7FFFE8h +002E11r 1 E9 FF 7F .faraddr 7FFFE9h +002E14r 1 EA FF 7F .faraddr 7FFFEAh +002E17r 1 EB FF 7F .faraddr 7FFFEBh +002E1Ar 1 EC FF 7F .faraddr 7FFFECh +002E1Dr 1 ED FF 7F .faraddr 7FFFEDh +002E20r 1 EE FF 7F .faraddr 7FFFEEh +002E23r 1 EF FF 7F .faraddr 7FFFEFh +002E26r 1 F0 FF 7F .faraddr 7FFFF0h +002E29r 1 F1 FF 7F .faraddr 7FFFF1h +002E2Cr 1 F2 FF 7F .faraddr 7FFFF2h +002E2Fr 1 F3 FF 7F .faraddr 7FFFF3h +002E32r 1 F4 FF 7F .faraddr 7FFFF4h +002E35r 1 F5 FF 7F .faraddr 7FFFF5h +002E38r 1 F6 FF 7F .faraddr 7FFFF6h +002E3Br 1 F7 FF 7F .faraddr 7FFFF7h +002E3Er 1 F8 FF 7F .faraddr 7FFFF8h +002E41r 1 F9 FF 7F .faraddr 7FFFF9h +002E44r 1 FA FF 7F .faraddr 7FFFFAh +002E47r 1 FB FF 7F .faraddr 7FFFFBh +002E4Ar 1 FC FF 7F .faraddr 7FFFFCh +002E4Dr 1 FD FF 7F .faraddr 7FFFFDh +002E50r 1 FE FF 7F .faraddr 7FFFFEh +002E53r 1 FF FF 7F .faraddr 7FFFFFh +002E56r 1 00 00 80 .faraddr 800000h +002E59r 1 01 00 80 .faraddr 800001h +002E5Cr 1 02 00 80 .faraddr 800002h +002E5Fr 1 03 00 80 .faraddr 800003h +002E62r 1 04 00 80 .faraddr 800004h +002E65r 1 05 00 80 .faraddr 800005h +002E68r 1 06 00 80 .faraddr 800006h +002E6Br 1 07 00 80 .faraddr 800007h +002E6Er 1 08 00 80 .faraddr 800008h +002E71r 1 09 00 80 .faraddr 800009h +002E74r 1 0A 00 80 .faraddr 80000Ah +002E77r 1 0B 00 80 .faraddr 80000Bh +002E7Ar 1 0C 00 80 .faraddr 80000Ch +002E7Dr 1 0D 00 80 .faraddr 80000Dh +002E80r 1 0E 00 80 .faraddr 80000Eh +002E83r 1 0F 00 80 .faraddr 80000Fh +002E86r 1 E1 FF 9F .faraddr 9FFFE1h +002E89r 1 E2 FF 9F .faraddr 9FFFE2h +002E8Cr 1 E3 FF 9F .faraddr 9FFFE3h +002E8Fr 1 E4 FF 9F .faraddr 9FFFE4h +002E92r 1 E5 FF 9F .faraddr 9FFFE5h +002E95r 1 E6 FF 9F .faraddr 9FFFE6h +002E98r 1 E7 FF 9F .faraddr 9FFFE7h +002E9Br 1 E8 FF 9F .faraddr 9FFFE8h +002E9Er 1 E9 FF 9F .faraddr 9FFFE9h +002EA1r 1 EA FF 9F .faraddr 9FFFEAh +002EA4r 1 EB FF 9F .faraddr 9FFFEBh +002EA7r 1 EC FF 9F .faraddr 9FFFECh +002EAAr 1 ED FF 9F .faraddr 9FFFEDh +002EADr 1 EE FF 9F .faraddr 9FFFEEh +002EB0r 1 EF FF 9F .faraddr 9FFFEFh +002EB3r 1 F0 FF 9F .faraddr 9FFFF0h +002EB6r 1 F1 FF 9F .faraddr 9FFFF1h +002EB9r 1 F2 FF 9F .faraddr 9FFFF2h +002EBCr 1 F3 FF 9F .faraddr 9FFFF3h +002EBFr 1 F4 FF 9F .faraddr 9FFFF4h +002EC2r 1 F5 FF 9F .faraddr 9FFFF5h +002EC5r 1 F6 FF 9F .faraddr 9FFFF6h +002EC8r 1 F7 FF 9F .faraddr 9FFFF7h +002ECBr 1 F8 FF 9F .faraddr 9FFFF8h +002ECEr 1 F9 FF 9F .faraddr 9FFFF9h +002ED1r 1 FA FF 9F .faraddr 9FFFFAh +002ED4r 1 FB FF 9F .faraddr 9FFFFBh +002ED7r 1 FC FF 9F .faraddr 9FFFFCh +002EDAr 1 FD FF 9F .faraddr 9FFFFDh +002EDDr 1 FE FF 9F .faraddr 9FFFFEh +002EE0r 1 FF FF 9F .faraddr 9FFFFFh +002EE3r 1 00 00 A0 .faraddr 0A00000h +002EE6r 1 01 00 A0 .faraddr 0A00001h +002EE9r 1 02 00 A0 .faraddr 0A00002h +002EECr 1 03 00 A0 .faraddr 0A00003h +002EEFr 1 04 00 A0 .faraddr 0A00004h +002EF2r 1 05 00 A0 .faraddr 0A00005h +002EF5r 1 06 00 A0 .faraddr 0A00006h +002EF8r 1 07 00 A0 .faraddr 0A00007h +002EFBr 1 08 00 A0 .faraddr 0A00008h +002EFEr 1 09 00 A0 .faraddr 0A00009h +002F01r 1 0A 00 A0 .faraddr 0A0000Ah +002F04r 1 0B 00 A0 .faraddr 0A0000Bh +002F07r 1 0C 00 A0 .faraddr 0A0000Ch +002F0Ar 1 0D 00 A0 .faraddr 0A0000Dh +002F0Dr 1 0E 00 A0 .faraddr 0A0000Eh +002F10r 1 0F 00 A0 .faraddr 0A0000Fh +002F13r 1 E1 FF FF .faraddr 0FFFFE1h +002F16r 1 E2 FF FF .faraddr 0FFFFE2h +002F19r 1 E3 FF FF .faraddr 0FFFFE3h +002F1Cr 1 E4 FF FF .faraddr 0FFFFE4h +002F1Fr 1 E5 FF FF .faraddr 0FFFFE5h +002F22r 1 E6 FF FF .faraddr 0FFFFE6h +002F25r 1 E7 FF FF .faraddr 0FFFFE7h +002F28r 1 E8 FF FF .faraddr 0FFFFE8h +002F2Br 1 E9 FF FF .faraddr 0FFFFE9h +002F2Er 1 EA FF FF .faraddr 0FFFFEAh +002F31r 1 EB FF FF .faraddr 0FFFFEBh +002F34r 1 EC FF FF .faraddr 0FFFFECh +002F37r 1 ED FF FF .faraddr 0FFFFEDh +002F3Ar 1 EE FF FF .faraddr 0FFFFEEh +002F3Dr 1 EF FF FF .faraddr 0FFFFEFh +002F40r 1 F0 FF FF .faraddr 0FFFFF0h +002F43r 1 F1 FF FF .faraddr 0FFFFF1h +002F46r 1 F2 FF FF .faraddr 0FFFFF2h +002F49r 1 F3 FF FF .faraddr 0FFFFF3h +002F4Cr 1 F4 FF FF .faraddr 0FFFFF4h +002F4Fr 1 F5 FF FF .faraddr 0FFFFF5h +002F52r 1 F6 FF FF .faraddr 0FFFFF6h +002F55r 1 F7 FF FF .faraddr 0FFFFF7h +002F58r 1 F8 FF FF .faraddr 0FFFFF8h +002F5Br 1 F9 FF FF .faraddr 0FFFFF9h +002F5Er 1 FA FF FF .faraddr 0FFFFFAh +002F61r 1 FB FF FF .faraddr 0FFFFFBh +002F64r 1 FC FF FF .faraddr 0FFFFFCh +002F67r 1 FD FF FF .faraddr 0FFFFFDh +002F6Ar 1 FE FF FF .faraddr 0FFFFFEh +002F6Dr 1 FF FF FF .faraddr 0FFFFFFh 002F70r 1 -002F70r 1 ; alternative 8-digit hex values -002F70r 1 00 00 00 .faraddr 00000000h -002F73r 1 01 00 00 .faraddr 00000001h -002F76r 1 02 00 00 .faraddr 00000002h -002F79r 1 03 00 00 .faraddr 00000003h -002F7Cr 1 04 00 00 .faraddr 00000004h -002F7Fr 1 05 00 00 .faraddr 00000005h -002F82r 1 06 00 00 .faraddr 00000006h -002F85r 1 07 00 00 .faraddr 00000007h -002F88r 1 08 00 00 .faraddr 00000008h -002F8Br 1 09 00 00 .faraddr 00000009h -002F8Er 1 0A 00 00 .faraddr 0000000ah -002F91r 1 0B 00 00 .faraddr 0000000bh -002F94r 1 0C 00 00 .faraddr 0000000ch -002F97r 1 0D 00 00 .faraddr 0000000dh -002F9Ar 1 0E 00 00 .faraddr 0000000eh -002F9Dr 1 0F 00 00 .faraddr 0000000fh -002FA0r 1 10 00 00 .faraddr 00000010h -002FA3r 1 11 00 00 .faraddr 00000011h -002FA6r 1 12 00 00 .faraddr 00000012h -002FA9r 1 13 00 00 .faraddr 00000013h -002FACr 1 70 00 00 .faraddr 00000070h -002FAFr 1 71 00 00 .faraddr 00000071h -002FB2r 1 72 00 00 .faraddr 00000072h -002FB5r 1 73 00 00 .faraddr 00000073h -002FB8r 1 74 00 00 .faraddr 00000074h -002FBBr 1 75 00 00 .faraddr 00000075h -002FBEr 1 76 00 00 .faraddr 00000076h -002FC1r 1 77 00 00 .faraddr 00000077h -002FC4r 1 78 00 00 .faraddr 00000078h -002FC7r 1 79 00 00 .faraddr 00000079h -002FCAr 1 7A 00 00 .faraddr 0000007ah -002FCDr 1 7B 00 00 .faraddr 0000007bh -002FD0r 1 7C 00 00 .faraddr 0000007ch -002FD3r 1 7D 00 00 .faraddr 0000007dh -002FD6r 1 7E 00 00 .faraddr 0000007eh -002FD9r 1 7F 00 00 .faraddr 0000007fh -002FDCr 1 80 00 00 .faraddr 00000080h -002FDFr 1 81 00 00 .faraddr 00000081h -002FE2r 1 82 00 00 .faraddr 00000082h -002FE5r 1 83 00 00 .faraddr 00000083h -002FE8r 1 84 00 00 .faraddr 00000084h -002FEBr 1 85 00 00 .faraddr 00000085h -002FEEr 1 86 00 00 .faraddr 00000086h -002FF1r 1 F0 00 00 .faraddr 000000f0h -002FF4r 1 F1 00 00 .faraddr 000000f1h -002FF7r 1 F2 00 00 .faraddr 000000f2h -002FFAr 1 F3 00 00 .faraddr 000000f3h -002FFDr 1 F4 00 00 .faraddr 000000f4h -003000r 1 F5 00 00 .faraddr 000000f5h -003003r 1 F6 00 00 .faraddr 000000f6h -003006r 1 F7 00 00 .faraddr 000000f7h -003009r 1 F8 00 00 .faraddr 000000f8h -00300Cr 1 F9 00 00 .faraddr 000000f9h -00300Fr 1 FA 00 00 .faraddr 000000fah -003012r 1 FB 00 00 .faraddr 000000fbh -003015r 1 FC 00 00 .faraddr 000000fch -003018r 1 FD 00 00 .faraddr 000000fdh -00301Br 1 FE 00 00 .faraddr 000000feh -00301Er 1 FF 00 00 .faraddr 000000ffh -003021r 1 00 01 00 .faraddr 00000100h -003024r 1 01 01 00 .faraddr 00000101h -003027r 1 02 01 00 .faraddr 00000102h -00302Ar 1 03 01 00 .faraddr 00000103h -00302Dr 1 D2 0F 00 .faraddr 00000fd2h -003030r 1 D3 0F 00 .faraddr 00000fd3h -003033r 1 D4 0F 00 .faraddr 00000fd4h -003036r 1 D5 0F 00 .faraddr 00000fd5h -003039r 1 D6 0F 00 .faraddr 00000fd6h -00303Cr 1 D7 0F 00 .faraddr 00000fd7h -00303Fr 1 D8 0F 00 .faraddr 00000fd8h -003042r 1 D9 0F 00 .faraddr 00000fd9h -003045r 1 DA 0F 00 .faraddr 00000fdah -003048r 1 DB 0F 00 .faraddr 00000fdbh -00304Br 1 DC 0F 00 .faraddr 00000fdch -00304Er 1 DD 0F 00 .faraddr 00000fddh -003051r 1 DE 0F 00 .faraddr 00000fdeh -003054r 1 DF 0F 00 .faraddr 00000fdfh -003057r 1 E0 0F 00 .faraddr 00000fe0h -00305Ar 1 E1 0F 00 .faraddr 00000fe1h -00305Dr 1 E2 0F 00 .faraddr 00000fe2h -003060r 1 E3 0F 00 .faraddr 00000fe3h -003063r 1 E4 0F 00 .faraddr 00000fe4h -003066r 1 E5 0F 00 .faraddr 00000fe5h -003069r 1 E6 0F 00 .faraddr 00000fe6h -00306Cr 1 E7 0F 00 .faraddr 00000fe7h -00306Fr 1 E8 0F 00 .faraddr 00000fe8h -003072r 1 E9 0F 00 .faraddr 00000fe9h -003075r 1 EA 0F 00 .faraddr 00000feah -003078r 1 EB 0F 00 .faraddr 00000febh -00307Br 1 EC 0F 00 .faraddr 00000fech -00307Er 1 ED 0F 00 .faraddr 00000fedh -003081r 1 EE 0F 00 .faraddr 00000feeh -003084r 1 EF 0F 00 .faraddr 00000fefh -003087r 1 F0 0F 00 .faraddr 00000ff0h -00308Ar 1 F1 0F 00 .faraddr 00000ff1h -00308Dr 1 F2 0F 00 .faraddr 00000ff2h -003090r 1 F3 0F 00 .faraddr 00000ff3h -003093r 1 F4 0F 00 .faraddr 00000ff4h -003096r 1 F5 0F 00 .faraddr 00000ff5h -003099r 1 F6 0F 00 .faraddr 00000ff6h -00309Cr 1 F7 0F 00 .faraddr 00000ff7h -00309Fr 1 F8 0F 00 .faraddr 00000ff8h -0030A2r 1 F9 0F 00 .faraddr 00000ff9h -0030A5r 1 FA 0F 00 .faraddr 00000ffah -0030A8r 1 FB 0F 00 .faraddr 00000ffbh -0030ABr 1 FC 0F 00 .faraddr 00000ffch -0030AEr 1 FD 0F 00 .faraddr 00000ffdh -0030B1r 1 FE 0F 00 .faraddr 00000ffeh -0030B4r 1 FF 0F 00 .faraddr 00000fffh -0030B7r 1 00 10 00 .faraddr 00001000h -0030BAr 1 01 10 00 .faraddr 00001001h -0030BDr 1 02 10 00 .faraddr 00001002h -0030C0r 1 03 10 00 .faraddr 00001003h -0030C3r 1 04 10 00 .faraddr 00001004h -0030C6r 1 05 10 00 .faraddr 00001005h -0030C9r 1 06 10 00 .faraddr 00001006h -0030CCr 1 07 10 00 .faraddr 00001007h -0030CFr 1 08 10 00 .faraddr 00001008h -0030D2r 1 F0 7F 00 .faraddr 00007ff0h -0030D5r 1 F1 7F 00 .faraddr 00007ff1h -0030D8r 1 F2 7F 00 .faraddr 00007ff2h -0030DBr 1 F3 7F 00 .faraddr 00007ff3h -0030DEr 1 F4 7F 00 .faraddr 00007ff4h -0030E1r 1 F5 7F 00 .faraddr 00007ff5h -0030E4r 1 F6 7F 00 .faraddr 00007ff6h -0030E7r 1 F7 7F 00 .faraddr 00007ff7h -0030EAr 1 F8 7F 00 .faraddr 00007ff8h -0030EDr 1 F9 7F 00 .faraddr 00007ff9h -0030F0r 1 FA 7F 00 .faraddr 00007ffah -0030F3r 1 FB 7F 00 .faraddr 00007ffbh -0030F6r 1 FC 7F 00 .faraddr 00007ffch -0030F9r 1 FD 7F 00 .faraddr 00007ffdh -0030FCr 1 FE 7F 00 .faraddr 00007ffeh -0030FFr 1 FF 7F 00 .faraddr 00007fffh -003102r 1 00 80 00 .faraddr 00008000h -003105r 1 01 80 00 .faraddr 00008001h -003108r 1 02 80 00 .faraddr 00008002h -00310Br 1 03 80 00 .faraddr 00008003h -00310Er 1 04 80 00 .faraddr 00008004h -003111r 1 05 80 00 .faraddr 00008005h -003114r 1 06 80 00 .faraddr 00008006h -003117r 1 07 80 00 .faraddr 00008007h -00311Ar 1 08 80 00 .faraddr 00008008h -00311Dr 1 09 80 00 .faraddr 00008009h -003120r 1 0A 80 00 .faraddr 0000800ah -003123r 1 0B 80 00 .faraddr 0000800bh -003126r 1 E1 9F 00 .faraddr 00009fe1h -003129r 1 E2 9F 00 .faraddr 00009fe2h -00312Cr 1 E3 9F 00 .faraddr 00009fe3h -00312Fr 1 E4 9F 00 .faraddr 00009fe4h -003132r 1 E5 9F 00 .faraddr 00009fe5h -003135r 1 E6 9F 00 .faraddr 00009fe6h -003138r 1 E7 9F 00 .faraddr 00009fe7h -00313Br 1 E8 9F 00 .faraddr 00009fe8h -00313Er 1 E9 9F 00 .faraddr 00009fe9h -003141r 1 EA 9F 00 .faraddr 00009feah -003144r 1 EB 9F 00 .faraddr 00009febh -003147r 1 EC 9F 00 .faraddr 00009fech -00314Ar 1 ED 9F 00 .faraddr 00009fedh -00314Dr 1 EE 9F 00 .faraddr 00009feeh -003150r 1 EF 9F 00 .faraddr 00009fefh -003153r 1 F0 9F 00 .faraddr 00009ff0h -003156r 1 F1 9F 00 .faraddr 00009ff1h -003159r 1 F2 9F 00 .faraddr 00009ff2h -00315Cr 1 F3 9F 00 .faraddr 00009ff3h -00315Fr 1 F4 9F 00 .faraddr 00009ff4h -003162r 1 F5 9F 00 .faraddr 00009ff5h -003165r 1 F6 9F 00 .faraddr 00009ff6h -003168r 1 F7 9F 00 .faraddr 00009ff7h -00316Br 1 F8 9F 00 .faraddr 00009ff8h -00316Er 1 F9 9F 00 .faraddr 00009ff9h -003171r 1 FA 9F 00 .faraddr 00009ffah -003174r 1 FB 9F 00 .faraddr 00009ffbh -003177r 1 FC 9F 00 .faraddr 00009ffch -00317Ar 1 FD 9F 00 .faraddr 00009ffdh -00317Dr 1 FE 9F 00 .faraddr 00009ffeh -003180r 1 FF 9F 00 .faraddr 00009fffh -003183r 1 00 A0 00 .faraddr 0000a000h -003186r 1 01 A0 00 .faraddr 0000a001h -003189r 1 02 A0 00 .faraddr 0000a002h -00318Cr 1 03 A0 00 .faraddr 0000a003h -00318Fr 1 04 A0 00 .faraddr 0000a004h -003192r 1 05 A0 00 .faraddr 0000a005h -003195r 1 06 A0 00 .faraddr 0000a006h -003198r 1 07 A0 00 .faraddr 0000a007h -00319Br 1 08 A0 00 .faraddr 0000a008h -00319Er 1 09 A0 00 .faraddr 0000a009h -0031A1r 1 0A A0 00 .faraddr 0000a00ah -0031A4r 1 0B A0 00 .faraddr 0000a00bh -0031A7r 1 0C A0 00 .faraddr 0000a00ch -0031AAr 1 0D A0 00 .faraddr 0000a00dh -0031ADr 1 0E A0 00 .faraddr 0000a00eh -0031B0r 1 0F A0 00 .faraddr 0000a00fh -0031B3r 1 E1 AF 00 .faraddr 0000afe1h -0031B6r 1 E2 AF 00 .faraddr 0000afe2h -0031B9r 1 E3 AF 00 .faraddr 0000afe3h -0031BCr 1 E4 AF 00 .faraddr 0000afe4h -0031BFr 1 E5 AF 00 .faraddr 0000afe5h -0031C2r 1 E6 AF 00 .faraddr 0000afe6h -0031C5r 1 E7 AF 00 .faraddr 0000afe7h -0031C8r 1 E8 AF 00 .faraddr 0000afe8h -0031CBr 1 E9 AF 00 .faraddr 0000afe9h -0031CEr 1 EA AF 00 .faraddr 0000afeah -0031D1r 1 EB AF 00 .faraddr 0000afebh -0031D4r 1 EC AF 00 .faraddr 0000afech -0031D7r 1 ED AF 00 .faraddr 0000afedh -0031DAr 1 EE AF 00 .faraddr 0000afeeh -0031DDr 1 EF AF 00 .faraddr 0000afefh -0031E0r 1 F0 AF 00 .faraddr 0000aff0h -0031E3r 1 F1 AF 00 .faraddr 0000aff1h -0031E6r 1 F2 AF 00 .faraddr 0000aff2h -0031E9r 1 F3 AF 00 .faraddr 0000aff3h -0031ECr 1 F4 AF 00 .faraddr 0000aff4h -0031EFr 1 F5 AF 00 .faraddr 0000aff5h -0031F2r 1 F6 AF 00 .faraddr 0000aff6h -0031F5r 1 F7 AF 00 .faraddr 0000aff7h -0031F8r 1 F8 AF 00 .faraddr 0000aff8h -0031FBr 1 F9 AF 00 .faraddr 0000aff9h -0031FEr 1 FA AF 00 .faraddr 0000affah -003201r 1 FB AF 00 .faraddr 0000affbh -003204r 1 FC AF 00 .faraddr 0000affch -003207r 1 FD AF 00 .faraddr 0000affdh -00320Ar 1 FE AF 00 .faraddr 0000affeh -00320Dr 1 FF AF 00 .faraddr 0000afffh -003210r 1 00 B0 00 .faraddr 0000b000h -003213r 1 01 B0 00 .faraddr 0000b001h -003216r 1 02 B0 00 .faraddr 0000b002h -003219r 1 03 B0 00 .faraddr 0000b003h -00321Cr 1 04 B0 00 .faraddr 0000b004h -00321Fr 1 05 B0 00 .faraddr 0000b005h -003222r 1 06 B0 00 .faraddr 0000b006h -003225r 1 07 B0 00 .faraddr 0000b007h -003228r 1 08 B0 00 .faraddr 0000b008h -00322Br 1 09 B0 00 .faraddr 0000b009h -00322Er 1 0A B0 00 .faraddr 0000b00ah -003231r 1 0B B0 00 .faraddr 0000b00bh -003234r 1 0C B0 00 .faraddr 0000b00ch -003237r 1 0D B0 00 .faraddr 0000b00dh -00323Ar 1 0E B0 00 .faraddr 0000b00eh -00323Dr 1 0F B0 00 .faraddr 0000b00fh -003240r 1 E1 FF 00 .faraddr 0000ffe1h -003243r 1 E2 FF 00 .faraddr 0000ffe2h -003246r 1 E3 FF 00 .faraddr 0000ffe3h -003249r 1 E4 FF 00 .faraddr 0000ffe4h -00324Cr 1 E5 FF 00 .faraddr 0000ffe5h -00324Fr 1 E6 FF 00 .faraddr 0000ffe6h -003252r 1 E7 FF 00 .faraddr 0000ffe7h -003255r 1 E8 FF 00 .faraddr 0000ffe8h -003258r 1 E9 FF 00 .faraddr 0000ffe9h -00325Br 1 EA FF 00 .faraddr 0000ffeah -00325Er 1 EB FF 00 .faraddr 0000ffebh -003261r 1 EC FF 00 .faraddr 0000ffech -003264r 1 ED FF 00 .faraddr 0000ffedh -003267r 1 EE FF 00 .faraddr 0000ffeeh -00326Ar 1 EF FF 00 .faraddr 0000ffefh -00326Dr 1 F0 FF 00 .faraddr 0000fff0h -003270r 1 F1 FF 00 .faraddr 0000fff1h -003273r 1 F2 FF 00 .faraddr 0000fff2h -003276r 1 F3 FF 00 .faraddr 0000fff3h -003279r 1 F4 FF 00 .faraddr 0000fff4h -00327Cr 1 F5 FF 00 .faraddr 0000fff5h -00327Fr 1 F6 FF 00 .faraddr 0000fff6h -003282r 1 F7 FF 00 .faraddr 0000fff7h -003285r 1 F8 FF 00 .faraddr 0000fff8h -003288r 1 F9 FF 00 .faraddr 0000fff9h -00328Br 1 FA FF 00 .faraddr 0000fffah -00328Er 1 FB FF 00 .faraddr 0000fffbh -003291r 1 FC FF 00 .faraddr 0000fffch -003294r 1 FD FF 00 .faraddr 0000fffdh -003297r 1 FE FF 00 .faraddr 0000fffeh -00329Ar 1 FF FF 00 .faraddr 0000ffffh -00329Dr 1 00 00 01 .faraddr 00010000h -0032A0r 1 01 00 01 .faraddr 00010001h -0032A3r 1 02 00 01 .faraddr 00010002h -0032A6r 1 03 00 01 .faraddr 00010003h -0032A9r 1 04 00 01 .faraddr 00010004h -0032ACr 1 05 00 01 .faraddr 00010005h -0032AFr 1 06 00 01 .faraddr 00010006h -0032B2r 1 07 00 01 .faraddr 00010007h -0032B5r 1 08 00 01 .faraddr 00010008h -0032B8r 1 09 00 01 .faraddr 00010009h -0032BBr 1 0A 00 01 .faraddr 0001000ah -0032BEr 1 0B 00 01 .faraddr 0001000bh -0032C1r 1 0C 00 01 .faraddr 0001000ch -0032C4r 1 0D 00 01 .faraddr 0001000dh -0032C7r 1 0E 00 01 .faraddr 0001000eh -0032CAr 1 0F 00 01 .faraddr 0001000fh -0032CDr 1 E1 FF 10 .faraddr 0010ffe1h -0032D0r 1 E2 FF 10 .faraddr 0010ffe2h -0032D3r 1 E3 FF 10 .faraddr 0010ffe3h -0032D6r 1 E4 FF 10 .faraddr 0010ffe4h -0032D9r 1 E5 FF 10 .faraddr 0010ffe5h -0032DCr 1 E6 FF 10 .faraddr 0010ffe6h -0032DFr 1 E7 FF 10 .faraddr 0010ffe7h -0032E2r 1 E8 FF 10 .faraddr 0010ffe8h -0032E5r 1 E9 FF 10 .faraddr 0010ffe9h -0032E8r 1 EA FF 10 .faraddr 0010ffeah -0032EBr 1 EB FF 10 .faraddr 0010ffebh -0032EEr 1 EC FF 10 .faraddr 0010ffech -0032F1r 1 ED FF 10 .faraddr 0010ffedh -0032F4r 1 EE FF 10 .faraddr 0010ffeeh -0032F7r 1 EF FF 10 .faraddr 0010ffefh -0032FAr 1 F0 FF 10 .faraddr 0010fff0h -0032FDr 1 F1 FF 10 .faraddr 0010fff1h -003300r 1 F2 FF 10 .faraddr 0010fff2h -003303r 1 F3 FF 10 .faraddr 0010fff3h -003306r 1 F4 FF 10 .faraddr 0010fff4h -003309r 1 F5 FF 10 .faraddr 0010fff5h -00330Cr 1 F6 FF 10 .faraddr 0010fff6h -00330Fr 1 F7 FF 10 .faraddr 0010fff7h -003312r 1 F8 FF 10 .faraddr 0010fff8h -003315r 1 F9 FF 10 .faraddr 0010fff9h -003318r 1 FA FF 10 .faraddr 0010fffah -00331Br 1 FB FF 10 .faraddr 0010fffbh -00331Er 1 FC FF 10 .faraddr 0010fffch -003321r 1 FD FF 10 .faraddr 0010fffdh -003324r 1 FE FF 10 .faraddr 0010fffeh -003327r 1 FF FF 10 .faraddr 0010ffffh -00332Ar 1 00 00 11 .faraddr 00110000h -00332Dr 1 01 00 11 .faraddr 00110001h -003330r 1 02 00 11 .faraddr 00110002h -003333r 1 03 00 11 .faraddr 00110003h -003336r 1 04 00 11 .faraddr 00110004h -003339r 1 05 00 11 .faraddr 00110005h -00333Cr 1 06 00 11 .faraddr 00110006h -00333Fr 1 07 00 11 .faraddr 00110007h -003342r 1 08 00 11 .faraddr 00110008h -003345r 1 09 00 11 .faraddr 00110009h -003348r 1 0A 00 11 .faraddr 0011000ah -00334Br 1 0B 00 11 .faraddr 0011000bh -00334Er 1 0C 00 11 .faraddr 0011000ch -003351r 1 0D 00 11 .faraddr 0011000dh -003354r 1 0E 00 11 .faraddr 0011000eh -003357r 1 0F 00 11 .faraddr 0011000fh -00335Ar 1 E1 FF 20 .faraddr 0020ffe1h -00335Dr 1 E2 FF 20 .faraddr 0020ffe2h -003360r 1 E3 FF 20 .faraddr 0020ffe3h -003363r 1 E4 FF 20 .faraddr 0020ffe4h -003366r 1 E5 FF 20 .faraddr 0020ffe5h -003369r 1 E6 FF 20 .faraddr 0020ffe6h -00336Cr 1 E7 FF 20 .faraddr 0020ffe7h -00336Fr 1 E8 FF 20 .faraddr 0020ffe8h -003372r 1 E9 FF 20 .faraddr 0020ffe9h -003375r 1 EA FF 20 .faraddr 0020ffeah -003378r 1 EB FF 20 .faraddr 0020ffebh -00337Br 1 EC FF 20 .faraddr 0020ffech -00337Er 1 ED FF 20 .faraddr 0020ffedh -003381r 1 EE FF 20 .faraddr 0020ffeeh -003384r 1 EF FF 20 .faraddr 0020ffefh -003387r 1 F0 FF 20 .faraddr 0020fff0h -00338Ar 1 F1 FF 20 .faraddr 0020fff1h -00338Dr 1 F2 FF 20 .faraddr 0020fff2h -003390r 1 F3 FF 20 .faraddr 0020fff3h -003393r 1 F4 FF 20 .faraddr 0020fff4h -003396r 1 F5 FF 20 .faraddr 0020fff5h -003399r 1 F6 FF 20 .faraddr 0020fff6h -00339Cr 1 F7 FF 20 .faraddr 0020fff7h -00339Fr 1 F8 FF 20 .faraddr 0020fff8h -0033A2r 1 F9 FF 20 .faraddr 0020fff9h -0033A5r 1 FA FF 20 .faraddr 0020fffah -0033A8r 1 FB FF 20 .faraddr 0020fffbh -0033ABr 1 FC FF 20 .faraddr 0020fffch -0033AEr 1 FD FF 20 .faraddr 0020fffdh -0033B1r 1 FE FF 20 .faraddr 0020fffeh -0033B4r 1 FF FF 20 .faraddr 0020ffffh -0033B7r 1 00 00 21 .faraddr 00210000h -0033BAr 1 01 00 21 .faraddr 00210001h -0033BDr 1 02 00 21 .faraddr 00210002h -0033C0r 1 03 00 21 .faraddr 00210003h -0033C3r 1 04 00 21 .faraddr 00210004h -0033C6r 1 05 00 21 .faraddr 00210005h -0033C9r 1 06 00 21 .faraddr 00210006h -0033CCr 1 07 00 21 .faraddr 00210007h -0033CFr 1 08 00 21 .faraddr 00210008h -0033D2r 1 09 00 21 .faraddr 00210009h -0033D5r 1 0A 00 21 .faraddr 0021000ah -0033D8r 1 0B 00 21 .faraddr 0021000bh -0033DBr 1 0C 00 21 .faraddr 0021000ch -0033DEr 1 0D 00 21 .faraddr 0021000dh -0033E1r 1 0E 00 21 .faraddr 0021000eh -0033E4r 1 0F 00 21 .faraddr 0021000fh -0033E7r 1 E1 FF 7F .faraddr 007fffe1h -0033EAr 1 E2 FF 7F .faraddr 007fffe2h -0033EDr 1 E3 FF 7F .faraddr 007fffe3h -0033F0r 1 E4 FF 7F .faraddr 007fffe4h -0033F3r 1 E5 FF 7F .faraddr 007fffe5h -0033F6r 1 E6 FF 7F .faraddr 007fffe6h -0033F9r 1 E7 FF 7F .faraddr 007fffe7h -0033FCr 1 E8 FF 7F .faraddr 007fffe8h -0033FFr 1 E9 FF 7F .faraddr 007fffe9h -003402r 1 EA FF 7F .faraddr 007fffeah -003405r 1 EB FF 7F .faraddr 007fffebh -003408r 1 EC FF 7F .faraddr 007fffech -00340Br 1 ED FF 7F .faraddr 007fffedh -00340Er 1 EE FF 7F .faraddr 007fffeeh -003411r 1 EF FF 7F .faraddr 007fffefh -003414r 1 F0 FF 7F .faraddr 007ffff0h -003417r 1 F1 FF 7F .faraddr 007ffff1h -00341Ar 1 F2 FF 7F .faraddr 007ffff2h -00341Dr 1 F3 FF 7F .faraddr 007ffff3h -003420r 1 F4 FF 7F .faraddr 007ffff4h -003423r 1 F5 FF 7F .faraddr 007ffff5h -003426r 1 F6 FF 7F .faraddr 007ffff6h -003429r 1 F7 FF 7F .faraddr 007ffff7h -00342Cr 1 F8 FF 7F .faraddr 007ffff8h -00342Fr 1 F9 FF 7F .faraddr 007ffff9h -003432r 1 FA FF 7F .faraddr 007ffffah -003435r 1 FB FF 7F .faraddr 007ffffbh -003438r 1 FC FF 7F .faraddr 007ffffch -00343Br 1 FD FF 7F .faraddr 007ffffdh -00343Er 1 FE FF 7F .faraddr 007ffffeh -003441r 1 FF FF 7F .faraddr 007fffffh -003444r 1 00 00 80 .faraddr 00800000h -003447r 1 01 00 80 .faraddr 00800001h -00344Ar 1 02 00 80 .faraddr 00800002h -00344Dr 1 03 00 80 .faraddr 00800003h -003450r 1 04 00 80 .faraddr 00800004h -003453r 1 05 00 80 .faraddr 00800005h -003456r 1 06 00 80 .faraddr 00800006h -003459r 1 07 00 80 .faraddr 00800007h -00345Cr 1 08 00 80 .faraddr 00800008h -00345Fr 1 09 00 80 .faraddr 00800009h -003462r 1 0A 00 80 .faraddr 0080000ah -003465r 1 0B 00 80 .faraddr 0080000bh -003468r 1 0C 00 80 .faraddr 0080000ch -00346Br 1 0D 00 80 .faraddr 0080000dh -00346Er 1 0E 00 80 .faraddr 0080000eh -003471r 1 0F 00 80 .faraddr 0080000fh -003474r 1 E1 FF 9F .faraddr 009fffe1h -003477r 1 E2 FF 9F .faraddr 009fffe2h -00347Ar 1 E3 FF 9F .faraddr 009fffe3h -00347Dr 1 E4 FF 9F .faraddr 009fffe4h -003480r 1 E5 FF 9F .faraddr 009fffe5h -003483r 1 E6 FF 9F .faraddr 009fffe6h -003486r 1 E7 FF 9F .faraddr 009fffe7h -003489r 1 E8 FF 9F .faraddr 009fffe8h -00348Cr 1 E9 FF 9F .faraddr 009fffe9h -00348Fr 1 EA FF 9F .faraddr 009fffeah -003492r 1 EB FF 9F .faraddr 009fffebh -003495r 1 EC FF 9F .faraddr 009fffech -003498r 1 ED FF 9F .faraddr 009fffedh -00349Br 1 EE FF 9F .faraddr 009fffeeh -00349Er 1 EF FF 9F .faraddr 009fffefh -0034A1r 1 F0 FF 9F .faraddr 009ffff0h -0034A4r 1 F1 FF 9F .faraddr 009ffff1h -0034A7r 1 F2 FF 9F .faraddr 009ffff2h -0034AAr 1 F3 FF 9F .faraddr 009ffff3h -0034ADr 1 F4 FF 9F .faraddr 009ffff4h -0034B0r 1 F5 FF 9F .faraddr 009ffff5h -0034B3r 1 F6 FF 9F .faraddr 009ffff6h -0034B6r 1 F7 FF 9F .faraddr 009ffff7h -0034B9r 1 F8 FF 9F .faraddr 009ffff8h -0034BCr 1 F9 FF 9F .faraddr 009ffff9h -0034BFr 1 FA FF 9F .faraddr 009ffffah -0034C2r 1 FB FF 9F .faraddr 009ffffbh -0034C5r 1 FC FF 9F .faraddr 009ffffch -0034C8r 1 FD FF 9F .faraddr 009ffffdh -0034CBr 1 FE FF 9F .faraddr 009ffffeh -0034CEr 1 FF FF 9F .faraddr 009fffffh -0034D1r 1 00 00 A0 .faraddr 00a00000h -0034D4r 1 01 00 A0 .faraddr 00a00001h -0034D7r 1 02 00 A0 .faraddr 00a00002h -0034DAr 1 03 00 A0 .faraddr 00a00003h -0034DDr 1 04 00 A0 .faraddr 00a00004h -0034E0r 1 05 00 A0 .faraddr 00a00005h -0034E3r 1 06 00 A0 .faraddr 00a00006h -0034E6r 1 07 00 A0 .faraddr 00a00007h -0034E9r 1 08 00 A0 .faraddr 00a00008h -0034ECr 1 09 00 A0 .faraddr 00a00009h -0034EFr 1 0A 00 A0 .faraddr 00a0000ah -0034F2r 1 0B 00 A0 .faraddr 00a0000bh -0034F5r 1 0C 00 A0 .faraddr 00a0000ch -0034F8r 1 0D 00 A0 .faraddr 00a0000dh -0034FBr 1 0E 00 A0 .faraddr 00a0000eh -0034FEr 1 0F 00 A0 .faraddr 00a0000fh -003501r 1 E1 FF FF .faraddr 00ffffe1h -003504r 1 E2 FF FF .faraddr 00ffffe2h -003507r 1 E3 FF FF .faraddr 00ffffe3h -00350Ar 1 E4 FF FF .faraddr 00ffffe4h -00350Dr 1 E5 FF FF .faraddr 00ffffe5h -003510r 1 E6 FF FF .faraddr 00ffffe6h -003513r 1 E7 FF FF .faraddr 00ffffe7h -003516r 1 E8 FF FF .faraddr 00ffffe8h -003519r 1 E9 FF FF .faraddr 00ffffe9h -00351Cr 1 EA FF FF .faraddr 00ffffeah -00351Fr 1 EB FF FF .faraddr 00ffffebh -003522r 1 EC FF FF .faraddr 00ffffech -003525r 1 ED FF FF .faraddr 00ffffedh -003528r 1 EE FF FF .faraddr 00ffffeeh -00352Br 1 EF FF FF .faraddr 00ffffefh -00352Er 1 F0 FF FF .faraddr 00fffff0h -003531r 1 F1 FF FF .faraddr 00fffff1h -003534r 1 F2 FF FF .faraddr 00fffff2h -003537r 1 F3 FF FF .faraddr 00fffff3h -00353Ar 1 F4 FF FF .faraddr 00fffff4h -00353Dr 1 F5 FF FF .faraddr 00fffff5h -003540r 1 F6 FF FF .faraddr 00fffff6h -003543r 1 F7 FF FF .faraddr 00fffff7h -003546r 1 F8 FF FF .faraddr 00fffff8h -003549r 1 F9 FF FF .faraddr 00fffff9h -00354Cr 1 FA FF FF .faraddr 00fffffah -00354Fr 1 FB FF FF .faraddr 00fffffbh -003552r 1 FC FF FF .faraddr 00fffffch -003555r 1 FD FF FF .faraddr 00fffffdh -003558r 1 FE FF FF .faraddr 00fffffeh -00355Br 1 FF FF FF .faraddr 00ffffffh +002F70r 1 ; alternative 8-digit hex values +002F70r 1 00 00 00 .faraddr 00000000h +002F73r 1 01 00 00 .faraddr 00000001h +002F76r 1 02 00 00 .faraddr 00000002h +002F79r 1 03 00 00 .faraddr 00000003h +002F7Cr 1 04 00 00 .faraddr 00000004h +002F7Fr 1 05 00 00 .faraddr 00000005h +002F82r 1 06 00 00 .faraddr 00000006h +002F85r 1 07 00 00 .faraddr 00000007h +002F88r 1 08 00 00 .faraddr 00000008h +002F8Br 1 09 00 00 .faraddr 00000009h +002F8Er 1 0A 00 00 .faraddr 0000000ah +002F91r 1 0B 00 00 .faraddr 0000000bh +002F94r 1 0C 00 00 .faraddr 0000000ch +002F97r 1 0D 00 00 .faraddr 0000000dh +002F9Ar 1 0E 00 00 .faraddr 0000000eh +002F9Dr 1 0F 00 00 .faraddr 0000000fh +002FA0r 1 10 00 00 .faraddr 00000010h +002FA3r 1 11 00 00 .faraddr 00000011h +002FA6r 1 12 00 00 .faraddr 00000012h +002FA9r 1 13 00 00 .faraddr 00000013h +002FACr 1 70 00 00 .faraddr 00000070h +002FAFr 1 71 00 00 .faraddr 00000071h +002FB2r 1 72 00 00 .faraddr 00000072h +002FB5r 1 73 00 00 .faraddr 00000073h +002FB8r 1 74 00 00 .faraddr 00000074h +002FBBr 1 75 00 00 .faraddr 00000075h +002FBEr 1 76 00 00 .faraddr 00000076h +002FC1r 1 77 00 00 .faraddr 00000077h +002FC4r 1 78 00 00 .faraddr 00000078h +002FC7r 1 79 00 00 .faraddr 00000079h +002FCAr 1 7A 00 00 .faraddr 0000007ah +002FCDr 1 7B 00 00 .faraddr 0000007bh +002FD0r 1 7C 00 00 .faraddr 0000007ch +002FD3r 1 7D 00 00 .faraddr 0000007dh +002FD6r 1 7E 00 00 .faraddr 0000007eh +002FD9r 1 7F 00 00 .faraddr 0000007fh +002FDCr 1 80 00 00 .faraddr 00000080h +002FDFr 1 81 00 00 .faraddr 00000081h +002FE2r 1 82 00 00 .faraddr 00000082h +002FE5r 1 83 00 00 .faraddr 00000083h +002FE8r 1 84 00 00 .faraddr 00000084h +002FEBr 1 85 00 00 .faraddr 00000085h +002FEEr 1 86 00 00 .faraddr 00000086h +002FF1r 1 F0 00 00 .faraddr 000000f0h +002FF4r 1 F1 00 00 .faraddr 000000f1h +002FF7r 1 F2 00 00 .faraddr 000000f2h +002FFAr 1 F3 00 00 .faraddr 000000f3h +002FFDr 1 F4 00 00 .faraddr 000000f4h +003000r 1 F5 00 00 .faraddr 000000f5h +003003r 1 F6 00 00 .faraddr 000000f6h +003006r 1 F7 00 00 .faraddr 000000f7h +003009r 1 F8 00 00 .faraddr 000000f8h +00300Cr 1 F9 00 00 .faraddr 000000f9h +00300Fr 1 FA 00 00 .faraddr 000000fah +003012r 1 FB 00 00 .faraddr 000000fbh +003015r 1 FC 00 00 .faraddr 000000fch +003018r 1 FD 00 00 .faraddr 000000fdh +00301Br 1 FE 00 00 .faraddr 000000feh +00301Er 1 FF 00 00 .faraddr 000000ffh +003021r 1 00 01 00 .faraddr 00000100h +003024r 1 01 01 00 .faraddr 00000101h +003027r 1 02 01 00 .faraddr 00000102h +00302Ar 1 03 01 00 .faraddr 00000103h +00302Dr 1 D2 0F 00 .faraddr 00000fd2h +003030r 1 D3 0F 00 .faraddr 00000fd3h +003033r 1 D4 0F 00 .faraddr 00000fd4h +003036r 1 D5 0F 00 .faraddr 00000fd5h +003039r 1 D6 0F 00 .faraddr 00000fd6h +00303Cr 1 D7 0F 00 .faraddr 00000fd7h +00303Fr 1 D8 0F 00 .faraddr 00000fd8h +003042r 1 D9 0F 00 .faraddr 00000fd9h +003045r 1 DA 0F 00 .faraddr 00000fdah +003048r 1 DB 0F 00 .faraddr 00000fdbh +00304Br 1 DC 0F 00 .faraddr 00000fdch +00304Er 1 DD 0F 00 .faraddr 00000fddh +003051r 1 DE 0F 00 .faraddr 00000fdeh +003054r 1 DF 0F 00 .faraddr 00000fdfh +003057r 1 E0 0F 00 .faraddr 00000fe0h +00305Ar 1 E1 0F 00 .faraddr 00000fe1h +00305Dr 1 E2 0F 00 .faraddr 00000fe2h +003060r 1 E3 0F 00 .faraddr 00000fe3h +003063r 1 E4 0F 00 .faraddr 00000fe4h +003066r 1 E5 0F 00 .faraddr 00000fe5h +003069r 1 E6 0F 00 .faraddr 00000fe6h +00306Cr 1 E7 0F 00 .faraddr 00000fe7h +00306Fr 1 E8 0F 00 .faraddr 00000fe8h +003072r 1 E9 0F 00 .faraddr 00000fe9h +003075r 1 EA 0F 00 .faraddr 00000feah +003078r 1 EB 0F 00 .faraddr 00000febh +00307Br 1 EC 0F 00 .faraddr 00000fech +00307Er 1 ED 0F 00 .faraddr 00000fedh +003081r 1 EE 0F 00 .faraddr 00000feeh +003084r 1 EF 0F 00 .faraddr 00000fefh +003087r 1 F0 0F 00 .faraddr 00000ff0h +00308Ar 1 F1 0F 00 .faraddr 00000ff1h +00308Dr 1 F2 0F 00 .faraddr 00000ff2h +003090r 1 F3 0F 00 .faraddr 00000ff3h +003093r 1 F4 0F 00 .faraddr 00000ff4h +003096r 1 F5 0F 00 .faraddr 00000ff5h +003099r 1 F6 0F 00 .faraddr 00000ff6h +00309Cr 1 F7 0F 00 .faraddr 00000ff7h +00309Fr 1 F8 0F 00 .faraddr 00000ff8h +0030A2r 1 F9 0F 00 .faraddr 00000ff9h +0030A5r 1 FA 0F 00 .faraddr 00000ffah +0030A8r 1 FB 0F 00 .faraddr 00000ffbh +0030ABr 1 FC 0F 00 .faraddr 00000ffch +0030AEr 1 FD 0F 00 .faraddr 00000ffdh +0030B1r 1 FE 0F 00 .faraddr 00000ffeh +0030B4r 1 FF 0F 00 .faraddr 00000fffh +0030B7r 1 00 10 00 .faraddr 00001000h +0030BAr 1 01 10 00 .faraddr 00001001h +0030BDr 1 02 10 00 .faraddr 00001002h +0030C0r 1 03 10 00 .faraddr 00001003h +0030C3r 1 04 10 00 .faraddr 00001004h +0030C6r 1 05 10 00 .faraddr 00001005h +0030C9r 1 06 10 00 .faraddr 00001006h +0030CCr 1 07 10 00 .faraddr 00001007h +0030CFr 1 08 10 00 .faraddr 00001008h +0030D2r 1 F0 7F 00 .faraddr 00007ff0h +0030D5r 1 F1 7F 00 .faraddr 00007ff1h +0030D8r 1 F2 7F 00 .faraddr 00007ff2h +0030DBr 1 F3 7F 00 .faraddr 00007ff3h +0030DEr 1 F4 7F 00 .faraddr 00007ff4h +0030E1r 1 F5 7F 00 .faraddr 00007ff5h +0030E4r 1 F6 7F 00 .faraddr 00007ff6h +0030E7r 1 F7 7F 00 .faraddr 00007ff7h +0030EAr 1 F8 7F 00 .faraddr 00007ff8h +0030EDr 1 F9 7F 00 .faraddr 00007ff9h +0030F0r 1 FA 7F 00 .faraddr 00007ffah +0030F3r 1 FB 7F 00 .faraddr 00007ffbh +0030F6r 1 FC 7F 00 .faraddr 00007ffch +0030F9r 1 FD 7F 00 .faraddr 00007ffdh +0030FCr 1 FE 7F 00 .faraddr 00007ffeh +0030FFr 1 FF 7F 00 .faraddr 00007fffh +003102r 1 00 80 00 .faraddr 00008000h +003105r 1 01 80 00 .faraddr 00008001h +003108r 1 02 80 00 .faraddr 00008002h +00310Br 1 03 80 00 .faraddr 00008003h +00310Er 1 04 80 00 .faraddr 00008004h +003111r 1 05 80 00 .faraddr 00008005h +003114r 1 06 80 00 .faraddr 00008006h +003117r 1 07 80 00 .faraddr 00008007h +00311Ar 1 08 80 00 .faraddr 00008008h +00311Dr 1 09 80 00 .faraddr 00008009h +003120r 1 0A 80 00 .faraddr 0000800ah +003123r 1 0B 80 00 .faraddr 0000800bh +003126r 1 E1 9F 00 .faraddr 00009fe1h +003129r 1 E2 9F 00 .faraddr 00009fe2h +00312Cr 1 E3 9F 00 .faraddr 00009fe3h +00312Fr 1 E4 9F 00 .faraddr 00009fe4h +003132r 1 E5 9F 00 .faraddr 00009fe5h +003135r 1 E6 9F 00 .faraddr 00009fe6h +003138r 1 E7 9F 00 .faraddr 00009fe7h +00313Br 1 E8 9F 00 .faraddr 00009fe8h +00313Er 1 E9 9F 00 .faraddr 00009fe9h +003141r 1 EA 9F 00 .faraddr 00009feah +003144r 1 EB 9F 00 .faraddr 00009febh +003147r 1 EC 9F 00 .faraddr 00009fech +00314Ar 1 ED 9F 00 .faraddr 00009fedh +00314Dr 1 EE 9F 00 .faraddr 00009feeh +003150r 1 EF 9F 00 .faraddr 00009fefh +003153r 1 F0 9F 00 .faraddr 00009ff0h +003156r 1 F1 9F 00 .faraddr 00009ff1h +003159r 1 F2 9F 00 .faraddr 00009ff2h +00315Cr 1 F3 9F 00 .faraddr 00009ff3h +00315Fr 1 F4 9F 00 .faraddr 00009ff4h +003162r 1 F5 9F 00 .faraddr 00009ff5h +003165r 1 F6 9F 00 .faraddr 00009ff6h +003168r 1 F7 9F 00 .faraddr 00009ff7h +00316Br 1 F8 9F 00 .faraddr 00009ff8h +00316Er 1 F9 9F 00 .faraddr 00009ff9h +003171r 1 FA 9F 00 .faraddr 00009ffah +003174r 1 FB 9F 00 .faraddr 00009ffbh +003177r 1 FC 9F 00 .faraddr 00009ffch +00317Ar 1 FD 9F 00 .faraddr 00009ffdh +00317Dr 1 FE 9F 00 .faraddr 00009ffeh +003180r 1 FF 9F 00 .faraddr 00009fffh +003183r 1 00 A0 00 .faraddr 0000a000h +003186r 1 01 A0 00 .faraddr 0000a001h +003189r 1 02 A0 00 .faraddr 0000a002h +00318Cr 1 03 A0 00 .faraddr 0000a003h +00318Fr 1 04 A0 00 .faraddr 0000a004h +003192r 1 05 A0 00 .faraddr 0000a005h +003195r 1 06 A0 00 .faraddr 0000a006h +003198r 1 07 A0 00 .faraddr 0000a007h +00319Br 1 08 A0 00 .faraddr 0000a008h +00319Er 1 09 A0 00 .faraddr 0000a009h +0031A1r 1 0A A0 00 .faraddr 0000a00ah +0031A4r 1 0B A0 00 .faraddr 0000a00bh +0031A7r 1 0C A0 00 .faraddr 0000a00ch +0031AAr 1 0D A0 00 .faraddr 0000a00dh +0031ADr 1 0E A0 00 .faraddr 0000a00eh +0031B0r 1 0F A0 00 .faraddr 0000a00fh +0031B3r 1 E1 AF 00 .faraddr 0000afe1h +0031B6r 1 E2 AF 00 .faraddr 0000afe2h +0031B9r 1 E3 AF 00 .faraddr 0000afe3h +0031BCr 1 E4 AF 00 .faraddr 0000afe4h +0031BFr 1 E5 AF 00 .faraddr 0000afe5h +0031C2r 1 E6 AF 00 .faraddr 0000afe6h +0031C5r 1 E7 AF 00 .faraddr 0000afe7h +0031C8r 1 E8 AF 00 .faraddr 0000afe8h +0031CBr 1 E9 AF 00 .faraddr 0000afe9h +0031CEr 1 EA AF 00 .faraddr 0000afeah +0031D1r 1 EB AF 00 .faraddr 0000afebh +0031D4r 1 EC AF 00 .faraddr 0000afech +0031D7r 1 ED AF 00 .faraddr 0000afedh +0031DAr 1 EE AF 00 .faraddr 0000afeeh +0031DDr 1 EF AF 00 .faraddr 0000afefh +0031E0r 1 F0 AF 00 .faraddr 0000aff0h +0031E3r 1 F1 AF 00 .faraddr 0000aff1h +0031E6r 1 F2 AF 00 .faraddr 0000aff2h +0031E9r 1 F3 AF 00 .faraddr 0000aff3h +0031ECr 1 F4 AF 00 .faraddr 0000aff4h +0031EFr 1 F5 AF 00 .faraddr 0000aff5h +0031F2r 1 F6 AF 00 .faraddr 0000aff6h +0031F5r 1 F7 AF 00 .faraddr 0000aff7h +0031F8r 1 F8 AF 00 .faraddr 0000aff8h +0031FBr 1 F9 AF 00 .faraddr 0000aff9h +0031FEr 1 FA AF 00 .faraddr 0000affah +003201r 1 FB AF 00 .faraddr 0000affbh +003204r 1 FC AF 00 .faraddr 0000affch +003207r 1 FD AF 00 .faraddr 0000affdh +00320Ar 1 FE AF 00 .faraddr 0000affeh +00320Dr 1 FF AF 00 .faraddr 0000afffh +003210r 1 00 B0 00 .faraddr 0000b000h +003213r 1 01 B0 00 .faraddr 0000b001h +003216r 1 02 B0 00 .faraddr 0000b002h +003219r 1 03 B0 00 .faraddr 0000b003h +00321Cr 1 04 B0 00 .faraddr 0000b004h +00321Fr 1 05 B0 00 .faraddr 0000b005h +003222r 1 06 B0 00 .faraddr 0000b006h +003225r 1 07 B0 00 .faraddr 0000b007h +003228r 1 08 B0 00 .faraddr 0000b008h +00322Br 1 09 B0 00 .faraddr 0000b009h +00322Er 1 0A B0 00 .faraddr 0000b00ah +003231r 1 0B B0 00 .faraddr 0000b00bh +003234r 1 0C B0 00 .faraddr 0000b00ch +003237r 1 0D B0 00 .faraddr 0000b00dh +00323Ar 1 0E B0 00 .faraddr 0000b00eh +00323Dr 1 0F B0 00 .faraddr 0000b00fh +003240r 1 E1 FF 00 .faraddr 0000ffe1h +003243r 1 E2 FF 00 .faraddr 0000ffe2h +003246r 1 E3 FF 00 .faraddr 0000ffe3h +003249r 1 E4 FF 00 .faraddr 0000ffe4h +00324Cr 1 E5 FF 00 .faraddr 0000ffe5h +00324Fr 1 E6 FF 00 .faraddr 0000ffe6h +003252r 1 E7 FF 00 .faraddr 0000ffe7h +003255r 1 E8 FF 00 .faraddr 0000ffe8h +003258r 1 E9 FF 00 .faraddr 0000ffe9h +00325Br 1 EA FF 00 .faraddr 0000ffeah +00325Er 1 EB FF 00 .faraddr 0000ffebh +003261r 1 EC FF 00 .faraddr 0000ffech +003264r 1 ED FF 00 .faraddr 0000ffedh +003267r 1 EE FF 00 .faraddr 0000ffeeh +00326Ar 1 EF FF 00 .faraddr 0000ffefh +00326Dr 1 F0 FF 00 .faraddr 0000fff0h +003270r 1 F1 FF 00 .faraddr 0000fff1h +003273r 1 F2 FF 00 .faraddr 0000fff2h +003276r 1 F3 FF 00 .faraddr 0000fff3h +003279r 1 F4 FF 00 .faraddr 0000fff4h +00327Cr 1 F5 FF 00 .faraddr 0000fff5h +00327Fr 1 F6 FF 00 .faraddr 0000fff6h +003282r 1 F7 FF 00 .faraddr 0000fff7h +003285r 1 F8 FF 00 .faraddr 0000fff8h +003288r 1 F9 FF 00 .faraddr 0000fff9h +00328Br 1 FA FF 00 .faraddr 0000fffah +00328Er 1 FB FF 00 .faraddr 0000fffbh +003291r 1 FC FF 00 .faraddr 0000fffch +003294r 1 FD FF 00 .faraddr 0000fffdh +003297r 1 FE FF 00 .faraddr 0000fffeh +00329Ar 1 FF FF 00 .faraddr 0000ffffh +00329Dr 1 00 00 01 .faraddr 00010000h +0032A0r 1 01 00 01 .faraddr 00010001h +0032A3r 1 02 00 01 .faraddr 00010002h +0032A6r 1 03 00 01 .faraddr 00010003h +0032A9r 1 04 00 01 .faraddr 00010004h +0032ACr 1 05 00 01 .faraddr 00010005h +0032AFr 1 06 00 01 .faraddr 00010006h +0032B2r 1 07 00 01 .faraddr 00010007h +0032B5r 1 08 00 01 .faraddr 00010008h +0032B8r 1 09 00 01 .faraddr 00010009h +0032BBr 1 0A 00 01 .faraddr 0001000ah +0032BEr 1 0B 00 01 .faraddr 0001000bh +0032C1r 1 0C 00 01 .faraddr 0001000ch +0032C4r 1 0D 00 01 .faraddr 0001000dh +0032C7r 1 0E 00 01 .faraddr 0001000eh +0032CAr 1 0F 00 01 .faraddr 0001000fh +0032CDr 1 E1 FF 10 .faraddr 0010ffe1h +0032D0r 1 E2 FF 10 .faraddr 0010ffe2h +0032D3r 1 E3 FF 10 .faraddr 0010ffe3h +0032D6r 1 E4 FF 10 .faraddr 0010ffe4h +0032D9r 1 E5 FF 10 .faraddr 0010ffe5h +0032DCr 1 E6 FF 10 .faraddr 0010ffe6h +0032DFr 1 E7 FF 10 .faraddr 0010ffe7h +0032E2r 1 E8 FF 10 .faraddr 0010ffe8h +0032E5r 1 E9 FF 10 .faraddr 0010ffe9h +0032E8r 1 EA FF 10 .faraddr 0010ffeah +0032EBr 1 EB FF 10 .faraddr 0010ffebh +0032EEr 1 EC FF 10 .faraddr 0010ffech +0032F1r 1 ED FF 10 .faraddr 0010ffedh +0032F4r 1 EE FF 10 .faraddr 0010ffeeh +0032F7r 1 EF FF 10 .faraddr 0010ffefh +0032FAr 1 F0 FF 10 .faraddr 0010fff0h +0032FDr 1 F1 FF 10 .faraddr 0010fff1h +003300r 1 F2 FF 10 .faraddr 0010fff2h +003303r 1 F3 FF 10 .faraddr 0010fff3h +003306r 1 F4 FF 10 .faraddr 0010fff4h +003309r 1 F5 FF 10 .faraddr 0010fff5h +00330Cr 1 F6 FF 10 .faraddr 0010fff6h +00330Fr 1 F7 FF 10 .faraddr 0010fff7h +003312r 1 F8 FF 10 .faraddr 0010fff8h +003315r 1 F9 FF 10 .faraddr 0010fff9h +003318r 1 FA FF 10 .faraddr 0010fffah +00331Br 1 FB FF 10 .faraddr 0010fffbh +00331Er 1 FC FF 10 .faraddr 0010fffch +003321r 1 FD FF 10 .faraddr 0010fffdh +003324r 1 FE FF 10 .faraddr 0010fffeh +003327r 1 FF FF 10 .faraddr 0010ffffh +00332Ar 1 00 00 11 .faraddr 00110000h +00332Dr 1 01 00 11 .faraddr 00110001h +003330r 1 02 00 11 .faraddr 00110002h +003333r 1 03 00 11 .faraddr 00110003h +003336r 1 04 00 11 .faraddr 00110004h +003339r 1 05 00 11 .faraddr 00110005h +00333Cr 1 06 00 11 .faraddr 00110006h +00333Fr 1 07 00 11 .faraddr 00110007h +003342r 1 08 00 11 .faraddr 00110008h +003345r 1 09 00 11 .faraddr 00110009h +003348r 1 0A 00 11 .faraddr 0011000ah +00334Br 1 0B 00 11 .faraddr 0011000bh +00334Er 1 0C 00 11 .faraddr 0011000ch +003351r 1 0D 00 11 .faraddr 0011000dh +003354r 1 0E 00 11 .faraddr 0011000eh +003357r 1 0F 00 11 .faraddr 0011000fh +00335Ar 1 E1 FF 20 .faraddr 0020ffe1h +00335Dr 1 E2 FF 20 .faraddr 0020ffe2h +003360r 1 E3 FF 20 .faraddr 0020ffe3h +003363r 1 E4 FF 20 .faraddr 0020ffe4h +003366r 1 E5 FF 20 .faraddr 0020ffe5h +003369r 1 E6 FF 20 .faraddr 0020ffe6h +00336Cr 1 E7 FF 20 .faraddr 0020ffe7h +00336Fr 1 E8 FF 20 .faraddr 0020ffe8h +003372r 1 E9 FF 20 .faraddr 0020ffe9h +003375r 1 EA FF 20 .faraddr 0020ffeah +003378r 1 EB FF 20 .faraddr 0020ffebh +00337Br 1 EC FF 20 .faraddr 0020ffech +00337Er 1 ED FF 20 .faraddr 0020ffedh +003381r 1 EE FF 20 .faraddr 0020ffeeh +003384r 1 EF FF 20 .faraddr 0020ffefh +003387r 1 F0 FF 20 .faraddr 0020fff0h +00338Ar 1 F1 FF 20 .faraddr 0020fff1h +00338Dr 1 F2 FF 20 .faraddr 0020fff2h +003390r 1 F3 FF 20 .faraddr 0020fff3h +003393r 1 F4 FF 20 .faraddr 0020fff4h +003396r 1 F5 FF 20 .faraddr 0020fff5h +003399r 1 F6 FF 20 .faraddr 0020fff6h +00339Cr 1 F7 FF 20 .faraddr 0020fff7h +00339Fr 1 F8 FF 20 .faraddr 0020fff8h +0033A2r 1 F9 FF 20 .faraddr 0020fff9h +0033A5r 1 FA FF 20 .faraddr 0020fffah +0033A8r 1 FB FF 20 .faraddr 0020fffbh +0033ABr 1 FC FF 20 .faraddr 0020fffch +0033AEr 1 FD FF 20 .faraddr 0020fffdh +0033B1r 1 FE FF 20 .faraddr 0020fffeh +0033B4r 1 FF FF 20 .faraddr 0020ffffh +0033B7r 1 00 00 21 .faraddr 00210000h +0033BAr 1 01 00 21 .faraddr 00210001h +0033BDr 1 02 00 21 .faraddr 00210002h +0033C0r 1 03 00 21 .faraddr 00210003h +0033C3r 1 04 00 21 .faraddr 00210004h +0033C6r 1 05 00 21 .faraddr 00210005h +0033C9r 1 06 00 21 .faraddr 00210006h +0033CCr 1 07 00 21 .faraddr 00210007h +0033CFr 1 08 00 21 .faraddr 00210008h +0033D2r 1 09 00 21 .faraddr 00210009h +0033D5r 1 0A 00 21 .faraddr 0021000ah +0033D8r 1 0B 00 21 .faraddr 0021000bh +0033DBr 1 0C 00 21 .faraddr 0021000ch +0033DEr 1 0D 00 21 .faraddr 0021000dh +0033E1r 1 0E 00 21 .faraddr 0021000eh +0033E4r 1 0F 00 21 .faraddr 0021000fh +0033E7r 1 E1 FF 7F .faraddr 007fffe1h +0033EAr 1 E2 FF 7F .faraddr 007fffe2h +0033EDr 1 E3 FF 7F .faraddr 007fffe3h +0033F0r 1 E4 FF 7F .faraddr 007fffe4h +0033F3r 1 E5 FF 7F .faraddr 007fffe5h +0033F6r 1 E6 FF 7F .faraddr 007fffe6h +0033F9r 1 E7 FF 7F .faraddr 007fffe7h +0033FCr 1 E8 FF 7F .faraddr 007fffe8h +0033FFr 1 E9 FF 7F .faraddr 007fffe9h +003402r 1 EA FF 7F .faraddr 007fffeah +003405r 1 EB FF 7F .faraddr 007fffebh +003408r 1 EC FF 7F .faraddr 007fffech +00340Br 1 ED FF 7F .faraddr 007fffedh +00340Er 1 EE FF 7F .faraddr 007fffeeh +003411r 1 EF FF 7F .faraddr 007fffefh +003414r 1 F0 FF 7F .faraddr 007ffff0h +003417r 1 F1 FF 7F .faraddr 007ffff1h +00341Ar 1 F2 FF 7F .faraddr 007ffff2h +00341Dr 1 F3 FF 7F .faraddr 007ffff3h +003420r 1 F4 FF 7F .faraddr 007ffff4h +003423r 1 F5 FF 7F .faraddr 007ffff5h +003426r 1 F6 FF 7F .faraddr 007ffff6h +003429r 1 F7 FF 7F .faraddr 007ffff7h +00342Cr 1 F8 FF 7F .faraddr 007ffff8h +00342Fr 1 F9 FF 7F .faraddr 007ffff9h +003432r 1 FA FF 7F .faraddr 007ffffah +003435r 1 FB FF 7F .faraddr 007ffffbh +003438r 1 FC FF 7F .faraddr 007ffffch +00343Br 1 FD FF 7F .faraddr 007ffffdh +00343Er 1 FE FF 7F .faraddr 007ffffeh +003441r 1 FF FF 7F .faraddr 007fffffh +003444r 1 00 00 80 .faraddr 00800000h +003447r 1 01 00 80 .faraddr 00800001h +00344Ar 1 02 00 80 .faraddr 00800002h +00344Dr 1 03 00 80 .faraddr 00800003h +003450r 1 04 00 80 .faraddr 00800004h +003453r 1 05 00 80 .faraddr 00800005h +003456r 1 06 00 80 .faraddr 00800006h +003459r 1 07 00 80 .faraddr 00800007h +00345Cr 1 08 00 80 .faraddr 00800008h +00345Fr 1 09 00 80 .faraddr 00800009h +003462r 1 0A 00 80 .faraddr 0080000ah +003465r 1 0B 00 80 .faraddr 0080000bh +003468r 1 0C 00 80 .faraddr 0080000ch +00346Br 1 0D 00 80 .faraddr 0080000dh +00346Er 1 0E 00 80 .faraddr 0080000eh +003471r 1 0F 00 80 .faraddr 0080000fh +003474r 1 E1 FF 9F .faraddr 009fffe1h +003477r 1 E2 FF 9F .faraddr 009fffe2h +00347Ar 1 E3 FF 9F .faraddr 009fffe3h +00347Dr 1 E4 FF 9F .faraddr 009fffe4h +003480r 1 E5 FF 9F .faraddr 009fffe5h +003483r 1 E6 FF 9F .faraddr 009fffe6h +003486r 1 E7 FF 9F .faraddr 009fffe7h +003489r 1 E8 FF 9F .faraddr 009fffe8h +00348Cr 1 E9 FF 9F .faraddr 009fffe9h +00348Fr 1 EA FF 9F .faraddr 009fffeah +003492r 1 EB FF 9F .faraddr 009fffebh +003495r 1 EC FF 9F .faraddr 009fffech +003498r 1 ED FF 9F .faraddr 009fffedh +00349Br 1 EE FF 9F .faraddr 009fffeeh +00349Er 1 EF FF 9F .faraddr 009fffefh +0034A1r 1 F0 FF 9F .faraddr 009ffff0h +0034A4r 1 F1 FF 9F .faraddr 009ffff1h +0034A7r 1 F2 FF 9F .faraddr 009ffff2h +0034AAr 1 F3 FF 9F .faraddr 009ffff3h +0034ADr 1 F4 FF 9F .faraddr 009ffff4h +0034B0r 1 F5 FF 9F .faraddr 009ffff5h +0034B3r 1 F6 FF 9F .faraddr 009ffff6h +0034B6r 1 F7 FF 9F .faraddr 009ffff7h +0034B9r 1 F8 FF 9F .faraddr 009ffff8h +0034BCr 1 F9 FF 9F .faraddr 009ffff9h +0034BFr 1 FA FF 9F .faraddr 009ffffah +0034C2r 1 FB FF 9F .faraddr 009ffffbh +0034C5r 1 FC FF 9F .faraddr 009ffffch +0034C8r 1 FD FF 9F .faraddr 009ffffdh +0034CBr 1 FE FF 9F .faraddr 009ffffeh +0034CEr 1 FF FF 9F .faraddr 009fffffh +0034D1r 1 00 00 A0 .faraddr 00a00000h +0034D4r 1 01 00 A0 .faraddr 00a00001h +0034D7r 1 02 00 A0 .faraddr 00a00002h +0034DAr 1 03 00 A0 .faraddr 00a00003h +0034DDr 1 04 00 A0 .faraddr 00a00004h +0034E0r 1 05 00 A0 .faraddr 00a00005h +0034E3r 1 06 00 A0 .faraddr 00a00006h +0034E6r 1 07 00 A0 .faraddr 00a00007h +0034E9r 1 08 00 A0 .faraddr 00a00008h +0034ECr 1 09 00 A0 .faraddr 00a00009h +0034EFr 1 0A 00 A0 .faraddr 00a0000ah +0034F2r 1 0B 00 A0 .faraddr 00a0000bh +0034F5r 1 0C 00 A0 .faraddr 00a0000ch +0034F8r 1 0D 00 A0 .faraddr 00a0000dh +0034FBr 1 0E 00 A0 .faraddr 00a0000eh +0034FEr 1 0F 00 A0 .faraddr 00a0000fh +003501r 1 E1 FF FF .faraddr 00ffffe1h +003504r 1 E2 FF FF .faraddr 00ffffe2h +003507r 1 E3 FF FF .faraddr 00ffffe3h +00350Ar 1 E4 FF FF .faraddr 00ffffe4h +00350Dr 1 E5 FF FF .faraddr 00ffffe5h +003510r 1 E6 FF FF .faraddr 00ffffe6h +003513r 1 E7 FF FF .faraddr 00ffffe7h +003516r 1 E8 FF FF .faraddr 00ffffe8h +003519r 1 E9 FF FF .faraddr 00ffffe9h +00351Cr 1 EA FF FF .faraddr 00ffffeah +00351Fr 1 EB FF FF .faraddr 00ffffebh +003522r 1 EC FF FF .faraddr 00ffffech +003525r 1 ED FF FF .faraddr 00ffffedh +003528r 1 EE FF FF .faraddr 00ffffeeh +00352Br 1 EF FF FF .faraddr 00ffffefh +00352Er 1 F0 FF FF .faraddr 00fffff0h +003531r 1 F1 FF FF .faraddr 00fffff1h +003534r 1 F2 FF FF .faraddr 00fffff2h +003537r 1 F3 FF FF .faraddr 00fffff3h +00353Ar 1 F4 FF FF .faraddr 00fffff4h +00353Dr 1 F5 FF FF .faraddr 00fffff5h +003540r 1 F6 FF FF .faraddr 00fffff6h +003543r 1 F7 FF FF .faraddr 00fffff7h +003546r 1 F8 FF FF .faraddr 00fffff8h +003549r 1 F9 FF FF .faraddr 00fffff9h +00354Cr 1 FA FF FF .faraddr 00fffffah +00354Fr 1 FB FF FF .faraddr 00fffffbh +003552r 1 FC FF FF .faraddr 00fffffch +003555r 1 FD FF FF .faraddr 00fffffdh +003558r 1 FE FF FF .faraddr 00fffffeh +00355Br 1 FF FF FF .faraddr 00ffffffh 00355Er 1 -00355Er 1 ; alternative 8-digit hex values, uppercase -00355Er 1 00 00 00 .faraddr 00000000h -003561r 1 01 00 00 .faraddr 00000001h -003564r 1 02 00 00 .faraddr 00000002h -003567r 1 03 00 00 .faraddr 00000003h -00356Ar 1 04 00 00 .faraddr 00000004h -00356Dr 1 05 00 00 .faraddr 00000005h -003570r 1 06 00 00 .faraddr 00000006h -003573r 1 07 00 00 .faraddr 00000007h -003576r 1 08 00 00 .faraddr 00000008h -003579r 1 09 00 00 .faraddr 00000009h -00357Cr 1 0A 00 00 .faraddr 0000000Ah -00357Fr 1 0B 00 00 .faraddr 0000000Bh -003582r 1 0C 00 00 .faraddr 0000000Ch -003585r 1 0D 00 00 .faraddr 0000000Dh -003588r 1 0E 00 00 .faraddr 0000000Eh -00358Br 1 0F 00 00 .faraddr 0000000Fh -00358Er 1 10 00 00 .faraddr 00000010h -003591r 1 11 00 00 .faraddr 00000011h -003594r 1 12 00 00 .faraddr 00000012h -003597r 1 13 00 00 .faraddr 00000013h -00359Ar 1 70 00 00 .faraddr 00000070h -00359Dr 1 71 00 00 .faraddr 00000071h -0035A0r 1 72 00 00 .faraddr 00000072h -0035A3r 1 73 00 00 .faraddr 00000073h -0035A6r 1 74 00 00 .faraddr 00000074h -0035A9r 1 75 00 00 .faraddr 00000075h -0035ACr 1 76 00 00 .faraddr 00000076h -0035AFr 1 77 00 00 .faraddr 00000077h -0035B2r 1 78 00 00 .faraddr 00000078h -0035B5r 1 79 00 00 .faraddr 00000079h -0035B8r 1 7A 00 00 .faraddr 0000007Ah -0035BBr 1 7B 00 00 .faraddr 0000007Bh -0035BEr 1 7C 00 00 .faraddr 0000007Ch -0035C1r 1 7D 00 00 .faraddr 0000007Dh -0035C4r 1 7E 00 00 .faraddr 0000007Eh -0035C7r 1 7F 00 00 .faraddr 0000007Fh -0035CAr 1 80 00 00 .faraddr 00000080h -0035CDr 1 81 00 00 .faraddr 00000081h -0035D0r 1 82 00 00 .faraddr 00000082h -0035D3r 1 83 00 00 .faraddr 00000083h -0035D6r 1 84 00 00 .faraddr 00000084h -0035D9r 1 85 00 00 .faraddr 00000085h -0035DCr 1 86 00 00 .faraddr 00000086h -0035DFr 1 F0 00 00 .faraddr 000000F0h -0035E2r 1 F1 00 00 .faraddr 000000F1h -0035E5r 1 F2 00 00 .faraddr 000000F2h -0035E8r 1 F3 00 00 .faraddr 000000F3h -0035EBr 1 F4 00 00 .faraddr 000000F4h -0035EEr 1 F5 00 00 .faraddr 000000F5h -0035F1r 1 F6 00 00 .faraddr 000000F6h -0035F4r 1 F7 00 00 .faraddr 000000F7h -0035F7r 1 F8 00 00 .faraddr 000000F8h -0035FAr 1 F9 00 00 .faraddr 000000F9h -0035FDr 1 FA 00 00 .faraddr 000000FAh -003600r 1 FB 00 00 .faraddr 000000FBh -003603r 1 FC 00 00 .faraddr 000000FCh -003606r 1 FD 00 00 .faraddr 000000FDh -003609r 1 FE 00 00 .faraddr 000000FEh -00360Cr 1 FF 00 00 .faraddr 000000FFh -00360Fr 1 00 01 00 .faraddr 00000100h -003612r 1 01 01 00 .faraddr 00000101h -003615r 1 02 01 00 .faraddr 00000102h -003618r 1 03 01 00 .faraddr 00000103h -00361Br 1 D2 0F 00 .faraddr 00000FD2h -00361Er 1 D3 0F 00 .faraddr 00000FD3h -003621r 1 D4 0F 00 .faraddr 00000FD4h -003624r 1 D5 0F 00 .faraddr 00000FD5h -003627r 1 D6 0F 00 .faraddr 00000FD6h -00362Ar 1 D7 0F 00 .faraddr 00000FD7h -00362Dr 1 D8 0F 00 .faraddr 00000FD8h -003630r 1 D9 0F 00 .faraddr 00000FD9h -003633r 1 DA 0F 00 .faraddr 00000FDAh -003636r 1 DB 0F 00 .faraddr 00000FDBh -003639r 1 DC 0F 00 .faraddr 00000FDCh -00363Cr 1 DD 0F 00 .faraddr 00000FDDh -00363Fr 1 DE 0F 00 .faraddr 00000FDEh -003642r 1 DF 0F 00 .faraddr 00000FDFh -003645r 1 E0 0F 00 .faraddr 00000FE0h -003648r 1 E1 0F 00 .faraddr 00000FE1h -00364Br 1 E2 0F 00 .faraddr 00000FE2h -00364Er 1 E3 0F 00 .faraddr 00000FE3h -003651r 1 E4 0F 00 .faraddr 00000FE4h -003654r 1 E5 0F 00 .faraddr 00000FE5h -003657r 1 E6 0F 00 .faraddr 00000FE6h -00365Ar 1 E7 0F 00 .faraddr 00000FE7h -00365Dr 1 E8 0F 00 .faraddr 00000FE8h -003660r 1 E9 0F 00 .faraddr 00000FE9h -003663r 1 EA 0F 00 .faraddr 00000FEAh -003666r 1 EB 0F 00 .faraddr 00000FEBh -003669r 1 EC 0F 00 .faraddr 00000FECh -00366Cr 1 ED 0F 00 .faraddr 00000FEDh -00366Fr 1 EE 0F 00 .faraddr 00000FEEh -003672r 1 EF 0F 00 .faraddr 00000FEFh -003675r 1 F0 0F 00 .faraddr 00000FF0h -003678r 1 F1 0F 00 .faraddr 00000FF1h -00367Br 1 F2 0F 00 .faraddr 00000FF2h -00367Er 1 F3 0F 00 .faraddr 00000FF3h -003681r 1 F4 0F 00 .faraddr 00000FF4h -003684r 1 F5 0F 00 .faraddr 00000FF5h -003687r 1 F6 0F 00 .faraddr 00000FF6h -00368Ar 1 F7 0F 00 .faraddr 00000FF7h -00368Dr 1 F8 0F 00 .faraddr 00000FF8h -003690r 1 F9 0F 00 .faraddr 00000FF9h -003693r 1 FA 0F 00 .faraddr 00000FFAh -003696r 1 FB 0F 00 .faraddr 00000FFBh -003699r 1 FC 0F 00 .faraddr 00000FFCh -00369Cr 1 FD 0F 00 .faraddr 00000FFDh -00369Fr 1 FE 0F 00 .faraddr 00000FFEh -0036A2r 1 FF 0F 00 .faraddr 00000FFFh -0036A5r 1 00 10 00 .faraddr 00001000h -0036A8r 1 01 10 00 .faraddr 00001001h -0036ABr 1 02 10 00 .faraddr 00001002h -0036AEr 1 03 10 00 .faraddr 00001003h -0036B1r 1 04 10 00 .faraddr 00001004h -0036B4r 1 05 10 00 .faraddr 00001005h -0036B7r 1 06 10 00 .faraddr 00001006h -0036BAr 1 07 10 00 .faraddr 00001007h -0036BDr 1 08 10 00 .faraddr 00001008h -0036C0r 1 F0 7F 00 .faraddr 00007FF0h -0036C3r 1 F1 7F 00 .faraddr 00007FF1h -0036C6r 1 F2 7F 00 .faraddr 00007FF2h -0036C9r 1 F3 7F 00 .faraddr 00007FF3h -0036CCr 1 F4 7F 00 .faraddr 00007FF4h -0036CFr 1 F5 7F 00 .faraddr 00007FF5h -0036D2r 1 F6 7F 00 .faraddr 00007FF6h -0036D5r 1 F7 7F 00 .faraddr 00007FF7h -0036D8r 1 F8 7F 00 .faraddr 00007FF8h -0036DBr 1 F9 7F 00 .faraddr 00007FF9h -0036DEr 1 FA 7F 00 .faraddr 00007FFAh -0036E1r 1 FB 7F 00 .faraddr 00007FFBh -0036E4r 1 FC 7F 00 .faraddr 00007FFCh -0036E7r 1 FD 7F 00 .faraddr 00007FFDh -0036EAr 1 FE 7F 00 .faraddr 00007FFEh -0036EDr 1 FF 7F 00 .faraddr 00007FFFh -0036F0r 1 00 80 00 .faraddr 00008000h -0036F3r 1 01 80 00 .faraddr 00008001h -0036F6r 1 02 80 00 .faraddr 00008002h -0036F9r 1 03 80 00 .faraddr 00008003h -0036FCr 1 04 80 00 .faraddr 00008004h -0036FFr 1 05 80 00 .faraddr 00008005h -003702r 1 06 80 00 .faraddr 00008006h -003705r 1 07 80 00 .faraddr 00008007h -003708r 1 08 80 00 .faraddr 00008008h -00370Br 1 09 80 00 .faraddr 00008009h -00370Er 1 0A 80 00 .faraddr 0000800Ah -003711r 1 0B 80 00 .faraddr 0000800Bh -003714r 1 E1 9F 00 .faraddr 00009FE1h -003717r 1 E2 9F 00 .faraddr 00009FE2h -00371Ar 1 E3 9F 00 .faraddr 00009FE3h -00371Dr 1 E4 9F 00 .faraddr 00009FE4h -003720r 1 E5 9F 00 .faraddr 00009FE5h -003723r 1 E6 9F 00 .faraddr 00009FE6h -003726r 1 E7 9F 00 .faraddr 00009FE7h -003729r 1 E8 9F 00 .faraddr 00009FE8h -00372Cr 1 E9 9F 00 .faraddr 00009FE9h -00372Fr 1 EA 9F 00 .faraddr 00009FEAh -003732r 1 EB 9F 00 .faraddr 00009FEBh -003735r 1 EC 9F 00 .faraddr 00009FECh -003738r 1 ED 9F 00 .faraddr 00009FEDh -00373Br 1 EE 9F 00 .faraddr 00009FEEh -00373Er 1 EF 9F 00 .faraddr 00009FEFh -003741r 1 F0 9F 00 .faraddr 00009FF0h -003744r 1 F1 9F 00 .faraddr 00009FF1h -003747r 1 F2 9F 00 .faraddr 00009FF2h -00374Ar 1 F3 9F 00 .faraddr 00009FF3h -00374Dr 1 F4 9F 00 .faraddr 00009FF4h -003750r 1 F5 9F 00 .faraddr 00009FF5h -003753r 1 F6 9F 00 .faraddr 00009FF6h -003756r 1 F7 9F 00 .faraddr 00009FF7h -003759r 1 F8 9F 00 .faraddr 00009FF8h -00375Cr 1 F9 9F 00 .faraddr 00009FF9h -00375Fr 1 FA 9F 00 .faraddr 00009FFAh -003762r 1 FB 9F 00 .faraddr 00009FFBh -003765r 1 FC 9F 00 .faraddr 00009FFCh -003768r 1 FD 9F 00 .faraddr 00009FFDh -00376Br 1 FE 9F 00 .faraddr 00009FFEh -00376Er 1 FF 9F 00 .faraddr 00009FFFh -003771r 1 00 A0 00 .faraddr 0000A000h -003774r 1 01 A0 00 .faraddr 0000A001h -003777r 1 02 A0 00 .faraddr 0000A002h -00377Ar 1 03 A0 00 .faraddr 0000A003h -00377Dr 1 04 A0 00 .faraddr 0000A004h -003780r 1 05 A0 00 .faraddr 0000A005h -003783r 1 06 A0 00 .faraddr 0000A006h -003786r 1 07 A0 00 .faraddr 0000A007h -003789r 1 08 A0 00 .faraddr 0000A008h -00378Cr 1 09 A0 00 .faraddr 0000A009h -00378Fr 1 0A A0 00 .faraddr 0000A00Ah -003792r 1 0B A0 00 .faraddr 0000A00Bh -003795r 1 0C A0 00 .faraddr 0000A00Ch -003798r 1 0D A0 00 .faraddr 0000A00Dh -00379Br 1 0E A0 00 .faraddr 0000A00Eh -00379Er 1 0F A0 00 .faraddr 0000A00Fh -0037A1r 1 E1 AF 00 .faraddr 0000AFE1h -0037A4r 1 E2 AF 00 .faraddr 0000AFE2h -0037A7r 1 E3 AF 00 .faraddr 0000AFE3h -0037AAr 1 E4 AF 00 .faraddr 0000AFE4h -0037ADr 1 E5 AF 00 .faraddr 0000AFE5h -0037B0r 1 E6 AF 00 .faraddr 0000AFE6h -0037B3r 1 E7 AF 00 .faraddr 0000AFE7h -0037B6r 1 E8 AF 00 .faraddr 0000AFE8h -0037B9r 1 E9 AF 00 .faraddr 0000AFE9h -0037BCr 1 EA AF 00 .faraddr 0000AFEAh -0037BFr 1 EB AF 00 .faraddr 0000AFEBh -0037C2r 1 EC AF 00 .faraddr 0000AFECh -0037C5r 1 ED AF 00 .faraddr 0000AFEDh -0037C8r 1 EE AF 00 .faraddr 0000AFEEh -0037CBr 1 EF AF 00 .faraddr 0000AFEFh -0037CEr 1 F0 AF 00 .faraddr 0000AFF0h -0037D1r 1 F1 AF 00 .faraddr 0000AFF1h -0037D4r 1 F2 AF 00 .faraddr 0000AFF2h -0037D7r 1 F3 AF 00 .faraddr 0000AFF3h -0037DAr 1 F4 AF 00 .faraddr 0000AFF4h -0037DDr 1 F5 AF 00 .faraddr 0000AFF5h -0037E0r 1 F6 AF 00 .faraddr 0000AFF6h -0037E3r 1 F7 AF 00 .faraddr 0000AFF7h -0037E6r 1 F8 AF 00 .faraddr 0000AFF8h -0037E9r 1 F9 AF 00 .faraddr 0000AFF9h -0037ECr 1 FA AF 00 .faraddr 0000AFFAh -0037EFr 1 FB AF 00 .faraddr 0000AFFBh -0037F2r 1 FC AF 00 .faraddr 0000AFFCh -0037F5r 1 FD AF 00 .faraddr 0000AFFDh -0037F8r 1 FE AF 00 .faraddr 0000AFFEh -0037FBr 1 FF AF 00 .faraddr 0000AFFFh -0037FEr 1 00 B0 00 .faraddr 0000B000h -003801r 1 01 B0 00 .faraddr 0000B001h -003804r 1 02 B0 00 .faraddr 0000B002h -003807r 1 03 B0 00 .faraddr 0000B003h -00380Ar 1 04 B0 00 .faraddr 0000B004h -00380Dr 1 05 B0 00 .faraddr 0000B005h -003810r 1 06 B0 00 .faraddr 0000B006h -003813r 1 07 B0 00 .faraddr 0000B007h -003816r 1 08 B0 00 .faraddr 0000B008h -003819r 1 09 B0 00 .faraddr 0000B009h -00381Cr 1 0A B0 00 .faraddr 0000B00Ah -00381Fr 1 0B B0 00 .faraddr 0000B00Bh -003822r 1 0C B0 00 .faraddr 0000B00Ch -003825r 1 0D B0 00 .faraddr 0000B00Dh -003828r 1 0E B0 00 .faraddr 0000B00Eh -00382Br 1 0F B0 00 .faraddr 0000B00Fh -00382Er 1 E1 FF 00 .faraddr 0000FFE1h -003831r 1 E2 FF 00 .faraddr 0000FFE2h -003834r 1 E3 FF 00 .faraddr 0000FFE3h -003837r 1 E4 FF 00 .faraddr 0000FFE4h -00383Ar 1 E5 FF 00 .faraddr 0000FFE5h -00383Dr 1 E6 FF 00 .faraddr 0000FFE6h -003840r 1 E7 FF 00 .faraddr 0000FFE7h -003843r 1 E8 FF 00 .faraddr 0000FFE8h -003846r 1 E9 FF 00 .faraddr 0000FFE9h -003849r 1 EA FF 00 .faraddr 0000FFEAh -00384Cr 1 EB FF 00 .faraddr 0000FFEBh -00384Fr 1 EC FF 00 .faraddr 0000FFECh -003852r 1 ED FF 00 .faraddr 0000FFEDh -003855r 1 EE FF 00 .faraddr 0000FFEEh -003858r 1 EF FF 00 .faraddr 0000FFEFh -00385Br 1 F0 FF 00 .faraddr 0000FFF0h -00385Er 1 F1 FF 00 .faraddr 0000FFF1h -003861r 1 F2 FF 00 .faraddr 0000FFF2h -003864r 1 F3 FF 00 .faraddr 0000FFF3h -003867r 1 F4 FF 00 .faraddr 0000FFF4h -00386Ar 1 F5 FF 00 .faraddr 0000FFF5h -00386Dr 1 F6 FF 00 .faraddr 0000FFF6h -003870r 1 F7 FF 00 .faraddr 0000FFF7h -003873r 1 F8 FF 00 .faraddr 0000FFF8h -003876r 1 F9 FF 00 .faraddr 0000FFF9h -003879r 1 FA FF 00 .faraddr 0000FFFAh -00387Cr 1 FB FF 00 .faraddr 0000FFFBh -00387Fr 1 FC FF 00 .faraddr 0000FFFCh -003882r 1 FD FF 00 .faraddr 0000FFFDh -003885r 1 FE FF 00 .faraddr 0000FFFEh -003888r 1 FF FF 00 .faraddr 0000FFFFh -00388Br 1 00 00 01 .faraddr 00010000h -00388Er 1 01 00 01 .faraddr 00010001h -003891r 1 02 00 01 .faraddr 00010002h -003894r 1 03 00 01 .faraddr 00010003h -003897r 1 04 00 01 .faraddr 00010004h -00389Ar 1 05 00 01 .faraddr 00010005h -00389Dr 1 06 00 01 .faraddr 00010006h -0038A0r 1 07 00 01 .faraddr 00010007h -0038A3r 1 08 00 01 .faraddr 00010008h -0038A6r 1 09 00 01 .faraddr 00010009h -0038A9r 1 0A 00 01 .faraddr 0001000Ah -0038ACr 1 0B 00 01 .faraddr 0001000Bh -0038AFr 1 0C 00 01 .faraddr 0001000Ch -0038B2r 1 0D 00 01 .faraddr 0001000Dh -0038B5r 1 0E 00 01 .faraddr 0001000Eh -0038B8r 1 0F 00 01 .faraddr 0001000Fh -0038BBr 1 E1 FF 10 .faraddr 0010FFE1h -0038BEr 1 E2 FF 10 .faraddr 0010FFE2h -0038C1r 1 E3 FF 10 .faraddr 0010FFE3h -0038C4r 1 E4 FF 10 .faraddr 0010FFE4h -0038C7r 1 E5 FF 10 .faraddr 0010FFE5h -0038CAr 1 E6 FF 10 .faraddr 0010FFE6h -0038CDr 1 E7 FF 10 .faraddr 0010FFE7h -0038D0r 1 E8 FF 10 .faraddr 0010FFE8h -0038D3r 1 E9 FF 10 .faraddr 0010FFE9h -0038D6r 1 EA FF 10 .faraddr 0010FFEAh -0038D9r 1 EB FF 10 .faraddr 0010FFEBh -0038DCr 1 EC FF 10 .faraddr 0010FFECh -0038DFr 1 ED FF 10 .faraddr 0010FFEDh -0038E2r 1 EE FF 10 .faraddr 0010FFEEh -0038E5r 1 EF FF 10 .faraddr 0010FFEFh -0038E8r 1 F0 FF 10 .faraddr 0010FFF0h -0038EBr 1 F1 FF 10 .faraddr 0010FFF1h -0038EEr 1 F2 FF 10 .faraddr 0010FFF2h -0038F1r 1 F3 FF 10 .faraddr 0010FFF3h -0038F4r 1 F4 FF 10 .faraddr 0010FFF4h -0038F7r 1 F5 FF 10 .faraddr 0010FFF5h -0038FAr 1 F6 FF 10 .faraddr 0010FFF6h -0038FDr 1 F7 FF 10 .faraddr 0010FFF7h -003900r 1 F8 FF 10 .faraddr 0010FFF8h -003903r 1 F9 FF 10 .faraddr 0010FFF9h -003906r 1 FA FF 10 .faraddr 0010FFFAh -003909r 1 FB FF 10 .faraddr 0010FFFBh -00390Cr 1 FC FF 10 .faraddr 0010FFFCh -00390Fr 1 FD FF 10 .faraddr 0010FFFDh -003912r 1 FE FF 10 .faraddr 0010FFFEh -003915r 1 FF FF 10 .faraddr 0010FFFFh -003918r 1 00 00 11 .faraddr 00110000h -00391Br 1 01 00 11 .faraddr 00110001h -00391Er 1 02 00 11 .faraddr 00110002h -003921r 1 03 00 11 .faraddr 00110003h -003924r 1 04 00 11 .faraddr 00110004h -003927r 1 05 00 11 .faraddr 00110005h -00392Ar 1 06 00 11 .faraddr 00110006h -00392Dr 1 07 00 11 .faraddr 00110007h -003930r 1 08 00 11 .faraddr 00110008h -003933r 1 09 00 11 .faraddr 00110009h -003936r 1 0A 00 11 .faraddr 0011000Ah -003939r 1 0B 00 11 .faraddr 0011000Bh -00393Cr 1 0C 00 11 .faraddr 0011000Ch -00393Fr 1 0D 00 11 .faraddr 0011000Dh -003942r 1 0E 00 11 .faraddr 0011000Eh -003945r 1 0F 00 11 .faraddr 0011000Fh -003948r 1 E1 FF 20 .faraddr 0020FFE1h -00394Br 1 E2 FF 20 .faraddr 0020FFE2h -00394Er 1 E3 FF 20 .faraddr 0020FFE3h -003951r 1 E4 FF 20 .faraddr 0020FFE4h -003954r 1 E5 FF 20 .faraddr 0020FFE5h -003957r 1 E6 FF 20 .faraddr 0020FFE6h -00395Ar 1 E7 FF 20 .faraddr 0020FFE7h -00395Dr 1 E8 FF 20 .faraddr 0020FFE8h -003960r 1 E9 FF 20 .faraddr 0020FFE9h -003963r 1 EA FF 20 .faraddr 0020FFEAh -003966r 1 EB FF 20 .faraddr 0020FFEBh -003969r 1 EC FF 20 .faraddr 0020FFECh -00396Cr 1 ED FF 20 .faraddr 0020FFEDh -00396Fr 1 EE FF 20 .faraddr 0020FFEEh -003972r 1 EF FF 20 .faraddr 0020FFEFh -003975r 1 F0 FF 20 .faraddr 0020FFF0h -003978r 1 F1 FF 20 .faraddr 0020FFF1h -00397Br 1 F2 FF 20 .faraddr 0020FFF2h -00397Er 1 F3 FF 20 .faraddr 0020FFF3h -003981r 1 F4 FF 20 .faraddr 0020FFF4h -003984r 1 F5 FF 20 .faraddr 0020FFF5h -003987r 1 F6 FF 20 .faraddr 0020FFF6h -00398Ar 1 F7 FF 20 .faraddr 0020FFF7h -00398Dr 1 F8 FF 20 .faraddr 0020FFF8h -003990r 1 F9 FF 20 .faraddr 0020FFF9h -003993r 1 FA FF 20 .faraddr 0020FFFAh -003996r 1 FB FF 20 .faraddr 0020FFFBh -003999r 1 FC FF 20 .faraddr 0020FFFCh -00399Cr 1 FD FF 20 .faraddr 0020FFFDh -00399Fr 1 FE FF 20 .faraddr 0020FFFEh -0039A2r 1 FF FF 20 .faraddr 0020FFFFh -0039A5r 1 00 00 21 .faraddr 00210000h -0039A8r 1 01 00 21 .faraddr 00210001h -0039ABr 1 02 00 21 .faraddr 00210002h -0039AEr 1 03 00 21 .faraddr 00210003h -0039B1r 1 04 00 21 .faraddr 00210004h -0039B4r 1 05 00 21 .faraddr 00210005h -0039B7r 1 06 00 21 .faraddr 00210006h -0039BAr 1 07 00 21 .faraddr 00210007h -0039BDr 1 08 00 21 .faraddr 00210008h -0039C0r 1 09 00 21 .faraddr 00210009h -0039C3r 1 0A 00 21 .faraddr 0021000Ah -0039C6r 1 0B 00 21 .faraddr 0021000Bh -0039C9r 1 0C 00 21 .faraddr 0021000Ch -0039CCr 1 0D 00 21 .faraddr 0021000Dh -0039CFr 1 0E 00 21 .faraddr 0021000Eh -0039D2r 1 0F 00 21 .faraddr 0021000Fh -0039D5r 1 E1 FF 7F .faraddr 007FFFE1h -0039D8r 1 E2 FF 7F .faraddr 007FFFE2h -0039DBr 1 E3 FF 7F .faraddr 007FFFE3h -0039DEr 1 E4 FF 7F .faraddr 007FFFE4h -0039E1r 1 E5 FF 7F .faraddr 007FFFE5h -0039E4r 1 E6 FF 7F .faraddr 007FFFE6h -0039E7r 1 E7 FF 7F .faraddr 007FFFE7h -0039EAr 1 E8 FF 7F .faraddr 007FFFE8h -0039EDr 1 E9 FF 7F .faraddr 007FFFE9h -0039F0r 1 EA FF 7F .faraddr 007FFFEAh -0039F3r 1 EB FF 7F .faraddr 007FFFEBh -0039F6r 1 EC FF 7F .faraddr 007FFFECh -0039F9r 1 ED FF 7F .faraddr 007FFFEDh -0039FCr 1 EE FF 7F .faraddr 007FFFEEh -0039FFr 1 EF FF 7F .faraddr 007FFFEFh -003A02r 1 F0 FF 7F .faraddr 007FFFF0h -003A05r 1 F1 FF 7F .faraddr 007FFFF1h -003A08r 1 F2 FF 7F .faraddr 007FFFF2h -003A0Br 1 F3 FF 7F .faraddr 007FFFF3h -003A0Er 1 F4 FF 7F .faraddr 007FFFF4h -003A11r 1 F5 FF 7F .faraddr 007FFFF5h -003A14r 1 F6 FF 7F .faraddr 007FFFF6h -003A17r 1 F7 FF 7F .faraddr 007FFFF7h -003A1Ar 1 F8 FF 7F .faraddr 007FFFF8h -003A1Dr 1 F9 FF 7F .faraddr 007FFFF9h -003A20r 1 FA FF 7F .faraddr 007FFFFAh -003A23r 1 FB FF 7F .faraddr 007FFFFBh -003A26r 1 FC FF 7F .faraddr 007FFFFCh -003A29r 1 FD FF 7F .faraddr 007FFFFDh -003A2Cr 1 FE FF 7F .faraddr 007FFFFEh -003A2Fr 1 FF FF 7F .faraddr 007FFFFFh -003A32r 1 00 00 80 .faraddr 00800000h -003A35r 1 01 00 80 .faraddr 00800001h -003A38r 1 02 00 80 .faraddr 00800002h -003A3Br 1 03 00 80 .faraddr 00800003h -003A3Er 1 04 00 80 .faraddr 00800004h -003A41r 1 05 00 80 .faraddr 00800005h -003A44r 1 06 00 80 .faraddr 00800006h -003A47r 1 07 00 80 .faraddr 00800007h -003A4Ar 1 08 00 80 .faraddr 00800008h -003A4Dr 1 09 00 80 .faraddr 00800009h -003A50r 1 0A 00 80 .faraddr 0080000Ah -003A53r 1 0B 00 80 .faraddr 0080000Bh -003A56r 1 0C 00 80 .faraddr 0080000Ch -003A59r 1 0D 00 80 .faraddr 0080000Dh -003A5Cr 1 0E 00 80 .faraddr 0080000Eh -003A5Fr 1 0F 00 80 .faraddr 0080000Fh -003A62r 1 E1 FF 9F .faraddr 009FFFE1h -003A65r 1 E2 FF 9F .faraddr 009FFFE2h -003A68r 1 E3 FF 9F .faraddr 009FFFE3h -003A6Br 1 E4 FF 9F .faraddr 009FFFE4h -003A6Er 1 E5 FF 9F .faraddr 009FFFE5h -003A71r 1 E6 FF 9F .faraddr 009FFFE6h -003A74r 1 E7 FF 9F .faraddr 009FFFE7h -003A77r 1 E8 FF 9F .faraddr 009FFFE8h -003A7Ar 1 E9 FF 9F .faraddr 009FFFE9h -003A7Dr 1 EA FF 9F .faraddr 009FFFEAh -003A80r 1 EB FF 9F .faraddr 009FFFEBh -003A83r 1 EC FF 9F .faraddr 009FFFECh -003A86r 1 ED FF 9F .faraddr 009FFFEDh -003A89r 1 EE FF 9F .faraddr 009FFFEEh -003A8Cr 1 EF FF 9F .faraddr 009FFFEFh -003A8Fr 1 F0 FF 9F .faraddr 009FFFF0h -003A92r 1 F1 FF 9F .faraddr 009FFFF1h -003A95r 1 F2 FF 9F .faraddr 009FFFF2h -003A98r 1 F3 FF 9F .faraddr 009FFFF3h -003A9Br 1 F4 FF 9F .faraddr 009FFFF4h -003A9Er 1 F5 FF 9F .faraddr 009FFFF5h -003AA1r 1 F6 FF 9F .faraddr 009FFFF6h -003AA4r 1 F7 FF 9F .faraddr 009FFFF7h -003AA7r 1 F8 FF 9F .faraddr 009FFFF8h -003AAAr 1 F9 FF 9F .faraddr 009FFFF9h -003AADr 1 FA FF 9F .faraddr 009FFFFAh -003AB0r 1 FB FF 9F .faraddr 009FFFFBh -003AB3r 1 FC FF 9F .faraddr 009FFFFCh -003AB6r 1 FD FF 9F .faraddr 009FFFFDh -003AB9r 1 FE FF 9F .faraddr 009FFFFEh -003ABCr 1 FF FF 9F .faraddr 009FFFFFh -003ABFr 1 00 00 A0 .faraddr 00A00000h -003AC2r 1 01 00 A0 .faraddr 00A00001h -003AC5r 1 02 00 A0 .faraddr 00A00002h -003AC8r 1 03 00 A0 .faraddr 00A00003h -003ACBr 1 04 00 A0 .faraddr 00A00004h -003ACEr 1 05 00 A0 .faraddr 00A00005h -003AD1r 1 06 00 A0 .faraddr 00A00006h -003AD4r 1 07 00 A0 .faraddr 00A00007h -003AD7r 1 08 00 A0 .faraddr 00A00008h -003ADAr 1 09 00 A0 .faraddr 00A00009h -003ADDr 1 0A 00 A0 .faraddr 00A0000Ah -003AE0r 1 0B 00 A0 .faraddr 00A0000Bh -003AE3r 1 0C 00 A0 .faraddr 00A0000Ch -003AE6r 1 0D 00 A0 .faraddr 00A0000Dh -003AE9r 1 0E 00 A0 .faraddr 00A0000Eh -003AECr 1 0F 00 A0 .faraddr 00A0000Fh -003AEFr 1 E1 FF FF .faraddr 00FFFFE1h -003AF2r 1 E2 FF FF .faraddr 00FFFFE2h -003AF5r 1 E3 FF FF .faraddr 00FFFFE3h -003AF8r 1 E4 FF FF .faraddr 00FFFFE4h -003AFBr 1 E5 FF FF .faraddr 00FFFFE5h -003AFEr 1 E6 FF FF .faraddr 00FFFFE6h -003B01r 1 E7 FF FF .faraddr 00FFFFE7h -003B04r 1 E8 FF FF .faraddr 00FFFFE8h -003B07r 1 E9 FF FF .faraddr 00FFFFE9h -003B0Ar 1 EA FF FF .faraddr 00FFFFEAh -003B0Dr 1 EB FF FF .faraddr 00FFFFEBh -003B10r 1 EC FF FF .faraddr 00FFFFECh -003B13r 1 ED FF FF .faraddr 00FFFFEDh -003B16r 1 EE FF FF .faraddr 00FFFFEEh -003B19r 1 EF FF FF .faraddr 00FFFFEFh -003B1Cr 1 F0 FF FF .faraddr 00FFFFF0h -003B1Fr 1 F1 FF FF .faraddr 00FFFFF1h -003B22r 1 F2 FF FF .faraddr 00FFFFF2h -003B25r 1 F3 FF FF .faraddr 00FFFFF3h -003B28r 1 F4 FF FF .faraddr 00FFFFF4h -003B2Br 1 F5 FF FF .faraddr 00FFFFF5h -003B2Er 1 F6 FF FF .faraddr 00FFFFF6h -003B31r 1 F7 FF FF .faraddr 00FFFFF7h -003B34r 1 F8 FF FF .faraddr 00FFFFF8h -003B37r 1 F9 FF FF .faraddr 00FFFFF9h -003B3Ar 1 FA FF FF .faraddr 00FFFFFAh -003B3Dr 1 FB FF FF .faraddr 00FFFFFBh -003B40r 1 FC FF FF .faraddr 00FFFFFCh -003B43r 1 FD FF FF .faraddr 00FFFFFDh -003B46r 1 FE FF FF .faraddr 00FFFFFEh -003B49r 1 FF FF FF .faraddr 00FFFFFFh +00355Er 1 ; alternative 8-digit hex values, uppercase +00355Er 1 00 00 00 .faraddr 00000000h +003561r 1 01 00 00 .faraddr 00000001h +003564r 1 02 00 00 .faraddr 00000002h +003567r 1 03 00 00 .faraddr 00000003h +00356Ar 1 04 00 00 .faraddr 00000004h +00356Dr 1 05 00 00 .faraddr 00000005h +003570r 1 06 00 00 .faraddr 00000006h +003573r 1 07 00 00 .faraddr 00000007h +003576r 1 08 00 00 .faraddr 00000008h +003579r 1 09 00 00 .faraddr 00000009h +00357Cr 1 0A 00 00 .faraddr 0000000Ah +00357Fr 1 0B 00 00 .faraddr 0000000Bh +003582r 1 0C 00 00 .faraddr 0000000Ch +003585r 1 0D 00 00 .faraddr 0000000Dh +003588r 1 0E 00 00 .faraddr 0000000Eh +00358Br 1 0F 00 00 .faraddr 0000000Fh +00358Er 1 10 00 00 .faraddr 00000010h +003591r 1 11 00 00 .faraddr 00000011h +003594r 1 12 00 00 .faraddr 00000012h +003597r 1 13 00 00 .faraddr 00000013h +00359Ar 1 70 00 00 .faraddr 00000070h +00359Dr 1 71 00 00 .faraddr 00000071h +0035A0r 1 72 00 00 .faraddr 00000072h +0035A3r 1 73 00 00 .faraddr 00000073h +0035A6r 1 74 00 00 .faraddr 00000074h +0035A9r 1 75 00 00 .faraddr 00000075h +0035ACr 1 76 00 00 .faraddr 00000076h +0035AFr 1 77 00 00 .faraddr 00000077h +0035B2r 1 78 00 00 .faraddr 00000078h +0035B5r 1 79 00 00 .faraddr 00000079h +0035B8r 1 7A 00 00 .faraddr 0000007Ah +0035BBr 1 7B 00 00 .faraddr 0000007Bh +0035BEr 1 7C 00 00 .faraddr 0000007Ch +0035C1r 1 7D 00 00 .faraddr 0000007Dh +0035C4r 1 7E 00 00 .faraddr 0000007Eh +0035C7r 1 7F 00 00 .faraddr 0000007Fh +0035CAr 1 80 00 00 .faraddr 00000080h +0035CDr 1 81 00 00 .faraddr 00000081h +0035D0r 1 82 00 00 .faraddr 00000082h +0035D3r 1 83 00 00 .faraddr 00000083h +0035D6r 1 84 00 00 .faraddr 00000084h +0035D9r 1 85 00 00 .faraddr 00000085h +0035DCr 1 86 00 00 .faraddr 00000086h +0035DFr 1 F0 00 00 .faraddr 000000F0h +0035E2r 1 F1 00 00 .faraddr 000000F1h +0035E5r 1 F2 00 00 .faraddr 000000F2h +0035E8r 1 F3 00 00 .faraddr 000000F3h +0035EBr 1 F4 00 00 .faraddr 000000F4h +0035EEr 1 F5 00 00 .faraddr 000000F5h +0035F1r 1 F6 00 00 .faraddr 000000F6h +0035F4r 1 F7 00 00 .faraddr 000000F7h +0035F7r 1 F8 00 00 .faraddr 000000F8h +0035FAr 1 F9 00 00 .faraddr 000000F9h +0035FDr 1 FA 00 00 .faraddr 000000FAh +003600r 1 FB 00 00 .faraddr 000000FBh +003603r 1 FC 00 00 .faraddr 000000FCh +003606r 1 FD 00 00 .faraddr 000000FDh +003609r 1 FE 00 00 .faraddr 000000FEh +00360Cr 1 FF 00 00 .faraddr 000000FFh +00360Fr 1 00 01 00 .faraddr 00000100h +003612r 1 01 01 00 .faraddr 00000101h +003615r 1 02 01 00 .faraddr 00000102h +003618r 1 03 01 00 .faraddr 00000103h +00361Br 1 D2 0F 00 .faraddr 00000FD2h +00361Er 1 D3 0F 00 .faraddr 00000FD3h +003621r 1 D4 0F 00 .faraddr 00000FD4h +003624r 1 D5 0F 00 .faraddr 00000FD5h +003627r 1 D6 0F 00 .faraddr 00000FD6h +00362Ar 1 D7 0F 00 .faraddr 00000FD7h +00362Dr 1 D8 0F 00 .faraddr 00000FD8h +003630r 1 D9 0F 00 .faraddr 00000FD9h +003633r 1 DA 0F 00 .faraddr 00000FDAh +003636r 1 DB 0F 00 .faraddr 00000FDBh +003639r 1 DC 0F 00 .faraddr 00000FDCh +00363Cr 1 DD 0F 00 .faraddr 00000FDDh +00363Fr 1 DE 0F 00 .faraddr 00000FDEh +003642r 1 DF 0F 00 .faraddr 00000FDFh +003645r 1 E0 0F 00 .faraddr 00000FE0h +003648r 1 E1 0F 00 .faraddr 00000FE1h +00364Br 1 E2 0F 00 .faraddr 00000FE2h +00364Er 1 E3 0F 00 .faraddr 00000FE3h +003651r 1 E4 0F 00 .faraddr 00000FE4h +003654r 1 E5 0F 00 .faraddr 00000FE5h +003657r 1 E6 0F 00 .faraddr 00000FE6h +00365Ar 1 E7 0F 00 .faraddr 00000FE7h +00365Dr 1 E8 0F 00 .faraddr 00000FE8h +003660r 1 E9 0F 00 .faraddr 00000FE9h +003663r 1 EA 0F 00 .faraddr 00000FEAh +003666r 1 EB 0F 00 .faraddr 00000FEBh +003669r 1 EC 0F 00 .faraddr 00000FECh +00366Cr 1 ED 0F 00 .faraddr 00000FEDh +00366Fr 1 EE 0F 00 .faraddr 00000FEEh +003672r 1 EF 0F 00 .faraddr 00000FEFh +003675r 1 F0 0F 00 .faraddr 00000FF0h +003678r 1 F1 0F 00 .faraddr 00000FF1h +00367Br 1 F2 0F 00 .faraddr 00000FF2h +00367Er 1 F3 0F 00 .faraddr 00000FF3h +003681r 1 F4 0F 00 .faraddr 00000FF4h +003684r 1 F5 0F 00 .faraddr 00000FF5h +003687r 1 F6 0F 00 .faraddr 00000FF6h +00368Ar 1 F7 0F 00 .faraddr 00000FF7h +00368Dr 1 F8 0F 00 .faraddr 00000FF8h +003690r 1 F9 0F 00 .faraddr 00000FF9h +003693r 1 FA 0F 00 .faraddr 00000FFAh +003696r 1 FB 0F 00 .faraddr 00000FFBh +003699r 1 FC 0F 00 .faraddr 00000FFCh +00369Cr 1 FD 0F 00 .faraddr 00000FFDh +00369Fr 1 FE 0F 00 .faraddr 00000FFEh +0036A2r 1 FF 0F 00 .faraddr 00000FFFh +0036A5r 1 00 10 00 .faraddr 00001000h +0036A8r 1 01 10 00 .faraddr 00001001h +0036ABr 1 02 10 00 .faraddr 00001002h +0036AEr 1 03 10 00 .faraddr 00001003h +0036B1r 1 04 10 00 .faraddr 00001004h +0036B4r 1 05 10 00 .faraddr 00001005h +0036B7r 1 06 10 00 .faraddr 00001006h +0036BAr 1 07 10 00 .faraddr 00001007h +0036BDr 1 08 10 00 .faraddr 00001008h +0036C0r 1 F0 7F 00 .faraddr 00007FF0h +0036C3r 1 F1 7F 00 .faraddr 00007FF1h +0036C6r 1 F2 7F 00 .faraddr 00007FF2h +0036C9r 1 F3 7F 00 .faraddr 00007FF3h +0036CCr 1 F4 7F 00 .faraddr 00007FF4h +0036CFr 1 F5 7F 00 .faraddr 00007FF5h +0036D2r 1 F6 7F 00 .faraddr 00007FF6h +0036D5r 1 F7 7F 00 .faraddr 00007FF7h +0036D8r 1 F8 7F 00 .faraddr 00007FF8h +0036DBr 1 F9 7F 00 .faraddr 00007FF9h +0036DEr 1 FA 7F 00 .faraddr 00007FFAh +0036E1r 1 FB 7F 00 .faraddr 00007FFBh +0036E4r 1 FC 7F 00 .faraddr 00007FFCh +0036E7r 1 FD 7F 00 .faraddr 00007FFDh +0036EAr 1 FE 7F 00 .faraddr 00007FFEh +0036EDr 1 FF 7F 00 .faraddr 00007FFFh +0036F0r 1 00 80 00 .faraddr 00008000h +0036F3r 1 01 80 00 .faraddr 00008001h +0036F6r 1 02 80 00 .faraddr 00008002h +0036F9r 1 03 80 00 .faraddr 00008003h +0036FCr 1 04 80 00 .faraddr 00008004h +0036FFr 1 05 80 00 .faraddr 00008005h +003702r 1 06 80 00 .faraddr 00008006h +003705r 1 07 80 00 .faraddr 00008007h +003708r 1 08 80 00 .faraddr 00008008h +00370Br 1 09 80 00 .faraddr 00008009h +00370Er 1 0A 80 00 .faraddr 0000800Ah +003711r 1 0B 80 00 .faraddr 0000800Bh +003714r 1 E1 9F 00 .faraddr 00009FE1h +003717r 1 E2 9F 00 .faraddr 00009FE2h +00371Ar 1 E3 9F 00 .faraddr 00009FE3h +00371Dr 1 E4 9F 00 .faraddr 00009FE4h +003720r 1 E5 9F 00 .faraddr 00009FE5h +003723r 1 E6 9F 00 .faraddr 00009FE6h +003726r 1 E7 9F 00 .faraddr 00009FE7h +003729r 1 E8 9F 00 .faraddr 00009FE8h +00372Cr 1 E9 9F 00 .faraddr 00009FE9h +00372Fr 1 EA 9F 00 .faraddr 00009FEAh +003732r 1 EB 9F 00 .faraddr 00009FEBh +003735r 1 EC 9F 00 .faraddr 00009FECh +003738r 1 ED 9F 00 .faraddr 00009FEDh +00373Br 1 EE 9F 00 .faraddr 00009FEEh +00373Er 1 EF 9F 00 .faraddr 00009FEFh +003741r 1 F0 9F 00 .faraddr 00009FF0h +003744r 1 F1 9F 00 .faraddr 00009FF1h +003747r 1 F2 9F 00 .faraddr 00009FF2h +00374Ar 1 F3 9F 00 .faraddr 00009FF3h +00374Dr 1 F4 9F 00 .faraddr 00009FF4h +003750r 1 F5 9F 00 .faraddr 00009FF5h +003753r 1 F6 9F 00 .faraddr 00009FF6h +003756r 1 F7 9F 00 .faraddr 00009FF7h +003759r 1 F8 9F 00 .faraddr 00009FF8h +00375Cr 1 F9 9F 00 .faraddr 00009FF9h +00375Fr 1 FA 9F 00 .faraddr 00009FFAh +003762r 1 FB 9F 00 .faraddr 00009FFBh +003765r 1 FC 9F 00 .faraddr 00009FFCh +003768r 1 FD 9F 00 .faraddr 00009FFDh +00376Br 1 FE 9F 00 .faraddr 00009FFEh +00376Er 1 FF 9F 00 .faraddr 00009FFFh +003771r 1 00 A0 00 .faraddr 0000A000h +003774r 1 01 A0 00 .faraddr 0000A001h +003777r 1 02 A0 00 .faraddr 0000A002h +00377Ar 1 03 A0 00 .faraddr 0000A003h +00377Dr 1 04 A0 00 .faraddr 0000A004h +003780r 1 05 A0 00 .faraddr 0000A005h +003783r 1 06 A0 00 .faraddr 0000A006h +003786r 1 07 A0 00 .faraddr 0000A007h +003789r 1 08 A0 00 .faraddr 0000A008h +00378Cr 1 09 A0 00 .faraddr 0000A009h +00378Fr 1 0A A0 00 .faraddr 0000A00Ah +003792r 1 0B A0 00 .faraddr 0000A00Bh +003795r 1 0C A0 00 .faraddr 0000A00Ch +003798r 1 0D A0 00 .faraddr 0000A00Dh +00379Br 1 0E A0 00 .faraddr 0000A00Eh +00379Er 1 0F A0 00 .faraddr 0000A00Fh +0037A1r 1 E1 AF 00 .faraddr 0000AFE1h +0037A4r 1 E2 AF 00 .faraddr 0000AFE2h +0037A7r 1 E3 AF 00 .faraddr 0000AFE3h +0037AAr 1 E4 AF 00 .faraddr 0000AFE4h +0037ADr 1 E5 AF 00 .faraddr 0000AFE5h +0037B0r 1 E6 AF 00 .faraddr 0000AFE6h +0037B3r 1 E7 AF 00 .faraddr 0000AFE7h +0037B6r 1 E8 AF 00 .faraddr 0000AFE8h +0037B9r 1 E9 AF 00 .faraddr 0000AFE9h +0037BCr 1 EA AF 00 .faraddr 0000AFEAh +0037BFr 1 EB AF 00 .faraddr 0000AFEBh +0037C2r 1 EC AF 00 .faraddr 0000AFECh +0037C5r 1 ED AF 00 .faraddr 0000AFEDh +0037C8r 1 EE AF 00 .faraddr 0000AFEEh +0037CBr 1 EF AF 00 .faraddr 0000AFEFh +0037CEr 1 F0 AF 00 .faraddr 0000AFF0h +0037D1r 1 F1 AF 00 .faraddr 0000AFF1h +0037D4r 1 F2 AF 00 .faraddr 0000AFF2h +0037D7r 1 F3 AF 00 .faraddr 0000AFF3h +0037DAr 1 F4 AF 00 .faraddr 0000AFF4h +0037DDr 1 F5 AF 00 .faraddr 0000AFF5h +0037E0r 1 F6 AF 00 .faraddr 0000AFF6h +0037E3r 1 F7 AF 00 .faraddr 0000AFF7h +0037E6r 1 F8 AF 00 .faraddr 0000AFF8h +0037E9r 1 F9 AF 00 .faraddr 0000AFF9h +0037ECr 1 FA AF 00 .faraddr 0000AFFAh +0037EFr 1 FB AF 00 .faraddr 0000AFFBh +0037F2r 1 FC AF 00 .faraddr 0000AFFCh +0037F5r 1 FD AF 00 .faraddr 0000AFFDh +0037F8r 1 FE AF 00 .faraddr 0000AFFEh +0037FBr 1 FF AF 00 .faraddr 0000AFFFh +0037FEr 1 00 B0 00 .faraddr 0000B000h +003801r 1 01 B0 00 .faraddr 0000B001h +003804r 1 02 B0 00 .faraddr 0000B002h +003807r 1 03 B0 00 .faraddr 0000B003h +00380Ar 1 04 B0 00 .faraddr 0000B004h +00380Dr 1 05 B0 00 .faraddr 0000B005h +003810r 1 06 B0 00 .faraddr 0000B006h +003813r 1 07 B0 00 .faraddr 0000B007h +003816r 1 08 B0 00 .faraddr 0000B008h +003819r 1 09 B0 00 .faraddr 0000B009h +00381Cr 1 0A B0 00 .faraddr 0000B00Ah +00381Fr 1 0B B0 00 .faraddr 0000B00Bh +003822r 1 0C B0 00 .faraddr 0000B00Ch +003825r 1 0D B0 00 .faraddr 0000B00Dh +003828r 1 0E B0 00 .faraddr 0000B00Eh +00382Br 1 0F B0 00 .faraddr 0000B00Fh +00382Er 1 E1 FF 00 .faraddr 0000FFE1h +003831r 1 E2 FF 00 .faraddr 0000FFE2h +003834r 1 E3 FF 00 .faraddr 0000FFE3h +003837r 1 E4 FF 00 .faraddr 0000FFE4h +00383Ar 1 E5 FF 00 .faraddr 0000FFE5h +00383Dr 1 E6 FF 00 .faraddr 0000FFE6h +003840r 1 E7 FF 00 .faraddr 0000FFE7h +003843r 1 E8 FF 00 .faraddr 0000FFE8h +003846r 1 E9 FF 00 .faraddr 0000FFE9h +003849r 1 EA FF 00 .faraddr 0000FFEAh +00384Cr 1 EB FF 00 .faraddr 0000FFEBh +00384Fr 1 EC FF 00 .faraddr 0000FFECh +003852r 1 ED FF 00 .faraddr 0000FFEDh +003855r 1 EE FF 00 .faraddr 0000FFEEh +003858r 1 EF FF 00 .faraddr 0000FFEFh +00385Br 1 F0 FF 00 .faraddr 0000FFF0h +00385Er 1 F1 FF 00 .faraddr 0000FFF1h +003861r 1 F2 FF 00 .faraddr 0000FFF2h +003864r 1 F3 FF 00 .faraddr 0000FFF3h +003867r 1 F4 FF 00 .faraddr 0000FFF4h +00386Ar 1 F5 FF 00 .faraddr 0000FFF5h +00386Dr 1 F6 FF 00 .faraddr 0000FFF6h +003870r 1 F7 FF 00 .faraddr 0000FFF7h +003873r 1 F8 FF 00 .faraddr 0000FFF8h +003876r 1 F9 FF 00 .faraddr 0000FFF9h +003879r 1 FA FF 00 .faraddr 0000FFFAh +00387Cr 1 FB FF 00 .faraddr 0000FFFBh +00387Fr 1 FC FF 00 .faraddr 0000FFFCh +003882r 1 FD FF 00 .faraddr 0000FFFDh +003885r 1 FE FF 00 .faraddr 0000FFFEh +003888r 1 FF FF 00 .faraddr 0000FFFFh +00388Br 1 00 00 01 .faraddr 00010000h +00388Er 1 01 00 01 .faraddr 00010001h +003891r 1 02 00 01 .faraddr 00010002h +003894r 1 03 00 01 .faraddr 00010003h +003897r 1 04 00 01 .faraddr 00010004h +00389Ar 1 05 00 01 .faraddr 00010005h +00389Dr 1 06 00 01 .faraddr 00010006h +0038A0r 1 07 00 01 .faraddr 00010007h +0038A3r 1 08 00 01 .faraddr 00010008h +0038A6r 1 09 00 01 .faraddr 00010009h +0038A9r 1 0A 00 01 .faraddr 0001000Ah +0038ACr 1 0B 00 01 .faraddr 0001000Bh +0038AFr 1 0C 00 01 .faraddr 0001000Ch +0038B2r 1 0D 00 01 .faraddr 0001000Dh +0038B5r 1 0E 00 01 .faraddr 0001000Eh +0038B8r 1 0F 00 01 .faraddr 0001000Fh +0038BBr 1 E1 FF 10 .faraddr 0010FFE1h +0038BEr 1 E2 FF 10 .faraddr 0010FFE2h +0038C1r 1 E3 FF 10 .faraddr 0010FFE3h +0038C4r 1 E4 FF 10 .faraddr 0010FFE4h +0038C7r 1 E5 FF 10 .faraddr 0010FFE5h +0038CAr 1 E6 FF 10 .faraddr 0010FFE6h +0038CDr 1 E7 FF 10 .faraddr 0010FFE7h +0038D0r 1 E8 FF 10 .faraddr 0010FFE8h +0038D3r 1 E9 FF 10 .faraddr 0010FFE9h +0038D6r 1 EA FF 10 .faraddr 0010FFEAh +0038D9r 1 EB FF 10 .faraddr 0010FFEBh +0038DCr 1 EC FF 10 .faraddr 0010FFECh +0038DFr 1 ED FF 10 .faraddr 0010FFEDh +0038E2r 1 EE FF 10 .faraddr 0010FFEEh +0038E5r 1 EF FF 10 .faraddr 0010FFEFh +0038E8r 1 F0 FF 10 .faraddr 0010FFF0h +0038EBr 1 F1 FF 10 .faraddr 0010FFF1h +0038EEr 1 F2 FF 10 .faraddr 0010FFF2h +0038F1r 1 F3 FF 10 .faraddr 0010FFF3h +0038F4r 1 F4 FF 10 .faraddr 0010FFF4h +0038F7r 1 F5 FF 10 .faraddr 0010FFF5h +0038FAr 1 F6 FF 10 .faraddr 0010FFF6h +0038FDr 1 F7 FF 10 .faraddr 0010FFF7h +003900r 1 F8 FF 10 .faraddr 0010FFF8h +003903r 1 F9 FF 10 .faraddr 0010FFF9h +003906r 1 FA FF 10 .faraddr 0010FFFAh +003909r 1 FB FF 10 .faraddr 0010FFFBh +00390Cr 1 FC FF 10 .faraddr 0010FFFCh +00390Fr 1 FD FF 10 .faraddr 0010FFFDh +003912r 1 FE FF 10 .faraddr 0010FFFEh +003915r 1 FF FF 10 .faraddr 0010FFFFh +003918r 1 00 00 11 .faraddr 00110000h +00391Br 1 01 00 11 .faraddr 00110001h +00391Er 1 02 00 11 .faraddr 00110002h +003921r 1 03 00 11 .faraddr 00110003h +003924r 1 04 00 11 .faraddr 00110004h +003927r 1 05 00 11 .faraddr 00110005h +00392Ar 1 06 00 11 .faraddr 00110006h +00392Dr 1 07 00 11 .faraddr 00110007h +003930r 1 08 00 11 .faraddr 00110008h +003933r 1 09 00 11 .faraddr 00110009h +003936r 1 0A 00 11 .faraddr 0011000Ah +003939r 1 0B 00 11 .faraddr 0011000Bh +00393Cr 1 0C 00 11 .faraddr 0011000Ch +00393Fr 1 0D 00 11 .faraddr 0011000Dh +003942r 1 0E 00 11 .faraddr 0011000Eh +003945r 1 0F 00 11 .faraddr 0011000Fh +003948r 1 E1 FF 20 .faraddr 0020FFE1h +00394Br 1 E2 FF 20 .faraddr 0020FFE2h +00394Er 1 E3 FF 20 .faraddr 0020FFE3h +003951r 1 E4 FF 20 .faraddr 0020FFE4h +003954r 1 E5 FF 20 .faraddr 0020FFE5h +003957r 1 E6 FF 20 .faraddr 0020FFE6h +00395Ar 1 E7 FF 20 .faraddr 0020FFE7h +00395Dr 1 E8 FF 20 .faraddr 0020FFE8h +003960r 1 E9 FF 20 .faraddr 0020FFE9h +003963r 1 EA FF 20 .faraddr 0020FFEAh +003966r 1 EB FF 20 .faraddr 0020FFEBh +003969r 1 EC FF 20 .faraddr 0020FFECh +00396Cr 1 ED FF 20 .faraddr 0020FFEDh +00396Fr 1 EE FF 20 .faraddr 0020FFEEh +003972r 1 EF FF 20 .faraddr 0020FFEFh +003975r 1 F0 FF 20 .faraddr 0020FFF0h +003978r 1 F1 FF 20 .faraddr 0020FFF1h +00397Br 1 F2 FF 20 .faraddr 0020FFF2h +00397Er 1 F3 FF 20 .faraddr 0020FFF3h +003981r 1 F4 FF 20 .faraddr 0020FFF4h +003984r 1 F5 FF 20 .faraddr 0020FFF5h +003987r 1 F6 FF 20 .faraddr 0020FFF6h +00398Ar 1 F7 FF 20 .faraddr 0020FFF7h +00398Dr 1 F8 FF 20 .faraddr 0020FFF8h +003990r 1 F9 FF 20 .faraddr 0020FFF9h +003993r 1 FA FF 20 .faraddr 0020FFFAh +003996r 1 FB FF 20 .faraddr 0020FFFBh +003999r 1 FC FF 20 .faraddr 0020FFFCh +00399Cr 1 FD FF 20 .faraddr 0020FFFDh +00399Fr 1 FE FF 20 .faraddr 0020FFFEh +0039A2r 1 FF FF 20 .faraddr 0020FFFFh +0039A5r 1 00 00 21 .faraddr 00210000h +0039A8r 1 01 00 21 .faraddr 00210001h +0039ABr 1 02 00 21 .faraddr 00210002h +0039AEr 1 03 00 21 .faraddr 00210003h +0039B1r 1 04 00 21 .faraddr 00210004h +0039B4r 1 05 00 21 .faraddr 00210005h +0039B7r 1 06 00 21 .faraddr 00210006h +0039BAr 1 07 00 21 .faraddr 00210007h +0039BDr 1 08 00 21 .faraddr 00210008h +0039C0r 1 09 00 21 .faraddr 00210009h +0039C3r 1 0A 00 21 .faraddr 0021000Ah +0039C6r 1 0B 00 21 .faraddr 0021000Bh +0039C9r 1 0C 00 21 .faraddr 0021000Ch +0039CCr 1 0D 00 21 .faraddr 0021000Dh +0039CFr 1 0E 00 21 .faraddr 0021000Eh +0039D2r 1 0F 00 21 .faraddr 0021000Fh +0039D5r 1 E1 FF 7F .faraddr 007FFFE1h +0039D8r 1 E2 FF 7F .faraddr 007FFFE2h +0039DBr 1 E3 FF 7F .faraddr 007FFFE3h +0039DEr 1 E4 FF 7F .faraddr 007FFFE4h +0039E1r 1 E5 FF 7F .faraddr 007FFFE5h +0039E4r 1 E6 FF 7F .faraddr 007FFFE6h +0039E7r 1 E7 FF 7F .faraddr 007FFFE7h +0039EAr 1 E8 FF 7F .faraddr 007FFFE8h +0039EDr 1 E9 FF 7F .faraddr 007FFFE9h +0039F0r 1 EA FF 7F .faraddr 007FFFEAh +0039F3r 1 EB FF 7F .faraddr 007FFFEBh +0039F6r 1 EC FF 7F .faraddr 007FFFECh +0039F9r 1 ED FF 7F .faraddr 007FFFEDh +0039FCr 1 EE FF 7F .faraddr 007FFFEEh +0039FFr 1 EF FF 7F .faraddr 007FFFEFh +003A02r 1 F0 FF 7F .faraddr 007FFFF0h +003A05r 1 F1 FF 7F .faraddr 007FFFF1h +003A08r 1 F2 FF 7F .faraddr 007FFFF2h +003A0Br 1 F3 FF 7F .faraddr 007FFFF3h +003A0Er 1 F4 FF 7F .faraddr 007FFFF4h +003A11r 1 F5 FF 7F .faraddr 007FFFF5h +003A14r 1 F6 FF 7F .faraddr 007FFFF6h +003A17r 1 F7 FF 7F .faraddr 007FFFF7h +003A1Ar 1 F8 FF 7F .faraddr 007FFFF8h +003A1Dr 1 F9 FF 7F .faraddr 007FFFF9h +003A20r 1 FA FF 7F .faraddr 007FFFFAh +003A23r 1 FB FF 7F .faraddr 007FFFFBh +003A26r 1 FC FF 7F .faraddr 007FFFFCh +003A29r 1 FD FF 7F .faraddr 007FFFFDh +003A2Cr 1 FE FF 7F .faraddr 007FFFFEh +003A2Fr 1 FF FF 7F .faraddr 007FFFFFh +003A32r 1 00 00 80 .faraddr 00800000h +003A35r 1 01 00 80 .faraddr 00800001h +003A38r 1 02 00 80 .faraddr 00800002h +003A3Br 1 03 00 80 .faraddr 00800003h +003A3Er 1 04 00 80 .faraddr 00800004h +003A41r 1 05 00 80 .faraddr 00800005h +003A44r 1 06 00 80 .faraddr 00800006h +003A47r 1 07 00 80 .faraddr 00800007h +003A4Ar 1 08 00 80 .faraddr 00800008h +003A4Dr 1 09 00 80 .faraddr 00800009h +003A50r 1 0A 00 80 .faraddr 0080000Ah +003A53r 1 0B 00 80 .faraddr 0080000Bh +003A56r 1 0C 00 80 .faraddr 0080000Ch +003A59r 1 0D 00 80 .faraddr 0080000Dh +003A5Cr 1 0E 00 80 .faraddr 0080000Eh +003A5Fr 1 0F 00 80 .faraddr 0080000Fh +003A62r 1 E1 FF 9F .faraddr 009FFFE1h +003A65r 1 E2 FF 9F .faraddr 009FFFE2h +003A68r 1 E3 FF 9F .faraddr 009FFFE3h +003A6Br 1 E4 FF 9F .faraddr 009FFFE4h +003A6Er 1 E5 FF 9F .faraddr 009FFFE5h +003A71r 1 E6 FF 9F .faraddr 009FFFE6h +003A74r 1 E7 FF 9F .faraddr 009FFFE7h +003A77r 1 E8 FF 9F .faraddr 009FFFE8h +003A7Ar 1 E9 FF 9F .faraddr 009FFFE9h +003A7Dr 1 EA FF 9F .faraddr 009FFFEAh +003A80r 1 EB FF 9F .faraddr 009FFFEBh +003A83r 1 EC FF 9F .faraddr 009FFFECh +003A86r 1 ED FF 9F .faraddr 009FFFEDh +003A89r 1 EE FF 9F .faraddr 009FFFEEh +003A8Cr 1 EF FF 9F .faraddr 009FFFEFh +003A8Fr 1 F0 FF 9F .faraddr 009FFFF0h +003A92r 1 F1 FF 9F .faraddr 009FFFF1h +003A95r 1 F2 FF 9F .faraddr 009FFFF2h +003A98r 1 F3 FF 9F .faraddr 009FFFF3h +003A9Br 1 F4 FF 9F .faraddr 009FFFF4h +003A9Er 1 F5 FF 9F .faraddr 009FFFF5h +003AA1r 1 F6 FF 9F .faraddr 009FFFF6h +003AA4r 1 F7 FF 9F .faraddr 009FFFF7h +003AA7r 1 F8 FF 9F .faraddr 009FFFF8h +003AAAr 1 F9 FF 9F .faraddr 009FFFF9h +003AADr 1 FA FF 9F .faraddr 009FFFFAh +003AB0r 1 FB FF 9F .faraddr 009FFFFBh +003AB3r 1 FC FF 9F .faraddr 009FFFFCh +003AB6r 1 FD FF 9F .faraddr 009FFFFDh +003AB9r 1 FE FF 9F .faraddr 009FFFFEh +003ABCr 1 FF FF 9F .faraddr 009FFFFFh +003ABFr 1 00 00 A0 .faraddr 00A00000h +003AC2r 1 01 00 A0 .faraddr 00A00001h +003AC5r 1 02 00 A0 .faraddr 00A00002h +003AC8r 1 03 00 A0 .faraddr 00A00003h +003ACBr 1 04 00 A0 .faraddr 00A00004h +003ACEr 1 05 00 A0 .faraddr 00A00005h +003AD1r 1 06 00 A0 .faraddr 00A00006h +003AD4r 1 07 00 A0 .faraddr 00A00007h +003AD7r 1 08 00 A0 .faraddr 00A00008h +003ADAr 1 09 00 A0 .faraddr 00A00009h +003ADDr 1 0A 00 A0 .faraddr 00A0000Ah +003AE0r 1 0B 00 A0 .faraddr 00A0000Bh +003AE3r 1 0C 00 A0 .faraddr 00A0000Ch +003AE6r 1 0D 00 A0 .faraddr 00A0000Dh +003AE9r 1 0E 00 A0 .faraddr 00A0000Eh +003AECr 1 0F 00 A0 .faraddr 00A0000Fh +003AEFr 1 E1 FF FF .faraddr 00FFFFE1h +003AF2r 1 E2 FF FF .faraddr 00FFFFE2h +003AF5r 1 E3 FF FF .faraddr 00FFFFE3h +003AF8r 1 E4 FF FF .faraddr 00FFFFE4h +003AFBr 1 E5 FF FF .faraddr 00FFFFE5h +003AFEr 1 E6 FF FF .faraddr 00FFFFE6h +003B01r 1 E7 FF FF .faraddr 00FFFFE7h +003B04r 1 E8 FF FF .faraddr 00FFFFE8h +003B07r 1 E9 FF FF .faraddr 00FFFFE9h +003B0Ar 1 EA FF FF .faraddr 00FFFFEAh +003B0Dr 1 EB FF FF .faraddr 00FFFFEBh +003B10r 1 EC FF FF .faraddr 00FFFFECh +003B13r 1 ED FF FF .faraddr 00FFFFEDh +003B16r 1 EE FF FF .faraddr 00FFFFEEh +003B19r 1 EF FF FF .faraddr 00FFFFEFh +003B1Cr 1 F0 FF FF .faraddr 00FFFFF0h +003B1Fr 1 F1 FF FF .faraddr 00FFFFF1h +003B22r 1 F2 FF FF .faraddr 00FFFFF2h +003B25r 1 F3 FF FF .faraddr 00FFFFF3h +003B28r 1 F4 FF FF .faraddr 00FFFFF4h +003B2Br 1 F5 FF FF .faraddr 00FFFFF5h +003B2Er 1 F6 FF FF .faraddr 00FFFFF6h +003B31r 1 F7 FF FF .faraddr 00FFFFF7h +003B34r 1 F8 FF FF .faraddr 00FFFFF8h +003B37r 1 F9 FF FF .faraddr 00FFFFF9h +003B3Ar 1 FA FF FF .faraddr 00FFFFFAh +003B3Dr 1 FB FF FF .faraddr 00FFFFFBh +003B40r 1 FC FF FF .faraddr 00FFFFFCh +003B43r 1 FD FF FF .faraddr 00FFFFFDh +003B46r 1 FE FF FF .faraddr 00FFFFFEh +003B49r 1 FF FF FF .faraddr 00FFFFFFh 003B4Cr 1 -003B4Cr 1 ; alternative hex values, always leading zero -003B4Cr 1 00 00 00 .faraddr 00h -003B4Fr 1 01 00 00 .faraddr 01h -003B52r 1 02 00 00 .faraddr 02h -003B55r 1 03 00 00 .faraddr 03h -003B58r 1 04 00 00 .faraddr 04h -003B5Br 1 05 00 00 .faraddr 05h -003B5Er 1 06 00 00 .faraddr 06h -003B61r 1 07 00 00 .faraddr 07h -003B64r 1 08 00 00 .faraddr 08h -003B67r 1 09 00 00 .faraddr 09h -003B6Ar 1 0A 00 00 .faraddr 0ah -003B6Dr 1 0B 00 00 .faraddr 0bh -003B70r 1 0C 00 00 .faraddr 0ch -003B73r 1 0D 00 00 .faraddr 0dh -003B76r 1 0E 00 00 .faraddr 0eh -003B79r 1 0F 00 00 .faraddr 0fh -003B7Cr 1 10 00 00 .faraddr 010h -003B7Fr 1 11 00 00 .faraddr 011h -003B82r 1 12 00 00 .faraddr 012h -003B85r 1 13 00 00 .faraddr 013h -003B88r 1 70 00 00 .faraddr 070h -003B8Br 1 71 00 00 .faraddr 071h -003B8Er 1 72 00 00 .faraddr 072h -003B91r 1 73 00 00 .faraddr 073h -003B94r 1 74 00 00 .faraddr 074h -003B97r 1 75 00 00 .faraddr 075h -003B9Ar 1 76 00 00 .faraddr 076h -003B9Dr 1 77 00 00 .faraddr 077h -003BA0r 1 78 00 00 .faraddr 078h -003BA3r 1 79 00 00 .faraddr 079h -003BA6r 1 7A 00 00 .faraddr 07ah -003BA9r 1 7B 00 00 .faraddr 07bh -003BACr 1 7C 00 00 .faraddr 07ch -003BAFr 1 7D 00 00 .faraddr 07dh -003BB2r 1 7E 00 00 .faraddr 07eh -003BB5r 1 7F 00 00 .faraddr 07fh -003BB8r 1 80 00 00 .faraddr 080h -003BBBr 1 81 00 00 .faraddr 081h -003BBEr 1 82 00 00 .faraddr 082h -003BC1r 1 83 00 00 .faraddr 083h -003BC4r 1 84 00 00 .faraddr 084h -003BC7r 1 85 00 00 .faraddr 085h -003BCAr 1 86 00 00 .faraddr 086h -003BCDr 1 F0 00 00 .faraddr 0f0h -003BD0r 1 F1 00 00 .faraddr 0f1h -003BD3r 1 F2 00 00 .faraddr 0f2h -003BD6r 1 F3 00 00 .faraddr 0f3h -003BD9r 1 F4 00 00 .faraddr 0f4h -003BDCr 1 F5 00 00 .faraddr 0f5h -003BDFr 1 F6 00 00 .faraddr 0f6h -003BE2r 1 F7 00 00 .faraddr 0f7h -003BE5r 1 F8 00 00 .faraddr 0f8h -003BE8r 1 F9 00 00 .faraddr 0f9h -003BEBr 1 FA 00 00 .faraddr 0fah -003BEEr 1 FB 00 00 .faraddr 0fbh -003BF1r 1 FC 00 00 .faraddr 0fch -003BF4r 1 FD 00 00 .faraddr 0fdh -003BF7r 1 FE 00 00 .faraddr 0feh -003BFAr 1 FF 00 00 .faraddr 0ffh -003BFDr 1 00 01 00 .faraddr 0100h -003C00r 1 01 01 00 .faraddr 0101h -003C03r 1 02 01 00 .faraddr 0102h -003C06r 1 03 01 00 .faraddr 0103h -003C09r 1 D2 0F 00 .faraddr 0fd2h -003C0Cr 1 D3 0F 00 .faraddr 0fd3h -003C0Fr 1 D4 0F 00 .faraddr 0fd4h -003C12r 1 D5 0F 00 .faraddr 0fd5h -003C15r 1 D6 0F 00 .faraddr 0fd6h -003C18r 1 D7 0F 00 .faraddr 0fd7h -003C1Br 1 D8 0F 00 .faraddr 0fd8h -003C1Er 1 D9 0F 00 .faraddr 0fd9h -003C21r 1 DA 0F 00 .faraddr 0fdah -003C24r 1 DB 0F 00 .faraddr 0fdbh -003C27r 1 DC 0F 00 .faraddr 0fdch -003C2Ar 1 DD 0F 00 .faraddr 0fddh -003C2Dr 1 DE 0F 00 .faraddr 0fdeh -003C30r 1 DF 0F 00 .faraddr 0fdfh -003C33r 1 E0 0F 00 .faraddr 0fe0h -003C36r 1 E1 0F 00 .faraddr 0fe1h -003C39r 1 E2 0F 00 .faraddr 0fe2h -003C3Cr 1 E3 0F 00 .faraddr 0fe3h -003C3Fr 1 E4 0F 00 .faraddr 0fe4h -003C42r 1 E5 0F 00 .faraddr 0fe5h -003C45r 1 E6 0F 00 .faraddr 0fe6h -003C48r 1 E7 0F 00 .faraddr 0fe7h -003C4Br 1 E8 0F 00 .faraddr 0fe8h -003C4Er 1 E9 0F 00 .faraddr 0fe9h -003C51r 1 EA 0F 00 .faraddr 0feah -003C54r 1 EB 0F 00 .faraddr 0febh -003C57r 1 EC 0F 00 .faraddr 0fech -003C5Ar 1 ED 0F 00 .faraddr 0fedh -003C5Dr 1 EE 0F 00 .faraddr 0feeh -003C60r 1 EF 0F 00 .faraddr 0fefh -003C63r 1 F0 0F 00 .faraddr 0ff0h -003C66r 1 F1 0F 00 .faraddr 0ff1h -003C69r 1 F2 0F 00 .faraddr 0ff2h -003C6Cr 1 F3 0F 00 .faraddr 0ff3h -003C6Fr 1 F4 0F 00 .faraddr 0ff4h -003C72r 1 F5 0F 00 .faraddr 0ff5h -003C75r 1 F6 0F 00 .faraddr 0ff6h -003C78r 1 F7 0F 00 .faraddr 0ff7h -003C7Br 1 F8 0F 00 .faraddr 0ff8h -003C7Er 1 F9 0F 00 .faraddr 0ff9h -003C81r 1 FA 0F 00 .faraddr 0ffah -003C84r 1 FB 0F 00 .faraddr 0ffbh -003C87r 1 FC 0F 00 .faraddr 0ffch -003C8Ar 1 FD 0F 00 .faraddr 0ffdh -003C8Dr 1 FE 0F 00 .faraddr 0ffeh -003C90r 1 FF 0F 00 .faraddr 0fffh -003C93r 1 00 10 00 .faraddr 01000h -003C96r 1 01 10 00 .faraddr 01001h -003C99r 1 02 10 00 .faraddr 01002h -003C9Cr 1 03 10 00 .faraddr 01003h -003C9Fr 1 04 10 00 .faraddr 01004h -003CA2r 1 05 10 00 .faraddr 01005h -003CA5r 1 06 10 00 .faraddr 01006h -003CA8r 1 07 10 00 .faraddr 01007h -003CABr 1 08 10 00 .faraddr 01008h -003CAEr 1 F0 7F 00 .faraddr 07ff0h -003CB1r 1 F1 7F 00 .faraddr 07ff1h -003CB4r 1 F2 7F 00 .faraddr 07ff2h -003CB7r 1 F3 7F 00 .faraddr 07ff3h -003CBAr 1 F4 7F 00 .faraddr 07ff4h -003CBDr 1 F5 7F 00 .faraddr 07ff5h -003CC0r 1 F6 7F 00 .faraddr 07ff6h -003CC3r 1 F7 7F 00 .faraddr 07ff7h -003CC6r 1 F8 7F 00 .faraddr 07ff8h -003CC9r 1 F9 7F 00 .faraddr 07ff9h -003CCCr 1 FA 7F 00 .faraddr 07ffah -003CCFr 1 FB 7F 00 .faraddr 07ffbh -003CD2r 1 FC 7F 00 .faraddr 07ffch -003CD5r 1 FD 7F 00 .faraddr 07ffdh -003CD8r 1 FE 7F 00 .faraddr 07ffeh -003CDBr 1 FF 7F 00 .faraddr 07fffh -003CDEr 1 00 80 00 .faraddr 08000h -003CE1r 1 01 80 00 .faraddr 08001h -003CE4r 1 02 80 00 .faraddr 08002h -003CE7r 1 03 80 00 .faraddr 08003h -003CEAr 1 04 80 00 .faraddr 08004h -003CEDr 1 05 80 00 .faraddr 08005h -003CF0r 1 06 80 00 .faraddr 08006h -003CF3r 1 07 80 00 .faraddr 08007h -003CF6r 1 08 80 00 .faraddr 08008h -003CF9r 1 09 80 00 .faraddr 08009h -003CFCr 1 0A 80 00 .faraddr 0800ah -003CFFr 1 0B 80 00 .faraddr 0800bh -003D02r 1 E1 9F 00 .faraddr 09fe1h -003D05r 1 E2 9F 00 .faraddr 09fe2h -003D08r 1 E3 9F 00 .faraddr 09fe3h -003D0Br 1 E4 9F 00 .faraddr 09fe4h -003D0Er 1 E5 9F 00 .faraddr 09fe5h -003D11r 1 E6 9F 00 .faraddr 09fe6h -003D14r 1 E7 9F 00 .faraddr 09fe7h -003D17r 1 E8 9F 00 .faraddr 09fe8h -003D1Ar 1 E9 9F 00 .faraddr 09fe9h -003D1Dr 1 EA 9F 00 .faraddr 09feah -003D20r 1 EB 9F 00 .faraddr 09febh -003D23r 1 EC 9F 00 .faraddr 09fech -003D26r 1 ED 9F 00 .faraddr 09fedh -003D29r 1 EE 9F 00 .faraddr 09feeh -003D2Cr 1 EF 9F 00 .faraddr 09fefh -003D2Fr 1 F0 9F 00 .faraddr 09ff0h -003D32r 1 F1 9F 00 .faraddr 09ff1h -003D35r 1 F2 9F 00 .faraddr 09ff2h -003D38r 1 F3 9F 00 .faraddr 09ff3h -003D3Br 1 F4 9F 00 .faraddr 09ff4h -003D3Er 1 F5 9F 00 .faraddr 09ff5h -003D41r 1 F6 9F 00 .faraddr 09ff6h -003D44r 1 F7 9F 00 .faraddr 09ff7h -003D47r 1 F8 9F 00 .faraddr 09ff8h -003D4Ar 1 F9 9F 00 .faraddr 09ff9h -003D4Dr 1 FA 9F 00 .faraddr 09ffah -003D50r 1 FB 9F 00 .faraddr 09ffbh -003D53r 1 FC 9F 00 .faraddr 09ffch -003D56r 1 FD 9F 00 .faraddr 09ffdh -003D59r 1 FE 9F 00 .faraddr 09ffeh -003D5Cr 1 FF 9F 00 .faraddr 09fffh -003D5Fr 1 00 A0 00 .faraddr 0a000h -003D62r 1 01 A0 00 .faraddr 0a001h -003D65r 1 02 A0 00 .faraddr 0a002h -003D68r 1 03 A0 00 .faraddr 0a003h -003D6Br 1 04 A0 00 .faraddr 0a004h -003D6Er 1 05 A0 00 .faraddr 0a005h -003D71r 1 06 A0 00 .faraddr 0a006h -003D74r 1 07 A0 00 .faraddr 0a007h -003D77r 1 08 A0 00 .faraddr 0a008h -003D7Ar 1 09 A0 00 .faraddr 0a009h -003D7Dr 1 0A A0 00 .faraddr 0a00ah -003D80r 1 0B A0 00 .faraddr 0a00bh -003D83r 1 0C A0 00 .faraddr 0a00ch -003D86r 1 0D A0 00 .faraddr 0a00dh -003D89r 1 0E A0 00 .faraddr 0a00eh -003D8Cr 1 0F A0 00 .faraddr 0a00fh -003D8Fr 1 E1 AF 00 .faraddr 0afe1h -003D92r 1 E2 AF 00 .faraddr 0afe2h -003D95r 1 E3 AF 00 .faraddr 0afe3h -003D98r 1 E4 AF 00 .faraddr 0afe4h -003D9Br 1 E5 AF 00 .faraddr 0afe5h -003D9Er 1 E6 AF 00 .faraddr 0afe6h -003DA1r 1 E7 AF 00 .faraddr 0afe7h -003DA4r 1 E8 AF 00 .faraddr 0afe8h -003DA7r 1 E9 AF 00 .faraddr 0afe9h -003DAAr 1 EA AF 00 .faraddr 0afeah -003DADr 1 EB AF 00 .faraddr 0afebh -003DB0r 1 EC AF 00 .faraddr 0afech -003DB3r 1 ED AF 00 .faraddr 0afedh -003DB6r 1 EE AF 00 .faraddr 0afeeh -003DB9r 1 EF AF 00 .faraddr 0afefh -003DBCr 1 F0 AF 00 .faraddr 0aff0h -003DBFr 1 F1 AF 00 .faraddr 0aff1h -003DC2r 1 F2 AF 00 .faraddr 0aff2h -003DC5r 1 F3 AF 00 .faraddr 0aff3h -003DC8r 1 F4 AF 00 .faraddr 0aff4h -003DCBr 1 F5 AF 00 .faraddr 0aff5h -003DCEr 1 F6 AF 00 .faraddr 0aff6h -003DD1r 1 F7 AF 00 .faraddr 0aff7h -003DD4r 1 F8 AF 00 .faraddr 0aff8h -003DD7r 1 F9 AF 00 .faraddr 0aff9h -003DDAr 1 FA AF 00 .faraddr 0affah -003DDDr 1 FB AF 00 .faraddr 0affbh -003DE0r 1 FC AF 00 .faraddr 0affch -003DE3r 1 FD AF 00 .faraddr 0affdh -003DE6r 1 FE AF 00 .faraddr 0affeh -003DE9r 1 FF AF 00 .faraddr 0afffh -003DECr 1 00 B0 00 .faraddr 0b000h -003DEFr 1 01 B0 00 .faraddr 0b001h -003DF2r 1 02 B0 00 .faraddr 0b002h -003DF5r 1 03 B0 00 .faraddr 0b003h -003DF8r 1 04 B0 00 .faraddr 0b004h -003DFBr 1 05 B0 00 .faraddr 0b005h -003DFEr 1 06 B0 00 .faraddr 0b006h -003E01r 1 07 B0 00 .faraddr 0b007h -003E04r 1 08 B0 00 .faraddr 0b008h -003E07r 1 09 B0 00 .faraddr 0b009h -003E0Ar 1 0A B0 00 .faraddr 0b00ah -003E0Dr 1 0B B0 00 .faraddr 0b00bh -003E10r 1 0C B0 00 .faraddr 0b00ch -003E13r 1 0D B0 00 .faraddr 0b00dh -003E16r 1 0E B0 00 .faraddr 0b00eh -003E19r 1 0F B0 00 .faraddr 0b00fh -003E1Cr 1 E1 FF 00 .faraddr 0ffe1h -003E1Fr 1 E2 FF 00 .faraddr 0ffe2h -003E22r 1 E3 FF 00 .faraddr 0ffe3h -003E25r 1 E4 FF 00 .faraddr 0ffe4h -003E28r 1 E5 FF 00 .faraddr 0ffe5h -003E2Br 1 E6 FF 00 .faraddr 0ffe6h -003E2Er 1 E7 FF 00 .faraddr 0ffe7h -003E31r 1 E8 FF 00 .faraddr 0ffe8h -003E34r 1 E9 FF 00 .faraddr 0ffe9h -003E37r 1 EA FF 00 .faraddr 0ffeah -003E3Ar 1 EB FF 00 .faraddr 0ffebh -003E3Dr 1 EC FF 00 .faraddr 0ffech -003E40r 1 ED FF 00 .faraddr 0ffedh -003E43r 1 EE FF 00 .faraddr 0ffeeh -003E46r 1 EF FF 00 .faraddr 0ffefh -003E49r 1 F0 FF 00 .faraddr 0fff0h -003E4Cr 1 F1 FF 00 .faraddr 0fff1h -003E4Fr 1 F2 FF 00 .faraddr 0fff2h -003E52r 1 F3 FF 00 .faraddr 0fff3h -003E55r 1 F4 FF 00 .faraddr 0fff4h -003E58r 1 F5 FF 00 .faraddr 0fff5h -003E5Br 1 F6 FF 00 .faraddr 0fff6h -003E5Er 1 F7 FF 00 .faraddr 0fff7h -003E61r 1 F8 FF 00 .faraddr 0fff8h -003E64r 1 F9 FF 00 .faraddr 0fff9h -003E67r 1 FA FF 00 .faraddr 0fffah -003E6Ar 1 FB FF 00 .faraddr 0fffbh -003E6Dr 1 FC FF 00 .faraddr 0fffch -003E70r 1 FD FF 00 .faraddr 0fffdh -003E73r 1 FE FF 00 .faraddr 0fffeh -003E76r 1 FF FF 00 .faraddr 0ffffh -003E79r 1 00 00 01 .faraddr 010000h -003E7Cr 1 01 00 01 .faraddr 010001h -003E7Fr 1 02 00 01 .faraddr 010002h -003E82r 1 03 00 01 .faraddr 010003h -003E85r 1 04 00 01 .faraddr 010004h -003E88r 1 05 00 01 .faraddr 010005h -003E8Br 1 06 00 01 .faraddr 010006h -003E8Er 1 07 00 01 .faraddr 010007h -003E91r 1 08 00 01 .faraddr 010008h -003E94r 1 09 00 01 .faraddr 010009h -003E97r 1 0A 00 01 .faraddr 01000ah -003E9Ar 1 0B 00 01 .faraddr 01000bh -003E9Dr 1 0C 00 01 .faraddr 01000ch -003EA0r 1 0D 00 01 .faraddr 01000dh -003EA3r 1 0E 00 01 .faraddr 01000eh -003EA6r 1 0F 00 01 .faraddr 01000fh -003EA9r 1 E1 FF 10 .faraddr 010ffe1h -003EACr 1 E2 FF 10 .faraddr 010ffe2h -003EAFr 1 E3 FF 10 .faraddr 010ffe3h -003EB2r 1 E4 FF 10 .faraddr 010ffe4h -003EB5r 1 E5 FF 10 .faraddr 010ffe5h -003EB8r 1 E6 FF 10 .faraddr 010ffe6h -003EBBr 1 E7 FF 10 .faraddr 010ffe7h -003EBEr 1 E8 FF 10 .faraddr 010ffe8h -003EC1r 1 E9 FF 10 .faraddr 010ffe9h -003EC4r 1 EA FF 10 .faraddr 010ffeah -003EC7r 1 EB FF 10 .faraddr 010ffebh -003ECAr 1 EC FF 10 .faraddr 010ffech -003ECDr 1 ED FF 10 .faraddr 010ffedh -003ED0r 1 EE FF 10 .faraddr 010ffeeh -003ED3r 1 EF FF 10 .faraddr 010ffefh -003ED6r 1 F0 FF 10 .faraddr 010fff0h -003ED9r 1 F1 FF 10 .faraddr 010fff1h -003EDCr 1 F2 FF 10 .faraddr 010fff2h -003EDFr 1 F3 FF 10 .faraddr 010fff3h -003EE2r 1 F4 FF 10 .faraddr 010fff4h -003EE5r 1 F5 FF 10 .faraddr 010fff5h -003EE8r 1 F6 FF 10 .faraddr 010fff6h -003EEBr 1 F7 FF 10 .faraddr 010fff7h -003EEEr 1 F8 FF 10 .faraddr 010fff8h -003EF1r 1 F9 FF 10 .faraddr 010fff9h -003EF4r 1 FA FF 10 .faraddr 010fffah -003EF7r 1 FB FF 10 .faraddr 010fffbh -003EFAr 1 FC FF 10 .faraddr 010fffch -003EFDr 1 FD FF 10 .faraddr 010fffdh -003F00r 1 FE FF 10 .faraddr 010fffeh -003F03r 1 FF FF 10 .faraddr 010ffffh -003F06r 1 00 00 11 .faraddr 0110000h -003F09r 1 01 00 11 .faraddr 0110001h -003F0Cr 1 02 00 11 .faraddr 0110002h -003F0Fr 1 03 00 11 .faraddr 0110003h -003F12r 1 04 00 11 .faraddr 0110004h -003F15r 1 05 00 11 .faraddr 0110005h -003F18r 1 06 00 11 .faraddr 0110006h -003F1Br 1 07 00 11 .faraddr 0110007h -003F1Er 1 08 00 11 .faraddr 0110008h -003F21r 1 09 00 11 .faraddr 0110009h -003F24r 1 0A 00 11 .faraddr 011000ah -003F27r 1 0B 00 11 .faraddr 011000bh -003F2Ar 1 0C 00 11 .faraddr 011000ch -003F2Dr 1 0D 00 11 .faraddr 011000dh -003F30r 1 0E 00 11 .faraddr 011000eh -003F33r 1 0F 00 11 .faraddr 011000fh -003F36r 1 E1 FF 20 .faraddr 020ffe1h -003F39r 1 E2 FF 20 .faraddr 020ffe2h -003F3Cr 1 E3 FF 20 .faraddr 020ffe3h -003F3Fr 1 E4 FF 20 .faraddr 020ffe4h -003F42r 1 E5 FF 20 .faraddr 020ffe5h -003F45r 1 E6 FF 20 .faraddr 020ffe6h -003F48r 1 E7 FF 20 .faraddr 020ffe7h -003F4Br 1 E8 FF 20 .faraddr 020ffe8h -003F4Er 1 E9 FF 20 .faraddr 020ffe9h -003F51r 1 EA FF 20 .faraddr 020ffeah -003F54r 1 EB FF 20 .faraddr 020ffebh -003F57r 1 EC FF 20 .faraddr 020ffech -003F5Ar 1 ED FF 20 .faraddr 020ffedh -003F5Dr 1 EE FF 20 .faraddr 020ffeeh -003F60r 1 EF FF 20 .faraddr 020ffefh -003F63r 1 F0 FF 20 .faraddr 020fff0h -003F66r 1 F1 FF 20 .faraddr 020fff1h -003F69r 1 F2 FF 20 .faraddr 020fff2h -003F6Cr 1 F3 FF 20 .faraddr 020fff3h -003F6Fr 1 F4 FF 20 .faraddr 020fff4h -003F72r 1 F5 FF 20 .faraddr 020fff5h -003F75r 1 F6 FF 20 .faraddr 020fff6h -003F78r 1 F7 FF 20 .faraddr 020fff7h -003F7Br 1 F8 FF 20 .faraddr 020fff8h -003F7Er 1 F9 FF 20 .faraddr 020fff9h -003F81r 1 FA FF 20 .faraddr 020fffah -003F84r 1 FB FF 20 .faraddr 020fffbh -003F87r 1 FC FF 20 .faraddr 020fffch -003F8Ar 1 FD FF 20 .faraddr 020fffdh -003F8Dr 1 FE FF 20 .faraddr 020fffeh -003F90r 1 FF FF 20 .faraddr 020ffffh -003F93r 1 00 00 21 .faraddr 0210000h -003F96r 1 01 00 21 .faraddr 0210001h -003F99r 1 02 00 21 .faraddr 0210002h -003F9Cr 1 03 00 21 .faraddr 0210003h -003F9Fr 1 04 00 21 .faraddr 0210004h -003FA2r 1 05 00 21 .faraddr 0210005h -003FA5r 1 06 00 21 .faraddr 0210006h -003FA8r 1 07 00 21 .faraddr 0210007h -003FABr 1 08 00 21 .faraddr 0210008h -003FAEr 1 09 00 21 .faraddr 0210009h -003FB1r 1 0A 00 21 .faraddr 021000ah -003FB4r 1 0B 00 21 .faraddr 021000bh -003FB7r 1 0C 00 21 .faraddr 021000ch -003FBAr 1 0D 00 21 .faraddr 021000dh -003FBDr 1 0E 00 21 .faraddr 021000eh -003FC0r 1 0F 00 21 .faraddr 021000fh -003FC3r 1 E1 FF 7F .faraddr 07fffe1h -003FC6r 1 E2 FF 7F .faraddr 07fffe2h -003FC9r 1 E3 FF 7F .faraddr 07fffe3h -003FCCr 1 E4 FF 7F .faraddr 07fffe4h -003FCFr 1 E5 FF 7F .faraddr 07fffe5h -003FD2r 1 E6 FF 7F .faraddr 07fffe6h -003FD5r 1 E7 FF 7F .faraddr 07fffe7h -003FD8r 1 E8 FF 7F .faraddr 07fffe8h -003FDBr 1 E9 FF 7F .faraddr 07fffe9h -003FDEr 1 EA FF 7F .faraddr 07fffeah -003FE1r 1 EB FF 7F .faraddr 07fffebh -003FE4r 1 EC FF 7F .faraddr 07fffech -003FE7r 1 ED FF 7F .faraddr 07fffedh -003FEAr 1 EE FF 7F .faraddr 07fffeeh -003FEDr 1 EF FF 7F .faraddr 07fffefh -003FF0r 1 F0 FF 7F .faraddr 07ffff0h -003FF3r 1 F1 FF 7F .faraddr 07ffff1h -003FF6r 1 F2 FF 7F .faraddr 07ffff2h -003FF9r 1 F3 FF 7F .faraddr 07ffff3h -003FFCr 1 F4 FF 7F .faraddr 07ffff4h -003FFFr 1 F5 FF 7F .faraddr 07ffff5h -004002r 1 F6 FF 7F .faraddr 07ffff6h -004005r 1 F7 FF 7F .faraddr 07ffff7h -004008r 1 F8 FF 7F .faraddr 07ffff8h -00400Br 1 F9 FF 7F .faraddr 07ffff9h -00400Er 1 FA FF 7F .faraddr 07ffffah -004011r 1 FB FF 7F .faraddr 07ffffbh -004014r 1 FC FF 7F .faraddr 07ffffch -004017r 1 FD FF 7F .faraddr 07ffffdh -00401Ar 1 FE FF 7F .faraddr 07ffffeh -00401Dr 1 FF FF 7F .faraddr 07fffffh -004020r 1 00 00 80 .faraddr 0800000h -004023r 1 01 00 80 .faraddr 0800001h -004026r 1 02 00 80 .faraddr 0800002h -004029r 1 03 00 80 .faraddr 0800003h -00402Cr 1 04 00 80 .faraddr 0800004h -00402Fr 1 05 00 80 .faraddr 0800005h -004032r 1 06 00 80 .faraddr 0800006h -004035r 1 07 00 80 .faraddr 0800007h -004038r 1 08 00 80 .faraddr 0800008h -00403Br 1 09 00 80 .faraddr 0800009h -00403Er 1 0A 00 80 .faraddr 080000ah -004041r 1 0B 00 80 .faraddr 080000bh -004044r 1 0C 00 80 .faraddr 080000ch -004047r 1 0D 00 80 .faraddr 080000dh -00404Ar 1 0E 00 80 .faraddr 080000eh -00404Dr 1 0F 00 80 .faraddr 080000fh -004050r 1 E1 FF 9F .faraddr 09fffe1h -004053r 1 E2 FF 9F .faraddr 09fffe2h -004056r 1 E3 FF 9F .faraddr 09fffe3h -004059r 1 E4 FF 9F .faraddr 09fffe4h -00405Cr 1 E5 FF 9F .faraddr 09fffe5h -00405Fr 1 E6 FF 9F .faraddr 09fffe6h -004062r 1 E7 FF 9F .faraddr 09fffe7h -004065r 1 E8 FF 9F .faraddr 09fffe8h -004068r 1 E9 FF 9F .faraddr 09fffe9h -00406Br 1 EA FF 9F .faraddr 09fffeah -00406Er 1 EB FF 9F .faraddr 09fffebh -004071r 1 EC FF 9F .faraddr 09fffech -004074r 1 ED FF 9F .faraddr 09fffedh -004077r 1 EE FF 9F .faraddr 09fffeeh -00407Ar 1 EF FF 9F .faraddr 09fffefh -00407Dr 1 F0 FF 9F .faraddr 09ffff0h -004080r 1 F1 FF 9F .faraddr 09ffff1h -004083r 1 F2 FF 9F .faraddr 09ffff2h -004086r 1 F3 FF 9F .faraddr 09ffff3h -004089r 1 F4 FF 9F .faraddr 09ffff4h -00408Cr 1 F5 FF 9F .faraddr 09ffff5h -00408Fr 1 F6 FF 9F .faraddr 09ffff6h -004092r 1 F7 FF 9F .faraddr 09ffff7h -004095r 1 F8 FF 9F .faraddr 09ffff8h -004098r 1 F9 FF 9F .faraddr 09ffff9h -00409Br 1 FA FF 9F .faraddr 09ffffah -00409Er 1 FB FF 9F .faraddr 09ffffbh -0040A1r 1 FC FF 9F .faraddr 09ffffch -0040A4r 1 FD FF 9F .faraddr 09ffffdh -0040A7r 1 FE FF 9F .faraddr 09ffffeh -0040AAr 1 FF FF 9F .faraddr 09fffffh -0040ADr 1 00 00 A0 .faraddr 0a00000h -0040B0r 1 01 00 A0 .faraddr 0a00001h -0040B3r 1 02 00 A0 .faraddr 0a00002h -0040B6r 1 03 00 A0 .faraddr 0a00003h -0040B9r 1 04 00 A0 .faraddr 0a00004h -0040BCr 1 05 00 A0 .faraddr 0a00005h -0040BFr 1 06 00 A0 .faraddr 0a00006h -0040C2r 1 07 00 A0 .faraddr 0a00007h -0040C5r 1 08 00 A0 .faraddr 0a00008h -0040C8r 1 09 00 A0 .faraddr 0a00009h -0040CBr 1 0A 00 A0 .faraddr 0a0000ah -0040CEr 1 0B 00 A0 .faraddr 0a0000bh -0040D1r 1 0C 00 A0 .faraddr 0a0000ch -0040D4r 1 0D 00 A0 .faraddr 0a0000dh -0040D7r 1 0E 00 A0 .faraddr 0a0000eh -0040DAr 1 0F 00 A0 .faraddr 0a0000fh -0040DDr 1 E1 FF FF .faraddr 0ffffe1h -0040E0r 1 E2 FF FF .faraddr 0ffffe2h -0040E3r 1 E3 FF FF .faraddr 0ffffe3h -0040E6r 1 E4 FF FF .faraddr 0ffffe4h -0040E9r 1 E5 FF FF .faraddr 0ffffe5h -0040ECr 1 E6 FF FF .faraddr 0ffffe6h -0040EFr 1 E7 FF FF .faraddr 0ffffe7h -0040F2r 1 E8 FF FF .faraddr 0ffffe8h -0040F5r 1 E9 FF FF .faraddr 0ffffe9h -0040F8r 1 EA FF FF .faraddr 0ffffeah -0040FBr 1 EB FF FF .faraddr 0ffffebh -0040FEr 1 EC FF FF .faraddr 0ffffech -004101r 1 ED FF FF .faraddr 0ffffedh -004104r 1 EE FF FF .faraddr 0ffffeeh -004107r 1 EF FF FF .faraddr 0ffffefh -00410Ar 1 F0 FF FF .faraddr 0fffff0h -00410Dr 1 F1 FF FF .faraddr 0fffff1h -004110r 1 F2 FF FF .faraddr 0fffff2h -004113r 1 F3 FF FF .faraddr 0fffff3h -004116r 1 F4 FF FF .faraddr 0fffff4h -004119r 1 F5 FF FF .faraddr 0fffff5h -00411Cr 1 F6 FF FF .faraddr 0fffff6h -00411Fr 1 F7 FF FF .faraddr 0fffff7h -004122r 1 F8 FF FF .faraddr 0fffff8h -004125r 1 F9 FF FF .faraddr 0fffff9h -004128r 1 FA FF FF .faraddr 0fffffah -00412Br 1 FB FF FF .faraddr 0fffffbh -00412Er 1 FC FF FF .faraddr 0fffffch -004131r 1 FD FF FF .faraddr 0fffffdh -004134r 1 FE FF FF .faraddr 0fffffeh -004137r 1 FF FF FF .faraddr 0ffffffh +003B4Cr 1 ; alternative hex values, always leading zero +003B4Cr 1 00 00 00 .faraddr 00h +003B4Fr 1 01 00 00 .faraddr 01h +003B52r 1 02 00 00 .faraddr 02h +003B55r 1 03 00 00 .faraddr 03h +003B58r 1 04 00 00 .faraddr 04h +003B5Br 1 05 00 00 .faraddr 05h +003B5Er 1 06 00 00 .faraddr 06h +003B61r 1 07 00 00 .faraddr 07h +003B64r 1 08 00 00 .faraddr 08h +003B67r 1 09 00 00 .faraddr 09h +003B6Ar 1 0A 00 00 .faraddr 0ah +003B6Dr 1 0B 00 00 .faraddr 0bh +003B70r 1 0C 00 00 .faraddr 0ch +003B73r 1 0D 00 00 .faraddr 0dh +003B76r 1 0E 00 00 .faraddr 0eh +003B79r 1 0F 00 00 .faraddr 0fh +003B7Cr 1 10 00 00 .faraddr 010h +003B7Fr 1 11 00 00 .faraddr 011h +003B82r 1 12 00 00 .faraddr 012h +003B85r 1 13 00 00 .faraddr 013h +003B88r 1 70 00 00 .faraddr 070h +003B8Br 1 71 00 00 .faraddr 071h +003B8Er 1 72 00 00 .faraddr 072h +003B91r 1 73 00 00 .faraddr 073h +003B94r 1 74 00 00 .faraddr 074h +003B97r 1 75 00 00 .faraddr 075h +003B9Ar 1 76 00 00 .faraddr 076h +003B9Dr 1 77 00 00 .faraddr 077h +003BA0r 1 78 00 00 .faraddr 078h +003BA3r 1 79 00 00 .faraddr 079h +003BA6r 1 7A 00 00 .faraddr 07ah +003BA9r 1 7B 00 00 .faraddr 07bh +003BACr 1 7C 00 00 .faraddr 07ch +003BAFr 1 7D 00 00 .faraddr 07dh +003BB2r 1 7E 00 00 .faraddr 07eh +003BB5r 1 7F 00 00 .faraddr 07fh +003BB8r 1 80 00 00 .faraddr 080h +003BBBr 1 81 00 00 .faraddr 081h +003BBEr 1 82 00 00 .faraddr 082h +003BC1r 1 83 00 00 .faraddr 083h +003BC4r 1 84 00 00 .faraddr 084h +003BC7r 1 85 00 00 .faraddr 085h +003BCAr 1 86 00 00 .faraddr 086h +003BCDr 1 F0 00 00 .faraddr 0f0h +003BD0r 1 F1 00 00 .faraddr 0f1h +003BD3r 1 F2 00 00 .faraddr 0f2h +003BD6r 1 F3 00 00 .faraddr 0f3h +003BD9r 1 F4 00 00 .faraddr 0f4h +003BDCr 1 F5 00 00 .faraddr 0f5h +003BDFr 1 F6 00 00 .faraddr 0f6h +003BE2r 1 F7 00 00 .faraddr 0f7h +003BE5r 1 F8 00 00 .faraddr 0f8h +003BE8r 1 F9 00 00 .faraddr 0f9h +003BEBr 1 FA 00 00 .faraddr 0fah +003BEEr 1 FB 00 00 .faraddr 0fbh +003BF1r 1 FC 00 00 .faraddr 0fch +003BF4r 1 FD 00 00 .faraddr 0fdh +003BF7r 1 FE 00 00 .faraddr 0feh +003BFAr 1 FF 00 00 .faraddr 0ffh +003BFDr 1 00 01 00 .faraddr 0100h +003C00r 1 01 01 00 .faraddr 0101h +003C03r 1 02 01 00 .faraddr 0102h +003C06r 1 03 01 00 .faraddr 0103h +003C09r 1 D2 0F 00 .faraddr 0fd2h +003C0Cr 1 D3 0F 00 .faraddr 0fd3h +003C0Fr 1 D4 0F 00 .faraddr 0fd4h +003C12r 1 D5 0F 00 .faraddr 0fd5h +003C15r 1 D6 0F 00 .faraddr 0fd6h +003C18r 1 D7 0F 00 .faraddr 0fd7h +003C1Br 1 D8 0F 00 .faraddr 0fd8h +003C1Er 1 D9 0F 00 .faraddr 0fd9h +003C21r 1 DA 0F 00 .faraddr 0fdah +003C24r 1 DB 0F 00 .faraddr 0fdbh +003C27r 1 DC 0F 00 .faraddr 0fdch +003C2Ar 1 DD 0F 00 .faraddr 0fddh +003C2Dr 1 DE 0F 00 .faraddr 0fdeh +003C30r 1 DF 0F 00 .faraddr 0fdfh +003C33r 1 E0 0F 00 .faraddr 0fe0h +003C36r 1 E1 0F 00 .faraddr 0fe1h +003C39r 1 E2 0F 00 .faraddr 0fe2h +003C3Cr 1 E3 0F 00 .faraddr 0fe3h +003C3Fr 1 E4 0F 00 .faraddr 0fe4h +003C42r 1 E5 0F 00 .faraddr 0fe5h +003C45r 1 E6 0F 00 .faraddr 0fe6h +003C48r 1 E7 0F 00 .faraddr 0fe7h +003C4Br 1 E8 0F 00 .faraddr 0fe8h +003C4Er 1 E9 0F 00 .faraddr 0fe9h +003C51r 1 EA 0F 00 .faraddr 0feah +003C54r 1 EB 0F 00 .faraddr 0febh +003C57r 1 EC 0F 00 .faraddr 0fech +003C5Ar 1 ED 0F 00 .faraddr 0fedh +003C5Dr 1 EE 0F 00 .faraddr 0feeh +003C60r 1 EF 0F 00 .faraddr 0fefh +003C63r 1 F0 0F 00 .faraddr 0ff0h +003C66r 1 F1 0F 00 .faraddr 0ff1h +003C69r 1 F2 0F 00 .faraddr 0ff2h +003C6Cr 1 F3 0F 00 .faraddr 0ff3h +003C6Fr 1 F4 0F 00 .faraddr 0ff4h +003C72r 1 F5 0F 00 .faraddr 0ff5h +003C75r 1 F6 0F 00 .faraddr 0ff6h +003C78r 1 F7 0F 00 .faraddr 0ff7h +003C7Br 1 F8 0F 00 .faraddr 0ff8h +003C7Er 1 F9 0F 00 .faraddr 0ff9h +003C81r 1 FA 0F 00 .faraddr 0ffah +003C84r 1 FB 0F 00 .faraddr 0ffbh +003C87r 1 FC 0F 00 .faraddr 0ffch +003C8Ar 1 FD 0F 00 .faraddr 0ffdh +003C8Dr 1 FE 0F 00 .faraddr 0ffeh +003C90r 1 FF 0F 00 .faraddr 0fffh +003C93r 1 00 10 00 .faraddr 01000h +003C96r 1 01 10 00 .faraddr 01001h +003C99r 1 02 10 00 .faraddr 01002h +003C9Cr 1 03 10 00 .faraddr 01003h +003C9Fr 1 04 10 00 .faraddr 01004h +003CA2r 1 05 10 00 .faraddr 01005h +003CA5r 1 06 10 00 .faraddr 01006h +003CA8r 1 07 10 00 .faraddr 01007h +003CABr 1 08 10 00 .faraddr 01008h +003CAEr 1 F0 7F 00 .faraddr 07ff0h +003CB1r 1 F1 7F 00 .faraddr 07ff1h +003CB4r 1 F2 7F 00 .faraddr 07ff2h +003CB7r 1 F3 7F 00 .faraddr 07ff3h +003CBAr 1 F4 7F 00 .faraddr 07ff4h +003CBDr 1 F5 7F 00 .faraddr 07ff5h +003CC0r 1 F6 7F 00 .faraddr 07ff6h +003CC3r 1 F7 7F 00 .faraddr 07ff7h +003CC6r 1 F8 7F 00 .faraddr 07ff8h +003CC9r 1 F9 7F 00 .faraddr 07ff9h +003CCCr 1 FA 7F 00 .faraddr 07ffah +003CCFr 1 FB 7F 00 .faraddr 07ffbh +003CD2r 1 FC 7F 00 .faraddr 07ffch +003CD5r 1 FD 7F 00 .faraddr 07ffdh +003CD8r 1 FE 7F 00 .faraddr 07ffeh +003CDBr 1 FF 7F 00 .faraddr 07fffh +003CDEr 1 00 80 00 .faraddr 08000h +003CE1r 1 01 80 00 .faraddr 08001h +003CE4r 1 02 80 00 .faraddr 08002h +003CE7r 1 03 80 00 .faraddr 08003h +003CEAr 1 04 80 00 .faraddr 08004h +003CEDr 1 05 80 00 .faraddr 08005h +003CF0r 1 06 80 00 .faraddr 08006h +003CF3r 1 07 80 00 .faraddr 08007h +003CF6r 1 08 80 00 .faraddr 08008h +003CF9r 1 09 80 00 .faraddr 08009h +003CFCr 1 0A 80 00 .faraddr 0800ah +003CFFr 1 0B 80 00 .faraddr 0800bh +003D02r 1 E1 9F 00 .faraddr 09fe1h +003D05r 1 E2 9F 00 .faraddr 09fe2h +003D08r 1 E3 9F 00 .faraddr 09fe3h +003D0Br 1 E4 9F 00 .faraddr 09fe4h +003D0Er 1 E5 9F 00 .faraddr 09fe5h +003D11r 1 E6 9F 00 .faraddr 09fe6h +003D14r 1 E7 9F 00 .faraddr 09fe7h +003D17r 1 E8 9F 00 .faraddr 09fe8h +003D1Ar 1 E9 9F 00 .faraddr 09fe9h +003D1Dr 1 EA 9F 00 .faraddr 09feah +003D20r 1 EB 9F 00 .faraddr 09febh +003D23r 1 EC 9F 00 .faraddr 09fech +003D26r 1 ED 9F 00 .faraddr 09fedh +003D29r 1 EE 9F 00 .faraddr 09feeh +003D2Cr 1 EF 9F 00 .faraddr 09fefh +003D2Fr 1 F0 9F 00 .faraddr 09ff0h +003D32r 1 F1 9F 00 .faraddr 09ff1h +003D35r 1 F2 9F 00 .faraddr 09ff2h +003D38r 1 F3 9F 00 .faraddr 09ff3h +003D3Br 1 F4 9F 00 .faraddr 09ff4h +003D3Er 1 F5 9F 00 .faraddr 09ff5h +003D41r 1 F6 9F 00 .faraddr 09ff6h +003D44r 1 F7 9F 00 .faraddr 09ff7h +003D47r 1 F8 9F 00 .faraddr 09ff8h +003D4Ar 1 F9 9F 00 .faraddr 09ff9h +003D4Dr 1 FA 9F 00 .faraddr 09ffah +003D50r 1 FB 9F 00 .faraddr 09ffbh +003D53r 1 FC 9F 00 .faraddr 09ffch +003D56r 1 FD 9F 00 .faraddr 09ffdh +003D59r 1 FE 9F 00 .faraddr 09ffeh +003D5Cr 1 FF 9F 00 .faraddr 09fffh +003D5Fr 1 00 A0 00 .faraddr 0a000h +003D62r 1 01 A0 00 .faraddr 0a001h +003D65r 1 02 A0 00 .faraddr 0a002h +003D68r 1 03 A0 00 .faraddr 0a003h +003D6Br 1 04 A0 00 .faraddr 0a004h +003D6Er 1 05 A0 00 .faraddr 0a005h +003D71r 1 06 A0 00 .faraddr 0a006h +003D74r 1 07 A0 00 .faraddr 0a007h +003D77r 1 08 A0 00 .faraddr 0a008h +003D7Ar 1 09 A0 00 .faraddr 0a009h +003D7Dr 1 0A A0 00 .faraddr 0a00ah +003D80r 1 0B A0 00 .faraddr 0a00bh +003D83r 1 0C A0 00 .faraddr 0a00ch +003D86r 1 0D A0 00 .faraddr 0a00dh +003D89r 1 0E A0 00 .faraddr 0a00eh +003D8Cr 1 0F A0 00 .faraddr 0a00fh +003D8Fr 1 E1 AF 00 .faraddr 0afe1h +003D92r 1 E2 AF 00 .faraddr 0afe2h +003D95r 1 E3 AF 00 .faraddr 0afe3h +003D98r 1 E4 AF 00 .faraddr 0afe4h +003D9Br 1 E5 AF 00 .faraddr 0afe5h +003D9Er 1 E6 AF 00 .faraddr 0afe6h +003DA1r 1 E7 AF 00 .faraddr 0afe7h +003DA4r 1 E8 AF 00 .faraddr 0afe8h +003DA7r 1 E9 AF 00 .faraddr 0afe9h +003DAAr 1 EA AF 00 .faraddr 0afeah +003DADr 1 EB AF 00 .faraddr 0afebh +003DB0r 1 EC AF 00 .faraddr 0afech +003DB3r 1 ED AF 00 .faraddr 0afedh +003DB6r 1 EE AF 00 .faraddr 0afeeh +003DB9r 1 EF AF 00 .faraddr 0afefh +003DBCr 1 F0 AF 00 .faraddr 0aff0h +003DBFr 1 F1 AF 00 .faraddr 0aff1h +003DC2r 1 F2 AF 00 .faraddr 0aff2h +003DC5r 1 F3 AF 00 .faraddr 0aff3h +003DC8r 1 F4 AF 00 .faraddr 0aff4h +003DCBr 1 F5 AF 00 .faraddr 0aff5h +003DCEr 1 F6 AF 00 .faraddr 0aff6h +003DD1r 1 F7 AF 00 .faraddr 0aff7h +003DD4r 1 F8 AF 00 .faraddr 0aff8h +003DD7r 1 F9 AF 00 .faraddr 0aff9h +003DDAr 1 FA AF 00 .faraddr 0affah +003DDDr 1 FB AF 00 .faraddr 0affbh +003DE0r 1 FC AF 00 .faraddr 0affch +003DE3r 1 FD AF 00 .faraddr 0affdh +003DE6r 1 FE AF 00 .faraddr 0affeh +003DE9r 1 FF AF 00 .faraddr 0afffh +003DECr 1 00 B0 00 .faraddr 0b000h +003DEFr 1 01 B0 00 .faraddr 0b001h +003DF2r 1 02 B0 00 .faraddr 0b002h +003DF5r 1 03 B0 00 .faraddr 0b003h +003DF8r 1 04 B0 00 .faraddr 0b004h +003DFBr 1 05 B0 00 .faraddr 0b005h +003DFEr 1 06 B0 00 .faraddr 0b006h +003E01r 1 07 B0 00 .faraddr 0b007h +003E04r 1 08 B0 00 .faraddr 0b008h +003E07r 1 09 B0 00 .faraddr 0b009h +003E0Ar 1 0A B0 00 .faraddr 0b00ah +003E0Dr 1 0B B0 00 .faraddr 0b00bh +003E10r 1 0C B0 00 .faraddr 0b00ch +003E13r 1 0D B0 00 .faraddr 0b00dh +003E16r 1 0E B0 00 .faraddr 0b00eh +003E19r 1 0F B0 00 .faraddr 0b00fh +003E1Cr 1 E1 FF 00 .faraddr 0ffe1h +003E1Fr 1 E2 FF 00 .faraddr 0ffe2h +003E22r 1 E3 FF 00 .faraddr 0ffe3h +003E25r 1 E4 FF 00 .faraddr 0ffe4h +003E28r 1 E5 FF 00 .faraddr 0ffe5h +003E2Br 1 E6 FF 00 .faraddr 0ffe6h +003E2Er 1 E7 FF 00 .faraddr 0ffe7h +003E31r 1 E8 FF 00 .faraddr 0ffe8h +003E34r 1 E9 FF 00 .faraddr 0ffe9h +003E37r 1 EA FF 00 .faraddr 0ffeah +003E3Ar 1 EB FF 00 .faraddr 0ffebh +003E3Dr 1 EC FF 00 .faraddr 0ffech +003E40r 1 ED FF 00 .faraddr 0ffedh +003E43r 1 EE FF 00 .faraddr 0ffeeh +003E46r 1 EF FF 00 .faraddr 0ffefh +003E49r 1 F0 FF 00 .faraddr 0fff0h +003E4Cr 1 F1 FF 00 .faraddr 0fff1h +003E4Fr 1 F2 FF 00 .faraddr 0fff2h +003E52r 1 F3 FF 00 .faraddr 0fff3h +003E55r 1 F4 FF 00 .faraddr 0fff4h +003E58r 1 F5 FF 00 .faraddr 0fff5h +003E5Br 1 F6 FF 00 .faraddr 0fff6h +003E5Er 1 F7 FF 00 .faraddr 0fff7h +003E61r 1 F8 FF 00 .faraddr 0fff8h +003E64r 1 F9 FF 00 .faraddr 0fff9h +003E67r 1 FA FF 00 .faraddr 0fffah +003E6Ar 1 FB FF 00 .faraddr 0fffbh +003E6Dr 1 FC FF 00 .faraddr 0fffch +003E70r 1 FD FF 00 .faraddr 0fffdh +003E73r 1 FE FF 00 .faraddr 0fffeh +003E76r 1 FF FF 00 .faraddr 0ffffh +003E79r 1 00 00 01 .faraddr 010000h +003E7Cr 1 01 00 01 .faraddr 010001h +003E7Fr 1 02 00 01 .faraddr 010002h +003E82r 1 03 00 01 .faraddr 010003h +003E85r 1 04 00 01 .faraddr 010004h +003E88r 1 05 00 01 .faraddr 010005h +003E8Br 1 06 00 01 .faraddr 010006h +003E8Er 1 07 00 01 .faraddr 010007h +003E91r 1 08 00 01 .faraddr 010008h +003E94r 1 09 00 01 .faraddr 010009h +003E97r 1 0A 00 01 .faraddr 01000ah +003E9Ar 1 0B 00 01 .faraddr 01000bh +003E9Dr 1 0C 00 01 .faraddr 01000ch +003EA0r 1 0D 00 01 .faraddr 01000dh +003EA3r 1 0E 00 01 .faraddr 01000eh +003EA6r 1 0F 00 01 .faraddr 01000fh +003EA9r 1 E1 FF 10 .faraddr 010ffe1h +003EACr 1 E2 FF 10 .faraddr 010ffe2h +003EAFr 1 E3 FF 10 .faraddr 010ffe3h +003EB2r 1 E4 FF 10 .faraddr 010ffe4h +003EB5r 1 E5 FF 10 .faraddr 010ffe5h +003EB8r 1 E6 FF 10 .faraddr 010ffe6h +003EBBr 1 E7 FF 10 .faraddr 010ffe7h +003EBEr 1 E8 FF 10 .faraddr 010ffe8h +003EC1r 1 E9 FF 10 .faraddr 010ffe9h +003EC4r 1 EA FF 10 .faraddr 010ffeah +003EC7r 1 EB FF 10 .faraddr 010ffebh +003ECAr 1 EC FF 10 .faraddr 010ffech +003ECDr 1 ED FF 10 .faraddr 010ffedh +003ED0r 1 EE FF 10 .faraddr 010ffeeh +003ED3r 1 EF FF 10 .faraddr 010ffefh +003ED6r 1 F0 FF 10 .faraddr 010fff0h +003ED9r 1 F1 FF 10 .faraddr 010fff1h +003EDCr 1 F2 FF 10 .faraddr 010fff2h +003EDFr 1 F3 FF 10 .faraddr 010fff3h +003EE2r 1 F4 FF 10 .faraddr 010fff4h +003EE5r 1 F5 FF 10 .faraddr 010fff5h +003EE8r 1 F6 FF 10 .faraddr 010fff6h +003EEBr 1 F7 FF 10 .faraddr 010fff7h +003EEEr 1 F8 FF 10 .faraddr 010fff8h +003EF1r 1 F9 FF 10 .faraddr 010fff9h +003EF4r 1 FA FF 10 .faraddr 010fffah +003EF7r 1 FB FF 10 .faraddr 010fffbh +003EFAr 1 FC FF 10 .faraddr 010fffch +003EFDr 1 FD FF 10 .faraddr 010fffdh +003F00r 1 FE FF 10 .faraddr 010fffeh +003F03r 1 FF FF 10 .faraddr 010ffffh +003F06r 1 00 00 11 .faraddr 0110000h +003F09r 1 01 00 11 .faraddr 0110001h +003F0Cr 1 02 00 11 .faraddr 0110002h +003F0Fr 1 03 00 11 .faraddr 0110003h +003F12r 1 04 00 11 .faraddr 0110004h +003F15r 1 05 00 11 .faraddr 0110005h +003F18r 1 06 00 11 .faraddr 0110006h +003F1Br 1 07 00 11 .faraddr 0110007h +003F1Er 1 08 00 11 .faraddr 0110008h +003F21r 1 09 00 11 .faraddr 0110009h +003F24r 1 0A 00 11 .faraddr 011000ah +003F27r 1 0B 00 11 .faraddr 011000bh +003F2Ar 1 0C 00 11 .faraddr 011000ch +003F2Dr 1 0D 00 11 .faraddr 011000dh +003F30r 1 0E 00 11 .faraddr 011000eh +003F33r 1 0F 00 11 .faraddr 011000fh +003F36r 1 E1 FF 20 .faraddr 020ffe1h +003F39r 1 E2 FF 20 .faraddr 020ffe2h +003F3Cr 1 E3 FF 20 .faraddr 020ffe3h +003F3Fr 1 E4 FF 20 .faraddr 020ffe4h +003F42r 1 E5 FF 20 .faraddr 020ffe5h +003F45r 1 E6 FF 20 .faraddr 020ffe6h +003F48r 1 E7 FF 20 .faraddr 020ffe7h +003F4Br 1 E8 FF 20 .faraddr 020ffe8h +003F4Er 1 E9 FF 20 .faraddr 020ffe9h +003F51r 1 EA FF 20 .faraddr 020ffeah +003F54r 1 EB FF 20 .faraddr 020ffebh +003F57r 1 EC FF 20 .faraddr 020ffech +003F5Ar 1 ED FF 20 .faraddr 020ffedh +003F5Dr 1 EE FF 20 .faraddr 020ffeeh +003F60r 1 EF FF 20 .faraddr 020ffefh +003F63r 1 F0 FF 20 .faraddr 020fff0h +003F66r 1 F1 FF 20 .faraddr 020fff1h +003F69r 1 F2 FF 20 .faraddr 020fff2h +003F6Cr 1 F3 FF 20 .faraddr 020fff3h +003F6Fr 1 F4 FF 20 .faraddr 020fff4h +003F72r 1 F5 FF 20 .faraddr 020fff5h +003F75r 1 F6 FF 20 .faraddr 020fff6h +003F78r 1 F7 FF 20 .faraddr 020fff7h +003F7Br 1 F8 FF 20 .faraddr 020fff8h +003F7Er 1 F9 FF 20 .faraddr 020fff9h +003F81r 1 FA FF 20 .faraddr 020fffah +003F84r 1 FB FF 20 .faraddr 020fffbh +003F87r 1 FC FF 20 .faraddr 020fffch +003F8Ar 1 FD FF 20 .faraddr 020fffdh +003F8Dr 1 FE FF 20 .faraddr 020fffeh +003F90r 1 FF FF 20 .faraddr 020ffffh +003F93r 1 00 00 21 .faraddr 0210000h +003F96r 1 01 00 21 .faraddr 0210001h +003F99r 1 02 00 21 .faraddr 0210002h +003F9Cr 1 03 00 21 .faraddr 0210003h +003F9Fr 1 04 00 21 .faraddr 0210004h +003FA2r 1 05 00 21 .faraddr 0210005h +003FA5r 1 06 00 21 .faraddr 0210006h +003FA8r 1 07 00 21 .faraddr 0210007h +003FABr 1 08 00 21 .faraddr 0210008h +003FAEr 1 09 00 21 .faraddr 0210009h +003FB1r 1 0A 00 21 .faraddr 021000ah +003FB4r 1 0B 00 21 .faraddr 021000bh +003FB7r 1 0C 00 21 .faraddr 021000ch +003FBAr 1 0D 00 21 .faraddr 021000dh +003FBDr 1 0E 00 21 .faraddr 021000eh +003FC0r 1 0F 00 21 .faraddr 021000fh +003FC3r 1 E1 FF 7F .faraddr 07fffe1h +003FC6r 1 E2 FF 7F .faraddr 07fffe2h +003FC9r 1 E3 FF 7F .faraddr 07fffe3h +003FCCr 1 E4 FF 7F .faraddr 07fffe4h +003FCFr 1 E5 FF 7F .faraddr 07fffe5h +003FD2r 1 E6 FF 7F .faraddr 07fffe6h +003FD5r 1 E7 FF 7F .faraddr 07fffe7h +003FD8r 1 E8 FF 7F .faraddr 07fffe8h +003FDBr 1 E9 FF 7F .faraddr 07fffe9h +003FDEr 1 EA FF 7F .faraddr 07fffeah +003FE1r 1 EB FF 7F .faraddr 07fffebh +003FE4r 1 EC FF 7F .faraddr 07fffech +003FE7r 1 ED FF 7F .faraddr 07fffedh +003FEAr 1 EE FF 7F .faraddr 07fffeeh +003FEDr 1 EF FF 7F .faraddr 07fffefh +003FF0r 1 F0 FF 7F .faraddr 07ffff0h +003FF3r 1 F1 FF 7F .faraddr 07ffff1h +003FF6r 1 F2 FF 7F .faraddr 07ffff2h +003FF9r 1 F3 FF 7F .faraddr 07ffff3h +003FFCr 1 F4 FF 7F .faraddr 07ffff4h +003FFFr 1 F5 FF 7F .faraddr 07ffff5h +004002r 1 F6 FF 7F .faraddr 07ffff6h +004005r 1 F7 FF 7F .faraddr 07ffff7h +004008r 1 F8 FF 7F .faraddr 07ffff8h +00400Br 1 F9 FF 7F .faraddr 07ffff9h +00400Er 1 FA FF 7F .faraddr 07ffffah +004011r 1 FB FF 7F .faraddr 07ffffbh +004014r 1 FC FF 7F .faraddr 07ffffch +004017r 1 FD FF 7F .faraddr 07ffffdh +00401Ar 1 FE FF 7F .faraddr 07ffffeh +00401Dr 1 FF FF 7F .faraddr 07fffffh +004020r 1 00 00 80 .faraddr 0800000h +004023r 1 01 00 80 .faraddr 0800001h +004026r 1 02 00 80 .faraddr 0800002h +004029r 1 03 00 80 .faraddr 0800003h +00402Cr 1 04 00 80 .faraddr 0800004h +00402Fr 1 05 00 80 .faraddr 0800005h +004032r 1 06 00 80 .faraddr 0800006h +004035r 1 07 00 80 .faraddr 0800007h +004038r 1 08 00 80 .faraddr 0800008h +00403Br 1 09 00 80 .faraddr 0800009h +00403Er 1 0A 00 80 .faraddr 080000ah +004041r 1 0B 00 80 .faraddr 080000bh +004044r 1 0C 00 80 .faraddr 080000ch +004047r 1 0D 00 80 .faraddr 080000dh +00404Ar 1 0E 00 80 .faraddr 080000eh +00404Dr 1 0F 00 80 .faraddr 080000fh +004050r 1 E1 FF 9F .faraddr 09fffe1h +004053r 1 E2 FF 9F .faraddr 09fffe2h +004056r 1 E3 FF 9F .faraddr 09fffe3h +004059r 1 E4 FF 9F .faraddr 09fffe4h +00405Cr 1 E5 FF 9F .faraddr 09fffe5h +00405Fr 1 E6 FF 9F .faraddr 09fffe6h +004062r 1 E7 FF 9F .faraddr 09fffe7h +004065r 1 E8 FF 9F .faraddr 09fffe8h +004068r 1 E9 FF 9F .faraddr 09fffe9h +00406Br 1 EA FF 9F .faraddr 09fffeah +00406Er 1 EB FF 9F .faraddr 09fffebh +004071r 1 EC FF 9F .faraddr 09fffech +004074r 1 ED FF 9F .faraddr 09fffedh +004077r 1 EE FF 9F .faraddr 09fffeeh +00407Ar 1 EF FF 9F .faraddr 09fffefh +00407Dr 1 F0 FF 9F .faraddr 09ffff0h +004080r 1 F1 FF 9F .faraddr 09ffff1h +004083r 1 F2 FF 9F .faraddr 09ffff2h +004086r 1 F3 FF 9F .faraddr 09ffff3h +004089r 1 F4 FF 9F .faraddr 09ffff4h +00408Cr 1 F5 FF 9F .faraddr 09ffff5h +00408Fr 1 F6 FF 9F .faraddr 09ffff6h +004092r 1 F7 FF 9F .faraddr 09ffff7h +004095r 1 F8 FF 9F .faraddr 09ffff8h +004098r 1 F9 FF 9F .faraddr 09ffff9h +00409Br 1 FA FF 9F .faraddr 09ffffah +00409Er 1 FB FF 9F .faraddr 09ffffbh +0040A1r 1 FC FF 9F .faraddr 09ffffch +0040A4r 1 FD FF 9F .faraddr 09ffffdh +0040A7r 1 FE FF 9F .faraddr 09ffffeh +0040AAr 1 FF FF 9F .faraddr 09fffffh +0040ADr 1 00 00 A0 .faraddr 0a00000h +0040B0r 1 01 00 A0 .faraddr 0a00001h +0040B3r 1 02 00 A0 .faraddr 0a00002h +0040B6r 1 03 00 A0 .faraddr 0a00003h +0040B9r 1 04 00 A0 .faraddr 0a00004h +0040BCr 1 05 00 A0 .faraddr 0a00005h +0040BFr 1 06 00 A0 .faraddr 0a00006h +0040C2r 1 07 00 A0 .faraddr 0a00007h +0040C5r 1 08 00 A0 .faraddr 0a00008h +0040C8r 1 09 00 A0 .faraddr 0a00009h +0040CBr 1 0A 00 A0 .faraddr 0a0000ah +0040CEr 1 0B 00 A0 .faraddr 0a0000bh +0040D1r 1 0C 00 A0 .faraddr 0a0000ch +0040D4r 1 0D 00 A0 .faraddr 0a0000dh +0040D7r 1 0E 00 A0 .faraddr 0a0000eh +0040DAr 1 0F 00 A0 .faraddr 0a0000fh +0040DDr 1 E1 FF FF .faraddr 0ffffe1h +0040E0r 1 E2 FF FF .faraddr 0ffffe2h +0040E3r 1 E3 FF FF .faraddr 0ffffe3h +0040E6r 1 E4 FF FF .faraddr 0ffffe4h +0040E9r 1 E5 FF FF .faraddr 0ffffe5h +0040ECr 1 E6 FF FF .faraddr 0ffffe6h +0040EFr 1 E7 FF FF .faraddr 0ffffe7h +0040F2r 1 E8 FF FF .faraddr 0ffffe8h +0040F5r 1 E9 FF FF .faraddr 0ffffe9h +0040F8r 1 EA FF FF .faraddr 0ffffeah +0040FBr 1 EB FF FF .faraddr 0ffffebh +0040FEr 1 EC FF FF .faraddr 0ffffech +004101r 1 ED FF FF .faraddr 0ffffedh +004104r 1 EE FF FF .faraddr 0ffffeeh +004107r 1 EF FF FF .faraddr 0ffffefh +00410Ar 1 F0 FF FF .faraddr 0fffff0h +00410Dr 1 F1 FF FF .faraddr 0fffff1h +004110r 1 F2 FF FF .faraddr 0fffff2h +004113r 1 F3 FF FF .faraddr 0fffff3h +004116r 1 F4 FF FF .faraddr 0fffff4h +004119r 1 F5 FF FF .faraddr 0fffff5h +00411Cr 1 F6 FF FF .faraddr 0fffff6h +00411Fr 1 F7 FF FF .faraddr 0fffff7h +004122r 1 F8 FF FF .faraddr 0fffff8h +004125r 1 F9 FF FF .faraddr 0fffff9h +004128r 1 FA FF FF .faraddr 0fffffah +00412Br 1 FB FF FF .faraddr 0fffffbh +00412Er 1 FC FF FF .faraddr 0fffffch +004131r 1 FD FF FF .faraddr 0fffffdh +004134r 1 FE FF FF .faraddr 0fffffeh +004137r 1 FF FF FF .faraddr 0ffffffh 00413Ar 1 -00413Ar 1 ; binary values, variable length -00413Ar 1 00 00 00 .faraddr %0 -00413Dr 1 01 00 00 .faraddr %01 -004140r 1 02 00 00 .faraddr %010 -004143r 1 03 00 00 .faraddr %011 -004146r 1 04 00 00 .faraddr %0100 -004149r 1 05 00 00 .faraddr %0101 -00414Cr 1 06 00 00 .faraddr %0110 -00414Fr 1 07 00 00 .faraddr %0111 -004152r 1 08 00 00 .faraddr %01000 -004155r 1 09 00 00 .faraddr %01001 -004158r 1 0A 00 00 .faraddr %01010 -00415Br 1 0B 00 00 .faraddr %01011 -00415Er 1 0C 00 00 .faraddr %01100 -004161r 1 0D 00 00 .faraddr %01101 -004164r 1 0E 00 00 .faraddr %01110 -004167r 1 0F 00 00 .faraddr %01111 -00416Ar 1 10 00 00 .faraddr %010000 -00416Dr 1 11 00 00 .faraddr %010001 -004170r 1 12 00 00 .faraddr %010010 -004173r 1 13 00 00 .faraddr %010011 -004176r 1 70 00 00 .faraddr %01110000 -004179r 1 71 00 00 .faraddr %01110001 -00417Cr 1 72 00 00 .faraddr %01110010 -00417Fr 1 73 00 00 .faraddr %01110011 -004182r 1 74 00 00 .faraddr %01110100 -004185r 1 75 00 00 .faraddr %01110101 -004188r 1 76 00 00 .faraddr %01110110 -00418Br 1 77 00 00 .faraddr %01110111 -00418Er 1 78 00 00 .faraddr %01111000 -004191r 1 79 00 00 .faraddr %01111001 -004194r 1 7A 00 00 .faraddr %01111010 -004197r 1 7B 00 00 .faraddr %01111011 -00419Ar 1 7C 00 00 .faraddr %01111100 -00419Dr 1 7D 00 00 .faraddr %01111101 -0041A0r 1 7E 00 00 .faraddr %01111110 -0041A3r 1 7F 00 00 .faraddr %01111111 -0041A6r 1 80 00 00 .faraddr %010000000 -0041A9r 1 81 00 00 .faraddr %010000001 -0041ACr 1 82 00 00 .faraddr %010000010 -0041AFr 1 83 00 00 .faraddr %010000011 -0041B2r 1 84 00 00 .faraddr %010000100 -0041B5r 1 85 00 00 .faraddr %010000101 -0041B8r 1 86 00 00 .faraddr %010000110 -0041BBr 1 F0 00 00 .faraddr %011110000 -0041BEr 1 F1 00 00 .faraddr %011110001 -0041C1r 1 F2 00 00 .faraddr %011110010 -0041C4r 1 F3 00 00 .faraddr %011110011 -0041C7r 1 F4 00 00 .faraddr %011110100 -0041CAr 1 F5 00 00 .faraddr %011110101 -0041CDr 1 F6 00 00 .faraddr %011110110 -0041D0r 1 F7 00 00 .faraddr %011110111 -0041D3r 1 F8 00 00 .faraddr %011111000 -0041D6r 1 F9 00 00 .faraddr %011111001 -0041D9r 1 FA 00 00 .faraddr %011111010 -0041DCr 1 FB 00 00 .faraddr %011111011 -0041DFr 1 FC 00 00 .faraddr %011111100 -0041E2r 1 FD 00 00 .faraddr %011111101 -0041E5r 1 FE 00 00 .faraddr %011111110 -0041E8r 1 FF 00 00 .faraddr %011111111 -0041EBr 1 00 01 00 .faraddr %0100000000 -0041EEr 1 01 01 00 .faraddr %0100000001 -0041F1r 1 02 01 00 .faraddr %0100000010 -0041F4r 1 03 01 00 .faraddr %0100000011 -0041F7r 1 D2 0F 00 .faraddr %0111111010010 -0041FAr 1 D3 0F 00 .faraddr %0111111010011 -0041FDr 1 D4 0F 00 .faraddr %0111111010100 -004200r 1 D5 0F 00 .faraddr %0111111010101 -004203r 1 D6 0F 00 .faraddr %0111111010110 -004206r 1 D7 0F 00 .faraddr %0111111010111 -004209r 1 D8 0F 00 .faraddr %0111111011000 -00420Cr 1 D9 0F 00 .faraddr %0111111011001 -00420Fr 1 DA 0F 00 .faraddr %0111111011010 -004212r 1 DB 0F 00 .faraddr %0111111011011 -004215r 1 DC 0F 00 .faraddr %0111111011100 -004218r 1 DD 0F 00 .faraddr %0111111011101 -00421Br 1 DE 0F 00 .faraddr %0111111011110 -00421Er 1 DF 0F 00 .faraddr %0111111011111 -004221r 1 E0 0F 00 .faraddr %0111111100000 -004224r 1 E1 0F 00 .faraddr %0111111100001 -004227r 1 E2 0F 00 .faraddr %0111111100010 -00422Ar 1 E3 0F 00 .faraddr %0111111100011 -00422Dr 1 E4 0F 00 .faraddr %0111111100100 -004230r 1 E5 0F 00 .faraddr %0111111100101 -004233r 1 E6 0F 00 .faraddr %0111111100110 -004236r 1 E7 0F 00 .faraddr %0111111100111 -004239r 1 E8 0F 00 .faraddr %0111111101000 -00423Cr 1 E9 0F 00 .faraddr %0111111101001 -00423Fr 1 EA 0F 00 .faraddr %0111111101010 -004242r 1 EB 0F 00 .faraddr %0111111101011 -004245r 1 EC 0F 00 .faraddr %0111111101100 -004248r 1 ED 0F 00 .faraddr %0111111101101 -00424Br 1 EE 0F 00 .faraddr %0111111101110 -00424Er 1 EF 0F 00 .faraddr %0111111101111 -004251r 1 F0 0F 00 .faraddr %0111111110000 -004254r 1 F1 0F 00 .faraddr %0111111110001 -004257r 1 F2 0F 00 .faraddr %0111111110010 -00425Ar 1 F3 0F 00 .faraddr %0111111110011 -00425Dr 1 F4 0F 00 .faraddr %0111111110100 -004260r 1 F5 0F 00 .faraddr %0111111110101 -004263r 1 F6 0F 00 .faraddr %0111111110110 -004266r 1 F7 0F 00 .faraddr %0111111110111 -004269r 1 F8 0F 00 .faraddr %0111111111000 -00426Cr 1 F9 0F 00 .faraddr %0111111111001 -00426Fr 1 FA 0F 00 .faraddr %0111111111010 -004272r 1 FB 0F 00 .faraddr %0111111111011 -004275r 1 FC 0F 00 .faraddr %0111111111100 -004278r 1 FD 0F 00 .faraddr %0111111111101 -00427Br 1 FE 0F 00 .faraddr %0111111111110 -00427Er 1 FF 0F 00 .faraddr %0111111111111 -004281r 1 00 10 00 .faraddr %01000000000000 -004284r 1 01 10 00 .faraddr %01000000000001 -004287r 1 02 10 00 .faraddr %01000000000010 -00428Ar 1 03 10 00 .faraddr %01000000000011 -00428Dr 1 04 10 00 .faraddr %01000000000100 -004290r 1 05 10 00 .faraddr %01000000000101 -004293r 1 06 10 00 .faraddr %01000000000110 -004296r 1 07 10 00 .faraddr %01000000000111 -004299r 1 08 10 00 .faraddr %01000000001000 -00429Cr 1 F0 7F 00 .faraddr %0111111111110000 -00429Fr 1 F1 7F 00 .faraddr %0111111111110001 -0042A2r 1 F2 7F 00 .faraddr %0111111111110010 -0042A5r 1 F3 7F 00 .faraddr %0111111111110011 -0042A8r 1 F4 7F 00 .faraddr %0111111111110100 -0042ABr 1 F5 7F 00 .faraddr %0111111111110101 -0042AEr 1 F6 7F 00 .faraddr %0111111111110110 -0042B1r 1 F7 7F 00 .faraddr %0111111111110111 -0042B4r 1 F8 7F 00 .faraddr %0111111111111000 -0042B7r 1 F9 7F 00 .faraddr %0111111111111001 -0042BAr 1 FA 7F 00 .faraddr %0111111111111010 -0042BDr 1 FB 7F 00 .faraddr %0111111111111011 -0042C0r 1 FC 7F 00 .faraddr %0111111111111100 -0042C3r 1 FD 7F 00 .faraddr %0111111111111101 -0042C6r 1 FE 7F 00 .faraddr %0111111111111110 -0042C9r 1 FF 7F 00 .faraddr %0111111111111111 -0042CCr 1 00 80 00 .faraddr %01000000000000000 -0042CFr 1 01 80 00 .faraddr %01000000000000001 -0042D2r 1 02 80 00 .faraddr %01000000000000010 -0042D5r 1 03 80 00 .faraddr %01000000000000011 -0042D8r 1 04 80 00 .faraddr %01000000000000100 -0042DBr 1 05 80 00 .faraddr %01000000000000101 -0042DEr 1 06 80 00 .faraddr %01000000000000110 -0042E1r 1 07 80 00 .faraddr %01000000000000111 -0042E4r 1 08 80 00 .faraddr %01000000000001000 -0042E7r 1 09 80 00 .faraddr %01000000000001001 -0042EAr 1 0A 80 00 .faraddr %01000000000001010 -0042EDr 1 0B 80 00 .faraddr %01000000000001011 -0042F0r 1 E1 9F 00 .faraddr %01001111111100001 -0042F3r 1 E2 9F 00 .faraddr %01001111111100010 -0042F6r 1 E3 9F 00 .faraddr %01001111111100011 -0042F9r 1 E4 9F 00 .faraddr %01001111111100100 -0042FCr 1 E5 9F 00 .faraddr %01001111111100101 -0042FFr 1 E6 9F 00 .faraddr %01001111111100110 -004302r 1 E7 9F 00 .faraddr %01001111111100111 -004305r 1 E8 9F 00 .faraddr %01001111111101000 -004308r 1 E9 9F 00 .faraddr %01001111111101001 -00430Br 1 EA 9F 00 .faraddr %01001111111101010 -00430Er 1 EB 9F 00 .faraddr %01001111111101011 -004311r 1 EC 9F 00 .faraddr %01001111111101100 -004314r 1 ED 9F 00 .faraddr %01001111111101101 -004317r 1 EE 9F 00 .faraddr %01001111111101110 -00431Ar 1 EF 9F 00 .faraddr %01001111111101111 -00431Dr 1 F0 9F 00 .faraddr %01001111111110000 -004320r 1 F1 9F 00 .faraddr %01001111111110001 -004323r 1 F2 9F 00 .faraddr %01001111111110010 -004326r 1 F3 9F 00 .faraddr %01001111111110011 -004329r 1 F4 9F 00 .faraddr %01001111111110100 -00432Cr 1 F5 9F 00 .faraddr %01001111111110101 -00432Fr 1 F6 9F 00 .faraddr %01001111111110110 -004332r 1 F7 9F 00 .faraddr %01001111111110111 -004335r 1 F8 9F 00 .faraddr %01001111111111000 -004338r 1 F9 9F 00 .faraddr %01001111111111001 -00433Br 1 FA 9F 00 .faraddr %01001111111111010 -00433Er 1 FB 9F 00 .faraddr %01001111111111011 -004341r 1 FC 9F 00 .faraddr %01001111111111100 -004344r 1 FD 9F 00 .faraddr %01001111111111101 -004347r 1 FE 9F 00 .faraddr %01001111111111110 -00434Ar 1 FF 9F 00 .faraddr %01001111111111111 -00434Dr 1 00 A0 00 .faraddr %01010000000000000 -004350r 1 01 A0 00 .faraddr %01010000000000001 -004353r 1 02 A0 00 .faraddr %01010000000000010 -004356r 1 03 A0 00 .faraddr %01010000000000011 -004359r 1 04 A0 00 .faraddr %01010000000000100 -00435Cr 1 05 A0 00 .faraddr %01010000000000101 -00435Fr 1 06 A0 00 .faraddr %01010000000000110 -004362r 1 07 A0 00 .faraddr %01010000000000111 -004365r 1 08 A0 00 .faraddr %01010000000001000 -004368r 1 09 A0 00 .faraddr %01010000000001001 -00436Br 1 0A A0 00 .faraddr %01010000000001010 -00436Er 1 0B A0 00 .faraddr %01010000000001011 -004371r 1 0C A0 00 .faraddr %01010000000001100 -004374r 1 0D A0 00 .faraddr %01010000000001101 -004377r 1 0E A0 00 .faraddr %01010000000001110 -00437Ar 1 0F A0 00 .faraddr %01010000000001111 -00437Dr 1 E1 AF 00 .faraddr %01010111111100001 -004380r 1 E2 AF 00 .faraddr %01010111111100010 -004383r 1 E3 AF 00 .faraddr %01010111111100011 -004386r 1 E4 AF 00 .faraddr %01010111111100100 -004389r 1 E5 AF 00 .faraddr %01010111111100101 -00438Cr 1 E6 AF 00 .faraddr %01010111111100110 -00438Fr 1 E7 AF 00 .faraddr %01010111111100111 -004392r 1 E8 AF 00 .faraddr %01010111111101000 -004395r 1 E9 AF 00 .faraddr %01010111111101001 -004398r 1 EA AF 00 .faraddr %01010111111101010 -00439Br 1 EB AF 00 .faraddr %01010111111101011 -00439Er 1 EC AF 00 .faraddr %01010111111101100 -0043A1r 1 ED AF 00 .faraddr %01010111111101101 -0043A4r 1 EE AF 00 .faraddr %01010111111101110 -0043A7r 1 EF AF 00 .faraddr %01010111111101111 -0043AAr 1 F0 AF 00 .faraddr %01010111111110000 -0043ADr 1 F1 AF 00 .faraddr %01010111111110001 -0043B0r 1 F2 AF 00 .faraddr %01010111111110010 -0043B3r 1 F3 AF 00 .faraddr %01010111111110011 -0043B6r 1 F4 AF 00 .faraddr %01010111111110100 -0043B9r 1 F5 AF 00 .faraddr %01010111111110101 -0043BCr 1 F6 AF 00 .faraddr %01010111111110110 -0043BFr 1 F7 AF 00 .faraddr %01010111111110111 -0043C2r 1 F8 AF 00 .faraddr %01010111111111000 -0043C5r 1 F9 AF 00 .faraddr %01010111111111001 -0043C8r 1 FA AF 00 .faraddr %01010111111111010 -0043CBr 1 FB AF 00 .faraddr %01010111111111011 -0043CEr 1 FC AF 00 .faraddr %01010111111111100 -0043D1r 1 FD AF 00 .faraddr %01010111111111101 -0043D4r 1 FE AF 00 .faraddr %01010111111111110 -0043D7r 1 FF AF 00 .faraddr %01010111111111111 -0043DAr 1 00 B0 00 .faraddr %01011000000000000 -0043DDr 1 01 B0 00 .faraddr %01011000000000001 -0043E0r 1 02 B0 00 .faraddr %01011000000000010 -0043E3r 1 03 B0 00 .faraddr %01011000000000011 -0043E6r 1 04 B0 00 .faraddr %01011000000000100 -0043E9r 1 05 B0 00 .faraddr %01011000000000101 -0043ECr 1 06 B0 00 .faraddr %01011000000000110 -0043EFr 1 07 B0 00 .faraddr %01011000000000111 -0043F2r 1 08 B0 00 .faraddr %01011000000001000 -0043F5r 1 09 B0 00 .faraddr %01011000000001001 -0043F8r 1 0A B0 00 .faraddr %01011000000001010 -0043FBr 1 0B B0 00 .faraddr %01011000000001011 -0043FEr 1 0C B0 00 .faraddr %01011000000001100 -004401r 1 0D B0 00 .faraddr %01011000000001101 -004404r 1 0E B0 00 .faraddr %01011000000001110 -004407r 1 0F B0 00 .faraddr %01011000000001111 -00440Ar 1 E1 FF 00 .faraddr %01111111111100001 -00440Dr 1 E2 FF 00 .faraddr %01111111111100010 -004410r 1 E3 FF 00 .faraddr %01111111111100011 -004413r 1 E4 FF 00 .faraddr %01111111111100100 -004416r 1 E5 FF 00 .faraddr %01111111111100101 -004419r 1 E6 FF 00 .faraddr %01111111111100110 -00441Cr 1 E7 FF 00 .faraddr %01111111111100111 -00441Fr 1 E8 FF 00 .faraddr %01111111111101000 -004422r 1 E9 FF 00 .faraddr %01111111111101001 -004425r 1 EA FF 00 .faraddr %01111111111101010 -004428r 1 EB FF 00 .faraddr %01111111111101011 -00442Br 1 EC FF 00 .faraddr %01111111111101100 -00442Er 1 ED FF 00 .faraddr %01111111111101101 -004431r 1 EE FF 00 .faraddr %01111111111101110 -004434r 1 EF FF 00 .faraddr %01111111111101111 -004437r 1 F0 FF 00 .faraddr %01111111111110000 -00443Ar 1 F1 FF 00 .faraddr %01111111111110001 -00443Dr 1 F2 FF 00 .faraddr %01111111111110010 -004440r 1 F3 FF 00 .faraddr %01111111111110011 -004443r 1 F4 FF 00 .faraddr %01111111111110100 -004446r 1 F5 FF 00 .faraddr %01111111111110101 -004449r 1 F6 FF 00 .faraddr %01111111111110110 -00444Cr 1 F7 FF 00 .faraddr %01111111111110111 -00444Fr 1 F8 FF 00 .faraddr %01111111111111000 -004452r 1 F9 FF 00 .faraddr %01111111111111001 -004455r 1 FA FF 00 .faraddr %01111111111111010 -004458r 1 FB FF 00 .faraddr %01111111111111011 -00445Br 1 FC FF 00 .faraddr %01111111111111100 -00445Er 1 FD FF 00 .faraddr %01111111111111101 -004461r 1 FE FF 00 .faraddr %01111111111111110 -004464r 1 FF FF 00 .faraddr %01111111111111111 -004467r 1 00 00 01 .faraddr %10000000000000000 -00446Ar 1 01 00 01 .faraddr %10000000000000001 -00446Dr 1 02 00 01 .faraddr %10000000000000010 -004470r 1 03 00 01 .faraddr %10000000000000011 -004473r 1 04 00 01 .faraddr %10000000000000100 -004476r 1 05 00 01 .faraddr %10000000000000101 -004479r 1 06 00 01 .faraddr %10000000000000110 -00447Cr 1 07 00 01 .faraddr %10000000000000111 -00447Fr 1 08 00 01 .faraddr %10000000000001000 -004482r 1 09 00 01 .faraddr %10000000000001001 -004485r 1 0A 00 01 .faraddr %10000000000001010 -004488r 1 0B 00 01 .faraddr %10000000000001011 -00448Br 1 0C 00 01 .faraddr %10000000000001100 -00448Er 1 0D 00 01 .faraddr %10000000000001101 -004491r 1 0E 00 01 .faraddr %10000000000001110 -004494r 1 0F 00 01 .faraddr %10000000000001111 -004497r 1 E1 FF 10 .faraddr %100001111111111100001 -00449Ar 1 E2 FF 10 .faraddr %100001111111111100010 -00449Dr 1 E3 FF 10 .faraddr %100001111111111100011 -0044A0r 1 E4 FF 10 .faraddr %100001111111111100100 -0044A3r 1 E5 FF 10 .faraddr %100001111111111100101 -0044A6r 1 E6 FF 10 .faraddr %100001111111111100110 -0044A9r 1 E7 FF 10 .faraddr %100001111111111100111 -0044ACr 1 E8 FF 10 .faraddr %100001111111111101000 -0044AFr 1 E9 FF 10 .faraddr %100001111111111101001 -0044B2r 1 EA FF 10 .faraddr %100001111111111101010 -0044B5r 1 EB FF 10 .faraddr %100001111111111101011 -0044B8r 1 EC FF 10 .faraddr %100001111111111101100 -0044BBr 1 ED FF 10 .faraddr %100001111111111101101 -0044BEr 1 EE FF 10 .faraddr %100001111111111101110 -0044C1r 1 EF FF 10 .faraddr %100001111111111101111 -0044C4r 1 F0 FF 10 .faraddr %100001111111111110000 -0044C7r 1 F1 FF 10 .faraddr %100001111111111110001 -0044CAr 1 F2 FF 10 .faraddr %100001111111111110010 -0044CDr 1 F3 FF 10 .faraddr %100001111111111110011 -0044D0r 1 F4 FF 10 .faraddr %100001111111111110100 -0044D3r 1 F5 FF 10 .faraddr %100001111111111110101 -0044D6r 1 F6 FF 10 .faraddr %100001111111111110110 -0044D9r 1 F7 FF 10 .faraddr %100001111111111110111 -0044DCr 1 F8 FF 10 .faraddr %100001111111111111000 -0044DFr 1 F9 FF 10 .faraddr %100001111111111111001 -0044E2r 1 FA FF 10 .faraddr %100001111111111111010 -0044E5r 1 FB FF 10 .faraddr %100001111111111111011 -0044E8r 1 FC FF 10 .faraddr %100001111111111111100 -0044EBr 1 FD FF 10 .faraddr %100001111111111111101 -0044EEr 1 FE FF 10 .faraddr %100001111111111111110 -0044F1r 1 FF FF 10 .faraddr %100001111111111111111 -0044F4r 1 00 00 11 .faraddr %100010000000000000000 -0044F7r 1 01 00 11 .faraddr %100010000000000000001 -0044FAr 1 02 00 11 .faraddr %100010000000000000010 -0044FDr 1 03 00 11 .faraddr %100010000000000000011 -004500r 1 04 00 11 .faraddr %100010000000000000100 -004503r 1 05 00 11 .faraddr %100010000000000000101 -004506r 1 06 00 11 .faraddr %100010000000000000110 -004509r 1 07 00 11 .faraddr %100010000000000000111 -00450Cr 1 08 00 11 .faraddr %100010000000000001000 -00450Fr 1 09 00 11 .faraddr %100010000000000001001 -004512r 1 0A 00 11 .faraddr %100010000000000001010 -004515r 1 0B 00 11 .faraddr %100010000000000001011 -004518r 1 0C 00 11 .faraddr %100010000000000001100 -00451Br 1 0D 00 11 .faraddr %100010000000000001101 -00451Er 1 0E 00 11 .faraddr %100010000000000001110 -004521r 1 0F 00 11 .faraddr %100010000000000001111 -004524r 1 E1 FF 20 .faraddr %1000001111111111100001 -004527r 1 E2 FF 20 .faraddr %1000001111111111100010 -00452Ar 1 E3 FF 20 .faraddr %1000001111111111100011 -00452Dr 1 E4 FF 20 .faraddr %1000001111111111100100 -004530r 1 E5 FF 20 .faraddr %1000001111111111100101 -004533r 1 E6 FF 20 .faraddr %1000001111111111100110 -004536r 1 E7 FF 20 .faraddr %1000001111111111100111 -004539r 1 E8 FF 20 .faraddr %1000001111111111101000 -00453Cr 1 E9 FF 20 .faraddr %1000001111111111101001 -00453Fr 1 EA FF 20 .faraddr %1000001111111111101010 -004542r 1 EB FF 20 .faraddr %1000001111111111101011 -004545r 1 EC FF 20 .faraddr %1000001111111111101100 -004548r 1 ED FF 20 .faraddr %1000001111111111101101 -00454Br 1 EE FF 20 .faraddr %1000001111111111101110 -00454Er 1 EF FF 20 .faraddr %1000001111111111101111 -004551r 1 F0 FF 20 .faraddr %1000001111111111110000 -004554r 1 F1 FF 20 .faraddr %1000001111111111110001 -004557r 1 F2 FF 20 .faraddr %1000001111111111110010 -00455Ar 1 F3 FF 20 .faraddr %1000001111111111110011 -00455Dr 1 F4 FF 20 .faraddr %1000001111111111110100 -004560r 1 F5 FF 20 .faraddr %1000001111111111110101 -004563r 1 F6 FF 20 .faraddr %1000001111111111110110 -004566r 1 F7 FF 20 .faraddr %1000001111111111110111 -004569r 1 F8 FF 20 .faraddr %1000001111111111111000 -00456Cr 1 F9 FF 20 .faraddr %1000001111111111111001 -00456Fr 1 FA FF 20 .faraddr %1000001111111111111010 -004572r 1 FB FF 20 .faraddr %1000001111111111111011 -004575r 1 FC FF 20 .faraddr %1000001111111111111100 -004578r 1 FD FF 20 .faraddr %1000001111111111111101 -00457Br 1 FE FF 20 .faraddr %1000001111111111111110 -00457Er 1 FF FF 20 .faraddr %1000001111111111111111 -004581r 1 00 00 21 .faraddr %1000010000000000000000 -004584r 1 01 00 21 .faraddr %1000010000000000000001 -004587r 1 02 00 21 .faraddr %1000010000000000000010 -00458Ar 1 03 00 21 .faraddr %1000010000000000000011 -00458Dr 1 04 00 21 .faraddr %1000010000000000000100 -004590r 1 05 00 21 .faraddr %1000010000000000000101 -004593r 1 06 00 21 .faraddr %1000010000000000000110 -004596r 1 07 00 21 .faraddr %1000010000000000000111 -004599r 1 08 00 21 .faraddr %1000010000000000001000 -00459Cr 1 09 00 21 .faraddr %1000010000000000001001 -00459Fr 1 0A 00 21 .faraddr %1000010000000000001010 -0045A2r 1 0B 00 21 .faraddr %1000010000000000001011 -0045A5r 1 0C 00 21 .faraddr %1000010000000000001100 -0045A8r 1 0D 00 21 .faraddr %1000010000000000001101 -0045ABr 1 0E 00 21 .faraddr %1000010000000000001110 -0045AEr 1 0F 00 21 .faraddr %1000010000000000001111 -0045B1r 1 E1 FF 7F .faraddr %11111111111111111100001 -0045B4r 1 E2 FF 7F .faraddr %11111111111111111100010 -0045B7r 1 E3 FF 7F .faraddr %11111111111111111100011 -0045BAr 1 E4 FF 7F .faraddr %11111111111111111100100 -0045BDr 1 E5 FF 7F .faraddr %11111111111111111100101 -0045C0r 1 E6 FF 7F .faraddr %11111111111111111100110 -0045C3r 1 E7 FF 7F .faraddr %11111111111111111100111 -0045C6r 1 E8 FF 7F .faraddr %11111111111111111101000 -0045C9r 1 E9 FF 7F .faraddr %11111111111111111101001 -0045CCr 1 EA FF 7F .faraddr %11111111111111111101010 -0045CFr 1 EB FF 7F .faraddr %11111111111111111101011 -0045D2r 1 EC FF 7F .faraddr %11111111111111111101100 -0045D5r 1 ED FF 7F .faraddr %11111111111111111101101 -0045D8r 1 EE FF 7F .faraddr %11111111111111111101110 -0045DBr 1 EF FF 7F .faraddr %11111111111111111101111 -0045DEr 1 F0 FF 7F .faraddr %11111111111111111110000 -0045E1r 1 F1 FF 7F .faraddr %11111111111111111110001 -0045E4r 1 F2 FF 7F .faraddr %11111111111111111110010 -0045E7r 1 F3 FF 7F .faraddr %11111111111111111110011 -0045EAr 1 F4 FF 7F .faraddr %11111111111111111110100 -0045EDr 1 F5 FF 7F .faraddr %11111111111111111110101 -0045F0r 1 F6 FF 7F .faraddr %11111111111111111110110 -0045F3r 1 F7 FF 7F .faraddr %11111111111111111110111 -0045F6r 1 F8 FF 7F .faraddr %11111111111111111111000 -0045F9r 1 F9 FF 7F .faraddr %11111111111111111111001 -0045FCr 1 FA FF 7F .faraddr %11111111111111111111010 -0045FFr 1 FB FF 7F .faraddr %11111111111111111111011 -004602r 1 FC FF 7F .faraddr %11111111111111111111100 -004605r 1 FD FF 7F .faraddr %11111111111111111111101 -004608r 1 FE FF 7F .faraddr %11111111111111111111110 -00460Br 1 FF FF 7F .faraddr %11111111111111111111111 -00460Er 1 00 00 80 .faraddr %100000000000000000000000 -004611r 1 01 00 80 .faraddr %100000000000000000000001 -004614r 1 02 00 80 .faraddr %100000000000000000000010 -004617r 1 03 00 80 .faraddr %100000000000000000000011 -00461Ar 1 04 00 80 .faraddr %100000000000000000000100 -00461Dr 1 05 00 80 .faraddr %100000000000000000000101 -004620r 1 06 00 80 .faraddr %100000000000000000000110 -004623r 1 07 00 80 .faraddr %100000000000000000000111 -004626r 1 08 00 80 .faraddr %100000000000000000001000 -004629r 1 09 00 80 .faraddr %100000000000000000001001 -00462Cr 1 0A 00 80 .faraddr %100000000000000000001010 -00462Fr 1 0B 00 80 .faraddr %100000000000000000001011 -004632r 1 0C 00 80 .faraddr %100000000000000000001100 -004635r 1 0D 00 80 .faraddr %100000000000000000001101 -004638r 1 0E 00 80 .faraddr %100000000000000000001110 -00463Br 1 0F 00 80 .faraddr %100000000000000000001111 -00463Er 1 E1 FF 9F .faraddr %100111111111111111100001 -004641r 1 E2 FF 9F .faraddr %100111111111111111100010 -004644r 1 E3 FF 9F .faraddr %100111111111111111100011 -004647r 1 E4 FF 9F .faraddr %100111111111111111100100 -00464Ar 1 E5 FF 9F .faraddr %100111111111111111100101 -00464Dr 1 E6 FF 9F .faraddr %100111111111111111100110 -004650r 1 E7 FF 9F .faraddr %100111111111111111100111 -004653r 1 E8 FF 9F .faraddr %100111111111111111101000 -004656r 1 E9 FF 9F .faraddr %100111111111111111101001 -004659r 1 EA FF 9F .faraddr %100111111111111111101010 -00465Cr 1 EB FF 9F .faraddr %100111111111111111101011 -00465Fr 1 EC FF 9F .faraddr %100111111111111111101100 -004662r 1 ED FF 9F .faraddr %100111111111111111101101 -004665r 1 EE FF 9F .faraddr %100111111111111111101110 -004668r 1 EF FF 9F .faraddr %100111111111111111101111 -00466Br 1 F0 FF 9F .faraddr %100111111111111111110000 -00466Er 1 F1 FF 9F .faraddr %100111111111111111110001 -004671r 1 F2 FF 9F .faraddr %100111111111111111110010 -004674r 1 F3 FF 9F .faraddr %100111111111111111110011 -004677r 1 F4 FF 9F .faraddr %100111111111111111110100 -00467Ar 1 F5 FF 9F .faraddr %100111111111111111110101 -00467Dr 1 F6 FF 9F .faraddr %100111111111111111110110 -004680r 1 F7 FF 9F .faraddr %100111111111111111110111 -004683r 1 F8 FF 9F .faraddr %100111111111111111111000 -004686r 1 F9 FF 9F .faraddr %100111111111111111111001 -004689r 1 FA FF 9F .faraddr %100111111111111111111010 -00468Cr 1 FB FF 9F .faraddr %100111111111111111111011 -00468Fr 1 FC FF 9F .faraddr %100111111111111111111100 -004692r 1 FD FF 9F .faraddr %100111111111111111111101 -004695r 1 FE FF 9F .faraddr %100111111111111111111110 -004698r 1 FF FF 9F .faraddr %100111111111111111111111 -00469Br 1 00 00 A0 .faraddr %101000000000000000000000 -00469Er 1 01 00 A0 .faraddr %101000000000000000000001 -0046A1r 1 02 00 A0 .faraddr %101000000000000000000010 -0046A4r 1 03 00 A0 .faraddr %101000000000000000000011 -0046A7r 1 04 00 A0 .faraddr %101000000000000000000100 -0046AAr 1 05 00 A0 .faraddr %101000000000000000000101 -0046ADr 1 06 00 A0 .faraddr %101000000000000000000110 -0046B0r 1 07 00 A0 .faraddr %101000000000000000000111 -0046B3r 1 08 00 A0 .faraddr %101000000000000000001000 -0046B6r 1 09 00 A0 .faraddr %101000000000000000001001 -0046B9r 1 0A 00 A0 .faraddr %101000000000000000001010 -0046BCr 1 0B 00 A0 .faraddr %101000000000000000001011 -0046BFr 1 0C 00 A0 .faraddr %101000000000000000001100 -0046C2r 1 0D 00 A0 .faraddr %101000000000000000001101 -0046C5r 1 0E 00 A0 .faraddr %101000000000000000001110 -0046C8r 1 0F 00 A0 .faraddr %101000000000000000001111 -0046CBr 1 E1 FF FF .faraddr %111111111111111111100001 -0046CEr 1 E2 FF FF .faraddr %111111111111111111100010 -0046D1r 1 E3 FF FF .faraddr %111111111111111111100011 -0046D4r 1 E4 FF FF .faraddr %111111111111111111100100 -0046D7r 1 E5 FF FF .faraddr %111111111111111111100101 -0046DAr 1 E6 FF FF .faraddr %111111111111111111100110 -0046DDr 1 E7 FF FF .faraddr %111111111111111111100111 -0046E0r 1 E8 FF FF .faraddr %111111111111111111101000 -0046E3r 1 E9 FF FF .faraddr %111111111111111111101001 -0046E6r 1 EA FF FF .faraddr %111111111111111111101010 -0046E9r 1 EB FF FF .faraddr %111111111111111111101011 -0046ECr 1 EC FF FF .faraddr %111111111111111111101100 -0046EFr 1 ED FF FF .faraddr %111111111111111111101101 -0046F2r 1 EE FF FF .faraddr %111111111111111111101110 -0046F5r 1 EF FF FF .faraddr %111111111111111111101111 -0046F8r 1 F0 FF FF .faraddr %111111111111111111110000 -0046FBr 1 F1 FF FF .faraddr %111111111111111111110001 -0046FEr 1 F2 FF FF .faraddr %111111111111111111110010 -004701r 1 F3 FF FF .faraddr %111111111111111111110011 -004704r 1 F4 FF FF .faraddr %111111111111111111110100 -004707r 1 F5 FF FF .faraddr %111111111111111111110101 -00470Ar 1 F6 FF FF .faraddr %111111111111111111110110 -00470Dr 1 F7 FF FF .faraddr %111111111111111111110111 -004710r 1 F8 FF FF .faraddr %111111111111111111111000 -004713r 1 F9 FF FF .faraddr %111111111111111111111001 -004716r 1 FA FF FF .faraddr %111111111111111111111010 -004719r 1 FB FF FF .faraddr %111111111111111111111011 -00471Cr 1 FC FF FF .faraddr %111111111111111111111100 -00471Fr 1 FD FF FF .faraddr %111111111111111111111101 -004722r 1 FE FF FF .faraddr %111111111111111111111110 -004725r 1 FF FF FF .faraddr %111111111111111111111111 +00413Ar 1 ; binary values, variable length +00413Ar 1 00 00 00 .faraddr %0 +00413Dr 1 01 00 00 .faraddr %01 +004140r 1 02 00 00 .faraddr %010 +004143r 1 03 00 00 .faraddr %011 +004146r 1 04 00 00 .faraddr %0100 +004149r 1 05 00 00 .faraddr %0101 +00414Cr 1 06 00 00 .faraddr %0110 +00414Fr 1 07 00 00 .faraddr %0111 +004152r 1 08 00 00 .faraddr %01000 +004155r 1 09 00 00 .faraddr %01001 +004158r 1 0A 00 00 .faraddr %01010 +00415Br 1 0B 00 00 .faraddr %01011 +00415Er 1 0C 00 00 .faraddr %01100 +004161r 1 0D 00 00 .faraddr %01101 +004164r 1 0E 00 00 .faraddr %01110 +004167r 1 0F 00 00 .faraddr %01111 +00416Ar 1 10 00 00 .faraddr %010000 +00416Dr 1 11 00 00 .faraddr %010001 +004170r 1 12 00 00 .faraddr %010010 +004173r 1 13 00 00 .faraddr %010011 +004176r 1 70 00 00 .faraddr %01110000 +004179r 1 71 00 00 .faraddr %01110001 +00417Cr 1 72 00 00 .faraddr %01110010 +00417Fr 1 73 00 00 .faraddr %01110011 +004182r 1 74 00 00 .faraddr %01110100 +004185r 1 75 00 00 .faraddr %01110101 +004188r 1 76 00 00 .faraddr %01110110 +00418Br 1 77 00 00 .faraddr %01110111 +00418Er 1 78 00 00 .faraddr %01111000 +004191r 1 79 00 00 .faraddr %01111001 +004194r 1 7A 00 00 .faraddr %01111010 +004197r 1 7B 00 00 .faraddr %01111011 +00419Ar 1 7C 00 00 .faraddr %01111100 +00419Dr 1 7D 00 00 .faraddr %01111101 +0041A0r 1 7E 00 00 .faraddr %01111110 +0041A3r 1 7F 00 00 .faraddr %01111111 +0041A6r 1 80 00 00 .faraddr %010000000 +0041A9r 1 81 00 00 .faraddr %010000001 +0041ACr 1 82 00 00 .faraddr %010000010 +0041AFr 1 83 00 00 .faraddr %010000011 +0041B2r 1 84 00 00 .faraddr %010000100 +0041B5r 1 85 00 00 .faraddr %010000101 +0041B8r 1 86 00 00 .faraddr %010000110 +0041BBr 1 F0 00 00 .faraddr %011110000 +0041BEr 1 F1 00 00 .faraddr %011110001 +0041C1r 1 F2 00 00 .faraddr %011110010 +0041C4r 1 F3 00 00 .faraddr %011110011 +0041C7r 1 F4 00 00 .faraddr %011110100 +0041CAr 1 F5 00 00 .faraddr %011110101 +0041CDr 1 F6 00 00 .faraddr %011110110 +0041D0r 1 F7 00 00 .faraddr %011110111 +0041D3r 1 F8 00 00 .faraddr %011111000 +0041D6r 1 F9 00 00 .faraddr %011111001 +0041D9r 1 FA 00 00 .faraddr %011111010 +0041DCr 1 FB 00 00 .faraddr %011111011 +0041DFr 1 FC 00 00 .faraddr %011111100 +0041E2r 1 FD 00 00 .faraddr %011111101 +0041E5r 1 FE 00 00 .faraddr %011111110 +0041E8r 1 FF 00 00 .faraddr %011111111 +0041EBr 1 00 01 00 .faraddr %0100000000 +0041EEr 1 01 01 00 .faraddr %0100000001 +0041F1r 1 02 01 00 .faraddr %0100000010 +0041F4r 1 03 01 00 .faraddr %0100000011 +0041F7r 1 D2 0F 00 .faraddr %0111111010010 +0041FAr 1 D3 0F 00 .faraddr %0111111010011 +0041FDr 1 D4 0F 00 .faraddr %0111111010100 +004200r 1 D5 0F 00 .faraddr %0111111010101 +004203r 1 D6 0F 00 .faraddr %0111111010110 +004206r 1 D7 0F 00 .faraddr %0111111010111 +004209r 1 D8 0F 00 .faraddr %0111111011000 +00420Cr 1 D9 0F 00 .faraddr %0111111011001 +00420Fr 1 DA 0F 00 .faraddr %0111111011010 +004212r 1 DB 0F 00 .faraddr %0111111011011 +004215r 1 DC 0F 00 .faraddr %0111111011100 +004218r 1 DD 0F 00 .faraddr %0111111011101 +00421Br 1 DE 0F 00 .faraddr %0111111011110 +00421Er 1 DF 0F 00 .faraddr %0111111011111 +004221r 1 E0 0F 00 .faraddr %0111111100000 +004224r 1 E1 0F 00 .faraddr %0111111100001 +004227r 1 E2 0F 00 .faraddr %0111111100010 +00422Ar 1 E3 0F 00 .faraddr %0111111100011 +00422Dr 1 E4 0F 00 .faraddr %0111111100100 +004230r 1 E5 0F 00 .faraddr %0111111100101 +004233r 1 E6 0F 00 .faraddr %0111111100110 +004236r 1 E7 0F 00 .faraddr %0111111100111 +004239r 1 E8 0F 00 .faraddr %0111111101000 +00423Cr 1 E9 0F 00 .faraddr %0111111101001 +00423Fr 1 EA 0F 00 .faraddr %0111111101010 +004242r 1 EB 0F 00 .faraddr %0111111101011 +004245r 1 EC 0F 00 .faraddr %0111111101100 +004248r 1 ED 0F 00 .faraddr %0111111101101 +00424Br 1 EE 0F 00 .faraddr %0111111101110 +00424Er 1 EF 0F 00 .faraddr %0111111101111 +004251r 1 F0 0F 00 .faraddr %0111111110000 +004254r 1 F1 0F 00 .faraddr %0111111110001 +004257r 1 F2 0F 00 .faraddr %0111111110010 +00425Ar 1 F3 0F 00 .faraddr %0111111110011 +00425Dr 1 F4 0F 00 .faraddr %0111111110100 +004260r 1 F5 0F 00 .faraddr %0111111110101 +004263r 1 F6 0F 00 .faraddr %0111111110110 +004266r 1 F7 0F 00 .faraddr %0111111110111 +004269r 1 F8 0F 00 .faraddr %0111111111000 +00426Cr 1 F9 0F 00 .faraddr %0111111111001 +00426Fr 1 FA 0F 00 .faraddr %0111111111010 +004272r 1 FB 0F 00 .faraddr %0111111111011 +004275r 1 FC 0F 00 .faraddr %0111111111100 +004278r 1 FD 0F 00 .faraddr %0111111111101 +00427Br 1 FE 0F 00 .faraddr %0111111111110 +00427Er 1 FF 0F 00 .faraddr %0111111111111 +004281r 1 00 10 00 .faraddr %01000000000000 +004284r 1 01 10 00 .faraddr %01000000000001 +004287r 1 02 10 00 .faraddr %01000000000010 +00428Ar 1 03 10 00 .faraddr %01000000000011 +00428Dr 1 04 10 00 .faraddr %01000000000100 +004290r 1 05 10 00 .faraddr %01000000000101 +004293r 1 06 10 00 .faraddr %01000000000110 +004296r 1 07 10 00 .faraddr %01000000000111 +004299r 1 08 10 00 .faraddr %01000000001000 +00429Cr 1 F0 7F 00 .faraddr %0111111111110000 +00429Fr 1 F1 7F 00 .faraddr %0111111111110001 +0042A2r 1 F2 7F 00 .faraddr %0111111111110010 +0042A5r 1 F3 7F 00 .faraddr %0111111111110011 +0042A8r 1 F4 7F 00 .faraddr %0111111111110100 +0042ABr 1 F5 7F 00 .faraddr %0111111111110101 +0042AEr 1 F6 7F 00 .faraddr %0111111111110110 +0042B1r 1 F7 7F 00 .faraddr %0111111111110111 +0042B4r 1 F8 7F 00 .faraddr %0111111111111000 +0042B7r 1 F9 7F 00 .faraddr %0111111111111001 +0042BAr 1 FA 7F 00 .faraddr %0111111111111010 +0042BDr 1 FB 7F 00 .faraddr %0111111111111011 +0042C0r 1 FC 7F 00 .faraddr %0111111111111100 +0042C3r 1 FD 7F 00 .faraddr %0111111111111101 +0042C6r 1 FE 7F 00 .faraddr %0111111111111110 +0042C9r 1 FF 7F 00 .faraddr %0111111111111111 +0042CCr 1 00 80 00 .faraddr %01000000000000000 +0042CFr 1 01 80 00 .faraddr %01000000000000001 +0042D2r 1 02 80 00 .faraddr %01000000000000010 +0042D5r 1 03 80 00 .faraddr %01000000000000011 +0042D8r 1 04 80 00 .faraddr %01000000000000100 +0042DBr 1 05 80 00 .faraddr %01000000000000101 +0042DEr 1 06 80 00 .faraddr %01000000000000110 +0042E1r 1 07 80 00 .faraddr %01000000000000111 +0042E4r 1 08 80 00 .faraddr %01000000000001000 +0042E7r 1 09 80 00 .faraddr %01000000000001001 +0042EAr 1 0A 80 00 .faraddr %01000000000001010 +0042EDr 1 0B 80 00 .faraddr %01000000000001011 +0042F0r 1 E1 9F 00 .faraddr %01001111111100001 +0042F3r 1 E2 9F 00 .faraddr %01001111111100010 +0042F6r 1 E3 9F 00 .faraddr %01001111111100011 +0042F9r 1 E4 9F 00 .faraddr %01001111111100100 +0042FCr 1 E5 9F 00 .faraddr %01001111111100101 +0042FFr 1 E6 9F 00 .faraddr %01001111111100110 +004302r 1 E7 9F 00 .faraddr %01001111111100111 +004305r 1 E8 9F 00 .faraddr %01001111111101000 +004308r 1 E9 9F 00 .faraddr %01001111111101001 +00430Br 1 EA 9F 00 .faraddr %01001111111101010 +00430Er 1 EB 9F 00 .faraddr %01001111111101011 +004311r 1 EC 9F 00 .faraddr %01001111111101100 +004314r 1 ED 9F 00 .faraddr %01001111111101101 +004317r 1 EE 9F 00 .faraddr %01001111111101110 +00431Ar 1 EF 9F 00 .faraddr %01001111111101111 +00431Dr 1 F0 9F 00 .faraddr %01001111111110000 +004320r 1 F1 9F 00 .faraddr %01001111111110001 +004323r 1 F2 9F 00 .faraddr %01001111111110010 +004326r 1 F3 9F 00 .faraddr %01001111111110011 +004329r 1 F4 9F 00 .faraddr %01001111111110100 +00432Cr 1 F5 9F 00 .faraddr %01001111111110101 +00432Fr 1 F6 9F 00 .faraddr %01001111111110110 +004332r 1 F7 9F 00 .faraddr %01001111111110111 +004335r 1 F8 9F 00 .faraddr %01001111111111000 +004338r 1 F9 9F 00 .faraddr %01001111111111001 +00433Br 1 FA 9F 00 .faraddr %01001111111111010 +00433Er 1 FB 9F 00 .faraddr %01001111111111011 +004341r 1 FC 9F 00 .faraddr %01001111111111100 +004344r 1 FD 9F 00 .faraddr %01001111111111101 +004347r 1 FE 9F 00 .faraddr %01001111111111110 +00434Ar 1 FF 9F 00 .faraddr %01001111111111111 +00434Dr 1 00 A0 00 .faraddr %01010000000000000 +004350r 1 01 A0 00 .faraddr %01010000000000001 +004353r 1 02 A0 00 .faraddr %01010000000000010 +004356r 1 03 A0 00 .faraddr %01010000000000011 +004359r 1 04 A0 00 .faraddr %01010000000000100 +00435Cr 1 05 A0 00 .faraddr %01010000000000101 +00435Fr 1 06 A0 00 .faraddr %01010000000000110 +004362r 1 07 A0 00 .faraddr %01010000000000111 +004365r 1 08 A0 00 .faraddr %01010000000001000 +004368r 1 09 A0 00 .faraddr %01010000000001001 +00436Br 1 0A A0 00 .faraddr %01010000000001010 +00436Er 1 0B A0 00 .faraddr %01010000000001011 +004371r 1 0C A0 00 .faraddr %01010000000001100 +004374r 1 0D A0 00 .faraddr %01010000000001101 +004377r 1 0E A0 00 .faraddr %01010000000001110 +00437Ar 1 0F A0 00 .faraddr %01010000000001111 +00437Dr 1 E1 AF 00 .faraddr %01010111111100001 +004380r 1 E2 AF 00 .faraddr %01010111111100010 +004383r 1 E3 AF 00 .faraddr %01010111111100011 +004386r 1 E4 AF 00 .faraddr %01010111111100100 +004389r 1 E5 AF 00 .faraddr %01010111111100101 +00438Cr 1 E6 AF 00 .faraddr %01010111111100110 +00438Fr 1 E7 AF 00 .faraddr %01010111111100111 +004392r 1 E8 AF 00 .faraddr %01010111111101000 +004395r 1 E9 AF 00 .faraddr %01010111111101001 +004398r 1 EA AF 00 .faraddr %01010111111101010 +00439Br 1 EB AF 00 .faraddr %01010111111101011 +00439Er 1 EC AF 00 .faraddr %01010111111101100 +0043A1r 1 ED AF 00 .faraddr %01010111111101101 +0043A4r 1 EE AF 00 .faraddr %01010111111101110 +0043A7r 1 EF AF 00 .faraddr %01010111111101111 +0043AAr 1 F0 AF 00 .faraddr %01010111111110000 +0043ADr 1 F1 AF 00 .faraddr %01010111111110001 +0043B0r 1 F2 AF 00 .faraddr %01010111111110010 +0043B3r 1 F3 AF 00 .faraddr %01010111111110011 +0043B6r 1 F4 AF 00 .faraddr %01010111111110100 +0043B9r 1 F5 AF 00 .faraddr %01010111111110101 +0043BCr 1 F6 AF 00 .faraddr %01010111111110110 +0043BFr 1 F7 AF 00 .faraddr %01010111111110111 +0043C2r 1 F8 AF 00 .faraddr %01010111111111000 +0043C5r 1 F9 AF 00 .faraddr %01010111111111001 +0043C8r 1 FA AF 00 .faraddr %01010111111111010 +0043CBr 1 FB AF 00 .faraddr %01010111111111011 +0043CEr 1 FC AF 00 .faraddr %01010111111111100 +0043D1r 1 FD AF 00 .faraddr %01010111111111101 +0043D4r 1 FE AF 00 .faraddr %01010111111111110 +0043D7r 1 FF AF 00 .faraddr %01010111111111111 +0043DAr 1 00 B0 00 .faraddr %01011000000000000 +0043DDr 1 01 B0 00 .faraddr %01011000000000001 +0043E0r 1 02 B0 00 .faraddr %01011000000000010 +0043E3r 1 03 B0 00 .faraddr %01011000000000011 +0043E6r 1 04 B0 00 .faraddr %01011000000000100 +0043E9r 1 05 B0 00 .faraddr %01011000000000101 +0043ECr 1 06 B0 00 .faraddr %01011000000000110 +0043EFr 1 07 B0 00 .faraddr %01011000000000111 +0043F2r 1 08 B0 00 .faraddr %01011000000001000 +0043F5r 1 09 B0 00 .faraddr %01011000000001001 +0043F8r 1 0A B0 00 .faraddr %01011000000001010 +0043FBr 1 0B B0 00 .faraddr %01011000000001011 +0043FEr 1 0C B0 00 .faraddr %01011000000001100 +004401r 1 0D B0 00 .faraddr %01011000000001101 +004404r 1 0E B0 00 .faraddr %01011000000001110 +004407r 1 0F B0 00 .faraddr %01011000000001111 +00440Ar 1 E1 FF 00 .faraddr %01111111111100001 +00440Dr 1 E2 FF 00 .faraddr %01111111111100010 +004410r 1 E3 FF 00 .faraddr %01111111111100011 +004413r 1 E4 FF 00 .faraddr %01111111111100100 +004416r 1 E5 FF 00 .faraddr %01111111111100101 +004419r 1 E6 FF 00 .faraddr %01111111111100110 +00441Cr 1 E7 FF 00 .faraddr %01111111111100111 +00441Fr 1 E8 FF 00 .faraddr %01111111111101000 +004422r 1 E9 FF 00 .faraddr %01111111111101001 +004425r 1 EA FF 00 .faraddr %01111111111101010 +004428r 1 EB FF 00 .faraddr %01111111111101011 +00442Br 1 EC FF 00 .faraddr %01111111111101100 +00442Er 1 ED FF 00 .faraddr %01111111111101101 +004431r 1 EE FF 00 .faraddr %01111111111101110 +004434r 1 EF FF 00 .faraddr %01111111111101111 +004437r 1 F0 FF 00 .faraddr %01111111111110000 +00443Ar 1 F1 FF 00 .faraddr %01111111111110001 +00443Dr 1 F2 FF 00 .faraddr %01111111111110010 +004440r 1 F3 FF 00 .faraddr %01111111111110011 +004443r 1 F4 FF 00 .faraddr %01111111111110100 +004446r 1 F5 FF 00 .faraddr %01111111111110101 +004449r 1 F6 FF 00 .faraddr %01111111111110110 +00444Cr 1 F7 FF 00 .faraddr %01111111111110111 +00444Fr 1 F8 FF 00 .faraddr %01111111111111000 +004452r 1 F9 FF 00 .faraddr %01111111111111001 +004455r 1 FA FF 00 .faraddr %01111111111111010 +004458r 1 FB FF 00 .faraddr %01111111111111011 +00445Br 1 FC FF 00 .faraddr %01111111111111100 +00445Er 1 FD FF 00 .faraddr %01111111111111101 +004461r 1 FE FF 00 .faraddr %01111111111111110 +004464r 1 FF FF 00 .faraddr %01111111111111111 +004467r 1 00 00 01 .faraddr %10000000000000000 +00446Ar 1 01 00 01 .faraddr %10000000000000001 +00446Dr 1 02 00 01 .faraddr %10000000000000010 +004470r 1 03 00 01 .faraddr %10000000000000011 +004473r 1 04 00 01 .faraddr %10000000000000100 +004476r 1 05 00 01 .faraddr %10000000000000101 +004479r 1 06 00 01 .faraddr %10000000000000110 +00447Cr 1 07 00 01 .faraddr %10000000000000111 +00447Fr 1 08 00 01 .faraddr %10000000000001000 +004482r 1 09 00 01 .faraddr %10000000000001001 +004485r 1 0A 00 01 .faraddr %10000000000001010 +004488r 1 0B 00 01 .faraddr %10000000000001011 +00448Br 1 0C 00 01 .faraddr %10000000000001100 +00448Er 1 0D 00 01 .faraddr %10000000000001101 +004491r 1 0E 00 01 .faraddr %10000000000001110 +004494r 1 0F 00 01 .faraddr %10000000000001111 +004497r 1 E1 FF 10 .faraddr %100001111111111100001 +00449Ar 1 E2 FF 10 .faraddr %100001111111111100010 +00449Dr 1 E3 FF 10 .faraddr %100001111111111100011 +0044A0r 1 E4 FF 10 .faraddr %100001111111111100100 +0044A3r 1 E5 FF 10 .faraddr %100001111111111100101 +0044A6r 1 E6 FF 10 .faraddr %100001111111111100110 +0044A9r 1 E7 FF 10 .faraddr %100001111111111100111 +0044ACr 1 E8 FF 10 .faraddr %100001111111111101000 +0044AFr 1 E9 FF 10 .faraddr %100001111111111101001 +0044B2r 1 EA FF 10 .faraddr %100001111111111101010 +0044B5r 1 EB FF 10 .faraddr %100001111111111101011 +0044B8r 1 EC FF 10 .faraddr %100001111111111101100 +0044BBr 1 ED FF 10 .faraddr %100001111111111101101 +0044BEr 1 EE FF 10 .faraddr %100001111111111101110 +0044C1r 1 EF FF 10 .faraddr %100001111111111101111 +0044C4r 1 F0 FF 10 .faraddr %100001111111111110000 +0044C7r 1 F1 FF 10 .faraddr %100001111111111110001 +0044CAr 1 F2 FF 10 .faraddr %100001111111111110010 +0044CDr 1 F3 FF 10 .faraddr %100001111111111110011 +0044D0r 1 F4 FF 10 .faraddr %100001111111111110100 +0044D3r 1 F5 FF 10 .faraddr %100001111111111110101 +0044D6r 1 F6 FF 10 .faraddr %100001111111111110110 +0044D9r 1 F7 FF 10 .faraddr %100001111111111110111 +0044DCr 1 F8 FF 10 .faraddr %100001111111111111000 +0044DFr 1 F9 FF 10 .faraddr %100001111111111111001 +0044E2r 1 FA FF 10 .faraddr %100001111111111111010 +0044E5r 1 FB FF 10 .faraddr %100001111111111111011 +0044E8r 1 FC FF 10 .faraddr %100001111111111111100 +0044EBr 1 FD FF 10 .faraddr %100001111111111111101 +0044EEr 1 FE FF 10 .faraddr %100001111111111111110 +0044F1r 1 FF FF 10 .faraddr %100001111111111111111 +0044F4r 1 00 00 11 .faraddr %100010000000000000000 +0044F7r 1 01 00 11 .faraddr %100010000000000000001 +0044FAr 1 02 00 11 .faraddr %100010000000000000010 +0044FDr 1 03 00 11 .faraddr %100010000000000000011 +004500r 1 04 00 11 .faraddr %100010000000000000100 +004503r 1 05 00 11 .faraddr %100010000000000000101 +004506r 1 06 00 11 .faraddr %100010000000000000110 +004509r 1 07 00 11 .faraddr %100010000000000000111 +00450Cr 1 08 00 11 .faraddr %100010000000000001000 +00450Fr 1 09 00 11 .faraddr %100010000000000001001 +004512r 1 0A 00 11 .faraddr %100010000000000001010 +004515r 1 0B 00 11 .faraddr %100010000000000001011 +004518r 1 0C 00 11 .faraddr %100010000000000001100 +00451Br 1 0D 00 11 .faraddr %100010000000000001101 +00451Er 1 0E 00 11 .faraddr %100010000000000001110 +004521r 1 0F 00 11 .faraddr %100010000000000001111 +004524r 1 E1 FF 20 .faraddr %1000001111111111100001 +004527r 1 E2 FF 20 .faraddr %1000001111111111100010 +00452Ar 1 E3 FF 20 .faraddr %1000001111111111100011 +00452Dr 1 E4 FF 20 .faraddr %1000001111111111100100 +004530r 1 E5 FF 20 .faraddr %1000001111111111100101 +004533r 1 E6 FF 20 .faraddr %1000001111111111100110 +004536r 1 E7 FF 20 .faraddr %1000001111111111100111 +004539r 1 E8 FF 20 .faraddr %1000001111111111101000 +00453Cr 1 E9 FF 20 .faraddr %1000001111111111101001 +00453Fr 1 EA FF 20 .faraddr %1000001111111111101010 +004542r 1 EB FF 20 .faraddr %1000001111111111101011 +004545r 1 EC FF 20 .faraddr %1000001111111111101100 +004548r 1 ED FF 20 .faraddr %1000001111111111101101 +00454Br 1 EE FF 20 .faraddr %1000001111111111101110 +00454Er 1 EF FF 20 .faraddr %1000001111111111101111 +004551r 1 F0 FF 20 .faraddr %1000001111111111110000 +004554r 1 F1 FF 20 .faraddr %1000001111111111110001 +004557r 1 F2 FF 20 .faraddr %1000001111111111110010 +00455Ar 1 F3 FF 20 .faraddr %1000001111111111110011 +00455Dr 1 F4 FF 20 .faraddr %1000001111111111110100 +004560r 1 F5 FF 20 .faraddr %1000001111111111110101 +004563r 1 F6 FF 20 .faraddr %1000001111111111110110 +004566r 1 F7 FF 20 .faraddr %1000001111111111110111 +004569r 1 F8 FF 20 .faraddr %1000001111111111111000 +00456Cr 1 F9 FF 20 .faraddr %1000001111111111111001 +00456Fr 1 FA FF 20 .faraddr %1000001111111111111010 +004572r 1 FB FF 20 .faraddr %1000001111111111111011 +004575r 1 FC FF 20 .faraddr %1000001111111111111100 +004578r 1 FD FF 20 .faraddr %1000001111111111111101 +00457Br 1 FE FF 20 .faraddr %1000001111111111111110 +00457Er 1 FF FF 20 .faraddr %1000001111111111111111 +004581r 1 00 00 21 .faraddr %1000010000000000000000 +004584r 1 01 00 21 .faraddr %1000010000000000000001 +004587r 1 02 00 21 .faraddr %1000010000000000000010 +00458Ar 1 03 00 21 .faraddr %1000010000000000000011 +00458Dr 1 04 00 21 .faraddr %1000010000000000000100 +004590r 1 05 00 21 .faraddr %1000010000000000000101 +004593r 1 06 00 21 .faraddr %1000010000000000000110 +004596r 1 07 00 21 .faraddr %1000010000000000000111 +004599r 1 08 00 21 .faraddr %1000010000000000001000 +00459Cr 1 09 00 21 .faraddr %1000010000000000001001 +00459Fr 1 0A 00 21 .faraddr %1000010000000000001010 +0045A2r 1 0B 00 21 .faraddr %1000010000000000001011 +0045A5r 1 0C 00 21 .faraddr %1000010000000000001100 +0045A8r 1 0D 00 21 .faraddr %1000010000000000001101 +0045ABr 1 0E 00 21 .faraddr %1000010000000000001110 +0045AEr 1 0F 00 21 .faraddr %1000010000000000001111 +0045B1r 1 E1 FF 7F .faraddr %11111111111111111100001 +0045B4r 1 E2 FF 7F .faraddr %11111111111111111100010 +0045B7r 1 E3 FF 7F .faraddr %11111111111111111100011 +0045BAr 1 E4 FF 7F .faraddr %11111111111111111100100 +0045BDr 1 E5 FF 7F .faraddr %11111111111111111100101 +0045C0r 1 E6 FF 7F .faraddr %11111111111111111100110 +0045C3r 1 E7 FF 7F .faraddr %11111111111111111100111 +0045C6r 1 E8 FF 7F .faraddr %11111111111111111101000 +0045C9r 1 E9 FF 7F .faraddr %11111111111111111101001 +0045CCr 1 EA FF 7F .faraddr %11111111111111111101010 +0045CFr 1 EB FF 7F .faraddr %11111111111111111101011 +0045D2r 1 EC FF 7F .faraddr %11111111111111111101100 +0045D5r 1 ED FF 7F .faraddr %11111111111111111101101 +0045D8r 1 EE FF 7F .faraddr %11111111111111111101110 +0045DBr 1 EF FF 7F .faraddr %11111111111111111101111 +0045DEr 1 F0 FF 7F .faraddr %11111111111111111110000 +0045E1r 1 F1 FF 7F .faraddr %11111111111111111110001 +0045E4r 1 F2 FF 7F .faraddr %11111111111111111110010 +0045E7r 1 F3 FF 7F .faraddr %11111111111111111110011 +0045EAr 1 F4 FF 7F .faraddr %11111111111111111110100 +0045EDr 1 F5 FF 7F .faraddr %11111111111111111110101 +0045F0r 1 F6 FF 7F .faraddr %11111111111111111110110 +0045F3r 1 F7 FF 7F .faraddr %11111111111111111110111 +0045F6r 1 F8 FF 7F .faraddr %11111111111111111111000 +0045F9r 1 F9 FF 7F .faraddr %11111111111111111111001 +0045FCr 1 FA FF 7F .faraddr %11111111111111111111010 +0045FFr 1 FB FF 7F .faraddr %11111111111111111111011 +004602r 1 FC FF 7F .faraddr %11111111111111111111100 +004605r 1 FD FF 7F .faraddr %11111111111111111111101 +004608r 1 FE FF 7F .faraddr %11111111111111111111110 +00460Br 1 FF FF 7F .faraddr %11111111111111111111111 +00460Er 1 00 00 80 .faraddr %100000000000000000000000 +004611r 1 01 00 80 .faraddr %100000000000000000000001 +004614r 1 02 00 80 .faraddr %100000000000000000000010 +004617r 1 03 00 80 .faraddr %100000000000000000000011 +00461Ar 1 04 00 80 .faraddr %100000000000000000000100 +00461Dr 1 05 00 80 .faraddr %100000000000000000000101 +004620r 1 06 00 80 .faraddr %100000000000000000000110 +004623r 1 07 00 80 .faraddr %100000000000000000000111 +004626r 1 08 00 80 .faraddr %100000000000000000001000 +004629r 1 09 00 80 .faraddr %100000000000000000001001 +00462Cr 1 0A 00 80 .faraddr %100000000000000000001010 +00462Fr 1 0B 00 80 .faraddr %100000000000000000001011 +004632r 1 0C 00 80 .faraddr %100000000000000000001100 +004635r 1 0D 00 80 .faraddr %100000000000000000001101 +004638r 1 0E 00 80 .faraddr %100000000000000000001110 +00463Br 1 0F 00 80 .faraddr %100000000000000000001111 +00463Er 1 E1 FF 9F .faraddr %100111111111111111100001 +004641r 1 E2 FF 9F .faraddr %100111111111111111100010 +004644r 1 E3 FF 9F .faraddr %100111111111111111100011 +004647r 1 E4 FF 9F .faraddr %100111111111111111100100 +00464Ar 1 E5 FF 9F .faraddr %100111111111111111100101 +00464Dr 1 E6 FF 9F .faraddr %100111111111111111100110 +004650r 1 E7 FF 9F .faraddr %100111111111111111100111 +004653r 1 E8 FF 9F .faraddr %100111111111111111101000 +004656r 1 E9 FF 9F .faraddr %100111111111111111101001 +004659r 1 EA FF 9F .faraddr %100111111111111111101010 +00465Cr 1 EB FF 9F .faraddr %100111111111111111101011 +00465Fr 1 EC FF 9F .faraddr %100111111111111111101100 +004662r 1 ED FF 9F .faraddr %100111111111111111101101 +004665r 1 EE FF 9F .faraddr %100111111111111111101110 +004668r 1 EF FF 9F .faraddr %100111111111111111101111 +00466Br 1 F0 FF 9F .faraddr %100111111111111111110000 +00466Er 1 F1 FF 9F .faraddr %100111111111111111110001 +004671r 1 F2 FF 9F .faraddr %100111111111111111110010 +004674r 1 F3 FF 9F .faraddr %100111111111111111110011 +004677r 1 F4 FF 9F .faraddr %100111111111111111110100 +00467Ar 1 F5 FF 9F .faraddr %100111111111111111110101 +00467Dr 1 F6 FF 9F .faraddr %100111111111111111110110 +004680r 1 F7 FF 9F .faraddr %100111111111111111110111 +004683r 1 F8 FF 9F .faraddr %100111111111111111111000 +004686r 1 F9 FF 9F .faraddr %100111111111111111111001 +004689r 1 FA FF 9F .faraddr %100111111111111111111010 +00468Cr 1 FB FF 9F .faraddr %100111111111111111111011 +00468Fr 1 FC FF 9F .faraddr %100111111111111111111100 +004692r 1 FD FF 9F .faraddr %100111111111111111111101 +004695r 1 FE FF 9F .faraddr %100111111111111111111110 +004698r 1 FF FF 9F .faraddr %100111111111111111111111 +00469Br 1 00 00 A0 .faraddr %101000000000000000000000 +00469Er 1 01 00 A0 .faraddr %101000000000000000000001 +0046A1r 1 02 00 A0 .faraddr %101000000000000000000010 +0046A4r 1 03 00 A0 .faraddr %101000000000000000000011 +0046A7r 1 04 00 A0 .faraddr %101000000000000000000100 +0046AAr 1 05 00 A0 .faraddr %101000000000000000000101 +0046ADr 1 06 00 A0 .faraddr %101000000000000000000110 +0046B0r 1 07 00 A0 .faraddr %101000000000000000000111 +0046B3r 1 08 00 A0 .faraddr %101000000000000000001000 +0046B6r 1 09 00 A0 .faraddr %101000000000000000001001 +0046B9r 1 0A 00 A0 .faraddr %101000000000000000001010 +0046BCr 1 0B 00 A0 .faraddr %101000000000000000001011 +0046BFr 1 0C 00 A0 .faraddr %101000000000000000001100 +0046C2r 1 0D 00 A0 .faraddr %101000000000000000001101 +0046C5r 1 0E 00 A0 .faraddr %101000000000000000001110 +0046C8r 1 0F 00 A0 .faraddr %101000000000000000001111 +0046CBr 1 E1 FF FF .faraddr %111111111111111111100001 +0046CEr 1 E2 FF FF .faraddr %111111111111111111100010 +0046D1r 1 E3 FF FF .faraddr %111111111111111111100011 +0046D4r 1 E4 FF FF .faraddr %111111111111111111100100 +0046D7r 1 E5 FF FF .faraddr %111111111111111111100101 +0046DAr 1 E6 FF FF .faraddr %111111111111111111100110 +0046DDr 1 E7 FF FF .faraddr %111111111111111111100111 +0046E0r 1 E8 FF FF .faraddr %111111111111111111101000 +0046E3r 1 E9 FF FF .faraddr %111111111111111111101001 +0046E6r 1 EA FF FF .faraddr %111111111111111111101010 +0046E9r 1 EB FF FF .faraddr %111111111111111111101011 +0046ECr 1 EC FF FF .faraddr %111111111111111111101100 +0046EFr 1 ED FF FF .faraddr %111111111111111111101101 +0046F2r 1 EE FF FF .faraddr %111111111111111111101110 +0046F5r 1 EF FF FF .faraddr %111111111111111111101111 +0046F8r 1 F0 FF FF .faraddr %111111111111111111110000 +0046FBr 1 F1 FF FF .faraddr %111111111111111111110001 +0046FEr 1 F2 FF FF .faraddr %111111111111111111110010 +004701r 1 F3 FF FF .faraddr %111111111111111111110011 +004704r 1 F4 FF FF .faraddr %111111111111111111110100 +004707r 1 F5 FF FF .faraddr %111111111111111111110101 +00470Ar 1 F6 FF FF .faraddr %111111111111111111110110 +00470Dr 1 F7 FF FF .faraddr %111111111111111111110111 +004710r 1 F8 FF FF .faraddr %111111111111111111111000 +004713r 1 F9 FF FF .faraddr %111111111111111111111001 +004716r 1 FA FF FF .faraddr %111111111111111111111010 +004719r 1 FB FF FF .faraddr %111111111111111111111011 +00471Cr 1 FC FF FF .faraddr %111111111111111111111100 +00471Fr 1 FD FF FF .faraddr %111111111111111111111101 +004722r 1 FE FF FF .faraddr %111111111111111111111110 +004725r 1 FF FF FF .faraddr %111111111111111111111111 004728r 1 -004728r 1 ; binary values, full length -004728r 1 00 00 00 .faraddr %000000000000000000000000 -00472Br 1 01 00 00 .faraddr %000000000000000000000001 -00472Er 1 02 00 00 .faraddr %000000000000000000000010 -004731r 1 03 00 00 .faraddr %000000000000000000000011 -004734r 1 04 00 00 .faraddr %000000000000000000000100 -004737r 1 05 00 00 .faraddr %000000000000000000000101 -00473Ar 1 06 00 00 .faraddr %000000000000000000000110 -00473Dr 1 07 00 00 .faraddr %000000000000000000000111 -004740r 1 08 00 00 .faraddr %000000000000000000001000 -004743r 1 09 00 00 .faraddr %000000000000000000001001 -004746r 1 0A 00 00 .faraddr %000000000000000000001010 -004749r 1 0B 00 00 .faraddr %000000000000000000001011 -00474Cr 1 0C 00 00 .faraddr %000000000000000000001100 -00474Fr 1 0D 00 00 .faraddr %000000000000000000001101 -004752r 1 0E 00 00 .faraddr %000000000000000000001110 -004755r 1 0F 00 00 .faraddr %000000000000000000001111 -004758r 1 10 00 00 .faraddr %000000000000000000010000 -00475Br 1 11 00 00 .faraddr %000000000000000000010001 -00475Er 1 12 00 00 .faraddr %000000000000000000010010 -004761r 1 13 00 00 .faraddr %000000000000000000010011 -004764r 1 70 00 00 .faraddr %000000000000000001110000 -004767r 1 71 00 00 .faraddr %000000000000000001110001 -00476Ar 1 72 00 00 .faraddr %000000000000000001110010 -00476Dr 1 73 00 00 .faraddr %000000000000000001110011 -004770r 1 74 00 00 .faraddr %000000000000000001110100 -004773r 1 75 00 00 .faraddr %000000000000000001110101 -004776r 1 76 00 00 .faraddr %000000000000000001110110 -004779r 1 77 00 00 .faraddr %000000000000000001110111 -00477Cr 1 78 00 00 .faraddr %000000000000000001111000 -00477Fr 1 79 00 00 .faraddr %000000000000000001111001 -004782r 1 7A 00 00 .faraddr %000000000000000001111010 -004785r 1 7B 00 00 .faraddr %000000000000000001111011 -004788r 1 7C 00 00 .faraddr %000000000000000001111100 -00478Br 1 7D 00 00 .faraddr %000000000000000001111101 -00478Er 1 7E 00 00 .faraddr %000000000000000001111110 -004791r 1 7F 00 00 .faraddr %000000000000000001111111 -004794r 1 80 00 00 .faraddr %000000000000000010000000 -004797r 1 81 00 00 .faraddr %000000000000000010000001 -00479Ar 1 82 00 00 .faraddr %000000000000000010000010 -00479Dr 1 83 00 00 .faraddr %000000000000000010000011 -0047A0r 1 84 00 00 .faraddr %000000000000000010000100 -0047A3r 1 85 00 00 .faraddr %000000000000000010000101 -0047A6r 1 86 00 00 .faraddr %000000000000000010000110 -0047A9r 1 F0 00 00 .faraddr %000000000000000011110000 -0047ACr 1 F1 00 00 .faraddr %000000000000000011110001 -0047AFr 1 F2 00 00 .faraddr %000000000000000011110010 -0047B2r 1 F3 00 00 .faraddr %000000000000000011110011 -0047B5r 1 F4 00 00 .faraddr %000000000000000011110100 -0047B8r 1 F5 00 00 .faraddr %000000000000000011110101 -0047BBr 1 F6 00 00 .faraddr %000000000000000011110110 -0047BEr 1 F7 00 00 .faraddr %000000000000000011110111 -0047C1r 1 F8 00 00 .faraddr %000000000000000011111000 -0047C4r 1 F9 00 00 .faraddr %000000000000000011111001 -0047C7r 1 FA 00 00 .faraddr %000000000000000011111010 -0047CAr 1 FB 00 00 .faraddr %000000000000000011111011 -0047CDr 1 FC 00 00 .faraddr %000000000000000011111100 -0047D0r 1 FD 00 00 .faraddr %000000000000000011111101 -0047D3r 1 FE 00 00 .faraddr %000000000000000011111110 -0047D6r 1 FF 00 00 .faraddr %000000000000000011111111 -0047D9r 1 00 01 00 .faraddr %000000000000000100000000 -0047DCr 1 01 01 00 .faraddr %000000000000000100000001 -0047DFr 1 02 01 00 .faraddr %000000000000000100000010 -0047E2r 1 03 01 00 .faraddr %000000000000000100000011 -0047E5r 1 D2 0F 00 .faraddr %000000000000111111010010 -0047E8r 1 D3 0F 00 .faraddr %000000000000111111010011 -0047EBr 1 D4 0F 00 .faraddr %000000000000111111010100 -0047EEr 1 D5 0F 00 .faraddr %000000000000111111010101 -0047F1r 1 D6 0F 00 .faraddr %000000000000111111010110 -0047F4r 1 D7 0F 00 .faraddr %000000000000111111010111 -0047F7r 1 D8 0F 00 .faraddr %000000000000111111011000 -0047FAr 1 D9 0F 00 .faraddr %000000000000111111011001 -0047FDr 1 DA 0F 00 .faraddr %000000000000111111011010 -004800r 1 DB 0F 00 .faraddr %000000000000111111011011 -004803r 1 DC 0F 00 .faraddr %000000000000111111011100 -004806r 1 DD 0F 00 .faraddr %000000000000111111011101 -004809r 1 DE 0F 00 .faraddr %000000000000111111011110 -00480Cr 1 DF 0F 00 .faraddr %000000000000111111011111 -00480Fr 1 E0 0F 00 .faraddr %000000000000111111100000 -004812r 1 E1 0F 00 .faraddr %000000000000111111100001 -004815r 1 E2 0F 00 .faraddr %000000000000111111100010 -004818r 1 E3 0F 00 .faraddr %000000000000111111100011 -00481Br 1 E4 0F 00 .faraddr %000000000000111111100100 -00481Er 1 E5 0F 00 .faraddr %000000000000111111100101 -004821r 1 E6 0F 00 .faraddr %000000000000111111100110 -004824r 1 E7 0F 00 .faraddr %000000000000111111100111 -004827r 1 E8 0F 00 .faraddr %000000000000111111101000 -00482Ar 1 E9 0F 00 .faraddr %000000000000111111101001 -00482Dr 1 EA 0F 00 .faraddr %000000000000111111101010 -004830r 1 EB 0F 00 .faraddr %000000000000111111101011 -004833r 1 EC 0F 00 .faraddr %000000000000111111101100 -004836r 1 ED 0F 00 .faraddr %000000000000111111101101 -004839r 1 EE 0F 00 .faraddr %000000000000111111101110 -00483Cr 1 EF 0F 00 .faraddr %000000000000111111101111 -00483Fr 1 F0 0F 00 .faraddr %000000000000111111110000 -004842r 1 F1 0F 00 .faraddr %000000000000111111110001 -004845r 1 F2 0F 00 .faraddr %000000000000111111110010 -004848r 1 F3 0F 00 .faraddr %000000000000111111110011 -00484Br 1 F4 0F 00 .faraddr %000000000000111111110100 -00484Er 1 F5 0F 00 .faraddr %000000000000111111110101 -004851r 1 F6 0F 00 .faraddr %000000000000111111110110 -004854r 1 F7 0F 00 .faraddr %000000000000111111110111 -004857r 1 F8 0F 00 .faraddr %000000000000111111111000 -00485Ar 1 F9 0F 00 .faraddr %000000000000111111111001 -00485Dr 1 FA 0F 00 .faraddr %000000000000111111111010 -004860r 1 FB 0F 00 .faraddr %000000000000111111111011 -004863r 1 FC 0F 00 .faraddr %000000000000111111111100 -004866r 1 FD 0F 00 .faraddr %000000000000111111111101 -004869r 1 FE 0F 00 .faraddr %000000000000111111111110 -00486Cr 1 FF 0F 00 .faraddr %000000000000111111111111 -00486Fr 1 00 10 00 .faraddr %000000000001000000000000 -004872r 1 01 10 00 .faraddr %000000000001000000000001 -004875r 1 02 10 00 .faraddr %000000000001000000000010 -004878r 1 03 10 00 .faraddr %000000000001000000000011 -00487Br 1 04 10 00 .faraddr %000000000001000000000100 -00487Er 1 05 10 00 .faraddr %000000000001000000000101 -004881r 1 06 10 00 .faraddr %000000000001000000000110 -004884r 1 07 10 00 .faraddr %000000000001000000000111 -004887r 1 08 10 00 .faraddr %000000000001000000001000 -00488Ar 1 F0 7F 00 .faraddr %000000000111111111110000 -00488Dr 1 F1 7F 00 .faraddr %000000000111111111110001 -004890r 1 F2 7F 00 .faraddr %000000000111111111110010 -004893r 1 F3 7F 00 .faraddr %000000000111111111110011 -004896r 1 F4 7F 00 .faraddr %000000000111111111110100 -004899r 1 F5 7F 00 .faraddr %000000000111111111110101 -00489Cr 1 F6 7F 00 .faraddr %000000000111111111110110 -00489Fr 1 F7 7F 00 .faraddr %000000000111111111110111 -0048A2r 1 F8 7F 00 .faraddr %000000000111111111111000 -0048A5r 1 F9 7F 00 .faraddr %000000000111111111111001 -0048A8r 1 FA 7F 00 .faraddr %000000000111111111111010 -0048ABr 1 FB 7F 00 .faraddr %000000000111111111111011 -0048AEr 1 FC 7F 00 .faraddr %000000000111111111111100 -0048B1r 1 FD 7F 00 .faraddr %000000000111111111111101 -0048B4r 1 FE 7F 00 .faraddr %000000000111111111111110 -0048B7r 1 FF 7F 00 .faraddr %000000000111111111111111 -0048BAr 1 00 80 00 .faraddr %000000001000000000000000 -0048BDr 1 01 80 00 .faraddr %000000001000000000000001 -0048C0r 1 02 80 00 .faraddr %000000001000000000000010 -0048C3r 1 03 80 00 .faraddr %000000001000000000000011 -0048C6r 1 04 80 00 .faraddr %000000001000000000000100 -0048C9r 1 05 80 00 .faraddr %000000001000000000000101 -0048CCr 1 06 80 00 .faraddr %000000001000000000000110 -0048CFr 1 07 80 00 .faraddr %000000001000000000000111 -0048D2r 1 08 80 00 .faraddr %000000001000000000001000 -0048D5r 1 09 80 00 .faraddr %000000001000000000001001 -0048D8r 1 0A 80 00 .faraddr %000000001000000000001010 -0048DBr 1 0B 80 00 .faraddr %000000001000000000001011 -0048DEr 1 E1 9F 00 .faraddr %000000001001111111100001 -0048E1r 1 E2 9F 00 .faraddr %000000001001111111100010 -0048E4r 1 E3 9F 00 .faraddr %000000001001111111100011 -0048E7r 1 E4 9F 00 .faraddr %000000001001111111100100 -0048EAr 1 E5 9F 00 .faraddr %000000001001111111100101 -0048EDr 1 E6 9F 00 .faraddr %000000001001111111100110 -0048F0r 1 E7 9F 00 .faraddr %000000001001111111100111 -0048F3r 1 E8 9F 00 .faraddr %000000001001111111101000 -0048F6r 1 E9 9F 00 .faraddr %000000001001111111101001 -0048F9r 1 EA 9F 00 .faraddr %000000001001111111101010 -0048FCr 1 EB 9F 00 .faraddr %000000001001111111101011 -0048FFr 1 EC 9F 00 .faraddr %000000001001111111101100 -004902r 1 ED 9F 00 .faraddr %000000001001111111101101 -004905r 1 EE 9F 00 .faraddr %000000001001111111101110 -004908r 1 EF 9F 00 .faraddr %000000001001111111101111 -00490Br 1 F0 9F 00 .faraddr %000000001001111111110000 -00490Er 1 F1 9F 00 .faraddr %000000001001111111110001 -004911r 1 F2 9F 00 .faraddr %000000001001111111110010 -004914r 1 F3 9F 00 .faraddr %000000001001111111110011 -004917r 1 F4 9F 00 .faraddr %000000001001111111110100 -00491Ar 1 F5 9F 00 .faraddr %000000001001111111110101 -00491Dr 1 F6 9F 00 .faraddr %000000001001111111110110 -004920r 1 F7 9F 00 .faraddr %000000001001111111110111 -004923r 1 F8 9F 00 .faraddr %000000001001111111111000 -004926r 1 F9 9F 00 .faraddr %000000001001111111111001 -004929r 1 FA 9F 00 .faraddr %000000001001111111111010 -00492Cr 1 FB 9F 00 .faraddr %000000001001111111111011 -00492Fr 1 FC 9F 00 .faraddr %000000001001111111111100 -004932r 1 FD 9F 00 .faraddr %000000001001111111111101 -004935r 1 FE 9F 00 .faraddr %000000001001111111111110 -004938r 1 FF 9F 00 .faraddr %000000001001111111111111 -00493Br 1 00 A0 00 .faraddr %000000001010000000000000 -00493Er 1 01 A0 00 .faraddr %000000001010000000000001 -004941r 1 02 A0 00 .faraddr %000000001010000000000010 -004944r 1 03 A0 00 .faraddr %000000001010000000000011 -004947r 1 04 A0 00 .faraddr %000000001010000000000100 -00494Ar 1 05 A0 00 .faraddr %000000001010000000000101 -00494Dr 1 06 A0 00 .faraddr %000000001010000000000110 -004950r 1 07 A0 00 .faraddr %000000001010000000000111 -004953r 1 08 A0 00 .faraddr %000000001010000000001000 -004956r 1 09 A0 00 .faraddr %000000001010000000001001 -004959r 1 0A A0 00 .faraddr %000000001010000000001010 -00495Cr 1 0B A0 00 .faraddr %000000001010000000001011 -00495Fr 1 0C A0 00 .faraddr %000000001010000000001100 -004962r 1 0D A0 00 .faraddr %000000001010000000001101 -004965r 1 0E A0 00 .faraddr %000000001010000000001110 -004968r 1 0F A0 00 .faraddr %000000001010000000001111 -00496Br 1 E1 AF 00 .faraddr %000000001010111111100001 -00496Er 1 E2 AF 00 .faraddr %000000001010111111100010 -004971r 1 E3 AF 00 .faraddr %000000001010111111100011 -004974r 1 E4 AF 00 .faraddr %000000001010111111100100 -004977r 1 E5 AF 00 .faraddr %000000001010111111100101 -00497Ar 1 E6 AF 00 .faraddr %000000001010111111100110 -00497Dr 1 E7 AF 00 .faraddr %000000001010111111100111 -004980r 1 E8 AF 00 .faraddr %000000001010111111101000 -004983r 1 E9 AF 00 .faraddr %000000001010111111101001 -004986r 1 EA AF 00 .faraddr %000000001010111111101010 -004989r 1 EB AF 00 .faraddr %000000001010111111101011 -00498Cr 1 EC AF 00 .faraddr %000000001010111111101100 -00498Fr 1 ED AF 00 .faraddr %000000001010111111101101 -004992r 1 EE AF 00 .faraddr %000000001010111111101110 -004995r 1 EF AF 00 .faraddr %000000001010111111101111 -004998r 1 F0 AF 00 .faraddr %000000001010111111110000 -00499Br 1 F1 AF 00 .faraddr %000000001010111111110001 -00499Er 1 F2 AF 00 .faraddr %000000001010111111110010 -0049A1r 1 F3 AF 00 .faraddr %000000001010111111110011 -0049A4r 1 F4 AF 00 .faraddr %000000001010111111110100 -0049A7r 1 F5 AF 00 .faraddr %000000001010111111110101 -0049AAr 1 F6 AF 00 .faraddr %000000001010111111110110 -0049ADr 1 F7 AF 00 .faraddr %000000001010111111110111 -0049B0r 1 F8 AF 00 .faraddr %000000001010111111111000 -0049B3r 1 F9 AF 00 .faraddr %000000001010111111111001 -0049B6r 1 FA AF 00 .faraddr %000000001010111111111010 -0049B9r 1 FB AF 00 .faraddr %000000001010111111111011 -0049BCr 1 FC AF 00 .faraddr %000000001010111111111100 -0049BFr 1 FD AF 00 .faraddr %000000001010111111111101 -0049C2r 1 FE AF 00 .faraddr %000000001010111111111110 -0049C5r 1 FF AF 00 .faraddr %000000001010111111111111 -0049C8r 1 00 B0 00 .faraddr %000000001011000000000000 -0049CBr 1 01 B0 00 .faraddr %000000001011000000000001 -0049CEr 1 02 B0 00 .faraddr %000000001011000000000010 -0049D1r 1 03 B0 00 .faraddr %000000001011000000000011 -0049D4r 1 04 B0 00 .faraddr %000000001011000000000100 -0049D7r 1 05 B0 00 .faraddr %000000001011000000000101 -0049DAr 1 06 B0 00 .faraddr %000000001011000000000110 -0049DDr 1 07 B0 00 .faraddr %000000001011000000000111 -0049E0r 1 08 B0 00 .faraddr %000000001011000000001000 -0049E3r 1 09 B0 00 .faraddr %000000001011000000001001 -0049E6r 1 0A B0 00 .faraddr %000000001011000000001010 -0049E9r 1 0B B0 00 .faraddr %000000001011000000001011 -0049ECr 1 0C B0 00 .faraddr %000000001011000000001100 -0049EFr 1 0D B0 00 .faraddr %000000001011000000001101 -0049F2r 1 0E B0 00 .faraddr %000000001011000000001110 -0049F5r 1 0F B0 00 .faraddr %000000001011000000001111 -0049F8r 1 E1 FF 00 .faraddr %000000001111111111100001 -0049FBr 1 E2 FF 00 .faraddr %000000001111111111100010 -0049FEr 1 E3 FF 00 .faraddr %000000001111111111100011 -004A01r 1 E4 FF 00 .faraddr %000000001111111111100100 -004A04r 1 E5 FF 00 .faraddr %000000001111111111100101 -004A07r 1 E6 FF 00 .faraddr %000000001111111111100110 -004A0Ar 1 E7 FF 00 .faraddr %000000001111111111100111 -004A0Dr 1 E8 FF 00 .faraddr %000000001111111111101000 -004A10r 1 E9 FF 00 .faraddr %000000001111111111101001 -004A13r 1 EA FF 00 .faraddr %000000001111111111101010 -004A16r 1 EB FF 00 .faraddr %000000001111111111101011 -004A19r 1 EC FF 00 .faraddr %000000001111111111101100 -004A1Cr 1 ED FF 00 .faraddr %000000001111111111101101 -004A1Fr 1 EE FF 00 .faraddr %000000001111111111101110 -004A22r 1 EF FF 00 .faraddr %000000001111111111101111 -004A25r 1 F0 FF 00 .faraddr %000000001111111111110000 -004A28r 1 F1 FF 00 .faraddr %000000001111111111110001 -004A2Br 1 F2 FF 00 .faraddr %000000001111111111110010 -004A2Er 1 F3 FF 00 .faraddr %000000001111111111110011 -004A31r 1 F4 FF 00 .faraddr %000000001111111111110100 -004A34r 1 F5 FF 00 .faraddr %000000001111111111110101 -004A37r 1 F6 FF 00 .faraddr %000000001111111111110110 -004A3Ar 1 F7 FF 00 .faraddr %000000001111111111110111 -004A3Dr 1 F8 FF 00 .faraddr %000000001111111111111000 -004A40r 1 F9 FF 00 .faraddr %000000001111111111111001 -004A43r 1 FA FF 00 .faraddr %000000001111111111111010 -004A46r 1 FB FF 00 .faraddr %000000001111111111111011 -004A49r 1 FC FF 00 .faraddr %000000001111111111111100 -004A4Cr 1 FD FF 00 .faraddr %000000001111111111111101 -004A4Fr 1 FE FF 00 .faraddr %000000001111111111111110 -004A52r 1 FF FF 00 .faraddr %000000001111111111111111 -004A55r 1 00 00 01 .faraddr %000000010000000000000000 -004A58r 1 01 00 01 .faraddr %000000010000000000000001 -004A5Br 1 02 00 01 .faraddr %000000010000000000000010 -004A5Er 1 03 00 01 .faraddr %000000010000000000000011 -004A61r 1 04 00 01 .faraddr %000000010000000000000100 -004A64r 1 05 00 01 .faraddr %000000010000000000000101 -004A67r 1 06 00 01 .faraddr %000000010000000000000110 -004A6Ar 1 07 00 01 .faraddr %000000010000000000000111 -004A6Dr 1 08 00 01 .faraddr %000000010000000000001000 -004A70r 1 09 00 01 .faraddr %000000010000000000001001 -004A73r 1 0A 00 01 .faraddr %000000010000000000001010 -004A76r 1 0B 00 01 .faraddr %000000010000000000001011 -004A79r 1 0C 00 01 .faraddr %000000010000000000001100 -004A7Cr 1 0D 00 01 .faraddr %000000010000000000001101 -004A7Fr 1 0E 00 01 .faraddr %000000010000000000001110 -004A82r 1 0F 00 01 .faraddr %000000010000000000001111 -004A85r 1 E1 FF 10 .faraddr %000100001111111111100001 -004A88r 1 E2 FF 10 .faraddr %000100001111111111100010 -004A8Br 1 E3 FF 10 .faraddr %000100001111111111100011 -004A8Er 1 E4 FF 10 .faraddr %000100001111111111100100 -004A91r 1 E5 FF 10 .faraddr %000100001111111111100101 -004A94r 1 E6 FF 10 .faraddr %000100001111111111100110 -004A97r 1 E7 FF 10 .faraddr %000100001111111111100111 -004A9Ar 1 E8 FF 10 .faraddr %000100001111111111101000 -004A9Dr 1 E9 FF 10 .faraddr %000100001111111111101001 -004AA0r 1 EA FF 10 .faraddr %000100001111111111101010 -004AA3r 1 EB FF 10 .faraddr %000100001111111111101011 -004AA6r 1 EC FF 10 .faraddr %000100001111111111101100 -004AA9r 1 ED FF 10 .faraddr %000100001111111111101101 -004AACr 1 EE FF 10 .faraddr %000100001111111111101110 -004AAFr 1 EF FF 10 .faraddr %000100001111111111101111 -004AB2r 1 F0 FF 10 .faraddr %000100001111111111110000 -004AB5r 1 F1 FF 10 .faraddr %000100001111111111110001 -004AB8r 1 F2 FF 10 .faraddr %000100001111111111110010 -004ABBr 1 F3 FF 10 .faraddr %000100001111111111110011 -004ABEr 1 F4 FF 10 .faraddr %000100001111111111110100 -004AC1r 1 F5 FF 10 .faraddr %000100001111111111110101 -004AC4r 1 F6 FF 10 .faraddr %000100001111111111110110 -004AC7r 1 F7 FF 10 .faraddr %000100001111111111110111 -004ACAr 1 F8 FF 10 .faraddr %000100001111111111111000 -004ACDr 1 F9 FF 10 .faraddr %000100001111111111111001 -004AD0r 1 FA FF 10 .faraddr %000100001111111111111010 -004AD3r 1 FB FF 10 .faraddr %000100001111111111111011 -004AD6r 1 FC FF 10 .faraddr %000100001111111111111100 -004AD9r 1 FD FF 10 .faraddr %000100001111111111111101 -004ADCr 1 FE FF 10 .faraddr %000100001111111111111110 -004ADFr 1 FF FF 10 .faraddr %000100001111111111111111 -004AE2r 1 00 00 11 .faraddr %000100010000000000000000 -004AE5r 1 01 00 11 .faraddr %000100010000000000000001 -004AE8r 1 02 00 11 .faraddr %000100010000000000000010 -004AEBr 1 03 00 11 .faraddr %000100010000000000000011 -004AEEr 1 04 00 11 .faraddr %000100010000000000000100 -004AF1r 1 05 00 11 .faraddr %000100010000000000000101 -004AF4r 1 06 00 11 .faraddr %000100010000000000000110 -004AF7r 1 07 00 11 .faraddr %000100010000000000000111 -004AFAr 1 08 00 11 .faraddr %000100010000000000001000 -004AFDr 1 09 00 11 .faraddr %000100010000000000001001 -004B00r 1 0A 00 11 .faraddr %000100010000000000001010 -004B03r 1 0B 00 11 .faraddr %000100010000000000001011 -004B06r 1 0C 00 11 .faraddr %000100010000000000001100 -004B09r 1 0D 00 11 .faraddr %000100010000000000001101 -004B0Cr 1 0E 00 11 .faraddr %000100010000000000001110 -004B0Fr 1 0F 00 11 .faraddr %000100010000000000001111 -004B12r 1 E1 FF 20 .faraddr %001000001111111111100001 -004B15r 1 E2 FF 20 .faraddr %001000001111111111100010 -004B18r 1 E3 FF 20 .faraddr %001000001111111111100011 -004B1Br 1 E4 FF 20 .faraddr %001000001111111111100100 -004B1Er 1 E5 FF 20 .faraddr %001000001111111111100101 -004B21r 1 E6 FF 20 .faraddr %001000001111111111100110 -004B24r 1 E7 FF 20 .faraddr %001000001111111111100111 -004B27r 1 E8 FF 20 .faraddr %001000001111111111101000 -004B2Ar 1 E9 FF 20 .faraddr %001000001111111111101001 -004B2Dr 1 EA FF 20 .faraddr %001000001111111111101010 -004B30r 1 EB FF 20 .faraddr %001000001111111111101011 -004B33r 1 EC FF 20 .faraddr %001000001111111111101100 -004B36r 1 ED FF 20 .faraddr %001000001111111111101101 -004B39r 1 EE FF 20 .faraddr %001000001111111111101110 -004B3Cr 1 EF FF 20 .faraddr %001000001111111111101111 -004B3Fr 1 F0 FF 20 .faraddr %001000001111111111110000 -004B42r 1 F1 FF 20 .faraddr %001000001111111111110001 -004B45r 1 F2 FF 20 .faraddr %001000001111111111110010 -004B48r 1 F3 FF 20 .faraddr %001000001111111111110011 -004B4Br 1 F4 FF 20 .faraddr %001000001111111111110100 -004B4Er 1 F5 FF 20 .faraddr %001000001111111111110101 -004B51r 1 F6 FF 20 .faraddr %001000001111111111110110 -004B54r 1 F7 FF 20 .faraddr %001000001111111111110111 -004B57r 1 F8 FF 20 .faraddr %001000001111111111111000 -004B5Ar 1 F9 FF 20 .faraddr %001000001111111111111001 -004B5Dr 1 FA FF 20 .faraddr %001000001111111111111010 -004B60r 1 FB FF 20 .faraddr %001000001111111111111011 -004B63r 1 FC FF 20 .faraddr %001000001111111111111100 -004B66r 1 FD FF 20 .faraddr %001000001111111111111101 -004B69r 1 FE FF 20 .faraddr %001000001111111111111110 -004B6Cr 1 FF FF 20 .faraddr %001000001111111111111111 -004B6Fr 1 00 00 21 .faraddr %001000010000000000000000 -004B72r 1 01 00 21 .faraddr %001000010000000000000001 -004B75r 1 02 00 21 .faraddr %001000010000000000000010 -004B78r 1 03 00 21 .faraddr %001000010000000000000011 -004B7Br 1 04 00 21 .faraddr %001000010000000000000100 -004B7Er 1 05 00 21 .faraddr %001000010000000000000101 -004B81r 1 06 00 21 .faraddr %001000010000000000000110 -004B84r 1 07 00 21 .faraddr %001000010000000000000111 -004B87r 1 08 00 21 .faraddr %001000010000000000001000 -004B8Ar 1 09 00 21 .faraddr %001000010000000000001001 -004B8Dr 1 0A 00 21 .faraddr %001000010000000000001010 -004B90r 1 0B 00 21 .faraddr %001000010000000000001011 -004B93r 1 0C 00 21 .faraddr %001000010000000000001100 -004B96r 1 0D 00 21 .faraddr %001000010000000000001101 -004B99r 1 0E 00 21 .faraddr %001000010000000000001110 -004B9Cr 1 0F 00 21 .faraddr %001000010000000000001111 -004B9Fr 1 E1 FF 7F .faraddr %011111111111111111100001 -004BA2r 1 E2 FF 7F .faraddr %011111111111111111100010 -004BA5r 1 E3 FF 7F .faraddr %011111111111111111100011 -004BA8r 1 E4 FF 7F .faraddr %011111111111111111100100 -004BABr 1 E5 FF 7F .faraddr %011111111111111111100101 -004BAEr 1 E6 FF 7F .faraddr %011111111111111111100110 -004BB1r 1 E7 FF 7F .faraddr %011111111111111111100111 -004BB4r 1 E8 FF 7F .faraddr %011111111111111111101000 -004BB7r 1 E9 FF 7F .faraddr %011111111111111111101001 -004BBAr 1 EA FF 7F .faraddr %011111111111111111101010 -004BBDr 1 EB FF 7F .faraddr %011111111111111111101011 -004BC0r 1 EC FF 7F .faraddr %011111111111111111101100 -004BC3r 1 ED FF 7F .faraddr %011111111111111111101101 -004BC6r 1 EE FF 7F .faraddr %011111111111111111101110 -004BC9r 1 EF FF 7F .faraddr %011111111111111111101111 -004BCCr 1 F0 FF 7F .faraddr %011111111111111111110000 -004BCFr 1 F1 FF 7F .faraddr %011111111111111111110001 -004BD2r 1 F2 FF 7F .faraddr %011111111111111111110010 -004BD5r 1 F3 FF 7F .faraddr %011111111111111111110011 -004BD8r 1 F4 FF 7F .faraddr %011111111111111111110100 -004BDBr 1 F5 FF 7F .faraddr %011111111111111111110101 -004BDEr 1 F6 FF 7F .faraddr %011111111111111111110110 -004BE1r 1 F7 FF 7F .faraddr %011111111111111111110111 -004BE4r 1 F8 FF 7F .faraddr %011111111111111111111000 -004BE7r 1 F9 FF 7F .faraddr %011111111111111111111001 -004BEAr 1 FA FF 7F .faraddr %011111111111111111111010 -004BEDr 1 FB FF 7F .faraddr %011111111111111111111011 -004BF0r 1 FC FF 7F .faraddr %011111111111111111111100 -004BF3r 1 FD FF 7F .faraddr %011111111111111111111101 -004BF6r 1 FE FF 7F .faraddr %011111111111111111111110 -004BF9r 1 FF FF 7F .faraddr %011111111111111111111111 -004BFCr 1 00 00 80 .faraddr %100000000000000000000000 -004BFFr 1 01 00 80 .faraddr %100000000000000000000001 -004C02r 1 02 00 80 .faraddr %100000000000000000000010 -004C05r 1 03 00 80 .faraddr %100000000000000000000011 -004C08r 1 04 00 80 .faraddr %100000000000000000000100 -004C0Br 1 05 00 80 .faraddr %100000000000000000000101 -004C0Er 1 06 00 80 .faraddr %100000000000000000000110 -004C11r 1 07 00 80 .faraddr %100000000000000000000111 -004C14r 1 08 00 80 .faraddr %100000000000000000001000 -004C17r 1 09 00 80 .faraddr %100000000000000000001001 -004C1Ar 1 0A 00 80 .faraddr %100000000000000000001010 -004C1Dr 1 0B 00 80 .faraddr %100000000000000000001011 -004C20r 1 0C 00 80 .faraddr %100000000000000000001100 -004C23r 1 0D 00 80 .faraddr %100000000000000000001101 -004C26r 1 0E 00 80 .faraddr %100000000000000000001110 -004C29r 1 0F 00 80 .faraddr %100000000000000000001111 -004C2Cr 1 E1 FF 9F .faraddr %100111111111111111100001 -004C2Fr 1 E2 FF 9F .faraddr %100111111111111111100010 -004C32r 1 E3 FF 9F .faraddr %100111111111111111100011 -004C35r 1 E4 FF 9F .faraddr %100111111111111111100100 -004C38r 1 E5 FF 9F .faraddr %100111111111111111100101 -004C3Br 1 E6 FF 9F .faraddr %100111111111111111100110 -004C3Er 1 E7 FF 9F .faraddr %100111111111111111100111 -004C41r 1 E8 FF 9F .faraddr %100111111111111111101000 -004C44r 1 E9 FF 9F .faraddr %100111111111111111101001 -004C47r 1 EA FF 9F .faraddr %100111111111111111101010 -004C4Ar 1 EB FF 9F .faraddr %100111111111111111101011 -004C4Dr 1 EC FF 9F .faraddr %100111111111111111101100 -004C50r 1 ED FF 9F .faraddr %100111111111111111101101 -004C53r 1 EE FF 9F .faraddr %100111111111111111101110 -004C56r 1 EF FF 9F .faraddr %100111111111111111101111 -004C59r 1 F0 FF 9F .faraddr %100111111111111111110000 -004C5Cr 1 F1 FF 9F .faraddr %100111111111111111110001 -004C5Fr 1 F2 FF 9F .faraddr %100111111111111111110010 -004C62r 1 F3 FF 9F .faraddr %100111111111111111110011 -004C65r 1 F4 FF 9F .faraddr %100111111111111111110100 -004C68r 1 F5 FF 9F .faraddr %100111111111111111110101 -004C6Br 1 F6 FF 9F .faraddr %100111111111111111110110 -004C6Er 1 F7 FF 9F .faraddr %100111111111111111110111 -004C71r 1 F8 FF 9F .faraddr %100111111111111111111000 -004C74r 1 F9 FF 9F .faraddr %100111111111111111111001 -004C77r 1 FA FF 9F .faraddr %100111111111111111111010 -004C7Ar 1 FB FF 9F .faraddr %100111111111111111111011 -004C7Dr 1 FC FF 9F .faraddr %100111111111111111111100 -004C80r 1 FD FF 9F .faraddr %100111111111111111111101 -004C83r 1 FE FF 9F .faraddr %100111111111111111111110 -004C86r 1 FF FF 9F .faraddr %100111111111111111111111 -004C89r 1 00 00 A0 .faraddr %101000000000000000000000 -004C8Cr 1 01 00 A0 .faraddr %101000000000000000000001 -004C8Fr 1 02 00 A0 .faraddr %101000000000000000000010 -004C92r 1 03 00 A0 .faraddr %101000000000000000000011 -004C95r 1 04 00 A0 .faraddr %101000000000000000000100 -004C98r 1 05 00 A0 .faraddr %101000000000000000000101 -004C9Br 1 06 00 A0 .faraddr %101000000000000000000110 -004C9Er 1 07 00 A0 .faraddr %101000000000000000000111 -004CA1r 1 08 00 A0 .faraddr %101000000000000000001000 -004CA4r 1 09 00 A0 .faraddr %101000000000000000001001 -004CA7r 1 0A 00 A0 .faraddr %101000000000000000001010 -004CAAr 1 0B 00 A0 .faraddr %101000000000000000001011 -004CADr 1 0C 00 A0 .faraddr %101000000000000000001100 -004CB0r 1 0D 00 A0 .faraddr %101000000000000000001101 -004CB3r 1 0E 00 A0 .faraddr %101000000000000000001110 -004CB6r 1 0F 00 A0 .faraddr %101000000000000000001111 -004CB9r 1 E1 FF FF .faraddr %111111111111111111100001 -004CBCr 1 E2 FF FF .faraddr %111111111111111111100010 -004CBFr 1 E3 FF FF .faraddr %111111111111111111100011 -004CC2r 1 E4 FF FF .faraddr %111111111111111111100100 -004CC5r 1 E5 FF FF .faraddr %111111111111111111100101 -004CC8r 1 E6 FF FF .faraddr %111111111111111111100110 -004CCBr 1 E7 FF FF .faraddr %111111111111111111100111 -004CCEr 1 E8 FF FF .faraddr %111111111111111111101000 -004CD1r 1 E9 FF FF .faraddr %111111111111111111101001 -004CD4r 1 EA FF FF .faraddr %111111111111111111101010 -004CD7r 1 EB FF FF .faraddr %111111111111111111101011 -004CDAr 1 EC FF FF .faraddr %111111111111111111101100 -004CDDr 1 ED FF FF .faraddr %111111111111111111101101 -004CE0r 1 EE FF FF .faraddr %111111111111111111101110 -004CE3r 1 EF FF FF .faraddr %111111111111111111101111 -004CE6r 1 F0 FF FF .faraddr %111111111111111111110000 -004CE9r 1 F1 FF FF .faraddr %111111111111111111110001 -004CECr 1 F2 FF FF .faraddr %111111111111111111110010 -004CEFr 1 F3 FF FF .faraddr %111111111111111111110011 -004CF2r 1 F4 FF FF .faraddr %111111111111111111110100 -004CF5r 1 F5 FF FF .faraddr %111111111111111111110101 -004CF8r 1 F6 FF FF .faraddr %111111111111111111110110 -004CFBr 1 F7 FF FF .faraddr %111111111111111111110111 -004CFEr 1 F8 FF FF .faraddr %111111111111111111111000 -004D01r 1 F9 FF FF .faraddr %111111111111111111111001 -004D04r 1 FA FF FF .faraddr %111111111111111111111010 -004D07r 1 FB FF FF .faraddr %111111111111111111111011 -004D0Ar 1 FC FF FF .faraddr %111111111111111111111100 -004D0Dr 1 FD FF FF .faraddr %111111111111111111111101 -004D10r 1 FE FF FF .faraddr %111111111111111111111110 -004D13r 1 FF FF FF .faraddr %111111111111111111111111 +004728r 1 ; binary values, full length +004728r 1 00 00 00 .faraddr %000000000000000000000000 +00472Br 1 01 00 00 .faraddr %000000000000000000000001 +00472Er 1 02 00 00 .faraddr %000000000000000000000010 +004731r 1 03 00 00 .faraddr %000000000000000000000011 +004734r 1 04 00 00 .faraddr %000000000000000000000100 +004737r 1 05 00 00 .faraddr %000000000000000000000101 +00473Ar 1 06 00 00 .faraddr %000000000000000000000110 +00473Dr 1 07 00 00 .faraddr %000000000000000000000111 +004740r 1 08 00 00 .faraddr %000000000000000000001000 +004743r 1 09 00 00 .faraddr %000000000000000000001001 +004746r 1 0A 00 00 .faraddr %000000000000000000001010 +004749r 1 0B 00 00 .faraddr %000000000000000000001011 +00474Cr 1 0C 00 00 .faraddr %000000000000000000001100 +00474Fr 1 0D 00 00 .faraddr %000000000000000000001101 +004752r 1 0E 00 00 .faraddr %000000000000000000001110 +004755r 1 0F 00 00 .faraddr %000000000000000000001111 +004758r 1 10 00 00 .faraddr %000000000000000000010000 +00475Br 1 11 00 00 .faraddr %000000000000000000010001 +00475Er 1 12 00 00 .faraddr %000000000000000000010010 +004761r 1 13 00 00 .faraddr %000000000000000000010011 +004764r 1 70 00 00 .faraddr %000000000000000001110000 +004767r 1 71 00 00 .faraddr %000000000000000001110001 +00476Ar 1 72 00 00 .faraddr %000000000000000001110010 +00476Dr 1 73 00 00 .faraddr %000000000000000001110011 +004770r 1 74 00 00 .faraddr %000000000000000001110100 +004773r 1 75 00 00 .faraddr %000000000000000001110101 +004776r 1 76 00 00 .faraddr %000000000000000001110110 +004779r 1 77 00 00 .faraddr %000000000000000001110111 +00477Cr 1 78 00 00 .faraddr %000000000000000001111000 +00477Fr 1 79 00 00 .faraddr %000000000000000001111001 +004782r 1 7A 00 00 .faraddr %000000000000000001111010 +004785r 1 7B 00 00 .faraddr %000000000000000001111011 +004788r 1 7C 00 00 .faraddr %000000000000000001111100 +00478Br 1 7D 00 00 .faraddr %000000000000000001111101 +00478Er 1 7E 00 00 .faraddr %000000000000000001111110 +004791r 1 7F 00 00 .faraddr %000000000000000001111111 +004794r 1 80 00 00 .faraddr %000000000000000010000000 +004797r 1 81 00 00 .faraddr %000000000000000010000001 +00479Ar 1 82 00 00 .faraddr %000000000000000010000010 +00479Dr 1 83 00 00 .faraddr %000000000000000010000011 +0047A0r 1 84 00 00 .faraddr %000000000000000010000100 +0047A3r 1 85 00 00 .faraddr %000000000000000010000101 +0047A6r 1 86 00 00 .faraddr %000000000000000010000110 +0047A9r 1 F0 00 00 .faraddr %000000000000000011110000 +0047ACr 1 F1 00 00 .faraddr %000000000000000011110001 +0047AFr 1 F2 00 00 .faraddr %000000000000000011110010 +0047B2r 1 F3 00 00 .faraddr %000000000000000011110011 +0047B5r 1 F4 00 00 .faraddr %000000000000000011110100 +0047B8r 1 F5 00 00 .faraddr %000000000000000011110101 +0047BBr 1 F6 00 00 .faraddr %000000000000000011110110 +0047BEr 1 F7 00 00 .faraddr %000000000000000011110111 +0047C1r 1 F8 00 00 .faraddr %000000000000000011111000 +0047C4r 1 F9 00 00 .faraddr %000000000000000011111001 +0047C7r 1 FA 00 00 .faraddr %000000000000000011111010 +0047CAr 1 FB 00 00 .faraddr %000000000000000011111011 +0047CDr 1 FC 00 00 .faraddr %000000000000000011111100 +0047D0r 1 FD 00 00 .faraddr %000000000000000011111101 +0047D3r 1 FE 00 00 .faraddr %000000000000000011111110 +0047D6r 1 FF 00 00 .faraddr %000000000000000011111111 +0047D9r 1 00 01 00 .faraddr %000000000000000100000000 +0047DCr 1 01 01 00 .faraddr %000000000000000100000001 +0047DFr 1 02 01 00 .faraddr %000000000000000100000010 +0047E2r 1 03 01 00 .faraddr %000000000000000100000011 +0047E5r 1 D2 0F 00 .faraddr %000000000000111111010010 +0047E8r 1 D3 0F 00 .faraddr %000000000000111111010011 +0047EBr 1 D4 0F 00 .faraddr %000000000000111111010100 +0047EEr 1 D5 0F 00 .faraddr %000000000000111111010101 +0047F1r 1 D6 0F 00 .faraddr %000000000000111111010110 +0047F4r 1 D7 0F 00 .faraddr %000000000000111111010111 +0047F7r 1 D8 0F 00 .faraddr %000000000000111111011000 +0047FAr 1 D9 0F 00 .faraddr %000000000000111111011001 +0047FDr 1 DA 0F 00 .faraddr %000000000000111111011010 +004800r 1 DB 0F 00 .faraddr %000000000000111111011011 +004803r 1 DC 0F 00 .faraddr %000000000000111111011100 +004806r 1 DD 0F 00 .faraddr %000000000000111111011101 +004809r 1 DE 0F 00 .faraddr %000000000000111111011110 +00480Cr 1 DF 0F 00 .faraddr %000000000000111111011111 +00480Fr 1 E0 0F 00 .faraddr %000000000000111111100000 +004812r 1 E1 0F 00 .faraddr %000000000000111111100001 +004815r 1 E2 0F 00 .faraddr %000000000000111111100010 +004818r 1 E3 0F 00 .faraddr %000000000000111111100011 +00481Br 1 E4 0F 00 .faraddr %000000000000111111100100 +00481Er 1 E5 0F 00 .faraddr %000000000000111111100101 +004821r 1 E6 0F 00 .faraddr %000000000000111111100110 +004824r 1 E7 0F 00 .faraddr %000000000000111111100111 +004827r 1 E8 0F 00 .faraddr %000000000000111111101000 +00482Ar 1 E9 0F 00 .faraddr %000000000000111111101001 +00482Dr 1 EA 0F 00 .faraddr %000000000000111111101010 +004830r 1 EB 0F 00 .faraddr %000000000000111111101011 +004833r 1 EC 0F 00 .faraddr %000000000000111111101100 +004836r 1 ED 0F 00 .faraddr %000000000000111111101101 +004839r 1 EE 0F 00 .faraddr %000000000000111111101110 +00483Cr 1 EF 0F 00 .faraddr %000000000000111111101111 +00483Fr 1 F0 0F 00 .faraddr %000000000000111111110000 +004842r 1 F1 0F 00 .faraddr %000000000000111111110001 +004845r 1 F2 0F 00 .faraddr %000000000000111111110010 +004848r 1 F3 0F 00 .faraddr %000000000000111111110011 +00484Br 1 F4 0F 00 .faraddr %000000000000111111110100 +00484Er 1 F5 0F 00 .faraddr %000000000000111111110101 +004851r 1 F6 0F 00 .faraddr %000000000000111111110110 +004854r 1 F7 0F 00 .faraddr %000000000000111111110111 +004857r 1 F8 0F 00 .faraddr %000000000000111111111000 +00485Ar 1 F9 0F 00 .faraddr %000000000000111111111001 +00485Dr 1 FA 0F 00 .faraddr %000000000000111111111010 +004860r 1 FB 0F 00 .faraddr %000000000000111111111011 +004863r 1 FC 0F 00 .faraddr %000000000000111111111100 +004866r 1 FD 0F 00 .faraddr %000000000000111111111101 +004869r 1 FE 0F 00 .faraddr %000000000000111111111110 +00486Cr 1 FF 0F 00 .faraddr %000000000000111111111111 +00486Fr 1 00 10 00 .faraddr %000000000001000000000000 +004872r 1 01 10 00 .faraddr %000000000001000000000001 +004875r 1 02 10 00 .faraddr %000000000001000000000010 +004878r 1 03 10 00 .faraddr %000000000001000000000011 +00487Br 1 04 10 00 .faraddr %000000000001000000000100 +00487Er 1 05 10 00 .faraddr %000000000001000000000101 +004881r 1 06 10 00 .faraddr %000000000001000000000110 +004884r 1 07 10 00 .faraddr %000000000001000000000111 +004887r 1 08 10 00 .faraddr %000000000001000000001000 +00488Ar 1 F0 7F 00 .faraddr %000000000111111111110000 +00488Dr 1 F1 7F 00 .faraddr %000000000111111111110001 +004890r 1 F2 7F 00 .faraddr %000000000111111111110010 +004893r 1 F3 7F 00 .faraddr %000000000111111111110011 +004896r 1 F4 7F 00 .faraddr %000000000111111111110100 +004899r 1 F5 7F 00 .faraddr %000000000111111111110101 +00489Cr 1 F6 7F 00 .faraddr %000000000111111111110110 +00489Fr 1 F7 7F 00 .faraddr %000000000111111111110111 +0048A2r 1 F8 7F 00 .faraddr %000000000111111111111000 +0048A5r 1 F9 7F 00 .faraddr %000000000111111111111001 +0048A8r 1 FA 7F 00 .faraddr %000000000111111111111010 +0048ABr 1 FB 7F 00 .faraddr %000000000111111111111011 +0048AEr 1 FC 7F 00 .faraddr %000000000111111111111100 +0048B1r 1 FD 7F 00 .faraddr %000000000111111111111101 +0048B4r 1 FE 7F 00 .faraddr %000000000111111111111110 +0048B7r 1 FF 7F 00 .faraddr %000000000111111111111111 +0048BAr 1 00 80 00 .faraddr %000000001000000000000000 +0048BDr 1 01 80 00 .faraddr %000000001000000000000001 +0048C0r 1 02 80 00 .faraddr %000000001000000000000010 +0048C3r 1 03 80 00 .faraddr %000000001000000000000011 +0048C6r 1 04 80 00 .faraddr %000000001000000000000100 +0048C9r 1 05 80 00 .faraddr %000000001000000000000101 +0048CCr 1 06 80 00 .faraddr %000000001000000000000110 +0048CFr 1 07 80 00 .faraddr %000000001000000000000111 +0048D2r 1 08 80 00 .faraddr %000000001000000000001000 +0048D5r 1 09 80 00 .faraddr %000000001000000000001001 +0048D8r 1 0A 80 00 .faraddr %000000001000000000001010 +0048DBr 1 0B 80 00 .faraddr %000000001000000000001011 +0048DEr 1 E1 9F 00 .faraddr %000000001001111111100001 +0048E1r 1 E2 9F 00 .faraddr %000000001001111111100010 +0048E4r 1 E3 9F 00 .faraddr %000000001001111111100011 +0048E7r 1 E4 9F 00 .faraddr %000000001001111111100100 +0048EAr 1 E5 9F 00 .faraddr %000000001001111111100101 +0048EDr 1 E6 9F 00 .faraddr %000000001001111111100110 +0048F0r 1 E7 9F 00 .faraddr %000000001001111111100111 +0048F3r 1 E8 9F 00 .faraddr %000000001001111111101000 +0048F6r 1 E9 9F 00 .faraddr %000000001001111111101001 +0048F9r 1 EA 9F 00 .faraddr %000000001001111111101010 +0048FCr 1 EB 9F 00 .faraddr %000000001001111111101011 +0048FFr 1 EC 9F 00 .faraddr %000000001001111111101100 +004902r 1 ED 9F 00 .faraddr %000000001001111111101101 +004905r 1 EE 9F 00 .faraddr %000000001001111111101110 +004908r 1 EF 9F 00 .faraddr %000000001001111111101111 +00490Br 1 F0 9F 00 .faraddr %000000001001111111110000 +00490Er 1 F1 9F 00 .faraddr %000000001001111111110001 +004911r 1 F2 9F 00 .faraddr %000000001001111111110010 +004914r 1 F3 9F 00 .faraddr %000000001001111111110011 +004917r 1 F4 9F 00 .faraddr %000000001001111111110100 +00491Ar 1 F5 9F 00 .faraddr %000000001001111111110101 +00491Dr 1 F6 9F 00 .faraddr %000000001001111111110110 +004920r 1 F7 9F 00 .faraddr %000000001001111111110111 +004923r 1 F8 9F 00 .faraddr %000000001001111111111000 +004926r 1 F9 9F 00 .faraddr %000000001001111111111001 +004929r 1 FA 9F 00 .faraddr %000000001001111111111010 +00492Cr 1 FB 9F 00 .faraddr %000000001001111111111011 +00492Fr 1 FC 9F 00 .faraddr %000000001001111111111100 +004932r 1 FD 9F 00 .faraddr %000000001001111111111101 +004935r 1 FE 9F 00 .faraddr %000000001001111111111110 +004938r 1 FF 9F 00 .faraddr %000000001001111111111111 +00493Br 1 00 A0 00 .faraddr %000000001010000000000000 +00493Er 1 01 A0 00 .faraddr %000000001010000000000001 +004941r 1 02 A0 00 .faraddr %000000001010000000000010 +004944r 1 03 A0 00 .faraddr %000000001010000000000011 +004947r 1 04 A0 00 .faraddr %000000001010000000000100 +00494Ar 1 05 A0 00 .faraddr %000000001010000000000101 +00494Dr 1 06 A0 00 .faraddr %000000001010000000000110 +004950r 1 07 A0 00 .faraddr %000000001010000000000111 +004953r 1 08 A0 00 .faraddr %000000001010000000001000 +004956r 1 09 A0 00 .faraddr %000000001010000000001001 +004959r 1 0A A0 00 .faraddr %000000001010000000001010 +00495Cr 1 0B A0 00 .faraddr %000000001010000000001011 +00495Fr 1 0C A0 00 .faraddr %000000001010000000001100 +004962r 1 0D A0 00 .faraddr %000000001010000000001101 +004965r 1 0E A0 00 .faraddr %000000001010000000001110 +004968r 1 0F A0 00 .faraddr %000000001010000000001111 +00496Br 1 E1 AF 00 .faraddr %000000001010111111100001 +00496Er 1 E2 AF 00 .faraddr %000000001010111111100010 +004971r 1 E3 AF 00 .faraddr %000000001010111111100011 +004974r 1 E4 AF 00 .faraddr %000000001010111111100100 +004977r 1 E5 AF 00 .faraddr %000000001010111111100101 +00497Ar 1 E6 AF 00 .faraddr %000000001010111111100110 +00497Dr 1 E7 AF 00 .faraddr %000000001010111111100111 +004980r 1 E8 AF 00 .faraddr %000000001010111111101000 +004983r 1 E9 AF 00 .faraddr %000000001010111111101001 +004986r 1 EA AF 00 .faraddr %000000001010111111101010 +004989r 1 EB AF 00 .faraddr %000000001010111111101011 +00498Cr 1 EC AF 00 .faraddr %000000001010111111101100 +00498Fr 1 ED AF 00 .faraddr %000000001010111111101101 +004992r 1 EE AF 00 .faraddr %000000001010111111101110 +004995r 1 EF AF 00 .faraddr %000000001010111111101111 +004998r 1 F0 AF 00 .faraddr %000000001010111111110000 +00499Br 1 F1 AF 00 .faraddr %000000001010111111110001 +00499Er 1 F2 AF 00 .faraddr %000000001010111111110010 +0049A1r 1 F3 AF 00 .faraddr %000000001010111111110011 +0049A4r 1 F4 AF 00 .faraddr %000000001010111111110100 +0049A7r 1 F5 AF 00 .faraddr %000000001010111111110101 +0049AAr 1 F6 AF 00 .faraddr %000000001010111111110110 +0049ADr 1 F7 AF 00 .faraddr %000000001010111111110111 +0049B0r 1 F8 AF 00 .faraddr %000000001010111111111000 +0049B3r 1 F9 AF 00 .faraddr %000000001010111111111001 +0049B6r 1 FA AF 00 .faraddr %000000001010111111111010 +0049B9r 1 FB AF 00 .faraddr %000000001010111111111011 +0049BCr 1 FC AF 00 .faraddr %000000001010111111111100 +0049BFr 1 FD AF 00 .faraddr %000000001010111111111101 +0049C2r 1 FE AF 00 .faraddr %000000001010111111111110 +0049C5r 1 FF AF 00 .faraddr %000000001010111111111111 +0049C8r 1 00 B0 00 .faraddr %000000001011000000000000 +0049CBr 1 01 B0 00 .faraddr %000000001011000000000001 +0049CEr 1 02 B0 00 .faraddr %000000001011000000000010 +0049D1r 1 03 B0 00 .faraddr %000000001011000000000011 +0049D4r 1 04 B0 00 .faraddr %000000001011000000000100 +0049D7r 1 05 B0 00 .faraddr %000000001011000000000101 +0049DAr 1 06 B0 00 .faraddr %000000001011000000000110 +0049DDr 1 07 B0 00 .faraddr %000000001011000000000111 +0049E0r 1 08 B0 00 .faraddr %000000001011000000001000 +0049E3r 1 09 B0 00 .faraddr %000000001011000000001001 +0049E6r 1 0A B0 00 .faraddr %000000001011000000001010 +0049E9r 1 0B B0 00 .faraddr %000000001011000000001011 +0049ECr 1 0C B0 00 .faraddr %000000001011000000001100 +0049EFr 1 0D B0 00 .faraddr %000000001011000000001101 +0049F2r 1 0E B0 00 .faraddr %000000001011000000001110 +0049F5r 1 0F B0 00 .faraddr %000000001011000000001111 +0049F8r 1 E1 FF 00 .faraddr %000000001111111111100001 +0049FBr 1 E2 FF 00 .faraddr %000000001111111111100010 +0049FEr 1 E3 FF 00 .faraddr %000000001111111111100011 +004A01r 1 E4 FF 00 .faraddr %000000001111111111100100 +004A04r 1 E5 FF 00 .faraddr %000000001111111111100101 +004A07r 1 E6 FF 00 .faraddr %000000001111111111100110 +004A0Ar 1 E7 FF 00 .faraddr %000000001111111111100111 +004A0Dr 1 E8 FF 00 .faraddr %000000001111111111101000 +004A10r 1 E9 FF 00 .faraddr %000000001111111111101001 +004A13r 1 EA FF 00 .faraddr %000000001111111111101010 +004A16r 1 EB FF 00 .faraddr %000000001111111111101011 +004A19r 1 EC FF 00 .faraddr %000000001111111111101100 +004A1Cr 1 ED FF 00 .faraddr %000000001111111111101101 +004A1Fr 1 EE FF 00 .faraddr %000000001111111111101110 +004A22r 1 EF FF 00 .faraddr %000000001111111111101111 +004A25r 1 F0 FF 00 .faraddr %000000001111111111110000 +004A28r 1 F1 FF 00 .faraddr %000000001111111111110001 +004A2Br 1 F2 FF 00 .faraddr %000000001111111111110010 +004A2Er 1 F3 FF 00 .faraddr %000000001111111111110011 +004A31r 1 F4 FF 00 .faraddr %000000001111111111110100 +004A34r 1 F5 FF 00 .faraddr %000000001111111111110101 +004A37r 1 F6 FF 00 .faraddr %000000001111111111110110 +004A3Ar 1 F7 FF 00 .faraddr %000000001111111111110111 +004A3Dr 1 F8 FF 00 .faraddr %000000001111111111111000 +004A40r 1 F9 FF 00 .faraddr %000000001111111111111001 +004A43r 1 FA FF 00 .faraddr %000000001111111111111010 +004A46r 1 FB FF 00 .faraddr %000000001111111111111011 +004A49r 1 FC FF 00 .faraddr %000000001111111111111100 +004A4Cr 1 FD FF 00 .faraddr %000000001111111111111101 +004A4Fr 1 FE FF 00 .faraddr %000000001111111111111110 +004A52r 1 FF FF 00 .faraddr %000000001111111111111111 +004A55r 1 00 00 01 .faraddr %000000010000000000000000 +004A58r 1 01 00 01 .faraddr %000000010000000000000001 +004A5Br 1 02 00 01 .faraddr %000000010000000000000010 +004A5Er 1 03 00 01 .faraddr %000000010000000000000011 +004A61r 1 04 00 01 .faraddr %000000010000000000000100 +004A64r 1 05 00 01 .faraddr %000000010000000000000101 +004A67r 1 06 00 01 .faraddr %000000010000000000000110 +004A6Ar 1 07 00 01 .faraddr %000000010000000000000111 +004A6Dr 1 08 00 01 .faraddr %000000010000000000001000 +004A70r 1 09 00 01 .faraddr %000000010000000000001001 +004A73r 1 0A 00 01 .faraddr %000000010000000000001010 +004A76r 1 0B 00 01 .faraddr %000000010000000000001011 +004A79r 1 0C 00 01 .faraddr %000000010000000000001100 +004A7Cr 1 0D 00 01 .faraddr %000000010000000000001101 +004A7Fr 1 0E 00 01 .faraddr %000000010000000000001110 +004A82r 1 0F 00 01 .faraddr %000000010000000000001111 +004A85r 1 E1 FF 10 .faraddr %000100001111111111100001 +004A88r 1 E2 FF 10 .faraddr %000100001111111111100010 +004A8Br 1 E3 FF 10 .faraddr %000100001111111111100011 +004A8Er 1 E4 FF 10 .faraddr %000100001111111111100100 +004A91r 1 E5 FF 10 .faraddr %000100001111111111100101 +004A94r 1 E6 FF 10 .faraddr %000100001111111111100110 +004A97r 1 E7 FF 10 .faraddr %000100001111111111100111 +004A9Ar 1 E8 FF 10 .faraddr %000100001111111111101000 +004A9Dr 1 E9 FF 10 .faraddr %000100001111111111101001 +004AA0r 1 EA FF 10 .faraddr %000100001111111111101010 +004AA3r 1 EB FF 10 .faraddr %000100001111111111101011 +004AA6r 1 EC FF 10 .faraddr %000100001111111111101100 +004AA9r 1 ED FF 10 .faraddr %000100001111111111101101 +004AACr 1 EE FF 10 .faraddr %000100001111111111101110 +004AAFr 1 EF FF 10 .faraddr %000100001111111111101111 +004AB2r 1 F0 FF 10 .faraddr %000100001111111111110000 +004AB5r 1 F1 FF 10 .faraddr %000100001111111111110001 +004AB8r 1 F2 FF 10 .faraddr %000100001111111111110010 +004ABBr 1 F3 FF 10 .faraddr %000100001111111111110011 +004ABEr 1 F4 FF 10 .faraddr %000100001111111111110100 +004AC1r 1 F5 FF 10 .faraddr %000100001111111111110101 +004AC4r 1 F6 FF 10 .faraddr %000100001111111111110110 +004AC7r 1 F7 FF 10 .faraddr %000100001111111111110111 +004ACAr 1 F8 FF 10 .faraddr %000100001111111111111000 +004ACDr 1 F9 FF 10 .faraddr %000100001111111111111001 +004AD0r 1 FA FF 10 .faraddr %000100001111111111111010 +004AD3r 1 FB FF 10 .faraddr %000100001111111111111011 +004AD6r 1 FC FF 10 .faraddr %000100001111111111111100 +004AD9r 1 FD FF 10 .faraddr %000100001111111111111101 +004ADCr 1 FE FF 10 .faraddr %000100001111111111111110 +004ADFr 1 FF FF 10 .faraddr %000100001111111111111111 +004AE2r 1 00 00 11 .faraddr %000100010000000000000000 +004AE5r 1 01 00 11 .faraddr %000100010000000000000001 +004AE8r 1 02 00 11 .faraddr %000100010000000000000010 +004AEBr 1 03 00 11 .faraddr %000100010000000000000011 +004AEEr 1 04 00 11 .faraddr %000100010000000000000100 +004AF1r 1 05 00 11 .faraddr %000100010000000000000101 +004AF4r 1 06 00 11 .faraddr %000100010000000000000110 +004AF7r 1 07 00 11 .faraddr %000100010000000000000111 +004AFAr 1 08 00 11 .faraddr %000100010000000000001000 +004AFDr 1 09 00 11 .faraddr %000100010000000000001001 +004B00r 1 0A 00 11 .faraddr %000100010000000000001010 +004B03r 1 0B 00 11 .faraddr %000100010000000000001011 +004B06r 1 0C 00 11 .faraddr %000100010000000000001100 +004B09r 1 0D 00 11 .faraddr %000100010000000000001101 +004B0Cr 1 0E 00 11 .faraddr %000100010000000000001110 +004B0Fr 1 0F 00 11 .faraddr %000100010000000000001111 +004B12r 1 E1 FF 20 .faraddr %001000001111111111100001 +004B15r 1 E2 FF 20 .faraddr %001000001111111111100010 +004B18r 1 E3 FF 20 .faraddr %001000001111111111100011 +004B1Br 1 E4 FF 20 .faraddr %001000001111111111100100 +004B1Er 1 E5 FF 20 .faraddr %001000001111111111100101 +004B21r 1 E6 FF 20 .faraddr %001000001111111111100110 +004B24r 1 E7 FF 20 .faraddr %001000001111111111100111 +004B27r 1 E8 FF 20 .faraddr %001000001111111111101000 +004B2Ar 1 E9 FF 20 .faraddr %001000001111111111101001 +004B2Dr 1 EA FF 20 .faraddr %001000001111111111101010 +004B30r 1 EB FF 20 .faraddr %001000001111111111101011 +004B33r 1 EC FF 20 .faraddr %001000001111111111101100 +004B36r 1 ED FF 20 .faraddr %001000001111111111101101 +004B39r 1 EE FF 20 .faraddr %001000001111111111101110 +004B3Cr 1 EF FF 20 .faraddr %001000001111111111101111 +004B3Fr 1 F0 FF 20 .faraddr %001000001111111111110000 +004B42r 1 F1 FF 20 .faraddr %001000001111111111110001 +004B45r 1 F2 FF 20 .faraddr %001000001111111111110010 +004B48r 1 F3 FF 20 .faraddr %001000001111111111110011 +004B4Br 1 F4 FF 20 .faraddr %001000001111111111110100 +004B4Er 1 F5 FF 20 .faraddr %001000001111111111110101 +004B51r 1 F6 FF 20 .faraddr %001000001111111111110110 +004B54r 1 F7 FF 20 .faraddr %001000001111111111110111 +004B57r 1 F8 FF 20 .faraddr %001000001111111111111000 +004B5Ar 1 F9 FF 20 .faraddr %001000001111111111111001 +004B5Dr 1 FA FF 20 .faraddr %001000001111111111111010 +004B60r 1 FB FF 20 .faraddr %001000001111111111111011 +004B63r 1 FC FF 20 .faraddr %001000001111111111111100 +004B66r 1 FD FF 20 .faraddr %001000001111111111111101 +004B69r 1 FE FF 20 .faraddr %001000001111111111111110 +004B6Cr 1 FF FF 20 .faraddr %001000001111111111111111 +004B6Fr 1 00 00 21 .faraddr %001000010000000000000000 +004B72r 1 01 00 21 .faraddr %001000010000000000000001 +004B75r 1 02 00 21 .faraddr %001000010000000000000010 +004B78r 1 03 00 21 .faraddr %001000010000000000000011 +004B7Br 1 04 00 21 .faraddr %001000010000000000000100 +004B7Er 1 05 00 21 .faraddr %001000010000000000000101 +004B81r 1 06 00 21 .faraddr %001000010000000000000110 +004B84r 1 07 00 21 .faraddr %001000010000000000000111 +004B87r 1 08 00 21 .faraddr %001000010000000000001000 +004B8Ar 1 09 00 21 .faraddr %001000010000000000001001 +004B8Dr 1 0A 00 21 .faraddr %001000010000000000001010 +004B90r 1 0B 00 21 .faraddr %001000010000000000001011 +004B93r 1 0C 00 21 .faraddr %001000010000000000001100 +004B96r 1 0D 00 21 .faraddr %001000010000000000001101 +004B99r 1 0E 00 21 .faraddr %001000010000000000001110 +004B9Cr 1 0F 00 21 .faraddr %001000010000000000001111 +004B9Fr 1 E1 FF 7F .faraddr %011111111111111111100001 +004BA2r 1 E2 FF 7F .faraddr %011111111111111111100010 +004BA5r 1 E3 FF 7F .faraddr %011111111111111111100011 +004BA8r 1 E4 FF 7F .faraddr %011111111111111111100100 +004BABr 1 E5 FF 7F .faraddr %011111111111111111100101 +004BAEr 1 E6 FF 7F .faraddr %011111111111111111100110 +004BB1r 1 E7 FF 7F .faraddr %011111111111111111100111 +004BB4r 1 E8 FF 7F .faraddr %011111111111111111101000 +004BB7r 1 E9 FF 7F .faraddr %011111111111111111101001 +004BBAr 1 EA FF 7F .faraddr %011111111111111111101010 +004BBDr 1 EB FF 7F .faraddr %011111111111111111101011 +004BC0r 1 EC FF 7F .faraddr %011111111111111111101100 +004BC3r 1 ED FF 7F .faraddr %011111111111111111101101 +004BC6r 1 EE FF 7F .faraddr %011111111111111111101110 +004BC9r 1 EF FF 7F .faraddr %011111111111111111101111 +004BCCr 1 F0 FF 7F .faraddr %011111111111111111110000 +004BCFr 1 F1 FF 7F .faraddr %011111111111111111110001 +004BD2r 1 F2 FF 7F .faraddr %011111111111111111110010 +004BD5r 1 F3 FF 7F .faraddr %011111111111111111110011 +004BD8r 1 F4 FF 7F .faraddr %011111111111111111110100 +004BDBr 1 F5 FF 7F .faraddr %011111111111111111110101 +004BDEr 1 F6 FF 7F .faraddr %011111111111111111110110 +004BE1r 1 F7 FF 7F .faraddr %011111111111111111110111 +004BE4r 1 F8 FF 7F .faraddr %011111111111111111111000 +004BE7r 1 F9 FF 7F .faraddr %011111111111111111111001 +004BEAr 1 FA FF 7F .faraddr %011111111111111111111010 +004BEDr 1 FB FF 7F .faraddr %011111111111111111111011 +004BF0r 1 FC FF 7F .faraddr %011111111111111111111100 +004BF3r 1 FD FF 7F .faraddr %011111111111111111111101 +004BF6r 1 FE FF 7F .faraddr %011111111111111111111110 +004BF9r 1 FF FF 7F .faraddr %011111111111111111111111 +004BFCr 1 00 00 80 .faraddr %100000000000000000000000 +004BFFr 1 01 00 80 .faraddr %100000000000000000000001 +004C02r 1 02 00 80 .faraddr %100000000000000000000010 +004C05r 1 03 00 80 .faraddr %100000000000000000000011 +004C08r 1 04 00 80 .faraddr %100000000000000000000100 +004C0Br 1 05 00 80 .faraddr %100000000000000000000101 +004C0Er 1 06 00 80 .faraddr %100000000000000000000110 +004C11r 1 07 00 80 .faraddr %100000000000000000000111 +004C14r 1 08 00 80 .faraddr %100000000000000000001000 +004C17r 1 09 00 80 .faraddr %100000000000000000001001 +004C1Ar 1 0A 00 80 .faraddr %100000000000000000001010 +004C1Dr 1 0B 00 80 .faraddr %100000000000000000001011 +004C20r 1 0C 00 80 .faraddr %100000000000000000001100 +004C23r 1 0D 00 80 .faraddr %100000000000000000001101 +004C26r 1 0E 00 80 .faraddr %100000000000000000001110 +004C29r 1 0F 00 80 .faraddr %100000000000000000001111 +004C2Cr 1 E1 FF 9F .faraddr %100111111111111111100001 +004C2Fr 1 E2 FF 9F .faraddr %100111111111111111100010 +004C32r 1 E3 FF 9F .faraddr %100111111111111111100011 +004C35r 1 E4 FF 9F .faraddr %100111111111111111100100 +004C38r 1 E5 FF 9F .faraddr %100111111111111111100101 +004C3Br 1 E6 FF 9F .faraddr %100111111111111111100110 +004C3Er 1 E7 FF 9F .faraddr %100111111111111111100111 +004C41r 1 E8 FF 9F .faraddr %100111111111111111101000 +004C44r 1 E9 FF 9F .faraddr %100111111111111111101001 +004C47r 1 EA FF 9F .faraddr %100111111111111111101010 +004C4Ar 1 EB FF 9F .faraddr %100111111111111111101011 +004C4Dr 1 EC FF 9F .faraddr %100111111111111111101100 +004C50r 1 ED FF 9F .faraddr %100111111111111111101101 +004C53r 1 EE FF 9F .faraddr %100111111111111111101110 +004C56r 1 EF FF 9F .faraddr %100111111111111111101111 +004C59r 1 F0 FF 9F .faraddr %100111111111111111110000 +004C5Cr 1 F1 FF 9F .faraddr %100111111111111111110001 +004C5Fr 1 F2 FF 9F .faraddr %100111111111111111110010 +004C62r 1 F3 FF 9F .faraddr %100111111111111111110011 +004C65r 1 F4 FF 9F .faraddr %100111111111111111110100 +004C68r 1 F5 FF 9F .faraddr %100111111111111111110101 +004C6Br 1 F6 FF 9F .faraddr %100111111111111111110110 +004C6Er 1 F7 FF 9F .faraddr %100111111111111111110111 +004C71r 1 F8 FF 9F .faraddr %100111111111111111111000 +004C74r 1 F9 FF 9F .faraddr %100111111111111111111001 +004C77r 1 FA FF 9F .faraddr %100111111111111111111010 +004C7Ar 1 FB FF 9F .faraddr %100111111111111111111011 +004C7Dr 1 FC FF 9F .faraddr %100111111111111111111100 +004C80r 1 FD FF 9F .faraddr %100111111111111111111101 +004C83r 1 FE FF 9F .faraddr %100111111111111111111110 +004C86r 1 FF FF 9F .faraddr %100111111111111111111111 +004C89r 1 00 00 A0 .faraddr %101000000000000000000000 +004C8Cr 1 01 00 A0 .faraddr %101000000000000000000001 +004C8Fr 1 02 00 A0 .faraddr %101000000000000000000010 +004C92r 1 03 00 A0 .faraddr %101000000000000000000011 +004C95r 1 04 00 A0 .faraddr %101000000000000000000100 +004C98r 1 05 00 A0 .faraddr %101000000000000000000101 +004C9Br 1 06 00 A0 .faraddr %101000000000000000000110 +004C9Er 1 07 00 A0 .faraddr %101000000000000000000111 +004CA1r 1 08 00 A0 .faraddr %101000000000000000001000 +004CA4r 1 09 00 A0 .faraddr %101000000000000000001001 +004CA7r 1 0A 00 A0 .faraddr %101000000000000000001010 +004CAAr 1 0B 00 A0 .faraddr %101000000000000000001011 +004CADr 1 0C 00 A0 .faraddr %101000000000000000001100 +004CB0r 1 0D 00 A0 .faraddr %101000000000000000001101 +004CB3r 1 0E 00 A0 .faraddr %101000000000000000001110 +004CB6r 1 0F 00 A0 .faraddr %101000000000000000001111 +004CB9r 1 E1 FF FF .faraddr %111111111111111111100001 +004CBCr 1 E2 FF FF .faraddr %111111111111111111100010 +004CBFr 1 E3 FF FF .faraddr %111111111111111111100011 +004CC2r 1 E4 FF FF .faraddr %111111111111111111100100 +004CC5r 1 E5 FF FF .faraddr %111111111111111111100101 +004CC8r 1 E6 FF FF .faraddr %111111111111111111100110 +004CCBr 1 E7 FF FF .faraddr %111111111111111111100111 +004CCEr 1 E8 FF FF .faraddr %111111111111111111101000 +004CD1r 1 E9 FF FF .faraddr %111111111111111111101001 +004CD4r 1 EA FF FF .faraddr %111111111111111111101010 +004CD7r 1 EB FF FF .faraddr %111111111111111111101011 +004CDAr 1 EC FF FF .faraddr %111111111111111111101100 +004CDDr 1 ED FF FF .faraddr %111111111111111111101101 +004CE0r 1 EE FF FF .faraddr %111111111111111111101110 +004CE3r 1 EF FF FF .faraddr %111111111111111111101111 +004CE6r 1 F0 FF FF .faraddr %111111111111111111110000 +004CE9r 1 F1 FF FF .faraddr %111111111111111111110001 +004CECr 1 F2 FF FF .faraddr %111111111111111111110010 +004CEFr 1 F3 FF FF .faraddr %111111111111111111110011 +004CF2r 1 F4 FF FF .faraddr %111111111111111111110100 +004CF5r 1 F5 FF FF .faraddr %111111111111111111110101 +004CF8r 1 F6 FF FF .faraddr %111111111111111111110110 +004CFBr 1 F7 FF FF .faraddr %111111111111111111110111 +004CFEr 1 F8 FF FF .faraddr %111111111111111111111000 +004D01r 1 F9 FF FF .faraddr %111111111111111111111001 +004D04r 1 FA FF FF .faraddr %111111111111111111111010 +004D07r 1 FB FF FF .faraddr %111111111111111111111011 +004D0Ar 1 FC FF FF .faraddr %111111111111111111111100 +004D0Dr 1 FD FF FF .faraddr %111111111111111111111101 +004D10r 1 FE FF FF .faraddr %111111111111111111111110 +004D13r 1 FF FF FF .faraddr %111111111111111111111111 004D16r 1 -004D16r 1 ; multiple values on one line, decimal -004D16r 1 00 00 00 01 .faraddr 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +004D16r 1 ; multiple values on one line, decimal +004D16r 1 00 00 00 01 .faraddr 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 004D1Ar 1 00 00 02 00 004D1Er 1 00 03 00 00 -004D46r 1 10 00 00 11 .faraddr 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +004D46r 1 10 00 00 11 .faraddr 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 004D4Ar 1 00 00 12 00 004D4Er 1 00 13 00 00 -004D76r 1 70 00 00 71 .faraddr 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +004D76r 1 70 00 00 71 .faraddr 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 004D7Ar 1 00 00 72 00 004D7Er 1 00 73 00 00 -004DA6r 1 80 00 00 81 .faraddr 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +004DA6r 1 80 00 00 81 .faraddr 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 004DAAr 1 00 00 82 00 004DAEr 1 00 83 00 00 -004DD6r 1 F0 00 00 F1 .faraddr 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +004DD6r 1 F0 00 00 F1 .faraddr 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 004DDAr 1 00 00 F2 00 004DDEr 1 00 F3 00 00 -004E06r 1 00 01 00 01 .faraddr 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 +004E06r 1 00 01 00 01 .faraddr 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 004E0Ar 1 01 00 02 01 004E0Er 1 00 03 01 00 -004E36r 1 E0 0F 00 E1 .faraddr 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 +004E36r 1 E0 0F 00 E1 .faraddr 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 004E3Ar 1 0F 00 E2 0F 004E3Er 1 00 E3 0F 00 -004E66r 1 F0 0F 00 F1 .faraddr 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 +004E66r 1 F0 0F 00 F1 .faraddr 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 004E6Ar 1 0F 00 F2 0F 004E6Er 1 00 F3 0F 00 -004E96r 1 00 10 00 01 .faraddr 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 +004E96r 1 00 10 00 01 .faraddr 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 004E9Ar 1 10 00 02 10 004E9Er 1 00 03 10 00 -004EC6r 1 F0 7F 00 F1 .faraddr 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 +004EC6r 1 F0 7F 00 F1 .faraddr 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 004ECAr 1 7F 00 F2 7F 004ECEr 1 00 F3 7F 00 -004EF6r 1 00 80 00 01 .faraddr 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 +004EF6r 1 00 80 00 01 .faraddr 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 004EFAr 1 80 00 02 80 004EFEr 1 00 03 80 00 -004F26r 1 EF 9F 00 F0 .faraddr 40943,40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958 +004F26r 1 EF 9F 00 F0 .faraddr 40943,40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958 004F2Ar 1 9F 00 F1 9F 004F2Er 1 00 F2 9F 00 -004F56r 1 FF 9F 00 00 .faraddr 40959,40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974 +004F56r 1 FF 9F 00 00 .faraddr 40959,40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974 004F5Ar 1 A0 00 01 A0 004F5Er 1 00 02 A0 00 -004F86r 1 0F A0 00 10 .faraddr 40975,40976,40977,40978,40979,40980,40981,40982,40983,40984,40985,40986,40987,40988,40989,40990 +004F86r 1 0F A0 00 10 .faraddr 40975,40976,40977,40978,40979,40980,40981,40982,40983,40984,40985,40986,40987,40988,40989,40990 004F8Ar 1 A0 00 11 A0 004F8Er 1 00 12 A0 00 -004FB6r 1 EF AF 00 F0 .faraddr 45039,45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054 +004FB6r 1 EF AF 00 F0 .faraddr 45039,45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054 004FBAr 1 AF 00 F1 AF 004FBEr 1 00 F2 AF 00 -004FE6r 1 FF AF 00 00 .faraddr 45055,45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070 +004FE6r 1 FF AF 00 00 .faraddr 45055,45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070 004FEAr 1 B0 00 01 B0 004FEEr 1 00 02 B0 00 -005016r 1 0F B0 00 10 .faraddr 45071,45072,45073,45074,45075,45076,45077,45078,45079,45080,45081,45082,45083,45084,45085,45086 +005016r 1 0F B0 00 10 .faraddr 45071,45072,45073,45074,45075,45076,45077,45078,45079,45080,45081,45082,45083,45084,45085,45086 00501Ar 1 B0 00 11 B0 00501Er 1 00 12 B0 00 -005046r 1 EF FF 00 F0 .faraddr 65519,65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534 +005046r 1 EF FF 00 F0 .faraddr 65519,65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534 00504Ar 1 FF 00 F1 FF 00504Er 1 00 F2 FF 00 -005076r 1 FF FF 00 00 .faraddr 65535,65536,65537,65538,65539,65540,65541,65542,65543,65544,65545,65546,65547,65548,65549,65550 +005076r 1 FF FF 00 00 .faraddr 65535,65536,65537,65538,65539,65540,65541,65542,65543,65544,65545,65546,65547,65548,65549,65550 00507Ar 1 00 01 01 00 00507Er 1 01 02 00 01 -0050A6r 1 0F 00 01 10 .faraddr 65551,65552,65553,65554,65555,65556,65557,65558,65559,65560,65561,65562,65563,65564,65565,65566 +0050A6r 1 0F 00 01 10 .faraddr 65551,65552,65553,65554,65555,65556,65557,65558,65559,65560,65561,65562,65563,65564,65565,65566 0050AAr 1 00 01 11 00 0050AEr 1 01 12 00 01 -0050D6r 1 EF FF 10 F0 .faraddr 1114095,1114096,1114097,1114098,1114099,1114100,1114101,1114102,1114103,1114104,1114105,1114106,1114107,1114108,1114109,1114110 +0050D6r 1 EF FF 10 F0 .faraddr 1114095,1114096,1114097,1114098,1114099,1114100,1114101,1114102,1114103,1114104,1114105,1114106,1114107,1114108,1114109,1114110 0050DAr 1 FF 10 F1 FF 0050DEr 1 10 F2 FF 10 -005106r 1 FF FF 10 00 .faraddr 1114111,1114112,1114113,1114114,1114115,1114116,1114117,1114118,1114119,1114120,1114121,1114122,1114123,1114124,1114125,1114126 +005106r 1 FF FF 10 00 .faraddr 1114111,1114112,1114113,1114114,1114115,1114116,1114117,1114118,1114119,1114120,1114121,1114122,1114123,1114124,1114125,1114126 00510Ar 1 00 11 01 00 00510Er 1 11 02 00 11 -005136r 1 0F 00 11 10 .faraddr 1114127,1114128,1114129,1114130,1114131,1114132,1114133,1114134,1114135,1114136,1114137,1114138,1114139,1114140,1114141,1114142 +005136r 1 0F 00 11 10 .faraddr 1114127,1114128,1114129,1114130,1114131,1114132,1114133,1114134,1114135,1114136,1114137,1114138,1114139,1114140,1114141,1114142 00513Ar 1 00 11 11 00 00513Er 1 11 12 00 11 -005166r 1 EF FF 20 F0 .faraddr 2162671,2162672,2162673,2162674,2162675,2162676,2162677,2162678,2162679,2162680,2162681,2162682,2162683,2162684,2162685,2162686 +005166r 1 EF FF 20 F0 .faraddr 2162671,2162672,2162673,2162674,2162675,2162676,2162677,2162678,2162679,2162680,2162681,2162682,2162683,2162684,2162685,2162686 00516Ar 1 FF 20 F1 FF 00516Er 1 20 F2 FF 20 -005196r 1 FF FF 20 00 .faraddr 2162687,2162688,2162689,2162690,2162691,2162692,2162693,2162694,2162695,2162696,2162697,2162698,2162699,2162700,2162701,2162702 +005196r 1 FF FF 20 00 .faraddr 2162687,2162688,2162689,2162690,2162691,2162692,2162693,2162694,2162695,2162696,2162697,2162698,2162699,2162700,2162701,2162702 00519Ar 1 00 21 01 00 00519Er 1 21 02 00 21 -0051C6r 1 0F 00 21 10 .faraddr 2162703,2162704,2162705,2162706,2162707,2162708,2162709,2162710,2162711,2162712,2162713,2162714,2162715,2162716,2162717,2162718 +0051C6r 1 0F 00 21 10 .faraddr 2162703,2162704,2162705,2162706,2162707,2162708,2162709,2162710,2162711,2162712,2162713,2162714,2162715,2162716,2162717,2162718 0051CAr 1 00 21 11 00 0051CEr 1 21 12 00 21 -0051F6r 1 EF FF 7F F0 .faraddr 8388591,8388592,8388593,8388594,8388595,8388596,8388597,8388598,8388599,8388600,8388601,8388602,8388603,8388604,8388605,8388606 +0051F6r 1 EF FF 7F F0 .faraddr 8388591,8388592,8388593,8388594,8388595,8388596,8388597,8388598,8388599,8388600,8388601,8388602,8388603,8388604,8388605,8388606 0051FAr 1 FF 7F F1 FF 0051FEr 1 7F F2 FF 7F -005226r 1 FF FF 7F 00 .faraddr 8388607,8388608,8388609,8388610,8388611,8388612,8388613,8388614,8388615,8388616,8388617,8388618,8388619,8388620,8388621,8388622 +005226r 1 FF FF 7F 00 .faraddr 8388607,8388608,8388609,8388610,8388611,8388612,8388613,8388614,8388615,8388616,8388617,8388618,8388619,8388620,8388621,8388622 00522Ar 1 00 80 01 00 00522Er 1 80 02 00 80 -005256r 1 0F 00 80 10 .faraddr 8388623,8388624,8388625,8388626,8388627,8388628,8388629,8388630,8388631,8388632,8388633,8388634,8388635,8388636,8388637,8388638 +005256r 1 0F 00 80 10 .faraddr 8388623,8388624,8388625,8388626,8388627,8388628,8388629,8388630,8388631,8388632,8388633,8388634,8388635,8388636,8388637,8388638 00525Ar 1 00 80 11 00 00525Er 1 80 12 00 80 -005286r 1 EF FF 9F F0 .faraddr 10485743,10485744,10485745,10485746,10485747,10485748,10485749,10485750,10485751,10485752,10485753,10485754,10485755,10485756,10485757,10485758 +005286r 1 EF FF 9F F0 .faraddr 10485743,10485744,10485745,10485746,10485747,10485748,10485749,10485750,10485751,10485752,10485753,10485754,10485755,10485756,10485757,10485758 00528Ar 1 FF 9F F1 FF 00528Er 1 9F F2 FF 9F -0052B6r 1 FF FF 9F 00 .faraddr 10485759,10485760,10485761,10485762,10485763,10485764,10485765,10485766,10485767,10485768,10485769,10485770,10485771,10485772,10485773,10485774 +0052B6r 1 FF FF 9F 00 .faraddr 10485759,10485760,10485761,10485762,10485763,10485764,10485765,10485766,10485767,10485768,10485769,10485770,10485771,10485772,10485773,10485774 0052BAr 1 00 A0 01 00 0052BEr 1 A0 02 00 A0 -0052E6r 1 0F 00 A0 10 .faraddr 10485775,10485776,10485777,10485778,10485779,10485780,10485781,10485782,10485783,10485784,10485785,10485786,10485787,10485788,10485789,10485790 +0052E6r 1 0F 00 A0 10 .faraddr 10485775,10485776,10485777,10485778,10485779,10485780,10485781,10485782,10485783,10485784,10485785,10485786,10485787,10485788,10485789,10485790 0052EAr 1 00 A0 11 00 0052EEr 1 A0 12 00 A0 -005316r 1 EF FF FF F0 .faraddr 16777199,16777200,16777201,16777202,16777203,16777204,16777205,16777206,16777207,16777208,16777209,16777210,16777211,16777212,16777213,16777214 +005316r 1 EF FF FF F0 .faraddr 16777199,16777200,16777201,16777202,16777203,16777204,16777205,16777206,16777207,16777208,16777209,16777210,16777211,16777212,16777213,16777214 00531Ar 1 FF FF F1 FF 00531Er 1 FF F2 FF FF -005346r 1 FF FF FF .faraddr 16777215 +005346r 1 FF FF FF .faraddr 16777215 005349r 1 -005349r 1 ; multiple values on one line, hex -005349r 1 00 00 00 01 .faraddr $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +005349r 1 ; multiple values on one line, hex +005349r 1 00 00 00 01 .faraddr $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f 00534Dr 1 00 00 02 00 005351r 1 00 03 00 00 -005379r 1 10 00 00 11 .faraddr $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +005379r 1 10 00 00 11 .faraddr $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f 00537Dr 1 00 00 12 00 005381r 1 00 13 00 00 -0053A9r 1 70 00 00 71 .faraddr $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +0053A9r 1 70 00 00 71 .faraddr $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f 0053ADr 1 00 00 72 00 0053B1r 1 00 73 00 00 -0053D9r 1 80 00 00 81 .faraddr $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +0053D9r 1 80 00 00 81 .faraddr $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f 0053DDr 1 00 00 82 00 0053E1r 1 00 83 00 00 -005409r 1 F0 00 00 F1 .faraddr $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +005409r 1 F0 00 00 F1 .faraddr $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff 00540Dr 1 00 00 F2 00 005411r 1 00 F3 00 00 -005439r 1 00 01 00 01 .faraddr $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f +005439r 1 00 01 00 01 .faraddr $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f 00543Dr 1 01 00 02 01 005441r 1 00 03 01 00 -005469r 1 E0 0F 00 E1 .faraddr $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef +005469r 1 E0 0F 00 E1 .faraddr $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef 00546Dr 1 0F 00 E2 0F 005471r 1 00 E3 0F 00 -005499r 1 F0 0F 00 F1 .faraddr $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff +005499r 1 F0 0F 00 F1 .faraddr $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff 00549Dr 1 0F 00 F2 0F 0054A1r 1 00 F3 0F 00 -0054C9r 1 00 10 00 01 .faraddr $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f +0054C9r 1 00 10 00 01 .faraddr $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f 0054CDr 1 10 00 02 10 0054D1r 1 00 03 10 00 -0054F9r 1 F0 7F 00 F1 .faraddr $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff +0054F9r 1 F0 7F 00 F1 .faraddr $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff 0054FDr 1 7F 00 F2 7F 005501r 1 00 F3 7F 00 -005529r 1 00 80 00 01 .faraddr $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f +005529r 1 00 80 00 01 .faraddr $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f 00552Dr 1 80 00 02 80 005531r 1 00 03 80 00 -005559r 1 EF 9F 00 F0 .faraddr $9fef,$9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe +005559r 1 EF 9F 00 F0 .faraddr $9fef,$9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe 00555Dr 1 9F 00 F1 9F 005561r 1 00 F2 9F 00 -005589r 1 FF 9F 00 00 .faraddr $9fff,$a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e +005589r 1 FF 9F 00 00 .faraddr $9fff,$a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e 00558Dr 1 A0 00 01 A0 005591r 1 00 02 A0 00 -0055B9r 1 0F A0 00 10 .faraddr $a00f,$a010,$a011,$a012,$a013,$a014,$a015,$a016,$a017,$a018,$a019,$a01a,$a01b,$a01c,$a01d,$a01e +0055B9r 1 0F A0 00 10 .faraddr $a00f,$a010,$a011,$a012,$a013,$a014,$a015,$a016,$a017,$a018,$a019,$a01a,$a01b,$a01c,$a01d,$a01e 0055BDr 1 A0 00 11 A0 0055C1r 1 00 12 A0 00 -0055E9r 1 EF AF 00 F0 .faraddr $afef,$aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe +0055E9r 1 EF AF 00 F0 .faraddr $afef,$aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe 0055EDr 1 AF 00 F1 AF 0055F1r 1 00 F2 AF 00 -005619r 1 FF AF 00 00 .faraddr $afff,$b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e +005619r 1 FF AF 00 00 .faraddr $afff,$b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e 00561Dr 1 B0 00 01 B0 005621r 1 00 02 B0 00 -005649r 1 0F B0 00 10 .faraddr $b00f,$b010,$b011,$b012,$b013,$b014,$b015,$b016,$b017,$b018,$b019,$b01a,$b01b,$b01c,$b01d,$b01e +005649r 1 0F B0 00 10 .faraddr $b00f,$b010,$b011,$b012,$b013,$b014,$b015,$b016,$b017,$b018,$b019,$b01a,$b01b,$b01c,$b01d,$b01e 00564Dr 1 B0 00 11 B0 005651r 1 00 12 B0 00 -005679r 1 EF FF 00 F0 .faraddr $ffef,$fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe +005679r 1 EF FF 00 F0 .faraddr $ffef,$fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe 00567Dr 1 FF 00 F1 FF 005681r 1 00 F2 FF 00 -0056A9r 1 FF FF 00 00 .faraddr $ffff,$10000,$10001,$10002,$10003,$10004,$10005,$10006,$10007,$10008,$10009,$1000a,$1000b,$1000c,$1000d,$1000e +0056A9r 1 FF FF 00 00 .faraddr $ffff,$10000,$10001,$10002,$10003,$10004,$10005,$10006,$10007,$10008,$10009,$1000a,$1000b,$1000c,$1000d,$1000e 0056ADr 1 00 01 01 00 0056B1r 1 01 02 00 01 -0056D9r 1 0F 00 01 10 .faraddr $1000f,$10010,$10011,$10012,$10013,$10014,$10015,$10016,$10017,$10018,$10019,$1001a,$1001b,$1001c,$1001d,$1001e +0056D9r 1 0F 00 01 10 .faraddr $1000f,$10010,$10011,$10012,$10013,$10014,$10015,$10016,$10017,$10018,$10019,$1001a,$1001b,$1001c,$1001d,$1001e 0056DDr 1 00 01 11 00 0056E1r 1 01 12 00 01 -005709r 1 EF FF 10 F0 .faraddr $10ffef,$10fff0,$10fff1,$10fff2,$10fff3,$10fff4,$10fff5,$10fff6,$10fff7,$10fff8,$10fff9,$10fffa,$10fffb,$10fffc,$10fffd,$10fffe +005709r 1 EF FF 10 F0 .faraddr $10ffef,$10fff0,$10fff1,$10fff2,$10fff3,$10fff4,$10fff5,$10fff6,$10fff7,$10fff8,$10fff9,$10fffa,$10fffb,$10fffc,$10fffd,$10fffe 00570Dr 1 FF 10 F1 FF 005711r 1 10 F2 FF 10 -005739r 1 FF FF 10 00 .faraddr $10ffff,$110000,$110001,$110002,$110003,$110004,$110005,$110006,$110007,$110008,$110009,$11000a,$11000b,$11000c,$11000d,$11000e +005739r 1 FF FF 10 00 .faraddr $10ffff,$110000,$110001,$110002,$110003,$110004,$110005,$110006,$110007,$110008,$110009,$11000a,$11000b,$11000c,$11000d,$11000e 00573Dr 1 00 11 01 00 005741r 1 11 02 00 11 -005769r 1 0F 00 11 10 .faraddr $11000f,$110010,$110011,$110012,$110013,$110014,$110015,$110016,$110017,$110018,$110019,$11001a,$11001b,$11001c,$11001d,$11001e +005769r 1 0F 00 11 10 .faraddr $11000f,$110010,$110011,$110012,$110013,$110014,$110015,$110016,$110017,$110018,$110019,$11001a,$11001b,$11001c,$11001d,$11001e 00576Dr 1 00 11 11 00 005771r 1 11 12 00 11 -005799r 1 EF FF 20 F0 .faraddr $20ffef,$20fff0,$20fff1,$20fff2,$20fff3,$20fff4,$20fff5,$20fff6,$20fff7,$20fff8,$20fff9,$20fffa,$20fffb,$20fffc,$20fffd,$20fffe +005799r 1 EF FF 20 F0 .faraddr $20ffef,$20fff0,$20fff1,$20fff2,$20fff3,$20fff4,$20fff5,$20fff6,$20fff7,$20fff8,$20fff9,$20fffa,$20fffb,$20fffc,$20fffd,$20fffe 00579Dr 1 FF 20 F1 FF 0057A1r 1 20 F2 FF 20 -0057C9r 1 FF FF 20 00 .faraddr $20ffff,$210000,$210001,$210002,$210003,$210004,$210005,$210006,$210007,$210008,$210009,$21000a,$21000b,$21000c,$21000d,$21000e +0057C9r 1 FF FF 20 00 .faraddr $20ffff,$210000,$210001,$210002,$210003,$210004,$210005,$210006,$210007,$210008,$210009,$21000a,$21000b,$21000c,$21000d,$21000e 0057CDr 1 00 21 01 00 0057D1r 1 21 02 00 21 -0057F9r 1 0F 00 21 10 .faraddr $21000f,$210010,$210011,$210012,$210013,$210014,$210015,$210016,$210017,$210018,$210019,$21001a,$21001b,$21001c,$21001d,$21001e +0057F9r 1 0F 00 21 10 .faraddr $21000f,$210010,$210011,$210012,$210013,$210014,$210015,$210016,$210017,$210018,$210019,$21001a,$21001b,$21001c,$21001d,$21001e 0057FDr 1 00 21 11 00 005801r 1 21 12 00 21 -005829r 1 EF FF 7F F0 .faraddr $7fffef,$7ffff0,$7ffff1,$7ffff2,$7ffff3,$7ffff4,$7ffff5,$7ffff6,$7ffff7,$7ffff8,$7ffff9,$7ffffa,$7ffffb,$7ffffc,$7ffffd,$7ffffe +005829r 1 EF FF 7F F0 .faraddr $7fffef,$7ffff0,$7ffff1,$7ffff2,$7ffff3,$7ffff4,$7ffff5,$7ffff6,$7ffff7,$7ffff8,$7ffff9,$7ffffa,$7ffffb,$7ffffc,$7ffffd,$7ffffe 00582Dr 1 FF 7F F1 FF 005831r 1 7F F2 FF 7F -005859r 1 FF FF 7F 00 .faraddr $7fffff,$800000,$800001,$800002,$800003,$800004,$800005,$800006,$800007,$800008,$800009,$80000a,$80000b,$80000c,$80000d,$80000e +005859r 1 FF FF 7F 00 .faraddr $7fffff,$800000,$800001,$800002,$800003,$800004,$800005,$800006,$800007,$800008,$800009,$80000a,$80000b,$80000c,$80000d,$80000e 00585Dr 1 00 80 01 00 005861r 1 80 02 00 80 -005889r 1 0F 00 80 10 .faraddr $80000f,$800010,$800011,$800012,$800013,$800014,$800015,$800016,$800017,$800018,$800019,$80001a,$80001b,$80001c,$80001d,$80001e +005889r 1 0F 00 80 10 .faraddr $80000f,$800010,$800011,$800012,$800013,$800014,$800015,$800016,$800017,$800018,$800019,$80001a,$80001b,$80001c,$80001d,$80001e 00588Dr 1 00 80 11 00 005891r 1 80 12 00 80 -0058B9r 1 EF FF 9F F0 .faraddr $9fffef,$9ffff0,$9ffff1,$9ffff2,$9ffff3,$9ffff4,$9ffff5,$9ffff6,$9ffff7,$9ffff8,$9ffff9,$9ffffa,$9ffffb,$9ffffc,$9ffffd,$9ffffe +0058B9r 1 EF FF 9F F0 .faraddr $9fffef,$9ffff0,$9ffff1,$9ffff2,$9ffff3,$9ffff4,$9ffff5,$9ffff6,$9ffff7,$9ffff8,$9ffff9,$9ffffa,$9ffffb,$9ffffc,$9ffffd,$9ffffe 0058BDr 1 FF 9F F1 FF 0058C1r 1 9F F2 FF 9F -0058E9r 1 FF FF 9F 00 .faraddr $9fffff,$a00000,$a00001,$a00002,$a00003,$a00004,$a00005,$a00006,$a00007,$a00008,$a00009,$a0000a,$a0000b,$a0000c,$a0000d,$a0000e +0058E9r 1 FF FF 9F 00 .faraddr $9fffff,$a00000,$a00001,$a00002,$a00003,$a00004,$a00005,$a00006,$a00007,$a00008,$a00009,$a0000a,$a0000b,$a0000c,$a0000d,$a0000e 0058EDr 1 00 A0 01 00 0058F1r 1 A0 02 00 A0 -005919r 1 0F 00 A0 10 .faraddr $a0000f,$a00010,$a00011,$a00012,$a00013,$a00014,$a00015,$a00016,$a00017,$a00018,$a00019,$a0001a,$a0001b,$a0001c,$a0001d,$a0001e +005919r 1 0F 00 A0 10 .faraddr $a0000f,$a00010,$a00011,$a00012,$a00013,$a00014,$a00015,$a00016,$a00017,$a00018,$a00019,$a0001a,$a0001b,$a0001c,$a0001d,$a0001e 00591Dr 1 00 A0 11 00 005921r 1 A0 12 00 A0 -005949r 1 EF FF FF F0 .faraddr $ffffef,$fffff0,$fffff1,$fffff2,$fffff3,$fffff4,$fffff5,$fffff6,$fffff7,$fffff8,$fffff9,$fffffa,$fffffb,$fffffc,$fffffd,$fffffe +005949r 1 EF FF FF F0 .faraddr $ffffef,$fffff0,$fffff1,$fffff2,$fffff3,$fffff4,$fffff5,$fffff6,$fffff7,$fffff8,$fffff9,$fffffa,$fffffb,$fffffc,$fffffd,$fffffe 00594Dr 1 FF FF F1 FF 005951r 1 FF F2 FF FF -005979r 1 FF FF FF .faraddr $ffffff +005979r 1 FF FF FF .faraddr $ffffff 00597Cr 1 -00597Cr 1 ; multiple values on one line, alternative hex -00597Cr 1 00 00 00 01 .faraddr 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +00597Cr 1 ; multiple values on one line, alternative hex +00597Cr 1 00 00 00 01 .faraddr 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh 005980r 1 00 00 02 00 005984r 1 00 03 00 00 -0059ACr 1 10 00 00 11 .faraddr 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +0059ACr 1 10 00 00 11 .faraddr 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh 0059B0r 1 00 00 12 00 0059B4r 1 00 13 00 00 -0059DCr 1 70 00 00 71 .faraddr 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +0059DCr 1 70 00 00 71 .faraddr 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh 0059E0r 1 00 00 72 00 0059E4r 1 00 73 00 00 -005A0Cr 1 80 00 00 81 .faraddr 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +005A0Cr 1 80 00 00 81 .faraddr 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh 005A10r 1 00 00 82 00 005A14r 1 00 83 00 00 -005A3Cr 1 F0 00 00 F1 .faraddr 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +005A3Cr 1 F0 00 00 F1 .faraddr 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh 005A40r 1 00 00 F2 00 005A44r 1 00 F3 00 00 -005A6Cr 1 00 01 00 01 .faraddr 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh +005A6Cr 1 00 01 00 01 .faraddr 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh 005A70r 1 01 00 02 01 005A74r 1 00 03 01 00 -005A9Cr 1 E0 0F 00 E1 .faraddr 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh +005A9Cr 1 E0 0F 00 E1 .faraddr 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh 005AA0r 1 0F 00 E2 0F 005AA4r 1 00 E3 0F 00 -005ACCr 1 F0 0F 00 F1 .faraddr 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh +005ACCr 1 F0 0F 00 F1 .faraddr 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh 005AD0r 1 0F 00 F2 0F 005AD4r 1 00 F3 0F 00 -005AFCr 1 00 10 00 01 .faraddr 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh +005AFCr 1 00 10 00 01 .faraddr 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh 005B00r 1 10 00 02 10 005B04r 1 00 03 10 00 -005B2Cr 1 F0 7F 00 F1 .faraddr 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh +005B2Cr 1 F0 7F 00 F1 .faraddr 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh 005B30r 1 7F 00 F2 7F 005B34r 1 00 F3 7F 00 -005B5Cr 1 00 80 00 01 .faraddr 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh +005B5Cr 1 00 80 00 01 .faraddr 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh 005B60r 1 80 00 02 80 005B64r 1 00 03 80 00 -005B8Cr 1 EF 9F 00 F0 .faraddr 9fefh,9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh +005B8Cr 1 EF 9F 00 F0 .faraddr 9fefh,9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh 005B90r 1 9F 00 F1 9F 005B94r 1 00 F2 9F 00 -005BBCr 1 FF 9F 00 00 .faraddr 9fffh,0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh +005BBCr 1 FF 9F 00 00 .faraddr 9fffh,0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh 005BC0r 1 A0 00 01 A0 005BC4r 1 00 02 A0 00 -005BECr 1 0F A0 00 10 .faraddr 0a00fh,0a010h,0a011h,0a012h,0a013h,0a014h,0a015h,0a016h,0a017h,0a018h,0a019h,0a01ah,0a01bh,0a01ch,0a01dh,0a01eh +005BECr 1 0F A0 00 10 .faraddr 0a00fh,0a010h,0a011h,0a012h,0a013h,0a014h,0a015h,0a016h,0a017h,0a018h,0a019h,0a01ah,0a01bh,0a01ch,0a01dh,0a01eh 005BF0r 1 A0 00 11 A0 005BF4r 1 00 12 A0 00 -005C1Cr 1 EF AF 00 F0 .faraddr 0afefh,0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh +005C1Cr 1 EF AF 00 F0 .faraddr 0afefh,0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh 005C20r 1 AF 00 F1 AF 005C24r 1 00 F2 AF 00 -005C4Cr 1 FF AF 00 00 .faraddr 0afffh,0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh +005C4Cr 1 FF AF 00 00 .faraddr 0afffh,0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh 005C50r 1 B0 00 01 B0 005C54r 1 00 02 B0 00 -005C7Cr 1 0F B0 00 10 .faraddr 0b00fh,0b010h,0b011h,0b012h,0b013h,0b014h,0b015h,0b016h,0b017h,0b018h,0b019h,0b01ah,0b01bh,0b01ch,0b01dh,0b01eh +005C7Cr 1 0F B0 00 10 .faraddr 0b00fh,0b010h,0b011h,0b012h,0b013h,0b014h,0b015h,0b016h,0b017h,0b018h,0b019h,0b01ah,0b01bh,0b01ch,0b01dh,0b01eh 005C80r 1 B0 00 11 B0 005C84r 1 00 12 B0 00 -005CACr 1 EF FF 00 F0 .faraddr 0ffefh,0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh +005CACr 1 EF FF 00 F0 .faraddr 0ffefh,0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh 005CB0r 1 FF 00 F1 FF 005CB4r 1 00 F2 FF 00 -005CDCr 1 FF FF 00 00 .faraddr 0ffffh,10000h,10001h,10002h,10003h,10004h,10005h,10006h,10007h,10008h,10009h,1000ah,1000bh,1000ch,1000dh,1000eh +005CDCr 1 FF FF 00 00 .faraddr 0ffffh,10000h,10001h,10002h,10003h,10004h,10005h,10006h,10007h,10008h,10009h,1000ah,1000bh,1000ch,1000dh,1000eh 005CE0r 1 00 01 01 00 005CE4r 1 01 02 00 01 -005D0Cr 1 0F 00 01 10 .faraddr 1000fh,10010h,10011h,10012h,10013h,10014h,10015h,10016h,10017h,10018h,10019h,1001ah,1001bh,1001ch,1001dh,1001eh +005D0Cr 1 0F 00 01 10 .faraddr 1000fh,10010h,10011h,10012h,10013h,10014h,10015h,10016h,10017h,10018h,10019h,1001ah,1001bh,1001ch,1001dh,1001eh 005D10r 1 00 01 11 00 005D14r 1 01 12 00 01 -005D3Cr 1 EF FF 10 F0 .faraddr 10ffefh,10fff0h,10fff1h,10fff2h,10fff3h,10fff4h,10fff5h,10fff6h,10fff7h,10fff8h,10fff9h,10fffah,10fffbh,10fffch,10fffdh,10fffeh +005D3Cr 1 EF FF 10 F0 .faraddr 10ffefh,10fff0h,10fff1h,10fff2h,10fff3h,10fff4h,10fff5h,10fff6h,10fff7h,10fff8h,10fff9h,10fffah,10fffbh,10fffch,10fffdh,10fffeh 005D40r 1 FF 10 F1 FF 005D44r 1 10 F2 FF 10 -005D6Cr 1 FF FF 10 00 .faraddr 10ffffh,110000h,110001h,110002h,110003h,110004h,110005h,110006h,110007h,110008h,110009h,11000ah,11000bh,11000ch,11000dh,11000eh +005D6Cr 1 FF FF 10 00 .faraddr 10ffffh,110000h,110001h,110002h,110003h,110004h,110005h,110006h,110007h,110008h,110009h,11000ah,11000bh,11000ch,11000dh,11000eh 005D70r 1 00 11 01 00 005D74r 1 11 02 00 11 -005D9Cr 1 0F 00 11 10 .faraddr 11000fh,110010h,110011h,110012h,110013h,110014h,110015h,110016h,110017h,110018h,110019h,11001ah,11001bh,11001ch,11001dh,11001eh +005D9Cr 1 0F 00 11 10 .faraddr 11000fh,110010h,110011h,110012h,110013h,110014h,110015h,110016h,110017h,110018h,110019h,11001ah,11001bh,11001ch,11001dh,11001eh 005DA0r 1 00 11 11 00 005DA4r 1 11 12 00 11 -005DCCr 1 EF FF 20 F0 .faraddr 20ffefh,20fff0h,20fff1h,20fff2h,20fff3h,20fff4h,20fff5h,20fff6h,20fff7h,20fff8h,20fff9h,20fffah,20fffbh,20fffch,20fffdh,20fffeh +005DCCr 1 EF FF 20 F0 .faraddr 20ffefh,20fff0h,20fff1h,20fff2h,20fff3h,20fff4h,20fff5h,20fff6h,20fff7h,20fff8h,20fff9h,20fffah,20fffbh,20fffch,20fffdh,20fffeh 005DD0r 1 FF 20 F1 FF 005DD4r 1 20 F2 FF 20 -005DFCr 1 FF FF 20 00 .faraddr 20ffffh,210000h,210001h,210002h,210003h,210004h,210005h,210006h,210007h,210008h,210009h,21000ah,21000bh,21000ch,21000dh,21000eh +005DFCr 1 FF FF 20 00 .faraddr 20ffffh,210000h,210001h,210002h,210003h,210004h,210005h,210006h,210007h,210008h,210009h,21000ah,21000bh,21000ch,21000dh,21000eh 005E00r 1 00 21 01 00 005E04r 1 21 02 00 21 -005E2Cr 1 0F 00 21 10 .faraddr 21000fh,210010h,210011h,210012h,210013h,210014h,210015h,210016h,210017h,210018h,210019h,21001ah,21001bh,21001ch,21001dh,21001eh +005E2Cr 1 0F 00 21 10 .faraddr 21000fh,210010h,210011h,210012h,210013h,210014h,210015h,210016h,210017h,210018h,210019h,21001ah,21001bh,21001ch,21001dh,21001eh 005E30r 1 00 21 11 00 005E34r 1 21 12 00 21 -005E5Cr 1 EF FF 7F F0 .faraddr 7fffefh,7ffff0h,7ffff1h,7ffff2h,7ffff3h,7ffff4h,7ffff5h,7ffff6h,7ffff7h,7ffff8h,7ffff9h,7ffffah,7ffffbh,7ffffch,7ffffdh,7ffffeh +005E5Cr 1 EF FF 7F F0 .faraddr 7fffefh,7ffff0h,7ffff1h,7ffff2h,7ffff3h,7ffff4h,7ffff5h,7ffff6h,7ffff7h,7ffff8h,7ffff9h,7ffffah,7ffffbh,7ffffch,7ffffdh,7ffffeh 005E60r 1 FF 7F F1 FF 005E64r 1 7F F2 FF 7F -005E8Cr 1 FF FF 7F 00 .faraddr 7fffffh,800000h,800001h,800002h,800003h,800004h,800005h,800006h,800007h,800008h,800009h,80000ah,80000bh,80000ch,80000dh,80000eh +005E8Cr 1 FF FF 7F 00 .faraddr 7fffffh,800000h,800001h,800002h,800003h,800004h,800005h,800006h,800007h,800008h,800009h,80000ah,80000bh,80000ch,80000dh,80000eh 005E90r 1 00 80 01 00 005E94r 1 80 02 00 80 -005EBCr 1 0F 00 80 10 .faraddr 80000fh,800010h,800011h,800012h,800013h,800014h,800015h,800016h,800017h,800018h,800019h,80001ah,80001bh,80001ch,80001dh,80001eh +005EBCr 1 0F 00 80 10 .faraddr 80000fh,800010h,800011h,800012h,800013h,800014h,800015h,800016h,800017h,800018h,800019h,80001ah,80001bh,80001ch,80001dh,80001eh 005EC0r 1 00 80 11 00 005EC4r 1 80 12 00 80 -005EECr 1 EF FF 9F F0 .faraddr 9fffefh,9ffff0h,9ffff1h,9ffff2h,9ffff3h,9ffff4h,9ffff5h,9ffff6h,9ffff7h,9ffff8h,9ffff9h,9ffffah,9ffffbh,9ffffch,9ffffdh,9ffffeh +005EECr 1 EF FF 9F F0 .faraddr 9fffefh,9ffff0h,9ffff1h,9ffff2h,9ffff3h,9ffff4h,9ffff5h,9ffff6h,9ffff7h,9ffff8h,9ffff9h,9ffffah,9ffffbh,9ffffch,9ffffdh,9ffffeh 005EF0r 1 FF 9F F1 FF 005EF4r 1 9F F2 FF 9F -005F1Cr 1 FF FF 9F 00 .faraddr 9fffffh,0a00000h,0a00001h,0a00002h,0a00003h,0a00004h,0a00005h,0a00006h,0a00007h,0a00008h,0a00009h,0a0000ah,0a0000bh,0a0000ch,0a0000dh,0a0000eh +005F1Cr 1 FF FF 9F 00 .faraddr 9fffffh,0a00000h,0a00001h,0a00002h,0a00003h,0a00004h,0a00005h,0a00006h,0a00007h,0a00008h,0a00009h,0a0000ah,0a0000bh,0a0000ch,0a0000dh,0a0000eh 005F20r 1 00 A0 01 00 005F24r 1 A0 02 00 A0 -005F4Cr 1 0F 00 A0 10 .faraddr 0a0000fh,0a00010h,0a00011h,0a00012h,0a00013h,0a00014h,0a00015h,0a00016h,0a00017h,0a00018h,0a00019h,0a0001ah,0a0001bh,0a0001ch,0a0001dh,0a0001eh +005F4Cr 1 0F 00 A0 10 .faraddr 0a0000fh,0a00010h,0a00011h,0a00012h,0a00013h,0a00014h,0a00015h,0a00016h,0a00017h,0a00018h,0a00019h,0a0001ah,0a0001bh,0a0001ch,0a0001dh,0a0001eh 005F50r 1 00 A0 11 00 005F54r 1 A0 12 00 A0 -005F7Cr 1 EF FF FF F0 .faraddr 0ffffefh,0fffff0h,0fffff1h,0fffff2h,0fffff3h,0fffff4h,0fffff5h,0fffff6h,0fffff7h,0fffff8h,0fffff9h,0fffffah,0fffffbh,0fffffch,0fffffdh,0fffffeh +005F7Cr 1 EF FF FF F0 .faraddr 0ffffefh,0fffff0h,0fffff1h,0fffff2h,0fffff3h,0fffff4h,0fffff5h,0fffff6h,0fffff7h,0fffff8h,0fffff9h,0fffffah,0fffffbh,0fffffch,0fffffdh,0fffffeh 005F80r 1 FF FF F1 FF 005F84r 1 FF F2 FF FF -005FACr 1 FF FF FF .faraddr 0ffffffh +005FACr 1 FF FF FF .faraddr 0ffffffh 005FAFr 1 -005FAFr 1 ; mix some variants -005FAFr 1 0B 00 00 11 .faraddr 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +005FAFr 1 ; mix some variants +005FAFr 1 0B 00 00 11 .faraddr 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh 005FB3r 1 00 00 03 00 005FB7r 1 00 11 00 00 005FDCr 1 diff --git a/test/asm/listing/105-faraddr.s b/test/asm/listing/105-faraddr.s index 1f925ffde..6f314cd24 100644 --- a/test/asm/listing/105-faraddr.s +++ b/test/asm/listing/105-faraddr.s @@ -1,6717 +1,6717 @@ ; 2022-06-15 Spiro Trikaliotis - ; upper case pseudo-op - .FARADDR 0 - .FARADDR 1 - .FARADDR 2 - .FARADDR 3 - .FARADDR 4 - .FARADDR 5 - .FARADDR 6 - .FARADDR 7 - .FARADDR 8 - .FARADDR 9 - .FARADDR 10 - .FARADDR 11 - .FARADDR 12 - .FARADDR 13 - .FARADDR 14 - .FARADDR 15 - .FARADDR 16 - .FARADDR 17 - .FARADDR 18 - .FARADDR 19 - .FARADDR 112 - .FARADDR 113 - .FARADDR 114 - .FARADDR 115 - .FARADDR 116 - .FARADDR 117 - .FARADDR 118 - .FARADDR 119 - .FARADDR 120 - .FARADDR 121 - .FARADDR 122 - .FARADDR 123 - .FARADDR 124 - .FARADDR 125 - .FARADDR 126 - .FARADDR 127 - .FARADDR 128 - .FARADDR 129 - .FARADDR 130 - .FARADDR 131 - .FARADDR 132 - .FARADDR 133 - .FARADDR 134 - .FARADDR 240 - .FARADDR 241 - .FARADDR 242 - .FARADDR 243 - .FARADDR 244 - .FARADDR 245 - .FARADDR 246 - .FARADDR 247 - .FARADDR 248 - .FARADDR 249 - .FARADDR 250 - .FARADDR 251 - .FARADDR 252 - .FARADDR 253 - .FARADDR 254 - .FARADDR 255 - .FARADDR 256 - .FARADDR 257 - .FARADDR 258 - .FARADDR 259 - .FARADDR 4050 - .FARADDR 4051 - .FARADDR 4052 - .FARADDR 4053 - .FARADDR 4054 - .FARADDR 4055 - .FARADDR 4056 - .FARADDR 4057 - .FARADDR 4058 - .FARADDR 4059 - .FARADDR 4060 - .FARADDR 4061 - .FARADDR 4062 - .FARADDR 4063 - .FARADDR 4064 - .FARADDR 4065 - .FARADDR 4066 - .FARADDR 4067 - .FARADDR 4068 - .FARADDR 4069 - .FARADDR 4070 - .FARADDR 4071 - .FARADDR 4072 - .FARADDR 4073 - .FARADDR 4074 - .FARADDR 4075 - .FARADDR 4076 - .FARADDR 4077 - .FARADDR 4078 - .FARADDR 4079 - .FARADDR 4080 - .FARADDR 4081 - .FARADDR 4082 - .FARADDR 4083 - .FARADDR 4084 - .FARADDR 4085 - .FARADDR 4086 - .FARADDR 4087 - .FARADDR 4088 - .FARADDR 4089 - .FARADDR 4090 - .FARADDR 4091 - .FARADDR 4092 - .FARADDR 4093 - .FARADDR 4094 - .FARADDR 4095 - .FARADDR 4096 - .FARADDR 4097 - .FARADDR 4098 - .FARADDR 4099 - .FARADDR 4100 - .FARADDR 4101 - .FARADDR 4102 - .FARADDR 4103 - .FARADDR 4104 - .FARADDR 32752 - .FARADDR 32753 - .FARADDR 32754 - .FARADDR 32755 - .FARADDR 32756 - .FARADDR 32757 - .FARADDR 32758 - .FARADDR 32759 - .FARADDR 32760 - .FARADDR 32761 - .FARADDR 32762 - .FARADDR 32763 - .FARADDR 32764 - .FARADDR 32765 - .FARADDR 32766 - .FARADDR 32767 - .FARADDR 32768 - .FARADDR 32769 - .FARADDR 32770 - .FARADDR 32771 - .FARADDR 32772 - .FARADDR 32773 - .FARADDR 32774 - .FARADDR 32775 - .FARADDR 32776 - .FARADDR 32777 - .FARADDR 32778 - .FARADDR 32779 - .FARADDR 40929 - .FARADDR 40930 - .FARADDR 40931 - .FARADDR 40932 - .FARADDR 40933 - .FARADDR 40934 - .FARADDR 40935 - .FARADDR 40936 - .FARADDR 40937 - .FARADDR 40938 - .FARADDR 40939 - .FARADDR 40940 - .FARADDR 40941 - .FARADDR 40942 - .FARADDR 40943 - .FARADDR 40944 - .FARADDR 40945 - .FARADDR 40946 - .FARADDR 40947 - .FARADDR 40948 - .FARADDR 40949 - .FARADDR 40950 - .FARADDR 40951 - .FARADDR 40952 - .FARADDR 40953 - .FARADDR 40954 - .FARADDR 40955 - .FARADDR 40956 - .FARADDR 40957 - .FARADDR 40958 - .FARADDR 40959 - .FARADDR 40960 - .FARADDR 40961 - .FARADDR 40962 - .FARADDR 40963 - .FARADDR 40964 - .FARADDR 40965 - .FARADDR 40966 - .FARADDR 40967 - .FARADDR 40968 - .FARADDR 40969 - .FARADDR 40970 - .FARADDR 40971 - .FARADDR 40972 - .FARADDR 40973 - .FARADDR 40974 - .FARADDR 40975 - .FARADDR 45025 - .FARADDR 45026 - .FARADDR 45027 - .FARADDR 45028 - .FARADDR 45029 - .FARADDR 45030 - .FARADDR 45031 - .FARADDR 45032 - .FARADDR 45033 - .FARADDR 45034 - .FARADDR 45035 - .FARADDR 45036 - .FARADDR 45037 - .FARADDR 45038 - .FARADDR 45039 - .FARADDR 45040 - .FARADDR 45041 - .FARADDR 45042 - .FARADDR 45043 - .FARADDR 45044 - .FARADDR 45045 - .FARADDR 45046 - .FARADDR 45047 - .FARADDR 45048 - .FARADDR 45049 - .FARADDR 45050 - .FARADDR 45051 - .FARADDR 45052 - .FARADDR 45053 - .FARADDR 45054 - .FARADDR 45055 - .FARADDR 45056 - .FARADDR 45057 - .FARADDR 45058 - .FARADDR 45059 - .FARADDR 45060 - .FARADDR 45061 - .FARADDR 45062 - .FARADDR 45063 - .FARADDR 45064 - .FARADDR 45065 - .FARADDR 45066 - .FARADDR 45067 - .FARADDR 45068 - .FARADDR 45069 - .FARADDR 45070 - .FARADDR 45071 - .FARADDR 65505 - .FARADDR 65506 - .FARADDR 65507 - .FARADDR 65508 - .FARADDR 65509 - .FARADDR 65510 - .FARADDR 65511 - .FARADDR 65512 - .FARADDR 65513 - .FARADDR 65514 - .FARADDR 65515 - .FARADDR 65516 - .FARADDR 65517 - .FARADDR 65518 - .FARADDR 65519 - .FARADDR 65520 - .FARADDR 65521 - .FARADDR 65522 - .FARADDR 65523 - .FARADDR 65524 - .FARADDR 65525 - .FARADDR 65526 - .FARADDR 65527 - .FARADDR 65528 - .FARADDR 65529 - .FARADDR 65530 - .FARADDR 65531 - .FARADDR 65532 - .FARADDR 65533 - .FARADDR 65534 - .FARADDR 65535 - .FARADDR 65536 - .FARADDR 65537 - .FARADDR 65538 - .FARADDR 65539 - .FARADDR 65540 - .FARADDR 65541 - .FARADDR 65542 - .FARADDR 65543 - .FARADDR 65544 - .FARADDR 65545 - .FARADDR 65546 - .FARADDR 65547 - .FARADDR 65548 - .FARADDR 65549 - .FARADDR 65550 - .FARADDR 65551 - .FARADDR 1114081 - .FARADDR 1114082 - .FARADDR 1114083 - .FARADDR 1114084 - .FARADDR 1114085 - .FARADDR 1114086 - .FARADDR 1114087 - .FARADDR 1114088 - .FARADDR 1114089 - .FARADDR 1114090 - .FARADDR 1114091 - .FARADDR 1114092 - .FARADDR 1114093 - .FARADDR 1114094 - .FARADDR 1114095 - .FARADDR 1114096 - .FARADDR 1114097 - .FARADDR 1114098 - .FARADDR 1114099 - .FARADDR 1114100 - .FARADDR 1114101 - .FARADDR 1114102 - .FARADDR 1114103 - .FARADDR 1114104 - .FARADDR 1114105 - .FARADDR 1114106 - .FARADDR 1114107 - .FARADDR 1114108 - .FARADDR 1114109 - .FARADDR 1114110 - .FARADDR 1114111 - .FARADDR 1114112 - .FARADDR 1114113 - .FARADDR 1114114 - .FARADDR 1114115 - .FARADDR 1114116 - .FARADDR 1114117 - .FARADDR 1114118 - .FARADDR 1114119 - .FARADDR 1114120 - .FARADDR 1114121 - .FARADDR 1114122 - .FARADDR 1114123 - .FARADDR 1114124 - .FARADDR 1114125 - .FARADDR 1114126 - .FARADDR 1114127 - .FARADDR 2162657 - .FARADDR 2162658 - .FARADDR 2162659 - .FARADDR 2162660 - .FARADDR 2162661 - .FARADDR 2162662 - .FARADDR 2162663 - .FARADDR 2162664 - .FARADDR 2162665 - .FARADDR 2162666 - .FARADDR 2162667 - .FARADDR 2162668 - .FARADDR 2162669 - .FARADDR 2162670 - .FARADDR 2162671 - .FARADDR 2162672 - .FARADDR 2162673 - .FARADDR 2162674 - .FARADDR 2162675 - .FARADDR 2162676 - .FARADDR 2162677 - .FARADDR 2162678 - .FARADDR 2162679 - .FARADDR 2162680 - .FARADDR 2162681 - .FARADDR 2162682 - .FARADDR 2162683 - .FARADDR 2162684 - .FARADDR 2162685 - .FARADDR 2162686 - .FARADDR 2162687 - .FARADDR 2162688 - .FARADDR 2162689 - .FARADDR 2162690 - .FARADDR 2162691 - .FARADDR 2162692 - .FARADDR 2162693 - .FARADDR 2162694 - .FARADDR 2162695 - .FARADDR 2162696 - .FARADDR 2162697 - .FARADDR 2162698 - .FARADDR 2162699 - .FARADDR 2162700 - .FARADDR 2162701 - .FARADDR 2162702 - .FARADDR 2162703 - .FARADDR 8388577 - .FARADDR 8388578 - .FARADDR 8388579 - .FARADDR 8388580 - .FARADDR 8388581 - .FARADDR 8388582 - .FARADDR 8388583 - .FARADDR 8388584 - .FARADDR 8388585 - .FARADDR 8388586 - .FARADDR 8388587 - .FARADDR 8388588 - .FARADDR 8388589 - .FARADDR 8388590 - .FARADDR 8388591 - .FARADDR 8388592 - .FARADDR 8388593 - .FARADDR 8388594 - .FARADDR 8388595 - .FARADDR 8388596 - .FARADDR 8388597 - .FARADDR 8388598 - .FARADDR 8388599 - .FARADDR 8388600 - .FARADDR 8388601 - .FARADDR 8388602 - .FARADDR 8388603 - .FARADDR 8388604 - .FARADDR 8388605 - .FARADDR 8388606 - .FARADDR 8388607 - .FARADDR 8388608 - .FARADDR 8388609 - .FARADDR 8388610 - .FARADDR 8388611 - .FARADDR 8388612 - .FARADDR 8388613 - .FARADDR 8388614 - .FARADDR 8388615 - .FARADDR 8388616 - .FARADDR 8388617 - .FARADDR 8388618 - .FARADDR 8388619 - .FARADDR 8388620 - .FARADDR 8388621 - .FARADDR 8388622 - .FARADDR 8388623 - .FARADDR 10485729 - .FARADDR 10485730 - .FARADDR 10485731 - .FARADDR 10485732 - .FARADDR 10485733 - .FARADDR 10485734 - .FARADDR 10485735 - .FARADDR 10485736 - .FARADDR 10485737 - .FARADDR 10485738 - .FARADDR 10485739 - .FARADDR 10485740 - .FARADDR 10485741 - .FARADDR 10485742 - .FARADDR 10485743 - .FARADDR 10485744 - .FARADDR 10485745 - .FARADDR 10485746 - .FARADDR 10485747 - .FARADDR 10485748 - .FARADDR 10485749 - .FARADDR 10485750 - .FARADDR 10485751 - .FARADDR 10485752 - .FARADDR 10485753 - .FARADDR 10485754 - .FARADDR 10485755 - .FARADDR 10485756 - .FARADDR 10485757 - .FARADDR 10485758 - .FARADDR 10485759 - .FARADDR 10485760 - .FARADDR 10485761 - .FARADDR 10485762 - .FARADDR 10485763 - .FARADDR 10485764 - .FARADDR 10485765 - .FARADDR 10485766 - .FARADDR 10485767 - .FARADDR 10485768 - .FARADDR 10485769 - .FARADDR 10485770 - .FARADDR 10485771 - .FARADDR 10485772 - .FARADDR 10485773 - .FARADDR 10485774 - .FARADDR 10485775 - .FARADDR 16777185 - .FARADDR 16777186 - .FARADDR 16777187 - .FARADDR 16777188 - .FARADDR 16777189 - .FARADDR 16777190 - .FARADDR 16777191 - .FARADDR 16777192 - .FARADDR 16777193 - .FARADDR 16777194 - .FARADDR 16777195 - .FARADDR 16777196 - .FARADDR 16777197 - .FARADDR 16777198 - .FARADDR 16777199 - .FARADDR 16777200 - .FARADDR 16777201 - .FARADDR 16777202 - .FARADDR 16777203 - .FARADDR 16777204 - .FARADDR 16777205 - .FARADDR 16777206 - .FARADDR 16777207 - .FARADDR 16777208 - .FARADDR 16777209 - .FARADDR 16777210 - .FARADDR 16777211 - .FARADDR 16777212 - .FARADDR 16777213 - .FARADDR 16777214 - .FARADDR 16777215 + ; upper case pseudo-op + .FARADDR 0 + .FARADDR 1 + .FARADDR 2 + .FARADDR 3 + .FARADDR 4 + .FARADDR 5 + .FARADDR 6 + .FARADDR 7 + .FARADDR 8 + .FARADDR 9 + .FARADDR 10 + .FARADDR 11 + .FARADDR 12 + .FARADDR 13 + .FARADDR 14 + .FARADDR 15 + .FARADDR 16 + .FARADDR 17 + .FARADDR 18 + .FARADDR 19 + .FARADDR 112 + .FARADDR 113 + .FARADDR 114 + .FARADDR 115 + .FARADDR 116 + .FARADDR 117 + .FARADDR 118 + .FARADDR 119 + .FARADDR 120 + .FARADDR 121 + .FARADDR 122 + .FARADDR 123 + .FARADDR 124 + .FARADDR 125 + .FARADDR 126 + .FARADDR 127 + .FARADDR 128 + .FARADDR 129 + .FARADDR 130 + .FARADDR 131 + .FARADDR 132 + .FARADDR 133 + .FARADDR 134 + .FARADDR 240 + .FARADDR 241 + .FARADDR 242 + .FARADDR 243 + .FARADDR 244 + .FARADDR 245 + .FARADDR 246 + .FARADDR 247 + .FARADDR 248 + .FARADDR 249 + .FARADDR 250 + .FARADDR 251 + .FARADDR 252 + .FARADDR 253 + .FARADDR 254 + .FARADDR 255 + .FARADDR 256 + .FARADDR 257 + .FARADDR 258 + .FARADDR 259 + .FARADDR 4050 + .FARADDR 4051 + .FARADDR 4052 + .FARADDR 4053 + .FARADDR 4054 + .FARADDR 4055 + .FARADDR 4056 + .FARADDR 4057 + .FARADDR 4058 + .FARADDR 4059 + .FARADDR 4060 + .FARADDR 4061 + .FARADDR 4062 + .FARADDR 4063 + .FARADDR 4064 + .FARADDR 4065 + .FARADDR 4066 + .FARADDR 4067 + .FARADDR 4068 + .FARADDR 4069 + .FARADDR 4070 + .FARADDR 4071 + .FARADDR 4072 + .FARADDR 4073 + .FARADDR 4074 + .FARADDR 4075 + .FARADDR 4076 + .FARADDR 4077 + .FARADDR 4078 + .FARADDR 4079 + .FARADDR 4080 + .FARADDR 4081 + .FARADDR 4082 + .FARADDR 4083 + .FARADDR 4084 + .FARADDR 4085 + .FARADDR 4086 + .FARADDR 4087 + .FARADDR 4088 + .FARADDR 4089 + .FARADDR 4090 + .FARADDR 4091 + .FARADDR 4092 + .FARADDR 4093 + .FARADDR 4094 + .FARADDR 4095 + .FARADDR 4096 + .FARADDR 4097 + .FARADDR 4098 + .FARADDR 4099 + .FARADDR 4100 + .FARADDR 4101 + .FARADDR 4102 + .FARADDR 4103 + .FARADDR 4104 + .FARADDR 32752 + .FARADDR 32753 + .FARADDR 32754 + .FARADDR 32755 + .FARADDR 32756 + .FARADDR 32757 + .FARADDR 32758 + .FARADDR 32759 + .FARADDR 32760 + .FARADDR 32761 + .FARADDR 32762 + .FARADDR 32763 + .FARADDR 32764 + .FARADDR 32765 + .FARADDR 32766 + .FARADDR 32767 + .FARADDR 32768 + .FARADDR 32769 + .FARADDR 32770 + .FARADDR 32771 + .FARADDR 32772 + .FARADDR 32773 + .FARADDR 32774 + .FARADDR 32775 + .FARADDR 32776 + .FARADDR 32777 + .FARADDR 32778 + .FARADDR 32779 + .FARADDR 40929 + .FARADDR 40930 + .FARADDR 40931 + .FARADDR 40932 + .FARADDR 40933 + .FARADDR 40934 + .FARADDR 40935 + .FARADDR 40936 + .FARADDR 40937 + .FARADDR 40938 + .FARADDR 40939 + .FARADDR 40940 + .FARADDR 40941 + .FARADDR 40942 + .FARADDR 40943 + .FARADDR 40944 + .FARADDR 40945 + .FARADDR 40946 + .FARADDR 40947 + .FARADDR 40948 + .FARADDR 40949 + .FARADDR 40950 + .FARADDR 40951 + .FARADDR 40952 + .FARADDR 40953 + .FARADDR 40954 + .FARADDR 40955 + .FARADDR 40956 + .FARADDR 40957 + .FARADDR 40958 + .FARADDR 40959 + .FARADDR 40960 + .FARADDR 40961 + .FARADDR 40962 + .FARADDR 40963 + .FARADDR 40964 + .FARADDR 40965 + .FARADDR 40966 + .FARADDR 40967 + .FARADDR 40968 + .FARADDR 40969 + .FARADDR 40970 + .FARADDR 40971 + .FARADDR 40972 + .FARADDR 40973 + .FARADDR 40974 + .FARADDR 40975 + .FARADDR 45025 + .FARADDR 45026 + .FARADDR 45027 + .FARADDR 45028 + .FARADDR 45029 + .FARADDR 45030 + .FARADDR 45031 + .FARADDR 45032 + .FARADDR 45033 + .FARADDR 45034 + .FARADDR 45035 + .FARADDR 45036 + .FARADDR 45037 + .FARADDR 45038 + .FARADDR 45039 + .FARADDR 45040 + .FARADDR 45041 + .FARADDR 45042 + .FARADDR 45043 + .FARADDR 45044 + .FARADDR 45045 + .FARADDR 45046 + .FARADDR 45047 + .FARADDR 45048 + .FARADDR 45049 + .FARADDR 45050 + .FARADDR 45051 + .FARADDR 45052 + .FARADDR 45053 + .FARADDR 45054 + .FARADDR 45055 + .FARADDR 45056 + .FARADDR 45057 + .FARADDR 45058 + .FARADDR 45059 + .FARADDR 45060 + .FARADDR 45061 + .FARADDR 45062 + .FARADDR 45063 + .FARADDR 45064 + .FARADDR 45065 + .FARADDR 45066 + .FARADDR 45067 + .FARADDR 45068 + .FARADDR 45069 + .FARADDR 45070 + .FARADDR 45071 + .FARADDR 65505 + .FARADDR 65506 + .FARADDR 65507 + .FARADDR 65508 + .FARADDR 65509 + .FARADDR 65510 + .FARADDR 65511 + .FARADDR 65512 + .FARADDR 65513 + .FARADDR 65514 + .FARADDR 65515 + .FARADDR 65516 + .FARADDR 65517 + .FARADDR 65518 + .FARADDR 65519 + .FARADDR 65520 + .FARADDR 65521 + .FARADDR 65522 + .FARADDR 65523 + .FARADDR 65524 + .FARADDR 65525 + .FARADDR 65526 + .FARADDR 65527 + .FARADDR 65528 + .FARADDR 65529 + .FARADDR 65530 + .FARADDR 65531 + .FARADDR 65532 + .FARADDR 65533 + .FARADDR 65534 + .FARADDR 65535 + .FARADDR 65536 + .FARADDR 65537 + .FARADDR 65538 + .FARADDR 65539 + .FARADDR 65540 + .FARADDR 65541 + .FARADDR 65542 + .FARADDR 65543 + .FARADDR 65544 + .FARADDR 65545 + .FARADDR 65546 + .FARADDR 65547 + .FARADDR 65548 + .FARADDR 65549 + .FARADDR 65550 + .FARADDR 65551 + .FARADDR 1114081 + .FARADDR 1114082 + .FARADDR 1114083 + .FARADDR 1114084 + .FARADDR 1114085 + .FARADDR 1114086 + .FARADDR 1114087 + .FARADDR 1114088 + .FARADDR 1114089 + .FARADDR 1114090 + .FARADDR 1114091 + .FARADDR 1114092 + .FARADDR 1114093 + .FARADDR 1114094 + .FARADDR 1114095 + .FARADDR 1114096 + .FARADDR 1114097 + .FARADDR 1114098 + .FARADDR 1114099 + .FARADDR 1114100 + .FARADDR 1114101 + .FARADDR 1114102 + .FARADDR 1114103 + .FARADDR 1114104 + .FARADDR 1114105 + .FARADDR 1114106 + .FARADDR 1114107 + .FARADDR 1114108 + .FARADDR 1114109 + .FARADDR 1114110 + .FARADDR 1114111 + .FARADDR 1114112 + .FARADDR 1114113 + .FARADDR 1114114 + .FARADDR 1114115 + .FARADDR 1114116 + .FARADDR 1114117 + .FARADDR 1114118 + .FARADDR 1114119 + .FARADDR 1114120 + .FARADDR 1114121 + .FARADDR 1114122 + .FARADDR 1114123 + .FARADDR 1114124 + .FARADDR 1114125 + .FARADDR 1114126 + .FARADDR 1114127 + .FARADDR 2162657 + .FARADDR 2162658 + .FARADDR 2162659 + .FARADDR 2162660 + .FARADDR 2162661 + .FARADDR 2162662 + .FARADDR 2162663 + .FARADDR 2162664 + .FARADDR 2162665 + .FARADDR 2162666 + .FARADDR 2162667 + .FARADDR 2162668 + .FARADDR 2162669 + .FARADDR 2162670 + .FARADDR 2162671 + .FARADDR 2162672 + .FARADDR 2162673 + .FARADDR 2162674 + .FARADDR 2162675 + .FARADDR 2162676 + .FARADDR 2162677 + .FARADDR 2162678 + .FARADDR 2162679 + .FARADDR 2162680 + .FARADDR 2162681 + .FARADDR 2162682 + .FARADDR 2162683 + .FARADDR 2162684 + .FARADDR 2162685 + .FARADDR 2162686 + .FARADDR 2162687 + .FARADDR 2162688 + .FARADDR 2162689 + .FARADDR 2162690 + .FARADDR 2162691 + .FARADDR 2162692 + .FARADDR 2162693 + .FARADDR 2162694 + .FARADDR 2162695 + .FARADDR 2162696 + .FARADDR 2162697 + .FARADDR 2162698 + .FARADDR 2162699 + .FARADDR 2162700 + .FARADDR 2162701 + .FARADDR 2162702 + .FARADDR 2162703 + .FARADDR 8388577 + .FARADDR 8388578 + .FARADDR 8388579 + .FARADDR 8388580 + .FARADDR 8388581 + .FARADDR 8388582 + .FARADDR 8388583 + .FARADDR 8388584 + .FARADDR 8388585 + .FARADDR 8388586 + .FARADDR 8388587 + .FARADDR 8388588 + .FARADDR 8388589 + .FARADDR 8388590 + .FARADDR 8388591 + .FARADDR 8388592 + .FARADDR 8388593 + .FARADDR 8388594 + .FARADDR 8388595 + .FARADDR 8388596 + .FARADDR 8388597 + .FARADDR 8388598 + .FARADDR 8388599 + .FARADDR 8388600 + .FARADDR 8388601 + .FARADDR 8388602 + .FARADDR 8388603 + .FARADDR 8388604 + .FARADDR 8388605 + .FARADDR 8388606 + .FARADDR 8388607 + .FARADDR 8388608 + .FARADDR 8388609 + .FARADDR 8388610 + .FARADDR 8388611 + .FARADDR 8388612 + .FARADDR 8388613 + .FARADDR 8388614 + .FARADDR 8388615 + .FARADDR 8388616 + .FARADDR 8388617 + .FARADDR 8388618 + .FARADDR 8388619 + .FARADDR 8388620 + .FARADDR 8388621 + .FARADDR 8388622 + .FARADDR 8388623 + .FARADDR 10485729 + .FARADDR 10485730 + .FARADDR 10485731 + .FARADDR 10485732 + .FARADDR 10485733 + .FARADDR 10485734 + .FARADDR 10485735 + .FARADDR 10485736 + .FARADDR 10485737 + .FARADDR 10485738 + .FARADDR 10485739 + .FARADDR 10485740 + .FARADDR 10485741 + .FARADDR 10485742 + .FARADDR 10485743 + .FARADDR 10485744 + .FARADDR 10485745 + .FARADDR 10485746 + .FARADDR 10485747 + .FARADDR 10485748 + .FARADDR 10485749 + .FARADDR 10485750 + .FARADDR 10485751 + .FARADDR 10485752 + .FARADDR 10485753 + .FARADDR 10485754 + .FARADDR 10485755 + .FARADDR 10485756 + .FARADDR 10485757 + .FARADDR 10485758 + .FARADDR 10485759 + .FARADDR 10485760 + .FARADDR 10485761 + .FARADDR 10485762 + .FARADDR 10485763 + .FARADDR 10485764 + .FARADDR 10485765 + .FARADDR 10485766 + .FARADDR 10485767 + .FARADDR 10485768 + .FARADDR 10485769 + .FARADDR 10485770 + .FARADDR 10485771 + .FARADDR 10485772 + .FARADDR 10485773 + .FARADDR 10485774 + .FARADDR 10485775 + .FARADDR 16777185 + .FARADDR 16777186 + .FARADDR 16777187 + .FARADDR 16777188 + .FARADDR 16777189 + .FARADDR 16777190 + .FARADDR 16777191 + .FARADDR 16777192 + .FARADDR 16777193 + .FARADDR 16777194 + .FARADDR 16777195 + .FARADDR 16777196 + .FARADDR 16777197 + .FARADDR 16777198 + .FARADDR 16777199 + .FARADDR 16777200 + .FARADDR 16777201 + .FARADDR 16777202 + .FARADDR 16777203 + .FARADDR 16777204 + .FARADDR 16777205 + .FARADDR 16777206 + .FARADDR 16777207 + .FARADDR 16777208 + .FARADDR 16777209 + .FARADDR 16777210 + .FARADDR 16777211 + .FARADDR 16777212 + .FARADDR 16777213 + .FARADDR 16777214 + .FARADDR 16777215 - ; lower case pseudo-op - .faraddr 0 - .faraddr 1 - .faraddr 2 - .faraddr 3 - .faraddr 4 - .faraddr 5 - .faraddr 6 - .faraddr 7 - .faraddr 8 - .faraddr 9 - .faraddr 10 - .faraddr 11 - .faraddr 12 - .faraddr 13 - .faraddr 14 - .faraddr 15 - .faraddr 16 - .faraddr 17 - .faraddr 18 - .faraddr 19 - .faraddr 112 - .faraddr 113 - .faraddr 114 - .faraddr 115 - .faraddr 116 - .faraddr 117 - .faraddr 118 - .faraddr 119 - .faraddr 120 - .faraddr 121 - .faraddr 122 - .faraddr 123 - .faraddr 124 - .faraddr 125 - .faraddr 126 - .faraddr 127 - .faraddr 128 - .faraddr 129 - .faraddr 130 - .faraddr 131 - .faraddr 132 - .faraddr 133 - .faraddr 134 - .faraddr 240 - .faraddr 241 - .faraddr 242 - .faraddr 243 - .faraddr 244 - .faraddr 245 - .faraddr 246 - .faraddr 247 - .faraddr 248 - .faraddr 249 - .faraddr 250 - .faraddr 251 - .faraddr 252 - .faraddr 253 - .faraddr 254 - .faraddr 255 - .faraddr 256 - .faraddr 257 - .faraddr 258 - .faraddr 259 - .faraddr 4050 - .faraddr 4051 - .faraddr 4052 - .faraddr 4053 - .faraddr 4054 - .faraddr 4055 - .faraddr 4056 - .faraddr 4057 - .faraddr 4058 - .faraddr 4059 - .faraddr 4060 - .faraddr 4061 - .faraddr 4062 - .faraddr 4063 - .faraddr 4064 - .faraddr 4065 - .faraddr 4066 - .faraddr 4067 - .faraddr 4068 - .faraddr 4069 - .faraddr 4070 - .faraddr 4071 - .faraddr 4072 - .faraddr 4073 - .faraddr 4074 - .faraddr 4075 - .faraddr 4076 - .faraddr 4077 - .faraddr 4078 - .faraddr 4079 - .faraddr 4080 - .faraddr 4081 - .faraddr 4082 - .faraddr 4083 - .faraddr 4084 - .faraddr 4085 - .faraddr 4086 - .faraddr 4087 - .faraddr 4088 - .faraddr 4089 - .faraddr 4090 - .faraddr 4091 - .faraddr 4092 - .faraddr 4093 - .faraddr 4094 - .faraddr 4095 - .faraddr 4096 - .faraddr 4097 - .faraddr 4098 - .faraddr 4099 - .faraddr 4100 - .faraddr 4101 - .faraddr 4102 - .faraddr 4103 - .faraddr 4104 - .faraddr 32752 - .faraddr 32753 - .faraddr 32754 - .faraddr 32755 - .faraddr 32756 - .faraddr 32757 - .faraddr 32758 - .faraddr 32759 - .faraddr 32760 - .faraddr 32761 - .faraddr 32762 - .faraddr 32763 - .faraddr 32764 - .faraddr 32765 - .faraddr 32766 - .faraddr 32767 - .faraddr 32768 - .faraddr 32769 - .faraddr 32770 - .faraddr 32771 - .faraddr 32772 - .faraddr 32773 - .faraddr 32774 - .faraddr 32775 - .faraddr 32776 - .faraddr 32777 - .faraddr 32778 - .faraddr 32779 - .faraddr 40929 - .faraddr 40930 - .faraddr 40931 - .faraddr 40932 - .faraddr 40933 - .faraddr 40934 - .faraddr 40935 - .faraddr 40936 - .faraddr 40937 - .faraddr 40938 - .faraddr 40939 - .faraddr 40940 - .faraddr 40941 - .faraddr 40942 - .faraddr 40943 - .faraddr 40944 - .faraddr 40945 - .faraddr 40946 - .faraddr 40947 - .faraddr 40948 - .faraddr 40949 - .faraddr 40950 - .faraddr 40951 - .faraddr 40952 - .faraddr 40953 - .faraddr 40954 - .faraddr 40955 - .faraddr 40956 - .faraddr 40957 - .faraddr 40958 - .faraddr 40959 - .faraddr 40960 - .faraddr 40961 - .faraddr 40962 - .faraddr 40963 - .faraddr 40964 - .faraddr 40965 - .faraddr 40966 - .faraddr 40967 - .faraddr 40968 - .faraddr 40969 - .faraddr 40970 - .faraddr 40971 - .faraddr 40972 - .faraddr 40973 - .faraddr 40974 - .faraddr 40975 - .faraddr 45025 - .faraddr 45026 - .faraddr 45027 - .faraddr 45028 - .faraddr 45029 - .faraddr 45030 - .faraddr 45031 - .faraddr 45032 - .faraddr 45033 - .faraddr 45034 - .faraddr 45035 - .faraddr 45036 - .faraddr 45037 - .faraddr 45038 - .faraddr 45039 - .faraddr 45040 - .faraddr 45041 - .faraddr 45042 - .faraddr 45043 - .faraddr 45044 - .faraddr 45045 - .faraddr 45046 - .faraddr 45047 - .faraddr 45048 - .faraddr 45049 - .faraddr 45050 - .faraddr 45051 - .faraddr 45052 - .faraddr 45053 - .faraddr 45054 - .faraddr 45055 - .faraddr 45056 - .faraddr 45057 - .faraddr 45058 - .faraddr 45059 - .faraddr 45060 - .faraddr 45061 - .faraddr 45062 - .faraddr 45063 - .faraddr 45064 - .faraddr 45065 - .faraddr 45066 - .faraddr 45067 - .faraddr 45068 - .faraddr 45069 - .faraddr 45070 - .faraddr 45071 - .faraddr 65505 - .faraddr 65506 - .faraddr 65507 - .faraddr 65508 - .faraddr 65509 - .faraddr 65510 - .faraddr 65511 - .faraddr 65512 - .faraddr 65513 - .faraddr 65514 - .faraddr 65515 - .faraddr 65516 - .faraddr 65517 - .faraddr 65518 - .faraddr 65519 - .faraddr 65520 - .faraddr 65521 - .faraddr 65522 - .faraddr 65523 - .faraddr 65524 - .faraddr 65525 - .faraddr 65526 - .faraddr 65527 - .faraddr 65528 - .faraddr 65529 - .faraddr 65530 - .faraddr 65531 - .faraddr 65532 - .faraddr 65533 - .faraddr 65534 - .faraddr 65535 - .faraddr 65536 - .faraddr 65537 - .faraddr 65538 - .faraddr 65539 - .faraddr 65540 - .faraddr 65541 - .faraddr 65542 - .faraddr 65543 - .faraddr 65544 - .faraddr 65545 - .faraddr 65546 - .faraddr 65547 - .faraddr 65548 - .faraddr 65549 - .faraddr 65550 - .faraddr 65551 - .faraddr 1114081 - .faraddr 1114082 - .faraddr 1114083 - .faraddr 1114084 - .faraddr 1114085 - .faraddr 1114086 - .faraddr 1114087 - .faraddr 1114088 - .faraddr 1114089 - .faraddr 1114090 - .faraddr 1114091 - .faraddr 1114092 - .faraddr 1114093 - .faraddr 1114094 - .faraddr 1114095 - .faraddr 1114096 - .faraddr 1114097 - .faraddr 1114098 - .faraddr 1114099 - .faraddr 1114100 - .faraddr 1114101 - .faraddr 1114102 - .faraddr 1114103 - .faraddr 1114104 - .faraddr 1114105 - .faraddr 1114106 - .faraddr 1114107 - .faraddr 1114108 - .faraddr 1114109 - .faraddr 1114110 - .faraddr 1114111 - .faraddr 1114112 - .faraddr 1114113 - .faraddr 1114114 - .faraddr 1114115 - .faraddr 1114116 - .faraddr 1114117 - .faraddr 1114118 - .faraddr 1114119 - .faraddr 1114120 - .faraddr 1114121 - .faraddr 1114122 - .faraddr 1114123 - .faraddr 1114124 - .faraddr 1114125 - .faraddr 1114126 - .faraddr 1114127 - .faraddr 2162657 - .faraddr 2162658 - .faraddr 2162659 - .faraddr 2162660 - .faraddr 2162661 - .faraddr 2162662 - .faraddr 2162663 - .faraddr 2162664 - .faraddr 2162665 - .faraddr 2162666 - .faraddr 2162667 - .faraddr 2162668 - .faraddr 2162669 - .faraddr 2162670 - .faraddr 2162671 - .faraddr 2162672 - .faraddr 2162673 - .faraddr 2162674 - .faraddr 2162675 - .faraddr 2162676 - .faraddr 2162677 - .faraddr 2162678 - .faraddr 2162679 - .faraddr 2162680 - .faraddr 2162681 - .faraddr 2162682 - .faraddr 2162683 - .faraddr 2162684 - .faraddr 2162685 - .faraddr 2162686 - .faraddr 2162687 - .faraddr 2162688 - .faraddr 2162689 - .faraddr 2162690 - .faraddr 2162691 - .faraddr 2162692 - .faraddr 2162693 - .faraddr 2162694 - .faraddr 2162695 - .faraddr 2162696 - .faraddr 2162697 - .faraddr 2162698 - .faraddr 2162699 - .faraddr 2162700 - .faraddr 2162701 - .faraddr 2162702 - .faraddr 2162703 - .faraddr 8388577 - .faraddr 8388578 - .faraddr 8388579 - .faraddr 8388580 - .faraddr 8388581 - .faraddr 8388582 - .faraddr 8388583 - .faraddr 8388584 - .faraddr 8388585 - .faraddr 8388586 - .faraddr 8388587 - .faraddr 8388588 - .faraddr 8388589 - .faraddr 8388590 - .faraddr 8388591 - .faraddr 8388592 - .faraddr 8388593 - .faraddr 8388594 - .faraddr 8388595 - .faraddr 8388596 - .faraddr 8388597 - .faraddr 8388598 - .faraddr 8388599 - .faraddr 8388600 - .faraddr 8388601 - .faraddr 8388602 - .faraddr 8388603 - .faraddr 8388604 - .faraddr 8388605 - .faraddr 8388606 - .faraddr 8388607 - .faraddr 8388608 - .faraddr 8388609 - .faraddr 8388610 - .faraddr 8388611 - .faraddr 8388612 - .faraddr 8388613 - .faraddr 8388614 - .faraddr 8388615 - .faraddr 8388616 - .faraddr 8388617 - .faraddr 8388618 - .faraddr 8388619 - .faraddr 8388620 - .faraddr 8388621 - .faraddr 8388622 - .faraddr 8388623 - .faraddr 10485729 - .faraddr 10485730 - .faraddr 10485731 - .faraddr 10485732 - .faraddr 10485733 - .faraddr 10485734 - .faraddr 10485735 - .faraddr 10485736 - .faraddr 10485737 - .faraddr 10485738 - .faraddr 10485739 - .faraddr 10485740 - .faraddr 10485741 - .faraddr 10485742 - .faraddr 10485743 - .faraddr 10485744 - .faraddr 10485745 - .faraddr 10485746 - .faraddr 10485747 - .faraddr 10485748 - .faraddr 10485749 - .faraddr 10485750 - .faraddr 10485751 - .faraddr 10485752 - .faraddr 10485753 - .faraddr 10485754 - .faraddr 10485755 - .faraddr 10485756 - .faraddr 10485757 - .faraddr 10485758 - .faraddr 10485759 - .faraddr 10485760 - .faraddr 10485761 - .faraddr 10485762 - .faraddr 10485763 - .faraddr 10485764 - .faraddr 10485765 - .faraddr 10485766 - .faraddr 10485767 - .faraddr 10485768 - .faraddr 10485769 - .faraddr 10485770 - .faraddr 10485771 - .faraddr 10485772 - .faraddr 10485773 - .faraddr 10485774 - .faraddr 10485775 - .faraddr 16777185 - .faraddr 16777186 - .faraddr 16777187 - .faraddr 16777188 - .faraddr 16777189 - .faraddr 16777190 - .faraddr 16777191 - .faraddr 16777192 - .faraddr 16777193 - .faraddr 16777194 - .faraddr 16777195 - .faraddr 16777196 - .faraddr 16777197 - .faraddr 16777198 - .faraddr 16777199 - .faraddr 16777200 - .faraddr 16777201 - .faraddr 16777202 - .faraddr 16777203 - .faraddr 16777204 - .faraddr 16777205 - .faraddr 16777206 - .faraddr 16777207 - .faraddr 16777208 - .faraddr 16777209 - .faraddr 16777210 - .faraddr 16777211 - .faraddr 16777212 - .faraddr 16777213 - .faraddr 16777214 - .faraddr 16777215 + ; lower case pseudo-op + .faraddr 0 + .faraddr 1 + .faraddr 2 + .faraddr 3 + .faraddr 4 + .faraddr 5 + .faraddr 6 + .faraddr 7 + .faraddr 8 + .faraddr 9 + .faraddr 10 + .faraddr 11 + .faraddr 12 + .faraddr 13 + .faraddr 14 + .faraddr 15 + .faraddr 16 + .faraddr 17 + .faraddr 18 + .faraddr 19 + .faraddr 112 + .faraddr 113 + .faraddr 114 + .faraddr 115 + .faraddr 116 + .faraddr 117 + .faraddr 118 + .faraddr 119 + .faraddr 120 + .faraddr 121 + .faraddr 122 + .faraddr 123 + .faraddr 124 + .faraddr 125 + .faraddr 126 + .faraddr 127 + .faraddr 128 + .faraddr 129 + .faraddr 130 + .faraddr 131 + .faraddr 132 + .faraddr 133 + .faraddr 134 + .faraddr 240 + .faraddr 241 + .faraddr 242 + .faraddr 243 + .faraddr 244 + .faraddr 245 + .faraddr 246 + .faraddr 247 + .faraddr 248 + .faraddr 249 + .faraddr 250 + .faraddr 251 + .faraddr 252 + .faraddr 253 + .faraddr 254 + .faraddr 255 + .faraddr 256 + .faraddr 257 + .faraddr 258 + .faraddr 259 + .faraddr 4050 + .faraddr 4051 + .faraddr 4052 + .faraddr 4053 + .faraddr 4054 + .faraddr 4055 + .faraddr 4056 + .faraddr 4057 + .faraddr 4058 + .faraddr 4059 + .faraddr 4060 + .faraddr 4061 + .faraddr 4062 + .faraddr 4063 + .faraddr 4064 + .faraddr 4065 + .faraddr 4066 + .faraddr 4067 + .faraddr 4068 + .faraddr 4069 + .faraddr 4070 + .faraddr 4071 + .faraddr 4072 + .faraddr 4073 + .faraddr 4074 + .faraddr 4075 + .faraddr 4076 + .faraddr 4077 + .faraddr 4078 + .faraddr 4079 + .faraddr 4080 + .faraddr 4081 + .faraddr 4082 + .faraddr 4083 + .faraddr 4084 + .faraddr 4085 + .faraddr 4086 + .faraddr 4087 + .faraddr 4088 + .faraddr 4089 + .faraddr 4090 + .faraddr 4091 + .faraddr 4092 + .faraddr 4093 + .faraddr 4094 + .faraddr 4095 + .faraddr 4096 + .faraddr 4097 + .faraddr 4098 + .faraddr 4099 + .faraddr 4100 + .faraddr 4101 + .faraddr 4102 + .faraddr 4103 + .faraddr 4104 + .faraddr 32752 + .faraddr 32753 + .faraddr 32754 + .faraddr 32755 + .faraddr 32756 + .faraddr 32757 + .faraddr 32758 + .faraddr 32759 + .faraddr 32760 + .faraddr 32761 + .faraddr 32762 + .faraddr 32763 + .faraddr 32764 + .faraddr 32765 + .faraddr 32766 + .faraddr 32767 + .faraddr 32768 + .faraddr 32769 + .faraddr 32770 + .faraddr 32771 + .faraddr 32772 + .faraddr 32773 + .faraddr 32774 + .faraddr 32775 + .faraddr 32776 + .faraddr 32777 + .faraddr 32778 + .faraddr 32779 + .faraddr 40929 + .faraddr 40930 + .faraddr 40931 + .faraddr 40932 + .faraddr 40933 + .faraddr 40934 + .faraddr 40935 + .faraddr 40936 + .faraddr 40937 + .faraddr 40938 + .faraddr 40939 + .faraddr 40940 + .faraddr 40941 + .faraddr 40942 + .faraddr 40943 + .faraddr 40944 + .faraddr 40945 + .faraddr 40946 + .faraddr 40947 + .faraddr 40948 + .faraddr 40949 + .faraddr 40950 + .faraddr 40951 + .faraddr 40952 + .faraddr 40953 + .faraddr 40954 + .faraddr 40955 + .faraddr 40956 + .faraddr 40957 + .faraddr 40958 + .faraddr 40959 + .faraddr 40960 + .faraddr 40961 + .faraddr 40962 + .faraddr 40963 + .faraddr 40964 + .faraddr 40965 + .faraddr 40966 + .faraddr 40967 + .faraddr 40968 + .faraddr 40969 + .faraddr 40970 + .faraddr 40971 + .faraddr 40972 + .faraddr 40973 + .faraddr 40974 + .faraddr 40975 + .faraddr 45025 + .faraddr 45026 + .faraddr 45027 + .faraddr 45028 + .faraddr 45029 + .faraddr 45030 + .faraddr 45031 + .faraddr 45032 + .faraddr 45033 + .faraddr 45034 + .faraddr 45035 + .faraddr 45036 + .faraddr 45037 + .faraddr 45038 + .faraddr 45039 + .faraddr 45040 + .faraddr 45041 + .faraddr 45042 + .faraddr 45043 + .faraddr 45044 + .faraddr 45045 + .faraddr 45046 + .faraddr 45047 + .faraddr 45048 + .faraddr 45049 + .faraddr 45050 + .faraddr 45051 + .faraddr 45052 + .faraddr 45053 + .faraddr 45054 + .faraddr 45055 + .faraddr 45056 + .faraddr 45057 + .faraddr 45058 + .faraddr 45059 + .faraddr 45060 + .faraddr 45061 + .faraddr 45062 + .faraddr 45063 + .faraddr 45064 + .faraddr 45065 + .faraddr 45066 + .faraddr 45067 + .faraddr 45068 + .faraddr 45069 + .faraddr 45070 + .faraddr 45071 + .faraddr 65505 + .faraddr 65506 + .faraddr 65507 + .faraddr 65508 + .faraddr 65509 + .faraddr 65510 + .faraddr 65511 + .faraddr 65512 + .faraddr 65513 + .faraddr 65514 + .faraddr 65515 + .faraddr 65516 + .faraddr 65517 + .faraddr 65518 + .faraddr 65519 + .faraddr 65520 + .faraddr 65521 + .faraddr 65522 + .faraddr 65523 + .faraddr 65524 + .faraddr 65525 + .faraddr 65526 + .faraddr 65527 + .faraddr 65528 + .faraddr 65529 + .faraddr 65530 + .faraddr 65531 + .faraddr 65532 + .faraddr 65533 + .faraddr 65534 + .faraddr 65535 + .faraddr 65536 + .faraddr 65537 + .faraddr 65538 + .faraddr 65539 + .faraddr 65540 + .faraddr 65541 + .faraddr 65542 + .faraddr 65543 + .faraddr 65544 + .faraddr 65545 + .faraddr 65546 + .faraddr 65547 + .faraddr 65548 + .faraddr 65549 + .faraddr 65550 + .faraddr 65551 + .faraddr 1114081 + .faraddr 1114082 + .faraddr 1114083 + .faraddr 1114084 + .faraddr 1114085 + .faraddr 1114086 + .faraddr 1114087 + .faraddr 1114088 + .faraddr 1114089 + .faraddr 1114090 + .faraddr 1114091 + .faraddr 1114092 + .faraddr 1114093 + .faraddr 1114094 + .faraddr 1114095 + .faraddr 1114096 + .faraddr 1114097 + .faraddr 1114098 + .faraddr 1114099 + .faraddr 1114100 + .faraddr 1114101 + .faraddr 1114102 + .faraddr 1114103 + .faraddr 1114104 + .faraddr 1114105 + .faraddr 1114106 + .faraddr 1114107 + .faraddr 1114108 + .faraddr 1114109 + .faraddr 1114110 + .faraddr 1114111 + .faraddr 1114112 + .faraddr 1114113 + .faraddr 1114114 + .faraddr 1114115 + .faraddr 1114116 + .faraddr 1114117 + .faraddr 1114118 + .faraddr 1114119 + .faraddr 1114120 + .faraddr 1114121 + .faraddr 1114122 + .faraddr 1114123 + .faraddr 1114124 + .faraddr 1114125 + .faraddr 1114126 + .faraddr 1114127 + .faraddr 2162657 + .faraddr 2162658 + .faraddr 2162659 + .faraddr 2162660 + .faraddr 2162661 + .faraddr 2162662 + .faraddr 2162663 + .faraddr 2162664 + .faraddr 2162665 + .faraddr 2162666 + .faraddr 2162667 + .faraddr 2162668 + .faraddr 2162669 + .faraddr 2162670 + .faraddr 2162671 + .faraddr 2162672 + .faraddr 2162673 + .faraddr 2162674 + .faraddr 2162675 + .faraddr 2162676 + .faraddr 2162677 + .faraddr 2162678 + .faraddr 2162679 + .faraddr 2162680 + .faraddr 2162681 + .faraddr 2162682 + .faraddr 2162683 + .faraddr 2162684 + .faraddr 2162685 + .faraddr 2162686 + .faraddr 2162687 + .faraddr 2162688 + .faraddr 2162689 + .faraddr 2162690 + .faraddr 2162691 + .faraddr 2162692 + .faraddr 2162693 + .faraddr 2162694 + .faraddr 2162695 + .faraddr 2162696 + .faraddr 2162697 + .faraddr 2162698 + .faraddr 2162699 + .faraddr 2162700 + .faraddr 2162701 + .faraddr 2162702 + .faraddr 2162703 + .faraddr 8388577 + .faraddr 8388578 + .faraddr 8388579 + .faraddr 8388580 + .faraddr 8388581 + .faraddr 8388582 + .faraddr 8388583 + .faraddr 8388584 + .faraddr 8388585 + .faraddr 8388586 + .faraddr 8388587 + .faraddr 8388588 + .faraddr 8388589 + .faraddr 8388590 + .faraddr 8388591 + .faraddr 8388592 + .faraddr 8388593 + .faraddr 8388594 + .faraddr 8388595 + .faraddr 8388596 + .faraddr 8388597 + .faraddr 8388598 + .faraddr 8388599 + .faraddr 8388600 + .faraddr 8388601 + .faraddr 8388602 + .faraddr 8388603 + .faraddr 8388604 + .faraddr 8388605 + .faraddr 8388606 + .faraddr 8388607 + .faraddr 8388608 + .faraddr 8388609 + .faraddr 8388610 + .faraddr 8388611 + .faraddr 8388612 + .faraddr 8388613 + .faraddr 8388614 + .faraddr 8388615 + .faraddr 8388616 + .faraddr 8388617 + .faraddr 8388618 + .faraddr 8388619 + .faraddr 8388620 + .faraddr 8388621 + .faraddr 8388622 + .faraddr 8388623 + .faraddr 10485729 + .faraddr 10485730 + .faraddr 10485731 + .faraddr 10485732 + .faraddr 10485733 + .faraddr 10485734 + .faraddr 10485735 + .faraddr 10485736 + .faraddr 10485737 + .faraddr 10485738 + .faraddr 10485739 + .faraddr 10485740 + .faraddr 10485741 + .faraddr 10485742 + .faraddr 10485743 + .faraddr 10485744 + .faraddr 10485745 + .faraddr 10485746 + .faraddr 10485747 + .faraddr 10485748 + .faraddr 10485749 + .faraddr 10485750 + .faraddr 10485751 + .faraddr 10485752 + .faraddr 10485753 + .faraddr 10485754 + .faraddr 10485755 + .faraddr 10485756 + .faraddr 10485757 + .faraddr 10485758 + .faraddr 10485759 + .faraddr 10485760 + .faraddr 10485761 + .faraddr 10485762 + .faraddr 10485763 + .faraddr 10485764 + .faraddr 10485765 + .faraddr 10485766 + .faraddr 10485767 + .faraddr 10485768 + .faraddr 10485769 + .faraddr 10485770 + .faraddr 10485771 + .faraddr 10485772 + .faraddr 10485773 + .faraddr 10485774 + .faraddr 10485775 + .faraddr 16777185 + .faraddr 16777186 + .faraddr 16777187 + .faraddr 16777188 + .faraddr 16777189 + .faraddr 16777190 + .faraddr 16777191 + .faraddr 16777192 + .faraddr 16777193 + .faraddr 16777194 + .faraddr 16777195 + .faraddr 16777196 + .faraddr 16777197 + .faraddr 16777198 + .faraddr 16777199 + .faraddr 16777200 + .faraddr 16777201 + .faraddr 16777202 + .faraddr 16777203 + .faraddr 16777204 + .faraddr 16777205 + .faraddr 16777206 + .faraddr 16777207 + .faraddr 16777208 + .faraddr 16777209 + .faraddr 16777210 + .faraddr 16777211 + .faraddr 16777212 + .faraddr 16777213 + .faraddr 16777214 + .faraddr 16777215 - ; hex values - .faraddr $0 - .faraddr $1 - .faraddr $2 - .faraddr $3 - .faraddr $4 - .faraddr $5 - .faraddr $6 - .faraddr $7 - .faraddr $8 - .faraddr $9 - .faraddr $a - .faraddr $b - .faraddr $c - .faraddr $d - .faraddr $e - .faraddr $f - .faraddr $10 - .faraddr $11 - .faraddr $12 - .faraddr $13 - .faraddr $70 - .faraddr $71 - .faraddr $72 - .faraddr $73 - .faraddr $74 - .faraddr $75 - .faraddr $76 - .faraddr $77 - .faraddr $78 - .faraddr $79 - .faraddr $7a - .faraddr $7b - .faraddr $7c - .faraddr $7d - .faraddr $7e - .faraddr $7f - .faraddr $80 - .faraddr $81 - .faraddr $82 - .faraddr $83 - .faraddr $84 - .faraddr $85 - .faraddr $86 - .faraddr $f0 - .faraddr $f1 - .faraddr $f2 - .faraddr $f3 - .faraddr $f4 - .faraddr $f5 - .faraddr $f6 - .faraddr $f7 - .faraddr $f8 - .faraddr $f9 - .faraddr $fa - .faraddr $fb - .faraddr $fc - .faraddr $fd - .faraddr $fe - .faraddr $ff - .faraddr $100 - .faraddr $101 - .faraddr $102 - .faraddr $103 - .faraddr $fd2 - .faraddr $fd3 - .faraddr $fd4 - .faraddr $fd5 - .faraddr $fd6 - .faraddr $fd7 - .faraddr $fd8 - .faraddr $fd9 - .faraddr $fda - .faraddr $fdb - .faraddr $fdc - .faraddr $fdd - .faraddr $fde - .faraddr $fdf - .faraddr $fe0 - .faraddr $fe1 - .faraddr $fe2 - .faraddr $fe3 - .faraddr $fe4 - .faraddr $fe5 - .faraddr $fe6 - .faraddr $fe7 - .faraddr $fe8 - .faraddr $fe9 - .faraddr $fea - .faraddr $feb - .faraddr $fec - .faraddr $fed - .faraddr $fee - .faraddr $fef - .faraddr $ff0 - .faraddr $ff1 - .faraddr $ff2 - .faraddr $ff3 - .faraddr $ff4 - .faraddr $ff5 - .faraddr $ff6 - .faraddr $ff7 - .faraddr $ff8 - .faraddr $ff9 - .faraddr $ffa - .faraddr $ffb - .faraddr $ffc - .faraddr $ffd - .faraddr $ffe - .faraddr $fff - .faraddr $1000 - .faraddr $1001 - .faraddr $1002 - .faraddr $1003 - .faraddr $1004 - .faraddr $1005 - .faraddr $1006 - .faraddr $1007 - .faraddr $1008 - .faraddr $7ff0 - .faraddr $7ff1 - .faraddr $7ff2 - .faraddr $7ff3 - .faraddr $7ff4 - .faraddr $7ff5 - .faraddr $7ff6 - .faraddr $7ff7 - .faraddr $7ff8 - .faraddr $7ff9 - .faraddr $7ffa - .faraddr $7ffb - .faraddr $7ffc - .faraddr $7ffd - .faraddr $7ffe - .faraddr $7fff - .faraddr $8000 - .faraddr $8001 - .faraddr $8002 - .faraddr $8003 - .faraddr $8004 - .faraddr $8005 - .faraddr $8006 - .faraddr $8007 - .faraddr $8008 - .faraddr $8009 - .faraddr $800a - .faraddr $800b - .faraddr $9fe1 - .faraddr $9fe2 - .faraddr $9fe3 - .faraddr $9fe4 - .faraddr $9fe5 - .faraddr $9fe6 - .faraddr $9fe7 - .faraddr $9fe8 - .faraddr $9fe9 - .faraddr $9fea - .faraddr $9feb - .faraddr $9fec - .faraddr $9fed - .faraddr $9fee - .faraddr $9fef - .faraddr $9ff0 - .faraddr $9ff1 - .faraddr $9ff2 - .faraddr $9ff3 - .faraddr $9ff4 - .faraddr $9ff5 - .faraddr $9ff6 - .faraddr $9ff7 - .faraddr $9ff8 - .faraddr $9ff9 - .faraddr $9ffa - .faraddr $9ffb - .faraddr $9ffc - .faraddr $9ffd - .faraddr $9ffe - .faraddr $9fff - .faraddr $a000 - .faraddr $a001 - .faraddr $a002 - .faraddr $a003 - .faraddr $a004 - .faraddr $a005 - .faraddr $a006 - .faraddr $a007 - .faraddr $a008 - .faraddr $a009 - .faraddr $a00a - .faraddr $a00b - .faraddr $a00c - .faraddr $a00d - .faraddr $a00e - .faraddr $a00f - .faraddr $afe1 - .faraddr $afe2 - .faraddr $afe3 - .faraddr $afe4 - .faraddr $afe5 - .faraddr $afe6 - .faraddr $afe7 - .faraddr $afe8 - .faraddr $afe9 - .faraddr $afea - .faraddr $afeb - .faraddr $afec - .faraddr $afed - .faraddr $afee - .faraddr $afef - .faraddr $aff0 - .faraddr $aff1 - .faraddr $aff2 - .faraddr $aff3 - .faraddr $aff4 - .faraddr $aff5 - .faraddr $aff6 - .faraddr $aff7 - .faraddr $aff8 - .faraddr $aff9 - .faraddr $affa - .faraddr $affb - .faraddr $affc - .faraddr $affd - .faraddr $affe - .faraddr $afff - .faraddr $b000 - .faraddr $b001 - .faraddr $b002 - .faraddr $b003 - .faraddr $b004 - .faraddr $b005 - .faraddr $b006 - .faraddr $b007 - .faraddr $b008 - .faraddr $b009 - .faraddr $b00a - .faraddr $b00b - .faraddr $b00c - .faraddr $b00d - .faraddr $b00e - .faraddr $b00f - .faraddr $ffe1 - .faraddr $ffe2 - .faraddr $ffe3 - .faraddr $ffe4 - .faraddr $ffe5 - .faraddr $ffe6 - .faraddr $ffe7 - .faraddr $ffe8 - .faraddr $ffe9 - .faraddr $ffea - .faraddr $ffeb - .faraddr $ffec - .faraddr $ffed - .faraddr $ffee - .faraddr $ffef - .faraddr $fff0 - .faraddr $fff1 - .faraddr $fff2 - .faraddr $fff3 - .faraddr $fff4 - .faraddr $fff5 - .faraddr $fff6 - .faraddr $fff7 - .faraddr $fff8 - .faraddr $fff9 - .faraddr $fffa - .faraddr $fffb - .faraddr $fffc - .faraddr $fffd - .faraddr $fffe - .faraddr $ffff - .faraddr $10000 - .faraddr $10001 - .faraddr $10002 - .faraddr $10003 - .faraddr $10004 - .faraddr $10005 - .faraddr $10006 - .faraddr $10007 - .faraddr $10008 - .faraddr $10009 - .faraddr $1000a - .faraddr $1000b - .faraddr $1000c - .faraddr $1000d - .faraddr $1000e - .faraddr $1000f - .faraddr $10ffe1 - .faraddr $10ffe2 - .faraddr $10ffe3 - .faraddr $10ffe4 - .faraddr $10ffe5 - .faraddr $10ffe6 - .faraddr $10ffe7 - .faraddr $10ffe8 - .faraddr $10ffe9 - .faraddr $10ffea - .faraddr $10ffeb - .faraddr $10ffec - .faraddr $10ffed - .faraddr $10ffee - .faraddr $10ffef - .faraddr $10fff0 - .faraddr $10fff1 - .faraddr $10fff2 - .faraddr $10fff3 - .faraddr $10fff4 - .faraddr $10fff5 - .faraddr $10fff6 - .faraddr $10fff7 - .faraddr $10fff8 - .faraddr $10fff9 - .faraddr $10fffa - .faraddr $10fffb - .faraddr $10fffc - .faraddr $10fffd - .faraddr $10fffe - .faraddr $10ffff - .faraddr $110000 - .faraddr $110001 - .faraddr $110002 - .faraddr $110003 - .faraddr $110004 - .faraddr $110005 - .faraddr $110006 - .faraddr $110007 - .faraddr $110008 - .faraddr $110009 - .faraddr $11000a - .faraddr $11000b - .faraddr $11000c - .faraddr $11000d - .faraddr $11000e - .faraddr $11000f - .faraddr $20ffe1 - .faraddr $20ffe2 - .faraddr $20ffe3 - .faraddr $20ffe4 - .faraddr $20ffe5 - .faraddr $20ffe6 - .faraddr $20ffe7 - .faraddr $20ffe8 - .faraddr $20ffe9 - .faraddr $20ffea - .faraddr $20ffeb - .faraddr $20ffec - .faraddr $20ffed - .faraddr $20ffee - .faraddr $20ffef - .faraddr $20fff0 - .faraddr $20fff1 - .faraddr $20fff2 - .faraddr $20fff3 - .faraddr $20fff4 - .faraddr $20fff5 - .faraddr $20fff6 - .faraddr $20fff7 - .faraddr $20fff8 - .faraddr $20fff9 - .faraddr $20fffa - .faraddr $20fffb - .faraddr $20fffc - .faraddr $20fffd - .faraddr $20fffe - .faraddr $20ffff - .faraddr $210000 - .faraddr $210001 - .faraddr $210002 - .faraddr $210003 - .faraddr $210004 - .faraddr $210005 - .faraddr $210006 - .faraddr $210007 - .faraddr $210008 - .faraddr $210009 - .faraddr $21000a - .faraddr $21000b - .faraddr $21000c - .faraddr $21000d - .faraddr $21000e - .faraddr $21000f - .faraddr $7fffe1 - .faraddr $7fffe2 - .faraddr $7fffe3 - .faraddr $7fffe4 - .faraddr $7fffe5 - .faraddr $7fffe6 - .faraddr $7fffe7 - .faraddr $7fffe8 - .faraddr $7fffe9 - .faraddr $7fffea - .faraddr $7fffeb - .faraddr $7fffec - .faraddr $7fffed - .faraddr $7fffee - .faraddr $7fffef - .faraddr $7ffff0 - .faraddr $7ffff1 - .faraddr $7ffff2 - .faraddr $7ffff3 - .faraddr $7ffff4 - .faraddr $7ffff5 - .faraddr $7ffff6 - .faraddr $7ffff7 - .faraddr $7ffff8 - .faraddr $7ffff9 - .faraddr $7ffffa - .faraddr $7ffffb - .faraddr $7ffffc - .faraddr $7ffffd - .faraddr $7ffffe - .faraddr $7fffff - .faraddr $800000 - .faraddr $800001 - .faraddr $800002 - .faraddr $800003 - .faraddr $800004 - .faraddr $800005 - .faraddr $800006 - .faraddr $800007 - .faraddr $800008 - .faraddr $800009 - .faraddr $80000a - .faraddr $80000b - .faraddr $80000c - .faraddr $80000d - .faraddr $80000e - .faraddr $80000f - .faraddr $9fffe1 - .faraddr $9fffe2 - .faraddr $9fffe3 - .faraddr $9fffe4 - .faraddr $9fffe5 - .faraddr $9fffe6 - .faraddr $9fffe7 - .faraddr $9fffe8 - .faraddr $9fffe9 - .faraddr $9fffea - .faraddr $9fffeb - .faraddr $9fffec - .faraddr $9fffed - .faraddr $9fffee - .faraddr $9fffef - .faraddr $9ffff0 - .faraddr $9ffff1 - .faraddr $9ffff2 - .faraddr $9ffff3 - .faraddr $9ffff4 - .faraddr $9ffff5 - .faraddr $9ffff6 - .faraddr $9ffff7 - .faraddr $9ffff8 - .faraddr $9ffff9 - .faraddr $9ffffa - .faraddr $9ffffb - .faraddr $9ffffc - .faraddr $9ffffd - .faraddr $9ffffe - .faraddr $9fffff - .faraddr $a00000 - .faraddr $a00001 - .faraddr $a00002 - .faraddr $a00003 - .faraddr $a00004 - .faraddr $a00005 - .faraddr $a00006 - .faraddr $a00007 - .faraddr $a00008 - .faraddr $a00009 - .faraddr $a0000a - .faraddr $a0000b - .faraddr $a0000c - .faraddr $a0000d - .faraddr $a0000e - .faraddr $a0000f - .faraddr $ffffe1 - .faraddr $ffffe2 - .faraddr $ffffe3 - .faraddr $ffffe4 - .faraddr $ffffe5 - .faraddr $ffffe6 - .faraddr $ffffe7 - .faraddr $ffffe8 - .faraddr $ffffe9 - .faraddr $ffffea - .faraddr $ffffeb - .faraddr $ffffec - .faraddr $ffffed - .faraddr $ffffee - .faraddr $ffffef - .faraddr $fffff0 - .faraddr $fffff1 - .faraddr $fffff2 - .faraddr $fffff3 - .faraddr $fffff4 - .faraddr $fffff5 - .faraddr $fffff6 - .faraddr $fffff7 - .faraddr $fffff8 - .faraddr $fffff9 - .faraddr $fffffa - .faraddr $fffffb - .faraddr $fffffc - .faraddr $fffffd - .faraddr $fffffe - .faraddr $ffffff + ; hex values + .faraddr $0 + .faraddr $1 + .faraddr $2 + .faraddr $3 + .faraddr $4 + .faraddr $5 + .faraddr $6 + .faraddr $7 + .faraddr $8 + .faraddr $9 + .faraddr $a + .faraddr $b + .faraddr $c + .faraddr $d + .faraddr $e + .faraddr $f + .faraddr $10 + .faraddr $11 + .faraddr $12 + .faraddr $13 + .faraddr $70 + .faraddr $71 + .faraddr $72 + .faraddr $73 + .faraddr $74 + .faraddr $75 + .faraddr $76 + .faraddr $77 + .faraddr $78 + .faraddr $79 + .faraddr $7a + .faraddr $7b + .faraddr $7c + .faraddr $7d + .faraddr $7e + .faraddr $7f + .faraddr $80 + .faraddr $81 + .faraddr $82 + .faraddr $83 + .faraddr $84 + .faraddr $85 + .faraddr $86 + .faraddr $f0 + .faraddr $f1 + .faraddr $f2 + .faraddr $f3 + .faraddr $f4 + .faraddr $f5 + .faraddr $f6 + .faraddr $f7 + .faraddr $f8 + .faraddr $f9 + .faraddr $fa + .faraddr $fb + .faraddr $fc + .faraddr $fd + .faraddr $fe + .faraddr $ff + .faraddr $100 + .faraddr $101 + .faraddr $102 + .faraddr $103 + .faraddr $fd2 + .faraddr $fd3 + .faraddr $fd4 + .faraddr $fd5 + .faraddr $fd6 + .faraddr $fd7 + .faraddr $fd8 + .faraddr $fd9 + .faraddr $fda + .faraddr $fdb + .faraddr $fdc + .faraddr $fdd + .faraddr $fde + .faraddr $fdf + .faraddr $fe0 + .faraddr $fe1 + .faraddr $fe2 + .faraddr $fe3 + .faraddr $fe4 + .faraddr $fe5 + .faraddr $fe6 + .faraddr $fe7 + .faraddr $fe8 + .faraddr $fe9 + .faraddr $fea + .faraddr $feb + .faraddr $fec + .faraddr $fed + .faraddr $fee + .faraddr $fef + .faraddr $ff0 + .faraddr $ff1 + .faraddr $ff2 + .faraddr $ff3 + .faraddr $ff4 + .faraddr $ff5 + .faraddr $ff6 + .faraddr $ff7 + .faraddr $ff8 + .faraddr $ff9 + .faraddr $ffa + .faraddr $ffb + .faraddr $ffc + .faraddr $ffd + .faraddr $ffe + .faraddr $fff + .faraddr $1000 + .faraddr $1001 + .faraddr $1002 + .faraddr $1003 + .faraddr $1004 + .faraddr $1005 + .faraddr $1006 + .faraddr $1007 + .faraddr $1008 + .faraddr $7ff0 + .faraddr $7ff1 + .faraddr $7ff2 + .faraddr $7ff3 + .faraddr $7ff4 + .faraddr $7ff5 + .faraddr $7ff6 + .faraddr $7ff7 + .faraddr $7ff8 + .faraddr $7ff9 + .faraddr $7ffa + .faraddr $7ffb + .faraddr $7ffc + .faraddr $7ffd + .faraddr $7ffe + .faraddr $7fff + .faraddr $8000 + .faraddr $8001 + .faraddr $8002 + .faraddr $8003 + .faraddr $8004 + .faraddr $8005 + .faraddr $8006 + .faraddr $8007 + .faraddr $8008 + .faraddr $8009 + .faraddr $800a + .faraddr $800b + .faraddr $9fe1 + .faraddr $9fe2 + .faraddr $9fe3 + .faraddr $9fe4 + .faraddr $9fe5 + .faraddr $9fe6 + .faraddr $9fe7 + .faraddr $9fe8 + .faraddr $9fe9 + .faraddr $9fea + .faraddr $9feb + .faraddr $9fec + .faraddr $9fed + .faraddr $9fee + .faraddr $9fef + .faraddr $9ff0 + .faraddr $9ff1 + .faraddr $9ff2 + .faraddr $9ff3 + .faraddr $9ff4 + .faraddr $9ff5 + .faraddr $9ff6 + .faraddr $9ff7 + .faraddr $9ff8 + .faraddr $9ff9 + .faraddr $9ffa + .faraddr $9ffb + .faraddr $9ffc + .faraddr $9ffd + .faraddr $9ffe + .faraddr $9fff + .faraddr $a000 + .faraddr $a001 + .faraddr $a002 + .faraddr $a003 + .faraddr $a004 + .faraddr $a005 + .faraddr $a006 + .faraddr $a007 + .faraddr $a008 + .faraddr $a009 + .faraddr $a00a + .faraddr $a00b + .faraddr $a00c + .faraddr $a00d + .faraddr $a00e + .faraddr $a00f + .faraddr $afe1 + .faraddr $afe2 + .faraddr $afe3 + .faraddr $afe4 + .faraddr $afe5 + .faraddr $afe6 + .faraddr $afe7 + .faraddr $afe8 + .faraddr $afe9 + .faraddr $afea + .faraddr $afeb + .faraddr $afec + .faraddr $afed + .faraddr $afee + .faraddr $afef + .faraddr $aff0 + .faraddr $aff1 + .faraddr $aff2 + .faraddr $aff3 + .faraddr $aff4 + .faraddr $aff5 + .faraddr $aff6 + .faraddr $aff7 + .faraddr $aff8 + .faraddr $aff9 + .faraddr $affa + .faraddr $affb + .faraddr $affc + .faraddr $affd + .faraddr $affe + .faraddr $afff + .faraddr $b000 + .faraddr $b001 + .faraddr $b002 + .faraddr $b003 + .faraddr $b004 + .faraddr $b005 + .faraddr $b006 + .faraddr $b007 + .faraddr $b008 + .faraddr $b009 + .faraddr $b00a + .faraddr $b00b + .faraddr $b00c + .faraddr $b00d + .faraddr $b00e + .faraddr $b00f + .faraddr $ffe1 + .faraddr $ffe2 + .faraddr $ffe3 + .faraddr $ffe4 + .faraddr $ffe5 + .faraddr $ffe6 + .faraddr $ffe7 + .faraddr $ffe8 + .faraddr $ffe9 + .faraddr $ffea + .faraddr $ffeb + .faraddr $ffec + .faraddr $ffed + .faraddr $ffee + .faraddr $ffef + .faraddr $fff0 + .faraddr $fff1 + .faraddr $fff2 + .faraddr $fff3 + .faraddr $fff4 + .faraddr $fff5 + .faraddr $fff6 + .faraddr $fff7 + .faraddr $fff8 + .faraddr $fff9 + .faraddr $fffa + .faraddr $fffb + .faraddr $fffc + .faraddr $fffd + .faraddr $fffe + .faraddr $ffff + .faraddr $10000 + .faraddr $10001 + .faraddr $10002 + .faraddr $10003 + .faraddr $10004 + .faraddr $10005 + .faraddr $10006 + .faraddr $10007 + .faraddr $10008 + .faraddr $10009 + .faraddr $1000a + .faraddr $1000b + .faraddr $1000c + .faraddr $1000d + .faraddr $1000e + .faraddr $1000f + .faraddr $10ffe1 + .faraddr $10ffe2 + .faraddr $10ffe3 + .faraddr $10ffe4 + .faraddr $10ffe5 + .faraddr $10ffe6 + .faraddr $10ffe7 + .faraddr $10ffe8 + .faraddr $10ffe9 + .faraddr $10ffea + .faraddr $10ffeb + .faraddr $10ffec + .faraddr $10ffed + .faraddr $10ffee + .faraddr $10ffef + .faraddr $10fff0 + .faraddr $10fff1 + .faraddr $10fff2 + .faraddr $10fff3 + .faraddr $10fff4 + .faraddr $10fff5 + .faraddr $10fff6 + .faraddr $10fff7 + .faraddr $10fff8 + .faraddr $10fff9 + .faraddr $10fffa + .faraddr $10fffb + .faraddr $10fffc + .faraddr $10fffd + .faraddr $10fffe + .faraddr $10ffff + .faraddr $110000 + .faraddr $110001 + .faraddr $110002 + .faraddr $110003 + .faraddr $110004 + .faraddr $110005 + .faraddr $110006 + .faraddr $110007 + .faraddr $110008 + .faraddr $110009 + .faraddr $11000a + .faraddr $11000b + .faraddr $11000c + .faraddr $11000d + .faraddr $11000e + .faraddr $11000f + .faraddr $20ffe1 + .faraddr $20ffe2 + .faraddr $20ffe3 + .faraddr $20ffe4 + .faraddr $20ffe5 + .faraddr $20ffe6 + .faraddr $20ffe7 + .faraddr $20ffe8 + .faraddr $20ffe9 + .faraddr $20ffea + .faraddr $20ffeb + .faraddr $20ffec + .faraddr $20ffed + .faraddr $20ffee + .faraddr $20ffef + .faraddr $20fff0 + .faraddr $20fff1 + .faraddr $20fff2 + .faraddr $20fff3 + .faraddr $20fff4 + .faraddr $20fff5 + .faraddr $20fff6 + .faraddr $20fff7 + .faraddr $20fff8 + .faraddr $20fff9 + .faraddr $20fffa + .faraddr $20fffb + .faraddr $20fffc + .faraddr $20fffd + .faraddr $20fffe + .faraddr $20ffff + .faraddr $210000 + .faraddr $210001 + .faraddr $210002 + .faraddr $210003 + .faraddr $210004 + .faraddr $210005 + .faraddr $210006 + .faraddr $210007 + .faraddr $210008 + .faraddr $210009 + .faraddr $21000a + .faraddr $21000b + .faraddr $21000c + .faraddr $21000d + .faraddr $21000e + .faraddr $21000f + .faraddr $7fffe1 + .faraddr $7fffe2 + .faraddr $7fffe3 + .faraddr $7fffe4 + .faraddr $7fffe5 + .faraddr $7fffe6 + .faraddr $7fffe7 + .faraddr $7fffe8 + .faraddr $7fffe9 + .faraddr $7fffea + .faraddr $7fffeb + .faraddr $7fffec + .faraddr $7fffed + .faraddr $7fffee + .faraddr $7fffef + .faraddr $7ffff0 + .faraddr $7ffff1 + .faraddr $7ffff2 + .faraddr $7ffff3 + .faraddr $7ffff4 + .faraddr $7ffff5 + .faraddr $7ffff6 + .faraddr $7ffff7 + .faraddr $7ffff8 + .faraddr $7ffff9 + .faraddr $7ffffa + .faraddr $7ffffb + .faraddr $7ffffc + .faraddr $7ffffd + .faraddr $7ffffe + .faraddr $7fffff + .faraddr $800000 + .faraddr $800001 + .faraddr $800002 + .faraddr $800003 + .faraddr $800004 + .faraddr $800005 + .faraddr $800006 + .faraddr $800007 + .faraddr $800008 + .faraddr $800009 + .faraddr $80000a + .faraddr $80000b + .faraddr $80000c + .faraddr $80000d + .faraddr $80000e + .faraddr $80000f + .faraddr $9fffe1 + .faraddr $9fffe2 + .faraddr $9fffe3 + .faraddr $9fffe4 + .faraddr $9fffe5 + .faraddr $9fffe6 + .faraddr $9fffe7 + .faraddr $9fffe8 + .faraddr $9fffe9 + .faraddr $9fffea + .faraddr $9fffeb + .faraddr $9fffec + .faraddr $9fffed + .faraddr $9fffee + .faraddr $9fffef + .faraddr $9ffff0 + .faraddr $9ffff1 + .faraddr $9ffff2 + .faraddr $9ffff3 + .faraddr $9ffff4 + .faraddr $9ffff5 + .faraddr $9ffff6 + .faraddr $9ffff7 + .faraddr $9ffff8 + .faraddr $9ffff9 + .faraddr $9ffffa + .faraddr $9ffffb + .faraddr $9ffffc + .faraddr $9ffffd + .faraddr $9ffffe + .faraddr $9fffff + .faraddr $a00000 + .faraddr $a00001 + .faraddr $a00002 + .faraddr $a00003 + .faraddr $a00004 + .faraddr $a00005 + .faraddr $a00006 + .faraddr $a00007 + .faraddr $a00008 + .faraddr $a00009 + .faraddr $a0000a + .faraddr $a0000b + .faraddr $a0000c + .faraddr $a0000d + .faraddr $a0000e + .faraddr $a0000f + .faraddr $ffffe1 + .faraddr $ffffe2 + .faraddr $ffffe3 + .faraddr $ffffe4 + .faraddr $ffffe5 + .faraddr $ffffe6 + .faraddr $ffffe7 + .faraddr $ffffe8 + .faraddr $ffffe9 + .faraddr $ffffea + .faraddr $ffffeb + .faraddr $ffffec + .faraddr $ffffed + .faraddr $ffffee + .faraddr $ffffef + .faraddr $fffff0 + .faraddr $fffff1 + .faraddr $fffff2 + .faraddr $fffff3 + .faraddr $fffff4 + .faraddr $fffff5 + .faraddr $fffff6 + .faraddr $fffff7 + .faraddr $fffff8 + .faraddr $fffff9 + .faraddr $fffffa + .faraddr $fffffb + .faraddr $fffffc + .faraddr $fffffd + .faraddr $fffffe + .faraddr $ffffff - ; hex values, uppercase - .faraddr $0 - .faraddr $1 - .faraddr $2 - .faraddr $3 - .faraddr $4 - .faraddr $5 - .faraddr $6 - .faraddr $7 - .faraddr $8 - .faraddr $9 - .faraddr $A - .faraddr $B - .faraddr $C - .faraddr $D - .faraddr $E - .faraddr $F - .faraddr $10 - .faraddr $11 - .faraddr $12 - .faraddr $13 - .faraddr $70 - .faraddr $71 - .faraddr $72 - .faraddr $73 - .faraddr $74 - .faraddr $75 - .faraddr $76 - .faraddr $77 - .faraddr $78 - .faraddr $79 - .faraddr $7A - .faraddr $7B - .faraddr $7C - .faraddr $7D - .faraddr $7E - .faraddr $7F - .faraddr $80 - .faraddr $81 - .faraddr $82 - .faraddr $83 - .faraddr $84 - .faraddr $85 - .faraddr $86 - .faraddr $F0 - .faraddr $F1 - .faraddr $F2 - .faraddr $F3 - .faraddr $F4 - .faraddr $F5 - .faraddr $F6 - .faraddr $F7 - .faraddr $F8 - .faraddr $F9 - .faraddr $FA - .faraddr $FB - .faraddr $FC - .faraddr $FD - .faraddr $FE - .faraddr $FF - .faraddr $100 - .faraddr $101 - .faraddr $102 - .faraddr $103 - .faraddr $FD2 - .faraddr $FD3 - .faraddr $FD4 - .faraddr $FD5 - .faraddr $FD6 - .faraddr $FD7 - .faraddr $FD8 - .faraddr $FD9 - .faraddr $FDA - .faraddr $FDB - .faraddr $FDC - .faraddr $FDD - .faraddr $FDE - .faraddr $FDF - .faraddr $FE0 - .faraddr $FE1 - .faraddr $FE2 - .faraddr $FE3 - .faraddr $FE4 - .faraddr $FE5 - .faraddr $FE6 - .faraddr $FE7 - .faraddr $FE8 - .faraddr $FE9 - .faraddr $FEA - .faraddr $FEB - .faraddr $FEC - .faraddr $FED - .faraddr $FEE - .faraddr $FEF - .faraddr $FF0 - .faraddr $FF1 - .faraddr $FF2 - .faraddr $FF3 - .faraddr $FF4 - .faraddr $FF5 - .faraddr $FF6 - .faraddr $FF7 - .faraddr $FF8 - .faraddr $FF9 - .faraddr $FFA - .faraddr $FFB - .faraddr $FFC - .faraddr $FFD - .faraddr $FFE - .faraddr $FFF - .faraddr $1000 - .faraddr $1001 - .faraddr $1002 - .faraddr $1003 - .faraddr $1004 - .faraddr $1005 - .faraddr $1006 - .faraddr $1007 - .faraddr $1008 - .faraddr $7FF0 - .faraddr $7FF1 - .faraddr $7FF2 - .faraddr $7FF3 - .faraddr $7FF4 - .faraddr $7FF5 - .faraddr $7FF6 - .faraddr $7FF7 - .faraddr $7FF8 - .faraddr $7FF9 - .faraddr $7FFA - .faraddr $7FFB - .faraddr $7FFC - .faraddr $7FFD - .faraddr $7FFE - .faraddr $7FFF - .faraddr $8000 - .faraddr $8001 - .faraddr $8002 - .faraddr $8003 - .faraddr $8004 - .faraddr $8005 - .faraddr $8006 - .faraddr $8007 - .faraddr $8008 - .faraddr $8009 - .faraddr $800A - .faraddr $800B - .faraddr $9FE1 - .faraddr $9FE2 - .faraddr $9FE3 - .faraddr $9FE4 - .faraddr $9FE5 - .faraddr $9FE6 - .faraddr $9FE7 - .faraddr $9FE8 - .faraddr $9FE9 - .faraddr $9FEA - .faraddr $9FEB - .faraddr $9FEC - .faraddr $9FED - .faraddr $9FEE - .faraddr $9FEF - .faraddr $9FF0 - .faraddr $9FF1 - .faraddr $9FF2 - .faraddr $9FF3 - .faraddr $9FF4 - .faraddr $9FF5 - .faraddr $9FF6 - .faraddr $9FF7 - .faraddr $9FF8 - .faraddr $9FF9 - .faraddr $9FFA - .faraddr $9FFB - .faraddr $9FFC - .faraddr $9FFD - .faraddr $9FFE - .faraddr $9FFF - .faraddr $A000 - .faraddr $A001 - .faraddr $A002 - .faraddr $A003 - .faraddr $A004 - .faraddr $A005 - .faraddr $A006 - .faraddr $A007 - .faraddr $A008 - .faraddr $A009 - .faraddr $A00A - .faraddr $A00B - .faraddr $A00C - .faraddr $A00D - .faraddr $A00E - .faraddr $A00F - .faraddr $AFE1 - .faraddr $AFE2 - .faraddr $AFE3 - .faraddr $AFE4 - .faraddr $AFE5 - .faraddr $AFE6 - .faraddr $AFE7 - .faraddr $AFE8 - .faraddr $AFE9 - .faraddr $AFEA - .faraddr $AFEB - .faraddr $AFEC - .faraddr $AFED - .faraddr $AFEE - .faraddr $AFEF - .faraddr $AFF0 - .faraddr $AFF1 - .faraddr $AFF2 - .faraddr $AFF3 - .faraddr $AFF4 - .faraddr $AFF5 - .faraddr $AFF6 - .faraddr $AFF7 - .faraddr $AFF8 - .faraddr $AFF9 - .faraddr $AFFA - .faraddr $AFFB - .faraddr $AFFC - .faraddr $AFFD - .faraddr $AFFE - .faraddr $AFFF - .faraddr $B000 - .faraddr $B001 - .faraddr $B002 - .faraddr $B003 - .faraddr $B004 - .faraddr $B005 - .faraddr $B006 - .faraddr $B007 - .faraddr $B008 - .faraddr $B009 - .faraddr $B00A - .faraddr $B00B - .faraddr $B00C - .faraddr $B00D - .faraddr $B00E - .faraddr $B00F - .faraddr $FFE1 - .faraddr $FFE2 - .faraddr $FFE3 - .faraddr $FFE4 - .faraddr $FFE5 - .faraddr $FFE6 - .faraddr $FFE7 - .faraddr $FFE8 - .faraddr $FFE9 - .faraddr $FFEA - .faraddr $FFEB - .faraddr $FFEC - .faraddr $FFED - .faraddr $FFEE - .faraddr $FFEF - .faraddr $FFF0 - .faraddr $FFF1 - .faraddr $FFF2 - .faraddr $FFF3 - .faraddr $FFF4 - .faraddr $FFF5 - .faraddr $FFF6 - .faraddr $FFF7 - .faraddr $FFF8 - .faraddr $FFF9 - .faraddr $FFFA - .faraddr $FFFB - .faraddr $FFFC - .faraddr $FFFD - .faraddr $FFFE - .faraddr $FFFF - .faraddr $10000 - .faraddr $10001 - .faraddr $10002 - .faraddr $10003 - .faraddr $10004 - .faraddr $10005 - .faraddr $10006 - .faraddr $10007 - .faraddr $10008 - .faraddr $10009 - .faraddr $1000A - .faraddr $1000B - .faraddr $1000C - .faraddr $1000D - .faraddr $1000E - .faraddr $1000F - .faraddr $10FFE1 - .faraddr $10FFE2 - .faraddr $10FFE3 - .faraddr $10FFE4 - .faraddr $10FFE5 - .faraddr $10FFE6 - .faraddr $10FFE7 - .faraddr $10FFE8 - .faraddr $10FFE9 - .faraddr $10FFEA - .faraddr $10FFEB - .faraddr $10FFEC - .faraddr $10FFED - .faraddr $10FFEE - .faraddr $10FFEF - .faraddr $10FFF0 - .faraddr $10FFF1 - .faraddr $10FFF2 - .faraddr $10FFF3 - .faraddr $10FFF4 - .faraddr $10FFF5 - .faraddr $10FFF6 - .faraddr $10FFF7 - .faraddr $10FFF8 - .faraddr $10FFF9 - .faraddr $10FFFA - .faraddr $10FFFB - .faraddr $10FFFC - .faraddr $10FFFD - .faraddr $10FFFE - .faraddr $10FFFF - .faraddr $110000 - .faraddr $110001 - .faraddr $110002 - .faraddr $110003 - .faraddr $110004 - .faraddr $110005 - .faraddr $110006 - .faraddr $110007 - .faraddr $110008 - .faraddr $110009 - .faraddr $11000A - .faraddr $11000B - .faraddr $11000C - .faraddr $11000D - .faraddr $11000E - .faraddr $11000F - .faraddr $20FFE1 - .faraddr $20FFE2 - .faraddr $20FFE3 - .faraddr $20FFE4 - .faraddr $20FFE5 - .faraddr $20FFE6 - .faraddr $20FFE7 - .faraddr $20FFE8 - .faraddr $20FFE9 - .faraddr $20FFEA - .faraddr $20FFEB - .faraddr $20FFEC - .faraddr $20FFED - .faraddr $20FFEE - .faraddr $20FFEF - .faraddr $20FFF0 - .faraddr $20FFF1 - .faraddr $20FFF2 - .faraddr $20FFF3 - .faraddr $20FFF4 - .faraddr $20FFF5 - .faraddr $20FFF6 - .faraddr $20FFF7 - .faraddr $20FFF8 - .faraddr $20FFF9 - .faraddr $20FFFA - .faraddr $20FFFB - .faraddr $20FFFC - .faraddr $20FFFD - .faraddr $20FFFE - .faraddr $20FFFF - .faraddr $210000 - .faraddr $210001 - .faraddr $210002 - .faraddr $210003 - .faraddr $210004 - .faraddr $210005 - .faraddr $210006 - .faraddr $210007 - .faraddr $210008 - .faraddr $210009 - .faraddr $21000A - .faraddr $21000B - .faraddr $21000C - .faraddr $21000D - .faraddr $21000E - .faraddr $21000F - .faraddr $7FFFE1 - .faraddr $7FFFE2 - .faraddr $7FFFE3 - .faraddr $7FFFE4 - .faraddr $7FFFE5 - .faraddr $7FFFE6 - .faraddr $7FFFE7 - .faraddr $7FFFE8 - .faraddr $7FFFE9 - .faraddr $7FFFEA - .faraddr $7FFFEB - .faraddr $7FFFEC - .faraddr $7FFFED - .faraddr $7FFFEE - .faraddr $7FFFEF - .faraddr $7FFFF0 - .faraddr $7FFFF1 - .faraddr $7FFFF2 - .faraddr $7FFFF3 - .faraddr $7FFFF4 - .faraddr $7FFFF5 - .faraddr $7FFFF6 - .faraddr $7FFFF7 - .faraddr $7FFFF8 - .faraddr $7FFFF9 - .faraddr $7FFFFA - .faraddr $7FFFFB - .faraddr $7FFFFC - .faraddr $7FFFFD - .faraddr $7FFFFE - .faraddr $7FFFFF - .faraddr $800000 - .faraddr $800001 - .faraddr $800002 - .faraddr $800003 - .faraddr $800004 - .faraddr $800005 - .faraddr $800006 - .faraddr $800007 - .faraddr $800008 - .faraddr $800009 - .faraddr $80000A - .faraddr $80000B - .faraddr $80000C - .faraddr $80000D - .faraddr $80000E - .faraddr $80000F - .faraddr $9FFFE1 - .faraddr $9FFFE2 - .faraddr $9FFFE3 - .faraddr $9FFFE4 - .faraddr $9FFFE5 - .faraddr $9FFFE6 - .faraddr $9FFFE7 - .faraddr $9FFFE8 - .faraddr $9FFFE9 - .faraddr $9FFFEA - .faraddr $9FFFEB - .faraddr $9FFFEC - .faraddr $9FFFED - .faraddr $9FFFEE - .faraddr $9FFFEF - .faraddr $9FFFF0 - .faraddr $9FFFF1 - .faraddr $9FFFF2 - .faraddr $9FFFF3 - .faraddr $9FFFF4 - .faraddr $9FFFF5 - .faraddr $9FFFF6 - .faraddr $9FFFF7 - .faraddr $9FFFF8 - .faraddr $9FFFF9 - .faraddr $9FFFFA - .faraddr $9FFFFB - .faraddr $9FFFFC - .faraddr $9FFFFD - .faraddr $9FFFFE - .faraddr $9FFFFF - .faraddr $A00000 - .faraddr $A00001 - .faraddr $A00002 - .faraddr $A00003 - .faraddr $A00004 - .faraddr $A00005 - .faraddr $A00006 - .faraddr $A00007 - .faraddr $A00008 - .faraddr $A00009 - .faraddr $A0000A - .faraddr $A0000B - .faraddr $A0000C - .faraddr $A0000D - .faraddr $A0000E - .faraddr $A0000F - .faraddr $FFFFE1 - .faraddr $FFFFE2 - .faraddr $FFFFE3 - .faraddr $FFFFE4 - .faraddr $FFFFE5 - .faraddr $FFFFE6 - .faraddr $FFFFE7 - .faraddr $FFFFE8 - .faraddr $FFFFE9 - .faraddr $FFFFEA - .faraddr $FFFFEB - .faraddr $FFFFEC - .faraddr $FFFFED - .faraddr $FFFFEE - .faraddr $FFFFEF - .faraddr $FFFFF0 - .faraddr $FFFFF1 - .faraddr $FFFFF2 - .faraddr $FFFFF3 - .faraddr $FFFFF4 - .faraddr $FFFFF5 - .faraddr $FFFFF6 - .faraddr $FFFFF7 - .faraddr $FFFFF8 - .faraddr $FFFFF9 - .faraddr $FFFFFA - .faraddr $FFFFFB - .faraddr $FFFFFC - .faraddr $FFFFFD - .faraddr $FFFFFE - .faraddr $FFFFFF + ; hex values, uppercase + .faraddr $0 + .faraddr $1 + .faraddr $2 + .faraddr $3 + .faraddr $4 + .faraddr $5 + .faraddr $6 + .faraddr $7 + .faraddr $8 + .faraddr $9 + .faraddr $A + .faraddr $B + .faraddr $C + .faraddr $D + .faraddr $E + .faraddr $F + .faraddr $10 + .faraddr $11 + .faraddr $12 + .faraddr $13 + .faraddr $70 + .faraddr $71 + .faraddr $72 + .faraddr $73 + .faraddr $74 + .faraddr $75 + .faraddr $76 + .faraddr $77 + .faraddr $78 + .faraddr $79 + .faraddr $7A + .faraddr $7B + .faraddr $7C + .faraddr $7D + .faraddr $7E + .faraddr $7F + .faraddr $80 + .faraddr $81 + .faraddr $82 + .faraddr $83 + .faraddr $84 + .faraddr $85 + .faraddr $86 + .faraddr $F0 + .faraddr $F1 + .faraddr $F2 + .faraddr $F3 + .faraddr $F4 + .faraddr $F5 + .faraddr $F6 + .faraddr $F7 + .faraddr $F8 + .faraddr $F9 + .faraddr $FA + .faraddr $FB + .faraddr $FC + .faraddr $FD + .faraddr $FE + .faraddr $FF + .faraddr $100 + .faraddr $101 + .faraddr $102 + .faraddr $103 + .faraddr $FD2 + .faraddr $FD3 + .faraddr $FD4 + .faraddr $FD5 + .faraddr $FD6 + .faraddr $FD7 + .faraddr $FD8 + .faraddr $FD9 + .faraddr $FDA + .faraddr $FDB + .faraddr $FDC + .faraddr $FDD + .faraddr $FDE + .faraddr $FDF + .faraddr $FE0 + .faraddr $FE1 + .faraddr $FE2 + .faraddr $FE3 + .faraddr $FE4 + .faraddr $FE5 + .faraddr $FE6 + .faraddr $FE7 + .faraddr $FE8 + .faraddr $FE9 + .faraddr $FEA + .faraddr $FEB + .faraddr $FEC + .faraddr $FED + .faraddr $FEE + .faraddr $FEF + .faraddr $FF0 + .faraddr $FF1 + .faraddr $FF2 + .faraddr $FF3 + .faraddr $FF4 + .faraddr $FF5 + .faraddr $FF6 + .faraddr $FF7 + .faraddr $FF8 + .faraddr $FF9 + .faraddr $FFA + .faraddr $FFB + .faraddr $FFC + .faraddr $FFD + .faraddr $FFE + .faraddr $FFF + .faraddr $1000 + .faraddr $1001 + .faraddr $1002 + .faraddr $1003 + .faraddr $1004 + .faraddr $1005 + .faraddr $1006 + .faraddr $1007 + .faraddr $1008 + .faraddr $7FF0 + .faraddr $7FF1 + .faraddr $7FF2 + .faraddr $7FF3 + .faraddr $7FF4 + .faraddr $7FF5 + .faraddr $7FF6 + .faraddr $7FF7 + .faraddr $7FF8 + .faraddr $7FF9 + .faraddr $7FFA + .faraddr $7FFB + .faraddr $7FFC + .faraddr $7FFD + .faraddr $7FFE + .faraddr $7FFF + .faraddr $8000 + .faraddr $8001 + .faraddr $8002 + .faraddr $8003 + .faraddr $8004 + .faraddr $8005 + .faraddr $8006 + .faraddr $8007 + .faraddr $8008 + .faraddr $8009 + .faraddr $800A + .faraddr $800B + .faraddr $9FE1 + .faraddr $9FE2 + .faraddr $9FE3 + .faraddr $9FE4 + .faraddr $9FE5 + .faraddr $9FE6 + .faraddr $9FE7 + .faraddr $9FE8 + .faraddr $9FE9 + .faraddr $9FEA + .faraddr $9FEB + .faraddr $9FEC + .faraddr $9FED + .faraddr $9FEE + .faraddr $9FEF + .faraddr $9FF0 + .faraddr $9FF1 + .faraddr $9FF2 + .faraddr $9FF3 + .faraddr $9FF4 + .faraddr $9FF5 + .faraddr $9FF6 + .faraddr $9FF7 + .faraddr $9FF8 + .faraddr $9FF9 + .faraddr $9FFA + .faraddr $9FFB + .faraddr $9FFC + .faraddr $9FFD + .faraddr $9FFE + .faraddr $9FFF + .faraddr $A000 + .faraddr $A001 + .faraddr $A002 + .faraddr $A003 + .faraddr $A004 + .faraddr $A005 + .faraddr $A006 + .faraddr $A007 + .faraddr $A008 + .faraddr $A009 + .faraddr $A00A + .faraddr $A00B + .faraddr $A00C + .faraddr $A00D + .faraddr $A00E + .faraddr $A00F + .faraddr $AFE1 + .faraddr $AFE2 + .faraddr $AFE3 + .faraddr $AFE4 + .faraddr $AFE5 + .faraddr $AFE6 + .faraddr $AFE7 + .faraddr $AFE8 + .faraddr $AFE9 + .faraddr $AFEA + .faraddr $AFEB + .faraddr $AFEC + .faraddr $AFED + .faraddr $AFEE + .faraddr $AFEF + .faraddr $AFF0 + .faraddr $AFF1 + .faraddr $AFF2 + .faraddr $AFF3 + .faraddr $AFF4 + .faraddr $AFF5 + .faraddr $AFF6 + .faraddr $AFF7 + .faraddr $AFF8 + .faraddr $AFF9 + .faraddr $AFFA + .faraddr $AFFB + .faraddr $AFFC + .faraddr $AFFD + .faraddr $AFFE + .faraddr $AFFF + .faraddr $B000 + .faraddr $B001 + .faraddr $B002 + .faraddr $B003 + .faraddr $B004 + .faraddr $B005 + .faraddr $B006 + .faraddr $B007 + .faraddr $B008 + .faraddr $B009 + .faraddr $B00A + .faraddr $B00B + .faraddr $B00C + .faraddr $B00D + .faraddr $B00E + .faraddr $B00F + .faraddr $FFE1 + .faraddr $FFE2 + .faraddr $FFE3 + .faraddr $FFE4 + .faraddr $FFE5 + .faraddr $FFE6 + .faraddr $FFE7 + .faraddr $FFE8 + .faraddr $FFE9 + .faraddr $FFEA + .faraddr $FFEB + .faraddr $FFEC + .faraddr $FFED + .faraddr $FFEE + .faraddr $FFEF + .faraddr $FFF0 + .faraddr $FFF1 + .faraddr $FFF2 + .faraddr $FFF3 + .faraddr $FFF4 + .faraddr $FFF5 + .faraddr $FFF6 + .faraddr $FFF7 + .faraddr $FFF8 + .faraddr $FFF9 + .faraddr $FFFA + .faraddr $FFFB + .faraddr $FFFC + .faraddr $FFFD + .faraddr $FFFE + .faraddr $FFFF + .faraddr $10000 + .faraddr $10001 + .faraddr $10002 + .faraddr $10003 + .faraddr $10004 + .faraddr $10005 + .faraddr $10006 + .faraddr $10007 + .faraddr $10008 + .faraddr $10009 + .faraddr $1000A + .faraddr $1000B + .faraddr $1000C + .faraddr $1000D + .faraddr $1000E + .faraddr $1000F + .faraddr $10FFE1 + .faraddr $10FFE2 + .faraddr $10FFE3 + .faraddr $10FFE4 + .faraddr $10FFE5 + .faraddr $10FFE6 + .faraddr $10FFE7 + .faraddr $10FFE8 + .faraddr $10FFE9 + .faraddr $10FFEA + .faraddr $10FFEB + .faraddr $10FFEC + .faraddr $10FFED + .faraddr $10FFEE + .faraddr $10FFEF + .faraddr $10FFF0 + .faraddr $10FFF1 + .faraddr $10FFF2 + .faraddr $10FFF3 + .faraddr $10FFF4 + .faraddr $10FFF5 + .faraddr $10FFF6 + .faraddr $10FFF7 + .faraddr $10FFF8 + .faraddr $10FFF9 + .faraddr $10FFFA + .faraddr $10FFFB + .faraddr $10FFFC + .faraddr $10FFFD + .faraddr $10FFFE + .faraddr $10FFFF + .faraddr $110000 + .faraddr $110001 + .faraddr $110002 + .faraddr $110003 + .faraddr $110004 + .faraddr $110005 + .faraddr $110006 + .faraddr $110007 + .faraddr $110008 + .faraddr $110009 + .faraddr $11000A + .faraddr $11000B + .faraddr $11000C + .faraddr $11000D + .faraddr $11000E + .faraddr $11000F + .faraddr $20FFE1 + .faraddr $20FFE2 + .faraddr $20FFE3 + .faraddr $20FFE4 + .faraddr $20FFE5 + .faraddr $20FFE6 + .faraddr $20FFE7 + .faraddr $20FFE8 + .faraddr $20FFE9 + .faraddr $20FFEA + .faraddr $20FFEB + .faraddr $20FFEC + .faraddr $20FFED + .faraddr $20FFEE + .faraddr $20FFEF + .faraddr $20FFF0 + .faraddr $20FFF1 + .faraddr $20FFF2 + .faraddr $20FFF3 + .faraddr $20FFF4 + .faraddr $20FFF5 + .faraddr $20FFF6 + .faraddr $20FFF7 + .faraddr $20FFF8 + .faraddr $20FFF9 + .faraddr $20FFFA + .faraddr $20FFFB + .faraddr $20FFFC + .faraddr $20FFFD + .faraddr $20FFFE + .faraddr $20FFFF + .faraddr $210000 + .faraddr $210001 + .faraddr $210002 + .faraddr $210003 + .faraddr $210004 + .faraddr $210005 + .faraddr $210006 + .faraddr $210007 + .faraddr $210008 + .faraddr $210009 + .faraddr $21000A + .faraddr $21000B + .faraddr $21000C + .faraddr $21000D + .faraddr $21000E + .faraddr $21000F + .faraddr $7FFFE1 + .faraddr $7FFFE2 + .faraddr $7FFFE3 + .faraddr $7FFFE4 + .faraddr $7FFFE5 + .faraddr $7FFFE6 + .faraddr $7FFFE7 + .faraddr $7FFFE8 + .faraddr $7FFFE9 + .faraddr $7FFFEA + .faraddr $7FFFEB + .faraddr $7FFFEC + .faraddr $7FFFED + .faraddr $7FFFEE + .faraddr $7FFFEF + .faraddr $7FFFF0 + .faraddr $7FFFF1 + .faraddr $7FFFF2 + .faraddr $7FFFF3 + .faraddr $7FFFF4 + .faraddr $7FFFF5 + .faraddr $7FFFF6 + .faraddr $7FFFF7 + .faraddr $7FFFF8 + .faraddr $7FFFF9 + .faraddr $7FFFFA + .faraddr $7FFFFB + .faraddr $7FFFFC + .faraddr $7FFFFD + .faraddr $7FFFFE + .faraddr $7FFFFF + .faraddr $800000 + .faraddr $800001 + .faraddr $800002 + .faraddr $800003 + .faraddr $800004 + .faraddr $800005 + .faraddr $800006 + .faraddr $800007 + .faraddr $800008 + .faraddr $800009 + .faraddr $80000A + .faraddr $80000B + .faraddr $80000C + .faraddr $80000D + .faraddr $80000E + .faraddr $80000F + .faraddr $9FFFE1 + .faraddr $9FFFE2 + .faraddr $9FFFE3 + .faraddr $9FFFE4 + .faraddr $9FFFE5 + .faraddr $9FFFE6 + .faraddr $9FFFE7 + .faraddr $9FFFE8 + .faraddr $9FFFE9 + .faraddr $9FFFEA + .faraddr $9FFFEB + .faraddr $9FFFEC + .faraddr $9FFFED + .faraddr $9FFFEE + .faraddr $9FFFEF + .faraddr $9FFFF0 + .faraddr $9FFFF1 + .faraddr $9FFFF2 + .faraddr $9FFFF3 + .faraddr $9FFFF4 + .faraddr $9FFFF5 + .faraddr $9FFFF6 + .faraddr $9FFFF7 + .faraddr $9FFFF8 + .faraddr $9FFFF9 + .faraddr $9FFFFA + .faraddr $9FFFFB + .faraddr $9FFFFC + .faraddr $9FFFFD + .faraddr $9FFFFE + .faraddr $9FFFFF + .faraddr $A00000 + .faraddr $A00001 + .faraddr $A00002 + .faraddr $A00003 + .faraddr $A00004 + .faraddr $A00005 + .faraddr $A00006 + .faraddr $A00007 + .faraddr $A00008 + .faraddr $A00009 + .faraddr $A0000A + .faraddr $A0000B + .faraddr $A0000C + .faraddr $A0000D + .faraddr $A0000E + .faraddr $A0000F + .faraddr $FFFFE1 + .faraddr $FFFFE2 + .faraddr $FFFFE3 + .faraddr $FFFFE4 + .faraddr $FFFFE5 + .faraddr $FFFFE6 + .faraddr $FFFFE7 + .faraddr $FFFFE8 + .faraddr $FFFFE9 + .faraddr $FFFFEA + .faraddr $FFFFEB + .faraddr $FFFFEC + .faraddr $FFFFED + .faraddr $FFFFEE + .faraddr $FFFFEF + .faraddr $FFFFF0 + .faraddr $FFFFF1 + .faraddr $FFFFF2 + .faraddr $FFFFF3 + .faraddr $FFFFF4 + .faraddr $FFFFF5 + .faraddr $FFFFF6 + .faraddr $FFFFF7 + .faraddr $FFFFF8 + .faraddr $FFFFF9 + .faraddr $FFFFFA + .faraddr $FFFFFB + .faraddr $FFFFFC + .faraddr $FFFFFD + .faraddr $FFFFFE + .faraddr $FFFFFF - ; 8-digit hex values - .faraddr $00000000 - .faraddr $00000001 - .faraddr $00000002 - .faraddr $00000003 - .faraddr $00000004 - .faraddr $00000005 - .faraddr $00000006 - .faraddr $00000007 - .faraddr $00000008 - .faraddr $00000009 - .faraddr $0000000a - .faraddr $0000000b - .faraddr $0000000c - .faraddr $0000000d - .faraddr $0000000e - .faraddr $0000000f - .faraddr $00000010 - .faraddr $00000011 - .faraddr $00000012 - .faraddr $00000013 - .faraddr $00000070 - .faraddr $00000071 - .faraddr $00000072 - .faraddr $00000073 - .faraddr $00000074 - .faraddr $00000075 - .faraddr $00000076 - .faraddr $00000077 - .faraddr $00000078 - .faraddr $00000079 - .faraddr $0000007a - .faraddr $0000007b - .faraddr $0000007c - .faraddr $0000007d - .faraddr $0000007e - .faraddr $0000007f - .faraddr $00000080 - .faraddr $00000081 - .faraddr $00000082 - .faraddr $00000083 - .faraddr $00000084 - .faraddr $00000085 - .faraddr $00000086 - .faraddr $000000f0 - .faraddr $000000f1 - .faraddr $000000f2 - .faraddr $000000f3 - .faraddr $000000f4 - .faraddr $000000f5 - .faraddr $000000f6 - .faraddr $000000f7 - .faraddr $000000f8 - .faraddr $000000f9 - .faraddr $000000fa - .faraddr $000000fb - .faraddr $000000fc - .faraddr $000000fd - .faraddr $000000fe - .faraddr $000000ff - .faraddr $00000100 - .faraddr $00000101 - .faraddr $00000102 - .faraddr $00000103 - .faraddr $00000fd2 - .faraddr $00000fd3 - .faraddr $00000fd4 - .faraddr $00000fd5 - .faraddr $00000fd6 - .faraddr $00000fd7 - .faraddr $00000fd8 - .faraddr $00000fd9 - .faraddr $00000fda - .faraddr $00000fdb - .faraddr $00000fdc - .faraddr $00000fdd - .faraddr $00000fde - .faraddr $00000fdf - .faraddr $00000fe0 - .faraddr $00000fe1 - .faraddr $00000fe2 - .faraddr $00000fe3 - .faraddr $00000fe4 - .faraddr $00000fe5 - .faraddr $00000fe6 - .faraddr $00000fe7 - .faraddr $00000fe8 - .faraddr $00000fe9 - .faraddr $00000fea - .faraddr $00000feb - .faraddr $00000fec - .faraddr $00000fed - .faraddr $00000fee - .faraddr $00000fef - .faraddr $00000ff0 - .faraddr $00000ff1 - .faraddr $00000ff2 - .faraddr $00000ff3 - .faraddr $00000ff4 - .faraddr $00000ff5 - .faraddr $00000ff6 - .faraddr $00000ff7 - .faraddr $00000ff8 - .faraddr $00000ff9 - .faraddr $00000ffa - .faraddr $00000ffb - .faraddr $00000ffc - .faraddr $00000ffd - .faraddr $00000ffe - .faraddr $00000fff - .faraddr $00001000 - .faraddr $00001001 - .faraddr $00001002 - .faraddr $00001003 - .faraddr $00001004 - .faraddr $00001005 - .faraddr $00001006 - .faraddr $00001007 - .faraddr $00001008 - .faraddr $00007ff0 - .faraddr $00007ff1 - .faraddr $00007ff2 - .faraddr $00007ff3 - .faraddr $00007ff4 - .faraddr $00007ff5 - .faraddr $00007ff6 - .faraddr $00007ff7 - .faraddr $00007ff8 - .faraddr $00007ff9 - .faraddr $00007ffa - .faraddr $00007ffb - .faraddr $00007ffc - .faraddr $00007ffd - .faraddr $00007ffe - .faraddr $00007fff - .faraddr $00008000 - .faraddr $00008001 - .faraddr $00008002 - .faraddr $00008003 - .faraddr $00008004 - .faraddr $00008005 - .faraddr $00008006 - .faraddr $00008007 - .faraddr $00008008 - .faraddr $00008009 - .faraddr $0000800a - .faraddr $0000800b - .faraddr $00009fe1 - .faraddr $00009fe2 - .faraddr $00009fe3 - .faraddr $00009fe4 - .faraddr $00009fe5 - .faraddr $00009fe6 - .faraddr $00009fe7 - .faraddr $00009fe8 - .faraddr $00009fe9 - .faraddr $00009fea - .faraddr $00009feb - .faraddr $00009fec - .faraddr $00009fed - .faraddr $00009fee - .faraddr $00009fef - .faraddr $00009ff0 - .faraddr $00009ff1 - .faraddr $00009ff2 - .faraddr $00009ff3 - .faraddr $00009ff4 - .faraddr $00009ff5 - .faraddr $00009ff6 - .faraddr $00009ff7 - .faraddr $00009ff8 - .faraddr $00009ff9 - .faraddr $00009ffa - .faraddr $00009ffb - .faraddr $00009ffc - .faraddr $00009ffd - .faraddr $00009ffe - .faraddr $00009fff - .faraddr $0000a000 - .faraddr $0000a001 - .faraddr $0000a002 - .faraddr $0000a003 - .faraddr $0000a004 - .faraddr $0000a005 - .faraddr $0000a006 - .faraddr $0000a007 - .faraddr $0000a008 - .faraddr $0000a009 - .faraddr $0000a00a - .faraddr $0000a00b - .faraddr $0000a00c - .faraddr $0000a00d - .faraddr $0000a00e - .faraddr $0000a00f - .faraddr $0000afe1 - .faraddr $0000afe2 - .faraddr $0000afe3 - .faraddr $0000afe4 - .faraddr $0000afe5 - .faraddr $0000afe6 - .faraddr $0000afe7 - .faraddr $0000afe8 - .faraddr $0000afe9 - .faraddr $0000afea - .faraddr $0000afeb - .faraddr $0000afec - .faraddr $0000afed - .faraddr $0000afee - .faraddr $0000afef - .faraddr $0000aff0 - .faraddr $0000aff1 - .faraddr $0000aff2 - .faraddr $0000aff3 - .faraddr $0000aff4 - .faraddr $0000aff5 - .faraddr $0000aff6 - .faraddr $0000aff7 - .faraddr $0000aff8 - .faraddr $0000aff9 - .faraddr $0000affa - .faraddr $0000affb - .faraddr $0000affc - .faraddr $0000affd - .faraddr $0000affe - .faraddr $0000afff - .faraddr $0000b000 - .faraddr $0000b001 - .faraddr $0000b002 - .faraddr $0000b003 - .faraddr $0000b004 - .faraddr $0000b005 - .faraddr $0000b006 - .faraddr $0000b007 - .faraddr $0000b008 - .faraddr $0000b009 - .faraddr $0000b00a - .faraddr $0000b00b - .faraddr $0000b00c - .faraddr $0000b00d - .faraddr $0000b00e - .faraddr $0000b00f - .faraddr $0000ffe1 - .faraddr $0000ffe2 - .faraddr $0000ffe3 - .faraddr $0000ffe4 - .faraddr $0000ffe5 - .faraddr $0000ffe6 - .faraddr $0000ffe7 - .faraddr $0000ffe8 - .faraddr $0000ffe9 - .faraddr $0000ffea - .faraddr $0000ffeb - .faraddr $0000ffec - .faraddr $0000ffed - .faraddr $0000ffee - .faraddr $0000ffef - .faraddr $0000fff0 - .faraddr $0000fff1 - .faraddr $0000fff2 - .faraddr $0000fff3 - .faraddr $0000fff4 - .faraddr $0000fff5 - .faraddr $0000fff6 - .faraddr $0000fff7 - .faraddr $0000fff8 - .faraddr $0000fff9 - .faraddr $0000fffa - .faraddr $0000fffb - .faraddr $0000fffc - .faraddr $0000fffd - .faraddr $0000fffe - .faraddr $0000ffff - .faraddr $00010000 - .faraddr $00010001 - .faraddr $00010002 - .faraddr $00010003 - .faraddr $00010004 - .faraddr $00010005 - .faraddr $00010006 - .faraddr $00010007 - .faraddr $00010008 - .faraddr $00010009 - .faraddr $0001000a - .faraddr $0001000b - .faraddr $0001000c - .faraddr $0001000d - .faraddr $0001000e - .faraddr $0001000f - .faraddr $0010ffe1 - .faraddr $0010ffe2 - .faraddr $0010ffe3 - .faraddr $0010ffe4 - .faraddr $0010ffe5 - .faraddr $0010ffe6 - .faraddr $0010ffe7 - .faraddr $0010ffe8 - .faraddr $0010ffe9 - .faraddr $0010ffea - .faraddr $0010ffeb - .faraddr $0010ffec - .faraddr $0010ffed - .faraddr $0010ffee - .faraddr $0010ffef - .faraddr $0010fff0 - .faraddr $0010fff1 - .faraddr $0010fff2 - .faraddr $0010fff3 - .faraddr $0010fff4 - .faraddr $0010fff5 - .faraddr $0010fff6 - .faraddr $0010fff7 - .faraddr $0010fff8 - .faraddr $0010fff9 - .faraddr $0010fffa - .faraddr $0010fffb - .faraddr $0010fffc - .faraddr $0010fffd - .faraddr $0010fffe - .faraddr $0010ffff - .faraddr $00110000 - .faraddr $00110001 - .faraddr $00110002 - .faraddr $00110003 - .faraddr $00110004 - .faraddr $00110005 - .faraddr $00110006 - .faraddr $00110007 - .faraddr $00110008 - .faraddr $00110009 - .faraddr $0011000a - .faraddr $0011000b - .faraddr $0011000c - .faraddr $0011000d - .faraddr $0011000e - .faraddr $0011000f - .faraddr $0020ffe1 - .faraddr $0020ffe2 - .faraddr $0020ffe3 - .faraddr $0020ffe4 - .faraddr $0020ffe5 - .faraddr $0020ffe6 - .faraddr $0020ffe7 - .faraddr $0020ffe8 - .faraddr $0020ffe9 - .faraddr $0020ffea - .faraddr $0020ffeb - .faraddr $0020ffec - .faraddr $0020ffed - .faraddr $0020ffee - .faraddr $0020ffef - .faraddr $0020fff0 - .faraddr $0020fff1 - .faraddr $0020fff2 - .faraddr $0020fff3 - .faraddr $0020fff4 - .faraddr $0020fff5 - .faraddr $0020fff6 - .faraddr $0020fff7 - .faraddr $0020fff8 - .faraddr $0020fff9 - .faraddr $0020fffa - .faraddr $0020fffb - .faraddr $0020fffc - .faraddr $0020fffd - .faraddr $0020fffe - .faraddr $0020ffff - .faraddr $00210000 - .faraddr $00210001 - .faraddr $00210002 - .faraddr $00210003 - .faraddr $00210004 - .faraddr $00210005 - .faraddr $00210006 - .faraddr $00210007 - .faraddr $00210008 - .faraddr $00210009 - .faraddr $0021000a - .faraddr $0021000b - .faraddr $0021000c - .faraddr $0021000d - .faraddr $0021000e - .faraddr $0021000f - .faraddr $007fffe1 - .faraddr $007fffe2 - .faraddr $007fffe3 - .faraddr $007fffe4 - .faraddr $007fffe5 - .faraddr $007fffe6 - .faraddr $007fffe7 - .faraddr $007fffe8 - .faraddr $007fffe9 - .faraddr $007fffea - .faraddr $007fffeb - .faraddr $007fffec - .faraddr $007fffed - .faraddr $007fffee - .faraddr $007fffef - .faraddr $007ffff0 - .faraddr $007ffff1 - .faraddr $007ffff2 - .faraddr $007ffff3 - .faraddr $007ffff4 - .faraddr $007ffff5 - .faraddr $007ffff6 - .faraddr $007ffff7 - .faraddr $007ffff8 - .faraddr $007ffff9 - .faraddr $007ffffa - .faraddr $007ffffb - .faraddr $007ffffc - .faraddr $007ffffd - .faraddr $007ffffe - .faraddr $007fffff - .faraddr $00800000 - .faraddr $00800001 - .faraddr $00800002 - .faraddr $00800003 - .faraddr $00800004 - .faraddr $00800005 - .faraddr $00800006 - .faraddr $00800007 - .faraddr $00800008 - .faraddr $00800009 - .faraddr $0080000a - .faraddr $0080000b - .faraddr $0080000c - .faraddr $0080000d - .faraddr $0080000e - .faraddr $0080000f - .faraddr $009fffe1 - .faraddr $009fffe2 - .faraddr $009fffe3 - .faraddr $009fffe4 - .faraddr $009fffe5 - .faraddr $009fffe6 - .faraddr $009fffe7 - .faraddr $009fffe8 - .faraddr $009fffe9 - .faraddr $009fffea - .faraddr $009fffeb - .faraddr $009fffec - .faraddr $009fffed - .faraddr $009fffee - .faraddr $009fffef - .faraddr $009ffff0 - .faraddr $009ffff1 - .faraddr $009ffff2 - .faraddr $009ffff3 - .faraddr $009ffff4 - .faraddr $009ffff5 - .faraddr $009ffff6 - .faraddr $009ffff7 - .faraddr $009ffff8 - .faraddr $009ffff9 - .faraddr $009ffffa - .faraddr $009ffffb - .faraddr $009ffffc - .faraddr $009ffffd - .faraddr $009ffffe - .faraddr $009fffff - .faraddr $00a00000 - .faraddr $00a00001 - .faraddr $00a00002 - .faraddr $00a00003 - .faraddr $00a00004 - .faraddr $00a00005 - .faraddr $00a00006 - .faraddr $00a00007 - .faraddr $00a00008 - .faraddr $00a00009 - .faraddr $00a0000a - .faraddr $00a0000b - .faraddr $00a0000c - .faraddr $00a0000d - .faraddr $00a0000e - .faraddr $00a0000f - .faraddr $00ffffe1 - .faraddr $00ffffe2 - .faraddr $00ffffe3 - .faraddr $00ffffe4 - .faraddr $00ffffe5 - .faraddr $00ffffe6 - .faraddr $00ffffe7 - .faraddr $00ffffe8 - .faraddr $00ffffe9 - .faraddr $00ffffea - .faraddr $00ffffeb - .faraddr $00ffffec - .faraddr $00ffffed - .faraddr $00ffffee - .faraddr $00ffffef - .faraddr $00fffff0 - .faraddr $00fffff1 - .faraddr $00fffff2 - .faraddr $00fffff3 - .faraddr $00fffff4 - .faraddr $00fffff5 - .faraddr $00fffff6 - .faraddr $00fffff7 - .faraddr $00fffff8 - .faraddr $00fffff9 - .faraddr $00fffffa - .faraddr $00fffffb - .faraddr $00fffffc - .faraddr $00fffffd - .faraddr $00fffffe - .faraddr $00ffffff + ; 8-digit hex values + .faraddr $00000000 + .faraddr $00000001 + .faraddr $00000002 + .faraddr $00000003 + .faraddr $00000004 + .faraddr $00000005 + .faraddr $00000006 + .faraddr $00000007 + .faraddr $00000008 + .faraddr $00000009 + .faraddr $0000000a + .faraddr $0000000b + .faraddr $0000000c + .faraddr $0000000d + .faraddr $0000000e + .faraddr $0000000f + .faraddr $00000010 + .faraddr $00000011 + .faraddr $00000012 + .faraddr $00000013 + .faraddr $00000070 + .faraddr $00000071 + .faraddr $00000072 + .faraddr $00000073 + .faraddr $00000074 + .faraddr $00000075 + .faraddr $00000076 + .faraddr $00000077 + .faraddr $00000078 + .faraddr $00000079 + .faraddr $0000007a + .faraddr $0000007b + .faraddr $0000007c + .faraddr $0000007d + .faraddr $0000007e + .faraddr $0000007f + .faraddr $00000080 + .faraddr $00000081 + .faraddr $00000082 + .faraddr $00000083 + .faraddr $00000084 + .faraddr $00000085 + .faraddr $00000086 + .faraddr $000000f0 + .faraddr $000000f1 + .faraddr $000000f2 + .faraddr $000000f3 + .faraddr $000000f4 + .faraddr $000000f5 + .faraddr $000000f6 + .faraddr $000000f7 + .faraddr $000000f8 + .faraddr $000000f9 + .faraddr $000000fa + .faraddr $000000fb + .faraddr $000000fc + .faraddr $000000fd + .faraddr $000000fe + .faraddr $000000ff + .faraddr $00000100 + .faraddr $00000101 + .faraddr $00000102 + .faraddr $00000103 + .faraddr $00000fd2 + .faraddr $00000fd3 + .faraddr $00000fd4 + .faraddr $00000fd5 + .faraddr $00000fd6 + .faraddr $00000fd7 + .faraddr $00000fd8 + .faraddr $00000fd9 + .faraddr $00000fda + .faraddr $00000fdb + .faraddr $00000fdc + .faraddr $00000fdd + .faraddr $00000fde + .faraddr $00000fdf + .faraddr $00000fe0 + .faraddr $00000fe1 + .faraddr $00000fe2 + .faraddr $00000fe3 + .faraddr $00000fe4 + .faraddr $00000fe5 + .faraddr $00000fe6 + .faraddr $00000fe7 + .faraddr $00000fe8 + .faraddr $00000fe9 + .faraddr $00000fea + .faraddr $00000feb + .faraddr $00000fec + .faraddr $00000fed + .faraddr $00000fee + .faraddr $00000fef + .faraddr $00000ff0 + .faraddr $00000ff1 + .faraddr $00000ff2 + .faraddr $00000ff3 + .faraddr $00000ff4 + .faraddr $00000ff5 + .faraddr $00000ff6 + .faraddr $00000ff7 + .faraddr $00000ff8 + .faraddr $00000ff9 + .faraddr $00000ffa + .faraddr $00000ffb + .faraddr $00000ffc + .faraddr $00000ffd + .faraddr $00000ffe + .faraddr $00000fff + .faraddr $00001000 + .faraddr $00001001 + .faraddr $00001002 + .faraddr $00001003 + .faraddr $00001004 + .faraddr $00001005 + .faraddr $00001006 + .faraddr $00001007 + .faraddr $00001008 + .faraddr $00007ff0 + .faraddr $00007ff1 + .faraddr $00007ff2 + .faraddr $00007ff3 + .faraddr $00007ff4 + .faraddr $00007ff5 + .faraddr $00007ff6 + .faraddr $00007ff7 + .faraddr $00007ff8 + .faraddr $00007ff9 + .faraddr $00007ffa + .faraddr $00007ffb + .faraddr $00007ffc + .faraddr $00007ffd + .faraddr $00007ffe + .faraddr $00007fff + .faraddr $00008000 + .faraddr $00008001 + .faraddr $00008002 + .faraddr $00008003 + .faraddr $00008004 + .faraddr $00008005 + .faraddr $00008006 + .faraddr $00008007 + .faraddr $00008008 + .faraddr $00008009 + .faraddr $0000800a + .faraddr $0000800b + .faraddr $00009fe1 + .faraddr $00009fe2 + .faraddr $00009fe3 + .faraddr $00009fe4 + .faraddr $00009fe5 + .faraddr $00009fe6 + .faraddr $00009fe7 + .faraddr $00009fe8 + .faraddr $00009fe9 + .faraddr $00009fea + .faraddr $00009feb + .faraddr $00009fec + .faraddr $00009fed + .faraddr $00009fee + .faraddr $00009fef + .faraddr $00009ff0 + .faraddr $00009ff1 + .faraddr $00009ff2 + .faraddr $00009ff3 + .faraddr $00009ff4 + .faraddr $00009ff5 + .faraddr $00009ff6 + .faraddr $00009ff7 + .faraddr $00009ff8 + .faraddr $00009ff9 + .faraddr $00009ffa + .faraddr $00009ffb + .faraddr $00009ffc + .faraddr $00009ffd + .faraddr $00009ffe + .faraddr $00009fff + .faraddr $0000a000 + .faraddr $0000a001 + .faraddr $0000a002 + .faraddr $0000a003 + .faraddr $0000a004 + .faraddr $0000a005 + .faraddr $0000a006 + .faraddr $0000a007 + .faraddr $0000a008 + .faraddr $0000a009 + .faraddr $0000a00a + .faraddr $0000a00b + .faraddr $0000a00c + .faraddr $0000a00d + .faraddr $0000a00e + .faraddr $0000a00f + .faraddr $0000afe1 + .faraddr $0000afe2 + .faraddr $0000afe3 + .faraddr $0000afe4 + .faraddr $0000afe5 + .faraddr $0000afe6 + .faraddr $0000afe7 + .faraddr $0000afe8 + .faraddr $0000afe9 + .faraddr $0000afea + .faraddr $0000afeb + .faraddr $0000afec + .faraddr $0000afed + .faraddr $0000afee + .faraddr $0000afef + .faraddr $0000aff0 + .faraddr $0000aff1 + .faraddr $0000aff2 + .faraddr $0000aff3 + .faraddr $0000aff4 + .faraddr $0000aff5 + .faraddr $0000aff6 + .faraddr $0000aff7 + .faraddr $0000aff8 + .faraddr $0000aff9 + .faraddr $0000affa + .faraddr $0000affb + .faraddr $0000affc + .faraddr $0000affd + .faraddr $0000affe + .faraddr $0000afff + .faraddr $0000b000 + .faraddr $0000b001 + .faraddr $0000b002 + .faraddr $0000b003 + .faraddr $0000b004 + .faraddr $0000b005 + .faraddr $0000b006 + .faraddr $0000b007 + .faraddr $0000b008 + .faraddr $0000b009 + .faraddr $0000b00a + .faraddr $0000b00b + .faraddr $0000b00c + .faraddr $0000b00d + .faraddr $0000b00e + .faraddr $0000b00f + .faraddr $0000ffe1 + .faraddr $0000ffe2 + .faraddr $0000ffe3 + .faraddr $0000ffe4 + .faraddr $0000ffe5 + .faraddr $0000ffe6 + .faraddr $0000ffe7 + .faraddr $0000ffe8 + .faraddr $0000ffe9 + .faraddr $0000ffea + .faraddr $0000ffeb + .faraddr $0000ffec + .faraddr $0000ffed + .faraddr $0000ffee + .faraddr $0000ffef + .faraddr $0000fff0 + .faraddr $0000fff1 + .faraddr $0000fff2 + .faraddr $0000fff3 + .faraddr $0000fff4 + .faraddr $0000fff5 + .faraddr $0000fff6 + .faraddr $0000fff7 + .faraddr $0000fff8 + .faraddr $0000fff9 + .faraddr $0000fffa + .faraddr $0000fffb + .faraddr $0000fffc + .faraddr $0000fffd + .faraddr $0000fffe + .faraddr $0000ffff + .faraddr $00010000 + .faraddr $00010001 + .faraddr $00010002 + .faraddr $00010003 + .faraddr $00010004 + .faraddr $00010005 + .faraddr $00010006 + .faraddr $00010007 + .faraddr $00010008 + .faraddr $00010009 + .faraddr $0001000a + .faraddr $0001000b + .faraddr $0001000c + .faraddr $0001000d + .faraddr $0001000e + .faraddr $0001000f + .faraddr $0010ffe1 + .faraddr $0010ffe2 + .faraddr $0010ffe3 + .faraddr $0010ffe4 + .faraddr $0010ffe5 + .faraddr $0010ffe6 + .faraddr $0010ffe7 + .faraddr $0010ffe8 + .faraddr $0010ffe9 + .faraddr $0010ffea + .faraddr $0010ffeb + .faraddr $0010ffec + .faraddr $0010ffed + .faraddr $0010ffee + .faraddr $0010ffef + .faraddr $0010fff0 + .faraddr $0010fff1 + .faraddr $0010fff2 + .faraddr $0010fff3 + .faraddr $0010fff4 + .faraddr $0010fff5 + .faraddr $0010fff6 + .faraddr $0010fff7 + .faraddr $0010fff8 + .faraddr $0010fff9 + .faraddr $0010fffa + .faraddr $0010fffb + .faraddr $0010fffc + .faraddr $0010fffd + .faraddr $0010fffe + .faraddr $0010ffff + .faraddr $00110000 + .faraddr $00110001 + .faraddr $00110002 + .faraddr $00110003 + .faraddr $00110004 + .faraddr $00110005 + .faraddr $00110006 + .faraddr $00110007 + .faraddr $00110008 + .faraddr $00110009 + .faraddr $0011000a + .faraddr $0011000b + .faraddr $0011000c + .faraddr $0011000d + .faraddr $0011000e + .faraddr $0011000f + .faraddr $0020ffe1 + .faraddr $0020ffe2 + .faraddr $0020ffe3 + .faraddr $0020ffe4 + .faraddr $0020ffe5 + .faraddr $0020ffe6 + .faraddr $0020ffe7 + .faraddr $0020ffe8 + .faraddr $0020ffe9 + .faraddr $0020ffea + .faraddr $0020ffeb + .faraddr $0020ffec + .faraddr $0020ffed + .faraddr $0020ffee + .faraddr $0020ffef + .faraddr $0020fff0 + .faraddr $0020fff1 + .faraddr $0020fff2 + .faraddr $0020fff3 + .faraddr $0020fff4 + .faraddr $0020fff5 + .faraddr $0020fff6 + .faraddr $0020fff7 + .faraddr $0020fff8 + .faraddr $0020fff9 + .faraddr $0020fffa + .faraddr $0020fffb + .faraddr $0020fffc + .faraddr $0020fffd + .faraddr $0020fffe + .faraddr $0020ffff + .faraddr $00210000 + .faraddr $00210001 + .faraddr $00210002 + .faraddr $00210003 + .faraddr $00210004 + .faraddr $00210005 + .faraddr $00210006 + .faraddr $00210007 + .faraddr $00210008 + .faraddr $00210009 + .faraddr $0021000a + .faraddr $0021000b + .faraddr $0021000c + .faraddr $0021000d + .faraddr $0021000e + .faraddr $0021000f + .faraddr $007fffe1 + .faraddr $007fffe2 + .faraddr $007fffe3 + .faraddr $007fffe4 + .faraddr $007fffe5 + .faraddr $007fffe6 + .faraddr $007fffe7 + .faraddr $007fffe8 + .faraddr $007fffe9 + .faraddr $007fffea + .faraddr $007fffeb + .faraddr $007fffec + .faraddr $007fffed + .faraddr $007fffee + .faraddr $007fffef + .faraddr $007ffff0 + .faraddr $007ffff1 + .faraddr $007ffff2 + .faraddr $007ffff3 + .faraddr $007ffff4 + .faraddr $007ffff5 + .faraddr $007ffff6 + .faraddr $007ffff7 + .faraddr $007ffff8 + .faraddr $007ffff9 + .faraddr $007ffffa + .faraddr $007ffffb + .faraddr $007ffffc + .faraddr $007ffffd + .faraddr $007ffffe + .faraddr $007fffff + .faraddr $00800000 + .faraddr $00800001 + .faraddr $00800002 + .faraddr $00800003 + .faraddr $00800004 + .faraddr $00800005 + .faraddr $00800006 + .faraddr $00800007 + .faraddr $00800008 + .faraddr $00800009 + .faraddr $0080000a + .faraddr $0080000b + .faraddr $0080000c + .faraddr $0080000d + .faraddr $0080000e + .faraddr $0080000f + .faraddr $009fffe1 + .faraddr $009fffe2 + .faraddr $009fffe3 + .faraddr $009fffe4 + .faraddr $009fffe5 + .faraddr $009fffe6 + .faraddr $009fffe7 + .faraddr $009fffe8 + .faraddr $009fffe9 + .faraddr $009fffea + .faraddr $009fffeb + .faraddr $009fffec + .faraddr $009fffed + .faraddr $009fffee + .faraddr $009fffef + .faraddr $009ffff0 + .faraddr $009ffff1 + .faraddr $009ffff2 + .faraddr $009ffff3 + .faraddr $009ffff4 + .faraddr $009ffff5 + .faraddr $009ffff6 + .faraddr $009ffff7 + .faraddr $009ffff8 + .faraddr $009ffff9 + .faraddr $009ffffa + .faraddr $009ffffb + .faraddr $009ffffc + .faraddr $009ffffd + .faraddr $009ffffe + .faraddr $009fffff + .faraddr $00a00000 + .faraddr $00a00001 + .faraddr $00a00002 + .faraddr $00a00003 + .faraddr $00a00004 + .faraddr $00a00005 + .faraddr $00a00006 + .faraddr $00a00007 + .faraddr $00a00008 + .faraddr $00a00009 + .faraddr $00a0000a + .faraddr $00a0000b + .faraddr $00a0000c + .faraddr $00a0000d + .faraddr $00a0000e + .faraddr $00a0000f + .faraddr $00ffffe1 + .faraddr $00ffffe2 + .faraddr $00ffffe3 + .faraddr $00ffffe4 + .faraddr $00ffffe5 + .faraddr $00ffffe6 + .faraddr $00ffffe7 + .faraddr $00ffffe8 + .faraddr $00ffffe9 + .faraddr $00ffffea + .faraddr $00ffffeb + .faraddr $00ffffec + .faraddr $00ffffed + .faraddr $00ffffee + .faraddr $00ffffef + .faraddr $00fffff0 + .faraddr $00fffff1 + .faraddr $00fffff2 + .faraddr $00fffff3 + .faraddr $00fffff4 + .faraddr $00fffff5 + .faraddr $00fffff6 + .faraddr $00fffff7 + .faraddr $00fffff8 + .faraddr $00fffff9 + .faraddr $00fffffa + .faraddr $00fffffb + .faraddr $00fffffc + .faraddr $00fffffd + .faraddr $00fffffe + .faraddr $00ffffff - ; 8-digit hex values, uppercase - .faraddr $00000000 - .faraddr $00000001 - .faraddr $00000002 - .faraddr $00000003 - .faraddr $00000004 - .faraddr $00000005 - .faraddr $00000006 - .faraddr $00000007 - .faraddr $00000008 - .faraddr $00000009 - .faraddr $0000000A - .faraddr $0000000B - .faraddr $0000000C - .faraddr $0000000D - .faraddr $0000000E - .faraddr $0000000F - .faraddr $00000010 - .faraddr $00000011 - .faraddr $00000012 - .faraddr $00000013 - .faraddr $00000070 - .faraddr $00000071 - .faraddr $00000072 - .faraddr $00000073 - .faraddr $00000074 - .faraddr $00000075 - .faraddr $00000076 - .faraddr $00000077 - .faraddr $00000078 - .faraddr $00000079 - .faraddr $0000007A - .faraddr $0000007B - .faraddr $0000007C - .faraddr $0000007D - .faraddr $0000007E - .faraddr $0000007F - .faraddr $00000080 - .faraddr $00000081 - .faraddr $00000082 - .faraddr $00000083 - .faraddr $00000084 - .faraddr $00000085 - .faraddr $00000086 - .faraddr $000000F0 - .faraddr $000000F1 - .faraddr $000000F2 - .faraddr $000000F3 - .faraddr $000000F4 - .faraddr $000000F5 - .faraddr $000000F6 - .faraddr $000000F7 - .faraddr $000000F8 - .faraddr $000000F9 - .faraddr $000000FA - .faraddr $000000FB - .faraddr $000000FC - .faraddr $000000FD - .faraddr $000000FE - .faraddr $000000FF - .faraddr $00000100 - .faraddr $00000101 - .faraddr $00000102 - .faraddr $00000103 - .faraddr $00000FD2 - .faraddr $00000FD3 - .faraddr $00000FD4 - .faraddr $00000FD5 - .faraddr $00000FD6 - .faraddr $00000FD7 - .faraddr $00000FD8 - .faraddr $00000FD9 - .faraddr $00000FDA - .faraddr $00000FDB - .faraddr $00000FDC - .faraddr $00000FDD - .faraddr $00000FDE - .faraddr $00000FDF - .faraddr $00000FE0 - .faraddr $00000FE1 - .faraddr $00000FE2 - .faraddr $00000FE3 - .faraddr $00000FE4 - .faraddr $00000FE5 - .faraddr $00000FE6 - .faraddr $00000FE7 - .faraddr $00000FE8 - .faraddr $00000FE9 - .faraddr $00000FEA - .faraddr $00000FEB - .faraddr $00000FEC - .faraddr $00000FED - .faraddr $00000FEE - .faraddr $00000FEF - .faraddr $00000FF0 - .faraddr $00000FF1 - .faraddr $00000FF2 - .faraddr $00000FF3 - .faraddr $00000FF4 - .faraddr $00000FF5 - .faraddr $00000FF6 - .faraddr $00000FF7 - .faraddr $00000FF8 - .faraddr $00000FF9 - .faraddr $00000FFA - .faraddr $00000FFB - .faraddr $00000FFC - .faraddr $00000FFD - .faraddr $00000FFE - .faraddr $00000FFF - .faraddr $00001000 - .faraddr $00001001 - .faraddr $00001002 - .faraddr $00001003 - .faraddr $00001004 - .faraddr $00001005 - .faraddr $00001006 - .faraddr $00001007 - .faraddr $00001008 - .faraddr $00007FF0 - .faraddr $00007FF1 - .faraddr $00007FF2 - .faraddr $00007FF3 - .faraddr $00007FF4 - .faraddr $00007FF5 - .faraddr $00007FF6 - .faraddr $00007FF7 - .faraddr $00007FF8 - .faraddr $00007FF9 - .faraddr $00007FFA - .faraddr $00007FFB - .faraddr $00007FFC - .faraddr $00007FFD - .faraddr $00007FFE - .faraddr $00007FFF - .faraddr $00008000 - .faraddr $00008001 - .faraddr $00008002 - .faraddr $00008003 - .faraddr $00008004 - .faraddr $00008005 - .faraddr $00008006 - .faraddr $00008007 - .faraddr $00008008 - .faraddr $00008009 - .faraddr $0000800A - .faraddr $0000800B - .faraddr $00009FE1 - .faraddr $00009FE2 - .faraddr $00009FE3 - .faraddr $00009FE4 - .faraddr $00009FE5 - .faraddr $00009FE6 - .faraddr $00009FE7 - .faraddr $00009FE8 - .faraddr $00009FE9 - .faraddr $00009FEA - .faraddr $00009FEB - .faraddr $00009FEC - .faraddr $00009FED - .faraddr $00009FEE - .faraddr $00009FEF - .faraddr $00009FF0 - .faraddr $00009FF1 - .faraddr $00009FF2 - .faraddr $00009FF3 - .faraddr $00009FF4 - .faraddr $00009FF5 - .faraddr $00009FF6 - .faraddr $00009FF7 - .faraddr $00009FF8 - .faraddr $00009FF9 - .faraddr $00009FFA - .faraddr $00009FFB - .faraddr $00009FFC - .faraddr $00009FFD - .faraddr $00009FFE - .faraddr $00009FFF - .faraddr $0000A000 - .faraddr $0000A001 - .faraddr $0000A002 - .faraddr $0000A003 - .faraddr $0000A004 - .faraddr $0000A005 - .faraddr $0000A006 - .faraddr $0000A007 - .faraddr $0000A008 - .faraddr $0000A009 - .faraddr $0000A00A - .faraddr $0000A00B - .faraddr $0000A00C - .faraddr $0000A00D - .faraddr $0000A00E - .faraddr $0000A00F - .faraddr $0000AFE1 - .faraddr $0000AFE2 - .faraddr $0000AFE3 - .faraddr $0000AFE4 - .faraddr $0000AFE5 - .faraddr $0000AFE6 - .faraddr $0000AFE7 - .faraddr $0000AFE8 - .faraddr $0000AFE9 - .faraddr $0000AFEA - .faraddr $0000AFEB - .faraddr $0000AFEC - .faraddr $0000AFED - .faraddr $0000AFEE - .faraddr $0000AFEF - .faraddr $0000AFF0 - .faraddr $0000AFF1 - .faraddr $0000AFF2 - .faraddr $0000AFF3 - .faraddr $0000AFF4 - .faraddr $0000AFF5 - .faraddr $0000AFF6 - .faraddr $0000AFF7 - .faraddr $0000AFF8 - .faraddr $0000AFF9 - .faraddr $0000AFFA - .faraddr $0000AFFB - .faraddr $0000AFFC - .faraddr $0000AFFD - .faraddr $0000AFFE - .faraddr $0000AFFF - .faraddr $0000B000 - .faraddr $0000B001 - .faraddr $0000B002 - .faraddr $0000B003 - .faraddr $0000B004 - .faraddr $0000B005 - .faraddr $0000B006 - .faraddr $0000B007 - .faraddr $0000B008 - .faraddr $0000B009 - .faraddr $0000B00A - .faraddr $0000B00B - .faraddr $0000B00C - .faraddr $0000B00D - .faraddr $0000B00E - .faraddr $0000B00F - .faraddr $0000FFE1 - .faraddr $0000FFE2 - .faraddr $0000FFE3 - .faraddr $0000FFE4 - .faraddr $0000FFE5 - .faraddr $0000FFE6 - .faraddr $0000FFE7 - .faraddr $0000FFE8 - .faraddr $0000FFE9 - .faraddr $0000FFEA - .faraddr $0000FFEB - .faraddr $0000FFEC - .faraddr $0000FFED - .faraddr $0000FFEE - .faraddr $0000FFEF - .faraddr $0000FFF0 - .faraddr $0000FFF1 - .faraddr $0000FFF2 - .faraddr $0000FFF3 - .faraddr $0000FFF4 - .faraddr $0000FFF5 - .faraddr $0000FFF6 - .faraddr $0000FFF7 - .faraddr $0000FFF8 - .faraddr $0000FFF9 - .faraddr $0000FFFA - .faraddr $0000FFFB - .faraddr $0000FFFC - .faraddr $0000FFFD - .faraddr $0000FFFE - .faraddr $0000FFFF - .faraddr $00010000 - .faraddr $00010001 - .faraddr $00010002 - .faraddr $00010003 - .faraddr $00010004 - .faraddr $00010005 - .faraddr $00010006 - .faraddr $00010007 - .faraddr $00010008 - .faraddr $00010009 - .faraddr $0001000A - .faraddr $0001000B - .faraddr $0001000C - .faraddr $0001000D - .faraddr $0001000E - .faraddr $0001000F - .faraddr $0010FFE1 - .faraddr $0010FFE2 - .faraddr $0010FFE3 - .faraddr $0010FFE4 - .faraddr $0010FFE5 - .faraddr $0010FFE6 - .faraddr $0010FFE7 - .faraddr $0010FFE8 - .faraddr $0010FFE9 - .faraddr $0010FFEA - .faraddr $0010FFEB - .faraddr $0010FFEC - .faraddr $0010FFED - .faraddr $0010FFEE - .faraddr $0010FFEF - .faraddr $0010FFF0 - .faraddr $0010FFF1 - .faraddr $0010FFF2 - .faraddr $0010FFF3 - .faraddr $0010FFF4 - .faraddr $0010FFF5 - .faraddr $0010FFF6 - .faraddr $0010FFF7 - .faraddr $0010FFF8 - .faraddr $0010FFF9 - .faraddr $0010FFFA - .faraddr $0010FFFB - .faraddr $0010FFFC - .faraddr $0010FFFD - .faraddr $0010FFFE - .faraddr $0010FFFF - .faraddr $00110000 - .faraddr $00110001 - .faraddr $00110002 - .faraddr $00110003 - .faraddr $00110004 - .faraddr $00110005 - .faraddr $00110006 - .faraddr $00110007 - .faraddr $00110008 - .faraddr $00110009 - .faraddr $0011000A - .faraddr $0011000B - .faraddr $0011000C - .faraddr $0011000D - .faraddr $0011000E - .faraddr $0011000F - .faraddr $0020FFE1 - .faraddr $0020FFE2 - .faraddr $0020FFE3 - .faraddr $0020FFE4 - .faraddr $0020FFE5 - .faraddr $0020FFE6 - .faraddr $0020FFE7 - .faraddr $0020FFE8 - .faraddr $0020FFE9 - .faraddr $0020FFEA - .faraddr $0020FFEB - .faraddr $0020FFEC - .faraddr $0020FFED - .faraddr $0020FFEE - .faraddr $0020FFEF - .faraddr $0020FFF0 - .faraddr $0020FFF1 - .faraddr $0020FFF2 - .faraddr $0020FFF3 - .faraddr $0020FFF4 - .faraddr $0020FFF5 - .faraddr $0020FFF6 - .faraddr $0020FFF7 - .faraddr $0020FFF8 - .faraddr $0020FFF9 - .faraddr $0020FFFA - .faraddr $0020FFFB - .faraddr $0020FFFC - .faraddr $0020FFFD - .faraddr $0020FFFE - .faraddr $0020FFFF - .faraddr $00210000 - .faraddr $00210001 - .faraddr $00210002 - .faraddr $00210003 - .faraddr $00210004 - .faraddr $00210005 - .faraddr $00210006 - .faraddr $00210007 - .faraddr $00210008 - .faraddr $00210009 - .faraddr $0021000A - .faraddr $0021000B - .faraddr $0021000C - .faraddr $0021000D - .faraddr $0021000E - .faraddr $0021000F - .faraddr $007FFFE1 - .faraddr $007FFFE2 - .faraddr $007FFFE3 - .faraddr $007FFFE4 - .faraddr $007FFFE5 - .faraddr $007FFFE6 - .faraddr $007FFFE7 - .faraddr $007FFFE8 - .faraddr $007FFFE9 - .faraddr $007FFFEA - .faraddr $007FFFEB - .faraddr $007FFFEC - .faraddr $007FFFED - .faraddr $007FFFEE - .faraddr $007FFFEF - .faraddr $007FFFF0 - .faraddr $007FFFF1 - .faraddr $007FFFF2 - .faraddr $007FFFF3 - .faraddr $007FFFF4 - .faraddr $007FFFF5 - .faraddr $007FFFF6 - .faraddr $007FFFF7 - .faraddr $007FFFF8 - .faraddr $007FFFF9 - .faraddr $007FFFFA - .faraddr $007FFFFB - .faraddr $007FFFFC - .faraddr $007FFFFD - .faraddr $007FFFFE - .faraddr $007FFFFF - .faraddr $00800000 - .faraddr $00800001 - .faraddr $00800002 - .faraddr $00800003 - .faraddr $00800004 - .faraddr $00800005 - .faraddr $00800006 - .faraddr $00800007 - .faraddr $00800008 - .faraddr $00800009 - .faraddr $0080000A - .faraddr $0080000B - .faraddr $0080000C - .faraddr $0080000D - .faraddr $0080000E - .faraddr $0080000F - .faraddr $009FFFE1 - .faraddr $009FFFE2 - .faraddr $009FFFE3 - .faraddr $009FFFE4 - .faraddr $009FFFE5 - .faraddr $009FFFE6 - .faraddr $009FFFE7 - .faraddr $009FFFE8 - .faraddr $009FFFE9 - .faraddr $009FFFEA - .faraddr $009FFFEB - .faraddr $009FFFEC - .faraddr $009FFFED - .faraddr $009FFFEE - .faraddr $009FFFEF - .faraddr $009FFFF0 - .faraddr $009FFFF1 - .faraddr $009FFFF2 - .faraddr $009FFFF3 - .faraddr $009FFFF4 - .faraddr $009FFFF5 - .faraddr $009FFFF6 - .faraddr $009FFFF7 - .faraddr $009FFFF8 - .faraddr $009FFFF9 - .faraddr $009FFFFA - .faraddr $009FFFFB - .faraddr $009FFFFC - .faraddr $009FFFFD - .faraddr $009FFFFE - .faraddr $009FFFFF - .faraddr $00A00000 - .faraddr $00A00001 - .faraddr $00A00002 - .faraddr $00A00003 - .faraddr $00A00004 - .faraddr $00A00005 - .faraddr $00A00006 - .faraddr $00A00007 - .faraddr $00A00008 - .faraddr $00A00009 - .faraddr $00A0000A - .faraddr $00A0000B - .faraddr $00A0000C - .faraddr $00A0000D - .faraddr $00A0000E - .faraddr $00A0000F - .faraddr $00FFFFE1 - .faraddr $00FFFFE2 - .faraddr $00FFFFE3 - .faraddr $00FFFFE4 - .faraddr $00FFFFE5 - .faraddr $00FFFFE6 - .faraddr $00FFFFE7 - .faraddr $00FFFFE8 - .faraddr $00FFFFE9 - .faraddr $00FFFFEA - .faraddr $00FFFFEB - .faraddr $00FFFFEC - .faraddr $00FFFFED - .faraddr $00FFFFEE - .faraddr $00FFFFEF - .faraddr $00FFFFF0 - .faraddr $00FFFFF1 - .faraddr $00FFFFF2 - .faraddr $00FFFFF3 - .faraddr $00FFFFF4 - .faraddr $00FFFFF5 - .faraddr $00FFFFF6 - .faraddr $00FFFFF7 - .faraddr $00FFFFF8 - .faraddr $00FFFFF9 - .faraddr $00FFFFFA - .faraddr $00FFFFFB - .faraddr $00FFFFFC - .faraddr $00FFFFFD - .faraddr $00FFFFFE - .faraddr $00FFFFFF + ; 8-digit hex values, uppercase + .faraddr $00000000 + .faraddr $00000001 + .faraddr $00000002 + .faraddr $00000003 + .faraddr $00000004 + .faraddr $00000005 + .faraddr $00000006 + .faraddr $00000007 + .faraddr $00000008 + .faraddr $00000009 + .faraddr $0000000A + .faraddr $0000000B + .faraddr $0000000C + .faraddr $0000000D + .faraddr $0000000E + .faraddr $0000000F + .faraddr $00000010 + .faraddr $00000011 + .faraddr $00000012 + .faraddr $00000013 + .faraddr $00000070 + .faraddr $00000071 + .faraddr $00000072 + .faraddr $00000073 + .faraddr $00000074 + .faraddr $00000075 + .faraddr $00000076 + .faraddr $00000077 + .faraddr $00000078 + .faraddr $00000079 + .faraddr $0000007A + .faraddr $0000007B + .faraddr $0000007C + .faraddr $0000007D + .faraddr $0000007E + .faraddr $0000007F + .faraddr $00000080 + .faraddr $00000081 + .faraddr $00000082 + .faraddr $00000083 + .faraddr $00000084 + .faraddr $00000085 + .faraddr $00000086 + .faraddr $000000F0 + .faraddr $000000F1 + .faraddr $000000F2 + .faraddr $000000F3 + .faraddr $000000F4 + .faraddr $000000F5 + .faraddr $000000F6 + .faraddr $000000F7 + .faraddr $000000F8 + .faraddr $000000F9 + .faraddr $000000FA + .faraddr $000000FB + .faraddr $000000FC + .faraddr $000000FD + .faraddr $000000FE + .faraddr $000000FF + .faraddr $00000100 + .faraddr $00000101 + .faraddr $00000102 + .faraddr $00000103 + .faraddr $00000FD2 + .faraddr $00000FD3 + .faraddr $00000FD4 + .faraddr $00000FD5 + .faraddr $00000FD6 + .faraddr $00000FD7 + .faraddr $00000FD8 + .faraddr $00000FD9 + .faraddr $00000FDA + .faraddr $00000FDB + .faraddr $00000FDC + .faraddr $00000FDD + .faraddr $00000FDE + .faraddr $00000FDF + .faraddr $00000FE0 + .faraddr $00000FE1 + .faraddr $00000FE2 + .faraddr $00000FE3 + .faraddr $00000FE4 + .faraddr $00000FE5 + .faraddr $00000FE6 + .faraddr $00000FE7 + .faraddr $00000FE8 + .faraddr $00000FE9 + .faraddr $00000FEA + .faraddr $00000FEB + .faraddr $00000FEC + .faraddr $00000FED + .faraddr $00000FEE + .faraddr $00000FEF + .faraddr $00000FF0 + .faraddr $00000FF1 + .faraddr $00000FF2 + .faraddr $00000FF3 + .faraddr $00000FF4 + .faraddr $00000FF5 + .faraddr $00000FF6 + .faraddr $00000FF7 + .faraddr $00000FF8 + .faraddr $00000FF9 + .faraddr $00000FFA + .faraddr $00000FFB + .faraddr $00000FFC + .faraddr $00000FFD + .faraddr $00000FFE + .faraddr $00000FFF + .faraddr $00001000 + .faraddr $00001001 + .faraddr $00001002 + .faraddr $00001003 + .faraddr $00001004 + .faraddr $00001005 + .faraddr $00001006 + .faraddr $00001007 + .faraddr $00001008 + .faraddr $00007FF0 + .faraddr $00007FF1 + .faraddr $00007FF2 + .faraddr $00007FF3 + .faraddr $00007FF4 + .faraddr $00007FF5 + .faraddr $00007FF6 + .faraddr $00007FF7 + .faraddr $00007FF8 + .faraddr $00007FF9 + .faraddr $00007FFA + .faraddr $00007FFB + .faraddr $00007FFC + .faraddr $00007FFD + .faraddr $00007FFE + .faraddr $00007FFF + .faraddr $00008000 + .faraddr $00008001 + .faraddr $00008002 + .faraddr $00008003 + .faraddr $00008004 + .faraddr $00008005 + .faraddr $00008006 + .faraddr $00008007 + .faraddr $00008008 + .faraddr $00008009 + .faraddr $0000800A + .faraddr $0000800B + .faraddr $00009FE1 + .faraddr $00009FE2 + .faraddr $00009FE3 + .faraddr $00009FE4 + .faraddr $00009FE5 + .faraddr $00009FE6 + .faraddr $00009FE7 + .faraddr $00009FE8 + .faraddr $00009FE9 + .faraddr $00009FEA + .faraddr $00009FEB + .faraddr $00009FEC + .faraddr $00009FED + .faraddr $00009FEE + .faraddr $00009FEF + .faraddr $00009FF0 + .faraddr $00009FF1 + .faraddr $00009FF2 + .faraddr $00009FF3 + .faraddr $00009FF4 + .faraddr $00009FF5 + .faraddr $00009FF6 + .faraddr $00009FF7 + .faraddr $00009FF8 + .faraddr $00009FF9 + .faraddr $00009FFA + .faraddr $00009FFB + .faraddr $00009FFC + .faraddr $00009FFD + .faraddr $00009FFE + .faraddr $00009FFF + .faraddr $0000A000 + .faraddr $0000A001 + .faraddr $0000A002 + .faraddr $0000A003 + .faraddr $0000A004 + .faraddr $0000A005 + .faraddr $0000A006 + .faraddr $0000A007 + .faraddr $0000A008 + .faraddr $0000A009 + .faraddr $0000A00A + .faraddr $0000A00B + .faraddr $0000A00C + .faraddr $0000A00D + .faraddr $0000A00E + .faraddr $0000A00F + .faraddr $0000AFE1 + .faraddr $0000AFE2 + .faraddr $0000AFE3 + .faraddr $0000AFE4 + .faraddr $0000AFE5 + .faraddr $0000AFE6 + .faraddr $0000AFE7 + .faraddr $0000AFE8 + .faraddr $0000AFE9 + .faraddr $0000AFEA + .faraddr $0000AFEB + .faraddr $0000AFEC + .faraddr $0000AFED + .faraddr $0000AFEE + .faraddr $0000AFEF + .faraddr $0000AFF0 + .faraddr $0000AFF1 + .faraddr $0000AFF2 + .faraddr $0000AFF3 + .faraddr $0000AFF4 + .faraddr $0000AFF5 + .faraddr $0000AFF6 + .faraddr $0000AFF7 + .faraddr $0000AFF8 + .faraddr $0000AFF9 + .faraddr $0000AFFA + .faraddr $0000AFFB + .faraddr $0000AFFC + .faraddr $0000AFFD + .faraddr $0000AFFE + .faraddr $0000AFFF + .faraddr $0000B000 + .faraddr $0000B001 + .faraddr $0000B002 + .faraddr $0000B003 + .faraddr $0000B004 + .faraddr $0000B005 + .faraddr $0000B006 + .faraddr $0000B007 + .faraddr $0000B008 + .faraddr $0000B009 + .faraddr $0000B00A + .faraddr $0000B00B + .faraddr $0000B00C + .faraddr $0000B00D + .faraddr $0000B00E + .faraddr $0000B00F + .faraddr $0000FFE1 + .faraddr $0000FFE2 + .faraddr $0000FFE3 + .faraddr $0000FFE4 + .faraddr $0000FFE5 + .faraddr $0000FFE6 + .faraddr $0000FFE7 + .faraddr $0000FFE8 + .faraddr $0000FFE9 + .faraddr $0000FFEA + .faraddr $0000FFEB + .faraddr $0000FFEC + .faraddr $0000FFED + .faraddr $0000FFEE + .faraddr $0000FFEF + .faraddr $0000FFF0 + .faraddr $0000FFF1 + .faraddr $0000FFF2 + .faraddr $0000FFF3 + .faraddr $0000FFF4 + .faraddr $0000FFF5 + .faraddr $0000FFF6 + .faraddr $0000FFF7 + .faraddr $0000FFF8 + .faraddr $0000FFF9 + .faraddr $0000FFFA + .faraddr $0000FFFB + .faraddr $0000FFFC + .faraddr $0000FFFD + .faraddr $0000FFFE + .faraddr $0000FFFF + .faraddr $00010000 + .faraddr $00010001 + .faraddr $00010002 + .faraddr $00010003 + .faraddr $00010004 + .faraddr $00010005 + .faraddr $00010006 + .faraddr $00010007 + .faraddr $00010008 + .faraddr $00010009 + .faraddr $0001000A + .faraddr $0001000B + .faraddr $0001000C + .faraddr $0001000D + .faraddr $0001000E + .faraddr $0001000F + .faraddr $0010FFE1 + .faraddr $0010FFE2 + .faraddr $0010FFE3 + .faraddr $0010FFE4 + .faraddr $0010FFE5 + .faraddr $0010FFE6 + .faraddr $0010FFE7 + .faraddr $0010FFE8 + .faraddr $0010FFE9 + .faraddr $0010FFEA + .faraddr $0010FFEB + .faraddr $0010FFEC + .faraddr $0010FFED + .faraddr $0010FFEE + .faraddr $0010FFEF + .faraddr $0010FFF0 + .faraddr $0010FFF1 + .faraddr $0010FFF2 + .faraddr $0010FFF3 + .faraddr $0010FFF4 + .faraddr $0010FFF5 + .faraddr $0010FFF6 + .faraddr $0010FFF7 + .faraddr $0010FFF8 + .faraddr $0010FFF9 + .faraddr $0010FFFA + .faraddr $0010FFFB + .faraddr $0010FFFC + .faraddr $0010FFFD + .faraddr $0010FFFE + .faraddr $0010FFFF + .faraddr $00110000 + .faraddr $00110001 + .faraddr $00110002 + .faraddr $00110003 + .faraddr $00110004 + .faraddr $00110005 + .faraddr $00110006 + .faraddr $00110007 + .faraddr $00110008 + .faraddr $00110009 + .faraddr $0011000A + .faraddr $0011000B + .faraddr $0011000C + .faraddr $0011000D + .faraddr $0011000E + .faraddr $0011000F + .faraddr $0020FFE1 + .faraddr $0020FFE2 + .faraddr $0020FFE3 + .faraddr $0020FFE4 + .faraddr $0020FFE5 + .faraddr $0020FFE6 + .faraddr $0020FFE7 + .faraddr $0020FFE8 + .faraddr $0020FFE9 + .faraddr $0020FFEA + .faraddr $0020FFEB + .faraddr $0020FFEC + .faraddr $0020FFED + .faraddr $0020FFEE + .faraddr $0020FFEF + .faraddr $0020FFF0 + .faraddr $0020FFF1 + .faraddr $0020FFF2 + .faraddr $0020FFF3 + .faraddr $0020FFF4 + .faraddr $0020FFF5 + .faraddr $0020FFF6 + .faraddr $0020FFF7 + .faraddr $0020FFF8 + .faraddr $0020FFF9 + .faraddr $0020FFFA + .faraddr $0020FFFB + .faraddr $0020FFFC + .faraddr $0020FFFD + .faraddr $0020FFFE + .faraddr $0020FFFF + .faraddr $00210000 + .faraddr $00210001 + .faraddr $00210002 + .faraddr $00210003 + .faraddr $00210004 + .faraddr $00210005 + .faraddr $00210006 + .faraddr $00210007 + .faraddr $00210008 + .faraddr $00210009 + .faraddr $0021000A + .faraddr $0021000B + .faraddr $0021000C + .faraddr $0021000D + .faraddr $0021000E + .faraddr $0021000F + .faraddr $007FFFE1 + .faraddr $007FFFE2 + .faraddr $007FFFE3 + .faraddr $007FFFE4 + .faraddr $007FFFE5 + .faraddr $007FFFE6 + .faraddr $007FFFE7 + .faraddr $007FFFE8 + .faraddr $007FFFE9 + .faraddr $007FFFEA + .faraddr $007FFFEB + .faraddr $007FFFEC + .faraddr $007FFFED + .faraddr $007FFFEE + .faraddr $007FFFEF + .faraddr $007FFFF0 + .faraddr $007FFFF1 + .faraddr $007FFFF2 + .faraddr $007FFFF3 + .faraddr $007FFFF4 + .faraddr $007FFFF5 + .faraddr $007FFFF6 + .faraddr $007FFFF7 + .faraddr $007FFFF8 + .faraddr $007FFFF9 + .faraddr $007FFFFA + .faraddr $007FFFFB + .faraddr $007FFFFC + .faraddr $007FFFFD + .faraddr $007FFFFE + .faraddr $007FFFFF + .faraddr $00800000 + .faraddr $00800001 + .faraddr $00800002 + .faraddr $00800003 + .faraddr $00800004 + .faraddr $00800005 + .faraddr $00800006 + .faraddr $00800007 + .faraddr $00800008 + .faraddr $00800009 + .faraddr $0080000A + .faraddr $0080000B + .faraddr $0080000C + .faraddr $0080000D + .faraddr $0080000E + .faraddr $0080000F + .faraddr $009FFFE1 + .faraddr $009FFFE2 + .faraddr $009FFFE3 + .faraddr $009FFFE4 + .faraddr $009FFFE5 + .faraddr $009FFFE6 + .faraddr $009FFFE7 + .faraddr $009FFFE8 + .faraddr $009FFFE9 + .faraddr $009FFFEA + .faraddr $009FFFEB + .faraddr $009FFFEC + .faraddr $009FFFED + .faraddr $009FFFEE + .faraddr $009FFFEF + .faraddr $009FFFF0 + .faraddr $009FFFF1 + .faraddr $009FFFF2 + .faraddr $009FFFF3 + .faraddr $009FFFF4 + .faraddr $009FFFF5 + .faraddr $009FFFF6 + .faraddr $009FFFF7 + .faraddr $009FFFF8 + .faraddr $009FFFF9 + .faraddr $009FFFFA + .faraddr $009FFFFB + .faraddr $009FFFFC + .faraddr $009FFFFD + .faraddr $009FFFFE + .faraddr $009FFFFF + .faraddr $00A00000 + .faraddr $00A00001 + .faraddr $00A00002 + .faraddr $00A00003 + .faraddr $00A00004 + .faraddr $00A00005 + .faraddr $00A00006 + .faraddr $00A00007 + .faraddr $00A00008 + .faraddr $00A00009 + .faraddr $00A0000A + .faraddr $00A0000B + .faraddr $00A0000C + .faraddr $00A0000D + .faraddr $00A0000E + .faraddr $00A0000F + .faraddr $00FFFFE1 + .faraddr $00FFFFE2 + .faraddr $00FFFFE3 + .faraddr $00FFFFE4 + .faraddr $00FFFFE5 + .faraddr $00FFFFE6 + .faraddr $00FFFFE7 + .faraddr $00FFFFE8 + .faraddr $00FFFFE9 + .faraddr $00FFFFEA + .faraddr $00FFFFEB + .faraddr $00FFFFEC + .faraddr $00FFFFED + .faraddr $00FFFFEE + .faraddr $00FFFFEF + .faraddr $00FFFFF0 + .faraddr $00FFFFF1 + .faraddr $00FFFFF2 + .faraddr $00FFFFF3 + .faraddr $00FFFFF4 + .faraddr $00FFFFF5 + .faraddr $00FFFFF6 + .faraddr $00FFFFF7 + .faraddr $00FFFFF8 + .faraddr $00FFFFF9 + .faraddr $00FFFFFA + .faraddr $00FFFFFB + .faraddr $00FFFFFC + .faraddr $00FFFFFD + .faraddr $00FFFFFE + .faraddr $00FFFFFF - ; alternative hex values - .faraddr 0h - .faraddr 1h - .faraddr 2h - .faraddr 3h - .faraddr 4h - .faraddr 5h - .faraddr 6h - .faraddr 7h - .faraddr 8h - .faraddr 9h - .faraddr 0ah - .faraddr 0bh - .faraddr 0ch - .faraddr 0dh - .faraddr 0eh - .faraddr 0fh - .faraddr 10h - .faraddr 11h - .faraddr 12h - .faraddr 13h - .faraddr 70h - .faraddr 71h - .faraddr 72h - .faraddr 73h - .faraddr 74h - .faraddr 75h - .faraddr 76h - .faraddr 77h - .faraddr 78h - .faraddr 79h - .faraddr 7ah - .faraddr 7bh - .faraddr 7ch - .faraddr 7dh - .faraddr 7eh - .faraddr 7fh - .faraddr 80h - .faraddr 81h - .faraddr 82h - .faraddr 83h - .faraddr 84h - .faraddr 85h - .faraddr 86h - .faraddr 0f0h - .faraddr 0f1h - .faraddr 0f2h - .faraddr 0f3h - .faraddr 0f4h - .faraddr 0f5h - .faraddr 0f6h - .faraddr 0f7h - .faraddr 0f8h - .faraddr 0f9h - .faraddr 0fah - .faraddr 0fbh - .faraddr 0fch - .faraddr 0fdh - .faraddr 0feh - .faraddr 0ffh - .faraddr 100h - .faraddr 101h - .faraddr 102h - .faraddr 103h - .faraddr 0fd2h - .faraddr 0fd3h - .faraddr 0fd4h - .faraddr 0fd5h - .faraddr 0fd6h - .faraddr 0fd7h - .faraddr 0fd8h - .faraddr 0fd9h - .faraddr 0fdah - .faraddr 0fdbh - .faraddr 0fdch - .faraddr 0fddh - .faraddr 0fdeh - .faraddr 0fdfh - .faraddr 0fe0h - .faraddr 0fe1h - .faraddr 0fe2h - .faraddr 0fe3h - .faraddr 0fe4h - .faraddr 0fe5h - .faraddr 0fe6h - .faraddr 0fe7h - .faraddr 0fe8h - .faraddr 0fe9h - .faraddr 0feah - .faraddr 0febh - .faraddr 0fech - .faraddr 0fedh - .faraddr 0feeh - .faraddr 0fefh - .faraddr 0ff0h - .faraddr 0ff1h - .faraddr 0ff2h - .faraddr 0ff3h - .faraddr 0ff4h - .faraddr 0ff5h - .faraddr 0ff6h - .faraddr 0ff7h - .faraddr 0ff8h - .faraddr 0ff9h - .faraddr 0ffah - .faraddr 0ffbh - .faraddr 0ffch - .faraddr 0ffdh - .faraddr 0ffeh - .faraddr 0fffh - .faraddr 1000h - .faraddr 1001h - .faraddr 1002h - .faraddr 1003h - .faraddr 1004h - .faraddr 1005h - .faraddr 1006h - .faraddr 1007h - .faraddr 1008h - .faraddr 7ff0h - .faraddr 7ff1h - .faraddr 7ff2h - .faraddr 7ff3h - .faraddr 7ff4h - .faraddr 7ff5h - .faraddr 7ff6h - .faraddr 7ff7h - .faraddr 7ff8h - .faraddr 7ff9h - .faraddr 7ffah - .faraddr 7ffbh - .faraddr 7ffch - .faraddr 7ffdh - .faraddr 7ffeh - .faraddr 7fffh - .faraddr 8000h - .faraddr 8001h - .faraddr 8002h - .faraddr 8003h - .faraddr 8004h - .faraddr 8005h - .faraddr 8006h - .faraddr 8007h - .faraddr 8008h - .faraddr 8009h - .faraddr 800ah - .faraddr 800bh - .faraddr 9fe1h - .faraddr 9fe2h - .faraddr 9fe3h - .faraddr 9fe4h - .faraddr 9fe5h - .faraddr 9fe6h - .faraddr 9fe7h - .faraddr 9fe8h - .faraddr 9fe9h - .faraddr 9feah - .faraddr 9febh - .faraddr 9fech - .faraddr 9fedh - .faraddr 9feeh - .faraddr 9fefh - .faraddr 9ff0h - .faraddr 9ff1h - .faraddr 9ff2h - .faraddr 9ff3h - .faraddr 9ff4h - .faraddr 9ff5h - .faraddr 9ff6h - .faraddr 9ff7h - .faraddr 9ff8h - .faraddr 9ff9h - .faraddr 9ffah - .faraddr 9ffbh - .faraddr 9ffch - .faraddr 9ffdh - .faraddr 9ffeh - .faraddr 9fffh - .faraddr 0a000h - .faraddr 0a001h - .faraddr 0a002h - .faraddr 0a003h - .faraddr 0a004h - .faraddr 0a005h - .faraddr 0a006h - .faraddr 0a007h - .faraddr 0a008h - .faraddr 0a009h - .faraddr 0a00ah - .faraddr 0a00bh - .faraddr 0a00ch - .faraddr 0a00dh - .faraddr 0a00eh - .faraddr 0a00fh - .faraddr 0afe1h - .faraddr 0afe2h - .faraddr 0afe3h - .faraddr 0afe4h - .faraddr 0afe5h - .faraddr 0afe6h - .faraddr 0afe7h - .faraddr 0afe8h - .faraddr 0afe9h - .faraddr 0afeah - .faraddr 0afebh - .faraddr 0afech - .faraddr 0afedh - .faraddr 0afeeh - .faraddr 0afefh - .faraddr 0aff0h - .faraddr 0aff1h - .faraddr 0aff2h - .faraddr 0aff3h - .faraddr 0aff4h - .faraddr 0aff5h - .faraddr 0aff6h - .faraddr 0aff7h - .faraddr 0aff8h - .faraddr 0aff9h - .faraddr 0affah - .faraddr 0affbh - .faraddr 0affch - .faraddr 0affdh - .faraddr 0affeh - .faraddr 0afffh - .faraddr 0b000h - .faraddr 0b001h - .faraddr 0b002h - .faraddr 0b003h - .faraddr 0b004h - .faraddr 0b005h - .faraddr 0b006h - .faraddr 0b007h - .faraddr 0b008h - .faraddr 0b009h - .faraddr 0b00ah - .faraddr 0b00bh - .faraddr 0b00ch - .faraddr 0b00dh - .faraddr 0b00eh - .faraddr 0b00fh - .faraddr 0ffe1h - .faraddr 0ffe2h - .faraddr 0ffe3h - .faraddr 0ffe4h - .faraddr 0ffe5h - .faraddr 0ffe6h - .faraddr 0ffe7h - .faraddr 0ffe8h - .faraddr 0ffe9h - .faraddr 0ffeah - .faraddr 0ffebh - .faraddr 0ffech - .faraddr 0ffedh - .faraddr 0ffeeh - .faraddr 0ffefh - .faraddr 0fff0h - .faraddr 0fff1h - .faraddr 0fff2h - .faraddr 0fff3h - .faraddr 0fff4h - .faraddr 0fff5h - .faraddr 0fff6h - .faraddr 0fff7h - .faraddr 0fff8h - .faraddr 0fff9h - .faraddr 0fffah - .faraddr 0fffbh - .faraddr 0fffch - .faraddr 0fffdh - .faraddr 0fffeh - .faraddr 0ffffh - .faraddr 10000h - .faraddr 10001h - .faraddr 10002h - .faraddr 10003h - .faraddr 10004h - .faraddr 10005h - .faraddr 10006h - .faraddr 10007h - .faraddr 10008h - .faraddr 10009h - .faraddr 1000ah - .faraddr 1000bh - .faraddr 1000ch - .faraddr 1000dh - .faraddr 1000eh - .faraddr 1000fh - .faraddr 10ffe1h - .faraddr 10ffe2h - .faraddr 10ffe3h - .faraddr 10ffe4h - .faraddr 10ffe5h - .faraddr 10ffe6h - .faraddr 10ffe7h - .faraddr 10ffe8h - .faraddr 10ffe9h - .faraddr 10ffeah - .faraddr 10ffebh - .faraddr 10ffech - .faraddr 10ffedh - .faraddr 10ffeeh - .faraddr 10ffefh - .faraddr 10fff0h - .faraddr 10fff1h - .faraddr 10fff2h - .faraddr 10fff3h - .faraddr 10fff4h - .faraddr 10fff5h - .faraddr 10fff6h - .faraddr 10fff7h - .faraddr 10fff8h - .faraddr 10fff9h - .faraddr 10fffah - .faraddr 10fffbh - .faraddr 10fffch - .faraddr 10fffdh - .faraddr 10fffeh - .faraddr 10ffffh - .faraddr 110000h - .faraddr 110001h - .faraddr 110002h - .faraddr 110003h - .faraddr 110004h - .faraddr 110005h - .faraddr 110006h - .faraddr 110007h - .faraddr 110008h - .faraddr 110009h - .faraddr 11000ah - .faraddr 11000bh - .faraddr 11000ch - .faraddr 11000dh - .faraddr 11000eh - .faraddr 11000fh - .faraddr 20ffe1h - .faraddr 20ffe2h - .faraddr 20ffe3h - .faraddr 20ffe4h - .faraddr 20ffe5h - .faraddr 20ffe6h - .faraddr 20ffe7h - .faraddr 20ffe8h - .faraddr 20ffe9h - .faraddr 20ffeah - .faraddr 20ffebh - .faraddr 20ffech - .faraddr 20ffedh - .faraddr 20ffeeh - .faraddr 20ffefh - .faraddr 20fff0h - .faraddr 20fff1h - .faraddr 20fff2h - .faraddr 20fff3h - .faraddr 20fff4h - .faraddr 20fff5h - .faraddr 20fff6h - .faraddr 20fff7h - .faraddr 20fff8h - .faraddr 20fff9h - .faraddr 20fffah - .faraddr 20fffbh - .faraddr 20fffch - .faraddr 20fffdh - .faraddr 20fffeh - .faraddr 20ffffh - .faraddr 210000h - .faraddr 210001h - .faraddr 210002h - .faraddr 210003h - .faraddr 210004h - .faraddr 210005h - .faraddr 210006h - .faraddr 210007h - .faraddr 210008h - .faraddr 210009h - .faraddr 21000ah - .faraddr 21000bh - .faraddr 21000ch - .faraddr 21000dh - .faraddr 21000eh - .faraddr 21000fh - .faraddr 7fffe1h - .faraddr 7fffe2h - .faraddr 7fffe3h - .faraddr 7fffe4h - .faraddr 7fffe5h - .faraddr 7fffe6h - .faraddr 7fffe7h - .faraddr 7fffe8h - .faraddr 7fffe9h - .faraddr 7fffeah - .faraddr 7fffebh - .faraddr 7fffech - .faraddr 7fffedh - .faraddr 7fffeeh - .faraddr 7fffefh - .faraddr 7ffff0h - .faraddr 7ffff1h - .faraddr 7ffff2h - .faraddr 7ffff3h - .faraddr 7ffff4h - .faraddr 7ffff5h - .faraddr 7ffff6h - .faraddr 7ffff7h - .faraddr 7ffff8h - .faraddr 7ffff9h - .faraddr 7ffffah - .faraddr 7ffffbh - .faraddr 7ffffch - .faraddr 7ffffdh - .faraddr 7ffffeh - .faraddr 7fffffh - .faraddr 800000h - .faraddr 800001h - .faraddr 800002h - .faraddr 800003h - .faraddr 800004h - .faraddr 800005h - .faraddr 800006h - .faraddr 800007h - .faraddr 800008h - .faraddr 800009h - .faraddr 80000ah - .faraddr 80000bh - .faraddr 80000ch - .faraddr 80000dh - .faraddr 80000eh - .faraddr 80000fh - .faraddr 9fffe1h - .faraddr 9fffe2h - .faraddr 9fffe3h - .faraddr 9fffe4h - .faraddr 9fffe5h - .faraddr 9fffe6h - .faraddr 9fffe7h - .faraddr 9fffe8h - .faraddr 9fffe9h - .faraddr 9fffeah - .faraddr 9fffebh - .faraddr 9fffech - .faraddr 9fffedh - .faraddr 9fffeeh - .faraddr 9fffefh - .faraddr 9ffff0h - .faraddr 9ffff1h - .faraddr 9ffff2h - .faraddr 9ffff3h - .faraddr 9ffff4h - .faraddr 9ffff5h - .faraddr 9ffff6h - .faraddr 9ffff7h - .faraddr 9ffff8h - .faraddr 9ffff9h - .faraddr 9ffffah - .faraddr 9ffffbh - .faraddr 9ffffch - .faraddr 9ffffdh - .faraddr 9ffffeh - .faraddr 9fffffh - .faraddr 0a00000h - .faraddr 0a00001h - .faraddr 0a00002h - .faraddr 0a00003h - .faraddr 0a00004h - .faraddr 0a00005h - .faraddr 0a00006h - .faraddr 0a00007h - .faraddr 0a00008h - .faraddr 0a00009h - .faraddr 0a0000ah - .faraddr 0a0000bh - .faraddr 0a0000ch - .faraddr 0a0000dh - .faraddr 0a0000eh - .faraddr 0a0000fh - .faraddr 0ffffe1h - .faraddr 0ffffe2h - .faraddr 0ffffe3h - .faraddr 0ffffe4h - .faraddr 0ffffe5h - .faraddr 0ffffe6h - .faraddr 0ffffe7h - .faraddr 0ffffe8h - .faraddr 0ffffe9h - .faraddr 0ffffeah - .faraddr 0ffffebh - .faraddr 0ffffech - .faraddr 0ffffedh - .faraddr 0ffffeeh - .faraddr 0ffffefh - .faraddr 0fffff0h - .faraddr 0fffff1h - .faraddr 0fffff2h - .faraddr 0fffff3h - .faraddr 0fffff4h - .faraddr 0fffff5h - .faraddr 0fffff6h - .faraddr 0fffff7h - .faraddr 0fffff8h - .faraddr 0fffff9h - .faraddr 0fffffah - .faraddr 0fffffbh - .faraddr 0fffffch - .faraddr 0fffffdh - .faraddr 0fffffeh - .faraddr 0ffffffh + ; alternative hex values + .faraddr 0h + .faraddr 1h + .faraddr 2h + .faraddr 3h + .faraddr 4h + .faraddr 5h + .faraddr 6h + .faraddr 7h + .faraddr 8h + .faraddr 9h + .faraddr 0ah + .faraddr 0bh + .faraddr 0ch + .faraddr 0dh + .faraddr 0eh + .faraddr 0fh + .faraddr 10h + .faraddr 11h + .faraddr 12h + .faraddr 13h + .faraddr 70h + .faraddr 71h + .faraddr 72h + .faraddr 73h + .faraddr 74h + .faraddr 75h + .faraddr 76h + .faraddr 77h + .faraddr 78h + .faraddr 79h + .faraddr 7ah + .faraddr 7bh + .faraddr 7ch + .faraddr 7dh + .faraddr 7eh + .faraddr 7fh + .faraddr 80h + .faraddr 81h + .faraddr 82h + .faraddr 83h + .faraddr 84h + .faraddr 85h + .faraddr 86h + .faraddr 0f0h + .faraddr 0f1h + .faraddr 0f2h + .faraddr 0f3h + .faraddr 0f4h + .faraddr 0f5h + .faraddr 0f6h + .faraddr 0f7h + .faraddr 0f8h + .faraddr 0f9h + .faraddr 0fah + .faraddr 0fbh + .faraddr 0fch + .faraddr 0fdh + .faraddr 0feh + .faraddr 0ffh + .faraddr 100h + .faraddr 101h + .faraddr 102h + .faraddr 103h + .faraddr 0fd2h + .faraddr 0fd3h + .faraddr 0fd4h + .faraddr 0fd5h + .faraddr 0fd6h + .faraddr 0fd7h + .faraddr 0fd8h + .faraddr 0fd9h + .faraddr 0fdah + .faraddr 0fdbh + .faraddr 0fdch + .faraddr 0fddh + .faraddr 0fdeh + .faraddr 0fdfh + .faraddr 0fe0h + .faraddr 0fe1h + .faraddr 0fe2h + .faraddr 0fe3h + .faraddr 0fe4h + .faraddr 0fe5h + .faraddr 0fe6h + .faraddr 0fe7h + .faraddr 0fe8h + .faraddr 0fe9h + .faraddr 0feah + .faraddr 0febh + .faraddr 0fech + .faraddr 0fedh + .faraddr 0feeh + .faraddr 0fefh + .faraddr 0ff0h + .faraddr 0ff1h + .faraddr 0ff2h + .faraddr 0ff3h + .faraddr 0ff4h + .faraddr 0ff5h + .faraddr 0ff6h + .faraddr 0ff7h + .faraddr 0ff8h + .faraddr 0ff9h + .faraddr 0ffah + .faraddr 0ffbh + .faraddr 0ffch + .faraddr 0ffdh + .faraddr 0ffeh + .faraddr 0fffh + .faraddr 1000h + .faraddr 1001h + .faraddr 1002h + .faraddr 1003h + .faraddr 1004h + .faraddr 1005h + .faraddr 1006h + .faraddr 1007h + .faraddr 1008h + .faraddr 7ff0h + .faraddr 7ff1h + .faraddr 7ff2h + .faraddr 7ff3h + .faraddr 7ff4h + .faraddr 7ff5h + .faraddr 7ff6h + .faraddr 7ff7h + .faraddr 7ff8h + .faraddr 7ff9h + .faraddr 7ffah + .faraddr 7ffbh + .faraddr 7ffch + .faraddr 7ffdh + .faraddr 7ffeh + .faraddr 7fffh + .faraddr 8000h + .faraddr 8001h + .faraddr 8002h + .faraddr 8003h + .faraddr 8004h + .faraddr 8005h + .faraddr 8006h + .faraddr 8007h + .faraddr 8008h + .faraddr 8009h + .faraddr 800ah + .faraddr 800bh + .faraddr 9fe1h + .faraddr 9fe2h + .faraddr 9fe3h + .faraddr 9fe4h + .faraddr 9fe5h + .faraddr 9fe6h + .faraddr 9fe7h + .faraddr 9fe8h + .faraddr 9fe9h + .faraddr 9feah + .faraddr 9febh + .faraddr 9fech + .faraddr 9fedh + .faraddr 9feeh + .faraddr 9fefh + .faraddr 9ff0h + .faraddr 9ff1h + .faraddr 9ff2h + .faraddr 9ff3h + .faraddr 9ff4h + .faraddr 9ff5h + .faraddr 9ff6h + .faraddr 9ff7h + .faraddr 9ff8h + .faraddr 9ff9h + .faraddr 9ffah + .faraddr 9ffbh + .faraddr 9ffch + .faraddr 9ffdh + .faraddr 9ffeh + .faraddr 9fffh + .faraddr 0a000h + .faraddr 0a001h + .faraddr 0a002h + .faraddr 0a003h + .faraddr 0a004h + .faraddr 0a005h + .faraddr 0a006h + .faraddr 0a007h + .faraddr 0a008h + .faraddr 0a009h + .faraddr 0a00ah + .faraddr 0a00bh + .faraddr 0a00ch + .faraddr 0a00dh + .faraddr 0a00eh + .faraddr 0a00fh + .faraddr 0afe1h + .faraddr 0afe2h + .faraddr 0afe3h + .faraddr 0afe4h + .faraddr 0afe5h + .faraddr 0afe6h + .faraddr 0afe7h + .faraddr 0afe8h + .faraddr 0afe9h + .faraddr 0afeah + .faraddr 0afebh + .faraddr 0afech + .faraddr 0afedh + .faraddr 0afeeh + .faraddr 0afefh + .faraddr 0aff0h + .faraddr 0aff1h + .faraddr 0aff2h + .faraddr 0aff3h + .faraddr 0aff4h + .faraddr 0aff5h + .faraddr 0aff6h + .faraddr 0aff7h + .faraddr 0aff8h + .faraddr 0aff9h + .faraddr 0affah + .faraddr 0affbh + .faraddr 0affch + .faraddr 0affdh + .faraddr 0affeh + .faraddr 0afffh + .faraddr 0b000h + .faraddr 0b001h + .faraddr 0b002h + .faraddr 0b003h + .faraddr 0b004h + .faraddr 0b005h + .faraddr 0b006h + .faraddr 0b007h + .faraddr 0b008h + .faraddr 0b009h + .faraddr 0b00ah + .faraddr 0b00bh + .faraddr 0b00ch + .faraddr 0b00dh + .faraddr 0b00eh + .faraddr 0b00fh + .faraddr 0ffe1h + .faraddr 0ffe2h + .faraddr 0ffe3h + .faraddr 0ffe4h + .faraddr 0ffe5h + .faraddr 0ffe6h + .faraddr 0ffe7h + .faraddr 0ffe8h + .faraddr 0ffe9h + .faraddr 0ffeah + .faraddr 0ffebh + .faraddr 0ffech + .faraddr 0ffedh + .faraddr 0ffeeh + .faraddr 0ffefh + .faraddr 0fff0h + .faraddr 0fff1h + .faraddr 0fff2h + .faraddr 0fff3h + .faraddr 0fff4h + .faraddr 0fff5h + .faraddr 0fff6h + .faraddr 0fff7h + .faraddr 0fff8h + .faraddr 0fff9h + .faraddr 0fffah + .faraddr 0fffbh + .faraddr 0fffch + .faraddr 0fffdh + .faraddr 0fffeh + .faraddr 0ffffh + .faraddr 10000h + .faraddr 10001h + .faraddr 10002h + .faraddr 10003h + .faraddr 10004h + .faraddr 10005h + .faraddr 10006h + .faraddr 10007h + .faraddr 10008h + .faraddr 10009h + .faraddr 1000ah + .faraddr 1000bh + .faraddr 1000ch + .faraddr 1000dh + .faraddr 1000eh + .faraddr 1000fh + .faraddr 10ffe1h + .faraddr 10ffe2h + .faraddr 10ffe3h + .faraddr 10ffe4h + .faraddr 10ffe5h + .faraddr 10ffe6h + .faraddr 10ffe7h + .faraddr 10ffe8h + .faraddr 10ffe9h + .faraddr 10ffeah + .faraddr 10ffebh + .faraddr 10ffech + .faraddr 10ffedh + .faraddr 10ffeeh + .faraddr 10ffefh + .faraddr 10fff0h + .faraddr 10fff1h + .faraddr 10fff2h + .faraddr 10fff3h + .faraddr 10fff4h + .faraddr 10fff5h + .faraddr 10fff6h + .faraddr 10fff7h + .faraddr 10fff8h + .faraddr 10fff9h + .faraddr 10fffah + .faraddr 10fffbh + .faraddr 10fffch + .faraddr 10fffdh + .faraddr 10fffeh + .faraddr 10ffffh + .faraddr 110000h + .faraddr 110001h + .faraddr 110002h + .faraddr 110003h + .faraddr 110004h + .faraddr 110005h + .faraddr 110006h + .faraddr 110007h + .faraddr 110008h + .faraddr 110009h + .faraddr 11000ah + .faraddr 11000bh + .faraddr 11000ch + .faraddr 11000dh + .faraddr 11000eh + .faraddr 11000fh + .faraddr 20ffe1h + .faraddr 20ffe2h + .faraddr 20ffe3h + .faraddr 20ffe4h + .faraddr 20ffe5h + .faraddr 20ffe6h + .faraddr 20ffe7h + .faraddr 20ffe8h + .faraddr 20ffe9h + .faraddr 20ffeah + .faraddr 20ffebh + .faraddr 20ffech + .faraddr 20ffedh + .faraddr 20ffeeh + .faraddr 20ffefh + .faraddr 20fff0h + .faraddr 20fff1h + .faraddr 20fff2h + .faraddr 20fff3h + .faraddr 20fff4h + .faraddr 20fff5h + .faraddr 20fff6h + .faraddr 20fff7h + .faraddr 20fff8h + .faraddr 20fff9h + .faraddr 20fffah + .faraddr 20fffbh + .faraddr 20fffch + .faraddr 20fffdh + .faraddr 20fffeh + .faraddr 20ffffh + .faraddr 210000h + .faraddr 210001h + .faraddr 210002h + .faraddr 210003h + .faraddr 210004h + .faraddr 210005h + .faraddr 210006h + .faraddr 210007h + .faraddr 210008h + .faraddr 210009h + .faraddr 21000ah + .faraddr 21000bh + .faraddr 21000ch + .faraddr 21000dh + .faraddr 21000eh + .faraddr 21000fh + .faraddr 7fffe1h + .faraddr 7fffe2h + .faraddr 7fffe3h + .faraddr 7fffe4h + .faraddr 7fffe5h + .faraddr 7fffe6h + .faraddr 7fffe7h + .faraddr 7fffe8h + .faraddr 7fffe9h + .faraddr 7fffeah + .faraddr 7fffebh + .faraddr 7fffech + .faraddr 7fffedh + .faraddr 7fffeeh + .faraddr 7fffefh + .faraddr 7ffff0h + .faraddr 7ffff1h + .faraddr 7ffff2h + .faraddr 7ffff3h + .faraddr 7ffff4h + .faraddr 7ffff5h + .faraddr 7ffff6h + .faraddr 7ffff7h + .faraddr 7ffff8h + .faraddr 7ffff9h + .faraddr 7ffffah + .faraddr 7ffffbh + .faraddr 7ffffch + .faraddr 7ffffdh + .faraddr 7ffffeh + .faraddr 7fffffh + .faraddr 800000h + .faraddr 800001h + .faraddr 800002h + .faraddr 800003h + .faraddr 800004h + .faraddr 800005h + .faraddr 800006h + .faraddr 800007h + .faraddr 800008h + .faraddr 800009h + .faraddr 80000ah + .faraddr 80000bh + .faraddr 80000ch + .faraddr 80000dh + .faraddr 80000eh + .faraddr 80000fh + .faraddr 9fffe1h + .faraddr 9fffe2h + .faraddr 9fffe3h + .faraddr 9fffe4h + .faraddr 9fffe5h + .faraddr 9fffe6h + .faraddr 9fffe7h + .faraddr 9fffe8h + .faraddr 9fffe9h + .faraddr 9fffeah + .faraddr 9fffebh + .faraddr 9fffech + .faraddr 9fffedh + .faraddr 9fffeeh + .faraddr 9fffefh + .faraddr 9ffff0h + .faraddr 9ffff1h + .faraddr 9ffff2h + .faraddr 9ffff3h + .faraddr 9ffff4h + .faraddr 9ffff5h + .faraddr 9ffff6h + .faraddr 9ffff7h + .faraddr 9ffff8h + .faraddr 9ffff9h + .faraddr 9ffffah + .faraddr 9ffffbh + .faraddr 9ffffch + .faraddr 9ffffdh + .faraddr 9ffffeh + .faraddr 9fffffh + .faraddr 0a00000h + .faraddr 0a00001h + .faraddr 0a00002h + .faraddr 0a00003h + .faraddr 0a00004h + .faraddr 0a00005h + .faraddr 0a00006h + .faraddr 0a00007h + .faraddr 0a00008h + .faraddr 0a00009h + .faraddr 0a0000ah + .faraddr 0a0000bh + .faraddr 0a0000ch + .faraddr 0a0000dh + .faraddr 0a0000eh + .faraddr 0a0000fh + .faraddr 0ffffe1h + .faraddr 0ffffe2h + .faraddr 0ffffe3h + .faraddr 0ffffe4h + .faraddr 0ffffe5h + .faraddr 0ffffe6h + .faraddr 0ffffe7h + .faraddr 0ffffe8h + .faraddr 0ffffe9h + .faraddr 0ffffeah + .faraddr 0ffffebh + .faraddr 0ffffech + .faraddr 0ffffedh + .faraddr 0ffffeeh + .faraddr 0ffffefh + .faraddr 0fffff0h + .faraddr 0fffff1h + .faraddr 0fffff2h + .faraddr 0fffff3h + .faraddr 0fffff4h + .faraddr 0fffff5h + .faraddr 0fffff6h + .faraddr 0fffff7h + .faraddr 0fffff8h + .faraddr 0fffff9h + .faraddr 0fffffah + .faraddr 0fffffbh + .faraddr 0fffffch + .faraddr 0fffffdh + .faraddr 0fffffeh + .faraddr 0ffffffh - ; alternative hex values, uppercase - .faraddr 0h - .faraddr 1h - .faraddr 2h - .faraddr 3h - .faraddr 4h - .faraddr 5h - .faraddr 6h - .faraddr 7h - .faraddr 8h - .faraddr 9h - .faraddr 0Ah - .faraddr 0Bh - .faraddr 0Ch - .faraddr 0Dh - .faraddr 0Eh - .faraddr 0Fh - .faraddr 10h - .faraddr 11h - .faraddr 12h - .faraddr 13h - .faraddr 70h - .faraddr 71h - .faraddr 72h - .faraddr 73h - .faraddr 74h - .faraddr 75h - .faraddr 76h - .faraddr 77h - .faraddr 78h - .faraddr 79h - .faraddr 7Ah - .faraddr 7Bh - .faraddr 7Ch - .faraddr 7Dh - .faraddr 7Eh - .faraddr 7Fh - .faraddr 80h - .faraddr 81h - .faraddr 82h - .faraddr 83h - .faraddr 84h - .faraddr 85h - .faraddr 86h - .faraddr 0F0h - .faraddr 0F1h - .faraddr 0F2h - .faraddr 0F3h - .faraddr 0F4h - .faraddr 0F5h - .faraddr 0F6h - .faraddr 0F7h - .faraddr 0F8h - .faraddr 0F9h - .faraddr 0FAh - .faraddr 0FBh - .faraddr 0FCh - .faraddr 0FDh - .faraddr 0FEh - .faraddr 0FFh - .faraddr 100h - .faraddr 101h - .faraddr 102h - .faraddr 103h - .faraddr 0FD2h - .faraddr 0FD3h - .faraddr 0FD4h - .faraddr 0FD5h - .faraddr 0FD6h - .faraddr 0FD7h - .faraddr 0FD8h - .faraddr 0FD9h - .faraddr 0FDAh - .faraddr 0FDBh - .faraddr 0FDCh - .faraddr 0FDDh - .faraddr 0FDEh - .faraddr 0FDFh - .faraddr 0FE0h - .faraddr 0FE1h - .faraddr 0FE2h - .faraddr 0FE3h - .faraddr 0FE4h - .faraddr 0FE5h - .faraddr 0FE6h - .faraddr 0FE7h - .faraddr 0FE8h - .faraddr 0FE9h - .faraddr 0FEAh - .faraddr 0FEBh - .faraddr 0FECh - .faraddr 0FEDh - .faraddr 0FEEh - .faraddr 0FEFh - .faraddr 0FF0h - .faraddr 0FF1h - .faraddr 0FF2h - .faraddr 0FF3h - .faraddr 0FF4h - .faraddr 0FF5h - .faraddr 0FF6h - .faraddr 0FF7h - .faraddr 0FF8h - .faraddr 0FF9h - .faraddr 0FFAh - .faraddr 0FFBh - .faraddr 0FFCh - .faraddr 0FFDh - .faraddr 0FFEh - .faraddr 0FFFh - .faraddr 1000h - .faraddr 1001h - .faraddr 1002h - .faraddr 1003h - .faraddr 1004h - .faraddr 1005h - .faraddr 1006h - .faraddr 1007h - .faraddr 1008h - .faraddr 7FF0h - .faraddr 7FF1h - .faraddr 7FF2h - .faraddr 7FF3h - .faraddr 7FF4h - .faraddr 7FF5h - .faraddr 7FF6h - .faraddr 7FF7h - .faraddr 7FF8h - .faraddr 7FF9h - .faraddr 7FFAh - .faraddr 7FFBh - .faraddr 7FFCh - .faraddr 7FFDh - .faraddr 7FFEh - .faraddr 7FFFh - .faraddr 8000h - .faraddr 8001h - .faraddr 8002h - .faraddr 8003h - .faraddr 8004h - .faraddr 8005h - .faraddr 8006h - .faraddr 8007h - .faraddr 8008h - .faraddr 8009h - .faraddr 800Ah - .faraddr 800Bh - .faraddr 9FE1h - .faraddr 9FE2h - .faraddr 9FE3h - .faraddr 9FE4h - .faraddr 9FE5h - .faraddr 9FE6h - .faraddr 9FE7h - .faraddr 9FE8h - .faraddr 9FE9h - .faraddr 9FEAh - .faraddr 9FEBh - .faraddr 9FECh - .faraddr 9FEDh - .faraddr 9FEEh - .faraddr 9FEFh - .faraddr 9FF0h - .faraddr 9FF1h - .faraddr 9FF2h - .faraddr 9FF3h - .faraddr 9FF4h - .faraddr 9FF5h - .faraddr 9FF6h - .faraddr 9FF7h - .faraddr 9FF8h - .faraddr 9FF9h - .faraddr 9FFAh - .faraddr 9FFBh - .faraddr 9FFCh - .faraddr 9FFDh - .faraddr 9FFEh - .faraddr 9FFFh - .faraddr 0A000h - .faraddr 0A001h - .faraddr 0A002h - .faraddr 0A003h - .faraddr 0A004h - .faraddr 0A005h - .faraddr 0A006h - .faraddr 0A007h - .faraddr 0A008h - .faraddr 0A009h - .faraddr 0A00Ah - .faraddr 0A00Bh - .faraddr 0A00Ch - .faraddr 0A00Dh - .faraddr 0A00Eh - .faraddr 0A00Fh - .faraddr 0AFE1h - .faraddr 0AFE2h - .faraddr 0AFE3h - .faraddr 0AFE4h - .faraddr 0AFE5h - .faraddr 0AFE6h - .faraddr 0AFE7h - .faraddr 0AFE8h - .faraddr 0AFE9h - .faraddr 0AFEAh - .faraddr 0AFEBh - .faraddr 0AFECh - .faraddr 0AFEDh - .faraddr 0AFEEh - .faraddr 0AFEFh - .faraddr 0AFF0h - .faraddr 0AFF1h - .faraddr 0AFF2h - .faraddr 0AFF3h - .faraddr 0AFF4h - .faraddr 0AFF5h - .faraddr 0AFF6h - .faraddr 0AFF7h - .faraddr 0AFF8h - .faraddr 0AFF9h - .faraddr 0AFFAh - .faraddr 0AFFBh - .faraddr 0AFFCh - .faraddr 0AFFDh - .faraddr 0AFFEh - .faraddr 0AFFFh - .faraddr 0B000h - .faraddr 0B001h - .faraddr 0B002h - .faraddr 0B003h - .faraddr 0B004h - .faraddr 0B005h - .faraddr 0B006h - .faraddr 0B007h - .faraddr 0B008h - .faraddr 0B009h - .faraddr 0B00Ah - .faraddr 0B00Bh - .faraddr 0B00Ch - .faraddr 0B00Dh - .faraddr 0B00Eh - .faraddr 0B00Fh - .faraddr 0FFE1h - .faraddr 0FFE2h - .faraddr 0FFE3h - .faraddr 0FFE4h - .faraddr 0FFE5h - .faraddr 0FFE6h - .faraddr 0FFE7h - .faraddr 0FFE8h - .faraddr 0FFE9h - .faraddr 0FFEAh - .faraddr 0FFEBh - .faraddr 0FFECh - .faraddr 0FFEDh - .faraddr 0FFEEh - .faraddr 0FFEFh - .faraddr 0FFF0h - .faraddr 0FFF1h - .faraddr 0FFF2h - .faraddr 0FFF3h - .faraddr 0FFF4h - .faraddr 0FFF5h - .faraddr 0FFF6h - .faraddr 0FFF7h - .faraddr 0FFF8h - .faraddr 0FFF9h - .faraddr 0FFFAh - .faraddr 0FFFBh - .faraddr 0FFFCh - .faraddr 0FFFDh - .faraddr 0FFFEh - .faraddr 0FFFFh - .faraddr 10000h - .faraddr 10001h - .faraddr 10002h - .faraddr 10003h - .faraddr 10004h - .faraddr 10005h - .faraddr 10006h - .faraddr 10007h - .faraddr 10008h - .faraddr 10009h - .faraddr 1000Ah - .faraddr 1000Bh - .faraddr 1000Ch - .faraddr 1000Dh - .faraddr 1000Eh - .faraddr 1000Fh - .faraddr 10FFE1h - .faraddr 10FFE2h - .faraddr 10FFE3h - .faraddr 10FFE4h - .faraddr 10FFE5h - .faraddr 10FFE6h - .faraddr 10FFE7h - .faraddr 10FFE8h - .faraddr 10FFE9h - .faraddr 10FFEAh - .faraddr 10FFEBh - .faraddr 10FFECh - .faraddr 10FFEDh - .faraddr 10FFEEh - .faraddr 10FFEFh - .faraddr 10FFF0h - .faraddr 10FFF1h - .faraddr 10FFF2h - .faraddr 10FFF3h - .faraddr 10FFF4h - .faraddr 10FFF5h - .faraddr 10FFF6h - .faraddr 10FFF7h - .faraddr 10FFF8h - .faraddr 10FFF9h - .faraddr 10FFFAh - .faraddr 10FFFBh - .faraddr 10FFFCh - .faraddr 10FFFDh - .faraddr 10FFFEh - .faraddr 10FFFFh - .faraddr 110000h - .faraddr 110001h - .faraddr 110002h - .faraddr 110003h - .faraddr 110004h - .faraddr 110005h - .faraddr 110006h - .faraddr 110007h - .faraddr 110008h - .faraddr 110009h - .faraddr 11000Ah - .faraddr 11000Bh - .faraddr 11000Ch - .faraddr 11000Dh - .faraddr 11000Eh - .faraddr 11000Fh - .faraddr 20FFE1h - .faraddr 20FFE2h - .faraddr 20FFE3h - .faraddr 20FFE4h - .faraddr 20FFE5h - .faraddr 20FFE6h - .faraddr 20FFE7h - .faraddr 20FFE8h - .faraddr 20FFE9h - .faraddr 20FFEAh - .faraddr 20FFEBh - .faraddr 20FFECh - .faraddr 20FFEDh - .faraddr 20FFEEh - .faraddr 20FFEFh - .faraddr 20FFF0h - .faraddr 20FFF1h - .faraddr 20FFF2h - .faraddr 20FFF3h - .faraddr 20FFF4h - .faraddr 20FFF5h - .faraddr 20FFF6h - .faraddr 20FFF7h - .faraddr 20FFF8h - .faraddr 20FFF9h - .faraddr 20FFFAh - .faraddr 20FFFBh - .faraddr 20FFFCh - .faraddr 20FFFDh - .faraddr 20FFFEh - .faraddr 20FFFFh - .faraddr 210000h - .faraddr 210001h - .faraddr 210002h - .faraddr 210003h - .faraddr 210004h - .faraddr 210005h - .faraddr 210006h - .faraddr 210007h - .faraddr 210008h - .faraddr 210009h - .faraddr 21000Ah - .faraddr 21000Bh - .faraddr 21000Ch - .faraddr 21000Dh - .faraddr 21000Eh - .faraddr 21000Fh - .faraddr 7FFFE1h - .faraddr 7FFFE2h - .faraddr 7FFFE3h - .faraddr 7FFFE4h - .faraddr 7FFFE5h - .faraddr 7FFFE6h - .faraddr 7FFFE7h - .faraddr 7FFFE8h - .faraddr 7FFFE9h - .faraddr 7FFFEAh - .faraddr 7FFFEBh - .faraddr 7FFFECh - .faraddr 7FFFEDh - .faraddr 7FFFEEh - .faraddr 7FFFEFh - .faraddr 7FFFF0h - .faraddr 7FFFF1h - .faraddr 7FFFF2h - .faraddr 7FFFF3h - .faraddr 7FFFF4h - .faraddr 7FFFF5h - .faraddr 7FFFF6h - .faraddr 7FFFF7h - .faraddr 7FFFF8h - .faraddr 7FFFF9h - .faraddr 7FFFFAh - .faraddr 7FFFFBh - .faraddr 7FFFFCh - .faraddr 7FFFFDh - .faraddr 7FFFFEh - .faraddr 7FFFFFh - .faraddr 800000h - .faraddr 800001h - .faraddr 800002h - .faraddr 800003h - .faraddr 800004h - .faraddr 800005h - .faraddr 800006h - .faraddr 800007h - .faraddr 800008h - .faraddr 800009h - .faraddr 80000Ah - .faraddr 80000Bh - .faraddr 80000Ch - .faraddr 80000Dh - .faraddr 80000Eh - .faraddr 80000Fh - .faraddr 9FFFE1h - .faraddr 9FFFE2h - .faraddr 9FFFE3h - .faraddr 9FFFE4h - .faraddr 9FFFE5h - .faraddr 9FFFE6h - .faraddr 9FFFE7h - .faraddr 9FFFE8h - .faraddr 9FFFE9h - .faraddr 9FFFEAh - .faraddr 9FFFEBh - .faraddr 9FFFECh - .faraddr 9FFFEDh - .faraddr 9FFFEEh - .faraddr 9FFFEFh - .faraddr 9FFFF0h - .faraddr 9FFFF1h - .faraddr 9FFFF2h - .faraddr 9FFFF3h - .faraddr 9FFFF4h - .faraddr 9FFFF5h - .faraddr 9FFFF6h - .faraddr 9FFFF7h - .faraddr 9FFFF8h - .faraddr 9FFFF9h - .faraddr 9FFFFAh - .faraddr 9FFFFBh - .faraddr 9FFFFCh - .faraddr 9FFFFDh - .faraddr 9FFFFEh - .faraddr 9FFFFFh - .faraddr 0A00000h - .faraddr 0A00001h - .faraddr 0A00002h - .faraddr 0A00003h - .faraddr 0A00004h - .faraddr 0A00005h - .faraddr 0A00006h - .faraddr 0A00007h - .faraddr 0A00008h - .faraddr 0A00009h - .faraddr 0A0000Ah - .faraddr 0A0000Bh - .faraddr 0A0000Ch - .faraddr 0A0000Dh - .faraddr 0A0000Eh - .faraddr 0A0000Fh - .faraddr 0FFFFE1h - .faraddr 0FFFFE2h - .faraddr 0FFFFE3h - .faraddr 0FFFFE4h - .faraddr 0FFFFE5h - .faraddr 0FFFFE6h - .faraddr 0FFFFE7h - .faraddr 0FFFFE8h - .faraddr 0FFFFE9h - .faraddr 0FFFFEAh - .faraddr 0FFFFEBh - .faraddr 0FFFFECh - .faraddr 0FFFFEDh - .faraddr 0FFFFEEh - .faraddr 0FFFFEFh - .faraddr 0FFFFF0h - .faraddr 0FFFFF1h - .faraddr 0FFFFF2h - .faraddr 0FFFFF3h - .faraddr 0FFFFF4h - .faraddr 0FFFFF5h - .faraddr 0FFFFF6h - .faraddr 0FFFFF7h - .faraddr 0FFFFF8h - .faraddr 0FFFFF9h - .faraddr 0FFFFFAh - .faraddr 0FFFFFBh - .faraddr 0FFFFFCh - .faraddr 0FFFFFDh - .faraddr 0FFFFFEh - .faraddr 0FFFFFFh + ; alternative hex values, uppercase + .faraddr 0h + .faraddr 1h + .faraddr 2h + .faraddr 3h + .faraddr 4h + .faraddr 5h + .faraddr 6h + .faraddr 7h + .faraddr 8h + .faraddr 9h + .faraddr 0Ah + .faraddr 0Bh + .faraddr 0Ch + .faraddr 0Dh + .faraddr 0Eh + .faraddr 0Fh + .faraddr 10h + .faraddr 11h + .faraddr 12h + .faraddr 13h + .faraddr 70h + .faraddr 71h + .faraddr 72h + .faraddr 73h + .faraddr 74h + .faraddr 75h + .faraddr 76h + .faraddr 77h + .faraddr 78h + .faraddr 79h + .faraddr 7Ah + .faraddr 7Bh + .faraddr 7Ch + .faraddr 7Dh + .faraddr 7Eh + .faraddr 7Fh + .faraddr 80h + .faraddr 81h + .faraddr 82h + .faraddr 83h + .faraddr 84h + .faraddr 85h + .faraddr 86h + .faraddr 0F0h + .faraddr 0F1h + .faraddr 0F2h + .faraddr 0F3h + .faraddr 0F4h + .faraddr 0F5h + .faraddr 0F6h + .faraddr 0F7h + .faraddr 0F8h + .faraddr 0F9h + .faraddr 0FAh + .faraddr 0FBh + .faraddr 0FCh + .faraddr 0FDh + .faraddr 0FEh + .faraddr 0FFh + .faraddr 100h + .faraddr 101h + .faraddr 102h + .faraddr 103h + .faraddr 0FD2h + .faraddr 0FD3h + .faraddr 0FD4h + .faraddr 0FD5h + .faraddr 0FD6h + .faraddr 0FD7h + .faraddr 0FD8h + .faraddr 0FD9h + .faraddr 0FDAh + .faraddr 0FDBh + .faraddr 0FDCh + .faraddr 0FDDh + .faraddr 0FDEh + .faraddr 0FDFh + .faraddr 0FE0h + .faraddr 0FE1h + .faraddr 0FE2h + .faraddr 0FE3h + .faraddr 0FE4h + .faraddr 0FE5h + .faraddr 0FE6h + .faraddr 0FE7h + .faraddr 0FE8h + .faraddr 0FE9h + .faraddr 0FEAh + .faraddr 0FEBh + .faraddr 0FECh + .faraddr 0FEDh + .faraddr 0FEEh + .faraddr 0FEFh + .faraddr 0FF0h + .faraddr 0FF1h + .faraddr 0FF2h + .faraddr 0FF3h + .faraddr 0FF4h + .faraddr 0FF5h + .faraddr 0FF6h + .faraddr 0FF7h + .faraddr 0FF8h + .faraddr 0FF9h + .faraddr 0FFAh + .faraddr 0FFBh + .faraddr 0FFCh + .faraddr 0FFDh + .faraddr 0FFEh + .faraddr 0FFFh + .faraddr 1000h + .faraddr 1001h + .faraddr 1002h + .faraddr 1003h + .faraddr 1004h + .faraddr 1005h + .faraddr 1006h + .faraddr 1007h + .faraddr 1008h + .faraddr 7FF0h + .faraddr 7FF1h + .faraddr 7FF2h + .faraddr 7FF3h + .faraddr 7FF4h + .faraddr 7FF5h + .faraddr 7FF6h + .faraddr 7FF7h + .faraddr 7FF8h + .faraddr 7FF9h + .faraddr 7FFAh + .faraddr 7FFBh + .faraddr 7FFCh + .faraddr 7FFDh + .faraddr 7FFEh + .faraddr 7FFFh + .faraddr 8000h + .faraddr 8001h + .faraddr 8002h + .faraddr 8003h + .faraddr 8004h + .faraddr 8005h + .faraddr 8006h + .faraddr 8007h + .faraddr 8008h + .faraddr 8009h + .faraddr 800Ah + .faraddr 800Bh + .faraddr 9FE1h + .faraddr 9FE2h + .faraddr 9FE3h + .faraddr 9FE4h + .faraddr 9FE5h + .faraddr 9FE6h + .faraddr 9FE7h + .faraddr 9FE8h + .faraddr 9FE9h + .faraddr 9FEAh + .faraddr 9FEBh + .faraddr 9FECh + .faraddr 9FEDh + .faraddr 9FEEh + .faraddr 9FEFh + .faraddr 9FF0h + .faraddr 9FF1h + .faraddr 9FF2h + .faraddr 9FF3h + .faraddr 9FF4h + .faraddr 9FF5h + .faraddr 9FF6h + .faraddr 9FF7h + .faraddr 9FF8h + .faraddr 9FF9h + .faraddr 9FFAh + .faraddr 9FFBh + .faraddr 9FFCh + .faraddr 9FFDh + .faraddr 9FFEh + .faraddr 9FFFh + .faraddr 0A000h + .faraddr 0A001h + .faraddr 0A002h + .faraddr 0A003h + .faraddr 0A004h + .faraddr 0A005h + .faraddr 0A006h + .faraddr 0A007h + .faraddr 0A008h + .faraddr 0A009h + .faraddr 0A00Ah + .faraddr 0A00Bh + .faraddr 0A00Ch + .faraddr 0A00Dh + .faraddr 0A00Eh + .faraddr 0A00Fh + .faraddr 0AFE1h + .faraddr 0AFE2h + .faraddr 0AFE3h + .faraddr 0AFE4h + .faraddr 0AFE5h + .faraddr 0AFE6h + .faraddr 0AFE7h + .faraddr 0AFE8h + .faraddr 0AFE9h + .faraddr 0AFEAh + .faraddr 0AFEBh + .faraddr 0AFECh + .faraddr 0AFEDh + .faraddr 0AFEEh + .faraddr 0AFEFh + .faraddr 0AFF0h + .faraddr 0AFF1h + .faraddr 0AFF2h + .faraddr 0AFF3h + .faraddr 0AFF4h + .faraddr 0AFF5h + .faraddr 0AFF6h + .faraddr 0AFF7h + .faraddr 0AFF8h + .faraddr 0AFF9h + .faraddr 0AFFAh + .faraddr 0AFFBh + .faraddr 0AFFCh + .faraddr 0AFFDh + .faraddr 0AFFEh + .faraddr 0AFFFh + .faraddr 0B000h + .faraddr 0B001h + .faraddr 0B002h + .faraddr 0B003h + .faraddr 0B004h + .faraddr 0B005h + .faraddr 0B006h + .faraddr 0B007h + .faraddr 0B008h + .faraddr 0B009h + .faraddr 0B00Ah + .faraddr 0B00Bh + .faraddr 0B00Ch + .faraddr 0B00Dh + .faraddr 0B00Eh + .faraddr 0B00Fh + .faraddr 0FFE1h + .faraddr 0FFE2h + .faraddr 0FFE3h + .faraddr 0FFE4h + .faraddr 0FFE5h + .faraddr 0FFE6h + .faraddr 0FFE7h + .faraddr 0FFE8h + .faraddr 0FFE9h + .faraddr 0FFEAh + .faraddr 0FFEBh + .faraddr 0FFECh + .faraddr 0FFEDh + .faraddr 0FFEEh + .faraddr 0FFEFh + .faraddr 0FFF0h + .faraddr 0FFF1h + .faraddr 0FFF2h + .faraddr 0FFF3h + .faraddr 0FFF4h + .faraddr 0FFF5h + .faraddr 0FFF6h + .faraddr 0FFF7h + .faraddr 0FFF8h + .faraddr 0FFF9h + .faraddr 0FFFAh + .faraddr 0FFFBh + .faraddr 0FFFCh + .faraddr 0FFFDh + .faraddr 0FFFEh + .faraddr 0FFFFh + .faraddr 10000h + .faraddr 10001h + .faraddr 10002h + .faraddr 10003h + .faraddr 10004h + .faraddr 10005h + .faraddr 10006h + .faraddr 10007h + .faraddr 10008h + .faraddr 10009h + .faraddr 1000Ah + .faraddr 1000Bh + .faraddr 1000Ch + .faraddr 1000Dh + .faraddr 1000Eh + .faraddr 1000Fh + .faraddr 10FFE1h + .faraddr 10FFE2h + .faraddr 10FFE3h + .faraddr 10FFE4h + .faraddr 10FFE5h + .faraddr 10FFE6h + .faraddr 10FFE7h + .faraddr 10FFE8h + .faraddr 10FFE9h + .faraddr 10FFEAh + .faraddr 10FFEBh + .faraddr 10FFECh + .faraddr 10FFEDh + .faraddr 10FFEEh + .faraddr 10FFEFh + .faraddr 10FFF0h + .faraddr 10FFF1h + .faraddr 10FFF2h + .faraddr 10FFF3h + .faraddr 10FFF4h + .faraddr 10FFF5h + .faraddr 10FFF6h + .faraddr 10FFF7h + .faraddr 10FFF8h + .faraddr 10FFF9h + .faraddr 10FFFAh + .faraddr 10FFFBh + .faraddr 10FFFCh + .faraddr 10FFFDh + .faraddr 10FFFEh + .faraddr 10FFFFh + .faraddr 110000h + .faraddr 110001h + .faraddr 110002h + .faraddr 110003h + .faraddr 110004h + .faraddr 110005h + .faraddr 110006h + .faraddr 110007h + .faraddr 110008h + .faraddr 110009h + .faraddr 11000Ah + .faraddr 11000Bh + .faraddr 11000Ch + .faraddr 11000Dh + .faraddr 11000Eh + .faraddr 11000Fh + .faraddr 20FFE1h + .faraddr 20FFE2h + .faraddr 20FFE3h + .faraddr 20FFE4h + .faraddr 20FFE5h + .faraddr 20FFE6h + .faraddr 20FFE7h + .faraddr 20FFE8h + .faraddr 20FFE9h + .faraddr 20FFEAh + .faraddr 20FFEBh + .faraddr 20FFECh + .faraddr 20FFEDh + .faraddr 20FFEEh + .faraddr 20FFEFh + .faraddr 20FFF0h + .faraddr 20FFF1h + .faraddr 20FFF2h + .faraddr 20FFF3h + .faraddr 20FFF4h + .faraddr 20FFF5h + .faraddr 20FFF6h + .faraddr 20FFF7h + .faraddr 20FFF8h + .faraddr 20FFF9h + .faraddr 20FFFAh + .faraddr 20FFFBh + .faraddr 20FFFCh + .faraddr 20FFFDh + .faraddr 20FFFEh + .faraddr 20FFFFh + .faraddr 210000h + .faraddr 210001h + .faraddr 210002h + .faraddr 210003h + .faraddr 210004h + .faraddr 210005h + .faraddr 210006h + .faraddr 210007h + .faraddr 210008h + .faraddr 210009h + .faraddr 21000Ah + .faraddr 21000Bh + .faraddr 21000Ch + .faraddr 21000Dh + .faraddr 21000Eh + .faraddr 21000Fh + .faraddr 7FFFE1h + .faraddr 7FFFE2h + .faraddr 7FFFE3h + .faraddr 7FFFE4h + .faraddr 7FFFE5h + .faraddr 7FFFE6h + .faraddr 7FFFE7h + .faraddr 7FFFE8h + .faraddr 7FFFE9h + .faraddr 7FFFEAh + .faraddr 7FFFEBh + .faraddr 7FFFECh + .faraddr 7FFFEDh + .faraddr 7FFFEEh + .faraddr 7FFFEFh + .faraddr 7FFFF0h + .faraddr 7FFFF1h + .faraddr 7FFFF2h + .faraddr 7FFFF3h + .faraddr 7FFFF4h + .faraddr 7FFFF5h + .faraddr 7FFFF6h + .faraddr 7FFFF7h + .faraddr 7FFFF8h + .faraddr 7FFFF9h + .faraddr 7FFFFAh + .faraddr 7FFFFBh + .faraddr 7FFFFCh + .faraddr 7FFFFDh + .faraddr 7FFFFEh + .faraddr 7FFFFFh + .faraddr 800000h + .faraddr 800001h + .faraddr 800002h + .faraddr 800003h + .faraddr 800004h + .faraddr 800005h + .faraddr 800006h + .faraddr 800007h + .faraddr 800008h + .faraddr 800009h + .faraddr 80000Ah + .faraddr 80000Bh + .faraddr 80000Ch + .faraddr 80000Dh + .faraddr 80000Eh + .faraddr 80000Fh + .faraddr 9FFFE1h + .faraddr 9FFFE2h + .faraddr 9FFFE3h + .faraddr 9FFFE4h + .faraddr 9FFFE5h + .faraddr 9FFFE6h + .faraddr 9FFFE7h + .faraddr 9FFFE8h + .faraddr 9FFFE9h + .faraddr 9FFFEAh + .faraddr 9FFFEBh + .faraddr 9FFFECh + .faraddr 9FFFEDh + .faraddr 9FFFEEh + .faraddr 9FFFEFh + .faraddr 9FFFF0h + .faraddr 9FFFF1h + .faraddr 9FFFF2h + .faraddr 9FFFF3h + .faraddr 9FFFF4h + .faraddr 9FFFF5h + .faraddr 9FFFF6h + .faraddr 9FFFF7h + .faraddr 9FFFF8h + .faraddr 9FFFF9h + .faraddr 9FFFFAh + .faraddr 9FFFFBh + .faraddr 9FFFFCh + .faraddr 9FFFFDh + .faraddr 9FFFFEh + .faraddr 9FFFFFh + .faraddr 0A00000h + .faraddr 0A00001h + .faraddr 0A00002h + .faraddr 0A00003h + .faraddr 0A00004h + .faraddr 0A00005h + .faraddr 0A00006h + .faraddr 0A00007h + .faraddr 0A00008h + .faraddr 0A00009h + .faraddr 0A0000Ah + .faraddr 0A0000Bh + .faraddr 0A0000Ch + .faraddr 0A0000Dh + .faraddr 0A0000Eh + .faraddr 0A0000Fh + .faraddr 0FFFFE1h + .faraddr 0FFFFE2h + .faraddr 0FFFFE3h + .faraddr 0FFFFE4h + .faraddr 0FFFFE5h + .faraddr 0FFFFE6h + .faraddr 0FFFFE7h + .faraddr 0FFFFE8h + .faraddr 0FFFFE9h + .faraddr 0FFFFEAh + .faraddr 0FFFFEBh + .faraddr 0FFFFECh + .faraddr 0FFFFEDh + .faraddr 0FFFFEEh + .faraddr 0FFFFEFh + .faraddr 0FFFFF0h + .faraddr 0FFFFF1h + .faraddr 0FFFFF2h + .faraddr 0FFFFF3h + .faraddr 0FFFFF4h + .faraddr 0FFFFF5h + .faraddr 0FFFFF6h + .faraddr 0FFFFF7h + .faraddr 0FFFFF8h + .faraddr 0FFFFF9h + .faraddr 0FFFFFAh + .faraddr 0FFFFFBh + .faraddr 0FFFFFCh + .faraddr 0FFFFFDh + .faraddr 0FFFFFEh + .faraddr 0FFFFFFh - ; alternative 8-digit hex values - .faraddr 00000000h - .faraddr 00000001h - .faraddr 00000002h - .faraddr 00000003h - .faraddr 00000004h - .faraddr 00000005h - .faraddr 00000006h - .faraddr 00000007h - .faraddr 00000008h - .faraddr 00000009h - .faraddr 0000000ah - .faraddr 0000000bh - .faraddr 0000000ch - .faraddr 0000000dh - .faraddr 0000000eh - .faraddr 0000000fh - .faraddr 00000010h - .faraddr 00000011h - .faraddr 00000012h - .faraddr 00000013h - .faraddr 00000070h - .faraddr 00000071h - .faraddr 00000072h - .faraddr 00000073h - .faraddr 00000074h - .faraddr 00000075h - .faraddr 00000076h - .faraddr 00000077h - .faraddr 00000078h - .faraddr 00000079h - .faraddr 0000007ah - .faraddr 0000007bh - .faraddr 0000007ch - .faraddr 0000007dh - .faraddr 0000007eh - .faraddr 0000007fh - .faraddr 00000080h - .faraddr 00000081h - .faraddr 00000082h - .faraddr 00000083h - .faraddr 00000084h - .faraddr 00000085h - .faraddr 00000086h - .faraddr 000000f0h - .faraddr 000000f1h - .faraddr 000000f2h - .faraddr 000000f3h - .faraddr 000000f4h - .faraddr 000000f5h - .faraddr 000000f6h - .faraddr 000000f7h - .faraddr 000000f8h - .faraddr 000000f9h - .faraddr 000000fah - .faraddr 000000fbh - .faraddr 000000fch - .faraddr 000000fdh - .faraddr 000000feh - .faraddr 000000ffh - .faraddr 00000100h - .faraddr 00000101h - .faraddr 00000102h - .faraddr 00000103h - .faraddr 00000fd2h - .faraddr 00000fd3h - .faraddr 00000fd4h - .faraddr 00000fd5h - .faraddr 00000fd6h - .faraddr 00000fd7h - .faraddr 00000fd8h - .faraddr 00000fd9h - .faraddr 00000fdah - .faraddr 00000fdbh - .faraddr 00000fdch - .faraddr 00000fddh - .faraddr 00000fdeh - .faraddr 00000fdfh - .faraddr 00000fe0h - .faraddr 00000fe1h - .faraddr 00000fe2h - .faraddr 00000fe3h - .faraddr 00000fe4h - .faraddr 00000fe5h - .faraddr 00000fe6h - .faraddr 00000fe7h - .faraddr 00000fe8h - .faraddr 00000fe9h - .faraddr 00000feah - .faraddr 00000febh - .faraddr 00000fech - .faraddr 00000fedh - .faraddr 00000feeh - .faraddr 00000fefh - .faraddr 00000ff0h - .faraddr 00000ff1h - .faraddr 00000ff2h - .faraddr 00000ff3h - .faraddr 00000ff4h - .faraddr 00000ff5h - .faraddr 00000ff6h - .faraddr 00000ff7h - .faraddr 00000ff8h - .faraddr 00000ff9h - .faraddr 00000ffah - .faraddr 00000ffbh - .faraddr 00000ffch - .faraddr 00000ffdh - .faraddr 00000ffeh - .faraddr 00000fffh - .faraddr 00001000h - .faraddr 00001001h - .faraddr 00001002h - .faraddr 00001003h - .faraddr 00001004h - .faraddr 00001005h - .faraddr 00001006h - .faraddr 00001007h - .faraddr 00001008h - .faraddr 00007ff0h - .faraddr 00007ff1h - .faraddr 00007ff2h - .faraddr 00007ff3h - .faraddr 00007ff4h - .faraddr 00007ff5h - .faraddr 00007ff6h - .faraddr 00007ff7h - .faraddr 00007ff8h - .faraddr 00007ff9h - .faraddr 00007ffah - .faraddr 00007ffbh - .faraddr 00007ffch - .faraddr 00007ffdh - .faraddr 00007ffeh - .faraddr 00007fffh - .faraddr 00008000h - .faraddr 00008001h - .faraddr 00008002h - .faraddr 00008003h - .faraddr 00008004h - .faraddr 00008005h - .faraddr 00008006h - .faraddr 00008007h - .faraddr 00008008h - .faraddr 00008009h - .faraddr 0000800ah - .faraddr 0000800bh - .faraddr 00009fe1h - .faraddr 00009fe2h - .faraddr 00009fe3h - .faraddr 00009fe4h - .faraddr 00009fe5h - .faraddr 00009fe6h - .faraddr 00009fe7h - .faraddr 00009fe8h - .faraddr 00009fe9h - .faraddr 00009feah - .faraddr 00009febh - .faraddr 00009fech - .faraddr 00009fedh - .faraddr 00009feeh - .faraddr 00009fefh - .faraddr 00009ff0h - .faraddr 00009ff1h - .faraddr 00009ff2h - .faraddr 00009ff3h - .faraddr 00009ff4h - .faraddr 00009ff5h - .faraddr 00009ff6h - .faraddr 00009ff7h - .faraddr 00009ff8h - .faraddr 00009ff9h - .faraddr 00009ffah - .faraddr 00009ffbh - .faraddr 00009ffch - .faraddr 00009ffdh - .faraddr 00009ffeh - .faraddr 00009fffh - .faraddr 0000a000h - .faraddr 0000a001h - .faraddr 0000a002h - .faraddr 0000a003h - .faraddr 0000a004h - .faraddr 0000a005h - .faraddr 0000a006h - .faraddr 0000a007h - .faraddr 0000a008h - .faraddr 0000a009h - .faraddr 0000a00ah - .faraddr 0000a00bh - .faraddr 0000a00ch - .faraddr 0000a00dh - .faraddr 0000a00eh - .faraddr 0000a00fh - .faraddr 0000afe1h - .faraddr 0000afe2h - .faraddr 0000afe3h - .faraddr 0000afe4h - .faraddr 0000afe5h - .faraddr 0000afe6h - .faraddr 0000afe7h - .faraddr 0000afe8h - .faraddr 0000afe9h - .faraddr 0000afeah - .faraddr 0000afebh - .faraddr 0000afech - .faraddr 0000afedh - .faraddr 0000afeeh - .faraddr 0000afefh - .faraddr 0000aff0h - .faraddr 0000aff1h - .faraddr 0000aff2h - .faraddr 0000aff3h - .faraddr 0000aff4h - .faraddr 0000aff5h - .faraddr 0000aff6h - .faraddr 0000aff7h - .faraddr 0000aff8h - .faraddr 0000aff9h - .faraddr 0000affah - .faraddr 0000affbh - .faraddr 0000affch - .faraddr 0000affdh - .faraddr 0000affeh - .faraddr 0000afffh - .faraddr 0000b000h - .faraddr 0000b001h - .faraddr 0000b002h - .faraddr 0000b003h - .faraddr 0000b004h - .faraddr 0000b005h - .faraddr 0000b006h - .faraddr 0000b007h - .faraddr 0000b008h - .faraddr 0000b009h - .faraddr 0000b00ah - .faraddr 0000b00bh - .faraddr 0000b00ch - .faraddr 0000b00dh - .faraddr 0000b00eh - .faraddr 0000b00fh - .faraddr 0000ffe1h - .faraddr 0000ffe2h - .faraddr 0000ffe3h - .faraddr 0000ffe4h - .faraddr 0000ffe5h - .faraddr 0000ffe6h - .faraddr 0000ffe7h - .faraddr 0000ffe8h - .faraddr 0000ffe9h - .faraddr 0000ffeah - .faraddr 0000ffebh - .faraddr 0000ffech - .faraddr 0000ffedh - .faraddr 0000ffeeh - .faraddr 0000ffefh - .faraddr 0000fff0h - .faraddr 0000fff1h - .faraddr 0000fff2h - .faraddr 0000fff3h - .faraddr 0000fff4h - .faraddr 0000fff5h - .faraddr 0000fff6h - .faraddr 0000fff7h - .faraddr 0000fff8h - .faraddr 0000fff9h - .faraddr 0000fffah - .faraddr 0000fffbh - .faraddr 0000fffch - .faraddr 0000fffdh - .faraddr 0000fffeh - .faraddr 0000ffffh - .faraddr 00010000h - .faraddr 00010001h - .faraddr 00010002h - .faraddr 00010003h - .faraddr 00010004h - .faraddr 00010005h - .faraddr 00010006h - .faraddr 00010007h - .faraddr 00010008h - .faraddr 00010009h - .faraddr 0001000ah - .faraddr 0001000bh - .faraddr 0001000ch - .faraddr 0001000dh - .faraddr 0001000eh - .faraddr 0001000fh - .faraddr 0010ffe1h - .faraddr 0010ffe2h - .faraddr 0010ffe3h - .faraddr 0010ffe4h - .faraddr 0010ffe5h - .faraddr 0010ffe6h - .faraddr 0010ffe7h - .faraddr 0010ffe8h - .faraddr 0010ffe9h - .faraddr 0010ffeah - .faraddr 0010ffebh - .faraddr 0010ffech - .faraddr 0010ffedh - .faraddr 0010ffeeh - .faraddr 0010ffefh - .faraddr 0010fff0h - .faraddr 0010fff1h - .faraddr 0010fff2h - .faraddr 0010fff3h - .faraddr 0010fff4h - .faraddr 0010fff5h - .faraddr 0010fff6h - .faraddr 0010fff7h - .faraddr 0010fff8h - .faraddr 0010fff9h - .faraddr 0010fffah - .faraddr 0010fffbh - .faraddr 0010fffch - .faraddr 0010fffdh - .faraddr 0010fffeh - .faraddr 0010ffffh - .faraddr 00110000h - .faraddr 00110001h - .faraddr 00110002h - .faraddr 00110003h - .faraddr 00110004h - .faraddr 00110005h - .faraddr 00110006h - .faraddr 00110007h - .faraddr 00110008h - .faraddr 00110009h - .faraddr 0011000ah - .faraddr 0011000bh - .faraddr 0011000ch - .faraddr 0011000dh - .faraddr 0011000eh - .faraddr 0011000fh - .faraddr 0020ffe1h - .faraddr 0020ffe2h - .faraddr 0020ffe3h - .faraddr 0020ffe4h - .faraddr 0020ffe5h - .faraddr 0020ffe6h - .faraddr 0020ffe7h - .faraddr 0020ffe8h - .faraddr 0020ffe9h - .faraddr 0020ffeah - .faraddr 0020ffebh - .faraddr 0020ffech - .faraddr 0020ffedh - .faraddr 0020ffeeh - .faraddr 0020ffefh - .faraddr 0020fff0h - .faraddr 0020fff1h - .faraddr 0020fff2h - .faraddr 0020fff3h - .faraddr 0020fff4h - .faraddr 0020fff5h - .faraddr 0020fff6h - .faraddr 0020fff7h - .faraddr 0020fff8h - .faraddr 0020fff9h - .faraddr 0020fffah - .faraddr 0020fffbh - .faraddr 0020fffch - .faraddr 0020fffdh - .faraddr 0020fffeh - .faraddr 0020ffffh - .faraddr 00210000h - .faraddr 00210001h - .faraddr 00210002h - .faraddr 00210003h - .faraddr 00210004h - .faraddr 00210005h - .faraddr 00210006h - .faraddr 00210007h - .faraddr 00210008h - .faraddr 00210009h - .faraddr 0021000ah - .faraddr 0021000bh - .faraddr 0021000ch - .faraddr 0021000dh - .faraddr 0021000eh - .faraddr 0021000fh - .faraddr 007fffe1h - .faraddr 007fffe2h - .faraddr 007fffe3h - .faraddr 007fffe4h - .faraddr 007fffe5h - .faraddr 007fffe6h - .faraddr 007fffe7h - .faraddr 007fffe8h - .faraddr 007fffe9h - .faraddr 007fffeah - .faraddr 007fffebh - .faraddr 007fffech - .faraddr 007fffedh - .faraddr 007fffeeh - .faraddr 007fffefh - .faraddr 007ffff0h - .faraddr 007ffff1h - .faraddr 007ffff2h - .faraddr 007ffff3h - .faraddr 007ffff4h - .faraddr 007ffff5h - .faraddr 007ffff6h - .faraddr 007ffff7h - .faraddr 007ffff8h - .faraddr 007ffff9h - .faraddr 007ffffah - .faraddr 007ffffbh - .faraddr 007ffffch - .faraddr 007ffffdh - .faraddr 007ffffeh - .faraddr 007fffffh - .faraddr 00800000h - .faraddr 00800001h - .faraddr 00800002h - .faraddr 00800003h - .faraddr 00800004h - .faraddr 00800005h - .faraddr 00800006h - .faraddr 00800007h - .faraddr 00800008h - .faraddr 00800009h - .faraddr 0080000ah - .faraddr 0080000bh - .faraddr 0080000ch - .faraddr 0080000dh - .faraddr 0080000eh - .faraddr 0080000fh - .faraddr 009fffe1h - .faraddr 009fffe2h - .faraddr 009fffe3h - .faraddr 009fffe4h - .faraddr 009fffe5h - .faraddr 009fffe6h - .faraddr 009fffe7h - .faraddr 009fffe8h - .faraddr 009fffe9h - .faraddr 009fffeah - .faraddr 009fffebh - .faraddr 009fffech - .faraddr 009fffedh - .faraddr 009fffeeh - .faraddr 009fffefh - .faraddr 009ffff0h - .faraddr 009ffff1h - .faraddr 009ffff2h - .faraddr 009ffff3h - .faraddr 009ffff4h - .faraddr 009ffff5h - .faraddr 009ffff6h - .faraddr 009ffff7h - .faraddr 009ffff8h - .faraddr 009ffff9h - .faraddr 009ffffah - .faraddr 009ffffbh - .faraddr 009ffffch - .faraddr 009ffffdh - .faraddr 009ffffeh - .faraddr 009fffffh - .faraddr 00a00000h - .faraddr 00a00001h - .faraddr 00a00002h - .faraddr 00a00003h - .faraddr 00a00004h - .faraddr 00a00005h - .faraddr 00a00006h - .faraddr 00a00007h - .faraddr 00a00008h - .faraddr 00a00009h - .faraddr 00a0000ah - .faraddr 00a0000bh - .faraddr 00a0000ch - .faraddr 00a0000dh - .faraddr 00a0000eh - .faraddr 00a0000fh - .faraddr 00ffffe1h - .faraddr 00ffffe2h - .faraddr 00ffffe3h - .faraddr 00ffffe4h - .faraddr 00ffffe5h - .faraddr 00ffffe6h - .faraddr 00ffffe7h - .faraddr 00ffffe8h - .faraddr 00ffffe9h - .faraddr 00ffffeah - .faraddr 00ffffebh - .faraddr 00ffffech - .faraddr 00ffffedh - .faraddr 00ffffeeh - .faraddr 00ffffefh - .faraddr 00fffff0h - .faraddr 00fffff1h - .faraddr 00fffff2h - .faraddr 00fffff3h - .faraddr 00fffff4h - .faraddr 00fffff5h - .faraddr 00fffff6h - .faraddr 00fffff7h - .faraddr 00fffff8h - .faraddr 00fffff9h - .faraddr 00fffffah - .faraddr 00fffffbh - .faraddr 00fffffch - .faraddr 00fffffdh - .faraddr 00fffffeh - .faraddr 00ffffffh + ; alternative 8-digit hex values + .faraddr 00000000h + .faraddr 00000001h + .faraddr 00000002h + .faraddr 00000003h + .faraddr 00000004h + .faraddr 00000005h + .faraddr 00000006h + .faraddr 00000007h + .faraddr 00000008h + .faraddr 00000009h + .faraddr 0000000ah + .faraddr 0000000bh + .faraddr 0000000ch + .faraddr 0000000dh + .faraddr 0000000eh + .faraddr 0000000fh + .faraddr 00000010h + .faraddr 00000011h + .faraddr 00000012h + .faraddr 00000013h + .faraddr 00000070h + .faraddr 00000071h + .faraddr 00000072h + .faraddr 00000073h + .faraddr 00000074h + .faraddr 00000075h + .faraddr 00000076h + .faraddr 00000077h + .faraddr 00000078h + .faraddr 00000079h + .faraddr 0000007ah + .faraddr 0000007bh + .faraddr 0000007ch + .faraddr 0000007dh + .faraddr 0000007eh + .faraddr 0000007fh + .faraddr 00000080h + .faraddr 00000081h + .faraddr 00000082h + .faraddr 00000083h + .faraddr 00000084h + .faraddr 00000085h + .faraddr 00000086h + .faraddr 000000f0h + .faraddr 000000f1h + .faraddr 000000f2h + .faraddr 000000f3h + .faraddr 000000f4h + .faraddr 000000f5h + .faraddr 000000f6h + .faraddr 000000f7h + .faraddr 000000f8h + .faraddr 000000f9h + .faraddr 000000fah + .faraddr 000000fbh + .faraddr 000000fch + .faraddr 000000fdh + .faraddr 000000feh + .faraddr 000000ffh + .faraddr 00000100h + .faraddr 00000101h + .faraddr 00000102h + .faraddr 00000103h + .faraddr 00000fd2h + .faraddr 00000fd3h + .faraddr 00000fd4h + .faraddr 00000fd5h + .faraddr 00000fd6h + .faraddr 00000fd7h + .faraddr 00000fd8h + .faraddr 00000fd9h + .faraddr 00000fdah + .faraddr 00000fdbh + .faraddr 00000fdch + .faraddr 00000fddh + .faraddr 00000fdeh + .faraddr 00000fdfh + .faraddr 00000fe0h + .faraddr 00000fe1h + .faraddr 00000fe2h + .faraddr 00000fe3h + .faraddr 00000fe4h + .faraddr 00000fe5h + .faraddr 00000fe6h + .faraddr 00000fe7h + .faraddr 00000fe8h + .faraddr 00000fe9h + .faraddr 00000feah + .faraddr 00000febh + .faraddr 00000fech + .faraddr 00000fedh + .faraddr 00000feeh + .faraddr 00000fefh + .faraddr 00000ff0h + .faraddr 00000ff1h + .faraddr 00000ff2h + .faraddr 00000ff3h + .faraddr 00000ff4h + .faraddr 00000ff5h + .faraddr 00000ff6h + .faraddr 00000ff7h + .faraddr 00000ff8h + .faraddr 00000ff9h + .faraddr 00000ffah + .faraddr 00000ffbh + .faraddr 00000ffch + .faraddr 00000ffdh + .faraddr 00000ffeh + .faraddr 00000fffh + .faraddr 00001000h + .faraddr 00001001h + .faraddr 00001002h + .faraddr 00001003h + .faraddr 00001004h + .faraddr 00001005h + .faraddr 00001006h + .faraddr 00001007h + .faraddr 00001008h + .faraddr 00007ff0h + .faraddr 00007ff1h + .faraddr 00007ff2h + .faraddr 00007ff3h + .faraddr 00007ff4h + .faraddr 00007ff5h + .faraddr 00007ff6h + .faraddr 00007ff7h + .faraddr 00007ff8h + .faraddr 00007ff9h + .faraddr 00007ffah + .faraddr 00007ffbh + .faraddr 00007ffch + .faraddr 00007ffdh + .faraddr 00007ffeh + .faraddr 00007fffh + .faraddr 00008000h + .faraddr 00008001h + .faraddr 00008002h + .faraddr 00008003h + .faraddr 00008004h + .faraddr 00008005h + .faraddr 00008006h + .faraddr 00008007h + .faraddr 00008008h + .faraddr 00008009h + .faraddr 0000800ah + .faraddr 0000800bh + .faraddr 00009fe1h + .faraddr 00009fe2h + .faraddr 00009fe3h + .faraddr 00009fe4h + .faraddr 00009fe5h + .faraddr 00009fe6h + .faraddr 00009fe7h + .faraddr 00009fe8h + .faraddr 00009fe9h + .faraddr 00009feah + .faraddr 00009febh + .faraddr 00009fech + .faraddr 00009fedh + .faraddr 00009feeh + .faraddr 00009fefh + .faraddr 00009ff0h + .faraddr 00009ff1h + .faraddr 00009ff2h + .faraddr 00009ff3h + .faraddr 00009ff4h + .faraddr 00009ff5h + .faraddr 00009ff6h + .faraddr 00009ff7h + .faraddr 00009ff8h + .faraddr 00009ff9h + .faraddr 00009ffah + .faraddr 00009ffbh + .faraddr 00009ffch + .faraddr 00009ffdh + .faraddr 00009ffeh + .faraddr 00009fffh + .faraddr 0000a000h + .faraddr 0000a001h + .faraddr 0000a002h + .faraddr 0000a003h + .faraddr 0000a004h + .faraddr 0000a005h + .faraddr 0000a006h + .faraddr 0000a007h + .faraddr 0000a008h + .faraddr 0000a009h + .faraddr 0000a00ah + .faraddr 0000a00bh + .faraddr 0000a00ch + .faraddr 0000a00dh + .faraddr 0000a00eh + .faraddr 0000a00fh + .faraddr 0000afe1h + .faraddr 0000afe2h + .faraddr 0000afe3h + .faraddr 0000afe4h + .faraddr 0000afe5h + .faraddr 0000afe6h + .faraddr 0000afe7h + .faraddr 0000afe8h + .faraddr 0000afe9h + .faraddr 0000afeah + .faraddr 0000afebh + .faraddr 0000afech + .faraddr 0000afedh + .faraddr 0000afeeh + .faraddr 0000afefh + .faraddr 0000aff0h + .faraddr 0000aff1h + .faraddr 0000aff2h + .faraddr 0000aff3h + .faraddr 0000aff4h + .faraddr 0000aff5h + .faraddr 0000aff6h + .faraddr 0000aff7h + .faraddr 0000aff8h + .faraddr 0000aff9h + .faraddr 0000affah + .faraddr 0000affbh + .faraddr 0000affch + .faraddr 0000affdh + .faraddr 0000affeh + .faraddr 0000afffh + .faraddr 0000b000h + .faraddr 0000b001h + .faraddr 0000b002h + .faraddr 0000b003h + .faraddr 0000b004h + .faraddr 0000b005h + .faraddr 0000b006h + .faraddr 0000b007h + .faraddr 0000b008h + .faraddr 0000b009h + .faraddr 0000b00ah + .faraddr 0000b00bh + .faraddr 0000b00ch + .faraddr 0000b00dh + .faraddr 0000b00eh + .faraddr 0000b00fh + .faraddr 0000ffe1h + .faraddr 0000ffe2h + .faraddr 0000ffe3h + .faraddr 0000ffe4h + .faraddr 0000ffe5h + .faraddr 0000ffe6h + .faraddr 0000ffe7h + .faraddr 0000ffe8h + .faraddr 0000ffe9h + .faraddr 0000ffeah + .faraddr 0000ffebh + .faraddr 0000ffech + .faraddr 0000ffedh + .faraddr 0000ffeeh + .faraddr 0000ffefh + .faraddr 0000fff0h + .faraddr 0000fff1h + .faraddr 0000fff2h + .faraddr 0000fff3h + .faraddr 0000fff4h + .faraddr 0000fff5h + .faraddr 0000fff6h + .faraddr 0000fff7h + .faraddr 0000fff8h + .faraddr 0000fff9h + .faraddr 0000fffah + .faraddr 0000fffbh + .faraddr 0000fffch + .faraddr 0000fffdh + .faraddr 0000fffeh + .faraddr 0000ffffh + .faraddr 00010000h + .faraddr 00010001h + .faraddr 00010002h + .faraddr 00010003h + .faraddr 00010004h + .faraddr 00010005h + .faraddr 00010006h + .faraddr 00010007h + .faraddr 00010008h + .faraddr 00010009h + .faraddr 0001000ah + .faraddr 0001000bh + .faraddr 0001000ch + .faraddr 0001000dh + .faraddr 0001000eh + .faraddr 0001000fh + .faraddr 0010ffe1h + .faraddr 0010ffe2h + .faraddr 0010ffe3h + .faraddr 0010ffe4h + .faraddr 0010ffe5h + .faraddr 0010ffe6h + .faraddr 0010ffe7h + .faraddr 0010ffe8h + .faraddr 0010ffe9h + .faraddr 0010ffeah + .faraddr 0010ffebh + .faraddr 0010ffech + .faraddr 0010ffedh + .faraddr 0010ffeeh + .faraddr 0010ffefh + .faraddr 0010fff0h + .faraddr 0010fff1h + .faraddr 0010fff2h + .faraddr 0010fff3h + .faraddr 0010fff4h + .faraddr 0010fff5h + .faraddr 0010fff6h + .faraddr 0010fff7h + .faraddr 0010fff8h + .faraddr 0010fff9h + .faraddr 0010fffah + .faraddr 0010fffbh + .faraddr 0010fffch + .faraddr 0010fffdh + .faraddr 0010fffeh + .faraddr 0010ffffh + .faraddr 00110000h + .faraddr 00110001h + .faraddr 00110002h + .faraddr 00110003h + .faraddr 00110004h + .faraddr 00110005h + .faraddr 00110006h + .faraddr 00110007h + .faraddr 00110008h + .faraddr 00110009h + .faraddr 0011000ah + .faraddr 0011000bh + .faraddr 0011000ch + .faraddr 0011000dh + .faraddr 0011000eh + .faraddr 0011000fh + .faraddr 0020ffe1h + .faraddr 0020ffe2h + .faraddr 0020ffe3h + .faraddr 0020ffe4h + .faraddr 0020ffe5h + .faraddr 0020ffe6h + .faraddr 0020ffe7h + .faraddr 0020ffe8h + .faraddr 0020ffe9h + .faraddr 0020ffeah + .faraddr 0020ffebh + .faraddr 0020ffech + .faraddr 0020ffedh + .faraddr 0020ffeeh + .faraddr 0020ffefh + .faraddr 0020fff0h + .faraddr 0020fff1h + .faraddr 0020fff2h + .faraddr 0020fff3h + .faraddr 0020fff4h + .faraddr 0020fff5h + .faraddr 0020fff6h + .faraddr 0020fff7h + .faraddr 0020fff8h + .faraddr 0020fff9h + .faraddr 0020fffah + .faraddr 0020fffbh + .faraddr 0020fffch + .faraddr 0020fffdh + .faraddr 0020fffeh + .faraddr 0020ffffh + .faraddr 00210000h + .faraddr 00210001h + .faraddr 00210002h + .faraddr 00210003h + .faraddr 00210004h + .faraddr 00210005h + .faraddr 00210006h + .faraddr 00210007h + .faraddr 00210008h + .faraddr 00210009h + .faraddr 0021000ah + .faraddr 0021000bh + .faraddr 0021000ch + .faraddr 0021000dh + .faraddr 0021000eh + .faraddr 0021000fh + .faraddr 007fffe1h + .faraddr 007fffe2h + .faraddr 007fffe3h + .faraddr 007fffe4h + .faraddr 007fffe5h + .faraddr 007fffe6h + .faraddr 007fffe7h + .faraddr 007fffe8h + .faraddr 007fffe9h + .faraddr 007fffeah + .faraddr 007fffebh + .faraddr 007fffech + .faraddr 007fffedh + .faraddr 007fffeeh + .faraddr 007fffefh + .faraddr 007ffff0h + .faraddr 007ffff1h + .faraddr 007ffff2h + .faraddr 007ffff3h + .faraddr 007ffff4h + .faraddr 007ffff5h + .faraddr 007ffff6h + .faraddr 007ffff7h + .faraddr 007ffff8h + .faraddr 007ffff9h + .faraddr 007ffffah + .faraddr 007ffffbh + .faraddr 007ffffch + .faraddr 007ffffdh + .faraddr 007ffffeh + .faraddr 007fffffh + .faraddr 00800000h + .faraddr 00800001h + .faraddr 00800002h + .faraddr 00800003h + .faraddr 00800004h + .faraddr 00800005h + .faraddr 00800006h + .faraddr 00800007h + .faraddr 00800008h + .faraddr 00800009h + .faraddr 0080000ah + .faraddr 0080000bh + .faraddr 0080000ch + .faraddr 0080000dh + .faraddr 0080000eh + .faraddr 0080000fh + .faraddr 009fffe1h + .faraddr 009fffe2h + .faraddr 009fffe3h + .faraddr 009fffe4h + .faraddr 009fffe5h + .faraddr 009fffe6h + .faraddr 009fffe7h + .faraddr 009fffe8h + .faraddr 009fffe9h + .faraddr 009fffeah + .faraddr 009fffebh + .faraddr 009fffech + .faraddr 009fffedh + .faraddr 009fffeeh + .faraddr 009fffefh + .faraddr 009ffff0h + .faraddr 009ffff1h + .faraddr 009ffff2h + .faraddr 009ffff3h + .faraddr 009ffff4h + .faraddr 009ffff5h + .faraddr 009ffff6h + .faraddr 009ffff7h + .faraddr 009ffff8h + .faraddr 009ffff9h + .faraddr 009ffffah + .faraddr 009ffffbh + .faraddr 009ffffch + .faraddr 009ffffdh + .faraddr 009ffffeh + .faraddr 009fffffh + .faraddr 00a00000h + .faraddr 00a00001h + .faraddr 00a00002h + .faraddr 00a00003h + .faraddr 00a00004h + .faraddr 00a00005h + .faraddr 00a00006h + .faraddr 00a00007h + .faraddr 00a00008h + .faraddr 00a00009h + .faraddr 00a0000ah + .faraddr 00a0000bh + .faraddr 00a0000ch + .faraddr 00a0000dh + .faraddr 00a0000eh + .faraddr 00a0000fh + .faraddr 00ffffe1h + .faraddr 00ffffe2h + .faraddr 00ffffe3h + .faraddr 00ffffe4h + .faraddr 00ffffe5h + .faraddr 00ffffe6h + .faraddr 00ffffe7h + .faraddr 00ffffe8h + .faraddr 00ffffe9h + .faraddr 00ffffeah + .faraddr 00ffffebh + .faraddr 00ffffech + .faraddr 00ffffedh + .faraddr 00ffffeeh + .faraddr 00ffffefh + .faraddr 00fffff0h + .faraddr 00fffff1h + .faraddr 00fffff2h + .faraddr 00fffff3h + .faraddr 00fffff4h + .faraddr 00fffff5h + .faraddr 00fffff6h + .faraddr 00fffff7h + .faraddr 00fffff8h + .faraddr 00fffff9h + .faraddr 00fffffah + .faraddr 00fffffbh + .faraddr 00fffffch + .faraddr 00fffffdh + .faraddr 00fffffeh + .faraddr 00ffffffh - ; alternative 8-digit hex values, uppercase - .faraddr 00000000h - .faraddr 00000001h - .faraddr 00000002h - .faraddr 00000003h - .faraddr 00000004h - .faraddr 00000005h - .faraddr 00000006h - .faraddr 00000007h - .faraddr 00000008h - .faraddr 00000009h - .faraddr 0000000Ah - .faraddr 0000000Bh - .faraddr 0000000Ch - .faraddr 0000000Dh - .faraddr 0000000Eh - .faraddr 0000000Fh - .faraddr 00000010h - .faraddr 00000011h - .faraddr 00000012h - .faraddr 00000013h - .faraddr 00000070h - .faraddr 00000071h - .faraddr 00000072h - .faraddr 00000073h - .faraddr 00000074h - .faraddr 00000075h - .faraddr 00000076h - .faraddr 00000077h - .faraddr 00000078h - .faraddr 00000079h - .faraddr 0000007Ah - .faraddr 0000007Bh - .faraddr 0000007Ch - .faraddr 0000007Dh - .faraddr 0000007Eh - .faraddr 0000007Fh - .faraddr 00000080h - .faraddr 00000081h - .faraddr 00000082h - .faraddr 00000083h - .faraddr 00000084h - .faraddr 00000085h - .faraddr 00000086h - .faraddr 000000F0h - .faraddr 000000F1h - .faraddr 000000F2h - .faraddr 000000F3h - .faraddr 000000F4h - .faraddr 000000F5h - .faraddr 000000F6h - .faraddr 000000F7h - .faraddr 000000F8h - .faraddr 000000F9h - .faraddr 000000FAh - .faraddr 000000FBh - .faraddr 000000FCh - .faraddr 000000FDh - .faraddr 000000FEh - .faraddr 000000FFh - .faraddr 00000100h - .faraddr 00000101h - .faraddr 00000102h - .faraddr 00000103h - .faraddr 00000FD2h - .faraddr 00000FD3h - .faraddr 00000FD4h - .faraddr 00000FD5h - .faraddr 00000FD6h - .faraddr 00000FD7h - .faraddr 00000FD8h - .faraddr 00000FD9h - .faraddr 00000FDAh - .faraddr 00000FDBh - .faraddr 00000FDCh - .faraddr 00000FDDh - .faraddr 00000FDEh - .faraddr 00000FDFh - .faraddr 00000FE0h - .faraddr 00000FE1h - .faraddr 00000FE2h - .faraddr 00000FE3h - .faraddr 00000FE4h - .faraddr 00000FE5h - .faraddr 00000FE6h - .faraddr 00000FE7h - .faraddr 00000FE8h - .faraddr 00000FE9h - .faraddr 00000FEAh - .faraddr 00000FEBh - .faraddr 00000FECh - .faraddr 00000FEDh - .faraddr 00000FEEh - .faraddr 00000FEFh - .faraddr 00000FF0h - .faraddr 00000FF1h - .faraddr 00000FF2h - .faraddr 00000FF3h - .faraddr 00000FF4h - .faraddr 00000FF5h - .faraddr 00000FF6h - .faraddr 00000FF7h - .faraddr 00000FF8h - .faraddr 00000FF9h - .faraddr 00000FFAh - .faraddr 00000FFBh - .faraddr 00000FFCh - .faraddr 00000FFDh - .faraddr 00000FFEh - .faraddr 00000FFFh - .faraddr 00001000h - .faraddr 00001001h - .faraddr 00001002h - .faraddr 00001003h - .faraddr 00001004h - .faraddr 00001005h - .faraddr 00001006h - .faraddr 00001007h - .faraddr 00001008h - .faraddr 00007FF0h - .faraddr 00007FF1h - .faraddr 00007FF2h - .faraddr 00007FF3h - .faraddr 00007FF4h - .faraddr 00007FF5h - .faraddr 00007FF6h - .faraddr 00007FF7h - .faraddr 00007FF8h - .faraddr 00007FF9h - .faraddr 00007FFAh - .faraddr 00007FFBh - .faraddr 00007FFCh - .faraddr 00007FFDh - .faraddr 00007FFEh - .faraddr 00007FFFh - .faraddr 00008000h - .faraddr 00008001h - .faraddr 00008002h - .faraddr 00008003h - .faraddr 00008004h - .faraddr 00008005h - .faraddr 00008006h - .faraddr 00008007h - .faraddr 00008008h - .faraddr 00008009h - .faraddr 0000800Ah - .faraddr 0000800Bh - .faraddr 00009FE1h - .faraddr 00009FE2h - .faraddr 00009FE3h - .faraddr 00009FE4h - .faraddr 00009FE5h - .faraddr 00009FE6h - .faraddr 00009FE7h - .faraddr 00009FE8h - .faraddr 00009FE9h - .faraddr 00009FEAh - .faraddr 00009FEBh - .faraddr 00009FECh - .faraddr 00009FEDh - .faraddr 00009FEEh - .faraddr 00009FEFh - .faraddr 00009FF0h - .faraddr 00009FF1h - .faraddr 00009FF2h - .faraddr 00009FF3h - .faraddr 00009FF4h - .faraddr 00009FF5h - .faraddr 00009FF6h - .faraddr 00009FF7h - .faraddr 00009FF8h - .faraddr 00009FF9h - .faraddr 00009FFAh - .faraddr 00009FFBh - .faraddr 00009FFCh - .faraddr 00009FFDh - .faraddr 00009FFEh - .faraddr 00009FFFh - .faraddr 0000A000h - .faraddr 0000A001h - .faraddr 0000A002h - .faraddr 0000A003h - .faraddr 0000A004h - .faraddr 0000A005h - .faraddr 0000A006h - .faraddr 0000A007h - .faraddr 0000A008h - .faraddr 0000A009h - .faraddr 0000A00Ah - .faraddr 0000A00Bh - .faraddr 0000A00Ch - .faraddr 0000A00Dh - .faraddr 0000A00Eh - .faraddr 0000A00Fh - .faraddr 0000AFE1h - .faraddr 0000AFE2h - .faraddr 0000AFE3h - .faraddr 0000AFE4h - .faraddr 0000AFE5h - .faraddr 0000AFE6h - .faraddr 0000AFE7h - .faraddr 0000AFE8h - .faraddr 0000AFE9h - .faraddr 0000AFEAh - .faraddr 0000AFEBh - .faraddr 0000AFECh - .faraddr 0000AFEDh - .faraddr 0000AFEEh - .faraddr 0000AFEFh - .faraddr 0000AFF0h - .faraddr 0000AFF1h - .faraddr 0000AFF2h - .faraddr 0000AFF3h - .faraddr 0000AFF4h - .faraddr 0000AFF5h - .faraddr 0000AFF6h - .faraddr 0000AFF7h - .faraddr 0000AFF8h - .faraddr 0000AFF9h - .faraddr 0000AFFAh - .faraddr 0000AFFBh - .faraddr 0000AFFCh - .faraddr 0000AFFDh - .faraddr 0000AFFEh - .faraddr 0000AFFFh - .faraddr 0000B000h - .faraddr 0000B001h - .faraddr 0000B002h - .faraddr 0000B003h - .faraddr 0000B004h - .faraddr 0000B005h - .faraddr 0000B006h - .faraddr 0000B007h - .faraddr 0000B008h - .faraddr 0000B009h - .faraddr 0000B00Ah - .faraddr 0000B00Bh - .faraddr 0000B00Ch - .faraddr 0000B00Dh - .faraddr 0000B00Eh - .faraddr 0000B00Fh - .faraddr 0000FFE1h - .faraddr 0000FFE2h - .faraddr 0000FFE3h - .faraddr 0000FFE4h - .faraddr 0000FFE5h - .faraddr 0000FFE6h - .faraddr 0000FFE7h - .faraddr 0000FFE8h - .faraddr 0000FFE9h - .faraddr 0000FFEAh - .faraddr 0000FFEBh - .faraddr 0000FFECh - .faraddr 0000FFEDh - .faraddr 0000FFEEh - .faraddr 0000FFEFh - .faraddr 0000FFF0h - .faraddr 0000FFF1h - .faraddr 0000FFF2h - .faraddr 0000FFF3h - .faraddr 0000FFF4h - .faraddr 0000FFF5h - .faraddr 0000FFF6h - .faraddr 0000FFF7h - .faraddr 0000FFF8h - .faraddr 0000FFF9h - .faraddr 0000FFFAh - .faraddr 0000FFFBh - .faraddr 0000FFFCh - .faraddr 0000FFFDh - .faraddr 0000FFFEh - .faraddr 0000FFFFh - .faraddr 00010000h - .faraddr 00010001h - .faraddr 00010002h - .faraddr 00010003h - .faraddr 00010004h - .faraddr 00010005h - .faraddr 00010006h - .faraddr 00010007h - .faraddr 00010008h - .faraddr 00010009h - .faraddr 0001000Ah - .faraddr 0001000Bh - .faraddr 0001000Ch - .faraddr 0001000Dh - .faraddr 0001000Eh - .faraddr 0001000Fh - .faraddr 0010FFE1h - .faraddr 0010FFE2h - .faraddr 0010FFE3h - .faraddr 0010FFE4h - .faraddr 0010FFE5h - .faraddr 0010FFE6h - .faraddr 0010FFE7h - .faraddr 0010FFE8h - .faraddr 0010FFE9h - .faraddr 0010FFEAh - .faraddr 0010FFEBh - .faraddr 0010FFECh - .faraddr 0010FFEDh - .faraddr 0010FFEEh - .faraddr 0010FFEFh - .faraddr 0010FFF0h - .faraddr 0010FFF1h - .faraddr 0010FFF2h - .faraddr 0010FFF3h - .faraddr 0010FFF4h - .faraddr 0010FFF5h - .faraddr 0010FFF6h - .faraddr 0010FFF7h - .faraddr 0010FFF8h - .faraddr 0010FFF9h - .faraddr 0010FFFAh - .faraddr 0010FFFBh - .faraddr 0010FFFCh - .faraddr 0010FFFDh - .faraddr 0010FFFEh - .faraddr 0010FFFFh - .faraddr 00110000h - .faraddr 00110001h - .faraddr 00110002h - .faraddr 00110003h - .faraddr 00110004h - .faraddr 00110005h - .faraddr 00110006h - .faraddr 00110007h - .faraddr 00110008h - .faraddr 00110009h - .faraddr 0011000Ah - .faraddr 0011000Bh - .faraddr 0011000Ch - .faraddr 0011000Dh - .faraddr 0011000Eh - .faraddr 0011000Fh - .faraddr 0020FFE1h - .faraddr 0020FFE2h - .faraddr 0020FFE3h - .faraddr 0020FFE4h - .faraddr 0020FFE5h - .faraddr 0020FFE6h - .faraddr 0020FFE7h - .faraddr 0020FFE8h - .faraddr 0020FFE9h - .faraddr 0020FFEAh - .faraddr 0020FFEBh - .faraddr 0020FFECh - .faraddr 0020FFEDh - .faraddr 0020FFEEh - .faraddr 0020FFEFh - .faraddr 0020FFF0h - .faraddr 0020FFF1h - .faraddr 0020FFF2h - .faraddr 0020FFF3h - .faraddr 0020FFF4h - .faraddr 0020FFF5h - .faraddr 0020FFF6h - .faraddr 0020FFF7h - .faraddr 0020FFF8h - .faraddr 0020FFF9h - .faraddr 0020FFFAh - .faraddr 0020FFFBh - .faraddr 0020FFFCh - .faraddr 0020FFFDh - .faraddr 0020FFFEh - .faraddr 0020FFFFh - .faraddr 00210000h - .faraddr 00210001h - .faraddr 00210002h - .faraddr 00210003h - .faraddr 00210004h - .faraddr 00210005h - .faraddr 00210006h - .faraddr 00210007h - .faraddr 00210008h - .faraddr 00210009h - .faraddr 0021000Ah - .faraddr 0021000Bh - .faraddr 0021000Ch - .faraddr 0021000Dh - .faraddr 0021000Eh - .faraddr 0021000Fh - .faraddr 007FFFE1h - .faraddr 007FFFE2h - .faraddr 007FFFE3h - .faraddr 007FFFE4h - .faraddr 007FFFE5h - .faraddr 007FFFE6h - .faraddr 007FFFE7h - .faraddr 007FFFE8h - .faraddr 007FFFE9h - .faraddr 007FFFEAh - .faraddr 007FFFEBh - .faraddr 007FFFECh - .faraddr 007FFFEDh - .faraddr 007FFFEEh - .faraddr 007FFFEFh - .faraddr 007FFFF0h - .faraddr 007FFFF1h - .faraddr 007FFFF2h - .faraddr 007FFFF3h - .faraddr 007FFFF4h - .faraddr 007FFFF5h - .faraddr 007FFFF6h - .faraddr 007FFFF7h - .faraddr 007FFFF8h - .faraddr 007FFFF9h - .faraddr 007FFFFAh - .faraddr 007FFFFBh - .faraddr 007FFFFCh - .faraddr 007FFFFDh - .faraddr 007FFFFEh - .faraddr 007FFFFFh - .faraddr 00800000h - .faraddr 00800001h - .faraddr 00800002h - .faraddr 00800003h - .faraddr 00800004h - .faraddr 00800005h - .faraddr 00800006h - .faraddr 00800007h - .faraddr 00800008h - .faraddr 00800009h - .faraddr 0080000Ah - .faraddr 0080000Bh - .faraddr 0080000Ch - .faraddr 0080000Dh - .faraddr 0080000Eh - .faraddr 0080000Fh - .faraddr 009FFFE1h - .faraddr 009FFFE2h - .faraddr 009FFFE3h - .faraddr 009FFFE4h - .faraddr 009FFFE5h - .faraddr 009FFFE6h - .faraddr 009FFFE7h - .faraddr 009FFFE8h - .faraddr 009FFFE9h - .faraddr 009FFFEAh - .faraddr 009FFFEBh - .faraddr 009FFFECh - .faraddr 009FFFEDh - .faraddr 009FFFEEh - .faraddr 009FFFEFh - .faraddr 009FFFF0h - .faraddr 009FFFF1h - .faraddr 009FFFF2h - .faraddr 009FFFF3h - .faraddr 009FFFF4h - .faraddr 009FFFF5h - .faraddr 009FFFF6h - .faraddr 009FFFF7h - .faraddr 009FFFF8h - .faraddr 009FFFF9h - .faraddr 009FFFFAh - .faraddr 009FFFFBh - .faraddr 009FFFFCh - .faraddr 009FFFFDh - .faraddr 009FFFFEh - .faraddr 009FFFFFh - .faraddr 00A00000h - .faraddr 00A00001h - .faraddr 00A00002h - .faraddr 00A00003h - .faraddr 00A00004h - .faraddr 00A00005h - .faraddr 00A00006h - .faraddr 00A00007h - .faraddr 00A00008h - .faraddr 00A00009h - .faraddr 00A0000Ah - .faraddr 00A0000Bh - .faraddr 00A0000Ch - .faraddr 00A0000Dh - .faraddr 00A0000Eh - .faraddr 00A0000Fh - .faraddr 00FFFFE1h - .faraddr 00FFFFE2h - .faraddr 00FFFFE3h - .faraddr 00FFFFE4h - .faraddr 00FFFFE5h - .faraddr 00FFFFE6h - .faraddr 00FFFFE7h - .faraddr 00FFFFE8h - .faraddr 00FFFFE9h - .faraddr 00FFFFEAh - .faraddr 00FFFFEBh - .faraddr 00FFFFECh - .faraddr 00FFFFEDh - .faraddr 00FFFFEEh - .faraddr 00FFFFEFh - .faraddr 00FFFFF0h - .faraddr 00FFFFF1h - .faraddr 00FFFFF2h - .faraddr 00FFFFF3h - .faraddr 00FFFFF4h - .faraddr 00FFFFF5h - .faraddr 00FFFFF6h - .faraddr 00FFFFF7h - .faraddr 00FFFFF8h - .faraddr 00FFFFF9h - .faraddr 00FFFFFAh - .faraddr 00FFFFFBh - .faraddr 00FFFFFCh - .faraddr 00FFFFFDh - .faraddr 00FFFFFEh - .faraddr 00FFFFFFh + ; alternative 8-digit hex values, uppercase + .faraddr 00000000h + .faraddr 00000001h + .faraddr 00000002h + .faraddr 00000003h + .faraddr 00000004h + .faraddr 00000005h + .faraddr 00000006h + .faraddr 00000007h + .faraddr 00000008h + .faraddr 00000009h + .faraddr 0000000Ah + .faraddr 0000000Bh + .faraddr 0000000Ch + .faraddr 0000000Dh + .faraddr 0000000Eh + .faraddr 0000000Fh + .faraddr 00000010h + .faraddr 00000011h + .faraddr 00000012h + .faraddr 00000013h + .faraddr 00000070h + .faraddr 00000071h + .faraddr 00000072h + .faraddr 00000073h + .faraddr 00000074h + .faraddr 00000075h + .faraddr 00000076h + .faraddr 00000077h + .faraddr 00000078h + .faraddr 00000079h + .faraddr 0000007Ah + .faraddr 0000007Bh + .faraddr 0000007Ch + .faraddr 0000007Dh + .faraddr 0000007Eh + .faraddr 0000007Fh + .faraddr 00000080h + .faraddr 00000081h + .faraddr 00000082h + .faraddr 00000083h + .faraddr 00000084h + .faraddr 00000085h + .faraddr 00000086h + .faraddr 000000F0h + .faraddr 000000F1h + .faraddr 000000F2h + .faraddr 000000F3h + .faraddr 000000F4h + .faraddr 000000F5h + .faraddr 000000F6h + .faraddr 000000F7h + .faraddr 000000F8h + .faraddr 000000F9h + .faraddr 000000FAh + .faraddr 000000FBh + .faraddr 000000FCh + .faraddr 000000FDh + .faraddr 000000FEh + .faraddr 000000FFh + .faraddr 00000100h + .faraddr 00000101h + .faraddr 00000102h + .faraddr 00000103h + .faraddr 00000FD2h + .faraddr 00000FD3h + .faraddr 00000FD4h + .faraddr 00000FD5h + .faraddr 00000FD6h + .faraddr 00000FD7h + .faraddr 00000FD8h + .faraddr 00000FD9h + .faraddr 00000FDAh + .faraddr 00000FDBh + .faraddr 00000FDCh + .faraddr 00000FDDh + .faraddr 00000FDEh + .faraddr 00000FDFh + .faraddr 00000FE0h + .faraddr 00000FE1h + .faraddr 00000FE2h + .faraddr 00000FE3h + .faraddr 00000FE4h + .faraddr 00000FE5h + .faraddr 00000FE6h + .faraddr 00000FE7h + .faraddr 00000FE8h + .faraddr 00000FE9h + .faraddr 00000FEAh + .faraddr 00000FEBh + .faraddr 00000FECh + .faraddr 00000FEDh + .faraddr 00000FEEh + .faraddr 00000FEFh + .faraddr 00000FF0h + .faraddr 00000FF1h + .faraddr 00000FF2h + .faraddr 00000FF3h + .faraddr 00000FF4h + .faraddr 00000FF5h + .faraddr 00000FF6h + .faraddr 00000FF7h + .faraddr 00000FF8h + .faraddr 00000FF9h + .faraddr 00000FFAh + .faraddr 00000FFBh + .faraddr 00000FFCh + .faraddr 00000FFDh + .faraddr 00000FFEh + .faraddr 00000FFFh + .faraddr 00001000h + .faraddr 00001001h + .faraddr 00001002h + .faraddr 00001003h + .faraddr 00001004h + .faraddr 00001005h + .faraddr 00001006h + .faraddr 00001007h + .faraddr 00001008h + .faraddr 00007FF0h + .faraddr 00007FF1h + .faraddr 00007FF2h + .faraddr 00007FF3h + .faraddr 00007FF4h + .faraddr 00007FF5h + .faraddr 00007FF6h + .faraddr 00007FF7h + .faraddr 00007FF8h + .faraddr 00007FF9h + .faraddr 00007FFAh + .faraddr 00007FFBh + .faraddr 00007FFCh + .faraddr 00007FFDh + .faraddr 00007FFEh + .faraddr 00007FFFh + .faraddr 00008000h + .faraddr 00008001h + .faraddr 00008002h + .faraddr 00008003h + .faraddr 00008004h + .faraddr 00008005h + .faraddr 00008006h + .faraddr 00008007h + .faraddr 00008008h + .faraddr 00008009h + .faraddr 0000800Ah + .faraddr 0000800Bh + .faraddr 00009FE1h + .faraddr 00009FE2h + .faraddr 00009FE3h + .faraddr 00009FE4h + .faraddr 00009FE5h + .faraddr 00009FE6h + .faraddr 00009FE7h + .faraddr 00009FE8h + .faraddr 00009FE9h + .faraddr 00009FEAh + .faraddr 00009FEBh + .faraddr 00009FECh + .faraddr 00009FEDh + .faraddr 00009FEEh + .faraddr 00009FEFh + .faraddr 00009FF0h + .faraddr 00009FF1h + .faraddr 00009FF2h + .faraddr 00009FF3h + .faraddr 00009FF4h + .faraddr 00009FF5h + .faraddr 00009FF6h + .faraddr 00009FF7h + .faraddr 00009FF8h + .faraddr 00009FF9h + .faraddr 00009FFAh + .faraddr 00009FFBh + .faraddr 00009FFCh + .faraddr 00009FFDh + .faraddr 00009FFEh + .faraddr 00009FFFh + .faraddr 0000A000h + .faraddr 0000A001h + .faraddr 0000A002h + .faraddr 0000A003h + .faraddr 0000A004h + .faraddr 0000A005h + .faraddr 0000A006h + .faraddr 0000A007h + .faraddr 0000A008h + .faraddr 0000A009h + .faraddr 0000A00Ah + .faraddr 0000A00Bh + .faraddr 0000A00Ch + .faraddr 0000A00Dh + .faraddr 0000A00Eh + .faraddr 0000A00Fh + .faraddr 0000AFE1h + .faraddr 0000AFE2h + .faraddr 0000AFE3h + .faraddr 0000AFE4h + .faraddr 0000AFE5h + .faraddr 0000AFE6h + .faraddr 0000AFE7h + .faraddr 0000AFE8h + .faraddr 0000AFE9h + .faraddr 0000AFEAh + .faraddr 0000AFEBh + .faraddr 0000AFECh + .faraddr 0000AFEDh + .faraddr 0000AFEEh + .faraddr 0000AFEFh + .faraddr 0000AFF0h + .faraddr 0000AFF1h + .faraddr 0000AFF2h + .faraddr 0000AFF3h + .faraddr 0000AFF4h + .faraddr 0000AFF5h + .faraddr 0000AFF6h + .faraddr 0000AFF7h + .faraddr 0000AFF8h + .faraddr 0000AFF9h + .faraddr 0000AFFAh + .faraddr 0000AFFBh + .faraddr 0000AFFCh + .faraddr 0000AFFDh + .faraddr 0000AFFEh + .faraddr 0000AFFFh + .faraddr 0000B000h + .faraddr 0000B001h + .faraddr 0000B002h + .faraddr 0000B003h + .faraddr 0000B004h + .faraddr 0000B005h + .faraddr 0000B006h + .faraddr 0000B007h + .faraddr 0000B008h + .faraddr 0000B009h + .faraddr 0000B00Ah + .faraddr 0000B00Bh + .faraddr 0000B00Ch + .faraddr 0000B00Dh + .faraddr 0000B00Eh + .faraddr 0000B00Fh + .faraddr 0000FFE1h + .faraddr 0000FFE2h + .faraddr 0000FFE3h + .faraddr 0000FFE4h + .faraddr 0000FFE5h + .faraddr 0000FFE6h + .faraddr 0000FFE7h + .faraddr 0000FFE8h + .faraddr 0000FFE9h + .faraddr 0000FFEAh + .faraddr 0000FFEBh + .faraddr 0000FFECh + .faraddr 0000FFEDh + .faraddr 0000FFEEh + .faraddr 0000FFEFh + .faraddr 0000FFF0h + .faraddr 0000FFF1h + .faraddr 0000FFF2h + .faraddr 0000FFF3h + .faraddr 0000FFF4h + .faraddr 0000FFF5h + .faraddr 0000FFF6h + .faraddr 0000FFF7h + .faraddr 0000FFF8h + .faraddr 0000FFF9h + .faraddr 0000FFFAh + .faraddr 0000FFFBh + .faraddr 0000FFFCh + .faraddr 0000FFFDh + .faraddr 0000FFFEh + .faraddr 0000FFFFh + .faraddr 00010000h + .faraddr 00010001h + .faraddr 00010002h + .faraddr 00010003h + .faraddr 00010004h + .faraddr 00010005h + .faraddr 00010006h + .faraddr 00010007h + .faraddr 00010008h + .faraddr 00010009h + .faraddr 0001000Ah + .faraddr 0001000Bh + .faraddr 0001000Ch + .faraddr 0001000Dh + .faraddr 0001000Eh + .faraddr 0001000Fh + .faraddr 0010FFE1h + .faraddr 0010FFE2h + .faraddr 0010FFE3h + .faraddr 0010FFE4h + .faraddr 0010FFE5h + .faraddr 0010FFE6h + .faraddr 0010FFE7h + .faraddr 0010FFE8h + .faraddr 0010FFE9h + .faraddr 0010FFEAh + .faraddr 0010FFEBh + .faraddr 0010FFECh + .faraddr 0010FFEDh + .faraddr 0010FFEEh + .faraddr 0010FFEFh + .faraddr 0010FFF0h + .faraddr 0010FFF1h + .faraddr 0010FFF2h + .faraddr 0010FFF3h + .faraddr 0010FFF4h + .faraddr 0010FFF5h + .faraddr 0010FFF6h + .faraddr 0010FFF7h + .faraddr 0010FFF8h + .faraddr 0010FFF9h + .faraddr 0010FFFAh + .faraddr 0010FFFBh + .faraddr 0010FFFCh + .faraddr 0010FFFDh + .faraddr 0010FFFEh + .faraddr 0010FFFFh + .faraddr 00110000h + .faraddr 00110001h + .faraddr 00110002h + .faraddr 00110003h + .faraddr 00110004h + .faraddr 00110005h + .faraddr 00110006h + .faraddr 00110007h + .faraddr 00110008h + .faraddr 00110009h + .faraddr 0011000Ah + .faraddr 0011000Bh + .faraddr 0011000Ch + .faraddr 0011000Dh + .faraddr 0011000Eh + .faraddr 0011000Fh + .faraddr 0020FFE1h + .faraddr 0020FFE2h + .faraddr 0020FFE3h + .faraddr 0020FFE4h + .faraddr 0020FFE5h + .faraddr 0020FFE6h + .faraddr 0020FFE7h + .faraddr 0020FFE8h + .faraddr 0020FFE9h + .faraddr 0020FFEAh + .faraddr 0020FFEBh + .faraddr 0020FFECh + .faraddr 0020FFEDh + .faraddr 0020FFEEh + .faraddr 0020FFEFh + .faraddr 0020FFF0h + .faraddr 0020FFF1h + .faraddr 0020FFF2h + .faraddr 0020FFF3h + .faraddr 0020FFF4h + .faraddr 0020FFF5h + .faraddr 0020FFF6h + .faraddr 0020FFF7h + .faraddr 0020FFF8h + .faraddr 0020FFF9h + .faraddr 0020FFFAh + .faraddr 0020FFFBh + .faraddr 0020FFFCh + .faraddr 0020FFFDh + .faraddr 0020FFFEh + .faraddr 0020FFFFh + .faraddr 00210000h + .faraddr 00210001h + .faraddr 00210002h + .faraddr 00210003h + .faraddr 00210004h + .faraddr 00210005h + .faraddr 00210006h + .faraddr 00210007h + .faraddr 00210008h + .faraddr 00210009h + .faraddr 0021000Ah + .faraddr 0021000Bh + .faraddr 0021000Ch + .faraddr 0021000Dh + .faraddr 0021000Eh + .faraddr 0021000Fh + .faraddr 007FFFE1h + .faraddr 007FFFE2h + .faraddr 007FFFE3h + .faraddr 007FFFE4h + .faraddr 007FFFE5h + .faraddr 007FFFE6h + .faraddr 007FFFE7h + .faraddr 007FFFE8h + .faraddr 007FFFE9h + .faraddr 007FFFEAh + .faraddr 007FFFEBh + .faraddr 007FFFECh + .faraddr 007FFFEDh + .faraddr 007FFFEEh + .faraddr 007FFFEFh + .faraddr 007FFFF0h + .faraddr 007FFFF1h + .faraddr 007FFFF2h + .faraddr 007FFFF3h + .faraddr 007FFFF4h + .faraddr 007FFFF5h + .faraddr 007FFFF6h + .faraddr 007FFFF7h + .faraddr 007FFFF8h + .faraddr 007FFFF9h + .faraddr 007FFFFAh + .faraddr 007FFFFBh + .faraddr 007FFFFCh + .faraddr 007FFFFDh + .faraddr 007FFFFEh + .faraddr 007FFFFFh + .faraddr 00800000h + .faraddr 00800001h + .faraddr 00800002h + .faraddr 00800003h + .faraddr 00800004h + .faraddr 00800005h + .faraddr 00800006h + .faraddr 00800007h + .faraddr 00800008h + .faraddr 00800009h + .faraddr 0080000Ah + .faraddr 0080000Bh + .faraddr 0080000Ch + .faraddr 0080000Dh + .faraddr 0080000Eh + .faraddr 0080000Fh + .faraddr 009FFFE1h + .faraddr 009FFFE2h + .faraddr 009FFFE3h + .faraddr 009FFFE4h + .faraddr 009FFFE5h + .faraddr 009FFFE6h + .faraddr 009FFFE7h + .faraddr 009FFFE8h + .faraddr 009FFFE9h + .faraddr 009FFFEAh + .faraddr 009FFFEBh + .faraddr 009FFFECh + .faraddr 009FFFEDh + .faraddr 009FFFEEh + .faraddr 009FFFEFh + .faraddr 009FFFF0h + .faraddr 009FFFF1h + .faraddr 009FFFF2h + .faraddr 009FFFF3h + .faraddr 009FFFF4h + .faraddr 009FFFF5h + .faraddr 009FFFF6h + .faraddr 009FFFF7h + .faraddr 009FFFF8h + .faraddr 009FFFF9h + .faraddr 009FFFFAh + .faraddr 009FFFFBh + .faraddr 009FFFFCh + .faraddr 009FFFFDh + .faraddr 009FFFFEh + .faraddr 009FFFFFh + .faraddr 00A00000h + .faraddr 00A00001h + .faraddr 00A00002h + .faraddr 00A00003h + .faraddr 00A00004h + .faraddr 00A00005h + .faraddr 00A00006h + .faraddr 00A00007h + .faraddr 00A00008h + .faraddr 00A00009h + .faraddr 00A0000Ah + .faraddr 00A0000Bh + .faraddr 00A0000Ch + .faraddr 00A0000Dh + .faraddr 00A0000Eh + .faraddr 00A0000Fh + .faraddr 00FFFFE1h + .faraddr 00FFFFE2h + .faraddr 00FFFFE3h + .faraddr 00FFFFE4h + .faraddr 00FFFFE5h + .faraddr 00FFFFE6h + .faraddr 00FFFFE7h + .faraddr 00FFFFE8h + .faraddr 00FFFFE9h + .faraddr 00FFFFEAh + .faraddr 00FFFFEBh + .faraddr 00FFFFECh + .faraddr 00FFFFEDh + .faraddr 00FFFFEEh + .faraddr 00FFFFEFh + .faraddr 00FFFFF0h + .faraddr 00FFFFF1h + .faraddr 00FFFFF2h + .faraddr 00FFFFF3h + .faraddr 00FFFFF4h + .faraddr 00FFFFF5h + .faraddr 00FFFFF6h + .faraddr 00FFFFF7h + .faraddr 00FFFFF8h + .faraddr 00FFFFF9h + .faraddr 00FFFFFAh + .faraddr 00FFFFFBh + .faraddr 00FFFFFCh + .faraddr 00FFFFFDh + .faraddr 00FFFFFEh + .faraddr 00FFFFFFh - ; alternative hex values, always leading zero - .faraddr 00h - .faraddr 01h - .faraddr 02h - .faraddr 03h - .faraddr 04h - .faraddr 05h - .faraddr 06h - .faraddr 07h - .faraddr 08h - .faraddr 09h - .faraddr 0ah - .faraddr 0bh - .faraddr 0ch - .faraddr 0dh - .faraddr 0eh - .faraddr 0fh - .faraddr 010h - .faraddr 011h - .faraddr 012h - .faraddr 013h - .faraddr 070h - .faraddr 071h - .faraddr 072h - .faraddr 073h - .faraddr 074h - .faraddr 075h - .faraddr 076h - .faraddr 077h - .faraddr 078h - .faraddr 079h - .faraddr 07ah - .faraddr 07bh - .faraddr 07ch - .faraddr 07dh - .faraddr 07eh - .faraddr 07fh - .faraddr 080h - .faraddr 081h - .faraddr 082h - .faraddr 083h - .faraddr 084h - .faraddr 085h - .faraddr 086h - .faraddr 0f0h - .faraddr 0f1h - .faraddr 0f2h - .faraddr 0f3h - .faraddr 0f4h - .faraddr 0f5h - .faraddr 0f6h - .faraddr 0f7h - .faraddr 0f8h - .faraddr 0f9h - .faraddr 0fah - .faraddr 0fbh - .faraddr 0fch - .faraddr 0fdh - .faraddr 0feh - .faraddr 0ffh - .faraddr 0100h - .faraddr 0101h - .faraddr 0102h - .faraddr 0103h - .faraddr 0fd2h - .faraddr 0fd3h - .faraddr 0fd4h - .faraddr 0fd5h - .faraddr 0fd6h - .faraddr 0fd7h - .faraddr 0fd8h - .faraddr 0fd9h - .faraddr 0fdah - .faraddr 0fdbh - .faraddr 0fdch - .faraddr 0fddh - .faraddr 0fdeh - .faraddr 0fdfh - .faraddr 0fe0h - .faraddr 0fe1h - .faraddr 0fe2h - .faraddr 0fe3h - .faraddr 0fe4h - .faraddr 0fe5h - .faraddr 0fe6h - .faraddr 0fe7h - .faraddr 0fe8h - .faraddr 0fe9h - .faraddr 0feah - .faraddr 0febh - .faraddr 0fech - .faraddr 0fedh - .faraddr 0feeh - .faraddr 0fefh - .faraddr 0ff0h - .faraddr 0ff1h - .faraddr 0ff2h - .faraddr 0ff3h - .faraddr 0ff4h - .faraddr 0ff5h - .faraddr 0ff6h - .faraddr 0ff7h - .faraddr 0ff8h - .faraddr 0ff9h - .faraddr 0ffah - .faraddr 0ffbh - .faraddr 0ffch - .faraddr 0ffdh - .faraddr 0ffeh - .faraddr 0fffh - .faraddr 01000h - .faraddr 01001h - .faraddr 01002h - .faraddr 01003h - .faraddr 01004h - .faraddr 01005h - .faraddr 01006h - .faraddr 01007h - .faraddr 01008h - .faraddr 07ff0h - .faraddr 07ff1h - .faraddr 07ff2h - .faraddr 07ff3h - .faraddr 07ff4h - .faraddr 07ff5h - .faraddr 07ff6h - .faraddr 07ff7h - .faraddr 07ff8h - .faraddr 07ff9h - .faraddr 07ffah - .faraddr 07ffbh - .faraddr 07ffch - .faraddr 07ffdh - .faraddr 07ffeh - .faraddr 07fffh - .faraddr 08000h - .faraddr 08001h - .faraddr 08002h - .faraddr 08003h - .faraddr 08004h - .faraddr 08005h - .faraddr 08006h - .faraddr 08007h - .faraddr 08008h - .faraddr 08009h - .faraddr 0800ah - .faraddr 0800bh - .faraddr 09fe1h - .faraddr 09fe2h - .faraddr 09fe3h - .faraddr 09fe4h - .faraddr 09fe5h - .faraddr 09fe6h - .faraddr 09fe7h - .faraddr 09fe8h - .faraddr 09fe9h - .faraddr 09feah - .faraddr 09febh - .faraddr 09fech - .faraddr 09fedh - .faraddr 09feeh - .faraddr 09fefh - .faraddr 09ff0h - .faraddr 09ff1h - .faraddr 09ff2h - .faraddr 09ff3h - .faraddr 09ff4h - .faraddr 09ff5h - .faraddr 09ff6h - .faraddr 09ff7h - .faraddr 09ff8h - .faraddr 09ff9h - .faraddr 09ffah - .faraddr 09ffbh - .faraddr 09ffch - .faraddr 09ffdh - .faraddr 09ffeh - .faraddr 09fffh - .faraddr 0a000h - .faraddr 0a001h - .faraddr 0a002h - .faraddr 0a003h - .faraddr 0a004h - .faraddr 0a005h - .faraddr 0a006h - .faraddr 0a007h - .faraddr 0a008h - .faraddr 0a009h - .faraddr 0a00ah - .faraddr 0a00bh - .faraddr 0a00ch - .faraddr 0a00dh - .faraddr 0a00eh - .faraddr 0a00fh - .faraddr 0afe1h - .faraddr 0afe2h - .faraddr 0afe3h - .faraddr 0afe4h - .faraddr 0afe5h - .faraddr 0afe6h - .faraddr 0afe7h - .faraddr 0afe8h - .faraddr 0afe9h - .faraddr 0afeah - .faraddr 0afebh - .faraddr 0afech - .faraddr 0afedh - .faraddr 0afeeh - .faraddr 0afefh - .faraddr 0aff0h - .faraddr 0aff1h - .faraddr 0aff2h - .faraddr 0aff3h - .faraddr 0aff4h - .faraddr 0aff5h - .faraddr 0aff6h - .faraddr 0aff7h - .faraddr 0aff8h - .faraddr 0aff9h - .faraddr 0affah - .faraddr 0affbh - .faraddr 0affch - .faraddr 0affdh - .faraddr 0affeh - .faraddr 0afffh - .faraddr 0b000h - .faraddr 0b001h - .faraddr 0b002h - .faraddr 0b003h - .faraddr 0b004h - .faraddr 0b005h - .faraddr 0b006h - .faraddr 0b007h - .faraddr 0b008h - .faraddr 0b009h - .faraddr 0b00ah - .faraddr 0b00bh - .faraddr 0b00ch - .faraddr 0b00dh - .faraddr 0b00eh - .faraddr 0b00fh - .faraddr 0ffe1h - .faraddr 0ffe2h - .faraddr 0ffe3h - .faraddr 0ffe4h - .faraddr 0ffe5h - .faraddr 0ffe6h - .faraddr 0ffe7h - .faraddr 0ffe8h - .faraddr 0ffe9h - .faraddr 0ffeah - .faraddr 0ffebh - .faraddr 0ffech - .faraddr 0ffedh - .faraddr 0ffeeh - .faraddr 0ffefh - .faraddr 0fff0h - .faraddr 0fff1h - .faraddr 0fff2h - .faraddr 0fff3h - .faraddr 0fff4h - .faraddr 0fff5h - .faraddr 0fff6h - .faraddr 0fff7h - .faraddr 0fff8h - .faraddr 0fff9h - .faraddr 0fffah - .faraddr 0fffbh - .faraddr 0fffch - .faraddr 0fffdh - .faraddr 0fffeh - .faraddr 0ffffh - .faraddr 010000h - .faraddr 010001h - .faraddr 010002h - .faraddr 010003h - .faraddr 010004h - .faraddr 010005h - .faraddr 010006h - .faraddr 010007h - .faraddr 010008h - .faraddr 010009h - .faraddr 01000ah - .faraddr 01000bh - .faraddr 01000ch - .faraddr 01000dh - .faraddr 01000eh - .faraddr 01000fh - .faraddr 010ffe1h - .faraddr 010ffe2h - .faraddr 010ffe3h - .faraddr 010ffe4h - .faraddr 010ffe5h - .faraddr 010ffe6h - .faraddr 010ffe7h - .faraddr 010ffe8h - .faraddr 010ffe9h - .faraddr 010ffeah - .faraddr 010ffebh - .faraddr 010ffech - .faraddr 010ffedh - .faraddr 010ffeeh - .faraddr 010ffefh - .faraddr 010fff0h - .faraddr 010fff1h - .faraddr 010fff2h - .faraddr 010fff3h - .faraddr 010fff4h - .faraddr 010fff5h - .faraddr 010fff6h - .faraddr 010fff7h - .faraddr 010fff8h - .faraddr 010fff9h - .faraddr 010fffah - .faraddr 010fffbh - .faraddr 010fffch - .faraddr 010fffdh - .faraddr 010fffeh - .faraddr 010ffffh - .faraddr 0110000h - .faraddr 0110001h - .faraddr 0110002h - .faraddr 0110003h - .faraddr 0110004h - .faraddr 0110005h - .faraddr 0110006h - .faraddr 0110007h - .faraddr 0110008h - .faraddr 0110009h - .faraddr 011000ah - .faraddr 011000bh - .faraddr 011000ch - .faraddr 011000dh - .faraddr 011000eh - .faraddr 011000fh - .faraddr 020ffe1h - .faraddr 020ffe2h - .faraddr 020ffe3h - .faraddr 020ffe4h - .faraddr 020ffe5h - .faraddr 020ffe6h - .faraddr 020ffe7h - .faraddr 020ffe8h - .faraddr 020ffe9h - .faraddr 020ffeah - .faraddr 020ffebh - .faraddr 020ffech - .faraddr 020ffedh - .faraddr 020ffeeh - .faraddr 020ffefh - .faraddr 020fff0h - .faraddr 020fff1h - .faraddr 020fff2h - .faraddr 020fff3h - .faraddr 020fff4h - .faraddr 020fff5h - .faraddr 020fff6h - .faraddr 020fff7h - .faraddr 020fff8h - .faraddr 020fff9h - .faraddr 020fffah - .faraddr 020fffbh - .faraddr 020fffch - .faraddr 020fffdh - .faraddr 020fffeh - .faraddr 020ffffh - .faraddr 0210000h - .faraddr 0210001h - .faraddr 0210002h - .faraddr 0210003h - .faraddr 0210004h - .faraddr 0210005h - .faraddr 0210006h - .faraddr 0210007h - .faraddr 0210008h - .faraddr 0210009h - .faraddr 021000ah - .faraddr 021000bh - .faraddr 021000ch - .faraddr 021000dh - .faraddr 021000eh - .faraddr 021000fh - .faraddr 07fffe1h - .faraddr 07fffe2h - .faraddr 07fffe3h - .faraddr 07fffe4h - .faraddr 07fffe5h - .faraddr 07fffe6h - .faraddr 07fffe7h - .faraddr 07fffe8h - .faraddr 07fffe9h - .faraddr 07fffeah - .faraddr 07fffebh - .faraddr 07fffech - .faraddr 07fffedh - .faraddr 07fffeeh - .faraddr 07fffefh - .faraddr 07ffff0h - .faraddr 07ffff1h - .faraddr 07ffff2h - .faraddr 07ffff3h - .faraddr 07ffff4h - .faraddr 07ffff5h - .faraddr 07ffff6h - .faraddr 07ffff7h - .faraddr 07ffff8h - .faraddr 07ffff9h - .faraddr 07ffffah - .faraddr 07ffffbh - .faraddr 07ffffch - .faraddr 07ffffdh - .faraddr 07ffffeh - .faraddr 07fffffh - .faraddr 0800000h - .faraddr 0800001h - .faraddr 0800002h - .faraddr 0800003h - .faraddr 0800004h - .faraddr 0800005h - .faraddr 0800006h - .faraddr 0800007h - .faraddr 0800008h - .faraddr 0800009h - .faraddr 080000ah - .faraddr 080000bh - .faraddr 080000ch - .faraddr 080000dh - .faraddr 080000eh - .faraddr 080000fh - .faraddr 09fffe1h - .faraddr 09fffe2h - .faraddr 09fffe3h - .faraddr 09fffe4h - .faraddr 09fffe5h - .faraddr 09fffe6h - .faraddr 09fffe7h - .faraddr 09fffe8h - .faraddr 09fffe9h - .faraddr 09fffeah - .faraddr 09fffebh - .faraddr 09fffech - .faraddr 09fffedh - .faraddr 09fffeeh - .faraddr 09fffefh - .faraddr 09ffff0h - .faraddr 09ffff1h - .faraddr 09ffff2h - .faraddr 09ffff3h - .faraddr 09ffff4h - .faraddr 09ffff5h - .faraddr 09ffff6h - .faraddr 09ffff7h - .faraddr 09ffff8h - .faraddr 09ffff9h - .faraddr 09ffffah - .faraddr 09ffffbh - .faraddr 09ffffch - .faraddr 09ffffdh - .faraddr 09ffffeh - .faraddr 09fffffh - .faraddr 0a00000h - .faraddr 0a00001h - .faraddr 0a00002h - .faraddr 0a00003h - .faraddr 0a00004h - .faraddr 0a00005h - .faraddr 0a00006h - .faraddr 0a00007h - .faraddr 0a00008h - .faraddr 0a00009h - .faraddr 0a0000ah - .faraddr 0a0000bh - .faraddr 0a0000ch - .faraddr 0a0000dh - .faraddr 0a0000eh - .faraddr 0a0000fh - .faraddr 0ffffe1h - .faraddr 0ffffe2h - .faraddr 0ffffe3h - .faraddr 0ffffe4h - .faraddr 0ffffe5h - .faraddr 0ffffe6h - .faraddr 0ffffe7h - .faraddr 0ffffe8h - .faraddr 0ffffe9h - .faraddr 0ffffeah - .faraddr 0ffffebh - .faraddr 0ffffech - .faraddr 0ffffedh - .faraddr 0ffffeeh - .faraddr 0ffffefh - .faraddr 0fffff0h - .faraddr 0fffff1h - .faraddr 0fffff2h - .faraddr 0fffff3h - .faraddr 0fffff4h - .faraddr 0fffff5h - .faraddr 0fffff6h - .faraddr 0fffff7h - .faraddr 0fffff8h - .faraddr 0fffff9h - .faraddr 0fffffah - .faraddr 0fffffbh - .faraddr 0fffffch - .faraddr 0fffffdh - .faraddr 0fffffeh - .faraddr 0ffffffh + ; alternative hex values, always leading zero + .faraddr 00h + .faraddr 01h + .faraddr 02h + .faraddr 03h + .faraddr 04h + .faraddr 05h + .faraddr 06h + .faraddr 07h + .faraddr 08h + .faraddr 09h + .faraddr 0ah + .faraddr 0bh + .faraddr 0ch + .faraddr 0dh + .faraddr 0eh + .faraddr 0fh + .faraddr 010h + .faraddr 011h + .faraddr 012h + .faraddr 013h + .faraddr 070h + .faraddr 071h + .faraddr 072h + .faraddr 073h + .faraddr 074h + .faraddr 075h + .faraddr 076h + .faraddr 077h + .faraddr 078h + .faraddr 079h + .faraddr 07ah + .faraddr 07bh + .faraddr 07ch + .faraddr 07dh + .faraddr 07eh + .faraddr 07fh + .faraddr 080h + .faraddr 081h + .faraddr 082h + .faraddr 083h + .faraddr 084h + .faraddr 085h + .faraddr 086h + .faraddr 0f0h + .faraddr 0f1h + .faraddr 0f2h + .faraddr 0f3h + .faraddr 0f4h + .faraddr 0f5h + .faraddr 0f6h + .faraddr 0f7h + .faraddr 0f8h + .faraddr 0f9h + .faraddr 0fah + .faraddr 0fbh + .faraddr 0fch + .faraddr 0fdh + .faraddr 0feh + .faraddr 0ffh + .faraddr 0100h + .faraddr 0101h + .faraddr 0102h + .faraddr 0103h + .faraddr 0fd2h + .faraddr 0fd3h + .faraddr 0fd4h + .faraddr 0fd5h + .faraddr 0fd6h + .faraddr 0fd7h + .faraddr 0fd8h + .faraddr 0fd9h + .faraddr 0fdah + .faraddr 0fdbh + .faraddr 0fdch + .faraddr 0fddh + .faraddr 0fdeh + .faraddr 0fdfh + .faraddr 0fe0h + .faraddr 0fe1h + .faraddr 0fe2h + .faraddr 0fe3h + .faraddr 0fe4h + .faraddr 0fe5h + .faraddr 0fe6h + .faraddr 0fe7h + .faraddr 0fe8h + .faraddr 0fe9h + .faraddr 0feah + .faraddr 0febh + .faraddr 0fech + .faraddr 0fedh + .faraddr 0feeh + .faraddr 0fefh + .faraddr 0ff0h + .faraddr 0ff1h + .faraddr 0ff2h + .faraddr 0ff3h + .faraddr 0ff4h + .faraddr 0ff5h + .faraddr 0ff6h + .faraddr 0ff7h + .faraddr 0ff8h + .faraddr 0ff9h + .faraddr 0ffah + .faraddr 0ffbh + .faraddr 0ffch + .faraddr 0ffdh + .faraddr 0ffeh + .faraddr 0fffh + .faraddr 01000h + .faraddr 01001h + .faraddr 01002h + .faraddr 01003h + .faraddr 01004h + .faraddr 01005h + .faraddr 01006h + .faraddr 01007h + .faraddr 01008h + .faraddr 07ff0h + .faraddr 07ff1h + .faraddr 07ff2h + .faraddr 07ff3h + .faraddr 07ff4h + .faraddr 07ff5h + .faraddr 07ff6h + .faraddr 07ff7h + .faraddr 07ff8h + .faraddr 07ff9h + .faraddr 07ffah + .faraddr 07ffbh + .faraddr 07ffch + .faraddr 07ffdh + .faraddr 07ffeh + .faraddr 07fffh + .faraddr 08000h + .faraddr 08001h + .faraddr 08002h + .faraddr 08003h + .faraddr 08004h + .faraddr 08005h + .faraddr 08006h + .faraddr 08007h + .faraddr 08008h + .faraddr 08009h + .faraddr 0800ah + .faraddr 0800bh + .faraddr 09fe1h + .faraddr 09fe2h + .faraddr 09fe3h + .faraddr 09fe4h + .faraddr 09fe5h + .faraddr 09fe6h + .faraddr 09fe7h + .faraddr 09fe8h + .faraddr 09fe9h + .faraddr 09feah + .faraddr 09febh + .faraddr 09fech + .faraddr 09fedh + .faraddr 09feeh + .faraddr 09fefh + .faraddr 09ff0h + .faraddr 09ff1h + .faraddr 09ff2h + .faraddr 09ff3h + .faraddr 09ff4h + .faraddr 09ff5h + .faraddr 09ff6h + .faraddr 09ff7h + .faraddr 09ff8h + .faraddr 09ff9h + .faraddr 09ffah + .faraddr 09ffbh + .faraddr 09ffch + .faraddr 09ffdh + .faraddr 09ffeh + .faraddr 09fffh + .faraddr 0a000h + .faraddr 0a001h + .faraddr 0a002h + .faraddr 0a003h + .faraddr 0a004h + .faraddr 0a005h + .faraddr 0a006h + .faraddr 0a007h + .faraddr 0a008h + .faraddr 0a009h + .faraddr 0a00ah + .faraddr 0a00bh + .faraddr 0a00ch + .faraddr 0a00dh + .faraddr 0a00eh + .faraddr 0a00fh + .faraddr 0afe1h + .faraddr 0afe2h + .faraddr 0afe3h + .faraddr 0afe4h + .faraddr 0afe5h + .faraddr 0afe6h + .faraddr 0afe7h + .faraddr 0afe8h + .faraddr 0afe9h + .faraddr 0afeah + .faraddr 0afebh + .faraddr 0afech + .faraddr 0afedh + .faraddr 0afeeh + .faraddr 0afefh + .faraddr 0aff0h + .faraddr 0aff1h + .faraddr 0aff2h + .faraddr 0aff3h + .faraddr 0aff4h + .faraddr 0aff5h + .faraddr 0aff6h + .faraddr 0aff7h + .faraddr 0aff8h + .faraddr 0aff9h + .faraddr 0affah + .faraddr 0affbh + .faraddr 0affch + .faraddr 0affdh + .faraddr 0affeh + .faraddr 0afffh + .faraddr 0b000h + .faraddr 0b001h + .faraddr 0b002h + .faraddr 0b003h + .faraddr 0b004h + .faraddr 0b005h + .faraddr 0b006h + .faraddr 0b007h + .faraddr 0b008h + .faraddr 0b009h + .faraddr 0b00ah + .faraddr 0b00bh + .faraddr 0b00ch + .faraddr 0b00dh + .faraddr 0b00eh + .faraddr 0b00fh + .faraddr 0ffe1h + .faraddr 0ffe2h + .faraddr 0ffe3h + .faraddr 0ffe4h + .faraddr 0ffe5h + .faraddr 0ffe6h + .faraddr 0ffe7h + .faraddr 0ffe8h + .faraddr 0ffe9h + .faraddr 0ffeah + .faraddr 0ffebh + .faraddr 0ffech + .faraddr 0ffedh + .faraddr 0ffeeh + .faraddr 0ffefh + .faraddr 0fff0h + .faraddr 0fff1h + .faraddr 0fff2h + .faraddr 0fff3h + .faraddr 0fff4h + .faraddr 0fff5h + .faraddr 0fff6h + .faraddr 0fff7h + .faraddr 0fff8h + .faraddr 0fff9h + .faraddr 0fffah + .faraddr 0fffbh + .faraddr 0fffch + .faraddr 0fffdh + .faraddr 0fffeh + .faraddr 0ffffh + .faraddr 010000h + .faraddr 010001h + .faraddr 010002h + .faraddr 010003h + .faraddr 010004h + .faraddr 010005h + .faraddr 010006h + .faraddr 010007h + .faraddr 010008h + .faraddr 010009h + .faraddr 01000ah + .faraddr 01000bh + .faraddr 01000ch + .faraddr 01000dh + .faraddr 01000eh + .faraddr 01000fh + .faraddr 010ffe1h + .faraddr 010ffe2h + .faraddr 010ffe3h + .faraddr 010ffe4h + .faraddr 010ffe5h + .faraddr 010ffe6h + .faraddr 010ffe7h + .faraddr 010ffe8h + .faraddr 010ffe9h + .faraddr 010ffeah + .faraddr 010ffebh + .faraddr 010ffech + .faraddr 010ffedh + .faraddr 010ffeeh + .faraddr 010ffefh + .faraddr 010fff0h + .faraddr 010fff1h + .faraddr 010fff2h + .faraddr 010fff3h + .faraddr 010fff4h + .faraddr 010fff5h + .faraddr 010fff6h + .faraddr 010fff7h + .faraddr 010fff8h + .faraddr 010fff9h + .faraddr 010fffah + .faraddr 010fffbh + .faraddr 010fffch + .faraddr 010fffdh + .faraddr 010fffeh + .faraddr 010ffffh + .faraddr 0110000h + .faraddr 0110001h + .faraddr 0110002h + .faraddr 0110003h + .faraddr 0110004h + .faraddr 0110005h + .faraddr 0110006h + .faraddr 0110007h + .faraddr 0110008h + .faraddr 0110009h + .faraddr 011000ah + .faraddr 011000bh + .faraddr 011000ch + .faraddr 011000dh + .faraddr 011000eh + .faraddr 011000fh + .faraddr 020ffe1h + .faraddr 020ffe2h + .faraddr 020ffe3h + .faraddr 020ffe4h + .faraddr 020ffe5h + .faraddr 020ffe6h + .faraddr 020ffe7h + .faraddr 020ffe8h + .faraddr 020ffe9h + .faraddr 020ffeah + .faraddr 020ffebh + .faraddr 020ffech + .faraddr 020ffedh + .faraddr 020ffeeh + .faraddr 020ffefh + .faraddr 020fff0h + .faraddr 020fff1h + .faraddr 020fff2h + .faraddr 020fff3h + .faraddr 020fff4h + .faraddr 020fff5h + .faraddr 020fff6h + .faraddr 020fff7h + .faraddr 020fff8h + .faraddr 020fff9h + .faraddr 020fffah + .faraddr 020fffbh + .faraddr 020fffch + .faraddr 020fffdh + .faraddr 020fffeh + .faraddr 020ffffh + .faraddr 0210000h + .faraddr 0210001h + .faraddr 0210002h + .faraddr 0210003h + .faraddr 0210004h + .faraddr 0210005h + .faraddr 0210006h + .faraddr 0210007h + .faraddr 0210008h + .faraddr 0210009h + .faraddr 021000ah + .faraddr 021000bh + .faraddr 021000ch + .faraddr 021000dh + .faraddr 021000eh + .faraddr 021000fh + .faraddr 07fffe1h + .faraddr 07fffe2h + .faraddr 07fffe3h + .faraddr 07fffe4h + .faraddr 07fffe5h + .faraddr 07fffe6h + .faraddr 07fffe7h + .faraddr 07fffe8h + .faraddr 07fffe9h + .faraddr 07fffeah + .faraddr 07fffebh + .faraddr 07fffech + .faraddr 07fffedh + .faraddr 07fffeeh + .faraddr 07fffefh + .faraddr 07ffff0h + .faraddr 07ffff1h + .faraddr 07ffff2h + .faraddr 07ffff3h + .faraddr 07ffff4h + .faraddr 07ffff5h + .faraddr 07ffff6h + .faraddr 07ffff7h + .faraddr 07ffff8h + .faraddr 07ffff9h + .faraddr 07ffffah + .faraddr 07ffffbh + .faraddr 07ffffch + .faraddr 07ffffdh + .faraddr 07ffffeh + .faraddr 07fffffh + .faraddr 0800000h + .faraddr 0800001h + .faraddr 0800002h + .faraddr 0800003h + .faraddr 0800004h + .faraddr 0800005h + .faraddr 0800006h + .faraddr 0800007h + .faraddr 0800008h + .faraddr 0800009h + .faraddr 080000ah + .faraddr 080000bh + .faraddr 080000ch + .faraddr 080000dh + .faraddr 080000eh + .faraddr 080000fh + .faraddr 09fffe1h + .faraddr 09fffe2h + .faraddr 09fffe3h + .faraddr 09fffe4h + .faraddr 09fffe5h + .faraddr 09fffe6h + .faraddr 09fffe7h + .faraddr 09fffe8h + .faraddr 09fffe9h + .faraddr 09fffeah + .faraddr 09fffebh + .faraddr 09fffech + .faraddr 09fffedh + .faraddr 09fffeeh + .faraddr 09fffefh + .faraddr 09ffff0h + .faraddr 09ffff1h + .faraddr 09ffff2h + .faraddr 09ffff3h + .faraddr 09ffff4h + .faraddr 09ffff5h + .faraddr 09ffff6h + .faraddr 09ffff7h + .faraddr 09ffff8h + .faraddr 09ffff9h + .faraddr 09ffffah + .faraddr 09ffffbh + .faraddr 09ffffch + .faraddr 09ffffdh + .faraddr 09ffffeh + .faraddr 09fffffh + .faraddr 0a00000h + .faraddr 0a00001h + .faraddr 0a00002h + .faraddr 0a00003h + .faraddr 0a00004h + .faraddr 0a00005h + .faraddr 0a00006h + .faraddr 0a00007h + .faraddr 0a00008h + .faraddr 0a00009h + .faraddr 0a0000ah + .faraddr 0a0000bh + .faraddr 0a0000ch + .faraddr 0a0000dh + .faraddr 0a0000eh + .faraddr 0a0000fh + .faraddr 0ffffe1h + .faraddr 0ffffe2h + .faraddr 0ffffe3h + .faraddr 0ffffe4h + .faraddr 0ffffe5h + .faraddr 0ffffe6h + .faraddr 0ffffe7h + .faraddr 0ffffe8h + .faraddr 0ffffe9h + .faraddr 0ffffeah + .faraddr 0ffffebh + .faraddr 0ffffech + .faraddr 0ffffedh + .faraddr 0ffffeeh + .faraddr 0ffffefh + .faraddr 0fffff0h + .faraddr 0fffff1h + .faraddr 0fffff2h + .faraddr 0fffff3h + .faraddr 0fffff4h + .faraddr 0fffff5h + .faraddr 0fffff6h + .faraddr 0fffff7h + .faraddr 0fffff8h + .faraddr 0fffff9h + .faraddr 0fffffah + .faraddr 0fffffbh + .faraddr 0fffffch + .faraddr 0fffffdh + .faraddr 0fffffeh + .faraddr 0ffffffh - ; binary values, variable length - .faraddr %0 - .faraddr %01 - .faraddr %010 - .faraddr %011 - .faraddr %0100 - .faraddr %0101 - .faraddr %0110 - .faraddr %0111 - .faraddr %01000 - .faraddr %01001 - .faraddr %01010 - .faraddr %01011 - .faraddr %01100 - .faraddr %01101 - .faraddr %01110 - .faraddr %01111 - .faraddr %010000 - .faraddr %010001 - .faraddr %010010 - .faraddr %010011 - .faraddr %01110000 - .faraddr %01110001 - .faraddr %01110010 - .faraddr %01110011 - .faraddr %01110100 - .faraddr %01110101 - .faraddr %01110110 - .faraddr %01110111 - .faraddr %01111000 - .faraddr %01111001 - .faraddr %01111010 - .faraddr %01111011 - .faraddr %01111100 - .faraddr %01111101 - .faraddr %01111110 - .faraddr %01111111 - .faraddr %010000000 - .faraddr %010000001 - .faraddr %010000010 - .faraddr %010000011 - .faraddr %010000100 - .faraddr %010000101 - .faraddr %010000110 - .faraddr %011110000 - .faraddr %011110001 - .faraddr %011110010 - .faraddr %011110011 - .faraddr %011110100 - .faraddr %011110101 - .faraddr %011110110 - .faraddr %011110111 - .faraddr %011111000 - .faraddr %011111001 - .faraddr %011111010 - .faraddr %011111011 - .faraddr %011111100 - .faraddr %011111101 - .faraddr %011111110 - .faraddr %011111111 - .faraddr %0100000000 - .faraddr %0100000001 - .faraddr %0100000010 - .faraddr %0100000011 - .faraddr %0111111010010 - .faraddr %0111111010011 - .faraddr %0111111010100 - .faraddr %0111111010101 - .faraddr %0111111010110 - .faraddr %0111111010111 - .faraddr %0111111011000 - .faraddr %0111111011001 - .faraddr %0111111011010 - .faraddr %0111111011011 - .faraddr %0111111011100 - .faraddr %0111111011101 - .faraddr %0111111011110 - .faraddr %0111111011111 - .faraddr %0111111100000 - .faraddr %0111111100001 - .faraddr %0111111100010 - .faraddr %0111111100011 - .faraddr %0111111100100 - .faraddr %0111111100101 - .faraddr %0111111100110 - .faraddr %0111111100111 - .faraddr %0111111101000 - .faraddr %0111111101001 - .faraddr %0111111101010 - .faraddr %0111111101011 - .faraddr %0111111101100 - .faraddr %0111111101101 - .faraddr %0111111101110 - .faraddr %0111111101111 - .faraddr %0111111110000 - .faraddr %0111111110001 - .faraddr %0111111110010 - .faraddr %0111111110011 - .faraddr %0111111110100 - .faraddr %0111111110101 - .faraddr %0111111110110 - .faraddr %0111111110111 - .faraddr %0111111111000 - .faraddr %0111111111001 - .faraddr %0111111111010 - .faraddr %0111111111011 - .faraddr %0111111111100 - .faraddr %0111111111101 - .faraddr %0111111111110 - .faraddr %0111111111111 - .faraddr %01000000000000 - .faraddr %01000000000001 - .faraddr %01000000000010 - .faraddr %01000000000011 - .faraddr %01000000000100 - .faraddr %01000000000101 - .faraddr %01000000000110 - .faraddr %01000000000111 - .faraddr %01000000001000 - .faraddr %0111111111110000 - .faraddr %0111111111110001 - .faraddr %0111111111110010 - .faraddr %0111111111110011 - .faraddr %0111111111110100 - .faraddr %0111111111110101 - .faraddr %0111111111110110 - .faraddr %0111111111110111 - .faraddr %0111111111111000 - .faraddr %0111111111111001 - .faraddr %0111111111111010 - .faraddr %0111111111111011 - .faraddr %0111111111111100 - .faraddr %0111111111111101 - .faraddr %0111111111111110 - .faraddr %0111111111111111 - .faraddr %01000000000000000 - .faraddr %01000000000000001 - .faraddr %01000000000000010 - .faraddr %01000000000000011 - .faraddr %01000000000000100 - .faraddr %01000000000000101 - .faraddr %01000000000000110 - .faraddr %01000000000000111 - .faraddr %01000000000001000 - .faraddr %01000000000001001 - .faraddr %01000000000001010 - .faraddr %01000000000001011 - .faraddr %01001111111100001 - .faraddr %01001111111100010 - .faraddr %01001111111100011 - .faraddr %01001111111100100 - .faraddr %01001111111100101 - .faraddr %01001111111100110 - .faraddr %01001111111100111 - .faraddr %01001111111101000 - .faraddr %01001111111101001 - .faraddr %01001111111101010 - .faraddr %01001111111101011 - .faraddr %01001111111101100 - .faraddr %01001111111101101 - .faraddr %01001111111101110 - .faraddr %01001111111101111 - .faraddr %01001111111110000 - .faraddr %01001111111110001 - .faraddr %01001111111110010 - .faraddr %01001111111110011 - .faraddr %01001111111110100 - .faraddr %01001111111110101 - .faraddr %01001111111110110 - .faraddr %01001111111110111 - .faraddr %01001111111111000 - .faraddr %01001111111111001 - .faraddr %01001111111111010 - .faraddr %01001111111111011 - .faraddr %01001111111111100 - .faraddr %01001111111111101 - .faraddr %01001111111111110 - .faraddr %01001111111111111 - .faraddr %01010000000000000 - .faraddr %01010000000000001 - .faraddr %01010000000000010 - .faraddr %01010000000000011 - .faraddr %01010000000000100 - .faraddr %01010000000000101 - .faraddr %01010000000000110 - .faraddr %01010000000000111 - .faraddr %01010000000001000 - .faraddr %01010000000001001 - .faraddr %01010000000001010 - .faraddr %01010000000001011 - .faraddr %01010000000001100 - .faraddr %01010000000001101 - .faraddr %01010000000001110 - .faraddr %01010000000001111 - .faraddr %01010111111100001 - .faraddr %01010111111100010 - .faraddr %01010111111100011 - .faraddr %01010111111100100 - .faraddr %01010111111100101 - .faraddr %01010111111100110 - .faraddr %01010111111100111 - .faraddr %01010111111101000 - .faraddr %01010111111101001 - .faraddr %01010111111101010 - .faraddr %01010111111101011 - .faraddr %01010111111101100 - .faraddr %01010111111101101 - .faraddr %01010111111101110 - .faraddr %01010111111101111 - .faraddr %01010111111110000 - .faraddr %01010111111110001 - .faraddr %01010111111110010 - .faraddr %01010111111110011 - .faraddr %01010111111110100 - .faraddr %01010111111110101 - .faraddr %01010111111110110 - .faraddr %01010111111110111 - .faraddr %01010111111111000 - .faraddr %01010111111111001 - .faraddr %01010111111111010 - .faraddr %01010111111111011 - .faraddr %01010111111111100 - .faraddr %01010111111111101 - .faraddr %01010111111111110 - .faraddr %01010111111111111 - .faraddr %01011000000000000 - .faraddr %01011000000000001 - .faraddr %01011000000000010 - .faraddr %01011000000000011 - .faraddr %01011000000000100 - .faraddr %01011000000000101 - .faraddr %01011000000000110 - .faraddr %01011000000000111 - .faraddr %01011000000001000 - .faraddr %01011000000001001 - .faraddr %01011000000001010 - .faraddr %01011000000001011 - .faraddr %01011000000001100 - .faraddr %01011000000001101 - .faraddr %01011000000001110 - .faraddr %01011000000001111 - .faraddr %01111111111100001 - .faraddr %01111111111100010 - .faraddr %01111111111100011 - .faraddr %01111111111100100 - .faraddr %01111111111100101 - .faraddr %01111111111100110 - .faraddr %01111111111100111 - .faraddr %01111111111101000 - .faraddr %01111111111101001 - .faraddr %01111111111101010 - .faraddr %01111111111101011 - .faraddr %01111111111101100 - .faraddr %01111111111101101 - .faraddr %01111111111101110 - .faraddr %01111111111101111 - .faraddr %01111111111110000 - .faraddr %01111111111110001 - .faraddr %01111111111110010 - .faraddr %01111111111110011 - .faraddr %01111111111110100 - .faraddr %01111111111110101 - .faraddr %01111111111110110 - .faraddr %01111111111110111 - .faraddr %01111111111111000 - .faraddr %01111111111111001 - .faraddr %01111111111111010 - .faraddr %01111111111111011 - .faraddr %01111111111111100 - .faraddr %01111111111111101 - .faraddr %01111111111111110 - .faraddr %01111111111111111 - .faraddr %10000000000000000 - .faraddr %10000000000000001 - .faraddr %10000000000000010 - .faraddr %10000000000000011 - .faraddr %10000000000000100 - .faraddr %10000000000000101 - .faraddr %10000000000000110 - .faraddr %10000000000000111 - .faraddr %10000000000001000 - .faraddr %10000000000001001 - .faraddr %10000000000001010 - .faraddr %10000000000001011 - .faraddr %10000000000001100 - .faraddr %10000000000001101 - .faraddr %10000000000001110 - .faraddr %10000000000001111 - .faraddr %100001111111111100001 - .faraddr %100001111111111100010 - .faraddr %100001111111111100011 - .faraddr %100001111111111100100 - .faraddr %100001111111111100101 - .faraddr %100001111111111100110 - .faraddr %100001111111111100111 - .faraddr %100001111111111101000 - .faraddr %100001111111111101001 - .faraddr %100001111111111101010 - .faraddr %100001111111111101011 - .faraddr %100001111111111101100 - .faraddr %100001111111111101101 - .faraddr %100001111111111101110 - .faraddr %100001111111111101111 - .faraddr %100001111111111110000 - .faraddr %100001111111111110001 - .faraddr %100001111111111110010 - .faraddr %100001111111111110011 - .faraddr %100001111111111110100 - .faraddr %100001111111111110101 - .faraddr %100001111111111110110 - .faraddr %100001111111111110111 - .faraddr %100001111111111111000 - .faraddr %100001111111111111001 - .faraddr %100001111111111111010 - .faraddr %100001111111111111011 - .faraddr %100001111111111111100 - .faraddr %100001111111111111101 - .faraddr %100001111111111111110 - .faraddr %100001111111111111111 - .faraddr %100010000000000000000 - .faraddr %100010000000000000001 - .faraddr %100010000000000000010 - .faraddr %100010000000000000011 - .faraddr %100010000000000000100 - .faraddr %100010000000000000101 - .faraddr %100010000000000000110 - .faraddr %100010000000000000111 - .faraddr %100010000000000001000 - .faraddr %100010000000000001001 - .faraddr %100010000000000001010 - .faraddr %100010000000000001011 - .faraddr %100010000000000001100 - .faraddr %100010000000000001101 - .faraddr %100010000000000001110 - .faraddr %100010000000000001111 - .faraddr %1000001111111111100001 - .faraddr %1000001111111111100010 - .faraddr %1000001111111111100011 - .faraddr %1000001111111111100100 - .faraddr %1000001111111111100101 - .faraddr %1000001111111111100110 - .faraddr %1000001111111111100111 - .faraddr %1000001111111111101000 - .faraddr %1000001111111111101001 - .faraddr %1000001111111111101010 - .faraddr %1000001111111111101011 - .faraddr %1000001111111111101100 - .faraddr %1000001111111111101101 - .faraddr %1000001111111111101110 - .faraddr %1000001111111111101111 - .faraddr %1000001111111111110000 - .faraddr %1000001111111111110001 - .faraddr %1000001111111111110010 - .faraddr %1000001111111111110011 - .faraddr %1000001111111111110100 - .faraddr %1000001111111111110101 - .faraddr %1000001111111111110110 - .faraddr %1000001111111111110111 - .faraddr %1000001111111111111000 - .faraddr %1000001111111111111001 - .faraddr %1000001111111111111010 - .faraddr %1000001111111111111011 - .faraddr %1000001111111111111100 - .faraddr %1000001111111111111101 - .faraddr %1000001111111111111110 - .faraddr %1000001111111111111111 - .faraddr %1000010000000000000000 - .faraddr %1000010000000000000001 - .faraddr %1000010000000000000010 - .faraddr %1000010000000000000011 - .faraddr %1000010000000000000100 - .faraddr %1000010000000000000101 - .faraddr %1000010000000000000110 - .faraddr %1000010000000000000111 - .faraddr %1000010000000000001000 - .faraddr %1000010000000000001001 - .faraddr %1000010000000000001010 - .faraddr %1000010000000000001011 - .faraddr %1000010000000000001100 - .faraddr %1000010000000000001101 - .faraddr %1000010000000000001110 - .faraddr %1000010000000000001111 - .faraddr %11111111111111111100001 - .faraddr %11111111111111111100010 - .faraddr %11111111111111111100011 - .faraddr %11111111111111111100100 - .faraddr %11111111111111111100101 - .faraddr %11111111111111111100110 - .faraddr %11111111111111111100111 - .faraddr %11111111111111111101000 - .faraddr %11111111111111111101001 - .faraddr %11111111111111111101010 - .faraddr %11111111111111111101011 - .faraddr %11111111111111111101100 - .faraddr %11111111111111111101101 - .faraddr %11111111111111111101110 - .faraddr %11111111111111111101111 - .faraddr %11111111111111111110000 - .faraddr %11111111111111111110001 - .faraddr %11111111111111111110010 - .faraddr %11111111111111111110011 - .faraddr %11111111111111111110100 - .faraddr %11111111111111111110101 - .faraddr %11111111111111111110110 - .faraddr %11111111111111111110111 - .faraddr %11111111111111111111000 - .faraddr %11111111111111111111001 - .faraddr %11111111111111111111010 - .faraddr %11111111111111111111011 - .faraddr %11111111111111111111100 - .faraddr %11111111111111111111101 - .faraddr %11111111111111111111110 - .faraddr %11111111111111111111111 - .faraddr %100000000000000000000000 - .faraddr %100000000000000000000001 - .faraddr %100000000000000000000010 - .faraddr %100000000000000000000011 - .faraddr %100000000000000000000100 - .faraddr %100000000000000000000101 - .faraddr %100000000000000000000110 - .faraddr %100000000000000000000111 - .faraddr %100000000000000000001000 - .faraddr %100000000000000000001001 - .faraddr %100000000000000000001010 - .faraddr %100000000000000000001011 - .faraddr %100000000000000000001100 - .faraddr %100000000000000000001101 - .faraddr %100000000000000000001110 - .faraddr %100000000000000000001111 - .faraddr %100111111111111111100001 - .faraddr %100111111111111111100010 - .faraddr %100111111111111111100011 - .faraddr %100111111111111111100100 - .faraddr %100111111111111111100101 - .faraddr %100111111111111111100110 - .faraddr %100111111111111111100111 - .faraddr %100111111111111111101000 - .faraddr %100111111111111111101001 - .faraddr %100111111111111111101010 - .faraddr %100111111111111111101011 - .faraddr %100111111111111111101100 - .faraddr %100111111111111111101101 - .faraddr %100111111111111111101110 - .faraddr %100111111111111111101111 - .faraddr %100111111111111111110000 - .faraddr %100111111111111111110001 - .faraddr %100111111111111111110010 - .faraddr %100111111111111111110011 - .faraddr %100111111111111111110100 - .faraddr %100111111111111111110101 - .faraddr %100111111111111111110110 - .faraddr %100111111111111111110111 - .faraddr %100111111111111111111000 - .faraddr %100111111111111111111001 - .faraddr %100111111111111111111010 - .faraddr %100111111111111111111011 - .faraddr %100111111111111111111100 - .faraddr %100111111111111111111101 - .faraddr %100111111111111111111110 - .faraddr %100111111111111111111111 - .faraddr %101000000000000000000000 - .faraddr %101000000000000000000001 - .faraddr %101000000000000000000010 - .faraddr %101000000000000000000011 - .faraddr %101000000000000000000100 - .faraddr %101000000000000000000101 - .faraddr %101000000000000000000110 - .faraddr %101000000000000000000111 - .faraddr %101000000000000000001000 - .faraddr %101000000000000000001001 - .faraddr %101000000000000000001010 - .faraddr %101000000000000000001011 - .faraddr %101000000000000000001100 - .faraddr %101000000000000000001101 - .faraddr %101000000000000000001110 - .faraddr %101000000000000000001111 - .faraddr %111111111111111111100001 - .faraddr %111111111111111111100010 - .faraddr %111111111111111111100011 - .faraddr %111111111111111111100100 - .faraddr %111111111111111111100101 - .faraddr %111111111111111111100110 - .faraddr %111111111111111111100111 - .faraddr %111111111111111111101000 - .faraddr %111111111111111111101001 - .faraddr %111111111111111111101010 - .faraddr %111111111111111111101011 - .faraddr %111111111111111111101100 - .faraddr %111111111111111111101101 - .faraddr %111111111111111111101110 - .faraddr %111111111111111111101111 - .faraddr %111111111111111111110000 - .faraddr %111111111111111111110001 - .faraddr %111111111111111111110010 - .faraddr %111111111111111111110011 - .faraddr %111111111111111111110100 - .faraddr %111111111111111111110101 - .faraddr %111111111111111111110110 - .faraddr %111111111111111111110111 - .faraddr %111111111111111111111000 - .faraddr %111111111111111111111001 - .faraddr %111111111111111111111010 - .faraddr %111111111111111111111011 - .faraddr %111111111111111111111100 - .faraddr %111111111111111111111101 - .faraddr %111111111111111111111110 - .faraddr %111111111111111111111111 + ; binary values, variable length + .faraddr %0 + .faraddr %01 + .faraddr %010 + .faraddr %011 + .faraddr %0100 + .faraddr %0101 + .faraddr %0110 + .faraddr %0111 + .faraddr %01000 + .faraddr %01001 + .faraddr %01010 + .faraddr %01011 + .faraddr %01100 + .faraddr %01101 + .faraddr %01110 + .faraddr %01111 + .faraddr %010000 + .faraddr %010001 + .faraddr %010010 + .faraddr %010011 + .faraddr %01110000 + .faraddr %01110001 + .faraddr %01110010 + .faraddr %01110011 + .faraddr %01110100 + .faraddr %01110101 + .faraddr %01110110 + .faraddr %01110111 + .faraddr %01111000 + .faraddr %01111001 + .faraddr %01111010 + .faraddr %01111011 + .faraddr %01111100 + .faraddr %01111101 + .faraddr %01111110 + .faraddr %01111111 + .faraddr %010000000 + .faraddr %010000001 + .faraddr %010000010 + .faraddr %010000011 + .faraddr %010000100 + .faraddr %010000101 + .faraddr %010000110 + .faraddr %011110000 + .faraddr %011110001 + .faraddr %011110010 + .faraddr %011110011 + .faraddr %011110100 + .faraddr %011110101 + .faraddr %011110110 + .faraddr %011110111 + .faraddr %011111000 + .faraddr %011111001 + .faraddr %011111010 + .faraddr %011111011 + .faraddr %011111100 + .faraddr %011111101 + .faraddr %011111110 + .faraddr %011111111 + .faraddr %0100000000 + .faraddr %0100000001 + .faraddr %0100000010 + .faraddr %0100000011 + .faraddr %0111111010010 + .faraddr %0111111010011 + .faraddr %0111111010100 + .faraddr %0111111010101 + .faraddr %0111111010110 + .faraddr %0111111010111 + .faraddr %0111111011000 + .faraddr %0111111011001 + .faraddr %0111111011010 + .faraddr %0111111011011 + .faraddr %0111111011100 + .faraddr %0111111011101 + .faraddr %0111111011110 + .faraddr %0111111011111 + .faraddr %0111111100000 + .faraddr %0111111100001 + .faraddr %0111111100010 + .faraddr %0111111100011 + .faraddr %0111111100100 + .faraddr %0111111100101 + .faraddr %0111111100110 + .faraddr %0111111100111 + .faraddr %0111111101000 + .faraddr %0111111101001 + .faraddr %0111111101010 + .faraddr %0111111101011 + .faraddr %0111111101100 + .faraddr %0111111101101 + .faraddr %0111111101110 + .faraddr %0111111101111 + .faraddr %0111111110000 + .faraddr %0111111110001 + .faraddr %0111111110010 + .faraddr %0111111110011 + .faraddr %0111111110100 + .faraddr %0111111110101 + .faraddr %0111111110110 + .faraddr %0111111110111 + .faraddr %0111111111000 + .faraddr %0111111111001 + .faraddr %0111111111010 + .faraddr %0111111111011 + .faraddr %0111111111100 + .faraddr %0111111111101 + .faraddr %0111111111110 + .faraddr %0111111111111 + .faraddr %01000000000000 + .faraddr %01000000000001 + .faraddr %01000000000010 + .faraddr %01000000000011 + .faraddr %01000000000100 + .faraddr %01000000000101 + .faraddr %01000000000110 + .faraddr %01000000000111 + .faraddr %01000000001000 + .faraddr %0111111111110000 + .faraddr %0111111111110001 + .faraddr %0111111111110010 + .faraddr %0111111111110011 + .faraddr %0111111111110100 + .faraddr %0111111111110101 + .faraddr %0111111111110110 + .faraddr %0111111111110111 + .faraddr %0111111111111000 + .faraddr %0111111111111001 + .faraddr %0111111111111010 + .faraddr %0111111111111011 + .faraddr %0111111111111100 + .faraddr %0111111111111101 + .faraddr %0111111111111110 + .faraddr %0111111111111111 + .faraddr %01000000000000000 + .faraddr %01000000000000001 + .faraddr %01000000000000010 + .faraddr %01000000000000011 + .faraddr %01000000000000100 + .faraddr %01000000000000101 + .faraddr %01000000000000110 + .faraddr %01000000000000111 + .faraddr %01000000000001000 + .faraddr %01000000000001001 + .faraddr %01000000000001010 + .faraddr %01000000000001011 + .faraddr %01001111111100001 + .faraddr %01001111111100010 + .faraddr %01001111111100011 + .faraddr %01001111111100100 + .faraddr %01001111111100101 + .faraddr %01001111111100110 + .faraddr %01001111111100111 + .faraddr %01001111111101000 + .faraddr %01001111111101001 + .faraddr %01001111111101010 + .faraddr %01001111111101011 + .faraddr %01001111111101100 + .faraddr %01001111111101101 + .faraddr %01001111111101110 + .faraddr %01001111111101111 + .faraddr %01001111111110000 + .faraddr %01001111111110001 + .faraddr %01001111111110010 + .faraddr %01001111111110011 + .faraddr %01001111111110100 + .faraddr %01001111111110101 + .faraddr %01001111111110110 + .faraddr %01001111111110111 + .faraddr %01001111111111000 + .faraddr %01001111111111001 + .faraddr %01001111111111010 + .faraddr %01001111111111011 + .faraddr %01001111111111100 + .faraddr %01001111111111101 + .faraddr %01001111111111110 + .faraddr %01001111111111111 + .faraddr %01010000000000000 + .faraddr %01010000000000001 + .faraddr %01010000000000010 + .faraddr %01010000000000011 + .faraddr %01010000000000100 + .faraddr %01010000000000101 + .faraddr %01010000000000110 + .faraddr %01010000000000111 + .faraddr %01010000000001000 + .faraddr %01010000000001001 + .faraddr %01010000000001010 + .faraddr %01010000000001011 + .faraddr %01010000000001100 + .faraddr %01010000000001101 + .faraddr %01010000000001110 + .faraddr %01010000000001111 + .faraddr %01010111111100001 + .faraddr %01010111111100010 + .faraddr %01010111111100011 + .faraddr %01010111111100100 + .faraddr %01010111111100101 + .faraddr %01010111111100110 + .faraddr %01010111111100111 + .faraddr %01010111111101000 + .faraddr %01010111111101001 + .faraddr %01010111111101010 + .faraddr %01010111111101011 + .faraddr %01010111111101100 + .faraddr %01010111111101101 + .faraddr %01010111111101110 + .faraddr %01010111111101111 + .faraddr %01010111111110000 + .faraddr %01010111111110001 + .faraddr %01010111111110010 + .faraddr %01010111111110011 + .faraddr %01010111111110100 + .faraddr %01010111111110101 + .faraddr %01010111111110110 + .faraddr %01010111111110111 + .faraddr %01010111111111000 + .faraddr %01010111111111001 + .faraddr %01010111111111010 + .faraddr %01010111111111011 + .faraddr %01010111111111100 + .faraddr %01010111111111101 + .faraddr %01010111111111110 + .faraddr %01010111111111111 + .faraddr %01011000000000000 + .faraddr %01011000000000001 + .faraddr %01011000000000010 + .faraddr %01011000000000011 + .faraddr %01011000000000100 + .faraddr %01011000000000101 + .faraddr %01011000000000110 + .faraddr %01011000000000111 + .faraddr %01011000000001000 + .faraddr %01011000000001001 + .faraddr %01011000000001010 + .faraddr %01011000000001011 + .faraddr %01011000000001100 + .faraddr %01011000000001101 + .faraddr %01011000000001110 + .faraddr %01011000000001111 + .faraddr %01111111111100001 + .faraddr %01111111111100010 + .faraddr %01111111111100011 + .faraddr %01111111111100100 + .faraddr %01111111111100101 + .faraddr %01111111111100110 + .faraddr %01111111111100111 + .faraddr %01111111111101000 + .faraddr %01111111111101001 + .faraddr %01111111111101010 + .faraddr %01111111111101011 + .faraddr %01111111111101100 + .faraddr %01111111111101101 + .faraddr %01111111111101110 + .faraddr %01111111111101111 + .faraddr %01111111111110000 + .faraddr %01111111111110001 + .faraddr %01111111111110010 + .faraddr %01111111111110011 + .faraddr %01111111111110100 + .faraddr %01111111111110101 + .faraddr %01111111111110110 + .faraddr %01111111111110111 + .faraddr %01111111111111000 + .faraddr %01111111111111001 + .faraddr %01111111111111010 + .faraddr %01111111111111011 + .faraddr %01111111111111100 + .faraddr %01111111111111101 + .faraddr %01111111111111110 + .faraddr %01111111111111111 + .faraddr %10000000000000000 + .faraddr %10000000000000001 + .faraddr %10000000000000010 + .faraddr %10000000000000011 + .faraddr %10000000000000100 + .faraddr %10000000000000101 + .faraddr %10000000000000110 + .faraddr %10000000000000111 + .faraddr %10000000000001000 + .faraddr %10000000000001001 + .faraddr %10000000000001010 + .faraddr %10000000000001011 + .faraddr %10000000000001100 + .faraddr %10000000000001101 + .faraddr %10000000000001110 + .faraddr %10000000000001111 + .faraddr %100001111111111100001 + .faraddr %100001111111111100010 + .faraddr %100001111111111100011 + .faraddr %100001111111111100100 + .faraddr %100001111111111100101 + .faraddr %100001111111111100110 + .faraddr %100001111111111100111 + .faraddr %100001111111111101000 + .faraddr %100001111111111101001 + .faraddr %100001111111111101010 + .faraddr %100001111111111101011 + .faraddr %100001111111111101100 + .faraddr %100001111111111101101 + .faraddr %100001111111111101110 + .faraddr %100001111111111101111 + .faraddr %100001111111111110000 + .faraddr %100001111111111110001 + .faraddr %100001111111111110010 + .faraddr %100001111111111110011 + .faraddr %100001111111111110100 + .faraddr %100001111111111110101 + .faraddr %100001111111111110110 + .faraddr %100001111111111110111 + .faraddr %100001111111111111000 + .faraddr %100001111111111111001 + .faraddr %100001111111111111010 + .faraddr %100001111111111111011 + .faraddr %100001111111111111100 + .faraddr %100001111111111111101 + .faraddr %100001111111111111110 + .faraddr %100001111111111111111 + .faraddr %100010000000000000000 + .faraddr %100010000000000000001 + .faraddr %100010000000000000010 + .faraddr %100010000000000000011 + .faraddr %100010000000000000100 + .faraddr %100010000000000000101 + .faraddr %100010000000000000110 + .faraddr %100010000000000000111 + .faraddr %100010000000000001000 + .faraddr %100010000000000001001 + .faraddr %100010000000000001010 + .faraddr %100010000000000001011 + .faraddr %100010000000000001100 + .faraddr %100010000000000001101 + .faraddr %100010000000000001110 + .faraddr %100010000000000001111 + .faraddr %1000001111111111100001 + .faraddr %1000001111111111100010 + .faraddr %1000001111111111100011 + .faraddr %1000001111111111100100 + .faraddr %1000001111111111100101 + .faraddr %1000001111111111100110 + .faraddr %1000001111111111100111 + .faraddr %1000001111111111101000 + .faraddr %1000001111111111101001 + .faraddr %1000001111111111101010 + .faraddr %1000001111111111101011 + .faraddr %1000001111111111101100 + .faraddr %1000001111111111101101 + .faraddr %1000001111111111101110 + .faraddr %1000001111111111101111 + .faraddr %1000001111111111110000 + .faraddr %1000001111111111110001 + .faraddr %1000001111111111110010 + .faraddr %1000001111111111110011 + .faraddr %1000001111111111110100 + .faraddr %1000001111111111110101 + .faraddr %1000001111111111110110 + .faraddr %1000001111111111110111 + .faraddr %1000001111111111111000 + .faraddr %1000001111111111111001 + .faraddr %1000001111111111111010 + .faraddr %1000001111111111111011 + .faraddr %1000001111111111111100 + .faraddr %1000001111111111111101 + .faraddr %1000001111111111111110 + .faraddr %1000001111111111111111 + .faraddr %1000010000000000000000 + .faraddr %1000010000000000000001 + .faraddr %1000010000000000000010 + .faraddr %1000010000000000000011 + .faraddr %1000010000000000000100 + .faraddr %1000010000000000000101 + .faraddr %1000010000000000000110 + .faraddr %1000010000000000000111 + .faraddr %1000010000000000001000 + .faraddr %1000010000000000001001 + .faraddr %1000010000000000001010 + .faraddr %1000010000000000001011 + .faraddr %1000010000000000001100 + .faraddr %1000010000000000001101 + .faraddr %1000010000000000001110 + .faraddr %1000010000000000001111 + .faraddr %11111111111111111100001 + .faraddr %11111111111111111100010 + .faraddr %11111111111111111100011 + .faraddr %11111111111111111100100 + .faraddr %11111111111111111100101 + .faraddr %11111111111111111100110 + .faraddr %11111111111111111100111 + .faraddr %11111111111111111101000 + .faraddr %11111111111111111101001 + .faraddr %11111111111111111101010 + .faraddr %11111111111111111101011 + .faraddr %11111111111111111101100 + .faraddr %11111111111111111101101 + .faraddr %11111111111111111101110 + .faraddr %11111111111111111101111 + .faraddr %11111111111111111110000 + .faraddr %11111111111111111110001 + .faraddr %11111111111111111110010 + .faraddr %11111111111111111110011 + .faraddr %11111111111111111110100 + .faraddr %11111111111111111110101 + .faraddr %11111111111111111110110 + .faraddr %11111111111111111110111 + .faraddr %11111111111111111111000 + .faraddr %11111111111111111111001 + .faraddr %11111111111111111111010 + .faraddr %11111111111111111111011 + .faraddr %11111111111111111111100 + .faraddr %11111111111111111111101 + .faraddr %11111111111111111111110 + .faraddr %11111111111111111111111 + .faraddr %100000000000000000000000 + .faraddr %100000000000000000000001 + .faraddr %100000000000000000000010 + .faraddr %100000000000000000000011 + .faraddr %100000000000000000000100 + .faraddr %100000000000000000000101 + .faraddr %100000000000000000000110 + .faraddr %100000000000000000000111 + .faraddr %100000000000000000001000 + .faraddr %100000000000000000001001 + .faraddr %100000000000000000001010 + .faraddr %100000000000000000001011 + .faraddr %100000000000000000001100 + .faraddr %100000000000000000001101 + .faraddr %100000000000000000001110 + .faraddr %100000000000000000001111 + .faraddr %100111111111111111100001 + .faraddr %100111111111111111100010 + .faraddr %100111111111111111100011 + .faraddr %100111111111111111100100 + .faraddr %100111111111111111100101 + .faraddr %100111111111111111100110 + .faraddr %100111111111111111100111 + .faraddr %100111111111111111101000 + .faraddr %100111111111111111101001 + .faraddr %100111111111111111101010 + .faraddr %100111111111111111101011 + .faraddr %100111111111111111101100 + .faraddr %100111111111111111101101 + .faraddr %100111111111111111101110 + .faraddr %100111111111111111101111 + .faraddr %100111111111111111110000 + .faraddr %100111111111111111110001 + .faraddr %100111111111111111110010 + .faraddr %100111111111111111110011 + .faraddr %100111111111111111110100 + .faraddr %100111111111111111110101 + .faraddr %100111111111111111110110 + .faraddr %100111111111111111110111 + .faraddr %100111111111111111111000 + .faraddr %100111111111111111111001 + .faraddr %100111111111111111111010 + .faraddr %100111111111111111111011 + .faraddr %100111111111111111111100 + .faraddr %100111111111111111111101 + .faraddr %100111111111111111111110 + .faraddr %100111111111111111111111 + .faraddr %101000000000000000000000 + .faraddr %101000000000000000000001 + .faraddr %101000000000000000000010 + .faraddr %101000000000000000000011 + .faraddr %101000000000000000000100 + .faraddr %101000000000000000000101 + .faraddr %101000000000000000000110 + .faraddr %101000000000000000000111 + .faraddr %101000000000000000001000 + .faraddr %101000000000000000001001 + .faraddr %101000000000000000001010 + .faraddr %101000000000000000001011 + .faraddr %101000000000000000001100 + .faraddr %101000000000000000001101 + .faraddr %101000000000000000001110 + .faraddr %101000000000000000001111 + .faraddr %111111111111111111100001 + .faraddr %111111111111111111100010 + .faraddr %111111111111111111100011 + .faraddr %111111111111111111100100 + .faraddr %111111111111111111100101 + .faraddr %111111111111111111100110 + .faraddr %111111111111111111100111 + .faraddr %111111111111111111101000 + .faraddr %111111111111111111101001 + .faraddr %111111111111111111101010 + .faraddr %111111111111111111101011 + .faraddr %111111111111111111101100 + .faraddr %111111111111111111101101 + .faraddr %111111111111111111101110 + .faraddr %111111111111111111101111 + .faraddr %111111111111111111110000 + .faraddr %111111111111111111110001 + .faraddr %111111111111111111110010 + .faraddr %111111111111111111110011 + .faraddr %111111111111111111110100 + .faraddr %111111111111111111110101 + .faraddr %111111111111111111110110 + .faraddr %111111111111111111110111 + .faraddr %111111111111111111111000 + .faraddr %111111111111111111111001 + .faraddr %111111111111111111111010 + .faraddr %111111111111111111111011 + .faraddr %111111111111111111111100 + .faraddr %111111111111111111111101 + .faraddr %111111111111111111111110 + .faraddr %111111111111111111111111 - ; binary values, full length - .faraddr %000000000000000000000000 - .faraddr %000000000000000000000001 - .faraddr %000000000000000000000010 - .faraddr %000000000000000000000011 - .faraddr %000000000000000000000100 - .faraddr %000000000000000000000101 - .faraddr %000000000000000000000110 - .faraddr %000000000000000000000111 - .faraddr %000000000000000000001000 - .faraddr %000000000000000000001001 - .faraddr %000000000000000000001010 - .faraddr %000000000000000000001011 - .faraddr %000000000000000000001100 - .faraddr %000000000000000000001101 - .faraddr %000000000000000000001110 - .faraddr %000000000000000000001111 - .faraddr %000000000000000000010000 - .faraddr %000000000000000000010001 - .faraddr %000000000000000000010010 - .faraddr %000000000000000000010011 - .faraddr %000000000000000001110000 - .faraddr %000000000000000001110001 - .faraddr %000000000000000001110010 - .faraddr %000000000000000001110011 - .faraddr %000000000000000001110100 - .faraddr %000000000000000001110101 - .faraddr %000000000000000001110110 - .faraddr %000000000000000001110111 - .faraddr %000000000000000001111000 - .faraddr %000000000000000001111001 - .faraddr %000000000000000001111010 - .faraddr %000000000000000001111011 - .faraddr %000000000000000001111100 - .faraddr %000000000000000001111101 - .faraddr %000000000000000001111110 - .faraddr %000000000000000001111111 - .faraddr %000000000000000010000000 - .faraddr %000000000000000010000001 - .faraddr %000000000000000010000010 - .faraddr %000000000000000010000011 - .faraddr %000000000000000010000100 - .faraddr %000000000000000010000101 - .faraddr %000000000000000010000110 - .faraddr %000000000000000011110000 - .faraddr %000000000000000011110001 - .faraddr %000000000000000011110010 - .faraddr %000000000000000011110011 - .faraddr %000000000000000011110100 - .faraddr %000000000000000011110101 - .faraddr %000000000000000011110110 - .faraddr %000000000000000011110111 - .faraddr %000000000000000011111000 - .faraddr %000000000000000011111001 - .faraddr %000000000000000011111010 - .faraddr %000000000000000011111011 - .faraddr %000000000000000011111100 - .faraddr %000000000000000011111101 - .faraddr %000000000000000011111110 - .faraddr %000000000000000011111111 - .faraddr %000000000000000100000000 - .faraddr %000000000000000100000001 - .faraddr %000000000000000100000010 - .faraddr %000000000000000100000011 - .faraddr %000000000000111111010010 - .faraddr %000000000000111111010011 - .faraddr %000000000000111111010100 - .faraddr %000000000000111111010101 - .faraddr %000000000000111111010110 - .faraddr %000000000000111111010111 - .faraddr %000000000000111111011000 - .faraddr %000000000000111111011001 - .faraddr %000000000000111111011010 - .faraddr %000000000000111111011011 - .faraddr %000000000000111111011100 - .faraddr %000000000000111111011101 - .faraddr %000000000000111111011110 - .faraddr %000000000000111111011111 - .faraddr %000000000000111111100000 - .faraddr %000000000000111111100001 - .faraddr %000000000000111111100010 - .faraddr %000000000000111111100011 - .faraddr %000000000000111111100100 - .faraddr %000000000000111111100101 - .faraddr %000000000000111111100110 - .faraddr %000000000000111111100111 - .faraddr %000000000000111111101000 - .faraddr %000000000000111111101001 - .faraddr %000000000000111111101010 - .faraddr %000000000000111111101011 - .faraddr %000000000000111111101100 - .faraddr %000000000000111111101101 - .faraddr %000000000000111111101110 - .faraddr %000000000000111111101111 - .faraddr %000000000000111111110000 - .faraddr %000000000000111111110001 - .faraddr %000000000000111111110010 - .faraddr %000000000000111111110011 - .faraddr %000000000000111111110100 - .faraddr %000000000000111111110101 - .faraddr %000000000000111111110110 - .faraddr %000000000000111111110111 - .faraddr %000000000000111111111000 - .faraddr %000000000000111111111001 - .faraddr %000000000000111111111010 - .faraddr %000000000000111111111011 - .faraddr %000000000000111111111100 - .faraddr %000000000000111111111101 - .faraddr %000000000000111111111110 - .faraddr %000000000000111111111111 - .faraddr %000000000001000000000000 - .faraddr %000000000001000000000001 - .faraddr %000000000001000000000010 - .faraddr %000000000001000000000011 - .faraddr %000000000001000000000100 - .faraddr %000000000001000000000101 - .faraddr %000000000001000000000110 - .faraddr %000000000001000000000111 - .faraddr %000000000001000000001000 - .faraddr %000000000111111111110000 - .faraddr %000000000111111111110001 - .faraddr %000000000111111111110010 - .faraddr %000000000111111111110011 - .faraddr %000000000111111111110100 - .faraddr %000000000111111111110101 - .faraddr %000000000111111111110110 - .faraddr %000000000111111111110111 - .faraddr %000000000111111111111000 - .faraddr %000000000111111111111001 - .faraddr %000000000111111111111010 - .faraddr %000000000111111111111011 - .faraddr %000000000111111111111100 - .faraddr %000000000111111111111101 - .faraddr %000000000111111111111110 - .faraddr %000000000111111111111111 - .faraddr %000000001000000000000000 - .faraddr %000000001000000000000001 - .faraddr %000000001000000000000010 - .faraddr %000000001000000000000011 - .faraddr %000000001000000000000100 - .faraddr %000000001000000000000101 - .faraddr %000000001000000000000110 - .faraddr %000000001000000000000111 - .faraddr %000000001000000000001000 - .faraddr %000000001000000000001001 - .faraddr %000000001000000000001010 - .faraddr %000000001000000000001011 - .faraddr %000000001001111111100001 - .faraddr %000000001001111111100010 - .faraddr %000000001001111111100011 - .faraddr %000000001001111111100100 - .faraddr %000000001001111111100101 - .faraddr %000000001001111111100110 - .faraddr %000000001001111111100111 - .faraddr %000000001001111111101000 - .faraddr %000000001001111111101001 - .faraddr %000000001001111111101010 - .faraddr %000000001001111111101011 - .faraddr %000000001001111111101100 - .faraddr %000000001001111111101101 - .faraddr %000000001001111111101110 - .faraddr %000000001001111111101111 - .faraddr %000000001001111111110000 - .faraddr %000000001001111111110001 - .faraddr %000000001001111111110010 - .faraddr %000000001001111111110011 - .faraddr %000000001001111111110100 - .faraddr %000000001001111111110101 - .faraddr %000000001001111111110110 - .faraddr %000000001001111111110111 - .faraddr %000000001001111111111000 - .faraddr %000000001001111111111001 - .faraddr %000000001001111111111010 - .faraddr %000000001001111111111011 - .faraddr %000000001001111111111100 - .faraddr %000000001001111111111101 - .faraddr %000000001001111111111110 - .faraddr %000000001001111111111111 - .faraddr %000000001010000000000000 - .faraddr %000000001010000000000001 - .faraddr %000000001010000000000010 - .faraddr %000000001010000000000011 - .faraddr %000000001010000000000100 - .faraddr %000000001010000000000101 - .faraddr %000000001010000000000110 - .faraddr %000000001010000000000111 - .faraddr %000000001010000000001000 - .faraddr %000000001010000000001001 - .faraddr %000000001010000000001010 - .faraddr %000000001010000000001011 - .faraddr %000000001010000000001100 - .faraddr %000000001010000000001101 - .faraddr %000000001010000000001110 - .faraddr %000000001010000000001111 - .faraddr %000000001010111111100001 - .faraddr %000000001010111111100010 - .faraddr %000000001010111111100011 - .faraddr %000000001010111111100100 - .faraddr %000000001010111111100101 - .faraddr %000000001010111111100110 - .faraddr %000000001010111111100111 - .faraddr %000000001010111111101000 - .faraddr %000000001010111111101001 - .faraddr %000000001010111111101010 - .faraddr %000000001010111111101011 - .faraddr %000000001010111111101100 - .faraddr %000000001010111111101101 - .faraddr %000000001010111111101110 - .faraddr %000000001010111111101111 - .faraddr %000000001010111111110000 - .faraddr %000000001010111111110001 - .faraddr %000000001010111111110010 - .faraddr %000000001010111111110011 - .faraddr %000000001010111111110100 - .faraddr %000000001010111111110101 - .faraddr %000000001010111111110110 - .faraddr %000000001010111111110111 - .faraddr %000000001010111111111000 - .faraddr %000000001010111111111001 - .faraddr %000000001010111111111010 - .faraddr %000000001010111111111011 - .faraddr %000000001010111111111100 - .faraddr %000000001010111111111101 - .faraddr %000000001010111111111110 - .faraddr %000000001010111111111111 - .faraddr %000000001011000000000000 - .faraddr %000000001011000000000001 - .faraddr %000000001011000000000010 - .faraddr %000000001011000000000011 - .faraddr %000000001011000000000100 - .faraddr %000000001011000000000101 - .faraddr %000000001011000000000110 - .faraddr %000000001011000000000111 - .faraddr %000000001011000000001000 - .faraddr %000000001011000000001001 - .faraddr %000000001011000000001010 - .faraddr %000000001011000000001011 - .faraddr %000000001011000000001100 - .faraddr %000000001011000000001101 - .faraddr %000000001011000000001110 - .faraddr %000000001011000000001111 - .faraddr %000000001111111111100001 - .faraddr %000000001111111111100010 - .faraddr %000000001111111111100011 - .faraddr %000000001111111111100100 - .faraddr %000000001111111111100101 - .faraddr %000000001111111111100110 - .faraddr %000000001111111111100111 - .faraddr %000000001111111111101000 - .faraddr %000000001111111111101001 - .faraddr %000000001111111111101010 - .faraddr %000000001111111111101011 - .faraddr %000000001111111111101100 - .faraddr %000000001111111111101101 - .faraddr %000000001111111111101110 - .faraddr %000000001111111111101111 - .faraddr %000000001111111111110000 - .faraddr %000000001111111111110001 - .faraddr %000000001111111111110010 - .faraddr %000000001111111111110011 - .faraddr %000000001111111111110100 - .faraddr %000000001111111111110101 - .faraddr %000000001111111111110110 - .faraddr %000000001111111111110111 - .faraddr %000000001111111111111000 - .faraddr %000000001111111111111001 - .faraddr %000000001111111111111010 - .faraddr %000000001111111111111011 - .faraddr %000000001111111111111100 - .faraddr %000000001111111111111101 - .faraddr %000000001111111111111110 - .faraddr %000000001111111111111111 - .faraddr %000000010000000000000000 - .faraddr %000000010000000000000001 - .faraddr %000000010000000000000010 - .faraddr %000000010000000000000011 - .faraddr %000000010000000000000100 - .faraddr %000000010000000000000101 - .faraddr %000000010000000000000110 - .faraddr %000000010000000000000111 - .faraddr %000000010000000000001000 - .faraddr %000000010000000000001001 - .faraddr %000000010000000000001010 - .faraddr %000000010000000000001011 - .faraddr %000000010000000000001100 - .faraddr %000000010000000000001101 - .faraddr %000000010000000000001110 - .faraddr %000000010000000000001111 - .faraddr %000100001111111111100001 - .faraddr %000100001111111111100010 - .faraddr %000100001111111111100011 - .faraddr %000100001111111111100100 - .faraddr %000100001111111111100101 - .faraddr %000100001111111111100110 - .faraddr %000100001111111111100111 - .faraddr %000100001111111111101000 - .faraddr %000100001111111111101001 - .faraddr %000100001111111111101010 - .faraddr %000100001111111111101011 - .faraddr %000100001111111111101100 - .faraddr %000100001111111111101101 - .faraddr %000100001111111111101110 - .faraddr %000100001111111111101111 - .faraddr %000100001111111111110000 - .faraddr %000100001111111111110001 - .faraddr %000100001111111111110010 - .faraddr %000100001111111111110011 - .faraddr %000100001111111111110100 - .faraddr %000100001111111111110101 - .faraddr %000100001111111111110110 - .faraddr %000100001111111111110111 - .faraddr %000100001111111111111000 - .faraddr %000100001111111111111001 - .faraddr %000100001111111111111010 - .faraddr %000100001111111111111011 - .faraddr %000100001111111111111100 - .faraddr %000100001111111111111101 - .faraddr %000100001111111111111110 - .faraddr %000100001111111111111111 - .faraddr %000100010000000000000000 - .faraddr %000100010000000000000001 - .faraddr %000100010000000000000010 - .faraddr %000100010000000000000011 - .faraddr %000100010000000000000100 - .faraddr %000100010000000000000101 - .faraddr %000100010000000000000110 - .faraddr %000100010000000000000111 - .faraddr %000100010000000000001000 - .faraddr %000100010000000000001001 - .faraddr %000100010000000000001010 - .faraddr %000100010000000000001011 - .faraddr %000100010000000000001100 - .faraddr %000100010000000000001101 - .faraddr %000100010000000000001110 - .faraddr %000100010000000000001111 - .faraddr %001000001111111111100001 - .faraddr %001000001111111111100010 - .faraddr %001000001111111111100011 - .faraddr %001000001111111111100100 - .faraddr %001000001111111111100101 - .faraddr %001000001111111111100110 - .faraddr %001000001111111111100111 - .faraddr %001000001111111111101000 - .faraddr %001000001111111111101001 - .faraddr %001000001111111111101010 - .faraddr %001000001111111111101011 - .faraddr %001000001111111111101100 - .faraddr %001000001111111111101101 - .faraddr %001000001111111111101110 - .faraddr %001000001111111111101111 - .faraddr %001000001111111111110000 - .faraddr %001000001111111111110001 - .faraddr %001000001111111111110010 - .faraddr %001000001111111111110011 - .faraddr %001000001111111111110100 - .faraddr %001000001111111111110101 - .faraddr %001000001111111111110110 - .faraddr %001000001111111111110111 - .faraddr %001000001111111111111000 - .faraddr %001000001111111111111001 - .faraddr %001000001111111111111010 - .faraddr %001000001111111111111011 - .faraddr %001000001111111111111100 - .faraddr %001000001111111111111101 - .faraddr %001000001111111111111110 - .faraddr %001000001111111111111111 - .faraddr %001000010000000000000000 - .faraddr %001000010000000000000001 - .faraddr %001000010000000000000010 - .faraddr %001000010000000000000011 - .faraddr %001000010000000000000100 - .faraddr %001000010000000000000101 - .faraddr %001000010000000000000110 - .faraddr %001000010000000000000111 - .faraddr %001000010000000000001000 - .faraddr %001000010000000000001001 - .faraddr %001000010000000000001010 - .faraddr %001000010000000000001011 - .faraddr %001000010000000000001100 - .faraddr %001000010000000000001101 - .faraddr %001000010000000000001110 - .faraddr %001000010000000000001111 - .faraddr %011111111111111111100001 - .faraddr %011111111111111111100010 - .faraddr %011111111111111111100011 - .faraddr %011111111111111111100100 - .faraddr %011111111111111111100101 - .faraddr %011111111111111111100110 - .faraddr %011111111111111111100111 - .faraddr %011111111111111111101000 - .faraddr %011111111111111111101001 - .faraddr %011111111111111111101010 - .faraddr %011111111111111111101011 - .faraddr %011111111111111111101100 - .faraddr %011111111111111111101101 - .faraddr %011111111111111111101110 - .faraddr %011111111111111111101111 - .faraddr %011111111111111111110000 - .faraddr %011111111111111111110001 - .faraddr %011111111111111111110010 - .faraddr %011111111111111111110011 - .faraddr %011111111111111111110100 - .faraddr %011111111111111111110101 - .faraddr %011111111111111111110110 - .faraddr %011111111111111111110111 - .faraddr %011111111111111111111000 - .faraddr %011111111111111111111001 - .faraddr %011111111111111111111010 - .faraddr %011111111111111111111011 - .faraddr %011111111111111111111100 - .faraddr %011111111111111111111101 - .faraddr %011111111111111111111110 - .faraddr %011111111111111111111111 - .faraddr %100000000000000000000000 - .faraddr %100000000000000000000001 - .faraddr %100000000000000000000010 - .faraddr %100000000000000000000011 - .faraddr %100000000000000000000100 - .faraddr %100000000000000000000101 - .faraddr %100000000000000000000110 - .faraddr %100000000000000000000111 - .faraddr %100000000000000000001000 - .faraddr %100000000000000000001001 - .faraddr %100000000000000000001010 - .faraddr %100000000000000000001011 - .faraddr %100000000000000000001100 - .faraddr %100000000000000000001101 - .faraddr %100000000000000000001110 - .faraddr %100000000000000000001111 - .faraddr %100111111111111111100001 - .faraddr %100111111111111111100010 - .faraddr %100111111111111111100011 - .faraddr %100111111111111111100100 - .faraddr %100111111111111111100101 - .faraddr %100111111111111111100110 - .faraddr %100111111111111111100111 - .faraddr %100111111111111111101000 - .faraddr %100111111111111111101001 - .faraddr %100111111111111111101010 - .faraddr %100111111111111111101011 - .faraddr %100111111111111111101100 - .faraddr %100111111111111111101101 - .faraddr %100111111111111111101110 - .faraddr %100111111111111111101111 - .faraddr %100111111111111111110000 - .faraddr %100111111111111111110001 - .faraddr %100111111111111111110010 - .faraddr %100111111111111111110011 - .faraddr %100111111111111111110100 - .faraddr %100111111111111111110101 - .faraddr %100111111111111111110110 - .faraddr %100111111111111111110111 - .faraddr %100111111111111111111000 - .faraddr %100111111111111111111001 - .faraddr %100111111111111111111010 - .faraddr %100111111111111111111011 - .faraddr %100111111111111111111100 - .faraddr %100111111111111111111101 - .faraddr %100111111111111111111110 - .faraddr %100111111111111111111111 - .faraddr %101000000000000000000000 - .faraddr %101000000000000000000001 - .faraddr %101000000000000000000010 - .faraddr %101000000000000000000011 - .faraddr %101000000000000000000100 - .faraddr %101000000000000000000101 - .faraddr %101000000000000000000110 - .faraddr %101000000000000000000111 - .faraddr %101000000000000000001000 - .faraddr %101000000000000000001001 - .faraddr %101000000000000000001010 - .faraddr %101000000000000000001011 - .faraddr %101000000000000000001100 - .faraddr %101000000000000000001101 - .faraddr %101000000000000000001110 - .faraddr %101000000000000000001111 - .faraddr %111111111111111111100001 - .faraddr %111111111111111111100010 - .faraddr %111111111111111111100011 - .faraddr %111111111111111111100100 - .faraddr %111111111111111111100101 - .faraddr %111111111111111111100110 - .faraddr %111111111111111111100111 - .faraddr %111111111111111111101000 - .faraddr %111111111111111111101001 - .faraddr %111111111111111111101010 - .faraddr %111111111111111111101011 - .faraddr %111111111111111111101100 - .faraddr %111111111111111111101101 - .faraddr %111111111111111111101110 - .faraddr %111111111111111111101111 - .faraddr %111111111111111111110000 - .faraddr %111111111111111111110001 - .faraddr %111111111111111111110010 - .faraddr %111111111111111111110011 - .faraddr %111111111111111111110100 - .faraddr %111111111111111111110101 - .faraddr %111111111111111111110110 - .faraddr %111111111111111111110111 - .faraddr %111111111111111111111000 - .faraddr %111111111111111111111001 - .faraddr %111111111111111111111010 - .faraddr %111111111111111111111011 - .faraddr %111111111111111111111100 - .faraddr %111111111111111111111101 - .faraddr %111111111111111111111110 - .faraddr %111111111111111111111111 + ; binary values, full length + .faraddr %000000000000000000000000 + .faraddr %000000000000000000000001 + .faraddr %000000000000000000000010 + .faraddr %000000000000000000000011 + .faraddr %000000000000000000000100 + .faraddr %000000000000000000000101 + .faraddr %000000000000000000000110 + .faraddr %000000000000000000000111 + .faraddr %000000000000000000001000 + .faraddr %000000000000000000001001 + .faraddr %000000000000000000001010 + .faraddr %000000000000000000001011 + .faraddr %000000000000000000001100 + .faraddr %000000000000000000001101 + .faraddr %000000000000000000001110 + .faraddr %000000000000000000001111 + .faraddr %000000000000000000010000 + .faraddr %000000000000000000010001 + .faraddr %000000000000000000010010 + .faraddr %000000000000000000010011 + .faraddr %000000000000000001110000 + .faraddr %000000000000000001110001 + .faraddr %000000000000000001110010 + .faraddr %000000000000000001110011 + .faraddr %000000000000000001110100 + .faraddr %000000000000000001110101 + .faraddr %000000000000000001110110 + .faraddr %000000000000000001110111 + .faraddr %000000000000000001111000 + .faraddr %000000000000000001111001 + .faraddr %000000000000000001111010 + .faraddr %000000000000000001111011 + .faraddr %000000000000000001111100 + .faraddr %000000000000000001111101 + .faraddr %000000000000000001111110 + .faraddr %000000000000000001111111 + .faraddr %000000000000000010000000 + .faraddr %000000000000000010000001 + .faraddr %000000000000000010000010 + .faraddr %000000000000000010000011 + .faraddr %000000000000000010000100 + .faraddr %000000000000000010000101 + .faraddr %000000000000000010000110 + .faraddr %000000000000000011110000 + .faraddr %000000000000000011110001 + .faraddr %000000000000000011110010 + .faraddr %000000000000000011110011 + .faraddr %000000000000000011110100 + .faraddr %000000000000000011110101 + .faraddr %000000000000000011110110 + .faraddr %000000000000000011110111 + .faraddr %000000000000000011111000 + .faraddr %000000000000000011111001 + .faraddr %000000000000000011111010 + .faraddr %000000000000000011111011 + .faraddr %000000000000000011111100 + .faraddr %000000000000000011111101 + .faraddr %000000000000000011111110 + .faraddr %000000000000000011111111 + .faraddr %000000000000000100000000 + .faraddr %000000000000000100000001 + .faraddr %000000000000000100000010 + .faraddr %000000000000000100000011 + .faraddr %000000000000111111010010 + .faraddr %000000000000111111010011 + .faraddr %000000000000111111010100 + .faraddr %000000000000111111010101 + .faraddr %000000000000111111010110 + .faraddr %000000000000111111010111 + .faraddr %000000000000111111011000 + .faraddr %000000000000111111011001 + .faraddr %000000000000111111011010 + .faraddr %000000000000111111011011 + .faraddr %000000000000111111011100 + .faraddr %000000000000111111011101 + .faraddr %000000000000111111011110 + .faraddr %000000000000111111011111 + .faraddr %000000000000111111100000 + .faraddr %000000000000111111100001 + .faraddr %000000000000111111100010 + .faraddr %000000000000111111100011 + .faraddr %000000000000111111100100 + .faraddr %000000000000111111100101 + .faraddr %000000000000111111100110 + .faraddr %000000000000111111100111 + .faraddr %000000000000111111101000 + .faraddr %000000000000111111101001 + .faraddr %000000000000111111101010 + .faraddr %000000000000111111101011 + .faraddr %000000000000111111101100 + .faraddr %000000000000111111101101 + .faraddr %000000000000111111101110 + .faraddr %000000000000111111101111 + .faraddr %000000000000111111110000 + .faraddr %000000000000111111110001 + .faraddr %000000000000111111110010 + .faraddr %000000000000111111110011 + .faraddr %000000000000111111110100 + .faraddr %000000000000111111110101 + .faraddr %000000000000111111110110 + .faraddr %000000000000111111110111 + .faraddr %000000000000111111111000 + .faraddr %000000000000111111111001 + .faraddr %000000000000111111111010 + .faraddr %000000000000111111111011 + .faraddr %000000000000111111111100 + .faraddr %000000000000111111111101 + .faraddr %000000000000111111111110 + .faraddr %000000000000111111111111 + .faraddr %000000000001000000000000 + .faraddr %000000000001000000000001 + .faraddr %000000000001000000000010 + .faraddr %000000000001000000000011 + .faraddr %000000000001000000000100 + .faraddr %000000000001000000000101 + .faraddr %000000000001000000000110 + .faraddr %000000000001000000000111 + .faraddr %000000000001000000001000 + .faraddr %000000000111111111110000 + .faraddr %000000000111111111110001 + .faraddr %000000000111111111110010 + .faraddr %000000000111111111110011 + .faraddr %000000000111111111110100 + .faraddr %000000000111111111110101 + .faraddr %000000000111111111110110 + .faraddr %000000000111111111110111 + .faraddr %000000000111111111111000 + .faraddr %000000000111111111111001 + .faraddr %000000000111111111111010 + .faraddr %000000000111111111111011 + .faraddr %000000000111111111111100 + .faraddr %000000000111111111111101 + .faraddr %000000000111111111111110 + .faraddr %000000000111111111111111 + .faraddr %000000001000000000000000 + .faraddr %000000001000000000000001 + .faraddr %000000001000000000000010 + .faraddr %000000001000000000000011 + .faraddr %000000001000000000000100 + .faraddr %000000001000000000000101 + .faraddr %000000001000000000000110 + .faraddr %000000001000000000000111 + .faraddr %000000001000000000001000 + .faraddr %000000001000000000001001 + .faraddr %000000001000000000001010 + .faraddr %000000001000000000001011 + .faraddr %000000001001111111100001 + .faraddr %000000001001111111100010 + .faraddr %000000001001111111100011 + .faraddr %000000001001111111100100 + .faraddr %000000001001111111100101 + .faraddr %000000001001111111100110 + .faraddr %000000001001111111100111 + .faraddr %000000001001111111101000 + .faraddr %000000001001111111101001 + .faraddr %000000001001111111101010 + .faraddr %000000001001111111101011 + .faraddr %000000001001111111101100 + .faraddr %000000001001111111101101 + .faraddr %000000001001111111101110 + .faraddr %000000001001111111101111 + .faraddr %000000001001111111110000 + .faraddr %000000001001111111110001 + .faraddr %000000001001111111110010 + .faraddr %000000001001111111110011 + .faraddr %000000001001111111110100 + .faraddr %000000001001111111110101 + .faraddr %000000001001111111110110 + .faraddr %000000001001111111110111 + .faraddr %000000001001111111111000 + .faraddr %000000001001111111111001 + .faraddr %000000001001111111111010 + .faraddr %000000001001111111111011 + .faraddr %000000001001111111111100 + .faraddr %000000001001111111111101 + .faraddr %000000001001111111111110 + .faraddr %000000001001111111111111 + .faraddr %000000001010000000000000 + .faraddr %000000001010000000000001 + .faraddr %000000001010000000000010 + .faraddr %000000001010000000000011 + .faraddr %000000001010000000000100 + .faraddr %000000001010000000000101 + .faraddr %000000001010000000000110 + .faraddr %000000001010000000000111 + .faraddr %000000001010000000001000 + .faraddr %000000001010000000001001 + .faraddr %000000001010000000001010 + .faraddr %000000001010000000001011 + .faraddr %000000001010000000001100 + .faraddr %000000001010000000001101 + .faraddr %000000001010000000001110 + .faraddr %000000001010000000001111 + .faraddr %000000001010111111100001 + .faraddr %000000001010111111100010 + .faraddr %000000001010111111100011 + .faraddr %000000001010111111100100 + .faraddr %000000001010111111100101 + .faraddr %000000001010111111100110 + .faraddr %000000001010111111100111 + .faraddr %000000001010111111101000 + .faraddr %000000001010111111101001 + .faraddr %000000001010111111101010 + .faraddr %000000001010111111101011 + .faraddr %000000001010111111101100 + .faraddr %000000001010111111101101 + .faraddr %000000001010111111101110 + .faraddr %000000001010111111101111 + .faraddr %000000001010111111110000 + .faraddr %000000001010111111110001 + .faraddr %000000001010111111110010 + .faraddr %000000001010111111110011 + .faraddr %000000001010111111110100 + .faraddr %000000001010111111110101 + .faraddr %000000001010111111110110 + .faraddr %000000001010111111110111 + .faraddr %000000001010111111111000 + .faraddr %000000001010111111111001 + .faraddr %000000001010111111111010 + .faraddr %000000001010111111111011 + .faraddr %000000001010111111111100 + .faraddr %000000001010111111111101 + .faraddr %000000001010111111111110 + .faraddr %000000001010111111111111 + .faraddr %000000001011000000000000 + .faraddr %000000001011000000000001 + .faraddr %000000001011000000000010 + .faraddr %000000001011000000000011 + .faraddr %000000001011000000000100 + .faraddr %000000001011000000000101 + .faraddr %000000001011000000000110 + .faraddr %000000001011000000000111 + .faraddr %000000001011000000001000 + .faraddr %000000001011000000001001 + .faraddr %000000001011000000001010 + .faraddr %000000001011000000001011 + .faraddr %000000001011000000001100 + .faraddr %000000001011000000001101 + .faraddr %000000001011000000001110 + .faraddr %000000001011000000001111 + .faraddr %000000001111111111100001 + .faraddr %000000001111111111100010 + .faraddr %000000001111111111100011 + .faraddr %000000001111111111100100 + .faraddr %000000001111111111100101 + .faraddr %000000001111111111100110 + .faraddr %000000001111111111100111 + .faraddr %000000001111111111101000 + .faraddr %000000001111111111101001 + .faraddr %000000001111111111101010 + .faraddr %000000001111111111101011 + .faraddr %000000001111111111101100 + .faraddr %000000001111111111101101 + .faraddr %000000001111111111101110 + .faraddr %000000001111111111101111 + .faraddr %000000001111111111110000 + .faraddr %000000001111111111110001 + .faraddr %000000001111111111110010 + .faraddr %000000001111111111110011 + .faraddr %000000001111111111110100 + .faraddr %000000001111111111110101 + .faraddr %000000001111111111110110 + .faraddr %000000001111111111110111 + .faraddr %000000001111111111111000 + .faraddr %000000001111111111111001 + .faraddr %000000001111111111111010 + .faraddr %000000001111111111111011 + .faraddr %000000001111111111111100 + .faraddr %000000001111111111111101 + .faraddr %000000001111111111111110 + .faraddr %000000001111111111111111 + .faraddr %000000010000000000000000 + .faraddr %000000010000000000000001 + .faraddr %000000010000000000000010 + .faraddr %000000010000000000000011 + .faraddr %000000010000000000000100 + .faraddr %000000010000000000000101 + .faraddr %000000010000000000000110 + .faraddr %000000010000000000000111 + .faraddr %000000010000000000001000 + .faraddr %000000010000000000001001 + .faraddr %000000010000000000001010 + .faraddr %000000010000000000001011 + .faraddr %000000010000000000001100 + .faraddr %000000010000000000001101 + .faraddr %000000010000000000001110 + .faraddr %000000010000000000001111 + .faraddr %000100001111111111100001 + .faraddr %000100001111111111100010 + .faraddr %000100001111111111100011 + .faraddr %000100001111111111100100 + .faraddr %000100001111111111100101 + .faraddr %000100001111111111100110 + .faraddr %000100001111111111100111 + .faraddr %000100001111111111101000 + .faraddr %000100001111111111101001 + .faraddr %000100001111111111101010 + .faraddr %000100001111111111101011 + .faraddr %000100001111111111101100 + .faraddr %000100001111111111101101 + .faraddr %000100001111111111101110 + .faraddr %000100001111111111101111 + .faraddr %000100001111111111110000 + .faraddr %000100001111111111110001 + .faraddr %000100001111111111110010 + .faraddr %000100001111111111110011 + .faraddr %000100001111111111110100 + .faraddr %000100001111111111110101 + .faraddr %000100001111111111110110 + .faraddr %000100001111111111110111 + .faraddr %000100001111111111111000 + .faraddr %000100001111111111111001 + .faraddr %000100001111111111111010 + .faraddr %000100001111111111111011 + .faraddr %000100001111111111111100 + .faraddr %000100001111111111111101 + .faraddr %000100001111111111111110 + .faraddr %000100001111111111111111 + .faraddr %000100010000000000000000 + .faraddr %000100010000000000000001 + .faraddr %000100010000000000000010 + .faraddr %000100010000000000000011 + .faraddr %000100010000000000000100 + .faraddr %000100010000000000000101 + .faraddr %000100010000000000000110 + .faraddr %000100010000000000000111 + .faraddr %000100010000000000001000 + .faraddr %000100010000000000001001 + .faraddr %000100010000000000001010 + .faraddr %000100010000000000001011 + .faraddr %000100010000000000001100 + .faraddr %000100010000000000001101 + .faraddr %000100010000000000001110 + .faraddr %000100010000000000001111 + .faraddr %001000001111111111100001 + .faraddr %001000001111111111100010 + .faraddr %001000001111111111100011 + .faraddr %001000001111111111100100 + .faraddr %001000001111111111100101 + .faraddr %001000001111111111100110 + .faraddr %001000001111111111100111 + .faraddr %001000001111111111101000 + .faraddr %001000001111111111101001 + .faraddr %001000001111111111101010 + .faraddr %001000001111111111101011 + .faraddr %001000001111111111101100 + .faraddr %001000001111111111101101 + .faraddr %001000001111111111101110 + .faraddr %001000001111111111101111 + .faraddr %001000001111111111110000 + .faraddr %001000001111111111110001 + .faraddr %001000001111111111110010 + .faraddr %001000001111111111110011 + .faraddr %001000001111111111110100 + .faraddr %001000001111111111110101 + .faraddr %001000001111111111110110 + .faraddr %001000001111111111110111 + .faraddr %001000001111111111111000 + .faraddr %001000001111111111111001 + .faraddr %001000001111111111111010 + .faraddr %001000001111111111111011 + .faraddr %001000001111111111111100 + .faraddr %001000001111111111111101 + .faraddr %001000001111111111111110 + .faraddr %001000001111111111111111 + .faraddr %001000010000000000000000 + .faraddr %001000010000000000000001 + .faraddr %001000010000000000000010 + .faraddr %001000010000000000000011 + .faraddr %001000010000000000000100 + .faraddr %001000010000000000000101 + .faraddr %001000010000000000000110 + .faraddr %001000010000000000000111 + .faraddr %001000010000000000001000 + .faraddr %001000010000000000001001 + .faraddr %001000010000000000001010 + .faraddr %001000010000000000001011 + .faraddr %001000010000000000001100 + .faraddr %001000010000000000001101 + .faraddr %001000010000000000001110 + .faraddr %001000010000000000001111 + .faraddr %011111111111111111100001 + .faraddr %011111111111111111100010 + .faraddr %011111111111111111100011 + .faraddr %011111111111111111100100 + .faraddr %011111111111111111100101 + .faraddr %011111111111111111100110 + .faraddr %011111111111111111100111 + .faraddr %011111111111111111101000 + .faraddr %011111111111111111101001 + .faraddr %011111111111111111101010 + .faraddr %011111111111111111101011 + .faraddr %011111111111111111101100 + .faraddr %011111111111111111101101 + .faraddr %011111111111111111101110 + .faraddr %011111111111111111101111 + .faraddr %011111111111111111110000 + .faraddr %011111111111111111110001 + .faraddr %011111111111111111110010 + .faraddr %011111111111111111110011 + .faraddr %011111111111111111110100 + .faraddr %011111111111111111110101 + .faraddr %011111111111111111110110 + .faraddr %011111111111111111110111 + .faraddr %011111111111111111111000 + .faraddr %011111111111111111111001 + .faraddr %011111111111111111111010 + .faraddr %011111111111111111111011 + .faraddr %011111111111111111111100 + .faraddr %011111111111111111111101 + .faraddr %011111111111111111111110 + .faraddr %011111111111111111111111 + .faraddr %100000000000000000000000 + .faraddr %100000000000000000000001 + .faraddr %100000000000000000000010 + .faraddr %100000000000000000000011 + .faraddr %100000000000000000000100 + .faraddr %100000000000000000000101 + .faraddr %100000000000000000000110 + .faraddr %100000000000000000000111 + .faraddr %100000000000000000001000 + .faraddr %100000000000000000001001 + .faraddr %100000000000000000001010 + .faraddr %100000000000000000001011 + .faraddr %100000000000000000001100 + .faraddr %100000000000000000001101 + .faraddr %100000000000000000001110 + .faraddr %100000000000000000001111 + .faraddr %100111111111111111100001 + .faraddr %100111111111111111100010 + .faraddr %100111111111111111100011 + .faraddr %100111111111111111100100 + .faraddr %100111111111111111100101 + .faraddr %100111111111111111100110 + .faraddr %100111111111111111100111 + .faraddr %100111111111111111101000 + .faraddr %100111111111111111101001 + .faraddr %100111111111111111101010 + .faraddr %100111111111111111101011 + .faraddr %100111111111111111101100 + .faraddr %100111111111111111101101 + .faraddr %100111111111111111101110 + .faraddr %100111111111111111101111 + .faraddr %100111111111111111110000 + .faraddr %100111111111111111110001 + .faraddr %100111111111111111110010 + .faraddr %100111111111111111110011 + .faraddr %100111111111111111110100 + .faraddr %100111111111111111110101 + .faraddr %100111111111111111110110 + .faraddr %100111111111111111110111 + .faraddr %100111111111111111111000 + .faraddr %100111111111111111111001 + .faraddr %100111111111111111111010 + .faraddr %100111111111111111111011 + .faraddr %100111111111111111111100 + .faraddr %100111111111111111111101 + .faraddr %100111111111111111111110 + .faraddr %100111111111111111111111 + .faraddr %101000000000000000000000 + .faraddr %101000000000000000000001 + .faraddr %101000000000000000000010 + .faraddr %101000000000000000000011 + .faraddr %101000000000000000000100 + .faraddr %101000000000000000000101 + .faraddr %101000000000000000000110 + .faraddr %101000000000000000000111 + .faraddr %101000000000000000001000 + .faraddr %101000000000000000001001 + .faraddr %101000000000000000001010 + .faraddr %101000000000000000001011 + .faraddr %101000000000000000001100 + .faraddr %101000000000000000001101 + .faraddr %101000000000000000001110 + .faraddr %101000000000000000001111 + .faraddr %111111111111111111100001 + .faraddr %111111111111111111100010 + .faraddr %111111111111111111100011 + .faraddr %111111111111111111100100 + .faraddr %111111111111111111100101 + .faraddr %111111111111111111100110 + .faraddr %111111111111111111100111 + .faraddr %111111111111111111101000 + .faraddr %111111111111111111101001 + .faraddr %111111111111111111101010 + .faraddr %111111111111111111101011 + .faraddr %111111111111111111101100 + .faraddr %111111111111111111101101 + .faraddr %111111111111111111101110 + .faraddr %111111111111111111101111 + .faraddr %111111111111111111110000 + .faraddr %111111111111111111110001 + .faraddr %111111111111111111110010 + .faraddr %111111111111111111110011 + .faraddr %111111111111111111110100 + .faraddr %111111111111111111110101 + .faraddr %111111111111111111110110 + .faraddr %111111111111111111110111 + .faraddr %111111111111111111111000 + .faraddr %111111111111111111111001 + .faraddr %111111111111111111111010 + .faraddr %111111111111111111111011 + .faraddr %111111111111111111111100 + .faraddr %111111111111111111111101 + .faraddr %111111111111111111111110 + .faraddr %111111111111111111111111 - ; multiple values on one line, decimal - .faraddr 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - .faraddr 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 - .faraddr 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 - .faraddr 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 - .faraddr 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 - .faraddr 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 - .faraddr 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 - .faraddr 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 - .faraddr 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 - .faraddr 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 - .faraddr 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 - .faraddr 40943,40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958 - .faraddr 40959,40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974 - .faraddr 40975,40976,40977,40978,40979,40980,40981,40982,40983,40984,40985,40986,40987,40988,40989,40990 - .faraddr 45039,45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054 - .faraddr 45055,45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070 - .faraddr 45071,45072,45073,45074,45075,45076,45077,45078,45079,45080,45081,45082,45083,45084,45085,45086 - .faraddr 65519,65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534 - .faraddr 65535,65536,65537,65538,65539,65540,65541,65542,65543,65544,65545,65546,65547,65548,65549,65550 - .faraddr 65551,65552,65553,65554,65555,65556,65557,65558,65559,65560,65561,65562,65563,65564,65565,65566 - .faraddr 1114095,1114096,1114097,1114098,1114099,1114100,1114101,1114102,1114103,1114104,1114105,1114106,1114107,1114108,1114109,1114110 - .faraddr 1114111,1114112,1114113,1114114,1114115,1114116,1114117,1114118,1114119,1114120,1114121,1114122,1114123,1114124,1114125,1114126 - .faraddr 1114127,1114128,1114129,1114130,1114131,1114132,1114133,1114134,1114135,1114136,1114137,1114138,1114139,1114140,1114141,1114142 - .faraddr 2162671,2162672,2162673,2162674,2162675,2162676,2162677,2162678,2162679,2162680,2162681,2162682,2162683,2162684,2162685,2162686 - .faraddr 2162687,2162688,2162689,2162690,2162691,2162692,2162693,2162694,2162695,2162696,2162697,2162698,2162699,2162700,2162701,2162702 - .faraddr 2162703,2162704,2162705,2162706,2162707,2162708,2162709,2162710,2162711,2162712,2162713,2162714,2162715,2162716,2162717,2162718 - .faraddr 8388591,8388592,8388593,8388594,8388595,8388596,8388597,8388598,8388599,8388600,8388601,8388602,8388603,8388604,8388605,8388606 - .faraddr 8388607,8388608,8388609,8388610,8388611,8388612,8388613,8388614,8388615,8388616,8388617,8388618,8388619,8388620,8388621,8388622 - .faraddr 8388623,8388624,8388625,8388626,8388627,8388628,8388629,8388630,8388631,8388632,8388633,8388634,8388635,8388636,8388637,8388638 - .faraddr 10485743,10485744,10485745,10485746,10485747,10485748,10485749,10485750,10485751,10485752,10485753,10485754,10485755,10485756,10485757,10485758 - .faraddr 10485759,10485760,10485761,10485762,10485763,10485764,10485765,10485766,10485767,10485768,10485769,10485770,10485771,10485772,10485773,10485774 - .faraddr 10485775,10485776,10485777,10485778,10485779,10485780,10485781,10485782,10485783,10485784,10485785,10485786,10485787,10485788,10485789,10485790 - .faraddr 16777199,16777200,16777201,16777202,16777203,16777204,16777205,16777206,16777207,16777208,16777209,16777210,16777211,16777212,16777213,16777214 - .faraddr 16777215 + ; multiple values on one line, decimal + .faraddr 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .faraddr 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .faraddr 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .faraddr 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .faraddr 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + .faraddr 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 + .faraddr 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 + .faraddr 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 + .faraddr 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 + .faraddr 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 + .faraddr 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 + .faraddr 40943,40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958 + .faraddr 40959,40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974 + .faraddr 40975,40976,40977,40978,40979,40980,40981,40982,40983,40984,40985,40986,40987,40988,40989,40990 + .faraddr 45039,45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054 + .faraddr 45055,45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070 + .faraddr 45071,45072,45073,45074,45075,45076,45077,45078,45079,45080,45081,45082,45083,45084,45085,45086 + .faraddr 65519,65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534 + .faraddr 65535,65536,65537,65538,65539,65540,65541,65542,65543,65544,65545,65546,65547,65548,65549,65550 + .faraddr 65551,65552,65553,65554,65555,65556,65557,65558,65559,65560,65561,65562,65563,65564,65565,65566 + .faraddr 1114095,1114096,1114097,1114098,1114099,1114100,1114101,1114102,1114103,1114104,1114105,1114106,1114107,1114108,1114109,1114110 + .faraddr 1114111,1114112,1114113,1114114,1114115,1114116,1114117,1114118,1114119,1114120,1114121,1114122,1114123,1114124,1114125,1114126 + .faraddr 1114127,1114128,1114129,1114130,1114131,1114132,1114133,1114134,1114135,1114136,1114137,1114138,1114139,1114140,1114141,1114142 + .faraddr 2162671,2162672,2162673,2162674,2162675,2162676,2162677,2162678,2162679,2162680,2162681,2162682,2162683,2162684,2162685,2162686 + .faraddr 2162687,2162688,2162689,2162690,2162691,2162692,2162693,2162694,2162695,2162696,2162697,2162698,2162699,2162700,2162701,2162702 + .faraddr 2162703,2162704,2162705,2162706,2162707,2162708,2162709,2162710,2162711,2162712,2162713,2162714,2162715,2162716,2162717,2162718 + .faraddr 8388591,8388592,8388593,8388594,8388595,8388596,8388597,8388598,8388599,8388600,8388601,8388602,8388603,8388604,8388605,8388606 + .faraddr 8388607,8388608,8388609,8388610,8388611,8388612,8388613,8388614,8388615,8388616,8388617,8388618,8388619,8388620,8388621,8388622 + .faraddr 8388623,8388624,8388625,8388626,8388627,8388628,8388629,8388630,8388631,8388632,8388633,8388634,8388635,8388636,8388637,8388638 + .faraddr 10485743,10485744,10485745,10485746,10485747,10485748,10485749,10485750,10485751,10485752,10485753,10485754,10485755,10485756,10485757,10485758 + .faraddr 10485759,10485760,10485761,10485762,10485763,10485764,10485765,10485766,10485767,10485768,10485769,10485770,10485771,10485772,10485773,10485774 + .faraddr 10485775,10485776,10485777,10485778,10485779,10485780,10485781,10485782,10485783,10485784,10485785,10485786,10485787,10485788,10485789,10485790 + .faraddr 16777199,16777200,16777201,16777202,16777203,16777204,16777205,16777206,16777207,16777208,16777209,16777210,16777211,16777212,16777213,16777214 + .faraddr 16777215 - ; multiple values on one line, hex - .faraddr $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f - .faraddr $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f - .faraddr $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f - .faraddr $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f - .faraddr $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff - .faraddr $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f - .faraddr $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef - .faraddr $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff - .faraddr $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f - .faraddr $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff - .faraddr $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f - .faraddr $9fef,$9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe - .faraddr $9fff,$a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e - .faraddr $a00f,$a010,$a011,$a012,$a013,$a014,$a015,$a016,$a017,$a018,$a019,$a01a,$a01b,$a01c,$a01d,$a01e - .faraddr $afef,$aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe - .faraddr $afff,$b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e - .faraddr $b00f,$b010,$b011,$b012,$b013,$b014,$b015,$b016,$b017,$b018,$b019,$b01a,$b01b,$b01c,$b01d,$b01e - .faraddr $ffef,$fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe - .faraddr $ffff,$10000,$10001,$10002,$10003,$10004,$10005,$10006,$10007,$10008,$10009,$1000a,$1000b,$1000c,$1000d,$1000e - .faraddr $1000f,$10010,$10011,$10012,$10013,$10014,$10015,$10016,$10017,$10018,$10019,$1001a,$1001b,$1001c,$1001d,$1001e - .faraddr $10ffef,$10fff0,$10fff1,$10fff2,$10fff3,$10fff4,$10fff5,$10fff6,$10fff7,$10fff8,$10fff9,$10fffa,$10fffb,$10fffc,$10fffd,$10fffe - .faraddr $10ffff,$110000,$110001,$110002,$110003,$110004,$110005,$110006,$110007,$110008,$110009,$11000a,$11000b,$11000c,$11000d,$11000e - .faraddr $11000f,$110010,$110011,$110012,$110013,$110014,$110015,$110016,$110017,$110018,$110019,$11001a,$11001b,$11001c,$11001d,$11001e - .faraddr $20ffef,$20fff0,$20fff1,$20fff2,$20fff3,$20fff4,$20fff5,$20fff6,$20fff7,$20fff8,$20fff9,$20fffa,$20fffb,$20fffc,$20fffd,$20fffe - .faraddr $20ffff,$210000,$210001,$210002,$210003,$210004,$210005,$210006,$210007,$210008,$210009,$21000a,$21000b,$21000c,$21000d,$21000e - .faraddr $21000f,$210010,$210011,$210012,$210013,$210014,$210015,$210016,$210017,$210018,$210019,$21001a,$21001b,$21001c,$21001d,$21001e - .faraddr $7fffef,$7ffff0,$7ffff1,$7ffff2,$7ffff3,$7ffff4,$7ffff5,$7ffff6,$7ffff7,$7ffff8,$7ffff9,$7ffffa,$7ffffb,$7ffffc,$7ffffd,$7ffffe - .faraddr $7fffff,$800000,$800001,$800002,$800003,$800004,$800005,$800006,$800007,$800008,$800009,$80000a,$80000b,$80000c,$80000d,$80000e - .faraddr $80000f,$800010,$800011,$800012,$800013,$800014,$800015,$800016,$800017,$800018,$800019,$80001a,$80001b,$80001c,$80001d,$80001e - .faraddr $9fffef,$9ffff0,$9ffff1,$9ffff2,$9ffff3,$9ffff4,$9ffff5,$9ffff6,$9ffff7,$9ffff8,$9ffff9,$9ffffa,$9ffffb,$9ffffc,$9ffffd,$9ffffe - .faraddr $9fffff,$a00000,$a00001,$a00002,$a00003,$a00004,$a00005,$a00006,$a00007,$a00008,$a00009,$a0000a,$a0000b,$a0000c,$a0000d,$a0000e - .faraddr $a0000f,$a00010,$a00011,$a00012,$a00013,$a00014,$a00015,$a00016,$a00017,$a00018,$a00019,$a0001a,$a0001b,$a0001c,$a0001d,$a0001e - .faraddr $ffffef,$fffff0,$fffff1,$fffff2,$fffff3,$fffff4,$fffff5,$fffff6,$fffff7,$fffff8,$fffff9,$fffffa,$fffffb,$fffffc,$fffffd,$fffffe - .faraddr $ffffff + ; multiple values on one line, hex + .faraddr $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .faraddr $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .faraddr $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .faraddr $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .faraddr $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + .faraddr $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f + .faraddr $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef + .faraddr $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff + .faraddr $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f + .faraddr $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff + .faraddr $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f + .faraddr $9fef,$9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe + .faraddr $9fff,$a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e + .faraddr $a00f,$a010,$a011,$a012,$a013,$a014,$a015,$a016,$a017,$a018,$a019,$a01a,$a01b,$a01c,$a01d,$a01e + .faraddr $afef,$aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe + .faraddr $afff,$b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e + .faraddr $b00f,$b010,$b011,$b012,$b013,$b014,$b015,$b016,$b017,$b018,$b019,$b01a,$b01b,$b01c,$b01d,$b01e + .faraddr $ffef,$fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe + .faraddr $ffff,$10000,$10001,$10002,$10003,$10004,$10005,$10006,$10007,$10008,$10009,$1000a,$1000b,$1000c,$1000d,$1000e + .faraddr $1000f,$10010,$10011,$10012,$10013,$10014,$10015,$10016,$10017,$10018,$10019,$1001a,$1001b,$1001c,$1001d,$1001e + .faraddr $10ffef,$10fff0,$10fff1,$10fff2,$10fff3,$10fff4,$10fff5,$10fff6,$10fff7,$10fff8,$10fff9,$10fffa,$10fffb,$10fffc,$10fffd,$10fffe + .faraddr $10ffff,$110000,$110001,$110002,$110003,$110004,$110005,$110006,$110007,$110008,$110009,$11000a,$11000b,$11000c,$11000d,$11000e + .faraddr $11000f,$110010,$110011,$110012,$110013,$110014,$110015,$110016,$110017,$110018,$110019,$11001a,$11001b,$11001c,$11001d,$11001e + .faraddr $20ffef,$20fff0,$20fff1,$20fff2,$20fff3,$20fff4,$20fff5,$20fff6,$20fff7,$20fff8,$20fff9,$20fffa,$20fffb,$20fffc,$20fffd,$20fffe + .faraddr $20ffff,$210000,$210001,$210002,$210003,$210004,$210005,$210006,$210007,$210008,$210009,$21000a,$21000b,$21000c,$21000d,$21000e + .faraddr $21000f,$210010,$210011,$210012,$210013,$210014,$210015,$210016,$210017,$210018,$210019,$21001a,$21001b,$21001c,$21001d,$21001e + .faraddr $7fffef,$7ffff0,$7ffff1,$7ffff2,$7ffff3,$7ffff4,$7ffff5,$7ffff6,$7ffff7,$7ffff8,$7ffff9,$7ffffa,$7ffffb,$7ffffc,$7ffffd,$7ffffe + .faraddr $7fffff,$800000,$800001,$800002,$800003,$800004,$800005,$800006,$800007,$800008,$800009,$80000a,$80000b,$80000c,$80000d,$80000e + .faraddr $80000f,$800010,$800011,$800012,$800013,$800014,$800015,$800016,$800017,$800018,$800019,$80001a,$80001b,$80001c,$80001d,$80001e + .faraddr $9fffef,$9ffff0,$9ffff1,$9ffff2,$9ffff3,$9ffff4,$9ffff5,$9ffff6,$9ffff7,$9ffff8,$9ffff9,$9ffffa,$9ffffb,$9ffffc,$9ffffd,$9ffffe + .faraddr $9fffff,$a00000,$a00001,$a00002,$a00003,$a00004,$a00005,$a00006,$a00007,$a00008,$a00009,$a0000a,$a0000b,$a0000c,$a0000d,$a0000e + .faraddr $a0000f,$a00010,$a00011,$a00012,$a00013,$a00014,$a00015,$a00016,$a00017,$a00018,$a00019,$a0001a,$a0001b,$a0001c,$a0001d,$a0001e + .faraddr $ffffef,$fffff0,$fffff1,$fffff2,$fffff3,$fffff4,$fffff5,$fffff6,$fffff7,$fffff8,$fffff9,$fffffa,$fffffb,$fffffc,$fffffd,$fffffe + .faraddr $ffffff - ; multiple values on one line, alternative hex - .faraddr 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh - .faraddr 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh - .faraddr 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh - .faraddr 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh - .faraddr 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh - .faraddr 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh - .faraddr 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh - .faraddr 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh - .faraddr 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh - .faraddr 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh - .faraddr 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh - .faraddr 9fefh,9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh - .faraddr 9fffh,0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh - .faraddr 0a00fh,0a010h,0a011h,0a012h,0a013h,0a014h,0a015h,0a016h,0a017h,0a018h,0a019h,0a01ah,0a01bh,0a01ch,0a01dh,0a01eh - .faraddr 0afefh,0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh - .faraddr 0afffh,0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh - .faraddr 0b00fh,0b010h,0b011h,0b012h,0b013h,0b014h,0b015h,0b016h,0b017h,0b018h,0b019h,0b01ah,0b01bh,0b01ch,0b01dh,0b01eh - .faraddr 0ffefh,0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh - .faraddr 0ffffh,10000h,10001h,10002h,10003h,10004h,10005h,10006h,10007h,10008h,10009h,1000ah,1000bh,1000ch,1000dh,1000eh - .faraddr 1000fh,10010h,10011h,10012h,10013h,10014h,10015h,10016h,10017h,10018h,10019h,1001ah,1001bh,1001ch,1001dh,1001eh - .faraddr 10ffefh,10fff0h,10fff1h,10fff2h,10fff3h,10fff4h,10fff5h,10fff6h,10fff7h,10fff8h,10fff9h,10fffah,10fffbh,10fffch,10fffdh,10fffeh - .faraddr 10ffffh,110000h,110001h,110002h,110003h,110004h,110005h,110006h,110007h,110008h,110009h,11000ah,11000bh,11000ch,11000dh,11000eh - .faraddr 11000fh,110010h,110011h,110012h,110013h,110014h,110015h,110016h,110017h,110018h,110019h,11001ah,11001bh,11001ch,11001dh,11001eh - .faraddr 20ffefh,20fff0h,20fff1h,20fff2h,20fff3h,20fff4h,20fff5h,20fff6h,20fff7h,20fff8h,20fff9h,20fffah,20fffbh,20fffch,20fffdh,20fffeh - .faraddr 20ffffh,210000h,210001h,210002h,210003h,210004h,210005h,210006h,210007h,210008h,210009h,21000ah,21000bh,21000ch,21000dh,21000eh - .faraddr 21000fh,210010h,210011h,210012h,210013h,210014h,210015h,210016h,210017h,210018h,210019h,21001ah,21001bh,21001ch,21001dh,21001eh - .faraddr 7fffefh,7ffff0h,7ffff1h,7ffff2h,7ffff3h,7ffff4h,7ffff5h,7ffff6h,7ffff7h,7ffff8h,7ffff9h,7ffffah,7ffffbh,7ffffch,7ffffdh,7ffffeh - .faraddr 7fffffh,800000h,800001h,800002h,800003h,800004h,800005h,800006h,800007h,800008h,800009h,80000ah,80000bh,80000ch,80000dh,80000eh - .faraddr 80000fh,800010h,800011h,800012h,800013h,800014h,800015h,800016h,800017h,800018h,800019h,80001ah,80001bh,80001ch,80001dh,80001eh - .faraddr 9fffefh,9ffff0h,9ffff1h,9ffff2h,9ffff3h,9ffff4h,9ffff5h,9ffff6h,9ffff7h,9ffff8h,9ffff9h,9ffffah,9ffffbh,9ffffch,9ffffdh,9ffffeh - .faraddr 9fffffh,0a00000h,0a00001h,0a00002h,0a00003h,0a00004h,0a00005h,0a00006h,0a00007h,0a00008h,0a00009h,0a0000ah,0a0000bh,0a0000ch,0a0000dh,0a0000eh - .faraddr 0a0000fh,0a00010h,0a00011h,0a00012h,0a00013h,0a00014h,0a00015h,0a00016h,0a00017h,0a00018h,0a00019h,0a0001ah,0a0001bh,0a0001ch,0a0001dh,0a0001eh - .faraddr 0ffffefh,0fffff0h,0fffff1h,0fffff2h,0fffff3h,0fffff4h,0fffff5h,0fffff6h,0fffff7h,0fffff8h,0fffff9h,0fffffah,0fffffbh,0fffffch,0fffffdh,0fffffeh - .faraddr 0ffffffh + ; multiple values on one line, alternative hex + .faraddr 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .faraddr 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .faraddr 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .faraddr 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .faraddr 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + .faraddr 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh + .faraddr 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh + .faraddr 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh + .faraddr 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh + .faraddr 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh + .faraddr 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh + .faraddr 9fefh,9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh + .faraddr 9fffh,0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh + .faraddr 0a00fh,0a010h,0a011h,0a012h,0a013h,0a014h,0a015h,0a016h,0a017h,0a018h,0a019h,0a01ah,0a01bh,0a01ch,0a01dh,0a01eh + .faraddr 0afefh,0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh + .faraddr 0afffh,0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh + .faraddr 0b00fh,0b010h,0b011h,0b012h,0b013h,0b014h,0b015h,0b016h,0b017h,0b018h,0b019h,0b01ah,0b01bh,0b01ch,0b01dh,0b01eh + .faraddr 0ffefh,0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh + .faraddr 0ffffh,10000h,10001h,10002h,10003h,10004h,10005h,10006h,10007h,10008h,10009h,1000ah,1000bh,1000ch,1000dh,1000eh + .faraddr 1000fh,10010h,10011h,10012h,10013h,10014h,10015h,10016h,10017h,10018h,10019h,1001ah,1001bh,1001ch,1001dh,1001eh + .faraddr 10ffefh,10fff0h,10fff1h,10fff2h,10fff3h,10fff4h,10fff5h,10fff6h,10fff7h,10fff8h,10fff9h,10fffah,10fffbh,10fffch,10fffdh,10fffeh + .faraddr 10ffffh,110000h,110001h,110002h,110003h,110004h,110005h,110006h,110007h,110008h,110009h,11000ah,11000bh,11000ch,11000dh,11000eh + .faraddr 11000fh,110010h,110011h,110012h,110013h,110014h,110015h,110016h,110017h,110018h,110019h,11001ah,11001bh,11001ch,11001dh,11001eh + .faraddr 20ffefh,20fff0h,20fff1h,20fff2h,20fff3h,20fff4h,20fff5h,20fff6h,20fff7h,20fff8h,20fff9h,20fffah,20fffbh,20fffch,20fffdh,20fffeh + .faraddr 20ffffh,210000h,210001h,210002h,210003h,210004h,210005h,210006h,210007h,210008h,210009h,21000ah,21000bh,21000ch,21000dh,21000eh + .faraddr 21000fh,210010h,210011h,210012h,210013h,210014h,210015h,210016h,210017h,210018h,210019h,21001ah,21001bh,21001ch,21001dh,21001eh + .faraddr 7fffefh,7ffff0h,7ffff1h,7ffff2h,7ffff3h,7ffff4h,7ffff5h,7ffff6h,7ffff7h,7ffff8h,7ffff9h,7ffffah,7ffffbh,7ffffch,7ffffdh,7ffffeh + .faraddr 7fffffh,800000h,800001h,800002h,800003h,800004h,800005h,800006h,800007h,800008h,800009h,80000ah,80000bh,80000ch,80000dh,80000eh + .faraddr 80000fh,800010h,800011h,800012h,800013h,800014h,800015h,800016h,800017h,800018h,800019h,80001ah,80001bh,80001ch,80001dh,80001eh + .faraddr 9fffefh,9ffff0h,9ffff1h,9ffff2h,9ffff3h,9ffff4h,9ffff5h,9ffff6h,9ffff7h,9ffff8h,9ffff9h,9ffffah,9ffffbh,9ffffch,9ffffdh,9ffffeh + .faraddr 9fffffh,0a00000h,0a00001h,0a00002h,0a00003h,0a00004h,0a00005h,0a00006h,0a00007h,0a00008h,0a00009h,0a0000ah,0a0000bh,0a0000ch,0a0000dh,0a0000eh + .faraddr 0a0000fh,0a00010h,0a00011h,0a00012h,0a00013h,0a00014h,0a00015h,0a00016h,0a00017h,0a00018h,0a00019h,0a0001ah,0a0001bh,0a0001ch,0a0001dh,0a0001eh + .faraddr 0ffffefh,0fffff0h,0fffff1h,0fffff2h,0fffff3h,0fffff4h,0fffff5h,0fffff6h,0fffff7h,0fffff8h,0fffff9h,0fffffah,0fffffbh,0fffffch,0fffffdh,0fffffeh + .faraddr 0ffffffh - ; mix some variants - .faraddr 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh + ; mix some variants + .faraddr 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/106-hibytes.list-ref b/test/asm/listing/106-hibytes.list-ref index 6e5ff7674..d4c4272af 100644 --- a/test/asm/listing/106-hibytes.list-ref +++ b/test/asm/listing/106-hibytes.list-ref @@ -4,6223 +4,6223 @@ Current file: 106-hibytes.s 000000r 1 ; 2022-06-15 Spiro Trikaliotis 000000r 1 000000r 1 -000000r 1 ; upper case pseudo-op -000000r 1 00 .HIBYTES 0 -000001r 1 00 .HIBYTES 1 -000002r 1 00 .HIBYTES 2 -000003r 1 00 .HIBYTES 3 -000004r 1 00 .HIBYTES 4 -000005r 1 00 .HIBYTES 5 -000006r 1 00 .HIBYTES 6 -000007r 1 00 .HIBYTES 7 -000008r 1 00 .HIBYTES 8 -000009r 1 00 .HIBYTES 9 -00000Ar 1 00 .HIBYTES 10 -00000Br 1 00 .HIBYTES 11 -00000Cr 1 00 .HIBYTES 12 -00000Dr 1 00 .HIBYTES 13 -00000Er 1 00 .HIBYTES 14 -00000Fr 1 00 .HIBYTES 15 -000010r 1 00 .HIBYTES 16 -000011r 1 00 .HIBYTES 17 -000012r 1 00 .HIBYTES 18 -000013r 1 00 .HIBYTES 19 -000014r 1 00 .HIBYTES 112 -000015r 1 00 .HIBYTES 113 -000016r 1 00 .HIBYTES 114 -000017r 1 00 .HIBYTES 115 -000018r 1 00 .HIBYTES 116 -000019r 1 00 .HIBYTES 117 -00001Ar 1 00 .HIBYTES 118 -00001Br 1 00 .HIBYTES 119 -00001Cr 1 00 .HIBYTES 120 -00001Dr 1 00 .HIBYTES 121 -00001Er 1 00 .HIBYTES 122 -00001Fr 1 00 .HIBYTES 123 -000020r 1 00 .HIBYTES 124 -000021r 1 00 .HIBYTES 125 -000022r 1 00 .HIBYTES 126 -000023r 1 00 .HIBYTES 127 -000024r 1 00 .HIBYTES 128 -000025r 1 00 .HIBYTES 129 -000026r 1 00 .HIBYTES 130 -000027r 1 00 .HIBYTES 131 -000028r 1 00 .HIBYTES 132 -000029r 1 00 .HIBYTES 133 -00002Ar 1 00 .HIBYTES 134 -00002Br 1 00 .HIBYTES 240 -00002Cr 1 00 .HIBYTES 241 -00002Dr 1 00 .HIBYTES 242 -00002Er 1 00 .HIBYTES 243 -00002Fr 1 00 .HIBYTES 244 -000030r 1 00 .HIBYTES 245 -000031r 1 00 .HIBYTES 246 -000032r 1 00 .HIBYTES 247 -000033r 1 00 .HIBYTES 248 -000034r 1 00 .HIBYTES 249 -000035r 1 00 .HIBYTES 250 -000036r 1 00 .HIBYTES 251 -000037r 1 00 .HIBYTES 252 -000038r 1 00 .HIBYTES 253 -000039r 1 00 .HIBYTES 254 -00003Ar 1 00 .HIBYTES 255 -00003Br 1 01 .HIBYTES 256 -00003Cr 1 01 .HIBYTES 257 -00003Dr 1 01 .HIBYTES 258 -00003Er 1 01 .HIBYTES 259 -00003Fr 1 0F .HIBYTES 4050 -000040r 1 0F .HIBYTES 4051 -000041r 1 0F .HIBYTES 4052 -000042r 1 0F .HIBYTES 4053 -000043r 1 0F .HIBYTES 4054 -000044r 1 0F .HIBYTES 4055 -000045r 1 0F .HIBYTES 4056 -000046r 1 0F .HIBYTES 4057 -000047r 1 0F .HIBYTES 4058 -000048r 1 0F .HIBYTES 4059 -000049r 1 0F .HIBYTES 4060 -00004Ar 1 0F .HIBYTES 4061 -00004Br 1 0F .HIBYTES 4062 -00004Cr 1 0F .HIBYTES 4063 -00004Dr 1 0F .HIBYTES 4064 -00004Er 1 0F .HIBYTES 4065 -00004Fr 1 0F .HIBYTES 4066 -000050r 1 0F .HIBYTES 4067 -000051r 1 0F .HIBYTES 4068 -000052r 1 0F .HIBYTES 4069 -000053r 1 0F .HIBYTES 4070 -000054r 1 0F .HIBYTES 4071 -000055r 1 0F .HIBYTES 4072 -000056r 1 0F .HIBYTES 4073 -000057r 1 0F .HIBYTES 4074 -000058r 1 0F .HIBYTES 4075 -000059r 1 0F .HIBYTES 4076 -00005Ar 1 0F .HIBYTES 4077 -00005Br 1 0F .HIBYTES 4078 -00005Cr 1 0F .HIBYTES 4079 -00005Dr 1 0F .HIBYTES 4080 -00005Er 1 0F .HIBYTES 4081 -00005Fr 1 0F .HIBYTES 4082 -000060r 1 0F .HIBYTES 4083 -000061r 1 0F .HIBYTES 4084 -000062r 1 0F .HIBYTES 4085 -000063r 1 0F .HIBYTES 4086 -000064r 1 0F .HIBYTES 4087 -000065r 1 0F .HIBYTES 4088 -000066r 1 0F .HIBYTES 4089 -000067r 1 0F .HIBYTES 4090 -000068r 1 0F .HIBYTES 4091 -000069r 1 0F .HIBYTES 4092 -00006Ar 1 0F .HIBYTES 4093 -00006Br 1 0F .HIBYTES 4094 -00006Cr 1 0F .HIBYTES 4095 -00006Dr 1 10 .HIBYTES 4096 -00006Er 1 10 .HIBYTES 4097 -00006Fr 1 10 .HIBYTES 4098 -000070r 1 10 .HIBYTES 4099 -000071r 1 10 .HIBYTES 4100 -000072r 1 10 .HIBYTES 4101 -000073r 1 10 .HIBYTES 4102 -000074r 1 10 .HIBYTES 4103 -000075r 1 10 .HIBYTES 4104 -000076r 1 7F .HIBYTES 32752 -000077r 1 7F .HIBYTES 32753 -000078r 1 7F .HIBYTES 32754 -000079r 1 7F .HIBYTES 32755 -00007Ar 1 7F .HIBYTES 32756 -00007Br 1 7F .HIBYTES 32757 -00007Cr 1 7F .HIBYTES 32758 -00007Dr 1 7F .HIBYTES 32759 -00007Er 1 7F .HIBYTES 32760 -00007Fr 1 7F .HIBYTES 32761 -000080r 1 7F .HIBYTES 32762 -000081r 1 7F .HIBYTES 32763 -000082r 1 7F .HIBYTES 32764 -000083r 1 7F .HIBYTES 32765 -000084r 1 7F .HIBYTES 32766 -000085r 1 7F .HIBYTES 32767 -000086r 1 80 .HIBYTES 32768 -000087r 1 80 .HIBYTES 32769 -000088r 1 80 .HIBYTES 32770 -000089r 1 80 .HIBYTES 32771 -00008Ar 1 80 .HIBYTES 32772 -00008Br 1 80 .HIBYTES 32773 -00008Cr 1 80 .HIBYTES 32774 -00008Dr 1 80 .HIBYTES 32775 -00008Er 1 80 .HIBYTES 32776 -00008Fr 1 80 .HIBYTES 32777 -000090r 1 80 .HIBYTES 32778 -000091r 1 80 .HIBYTES 32779 -000092r 1 9F .HIBYTES 40929 -000093r 1 9F .HIBYTES 40930 -000094r 1 9F .HIBYTES 40931 -000095r 1 9F .HIBYTES 40932 -000096r 1 9F .HIBYTES 40933 -000097r 1 9F .HIBYTES 40934 -000098r 1 9F .HIBYTES 40935 -000099r 1 9F .HIBYTES 40936 -00009Ar 1 9F .HIBYTES 40937 -00009Br 1 9F .HIBYTES 40938 -00009Cr 1 9F .HIBYTES 40939 -00009Dr 1 9F .HIBYTES 40940 -00009Er 1 9F .HIBYTES 40941 -00009Fr 1 9F .HIBYTES 40942 -0000A0r 1 9F .HIBYTES 40943 -0000A1r 1 9F .HIBYTES 40944 -0000A2r 1 9F .HIBYTES 40945 -0000A3r 1 9F .HIBYTES 40946 -0000A4r 1 9F .HIBYTES 40947 -0000A5r 1 9F .HIBYTES 40948 -0000A6r 1 9F .HIBYTES 40949 -0000A7r 1 9F .HIBYTES 40950 -0000A8r 1 9F .HIBYTES 40951 -0000A9r 1 9F .HIBYTES 40952 -0000AAr 1 9F .HIBYTES 40953 -0000ABr 1 9F .HIBYTES 40954 -0000ACr 1 9F .HIBYTES 40955 -0000ADr 1 9F .HIBYTES 40956 -0000AEr 1 9F .HIBYTES 40957 -0000AFr 1 9F .HIBYTES 40958 -0000B0r 1 9F .HIBYTES 40959 -0000B1r 1 A0 .HIBYTES 40960 -0000B2r 1 A0 .HIBYTES 40961 -0000B3r 1 A0 .HIBYTES 40962 -0000B4r 1 A0 .HIBYTES 40963 -0000B5r 1 A0 .HIBYTES 40964 -0000B6r 1 A0 .HIBYTES 40965 -0000B7r 1 A0 .HIBYTES 40966 -0000B8r 1 A0 .HIBYTES 40967 -0000B9r 1 A0 .HIBYTES 40968 -0000BAr 1 A0 .HIBYTES 40969 -0000BBr 1 A0 .HIBYTES 40970 -0000BCr 1 A0 .HIBYTES 40971 -0000BDr 1 A0 .HIBYTES 40972 -0000BEr 1 A0 .HIBYTES 40973 -0000BFr 1 A0 .HIBYTES 40974 -0000C0r 1 A0 .HIBYTES 40975 -0000C1r 1 AF .HIBYTES 45025 -0000C2r 1 AF .HIBYTES 45026 -0000C3r 1 AF .HIBYTES 45027 -0000C4r 1 AF .HIBYTES 45028 -0000C5r 1 AF .HIBYTES 45029 -0000C6r 1 AF .HIBYTES 45030 -0000C7r 1 AF .HIBYTES 45031 -0000C8r 1 AF .HIBYTES 45032 -0000C9r 1 AF .HIBYTES 45033 -0000CAr 1 AF .HIBYTES 45034 -0000CBr 1 AF .HIBYTES 45035 -0000CCr 1 AF .HIBYTES 45036 -0000CDr 1 AF .HIBYTES 45037 -0000CEr 1 AF .HIBYTES 45038 -0000CFr 1 AF .HIBYTES 45039 -0000D0r 1 AF .HIBYTES 45040 -0000D1r 1 AF .HIBYTES 45041 -0000D2r 1 AF .HIBYTES 45042 -0000D3r 1 AF .HIBYTES 45043 -0000D4r 1 AF .HIBYTES 45044 -0000D5r 1 AF .HIBYTES 45045 -0000D6r 1 AF .HIBYTES 45046 -0000D7r 1 AF .HIBYTES 45047 -0000D8r 1 AF .HIBYTES 45048 -0000D9r 1 AF .HIBYTES 45049 -0000DAr 1 AF .HIBYTES 45050 -0000DBr 1 AF .HIBYTES 45051 -0000DCr 1 AF .HIBYTES 45052 -0000DDr 1 AF .HIBYTES 45053 -0000DEr 1 AF .HIBYTES 45054 -0000DFr 1 AF .HIBYTES 45055 -0000E0r 1 B0 .HIBYTES 45056 -0000E1r 1 B0 .HIBYTES 45057 -0000E2r 1 B0 .HIBYTES 45058 -0000E3r 1 B0 .HIBYTES 45059 -0000E4r 1 B0 .HIBYTES 45060 -0000E5r 1 B0 .HIBYTES 45061 -0000E6r 1 B0 .HIBYTES 45062 -0000E7r 1 B0 .HIBYTES 45063 -0000E8r 1 B0 .HIBYTES 45064 -0000E9r 1 B0 .HIBYTES 45065 -0000EAr 1 B0 .HIBYTES 45066 -0000EBr 1 B0 .HIBYTES 45067 -0000ECr 1 B0 .HIBYTES 45068 -0000EDr 1 B0 .HIBYTES 45069 -0000EEr 1 B0 .HIBYTES 45070 -0000EFr 1 B0 .HIBYTES 45071 -0000F0r 1 BF .HIBYTES 49121 -0000F1r 1 BF .HIBYTES 49122 -0000F2r 1 BF .HIBYTES 49123 -0000F3r 1 BF .HIBYTES 49124 -0000F4r 1 BF .HIBYTES 49125 -0000F5r 1 BF .HIBYTES 49126 -0000F6r 1 BF .HIBYTES 49127 -0000F7r 1 BF .HIBYTES 49128 -0000F8r 1 BF .HIBYTES 49129 -0000F9r 1 BF .HIBYTES 49130 -0000FAr 1 BF .HIBYTES 49131 -0000FBr 1 BF .HIBYTES 49132 -0000FCr 1 BF .HIBYTES 49133 -0000FDr 1 BF .HIBYTES 49134 -0000FEr 1 BF .HIBYTES 49135 -0000FFr 1 BF .HIBYTES 49136 -000100r 1 BF .HIBYTES 49137 -000101r 1 BF .HIBYTES 49138 -000102r 1 BF .HIBYTES 49139 -000103r 1 BF .HIBYTES 49140 -000104r 1 BF .HIBYTES 49141 -000105r 1 BF .HIBYTES 49142 -000106r 1 BF .HIBYTES 49143 -000107r 1 BF .HIBYTES 49144 -000108r 1 BF .HIBYTES 49145 -000109r 1 BF .HIBYTES 49146 -00010Ar 1 BF .HIBYTES 49147 -00010Br 1 BF .HIBYTES 49148 -00010Cr 1 BF .HIBYTES 49149 -00010Dr 1 BF .HIBYTES 49150 -00010Er 1 BF .HIBYTES 49151 -00010Fr 1 C0 .HIBYTES 49152 -000110r 1 C0 .HIBYTES 49153 -000111r 1 C0 .HIBYTES 49154 -000112r 1 C0 .HIBYTES 49155 -000113r 1 C0 .HIBYTES 49156 -000114r 1 C0 .HIBYTES 49157 -000115r 1 C0 .HIBYTES 49158 -000116r 1 C0 .HIBYTES 49159 -000117r 1 C0 .HIBYTES 49160 -000118r 1 C0 .HIBYTES 49161 -000119r 1 C0 .HIBYTES 49162 -00011Ar 1 C0 .HIBYTES 49163 -00011Br 1 C0 .HIBYTES 49164 -00011Cr 1 C0 .HIBYTES 49165 -00011Dr 1 C0 .HIBYTES 49166 -00011Er 1 C0 .HIBYTES 49167 -00011Fr 1 CF .HIBYTES 53217 -000120r 1 CF .HIBYTES 53218 -000121r 1 CF .HIBYTES 53219 -000122r 1 CF .HIBYTES 53220 -000123r 1 CF .HIBYTES 53221 -000124r 1 CF .HIBYTES 53222 -000125r 1 CF .HIBYTES 53223 -000126r 1 CF .HIBYTES 53224 -000127r 1 CF .HIBYTES 53225 -000128r 1 CF .HIBYTES 53226 -000129r 1 CF .HIBYTES 53227 -00012Ar 1 CF .HIBYTES 53228 -00012Br 1 CF .HIBYTES 53229 -00012Cr 1 CF .HIBYTES 53230 -00012Dr 1 CF .HIBYTES 53231 -00012Er 1 CF .HIBYTES 53232 -00012Fr 1 CF .HIBYTES 53233 -000130r 1 CF .HIBYTES 53234 -000131r 1 CF .HIBYTES 53235 -000132r 1 CF .HIBYTES 53236 -000133r 1 CF .HIBYTES 53237 -000134r 1 CF .HIBYTES 53238 -000135r 1 CF .HIBYTES 53239 -000136r 1 CF .HIBYTES 53240 -000137r 1 CF .HIBYTES 53241 -000138r 1 CF .HIBYTES 53242 -000139r 1 CF .HIBYTES 53243 -00013Ar 1 CF .HIBYTES 53244 -00013Br 1 CF .HIBYTES 53245 -00013Cr 1 CF .HIBYTES 53246 -00013Dr 1 CF .HIBYTES 53247 -00013Er 1 D0 .HIBYTES 53248 -00013Fr 1 D0 .HIBYTES 53249 -000140r 1 D0 .HIBYTES 53250 -000141r 1 D0 .HIBYTES 53251 -000142r 1 D0 .HIBYTES 53252 -000143r 1 D0 .HIBYTES 53253 -000144r 1 D0 .HIBYTES 53254 -000145r 1 D0 .HIBYTES 53255 -000146r 1 D0 .HIBYTES 53256 -000147r 1 D0 .HIBYTES 53257 -000148r 1 D0 .HIBYTES 53258 -000149r 1 D0 .HIBYTES 53259 -00014Ar 1 D0 .HIBYTES 53260 -00014Br 1 D0 .HIBYTES 53261 -00014Cr 1 D0 .HIBYTES 53262 -00014Dr 1 D0 .HIBYTES 53263 -00014Er 1 DF .HIBYTES 57313 -00014Fr 1 DF .HIBYTES 57314 -000150r 1 DF .HIBYTES 57315 -000151r 1 DF .HIBYTES 57316 -000152r 1 DF .HIBYTES 57317 -000153r 1 DF .HIBYTES 57318 -000154r 1 DF .HIBYTES 57319 -000155r 1 DF .HIBYTES 57320 -000156r 1 DF .HIBYTES 57321 -000157r 1 DF .HIBYTES 57322 -000158r 1 DF .HIBYTES 57323 -000159r 1 DF .HIBYTES 57324 -00015Ar 1 DF .HIBYTES 57325 -00015Br 1 DF .HIBYTES 57326 -00015Cr 1 DF .HIBYTES 57327 -00015Dr 1 DF .HIBYTES 57328 -00015Er 1 DF .HIBYTES 57329 -00015Fr 1 DF .HIBYTES 57330 -000160r 1 DF .HIBYTES 57331 -000161r 1 DF .HIBYTES 57332 -000162r 1 DF .HIBYTES 57333 -000163r 1 DF .HIBYTES 57334 -000164r 1 DF .HIBYTES 57335 -000165r 1 DF .HIBYTES 57336 -000166r 1 DF .HIBYTES 57337 -000167r 1 DF .HIBYTES 57338 -000168r 1 DF .HIBYTES 57339 -000169r 1 DF .HIBYTES 57340 -00016Ar 1 DF .HIBYTES 57341 -00016Br 1 DF .HIBYTES 57342 -00016Cr 1 DF .HIBYTES 57343 -00016Dr 1 E0 .HIBYTES 57344 -00016Er 1 E0 .HIBYTES 57345 -00016Fr 1 E0 .HIBYTES 57346 -000170r 1 E0 .HIBYTES 57347 -000171r 1 E0 .HIBYTES 57348 -000172r 1 E0 .HIBYTES 57349 -000173r 1 E0 .HIBYTES 57350 -000174r 1 E0 .HIBYTES 57351 -000175r 1 E0 .HIBYTES 57352 -000176r 1 E0 .HIBYTES 57353 -000177r 1 E0 .HIBYTES 57354 -000178r 1 E0 .HIBYTES 57355 -000179r 1 E0 .HIBYTES 57356 -00017Ar 1 E0 .HIBYTES 57357 -00017Br 1 E0 .HIBYTES 57358 -00017Cr 1 E0 .HIBYTES 57359 -00017Dr 1 EF .HIBYTES 61409 -00017Er 1 EF .HIBYTES 61410 -00017Fr 1 EF .HIBYTES 61411 -000180r 1 EF .HIBYTES 61412 -000181r 1 EF .HIBYTES 61413 -000182r 1 EF .HIBYTES 61414 -000183r 1 EF .HIBYTES 61415 -000184r 1 EF .HIBYTES 61416 -000185r 1 EF .HIBYTES 61417 -000186r 1 EF .HIBYTES 61418 -000187r 1 EF .HIBYTES 61419 -000188r 1 EF .HIBYTES 61420 -000189r 1 EF .HIBYTES 61421 -00018Ar 1 EF .HIBYTES 61422 -00018Br 1 EF .HIBYTES 61423 -00018Cr 1 EF .HIBYTES 61424 -00018Dr 1 EF .HIBYTES 61425 -00018Er 1 EF .HIBYTES 61426 -00018Fr 1 EF .HIBYTES 61427 -000190r 1 EF .HIBYTES 61428 -000191r 1 EF .HIBYTES 61429 -000192r 1 EF .HIBYTES 61430 -000193r 1 EF .HIBYTES 61431 -000194r 1 EF .HIBYTES 61432 -000195r 1 EF .HIBYTES 61433 -000196r 1 EF .HIBYTES 61434 -000197r 1 EF .HIBYTES 61435 -000198r 1 EF .HIBYTES 61436 -000199r 1 EF .HIBYTES 61437 -00019Ar 1 EF .HIBYTES 61438 -00019Br 1 EF .HIBYTES 61439 -00019Cr 1 F0 .HIBYTES 61440 -00019Dr 1 F0 .HIBYTES 61441 -00019Er 1 F0 .HIBYTES 61442 -00019Fr 1 F0 .HIBYTES 61443 -0001A0r 1 F0 .HIBYTES 61444 -0001A1r 1 F0 .HIBYTES 61445 -0001A2r 1 F0 .HIBYTES 61446 -0001A3r 1 F0 .HIBYTES 61447 -0001A4r 1 F0 .HIBYTES 61448 -0001A5r 1 F0 .HIBYTES 61449 -0001A6r 1 F0 .HIBYTES 61450 -0001A7r 1 F0 .HIBYTES 61451 -0001A8r 1 F0 .HIBYTES 61452 -0001A9r 1 F0 .HIBYTES 61453 -0001AAr 1 F0 .HIBYTES 61454 -0001ABr 1 F0 .HIBYTES 61455 -0001ACr 1 FF .HIBYTES 65505 -0001ADr 1 FF .HIBYTES 65506 -0001AEr 1 FF .HIBYTES 65507 -0001AFr 1 FF .HIBYTES 65508 -0001B0r 1 FF .HIBYTES 65509 -0001B1r 1 FF .HIBYTES 65510 -0001B2r 1 FF .HIBYTES 65511 -0001B3r 1 FF .HIBYTES 65512 -0001B4r 1 FF .HIBYTES 65513 -0001B5r 1 FF .HIBYTES 65514 -0001B6r 1 FF .HIBYTES 65515 -0001B7r 1 FF .HIBYTES 65516 -0001B8r 1 FF .HIBYTES 65517 -0001B9r 1 FF .HIBYTES 65518 -0001BAr 1 FF .HIBYTES 65519 -0001BBr 1 FF .HIBYTES 65520 -0001BCr 1 FF .HIBYTES 65521 -0001BDr 1 FF .HIBYTES 65522 -0001BEr 1 FF .HIBYTES 65523 -0001BFr 1 FF .HIBYTES 65524 -0001C0r 1 FF .HIBYTES 65525 -0001C1r 1 FF .HIBYTES 65526 -0001C2r 1 FF .HIBYTES 65527 -0001C3r 1 FF .HIBYTES 65528 -0001C4r 1 FF .HIBYTES 65529 -0001C5r 1 FF .HIBYTES 65530 -0001C6r 1 FF .HIBYTES 65531 -0001C7r 1 FF .HIBYTES 65532 -0001C8r 1 FF .HIBYTES 65533 -0001C9r 1 FF .HIBYTES 65534 -0001CAr 1 FF .HIBYTES 65535 +000000r 1 ; upper case pseudo-op +000000r 1 00 .HIBYTES 0 +000001r 1 00 .HIBYTES 1 +000002r 1 00 .HIBYTES 2 +000003r 1 00 .HIBYTES 3 +000004r 1 00 .HIBYTES 4 +000005r 1 00 .HIBYTES 5 +000006r 1 00 .HIBYTES 6 +000007r 1 00 .HIBYTES 7 +000008r 1 00 .HIBYTES 8 +000009r 1 00 .HIBYTES 9 +00000Ar 1 00 .HIBYTES 10 +00000Br 1 00 .HIBYTES 11 +00000Cr 1 00 .HIBYTES 12 +00000Dr 1 00 .HIBYTES 13 +00000Er 1 00 .HIBYTES 14 +00000Fr 1 00 .HIBYTES 15 +000010r 1 00 .HIBYTES 16 +000011r 1 00 .HIBYTES 17 +000012r 1 00 .HIBYTES 18 +000013r 1 00 .HIBYTES 19 +000014r 1 00 .HIBYTES 112 +000015r 1 00 .HIBYTES 113 +000016r 1 00 .HIBYTES 114 +000017r 1 00 .HIBYTES 115 +000018r 1 00 .HIBYTES 116 +000019r 1 00 .HIBYTES 117 +00001Ar 1 00 .HIBYTES 118 +00001Br 1 00 .HIBYTES 119 +00001Cr 1 00 .HIBYTES 120 +00001Dr 1 00 .HIBYTES 121 +00001Er 1 00 .HIBYTES 122 +00001Fr 1 00 .HIBYTES 123 +000020r 1 00 .HIBYTES 124 +000021r 1 00 .HIBYTES 125 +000022r 1 00 .HIBYTES 126 +000023r 1 00 .HIBYTES 127 +000024r 1 00 .HIBYTES 128 +000025r 1 00 .HIBYTES 129 +000026r 1 00 .HIBYTES 130 +000027r 1 00 .HIBYTES 131 +000028r 1 00 .HIBYTES 132 +000029r 1 00 .HIBYTES 133 +00002Ar 1 00 .HIBYTES 134 +00002Br 1 00 .HIBYTES 240 +00002Cr 1 00 .HIBYTES 241 +00002Dr 1 00 .HIBYTES 242 +00002Er 1 00 .HIBYTES 243 +00002Fr 1 00 .HIBYTES 244 +000030r 1 00 .HIBYTES 245 +000031r 1 00 .HIBYTES 246 +000032r 1 00 .HIBYTES 247 +000033r 1 00 .HIBYTES 248 +000034r 1 00 .HIBYTES 249 +000035r 1 00 .HIBYTES 250 +000036r 1 00 .HIBYTES 251 +000037r 1 00 .HIBYTES 252 +000038r 1 00 .HIBYTES 253 +000039r 1 00 .HIBYTES 254 +00003Ar 1 00 .HIBYTES 255 +00003Br 1 01 .HIBYTES 256 +00003Cr 1 01 .HIBYTES 257 +00003Dr 1 01 .HIBYTES 258 +00003Er 1 01 .HIBYTES 259 +00003Fr 1 0F .HIBYTES 4050 +000040r 1 0F .HIBYTES 4051 +000041r 1 0F .HIBYTES 4052 +000042r 1 0F .HIBYTES 4053 +000043r 1 0F .HIBYTES 4054 +000044r 1 0F .HIBYTES 4055 +000045r 1 0F .HIBYTES 4056 +000046r 1 0F .HIBYTES 4057 +000047r 1 0F .HIBYTES 4058 +000048r 1 0F .HIBYTES 4059 +000049r 1 0F .HIBYTES 4060 +00004Ar 1 0F .HIBYTES 4061 +00004Br 1 0F .HIBYTES 4062 +00004Cr 1 0F .HIBYTES 4063 +00004Dr 1 0F .HIBYTES 4064 +00004Er 1 0F .HIBYTES 4065 +00004Fr 1 0F .HIBYTES 4066 +000050r 1 0F .HIBYTES 4067 +000051r 1 0F .HIBYTES 4068 +000052r 1 0F .HIBYTES 4069 +000053r 1 0F .HIBYTES 4070 +000054r 1 0F .HIBYTES 4071 +000055r 1 0F .HIBYTES 4072 +000056r 1 0F .HIBYTES 4073 +000057r 1 0F .HIBYTES 4074 +000058r 1 0F .HIBYTES 4075 +000059r 1 0F .HIBYTES 4076 +00005Ar 1 0F .HIBYTES 4077 +00005Br 1 0F .HIBYTES 4078 +00005Cr 1 0F .HIBYTES 4079 +00005Dr 1 0F .HIBYTES 4080 +00005Er 1 0F .HIBYTES 4081 +00005Fr 1 0F .HIBYTES 4082 +000060r 1 0F .HIBYTES 4083 +000061r 1 0F .HIBYTES 4084 +000062r 1 0F .HIBYTES 4085 +000063r 1 0F .HIBYTES 4086 +000064r 1 0F .HIBYTES 4087 +000065r 1 0F .HIBYTES 4088 +000066r 1 0F .HIBYTES 4089 +000067r 1 0F .HIBYTES 4090 +000068r 1 0F .HIBYTES 4091 +000069r 1 0F .HIBYTES 4092 +00006Ar 1 0F .HIBYTES 4093 +00006Br 1 0F .HIBYTES 4094 +00006Cr 1 0F .HIBYTES 4095 +00006Dr 1 10 .HIBYTES 4096 +00006Er 1 10 .HIBYTES 4097 +00006Fr 1 10 .HIBYTES 4098 +000070r 1 10 .HIBYTES 4099 +000071r 1 10 .HIBYTES 4100 +000072r 1 10 .HIBYTES 4101 +000073r 1 10 .HIBYTES 4102 +000074r 1 10 .HIBYTES 4103 +000075r 1 10 .HIBYTES 4104 +000076r 1 7F .HIBYTES 32752 +000077r 1 7F .HIBYTES 32753 +000078r 1 7F .HIBYTES 32754 +000079r 1 7F .HIBYTES 32755 +00007Ar 1 7F .HIBYTES 32756 +00007Br 1 7F .HIBYTES 32757 +00007Cr 1 7F .HIBYTES 32758 +00007Dr 1 7F .HIBYTES 32759 +00007Er 1 7F .HIBYTES 32760 +00007Fr 1 7F .HIBYTES 32761 +000080r 1 7F .HIBYTES 32762 +000081r 1 7F .HIBYTES 32763 +000082r 1 7F .HIBYTES 32764 +000083r 1 7F .HIBYTES 32765 +000084r 1 7F .HIBYTES 32766 +000085r 1 7F .HIBYTES 32767 +000086r 1 80 .HIBYTES 32768 +000087r 1 80 .HIBYTES 32769 +000088r 1 80 .HIBYTES 32770 +000089r 1 80 .HIBYTES 32771 +00008Ar 1 80 .HIBYTES 32772 +00008Br 1 80 .HIBYTES 32773 +00008Cr 1 80 .HIBYTES 32774 +00008Dr 1 80 .HIBYTES 32775 +00008Er 1 80 .HIBYTES 32776 +00008Fr 1 80 .HIBYTES 32777 +000090r 1 80 .HIBYTES 32778 +000091r 1 80 .HIBYTES 32779 +000092r 1 9F .HIBYTES 40929 +000093r 1 9F .HIBYTES 40930 +000094r 1 9F .HIBYTES 40931 +000095r 1 9F .HIBYTES 40932 +000096r 1 9F .HIBYTES 40933 +000097r 1 9F .HIBYTES 40934 +000098r 1 9F .HIBYTES 40935 +000099r 1 9F .HIBYTES 40936 +00009Ar 1 9F .HIBYTES 40937 +00009Br 1 9F .HIBYTES 40938 +00009Cr 1 9F .HIBYTES 40939 +00009Dr 1 9F .HIBYTES 40940 +00009Er 1 9F .HIBYTES 40941 +00009Fr 1 9F .HIBYTES 40942 +0000A0r 1 9F .HIBYTES 40943 +0000A1r 1 9F .HIBYTES 40944 +0000A2r 1 9F .HIBYTES 40945 +0000A3r 1 9F .HIBYTES 40946 +0000A4r 1 9F .HIBYTES 40947 +0000A5r 1 9F .HIBYTES 40948 +0000A6r 1 9F .HIBYTES 40949 +0000A7r 1 9F .HIBYTES 40950 +0000A8r 1 9F .HIBYTES 40951 +0000A9r 1 9F .HIBYTES 40952 +0000AAr 1 9F .HIBYTES 40953 +0000ABr 1 9F .HIBYTES 40954 +0000ACr 1 9F .HIBYTES 40955 +0000ADr 1 9F .HIBYTES 40956 +0000AEr 1 9F .HIBYTES 40957 +0000AFr 1 9F .HIBYTES 40958 +0000B0r 1 9F .HIBYTES 40959 +0000B1r 1 A0 .HIBYTES 40960 +0000B2r 1 A0 .HIBYTES 40961 +0000B3r 1 A0 .HIBYTES 40962 +0000B4r 1 A0 .HIBYTES 40963 +0000B5r 1 A0 .HIBYTES 40964 +0000B6r 1 A0 .HIBYTES 40965 +0000B7r 1 A0 .HIBYTES 40966 +0000B8r 1 A0 .HIBYTES 40967 +0000B9r 1 A0 .HIBYTES 40968 +0000BAr 1 A0 .HIBYTES 40969 +0000BBr 1 A0 .HIBYTES 40970 +0000BCr 1 A0 .HIBYTES 40971 +0000BDr 1 A0 .HIBYTES 40972 +0000BEr 1 A0 .HIBYTES 40973 +0000BFr 1 A0 .HIBYTES 40974 +0000C0r 1 A0 .HIBYTES 40975 +0000C1r 1 AF .HIBYTES 45025 +0000C2r 1 AF .HIBYTES 45026 +0000C3r 1 AF .HIBYTES 45027 +0000C4r 1 AF .HIBYTES 45028 +0000C5r 1 AF .HIBYTES 45029 +0000C6r 1 AF .HIBYTES 45030 +0000C7r 1 AF .HIBYTES 45031 +0000C8r 1 AF .HIBYTES 45032 +0000C9r 1 AF .HIBYTES 45033 +0000CAr 1 AF .HIBYTES 45034 +0000CBr 1 AF .HIBYTES 45035 +0000CCr 1 AF .HIBYTES 45036 +0000CDr 1 AF .HIBYTES 45037 +0000CEr 1 AF .HIBYTES 45038 +0000CFr 1 AF .HIBYTES 45039 +0000D0r 1 AF .HIBYTES 45040 +0000D1r 1 AF .HIBYTES 45041 +0000D2r 1 AF .HIBYTES 45042 +0000D3r 1 AF .HIBYTES 45043 +0000D4r 1 AF .HIBYTES 45044 +0000D5r 1 AF .HIBYTES 45045 +0000D6r 1 AF .HIBYTES 45046 +0000D7r 1 AF .HIBYTES 45047 +0000D8r 1 AF .HIBYTES 45048 +0000D9r 1 AF .HIBYTES 45049 +0000DAr 1 AF .HIBYTES 45050 +0000DBr 1 AF .HIBYTES 45051 +0000DCr 1 AF .HIBYTES 45052 +0000DDr 1 AF .HIBYTES 45053 +0000DEr 1 AF .HIBYTES 45054 +0000DFr 1 AF .HIBYTES 45055 +0000E0r 1 B0 .HIBYTES 45056 +0000E1r 1 B0 .HIBYTES 45057 +0000E2r 1 B0 .HIBYTES 45058 +0000E3r 1 B0 .HIBYTES 45059 +0000E4r 1 B0 .HIBYTES 45060 +0000E5r 1 B0 .HIBYTES 45061 +0000E6r 1 B0 .HIBYTES 45062 +0000E7r 1 B0 .HIBYTES 45063 +0000E8r 1 B0 .HIBYTES 45064 +0000E9r 1 B0 .HIBYTES 45065 +0000EAr 1 B0 .HIBYTES 45066 +0000EBr 1 B0 .HIBYTES 45067 +0000ECr 1 B0 .HIBYTES 45068 +0000EDr 1 B0 .HIBYTES 45069 +0000EEr 1 B0 .HIBYTES 45070 +0000EFr 1 B0 .HIBYTES 45071 +0000F0r 1 BF .HIBYTES 49121 +0000F1r 1 BF .HIBYTES 49122 +0000F2r 1 BF .HIBYTES 49123 +0000F3r 1 BF .HIBYTES 49124 +0000F4r 1 BF .HIBYTES 49125 +0000F5r 1 BF .HIBYTES 49126 +0000F6r 1 BF .HIBYTES 49127 +0000F7r 1 BF .HIBYTES 49128 +0000F8r 1 BF .HIBYTES 49129 +0000F9r 1 BF .HIBYTES 49130 +0000FAr 1 BF .HIBYTES 49131 +0000FBr 1 BF .HIBYTES 49132 +0000FCr 1 BF .HIBYTES 49133 +0000FDr 1 BF .HIBYTES 49134 +0000FEr 1 BF .HIBYTES 49135 +0000FFr 1 BF .HIBYTES 49136 +000100r 1 BF .HIBYTES 49137 +000101r 1 BF .HIBYTES 49138 +000102r 1 BF .HIBYTES 49139 +000103r 1 BF .HIBYTES 49140 +000104r 1 BF .HIBYTES 49141 +000105r 1 BF .HIBYTES 49142 +000106r 1 BF .HIBYTES 49143 +000107r 1 BF .HIBYTES 49144 +000108r 1 BF .HIBYTES 49145 +000109r 1 BF .HIBYTES 49146 +00010Ar 1 BF .HIBYTES 49147 +00010Br 1 BF .HIBYTES 49148 +00010Cr 1 BF .HIBYTES 49149 +00010Dr 1 BF .HIBYTES 49150 +00010Er 1 BF .HIBYTES 49151 +00010Fr 1 C0 .HIBYTES 49152 +000110r 1 C0 .HIBYTES 49153 +000111r 1 C0 .HIBYTES 49154 +000112r 1 C0 .HIBYTES 49155 +000113r 1 C0 .HIBYTES 49156 +000114r 1 C0 .HIBYTES 49157 +000115r 1 C0 .HIBYTES 49158 +000116r 1 C0 .HIBYTES 49159 +000117r 1 C0 .HIBYTES 49160 +000118r 1 C0 .HIBYTES 49161 +000119r 1 C0 .HIBYTES 49162 +00011Ar 1 C0 .HIBYTES 49163 +00011Br 1 C0 .HIBYTES 49164 +00011Cr 1 C0 .HIBYTES 49165 +00011Dr 1 C0 .HIBYTES 49166 +00011Er 1 C0 .HIBYTES 49167 +00011Fr 1 CF .HIBYTES 53217 +000120r 1 CF .HIBYTES 53218 +000121r 1 CF .HIBYTES 53219 +000122r 1 CF .HIBYTES 53220 +000123r 1 CF .HIBYTES 53221 +000124r 1 CF .HIBYTES 53222 +000125r 1 CF .HIBYTES 53223 +000126r 1 CF .HIBYTES 53224 +000127r 1 CF .HIBYTES 53225 +000128r 1 CF .HIBYTES 53226 +000129r 1 CF .HIBYTES 53227 +00012Ar 1 CF .HIBYTES 53228 +00012Br 1 CF .HIBYTES 53229 +00012Cr 1 CF .HIBYTES 53230 +00012Dr 1 CF .HIBYTES 53231 +00012Er 1 CF .HIBYTES 53232 +00012Fr 1 CF .HIBYTES 53233 +000130r 1 CF .HIBYTES 53234 +000131r 1 CF .HIBYTES 53235 +000132r 1 CF .HIBYTES 53236 +000133r 1 CF .HIBYTES 53237 +000134r 1 CF .HIBYTES 53238 +000135r 1 CF .HIBYTES 53239 +000136r 1 CF .HIBYTES 53240 +000137r 1 CF .HIBYTES 53241 +000138r 1 CF .HIBYTES 53242 +000139r 1 CF .HIBYTES 53243 +00013Ar 1 CF .HIBYTES 53244 +00013Br 1 CF .HIBYTES 53245 +00013Cr 1 CF .HIBYTES 53246 +00013Dr 1 CF .HIBYTES 53247 +00013Er 1 D0 .HIBYTES 53248 +00013Fr 1 D0 .HIBYTES 53249 +000140r 1 D0 .HIBYTES 53250 +000141r 1 D0 .HIBYTES 53251 +000142r 1 D0 .HIBYTES 53252 +000143r 1 D0 .HIBYTES 53253 +000144r 1 D0 .HIBYTES 53254 +000145r 1 D0 .HIBYTES 53255 +000146r 1 D0 .HIBYTES 53256 +000147r 1 D0 .HIBYTES 53257 +000148r 1 D0 .HIBYTES 53258 +000149r 1 D0 .HIBYTES 53259 +00014Ar 1 D0 .HIBYTES 53260 +00014Br 1 D0 .HIBYTES 53261 +00014Cr 1 D0 .HIBYTES 53262 +00014Dr 1 D0 .HIBYTES 53263 +00014Er 1 DF .HIBYTES 57313 +00014Fr 1 DF .HIBYTES 57314 +000150r 1 DF .HIBYTES 57315 +000151r 1 DF .HIBYTES 57316 +000152r 1 DF .HIBYTES 57317 +000153r 1 DF .HIBYTES 57318 +000154r 1 DF .HIBYTES 57319 +000155r 1 DF .HIBYTES 57320 +000156r 1 DF .HIBYTES 57321 +000157r 1 DF .HIBYTES 57322 +000158r 1 DF .HIBYTES 57323 +000159r 1 DF .HIBYTES 57324 +00015Ar 1 DF .HIBYTES 57325 +00015Br 1 DF .HIBYTES 57326 +00015Cr 1 DF .HIBYTES 57327 +00015Dr 1 DF .HIBYTES 57328 +00015Er 1 DF .HIBYTES 57329 +00015Fr 1 DF .HIBYTES 57330 +000160r 1 DF .HIBYTES 57331 +000161r 1 DF .HIBYTES 57332 +000162r 1 DF .HIBYTES 57333 +000163r 1 DF .HIBYTES 57334 +000164r 1 DF .HIBYTES 57335 +000165r 1 DF .HIBYTES 57336 +000166r 1 DF .HIBYTES 57337 +000167r 1 DF .HIBYTES 57338 +000168r 1 DF .HIBYTES 57339 +000169r 1 DF .HIBYTES 57340 +00016Ar 1 DF .HIBYTES 57341 +00016Br 1 DF .HIBYTES 57342 +00016Cr 1 DF .HIBYTES 57343 +00016Dr 1 E0 .HIBYTES 57344 +00016Er 1 E0 .HIBYTES 57345 +00016Fr 1 E0 .HIBYTES 57346 +000170r 1 E0 .HIBYTES 57347 +000171r 1 E0 .HIBYTES 57348 +000172r 1 E0 .HIBYTES 57349 +000173r 1 E0 .HIBYTES 57350 +000174r 1 E0 .HIBYTES 57351 +000175r 1 E0 .HIBYTES 57352 +000176r 1 E0 .HIBYTES 57353 +000177r 1 E0 .HIBYTES 57354 +000178r 1 E0 .HIBYTES 57355 +000179r 1 E0 .HIBYTES 57356 +00017Ar 1 E0 .HIBYTES 57357 +00017Br 1 E0 .HIBYTES 57358 +00017Cr 1 E0 .HIBYTES 57359 +00017Dr 1 EF .HIBYTES 61409 +00017Er 1 EF .HIBYTES 61410 +00017Fr 1 EF .HIBYTES 61411 +000180r 1 EF .HIBYTES 61412 +000181r 1 EF .HIBYTES 61413 +000182r 1 EF .HIBYTES 61414 +000183r 1 EF .HIBYTES 61415 +000184r 1 EF .HIBYTES 61416 +000185r 1 EF .HIBYTES 61417 +000186r 1 EF .HIBYTES 61418 +000187r 1 EF .HIBYTES 61419 +000188r 1 EF .HIBYTES 61420 +000189r 1 EF .HIBYTES 61421 +00018Ar 1 EF .HIBYTES 61422 +00018Br 1 EF .HIBYTES 61423 +00018Cr 1 EF .HIBYTES 61424 +00018Dr 1 EF .HIBYTES 61425 +00018Er 1 EF .HIBYTES 61426 +00018Fr 1 EF .HIBYTES 61427 +000190r 1 EF .HIBYTES 61428 +000191r 1 EF .HIBYTES 61429 +000192r 1 EF .HIBYTES 61430 +000193r 1 EF .HIBYTES 61431 +000194r 1 EF .HIBYTES 61432 +000195r 1 EF .HIBYTES 61433 +000196r 1 EF .HIBYTES 61434 +000197r 1 EF .HIBYTES 61435 +000198r 1 EF .HIBYTES 61436 +000199r 1 EF .HIBYTES 61437 +00019Ar 1 EF .HIBYTES 61438 +00019Br 1 EF .HIBYTES 61439 +00019Cr 1 F0 .HIBYTES 61440 +00019Dr 1 F0 .HIBYTES 61441 +00019Er 1 F0 .HIBYTES 61442 +00019Fr 1 F0 .HIBYTES 61443 +0001A0r 1 F0 .HIBYTES 61444 +0001A1r 1 F0 .HIBYTES 61445 +0001A2r 1 F0 .HIBYTES 61446 +0001A3r 1 F0 .HIBYTES 61447 +0001A4r 1 F0 .HIBYTES 61448 +0001A5r 1 F0 .HIBYTES 61449 +0001A6r 1 F0 .HIBYTES 61450 +0001A7r 1 F0 .HIBYTES 61451 +0001A8r 1 F0 .HIBYTES 61452 +0001A9r 1 F0 .HIBYTES 61453 +0001AAr 1 F0 .HIBYTES 61454 +0001ABr 1 F0 .HIBYTES 61455 +0001ACr 1 FF .HIBYTES 65505 +0001ADr 1 FF .HIBYTES 65506 +0001AEr 1 FF .HIBYTES 65507 +0001AFr 1 FF .HIBYTES 65508 +0001B0r 1 FF .HIBYTES 65509 +0001B1r 1 FF .HIBYTES 65510 +0001B2r 1 FF .HIBYTES 65511 +0001B3r 1 FF .HIBYTES 65512 +0001B4r 1 FF .HIBYTES 65513 +0001B5r 1 FF .HIBYTES 65514 +0001B6r 1 FF .HIBYTES 65515 +0001B7r 1 FF .HIBYTES 65516 +0001B8r 1 FF .HIBYTES 65517 +0001B9r 1 FF .HIBYTES 65518 +0001BAr 1 FF .HIBYTES 65519 +0001BBr 1 FF .HIBYTES 65520 +0001BCr 1 FF .HIBYTES 65521 +0001BDr 1 FF .HIBYTES 65522 +0001BEr 1 FF .HIBYTES 65523 +0001BFr 1 FF .HIBYTES 65524 +0001C0r 1 FF .HIBYTES 65525 +0001C1r 1 FF .HIBYTES 65526 +0001C2r 1 FF .HIBYTES 65527 +0001C3r 1 FF .HIBYTES 65528 +0001C4r 1 FF .HIBYTES 65529 +0001C5r 1 FF .HIBYTES 65530 +0001C6r 1 FF .HIBYTES 65531 +0001C7r 1 FF .HIBYTES 65532 +0001C8r 1 FF .HIBYTES 65533 +0001C9r 1 FF .HIBYTES 65534 +0001CAr 1 FF .HIBYTES 65535 0001CBr 1 -0001CBr 1 ; lower case pseudo-op -0001CBr 1 00 .hibytes 0 -0001CCr 1 00 .hibytes 1 -0001CDr 1 00 .hibytes 2 -0001CEr 1 00 .hibytes 3 -0001CFr 1 00 .hibytes 4 -0001D0r 1 00 .hibytes 5 -0001D1r 1 00 .hibytes 6 -0001D2r 1 00 .hibytes 7 -0001D3r 1 00 .hibytes 8 -0001D4r 1 00 .hibytes 9 -0001D5r 1 00 .hibytes 10 -0001D6r 1 00 .hibytes 11 -0001D7r 1 00 .hibytes 12 -0001D8r 1 00 .hibytes 13 -0001D9r 1 00 .hibytes 14 -0001DAr 1 00 .hibytes 15 -0001DBr 1 00 .hibytes 16 -0001DCr 1 00 .hibytes 17 -0001DDr 1 00 .hibytes 18 -0001DEr 1 00 .hibytes 19 -0001DFr 1 00 .hibytes 112 -0001E0r 1 00 .hibytes 113 -0001E1r 1 00 .hibytes 114 -0001E2r 1 00 .hibytes 115 -0001E3r 1 00 .hibytes 116 -0001E4r 1 00 .hibytes 117 -0001E5r 1 00 .hibytes 118 -0001E6r 1 00 .hibytes 119 -0001E7r 1 00 .hibytes 120 -0001E8r 1 00 .hibytes 121 -0001E9r 1 00 .hibytes 122 -0001EAr 1 00 .hibytes 123 -0001EBr 1 00 .hibytes 124 -0001ECr 1 00 .hibytes 125 -0001EDr 1 00 .hibytes 126 -0001EEr 1 00 .hibytes 127 -0001EFr 1 00 .hibytes 128 -0001F0r 1 00 .hibytes 129 -0001F1r 1 00 .hibytes 130 -0001F2r 1 00 .hibytes 131 -0001F3r 1 00 .hibytes 132 -0001F4r 1 00 .hibytes 133 -0001F5r 1 00 .hibytes 134 -0001F6r 1 00 .hibytes 240 -0001F7r 1 00 .hibytes 241 -0001F8r 1 00 .hibytes 242 -0001F9r 1 00 .hibytes 243 -0001FAr 1 00 .hibytes 244 -0001FBr 1 00 .hibytes 245 -0001FCr 1 00 .hibytes 246 -0001FDr 1 00 .hibytes 247 -0001FEr 1 00 .hibytes 248 -0001FFr 1 00 .hibytes 249 -000200r 1 00 .hibytes 250 -000201r 1 00 .hibytes 251 -000202r 1 00 .hibytes 252 -000203r 1 00 .hibytes 253 -000204r 1 00 .hibytes 254 -000205r 1 00 .hibytes 255 -000206r 1 01 .hibytes 256 -000207r 1 01 .hibytes 257 -000208r 1 01 .hibytes 258 -000209r 1 01 .hibytes 259 -00020Ar 1 0F .hibytes 4050 -00020Br 1 0F .hibytes 4051 -00020Cr 1 0F .hibytes 4052 -00020Dr 1 0F .hibytes 4053 -00020Er 1 0F .hibytes 4054 -00020Fr 1 0F .hibytes 4055 -000210r 1 0F .hibytes 4056 -000211r 1 0F .hibytes 4057 -000212r 1 0F .hibytes 4058 -000213r 1 0F .hibytes 4059 -000214r 1 0F .hibytes 4060 -000215r 1 0F .hibytes 4061 -000216r 1 0F .hibytes 4062 -000217r 1 0F .hibytes 4063 -000218r 1 0F .hibytes 4064 -000219r 1 0F .hibytes 4065 -00021Ar 1 0F .hibytes 4066 -00021Br 1 0F .hibytes 4067 -00021Cr 1 0F .hibytes 4068 -00021Dr 1 0F .hibytes 4069 -00021Er 1 0F .hibytes 4070 -00021Fr 1 0F .hibytes 4071 -000220r 1 0F .hibytes 4072 -000221r 1 0F .hibytes 4073 -000222r 1 0F .hibytes 4074 -000223r 1 0F .hibytes 4075 -000224r 1 0F .hibytes 4076 -000225r 1 0F .hibytes 4077 -000226r 1 0F .hibytes 4078 -000227r 1 0F .hibytes 4079 -000228r 1 0F .hibytes 4080 -000229r 1 0F .hibytes 4081 -00022Ar 1 0F .hibytes 4082 -00022Br 1 0F .hibytes 4083 -00022Cr 1 0F .hibytes 4084 -00022Dr 1 0F .hibytes 4085 -00022Er 1 0F .hibytes 4086 -00022Fr 1 0F .hibytes 4087 -000230r 1 0F .hibytes 4088 -000231r 1 0F .hibytes 4089 -000232r 1 0F .hibytes 4090 -000233r 1 0F .hibytes 4091 -000234r 1 0F .hibytes 4092 -000235r 1 0F .hibytes 4093 -000236r 1 0F .hibytes 4094 -000237r 1 0F .hibytes 4095 -000238r 1 10 .hibytes 4096 -000239r 1 10 .hibytes 4097 -00023Ar 1 10 .hibytes 4098 -00023Br 1 10 .hibytes 4099 -00023Cr 1 10 .hibytes 4100 -00023Dr 1 10 .hibytes 4101 -00023Er 1 10 .hibytes 4102 -00023Fr 1 10 .hibytes 4103 -000240r 1 10 .hibytes 4104 -000241r 1 7F .hibytes 32752 -000242r 1 7F .hibytes 32753 -000243r 1 7F .hibytes 32754 -000244r 1 7F .hibytes 32755 -000245r 1 7F .hibytes 32756 -000246r 1 7F .hibytes 32757 -000247r 1 7F .hibytes 32758 -000248r 1 7F .hibytes 32759 -000249r 1 7F .hibytes 32760 -00024Ar 1 7F .hibytes 32761 -00024Br 1 7F .hibytes 32762 -00024Cr 1 7F .hibytes 32763 -00024Dr 1 7F .hibytes 32764 -00024Er 1 7F .hibytes 32765 -00024Fr 1 7F .hibytes 32766 -000250r 1 7F .hibytes 32767 -000251r 1 80 .hibytes 32768 -000252r 1 80 .hibytes 32769 -000253r 1 80 .hibytes 32770 -000254r 1 80 .hibytes 32771 -000255r 1 80 .hibytes 32772 -000256r 1 80 .hibytes 32773 -000257r 1 80 .hibytes 32774 -000258r 1 80 .hibytes 32775 -000259r 1 80 .hibytes 32776 -00025Ar 1 80 .hibytes 32777 -00025Br 1 80 .hibytes 32778 -00025Cr 1 80 .hibytes 32779 -00025Dr 1 9F .hibytes 40929 -00025Er 1 9F .hibytes 40930 -00025Fr 1 9F .hibytes 40931 -000260r 1 9F .hibytes 40932 -000261r 1 9F .hibytes 40933 -000262r 1 9F .hibytes 40934 -000263r 1 9F .hibytes 40935 -000264r 1 9F .hibytes 40936 -000265r 1 9F .hibytes 40937 -000266r 1 9F .hibytes 40938 -000267r 1 9F .hibytes 40939 -000268r 1 9F .hibytes 40940 -000269r 1 9F .hibytes 40941 -00026Ar 1 9F .hibytes 40942 -00026Br 1 9F .hibytes 40943 -00026Cr 1 9F .hibytes 40944 -00026Dr 1 9F .hibytes 40945 -00026Er 1 9F .hibytes 40946 -00026Fr 1 9F .hibytes 40947 -000270r 1 9F .hibytes 40948 -000271r 1 9F .hibytes 40949 -000272r 1 9F .hibytes 40950 -000273r 1 9F .hibytes 40951 -000274r 1 9F .hibytes 40952 -000275r 1 9F .hibytes 40953 -000276r 1 9F .hibytes 40954 -000277r 1 9F .hibytes 40955 -000278r 1 9F .hibytes 40956 -000279r 1 9F .hibytes 40957 -00027Ar 1 9F .hibytes 40958 -00027Br 1 9F .hibytes 40959 -00027Cr 1 A0 .hibytes 40960 -00027Dr 1 A0 .hibytes 40961 -00027Er 1 A0 .hibytes 40962 -00027Fr 1 A0 .hibytes 40963 -000280r 1 A0 .hibytes 40964 -000281r 1 A0 .hibytes 40965 -000282r 1 A0 .hibytes 40966 -000283r 1 A0 .hibytes 40967 -000284r 1 A0 .hibytes 40968 -000285r 1 A0 .hibytes 40969 -000286r 1 A0 .hibytes 40970 -000287r 1 A0 .hibytes 40971 -000288r 1 A0 .hibytes 40972 -000289r 1 A0 .hibytes 40973 -00028Ar 1 A0 .hibytes 40974 -00028Br 1 A0 .hibytes 40975 -00028Cr 1 AF .hibytes 45025 -00028Dr 1 AF .hibytes 45026 -00028Er 1 AF .hibytes 45027 -00028Fr 1 AF .hibytes 45028 -000290r 1 AF .hibytes 45029 -000291r 1 AF .hibytes 45030 -000292r 1 AF .hibytes 45031 -000293r 1 AF .hibytes 45032 -000294r 1 AF .hibytes 45033 -000295r 1 AF .hibytes 45034 -000296r 1 AF .hibytes 45035 -000297r 1 AF .hibytes 45036 -000298r 1 AF .hibytes 45037 -000299r 1 AF .hibytes 45038 -00029Ar 1 AF .hibytes 45039 -00029Br 1 AF .hibytes 45040 -00029Cr 1 AF .hibytes 45041 -00029Dr 1 AF .hibytes 45042 -00029Er 1 AF .hibytes 45043 -00029Fr 1 AF .hibytes 45044 -0002A0r 1 AF .hibytes 45045 -0002A1r 1 AF .hibytes 45046 -0002A2r 1 AF .hibytes 45047 -0002A3r 1 AF .hibytes 45048 -0002A4r 1 AF .hibytes 45049 -0002A5r 1 AF .hibytes 45050 -0002A6r 1 AF .hibytes 45051 -0002A7r 1 AF .hibytes 45052 -0002A8r 1 AF .hibytes 45053 -0002A9r 1 AF .hibytes 45054 -0002AAr 1 AF .hibytes 45055 -0002ABr 1 B0 .hibytes 45056 -0002ACr 1 B0 .hibytes 45057 -0002ADr 1 B0 .hibytes 45058 -0002AEr 1 B0 .hibytes 45059 -0002AFr 1 B0 .hibytes 45060 -0002B0r 1 B0 .hibytes 45061 -0002B1r 1 B0 .hibytes 45062 -0002B2r 1 B0 .hibytes 45063 -0002B3r 1 B0 .hibytes 45064 -0002B4r 1 B0 .hibytes 45065 -0002B5r 1 B0 .hibytes 45066 -0002B6r 1 B0 .hibytes 45067 -0002B7r 1 B0 .hibytes 45068 -0002B8r 1 B0 .hibytes 45069 -0002B9r 1 B0 .hibytes 45070 -0002BAr 1 B0 .hibytes 45071 -0002BBr 1 BF .hibytes 49121 -0002BCr 1 BF .hibytes 49122 -0002BDr 1 BF .hibytes 49123 -0002BEr 1 BF .hibytes 49124 -0002BFr 1 BF .hibytes 49125 -0002C0r 1 BF .hibytes 49126 -0002C1r 1 BF .hibytes 49127 -0002C2r 1 BF .hibytes 49128 -0002C3r 1 BF .hibytes 49129 -0002C4r 1 BF .hibytes 49130 -0002C5r 1 BF .hibytes 49131 -0002C6r 1 BF .hibytes 49132 -0002C7r 1 BF .hibytes 49133 -0002C8r 1 BF .hibytes 49134 -0002C9r 1 BF .hibytes 49135 -0002CAr 1 BF .hibytes 49136 -0002CBr 1 BF .hibytes 49137 -0002CCr 1 BF .hibytes 49138 -0002CDr 1 BF .hibytes 49139 -0002CEr 1 BF .hibytes 49140 -0002CFr 1 BF .hibytes 49141 -0002D0r 1 BF .hibytes 49142 -0002D1r 1 BF .hibytes 49143 -0002D2r 1 BF .hibytes 49144 -0002D3r 1 BF .hibytes 49145 -0002D4r 1 BF .hibytes 49146 -0002D5r 1 BF .hibytes 49147 -0002D6r 1 BF .hibytes 49148 -0002D7r 1 BF .hibytes 49149 -0002D8r 1 BF .hibytes 49150 -0002D9r 1 BF .hibytes 49151 -0002DAr 1 C0 .hibytes 49152 -0002DBr 1 C0 .hibytes 49153 -0002DCr 1 C0 .hibytes 49154 -0002DDr 1 C0 .hibytes 49155 -0002DEr 1 C0 .hibytes 49156 -0002DFr 1 C0 .hibytes 49157 -0002E0r 1 C0 .hibytes 49158 -0002E1r 1 C0 .hibytes 49159 -0002E2r 1 C0 .hibytes 49160 -0002E3r 1 C0 .hibytes 49161 -0002E4r 1 C0 .hibytes 49162 -0002E5r 1 C0 .hibytes 49163 -0002E6r 1 C0 .hibytes 49164 -0002E7r 1 C0 .hibytes 49165 -0002E8r 1 C0 .hibytes 49166 -0002E9r 1 C0 .hibytes 49167 -0002EAr 1 CF .hibytes 53217 -0002EBr 1 CF .hibytes 53218 -0002ECr 1 CF .hibytes 53219 -0002EDr 1 CF .hibytes 53220 -0002EEr 1 CF .hibytes 53221 -0002EFr 1 CF .hibytes 53222 -0002F0r 1 CF .hibytes 53223 -0002F1r 1 CF .hibytes 53224 -0002F2r 1 CF .hibytes 53225 -0002F3r 1 CF .hibytes 53226 -0002F4r 1 CF .hibytes 53227 -0002F5r 1 CF .hibytes 53228 -0002F6r 1 CF .hibytes 53229 -0002F7r 1 CF .hibytes 53230 -0002F8r 1 CF .hibytes 53231 -0002F9r 1 CF .hibytes 53232 -0002FAr 1 CF .hibytes 53233 -0002FBr 1 CF .hibytes 53234 -0002FCr 1 CF .hibytes 53235 -0002FDr 1 CF .hibytes 53236 -0002FEr 1 CF .hibytes 53237 -0002FFr 1 CF .hibytes 53238 -000300r 1 CF .hibytes 53239 -000301r 1 CF .hibytes 53240 -000302r 1 CF .hibytes 53241 -000303r 1 CF .hibytes 53242 -000304r 1 CF .hibytes 53243 -000305r 1 CF .hibytes 53244 -000306r 1 CF .hibytes 53245 -000307r 1 CF .hibytes 53246 -000308r 1 CF .hibytes 53247 -000309r 1 D0 .hibytes 53248 -00030Ar 1 D0 .hibytes 53249 -00030Br 1 D0 .hibytes 53250 -00030Cr 1 D0 .hibytes 53251 -00030Dr 1 D0 .hibytes 53252 -00030Er 1 D0 .hibytes 53253 -00030Fr 1 D0 .hibytes 53254 -000310r 1 D0 .hibytes 53255 -000311r 1 D0 .hibytes 53256 -000312r 1 D0 .hibytes 53257 -000313r 1 D0 .hibytes 53258 -000314r 1 D0 .hibytes 53259 -000315r 1 D0 .hibytes 53260 -000316r 1 D0 .hibytes 53261 -000317r 1 D0 .hibytes 53262 -000318r 1 D0 .hibytes 53263 -000319r 1 DF .hibytes 57313 -00031Ar 1 DF .hibytes 57314 -00031Br 1 DF .hibytes 57315 -00031Cr 1 DF .hibytes 57316 -00031Dr 1 DF .hibytes 57317 -00031Er 1 DF .hibytes 57318 -00031Fr 1 DF .hibytes 57319 -000320r 1 DF .hibytes 57320 -000321r 1 DF .hibytes 57321 -000322r 1 DF .hibytes 57322 -000323r 1 DF .hibytes 57323 -000324r 1 DF .hibytes 57324 -000325r 1 DF .hibytes 57325 -000326r 1 DF .hibytes 57326 -000327r 1 DF .hibytes 57327 -000328r 1 DF .hibytes 57328 -000329r 1 DF .hibytes 57329 -00032Ar 1 DF .hibytes 57330 -00032Br 1 DF .hibytes 57331 -00032Cr 1 DF .hibytes 57332 -00032Dr 1 DF .hibytes 57333 -00032Er 1 DF .hibytes 57334 -00032Fr 1 DF .hibytes 57335 -000330r 1 DF .hibytes 57336 -000331r 1 DF .hibytes 57337 -000332r 1 DF .hibytes 57338 -000333r 1 DF .hibytes 57339 -000334r 1 DF .hibytes 57340 -000335r 1 DF .hibytes 57341 -000336r 1 DF .hibytes 57342 -000337r 1 DF .hibytes 57343 -000338r 1 E0 .hibytes 57344 -000339r 1 E0 .hibytes 57345 -00033Ar 1 E0 .hibytes 57346 -00033Br 1 E0 .hibytes 57347 -00033Cr 1 E0 .hibytes 57348 -00033Dr 1 E0 .hibytes 57349 -00033Er 1 E0 .hibytes 57350 -00033Fr 1 E0 .hibytes 57351 -000340r 1 E0 .hibytes 57352 -000341r 1 E0 .hibytes 57353 -000342r 1 E0 .hibytes 57354 -000343r 1 E0 .hibytes 57355 -000344r 1 E0 .hibytes 57356 -000345r 1 E0 .hibytes 57357 -000346r 1 E0 .hibytes 57358 -000347r 1 E0 .hibytes 57359 -000348r 1 EF .hibytes 61409 -000349r 1 EF .hibytes 61410 -00034Ar 1 EF .hibytes 61411 -00034Br 1 EF .hibytes 61412 -00034Cr 1 EF .hibytes 61413 -00034Dr 1 EF .hibytes 61414 -00034Er 1 EF .hibytes 61415 -00034Fr 1 EF .hibytes 61416 -000350r 1 EF .hibytes 61417 -000351r 1 EF .hibytes 61418 -000352r 1 EF .hibytes 61419 -000353r 1 EF .hibytes 61420 -000354r 1 EF .hibytes 61421 -000355r 1 EF .hibytes 61422 -000356r 1 EF .hibytes 61423 -000357r 1 EF .hibytes 61424 -000358r 1 EF .hibytes 61425 -000359r 1 EF .hibytes 61426 -00035Ar 1 EF .hibytes 61427 -00035Br 1 EF .hibytes 61428 -00035Cr 1 EF .hibytes 61429 -00035Dr 1 EF .hibytes 61430 -00035Er 1 EF .hibytes 61431 -00035Fr 1 EF .hibytes 61432 -000360r 1 EF .hibytes 61433 -000361r 1 EF .hibytes 61434 -000362r 1 EF .hibytes 61435 -000363r 1 EF .hibytes 61436 -000364r 1 EF .hibytes 61437 -000365r 1 EF .hibytes 61438 -000366r 1 EF .hibytes 61439 -000367r 1 F0 .hibytes 61440 -000368r 1 F0 .hibytes 61441 -000369r 1 F0 .hibytes 61442 -00036Ar 1 F0 .hibytes 61443 -00036Br 1 F0 .hibytes 61444 -00036Cr 1 F0 .hibytes 61445 -00036Dr 1 F0 .hibytes 61446 -00036Er 1 F0 .hibytes 61447 -00036Fr 1 F0 .hibytes 61448 -000370r 1 F0 .hibytes 61449 -000371r 1 F0 .hibytes 61450 -000372r 1 F0 .hibytes 61451 -000373r 1 F0 .hibytes 61452 -000374r 1 F0 .hibytes 61453 -000375r 1 F0 .hibytes 61454 -000376r 1 F0 .hibytes 61455 -000377r 1 FF .hibytes 65505 -000378r 1 FF .hibytes 65506 -000379r 1 FF .hibytes 65507 -00037Ar 1 FF .hibytes 65508 -00037Br 1 FF .hibytes 65509 -00037Cr 1 FF .hibytes 65510 -00037Dr 1 FF .hibytes 65511 -00037Er 1 FF .hibytes 65512 -00037Fr 1 FF .hibytes 65513 -000380r 1 FF .hibytes 65514 -000381r 1 FF .hibytes 65515 -000382r 1 FF .hibytes 65516 -000383r 1 FF .hibytes 65517 -000384r 1 FF .hibytes 65518 -000385r 1 FF .hibytes 65519 -000386r 1 FF .hibytes 65520 -000387r 1 FF .hibytes 65521 -000388r 1 FF .hibytes 65522 -000389r 1 FF .hibytes 65523 -00038Ar 1 FF .hibytes 65524 -00038Br 1 FF .hibytes 65525 -00038Cr 1 FF .hibytes 65526 -00038Dr 1 FF .hibytes 65527 -00038Er 1 FF .hibytes 65528 -00038Fr 1 FF .hibytes 65529 -000390r 1 FF .hibytes 65530 -000391r 1 FF .hibytes 65531 -000392r 1 FF .hibytes 65532 -000393r 1 FF .hibytes 65533 -000394r 1 FF .hibytes 65534 -000395r 1 FF .hibytes 65535 +0001CBr 1 ; lower case pseudo-op +0001CBr 1 00 .hibytes 0 +0001CCr 1 00 .hibytes 1 +0001CDr 1 00 .hibytes 2 +0001CEr 1 00 .hibytes 3 +0001CFr 1 00 .hibytes 4 +0001D0r 1 00 .hibytes 5 +0001D1r 1 00 .hibytes 6 +0001D2r 1 00 .hibytes 7 +0001D3r 1 00 .hibytes 8 +0001D4r 1 00 .hibytes 9 +0001D5r 1 00 .hibytes 10 +0001D6r 1 00 .hibytes 11 +0001D7r 1 00 .hibytes 12 +0001D8r 1 00 .hibytes 13 +0001D9r 1 00 .hibytes 14 +0001DAr 1 00 .hibytes 15 +0001DBr 1 00 .hibytes 16 +0001DCr 1 00 .hibytes 17 +0001DDr 1 00 .hibytes 18 +0001DEr 1 00 .hibytes 19 +0001DFr 1 00 .hibytes 112 +0001E0r 1 00 .hibytes 113 +0001E1r 1 00 .hibytes 114 +0001E2r 1 00 .hibytes 115 +0001E3r 1 00 .hibytes 116 +0001E4r 1 00 .hibytes 117 +0001E5r 1 00 .hibytes 118 +0001E6r 1 00 .hibytes 119 +0001E7r 1 00 .hibytes 120 +0001E8r 1 00 .hibytes 121 +0001E9r 1 00 .hibytes 122 +0001EAr 1 00 .hibytes 123 +0001EBr 1 00 .hibytes 124 +0001ECr 1 00 .hibytes 125 +0001EDr 1 00 .hibytes 126 +0001EEr 1 00 .hibytes 127 +0001EFr 1 00 .hibytes 128 +0001F0r 1 00 .hibytes 129 +0001F1r 1 00 .hibytes 130 +0001F2r 1 00 .hibytes 131 +0001F3r 1 00 .hibytes 132 +0001F4r 1 00 .hibytes 133 +0001F5r 1 00 .hibytes 134 +0001F6r 1 00 .hibytes 240 +0001F7r 1 00 .hibytes 241 +0001F8r 1 00 .hibytes 242 +0001F9r 1 00 .hibytes 243 +0001FAr 1 00 .hibytes 244 +0001FBr 1 00 .hibytes 245 +0001FCr 1 00 .hibytes 246 +0001FDr 1 00 .hibytes 247 +0001FEr 1 00 .hibytes 248 +0001FFr 1 00 .hibytes 249 +000200r 1 00 .hibytes 250 +000201r 1 00 .hibytes 251 +000202r 1 00 .hibytes 252 +000203r 1 00 .hibytes 253 +000204r 1 00 .hibytes 254 +000205r 1 00 .hibytes 255 +000206r 1 01 .hibytes 256 +000207r 1 01 .hibytes 257 +000208r 1 01 .hibytes 258 +000209r 1 01 .hibytes 259 +00020Ar 1 0F .hibytes 4050 +00020Br 1 0F .hibytes 4051 +00020Cr 1 0F .hibytes 4052 +00020Dr 1 0F .hibytes 4053 +00020Er 1 0F .hibytes 4054 +00020Fr 1 0F .hibytes 4055 +000210r 1 0F .hibytes 4056 +000211r 1 0F .hibytes 4057 +000212r 1 0F .hibytes 4058 +000213r 1 0F .hibytes 4059 +000214r 1 0F .hibytes 4060 +000215r 1 0F .hibytes 4061 +000216r 1 0F .hibytes 4062 +000217r 1 0F .hibytes 4063 +000218r 1 0F .hibytes 4064 +000219r 1 0F .hibytes 4065 +00021Ar 1 0F .hibytes 4066 +00021Br 1 0F .hibytes 4067 +00021Cr 1 0F .hibytes 4068 +00021Dr 1 0F .hibytes 4069 +00021Er 1 0F .hibytes 4070 +00021Fr 1 0F .hibytes 4071 +000220r 1 0F .hibytes 4072 +000221r 1 0F .hibytes 4073 +000222r 1 0F .hibytes 4074 +000223r 1 0F .hibytes 4075 +000224r 1 0F .hibytes 4076 +000225r 1 0F .hibytes 4077 +000226r 1 0F .hibytes 4078 +000227r 1 0F .hibytes 4079 +000228r 1 0F .hibytes 4080 +000229r 1 0F .hibytes 4081 +00022Ar 1 0F .hibytes 4082 +00022Br 1 0F .hibytes 4083 +00022Cr 1 0F .hibytes 4084 +00022Dr 1 0F .hibytes 4085 +00022Er 1 0F .hibytes 4086 +00022Fr 1 0F .hibytes 4087 +000230r 1 0F .hibytes 4088 +000231r 1 0F .hibytes 4089 +000232r 1 0F .hibytes 4090 +000233r 1 0F .hibytes 4091 +000234r 1 0F .hibytes 4092 +000235r 1 0F .hibytes 4093 +000236r 1 0F .hibytes 4094 +000237r 1 0F .hibytes 4095 +000238r 1 10 .hibytes 4096 +000239r 1 10 .hibytes 4097 +00023Ar 1 10 .hibytes 4098 +00023Br 1 10 .hibytes 4099 +00023Cr 1 10 .hibytes 4100 +00023Dr 1 10 .hibytes 4101 +00023Er 1 10 .hibytes 4102 +00023Fr 1 10 .hibytes 4103 +000240r 1 10 .hibytes 4104 +000241r 1 7F .hibytes 32752 +000242r 1 7F .hibytes 32753 +000243r 1 7F .hibytes 32754 +000244r 1 7F .hibytes 32755 +000245r 1 7F .hibytes 32756 +000246r 1 7F .hibytes 32757 +000247r 1 7F .hibytes 32758 +000248r 1 7F .hibytes 32759 +000249r 1 7F .hibytes 32760 +00024Ar 1 7F .hibytes 32761 +00024Br 1 7F .hibytes 32762 +00024Cr 1 7F .hibytes 32763 +00024Dr 1 7F .hibytes 32764 +00024Er 1 7F .hibytes 32765 +00024Fr 1 7F .hibytes 32766 +000250r 1 7F .hibytes 32767 +000251r 1 80 .hibytes 32768 +000252r 1 80 .hibytes 32769 +000253r 1 80 .hibytes 32770 +000254r 1 80 .hibytes 32771 +000255r 1 80 .hibytes 32772 +000256r 1 80 .hibytes 32773 +000257r 1 80 .hibytes 32774 +000258r 1 80 .hibytes 32775 +000259r 1 80 .hibytes 32776 +00025Ar 1 80 .hibytes 32777 +00025Br 1 80 .hibytes 32778 +00025Cr 1 80 .hibytes 32779 +00025Dr 1 9F .hibytes 40929 +00025Er 1 9F .hibytes 40930 +00025Fr 1 9F .hibytes 40931 +000260r 1 9F .hibytes 40932 +000261r 1 9F .hibytes 40933 +000262r 1 9F .hibytes 40934 +000263r 1 9F .hibytes 40935 +000264r 1 9F .hibytes 40936 +000265r 1 9F .hibytes 40937 +000266r 1 9F .hibytes 40938 +000267r 1 9F .hibytes 40939 +000268r 1 9F .hibytes 40940 +000269r 1 9F .hibytes 40941 +00026Ar 1 9F .hibytes 40942 +00026Br 1 9F .hibytes 40943 +00026Cr 1 9F .hibytes 40944 +00026Dr 1 9F .hibytes 40945 +00026Er 1 9F .hibytes 40946 +00026Fr 1 9F .hibytes 40947 +000270r 1 9F .hibytes 40948 +000271r 1 9F .hibytes 40949 +000272r 1 9F .hibytes 40950 +000273r 1 9F .hibytes 40951 +000274r 1 9F .hibytes 40952 +000275r 1 9F .hibytes 40953 +000276r 1 9F .hibytes 40954 +000277r 1 9F .hibytes 40955 +000278r 1 9F .hibytes 40956 +000279r 1 9F .hibytes 40957 +00027Ar 1 9F .hibytes 40958 +00027Br 1 9F .hibytes 40959 +00027Cr 1 A0 .hibytes 40960 +00027Dr 1 A0 .hibytes 40961 +00027Er 1 A0 .hibytes 40962 +00027Fr 1 A0 .hibytes 40963 +000280r 1 A0 .hibytes 40964 +000281r 1 A0 .hibytes 40965 +000282r 1 A0 .hibytes 40966 +000283r 1 A0 .hibytes 40967 +000284r 1 A0 .hibytes 40968 +000285r 1 A0 .hibytes 40969 +000286r 1 A0 .hibytes 40970 +000287r 1 A0 .hibytes 40971 +000288r 1 A0 .hibytes 40972 +000289r 1 A0 .hibytes 40973 +00028Ar 1 A0 .hibytes 40974 +00028Br 1 A0 .hibytes 40975 +00028Cr 1 AF .hibytes 45025 +00028Dr 1 AF .hibytes 45026 +00028Er 1 AF .hibytes 45027 +00028Fr 1 AF .hibytes 45028 +000290r 1 AF .hibytes 45029 +000291r 1 AF .hibytes 45030 +000292r 1 AF .hibytes 45031 +000293r 1 AF .hibytes 45032 +000294r 1 AF .hibytes 45033 +000295r 1 AF .hibytes 45034 +000296r 1 AF .hibytes 45035 +000297r 1 AF .hibytes 45036 +000298r 1 AF .hibytes 45037 +000299r 1 AF .hibytes 45038 +00029Ar 1 AF .hibytes 45039 +00029Br 1 AF .hibytes 45040 +00029Cr 1 AF .hibytes 45041 +00029Dr 1 AF .hibytes 45042 +00029Er 1 AF .hibytes 45043 +00029Fr 1 AF .hibytes 45044 +0002A0r 1 AF .hibytes 45045 +0002A1r 1 AF .hibytes 45046 +0002A2r 1 AF .hibytes 45047 +0002A3r 1 AF .hibytes 45048 +0002A4r 1 AF .hibytes 45049 +0002A5r 1 AF .hibytes 45050 +0002A6r 1 AF .hibytes 45051 +0002A7r 1 AF .hibytes 45052 +0002A8r 1 AF .hibytes 45053 +0002A9r 1 AF .hibytes 45054 +0002AAr 1 AF .hibytes 45055 +0002ABr 1 B0 .hibytes 45056 +0002ACr 1 B0 .hibytes 45057 +0002ADr 1 B0 .hibytes 45058 +0002AEr 1 B0 .hibytes 45059 +0002AFr 1 B0 .hibytes 45060 +0002B0r 1 B0 .hibytes 45061 +0002B1r 1 B0 .hibytes 45062 +0002B2r 1 B0 .hibytes 45063 +0002B3r 1 B0 .hibytes 45064 +0002B4r 1 B0 .hibytes 45065 +0002B5r 1 B0 .hibytes 45066 +0002B6r 1 B0 .hibytes 45067 +0002B7r 1 B0 .hibytes 45068 +0002B8r 1 B0 .hibytes 45069 +0002B9r 1 B0 .hibytes 45070 +0002BAr 1 B0 .hibytes 45071 +0002BBr 1 BF .hibytes 49121 +0002BCr 1 BF .hibytes 49122 +0002BDr 1 BF .hibytes 49123 +0002BEr 1 BF .hibytes 49124 +0002BFr 1 BF .hibytes 49125 +0002C0r 1 BF .hibytes 49126 +0002C1r 1 BF .hibytes 49127 +0002C2r 1 BF .hibytes 49128 +0002C3r 1 BF .hibytes 49129 +0002C4r 1 BF .hibytes 49130 +0002C5r 1 BF .hibytes 49131 +0002C6r 1 BF .hibytes 49132 +0002C7r 1 BF .hibytes 49133 +0002C8r 1 BF .hibytes 49134 +0002C9r 1 BF .hibytes 49135 +0002CAr 1 BF .hibytes 49136 +0002CBr 1 BF .hibytes 49137 +0002CCr 1 BF .hibytes 49138 +0002CDr 1 BF .hibytes 49139 +0002CEr 1 BF .hibytes 49140 +0002CFr 1 BF .hibytes 49141 +0002D0r 1 BF .hibytes 49142 +0002D1r 1 BF .hibytes 49143 +0002D2r 1 BF .hibytes 49144 +0002D3r 1 BF .hibytes 49145 +0002D4r 1 BF .hibytes 49146 +0002D5r 1 BF .hibytes 49147 +0002D6r 1 BF .hibytes 49148 +0002D7r 1 BF .hibytes 49149 +0002D8r 1 BF .hibytes 49150 +0002D9r 1 BF .hibytes 49151 +0002DAr 1 C0 .hibytes 49152 +0002DBr 1 C0 .hibytes 49153 +0002DCr 1 C0 .hibytes 49154 +0002DDr 1 C0 .hibytes 49155 +0002DEr 1 C0 .hibytes 49156 +0002DFr 1 C0 .hibytes 49157 +0002E0r 1 C0 .hibytes 49158 +0002E1r 1 C0 .hibytes 49159 +0002E2r 1 C0 .hibytes 49160 +0002E3r 1 C0 .hibytes 49161 +0002E4r 1 C0 .hibytes 49162 +0002E5r 1 C0 .hibytes 49163 +0002E6r 1 C0 .hibytes 49164 +0002E7r 1 C0 .hibytes 49165 +0002E8r 1 C0 .hibytes 49166 +0002E9r 1 C0 .hibytes 49167 +0002EAr 1 CF .hibytes 53217 +0002EBr 1 CF .hibytes 53218 +0002ECr 1 CF .hibytes 53219 +0002EDr 1 CF .hibytes 53220 +0002EEr 1 CF .hibytes 53221 +0002EFr 1 CF .hibytes 53222 +0002F0r 1 CF .hibytes 53223 +0002F1r 1 CF .hibytes 53224 +0002F2r 1 CF .hibytes 53225 +0002F3r 1 CF .hibytes 53226 +0002F4r 1 CF .hibytes 53227 +0002F5r 1 CF .hibytes 53228 +0002F6r 1 CF .hibytes 53229 +0002F7r 1 CF .hibytes 53230 +0002F8r 1 CF .hibytes 53231 +0002F9r 1 CF .hibytes 53232 +0002FAr 1 CF .hibytes 53233 +0002FBr 1 CF .hibytes 53234 +0002FCr 1 CF .hibytes 53235 +0002FDr 1 CF .hibytes 53236 +0002FEr 1 CF .hibytes 53237 +0002FFr 1 CF .hibytes 53238 +000300r 1 CF .hibytes 53239 +000301r 1 CF .hibytes 53240 +000302r 1 CF .hibytes 53241 +000303r 1 CF .hibytes 53242 +000304r 1 CF .hibytes 53243 +000305r 1 CF .hibytes 53244 +000306r 1 CF .hibytes 53245 +000307r 1 CF .hibytes 53246 +000308r 1 CF .hibytes 53247 +000309r 1 D0 .hibytes 53248 +00030Ar 1 D0 .hibytes 53249 +00030Br 1 D0 .hibytes 53250 +00030Cr 1 D0 .hibytes 53251 +00030Dr 1 D0 .hibytes 53252 +00030Er 1 D0 .hibytes 53253 +00030Fr 1 D0 .hibytes 53254 +000310r 1 D0 .hibytes 53255 +000311r 1 D0 .hibytes 53256 +000312r 1 D0 .hibytes 53257 +000313r 1 D0 .hibytes 53258 +000314r 1 D0 .hibytes 53259 +000315r 1 D0 .hibytes 53260 +000316r 1 D0 .hibytes 53261 +000317r 1 D0 .hibytes 53262 +000318r 1 D0 .hibytes 53263 +000319r 1 DF .hibytes 57313 +00031Ar 1 DF .hibytes 57314 +00031Br 1 DF .hibytes 57315 +00031Cr 1 DF .hibytes 57316 +00031Dr 1 DF .hibytes 57317 +00031Er 1 DF .hibytes 57318 +00031Fr 1 DF .hibytes 57319 +000320r 1 DF .hibytes 57320 +000321r 1 DF .hibytes 57321 +000322r 1 DF .hibytes 57322 +000323r 1 DF .hibytes 57323 +000324r 1 DF .hibytes 57324 +000325r 1 DF .hibytes 57325 +000326r 1 DF .hibytes 57326 +000327r 1 DF .hibytes 57327 +000328r 1 DF .hibytes 57328 +000329r 1 DF .hibytes 57329 +00032Ar 1 DF .hibytes 57330 +00032Br 1 DF .hibytes 57331 +00032Cr 1 DF .hibytes 57332 +00032Dr 1 DF .hibytes 57333 +00032Er 1 DF .hibytes 57334 +00032Fr 1 DF .hibytes 57335 +000330r 1 DF .hibytes 57336 +000331r 1 DF .hibytes 57337 +000332r 1 DF .hibytes 57338 +000333r 1 DF .hibytes 57339 +000334r 1 DF .hibytes 57340 +000335r 1 DF .hibytes 57341 +000336r 1 DF .hibytes 57342 +000337r 1 DF .hibytes 57343 +000338r 1 E0 .hibytes 57344 +000339r 1 E0 .hibytes 57345 +00033Ar 1 E0 .hibytes 57346 +00033Br 1 E0 .hibytes 57347 +00033Cr 1 E0 .hibytes 57348 +00033Dr 1 E0 .hibytes 57349 +00033Er 1 E0 .hibytes 57350 +00033Fr 1 E0 .hibytes 57351 +000340r 1 E0 .hibytes 57352 +000341r 1 E0 .hibytes 57353 +000342r 1 E0 .hibytes 57354 +000343r 1 E0 .hibytes 57355 +000344r 1 E0 .hibytes 57356 +000345r 1 E0 .hibytes 57357 +000346r 1 E0 .hibytes 57358 +000347r 1 E0 .hibytes 57359 +000348r 1 EF .hibytes 61409 +000349r 1 EF .hibytes 61410 +00034Ar 1 EF .hibytes 61411 +00034Br 1 EF .hibytes 61412 +00034Cr 1 EF .hibytes 61413 +00034Dr 1 EF .hibytes 61414 +00034Er 1 EF .hibytes 61415 +00034Fr 1 EF .hibytes 61416 +000350r 1 EF .hibytes 61417 +000351r 1 EF .hibytes 61418 +000352r 1 EF .hibytes 61419 +000353r 1 EF .hibytes 61420 +000354r 1 EF .hibytes 61421 +000355r 1 EF .hibytes 61422 +000356r 1 EF .hibytes 61423 +000357r 1 EF .hibytes 61424 +000358r 1 EF .hibytes 61425 +000359r 1 EF .hibytes 61426 +00035Ar 1 EF .hibytes 61427 +00035Br 1 EF .hibytes 61428 +00035Cr 1 EF .hibytes 61429 +00035Dr 1 EF .hibytes 61430 +00035Er 1 EF .hibytes 61431 +00035Fr 1 EF .hibytes 61432 +000360r 1 EF .hibytes 61433 +000361r 1 EF .hibytes 61434 +000362r 1 EF .hibytes 61435 +000363r 1 EF .hibytes 61436 +000364r 1 EF .hibytes 61437 +000365r 1 EF .hibytes 61438 +000366r 1 EF .hibytes 61439 +000367r 1 F0 .hibytes 61440 +000368r 1 F0 .hibytes 61441 +000369r 1 F0 .hibytes 61442 +00036Ar 1 F0 .hibytes 61443 +00036Br 1 F0 .hibytes 61444 +00036Cr 1 F0 .hibytes 61445 +00036Dr 1 F0 .hibytes 61446 +00036Er 1 F0 .hibytes 61447 +00036Fr 1 F0 .hibytes 61448 +000370r 1 F0 .hibytes 61449 +000371r 1 F0 .hibytes 61450 +000372r 1 F0 .hibytes 61451 +000373r 1 F0 .hibytes 61452 +000374r 1 F0 .hibytes 61453 +000375r 1 F0 .hibytes 61454 +000376r 1 F0 .hibytes 61455 +000377r 1 FF .hibytes 65505 +000378r 1 FF .hibytes 65506 +000379r 1 FF .hibytes 65507 +00037Ar 1 FF .hibytes 65508 +00037Br 1 FF .hibytes 65509 +00037Cr 1 FF .hibytes 65510 +00037Dr 1 FF .hibytes 65511 +00037Er 1 FF .hibytes 65512 +00037Fr 1 FF .hibytes 65513 +000380r 1 FF .hibytes 65514 +000381r 1 FF .hibytes 65515 +000382r 1 FF .hibytes 65516 +000383r 1 FF .hibytes 65517 +000384r 1 FF .hibytes 65518 +000385r 1 FF .hibytes 65519 +000386r 1 FF .hibytes 65520 +000387r 1 FF .hibytes 65521 +000388r 1 FF .hibytes 65522 +000389r 1 FF .hibytes 65523 +00038Ar 1 FF .hibytes 65524 +00038Br 1 FF .hibytes 65525 +00038Cr 1 FF .hibytes 65526 +00038Dr 1 FF .hibytes 65527 +00038Er 1 FF .hibytes 65528 +00038Fr 1 FF .hibytes 65529 +000390r 1 FF .hibytes 65530 +000391r 1 FF .hibytes 65531 +000392r 1 FF .hibytes 65532 +000393r 1 FF .hibytes 65533 +000394r 1 FF .hibytes 65534 +000395r 1 FF .hibytes 65535 000396r 1 -000396r 1 ; hex values -000396r 1 00 .hibytes $0 -000397r 1 00 .hibytes $1 -000398r 1 00 .hibytes $2 -000399r 1 00 .hibytes $3 -00039Ar 1 00 .hibytes $4 -00039Br 1 00 .hibytes $5 -00039Cr 1 00 .hibytes $6 -00039Dr 1 00 .hibytes $7 -00039Er 1 00 .hibytes $8 -00039Fr 1 00 .hibytes $9 -0003A0r 1 00 .hibytes $a -0003A1r 1 00 .hibytes $b -0003A2r 1 00 .hibytes $c -0003A3r 1 00 .hibytes $d -0003A4r 1 00 .hibytes $e -0003A5r 1 00 .hibytes $f -0003A6r 1 00 .hibytes $10 -0003A7r 1 00 .hibytes $11 -0003A8r 1 00 .hibytes $12 -0003A9r 1 00 .hibytes $13 -0003AAr 1 00 .hibytes $70 -0003ABr 1 00 .hibytes $71 -0003ACr 1 00 .hibytes $72 -0003ADr 1 00 .hibytes $73 -0003AEr 1 00 .hibytes $74 -0003AFr 1 00 .hibytes $75 -0003B0r 1 00 .hibytes $76 -0003B1r 1 00 .hibytes $77 -0003B2r 1 00 .hibytes $78 -0003B3r 1 00 .hibytes $79 -0003B4r 1 00 .hibytes $7a -0003B5r 1 00 .hibytes $7b -0003B6r 1 00 .hibytes $7c -0003B7r 1 00 .hibytes $7d -0003B8r 1 00 .hibytes $7e -0003B9r 1 00 .hibytes $7f -0003BAr 1 00 .hibytes $80 -0003BBr 1 00 .hibytes $81 -0003BCr 1 00 .hibytes $82 -0003BDr 1 00 .hibytes $83 -0003BEr 1 00 .hibytes $84 -0003BFr 1 00 .hibytes $85 -0003C0r 1 00 .hibytes $86 -0003C1r 1 00 .hibytes $f0 -0003C2r 1 00 .hibytes $f1 -0003C3r 1 00 .hibytes $f2 -0003C4r 1 00 .hibytes $f3 -0003C5r 1 00 .hibytes $f4 -0003C6r 1 00 .hibytes $f5 -0003C7r 1 00 .hibytes $f6 -0003C8r 1 00 .hibytes $f7 -0003C9r 1 00 .hibytes $f8 -0003CAr 1 00 .hibytes $f9 -0003CBr 1 00 .hibytes $fa -0003CCr 1 00 .hibytes $fb -0003CDr 1 00 .hibytes $fc -0003CEr 1 00 .hibytes $fd -0003CFr 1 00 .hibytes $fe -0003D0r 1 00 .hibytes $ff -0003D1r 1 01 .hibytes $100 -0003D2r 1 01 .hibytes $101 -0003D3r 1 01 .hibytes $102 -0003D4r 1 01 .hibytes $103 -0003D5r 1 0F .hibytes $fd2 -0003D6r 1 0F .hibytes $fd3 -0003D7r 1 0F .hibytes $fd4 -0003D8r 1 0F .hibytes $fd5 -0003D9r 1 0F .hibytes $fd6 -0003DAr 1 0F .hibytes $fd7 -0003DBr 1 0F .hibytes $fd8 -0003DCr 1 0F .hibytes $fd9 -0003DDr 1 0F .hibytes $fda -0003DEr 1 0F .hibytes $fdb -0003DFr 1 0F .hibytes $fdc -0003E0r 1 0F .hibytes $fdd -0003E1r 1 0F .hibytes $fde -0003E2r 1 0F .hibytes $fdf -0003E3r 1 0F .hibytes $fe0 -0003E4r 1 0F .hibytes $fe1 -0003E5r 1 0F .hibytes $fe2 -0003E6r 1 0F .hibytes $fe3 -0003E7r 1 0F .hibytes $fe4 -0003E8r 1 0F .hibytes $fe5 -0003E9r 1 0F .hibytes $fe6 -0003EAr 1 0F .hibytes $fe7 -0003EBr 1 0F .hibytes $fe8 -0003ECr 1 0F .hibytes $fe9 -0003EDr 1 0F .hibytes $fea -0003EEr 1 0F .hibytes $feb -0003EFr 1 0F .hibytes $fec -0003F0r 1 0F .hibytes $fed -0003F1r 1 0F .hibytes $fee -0003F2r 1 0F .hibytes $fef -0003F3r 1 0F .hibytes $ff0 -0003F4r 1 0F .hibytes $ff1 -0003F5r 1 0F .hibytes $ff2 -0003F6r 1 0F .hibytes $ff3 -0003F7r 1 0F .hibytes $ff4 -0003F8r 1 0F .hibytes $ff5 -0003F9r 1 0F .hibytes $ff6 -0003FAr 1 0F .hibytes $ff7 -0003FBr 1 0F .hibytes $ff8 -0003FCr 1 0F .hibytes $ff9 -0003FDr 1 0F .hibytes $ffa -0003FEr 1 0F .hibytes $ffb -0003FFr 1 0F .hibytes $ffc -000400r 1 0F .hibytes $ffd -000401r 1 0F .hibytes $ffe -000402r 1 0F .hibytes $fff -000403r 1 10 .hibytes $1000 -000404r 1 10 .hibytes $1001 -000405r 1 10 .hibytes $1002 -000406r 1 10 .hibytes $1003 -000407r 1 10 .hibytes $1004 -000408r 1 10 .hibytes $1005 -000409r 1 10 .hibytes $1006 -00040Ar 1 10 .hibytes $1007 -00040Br 1 10 .hibytes $1008 -00040Cr 1 7F .hibytes $7ff0 -00040Dr 1 7F .hibytes $7ff1 -00040Er 1 7F .hibytes $7ff2 -00040Fr 1 7F .hibytes $7ff3 -000410r 1 7F .hibytes $7ff4 -000411r 1 7F .hibytes $7ff5 -000412r 1 7F .hibytes $7ff6 -000413r 1 7F .hibytes $7ff7 -000414r 1 7F .hibytes $7ff8 -000415r 1 7F .hibytes $7ff9 -000416r 1 7F .hibytes $7ffa -000417r 1 7F .hibytes $7ffb -000418r 1 7F .hibytes $7ffc -000419r 1 7F .hibytes $7ffd -00041Ar 1 7F .hibytes $7ffe -00041Br 1 7F .hibytes $7fff -00041Cr 1 80 .hibytes $8000 -00041Dr 1 80 .hibytes $8001 -00041Er 1 80 .hibytes $8002 -00041Fr 1 80 .hibytes $8003 -000420r 1 80 .hibytes $8004 -000421r 1 80 .hibytes $8005 -000422r 1 80 .hibytes $8006 -000423r 1 80 .hibytes $8007 -000424r 1 80 .hibytes $8008 -000425r 1 80 .hibytes $8009 -000426r 1 80 .hibytes $800a -000427r 1 80 .hibytes $800b -000428r 1 9F .hibytes $9fe1 -000429r 1 9F .hibytes $9fe2 -00042Ar 1 9F .hibytes $9fe3 -00042Br 1 9F .hibytes $9fe4 -00042Cr 1 9F .hibytes $9fe5 -00042Dr 1 9F .hibytes $9fe6 -00042Er 1 9F .hibytes $9fe7 -00042Fr 1 9F .hibytes $9fe8 -000430r 1 9F .hibytes $9fe9 -000431r 1 9F .hibytes $9fea -000432r 1 9F .hibytes $9feb -000433r 1 9F .hibytes $9fec -000434r 1 9F .hibytes $9fed -000435r 1 9F .hibytes $9fee -000436r 1 9F .hibytes $9fef -000437r 1 9F .hibytes $9ff0 -000438r 1 9F .hibytes $9ff1 -000439r 1 9F .hibytes $9ff2 -00043Ar 1 9F .hibytes $9ff3 -00043Br 1 9F .hibytes $9ff4 -00043Cr 1 9F .hibytes $9ff5 -00043Dr 1 9F .hibytes $9ff6 -00043Er 1 9F .hibytes $9ff7 -00043Fr 1 9F .hibytes $9ff8 -000440r 1 9F .hibytes $9ff9 -000441r 1 9F .hibytes $9ffa -000442r 1 9F .hibytes $9ffb -000443r 1 9F .hibytes $9ffc -000444r 1 9F .hibytes $9ffd -000445r 1 9F .hibytes $9ffe -000446r 1 9F .hibytes $9fff -000447r 1 A0 .hibytes $a000 -000448r 1 A0 .hibytes $a001 -000449r 1 A0 .hibytes $a002 -00044Ar 1 A0 .hibytes $a003 -00044Br 1 A0 .hibytes $a004 -00044Cr 1 A0 .hibytes $a005 -00044Dr 1 A0 .hibytes $a006 -00044Er 1 A0 .hibytes $a007 -00044Fr 1 A0 .hibytes $a008 -000450r 1 A0 .hibytes $a009 -000451r 1 A0 .hibytes $a00a -000452r 1 A0 .hibytes $a00b -000453r 1 A0 .hibytes $a00c -000454r 1 A0 .hibytes $a00d -000455r 1 A0 .hibytes $a00e -000456r 1 A0 .hibytes $a00f -000457r 1 AF .hibytes $afe1 -000458r 1 AF .hibytes $afe2 -000459r 1 AF .hibytes $afe3 -00045Ar 1 AF .hibytes $afe4 -00045Br 1 AF .hibytes $afe5 -00045Cr 1 AF .hibytes $afe6 -00045Dr 1 AF .hibytes $afe7 -00045Er 1 AF .hibytes $afe8 -00045Fr 1 AF .hibytes $afe9 -000460r 1 AF .hibytes $afea -000461r 1 AF .hibytes $afeb -000462r 1 AF .hibytes $afec -000463r 1 AF .hibytes $afed -000464r 1 AF .hibytes $afee -000465r 1 AF .hibytes $afef -000466r 1 AF .hibytes $aff0 -000467r 1 AF .hibytes $aff1 -000468r 1 AF .hibytes $aff2 -000469r 1 AF .hibytes $aff3 -00046Ar 1 AF .hibytes $aff4 -00046Br 1 AF .hibytes $aff5 -00046Cr 1 AF .hibytes $aff6 -00046Dr 1 AF .hibytes $aff7 -00046Er 1 AF .hibytes $aff8 -00046Fr 1 AF .hibytes $aff9 -000470r 1 AF .hibytes $affa -000471r 1 AF .hibytes $affb -000472r 1 AF .hibytes $affc -000473r 1 AF .hibytes $affd -000474r 1 AF .hibytes $affe -000475r 1 AF .hibytes $afff -000476r 1 B0 .hibytes $b000 -000477r 1 B0 .hibytes $b001 -000478r 1 B0 .hibytes $b002 -000479r 1 B0 .hibytes $b003 -00047Ar 1 B0 .hibytes $b004 -00047Br 1 B0 .hibytes $b005 -00047Cr 1 B0 .hibytes $b006 -00047Dr 1 B0 .hibytes $b007 -00047Er 1 B0 .hibytes $b008 -00047Fr 1 B0 .hibytes $b009 -000480r 1 B0 .hibytes $b00a -000481r 1 B0 .hibytes $b00b -000482r 1 B0 .hibytes $b00c -000483r 1 B0 .hibytes $b00d -000484r 1 B0 .hibytes $b00e -000485r 1 B0 .hibytes $b00f -000486r 1 BF .hibytes $bfe1 -000487r 1 BF .hibytes $bfe2 -000488r 1 BF .hibytes $bfe3 -000489r 1 BF .hibytes $bfe4 -00048Ar 1 BF .hibytes $bfe5 -00048Br 1 BF .hibytes $bfe6 -00048Cr 1 BF .hibytes $bfe7 -00048Dr 1 BF .hibytes $bfe8 -00048Er 1 BF .hibytes $bfe9 -00048Fr 1 BF .hibytes $bfea -000490r 1 BF .hibytes $bfeb -000491r 1 BF .hibytes $bfec -000492r 1 BF .hibytes $bfed -000493r 1 BF .hibytes $bfee -000494r 1 BF .hibytes $bfef -000495r 1 BF .hibytes $bff0 -000496r 1 BF .hibytes $bff1 -000497r 1 BF .hibytes $bff2 -000498r 1 BF .hibytes $bff3 -000499r 1 BF .hibytes $bff4 -00049Ar 1 BF .hibytes $bff5 -00049Br 1 BF .hibytes $bff6 -00049Cr 1 BF .hibytes $bff7 -00049Dr 1 BF .hibytes $bff8 -00049Er 1 BF .hibytes $bff9 -00049Fr 1 BF .hibytes $bffa -0004A0r 1 BF .hibytes $bffb -0004A1r 1 BF .hibytes $bffc -0004A2r 1 BF .hibytes $bffd -0004A3r 1 BF .hibytes $bffe -0004A4r 1 BF .hibytes $bfff -0004A5r 1 C0 .hibytes $c000 -0004A6r 1 C0 .hibytes $c001 -0004A7r 1 C0 .hibytes $c002 -0004A8r 1 C0 .hibytes $c003 -0004A9r 1 C0 .hibytes $c004 -0004AAr 1 C0 .hibytes $c005 -0004ABr 1 C0 .hibytes $c006 -0004ACr 1 C0 .hibytes $c007 -0004ADr 1 C0 .hibytes $c008 -0004AEr 1 C0 .hibytes $c009 -0004AFr 1 C0 .hibytes $c00a -0004B0r 1 C0 .hibytes $c00b -0004B1r 1 C0 .hibytes $c00c -0004B2r 1 C0 .hibytes $c00d -0004B3r 1 C0 .hibytes $c00e -0004B4r 1 C0 .hibytes $c00f -0004B5r 1 CF .hibytes $cfe1 -0004B6r 1 CF .hibytes $cfe2 -0004B7r 1 CF .hibytes $cfe3 -0004B8r 1 CF .hibytes $cfe4 -0004B9r 1 CF .hibytes $cfe5 -0004BAr 1 CF .hibytes $cfe6 -0004BBr 1 CF .hibytes $cfe7 -0004BCr 1 CF .hibytes $cfe8 -0004BDr 1 CF .hibytes $cfe9 -0004BEr 1 CF .hibytes $cfea -0004BFr 1 CF .hibytes $cfeb -0004C0r 1 CF .hibytes $cfec -0004C1r 1 CF .hibytes $cfed -0004C2r 1 CF .hibytes $cfee -0004C3r 1 CF .hibytes $cfef -0004C4r 1 CF .hibytes $cff0 -0004C5r 1 CF .hibytes $cff1 -0004C6r 1 CF .hibytes $cff2 -0004C7r 1 CF .hibytes $cff3 -0004C8r 1 CF .hibytes $cff4 -0004C9r 1 CF .hibytes $cff5 -0004CAr 1 CF .hibytes $cff6 -0004CBr 1 CF .hibytes $cff7 -0004CCr 1 CF .hibytes $cff8 -0004CDr 1 CF .hibytes $cff9 -0004CEr 1 CF .hibytes $cffa -0004CFr 1 CF .hibytes $cffb -0004D0r 1 CF .hibytes $cffc -0004D1r 1 CF .hibytes $cffd -0004D2r 1 CF .hibytes $cffe -0004D3r 1 CF .hibytes $cfff -0004D4r 1 D0 .hibytes $d000 -0004D5r 1 D0 .hibytes $d001 -0004D6r 1 D0 .hibytes $d002 -0004D7r 1 D0 .hibytes $d003 -0004D8r 1 D0 .hibytes $d004 -0004D9r 1 D0 .hibytes $d005 -0004DAr 1 D0 .hibytes $d006 -0004DBr 1 D0 .hibytes $d007 -0004DCr 1 D0 .hibytes $d008 -0004DDr 1 D0 .hibytes $d009 -0004DEr 1 D0 .hibytes $d00a -0004DFr 1 D0 .hibytes $d00b -0004E0r 1 D0 .hibytes $d00c -0004E1r 1 D0 .hibytes $d00d -0004E2r 1 D0 .hibytes $d00e -0004E3r 1 D0 .hibytes $d00f -0004E4r 1 DF .hibytes $dfe1 -0004E5r 1 DF .hibytes $dfe2 -0004E6r 1 DF .hibytes $dfe3 -0004E7r 1 DF .hibytes $dfe4 -0004E8r 1 DF .hibytes $dfe5 -0004E9r 1 DF .hibytes $dfe6 -0004EAr 1 DF .hibytes $dfe7 -0004EBr 1 DF .hibytes $dfe8 -0004ECr 1 DF .hibytes $dfe9 -0004EDr 1 DF .hibytes $dfea -0004EEr 1 DF .hibytes $dfeb -0004EFr 1 DF .hibytes $dfec -0004F0r 1 DF .hibytes $dfed -0004F1r 1 DF .hibytes $dfee -0004F2r 1 DF .hibytes $dfef -0004F3r 1 DF .hibytes $dff0 -0004F4r 1 DF .hibytes $dff1 -0004F5r 1 DF .hibytes $dff2 -0004F6r 1 DF .hibytes $dff3 -0004F7r 1 DF .hibytes $dff4 -0004F8r 1 DF .hibytes $dff5 -0004F9r 1 DF .hibytes $dff6 -0004FAr 1 DF .hibytes $dff7 -0004FBr 1 DF .hibytes $dff8 -0004FCr 1 DF .hibytes $dff9 -0004FDr 1 DF .hibytes $dffa -0004FEr 1 DF .hibytes $dffb -0004FFr 1 DF .hibytes $dffc -000500r 1 DF .hibytes $dffd -000501r 1 DF .hibytes $dffe -000502r 1 DF .hibytes $dfff -000503r 1 E0 .hibytes $e000 -000504r 1 E0 .hibytes $e001 -000505r 1 E0 .hibytes $e002 -000506r 1 E0 .hibytes $e003 -000507r 1 E0 .hibytes $e004 -000508r 1 E0 .hibytes $e005 -000509r 1 E0 .hibytes $e006 -00050Ar 1 E0 .hibytes $e007 -00050Br 1 E0 .hibytes $e008 -00050Cr 1 E0 .hibytes $e009 -00050Dr 1 E0 .hibytes $e00a -00050Er 1 E0 .hibytes $e00b -00050Fr 1 E0 .hibytes $e00c -000510r 1 E0 .hibytes $e00d -000511r 1 E0 .hibytes $e00e -000512r 1 E0 .hibytes $e00f -000513r 1 EF .hibytes $efe1 -000514r 1 EF .hibytes $efe2 -000515r 1 EF .hibytes $efe3 -000516r 1 EF .hibytes $efe4 -000517r 1 EF .hibytes $efe5 -000518r 1 EF .hibytes $efe6 -000519r 1 EF .hibytes $efe7 -00051Ar 1 EF .hibytes $efe8 -00051Br 1 EF .hibytes $efe9 -00051Cr 1 EF .hibytes $efea -00051Dr 1 EF .hibytes $efeb -00051Er 1 EF .hibytes $efec -00051Fr 1 EF .hibytes $efed -000520r 1 EF .hibytes $efee -000521r 1 EF .hibytes $efef -000522r 1 EF .hibytes $eff0 -000523r 1 EF .hibytes $eff1 -000524r 1 EF .hibytes $eff2 -000525r 1 EF .hibytes $eff3 -000526r 1 EF .hibytes $eff4 -000527r 1 EF .hibytes $eff5 -000528r 1 EF .hibytes $eff6 -000529r 1 EF .hibytes $eff7 -00052Ar 1 EF .hibytes $eff8 -00052Br 1 EF .hibytes $eff9 -00052Cr 1 EF .hibytes $effa -00052Dr 1 EF .hibytes $effb -00052Er 1 EF .hibytes $effc -00052Fr 1 EF .hibytes $effd -000530r 1 EF .hibytes $effe -000531r 1 EF .hibytes $efff -000532r 1 F0 .hibytes $f000 -000533r 1 F0 .hibytes $f001 -000534r 1 F0 .hibytes $f002 -000535r 1 F0 .hibytes $f003 -000536r 1 F0 .hibytes $f004 -000537r 1 F0 .hibytes $f005 -000538r 1 F0 .hibytes $f006 -000539r 1 F0 .hibytes $f007 -00053Ar 1 F0 .hibytes $f008 -00053Br 1 F0 .hibytes $f009 -00053Cr 1 F0 .hibytes $f00a -00053Dr 1 F0 .hibytes $f00b -00053Er 1 F0 .hibytes $f00c -00053Fr 1 F0 .hibytes $f00d -000540r 1 F0 .hibytes $f00e -000541r 1 F0 .hibytes $f00f -000542r 1 FF .hibytes $ffe1 -000543r 1 FF .hibytes $ffe2 -000544r 1 FF .hibytes $ffe3 -000545r 1 FF .hibytes $ffe4 -000546r 1 FF .hibytes $ffe5 -000547r 1 FF .hibytes $ffe6 -000548r 1 FF .hibytes $ffe7 -000549r 1 FF .hibytes $ffe8 -00054Ar 1 FF .hibytes $ffe9 -00054Br 1 FF .hibytes $ffea -00054Cr 1 FF .hibytes $ffeb -00054Dr 1 FF .hibytes $ffec -00054Er 1 FF .hibytes $ffed -00054Fr 1 FF .hibytes $ffee -000550r 1 FF .hibytes $ffef -000551r 1 FF .hibytes $fff0 -000552r 1 FF .hibytes $fff1 -000553r 1 FF .hibytes $fff2 -000554r 1 FF .hibytes $fff3 -000555r 1 FF .hibytes $fff4 -000556r 1 FF .hibytes $fff5 -000557r 1 FF .hibytes $fff6 -000558r 1 FF .hibytes $fff7 -000559r 1 FF .hibytes $fff8 -00055Ar 1 FF .hibytes $fff9 -00055Br 1 FF .hibytes $fffa -00055Cr 1 FF .hibytes $fffb -00055Dr 1 FF .hibytes $fffc -00055Er 1 FF .hibytes $fffd -00055Fr 1 FF .hibytes $fffe -000560r 1 FF .hibytes $ffff +000396r 1 ; hex values +000396r 1 00 .hibytes $0 +000397r 1 00 .hibytes $1 +000398r 1 00 .hibytes $2 +000399r 1 00 .hibytes $3 +00039Ar 1 00 .hibytes $4 +00039Br 1 00 .hibytes $5 +00039Cr 1 00 .hibytes $6 +00039Dr 1 00 .hibytes $7 +00039Er 1 00 .hibytes $8 +00039Fr 1 00 .hibytes $9 +0003A0r 1 00 .hibytes $a +0003A1r 1 00 .hibytes $b +0003A2r 1 00 .hibytes $c +0003A3r 1 00 .hibytes $d +0003A4r 1 00 .hibytes $e +0003A5r 1 00 .hibytes $f +0003A6r 1 00 .hibytes $10 +0003A7r 1 00 .hibytes $11 +0003A8r 1 00 .hibytes $12 +0003A9r 1 00 .hibytes $13 +0003AAr 1 00 .hibytes $70 +0003ABr 1 00 .hibytes $71 +0003ACr 1 00 .hibytes $72 +0003ADr 1 00 .hibytes $73 +0003AEr 1 00 .hibytes $74 +0003AFr 1 00 .hibytes $75 +0003B0r 1 00 .hibytes $76 +0003B1r 1 00 .hibytes $77 +0003B2r 1 00 .hibytes $78 +0003B3r 1 00 .hibytes $79 +0003B4r 1 00 .hibytes $7a +0003B5r 1 00 .hibytes $7b +0003B6r 1 00 .hibytes $7c +0003B7r 1 00 .hibytes $7d +0003B8r 1 00 .hibytes $7e +0003B9r 1 00 .hibytes $7f +0003BAr 1 00 .hibytes $80 +0003BBr 1 00 .hibytes $81 +0003BCr 1 00 .hibytes $82 +0003BDr 1 00 .hibytes $83 +0003BEr 1 00 .hibytes $84 +0003BFr 1 00 .hibytes $85 +0003C0r 1 00 .hibytes $86 +0003C1r 1 00 .hibytes $f0 +0003C2r 1 00 .hibytes $f1 +0003C3r 1 00 .hibytes $f2 +0003C4r 1 00 .hibytes $f3 +0003C5r 1 00 .hibytes $f4 +0003C6r 1 00 .hibytes $f5 +0003C7r 1 00 .hibytes $f6 +0003C8r 1 00 .hibytes $f7 +0003C9r 1 00 .hibytes $f8 +0003CAr 1 00 .hibytes $f9 +0003CBr 1 00 .hibytes $fa +0003CCr 1 00 .hibytes $fb +0003CDr 1 00 .hibytes $fc +0003CEr 1 00 .hibytes $fd +0003CFr 1 00 .hibytes $fe +0003D0r 1 00 .hibytes $ff +0003D1r 1 01 .hibytes $100 +0003D2r 1 01 .hibytes $101 +0003D3r 1 01 .hibytes $102 +0003D4r 1 01 .hibytes $103 +0003D5r 1 0F .hibytes $fd2 +0003D6r 1 0F .hibytes $fd3 +0003D7r 1 0F .hibytes $fd4 +0003D8r 1 0F .hibytes $fd5 +0003D9r 1 0F .hibytes $fd6 +0003DAr 1 0F .hibytes $fd7 +0003DBr 1 0F .hibytes $fd8 +0003DCr 1 0F .hibytes $fd9 +0003DDr 1 0F .hibytes $fda +0003DEr 1 0F .hibytes $fdb +0003DFr 1 0F .hibytes $fdc +0003E0r 1 0F .hibytes $fdd +0003E1r 1 0F .hibytes $fde +0003E2r 1 0F .hibytes $fdf +0003E3r 1 0F .hibytes $fe0 +0003E4r 1 0F .hibytes $fe1 +0003E5r 1 0F .hibytes $fe2 +0003E6r 1 0F .hibytes $fe3 +0003E7r 1 0F .hibytes $fe4 +0003E8r 1 0F .hibytes $fe5 +0003E9r 1 0F .hibytes $fe6 +0003EAr 1 0F .hibytes $fe7 +0003EBr 1 0F .hibytes $fe8 +0003ECr 1 0F .hibytes $fe9 +0003EDr 1 0F .hibytes $fea +0003EEr 1 0F .hibytes $feb +0003EFr 1 0F .hibytes $fec +0003F0r 1 0F .hibytes $fed +0003F1r 1 0F .hibytes $fee +0003F2r 1 0F .hibytes $fef +0003F3r 1 0F .hibytes $ff0 +0003F4r 1 0F .hibytes $ff1 +0003F5r 1 0F .hibytes $ff2 +0003F6r 1 0F .hibytes $ff3 +0003F7r 1 0F .hibytes $ff4 +0003F8r 1 0F .hibytes $ff5 +0003F9r 1 0F .hibytes $ff6 +0003FAr 1 0F .hibytes $ff7 +0003FBr 1 0F .hibytes $ff8 +0003FCr 1 0F .hibytes $ff9 +0003FDr 1 0F .hibytes $ffa +0003FEr 1 0F .hibytes $ffb +0003FFr 1 0F .hibytes $ffc +000400r 1 0F .hibytes $ffd +000401r 1 0F .hibytes $ffe +000402r 1 0F .hibytes $fff +000403r 1 10 .hibytes $1000 +000404r 1 10 .hibytes $1001 +000405r 1 10 .hibytes $1002 +000406r 1 10 .hibytes $1003 +000407r 1 10 .hibytes $1004 +000408r 1 10 .hibytes $1005 +000409r 1 10 .hibytes $1006 +00040Ar 1 10 .hibytes $1007 +00040Br 1 10 .hibytes $1008 +00040Cr 1 7F .hibytes $7ff0 +00040Dr 1 7F .hibytes $7ff1 +00040Er 1 7F .hibytes $7ff2 +00040Fr 1 7F .hibytes $7ff3 +000410r 1 7F .hibytes $7ff4 +000411r 1 7F .hibytes $7ff5 +000412r 1 7F .hibytes $7ff6 +000413r 1 7F .hibytes $7ff7 +000414r 1 7F .hibytes $7ff8 +000415r 1 7F .hibytes $7ff9 +000416r 1 7F .hibytes $7ffa +000417r 1 7F .hibytes $7ffb +000418r 1 7F .hibytes $7ffc +000419r 1 7F .hibytes $7ffd +00041Ar 1 7F .hibytes $7ffe +00041Br 1 7F .hibytes $7fff +00041Cr 1 80 .hibytes $8000 +00041Dr 1 80 .hibytes $8001 +00041Er 1 80 .hibytes $8002 +00041Fr 1 80 .hibytes $8003 +000420r 1 80 .hibytes $8004 +000421r 1 80 .hibytes $8005 +000422r 1 80 .hibytes $8006 +000423r 1 80 .hibytes $8007 +000424r 1 80 .hibytes $8008 +000425r 1 80 .hibytes $8009 +000426r 1 80 .hibytes $800a +000427r 1 80 .hibytes $800b +000428r 1 9F .hibytes $9fe1 +000429r 1 9F .hibytes $9fe2 +00042Ar 1 9F .hibytes $9fe3 +00042Br 1 9F .hibytes $9fe4 +00042Cr 1 9F .hibytes $9fe5 +00042Dr 1 9F .hibytes $9fe6 +00042Er 1 9F .hibytes $9fe7 +00042Fr 1 9F .hibytes $9fe8 +000430r 1 9F .hibytes $9fe9 +000431r 1 9F .hibytes $9fea +000432r 1 9F .hibytes $9feb +000433r 1 9F .hibytes $9fec +000434r 1 9F .hibytes $9fed +000435r 1 9F .hibytes $9fee +000436r 1 9F .hibytes $9fef +000437r 1 9F .hibytes $9ff0 +000438r 1 9F .hibytes $9ff1 +000439r 1 9F .hibytes $9ff2 +00043Ar 1 9F .hibytes $9ff3 +00043Br 1 9F .hibytes $9ff4 +00043Cr 1 9F .hibytes $9ff5 +00043Dr 1 9F .hibytes $9ff6 +00043Er 1 9F .hibytes $9ff7 +00043Fr 1 9F .hibytes $9ff8 +000440r 1 9F .hibytes $9ff9 +000441r 1 9F .hibytes $9ffa +000442r 1 9F .hibytes $9ffb +000443r 1 9F .hibytes $9ffc +000444r 1 9F .hibytes $9ffd +000445r 1 9F .hibytes $9ffe +000446r 1 9F .hibytes $9fff +000447r 1 A0 .hibytes $a000 +000448r 1 A0 .hibytes $a001 +000449r 1 A0 .hibytes $a002 +00044Ar 1 A0 .hibytes $a003 +00044Br 1 A0 .hibytes $a004 +00044Cr 1 A0 .hibytes $a005 +00044Dr 1 A0 .hibytes $a006 +00044Er 1 A0 .hibytes $a007 +00044Fr 1 A0 .hibytes $a008 +000450r 1 A0 .hibytes $a009 +000451r 1 A0 .hibytes $a00a +000452r 1 A0 .hibytes $a00b +000453r 1 A0 .hibytes $a00c +000454r 1 A0 .hibytes $a00d +000455r 1 A0 .hibytes $a00e +000456r 1 A0 .hibytes $a00f +000457r 1 AF .hibytes $afe1 +000458r 1 AF .hibytes $afe2 +000459r 1 AF .hibytes $afe3 +00045Ar 1 AF .hibytes $afe4 +00045Br 1 AF .hibytes $afe5 +00045Cr 1 AF .hibytes $afe6 +00045Dr 1 AF .hibytes $afe7 +00045Er 1 AF .hibytes $afe8 +00045Fr 1 AF .hibytes $afe9 +000460r 1 AF .hibytes $afea +000461r 1 AF .hibytes $afeb +000462r 1 AF .hibytes $afec +000463r 1 AF .hibytes $afed +000464r 1 AF .hibytes $afee +000465r 1 AF .hibytes $afef +000466r 1 AF .hibytes $aff0 +000467r 1 AF .hibytes $aff1 +000468r 1 AF .hibytes $aff2 +000469r 1 AF .hibytes $aff3 +00046Ar 1 AF .hibytes $aff4 +00046Br 1 AF .hibytes $aff5 +00046Cr 1 AF .hibytes $aff6 +00046Dr 1 AF .hibytes $aff7 +00046Er 1 AF .hibytes $aff8 +00046Fr 1 AF .hibytes $aff9 +000470r 1 AF .hibytes $affa +000471r 1 AF .hibytes $affb +000472r 1 AF .hibytes $affc +000473r 1 AF .hibytes $affd +000474r 1 AF .hibytes $affe +000475r 1 AF .hibytes $afff +000476r 1 B0 .hibytes $b000 +000477r 1 B0 .hibytes $b001 +000478r 1 B0 .hibytes $b002 +000479r 1 B0 .hibytes $b003 +00047Ar 1 B0 .hibytes $b004 +00047Br 1 B0 .hibytes $b005 +00047Cr 1 B0 .hibytes $b006 +00047Dr 1 B0 .hibytes $b007 +00047Er 1 B0 .hibytes $b008 +00047Fr 1 B0 .hibytes $b009 +000480r 1 B0 .hibytes $b00a +000481r 1 B0 .hibytes $b00b +000482r 1 B0 .hibytes $b00c +000483r 1 B0 .hibytes $b00d +000484r 1 B0 .hibytes $b00e +000485r 1 B0 .hibytes $b00f +000486r 1 BF .hibytes $bfe1 +000487r 1 BF .hibytes $bfe2 +000488r 1 BF .hibytes $bfe3 +000489r 1 BF .hibytes $bfe4 +00048Ar 1 BF .hibytes $bfe5 +00048Br 1 BF .hibytes $bfe6 +00048Cr 1 BF .hibytes $bfe7 +00048Dr 1 BF .hibytes $bfe8 +00048Er 1 BF .hibytes $bfe9 +00048Fr 1 BF .hibytes $bfea +000490r 1 BF .hibytes $bfeb +000491r 1 BF .hibytes $bfec +000492r 1 BF .hibytes $bfed +000493r 1 BF .hibytes $bfee +000494r 1 BF .hibytes $bfef +000495r 1 BF .hibytes $bff0 +000496r 1 BF .hibytes $bff1 +000497r 1 BF .hibytes $bff2 +000498r 1 BF .hibytes $bff3 +000499r 1 BF .hibytes $bff4 +00049Ar 1 BF .hibytes $bff5 +00049Br 1 BF .hibytes $bff6 +00049Cr 1 BF .hibytes $bff7 +00049Dr 1 BF .hibytes $bff8 +00049Er 1 BF .hibytes $bff9 +00049Fr 1 BF .hibytes $bffa +0004A0r 1 BF .hibytes $bffb +0004A1r 1 BF .hibytes $bffc +0004A2r 1 BF .hibytes $bffd +0004A3r 1 BF .hibytes $bffe +0004A4r 1 BF .hibytes $bfff +0004A5r 1 C0 .hibytes $c000 +0004A6r 1 C0 .hibytes $c001 +0004A7r 1 C0 .hibytes $c002 +0004A8r 1 C0 .hibytes $c003 +0004A9r 1 C0 .hibytes $c004 +0004AAr 1 C0 .hibytes $c005 +0004ABr 1 C0 .hibytes $c006 +0004ACr 1 C0 .hibytes $c007 +0004ADr 1 C0 .hibytes $c008 +0004AEr 1 C0 .hibytes $c009 +0004AFr 1 C0 .hibytes $c00a +0004B0r 1 C0 .hibytes $c00b +0004B1r 1 C0 .hibytes $c00c +0004B2r 1 C0 .hibytes $c00d +0004B3r 1 C0 .hibytes $c00e +0004B4r 1 C0 .hibytes $c00f +0004B5r 1 CF .hibytes $cfe1 +0004B6r 1 CF .hibytes $cfe2 +0004B7r 1 CF .hibytes $cfe3 +0004B8r 1 CF .hibytes $cfe4 +0004B9r 1 CF .hibytes $cfe5 +0004BAr 1 CF .hibytes $cfe6 +0004BBr 1 CF .hibytes $cfe7 +0004BCr 1 CF .hibytes $cfe8 +0004BDr 1 CF .hibytes $cfe9 +0004BEr 1 CF .hibytes $cfea +0004BFr 1 CF .hibytes $cfeb +0004C0r 1 CF .hibytes $cfec +0004C1r 1 CF .hibytes $cfed +0004C2r 1 CF .hibytes $cfee +0004C3r 1 CF .hibytes $cfef +0004C4r 1 CF .hibytes $cff0 +0004C5r 1 CF .hibytes $cff1 +0004C6r 1 CF .hibytes $cff2 +0004C7r 1 CF .hibytes $cff3 +0004C8r 1 CF .hibytes $cff4 +0004C9r 1 CF .hibytes $cff5 +0004CAr 1 CF .hibytes $cff6 +0004CBr 1 CF .hibytes $cff7 +0004CCr 1 CF .hibytes $cff8 +0004CDr 1 CF .hibytes $cff9 +0004CEr 1 CF .hibytes $cffa +0004CFr 1 CF .hibytes $cffb +0004D0r 1 CF .hibytes $cffc +0004D1r 1 CF .hibytes $cffd +0004D2r 1 CF .hibytes $cffe +0004D3r 1 CF .hibytes $cfff +0004D4r 1 D0 .hibytes $d000 +0004D5r 1 D0 .hibytes $d001 +0004D6r 1 D0 .hibytes $d002 +0004D7r 1 D0 .hibytes $d003 +0004D8r 1 D0 .hibytes $d004 +0004D9r 1 D0 .hibytes $d005 +0004DAr 1 D0 .hibytes $d006 +0004DBr 1 D0 .hibytes $d007 +0004DCr 1 D0 .hibytes $d008 +0004DDr 1 D0 .hibytes $d009 +0004DEr 1 D0 .hibytes $d00a +0004DFr 1 D0 .hibytes $d00b +0004E0r 1 D0 .hibytes $d00c +0004E1r 1 D0 .hibytes $d00d +0004E2r 1 D0 .hibytes $d00e +0004E3r 1 D0 .hibytes $d00f +0004E4r 1 DF .hibytes $dfe1 +0004E5r 1 DF .hibytes $dfe2 +0004E6r 1 DF .hibytes $dfe3 +0004E7r 1 DF .hibytes $dfe4 +0004E8r 1 DF .hibytes $dfe5 +0004E9r 1 DF .hibytes $dfe6 +0004EAr 1 DF .hibytes $dfe7 +0004EBr 1 DF .hibytes $dfe8 +0004ECr 1 DF .hibytes $dfe9 +0004EDr 1 DF .hibytes $dfea +0004EEr 1 DF .hibytes $dfeb +0004EFr 1 DF .hibytes $dfec +0004F0r 1 DF .hibytes $dfed +0004F1r 1 DF .hibytes $dfee +0004F2r 1 DF .hibytes $dfef +0004F3r 1 DF .hibytes $dff0 +0004F4r 1 DF .hibytes $dff1 +0004F5r 1 DF .hibytes $dff2 +0004F6r 1 DF .hibytes $dff3 +0004F7r 1 DF .hibytes $dff4 +0004F8r 1 DF .hibytes $dff5 +0004F9r 1 DF .hibytes $dff6 +0004FAr 1 DF .hibytes $dff7 +0004FBr 1 DF .hibytes $dff8 +0004FCr 1 DF .hibytes $dff9 +0004FDr 1 DF .hibytes $dffa +0004FEr 1 DF .hibytes $dffb +0004FFr 1 DF .hibytes $dffc +000500r 1 DF .hibytes $dffd +000501r 1 DF .hibytes $dffe +000502r 1 DF .hibytes $dfff +000503r 1 E0 .hibytes $e000 +000504r 1 E0 .hibytes $e001 +000505r 1 E0 .hibytes $e002 +000506r 1 E0 .hibytes $e003 +000507r 1 E0 .hibytes $e004 +000508r 1 E0 .hibytes $e005 +000509r 1 E0 .hibytes $e006 +00050Ar 1 E0 .hibytes $e007 +00050Br 1 E0 .hibytes $e008 +00050Cr 1 E0 .hibytes $e009 +00050Dr 1 E0 .hibytes $e00a +00050Er 1 E0 .hibytes $e00b +00050Fr 1 E0 .hibytes $e00c +000510r 1 E0 .hibytes $e00d +000511r 1 E0 .hibytes $e00e +000512r 1 E0 .hibytes $e00f +000513r 1 EF .hibytes $efe1 +000514r 1 EF .hibytes $efe2 +000515r 1 EF .hibytes $efe3 +000516r 1 EF .hibytes $efe4 +000517r 1 EF .hibytes $efe5 +000518r 1 EF .hibytes $efe6 +000519r 1 EF .hibytes $efe7 +00051Ar 1 EF .hibytes $efe8 +00051Br 1 EF .hibytes $efe9 +00051Cr 1 EF .hibytes $efea +00051Dr 1 EF .hibytes $efeb +00051Er 1 EF .hibytes $efec +00051Fr 1 EF .hibytes $efed +000520r 1 EF .hibytes $efee +000521r 1 EF .hibytes $efef +000522r 1 EF .hibytes $eff0 +000523r 1 EF .hibytes $eff1 +000524r 1 EF .hibytes $eff2 +000525r 1 EF .hibytes $eff3 +000526r 1 EF .hibytes $eff4 +000527r 1 EF .hibytes $eff5 +000528r 1 EF .hibytes $eff6 +000529r 1 EF .hibytes $eff7 +00052Ar 1 EF .hibytes $eff8 +00052Br 1 EF .hibytes $eff9 +00052Cr 1 EF .hibytes $effa +00052Dr 1 EF .hibytes $effb +00052Er 1 EF .hibytes $effc +00052Fr 1 EF .hibytes $effd +000530r 1 EF .hibytes $effe +000531r 1 EF .hibytes $efff +000532r 1 F0 .hibytes $f000 +000533r 1 F0 .hibytes $f001 +000534r 1 F0 .hibytes $f002 +000535r 1 F0 .hibytes $f003 +000536r 1 F0 .hibytes $f004 +000537r 1 F0 .hibytes $f005 +000538r 1 F0 .hibytes $f006 +000539r 1 F0 .hibytes $f007 +00053Ar 1 F0 .hibytes $f008 +00053Br 1 F0 .hibytes $f009 +00053Cr 1 F0 .hibytes $f00a +00053Dr 1 F0 .hibytes $f00b +00053Er 1 F0 .hibytes $f00c +00053Fr 1 F0 .hibytes $f00d +000540r 1 F0 .hibytes $f00e +000541r 1 F0 .hibytes $f00f +000542r 1 FF .hibytes $ffe1 +000543r 1 FF .hibytes $ffe2 +000544r 1 FF .hibytes $ffe3 +000545r 1 FF .hibytes $ffe4 +000546r 1 FF .hibytes $ffe5 +000547r 1 FF .hibytes $ffe6 +000548r 1 FF .hibytes $ffe7 +000549r 1 FF .hibytes $ffe8 +00054Ar 1 FF .hibytes $ffe9 +00054Br 1 FF .hibytes $ffea +00054Cr 1 FF .hibytes $ffeb +00054Dr 1 FF .hibytes $ffec +00054Er 1 FF .hibytes $ffed +00054Fr 1 FF .hibytes $ffee +000550r 1 FF .hibytes $ffef +000551r 1 FF .hibytes $fff0 +000552r 1 FF .hibytes $fff1 +000553r 1 FF .hibytes $fff2 +000554r 1 FF .hibytes $fff3 +000555r 1 FF .hibytes $fff4 +000556r 1 FF .hibytes $fff5 +000557r 1 FF .hibytes $fff6 +000558r 1 FF .hibytes $fff7 +000559r 1 FF .hibytes $fff8 +00055Ar 1 FF .hibytes $fff9 +00055Br 1 FF .hibytes $fffa +00055Cr 1 FF .hibytes $fffb +00055Dr 1 FF .hibytes $fffc +00055Er 1 FF .hibytes $fffd +00055Fr 1 FF .hibytes $fffe +000560r 1 FF .hibytes $ffff 000561r 1 -000561r 1 ; hex values, uppercase -000561r 1 00 .hibytes $0 -000562r 1 00 .hibytes $1 -000563r 1 00 .hibytes $2 -000564r 1 00 .hibytes $3 -000565r 1 00 .hibytes $4 -000566r 1 00 .hibytes $5 -000567r 1 00 .hibytes $6 -000568r 1 00 .hibytes $7 -000569r 1 00 .hibytes $8 -00056Ar 1 00 .hibytes $9 -00056Br 1 00 .hibytes $A -00056Cr 1 00 .hibytes $B -00056Dr 1 00 .hibytes $C -00056Er 1 00 .hibytes $D -00056Fr 1 00 .hibytes $E -000570r 1 00 .hibytes $F -000571r 1 00 .hibytes $10 -000572r 1 00 .hibytes $11 -000573r 1 00 .hibytes $12 -000574r 1 00 .hibytes $13 -000575r 1 00 .hibytes $70 -000576r 1 00 .hibytes $71 -000577r 1 00 .hibytes $72 -000578r 1 00 .hibytes $73 -000579r 1 00 .hibytes $74 -00057Ar 1 00 .hibytes $75 -00057Br 1 00 .hibytes $76 -00057Cr 1 00 .hibytes $77 -00057Dr 1 00 .hibytes $78 -00057Er 1 00 .hibytes $79 -00057Fr 1 00 .hibytes $7A -000580r 1 00 .hibytes $7B -000581r 1 00 .hibytes $7C -000582r 1 00 .hibytes $7D -000583r 1 00 .hibytes $7E -000584r 1 00 .hibytes $7F -000585r 1 00 .hibytes $80 -000586r 1 00 .hibytes $81 -000587r 1 00 .hibytes $82 -000588r 1 00 .hibytes $83 -000589r 1 00 .hibytes $84 -00058Ar 1 00 .hibytes $85 -00058Br 1 00 .hibytes $86 -00058Cr 1 00 .hibytes $F0 -00058Dr 1 00 .hibytes $F1 -00058Er 1 00 .hibytes $F2 -00058Fr 1 00 .hibytes $F3 -000590r 1 00 .hibytes $F4 -000591r 1 00 .hibytes $F5 -000592r 1 00 .hibytes $F6 -000593r 1 00 .hibytes $F7 -000594r 1 00 .hibytes $F8 -000595r 1 00 .hibytes $F9 -000596r 1 00 .hibytes $FA -000597r 1 00 .hibytes $FB -000598r 1 00 .hibytes $FC -000599r 1 00 .hibytes $FD -00059Ar 1 00 .hibytes $FE -00059Br 1 00 .hibytes $FF -00059Cr 1 01 .hibytes $100 -00059Dr 1 01 .hibytes $101 -00059Er 1 01 .hibytes $102 -00059Fr 1 01 .hibytes $103 -0005A0r 1 0F .hibytes $FD2 -0005A1r 1 0F .hibytes $FD3 -0005A2r 1 0F .hibytes $FD4 -0005A3r 1 0F .hibytes $FD5 -0005A4r 1 0F .hibytes $FD6 -0005A5r 1 0F .hibytes $FD7 -0005A6r 1 0F .hibytes $FD8 -0005A7r 1 0F .hibytes $FD9 -0005A8r 1 0F .hibytes $FDA -0005A9r 1 0F .hibytes $FDB -0005AAr 1 0F .hibytes $FDC -0005ABr 1 0F .hibytes $FDD -0005ACr 1 0F .hibytes $FDE -0005ADr 1 0F .hibytes $FDF -0005AEr 1 0F .hibytes $FE0 -0005AFr 1 0F .hibytes $FE1 -0005B0r 1 0F .hibytes $FE2 -0005B1r 1 0F .hibytes $FE3 -0005B2r 1 0F .hibytes $FE4 -0005B3r 1 0F .hibytes $FE5 -0005B4r 1 0F .hibytes $FE6 -0005B5r 1 0F .hibytes $FE7 -0005B6r 1 0F .hibytes $FE8 -0005B7r 1 0F .hibytes $FE9 -0005B8r 1 0F .hibytes $FEA -0005B9r 1 0F .hibytes $FEB -0005BAr 1 0F .hibytes $FEC -0005BBr 1 0F .hibytes $FED -0005BCr 1 0F .hibytes $FEE -0005BDr 1 0F .hibytes $FEF -0005BEr 1 0F .hibytes $FF0 -0005BFr 1 0F .hibytes $FF1 -0005C0r 1 0F .hibytes $FF2 -0005C1r 1 0F .hibytes $FF3 -0005C2r 1 0F .hibytes $FF4 -0005C3r 1 0F .hibytes $FF5 -0005C4r 1 0F .hibytes $FF6 -0005C5r 1 0F .hibytes $FF7 -0005C6r 1 0F .hibytes $FF8 -0005C7r 1 0F .hibytes $FF9 -0005C8r 1 0F .hibytes $FFA -0005C9r 1 0F .hibytes $FFB -0005CAr 1 0F .hibytes $FFC -0005CBr 1 0F .hibytes $FFD -0005CCr 1 0F .hibytes $FFE -0005CDr 1 0F .hibytes $FFF -0005CEr 1 10 .hibytes $1000 -0005CFr 1 10 .hibytes $1001 -0005D0r 1 10 .hibytes $1002 -0005D1r 1 10 .hibytes $1003 -0005D2r 1 10 .hibytes $1004 -0005D3r 1 10 .hibytes $1005 -0005D4r 1 10 .hibytes $1006 -0005D5r 1 10 .hibytes $1007 -0005D6r 1 10 .hibytes $1008 -0005D7r 1 7F .hibytes $7FF0 -0005D8r 1 7F .hibytes $7FF1 -0005D9r 1 7F .hibytes $7FF2 -0005DAr 1 7F .hibytes $7FF3 -0005DBr 1 7F .hibytes $7FF4 -0005DCr 1 7F .hibytes $7FF5 -0005DDr 1 7F .hibytes $7FF6 -0005DEr 1 7F .hibytes $7FF7 -0005DFr 1 7F .hibytes $7FF8 -0005E0r 1 7F .hibytes $7FF9 -0005E1r 1 7F .hibytes $7FFA -0005E2r 1 7F .hibytes $7FFB -0005E3r 1 7F .hibytes $7FFC -0005E4r 1 7F .hibytes $7FFD -0005E5r 1 7F .hibytes $7FFE -0005E6r 1 7F .hibytes $7FFF -0005E7r 1 80 .hibytes $8000 -0005E8r 1 80 .hibytes $8001 -0005E9r 1 80 .hibytes $8002 -0005EAr 1 80 .hibytes $8003 -0005EBr 1 80 .hibytes $8004 -0005ECr 1 80 .hibytes $8005 -0005EDr 1 80 .hibytes $8006 -0005EEr 1 80 .hibytes $8007 -0005EFr 1 80 .hibytes $8008 -0005F0r 1 80 .hibytes $8009 -0005F1r 1 80 .hibytes $800A -0005F2r 1 80 .hibytes $800B -0005F3r 1 9F .hibytes $9FE1 -0005F4r 1 9F .hibytes $9FE2 -0005F5r 1 9F .hibytes $9FE3 -0005F6r 1 9F .hibytes $9FE4 -0005F7r 1 9F .hibytes $9FE5 -0005F8r 1 9F .hibytes $9FE6 -0005F9r 1 9F .hibytes $9FE7 -0005FAr 1 9F .hibytes $9FE8 -0005FBr 1 9F .hibytes $9FE9 -0005FCr 1 9F .hibytes $9FEA -0005FDr 1 9F .hibytes $9FEB -0005FEr 1 9F .hibytes $9FEC -0005FFr 1 9F .hibytes $9FED -000600r 1 9F .hibytes $9FEE -000601r 1 9F .hibytes $9FEF -000602r 1 9F .hibytes $9FF0 -000603r 1 9F .hibytes $9FF1 -000604r 1 9F .hibytes $9FF2 -000605r 1 9F .hibytes $9FF3 -000606r 1 9F .hibytes $9FF4 -000607r 1 9F .hibytes $9FF5 -000608r 1 9F .hibytes $9FF6 -000609r 1 9F .hibytes $9FF7 -00060Ar 1 9F .hibytes $9FF8 -00060Br 1 9F .hibytes $9FF9 -00060Cr 1 9F .hibytes $9FFA -00060Dr 1 9F .hibytes $9FFB -00060Er 1 9F .hibytes $9FFC -00060Fr 1 9F .hibytes $9FFD -000610r 1 9F .hibytes $9FFE -000611r 1 9F .hibytes $9FFF -000612r 1 A0 .hibytes $A000 -000613r 1 A0 .hibytes $A001 -000614r 1 A0 .hibytes $A002 -000615r 1 A0 .hibytes $A003 -000616r 1 A0 .hibytes $A004 -000617r 1 A0 .hibytes $A005 -000618r 1 A0 .hibytes $A006 -000619r 1 A0 .hibytes $A007 -00061Ar 1 A0 .hibytes $A008 -00061Br 1 A0 .hibytes $A009 -00061Cr 1 A0 .hibytes $A00A -00061Dr 1 A0 .hibytes $A00B -00061Er 1 A0 .hibytes $A00C -00061Fr 1 A0 .hibytes $A00D -000620r 1 A0 .hibytes $A00E -000621r 1 A0 .hibytes $A00F -000622r 1 AF .hibytes $AFE1 -000623r 1 AF .hibytes $AFE2 -000624r 1 AF .hibytes $AFE3 -000625r 1 AF .hibytes $AFE4 -000626r 1 AF .hibytes $AFE5 -000627r 1 AF .hibytes $AFE6 -000628r 1 AF .hibytes $AFE7 -000629r 1 AF .hibytes $AFE8 -00062Ar 1 AF .hibytes $AFE9 -00062Br 1 AF .hibytes $AFEA -00062Cr 1 AF .hibytes $AFEB -00062Dr 1 AF .hibytes $AFEC -00062Er 1 AF .hibytes $AFED -00062Fr 1 AF .hibytes $AFEE -000630r 1 AF .hibytes $AFEF -000631r 1 AF .hibytes $AFF0 -000632r 1 AF .hibytes $AFF1 -000633r 1 AF .hibytes $AFF2 -000634r 1 AF .hibytes $AFF3 -000635r 1 AF .hibytes $AFF4 -000636r 1 AF .hibytes $AFF5 -000637r 1 AF .hibytes $AFF6 -000638r 1 AF .hibytes $AFF7 -000639r 1 AF .hibytes $AFF8 -00063Ar 1 AF .hibytes $AFF9 -00063Br 1 AF .hibytes $AFFA -00063Cr 1 AF .hibytes $AFFB -00063Dr 1 AF .hibytes $AFFC -00063Er 1 AF .hibytes $AFFD -00063Fr 1 AF .hibytes $AFFE -000640r 1 AF .hibytes $AFFF -000641r 1 B0 .hibytes $B000 -000642r 1 B0 .hibytes $B001 -000643r 1 B0 .hibytes $B002 -000644r 1 B0 .hibytes $B003 -000645r 1 B0 .hibytes $B004 -000646r 1 B0 .hibytes $B005 -000647r 1 B0 .hibytes $B006 -000648r 1 B0 .hibytes $B007 -000649r 1 B0 .hibytes $B008 -00064Ar 1 B0 .hibytes $B009 -00064Br 1 B0 .hibytes $B00A -00064Cr 1 B0 .hibytes $B00B -00064Dr 1 B0 .hibytes $B00C -00064Er 1 B0 .hibytes $B00D -00064Fr 1 B0 .hibytes $B00E -000650r 1 B0 .hibytes $B00F -000651r 1 BF .hibytes $BFE1 -000652r 1 BF .hibytes $BFE2 -000653r 1 BF .hibytes $BFE3 -000654r 1 BF .hibytes $BFE4 -000655r 1 BF .hibytes $BFE5 -000656r 1 BF .hibytes $BFE6 -000657r 1 BF .hibytes $BFE7 -000658r 1 BF .hibytes $BFE8 -000659r 1 BF .hibytes $BFE9 -00065Ar 1 BF .hibytes $BFEA -00065Br 1 BF .hibytes $BFEB -00065Cr 1 BF .hibytes $BFEC -00065Dr 1 BF .hibytes $BFED -00065Er 1 BF .hibytes $BFEE -00065Fr 1 BF .hibytes $BFEF -000660r 1 BF .hibytes $BFF0 -000661r 1 BF .hibytes $BFF1 -000662r 1 BF .hibytes $BFF2 -000663r 1 BF .hibytes $BFF3 -000664r 1 BF .hibytes $BFF4 -000665r 1 BF .hibytes $BFF5 -000666r 1 BF .hibytes $BFF6 -000667r 1 BF .hibytes $BFF7 -000668r 1 BF .hibytes $BFF8 -000669r 1 BF .hibytes $BFF9 -00066Ar 1 BF .hibytes $BFFA -00066Br 1 BF .hibytes $BFFB -00066Cr 1 BF .hibytes $BFFC -00066Dr 1 BF .hibytes $BFFD -00066Er 1 BF .hibytes $BFFE -00066Fr 1 BF .hibytes $BFFF -000670r 1 C0 .hibytes $C000 -000671r 1 C0 .hibytes $C001 -000672r 1 C0 .hibytes $C002 -000673r 1 C0 .hibytes $C003 -000674r 1 C0 .hibytes $C004 -000675r 1 C0 .hibytes $C005 -000676r 1 C0 .hibytes $C006 -000677r 1 C0 .hibytes $C007 -000678r 1 C0 .hibytes $C008 -000679r 1 C0 .hibytes $C009 -00067Ar 1 C0 .hibytes $C00A -00067Br 1 C0 .hibytes $C00B -00067Cr 1 C0 .hibytes $C00C -00067Dr 1 C0 .hibytes $C00D -00067Er 1 C0 .hibytes $C00E -00067Fr 1 C0 .hibytes $C00F -000680r 1 CF .hibytes $CFE1 -000681r 1 CF .hibytes $CFE2 -000682r 1 CF .hibytes $CFE3 -000683r 1 CF .hibytes $CFE4 -000684r 1 CF .hibytes $CFE5 -000685r 1 CF .hibytes $CFE6 -000686r 1 CF .hibytes $CFE7 -000687r 1 CF .hibytes $CFE8 -000688r 1 CF .hibytes $CFE9 -000689r 1 CF .hibytes $CFEA -00068Ar 1 CF .hibytes $CFEB -00068Br 1 CF .hibytes $CFEC -00068Cr 1 CF .hibytes $CFED -00068Dr 1 CF .hibytes $CFEE -00068Er 1 CF .hibytes $CFEF -00068Fr 1 CF .hibytes $CFF0 -000690r 1 CF .hibytes $CFF1 -000691r 1 CF .hibytes $CFF2 -000692r 1 CF .hibytes $CFF3 -000693r 1 CF .hibytes $CFF4 -000694r 1 CF .hibytes $CFF5 -000695r 1 CF .hibytes $CFF6 -000696r 1 CF .hibytes $CFF7 -000697r 1 CF .hibytes $CFF8 -000698r 1 CF .hibytes $CFF9 -000699r 1 CF .hibytes $CFFA -00069Ar 1 CF .hibytes $CFFB -00069Br 1 CF .hibytes $CFFC -00069Cr 1 CF .hibytes $CFFD -00069Dr 1 CF .hibytes $CFFE -00069Er 1 CF .hibytes $CFFF -00069Fr 1 D0 .hibytes $D000 -0006A0r 1 D0 .hibytes $D001 -0006A1r 1 D0 .hibytes $D002 -0006A2r 1 D0 .hibytes $D003 -0006A3r 1 D0 .hibytes $D004 -0006A4r 1 D0 .hibytes $D005 -0006A5r 1 D0 .hibytes $D006 -0006A6r 1 D0 .hibytes $D007 -0006A7r 1 D0 .hibytes $D008 -0006A8r 1 D0 .hibytes $D009 -0006A9r 1 D0 .hibytes $D00A -0006AAr 1 D0 .hibytes $D00B -0006ABr 1 D0 .hibytes $D00C -0006ACr 1 D0 .hibytes $D00D -0006ADr 1 D0 .hibytes $D00E -0006AEr 1 D0 .hibytes $D00F -0006AFr 1 DF .hibytes $DFE1 -0006B0r 1 DF .hibytes $DFE2 -0006B1r 1 DF .hibytes $DFE3 -0006B2r 1 DF .hibytes $DFE4 -0006B3r 1 DF .hibytes $DFE5 -0006B4r 1 DF .hibytes $DFE6 -0006B5r 1 DF .hibytes $DFE7 -0006B6r 1 DF .hibytes $DFE8 -0006B7r 1 DF .hibytes $DFE9 -0006B8r 1 DF .hibytes $DFEA -0006B9r 1 DF .hibytes $DFEB -0006BAr 1 DF .hibytes $DFEC -0006BBr 1 DF .hibytes $DFED -0006BCr 1 DF .hibytes $DFEE -0006BDr 1 DF .hibytes $DFEF -0006BEr 1 DF .hibytes $DFF0 -0006BFr 1 DF .hibytes $DFF1 -0006C0r 1 DF .hibytes $DFF2 -0006C1r 1 DF .hibytes $DFF3 -0006C2r 1 DF .hibytes $DFF4 -0006C3r 1 DF .hibytes $DFF5 -0006C4r 1 DF .hibytes $DFF6 -0006C5r 1 DF .hibytes $DFF7 -0006C6r 1 DF .hibytes $DFF8 -0006C7r 1 DF .hibytes $DFF9 -0006C8r 1 DF .hibytes $DFFA -0006C9r 1 DF .hibytes $DFFB -0006CAr 1 DF .hibytes $DFFC -0006CBr 1 DF .hibytes $DFFD -0006CCr 1 DF .hibytes $DFFE -0006CDr 1 DF .hibytes $DFFF -0006CEr 1 E0 .hibytes $E000 -0006CFr 1 E0 .hibytes $E001 -0006D0r 1 E0 .hibytes $E002 -0006D1r 1 E0 .hibytes $E003 -0006D2r 1 E0 .hibytes $E004 -0006D3r 1 E0 .hibytes $E005 -0006D4r 1 E0 .hibytes $E006 -0006D5r 1 E0 .hibytes $E007 -0006D6r 1 E0 .hibytes $E008 -0006D7r 1 E0 .hibytes $E009 -0006D8r 1 E0 .hibytes $E00A -0006D9r 1 E0 .hibytes $E00B -0006DAr 1 E0 .hibytes $E00C -0006DBr 1 E0 .hibytes $E00D -0006DCr 1 E0 .hibytes $E00E -0006DDr 1 E0 .hibytes $E00F -0006DEr 1 EF .hibytes $EFE1 -0006DFr 1 EF .hibytes $EFE2 -0006E0r 1 EF .hibytes $EFE3 -0006E1r 1 EF .hibytes $EFE4 -0006E2r 1 EF .hibytes $EFE5 -0006E3r 1 EF .hibytes $EFE6 -0006E4r 1 EF .hibytes $EFE7 -0006E5r 1 EF .hibytes $EFE8 -0006E6r 1 EF .hibytes $EFE9 -0006E7r 1 EF .hibytes $EFEA -0006E8r 1 EF .hibytes $EFEB -0006E9r 1 EF .hibytes $EFEC -0006EAr 1 EF .hibytes $EFED -0006EBr 1 EF .hibytes $EFEE -0006ECr 1 EF .hibytes $EFEF -0006EDr 1 EF .hibytes $EFF0 -0006EEr 1 EF .hibytes $EFF1 -0006EFr 1 EF .hibytes $EFF2 -0006F0r 1 EF .hibytes $EFF3 -0006F1r 1 EF .hibytes $EFF4 -0006F2r 1 EF .hibytes $EFF5 -0006F3r 1 EF .hibytes $EFF6 -0006F4r 1 EF .hibytes $EFF7 -0006F5r 1 EF .hibytes $EFF8 -0006F6r 1 EF .hibytes $EFF9 -0006F7r 1 EF .hibytes $EFFA -0006F8r 1 EF .hibytes $EFFB -0006F9r 1 EF .hibytes $EFFC -0006FAr 1 EF .hibytes $EFFD -0006FBr 1 EF .hibytes $EFFE -0006FCr 1 EF .hibytes $EFFF -0006FDr 1 F0 .hibytes $F000 -0006FEr 1 F0 .hibytes $F001 -0006FFr 1 F0 .hibytes $F002 -000700r 1 F0 .hibytes $F003 -000701r 1 F0 .hibytes $F004 -000702r 1 F0 .hibytes $F005 -000703r 1 F0 .hibytes $F006 -000704r 1 F0 .hibytes $F007 -000705r 1 F0 .hibytes $F008 -000706r 1 F0 .hibytes $F009 -000707r 1 F0 .hibytes $F00A -000708r 1 F0 .hibytes $F00B -000709r 1 F0 .hibytes $F00C -00070Ar 1 F0 .hibytes $F00D -00070Br 1 F0 .hibytes $F00E -00070Cr 1 F0 .hibytes $F00F -00070Dr 1 FF .hibytes $FFE1 -00070Er 1 FF .hibytes $FFE2 -00070Fr 1 FF .hibytes $FFE3 -000710r 1 FF .hibytes $FFE4 -000711r 1 FF .hibytes $FFE5 -000712r 1 FF .hibytes $FFE6 -000713r 1 FF .hibytes $FFE7 -000714r 1 FF .hibytes $FFE8 -000715r 1 FF .hibytes $FFE9 -000716r 1 FF .hibytes $FFEA -000717r 1 FF .hibytes $FFEB -000718r 1 FF .hibytes $FFEC -000719r 1 FF .hibytes $FFED -00071Ar 1 FF .hibytes $FFEE -00071Br 1 FF .hibytes $FFEF -00071Cr 1 FF .hibytes $FFF0 -00071Dr 1 FF .hibytes $FFF1 -00071Er 1 FF .hibytes $FFF2 -00071Fr 1 FF .hibytes $FFF3 -000720r 1 FF .hibytes $FFF4 -000721r 1 FF .hibytes $FFF5 -000722r 1 FF .hibytes $FFF6 -000723r 1 FF .hibytes $FFF7 -000724r 1 FF .hibytes $FFF8 -000725r 1 FF .hibytes $FFF9 -000726r 1 FF .hibytes $FFFA -000727r 1 FF .hibytes $FFFB -000728r 1 FF .hibytes $FFFC -000729r 1 FF .hibytes $FFFD -00072Ar 1 FF .hibytes $FFFE -00072Br 1 FF .hibytes $FFFF +000561r 1 ; hex values, uppercase +000561r 1 00 .hibytes $0 +000562r 1 00 .hibytes $1 +000563r 1 00 .hibytes $2 +000564r 1 00 .hibytes $3 +000565r 1 00 .hibytes $4 +000566r 1 00 .hibytes $5 +000567r 1 00 .hibytes $6 +000568r 1 00 .hibytes $7 +000569r 1 00 .hibytes $8 +00056Ar 1 00 .hibytes $9 +00056Br 1 00 .hibytes $A +00056Cr 1 00 .hibytes $B +00056Dr 1 00 .hibytes $C +00056Er 1 00 .hibytes $D +00056Fr 1 00 .hibytes $E +000570r 1 00 .hibytes $F +000571r 1 00 .hibytes $10 +000572r 1 00 .hibytes $11 +000573r 1 00 .hibytes $12 +000574r 1 00 .hibytes $13 +000575r 1 00 .hibytes $70 +000576r 1 00 .hibytes $71 +000577r 1 00 .hibytes $72 +000578r 1 00 .hibytes $73 +000579r 1 00 .hibytes $74 +00057Ar 1 00 .hibytes $75 +00057Br 1 00 .hibytes $76 +00057Cr 1 00 .hibytes $77 +00057Dr 1 00 .hibytes $78 +00057Er 1 00 .hibytes $79 +00057Fr 1 00 .hibytes $7A +000580r 1 00 .hibytes $7B +000581r 1 00 .hibytes $7C +000582r 1 00 .hibytes $7D +000583r 1 00 .hibytes $7E +000584r 1 00 .hibytes $7F +000585r 1 00 .hibytes $80 +000586r 1 00 .hibytes $81 +000587r 1 00 .hibytes $82 +000588r 1 00 .hibytes $83 +000589r 1 00 .hibytes $84 +00058Ar 1 00 .hibytes $85 +00058Br 1 00 .hibytes $86 +00058Cr 1 00 .hibytes $F0 +00058Dr 1 00 .hibytes $F1 +00058Er 1 00 .hibytes $F2 +00058Fr 1 00 .hibytes $F3 +000590r 1 00 .hibytes $F4 +000591r 1 00 .hibytes $F5 +000592r 1 00 .hibytes $F6 +000593r 1 00 .hibytes $F7 +000594r 1 00 .hibytes $F8 +000595r 1 00 .hibytes $F9 +000596r 1 00 .hibytes $FA +000597r 1 00 .hibytes $FB +000598r 1 00 .hibytes $FC +000599r 1 00 .hibytes $FD +00059Ar 1 00 .hibytes $FE +00059Br 1 00 .hibytes $FF +00059Cr 1 01 .hibytes $100 +00059Dr 1 01 .hibytes $101 +00059Er 1 01 .hibytes $102 +00059Fr 1 01 .hibytes $103 +0005A0r 1 0F .hibytes $FD2 +0005A1r 1 0F .hibytes $FD3 +0005A2r 1 0F .hibytes $FD4 +0005A3r 1 0F .hibytes $FD5 +0005A4r 1 0F .hibytes $FD6 +0005A5r 1 0F .hibytes $FD7 +0005A6r 1 0F .hibytes $FD8 +0005A7r 1 0F .hibytes $FD9 +0005A8r 1 0F .hibytes $FDA +0005A9r 1 0F .hibytes $FDB +0005AAr 1 0F .hibytes $FDC +0005ABr 1 0F .hibytes $FDD +0005ACr 1 0F .hibytes $FDE +0005ADr 1 0F .hibytes $FDF +0005AEr 1 0F .hibytes $FE0 +0005AFr 1 0F .hibytes $FE1 +0005B0r 1 0F .hibytes $FE2 +0005B1r 1 0F .hibytes $FE3 +0005B2r 1 0F .hibytes $FE4 +0005B3r 1 0F .hibytes $FE5 +0005B4r 1 0F .hibytes $FE6 +0005B5r 1 0F .hibytes $FE7 +0005B6r 1 0F .hibytes $FE8 +0005B7r 1 0F .hibytes $FE9 +0005B8r 1 0F .hibytes $FEA +0005B9r 1 0F .hibytes $FEB +0005BAr 1 0F .hibytes $FEC +0005BBr 1 0F .hibytes $FED +0005BCr 1 0F .hibytes $FEE +0005BDr 1 0F .hibytes $FEF +0005BEr 1 0F .hibytes $FF0 +0005BFr 1 0F .hibytes $FF1 +0005C0r 1 0F .hibytes $FF2 +0005C1r 1 0F .hibytes $FF3 +0005C2r 1 0F .hibytes $FF4 +0005C3r 1 0F .hibytes $FF5 +0005C4r 1 0F .hibytes $FF6 +0005C5r 1 0F .hibytes $FF7 +0005C6r 1 0F .hibytes $FF8 +0005C7r 1 0F .hibytes $FF9 +0005C8r 1 0F .hibytes $FFA +0005C9r 1 0F .hibytes $FFB +0005CAr 1 0F .hibytes $FFC +0005CBr 1 0F .hibytes $FFD +0005CCr 1 0F .hibytes $FFE +0005CDr 1 0F .hibytes $FFF +0005CEr 1 10 .hibytes $1000 +0005CFr 1 10 .hibytes $1001 +0005D0r 1 10 .hibytes $1002 +0005D1r 1 10 .hibytes $1003 +0005D2r 1 10 .hibytes $1004 +0005D3r 1 10 .hibytes $1005 +0005D4r 1 10 .hibytes $1006 +0005D5r 1 10 .hibytes $1007 +0005D6r 1 10 .hibytes $1008 +0005D7r 1 7F .hibytes $7FF0 +0005D8r 1 7F .hibytes $7FF1 +0005D9r 1 7F .hibytes $7FF2 +0005DAr 1 7F .hibytes $7FF3 +0005DBr 1 7F .hibytes $7FF4 +0005DCr 1 7F .hibytes $7FF5 +0005DDr 1 7F .hibytes $7FF6 +0005DEr 1 7F .hibytes $7FF7 +0005DFr 1 7F .hibytes $7FF8 +0005E0r 1 7F .hibytes $7FF9 +0005E1r 1 7F .hibytes $7FFA +0005E2r 1 7F .hibytes $7FFB +0005E3r 1 7F .hibytes $7FFC +0005E4r 1 7F .hibytes $7FFD +0005E5r 1 7F .hibytes $7FFE +0005E6r 1 7F .hibytes $7FFF +0005E7r 1 80 .hibytes $8000 +0005E8r 1 80 .hibytes $8001 +0005E9r 1 80 .hibytes $8002 +0005EAr 1 80 .hibytes $8003 +0005EBr 1 80 .hibytes $8004 +0005ECr 1 80 .hibytes $8005 +0005EDr 1 80 .hibytes $8006 +0005EEr 1 80 .hibytes $8007 +0005EFr 1 80 .hibytes $8008 +0005F0r 1 80 .hibytes $8009 +0005F1r 1 80 .hibytes $800A +0005F2r 1 80 .hibytes $800B +0005F3r 1 9F .hibytes $9FE1 +0005F4r 1 9F .hibytes $9FE2 +0005F5r 1 9F .hibytes $9FE3 +0005F6r 1 9F .hibytes $9FE4 +0005F7r 1 9F .hibytes $9FE5 +0005F8r 1 9F .hibytes $9FE6 +0005F9r 1 9F .hibytes $9FE7 +0005FAr 1 9F .hibytes $9FE8 +0005FBr 1 9F .hibytes $9FE9 +0005FCr 1 9F .hibytes $9FEA +0005FDr 1 9F .hibytes $9FEB +0005FEr 1 9F .hibytes $9FEC +0005FFr 1 9F .hibytes $9FED +000600r 1 9F .hibytes $9FEE +000601r 1 9F .hibytes $9FEF +000602r 1 9F .hibytes $9FF0 +000603r 1 9F .hibytes $9FF1 +000604r 1 9F .hibytes $9FF2 +000605r 1 9F .hibytes $9FF3 +000606r 1 9F .hibytes $9FF4 +000607r 1 9F .hibytes $9FF5 +000608r 1 9F .hibytes $9FF6 +000609r 1 9F .hibytes $9FF7 +00060Ar 1 9F .hibytes $9FF8 +00060Br 1 9F .hibytes $9FF9 +00060Cr 1 9F .hibytes $9FFA +00060Dr 1 9F .hibytes $9FFB +00060Er 1 9F .hibytes $9FFC +00060Fr 1 9F .hibytes $9FFD +000610r 1 9F .hibytes $9FFE +000611r 1 9F .hibytes $9FFF +000612r 1 A0 .hibytes $A000 +000613r 1 A0 .hibytes $A001 +000614r 1 A0 .hibytes $A002 +000615r 1 A0 .hibytes $A003 +000616r 1 A0 .hibytes $A004 +000617r 1 A0 .hibytes $A005 +000618r 1 A0 .hibytes $A006 +000619r 1 A0 .hibytes $A007 +00061Ar 1 A0 .hibytes $A008 +00061Br 1 A0 .hibytes $A009 +00061Cr 1 A0 .hibytes $A00A +00061Dr 1 A0 .hibytes $A00B +00061Er 1 A0 .hibytes $A00C +00061Fr 1 A0 .hibytes $A00D +000620r 1 A0 .hibytes $A00E +000621r 1 A0 .hibytes $A00F +000622r 1 AF .hibytes $AFE1 +000623r 1 AF .hibytes $AFE2 +000624r 1 AF .hibytes $AFE3 +000625r 1 AF .hibytes $AFE4 +000626r 1 AF .hibytes $AFE5 +000627r 1 AF .hibytes $AFE6 +000628r 1 AF .hibytes $AFE7 +000629r 1 AF .hibytes $AFE8 +00062Ar 1 AF .hibytes $AFE9 +00062Br 1 AF .hibytes $AFEA +00062Cr 1 AF .hibytes $AFEB +00062Dr 1 AF .hibytes $AFEC +00062Er 1 AF .hibytes $AFED +00062Fr 1 AF .hibytes $AFEE +000630r 1 AF .hibytes $AFEF +000631r 1 AF .hibytes $AFF0 +000632r 1 AF .hibytes $AFF1 +000633r 1 AF .hibytes $AFF2 +000634r 1 AF .hibytes $AFF3 +000635r 1 AF .hibytes $AFF4 +000636r 1 AF .hibytes $AFF5 +000637r 1 AF .hibytes $AFF6 +000638r 1 AF .hibytes $AFF7 +000639r 1 AF .hibytes $AFF8 +00063Ar 1 AF .hibytes $AFF9 +00063Br 1 AF .hibytes $AFFA +00063Cr 1 AF .hibytes $AFFB +00063Dr 1 AF .hibytes $AFFC +00063Er 1 AF .hibytes $AFFD +00063Fr 1 AF .hibytes $AFFE +000640r 1 AF .hibytes $AFFF +000641r 1 B0 .hibytes $B000 +000642r 1 B0 .hibytes $B001 +000643r 1 B0 .hibytes $B002 +000644r 1 B0 .hibytes $B003 +000645r 1 B0 .hibytes $B004 +000646r 1 B0 .hibytes $B005 +000647r 1 B0 .hibytes $B006 +000648r 1 B0 .hibytes $B007 +000649r 1 B0 .hibytes $B008 +00064Ar 1 B0 .hibytes $B009 +00064Br 1 B0 .hibytes $B00A +00064Cr 1 B0 .hibytes $B00B +00064Dr 1 B0 .hibytes $B00C +00064Er 1 B0 .hibytes $B00D +00064Fr 1 B0 .hibytes $B00E +000650r 1 B0 .hibytes $B00F +000651r 1 BF .hibytes $BFE1 +000652r 1 BF .hibytes $BFE2 +000653r 1 BF .hibytes $BFE3 +000654r 1 BF .hibytes $BFE4 +000655r 1 BF .hibytes $BFE5 +000656r 1 BF .hibytes $BFE6 +000657r 1 BF .hibytes $BFE7 +000658r 1 BF .hibytes $BFE8 +000659r 1 BF .hibytes $BFE9 +00065Ar 1 BF .hibytes $BFEA +00065Br 1 BF .hibytes $BFEB +00065Cr 1 BF .hibytes $BFEC +00065Dr 1 BF .hibytes $BFED +00065Er 1 BF .hibytes $BFEE +00065Fr 1 BF .hibytes $BFEF +000660r 1 BF .hibytes $BFF0 +000661r 1 BF .hibytes $BFF1 +000662r 1 BF .hibytes $BFF2 +000663r 1 BF .hibytes $BFF3 +000664r 1 BF .hibytes $BFF4 +000665r 1 BF .hibytes $BFF5 +000666r 1 BF .hibytes $BFF6 +000667r 1 BF .hibytes $BFF7 +000668r 1 BF .hibytes $BFF8 +000669r 1 BF .hibytes $BFF9 +00066Ar 1 BF .hibytes $BFFA +00066Br 1 BF .hibytes $BFFB +00066Cr 1 BF .hibytes $BFFC +00066Dr 1 BF .hibytes $BFFD +00066Er 1 BF .hibytes $BFFE +00066Fr 1 BF .hibytes $BFFF +000670r 1 C0 .hibytes $C000 +000671r 1 C0 .hibytes $C001 +000672r 1 C0 .hibytes $C002 +000673r 1 C0 .hibytes $C003 +000674r 1 C0 .hibytes $C004 +000675r 1 C0 .hibytes $C005 +000676r 1 C0 .hibytes $C006 +000677r 1 C0 .hibytes $C007 +000678r 1 C0 .hibytes $C008 +000679r 1 C0 .hibytes $C009 +00067Ar 1 C0 .hibytes $C00A +00067Br 1 C0 .hibytes $C00B +00067Cr 1 C0 .hibytes $C00C +00067Dr 1 C0 .hibytes $C00D +00067Er 1 C0 .hibytes $C00E +00067Fr 1 C0 .hibytes $C00F +000680r 1 CF .hibytes $CFE1 +000681r 1 CF .hibytes $CFE2 +000682r 1 CF .hibytes $CFE3 +000683r 1 CF .hibytes $CFE4 +000684r 1 CF .hibytes $CFE5 +000685r 1 CF .hibytes $CFE6 +000686r 1 CF .hibytes $CFE7 +000687r 1 CF .hibytes $CFE8 +000688r 1 CF .hibytes $CFE9 +000689r 1 CF .hibytes $CFEA +00068Ar 1 CF .hibytes $CFEB +00068Br 1 CF .hibytes $CFEC +00068Cr 1 CF .hibytes $CFED +00068Dr 1 CF .hibytes $CFEE +00068Er 1 CF .hibytes $CFEF +00068Fr 1 CF .hibytes $CFF0 +000690r 1 CF .hibytes $CFF1 +000691r 1 CF .hibytes $CFF2 +000692r 1 CF .hibytes $CFF3 +000693r 1 CF .hibytes $CFF4 +000694r 1 CF .hibytes $CFF5 +000695r 1 CF .hibytes $CFF6 +000696r 1 CF .hibytes $CFF7 +000697r 1 CF .hibytes $CFF8 +000698r 1 CF .hibytes $CFF9 +000699r 1 CF .hibytes $CFFA +00069Ar 1 CF .hibytes $CFFB +00069Br 1 CF .hibytes $CFFC +00069Cr 1 CF .hibytes $CFFD +00069Dr 1 CF .hibytes $CFFE +00069Er 1 CF .hibytes $CFFF +00069Fr 1 D0 .hibytes $D000 +0006A0r 1 D0 .hibytes $D001 +0006A1r 1 D0 .hibytes $D002 +0006A2r 1 D0 .hibytes $D003 +0006A3r 1 D0 .hibytes $D004 +0006A4r 1 D0 .hibytes $D005 +0006A5r 1 D0 .hibytes $D006 +0006A6r 1 D0 .hibytes $D007 +0006A7r 1 D0 .hibytes $D008 +0006A8r 1 D0 .hibytes $D009 +0006A9r 1 D0 .hibytes $D00A +0006AAr 1 D0 .hibytes $D00B +0006ABr 1 D0 .hibytes $D00C +0006ACr 1 D0 .hibytes $D00D +0006ADr 1 D0 .hibytes $D00E +0006AEr 1 D0 .hibytes $D00F +0006AFr 1 DF .hibytes $DFE1 +0006B0r 1 DF .hibytes $DFE2 +0006B1r 1 DF .hibytes $DFE3 +0006B2r 1 DF .hibytes $DFE4 +0006B3r 1 DF .hibytes $DFE5 +0006B4r 1 DF .hibytes $DFE6 +0006B5r 1 DF .hibytes $DFE7 +0006B6r 1 DF .hibytes $DFE8 +0006B7r 1 DF .hibytes $DFE9 +0006B8r 1 DF .hibytes $DFEA +0006B9r 1 DF .hibytes $DFEB +0006BAr 1 DF .hibytes $DFEC +0006BBr 1 DF .hibytes $DFED +0006BCr 1 DF .hibytes $DFEE +0006BDr 1 DF .hibytes $DFEF +0006BEr 1 DF .hibytes $DFF0 +0006BFr 1 DF .hibytes $DFF1 +0006C0r 1 DF .hibytes $DFF2 +0006C1r 1 DF .hibytes $DFF3 +0006C2r 1 DF .hibytes $DFF4 +0006C3r 1 DF .hibytes $DFF5 +0006C4r 1 DF .hibytes $DFF6 +0006C5r 1 DF .hibytes $DFF7 +0006C6r 1 DF .hibytes $DFF8 +0006C7r 1 DF .hibytes $DFF9 +0006C8r 1 DF .hibytes $DFFA +0006C9r 1 DF .hibytes $DFFB +0006CAr 1 DF .hibytes $DFFC +0006CBr 1 DF .hibytes $DFFD +0006CCr 1 DF .hibytes $DFFE +0006CDr 1 DF .hibytes $DFFF +0006CEr 1 E0 .hibytes $E000 +0006CFr 1 E0 .hibytes $E001 +0006D0r 1 E0 .hibytes $E002 +0006D1r 1 E0 .hibytes $E003 +0006D2r 1 E0 .hibytes $E004 +0006D3r 1 E0 .hibytes $E005 +0006D4r 1 E0 .hibytes $E006 +0006D5r 1 E0 .hibytes $E007 +0006D6r 1 E0 .hibytes $E008 +0006D7r 1 E0 .hibytes $E009 +0006D8r 1 E0 .hibytes $E00A +0006D9r 1 E0 .hibytes $E00B +0006DAr 1 E0 .hibytes $E00C +0006DBr 1 E0 .hibytes $E00D +0006DCr 1 E0 .hibytes $E00E +0006DDr 1 E0 .hibytes $E00F +0006DEr 1 EF .hibytes $EFE1 +0006DFr 1 EF .hibytes $EFE2 +0006E0r 1 EF .hibytes $EFE3 +0006E1r 1 EF .hibytes $EFE4 +0006E2r 1 EF .hibytes $EFE5 +0006E3r 1 EF .hibytes $EFE6 +0006E4r 1 EF .hibytes $EFE7 +0006E5r 1 EF .hibytes $EFE8 +0006E6r 1 EF .hibytes $EFE9 +0006E7r 1 EF .hibytes $EFEA +0006E8r 1 EF .hibytes $EFEB +0006E9r 1 EF .hibytes $EFEC +0006EAr 1 EF .hibytes $EFED +0006EBr 1 EF .hibytes $EFEE +0006ECr 1 EF .hibytes $EFEF +0006EDr 1 EF .hibytes $EFF0 +0006EEr 1 EF .hibytes $EFF1 +0006EFr 1 EF .hibytes $EFF2 +0006F0r 1 EF .hibytes $EFF3 +0006F1r 1 EF .hibytes $EFF4 +0006F2r 1 EF .hibytes $EFF5 +0006F3r 1 EF .hibytes $EFF6 +0006F4r 1 EF .hibytes $EFF7 +0006F5r 1 EF .hibytes $EFF8 +0006F6r 1 EF .hibytes $EFF9 +0006F7r 1 EF .hibytes $EFFA +0006F8r 1 EF .hibytes $EFFB +0006F9r 1 EF .hibytes $EFFC +0006FAr 1 EF .hibytes $EFFD +0006FBr 1 EF .hibytes $EFFE +0006FCr 1 EF .hibytes $EFFF +0006FDr 1 F0 .hibytes $F000 +0006FEr 1 F0 .hibytes $F001 +0006FFr 1 F0 .hibytes $F002 +000700r 1 F0 .hibytes $F003 +000701r 1 F0 .hibytes $F004 +000702r 1 F0 .hibytes $F005 +000703r 1 F0 .hibytes $F006 +000704r 1 F0 .hibytes $F007 +000705r 1 F0 .hibytes $F008 +000706r 1 F0 .hibytes $F009 +000707r 1 F0 .hibytes $F00A +000708r 1 F0 .hibytes $F00B +000709r 1 F0 .hibytes $F00C +00070Ar 1 F0 .hibytes $F00D +00070Br 1 F0 .hibytes $F00E +00070Cr 1 F0 .hibytes $F00F +00070Dr 1 FF .hibytes $FFE1 +00070Er 1 FF .hibytes $FFE2 +00070Fr 1 FF .hibytes $FFE3 +000710r 1 FF .hibytes $FFE4 +000711r 1 FF .hibytes $FFE5 +000712r 1 FF .hibytes $FFE6 +000713r 1 FF .hibytes $FFE7 +000714r 1 FF .hibytes $FFE8 +000715r 1 FF .hibytes $FFE9 +000716r 1 FF .hibytes $FFEA +000717r 1 FF .hibytes $FFEB +000718r 1 FF .hibytes $FFEC +000719r 1 FF .hibytes $FFED +00071Ar 1 FF .hibytes $FFEE +00071Br 1 FF .hibytes $FFEF +00071Cr 1 FF .hibytes $FFF0 +00071Dr 1 FF .hibytes $FFF1 +00071Er 1 FF .hibytes $FFF2 +00071Fr 1 FF .hibytes $FFF3 +000720r 1 FF .hibytes $FFF4 +000721r 1 FF .hibytes $FFF5 +000722r 1 FF .hibytes $FFF6 +000723r 1 FF .hibytes $FFF7 +000724r 1 FF .hibytes $FFF8 +000725r 1 FF .hibytes $FFF9 +000726r 1 FF .hibytes $FFFA +000727r 1 FF .hibytes $FFFB +000728r 1 FF .hibytes $FFFC +000729r 1 FF .hibytes $FFFD +00072Ar 1 FF .hibytes $FFFE +00072Br 1 FF .hibytes $FFFF 00072Cr 1 -00072Cr 1 ; 4-digit hex values -00072Cr 1 00 .hibytes $0000 -00072Dr 1 00 .hibytes $0001 -00072Er 1 00 .hibytes $0002 -00072Fr 1 00 .hibytes $0003 -000730r 1 00 .hibytes $0004 -000731r 1 00 .hibytes $0005 -000732r 1 00 .hibytes $0006 -000733r 1 00 .hibytes $0007 -000734r 1 00 .hibytes $0008 -000735r 1 00 .hibytes $0009 -000736r 1 00 .hibytes $000a -000737r 1 00 .hibytes $000b -000738r 1 00 .hibytes $000c -000739r 1 00 .hibytes $000d -00073Ar 1 00 .hibytes $000e -00073Br 1 00 .hibytes $000f -00073Cr 1 00 .hibytes $0010 -00073Dr 1 00 .hibytes $0011 -00073Er 1 00 .hibytes $0012 -00073Fr 1 00 .hibytes $0013 -000740r 1 00 .hibytes $0070 -000741r 1 00 .hibytes $0071 -000742r 1 00 .hibytes $0072 -000743r 1 00 .hibytes $0073 -000744r 1 00 .hibytes $0074 -000745r 1 00 .hibytes $0075 -000746r 1 00 .hibytes $0076 -000747r 1 00 .hibytes $0077 -000748r 1 00 .hibytes $0078 -000749r 1 00 .hibytes $0079 -00074Ar 1 00 .hibytes $007a -00074Br 1 00 .hibytes $007b -00074Cr 1 00 .hibytes $007c -00074Dr 1 00 .hibytes $007d -00074Er 1 00 .hibytes $007e -00074Fr 1 00 .hibytes $007f -000750r 1 00 .hibytes $0080 -000751r 1 00 .hibytes $0081 -000752r 1 00 .hibytes $0082 -000753r 1 00 .hibytes $0083 -000754r 1 00 .hibytes $0084 -000755r 1 00 .hibytes $0085 -000756r 1 00 .hibytes $0086 -000757r 1 00 .hibytes $00f0 -000758r 1 00 .hibytes $00f1 -000759r 1 00 .hibytes $00f2 -00075Ar 1 00 .hibytes $00f3 -00075Br 1 00 .hibytes $00f4 -00075Cr 1 00 .hibytes $00f5 -00075Dr 1 00 .hibytes $00f6 -00075Er 1 00 .hibytes $00f7 -00075Fr 1 00 .hibytes $00f8 -000760r 1 00 .hibytes $00f9 -000761r 1 00 .hibytes $00fa -000762r 1 00 .hibytes $00fb -000763r 1 00 .hibytes $00fc -000764r 1 00 .hibytes $00fd -000765r 1 00 .hibytes $00fe -000766r 1 00 .hibytes $00ff -000767r 1 01 .hibytes $0100 -000768r 1 01 .hibytes $0101 -000769r 1 01 .hibytes $0102 -00076Ar 1 01 .hibytes $0103 -00076Br 1 0F .hibytes $0fd2 -00076Cr 1 0F .hibytes $0fd3 -00076Dr 1 0F .hibytes $0fd4 -00076Er 1 0F .hibytes $0fd5 -00076Fr 1 0F .hibytes $0fd6 -000770r 1 0F .hibytes $0fd7 -000771r 1 0F .hibytes $0fd8 -000772r 1 0F .hibytes $0fd9 -000773r 1 0F .hibytes $0fda -000774r 1 0F .hibytes $0fdb -000775r 1 0F .hibytes $0fdc -000776r 1 0F .hibytes $0fdd -000777r 1 0F .hibytes $0fde -000778r 1 0F .hibytes $0fdf -000779r 1 0F .hibytes $0fe0 -00077Ar 1 0F .hibytes $0fe1 -00077Br 1 0F .hibytes $0fe2 -00077Cr 1 0F .hibytes $0fe3 -00077Dr 1 0F .hibytes $0fe4 -00077Er 1 0F .hibytes $0fe5 -00077Fr 1 0F .hibytes $0fe6 -000780r 1 0F .hibytes $0fe7 -000781r 1 0F .hibytes $0fe8 -000782r 1 0F .hibytes $0fe9 -000783r 1 0F .hibytes $0fea -000784r 1 0F .hibytes $0feb -000785r 1 0F .hibytes $0fec -000786r 1 0F .hibytes $0fed -000787r 1 0F .hibytes $0fee -000788r 1 0F .hibytes $0fef -000789r 1 0F .hibytes $0ff0 -00078Ar 1 0F .hibytes $0ff1 -00078Br 1 0F .hibytes $0ff2 -00078Cr 1 0F .hibytes $0ff3 -00078Dr 1 0F .hibytes $0ff4 -00078Er 1 0F .hibytes $0ff5 -00078Fr 1 0F .hibytes $0ff6 -000790r 1 0F .hibytes $0ff7 -000791r 1 0F .hibytes $0ff8 -000792r 1 0F .hibytes $0ff9 -000793r 1 0F .hibytes $0ffa -000794r 1 0F .hibytes $0ffb -000795r 1 0F .hibytes $0ffc -000796r 1 0F .hibytes $0ffd -000797r 1 0F .hibytes $0ffe -000798r 1 0F .hibytes $0fff -000799r 1 10 .hibytes $1000 -00079Ar 1 10 .hibytes $1001 -00079Br 1 10 .hibytes $1002 -00079Cr 1 10 .hibytes $1003 -00079Dr 1 10 .hibytes $1004 -00079Er 1 10 .hibytes $1005 -00079Fr 1 10 .hibytes $1006 -0007A0r 1 10 .hibytes $1007 -0007A1r 1 10 .hibytes $1008 -0007A2r 1 7F .hibytes $7ff0 -0007A3r 1 7F .hibytes $7ff1 -0007A4r 1 7F .hibytes $7ff2 -0007A5r 1 7F .hibytes $7ff3 -0007A6r 1 7F .hibytes $7ff4 -0007A7r 1 7F .hibytes $7ff5 -0007A8r 1 7F .hibytes $7ff6 -0007A9r 1 7F .hibytes $7ff7 -0007AAr 1 7F .hibytes $7ff8 -0007ABr 1 7F .hibytes $7ff9 -0007ACr 1 7F .hibytes $7ffa -0007ADr 1 7F .hibytes $7ffb -0007AEr 1 7F .hibytes $7ffc -0007AFr 1 7F .hibytes $7ffd -0007B0r 1 7F .hibytes $7ffe -0007B1r 1 7F .hibytes $7fff -0007B2r 1 80 .hibytes $8000 -0007B3r 1 80 .hibytes $8001 -0007B4r 1 80 .hibytes $8002 -0007B5r 1 80 .hibytes $8003 -0007B6r 1 80 .hibytes $8004 -0007B7r 1 80 .hibytes $8005 -0007B8r 1 80 .hibytes $8006 -0007B9r 1 80 .hibytes $8007 -0007BAr 1 80 .hibytes $8008 -0007BBr 1 80 .hibytes $8009 -0007BCr 1 80 .hibytes $800a -0007BDr 1 80 .hibytes $800b -0007BEr 1 9F .hibytes $9fe1 -0007BFr 1 9F .hibytes $9fe2 -0007C0r 1 9F .hibytes $9fe3 -0007C1r 1 9F .hibytes $9fe4 -0007C2r 1 9F .hibytes $9fe5 -0007C3r 1 9F .hibytes $9fe6 -0007C4r 1 9F .hibytes $9fe7 -0007C5r 1 9F .hibytes $9fe8 -0007C6r 1 9F .hibytes $9fe9 -0007C7r 1 9F .hibytes $9fea -0007C8r 1 9F .hibytes $9feb -0007C9r 1 9F .hibytes $9fec -0007CAr 1 9F .hibytes $9fed -0007CBr 1 9F .hibytes $9fee -0007CCr 1 9F .hibytes $9fef -0007CDr 1 9F .hibytes $9ff0 -0007CEr 1 9F .hibytes $9ff1 -0007CFr 1 9F .hibytes $9ff2 -0007D0r 1 9F .hibytes $9ff3 -0007D1r 1 9F .hibytes $9ff4 -0007D2r 1 9F .hibytes $9ff5 -0007D3r 1 9F .hibytes $9ff6 -0007D4r 1 9F .hibytes $9ff7 -0007D5r 1 9F .hibytes $9ff8 -0007D6r 1 9F .hibytes $9ff9 -0007D7r 1 9F .hibytes $9ffa -0007D8r 1 9F .hibytes $9ffb -0007D9r 1 9F .hibytes $9ffc -0007DAr 1 9F .hibytes $9ffd -0007DBr 1 9F .hibytes $9ffe -0007DCr 1 9F .hibytes $9fff -0007DDr 1 A0 .hibytes $a000 -0007DEr 1 A0 .hibytes $a001 -0007DFr 1 A0 .hibytes $a002 -0007E0r 1 A0 .hibytes $a003 -0007E1r 1 A0 .hibytes $a004 -0007E2r 1 A0 .hibytes $a005 -0007E3r 1 A0 .hibytes $a006 -0007E4r 1 A0 .hibytes $a007 -0007E5r 1 A0 .hibytes $a008 -0007E6r 1 A0 .hibytes $a009 -0007E7r 1 A0 .hibytes $a00a -0007E8r 1 A0 .hibytes $a00b -0007E9r 1 A0 .hibytes $a00c -0007EAr 1 A0 .hibytes $a00d -0007EBr 1 A0 .hibytes $a00e -0007ECr 1 A0 .hibytes $a00f -0007EDr 1 AF .hibytes $afe1 -0007EEr 1 AF .hibytes $afe2 -0007EFr 1 AF .hibytes $afe3 -0007F0r 1 AF .hibytes $afe4 -0007F1r 1 AF .hibytes $afe5 -0007F2r 1 AF .hibytes $afe6 -0007F3r 1 AF .hibytes $afe7 -0007F4r 1 AF .hibytes $afe8 -0007F5r 1 AF .hibytes $afe9 -0007F6r 1 AF .hibytes $afea -0007F7r 1 AF .hibytes $afeb -0007F8r 1 AF .hibytes $afec -0007F9r 1 AF .hibytes $afed -0007FAr 1 AF .hibytes $afee -0007FBr 1 AF .hibytes $afef -0007FCr 1 AF .hibytes $aff0 -0007FDr 1 AF .hibytes $aff1 -0007FEr 1 AF .hibytes $aff2 -0007FFr 1 AF .hibytes $aff3 -000800r 1 AF .hibytes $aff4 -000801r 1 AF .hibytes $aff5 -000802r 1 AF .hibytes $aff6 -000803r 1 AF .hibytes $aff7 -000804r 1 AF .hibytes $aff8 -000805r 1 AF .hibytes $aff9 -000806r 1 AF .hibytes $affa -000807r 1 AF .hibytes $affb -000808r 1 AF .hibytes $affc -000809r 1 AF .hibytes $affd -00080Ar 1 AF .hibytes $affe -00080Br 1 AF .hibytes $afff -00080Cr 1 B0 .hibytes $b000 -00080Dr 1 B0 .hibytes $b001 -00080Er 1 B0 .hibytes $b002 -00080Fr 1 B0 .hibytes $b003 -000810r 1 B0 .hibytes $b004 -000811r 1 B0 .hibytes $b005 -000812r 1 B0 .hibytes $b006 -000813r 1 B0 .hibytes $b007 -000814r 1 B0 .hibytes $b008 -000815r 1 B0 .hibytes $b009 -000816r 1 B0 .hibytes $b00a -000817r 1 B0 .hibytes $b00b -000818r 1 B0 .hibytes $b00c -000819r 1 B0 .hibytes $b00d -00081Ar 1 B0 .hibytes $b00e -00081Br 1 B0 .hibytes $b00f -00081Cr 1 BF .hibytes $bfe1 -00081Dr 1 BF .hibytes $bfe2 -00081Er 1 BF .hibytes $bfe3 -00081Fr 1 BF .hibytes $bfe4 -000820r 1 BF .hibytes $bfe5 -000821r 1 BF .hibytes $bfe6 -000822r 1 BF .hibytes $bfe7 -000823r 1 BF .hibytes $bfe8 -000824r 1 BF .hibytes $bfe9 -000825r 1 BF .hibytes $bfea -000826r 1 BF .hibytes $bfeb -000827r 1 BF .hibytes $bfec -000828r 1 BF .hibytes $bfed -000829r 1 BF .hibytes $bfee -00082Ar 1 BF .hibytes $bfef -00082Br 1 BF .hibytes $bff0 -00082Cr 1 BF .hibytes $bff1 -00082Dr 1 BF .hibytes $bff2 -00082Er 1 BF .hibytes $bff3 -00082Fr 1 BF .hibytes $bff4 -000830r 1 BF .hibytes $bff5 -000831r 1 BF .hibytes $bff6 -000832r 1 BF .hibytes $bff7 -000833r 1 BF .hibytes $bff8 -000834r 1 BF .hibytes $bff9 -000835r 1 BF .hibytes $bffa -000836r 1 BF .hibytes $bffb -000837r 1 BF .hibytes $bffc -000838r 1 BF .hibytes $bffd -000839r 1 BF .hibytes $bffe -00083Ar 1 BF .hibytes $bfff -00083Br 1 C0 .hibytes $c000 -00083Cr 1 C0 .hibytes $c001 -00083Dr 1 C0 .hibytes $c002 -00083Er 1 C0 .hibytes $c003 -00083Fr 1 C0 .hibytes $c004 -000840r 1 C0 .hibytes $c005 -000841r 1 C0 .hibytes $c006 -000842r 1 C0 .hibytes $c007 -000843r 1 C0 .hibytes $c008 -000844r 1 C0 .hibytes $c009 -000845r 1 C0 .hibytes $c00a -000846r 1 C0 .hibytes $c00b -000847r 1 C0 .hibytes $c00c -000848r 1 C0 .hibytes $c00d -000849r 1 C0 .hibytes $c00e -00084Ar 1 C0 .hibytes $c00f -00084Br 1 CF .hibytes $cfe1 -00084Cr 1 CF .hibytes $cfe2 -00084Dr 1 CF .hibytes $cfe3 -00084Er 1 CF .hibytes $cfe4 -00084Fr 1 CF .hibytes $cfe5 -000850r 1 CF .hibytes $cfe6 -000851r 1 CF .hibytes $cfe7 -000852r 1 CF .hibytes $cfe8 -000853r 1 CF .hibytes $cfe9 -000854r 1 CF .hibytes $cfea -000855r 1 CF .hibytes $cfeb -000856r 1 CF .hibytes $cfec -000857r 1 CF .hibytes $cfed -000858r 1 CF .hibytes $cfee -000859r 1 CF .hibytes $cfef -00085Ar 1 CF .hibytes $cff0 -00085Br 1 CF .hibytes $cff1 -00085Cr 1 CF .hibytes $cff2 -00085Dr 1 CF .hibytes $cff3 -00085Er 1 CF .hibytes $cff4 -00085Fr 1 CF .hibytes $cff5 -000860r 1 CF .hibytes $cff6 -000861r 1 CF .hibytes $cff7 -000862r 1 CF .hibytes $cff8 -000863r 1 CF .hibytes $cff9 -000864r 1 CF .hibytes $cffa -000865r 1 CF .hibytes $cffb -000866r 1 CF .hibytes $cffc -000867r 1 CF .hibytes $cffd -000868r 1 CF .hibytes $cffe -000869r 1 CF .hibytes $cfff -00086Ar 1 D0 .hibytes $d000 -00086Br 1 D0 .hibytes $d001 -00086Cr 1 D0 .hibytes $d002 -00086Dr 1 D0 .hibytes $d003 -00086Er 1 D0 .hibytes $d004 -00086Fr 1 D0 .hibytes $d005 -000870r 1 D0 .hibytes $d006 -000871r 1 D0 .hibytes $d007 -000872r 1 D0 .hibytes $d008 -000873r 1 D0 .hibytes $d009 -000874r 1 D0 .hibytes $d00a -000875r 1 D0 .hibytes $d00b -000876r 1 D0 .hibytes $d00c -000877r 1 D0 .hibytes $d00d -000878r 1 D0 .hibytes $d00e -000879r 1 D0 .hibytes $d00f -00087Ar 1 DF .hibytes $dfe1 -00087Br 1 DF .hibytes $dfe2 -00087Cr 1 DF .hibytes $dfe3 -00087Dr 1 DF .hibytes $dfe4 -00087Er 1 DF .hibytes $dfe5 -00087Fr 1 DF .hibytes $dfe6 -000880r 1 DF .hibytes $dfe7 -000881r 1 DF .hibytes $dfe8 -000882r 1 DF .hibytes $dfe9 -000883r 1 DF .hibytes $dfea -000884r 1 DF .hibytes $dfeb -000885r 1 DF .hibytes $dfec -000886r 1 DF .hibytes $dfed -000887r 1 DF .hibytes $dfee -000888r 1 DF .hibytes $dfef -000889r 1 DF .hibytes $dff0 -00088Ar 1 DF .hibytes $dff1 -00088Br 1 DF .hibytes $dff2 -00088Cr 1 DF .hibytes $dff3 -00088Dr 1 DF .hibytes $dff4 -00088Er 1 DF .hibytes $dff5 -00088Fr 1 DF .hibytes $dff6 -000890r 1 DF .hibytes $dff7 -000891r 1 DF .hibytes $dff8 -000892r 1 DF .hibytes $dff9 -000893r 1 DF .hibytes $dffa -000894r 1 DF .hibytes $dffb -000895r 1 DF .hibytes $dffc -000896r 1 DF .hibytes $dffd -000897r 1 DF .hibytes $dffe -000898r 1 DF .hibytes $dfff -000899r 1 E0 .hibytes $e000 -00089Ar 1 E0 .hibytes $e001 -00089Br 1 E0 .hibytes $e002 -00089Cr 1 E0 .hibytes $e003 -00089Dr 1 E0 .hibytes $e004 -00089Er 1 E0 .hibytes $e005 -00089Fr 1 E0 .hibytes $e006 -0008A0r 1 E0 .hibytes $e007 -0008A1r 1 E0 .hibytes $e008 -0008A2r 1 E0 .hibytes $e009 -0008A3r 1 E0 .hibytes $e00a -0008A4r 1 E0 .hibytes $e00b -0008A5r 1 E0 .hibytes $e00c -0008A6r 1 E0 .hibytes $e00d -0008A7r 1 E0 .hibytes $e00e -0008A8r 1 E0 .hibytes $e00f -0008A9r 1 EF .hibytes $efe1 -0008AAr 1 EF .hibytes $efe2 -0008ABr 1 EF .hibytes $efe3 -0008ACr 1 EF .hibytes $efe4 -0008ADr 1 EF .hibytes $efe5 -0008AEr 1 EF .hibytes $efe6 -0008AFr 1 EF .hibytes $efe7 -0008B0r 1 EF .hibytes $efe8 -0008B1r 1 EF .hibytes $efe9 -0008B2r 1 EF .hibytes $efea -0008B3r 1 EF .hibytes $efeb -0008B4r 1 EF .hibytes $efec -0008B5r 1 EF .hibytes $efed -0008B6r 1 EF .hibytes $efee -0008B7r 1 EF .hibytes $efef -0008B8r 1 EF .hibytes $eff0 -0008B9r 1 EF .hibytes $eff1 -0008BAr 1 EF .hibytes $eff2 -0008BBr 1 EF .hibytes $eff3 -0008BCr 1 EF .hibytes $eff4 -0008BDr 1 EF .hibytes $eff5 -0008BEr 1 EF .hibytes $eff6 -0008BFr 1 EF .hibytes $eff7 -0008C0r 1 EF .hibytes $eff8 -0008C1r 1 EF .hibytes $eff9 -0008C2r 1 EF .hibytes $effa -0008C3r 1 EF .hibytes $effb -0008C4r 1 EF .hibytes $effc -0008C5r 1 EF .hibytes $effd -0008C6r 1 EF .hibytes $effe -0008C7r 1 EF .hibytes $efff -0008C8r 1 F0 .hibytes $f000 -0008C9r 1 F0 .hibytes $f001 -0008CAr 1 F0 .hibytes $f002 -0008CBr 1 F0 .hibytes $f003 -0008CCr 1 F0 .hibytes $f004 -0008CDr 1 F0 .hibytes $f005 -0008CEr 1 F0 .hibytes $f006 -0008CFr 1 F0 .hibytes $f007 -0008D0r 1 F0 .hibytes $f008 -0008D1r 1 F0 .hibytes $f009 -0008D2r 1 F0 .hibytes $f00a -0008D3r 1 F0 .hibytes $f00b -0008D4r 1 F0 .hibytes $f00c -0008D5r 1 F0 .hibytes $f00d -0008D6r 1 F0 .hibytes $f00e -0008D7r 1 F0 .hibytes $f00f -0008D8r 1 FF .hibytes $ffe1 -0008D9r 1 FF .hibytes $ffe2 -0008DAr 1 FF .hibytes $ffe3 -0008DBr 1 FF .hibytes $ffe4 -0008DCr 1 FF .hibytes $ffe5 -0008DDr 1 FF .hibytes $ffe6 -0008DEr 1 FF .hibytes $ffe7 -0008DFr 1 FF .hibytes $ffe8 -0008E0r 1 FF .hibytes $ffe9 -0008E1r 1 FF .hibytes $ffea -0008E2r 1 FF .hibytes $ffeb -0008E3r 1 FF .hibytes $ffec -0008E4r 1 FF .hibytes $ffed -0008E5r 1 FF .hibytes $ffee -0008E6r 1 FF .hibytes $ffef -0008E7r 1 FF .hibytes $fff0 -0008E8r 1 FF .hibytes $fff1 -0008E9r 1 FF .hibytes $fff2 -0008EAr 1 FF .hibytes $fff3 -0008EBr 1 FF .hibytes $fff4 -0008ECr 1 FF .hibytes $fff5 -0008EDr 1 FF .hibytes $fff6 -0008EEr 1 FF .hibytes $fff7 -0008EFr 1 FF .hibytes $fff8 -0008F0r 1 FF .hibytes $fff9 -0008F1r 1 FF .hibytes $fffa -0008F2r 1 FF .hibytes $fffb -0008F3r 1 FF .hibytes $fffc -0008F4r 1 FF .hibytes $fffd -0008F5r 1 FF .hibytes $fffe -0008F6r 1 FF .hibytes $ffff +00072Cr 1 ; 4-digit hex values +00072Cr 1 00 .hibytes $0000 +00072Dr 1 00 .hibytes $0001 +00072Er 1 00 .hibytes $0002 +00072Fr 1 00 .hibytes $0003 +000730r 1 00 .hibytes $0004 +000731r 1 00 .hibytes $0005 +000732r 1 00 .hibytes $0006 +000733r 1 00 .hibytes $0007 +000734r 1 00 .hibytes $0008 +000735r 1 00 .hibytes $0009 +000736r 1 00 .hibytes $000a +000737r 1 00 .hibytes $000b +000738r 1 00 .hibytes $000c +000739r 1 00 .hibytes $000d +00073Ar 1 00 .hibytes $000e +00073Br 1 00 .hibytes $000f +00073Cr 1 00 .hibytes $0010 +00073Dr 1 00 .hibytes $0011 +00073Er 1 00 .hibytes $0012 +00073Fr 1 00 .hibytes $0013 +000740r 1 00 .hibytes $0070 +000741r 1 00 .hibytes $0071 +000742r 1 00 .hibytes $0072 +000743r 1 00 .hibytes $0073 +000744r 1 00 .hibytes $0074 +000745r 1 00 .hibytes $0075 +000746r 1 00 .hibytes $0076 +000747r 1 00 .hibytes $0077 +000748r 1 00 .hibytes $0078 +000749r 1 00 .hibytes $0079 +00074Ar 1 00 .hibytes $007a +00074Br 1 00 .hibytes $007b +00074Cr 1 00 .hibytes $007c +00074Dr 1 00 .hibytes $007d +00074Er 1 00 .hibytes $007e +00074Fr 1 00 .hibytes $007f +000750r 1 00 .hibytes $0080 +000751r 1 00 .hibytes $0081 +000752r 1 00 .hibytes $0082 +000753r 1 00 .hibytes $0083 +000754r 1 00 .hibytes $0084 +000755r 1 00 .hibytes $0085 +000756r 1 00 .hibytes $0086 +000757r 1 00 .hibytes $00f0 +000758r 1 00 .hibytes $00f1 +000759r 1 00 .hibytes $00f2 +00075Ar 1 00 .hibytes $00f3 +00075Br 1 00 .hibytes $00f4 +00075Cr 1 00 .hibytes $00f5 +00075Dr 1 00 .hibytes $00f6 +00075Er 1 00 .hibytes $00f7 +00075Fr 1 00 .hibytes $00f8 +000760r 1 00 .hibytes $00f9 +000761r 1 00 .hibytes $00fa +000762r 1 00 .hibytes $00fb +000763r 1 00 .hibytes $00fc +000764r 1 00 .hibytes $00fd +000765r 1 00 .hibytes $00fe +000766r 1 00 .hibytes $00ff +000767r 1 01 .hibytes $0100 +000768r 1 01 .hibytes $0101 +000769r 1 01 .hibytes $0102 +00076Ar 1 01 .hibytes $0103 +00076Br 1 0F .hibytes $0fd2 +00076Cr 1 0F .hibytes $0fd3 +00076Dr 1 0F .hibytes $0fd4 +00076Er 1 0F .hibytes $0fd5 +00076Fr 1 0F .hibytes $0fd6 +000770r 1 0F .hibytes $0fd7 +000771r 1 0F .hibytes $0fd8 +000772r 1 0F .hibytes $0fd9 +000773r 1 0F .hibytes $0fda +000774r 1 0F .hibytes $0fdb +000775r 1 0F .hibytes $0fdc +000776r 1 0F .hibytes $0fdd +000777r 1 0F .hibytes $0fde +000778r 1 0F .hibytes $0fdf +000779r 1 0F .hibytes $0fe0 +00077Ar 1 0F .hibytes $0fe1 +00077Br 1 0F .hibytes $0fe2 +00077Cr 1 0F .hibytes $0fe3 +00077Dr 1 0F .hibytes $0fe4 +00077Er 1 0F .hibytes $0fe5 +00077Fr 1 0F .hibytes $0fe6 +000780r 1 0F .hibytes $0fe7 +000781r 1 0F .hibytes $0fe8 +000782r 1 0F .hibytes $0fe9 +000783r 1 0F .hibytes $0fea +000784r 1 0F .hibytes $0feb +000785r 1 0F .hibytes $0fec +000786r 1 0F .hibytes $0fed +000787r 1 0F .hibytes $0fee +000788r 1 0F .hibytes $0fef +000789r 1 0F .hibytes $0ff0 +00078Ar 1 0F .hibytes $0ff1 +00078Br 1 0F .hibytes $0ff2 +00078Cr 1 0F .hibytes $0ff3 +00078Dr 1 0F .hibytes $0ff4 +00078Er 1 0F .hibytes $0ff5 +00078Fr 1 0F .hibytes $0ff6 +000790r 1 0F .hibytes $0ff7 +000791r 1 0F .hibytes $0ff8 +000792r 1 0F .hibytes $0ff9 +000793r 1 0F .hibytes $0ffa +000794r 1 0F .hibytes $0ffb +000795r 1 0F .hibytes $0ffc +000796r 1 0F .hibytes $0ffd +000797r 1 0F .hibytes $0ffe +000798r 1 0F .hibytes $0fff +000799r 1 10 .hibytes $1000 +00079Ar 1 10 .hibytes $1001 +00079Br 1 10 .hibytes $1002 +00079Cr 1 10 .hibytes $1003 +00079Dr 1 10 .hibytes $1004 +00079Er 1 10 .hibytes $1005 +00079Fr 1 10 .hibytes $1006 +0007A0r 1 10 .hibytes $1007 +0007A1r 1 10 .hibytes $1008 +0007A2r 1 7F .hibytes $7ff0 +0007A3r 1 7F .hibytes $7ff1 +0007A4r 1 7F .hibytes $7ff2 +0007A5r 1 7F .hibytes $7ff3 +0007A6r 1 7F .hibytes $7ff4 +0007A7r 1 7F .hibytes $7ff5 +0007A8r 1 7F .hibytes $7ff6 +0007A9r 1 7F .hibytes $7ff7 +0007AAr 1 7F .hibytes $7ff8 +0007ABr 1 7F .hibytes $7ff9 +0007ACr 1 7F .hibytes $7ffa +0007ADr 1 7F .hibytes $7ffb +0007AEr 1 7F .hibytes $7ffc +0007AFr 1 7F .hibytes $7ffd +0007B0r 1 7F .hibytes $7ffe +0007B1r 1 7F .hibytes $7fff +0007B2r 1 80 .hibytes $8000 +0007B3r 1 80 .hibytes $8001 +0007B4r 1 80 .hibytes $8002 +0007B5r 1 80 .hibytes $8003 +0007B6r 1 80 .hibytes $8004 +0007B7r 1 80 .hibytes $8005 +0007B8r 1 80 .hibytes $8006 +0007B9r 1 80 .hibytes $8007 +0007BAr 1 80 .hibytes $8008 +0007BBr 1 80 .hibytes $8009 +0007BCr 1 80 .hibytes $800a +0007BDr 1 80 .hibytes $800b +0007BEr 1 9F .hibytes $9fe1 +0007BFr 1 9F .hibytes $9fe2 +0007C0r 1 9F .hibytes $9fe3 +0007C1r 1 9F .hibytes $9fe4 +0007C2r 1 9F .hibytes $9fe5 +0007C3r 1 9F .hibytes $9fe6 +0007C4r 1 9F .hibytes $9fe7 +0007C5r 1 9F .hibytes $9fe8 +0007C6r 1 9F .hibytes $9fe9 +0007C7r 1 9F .hibytes $9fea +0007C8r 1 9F .hibytes $9feb +0007C9r 1 9F .hibytes $9fec +0007CAr 1 9F .hibytes $9fed +0007CBr 1 9F .hibytes $9fee +0007CCr 1 9F .hibytes $9fef +0007CDr 1 9F .hibytes $9ff0 +0007CEr 1 9F .hibytes $9ff1 +0007CFr 1 9F .hibytes $9ff2 +0007D0r 1 9F .hibytes $9ff3 +0007D1r 1 9F .hibytes $9ff4 +0007D2r 1 9F .hibytes $9ff5 +0007D3r 1 9F .hibytes $9ff6 +0007D4r 1 9F .hibytes $9ff7 +0007D5r 1 9F .hibytes $9ff8 +0007D6r 1 9F .hibytes $9ff9 +0007D7r 1 9F .hibytes $9ffa +0007D8r 1 9F .hibytes $9ffb +0007D9r 1 9F .hibytes $9ffc +0007DAr 1 9F .hibytes $9ffd +0007DBr 1 9F .hibytes $9ffe +0007DCr 1 9F .hibytes $9fff +0007DDr 1 A0 .hibytes $a000 +0007DEr 1 A0 .hibytes $a001 +0007DFr 1 A0 .hibytes $a002 +0007E0r 1 A0 .hibytes $a003 +0007E1r 1 A0 .hibytes $a004 +0007E2r 1 A0 .hibytes $a005 +0007E3r 1 A0 .hibytes $a006 +0007E4r 1 A0 .hibytes $a007 +0007E5r 1 A0 .hibytes $a008 +0007E6r 1 A0 .hibytes $a009 +0007E7r 1 A0 .hibytes $a00a +0007E8r 1 A0 .hibytes $a00b +0007E9r 1 A0 .hibytes $a00c +0007EAr 1 A0 .hibytes $a00d +0007EBr 1 A0 .hibytes $a00e +0007ECr 1 A0 .hibytes $a00f +0007EDr 1 AF .hibytes $afe1 +0007EEr 1 AF .hibytes $afe2 +0007EFr 1 AF .hibytes $afe3 +0007F0r 1 AF .hibytes $afe4 +0007F1r 1 AF .hibytes $afe5 +0007F2r 1 AF .hibytes $afe6 +0007F3r 1 AF .hibytes $afe7 +0007F4r 1 AF .hibytes $afe8 +0007F5r 1 AF .hibytes $afe9 +0007F6r 1 AF .hibytes $afea +0007F7r 1 AF .hibytes $afeb +0007F8r 1 AF .hibytes $afec +0007F9r 1 AF .hibytes $afed +0007FAr 1 AF .hibytes $afee +0007FBr 1 AF .hibytes $afef +0007FCr 1 AF .hibytes $aff0 +0007FDr 1 AF .hibytes $aff1 +0007FEr 1 AF .hibytes $aff2 +0007FFr 1 AF .hibytes $aff3 +000800r 1 AF .hibytes $aff4 +000801r 1 AF .hibytes $aff5 +000802r 1 AF .hibytes $aff6 +000803r 1 AF .hibytes $aff7 +000804r 1 AF .hibytes $aff8 +000805r 1 AF .hibytes $aff9 +000806r 1 AF .hibytes $affa +000807r 1 AF .hibytes $affb +000808r 1 AF .hibytes $affc +000809r 1 AF .hibytes $affd +00080Ar 1 AF .hibytes $affe +00080Br 1 AF .hibytes $afff +00080Cr 1 B0 .hibytes $b000 +00080Dr 1 B0 .hibytes $b001 +00080Er 1 B0 .hibytes $b002 +00080Fr 1 B0 .hibytes $b003 +000810r 1 B0 .hibytes $b004 +000811r 1 B0 .hibytes $b005 +000812r 1 B0 .hibytes $b006 +000813r 1 B0 .hibytes $b007 +000814r 1 B0 .hibytes $b008 +000815r 1 B0 .hibytes $b009 +000816r 1 B0 .hibytes $b00a +000817r 1 B0 .hibytes $b00b +000818r 1 B0 .hibytes $b00c +000819r 1 B0 .hibytes $b00d +00081Ar 1 B0 .hibytes $b00e +00081Br 1 B0 .hibytes $b00f +00081Cr 1 BF .hibytes $bfe1 +00081Dr 1 BF .hibytes $bfe2 +00081Er 1 BF .hibytes $bfe3 +00081Fr 1 BF .hibytes $bfe4 +000820r 1 BF .hibytes $bfe5 +000821r 1 BF .hibytes $bfe6 +000822r 1 BF .hibytes $bfe7 +000823r 1 BF .hibytes $bfe8 +000824r 1 BF .hibytes $bfe9 +000825r 1 BF .hibytes $bfea +000826r 1 BF .hibytes $bfeb +000827r 1 BF .hibytes $bfec +000828r 1 BF .hibytes $bfed +000829r 1 BF .hibytes $bfee +00082Ar 1 BF .hibytes $bfef +00082Br 1 BF .hibytes $bff0 +00082Cr 1 BF .hibytes $bff1 +00082Dr 1 BF .hibytes $bff2 +00082Er 1 BF .hibytes $bff3 +00082Fr 1 BF .hibytes $bff4 +000830r 1 BF .hibytes $bff5 +000831r 1 BF .hibytes $bff6 +000832r 1 BF .hibytes $bff7 +000833r 1 BF .hibytes $bff8 +000834r 1 BF .hibytes $bff9 +000835r 1 BF .hibytes $bffa +000836r 1 BF .hibytes $bffb +000837r 1 BF .hibytes $bffc +000838r 1 BF .hibytes $bffd +000839r 1 BF .hibytes $bffe +00083Ar 1 BF .hibytes $bfff +00083Br 1 C0 .hibytes $c000 +00083Cr 1 C0 .hibytes $c001 +00083Dr 1 C0 .hibytes $c002 +00083Er 1 C0 .hibytes $c003 +00083Fr 1 C0 .hibytes $c004 +000840r 1 C0 .hibytes $c005 +000841r 1 C0 .hibytes $c006 +000842r 1 C0 .hibytes $c007 +000843r 1 C0 .hibytes $c008 +000844r 1 C0 .hibytes $c009 +000845r 1 C0 .hibytes $c00a +000846r 1 C0 .hibytes $c00b +000847r 1 C0 .hibytes $c00c +000848r 1 C0 .hibytes $c00d +000849r 1 C0 .hibytes $c00e +00084Ar 1 C0 .hibytes $c00f +00084Br 1 CF .hibytes $cfe1 +00084Cr 1 CF .hibytes $cfe2 +00084Dr 1 CF .hibytes $cfe3 +00084Er 1 CF .hibytes $cfe4 +00084Fr 1 CF .hibytes $cfe5 +000850r 1 CF .hibytes $cfe6 +000851r 1 CF .hibytes $cfe7 +000852r 1 CF .hibytes $cfe8 +000853r 1 CF .hibytes $cfe9 +000854r 1 CF .hibytes $cfea +000855r 1 CF .hibytes $cfeb +000856r 1 CF .hibytes $cfec +000857r 1 CF .hibytes $cfed +000858r 1 CF .hibytes $cfee +000859r 1 CF .hibytes $cfef +00085Ar 1 CF .hibytes $cff0 +00085Br 1 CF .hibytes $cff1 +00085Cr 1 CF .hibytes $cff2 +00085Dr 1 CF .hibytes $cff3 +00085Er 1 CF .hibytes $cff4 +00085Fr 1 CF .hibytes $cff5 +000860r 1 CF .hibytes $cff6 +000861r 1 CF .hibytes $cff7 +000862r 1 CF .hibytes $cff8 +000863r 1 CF .hibytes $cff9 +000864r 1 CF .hibytes $cffa +000865r 1 CF .hibytes $cffb +000866r 1 CF .hibytes $cffc +000867r 1 CF .hibytes $cffd +000868r 1 CF .hibytes $cffe +000869r 1 CF .hibytes $cfff +00086Ar 1 D0 .hibytes $d000 +00086Br 1 D0 .hibytes $d001 +00086Cr 1 D0 .hibytes $d002 +00086Dr 1 D0 .hibytes $d003 +00086Er 1 D0 .hibytes $d004 +00086Fr 1 D0 .hibytes $d005 +000870r 1 D0 .hibytes $d006 +000871r 1 D0 .hibytes $d007 +000872r 1 D0 .hibytes $d008 +000873r 1 D0 .hibytes $d009 +000874r 1 D0 .hibytes $d00a +000875r 1 D0 .hibytes $d00b +000876r 1 D0 .hibytes $d00c +000877r 1 D0 .hibytes $d00d +000878r 1 D0 .hibytes $d00e +000879r 1 D0 .hibytes $d00f +00087Ar 1 DF .hibytes $dfe1 +00087Br 1 DF .hibytes $dfe2 +00087Cr 1 DF .hibytes $dfe3 +00087Dr 1 DF .hibytes $dfe4 +00087Er 1 DF .hibytes $dfe5 +00087Fr 1 DF .hibytes $dfe6 +000880r 1 DF .hibytes $dfe7 +000881r 1 DF .hibytes $dfe8 +000882r 1 DF .hibytes $dfe9 +000883r 1 DF .hibytes $dfea +000884r 1 DF .hibytes $dfeb +000885r 1 DF .hibytes $dfec +000886r 1 DF .hibytes $dfed +000887r 1 DF .hibytes $dfee +000888r 1 DF .hibytes $dfef +000889r 1 DF .hibytes $dff0 +00088Ar 1 DF .hibytes $dff1 +00088Br 1 DF .hibytes $dff2 +00088Cr 1 DF .hibytes $dff3 +00088Dr 1 DF .hibytes $dff4 +00088Er 1 DF .hibytes $dff5 +00088Fr 1 DF .hibytes $dff6 +000890r 1 DF .hibytes $dff7 +000891r 1 DF .hibytes $dff8 +000892r 1 DF .hibytes $dff9 +000893r 1 DF .hibytes $dffa +000894r 1 DF .hibytes $dffb +000895r 1 DF .hibytes $dffc +000896r 1 DF .hibytes $dffd +000897r 1 DF .hibytes $dffe +000898r 1 DF .hibytes $dfff +000899r 1 E0 .hibytes $e000 +00089Ar 1 E0 .hibytes $e001 +00089Br 1 E0 .hibytes $e002 +00089Cr 1 E0 .hibytes $e003 +00089Dr 1 E0 .hibytes $e004 +00089Er 1 E0 .hibytes $e005 +00089Fr 1 E0 .hibytes $e006 +0008A0r 1 E0 .hibytes $e007 +0008A1r 1 E0 .hibytes $e008 +0008A2r 1 E0 .hibytes $e009 +0008A3r 1 E0 .hibytes $e00a +0008A4r 1 E0 .hibytes $e00b +0008A5r 1 E0 .hibytes $e00c +0008A6r 1 E0 .hibytes $e00d +0008A7r 1 E0 .hibytes $e00e +0008A8r 1 E0 .hibytes $e00f +0008A9r 1 EF .hibytes $efe1 +0008AAr 1 EF .hibytes $efe2 +0008ABr 1 EF .hibytes $efe3 +0008ACr 1 EF .hibytes $efe4 +0008ADr 1 EF .hibytes $efe5 +0008AEr 1 EF .hibytes $efe6 +0008AFr 1 EF .hibytes $efe7 +0008B0r 1 EF .hibytes $efe8 +0008B1r 1 EF .hibytes $efe9 +0008B2r 1 EF .hibytes $efea +0008B3r 1 EF .hibytes $efeb +0008B4r 1 EF .hibytes $efec +0008B5r 1 EF .hibytes $efed +0008B6r 1 EF .hibytes $efee +0008B7r 1 EF .hibytes $efef +0008B8r 1 EF .hibytes $eff0 +0008B9r 1 EF .hibytes $eff1 +0008BAr 1 EF .hibytes $eff2 +0008BBr 1 EF .hibytes $eff3 +0008BCr 1 EF .hibytes $eff4 +0008BDr 1 EF .hibytes $eff5 +0008BEr 1 EF .hibytes $eff6 +0008BFr 1 EF .hibytes $eff7 +0008C0r 1 EF .hibytes $eff8 +0008C1r 1 EF .hibytes $eff9 +0008C2r 1 EF .hibytes $effa +0008C3r 1 EF .hibytes $effb +0008C4r 1 EF .hibytes $effc +0008C5r 1 EF .hibytes $effd +0008C6r 1 EF .hibytes $effe +0008C7r 1 EF .hibytes $efff +0008C8r 1 F0 .hibytes $f000 +0008C9r 1 F0 .hibytes $f001 +0008CAr 1 F0 .hibytes $f002 +0008CBr 1 F0 .hibytes $f003 +0008CCr 1 F0 .hibytes $f004 +0008CDr 1 F0 .hibytes $f005 +0008CEr 1 F0 .hibytes $f006 +0008CFr 1 F0 .hibytes $f007 +0008D0r 1 F0 .hibytes $f008 +0008D1r 1 F0 .hibytes $f009 +0008D2r 1 F0 .hibytes $f00a +0008D3r 1 F0 .hibytes $f00b +0008D4r 1 F0 .hibytes $f00c +0008D5r 1 F0 .hibytes $f00d +0008D6r 1 F0 .hibytes $f00e +0008D7r 1 F0 .hibytes $f00f +0008D8r 1 FF .hibytes $ffe1 +0008D9r 1 FF .hibytes $ffe2 +0008DAr 1 FF .hibytes $ffe3 +0008DBr 1 FF .hibytes $ffe4 +0008DCr 1 FF .hibytes $ffe5 +0008DDr 1 FF .hibytes $ffe6 +0008DEr 1 FF .hibytes $ffe7 +0008DFr 1 FF .hibytes $ffe8 +0008E0r 1 FF .hibytes $ffe9 +0008E1r 1 FF .hibytes $ffea +0008E2r 1 FF .hibytes $ffeb +0008E3r 1 FF .hibytes $ffec +0008E4r 1 FF .hibytes $ffed +0008E5r 1 FF .hibytes $ffee +0008E6r 1 FF .hibytes $ffef +0008E7r 1 FF .hibytes $fff0 +0008E8r 1 FF .hibytes $fff1 +0008E9r 1 FF .hibytes $fff2 +0008EAr 1 FF .hibytes $fff3 +0008EBr 1 FF .hibytes $fff4 +0008ECr 1 FF .hibytes $fff5 +0008EDr 1 FF .hibytes $fff6 +0008EEr 1 FF .hibytes $fff7 +0008EFr 1 FF .hibytes $fff8 +0008F0r 1 FF .hibytes $fff9 +0008F1r 1 FF .hibytes $fffa +0008F2r 1 FF .hibytes $fffb +0008F3r 1 FF .hibytes $fffc +0008F4r 1 FF .hibytes $fffd +0008F5r 1 FF .hibytes $fffe +0008F6r 1 FF .hibytes $ffff 0008F7r 1 -0008F7r 1 ; 4-digit hex values, uppercase -0008F7r 1 00 .hibytes $0000 -0008F8r 1 00 .hibytes $0001 -0008F9r 1 00 .hibytes $0002 -0008FAr 1 00 .hibytes $0003 -0008FBr 1 00 .hibytes $0004 -0008FCr 1 00 .hibytes $0005 -0008FDr 1 00 .hibytes $0006 -0008FEr 1 00 .hibytes $0007 -0008FFr 1 00 .hibytes $0008 -000900r 1 00 .hibytes $0009 -000901r 1 00 .hibytes $000A -000902r 1 00 .hibytes $000B -000903r 1 00 .hibytes $000C -000904r 1 00 .hibytes $000D -000905r 1 00 .hibytes $000E -000906r 1 00 .hibytes $000F -000907r 1 00 .hibytes $0010 -000908r 1 00 .hibytes $0011 -000909r 1 00 .hibytes $0012 -00090Ar 1 00 .hibytes $0013 -00090Br 1 00 .hibytes $0070 -00090Cr 1 00 .hibytes $0071 -00090Dr 1 00 .hibytes $0072 -00090Er 1 00 .hibytes $0073 -00090Fr 1 00 .hibytes $0074 -000910r 1 00 .hibytes $0075 -000911r 1 00 .hibytes $0076 -000912r 1 00 .hibytes $0077 -000913r 1 00 .hibytes $0078 -000914r 1 00 .hibytes $0079 -000915r 1 00 .hibytes $007A -000916r 1 00 .hibytes $007B -000917r 1 00 .hibytes $007C -000918r 1 00 .hibytes $007D -000919r 1 00 .hibytes $007E -00091Ar 1 00 .hibytes $007F -00091Br 1 00 .hibytes $0080 -00091Cr 1 00 .hibytes $0081 -00091Dr 1 00 .hibytes $0082 -00091Er 1 00 .hibytes $0083 -00091Fr 1 00 .hibytes $0084 -000920r 1 00 .hibytes $0085 -000921r 1 00 .hibytes $0086 -000922r 1 00 .hibytes $00F0 -000923r 1 00 .hibytes $00F1 -000924r 1 00 .hibytes $00F2 -000925r 1 00 .hibytes $00F3 -000926r 1 00 .hibytes $00F4 -000927r 1 00 .hibytes $00F5 -000928r 1 00 .hibytes $00F6 -000929r 1 00 .hibytes $00F7 -00092Ar 1 00 .hibytes $00F8 -00092Br 1 00 .hibytes $00F9 -00092Cr 1 00 .hibytes $00FA -00092Dr 1 00 .hibytes $00FB -00092Er 1 00 .hibytes $00FC -00092Fr 1 00 .hibytes $00FD -000930r 1 00 .hibytes $00FE -000931r 1 00 .hibytes $00FF -000932r 1 01 .hibytes $0100 -000933r 1 01 .hibytes $0101 -000934r 1 01 .hibytes $0102 -000935r 1 01 .hibytes $0103 -000936r 1 0F .hibytes $0FD2 -000937r 1 0F .hibytes $0FD3 -000938r 1 0F .hibytes $0FD4 -000939r 1 0F .hibytes $0FD5 -00093Ar 1 0F .hibytes $0FD6 -00093Br 1 0F .hibytes $0FD7 -00093Cr 1 0F .hibytes $0FD8 -00093Dr 1 0F .hibytes $0FD9 -00093Er 1 0F .hibytes $0FDA -00093Fr 1 0F .hibytes $0FDB -000940r 1 0F .hibytes $0FDC -000941r 1 0F .hibytes $0FDD -000942r 1 0F .hibytes $0FDE -000943r 1 0F .hibytes $0FDF -000944r 1 0F .hibytes $0FE0 -000945r 1 0F .hibytes $0FE1 -000946r 1 0F .hibytes $0FE2 -000947r 1 0F .hibytes $0FE3 -000948r 1 0F .hibytes $0FE4 -000949r 1 0F .hibytes $0FE5 -00094Ar 1 0F .hibytes $0FE6 -00094Br 1 0F .hibytes $0FE7 -00094Cr 1 0F .hibytes $0FE8 -00094Dr 1 0F .hibytes $0FE9 -00094Er 1 0F .hibytes $0FEA -00094Fr 1 0F .hibytes $0FEB -000950r 1 0F .hibytes $0FEC -000951r 1 0F .hibytes $0FED -000952r 1 0F .hibytes $0FEE -000953r 1 0F .hibytes $0FEF -000954r 1 0F .hibytes $0FF0 -000955r 1 0F .hibytes $0FF1 -000956r 1 0F .hibytes $0FF2 -000957r 1 0F .hibytes $0FF3 -000958r 1 0F .hibytes $0FF4 -000959r 1 0F .hibytes $0FF5 -00095Ar 1 0F .hibytes $0FF6 -00095Br 1 0F .hibytes $0FF7 -00095Cr 1 0F .hibytes $0FF8 -00095Dr 1 0F .hibytes $0FF9 -00095Er 1 0F .hibytes $0FFA -00095Fr 1 0F .hibytes $0FFB -000960r 1 0F .hibytes $0FFC -000961r 1 0F .hibytes $0FFD -000962r 1 0F .hibytes $0FFE -000963r 1 0F .hibytes $0FFF -000964r 1 10 .hibytes $1000 -000965r 1 10 .hibytes $1001 -000966r 1 10 .hibytes $1002 -000967r 1 10 .hibytes $1003 -000968r 1 10 .hibytes $1004 -000969r 1 10 .hibytes $1005 -00096Ar 1 10 .hibytes $1006 -00096Br 1 10 .hibytes $1007 -00096Cr 1 10 .hibytes $1008 -00096Dr 1 7F .hibytes $7FF0 -00096Er 1 7F .hibytes $7FF1 -00096Fr 1 7F .hibytes $7FF2 -000970r 1 7F .hibytes $7FF3 -000971r 1 7F .hibytes $7FF4 -000972r 1 7F .hibytes $7FF5 -000973r 1 7F .hibytes $7FF6 -000974r 1 7F .hibytes $7FF7 -000975r 1 7F .hibytes $7FF8 -000976r 1 7F .hibytes $7FF9 -000977r 1 7F .hibytes $7FFA -000978r 1 7F .hibytes $7FFB -000979r 1 7F .hibytes $7FFC -00097Ar 1 7F .hibytes $7FFD -00097Br 1 7F .hibytes $7FFE -00097Cr 1 7F .hibytes $7FFF -00097Dr 1 80 .hibytes $8000 -00097Er 1 80 .hibytes $8001 -00097Fr 1 80 .hibytes $8002 -000980r 1 80 .hibytes $8003 -000981r 1 80 .hibytes $8004 -000982r 1 80 .hibytes $8005 -000983r 1 80 .hibytes $8006 -000984r 1 80 .hibytes $8007 -000985r 1 80 .hibytes $8008 -000986r 1 80 .hibytes $8009 -000987r 1 80 .hibytes $800A -000988r 1 80 .hibytes $800B -000989r 1 9F .hibytes $9FE1 -00098Ar 1 9F .hibytes $9FE2 -00098Br 1 9F .hibytes $9FE3 -00098Cr 1 9F .hibytes $9FE4 -00098Dr 1 9F .hibytes $9FE5 -00098Er 1 9F .hibytes $9FE6 -00098Fr 1 9F .hibytes $9FE7 -000990r 1 9F .hibytes $9FE8 -000991r 1 9F .hibytes $9FE9 -000992r 1 9F .hibytes $9FEA -000993r 1 9F .hibytes $9FEB -000994r 1 9F .hibytes $9FEC -000995r 1 9F .hibytes $9FED -000996r 1 9F .hibytes $9FEE -000997r 1 9F .hibytes $9FEF -000998r 1 9F .hibytes $9FF0 -000999r 1 9F .hibytes $9FF1 -00099Ar 1 9F .hibytes $9FF2 -00099Br 1 9F .hibytes $9FF3 -00099Cr 1 9F .hibytes $9FF4 -00099Dr 1 9F .hibytes $9FF5 -00099Er 1 9F .hibytes $9FF6 -00099Fr 1 9F .hibytes $9FF7 -0009A0r 1 9F .hibytes $9FF8 -0009A1r 1 9F .hibytes $9FF9 -0009A2r 1 9F .hibytes $9FFA -0009A3r 1 9F .hibytes $9FFB -0009A4r 1 9F .hibytes $9FFC -0009A5r 1 9F .hibytes $9FFD -0009A6r 1 9F .hibytes $9FFE -0009A7r 1 9F .hibytes $9FFF -0009A8r 1 A0 .hibytes $A000 -0009A9r 1 A0 .hibytes $A001 -0009AAr 1 A0 .hibytes $A002 -0009ABr 1 A0 .hibytes $A003 -0009ACr 1 A0 .hibytes $A004 -0009ADr 1 A0 .hibytes $A005 -0009AEr 1 A0 .hibytes $A006 -0009AFr 1 A0 .hibytes $A007 -0009B0r 1 A0 .hibytes $A008 -0009B1r 1 A0 .hibytes $A009 -0009B2r 1 A0 .hibytes $A00A -0009B3r 1 A0 .hibytes $A00B -0009B4r 1 A0 .hibytes $A00C -0009B5r 1 A0 .hibytes $A00D -0009B6r 1 A0 .hibytes $A00E -0009B7r 1 A0 .hibytes $A00F -0009B8r 1 AF .hibytes $AFE1 -0009B9r 1 AF .hibytes $AFE2 -0009BAr 1 AF .hibytes $AFE3 -0009BBr 1 AF .hibytes $AFE4 -0009BCr 1 AF .hibytes $AFE5 -0009BDr 1 AF .hibytes $AFE6 -0009BEr 1 AF .hibytes $AFE7 -0009BFr 1 AF .hibytes $AFE8 -0009C0r 1 AF .hibytes $AFE9 -0009C1r 1 AF .hibytes $AFEA -0009C2r 1 AF .hibytes $AFEB -0009C3r 1 AF .hibytes $AFEC -0009C4r 1 AF .hibytes $AFED -0009C5r 1 AF .hibytes $AFEE -0009C6r 1 AF .hibytes $AFEF -0009C7r 1 AF .hibytes $AFF0 -0009C8r 1 AF .hibytes $AFF1 -0009C9r 1 AF .hibytes $AFF2 -0009CAr 1 AF .hibytes $AFF3 -0009CBr 1 AF .hibytes $AFF4 -0009CCr 1 AF .hibytes $AFF5 -0009CDr 1 AF .hibytes $AFF6 -0009CEr 1 AF .hibytes $AFF7 -0009CFr 1 AF .hibytes $AFF8 -0009D0r 1 AF .hibytes $AFF9 -0009D1r 1 AF .hibytes $AFFA -0009D2r 1 AF .hibytes $AFFB -0009D3r 1 AF .hibytes $AFFC -0009D4r 1 AF .hibytes $AFFD -0009D5r 1 AF .hibytes $AFFE -0009D6r 1 AF .hibytes $AFFF -0009D7r 1 B0 .hibytes $B000 -0009D8r 1 B0 .hibytes $B001 -0009D9r 1 B0 .hibytes $B002 -0009DAr 1 B0 .hibytes $B003 -0009DBr 1 B0 .hibytes $B004 -0009DCr 1 B0 .hibytes $B005 -0009DDr 1 B0 .hibytes $B006 -0009DEr 1 B0 .hibytes $B007 -0009DFr 1 B0 .hibytes $B008 -0009E0r 1 B0 .hibytes $B009 -0009E1r 1 B0 .hibytes $B00A -0009E2r 1 B0 .hibytes $B00B -0009E3r 1 B0 .hibytes $B00C -0009E4r 1 B0 .hibytes $B00D -0009E5r 1 B0 .hibytes $B00E -0009E6r 1 B0 .hibytes $B00F -0009E7r 1 BF .hibytes $BFE1 -0009E8r 1 BF .hibytes $BFE2 -0009E9r 1 BF .hibytes $BFE3 -0009EAr 1 BF .hibytes $BFE4 -0009EBr 1 BF .hibytes $BFE5 -0009ECr 1 BF .hibytes $BFE6 -0009EDr 1 BF .hibytes $BFE7 -0009EEr 1 BF .hibytes $BFE8 -0009EFr 1 BF .hibytes $BFE9 -0009F0r 1 BF .hibytes $BFEA -0009F1r 1 BF .hibytes $BFEB -0009F2r 1 BF .hibytes $BFEC -0009F3r 1 BF .hibytes $BFED -0009F4r 1 BF .hibytes $BFEE -0009F5r 1 BF .hibytes $BFEF -0009F6r 1 BF .hibytes $BFF0 -0009F7r 1 BF .hibytes $BFF1 -0009F8r 1 BF .hibytes $BFF2 -0009F9r 1 BF .hibytes $BFF3 -0009FAr 1 BF .hibytes $BFF4 -0009FBr 1 BF .hibytes $BFF5 -0009FCr 1 BF .hibytes $BFF6 -0009FDr 1 BF .hibytes $BFF7 -0009FEr 1 BF .hibytes $BFF8 -0009FFr 1 BF .hibytes $BFF9 -000A00r 1 BF .hibytes $BFFA -000A01r 1 BF .hibytes $BFFB -000A02r 1 BF .hibytes $BFFC -000A03r 1 BF .hibytes $BFFD -000A04r 1 BF .hibytes $BFFE -000A05r 1 BF .hibytes $BFFF -000A06r 1 C0 .hibytes $C000 -000A07r 1 C0 .hibytes $C001 -000A08r 1 C0 .hibytes $C002 -000A09r 1 C0 .hibytes $C003 -000A0Ar 1 C0 .hibytes $C004 -000A0Br 1 C0 .hibytes $C005 -000A0Cr 1 C0 .hibytes $C006 -000A0Dr 1 C0 .hibytes $C007 -000A0Er 1 C0 .hibytes $C008 -000A0Fr 1 C0 .hibytes $C009 -000A10r 1 C0 .hibytes $C00A -000A11r 1 C0 .hibytes $C00B -000A12r 1 C0 .hibytes $C00C -000A13r 1 C0 .hibytes $C00D -000A14r 1 C0 .hibytes $C00E -000A15r 1 C0 .hibytes $C00F -000A16r 1 CF .hibytes $CFE1 -000A17r 1 CF .hibytes $CFE2 -000A18r 1 CF .hibytes $CFE3 -000A19r 1 CF .hibytes $CFE4 -000A1Ar 1 CF .hibytes $CFE5 -000A1Br 1 CF .hibytes $CFE6 -000A1Cr 1 CF .hibytes $CFE7 -000A1Dr 1 CF .hibytes $CFE8 -000A1Er 1 CF .hibytes $CFE9 -000A1Fr 1 CF .hibytes $CFEA -000A20r 1 CF .hibytes $CFEB -000A21r 1 CF .hibytes $CFEC -000A22r 1 CF .hibytes $CFED -000A23r 1 CF .hibytes $CFEE -000A24r 1 CF .hibytes $CFEF -000A25r 1 CF .hibytes $CFF0 -000A26r 1 CF .hibytes $CFF1 -000A27r 1 CF .hibytes $CFF2 -000A28r 1 CF .hibytes $CFF3 -000A29r 1 CF .hibytes $CFF4 -000A2Ar 1 CF .hibytes $CFF5 -000A2Br 1 CF .hibytes $CFF6 -000A2Cr 1 CF .hibytes $CFF7 -000A2Dr 1 CF .hibytes $CFF8 -000A2Er 1 CF .hibytes $CFF9 -000A2Fr 1 CF .hibytes $CFFA -000A30r 1 CF .hibytes $CFFB -000A31r 1 CF .hibytes $CFFC -000A32r 1 CF .hibytes $CFFD -000A33r 1 CF .hibytes $CFFE -000A34r 1 CF .hibytes $CFFF -000A35r 1 D0 .hibytes $D000 -000A36r 1 D0 .hibytes $D001 -000A37r 1 D0 .hibytes $D002 -000A38r 1 D0 .hibytes $D003 -000A39r 1 D0 .hibytes $D004 -000A3Ar 1 D0 .hibytes $D005 -000A3Br 1 D0 .hibytes $D006 -000A3Cr 1 D0 .hibytes $D007 -000A3Dr 1 D0 .hibytes $D008 -000A3Er 1 D0 .hibytes $D009 -000A3Fr 1 D0 .hibytes $D00A -000A40r 1 D0 .hibytes $D00B -000A41r 1 D0 .hibytes $D00C -000A42r 1 D0 .hibytes $D00D -000A43r 1 D0 .hibytes $D00E -000A44r 1 D0 .hibytes $D00F -000A45r 1 DF .hibytes $DFE1 -000A46r 1 DF .hibytes $DFE2 -000A47r 1 DF .hibytes $DFE3 -000A48r 1 DF .hibytes $DFE4 -000A49r 1 DF .hibytes $DFE5 -000A4Ar 1 DF .hibytes $DFE6 -000A4Br 1 DF .hibytes $DFE7 -000A4Cr 1 DF .hibytes $DFE8 -000A4Dr 1 DF .hibytes $DFE9 -000A4Er 1 DF .hibytes $DFEA -000A4Fr 1 DF .hibytes $DFEB -000A50r 1 DF .hibytes $DFEC -000A51r 1 DF .hibytes $DFED -000A52r 1 DF .hibytes $DFEE -000A53r 1 DF .hibytes $DFEF -000A54r 1 DF .hibytes $DFF0 -000A55r 1 DF .hibytes $DFF1 -000A56r 1 DF .hibytes $DFF2 -000A57r 1 DF .hibytes $DFF3 -000A58r 1 DF .hibytes $DFF4 -000A59r 1 DF .hibytes $DFF5 -000A5Ar 1 DF .hibytes $DFF6 -000A5Br 1 DF .hibytes $DFF7 -000A5Cr 1 DF .hibytes $DFF8 -000A5Dr 1 DF .hibytes $DFF9 -000A5Er 1 DF .hibytes $DFFA -000A5Fr 1 DF .hibytes $DFFB -000A60r 1 DF .hibytes $DFFC -000A61r 1 DF .hibytes $DFFD -000A62r 1 DF .hibytes $DFFE -000A63r 1 DF .hibytes $DFFF -000A64r 1 E0 .hibytes $E000 -000A65r 1 E0 .hibytes $E001 -000A66r 1 E0 .hibytes $E002 -000A67r 1 E0 .hibytes $E003 -000A68r 1 E0 .hibytes $E004 -000A69r 1 E0 .hibytes $E005 -000A6Ar 1 E0 .hibytes $E006 -000A6Br 1 E0 .hibytes $E007 -000A6Cr 1 E0 .hibytes $E008 -000A6Dr 1 E0 .hibytes $E009 -000A6Er 1 E0 .hibytes $E00A -000A6Fr 1 E0 .hibytes $E00B -000A70r 1 E0 .hibytes $E00C -000A71r 1 E0 .hibytes $E00D -000A72r 1 E0 .hibytes $E00E -000A73r 1 E0 .hibytes $E00F -000A74r 1 EF .hibytes $EFE1 -000A75r 1 EF .hibytes $EFE2 -000A76r 1 EF .hibytes $EFE3 -000A77r 1 EF .hibytes $EFE4 -000A78r 1 EF .hibytes $EFE5 -000A79r 1 EF .hibytes $EFE6 -000A7Ar 1 EF .hibytes $EFE7 -000A7Br 1 EF .hibytes $EFE8 -000A7Cr 1 EF .hibytes $EFE9 -000A7Dr 1 EF .hibytes $EFEA -000A7Er 1 EF .hibytes $EFEB -000A7Fr 1 EF .hibytes $EFEC -000A80r 1 EF .hibytes $EFED -000A81r 1 EF .hibytes $EFEE -000A82r 1 EF .hibytes $EFEF -000A83r 1 EF .hibytes $EFF0 -000A84r 1 EF .hibytes $EFF1 -000A85r 1 EF .hibytes $EFF2 -000A86r 1 EF .hibytes $EFF3 -000A87r 1 EF .hibytes $EFF4 -000A88r 1 EF .hibytes $EFF5 -000A89r 1 EF .hibytes $EFF6 -000A8Ar 1 EF .hibytes $EFF7 -000A8Br 1 EF .hibytes $EFF8 -000A8Cr 1 EF .hibytes $EFF9 -000A8Dr 1 EF .hibytes $EFFA -000A8Er 1 EF .hibytes $EFFB -000A8Fr 1 EF .hibytes $EFFC -000A90r 1 EF .hibytes $EFFD -000A91r 1 EF .hibytes $EFFE -000A92r 1 EF .hibytes $EFFF -000A93r 1 F0 .hibytes $F000 -000A94r 1 F0 .hibytes $F001 -000A95r 1 F0 .hibytes $F002 -000A96r 1 F0 .hibytes $F003 -000A97r 1 F0 .hibytes $F004 -000A98r 1 F0 .hibytes $F005 -000A99r 1 F0 .hibytes $F006 -000A9Ar 1 F0 .hibytes $F007 -000A9Br 1 F0 .hibytes $F008 -000A9Cr 1 F0 .hibytes $F009 -000A9Dr 1 F0 .hibytes $F00A -000A9Er 1 F0 .hibytes $F00B -000A9Fr 1 F0 .hibytes $F00C -000AA0r 1 F0 .hibytes $F00D -000AA1r 1 F0 .hibytes $F00E -000AA2r 1 F0 .hibytes $F00F -000AA3r 1 FF .hibytes $FFE1 -000AA4r 1 FF .hibytes $FFE2 -000AA5r 1 FF .hibytes $FFE3 -000AA6r 1 FF .hibytes $FFE4 -000AA7r 1 FF .hibytes $FFE5 -000AA8r 1 FF .hibytes $FFE6 -000AA9r 1 FF .hibytes $FFE7 -000AAAr 1 FF .hibytes $FFE8 -000AABr 1 FF .hibytes $FFE9 -000AACr 1 FF .hibytes $FFEA -000AADr 1 FF .hibytes $FFEB -000AAEr 1 FF .hibytes $FFEC -000AAFr 1 FF .hibytes $FFED -000AB0r 1 FF .hibytes $FFEE -000AB1r 1 FF .hibytes $FFEF -000AB2r 1 FF .hibytes $FFF0 -000AB3r 1 FF .hibytes $FFF1 -000AB4r 1 FF .hibytes $FFF2 -000AB5r 1 FF .hibytes $FFF3 -000AB6r 1 FF .hibytes $FFF4 -000AB7r 1 FF .hibytes $FFF5 -000AB8r 1 FF .hibytes $FFF6 -000AB9r 1 FF .hibytes $FFF7 -000ABAr 1 FF .hibytes $FFF8 -000ABBr 1 FF .hibytes $FFF9 -000ABCr 1 FF .hibytes $FFFA -000ABDr 1 FF .hibytes $FFFB -000ABEr 1 FF .hibytes $FFFC -000ABFr 1 FF .hibytes $FFFD -000AC0r 1 FF .hibytes $FFFE -000AC1r 1 FF .hibytes $FFFF +0008F7r 1 ; 4-digit hex values, uppercase +0008F7r 1 00 .hibytes $0000 +0008F8r 1 00 .hibytes $0001 +0008F9r 1 00 .hibytes $0002 +0008FAr 1 00 .hibytes $0003 +0008FBr 1 00 .hibytes $0004 +0008FCr 1 00 .hibytes $0005 +0008FDr 1 00 .hibytes $0006 +0008FEr 1 00 .hibytes $0007 +0008FFr 1 00 .hibytes $0008 +000900r 1 00 .hibytes $0009 +000901r 1 00 .hibytes $000A +000902r 1 00 .hibytes $000B +000903r 1 00 .hibytes $000C +000904r 1 00 .hibytes $000D +000905r 1 00 .hibytes $000E +000906r 1 00 .hibytes $000F +000907r 1 00 .hibytes $0010 +000908r 1 00 .hibytes $0011 +000909r 1 00 .hibytes $0012 +00090Ar 1 00 .hibytes $0013 +00090Br 1 00 .hibytes $0070 +00090Cr 1 00 .hibytes $0071 +00090Dr 1 00 .hibytes $0072 +00090Er 1 00 .hibytes $0073 +00090Fr 1 00 .hibytes $0074 +000910r 1 00 .hibytes $0075 +000911r 1 00 .hibytes $0076 +000912r 1 00 .hibytes $0077 +000913r 1 00 .hibytes $0078 +000914r 1 00 .hibytes $0079 +000915r 1 00 .hibytes $007A +000916r 1 00 .hibytes $007B +000917r 1 00 .hibytes $007C +000918r 1 00 .hibytes $007D +000919r 1 00 .hibytes $007E +00091Ar 1 00 .hibytes $007F +00091Br 1 00 .hibytes $0080 +00091Cr 1 00 .hibytes $0081 +00091Dr 1 00 .hibytes $0082 +00091Er 1 00 .hibytes $0083 +00091Fr 1 00 .hibytes $0084 +000920r 1 00 .hibytes $0085 +000921r 1 00 .hibytes $0086 +000922r 1 00 .hibytes $00F0 +000923r 1 00 .hibytes $00F1 +000924r 1 00 .hibytes $00F2 +000925r 1 00 .hibytes $00F3 +000926r 1 00 .hibytes $00F4 +000927r 1 00 .hibytes $00F5 +000928r 1 00 .hibytes $00F6 +000929r 1 00 .hibytes $00F7 +00092Ar 1 00 .hibytes $00F8 +00092Br 1 00 .hibytes $00F9 +00092Cr 1 00 .hibytes $00FA +00092Dr 1 00 .hibytes $00FB +00092Er 1 00 .hibytes $00FC +00092Fr 1 00 .hibytes $00FD +000930r 1 00 .hibytes $00FE +000931r 1 00 .hibytes $00FF +000932r 1 01 .hibytes $0100 +000933r 1 01 .hibytes $0101 +000934r 1 01 .hibytes $0102 +000935r 1 01 .hibytes $0103 +000936r 1 0F .hibytes $0FD2 +000937r 1 0F .hibytes $0FD3 +000938r 1 0F .hibytes $0FD4 +000939r 1 0F .hibytes $0FD5 +00093Ar 1 0F .hibytes $0FD6 +00093Br 1 0F .hibytes $0FD7 +00093Cr 1 0F .hibytes $0FD8 +00093Dr 1 0F .hibytes $0FD9 +00093Er 1 0F .hibytes $0FDA +00093Fr 1 0F .hibytes $0FDB +000940r 1 0F .hibytes $0FDC +000941r 1 0F .hibytes $0FDD +000942r 1 0F .hibytes $0FDE +000943r 1 0F .hibytes $0FDF +000944r 1 0F .hibytes $0FE0 +000945r 1 0F .hibytes $0FE1 +000946r 1 0F .hibytes $0FE2 +000947r 1 0F .hibytes $0FE3 +000948r 1 0F .hibytes $0FE4 +000949r 1 0F .hibytes $0FE5 +00094Ar 1 0F .hibytes $0FE6 +00094Br 1 0F .hibytes $0FE7 +00094Cr 1 0F .hibytes $0FE8 +00094Dr 1 0F .hibytes $0FE9 +00094Er 1 0F .hibytes $0FEA +00094Fr 1 0F .hibytes $0FEB +000950r 1 0F .hibytes $0FEC +000951r 1 0F .hibytes $0FED +000952r 1 0F .hibytes $0FEE +000953r 1 0F .hibytes $0FEF +000954r 1 0F .hibytes $0FF0 +000955r 1 0F .hibytes $0FF1 +000956r 1 0F .hibytes $0FF2 +000957r 1 0F .hibytes $0FF3 +000958r 1 0F .hibytes $0FF4 +000959r 1 0F .hibytes $0FF5 +00095Ar 1 0F .hibytes $0FF6 +00095Br 1 0F .hibytes $0FF7 +00095Cr 1 0F .hibytes $0FF8 +00095Dr 1 0F .hibytes $0FF9 +00095Er 1 0F .hibytes $0FFA +00095Fr 1 0F .hibytes $0FFB +000960r 1 0F .hibytes $0FFC +000961r 1 0F .hibytes $0FFD +000962r 1 0F .hibytes $0FFE +000963r 1 0F .hibytes $0FFF +000964r 1 10 .hibytes $1000 +000965r 1 10 .hibytes $1001 +000966r 1 10 .hibytes $1002 +000967r 1 10 .hibytes $1003 +000968r 1 10 .hibytes $1004 +000969r 1 10 .hibytes $1005 +00096Ar 1 10 .hibytes $1006 +00096Br 1 10 .hibytes $1007 +00096Cr 1 10 .hibytes $1008 +00096Dr 1 7F .hibytes $7FF0 +00096Er 1 7F .hibytes $7FF1 +00096Fr 1 7F .hibytes $7FF2 +000970r 1 7F .hibytes $7FF3 +000971r 1 7F .hibytes $7FF4 +000972r 1 7F .hibytes $7FF5 +000973r 1 7F .hibytes $7FF6 +000974r 1 7F .hibytes $7FF7 +000975r 1 7F .hibytes $7FF8 +000976r 1 7F .hibytes $7FF9 +000977r 1 7F .hibytes $7FFA +000978r 1 7F .hibytes $7FFB +000979r 1 7F .hibytes $7FFC +00097Ar 1 7F .hibytes $7FFD +00097Br 1 7F .hibytes $7FFE +00097Cr 1 7F .hibytes $7FFF +00097Dr 1 80 .hibytes $8000 +00097Er 1 80 .hibytes $8001 +00097Fr 1 80 .hibytes $8002 +000980r 1 80 .hibytes $8003 +000981r 1 80 .hibytes $8004 +000982r 1 80 .hibytes $8005 +000983r 1 80 .hibytes $8006 +000984r 1 80 .hibytes $8007 +000985r 1 80 .hibytes $8008 +000986r 1 80 .hibytes $8009 +000987r 1 80 .hibytes $800A +000988r 1 80 .hibytes $800B +000989r 1 9F .hibytes $9FE1 +00098Ar 1 9F .hibytes $9FE2 +00098Br 1 9F .hibytes $9FE3 +00098Cr 1 9F .hibytes $9FE4 +00098Dr 1 9F .hibytes $9FE5 +00098Er 1 9F .hibytes $9FE6 +00098Fr 1 9F .hibytes $9FE7 +000990r 1 9F .hibytes $9FE8 +000991r 1 9F .hibytes $9FE9 +000992r 1 9F .hibytes $9FEA +000993r 1 9F .hibytes $9FEB +000994r 1 9F .hibytes $9FEC +000995r 1 9F .hibytes $9FED +000996r 1 9F .hibytes $9FEE +000997r 1 9F .hibytes $9FEF +000998r 1 9F .hibytes $9FF0 +000999r 1 9F .hibytes $9FF1 +00099Ar 1 9F .hibytes $9FF2 +00099Br 1 9F .hibytes $9FF3 +00099Cr 1 9F .hibytes $9FF4 +00099Dr 1 9F .hibytes $9FF5 +00099Er 1 9F .hibytes $9FF6 +00099Fr 1 9F .hibytes $9FF7 +0009A0r 1 9F .hibytes $9FF8 +0009A1r 1 9F .hibytes $9FF9 +0009A2r 1 9F .hibytes $9FFA +0009A3r 1 9F .hibytes $9FFB +0009A4r 1 9F .hibytes $9FFC +0009A5r 1 9F .hibytes $9FFD +0009A6r 1 9F .hibytes $9FFE +0009A7r 1 9F .hibytes $9FFF +0009A8r 1 A0 .hibytes $A000 +0009A9r 1 A0 .hibytes $A001 +0009AAr 1 A0 .hibytes $A002 +0009ABr 1 A0 .hibytes $A003 +0009ACr 1 A0 .hibytes $A004 +0009ADr 1 A0 .hibytes $A005 +0009AEr 1 A0 .hibytes $A006 +0009AFr 1 A0 .hibytes $A007 +0009B0r 1 A0 .hibytes $A008 +0009B1r 1 A0 .hibytes $A009 +0009B2r 1 A0 .hibytes $A00A +0009B3r 1 A0 .hibytes $A00B +0009B4r 1 A0 .hibytes $A00C +0009B5r 1 A0 .hibytes $A00D +0009B6r 1 A0 .hibytes $A00E +0009B7r 1 A0 .hibytes $A00F +0009B8r 1 AF .hibytes $AFE1 +0009B9r 1 AF .hibytes $AFE2 +0009BAr 1 AF .hibytes $AFE3 +0009BBr 1 AF .hibytes $AFE4 +0009BCr 1 AF .hibytes $AFE5 +0009BDr 1 AF .hibytes $AFE6 +0009BEr 1 AF .hibytes $AFE7 +0009BFr 1 AF .hibytes $AFE8 +0009C0r 1 AF .hibytes $AFE9 +0009C1r 1 AF .hibytes $AFEA +0009C2r 1 AF .hibytes $AFEB +0009C3r 1 AF .hibytes $AFEC +0009C4r 1 AF .hibytes $AFED +0009C5r 1 AF .hibytes $AFEE +0009C6r 1 AF .hibytes $AFEF +0009C7r 1 AF .hibytes $AFF0 +0009C8r 1 AF .hibytes $AFF1 +0009C9r 1 AF .hibytes $AFF2 +0009CAr 1 AF .hibytes $AFF3 +0009CBr 1 AF .hibytes $AFF4 +0009CCr 1 AF .hibytes $AFF5 +0009CDr 1 AF .hibytes $AFF6 +0009CEr 1 AF .hibytes $AFF7 +0009CFr 1 AF .hibytes $AFF8 +0009D0r 1 AF .hibytes $AFF9 +0009D1r 1 AF .hibytes $AFFA +0009D2r 1 AF .hibytes $AFFB +0009D3r 1 AF .hibytes $AFFC +0009D4r 1 AF .hibytes $AFFD +0009D5r 1 AF .hibytes $AFFE +0009D6r 1 AF .hibytes $AFFF +0009D7r 1 B0 .hibytes $B000 +0009D8r 1 B0 .hibytes $B001 +0009D9r 1 B0 .hibytes $B002 +0009DAr 1 B0 .hibytes $B003 +0009DBr 1 B0 .hibytes $B004 +0009DCr 1 B0 .hibytes $B005 +0009DDr 1 B0 .hibytes $B006 +0009DEr 1 B0 .hibytes $B007 +0009DFr 1 B0 .hibytes $B008 +0009E0r 1 B0 .hibytes $B009 +0009E1r 1 B0 .hibytes $B00A +0009E2r 1 B0 .hibytes $B00B +0009E3r 1 B0 .hibytes $B00C +0009E4r 1 B0 .hibytes $B00D +0009E5r 1 B0 .hibytes $B00E +0009E6r 1 B0 .hibytes $B00F +0009E7r 1 BF .hibytes $BFE1 +0009E8r 1 BF .hibytes $BFE2 +0009E9r 1 BF .hibytes $BFE3 +0009EAr 1 BF .hibytes $BFE4 +0009EBr 1 BF .hibytes $BFE5 +0009ECr 1 BF .hibytes $BFE6 +0009EDr 1 BF .hibytes $BFE7 +0009EEr 1 BF .hibytes $BFE8 +0009EFr 1 BF .hibytes $BFE9 +0009F0r 1 BF .hibytes $BFEA +0009F1r 1 BF .hibytes $BFEB +0009F2r 1 BF .hibytes $BFEC +0009F3r 1 BF .hibytes $BFED +0009F4r 1 BF .hibytes $BFEE +0009F5r 1 BF .hibytes $BFEF +0009F6r 1 BF .hibytes $BFF0 +0009F7r 1 BF .hibytes $BFF1 +0009F8r 1 BF .hibytes $BFF2 +0009F9r 1 BF .hibytes $BFF3 +0009FAr 1 BF .hibytes $BFF4 +0009FBr 1 BF .hibytes $BFF5 +0009FCr 1 BF .hibytes $BFF6 +0009FDr 1 BF .hibytes $BFF7 +0009FEr 1 BF .hibytes $BFF8 +0009FFr 1 BF .hibytes $BFF9 +000A00r 1 BF .hibytes $BFFA +000A01r 1 BF .hibytes $BFFB +000A02r 1 BF .hibytes $BFFC +000A03r 1 BF .hibytes $BFFD +000A04r 1 BF .hibytes $BFFE +000A05r 1 BF .hibytes $BFFF +000A06r 1 C0 .hibytes $C000 +000A07r 1 C0 .hibytes $C001 +000A08r 1 C0 .hibytes $C002 +000A09r 1 C0 .hibytes $C003 +000A0Ar 1 C0 .hibytes $C004 +000A0Br 1 C0 .hibytes $C005 +000A0Cr 1 C0 .hibytes $C006 +000A0Dr 1 C0 .hibytes $C007 +000A0Er 1 C0 .hibytes $C008 +000A0Fr 1 C0 .hibytes $C009 +000A10r 1 C0 .hibytes $C00A +000A11r 1 C0 .hibytes $C00B +000A12r 1 C0 .hibytes $C00C +000A13r 1 C0 .hibytes $C00D +000A14r 1 C0 .hibytes $C00E +000A15r 1 C0 .hibytes $C00F +000A16r 1 CF .hibytes $CFE1 +000A17r 1 CF .hibytes $CFE2 +000A18r 1 CF .hibytes $CFE3 +000A19r 1 CF .hibytes $CFE4 +000A1Ar 1 CF .hibytes $CFE5 +000A1Br 1 CF .hibytes $CFE6 +000A1Cr 1 CF .hibytes $CFE7 +000A1Dr 1 CF .hibytes $CFE8 +000A1Er 1 CF .hibytes $CFE9 +000A1Fr 1 CF .hibytes $CFEA +000A20r 1 CF .hibytes $CFEB +000A21r 1 CF .hibytes $CFEC +000A22r 1 CF .hibytes $CFED +000A23r 1 CF .hibytes $CFEE +000A24r 1 CF .hibytes $CFEF +000A25r 1 CF .hibytes $CFF0 +000A26r 1 CF .hibytes $CFF1 +000A27r 1 CF .hibytes $CFF2 +000A28r 1 CF .hibytes $CFF3 +000A29r 1 CF .hibytes $CFF4 +000A2Ar 1 CF .hibytes $CFF5 +000A2Br 1 CF .hibytes $CFF6 +000A2Cr 1 CF .hibytes $CFF7 +000A2Dr 1 CF .hibytes $CFF8 +000A2Er 1 CF .hibytes $CFF9 +000A2Fr 1 CF .hibytes $CFFA +000A30r 1 CF .hibytes $CFFB +000A31r 1 CF .hibytes $CFFC +000A32r 1 CF .hibytes $CFFD +000A33r 1 CF .hibytes $CFFE +000A34r 1 CF .hibytes $CFFF +000A35r 1 D0 .hibytes $D000 +000A36r 1 D0 .hibytes $D001 +000A37r 1 D0 .hibytes $D002 +000A38r 1 D0 .hibytes $D003 +000A39r 1 D0 .hibytes $D004 +000A3Ar 1 D0 .hibytes $D005 +000A3Br 1 D0 .hibytes $D006 +000A3Cr 1 D0 .hibytes $D007 +000A3Dr 1 D0 .hibytes $D008 +000A3Er 1 D0 .hibytes $D009 +000A3Fr 1 D0 .hibytes $D00A +000A40r 1 D0 .hibytes $D00B +000A41r 1 D0 .hibytes $D00C +000A42r 1 D0 .hibytes $D00D +000A43r 1 D0 .hibytes $D00E +000A44r 1 D0 .hibytes $D00F +000A45r 1 DF .hibytes $DFE1 +000A46r 1 DF .hibytes $DFE2 +000A47r 1 DF .hibytes $DFE3 +000A48r 1 DF .hibytes $DFE4 +000A49r 1 DF .hibytes $DFE5 +000A4Ar 1 DF .hibytes $DFE6 +000A4Br 1 DF .hibytes $DFE7 +000A4Cr 1 DF .hibytes $DFE8 +000A4Dr 1 DF .hibytes $DFE9 +000A4Er 1 DF .hibytes $DFEA +000A4Fr 1 DF .hibytes $DFEB +000A50r 1 DF .hibytes $DFEC +000A51r 1 DF .hibytes $DFED +000A52r 1 DF .hibytes $DFEE +000A53r 1 DF .hibytes $DFEF +000A54r 1 DF .hibytes $DFF0 +000A55r 1 DF .hibytes $DFF1 +000A56r 1 DF .hibytes $DFF2 +000A57r 1 DF .hibytes $DFF3 +000A58r 1 DF .hibytes $DFF4 +000A59r 1 DF .hibytes $DFF5 +000A5Ar 1 DF .hibytes $DFF6 +000A5Br 1 DF .hibytes $DFF7 +000A5Cr 1 DF .hibytes $DFF8 +000A5Dr 1 DF .hibytes $DFF9 +000A5Er 1 DF .hibytes $DFFA +000A5Fr 1 DF .hibytes $DFFB +000A60r 1 DF .hibytes $DFFC +000A61r 1 DF .hibytes $DFFD +000A62r 1 DF .hibytes $DFFE +000A63r 1 DF .hibytes $DFFF +000A64r 1 E0 .hibytes $E000 +000A65r 1 E0 .hibytes $E001 +000A66r 1 E0 .hibytes $E002 +000A67r 1 E0 .hibytes $E003 +000A68r 1 E0 .hibytes $E004 +000A69r 1 E0 .hibytes $E005 +000A6Ar 1 E0 .hibytes $E006 +000A6Br 1 E0 .hibytes $E007 +000A6Cr 1 E0 .hibytes $E008 +000A6Dr 1 E0 .hibytes $E009 +000A6Er 1 E0 .hibytes $E00A +000A6Fr 1 E0 .hibytes $E00B +000A70r 1 E0 .hibytes $E00C +000A71r 1 E0 .hibytes $E00D +000A72r 1 E0 .hibytes $E00E +000A73r 1 E0 .hibytes $E00F +000A74r 1 EF .hibytes $EFE1 +000A75r 1 EF .hibytes $EFE2 +000A76r 1 EF .hibytes $EFE3 +000A77r 1 EF .hibytes $EFE4 +000A78r 1 EF .hibytes $EFE5 +000A79r 1 EF .hibytes $EFE6 +000A7Ar 1 EF .hibytes $EFE7 +000A7Br 1 EF .hibytes $EFE8 +000A7Cr 1 EF .hibytes $EFE9 +000A7Dr 1 EF .hibytes $EFEA +000A7Er 1 EF .hibytes $EFEB +000A7Fr 1 EF .hibytes $EFEC +000A80r 1 EF .hibytes $EFED +000A81r 1 EF .hibytes $EFEE +000A82r 1 EF .hibytes $EFEF +000A83r 1 EF .hibytes $EFF0 +000A84r 1 EF .hibytes $EFF1 +000A85r 1 EF .hibytes $EFF2 +000A86r 1 EF .hibytes $EFF3 +000A87r 1 EF .hibytes $EFF4 +000A88r 1 EF .hibytes $EFF5 +000A89r 1 EF .hibytes $EFF6 +000A8Ar 1 EF .hibytes $EFF7 +000A8Br 1 EF .hibytes $EFF8 +000A8Cr 1 EF .hibytes $EFF9 +000A8Dr 1 EF .hibytes $EFFA +000A8Er 1 EF .hibytes $EFFB +000A8Fr 1 EF .hibytes $EFFC +000A90r 1 EF .hibytes $EFFD +000A91r 1 EF .hibytes $EFFE +000A92r 1 EF .hibytes $EFFF +000A93r 1 F0 .hibytes $F000 +000A94r 1 F0 .hibytes $F001 +000A95r 1 F0 .hibytes $F002 +000A96r 1 F0 .hibytes $F003 +000A97r 1 F0 .hibytes $F004 +000A98r 1 F0 .hibytes $F005 +000A99r 1 F0 .hibytes $F006 +000A9Ar 1 F0 .hibytes $F007 +000A9Br 1 F0 .hibytes $F008 +000A9Cr 1 F0 .hibytes $F009 +000A9Dr 1 F0 .hibytes $F00A +000A9Er 1 F0 .hibytes $F00B +000A9Fr 1 F0 .hibytes $F00C +000AA0r 1 F0 .hibytes $F00D +000AA1r 1 F0 .hibytes $F00E +000AA2r 1 F0 .hibytes $F00F +000AA3r 1 FF .hibytes $FFE1 +000AA4r 1 FF .hibytes $FFE2 +000AA5r 1 FF .hibytes $FFE3 +000AA6r 1 FF .hibytes $FFE4 +000AA7r 1 FF .hibytes $FFE5 +000AA8r 1 FF .hibytes $FFE6 +000AA9r 1 FF .hibytes $FFE7 +000AAAr 1 FF .hibytes $FFE8 +000AABr 1 FF .hibytes $FFE9 +000AACr 1 FF .hibytes $FFEA +000AADr 1 FF .hibytes $FFEB +000AAEr 1 FF .hibytes $FFEC +000AAFr 1 FF .hibytes $FFED +000AB0r 1 FF .hibytes $FFEE +000AB1r 1 FF .hibytes $FFEF +000AB2r 1 FF .hibytes $FFF0 +000AB3r 1 FF .hibytes $FFF1 +000AB4r 1 FF .hibytes $FFF2 +000AB5r 1 FF .hibytes $FFF3 +000AB6r 1 FF .hibytes $FFF4 +000AB7r 1 FF .hibytes $FFF5 +000AB8r 1 FF .hibytes $FFF6 +000AB9r 1 FF .hibytes $FFF7 +000ABAr 1 FF .hibytes $FFF8 +000ABBr 1 FF .hibytes $FFF9 +000ABCr 1 FF .hibytes $FFFA +000ABDr 1 FF .hibytes $FFFB +000ABEr 1 FF .hibytes $FFFC +000ABFr 1 FF .hibytes $FFFD +000AC0r 1 FF .hibytes $FFFE +000AC1r 1 FF .hibytes $FFFF 000AC2r 1 -000AC2r 1 ; alternative hex values -000AC2r 1 00 .hibytes 0h -000AC3r 1 00 .hibytes 1h -000AC4r 1 00 .hibytes 2h -000AC5r 1 00 .hibytes 3h -000AC6r 1 00 .hibytes 4h -000AC7r 1 00 .hibytes 5h -000AC8r 1 00 .hibytes 6h -000AC9r 1 00 .hibytes 7h -000ACAr 1 00 .hibytes 8h -000ACBr 1 00 .hibytes 9h -000ACCr 1 00 .hibytes 0ah -000ACDr 1 00 .hibytes 0bh -000ACEr 1 00 .hibytes 0ch -000ACFr 1 00 .hibytes 0dh -000AD0r 1 00 .hibytes 0eh -000AD1r 1 00 .hibytes 0fh -000AD2r 1 00 .hibytes 10h -000AD3r 1 00 .hibytes 11h -000AD4r 1 00 .hibytes 12h -000AD5r 1 00 .hibytes 13h -000AD6r 1 00 .hibytes 70h -000AD7r 1 00 .hibytes 71h -000AD8r 1 00 .hibytes 72h -000AD9r 1 00 .hibytes 73h -000ADAr 1 00 .hibytes 74h -000ADBr 1 00 .hibytes 75h -000ADCr 1 00 .hibytes 76h -000ADDr 1 00 .hibytes 77h -000ADEr 1 00 .hibytes 78h -000ADFr 1 00 .hibytes 79h -000AE0r 1 00 .hibytes 7ah -000AE1r 1 00 .hibytes 7bh -000AE2r 1 00 .hibytes 7ch -000AE3r 1 00 .hibytes 7dh -000AE4r 1 00 .hibytes 7eh -000AE5r 1 00 .hibytes 7fh -000AE6r 1 00 .hibytes 80h -000AE7r 1 00 .hibytes 81h -000AE8r 1 00 .hibytes 82h -000AE9r 1 00 .hibytes 83h -000AEAr 1 00 .hibytes 84h -000AEBr 1 00 .hibytes 85h -000AECr 1 00 .hibytes 86h -000AEDr 1 00 .hibytes 0f0h -000AEEr 1 00 .hibytes 0f1h -000AEFr 1 00 .hibytes 0f2h -000AF0r 1 00 .hibytes 0f3h -000AF1r 1 00 .hibytes 0f4h -000AF2r 1 00 .hibytes 0f5h -000AF3r 1 00 .hibytes 0f6h -000AF4r 1 00 .hibytes 0f7h -000AF5r 1 00 .hibytes 0f8h -000AF6r 1 00 .hibytes 0f9h -000AF7r 1 00 .hibytes 0fah -000AF8r 1 00 .hibytes 0fbh -000AF9r 1 00 .hibytes 0fch -000AFAr 1 00 .hibytes 0fdh -000AFBr 1 00 .hibytes 0feh -000AFCr 1 00 .hibytes 0ffh -000AFDr 1 01 .hibytes 100h -000AFEr 1 01 .hibytes 101h -000AFFr 1 01 .hibytes 102h -000B00r 1 01 .hibytes 103h -000B01r 1 0F .hibytes 0fd2h -000B02r 1 0F .hibytes 0fd3h -000B03r 1 0F .hibytes 0fd4h -000B04r 1 0F .hibytes 0fd5h -000B05r 1 0F .hibytes 0fd6h -000B06r 1 0F .hibytes 0fd7h -000B07r 1 0F .hibytes 0fd8h -000B08r 1 0F .hibytes 0fd9h -000B09r 1 0F .hibytes 0fdah -000B0Ar 1 0F .hibytes 0fdbh -000B0Br 1 0F .hibytes 0fdch -000B0Cr 1 0F .hibytes 0fddh -000B0Dr 1 0F .hibytes 0fdeh -000B0Er 1 0F .hibytes 0fdfh -000B0Fr 1 0F .hibytes 0fe0h -000B10r 1 0F .hibytes 0fe1h -000B11r 1 0F .hibytes 0fe2h -000B12r 1 0F .hibytes 0fe3h -000B13r 1 0F .hibytes 0fe4h -000B14r 1 0F .hibytes 0fe5h -000B15r 1 0F .hibytes 0fe6h -000B16r 1 0F .hibytes 0fe7h -000B17r 1 0F .hibytes 0fe8h -000B18r 1 0F .hibytes 0fe9h -000B19r 1 0F .hibytes 0feah -000B1Ar 1 0F .hibytes 0febh -000B1Br 1 0F .hibytes 0fech -000B1Cr 1 0F .hibytes 0fedh -000B1Dr 1 0F .hibytes 0feeh -000B1Er 1 0F .hibytes 0fefh -000B1Fr 1 0F .hibytes 0ff0h -000B20r 1 0F .hibytes 0ff1h -000B21r 1 0F .hibytes 0ff2h -000B22r 1 0F .hibytes 0ff3h -000B23r 1 0F .hibytes 0ff4h -000B24r 1 0F .hibytes 0ff5h -000B25r 1 0F .hibytes 0ff6h -000B26r 1 0F .hibytes 0ff7h -000B27r 1 0F .hibytes 0ff8h -000B28r 1 0F .hibytes 0ff9h -000B29r 1 0F .hibytes 0ffah -000B2Ar 1 0F .hibytes 0ffbh -000B2Br 1 0F .hibytes 0ffch -000B2Cr 1 0F .hibytes 0ffdh -000B2Dr 1 0F .hibytes 0ffeh -000B2Er 1 0F .hibytes 0fffh -000B2Fr 1 10 .hibytes 1000h -000B30r 1 10 .hibytes 1001h -000B31r 1 10 .hibytes 1002h -000B32r 1 10 .hibytes 1003h -000B33r 1 10 .hibytes 1004h -000B34r 1 10 .hibytes 1005h -000B35r 1 10 .hibytes 1006h -000B36r 1 10 .hibytes 1007h -000B37r 1 10 .hibytes 1008h -000B38r 1 7F .hibytes 7ff0h -000B39r 1 7F .hibytes 7ff1h -000B3Ar 1 7F .hibytes 7ff2h -000B3Br 1 7F .hibytes 7ff3h -000B3Cr 1 7F .hibytes 7ff4h -000B3Dr 1 7F .hibytes 7ff5h -000B3Er 1 7F .hibytes 7ff6h -000B3Fr 1 7F .hibytes 7ff7h -000B40r 1 7F .hibytes 7ff8h -000B41r 1 7F .hibytes 7ff9h -000B42r 1 7F .hibytes 7ffah -000B43r 1 7F .hibytes 7ffbh -000B44r 1 7F .hibytes 7ffch -000B45r 1 7F .hibytes 7ffdh -000B46r 1 7F .hibytes 7ffeh -000B47r 1 7F .hibytes 7fffh -000B48r 1 80 .hibytes 8000h -000B49r 1 80 .hibytes 8001h -000B4Ar 1 80 .hibytes 8002h -000B4Br 1 80 .hibytes 8003h -000B4Cr 1 80 .hibytes 8004h -000B4Dr 1 80 .hibytes 8005h -000B4Er 1 80 .hibytes 8006h -000B4Fr 1 80 .hibytes 8007h -000B50r 1 80 .hibytes 8008h -000B51r 1 80 .hibytes 8009h -000B52r 1 80 .hibytes 800ah -000B53r 1 80 .hibytes 800bh -000B54r 1 9F .hibytes 9fe1h -000B55r 1 9F .hibytes 9fe2h -000B56r 1 9F .hibytes 9fe3h -000B57r 1 9F .hibytes 9fe4h -000B58r 1 9F .hibytes 9fe5h -000B59r 1 9F .hibytes 9fe6h -000B5Ar 1 9F .hibytes 9fe7h -000B5Br 1 9F .hibytes 9fe8h -000B5Cr 1 9F .hibytes 9fe9h -000B5Dr 1 9F .hibytes 9feah -000B5Er 1 9F .hibytes 9febh -000B5Fr 1 9F .hibytes 9fech -000B60r 1 9F .hibytes 9fedh -000B61r 1 9F .hibytes 9feeh -000B62r 1 9F .hibytes 9fefh -000B63r 1 9F .hibytes 9ff0h -000B64r 1 9F .hibytes 9ff1h -000B65r 1 9F .hibytes 9ff2h -000B66r 1 9F .hibytes 9ff3h -000B67r 1 9F .hibytes 9ff4h -000B68r 1 9F .hibytes 9ff5h -000B69r 1 9F .hibytes 9ff6h -000B6Ar 1 9F .hibytes 9ff7h -000B6Br 1 9F .hibytes 9ff8h -000B6Cr 1 9F .hibytes 9ff9h -000B6Dr 1 9F .hibytes 9ffah -000B6Er 1 9F .hibytes 9ffbh -000B6Fr 1 9F .hibytes 9ffch -000B70r 1 9F .hibytes 9ffdh -000B71r 1 9F .hibytes 9ffeh -000B72r 1 9F .hibytes 9fffh -000B73r 1 A0 .hibytes 0a000h -000B74r 1 A0 .hibytes 0a001h -000B75r 1 A0 .hibytes 0a002h -000B76r 1 A0 .hibytes 0a003h -000B77r 1 A0 .hibytes 0a004h -000B78r 1 A0 .hibytes 0a005h -000B79r 1 A0 .hibytes 0a006h -000B7Ar 1 A0 .hibytes 0a007h -000B7Br 1 A0 .hibytes 0a008h -000B7Cr 1 A0 .hibytes 0a009h -000B7Dr 1 A0 .hibytes 0a00ah -000B7Er 1 A0 .hibytes 0a00bh -000B7Fr 1 A0 .hibytes 0a00ch -000B80r 1 A0 .hibytes 0a00dh -000B81r 1 A0 .hibytes 0a00eh -000B82r 1 A0 .hibytes 0a00fh -000B83r 1 AF .hibytes 0afe1h -000B84r 1 AF .hibytes 0afe2h -000B85r 1 AF .hibytes 0afe3h -000B86r 1 AF .hibytes 0afe4h -000B87r 1 AF .hibytes 0afe5h -000B88r 1 AF .hibytes 0afe6h -000B89r 1 AF .hibytes 0afe7h -000B8Ar 1 AF .hibytes 0afe8h -000B8Br 1 AF .hibytes 0afe9h -000B8Cr 1 AF .hibytes 0afeah -000B8Dr 1 AF .hibytes 0afebh -000B8Er 1 AF .hibytes 0afech -000B8Fr 1 AF .hibytes 0afedh -000B90r 1 AF .hibytes 0afeeh -000B91r 1 AF .hibytes 0afefh -000B92r 1 AF .hibytes 0aff0h -000B93r 1 AF .hibytes 0aff1h -000B94r 1 AF .hibytes 0aff2h -000B95r 1 AF .hibytes 0aff3h -000B96r 1 AF .hibytes 0aff4h -000B97r 1 AF .hibytes 0aff5h -000B98r 1 AF .hibytes 0aff6h -000B99r 1 AF .hibytes 0aff7h -000B9Ar 1 AF .hibytes 0aff8h -000B9Br 1 AF .hibytes 0aff9h -000B9Cr 1 AF .hibytes 0affah -000B9Dr 1 AF .hibytes 0affbh -000B9Er 1 AF .hibytes 0affch -000B9Fr 1 AF .hibytes 0affdh -000BA0r 1 AF .hibytes 0affeh -000BA1r 1 AF .hibytes 0afffh -000BA2r 1 B0 .hibytes 0b000h -000BA3r 1 B0 .hibytes 0b001h -000BA4r 1 B0 .hibytes 0b002h -000BA5r 1 B0 .hibytes 0b003h -000BA6r 1 B0 .hibytes 0b004h -000BA7r 1 B0 .hibytes 0b005h -000BA8r 1 B0 .hibytes 0b006h -000BA9r 1 B0 .hibytes 0b007h -000BAAr 1 B0 .hibytes 0b008h -000BABr 1 B0 .hibytes 0b009h -000BACr 1 B0 .hibytes 0b00ah -000BADr 1 B0 .hibytes 0b00bh -000BAEr 1 B0 .hibytes 0b00ch -000BAFr 1 B0 .hibytes 0b00dh -000BB0r 1 B0 .hibytes 0b00eh -000BB1r 1 B0 .hibytes 0b00fh -000BB2r 1 BF .hibytes 0bfe1h -000BB3r 1 BF .hibytes 0bfe2h -000BB4r 1 BF .hibytes 0bfe3h -000BB5r 1 BF .hibytes 0bfe4h -000BB6r 1 BF .hibytes 0bfe5h -000BB7r 1 BF .hibytes 0bfe6h -000BB8r 1 BF .hibytes 0bfe7h -000BB9r 1 BF .hibytes 0bfe8h -000BBAr 1 BF .hibytes 0bfe9h -000BBBr 1 BF .hibytes 0bfeah -000BBCr 1 BF .hibytes 0bfebh -000BBDr 1 BF .hibytes 0bfech -000BBEr 1 BF .hibytes 0bfedh -000BBFr 1 BF .hibytes 0bfeeh -000BC0r 1 BF .hibytes 0bfefh -000BC1r 1 BF .hibytes 0bff0h -000BC2r 1 BF .hibytes 0bff1h -000BC3r 1 BF .hibytes 0bff2h -000BC4r 1 BF .hibytes 0bff3h -000BC5r 1 BF .hibytes 0bff4h -000BC6r 1 BF .hibytes 0bff5h -000BC7r 1 BF .hibytes 0bff6h -000BC8r 1 BF .hibytes 0bff7h -000BC9r 1 BF .hibytes 0bff8h -000BCAr 1 BF .hibytes 0bff9h -000BCBr 1 BF .hibytes 0bffah -000BCCr 1 BF .hibytes 0bffbh -000BCDr 1 BF .hibytes 0bffch -000BCEr 1 BF .hibytes 0bffdh -000BCFr 1 BF .hibytes 0bffeh -000BD0r 1 BF .hibytes 0bfffh -000BD1r 1 C0 .hibytes 0c000h -000BD2r 1 C0 .hibytes 0c001h -000BD3r 1 C0 .hibytes 0c002h -000BD4r 1 C0 .hibytes 0c003h -000BD5r 1 C0 .hibytes 0c004h -000BD6r 1 C0 .hibytes 0c005h -000BD7r 1 C0 .hibytes 0c006h -000BD8r 1 C0 .hibytes 0c007h -000BD9r 1 C0 .hibytes 0c008h -000BDAr 1 C0 .hibytes 0c009h -000BDBr 1 C0 .hibytes 0c00ah -000BDCr 1 C0 .hibytes 0c00bh -000BDDr 1 C0 .hibytes 0c00ch -000BDEr 1 C0 .hibytes 0c00dh -000BDFr 1 C0 .hibytes 0c00eh -000BE0r 1 C0 .hibytes 0c00fh -000BE1r 1 CF .hibytes 0cfe1h -000BE2r 1 CF .hibytes 0cfe2h -000BE3r 1 CF .hibytes 0cfe3h -000BE4r 1 CF .hibytes 0cfe4h -000BE5r 1 CF .hibytes 0cfe5h -000BE6r 1 CF .hibytes 0cfe6h -000BE7r 1 CF .hibytes 0cfe7h -000BE8r 1 CF .hibytes 0cfe8h -000BE9r 1 CF .hibytes 0cfe9h -000BEAr 1 CF .hibytes 0cfeah -000BEBr 1 CF .hibytes 0cfebh -000BECr 1 CF .hibytes 0cfech -000BEDr 1 CF .hibytes 0cfedh -000BEEr 1 CF .hibytes 0cfeeh -000BEFr 1 CF .hibytes 0cfefh -000BF0r 1 CF .hibytes 0cff0h -000BF1r 1 CF .hibytes 0cff1h -000BF2r 1 CF .hibytes 0cff2h -000BF3r 1 CF .hibytes 0cff3h -000BF4r 1 CF .hibytes 0cff4h -000BF5r 1 CF .hibytes 0cff5h -000BF6r 1 CF .hibytes 0cff6h -000BF7r 1 CF .hibytes 0cff7h -000BF8r 1 CF .hibytes 0cff8h -000BF9r 1 CF .hibytes 0cff9h -000BFAr 1 CF .hibytes 0cffah -000BFBr 1 CF .hibytes 0cffbh -000BFCr 1 CF .hibytes 0cffch -000BFDr 1 CF .hibytes 0cffdh -000BFEr 1 CF .hibytes 0cffeh -000BFFr 1 CF .hibytes 0cfffh -000C00r 1 D0 .hibytes 0d000h -000C01r 1 D0 .hibytes 0d001h -000C02r 1 D0 .hibytes 0d002h -000C03r 1 D0 .hibytes 0d003h -000C04r 1 D0 .hibytes 0d004h -000C05r 1 D0 .hibytes 0d005h -000C06r 1 D0 .hibytes 0d006h -000C07r 1 D0 .hibytes 0d007h -000C08r 1 D0 .hibytes 0d008h -000C09r 1 D0 .hibytes 0d009h -000C0Ar 1 D0 .hibytes 0d00ah -000C0Br 1 D0 .hibytes 0d00bh -000C0Cr 1 D0 .hibytes 0d00ch -000C0Dr 1 D0 .hibytes 0d00dh -000C0Er 1 D0 .hibytes 0d00eh -000C0Fr 1 D0 .hibytes 0d00fh -000C10r 1 DF .hibytes 0dfe1h -000C11r 1 DF .hibytes 0dfe2h -000C12r 1 DF .hibytes 0dfe3h -000C13r 1 DF .hibytes 0dfe4h -000C14r 1 DF .hibytes 0dfe5h -000C15r 1 DF .hibytes 0dfe6h -000C16r 1 DF .hibytes 0dfe7h -000C17r 1 DF .hibytes 0dfe8h -000C18r 1 DF .hibytes 0dfe9h -000C19r 1 DF .hibytes 0dfeah -000C1Ar 1 DF .hibytes 0dfebh -000C1Br 1 DF .hibytes 0dfech -000C1Cr 1 DF .hibytes 0dfedh -000C1Dr 1 DF .hibytes 0dfeeh -000C1Er 1 DF .hibytes 0dfefh -000C1Fr 1 DF .hibytes 0dff0h -000C20r 1 DF .hibytes 0dff1h -000C21r 1 DF .hibytes 0dff2h -000C22r 1 DF .hibytes 0dff3h -000C23r 1 DF .hibytes 0dff4h -000C24r 1 DF .hibytes 0dff5h -000C25r 1 DF .hibytes 0dff6h -000C26r 1 DF .hibytes 0dff7h -000C27r 1 DF .hibytes 0dff8h -000C28r 1 DF .hibytes 0dff9h -000C29r 1 DF .hibytes 0dffah -000C2Ar 1 DF .hibytes 0dffbh -000C2Br 1 DF .hibytes 0dffch -000C2Cr 1 DF .hibytes 0dffdh -000C2Dr 1 DF .hibytes 0dffeh -000C2Er 1 DF .hibytes 0dfffh -000C2Fr 1 E0 .hibytes 0e000h -000C30r 1 E0 .hibytes 0e001h -000C31r 1 E0 .hibytes 0e002h -000C32r 1 E0 .hibytes 0e003h -000C33r 1 E0 .hibytes 0e004h -000C34r 1 E0 .hibytes 0e005h -000C35r 1 E0 .hibytes 0e006h -000C36r 1 E0 .hibytes 0e007h -000C37r 1 E0 .hibytes 0e008h -000C38r 1 E0 .hibytes 0e009h -000C39r 1 E0 .hibytes 0e00ah -000C3Ar 1 E0 .hibytes 0e00bh -000C3Br 1 E0 .hibytes 0e00ch -000C3Cr 1 E0 .hibytes 0e00dh -000C3Dr 1 E0 .hibytes 0e00eh -000C3Er 1 E0 .hibytes 0e00fh -000C3Fr 1 EF .hibytes 0efe1h -000C40r 1 EF .hibytes 0efe2h -000C41r 1 EF .hibytes 0efe3h -000C42r 1 EF .hibytes 0efe4h -000C43r 1 EF .hibytes 0efe5h -000C44r 1 EF .hibytes 0efe6h -000C45r 1 EF .hibytes 0efe7h -000C46r 1 EF .hibytes 0efe8h -000C47r 1 EF .hibytes 0efe9h -000C48r 1 EF .hibytes 0efeah -000C49r 1 EF .hibytes 0efebh -000C4Ar 1 EF .hibytes 0efech -000C4Br 1 EF .hibytes 0efedh -000C4Cr 1 EF .hibytes 0efeeh -000C4Dr 1 EF .hibytes 0efefh -000C4Er 1 EF .hibytes 0eff0h -000C4Fr 1 EF .hibytes 0eff1h -000C50r 1 EF .hibytes 0eff2h -000C51r 1 EF .hibytes 0eff3h -000C52r 1 EF .hibytes 0eff4h -000C53r 1 EF .hibytes 0eff5h -000C54r 1 EF .hibytes 0eff6h -000C55r 1 EF .hibytes 0eff7h -000C56r 1 EF .hibytes 0eff8h -000C57r 1 EF .hibytes 0eff9h -000C58r 1 EF .hibytes 0effah -000C59r 1 EF .hibytes 0effbh -000C5Ar 1 EF .hibytes 0effch -000C5Br 1 EF .hibytes 0effdh -000C5Cr 1 EF .hibytes 0effeh -000C5Dr 1 EF .hibytes 0efffh -000C5Er 1 F0 .hibytes 0f000h -000C5Fr 1 F0 .hibytes 0f001h -000C60r 1 F0 .hibytes 0f002h -000C61r 1 F0 .hibytes 0f003h -000C62r 1 F0 .hibytes 0f004h -000C63r 1 F0 .hibytes 0f005h -000C64r 1 F0 .hibytes 0f006h -000C65r 1 F0 .hibytes 0f007h -000C66r 1 F0 .hibytes 0f008h -000C67r 1 F0 .hibytes 0f009h -000C68r 1 F0 .hibytes 0f00ah -000C69r 1 F0 .hibytes 0f00bh -000C6Ar 1 F0 .hibytes 0f00ch -000C6Br 1 F0 .hibytes 0f00dh -000C6Cr 1 F0 .hibytes 0f00eh -000C6Dr 1 F0 .hibytes 0f00fh -000C6Er 1 FF .hibytes 0ffe1h -000C6Fr 1 FF .hibytes 0ffe2h -000C70r 1 FF .hibytes 0ffe3h -000C71r 1 FF .hibytes 0ffe4h -000C72r 1 FF .hibytes 0ffe5h -000C73r 1 FF .hibytes 0ffe6h -000C74r 1 FF .hibytes 0ffe7h -000C75r 1 FF .hibytes 0ffe8h -000C76r 1 FF .hibytes 0ffe9h -000C77r 1 FF .hibytes 0ffeah -000C78r 1 FF .hibytes 0ffebh -000C79r 1 FF .hibytes 0ffech -000C7Ar 1 FF .hibytes 0ffedh -000C7Br 1 FF .hibytes 0ffeeh -000C7Cr 1 FF .hibytes 0ffefh -000C7Dr 1 FF .hibytes 0fff0h -000C7Er 1 FF .hibytes 0fff1h -000C7Fr 1 FF .hibytes 0fff2h -000C80r 1 FF .hibytes 0fff3h -000C81r 1 FF .hibytes 0fff4h -000C82r 1 FF .hibytes 0fff5h -000C83r 1 FF .hibytes 0fff6h -000C84r 1 FF .hibytes 0fff7h -000C85r 1 FF .hibytes 0fff8h -000C86r 1 FF .hibytes 0fff9h -000C87r 1 FF .hibytes 0fffah -000C88r 1 FF .hibytes 0fffbh -000C89r 1 FF .hibytes 0fffch -000C8Ar 1 FF .hibytes 0fffdh -000C8Br 1 FF .hibytes 0fffeh -000C8Cr 1 FF .hibytes 0ffffh +000AC2r 1 ; alternative hex values +000AC2r 1 00 .hibytes 0h +000AC3r 1 00 .hibytes 1h +000AC4r 1 00 .hibytes 2h +000AC5r 1 00 .hibytes 3h +000AC6r 1 00 .hibytes 4h +000AC7r 1 00 .hibytes 5h +000AC8r 1 00 .hibytes 6h +000AC9r 1 00 .hibytes 7h +000ACAr 1 00 .hibytes 8h +000ACBr 1 00 .hibytes 9h +000ACCr 1 00 .hibytes 0ah +000ACDr 1 00 .hibytes 0bh +000ACEr 1 00 .hibytes 0ch +000ACFr 1 00 .hibytes 0dh +000AD0r 1 00 .hibytes 0eh +000AD1r 1 00 .hibytes 0fh +000AD2r 1 00 .hibytes 10h +000AD3r 1 00 .hibytes 11h +000AD4r 1 00 .hibytes 12h +000AD5r 1 00 .hibytes 13h +000AD6r 1 00 .hibytes 70h +000AD7r 1 00 .hibytes 71h +000AD8r 1 00 .hibytes 72h +000AD9r 1 00 .hibytes 73h +000ADAr 1 00 .hibytes 74h +000ADBr 1 00 .hibytes 75h +000ADCr 1 00 .hibytes 76h +000ADDr 1 00 .hibytes 77h +000ADEr 1 00 .hibytes 78h +000ADFr 1 00 .hibytes 79h +000AE0r 1 00 .hibytes 7ah +000AE1r 1 00 .hibytes 7bh +000AE2r 1 00 .hibytes 7ch +000AE3r 1 00 .hibytes 7dh +000AE4r 1 00 .hibytes 7eh +000AE5r 1 00 .hibytes 7fh +000AE6r 1 00 .hibytes 80h +000AE7r 1 00 .hibytes 81h +000AE8r 1 00 .hibytes 82h +000AE9r 1 00 .hibytes 83h +000AEAr 1 00 .hibytes 84h +000AEBr 1 00 .hibytes 85h +000AECr 1 00 .hibytes 86h +000AEDr 1 00 .hibytes 0f0h +000AEEr 1 00 .hibytes 0f1h +000AEFr 1 00 .hibytes 0f2h +000AF0r 1 00 .hibytes 0f3h +000AF1r 1 00 .hibytes 0f4h +000AF2r 1 00 .hibytes 0f5h +000AF3r 1 00 .hibytes 0f6h +000AF4r 1 00 .hibytes 0f7h +000AF5r 1 00 .hibytes 0f8h +000AF6r 1 00 .hibytes 0f9h +000AF7r 1 00 .hibytes 0fah +000AF8r 1 00 .hibytes 0fbh +000AF9r 1 00 .hibytes 0fch +000AFAr 1 00 .hibytes 0fdh +000AFBr 1 00 .hibytes 0feh +000AFCr 1 00 .hibytes 0ffh +000AFDr 1 01 .hibytes 100h +000AFEr 1 01 .hibytes 101h +000AFFr 1 01 .hibytes 102h +000B00r 1 01 .hibytes 103h +000B01r 1 0F .hibytes 0fd2h +000B02r 1 0F .hibytes 0fd3h +000B03r 1 0F .hibytes 0fd4h +000B04r 1 0F .hibytes 0fd5h +000B05r 1 0F .hibytes 0fd6h +000B06r 1 0F .hibytes 0fd7h +000B07r 1 0F .hibytes 0fd8h +000B08r 1 0F .hibytes 0fd9h +000B09r 1 0F .hibytes 0fdah +000B0Ar 1 0F .hibytes 0fdbh +000B0Br 1 0F .hibytes 0fdch +000B0Cr 1 0F .hibytes 0fddh +000B0Dr 1 0F .hibytes 0fdeh +000B0Er 1 0F .hibytes 0fdfh +000B0Fr 1 0F .hibytes 0fe0h +000B10r 1 0F .hibytes 0fe1h +000B11r 1 0F .hibytes 0fe2h +000B12r 1 0F .hibytes 0fe3h +000B13r 1 0F .hibytes 0fe4h +000B14r 1 0F .hibytes 0fe5h +000B15r 1 0F .hibytes 0fe6h +000B16r 1 0F .hibytes 0fe7h +000B17r 1 0F .hibytes 0fe8h +000B18r 1 0F .hibytes 0fe9h +000B19r 1 0F .hibytes 0feah +000B1Ar 1 0F .hibytes 0febh +000B1Br 1 0F .hibytes 0fech +000B1Cr 1 0F .hibytes 0fedh +000B1Dr 1 0F .hibytes 0feeh +000B1Er 1 0F .hibytes 0fefh +000B1Fr 1 0F .hibytes 0ff0h +000B20r 1 0F .hibytes 0ff1h +000B21r 1 0F .hibytes 0ff2h +000B22r 1 0F .hibytes 0ff3h +000B23r 1 0F .hibytes 0ff4h +000B24r 1 0F .hibytes 0ff5h +000B25r 1 0F .hibytes 0ff6h +000B26r 1 0F .hibytes 0ff7h +000B27r 1 0F .hibytes 0ff8h +000B28r 1 0F .hibytes 0ff9h +000B29r 1 0F .hibytes 0ffah +000B2Ar 1 0F .hibytes 0ffbh +000B2Br 1 0F .hibytes 0ffch +000B2Cr 1 0F .hibytes 0ffdh +000B2Dr 1 0F .hibytes 0ffeh +000B2Er 1 0F .hibytes 0fffh +000B2Fr 1 10 .hibytes 1000h +000B30r 1 10 .hibytes 1001h +000B31r 1 10 .hibytes 1002h +000B32r 1 10 .hibytes 1003h +000B33r 1 10 .hibytes 1004h +000B34r 1 10 .hibytes 1005h +000B35r 1 10 .hibytes 1006h +000B36r 1 10 .hibytes 1007h +000B37r 1 10 .hibytes 1008h +000B38r 1 7F .hibytes 7ff0h +000B39r 1 7F .hibytes 7ff1h +000B3Ar 1 7F .hibytes 7ff2h +000B3Br 1 7F .hibytes 7ff3h +000B3Cr 1 7F .hibytes 7ff4h +000B3Dr 1 7F .hibytes 7ff5h +000B3Er 1 7F .hibytes 7ff6h +000B3Fr 1 7F .hibytes 7ff7h +000B40r 1 7F .hibytes 7ff8h +000B41r 1 7F .hibytes 7ff9h +000B42r 1 7F .hibytes 7ffah +000B43r 1 7F .hibytes 7ffbh +000B44r 1 7F .hibytes 7ffch +000B45r 1 7F .hibytes 7ffdh +000B46r 1 7F .hibytes 7ffeh +000B47r 1 7F .hibytes 7fffh +000B48r 1 80 .hibytes 8000h +000B49r 1 80 .hibytes 8001h +000B4Ar 1 80 .hibytes 8002h +000B4Br 1 80 .hibytes 8003h +000B4Cr 1 80 .hibytes 8004h +000B4Dr 1 80 .hibytes 8005h +000B4Er 1 80 .hibytes 8006h +000B4Fr 1 80 .hibytes 8007h +000B50r 1 80 .hibytes 8008h +000B51r 1 80 .hibytes 8009h +000B52r 1 80 .hibytes 800ah +000B53r 1 80 .hibytes 800bh +000B54r 1 9F .hibytes 9fe1h +000B55r 1 9F .hibytes 9fe2h +000B56r 1 9F .hibytes 9fe3h +000B57r 1 9F .hibytes 9fe4h +000B58r 1 9F .hibytes 9fe5h +000B59r 1 9F .hibytes 9fe6h +000B5Ar 1 9F .hibytes 9fe7h +000B5Br 1 9F .hibytes 9fe8h +000B5Cr 1 9F .hibytes 9fe9h +000B5Dr 1 9F .hibytes 9feah +000B5Er 1 9F .hibytes 9febh +000B5Fr 1 9F .hibytes 9fech +000B60r 1 9F .hibytes 9fedh +000B61r 1 9F .hibytes 9feeh +000B62r 1 9F .hibytes 9fefh +000B63r 1 9F .hibytes 9ff0h +000B64r 1 9F .hibytes 9ff1h +000B65r 1 9F .hibytes 9ff2h +000B66r 1 9F .hibytes 9ff3h +000B67r 1 9F .hibytes 9ff4h +000B68r 1 9F .hibytes 9ff5h +000B69r 1 9F .hibytes 9ff6h +000B6Ar 1 9F .hibytes 9ff7h +000B6Br 1 9F .hibytes 9ff8h +000B6Cr 1 9F .hibytes 9ff9h +000B6Dr 1 9F .hibytes 9ffah +000B6Er 1 9F .hibytes 9ffbh +000B6Fr 1 9F .hibytes 9ffch +000B70r 1 9F .hibytes 9ffdh +000B71r 1 9F .hibytes 9ffeh +000B72r 1 9F .hibytes 9fffh +000B73r 1 A0 .hibytes 0a000h +000B74r 1 A0 .hibytes 0a001h +000B75r 1 A0 .hibytes 0a002h +000B76r 1 A0 .hibytes 0a003h +000B77r 1 A0 .hibytes 0a004h +000B78r 1 A0 .hibytes 0a005h +000B79r 1 A0 .hibytes 0a006h +000B7Ar 1 A0 .hibytes 0a007h +000B7Br 1 A0 .hibytes 0a008h +000B7Cr 1 A0 .hibytes 0a009h +000B7Dr 1 A0 .hibytes 0a00ah +000B7Er 1 A0 .hibytes 0a00bh +000B7Fr 1 A0 .hibytes 0a00ch +000B80r 1 A0 .hibytes 0a00dh +000B81r 1 A0 .hibytes 0a00eh +000B82r 1 A0 .hibytes 0a00fh +000B83r 1 AF .hibytes 0afe1h +000B84r 1 AF .hibytes 0afe2h +000B85r 1 AF .hibytes 0afe3h +000B86r 1 AF .hibytes 0afe4h +000B87r 1 AF .hibytes 0afe5h +000B88r 1 AF .hibytes 0afe6h +000B89r 1 AF .hibytes 0afe7h +000B8Ar 1 AF .hibytes 0afe8h +000B8Br 1 AF .hibytes 0afe9h +000B8Cr 1 AF .hibytes 0afeah +000B8Dr 1 AF .hibytes 0afebh +000B8Er 1 AF .hibytes 0afech +000B8Fr 1 AF .hibytes 0afedh +000B90r 1 AF .hibytes 0afeeh +000B91r 1 AF .hibytes 0afefh +000B92r 1 AF .hibytes 0aff0h +000B93r 1 AF .hibytes 0aff1h +000B94r 1 AF .hibytes 0aff2h +000B95r 1 AF .hibytes 0aff3h +000B96r 1 AF .hibytes 0aff4h +000B97r 1 AF .hibytes 0aff5h +000B98r 1 AF .hibytes 0aff6h +000B99r 1 AF .hibytes 0aff7h +000B9Ar 1 AF .hibytes 0aff8h +000B9Br 1 AF .hibytes 0aff9h +000B9Cr 1 AF .hibytes 0affah +000B9Dr 1 AF .hibytes 0affbh +000B9Er 1 AF .hibytes 0affch +000B9Fr 1 AF .hibytes 0affdh +000BA0r 1 AF .hibytes 0affeh +000BA1r 1 AF .hibytes 0afffh +000BA2r 1 B0 .hibytes 0b000h +000BA3r 1 B0 .hibytes 0b001h +000BA4r 1 B0 .hibytes 0b002h +000BA5r 1 B0 .hibytes 0b003h +000BA6r 1 B0 .hibytes 0b004h +000BA7r 1 B0 .hibytes 0b005h +000BA8r 1 B0 .hibytes 0b006h +000BA9r 1 B0 .hibytes 0b007h +000BAAr 1 B0 .hibytes 0b008h +000BABr 1 B0 .hibytes 0b009h +000BACr 1 B0 .hibytes 0b00ah +000BADr 1 B0 .hibytes 0b00bh +000BAEr 1 B0 .hibytes 0b00ch +000BAFr 1 B0 .hibytes 0b00dh +000BB0r 1 B0 .hibytes 0b00eh +000BB1r 1 B0 .hibytes 0b00fh +000BB2r 1 BF .hibytes 0bfe1h +000BB3r 1 BF .hibytes 0bfe2h +000BB4r 1 BF .hibytes 0bfe3h +000BB5r 1 BF .hibytes 0bfe4h +000BB6r 1 BF .hibytes 0bfe5h +000BB7r 1 BF .hibytes 0bfe6h +000BB8r 1 BF .hibytes 0bfe7h +000BB9r 1 BF .hibytes 0bfe8h +000BBAr 1 BF .hibytes 0bfe9h +000BBBr 1 BF .hibytes 0bfeah +000BBCr 1 BF .hibytes 0bfebh +000BBDr 1 BF .hibytes 0bfech +000BBEr 1 BF .hibytes 0bfedh +000BBFr 1 BF .hibytes 0bfeeh +000BC0r 1 BF .hibytes 0bfefh +000BC1r 1 BF .hibytes 0bff0h +000BC2r 1 BF .hibytes 0bff1h +000BC3r 1 BF .hibytes 0bff2h +000BC4r 1 BF .hibytes 0bff3h +000BC5r 1 BF .hibytes 0bff4h +000BC6r 1 BF .hibytes 0bff5h +000BC7r 1 BF .hibytes 0bff6h +000BC8r 1 BF .hibytes 0bff7h +000BC9r 1 BF .hibytes 0bff8h +000BCAr 1 BF .hibytes 0bff9h +000BCBr 1 BF .hibytes 0bffah +000BCCr 1 BF .hibytes 0bffbh +000BCDr 1 BF .hibytes 0bffch +000BCEr 1 BF .hibytes 0bffdh +000BCFr 1 BF .hibytes 0bffeh +000BD0r 1 BF .hibytes 0bfffh +000BD1r 1 C0 .hibytes 0c000h +000BD2r 1 C0 .hibytes 0c001h +000BD3r 1 C0 .hibytes 0c002h +000BD4r 1 C0 .hibytes 0c003h +000BD5r 1 C0 .hibytes 0c004h +000BD6r 1 C0 .hibytes 0c005h +000BD7r 1 C0 .hibytes 0c006h +000BD8r 1 C0 .hibytes 0c007h +000BD9r 1 C0 .hibytes 0c008h +000BDAr 1 C0 .hibytes 0c009h +000BDBr 1 C0 .hibytes 0c00ah +000BDCr 1 C0 .hibytes 0c00bh +000BDDr 1 C0 .hibytes 0c00ch +000BDEr 1 C0 .hibytes 0c00dh +000BDFr 1 C0 .hibytes 0c00eh +000BE0r 1 C0 .hibytes 0c00fh +000BE1r 1 CF .hibytes 0cfe1h +000BE2r 1 CF .hibytes 0cfe2h +000BE3r 1 CF .hibytes 0cfe3h +000BE4r 1 CF .hibytes 0cfe4h +000BE5r 1 CF .hibytes 0cfe5h +000BE6r 1 CF .hibytes 0cfe6h +000BE7r 1 CF .hibytes 0cfe7h +000BE8r 1 CF .hibytes 0cfe8h +000BE9r 1 CF .hibytes 0cfe9h +000BEAr 1 CF .hibytes 0cfeah +000BEBr 1 CF .hibytes 0cfebh +000BECr 1 CF .hibytes 0cfech +000BEDr 1 CF .hibytes 0cfedh +000BEEr 1 CF .hibytes 0cfeeh +000BEFr 1 CF .hibytes 0cfefh +000BF0r 1 CF .hibytes 0cff0h +000BF1r 1 CF .hibytes 0cff1h +000BF2r 1 CF .hibytes 0cff2h +000BF3r 1 CF .hibytes 0cff3h +000BF4r 1 CF .hibytes 0cff4h +000BF5r 1 CF .hibytes 0cff5h +000BF6r 1 CF .hibytes 0cff6h +000BF7r 1 CF .hibytes 0cff7h +000BF8r 1 CF .hibytes 0cff8h +000BF9r 1 CF .hibytes 0cff9h +000BFAr 1 CF .hibytes 0cffah +000BFBr 1 CF .hibytes 0cffbh +000BFCr 1 CF .hibytes 0cffch +000BFDr 1 CF .hibytes 0cffdh +000BFEr 1 CF .hibytes 0cffeh +000BFFr 1 CF .hibytes 0cfffh +000C00r 1 D0 .hibytes 0d000h +000C01r 1 D0 .hibytes 0d001h +000C02r 1 D0 .hibytes 0d002h +000C03r 1 D0 .hibytes 0d003h +000C04r 1 D0 .hibytes 0d004h +000C05r 1 D0 .hibytes 0d005h +000C06r 1 D0 .hibytes 0d006h +000C07r 1 D0 .hibytes 0d007h +000C08r 1 D0 .hibytes 0d008h +000C09r 1 D0 .hibytes 0d009h +000C0Ar 1 D0 .hibytes 0d00ah +000C0Br 1 D0 .hibytes 0d00bh +000C0Cr 1 D0 .hibytes 0d00ch +000C0Dr 1 D0 .hibytes 0d00dh +000C0Er 1 D0 .hibytes 0d00eh +000C0Fr 1 D0 .hibytes 0d00fh +000C10r 1 DF .hibytes 0dfe1h +000C11r 1 DF .hibytes 0dfe2h +000C12r 1 DF .hibytes 0dfe3h +000C13r 1 DF .hibytes 0dfe4h +000C14r 1 DF .hibytes 0dfe5h +000C15r 1 DF .hibytes 0dfe6h +000C16r 1 DF .hibytes 0dfe7h +000C17r 1 DF .hibytes 0dfe8h +000C18r 1 DF .hibytes 0dfe9h +000C19r 1 DF .hibytes 0dfeah +000C1Ar 1 DF .hibytes 0dfebh +000C1Br 1 DF .hibytes 0dfech +000C1Cr 1 DF .hibytes 0dfedh +000C1Dr 1 DF .hibytes 0dfeeh +000C1Er 1 DF .hibytes 0dfefh +000C1Fr 1 DF .hibytes 0dff0h +000C20r 1 DF .hibytes 0dff1h +000C21r 1 DF .hibytes 0dff2h +000C22r 1 DF .hibytes 0dff3h +000C23r 1 DF .hibytes 0dff4h +000C24r 1 DF .hibytes 0dff5h +000C25r 1 DF .hibytes 0dff6h +000C26r 1 DF .hibytes 0dff7h +000C27r 1 DF .hibytes 0dff8h +000C28r 1 DF .hibytes 0dff9h +000C29r 1 DF .hibytes 0dffah +000C2Ar 1 DF .hibytes 0dffbh +000C2Br 1 DF .hibytes 0dffch +000C2Cr 1 DF .hibytes 0dffdh +000C2Dr 1 DF .hibytes 0dffeh +000C2Er 1 DF .hibytes 0dfffh +000C2Fr 1 E0 .hibytes 0e000h +000C30r 1 E0 .hibytes 0e001h +000C31r 1 E0 .hibytes 0e002h +000C32r 1 E0 .hibytes 0e003h +000C33r 1 E0 .hibytes 0e004h +000C34r 1 E0 .hibytes 0e005h +000C35r 1 E0 .hibytes 0e006h +000C36r 1 E0 .hibytes 0e007h +000C37r 1 E0 .hibytes 0e008h +000C38r 1 E0 .hibytes 0e009h +000C39r 1 E0 .hibytes 0e00ah +000C3Ar 1 E0 .hibytes 0e00bh +000C3Br 1 E0 .hibytes 0e00ch +000C3Cr 1 E0 .hibytes 0e00dh +000C3Dr 1 E0 .hibytes 0e00eh +000C3Er 1 E0 .hibytes 0e00fh +000C3Fr 1 EF .hibytes 0efe1h +000C40r 1 EF .hibytes 0efe2h +000C41r 1 EF .hibytes 0efe3h +000C42r 1 EF .hibytes 0efe4h +000C43r 1 EF .hibytes 0efe5h +000C44r 1 EF .hibytes 0efe6h +000C45r 1 EF .hibytes 0efe7h +000C46r 1 EF .hibytes 0efe8h +000C47r 1 EF .hibytes 0efe9h +000C48r 1 EF .hibytes 0efeah +000C49r 1 EF .hibytes 0efebh +000C4Ar 1 EF .hibytes 0efech +000C4Br 1 EF .hibytes 0efedh +000C4Cr 1 EF .hibytes 0efeeh +000C4Dr 1 EF .hibytes 0efefh +000C4Er 1 EF .hibytes 0eff0h +000C4Fr 1 EF .hibytes 0eff1h +000C50r 1 EF .hibytes 0eff2h +000C51r 1 EF .hibytes 0eff3h +000C52r 1 EF .hibytes 0eff4h +000C53r 1 EF .hibytes 0eff5h +000C54r 1 EF .hibytes 0eff6h +000C55r 1 EF .hibytes 0eff7h +000C56r 1 EF .hibytes 0eff8h +000C57r 1 EF .hibytes 0eff9h +000C58r 1 EF .hibytes 0effah +000C59r 1 EF .hibytes 0effbh +000C5Ar 1 EF .hibytes 0effch +000C5Br 1 EF .hibytes 0effdh +000C5Cr 1 EF .hibytes 0effeh +000C5Dr 1 EF .hibytes 0efffh +000C5Er 1 F0 .hibytes 0f000h +000C5Fr 1 F0 .hibytes 0f001h +000C60r 1 F0 .hibytes 0f002h +000C61r 1 F0 .hibytes 0f003h +000C62r 1 F0 .hibytes 0f004h +000C63r 1 F0 .hibytes 0f005h +000C64r 1 F0 .hibytes 0f006h +000C65r 1 F0 .hibytes 0f007h +000C66r 1 F0 .hibytes 0f008h +000C67r 1 F0 .hibytes 0f009h +000C68r 1 F0 .hibytes 0f00ah +000C69r 1 F0 .hibytes 0f00bh +000C6Ar 1 F0 .hibytes 0f00ch +000C6Br 1 F0 .hibytes 0f00dh +000C6Cr 1 F0 .hibytes 0f00eh +000C6Dr 1 F0 .hibytes 0f00fh +000C6Er 1 FF .hibytes 0ffe1h +000C6Fr 1 FF .hibytes 0ffe2h +000C70r 1 FF .hibytes 0ffe3h +000C71r 1 FF .hibytes 0ffe4h +000C72r 1 FF .hibytes 0ffe5h +000C73r 1 FF .hibytes 0ffe6h +000C74r 1 FF .hibytes 0ffe7h +000C75r 1 FF .hibytes 0ffe8h +000C76r 1 FF .hibytes 0ffe9h +000C77r 1 FF .hibytes 0ffeah +000C78r 1 FF .hibytes 0ffebh +000C79r 1 FF .hibytes 0ffech +000C7Ar 1 FF .hibytes 0ffedh +000C7Br 1 FF .hibytes 0ffeeh +000C7Cr 1 FF .hibytes 0ffefh +000C7Dr 1 FF .hibytes 0fff0h +000C7Er 1 FF .hibytes 0fff1h +000C7Fr 1 FF .hibytes 0fff2h +000C80r 1 FF .hibytes 0fff3h +000C81r 1 FF .hibytes 0fff4h +000C82r 1 FF .hibytes 0fff5h +000C83r 1 FF .hibytes 0fff6h +000C84r 1 FF .hibytes 0fff7h +000C85r 1 FF .hibytes 0fff8h +000C86r 1 FF .hibytes 0fff9h +000C87r 1 FF .hibytes 0fffah +000C88r 1 FF .hibytes 0fffbh +000C89r 1 FF .hibytes 0fffch +000C8Ar 1 FF .hibytes 0fffdh +000C8Br 1 FF .hibytes 0fffeh +000C8Cr 1 FF .hibytes 0ffffh 000C8Dr 1 -000C8Dr 1 ; alternative hex values, uppercase -000C8Dr 1 00 .hibytes 0h -000C8Er 1 00 .hibytes 1h -000C8Fr 1 00 .hibytes 2h -000C90r 1 00 .hibytes 3h -000C91r 1 00 .hibytes 4h -000C92r 1 00 .hibytes 5h -000C93r 1 00 .hibytes 6h -000C94r 1 00 .hibytes 7h -000C95r 1 00 .hibytes 8h -000C96r 1 00 .hibytes 9h -000C97r 1 00 .hibytes 0Ah -000C98r 1 00 .hibytes 0Bh -000C99r 1 00 .hibytes 0Ch -000C9Ar 1 00 .hibytes 0Dh -000C9Br 1 00 .hibytes 0Eh -000C9Cr 1 00 .hibytes 0Fh -000C9Dr 1 00 .hibytes 10h -000C9Er 1 00 .hibytes 11h -000C9Fr 1 00 .hibytes 12h -000CA0r 1 00 .hibytes 13h -000CA1r 1 00 .hibytes 70h -000CA2r 1 00 .hibytes 71h -000CA3r 1 00 .hibytes 72h -000CA4r 1 00 .hibytes 73h -000CA5r 1 00 .hibytes 74h -000CA6r 1 00 .hibytes 75h -000CA7r 1 00 .hibytes 76h -000CA8r 1 00 .hibytes 77h -000CA9r 1 00 .hibytes 78h -000CAAr 1 00 .hibytes 79h -000CABr 1 00 .hibytes 7Ah -000CACr 1 00 .hibytes 7Bh -000CADr 1 00 .hibytes 7Ch -000CAEr 1 00 .hibytes 7Dh -000CAFr 1 00 .hibytes 7Eh -000CB0r 1 00 .hibytes 7Fh -000CB1r 1 00 .hibytes 80h -000CB2r 1 00 .hibytes 81h -000CB3r 1 00 .hibytes 82h -000CB4r 1 00 .hibytes 83h -000CB5r 1 00 .hibytes 84h -000CB6r 1 00 .hibytes 85h -000CB7r 1 00 .hibytes 86h -000CB8r 1 00 .hibytes 0F0h -000CB9r 1 00 .hibytes 0F1h -000CBAr 1 00 .hibytes 0F2h -000CBBr 1 00 .hibytes 0F3h -000CBCr 1 00 .hibytes 0F4h -000CBDr 1 00 .hibytes 0F5h -000CBEr 1 00 .hibytes 0F6h -000CBFr 1 00 .hibytes 0F7h -000CC0r 1 00 .hibytes 0F8h -000CC1r 1 00 .hibytes 0F9h -000CC2r 1 00 .hibytes 0FAh -000CC3r 1 00 .hibytes 0FBh -000CC4r 1 00 .hibytes 0FCh -000CC5r 1 00 .hibytes 0FDh -000CC6r 1 00 .hibytes 0FEh -000CC7r 1 00 .hibytes 0FFh -000CC8r 1 01 .hibytes 100h -000CC9r 1 01 .hibytes 101h -000CCAr 1 01 .hibytes 102h -000CCBr 1 01 .hibytes 103h -000CCCr 1 0F .hibytes 0FD2h -000CCDr 1 0F .hibytes 0FD3h -000CCEr 1 0F .hibytes 0FD4h -000CCFr 1 0F .hibytes 0FD5h -000CD0r 1 0F .hibytes 0FD6h -000CD1r 1 0F .hibytes 0FD7h -000CD2r 1 0F .hibytes 0FD8h -000CD3r 1 0F .hibytes 0FD9h -000CD4r 1 0F .hibytes 0FDAh -000CD5r 1 0F .hibytes 0FDBh -000CD6r 1 0F .hibytes 0FDCh -000CD7r 1 0F .hibytes 0FDDh -000CD8r 1 0F .hibytes 0FDEh -000CD9r 1 0F .hibytes 0FDFh -000CDAr 1 0F .hibytes 0FE0h -000CDBr 1 0F .hibytes 0FE1h -000CDCr 1 0F .hibytes 0FE2h -000CDDr 1 0F .hibytes 0FE3h -000CDEr 1 0F .hibytes 0FE4h -000CDFr 1 0F .hibytes 0FE5h -000CE0r 1 0F .hibytes 0FE6h -000CE1r 1 0F .hibytes 0FE7h -000CE2r 1 0F .hibytes 0FE8h -000CE3r 1 0F .hibytes 0FE9h -000CE4r 1 0F .hibytes 0FEAh -000CE5r 1 0F .hibytes 0FEBh -000CE6r 1 0F .hibytes 0FECh -000CE7r 1 0F .hibytes 0FEDh -000CE8r 1 0F .hibytes 0FEEh -000CE9r 1 0F .hibytes 0FEFh -000CEAr 1 0F .hibytes 0FF0h -000CEBr 1 0F .hibytes 0FF1h -000CECr 1 0F .hibytes 0FF2h -000CEDr 1 0F .hibytes 0FF3h -000CEEr 1 0F .hibytes 0FF4h -000CEFr 1 0F .hibytes 0FF5h -000CF0r 1 0F .hibytes 0FF6h -000CF1r 1 0F .hibytes 0FF7h -000CF2r 1 0F .hibytes 0FF8h -000CF3r 1 0F .hibytes 0FF9h -000CF4r 1 0F .hibytes 0FFAh -000CF5r 1 0F .hibytes 0FFBh -000CF6r 1 0F .hibytes 0FFCh -000CF7r 1 0F .hibytes 0FFDh -000CF8r 1 0F .hibytes 0FFEh -000CF9r 1 0F .hibytes 0FFFh -000CFAr 1 10 .hibytes 1000h -000CFBr 1 10 .hibytes 1001h -000CFCr 1 10 .hibytes 1002h -000CFDr 1 10 .hibytes 1003h -000CFEr 1 10 .hibytes 1004h -000CFFr 1 10 .hibytes 1005h -000D00r 1 10 .hibytes 1006h -000D01r 1 10 .hibytes 1007h -000D02r 1 10 .hibytes 1008h -000D03r 1 7F .hibytes 7FF0h -000D04r 1 7F .hibytes 7FF1h -000D05r 1 7F .hibytes 7FF2h -000D06r 1 7F .hibytes 7FF3h -000D07r 1 7F .hibytes 7FF4h -000D08r 1 7F .hibytes 7FF5h -000D09r 1 7F .hibytes 7FF6h -000D0Ar 1 7F .hibytes 7FF7h -000D0Br 1 7F .hibytes 7FF8h -000D0Cr 1 7F .hibytes 7FF9h -000D0Dr 1 7F .hibytes 7FFAh -000D0Er 1 7F .hibytes 7FFBh -000D0Fr 1 7F .hibytes 7FFCh -000D10r 1 7F .hibytes 7FFDh -000D11r 1 7F .hibytes 7FFEh -000D12r 1 7F .hibytes 7FFFh -000D13r 1 80 .hibytes 8000h -000D14r 1 80 .hibytes 8001h -000D15r 1 80 .hibytes 8002h -000D16r 1 80 .hibytes 8003h -000D17r 1 80 .hibytes 8004h -000D18r 1 80 .hibytes 8005h -000D19r 1 80 .hibytes 8006h -000D1Ar 1 80 .hibytes 8007h -000D1Br 1 80 .hibytes 8008h -000D1Cr 1 80 .hibytes 8009h -000D1Dr 1 80 .hibytes 800Ah -000D1Er 1 80 .hibytes 800Bh -000D1Fr 1 9F .hibytes 9FE1h -000D20r 1 9F .hibytes 9FE2h -000D21r 1 9F .hibytes 9FE3h -000D22r 1 9F .hibytes 9FE4h -000D23r 1 9F .hibytes 9FE5h -000D24r 1 9F .hibytes 9FE6h -000D25r 1 9F .hibytes 9FE7h -000D26r 1 9F .hibytes 9FE8h -000D27r 1 9F .hibytes 9FE9h -000D28r 1 9F .hibytes 9FEAh -000D29r 1 9F .hibytes 9FEBh -000D2Ar 1 9F .hibytes 9FECh -000D2Br 1 9F .hibytes 9FEDh -000D2Cr 1 9F .hibytes 9FEEh -000D2Dr 1 9F .hibytes 9FEFh -000D2Er 1 9F .hibytes 9FF0h -000D2Fr 1 9F .hibytes 9FF1h -000D30r 1 9F .hibytes 9FF2h -000D31r 1 9F .hibytes 9FF3h -000D32r 1 9F .hibytes 9FF4h -000D33r 1 9F .hibytes 9FF5h -000D34r 1 9F .hibytes 9FF6h -000D35r 1 9F .hibytes 9FF7h -000D36r 1 9F .hibytes 9FF8h -000D37r 1 9F .hibytes 9FF9h -000D38r 1 9F .hibytes 9FFAh -000D39r 1 9F .hibytes 9FFBh -000D3Ar 1 9F .hibytes 9FFCh -000D3Br 1 9F .hibytes 9FFDh -000D3Cr 1 9F .hibytes 9FFEh -000D3Dr 1 9F .hibytes 9FFFh -000D3Er 1 A0 .hibytes 0A000h -000D3Fr 1 A0 .hibytes 0A001h -000D40r 1 A0 .hibytes 0A002h -000D41r 1 A0 .hibytes 0A003h -000D42r 1 A0 .hibytes 0A004h -000D43r 1 A0 .hibytes 0A005h -000D44r 1 A0 .hibytes 0A006h -000D45r 1 A0 .hibytes 0A007h -000D46r 1 A0 .hibytes 0A008h -000D47r 1 A0 .hibytes 0A009h -000D48r 1 A0 .hibytes 0A00Ah -000D49r 1 A0 .hibytes 0A00Bh -000D4Ar 1 A0 .hibytes 0A00Ch -000D4Br 1 A0 .hibytes 0A00Dh -000D4Cr 1 A0 .hibytes 0A00Eh -000D4Dr 1 A0 .hibytes 0A00Fh -000D4Er 1 AF .hibytes 0AFE1h -000D4Fr 1 AF .hibytes 0AFE2h -000D50r 1 AF .hibytes 0AFE3h -000D51r 1 AF .hibytes 0AFE4h -000D52r 1 AF .hibytes 0AFE5h -000D53r 1 AF .hibytes 0AFE6h -000D54r 1 AF .hibytes 0AFE7h -000D55r 1 AF .hibytes 0AFE8h -000D56r 1 AF .hibytes 0AFE9h -000D57r 1 AF .hibytes 0AFEAh -000D58r 1 AF .hibytes 0AFEBh -000D59r 1 AF .hibytes 0AFECh -000D5Ar 1 AF .hibytes 0AFEDh -000D5Br 1 AF .hibytes 0AFEEh -000D5Cr 1 AF .hibytes 0AFEFh -000D5Dr 1 AF .hibytes 0AFF0h -000D5Er 1 AF .hibytes 0AFF1h -000D5Fr 1 AF .hibytes 0AFF2h -000D60r 1 AF .hibytes 0AFF3h -000D61r 1 AF .hibytes 0AFF4h -000D62r 1 AF .hibytes 0AFF5h -000D63r 1 AF .hibytes 0AFF6h -000D64r 1 AF .hibytes 0AFF7h -000D65r 1 AF .hibytes 0AFF8h -000D66r 1 AF .hibytes 0AFF9h -000D67r 1 AF .hibytes 0AFFAh -000D68r 1 AF .hibytes 0AFFBh -000D69r 1 AF .hibytes 0AFFCh -000D6Ar 1 AF .hibytes 0AFFDh -000D6Br 1 AF .hibytes 0AFFEh -000D6Cr 1 AF .hibytes 0AFFFh -000D6Dr 1 B0 .hibytes 0B000h -000D6Er 1 B0 .hibytes 0B001h -000D6Fr 1 B0 .hibytes 0B002h -000D70r 1 B0 .hibytes 0B003h -000D71r 1 B0 .hibytes 0B004h -000D72r 1 B0 .hibytes 0B005h -000D73r 1 B0 .hibytes 0B006h -000D74r 1 B0 .hibytes 0B007h -000D75r 1 B0 .hibytes 0B008h -000D76r 1 B0 .hibytes 0B009h -000D77r 1 B0 .hibytes 0B00Ah -000D78r 1 B0 .hibytes 0B00Bh -000D79r 1 B0 .hibytes 0B00Ch -000D7Ar 1 B0 .hibytes 0B00Dh -000D7Br 1 B0 .hibytes 0B00Eh -000D7Cr 1 B0 .hibytes 0B00Fh -000D7Dr 1 BF .hibytes 0BFE1h -000D7Er 1 BF .hibytes 0BFE2h -000D7Fr 1 BF .hibytes 0BFE3h -000D80r 1 BF .hibytes 0BFE4h -000D81r 1 BF .hibytes 0BFE5h -000D82r 1 BF .hibytes 0BFE6h -000D83r 1 BF .hibytes 0BFE7h -000D84r 1 BF .hibytes 0BFE8h -000D85r 1 BF .hibytes 0BFE9h -000D86r 1 BF .hibytes 0BFEAh -000D87r 1 BF .hibytes 0BFEBh -000D88r 1 BF .hibytes 0BFECh -000D89r 1 BF .hibytes 0BFEDh -000D8Ar 1 BF .hibytes 0BFEEh -000D8Br 1 BF .hibytes 0BFEFh -000D8Cr 1 BF .hibytes 0BFF0h -000D8Dr 1 BF .hibytes 0BFF1h -000D8Er 1 BF .hibytes 0BFF2h -000D8Fr 1 BF .hibytes 0BFF3h -000D90r 1 BF .hibytes 0BFF4h -000D91r 1 BF .hibytes 0BFF5h -000D92r 1 BF .hibytes 0BFF6h -000D93r 1 BF .hibytes 0BFF7h -000D94r 1 BF .hibytes 0BFF8h -000D95r 1 BF .hibytes 0BFF9h -000D96r 1 BF .hibytes 0BFFAh -000D97r 1 BF .hibytes 0BFFBh -000D98r 1 BF .hibytes 0BFFCh -000D99r 1 BF .hibytes 0BFFDh -000D9Ar 1 BF .hibytes 0BFFEh -000D9Br 1 BF .hibytes 0BFFFh -000D9Cr 1 C0 .hibytes 0C000h -000D9Dr 1 C0 .hibytes 0C001h -000D9Er 1 C0 .hibytes 0C002h -000D9Fr 1 C0 .hibytes 0C003h -000DA0r 1 C0 .hibytes 0C004h -000DA1r 1 C0 .hibytes 0C005h -000DA2r 1 C0 .hibytes 0C006h -000DA3r 1 C0 .hibytes 0C007h -000DA4r 1 C0 .hibytes 0C008h -000DA5r 1 C0 .hibytes 0C009h -000DA6r 1 C0 .hibytes 0C00Ah -000DA7r 1 C0 .hibytes 0C00Bh -000DA8r 1 C0 .hibytes 0C00Ch -000DA9r 1 C0 .hibytes 0C00Dh -000DAAr 1 C0 .hibytes 0C00Eh -000DABr 1 C0 .hibytes 0C00Fh -000DACr 1 CF .hibytes 0CFE1h -000DADr 1 CF .hibytes 0CFE2h -000DAEr 1 CF .hibytes 0CFE3h -000DAFr 1 CF .hibytes 0CFE4h -000DB0r 1 CF .hibytes 0CFE5h -000DB1r 1 CF .hibytes 0CFE6h -000DB2r 1 CF .hibytes 0CFE7h -000DB3r 1 CF .hibytes 0CFE8h -000DB4r 1 CF .hibytes 0CFE9h -000DB5r 1 CF .hibytes 0CFEAh -000DB6r 1 CF .hibytes 0CFEBh -000DB7r 1 CF .hibytes 0CFECh -000DB8r 1 CF .hibytes 0CFEDh -000DB9r 1 CF .hibytes 0CFEEh -000DBAr 1 CF .hibytes 0CFEFh -000DBBr 1 CF .hibytes 0CFF0h -000DBCr 1 CF .hibytes 0CFF1h -000DBDr 1 CF .hibytes 0CFF2h -000DBEr 1 CF .hibytes 0CFF3h -000DBFr 1 CF .hibytes 0CFF4h -000DC0r 1 CF .hibytes 0CFF5h -000DC1r 1 CF .hibytes 0CFF6h -000DC2r 1 CF .hibytes 0CFF7h -000DC3r 1 CF .hibytes 0CFF8h -000DC4r 1 CF .hibytes 0CFF9h -000DC5r 1 CF .hibytes 0CFFAh -000DC6r 1 CF .hibytes 0CFFBh -000DC7r 1 CF .hibytes 0CFFCh -000DC8r 1 CF .hibytes 0CFFDh -000DC9r 1 CF .hibytes 0CFFEh -000DCAr 1 CF .hibytes 0CFFFh -000DCBr 1 D0 .hibytes 0D000h -000DCCr 1 D0 .hibytes 0D001h -000DCDr 1 D0 .hibytes 0D002h -000DCEr 1 D0 .hibytes 0D003h -000DCFr 1 D0 .hibytes 0D004h -000DD0r 1 D0 .hibytes 0D005h -000DD1r 1 D0 .hibytes 0D006h -000DD2r 1 D0 .hibytes 0D007h -000DD3r 1 D0 .hibytes 0D008h -000DD4r 1 D0 .hibytes 0D009h -000DD5r 1 D0 .hibytes 0D00Ah -000DD6r 1 D0 .hibytes 0D00Bh -000DD7r 1 D0 .hibytes 0D00Ch -000DD8r 1 D0 .hibytes 0D00Dh -000DD9r 1 D0 .hibytes 0D00Eh -000DDAr 1 D0 .hibytes 0D00Fh -000DDBr 1 DF .hibytes 0DFE1h -000DDCr 1 DF .hibytes 0DFE2h -000DDDr 1 DF .hibytes 0DFE3h -000DDEr 1 DF .hibytes 0DFE4h -000DDFr 1 DF .hibytes 0DFE5h -000DE0r 1 DF .hibytes 0DFE6h -000DE1r 1 DF .hibytes 0DFE7h -000DE2r 1 DF .hibytes 0DFE8h -000DE3r 1 DF .hibytes 0DFE9h -000DE4r 1 DF .hibytes 0DFEAh -000DE5r 1 DF .hibytes 0DFEBh -000DE6r 1 DF .hibytes 0DFECh -000DE7r 1 DF .hibytes 0DFEDh -000DE8r 1 DF .hibytes 0DFEEh -000DE9r 1 DF .hibytes 0DFEFh -000DEAr 1 DF .hibytes 0DFF0h -000DEBr 1 DF .hibytes 0DFF1h -000DECr 1 DF .hibytes 0DFF2h -000DEDr 1 DF .hibytes 0DFF3h -000DEEr 1 DF .hibytes 0DFF4h -000DEFr 1 DF .hibytes 0DFF5h -000DF0r 1 DF .hibytes 0DFF6h -000DF1r 1 DF .hibytes 0DFF7h -000DF2r 1 DF .hibytes 0DFF8h -000DF3r 1 DF .hibytes 0DFF9h -000DF4r 1 DF .hibytes 0DFFAh -000DF5r 1 DF .hibytes 0DFFBh -000DF6r 1 DF .hibytes 0DFFCh -000DF7r 1 DF .hibytes 0DFFDh -000DF8r 1 DF .hibytes 0DFFEh -000DF9r 1 DF .hibytes 0DFFFh -000DFAr 1 E0 .hibytes 0E000h -000DFBr 1 E0 .hibytes 0E001h -000DFCr 1 E0 .hibytes 0E002h -000DFDr 1 E0 .hibytes 0E003h -000DFEr 1 E0 .hibytes 0E004h -000DFFr 1 E0 .hibytes 0E005h -000E00r 1 E0 .hibytes 0E006h -000E01r 1 E0 .hibytes 0E007h -000E02r 1 E0 .hibytes 0E008h -000E03r 1 E0 .hibytes 0E009h -000E04r 1 E0 .hibytes 0E00Ah -000E05r 1 E0 .hibytes 0E00Bh -000E06r 1 E0 .hibytes 0E00Ch -000E07r 1 E0 .hibytes 0E00Dh -000E08r 1 E0 .hibytes 0E00Eh -000E09r 1 E0 .hibytes 0E00Fh -000E0Ar 1 EF .hibytes 0EFE1h -000E0Br 1 EF .hibytes 0EFE2h -000E0Cr 1 EF .hibytes 0EFE3h -000E0Dr 1 EF .hibytes 0EFE4h -000E0Er 1 EF .hibytes 0EFE5h -000E0Fr 1 EF .hibytes 0EFE6h -000E10r 1 EF .hibytes 0EFE7h -000E11r 1 EF .hibytes 0EFE8h -000E12r 1 EF .hibytes 0EFE9h -000E13r 1 EF .hibytes 0EFEAh -000E14r 1 EF .hibytes 0EFEBh -000E15r 1 EF .hibytes 0EFECh -000E16r 1 EF .hibytes 0EFEDh -000E17r 1 EF .hibytes 0EFEEh -000E18r 1 EF .hibytes 0EFEFh -000E19r 1 EF .hibytes 0EFF0h -000E1Ar 1 EF .hibytes 0EFF1h -000E1Br 1 EF .hibytes 0EFF2h -000E1Cr 1 EF .hibytes 0EFF3h -000E1Dr 1 EF .hibytes 0EFF4h -000E1Er 1 EF .hibytes 0EFF5h -000E1Fr 1 EF .hibytes 0EFF6h -000E20r 1 EF .hibytes 0EFF7h -000E21r 1 EF .hibytes 0EFF8h -000E22r 1 EF .hibytes 0EFF9h -000E23r 1 EF .hibytes 0EFFAh -000E24r 1 EF .hibytes 0EFFBh -000E25r 1 EF .hibytes 0EFFCh -000E26r 1 EF .hibytes 0EFFDh -000E27r 1 EF .hibytes 0EFFEh -000E28r 1 EF .hibytes 0EFFFh -000E29r 1 F0 .hibytes 0F000h -000E2Ar 1 F0 .hibytes 0F001h -000E2Br 1 F0 .hibytes 0F002h -000E2Cr 1 F0 .hibytes 0F003h -000E2Dr 1 F0 .hibytes 0F004h -000E2Er 1 F0 .hibytes 0F005h -000E2Fr 1 F0 .hibytes 0F006h -000E30r 1 F0 .hibytes 0F007h -000E31r 1 F0 .hibytes 0F008h -000E32r 1 F0 .hibytes 0F009h -000E33r 1 F0 .hibytes 0F00Ah -000E34r 1 F0 .hibytes 0F00Bh -000E35r 1 F0 .hibytes 0F00Ch -000E36r 1 F0 .hibytes 0F00Dh -000E37r 1 F0 .hibytes 0F00Eh -000E38r 1 F0 .hibytes 0F00Fh -000E39r 1 FF .hibytes 0FFE1h -000E3Ar 1 FF .hibytes 0FFE2h -000E3Br 1 FF .hibytes 0FFE3h -000E3Cr 1 FF .hibytes 0FFE4h -000E3Dr 1 FF .hibytes 0FFE5h -000E3Er 1 FF .hibytes 0FFE6h -000E3Fr 1 FF .hibytes 0FFE7h -000E40r 1 FF .hibytes 0FFE8h -000E41r 1 FF .hibytes 0FFE9h -000E42r 1 FF .hibytes 0FFEAh -000E43r 1 FF .hibytes 0FFEBh -000E44r 1 FF .hibytes 0FFECh -000E45r 1 FF .hibytes 0FFEDh -000E46r 1 FF .hibytes 0FFEEh -000E47r 1 FF .hibytes 0FFEFh -000E48r 1 FF .hibytes 0FFF0h -000E49r 1 FF .hibytes 0FFF1h -000E4Ar 1 FF .hibytes 0FFF2h -000E4Br 1 FF .hibytes 0FFF3h -000E4Cr 1 FF .hibytes 0FFF4h -000E4Dr 1 FF .hibytes 0FFF5h -000E4Er 1 FF .hibytes 0FFF6h -000E4Fr 1 FF .hibytes 0FFF7h -000E50r 1 FF .hibytes 0FFF8h -000E51r 1 FF .hibytes 0FFF9h -000E52r 1 FF .hibytes 0FFFAh -000E53r 1 FF .hibytes 0FFFBh -000E54r 1 FF .hibytes 0FFFCh -000E55r 1 FF .hibytes 0FFFDh -000E56r 1 FF .hibytes 0FFFEh -000E57r 1 FF .hibytes 0FFFFh +000C8Dr 1 ; alternative hex values, uppercase +000C8Dr 1 00 .hibytes 0h +000C8Er 1 00 .hibytes 1h +000C8Fr 1 00 .hibytes 2h +000C90r 1 00 .hibytes 3h +000C91r 1 00 .hibytes 4h +000C92r 1 00 .hibytes 5h +000C93r 1 00 .hibytes 6h +000C94r 1 00 .hibytes 7h +000C95r 1 00 .hibytes 8h +000C96r 1 00 .hibytes 9h +000C97r 1 00 .hibytes 0Ah +000C98r 1 00 .hibytes 0Bh +000C99r 1 00 .hibytes 0Ch +000C9Ar 1 00 .hibytes 0Dh +000C9Br 1 00 .hibytes 0Eh +000C9Cr 1 00 .hibytes 0Fh +000C9Dr 1 00 .hibytes 10h +000C9Er 1 00 .hibytes 11h +000C9Fr 1 00 .hibytes 12h +000CA0r 1 00 .hibytes 13h +000CA1r 1 00 .hibytes 70h +000CA2r 1 00 .hibytes 71h +000CA3r 1 00 .hibytes 72h +000CA4r 1 00 .hibytes 73h +000CA5r 1 00 .hibytes 74h +000CA6r 1 00 .hibytes 75h +000CA7r 1 00 .hibytes 76h +000CA8r 1 00 .hibytes 77h +000CA9r 1 00 .hibytes 78h +000CAAr 1 00 .hibytes 79h +000CABr 1 00 .hibytes 7Ah +000CACr 1 00 .hibytes 7Bh +000CADr 1 00 .hibytes 7Ch +000CAEr 1 00 .hibytes 7Dh +000CAFr 1 00 .hibytes 7Eh +000CB0r 1 00 .hibytes 7Fh +000CB1r 1 00 .hibytes 80h +000CB2r 1 00 .hibytes 81h +000CB3r 1 00 .hibytes 82h +000CB4r 1 00 .hibytes 83h +000CB5r 1 00 .hibytes 84h +000CB6r 1 00 .hibytes 85h +000CB7r 1 00 .hibytes 86h +000CB8r 1 00 .hibytes 0F0h +000CB9r 1 00 .hibytes 0F1h +000CBAr 1 00 .hibytes 0F2h +000CBBr 1 00 .hibytes 0F3h +000CBCr 1 00 .hibytes 0F4h +000CBDr 1 00 .hibytes 0F5h +000CBEr 1 00 .hibytes 0F6h +000CBFr 1 00 .hibytes 0F7h +000CC0r 1 00 .hibytes 0F8h +000CC1r 1 00 .hibytes 0F9h +000CC2r 1 00 .hibytes 0FAh +000CC3r 1 00 .hibytes 0FBh +000CC4r 1 00 .hibytes 0FCh +000CC5r 1 00 .hibytes 0FDh +000CC6r 1 00 .hibytes 0FEh +000CC7r 1 00 .hibytes 0FFh +000CC8r 1 01 .hibytes 100h +000CC9r 1 01 .hibytes 101h +000CCAr 1 01 .hibytes 102h +000CCBr 1 01 .hibytes 103h +000CCCr 1 0F .hibytes 0FD2h +000CCDr 1 0F .hibytes 0FD3h +000CCEr 1 0F .hibytes 0FD4h +000CCFr 1 0F .hibytes 0FD5h +000CD0r 1 0F .hibytes 0FD6h +000CD1r 1 0F .hibytes 0FD7h +000CD2r 1 0F .hibytes 0FD8h +000CD3r 1 0F .hibytes 0FD9h +000CD4r 1 0F .hibytes 0FDAh +000CD5r 1 0F .hibytes 0FDBh +000CD6r 1 0F .hibytes 0FDCh +000CD7r 1 0F .hibytes 0FDDh +000CD8r 1 0F .hibytes 0FDEh +000CD9r 1 0F .hibytes 0FDFh +000CDAr 1 0F .hibytes 0FE0h +000CDBr 1 0F .hibytes 0FE1h +000CDCr 1 0F .hibytes 0FE2h +000CDDr 1 0F .hibytes 0FE3h +000CDEr 1 0F .hibytes 0FE4h +000CDFr 1 0F .hibytes 0FE5h +000CE0r 1 0F .hibytes 0FE6h +000CE1r 1 0F .hibytes 0FE7h +000CE2r 1 0F .hibytes 0FE8h +000CE3r 1 0F .hibytes 0FE9h +000CE4r 1 0F .hibytes 0FEAh +000CE5r 1 0F .hibytes 0FEBh +000CE6r 1 0F .hibytes 0FECh +000CE7r 1 0F .hibytes 0FEDh +000CE8r 1 0F .hibytes 0FEEh +000CE9r 1 0F .hibytes 0FEFh +000CEAr 1 0F .hibytes 0FF0h +000CEBr 1 0F .hibytes 0FF1h +000CECr 1 0F .hibytes 0FF2h +000CEDr 1 0F .hibytes 0FF3h +000CEEr 1 0F .hibytes 0FF4h +000CEFr 1 0F .hibytes 0FF5h +000CF0r 1 0F .hibytes 0FF6h +000CF1r 1 0F .hibytes 0FF7h +000CF2r 1 0F .hibytes 0FF8h +000CF3r 1 0F .hibytes 0FF9h +000CF4r 1 0F .hibytes 0FFAh +000CF5r 1 0F .hibytes 0FFBh +000CF6r 1 0F .hibytes 0FFCh +000CF7r 1 0F .hibytes 0FFDh +000CF8r 1 0F .hibytes 0FFEh +000CF9r 1 0F .hibytes 0FFFh +000CFAr 1 10 .hibytes 1000h +000CFBr 1 10 .hibytes 1001h +000CFCr 1 10 .hibytes 1002h +000CFDr 1 10 .hibytes 1003h +000CFEr 1 10 .hibytes 1004h +000CFFr 1 10 .hibytes 1005h +000D00r 1 10 .hibytes 1006h +000D01r 1 10 .hibytes 1007h +000D02r 1 10 .hibytes 1008h +000D03r 1 7F .hibytes 7FF0h +000D04r 1 7F .hibytes 7FF1h +000D05r 1 7F .hibytes 7FF2h +000D06r 1 7F .hibytes 7FF3h +000D07r 1 7F .hibytes 7FF4h +000D08r 1 7F .hibytes 7FF5h +000D09r 1 7F .hibytes 7FF6h +000D0Ar 1 7F .hibytes 7FF7h +000D0Br 1 7F .hibytes 7FF8h +000D0Cr 1 7F .hibytes 7FF9h +000D0Dr 1 7F .hibytes 7FFAh +000D0Er 1 7F .hibytes 7FFBh +000D0Fr 1 7F .hibytes 7FFCh +000D10r 1 7F .hibytes 7FFDh +000D11r 1 7F .hibytes 7FFEh +000D12r 1 7F .hibytes 7FFFh +000D13r 1 80 .hibytes 8000h +000D14r 1 80 .hibytes 8001h +000D15r 1 80 .hibytes 8002h +000D16r 1 80 .hibytes 8003h +000D17r 1 80 .hibytes 8004h +000D18r 1 80 .hibytes 8005h +000D19r 1 80 .hibytes 8006h +000D1Ar 1 80 .hibytes 8007h +000D1Br 1 80 .hibytes 8008h +000D1Cr 1 80 .hibytes 8009h +000D1Dr 1 80 .hibytes 800Ah +000D1Er 1 80 .hibytes 800Bh +000D1Fr 1 9F .hibytes 9FE1h +000D20r 1 9F .hibytes 9FE2h +000D21r 1 9F .hibytes 9FE3h +000D22r 1 9F .hibytes 9FE4h +000D23r 1 9F .hibytes 9FE5h +000D24r 1 9F .hibytes 9FE6h +000D25r 1 9F .hibytes 9FE7h +000D26r 1 9F .hibytes 9FE8h +000D27r 1 9F .hibytes 9FE9h +000D28r 1 9F .hibytes 9FEAh +000D29r 1 9F .hibytes 9FEBh +000D2Ar 1 9F .hibytes 9FECh +000D2Br 1 9F .hibytes 9FEDh +000D2Cr 1 9F .hibytes 9FEEh +000D2Dr 1 9F .hibytes 9FEFh +000D2Er 1 9F .hibytes 9FF0h +000D2Fr 1 9F .hibytes 9FF1h +000D30r 1 9F .hibytes 9FF2h +000D31r 1 9F .hibytes 9FF3h +000D32r 1 9F .hibytes 9FF4h +000D33r 1 9F .hibytes 9FF5h +000D34r 1 9F .hibytes 9FF6h +000D35r 1 9F .hibytes 9FF7h +000D36r 1 9F .hibytes 9FF8h +000D37r 1 9F .hibytes 9FF9h +000D38r 1 9F .hibytes 9FFAh +000D39r 1 9F .hibytes 9FFBh +000D3Ar 1 9F .hibytes 9FFCh +000D3Br 1 9F .hibytes 9FFDh +000D3Cr 1 9F .hibytes 9FFEh +000D3Dr 1 9F .hibytes 9FFFh +000D3Er 1 A0 .hibytes 0A000h +000D3Fr 1 A0 .hibytes 0A001h +000D40r 1 A0 .hibytes 0A002h +000D41r 1 A0 .hibytes 0A003h +000D42r 1 A0 .hibytes 0A004h +000D43r 1 A0 .hibytes 0A005h +000D44r 1 A0 .hibytes 0A006h +000D45r 1 A0 .hibytes 0A007h +000D46r 1 A0 .hibytes 0A008h +000D47r 1 A0 .hibytes 0A009h +000D48r 1 A0 .hibytes 0A00Ah +000D49r 1 A0 .hibytes 0A00Bh +000D4Ar 1 A0 .hibytes 0A00Ch +000D4Br 1 A0 .hibytes 0A00Dh +000D4Cr 1 A0 .hibytes 0A00Eh +000D4Dr 1 A0 .hibytes 0A00Fh +000D4Er 1 AF .hibytes 0AFE1h +000D4Fr 1 AF .hibytes 0AFE2h +000D50r 1 AF .hibytes 0AFE3h +000D51r 1 AF .hibytes 0AFE4h +000D52r 1 AF .hibytes 0AFE5h +000D53r 1 AF .hibytes 0AFE6h +000D54r 1 AF .hibytes 0AFE7h +000D55r 1 AF .hibytes 0AFE8h +000D56r 1 AF .hibytes 0AFE9h +000D57r 1 AF .hibytes 0AFEAh +000D58r 1 AF .hibytes 0AFEBh +000D59r 1 AF .hibytes 0AFECh +000D5Ar 1 AF .hibytes 0AFEDh +000D5Br 1 AF .hibytes 0AFEEh +000D5Cr 1 AF .hibytes 0AFEFh +000D5Dr 1 AF .hibytes 0AFF0h +000D5Er 1 AF .hibytes 0AFF1h +000D5Fr 1 AF .hibytes 0AFF2h +000D60r 1 AF .hibytes 0AFF3h +000D61r 1 AF .hibytes 0AFF4h +000D62r 1 AF .hibytes 0AFF5h +000D63r 1 AF .hibytes 0AFF6h +000D64r 1 AF .hibytes 0AFF7h +000D65r 1 AF .hibytes 0AFF8h +000D66r 1 AF .hibytes 0AFF9h +000D67r 1 AF .hibytes 0AFFAh +000D68r 1 AF .hibytes 0AFFBh +000D69r 1 AF .hibytes 0AFFCh +000D6Ar 1 AF .hibytes 0AFFDh +000D6Br 1 AF .hibytes 0AFFEh +000D6Cr 1 AF .hibytes 0AFFFh +000D6Dr 1 B0 .hibytes 0B000h +000D6Er 1 B0 .hibytes 0B001h +000D6Fr 1 B0 .hibytes 0B002h +000D70r 1 B0 .hibytes 0B003h +000D71r 1 B0 .hibytes 0B004h +000D72r 1 B0 .hibytes 0B005h +000D73r 1 B0 .hibytes 0B006h +000D74r 1 B0 .hibytes 0B007h +000D75r 1 B0 .hibytes 0B008h +000D76r 1 B0 .hibytes 0B009h +000D77r 1 B0 .hibytes 0B00Ah +000D78r 1 B0 .hibytes 0B00Bh +000D79r 1 B0 .hibytes 0B00Ch +000D7Ar 1 B0 .hibytes 0B00Dh +000D7Br 1 B0 .hibytes 0B00Eh +000D7Cr 1 B0 .hibytes 0B00Fh +000D7Dr 1 BF .hibytes 0BFE1h +000D7Er 1 BF .hibytes 0BFE2h +000D7Fr 1 BF .hibytes 0BFE3h +000D80r 1 BF .hibytes 0BFE4h +000D81r 1 BF .hibytes 0BFE5h +000D82r 1 BF .hibytes 0BFE6h +000D83r 1 BF .hibytes 0BFE7h +000D84r 1 BF .hibytes 0BFE8h +000D85r 1 BF .hibytes 0BFE9h +000D86r 1 BF .hibytes 0BFEAh +000D87r 1 BF .hibytes 0BFEBh +000D88r 1 BF .hibytes 0BFECh +000D89r 1 BF .hibytes 0BFEDh +000D8Ar 1 BF .hibytes 0BFEEh +000D8Br 1 BF .hibytes 0BFEFh +000D8Cr 1 BF .hibytes 0BFF0h +000D8Dr 1 BF .hibytes 0BFF1h +000D8Er 1 BF .hibytes 0BFF2h +000D8Fr 1 BF .hibytes 0BFF3h +000D90r 1 BF .hibytes 0BFF4h +000D91r 1 BF .hibytes 0BFF5h +000D92r 1 BF .hibytes 0BFF6h +000D93r 1 BF .hibytes 0BFF7h +000D94r 1 BF .hibytes 0BFF8h +000D95r 1 BF .hibytes 0BFF9h +000D96r 1 BF .hibytes 0BFFAh +000D97r 1 BF .hibytes 0BFFBh +000D98r 1 BF .hibytes 0BFFCh +000D99r 1 BF .hibytes 0BFFDh +000D9Ar 1 BF .hibytes 0BFFEh +000D9Br 1 BF .hibytes 0BFFFh +000D9Cr 1 C0 .hibytes 0C000h +000D9Dr 1 C0 .hibytes 0C001h +000D9Er 1 C0 .hibytes 0C002h +000D9Fr 1 C0 .hibytes 0C003h +000DA0r 1 C0 .hibytes 0C004h +000DA1r 1 C0 .hibytes 0C005h +000DA2r 1 C0 .hibytes 0C006h +000DA3r 1 C0 .hibytes 0C007h +000DA4r 1 C0 .hibytes 0C008h +000DA5r 1 C0 .hibytes 0C009h +000DA6r 1 C0 .hibytes 0C00Ah +000DA7r 1 C0 .hibytes 0C00Bh +000DA8r 1 C0 .hibytes 0C00Ch +000DA9r 1 C0 .hibytes 0C00Dh +000DAAr 1 C0 .hibytes 0C00Eh +000DABr 1 C0 .hibytes 0C00Fh +000DACr 1 CF .hibytes 0CFE1h +000DADr 1 CF .hibytes 0CFE2h +000DAEr 1 CF .hibytes 0CFE3h +000DAFr 1 CF .hibytes 0CFE4h +000DB0r 1 CF .hibytes 0CFE5h +000DB1r 1 CF .hibytes 0CFE6h +000DB2r 1 CF .hibytes 0CFE7h +000DB3r 1 CF .hibytes 0CFE8h +000DB4r 1 CF .hibytes 0CFE9h +000DB5r 1 CF .hibytes 0CFEAh +000DB6r 1 CF .hibytes 0CFEBh +000DB7r 1 CF .hibytes 0CFECh +000DB8r 1 CF .hibytes 0CFEDh +000DB9r 1 CF .hibytes 0CFEEh +000DBAr 1 CF .hibytes 0CFEFh +000DBBr 1 CF .hibytes 0CFF0h +000DBCr 1 CF .hibytes 0CFF1h +000DBDr 1 CF .hibytes 0CFF2h +000DBEr 1 CF .hibytes 0CFF3h +000DBFr 1 CF .hibytes 0CFF4h +000DC0r 1 CF .hibytes 0CFF5h +000DC1r 1 CF .hibytes 0CFF6h +000DC2r 1 CF .hibytes 0CFF7h +000DC3r 1 CF .hibytes 0CFF8h +000DC4r 1 CF .hibytes 0CFF9h +000DC5r 1 CF .hibytes 0CFFAh +000DC6r 1 CF .hibytes 0CFFBh +000DC7r 1 CF .hibytes 0CFFCh +000DC8r 1 CF .hibytes 0CFFDh +000DC9r 1 CF .hibytes 0CFFEh +000DCAr 1 CF .hibytes 0CFFFh +000DCBr 1 D0 .hibytes 0D000h +000DCCr 1 D0 .hibytes 0D001h +000DCDr 1 D0 .hibytes 0D002h +000DCEr 1 D0 .hibytes 0D003h +000DCFr 1 D0 .hibytes 0D004h +000DD0r 1 D0 .hibytes 0D005h +000DD1r 1 D0 .hibytes 0D006h +000DD2r 1 D0 .hibytes 0D007h +000DD3r 1 D0 .hibytes 0D008h +000DD4r 1 D0 .hibytes 0D009h +000DD5r 1 D0 .hibytes 0D00Ah +000DD6r 1 D0 .hibytes 0D00Bh +000DD7r 1 D0 .hibytes 0D00Ch +000DD8r 1 D0 .hibytes 0D00Dh +000DD9r 1 D0 .hibytes 0D00Eh +000DDAr 1 D0 .hibytes 0D00Fh +000DDBr 1 DF .hibytes 0DFE1h +000DDCr 1 DF .hibytes 0DFE2h +000DDDr 1 DF .hibytes 0DFE3h +000DDEr 1 DF .hibytes 0DFE4h +000DDFr 1 DF .hibytes 0DFE5h +000DE0r 1 DF .hibytes 0DFE6h +000DE1r 1 DF .hibytes 0DFE7h +000DE2r 1 DF .hibytes 0DFE8h +000DE3r 1 DF .hibytes 0DFE9h +000DE4r 1 DF .hibytes 0DFEAh +000DE5r 1 DF .hibytes 0DFEBh +000DE6r 1 DF .hibytes 0DFECh +000DE7r 1 DF .hibytes 0DFEDh +000DE8r 1 DF .hibytes 0DFEEh +000DE9r 1 DF .hibytes 0DFEFh +000DEAr 1 DF .hibytes 0DFF0h +000DEBr 1 DF .hibytes 0DFF1h +000DECr 1 DF .hibytes 0DFF2h +000DEDr 1 DF .hibytes 0DFF3h +000DEEr 1 DF .hibytes 0DFF4h +000DEFr 1 DF .hibytes 0DFF5h +000DF0r 1 DF .hibytes 0DFF6h +000DF1r 1 DF .hibytes 0DFF7h +000DF2r 1 DF .hibytes 0DFF8h +000DF3r 1 DF .hibytes 0DFF9h +000DF4r 1 DF .hibytes 0DFFAh +000DF5r 1 DF .hibytes 0DFFBh +000DF6r 1 DF .hibytes 0DFFCh +000DF7r 1 DF .hibytes 0DFFDh +000DF8r 1 DF .hibytes 0DFFEh +000DF9r 1 DF .hibytes 0DFFFh +000DFAr 1 E0 .hibytes 0E000h +000DFBr 1 E0 .hibytes 0E001h +000DFCr 1 E0 .hibytes 0E002h +000DFDr 1 E0 .hibytes 0E003h +000DFEr 1 E0 .hibytes 0E004h +000DFFr 1 E0 .hibytes 0E005h +000E00r 1 E0 .hibytes 0E006h +000E01r 1 E0 .hibytes 0E007h +000E02r 1 E0 .hibytes 0E008h +000E03r 1 E0 .hibytes 0E009h +000E04r 1 E0 .hibytes 0E00Ah +000E05r 1 E0 .hibytes 0E00Bh +000E06r 1 E0 .hibytes 0E00Ch +000E07r 1 E0 .hibytes 0E00Dh +000E08r 1 E0 .hibytes 0E00Eh +000E09r 1 E0 .hibytes 0E00Fh +000E0Ar 1 EF .hibytes 0EFE1h +000E0Br 1 EF .hibytes 0EFE2h +000E0Cr 1 EF .hibytes 0EFE3h +000E0Dr 1 EF .hibytes 0EFE4h +000E0Er 1 EF .hibytes 0EFE5h +000E0Fr 1 EF .hibytes 0EFE6h +000E10r 1 EF .hibytes 0EFE7h +000E11r 1 EF .hibytes 0EFE8h +000E12r 1 EF .hibytes 0EFE9h +000E13r 1 EF .hibytes 0EFEAh +000E14r 1 EF .hibytes 0EFEBh +000E15r 1 EF .hibytes 0EFECh +000E16r 1 EF .hibytes 0EFEDh +000E17r 1 EF .hibytes 0EFEEh +000E18r 1 EF .hibytes 0EFEFh +000E19r 1 EF .hibytes 0EFF0h +000E1Ar 1 EF .hibytes 0EFF1h +000E1Br 1 EF .hibytes 0EFF2h +000E1Cr 1 EF .hibytes 0EFF3h +000E1Dr 1 EF .hibytes 0EFF4h +000E1Er 1 EF .hibytes 0EFF5h +000E1Fr 1 EF .hibytes 0EFF6h +000E20r 1 EF .hibytes 0EFF7h +000E21r 1 EF .hibytes 0EFF8h +000E22r 1 EF .hibytes 0EFF9h +000E23r 1 EF .hibytes 0EFFAh +000E24r 1 EF .hibytes 0EFFBh +000E25r 1 EF .hibytes 0EFFCh +000E26r 1 EF .hibytes 0EFFDh +000E27r 1 EF .hibytes 0EFFEh +000E28r 1 EF .hibytes 0EFFFh +000E29r 1 F0 .hibytes 0F000h +000E2Ar 1 F0 .hibytes 0F001h +000E2Br 1 F0 .hibytes 0F002h +000E2Cr 1 F0 .hibytes 0F003h +000E2Dr 1 F0 .hibytes 0F004h +000E2Er 1 F0 .hibytes 0F005h +000E2Fr 1 F0 .hibytes 0F006h +000E30r 1 F0 .hibytes 0F007h +000E31r 1 F0 .hibytes 0F008h +000E32r 1 F0 .hibytes 0F009h +000E33r 1 F0 .hibytes 0F00Ah +000E34r 1 F0 .hibytes 0F00Bh +000E35r 1 F0 .hibytes 0F00Ch +000E36r 1 F0 .hibytes 0F00Dh +000E37r 1 F0 .hibytes 0F00Eh +000E38r 1 F0 .hibytes 0F00Fh +000E39r 1 FF .hibytes 0FFE1h +000E3Ar 1 FF .hibytes 0FFE2h +000E3Br 1 FF .hibytes 0FFE3h +000E3Cr 1 FF .hibytes 0FFE4h +000E3Dr 1 FF .hibytes 0FFE5h +000E3Er 1 FF .hibytes 0FFE6h +000E3Fr 1 FF .hibytes 0FFE7h +000E40r 1 FF .hibytes 0FFE8h +000E41r 1 FF .hibytes 0FFE9h +000E42r 1 FF .hibytes 0FFEAh +000E43r 1 FF .hibytes 0FFEBh +000E44r 1 FF .hibytes 0FFECh +000E45r 1 FF .hibytes 0FFEDh +000E46r 1 FF .hibytes 0FFEEh +000E47r 1 FF .hibytes 0FFEFh +000E48r 1 FF .hibytes 0FFF0h +000E49r 1 FF .hibytes 0FFF1h +000E4Ar 1 FF .hibytes 0FFF2h +000E4Br 1 FF .hibytes 0FFF3h +000E4Cr 1 FF .hibytes 0FFF4h +000E4Dr 1 FF .hibytes 0FFF5h +000E4Er 1 FF .hibytes 0FFF6h +000E4Fr 1 FF .hibytes 0FFF7h +000E50r 1 FF .hibytes 0FFF8h +000E51r 1 FF .hibytes 0FFF9h +000E52r 1 FF .hibytes 0FFFAh +000E53r 1 FF .hibytes 0FFFBh +000E54r 1 FF .hibytes 0FFFCh +000E55r 1 FF .hibytes 0FFFDh +000E56r 1 FF .hibytes 0FFFEh +000E57r 1 FF .hibytes 0FFFFh 000E58r 1 -000E58r 1 ; alternative 4-digit hex values -000E58r 1 00 .hibytes 0000h -000E59r 1 00 .hibytes 0001h -000E5Ar 1 00 .hibytes 0002h -000E5Br 1 00 .hibytes 0003h -000E5Cr 1 00 .hibytes 0004h -000E5Dr 1 00 .hibytes 0005h -000E5Er 1 00 .hibytes 0006h -000E5Fr 1 00 .hibytes 0007h -000E60r 1 00 .hibytes 0008h -000E61r 1 00 .hibytes 0009h -000E62r 1 00 .hibytes 000ah -000E63r 1 00 .hibytes 000bh -000E64r 1 00 .hibytes 000ch -000E65r 1 00 .hibytes 000dh -000E66r 1 00 .hibytes 000eh -000E67r 1 00 .hibytes 000fh -000E68r 1 00 .hibytes 0010h -000E69r 1 00 .hibytes 0011h -000E6Ar 1 00 .hibytes 0012h -000E6Br 1 00 .hibytes 0013h -000E6Cr 1 00 .hibytes 0070h -000E6Dr 1 00 .hibytes 0071h -000E6Er 1 00 .hibytes 0072h -000E6Fr 1 00 .hibytes 0073h -000E70r 1 00 .hibytes 0074h -000E71r 1 00 .hibytes 0075h -000E72r 1 00 .hibytes 0076h -000E73r 1 00 .hibytes 0077h -000E74r 1 00 .hibytes 0078h -000E75r 1 00 .hibytes 0079h -000E76r 1 00 .hibytes 007ah -000E77r 1 00 .hibytes 007bh -000E78r 1 00 .hibytes 007ch -000E79r 1 00 .hibytes 007dh -000E7Ar 1 00 .hibytes 007eh -000E7Br 1 00 .hibytes 007fh -000E7Cr 1 00 .hibytes 0080h -000E7Dr 1 00 .hibytes 0081h -000E7Er 1 00 .hibytes 0082h -000E7Fr 1 00 .hibytes 0083h -000E80r 1 00 .hibytes 0084h -000E81r 1 00 .hibytes 0085h -000E82r 1 00 .hibytes 0086h -000E83r 1 00 .hibytes 00f0h -000E84r 1 00 .hibytes 00f1h -000E85r 1 00 .hibytes 00f2h -000E86r 1 00 .hibytes 00f3h -000E87r 1 00 .hibytes 00f4h -000E88r 1 00 .hibytes 00f5h -000E89r 1 00 .hibytes 00f6h -000E8Ar 1 00 .hibytes 00f7h -000E8Br 1 00 .hibytes 00f8h -000E8Cr 1 00 .hibytes 00f9h -000E8Dr 1 00 .hibytes 00fah -000E8Er 1 00 .hibytes 00fbh -000E8Fr 1 00 .hibytes 00fch -000E90r 1 00 .hibytes 00fdh -000E91r 1 00 .hibytes 00feh -000E92r 1 00 .hibytes 00ffh -000E93r 1 01 .hibytes 0100h -000E94r 1 01 .hibytes 0101h -000E95r 1 01 .hibytes 0102h -000E96r 1 01 .hibytes 0103h -000E97r 1 0F .hibytes 0fd2h -000E98r 1 0F .hibytes 0fd3h -000E99r 1 0F .hibytes 0fd4h -000E9Ar 1 0F .hibytes 0fd5h -000E9Br 1 0F .hibytes 0fd6h -000E9Cr 1 0F .hibytes 0fd7h -000E9Dr 1 0F .hibytes 0fd8h -000E9Er 1 0F .hibytes 0fd9h -000E9Fr 1 0F .hibytes 0fdah -000EA0r 1 0F .hibytes 0fdbh -000EA1r 1 0F .hibytes 0fdch -000EA2r 1 0F .hibytes 0fddh -000EA3r 1 0F .hibytes 0fdeh -000EA4r 1 0F .hibytes 0fdfh -000EA5r 1 0F .hibytes 0fe0h -000EA6r 1 0F .hibytes 0fe1h -000EA7r 1 0F .hibytes 0fe2h -000EA8r 1 0F .hibytes 0fe3h -000EA9r 1 0F .hibytes 0fe4h -000EAAr 1 0F .hibytes 0fe5h -000EABr 1 0F .hibytes 0fe6h -000EACr 1 0F .hibytes 0fe7h -000EADr 1 0F .hibytes 0fe8h -000EAEr 1 0F .hibytes 0fe9h -000EAFr 1 0F .hibytes 0feah -000EB0r 1 0F .hibytes 0febh -000EB1r 1 0F .hibytes 0fech -000EB2r 1 0F .hibytes 0fedh -000EB3r 1 0F .hibytes 0feeh -000EB4r 1 0F .hibytes 0fefh -000EB5r 1 0F .hibytes 0ff0h -000EB6r 1 0F .hibytes 0ff1h -000EB7r 1 0F .hibytes 0ff2h -000EB8r 1 0F .hibytes 0ff3h -000EB9r 1 0F .hibytes 0ff4h -000EBAr 1 0F .hibytes 0ff5h -000EBBr 1 0F .hibytes 0ff6h -000EBCr 1 0F .hibytes 0ff7h -000EBDr 1 0F .hibytes 0ff8h -000EBEr 1 0F .hibytes 0ff9h -000EBFr 1 0F .hibytes 0ffah -000EC0r 1 0F .hibytes 0ffbh -000EC1r 1 0F .hibytes 0ffch -000EC2r 1 0F .hibytes 0ffdh -000EC3r 1 0F .hibytes 0ffeh -000EC4r 1 0F .hibytes 0fffh -000EC5r 1 10 .hibytes 1000h -000EC6r 1 10 .hibytes 1001h -000EC7r 1 10 .hibytes 1002h -000EC8r 1 10 .hibytes 1003h -000EC9r 1 10 .hibytes 1004h -000ECAr 1 10 .hibytes 1005h -000ECBr 1 10 .hibytes 1006h -000ECCr 1 10 .hibytes 1007h -000ECDr 1 10 .hibytes 1008h -000ECEr 1 7F .hibytes 7ff0h -000ECFr 1 7F .hibytes 7ff1h -000ED0r 1 7F .hibytes 7ff2h -000ED1r 1 7F .hibytes 7ff3h -000ED2r 1 7F .hibytes 7ff4h -000ED3r 1 7F .hibytes 7ff5h -000ED4r 1 7F .hibytes 7ff6h -000ED5r 1 7F .hibytes 7ff7h -000ED6r 1 7F .hibytes 7ff8h -000ED7r 1 7F .hibytes 7ff9h -000ED8r 1 7F .hibytes 7ffah -000ED9r 1 7F .hibytes 7ffbh -000EDAr 1 7F .hibytes 7ffch -000EDBr 1 7F .hibytes 7ffdh -000EDCr 1 7F .hibytes 7ffeh -000EDDr 1 7F .hibytes 7fffh -000EDEr 1 80 .hibytes 8000h -000EDFr 1 80 .hibytes 8001h -000EE0r 1 80 .hibytes 8002h -000EE1r 1 80 .hibytes 8003h -000EE2r 1 80 .hibytes 8004h -000EE3r 1 80 .hibytes 8005h -000EE4r 1 80 .hibytes 8006h -000EE5r 1 80 .hibytes 8007h -000EE6r 1 80 .hibytes 8008h -000EE7r 1 80 .hibytes 8009h -000EE8r 1 80 .hibytes 800ah -000EE9r 1 80 .hibytes 800bh -000EEAr 1 9F .hibytes 9fe1h -000EEBr 1 9F .hibytes 9fe2h -000EECr 1 9F .hibytes 9fe3h -000EEDr 1 9F .hibytes 9fe4h -000EEEr 1 9F .hibytes 9fe5h -000EEFr 1 9F .hibytes 9fe6h -000EF0r 1 9F .hibytes 9fe7h -000EF1r 1 9F .hibytes 9fe8h -000EF2r 1 9F .hibytes 9fe9h -000EF3r 1 9F .hibytes 9feah -000EF4r 1 9F .hibytes 9febh -000EF5r 1 9F .hibytes 9fech -000EF6r 1 9F .hibytes 9fedh -000EF7r 1 9F .hibytes 9feeh -000EF8r 1 9F .hibytes 9fefh -000EF9r 1 9F .hibytes 9ff0h -000EFAr 1 9F .hibytes 9ff1h -000EFBr 1 9F .hibytes 9ff2h -000EFCr 1 9F .hibytes 9ff3h -000EFDr 1 9F .hibytes 9ff4h -000EFEr 1 9F .hibytes 9ff5h -000EFFr 1 9F .hibytes 9ff6h -000F00r 1 9F .hibytes 9ff7h -000F01r 1 9F .hibytes 9ff8h -000F02r 1 9F .hibytes 9ff9h -000F03r 1 9F .hibytes 9ffah -000F04r 1 9F .hibytes 9ffbh -000F05r 1 9F .hibytes 9ffch -000F06r 1 9F .hibytes 9ffdh -000F07r 1 9F .hibytes 9ffeh -000F08r 1 9F .hibytes 9fffh -000F09r 1 A0 .hibytes 0a000h -000F0Ar 1 A0 .hibytes 0a001h -000F0Br 1 A0 .hibytes 0a002h -000F0Cr 1 A0 .hibytes 0a003h -000F0Dr 1 A0 .hibytes 0a004h -000F0Er 1 A0 .hibytes 0a005h -000F0Fr 1 A0 .hibytes 0a006h -000F10r 1 A0 .hibytes 0a007h -000F11r 1 A0 .hibytes 0a008h -000F12r 1 A0 .hibytes 0a009h -000F13r 1 A0 .hibytes 0a00ah -000F14r 1 A0 .hibytes 0a00bh -000F15r 1 A0 .hibytes 0a00ch -000F16r 1 A0 .hibytes 0a00dh -000F17r 1 A0 .hibytes 0a00eh -000F18r 1 A0 .hibytes 0a00fh -000F19r 1 AF .hibytes 0afe1h -000F1Ar 1 AF .hibytes 0afe2h -000F1Br 1 AF .hibytes 0afe3h -000F1Cr 1 AF .hibytes 0afe4h -000F1Dr 1 AF .hibytes 0afe5h -000F1Er 1 AF .hibytes 0afe6h -000F1Fr 1 AF .hibytes 0afe7h -000F20r 1 AF .hibytes 0afe8h -000F21r 1 AF .hibytes 0afe9h -000F22r 1 AF .hibytes 0afeah -000F23r 1 AF .hibytes 0afebh -000F24r 1 AF .hibytes 0afech -000F25r 1 AF .hibytes 0afedh -000F26r 1 AF .hibytes 0afeeh -000F27r 1 AF .hibytes 0afefh -000F28r 1 AF .hibytes 0aff0h -000F29r 1 AF .hibytes 0aff1h -000F2Ar 1 AF .hibytes 0aff2h -000F2Br 1 AF .hibytes 0aff3h -000F2Cr 1 AF .hibytes 0aff4h -000F2Dr 1 AF .hibytes 0aff5h -000F2Er 1 AF .hibytes 0aff6h -000F2Fr 1 AF .hibytes 0aff7h -000F30r 1 AF .hibytes 0aff8h -000F31r 1 AF .hibytes 0aff9h -000F32r 1 AF .hibytes 0affah -000F33r 1 AF .hibytes 0affbh -000F34r 1 AF .hibytes 0affch -000F35r 1 AF .hibytes 0affdh -000F36r 1 AF .hibytes 0affeh -000F37r 1 AF .hibytes 0afffh -000F38r 1 B0 .hibytes 0b000h -000F39r 1 B0 .hibytes 0b001h -000F3Ar 1 B0 .hibytes 0b002h -000F3Br 1 B0 .hibytes 0b003h -000F3Cr 1 B0 .hibytes 0b004h -000F3Dr 1 B0 .hibytes 0b005h -000F3Er 1 B0 .hibytes 0b006h -000F3Fr 1 B0 .hibytes 0b007h -000F40r 1 B0 .hibytes 0b008h -000F41r 1 B0 .hibytes 0b009h -000F42r 1 B0 .hibytes 0b00ah -000F43r 1 B0 .hibytes 0b00bh -000F44r 1 B0 .hibytes 0b00ch -000F45r 1 B0 .hibytes 0b00dh -000F46r 1 B0 .hibytes 0b00eh -000F47r 1 B0 .hibytes 0b00fh -000F48r 1 BF .hibytes 0bfe1h -000F49r 1 BF .hibytes 0bfe2h -000F4Ar 1 BF .hibytes 0bfe3h -000F4Br 1 BF .hibytes 0bfe4h -000F4Cr 1 BF .hibytes 0bfe5h -000F4Dr 1 BF .hibytes 0bfe6h -000F4Er 1 BF .hibytes 0bfe7h -000F4Fr 1 BF .hibytes 0bfe8h -000F50r 1 BF .hibytes 0bfe9h -000F51r 1 BF .hibytes 0bfeah -000F52r 1 BF .hibytes 0bfebh -000F53r 1 BF .hibytes 0bfech -000F54r 1 BF .hibytes 0bfedh -000F55r 1 BF .hibytes 0bfeeh -000F56r 1 BF .hibytes 0bfefh -000F57r 1 BF .hibytes 0bff0h -000F58r 1 BF .hibytes 0bff1h -000F59r 1 BF .hibytes 0bff2h -000F5Ar 1 BF .hibytes 0bff3h -000F5Br 1 BF .hibytes 0bff4h -000F5Cr 1 BF .hibytes 0bff5h -000F5Dr 1 BF .hibytes 0bff6h -000F5Er 1 BF .hibytes 0bff7h -000F5Fr 1 BF .hibytes 0bff8h -000F60r 1 BF .hibytes 0bff9h -000F61r 1 BF .hibytes 0bffah -000F62r 1 BF .hibytes 0bffbh -000F63r 1 BF .hibytes 0bffch -000F64r 1 BF .hibytes 0bffdh -000F65r 1 BF .hibytes 0bffeh -000F66r 1 BF .hibytes 0bfffh -000F67r 1 C0 .hibytes 0c000h -000F68r 1 C0 .hibytes 0c001h -000F69r 1 C0 .hibytes 0c002h -000F6Ar 1 C0 .hibytes 0c003h -000F6Br 1 C0 .hibytes 0c004h -000F6Cr 1 C0 .hibytes 0c005h -000F6Dr 1 C0 .hibytes 0c006h -000F6Er 1 C0 .hibytes 0c007h -000F6Fr 1 C0 .hibytes 0c008h -000F70r 1 C0 .hibytes 0c009h -000F71r 1 C0 .hibytes 0c00ah -000F72r 1 C0 .hibytes 0c00bh -000F73r 1 C0 .hibytes 0c00ch -000F74r 1 C0 .hibytes 0c00dh -000F75r 1 C0 .hibytes 0c00eh -000F76r 1 C0 .hibytes 0c00fh -000F77r 1 CF .hibytes 0cfe1h -000F78r 1 CF .hibytes 0cfe2h -000F79r 1 CF .hibytes 0cfe3h -000F7Ar 1 CF .hibytes 0cfe4h -000F7Br 1 CF .hibytes 0cfe5h -000F7Cr 1 CF .hibytes 0cfe6h -000F7Dr 1 CF .hibytes 0cfe7h -000F7Er 1 CF .hibytes 0cfe8h -000F7Fr 1 CF .hibytes 0cfe9h -000F80r 1 CF .hibytes 0cfeah -000F81r 1 CF .hibytes 0cfebh -000F82r 1 CF .hibytes 0cfech -000F83r 1 CF .hibytes 0cfedh -000F84r 1 CF .hibytes 0cfeeh -000F85r 1 CF .hibytes 0cfefh -000F86r 1 CF .hibytes 0cff0h -000F87r 1 CF .hibytes 0cff1h -000F88r 1 CF .hibytes 0cff2h -000F89r 1 CF .hibytes 0cff3h -000F8Ar 1 CF .hibytes 0cff4h -000F8Br 1 CF .hibytes 0cff5h -000F8Cr 1 CF .hibytes 0cff6h -000F8Dr 1 CF .hibytes 0cff7h -000F8Er 1 CF .hibytes 0cff8h -000F8Fr 1 CF .hibytes 0cff9h -000F90r 1 CF .hibytes 0cffah -000F91r 1 CF .hibytes 0cffbh -000F92r 1 CF .hibytes 0cffch -000F93r 1 CF .hibytes 0cffdh -000F94r 1 CF .hibytes 0cffeh -000F95r 1 CF .hibytes 0cfffh -000F96r 1 D0 .hibytes 0d000h -000F97r 1 D0 .hibytes 0d001h -000F98r 1 D0 .hibytes 0d002h -000F99r 1 D0 .hibytes 0d003h -000F9Ar 1 D0 .hibytes 0d004h -000F9Br 1 D0 .hibytes 0d005h -000F9Cr 1 D0 .hibytes 0d006h -000F9Dr 1 D0 .hibytes 0d007h -000F9Er 1 D0 .hibytes 0d008h -000F9Fr 1 D0 .hibytes 0d009h -000FA0r 1 D0 .hibytes 0d00ah -000FA1r 1 D0 .hibytes 0d00bh -000FA2r 1 D0 .hibytes 0d00ch -000FA3r 1 D0 .hibytes 0d00dh -000FA4r 1 D0 .hibytes 0d00eh -000FA5r 1 D0 .hibytes 0d00fh -000FA6r 1 DF .hibytes 0dfe1h -000FA7r 1 DF .hibytes 0dfe2h -000FA8r 1 DF .hibytes 0dfe3h -000FA9r 1 DF .hibytes 0dfe4h -000FAAr 1 DF .hibytes 0dfe5h -000FABr 1 DF .hibytes 0dfe6h -000FACr 1 DF .hibytes 0dfe7h -000FADr 1 DF .hibytes 0dfe8h -000FAEr 1 DF .hibytes 0dfe9h -000FAFr 1 DF .hibytes 0dfeah -000FB0r 1 DF .hibytes 0dfebh -000FB1r 1 DF .hibytes 0dfech -000FB2r 1 DF .hibytes 0dfedh -000FB3r 1 DF .hibytes 0dfeeh -000FB4r 1 DF .hibytes 0dfefh -000FB5r 1 DF .hibytes 0dff0h -000FB6r 1 DF .hibytes 0dff1h -000FB7r 1 DF .hibytes 0dff2h -000FB8r 1 DF .hibytes 0dff3h -000FB9r 1 DF .hibytes 0dff4h -000FBAr 1 DF .hibytes 0dff5h -000FBBr 1 DF .hibytes 0dff6h -000FBCr 1 DF .hibytes 0dff7h -000FBDr 1 DF .hibytes 0dff8h -000FBEr 1 DF .hibytes 0dff9h -000FBFr 1 DF .hibytes 0dffah -000FC0r 1 DF .hibytes 0dffbh -000FC1r 1 DF .hibytes 0dffch -000FC2r 1 DF .hibytes 0dffdh -000FC3r 1 DF .hibytes 0dffeh -000FC4r 1 DF .hibytes 0dfffh -000FC5r 1 E0 .hibytes 0e000h -000FC6r 1 E0 .hibytes 0e001h -000FC7r 1 E0 .hibytes 0e002h -000FC8r 1 E0 .hibytes 0e003h -000FC9r 1 E0 .hibytes 0e004h -000FCAr 1 E0 .hibytes 0e005h -000FCBr 1 E0 .hibytes 0e006h -000FCCr 1 E0 .hibytes 0e007h -000FCDr 1 E0 .hibytes 0e008h -000FCEr 1 E0 .hibytes 0e009h -000FCFr 1 E0 .hibytes 0e00ah -000FD0r 1 E0 .hibytes 0e00bh -000FD1r 1 E0 .hibytes 0e00ch -000FD2r 1 E0 .hibytes 0e00dh -000FD3r 1 E0 .hibytes 0e00eh -000FD4r 1 E0 .hibytes 0e00fh -000FD5r 1 EF .hibytes 0efe1h -000FD6r 1 EF .hibytes 0efe2h -000FD7r 1 EF .hibytes 0efe3h -000FD8r 1 EF .hibytes 0efe4h -000FD9r 1 EF .hibytes 0efe5h -000FDAr 1 EF .hibytes 0efe6h -000FDBr 1 EF .hibytes 0efe7h -000FDCr 1 EF .hibytes 0efe8h -000FDDr 1 EF .hibytes 0efe9h -000FDEr 1 EF .hibytes 0efeah -000FDFr 1 EF .hibytes 0efebh -000FE0r 1 EF .hibytes 0efech -000FE1r 1 EF .hibytes 0efedh -000FE2r 1 EF .hibytes 0efeeh -000FE3r 1 EF .hibytes 0efefh -000FE4r 1 EF .hibytes 0eff0h -000FE5r 1 EF .hibytes 0eff1h -000FE6r 1 EF .hibytes 0eff2h -000FE7r 1 EF .hibytes 0eff3h -000FE8r 1 EF .hibytes 0eff4h -000FE9r 1 EF .hibytes 0eff5h -000FEAr 1 EF .hibytes 0eff6h -000FEBr 1 EF .hibytes 0eff7h -000FECr 1 EF .hibytes 0eff8h -000FEDr 1 EF .hibytes 0eff9h -000FEEr 1 EF .hibytes 0effah -000FEFr 1 EF .hibytes 0effbh -000FF0r 1 EF .hibytes 0effch -000FF1r 1 EF .hibytes 0effdh -000FF2r 1 EF .hibytes 0effeh -000FF3r 1 EF .hibytes 0efffh -000FF4r 1 F0 .hibytes 0f000h -000FF5r 1 F0 .hibytes 0f001h -000FF6r 1 F0 .hibytes 0f002h -000FF7r 1 F0 .hibytes 0f003h -000FF8r 1 F0 .hibytes 0f004h -000FF9r 1 F0 .hibytes 0f005h -000FFAr 1 F0 .hibytes 0f006h -000FFBr 1 F0 .hibytes 0f007h -000FFCr 1 F0 .hibytes 0f008h -000FFDr 1 F0 .hibytes 0f009h -000FFEr 1 F0 .hibytes 0f00ah -000FFFr 1 F0 .hibytes 0f00bh -001000r 1 F0 .hibytes 0f00ch -001001r 1 F0 .hibytes 0f00dh -001002r 1 F0 .hibytes 0f00eh -001003r 1 F0 .hibytes 0f00fh -001004r 1 FF .hibytes 0ffe1h -001005r 1 FF .hibytes 0ffe2h -001006r 1 FF .hibytes 0ffe3h -001007r 1 FF .hibytes 0ffe4h -001008r 1 FF .hibytes 0ffe5h -001009r 1 FF .hibytes 0ffe6h -00100Ar 1 FF .hibytes 0ffe7h -00100Br 1 FF .hibytes 0ffe8h -00100Cr 1 FF .hibytes 0ffe9h -00100Dr 1 FF .hibytes 0ffeah -00100Er 1 FF .hibytes 0ffebh -00100Fr 1 FF .hibytes 0ffech -001010r 1 FF .hibytes 0ffedh -001011r 1 FF .hibytes 0ffeeh -001012r 1 FF .hibytes 0ffefh -001013r 1 FF .hibytes 0fff0h -001014r 1 FF .hibytes 0fff1h -001015r 1 FF .hibytes 0fff2h -001016r 1 FF .hibytes 0fff3h -001017r 1 FF .hibytes 0fff4h -001018r 1 FF .hibytes 0fff5h -001019r 1 FF .hibytes 0fff6h -00101Ar 1 FF .hibytes 0fff7h -00101Br 1 FF .hibytes 0fff8h -00101Cr 1 FF .hibytes 0fff9h -00101Dr 1 FF .hibytes 0fffah -00101Er 1 FF .hibytes 0fffbh -00101Fr 1 FF .hibytes 0fffch -001020r 1 FF .hibytes 0fffdh -001021r 1 FF .hibytes 0fffeh -001022r 1 FF .hibytes 0ffffh +000E58r 1 ; alternative 4-digit hex values +000E58r 1 00 .hibytes 0000h +000E59r 1 00 .hibytes 0001h +000E5Ar 1 00 .hibytes 0002h +000E5Br 1 00 .hibytes 0003h +000E5Cr 1 00 .hibytes 0004h +000E5Dr 1 00 .hibytes 0005h +000E5Er 1 00 .hibytes 0006h +000E5Fr 1 00 .hibytes 0007h +000E60r 1 00 .hibytes 0008h +000E61r 1 00 .hibytes 0009h +000E62r 1 00 .hibytes 000ah +000E63r 1 00 .hibytes 000bh +000E64r 1 00 .hibytes 000ch +000E65r 1 00 .hibytes 000dh +000E66r 1 00 .hibytes 000eh +000E67r 1 00 .hibytes 000fh +000E68r 1 00 .hibytes 0010h +000E69r 1 00 .hibytes 0011h +000E6Ar 1 00 .hibytes 0012h +000E6Br 1 00 .hibytes 0013h +000E6Cr 1 00 .hibytes 0070h +000E6Dr 1 00 .hibytes 0071h +000E6Er 1 00 .hibytes 0072h +000E6Fr 1 00 .hibytes 0073h +000E70r 1 00 .hibytes 0074h +000E71r 1 00 .hibytes 0075h +000E72r 1 00 .hibytes 0076h +000E73r 1 00 .hibytes 0077h +000E74r 1 00 .hibytes 0078h +000E75r 1 00 .hibytes 0079h +000E76r 1 00 .hibytes 007ah +000E77r 1 00 .hibytes 007bh +000E78r 1 00 .hibytes 007ch +000E79r 1 00 .hibytes 007dh +000E7Ar 1 00 .hibytes 007eh +000E7Br 1 00 .hibytes 007fh +000E7Cr 1 00 .hibytes 0080h +000E7Dr 1 00 .hibytes 0081h +000E7Er 1 00 .hibytes 0082h +000E7Fr 1 00 .hibytes 0083h +000E80r 1 00 .hibytes 0084h +000E81r 1 00 .hibytes 0085h +000E82r 1 00 .hibytes 0086h +000E83r 1 00 .hibytes 00f0h +000E84r 1 00 .hibytes 00f1h +000E85r 1 00 .hibytes 00f2h +000E86r 1 00 .hibytes 00f3h +000E87r 1 00 .hibytes 00f4h +000E88r 1 00 .hibytes 00f5h +000E89r 1 00 .hibytes 00f6h +000E8Ar 1 00 .hibytes 00f7h +000E8Br 1 00 .hibytes 00f8h +000E8Cr 1 00 .hibytes 00f9h +000E8Dr 1 00 .hibytes 00fah +000E8Er 1 00 .hibytes 00fbh +000E8Fr 1 00 .hibytes 00fch +000E90r 1 00 .hibytes 00fdh +000E91r 1 00 .hibytes 00feh +000E92r 1 00 .hibytes 00ffh +000E93r 1 01 .hibytes 0100h +000E94r 1 01 .hibytes 0101h +000E95r 1 01 .hibytes 0102h +000E96r 1 01 .hibytes 0103h +000E97r 1 0F .hibytes 0fd2h +000E98r 1 0F .hibytes 0fd3h +000E99r 1 0F .hibytes 0fd4h +000E9Ar 1 0F .hibytes 0fd5h +000E9Br 1 0F .hibytes 0fd6h +000E9Cr 1 0F .hibytes 0fd7h +000E9Dr 1 0F .hibytes 0fd8h +000E9Er 1 0F .hibytes 0fd9h +000E9Fr 1 0F .hibytes 0fdah +000EA0r 1 0F .hibytes 0fdbh +000EA1r 1 0F .hibytes 0fdch +000EA2r 1 0F .hibytes 0fddh +000EA3r 1 0F .hibytes 0fdeh +000EA4r 1 0F .hibytes 0fdfh +000EA5r 1 0F .hibytes 0fe0h +000EA6r 1 0F .hibytes 0fe1h +000EA7r 1 0F .hibytes 0fe2h +000EA8r 1 0F .hibytes 0fe3h +000EA9r 1 0F .hibytes 0fe4h +000EAAr 1 0F .hibytes 0fe5h +000EABr 1 0F .hibytes 0fe6h +000EACr 1 0F .hibytes 0fe7h +000EADr 1 0F .hibytes 0fe8h +000EAEr 1 0F .hibytes 0fe9h +000EAFr 1 0F .hibytes 0feah +000EB0r 1 0F .hibytes 0febh +000EB1r 1 0F .hibytes 0fech +000EB2r 1 0F .hibytes 0fedh +000EB3r 1 0F .hibytes 0feeh +000EB4r 1 0F .hibytes 0fefh +000EB5r 1 0F .hibytes 0ff0h +000EB6r 1 0F .hibytes 0ff1h +000EB7r 1 0F .hibytes 0ff2h +000EB8r 1 0F .hibytes 0ff3h +000EB9r 1 0F .hibytes 0ff4h +000EBAr 1 0F .hibytes 0ff5h +000EBBr 1 0F .hibytes 0ff6h +000EBCr 1 0F .hibytes 0ff7h +000EBDr 1 0F .hibytes 0ff8h +000EBEr 1 0F .hibytes 0ff9h +000EBFr 1 0F .hibytes 0ffah +000EC0r 1 0F .hibytes 0ffbh +000EC1r 1 0F .hibytes 0ffch +000EC2r 1 0F .hibytes 0ffdh +000EC3r 1 0F .hibytes 0ffeh +000EC4r 1 0F .hibytes 0fffh +000EC5r 1 10 .hibytes 1000h +000EC6r 1 10 .hibytes 1001h +000EC7r 1 10 .hibytes 1002h +000EC8r 1 10 .hibytes 1003h +000EC9r 1 10 .hibytes 1004h +000ECAr 1 10 .hibytes 1005h +000ECBr 1 10 .hibytes 1006h +000ECCr 1 10 .hibytes 1007h +000ECDr 1 10 .hibytes 1008h +000ECEr 1 7F .hibytes 7ff0h +000ECFr 1 7F .hibytes 7ff1h +000ED0r 1 7F .hibytes 7ff2h +000ED1r 1 7F .hibytes 7ff3h +000ED2r 1 7F .hibytes 7ff4h +000ED3r 1 7F .hibytes 7ff5h +000ED4r 1 7F .hibytes 7ff6h +000ED5r 1 7F .hibytes 7ff7h +000ED6r 1 7F .hibytes 7ff8h +000ED7r 1 7F .hibytes 7ff9h +000ED8r 1 7F .hibytes 7ffah +000ED9r 1 7F .hibytes 7ffbh +000EDAr 1 7F .hibytes 7ffch +000EDBr 1 7F .hibytes 7ffdh +000EDCr 1 7F .hibytes 7ffeh +000EDDr 1 7F .hibytes 7fffh +000EDEr 1 80 .hibytes 8000h +000EDFr 1 80 .hibytes 8001h +000EE0r 1 80 .hibytes 8002h +000EE1r 1 80 .hibytes 8003h +000EE2r 1 80 .hibytes 8004h +000EE3r 1 80 .hibytes 8005h +000EE4r 1 80 .hibytes 8006h +000EE5r 1 80 .hibytes 8007h +000EE6r 1 80 .hibytes 8008h +000EE7r 1 80 .hibytes 8009h +000EE8r 1 80 .hibytes 800ah +000EE9r 1 80 .hibytes 800bh +000EEAr 1 9F .hibytes 9fe1h +000EEBr 1 9F .hibytes 9fe2h +000EECr 1 9F .hibytes 9fe3h +000EEDr 1 9F .hibytes 9fe4h +000EEEr 1 9F .hibytes 9fe5h +000EEFr 1 9F .hibytes 9fe6h +000EF0r 1 9F .hibytes 9fe7h +000EF1r 1 9F .hibytes 9fe8h +000EF2r 1 9F .hibytes 9fe9h +000EF3r 1 9F .hibytes 9feah +000EF4r 1 9F .hibytes 9febh +000EF5r 1 9F .hibytes 9fech +000EF6r 1 9F .hibytes 9fedh +000EF7r 1 9F .hibytes 9feeh +000EF8r 1 9F .hibytes 9fefh +000EF9r 1 9F .hibytes 9ff0h +000EFAr 1 9F .hibytes 9ff1h +000EFBr 1 9F .hibytes 9ff2h +000EFCr 1 9F .hibytes 9ff3h +000EFDr 1 9F .hibytes 9ff4h +000EFEr 1 9F .hibytes 9ff5h +000EFFr 1 9F .hibytes 9ff6h +000F00r 1 9F .hibytes 9ff7h +000F01r 1 9F .hibytes 9ff8h +000F02r 1 9F .hibytes 9ff9h +000F03r 1 9F .hibytes 9ffah +000F04r 1 9F .hibytes 9ffbh +000F05r 1 9F .hibytes 9ffch +000F06r 1 9F .hibytes 9ffdh +000F07r 1 9F .hibytes 9ffeh +000F08r 1 9F .hibytes 9fffh +000F09r 1 A0 .hibytes 0a000h +000F0Ar 1 A0 .hibytes 0a001h +000F0Br 1 A0 .hibytes 0a002h +000F0Cr 1 A0 .hibytes 0a003h +000F0Dr 1 A0 .hibytes 0a004h +000F0Er 1 A0 .hibytes 0a005h +000F0Fr 1 A0 .hibytes 0a006h +000F10r 1 A0 .hibytes 0a007h +000F11r 1 A0 .hibytes 0a008h +000F12r 1 A0 .hibytes 0a009h +000F13r 1 A0 .hibytes 0a00ah +000F14r 1 A0 .hibytes 0a00bh +000F15r 1 A0 .hibytes 0a00ch +000F16r 1 A0 .hibytes 0a00dh +000F17r 1 A0 .hibytes 0a00eh +000F18r 1 A0 .hibytes 0a00fh +000F19r 1 AF .hibytes 0afe1h +000F1Ar 1 AF .hibytes 0afe2h +000F1Br 1 AF .hibytes 0afe3h +000F1Cr 1 AF .hibytes 0afe4h +000F1Dr 1 AF .hibytes 0afe5h +000F1Er 1 AF .hibytes 0afe6h +000F1Fr 1 AF .hibytes 0afe7h +000F20r 1 AF .hibytes 0afe8h +000F21r 1 AF .hibytes 0afe9h +000F22r 1 AF .hibytes 0afeah +000F23r 1 AF .hibytes 0afebh +000F24r 1 AF .hibytes 0afech +000F25r 1 AF .hibytes 0afedh +000F26r 1 AF .hibytes 0afeeh +000F27r 1 AF .hibytes 0afefh +000F28r 1 AF .hibytes 0aff0h +000F29r 1 AF .hibytes 0aff1h +000F2Ar 1 AF .hibytes 0aff2h +000F2Br 1 AF .hibytes 0aff3h +000F2Cr 1 AF .hibytes 0aff4h +000F2Dr 1 AF .hibytes 0aff5h +000F2Er 1 AF .hibytes 0aff6h +000F2Fr 1 AF .hibytes 0aff7h +000F30r 1 AF .hibytes 0aff8h +000F31r 1 AF .hibytes 0aff9h +000F32r 1 AF .hibytes 0affah +000F33r 1 AF .hibytes 0affbh +000F34r 1 AF .hibytes 0affch +000F35r 1 AF .hibytes 0affdh +000F36r 1 AF .hibytes 0affeh +000F37r 1 AF .hibytes 0afffh +000F38r 1 B0 .hibytes 0b000h +000F39r 1 B0 .hibytes 0b001h +000F3Ar 1 B0 .hibytes 0b002h +000F3Br 1 B0 .hibytes 0b003h +000F3Cr 1 B0 .hibytes 0b004h +000F3Dr 1 B0 .hibytes 0b005h +000F3Er 1 B0 .hibytes 0b006h +000F3Fr 1 B0 .hibytes 0b007h +000F40r 1 B0 .hibytes 0b008h +000F41r 1 B0 .hibytes 0b009h +000F42r 1 B0 .hibytes 0b00ah +000F43r 1 B0 .hibytes 0b00bh +000F44r 1 B0 .hibytes 0b00ch +000F45r 1 B0 .hibytes 0b00dh +000F46r 1 B0 .hibytes 0b00eh +000F47r 1 B0 .hibytes 0b00fh +000F48r 1 BF .hibytes 0bfe1h +000F49r 1 BF .hibytes 0bfe2h +000F4Ar 1 BF .hibytes 0bfe3h +000F4Br 1 BF .hibytes 0bfe4h +000F4Cr 1 BF .hibytes 0bfe5h +000F4Dr 1 BF .hibytes 0bfe6h +000F4Er 1 BF .hibytes 0bfe7h +000F4Fr 1 BF .hibytes 0bfe8h +000F50r 1 BF .hibytes 0bfe9h +000F51r 1 BF .hibytes 0bfeah +000F52r 1 BF .hibytes 0bfebh +000F53r 1 BF .hibytes 0bfech +000F54r 1 BF .hibytes 0bfedh +000F55r 1 BF .hibytes 0bfeeh +000F56r 1 BF .hibytes 0bfefh +000F57r 1 BF .hibytes 0bff0h +000F58r 1 BF .hibytes 0bff1h +000F59r 1 BF .hibytes 0bff2h +000F5Ar 1 BF .hibytes 0bff3h +000F5Br 1 BF .hibytes 0bff4h +000F5Cr 1 BF .hibytes 0bff5h +000F5Dr 1 BF .hibytes 0bff6h +000F5Er 1 BF .hibytes 0bff7h +000F5Fr 1 BF .hibytes 0bff8h +000F60r 1 BF .hibytes 0bff9h +000F61r 1 BF .hibytes 0bffah +000F62r 1 BF .hibytes 0bffbh +000F63r 1 BF .hibytes 0bffch +000F64r 1 BF .hibytes 0bffdh +000F65r 1 BF .hibytes 0bffeh +000F66r 1 BF .hibytes 0bfffh +000F67r 1 C0 .hibytes 0c000h +000F68r 1 C0 .hibytes 0c001h +000F69r 1 C0 .hibytes 0c002h +000F6Ar 1 C0 .hibytes 0c003h +000F6Br 1 C0 .hibytes 0c004h +000F6Cr 1 C0 .hibytes 0c005h +000F6Dr 1 C0 .hibytes 0c006h +000F6Er 1 C0 .hibytes 0c007h +000F6Fr 1 C0 .hibytes 0c008h +000F70r 1 C0 .hibytes 0c009h +000F71r 1 C0 .hibytes 0c00ah +000F72r 1 C0 .hibytes 0c00bh +000F73r 1 C0 .hibytes 0c00ch +000F74r 1 C0 .hibytes 0c00dh +000F75r 1 C0 .hibytes 0c00eh +000F76r 1 C0 .hibytes 0c00fh +000F77r 1 CF .hibytes 0cfe1h +000F78r 1 CF .hibytes 0cfe2h +000F79r 1 CF .hibytes 0cfe3h +000F7Ar 1 CF .hibytes 0cfe4h +000F7Br 1 CF .hibytes 0cfe5h +000F7Cr 1 CF .hibytes 0cfe6h +000F7Dr 1 CF .hibytes 0cfe7h +000F7Er 1 CF .hibytes 0cfe8h +000F7Fr 1 CF .hibytes 0cfe9h +000F80r 1 CF .hibytes 0cfeah +000F81r 1 CF .hibytes 0cfebh +000F82r 1 CF .hibytes 0cfech +000F83r 1 CF .hibytes 0cfedh +000F84r 1 CF .hibytes 0cfeeh +000F85r 1 CF .hibytes 0cfefh +000F86r 1 CF .hibytes 0cff0h +000F87r 1 CF .hibytes 0cff1h +000F88r 1 CF .hibytes 0cff2h +000F89r 1 CF .hibytes 0cff3h +000F8Ar 1 CF .hibytes 0cff4h +000F8Br 1 CF .hibytes 0cff5h +000F8Cr 1 CF .hibytes 0cff6h +000F8Dr 1 CF .hibytes 0cff7h +000F8Er 1 CF .hibytes 0cff8h +000F8Fr 1 CF .hibytes 0cff9h +000F90r 1 CF .hibytes 0cffah +000F91r 1 CF .hibytes 0cffbh +000F92r 1 CF .hibytes 0cffch +000F93r 1 CF .hibytes 0cffdh +000F94r 1 CF .hibytes 0cffeh +000F95r 1 CF .hibytes 0cfffh +000F96r 1 D0 .hibytes 0d000h +000F97r 1 D0 .hibytes 0d001h +000F98r 1 D0 .hibytes 0d002h +000F99r 1 D0 .hibytes 0d003h +000F9Ar 1 D0 .hibytes 0d004h +000F9Br 1 D0 .hibytes 0d005h +000F9Cr 1 D0 .hibytes 0d006h +000F9Dr 1 D0 .hibytes 0d007h +000F9Er 1 D0 .hibytes 0d008h +000F9Fr 1 D0 .hibytes 0d009h +000FA0r 1 D0 .hibytes 0d00ah +000FA1r 1 D0 .hibytes 0d00bh +000FA2r 1 D0 .hibytes 0d00ch +000FA3r 1 D0 .hibytes 0d00dh +000FA4r 1 D0 .hibytes 0d00eh +000FA5r 1 D0 .hibytes 0d00fh +000FA6r 1 DF .hibytes 0dfe1h +000FA7r 1 DF .hibytes 0dfe2h +000FA8r 1 DF .hibytes 0dfe3h +000FA9r 1 DF .hibytes 0dfe4h +000FAAr 1 DF .hibytes 0dfe5h +000FABr 1 DF .hibytes 0dfe6h +000FACr 1 DF .hibytes 0dfe7h +000FADr 1 DF .hibytes 0dfe8h +000FAEr 1 DF .hibytes 0dfe9h +000FAFr 1 DF .hibytes 0dfeah +000FB0r 1 DF .hibytes 0dfebh +000FB1r 1 DF .hibytes 0dfech +000FB2r 1 DF .hibytes 0dfedh +000FB3r 1 DF .hibytes 0dfeeh +000FB4r 1 DF .hibytes 0dfefh +000FB5r 1 DF .hibytes 0dff0h +000FB6r 1 DF .hibytes 0dff1h +000FB7r 1 DF .hibytes 0dff2h +000FB8r 1 DF .hibytes 0dff3h +000FB9r 1 DF .hibytes 0dff4h +000FBAr 1 DF .hibytes 0dff5h +000FBBr 1 DF .hibytes 0dff6h +000FBCr 1 DF .hibytes 0dff7h +000FBDr 1 DF .hibytes 0dff8h +000FBEr 1 DF .hibytes 0dff9h +000FBFr 1 DF .hibytes 0dffah +000FC0r 1 DF .hibytes 0dffbh +000FC1r 1 DF .hibytes 0dffch +000FC2r 1 DF .hibytes 0dffdh +000FC3r 1 DF .hibytes 0dffeh +000FC4r 1 DF .hibytes 0dfffh +000FC5r 1 E0 .hibytes 0e000h +000FC6r 1 E0 .hibytes 0e001h +000FC7r 1 E0 .hibytes 0e002h +000FC8r 1 E0 .hibytes 0e003h +000FC9r 1 E0 .hibytes 0e004h +000FCAr 1 E0 .hibytes 0e005h +000FCBr 1 E0 .hibytes 0e006h +000FCCr 1 E0 .hibytes 0e007h +000FCDr 1 E0 .hibytes 0e008h +000FCEr 1 E0 .hibytes 0e009h +000FCFr 1 E0 .hibytes 0e00ah +000FD0r 1 E0 .hibytes 0e00bh +000FD1r 1 E0 .hibytes 0e00ch +000FD2r 1 E0 .hibytes 0e00dh +000FD3r 1 E0 .hibytes 0e00eh +000FD4r 1 E0 .hibytes 0e00fh +000FD5r 1 EF .hibytes 0efe1h +000FD6r 1 EF .hibytes 0efe2h +000FD7r 1 EF .hibytes 0efe3h +000FD8r 1 EF .hibytes 0efe4h +000FD9r 1 EF .hibytes 0efe5h +000FDAr 1 EF .hibytes 0efe6h +000FDBr 1 EF .hibytes 0efe7h +000FDCr 1 EF .hibytes 0efe8h +000FDDr 1 EF .hibytes 0efe9h +000FDEr 1 EF .hibytes 0efeah +000FDFr 1 EF .hibytes 0efebh +000FE0r 1 EF .hibytes 0efech +000FE1r 1 EF .hibytes 0efedh +000FE2r 1 EF .hibytes 0efeeh +000FE3r 1 EF .hibytes 0efefh +000FE4r 1 EF .hibytes 0eff0h +000FE5r 1 EF .hibytes 0eff1h +000FE6r 1 EF .hibytes 0eff2h +000FE7r 1 EF .hibytes 0eff3h +000FE8r 1 EF .hibytes 0eff4h +000FE9r 1 EF .hibytes 0eff5h +000FEAr 1 EF .hibytes 0eff6h +000FEBr 1 EF .hibytes 0eff7h +000FECr 1 EF .hibytes 0eff8h +000FEDr 1 EF .hibytes 0eff9h +000FEEr 1 EF .hibytes 0effah +000FEFr 1 EF .hibytes 0effbh +000FF0r 1 EF .hibytes 0effch +000FF1r 1 EF .hibytes 0effdh +000FF2r 1 EF .hibytes 0effeh +000FF3r 1 EF .hibytes 0efffh +000FF4r 1 F0 .hibytes 0f000h +000FF5r 1 F0 .hibytes 0f001h +000FF6r 1 F0 .hibytes 0f002h +000FF7r 1 F0 .hibytes 0f003h +000FF8r 1 F0 .hibytes 0f004h +000FF9r 1 F0 .hibytes 0f005h +000FFAr 1 F0 .hibytes 0f006h +000FFBr 1 F0 .hibytes 0f007h +000FFCr 1 F0 .hibytes 0f008h +000FFDr 1 F0 .hibytes 0f009h +000FFEr 1 F0 .hibytes 0f00ah +000FFFr 1 F0 .hibytes 0f00bh +001000r 1 F0 .hibytes 0f00ch +001001r 1 F0 .hibytes 0f00dh +001002r 1 F0 .hibytes 0f00eh +001003r 1 F0 .hibytes 0f00fh +001004r 1 FF .hibytes 0ffe1h +001005r 1 FF .hibytes 0ffe2h +001006r 1 FF .hibytes 0ffe3h +001007r 1 FF .hibytes 0ffe4h +001008r 1 FF .hibytes 0ffe5h +001009r 1 FF .hibytes 0ffe6h +00100Ar 1 FF .hibytes 0ffe7h +00100Br 1 FF .hibytes 0ffe8h +00100Cr 1 FF .hibytes 0ffe9h +00100Dr 1 FF .hibytes 0ffeah +00100Er 1 FF .hibytes 0ffebh +00100Fr 1 FF .hibytes 0ffech +001010r 1 FF .hibytes 0ffedh +001011r 1 FF .hibytes 0ffeeh +001012r 1 FF .hibytes 0ffefh +001013r 1 FF .hibytes 0fff0h +001014r 1 FF .hibytes 0fff1h +001015r 1 FF .hibytes 0fff2h +001016r 1 FF .hibytes 0fff3h +001017r 1 FF .hibytes 0fff4h +001018r 1 FF .hibytes 0fff5h +001019r 1 FF .hibytes 0fff6h +00101Ar 1 FF .hibytes 0fff7h +00101Br 1 FF .hibytes 0fff8h +00101Cr 1 FF .hibytes 0fff9h +00101Dr 1 FF .hibytes 0fffah +00101Er 1 FF .hibytes 0fffbh +00101Fr 1 FF .hibytes 0fffch +001020r 1 FF .hibytes 0fffdh +001021r 1 FF .hibytes 0fffeh +001022r 1 FF .hibytes 0ffffh 001023r 1 -001023r 1 ; alternative 4-digit hex values, uppercase -001023r 1 00 .hibytes 0000h -001024r 1 00 .hibytes 0001h -001025r 1 00 .hibytes 0002h -001026r 1 00 .hibytes 0003h -001027r 1 00 .hibytes 0004h -001028r 1 00 .hibytes 0005h -001029r 1 00 .hibytes 0006h -00102Ar 1 00 .hibytes 0007h -00102Br 1 00 .hibytes 0008h -00102Cr 1 00 .hibytes 0009h -00102Dr 1 00 .hibytes 000Ah -00102Er 1 00 .hibytes 000Bh -00102Fr 1 00 .hibytes 000Ch -001030r 1 00 .hibytes 000Dh -001031r 1 00 .hibytes 000Eh -001032r 1 00 .hibytes 000Fh -001033r 1 00 .hibytes 0010h -001034r 1 00 .hibytes 0011h -001035r 1 00 .hibytes 0012h -001036r 1 00 .hibytes 0013h -001037r 1 00 .hibytes 0070h -001038r 1 00 .hibytes 0071h -001039r 1 00 .hibytes 0072h -00103Ar 1 00 .hibytes 0073h -00103Br 1 00 .hibytes 0074h -00103Cr 1 00 .hibytes 0075h -00103Dr 1 00 .hibytes 0076h -00103Er 1 00 .hibytes 0077h -00103Fr 1 00 .hibytes 0078h -001040r 1 00 .hibytes 0079h -001041r 1 00 .hibytes 007Ah -001042r 1 00 .hibytes 007Bh -001043r 1 00 .hibytes 007Ch -001044r 1 00 .hibytes 007Dh -001045r 1 00 .hibytes 007Eh -001046r 1 00 .hibytes 007Fh -001047r 1 00 .hibytes 0080h -001048r 1 00 .hibytes 0081h -001049r 1 00 .hibytes 0082h -00104Ar 1 00 .hibytes 0083h -00104Br 1 00 .hibytes 0084h -00104Cr 1 00 .hibytes 0085h -00104Dr 1 00 .hibytes 0086h -00104Er 1 00 .hibytes 00F0h -00104Fr 1 00 .hibytes 00F1h -001050r 1 00 .hibytes 00F2h -001051r 1 00 .hibytes 00F3h -001052r 1 00 .hibytes 00F4h -001053r 1 00 .hibytes 00F5h -001054r 1 00 .hibytes 00F6h -001055r 1 00 .hibytes 00F7h -001056r 1 00 .hibytes 00F8h -001057r 1 00 .hibytes 00F9h -001058r 1 00 .hibytes 00FAh -001059r 1 00 .hibytes 00FBh -00105Ar 1 00 .hibytes 00FCh -00105Br 1 00 .hibytes 00FDh -00105Cr 1 00 .hibytes 00FEh -00105Dr 1 00 .hibytes 00FFh -00105Er 1 01 .hibytes 0100h -00105Fr 1 01 .hibytes 0101h -001060r 1 01 .hibytes 0102h -001061r 1 01 .hibytes 0103h -001062r 1 0F .hibytes 0FD2h -001063r 1 0F .hibytes 0FD3h -001064r 1 0F .hibytes 0FD4h -001065r 1 0F .hibytes 0FD5h -001066r 1 0F .hibytes 0FD6h -001067r 1 0F .hibytes 0FD7h -001068r 1 0F .hibytes 0FD8h -001069r 1 0F .hibytes 0FD9h -00106Ar 1 0F .hibytes 0FDAh -00106Br 1 0F .hibytes 0FDBh -00106Cr 1 0F .hibytes 0FDCh -00106Dr 1 0F .hibytes 0FDDh -00106Er 1 0F .hibytes 0FDEh -00106Fr 1 0F .hibytes 0FDFh -001070r 1 0F .hibytes 0FE0h -001071r 1 0F .hibytes 0FE1h -001072r 1 0F .hibytes 0FE2h -001073r 1 0F .hibytes 0FE3h -001074r 1 0F .hibytes 0FE4h -001075r 1 0F .hibytes 0FE5h -001076r 1 0F .hibytes 0FE6h -001077r 1 0F .hibytes 0FE7h -001078r 1 0F .hibytes 0FE8h -001079r 1 0F .hibytes 0FE9h -00107Ar 1 0F .hibytes 0FEAh -00107Br 1 0F .hibytes 0FEBh -00107Cr 1 0F .hibytes 0FECh -00107Dr 1 0F .hibytes 0FEDh -00107Er 1 0F .hibytes 0FEEh -00107Fr 1 0F .hibytes 0FEFh -001080r 1 0F .hibytes 0FF0h -001081r 1 0F .hibytes 0FF1h -001082r 1 0F .hibytes 0FF2h -001083r 1 0F .hibytes 0FF3h -001084r 1 0F .hibytes 0FF4h -001085r 1 0F .hibytes 0FF5h -001086r 1 0F .hibytes 0FF6h -001087r 1 0F .hibytes 0FF7h -001088r 1 0F .hibytes 0FF8h -001089r 1 0F .hibytes 0FF9h -00108Ar 1 0F .hibytes 0FFAh -00108Br 1 0F .hibytes 0FFBh -00108Cr 1 0F .hibytes 0FFCh -00108Dr 1 0F .hibytes 0FFDh -00108Er 1 0F .hibytes 0FFEh -00108Fr 1 0F .hibytes 0FFFh -001090r 1 10 .hibytes 1000h -001091r 1 10 .hibytes 1001h -001092r 1 10 .hibytes 1002h -001093r 1 10 .hibytes 1003h -001094r 1 10 .hibytes 1004h -001095r 1 10 .hibytes 1005h -001096r 1 10 .hibytes 1006h -001097r 1 10 .hibytes 1007h -001098r 1 10 .hibytes 1008h -001099r 1 7F .hibytes 7FF0h -00109Ar 1 7F .hibytes 7FF1h -00109Br 1 7F .hibytes 7FF2h -00109Cr 1 7F .hibytes 7FF3h -00109Dr 1 7F .hibytes 7FF4h -00109Er 1 7F .hibytes 7FF5h -00109Fr 1 7F .hibytes 7FF6h -0010A0r 1 7F .hibytes 7FF7h -0010A1r 1 7F .hibytes 7FF8h -0010A2r 1 7F .hibytes 7FF9h -0010A3r 1 7F .hibytes 7FFAh -0010A4r 1 7F .hibytes 7FFBh -0010A5r 1 7F .hibytes 7FFCh -0010A6r 1 7F .hibytes 7FFDh -0010A7r 1 7F .hibytes 7FFEh -0010A8r 1 7F .hibytes 7FFFh -0010A9r 1 80 .hibytes 8000h -0010AAr 1 80 .hibytes 8001h -0010ABr 1 80 .hibytes 8002h -0010ACr 1 80 .hibytes 8003h -0010ADr 1 80 .hibytes 8004h -0010AEr 1 80 .hibytes 8005h -0010AFr 1 80 .hibytes 8006h -0010B0r 1 80 .hibytes 8007h -0010B1r 1 80 .hibytes 8008h -0010B2r 1 80 .hibytes 8009h -0010B3r 1 80 .hibytes 800Ah -0010B4r 1 80 .hibytes 800Bh -0010B5r 1 9F .hibytes 9FE1h -0010B6r 1 9F .hibytes 9FE2h -0010B7r 1 9F .hibytes 9FE3h -0010B8r 1 9F .hibytes 9FE4h -0010B9r 1 9F .hibytes 9FE5h -0010BAr 1 9F .hibytes 9FE6h -0010BBr 1 9F .hibytes 9FE7h -0010BCr 1 9F .hibytes 9FE8h -0010BDr 1 9F .hibytes 9FE9h -0010BEr 1 9F .hibytes 9FEAh -0010BFr 1 9F .hibytes 9FEBh -0010C0r 1 9F .hibytes 9FECh -0010C1r 1 9F .hibytes 9FEDh -0010C2r 1 9F .hibytes 9FEEh -0010C3r 1 9F .hibytes 9FEFh -0010C4r 1 9F .hibytes 9FF0h -0010C5r 1 9F .hibytes 9FF1h -0010C6r 1 9F .hibytes 9FF2h -0010C7r 1 9F .hibytes 9FF3h -0010C8r 1 9F .hibytes 9FF4h -0010C9r 1 9F .hibytes 9FF5h -0010CAr 1 9F .hibytes 9FF6h -0010CBr 1 9F .hibytes 9FF7h -0010CCr 1 9F .hibytes 9FF8h -0010CDr 1 9F .hibytes 9FF9h -0010CEr 1 9F .hibytes 9FFAh -0010CFr 1 9F .hibytes 9FFBh -0010D0r 1 9F .hibytes 9FFCh -0010D1r 1 9F .hibytes 9FFDh -0010D2r 1 9F .hibytes 9FFEh -0010D3r 1 9F .hibytes 9FFFh -0010D4r 1 A0 .hibytes 0A000h -0010D5r 1 A0 .hibytes 0A001h -0010D6r 1 A0 .hibytes 0A002h -0010D7r 1 A0 .hibytes 0A003h -0010D8r 1 A0 .hibytes 0A004h -0010D9r 1 A0 .hibytes 0A005h -0010DAr 1 A0 .hibytes 0A006h -0010DBr 1 A0 .hibytes 0A007h -0010DCr 1 A0 .hibytes 0A008h -0010DDr 1 A0 .hibytes 0A009h -0010DEr 1 A0 .hibytes 0A00Ah -0010DFr 1 A0 .hibytes 0A00Bh -0010E0r 1 A0 .hibytes 0A00Ch -0010E1r 1 A0 .hibytes 0A00Dh -0010E2r 1 A0 .hibytes 0A00Eh -0010E3r 1 A0 .hibytes 0A00Fh -0010E4r 1 AF .hibytes 0AFE1h -0010E5r 1 AF .hibytes 0AFE2h -0010E6r 1 AF .hibytes 0AFE3h -0010E7r 1 AF .hibytes 0AFE4h -0010E8r 1 AF .hibytes 0AFE5h -0010E9r 1 AF .hibytes 0AFE6h -0010EAr 1 AF .hibytes 0AFE7h -0010EBr 1 AF .hibytes 0AFE8h -0010ECr 1 AF .hibytes 0AFE9h -0010EDr 1 AF .hibytes 0AFEAh -0010EEr 1 AF .hibytes 0AFEBh -0010EFr 1 AF .hibytes 0AFECh -0010F0r 1 AF .hibytes 0AFEDh -0010F1r 1 AF .hibytes 0AFEEh -0010F2r 1 AF .hibytes 0AFEFh -0010F3r 1 AF .hibytes 0AFF0h -0010F4r 1 AF .hibytes 0AFF1h -0010F5r 1 AF .hibytes 0AFF2h -0010F6r 1 AF .hibytes 0AFF3h -0010F7r 1 AF .hibytes 0AFF4h -0010F8r 1 AF .hibytes 0AFF5h -0010F9r 1 AF .hibytes 0AFF6h -0010FAr 1 AF .hibytes 0AFF7h -0010FBr 1 AF .hibytes 0AFF8h -0010FCr 1 AF .hibytes 0AFF9h -0010FDr 1 AF .hibytes 0AFFAh -0010FEr 1 AF .hibytes 0AFFBh -0010FFr 1 AF .hibytes 0AFFCh -001100r 1 AF .hibytes 0AFFDh -001101r 1 AF .hibytes 0AFFEh -001102r 1 AF .hibytes 0AFFFh -001103r 1 B0 .hibytes 0B000h -001104r 1 B0 .hibytes 0B001h -001105r 1 B0 .hibytes 0B002h -001106r 1 B0 .hibytes 0B003h -001107r 1 B0 .hibytes 0B004h -001108r 1 B0 .hibytes 0B005h -001109r 1 B0 .hibytes 0B006h -00110Ar 1 B0 .hibytes 0B007h -00110Br 1 B0 .hibytes 0B008h -00110Cr 1 B0 .hibytes 0B009h -00110Dr 1 B0 .hibytes 0B00Ah -00110Er 1 B0 .hibytes 0B00Bh -00110Fr 1 B0 .hibytes 0B00Ch -001110r 1 B0 .hibytes 0B00Dh -001111r 1 B0 .hibytes 0B00Eh -001112r 1 B0 .hibytes 0B00Fh -001113r 1 BF .hibytes 0BFE1h -001114r 1 BF .hibytes 0BFE2h -001115r 1 BF .hibytes 0BFE3h -001116r 1 BF .hibytes 0BFE4h -001117r 1 BF .hibytes 0BFE5h -001118r 1 BF .hibytes 0BFE6h -001119r 1 BF .hibytes 0BFE7h -00111Ar 1 BF .hibytes 0BFE8h -00111Br 1 BF .hibytes 0BFE9h -00111Cr 1 BF .hibytes 0BFEAh -00111Dr 1 BF .hibytes 0BFEBh -00111Er 1 BF .hibytes 0BFECh -00111Fr 1 BF .hibytes 0BFEDh -001120r 1 BF .hibytes 0BFEEh -001121r 1 BF .hibytes 0BFEFh -001122r 1 BF .hibytes 0BFF0h -001123r 1 BF .hibytes 0BFF1h -001124r 1 BF .hibytes 0BFF2h -001125r 1 BF .hibytes 0BFF3h -001126r 1 BF .hibytes 0BFF4h -001127r 1 BF .hibytes 0BFF5h -001128r 1 BF .hibytes 0BFF6h -001129r 1 BF .hibytes 0BFF7h -00112Ar 1 BF .hibytes 0BFF8h -00112Br 1 BF .hibytes 0BFF9h -00112Cr 1 BF .hibytes 0BFFAh -00112Dr 1 BF .hibytes 0BFFBh -00112Er 1 BF .hibytes 0BFFCh -00112Fr 1 BF .hibytes 0BFFDh -001130r 1 BF .hibytes 0BFFEh -001131r 1 BF .hibytes 0BFFFh -001132r 1 C0 .hibytes 0C000h -001133r 1 C0 .hibytes 0C001h -001134r 1 C0 .hibytes 0C002h -001135r 1 C0 .hibytes 0C003h -001136r 1 C0 .hibytes 0C004h -001137r 1 C0 .hibytes 0C005h -001138r 1 C0 .hibytes 0C006h -001139r 1 C0 .hibytes 0C007h -00113Ar 1 C0 .hibytes 0C008h -00113Br 1 C0 .hibytes 0C009h -00113Cr 1 C0 .hibytes 0C00Ah -00113Dr 1 C0 .hibytes 0C00Bh -00113Er 1 C0 .hibytes 0C00Ch -00113Fr 1 C0 .hibytes 0C00Dh -001140r 1 C0 .hibytes 0C00Eh -001141r 1 C0 .hibytes 0C00Fh -001142r 1 CF .hibytes 0CFE1h -001143r 1 CF .hibytes 0CFE2h -001144r 1 CF .hibytes 0CFE3h -001145r 1 CF .hibytes 0CFE4h -001146r 1 CF .hibytes 0CFE5h -001147r 1 CF .hibytes 0CFE6h -001148r 1 CF .hibytes 0CFE7h -001149r 1 CF .hibytes 0CFE8h -00114Ar 1 CF .hibytes 0CFE9h -00114Br 1 CF .hibytes 0CFEAh -00114Cr 1 CF .hibytes 0CFEBh -00114Dr 1 CF .hibytes 0CFECh -00114Er 1 CF .hibytes 0CFEDh -00114Fr 1 CF .hibytes 0CFEEh -001150r 1 CF .hibytes 0CFEFh -001151r 1 CF .hibytes 0CFF0h -001152r 1 CF .hibytes 0CFF1h -001153r 1 CF .hibytes 0CFF2h -001154r 1 CF .hibytes 0CFF3h -001155r 1 CF .hibytes 0CFF4h -001156r 1 CF .hibytes 0CFF5h -001157r 1 CF .hibytes 0CFF6h -001158r 1 CF .hibytes 0CFF7h -001159r 1 CF .hibytes 0CFF8h -00115Ar 1 CF .hibytes 0CFF9h -00115Br 1 CF .hibytes 0CFFAh -00115Cr 1 CF .hibytes 0CFFBh -00115Dr 1 CF .hibytes 0CFFCh -00115Er 1 CF .hibytes 0CFFDh -00115Fr 1 CF .hibytes 0CFFEh -001160r 1 CF .hibytes 0CFFFh -001161r 1 D0 .hibytes 0D000h -001162r 1 D0 .hibytes 0D001h -001163r 1 D0 .hibytes 0D002h -001164r 1 D0 .hibytes 0D003h -001165r 1 D0 .hibytes 0D004h -001166r 1 D0 .hibytes 0D005h -001167r 1 D0 .hibytes 0D006h -001168r 1 D0 .hibytes 0D007h -001169r 1 D0 .hibytes 0D008h -00116Ar 1 D0 .hibytes 0D009h -00116Br 1 D0 .hibytes 0D00Ah -00116Cr 1 D0 .hibytes 0D00Bh -00116Dr 1 D0 .hibytes 0D00Ch -00116Er 1 D0 .hibytes 0D00Dh -00116Fr 1 D0 .hibytes 0D00Eh -001170r 1 D0 .hibytes 0D00Fh -001171r 1 DF .hibytes 0DFE1h -001172r 1 DF .hibytes 0DFE2h -001173r 1 DF .hibytes 0DFE3h -001174r 1 DF .hibytes 0DFE4h -001175r 1 DF .hibytes 0DFE5h -001176r 1 DF .hibytes 0DFE6h -001177r 1 DF .hibytes 0DFE7h -001178r 1 DF .hibytes 0DFE8h -001179r 1 DF .hibytes 0DFE9h -00117Ar 1 DF .hibytes 0DFEAh -00117Br 1 DF .hibytes 0DFEBh -00117Cr 1 DF .hibytes 0DFECh -00117Dr 1 DF .hibytes 0DFEDh -00117Er 1 DF .hibytes 0DFEEh -00117Fr 1 DF .hibytes 0DFEFh -001180r 1 DF .hibytes 0DFF0h -001181r 1 DF .hibytes 0DFF1h -001182r 1 DF .hibytes 0DFF2h -001183r 1 DF .hibytes 0DFF3h -001184r 1 DF .hibytes 0DFF4h -001185r 1 DF .hibytes 0DFF5h -001186r 1 DF .hibytes 0DFF6h -001187r 1 DF .hibytes 0DFF7h -001188r 1 DF .hibytes 0DFF8h -001189r 1 DF .hibytes 0DFF9h -00118Ar 1 DF .hibytes 0DFFAh -00118Br 1 DF .hibytes 0DFFBh -00118Cr 1 DF .hibytes 0DFFCh -00118Dr 1 DF .hibytes 0DFFDh -00118Er 1 DF .hibytes 0DFFEh -00118Fr 1 DF .hibytes 0DFFFh -001190r 1 E0 .hibytes 0E000h -001191r 1 E0 .hibytes 0E001h -001192r 1 E0 .hibytes 0E002h -001193r 1 E0 .hibytes 0E003h -001194r 1 E0 .hibytes 0E004h -001195r 1 E0 .hibytes 0E005h -001196r 1 E0 .hibytes 0E006h -001197r 1 E0 .hibytes 0E007h -001198r 1 E0 .hibytes 0E008h -001199r 1 E0 .hibytes 0E009h -00119Ar 1 E0 .hibytes 0E00Ah -00119Br 1 E0 .hibytes 0E00Bh -00119Cr 1 E0 .hibytes 0E00Ch -00119Dr 1 E0 .hibytes 0E00Dh -00119Er 1 E0 .hibytes 0E00Eh -00119Fr 1 E0 .hibytes 0E00Fh -0011A0r 1 EF .hibytes 0EFE1h -0011A1r 1 EF .hibytes 0EFE2h -0011A2r 1 EF .hibytes 0EFE3h -0011A3r 1 EF .hibytes 0EFE4h -0011A4r 1 EF .hibytes 0EFE5h -0011A5r 1 EF .hibytes 0EFE6h -0011A6r 1 EF .hibytes 0EFE7h -0011A7r 1 EF .hibytes 0EFE8h -0011A8r 1 EF .hibytes 0EFE9h -0011A9r 1 EF .hibytes 0EFEAh -0011AAr 1 EF .hibytes 0EFEBh -0011ABr 1 EF .hibytes 0EFECh -0011ACr 1 EF .hibytes 0EFEDh -0011ADr 1 EF .hibytes 0EFEEh -0011AEr 1 EF .hibytes 0EFEFh -0011AFr 1 EF .hibytes 0EFF0h -0011B0r 1 EF .hibytes 0EFF1h -0011B1r 1 EF .hibytes 0EFF2h -0011B2r 1 EF .hibytes 0EFF3h -0011B3r 1 EF .hibytes 0EFF4h -0011B4r 1 EF .hibytes 0EFF5h -0011B5r 1 EF .hibytes 0EFF6h -0011B6r 1 EF .hibytes 0EFF7h -0011B7r 1 EF .hibytes 0EFF8h -0011B8r 1 EF .hibytes 0EFF9h -0011B9r 1 EF .hibytes 0EFFAh -0011BAr 1 EF .hibytes 0EFFBh -0011BBr 1 EF .hibytes 0EFFCh -0011BCr 1 EF .hibytes 0EFFDh -0011BDr 1 EF .hibytes 0EFFEh -0011BEr 1 EF .hibytes 0EFFFh -0011BFr 1 F0 .hibytes 0F000h -0011C0r 1 F0 .hibytes 0F001h -0011C1r 1 F0 .hibytes 0F002h -0011C2r 1 F0 .hibytes 0F003h -0011C3r 1 F0 .hibytes 0F004h -0011C4r 1 F0 .hibytes 0F005h -0011C5r 1 F0 .hibytes 0F006h -0011C6r 1 F0 .hibytes 0F007h -0011C7r 1 F0 .hibytes 0F008h -0011C8r 1 F0 .hibytes 0F009h -0011C9r 1 F0 .hibytes 0F00Ah -0011CAr 1 F0 .hibytes 0F00Bh -0011CBr 1 F0 .hibytes 0F00Ch -0011CCr 1 F0 .hibytes 0F00Dh -0011CDr 1 F0 .hibytes 0F00Eh -0011CEr 1 F0 .hibytes 0F00Fh -0011CFr 1 FF .hibytes 0FFE1h -0011D0r 1 FF .hibytes 0FFE2h -0011D1r 1 FF .hibytes 0FFE3h -0011D2r 1 FF .hibytes 0FFE4h -0011D3r 1 FF .hibytes 0FFE5h -0011D4r 1 FF .hibytes 0FFE6h -0011D5r 1 FF .hibytes 0FFE7h -0011D6r 1 FF .hibytes 0FFE8h -0011D7r 1 FF .hibytes 0FFE9h -0011D8r 1 FF .hibytes 0FFEAh -0011D9r 1 FF .hibytes 0FFEBh -0011DAr 1 FF .hibytes 0FFECh -0011DBr 1 FF .hibytes 0FFEDh -0011DCr 1 FF .hibytes 0FFEEh -0011DDr 1 FF .hibytes 0FFEFh -0011DEr 1 FF .hibytes 0FFF0h -0011DFr 1 FF .hibytes 0FFF1h -0011E0r 1 FF .hibytes 0FFF2h -0011E1r 1 FF .hibytes 0FFF3h -0011E2r 1 FF .hibytes 0FFF4h -0011E3r 1 FF .hibytes 0FFF5h -0011E4r 1 FF .hibytes 0FFF6h -0011E5r 1 FF .hibytes 0FFF7h -0011E6r 1 FF .hibytes 0FFF8h -0011E7r 1 FF .hibytes 0FFF9h -0011E8r 1 FF .hibytes 0FFFAh -0011E9r 1 FF .hibytes 0FFFBh -0011EAr 1 FF .hibytes 0FFFCh -0011EBr 1 FF .hibytes 0FFFDh -0011ECr 1 FF .hibytes 0FFFEh -0011EDr 1 FF .hibytes 0FFFFh +001023r 1 ; alternative 4-digit hex values, uppercase +001023r 1 00 .hibytes 0000h +001024r 1 00 .hibytes 0001h +001025r 1 00 .hibytes 0002h +001026r 1 00 .hibytes 0003h +001027r 1 00 .hibytes 0004h +001028r 1 00 .hibytes 0005h +001029r 1 00 .hibytes 0006h +00102Ar 1 00 .hibytes 0007h +00102Br 1 00 .hibytes 0008h +00102Cr 1 00 .hibytes 0009h +00102Dr 1 00 .hibytes 000Ah +00102Er 1 00 .hibytes 000Bh +00102Fr 1 00 .hibytes 000Ch +001030r 1 00 .hibytes 000Dh +001031r 1 00 .hibytes 000Eh +001032r 1 00 .hibytes 000Fh +001033r 1 00 .hibytes 0010h +001034r 1 00 .hibytes 0011h +001035r 1 00 .hibytes 0012h +001036r 1 00 .hibytes 0013h +001037r 1 00 .hibytes 0070h +001038r 1 00 .hibytes 0071h +001039r 1 00 .hibytes 0072h +00103Ar 1 00 .hibytes 0073h +00103Br 1 00 .hibytes 0074h +00103Cr 1 00 .hibytes 0075h +00103Dr 1 00 .hibytes 0076h +00103Er 1 00 .hibytes 0077h +00103Fr 1 00 .hibytes 0078h +001040r 1 00 .hibytes 0079h +001041r 1 00 .hibytes 007Ah +001042r 1 00 .hibytes 007Bh +001043r 1 00 .hibytes 007Ch +001044r 1 00 .hibytes 007Dh +001045r 1 00 .hibytes 007Eh +001046r 1 00 .hibytes 007Fh +001047r 1 00 .hibytes 0080h +001048r 1 00 .hibytes 0081h +001049r 1 00 .hibytes 0082h +00104Ar 1 00 .hibytes 0083h +00104Br 1 00 .hibytes 0084h +00104Cr 1 00 .hibytes 0085h +00104Dr 1 00 .hibytes 0086h +00104Er 1 00 .hibytes 00F0h +00104Fr 1 00 .hibytes 00F1h +001050r 1 00 .hibytes 00F2h +001051r 1 00 .hibytes 00F3h +001052r 1 00 .hibytes 00F4h +001053r 1 00 .hibytes 00F5h +001054r 1 00 .hibytes 00F6h +001055r 1 00 .hibytes 00F7h +001056r 1 00 .hibytes 00F8h +001057r 1 00 .hibytes 00F9h +001058r 1 00 .hibytes 00FAh +001059r 1 00 .hibytes 00FBh +00105Ar 1 00 .hibytes 00FCh +00105Br 1 00 .hibytes 00FDh +00105Cr 1 00 .hibytes 00FEh +00105Dr 1 00 .hibytes 00FFh +00105Er 1 01 .hibytes 0100h +00105Fr 1 01 .hibytes 0101h +001060r 1 01 .hibytes 0102h +001061r 1 01 .hibytes 0103h +001062r 1 0F .hibytes 0FD2h +001063r 1 0F .hibytes 0FD3h +001064r 1 0F .hibytes 0FD4h +001065r 1 0F .hibytes 0FD5h +001066r 1 0F .hibytes 0FD6h +001067r 1 0F .hibytes 0FD7h +001068r 1 0F .hibytes 0FD8h +001069r 1 0F .hibytes 0FD9h +00106Ar 1 0F .hibytes 0FDAh +00106Br 1 0F .hibytes 0FDBh +00106Cr 1 0F .hibytes 0FDCh +00106Dr 1 0F .hibytes 0FDDh +00106Er 1 0F .hibytes 0FDEh +00106Fr 1 0F .hibytes 0FDFh +001070r 1 0F .hibytes 0FE0h +001071r 1 0F .hibytes 0FE1h +001072r 1 0F .hibytes 0FE2h +001073r 1 0F .hibytes 0FE3h +001074r 1 0F .hibytes 0FE4h +001075r 1 0F .hibytes 0FE5h +001076r 1 0F .hibytes 0FE6h +001077r 1 0F .hibytes 0FE7h +001078r 1 0F .hibytes 0FE8h +001079r 1 0F .hibytes 0FE9h +00107Ar 1 0F .hibytes 0FEAh +00107Br 1 0F .hibytes 0FEBh +00107Cr 1 0F .hibytes 0FECh +00107Dr 1 0F .hibytes 0FEDh +00107Er 1 0F .hibytes 0FEEh +00107Fr 1 0F .hibytes 0FEFh +001080r 1 0F .hibytes 0FF0h +001081r 1 0F .hibytes 0FF1h +001082r 1 0F .hibytes 0FF2h +001083r 1 0F .hibytes 0FF3h +001084r 1 0F .hibytes 0FF4h +001085r 1 0F .hibytes 0FF5h +001086r 1 0F .hibytes 0FF6h +001087r 1 0F .hibytes 0FF7h +001088r 1 0F .hibytes 0FF8h +001089r 1 0F .hibytes 0FF9h +00108Ar 1 0F .hibytes 0FFAh +00108Br 1 0F .hibytes 0FFBh +00108Cr 1 0F .hibytes 0FFCh +00108Dr 1 0F .hibytes 0FFDh +00108Er 1 0F .hibytes 0FFEh +00108Fr 1 0F .hibytes 0FFFh +001090r 1 10 .hibytes 1000h +001091r 1 10 .hibytes 1001h +001092r 1 10 .hibytes 1002h +001093r 1 10 .hibytes 1003h +001094r 1 10 .hibytes 1004h +001095r 1 10 .hibytes 1005h +001096r 1 10 .hibytes 1006h +001097r 1 10 .hibytes 1007h +001098r 1 10 .hibytes 1008h +001099r 1 7F .hibytes 7FF0h +00109Ar 1 7F .hibytes 7FF1h +00109Br 1 7F .hibytes 7FF2h +00109Cr 1 7F .hibytes 7FF3h +00109Dr 1 7F .hibytes 7FF4h +00109Er 1 7F .hibytes 7FF5h +00109Fr 1 7F .hibytes 7FF6h +0010A0r 1 7F .hibytes 7FF7h +0010A1r 1 7F .hibytes 7FF8h +0010A2r 1 7F .hibytes 7FF9h +0010A3r 1 7F .hibytes 7FFAh +0010A4r 1 7F .hibytes 7FFBh +0010A5r 1 7F .hibytes 7FFCh +0010A6r 1 7F .hibytes 7FFDh +0010A7r 1 7F .hibytes 7FFEh +0010A8r 1 7F .hibytes 7FFFh +0010A9r 1 80 .hibytes 8000h +0010AAr 1 80 .hibytes 8001h +0010ABr 1 80 .hibytes 8002h +0010ACr 1 80 .hibytes 8003h +0010ADr 1 80 .hibytes 8004h +0010AEr 1 80 .hibytes 8005h +0010AFr 1 80 .hibytes 8006h +0010B0r 1 80 .hibytes 8007h +0010B1r 1 80 .hibytes 8008h +0010B2r 1 80 .hibytes 8009h +0010B3r 1 80 .hibytes 800Ah +0010B4r 1 80 .hibytes 800Bh +0010B5r 1 9F .hibytes 9FE1h +0010B6r 1 9F .hibytes 9FE2h +0010B7r 1 9F .hibytes 9FE3h +0010B8r 1 9F .hibytes 9FE4h +0010B9r 1 9F .hibytes 9FE5h +0010BAr 1 9F .hibytes 9FE6h +0010BBr 1 9F .hibytes 9FE7h +0010BCr 1 9F .hibytes 9FE8h +0010BDr 1 9F .hibytes 9FE9h +0010BEr 1 9F .hibytes 9FEAh +0010BFr 1 9F .hibytes 9FEBh +0010C0r 1 9F .hibytes 9FECh +0010C1r 1 9F .hibytes 9FEDh +0010C2r 1 9F .hibytes 9FEEh +0010C3r 1 9F .hibytes 9FEFh +0010C4r 1 9F .hibytes 9FF0h +0010C5r 1 9F .hibytes 9FF1h +0010C6r 1 9F .hibytes 9FF2h +0010C7r 1 9F .hibytes 9FF3h +0010C8r 1 9F .hibytes 9FF4h +0010C9r 1 9F .hibytes 9FF5h +0010CAr 1 9F .hibytes 9FF6h +0010CBr 1 9F .hibytes 9FF7h +0010CCr 1 9F .hibytes 9FF8h +0010CDr 1 9F .hibytes 9FF9h +0010CEr 1 9F .hibytes 9FFAh +0010CFr 1 9F .hibytes 9FFBh +0010D0r 1 9F .hibytes 9FFCh +0010D1r 1 9F .hibytes 9FFDh +0010D2r 1 9F .hibytes 9FFEh +0010D3r 1 9F .hibytes 9FFFh +0010D4r 1 A0 .hibytes 0A000h +0010D5r 1 A0 .hibytes 0A001h +0010D6r 1 A0 .hibytes 0A002h +0010D7r 1 A0 .hibytes 0A003h +0010D8r 1 A0 .hibytes 0A004h +0010D9r 1 A0 .hibytes 0A005h +0010DAr 1 A0 .hibytes 0A006h +0010DBr 1 A0 .hibytes 0A007h +0010DCr 1 A0 .hibytes 0A008h +0010DDr 1 A0 .hibytes 0A009h +0010DEr 1 A0 .hibytes 0A00Ah +0010DFr 1 A0 .hibytes 0A00Bh +0010E0r 1 A0 .hibytes 0A00Ch +0010E1r 1 A0 .hibytes 0A00Dh +0010E2r 1 A0 .hibytes 0A00Eh +0010E3r 1 A0 .hibytes 0A00Fh +0010E4r 1 AF .hibytes 0AFE1h +0010E5r 1 AF .hibytes 0AFE2h +0010E6r 1 AF .hibytes 0AFE3h +0010E7r 1 AF .hibytes 0AFE4h +0010E8r 1 AF .hibytes 0AFE5h +0010E9r 1 AF .hibytes 0AFE6h +0010EAr 1 AF .hibytes 0AFE7h +0010EBr 1 AF .hibytes 0AFE8h +0010ECr 1 AF .hibytes 0AFE9h +0010EDr 1 AF .hibytes 0AFEAh +0010EEr 1 AF .hibytes 0AFEBh +0010EFr 1 AF .hibytes 0AFECh +0010F0r 1 AF .hibytes 0AFEDh +0010F1r 1 AF .hibytes 0AFEEh +0010F2r 1 AF .hibytes 0AFEFh +0010F3r 1 AF .hibytes 0AFF0h +0010F4r 1 AF .hibytes 0AFF1h +0010F5r 1 AF .hibytes 0AFF2h +0010F6r 1 AF .hibytes 0AFF3h +0010F7r 1 AF .hibytes 0AFF4h +0010F8r 1 AF .hibytes 0AFF5h +0010F9r 1 AF .hibytes 0AFF6h +0010FAr 1 AF .hibytes 0AFF7h +0010FBr 1 AF .hibytes 0AFF8h +0010FCr 1 AF .hibytes 0AFF9h +0010FDr 1 AF .hibytes 0AFFAh +0010FEr 1 AF .hibytes 0AFFBh +0010FFr 1 AF .hibytes 0AFFCh +001100r 1 AF .hibytes 0AFFDh +001101r 1 AF .hibytes 0AFFEh +001102r 1 AF .hibytes 0AFFFh +001103r 1 B0 .hibytes 0B000h +001104r 1 B0 .hibytes 0B001h +001105r 1 B0 .hibytes 0B002h +001106r 1 B0 .hibytes 0B003h +001107r 1 B0 .hibytes 0B004h +001108r 1 B0 .hibytes 0B005h +001109r 1 B0 .hibytes 0B006h +00110Ar 1 B0 .hibytes 0B007h +00110Br 1 B0 .hibytes 0B008h +00110Cr 1 B0 .hibytes 0B009h +00110Dr 1 B0 .hibytes 0B00Ah +00110Er 1 B0 .hibytes 0B00Bh +00110Fr 1 B0 .hibytes 0B00Ch +001110r 1 B0 .hibytes 0B00Dh +001111r 1 B0 .hibytes 0B00Eh +001112r 1 B0 .hibytes 0B00Fh +001113r 1 BF .hibytes 0BFE1h +001114r 1 BF .hibytes 0BFE2h +001115r 1 BF .hibytes 0BFE3h +001116r 1 BF .hibytes 0BFE4h +001117r 1 BF .hibytes 0BFE5h +001118r 1 BF .hibytes 0BFE6h +001119r 1 BF .hibytes 0BFE7h +00111Ar 1 BF .hibytes 0BFE8h +00111Br 1 BF .hibytes 0BFE9h +00111Cr 1 BF .hibytes 0BFEAh +00111Dr 1 BF .hibytes 0BFEBh +00111Er 1 BF .hibytes 0BFECh +00111Fr 1 BF .hibytes 0BFEDh +001120r 1 BF .hibytes 0BFEEh +001121r 1 BF .hibytes 0BFEFh +001122r 1 BF .hibytes 0BFF0h +001123r 1 BF .hibytes 0BFF1h +001124r 1 BF .hibytes 0BFF2h +001125r 1 BF .hibytes 0BFF3h +001126r 1 BF .hibytes 0BFF4h +001127r 1 BF .hibytes 0BFF5h +001128r 1 BF .hibytes 0BFF6h +001129r 1 BF .hibytes 0BFF7h +00112Ar 1 BF .hibytes 0BFF8h +00112Br 1 BF .hibytes 0BFF9h +00112Cr 1 BF .hibytes 0BFFAh +00112Dr 1 BF .hibytes 0BFFBh +00112Er 1 BF .hibytes 0BFFCh +00112Fr 1 BF .hibytes 0BFFDh +001130r 1 BF .hibytes 0BFFEh +001131r 1 BF .hibytes 0BFFFh +001132r 1 C0 .hibytes 0C000h +001133r 1 C0 .hibytes 0C001h +001134r 1 C0 .hibytes 0C002h +001135r 1 C0 .hibytes 0C003h +001136r 1 C0 .hibytes 0C004h +001137r 1 C0 .hibytes 0C005h +001138r 1 C0 .hibytes 0C006h +001139r 1 C0 .hibytes 0C007h +00113Ar 1 C0 .hibytes 0C008h +00113Br 1 C0 .hibytes 0C009h +00113Cr 1 C0 .hibytes 0C00Ah +00113Dr 1 C0 .hibytes 0C00Bh +00113Er 1 C0 .hibytes 0C00Ch +00113Fr 1 C0 .hibytes 0C00Dh +001140r 1 C0 .hibytes 0C00Eh +001141r 1 C0 .hibytes 0C00Fh +001142r 1 CF .hibytes 0CFE1h +001143r 1 CF .hibytes 0CFE2h +001144r 1 CF .hibytes 0CFE3h +001145r 1 CF .hibytes 0CFE4h +001146r 1 CF .hibytes 0CFE5h +001147r 1 CF .hibytes 0CFE6h +001148r 1 CF .hibytes 0CFE7h +001149r 1 CF .hibytes 0CFE8h +00114Ar 1 CF .hibytes 0CFE9h +00114Br 1 CF .hibytes 0CFEAh +00114Cr 1 CF .hibytes 0CFEBh +00114Dr 1 CF .hibytes 0CFECh +00114Er 1 CF .hibytes 0CFEDh +00114Fr 1 CF .hibytes 0CFEEh +001150r 1 CF .hibytes 0CFEFh +001151r 1 CF .hibytes 0CFF0h +001152r 1 CF .hibytes 0CFF1h +001153r 1 CF .hibytes 0CFF2h +001154r 1 CF .hibytes 0CFF3h +001155r 1 CF .hibytes 0CFF4h +001156r 1 CF .hibytes 0CFF5h +001157r 1 CF .hibytes 0CFF6h +001158r 1 CF .hibytes 0CFF7h +001159r 1 CF .hibytes 0CFF8h +00115Ar 1 CF .hibytes 0CFF9h +00115Br 1 CF .hibytes 0CFFAh +00115Cr 1 CF .hibytes 0CFFBh +00115Dr 1 CF .hibytes 0CFFCh +00115Er 1 CF .hibytes 0CFFDh +00115Fr 1 CF .hibytes 0CFFEh +001160r 1 CF .hibytes 0CFFFh +001161r 1 D0 .hibytes 0D000h +001162r 1 D0 .hibytes 0D001h +001163r 1 D0 .hibytes 0D002h +001164r 1 D0 .hibytes 0D003h +001165r 1 D0 .hibytes 0D004h +001166r 1 D0 .hibytes 0D005h +001167r 1 D0 .hibytes 0D006h +001168r 1 D0 .hibytes 0D007h +001169r 1 D0 .hibytes 0D008h +00116Ar 1 D0 .hibytes 0D009h +00116Br 1 D0 .hibytes 0D00Ah +00116Cr 1 D0 .hibytes 0D00Bh +00116Dr 1 D0 .hibytes 0D00Ch +00116Er 1 D0 .hibytes 0D00Dh +00116Fr 1 D0 .hibytes 0D00Eh +001170r 1 D0 .hibytes 0D00Fh +001171r 1 DF .hibytes 0DFE1h +001172r 1 DF .hibytes 0DFE2h +001173r 1 DF .hibytes 0DFE3h +001174r 1 DF .hibytes 0DFE4h +001175r 1 DF .hibytes 0DFE5h +001176r 1 DF .hibytes 0DFE6h +001177r 1 DF .hibytes 0DFE7h +001178r 1 DF .hibytes 0DFE8h +001179r 1 DF .hibytes 0DFE9h +00117Ar 1 DF .hibytes 0DFEAh +00117Br 1 DF .hibytes 0DFEBh +00117Cr 1 DF .hibytes 0DFECh +00117Dr 1 DF .hibytes 0DFEDh +00117Er 1 DF .hibytes 0DFEEh +00117Fr 1 DF .hibytes 0DFEFh +001180r 1 DF .hibytes 0DFF0h +001181r 1 DF .hibytes 0DFF1h +001182r 1 DF .hibytes 0DFF2h +001183r 1 DF .hibytes 0DFF3h +001184r 1 DF .hibytes 0DFF4h +001185r 1 DF .hibytes 0DFF5h +001186r 1 DF .hibytes 0DFF6h +001187r 1 DF .hibytes 0DFF7h +001188r 1 DF .hibytes 0DFF8h +001189r 1 DF .hibytes 0DFF9h +00118Ar 1 DF .hibytes 0DFFAh +00118Br 1 DF .hibytes 0DFFBh +00118Cr 1 DF .hibytes 0DFFCh +00118Dr 1 DF .hibytes 0DFFDh +00118Er 1 DF .hibytes 0DFFEh +00118Fr 1 DF .hibytes 0DFFFh +001190r 1 E0 .hibytes 0E000h +001191r 1 E0 .hibytes 0E001h +001192r 1 E0 .hibytes 0E002h +001193r 1 E0 .hibytes 0E003h +001194r 1 E0 .hibytes 0E004h +001195r 1 E0 .hibytes 0E005h +001196r 1 E0 .hibytes 0E006h +001197r 1 E0 .hibytes 0E007h +001198r 1 E0 .hibytes 0E008h +001199r 1 E0 .hibytes 0E009h +00119Ar 1 E0 .hibytes 0E00Ah +00119Br 1 E0 .hibytes 0E00Bh +00119Cr 1 E0 .hibytes 0E00Ch +00119Dr 1 E0 .hibytes 0E00Dh +00119Er 1 E0 .hibytes 0E00Eh +00119Fr 1 E0 .hibytes 0E00Fh +0011A0r 1 EF .hibytes 0EFE1h +0011A1r 1 EF .hibytes 0EFE2h +0011A2r 1 EF .hibytes 0EFE3h +0011A3r 1 EF .hibytes 0EFE4h +0011A4r 1 EF .hibytes 0EFE5h +0011A5r 1 EF .hibytes 0EFE6h +0011A6r 1 EF .hibytes 0EFE7h +0011A7r 1 EF .hibytes 0EFE8h +0011A8r 1 EF .hibytes 0EFE9h +0011A9r 1 EF .hibytes 0EFEAh +0011AAr 1 EF .hibytes 0EFEBh +0011ABr 1 EF .hibytes 0EFECh +0011ACr 1 EF .hibytes 0EFEDh +0011ADr 1 EF .hibytes 0EFEEh +0011AEr 1 EF .hibytes 0EFEFh +0011AFr 1 EF .hibytes 0EFF0h +0011B0r 1 EF .hibytes 0EFF1h +0011B1r 1 EF .hibytes 0EFF2h +0011B2r 1 EF .hibytes 0EFF3h +0011B3r 1 EF .hibytes 0EFF4h +0011B4r 1 EF .hibytes 0EFF5h +0011B5r 1 EF .hibytes 0EFF6h +0011B6r 1 EF .hibytes 0EFF7h +0011B7r 1 EF .hibytes 0EFF8h +0011B8r 1 EF .hibytes 0EFF9h +0011B9r 1 EF .hibytes 0EFFAh +0011BAr 1 EF .hibytes 0EFFBh +0011BBr 1 EF .hibytes 0EFFCh +0011BCr 1 EF .hibytes 0EFFDh +0011BDr 1 EF .hibytes 0EFFEh +0011BEr 1 EF .hibytes 0EFFFh +0011BFr 1 F0 .hibytes 0F000h +0011C0r 1 F0 .hibytes 0F001h +0011C1r 1 F0 .hibytes 0F002h +0011C2r 1 F0 .hibytes 0F003h +0011C3r 1 F0 .hibytes 0F004h +0011C4r 1 F0 .hibytes 0F005h +0011C5r 1 F0 .hibytes 0F006h +0011C6r 1 F0 .hibytes 0F007h +0011C7r 1 F0 .hibytes 0F008h +0011C8r 1 F0 .hibytes 0F009h +0011C9r 1 F0 .hibytes 0F00Ah +0011CAr 1 F0 .hibytes 0F00Bh +0011CBr 1 F0 .hibytes 0F00Ch +0011CCr 1 F0 .hibytes 0F00Dh +0011CDr 1 F0 .hibytes 0F00Eh +0011CEr 1 F0 .hibytes 0F00Fh +0011CFr 1 FF .hibytes 0FFE1h +0011D0r 1 FF .hibytes 0FFE2h +0011D1r 1 FF .hibytes 0FFE3h +0011D2r 1 FF .hibytes 0FFE4h +0011D3r 1 FF .hibytes 0FFE5h +0011D4r 1 FF .hibytes 0FFE6h +0011D5r 1 FF .hibytes 0FFE7h +0011D6r 1 FF .hibytes 0FFE8h +0011D7r 1 FF .hibytes 0FFE9h +0011D8r 1 FF .hibytes 0FFEAh +0011D9r 1 FF .hibytes 0FFEBh +0011DAr 1 FF .hibytes 0FFECh +0011DBr 1 FF .hibytes 0FFEDh +0011DCr 1 FF .hibytes 0FFEEh +0011DDr 1 FF .hibytes 0FFEFh +0011DEr 1 FF .hibytes 0FFF0h +0011DFr 1 FF .hibytes 0FFF1h +0011E0r 1 FF .hibytes 0FFF2h +0011E1r 1 FF .hibytes 0FFF3h +0011E2r 1 FF .hibytes 0FFF4h +0011E3r 1 FF .hibytes 0FFF5h +0011E4r 1 FF .hibytes 0FFF6h +0011E5r 1 FF .hibytes 0FFF7h +0011E6r 1 FF .hibytes 0FFF8h +0011E7r 1 FF .hibytes 0FFF9h +0011E8r 1 FF .hibytes 0FFFAh +0011E9r 1 FF .hibytes 0FFFBh +0011EAr 1 FF .hibytes 0FFFCh +0011EBr 1 FF .hibytes 0FFFDh +0011ECr 1 FF .hibytes 0FFFEh +0011EDr 1 FF .hibytes 0FFFFh 0011EEr 1 -0011EEr 1 ; alternative hex values, always leading zero -0011EEr 1 00 .hibytes 00h -0011EFr 1 00 .hibytes 01h -0011F0r 1 00 .hibytes 02h -0011F1r 1 00 .hibytes 03h -0011F2r 1 00 .hibytes 04h -0011F3r 1 00 .hibytes 05h -0011F4r 1 00 .hibytes 06h -0011F5r 1 00 .hibytes 07h -0011F6r 1 00 .hibytes 08h -0011F7r 1 00 .hibytes 09h -0011F8r 1 00 .hibytes 0ah -0011F9r 1 00 .hibytes 0bh -0011FAr 1 00 .hibytes 0ch -0011FBr 1 00 .hibytes 0dh -0011FCr 1 00 .hibytes 0eh -0011FDr 1 00 .hibytes 0fh -0011FEr 1 00 .hibytes 010h -0011FFr 1 00 .hibytes 011h -001200r 1 00 .hibytes 012h -001201r 1 00 .hibytes 013h -001202r 1 00 .hibytes 070h -001203r 1 00 .hibytes 071h -001204r 1 00 .hibytes 072h -001205r 1 00 .hibytes 073h -001206r 1 00 .hibytes 074h -001207r 1 00 .hibytes 075h -001208r 1 00 .hibytes 076h -001209r 1 00 .hibytes 077h -00120Ar 1 00 .hibytes 078h -00120Br 1 00 .hibytes 079h -00120Cr 1 00 .hibytes 07ah -00120Dr 1 00 .hibytes 07bh -00120Er 1 00 .hibytes 07ch -00120Fr 1 00 .hibytes 07dh -001210r 1 00 .hibytes 07eh -001211r 1 00 .hibytes 07fh -001212r 1 00 .hibytes 080h -001213r 1 00 .hibytes 081h -001214r 1 00 .hibytes 082h -001215r 1 00 .hibytes 083h -001216r 1 00 .hibytes 084h -001217r 1 00 .hibytes 085h -001218r 1 00 .hibytes 086h -001219r 1 00 .hibytes 0f0h -00121Ar 1 00 .hibytes 0f1h -00121Br 1 00 .hibytes 0f2h -00121Cr 1 00 .hibytes 0f3h -00121Dr 1 00 .hibytes 0f4h -00121Er 1 00 .hibytes 0f5h -00121Fr 1 00 .hibytes 0f6h -001220r 1 00 .hibytes 0f7h -001221r 1 00 .hibytes 0f8h -001222r 1 00 .hibytes 0f9h -001223r 1 00 .hibytes 0fah -001224r 1 00 .hibytes 0fbh -001225r 1 00 .hibytes 0fch -001226r 1 00 .hibytes 0fdh -001227r 1 00 .hibytes 0feh -001228r 1 00 .hibytes 0ffh -001229r 1 01 .hibytes 0100h -00122Ar 1 01 .hibytes 0101h -00122Br 1 01 .hibytes 0102h -00122Cr 1 01 .hibytes 0103h -00122Dr 1 0F .hibytes 0fd2h -00122Er 1 0F .hibytes 0fd3h -00122Fr 1 0F .hibytes 0fd4h -001230r 1 0F .hibytes 0fd5h -001231r 1 0F .hibytes 0fd6h -001232r 1 0F .hibytes 0fd7h -001233r 1 0F .hibytes 0fd8h -001234r 1 0F .hibytes 0fd9h -001235r 1 0F .hibytes 0fdah -001236r 1 0F .hibytes 0fdbh -001237r 1 0F .hibytes 0fdch -001238r 1 0F .hibytes 0fddh -001239r 1 0F .hibytes 0fdeh -00123Ar 1 0F .hibytes 0fdfh -00123Br 1 0F .hibytes 0fe0h -00123Cr 1 0F .hibytes 0fe1h -00123Dr 1 0F .hibytes 0fe2h -00123Er 1 0F .hibytes 0fe3h -00123Fr 1 0F .hibytes 0fe4h -001240r 1 0F .hibytes 0fe5h -001241r 1 0F .hibytes 0fe6h -001242r 1 0F .hibytes 0fe7h -001243r 1 0F .hibytes 0fe8h -001244r 1 0F .hibytes 0fe9h -001245r 1 0F .hibytes 0feah -001246r 1 0F .hibytes 0febh -001247r 1 0F .hibytes 0fech -001248r 1 0F .hibytes 0fedh -001249r 1 0F .hibytes 0feeh -00124Ar 1 0F .hibytes 0fefh -00124Br 1 0F .hibytes 0ff0h -00124Cr 1 0F .hibytes 0ff1h -00124Dr 1 0F .hibytes 0ff2h -00124Er 1 0F .hibytes 0ff3h -00124Fr 1 0F .hibytes 0ff4h -001250r 1 0F .hibytes 0ff5h -001251r 1 0F .hibytes 0ff6h -001252r 1 0F .hibytes 0ff7h -001253r 1 0F .hibytes 0ff8h -001254r 1 0F .hibytes 0ff9h -001255r 1 0F .hibytes 0ffah -001256r 1 0F .hibytes 0ffbh -001257r 1 0F .hibytes 0ffch -001258r 1 0F .hibytes 0ffdh -001259r 1 0F .hibytes 0ffeh -00125Ar 1 0F .hibytes 0fffh -00125Br 1 10 .hibytes 01000h -00125Cr 1 10 .hibytes 01001h -00125Dr 1 10 .hibytes 01002h -00125Er 1 10 .hibytes 01003h -00125Fr 1 10 .hibytes 01004h -001260r 1 10 .hibytes 01005h -001261r 1 10 .hibytes 01006h -001262r 1 10 .hibytes 01007h -001263r 1 10 .hibytes 01008h -001264r 1 7F .hibytes 07ff0h -001265r 1 7F .hibytes 07ff1h -001266r 1 7F .hibytes 07ff2h -001267r 1 7F .hibytes 07ff3h -001268r 1 7F .hibytes 07ff4h -001269r 1 7F .hibytes 07ff5h -00126Ar 1 7F .hibytes 07ff6h -00126Br 1 7F .hibytes 07ff7h -00126Cr 1 7F .hibytes 07ff8h -00126Dr 1 7F .hibytes 07ff9h -00126Er 1 7F .hibytes 07ffah -00126Fr 1 7F .hibytes 07ffbh -001270r 1 7F .hibytes 07ffch -001271r 1 7F .hibytes 07ffdh -001272r 1 7F .hibytes 07ffeh -001273r 1 7F .hibytes 07fffh -001274r 1 80 .hibytes 08000h -001275r 1 80 .hibytes 08001h -001276r 1 80 .hibytes 08002h -001277r 1 80 .hibytes 08003h -001278r 1 80 .hibytes 08004h -001279r 1 80 .hibytes 08005h -00127Ar 1 80 .hibytes 08006h -00127Br 1 80 .hibytes 08007h -00127Cr 1 80 .hibytes 08008h -00127Dr 1 80 .hibytes 08009h -00127Er 1 80 .hibytes 0800ah -00127Fr 1 80 .hibytes 0800bh -001280r 1 9F .hibytes 09fe1h -001281r 1 9F .hibytes 09fe2h -001282r 1 9F .hibytes 09fe3h -001283r 1 9F .hibytes 09fe4h -001284r 1 9F .hibytes 09fe5h -001285r 1 9F .hibytes 09fe6h -001286r 1 9F .hibytes 09fe7h -001287r 1 9F .hibytes 09fe8h -001288r 1 9F .hibytes 09fe9h -001289r 1 9F .hibytes 09feah -00128Ar 1 9F .hibytes 09febh -00128Br 1 9F .hibytes 09fech -00128Cr 1 9F .hibytes 09fedh -00128Dr 1 9F .hibytes 09feeh -00128Er 1 9F .hibytes 09fefh -00128Fr 1 9F .hibytes 09ff0h -001290r 1 9F .hibytes 09ff1h -001291r 1 9F .hibytes 09ff2h -001292r 1 9F .hibytes 09ff3h -001293r 1 9F .hibytes 09ff4h -001294r 1 9F .hibytes 09ff5h -001295r 1 9F .hibytes 09ff6h -001296r 1 9F .hibytes 09ff7h -001297r 1 9F .hibytes 09ff8h -001298r 1 9F .hibytes 09ff9h -001299r 1 9F .hibytes 09ffah -00129Ar 1 9F .hibytes 09ffbh -00129Br 1 9F .hibytes 09ffch -00129Cr 1 9F .hibytes 09ffdh -00129Dr 1 9F .hibytes 09ffeh -00129Er 1 9F .hibytes 09fffh -00129Fr 1 A0 .hibytes 0a000h -0012A0r 1 A0 .hibytes 0a001h -0012A1r 1 A0 .hibytes 0a002h -0012A2r 1 A0 .hibytes 0a003h -0012A3r 1 A0 .hibytes 0a004h -0012A4r 1 A0 .hibytes 0a005h -0012A5r 1 A0 .hibytes 0a006h -0012A6r 1 A0 .hibytes 0a007h -0012A7r 1 A0 .hibytes 0a008h -0012A8r 1 A0 .hibytes 0a009h -0012A9r 1 A0 .hibytes 0a00ah -0012AAr 1 A0 .hibytes 0a00bh -0012ABr 1 A0 .hibytes 0a00ch -0012ACr 1 A0 .hibytes 0a00dh -0012ADr 1 A0 .hibytes 0a00eh -0012AEr 1 A0 .hibytes 0a00fh -0012AFr 1 AF .hibytes 0afe1h -0012B0r 1 AF .hibytes 0afe2h -0012B1r 1 AF .hibytes 0afe3h -0012B2r 1 AF .hibytes 0afe4h -0012B3r 1 AF .hibytes 0afe5h -0012B4r 1 AF .hibytes 0afe6h -0012B5r 1 AF .hibytes 0afe7h -0012B6r 1 AF .hibytes 0afe8h -0012B7r 1 AF .hibytes 0afe9h -0012B8r 1 AF .hibytes 0afeah -0012B9r 1 AF .hibytes 0afebh -0012BAr 1 AF .hibytes 0afech -0012BBr 1 AF .hibytes 0afedh -0012BCr 1 AF .hibytes 0afeeh -0012BDr 1 AF .hibytes 0afefh -0012BEr 1 AF .hibytes 0aff0h -0012BFr 1 AF .hibytes 0aff1h -0012C0r 1 AF .hibytes 0aff2h -0012C1r 1 AF .hibytes 0aff3h -0012C2r 1 AF .hibytes 0aff4h -0012C3r 1 AF .hibytes 0aff5h -0012C4r 1 AF .hibytes 0aff6h -0012C5r 1 AF .hibytes 0aff7h -0012C6r 1 AF .hibytes 0aff8h -0012C7r 1 AF .hibytes 0aff9h -0012C8r 1 AF .hibytes 0affah -0012C9r 1 AF .hibytes 0affbh -0012CAr 1 AF .hibytes 0affch -0012CBr 1 AF .hibytes 0affdh -0012CCr 1 AF .hibytes 0affeh -0012CDr 1 AF .hibytes 0afffh -0012CEr 1 B0 .hibytes 0b000h -0012CFr 1 B0 .hibytes 0b001h -0012D0r 1 B0 .hibytes 0b002h -0012D1r 1 B0 .hibytes 0b003h -0012D2r 1 B0 .hibytes 0b004h -0012D3r 1 B0 .hibytes 0b005h -0012D4r 1 B0 .hibytes 0b006h -0012D5r 1 B0 .hibytes 0b007h -0012D6r 1 B0 .hibytes 0b008h -0012D7r 1 B0 .hibytes 0b009h -0012D8r 1 B0 .hibytes 0b00ah -0012D9r 1 B0 .hibytes 0b00bh -0012DAr 1 B0 .hibytes 0b00ch -0012DBr 1 B0 .hibytes 0b00dh -0012DCr 1 B0 .hibytes 0b00eh -0012DDr 1 B0 .hibytes 0b00fh -0012DEr 1 BF .hibytes 0bfe1h -0012DFr 1 BF .hibytes 0bfe2h -0012E0r 1 BF .hibytes 0bfe3h -0012E1r 1 BF .hibytes 0bfe4h -0012E2r 1 BF .hibytes 0bfe5h -0012E3r 1 BF .hibytes 0bfe6h -0012E4r 1 BF .hibytes 0bfe7h -0012E5r 1 BF .hibytes 0bfe8h -0012E6r 1 BF .hibytes 0bfe9h -0012E7r 1 BF .hibytes 0bfeah -0012E8r 1 BF .hibytes 0bfebh -0012E9r 1 BF .hibytes 0bfech -0012EAr 1 BF .hibytes 0bfedh -0012EBr 1 BF .hibytes 0bfeeh -0012ECr 1 BF .hibytes 0bfefh -0012EDr 1 BF .hibytes 0bff0h -0012EEr 1 BF .hibytes 0bff1h -0012EFr 1 BF .hibytes 0bff2h -0012F0r 1 BF .hibytes 0bff3h -0012F1r 1 BF .hibytes 0bff4h -0012F2r 1 BF .hibytes 0bff5h -0012F3r 1 BF .hibytes 0bff6h -0012F4r 1 BF .hibytes 0bff7h -0012F5r 1 BF .hibytes 0bff8h -0012F6r 1 BF .hibytes 0bff9h -0012F7r 1 BF .hibytes 0bffah -0012F8r 1 BF .hibytes 0bffbh -0012F9r 1 BF .hibytes 0bffch -0012FAr 1 BF .hibytes 0bffdh -0012FBr 1 BF .hibytes 0bffeh -0012FCr 1 BF .hibytes 0bfffh -0012FDr 1 C0 .hibytes 0c000h -0012FEr 1 C0 .hibytes 0c001h -0012FFr 1 C0 .hibytes 0c002h -001300r 1 C0 .hibytes 0c003h -001301r 1 C0 .hibytes 0c004h -001302r 1 C0 .hibytes 0c005h -001303r 1 C0 .hibytes 0c006h -001304r 1 C0 .hibytes 0c007h -001305r 1 C0 .hibytes 0c008h -001306r 1 C0 .hibytes 0c009h -001307r 1 C0 .hibytes 0c00ah -001308r 1 C0 .hibytes 0c00bh -001309r 1 C0 .hibytes 0c00ch -00130Ar 1 C0 .hibytes 0c00dh -00130Br 1 C0 .hibytes 0c00eh -00130Cr 1 C0 .hibytes 0c00fh -00130Dr 1 CF .hibytes 0cfe1h -00130Er 1 CF .hibytes 0cfe2h -00130Fr 1 CF .hibytes 0cfe3h -001310r 1 CF .hibytes 0cfe4h -001311r 1 CF .hibytes 0cfe5h -001312r 1 CF .hibytes 0cfe6h -001313r 1 CF .hibytes 0cfe7h -001314r 1 CF .hibytes 0cfe8h -001315r 1 CF .hibytes 0cfe9h -001316r 1 CF .hibytes 0cfeah -001317r 1 CF .hibytes 0cfebh -001318r 1 CF .hibytes 0cfech -001319r 1 CF .hibytes 0cfedh -00131Ar 1 CF .hibytes 0cfeeh -00131Br 1 CF .hibytes 0cfefh -00131Cr 1 CF .hibytes 0cff0h -00131Dr 1 CF .hibytes 0cff1h -00131Er 1 CF .hibytes 0cff2h -00131Fr 1 CF .hibytes 0cff3h -001320r 1 CF .hibytes 0cff4h -001321r 1 CF .hibytes 0cff5h -001322r 1 CF .hibytes 0cff6h -001323r 1 CF .hibytes 0cff7h -001324r 1 CF .hibytes 0cff8h -001325r 1 CF .hibytes 0cff9h -001326r 1 CF .hibytes 0cffah -001327r 1 CF .hibytes 0cffbh -001328r 1 CF .hibytes 0cffch -001329r 1 CF .hibytes 0cffdh -00132Ar 1 CF .hibytes 0cffeh -00132Br 1 CF .hibytes 0cfffh -00132Cr 1 D0 .hibytes 0d000h -00132Dr 1 D0 .hibytes 0d001h -00132Er 1 D0 .hibytes 0d002h -00132Fr 1 D0 .hibytes 0d003h -001330r 1 D0 .hibytes 0d004h -001331r 1 D0 .hibytes 0d005h -001332r 1 D0 .hibytes 0d006h -001333r 1 D0 .hibytes 0d007h -001334r 1 D0 .hibytes 0d008h -001335r 1 D0 .hibytes 0d009h -001336r 1 D0 .hibytes 0d00ah -001337r 1 D0 .hibytes 0d00bh -001338r 1 D0 .hibytes 0d00ch -001339r 1 D0 .hibytes 0d00dh -00133Ar 1 D0 .hibytes 0d00eh -00133Br 1 D0 .hibytes 0d00fh -00133Cr 1 DF .hibytes 0dfe1h -00133Dr 1 DF .hibytes 0dfe2h -00133Er 1 DF .hibytes 0dfe3h -00133Fr 1 DF .hibytes 0dfe4h -001340r 1 DF .hibytes 0dfe5h -001341r 1 DF .hibytes 0dfe6h -001342r 1 DF .hibytes 0dfe7h -001343r 1 DF .hibytes 0dfe8h -001344r 1 DF .hibytes 0dfe9h -001345r 1 DF .hibytes 0dfeah -001346r 1 DF .hibytes 0dfebh -001347r 1 DF .hibytes 0dfech -001348r 1 DF .hibytes 0dfedh -001349r 1 DF .hibytes 0dfeeh -00134Ar 1 DF .hibytes 0dfefh -00134Br 1 DF .hibytes 0dff0h -00134Cr 1 DF .hibytes 0dff1h -00134Dr 1 DF .hibytes 0dff2h -00134Er 1 DF .hibytes 0dff3h -00134Fr 1 DF .hibytes 0dff4h -001350r 1 DF .hibytes 0dff5h -001351r 1 DF .hibytes 0dff6h -001352r 1 DF .hibytes 0dff7h -001353r 1 DF .hibytes 0dff8h -001354r 1 DF .hibytes 0dff9h -001355r 1 DF .hibytes 0dffah -001356r 1 DF .hibytes 0dffbh -001357r 1 DF .hibytes 0dffch -001358r 1 DF .hibytes 0dffdh -001359r 1 DF .hibytes 0dffeh -00135Ar 1 DF .hibytes 0dfffh -00135Br 1 E0 .hibytes 0e000h -00135Cr 1 E0 .hibytes 0e001h -00135Dr 1 E0 .hibytes 0e002h -00135Er 1 E0 .hibytes 0e003h -00135Fr 1 E0 .hibytes 0e004h -001360r 1 E0 .hibytes 0e005h -001361r 1 E0 .hibytes 0e006h -001362r 1 E0 .hibytes 0e007h -001363r 1 E0 .hibytes 0e008h -001364r 1 E0 .hibytes 0e009h -001365r 1 E0 .hibytes 0e00ah -001366r 1 E0 .hibytes 0e00bh -001367r 1 E0 .hibytes 0e00ch -001368r 1 E0 .hibytes 0e00dh -001369r 1 E0 .hibytes 0e00eh -00136Ar 1 E0 .hibytes 0e00fh -00136Br 1 EF .hibytes 0efe1h -00136Cr 1 EF .hibytes 0efe2h -00136Dr 1 EF .hibytes 0efe3h -00136Er 1 EF .hibytes 0efe4h -00136Fr 1 EF .hibytes 0efe5h -001370r 1 EF .hibytes 0efe6h -001371r 1 EF .hibytes 0efe7h -001372r 1 EF .hibytes 0efe8h -001373r 1 EF .hibytes 0efe9h -001374r 1 EF .hibytes 0efeah -001375r 1 EF .hibytes 0efebh -001376r 1 EF .hibytes 0efech -001377r 1 EF .hibytes 0efedh -001378r 1 EF .hibytes 0efeeh -001379r 1 EF .hibytes 0efefh -00137Ar 1 EF .hibytes 0eff0h -00137Br 1 EF .hibytes 0eff1h -00137Cr 1 EF .hibytes 0eff2h -00137Dr 1 EF .hibytes 0eff3h -00137Er 1 EF .hibytes 0eff4h -00137Fr 1 EF .hibytes 0eff5h -001380r 1 EF .hibytes 0eff6h -001381r 1 EF .hibytes 0eff7h -001382r 1 EF .hibytes 0eff8h -001383r 1 EF .hibytes 0eff9h -001384r 1 EF .hibytes 0effah -001385r 1 EF .hibytes 0effbh -001386r 1 EF .hibytes 0effch -001387r 1 EF .hibytes 0effdh -001388r 1 EF .hibytes 0effeh -001389r 1 EF .hibytes 0efffh -00138Ar 1 F0 .hibytes 0f000h -00138Br 1 F0 .hibytes 0f001h -00138Cr 1 F0 .hibytes 0f002h -00138Dr 1 F0 .hibytes 0f003h -00138Er 1 F0 .hibytes 0f004h -00138Fr 1 F0 .hibytes 0f005h -001390r 1 F0 .hibytes 0f006h -001391r 1 F0 .hibytes 0f007h -001392r 1 F0 .hibytes 0f008h -001393r 1 F0 .hibytes 0f009h -001394r 1 F0 .hibytes 0f00ah -001395r 1 F0 .hibytes 0f00bh -001396r 1 F0 .hibytes 0f00ch -001397r 1 F0 .hibytes 0f00dh -001398r 1 F0 .hibytes 0f00eh -001399r 1 F0 .hibytes 0f00fh -00139Ar 1 FF .hibytes 0ffe1h -00139Br 1 FF .hibytes 0ffe2h -00139Cr 1 FF .hibytes 0ffe3h -00139Dr 1 FF .hibytes 0ffe4h -00139Er 1 FF .hibytes 0ffe5h -00139Fr 1 FF .hibytes 0ffe6h -0013A0r 1 FF .hibytes 0ffe7h -0013A1r 1 FF .hibytes 0ffe8h -0013A2r 1 FF .hibytes 0ffe9h -0013A3r 1 FF .hibytes 0ffeah -0013A4r 1 FF .hibytes 0ffebh -0013A5r 1 FF .hibytes 0ffech -0013A6r 1 FF .hibytes 0ffedh -0013A7r 1 FF .hibytes 0ffeeh -0013A8r 1 FF .hibytes 0ffefh -0013A9r 1 FF .hibytes 0fff0h -0013AAr 1 FF .hibytes 0fff1h -0013ABr 1 FF .hibytes 0fff2h -0013ACr 1 FF .hibytes 0fff3h -0013ADr 1 FF .hibytes 0fff4h -0013AEr 1 FF .hibytes 0fff5h -0013AFr 1 FF .hibytes 0fff6h -0013B0r 1 FF .hibytes 0fff7h -0013B1r 1 FF .hibytes 0fff8h -0013B2r 1 FF .hibytes 0fff9h -0013B3r 1 FF .hibytes 0fffah -0013B4r 1 FF .hibytes 0fffbh -0013B5r 1 FF .hibytes 0fffch -0013B6r 1 FF .hibytes 0fffdh -0013B7r 1 FF .hibytes 0fffeh -0013B8r 1 FF .hibytes 0ffffh +0011EEr 1 ; alternative hex values, always leading zero +0011EEr 1 00 .hibytes 00h +0011EFr 1 00 .hibytes 01h +0011F0r 1 00 .hibytes 02h +0011F1r 1 00 .hibytes 03h +0011F2r 1 00 .hibytes 04h +0011F3r 1 00 .hibytes 05h +0011F4r 1 00 .hibytes 06h +0011F5r 1 00 .hibytes 07h +0011F6r 1 00 .hibytes 08h +0011F7r 1 00 .hibytes 09h +0011F8r 1 00 .hibytes 0ah +0011F9r 1 00 .hibytes 0bh +0011FAr 1 00 .hibytes 0ch +0011FBr 1 00 .hibytes 0dh +0011FCr 1 00 .hibytes 0eh +0011FDr 1 00 .hibytes 0fh +0011FEr 1 00 .hibytes 010h +0011FFr 1 00 .hibytes 011h +001200r 1 00 .hibytes 012h +001201r 1 00 .hibytes 013h +001202r 1 00 .hibytes 070h +001203r 1 00 .hibytes 071h +001204r 1 00 .hibytes 072h +001205r 1 00 .hibytes 073h +001206r 1 00 .hibytes 074h +001207r 1 00 .hibytes 075h +001208r 1 00 .hibytes 076h +001209r 1 00 .hibytes 077h +00120Ar 1 00 .hibytes 078h +00120Br 1 00 .hibytes 079h +00120Cr 1 00 .hibytes 07ah +00120Dr 1 00 .hibytes 07bh +00120Er 1 00 .hibytes 07ch +00120Fr 1 00 .hibytes 07dh +001210r 1 00 .hibytes 07eh +001211r 1 00 .hibytes 07fh +001212r 1 00 .hibytes 080h +001213r 1 00 .hibytes 081h +001214r 1 00 .hibytes 082h +001215r 1 00 .hibytes 083h +001216r 1 00 .hibytes 084h +001217r 1 00 .hibytes 085h +001218r 1 00 .hibytes 086h +001219r 1 00 .hibytes 0f0h +00121Ar 1 00 .hibytes 0f1h +00121Br 1 00 .hibytes 0f2h +00121Cr 1 00 .hibytes 0f3h +00121Dr 1 00 .hibytes 0f4h +00121Er 1 00 .hibytes 0f5h +00121Fr 1 00 .hibytes 0f6h +001220r 1 00 .hibytes 0f7h +001221r 1 00 .hibytes 0f8h +001222r 1 00 .hibytes 0f9h +001223r 1 00 .hibytes 0fah +001224r 1 00 .hibytes 0fbh +001225r 1 00 .hibytes 0fch +001226r 1 00 .hibytes 0fdh +001227r 1 00 .hibytes 0feh +001228r 1 00 .hibytes 0ffh +001229r 1 01 .hibytes 0100h +00122Ar 1 01 .hibytes 0101h +00122Br 1 01 .hibytes 0102h +00122Cr 1 01 .hibytes 0103h +00122Dr 1 0F .hibytes 0fd2h +00122Er 1 0F .hibytes 0fd3h +00122Fr 1 0F .hibytes 0fd4h +001230r 1 0F .hibytes 0fd5h +001231r 1 0F .hibytes 0fd6h +001232r 1 0F .hibytes 0fd7h +001233r 1 0F .hibytes 0fd8h +001234r 1 0F .hibytes 0fd9h +001235r 1 0F .hibytes 0fdah +001236r 1 0F .hibytes 0fdbh +001237r 1 0F .hibytes 0fdch +001238r 1 0F .hibytes 0fddh +001239r 1 0F .hibytes 0fdeh +00123Ar 1 0F .hibytes 0fdfh +00123Br 1 0F .hibytes 0fe0h +00123Cr 1 0F .hibytes 0fe1h +00123Dr 1 0F .hibytes 0fe2h +00123Er 1 0F .hibytes 0fe3h +00123Fr 1 0F .hibytes 0fe4h +001240r 1 0F .hibytes 0fe5h +001241r 1 0F .hibytes 0fe6h +001242r 1 0F .hibytes 0fe7h +001243r 1 0F .hibytes 0fe8h +001244r 1 0F .hibytes 0fe9h +001245r 1 0F .hibytes 0feah +001246r 1 0F .hibytes 0febh +001247r 1 0F .hibytes 0fech +001248r 1 0F .hibytes 0fedh +001249r 1 0F .hibytes 0feeh +00124Ar 1 0F .hibytes 0fefh +00124Br 1 0F .hibytes 0ff0h +00124Cr 1 0F .hibytes 0ff1h +00124Dr 1 0F .hibytes 0ff2h +00124Er 1 0F .hibytes 0ff3h +00124Fr 1 0F .hibytes 0ff4h +001250r 1 0F .hibytes 0ff5h +001251r 1 0F .hibytes 0ff6h +001252r 1 0F .hibytes 0ff7h +001253r 1 0F .hibytes 0ff8h +001254r 1 0F .hibytes 0ff9h +001255r 1 0F .hibytes 0ffah +001256r 1 0F .hibytes 0ffbh +001257r 1 0F .hibytes 0ffch +001258r 1 0F .hibytes 0ffdh +001259r 1 0F .hibytes 0ffeh +00125Ar 1 0F .hibytes 0fffh +00125Br 1 10 .hibytes 01000h +00125Cr 1 10 .hibytes 01001h +00125Dr 1 10 .hibytes 01002h +00125Er 1 10 .hibytes 01003h +00125Fr 1 10 .hibytes 01004h +001260r 1 10 .hibytes 01005h +001261r 1 10 .hibytes 01006h +001262r 1 10 .hibytes 01007h +001263r 1 10 .hibytes 01008h +001264r 1 7F .hibytes 07ff0h +001265r 1 7F .hibytes 07ff1h +001266r 1 7F .hibytes 07ff2h +001267r 1 7F .hibytes 07ff3h +001268r 1 7F .hibytes 07ff4h +001269r 1 7F .hibytes 07ff5h +00126Ar 1 7F .hibytes 07ff6h +00126Br 1 7F .hibytes 07ff7h +00126Cr 1 7F .hibytes 07ff8h +00126Dr 1 7F .hibytes 07ff9h +00126Er 1 7F .hibytes 07ffah +00126Fr 1 7F .hibytes 07ffbh +001270r 1 7F .hibytes 07ffch +001271r 1 7F .hibytes 07ffdh +001272r 1 7F .hibytes 07ffeh +001273r 1 7F .hibytes 07fffh +001274r 1 80 .hibytes 08000h +001275r 1 80 .hibytes 08001h +001276r 1 80 .hibytes 08002h +001277r 1 80 .hibytes 08003h +001278r 1 80 .hibytes 08004h +001279r 1 80 .hibytes 08005h +00127Ar 1 80 .hibytes 08006h +00127Br 1 80 .hibytes 08007h +00127Cr 1 80 .hibytes 08008h +00127Dr 1 80 .hibytes 08009h +00127Er 1 80 .hibytes 0800ah +00127Fr 1 80 .hibytes 0800bh +001280r 1 9F .hibytes 09fe1h +001281r 1 9F .hibytes 09fe2h +001282r 1 9F .hibytes 09fe3h +001283r 1 9F .hibytes 09fe4h +001284r 1 9F .hibytes 09fe5h +001285r 1 9F .hibytes 09fe6h +001286r 1 9F .hibytes 09fe7h +001287r 1 9F .hibytes 09fe8h +001288r 1 9F .hibytes 09fe9h +001289r 1 9F .hibytes 09feah +00128Ar 1 9F .hibytes 09febh +00128Br 1 9F .hibytes 09fech +00128Cr 1 9F .hibytes 09fedh +00128Dr 1 9F .hibytes 09feeh +00128Er 1 9F .hibytes 09fefh +00128Fr 1 9F .hibytes 09ff0h +001290r 1 9F .hibytes 09ff1h +001291r 1 9F .hibytes 09ff2h +001292r 1 9F .hibytes 09ff3h +001293r 1 9F .hibytes 09ff4h +001294r 1 9F .hibytes 09ff5h +001295r 1 9F .hibytes 09ff6h +001296r 1 9F .hibytes 09ff7h +001297r 1 9F .hibytes 09ff8h +001298r 1 9F .hibytes 09ff9h +001299r 1 9F .hibytes 09ffah +00129Ar 1 9F .hibytes 09ffbh +00129Br 1 9F .hibytes 09ffch +00129Cr 1 9F .hibytes 09ffdh +00129Dr 1 9F .hibytes 09ffeh +00129Er 1 9F .hibytes 09fffh +00129Fr 1 A0 .hibytes 0a000h +0012A0r 1 A0 .hibytes 0a001h +0012A1r 1 A0 .hibytes 0a002h +0012A2r 1 A0 .hibytes 0a003h +0012A3r 1 A0 .hibytes 0a004h +0012A4r 1 A0 .hibytes 0a005h +0012A5r 1 A0 .hibytes 0a006h +0012A6r 1 A0 .hibytes 0a007h +0012A7r 1 A0 .hibytes 0a008h +0012A8r 1 A0 .hibytes 0a009h +0012A9r 1 A0 .hibytes 0a00ah +0012AAr 1 A0 .hibytes 0a00bh +0012ABr 1 A0 .hibytes 0a00ch +0012ACr 1 A0 .hibytes 0a00dh +0012ADr 1 A0 .hibytes 0a00eh +0012AEr 1 A0 .hibytes 0a00fh +0012AFr 1 AF .hibytes 0afe1h +0012B0r 1 AF .hibytes 0afe2h +0012B1r 1 AF .hibytes 0afe3h +0012B2r 1 AF .hibytes 0afe4h +0012B3r 1 AF .hibytes 0afe5h +0012B4r 1 AF .hibytes 0afe6h +0012B5r 1 AF .hibytes 0afe7h +0012B6r 1 AF .hibytes 0afe8h +0012B7r 1 AF .hibytes 0afe9h +0012B8r 1 AF .hibytes 0afeah +0012B9r 1 AF .hibytes 0afebh +0012BAr 1 AF .hibytes 0afech +0012BBr 1 AF .hibytes 0afedh +0012BCr 1 AF .hibytes 0afeeh +0012BDr 1 AF .hibytes 0afefh +0012BEr 1 AF .hibytes 0aff0h +0012BFr 1 AF .hibytes 0aff1h +0012C0r 1 AF .hibytes 0aff2h +0012C1r 1 AF .hibytes 0aff3h +0012C2r 1 AF .hibytes 0aff4h +0012C3r 1 AF .hibytes 0aff5h +0012C4r 1 AF .hibytes 0aff6h +0012C5r 1 AF .hibytes 0aff7h +0012C6r 1 AF .hibytes 0aff8h +0012C7r 1 AF .hibytes 0aff9h +0012C8r 1 AF .hibytes 0affah +0012C9r 1 AF .hibytes 0affbh +0012CAr 1 AF .hibytes 0affch +0012CBr 1 AF .hibytes 0affdh +0012CCr 1 AF .hibytes 0affeh +0012CDr 1 AF .hibytes 0afffh +0012CEr 1 B0 .hibytes 0b000h +0012CFr 1 B0 .hibytes 0b001h +0012D0r 1 B0 .hibytes 0b002h +0012D1r 1 B0 .hibytes 0b003h +0012D2r 1 B0 .hibytes 0b004h +0012D3r 1 B0 .hibytes 0b005h +0012D4r 1 B0 .hibytes 0b006h +0012D5r 1 B0 .hibytes 0b007h +0012D6r 1 B0 .hibytes 0b008h +0012D7r 1 B0 .hibytes 0b009h +0012D8r 1 B0 .hibytes 0b00ah +0012D9r 1 B0 .hibytes 0b00bh +0012DAr 1 B0 .hibytes 0b00ch +0012DBr 1 B0 .hibytes 0b00dh +0012DCr 1 B0 .hibytes 0b00eh +0012DDr 1 B0 .hibytes 0b00fh +0012DEr 1 BF .hibytes 0bfe1h +0012DFr 1 BF .hibytes 0bfe2h +0012E0r 1 BF .hibytes 0bfe3h +0012E1r 1 BF .hibytes 0bfe4h +0012E2r 1 BF .hibytes 0bfe5h +0012E3r 1 BF .hibytes 0bfe6h +0012E4r 1 BF .hibytes 0bfe7h +0012E5r 1 BF .hibytes 0bfe8h +0012E6r 1 BF .hibytes 0bfe9h +0012E7r 1 BF .hibytes 0bfeah +0012E8r 1 BF .hibytes 0bfebh +0012E9r 1 BF .hibytes 0bfech +0012EAr 1 BF .hibytes 0bfedh +0012EBr 1 BF .hibytes 0bfeeh +0012ECr 1 BF .hibytes 0bfefh +0012EDr 1 BF .hibytes 0bff0h +0012EEr 1 BF .hibytes 0bff1h +0012EFr 1 BF .hibytes 0bff2h +0012F0r 1 BF .hibytes 0bff3h +0012F1r 1 BF .hibytes 0bff4h +0012F2r 1 BF .hibytes 0bff5h +0012F3r 1 BF .hibytes 0bff6h +0012F4r 1 BF .hibytes 0bff7h +0012F5r 1 BF .hibytes 0bff8h +0012F6r 1 BF .hibytes 0bff9h +0012F7r 1 BF .hibytes 0bffah +0012F8r 1 BF .hibytes 0bffbh +0012F9r 1 BF .hibytes 0bffch +0012FAr 1 BF .hibytes 0bffdh +0012FBr 1 BF .hibytes 0bffeh +0012FCr 1 BF .hibytes 0bfffh +0012FDr 1 C0 .hibytes 0c000h +0012FEr 1 C0 .hibytes 0c001h +0012FFr 1 C0 .hibytes 0c002h +001300r 1 C0 .hibytes 0c003h +001301r 1 C0 .hibytes 0c004h +001302r 1 C0 .hibytes 0c005h +001303r 1 C0 .hibytes 0c006h +001304r 1 C0 .hibytes 0c007h +001305r 1 C0 .hibytes 0c008h +001306r 1 C0 .hibytes 0c009h +001307r 1 C0 .hibytes 0c00ah +001308r 1 C0 .hibytes 0c00bh +001309r 1 C0 .hibytes 0c00ch +00130Ar 1 C0 .hibytes 0c00dh +00130Br 1 C0 .hibytes 0c00eh +00130Cr 1 C0 .hibytes 0c00fh +00130Dr 1 CF .hibytes 0cfe1h +00130Er 1 CF .hibytes 0cfe2h +00130Fr 1 CF .hibytes 0cfe3h +001310r 1 CF .hibytes 0cfe4h +001311r 1 CF .hibytes 0cfe5h +001312r 1 CF .hibytes 0cfe6h +001313r 1 CF .hibytes 0cfe7h +001314r 1 CF .hibytes 0cfe8h +001315r 1 CF .hibytes 0cfe9h +001316r 1 CF .hibytes 0cfeah +001317r 1 CF .hibytes 0cfebh +001318r 1 CF .hibytes 0cfech +001319r 1 CF .hibytes 0cfedh +00131Ar 1 CF .hibytes 0cfeeh +00131Br 1 CF .hibytes 0cfefh +00131Cr 1 CF .hibytes 0cff0h +00131Dr 1 CF .hibytes 0cff1h +00131Er 1 CF .hibytes 0cff2h +00131Fr 1 CF .hibytes 0cff3h +001320r 1 CF .hibytes 0cff4h +001321r 1 CF .hibytes 0cff5h +001322r 1 CF .hibytes 0cff6h +001323r 1 CF .hibytes 0cff7h +001324r 1 CF .hibytes 0cff8h +001325r 1 CF .hibytes 0cff9h +001326r 1 CF .hibytes 0cffah +001327r 1 CF .hibytes 0cffbh +001328r 1 CF .hibytes 0cffch +001329r 1 CF .hibytes 0cffdh +00132Ar 1 CF .hibytes 0cffeh +00132Br 1 CF .hibytes 0cfffh +00132Cr 1 D0 .hibytes 0d000h +00132Dr 1 D0 .hibytes 0d001h +00132Er 1 D0 .hibytes 0d002h +00132Fr 1 D0 .hibytes 0d003h +001330r 1 D0 .hibytes 0d004h +001331r 1 D0 .hibytes 0d005h +001332r 1 D0 .hibytes 0d006h +001333r 1 D0 .hibytes 0d007h +001334r 1 D0 .hibytes 0d008h +001335r 1 D0 .hibytes 0d009h +001336r 1 D0 .hibytes 0d00ah +001337r 1 D0 .hibytes 0d00bh +001338r 1 D0 .hibytes 0d00ch +001339r 1 D0 .hibytes 0d00dh +00133Ar 1 D0 .hibytes 0d00eh +00133Br 1 D0 .hibytes 0d00fh +00133Cr 1 DF .hibytes 0dfe1h +00133Dr 1 DF .hibytes 0dfe2h +00133Er 1 DF .hibytes 0dfe3h +00133Fr 1 DF .hibytes 0dfe4h +001340r 1 DF .hibytes 0dfe5h +001341r 1 DF .hibytes 0dfe6h +001342r 1 DF .hibytes 0dfe7h +001343r 1 DF .hibytes 0dfe8h +001344r 1 DF .hibytes 0dfe9h +001345r 1 DF .hibytes 0dfeah +001346r 1 DF .hibytes 0dfebh +001347r 1 DF .hibytes 0dfech +001348r 1 DF .hibytes 0dfedh +001349r 1 DF .hibytes 0dfeeh +00134Ar 1 DF .hibytes 0dfefh +00134Br 1 DF .hibytes 0dff0h +00134Cr 1 DF .hibytes 0dff1h +00134Dr 1 DF .hibytes 0dff2h +00134Er 1 DF .hibytes 0dff3h +00134Fr 1 DF .hibytes 0dff4h +001350r 1 DF .hibytes 0dff5h +001351r 1 DF .hibytes 0dff6h +001352r 1 DF .hibytes 0dff7h +001353r 1 DF .hibytes 0dff8h +001354r 1 DF .hibytes 0dff9h +001355r 1 DF .hibytes 0dffah +001356r 1 DF .hibytes 0dffbh +001357r 1 DF .hibytes 0dffch +001358r 1 DF .hibytes 0dffdh +001359r 1 DF .hibytes 0dffeh +00135Ar 1 DF .hibytes 0dfffh +00135Br 1 E0 .hibytes 0e000h +00135Cr 1 E0 .hibytes 0e001h +00135Dr 1 E0 .hibytes 0e002h +00135Er 1 E0 .hibytes 0e003h +00135Fr 1 E0 .hibytes 0e004h +001360r 1 E0 .hibytes 0e005h +001361r 1 E0 .hibytes 0e006h +001362r 1 E0 .hibytes 0e007h +001363r 1 E0 .hibytes 0e008h +001364r 1 E0 .hibytes 0e009h +001365r 1 E0 .hibytes 0e00ah +001366r 1 E0 .hibytes 0e00bh +001367r 1 E0 .hibytes 0e00ch +001368r 1 E0 .hibytes 0e00dh +001369r 1 E0 .hibytes 0e00eh +00136Ar 1 E0 .hibytes 0e00fh +00136Br 1 EF .hibytes 0efe1h +00136Cr 1 EF .hibytes 0efe2h +00136Dr 1 EF .hibytes 0efe3h +00136Er 1 EF .hibytes 0efe4h +00136Fr 1 EF .hibytes 0efe5h +001370r 1 EF .hibytes 0efe6h +001371r 1 EF .hibytes 0efe7h +001372r 1 EF .hibytes 0efe8h +001373r 1 EF .hibytes 0efe9h +001374r 1 EF .hibytes 0efeah +001375r 1 EF .hibytes 0efebh +001376r 1 EF .hibytes 0efech +001377r 1 EF .hibytes 0efedh +001378r 1 EF .hibytes 0efeeh +001379r 1 EF .hibytes 0efefh +00137Ar 1 EF .hibytes 0eff0h +00137Br 1 EF .hibytes 0eff1h +00137Cr 1 EF .hibytes 0eff2h +00137Dr 1 EF .hibytes 0eff3h +00137Er 1 EF .hibytes 0eff4h +00137Fr 1 EF .hibytes 0eff5h +001380r 1 EF .hibytes 0eff6h +001381r 1 EF .hibytes 0eff7h +001382r 1 EF .hibytes 0eff8h +001383r 1 EF .hibytes 0eff9h +001384r 1 EF .hibytes 0effah +001385r 1 EF .hibytes 0effbh +001386r 1 EF .hibytes 0effch +001387r 1 EF .hibytes 0effdh +001388r 1 EF .hibytes 0effeh +001389r 1 EF .hibytes 0efffh +00138Ar 1 F0 .hibytes 0f000h +00138Br 1 F0 .hibytes 0f001h +00138Cr 1 F0 .hibytes 0f002h +00138Dr 1 F0 .hibytes 0f003h +00138Er 1 F0 .hibytes 0f004h +00138Fr 1 F0 .hibytes 0f005h +001390r 1 F0 .hibytes 0f006h +001391r 1 F0 .hibytes 0f007h +001392r 1 F0 .hibytes 0f008h +001393r 1 F0 .hibytes 0f009h +001394r 1 F0 .hibytes 0f00ah +001395r 1 F0 .hibytes 0f00bh +001396r 1 F0 .hibytes 0f00ch +001397r 1 F0 .hibytes 0f00dh +001398r 1 F0 .hibytes 0f00eh +001399r 1 F0 .hibytes 0f00fh +00139Ar 1 FF .hibytes 0ffe1h +00139Br 1 FF .hibytes 0ffe2h +00139Cr 1 FF .hibytes 0ffe3h +00139Dr 1 FF .hibytes 0ffe4h +00139Er 1 FF .hibytes 0ffe5h +00139Fr 1 FF .hibytes 0ffe6h +0013A0r 1 FF .hibytes 0ffe7h +0013A1r 1 FF .hibytes 0ffe8h +0013A2r 1 FF .hibytes 0ffe9h +0013A3r 1 FF .hibytes 0ffeah +0013A4r 1 FF .hibytes 0ffebh +0013A5r 1 FF .hibytes 0ffech +0013A6r 1 FF .hibytes 0ffedh +0013A7r 1 FF .hibytes 0ffeeh +0013A8r 1 FF .hibytes 0ffefh +0013A9r 1 FF .hibytes 0fff0h +0013AAr 1 FF .hibytes 0fff1h +0013ABr 1 FF .hibytes 0fff2h +0013ACr 1 FF .hibytes 0fff3h +0013ADr 1 FF .hibytes 0fff4h +0013AEr 1 FF .hibytes 0fff5h +0013AFr 1 FF .hibytes 0fff6h +0013B0r 1 FF .hibytes 0fff7h +0013B1r 1 FF .hibytes 0fff8h +0013B2r 1 FF .hibytes 0fff9h +0013B3r 1 FF .hibytes 0fffah +0013B4r 1 FF .hibytes 0fffbh +0013B5r 1 FF .hibytes 0fffch +0013B6r 1 FF .hibytes 0fffdh +0013B7r 1 FF .hibytes 0fffeh +0013B8r 1 FF .hibytes 0ffffh 0013B9r 1 -0013B9r 1 ; binary values, variable length -0013B9r 1 00 .hibytes %0 -0013BAr 1 00 .hibytes %01 -0013BBr 1 00 .hibytes %010 -0013BCr 1 00 .hibytes %011 -0013BDr 1 00 .hibytes %0100 -0013BEr 1 00 .hibytes %0101 -0013BFr 1 00 .hibytes %0110 -0013C0r 1 00 .hibytes %0111 -0013C1r 1 00 .hibytes %01000 -0013C2r 1 00 .hibytes %01001 -0013C3r 1 00 .hibytes %01010 -0013C4r 1 00 .hibytes %01011 -0013C5r 1 00 .hibytes %01100 -0013C6r 1 00 .hibytes %01101 -0013C7r 1 00 .hibytes %01110 -0013C8r 1 00 .hibytes %01111 -0013C9r 1 00 .hibytes %010000 -0013CAr 1 00 .hibytes %010001 -0013CBr 1 00 .hibytes %010010 -0013CCr 1 00 .hibytes %010011 -0013CDr 1 00 .hibytes %01110000 -0013CEr 1 00 .hibytes %01110001 -0013CFr 1 00 .hibytes %01110010 -0013D0r 1 00 .hibytes %01110011 -0013D1r 1 00 .hibytes %01110100 -0013D2r 1 00 .hibytes %01110101 -0013D3r 1 00 .hibytes %01110110 -0013D4r 1 00 .hibytes %01110111 -0013D5r 1 00 .hibytes %01111000 -0013D6r 1 00 .hibytes %01111001 -0013D7r 1 00 .hibytes %01111010 -0013D8r 1 00 .hibytes %01111011 -0013D9r 1 00 .hibytes %01111100 -0013DAr 1 00 .hibytes %01111101 -0013DBr 1 00 .hibytes %01111110 -0013DCr 1 00 .hibytes %01111111 -0013DDr 1 00 .hibytes %010000000 -0013DEr 1 00 .hibytes %010000001 -0013DFr 1 00 .hibytes %010000010 -0013E0r 1 00 .hibytes %010000011 -0013E1r 1 00 .hibytes %010000100 -0013E2r 1 00 .hibytes %010000101 -0013E3r 1 00 .hibytes %010000110 -0013E4r 1 00 .hibytes %011110000 -0013E5r 1 00 .hibytes %011110001 -0013E6r 1 00 .hibytes %011110010 -0013E7r 1 00 .hibytes %011110011 -0013E8r 1 00 .hibytes %011110100 -0013E9r 1 00 .hibytes %011110101 -0013EAr 1 00 .hibytes %011110110 -0013EBr 1 00 .hibytes %011110111 -0013ECr 1 00 .hibytes %011111000 -0013EDr 1 00 .hibytes %011111001 -0013EEr 1 00 .hibytes %011111010 -0013EFr 1 00 .hibytes %011111011 -0013F0r 1 00 .hibytes %011111100 -0013F1r 1 00 .hibytes %011111101 -0013F2r 1 00 .hibytes %011111110 -0013F3r 1 00 .hibytes %011111111 -0013F4r 1 01 .hibytes %100000000 -0013F5r 1 01 .hibytes %100000001 -0013F6r 1 01 .hibytes %100000010 -0013F7r 1 01 .hibytes %100000011 -0013F8r 1 0F .hibytes %111111010010 -0013F9r 1 0F .hibytes %111111010011 -0013FAr 1 0F .hibytes %111111010100 -0013FBr 1 0F .hibytes %111111010101 -0013FCr 1 0F .hibytes %111111010110 -0013FDr 1 0F .hibytes %111111010111 -0013FEr 1 0F .hibytes %111111011000 -0013FFr 1 0F .hibytes %111111011001 -001400r 1 0F .hibytes %111111011010 -001401r 1 0F .hibytes %111111011011 -001402r 1 0F .hibytes %111111011100 -001403r 1 0F .hibytes %111111011101 -001404r 1 0F .hibytes %111111011110 -001405r 1 0F .hibytes %111111011111 -001406r 1 0F .hibytes %111111100000 -001407r 1 0F .hibytes %111111100001 -001408r 1 0F .hibytes %111111100010 -001409r 1 0F .hibytes %111111100011 -00140Ar 1 0F .hibytes %111111100100 -00140Br 1 0F .hibytes %111111100101 -00140Cr 1 0F .hibytes %111111100110 -00140Dr 1 0F .hibytes %111111100111 -00140Er 1 0F .hibytes %111111101000 -00140Fr 1 0F .hibytes %111111101001 -001410r 1 0F .hibytes %111111101010 -001411r 1 0F .hibytes %111111101011 -001412r 1 0F .hibytes %111111101100 -001413r 1 0F .hibytes %111111101101 -001414r 1 0F .hibytes %111111101110 -001415r 1 0F .hibytes %111111101111 -001416r 1 0F .hibytes %111111110000 -001417r 1 0F .hibytes %111111110001 -001418r 1 0F .hibytes %111111110010 -001419r 1 0F .hibytes %111111110011 -00141Ar 1 0F .hibytes %111111110100 -00141Br 1 0F .hibytes %111111110101 -00141Cr 1 0F .hibytes %111111110110 -00141Dr 1 0F .hibytes %111111110111 -00141Er 1 0F .hibytes %111111111000 -00141Fr 1 0F .hibytes %111111111001 -001420r 1 0F .hibytes %111111111010 -001421r 1 0F .hibytes %111111111011 -001422r 1 0F .hibytes %111111111100 -001423r 1 0F .hibytes %111111111101 -001424r 1 0F .hibytes %111111111110 -001425r 1 0F .hibytes %111111111111 -001426r 1 10 .hibytes %1000000000000 -001427r 1 10 .hibytes %1000000000001 -001428r 1 10 .hibytes %1000000000010 -001429r 1 10 .hibytes %1000000000011 -00142Ar 1 10 .hibytes %1000000000100 -00142Br 1 10 .hibytes %1000000000101 -00142Cr 1 10 .hibytes %1000000000110 -00142Dr 1 10 .hibytes %1000000000111 -00142Er 1 10 .hibytes %1000000001000 -00142Fr 1 7F .hibytes %111111111110000 -001430r 1 7F .hibytes %111111111110001 -001431r 1 7F .hibytes %111111111110010 -001432r 1 7F .hibytes %111111111110011 -001433r 1 7F .hibytes %111111111110100 -001434r 1 7F .hibytes %111111111110101 -001435r 1 7F .hibytes %111111111110110 -001436r 1 7F .hibytes %111111111110111 -001437r 1 7F .hibytes %111111111111000 -001438r 1 7F .hibytes %111111111111001 -001439r 1 7F .hibytes %111111111111010 -00143Ar 1 7F .hibytes %111111111111011 -00143Br 1 7F .hibytes %111111111111100 -00143Cr 1 7F .hibytes %111111111111101 -00143Dr 1 7F .hibytes %111111111111110 -00143Er 1 7F .hibytes %111111111111111 -00143Fr 1 80 .hibytes %1000000000000000 -001440r 1 80 .hibytes %1000000000000001 -001441r 1 80 .hibytes %1000000000000010 -001442r 1 80 .hibytes %1000000000000011 -001443r 1 80 .hibytes %1000000000000100 -001444r 1 80 .hibytes %1000000000000101 -001445r 1 80 .hibytes %1000000000000110 -001446r 1 80 .hibytes %1000000000000111 -001447r 1 80 .hibytes %1000000000001000 -001448r 1 80 .hibytes %1000000000001001 -001449r 1 80 .hibytes %1000000000001010 -00144Ar 1 80 .hibytes %1000000000001011 -00144Br 1 9F .hibytes %1001111111100001 -00144Cr 1 9F .hibytes %1001111111100010 -00144Dr 1 9F .hibytes %1001111111100011 -00144Er 1 9F .hibytes %1001111111100100 -00144Fr 1 9F .hibytes %1001111111100101 -001450r 1 9F .hibytes %1001111111100110 -001451r 1 9F .hibytes %1001111111100111 -001452r 1 9F .hibytes %1001111111101000 -001453r 1 9F .hibytes %1001111111101001 -001454r 1 9F .hibytes %1001111111101010 -001455r 1 9F .hibytes %1001111111101011 -001456r 1 9F .hibytes %1001111111101100 -001457r 1 9F .hibytes %1001111111101101 -001458r 1 9F .hibytes %1001111111101110 -001459r 1 9F .hibytes %1001111111101111 -00145Ar 1 9F .hibytes %1001111111110000 -00145Br 1 9F .hibytes %1001111111110001 -00145Cr 1 9F .hibytes %1001111111110010 -00145Dr 1 9F .hibytes %1001111111110011 -00145Er 1 9F .hibytes %1001111111110100 -00145Fr 1 9F .hibytes %1001111111110101 -001460r 1 9F .hibytes %1001111111110110 -001461r 1 9F .hibytes %1001111111110111 -001462r 1 9F .hibytes %1001111111111000 -001463r 1 9F .hibytes %1001111111111001 -001464r 1 9F .hibytes %1001111111111010 -001465r 1 9F .hibytes %1001111111111011 -001466r 1 9F .hibytes %1001111111111100 -001467r 1 9F .hibytes %1001111111111101 -001468r 1 9F .hibytes %1001111111111110 -001469r 1 9F .hibytes %1001111111111111 -00146Ar 1 A0 .hibytes %1010000000000000 -00146Br 1 A0 .hibytes %1010000000000001 -00146Cr 1 A0 .hibytes %1010000000000010 -00146Dr 1 A0 .hibytes %1010000000000011 -00146Er 1 A0 .hibytes %1010000000000100 -00146Fr 1 A0 .hibytes %1010000000000101 -001470r 1 A0 .hibytes %1010000000000110 -001471r 1 A0 .hibytes %1010000000000111 -001472r 1 A0 .hibytes %1010000000001000 -001473r 1 A0 .hibytes %1010000000001001 -001474r 1 A0 .hibytes %1010000000001010 -001475r 1 A0 .hibytes %1010000000001011 -001476r 1 A0 .hibytes %1010000000001100 -001477r 1 A0 .hibytes %1010000000001101 -001478r 1 A0 .hibytes %1010000000001110 -001479r 1 A0 .hibytes %1010000000001111 -00147Ar 1 AF .hibytes %1010111111100001 -00147Br 1 AF .hibytes %1010111111100010 -00147Cr 1 AF .hibytes %1010111111100011 -00147Dr 1 AF .hibytes %1010111111100100 -00147Er 1 AF .hibytes %1010111111100101 -00147Fr 1 AF .hibytes %1010111111100110 -001480r 1 AF .hibytes %1010111111100111 -001481r 1 AF .hibytes %1010111111101000 -001482r 1 AF .hibytes %1010111111101001 -001483r 1 AF .hibytes %1010111111101010 -001484r 1 AF .hibytes %1010111111101011 -001485r 1 AF .hibytes %1010111111101100 -001486r 1 AF .hibytes %1010111111101101 -001487r 1 AF .hibytes %1010111111101110 -001488r 1 AF .hibytes %1010111111101111 -001489r 1 AF .hibytes %1010111111110000 -00148Ar 1 AF .hibytes %1010111111110001 -00148Br 1 AF .hibytes %1010111111110010 -00148Cr 1 AF .hibytes %1010111111110011 -00148Dr 1 AF .hibytes %1010111111110100 -00148Er 1 AF .hibytes %1010111111110101 -00148Fr 1 AF .hibytes %1010111111110110 -001490r 1 AF .hibytes %1010111111110111 -001491r 1 AF .hibytes %1010111111111000 -001492r 1 AF .hibytes %1010111111111001 -001493r 1 AF .hibytes %1010111111111010 -001494r 1 AF .hibytes %1010111111111011 -001495r 1 AF .hibytes %1010111111111100 -001496r 1 AF .hibytes %1010111111111101 -001497r 1 AF .hibytes %1010111111111110 -001498r 1 AF .hibytes %1010111111111111 -001499r 1 B0 .hibytes %1011000000000000 -00149Ar 1 B0 .hibytes %1011000000000001 -00149Br 1 B0 .hibytes %1011000000000010 -00149Cr 1 B0 .hibytes %1011000000000011 -00149Dr 1 B0 .hibytes %1011000000000100 -00149Er 1 B0 .hibytes %1011000000000101 -00149Fr 1 B0 .hibytes %1011000000000110 -0014A0r 1 B0 .hibytes %1011000000000111 -0014A1r 1 B0 .hibytes %1011000000001000 -0014A2r 1 B0 .hibytes %1011000000001001 -0014A3r 1 B0 .hibytes %1011000000001010 -0014A4r 1 B0 .hibytes %1011000000001011 -0014A5r 1 B0 .hibytes %1011000000001100 -0014A6r 1 B0 .hibytes %1011000000001101 -0014A7r 1 B0 .hibytes %1011000000001110 -0014A8r 1 B0 .hibytes %1011000000001111 -0014A9r 1 BF .hibytes %1011111111100001 -0014AAr 1 BF .hibytes %1011111111100010 -0014ABr 1 BF .hibytes %1011111111100011 -0014ACr 1 BF .hibytes %1011111111100100 -0014ADr 1 BF .hibytes %1011111111100101 -0014AEr 1 BF .hibytes %1011111111100110 -0014AFr 1 BF .hibytes %1011111111100111 -0014B0r 1 BF .hibytes %1011111111101000 -0014B1r 1 BF .hibytes %1011111111101001 -0014B2r 1 BF .hibytes %1011111111101010 -0014B3r 1 BF .hibytes %1011111111101011 -0014B4r 1 BF .hibytes %1011111111101100 -0014B5r 1 BF .hibytes %1011111111101101 -0014B6r 1 BF .hibytes %1011111111101110 -0014B7r 1 BF .hibytes %1011111111101111 -0014B8r 1 BF .hibytes %1011111111110000 -0014B9r 1 BF .hibytes %1011111111110001 -0014BAr 1 BF .hibytes %1011111111110010 -0014BBr 1 BF .hibytes %1011111111110011 -0014BCr 1 BF .hibytes %1011111111110100 -0014BDr 1 BF .hibytes %1011111111110101 -0014BEr 1 BF .hibytes %1011111111110110 -0014BFr 1 BF .hibytes %1011111111110111 -0014C0r 1 BF .hibytes %1011111111111000 -0014C1r 1 BF .hibytes %1011111111111001 -0014C2r 1 BF .hibytes %1011111111111010 -0014C3r 1 BF .hibytes %1011111111111011 -0014C4r 1 BF .hibytes %1011111111111100 -0014C5r 1 BF .hibytes %1011111111111101 -0014C6r 1 BF .hibytes %1011111111111110 -0014C7r 1 BF .hibytes %1011111111111111 -0014C8r 1 C0 .hibytes %1100000000000000 -0014C9r 1 C0 .hibytes %1100000000000001 -0014CAr 1 C0 .hibytes %1100000000000010 -0014CBr 1 C0 .hibytes %1100000000000011 -0014CCr 1 C0 .hibytes %1100000000000100 -0014CDr 1 C0 .hibytes %1100000000000101 -0014CEr 1 C0 .hibytes %1100000000000110 -0014CFr 1 C0 .hibytes %1100000000000111 -0014D0r 1 C0 .hibytes %1100000000001000 -0014D1r 1 C0 .hibytes %1100000000001001 -0014D2r 1 C0 .hibytes %1100000000001010 -0014D3r 1 C0 .hibytes %1100000000001011 -0014D4r 1 C0 .hibytes %1100000000001100 -0014D5r 1 C0 .hibytes %1100000000001101 -0014D6r 1 C0 .hibytes %1100000000001110 -0014D7r 1 C0 .hibytes %1100000000001111 -0014D8r 1 CF .hibytes %1100111111100001 -0014D9r 1 CF .hibytes %1100111111100010 -0014DAr 1 CF .hibytes %1100111111100011 -0014DBr 1 CF .hibytes %1100111111100100 -0014DCr 1 CF .hibytes %1100111111100101 -0014DDr 1 CF .hibytes %1100111111100110 -0014DEr 1 CF .hibytes %1100111111100111 -0014DFr 1 CF .hibytes %1100111111101000 -0014E0r 1 CF .hibytes %1100111111101001 -0014E1r 1 CF .hibytes %1100111111101010 -0014E2r 1 CF .hibytes %1100111111101011 -0014E3r 1 CF .hibytes %1100111111101100 -0014E4r 1 CF .hibytes %1100111111101101 -0014E5r 1 CF .hibytes %1100111111101110 -0014E6r 1 CF .hibytes %1100111111101111 -0014E7r 1 CF .hibytes %1100111111110000 -0014E8r 1 CF .hibytes %1100111111110001 -0014E9r 1 CF .hibytes %1100111111110010 -0014EAr 1 CF .hibytes %1100111111110011 -0014EBr 1 CF .hibytes %1100111111110100 -0014ECr 1 CF .hibytes %1100111111110101 -0014EDr 1 CF .hibytes %1100111111110110 -0014EEr 1 CF .hibytes %1100111111110111 -0014EFr 1 CF .hibytes %1100111111111000 -0014F0r 1 CF .hibytes %1100111111111001 -0014F1r 1 CF .hibytes %1100111111111010 -0014F2r 1 CF .hibytes %1100111111111011 -0014F3r 1 CF .hibytes %1100111111111100 -0014F4r 1 CF .hibytes %1100111111111101 -0014F5r 1 CF .hibytes %1100111111111110 -0014F6r 1 CF .hibytes %1100111111111111 -0014F7r 1 D0 .hibytes %1101000000000000 -0014F8r 1 D0 .hibytes %1101000000000001 -0014F9r 1 D0 .hibytes %1101000000000010 -0014FAr 1 D0 .hibytes %1101000000000011 -0014FBr 1 D0 .hibytes %1101000000000100 -0014FCr 1 D0 .hibytes %1101000000000101 -0014FDr 1 D0 .hibytes %1101000000000110 -0014FEr 1 D0 .hibytes %1101000000000111 -0014FFr 1 D0 .hibytes %1101000000001000 -001500r 1 D0 .hibytes %1101000000001001 -001501r 1 D0 .hibytes %1101000000001010 -001502r 1 D0 .hibytes %1101000000001011 -001503r 1 D0 .hibytes %1101000000001100 -001504r 1 D0 .hibytes %1101000000001101 -001505r 1 D0 .hibytes %1101000000001110 -001506r 1 D0 .hibytes %1101000000001111 -001507r 1 DF .hibytes %1101111111100001 -001508r 1 DF .hibytes %1101111111100010 -001509r 1 DF .hibytes %1101111111100011 -00150Ar 1 DF .hibytes %1101111111100100 -00150Br 1 DF .hibytes %1101111111100101 -00150Cr 1 DF .hibytes %1101111111100110 -00150Dr 1 DF .hibytes %1101111111100111 -00150Er 1 DF .hibytes %1101111111101000 -00150Fr 1 DF .hibytes %1101111111101001 -001510r 1 DF .hibytes %1101111111101010 -001511r 1 DF .hibytes %1101111111101011 -001512r 1 DF .hibytes %1101111111101100 -001513r 1 DF .hibytes %1101111111101101 -001514r 1 DF .hibytes %1101111111101110 -001515r 1 DF .hibytes %1101111111101111 -001516r 1 DF .hibytes %1101111111110000 -001517r 1 DF .hibytes %1101111111110001 -001518r 1 DF .hibytes %1101111111110010 -001519r 1 DF .hibytes %1101111111110011 -00151Ar 1 DF .hibytes %1101111111110100 -00151Br 1 DF .hibytes %1101111111110101 -00151Cr 1 DF .hibytes %1101111111110110 -00151Dr 1 DF .hibytes %1101111111110111 -00151Er 1 DF .hibytes %1101111111111000 -00151Fr 1 DF .hibytes %1101111111111001 -001520r 1 DF .hibytes %1101111111111010 -001521r 1 DF .hibytes %1101111111111011 -001522r 1 DF .hibytes %1101111111111100 -001523r 1 DF .hibytes %1101111111111101 -001524r 1 DF .hibytes %1101111111111110 -001525r 1 DF .hibytes %1101111111111111 -001526r 1 E0 .hibytes %1110000000000000 -001527r 1 E0 .hibytes %1110000000000001 -001528r 1 E0 .hibytes %1110000000000010 -001529r 1 E0 .hibytes %1110000000000011 -00152Ar 1 E0 .hibytes %1110000000000100 -00152Br 1 E0 .hibytes %1110000000000101 -00152Cr 1 E0 .hibytes %1110000000000110 -00152Dr 1 E0 .hibytes %1110000000000111 -00152Er 1 E0 .hibytes %1110000000001000 -00152Fr 1 E0 .hibytes %1110000000001001 -001530r 1 E0 .hibytes %1110000000001010 -001531r 1 E0 .hibytes %1110000000001011 -001532r 1 E0 .hibytes %1110000000001100 -001533r 1 E0 .hibytes %1110000000001101 -001534r 1 E0 .hibytes %1110000000001110 -001535r 1 E0 .hibytes %1110000000001111 -001536r 1 EF .hibytes %1110111111100001 -001537r 1 EF .hibytes %1110111111100010 -001538r 1 EF .hibytes %1110111111100011 -001539r 1 EF .hibytes %1110111111100100 -00153Ar 1 EF .hibytes %1110111111100101 -00153Br 1 EF .hibytes %1110111111100110 -00153Cr 1 EF .hibytes %1110111111100111 -00153Dr 1 EF .hibytes %1110111111101000 -00153Er 1 EF .hibytes %1110111111101001 -00153Fr 1 EF .hibytes %1110111111101010 -001540r 1 EF .hibytes %1110111111101011 -001541r 1 EF .hibytes %1110111111101100 -001542r 1 EF .hibytes %1110111111101101 -001543r 1 EF .hibytes %1110111111101110 -001544r 1 EF .hibytes %1110111111101111 -001545r 1 EF .hibytes %1110111111110000 -001546r 1 EF .hibytes %1110111111110001 -001547r 1 EF .hibytes %1110111111110010 -001548r 1 EF .hibytes %1110111111110011 -001549r 1 EF .hibytes %1110111111110100 -00154Ar 1 EF .hibytes %1110111111110101 -00154Br 1 EF .hibytes %1110111111110110 -00154Cr 1 EF .hibytes %1110111111110111 -00154Dr 1 EF .hibytes %1110111111111000 -00154Er 1 EF .hibytes %1110111111111001 -00154Fr 1 EF .hibytes %1110111111111010 -001550r 1 EF .hibytes %1110111111111011 -001551r 1 EF .hibytes %1110111111111100 -001552r 1 EF .hibytes %1110111111111101 -001553r 1 EF .hibytes %1110111111111110 -001554r 1 EF .hibytes %1110111111111111 -001555r 1 F0 .hibytes %1111000000000000 -001556r 1 F0 .hibytes %1111000000000001 -001557r 1 F0 .hibytes %1111000000000010 -001558r 1 F0 .hibytes %1111000000000011 -001559r 1 F0 .hibytes %1111000000000100 -00155Ar 1 F0 .hibytes %1111000000000101 -00155Br 1 F0 .hibytes %1111000000000110 -00155Cr 1 F0 .hibytes %1111000000000111 -00155Dr 1 F0 .hibytes %1111000000001000 -00155Er 1 F0 .hibytes %1111000000001001 -00155Fr 1 F0 .hibytes %1111000000001010 -001560r 1 F0 .hibytes %1111000000001011 -001561r 1 F0 .hibytes %1111000000001100 -001562r 1 F0 .hibytes %1111000000001101 -001563r 1 F0 .hibytes %1111000000001110 -001564r 1 F0 .hibytes %1111000000001111 -001565r 1 FF .hibytes %1111111111100001 -001566r 1 FF .hibytes %1111111111100010 -001567r 1 FF .hibytes %1111111111100011 -001568r 1 FF .hibytes %1111111111100100 -001569r 1 FF .hibytes %1111111111100101 -00156Ar 1 FF .hibytes %1111111111100110 -00156Br 1 FF .hibytes %1111111111100111 -00156Cr 1 FF .hibytes %1111111111101000 -00156Dr 1 FF .hibytes %1111111111101001 -00156Er 1 FF .hibytes %1111111111101010 -00156Fr 1 FF .hibytes %1111111111101011 -001570r 1 FF .hibytes %1111111111101100 -001571r 1 FF .hibytes %1111111111101101 -001572r 1 FF .hibytes %1111111111101110 -001573r 1 FF .hibytes %1111111111101111 -001574r 1 FF .hibytes %1111111111110000 -001575r 1 FF .hibytes %1111111111110001 -001576r 1 FF .hibytes %1111111111110010 -001577r 1 FF .hibytes %1111111111110011 -001578r 1 FF .hibytes %1111111111110100 -001579r 1 FF .hibytes %1111111111110101 -00157Ar 1 FF .hibytes %1111111111110110 -00157Br 1 FF .hibytes %1111111111110111 -00157Cr 1 FF .hibytes %1111111111111000 -00157Dr 1 FF .hibytes %1111111111111001 -00157Er 1 FF .hibytes %1111111111111010 -00157Fr 1 FF .hibytes %1111111111111011 -001580r 1 FF .hibytes %1111111111111100 -001581r 1 FF .hibytes %1111111111111101 -001582r 1 FF .hibytes %1111111111111110 -001583r 1 FF .hibytes %1111111111111111 +0013B9r 1 ; binary values, variable length +0013B9r 1 00 .hibytes %0 +0013BAr 1 00 .hibytes %01 +0013BBr 1 00 .hibytes %010 +0013BCr 1 00 .hibytes %011 +0013BDr 1 00 .hibytes %0100 +0013BEr 1 00 .hibytes %0101 +0013BFr 1 00 .hibytes %0110 +0013C0r 1 00 .hibytes %0111 +0013C1r 1 00 .hibytes %01000 +0013C2r 1 00 .hibytes %01001 +0013C3r 1 00 .hibytes %01010 +0013C4r 1 00 .hibytes %01011 +0013C5r 1 00 .hibytes %01100 +0013C6r 1 00 .hibytes %01101 +0013C7r 1 00 .hibytes %01110 +0013C8r 1 00 .hibytes %01111 +0013C9r 1 00 .hibytes %010000 +0013CAr 1 00 .hibytes %010001 +0013CBr 1 00 .hibytes %010010 +0013CCr 1 00 .hibytes %010011 +0013CDr 1 00 .hibytes %01110000 +0013CEr 1 00 .hibytes %01110001 +0013CFr 1 00 .hibytes %01110010 +0013D0r 1 00 .hibytes %01110011 +0013D1r 1 00 .hibytes %01110100 +0013D2r 1 00 .hibytes %01110101 +0013D3r 1 00 .hibytes %01110110 +0013D4r 1 00 .hibytes %01110111 +0013D5r 1 00 .hibytes %01111000 +0013D6r 1 00 .hibytes %01111001 +0013D7r 1 00 .hibytes %01111010 +0013D8r 1 00 .hibytes %01111011 +0013D9r 1 00 .hibytes %01111100 +0013DAr 1 00 .hibytes %01111101 +0013DBr 1 00 .hibytes %01111110 +0013DCr 1 00 .hibytes %01111111 +0013DDr 1 00 .hibytes %010000000 +0013DEr 1 00 .hibytes %010000001 +0013DFr 1 00 .hibytes %010000010 +0013E0r 1 00 .hibytes %010000011 +0013E1r 1 00 .hibytes %010000100 +0013E2r 1 00 .hibytes %010000101 +0013E3r 1 00 .hibytes %010000110 +0013E4r 1 00 .hibytes %011110000 +0013E5r 1 00 .hibytes %011110001 +0013E6r 1 00 .hibytes %011110010 +0013E7r 1 00 .hibytes %011110011 +0013E8r 1 00 .hibytes %011110100 +0013E9r 1 00 .hibytes %011110101 +0013EAr 1 00 .hibytes %011110110 +0013EBr 1 00 .hibytes %011110111 +0013ECr 1 00 .hibytes %011111000 +0013EDr 1 00 .hibytes %011111001 +0013EEr 1 00 .hibytes %011111010 +0013EFr 1 00 .hibytes %011111011 +0013F0r 1 00 .hibytes %011111100 +0013F1r 1 00 .hibytes %011111101 +0013F2r 1 00 .hibytes %011111110 +0013F3r 1 00 .hibytes %011111111 +0013F4r 1 01 .hibytes %100000000 +0013F5r 1 01 .hibytes %100000001 +0013F6r 1 01 .hibytes %100000010 +0013F7r 1 01 .hibytes %100000011 +0013F8r 1 0F .hibytes %111111010010 +0013F9r 1 0F .hibytes %111111010011 +0013FAr 1 0F .hibytes %111111010100 +0013FBr 1 0F .hibytes %111111010101 +0013FCr 1 0F .hibytes %111111010110 +0013FDr 1 0F .hibytes %111111010111 +0013FEr 1 0F .hibytes %111111011000 +0013FFr 1 0F .hibytes %111111011001 +001400r 1 0F .hibytes %111111011010 +001401r 1 0F .hibytes %111111011011 +001402r 1 0F .hibytes %111111011100 +001403r 1 0F .hibytes %111111011101 +001404r 1 0F .hibytes %111111011110 +001405r 1 0F .hibytes %111111011111 +001406r 1 0F .hibytes %111111100000 +001407r 1 0F .hibytes %111111100001 +001408r 1 0F .hibytes %111111100010 +001409r 1 0F .hibytes %111111100011 +00140Ar 1 0F .hibytes %111111100100 +00140Br 1 0F .hibytes %111111100101 +00140Cr 1 0F .hibytes %111111100110 +00140Dr 1 0F .hibytes %111111100111 +00140Er 1 0F .hibytes %111111101000 +00140Fr 1 0F .hibytes %111111101001 +001410r 1 0F .hibytes %111111101010 +001411r 1 0F .hibytes %111111101011 +001412r 1 0F .hibytes %111111101100 +001413r 1 0F .hibytes %111111101101 +001414r 1 0F .hibytes %111111101110 +001415r 1 0F .hibytes %111111101111 +001416r 1 0F .hibytes %111111110000 +001417r 1 0F .hibytes %111111110001 +001418r 1 0F .hibytes %111111110010 +001419r 1 0F .hibytes %111111110011 +00141Ar 1 0F .hibytes %111111110100 +00141Br 1 0F .hibytes %111111110101 +00141Cr 1 0F .hibytes %111111110110 +00141Dr 1 0F .hibytes %111111110111 +00141Er 1 0F .hibytes %111111111000 +00141Fr 1 0F .hibytes %111111111001 +001420r 1 0F .hibytes %111111111010 +001421r 1 0F .hibytes %111111111011 +001422r 1 0F .hibytes %111111111100 +001423r 1 0F .hibytes %111111111101 +001424r 1 0F .hibytes %111111111110 +001425r 1 0F .hibytes %111111111111 +001426r 1 10 .hibytes %1000000000000 +001427r 1 10 .hibytes %1000000000001 +001428r 1 10 .hibytes %1000000000010 +001429r 1 10 .hibytes %1000000000011 +00142Ar 1 10 .hibytes %1000000000100 +00142Br 1 10 .hibytes %1000000000101 +00142Cr 1 10 .hibytes %1000000000110 +00142Dr 1 10 .hibytes %1000000000111 +00142Er 1 10 .hibytes %1000000001000 +00142Fr 1 7F .hibytes %111111111110000 +001430r 1 7F .hibytes %111111111110001 +001431r 1 7F .hibytes %111111111110010 +001432r 1 7F .hibytes %111111111110011 +001433r 1 7F .hibytes %111111111110100 +001434r 1 7F .hibytes %111111111110101 +001435r 1 7F .hibytes %111111111110110 +001436r 1 7F .hibytes %111111111110111 +001437r 1 7F .hibytes %111111111111000 +001438r 1 7F .hibytes %111111111111001 +001439r 1 7F .hibytes %111111111111010 +00143Ar 1 7F .hibytes %111111111111011 +00143Br 1 7F .hibytes %111111111111100 +00143Cr 1 7F .hibytes %111111111111101 +00143Dr 1 7F .hibytes %111111111111110 +00143Er 1 7F .hibytes %111111111111111 +00143Fr 1 80 .hibytes %1000000000000000 +001440r 1 80 .hibytes %1000000000000001 +001441r 1 80 .hibytes %1000000000000010 +001442r 1 80 .hibytes %1000000000000011 +001443r 1 80 .hibytes %1000000000000100 +001444r 1 80 .hibytes %1000000000000101 +001445r 1 80 .hibytes %1000000000000110 +001446r 1 80 .hibytes %1000000000000111 +001447r 1 80 .hibytes %1000000000001000 +001448r 1 80 .hibytes %1000000000001001 +001449r 1 80 .hibytes %1000000000001010 +00144Ar 1 80 .hibytes %1000000000001011 +00144Br 1 9F .hibytes %1001111111100001 +00144Cr 1 9F .hibytes %1001111111100010 +00144Dr 1 9F .hibytes %1001111111100011 +00144Er 1 9F .hibytes %1001111111100100 +00144Fr 1 9F .hibytes %1001111111100101 +001450r 1 9F .hibytes %1001111111100110 +001451r 1 9F .hibytes %1001111111100111 +001452r 1 9F .hibytes %1001111111101000 +001453r 1 9F .hibytes %1001111111101001 +001454r 1 9F .hibytes %1001111111101010 +001455r 1 9F .hibytes %1001111111101011 +001456r 1 9F .hibytes %1001111111101100 +001457r 1 9F .hibytes %1001111111101101 +001458r 1 9F .hibytes %1001111111101110 +001459r 1 9F .hibytes %1001111111101111 +00145Ar 1 9F .hibytes %1001111111110000 +00145Br 1 9F .hibytes %1001111111110001 +00145Cr 1 9F .hibytes %1001111111110010 +00145Dr 1 9F .hibytes %1001111111110011 +00145Er 1 9F .hibytes %1001111111110100 +00145Fr 1 9F .hibytes %1001111111110101 +001460r 1 9F .hibytes %1001111111110110 +001461r 1 9F .hibytes %1001111111110111 +001462r 1 9F .hibytes %1001111111111000 +001463r 1 9F .hibytes %1001111111111001 +001464r 1 9F .hibytes %1001111111111010 +001465r 1 9F .hibytes %1001111111111011 +001466r 1 9F .hibytes %1001111111111100 +001467r 1 9F .hibytes %1001111111111101 +001468r 1 9F .hibytes %1001111111111110 +001469r 1 9F .hibytes %1001111111111111 +00146Ar 1 A0 .hibytes %1010000000000000 +00146Br 1 A0 .hibytes %1010000000000001 +00146Cr 1 A0 .hibytes %1010000000000010 +00146Dr 1 A0 .hibytes %1010000000000011 +00146Er 1 A0 .hibytes %1010000000000100 +00146Fr 1 A0 .hibytes %1010000000000101 +001470r 1 A0 .hibytes %1010000000000110 +001471r 1 A0 .hibytes %1010000000000111 +001472r 1 A0 .hibytes %1010000000001000 +001473r 1 A0 .hibytes %1010000000001001 +001474r 1 A0 .hibytes %1010000000001010 +001475r 1 A0 .hibytes %1010000000001011 +001476r 1 A0 .hibytes %1010000000001100 +001477r 1 A0 .hibytes %1010000000001101 +001478r 1 A0 .hibytes %1010000000001110 +001479r 1 A0 .hibytes %1010000000001111 +00147Ar 1 AF .hibytes %1010111111100001 +00147Br 1 AF .hibytes %1010111111100010 +00147Cr 1 AF .hibytes %1010111111100011 +00147Dr 1 AF .hibytes %1010111111100100 +00147Er 1 AF .hibytes %1010111111100101 +00147Fr 1 AF .hibytes %1010111111100110 +001480r 1 AF .hibytes %1010111111100111 +001481r 1 AF .hibytes %1010111111101000 +001482r 1 AF .hibytes %1010111111101001 +001483r 1 AF .hibytes %1010111111101010 +001484r 1 AF .hibytes %1010111111101011 +001485r 1 AF .hibytes %1010111111101100 +001486r 1 AF .hibytes %1010111111101101 +001487r 1 AF .hibytes %1010111111101110 +001488r 1 AF .hibytes %1010111111101111 +001489r 1 AF .hibytes %1010111111110000 +00148Ar 1 AF .hibytes %1010111111110001 +00148Br 1 AF .hibytes %1010111111110010 +00148Cr 1 AF .hibytes %1010111111110011 +00148Dr 1 AF .hibytes %1010111111110100 +00148Er 1 AF .hibytes %1010111111110101 +00148Fr 1 AF .hibytes %1010111111110110 +001490r 1 AF .hibytes %1010111111110111 +001491r 1 AF .hibytes %1010111111111000 +001492r 1 AF .hibytes %1010111111111001 +001493r 1 AF .hibytes %1010111111111010 +001494r 1 AF .hibytes %1010111111111011 +001495r 1 AF .hibytes %1010111111111100 +001496r 1 AF .hibytes %1010111111111101 +001497r 1 AF .hibytes %1010111111111110 +001498r 1 AF .hibytes %1010111111111111 +001499r 1 B0 .hibytes %1011000000000000 +00149Ar 1 B0 .hibytes %1011000000000001 +00149Br 1 B0 .hibytes %1011000000000010 +00149Cr 1 B0 .hibytes %1011000000000011 +00149Dr 1 B0 .hibytes %1011000000000100 +00149Er 1 B0 .hibytes %1011000000000101 +00149Fr 1 B0 .hibytes %1011000000000110 +0014A0r 1 B0 .hibytes %1011000000000111 +0014A1r 1 B0 .hibytes %1011000000001000 +0014A2r 1 B0 .hibytes %1011000000001001 +0014A3r 1 B0 .hibytes %1011000000001010 +0014A4r 1 B0 .hibytes %1011000000001011 +0014A5r 1 B0 .hibytes %1011000000001100 +0014A6r 1 B0 .hibytes %1011000000001101 +0014A7r 1 B0 .hibytes %1011000000001110 +0014A8r 1 B0 .hibytes %1011000000001111 +0014A9r 1 BF .hibytes %1011111111100001 +0014AAr 1 BF .hibytes %1011111111100010 +0014ABr 1 BF .hibytes %1011111111100011 +0014ACr 1 BF .hibytes %1011111111100100 +0014ADr 1 BF .hibytes %1011111111100101 +0014AEr 1 BF .hibytes %1011111111100110 +0014AFr 1 BF .hibytes %1011111111100111 +0014B0r 1 BF .hibytes %1011111111101000 +0014B1r 1 BF .hibytes %1011111111101001 +0014B2r 1 BF .hibytes %1011111111101010 +0014B3r 1 BF .hibytes %1011111111101011 +0014B4r 1 BF .hibytes %1011111111101100 +0014B5r 1 BF .hibytes %1011111111101101 +0014B6r 1 BF .hibytes %1011111111101110 +0014B7r 1 BF .hibytes %1011111111101111 +0014B8r 1 BF .hibytes %1011111111110000 +0014B9r 1 BF .hibytes %1011111111110001 +0014BAr 1 BF .hibytes %1011111111110010 +0014BBr 1 BF .hibytes %1011111111110011 +0014BCr 1 BF .hibytes %1011111111110100 +0014BDr 1 BF .hibytes %1011111111110101 +0014BEr 1 BF .hibytes %1011111111110110 +0014BFr 1 BF .hibytes %1011111111110111 +0014C0r 1 BF .hibytes %1011111111111000 +0014C1r 1 BF .hibytes %1011111111111001 +0014C2r 1 BF .hibytes %1011111111111010 +0014C3r 1 BF .hibytes %1011111111111011 +0014C4r 1 BF .hibytes %1011111111111100 +0014C5r 1 BF .hibytes %1011111111111101 +0014C6r 1 BF .hibytes %1011111111111110 +0014C7r 1 BF .hibytes %1011111111111111 +0014C8r 1 C0 .hibytes %1100000000000000 +0014C9r 1 C0 .hibytes %1100000000000001 +0014CAr 1 C0 .hibytes %1100000000000010 +0014CBr 1 C0 .hibytes %1100000000000011 +0014CCr 1 C0 .hibytes %1100000000000100 +0014CDr 1 C0 .hibytes %1100000000000101 +0014CEr 1 C0 .hibytes %1100000000000110 +0014CFr 1 C0 .hibytes %1100000000000111 +0014D0r 1 C0 .hibytes %1100000000001000 +0014D1r 1 C0 .hibytes %1100000000001001 +0014D2r 1 C0 .hibytes %1100000000001010 +0014D3r 1 C0 .hibytes %1100000000001011 +0014D4r 1 C0 .hibytes %1100000000001100 +0014D5r 1 C0 .hibytes %1100000000001101 +0014D6r 1 C0 .hibytes %1100000000001110 +0014D7r 1 C0 .hibytes %1100000000001111 +0014D8r 1 CF .hibytes %1100111111100001 +0014D9r 1 CF .hibytes %1100111111100010 +0014DAr 1 CF .hibytes %1100111111100011 +0014DBr 1 CF .hibytes %1100111111100100 +0014DCr 1 CF .hibytes %1100111111100101 +0014DDr 1 CF .hibytes %1100111111100110 +0014DEr 1 CF .hibytes %1100111111100111 +0014DFr 1 CF .hibytes %1100111111101000 +0014E0r 1 CF .hibytes %1100111111101001 +0014E1r 1 CF .hibytes %1100111111101010 +0014E2r 1 CF .hibytes %1100111111101011 +0014E3r 1 CF .hibytes %1100111111101100 +0014E4r 1 CF .hibytes %1100111111101101 +0014E5r 1 CF .hibytes %1100111111101110 +0014E6r 1 CF .hibytes %1100111111101111 +0014E7r 1 CF .hibytes %1100111111110000 +0014E8r 1 CF .hibytes %1100111111110001 +0014E9r 1 CF .hibytes %1100111111110010 +0014EAr 1 CF .hibytes %1100111111110011 +0014EBr 1 CF .hibytes %1100111111110100 +0014ECr 1 CF .hibytes %1100111111110101 +0014EDr 1 CF .hibytes %1100111111110110 +0014EEr 1 CF .hibytes %1100111111110111 +0014EFr 1 CF .hibytes %1100111111111000 +0014F0r 1 CF .hibytes %1100111111111001 +0014F1r 1 CF .hibytes %1100111111111010 +0014F2r 1 CF .hibytes %1100111111111011 +0014F3r 1 CF .hibytes %1100111111111100 +0014F4r 1 CF .hibytes %1100111111111101 +0014F5r 1 CF .hibytes %1100111111111110 +0014F6r 1 CF .hibytes %1100111111111111 +0014F7r 1 D0 .hibytes %1101000000000000 +0014F8r 1 D0 .hibytes %1101000000000001 +0014F9r 1 D0 .hibytes %1101000000000010 +0014FAr 1 D0 .hibytes %1101000000000011 +0014FBr 1 D0 .hibytes %1101000000000100 +0014FCr 1 D0 .hibytes %1101000000000101 +0014FDr 1 D0 .hibytes %1101000000000110 +0014FEr 1 D0 .hibytes %1101000000000111 +0014FFr 1 D0 .hibytes %1101000000001000 +001500r 1 D0 .hibytes %1101000000001001 +001501r 1 D0 .hibytes %1101000000001010 +001502r 1 D0 .hibytes %1101000000001011 +001503r 1 D0 .hibytes %1101000000001100 +001504r 1 D0 .hibytes %1101000000001101 +001505r 1 D0 .hibytes %1101000000001110 +001506r 1 D0 .hibytes %1101000000001111 +001507r 1 DF .hibytes %1101111111100001 +001508r 1 DF .hibytes %1101111111100010 +001509r 1 DF .hibytes %1101111111100011 +00150Ar 1 DF .hibytes %1101111111100100 +00150Br 1 DF .hibytes %1101111111100101 +00150Cr 1 DF .hibytes %1101111111100110 +00150Dr 1 DF .hibytes %1101111111100111 +00150Er 1 DF .hibytes %1101111111101000 +00150Fr 1 DF .hibytes %1101111111101001 +001510r 1 DF .hibytes %1101111111101010 +001511r 1 DF .hibytes %1101111111101011 +001512r 1 DF .hibytes %1101111111101100 +001513r 1 DF .hibytes %1101111111101101 +001514r 1 DF .hibytes %1101111111101110 +001515r 1 DF .hibytes %1101111111101111 +001516r 1 DF .hibytes %1101111111110000 +001517r 1 DF .hibytes %1101111111110001 +001518r 1 DF .hibytes %1101111111110010 +001519r 1 DF .hibytes %1101111111110011 +00151Ar 1 DF .hibytes %1101111111110100 +00151Br 1 DF .hibytes %1101111111110101 +00151Cr 1 DF .hibytes %1101111111110110 +00151Dr 1 DF .hibytes %1101111111110111 +00151Er 1 DF .hibytes %1101111111111000 +00151Fr 1 DF .hibytes %1101111111111001 +001520r 1 DF .hibytes %1101111111111010 +001521r 1 DF .hibytes %1101111111111011 +001522r 1 DF .hibytes %1101111111111100 +001523r 1 DF .hibytes %1101111111111101 +001524r 1 DF .hibytes %1101111111111110 +001525r 1 DF .hibytes %1101111111111111 +001526r 1 E0 .hibytes %1110000000000000 +001527r 1 E0 .hibytes %1110000000000001 +001528r 1 E0 .hibytes %1110000000000010 +001529r 1 E0 .hibytes %1110000000000011 +00152Ar 1 E0 .hibytes %1110000000000100 +00152Br 1 E0 .hibytes %1110000000000101 +00152Cr 1 E0 .hibytes %1110000000000110 +00152Dr 1 E0 .hibytes %1110000000000111 +00152Er 1 E0 .hibytes %1110000000001000 +00152Fr 1 E0 .hibytes %1110000000001001 +001530r 1 E0 .hibytes %1110000000001010 +001531r 1 E0 .hibytes %1110000000001011 +001532r 1 E0 .hibytes %1110000000001100 +001533r 1 E0 .hibytes %1110000000001101 +001534r 1 E0 .hibytes %1110000000001110 +001535r 1 E0 .hibytes %1110000000001111 +001536r 1 EF .hibytes %1110111111100001 +001537r 1 EF .hibytes %1110111111100010 +001538r 1 EF .hibytes %1110111111100011 +001539r 1 EF .hibytes %1110111111100100 +00153Ar 1 EF .hibytes %1110111111100101 +00153Br 1 EF .hibytes %1110111111100110 +00153Cr 1 EF .hibytes %1110111111100111 +00153Dr 1 EF .hibytes %1110111111101000 +00153Er 1 EF .hibytes %1110111111101001 +00153Fr 1 EF .hibytes %1110111111101010 +001540r 1 EF .hibytes %1110111111101011 +001541r 1 EF .hibytes %1110111111101100 +001542r 1 EF .hibytes %1110111111101101 +001543r 1 EF .hibytes %1110111111101110 +001544r 1 EF .hibytes %1110111111101111 +001545r 1 EF .hibytes %1110111111110000 +001546r 1 EF .hibytes %1110111111110001 +001547r 1 EF .hibytes %1110111111110010 +001548r 1 EF .hibytes %1110111111110011 +001549r 1 EF .hibytes %1110111111110100 +00154Ar 1 EF .hibytes %1110111111110101 +00154Br 1 EF .hibytes %1110111111110110 +00154Cr 1 EF .hibytes %1110111111110111 +00154Dr 1 EF .hibytes %1110111111111000 +00154Er 1 EF .hibytes %1110111111111001 +00154Fr 1 EF .hibytes %1110111111111010 +001550r 1 EF .hibytes %1110111111111011 +001551r 1 EF .hibytes %1110111111111100 +001552r 1 EF .hibytes %1110111111111101 +001553r 1 EF .hibytes %1110111111111110 +001554r 1 EF .hibytes %1110111111111111 +001555r 1 F0 .hibytes %1111000000000000 +001556r 1 F0 .hibytes %1111000000000001 +001557r 1 F0 .hibytes %1111000000000010 +001558r 1 F0 .hibytes %1111000000000011 +001559r 1 F0 .hibytes %1111000000000100 +00155Ar 1 F0 .hibytes %1111000000000101 +00155Br 1 F0 .hibytes %1111000000000110 +00155Cr 1 F0 .hibytes %1111000000000111 +00155Dr 1 F0 .hibytes %1111000000001000 +00155Er 1 F0 .hibytes %1111000000001001 +00155Fr 1 F0 .hibytes %1111000000001010 +001560r 1 F0 .hibytes %1111000000001011 +001561r 1 F0 .hibytes %1111000000001100 +001562r 1 F0 .hibytes %1111000000001101 +001563r 1 F0 .hibytes %1111000000001110 +001564r 1 F0 .hibytes %1111000000001111 +001565r 1 FF .hibytes %1111111111100001 +001566r 1 FF .hibytes %1111111111100010 +001567r 1 FF .hibytes %1111111111100011 +001568r 1 FF .hibytes %1111111111100100 +001569r 1 FF .hibytes %1111111111100101 +00156Ar 1 FF .hibytes %1111111111100110 +00156Br 1 FF .hibytes %1111111111100111 +00156Cr 1 FF .hibytes %1111111111101000 +00156Dr 1 FF .hibytes %1111111111101001 +00156Er 1 FF .hibytes %1111111111101010 +00156Fr 1 FF .hibytes %1111111111101011 +001570r 1 FF .hibytes %1111111111101100 +001571r 1 FF .hibytes %1111111111101101 +001572r 1 FF .hibytes %1111111111101110 +001573r 1 FF .hibytes %1111111111101111 +001574r 1 FF .hibytes %1111111111110000 +001575r 1 FF .hibytes %1111111111110001 +001576r 1 FF .hibytes %1111111111110010 +001577r 1 FF .hibytes %1111111111110011 +001578r 1 FF .hibytes %1111111111110100 +001579r 1 FF .hibytes %1111111111110101 +00157Ar 1 FF .hibytes %1111111111110110 +00157Br 1 FF .hibytes %1111111111110111 +00157Cr 1 FF .hibytes %1111111111111000 +00157Dr 1 FF .hibytes %1111111111111001 +00157Er 1 FF .hibytes %1111111111111010 +00157Fr 1 FF .hibytes %1111111111111011 +001580r 1 FF .hibytes %1111111111111100 +001581r 1 FF .hibytes %1111111111111101 +001582r 1 FF .hibytes %1111111111111110 +001583r 1 FF .hibytes %1111111111111111 001584r 1 -001584r 1 ; binary values, full length -001584r 1 00 .hibytes %0000000000000000 -001585r 1 00 .hibytes %0000000000000001 -001586r 1 00 .hibytes %0000000000000010 -001587r 1 00 .hibytes %0000000000000011 -001588r 1 00 .hibytes %0000000000000100 -001589r 1 00 .hibytes %0000000000000101 -00158Ar 1 00 .hibytes %0000000000000110 -00158Br 1 00 .hibytes %0000000000000111 -00158Cr 1 00 .hibytes %0000000000001000 -00158Dr 1 00 .hibytes %0000000000001001 -00158Er 1 00 .hibytes %0000000000001010 -00158Fr 1 00 .hibytes %0000000000001011 -001590r 1 00 .hibytes %0000000000001100 -001591r 1 00 .hibytes %0000000000001101 -001592r 1 00 .hibytes %0000000000001110 -001593r 1 00 .hibytes %0000000000001111 -001594r 1 00 .hibytes %0000000000010000 -001595r 1 00 .hibytes %0000000000010001 -001596r 1 00 .hibytes %0000000000010010 -001597r 1 00 .hibytes %0000000000010011 -001598r 1 00 .hibytes %0000000001110000 -001599r 1 00 .hibytes %0000000001110001 -00159Ar 1 00 .hibytes %0000000001110010 -00159Br 1 00 .hibytes %0000000001110011 -00159Cr 1 00 .hibytes %0000000001110100 -00159Dr 1 00 .hibytes %0000000001110101 -00159Er 1 00 .hibytes %0000000001110110 -00159Fr 1 00 .hibytes %0000000001110111 -0015A0r 1 00 .hibytes %0000000001111000 -0015A1r 1 00 .hibytes %0000000001111001 -0015A2r 1 00 .hibytes %0000000001111010 -0015A3r 1 00 .hibytes %0000000001111011 -0015A4r 1 00 .hibytes %0000000001111100 -0015A5r 1 00 .hibytes %0000000001111101 -0015A6r 1 00 .hibytes %0000000001111110 -0015A7r 1 00 .hibytes %0000000001111111 -0015A8r 1 00 .hibytes %0000000010000000 -0015A9r 1 00 .hibytes %0000000010000001 -0015AAr 1 00 .hibytes %0000000010000010 -0015ABr 1 00 .hibytes %0000000010000011 -0015ACr 1 00 .hibytes %0000000010000100 -0015ADr 1 00 .hibytes %0000000010000101 -0015AEr 1 00 .hibytes %0000000010000110 -0015AFr 1 00 .hibytes %0000000011110000 -0015B0r 1 00 .hibytes %0000000011110001 -0015B1r 1 00 .hibytes %0000000011110010 -0015B2r 1 00 .hibytes %0000000011110011 -0015B3r 1 00 .hibytes %0000000011110100 -0015B4r 1 00 .hibytes %0000000011110101 -0015B5r 1 00 .hibytes %0000000011110110 -0015B6r 1 00 .hibytes %0000000011110111 -0015B7r 1 00 .hibytes %0000000011111000 -0015B8r 1 00 .hibytes %0000000011111001 -0015B9r 1 00 .hibytes %0000000011111010 -0015BAr 1 00 .hibytes %0000000011111011 -0015BBr 1 00 .hibytes %0000000011111100 -0015BCr 1 00 .hibytes %0000000011111101 -0015BDr 1 00 .hibytes %0000000011111110 -0015BEr 1 00 .hibytes %0000000011111111 -0015BFr 1 01 .hibytes %0000000100000000 -0015C0r 1 01 .hibytes %0000000100000001 -0015C1r 1 01 .hibytes %0000000100000010 -0015C2r 1 01 .hibytes %0000000100000011 -0015C3r 1 0F .hibytes %0000111111010010 -0015C4r 1 0F .hibytes %0000111111010011 -0015C5r 1 0F .hibytes %0000111111010100 -0015C6r 1 0F .hibytes %0000111111010101 -0015C7r 1 0F .hibytes %0000111111010110 -0015C8r 1 0F .hibytes %0000111111010111 -0015C9r 1 0F .hibytes %0000111111011000 -0015CAr 1 0F .hibytes %0000111111011001 -0015CBr 1 0F .hibytes %0000111111011010 -0015CCr 1 0F .hibytes %0000111111011011 -0015CDr 1 0F .hibytes %0000111111011100 -0015CEr 1 0F .hibytes %0000111111011101 -0015CFr 1 0F .hibytes %0000111111011110 -0015D0r 1 0F .hibytes %0000111111011111 -0015D1r 1 0F .hibytes %0000111111100000 -0015D2r 1 0F .hibytes %0000111111100001 -0015D3r 1 0F .hibytes %0000111111100010 -0015D4r 1 0F .hibytes %0000111111100011 -0015D5r 1 0F .hibytes %0000111111100100 -0015D6r 1 0F .hibytes %0000111111100101 -0015D7r 1 0F .hibytes %0000111111100110 -0015D8r 1 0F .hibytes %0000111111100111 -0015D9r 1 0F .hibytes %0000111111101000 -0015DAr 1 0F .hibytes %0000111111101001 -0015DBr 1 0F .hibytes %0000111111101010 -0015DCr 1 0F .hibytes %0000111111101011 -0015DDr 1 0F .hibytes %0000111111101100 -0015DEr 1 0F .hibytes %0000111111101101 -0015DFr 1 0F .hibytes %0000111111101110 -0015E0r 1 0F .hibytes %0000111111101111 -0015E1r 1 0F .hibytes %0000111111110000 -0015E2r 1 0F .hibytes %0000111111110001 -0015E3r 1 0F .hibytes %0000111111110010 -0015E4r 1 0F .hibytes %0000111111110011 -0015E5r 1 0F .hibytes %0000111111110100 -0015E6r 1 0F .hibytes %0000111111110101 -0015E7r 1 0F .hibytes %0000111111110110 -0015E8r 1 0F .hibytes %0000111111110111 -0015E9r 1 0F .hibytes %0000111111111000 -0015EAr 1 0F .hibytes %0000111111111001 -0015EBr 1 0F .hibytes %0000111111111010 -0015ECr 1 0F .hibytes %0000111111111011 -0015EDr 1 0F .hibytes %0000111111111100 -0015EEr 1 0F .hibytes %0000111111111101 -0015EFr 1 0F .hibytes %0000111111111110 -0015F0r 1 0F .hibytes %0000111111111111 -0015F1r 1 10 .hibytes %0001000000000000 -0015F2r 1 10 .hibytes %0001000000000001 -0015F3r 1 10 .hibytes %0001000000000010 -0015F4r 1 10 .hibytes %0001000000000011 -0015F5r 1 10 .hibytes %0001000000000100 -0015F6r 1 10 .hibytes %0001000000000101 -0015F7r 1 10 .hibytes %0001000000000110 -0015F8r 1 10 .hibytes %0001000000000111 -0015F9r 1 10 .hibytes %0001000000001000 -0015FAr 1 7F .hibytes %0111111111110000 -0015FBr 1 7F .hibytes %0111111111110001 -0015FCr 1 7F .hibytes %0111111111110010 -0015FDr 1 7F .hibytes %0111111111110011 -0015FEr 1 7F .hibytes %0111111111110100 -0015FFr 1 7F .hibytes %0111111111110101 -001600r 1 7F .hibytes %0111111111110110 -001601r 1 7F .hibytes %0111111111110111 -001602r 1 7F .hibytes %0111111111111000 -001603r 1 7F .hibytes %0111111111111001 -001604r 1 7F .hibytes %0111111111111010 -001605r 1 7F .hibytes %0111111111111011 -001606r 1 7F .hibytes %0111111111111100 -001607r 1 7F .hibytes %0111111111111101 -001608r 1 7F .hibytes %0111111111111110 -001609r 1 7F .hibytes %0111111111111111 -00160Ar 1 80 .hibytes %1000000000000000 -00160Br 1 80 .hibytes %1000000000000001 -00160Cr 1 80 .hibytes %1000000000000010 -00160Dr 1 80 .hibytes %1000000000000011 -00160Er 1 80 .hibytes %1000000000000100 -00160Fr 1 80 .hibytes %1000000000000101 -001610r 1 80 .hibytes %1000000000000110 -001611r 1 80 .hibytes %1000000000000111 -001612r 1 80 .hibytes %1000000000001000 -001613r 1 80 .hibytes %1000000000001001 -001614r 1 80 .hibytes %1000000000001010 -001615r 1 80 .hibytes %1000000000001011 -001616r 1 9F .hibytes %1001111111100001 -001617r 1 9F .hibytes %1001111111100010 -001618r 1 9F .hibytes %1001111111100011 -001619r 1 9F .hibytes %1001111111100100 -00161Ar 1 9F .hibytes %1001111111100101 -00161Br 1 9F .hibytes %1001111111100110 -00161Cr 1 9F .hibytes %1001111111100111 -00161Dr 1 9F .hibytes %1001111111101000 -00161Er 1 9F .hibytes %1001111111101001 -00161Fr 1 9F .hibytes %1001111111101010 -001620r 1 9F .hibytes %1001111111101011 -001621r 1 9F .hibytes %1001111111101100 -001622r 1 9F .hibytes %1001111111101101 -001623r 1 9F .hibytes %1001111111101110 -001624r 1 9F .hibytes %1001111111101111 -001625r 1 9F .hibytes %1001111111110000 -001626r 1 9F .hibytes %1001111111110001 -001627r 1 9F .hibytes %1001111111110010 -001628r 1 9F .hibytes %1001111111110011 -001629r 1 9F .hibytes %1001111111110100 -00162Ar 1 9F .hibytes %1001111111110101 -00162Br 1 9F .hibytes %1001111111110110 -00162Cr 1 9F .hibytes %1001111111110111 -00162Dr 1 9F .hibytes %1001111111111000 -00162Er 1 9F .hibytes %1001111111111001 -00162Fr 1 9F .hibytes %1001111111111010 -001630r 1 9F .hibytes %1001111111111011 -001631r 1 9F .hibytes %1001111111111100 -001632r 1 9F .hibytes %1001111111111101 -001633r 1 9F .hibytes %1001111111111110 -001634r 1 9F .hibytes %1001111111111111 -001635r 1 A0 .hibytes %1010000000000000 -001636r 1 A0 .hibytes %1010000000000001 -001637r 1 A0 .hibytes %1010000000000010 -001638r 1 A0 .hibytes %1010000000000011 -001639r 1 A0 .hibytes %1010000000000100 -00163Ar 1 A0 .hibytes %1010000000000101 -00163Br 1 A0 .hibytes %1010000000000110 -00163Cr 1 A0 .hibytes %1010000000000111 -00163Dr 1 A0 .hibytes %1010000000001000 -00163Er 1 A0 .hibytes %1010000000001001 -00163Fr 1 A0 .hibytes %1010000000001010 -001640r 1 A0 .hibytes %1010000000001011 -001641r 1 A0 .hibytes %1010000000001100 -001642r 1 A0 .hibytes %1010000000001101 -001643r 1 A0 .hibytes %1010000000001110 -001644r 1 A0 .hibytes %1010000000001111 -001645r 1 AF .hibytes %1010111111100001 -001646r 1 AF .hibytes %1010111111100010 -001647r 1 AF .hibytes %1010111111100011 -001648r 1 AF .hibytes %1010111111100100 -001649r 1 AF .hibytes %1010111111100101 -00164Ar 1 AF .hibytes %1010111111100110 -00164Br 1 AF .hibytes %1010111111100111 -00164Cr 1 AF .hibytes %1010111111101000 -00164Dr 1 AF .hibytes %1010111111101001 -00164Er 1 AF .hibytes %1010111111101010 -00164Fr 1 AF .hibytes %1010111111101011 -001650r 1 AF .hibytes %1010111111101100 -001651r 1 AF .hibytes %1010111111101101 -001652r 1 AF .hibytes %1010111111101110 -001653r 1 AF .hibytes %1010111111101111 -001654r 1 AF .hibytes %1010111111110000 -001655r 1 AF .hibytes %1010111111110001 -001656r 1 AF .hibytes %1010111111110010 -001657r 1 AF .hibytes %1010111111110011 -001658r 1 AF .hibytes %1010111111110100 -001659r 1 AF .hibytes %1010111111110101 -00165Ar 1 AF .hibytes %1010111111110110 -00165Br 1 AF .hibytes %1010111111110111 -00165Cr 1 AF .hibytes %1010111111111000 -00165Dr 1 AF .hibytes %1010111111111001 -00165Er 1 AF .hibytes %1010111111111010 -00165Fr 1 AF .hibytes %1010111111111011 -001660r 1 AF .hibytes %1010111111111100 -001661r 1 AF .hibytes %1010111111111101 -001662r 1 AF .hibytes %1010111111111110 -001663r 1 AF .hibytes %1010111111111111 -001664r 1 B0 .hibytes %1011000000000000 -001665r 1 B0 .hibytes %1011000000000001 -001666r 1 B0 .hibytes %1011000000000010 -001667r 1 B0 .hibytes %1011000000000011 -001668r 1 B0 .hibytes %1011000000000100 -001669r 1 B0 .hibytes %1011000000000101 -00166Ar 1 B0 .hibytes %1011000000000110 -00166Br 1 B0 .hibytes %1011000000000111 -00166Cr 1 B0 .hibytes %1011000000001000 -00166Dr 1 B0 .hibytes %1011000000001001 -00166Er 1 B0 .hibytes %1011000000001010 -00166Fr 1 B0 .hibytes %1011000000001011 -001670r 1 B0 .hibytes %1011000000001100 -001671r 1 B0 .hibytes %1011000000001101 -001672r 1 B0 .hibytes %1011000000001110 -001673r 1 B0 .hibytes %1011000000001111 -001674r 1 BF .hibytes %1011111111100001 -001675r 1 BF .hibytes %1011111111100010 -001676r 1 BF .hibytes %1011111111100011 -001677r 1 BF .hibytes %1011111111100100 -001678r 1 BF .hibytes %1011111111100101 -001679r 1 BF .hibytes %1011111111100110 -00167Ar 1 BF .hibytes %1011111111100111 -00167Br 1 BF .hibytes %1011111111101000 -00167Cr 1 BF .hibytes %1011111111101001 -00167Dr 1 BF .hibytes %1011111111101010 -00167Er 1 BF .hibytes %1011111111101011 -00167Fr 1 BF .hibytes %1011111111101100 -001680r 1 BF .hibytes %1011111111101101 -001681r 1 BF .hibytes %1011111111101110 -001682r 1 BF .hibytes %1011111111101111 -001683r 1 BF .hibytes %1011111111110000 -001684r 1 BF .hibytes %1011111111110001 -001685r 1 BF .hibytes %1011111111110010 -001686r 1 BF .hibytes %1011111111110011 -001687r 1 BF .hibytes %1011111111110100 -001688r 1 BF .hibytes %1011111111110101 -001689r 1 BF .hibytes %1011111111110110 -00168Ar 1 BF .hibytes %1011111111110111 -00168Br 1 BF .hibytes %1011111111111000 -00168Cr 1 BF .hibytes %1011111111111001 -00168Dr 1 BF .hibytes %1011111111111010 -00168Er 1 BF .hibytes %1011111111111011 -00168Fr 1 BF .hibytes %1011111111111100 -001690r 1 BF .hibytes %1011111111111101 -001691r 1 BF .hibytes %1011111111111110 -001692r 1 BF .hibytes %1011111111111111 -001693r 1 C0 .hibytes %1100000000000000 -001694r 1 C0 .hibytes %1100000000000001 -001695r 1 C0 .hibytes %1100000000000010 -001696r 1 C0 .hibytes %1100000000000011 -001697r 1 C0 .hibytes %1100000000000100 -001698r 1 C0 .hibytes %1100000000000101 -001699r 1 C0 .hibytes %1100000000000110 -00169Ar 1 C0 .hibytes %1100000000000111 -00169Br 1 C0 .hibytes %1100000000001000 -00169Cr 1 C0 .hibytes %1100000000001001 -00169Dr 1 C0 .hibytes %1100000000001010 -00169Er 1 C0 .hibytes %1100000000001011 -00169Fr 1 C0 .hibytes %1100000000001100 -0016A0r 1 C0 .hibytes %1100000000001101 -0016A1r 1 C0 .hibytes %1100000000001110 -0016A2r 1 C0 .hibytes %1100000000001111 -0016A3r 1 CF .hibytes %1100111111100001 -0016A4r 1 CF .hibytes %1100111111100010 -0016A5r 1 CF .hibytes %1100111111100011 -0016A6r 1 CF .hibytes %1100111111100100 -0016A7r 1 CF .hibytes %1100111111100101 -0016A8r 1 CF .hibytes %1100111111100110 -0016A9r 1 CF .hibytes %1100111111100111 -0016AAr 1 CF .hibytes %1100111111101000 -0016ABr 1 CF .hibytes %1100111111101001 -0016ACr 1 CF .hibytes %1100111111101010 -0016ADr 1 CF .hibytes %1100111111101011 -0016AEr 1 CF .hibytes %1100111111101100 -0016AFr 1 CF .hibytes %1100111111101101 -0016B0r 1 CF .hibytes %1100111111101110 -0016B1r 1 CF .hibytes %1100111111101111 -0016B2r 1 CF .hibytes %1100111111110000 -0016B3r 1 CF .hibytes %1100111111110001 -0016B4r 1 CF .hibytes %1100111111110010 -0016B5r 1 CF .hibytes %1100111111110011 -0016B6r 1 CF .hibytes %1100111111110100 -0016B7r 1 CF .hibytes %1100111111110101 -0016B8r 1 CF .hibytes %1100111111110110 -0016B9r 1 CF .hibytes %1100111111110111 -0016BAr 1 CF .hibytes %1100111111111000 -0016BBr 1 CF .hibytes %1100111111111001 -0016BCr 1 CF .hibytes %1100111111111010 -0016BDr 1 CF .hibytes %1100111111111011 -0016BEr 1 CF .hibytes %1100111111111100 -0016BFr 1 CF .hibytes %1100111111111101 -0016C0r 1 CF .hibytes %1100111111111110 -0016C1r 1 CF .hibytes %1100111111111111 -0016C2r 1 D0 .hibytes %1101000000000000 -0016C3r 1 D0 .hibytes %1101000000000001 -0016C4r 1 D0 .hibytes %1101000000000010 -0016C5r 1 D0 .hibytes %1101000000000011 -0016C6r 1 D0 .hibytes %1101000000000100 -0016C7r 1 D0 .hibytes %1101000000000101 -0016C8r 1 D0 .hibytes %1101000000000110 -0016C9r 1 D0 .hibytes %1101000000000111 -0016CAr 1 D0 .hibytes %1101000000001000 -0016CBr 1 D0 .hibytes %1101000000001001 -0016CCr 1 D0 .hibytes %1101000000001010 -0016CDr 1 D0 .hibytes %1101000000001011 -0016CEr 1 D0 .hibytes %1101000000001100 -0016CFr 1 D0 .hibytes %1101000000001101 -0016D0r 1 D0 .hibytes %1101000000001110 -0016D1r 1 D0 .hibytes %1101000000001111 -0016D2r 1 DF .hibytes %1101111111100001 -0016D3r 1 DF .hibytes %1101111111100010 -0016D4r 1 DF .hibytes %1101111111100011 -0016D5r 1 DF .hibytes %1101111111100100 -0016D6r 1 DF .hibytes %1101111111100101 -0016D7r 1 DF .hibytes %1101111111100110 -0016D8r 1 DF .hibytes %1101111111100111 -0016D9r 1 DF .hibytes %1101111111101000 -0016DAr 1 DF .hibytes %1101111111101001 -0016DBr 1 DF .hibytes %1101111111101010 -0016DCr 1 DF .hibytes %1101111111101011 -0016DDr 1 DF .hibytes %1101111111101100 -0016DEr 1 DF .hibytes %1101111111101101 -0016DFr 1 DF .hibytes %1101111111101110 -0016E0r 1 DF .hibytes %1101111111101111 -0016E1r 1 DF .hibytes %1101111111110000 -0016E2r 1 DF .hibytes %1101111111110001 -0016E3r 1 DF .hibytes %1101111111110010 -0016E4r 1 DF .hibytes %1101111111110011 -0016E5r 1 DF .hibytes %1101111111110100 -0016E6r 1 DF .hibytes %1101111111110101 -0016E7r 1 DF .hibytes %1101111111110110 -0016E8r 1 DF .hibytes %1101111111110111 -0016E9r 1 DF .hibytes %1101111111111000 -0016EAr 1 DF .hibytes %1101111111111001 -0016EBr 1 DF .hibytes %1101111111111010 -0016ECr 1 DF .hibytes %1101111111111011 -0016EDr 1 DF .hibytes %1101111111111100 -0016EEr 1 DF .hibytes %1101111111111101 -0016EFr 1 DF .hibytes %1101111111111110 -0016F0r 1 DF .hibytes %1101111111111111 -0016F1r 1 E0 .hibytes %1110000000000000 -0016F2r 1 E0 .hibytes %1110000000000001 -0016F3r 1 E0 .hibytes %1110000000000010 -0016F4r 1 E0 .hibytes %1110000000000011 -0016F5r 1 E0 .hibytes %1110000000000100 -0016F6r 1 E0 .hibytes %1110000000000101 -0016F7r 1 E0 .hibytes %1110000000000110 -0016F8r 1 E0 .hibytes %1110000000000111 -0016F9r 1 E0 .hibytes %1110000000001000 -0016FAr 1 E0 .hibytes %1110000000001001 -0016FBr 1 E0 .hibytes %1110000000001010 -0016FCr 1 E0 .hibytes %1110000000001011 -0016FDr 1 E0 .hibytes %1110000000001100 -0016FEr 1 E0 .hibytes %1110000000001101 -0016FFr 1 E0 .hibytes %1110000000001110 -001700r 1 E0 .hibytes %1110000000001111 -001701r 1 EF .hibytes %1110111111100001 -001702r 1 EF .hibytes %1110111111100010 -001703r 1 EF .hibytes %1110111111100011 -001704r 1 EF .hibytes %1110111111100100 -001705r 1 EF .hibytes %1110111111100101 -001706r 1 EF .hibytes %1110111111100110 -001707r 1 EF .hibytes %1110111111100111 -001708r 1 EF .hibytes %1110111111101000 -001709r 1 EF .hibytes %1110111111101001 -00170Ar 1 EF .hibytes %1110111111101010 -00170Br 1 EF .hibytes %1110111111101011 -00170Cr 1 EF .hibytes %1110111111101100 -00170Dr 1 EF .hibytes %1110111111101101 -00170Er 1 EF .hibytes %1110111111101110 -00170Fr 1 EF .hibytes %1110111111101111 -001710r 1 EF .hibytes %1110111111110000 -001711r 1 EF .hibytes %1110111111110001 -001712r 1 EF .hibytes %1110111111110010 -001713r 1 EF .hibytes %1110111111110011 -001714r 1 EF .hibytes %1110111111110100 -001715r 1 EF .hibytes %1110111111110101 -001716r 1 EF .hibytes %1110111111110110 -001717r 1 EF .hibytes %1110111111110111 -001718r 1 EF .hibytes %1110111111111000 -001719r 1 EF .hibytes %1110111111111001 -00171Ar 1 EF .hibytes %1110111111111010 -00171Br 1 EF .hibytes %1110111111111011 -00171Cr 1 EF .hibytes %1110111111111100 -00171Dr 1 EF .hibytes %1110111111111101 -00171Er 1 EF .hibytes %1110111111111110 -00171Fr 1 EF .hibytes %1110111111111111 -001720r 1 F0 .hibytes %1111000000000000 -001721r 1 F0 .hibytes %1111000000000001 -001722r 1 F0 .hibytes %1111000000000010 -001723r 1 F0 .hibytes %1111000000000011 -001724r 1 F0 .hibytes %1111000000000100 -001725r 1 F0 .hibytes %1111000000000101 -001726r 1 F0 .hibytes %1111000000000110 -001727r 1 F0 .hibytes %1111000000000111 -001728r 1 F0 .hibytes %1111000000001000 -001729r 1 F0 .hibytes %1111000000001001 -00172Ar 1 F0 .hibytes %1111000000001010 -00172Br 1 F0 .hibytes %1111000000001011 -00172Cr 1 F0 .hibytes %1111000000001100 -00172Dr 1 F0 .hibytes %1111000000001101 -00172Er 1 F0 .hibytes %1111000000001110 -00172Fr 1 F0 .hibytes %1111000000001111 -001730r 1 FF .hibytes %1111111111100001 -001731r 1 FF .hibytes %1111111111100010 -001732r 1 FF .hibytes %1111111111100011 -001733r 1 FF .hibytes %1111111111100100 -001734r 1 FF .hibytes %1111111111100101 -001735r 1 FF .hibytes %1111111111100110 -001736r 1 FF .hibytes %1111111111100111 -001737r 1 FF .hibytes %1111111111101000 -001738r 1 FF .hibytes %1111111111101001 -001739r 1 FF .hibytes %1111111111101010 -00173Ar 1 FF .hibytes %1111111111101011 -00173Br 1 FF .hibytes %1111111111101100 -00173Cr 1 FF .hibytes %1111111111101101 -00173Dr 1 FF .hibytes %1111111111101110 -00173Er 1 FF .hibytes %1111111111101111 -00173Fr 1 FF .hibytes %1111111111110000 -001740r 1 FF .hibytes %1111111111110001 -001741r 1 FF .hibytes %1111111111110010 -001742r 1 FF .hibytes %1111111111110011 -001743r 1 FF .hibytes %1111111111110100 -001744r 1 FF .hibytes %1111111111110101 -001745r 1 FF .hibytes %1111111111110110 -001746r 1 FF .hibytes %1111111111110111 -001747r 1 FF .hibytes %1111111111111000 -001748r 1 FF .hibytes %1111111111111001 -001749r 1 FF .hibytes %1111111111111010 -00174Ar 1 FF .hibytes %1111111111111011 -00174Br 1 FF .hibytes %1111111111111100 -00174Cr 1 FF .hibytes %1111111111111101 -00174Dr 1 FF .hibytes %1111111111111110 -00174Er 1 FF .hibytes %1111111111111111 +001584r 1 ; binary values, full length +001584r 1 00 .hibytes %0000000000000000 +001585r 1 00 .hibytes %0000000000000001 +001586r 1 00 .hibytes %0000000000000010 +001587r 1 00 .hibytes %0000000000000011 +001588r 1 00 .hibytes %0000000000000100 +001589r 1 00 .hibytes %0000000000000101 +00158Ar 1 00 .hibytes %0000000000000110 +00158Br 1 00 .hibytes %0000000000000111 +00158Cr 1 00 .hibytes %0000000000001000 +00158Dr 1 00 .hibytes %0000000000001001 +00158Er 1 00 .hibytes %0000000000001010 +00158Fr 1 00 .hibytes %0000000000001011 +001590r 1 00 .hibytes %0000000000001100 +001591r 1 00 .hibytes %0000000000001101 +001592r 1 00 .hibytes %0000000000001110 +001593r 1 00 .hibytes %0000000000001111 +001594r 1 00 .hibytes %0000000000010000 +001595r 1 00 .hibytes %0000000000010001 +001596r 1 00 .hibytes %0000000000010010 +001597r 1 00 .hibytes %0000000000010011 +001598r 1 00 .hibytes %0000000001110000 +001599r 1 00 .hibytes %0000000001110001 +00159Ar 1 00 .hibytes %0000000001110010 +00159Br 1 00 .hibytes %0000000001110011 +00159Cr 1 00 .hibytes %0000000001110100 +00159Dr 1 00 .hibytes %0000000001110101 +00159Er 1 00 .hibytes %0000000001110110 +00159Fr 1 00 .hibytes %0000000001110111 +0015A0r 1 00 .hibytes %0000000001111000 +0015A1r 1 00 .hibytes %0000000001111001 +0015A2r 1 00 .hibytes %0000000001111010 +0015A3r 1 00 .hibytes %0000000001111011 +0015A4r 1 00 .hibytes %0000000001111100 +0015A5r 1 00 .hibytes %0000000001111101 +0015A6r 1 00 .hibytes %0000000001111110 +0015A7r 1 00 .hibytes %0000000001111111 +0015A8r 1 00 .hibytes %0000000010000000 +0015A9r 1 00 .hibytes %0000000010000001 +0015AAr 1 00 .hibytes %0000000010000010 +0015ABr 1 00 .hibytes %0000000010000011 +0015ACr 1 00 .hibytes %0000000010000100 +0015ADr 1 00 .hibytes %0000000010000101 +0015AEr 1 00 .hibytes %0000000010000110 +0015AFr 1 00 .hibytes %0000000011110000 +0015B0r 1 00 .hibytes %0000000011110001 +0015B1r 1 00 .hibytes %0000000011110010 +0015B2r 1 00 .hibytes %0000000011110011 +0015B3r 1 00 .hibytes %0000000011110100 +0015B4r 1 00 .hibytes %0000000011110101 +0015B5r 1 00 .hibytes %0000000011110110 +0015B6r 1 00 .hibytes %0000000011110111 +0015B7r 1 00 .hibytes %0000000011111000 +0015B8r 1 00 .hibytes %0000000011111001 +0015B9r 1 00 .hibytes %0000000011111010 +0015BAr 1 00 .hibytes %0000000011111011 +0015BBr 1 00 .hibytes %0000000011111100 +0015BCr 1 00 .hibytes %0000000011111101 +0015BDr 1 00 .hibytes %0000000011111110 +0015BEr 1 00 .hibytes %0000000011111111 +0015BFr 1 01 .hibytes %0000000100000000 +0015C0r 1 01 .hibytes %0000000100000001 +0015C1r 1 01 .hibytes %0000000100000010 +0015C2r 1 01 .hibytes %0000000100000011 +0015C3r 1 0F .hibytes %0000111111010010 +0015C4r 1 0F .hibytes %0000111111010011 +0015C5r 1 0F .hibytes %0000111111010100 +0015C6r 1 0F .hibytes %0000111111010101 +0015C7r 1 0F .hibytes %0000111111010110 +0015C8r 1 0F .hibytes %0000111111010111 +0015C9r 1 0F .hibytes %0000111111011000 +0015CAr 1 0F .hibytes %0000111111011001 +0015CBr 1 0F .hibytes %0000111111011010 +0015CCr 1 0F .hibytes %0000111111011011 +0015CDr 1 0F .hibytes %0000111111011100 +0015CEr 1 0F .hibytes %0000111111011101 +0015CFr 1 0F .hibytes %0000111111011110 +0015D0r 1 0F .hibytes %0000111111011111 +0015D1r 1 0F .hibytes %0000111111100000 +0015D2r 1 0F .hibytes %0000111111100001 +0015D3r 1 0F .hibytes %0000111111100010 +0015D4r 1 0F .hibytes %0000111111100011 +0015D5r 1 0F .hibytes %0000111111100100 +0015D6r 1 0F .hibytes %0000111111100101 +0015D7r 1 0F .hibytes %0000111111100110 +0015D8r 1 0F .hibytes %0000111111100111 +0015D9r 1 0F .hibytes %0000111111101000 +0015DAr 1 0F .hibytes %0000111111101001 +0015DBr 1 0F .hibytes %0000111111101010 +0015DCr 1 0F .hibytes %0000111111101011 +0015DDr 1 0F .hibytes %0000111111101100 +0015DEr 1 0F .hibytes %0000111111101101 +0015DFr 1 0F .hibytes %0000111111101110 +0015E0r 1 0F .hibytes %0000111111101111 +0015E1r 1 0F .hibytes %0000111111110000 +0015E2r 1 0F .hibytes %0000111111110001 +0015E3r 1 0F .hibytes %0000111111110010 +0015E4r 1 0F .hibytes %0000111111110011 +0015E5r 1 0F .hibytes %0000111111110100 +0015E6r 1 0F .hibytes %0000111111110101 +0015E7r 1 0F .hibytes %0000111111110110 +0015E8r 1 0F .hibytes %0000111111110111 +0015E9r 1 0F .hibytes %0000111111111000 +0015EAr 1 0F .hibytes %0000111111111001 +0015EBr 1 0F .hibytes %0000111111111010 +0015ECr 1 0F .hibytes %0000111111111011 +0015EDr 1 0F .hibytes %0000111111111100 +0015EEr 1 0F .hibytes %0000111111111101 +0015EFr 1 0F .hibytes %0000111111111110 +0015F0r 1 0F .hibytes %0000111111111111 +0015F1r 1 10 .hibytes %0001000000000000 +0015F2r 1 10 .hibytes %0001000000000001 +0015F3r 1 10 .hibytes %0001000000000010 +0015F4r 1 10 .hibytes %0001000000000011 +0015F5r 1 10 .hibytes %0001000000000100 +0015F6r 1 10 .hibytes %0001000000000101 +0015F7r 1 10 .hibytes %0001000000000110 +0015F8r 1 10 .hibytes %0001000000000111 +0015F9r 1 10 .hibytes %0001000000001000 +0015FAr 1 7F .hibytes %0111111111110000 +0015FBr 1 7F .hibytes %0111111111110001 +0015FCr 1 7F .hibytes %0111111111110010 +0015FDr 1 7F .hibytes %0111111111110011 +0015FEr 1 7F .hibytes %0111111111110100 +0015FFr 1 7F .hibytes %0111111111110101 +001600r 1 7F .hibytes %0111111111110110 +001601r 1 7F .hibytes %0111111111110111 +001602r 1 7F .hibytes %0111111111111000 +001603r 1 7F .hibytes %0111111111111001 +001604r 1 7F .hibytes %0111111111111010 +001605r 1 7F .hibytes %0111111111111011 +001606r 1 7F .hibytes %0111111111111100 +001607r 1 7F .hibytes %0111111111111101 +001608r 1 7F .hibytes %0111111111111110 +001609r 1 7F .hibytes %0111111111111111 +00160Ar 1 80 .hibytes %1000000000000000 +00160Br 1 80 .hibytes %1000000000000001 +00160Cr 1 80 .hibytes %1000000000000010 +00160Dr 1 80 .hibytes %1000000000000011 +00160Er 1 80 .hibytes %1000000000000100 +00160Fr 1 80 .hibytes %1000000000000101 +001610r 1 80 .hibytes %1000000000000110 +001611r 1 80 .hibytes %1000000000000111 +001612r 1 80 .hibytes %1000000000001000 +001613r 1 80 .hibytes %1000000000001001 +001614r 1 80 .hibytes %1000000000001010 +001615r 1 80 .hibytes %1000000000001011 +001616r 1 9F .hibytes %1001111111100001 +001617r 1 9F .hibytes %1001111111100010 +001618r 1 9F .hibytes %1001111111100011 +001619r 1 9F .hibytes %1001111111100100 +00161Ar 1 9F .hibytes %1001111111100101 +00161Br 1 9F .hibytes %1001111111100110 +00161Cr 1 9F .hibytes %1001111111100111 +00161Dr 1 9F .hibytes %1001111111101000 +00161Er 1 9F .hibytes %1001111111101001 +00161Fr 1 9F .hibytes %1001111111101010 +001620r 1 9F .hibytes %1001111111101011 +001621r 1 9F .hibytes %1001111111101100 +001622r 1 9F .hibytes %1001111111101101 +001623r 1 9F .hibytes %1001111111101110 +001624r 1 9F .hibytes %1001111111101111 +001625r 1 9F .hibytes %1001111111110000 +001626r 1 9F .hibytes %1001111111110001 +001627r 1 9F .hibytes %1001111111110010 +001628r 1 9F .hibytes %1001111111110011 +001629r 1 9F .hibytes %1001111111110100 +00162Ar 1 9F .hibytes %1001111111110101 +00162Br 1 9F .hibytes %1001111111110110 +00162Cr 1 9F .hibytes %1001111111110111 +00162Dr 1 9F .hibytes %1001111111111000 +00162Er 1 9F .hibytes %1001111111111001 +00162Fr 1 9F .hibytes %1001111111111010 +001630r 1 9F .hibytes %1001111111111011 +001631r 1 9F .hibytes %1001111111111100 +001632r 1 9F .hibytes %1001111111111101 +001633r 1 9F .hibytes %1001111111111110 +001634r 1 9F .hibytes %1001111111111111 +001635r 1 A0 .hibytes %1010000000000000 +001636r 1 A0 .hibytes %1010000000000001 +001637r 1 A0 .hibytes %1010000000000010 +001638r 1 A0 .hibytes %1010000000000011 +001639r 1 A0 .hibytes %1010000000000100 +00163Ar 1 A0 .hibytes %1010000000000101 +00163Br 1 A0 .hibytes %1010000000000110 +00163Cr 1 A0 .hibytes %1010000000000111 +00163Dr 1 A0 .hibytes %1010000000001000 +00163Er 1 A0 .hibytes %1010000000001001 +00163Fr 1 A0 .hibytes %1010000000001010 +001640r 1 A0 .hibytes %1010000000001011 +001641r 1 A0 .hibytes %1010000000001100 +001642r 1 A0 .hibytes %1010000000001101 +001643r 1 A0 .hibytes %1010000000001110 +001644r 1 A0 .hibytes %1010000000001111 +001645r 1 AF .hibytes %1010111111100001 +001646r 1 AF .hibytes %1010111111100010 +001647r 1 AF .hibytes %1010111111100011 +001648r 1 AF .hibytes %1010111111100100 +001649r 1 AF .hibytes %1010111111100101 +00164Ar 1 AF .hibytes %1010111111100110 +00164Br 1 AF .hibytes %1010111111100111 +00164Cr 1 AF .hibytes %1010111111101000 +00164Dr 1 AF .hibytes %1010111111101001 +00164Er 1 AF .hibytes %1010111111101010 +00164Fr 1 AF .hibytes %1010111111101011 +001650r 1 AF .hibytes %1010111111101100 +001651r 1 AF .hibytes %1010111111101101 +001652r 1 AF .hibytes %1010111111101110 +001653r 1 AF .hibytes %1010111111101111 +001654r 1 AF .hibytes %1010111111110000 +001655r 1 AF .hibytes %1010111111110001 +001656r 1 AF .hibytes %1010111111110010 +001657r 1 AF .hibytes %1010111111110011 +001658r 1 AF .hibytes %1010111111110100 +001659r 1 AF .hibytes %1010111111110101 +00165Ar 1 AF .hibytes %1010111111110110 +00165Br 1 AF .hibytes %1010111111110111 +00165Cr 1 AF .hibytes %1010111111111000 +00165Dr 1 AF .hibytes %1010111111111001 +00165Er 1 AF .hibytes %1010111111111010 +00165Fr 1 AF .hibytes %1010111111111011 +001660r 1 AF .hibytes %1010111111111100 +001661r 1 AF .hibytes %1010111111111101 +001662r 1 AF .hibytes %1010111111111110 +001663r 1 AF .hibytes %1010111111111111 +001664r 1 B0 .hibytes %1011000000000000 +001665r 1 B0 .hibytes %1011000000000001 +001666r 1 B0 .hibytes %1011000000000010 +001667r 1 B0 .hibytes %1011000000000011 +001668r 1 B0 .hibytes %1011000000000100 +001669r 1 B0 .hibytes %1011000000000101 +00166Ar 1 B0 .hibytes %1011000000000110 +00166Br 1 B0 .hibytes %1011000000000111 +00166Cr 1 B0 .hibytes %1011000000001000 +00166Dr 1 B0 .hibytes %1011000000001001 +00166Er 1 B0 .hibytes %1011000000001010 +00166Fr 1 B0 .hibytes %1011000000001011 +001670r 1 B0 .hibytes %1011000000001100 +001671r 1 B0 .hibytes %1011000000001101 +001672r 1 B0 .hibytes %1011000000001110 +001673r 1 B0 .hibytes %1011000000001111 +001674r 1 BF .hibytes %1011111111100001 +001675r 1 BF .hibytes %1011111111100010 +001676r 1 BF .hibytes %1011111111100011 +001677r 1 BF .hibytes %1011111111100100 +001678r 1 BF .hibytes %1011111111100101 +001679r 1 BF .hibytes %1011111111100110 +00167Ar 1 BF .hibytes %1011111111100111 +00167Br 1 BF .hibytes %1011111111101000 +00167Cr 1 BF .hibytes %1011111111101001 +00167Dr 1 BF .hibytes %1011111111101010 +00167Er 1 BF .hibytes %1011111111101011 +00167Fr 1 BF .hibytes %1011111111101100 +001680r 1 BF .hibytes %1011111111101101 +001681r 1 BF .hibytes %1011111111101110 +001682r 1 BF .hibytes %1011111111101111 +001683r 1 BF .hibytes %1011111111110000 +001684r 1 BF .hibytes %1011111111110001 +001685r 1 BF .hibytes %1011111111110010 +001686r 1 BF .hibytes %1011111111110011 +001687r 1 BF .hibytes %1011111111110100 +001688r 1 BF .hibytes %1011111111110101 +001689r 1 BF .hibytes %1011111111110110 +00168Ar 1 BF .hibytes %1011111111110111 +00168Br 1 BF .hibytes %1011111111111000 +00168Cr 1 BF .hibytes %1011111111111001 +00168Dr 1 BF .hibytes %1011111111111010 +00168Er 1 BF .hibytes %1011111111111011 +00168Fr 1 BF .hibytes %1011111111111100 +001690r 1 BF .hibytes %1011111111111101 +001691r 1 BF .hibytes %1011111111111110 +001692r 1 BF .hibytes %1011111111111111 +001693r 1 C0 .hibytes %1100000000000000 +001694r 1 C0 .hibytes %1100000000000001 +001695r 1 C0 .hibytes %1100000000000010 +001696r 1 C0 .hibytes %1100000000000011 +001697r 1 C0 .hibytes %1100000000000100 +001698r 1 C0 .hibytes %1100000000000101 +001699r 1 C0 .hibytes %1100000000000110 +00169Ar 1 C0 .hibytes %1100000000000111 +00169Br 1 C0 .hibytes %1100000000001000 +00169Cr 1 C0 .hibytes %1100000000001001 +00169Dr 1 C0 .hibytes %1100000000001010 +00169Er 1 C0 .hibytes %1100000000001011 +00169Fr 1 C0 .hibytes %1100000000001100 +0016A0r 1 C0 .hibytes %1100000000001101 +0016A1r 1 C0 .hibytes %1100000000001110 +0016A2r 1 C0 .hibytes %1100000000001111 +0016A3r 1 CF .hibytes %1100111111100001 +0016A4r 1 CF .hibytes %1100111111100010 +0016A5r 1 CF .hibytes %1100111111100011 +0016A6r 1 CF .hibytes %1100111111100100 +0016A7r 1 CF .hibytes %1100111111100101 +0016A8r 1 CF .hibytes %1100111111100110 +0016A9r 1 CF .hibytes %1100111111100111 +0016AAr 1 CF .hibytes %1100111111101000 +0016ABr 1 CF .hibytes %1100111111101001 +0016ACr 1 CF .hibytes %1100111111101010 +0016ADr 1 CF .hibytes %1100111111101011 +0016AEr 1 CF .hibytes %1100111111101100 +0016AFr 1 CF .hibytes %1100111111101101 +0016B0r 1 CF .hibytes %1100111111101110 +0016B1r 1 CF .hibytes %1100111111101111 +0016B2r 1 CF .hibytes %1100111111110000 +0016B3r 1 CF .hibytes %1100111111110001 +0016B4r 1 CF .hibytes %1100111111110010 +0016B5r 1 CF .hibytes %1100111111110011 +0016B6r 1 CF .hibytes %1100111111110100 +0016B7r 1 CF .hibytes %1100111111110101 +0016B8r 1 CF .hibytes %1100111111110110 +0016B9r 1 CF .hibytes %1100111111110111 +0016BAr 1 CF .hibytes %1100111111111000 +0016BBr 1 CF .hibytes %1100111111111001 +0016BCr 1 CF .hibytes %1100111111111010 +0016BDr 1 CF .hibytes %1100111111111011 +0016BEr 1 CF .hibytes %1100111111111100 +0016BFr 1 CF .hibytes %1100111111111101 +0016C0r 1 CF .hibytes %1100111111111110 +0016C1r 1 CF .hibytes %1100111111111111 +0016C2r 1 D0 .hibytes %1101000000000000 +0016C3r 1 D0 .hibytes %1101000000000001 +0016C4r 1 D0 .hibytes %1101000000000010 +0016C5r 1 D0 .hibytes %1101000000000011 +0016C6r 1 D0 .hibytes %1101000000000100 +0016C7r 1 D0 .hibytes %1101000000000101 +0016C8r 1 D0 .hibytes %1101000000000110 +0016C9r 1 D0 .hibytes %1101000000000111 +0016CAr 1 D0 .hibytes %1101000000001000 +0016CBr 1 D0 .hibytes %1101000000001001 +0016CCr 1 D0 .hibytes %1101000000001010 +0016CDr 1 D0 .hibytes %1101000000001011 +0016CEr 1 D0 .hibytes %1101000000001100 +0016CFr 1 D0 .hibytes %1101000000001101 +0016D0r 1 D0 .hibytes %1101000000001110 +0016D1r 1 D0 .hibytes %1101000000001111 +0016D2r 1 DF .hibytes %1101111111100001 +0016D3r 1 DF .hibytes %1101111111100010 +0016D4r 1 DF .hibytes %1101111111100011 +0016D5r 1 DF .hibytes %1101111111100100 +0016D6r 1 DF .hibytes %1101111111100101 +0016D7r 1 DF .hibytes %1101111111100110 +0016D8r 1 DF .hibytes %1101111111100111 +0016D9r 1 DF .hibytes %1101111111101000 +0016DAr 1 DF .hibytes %1101111111101001 +0016DBr 1 DF .hibytes %1101111111101010 +0016DCr 1 DF .hibytes %1101111111101011 +0016DDr 1 DF .hibytes %1101111111101100 +0016DEr 1 DF .hibytes %1101111111101101 +0016DFr 1 DF .hibytes %1101111111101110 +0016E0r 1 DF .hibytes %1101111111101111 +0016E1r 1 DF .hibytes %1101111111110000 +0016E2r 1 DF .hibytes %1101111111110001 +0016E3r 1 DF .hibytes %1101111111110010 +0016E4r 1 DF .hibytes %1101111111110011 +0016E5r 1 DF .hibytes %1101111111110100 +0016E6r 1 DF .hibytes %1101111111110101 +0016E7r 1 DF .hibytes %1101111111110110 +0016E8r 1 DF .hibytes %1101111111110111 +0016E9r 1 DF .hibytes %1101111111111000 +0016EAr 1 DF .hibytes %1101111111111001 +0016EBr 1 DF .hibytes %1101111111111010 +0016ECr 1 DF .hibytes %1101111111111011 +0016EDr 1 DF .hibytes %1101111111111100 +0016EEr 1 DF .hibytes %1101111111111101 +0016EFr 1 DF .hibytes %1101111111111110 +0016F0r 1 DF .hibytes %1101111111111111 +0016F1r 1 E0 .hibytes %1110000000000000 +0016F2r 1 E0 .hibytes %1110000000000001 +0016F3r 1 E0 .hibytes %1110000000000010 +0016F4r 1 E0 .hibytes %1110000000000011 +0016F5r 1 E0 .hibytes %1110000000000100 +0016F6r 1 E0 .hibytes %1110000000000101 +0016F7r 1 E0 .hibytes %1110000000000110 +0016F8r 1 E0 .hibytes %1110000000000111 +0016F9r 1 E0 .hibytes %1110000000001000 +0016FAr 1 E0 .hibytes %1110000000001001 +0016FBr 1 E0 .hibytes %1110000000001010 +0016FCr 1 E0 .hibytes %1110000000001011 +0016FDr 1 E0 .hibytes %1110000000001100 +0016FEr 1 E0 .hibytes %1110000000001101 +0016FFr 1 E0 .hibytes %1110000000001110 +001700r 1 E0 .hibytes %1110000000001111 +001701r 1 EF .hibytes %1110111111100001 +001702r 1 EF .hibytes %1110111111100010 +001703r 1 EF .hibytes %1110111111100011 +001704r 1 EF .hibytes %1110111111100100 +001705r 1 EF .hibytes %1110111111100101 +001706r 1 EF .hibytes %1110111111100110 +001707r 1 EF .hibytes %1110111111100111 +001708r 1 EF .hibytes %1110111111101000 +001709r 1 EF .hibytes %1110111111101001 +00170Ar 1 EF .hibytes %1110111111101010 +00170Br 1 EF .hibytes %1110111111101011 +00170Cr 1 EF .hibytes %1110111111101100 +00170Dr 1 EF .hibytes %1110111111101101 +00170Er 1 EF .hibytes %1110111111101110 +00170Fr 1 EF .hibytes %1110111111101111 +001710r 1 EF .hibytes %1110111111110000 +001711r 1 EF .hibytes %1110111111110001 +001712r 1 EF .hibytes %1110111111110010 +001713r 1 EF .hibytes %1110111111110011 +001714r 1 EF .hibytes %1110111111110100 +001715r 1 EF .hibytes %1110111111110101 +001716r 1 EF .hibytes %1110111111110110 +001717r 1 EF .hibytes %1110111111110111 +001718r 1 EF .hibytes %1110111111111000 +001719r 1 EF .hibytes %1110111111111001 +00171Ar 1 EF .hibytes %1110111111111010 +00171Br 1 EF .hibytes %1110111111111011 +00171Cr 1 EF .hibytes %1110111111111100 +00171Dr 1 EF .hibytes %1110111111111101 +00171Er 1 EF .hibytes %1110111111111110 +00171Fr 1 EF .hibytes %1110111111111111 +001720r 1 F0 .hibytes %1111000000000000 +001721r 1 F0 .hibytes %1111000000000001 +001722r 1 F0 .hibytes %1111000000000010 +001723r 1 F0 .hibytes %1111000000000011 +001724r 1 F0 .hibytes %1111000000000100 +001725r 1 F0 .hibytes %1111000000000101 +001726r 1 F0 .hibytes %1111000000000110 +001727r 1 F0 .hibytes %1111000000000111 +001728r 1 F0 .hibytes %1111000000001000 +001729r 1 F0 .hibytes %1111000000001001 +00172Ar 1 F0 .hibytes %1111000000001010 +00172Br 1 F0 .hibytes %1111000000001011 +00172Cr 1 F0 .hibytes %1111000000001100 +00172Dr 1 F0 .hibytes %1111000000001101 +00172Er 1 F0 .hibytes %1111000000001110 +00172Fr 1 F0 .hibytes %1111000000001111 +001730r 1 FF .hibytes %1111111111100001 +001731r 1 FF .hibytes %1111111111100010 +001732r 1 FF .hibytes %1111111111100011 +001733r 1 FF .hibytes %1111111111100100 +001734r 1 FF .hibytes %1111111111100101 +001735r 1 FF .hibytes %1111111111100110 +001736r 1 FF .hibytes %1111111111100111 +001737r 1 FF .hibytes %1111111111101000 +001738r 1 FF .hibytes %1111111111101001 +001739r 1 FF .hibytes %1111111111101010 +00173Ar 1 FF .hibytes %1111111111101011 +00173Br 1 FF .hibytes %1111111111101100 +00173Cr 1 FF .hibytes %1111111111101101 +00173Dr 1 FF .hibytes %1111111111101110 +00173Er 1 FF .hibytes %1111111111101111 +00173Fr 1 FF .hibytes %1111111111110000 +001740r 1 FF .hibytes %1111111111110001 +001741r 1 FF .hibytes %1111111111110010 +001742r 1 FF .hibytes %1111111111110011 +001743r 1 FF .hibytes %1111111111110100 +001744r 1 FF .hibytes %1111111111110101 +001745r 1 FF .hibytes %1111111111110110 +001746r 1 FF .hibytes %1111111111110111 +001747r 1 FF .hibytes %1111111111111000 +001748r 1 FF .hibytes %1111111111111001 +001749r 1 FF .hibytes %1111111111111010 +00174Ar 1 FF .hibytes %1111111111111011 +00174Br 1 FF .hibytes %1111111111111100 +00174Cr 1 FF .hibytes %1111111111111101 +00174Dr 1 FF .hibytes %1111111111111110 +00174Er 1 FF .hibytes %1111111111111111 00174Fr 1 -00174Fr 1 ; multiple values on one line, decimal -00174Fr 1 00 00 00 00 .hibytes 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +00174Fr 1 ; multiple values on one line, decimal +00174Fr 1 00 00 00 00 .hibytes 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 001753r 1 00 00 00 00 001757r 1 00 00 00 00 -00175Fr 1 00 00 00 00 .hibytes 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +00175Fr 1 00 00 00 00 .hibytes 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 001763r 1 00 00 00 00 001767r 1 00 00 00 00 -00176Fr 1 00 00 00 00 .hibytes 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +00176Fr 1 00 00 00 00 .hibytes 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 001773r 1 00 00 00 00 001777r 1 00 00 00 00 -00177Fr 1 00 00 00 00 .hibytes 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +00177Fr 1 00 00 00 00 .hibytes 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 001783r 1 00 00 00 00 001787r 1 00 00 00 00 -00178Fr 1 00 00 00 00 .hibytes 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +00178Fr 1 00 00 00 00 .hibytes 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 001793r 1 00 00 00 00 001797r 1 00 00 00 00 -00179Fr 1 01 01 01 01 .hibytes 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 +00179Fr 1 01 01 01 01 .hibytes 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 0017A3r 1 01 01 01 01 0017A7r 1 01 01 01 01 -0017AFr 1 0F 0F 0F 0F .hibytes 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 +0017AFr 1 0F 0F 0F 0F .hibytes 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 0017B3r 1 0F 0F 0F 0F 0017B7r 1 0F 0F 0F 0F -0017BFr 1 0F 0F 0F 0F .hibytes 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 +0017BFr 1 0F 0F 0F 0F .hibytes 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 0017C3r 1 0F 0F 0F 0F 0017C7r 1 0F 0F 0F 0F -0017CFr 1 10 10 10 10 .hibytes 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 +0017CFr 1 10 10 10 10 .hibytes 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 0017D3r 1 10 10 10 10 0017D7r 1 10 10 10 10 -0017DFr 1 7F 7F 7F 7F .hibytes 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 +0017DFr 1 7F 7F 7F 7F .hibytes 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 0017E3r 1 7F 7F 7F 7F 0017E7r 1 7F 7F 7F 7F -0017EFr 1 80 80 80 80 .hibytes 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 +0017EFr 1 80 80 80 80 .hibytes 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 0017F3r 1 80 80 80 80 0017F7r 1 80 80 80 80 -0017FFr 1 9F 9F 9F 9F .hibytes 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 +0017FFr 1 9F 9F 9F 9F .hibytes 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 001803r 1 9F 9F 9F 9F 001807r 1 9F 9F 9F 9F -00180Fr 1 A0 A0 A0 A0 .hibytes 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 +00180Fr 1 A0 A0 A0 A0 .hibytes 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 001813r 1 A0 A0 A0 A0 001817r 1 A0 A0 A0 A0 -00181Fr 1 AF AF AF AF .hibytes 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 +00181Fr 1 AF AF AF AF .hibytes 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 001823r 1 AF AF AF AF 001827r 1 AF AF AF AF -00182Fr 1 B0 B0 B0 B0 .hibytes 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 +00182Fr 1 B0 B0 B0 B0 .hibytes 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 001833r 1 B0 B0 B0 B0 001837r 1 B0 B0 B0 B0 -00183Fr 1 BF BF BF BF .hibytes 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 +00183Fr 1 BF BF BF BF .hibytes 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 001843r 1 BF BF BF BF 001847r 1 BF BF BF BF -00184Fr 1 C0 C0 C0 C0 .hibytes 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 +00184Fr 1 C0 C0 C0 C0 .hibytes 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 001853r 1 C0 C0 C0 C0 001857r 1 C0 C0 C0 C0 -00185Fr 1 CF CF CF CF .hibytes 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 +00185Fr 1 CF CF CF CF .hibytes 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 001863r 1 CF CF CF CF 001867r 1 CF CF CF CF -00186Fr 1 D0 D0 D0 D0 .hibytes 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 +00186Fr 1 D0 D0 D0 D0 .hibytes 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 001873r 1 D0 D0 D0 D0 001877r 1 D0 D0 D0 D0 -00187Fr 1 DF DF DF DF .hibytes 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 +00187Fr 1 DF DF DF DF .hibytes 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 001883r 1 DF DF DF DF 001887r 1 DF DF DF DF -00188Fr 1 E0 E0 E0 E0 .hibytes 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 +00188Fr 1 E0 E0 E0 E0 .hibytes 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 001893r 1 E0 E0 E0 E0 001897r 1 E0 E0 E0 E0 -00189Fr 1 EF EF EF EF .hibytes 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 +00189Fr 1 EF EF EF EF .hibytes 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 0018A3r 1 EF EF EF EF 0018A7r 1 EF EF EF EF -0018AFr 1 F0 F0 F0 F0 .hibytes 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 +0018AFr 1 F0 F0 F0 F0 .hibytes 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 0018B3r 1 F0 F0 F0 F0 0018B7r 1 F0 F0 F0 F0 -0018BFr 1 FF FF FF FF .hibytes 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 +0018BFr 1 FF FF FF FF .hibytes 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 0018C3r 1 FF FF FF FF 0018C7r 1 FF FF FF FF 0018CFr 1 -0018CFr 1 ; multiple values on one line, hex -0018CFr 1 00 00 00 00 .hibytes $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +0018CFr 1 ; multiple values on one line, hex +0018CFr 1 00 00 00 00 .hibytes $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f 0018D3r 1 00 00 00 00 0018D7r 1 00 00 00 00 -0018DFr 1 00 00 00 00 .hibytes $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +0018DFr 1 00 00 00 00 .hibytes $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f 0018E3r 1 00 00 00 00 0018E7r 1 00 00 00 00 -0018EFr 1 00 00 00 00 .hibytes $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +0018EFr 1 00 00 00 00 .hibytes $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f 0018F3r 1 00 00 00 00 0018F7r 1 00 00 00 00 -0018FFr 1 00 00 00 00 .hibytes $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +0018FFr 1 00 00 00 00 .hibytes $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f 001903r 1 00 00 00 00 001907r 1 00 00 00 00 -00190Fr 1 00 00 00 00 .hibytes $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +00190Fr 1 00 00 00 00 .hibytes $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff 001913r 1 00 00 00 00 001917r 1 00 00 00 00 -00191Fr 1 01 01 01 01 .hibytes $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f +00191Fr 1 01 01 01 01 .hibytes $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f 001923r 1 01 01 01 01 001927r 1 01 01 01 01 -00192Fr 1 0F 0F 0F 0F .hibytes $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef +00192Fr 1 0F 0F 0F 0F .hibytes $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef 001933r 1 0F 0F 0F 0F 001937r 1 0F 0F 0F 0F -00193Fr 1 0F 0F 0F 0F .hibytes $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff +00193Fr 1 0F 0F 0F 0F .hibytes $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff 001943r 1 0F 0F 0F 0F 001947r 1 0F 0F 0F 0F -00194Fr 1 10 10 10 10 .hibytes $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f +00194Fr 1 10 10 10 10 .hibytes $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f 001953r 1 10 10 10 10 001957r 1 10 10 10 10 -00195Fr 1 7F 7F 7F 7F .hibytes $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff +00195Fr 1 7F 7F 7F 7F .hibytes $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff 001963r 1 7F 7F 7F 7F 001967r 1 7F 7F 7F 7F -00196Fr 1 80 80 80 80 .hibytes $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f +00196Fr 1 80 80 80 80 .hibytes $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f 001973r 1 80 80 80 80 001977r 1 80 80 80 80 -00197Fr 1 9F 9F 9F 9F .hibytes $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff +00197Fr 1 9F 9F 9F 9F .hibytes $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff 001983r 1 9F 9F 9F 9F 001987r 1 9F 9F 9F 9F -00198Fr 1 A0 A0 A0 A0 .hibytes $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f +00198Fr 1 A0 A0 A0 A0 .hibytes $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f 001993r 1 A0 A0 A0 A0 001997r 1 A0 A0 A0 A0 -00199Fr 1 AF AF AF AF .hibytes $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff +00199Fr 1 AF AF AF AF .hibytes $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff 0019A3r 1 AF AF AF AF 0019A7r 1 AF AF AF AF -0019AFr 1 B0 B0 B0 B0 .hibytes $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f +0019AFr 1 B0 B0 B0 B0 .hibytes $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f 0019B3r 1 B0 B0 B0 B0 0019B7r 1 B0 B0 B0 B0 -0019BFr 1 BF BF BF BF .hibytes $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff +0019BFr 1 BF BF BF BF .hibytes $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff 0019C3r 1 BF BF BF BF 0019C7r 1 BF BF BF BF -0019CFr 1 C0 C0 C0 C0 .hibytes $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f +0019CFr 1 C0 C0 C0 C0 .hibytes $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f 0019D3r 1 C0 C0 C0 C0 0019D7r 1 C0 C0 C0 C0 -0019DFr 1 CF CF CF CF .hibytes $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff +0019DFr 1 CF CF CF CF .hibytes $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff 0019E3r 1 CF CF CF CF 0019E7r 1 CF CF CF CF -0019EFr 1 D0 D0 D0 D0 .hibytes $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f +0019EFr 1 D0 D0 D0 D0 .hibytes $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f 0019F3r 1 D0 D0 D0 D0 0019F7r 1 D0 D0 D0 D0 -0019FFr 1 DF DF DF DF .hibytes $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff +0019FFr 1 DF DF DF DF .hibytes $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff 001A03r 1 DF DF DF DF 001A07r 1 DF DF DF DF -001A0Fr 1 E0 E0 E0 E0 .hibytes $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f +001A0Fr 1 E0 E0 E0 E0 .hibytes $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f 001A13r 1 E0 E0 E0 E0 001A17r 1 E0 E0 E0 E0 -001A1Fr 1 EF EF EF EF .hibytes $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff +001A1Fr 1 EF EF EF EF .hibytes $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff 001A23r 1 EF EF EF EF 001A27r 1 EF EF EF EF -001A2Fr 1 F0 F0 F0 F0 .hibytes $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f +001A2Fr 1 F0 F0 F0 F0 .hibytes $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f 001A33r 1 F0 F0 F0 F0 001A37r 1 F0 F0 F0 F0 -001A3Fr 1 FF FF FF FF .hibytes $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff +001A3Fr 1 FF FF FF FF .hibytes $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff 001A43r 1 FF FF FF FF 001A47r 1 FF FF FF FF 001A4Fr 1 -001A4Fr 1 ; multiple values on one line, alternative hex -001A4Fr 1 00 00 00 00 .hibytes 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +001A4Fr 1 ; multiple values on one line, alternative hex +001A4Fr 1 00 00 00 00 .hibytes 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh 001A53r 1 00 00 00 00 001A57r 1 00 00 00 00 -001A5Fr 1 00 00 00 00 .hibytes 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +001A5Fr 1 00 00 00 00 .hibytes 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh 001A63r 1 00 00 00 00 001A67r 1 00 00 00 00 -001A6Fr 1 00 00 00 00 .hibytes 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +001A6Fr 1 00 00 00 00 .hibytes 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh 001A73r 1 00 00 00 00 001A77r 1 00 00 00 00 -001A7Fr 1 00 00 00 00 .hibytes 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +001A7Fr 1 00 00 00 00 .hibytes 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh 001A83r 1 00 00 00 00 001A87r 1 00 00 00 00 -001A8Fr 1 00 00 00 00 .hibytes 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +001A8Fr 1 00 00 00 00 .hibytes 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh 001A93r 1 00 00 00 00 001A97r 1 00 00 00 00 -001A9Fr 1 01 01 01 01 .hibytes 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh +001A9Fr 1 01 01 01 01 .hibytes 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh 001AA3r 1 01 01 01 01 001AA7r 1 01 01 01 01 -001AAFr 1 0F 0F 0F 0F .hibytes 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh +001AAFr 1 0F 0F 0F 0F .hibytes 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh 001AB3r 1 0F 0F 0F 0F 001AB7r 1 0F 0F 0F 0F -001ABFr 1 0F 0F 0F 0F .hibytes 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh +001ABFr 1 0F 0F 0F 0F .hibytes 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh 001AC3r 1 0F 0F 0F 0F 001AC7r 1 0F 0F 0F 0F -001ACFr 1 10 10 10 10 .hibytes 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh +001ACFr 1 10 10 10 10 .hibytes 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh 001AD3r 1 10 10 10 10 001AD7r 1 10 10 10 10 -001ADFr 1 7F 7F 7F 7F .hibytes 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh +001ADFr 1 7F 7F 7F 7F .hibytes 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh 001AE3r 1 7F 7F 7F 7F 001AE7r 1 7F 7F 7F 7F -001AEFr 1 80 80 80 80 .hibytes 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh +001AEFr 1 80 80 80 80 .hibytes 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh 001AF3r 1 80 80 80 80 001AF7r 1 80 80 80 80 -001AFFr 1 9F 9F 9F 9F .hibytes 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh +001AFFr 1 9F 9F 9F 9F .hibytes 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh 001B03r 1 9F 9F 9F 9F 001B07r 1 9F 9F 9F 9F -001B0Fr 1 A0 A0 A0 A0 .hibytes 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh +001B0Fr 1 A0 A0 A0 A0 .hibytes 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh 001B13r 1 A0 A0 A0 A0 001B17r 1 A0 A0 A0 A0 -001B1Fr 1 AF AF AF AF .hibytes 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh +001B1Fr 1 AF AF AF AF .hibytes 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh 001B23r 1 AF AF AF AF 001B27r 1 AF AF AF AF -001B2Fr 1 B0 B0 B0 B0 .hibytes 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh +001B2Fr 1 B0 B0 B0 B0 .hibytes 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh 001B33r 1 B0 B0 B0 B0 001B37r 1 B0 B0 B0 B0 -001B3Fr 1 BF BF BF BF .hibytes 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh +001B3Fr 1 BF BF BF BF .hibytes 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh 001B43r 1 BF BF BF BF 001B47r 1 BF BF BF BF -001B4Fr 1 C0 C0 C0 C0 .hibytes 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh +001B4Fr 1 C0 C0 C0 C0 .hibytes 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh 001B53r 1 C0 C0 C0 C0 001B57r 1 C0 C0 C0 C0 -001B5Fr 1 CF CF CF CF .hibytes 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh +001B5Fr 1 CF CF CF CF .hibytes 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh 001B63r 1 CF CF CF CF 001B67r 1 CF CF CF CF -001B6Fr 1 D0 D0 D0 D0 .hibytes 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh +001B6Fr 1 D0 D0 D0 D0 .hibytes 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh 001B73r 1 D0 D0 D0 D0 001B77r 1 D0 D0 D0 D0 -001B7Fr 1 DF DF DF DF .hibytes 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh +001B7Fr 1 DF DF DF DF .hibytes 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh 001B83r 1 DF DF DF DF 001B87r 1 DF DF DF DF -001B8Fr 1 E0 E0 E0 E0 .hibytes 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh +001B8Fr 1 E0 E0 E0 E0 .hibytes 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh 001B93r 1 E0 E0 E0 E0 001B97r 1 E0 E0 E0 E0 -001B9Fr 1 EF EF EF EF .hibytes 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh +001B9Fr 1 EF EF EF EF .hibytes 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh 001BA3r 1 EF EF EF EF 001BA7r 1 EF EF EF EF -001BAFr 1 F0 F0 F0 F0 .hibytes 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh +001BAFr 1 F0 F0 F0 F0 .hibytes 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh 001BB3r 1 F0 F0 F0 F0 001BB7r 1 F0 F0 F0 F0 -001BBFr 1 FF FF FF FF .hibytes 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh +001BBFr 1 FF FF FF FF .hibytes 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh 001BC3r 1 FF FF FF FF 001BC7r 1 FF FF FF FF 001BCFr 1 -001BCFr 1 ; mix some variants -001BCFr 1 00 00 00 00 .hibytes 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +001BCFr 1 ; mix some variants +001BCFr 1 00 00 00 00 .hibytes 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh 001BD3r 1 00 00 00 00 001BD7r 1 00 00 00 00 001BDEr 1 diff --git a/test/asm/listing/106-hibytes.s b/test/asm/listing/106-hibytes.s index 2a94672a3..6a4e575c7 100644 --- a/test/asm/listing/106-hibytes.s +++ b/test/asm/listing/106-hibytes.s @@ -1,6076 +1,6076 @@ ; 2022-06-15 Spiro Trikaliotis - ; upper case pseudo-op - .HIBYTES 0 - .HIBYTES 1 - .HIBYTES 2 - .HIBYTES 3 - .HIBYTES 4 - .HIBYTES 5 - .HIBYTES 6 - .HIBYTES 7 - .HIBYTES 8 - .HIBYTES 9 - .HIBYTES 10 - .HIBYTES 11 - .HIBYTES 12 - .HIBYTES 13 - .HIBYTES 14 - .HIBYTES 15 - .HIBYTES 16 - .HIBYTES 17 - .HIBYTES 18 - .HIBYTES 19 - .HIBYTES 112 - .HIBYTES 113 - .HIBYTES 114 - .HIBYTES 115 - .HIBYTES 116 - .HIBYTES 117 - .HIBYTES 118 - .HIBYTES 119 - .HIBYTES 120 - .HIBYTES 121 - .HIBYTES 122 - .HIBYTES 123 - .HIBYTES 124 - .HIBYTES 125 - .HIBYTES 126 - .HIBYTES 127 - .HIBYTES 128 - .HIBYTES 129 - .HIBYTES 130 - .HIBYTES 131 - .HIBYTES 132 - .HIBYTES 133 - .HIBYTES 134 - .HIBYTES 240 - .HIBYTES 241 - .HIBYTES 242 - .HIBYTES 243 - .HIBYTES 244 - .HIBYTES 245 - .HIBYTES 246 - .HIBYTES 247 - .HIBYTES 248 - .HIBYTES 249 - .HIBYTES 250 - .HIBYTES 251 - .HIBYTES 252 - .HIBYTES 253 - .HIBYTES 254 - .HIBYTES 255 - .HIBYTES 256 - .HIBYTES 257 - .HIBYTES 258 - .HIBYTES 259 - .HIBYTES 4050 - .HIBYTES 4051 - .HIBYTES 4052 - .HIBYTES 4053 - .HIBYTES 4054 - .HIBYTES 4055 - .HIBYTES 4056 - .HIBYTES 4057 - .HIBYTES 4058 - .HIBYTES 4059 - .HIBYTES 4060 - .HIBYTES 4061 - .HIBYTES 4062 - .HIBYTES 4063 - .HIBYTES 4064 - .HIBYTES 4065 - .HIBYTES 4066 - .HIBYTES 4067 - .HIBYTES 4068 - .HIBYTES 4069 - .HIBYTES 4070 - .HIBYTES 4071 - .HIBYTES 4072 - .HIBYTES 4073 - .HIBYTES 4074 - .HIBYTES 4075 - .HIBYTES 4076 - .HIBYTES 4077 - .HIBYTES 4078 - .HIBYTES 4079 - .HIBYTES 4080 - .HIBYTES 4081 - .HIBYTES 4082 - .HIBYTES 4083 - .HIBYTES 4084 - .HIBYTES 4085 - .HIBYTES 4086 - .HIBYTES 4087 - .HIBYTES 4088 - .HIBYTES 4089 - .HIBYTES 4090 - .HIBYTES 4091 - .HIBYTES 4092 - .HIBYTES 4093 - .HIBYTES 4094 - .HIBYTES 4095 - .HIBYTES 4096 - .HIBYTES 4097 - .HIBYTES 4098 - .HIBYTES 4099 - .HIBYTES 4100 - .HIBYTES 4101 - .HIBYTES 4102 - .HIBYTES 4103 - .HIBYTES 4104 - .HIBYTES 32752 - .HIBYTES 32753 - .HIBYTES 32754 - .HIBYTES 32755 - .HIBYTES 32756 - .HIBYTES 32757 - .HIBYTES 32758 - .HIBYTES 32759 - .HIBYTES 32760 - .HIBYTES 32761 - .HIBYTES 32762 - .HIBYTES 32763 - .HIBYTES 32764 - .HIBYTES 32765 - .HIBYTES 32766 - .HIBYTES 32767 - .HIBYTES 32768 - .HIBYTES 32769 - .HIBYTES 32770 - .HIBYTES 32771 - .HIBYTES 32772 - .HIBYTES 32773 - .HIBYTES 32774 - .HIBYTES 32775 - .HIBYTES 32776 - .HIBYTES 32777 - .HIBYTES 32778 - .HIBYTES 32779 - .HIBYTES 40929 - .HIBYTES 40930 - .HIBYTES 40931 - .HIBYTES 40932 - .HIBYTES 40933 - .HIBYTES 40934 - .HIBYTES 40935 - .HIBYTES 40936 - .HIBYTES 40937 - .HIBYTES 40938 - .HIBYTES 40939 - .HIBYTES 40940 - .HIBYTES 40941 - .HIBYTES 40942 - .HIBYTES 40943 - .HIBYTES 40944 - .HIBYTES 40945 - .HIBYTES 40946 - .HIBYTES 40947 - .HIBYTES 40948 - .HIBYTES 40949 - .HIBYTES 40950 - .HIBYTES 40951 - .HIBYTES 40952 - .HIBYTES 40953 - .HIBYTES 40954 - .HIBYTES 40955 - .HIBYTES 40956 - .HIBYTES 40957 - .HIBYTES 40958 - .HIBYTES 40959 - .HIBYTES 40960 - .HIBYTES 40961 - .HIBYTES 40962 - .HIBYTES 40963 - .HIBYTES 40964 - .HIBYTES 40965 - .HIBYTES 40966 - .HIBYTES 40967 - .HIBYTES 40968 - .HIBYTES 40969 - .HIBYTES 40970 - .HIBYTES 40971 - .HIBYTES 40972 - .HIBYTES 40973 - .HIBYTES 40974 - .HIBYTES 40975 - .HIBYTES 45025 - .HIBYTES 45026 - .HIBYTES 45027 - .HIBYTES 45028 - .HIBYTES 45029 - .HIBYTES 45030 - .HIBYTES 45031 - .HIBYTES 45032 - .HIBYTES 45033 - .HIBYTES 45034 - .HIBYTES 45035 - .HIBYTES 45036 - .HIBYTES 45037 - .HIBYTES 45038 - .HIBYTES 45039 - .HIBYTES 45040 - .HIBYTES 45041 - .HIBYTES 45042 - .HIBYTES 45043 - .HIBYTES 45044 - .HIBYTES 45045 - .HIBYTES 45046 - .HIBYTES 45047 - .HIBYTES 45048 - .HIBYTES 45049 - .HIBYTES 45050 - .HIBYTES 45051 - .HIBYTES 45052 - .HIBYTES 45053 - .HIBYTES 45054 - .HIBYTES 45055 - .HIBYTES 45056 - .HIBYTES 45057 - .HIBYTES 45058 - .HIBYTES 45059 - .HIBYTES 45060 - .HIBYTES 45061 - .HIBYTES 45062 - .HIBYTES 45063 - .HIBYTES 45064 - .HIBYTES 45065 - .HIBYTES 45066 - .HIBYTES 45067 - .HIBYTES 45068 - .HIBYTES 45069 - .HIBYTES 45070 - .HIBYTES 45071 - .HIBYTES 49121 - .HIBYTES 49122 - .HIBYTES 49123 - .HIBYTES 49124 - .HIBYTES 49125 - .HIBYTES 49126 - .HIBYTES 49127 - .HIBYTES 49128 - .HIBYTES 49129 - .HIBYTES 49130 - .HIBYTES 49131 - .HIBYTES 49132 - .HIBYTES 49133 - .HIBYTES 49134 - .HIBYTES 49135 - .HIBYTES 49136 - .HIBYTES 49137 - .HIBYTES 49138 - .HIBYTES 49139 - .HIBYTES 49140 - .HIBYTES 49141 - .HIBYTES 49142 - .HIBYTES 49143 - .HIBYTES 49144 - .HIBYTES 49145 - .HIBYTES 49146 - .HIBYTES 49147 - .HIBYTES 49148 - .HIBYTES 49149 - .HIBYTES 49150 - .HIBYTES 49151 - .HIBYTES 49152 - .HIBYTES 49153 - .HIBYTES 49154 - .HIBYTES 49155 - .HIBYTES 49156 - .HIBYTES 49157 - .HIBYTES 49158 - .HIBYTES 49159 - .HIBYTES 49160 - .HIBYTES 49161 - .HIBYTES 49162 - .HIBYTES 49163 - .HIBYTES 49164 - .HIBYTES 49165 - .HIBYTES 49166 - .HIBYTES 49167 - .HIBYTES 53217 - .HIBYTES 53218 - .HIBYTES 53219 - .HIBYTES 53220 - .HIBYTES 53221 - .HIBYTES 53222 - .HIBYTES 53223 - .HIBYTES 53224 - .HIBYTES 53225 - .HIBYTES 53226 - .HIBYTES 53227 - .HIBYTES 53228 - .HIBYTES 53229 - .HIBYTES 53230 - .HIBYTES 53231 - .HIBYTES 53232 - .HIBYTES 53233 - .HIBYTES 53234 - .HIBYTES 53235 - .HIBYTES 53236 - .HIBYTES 53237 - .HIBYTES 53238 - .HIBYTES 53239 - .HIBYTES 53240 - .HIBYTES 53241 - .HIBYTES 53242 - .HIBYTES 53243 - .HIBYTES 53244 - .HIBYTES 53245 - .HIBYTES 53246 - .HIBYTES 53247 - .HIBYTES 53248 - .HIBYTES 53249 - .HIBYTES 53250 - .HIBYTES 53251 - .HIBYTES 53252 - .HIBYTES 53253 - .HIBYTES 53254 - .HIBYTES 53255 - .HIBYTES 53256 - .HIBYTES 53257 - .HIBYTES 53258 - .HIBYTES 53259 - .HIBYTES 53260 - .HIBYTES 53261 - .HIBYTES 53262 - .HIBYTES 53263 - .HIBYTES 57313 - .HIBYTES 57314 - .HIBYTES 57315 - .HIBYTES 57316 - .HIBYTES 57317 - .HIBYTES 57318 - .HIBYTES 57319 - .HIBYTES 57320 - .HIBYTES 57321 - .HIBYTES 57322 - .HIBYTES 57323 - .HIBYTES 57324 - .HIBYTES 57325 - .HIBYTES 57326 - .HIBYTES 57327 - .HIBYTES 57328 - .HIBYTES 57329 - .HIBYTES 57330 - .HIBYTES 57331 - .HIBYTES 57332 - .HIBYTES 57333 - .HIBYTES 57334 - .HIBYTES 57335 - .HIBYTES 57336 - .HIBYTES 57337 - .HIBYTES 57338 - .HIBYTES 57339 - .HIBYTES 57340 - .HIBYTES 57341 - .HIBYTES 57342 - .HIBYTES 57343 - .HIBYTES 57344 - .HIBYTES 57345 - .HIBYTES 57346 - .HIBYTES 57347 - .HIBYTES 57348 - .HIBYTES 57349 - .HIBYTES 57350 - .HIBYTES 57351 - .HIBYTES 57352 - .HIBYTES 57353 - .HIBYTES 57354 - .HIBYTES 57355 - .HIBYTES 57356 - .HIBYTES 57357 - .HIBYTES 57358 - .HIBYTES 57359 - .HIBYTES 61409 - .HIBYTES 61410 - .HIBYTES 61411 - .HIBYTES 61412 - .HIBYTES 61413 - .HIBYTES 61414 - .HIBYTES 61415 - .HIBYTES 61416 - .HIBYTES 61417 - .HIBYTES 61418 - .HIBYTES 61419 - .HIBYTES 61420 - .HIBYTES 61421 - .HIBYTES 61422 - .HIBYTES 61423 - .HIBYTES 61424 - .HIBYTES 61425 - .HIBYTES 61426 - .HIBYTES 61427 - .HIBYTES 61428 - .HIBYTES 61429 - .HIBYTES 61430 - .HIBYTES 61431 - .HIBYTES 61432 - .HIBYTES 61433 - .HIBYTES 61434 - .HIBYTES 61435 - .HIBYTES 61436 - .HIBYTES 61437 - .HIBYTES 61438 - .HIBYTES 61439 - .HIBYTES 61440 - .HIBYTES 61441 - .HIBYTES 61442 - .HIBYTES 61443 - .HIBYTES 61444 - .HIBYTES 61445 - .HIBYTES 61446 - .HIBYTES 61447 - .HIBYTES 61448 - .HIBYTES 61449 - .HIBYTES 61450 - .HIBYTES 61451 - .HIBYTES 61452 - .HIBYTES 61453 - .HIBYTES 61454 - .HIBYTES 61455 - .HIBYTES 65505 - .HIBYTES 65506 - .HIBYTES 65507 - .HIBYTES 65508 - .HIBYTES 65509 - .HIBYTES 65510 - .HIBYTES 65511 - .HIBYTES 65512 - .HIBYTES 65513 - .HIBYTES 65514 - .HIBYTES 65515 - .HIBYTES 65516 - .HIBYTES 65517 - .HIBYTES 65518 - .HIBYTES 65519 - .HIBYTES 65520 - .HIBYTES 65521 - .HIBYTES 65522 - .HIBYTES 65523 - .HIBYTES 65524 - .HIBYTES 65525 - .HIBYTES 65526 - .HIBYTES 65527 - .HIBYTES 65528 - .HIBYTES 65529 - .HIBYTES 65530 - .HIBYTES 65531 - .HIBYTES 65532 - .HIBYTES 65533 - .HIBYTES 65534 - .HIBYTES 65535 + ; upper case pseudo-op + .HIBYTES 0 + .HIBYTES 1 + .HIBYTES 2 + .HIBYTES 3 + .HIBYTES 4 + .HIBYTES 5 + .HIBYTES 6 + .HIBYTES 7 + .HIBYTES 8 + .HIBYTES 9 + .HIBYTES 10 + .HIBYTES 11 + .HIBYTES 12 + .HIBYTES 13 + .HIBYTES 14 + .HIBYTES 15 + .HIBYTES 16 + .HIBYTES 17 + .HIBYTES 18 + .HIBYTES 19 + .HIBYTES 112 + .HIBYTES 113 + .HIBYTES 114 + .HIBYTES 115 + .HIBYTES 116 + .HIBYTES 117 + .HIBYTES 118 + .HIBYTES 119 + .HIBYTES 120 + .HIBYTES 121 + .HIBYTES 122 + .HIBYTES 123 + .HIBYTES 124 + .HIBYTES 125 + .HIBYTES 126 + .HIBYTES 127 + .HIBYTES 128 + .HIBYTES 129 + .HIBYTES 130 + .HIBYTES 131 + .HIBYTES 132 + .HIBYTES 133 + .HIBYTES 134 + .HIBYTES 240 + .HIBYTES 241 + .HIBYTES 242 + .HIBYTES 243 + .HIBYTES 244 + .HIBYTES 245 + .HIBYTES 246 + .HIBYTES 247 + .HIBYTES 248 + .HIBYTES 249 + .HIBYTES 250 + .HIBYTES 251 + .HIBYTES 252 + .HIBYTES 253 + .HIBYTES 254 + .HIBYTES 255 + .HIBYTES 256 + .HIBYTES 257 + .HIBYTES 258 + .HIBYTES 259 + .HIBYTES 4050 + .HIBYTES 4051 + .HIBYTES 4052 + .HIBYTES 4053 + .HIBYTES 4054 + .HIBYTES 4055 + .HIBYTES 4056 + .HIBYTES 4057 + .HIBYTES 4058 + .HIBYTES 4059 + .HIBYTES 4060 + .HIBYTES 4061 + .HIBYTES 4062 + .HIBYTES 4063 + .HIBYTES 4064 + .HIBYTES 4065 + .HIBYTES 4066 + .HIBYTES 4067 + .HIBYTES 4068 + .HIBYTES 4069 + .HIBYTES 4070 + .HIBYTES 4071 + .HIBYTES 4072 + .HIBYTES 4073 + .HIBYTES 4074 + .HIBYTES 4075 + .HIBYTES 4076 + .HIBYTES 4077 + .HIBYTES 4078 + .HIBYTES 4079 + .HIBYTES 4080 + .HIBYTES 4081 + .HIBYTES 4082 + .HIBYTES 4083 + .HIBYTES 4084 + .HIBYTES 4085 + .HIBYTES 4086 + .HIBYTES 4087 + .HIBYTES 4088 + .HIBYTES 4089 + .HIBYTES 4090 + .HIBYTES 4091 + .HIBYTES 4092 + .HIBYTES 4093 + .HIBYTES 4094 + .HIBYTES 4095 + .HIBYTES 4096 + .HIBYTES 4097 + .HIBYTES 4098 + .HIBYTES 4099 + .HIBYTES 4100 + .HIBYTES 4101 + .HIBYTES 4102 + .HIBYTES 4103 + .HIBYTES 4104 + .HIBYTES 32752 + .HIBYTES 32753 + .HIBYTES 32754 + .HIBYTES 32755 + .HIBYTES 32756 + .HIBYTES 32757 + .HIBYTES 32758 + .HIBYTES 32759 + .HIBYTES 32760 + .HIBYTES 32761 + .HIBYTES 32762 + .HIBYTES 32763 + .HIBYTES 32764 + .HIBYTES 32765 + .HIBYTES 32766 + .HIBYTES 32767 + .HIBYTES 32768 + .HIBYTES 32769 + .HIBYTES 32770 + .HIBYTES 32771 + .HIBYTES 32772 + .HIBYTES 32773 + .HIBYTES 32774 + .HIBYTES 32775 + .HIBYTES 32776 + .HIBYTES 32777 + .HIBYTES 32778 + .HIBYTES 32779 + .HIBYTES 40929 + .HIBYTES 40930 + .HIBYTES 40931 + .HIBYTES 40932 + .HIBYTES 40933 + .HIBYTES 40934 + .HIBYTES 40935 + .HIBYTES 40936 + .HIBYTES 40937 + .HIBYTES 40938 + .HIBYTES 40939 + .HIBYTES 40940 + .HIBYTES 40941 + .HIBYTES 40942 + .HIBYTES 40943 + .HIBYTES 40944 + .HIBYTES 40945 + .HIBYTES 40946 + .HIBYTES 40947 + .HIBYTES 40948 + .HIBYTES 40949 + .HIBYTES 40950 + .HIBYTES 40951 + .HIBYTES 40952 + .HIBYTES 40953 + .HIBYTES 40954 + .HIBYTES 40955 + .HIBYTES 40956 + .HIBYTES 40957 + .HIBYTES 40958 + .HIBYTES 40959 + .HIBYTES 40960 + .HIBYTES 40961 + .HIBYTES 40962 + .HIBYTES 40963 + .HIBYTES 40964 + .HIBYTES 40965 + .HIBYTES 40966 + .HIBYTES 40967 + .HIBYTES 40968 + .HIBYTES 40969 + .HIBYTES 40970 + .HIBYTES 40971 + .HIBYTES 40972 + .HIBYTES 40973 + .HIBYTES 40974 + .HIBYTES 40975 + .HIBYTES 45025 + .HIBYTES 45026 + .HIBYTES 45027 + .HIBYTES 45028 + .HIBYTES 45029 + .HIBYTES 45030 + .HIBYTES 45031 + .HIBYTES 45032 + .HIBYTES 45033 + .HIBYTES 45034 + .HIBYTES 45035 + .HIBYTES 45036 + .HIBYTES 45037 + .HIBYTES 45038 + .HIBYTES 45039 + .HIBYTES 45040 + .HIBYTES 45041 + .HIBYTES 45042 + .HIBYTES 45043 + .HIBYTES 45044 + .HIBYTES 45045 + .HIBYTES 45046 + .HIBYTES 45047 + .HIBYTES 45048 + .HIBYTES 45049 + .HIBYTES 45050 + .HIBYTES 45051 + .HIBYTES 45052 + .HIBYTES 45053 + .HIBYTES 45054 + .HIBYTES 45055 + .HIBYTES 45056 + .HIBYTES 45057 + .HIBYTES 45058 + .HIBYTES 45059 + .HIBYTES 45060 + .HIBYTES 45061 + .HIBYTES 45062 + .HIBYTES 45063 + .HIBYTES 45064 + .HIBYTES 45065 + .HIBYTES 45066 + .HIBYTES 45067 + .HIBYTES 45068 + .HIBYTES 45069 + .HIBYTES 45070 + .HIBYTES 45071 + .HIBYTES 49121 + .HIBYTES 49122 + .HIBYTES 49123 + .HIBYTES 49124 + .HIBYTES 49125 + .HIBYTES 49126 + .HIBYTES 49127 + .HIBYTES 49128 + .HIBYTES 49129 + .HIBYTES 49130 + .HIBYTES 49131 + .HIBYTES 49132 + .HIBYTES 49133 + .HIBYTES 49134 + .HIBYTES 49135 + .HIBYTES 49136 + .HIBYTES 49137 + .HIBYTES 49138 + .HIBYTES 49139 + .HIBYTES 49140 + .HIBYTES 49141 + .HIBYTES 49142 + .HIBYTES 49143 + .HIBYTES 49144 + .HIBYTES 49145 + .HIBYTES 49146 + .HIBYTES 49147 + .HIBYTES 49148 + .HIBYTES 49149 + .HIBYTES 49150 + .HIBYTES 49151 + .HIBYTES 49152 + .HIBYTES 49153 + .HIBYTES 49154 + .HIBYTES 49155 + .HIBYTES 49156 + .HIBYTES 49157 + .HIBYTES 49158 + .HIBYTES 49159 + .HIBYTES 49160 + .HIBYTES 49161 + .HIBYTES 49162 + .HIBYTES 49163 + .HIBYTES 49164 + .HIBYTES 49165 + .HIBYTES 49166 + .HIBYTES 49167 + .HIBYTES 53217 + .HIBYTES 53218 + .HIBYTES 53219 + .HIBYTES 53220 + .HIBYTES 53221 + .HIBYTES 53222 + .HIBYTES 53223 + .HIBYTES 53224 + .HIBYTES 53225 + .HIBYTES 53226 + .HIBYTES 53227 + .HIBYTES 53228 + .HIBYTES 53229 + .HIBYTES 53230 + .HIBYTES 53231 + .HIBYTES 53232 + .HIBYTES 53233 + .HIBYTES 53234 + .HIBYTES 53235 + .HIBYTES 53236 + .HIBYTES 53237 + .HIBYTES 53238 + .HIBYTES 53239 + .HIBYTES 53240 + .HIBYTES 53241 + .HIBYTES 53242 + .HIBYTES 53243 + .HIBYTES 53244 + .HIBYTES 53245 + .HIBYTES 53246 + .HIBYTES 53247 + .HIBYTES 53248 + .HIBYTES 53249 + .HIBYTES 53250 + .HIBYTES 53251 + .HIBYTES 53252 + .HIBYTES 53253 + .HIBYTES 53254 + .HIBYTES 53255 + .HIBYTES 53256 + .HIBYTES 53257 + .HIBYTES 53258 + .HIBYTES 53259 + .HIBYTES 53260 + .HIBYTES 53261 + .HIBYTES 53262 + .HIBYTES 53263 + .HIBYTES 57313 + .HIBYTES 57314 + .HIBYTES 57315 + .HIBYTES 57316 + .HIBYTES 57317 + .HIBYTES 57318 + .HIBYTES 57319 + .HIBYTES 57320 + .HIBYTES 57321 + .HIBYTES 57322 + .HIBYTES 57323 + .HIBYTES 57324 + .HIBYTES 57325 + .HIBYTES 57326 + .HIBYTES 57327 + .HIBYTES 57328 + .HIBYTES 57329 + .HIBYTES 57330 + .HIBYTES 57331 + .HIBYTES 57332 + .HIBYTES 57333 + .HIBYTES 57334 + .HIBYTES 57335 + .HIBYTES 57336 + .HIBYTES 57337 + .HIBYTES 57338 + .HIBYTES 57339 + .HIBYTES 57340 + .HIBYTES 57341 + .HIBYTES 57342 + .HIBYTES 57343 + .HIBYTES 57344 + .HIBYTES 57345 + .HIBYTES 57346 + .HIBYTES 57347 + .HIBYTES 57348 + .HIBYTES 57349 + .HIBYTES 57350 + .HIBYTES 57351 + .HIBYTES 57352 + .HIBYTES 57353 + .HIBYTES 57354 + .HIBYTES 57355 + .HIBYTES 57356 + .HIBYTES 57357 + .HIBYTES 57358 + .HIBYTES 57359 + .HIBYTES 61409 + .HIBYTES 61410 + .HIBYTES 61411 + .HIBYTES 61412 + .HIBYTES 61413 + .HIBYTES 61414 + .HIBYTES 61415 + .HIBYTES 61416 + .HIBYTES 61417 + .HIBYTES 61418 + .HIBYTES 61419 + .HIBYTES 61420 + .HIBYTES 61421 + .HIBYTES 61422 + .HIBYTES 61423 + .HIBYTES 61424 + .HIBYTES 61425 + .HIBYTES 61426 + .HIBYTES 61427 + .HIBYTES 61428 + .HIBYTES 61429 + .HIBYTES 61430 + .HIBYTES 61431 + .HIBYTES 61432 + .HIBYTES 61433 + .HIBYTES 61434 + .HIBYTES 61435 + .HIBYTES 61436 + .HIBYTES 61437 + .HIBYTES 61438 + .HIBYTES 61439 + .HIBYTES 61440 + .HIBYTES 61441 + .HIBYTES 61442 + .HIBYTES 61443 + .HIBYTES 61444 + .HIBYTES 61445 + .HIBYTES 61446 + .HIBYTES 61447 + .HIBYTES 61448 + .HIBYTES 61449 + .HIBYTES 61450 + .HIBYTES 61451 + .HIBYTES 61452 + .HIBYTES 61453 + .HIBYTES 61454 + .HIBYTES 61455 + .HIBYTES 65505 + .HIBYTES 65506 + .HIBYTES 65507 + .HIBYTES 65508 + .HIBYTES 65509 + .HIBYTES 65510 + .HIBYTES 65511 + .HIBYTES 65512 + .HIBYTES 65513 + .HIBYTES 65514 + .HIBYTES 65515 + .HIBYTES 65516 + .HIBYTES 65517 + .HIBYTES 65518 + .HIBYTES 65519 + .HIBYTES 65520 + .HIBYTES 65521 + .HIBYTES 65522 + .HIBYTES 65523 + .HIBYTES 65524 + .HIBYTES 65525 + .HIBYTES 65526 + .HIBYTES 65527 + .HIBYTES 65528 + .HIBYTES 65529 + .HIBYTES 65530 + .HIBYTES 65531 + .HIBYTES 65532 + .HIBYTES 65533 + .HIBYTES 65534 + .HIBYTES 65535 - ; lower case pseudo-op - .hibytes 0 - .hibytes 1 - .hibytes 2 - .hibytes 3 - .hibytes 4 - .hibytes 5 - .hibytes 6 - .hibytes 7 - .hibytes 8 - .hibytes 9 - .hibytes 10 - .hibytes 11 - .hibytes 12 - .hibytes 13 - .hibytes 14 - .hibytes 15 - .hibytes 16 - .hibytes 17 - .hibytes 18 - .hibytes 19 - .hibytes 112 - .hibytes 113 - .hibytes 114 - .hibytes 115 - .hibytes 116 - .hibytes 117 - .hibytes 118 - .hibytes 119 - .hibytes 120 - .hibytes 121 - .hibytes 122 - .hibytes 123 - .hibytes 124 - .hibytes 125 - .hibytes 126 - .hibytes 127 - .hibytes 128 - .hibytes 129 - .hibytes 130 - .hibytes 131 - .hibytes 132 - .hibytes 133 - .hibytes 134 - .hibytes 240 - .hibytes 241 - .hibytes 242 - .hibytes 243 - .hibytes 244 - .hibytes 245 - .hibytes 246 - .hibytes 247 - .hibytes 248 - .hibytes 249 - .hibytes 250 - .hibytes 251 - .hibytes 252 - .hibytes 253 - .hibytes 254 - .hibytes 255 - .hibytes 256 - .hibytes 257 - .hibytes 258 - .hibytes 259 - .hibytes 4050 - .hibytes 4051 - .hibytes 4052 - .hibytes 4053 - .hibytes 4054 - .hibytes 4055 - .hibytes 4056 - .hibytes 4057 - .hibytes 4058 - .hibytes 4059 - .hibytes 4060 - .hibytes 4061 - .hibytes 4062 - .hibytes 4063 - .hibytes 4064 - .hibytes 4065 - .hibytes 4066 - .hibytes 4067 - .hibytes 4068 - .hibytes 4069 - .hibytes 4070 - .hibytes 4071 - .hibytes 4072 - .hibytes 4073 - .hibytes 4074 - .hibytes 4075 - .hibytes 4076 - .hibytes 4077 - .hibytes 4078 - .hibytes 4079 - .hibytes 4080 - .hibytes 4081 - .hibytes 4082 - .hibytes 4083 - .hibytes 4084 - .hibytes 4085 - .hibytes 4086 - .hibytes 4087 - .hibytes 4088 - .hibytes 4089 - .hibytes 4090 - .hibytes 4091 - .hibytes 4092 - .hibytes 4093 - .hibytes 4094 - .hibytes 4095 - .hibytes 4096 - .hibytes 4097 - .hibytes 4098 - .hibytes 4099 - .hibytes 4100 - .hibytes 4101 - .hibytes 4102 - .hibytes 4103 - .hibytes 4104 - .hibytes 32752 - .hibytes 32753 - .hibytes 32754 - .hibytes 32755 - .hibytes 32756 - .hibytes 32757 - .hibytes 32758 - .hibytes 32759 - .hibytes 32760 - .hibytes 32761 - .hibytes 32762 - .hibytes 32763 - .hibytes 32764 - .hibytes 32765 - .hibytes 32766 - .hibytes 32767 - .hibytes 32768 - .hibytes 32769 - .hibytes 32770 - .hibytes 32771 - .hibytes 32772 - .hibytes 32773 - .hibytes 32774 - .hibytes 32775 - .hibytes 32776 - .hibytes 32777 - .hibytes 32778 - .hibytes 32779 - .hibytes 40929 - .hibytes 40930 - .hibytes 40931 - .hibytes 40932 - .hibytes 40933 - .hibytes 40934 - .hibytes 40935 - .hibytes 40936 - .hibytes 40937 - .hibytes 40938 - .hibytes 40939 - .hibytes 40940 - .hibytes 40941 - .hibytes 40942 - .hibytes 40943 - .hibytes 40944 - .hibytes 40945 - .hibytes 40946 - .hibytes 40947 - .hibytes 40948 - .hibytes 40949 - .hibytes 40950 - .hibytes 40951 - .hibytes 40952 - .hibytes 40953 - .hibytes 40954 - .hibytes 40955 - .hibytes 40956 - .hibytes 40957 - .hibytes 40958 - .hibytes 40959 - .hibytes 40960 - .hibytes 40961 - .hibytes 40962 - .hibytes 40963 - .hibytes 40964 - .hibytes 40965 - .hibytes 40966 - .hibytes 40967 - .hibytes 40968 - .hibytes 40969 - .hibytes 40970 - .hibytes 40971 - .hibytes 40972 - .hibytes 40973 - .hibytes 40974 - .hibytes 40975 - .hibytes 45025 - .hibytes 45026 - .hibytes 45027 - .hibytes 45028 - .hibytes 45029 - .hibytes 45030 - .hibytes 45031 - .hibytes 45032 - .hibytes 45033 - .hibytes 45034 - .hibytes 45035 - .hibytes 45036 - .hibytes 45037 - .hibytes 45038 - .hibytes 45039 - .hibytes 45040 - .hibytes 45041 - .hibytes 45042 - .hibytes 45043 - .hibytes 45044 - .hibytes 45045 - .hibytes 45046 - .hibytes 45047 - .hibytes 45048 - .hibytes 45049 - .hibytes 45050 - .hibytes 45051 - .hibytes 45052 - .hibytes 45053 - .hibytes 45054 - .hibytes 45055 - .hibytes 45056 - .hibytes 45057 - .hibytes 45058 - .hibytes 45059 - .hibytes 45060 - .hibytes 45061 - .hibytes 45062 - .hibytes 45063 - .hibytes 45064 - .hibytes 45065 - .hibytes 45066 - .hibytes 45067 - .hibytes 45068 - .hibytes 45069 - .hibytes 45070 - .hibytes 45071 - .hibytes 49121 - .hibytes 49122 - .hibytes 49123 - .hibytes 49124 - .hibytes 49125 - .hibytes 49126 - .hibytes 49127 - .hibytes 49128 - .hibytes 49129 - .hibytes 49130 - .hibytes 49131 - .hibytes 49132 - .hibytes 49133 - .hibytes 49134 - .hibytes 49135 - .hibytes 49136 - .hibytes 49137 - .hibytes 49138 - .hibytes 49139 - .hibytes 49140 - .hibytes 49141 - .hibytes 49142 - .hibytes 49143 - .hibytes 49144 - .hibytes 49145 - .hibytes 49146 - .hibytes 49147 - .hibytes 49148 - .hibytes 49149 - .hibytes 49150 - .hibytes 49151 - .hibytes 49152 - .hibytes 49153 - .hibytes 49154 - .hibytes 49155 - .hibytes 49156 - .hibytes 49157 - .hibytes 49158 - .hibytes 49159 - .hibytes 49160 - .hibytes 49161 - .hibytes 49162 - .hibytes 49163 - .hibytes 49164 - .hibytes 49165 - .hibytes 49166 - .hibytes 49167 - .hibytes 53217 - .hibytes 53218 - .hibytes 53219 - .hibytes 53220 - .hibytes 53221 - .hibytes 53222 - .hibytes 53223 - .hibytes 53224 - .hibytes 53225 - .hibytes 53226 - .hibytes 53227 - .hibytes 53228 - .hibytes 53229 - .hibytes 53230 - .hibytes 53231 - .hibytes 53232 - .hibytes 53233 - .hibytes 53234 - .hibytes 53235 - .hibytes 53236 - .hibytes 53237 - .hibytes 53238 - .hibytes 53239 - .hibytes 53240 - .hibytes 53241 - .hibytes 53242 - .hibytes 53243 - .hibytes 53244 - .hibytes 53245 - .hibytes 53246 - .hibytes 53247 - .hibytes 53248 - .hibytes 53249 - .hibytes 53250 - .hibytes 53251 - .hibytes 53252 - .hibytes 53253 - .hibytes 53254 - .hibytes 53255 - .hibytes 53256 - .hibytes 53257 - .hibytes 53258 - .hibytes 53259 - .hibytes 53260 - .hibytes 53261 - .hibytes 53262 - .hibytes 53263 - .hibytes 57313 - .hibytes 57314 - .hibytes 57315 - .hibytes 57316 - .hibytes 57317 - .hibytes 57318 - .hibytes 57319 - .hibytes 57320 - .hibytes 57321 - .hibytes 57322 - .hibytes 57323 - .hibytes 57324 - .hibytes 57325 - .hibytes 57326 - .hibytes 57327 - .hibytes 57328 - .hibytes 57329 - .hibytes 57330 - .hibytes 57331 - .hibytes 57332 - .hibytes 57333 - .hibytes 57334 - .hibytes 57335 - .hibytes 57336 - .hibytes 57337 - .hibytes 57338 - .hibytes 57339 - .hibytes 57340 - .hibytes 57341 - .hibytes 57342 - .hibytes 57343 - .hibytes 57344 - .hibytes 57345 - .hibytes 57346 - .hibytes 57347 - .hibytes 57348 - .hibytes 57349 - .hibytes 57350 - .hibytes 57351 - .hibytes 57352 - .hibytes 57353 - .hibytes 57354 - .hibytes 57355 - .hibytes 57356 - .hibytes 57357 - .hibytes 57358 - .hibytes 57359 - .hibytes 61409 - .hibytes 61410 - .hibytes 61411 - .hibytes 61412 - .hibytes 61413 - .hibytes 61414 - .hibytes 61415 - .hibytes 61416 - .hibytes 61417 - .hibytes 61418 - .hibytes 61419 - .hibytes 61420 - .hibytes 61421 - .hibytes 61422 - .hibytes 61423 - .hibytes 61424 - .hibytes 61425 - .hibytes 61426 - .hibytes 61427 - .hibytes 61428 - .hibytes 61429 - .hibytes 61430 - .hibytes 61431 - .hibytes 61432 - .hibytes 61433 - .hibytes 61434 - .hibytes 61435 - .hibytes 61436 - .hibytes 61437 - .hibytes 61438 - .hibytes 61439 - .hibytes 61440 - .hibytes 61441 - .hibytes 61442 - .hibytes 61443 - .hibytes 61444 - .hibytes 61445 - .hibytes 61446 - .hibytes 61447 - .hibytes 61448 - .hibytes 61449 - .hibytes 61450 - .hibytes 61451 - .hibytes 61452 - .hibytes 61453 - .hibytes 61454 - .hibytes 61455 - .hibytes 65505 - .hibytes 65506 - .hibytes 65507 - .hibytes 65508 - .hibytes 65509 - .hibytes 65510 - .hibytes 65511 - .hibytes 65512 - .hibytes 65513 - .hibytes 65514 - .hibytes 65515 - .hibytes 65516 - .hibytes 65517 - .hibytes 65518 - .hibytes 65519 - .hibytes 65520 - .hibytes 65521 - .hibytes 65522 - .hibytes 65523 - .hibytes 65524 - .hibytes 65525 - .hibytes 65526 - .hibytes 65527 - .hibytes 65528 - .hibytes 65529 - .hibytes 65530 - .hibytes 65531 - .hibytes 65532 - .hibytes 65533 - .hibytes 65534 - .hibytes 65535 + ; lower case pseudo-op + .hibytes 0 + .hibytes 1 + .hibytes 2 + .hibytes 3 + .hibytes 4 + .hibytes 5 + .hibytes 6 + .hibytes 7 + .hibytes 8 + .hibytes 9 + .hibytes 10 + .hibytes 11 + .hibytes 12 + .hibytes 13 + .hibytes 14 + .hibytes 15 + .hibytes 16 + .hibytes 17 + .hibytes 18 + .hibytes 19 + .hibytes 112 + .hibytes 113 + .hibytes 114 + .hibytes 115 + .hibytes 116 + .hibytes 117 + .hibytes 118 + .hibytes 119 + .hibytes 120 + .hibytes 121 + .hibytes 122 + .hibytes 123 + .hibytes 124 + .hibytes 125 + .hibytes 126 + .hibytes 127 + .hibytes 128 + .hibytes 129 + .hibytes 130 + .hibytes 131 + .hibytes 132 + .hibytes 133 + .hibytes 134 + .hibytes 240 + .hibytes 241 + .hibytes 242 + .hibytes 243 + .hibytes 244 + .hibytes 245 + .hibytes 246 + .hibytes 247 + .hibytes 248 + .hibytes 249 + .hibytes 250 + .hibytes 251 + .hibytes 252 + .hibytes 253 + .hibytes 254 + .hibytes 255 + .hibytes 256 + .hibytes 257 + .hibytes 258 + .hibytes 259 + .hibytes 4050 + .hibytes 4051 + .hibytes 4052 + .hibytes 4053 + .hibytes 4054 + .hibytes 4055 + .hibytes 4056 + .hibytes 4057 + .hibytes 4058 + .hibytes 4059 + .hibytes 4060 + .hibytes 4061 + .hibytes 4062 + .hibytes 4063 + .hibytes 4064 + .hibytes 4065 + .hibytes 4066 + .hibytes 4067 + .hibytes 4068 + .hibytes 4069 + .hibytes 4070 + .hibytes 4071 + .hibytes 4072 + .hibytes 4073 + .hibytes 4074 + .hibytes 4075 + .hibytes 4076 + .hibytes 4077 + .hibytes 4078 + .hibytes 4079 + .hibytes 4080 + .hibytes 4081 + .hibytes 4082 + .hibytes 4083 + .hibytes 4084 + .hibytes 4085 + .hibytes 4086 + .hibytes 4087 + .hibytes 4088 + .hibytes 4089 + .hibytes 4090 + .hibytes 4091 + .hibytes 4092 + .hibytes 4093 + .hibytes 4094 + .hibytes 4095 + .hibytes 4096 + .hibytes 4097 + .hibytes 4098 + .hibytes 4099 + .hibytes 4100 + .hibytes 4101 + .hibytes 4102 + .hibytes 4103 + .hibytes 4104 + .hibytes 32752 + .hibytes 32753 + .hibytes 32754 + .hibytes 32755 + .hibytes 32756 + .hibytes 32757 + .hibytes 32758 + .hibytes 32759 + .hibytes 32760 + .hibytes 32761 + .hibytes 32762 + .hibytes 32763 + .hibytes 32764 + .hibytes 32765 + .hibytes 32766 + .hibytes 32767 + .hibytes 32768 + .hibytes 32769 + .hibytes 32770 + .hibytes 32771 + .hibytes 32772 + .hibytes 32773 + .hibytes 32774 + .hibytes 32775 + .hibytes 32776 + .hibytes 32777 + .hibytes 32778 + .hibytes 32779 + .hibytes 40929 + .hibytes 40930 + .hibytes 40931 + .hibytes 40932 + .hibytes 40933 + .hibytes 40934 + .hibytes 40935 + .hibytes 40936 + .hibytes 40937 + .hibytes 40938 + .hibytes 40939 + .hibytes 40940 + .hibytes 40941 + .hibytes 40942 + .hibytes 40943 + .hibytes 40944 + .hibytes 40945 + .hibytes 40946 + .hibytes 40947 + .hibytes 40948 + .hibytes 40949 + .hibytes 40950 + .hibytes 40951 + .hibytes 40952 + .hibytes 40953 + .hibytes 40954 + .hibytes 40955 + .hibytes 40956 + .hibytes 40957 + .hibytes 40958 + .hibytes 40959 + .hibytes 40960 + .hibytes 40961 + .hibytes 40962 + .hibytes 40963 + .hibytes 40964 + .hibytes 40965 + .hibytes 40966 + .hibytes 40967 + .hibytes 40968 + .hibytes 40969 + .hibytes 40970 + .hibytes 40971 + .hibytes 40972 + .hibytes 40973 + .hibytes 40974 + .hibytes 40975 + .hibytes 45025 + .hibytes 45026 + .hibytes 45027 + .hibytes 45028 + .hibytes 45029 + .hibytes 45030 + .hibytes 45031 + .hibytes 45032 + .hibytes 45033 + .hibytes 45034 + .hibytes 45035 + .hibytes 45036 + .hibytes 45037 + .hibytes 45038 + .hibytes 45039 + .hibytes 45040 + .hibytes 45041 + .hibytes 45042 + .hibytes 45043 + .hibytes 45044 + .hibytes 45045 + .hibytes 45046 + .hibytes 45047 + .hibytes 45048 + .hibytes 45049 + .hibytes 45050 + .hibytes 45051 + .hibytes 45052 + .hibytes 45053 + .hibytes 45054 + .hibytes 45055 + .hibytes 45056 + .hibytes 45057 + .hibytes 45058 + .hibytes 45059 + .hibytes 45060 + .hibytes 45061 + .hibytes 45062 + .hibytes 45063 + .hibytes 45064 + .hibytes 45065 + .hibytes 45066 + .hibytes 45067 + .hibytes 45068 + .hibytes 45069 + .hibytes 45070 + .hibytes 45071 + .hibytes 49121 + .hibytes 49122 + .hibytes 49123 + .hibytes 49124 + .hibytes 49125 + .hibytes 49126 + .hibytes 49127 + .hibytes 49128 + .hibytes 49129 + .hibytes 49130 + .hibytes 49131 + .hibytes 49132 + .hibytes 49133 + .hibytes 49134 + .hibytes 49135 + .hibytes 49136 + .hibytes 49137 + .hibytes 49138 + .hibytes 49139 + .hibytes 49140 + .hibytes 49141 + .hibytes 49142 + .hibytes 49143 + .hibytes 49144 + .hibytes 49145 + .hibytes 49146 + .hibytes 49147 + .hibytes 49148 + .hibytes 49149 + .hibytes 49150 + .hibytes 49151 + .hibytes 49152 + .hibytes 49153 + .hibytes 49154 + .hibytes 49155 + .hibytes 49156 + .hibytes 49157 + .hibytes 49158 + .hibytes 49159 + .hibytes 49160 + .hibytes 49161 + .hibytes 49162 + .hibytes 49163 + .hibytes 49164 + .hibytes 49165 + .hibytes 49166 + .hibytes 49167 + .hibytes 53217 + .hibytes 53218 + .hibytes 53219 + .hibytes 53220 + .hibytes 53221 + .hibytes 53222 + .hibytes 53223 + .hibytes 53224 + .hibytes 53225 + .hibytes 53226 + .hibytes 53227 + .hibytes 53228 + .hibytes 53229 + .hibytes 53230 + .hibytes 53231 + .hibytes 53232 + .hibytes 53233 + .hibytes 53234 + .hibytes 53235 + .hibytes 53236 + .hibytes 53237 + .hibytes 53238 + .hibytes 53239 + .hibytes 53240 + .hibytes 53241 + .hibytes 53242 + .hibytes 53243 + .hibytes 53244 + .hibytes 53245 + .hibytes 53246 + .hibytes 53247 + .hibytes 53248 + .hibytes 53249 + .hibytes 53250 + .hibytes 53251 + .hibytes 53252 + .hibytes 53253 + .hibytes 53254 + .hibytes 53255 + .hibytes 53256 + .hibytes 53257 + .hibytes 53258 + .hibytes 53259 + .hibytes 53260 + .hibytes 53261 + .hibytes 53262 + .hibytes 53263 + .hibytes 57313 + .hibytes 57314 + .hibytes 57315 + .hibytes 57316 + .hibytes 57317 + .hibytes 57318 + .hibytes 57319 + .hibytes 57320 + .hibytes 57321 + .hibytes 57322 + .hibytes 57323 + .hibytes 57324 + .hibytes 57325 + .hibytes 57326 + .hibytes 57327 + .hibytes 57328 + .hibytes 57329 + .hibytes 57330 + .hibytes 57331 + .hibytes 57332 + .hibytes 57333 + .hibytes 57334 + .hibytes 57335 + .hibytes 57336 + .hibytes 57337 + .hibytes 57338 + .hibytes 57339 + .hibytes 57340 + .hibytes 57341 + .hibytes 57342 + .hibytes 57343 + .hibytes 57344 + .hibytes 57345 + .hibytes 57346 + .hibytes 57347 + .hibytes 57348 + .hibytes 57349 + .hibytes 57350 + .hibytes 57351 + .hibytes 57352 + .hibytes 57353 + .hibytes 57354 + .hibytes 57355 + .hibytes 57356 + .hibytes 57357 + .hibytes 57358 + .hibytes 57359 + .hibytes 61409 + .hibytes 61410 + .hibytes 61411 + .hibytes 61412 + .hibytes 61413 + .hibytes 61414 + .hibytes 61415 + .hibytes 61416 + .hibytes 61417 + .hibytes 61418 + .hibytes 61419 + .hibytes 61420 + .hibytes 61421 + .hibytes 61422 + .hibytes 61423 + .hibytes 61424 + .hibytes 61425 + .hibytes 61426 + .hibytes 61427 + .hibytes 61428 + .hibytes 61429 + .hibytes 61430 + .hibytes 61431 + .hibytes 61432 + .hibytes 61433 + .hibytes 61434 + .hibytes 61435 + .hibytes 61436 + .hibytes 61437 + .hibytes 61438 + .hibytes 61439 + .hibytes 61440 + .hibytes 61441 + .hibytes 61442 + .hibytes 61443 + .hibytes 61444 + .hibytes 61445 + .hibytes 61446 + .hibytes 61447 + .hibytes 61448 + .hibytes 61449 + .hibytes 61450 + .hibytes 61451 + .hibytes 61452 + .hibytes 61453 + .hibytes 61454 + .hibytes 61455 + .hibytes 65505 + .hibytes 65506 + .hibytes 65507 + .hibytes 65508 + .hibytes 65509 + .hibytes 65510 + .hibytes 65511 + .hibytes 65512 + .hibytes 65513 + .hibytes 65514 + .hibytes 65515 + .hibytes 65516 + .hibytes 65517 + .hibytes 65518 + .hibytes 65519 + .hibytes 65520 + .hibytes 65521 + .hibytes 65522 + .hibytes 65523 + .hibytes 65524 + .hibytes 65525 + .hibytes 65526 + .hibytes 65527 + .hibytes 65528 + .hibytes 65529 + .hibytes 65530 + .hibytes 65531 + .hibytes 65532 + .hibytes 65533 + .hibytes 65534 + .hibytes 65535 - ; hex values - .hibytes $0 - .hibytes $1 - .hibytes $2 - .hibytes $3 - .hibytes $4 - .hibytes $5 - .hibytes $6 - .hibytes $7 - .hibytes $8 - .hibytes $9 - .hibytes $a - .hibytes $b - .hibytes $c - .hibytes $d - .hibytes $e - .hibytes $f - .hibytes $10 - .hibytes $11 - .hibytes $12 - .hibytes $13 - .hibytes $70 - .hibytes $71 - .hibytes $72 - .hibytes $73 - .hibytes $74 - .hibytes $75 - .hibytes $76 - .hibytes $77 - .hibytes $78 - .hibytes $79 - .hibytes $7a - .hibytes $7b - .hibytes $7c - .hibytes $7d - .hibytes $7e - .hibytes $7f - .hibytes $80 - .hibytes $81 - .hibytes $82 - .hibytes $83 - .hibytes $84 - .hibytes $85 - .hibytes $86 - .hibytes $f0 - .hibytes $f1 - .hibytes $f2 - .hibytes $f3 - .hibytes $f4 - .hibytes $f5 - .hibytes $f6 - .hibytes $f7 - .hibytes $f8 - .hibytes $f9 - .hibytes $fa - .hibytes $fb - .hibytes $fc - .hibytes $fd - .hibytes $fe - .hibytes $ff - .hibytes $100 - .hibytes $101 - .hibytes $102 - .hibytes $103 - .hibytes $fd2 - .hibytes $fd3 - .hibytes $fd4 - .hibytes $fd5 - .hibytes $fd6 - .hibytes $fd7 - .hibytes $fd8 - .hibytes $fd9 - .hibytes $fda - .hibytes $fdb - .hibytes $fdc - .hibytes $fdd - .hibytes $fde - .hibytes $fdf - .hibytes $fe0 - .hibytes $fe1 - .hibytes $fe2 - .hibytes $fe3 - .hibytes $fe4 - .hibytes $fe5 - .hibytes $fe6 - .hibytes $fe7 - .hibytes $fe8 - .hibytes $fe9 - .hibytes $fea - .hibytes $feb - .hibytes $fec - .hibytes $fed - .hibytes $fee - .hibytes $fef - .hibytes $ff0 - .hibytes $ff1 - .hibytes $ff2 - .hibytes $ff3 - .hibytes $ff4 - .hibytes $ff5 - .hibytes $ff6 - .hibytes $ff7 - .hibytes $ff8 - .hibytes $ff9 - .hibytes $ffa - .hibytes $ffb - .hibytes $ffc - .hibytes $ffd - .hibytes $ffe - .hibytes $fff - .hibytes $1000 - .hibytes $1001 - .hibytes $1002 - .hibytes $1003 - .hibytes $1004 - .hibytes $1005 - .hibytes $1006 - .hibytes $1007 - .hibytes $1008 - .hibytes $7ff0 - .hibytes $7ff1 - .hibytes $7ff2 - .hibytes $7ff3 - .hibytes $7ff4 - .hibytes $7ff5 - .hibytes $7ff6 - .hibytes $7ff7 - .hibytes $7ff8 - .hibytes $7ff9 - .hibytes $7ffa - .hibytes $7ffb - .hibytes $7ffc - .hibytes $7ffd - .hibytes $7ffe - .hibytes $7fff - .hibytes $8000 - .hibytes $8001 - .hibytes $8002 - .hibytes $8003 - .hibytes $8004 - .hibytes $8005 - .hibytes $8006 - .hibytes $8007 - .hibytes $8008 - .hibytes $8009 - .hibytes $800a - .hibytes $800b - .hibytes $9fe1 - .hibytes $9fe2 - .hibytes $9fe3 - .hibytes $9fe4 - .hibytes $9fe5 - .hibytes $9fe6 - .hibytes $9fe7 - .hibytes $9fe8 - .hibytes $9fe9 - .hibytes $9fea - .hibytes $9feb - .hibytes $9fec - .hibytes $9fed - .hibytes $9fee - .hibytes $9fef - .hibytes $9ff0 - .hibytes $9ff1 - .hibytes $9ff2 - .hibytes $9ff3 - .hibytes $9ff4 - .hibytes $9ff5 - .hibytes $9ff6 - .hibytes $9ff7 - .hibytes $9ff8 - .hibytes $9ff9 - .hibytes $9ffa - .hibytes $9ffb - .hibytes $9ffc - .hibytes $9ffd - .hibytes $9ffe - .hibytes $9fff - .hibytes $a000 - .hibytes $a001 - .hibytes $a002 - .hibytes $a003 - .hibytes $a004 - .hibytes $a005 - .hibytes $a006 - .hibytes $a007 - .hibytes $a008 - .hibytes $a009 - .hibytes $a00a - .hibytes $a00b - .hibytes $a00c - .hibytes $a00d - .hibytes $a00e - .hibytes $a00f - .hibytes $afe1 - .hibytes $afe2 - .hibytes $afe3 - .hibytes $afe4 - .hibytes $afe5 - .hibytes $afe6 - .hibytes $afe7 - .hibytes $afe8 - .hibytes $afe9 - .hibytes $afea - .hibytes $afeb - .hibytes $afec - .hibytes $afed - .hibytes $afee - .hibytes $afef - .hibytes $aff0 - .hibytes $aff1 - .hibytes $aff2 - .hibytes $aff3 - .hibytes $aff4 - .hibytes $aff5 - .hibytes $aff6 - .hibytes $aff7 - .hibytes $aff8 - .hibytes $aff9 - .hibytes $affa - .hibytes $affb - .hibytes $affc - .hibytes $affd - .hibytes $affe - .hibytes $afff - .hibytes $b000 - .hibytes $b001 - .hibytes $b002 - .hibytes $b003 - .hibytes $b004 - .hibytes $b005 - .hibytes $b006 - .hibytes $b007 - .hibytes $b008 - .hibytes $b009 - .hibytes $b00a - .hibytes $b00b - .hibytes $b00c - .hibytes $b00d - .hibytes $b00e - .hibytes $b00f - .hibytes $bfe1 - .hibytes $bfe2 - .hibytes $bfe3 - .hibytes $bfe4 - .hibytes $bfe5 - .hibytes $bfe6 - .hibytes $bfe7 - .hibytes $bfe8 - .hibytes $bfe9 - .hibytes $bfea - .hibytes $bfeb - .hibytes $bfec - .hibytes $bfed - .hibytes $bfee - .hibytes $bfef - .hibytes $bff0 - .hibytes $bff1 - .hibytes $bff2 - .hibytes $bff3 - .hibytes $bff4 - .hibytes $bff5 - .hibytes $bff6 - .hibytes $bff7 - .hibytes $bff8 - .hibytes $bff9 - .hibytes $bffa - .hibytes $bffb - .hibytes $bffc - .hibytes $bffd - .hibytes $bffe - .hibytes $bfff - .hibytes $c000 - .hibytes $c001 - .hibytes $c002 - .hibytes $c003 - .hibytes $c004 - .hibytes $c005 - .hibytes $c006 - .hibytes $c007 - .hibytes $c008 - .hibytes $c009 - .hibytes $c00a - .hibytes $c00b - .hibytes $c00c - .hibytes $c00d - .hibytes $c00e - .hibytes $c00f - .hibytes $cfe1 - .hibytes $cfe2 - .hibytes $cfe3 - .hibytes $cfe4 - .hibytes $cfe5 - .hibytes $cfe6 - .hibytes $cfe7 - .hibytes $cfe8 - .hibytes $cfe9 - .hibytes $cfea - .hibytes $cfeb - .hibytes $cfec - .hibytes $cfed - .hibytes $cfee - .hibytes $cfef - .hibytes $cff0 - .hibytes $cff1 - .hibytes $cff2 - .hibytes $cff3 - .hibytes $cff4 - .hibytes $cff5 - .hibytes $cff6 - .hibytes $cff7 - .hibytes $cff8 - .hibytes $cff9 - .hibytes $cffa - .hibytes $cffb - .hibytes $cffc - .hibytes $cffd - .hibytes $cffe - .hibytes $cfff - .hibytes $d000 - .hibytes $d001 - .hibytes $d002 - .hibytes $d003 - .hibytes $d004 - .hibytes $d005 - .hibytes $d006 - .hibytes $d007 - .hibytes $d008 - .hibytes $d009 - .hibytes $d00a - .hibytes $d00b - .hibytes $d00c - .hibytes $d00d - .hibytes $d00e - .hibytes $d00f - .hibytes $dfe1 - .hibytes $dfe2 - .hibytes $dfe3 - .hibytes $dfe4 - .hibytes $dfe5 - .hibytes $dfe6 - .hibytes $dfe7 - .hibytes $dfe8 - .hibytes $dfe9 - .hibytes $dfea - .hibytes $dfeb - .hibytes $dfec - .hibytes $dfed - .hibytes $dfee - .hibytes $dfef - .hibytes $dff0 - .hibytes $dff1 - .hibytes $dff2 - .hibytes $dff3 - .hibytes $dff4 - .hibytes $dff5 - .hibytes $dff6 - .hibytes $dff7 - .hibytes $dff8 - .hibytes $dff9 - .hibytes $dffa - .hibytes $dffb - .hibytes $dffc - .hibytes $dffd - .hibytes $dffe - .hibytes $dfff - .hibytes $e000 - .hibytes $e001 - .hibytes $e002 - .hibytes $e003 - .hibytes $e004 - .hibytes $e005 - .hibytes $e006 - .hibytes $e007 - .hibytes $e008 - .hibytes $e009 - .hibytes $e00a - .hibytes $e00b - .hibytes $e00c - .hibytes $e00d - .hibytes $e00e - .hibytes $e00f - .hibytes $efe1 - .hibytes $efe2 - .hibytes $efe3 - .hibytes $efe4 - .hibytes $efe5 - .hibytes $efe6 - .hibytes $efe7 - .hibytes $efe8 - .hibytes $efe9 - .hibytes $efea - .hibytes $efeb - .hibytes $efec - .hibytes $efed - .hibytes $efee - .hibytes $efef - .hibytes $eff0 - .hibytes $eff1 - .hibytes $eff2 - .hibytes $eff3 - .hibytes $eff4 - .hibytes $eff5 - .hibytes $eff6 - .hibytes $eff7 - .hibytes $eff8 - .hibytes $eff9 - .hibytes $effa - .hibytes $effb - .hibytes $effc - .hibytes $effd - .hibytes $effe - .hibytes $efff - .hibytes $f000 - .hibytes $f001 - .hibytes $f002 - .hibytes $f003 - .hibytes $f004 - .hibytes $f005 - .hibytes $f006 - .hibytes $f007 - .hibytes $f008 - .hibytes $f009 - .hibytes $f00a - .hibytes $f00b - .hibytes $f00c - .hibytes $f00d - .hibytes $f00e - .hibytes $f00f - .hibytes $ffe1 - .hibytes $ffe2 - .hibytes $ffe3 - .hibytes $ffe4 - .hibytes $ffe5 - .hibytes $ffe6 - .hibytes $ffe7 - .hibytes $ffe8 - .hibytes $ffe9 - .hibytes $ffea - .hibytes $ffeb - .hibytes $ffec - .hibytes $ffed - .hibytes $ffee - .hibytes $ffef - .hibytes $fff0 - .hibytes $fff1 - .hibytes $fff2 - .hibytes $fff3 - .hibytes $fff4 - .hibytes $fff5 - .hibytes $fff6 - .hibytes $fff7 - .hibytes $fff8 - .hibytes $fff9 - .hibytes $fffa - .hibytes $fffb - .hibytes $fffc - .hibytes $fffd - .hibytes $fffe - .hibytes $ffff + ; hex values + .hibytes $0 + .hibytes $1 + .hibytes $2 + .hibytes $3 + .hibytes $4 + .hibytes $5 + .hibytes $6 + .hibytes $7 + .hibytes $8 + .hibytes $9 + .hibytes $a + .hibytes $b + .hibytes $c + .hibytes $d + .hibytes $e + .hibytes $f + .hibytes $10 + .hibytes $11 + .hibytes $12 + .hibytes $13 + .hibytes $70 + .hibytes $71 + .hibytes $72 + .hibytes $73 + .hibytes $74 + .hibytes $75 + .hibytes $76 + .hibytes $77 + .hibytes $78 + .hibytes $79 + .hibytes $7a + .hibytes $7b + .hibytes $7c + .hibytes $7d + .hibytes $7e + .hibytes $7f + .hibytes $80 + .hibytes $81 + .hibytes $82 + .hibytes $83 + .hibytes $84 + .hibytes $85 + .hibytes $86 + .hibytes $f0 + .hibytes $f1 + .hibytes $f2 + .hibytes $f3 + .hibytes $f4 + .hibytes $f5 + .hibytes $f6 + .hibytes $f7 + .hibytes $f8 + .hibytes $f9 + .hibytes $fa + .hibytes $fb + .hibytes $fc + .hibytes $fd + .hibytes $fe + .hibytes $ff + .hibytes $100 + .hibytes $101 + .hibytes $102 + .hibytes $103 + .hibytes $fd2 + .hibytes $fd3 + .hibytes $fd4 + .hibytes $fd5 + .hibytes $fd6 + .hibytes $fd7 + .hibytes $fd8 + .hibytes $fd9 + .hibytes $fda + .hibytes $fdb + .hibytes $fdc + .hibytes $fdd + .hibytes $fde + .hibytes $fdf + .hibytes $fe0 + .hibytes $fe1 + .hibytes $fe2 + .hibytes $fe3 + .hibytes $fe4 + .hibytes $fe5 + .hibytes $fe6 + .hibytes $fe7 + .hibytes $fe8 + .hibytes $fe9 + .hibytes $fea + .hibytes $feb + .hibytes $fec + .hibytes $fed + .hibytes $fee + .hibytes $fef + .hibytes $ff0 + .hibytes $ff1 + .hibytes $ff2 + .hibytes $ff3 + .hibytes $ff4 + .hibytes $ff5 + .hibytes $ff6 + .hibytes $ff7 + .hibytes $ff8 + .hibytes $ff9 + .hibytes $ffa + .hibytes $ffb + .hibytes $ffc + .hibytes $ffd + .hibytes $ffe + .hibytes $fff + .hibytes $1000 + .hibytes $1001 + .hibytes $1002 + .hibytes $1003 + .hibytes $1004 + .hibytes $1005 + .hibytes $1006 + .hibytes $1007 + .hibytes $1008 + .hibytes $7ff0 + .hibytes $7ff1 + .hibytes $7ff2 + .hibytes $7ff3 + .hibytes $7ff4 + .hibytes $7ff5 + .hibytes $7ff6 + .hibytes $7ff7 + .hibytes $7ff8 + .hibytes $7ff9 + .hibytes $7ffa + .hibytes $7ffb + .hibytes $7ffc + .hibytes $7ffd + .hibytes $7ffe + .hibytes $7fff + .hibytes $8000 + .hibytes $8001 + .hibytes $8002 + .hibytes $8003 + .hibytes $8004 + .hibytes $8005 + .hibytes $8006 + .hibytes $8007 + .hibytes $8008 + .hibytes $8009 + .hibytes $800a + .hibytes $800b + .hibytes $9fe1 + .hibytes $9fe2 + .hibytes $9fe3 + .hibytes $9fe4 + .hibytes $9fe5 + .hibytes $9fe6 + .hibytes $9fe7 + .hibytes $9fe8 + .hibytes $9fe9 + .hibytes $9fea + .hibytes $9feb + .hibytes $9fec + .hibytes $9fed + .hibytes $9fee + .hibytes $9fef + .hibytes $9ff0 + .hibytes $9ff1 + .hibytes $9ff2 + .hibytes $9ff3 + .hibytes $9ff4 + .hibytes $9ff5 + .hibytes $9ff6 + .hibytes $9ff7 + .hibytes $9ff8 + .hibytes $9ff9 + .hibytes $9ffa + .hibytes $9ffb + .hibytes $9ffc + .hibytes $9ffd + .hibytes $9ffe + .hibytes $9fff + .hibytes $a000 + .hibytes $a001 + .hibytes $a002 + .hibytes $a003 + .hibytes $a004 + .hibytes $a005 + .hibytes $a006 + .hibytes $a007 + .hibytes $a008 + .hibytes $a009 + .hibytes $a00a + .hibytes $a00b + .hibytes $a00c + .hibytes $a00d + .hibytes $a00e + .hibytes $a00f + .hibytes $afe1 + .hibytes $afe2 + .hibytes $afe3 + .hibytes $afe4 + .hibytes $afe5 + .hibytes $afe6 + .hibytes $afe7 + .hibytes $afe8 + .hibytes $afe9 + .hibytes $afea + .hibytes $afeb + .hibytes $afec + .hibytes $afed + .hibytes $afee + .hibytes $afef + .hibytes $aff0 + .hibytes $aff1 + .hibytes $aff2 + .hibytes $aff3 + .hibytes $aff4 + .hibytes $aff5 + .hibytes $aff6 + .hibytes $aff7 + .hibytes $aff8 + .hibytes $aff9 + .hibytes $affa + .hibytes $affb + .hibytes $affc + .hibytes $affd + .hibytes $affe + .hibytes $afff + .hibytes $b000 + .hibytes $b001 + .hibytes $b002 + .hibytes $b003 + .hibytes $b004 + .hibytes $b005 + .hibytes $b006 + .hibytes $b007 + .hibytes $b008 + .hibytes $b009 + .hibytes $b00a + .hibytes $b00b + .hibytes $b00c + .hibytes $b00d + .hibytes $b00e + .hibytes $b00f + .hibytes $bfe1 + .hibytes $bfe2 + .hibytes $bfe3 + .hibytes $bfe4 + .hibytes $bfe5 + .hibytes $bfe6 + .hibytes $bfe7 + .hibytes $bfe8 + .hibytes $bfe9 + .hibytes $bfea + .hibytes $bfeb + .hibytes $bfec + .hibytes $bfed + .hibytes $bfee + .hibytes $bfef + .hibytes $bff0 + .hibytes $bff1 + .hibytes $bff2 + .hibytes $bff3 + .hibytes $bff4 + .hibytes $bff5 + .hibytes $bff6 + .hibytes $bff7 + .hibytes $bff8 + .hibytes $bff9 + .hibytes $bffa + .hibytes $bffb + .hibytes $bffc + .hibytes $bffd + .hibytes $bffe + .hibytes $bfff + .hibytes $c000 + .hibytes $c001 + .hibytes $c002 + .hibytes $c003 + .hibytes $c004 + .hibytes $c005 + .hibytes $c006 + .hibytes $c007 + .hibytes $c008 + .hibytes $c009 + .hibytes $c00a + .hibytes $c00b + .hibytes $c00c + .hibytes $c00d + .hibytes $c00e + .hibytes $c00f + .hibytes $cfe1 + .hibytes $cfe2 + .hibytes $cfe3 + .hibytes $cfe4 + .hibytes $cfe5 + .hibytes $cfe6 + .hibytes $cfe7 + .hibytes $cfe8 + .hibytes $cfe9 + .hibytes $cfea + .hibytes $cfeb + .hibytes $cfec + .hibytes $cfed + .hibytes $cfee + .hibytes $cfef + .hibytes $cff0 + .hibytes $cff1 + .hibytes $cff2 + .hibytes $cff3 + .hibytes $cff4 + .hibytes $cff5 + .hibytes $cff6 + .hibytes $cff7 + .hibytes $cff8 + .hibytes $cff9 + .hibytes $cffa + .hibytes $cffb + .hibytes $cffc + .hibytes $cffd + .hibytes $cffe + .hibytes $cfff + .hibytes $d000 + .hibytes $d001 + .hibytes $d002 + .hibytes $d003 + .hibytes $d004 + .hibytes $d005 + .hibytes $d006 + .hibytes $d007 + .hibytes $d008 + .hibytes $d009 + .hibytes $d00a + .hibytes $d00b + .hibytes $d00c + .hibytes $d00d + .hibytes $d00e + .hibytes $d00f + .hibytes $dfe1 + .hibytes $dfe2 + .hibytes $dfe3 + .hibytes $dfe4 + .hibytes $dfe5 + .hibytes $dfe6 + .hibytes $dfe7 + .hibytes $dfe8 + .hibytes $dfe9 + .hibytes $dfea + .hibytes $dfeb + .hibytes $dfec + .hibytes $dfed + .hibytes $dfee + .hibytes $dfef + .hibytes $dff0 + .hibytes $dff1 + .hibytes $dff2 + .hibytes $dff3 + .hibytes $dff4 + .hibytes $dff5 + .hibytes $dff6 + .hibytes $dff7 + .hibytes $dff8 + .hibytes $dff9 + .hibytes $dffa + .hibytes $dffb + .hibytes $dffc + .hibytes $dffd + .hibytes $dffe + .hibytes $dfff + .hibytes $e000 + .hibytes $e001 + .hibytes $e002 + .hibytes $e003 + .hibytes $e004 + .hibytes $e005 + .hibytes $e006 + .hibytes $e007 + .hibytes $e008 + .hibytes $e009 + .hibytes $e00a + .hibytes $e00b + .hibytes $e00c + .hibytes $e00d + .hibytes $e00e + .hibytes $e00f + .hibytes $efe1 + .hibytes $efe2 + .hibytes $efe3 + .hibytes $efe4 + .hibytes $efe5 + .hibytes $efe6 + .hibytes $efe7 + .hibytes $efe8 + .hibytes $efe9 + .hibytes $efea + .hibytes $efeb + .hibytes $efec + .hibytes $efed + .hibytes $efee + .hibytes $efef + .hibytes $eff0 + .hibytes $eff1 + .hibytes $eff2 + .hibytes $eff3 + .hibytes $eff4 + .hibytes $eff5 + .hibytes $eff6 + .hibytes $eff7 + .hibytes $eff8 + .hibytes $eff9 + .hibytes $effa + .hibytes $effb + .hibytes $effc + .hibytes $effd + .hibytes $effe + .hibytes $efff + .hibytes $f000 + .hibytes $f001 + .hibytes $f002 + .hibytes $f003 + .hibytes $f004 + .hibytes $f005 + .hibytes $f006 + .hibytes $f007 + .hibytes $f008 + .hibytes $f009 + .hibytes $f00a + .hibytes $f00b + .hibytes $f00c + .hibytes $f00d + .hibytes $f00e + .hibytes $f00f + .hibytes $ffe1 + .hibytes $ffe2 + .hibytes $ffe3 + .hibytes $ffe4 + .hibytes $ffe5 + .hibytes $ffe6 + .hibytes $ffe7 + .hibytes $ffe8 + .hibytes $ffe9 + .hibytes $ffea + .hibytes $ffeb + .hibytes $ffec + .hibytes $ffed + .hibytes $ffee + .hibytes $ffef + .hibytes $fff0 + .hibytes $fff1 + .hibytes $fff2 + .hibytes $fff3 + .hibytes $fff4 + .hibytes $fff5 + .hibytes $fff6 + .hibytes $fff7 + .hibytes $fff8 + .hibytes $fff9 + .hibytes $fffa + .hibytes $fffb + .hibytes $fffc + .hibytes $fffd + .hibytes $fffe + .hibytes $ffff - ; hex values, uppercase - .hibytes $0 - .hibytes $1 - .hibytes $2 - .hibytes $3 - .hibytes $4 - .hibytes $5 - .hibytes $6 - .hibytes $7 - .hibytes $8 - .hibytes $9 - .hibytes $A - .hibytes $B - .hibytes $C - .hibytes $D - .hibytes $E - .hibytes $F - .hibytes $10 - .hibytes $11 - .hibytes $12 - .hibytes $13 - .hibytes $70 - .hibytes $71 - .hibytes $72 - .hibytes $73 - .hibytes $74 - .hibytes $75 - .hibytes $76 - .hibytes $77 - .hibytes $78 - .hibytes $79 - .hibytes $7A - .hibytes $7B - .hibytes $7C - .hibytes $7D - .hibytes $7E - .hibytes $7F - .hibytes $80 - .hibytes $81 - .hibytes $82 - .hibytes $83 - .hibytes $84 - .hibytes $85 - .hibytes $86 - .hibytes $F0 - .hibytes $F1 - .hibytes $F2 - .hibytes $F3 - .hibytes $F4 - .hibytes $F5 - .hibytes $F6 - .hibytes $F7 - .hibytes $F8 - .hibytes $F9 - .hibytes $FA - .hibytes $FB - .hibytes $FC - .hibytes $FD - .hibytes $FE - .hibytes $FF - .hibytes $100 - .hibytes $101 - .hibytes $102 - .hibytes $103 - .hibytes $FD2 - .hibytes $FD3 - .hibytes $FD4 - .hibytes $FD5 - .hibytes $FD6 - .hibytes $FD7 - .hibytes $FD8 - .hibytes $FD9 - .hibytes $FDA - .hibytes $FDB - .hibytes $FDC - .hibytes $FDD - .hibytes $FDE - .hibytes $FDF - .hibytes $FE0 - .hibytes $FE1 - .hibytes $FE2 - .hibytes $FE3 - .hibytes $FE4 - .hibytes $FE5 - .hibytes $FE6 - .hibytes $FE7 - .hibytes $FE8 - .hibytes $FE9 - .hibytes $FEA - .hibytes $FEB - .hibytes $FEC - .hibytes $FED - .hibytes $FEE - .hibytes $FEF - .hibytes $FF0 - .hibytes $FF1 - .hibytes $FF2 - .hibytes $FF3 - .hibytes $FF4 - .hibytes $FF5 - .hibytes $FF6 - .hibytes $FF7 - .hibytes $FF8 - .hibytes $FF9 - .hibytes $FFA - .hibytes $FFB - .hibytes $FFC - .hibytes $FFD - .hibytes $FFE - .hibytes $FFF - .hibytes $1000 - .hibytes $1001 - .hibytes $1002 - .hibytes $1003 - .hibytes $1004 - .hibytes $1005 - .hibytes $1006 - .hibytes $1007 - .hibytes $1008 - .hibytes $7FF0 - .hibytes $7FF1 - .hibytes $7FF2 - .hibytes $7FF3 - .hibytes $7FF4 - .hibytes $7FF5 - .hibytes $7FF6 - .hibytes $7FF7 - .hibytes $7FF8 - .hibytes $7FF9 - .hibytes $7FFA - .hibytes $7FFB - .hibytes $7FFC - .hibytes $7FFD - .hibytes $7FFE - .hibytes $7FFF - .hibytes $8000 - .hibytes $8001 - .hibytes $8002 - .hibytes $8003 - .hibytes $8004 - .hibytes $8005 - .hibytes $8006 - .hibytes $8007 - .hibytes $8008 - .hibytes $8009 - .hibytes $800A - .hibytes $800B - .hibytes $9FE1 - .hibytes $9FE2 - .hibytes $9FE3 - .hibytes $9FE4 - .hibytes $9FE5 - .hibytes $9FE6 - .hibytes $9FE7 - .hibytes $9FE8 - .hibytes $9FE9 - .hibytes $9FEA - .hibytes $9FEB - .hibytes $9FEC - .hibytes $9FED - .hibytes $9FEE - .hibytes $9FEF - .hibytes $9FF0 - .hibytes $9FF1 - .hibytes $9FF2 - .hibytes $9FF3 - .hibytes $9FF4 - .hibytes $9FF5 - .hibytes $9FF6 - .hibytes $9FF7 - .hibytes $9FF8 - .hibytes $9FF9 - .hibytes $9FFA - .hibytes $9FFB - .hibytes $9FFC - .hibytes $9FFD - .hibytes $9FFE - .hibytes $9FFF - .hibytes $A000 - .hibytes $A001 - .hibytes $A002 - .hibytes $A003 - .hibytes $A004 - .hibytes $A005 - .hibytes $A006 - .hibytes $A007 - .hibytes $A008 - .hibytes $A009 - .hibytes $A00A - .hibytes $A00B - .hibytes $A00C - .hibytes $A00D - .hibytes $A00E - .hibytes $A00F - .hibytes $AFE1 - .hibytes $AFE2 - .hibytes $AFE3 - .hibytes $AFE4 - .hibytes $AFE5 - .hibytes $AFE6 - .hibytes $AFE7 - .hibytes $AFE8 - .hibytes $AFE9 - .hibytes $AFEA - .hibytes $AFEB - .hibytes $AFEC - .hibytes $AFED - .hibytes $AFEE - .hibytes $AFEF - .hibytes $AFF0 - .hibytes $AFF1 - .hibytes $AFF2 - .hibytes $AFF3 - .hibytes $AFF4 - .hibytes $AFF5 - .hibytes $AFF6 - .hibytes $AFF7 - .hibytes $AFF8 - .hibytes $AFF9 - .hibytes $AFFA - .hibytes $AFFB - .hibytes $AFFC - .hibytes $AFFD - .hibytes $AFFE - .hibytes $AFFF - .hibytes $B000 - .hibytes $B001 - .hibytes $B002 - .hibytes $B003 - .hibytes $B004 - .hibytes $B005 - .hibytes $B006 - .hibytes $B007 - .hibytes $B008 - .hibytes $B009 - .hibytes $B00A - .hibytes $B00B - .hibytes $B00C - .hibytes $B00D - .hibytes $B00E - .hibytes $B00F - .hibytes $BFE1 - .hibytes $BFE2 - .hibytes $BFE3 - .hibytes $BFE4 - .hibytes $BFE5 - .hibytes $BFE6 - .hibytes $BFE7 - .hibytes $BFE8 - .hibytes $BFE9 - .hibytes $BFEA - .hibytes $BFEB - .hibytes $BFEC - .hibytes $BFED - .hibytes $BFEE - .hibytes $BFEF - .hibytes $BFF0 - .hibytes $BFF1 - .hibytes $BFF2 - .hibytes $BFF3 - .hibytes $BFF4 - .hibytes $BFF5 - .hibytes $BFF6 - .hibytes $BFF7 - .hibytes $BFF8 - .hibytes $BFF9 - .hibytes $BFFA - .hibytes $BFFB - .hibytes $BFFC - .hibytes $BFFD - .hibytes $BFFE - .hibytes $BFFF - .hibytes $C000 - .hibytes $C001 - .hibytes $C002 - .hibytes $C003 - .hibytes $C004 - .hibytes $C005 - .hibytes $C006 - .hibytes $C007 - .hibytes $C008 - .hibytes $C009 - .hibytes $C00A - .hibytes $C00B - .hibytes $C00C - .hibytes $C00D - .hibytes $C00E - .hibytes $C00F - .hibytes $CFE1 - .hibytes $CFE2 - .hibytes $CFE3 - .hibytes $CFE4 - .hibytes $CFE5 - .hibytes $CFE6 - .hibytes $CFE7 - .hibytes $CFE8 - .hibytes $CFE9 - .hibytes $CFEA - .hibytes $CFEB - .hibytes $CFEC - .hibytes $CFED - .hibytes $CFEE - .hibytes $CFEF - .hibytes $CFF0 - .hibytes $CFF1 - .hibytes $CFF2 - .hibytes $CFF3 - .hibytes $CFF4 - .hibytes $CFF5 - .hibytes $CFF6 - .hibytes $CFF7 - .hibytes $CFF8 - .hibytes $CFF9 - .hibytes $CFFA - .hibytes $CFFB - .hibytes $CFFC - .hibytes $CFFD - .hibytes $CFFE - .hibytes $CFFF - .hibytes $D000 - .hibytes $D001 - .hibytes $D002 - .hibytes $D003 - .hibytes $D004 - .hibytes $D005 - .hibytes $D006 - .hibytes $D007 - .hibytes $D008 - .hibytes $D009 - .hibytes $D00A - .hibytes $D00B - .hibytes $D00C - .hibytes $D00D - .hibytes $D00E - .hibytes $D00F - .hibytes $DFE1 - .hibytes $DFE2 - .hibytes $DFE3 - .hibytes $DFE4 - .hibytes $DFE5 - .hibytes $DFE6 - .hibytes $DFE7 - .hibytes $DFE8 - .hibytes $DFE9 - .hibytes $DFEA - .hibytes $DFEB - .hibytes $DFEC - .hibytes $DFED - .hibytes $DFEE - .hibytes $DFEF - .hibytes $DFF0 - .hibytes $DFF1 - .hibytes $DFF2 - .hibytes $DFF3 - .hibytes $DFF4 - .hibytes $DFF5 - .hibytes $DFF6 - .hibytes $DFF7 - .hibytes $DFF8 - .hibytes $DFF9 - .hibytes $DFFA - .hibytes $DFFB - .hibytes $DFFC - .hibytes $DFFD - .hibytes $DFFE - .hibytes $DFFF - .hibytes $E000 - .hibytes $E001 - .hibytes $E002 - .hibytes $E003 - .hibytes $E004 - .hibytes $E005 - .hibytes $E006 - .hibytes $E007 - .hibytes $E008 - .hibytes $E009 - .hibytes $E00A - .hibytes $E00B - .hibytes $E00C - .hibytes $E00D - .hibytes $E00E - .hibytes $E00F - .hibytes $EFE1 - .hibytes $EFE2 - .hibytes $EFE3 - .hibytes $EFE4 - .hibytes $EFE5 - .hibytes $EFE6 - .hibytes $EFE7 - .hibytes $EFE8 - .hibytes $EFE9 - .hibytes $EFEA - .hibytes $EFEB - .hibytes $EFEC - .hibytes $EFED - .hibytes $EFEE - .hibytes $EFEF - .hibytes $EFF0 - .hibytes $EFF1 - .hibytes $EFF2 - .hibytes $EFF3 - .hibytes $EFF4 - .hibytes $EFF5 - .hibytes $EFF6 - .hibytes $EFF7 - .hibytes $EFF8 - .hibytes $EFF9 - .hibytes $EFFA - .hibytes $EFFB - .hibytes $EFFC - .hibytes $EFFD - .hibytes $EFFE - .hibytes $EFFF - .hibytes $F000 - .hibytes $F001 - .hibytes $F002 - .hibytes $F003 - .hibytes $F004 - .hibytes $F005 - .hibytes $F006 - .hibytes $F007 - .hibytes $F008 - .hibytes $F009 - .hibytes $F00A - .hibytes $F00B - .hibytes $F00C - .hibytes $F00D - .hibytes $F00E - .hibytes $F00F - .hibytes $FFE1 - .hibytes $FFE2 - .hibytes $FFE3 - .hibytes $FFE4 - .hibytes $FFE5 - .hibytes $FFE6 - .hibytes $FFE7 - .hibytes $FFE8 - .hibytes $FFE9 - .hibytes $FFEA - .hibytes $FFEB - .hibytes $FFEC - .hibytes $FFED - .hibytes $FFEE - .hibytes $FFEF - .hibytes $FFF0 - .hibytes $FFF1 - .hibytes $FFF2 - .hibytes $FFF3 - .hibytes $FFF4 - .hibytes $FFF5 - .hibytes $FFF6 - .hibytes $FFF7 - .hibytes $FFF8 - .hibytes $FFF9 - .hibytes $FFFA - .hibytes $FFFB - .hibytes $FFFC - .hibytes $FFFD - .hibytes $FFFE - .hibytes $FFFF + ; hex values, uppercase + .hibytes $0 + .hibytes $1 + .hibytes $2 + .hibytes $3 + .hibytes $4 + .hibytes $5 + .hibytes $6 + .hibytes $7 + .hibytes $8 + .hibytes $9 + .hibytes $A + .hibytes $B + .hibytes $C + .hibytes $D + .hibytes $E + .hibytes $F + .hibytes $10 + .hibytes $11 + .hibytes $12 + .hibytes $13 + .hibytes $70 + .hibytes $71 + .hibytes $72 + .hibytes $73 + .hibytes $74 + .hibytes $75 + .hibytes $76 + .hibytes $77 + .hibytes $78 + .hibytes $79 + .hibytes $7A + .hibytes $7B + .hibytes $7C + .hibytes $7D + .hibytes $7E + .hibytes $7F + .hibytes $80 + .hibytes $81 + .hibytes $82 + .hibytes $83 + .hibytes $84 + .hibytes $85 + .hibytes $86 + .hibytes $F0 + .hibytes $F1 + .hibytes $F2 + .hibytes $F3 + .hibytes $F4 + .hibytes $F5 + .hibytes $F6 + .hibytes $F7 + .hibytes $F8 + .hibytes $F9 + .hibytes $FA + .hibytes $FB + .hibytes $FC + .hibytes $FD + .hibytes $FE + .hibytes $FF + .hibytes $100 + .hibytes $101 + .hibytes $102 + .hibytes $103 + .hibytes $FD2 + .hibytes $FD3 + .hibytes $FD4 + .hibytes $FD5 + .hibytes $FD6 + .hibytes $FD7 + .hibytes $FD8 + .hibytes $FD9 + .hibytes $FDA + .hibytes $FDB + .hibytes $FDC + .hibytes $FDD + .hibytes $FDE + .hibytes $FDF + .hibytes $FE0 + .hibytes $FE1 + .hibytes $FE2 + .hibytes $FE3 + .hibytes $FE4 + .hibytes $FE5 + .hibytes $FE6 + .hibytes $FE7 + .hibytes $FE8 + .hibytes $FE9 + .hibytes $FEA + .hibytes $FEB + .hibytes $FEC + .hibytes $FED + .hibytes $FEE + .hibytes $FEF + .hibytes $FF0 + .hibytes $FF1 + .hibytes $FF2 + .hibytes $FF3 + .hibytes $FF4 + .hibytes $FF5 + .hibytes $FF6 + .hibytes $FF7 + .hibytes $FF8 + .hibytes $FF9 + .hibytes $FFA + .hibytes $FFB + .hibytes $FFC + .hibytes $FFD + .hibytes $FFE + .hibytes $FFF + .hibytes $1000 + .hibytes $1001 + .hibytes $1002 + .hibytes $1003 + .hibytes $1004 + .hibytes $1005 + .hibytes $1006 + .hibytes $1007 + .hibytes $1008 + .hibytes $7FF0 + .hibytes $7FF1 + .hibytes $7FF2 + .hibytes $7FF3 + .hibytes $7FF4 + .hibytes $7FF5 + .hibytes $7FF6 + .hibytes $7FF7 + .hibytes $7FF8 + .hibytes $7FF9 + .hibytes $7FFA + .hibytes $7FFB + .hibytes $7FFC + .hibytes $7FFD + .hibytes $7FFE + .hibytes $7FFF + .hibytes $8000 + .hibytes $8001 + .hibytes $8002 + .hibytes $8003 + .hibytes $8004 + .hibytes $8005 + .hibytes $8006 + .hibytes $8007 + .hibytes $8008 + .hibytes $8009 + .hibytes $800A + .hibytes $800B + .hibytes $9FE1 + .hibytes $9FE2 + .hibytes $9FE3 + .hibytes $9FE4 + .hibytes $9FE5 + .hibytes $9FE6 + .hibytes $9FE7 + .hibytes $9FE8 + .hibytes $9FE9 + .hibytes $9FEA + .hibytes $9FEB + .hibytes $9FEC + .hibytes $9FED + .hibytes $9FEE + .hibytes $9FEF + .hibytes $9FF0 + .hibytes $9FF1 + .hibytes $9FF2 + .hibytes $9FF3 + .hibytes $9FF4 + .hibytes $9FF5 + .hibytes $9FF6 + .hibytes $9FF7 + .hibytes $9FF8 + .hibytes $9FF9 + .hibytes $9FFA + .hibytes $9FFB + .hibytes $9FFC + .hibytes $9FFD + .hibytes $9FFE + .hibytes $9FFF + .hibytes $A000 + .hibytes $A001 + .hibytes $A002 + .hibytes $A003 + .hibytes $A004 + .hibytes $A005 + .hibytes $A006 + .hibytes $A007 + .hibytes $A008 + .hibytes $A009 + .hibytes $A00A + .hibytes $A00B + .hibytes $A00C + .hibytes $A00D + .hibytes $A00E + .hibytes $A00F + .hibytes $AFE1 + .hibytes $AFE2 + .hibytes $AFE3 + .hibytes $AFE4 + .hibytes $AFE5 + .hibytes $AFE6 + .hibytes $AFE7 + .hibytes $AFE8 + .hibytes $AFE9 + .hibytes $AFEA + .hibytes $AFEB + .hibytes $AFEC + .hibytes $AFED + .hibytes $AFEE + .hibytes $AFEF + .hibytes $AFF0 + .hibytes $AFF1 + .hibytes $AFF2 + .hibytes $AFF3 + .hibytes $AFF4 + .hibytes $AFF5 + .hibytes $AFF6 + .hibytes $AFF7 + .hibytes $AFF8 + .hibytes $AFF9 + .hibytes $AFFA + .hibytes $AFFB + .hibytes $AFFC + .hibytes $AFFD + .hibytes $AFFE + .hibytes $AFFF + .hibytes $B000 + .hibytes $B001 + .hibytes $B002 + .hibytes $B003 + .hibytes $B004 + .hibytes $B005 + .hibytes $B006 + .hibytes $B007 + .hibytes $B008 + .hibytes $B009 + .hibytes $B00A + .hibytes $B00B + .hibytes $B00C + .hibytes $B00D + .hibytes $B00E + .hibytes $B00F + .hibytes $BFE1 + .hibytes $BFE2 + .hibytes $BFE3 + .hibytes $BFE4 + .hibytes $BFE5 + .hibytes $BFE6 + .hibytes $BFE7 + .hibytes $BFE8 + .hibytes $BFE9 + .hibytes $BFEA + .hibytes $BFEB + .hibytes $BFEC + .hibytes $BFED + .hibytes $BFEE + .hibytes $BFEF + .hibytes $BFF0 + .hibytes $BFF1 + .hibytes $BFF2 + .hibytes $BFF3 + .hibytes $BFF4 + .hibytes $BFF5 + .hibytes $BFF6 + .hibytes $BFF7 + .hibytes $BFF8 + .hibytes $BFF9 + .hibytes $BFFA + .hibytes $BFFB + .hibytes $BFFC + .hibytes $BFFD + .hibytes $BFFE + .hibytes $BFFF + .hibytes $C000 + .hibytes $C001 + .hibytes $C002 + .hibytes $C003 + .hibytes $C004 + .hibytes $C005 + .hibytes $C006 + .hibytes $C007 + .hibytes $C008 + .hibytes $C009 + .hibytes $C00A + .hibytes $C00B + .hibytes $C00C + .hibytes $C00D + .hibytes $C00E + .hibytes $C00F + .hibytes $CFE1 + .hibytes $CFE2 + .hibytes $CFE3 + .hibytes $CFE4 + .hibytes $CFE5 + .hibytes $CFE6 + .hibytes $CFE7 + .hibytes $CFE8 + .hibytes $CFE9 + .hibytes $CFEA + .hibytes $CFEB + .hibytes $CFEC + .hibytes $CFED + .hibytes $CFEE + .hibytes $CFEF + .hibytes $CFF0 + .hibytes $CFF1 + .hibytes $CFF2 + .hibytes $CFF3 + .hibytes $CFF4 + .hibytes $CFF5 + .hibytes $CFF6 + .hibytes $CFF7 + .hibytes $CFF8 + .hibytes $CFF9 + .hibytes $CFFA + .hibytes $CFFB + .hibytes $CFFC + .hibytes $CFFD + .hibytes $CFFE + .hibytes $CFFF + .hibytes $D000 + .hibytes $D001 + .hibytes $D002 + .hibytes $D003 + .hibytes $D004 + .hibytes $D005 + .hibytes $D006 + .hibytes $D007 + .hibytes $D008 + .hibytes $D009 + .hibytes $D00A + .hibytes $D00B + .hibytes $D00C + .hibytes $D00D + .hibytes $D00E + .hibytes $D00F + .hibytes $DFE1 + .hibytes $DFE2 + .hibytes $DFE3 + .hibytes $DFE4 + .hibytes $DFE5 + .hibytes $DFE6 + .hibytes $DFE7 + .hibytes $DFE8 + .hibytes $DFE9 + .hibytes $DFEA + .hibytes $DFEB + .hibytes $DFEC + .hibytes $DFED + .hibytes $DFEE + .hibytes $DFEF + .hibytes $DFF0 + .hibytes $DFF1 + .hibytes $DFF2 + .hibytes $DFF3 + .hibytes $DFF4 + .hibytes $DFF5 + .hibytes $DFF6 + .hibytes $DFF7 + .hibytes $DFF8 + .hibytes $DFF9 + .hibytes $DFFA + .hibytes $DFFB + .hibytes $DFFC + .hibytes $DFFD + .hibytes $DFFE + .hibytes $DFFF + .hibytes $E000 + .hibytes $E001 + .hibytes $E002 + .hibytes $E003 + .hibytes $E004 + .hibytes $E005 + .hibytes $E006 + .hibytes $E007 + .hibytes $E008 + .hibytes $E009 + .hibytes $E00A + .hibytes $E00B + .hibytes $E00C + .hibytes $E00D + .hibytes $E00E + .hibytes $E00F + .hibytes $EFE1 + .hibytes $EFE2 + .hibytes $EFE3 + .hibytes $EFE4 + .hibytes $EFE5 + .hibytes $EFE6 + .hibytes $EFE7 + .hibytes $EFE8 + .hibytes $EFE9 + .hibytes $EFEA + .hibytes $EFEB + .hibytes $EFEC + .hibytes $EFED + .hibytes $EFEE + .hibytes $EFEF + .hibytes $EFF0 + .hibytes $EFF1 + .hibytes $EFF2 + .hibytes $EFF3 + .hibytes $EFF4 + .hibytes $EFF5 + .hibytes $EFF6 + .hibytes $EFF7 + .hibytes $EFF8 + .hibytes $EFF9 + .hibytes $EFFA + .hibytes $EFFB + .hibytes $EFFC + .hibytes $EFFD + .hibytes $EFFE + .hibytes $EFFF + .hibytes $F000 + .hibytes $F001 + .hibytes $F002 + .hibytes $F003 + .hibytes $F004 + .hibytes $F005 + .hibytes $F006 + .hibytes $F007 + .hibytes $F008 + .hibytes $F009 + .hibytes $F00A + .hibytes $F00B + .hibytes $F00C + .hibytes $F00D + .hibytes $F00E + .hibytes $F00F + .hibytes $FFE1 + .hibytes $FFE2 + .hibytes $FFE3 + .hibytes $FFE4 + .hibytes $FFE5 + .hibytes $FFE6 + .hibytes $FFE7 + .hibytes $FFE8 + .hibytes $FFE9 + .hibytes $FFEA + .hibytes $FFEB + .hibytes $FFEC + .hibytes $FFED + .hibytes $FFEE + .hibytes $FFEF + .hibytes $FFF0 + .hibytes $FFF1 + .hibytes $FFF2 + .hibytes $FFF3 + .hibytes $FFF4 + .hibytes $FFF5 + .hibytes $FFF6 + .hibytes $FFF7 + .hibytes $FFF8 + .hibytes $FFF9 + .hibytes $FFFA + .hibytes $FFFB + .hibytes $FFFC + .hibytes $FFFD + .hibytes $FFFE + .hibytes $FFFF - ; 4-digit hex values - .hibytes $0000 - .hibytes $0001 - .hibytes $0002 - .hibytes $0003 - .hibytes $0004 - .hibytes $0005 - .hibytes $0006 - .hibytes $0007 - .hibytes $0008 - .hibytes $0009 - .hibytes $000a - .hibytes $000b - .hibytes $000c - .hibytes $000d - .hibytes $000e - .hibytes $000f - .hibytes $0010 - .hibytes $0011 - .hibytes $0012 - .hibytes $0013 - .hibytes $0070 - .hibytes $0071 - .hibytes $0072 - .hibytes $0073 - .hibytes $0074 - .hibytes $0075 - .hibytes $0076 - .hibytes $0077 - .hibytes $0078 - .hibytes $0079 - .hibytes $007a - .hibytes $007b - .hibytes $007c - .hibytes $007d - .hibytes $007e - .hibytes $007f - .hibytes $0080 - .hibytes $0081 - .hibytes $0082 - .hibytes $0083 - .hibytes $0084 - .hibytes $0085 - .hibytes $0086 - .hibytes $00f0 - .hibytes $00f1 - .hibytes $00f2 - .hibytes $00f3 - .hibytes $00f4 - .hibytes $00f5 - .hibytes $00f6 - .hibytes $00f7 - .hibytes $00f8 - .hibytes $00f9 - .hibytes $00fa - .hibytes $00fb - .hibytes $00fc - .hibytes $00fd - .hibytes $00fe - .hibytes $00ff - .hibytes $0100 - .hibytes $0101 - .hibytes $0102 - .hibytes $0103 - .hibytes $0fd2 - .hibytes $0fd3 - .hibytes $0fd4 - .hibytes $0fd5 - .hibytes $0fd6 - .hibytes $0fd7 - .hibytes $0fd8 - .hibytes $0fd9 - .hibytes $0fda - .hibytes $0fdb - .hibytes $0fdc - .hibytes $0fdd - .hibytes $0fde - .hibytes $0fdf - .hibytes $0fe0 - .hibytes $0fe1 - .hibytes $0fe2 - .hibytes $0fe3 - .hibytes $0fe4 - .hibytes $0fe5 - .hibytes $0fe6 - .hibytes $0fe7 - .hibytes $0fe8 - .hibytes $0fe9 - .hibytes $0fea - .hibytes $0feb - .hibytes $0fec - .hibytes $0fed - .hibytes $0fee - .hibytes $0fef - .hibytes $0ff0 - .hibytes $0ff1 - .hibytes $0ff2 - .hibytes $0ff3 - .hibytes $0ff4 - .hibytes $0ff5 - .hibytes $0ff6 - .hibytes $0ff7 - .hibytes $0ff8 - .hibytes $0ff9 - .hibytes $0ffa - .hibytes $0ffb - .hibytes $0ffc - .hibytes $0ffd - .hibytes $0ffe - .hibytes $0fff - .hibytes $1000 - .hibytes $1001 - .hibytes $1002 - .hibytes $1003 - .hibytes $1004 - .hibytes $1005 - .hibytes $1006 - .hibytes $1007 - .hibytes $1008 - .hibytes $7ff0 - .hibytes $7ff1 - .hibytes $7ff2 - .hibytes $7ff3 - .hibytes $7ff4 - .hibytes $7ff5 - .hibytes $7ff6 - .hibytes $7ff7 - .hibytes $7ff8 - .hibytes $7ff9 - .hibytes $7ffa - .hibytes $7ffb - .hibytes $7ffc - .hibytes $7ffd - .hibytes $7ffe - .hibytes $7fff - .hibytes $8000 - .hibytes $8001 - .hibytes $8002 - .hibytes $8003 - .hibytes $8004 - .hibytes $8005 - .hibytes $8006 - .hibytes $8007 - .hibytes $8008 - .hibytes $8009 - .hibytes $800a - .hibytes $800b - .hibytes $9fe1 - .hibytes $9fe2 - .hibytes $9fe3 - .hibytes $9fe4 - .hibytes $9fe5 - .hibytes $9fe6 - .hibytes $9fe7 - .hibytes $9fe8 - .hibytes $9fe9 - .hibytes $9fea - .hibytes $9feb - .hibytes $9fec - .hibytes $9fed - .hibytes $9fee - .hibytes $9fef - .hibytes $9ff0 - .hibytes $9ff1 - .hibytes $9ff2 - .hibytes $9ff3 - .hibytes $9ff4 - .hibytes $9ff5 - .hibytes $9ff6 - .hibytes $9ff7 - .hibytes $9ff8 - .hibytes $9ff9 - .hibytes $9ffa - .hibytes $9ffb - .hibytes $9ffc - .hibytes $9ffd - .hibytes $9ffe - .hibytes $9fff - .hibytes $a000 - .hibytes $a001 - .hibytes $a002 - .hibytes $a003 - .hibytes $a004 - .hibytes $a005 - .hibytes $a006 - .hibytes $a007 - .hibytes $a008 - .hibytes $a009 - .hibytes $a00a - .hibytes $a00b - .hibytes $a00c - .hibytes $a00d - .hibytes $a00e - .hibytes $a00f - .hibytes $afe1 - .hibytes $afe2 - .hibytes $afe3 - .hibytes $afe4 - .hibytes $afe5 - .hibytes $afe6 - .hibytes $afe7 - .hibytes $afe8 - .hibytes $afe9 - .hibytes $afea - .hibytes $afeb - .hibytes $afec - .hibytes $afed - .hibytes $afee - .hibytes $afef - .hibytes $aff0 - .hibytes $aff1 - .hibytes $aff2 - .hibytes $aff3 - .hibytes $aff4 - .hibytes $aff5 - .hibytes $aff6 - .hibytes $aff7 - .hibytes $aff8 - .hibytes $aff9 - .hibytes $affa - .hibytes $affb - .hibytes $affc - .hibytes $affd - .hibytes $affe - .hibytes $afff - .hibytes $b000 - .hibytes $b001 - .hibytes $b002 - .hibytes $b003 - .hibytes $b004 - .hibytes $b005 - .hibytes $b006 - .hibytes $b007 - .hibytes $b008 - .hibytes $b009 - .hibytes $b00a - .hibytes $b00b - .hibytes $b00c - .hibytes $b00d - .hibytes $b00e - .hibytes $b00f - .hibytes $bfe1 - .hibytes $bfe2 - .hibytes $bfe3 - .hibytes $bfe4 - .hibytes $bfe5 - .hibytes $bfe6 - .hibytes $bfe7 - .hibytes $bfe8 - .hibytes $bfe9 - .hibytes $bfea - .hibytes $bfeb - .hibytes $bfec - .hibytes $bfed - .hibytes $bfee - .hibytes $bfef - .hibytes $bff0 - .hibytes $bff1 - .hibytes $bff2 - .hibytes $bff3 - .hibytes $bff4 - .hibytes $bff5 - .hibytes $bff6 - .hibytes $bff7 - .hibytes $bff8 - .hibytes $bff9 - .hibytes $bffa - .hibytes $bffb - .hibytes $bffc - .hibytes $bffd - .hibytes $bffe - .hibytes $bfff - .hibytes $c000 - .hibytes $c001 - .hibytes $c002 - .hibytes $c003 - .hibytes $c004 - .hibytes $c005 - .hibytes $c006 - .hibytes $c007 - .hibytes $c008 - .hibytes $c009 - .hibytes $c00a - .hibytes $c00b - .hibytes $c00c - .hibytes $c00d - .hibytes $c00e - .hibytes $c00f - .hibytes $cfe1 - .hibytes $cfe2 - .hibytes $cfe3 - .hibytes $cfe4 - .hibytes $cfe5 - .hibytes $cfe6 - .hibytes $cfe7 - .hibytes $cfe8 - .hibytes $cfe9 - .hibytes $cfea - .hibytes $cfeb - .hibytes $cfec - .hibytes $cfed - .hibytes $cfee - .hibytes $cfef - .hibytes $cff0 - .hibytes $cff1 - .hibytes $cff2 - .hibytes $cff3 - .hibytes $cff4 - .hibytes $cff5 - .hibytes $cff6 - .hibytes $cff7 - .hibytes $cff8 - .hibytes $cff9 - .hibytes $cffa - .hibytes $cffb - .hibytes $cffc - .hibytes $cffd - .hibytes $cffe - .hibytes $cfff - .hibytes $d000 - .hibytes $d001 - .hibytes $d002 - .hibytes $d003 - .hibytes $d004 - .hibytes $d005 - .hibytes $d006 - .hibytes $d007 - .hibytes $d008 - .hibytes $d009 - .hibytes $d00a - .hibytes $d00b - .hibytes $d00c - .hibytes $d00d - .hibytes $d00e - .hibytes $d00f - .hibytes $dfe1 - .hibytes $dfe2 - .hibytes $dfe3 - .hibytes $dfe4 - .hibytes $dfe5 - .hibytes $dfe6 - .hibytes $dfe7 - .hibytes $dfe8 - .hibytes $dfe9 - .hibytes $dfea - .hibytes $dfeb - .hibytes $dfec - .hibytes $dfed - .hibytes $dfee - .hibytes $dfef - .hibytes $dff0 - .hibytes $dff1 - .hibytes $dff2 - .hibytes $dff3 - .hibytes $dff4 - .hibytes $dff5 - .hibytes $dff6 - .hibytes $dff7 - .hibytes $dff8 - .hibytes $dff9 - .hibytes $dffa - .hibytes $dffb - .hibytes $dffc - .hibytes $dffd - .hibytes $dffe - .hibytes $dfff - .hibytes $e000 - .hibytes $e001 - .hibytes $e002 - .hibytes $e003 - .hibytes $e004 - .hibytes $e005 - .hibytes $e006 - .hibytes $e007 - .hibytes $e008 - .hibytes $e009 - .hibytes $e00a - .hibytes $e00b - .hibytes $e00c - .hibytes $e00d - .hibytes $e00e - .hibytes $e00f - .hibytes $efe1 - .hibytes $efe2 - .hibytes $efe3 - .hibytes $efe4 - .hibytes $efe5 - .hibytes $efe6 - .hibytes $efe7 - .hibytes $efe8 - .hibytes $efe9 - .hibytes $efea - .hibytes $efeb - .hibytes $efec - .hibytes $efed - .hibytes $efee - .hibytes $efef - .hibytes $eff0 - .hibytes $eff1 - .hibytes $eff2 - .hibytes $eff3 - .hibytes $eff4 - .hibytes $eff5 - .hibytes $eff6 - .hibytes $eff7 - .hibytes $eff8 - .hibytes $eff9 - .hibytes $effa - .hibytes $effb - .hibytes $effc - .hibytes $effd - .hibytes $effe - .hibytes $efff - .hibytes $f000 - .hibytes $f001 - .hibytes $f002 - .hibytes $f003 - .hibytes $f004 - .hibytes $f005 - .hibytes $f006 - .hibytes $f007 - .hibytes $f008 - .hibytes $f009 - .hibytes $f00a - .hibytes $f00b - .hibytes $f00c - .hibytes $f00d - .hibytes $f00e - .hibytes $f00f - .hibytes $ffe1 - .hibytes $ffe2 - .hibytes $ffe3 - .hibytes $ffe4 - .hibytes $ffe5 - .hibytes $ffe6 - .hibytes $ffe7 - .hibytes $ffe8 - .hibytes $ffe9 - .hibytes $ffea - .hibytes $ffeb - .hibytes $ffec - .hibytes $ffed - .hibytes $ffee - .hibytes $ffef - .hibytes $fff0 - .hibytes $fff1 - .hibytes $fff2 - .hibytes $fff3 - .hibytes $fff4 - .hibytes $fff5 - .hibytes $fff6 - .hibytes $fff7 - .hibytes $fff8 - .hibytes $fff9 - .hibytes $fffa - .hibytes $fffb - .hibytes $fffc - .hibytes $fffd - .hibytes $fffe - .hibytes $ffff + ; 4-digit hex values + .hibytes $0000 + .hibytes $0001 + .hibytes $0002 + .hibytes $0003 + .hibytes $0004 + .hibytes $0005 + .hibytes $0006 + .hibytes $0007 + .hibytes $0008 + .hibytes $0009 + .hibytes $000a + .hibytes $000b + .hibytes $000c + .hibytes $000d + .hibytes $000e + .hibytes $000f + .hibytes $0010 + .hibytes $0011 + .hibytes $0012 + .hibytes $0013 + .hibytes $0070 + .hibytes $0071 + .hibytes $0072 + .hibytes $0073 + .hibytes $0074 + .hibytes $0075 + .hibytes $0076 + .hibytes $0077 + .hibytes $0078 + .hibytes $0079 + .hibytes $007a + .hibytes $007b + .hibytes $007c + .hibytes $007d + .hibytes $007e + .hibytes $007f + .hibytes $0080 + .hibytes $0081 + .hibytes $0082 + .hibytes $0083 + .hibytes $0084 + .hibytes $0085 + .hibytes $0086 + .hibytes $00f0 + .hibytes $00f1 + .hibytes $00f2 + .hibytes $00f3 + .hibytes $00f4 + .hibytes $00f5 + .hibytes $00f6 + .hibytes $00f7 + .hibytes $00f8 + .hibytes $00f9 + .hibytes $00fa + .hibytes $00fb + .hibytes $00fc + .hibytes $00fd + .hibytes $00fe + .hibytes $00ff + .hibytes $0100 + .hibytes $0101 + .hibytes $0102 + .hibytes $0103 + .hibytes $0fd2 + .hibytes $0fd3 + .hibytes $0fd4 + .hibytes $0fd5 + .hibytes $0fd6 + .hibytes $0fd7 + .hibytes $0fd8 + .hibytes $0fd9 + .hibytes $0fda + .hibytes $0fdb + .hibytes $0fdc + .hibytes $0fdd + .hibytes $0fde + .hibytes $0fdf + .hibytes $0fe0 + .hibytes $0fe1 + .hibytes $0fe2 + .hibytes $0fe3 + .hibytes $0fe4 + .hibytes $0fe5 + .hibytes $0fe6 + .hibytes $0fe7 + .hibytes $0fe8 + .hibytes $0fe9 + .hibytes $0fea + .hibytes $0feb + .hibytes $0fec + .hibytes $0fed + .hibytes $0fee + .hibytes $0fef + .hibytes $0ff0 + .hibytes $0ff1 + .hibytes $0ff2 + .hibytes $0ff3 + .hibytes $0ff4 + .hibytes $0ff5 + .hibytes $0ff6 + .hibytes $0ff7 + .hibytes $0ff8 + .hibytes $0ff9 + .hibytes $0ffa + .hibytes $0ffb + .hibytes $0ffc + .hibytes $0ffd + .hibytes $0ffe + .hibytes $0fff + .hibytes $1000 + .hibytes $1001 + .hibytes $1002 + .hibytes $1003 + .hibytes $1004 + .hibytes $1005 + .hibytes $1006 + .hibytes $1007 + .hibytes $1008 + .hibytes $7ff0 + .hibytes $7ff1 + .hibytes $7ff2 + .hibytes $7ff3 + .hibytes $7ff4 + .hibytes $7ff5 + .hibytes $7ff6 + .hibytes $7ff7 + .hibytes $7ff8 + .hibytes $7ff9 + .hibytes $7ffa + .hibytes $7ffb + .hibytes $7ffc + .hibytes $7ffd + .hibytes $7ffe + .hibytes $7fff + .hibytes $8000 + .hibytes $8001 + .hibytes $8002 + .hibytes $8003 + .hibytes $8004 + .hibytes $8005 + .hibytes $8006 + .hibytes $8007 + .hibytes $8008 + .hibytes $8009 + .hibytes $800a + .hibytes $800b + .hibytes $9fe1 + .hibytes $9fe2 + .hibytes $9fe3 + .hibytes $9fe4 + .hibytes $9fe5 + .hibytes $9fe6 + .hibytes $9fe7 + .hibytes $9fe8 + .hibytes $9fe9 + .hibytes $9fea + .hibytes $9feb + .hibytes $9fec + .hibytes $9fed + .hibytes $9fee + .hibytes $9fef + .hibytes $9ff0 + .hibytes $9ff1 + .hibytes $9ff2 + .hibytes $9ff3 + .hibytes $9ff4 + .hibytes $9ff5 + .hibytes $9ff6 + .hibytes $9ff7 + .hibytes $9ff8 + .hibytes $9ff9 + .hibytes $9ffa + .hibytes $9ffb + .hibytes $9ffc + .hibytes $9ffd + .hibytes $9ffe + .hibytes $9fff + .hibytes $a000 + .hibytes $a001 + .hibytes $a002 + .hibytes $a003 + .hibytes $a004 + .hibytes $a005 + .hibytes $a006 + .hibytes $a007 + .hibytes $a008 + .hibytes $a009 + .hibytes $a00a + .hibytes $a00b + .hibytes $a00c + .hibytes $a00d + .hibytes $a00e + .hibytes $a00f + .hibytes $afe1 + .hibytes $afe2 + .hibytes $afe3 + .hibytes $afe4 + .hibytes $afe5 + .hibytes $afe6 + .hibytes $afe7 + .hibytes $afe8 + .hibytes $afe9 + .hibytes $afea + .hibytes $afeb + .hibytes $afec + .hibytes $afed + .hibytes $afee + .hibytes $afef + .hibytes $aff0 + .hibytes $aff1 + .hibytes $aff2 + .hibytes $aff3 + .hibytes $aff4 + .hibytes $aff5 + .hibytes $aff6 + .hibytes $aff7 + .hibytes $aff8 + .hibytes $aff9 + .hibytes $affa + .hibytes $affb + .hibytes $affc + .hibytes $affd + .hibytes $affe + .hibytes $afff + .hibytes $b000 + .hibytes $b001 + .hibytes $b002 + .hibytes $b003 + .hibytes $b004 + .hibytes $b005 + .hibytes $b006 + .hibytes $b007 + .hibytes $b008 + .hibytes $b009 + .hibytes $b00a + .hibytes $b00b + .hibytes $b00c + .hibytes $b00d + .hibytes $b00e + .hibytes $b00f + .hibytes $bfe1 + .hibytes $bfe2 + .hibytes $bfe3 + .hibytes $bfe4 + .hibytes $bfe5 + .hibytes $bfe6 + .hibytes $bfe7 + .hibytes $bfe8 + .hibytes $bfe9 + .hibytes $bfea + .hibytes $bfeb + .hibytes $bfec + .hibytes $bfed + .hibytes $bfee + .hibytes $bfef + .hibytes $bff0 + .hibytes $bff1 + .hibytes $bff2 + .hibytes $bff3 + .hibytes $bff4 + .hibytes $bff5 + .hibytes $bff6 + .hibytes $bff7 + .hibytes $bff8 + .hibytes $bff9 + .hibytes $bffa + .hibytes $bffb + .hibytes $bffc + .hibytes $bffd + .hibytes $bffe + .hibytes $bfff + .hibytes $c000 + .hibytes $c001 + .hibytes $c002 + .hibytes $c003 + .hibytes $c004 + .hibytes $c005 + .hibytes $c006 + .hibytes $c007 + .hibytes $c008 + .hibytes $c009 + .hibytes $c00a + .hibytes $c00b + .hibytes $c00c + .hibytes $c00d + .hibytes $c00e + .hibytes $c00f + .hibytes $cfe1 + .hibytes $cfe2 + .hibytes $cfe3 + .hibytes $cfe4 + .hibytes $cfe5 + .hibytes $cfe6 + .hibytes $cfe7 + .hibytes $cfe8 + .hibytes $cfe9 + .hibytes $cfea + .hibytes $cfeb + .hibytes $cfec + .hibytes $cfed + .hibytes $cfee + .hibytes $cfef + .hibytes $cff0 + .hibytes $cff1 + .hibytes $cff2 + .hibytes $cff3 + .hibytes $cff4 + .hibytes $cff5 + .hibytes $cff6 + .hibytes $cff7 + .hibytes $cff8 + .hibytes $cff9 + .hibytes $cffa + .hibytes $cffb + .hibytes $cffc + .hibytes $cffd + .hibytes $cffe + .hibytes $cfff + .hibytes $d000 + .hibytes $d001 + .hibytes $d002 + .hibytes $d003 + .hibytes $d004 + .hibytes $d005 + .hibytes $d006 + .hibytes $d007 + .hibytes $d008 + .hibytes $d009 + .hibytes $d00a + .hibytes $d00b + .hibytes $d00c + .hibytes $d00d + .hibytes $d00e + .hibytes $d00f + .hibytes $dfe1 + .hibytes $dfe2 + .hibytes $dfe3 + .hibytes $dfe4 + .hibytes $dfe5 + .hibytes $dfe6 + .hibytes $dfe7 + .hibytes $dfe8 + .hibytes $dfe9 + .hibytes $dfea + .hibytes $dfeb + .hibytes $dfec + .hibytes $dfed + .hibytes $dfee + .hibytes $dfef + .hibytes $dff0 + .hibytes $dff1 + .hibytes $dff2 + .hibytes $dff3 + .hibytes $dff4 + .hibytes $dff5 + .hibytes $dff6 + .hibytes $dff7 + .hibytes $dff8 + .hibytes $dff9 + .hibytes $dffa + .hibytes $dffb + .hibytes $dffc + .hibytes $dffd + .hibytes $dffe + .hibytes $dfff + .hibytes $e000 + .hibytes $e001 + .hibytes $e002 + .hibytes $e003 + .hibytes $e004 + .hibytes $e005 + .hibytes $e006 + .hibytes $e007 + .hibytes $e008 + .hibytes $e009 + .hibytes $e00a + .hibytes $e00b + .hibytes $e00c + .hibytes $e00d + .hibytes $e00e + .hibytes $e00f + .hibytes $efe1 + .hibytes $efe2 + .hibytes $efe3 + .hibytes $efe4 + .hibytes $efe5 + .hibytes $efe6 + .hibytes $efe7 + .hibytes $efe8 + .hibytes $efe9 + .hibytes $efea + .hibytes $efeb + .hibytes $efec + .hibytes $efed + .hibytes $efee + .hibytes $efef + .hibytes $eff0 + .hibytes $eff1 + .hibytes $eff2 + .hibytes $eff3 + .hibytes $eff4 + .hibytes $eff5 + .hibytes $eff6 + .hibytes $eff7 + .hibytes $eff8 + .hibytes $eff9 + .hibytes $effa + .hibytes $effb + .hibytes $effc + .hibytes $effd + .hibytes $effe + .hibytes $efff + .hibytes $f000 + .hibytes $f001 + .hibytes $f002 + .hibytes $f003 + .hibytes $f004 + .hibytes $f005 + .hibytes $f006 + .hibytes $f007 + .hibytes $f008 + .hibytes $f009 + .hibytes $f00a + .hibytes $f00b + .hibytes $f00c + .hibytes $f00d + .hibytes $f00e + .hibytes $f00f + .hibytes $ffe1 + .hibytes $ffe2 + .hibytes $ffe3 + .hibytes $ffe4 + .hibytes $ffe5 + .hibytes $ffe6 + .hibytes $ffe7 + .hibytes $ffe8 + .hibytes $ffe9 + .hibytes $ffea + .hibytes $ffeb + .hibytes $ffec + .hibytes $ffed + .hibytes $ffee + .hibytes $ffef + .hibytes $fff0 + .hibytes $fff1 + .hibytes $fff2 + .hibytes $fff3 + .hibytes $fff4 + .hibytes $fff5 + .hibytes $fff6 + .hibytes $fff7 + .hibytes $fff8 + .hibytes $fff9 + .hibytes $fffa + .hibytes $fffb + .hibytes $fffc + .hibytes $fffd + .hibytes $fffe + .hibytes $ffff - ; 4-digit hex values, uppercase - .hibytes $0000 - .hibytes $0001 - .hibytes $0002 - .hibytes $0003 - .hibytes $0004 - .hibytes $0005 - .hibytes $0006 - .hibytes $0007 - .hibytes $0008 - .hibytes $0009 - .hibytes $000A - .hibytes $000B - .hibytes $000C - .hibytes $000D - .hibytes $000E - .hibytes $000F - .hibytes $0010 - .hibytes $0011 - .hibytes $0012 - .hibytes $0013 - .hibytes $0070 - .hibytes $0071 - .hibytes $0072 - .hibytes $0073 - .hibytes $0074 - .hibytes $0075 - .hibytes $0076 - .hibytes $0077 - .hibytes $0078 - .hibytes $0079 - .hibytes $007A - .hibytes $007B - .hibytes $007C - .hibytes $007D - .hibytes $007E - .hibytes $007F - .hibytes $0080 - .hibytes $0081 - .hibytes $0082 - .hibytes $0083 - .hibytes $0084 - .hibytes $0085 - .hibytes $0086 - .hibytes $00F0 - .hibytes $00F1 - .hibytes $00F2 - .hibytes $00F3 - .hibytes $00F4 - .hibytes $00F5 - .hibytes $00F6 - .hibytes $00F7 - .hibytes $00F8 - .hibytes $00F9 - .hibytes $00FA - .hibytes $00FB - .hibytes $00FC - .hibytes $00FD - .hibytes $00FE - .hibytes $00FF - .hibytes $0100 - .hibytes $0101 - .hibytes $0102 - .hibytes $0103 - .hibytes $0FD2 - .hibytes $0FD3 - .hibytes $0FD4 - .hibytes $0FD5 - .hibytes $0FD6 - .hibytes $0FD7 - .hibytes $0FD8 - .hibytes $0FD9 - .hibytes $0FDA - .hibytes $0FDB - .hibytes $0FDC - .hibytes $0FDD - .hibytes $0FDE - .hibytes $0FDF - .hibytes $0FE0 - .hibytes $0FE1 - .hibytes $0FE2 - .hibytes $0FE3 - .hibytes $0FE4 - .hibytes $0FE5 - .hibytes $0FE6 - .hibytes $0FE7 - .hibytes $0FE8 - .hibytes $0FE9 - .hibytes $0FEA - .hibytes $0FEB - .hibytes $0FEC - .hibytes $0FED - .hibytes $0FEE - .hibytes $0FEF - .hibytes $0FF0 - .hibytes $0FF1 - .hibytes $0FF2 - .hibytes $0FF3 - .hibytes $0FF4 - .hibytes $0FF5 - .hibytes $0FF6 - .hibytes $0FF7 - .hibytes $0FF8 - .hibytes $0FF9 - .hibytes $0FFA - .hibytes $0FFB - .hibytes $0FFC - .hibytes $0FFD - .hibytes $0FFE - .hibytes $0FFF - .hibytes $1000 - .hibytes $1001 - .hibytes $1002 - .hibytes $1003 - .hibytes $1004 - .hibytes $1005 - .hibytes $1006 - .hibytes $1007 - .hibytes $1008 - .hibytes $7FF0 - .hibytes $7FF1 - .hibytes $7FF2 - .hibytes $7FF3 - .hibytes $7FF4 - .hibytes $7FF5 - .hibytes $7FF6 - .hibytes $7FF7 - .hibytes $7FF8 - .hibytes $7FF9 - .hibytes $7FFA - .hibytes $7FFB - .hibytes $7FFC - .hibytes $7FFD - .hibytes $7FFE - .hibytes $7FFF - .hibytes $8000 - .hibytes $8001 - .hibytes $8002 - .hibytes $8003 - .hibytes $8004 - .hibytes $8005 - .hibytes $8006 - .hibytes $8007 - .hibytes $8008 - .hibytes $8009 - .hibytes $800A - .hibytes $800B - .hibytes $9FE1 - .hibytes $9FE2 - .hibytes $9FE3 - .hibytes $9FE4 - .hibytes $9FE5 - .hibytes $9FE6 - .hibytes $9FE7 - .hibytes $9FE8 - .hibytes $9FE9 - .hibytes $9FEA - .hibytes $9FEB - .hibytes $9FEC - .hibytes $9FED - .hibytes $9FEE - .hibytes $9FEF - .hibytes $9FF0 - .hibytes $9FF1 - .hibytes $9FF2 - .hibytes $9FF3 - .hibytes $9FF4 - .hibytes $9FF5 - .hibytes $9FF6 - .hibytes $9FF7 - .hibytes $9FF8 - .hibytes $9FF9 - .hibytes $9FFA - .hibytes $9FFB - .hibytes $9FFC - .hibytes $9FFD - .hibytes $9FFE - .hibytes $9FFF - .hibytes $A000 - .hibytes $A001 - .hibytes $A002 - .hibytes $A003 - .hibytes $A004 - .hibytes $A005 - .hibytes $A006 - .hibytes $A007 - .hibytes $A008 - .hibytes $A009 - .hibytes $A00A - .hibytes $A00B - .hibytes $A00C - .hibytes $A00D - .hibytes $A00E - .hibytes $A00F - .hibytes $AFE1 - .hibytes $AFE2 - .hibytes $AFE3 - .hibytes $AFE4 - .hibytes $AFE5 - .hibytes $AFE6 - .hibytes $AFE7 - .hibytes $AFE8 - .hibytes $AFE9 - .hibytes $AFEA - .hibytes $AFEB - .hibytes $AFEC - .hibytes $AFED - .hibytes $AFEE - .hibytes $AFEF - .hibytes $AFF0 - .hibytes $AFF1 - .hibytes $AFF2 - .hibytes $AFF3 - .hibytes $AFF4 - .hibytes $AFF5 - .hibytes $AFF6 - .hibytes $AFF7 - .hibytes $AFF8 - .hibytes $AFF9 - .hibytes $AFFA - .hibytes $AFFB - .hibytes $AFFC - .hibytes $AFFD - .hibytes $AFFE - .hibytes $AFFF - .hibytes $B000 - .hibytes $B001 - .hibytes $B002 - .hibytes $B003 - .hibytes $B004 - .hibytes $B005 - .hibytes $B006 - .hibytes $B007 - .hibytes $B008 - .hibytes $B009 - .hibytes $B00A - .hibytes $B00B - .hibytes $B00C - .hibytes $B00D - .hibytes $B00E - .hibytes $B00F - .hibytes $BFE1 - .hibytes $BFE2 - .hibytes $BFE3 - .hibytes $BFE4 - .hibytes $BFE5 - .hibytes $BFE6 - .hibytes $BFE7 - .hibytes $BFE8 - .hibytes $BFE9 - .hibytes $BFEA - .hibytes $BFEB - .hibytes $BFEC - .hibytes $BFED - .hibytes $BFEE - .hibytes $BFEF - .hibytes $BFF0 - .hibytes $BFF1 - .hibytes $BFF2 - .hibytes $BFF3 - .hibytes $BFF4 - .hibytes $BFF5 - .hibytes $BFF6 - .hibytes $BFF7 - .hibytes $BFF8 - .hibytes $BFF9 - .hibytes $BFFA - .hibytes $BFFB - .hibytes $BFFC - .hibytes $BFFD - .hibytes $BFFE - .hibytes $BFFF - .hibytes $C000 - .hibytes $C001 - .hibytes $C002 - .hibytes $C003 - .hibytes $C004 - .hibytes $C005 - .hibytes $C006 - .hibytes $C007 - .hibytes $C008 - .hibytes $C009 - .hibytes $C00A - .hibytes $C00B - .hibytes $C00C - .hibytes $C00D - .hibytes $C00E - .hibytes $C00F - .hibytes $CFE1 - .hibytes $CFE2 - .hibytes $CFE3 - .hibytes $CFE4 - .hibytes $CFE5 - .hibytes $CFE6 - .hibytes $CFE7 - .hibytes $CFE8 - .hibytes $CFE9 - .hibytes $CFEA - .hibytes $CFEB - .hibytes $CFEC - .hibytes $CFED - .hibytes $CFEE - .hibytes $CFEF - .hibytes $CFF0 - .hibytes $CFF1 - .hibytes $CFF2 - .hibytes $CFF3 - .hibytes $CFF4 - .hibytes $CFF5 - .hibytes $CFF6 - .hibytes $CFF7 - .hibytes $CFF8 - .hibytes $CFF9 - .hibytes $CFFA - .hibytes $CFFB - .hibytes $CFFC - .hibytes $CFFD - .hibytes $CFFE - .hibytes $CFFF - .hibytes $D000 - .hibytes $D001 - .hibytes $D002 - .hibytes $D003 - .hibytes $D004 - .hibytes $D005 - .hibytes $D006 - .hibytes $D007 - .hibytes $D008 - .hibytes $D009 - .hibytes $D00A - .hibytes $D00B - .hibytes $D00C - .hibytes $D00D - .hibytes $D00E - .hibytes $D00F - .hibytes $DFE1 - .hibytes $DFE2 - .hibytes $DFE3 - .hibytes $DFE4 - .hibytes $DFE5 - .hibytes $DFE6 - .hibytes $DFE7 - .hibytes $DFE8 - .hibytes $DFE9 - .hibytes $DFEA - .hibytes $DFEB - .hibytes $DFEC - .hibytes $DFED - .hibytes $DFEE - .hibytes $DFEF - .hibytes $DFF0 - .hibytes $DFF1 - .hibytes $DFF2 - .hibytes $DFF3 - .hibytes $DFF4 - .hibytes $DFF5 - .hibytes $DFF6 - .hibytes $DFF7 - .hibytes $DFF8 - .hibytes $DFF9 - .hibytes $DFFA - .hibytes $DFFB - .hibytes $DFFC - .hibytes $DFFD - .hibytes $DFFE - .hibytes $DFFF - .hibytes $E000 - .hibytes $E001 - .hibytes $E002 - .hibytes $E003 - .hibytes $E004 - .hibytes $E005 - .hibytes $E006 - .hibytes $E007 - .hibytes $E008 - .hibytes $E009 - .hibytes $E00A - .hibytes $E00B - .hibytes $E00C - .hibytes $E00D - .hibytes $E00E - .hibytes $E00F - .hibytes $EFE1 - .hibytes $EFE2 - .hibytes $EFE3 - .hibytes $EFE4 - .hibytes $EFE5 - .hibytes $EFE6 - .hibytes $EFE7 - .hibytes $EFE8 - .hibytes $EFE9 - .hibytes $EFEA - .hibytes $EFEB - .hibytes $EFEC - .hibytes $EFED - .hibytes $EFEE - .hibytes $EFEF - .hibytes $EFF0 - .hibytes $EFF1 - .hibytes $EFF2 - .hibytes $EFF3 - .hibytes $EFF4 - .hibytes $EFF5 - .hibytes $EFF6 - .hibytes $EFF7 - .hibytes $EFF8 - .hibytes $EFF9 - .hibytes $EFFA - .hibytes $EFFB - .hibytes $EFFC - .hibytes $EFFD - .hibytes $EFFE - .hibytes $EFFF - .hibytes $F000 - .hibytes $F001 - .hibytes $F002 - .hibytes $F003 - .hibytes $F004 - .hibytes $F005 - .hibytes $F006 - .hibytes $F007 - .hibytes $F008 - .hibytes $F009 - .hibytes $F00A - .hibytes $F00B - .hibytes $F00C - .hibytes $F00D - .hibytes $F00E - .hibytes $F00F - .hibytes $FFE1 - .hibytes $FFE2 - .hibytes $FFE3 - .hibytes $FFE4 - .hibytes $FFE5 - .hibytes $FFE6 - .hibytes $FFE7 - .hibytes $FFE8 - .hibytes $FFE9 - .hibytes $FFEA - .hibytes $FFEB - .hibytes $FFEC - .hibytes $FFED - .hibytes $FFEE - .hibytes $FFEF - .hibytes $FFF0 - .hibytes $FFF1 - .hibytes $FFF2 - .hibytes $FFF3 - .hibytes $FFF4 - .hibytes $FFF5 - .hibytes $FFF6 - .hibytes $FFF7 - .hibytes $FFF8 - .hibytes $FFF9 - .hibytes $FFFA - .hibytes $FFFB - .hibytes $FFFC - .hibytes $FFFD - .hibytes $FFFE - .hibytes $FFFF + ; 4-digit hex values, uppercase + .hibytes $0000 + .hibytes $0001 + .hibytes $0002 + .hibytes $0003 + .hibytes $0004 + .hibytes $0005 + .hibytes $0006 + .hibytes $0007 + .hibytes $0008 + .hibytes $0009 + .hibytes $000A + .hibytes $000B + .hibytes $000C + .hibytes $000D + .hibytes $000E + .hibytes $000F + .hibytes $0010 + .hibytes $0011 + .hibytes $0012 + .hibytes $0013 + .hibytes $0070 + .hibytes $0071 + .hibytes $0072 + .hibytes $0073 + .hibytes $0074 + .hibytes $0075 + .hibytes $0076 + .hibytes $0077 + .hibytes $0078 + .hibytes $0079 + .hibytes $007A + .hibytes $007B + .hibytes $007C + .hibytes $007D + .hibytes $007E + .hibytes $007F + .hibytes $0080 + .hibytes $0081 + .hibytes $0082 + .hibytes $0083 + .hibytes $0084 + .hibytes $0085 + .hibytes $0086 + .hibytes $00F0 + .hibytes $00F1 + .hibytes $00F2 + .hibytes $00F3 + .hibytes $00F4 + .hibytes $00F5 + .hibytes $00F6 + .hibytes $00F7 + .hibytes $00F8 + .hibytes $00F9 + .hibytes $00FA + .hibytes $00FB + .hibytes $00FC + .hibytes $00FD + .hibytes $00FE + .hibytes $00FF + .hibytes $0100 + .hibytes $0101 + .hibytes $0102 + .hibytes $0103 + .hibytes $0FD2 + .hibytes $0FD3 + .hibytes $0FD4 + .hibytes $0FD5 + .hibytes $0FD6 + .hibytes $0FD7 + .hibytes $0FD8 + .hibytes $0FD9 + .hibytes $0FDA + .hibytes $0FDB + .hibytes $0FDC + .hibytes $0FDD + .hibytes $0FDE + .hibytes $0FDF + .hibytes $0FE0 + .hibytes $0FE1 + .hibytes $0FE2 + .hibytes $0FE3 + .hibytes $0FE4 + .hibytes $0FE5 + .hibytes $0FE6 + .hibytes $0FE7 + .hibytes $0FE8 + .hibytes $0FE9 + .hibytes $0FEA + .hibytes $0FEB + .hibytes $0FEC + .hibytes $0FED + .hibytes $0FEE + .hibytes $0FEF + .hibytes $0FF0 + .hibytes $0FF1 + .hibytes $0FF2 + .hibytes $0FF3 + .hibytes $0FF4 + .hibytes $0FF5 + .hibytes $0FF6 + .hibytes $0FF7 + .hibytes $0FF8 + .hibytes $0FF9 + .hibytes $0FFA + .hibytes $0FFB + .hibytes $0FFC + .hibytes $0FFD + .hibytes $0FFE + .hibytes $0FFF + .hibytes $1000 + .hibytes $1001 + .hibytes $1002 + .hibytes $1003 + .hibytes $1004 + .hibytes $1005 + .hibytes $1006 + .hibytes $1007 + .hibytes $1008 + .hibytes $7FF0 + .hibytes $7FF1 + .hibytes $7FF2 + .hibytes $7FF3 + .hibytes $7FF4 + .hibytes $7FF5 + .hibytes $7FF6 + .hibytes $7FF7 + .hibytes $7FF8 + .hibytes $7FF9 + .hibytes $7FFA + .hibytes $7FFB + .hibytes $7FFC + .hibytes $7FFD + .hibytes $7FFE + .hibytes $7FFF + .hibytes $8000 + .hibytes $8001 + .hibytes $8002 + .hibytes $8003 + .hibytes $8004 + .hibytes $8005 + .hibytes $8006 + .hibytes $8007 + .hibytes $8008 + .hibytes $8009 + .hibytes $800A + .hibytes $800B + .hibytes $9FE1 + .hibytes $9FE2 + .hibytes $9FE3 + .hibytes $9FE4 + .hibytes $9FE5 + .hibytes $9FE6 + .hibytes $9FE7 + .hibytes $9FE8 + .hibytes $9FE9 + .hibytes $9FEA + .hibytes $9FEB + .hibytes $9FEC + .hibytes $9FED + .hibytes $9FEE + .hibytes $9FEF + .hibytes $9FF0 + .hibytes $9FF1 + .hibytes $9FF2 + .hibytes $9FF3 + .hibytes $9FF4 + .hibytes $9FF5 + .hibytes $9FF6 + .hibytes $9FF7 + .hibytes $9FF8 + .hibytes $9FF9 + .hibytes $9FFA + .hibytes $9FFB + .hibytes $9FFC + .hibytes $9FFD + .hibytes $9FFE + .hibytes $9FFF + .hibytes $A000 + .hibytes $A001 + .hibytes $A002 + .hibytes $A003 + .hibytes $A004 + .hibytes $A005 + .hibytes $A006 + .hibytes $A007 + .hibytes $A008 + .hibytes $A009 + .hibytes $A00A + .hibytes $A00B + .hibytes $A00C + .hibytes $A00D + .hibytes $A00E + .hibytes $A00F + .hibytes $AFE1 + .hibytes $AFE2 + .hibytes $AFE3 + .hibytes $AFE4 + .hibytes $AFE5 + .hibytes $AFE6 + .hibytes $AFE7 + .hibytes $AFE8 + .hibytes $AFE9 + .hibytes $AFEA + .hibytes $AFEB + .hibytes $AFEC + .hibytes $AFED + .hibytes $AFEE + .hibytes $AFEF + .hibytes $AFF0 + .hibytes $AFF1 + .hibytes $AFF2 + .hibytes $AFF3 + .hibytes $AFF4 + .hibytes $AFF5 + .hibytes $AFF6 + .hibytes $AFF7 + .hibytes $AFF8 + .hibytes $AFF9 + .hibytes $AFFA + .hibytes $AFFB + .hibytes $AFFC + .hibytes $AFFD + .hibytes $AFFE + .hibytes $AFFF + .hibytes $B000 + .hibytes $B001 + .hibytes $B002 + .hibytes $B003 + .hibytes $B004 + .hibytes $B005 + .hibytes $B006 + .hibytes $B007 + .hibytes $B008 + .hibytes $B009 + .hibytes $B00A + .hibytes $B00B + .hibytes $B00C + .hibytes $B00D + .hibytes $B00E + .hibytes $B00F + .hibytes $BFE1 + .hibytes $BFE2 + .hibytes $BFE3 + .hibytes $BFE4 + .hibytes $BFE5 + .hibytes $BFE6 + .hibytes $BFE7 + .hibytes $BFE8 + .hibytes $BFE9 + .hibytes $BFEA + .hibytes $BFEB + .hibytes $BFEC + .hibytes $BFED + .hibytes $BFEE + .hibytes $BFEF + .hibytes $BFF0 + .hibytes $BFF1 + .hibytes $BFF2 + .hibytes $BFF3 + .hibytes $BFF4 + .hibytes $BFF5 + .hibytes $BFF6 + .hibytes $BFF7 + .hibytes $BFF8 + .hibytes $BFF9 + .hibytes $BFFA + .hibytes $BFFB + .hibytes $BFFC + .hibytes $BFFD + .hibytes $BFFE + .hibytes $BFFF + .hibytes $C000 + .hibytes $C001 + .hibytes $C002 + .hibytes $C003 + .hibytes $C004 + .hibytes $C005 + .hibytes $C006 + .hibytes $C007 + .hibytes $C008 + .hibytes $C009 + .hibytes $C00A + .hibytes $C00B + .hibytes $C00C + .hibytes $C00D + .hibytes $C00E + .hibytes $C00F + .hibytes $CFE1 + .hibytes $CFE2 + .hibytes $CFE3 + .hibytes $CFE4 + .hibytes $CFE5 + .hibytes $CFE6 + .hibytes $CFE7 + .hibytes $CFE8 + .hibytes $CFE9 + .hibytes $CFEA + .hibytes $CFEB + .hibytes $CFEC + .hibytes $CFED + .hibytes $CFEE + .hibytes $CFEF + .hibytes $CFF0 + .hibytes $CFF1 + .hibytes $CFF2 + .hibytes $CFF3 + .hibytes $CFF4 + .hibytes $CFF5 + .hibytes $CFF6 + .hibytes $CFF7 + .hibytes $CFF8 + .hibytes $CFF9 + .hibytes $CFFA + .hibytes $CFFB + .hibytes $CFFC + .hibytes $CFFD + .hibytes $CFFE + .hibytes $CFFF + .hibytes $D000 + .hibytes $D001 + .hibytes $D002 + .hibytes $D003 + .hibytes $D004 + .hibytes $D005 + .hibytes $D006 + .hibytes $D007 + .hibytes $D008 + .hibytes $D009 + .hibytes $D00A + .hibytes $D00B + .hibytes $D00C + .hibytes $D00D + .hibytes $D00E + .hibytes $D00F + .hibytes $DFE1 + .hibytes $DFE2 + .hibytes $DFE3 + .hibytes $DFE4 + .hibytes $DFE5 + .hibytes $DFE6 + .hibytes $DFE7 + .hibytes $DFE8 + .hibytes $DFE9 + .hibytes $DFEA + .hibytes $DFEB + .hibytes $DFEC + .hibytes $DFED + .hibytes $DFEE + .hibytes $DFEF + .hibytes $DFF0 + .hibytes $DFF1 + .hibytes $DFF2 + .hibytes $DFF3 + .hibytes $DFF4 + .hibytes $DFF5 + .hibytes $DFF6 + .hibytes $DFF7 + .hibytes $DFF8 + .hibytes $DFF9 + .hibytes $DFFA + .hibytes $DFFB + .hibytes $DFFC + .hibytes $DFFD + .hibytes $DFFE + .hibytes $DFFF + .hibytes $E000 + .hibytes $E001 + .hibytes $E002 + .hibytes $E003 + .hibytes $E004 + .hibytes $E005 + .hibytes $E006 + .hibytes $E007 + .hibytes $E008 + .hibytes $E009 + .hibytes $E00A + .hibytes $E00B + .hibytes $E00C + .hibytes $E00D + .hibytes $E00E + .hibytes $E00F + .hibytes $EFE1 + .hibytes $EFE2 + .hibytes $EFE3 + .hibytes $EFE4 + .hibytes $EFE5 + .hibytes $EFE6 + .hibytes $EFE7 + .hibytes $EFE8 + .hibytes $EFE9 + .hibytes $EFEA + .hibytes $EFEB + .hibytes $EFEC + .hibytes $EFED + .hibytes $EFEE + .hibytes $EFEF + .hibytes $EFF0 + .hibytes $EFF1 + .hibytes $EFF2 + .hibytes $EFF3 + .hibytes $EFF4 + .hibytes $EFF5 + .hibytes $EFF6 + .hibytes $EFF7 + .hibytes $EFF8 + .hibytes $EFF9 + .hibytes $EFFA + .hibytes $EFFB + .hibytes $EFFC + .hibytes $EFFD + .hibytes $EFFE + .hibytes $EFFF + .hibytes $F000 + .hibytes $F001 + .hibytes $F002 + .hibytes $F003 + .hibytes $F004 + .hibytes $F005 + .hibytes $F006 + .hibytes $F007 + .hibytes $F008 + .hibytes $F009 + .hibytes $F00A + .hibytes $F00B + .hibytes $F00C + .hibytes $F00D + .hibytes $F00E + .hibytes $F00F + .hibytes $FFE1 + .hibytes $FFE2 + .hibytes $FFE3 + .hibytes $FFE4 + .hibytes $FFE5 + .hibytes $FFE6 + .hibytes $FFE7 + .hibytes $FFE8 + .hibytes $FFE9 + .hibytes $FFEA + .hibytes $FFEB + .hibytes $FFEC + .hibytes $FFED + .hibytes $FFEE + .hibytes $FFEF + .hibytes $FFF0 + .hibytes $FFF1 + .hibytes $FFF2 + .hibytes $FFF3 + .hibytes $FFF4 + .hibytes $FFF5 + .hibytes $FFF6 + .hibytes $FFF7 + .hibytes $FFF8 + .hibytes $FFF9 + .hibytes $FFFA + .hibytes $FFFB + .hibytes $FFFC + .hibytes $FFFD + .hibytes $FFFE + .hibytes $FFFF - ; alternative hex values - .hibytes 0h - .hibytes 1h - .hibytes 2h - .hibytes 3h - .hibytes 4h - .hibytes 5h - .hibytes 6h - .hibytes 7h - .hibytes 8h - .hibytes 9h - .hibytes 0ah - .hibytes 0bh - .hibytes 0ch - .hibytes 0dh - .hibytes 0eh - .hibytes 0fh - .hibytes 10h - .hibytes 11h - .hibytes 12h - .hibytes 13h - .hibytes 70h - .hibytes 71h - .hibytes 72h - .hibytes 73h - .hibytes 74h - .hibytes 75h - .hibytes 76h - .hibytes 77h - .hibytes 78h - .hibytes 79h - .hibytes 7ah - .hibytes 7bh - .hibytes 7ch - .hibytes 7dh - .hibytes 7eh - .hibytes 7fh - .hibytes 80h - .hibytes 81h - .hibytes 82h - .hibytes 83h - .hibytes 84h - .hibytes 85h - .hibytes 86h - .hibytes 0f0h - .hibytes 0f1h - .hibytes 0f2h - .hibytes 0f3h - .hibytes 0f4h - .hibytes 0f5h - .hibytes 0f6h - .hibytes 0f7h - .hibytes 0f8h - .hibytes 0f9h - .hibytes 0fah - .hibytes 0fbh - .hibytes 0fch - .hibytes 0fdh - .hibytes 0feh - .hibytes 0ffh - .hibytes 100h - .hibytes 101h - .hibytes 102h - .hibytes 103h - .hibytes 0fd2h - .hibytes 0fd3h - .hibytes 0fd4h - .hibytes 0fd5h - .hibytes 0fd6h - .hibytes 0fd7h - .hibytes 0fd8h - .hibytes 0fd9h - .hibytes 0fdah - .hibytes 0fdbh - .hibytes 0fdch - .hibytes 0fddh - .hibytes 0fdeh - .hibytes 0fdfh - .hibytes 0fe0h - .hibytes 0fe1h - .hibytes 0fe2h - .hibytes 0fe3h - .hibytes 0fe4h - .hibytes 0fe5h - .hibytes 0fe6h - .hibytes 0fe7h - .hibytes 0fe8h - .hibytes 0fe9h - .hibytes 0feah - .hibytes 0febh - .hibytes 0fech - .hibytes 0fedh - .hibytes 0feeh - .hibytes 0fefh - .hibytes 0ff0h - .hibytes 0ff1h - .hibytes 0ff2h - .hibytes 0ff3h - .hibytes 0ff4h - .hibytes 0ff5h - .hibytes 0ff6h - .hibytes 0ff7h - .hibytes 0ff8h - .hibytes 0ff9h - .hibytes 0ffah - .hibytes 0ffbh - .hibytes 0ffch - .hibytes 0ffdh - .hibytes 0ffeh - .hibytes 0fffh - .hibytes 1000h - .hibytes 1001h - .hibytes 1002h - .hibytes 1003h - .hibytes 1004h - .hibytes 1005h - .hibytes 1006h - .hibytes 1007h - .hibytes 1008h - .hibytes 7ff0h - .hibytes 7ff1h - .hibytes 7ff2h - .hibytes 7ff3h - .hibytes 7ff4h - .hibytes 7ff5h - .hibytes 7ff6h - .hibytes 7ff7h - .hibytes 7ff8h - .hibytes 7ff9h - .hibytes 7ffah - .hibytes 7ffbh - .hibytes 7ffch - .hibytes 7ffdh - .hibytes 7ffeh - .hibytes 7fffh - .hibytes 8000h - .hibytes 8001h - .hibytes 8002h - .hibytes 8003h - .hibytes 8004h - .hibytes 8005h - .hibytes 8006h - .hibytes 8007h - .hibytes 8008h - .hibytes 8009h - .hibytes 800ah - .hibytes 800bh - .hibytes 9fe1h - .hibytes 9fe2h - .hibytes 9fe3h - .hibytes 9fe4h - .hibytes 9fe5h - .hibytes 9fe6h - .hibytes 9fe7h - .hibytes 9fe8h - .hibytes 9fe9h - .hibytes 9feah - .hibytes 9febh - .hibytes 9fech - .hibytes 9fedh - .hibytes 9feeh - .hibytes 9fefh - .hibytes 9ff0h - .hibytes 9ff1h - .hibytes 9ff2h - .hibytes 9ff3h - .hibytes 9ff4h - .hibytes 9ff5h - .hibytes 9ff6h - .hibytes 9ff7h - .hibytes 9ff8h - .hibytes 9ff9h - .hibytes 9ffah - .hibytes 9ffbh - .hibytes 9ffch - .hibytes 9ffdh - .hibytes 9ffeh - .hibytes 9fffh - .hibytes 0a000h - .hibytes 0a001h - .hibytes 0a002h - .hibytes 0a003h - .hibytes 0a004h - .hibytes 0a005h - .hibytes 0a006h - .hibytes 0a007h - .hibytes 0a008h - .hibytes 0a009h - .hibytes 0a00ah - .hibytes 0a00bh - .hibytes 0a00ch - .hibytes 0a00dh - .hibytes 0a00eh - .hibytes 0a00fh - .hibytes 0afe1h - .hibytes 0afe2h - .hibytes 0afe3h - .hibytes 0afe4h - .hibytes 0afe5h - .hibytes 0afe6h - .hibytes 0afe7h - .hibytes 0afe8h - .hibytes 0afe9h - .hibytes 0afeah - .hibytes 0afebh - .hibytes 0afech - .hibytes 0afedh - .hibytes 0afeeh - .hibytes 0afefh - .hibytes 0aff0h - .hibytes 0aff1h - .hibytes 0aff2h - .hibytes 0aff3h - .hibytes 0aff4h - .hibytes 0aff5h - .hibytes 0aff6h - .hibytes 0aff7h - .hibytes 0aff8h - .hibytes 0aff9h - .hibytes 0affah - .hibytes 0affbh - .hibytes 0affch - .hibytes 0affdh - .hibytes 0affeh - .hibytes 0afffh - .hibytes 0b000h - .hibytes 0b001h - .hibytes 0b002h - .hibytes 0b003h - .hibytes 0b004h - .hibytes 0b005h - .hibytes 0b006h - .hibytes 0b007h - .hibytes 0b008h - .hibytes 0b009h - .hibytes 0b00ah - .hibytes 0b00bh - .hibytes 0b00ch - .hibytes 0b00dh - .hibytes 0b00eh - .hibytes 0b00fh - .hibytes 0bfe1h - .hibytes 0bfe2h - .hibytes 0bfe3h - .hibytes 0bfe4h - .hibytes 0bfe5h - .hibytes 0bfe6h - .hibytes 0bfe7h - .hibytes 0bfe8h - .hibytes 0bfe9h - .hibytes 0bfeah - .hibytes 0bfebh - .hibytes 0bfech - .hibytes 0bfedh - .hibytes 0bfeeh - .hibytes 0bfefh - .hibytes 0bff0h - .hibytes 0bff1h - .hibytes 0bff2h - .hibytes 0bff3h - .hibytes 0bff4h - .hibytes 0bff5h - .hibytes 0bff6h - .hibytes 0bff7h - .hibytes 0bff8h - .hibytes 0bff9h - .hibytes 0bffah - .hibytes 0bffbh - .hibytes 0bffch - .hibytes 0bffdh - .hibytes 0bffeh - .hibytes 0bfffh - .hibytes 0c000h - .hibytes 0c001h - .hibytes 0c002h - .hibytes 0c003h - .hibytes 0c004h - .hibytes 0c005h - .hibytes 0c006h - .hibytes 0c007h - .hibytes 0c008h - .hibytes 0c009h - .hibytes 0c00ah - .hibytes 0c00bh - .hibytes 0c00ch - .hibytes 0c00dh - .hibytes 0c00eh - .hibytes 0c00fh - .hibytes 0cfe1h - .hibytes 0cfe2h - .hibytes 0cfe3h - .hibytes 0cfe4h - .hibytes 0cfe5h - .hibytes 0cfe6h - .hibytes 0cfe7h - .hibytes 0cfe8h - .hibytes 0cfe9h - .hibytes 0cfeah - .hibytes 0cfebh - .hibytes 0cfech - .hibytes 0cfedh - .hibytes 0cfeeh - .hibytes 0cfefh - .hibytes 0cff0h - .hibytes 0cff1h - .hibytes 0cff2h - .hibytes 0cff3h - .hibytes 0cff4h - .hibytes 0cff5h - .hibytes 0cff6h - .hibytes 0cff7h - .hibytes 0cff8h - .hibytes 0cff9h - .hibytes 0cffah - .hibytes 0cffbh - .hibytes 0cffch - .hibytes 0cffdh - .hibytes 0cffeh - .hibytes 0cfffh - .hibytes 0d000h - .hibytes 0d001h - .hibytes 0d002h - .hibytes 0d003h - .hibytes 0d004h - .hibytes 0d005h - .hibytes 0d006h - .hibytes 0d007h - .hibytes 0d008h - .hibytes 0d009h - .hibytes 0d00ah - .hibytes 0d00bh - .hibytes 0d00ch - .hibytes 0d00dh - .hibytes 0d00eh - .hibytes 0d00fh - .hibytes 0dfe1h - .hibytes 0dfe2h - .hibytes 0dfe3h - .hibytes 0dfe4h - .hibytes 0dfe5h - .hibytes 0dfe6h - .hibytes 0dfe7h - .hibytes 0dfe8h - .hibytes 0dfe9h - .hibytes 0dfeah - .hibytes 0dfebh - .hibytes 0dfech - .hibytes 0dfedh - .hibytes 0dfeeh - .hibytes 0dfefh - .hibytes 0dff0h - .hibytes 0dff1h - .hibytes 0dff2h - .hibytes 0dff3h - .hibytes 0dff4h - .hibytes 0dff5h - .hibytes 0dff6h - .hibytes 0dff7h - .hibytes 0dff8h - .hibytes 0dff9h - .hibytes 0dffah - .hibytes 0dffbh - .hibytes 0dffch - .hibytes 0dffdh - .hibytes 0dffeh - .hibytes 0dfffh - .hibytes 0e000h - .hibytes 0e001h - .hibytes 0e002h - .hibytes 0e003h - .hibytes 0e004h - .hibytes 0e005h - .hibytes 0e006h - .hibytes 0e007h - .hibytes 0e008h - .hibytes 0e009h - .hibytes 0e00ah - .hibytes 0e00bh - .hibytes 0e00ch - .hibytes 0e00dh - .hibytes 0e00eh - .hibytes 0e00fh - .hibytes 0efe1h - .hibytes 0efe2h - .hibytes 0efe3h - .hibytes 0efe4h - .hibytes 0efe5h - .hibytes 0efe6h - .hibytes 0efe7h - .hibytes 0efe8h - .hibytes 0efe9h - .hibytes 0efeah - .hibytes 0efebh - .hibytes 0efech - .hibytes 0efedh - .hibytes 0efeeh - .hibytes 0efefh - .hibytes 0eff0h - .hibytes 0eff1h - .hibytes 0eff2h - .hibytes 0eff3h - .hibytes 0eff4h - .hibytes 0eff5h - .hibytes 0eff6h - .hibytes 0eff7h - .hibytes 0eff8h - .hibytes 0eff9h - .hibytes 0effah - .hibytes 0effbh - .hibytes 0effch - .hibytes 0effdh - .hibytes 0effeh - .hibytes 0efffh - .hibytes 0f000h - .hibytes 0f001h - .hibytes 0f002h - .hibytes 0f003h - .hibytes 0f004h - .hibytes 0f005h - .hibytes 0f006h - .hibytes 0f007h - .hibytes 0f008h - .hibytes 0f009h - .hibytes 0f00ah - .hibytes 0f00bh - .hibytes 0f00ch - .hibytes 0f00dh - .hibytes 0f00eh - .hibytes 0f00fh - .hibytes 0ffe1h - .hibytes 0ffe2h - .hibytes 0ffe3h - .hibytes 0ffe4h - .hibytes 0ffe5h - .hibytes 0ffe6h - .hibytes 0ffe7h - .hibytes 0ffe8h - .hibytes 0ffe9h - .hibytes 0ffeah - .hibytes 0ffebh - .hibytes 0ffech - .hibytes 0ffedh - .hibytes 0ffeeh - .hibytes 0ffefh - .hibytes 0fff0h - .hibytes 0fff1h - .hibytes 0fff2h - .hibytes 0fff3h - .hibytes 0fff4h - .hibytes 0fff5h - .hibytes 0fff6h - .hibytes 0fff7h - .hibytes 0fff8h - .hibytes 0fff9h - .hibytes 0fffah - .hibytes 0fffbh - .hibytes 0fffch - .hibytes 0fffdh - .hibytes 0fffeh - .hibytes 0ffffh + ; alternative hex values + .hibytes 0h + .hibytes 1h + .hibytes 2h + .hibytes 3h + .hibytes 4h + .hibytes 5h + .hibytes 6h + .hibytes 7h + .hibytes 8h + .hibytes 9h + .hibytes 0ah + .hibytes 0bh + .hibytes 0ch + .hibytes 0dh + .hibytes 0eh + .hibytes 0fh + .hibytes 10h + .hibytes 11h + .hibytes 12h + .hibytes 13h + .hibytes 70h + .hibytes 71h + .hibytes 72h + .hibytes 73h + .hibytes 74h + .hibytes 75h + .hibytes 76h + .hibytes 77h + .hibytes 78h + .hibytes 79h + .hibytes 7ah + .hibytes 7bh + .hibytes 7ch + .hibytes 7dh + .hibytes 7eh + .hibytes 7fh + .hibytes 80h + .hibytes 81h + .hibytes 82h + .hibytes 83h + .hibytes 84h + .hibytes 85h + .hibytes 86h + .hibytes 0f0h + .hibytes 0f1h + .hibytes 0f2h + .hibytes 0f3h + .hibytes 0f4h + .hibytes 0f5h + .hibytes 0f6h + .hibytes 0f7h + .hibytes 0f8h + .hibytes 0f9h + .hibytes 0fah + .hibytes 0fbh + .hibytes 0fch + .hibytes 0fdh + .hibytes 0feh + .hibytes 0ffh + .hibytes 100h + .hibytes 101h + .hibytes 102h + .hibytes 103h + .hibytes 0fd2h + .hibytes 0fd3h + .hibytes 0fd4h + .hibytes 0fd5h + .hibytes 0fd6h + .hibytes 0fd7h + .hibytes 0fd8h + .hibytes 0fd9h + .hibytes 0fdah + .hibytes 0fdbh + .hibytes 0fdch + .hibytes 0fddh + .hibytes 0fdeh + .hibytes 0fdfh + .hibytes 0fe0h + .hibytes 0fe1h + .hibytes 0fe2h + .hibytes 0fe3h + .hibytes 0fe4h + .hibytes 0fe5h + .hibytes 0fe6h + .hibytes 0fe7h + .hibytes 0fe8h + .hibytes 0fe9h + .hibytes 0feah + .hibytes 0febh + .hibytes 0fech + .hibytes 0fedh + .hibytes 0feeh + .hibytes 0fefh + .hibytes 0ff0h + .hibytes 0ff1h + .hibytes 0ff2h + .hibytes 0ff3h + .hibytes 0ff4h + .hibytes 0ff5h + .hibytes 0ff6h + .hibytes 0ff7h + .hibytes 0ff8h + .hibytes 0ff9h + .hibytes 0ffah + .hibytes 0ffbh + .hibytes 0ffch + .hibytes 0ffdh + .hibytes 0ffeh + .hibytes 0fffh + .hibytes 1000h + .hibytes 1001h + .hibytes 1002h + .hibytes 1003h + .hibytes 1004h + .hibytes 1005h + .hibytes 1006h + .hibytes 1007h + .hibytes 1008h + .hibytes 7ff0h + .hibytes 7ff1h + .hibytes 7ff2h + .hibytes 7ff3h + .hibytes 7ff4h + .hibytes 7ff5h + .hibytes 7ff6h + .hibytes 7ff7h + .hibytes 7ff8h + .hibytes 7ff9h + .hibytes 7ffah + .hibytes 7ffbh + .hibytes 7ffch + .hibytes 7ffdh + .hibytes 7ffeh + .hibytes 7fffh + .hibytes 8000h + .hibytes 8001h + .hibytes 8002h + .hibytes 8003h + .hibytes 8004h + .hibytes 8005h + .hibytes 8006h + .hibytes 8007h + .hibytes 8008h + .hibytes 8009h + .hibytes 800ah + .hibytes 800bh + .hibytes 9fe1h + .hibytes 9fe2h + .hibytes 9fe3h + .hibytes 9fe4h + .hibytes 9fe5h + .hibytes 9fe6h + .hibytes 9fe7h + .hibytes 9fe8h + .hibytes 9fe9h + .hibytes 9feah + .hibytes 9febh + .hibytes 9fech + .hibytes 9fedh + .hibytes 9feeh + .hibytes 9fefh + .hibytes 9ff0h + .hibytes 9ff1h + .hibytes 9ff2h + .hibytes 9ff3h + .hibytes 9ff4h + .hibytes 9ff5h + .hibytes 9ff6h + .hibytes 9ff7h + .hibytes 9ff8h + .hibytes 9ff9h + .hibytes 9ffah + .hibytes 9ffbh + .hibytes 9ffch + .hibytes 9ffdh + .hibytes 9ffeh + .hibytes 9fffh + .hibytes 0a000h + .hibytes 0a001h + .hibytes 0a002h + .hibytes 0a003h + .hibytes 0a004h + .hibytes 0a005h + .hibytes 0a006h + .hibytes 0a007h + .hibytes 0a008h + .hibytes 0a009h + .hibytes 0a00ah + .hibytes 0a00bh + .hibytes 0a00ch + .hibytes 0a00dh + .hibytes 0a00eh + .hibytes 0a00fh + .hibytes 0afe1h + .hibytes 0afe2h + .hibytes 0afe3h + .hibytes 0afe4h + .hibytes 0afe5h + .hibytes 0afe6h + .hibytes 0afe7h + .hibytes 0afe8h + .hibytes 0afe9h + .hibytes 0afeah + .hibytes 0afebh + .hibytes 0afech + .hibytes 0afedh + .hibytes 0afeeh + .hibytes 0afefh + .hibytes 0aff0h + .hibytes 0aff1h + .hibytes 0aff2h + .hibytes 0aff3h + .hibytes 0aff4h + .hibytes 0aff5h + .hibytes 0aff6h + .hibytes 0aff7h + .hibytes 0aff8h + .hibytes 0aff9h + .hibytes 0affah + .hibytes 0affbh + .hibytes 0affch + .hibytes 0affdh + .hibytes 0affeh + .hibytes 0afffh + .hibytes 0b000h + .hibytes 0b001h + .hibytes 0b002h + .hibytes 0b003h + .hibytes 0b004h + .hibytes 0b005h + .hibytes 0b006h + .hibytes 0b007h + .hibytes 0b008h + .hibytes 0b009h + .hibytes 0b00ah + .hibytes 0b00bh + .hibytes 0b00ch + .hibytes 0b00dh + .hibytes 0b00eh + .hibytes 0b00fh + .hibytes 0bfe1h + .hibytes 0bfe2h + .hibytes 0bfe3h + .hibytes 0bfe4h + .hibytes 0bfe5h + .hibytes 0bfe6h + .hibytes 0bfe7h + .hibytes 0bfe8h + .hibytes 0bfe9h + .hibytes 0bfeah + .hibytes 0bfebh + .hibytes 0bfech + .hibytes 0bfedh + .hibytes 0bfeeh + .hibytes 0bfefh + .hibytes 0bff0h + .hibytes 0bff1h + .hibytes 0bff2h + .hibytes 0bff3h + .hibytes 0bff4h + .hibytes 0bff5h + .hibytes 0bff6h + .hibytes 0bff7h + .hibytes 0bff8h + .hibytes 0bff9h + .hibytes 0bffah + .hibytes 0bffbh + .hibytes 0bffch + .hibytes 0bffdh + .hibytes 0bffeh + .hibytes 0bfffh + .hibytes 0c000h + .hibytes 0c001h + .hibytes 0c002h + .hibytes 0c003h + .hibytes 0c004h + .hibytes 0c005h + .hibytes 0c006h + .hibytes 0c007h + .hibytes 0c008h + .hibytes 0c009h + .hibytes 0c00ah + .hibytes 0c00bh + .hibytes 0c00ch + .hibytes 0c00dh + .hibytes 0c00eh + .hibytes 0c00fh + .hibytes 0cfe1h + .hibytes 0cfe2h + .hibytes 0cfe3h + .hibytes 0cfe4h + .hibytes 0cfe5h + .hibytes 0cfe6h + .hibytes 0cfe7h + .hibytes 0cfe8h + .hibytes 0cfe9h + .hibytes 0cfeah + .hibytes 0cfebh + .hibytes 0cfech + .hibytes 0cfedh + .hibytes 0cfeeh + .hibytes 0cfefh + .hibytes 0cff0h + .hibytes 0cff1h + .hibytes 0cff2h + .hibytes 0cff3h + .hibytes 0cff4h + .hibytes 0cff5h + .hibytes 0cff6h + .hibytes 0cff7h + .hibytes 0cff8h + .hibytes 0cff9h + .hibytes 0cffah + .hibytes 0cffbh + .hibytes 0cffch + .hibytes 0cffdh + .hibytes 0cffeh + .hibytes 0cfffh + .hibytes 0d000h + .hibytes 0d001h + .hibytes 0d002h + .hibytes 0d003h + .hibytes 0d004h + .hibytes 0d005h + .hibytes 0d006h + .hibytes 0d007h + .hibytes 0d008h + .hibytes 0d009h + .hibytes 0d00ah + .hibytes 0d00bh + .hibytes 0d00ch + .hibytes 0d00dh + .hibytes 0d00eh + .hibytes 0d00fh + .hibytes 0dfe1h + .hibytes 0dfe2h + .hibytes 0dfe3h + .hibytes 0dfe4h + .hibytes 0dfe5h + .hibytes 0dfe6h + .hibytes 0dfe7h + .hibytes 0dfe8h + .hibytes 0dfe9h + .hibytes 0dfeah + .hibytes 0dfebh + .hibytes 0dfech + .hibytes 0dfedh + .hibytes 0dfeeh + .hibytes 0dfefh + .hibytes 0dff0h + .hibytes 0dff1h + .hibytes 0dff2h + .hibytes 0dff3h + .hibytes 0dff4h + .hibytes 0dff5h + .hibytes 0dff6h + .hibytes 0dff7h + .hibytes 0dff8h + .hibytes 0dff9h + .hibytes 0dffah + .hibytes 0dffbh + .hibytes 0dffch + .hibytes 0dffdh + .hibytes 0dffeh + .hibytes 0dfffh + .hibytes 0e000h + .hibytes 0e001h + .hibytes 0e002h + .hibytes 0e003h + .hibytes 0e004h + .hibytes 0e005h + .hibytes 0e006h + .hibytes 0e007h + .hibytes 0e008h + .hibytes 0e009h + .hibytes 0e00ah + .hibytes 0e00bh + .hibytes 0e00ch + .hibytes 0e00dh + .hibytes 0e00eh + .hibytes 0e00fh + .hibytes 0efe1h + .hibytes 0efe2h + .hibytes 0efe3h + .hibytes 0efe4h + .hibytes 0efe5h + .hibytes 0efe6h + .hibytes 0efe7h + .hibytes 0efe8h + .hibytes 0efe9h + .hibytes 0efeah + .hibytes 0efebh + .hibytes 0efech + .hibytes 0efedh + .hibytes 0efeeh + .hibytes 0efefh + .hibytes 0eff0h + .hibytes 0eff1h + .hibytes 0eff2h + .hibytes 0eff3h + .hibytes 0eff4h + .hibytes 0eff5h + .hibytes 0eff6h + .hibytes 0eff7h + .hibytes 0eff8h + .hibytes 0eff9h + .hibytes 0effah + .hibytes 0effbh + .hibytes 0effch + .hibytes 0effdh + .hibytes 0effeh + .hibytes 0efffh + .hibytes 0f000h + .hibytes 0f001h + .hibytes 0f002h + .hibytes 0f003h + .hibytes 0f004h + .hibytes 0f005h + .hibytes 0f006h + .hibytes 0f007h + .hibytes 0f008h + .hibytes 0f009h + .hibytes 0f00ah + .hibytes 0f00bh + .hibytes 0f00ch + .hibytes 0f00dh + .hibytes 0f00eh + .hibytes 0f00fh + .hibytes 0ffe1h + .hibytes 0ffe2h + .hibytes 0ffe3h + .hibytes 0ffe4h + .hibytes 0ffe5h + .hibytes 0ffe6h + .hibytes 0ffe7h + .hibytes 0ffe8h + .hibytes 0ffe9h + .hibytes 0ffeah + .hibytes 0ffebh + .hibytes 0ffech + .hibytes 0ffedh + .hibytes 0ffeeh + .hibytes 0ffefh + .hibytes 0fff0h + .hibytes 0fff1h + .hibytes 0fff2h + .hibytes 0fff3h + .hibytes 0fff4h + .hibytes 0fff5h + .hibytes 0fff6h + .hibytes 0fff7h + .hibytes 0fff8h + .hibytes 0fff9h + .hibytes 0fffah + .hibytes 0fffbh + .hibytes 0fffch + .hibytes 0fffdh + .hibytes 0fffeh + .hibytes 0ffffh - ; alternative hex values, uppercase - .hibytes 0h - .hibytes 1h - .hibytes 2h - .hibytes 3h - .hibytes 4h - .hibytes 5h - .hibytes 6h - .hibytes 7h - .hibytes 8h - .hibytes 9h - .hibytes 0Ah - .hibytes 0Bh - .hibytes 0Ch - .hibytes 0Dh - .hibytes 0Eh - .hibytes 0Fh - .hibytes 10h - .hibytes 11h - .hibytes 12h - .hibytes 13h - .hibytes 70h - .hibytes 71h - .hibytes 72h - .hibytes 73h - .hibytes 74h - .hibytes 75h - .hibytes 76h - .hibytes 77h - .hibytes 78h - .hibytes 79h - .hibytes 7Ah - .hibytes 7Bh - .hibytes 7Ch - .hibytes 7Dh - .hibytes 7Eh - .hibytes 7Fh - .hibytes 80h - .hibytes 81h - .hibytes 82h - .hibytes 83h - .hibytes 84h - .hibytes 85h - .hibytes 86h - .hibytes 0F0h - .hibytes 0F1h - .hibytes 0F2h - .hibytes 0F3h - .hibytes 0F4h - .hibytes 0F5h - .hibytes 0F6h - .hibytes 0F7h - .hibytes 0F8h - .hibytes 0F9h - .hibytes 0FAh - .hibytes 0FBh - .hibytes 0FCh - .hibytes 0FDh - .hibytes 0FEh - .hibytes 0FFh - .hibytes 100h - .hibytes 101h - .hibytes 102h - .hibytes 103h - .hibytes 0FD2h - .hibytes 0FD3h - .hibytes 0FD4h - .hibytes 0FD5h - .hibytes 0FD6h - .hibytes 0FD7h - .hibytes 0FD8h - .hibytes 0FD9h - .hibytes 0FDAh - .hibytes 0FDBh - .hibytes 0FDCh - .hibytes 0FDDh - .hibytes 0FDEh - .hibytes 0FDFh - .hibytes 0FE0h - .hibytes 0FE1h - .hibytes 0FE2h - .hibytes 0FE3h - .hibytes 0FE4h - .hibytes 0FE5h - .hibytes 0FE6h - .hibytes 0FE7h - .hibytes 0FE8h - .hibytes 0FE9h - .hibytes 0FEAh - .hibytes 0FEBh - .hibytes 0FECh - .hibytes 0FEDh - .hibytes 0FEEh - .hibytes 0FEFh - .hibytes 0FF0h - .hibytes 0FF1h - .hibytes 0FF2h - .hibytes 0FF3h - .hibytes 0FF4h - .hibytes 0FF5h - .hibytes 0FF6h - .hibytes 0FF7h - .hibytes 0FF8h - .hibytes 0FF9h - .hibytes 0FFAh - .hibytes 0FFBh - .hibytes 0FFCh - .hibytes 0FFDh - .hibytes 0FFEh - .hibytes 0FFFh - .hibytes 1000h - .hibytes 1001h - .hibytes 1002h - .hibytes 1003h - .hibytes 1004h - .hibytes 1005h - .hibytes 1006h - .hibytes 1007h - .hibytes 1008h - .hibytes 7FF0h - .hibytes 7FF1h - .hibytes 7FF2h - .hibytes 7FF3h - .hibytes 7FF4h - .hibytes 7FF5h - .hibytes 7FF6h - .hibytes 7FF7h - .hibytes 7FF8h - .hibytes 7FF9h - .hibytes 7FFAh - .hibytes 7FFBh - .hibytes 7FFCh - .hibytes 7FFDh - .hibytes 7FFEh - .hibytes 7FFFh - .hibytes 8000h - .hibytes 8001h - .hibytes 8002h - .hibytes 8003h - .hibytes 8004h - .hibytes 8005h - .hibytes 8006h - .hibytes 8007h - .hibytes 8008h - .hibytes 8009h - .hibytes 800Ah - .hibytes 800Bh - .hibytes 9FE1h - .hibytes 9FE2h - .hibytes 9FE3h - .hibytes 9FE4h - .hibytes 9FE5h - .hibytes 9FE6h - .hibytes 9FE7h - .hibytes 9FE8h - .hibytes 9FE9h - .hibytes 9FEAh - .hibytes 9FEBh - .hibytes 9FECh - .hibytes 9FEDh - .hibytes 9FEEh - .hibytes 9FEFh - .hibytes 9FF0h - .hibytes 9FF1h - .hibytes 9FF2h - .hibytes 9FF3h - .hibytes 9FF4h - .hibytes 9FF5h - .hibytes 9FF6h - .hibytes 9FF7h - .hibytes 9FF8h - .hibytes 9FF9h - .hibytes 9FFAh - .hibytes 9FFBh - .hibytes 9FFCh - .hibytes 9FFDh - .hibytes 9FFEh - .hibytes 9FFFh - .hibytes 0A000h - .hibytes 0A001h - .hibytes 0A002h - .hibytes 0A003h - .hibytes 0A004h - .hibytes 0A005h - .hibytes 0A006h - .hibytes 0A007h - .hibytes 0A008h - .hibytes 0A009h - .hibytes 0A00Ah - .hibytes 0A00Bh - .hibytes 0A00Ch - .hibytes 0A00Dh - .hibytes 0A00Eh - .hibytes 0A00Fh - .hibytes 0AFE1h - .hibytes 0AFE2h - .hibytes 0AFE3h - .hibytes 0AFE4h - .hibytes 0AFE5h - .hibytes 0AFE6h - .hibytes 0AFE7h - .hibytes 0AFE8h - .hibytes 0AFE9h - .hibytes 0AFEAh - .hibytes 0AFEBh - .hibytes 0AFECh - .hibytes 0AFEDh - .hibytes 0AFEEh - .hibytes 0AFEFh - .hibytes 0AFF0h - .hibytes 0AFF1h - .hibytes 0AFF2h - .hibytes 0AFF3h - .hibytes 0AFF4h - .hibytes 0AFF5h - .hibytes 0AFF6h - .hibytes 0AFF7h - .hibytes 0AFF8h - .hibytes 0AFF9h - .hibytes 0AFFAh - .hibytes 0AFFBh - .hibytes 0AFFCh - .hibytes 0AFFDh - .hibytes 0AFFEh - .hibytes 0AFFFh - .hibytes 0B000h - .hibytes 0B001h - .hibytes 0B002h - .hibytes 0B003h - .hibytes 0B004h - .hibytes 0B005h - .hibytes 0B006h - .hibytes 0B007h - .hibytes 0B008h - .hibytes 0B009h - .hibytes 0B00Ah - .hibytes 0B00Bh - .hibytes 0B00Ch - .hibytes 0B00Dh - .hibytes 0B00Eh - .hibytes 0B00Fh - .hibytes 0BFE1h - .hibytes 0BFE2h - .hibytes 0BFE3h - .hibytes 0BFE4h - .hibytes 0BFE5h - .hibytes 0BFE6h - .hibytes 0BFE7h - .hibytes 0BFE8h - .hibytes 0BFE9h - .hibytes 0BFEAh - .hibytes 0BFEBh - .hibytes 0BFECh - .hibytes 0BFEDh - .hibytes 0BFEEh - .hibytes 0BFEFh - .hibytes 0BFF0h - .hibytes 0BFF1h - .hibytes 0BFF2h - .hibytes 0BFF3h - .hibytes 0BFF4h - .hibytes 0BFF5h - .hibytes 0BFF6h - .hibytes 0BFF7h - .hibytes 0BFF8h - .hibytes 0BFF9h - .hibytes 0BFFAh - .hibytes 0BFFBh - .hibytes 0BFFCh - .hibytes 0BFFDh - .hibytes 0BFFEh - .hibytes 0BFFFh - .hibytes 0C000h - .hibytes 0C001h - .hibytes 0C002h - .hibytes 0C003h - .hibytes 0C004h - .hibytes 0C005h - .hibytes 0C006h - .hibytes 0C007h - .hibytes 0C008h - .hibytes 0C009h - .hibytes 0C00Ah - .hibytes 0C00Bh - .hibytes 0C00Ch - .hibytes 0C00Dh - .hibytes 0C00Eh - .hibytes 0C00Fh - .hibytes 0CFE1h - .hibytes 0CFE2h - .hibytes 0CFE3h - .hibytes 0CFE4h - .hibytes 0CFE5h - .hibytes 0CFE6h - .hibytes 0CFE7h - .hibytes 0CFE8h - .hibytes 0CFE9h - .hibytes 0CFEAh - .hibytes 0CFEBh - .hibytes 0CFECh - .hibytes 0CFEDh - .hibytes 0CFEEh - .hibytes 0CFEFh - .hibytes 0CFF0h - .hibytes 0CFF1h - .hibytes 0CFF2h - .hibytes 0CFF3h - .hibytes 0CFF4h - .hibytes 0CFF5h - .hibytes 0CFF6h - .hibytes 0CFF7h - .hibytes 0CFF8h - .hibytes 0CFF9h - .hibytes 0CFFAh - .hibytes 0CFFBh - .hibytes 0CFFCh - .hibytes 0CFFDh - .hibytes 0CFFEh - .hibytes 0CFFFh - .hibytes 0D000h - .hibytes 0D001h - .hibytes 0D002h - .hibytes 0D003h - .hibytes 0D004h - .hibytes 0D005h - .hibytes 0D006h - .hibytes 0D007h - .hibytes 0D008h - .hibytes 0D009h - .hibytes 0D00Ah - .hibytes 0D00Bh - .hibytes 0D00Ch - .hibytes 0D00Dh - .hibytes 0D00Eh - .hibytes 0D00Fh - .hibytes 0DFE1h - .hibytes 0DFE2h - .hibytes 0DFE3h - .hibytes 0DFE4h - .hibytes 0DFE5h - .hibytes 0DFE6h - .hibytes 0DFE7h - .hibytes 0DFE8h - .hibytes 0DFE9h - .hibytes 0DFEAh - .hibytes 0DFEBh - .hibytes 0DFECh - .hibytes 0DFEDh - .hibytes 0DFEEh - .hibytes 0DFEFh - .hibytes 0DFF0h - .hibytes 0DFF1h - .hibytes 0DFF2h - .hibytes 0DFF3h - .hibytes 0DFF4h - .hibytes 0DFF5h - .hibytes 0DFF6h - .hibytes 0DFF7h - .hibytes 0DFF8h - .hibytes 0DFF9h - .hibytes 0DFFAh - .hibytes 0DFFBh - .hibytes 0DFFCh - .hibytes 0DFFDh - .hibytes 0DFFEh - .hibytes 0DFFFh - .hibytes 0E000h - .hibytes 0E001h - .hibytes 0E002h - .hibytes 0E003h - .hibytes 0E004h - .hibytes 0E005h - .hibytes 0E006h - .hibytes 0E007h - .hibytes 0E008h - .hibytes 0E009h - .hibytes 0E00Ah - .hibytes 0E00Bh - .hibytes 0E00Ch - .hibytes 0E00Dh - .hibytes 0E00Eh - .hibytes 0E00Fh - .hibytes 0EFE1h - .hibytes 0EFE2h - .hibytes 0EFE3h - .hibytes 0EFE4h - .hibytes 0EFE5h - .hibytes 0EFE6h - .hibytes 0EFE7h - .hibytes 0EFE8h - .hibytes 0EFE9h - .hibytes 0EFEAh - .hibytes 0EFEBh - .hibytes 0EFECh - .hibytes 0EFEDh - .hibytes 0EFEEh - .hibytes 0EFEFh - .hibytes 0EFF0h - .hibytes 0EFF1h - .hibytes 0EFF2h - .hibytes 0EFF3h - .hibytes 0EFF4h - .hibytes 0EFF5h - .hibytes 0EFF6h - .hibytes 0EFF7h - .hibytes 0EFF8h - .hibytes 0EFF9h - .hibytes 0EFFAh - .hibytes 0EFFBh - .hibytes 0EFFCh - .hibytes 0EFFDh - .hibytes 0EFFEh - .hibytes 0EFFFh - .hibytes 0F000h - .hibytes 0F001h - .hibytes 0F002h - .hibytes 0F003h - .hibytes 0F004h - .hibytes 0F005h - .hibytes 0F006h - .hibytes 0F007h - .hibytes 0F008h - .hibytes 0F009h - .hibytes 0F00Ah - .hibytes 0F00Bh - .hibytes 0F00Ch - .hibytes 0F00Dh - .hibytes 0F00Eh - .hibytes 0F00Fh - .hibytes 0FFE1h - .hibytes 0FFE2h - .hibytes 0FFE3h - .hibytes 0FFE4h - .hibytes 0FFE5h - .hibytes 0FFE6h - .hibytes 0FFE7h - .hibytes 0FFE8h - .hibytes 0FFE9h - .hibytes 0FFEAh - .hibytes 0FFEBh - .hibytes 0FFECh - .hibytes 0FFEDh - .hibytes 0FFEEh - .hibytes 0FFEFh - .hibytes 0FFF0h - .hibytes 0FFF1h - .hibytes 0FFF2h - .hibytes 0FFF3h - .hibytes 0FFF4h - .hibytes 0FFF5h - .hibytes 0FFF6h - .hibytes 0FFF7h - .hibytes 0FFF8h - .hibytes 0FFF9h - .hibytes 0FFFAh - .hibytes 0FFFBh - .hibytes 0FFFCh - .hibytes 0FFFDh - .hibytes 0FFFEh - .hibytes 0FFFFh + ; alternative hex values, uppercase + .hibytes 0h + .hibytes 1h + .hibytes 2h + .hibytes 3h + .hibytes 4h + .hibytes 5h + .hibytes 6h + .hibytes 7h + .hibytes 8h + .hibytes 9h + .hibytes 0Ah + .hibytes 0Bh + .hibytes 0Ch + .hibytes 0Dh + .hibytes 0Eh + .hibytes 0Fh + .hibytes 10h + .hibytes 11h + .hibytes 12h + .hibytes 13h + .hibytes 70h + .hibytes 71h + .hibytes 72h + .hibytes 73h + .hibytes 74h + .hibytes 75h + .hibytes 76h + .hibytes 77h + .hibytes 78h + .hibytes 79h + .hibytes 7Ah + .hibytes 7Bh + .hibytes 7Ch + .hibytes 7Dh + .hibytes 7Eh + .hibytes 7Fh + .hibytes 80h + .hibytes 81h + .hibytes 82h + .hibytes 83h + .hibytes 84h + .hibytes 85h + .hibytes 86h + .hibytes 0F0h + .hibytes 0F1h + .hibytes 0F2h + .hibytes 0F3h + .hibytes 0F4h + .hibytes 0F5h + .hibytes 0F6h + .hibytes 0F7h + .hibytes 0F8h + .hibytes 0F9h + .hibytes 0FAh + .hibytes 0FBh + .hibytes 0FCh + .hibytes 0FDh + .hibytes 0FEh + .hibytes 0FFh + .hibytes 100h + .hibytes 101h + .hibytes 102h + .hibytes 103h + .hibytes 0FD2h + .hibytes 0FD3h + .hibytes 0FD4h + .hibytes 0FD5h + .hibytes 0FD6h + .hibytes 0FD7h + .hibytes 0FD8h + .hibytes 0FD9h + .hibytes 0FDAh + .hibytes 0FDBh + .hibytes 0FDCh + .hibytes 0FDDh + .hibytes 0FDEh + .hibytes 0FDFh + .hibytes 0FE0h + .hibytes 0FE1h + .hibytes 0FE2h + .hibytes 0FE3h + .hibytes 0FE4h + .hibytes 0FE5h + .hibytes 0FE6h + .hibytes 0FE7h + .hibytes 0FE8h + .hibytes 0FE9h + .hibytes 0FEAh + .hibytes 0FEBh + .hibytes 0FECh + .hibytes 0FEDh + .hibytes 0FEEh + .hibytes 0FEFh + .hibytes 0FF0h + .hibytes 0FF1h + .hibytes 0FF2h + .hibytes 0FF3h + .hibytes 0FF4h + .hibytes 0FF5h + .hibytes 0FF6h + .hibytes 0FF7h + .hibytes 0FF8h + .hibytes 0FF9h + .hibytes 0FFAh + .hibytes 0FFBh + .hibytes 0FFCh + .hibytes 0FFDh + .hibytes 0FFEh + .hibytes 0FFFh + .hibytes 1000h + .hibytes 1001h + .hibytes 1002h + .hibytes 1003h + .hibytes 1004h + .hibytes 1005h + .hibytes 1006h + .hibytes 1007h + .hibytes 1008h + .hibytes 7FF0h + .hibytes 7FF1h + .hibytes 7FF2h + .hibytes 7FF3h + .hibytes 7FF4h + .hibytes 7FF5h + .hibytes 7FF6h + .hibytes 7FF7h + .hibytes 7FF8h + .hibytes 7FF9h + .hibytes 7FFAh + .hibytes 7FFBh + .hibytes 7FFCh + .hibytes 7FFDh + .hibytes 7FFEh + .hibytes 7FFFh + .hibytes 8000h + .hibytes 8001h + .hibytes 8002h + .hibytes 8003h + .hibytes 8004h + .hibytes 8005h + .hibytes 8006h + .hibytes 8007h + .hibytes 8008h + .hibytes 8009h + .hibytes 800Ah + .hibytes 800Bh + .hibytes 9FE1h + .hibytes 9FE2h + .hibytes 9FE3h + .hibytes 9FE4h + .hibytes 9FE5h + .hibytes 9FE6h + .hibytes 9FE7h + .hibytes 9FE8h + .hibytes 9FE9h + .hibytes 9FEAh + .hibytes 9FEBh + .hibytes 9FECh + .hibytes 9FEDh + .hibytes 9FEEh + .hibytes 9FEFh + .hibytes 9FF0h + .hibytes 9FF1h + .hibytes 9FF2h + .hibytes 9FF3h + .hibytes 9FF4h + .hibytes 9FF5h + .hibytes 9FF6h + .hibytes 9FF7h + .hibytes 9FF8h + .hibytes 9FF9h + .hibytes 9FFAh + .hibytes 9FFBh + .hibytes 9FFCh + .hibytes 9FFDh + .hibytes 9FFEh + .hibytes 9FFFh + .hibytes 0A000h + .hibytes 0A001h + .hibytes 0A002h + .hibytes 0A003h + .hibytes 0A004h + .hibytes 0A005h + .hibytes 0A006h + .hibytes 0A007h + .hibytes 0A008h + .hibytes 0A009h + .hibytes 0A00Ah + .hibytes 0A00Bh + .hibytes 0A00Ch + .hibytes 0A00Dh + .hibytes 0A00Eh + .hibytes 0A00Fh + .hibytes 0AFE1h + .hibytes 0AFE2h + .hibytes 0AFE3h + .hibytes 0AFE4h + .hibytes 0AFE5h + .hibytes 0AFE6h + .hibytes 0AFE7h + .hibytes 0AFE8h + .hibytes 0AFE9h + .hibytes 0AFEAh + .hibytes 0AFEBh + .hibytes 0AFECh + .hibytes 0AFEDh + .hibytes 0AFEEh + .hibytes 0AFEFh + .hibytes 0AFF0h + .hibytes 0AFF1h + .hibytes 0AFF2h + .hibytes 0AFF3h + .hibytes 0AFF4h + .hibytes 0AFF5h + .hibytes 0AFF6h + .hibytes 0AFF7h + .hibytes 0AFF8h + .hibytes 0AFF9h + .hibytes 0AFFAh + .hibytes 0AFFBh + .hibytes 0AFFCh + .hibytes 0AFFDh + .hibytes 0AFFEh + .hibytes 0AFFFh + .hibytes 0B000h + .hibytes 0B001h + .hibytes 0B002h + .hibytes 0B003h + .hibytes 0B004h + .hibytes 0B005h + .hibytes 0B006h + .hibytes 0B007h + .hibytes 0B008h + .hibytes 0B009h + .hibytes 0B00Ah + .hibytes 0B00Bh + .hibytes 0B00Ch + .hibytes 0B00Dh + .hibytes 0B00Eh + .hibytes 0B00Fh + .hibytes 0BFE1h + .hibytes 0BFE2h + .hibytes 0BFE3h + .hibytes 0BFE4h + .hibytes 0BFE5h + .hibytes 0BFE6h + .hibytes 0BFE7h + .hibytes 0BFE8h + .hibytes 0BFE9h + .hibytes 0BFEAh + .hibytes 0BFEBh + .hibytes 0BFECh + .hibytes 0BFEDh + .hibytes 0BFEEh + .hibytes 0BFEFh + .hibytes 0BFF0h + .hibytes 0BFF1h + .hibytes 0BFF2h + .hibytes 0BFF3h + .hibytes 0BFF4h + .hibytes 0BFF5h + .hibytes 0BFF6h + .hibytes 0BFF7h + .hibytes 0BFF8h + .hibytes 0BFF9h + .hibytes 0BFFAh + .hibytes 0BFFBh + .hibytes 0BFFCh + .hibytes 0BFFDh + .hibytes 0BFFEh + .hibytes 0BFFFh + .hibytes 0C000h + .hibytes 0C001h + .hibytes 0C002h + .hibytes 0C003h + .hibytes 0C004h + .hibytes 0C005h + .hibytes 0C006h + .hibytes 0C007h + .hibytes 0C008h + .hibytes 0C009h + .hibytes 0C00Ah + .hibytes 0C00Bh + .hibytes 0C00Ch + .hibytes 0C00Dh + .hibytes 0C00Eh + .hibytes 0C00Fh + .hibytes 0CFE1h + .hibytes 0CFE2h + .hibytes 0CFE3h + .hibytes 0CFE4h + .hibytes 0CFE5h + .hibytes 0CFE6h + .hibytes 0CFE7h + .hibytes 0CFE8h + .hibytes 0CFE9h + .hibytes 0CFEAh + .hibytes 0CFEBh + .hibytes 0CFECh + .hibytes 0CFEDh + .hibytes 0CFEEh + .hibytes 0CFEFh + .hibytes 0CFF0h + .hibytes 0CFF1h + .hibytes 0CFF2h + .hibytes 0CFF3h + .hibytes 0CFF4h + .hibytes 0CFF5h + .hibytes 0CFF6h + .hibytes 0CFF7h + .hibytes 0CFF8h + .hibytes 0CFF9h + .hibytes 0CFFAh + .hibytes 0CFFBh + .hibytes 0CFFCh + .hibytes 0CFFDh + .hibytes 0CFFEh + .hibytes 0CFFFh + .hibytes 0D000h + .hibytes 0D001h + .hibytes 0D002h + .hibytes 0D003h + .hibytes 0D004h + .hibytes 0D005h + .hibytes 0D006h + .hibytes 0D007h + .hibytes 0D008h + .hibytes 0D009h + .hibytes 0D00Ah + .hibytes 0D00Bh + .hibytes 0D00Ch + .hibytes 0D00Dh + .hibytes 0D00Eh + .hibytes 0D00Fh + .hibytes 0DFE1h + .hibytes 0DFE2h + .hibytes 0DFE3h + .hibytes 0DFE4h + .hibytes 0DFE5h + .hibytes 0DFE6h + .hibytes 0DFE7h + .hibytes 0DFE8h + .hibytes 0DFE9h + .hibytes 0DFEAh + .hibytes 0DFEBh + .hibytes 0DFECh + .hibytes 0DFEDh + .hibytes 0DFEEh + .hibytes 0DFEFh + .hibytes 0DFF0h + .hibytes 0DFF1h + .hibytes 0DFF2h + .hibytes 0DFF3h + .hibytes 0DFF4h + .hibytes 0DFF5h + .hibytes 0DFF6h + .hibytes 0DFF7h + .hibytes 0DFF8h + .hibytes 0DFF9h + .hibytes 0DFFAh + .hibytes 0DFFBh + .hibytes 0DFFCh + .hibytes 0DFFDh + .hibytes 0DFFEh + .hibytes 0DFFFh + .hibytes 0E000h + .hibytes 0E001h + .hibytes 0E002h + .hibytes 0E003h + .hibytes 0E004h + .hibytes 0E005h + .hibytes 0E006h + .hibytes 0E007h + .hibytes 0E008h + .hibytes 0E009h + .hibytes 0E00Ah + .hibytes 0E00Bh + .hibytes 0E00Ch + .hibytes 0E00Dh + .hibytes 0E00Eh + .hibytes 0E00Fh + .hibytes 0EFE1h + .hibytes 0EFE2h + .hibytes 0EFE3h + .hibytes 0EFE4h + .hibytes 0EFE5h + .hibytes 0EFE6h + .hibytes 0EFE7h + .hibytes 0EFE8h + .hibytes 0EFE9h + .hibytes 0EFEAh + .hibytes 0EFEBh + .hibytes 0EFECh + .hibytes 0EFEDh + .hibytes 0EFEEh + .hibytes 0EFEFh + .hibytes 0EFF0h + .hibytes 0EFF1h + .hibytes 0EFF2h + .hibytes 0EFF3h + .hibytes 0EFF4h + .hibytes 0EFF5h + .hibytes 0EFF6h + .hibytes 0EFF7h + .hibytes 0EFF8h + .hibytes 0EFF9h + .hibytes 0EFFAh + .hibytes 0EFFBh + .hibytes 0EFFCh + .hibytes 0EFFDh + .hibytes 0EFFEh + .hibytes 0EFFFh + .hibytes 0F000h + .hibytes 0F001h + .hibytes 0F002h + .hibytes 0F003h + .hibytes 0F004h + .hibytes 0F005h + .hibytes 0F006h + .hibytes 0F007h + .hibytes 0F008h + .hibytes 0F009h + .hibytes 0F00Ah + .hibytes 0F00Bh + .hibytes 0F00Ch + .hibytes 0F00Dh + .hibytes 0F00Eh + .hibytes 0F00Fh + .hibytes 0FFE1h + .hibytes 0FFE2h + .hibytes 0FFE3h + .hibytes 0FFE4h + .hibytes 0FFE5h + .hibytes 0FFE6h + .hibytes 0FFE7h + .hibytes 0FFE8h + .hibytes 0FFE9h + .hibytes 0FFEAh + .hibytes 0FFEBh + .hibytes 0FFECh + .hibytes 0FFEDh + .hibytes 0FFEEh + .hibytes 0FFEFh + .hibytes 0FFF0h + .hibytes 0FFF1h + .hibytes 0FFF2h + .hibytes 0FFF3h + .hibytes 0FFF4h + .hibytes 0FFF5h + .hibytes 0FFF6h + .hibytes 0FFF7h + .hibytes 0FFF8h + .hibytes 0FFF9h + .hibytes 0FFFAh + .hibytes 0FFFBh + .hibytes 0FFFCh + .hibytes 0FFFDh + .hibytes 0FFFEh + .hibytes 0FFFFh - ; alternative 4-digit hex values - .hibytes 0000h - .hibytes 0001h - .hibytes 0002h - .hibytes 0003h - .hibytes 0004h - .hibytes 0005h - .hibytes 0006h - .hibytes 0007h - .hibytes 0008h - .hibytes 0009h - .hibytes 000ah - .hibytes 000bh - .hibytes 000ch - .hibytes 000dh - .hibytes 000eh - .hibytes 000fh - .hibytes 0010h - .hibytes 0011h - .hibytes 0012h - .hibytes 0013h - .hibytes 0070h - .hibytes 0071h - .hibytes 0072h - .hibytes 0073h - .hibytes 0074h - .hibytes 0075h - .hibytes 0076h - .hibytes 0077h - .hibytes 0078h - .hibytes 0079h - .hibytes 007ah - .hibytes 007bh - .hibytes 007ch - .hibytes 007dh - .hibytes 007eh - .hibytes 007fh - .hibytes 0080h - .hibytes 0081h - .hibytes 0082h - .hibytes 0083h - .hibytes 0084h - .hibytes 0085h - .hibytes 0086h - .hibytes 00f0h - .hibytes 00f1h - .hibytes 00f2h - .hibytes 00f3h - .hibytes 00f4h - .hibytes 00f5h - .hibytes 00f6h - .hibytes 00f7h - .hibytes 00f8h - .hibytes 00f9h - .hibytes 00fah - .hibytes 00fbh - .hibytes 00fch - .hibytes 00fdh - .hibytes 00feh - .hibytes 00ffh - .hibytes 0100h - .hibytes 0101h - .hibytes 0102h - .hibytes 0103h - .hibytes 0fd2h - .hibytes 0fd3h - .hibytes 0fd4h - .hibytes 0fd5h - .hibytes 0fd6h - .hibytes 0fd7h - .hibytes 0fd8h - .hibytes 0fd9h - .hibytes 0fdah - .hibytes 0fdbh - .hibytes 0fdch - .hibytes 0fddh - .hibytes 0fdeh - .hibytes 0fdfh - .hibytes 0fe0h - .hibytes 0fe1h - .hibytes 0fe2h - .hibytes 0fe3h - .hibytes 0fe4h - .hibytes 0fe5h - .hibytes 0fe6h - .hibytes 0fe7h - .hibytes 0fe8h - .hibytes 0fe9h - .hibytes 0feah - .hibytes 0febh - .hibytes 0fech - .hibytes 0fedh - .hibytes 0feeh - .hibytes 0fefh - .hibytes 0ff0h - .hibytes 0ff1h - .hibytes 0ff2h - .hibytes 0ff3h - .hibytes 0ff4h - .hibytes 0ff5h - .hibytes 0ff6h - .hibytes 0ff7h - .hibytes 0ff8h - .hibytes 0ff9h - .hibytes 0ffah - .hibytes 0ffbh - .hibytes 0ffch - .hibytes 0ffdh - .hibytes 0ffeh - .hibytes 0fffh - .hibytes 1000h - .hibytes 1001h - .hibytes 1002h - .hibytes 1003h - .hibytes 1004h - .hibytes 1005h - .hibytes 1006h - .hibytes 1007h - .hibytes 1008h - .hibytes 7ff0h - .hibytes 7ff1h - .hibytes 7ff2h - .hibytes 7ff3h - .hibytes 7ff4h - .hibytes 7ff5h - .hibytes 7ff6h - .hibytes 7ff7h - .hibytes 7ff8h - .hibytes 7ff9h - .hibytes 7ffah - .hibytes 7ffbh - .hibytes 7ffch - .hibytes 7ffdh - .hibytes 7ffeh - .hibytes 7fffh - .hibytes 8000h - .hibytes 8001h - .hibytes 8002h - .hibytes 8003h - .hibytes 8004h - .hibytes 8005h - .hibytes 8006h - .hibytes 8007h - .hibytes 8008h - .hibytes 8009h - .hibytes 800ah - .hibytes 800bh - .hibytes 9fe1h - .hibytes 9fe2h - .hibytes 9fe3h - .hibytes 9fe4h - .hibytes 9fe5h - .hibytes 9fe6h - .hibytes 9fe7h - .hibytes 9fe8h - .hibytes 9fe9h - .hibytes 9feah - .hibytes 9febh - .hibytes 9fech - .hibytes 9fedh - .hibytes 9feeh - .hibytes 9fefh - .hibytes 9ff0h - .hibytes 9ff1h - .hibytes 9ff2h - .hibytes 9ff3h - .hibytes 9ff4h - .hibytes 9ff5h - .hibytes 9ff6h - .hibytes 9ff7h - .hibytes 9ff8h - .hibytes 9ff9h - .hibytes 9ffah - .hibytes 9ffbh - .hibytes 9ffch - .hibytes 9ffdh - .hibytes 9ffeh - .hibytes 9fffh - .hibytes 0a000h - .hibytes 0a001h - .hibytes 0a002h - .hibytes 0a003h - .hibytes 0a004h - .hibytes 0a005h - .hibytes 0a006h - .hibytes 0a007h - .hibytes 0a008h - .hibytes 0a009h - .hibytes 0a00ah - .hibytes 0a00bh - .hibytes 0a00ch - .hibytes 0a00dh - .hibytes 0a00eh - .hibytes 0a00fh - .hibytes 0afe1h - .hibytes 0afe2h - .hibytes 0afe3h - .hibytes 0afe4h - .hibytes 0afe5h - .hibytes 0afe6h - .hibytes 0afe7h - .hibytes 0afe8h - .hibytes 0afe9h - .hibytes 0afeah - .hibytes 0afebh - .hibytes 0afech - .hibytes 0afedh - .hibytes 0afeeh - .hibytes 0afefh - .hibytes 0aff0h - .hibytes 0aff1h - .hibytes 0aff2h - .hibytes 0aff3h - .hibytes 0aff4h - .hibytes 0aff5h - .hibytes 0aff6h - .hibytes 0aff7h - .hibytes 0aff8h - .hibytes 0aff9h - .hibytes 0affah - .hibytes 0affbh - .hibytes 0affch - .hibytes 0affdh - .hibytes 0affeh - .hibytes 0afffh - .hibytes 0b000h - .hibytes 0b001h - .hibytes 0b002h - .hibytes 0b003h - .hibytes 0b004h - .hibytes 0b005h - .hibytes 0b006h - .hibytes 0b007h - .hibytes 0b008h - .hibytes 0b009h - .hibytes 0b00ah - .hibytes 0b00bh - .hibytes 0b00ch - .hibytes 0b00dh - .hibytes 0b00eh - .hibytes 0b00fh - .hibytes 0bfe1h - .hibytes 0bfe2h - .hibytes 0bfe3h - .hibytes 0bfe4h - .hibytes 0bfe5h - .hibytes 0bfe6h - .hibytes 0bfe7h - .hibytes 0bfe8h - .hibytes 0bfe9h - .hibytes 0bfeah - .hibytes 0bfebh - .hibytes 0bfech - .hibytes 0bfedh - .hibytes 0bfeeh - .hibytes 0bfefh - .hibytes 0bff0h - .hibytes 0bff1h - .hibytes 0bff2h - .hibytes 0bff3h - .hibytes 0bff4h - .hibytes 0bff5h - .hibytes 0bff6h - .hibytes 0bff7h - .hibytes 0bff8h - .hibytes 0bff9h - .hibytes 0bffah - .hibytes 0bffbh - .hibytes 0bffch - .hibytes 0bffdh - .hibytes 0bffeh - .hibytes 0bfffh - .hibytes 0c000h - .hibytes 0c001h - .hibytes 0c002h - .hibytes 0c003h - .hibytes 0c004h - .hibytes 0c005h - .hibytes 0c006h - .hibytes 0c007h - .hibytes 0c008h - .hibytes 0c009h - .hibytes 0c00ah - .hibytes 0c00bh - .hibytes 0c00ch - .hibytes 0c00dh - .hibytes 0c00eh - .hibytes 0c00fh - .hibytes 0cfe1h - .hibytes 0cfe2h - .hibytes 0cfe3h - .hibytes 0cfe4h - .hibytes 0cfe5h - .hibytes 0cfe6h - .hibytes 0cfe7h - .hibytes 0cfe8h - .hibytes 0cfe9h - .hibytes 0cfeah - .hibytes 0cfebh - .hibytes 0cfech - .hibytes 0cfedh - .hibytes 0cfeeh - .hibytes 0cfefh - .hibytes 0cff0h - .hibytes 0cff1h - .hibytes 0cff2h - .hibytes 0cff3h - .hibytes 0cff4h - .hibytes 0cff5h - .hibytes 0cff6h - .hibytes 0cff7h - .hibytes 0cff8h - .hibytes 0cff9h - .hibytes 0cffah - .hibytes 0cffbh - .hibytes 0cffch - .hibytes 0cffdh - .hibytes 0cffeh - .hibytes 0cfffh - .hibytes 0d000h - .hibytes 0d001h - .hibytes 0d002h - .hibytes 0d003h - .hibytes 0d004h - .hibytes 0d005h - .hibytes 0d006h - .hibytes 0d007h - .hibytes 0d008h - .hibytes 0d009h - .hibytes 0d00ah - .hibytes 0d00bh - .hibytes 0d00ch - .hibytes 0d00dh - .hibytes 0d00eh - .hibytes 0d00fh - .hibytes 0dfe1h - .hibytes 0dfe2h - .hibytes 0dfe3h - .hibytes 0dfe4h - .hibytes 0dfe5h - .hibytes 0dfe6h - .hibytes 0dfe7h - .hibytes 0dfe8h - .hibytes 0dfe9h - .hibytes 0dfeah - .hibytes 0dfebh - .hibytes 0dfech - .hibytes 0dfedh - .hibytes 0dfeeh - .hibytes 0dfefh - .hibytes 0dff0h - .hibytes 0dff1h - .hibytes 0dff2h - .hibytes 0dff3h - .hibytes 0dff4h - .hibytes 0dff5h - .hibytes 0dff6h - .hibytes 0dff7h - .hibytes 0dff8h - .hibytes 0dff9h - .hibytes 0dffah - .hibytes 0dffbh - .hibytes 0dffch - .hibytes 0dffdh - .hibytes 0dffeh - .hibytes 0dfffh - .hibytes 0e000h - .hibytes 0e001h - .hibytes 0e002h - .hibytes 0e003h - .hibytes 0e004h - .hibytes 0e005h - .hibytes 0e006h - .hibytes 0e007h - .hibytes 0e008h - .hibytes 0e009h - .hibytes 0e00ah - .hibytes 0e00bh - .hibytes 0e00ch - .hibytes 0e00dh - .hibytes 0e00eh - .hibytes 0e00fh - .hibytes 0efe1h - .hibytes 0efe2h - .hibytes 0efe3h - .hibytes 0efe4h - .hibytes 0efe5h - .hibytes 0efe6h - .hibytes 0efe7h - .hibytes 0efe8h - .hibytes 0efe9h - .hibytes 0efeah - .hibytes 0efebh - .hibytes 0efech - .hibytes 0efedh - .hibytes 0efeeh - .hibytes 0efefh - .hibytes 0eff0h - .hibytes 0eff1h - .hibytes 0eff2h - .hibytes 0eff3h - .hibytes 0eff4h - .hibytes 0eff5h - .hibytes 0eff6h - .hibytes 0eff7h - .hibytes 0eff8h - .hibytes 0eff9h - .hibytes 0effah - .hibytes 0effbh - .hibytes 0effch - .hibytes 0effdh - .hibytes 0effeh - .hibytes 0efffh - .hibytes 0f000h - .hibytes 0f001h - .hibytes 0f002h - .hibytes 0f003h - .hibytes 0f004h - .hibytes 0f005h - .hibytes 0f006h - .hibytes 0f007h - .hibytes 0f008h - .hibytes 0f009h - .hibytes 0f00ah - .hibytes 0f00bh - .hibytes 0f00ch - .hibytes 0f00dh - .hibytes 0f00eh - .hibytes 0f00fh - .hibytes 0ffe1h - .hibytes 0ffe2h - .hibytes 0ffe3h - .hibytes 0ffe4h - .hibytes 0ffe5h - .hibytes 0ffe6h - .hibytes 0ffe7h - .hibytes 0ffe8h - .hibytes 0ffe9h - .hibytes 0ffeah - .hibytes 0ffebh - .hibytes 0ffech - .hibytes 0ffedh - .hibytes 0ffeeh - .hibytes 0ffefh - .hibytes 0fff0h - .hibytes 0fff1h - .hibytes 0fff2h - .hibytes 0fff3h - .hibytes 0fff4h - .hibytes 0fff5h - .hibytes 0fff6h - .hibytes 0fff7h - .hibytes 0fff8h - .hibytes 0fff9h - .hibytes 0fffah - .hibytes 0fffbh - .hibytes 0fffch - .hibytes 0fffdh - .hibytes 0fffeh - .hibytes 0ffffh + ; alternative 4-digit hex values + .hibytes 0000h + .hibytes 0001h + .hibytes 0002h + .hibytes 0003h + .hibytes 0004h + .hibytes 0005h + .hibytes 0006h + .hibytes 0007h + .hibytes 0008h + .hibytes 0009h + .hibytes 000ah + .hibytes 000bh + .hibytes 000ch + .hibytes 000dh + .hibytes 000eh + .hibytes 000fh + .hibytes 0010h + .hibytes 0011h + .hibytes 0012h + .hibytes 0013h + .hibytes 0070h + .hibytes 0071h + .hibytes 0072h + .hibytes 0073h + .hibytes 0074h + .hibytes 0075h + .hibytes 0076h + .hibytes 0077h + .hibytes 0078h + .hibytes 0079h + .hibytes 007ah + .hibytes 007bh + .hibytes 007ch + .hibytes 007dh + .hibytes 007eh + .hibytes 007fh + .hibytes 0080h + .hibytes 0081h + .hibytes 0082h + .hibytes 0083h + .hibytes 0084h + .hibytes 0085h + .hibytes 0086h + .hibytes 00f0h + .hibytes 00f1h + .hibytes 00f2h + .hibytes 00f3h + .hibytes 00f4h + .hibytes 00f5h + .hibytes 00f6h + .hibytes 00f7h + .hibytes 00f8h + .hibytes 00f9h + .hibytes 00fah + .hibytes 00fbh + .hibytes 00fch + .hibytes 00fdh + .hibytes 00feh + .hibytes 00ffh + .hibytes 0100h + .hibytes 0101h + .hibytes 0102h + .hibytes 0103h + .hibytes 0fd2h + .hibytes 0fd3h + .hibytes 0fd4h + .hibytes 0fd5h + .hibytes 0fd6h + .hibytes 0fd7h + .hibytes 0fd8h + .hibytes 0fd9h + .hibytes 0fdah + .hibytes 0fdbh + .hibytes 0fdch + .hibytes 0fddh + .hibytes 0fdeh + .hibytes 0fdfh + .hibytes 0fe0h + .hibytes 0fe1h + .hibytes 0fe2h + .hibytes 0fe3h + .hibytes 0fe4h + .hibytes 0fe5h + .hibytes 0fe6h + .hibytes 0fe7h + .hibytes 0fe8h + .hibytes 0fe9h + .hibytes 0feah + .hibytes 0febh + .hibytes 0fech + .hibytes 0fedh + .hibytes 0feeh + .hibytes 0fefh + .hibytes 0ff0h + .hibytes 0ff1h + .hibytes 0ff2h + .hibytes 0ff3h + .hibytes 0ff4h + .hibytes 0ff5h + .hibytes 0ff6h + .hibytes 0ff7h + .hibytes 0ff8h + .hibytes 0ff9h + .hibytes 0ffah + .hibytes 0ffbh + .hibytes 0ffch + .hibytes 0ffdh + .hibytes 0ffeh + .hibytes 0fffh + .hibytes 1000h + .hibytes 1001h + .hibytes 1002h + .hibytes 1003h + .hibytes 1004h + .hibytes 1005h + .hibytes 1006h + .hibytes 1007h + .hibytes 1008h + .hibytes 7ff0h + .hibytes 7ff1h + .hibytes 7ff2h + .hibytes 7ff3h + .hibytes 7ff4h + .hibytes 7ff5h + .hibytes 7ff6h + .hibytes 7ff7h + .hibytes 7ff8h + .hibytes 7ff9h + .hibytes 7ffah + .hibytes 7ffbh + .hibytes 7ffch + .hibytes 7ffdh + .hibytes 7ffeh + .hibytes 7fffh + .hibytes 8000h + .hibytes 8001h + .hibytes 8002h + .hibytes 8003h + .hibytes 8004h + .hibytes 8005h + .hibytes 8006h + .hibytes 8007h + .hibytes 8008h + .hibytes 8009h + .hibytes 800ah + .hibytes 800bh + .hibytes 9fe1h + .hibytes 9fe2h + .hibytes 9fe3h + .hibytes 9fe4h + .hibytes 9fe5h + .hibytes 9fe6h + .hibytes 9fe7h + .hibytes 9fe8h + .hibytes 9fe9h + .hibytes 9feah + .hibytes 9febh + .hibytes 9fech + .hibytes 9fedh + .hibytes 9feeh + .hibytes 9fefh + .hibytes 9ff0h + .hibytes 9ff1h + .hibytes 9ff2h + .hibytes 9ff3h + .hibytes 9ff4h + .hibytes 9ff5h + .hibytes 9ff6h + .hibytes 9ff7h + .hibytes 9ff8h + .hibytes 9ff9h + .hibytes 9ffah + .hibytes 9ffbh + .hibytes 9ffch + .hibytes 9ffdh + .hibytes 9ffeh + .hibytes 9fffh + .hibytes 0a000h + .hibytes 0a001h + .hibytes 0a002h + .hibytes 0a003h + .hibytes 0a004h + .hibytes 0a005h + .hibytes 0a006h + .hibytes 0a007h + .hibytes 0a008h + .hibytes 0a009h + .hibytes 0a00ah + .hibytes 0a00bh + .hibytes 0a00ch + .hibytes 0a00dh + .hibytes 0a00eh + .hibytes 0a00fh + .hibytes 0afe1h + .hibytes 0afe2h + .hibytes 0afe3h + .hibytes 0afe4h + .hibytes 0afe5h + .hibytes 0afe6h + .hibytes 0afe7h + .hibytes 0afe8h + .hibytes 0afe9h + .hibytes 0afeah + .hibytes 0afebh + .hibytes 0afech + .hibytes 0afedh + .hibytes 0afeeh + .hibytes 0afefh + .hibytes 0aff0h + .hibytes 0aff1h + .hibytes 0aff2h + .hibytes 0aff3h + .hibytes 0aff4h + .hibytes 0aff5h + .hibytes 0aff6h + .hibytes 0aff7h + .hibytes 0aff8h + .hibytes 0aff9h + .hibytes 0affah + .hibytes 0affbh + .hibytes 0affch + .hibytes 0affdh + .hibytes 0affeh + .hibytes 0afffh + .hibytes 0b000h + .hibytes 0b001h + .hibytes 0b002h + .hibytes 0b003h + .hibytes 0b004h + .hibytes 0b005h + .hibytes 0b006h + .hibytes 0b007h + .hibytes 0b008h + .hibytes 0b009h + .hibytes 0b00ah + .hibytes 0b00bh + .hibytes 0b00ch + .hibytes 0b00dh + .hibytes 0b00eh + .hibytes 0b00fh + .hibytes 0bfe1h + .hibytes 0bfe2h + .hibytes 0bfe3h + .hibytes 0bfe4h + .hibytes 0bfe5h + .hibytes 0bfe6h + .hibytes 0bfe7h + .hibytes 0bfe8h + .hibytes 0bfe9h + .hibytes 0bfeah + .hibytes 0bfebh + .hibytes 0bfech + .hibytes 0bfedh + .hibytes 0bfeeh + .hibytes 0bfefh + .hibytes 0bff0h + .hibytes 0bff1h + .hibytes 0bff2h + .hibytes 0bff3h + .hibytes 0bff4h + .hibytes 0bff5h + .hibytes 0bff6h + .hibytes 0bff7h + .hibytes 0bff8h + .hibytes 0bff9h + .hibytes 0bffah + .hibytes 0bffbh + .hibytes 0bffch + .hibytes 0bffdh + .hibytes 0bffeh + .hibytes 0bfffh + .hibytes 0c000h + .hibytes 0c001h + .hibytes 0c002h + .hibytes 0c003h + .hibytes 0c004h + .hibytes 0c005h + .hibytes 0c006h + .hibytes 0c007h + .hibytes 0c008h + .hibytes 0c009h + .hibytes 0c00ah + .hibytes 0c00bh + .hibytes 0c00ch + .hibytes 0c00dh + .hibytes 0c00eh + .hibytes 0c00fh + .hibytes 0cfe1h + .hibytes 0cfe2h + .hibytes 0cfe3h + .hibytes 0cfe4h + .hibytes 0cfe5h + .hibytes 0cfe6h + .hibytes 0cfe7h + .hibytes 0cfe8h + .hibytes 0cfe9h + .hibytes 0cfeah + .hibytes 0cfebh + .hibytes 0cfech + .hibytes 0cfedh + .hibytes 0cfeeh + .hibytes 0cfefh + .hibytes 0cff0h + .hibytes 0cff1h + .hibytes 0cff2h + .hibytes 0cff3h + .hibytes 0cff4h + .hibytes 0cff5h + .hibytes 0cff6h + .hibytes 0cff7h + .hibytes 0cff8h + .hibytes 0cff9h + .hibytes 0cffah + .hibytes 0cffbh + .hibytes 0cffch + .hibytes 0cffdh + .hibytes 0cffeh + .hibytes 0cfffh + .hibytes 0d000h + .hibytes 0d001h + .hibytes 0d002h + .hibytes 0d003h + .hibytes 0d004h + .hibytes 0d005h + .hibytes 0d006h + .hibytes 0d007h + .hibytes 0d008h + .hibytes 0d009h + .hibytes 0d00ah + .hibytes 0d00bh + .hibytes 0d00ch + .hibytes 0d00dh + .hibytes 0d00eh + .hibytes 0d00fh + .hibytes 0dfe1h + .hibytes 0dfe2h + .hibytes 0dfe3h + .hibytes 0dfe4h + .hibytes 0dfe5h + .hibytes 0dfe6h + .hibytes 0dfe7h + .hibytes 0dfe8h + .hibytes 0dfe9h + .hibytes 0dfeah + .hibytes 0dfebh + .hibytes 0dfech + .hibytes 0dfedh + .hibytes 0dfeeh + .hibytes 0dfefh + .hibytes 0dff0h + .hibytes 0dff1h + .hibytes 0dff2h + .hibytes 0dff3h + .hibytes 0dff4h + .hibytes 0dff5h + .hibytes 0dff6h + .hibytes 0dff7h + .hibytes 0dff8h + .hibytes 0dff9h + .hibytes 0dffah + .hibytes 0dffbh + .hibytes 0dffch + .hibytes 0dffdh + .hibytes 0dffeh + .hibytes 0dfffh + .hibytes 0e000h + .hibytes 0e001h + .hibytes 0e002h + .hibytes 0e003h + .hibytes 0e004h + .hibytes 0e005h + .hibytes 0e006h + .hibytes 0e007h + .hibytes 0e008h + .hibytes 0e009h + .hibytes 0e00ah + .hibytes 0e00bh + .hibytes 0e00ch + .hibytes 0e00dh + .hibytes 0e00eh + .hibytes 0e00fh + .hibytes 0efe1h + .hibytes 0efe2h + .hibytes 0efe3h + .hibytes 0efe4h + .hibytes 0efe5h + .hibytes 0efe6h + .hibytes 0efe7h + .hibytes 0efe8h + .hibytes 0efe9h + .hibytes 0efeah + .hibytes 0efebh + .hibytes 0efech + .hibytes 0efedh + .hibytes 0efeeh + .hibytes 0efefh + .hibytes 0eff0h + .hibytes 0eff1h + .hibytes 0eff2h + .hibytes 0eff3h + .hibytes 0eff4h + .hibytes 0eff5h + .hibytes 0eff6h + .hibytes 0eff7h + .hibytes 0eff8h + .hibytes 0eff9h + .hibytes 0effah + .hibytes 0effbh + .hibytes 0effch + .hibytes 0effdh + .hibytes 0effeh + .hibytes 0efffh + .hibytes 0f000h + .hibytes 0f001h + .hibytes 0f002h + .hibytes 0f003h + .hibytes 0f004h + .hibytes 0f005h + .hibytes 0f006h + .hibytes 0f007h + .hibytes 0f008h + .hibytes 0f009h + .hibytes 0f00ah + .hibytes 0f00bh + .hibytes 0f00ch + .hibytes 0f00dh + .hibytes 0f00eh + .hibytes 0f00fh + .hibytes 0ffe1h + .hibytes 0ffe2h + .hibytes 0ffe3h + .hibytes 0ffe4h + .hibytes 0ffe5h + .hibytes 0ffe6h + .hibytes 0ffe7h + .hibytes 0ffe8h + .hibytes 0ffe9h + .hibytes 0ffeah + .hibytes 0ffebh + .hibytes 0ffech + .hibytes 0ffedh + .hibytes 0ffeeh + .hibytes 0ffefh + .hibytes 0fff0h + .hibytes 0fff1h + .hibytes 0fff2h + .hibytes 0fff3h + .hibytes 0fff4h + .hibytes 0fff5h + .hibytes 0fff6h + .hibytes 0fff7h + .hibytes 0fff8h + .hibytes 0fff9h + .hibytes 0fffah + .hibytes 0fffbh + .hibytes 0fffch + .hibytes 0fffdh + .hibytes 0fffeh + .hibytes 0ffffh - ; alternative 4-digit hex values, uppercase - .hibytes 0000h - .hibytes 0001h - .hibytes 0002h - .hibytes 0003h - .hibytes 0004h - .hibytes 0005h - .hibytes 0006h - .hibytes 0007h - .hibytes 0008h - .hibytes 0009h - .hibytes 000Ah - .hibytes 000Bh - .hibytes 000Ch - .hibytes 000Dh - .hibytes 000Eh - .hibytes 000Fh - .hibytes 0010h - .hibytes 0011h - .hibytes 0012h - .hibytes 0013h - .hibytes 0070h - .hibytes 0071h - .hibytes 0072h - .hibytes 0073h - .hibytes 0074h - .hibytes 0075h - .hibytes 0076h - .hibytes 0077h - .hibytes 0078h - .hibytes 0079h - .hibytes 007Ah - .hibytes 007Bh - .hibytes 007Ch - .hibytes 007Dh - .hibytes 007Eh - .hibytes 007Fh - .hibytes 0080h - .hibytes 0081h - .hibytes 0082h - .hibytes 0083h - .hibytes 0084h - .hibytes 0085h - .hibytes 0086h - .hibytes 00F0h - .hibytes 00F1h - .hibytes 00F2h - .hibytes 00F3h - .hibytes 00F4h - .hibytes 00F5h - .hibytes 00F6h - .hibytes 00F7h - .hibytes 00F8h - .hibytes 00F9h - .hibytes 00FAh - .hibytes 00FBh - .hibytes 00FCh - .hibytes 00FDh - .hibytes 00FEh - .hibytes 00FFh - .hibytes 0100h - .hibytes 0101h - .hibytes 0102h - .hibytes 0103h - .hibytes 0FD2h - .hibytes 0FD3h - .hibytes 0FD4h - .hibytes 0FD5h - .hibytes 0FD6h - .hibytes 0FD7h - .hibytes 0FD8h - .hibytes 0FD9h - .hibytes 0FDAh - .hibytes 0FDBh - .hibytes 0FDCh - .hibytes 0FDDh - .hibytes 0FDEh - .hibytes 0FDFh - .hibytes 0FE0h - .hibytes 0FE1h - .hibytes 0FE2h - .hibytes 0FE3h - .hibytes 0FE4h - .hibytes 0FE5h - .hibytes 0FE6h - .hibytes 0FE7h - .hibytes 0FE8h - .hibytes 0FE9h - .hibytes 0FEAh - .hibytes 0FEBh - .hibytes 0FECh - .hibytes 0FEDh - .hibytes 0FEEh - .hibytes 0FEFh - .hibytes 0FF0h - .hibytes 0FF1h - .hibytes 0FF2h - .hibytes 0FF3h - .hibytes 0FF4h - .hibytes 0FF5h - .hibytes 0FF6h - .hibytes 0FF7h - .hibytes 0FF8h - .hibytes 0FF9h - .hibytes 0FFAh - .hibytes 0FFBh - .hibytes 0FFCh - .hibytes 0FFDh - .hibytes 0FFEh - .hibytes 0FFFh - .hibytes 1000h - .hibytes 1001h - .hibytes 1002h - .hibytes 1003h - .hibytes 1004h - .hibytes 1005h - .hibytes 1006h - .hibytes 1007h - .hibytes 1008h - .hibytes 7FF0h - .hibytes 7FF1h - .hibytes 7FF2h - .hibytes 7FF3h - .hibytes 7FF4h - .hibytes 7FF5h - .hibytes 7FF6h - .hibytes 7FF7h - .hibytes 7FF8h - .hibytes 7FF9h - .hibytes 7FFAh - .hibytes 7FFBh - .hibytes 7FFCh - .hibytes 7FFDh - .hibytes 7FFEh - .hibytes 7FFFh - .hibytes 8000h - .hibytes 8001h - .hibytes 8002h - .hibytes 8003h - .hibytes 8004h - .hibytes 8005h - .hibytes 8006h - .hibytes 8007h - .hibytes 8008h - .hibytes 8009h - .hibytes 800Ah - .hibytes 800Bh - .hibytes 9FE1h - .hibytes 9FE2h - .hibytes 9FE3h - .hibytes 9FE4h - .hibytes 9FE5h - .hibytes 9FE6h - .hibytes 9FE7h - .hibytes 9FE8h - .hibytes 9FE9h - .hibytes 9FEAh - .hibytes 9FEBh - .hibytes 9FECh - .hibytes 9FEDh - .hibytes 9FEEh - .hibytes 9FEFh - .hibytes 9FF0h - .hibytes 9FF1h - .hibytes 9FF2h - .hibytes 9FF3h - .hibytes 9FF4h - .hibytes 9FF5h - .hibytes 9FF6h - .hibytes 9FF7h - .hibytes 9FF8h - .hibytes 9FF9h - .hibytes 9FFAh - .hibytes 9FFBh - .hibytes 9FFCh - .hibytes 9FFDh - .hibytes 9FFEh - .hibytes 9FFFh - .hibytes 0A000h - .hibytes 0A001h - .hibytes 0A002h - .hibytes 0A003h - .hibytes 0A004h - .hibytes 0A005h - .hibytes 0A006h - .hibytes 0A007h - .hibytes 0A008h - .hibytes 0A009h - .hibytes 0A00Ah - .hibytes 0A00Bh - .hibytes 0A00Ch - .hibytes 0A00Dh - .hibytes 0A00Eh - .hibytes 0A00Fh - .hibytes 0AFE1h - .hibytes 0AFE2h - .hibytes 0AFE3h - .hibytes 0AFE4h - .hibytes 0AFE5h - .hibytes 0AFE6h - .hibytes 0AFE7h - .hibytes 0AFE8h - .hibytes 0AFE9h - .hibytes 0AFEAh - .hibytes 0AFEBh - .hibytes 0AFECh - .hibytes 0AFEDh - .hibytes 0AFEEh - .hibytes 0AFEFh - .hibytes 0AFF0h - .hibytes 0AFF1h - .hibytes 0AFF2h - .hibytes 0AFF3h - .hibytes 0AFF4h - .hibytes 0AFF5h - .hibytes 0AFF6h - .hibytes 0AFF7h - .hibytes 0AFF8h - .hibytes 0AFF9h - .hibytes 0AFFAh - .hibytes 0AFFBh - .hibytes 0AFFCh - .hibytes 0AFFDh - .hibytes 0AFFEh - .hibytes 0AFFFh - .hibytes 0B000h - .hibytes 0B001h - .hibytes 0B002h - .hibytes 0B003h - .hibytes 0B004h - .hibytes 0B005h - .hibytes 0B006h - .hibytes 0B007h - .hibytes 0B008h - .hibytes 0B009h - .hibytes 0B00Ah - .hibytes 0B00Bh - .hibytes 0B00Ch - .hibytes 0B00Dh - .hibytes 0B00Eh - .hibytes 0B00Fh - .hibytes 0BFE1h - .hibytes 0BFE2h - .hibytes 0BFE3h - .hibytes 0BFE4h - .hibytes 0BFE5h - .hibytes 0BFE6h - .hibytes 0BFE7h - .hibytes 0BFE8h - .hibytes 0BFE9h - .hibytes 0BFEAh - .hibytes 0BFEBh - .hibytes 0BFECh - .hibytes 0BFEDh - .hibytes 0BFEEh - .hibytes 0BFEFh - .hibytes 0BFF0h - .hibytes 0BFF1h - .hibytes 0BFF2h - .hibytes 0BFF3h - .hibytes 0BFF4h - .hibytes 0BFF5h - .hibytes 0BFF6h - .hibytes 0BFF7h - .hibytes 0BFF8h - .hibytes 0BFF9h - .hibytes 0BFFAh - .hibytes 0BFFBh - .hibytes 0BFFCh - .hibytes 0BFFDh - .hibytes 0BFFEh - .hibytes 0BFFFh - .hibytes 0C000h - .hibytes 0C001h - .hibytes 0C002h - .hibytes 0C003h - .hibytes 0C004h - .hibytes 0C005h - .hibytes 0C006h - .hibytes 0C007h - .hibytes 0C008h - .hibytes 0C009h - .hibytes 0C00Ah - .hibytes 0C00Bh - .hibytes 0C00Ch - .hibytes 0C00Dh - .hibytes 0C00Eh - .hibytes 0C00Fh - .hibytes 0CFE1h - .hibytes 0CFE2h - .hibytes 0CFE3h - .hibytes 0CFE4h - .hibytes 0CFE5h - .hibytes 0CFE6h - .hibytes 0CFE7h - .hibytes 0CFE8h - .hibytes 0CFE9h - .hibytes 0CFEAh - .hibytes 0CFEBh - .hibytes 0CFECh - .hibytes 0CFEDh - .hibytes 0CFEEh - .hibytes 0CFEFh - .hibytes 0CFF0h - .hibytes 0CFF1h - .hibytes 0CFF2h - .hibytes 0CFF3h - .hibytes 0CFF4h - .hibytes 0CFF5h - .hibytes 0CFF6h - .hibytes 0CFF7h - .hibytes 0CFF8h - .hibytes 0CFF9h - .hibytes 0CFFAh - .hibytes 0CFFBh - .hibytes 0CFFCh - .hibytes 0CFFDh - .hibytes 0CFFEh - .hibytes 0CFFFh - .hibytes 0D000h - .hibytes 0D001h - .hibytes 0D002h - .hibytes 0D003h - .hibytes 0D004h - .hibytes 0D005h - .hibytes 0D006h - .hibytes 0D007h - .hibytes 0D008h - .hibytes 0D009h - .hibytes 0D00Ah - .hibytes 0D00Bh - .hibytes 0D00Ch - .hibytes 0D00Dh - .hibytes 0D00Eh - .hibytes 0D00Fh - .hibytes 0DFE1h - .hibytes 0DFE2h - .hibytes 0DFE3h - .hibytes 0DFE4h - .hibytes 0DFE5h - .hibytes 0DFE6h - .hibytes 0DFE7h - .hibytes 0DFE8h - .hibytes 0DFE9h - .hibytes 0DFEAh - .hibytes 0DFEBh - .hibytes 0DFECh - .hibytes 0DFEDh - .hibytes 0DFEEh - .hibytes 0DFEFh - .hibytes 0DFF0h - .hibytes 0DFF1h - .hibytes 0DFF2h - .hibytes 0DFF3h - .hibytes 0DFF4h - .hibytes 0DFF5h - .hibytes 0DFF6h - .hibytes 0DFF7h - .hibytes 0DFF8h - .hibytes 0DFF9h - .hibytes 0DFFAh - .hibytes 0DFFBh - .hibytes 0DFFCh - .hibytes 0DFFDh - .hibytes 0DFFEh - .hibytes 0DFFFh - .hibytes 0E000h - .hibytes 0E001h - .hibytes 0E002h - .hibytes 0E003h - .hibytes 0E004h - .hibytes 0E005h - .hibytes 0E006h - .hibytes 0E007h - .hibytes 0E008h - .hibytes 0E009h - .hibytes 0E00Ah - .hibytes 0E00Bh - .hibytes 0E00Ch - .hibytes 0E00Dh - .hibytes 0E00Eh - .hibytes 0E00Fh - .hibytes 0EFE1h - .hibytes 0EFE2h - .hibytes 0EFE3h - .hibytes 0EFE4h - .hibytes 0EFE5h - .hibytes 0EFE6h - .hibytes 0EFE7h - .hibytes 0EFE8h - .hibytes 0EFE9h - .hibytes 0EFEAh - .hibytes 0EFEBh - .hibytes 0EFECh - .hibytes 0EFEDh - .hibytes 0EFEEh - .hibytes 0EFEFh - .hibytes 0EFF0h - .hibytes 0EFF1h - .hibytes 0EFF2h - .hibytes 0EFF3h - .hibytes 0EFF4h - .hibytes 0EFF5h - .hibytes 0EFF6h - .hibytes 0EFF7h - .hibytes 0EFF8h - .hibytes 0EFF9h - .hibytes 0EFFAh - .hibytes 0EFFBh - .hibytes 0EFFCh - .hibytes 0EFFDh - .hibytes 0EFFEh - .hibytes 0EFFFh - .hibytes 0F000h - .hibytes 0F001h - .hibytes 0F002h - .hibytes 0F003h - .hibytes 0F004h - .hibytes 0F005h - .hibytes 0F006h - .hibytes 0F007h - .hibytes 0F008h - .hibytes 0F009h - .hibytes 0F00Ah - .hibytes 0F00Bh - .hibytes 0F00Ch - .hibytes 0F00Dh - .hibytes 0F00Eh - .hibytes 0F00Fh - .hibytes 0FFE1h - .hibytes 0FFE2h - .hibytes 0FFE3h - .hibytes 0FFE4h - .hibytes 0FFE5h - .hibytes 0FFE6h - .hibytes 0FFE7h - .hibytes 0FFE8h - .hibytes 0FFE9h - .hibytes 0FFEAh - .hibytes 0FFEBh - .hibytes 0FFECh - .hibytes 0FFEDh - .hibytes 0FFEEh - .hibytes 0FFEFh - .hibytes 0FFF0h - .hibytes 0FFF1h - .hibytes 0FFF2h - .hibytes 0FFF3h - .hibytes 0FFF4h - .hibytes 0FFF5h - .hibytes 0FFF6h - .hibytes 0FFF7h - .hibytes 0FFF8h - .hibytes 0FFF9h - .hibytes 0FFFAh - .hibytes 0FFFBh - .hibytes 0FFFCh - .hibytes 0FFFDh - .hibytes 0FFFEh - .hibytes 0FFFFh + ; alternative 4-digit hex values, uppercase + .hibytes 0000h + .hibytes 0001h + .hibytes 0002h + .hibytes 0003h + .hibytes 0004h + .hibytes 0005h + .hibytes 0006h + .hibytes 0007h + .hibytes 0008h + .hibytes 0009h + .hibytes 000Ah + .hibytes 000Bh + .hibytes 000Ch + .hibytes 000Dh + .hibytes 000Eh + .hibytes 000Fh + .hibytes 0010h + .hibytes 0011h + .hibytes 0012h + .hibytes 0013h + .hibytes 0070h + .hibytes 0071h + .hibytes 0072h + .hibytes 0073h + .hibytes 0074h + .hibytes 0075h + .hibytes 0076h + .hibytes 0077h + .hibytes 0078h + .hibytes 0079h + .hibytes 007Ah + .hibytes 007Bh + .hibytes 007Ch + .hibytes 007Dh + .hibytes 007Eh + .hibytes 007Fh + .hibytes 0080h + .hibytes 0081h + .hibytes 0082h + .hibytes 0083h + .hibytes 0084h + .hibytes 0085h + .hibytes 0086h + .hibytes 00F0h + .hibytes 00F1h + .hibytes 00F2h + .hibytes 00F3h + .hibytes 00F4h + .hibytes 00F5h + .hibytes 00F6h + .hibytes 00F7h + .hibytes 00F8h + .hibytes 00F9h + .hibytes 00FAh + .hibytes 00FBh + .hibytes 00FCh + .hibytes 00FDh + .hibytes 00FEh + .hibytes 00FFh + .hibytes 0100h + .hibytes 0101h + .hibytes 0102h + .hibytes 0103h + .hibytes 0FD2h + .hibytes 0FD3h + .hibytes 0FD4h + .hibytes 0FD5h + .hibytes 0FD6h + .hibytes 0FD7h + .hibytes 0FD8h + .hibytes 0FD9h + .hibytes 0FDAh + .hibytes 0FDBh + .hibytes 0FDCh + .hibytes 0FDDh + .hibytes 0FDEh + .hibytes 0FDFh + .hibytes 0FE0h + .hibytes 0FE1h + .hibytes 0FE2h + .hibytes 0FE3h + .hibytes 0FE4h + .hibytes 0FE5h + .hibytes 0FE6h + .hibytes 0FE7h + .hibytes 0FE8h + .hibytes 0FE9h + .hibytes 0FEAh + .hibytes 0FEBh + .hibytes 0FECh + .hibytes 0FEDh + .hibytes 0FEEh + .hibytes 0FEFh + .hibytes 0FF0h + .hibytes 0FF1h + .hibytes 0FF2h + .hibytes 0FF3h + .hibytes 0FF4h + .hibytes 0FF5h + .hibytes 0FF6h + .hibytes 0FF7h + .hibytes 0FF8h + .hibytes 0FF9h + .hibytes 0FFAh + .hibytes 0FFBh + .hibytes 0FFCh + .hibytes 0FFDh + .hibytes 0FFEh + .hibytes 0FFFh + .hibytes 1000h + .hibytes 1001h + .hibytes 1002h + .hibytes 1003h + .hibytes 1004h + .hibytes 1005h + .hibytes 1006h + .hibytes 1007h + .hibytes 1008h + .hibytes 7FF0h + .hibytes 7FF1h + .hibytes 7FF2h + .hibytes 7FF3h + .hibytes 7FF4h + .hibytes 7FF5h + .hibytes 7FF6h + .hibytes 7FF7h + .hibytes 7FF8h + .hibytes 7FF9h + .hibytes 7FFAh + .hibytes 7FFBh + .hibytes 7FFCh + .hibytes 7FFDh + .hibytes 7FFEh + .hibytes 7FFFh + .hibytes 8000h + .hibytes 8001h + .hibytes 8002h + .hibytes 8003h + .hibytes 8004h + .hibytes 8005h + .hibytes 8006h + .hibytes 8007h + .hibytes 8008h + .hibytes 8009h + .hibytes 800Ah + .hibytes 800Bh + .hibytes 9FE1h + .hibytes 9FE2h + .hibytes 9FE3h + .hibytes 9FE4h + .hibytes 9FE5h + .hibytes 9FE6h + .hibytes 9FE7h + .hibytes 9FE8h + .hibytes 9FE9h + .hibytes 9FEAh + .hibytes 9FEBh + .hibytes 9FECh + .hibytes 9FEDh + .hibytes 9FEEh + .hibytes 9FEFh + .hibytes 9FF0h + .hibytes 9FF1h + .hibytes 9FF2h + .hibytes 9FF3h + .hibytes 9FF4h + .hibytes 9FF5h + .hibytes 9FF6h + .hibytes 9FF7h + .hibytes 9FF8h + .hibytes 9FF9h + .hibytes 9FFAh + .hibytes 9FFBh + .hibytes 9FFCh + .hibytes 9FFDh + .hibytes 9FFEh + .hibytes 9FFFh + .hibytes 0A000h + .hibytes 0A001h + .hibytes 0A002h + .hibytes 0A003h + .hibytes 0A004h + .hibytes 0A005h + .hibytes 0A006h + .hibytes 0A007h + .hibytes 0A008h + .hibytes 0A009h + .hibytes 0A00Ah + .hibytes 0A00Bh + .hibytes 0A00Ch + .hibytes 0A00Dh + .hibytes 0A00Eh + .hibytes 0A00Fh + .hibytes 0AFE1h + .hibytes 0AFE2h + .hibytes 0AFE3h + .hibytes 0AFE4h + .hibytes 0AFE5h + .hibytes 0AFE6h + .hibytes 0AFE7h + .hibytes 0AFE8h + .hibytes 0AFE9h + .hibytes 0AFEAh + .hibytes 0AFEBh + .hibytes 0AFECh + .hibytes 0AFEDh + .hibytes 0AFEEh + .hibytes 0AFEFh + .hibytes 0AFF0h + .hibytes 0AFF1h + .hibytes 0AFF2h + .hibytes 0AFF3h + .hibytes 0AFF4h + .hibytes 0AFF5h + .hibytes 0AFF6h + .hibytes 0AFF7h + .hibytes 0AFF8h + .hibytes 0AFF9h + .hibytes 0AFFAh + .hibytes 0AFFBh + .hibytes 0AFFCh + .hibytes 0AFFDh + .hibytes 0AFFEh + .hibytes 0AFFFh + .hibytes 0B000h + .hibytes 0B001h + .hibytes 0B002h + .hibytes 0B003h + .hibytes 0B004h + .hibytes 0B005h + .hibytes 0B006h + .hibytes 0B007h + .hibytes 0B008h + .hibytes 0B009h + .hibytes 0B00Ah + .hibytes 0B00Bh + .hibytes 0B00Ch + .hibytes 0B00Dh + .hibytes 0B00Eh + .hibytes 0B00Fh + .hibytes 0BFE1h + .hibytes 0BFE2h + .hibytes 0BFE3h + .hibytes 0BFE4h + .hibytes 0BFE5h + .hibytes 0BFE6h + .hibytes 0BFE7h + .hibytes 0BFE8h + .hibytes 0BFE9h + .hibytes 0BFEAh + .hibytes 0BFEBh + .hibytes 0BFECh + .hibytes 0BFEDh + .hibytes 0BFEEh + .hibytes 0BFEFh + .hibytes 0BFF0h + .hibytes 0BFF1h + .hibytes 0BFF2h + .hibytes 0BFF3h + .hibytes 0BFF4h + .hibytes 0BFF5h + .hibytes 0BFF6h + .hibytes 0BFF7h + .hibytes 0BFF8h + .hibytes 0BFF9h + .hibytes 0BFFAh + .hibytes 0BFFBh + .hibytes 0BFFCh + .hibytes 0BFFDh + .hibytes 0BFFEh + .hibytes 0BFFFh + .hibytes 0C000h + .hibytes 0C001h + .hibytes 0C002h + .hibytes 0C003h + .hibytes 0C004h + .hibytes 0C005h + .hibytes 0C006h + .hibytes 0C007h + .hibytes 0C008h + .hibytes 0C009h + .hibytes 0C00Ah + .hibytes 0C00Bh + .hibytes 0C00Ch + .hibytes 0C00Dh + .hibytes 0C00Eh + .hibytes 0C00Fh + .hibytes 0CFE1h + .hibytes 0CFE2h + .hibytes 0CFE3h + .hibytes 0CFE4h + .hibytes 0CFE5h + .hibytes 0CFE6h + .hibytes 0CFE7h + .hibytes 0CFE8h + .hibytes 0CFE9h + .hibytes 0CFEAh + .hibytes 0CFEBh + .hibytes 0CFECh + .hibytes 0CFEDh + .hibytes 0CFEEh + .hibytes 0CFEFh + .hibytes 0CFF0h + .hibytes 0CFF1h + .hibytes 0CFF2h + .hibytes 0CFF3h + .hibytes 0CFF4h + .hibytes 0CFF5h + .hibytes 0CFF6h + .hibytes 0CFF7h + .hibytes 0CFF8h + .hibytes 0CFF9h + .hibytes 0CFFAh + .hibytes 0CFFBh + .hibytes 0CFFCh + .hibytes 0CFFDh + .hibytes 0CFFEh + .hibytes 0CFFFh + .hibytes 0D000h + .hibytes 0D001h + .hibytes 0D002h + .hibytes 0D003h + .hibytes 0D004h + .hibytes 0D005h + .hibytes 0D006h + .hibytes 0D007h + .hibytes 0D008h + .hibytes 0D009h + .hibytes 0D00Ah + .hibytes 0D00Bh + .hibytes 0D00Ch + .hibytes 0D00Dh + .hibytes 0D00Eh + .hibytes 0D00Fh + .hibytes 0DFE1h + .hibytes 0DFE2h + .hibytes 0DFE3h + .hibytes 0DFE4h + .hibytes 0DFE5h + .hibytes 0DFE6h + .hibytes 0DFE7h + .hibytes 0DFE8h + .hibytes 0DFE9h + .hibytes 0DFEAh + .hibytes 0DFEBh + .hibytes 0DFECh + .hibytes 0DFEDh + .hibytes 0DFEEh + .hibytes 0DFEFh + .hibytes 0DFF0h + .hibytes 0DFF1h + .hibytes 0DFF2h + .hibytes 0DFF3h + .hibytes 0DFF4h + .hibytes 0DFF5h + .hibytes 0DFF6h + .hibytes 0DFF7h + .hibytes 0DFF8h + .hibytes 0DFF9h + .hibytes 0DFFAh + .hibytes 0DFFBh + .hibytes 0DFFCh + .hibytes 0DFFDh + .hibytes 0DFFEh + .hibytes 0DFFFh + .hibytes 0E000h + .hibytes 0E001h + .hibytes 0E002h + .hibytes 0E003h + .hibytes 0E004h + .hibytes 0E005h + .hibytes 0E006h + .hibytes 0E007h + .hibytes 0E008h + .hibytes 0E009h + .hibytes 0E00Ah + .hibytes 0E00Bh + .hibytes 0E00Ch + .hibytes 0E00Dh + .hibytes 0E00Eh + .hibytes 0E00Fh + .hibytes 0EFE1h + .hibytes 0EFE2h + .hibytes 0EFE3h + .hibytes 0EFE4h + .hibytes 0EFE5h + .hibytes 0EFE6h + .hibytes 0EFE7h + .hibytes 0EFE8h + .hibytes 0EFE9h + .hibytes 0EFEAh + .hibytes 0EFEBh + .hibytes 0EFECh + .hibytes 0EFEDh + .hibytes 0EFEEh + .hibytes 0EFEFh + .hibytes 0EFF0h + .hibytes 0EFF1h + .hibytes 0EFF2h + .hibytes 0EFF3h + .hibytes 0EFF4h + .hibytes 0EFF5h + .hibytes 0EFF6h + .hibytes 0EFF7h + .hibytes 0EFF8h + .hibytes 0EFF9h + .hibytes 0EFFAh + .hibytes 0EFFBh + .hibytes 0EFFCh + .hibytes 0EFFDh + .hibytes 0EFFEh + .hibytes 0EFFFh + .hibytes 0F000h + .hibytes 0F001h + .hibytes 0F002h + .hibytes 0F003h + .hibytes 0F004h + .hibytes 0F005h + .hibytes 0F006h + .hibytes 0F007h + .hibytes 0F008h + .hibytes 0F009h + .hibytes 0F00Ah + .hibytes 0F00Bh + .hibytes 0F00Ch + .hibytes 0F00Dh + .hibytes 0F00Eh + .hibytes 0F00Fh + .hibytes 0FFE1h + .hibytes 0FFE2h + .hibytes 0FFE3h + .hibytes 0FFE4h + .hibytes 0FFE5h + .hibytes 0FFE6h + .hibytes 0FFE7h + .hibytes 0FFE8h + .hibytes 0FFE9h + .hibytes 0FFEAh + .hibytes 0FFEBh + .hibytes 0FFECh + .hibytes 0FFEDh + .hibytes 0FFEEh + .hibytes 0FFEFh + .hibytes 0FFF0h + .hibytes 0FFF1h + .hibytes 0FFF2h + .hibytes 0FFF3h + .hibytes 0FFF4h + .hibytes 0FFF5h + .hibytes 0FFF6h + .hibytes 0FFF7h + .hibytes 0FFF8h + .hibytes 0FFF9h + .hibytes 0FFFAh + .hibytes 0FFFBh + .hibytes 0FFFCh + .hibytes 0FFFDh + .hibytes 0FFFEh + .hibytes 0FFFFh - ; alternative hex values, always leading zero - .hibytes 00h - .hibytes 01h - .hibytes 02h - .hibytes 03h - .hibytes 04h - .hibytes 05h - .hibytes 06h - .hibytes 07h - .hibytes 08h - .hibytes 09h - .hibytes 0ah - .hibytes 0bh - .hibytes 0ch - .hibytes 0dh - .hibytes 0eh - .hibytes 0fh - .hibytes 010h - .hibytes 011h - .hibytes 012h - .hibytes 013h - .hibytes 070h - .hibytes 071h - .hibytes 072h - .hibytes 073h - .hibytes 074h - .hibytes 075h - .hibytes 076h - .hibytes 077h - .hibytes 078h - .hibytes 079h - .hibytes 07ah - .hibytes 07bh - .hibytes 07ch - .hibytes 07dh - .hibytes 07eh - .hibytes 07fh - .hibytes 080h - .hibytes 081h - .hibytes 082h - .hibytes 083h - .hibytes 084h - .hibytes 085h - .hibytes 086h - .hibytes 0f0h - .hibytes 0f1h - .hibytes 0f2h - .hibytes 0f3h - .hibytes 0f4h - .hibytes 0f5h - .hibytes 0f6h - .hibytes 0f7h - .hibytes 0f8h - .hibytes 0f9h - .hibytes 0fah - .hibytes 0fbh - .hibytes 0fch - .hibytes 0fdh - .hibytes 0feh - .hibytes 0ffh - .hibytes 0100h - .hibytes 0101h - .hibytes 0102h - .hibytes 0103h - .hibytes 0fd2h - .hibytes 0fd3h - .hibytes 0fd4h - .hibytes 0fd5h - .hibytes 0fd6h - .hibytes 0fd7h - .hibytes 0fd8h - .hibytes 0fd9h - .hibytes 0fdah - .hibytes 0fdbh - .hibytes 0fdch - .hibytes 0fddh - .hibytes 0fdeh - .hibytes 0fdfh - .hibytes 0fe0h - .hibytes 0fe1h - .hibytes 0fe2h - .hibytes 0fe3h - .hibytes 0fe4h - .hibytes 0fe5h - .hibytes 0fe6h - .hibytes 0fe7h - .hibytes 0fe8h - .hibytes 0fe9h - .hibytes 0feah - .hibytes 0febh - .hibytes 0fech - .hibytes 0fedh - .hibytes 0feeh - .hibytes 0fefh - .hibytes 0ff0h - .hibytes 0ff1h - .hibytes 0ff2h - .hibytes 0ff3h - .hibytes 0ff4h - .hibytes 0ff5h - .hibytes 0ff6h - .hibytes 0ff7h - .hibytes 0ff8h - .hibytes 0ff9h - .hibytes 0ffah - .hibytes 0ffbh - .hibytes 0ffch - .hibytes 0ffdh - .hibytes 0ffeh - .hibytes 0fffh - .hibytes 01000h - .hibytes 01001h - .hibytes 01002h - .hibytes 01003h - .hibytes 01004h - .hibytes 01005h - .hibytes 01006h - .hibytes 01007h - .hibytes 01008h - .hibytes 07ff0h - .hibytes 07ff1h - .hibytes 07ff2h - .hibytes 07ff3h - .hibytes 07ff4h - .hibytes 07ff5h - .hibytes 07ff6h - .hibytes 07ff7h - .hibytes 07ff8h - .hibytes 07ff9h - .hibytes 07ffah - .hibytes 07ffbh - .hibytes 07ffch - .hibytes 07ffdh - .hibytes 07ffeh - .hibytes 07fffh - .hibytes 08000h - .hibytes 08001h - .hibytes 08002h - .hibytes 08003h - .hibytes 08004h - .hibytes 08005h - .hibytes 08006h - .hibytes 08007h - .hibytes 08008h - .hibytes 08009h - .hibytes 0800ah - .hibytes 0800bh - .hibytes 09fe1h - .hibytes 09fe2h - .hibytes 09fe3h - .hibytes 09fe4h - .hibytes 09fe5h - .hibytes 09fe6h - .hibytes 09fe7h - .hibytes 09fe8h - .hibytes 09fe9h - .hibytes 09feah - .hibytes 09febh - .hibytes 09fech - .hibytes 09fedh - .hibytes 09feeh - .hibytes 09fefh - .hibytes 09ff0h - .hibytes 09ff1h - .hibytes 09ff2h - .hibytes 09ff3h - .hibytes 09ff4h - .hibytes 09ff5h - .hibytes 09ff6h - .hibytes 09ff7h - .hibytes 09ff8h - .hibytes 09ff9h - .hibytes 09ffah - .hibytes 09ffbh - .hibytes 09ffch - .hibytes 09ffdh - .hibytes 09ffeh - .hibytes 09fffh - .hibytes 0a000h - .hibytes 0a001h - .hibytes 0a002h - .hibytes 0a003h - .hibytes 0a004h - .hibytes 0a005h - .hibytes 0a006h - .hibytes 0a007h - .hibytes 0a008h - .hibytes 0a009h - .hibytes 0a00ah - .hibytes 0a00bh - .hibytes 0a00ch - .hibytes 0a00dh - .hibytes 0a00eh - .hibytes 0a00fh - .hibytes 0afe1h - .hibytes 0afe2h - .hibytes 0afe3h - .hibytes 0afe4h - .hibytes 0afe5h - .hibytes 0afe6h - .hibytes 0afe7h - .hibytes 0afe8h - .hibytes 0afe9h - .hibytes 0afeah - .hibytes 0afebh - .hibytes 0afech - .hibytes 0afedh - .hibytes 0afeeh - .hibytes 0afefh - .hibytes 0aff0h - .hibytes 0aff1h - .hibytes 0aff2h - .hibytes 0aff3h - .hibytes 0aff4h - .hibytes 0aff5h - .hibytes 0aff6h - .hibytes 0aff7h - .hibytes 0aff8h - .hibytes 0aff9h - .hibytes 0affah - .hibytes 0affbh - .hibytes 0affch - .hibytes 0affdh - .hibytes 0affeh - .hibytes 0afffh - .hibytes 0b000h - .hibytes 0b001h - .hibytes 0b002h - .hibytes 0b003h - .hibytes 0b004h - .hibytes 0b005h - .hibytes 0b006h - .hibytes 0b007h - .hibytes 0b008h - .hibytes 0b009h - .hibytes 0b00ah - .hibytes 0b00bh - .hibytes 0b00ch - .hibytes 0b00dh - .hibytes 0b00eh - .hibytes 0b00fh - .hibytes 0bfe1h - .hibytes 0bfe2h - .hibytes 0bfe3h - .hibytes 0bfe4h - .hibytes 0bfe5h - .hibytes 0bfe6h - .hibytes 0bfe7h - .hibytes 0bfe8h - .hibytes 0bfe9h - .hibytes 0bfeah - .hibytes 0bfebh - .hibytes 0bfech - .hibytes 0bfedh - .hibytes 0bfeeh - .hibytes 0bfefh - .hibytes 0bff0h - .hibytes 0bff1h - .hibytes 0bff2h - .hibytes 0bff3h - .hibytes 0bff4h - .hibytes 0bff5h - .hibytes 0bff6h - .hibytes 0bff7h - .hibytes 0bff8h - .hibytes 0bff9h - .hibytes 0bffah - .hibytes 0bffbh - .hibytes 0bffch - .hibytes 0bffdh - .hibytes 0bffeh - .hibytes 0bfffh - .hibytes 0c000h - .hibytes 0c001h - .hibytes 0c002h - .hibytes 0c003h - .hibytes 0c004h - .hibytes 0c005h - .hibytes 0c006h - .hibytes 0c007h - .hibytes 0c008h - .hibytes 0c009h - .hibytes 0c00ah - .hibytes 0c00bh - .hibytes 0c00ch - .hibytes 0c00dh - .hibytes 0c00eh - .hibytes 0c00fh - .hibytes 0cfe1h - .hibytes 0cfe2h - .hibytes 0cfe3h - .hibytes 0cfe4h - .hibytes 0cfe5h - .hibytes 0cfe6h - .hibytes 0cfe7h - .hibytes 0cfe8h - .hibytes 0cfe9h - .hibytes 0cfeah - .hibytes 0cfebh - .hibytes 0cfech - .hibytes 0cfedh - .hibytes 0cfeeh - .hibytes 0cfefh - .hibytes 0cff0h - .hibytes 0cff1h - .hibytes 0cff2h - .hibytes 0cff3h - .hibytes 0cff4h - .hibytes 0cff5h - .hibytes 0cff6h - .hibytes 0cff7h - .hibytes 0cff8h - .hibytes 0cff9h - .hibytes 0cffah - .hibytes 0cffbh - .hibytes 0cffch - .hibytes 0cffdh - .hibytes 0cffeh - .hibytes 0cfffh - .hibytes 0d000h - .hibytes 0d001h - .hibytes 0d002h - .hibytes 0d003h - .hibytes 0d004h - .hibytes 0d005h - .hibytes 0d006h - .hibytes 0d007h - .hibytes 0d008h - .hibytes 0d009h - .hibytes 0d00ah - .hibytes 0d00bh - .hibytes 0d00ch - .hibytes 0d00dh - .hibytes 0d00eh - .hibytes 0d00fh - .hibytes 0dfe1h - .hibytes 0dfe2h - .hibytes 0dfe3h - .hibytes 0dfe4h - .hibytes 0dfe5h - .hibytes 0dfe6h - .hibytes 0dfe7h - .hibytes 0dfe8h - .hibytes 0dfe9h - .hibytes 0dfeah - .hibytes 0dfebh - .hibytes 0dfech - .hibytes 0dfedh - .hibytes 0dfeeh - .hibytes 0dfefh - .hibytes 0dff0h - .hibytes 0dff1h - .hibytes 0dff2h - .hibytes 0dff3h - .hibytes 0dff4h - .hibytes 0dff5h - .hibytes 0dff6h - .hibytes 0dff7h - .hibytes 0dff8h - .hibytes 0dff9h - .hibytes 0dffah - .hibytes 0dffbh - .hibytes 0dffch - .hibytes 0dffdh - .hibytes 0dffeh - .hibytes 0dfffh - .hibytes 0e000h - .hibytes 0e001h - .hibytes 0e002h - .hibytes 0e003h - .hibytes 0e004h - .hibytes 0e005h - .hibytes 0e006h - .hibytes 0e007h - .hibytes 0e008h - .hibytes 0e009h - .hibytes 0e00ah - .hibytes 0e00bh - .hibytes 0e00ch - .hibytes 0e00dh - .hibytes 0e00eh - .hibytes 0e00fh - .hibytes 0efe1h - .hibytes 0efe2h - .hibytes 0efe3h - .hibytes 0efe4h - .hibytes 0efe5h - .hibytes 0efe6h - .hibytes 0efe7h - .hibytes 0efe8h - .hibytes 0efe9h - .hibytes 0efeah - .hibytes 0efebh - .hibytes 0efech - .hibytes 0efedh - .hibytes 0efeeh - .hibytes 0efefh - .hibytes 0eff0h - .hibytes 0eff1h - .hibytes 0eff2h - .hibytes 0eff3h - .hibytes 0eff4h - .hibytes 0eff5h - .hibytes 0eff6h - .hibytes 0eff7h - .hibytes 0eff8h - .hibytes 0eff9h - .hibytes 0effah - .hibytes 0effbh - .hibytes 0effch - .hibytes 0effdh - .hibytes 0effeh - .hibytes 0efffh - .hibytes 0f000h - .hibytes 0f001h - .hibytes 0f002h - .hibytes 0f003h - .hibytes 0f004h - .hibytes 0f005h - .hibytes 0f006h - .hibytes 0f007h - .hibytes 0f008h - .hibytes 0f009h - .hibytes 0f00ah - .hibytes 0f00bh - .hibytes 0f00ch - .hibytes 0f00dh - .hibytes 0f00eh - .hibytes 0f00fh - .hibytes 0ffe1h - .hibytes 0ffe2h - .hibytes 0ffe3h - .hibytes 0ffe4h - .hibytes 0ffe5h - .hibytes 0ffe6h - .hibytes 0ffe7h - .hibytes 0ffe8h - .hibytes 0ffe9h - .hibytes 0ffeah - .hibytes 0ffebh - .hibytes 0ffech - .hibytes 0ffedh - .hibytes 0ffeeh - .hibytes 0ffefh - .hibytes 0fff0h - .hibytes 0fff1h - .hibytes 0fff2h - .hibytes 0fff3h - .hibytes 0fff4h - .hibytes 0fff5h - .hibytes 0fff6h - .hibytes 0fff7h - .hibytes 0fff8h - .hibytes 0fff9h - .hibytes 0fffah - .hibytes 0fffbh - .hibytes 0fffch - .hibytes 0fffdh - .hibytes 0fffeh - .hibytes 0ffffh + ; alternative hex values, always leading zero + .hibytes 00h + .hibytes 01h + .hibytes 02h + .hibytes 03h + .hibytes 04h + .hibytes 05h + .hibytes 06h + .hibytes 07h + .hibytes 08h + .hibytes 09h + .hibytes 0ah + .hibytes 0bh + .hibytes 0ch + .hibytes 0dh + .hibytes 0eh + .hibytes 0fh + .hibytes 010h + .hibytes 011h + .hibytes 012h + .hibytes 013h + .hibytes 070h + .hibytes 071h + .hibytes 072h + .hibytes 073h + .hibytes 074h + .hibytes 075h + .hibytes 076h + .hibytes 077h + .hibytes 078h + .hibytes 079h + .hibytes 07ah + .hibytes 07bh + .hibytes 07ch + .hibytes 07dh + .hibytes 07eh + .hibytes 07fh + .hibytes 080h + .hibytes 081h + .hibytes 082h + .hibytes 083h + .hibytes 084h + .hibytes 085h + .hibytes 086h + .hibytes 0f0h + .hibytes 0f1h + .hibytes 0f2h + .hibytes 0f3h + .hibytes 0f4h + .hibytes 0f5h + .hibytes 0f6h + .hibytes 0f7h + .hibytes 0f8h + .hibytes 0f9h + .hibytes 0fah + .hibytes 0fbh + .hibytes 0fch + .hibytes 0fdh + .hibytes 0feh + .hibytes 0ffh + .hibytes 0100h + .hibytes 0101h + .hibytes 0102h + .hibytes 0103h + .hibytes 0fd2h + .hibytes 0fd3h + .hibytes 0fd4h + .hibytes 0fd5h + .hibytes 0fd6h + .hibytes 0fd7h + .hibytes 0fd8h + .hibytes 0fd9h + .hibytes 0fdah + .hibytes 0fdbh + .hibytes 0fdch + .hibytes 0fddh + .hibytes 0fdeh + .hibytes 0fdfh + .hibytes 0fe0h + .hibytes 0fe1h + .hibytes 0fe2h + .hibytes 0fe3h + .hibytes 0fe4h + .hibytes 0fe5h + .hibytes 0fe6h + .hibytes 0fe7h + .hibytes 0fe8h + .hibytes 0fe9h + .hibytes 0feah + .hibytes 0febh + .hibytes 0fech + .hibytes 0fedh + .hibytes 0feeh + .hibytes 0fefh + .hibytes 0ff0h + .hibytes 0ff1h + .hibytes 0ff2h + .hibytes 0ff3h + .hibytes 0ff4h + .hibytes 0ff5h + .hibytes 0ff6h + .hibytes 0ff7h + .hibytes 0ff8h + .hibytes 0ff9h + .hibytes 0ffah + .hibytes 0ffbh + .hibytes 0ffch + .hibytes 0ffdh + .hibytes 0ffeh + .hibytes 0fffh + .hibytes 01000h + .hibytes 01001h + .hibytes 01002h + .hibytes 01003h + .hibytes 01004h + .hibytes 01005h + .hibytes 01006h + .hibytes 01007h + .hibytes 01008h + .hibytes 07ff0h + .hibytes 07ff1h + .hibytes 07ff2h + .hibytes 07ff3h + .hibytes 07ff4h + .hibytes 07ff5h + .hibytes 07ff6h + .hibytes 07ff7h + .hibytes 07ff8h + .hibytes 07ff9h + .hibytes 07ffah + .hibytes 07ffbh + .hibytes 07ffch + .hibytes 07ffdh + .hibytes 07ffeh + .hibytes 07fffh + .hibytes 08000h + .hibytes 08001h + .hibytes 08002h + .hibytes 08003h + .hibytes 08004h + .hibytes 08005h + .hibytes 08006h + .hibytes 08007h + .hibytes 08008h + .hibytes 08009h + .hibytes 0800ah + .hibytes 0800bh + .hibytes 09fe1h + .hibytes 09fe2h + .hibytes 09fe3h + .hibytes 09fe4h + .hibytes 09fe5h + .hibytes 09fe6h + .hibytes 09fe7h + .hibytes 09fe8h + .hibytes 09fe9h + .hibytes 09feah + .hibytes 09febh + .hibytes 09fech + .hibytes 09fedh + .hibytes 09feeh + .hibytes 09fefh + .hibytes 09ff0h + .hibytes 09ff1h + .hibytes 09ff2h + .hibytes 09ff3h + .hibytes 09ff4h + .hibytes 09ff5h + .hibytes 09ff6h + .hibytes 09ff7h + .hibytes 09ff8h + .hibytes 09ff9h + .hibytes 09ffah + .hibytes 09ffbh + .hibytes 09ffch + .hibytes 09ffdh + .hibytes 09ffeh + .hibytes 09fffh + .hibytes 0a000h + .hibytes 0a001h + .hibytes 0a002h + .hibytes 0a003h + .hibytes 0a004h + .hibytes 0a005h + .hibytes 0a006h + .hibytes 0a007h + .hibytes 0a008h + .hibytes 0a009h + .hibytes 0a00ah + .hibytes 0a00bh + .hibytes 0a00ch + .hibytes 0a00dh + .hibytes 0a00eh + .hibytes 0a00fh + .hibytes 0afe1h + .hibytes 0afe2h + .hibytes 0afe3h + .hibytes 0afe4h + .hibytes 0afe5h + .hibytes 0afe6h + .hibytes 0afe7h + .hibytes 0afe8h + .hibytes 0afe9h + .hibytes 0afeah + .hibytes 0afebh + .hibytes 0afech + .hibytes 0afedh + .hibytes 0afeeh + .hibytes 0afefh + .hibytes 0aff0h + .hibytes 0aff1h + .hibytes 0aff2h + .hibytes 0aff3h + .hibytes 0aff4h + .hibytes 0aff5h + .hibytes 0aff6h + .hibytes 0aff7h + .hibytes 0aff8h + .hibytes 0aff9h + .hibytes 0affah + .hibytes 0affbh + .hibytes 0affch + .hibytes 0affdh + .hibytes 0affeh + .hibytes 0afffh + .hibytes 0b000h + .hibytes 0b001h + .hibytes 0b002h + .hibytes 0b003h + .hibytes 0b004h + .hibytes 0b005h + .hibytes 0b006h + .hibytes 0b007h + .hibytes 0b008h + .hibytes 0b009h + .hibytes 0b00ah + .hibytes 0b00bh + .hibytes 0b00ch + .hibytes 0b00dh + .hibytes 0b00eh + .hibytes 0b00fh + .hibytes 0bfe1h + .hibytes 0bfe2h + .hibytes 0bfe3h + .hibytes 0bfe4h + .hibytes 0bfe5h + .hibytes 0bfe6h + .hibytes 0bfe7h + .hibytes 0bfe8h + .hibytes 0bfe9h + .hibytes 0bfeah + .hibytes 0bfebh + .hibytes 0bfech + .hibytes 0bfedh + .hibytes 0bfeeh + .hibytes 0bfefh + .hibytes 0bff0h + .hibytes 0bff1h + .hibytes 0bff2h + .hibytes 0bff3h + .hibytes 0bff4h + .hibytes 0bff5h + .hibytes 0bff6h + .hibytes 0bff7h + .hibytes 0bff8h + .hibytes 0bff9h + .hibytes 0bffah + .hibytes 0bffbh + .hibytes 0bffch + .hibytes 0bffdh + .hibytes 0bffeh + .hibytes 0bfffh + .hibytes 0c000h + .hibytes 0c001h + .hibytes 0c002h + .hibytes 0c003h + .hibytes 0c004h + .hibytes 0c005h + .hibytes 0c006h + .hibytes 0c007h + .hibytes 0c008h + .hibytes 0c009h + .hibytes 0c00ah + .hibytes 0c00bh + .hibytes 0c00ch + .hibytes 0c00dh + .hibytes 0c00eh + .hibytes 0c00fh + .hibytes 0cfe1h + .hibytes 0cfe2h + .hibytes 0cfe3h + .hibytes 0cfe4h + .hibytes 0cfe5h + .hibytes 0cfe6h + .hibytes 0cfe7h + .hibytes 0cfe8h + .hibytes 0cfe9h + .hibytes 0cfeah + .hibytes 0cfebh + .hibytes 0cfech + .hibytes 0cfedh + .hibytes 0cfeeh + .hibytes 0cfefh + .hibytes 0cff0h + .hibytes 0cff1h + .hibytes 0cff2h + .hibytes 0cff3h + .hibytes 0cff4h + .hibytes 0cff5h + .hibytes 0cff6h + .hibytes 0cff7h + .hibytes 0cff8h + .hibytes 0cff9h + .hibytes 0cffah + .hibytes 0cffbh + .hibytes 0cffch + .hibytes 0cffdh + .hibytes 0cffeh + .hibytes 0cfffh + .hibytes 0d000h + .hibytes 0d001h + .hibytes 0d002h + .hibytes 0d003h + .hibytes 0d004h + .hibytes 0d005h + .hibytes 0d006h + .hibytes 0d007h + .hibytes 0d008h + .hibytes 0d009h + .hibytes 0d00ah + .hibytes 0d00bh + .hibytes 0d00ch + .hibytes 0d00dh + .hibytes 0d00eh + .hibytes 0d00fh + .hibytes 0dfe1h + .hibytes 0dfe2h + .hibytes 0dfe3h + .hibytes 0dfe4h + .hibytes 0dfe5h + .hibytes 0dfe6h + .hibytes 0dfe7h + .hibytes 0dfe8h + .hibytes 0dfe9h + .hibytes 0dfeah + .hibytes 0dfebh + .hibytes 0dfech + .hibytes 0dfedh + .hibytes 0dfeeh + .hibytes 0dfefh + .hibytes 0dff0h + .hibytes 0dff1h + .hibytes 0dff2h + .hibytes 0dff3h + .hibytes 0dff4h + .hibytes 0dff5h + .hibytes 0dff6h + .hibytes 0dff7h + .hibytes 0dff8h + .hibytes 0dff9h + .hibytes 0dffah + .hibytes 0dffbh + .hibytes 0dffch + .hibytes 0dffdh + .hibytes 0dffeh + .hibytes 0dfffh + .hibytes 0e000h + .hibytes 0e001h + .hibytes 0e002h + .hibytes 0e003h + .hibytes 0e004h + .hibytes 0e005h + .hibytes 0e006h + .hibytes 0e007h + .hibytes 0e008h + .hibytes 0e009h + .hibytes 0e00ah + .hibytes 0e00bh + .hibytes 0e00ch + .hibytes 0e00dh + .hibytes 0e00eh + .hibytes 0e00fh + .hibytes 0efe1h + .hibytes 0efe2h + .hibytes 0efe3h + .hibytes 0efe4h + .hibytes 0efe5h + .hibytes 0efe6h + .hibytes 0efe7h + .hibytes 0efe8h + .hibytes 0efe9h + .hibytes 0efeah + .hibytes 0efebh + .hibytes 0efech + .hibytes 0efedh + .hibytes 0efeeh + .hibytes 0efefh + .hibytes 0eff0h + .hibytes 0eff1h + .hibytes 0eff2h + .hibytes 0eff3h + .hibytes 0eff4h + .hibytes 0eff5h + .hibytes 0eff6h + .hibytes 0eff7h + .hibytes 0eff8h + .hibytes 0eff9h + .hibytes 0effah + .hibytes 0effbh + .hibytes 0effch + .hibytes 0effdh + .hibytes 0effeh + .hibytes 0efffh + .hibytes 0f000h + .hibytes 0f001h + .hibytes 0f002h + .hibytes 0f003h + .hibytes 0f004h + .hibytes 0f005h + .hibytes 0f006h + .hibytes 0f007h + .hibytes 0f008h + .hibytes 0f009h + .hibytes 0f00ah + .hibytes 0f00bh + .hibytes 0f00ch + .hibytes 0f00dh + .hibytes 0f00eh + .hibytes 0f00fh + .hibytes 0ffe1h + .hibytes 0ffe2h + .hibytes 0ffe3h + .hibytes 0ffe4h + .hibytes 0ffe5h + .hibytes 0ffe6h + .hibytes 0ffe7h + .hibytes 0ffe8h + .hibytes 0ffe9h + .hibytes 0ffeah + .hibytes 0ffebh + .hibytes 0ffech + .hibytes 0ffedh + .hibytes 0ffeeh + .hibytes 0ffefh + .hibytes 0fff0h + .hibytes 0fff1h + .hibytes 0fff2h + .hibytes 0fff3h + .hibytes 0fff4h + .hibytes 0fff5h + .hibytes 0fff6h + .hibytes 0fff7h + .hibytes 0fff8h + .hibytes 0fff9h + .hibytes 0fffah + .hibytes 0fffbh + .hibytes 0fffch + .hibytes 0fffdh + .hibytes 0fffeh + .hibytes 0ffffh - ; binary values, variable length - .hibytes %0 - .hibytes %01 - .hibytes %010 - .hibytes %011 - .hibytes %0100 - .hibytes %0101 - .hibytes %0110 - .hibytes %0111 - .hibytes %01000 - .hibytes %01001 - .hibytes %01010 - .hibytes %01011 - .hibytes %01100 - .hibytes %01101 - .hibytes %01110 - .hibytes %01111 - .hibytes %010000 - .hibytes %010001 - .hibytes %010010 - .hibytes %010011 - .hibytes %01110000 - .hibytes %01110001 - .hibytes %01110010 - .hibytes %01110011 - .hibytes %01110100 - .hibytes %01110101 - .hibytes %01110110 - .hibytes %01110111 - .hibytes %01111000 - .hibytes %01111001 - .hibytes %01111010 - .hibytes %01111011 - .hibytes %01111100 - .hibytes %01111101 - .hibytes %01111110 - .hibytes %01111111 - .hibytes %010000000 - .hibytes %010000001 - .hibytes %010000010 - .hibytes %010000011 - .hibytes %010000100 - .hibytes %010000101 - .hibytes %010000110 - .hibytes %011110000 - .hibytes %011110001 - .hibytes %011110010 - .hibytes %011110011 - .hibytes %011110100 - .hibytes %011110101 - .hibytes %011110110 - .hibytes %011110111 - .hibytes %011111000 - .hibytes %011111001 - .hibytes %011111010 - .hibytes %011111011 - .hibytes %011111100 - .hibytes %011111101 - .hibytes %011111110 - .hibytes %011111111 - .hibytes %100000000 - .hibytes %100000001 - .hibytes %100000010 - .hibytes %100000011 - .hibytes %111111010010 - .hibytes %111111010011 - .hibytes %111111010100 - .hibytes %111111010101 - .hibytes %111111010110 - .hibytes %111111010111 - .hibytes %111111011000 - .hibytes %111111011001 - .hibytes %111111011010 - .hibytes %111111011011 - .hibytes %111111011100 - .hibytes %111111011101 - .hibytes %111111011110 - .hibytes %111111011111 - .hibytes %111111100000 - .hibytes %111111100001 - .hibytes %111111100010 - .hibytes %111111100011 - .hibytes %111111100100 - .hibytes %111111100101 - .hibytes %111111100110 - .hibytes %111111100111 - .hibytes %111111101000 - .hibytes %111111101001 - .hibytes %111111101010 - .hibytes %111111101011 - .hibytes %111111101100 - .hibytes %111111101101 - .hibytes %111111101110 - .hibytes %111111101111 - .hibytes %111111110000 - .hibytes %111111110001 - .hibytes %111111110010 - .hibytes %111111110011 - .hibytes %111111110100 - .hibytes %111111110101 - .hibytes %111111110110 - .hibytes %111111110111 - .hibytes %111111111000 - .hibytes %111111111001 - .hibytes %111111111010 - .hibytes %111111111011 - .hibytes %111111111100 - .hibytes %111111111101 - .hibytes %111111111110 - .hibytes %111111111111 - .hibytes %1000000000000 - .hibytes %1000000000001 - .hibytes %1000000000010 - .hibytes %1000000000011 - .hibytes %1000000000100 - .hibytes %1000000000101 - .hibytes %1000000000110 - .hibytes %1000000000111 - .hibytes %1000000001000 - .hibytes %111111111110000 - .hibytes %111111111110001 - .hibytes %111111111110010 - .hibytes %111111111110011 - .hibytes %111111111110100 - .hibytes %111111111110101 - .hibytes %111111111110110 - .hibytes %111111111110111 - .hibytes %111111111111000 - .hibytes %111111111111001 - .hibytes %111111111111010 - .hibytes %111111111111011 - .hibytes %111111111111100 - .hibytes %111111111111101 - .hibytes %111111111111110 - .hibytes %111111111111111 - .hibytes %1000000000000000 - .hibytes %1000000000000001 - .hibytes %1000000000000010 - .hibytes %1000000000000011 - .hibytes %1000000000000100 - .hibytes %1000000000000101 - .hibytes %1000000000000110 - .hibytes %1000000000000111 - .hibytes %1000000000001000 - .hibytes %1000000000001001 - .hibytes %1000000000001010 - .hibytes %1000000000001011 - .hibytes %1001111111100001 - .hibytes %1001111111100010 - .hibytes %1001111111100011 - .hibytes %1001111111100100 - .hibytes %1001111111100101 - .hibytes %1001111111100110 - .hibytes %1001111111100111 - .hibytes %1001111111101000 - .hibytes %1001111111101001 - .hibytes %1001111111101010 - .hibytes %1001111111101011 - .hibytes %1001111111101100 - .hibytes %1001111111101101 - .hibytes %1001111111101110 - .hibytes %1001111111101111 - .hibytes %1001111111110000 - .hibytes %1001111111110001 - .hibytes %1001111111110010 - .hibytes %1001111111110011 - .hibytes %1001111111110100 - .hibytes %1001111111110101 - .hibytes %1001111111110110 - .hibytes %1001111111110111 - .hibytes %1001111111111000 - .hibytes %1001111111111001 - .hibytes %1001111111111010 - .hibytes %1001111111111011 - .hibytes %1001111111111100 - .hibytes %1001111111111101 - .hibytes %1001111111111110 - .hibytes %1001111111111111 - .hibytes %1010000000000000 - .hibytes %1010000000000001 - .hibytes %1010000000000010 - .hibytes %1010000000000011 - .hibytes %1010000000000100 - .hibytes %1010000000000101 - .hibytes %1010000000000110 - .hibytes %1010000000000111 - .hibytes %1010000000001000 - .hibytes %1010000000001001 - .hibytes %1010000000001010 - .hibytes %1010000000001011 - .hibytes %1010000000001100 - .hibytes %1010000000001101 - .hibytes %1010000000001110 - .hibytes %1010000000001111 - .hibytes %1010111111100001 - .hibytes %1010111111100010 - .hibytes %1010111111100011 - .hibytes %1010111111100100 - .hibytes %1010111111100101 - .hibytes %1010111111100110 - .hibytes %1010111111100111 - .hibytes %1010111111101000 - .hibytes %1010111111101001 - .hibytes %1010111111101010 - .hibytes %1010111111101011 - .hibytes %1010111111101100 - .hibytes %1010111111101101 - .hibytes %1010111111101110 - .hibytes %1010111111101111 - .hibytes %1010111111110000 - .hibytes %1010111111110001 - .hibytes %1010111111110010 - .hibytes %1010111111110011 - .hibytes %1010111111110100 - .hibytes %1010111111110101 - .hibytes %1010111111110110 - .hibytes %1010111111110111 - .hibytes %1010111111111000 - .hibytes %1010111111111001 - .hibytes %1010111111111010 - .hibytes %1010111111111011 - .hibytes %1010111111111100 - .hibytes %1010111111111101 - .hibytes %1010111111111110 - .hibytes %1010111111111111 - .hibytes %1011000000000000 - .hibytes %1011000000000001 - .hibytes %1011000000000010 - .hibytes %1011000000000011 - .hibytes %1011000000000100 - .hibytes %1011000000000101 - .hibytes %1011000000000110 - .hibytes %1011000000000111 - .hibytes %1011000000001000 - .hibytes %1011000000001001 - .hibytes %1011000000001010 - .hibytes %1011000000001011 - .hibytes %1011000000001100 - .hibytes %1011000000001101 - .hibytes %1011000000001110 - .hibytes %1011000000001111 - .hibytes %1011111111100001 - .hibytes %1011111111100010 - .hibytes %1011111111100011 - .hibytes %1011111111100100 - .hibytes %1011111111100101 - .hibytes %1011111111100110 - .hibytes %1011111111100111 - .hibytes %1011111111101000 - .hibytes %1011111111101001 - .hibytes %1011111111101010 - .hibytes %1011111111101011 - .hibytes %1011111111101100 - .hibytes %1011111111101101 - .hibytes %1011111111101110 - .hibytes %1011111111101111 - .hibytes %1011111111110000 - .hibytes %1011111111110001 - .hibytes %1011111111110010 - .hibytes %1011111111110011 - .hibytes %1011111111110100 - .hibytes %1011111111110101 - .hibytes %1011111111110110 - .hibytes %1011111111110111 - .hibytes %1011111111111000 - .hibytes %1011111111111001 - .hibytes %1011111111111010 - .hibytes %1011111111111011 - .hibytes %1011111111111100 - .hibytes %1011111111111101 - .hibytes %1011111111111110 - .hibytes %1011111111111111 - .hibytes %1100000000000000 - .hibytes %1100000000000001 - .hibytes %1100000000000010 - .hibytes %1100000000000011 - .hibytes %1100000000000100 - .hibytes %1100000000000101 - .hibytes %1100000000000110 - .hibytes %1100000000000111 - .hibytes %1100000000001000 - .hibytes %1100000000001001 - .hibytes %1100000000001010 - .hibytes %1100000000001011 - .hibytes %1100000000001100 - .hibytes %1100000000001101 - .hibytes %1100000000001110 - .hibytes %1100000000001111 - .hibytes %1100111111100001 - .hibytes %1100111111100010 - .hibytes %1100111111100011 - .hibytes %1100111111100100 - .hibytes %1100111111100101 - .hibytes %1100111111100110 - .hibytes %1100111111100111 - .hibytes %1100111111101000 - .hibytes %1100111111101001 - .hibytes %1100111111101010 - .hibytes %1100111111101011 - .hibytes %1100111111101100 - .hibytes %1100111111101101 - .hibytes %1100111111101110 - .hibytes %1100111111101111 - .hibytes %1100111111110000 - .hibytes %1100111111110001 - .hibytes %1100111111110010 - .hibytes %1100111111110011 - .hibytes %1100111111110100 - .hibytes %1100111111110101 - .hibytes %1100111111110110 - .hibytes %1100111111110111 - .hibytes %1100111111111000 - .hibytes %1100111111111001 - .hibytes %1100111111111010 - .hibytes %1100111111111011 - .hibytes %1100111111111100 - .hibytes %1100111111111101 - .hibytes %1100111111111110 - .hibytes %1100111111111111 - .hibytes %1101000000000000 - .hibytes %1101000000000001 - .hibytes %1101000000000010 - .hibytes %1101000000000011 - .hibytes %1101000000000100 - .hibytes %1101000000000101 - .hibytes %1101000000000110 - .hibytes %1101000000000111 - .hibytes %1101000000001000 - .hibytes %1101000000001001 - .hibytes %1101000000001010 - .hibytes %1101000000001011 - .hibytes %1101000000001100 - .hibytes %1101000000001101 - .hibytes %1101000000001110 - .hibytes %1101000000001111 - .hibytes %1101111111100001 - .hibytes %1101111111100010 - .hibytes %1101111111100011 - .hibytes %1101111111100100 - .hibytes %1101111111100101 - .hibytes %1101111111100110 - .hibytes %1101111111100111 - .hibytes %1101111111101000 - .hibytes %1101111111101001 - .hibytes %1101111111101010 - .hibytes %1101111111101011 - .hibytes %1101111111101100 - .hibytes %1101111111101101 - .hibytes %1101111111101110 - .hibytes %1101111111101111 - .hibytes %1101111111110000 - .hibytes %1101111111110001 - .hibytes %1101111111110010 - .hibytes %1101111111110011 - .hibytes %1101111111110100 - .hibytes %1101111111110101 - .hibytes %1101111111110110 - .hibytes %1101111111110111 - .hibytes %1101111111111000 - .hibytes %1101111111111001 - .hibytes %1101111111111010 - .hibytes %1101111111111011 - .hibytes %1101111111111100 - .hibytes %1101111111111101 - .hibytes %1101111111111110 - .hibytes %1101111111111111 - .hibytes %1110000000000000 - .hibytes %1110000000000001 - .hibytes %1110000000000010 - .hibytes %1110000000000011 - .hibytes %1110000000000100 - .hibytes %1110000000000101 - .hibytes %1110000000000110 - .hibytes %1110000000000111 - .hibytes %1110000000001000 - .hibytes %1110000000001001 - .hibytes %1110000000001010 - .hibytes %1110000000001011 - .hibytes %1110000000001100 - .hibytes %1110000000001101 - .hibytes %1110000000001110 - .hibytes %1110000000001111 - .hibytes %1110111111100001 - .hibytes %1110111111100010 - .hibytes %1110111111100011 - .hibytes %1110111111100100 - .hibytes %1110111111100101 - .hibytes %1110111111100110 - .hibytes %1110111111100111 - .hibytes %1110111111101000 - .hibytes %1110111111101001 - .hibytes %1110111111101010 - .hibytes %1110111111101011 - .hibytes %1110111111101100 - .hibytes %1110111111101101 - .hibytes %1110111111101110 - .hibytes %1110111111101111 - .hibytes %1110111111110000 - .hibytes %1110111111110001 - .hibytes %1110111111110010 - .hibytes %1110111111110011 - .hibytes %1110111111110100 - .hibytes %1110111111110101 - .hibytes %1110111111110110 - .hibytes %1110111111110111 - .hibytes %1110111111111000 - .hibytes %1110111111111001 - .hibytes %1110111111111010 - .hibytes %1110111111111011 - .hibytes %1110111111111100 - .hibytes %1110111111111101 - .hibytes %1110111111111110 - .hibytes %1110111111111111 - .hibytes %1111000000000000 - .hibytes %1111000000000001 - .hibytes %1111000000000010 - .hibytes %1111000000000011 - .hibytes %1111000000000100 - .hibytes %1111000000000101 - .hibytes %1111000000000110 - .hibytes %1111000000000111 - .hibytes %1111000000001000 - .hibytes %1111000000001001 - .hibytes %1111000000001010 - .hibytes %1111000000001011 - .hibytes %1111000000001100 - .hibytes %1111000000001101 - .hibytes %1111000000001110 - .hibytes %1111000000001111 - .hibytes %1111111111100001 - .hibytes %1111111111100010 - .hibytes %1111111111100011 - .hibytes %1111111111100100 - .hibytes %1111111111100101 - .hibytes %1111111111100110 - .hibytes %1111111111100111 - .hibytes %1111111111101000 - .hibytes %1111111111101001 - .hibytes %1111111111101010 - .hibytes %1111111111101011 - .hibytes %1111111111101100 - .hibytes %1111111111101101 - .hibytes %1111111111101110 - .hibytes %1111111111101111 - .hibytes %1111111111110000 - .hibytes %1111111111110001 - .hibytes %1111111111110010 - .hibytes %1111111111110011 - .hibytes %1111111111110100 - .hibytes %1111111111110101 - .hibytes %1111111111110110 - .hibytes %1111111111110111 - .hibytes %1111111111111000 - .hibytes %1111111111111001 - .hibytes %1111111111111010 - .hibytes %1111111111111011 - .hibytes %1111111111111100 - .hibytes %1111111111111101 - .hibytes %1111111111111110 - .hibytes %1111111111111111 + ; binary values, variable length + .hibytes %0 + .hibytes %01 + .hibytes %010 + .hibytes %011 + .hibytes %0100 + .hibytes %0101 + .hibytes %0110 + .hibytes %0111 + .hibytes %01000 + .hibytes %01001 + .hibytes %01010 + .hibytes %01011 + .hibytes %01100 + .hibytes %01101 + .hibytes %01110 + .hibytes %01111 + .hibytes %010000 + .hibytes %010001 + .hibytes %010010 + .hibytes %010011 + .hibytes %01110000 + .hibytes %01110001 + .hibytes %01110010 + .hibytes %01110011 + .hibytes %01110100 + .hibytes %01110101 + .hibytes %01110110 + .hibytes %01110111 + .hibytes %01111000 + .hibytes %01111001 + .hibytes %01111010 + .hibytes %01111011 + .hibytes %01111100 + .hibytes %01111101 + .hibytes %01111110 + .hibytes %01111111 + .hibytes %010000000 + .hibytes %010000001 + .hibytes %010000010 + .hibytes %010000011 + .hibytes %010000100 + .hibytes %010000101 + .hibytes %010000110 + .hibytes %011110000 + .hibytes %011110001 + .hibytes %011110010 + .hibytes %011110011 + .hibytes %011110100 + .hibytes %011110101 + .hibytes %011110110 + .hibytes %011110111 + .hibytes %011111000 + .hibytes %011111001 + .hibytes %011111010 + .hibytes %011111011 + .hibytes %011111100 + .hibytes %011111101 + .hibytes %011111110 + .hibytes %011111111 + .hibytes %100000000 + .hibytes %100000001 + .hibytes %100000010 + .hibytes %100000011 + .hibytes %111111010010 + .hibytes %111111010011 + .hibytes %111111010100 + .hibytes %111111010101 + .hibytes %111111010110 + .hibytes %111111010111 + .hibytes %111111011000 + .hibytes %111111011001 + .hibytes %111111011010 + .hibytes %111111011011 + .hibytes %111111011100 + .hibytes %111111011101 + .hibytes %111111011110 + .hibytes %111111011111 + .hibytes %111111100000 + .hibytes %111111100001 + .hibytes %111111100010 + .hibytes %111111100011 + .hibytes %111111100100 + .hibytes %111111100101 + .hibytes %111111100110 + .hibytes %111111100111 + .hibytes %111111101000 + .hibytes %111111101001 + .hibytes %111111101010 + .hibytes %111111101011 + .hibytes %111111101100 + .hibytes %111111101101 + .hibytes %111111101110 + .hibytes %111111101111 + .hibytes %111111110000 + .hibytes %111111110001 + .hibytes %111111110010 + .hibytes %111111110011 + .hibytes %111111110100 + .hibytes %111111110101 + .hibytes %111111110110 + .hibytes %111111110111 + .hibytes %111111111000 + .hibytes %111111111001 + .hibytes %111111111010 + .hibytes %111111111011 + .hibytes %111111111100 + .hibytes %111111111101 + .hibytes %111111111110 + .hibytes %111111111111 + .hibytes %1000000000000 + .hibytes %1000000000001 + .hibytes %1000000000010 + .hibytes %1000000000011 + .hibytes %1000000000100 + .hibytes %1000000000101 + .hibytes %1000000000110 + .hibytes %1000000000111 + .hibytes %1000000001000 + .hibytes %111111111110000 + .hibytes %111111111110001 + .hibytes %111111111110010 + .hibytes %111111111110011 + .hibytes %111111111110100 + .hibytes %111111111110101 + .hibytes %111111111110110 + .hibytes %111111111110111 + .hibytes %111111111111000 + .hibytes %111111111111001 + .hibytes %111111111111010 + .hibytes %111111111111011 + .hibytes %111111111111100 + .hibytes %111111111111101 + .hibytes %111111111111110 + .hibytes %111111111111111 + .hibytes %1000000000000000 + .hibytes %1000000000000001 + .hibytes %1000000000000010 + .hibytes %1000000000000011 + .hibytes %1000000000000100 + .hibytes %1000000000000101 + .hibytes %1000000000000110 + .hibytes %1000000000000111 + .hibytes %1000000000001000 + .hibytes %1000000000001001 + .hibytes %1000000000001010 + .hibytes %1000000000001011 + .hibytes %1001111111100001 + .hibytes %1001111111100010 + .hibytes %1001111111100011 + .hibytes %1001111111100100 + .hibytes %1001111111100101 + .hibytes %1001111111100110 + .hibytes %1001111111100111 + .hibytes %1001111111101000 + .hibytes %1001111111101001 + .hibytes %1001111111101010 + .hibytes %1001111111101011 + .hibytes %1001111111101100 + .hibytes %1001111111101101 + .hibytes %1001111111101110 + .hibytes %1001111111101111 + .hibytes %1001111111110000 + .hibytes %1001111111110001 + .hibytes %1001111111110010 + .hibytes %1001111111110011 + .hibytes %1001111111110100 + .hibytes %1001111111110101 + .hibytes %1001111111110110 + .hibytes %1001111111110111 + .hibytes %1001111111111000 + .hibytes %1001111111111001 + .hibytes %1001111111111010 + .hibytes %1001111111111011 + .hibytes %1001111111111100 + .hibytes %1001111111111101 + .hibytes %1001111111111110 + .hibytes %1001111111111111 + .hibytes %1010000000000000 + .hibytes %1010000000000001 + .hibytes %1010000000000010 + .hibytes %1010000000000011 + .hibytes %1010000000000100 + .hibytes %1010000000000101 + .hibytes %1010000000000110 + .hibytes %1010000000000111 + .hibytes %1010000000001000 + .hibytes %1010000000001001 + .hibytes %1010000000001010 + .hibytes %1010000000001011 + .hibytes %1010000000001100 + .hibytes %1010000000001101 + .hibytes %1010000000001110 + .hibytes %1010000000001111 + .hibytes %1010111111100001 + .hibytes %1010111111100010 + .hibytes %1010111111100011 + .hibytes %1010111111100100 + .hibytes %1010111111100101 + .hibytes %1010111111100110 + .hibytes %1010111111100111 + .hibytes %1010111111101000 + .hibytes %1010111111101001 + .hibytes %1010111111101010 + .hibytes %1010111111101011 + .hibytes %1010111111101100 + .hibytes %1010111111101101 + .hibytes %1010111111101110 + .hibytes %1010111111101111 + .hibytes %1010111111110000 + .hibytes %1010111111110001 + .hibytes %1010111111110010 + .hibytes %1010111111110011 + .hibytes %1010111111110100 + .hibytes %1010111111110101 + .hibytes %1010111111110110 + .hibytes %1010111111110111 + .hibytes %1010111111111000 + .hibytes %1010111111111001 + .hibytes %1010111111111010 + .hibytes %1010111111111011 + .hibytes %1010111111111100 + .hibytes %1010111111111101 + .hibytes %1010111111111110 + .hibytes %1010111111111111 + .hibytes %1011000000000000 + .hibytes %1011000000000001 + .hibytes %1011000000000010 + .hibytes %1011000000000011 + .hibytes %1011000000000100 + .hibytes %1011000000000101 + .hibytes %1011000000000110 + .hibytes %1011000000000111 + .hibytes %1011000000001000 + .hibytes %1011000000001001 + .hibytes %1011000000001010 + .hibytes %1011000000001011 + .hibytes %1011000000001100 + .hibytes %1011000000001101 + .hibytes %1011000000001110 + .hibytes %1011000000001111 + .hibytes %1011111111100001 + .hibytes %1011111111100010 + .hibytes %1011111111100011 + .hibytes %1011111111100100 + .hibytes %1011111111100101 + .hibytes %1011111111100110 + .hibytes %1011111111100111 + .hibytes %1011111111101000 + .hibytes %1011111111101001 + .hibytes %1011111111101010 + .hibytes %1011111111101011 + .hibytes %1011111111101100 + .hibytes %1011111111101101 + .hibytes %1011111111101110 + .hibytes %1011111111101111 + .hibytes %1011111111110000 + .hibytes %1011111111110001 + .hibytes %1011111111110010 + .hibytes %1011111111110011 + .hibytes %1011111111110100 + .hibytes %1011111111110101 + .hibytes %1011111111110110 + .hibytes %1011111111110111 + .hibytes %1011111111111000 + .hibytes %1011111111111001 + .hibytes %1011111111111010 + .hibytes %1011111111111011 + .hibytes %1011111111111100 + .hibytes %1011111111111101 + .hibytes %1011111111111110 + .hibytes %1011111111111111 + .hibytes %1100000000000000 + .hibytes %1100000000000001 + .hibytes %1100000000000010 + .hibytes %1100000000000011 + .hibytes %1100000000000100 + .hibytes %1100000000000101 + .hibytes %1100000000000110 + .hibytes %1100000000000111 + .hibytes %1100000000001000 + .hibytes %1100000000001001 + .hibytes %1100000000001010 + .hibytes %1100000000001011 + .hibytes %1100000000001100 + .hibytes %1100000000001101 + .hibytes %1100000000001110 + .hibytes %1100000000001111 + .hibytes %1100111111100001 + .hibytes %1100111111100010 + .hibytes %1100111111100011 + .hibytes %1100111111100100 + .hibytes %1100111111100101 + .hibytes %1100111111100110 + .hibytes %1100111111100111 + .hibytes %1100111111101000 + .hibytes %1100111111101001 + .hibytes %1100111111101010 + .hibytes %1100111111101011 + .hibytes %1100111111101100 + .hibytes %1100111111101101 + .hibytes %1100111111101110 + .hibytes %1100111111101111 + .hibytes %1100111111110000 + .hibytes %1100111111110001 + .hibytes %1100111111110010 + .hibytes %1100111111110011 + .hibytes %1100111111110100 + .hibytes %1100111111110101 + .hibytes %1100111111110110 + .hibytes %1100111111110111 + .hibytes %1100111111111000 + .hibytes %1100111111111001 + .hibytes %1100111111111010 + .hibytes %1100111111111011 + .hibytes %1100111111111100 + .hibytes %1100111111111101 + .hibytes %1100111111111110 + .hibytes %1100111111111111 + .hibytes %1101000000000000 + .hibytes %1101000000000001 + .hibytes %1101000000000010 + .hibytes %1101000000000011 + .hibytes %1101000000000100 + .hibytes %1101000000000101 + .hibytes %1101000000000110 + .hibytes %1101000000000111 + .hibytes %1101000000001000 + .hibytes %1101000000001001 + .hibytes %1101000000001010 + .hibytes %1101000000001011 + .hibytes %1101000000001100 + .hibytes %1101000000001101 + .hibytes %1101000000001110 + .hibytes %1101000000001111 + .hibytes %1101111111100001 + .hibytes %1101111111100010 + .hibytes %1101111111100011 + .hibytes %1101111111100100 + .hibytes %1101111111100101 + .hibytes %1101111111100110 + .hibytes %1101111111100111 + .hibytes %1101111111101000 + .hibytes %1101111111101001 + .hibytes %1101111111101010 + .hibytes %1101111111101011 + .hibytes %1101111111101100 + .hibytes %1101111111101101 + .hibytes %1101111111101110 + .hibytes %1101111111101111 + .hibytes %1101111111110000 + .hibytes %1101111111110001 + .hibytes %1101111111110010 + .hibytes %1101111111110011 + .hibytes %1101111111110100 + .hibytes %1101111111110101 + .hibytes %1101111111110110 + .hibytes %1101111111110111 + .hibytes %1101111111111000 + .hibytes %1101111111111001 + .hibytes %1101111111111010 + .hibytes %1101111111111011 + .hibytes %1101111111111100 + .hibytes %1101111111111101 + .hibytes %1101111111111110 + .hibytes %1101111111111111 + .hibytes %1110000000000000 + .hibytes %1110000000000001 + .hibytes %1110000000000010 + .hibytes %1110000000000011 + .hibytes %1110000000000100 + .hibytes %1110000000000101 + .hibytes %1110000000000110 + .hibytes %1110000000000111 + .hibytes %1110000000001000 + .hibytes %1110000000001001 + .hibytes %1110000000001010 + .hibytes %1110000000001011 + .hibytes %1110000000001100 + .hibytes %1110000000001101 + .hibytes %1110000000001110 + .hibytes %1110000000001111 + .hibytes %1110111111100001 + .hibytes %1110111111100010 + .hibytes %1110111111100011 + .hibytes %1110111111100100 + .hibytes %1110111111100101 + .hibytes %1110111111100110 + .hibytes %1110111111100111 + .hibytes %1110111111101000 + .hibytes %1110111111101001 + .hibytes %1110111111101010 + .hibytes %1110111111101011 + .hibytes %1110111111101100 + .hibytes %1110111111101101 + .hibytes %1110111111101110 + .hibytes %1110111111101111 + .hibytes %1110111111110000 + .hibytes %1110111111110001 + .hibytes %1110111111110010 + .hibytes %1110111111110011 + .hibytes %1110111111110100 + .hibytes %1110111111110101 + .hibytes %1110111111110110 + .hibytes %1110111111110111 + .hibytes %1110111111111000 + .hibytes %1110111111111001 + .hibytes %1110111111111010 + .hibytes %1110111111111011 + .hibytes %1110111111111100 + .hibytes %1110111111111101 + .hibytes %1110111111111110 + .hibytes %1110111111111111 + .hibytes %1111000000000000 + .hibytes %1111000000000001 + .hibytes %1111000000000010 + .hibytes %1111000000000011 + .hibytes %1111000000000100 + .hibytes %1111000000000101 + .hibytes %1111000000000110 + .hibytes %1111000000000111 + .hibytes %1111000000001000 + .hibytes %1111000000001001 + .hibytes %1111000000001010 + .hibytes %1111000000001011 + .hibytes %1111000000001100 + .hibytes %1111000000001101 + .hibytes %1111000000001110 + .hibytes %1111000000001111 + .hibytes %1111111111100001 + .hibytes %1111111111100010 + .hibytes %1111111111100011 + .hibytes %1111111111100100 + .hibytes %1111111111100101 + .hibytes %1111111111100110 + .hibytes %1111111111100111 + .hibytes %1111111111101000 + .hibytes %1111111111101001 + .hibytes %1111111111101010 + .hibytes %1111111111101011 + .hibytes %1111111111101100 + .hibytes %1111111111101101 + .hibytes %1111111111101110 + .hibytes %1111111111101111 + .hibytes %1111111111110000 + .hibytes %1111111111110001 + .hibytes %1111111111110010 + .hibytes %1111111111110011 + .hibytes %1111111111110100 + .hibytes %1111111111110101 + .hibytes %1111111111110110 + .hibytes %1111111111110111 + .hibytes %1111111111111000 + .hibytes %1111111111111001 + .hibytes %1111111111111010 + .hibytes %1111111111111011 + .hibytes %1111111111111100 + .hibytes %1111111111111101 + .hibytes %1111111111111110 + .hibytes %1111111111111111 - ; binary values, full length - .hibytes %0000000000000000 - .hibytes %0000000000000001 - .hibytes %0000000000000010 - .hibytes %0000000000000011 - .hibytes %0000000000000100 - .hibytes %0000000000000101 - .hibytes %0000000000000110 - .hibytes %0000000000000111 - .hibytes %0000000000001000 - .hibytes %0000000000001001 - .hibytes %0000000000001010 - .hibytes %0000000000001011 - .hibytes %0000000000001100 - .hibytes %0000000000001101 - .hibytes %0000000000001110 - .hibytes %0000000000001111 - .hibytes %0000000000010000 - .hibytes %0000000000010001 - .hibytes %0000000000010010 - .hibytes %0000000000010011 - .hibytes %0000000001110000 - .hibytes %0000000001110001 - .hibytes %0000000001110010 - .hibytes %0000000001110011 - .hibytes %0000000001110100 - .hibytes %0000000001110101 - .hibytes %0000000001110110 - .hibytes %0000000001110111 - .hibytes %0000000001111000 - .hibytes %0000000001111001 - .hibytes %0000000001111010 - .hibytes %0000000001111011 - .hibytes %0000000001111100 - .hibytes %0000000001111101 - .hibytes %0000000001111110 - .hibytes %0000000001111111 - .hibytes %0000000010000000 - .hibytes %0000000010000001 - .hibytes %0000000010000010 - .hibytes %0000000010000011 - .hibytes %0000000010000100 - .hibytes %0000000010000101 - .hibytes %0000000010000110 - .hibytes %0000000011110000 - .hibytes %0000000011110001 - .hibytes %0000000011110010 - .hibytes %0000000011110011 - .hibytes %0000000011110100 - .hibytes %0000000011110101 - .hibytes %0000000011110110 - .hibytes %0000000011110111 - .hibytes %0000000011111000 - .hibytes %0000000011111001 - .hibytes %0000000011111010 - .hibytes %0000000011111011 - .hibytes %0000000011111100 - .hibytes %0000000011111101 - .hibytes %0000000011111110 - .hibytes %0000000011111111 - .hibytes %0000000100000000 - .hibytes %0000000100000001 - .hibytes %0000000100000010 - .hibytes %0000000100000011 - .hibytes %0000111111010010 - .hibytes %0000111111010011 - .hibytes %0000111111010100 - .hibytes %0000111111010101 - .hibytes %0000111111010110 - .hibytes %0000111111010111 - .hibytes %0000111111011000 - .hibytes %0000111111011001 - .hibytes %0000111111011010 - .hibytes %0000111111011011 - .hibytes %0000111111011100 - .hibytes %0000111111011101 - .hibytes %0000111111011110 - .hibytes %0000111111011111 - .hibytes %0000111111100000 - .hibytes %0000111111100001 - .hibytes %0000111111100010 - .hibytes %0000111111100011 - .hibytes %0000111111100100 - .hibytes %0000111111100101 - .hibytes %0000111111100110 - .hibytes %0000111111100111 - .hibytes %0000111111101000 - .hibytes %0000111111101001 - .hibytes %0000111111101010 - .hibytes %0000111111101011 - .hibytes %0000111111101100 - .hibytes %0000111111101101 - .hibytes %0000111111101110 - .hibytes %0000111111101111 - .hibytes %0000111111110000 - .hibytes %0000111111110001 - .hibytes %0000111111110010 - .hibytes %0000111111110011 - .hibytes %0000111111110100 - .hibytes %0000111111110101 - .hibytes %0000111111110110 - .hibytes %0000111111110111 - .hibytes %0000111111111000 - .hibytes %0000111111111001 - .hibytes %0000111111111010 - .hibytes %0000111111111011 - .hibytes %0000111111111100 - .hibytes %0000111111111101 - .hibytes %0000111111111110 - .hibytes %0000111111111111 - .hibytes %0001000000000000 - .hibytes %0001000000000001 - .hibytes %0001000000000010 - .hibytes %0001000000000011 - .hibytes %0001000000000100 - .hibytes %0001000000000101 - .hibytes %0001000000000110 - .hibytes %0001000000000111 - .hibytes %0001000000001000 - .hibytes %0111111111110000 - .hibytes %0111111111110001 - .hibytes %0111111111110010 - .hibytes %0111111111110011 - .hibytes %0111111111110100 - .hibytes %0111111111110101 - .hibytes %0111111111110110 - .hibytes %0111111111110111 - .hibytes %0111111111111000 - .hibytes %0111111111111001 - .hibytes %0111111111111010 - .hibytes %0111111111111011 - .hibytes %0111111111111100 - .hibytes %0111111111111101 - .hibytes %0111111111111110 - .hibytes %0111111111111111 - .hibytes %1000000000000000 - .hibytes %1000000000000001 - .hibytes %1000000000000010 - .hibytes %1000000000000011 - .hibytes %1000000000000100 - .hibytes %1000000000000101 - .hibytes %1000000000000110 - .hibytes %1000000000000111 - .hibytes %1000000000001000 - .hibytes %1000000000001001 - .hibytes %1000000000001010 - .hibytes %1000000000001011 - .hibytes %1001111111100001 - .hibytes %1001111111100010 - .hibytes %1001111111100011 - .hibytes %1001111111100100 - .hibytes %1001111111100101 - .hibytes %1001111111100110 - .hibytes %1001111111100111 - .hibytes %1001111111101000 - .hibytes %1001111111101001 - .hibytes %1001111111101010 - .hibytes %1001111111101011 - .hibytes %1001111111101100 - .hibytes %1001111111101101 - .hibytes %1001111111101110 - .hibytes %1001111111101111 - .hibytes %1001111111110000 - .hibytes %1001111111110001 - .hibytes %1001111111110010 - .hibytes %1001111111110011 - .hibytes %1001111111110100 - .hibytes %1001111111110101 - .hibytes %1001111111110110 - .hibytes %1001111111110111 - .hibytes %1001111111111000 - .hibytes %1001111111111001 - .hibytes %1001111111111010 - .hibytes %1001111111111011 - .hibytes %1001111111111100 - .hibytes %1001111111111101 - .hibytes %1001111111111110 - .hibytes %1001111111111111 - .hibytes %1010000000000000 - .hibytes %1010000000000001 - .hibytes %1010000000000010 - .hibytes %1010000000000011 - .hibytes %1010000000000100 - .hibytes %1010000000000101 - .hibytes %1010000000000110 - .hibytes %1010000000000111 - .hibytes %1010000000001000 - .hibytes %1010000000001001 - .hibytes %1010000000001010 - .hibytes %1010000000001011 - .hibytes %1010000000001100 - .hibytes %1010000000001101 - .hibytes %1010000000001110 - .hibytes %1010000000001111 - .hibytes %1010111111100001 - .hibytes %1010111111100010 - .hibytes %1010111111100011 - .hibytes %1010111111100100 - .hibytes %1010111111100101 - .hibytes %1010111111100110 - .hibytes %1010111111100111 - .hibytes %1010111111101000 - .hibytes %1010111111101001 - .hibytes %1010111111101010 - .hibytes %1010111111101011 - .hibytes %1010111111101100 - .hibytes %1010111111101101 - .hibytes %1010111111101110 - .hibytes %1010111111101111 - .hibytes %1010111111110000 - .hibytes %1010111111110001 - .hibytes %1010111111110010 - .hibytes %1010111111110011 - .hibytes %1010111111110100 - .hibytes %1010111111110101 - .hibytes %1010111111110110 - .hibytes %1010111111110111 - .hibytes %1010111111111000 - .hibytes %1010111111111001 - .hibytes %1010111111111010 - .hibytes %1010111111111011 - .hibytes %1010111111111100 - .hibytes %1010111111111101 - .hibytes %1010111111111110 - .hibytes %1010111111111111 - .hibytes %1011000000000000 - .hibytes %1011000000000001 - .hibytes %1011000000000010 - .hibytes %1011000000000011 - .hibytes %1011000000000100 - .hibytes %1011000000000101 - .hibytes %1011000000000110 - .hibytes %1011000000000111 - .hibytes %1011000000001000 - .hibytes %1011000000001001 - .hibytes %1011000000001010 - .hibytes %1011000000001011 - .hibytes %1011000000001100 - .hibytes %1011000000001101 - .hibytes %1011000000001110 - .hibytes %1011000000001111 - .hibytes %1011111111100001 - .hibytes %1011111111100010 - .hibytes %1011111111100011 - .hibytes %1011111111100100 - .hibytes %1011111111100101 - .hibytes %1011111111100110 - .hibytes %1011111111100111 - .hibytes %1011111111101000 - .hibytes %1011111111101001 - .hibytes %1011111111101010 - .hibytes %1011111111101011 - .hibytes %1011111111101100 - .hibytes %1011111111101101 - .hibytes %1011111111101110 - .hibytes %1011111111101111 - .hibytes %1011111111110000 - .hibytes %1011111111110001 - .hibytes %1011111111110010 - .hibytes %1011111111110011 - .hibytes %1011111111110100 - .hibytes %1011111111110101 - .hibytes %1011111111110110 - .hibytes %1011111111110111 - .hibytes %1011111111111000 - .hibytes %1011111111111001 - .hibytes %1011111111111010 - .hibytes %1011111111111011 - .hibytes %1011111111111100 - .hibytes %1011111111111101 - .hibytes %1011111111111110 - .hibytes %1011111111111111 - .hibytes %1100000000000000 - .hibytes %1100000000000001 - .hibytes %1100000000000010 - .hibytes %1100000000000011 - .hibytes %1100000000000100 - .hibytes %1100000000000101 - .hibytes %1100000000000110 - .hibytes %1100000000000111 - .hibytes %1100000000001000 - .hibytes %1100000000001001 - .hibytes %1100000000001010 - .hibytes %1100000000001011 - .hibytes %1100000000001100 - .hibytes %1100000000001101 - .hibytes %1100000000001110 - .hibytes %1100000000001111 - .hibytes %1100111111100001 - .hibytes %1100111111100010 - .hibytes %1100111111100011 - .hibytes %1100111111100100 - .hibytes %1100111111100101 - .hibytes %1100111111100110 - .hibytes %1100111111100111 - .hibytes %1100111111101000 - .hibytes %1100111111101001 - .hibytes %1100111111101010 - .hibytes %1100111111101011 - .hibytes %1100111111101100 - .hibytes %1100111111101101 - .hibytes %1100111111101110 - .hibytes %1100111111101111 - .hibytes %1100111111110000 - .hibytes %1100111111110001 - .hibytes %1100111111110010 - .hibytes %1100111111110011 - .hibytes %1100111111110100 - .hibytes %1100111111110101 - .hibytes %1100111111110110 - .hibytes %1100111111110111 - .hibytes %1100111111111000 - .hibytes %1100111111111001 - .hibytes %1100111111111010 - .hibytes %1100111111111011 - .hibytes %1100111111111100 - .hibytes %1100111111111101 - .hibytes %1100111111111110 - .hibytes %1100111111111111 - .hibytes %1101000000000000 - .hibytes %1101000000000001 - .hibytes %1101000000000010 - .hibytes %1101000000000011 - .hibytes %1101000000000100 - .hibytes %1101000000000101 - .hibytes %1101000000000110 - .hibytes %1101000000000111 - .hibytes %1101000000001000 - .hibytes %1101000000001001 - .hibytes %1101000000001010 - .hibytes %1101000000001011 - .hibytes %1101000000001100 - .hibytes %1101000000001101 - .hibytes %1101000000001110 - .hibytes %1101000000001111 - .hibytes %1101111111100001 - .hibytes %1101111111100010 - .hibytes %1101111111100011 - .hibytes %1101111111100100 - .hibytes %1101111111100101 - .hibytes %1101111111100110 - .hibytes %1101111111100111 - .hibytes %1101111111101000 - .hibytes %1101111111101001 - .hibytes %1101111111101010 - .hibytes %1101111111101011 - .hibytes %1101111111101100 - .hibytes %1101111111101101 - .hibytes %1101111111101110 - .hibytes %1101111111101111 - .hibytes %1101111111110000 - .hibytes %1101111111110001 - .hibytes %1101111111110010 - .hibytes %1101111111110011 - .hibytes %1101111111110100 - .hibytes %1101111111110101 - .hibytes %1101111111110110 - .hibytes %1101111111110111 - .hibytes %1101111111111000 - .hibytes %1101111111111001 - .hibytes %1101111111111010 - .hibytes %1101111111111011 - .hibytes %1101111111111100 - .hibytes %1101111111111101 - .hibytes %1101111111111110 - .hibytes %1101111111111111 - .hibytes %1110000000000000 - .hibytes %1110000000000001 - .hibytes %1110000000000010 - .hibytes %1110000000000011 - .hibytes %1110000000000100 - .hibytes %1110000000000101 - .hibytes %1110000000000110 - .hibytes %1110000000000111 - .hibytes %1110000000001000 - .hibytes %1110000000001001 - .hibytes %1110000000001010 - .hibytes %1110000000001011 - .hibytes %1110000000001100 - .hibytes %1110000000001101 - .hibytes %1110000000001110 - .hibytes %1110000000001111 - .hibytes %1110111111100001 - .hibytes %1110111111100010 - .hibytes %1110111111100011 - .hibytes %1110111111100100 - .hibytes %1110111111100101 - .hibytes %1110111111100110 - .hibytes %1110111111100111 - .hibytes %1110111111101000 - .hibytes %1110111111101001 - .hibytes %1110111111101010 - .hibytes %1110111111101011 - .hibytes %1110111111101100 - .hibytes %1110111111101101 - .hibytes %1110111111101110 - .hibytes %1110111111101111 - .hibytes %1110111111110000 - .hibytes %1110111111110001 - .hibytes %1110111111110010 - .hibytes %1110111111110011 - .hibytes %1110111111110100 - .hibytes %1110111111110101 - .hibytes %1110111111110110 - .hibytes %1110111111110111 - .hibytes %1110111111111000 - .hibytes %1110111111111001 - .hibytes %1110111111111010 - .hibytes %1110111111111011 - .hibytes %1110111111111100 - .hibytes %1110111111111101 - .hibytes %1110111111111110 - .hibytes %1110111111111111 - .hibytes %1111000000000000 - .hibytes %1111000000000001 - .hibytes %1111000000000010 - .hibytes %1111000000000011 - .hibytes %1111000000000100 - .hibytes %1111000000000101 - .hibytes %1111000000000110 - .hibytes %1111000000000111 - .hibytes %1111000000001000 - .hibytes %1111000000001001 - .hibytes %1111000000001010 - .hibytes %1111000000001011 - .hibytes %1111000000001100 - .hibytes %1111000000001101 - .hibytes %1111000000001110 - .hibytes %1111000000001111 - .hibytes %1111111111100001 - .hibytes %1111111111100010 - .hibytes %1111111111100011 - .hibytes %1111111111100100 - .hibytes %1111111111100101 - .hibytes %1111111111100110 - .hibytes %1111111111100111 - .hibytes %1111111111101000 - .hibytes %1111111111101001 - .hibytes %1111111111101010 - .hibytes %1111111111101011 - .hibytes %1111111111101100 - .hibytes %1111111111101101 - .hibytes %1111111111101110 - .hibytes %1111111111101111 - .hibytes %1111111111110000 - .hibytes %1111111111110001 - .hibytes %1111111111110010 - .hibytes %1111111111110011 - .hibytes %1111111111110100 - .hibytes %1111111111110101 - .hibytes %1111111111110110 - .hibytes %1111111111110111 - .hibytes %1111111111111000 - .hibytes %1111111111111001 - .hibytes %1111111111111010 - .hibytes %1111111111111011 - .hibytes %1111111111111100 - .hibytes %1111111111111101 - .hibytes %1111111111111110 - .hibytes %1111111111111111 + ; binary values, full length + .hibytes %0000000000000000 + .hibytes %0000000000000001 + .hibytes %0000000000000010 + .hibytes %0000000000000011 + .hibytes %0000000000000100 + .hibytes %0000000000000101 + .hibytes %0000000000000110 + .hibytes %0000000000000111 + .hibytes %0000000000001000 + .hibytes %0000000000001001 + .hibytes %0000000000001010 + .hibytes %0000000000001011 + .hibytes %0000000000001100 + .hibytes %0000000000001101 + .hibytes %0000000000001110 + .hibytes %0000000000001111 + .hibytes %0000000000010000 + .hibytes %0000000000010001 + .hibytes %0000000000010010 + .hibytes %0000000000010011 + .hibytes %0000000001110000 + .hibytes %0000000001110001 + .hibytes %0000000001110010 + .hibytes %0000000001110011 + .hibytes %0000000001110100 + .hibytes %0000000001110101 + .hibytes %0000000001110110 + .hibytes %0000000001110111 + .hibytes %0000000001111000 + .hibytes %0000000001111001 + .hibytes %0000000001111010 + .hibytes %0000000001111011 + .hibytes %0000000001111100 + .hibytes %0000000001111101 + .hibytes %0000000001111110 + .hibytes %0000000001111111 + .hibytes %0000000010000000 + .hibytes %0000000010000001 + .hibytes %0000000010000010 + .hibytes %0000000010000011 + .hibytes %0000000010000100 + .hibytes %0000000010000101 + .hibytes %0000000010000110 + .hibytes %0000000011110000 + .hibytes %0000000011110001 + .hibytes %0000000011110010 + .hibytes %0000000011110011 + .hibytes %0000000011110100 + .hibytes %0000000011110101 + .hibytes %0000000011110110 + .hibytes %0000000011110111 + .hibytes %0000000011111000 + .hibytes %0000000011111001 + .hibytes %0000000011111010 + .hibytes %0000000011111011 + .hibytes %0000000011111100 + .hibytes %0000000011111101 + .hibytes %0000000011111110 + .hibytes %0000000011111111 + .hibytes %0000000100000000 + .hibytes %0000000100000001 + .hibytes %0000000100000010 + .hibytes %0000000100000011 + .hibytes %0000111111010010 + .hibytes %0000111111010011 + .hibytes %0000111111010100 + .hibytes %0000111111010101 + .hibytes %0000111111010110 + .hibytes %0000111111010111 + .hibytes %0000111111011000 + .hibytes %0000111111011001 + .hibytes %0000111111011010 + .hibytes %0000111111011011 + .hibytes %0000111111011100 + .hibytes %0000111111011101 + .hibytes %0000111111011110 + .hibytes %0000111111011111 + .hibytes %0000111111100000 + .hibytes %0000111111100001 + .hibytes %0000111111100010 + .hibytes %0000111111100011 + .hibytes %0000111111100100 + .hibytes %0000111111100101 + .hibytes %0000111111100110 + .hibytes %0000111111100111 + .hibytes %0000111111101000 + .hibytes %0000111111101001 + .hibytes %0000111111101010 + .hibytes %0000111111101011 + .hibytes %0000111111101100 + .hibytes %0000111111101101 + .hibytes %0000111111101110 + .hibytes %0000111111101111 + .hibytes %0000111111110000 + .hibytes %0000111111110001 + .hibytes %0000111111110010 + .hibytes %0000111111110011 + .hibytes %0000111111110100 + .hibytes %0000111111110101 + .hibytes %0000111111110110 + .hibytes %0000111111110111 + .hibytes %0000111111111000 + .hibytes %0000111111111001 + .hibytes %0000111111111010 + .hibytes %0000111111111011 + .hibytes %0000111111111100 + .hibytes %0000111111111101 + .hibytes %0000111111111110 + .hibytes %0000111111111111 + .hibytes %0001000000000000 + .hibytes %0001000000000001 + .hibytes %0001000000000010 + .hibytes %0001000000000011 + .hibytes %0001000000000100 + .hibytes %0001000000000101 + .hibytes %0001000000000110 + .hibytes %0001000000000111 + .hibytes %0001000000001000 + .hibytes %0111111111110000 + .hibytes %0111111111110001 + .hibytes %0111111111110010 + .hibytes %0111111111110011 + .hibytes %0111111111110100 + .hibytes %0111111111110101 + .hibytes %0111111111110110 + .hibytes %0111111111110111 + .hibytes %0111111111111000 + .hibytes %0111111111111001 + .hibytes %0111111111111010 + .hibytes %0111111111111011 + .hibytes %0111111111111100 + .hibytes %0111111111111101 + .hibytes %0111111111111110 + .hibytes %0111111111111111 + .hibytes %1000000000000000 + .hibytes %1000000000000001 + .hibytes %1000000000000010 + .hibytes %1000000000000011 + .hibytes %1000000000000100 + .hibytes %1000000000000101 + .hibytes %1000000000000110 + .hibytes %1000000000000111 + .hibytes %1000000000001000 + .hibytes %1000000000001001 + .hibytes %1000000000001010 + .hibytes %1000000000001011 + .hibytes %1001111111100001 + .hibytes %1001111111100010 + .hibytes %1001111111100011 + .hibytes %1001111111100100 + .hibytes %1001111111100101 + .hibytes %1001111111100110 + .hibytes %1001111111100111 + .hibytes %1001111111101000 + .hibytes %1001111111101001 + .hibytes %1001111111101010 + .hibytes %1001111111101011 + .hibytes %1001111111101100 + .hibytes %1001111111101101 + .hibytes %1001111111101110 + .hibytes %1001111111101111 + .hibytes %1001111111110000 + .hibytes %1001111111110001 + .hibytes %1001111111110010 + .hibytes %1001111111110011 + .hibytes %1001111111110100 + .hibytes %1001111111110101 + .hibytes %1001111111110110 + .hibytes %1001111111110111 + .hibytes %1001111111111000 + .hibytes %1001111111111001 + .hibytes %1001111111111010 + .hibytes %1001111111111011 + .hibytes %1001111111111100 + .hibytes %1001111111111101 + .hibytes %1001111111111110 + .hibytes %1001111111111111 + .hibytes %1010000000000000 + .hibytes %1010000000000001 + .hibytes %1010000000000010 + .hibytes %1010000000000011 + .hibytes %1010000000000100 + .hibytes %1010000000000101 + .hibytes %1010000000000110 + .hibytes %1010000000000111 + .hibytes %1010000000001000 + .hibytes %1010000000001001 + .hibytes %1010000000001010 + .hibytes %1010000000001011 + .hibytes %1010000000001100 + .hibytes %1010000000001101 + .hibytes %1010000000001110 + .hibytes %1010000000001111 + .hibytes %1010111111100001 + .hibytes %1010111111100010 + .hibytes %1010111111100011 + .hibytes %1010111111100100 + .hibytes %1010111111100101 + .hibytes %1010111111100110 + .hibytes %1010111111100111 + .hibytes %1010111111101000 + .hibytes %1010111111101001 + .hibytes %1010111111101010 + .hibytes %1010111111101011 + .hibytes %1010111111101100 + .hibytes %1010111111101101 + .hibytes %1010111111101110 + .hibytes %1010111111101111 + .hibytes %1010111111110000 + .hibytes %1010111111110001 + .hibytes %1010111111110010 + .hibytes %1010111111110011 + .hibytes %1010111111110100 + .hibytes %1010111111110101 + .hibytes %1010111111110110 + .hibytes %1010111111110111 + .hibytes %1010111111111000 + .hibytes %1010111111111001 + .hibytes %1010111111111010 + .hibytes %1010111111111011 + .hibytes %1010111111111100 + .hibytes %1010111111111101 + .hibytes %1010111111111110 + .hibytes %1010111111111111 + .hibytes %1011000000000000 + .hibytes %1011000000000001 + .hibytes %1011000000000010 + .hibytes %1011000000000011 + .hibytes %1011000000000100 + .hibytes %1011000000000101 + .hibytes %1011000000000110 + .hibytes %1011000000000111 + .hibytes %1011000000001000 + .hibytes %1011000000001001 + .hibytes %1011000000001010 + .hibytes %1011000000001011 + .hibytes %1011000000001100 + .hibytes %1011000000001101 + .hibytes %1011000000001110 + .hibytes %1011000000001111 + .hibytes %1011111111100001 + .hibytes %1011111111100010 + .hibytes %1011111111100011 + .hibytes %1011111111100100 + .hibytes %1011111111100101 + .hibytes %1011111111100110 + .hibytes %1011111111100111 + .hibytes %1011111111101000 + .hibytes %1011111111101001 + .hibytes %1011111111101010 + .hibytes %1011111111101011 + .hibytes %1011111111101100 + .hibytes %1011111111101101 + .hibytes %1011111111101110 + .hibytes %1011111111101111 + .hibytes %1011111111110000 + .hibytes %1011111111110001 + .hibytes %1011111111110010 + .hibytes %1011111111110011 + .hibytes %1011111111110100 + .hibytes %1011111111110101 + .hibytes %1011111111110110 + .hibytes %1011111111110111 + .hibytes %1011111111111000 + .hibytes %1011111111111001 + .hibytes %1011111111111010 + .hibytes %1011111111111011 + .hibytes %1011111111111100 + .hibytes %1011111111111101 + .hibytes %1011111111111110 + .hibytes %1011111111111111 + .hibytes %1100000000000000 + .hibytes %1100000000000001 + .hibytes %1100000000000010 + .hibytes %1100000000000011 + .hibytes %1100000000000100 + .hibytes %1100000000000101 + .hibytes %1100000000000110 + .hibytes %1100000000000111 + .hibytes %1100000000001000 + .hibytes %1100000000001001 + .hibytes %1100000000001010 + .hibytes %1100000000001011 + .hibytes %1100000000001100 + .hibytes %1100000000001101 + .hibytes %1100000000001110 + .hibytes %1100000000001111 + .hibytes %1100111111100001 + .hibytes %1100111111100010 + .hibytes %1100111111100011 + .hibytes %1100111111100100 + .hibytes %1100111111100101 + .hibytes %1100111111100110 + .hibytes %1100111111100111 + .hibytes %1100111111101000 + .hibytes %1100111111101001 + .hibytes %1100111111101010 + .hibytes %1100111111101011 + .hibytes %1100111111101100 + .hibytes %1100111111101101 + .hibytes %1100111111101110 + .hibytes %1100111111101111 + .hibytes %1100111111110000 + .hibytes %1100111111110001 + .hibytes %1100111111110010 + .hibytes %1100111111110011 + .hibytes %1100111111110100 + .hibytes %1100111111110101 + .hibytes %1100111111110110 + .hibytes %1100111111110111 + .hibytes %1100111111111000 + .hibytes %1100111111111001 + .hibytes %1100111111111010 + .hibytes %1100111111111011 + .hibytes %1100111111111100 + .hibytes %1100111111111101 + .hibytes %1100111111111110 + .hibytes %1100111111111111 + .hibytes %1101000000000000 + .hibytes %1101000000000001 + .hibytes %1101000000000010 + .hibytes %1101000000000011 + .hibytes %1101000000000100 + .hibytes %1101000000000101 + .hibytes %1101000000000110 + .hibytes %1101000000000111 + .hibytes %1101000000001000 + .hibytes %1101000000001001 + .hibytes %1101000000001010 + .hibytes %1101000000001011 + .hibytes %1101000000001100 + .hibytes %1101000000001101 + .hibytes %1101000000001110 + .hibytes %1101000000001111 + .hibytes %1101111111100001 + .hibytes %1101111111100010 + .hibytes %1101111111100011 + .hibytes %1101111111100100 + .hibytes %1101111111100101 + .hibytes %1101111111100110 + .hibytes %1101111111100111 + .hibytes %1101111111101000 + .hibytes %1101111111101001 + .hibytes %1101111111101010 + .hibytes %1101111111101011 + .hibytes %1101111111101100 + .hibytes %1101111111101101 + .hibytes %1101111111101110 + .hibytes %1101111111101111 + .hibytes %1101111111110000 + .hibytes %1101111111110001 + .hibytes %1101111111110010 + .hibytes %1101111111110011 + .hibytes %1101111111110100 + .hibytes %1101111111110101 + .hibytes %1101111111110110 + .hibytes %1101111111110111 + .hibytes %1101111111111000 + .hibytes %1101111111111001 + .hibytes %1101111111111010 + .hibytes %1101111111111011 + .hibytes %1101111111111100 + .hibytes %1101111111111101 + .hibytes %1101111111111110 + .hibytes %1101111111111111 + .hibytes %1110000000000000 + .hibytes %1110000000000001 + .hibytes %1110000000000010 + .hibytes %1110000000000011 + .hibytes %1110000000000100 + .hibytes %1110000000000101 + .hibytes %1110000000000110 + .hibytes %1110000000000111 + .hibytes %1110000000001000 + .hibytes %1110000000001001 + .hibytes %1110000000001010 + .hibytes %1110000000001011 + .hibytes %1110000000001100 + .hibytes %1110000000001101 + .hibytes %1110000000001110 + .hibytes %1110000000001111 + .hibytes %1110111111100001 + .hibytes %1110111111100010 + .hibytes %1110111111100011 + .hibytes %1110111111100100 + .hibytes %1110111111100101 + .hibytes %1110111111100110 + .hibytes %1110111111100111 + .hibytes %1110111111101000 + .hibytes %1110111111101001 + .hibytes %1110111111101010 + .hibytes %1110111111101011 + .hibytes %1110111111101100 + .hibytes %1110111111101101 + .hibytes %1110111111101110 + .hibytes %1110111111101111 + .hibytes %1110111111110000 + .hibytes %1110111111110001 + .hibytes %1110111111110010 + .hibytes %1110111111110011 + .hibytes %1110111111110100 + .hibytes %1110111111110101 + .hibytes %1110111111110110 + .hibytes %1110111111110111 + .hibytes %1110111111111000 + .hibytes %1110111111111001 + .hibytes %1110111111111010 + .hibytes %1110111111111011 + .hibytes %1110111111111100 + .hibytes %1110111111111101 + .hibytes %1110111111111110 + .hibytes %1110111111111111 + .hibytes %1111000000000000 + .hibytes %1111000000000001 + .hibytes %1111000000000010 + .hibytes %1111000000000011 + .hibytes %1111000000000100 + .hibytes %1111000000000101 + .hibytes %1111000000000110 + .hibytes %1111000000000111 + .hibytes %1111000000001000 + .hibytes %1111000000001001 + .hibytes %1111000000001010 + .hibytes %1111000000001011 + .hibytes %1111000000001100 + .hibytes %1111000000001101 + .hibytes %1111000000001110 + .hibytes %1111000000001111 + .hibytes %1111111111100001 + .hibytes %1111111111100010 + .hibytes %1111111111100011 + .hibytes %1111111111100100 + .hibytes %1111111111100101 + .hibytes %1111111111100110 + .hibytes %1111111111100111 + .hibytes %1111111111101000 + .hibytes %1111111111101001 + .hibytes %1111111111101010 + .hibytes %1111111111101011 + .hibytes %1111111111101100 + .hibytes %1111111111101101 + .hibytes %1111111111101110 + .hibytes %1111111111101111 + .hibytes %1111111111110000 + .hibytes %1111111111110001 + .hibytes %1111111111110010 + .hibytes %1111111111110011 + .hibytes %1111111111110100 + .hibytes %1111111111110101 + .hibytes %1111111111110110 + .hibytes %1111111111110111 + .hibytes %1111111111111000 + .hibytes %1111111111111001 + .hibytes %1111111111111010 + .hibytes %1111111111111011 + .hibytes %1111111111111100 + .hibytes %1111111111111101 + .hibytes %1111111111111110 + .hibytes %1111111111111111 - ; multiple values on one line, decimal - .hibytes 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - .hibytes 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 - .hibytes 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 - .hibytes 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 - .hibytes 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 - .hibytes 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 - .hibytes 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 - .hibytes 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 - .hibytes 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 - .hibytes 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 - .hibytes 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 - .hibytes 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 - .hibytes 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 - .hibytes 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 - .hibytes 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 - .hibytes 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 - .hibytes 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 - .hibytes 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 - .hibytes 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 - .hibytes 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 - .hibytes 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 - .hibytes 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 - .hibytes 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 - .hibytes 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 + ; multiple values on one line, decimal + .hibytes 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .hibytes 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .hibytes 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .hibytes 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .hibytes 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + .hibytes 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 + .hibytes 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 + .hibytes 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 + .hibytes 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 + .hibytes 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 + .hibytes 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 + .hibytes 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 + .hibytes 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 + .hibytes 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 + .hibytes 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 + .hibytes 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 + .hibytes 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 + .hibytes 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 + .hibytes 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 + .hibytes 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 + .hibytes 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 + .hibytes 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 + .hibytes 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 + .hibytes 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 - ; multiple values on one line, hex - .hibytes $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f - .hibytes $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f - .hibytes $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f - .hibytes $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f - .hibytes $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff - .hibytes $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f - .hibytes $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef - .hibytes $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff - .hibytes $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f - .hibytes $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff - .hibytes $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f - .hibytes $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff - .hibytes $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f - .hibytes $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff - .hibytes $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f - .hibytes $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff - .hibytes $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f - .hibytes $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff - .hibytes $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f - .hibytes $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff - .hibytes $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f - .hibytes $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff - .hibytes $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f - .hibytes $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff + ; multiple values on one line, hex + .hibytes $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .hibytes $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .hibytes $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .hibytes $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .hibytes $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + .hibytes $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f + .hibytes $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef + .hibytes $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff + .hibytes $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f + .hibytes $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff + .hibytes $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f + .hibytes $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff + .hibytes $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f + .hibytes $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff + .hibytes $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f + .hibytes $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff + .hibytes $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f + .hibytes $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff + .hibytes $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f + .hibytes $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff + .hibytes $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f + .hibytes $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff + .hibytes $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f + .hibytes $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff - ; multiple values on one line, alternative hex - .hibytes 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh - .hibytes 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh - .hibytes 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh - .hibytes 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh - .hibytes 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh - .hibytes 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh - .hibytes 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh - .hibytes 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh - .hibytes 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh - .hibytes 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh - .hibytes 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh - .hibytes 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh - .hibytes 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh - .hibytes 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh - .hibytes 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh - .hibytes 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh - .hibytes 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh - .hibytes 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh - .hibytes 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh - .hibytes 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh - .hibytes 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh - .hibytes 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh - .hibytes 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh - .hibytes 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh + ; multiple values on one line, alternative hex + .hibytes 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .hibytes 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .hibytes 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .hibytes 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .hibytes 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + .hibytes 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh + .hibytes 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh + .hibytes 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh + .hibytes 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh + .hibytes 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh + .hibytes 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh + .hibytes 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh + .hibytes 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh + .hibytes 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh + .hibytes 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh + .hibytes 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh + .hibytes 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh + .hibytes 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh + .hibytes 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh + .hibytes 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh + .hibytes 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh + .hibytes 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh + .hibytes 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh + .hibytes 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh - ; mix some variants - .hibytes 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh + ; mix some variants + .hibytes 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh diff --git a/test/asm/listing/107-lobytes.list-ref b/test/asm/listing/107-lobytes.list-ref index 02527cca4..3511c91d8 100644 --- a/test/asm/listing/107-lobytes.list-ref +++ b/test/asm/listing/107-lobytes.list-ref @@ -4,6223 +4,6223 @@ Current file: 107-lobytes.s 000000r 1 ; 2022-06-15 Spiro Trikaliotis 000000r 1 000000r 1 -000000r 1 ; upper case pseudo-op -000000r 1 00 .LOBYTES 0 -000001r 1 01 .LOBYTES 1 -000002r 1 02 .LOBYTES 2 -000003r 1 03 .LOBYTES 3 -000004r 1 04 .LOBYTES 4 -000005r 1 05 .LOBYTES 5 -000006r 1 06 .LOBYTES 6 -000007r 1 07 .LOBYTES 7 -000008r 1 08 .LOBYTES 8 -000009r 1 09 .LOBYTES 9 -00000Ar 1 0A .LOBYTES 10 -00000Br 1 0B .LOBYTES 11 -00000Cr 1 0C .LOBYTES 12 -00000Dr 1 0D .LOBYTES 13 -00000Er 1 0E .LOBYTES 14 -00000Fr 1 0F .LOBYTES 15 -000010r 1 10 .LOBYTES 16 -000011r 1 11 .LOBYTES 17 -000012r 1 12 .LOBYTES 18 -000013r 1 13 .LOBYTES 19 -000014r 1 70 .LOBYTES 112 -000015r 1 71 .LOBYTES 113 -000016r 1 72 .LOBYTES 114 -000017r 1 73 .LOBYTES 115 -000018r 1 74 .LOBYTES 116 -000019r 1 75 .LOBYTES 117 -00001Ar 1 76 .LOBYTES 118 -00001Br 1 77 .LOBYTES 119 -00001Cr 1 78 .LOBYTES 120 -00001Dr 1 79 .LOBYTES 121 -00001Er 1 7A .LOBYTES 122 -00001Fr 1 7B .LOBYTES 123 -000020r 1 7C .LOBYTES 124 -000021r 1 7D .LOBYTES 125 -000022r 1 7E .LOBYTES 126 -000023r 1 7F .LOBYTES 127 -000024r 1 80 .LOBYTES 128 -000025r 1 81 .LOBYTES 129 -000026r 1 82 .LOBYTES 130 -000027r 1 83 .LOBYTES 131 -000028r 1 84 .LOBYTES 132 -000029r 1 85 .LOBYTES 133 -00002Ar 1 86 .LOBYTES 134 -00002Br 1 F0 .LOBYTES 240 -00002Cr 1 F1 .LOBYTES 241 -00002Dr 1 F2 .LOBYTES 242 -00002Er 1 F3 .LOBYTES 243 -00002Fr 1 F4 .LOBYTES 244 -000030r 1 F5 .LOBYTES 245 -000031r 1 F6 .LOBYTES 246 -000032r 1 F7 .LOBYTES 247 -000033r 1 F8 .LOBYTES 248 -000034r 1 F9 .LOBYTES 249 -000035r 1 FA .LOBYTES 250 -000036r 1 FB .LOBYTES 251 -000037r 1 FC .LOBYTES 252 -000038r 1 FD .LOBYTES 253 -000039r 1 FE .LOBYTES 254 -00003Ar 1 FF .LOBYTES 255 -00003Br 1 00 .LOBYTES 256 -00003Cr 1 01 .LOBYTES 257 -00003Dr 1 02 .LOBYTES 258 -00003Er 1 03 .LOBYTES 259 -00003Fr 1 D2 .LOBYTES 4050 -000040r 1 D3 .LOBYTES 4051 -000041r 1 D4 .LOBYTES 4052 -000042r 1 D5 .LOBYTES 4053 -000043r 1 D6 .LOBYTES 4054 -000044r 1 D7 .LOBYTES 4055 -000045r 1 D8 .LOBYTES 4056 -000046r 1 D9 .LOBYTES 4057 -000047r 1 DA .LOBYTES 4058 -000048r 1 DB .LOBYTES 4059 -000049r 1 DC .LOBYTES 4060 -00004Ar 1 DD .LOBYTES 4061 -00004Br 1 DE .LOBYTES 4062 -00004Cr 1 DF .LOBYTES 4063 -00004Dr 1 E0 .LOBYTES 4064 -00004Er 1 E1 .LOBYTES 4065 -00004Fr 1 E2 .LOBYTES 4066 -000050r 1 E3 .LOBYTES 4067 -000051r 1 E4 .LOBYTES 4068 -000052r 1 E5 .LOBYTES 4069 -000053r 1 E6 .LOBYTES 4070 -000054r 1 E7 .LOBYTES 4071 -000055r 1 E8 .LOBYTES 4072 -000056r 1 E9 .LOBYTES 4073 -000057r 1 EA .LOBYTES 4074 -000058r 1 EB .LOBYTES 4075 -000059r 1 EC .LOBYTES 4076 -00005Ar 1 ED .LOBYTES 4077 -00005Br 1 EE .LOBYTES 4078 -00005Cr 1 EF .LOBYTES 4079 -00005Dr 1 F0 .LOBYTES 4080 -00005Er 1 F1 .LOBYTES 4081 -00005Fr 1 F2 .LOBYTES 4082 -000060r 1 F3 .LOBYTES 4083 -000061r 1 F4 .LOBYTES 4084 -000062r 1 F5 .LOBYTES 4085 -000063r 1 F6 .LOBYTES 4086 -000064r 1 F7 .LOBYTES 4087 -000065r 1 F8 .LOBYTES 4088 -000066r 1 F9 .LOBYTES 4089 -000067r 1 FA .LOBYTES 4090 -000068r 1 FB .LOBYTES 4091 -000069r 1 FC .LOBYTES 4092 -00006Ar 1 FD .LOBYTES 4093 -00006Br 1 FE .LOBYTES 4094 -00006Cr 1 FF .LOBYTES 4095 -00006Dr 1 00 .LOBYTES 4096 -00006Er 1 01 .LOBYTES 4097 -00006Fr 1 02 .LOBYTES 4098 -000070r 1 03 .LOBYTES 4099 -000071r 1 04 .LOBYTES 4100 -000072r 1 05 .LOBYTES 4101 -000073r 1 06 .LOBYTES 4102 -000074r 1 07 .LOBYTES 4103 -000075r 1 08 .LOBYTES 4104 -000076r 1 F0 .LOBYTES 32752 -000077r 1 F1 .LOBYTES 32753 -000078r 1 F2 .LOBYTES 32754 -000079r 1 F3 .LOBYTES 32755 -00007Ar 1 F4 .LOBYTES 32756 -00007Br 1 F5 .LOBYTES 32757 -00007Cr 1 F6 .LOBYTES 32758 -00007Dr 1 F7 .LOBYTES 32759 -00007Er 1 F8 .LOBYTES 32760 -00007Fr 1 F9 .LOBYTES 32761 -000080r 1 FA .LOBYTES 32762 -000081r 1 FB .LOBYTES 32763 -000082r 1 FC .LOBYTES 32764 -000083r 1 FD .LOBYTES 32765 -000084r 1 FE .LOBYTES 32766 -000085r 1 FF .LOBYTES 32767 -000086r 1 00 .LOBYTES 32768 -000087r 1 01 .LOBYTES 32769 -000088r 1 02 .LOBYTES 32770 -000089r 1 03 .LOBYTES 32771 -00008Ar 1 04 .LOBYTES 32772 -00008Br 1 05 .LOBYTES 32773 -00008Cr 1 06 .LOBYTES 32774 -00008Dr 1 07 .LOBYTES 32775 -00008Er 1 08 .LOBYTES 32776 -00008Fr 1 09 .LOBYTES 32777 -000090r 1 0A .LOBYTES 32778 -000091r 1 0B .LOBYTES 32779 -000092r 1 E1 .LOBYTES 40929 -000093r 1 E2 .LOBYTES 40930 -000094r 1 E3 .LOBYTES 40931 -000095r 1 E4 .LOBYTES 40932 -000096r 1 E5 .LOBYTES 40933 -000097r 1 E6 .LOBYTES 40934 -000098r 1 E7 .LOBYTES 40935 -000099r 1 E8 .LOBYTES 40936 -00009Ar 1 E9 .LOBYTES 40937 -00009Br 1 EA .LOBYTES 40938 -00009Cr 1 EB .LOBYTES 40939 -00009Dr 1 EC .LOBYTES 40940 -00009Er 1 ED .LOBYTES 40941 -00009Fr 1 EE .LOBYTES 40942 -0000A0r 1 EF .LOBYTES 40943 -0000A1r 1 F0 .LOBYTES 40944 -0000A2r 1 F1 .LOBYTES 40945 -0000A3r 1 F2 .LOBYTES 40946 -0000A4r 1 F3 .LOBYTES 40947 -0000A5r 1 F4 .LOBYTES 40948 -0000A6r 1 F5 .LOBYTES 40949 -0000A7r 1 F6 .LOBYTES 40950 -0000A8r 1 F7 .LOBYTES 40951 -0000A9r 1 F8 .LOBYTES 40952 -0000AAr 1 F9 .LOBYTES 40953 -0000ABr 1 FA .LOBYTES 40954 -0000ACr 1 FB .LOBYTES 40955 -0000ADr 1 FC .LOBYTES 40956 -0000AEr 1 FD .LOBYTES 40957 -0000AFr 1 FE .LOBYTES 40958 -0000B0r 1 FF .LOBYTES 40959 -0000B1r 1 00 .LOBYTES 40960 -0000B2r 1 01 .LOBYTES 40961 -0000B3r 1 02 .LOBYTES 40962 -0000B4r 1 03 .LOBYTES 40963 -0000B5r 1 04 .LOBYTES 40964 -0000B6r 1 05 .LOBYTES 40965 -0000B7r 1 06 .LOBYTES 40966 -0000B8r 1 07 .LOBYTES 40967 -0000B9r 1 08 .LOBYTES 40968 -0000BAr 1 09 .LOBYTES 40969 -0000BBr 1 0A .LOBYTES 40970 -0000BCr 1 0B .LOBYTES 40971 -0000BDr 1 0C .LOBYTES 40972 -0000BEr 1 0D .LOBYTES 40973 -0000BFr 1 0E .LOBYTES 40974 -0000C0r 1 0F .LOBYTES 40975 -0000C1r 1 E1 .LOBYTES 45025 -0000C2r 1 E2 .LOBYTES 45026 -0000C3r 1 E3 .LOBYTES 45027 -0000C4r 1 E4 .LOBYTES 45028 -0000C5r 1 E5 .LOBYTES 45029 -0000C6r 1 E6 .LOBYTES 45030 -0000C7r 1 E7 .LOBYTES 45031 -0000C8r 1 E8 .LOBYTES 45032 -0000C9r 1 E9 .LOBYTES 45033 -0000CAr 1 EA .LOBYTES 45034 -0000CBr 1 EB .LOBYTES 45035 -0000CCr 1 EC .LOBYTES 45036 -0000CDr 1 ED .LOBYTES 45037 -0000CEr 1 EE .LOBYTES 45038 -0000CFr 1 EF .LOBYTES 45039 -0000D0r 1 F0 .LOBYTES 45040 -0000D1r 1 F1 .LOBYTES 45041 -0000D2r 1 F2 .LOBYTES 45042 -0000D3r 1 F3 .LOBYTES 45043 -0000D4r 1 F4 .LOBYTES 45044 -0000D5r 1 F5 .LOBYTES 45045 -0000D6r 1 F6 .LOBYTES 45046 -0000D7r 1 F7 .LOBYTES 45047 -0000D8r 1 F8 .LOBYTES 45048 -0000D9r 1 F9 .LOBYTES 45049 -0000DAr 1 FA .LOBYTES 45050 -0000DBr 1 FB .LOBYTES 45051 -0000DCr 1 FC .LOBYTES 45052 -0000DDr 1 FD .LOBYTES 45053 -0000DEr 1 FE .LOBYTES 45054 -0000DFr 1 FF .LOBYTES 45055 -0000E0r 1 00 .LOBYTES 45056 -0000E1r 1 01 .LOBYTES 45057 -0000E2r 1 02 .LOBYTES 45058 -0000E3r 1 03 .LOBYTES 45059 -0000E4r 1 04 .LOBYTES 45060 -0000E5r 1 05 .LOBYTES 45061 -0000E6r 1 06 .LOBYTES 45062 -0000E7r 1 07 .LOBYTES 45063 -0000E8r 1 08 .LOBYTES 45064 -0000E9r 1 09 .LOBYTES 45065 -0000EAr 1 0A .LOBYTES 45066 -0000EBr 1 0B .LOBYTES 45067 -0000ECr 1 0C .LOBYTES 45068 -0000EDr 1 0D .LOBYTES 45069 -0000EEr 1 0E .LOBYTES 45070 -0000EFr 1 0F .LOBYTES 45071 -0000F0r 1 E1 .LOBYTES 49121 -0000F1r 1 E2 .LOBYTES 49122 -0000F2r 1 E3 .LOBYTES 49123 -0000F3r 1 E4 .LOBYTES 49124 -0000F4r 1 E5 .LOBYTES 49125 -0000F5r 1 E6 .LOBYTES 49126 -0000F6r 1 E7 .LOBYTES 49127 -0000F7r 1 E8 .LOBYTES 49128 -0000F8r 1 E9 .LOBYTES 49129 -0000F9r 1 EA .LOBYTES 49130 -0000FAr 1 EB .LOBYTES 49131 -0000FBr 1 EC .LOBYTES 49132 -0000FCr 1 ED .LOBYTES 49133 -0000FDr 1 EE .LOBYTES 49134 -0000FEr 1 EF .LOBYTES 49135 -0000FFr 1 F0 .LOBYTES 49136 -000100r 1 F1 .LOBYTES 49137 -000101r 1 F2 .LOBYTES 49138 -000102r 1 F3 .LOBYTES 49139 -000103r 1 F4 .LOBYTES 49140 -000104r 1 F5 .LOBYTES 49141 -000105r 1 F6 .LOBYTES 49142 -000106r 1 F7 .LOBYTES 49143 -000107r 1 F8 .LOBYTES 49144 -000108r 1 F9 .LOBYTES 49145 -000109r 1 FA .LOBYTES 49146 -00010Ar 1 FB .LOBYTES 49147 -00010Br 1 FC .LOBYTES 49148 -00010Cr 1 FD .LOBYTES 49149 -00010Dr 1 FE .LOBYTES 49150 -00010Er 1 FF .LOBYTES 49151 -00010Fr 1 00 .LOBYTES 49152 -000110r 1 01 .LOBYTES 49153 -000111r 1 02 .LOBYTES 49154 -000112r 1 03 .LOBYTES 49155 -000113r 1 04 .LOBYTES 49156 -000114r 1 05 .LOBYTES 49157 -000115r 1 06 .LOBYTES 49158 -000116r 1 07 .LOBYTES 49159 -000117r 1 08 .LOBYTES 49160 -000118r 1 09 .LOBYTES 49161 -000119r 1 0A .LOBYTES 49162 -00011Ar 1 0B .LOBYTES 49163 -00011Br 1 0C .LOBYTES 49164 -00011Cr 1 0D .LOBYTES 49165 -00011Dr 1 0E .LOBYTES 49166 -00011Er 1 0F .LOBYTES 49167 -00011Fr 1 E1 .LOBYTES 53217 -000120r 1 E2 .LOBYTES 53218 -000121r 1 E3 .LOBYTES 53219 -000122r 1 E4 .LOBYTES 53220 -000123r 1 E5 .LOBYTES 53221 -000124r 1 E6 .LOBYTES 53222 -000125r 1 E7 .LOBYTES 53223 -000126r 1 E8 .LOBYTES 53224 -000127r 1 E9 .LOBYTES 53225 -000128r 1 EA .LOBYTES 53226 -000129r 1 EB .LOBYTES 53227 -00012Ar 1 EC .LOBYTES 53228 -00012Br 1 ED .LOBYTES 53229 -00012Cr 1 EE .LOBYTES 53230 -00012Dr 1 EF .LOBYTES 53231 -00012Er 1 F0 .LOBYTES 53232 -00012Fr 1 F1 .LOBYTES 53233 -000130r 1 F2 .LOBYTES 53234 -000131r 1 F3 .LOBYTES 53235 -000132r 1 F4 .LOBYTES 53236 -000133r 1 F5 .LOBYTES 53237 -000134r 1 F6 .LOBYTES 53238 -000135r 1 F7 .LOBYTES 53239 -000136r 1 F8 .LOBYTES 53240 -000137r 1 F9 .LOBYTES 53241 -000138r 1 FA .LOBYTES 53242 -000139r 1 FB .LOBYTES 53243 -00013Ar 1 FC .LOBYTES 53244 -00013Br 1 FD .LOBYTES 53245 -00013Cr 1 FE .LOBYTES 53246 -00013Dr 1 FF .LOBYTES 53247 -00013Er 1 00 .LOBYTES 53248 -00013Fr 1 01 .LOBYTES 53249 -000140r 1 02 .LOBYTES 53250 -000141r 1 03 .LOBYTES 53251 -000142r 1 04 .LOBYTES 53252 -000143r 1 05 .LOBYTES 53253 -000144r 1 06 .LOBYTES 53254 -000145r 1 07 .LOBYTES 53255 -000146r 1 08 .LOBYTES 53256 -000147r 1 09 .LOBYTES 53257 -000148r 1 0A .LOBYTES 53258 -000149r 1 0B .LOBYTES 53259 -00014Ar 1 0C .LOBYTES 53260 -00014Br 1 0D .LOBYTES 53261 -00014Cr 1 0E .LOBYTES 53262 -00014Dr 1 0F .LOBYTES 53263 -00014Er 1 E1 .LOBYTES 57313 -00014Fr 1 E2 .LOBYTES 57314 -000150r 1 E3 .LOBYTES 57315 -000151r 1 E4 .LOBYTES 57316 -000152r 1 E5 .LOBYTES 57317 -000153r 1 E6 .LOBYTES 57318 -000154r 1 E7 .LOBYTES 57319 -000155r 1 E8 .LOBYTES 57320 -000156r 1 E9 .LOBYTES 57321 -000157r 1 EA .LOBYTES 57322 -000158r 1 EB .LOBYTES 57323 -000159r 1 EC .LOBYTES 57324 -00015Ar 1 ED .LOBYTES 57325 -00015Br 1 EE .LOBYTES 57326 -00015Cr 1 EF .LOBYTES 57327 -00015Dr 1 F0 .LOBYTES 57328 -00015Er 1 F1 .LOBYTES 57329 -00015Fr 1 F2 .LOBYTES 57330 -000160r 1 F3 .LOBYTES 57331 -000161r 1 F4 .LOBYTES 57332 -000162r 1 F5 .LOBYTES 57333 -000163r 1 F6 .LOBYTES 57334 -000164r 1 F7 .LOBYTES 57335 -000165r 1 F8 .LOBYTES 57336 -000166r 1 F9 .LOBYTES 57337 -000167r 1 FA .LOBYTES 57338 -000168r 1 FB .LOBYTES 57339 -000169r 1 FC .LOBYTES 57340 -00016Ar 1 FD .LOBYTES 57341 -00016Br 1 FE .LOBYTES 57342 -00016Cr 1 FF .LOBYTES 57343 -00016Dr 1 00 .LOBYTES 57344 -00016Er 1 01 .LOBYTES 57345 -00016Fr 1 02 .LOBYTES 57346 -000170r 1 03 .LOBYTES 57347 -000171r 1 04 .LOBYTES 57348 -000172r 1 05 .LOBYTES 57349 -000173r 1 06 .LOBYTES 57350 -000174r 1 07 .LOBYTES 57351 -000175r 1 08 .LOBYTES 57352 -000176r 1 09 .LOBYTES 57353 -000177r 1 0A .LOBYTES 57354 -000178r 1 0B .LOBYTES 57355 -000179r 1 0C .LOBYTES 57356 -00017Ar 1 0D .LOBYTES 57357 -00017Br 1 0E .LOBYTES 57358 -00017Cr 1 0F .LOBYTES 57359 -00017Dr 1 E1 .LOBYTES 61409 -00017Er 1 E2 .LOBYTES 61410 -00017Fr 1 E3 .LOBYTES 61411 -000180r 1 E4 .LOBYTES 61412 -000181r 1 E5 .LOBYTES 61413 -000182r 1 E6 .LOBYTES 61414 -000183r 1 E7 .LOBYTES 61415 -000184r 1 E8 .LOBYTES 61416 -000185r 1 E9 .LOBYTES 61417 -000186r 1 EA .LOBYTES 61418 -000187r 1 EB .LOBYTES 61419 -000188r 1 EC .LOBYTES 61420 -000189r 1 ED .LOBYTES 61421 -00018Ar 1 EE .LOBYTES 61422 -00018Br 1 EF .LOBYTES 61423 -00018Cr 1 F0 .LOBYTES 61424 -00018Dr 1 F1 .LOBYTES 61425 -00018Er 1 F2 .LOBYTES 61426 -00018Fr 1 F3 .LOBYTES 61427 -000190r 1 F4 .LOBYTES 61428 -000191r 1 F5 .LOBYTES 61429 -000192r 1 F6 .LOBYTES 61430 -000193r 1 F7 .LOBYTES 61431 -000194r 1 F8 .LOBYTES 61432 -000195r 1 F9 .LOBYTES 61433 -000196r 1 FA .LOBYTES 61434 -000197r 1 FB .LOBYTES 61435 -000198r 1 FC .LOBYTES 61436 -000199r 1 FD .LOBYTES 61437 -00019Ar 1 FE .LOBYTES 61438 -00019Br 1 FF .LOBYTES 61439 -00019Cr 1 00 .LOBYTES 61440 -00019Dr 1 01 .LOBYTES 61441 -00019Er 1 02 .LOBYTES 61442 -00019Fr 1 03 .LOBYTES 61443 -0001A0r 1 04 .LOBYTES 61444 -0001A1r 1 05 .LOBYTES 61445 -0001A2r 1 06 .LOBYTES 61446 -0001A3r 1 07 .LOBYTES 61447 -0001A4r 1 08 .LOBYTES 61448 -0001A5r 1 09 .LOBYTES 61449 -0001A6r 1 0A .LOBYTES 61450 -0001A7r 1 0B .LOBYTES 61451 -0001A8r 1 0C .LOBYTES 61452 -0001A9r 1 0D .LOBYTES 61453 -0001AAr 1 0E .LOBYTES 61454 -0001ABr 1 0F .LOBYTES 61455 -0001ACr 1 E1 .LOBYTES 65505 -0001ADr 1 E2 .LOBYTES 65506 -0001AEr 1 E3 .LOBYTES 65507 -0001AFr 1 E4 .LOBYTES 65508 -0001B0r 1 E5 .LOBYTES 65509 -0001B1r 1 E6 .LOBYTES 65510 -0001B2r 1 E7 .LOBYTES 65511 -0001B3r 1 E8 .LOBYTES 65512 -0001B4r 1 E9 .LOBYTES 65513 -0001B5r 1 EA .LOBYTES 65514 -0001B6r 1 EB .LOBYTES 65515 -0001B7r 1 EC .LOBYTES 65516 -0001B8r 1 ED .LOBYTES 65517 -0001B9r 1 EE .LOBYTES 65518 -0001BAr 1 EF .LOBYTES 65519 -0001BBr 1 F0 .LOBYTES 65520 -0001BCr 1 F1 .LOBYTES 65521 -0001BDr 1 F2 .LOBYTES 65522 -0001BEr 1 F3 .LOBYTES 65523 -0001BFr 1 F4 .LOBYTES 65524 -0001C0r 1 F5 .LOBYTES 65525 -0001C1r 1 F6 .LOBYTES 65526 -0001C2r 1 F7 .LOBYTES 65527 -0001C3r 1 F8 .LOBYTES 65528 -0001C4r 1 F9 .LOBYTES 65529 -0001C5r 1 FA .LOBYTES 65530 -0001C6r 1 FB .LOBYTES 65531 -0001C7r 1 FC .LOBYTES 65532 -0001C8r 1 FD .LOBYTES 65533 -0001C9r 1 FE .LOBYTES 65534 -0001CAr 1 FF .LOBYTES 65535 +000000r 1 ; upper case pseudo-op +000000r 1 00 .LOBYTES 0 +000001r 1 01 .LOBYTES 1 +000002r 1 02 .LOBYTES 2 +000003r 1 03 .LOBYTES 3 +000004r 1 04 .LOBYTES 4 +000005r 1 05 .LOBYTES 5 +000006r 1 06 .LOBYTES 6 +000007r 1 07 .LOBYTES 7 +000008r 1 08 .LOBYTES 8 +000009r 1 09 .LOBYTES 9 +00000Ar 1 0A .LOBYTES 10 +00000Br 1 0B .LOBYTES 11 +00000Cr 1 0C .LOBYTES 12 +00000Dr 1 0D .LOBYTES 13 +00000Er 1 0E .LOBYTES 14 +00000Fr 1 0F .LOBYTES 15 +000010r 1 10 .LOBYTES 16 +000011r 1 11 .LOBYTES 17 +000012r 1 12 .LOBYTES 18 +000013r 1 13 .LOBYTES 19 +000014r 1 70 .LOBYTES 112 +000015r 1 71 .LOBYTES 113 +000016r 1 72 .LOBYTES 114 +000017r 1 73 .LOBYTES 115 +000018r 1 74 .LOBYTES 116 +000019r 1 75 .LOBYTES 117 +00001Ar 1 76 .LOBYTES 118 +00001Br 1 77 .LOBYTES 119 +00001Cr 1 78 .LOBYTES 120 +00001Dr 1 79 .LOBYTES 121 +00001Er 1 7A .LOBYTES 122 +00001Fr 1 7B .LOBYTES 123 +000020r 1 7C .LOBYTES 124 +000021r 1 7D .LOBYTES 125 +000022r 1 7E .LOBYTES 126 +000023r 1 7F .LOBYTES 127 +000024r 1 80 .LOBYTES 128 +000025r 1 81 .LOBYTES 129 +000026r 1 82 .LOBYTES 130 +000027r 1 83 .LOBYTES 131 +000028r 1 84 .LOBYTES 132 +000029r 1 85 .LOBYTES 133 +00002Ar 1 86 .LOBYTES 134 +00002Br 1 F0 .LOBYTES 240 +00002Cr 1 F1 .LOBYTES 241 +00002Dr 1 F2 .LOBYTES 242 +00002Er 1 F3 .LOBYTES 243 +00002Fr 1 F4 .LOBYTES 244 +000030r 1 F5 .LOBYTES 245 +000031r 1 F6 .LOBYTES 246 +000032r 1 F7 .LOBYTES 247 +000033r 1 F8 .LOBYTES 248 +000034r 1 F9 .LOBYTES 249 +000035r 1 FA .LOBYTES 250 +000036r 1 FB .LOBYTES 251 +000037r 1 FC .LOBYTES 252 +000038r 1 FD .LOBYTES 253 +000039r 1 FE .LOBYTES 254 +00003Ar 1 FF .LOBYTES 255 +00003Br 1 00 .LOBYTES 256 +00003Cr 1 01 .LOBYTES 257 +00003Dr 1 02 .LOBYTES 258 +00003Er 1 03 .LOBYTES 259 +00003Fr 1 D2 .LOBYTES 4050 +000040r 1 D3 .LOBYTES 4051 +000041r 1 D4 .LOBYTES 4052 +000042r 1 D5 .LOBYTES 4053 +000043r 1 D6 .LOBYTES 4054 +000044r 1 D7 .LOBYTES 4055 +000045r 1 D8 .LOBYTES 4056 +000046r 1 D9 .LOBYTES 4057 +000047r 1 DA .LOBYTES 4058 +000048r 1 DB .LOBYTES 4059 +000049r 1 DC .LOBYTES 4060 +00004Ar 1 DD .LOBYTES 4061 +00004Br 1 DE .LOBYTES 4062 +00004Cr 1 DF .LOBYTES 4063 +00004Dr 1 E0 .LOBYTES 4064 +00004Er 1 E1 .LOBYTES 4065 +00004Fr 1 E2 .LOBYTES 4066 +000050r 1 E3 .LOBYTES 4067 +000051r 1 E4 .LOBYTES 4068 +000052r 1 E5 .LOBYTES 4069 +000053r 1 E6 .LOBYTES 4070 +000054r 1 E7 .LOBYTES 4071 +000055r 1 E8 .LOBYTES 4072 +000056r 1 E9 .LOBYTES 4073 +000057r 1 EA .LOBYTES 4074 +000058r 1 EB .LOBYTES 4075 +000059r 1 EC .LOBYTES 4076 +00005Ar 1 ED .LOBYTES 4077 +00005Br 1 EE .LOBYTES 4078 +00005Cr 1 EF .LOBYTES 4079 +00005Dr 1 F0 .LOBYTES 4080 +00005Er 1 F1 .LOBYTES 4081 +00005Fr 1 F2 .LOBYTES 4082 +000060r 1 F3 .LOBYTES 4083 +000061r 1 F4 .LOBYTES 4084 +000062r 1 F5 .LOBYTES 4085 +000063r 1 F6 .LOBYTES 4086 +000064r 1 F7 .LOBYTES 4087 +000065r 1 F8 .LOBYTES 4088 +000066r 1 F9 .LOBYTES 4089 +000067r 1 FA .LOBYTES 4090 +000068r 1 FB .LOBYTES 4091 +000069r 1 FC .LOBYTES 4092 +00006Ar 1 FD .LOBYTES 4093 +00006Br 1 FE .LOBYTES 4094 +00006Cr 1 FF .LOBYTES 4095 +00006Dr 1 00 .LOBYTES 4096 +00006Er 1 01 .LOBYTES 4097 +00006Fr 1 02 .LOBYTES 4098 +000070r 1 03 .LOBYTES 4099 +000071r 1 04 .LOBYTES 4100 +000072r 1 05 .LOBYTES 4101 +000073r 1 06 .LOBYTES 4102 +000074r 1 07 .LOBYTES 4103 +000075r 1 08 .LOBYTES 4104 +000076r 1 F0 .LOBYTES 32752 +000077r 1 F1 .LOBYTES 32753 +000078r 1 F2 .LOBYTES 32754 +000079r 1 F3 .LOBYTES 32755 +00007Ar 1 F4 .LOBYTES 32756 +00007Br 1 F5 .LOBYTES 32757 +00007Cr 1 F6 .LOBYTES 32758 +00007Dr 1 F7 .LOBYTES 32759 +00007Er 1 F8 .LOBYTES 32760 +00007Fr 1 F9 .LOBYTES 32761 +000080r 1 FA .LOBYTES 32762 +000081r 1 FB .LOBYTES 32763 +000082r 1 FC .LOBYTES 32764 +000083r 1 FD .LOBYTES 32765 +000084r 1 FE .LOBYTES 32766 +000085r 1 FF .LOBYTES 32767 +000086r 1 00 .LOBYTES 32768 +000087r 1 01 .LOBYTES 32769 +000088r 1 02 .LOBYTES 32770 +000089r 1 03 .LOBYTES 32771 +00008Ar 1 04 .LOBYTES 32772 +00008Br 1 05 .LOBYTES 32773 +00008Cr 1 06 .LOBYTES 32774 +00008Dr 1 07 .LOBYTES 32775 +00008Er 1 08 .LOBYTES 32776 +00008Fr 1 09 .LOBYTES 32777 +000090r 1 0A .LOBYTES 32778 +000091r 1 0B .LOBYTES 32779 +000092r 1 E1 .LOBYTES 40929 +000093r 1 E2 .LOBYTES 40930 +000094r 1 E3 .LOBYTES 40931 +000095r 1 E4 .LOBYTES 40932 +000096r 1 E5 .LOBYTES 40933 +000097r 1 E6 .LOBYTES 40934 +000098r 1 E7 .LOBYTES 40935 +000099r 1 E8 .LOBYTES 40936 +00009Ar 1 E9 .LOBYTES 40937 +00009Br 1 EA .LOBYTES 40938 +00009Cr 1 EB .LOBYTES 40939 +00009Dr 1 EC .LOBYTES 40940 +00009Er 1 ED .LOBYTES 40941 +00009Fr 1 EE .LOBYTES 40942 +0000A0r 1 EF .LOBYTES 40943 +0000A1r 1 F0 .LOBYTES 40944 +0000A2r 1 F1 .LOBYTES 40945 +0000A3r 1 F2 .LOBYTES 40946 +0000A4r 1 F3 .LOBYTES 40947 +0000A5r 1 F4 .LOBYTES 40948 +0000A6r 1 F5 .LOBYTES 40949 +0000A7r 1 F6 .LOBYTES 40950 +0000A8r 1 F7 .LOBYTES 40951 +0000A9r 1 F8 .LOBYTES 40952 +0000AAr 1 F9 .LOBYTES 40953 +0000ABr 1 FA .LOBYTES 40954 +0000ACr 1 FB .LOBYTES 40955 +0000ADr 1 FC .LOBYTES 40956 +0000AEr 1 FD .LOBYTES 40957 +0000AFr 1 FE .LOBYTES 40958 +0000B0r 1 FF .LOBYTES 40959 +0000B1r 1 00 .LOBYTES 40960 +0000B2r 1 01 .LOBYTES 40961 +0000B3r 1 02 .LOBYTES 40962 +0000B4r 1 03 .LOBYTES 40963 +0000B5r 1 04 .LOBYTES 40964 +0000B6r 1 05 .LOBYTES 40965 +0000B7r 1 06 .LOBYTES 40966 +0000B8r 1 07 .LOBYTES 40967 +0000B9r 1 08 .LOBYTES 40968 +0000BAr 1 09 .LOBYTES 40969 +0000BBr 1 0A .LOBYTES 40970 +0000BCr 1 0B .LOBYTES 40971 +0000BDr 1 0C .LOBYTES 40972 +0000BEr 1 0D .LOBYTES 40973 +0000BFr 1 0E .LOBYTES 40974 +0000C0r 1 0F .LOBYTES 40975 +0000C1r 1 E1 .LOBYTES 45025 +0000C2r 1 E2 .LOBYTES 45026 +0000C3r 1 E3 .LOBYTES 45027 +0000C4r 1 E4 .LOBYTES 45028 +0000C5r 1 E5 .LOBYTES 45029 +0000C6r 1 E6 .LOBYTES 45030 +0000C7r 1 E7 .LOBYTES 45031 +0000C8r 1 E8 .LOBYTES 45032 +0000C9r 1 E9 .LOBYTES 45033 +0000CAr 1 EA .LOBYTES 45034 +0000CBr 1 EB .LOBYTES 45035 +0000CCr 1 EC .LOBYTES 45036 +0000CDr 1 ED .LOBYTES 45037 +0000CEr 1 EE .LOBYTES 45038 +0000CFr 1 EF .LOBYTES 45039 +0000D0r 1 F0 .LOBYTES 45040 +0000D1r 1 F1 .LOBYTES 45041 +0000D2r 1 F2 .LOBYTES 45042 +0000D3r 1 F3 .LOBYTES 45043 +0000D4r 1 F4 .LOBYTES 45044 +0000D5r 1 F5 .LOBYTES 45045 +0000D6r 1 F6 .LOBYTES 45046 +0000D7r 1 F7 .LOBYTES 45047 +0000D8r 1 F8 .LOBYTES 45048 +0000D9r 1 F9 .LOBYTES 45049 +0000DAr 1 FA .LOBYTES 45050 +0000DBr 1 FB .LOBYTES 45051 +0000DCr 1 FC .LOBYTES 45052 +0000DDr 1 FD .LOBYTES 45053 +0000DEr 1 FE .LOBYTES 45054 +0000DFr 1 FF .LOBYTES 45055 +0000E0r 1 00 .LOBYTES 45056 +0000E1r 1 01 .LOBYTES 45057 +0000E2r 1 02 .LOBYTES 45058 +0000E3r 1 03 .LOBYTES 45059 +0000E4r 1 04 .LOBYTES 45060 +0000E5r 1 05 .LOBYTES 45061 +0000E6r 1 06 .LOBYTES 45062 +0000E7r 1 07 .LOBYTES 45063 +0000E8r 1 08 .LOBYTES 45064 +0000E9r 1 09 .LOBYTES 45065 +0000EAr 1 0A .LOBYTES 45066 +0000EBr 1 0B .LOBYTES 45067 +0000ECr 1 0C .LOBYTES 45068 +0000EDr 1 0D .LOBYTES 45069 +0000EEr 1 0E .LOBYTES 45070 +0000EFr 1 0F .LOBYTES 45071 +0000F0r 1 E1 .LOBYTES 49121 +0000F1r 1 E2 .LOBYTES 49122 +0000F2r 1 E3 .LOBYTES 49123 +0000F3r 1 E4 .LOBYTES 49124 +0000F4r 1 E5 .LOBYTES 49125 +0000F5r 1 E6 .LOBYTES 49126 +0000F6r 1 E7 .LOBYTES 49127 +0000F7r 1 E8 .LOBYTES 49128 +0000F8r 1 E9 .LOBYTES 49129 +0000F9r 1 EA .LOBYTES 49130 +0000FAr 1 EB .LOBYTES 49131 +0000FBr 1 EC .LOBYTES 49132 +0000FCr 1 ED .LOBYTES 49133 +0000FDr 1 EE .LOBYTES 49134 +0000FEr 1 EF .LOBYTES 49135 +0000FFr 1 F0 .LOBYTES 49136 +000100r 1 F1 .LOBYTES 49137 +000101r 1 F2 .LOBYTES 49138 +000102r 1 F3 .LOBYTES 49139 +000103r 1 F4 .LOBYTES 49140 +000104r 1 F5 .LOBYTES 49141 +000105r 1 F6 .LOBYTES 49142 +000106r 1 F7 .LOBYTES 49143 +000107r 1 F8 .LOBYTES 49144 +000108r 1 F9 .LOBYTES 49145 +000109r 1 FA .LOBYTES 49146 +00010Ar 1 FB .LOBYTES 49147 +00010Br 1 FC .LOBYTES 49148 +00010Cr 1 FD .LOBYTES 49149 +00010Dr 1 FE .LOBYTES 49150 +00010Er 1 FF .LOBYTES 49151 +00010Fr 1 00 .LOBYTES 49152 +000110r 1 01 .LOBYTES 49153 +000111r 1 02 .LOBYTES 49154 +000112r 1 03 .LOBYTES 49155 +000113r 1 04 .LOBYTES 49156 +000114r 1 05 .LOBYTES 49157 +000115r 1 06 .LOBYTES 49158 +000116r 1 07 .LOBYTES 49159 +000117r 1 08 .LOBYTES 49160 +000118r 1 09 .LOBYTES 49161 +000119r 1 0A .LOBYTES 49162 +00011Ar 1 0B .LOBYTES 49163 +00011Br 1 0C .LOBYTES 49164 +00011Cr 1 0D .LOBYTES 49165 +00011Dr 1 0E .LOBYTES 49166 +00011Er 1 0F .LOBYTES 49167 +00011Fr 1 E1 .LOBYTES 53217 +000120r 1 E2 .LOBYTES 53218 +000121r 1 E3 .LOBYTES 53219 +000122r 1 E4 .LOBYTES 53220 +000123r 1 E5 .LOBYTES 53221 +000124r 1 E6 .LOBYTES 53222 +000125r 1 E7 .LOBYTES 53223 +000126r 1 E8 .LOBYTES 53224 +000127r 1 E9 .LOBYTES 53225 +000128r 1 EA .LOBYTES 53226 +000129r 1 EB .LOBYTES 53227 +00012Ar 1 EC .LOBYTES 53228 +00012Br 1 ED .LOBYTES 53229 +00012Cr 1 EE .LOBYTES 53230 +00012Dr 1 EF .LOBYTES 53231 +00012Er 1 F0 .LOBYTES 53232 +00012Fr 1 F1 .LOBYTES 53233 +000130r 1 F2 .LOBYTES 53234 +000131r 1 F3 .LOBYTES 53235 +000132r 1 F4 .LOBYTES 53236 +000133r 1 F5 .LOBYTES 53237 +000134r 1 F6 .LOBYTES 53238 +000135r 1 F7 .LOBYTES 53239 +000136r 1 F8 .LOBYTES 53240 +000137r 1 F9 .LOBYTES 53241 +000138r 1 FA .LOBYTES 53242 +000139r 1 FB .LOBYTES 53243 +00013Ar 1 FC .LOBYTES 53244 +00013Br 1 FD .LOBYTES 53245 +00013Cr 1 FE .LOBYTES 53246 +00013Dr 1 FF .LOBYTES 53247 +00013Er 1 00 .LOBYTES 53248 +00013Fr 1 01 .LOBYTES 53249 +000140r 1 02 .LOBYTES 53250 +000141r 1 03 .LOBYTES 53251 +000142r 1 04 .LOBYTES 53252 +000143r 1 05 .LOBYTES 53253 +000144r 1 06 .LOBYTES 53254 +000145r 1 07 .LOBYTES 53255 +000146r 1 08 .LOBYTES 53256 +000147r 1 09 .LOBYTES 53257 +000148r 1 0A .LOBYTES 53258 +000149r 1 0B .LOBYTES 53259 +00014Ar 1 0C .LOBYTES 53260 +00014Br 1 0D .LOBYTES 53261 +00014Cr 1 0E .LOBYTES 53262 +00014Dr 1 0F .LOBYTES 53263 +00014Er 1 E1 .LOBYTES 57313 +00014Fr 1 E2 .LOBYTES 57314 +000150r 1 E3 .LOBYTES 57315 +000151r 1 E4 .LOBYTES 57316 +000152r 1 E5 .LOBYTES 57317 +000153r 1 E6 .LOBYTES 57318 +000154r 1 E7 .LOBYTES 57319 +000155r 1 E8 .LOBYTES 57320 +000156r 1 E9 .LOBYTES 57321 +000157r 1 EA .LOBYTES 57322 +000158r 1 EB .LOBYTES 57323 +000159r 1 EC .LOBYTES 57324 +00015Ar 1 ED .LOBYTES 57325 +00015Br 1 EE .LOBYTES 57326 +00015Cr 1 EF .LOBYTES 57327 +00015Dr 1 F0 .LOBYTES 57328 +00015Er 1 F1 .LOBYTES 57329 +00015Fr 1 F2 .LOBYTES 57330 +000160r 1 F3 .LOBYTES 57331 +000161r 1 F4 .LOBYTES 57332 +000162r 1 F5 .LOBYTES 57333 +000163r 1 F6 .LOBYTES 57334 +000164r 1 F7 .LOBYTES 57335 +000165r 1 F8 .LOBYTES 57336 +000166r 1 F9 .LOBYTES 57337 +000167r 1 FA .LOBYTES 57338 +000168r 1 FB .LOBYTES 57339 +000169r 1 FC .LOBYTES 57340 +00016Ar 1 FD .LOBYTES 57341 +00016Br 1 FE .LOBYTES 57342 +00016Cr 1 FF .LOBYTES 57343 +00016Dr 1 00 .LOBYTES 57344 +00016Er 1 01 .LOBYTES 57345 +00016Fr 1 02 .LOBYTES 57346 +000170r 1 03 .LOBYTES 57347 +000171r 1 04 .LOBYTES 57348 +000172r 1 05 .LOBYTES 57349 +000173r 1 06 .LOBYTES 57350 +000174r 1 07 .LOBYTES 57351 +000175r 1 08 .LOBYTES 57352 +000176r 1 09 .LOBYTES 57353 +000177r 1 0A .LOBYTES 57354 +000178r 1 0B .LOBYTES 57355 +000179r 1 0C .LOBYTES 57356 +00017Ar 1 0D .LOBYTES 57357 +00017Br 1 0E .LOBYTES 57358 +00017Cr 1 0F .LOBYTES 57359 +00017Dr 1 E1 .LOBYTES 61409 +00017Er 1 E2 .LOBYTES 61410 +00017Fr 1 E3 .LOBYTES 61411 +000180r 1 E4 .LOBYTES 61412 +000181r 1 E5 .LOBYTES 61413 +000182r 1 E6 .LOBYTES 61414 +000183r 1 E7 .LOBYTES 61415 +000184r 1 E8 .LOBYTES 61416 +000185r 1 E9 .LOBYTES 61417 +000186r 1 EA .LOBYTES 61418 +000187r 1 EB .LOBYTES 61419 +000188r 1 EC .LOBYTES 61420 +000189r 1 ED .LOBYTES 61421 +00018Ar 1 EE .LOBYTES 61422 +00018Br 1 EF .LOBYTES 61423 +00018Cr 1 F0 .LOBYTES 61424 +00018Dr 1 F1 .LOBYTES 61425 +00018Er 1 F2 .LOBYTES 61426 +00018Fr 1 F3 .LOBYTES 61427 +000190r 1 F4 .LOBYTES 61428 +000191r 1 F5 .LOBYTES 61429 +000192r 1 F6 .LOBYTES 61430 +000193r 1 F7 .LOBYTES 61431 +000194r 1 F8 .LOBYTES 61432 +000195r 1 F9 .LOBYTES 61433 +000196r 1 FA .LOBYTES 61434 +000197r 1 FB .LOBYTES 61435 +000198r 1 FC .LOBYTES 61436 +000199r 1 FD .LOBYTES 61437 +00019Ar 1 FE .LOBYTES 61438 +00019Br 1 FF .LOBYTES 61439 +00019Cr 1 00 .LOBYTES 61440 +00019Dr 1 01 .LOBYTES 61441 +00019Er 1 02 .LOBYTES 61442 +00019Fr 1 03 .LOBYTES 61443 +0001A0r 1 04 .LOBYTES 61444 +0001A1r 1 05 .LOBYTES 61445 +0001A2r 1 06 .LOBYTES 61446 +0001A3r 1 07 .LOBYTES 61447 +0001A4r 1 08 .LOBYTES 61448 +0001A5r 1 09 .LOBYTES 61449 +0001A6r 1 0A .LOBYTES 61450 +0001A7r 1 0B .LOBYTES 61451 +0001A8r 1 0C .LOBYTES 61452 +0001A9r 1 0D .LOBYTES 61453 +0001AAr 1 0E .LOBYTES 61454 +0001ABr 1 0F .LOBYTES 61455 +0001ACr 1 E1 .LOBYTES 65505 +0001ADr 1 E2 .LOBYTES 65506 +0001AEr 1 E3 .LOBYTES 65507 +0001AFr 1 E4 .LOBYTES 65508 +0001B0r 1 E5 .LOBYTES 65509 +0001B1r 1 E6 .LOBYTES 65510 +0001B2r 1 E7 .LOBYTES 65511 +0001B3r 1 E8 .LOBYTES 65512 +0001B4r 1 E9 .LOBYTES 65513 +0001B5r 1 EA .LOBYTES 65514 +0001B6r 1 EB .LOBYTES 65515 +0001B7r 1 EC .LOBYTES 65516 +0001B8r 1 ED .LOBYTES 65517 +0001B9r 1 EE .LOBYTES 65518 +0001BAr 1 EF .LOBYTES 65519 +0001BBr 1 F0 .LOBYTES 65520 +0001BCr 1 F1 .LOBYTES 65521 +0001BDr 1 F2 .LOBYTES 65522 +0001BEr 1 F3 .LOBYTES 65523 +0001BFr 1 F4 .LOBYTES 65524 +0001C0r 1 F5 .LOBYTES 65525 +0001C1r 1 F6 .LOBYTES 65526 +0001C2r 1 F7 .LOBYTES 65527 +0001C3r 1 F8 .LOBYTES 65528 +0001C4r 1 F9 .LOBYTES 65529 +0001C5r 1 FA .LOBYTES 65530 +0001C6r 1 FB .LOBYTES 65531 +0001C7r 1 FC .LOBYTES 65532 +0001C8r 1 FD .LOBYTES 65533 +0001C9r 1 FE .LOBYTES 65534 +0001CAr 1 FF .LOBYTES 65535 0001CBr 1 -0001CBr 1 ; lower case pseudo-op -0001CBr 1 00 .lobytes 0 -0001CCr 1 01 .lobytes 1 -0001CDr 1 02 .lobytes 2 -0001CEr 1 03 .lobytes 3 -0001CFr 1 04 .lobytes 4 -0001D0r 1 05 .lobytes 5 -0001D1r 1 06 .lobytes 6 -0001D2r 1 07 .lobytes 7 -0001D3r 1 08 .lobytes 8 -0001D4r 1 09 .lobytes 9 -0001D5r 1 0A .lobytes 10 -0001D6r 1 0B .lobytes 11 -0001D7r 1 0C .lobytes 12 -0001D8r 1 0D .lobytes 13 -0001D9r 1 0E .lobytes 14 -0001DAr 1 0F .lobytes 15 -0001DBr 1 10 .lobytes 16 -0001DCr 1 11 .lobytes 17 -0001DDr 1 12 .lobytes 18 -0001DEr 1 13 .lobytes 19 -0001DFr 1 70 .lobytes 112 -0001E0r 1 71 .lobytes 113 -0001E1r 1 72 .lobytes 114 -0001E2r 1 73 .lobytes 115 -0001E3r 1 74 .lobytes 116 -0001E4r 1 75 .lobytes 117 -0001E5r 1 76 .lobytes 118 -0001E6r 1 77 .lobytes 119 -0001E7r 1 78 .lobytes 120 -0001E8r 1 79 .lobytes 121 -0001E9r 1 7A .lobytes 122 -0001EAr 1 7B .lobytes 123 -0001EBr 1 7C .lobytes 124 -0001ECr 1 7D .lobytes 125 -0001EDr 1 7E .lobytes 126 -0001EEr 1 7F .lobytes 127 -0001EFr 1 80 .lobytes 128 -0001F0r 1 81 .lobytes 129 -0001F1r 1 82 .lobytes 130 -0001F2r 1 83 .lobytes 131 -0001F3r 1 84 .lobytes 132 -0001F4r 1 85 .lobytes 133 -0001F5r 1 86 .lobytes 134 -0001F6r 1 F0 .lobytes 240 -0001F7r 1 F1 .lobytes 241 -0001F8r 1 F2 .lobytes 242 -0001F9r 1 F3 .lobytes 243 -0001FAr 1 F4 .lobytes 244 -0001FBr 1 F5 .lobytes 245 -0001FCr 1 F6 .lobytes 246 -0001FDr 1 F7 .lobytes 247 -0001FEr 1 F8 .lobytes 248 -0001FFr 1 F9 .lobytes 249 -000200r 1 FA .lobytes 250 -000201r 1 FB .lobytes 251 -000202r 1 FC .lobytes 252 -000203r 1 FD .lobytes 253 -000204r 1 FE .lobytes 254 -000205r 1 FF .lobytes 255 -000206r 1 00 .lobytes 256 -000207r 1 01 .lobytes 257 -000208r 1 02 .lobytes 258 -000209r 1 03 .lobytes 259 -00020Ar 1 D2 .lobytes 4050 -00020Br 1 D3 .lobytes 4051 -00020Cr 1 D4 .lobytes 4052 -00020Dr 1 D5 .lobytes 4053 -00020Er 1 D6 .lobytes 4054 -00020Fr 1 D7 .lobytes 4055 -000210r 1 D8 .lobytes 4056 -000211r 1 D9 .lobytes 4057 -000212r 1 DA .lobytes 4058 -000213r 1 DB .lobytes 4059 -000214r 1 DC .lobytes 4060 -000215r 1 DD .lobytes 4061 -000216r 1 DE .lobytes 4062 -000217r 1 DF .lobytes 4063 -000218r 1 E0 .lobytes 4064 -000219r 1 E1 .lobytes 4065 -00021Ar 1 E2 .lobytes 4066 -00021Br 1 E3 .lobytes 4067 -00021Cr 1 E4 .lobytes 4068 -00021Dr 1 E5 .lobytes 4069 -00021Er 1 E6 .lobytes 4070 -00021Fr 1 E7 .lobytes 4071 -000220r 1 E8 .lobytes 4072 -000221r 1 E9 .lobytes 4073 -000222r 1 EA .lobytes 4074 -000223r 1 EB .lobytes 4075 -000224r 1 EC .lobytes 4076 -000225r 1 ED .lobytes 4077 -000226r 1 EE .lobytes 4078 -000227r 1 EF .lobytes 4079 -000228r 1 F0 .lobytes 4080 -000229r 1 F1 .lobytes 4081 -00022Ar 1 F2 .lobytes 4082 -00022Br 1 F3 .lobytes 4083 -00022Cr 1 F4 .lobytes 4084 -00022Dr 1 F5 .lobytes 4085 -00022Er 1 F6 .lobytes 4086 -00022Fr 1 F7 .lobytes 4087 -000230r 1 F8 .lobytes 4088 -000231r 1 F9 .lobytes 4089 -000232r 1 FA .lobytes 4090 -000233r 1 FB .lobytes 4091 -000234r 1 FC .lobytes 4092 -000235r 1 FD .lobytes 4093 -000236r 1 FE .lobytes 4094 -000237r 1 FF .lobytes 4095 -000238r 1 00 .lobytes 4096 -000239r 1 01 .lobytes 4097 -00023Ar 1 02 .lobytes 4098 -00023Br 1 03 .lobytes 4099 -00023Cr 1 04 .lobytes 4100 -00023Dr 1 05 .lobytes 4101 -00023Er 1 06 .lobytes 4102 -00023Fr 1 07 .lobytes 4103 -000240r 1 08 .lobytes 4104 -000241r 1 F0 .lobytes 32752 -000242r 1 F1 .lobytes 32753 -000243r 1 F2 .lobytes 32754 -000244r 1 F3 .lobytes 32755 -000245r 1 F4 .lobytes 32756 -000246r 1 F5 .lobytes 32757 -000247r 1 F6 .lobytes 32758 -000248r 1 F7 .lobytes 32759 -000249r 1 F8 .lobytes 32760 -00024Ar 1 F9 .lobytes 32761 -00024Br 1 FA .lobytes 32762 -00024Cr 1 FB .lobytes 32763 -00024Dr 1 FC .lobytes 32764 -00024Er 1 FD .lobytes 32765 -00024Fr 1 FE .lobytes 32766 -000250r 1 FF .lobytes 32767 -000251r 1 00 .lobytes 32768 -000252r 1 01 .lobytes 32769 -000253r 1 02 .lobytes 32770 -000254r 1 03 .lobytes 32771 -000255r 1 04 .lobytes 32772 -000256r 1 05 .lobytes 32773 -000257r 1 06 .lobytes 32774 -000258r 1 07 .lobytes 32775 -000259r 1 08 .lobytes 32776 -00025Ar 1 09 .lobytes 32777 -00025Br 1 0A .lobytes 32778 -00025Cr 1 0B .lobytes 32779 -00025Dr 1 E1 .lobytes 40929 -00025Er 1 E2 .lobytes 40930 -00025Fr 1 E3 .lobytes 40931 -000260r 1 E4 .lobytes 40932 -000261r 1 E5 .lobytes 40933 -000262r 1 E6 .lobytes 40934 -000263r 1 E7 .lobytes 40935 -000264r 1 E8 .lobytes 40936 -000265r 1 E9 .lobytes 40937 -000266r 1 EA .lobytes 40938 -000267r 1 EB .lobytes 40939 -000268r 1 EC .lobytes 40940 -000269r 1 ED .lobytes 40941 -00026Ar 1 EE .lobytes 40942 -00026Br 1 EF .lobytes 40943 -00026Cr 1 F0 .lobytes 40944 -00026Dr 1 F1 .lobytes 40945 -00026Er 1 F2 .lobytes 40946 -00026Fr 1 F3 .lobytes 40947 -000270r 1 F4 .lobytes 40948 -000271r 1 F5 .lobytes 40949 -000272r 1 F6 .lobytes 40950 -000273r 1 F7 .lobytes 40951 -000274r 1 F8 .lobytes 40952 -000275r 1 F9 .lobytes 40953 -000276r 1 FA .lobytes 40954 -000277r 1 FB .lobytes 40955 -000278r 1 FC .lobytes 40956 -000279r 1 FD .lobytes 40957 -00027Ar 1 FE .lobytes 40958 -00027Br 1 FF .lobytes 40959 -00027Cr 1 00 .lobytes 40960 -00027Dr 1 01 .lobytes 40961 -00027Er 1 02 .lobytes 40962 -00027Fr 1 03 .lobytes 40963 -000280r 1 04 .lobytes 40964 -000281r 1 05 .lobytes 40965 -000282r 1 06 .lobytes 40966 -000283r 1 07 .lobytes 40967 -000284r 1 08 .lobytes 40968 -000285r 1 09 .lobytes 40969 -000286r 1 0A .lobytes 40970 -000287r 1 0B .lobytes 40971 -000288r 1 0C .lobytes 40972 -000289r 1 0D .lobytes 40973 -00028Ar 1 0E .lobytes 40974 -00028Br 1 0F .lobytes 40975 -00028Cr 1 E1 .lobytes 45025 -00028Dr 1 E2 .lobytes 45026 -00028Er 1 E3 .lobytes 45027 -00028Fr 1 E4 .lobytes 45028 -000290r 1 E5 .lobytes 45029 -000291r 1 E6 .lobytes 45030 -000292r 1 E7 .lobytes 45031 -000293r 1 E8 .lobytes 45032 -000294r 1 E9 .lobytes 45033 -000295r 1 EA .lobytes 45034 -000296r 1 EB .lobytes 45035 -000297r 1 EC .lobytes 45036 -000298r 1 ED .lobytes 45037 -000299r 1 EE .lobytes 45038 -00029Ar 1 EF .lobytes 45039 -00029Br 1 F0 .lobytes 45040 -00029Cr 1 F1 .lobytes 45041 -00029Dr 1 F2 .lobytes 45042 -00029Er 1 F3 .lobytes 45043 -00029Fr 1 F4 .lobytes 45044 -0002A0r 1 F5 .lobytes 45045 -0002A1r 1 F6 .lobytes 45046 -0002A2r 1 F7 .lobytes 45047 -0002A3r 1 F8 .lobytes 45048 -0002A4r 1 F9 .lobytes 45049 -0002A5r 1 FA .lobytes 45050 -0002A6r 1 FB .lobytes 45051 -0002A7r 1 FC .lobytes 45052 -0002A8r 1 FD .lobytes 45053 -0002A9r 1 FE .lobytes 45054 -0002AAr 1 FF .lobytes 45055 -0002ABr 1 00 .lobytes 45056 -0002ACr 1 01 .lobytes 45057 -0002ADr 1 02 .lobytes 45058 -0002AEr 1 03 .lobytes 45059 -0002AFr 1 04 .lobytes 45060 -0002B0r 1 05 .lobytes 45061 -0002B1r 1 06 .lobytes 45062 -0002B2r 1 07 .lobytes 45063 -0002B3r 1 08 .lobytes 45064 -0002B4r 1 09 .lobytes 45065 -0002B5r 1 0A .lobytes 45066 -0002B6r 1 0B .lobytes 45067 -0002B7r 1 0C .lobytes 45068 -0002B8r 1 0D .lobytes 45069 -0002B9r 1 0E .lobytes 45070 -0002BAr 1 0F .lobytes 45071 -0002BBr 1 E1 .lobytes 49121 -0002BCr 1 E2 .lobytes 49122 -0002BDr 1 E3 .lobytes 49123 -0002BEr 1 E4 .lobytes 49124 -0002BFr 1 E5 .lobytes 49125 -0002C0r 1 E6 .lobytes 49126 -0002C1r 1 E7 .lobytes 49127 -0002C2r 1 E8 .lobytes 49128 -0002C3r 1 E9 .lobytes 49129 -0002C4r 1 EA .lobytes 49130 -0002C5r 1 EB .lobytes 49131 -0002C6r 1 EC .lobytes 49132 -0002C7r 1 ED .lobytes 49133 -0002C8r 1 EE .lobytes 49134 -0002C9r 1 EF .lobytes 49135 -0002CAr 1 F0 .lobytes 49136 -0002CBr 1 F1 .lobytes 49137 -0002CCr 1 F2 .lobytes 49138 -0002CDr 1 F3 .lobytes 49139 -0002CEr 1 F4 .lobytes 49140 -0002CFr 1 F5 .lobytes 49141 -0002D0r 1 F6 .lobytes 49142 -0002D1r 1 F7 .lobytes 49143 -0002D2r 1 F8 .lobytes 49144 -0002D3r 1 F9 .lobytes 49145 -0002D4r 1 FA .lobytes 49146 -0002D5r 1 FB .lobytes 49147 -0002D6r 1 FC .lobytes 49148 -0002D7r 1 FD .lobytes 49149 -0002D8r 1 FE .lobytes 49150 -0002D9r 1 FF .lobytes 49151 -0002DAr 1 00 .lobytes 49152 -0002DBr 1 01 .lobytes 49153 -0002DCr 1 02 .lobytes 49154 -0002DDr 1 03 .lobytes 49155 -0002DEr 1 04 .lobytes 49156 -0002DFr 1 05 .lobytes 49157 -0002E0r 1 06 .lobytes 49158 -0002E1r 1 07 .lobytes 49159 -0002E2r 1 08 .lobytes 49160 -0002E3r 1 09 .lobytes 49161 -0002E4r 1 0A .lobytes 49162 -0002E5r 1 0B .lobytes 49163 -0002E6r 1 0C .lobytes 49164 -0002E7r 1 0D .lobytes 49165 -0002E8r 1 0E .lobytes 49166 -0002E9r 1 0F .lobytes 49167 -0002EAr 1 E1 .lobytes 53217 -0002EBr 1 E2 .lobytes 53218 -0002ECr 1 E3 .lobytes 53219 -0002EDr 1 E4 .lobytes 53220 -0002EEr 1 E5 .lobytes 53221 -0002EFr 1 E6 .lobytes 53222 -0002F0r 1 E7 .lobytes 53223 -0002F1r 1 E8 .lobytes 53224 -0002F2r 1 E9 .lobytes 53225 -0002F3r 1 EA .lobytes 53226 -0002F4r 1 EB .lobytes 53227 -0002F5r 1 EC .lobytes 53228 -0002F6r 1 ED .lobytes 53229 -0002F7r 1 EE .lobytes 53230 -0002F8r 1 EF .lobytes 53231 -0002F9r 1 F0 .lobytes 53232 -0002FAr 1 F1 .lobytes 53233 -0002FBr 1 F2 .lobytes 53234 -0002FCr 1 F3 .lobytes 53235 -0002FDr 1 F4 .lobytes 53236 -0002FEr 1 F5 .lobytes 53237 -0002FFr 1 F6 .lobytes 53238 -000300r 1 F7 .lobytes 53239 -000301r 1 F8 .lobytes 53240 -000302r 1 F9 .lobytes 53241 -000303r 1 FA .lobytes 53242 -000304r 1 FB .lobytes 53243 -000305r 1 FC .lobytes 53244 -000306r 1 FD .lobytes 53245 -000307r 1 FE .lobytes 53246 -000308r 1 FF .lobytes 53247 -000309r 1 00 .lobytes 53248 -00030Ar 1 01 .lobytes 53249 -00030Br 1 02 .lobytes 53250 -00030Cr 1 03 .lobytes 53251 -00030Dr 1 04 .lobytes 53252 -00030Er 1 05 .lobytes 53253 -00030Fr 1 06 .lobytes 53254 -000310r 1 07 .lobytes 53255 -000311r 1 08 .lobytes 53256 -000312r 1 09 .lobytes 53257 -000313r 1 0A .lobytes 53258 -000314r 1 0B .lobytes 53259 -000315r 1 0C .lobytes 53260 -000316r 1 0D .lobytes 53261 -000317r 1 0E .lobytes 53262 -000318r 1 0F .lobytes 53263 -000319r 1 E1 .lobytes 57313 -00031Ar 1 E2 .lobytes 57314 -00031Br 1 E3 .lobytes 57315 -00031Cr 1 E4 .lobytes 57316 -00031Dr 1 E5 .lobytes 57317 -00031Er 1 E6 .lobytes 57318 -00031Fr 1 E7 .lobytes 57319 -000320r 1 E8 .lobytes 57320 -000321r 1 E9 .lobytes 57321 -000322r 1 EA .lobytes 57322 -000323r 1 EB .lobytes 57323 -000324r 1 EC .lobytes 57324 -000325r 1 ED .lobytes 57325 -000326r 1 EE .lobytes 57326 -000327r 1 EF .lobytes 57327 -000328r 1 F0 .lobytes 57328 -000329r 1 F1 .lobytes 57329 -00032Ar 1 F2 .lobytes 57330 -00032Br 1 F3 .lobytes 57331 -00032Cr 1 F4 .lobytes 57332 -00032Dr 1 F5 .lobytes 57333 -00032Er 1 F6 .lobytes 57334 -00032Fr 1 F7 .lobytes 57335 -000330r 1 F8 .lobytes 57336 -000331r 1 F9 .lobytes 57337 -000332r 1 FA .lobytes 57338 -000333r 1 FB .lobytes 57339 -000334r 1 FC .lobytes 57340 -000335r 1 FD .lobytes 57341 -000336r 1 FE .lobytes 57342 -000337r 1 FF .lobytes 57343 -000338r 1 00 .lobytes 57344 -000339r 1 01 .lobytes 57345 -00033Ar 1 02 .lobytes 57346 -00033Br 1 03 .lobytes 57347 -00033Cr 1 04 .lobytes 57348 -00033Dr 1 05 .lobytes 57349 -00033Er 1 06 .lobytes 57350 -00033Fr 1 07 .lobytes 57351 -000340r 1 08 .lobytes 57352 -000341r 1 09 .lobytes 57353 -000342r 1 0A .lobytes 57354 -000343r 1 0B .lobytes 57355 -000344r 1 0C .lobytes 57356 -000345r 1 0D .lobytes 57357 -000346r 1 0E .lobytes 57358 -000347r 1 0F .lobytes 57359 -000348r 1 E1 .lobytes 61409 -000349r 1 E2 .lobytes 61410 -00034Ar 1 E3 .lobytes 61411 -00034Br 1 E4 .lobytes 61412 -00034Cr 1 E5 .lobytes 61413 -00034Dr 1 E6 .lobytes 61414 -00034Er 1 E7 .lobytes 61415 -00034Fr 1 E8 .lobytes 61416 -000350r 1 E9 .lobytes 61417 -000351r 1 EA .lobytes 61418 -000352r 1 EB .lobytes 61419 -000353r 1 EC .lobytes 61420 -000354r 1 ED .lobytes 61421 -000355r 1 EE .lobytes 61422 -000356r 1 EF .lobytes 61423 -000357r 1 F0 .lobytes 61424 -000358r 1 F1 .lobytes 61425 -000359r 1 F2 .lobytes 61426 -00035Ar 1 F3 .lobytes 61427 -00035Br 1 F4 .lobytes 61428 -00035Cr 1 F5 .lobytes 61429 -00035Dr 1 F6 .lobytes 61430 -00035Er 1 F7 .lobytes 61431 -00035Fr 1 F8 .lobytes 61432 -000360r 1 F9 .lobytes 61433 -000361r 1 FA .lobytes 61434 -000362r 1 FB .lobytes 61435 -000363r 1 FC .lobytes 61436 -000364r 1 FD .lobytes 61437 -000365r 1 FE .lobytes 61438 -000366r 1 FF .lobytes 61439 -000367r 1 00 .lobytes 61440 -000368r 1 01 .lobytes 61441 -000369r 1 02 .lobytes 61442 -00036Ar 1 03 .lobytes 61443 -00036Br 1 04 .lobytes 61444 -00036Cr 1 05 .lobytes 61445 -00036Dr 1 06 .lobytes 61446 -00036Er 1 07 .lobytes 61447 -00036Fr 1 08 .lobytes 61448 -000370r 1 09 .lobytes 61449 -000371r 1 0A .lobytes 61450 -000372r 1 0B .lobytes 61451 -000373r 1 0C .lobytes 61452 -000374r 1 0D .lobytes 61453 -000375r 1 0E .lobytes 61454 -000376r 1 0F .lobytes 61455 -000377r 1 E1 .lobytes 65505 -000378r 1 E2 .lobytes 65506 -000379r 1 E3 .lobytes 65507 -00037Ar 1 E4 .lobytes 65508 -00037Br 1 E5 .lobytes 65509 -00037Cr 1 E6 .lobytes 65510 -00037Dr 1 E7 .lobytes 65511 -00037Er 1 E8 .lobytes 65512 -00037Fr 1 E9 .lobytes 65513 -000380r 1 EA .lobytes 65514 -000381r 1 EB .lobytes 65515 -000382r 1 EC .lobytes 65516 -000383r 1 ED .lobytes 65517 -000384r 1 EE .lobytes 65518 -000385r 1 EF .lobytes 65519 -000386r 1 F0 .lobytes 65520 -000387r 1 F1 .lobytes 65521 -000388r 1 F2 .lobytes 65522 -000389r 1 F3 .lobytes 65523 -00038Ar 1 F4 .lobytes 65524 -00038Br 1 F5 .lobytes 65525 -00038Cr 1 F6 .lobytes 65526 -00038Dr 1 F7 .lobytes 65527 -00038Er 1 F8 .lobytes 65528 -00038Fr 1 F9 .lobytes 65529 -000390r 1 FA .lobytes 65530 -000391r 1 FB .lobytes 65531 -000392r 1 FC .lobytes 65532 -000393r 1 FD .lobytes 65533 -000394r 1 FE .lobytes 65534 -000395r 1 FF .lobytes 65535 +0001CBr 1 ; lower case pseudo-op +0001CBr 1 00 .lobytes 0 +0001CCr 1 01 .lobytes 1 +0001CDr 1 02 .lobytes 2 +0001CEr 1 03 .lobytes 3 +0001CFr 1 04 .lobytes 4 +0001D0r 1 05 .lobytes 5 +0001D1r 1 06 .lobytes 6 +0001D2r 1 07 .lobytes 7 +0001D3r 1 08 .lobytes 8 +0001D4r 1 09 .lobytes 9 +0001D5r 1 0A .lobytes 10 +0001D6r 1 0B .lobytes 11 +0001D7r 1 0C .lobytes 12 +0001D8r 1 0D .lobytes 13 +0001D9r 1 0E .lobytes 14 +0001DAr 1 0F .lobytes 15 +0001DBr 1 10 .lobytes 16 +0001DCr 1 11 .lobytes 17 +0001DDr 1 12 .lobytes 18 +0001DEr 1 13 .lobytes 19 +0001DFr 1 70 .lobytes 112 +0001E0r 1 71 .lobytes 113 +0001E1r 1 72 .lobytes 114 +0001E2r 1 73 .lobytes 115 +0001E3r 1 74 .lobytes 116 +0001E4r 1 75 .lobytes 117 +0001E5r 1 76 .lobytes 118 +0001E6r 1 77 .lobytes 119 +0001E7r 1 78 .lobytes 120 +0001E8r 1 79 .lobytes 121 +0001E9r 1 7A .lobytes 122 +0001EAr 1 7B .lobytes 123 +0001EBr 1 7C .lobytes 124 +0001ECr 1 7D .lobytes 125 +0001EDr 1 7E .lobytes 126 +0001EEr 1 7F .lobytes 127 +0001EFr 1 80 .lobytes 128 +0001F0r 1 81 .lobytes 129 +0001F1r 1 82 .lobytes 130 +0001F2r 1 83 .lobytes 131 +0001F3r 1 84 .lobytes 132 +0001F4r 1 85 .lobytes 133 +0001F5r 1 86 .lobytes 134 +0001F6r 1 F0 .lobytes 240 +0001F7r 1 F1 .lobytes 241 +0001F8r 1 F2 .lobytes 242 +0001F9r 1 F3 .lobytes 243 +0001FAr 1 F4 .lobytes 244 +0001FBr 1 F5 .lobytes 245 +0001FCr 1 F6 .lobytes 246 +0001FDr 1 F7 .lobytes 247 +0001FEr 1 F8 .lobytes 248 +0001FFr 1 F9 .lobytes 249 +000200r 1 FA .lobytes 250 +000201r 1 FB .lobytes 251 +000202r 1 FC .lobytes 252 +000203r 1 FD .lobytes 253 +000204r 1 FE .lobytes 254 +000205r 1 FF .lobytes 255 +000206r 1 00 .lobytes 256 +000207r 1 01 .lobytes 257 +000208r 1 02 .lobytes 258 +000209r 1 03 .lobytes 259 +00020Ar 1 D2 .lobytes 4050 +00020Br 1 D3 .lobytes 4051 +00020Cr 1 D4 .lobytes 4052 +00020Dr 1 D5 .lobytes 4053 +00020Er 1 D6 .lobytes 4054 +00020Fr 1 D7 .lobytes 4055 +000210r 1 D8 .lobytes 4056 +000211r 1 D9 .lobytes 4057 +000212r 1 DA .lobytes 4058 +000213r 1 DB .lobytes 4059 +000214r 1 DC .lobytes 4060 +000215r 1 DD .lobytes 4061 +000216r 1 DE .lobytes 4062 +000217r 1 DF .lobytes 4063 +000218r 1 E0 .lobytes 4064 +000219r 1 E1 .lobytes 4065 +00021Ar 1 E2 .lobytes 4066 +00021Br 1 E3 .lobytes 4067 +00021Cr 1 E4 .lobytes 4068 +00021Dr 1 E5 .lobytes 4069 +00021Er 1 E6 .lobytes 4070 +00021Fr 1 E7 .lobytes 4071 +000220r 1 E8 .lobytes 4072 +000221r 1 E9 .lobytes 4073 +000222r 1 EA .lobytes 4074 +000223r 1 EB .lobytes 4075 +000224r 1 EC .lobytes 4076 +000225r 1 ED .lobytes 4077 +000226r 1 EE .lobytes 4078 +000227r 1 EF .lobytes 4079 +000228r 1 F0 .lobytes 4080 +000229r 1 F1 .lobytes 4081 +00022Ar 1 F2 .lobytes 4082 +00022Br 1 F3 .lobytes 4083 +00022Cr 1 F4 .lobytes 4084 +00022Dr 1 F5 .lobytes 4085 +00022Er 1 F6 .lobytes 4086 +00022Fr 1 F7 .lobytes 4087 +000230r 1 F8 .lobytes 4088 +000231r 1 F9 .lobytes 4089 +000232r 1 FA .lobytes 4090 +000233r 1 FB .lobytes 4091 +000234r 1 FC .lobytes 4092 +000235r 1 FD .lobytes 4093 +000236r 1 FE .lobytes 4094 +000237r 1 FF .lobytes 4095 +000238r 1 00 .lobytes 4096 +000239r 1 01 .lobytes 4097 +00023Ar 1 02 .lobytes 4098 +00023Br 1 03 .lobytes 4099 +00023Cr 1 04 .lobytes 4100 +00023Dr 1 05 .lobytes 4101 +00023Er 1 06 .lobytes 4102 +00023Fr 1 07 .lobytes 4103 +000240r 1 08 .lobytes 4104 +000241r 1 F0 .lobytes 32752 +000242r 1 F1 .lobytes 32753 +000243r 1 F2 .lobytes 32754 +000244r 1 F3 .lobytes 32755 +000245r 1 F4 .lobytes 32756 +000246r 1 F5 .lobytes 32757 +000247r 1 F6 .lobytes 32758 +000248r 1 F7 .lobytes 32759 +000249r 1 F8 .lobytes 32760 +00024Ar 1 F9 .lobytes 32761 +00024Br 1 FA .lobytes 32762 +00024Cr 1 FB .lobytes 32763 +00024Dr 1 FC .lobytes 32764 +00024Er 1 FD .lobytes 32765 +00024Fr 1 FE .lobytes 32766 +000250r 1 FF .lobytes 32767 +000251r 1 00 .lobytes 32768 +000252r 1 01 .lobytes 32769 +000253r 1 02 .lobytes 32770 +000254r 1 03 .lobytes 32771 +000255r 1 04 .lobytes 32772 +000256r 1 05 .lobytes 32773 +000257r 1 06 .lobytes 32774 +000258r 1 07 .lobytes 32775 +000259r 1 08 .lobytes 32776 +00025Ar 1 09 .lobytes 32777 +00025Br 1 0A .lobytes 32778 +00025Cr 1 0B .lobytes 32779 +00025Dr 1 E1 .lobytes 40929 +00025Er 1 E2 .lobytes 40930 +00025Fr 1 E3 .lobytes 40931 +000260r 1 E4 .lobytes 40932 +000261r 1 E5 .lobytes 40933 +000262r 1 E6 .lobytes 40934 +000263r 1 E7 .lobytes 40935 +000264r 1 E8 .lobytes 40936 +000265r 1 E9 .lobytes 40937 +000266r 1 EA .lobytes 40938 +000267r 1 EB .lobytes 40939 +000268r 1 EC .lobytes 40940 +000269r 1 ED .lobytes 40941 +00026Ar 1 EE .lobytes 40942 +00026Br 1 EF .lobytes 40943 +00026Cr 1 F0 .lobytes 40944 +00026Dr 1 F1 .lobytes 40945 +00026Er 1 F2 .lobytes 40946 +00026Fr 1 F3 .lobytes 40947 +000270r 1 F4 .lobytes 40948 +000271r 1 F5 .lobytes 40949 +000272r 1 F6 .lobytes 40950 +000273r 1 F7 .lobytes 40951 +000274r 1 F8 .lobytes 40952 +000275r 1 F9 .lobytes 40953 +000276r 1 FA .lobytes 40954 +000277r 1 FB .lobytes 40955 +000278r 1 FC .lobytes 40956 +000279r 1 FD .lobytes 40957 +00027Ar 1 FE .lobytes 40958 +00027Br 1 FF .lobytes 40959 +00027Cr 1 00 .lobytes 40960 +00027Dr 1 01 .lobytes 40961 +00027Er 1 02 .lobytes 40962 +00027Fr 1 03 .lobytes 40963 +000280r 1 04 .lobytes 40964 +000281r 1 05 .lobytes 40965 +000282r 1 06 .lobytes 40966 +000283r 1 07 .lobytes 40967 +000284r 1 08 .lobytes 40968 +000285r 1 09 .lobytes 40969 +000286r 1 0A .lobytes 40970 +000287r 1 0B .lobytes 40971 +000288r 1 0C .lobytes 40972 +000289r 1 0D .lobytes 40973 +00028Ar 1 0E .lobytes 40974 +00028Br 1 0F .lobytes 40975 +00028Cr 1 E1 .lobytes 45025 +00028Dr 1 E2 .lobytes 45026 +00028Er 1 E3 .lobytes 45027 +00028Fr 1 E4 .lobytes 45028 +000290r 1 E5 .lobytes 45029 +000291r 1 E6 .lobytes 45030 +000292r 1 E7 .lobytes 45031 +000293r 1 E8 .lobytes 45032 +000294r 1 E9 .lobytes 45033 +000295r 1 EA .lobytes 45034 +000296r 1 EB .lobytes 45035 +000297r 1 EC .lobytes 45036 +000298r 1 ED .lobytes 45037 +000299r 1 EE .lobytes 45038 +00029Ar 1 EF .lobytes 45039 +00029Br 1 F0 .lobytes 45040 +00029Cr 1 F1 .lobytes 45041 +00029Dr 1 F2 .lobytes 45042 +00029Er 1 F3 .lobytes 45043 +00029Fr 1 F4 .lobytes 45044 +0002A0r 1 F5 .lobytes 45045 +0002A1r 1 F6 .lobytes 45046 +0002A2r 1 F7 .lobytes 45047 +0002A3r 1 F8 .lobytes 45048 +0002A4r 1 F9 .lobytes 45049 +0002A5r 1 FA .lobytes 45050 +0002A6r 1 FB .lobytes 45051 +0002A7r 1 FC .lobytes 45052 +0002A8r 1 FD .lobytes 45053 +0002A9r 1 FE .lobytes 45054 +0002AAr 1 FF .lobytes 45055 +0002ABr 1 00 .lobytes 45056 +0002ACr 1 01 .lobytes 45057 +0002ADr 1 02 .lobytes 45058 +0002AEr 1 03 .lobytes 45059 +0002AFr 1 04 .lobytes 45060 +0002B0r 1 05 .lobytes 45061 +0002B1r 1 06 .lobytes 45062 +0002B2r 1 07 .lobytes 45063 +0002B3r 1 08 .lobytes 45064 +0002B4r 1 09 .lobytes 45065 +0002B5r 1 0A .lobytes 45066 +0002B6r 1 0B .lobytes 45067 +0002B7r 1 0C .lobytes 45068 +0002B8r 1 0D .lobytes 45069 +0002B9r 1 0E .lobytes 45070 +0002BAr 1 0F .lobytes 45071 +0002BBr 1 E1 .lobytes 49121 +0002BCr 1 E2 .lobytes 49122 +0002BDr 1 E3 .lobytes 49123 +0002BEr 1 E4 .lobytes 49124 +0002BFr 1 E5 .lobytes 49125 +0002C0r 1 E6 .lobytes 49126 +0002C1r 1 E7 .lobytes 49127 +0002C2r 1 E8 .lobytes 49128 +0002C3r 1 E9 .lobytes 49129 +0002C4r 1 EA .lobytes 49130 +0002C5r 1 EB .lobytes 49131 +0002C6r 1 EC .lobytes 49132 +0002C7r 1 ED .lobytes 49133 +0002C8r 1 EE .lobytes 49134 +0002C9r 1 EF .lobytes 49135 +0002CAr 1 F0 .lobytes 49136 +0002CBr 1 F1 .lobytes 49137 +0002CCr 1 F2 .lobytes 49138 +0002CDr 1 F3 .lobytes 49139 +0002CEr 1 F4 .lobytes 49140 +0002CFr 1 F5 .lobytes 49141 +0002D0r 1 F6 .lobytes 49142 +0002D1r 1 F7 .lobytes 49143 +0002D2r 1 F8 .lobytes 49144 +0002D3r 1 F9 .lobytes 49145 +0002D4r 1 FA .lobytes 49146 +0002D5r 1 FB .lobytes 49147 +0002D6r 1 FC .lobytes 49148 +0002D7r 1 FD .lobytes 49149 +0002D8r 1 FE .lobytes 49150 +0002D9r 1 FF .lobytes 49151 +0002DAr 1 00 .lobytes 49152 +0002DBr 1 01 .lobytes 49153 +0002DCr 1 02 .lobytes 49154 +0002DDr 1 03 .lobytes 49155 +0002DEr 1 04 .lobytes 49156 +0002DFr 1 05 .lobytes 49157 +0002E0r 1 06 .lobytes 49158 +0002E1r 1 07 .lobytes 49159 +0002E2r 1 08 .lobytes 49160 +0002E3r 1 09 .lobytes 49161 +0002E4r 1 0A .lobytes 49162 +0002E5r 1 0B .lobytes 49163 +0002E6r 1 0C .lobytes 49164 +0002E7r 1 0D .lobytes 49165 +0002E8r 1 0E .lobytes 49166 +0002E9r 1 0F .lobytes 49167 +0002EAr 1 E1 .lobytes 53217 +0002EBr 1 E2 .lobytes 53218 +0002ECr 1 E3 .lobytes 53219 +0002EDr 1 E4 .lobytes 53220 +0002EEr 1 E5 .lobytes 53221 +0002EFr 1 E6 .lobytes 53222 +0002F0r 1 E7 .lobytes 53223 +0002F1r 1 E8 .lobytes 53224 +0002F2r 1 E9 .lobytes 53225 +0002F3r 1 EA .lobytes 53226 +0002F4r 1 EB .lobytes 53227 +0002F5r 1 EC .lobytes 53228 +0002F6r 1 ED .lobytes 53229 +0002F7r 1 EE .lobytes 53230 +0002F8r 1 EF .lobytes 53231 +0002F9r 1 F0 .lobytes 53232 +0002FAr 1 F1 .lobytes 53233 +0002FBr 1 F2 .lobytes 53234 +0002FCr 1 F3 .lobytes 53235 +0002FDr 1 F4 .lobytes 53236 +0002FEr 1 F5 .lobytes 53237 +0002FFr 1 F6 .lobytes 53238 +000300r 1 F7 .lobytes 53239 +000301r 1 F8 .lobytes 53240 +000302r 1 F9 .lobytes 53241 +000303r 1 FA .lobytes 53242 +000304r 1 FB .lobytes 53243 +000305r 1 FC .lobytes 53244 +000306r 1 FD .lobytes 53245 +000307r 1 FE .lobytes 53246 +000308r 1 FF .lobytes 53247 +000309r 1 00 .lobytes 53248 +00030Ar 1 01 .lobytes 53249 +00030Br 1 02 .lobytes 53250 +00030Cr 1 03 .lobytes 53251 +00030Dr 1 04 .lobytes 53252 +00030Er 1 05 .lobytes 53253 +00030Fr 1 06 .lobytes 53254 +000310r 1 07 .lobytes 53255 +000311r 1 08 .lobytes 53256 +000312r 1 09 .lobytes 53257 +000313r 1 0A .lobytes 53258 +000314r 1 0B .lobytes 53259 +000315r 1 0C .lobytes 53260 +000316r 1 0D .lobytes 53261 +000317r 1 0E .lobytes 53262 +000318r 1 0F .lobytes 53263 +000319r 1 E1 .lobytes 57313 +00031Ar 1 E2 .lobytes 57314 +00031Br 1 E3 .lobytes 57315 +00031Cr 1 E4 .lobytes 57316 +00031Dr 1 E5 .lobytes 57317 +00031Er 1 E6 .lobytes 57318 +00031Fr 1 E7 .lobytes 57319 +000320r 1 E8 .lobytes 57320 +000321r 1 E9 .lobytes 57321 +000322r 1 EA .lobytes 57322 +000323r 1 EB .lobytes 57323 +000324r 1 EC .lobytes 57324 +000325r 1 ED .lobytes 57325 +000326r 1 EE .lobytes 57326 +000327r 1 EF .lobytes 57327 +000328r 1 F0 .lobytes 57328 +000329r 1 F1 .lobytes 57329 +00032Ar 1 F2 .lobytes 57330 +00032Br 1 F3 .lobytes 57331 +00032Cr 1 F4 .lobytes 57332 +00032Dr 1 F5 .lobytes 57333 +00032Er 1 F6 .lobytes 57334 +00032Fr 1 F7 .lobytes 57335 +000330r 1 F8 .lobytes 57336 +000331r 1 F9 .lobytes 57337 +000332r 1 FA .lobytes 57338 +000333r 1 FB .lobytes 57339 +000334r 1 FC .lobytes 57340 +000335r 1 FD .lobytes 57341 +000336r 1 FE .lobytes 57342 +000337r 1 FF .lobytes 57343 +000338r 1 00 .lobytes 57344 +000339r 1 01 .lobytes 57345 +00033Ar 1 02 .lobytes 57346 +00033Br 1 03 .lobytes 57347 +00033Cr 1 04 .lobytes 57348 +00033Dr 1 05 .lobytes 57349 +00033Er 1 06 .lobytes 57350 +00033Fr 1 07 .lobytes 57351 +000340r 1 08 .lobytes 57352 +000341r 1 09 .lobytes 57353 +000342r 1 0A .lobytes 57354 +000343r 1 0B .lobytes 57355 +000344r 1 0C .lobytes 57356 +000345r 1 0D .lobytes 57357 +000346r 1 0E .lobytes 57358 +000347r 1 0F .lobytes 57359 +000348r 1 E1 .lobytes 61409 +000349r 1 E2 .lobytes 61410 +00034Ar 1 E3 .lobytes 61411 +00034Br 1 E4 .lobytes 61412 +00034Cr 1 E5 .lobytes 61413 +00034Dr 1 E6 .lobytes 61414 +00034Er 1 E7 .lobytes 61415 +00034Fr 1 E8 .lobytes 61416 +000350r 1 E9 .lobytes 61417 +000351r 1 EA .lobytes 61418 +000352r 1 EB .lobytes 61419 +000353r 1 EC .lobytes 61420 +000354r 1 ED .lobytes 61421 +000355r 1 EE .lobytes 61422 +000356r 1 EF .lobytes 61423 +000357r 1 F0 .lobytes 61424 +000358r 1 F1 .lobytes 61425 +000359r 1 F2 .lobytes 61426 +00035Ar 1 F3 .lobytes 61427 +00035Br 1 F4 .lobytes 61428 +00035Cr 1 F5 .lobytes 61429 +00035Dr 1 F6 .lobytes 61430 +00035Er 1 F7 .lobytes 61431 +00035Fr 1 F8 .lobytes 61432 +000360r 1 F9 .lobytes 61433 +000361r 1 FA .lobytes 61434 +000362r 1 FB .lobytes 61435 +000363r 1 FC .lobytes 61436 +000364r 1 FD .lobytes 61437 +000365r 1 FE .lobytes 61438 +000366r 1 FF .lobytes 61439 +000367r 1 00 .lobytes 61440 +000368r 1 01 .lobytes 61441 +000369r 1 02 .lobytes 61442 +00036Ar 1 03 .lobytes 61443 +00036Br 1 04 .lobytes 61444 +00036Cr 1 05 .lobytes 61445 +00036Dr 1 06 .lobytes 61446 +00036Er 1 07 .lobytes 61447 +00036Fr 1 08 .lobytes 61448 +000370r 1 09 .lobytes 61449 +000371r 1 0A .lobytes 61450 +000372r 1 0B .lobytes 61451 +000373r 1 0C .lobytes 61452 +000374r 1 0D .lobytes 61453 +000375r 1 0E .lobytes 61454 +000376r 1 0F .lobytes 61455 +000377r 1 E1 .lobytes 65505 +000378r 1 E2 .lobytes 65506 +000379r 1 E3 .lobytes 65507 +00037Ar 1 E4 .lobytes 65508 +00037Br 1 E5 .lobytes 65509 +00037Cr 1 E6 .lobytes 65510 +00037Dr 1 E7 .lobytes 65511 +00037Er 1 E8 .lobytes 65512 +00037Fr 1 E9 .lobytes 65513 +000380r 1 EA .lobytes 65514 +000381r 1 EB .lobytes 65515 +000382r 1 EC .lobytes 65516 +000383r 1 ED .lobytes 65517 +000384r 1 EE .lobytes 65518 +000385r 1 EF .lobytes 65519 +000386r 1 F0 .lobytes 65520 +000387r 1 F1 .lobytes 65521 +000388r 1 F2 .lobytes 65522 +000389r 1 F3 .lobytes 65523 +00038Ar 1 F4 .lobytes 65524 +00038Br 1 F5 .lobytes 65525 +00038Cr 1 F6 .lobytes 65526 +00038Dr 1 F7 .lobytes 65527 +00038Er 1 F8 .lobytes 65528 +00038Fr 1 F9 .lobytes 65529 +000390r 1 FA .lobytes 65530 +000391r 1 FB .lobytes 65531 +000392r 1 FC .lobytes 65532 +000393r 1 FD .lobytes 65533 +000394r 1 FE .lobytes 65534 +000395r 1 FF .lobytes 65535 000396r 1 -000396r 1 ; hex values -000396r 1 00 .lobytes $0 -000397r 1 01 .lobytes $1 -000398r 1 02 .lobytes $2 -000399r 1 03 .lobytes $3 -00039Ar 1 04 .lobytes $4 -00039Br 1 05 .lobytes $5 -00039Cr 1 06 .lobytes $6 -00039Dr 1 07 .lobytes $7 -00039Er 1 08 .lobytes $8 -00039Fr 1 09 .lobytes $9 -0003A0r 1 0A .lobytes $a -0003A1r 1 0B .lobytes $b -0003A2r 1 0C .lobytes $c -0003A3r 1 0D .lobytes $d -0003A4r 1 0E .lobytes $e -0003A5r 1 0F .lobytes $f -0003A6r 1 10 .lobytes $10 -0003A7r 1 11 .lobytes $11 -0003A8r 1 12 .lobytes $12 -0003A9r 1 13 .lobytes $13 -0003AAr 1 70 .lobytes $70 -0003ABr 1 71 .lobytes $71 -0003ACr 1 72 .lobytes $72 -0003ADr 1 73 .lobytes $73 -0003AEr 1 74 .lobytes $74 -0003AFr 1 75 .lobytes $75 -0003B0r 1 76 .lobytes $76 -0003B1r 1 77 .lobytes $77 -0003B2r 1 78 .lobytes $78 -0003B3r 1 79 .lobytes $79 -0003B4r 1 7A .lobytes $7a -0003B5r 1 7B .lobytes $7b -0003B6r 1 7C .lobytes $7c -0003B7r 1 7D .lobytes $7d -0003B8r 1 7E .lobytes $7e -0003B9r 1 7F .lobytes $7f -0003BAr 1 80 .lobytes $80 -0003BBr 1 81 .lobytes $81 -0003BCr 1 82 .lobytes $82 -0003BDr 1 83 .lobytes $83 -0003BEr 1 84 .lobytes $84 -0003BFr 1 85 .lobytes $85 -0003C0r 1 86 .lobytes $86 -0003C1r 1 F0 .lobytes $f0 -0003C2r 1 F1 .lobytes $f1 -0003C3r 1 F2 .lobytes $f2 -0003C4r 1 F3 .lobytes $f3 -0003C5r 1 F4 .lobytes $f4 -0003C6r 1 F5 .lobytes $f5 -0003C7r 1 F6 .lobytes $f6 -0003C8r 1 F7 .lobytes $f7 -0003C9r 1 F8 .lobytes $f8 -0003CAr 1 F9 .lobytes $f9 -0003CBr 1 FA .lobytes $fa -0003CCr 1 FB .lobytes $fb -0003CDr 1 FC .lobytes $fc -0003CEr 1 FD .lobytes $fd -0003CFr 1 FE .lobytes $fe -0003D0r 1 FF .lobytes $ff -0003D1r 1 00 .lobytes $100 -0003D2r 1 01 .lobytes $101 -0003D3r 1 02 .lobytes $102 -0003D4r 1 03 .lobytes $103 -0003D5r 1 D2 .lobytes $fd2 -0003D6r 1 D3 .lobytes $fd3 -0003D7r 1 D4 .lobytes $fd4 -0003D8r 1 D5 .lobytes $fd5 -0003D9r 1 D6 .lobytes $fd6 -0003DAr 1 D7 .lobytes $fd7 -0003DBr 1 D8 .lobytes $fd8 -0003DCr 1 D9 .lobytes $fd9 -0003DDr 1 DA .lobytes $fda -0003DEr 1 DB .lobytes $fdb -0003DFr 1 DC .lobytes $fdc -0003E0r 1 DD .lobytes $fdd -0003E1r 1 DE .lobytes $fde -0003E2r 1 DF .lobytes $fdf -0003E3r 1 E0 .lobytes $fe0 -0003E4r 1 E1 .lobytes $fe1 -0003E5r 1 E2 .lobytes $fe2 -0003E6r 1 E3 .lobytes $fe3 -0003E7r 1 E4 .lobytes $fe4 -0003E8r 1 E5 .lobytes $fe5 -0003E9r 1 E6 .lobytes $fe6 -0003EAr 1 E7 .lobytes $fe7 -0003EBr 1 E8 .lobytes $fe8 -0003ECr 1 E9 .lobytes $fe9 -0003EDr 1 EA .lobytes $fea -0003EEr 1 EB .lobytes $feb -0003EFr 1 EC .lobytes $fec -0003F0r 1 ED .lobytes $fed -0003F1r 1 EE .lobytes $fee -0003F2r 1 EF .lobytes $fef -0003F3r 1 F0 .lobytes $ff0 -0003F4r 1 F1 .lobytes $ff1 -0003F5r 1 F2 .lobytes $ff2 -0003F6r 1 F3 .lobytes $ff3 -0003F7r 1 F4 .lobytes $ff4 -0003F8r 1 F5 .lobytes $ff5 -0003F9r 1 F6 .lobytes $ff6 -0003FAr 1 F7 .lobytes $ff7 -0003FBr 1 F8 .lobytes $ff8 -0003FCr 1 F9 .lobytes $ff9 -0003FDr 1 FA .lobytes $ffa -0003FEr 1 FB .lobytes $ffb -0003FFr 1 FC .lobytes $ffc -000400r 1 FD .lobytes $ffd -000401r 1 FE .lobytes $ffe -000402r 1 FF .lobytes $fff -000403r 1 00 .lobytes $1000 -000404r 1 01 .lobytes $1001 -000405r 1 02 .lobytes $1002 -000406r 1 03 .lobytes $1003 -000407r 1 04 .lobytes $1004 -000408r 1 05 .lobytes $1005 -000409r 1 06 .lobytes $1006 -00040Ar 1 07 .lobytes $1007 -00040Br 1 08 .lobytes $1008 -00040Cr 1 F0 .lobytes $7ff0 -00040Dr 1 F1 .lobytes $7ff1 -00040Er 1 F2 .lobytes $7ff2 -00040Fr 1 F3 .lobytes $7ff3 -000410r 1 F4 .lobytes $7ff4 -000411r 1 F5 .lobytes $7ff5 -000412r 1 F6 .lobytes $7ff6 -000413r 1 F7 .lobytes $7ff7 -000414r 1 F8 .lobytes $7ff8 -000415r 1 F9 .lobytes $7ff9 -000416r 1 FA .lobytes $7ffa -000417r 1 FB .lobytes $7ffb -000418r 1 FC .lobytes $7ffc -000419r 1 FD .lobytes $7ffd -00041Ar 1 FE .lobytes $7ffe -00041Br 1 FF .lobytes $7fff -00041Cr 1 00 .lobytes $8000 -00041Dr 1 01 .lobytes $8001 -00041Er 1 02 .lobytes $8002 -00041Fr 1 03 .lobytes $8003 -000420r 1 04 .lobytes $8004 -000421r 1 05 .lobytes $8005 -000422r 1 06 .lobytes $8006 -000423r 1 07 .lobytes $8007 -000424r 1 08 .lobytes $8008 -000425r 1 09 .lobytes $8009 -000426r 1 0A .lobytes $800a -000427r 1 0B .lobytes $800b -000428r 1 E1 .lobytes $9fe1 -000429r 1 E2 .lobytes $9fe2 -00042Ar 1 E3 .lobytes $9fe3 -00042Br 1 E4 .lobytes $9fe4 -00042Cr 1 E5 .lobytes $9fe5 -00042Dr 1 E6 .lobytes $9fe6 -00042Er 1 E7 .lobytes $9fe7 -00042Fr 1 E8 .lobytes $9fe8 -000430r 1 E9 .lobytes $9fe9 -000431r 1 EA .lobytes $9fea -000432r 1 EB .lobytes $9feb -000433r 1 EC .lobytes $9fec -000434r 1 ED .lobytes $9fed -000435r 1 EE .lobytes $9fee -000436r 1 EF .lobytes $9fef -000437r 1 F0 .lobytes $9ff0 -000438r 1 F1 .lobytes $9ff1 -000439r 1 F2 .lobytes $9ff2 -00043Ar 1 F3 .lobytes $9ff3 -00043Br 1 F4 .lobytes $9ff4 -00043Cr 1 F5 .lobytes $9ff5 -00043Dr 1 F6 .lobytes $9ff6 -00043Er 1 F7 .lobytes $9ff7 -00043Fr 1 F8 .lobytes $9ff8 -000440r 1 F9 .lobytes $9ff9 -000441r 1 FA .lobytes $9ffa -000442r 1 FB .lobytes $9ffb -000443r 1 FC .lobytes $9ffc -000444r 1 FD .lobytes $9ffd -000445r 1 FE .lobytes $9ffe -000446r 1 FF .lobytes $9fff -000447r 1 00 .lobytes $a000 -000448r 1 01 .lobytes $a001 -000449r 1 02 .lobytes $a002 -00044Ar 1 03 .lobytes $a003 -00044Br 1 04 .lobytes $a004 -00044Cr 1 05 .lobytes $a005 -00044Dr 1 06 .lobytes $a006 -00044Er 1 07 .lobytes $a007 -00044Fr 1 08 .lobytes $a008 -000450r 1 09 .lobytes $a009 -000451r 1 0A .lobytes $a00a -000452r 1 0B .lobytes $a00b -000453r 1 0C .lobytes $a00c -000454r 1 0D .lobytes $a00d -000455r 1 0E .lobytes $a00e -000456r 1 0F .lobytes $a00f -000457r 1 E1 .lobytes $afe1 -000458r 1 E2 .lobytes $afe2 -000459r 1 E3 .lobytes $afe3 -00045Ar 1 E4 .lobytes $afe4 -00045Br 1 E5 .lobytes $afe5 -00045Cr 1 E6 .lobytes $afe6 -00045Dr 1 E7 .lobytes $afe7 -00045Er 1 E8 .lobytes $afe8 -00045Fr 1 E9 .lobytes $afe9 -000460r 1 EA .lobytes $afea -000461r 1 EB .lobytes $afeb -000462r 1 EC .lobytes $afec -000463r 1 ED .lobytes $afed -000464r 1 EE .lobytes $afee -000465r 1 EF .lobytes $afef -000466r 1 F0 .lobytes $aff0 -000467r 1 F1 .lobytes $aff1 -000468r 1 F2 .lobytes $aff2 -000469r 1 F3 .lobytes $aff3 -00046Ar 1 F4 .lobytes $aff4 -00046Br 1 F5 .lobytes $aff5 -00046Cr 1 F6 .lobytes $aff6 -00046Dr 1 F7 .lobytes $aff7 -00046Er 1 F8 .lobytes $aff8 -00046Fr 1 F9 .lobytes $aff9 -000470r 1 FA .lobytes $affa -000471r 1 FB .lobytes $affb -000472r 1 FC .lobytes $affc -000473r 1 FD .lobytes $affd -000474r 1 FE .lobytes $affe -000475r 1 FF .lobytes $afff -000476r 1 00 .lobytes $b000 -000477r 1 01 .lobytes $b001 -000478r 1 02 .lobytes $b002 -000479r 1 03 .lobytes $b003 -00047Ar 1 04 .lobytes $b004 -00047Br 1 05 .lobytes $b005 -00047Cr 1 06 .lobytes $b006 -00047Dr 1 07 .lobytes $b007 -00047Er 1 08 .lobytes $b008 -00047Fr 1 09 .lobytes $b009 -000480r 1 0A .lobytes $b00a -000481r 1 0B .lobytes $b00b -000482r 1 0C .lobytes $b00c -000483r 1 0D .lobytes $b00d -000484r 1 0E .lobytes $b00e -000485r 1 0F .lobytes $b00f -000486r 1 E1 .lobytes $bfe1 -000487r 1 E2 .lobytes $bfe2 -000488r 1 E3 .lobytes $bfe3 -000489r 1 E4 .lobytes $bfe4 -00048Ar 1 E5 .lobytes $bfe5 -00048Br 1 E6 .lobytes $bfe6 -00048Cr 1 E7 .lobytes $bfe7 -00048Dr 1 E8 .lobytes $bfe8 -00048Er 1 E9 .lobytes $bfe9 -00048Fr 1 EA .lobytes $bfea -000490r 1 EB .lobytes $bfeb -000491r 1 EC .lobytes $bfec -000492r 1 ED .lobytes $bfed -000493r 1 EE .lobytes $bfee -000494r 1 EF .lobytes $bfef -000495r 1 F0 .lobytes $bff0 -000496r 1 F1 .lobytes $bff1 -000497r 1 F2 .lobytes $bff2 -000498r 1 F3 .lobytes $bff3 -000499r 1 F4 .lobytes $bff4 -00049Ar 1 F5 .lobytes $bff5 -00049Br 1 F6 .lobytes $bff6 -00049Cr 1 F7 .lobytes $bff7 -00049Dr 1 F8 .lobytes $bff8 -00049Er 1 F9 .lobytes $bff9 -00049Fr 1 FA .lobytes $bffa -0004A0r 1 FB .lobytes $bffb -0004A1r 1 FC .lobytes $bffc -0004A2r 1 FD .lobytes $bffd -0004A3r 1 FE .lobytes $bffe -0004A4r 1 FF .lobytes $bfff -0004A5r 1 00 .lobytes $c000 -0004A6r 1 01 .lobytes $c001 -0004A7r 1 02 .lobytes $c002 -0004A8r 1 03 .lobytes $c003 -0004A9r 1 04 .lobytes $c004 -0004AAr 1 05 .lobytes $c005 -0004ABr 1 06 .lobytes $c006 -0004ACr 1 07 .lobytes $c007 -0004ADr 1 08 .lobytes $c008 -0004AEr 1 09 .lobytes $c009 -0004AFr 1 0A .lobytes $c00a -0004B0r 1 0B .lobytes $c00b -0004B1r 1 0C .lobytes $c00c -0004B2r 1 0D .lobytes $c00d -0004B3r 1 0E .lobytes $c00e -0004B4r 1 0F .lobytes $c00f -0004B5r 1 E1 .lobytes $cfe1 -0004B6r 1 E2 .lobytes $cfe2 -0004B7r 1 E3 .lobytes $cfe3 -0004B8r 1 E4 .lobytes $cfe4 -0004B9r 1 E5 .lobytes $cfe5 -0004BAr 1 E6 .lobytes $cfe6 -0004BBr 1 E7 .lobytes $cfe7 -0004BCr 1 E8 .lobytes $cfe8 -0004BDr 1 E9 .lobytes $cfe9 -0004BEr 1 EA .lobytes $cfea -0004BFr 1 EB .lobytes $cfeb -0004C0r 1 EC .lobytes $cfec -0004C1r 1 ED .lobytes $cfed -0004C2r 1 EE .lobytes $cfee -0004C3r 1 EF .lobytes $cfef -0004C4r 1 F0 .lobytes $cff0 -0004C5r 1 F1 .lobytes $cff1 -0004C6r 1 F2 .lobytes $cff2 -0004C7r 1 F3 .lobytes $cff3 -0004C8r 1 F4 .lobytes $cff4 -0004C9r 1 F5 .lobytes $cff5 -0004CAr 1 F6 .lobytes $cff6 -0004CBr 1 F7 .lobytes $cff7 -0004CCr 1 F8 .lobytes $cff8 -0004CDr 1 F9 .lobytes $cff9 -0004CEr 1 FA .lobytes $cffa -0004CFr 1 FB .lobytes $cffb -0004D0r 1 FC .lobytes $cffc -0004D1r 1 FD .lobytes $cffd -0004D2r 1 FE .lobytes $cffe -0004D3r 1 FF .lobytes $cfff -0004D4r 1 00 .lobytes $d000 -0004D5r 1 01 .lobytes $d001 -0004D6r 1 02 .lobytes $d002 -0004D7r 1 03 .lobytes $d003 -0004D8r 1 04 .lobytes $d004 -0004D9r 1 05 .lobytes $d005 -0004DAr 1 06 .lobytes $d006 -0004DBr 1 07 .lobytes $d007 -0004DCr 1 08 .lobytes $d008 -0004DDr 1 09 .lobytes $d009 -0004DEr 1 0A .lobytes $d00a -0004DFr 1 0B .lobytes $d00b -0004E0r 1 0C .lobytes $d00c -0004E1r 1 0D .lobytes $d00d -0004E2r 1 0E .lobytes $d00e -0004E3r 1 0F .lobytes $d00f -0004E4r 1 E1 .lobytes $dfe1 -0004E5r 1 E2 .lobytes $dfe2 -0004E6r 1 E3 .lobytes $dfe3 -0004E7r 1 E4 .lobytes $dfe4 -0004E8r 1 E5 .lobytes $dfe5 -0004E9r 1 E6 .lobytes $dfe6 -0004EAr 1 E7 .lobytes $dfe7 -0004EBr 1 E8 .lobytes $dfe8 -0004ECr 1 E9 .lobytes $dfe9 -0004EDr 1 EA .lobytes $dfea -0004EEr 1 EB .lobytes $dfeb -0004EFr 1 EC .lobytes $dfec -0004F0r 1 ED .lobytes $dfed -0004F1r 1 EE .lobytes $dfee -0004F2r 1 EF .lobytes $dfef -0004F3r 1 F0 .lobytes $dff0 -0004F4r 1 F1 .lobytes $dff1 -0004F5r 1 F2 .lobytes $dff2 -0004F6r 1 F3 .lobytes $dff3 -0004F7r 1 F4 .lobytes $dff4 -0004F8r 1 F5 .lobytes $dff5 -0004F9r 1 F6 .lobytes $dff6 -0004FAr 1 F7 .lobytes $dff7 -0004FBr 1 F8 .lobytes $dff8 -0004FCr 1 F9 .lobytes $dff9 -0004FDr 1 FA .lobytes $dffa -0004FEr 1 FB .lobytes $dffb -0004FFr 1 FC .lobytes $dffc -000500r 1 FD .lobytes $dffd -000501r 1 FE .lobytes $dffe -000502r 1 FF .lobytes $dfff -000503r 1 00 .lobytes $e000 -000504r 1 01 .lobytes $e001 -000505r 1 02 .lobytes $e002 -000506r 1 03 .lobytes $e003 -000507r 1 04 .lobytes $e004 -000508r 1 05 .lobytes $e005 -000509r 1 06 .lobytes $e006 -00050Ar 1 07 .lobytes $e007 -00050Br 1 08 .lobytes $e008 -00050Cr 1 09 .lobytes $e009 -00050Dr 1 0A .lobytes $e00a -00050Er 1 0B .lobytes $e00b -00050Fr 1 0C .lobytes $e00c -000510r 1 0D .lobytes $e00d -000511r 1 0E .lobytes $e00e -000512r 1 0F .lobytes $e00f -000513r 1 E1 .lobytes $efe1 -000514r 1 E2 .lobytes $efe2 -000515r 1 E3 .lobytes $efe3 -000516r 1 E4 .lobytes $efe4 -000517r 1 E5 .lobytes $efe5 -000518r 1 E6 .lobytes $efe6 -000519r 1 E7 .lobytes $efe7 -00051Ar 1 E8 .lobytes $efe8 -00051Br 1 E9 .lobytes $efe9 -00051Cr 1 EA .lobytes $efea -00051Dr 1 EB .lobytes $efeb -00051Er 1 EC .lobytes $efec -00051Fr 1 ED .lobytes $efed -000520r 1 EE .lobytes $efee -000521r 1 EF .lobytes $efef -000522r 1 F0 .lobytes $eff0 -000523r 1 F1 .lobytes $eff1 -000524r 1 F2 .lobytes $eff2 -000525r 1 F3 .lobytes $eff3 -000526r 1 F4 .lobytes $eff4 -000527r 1 F5 .lobytes $eff5 -000528r 1 F6 .lobytes $eff6 -000529r 1 F7 .lobytes $eff7 -00052Ar 1 F8 .lobytes $eff8 -00052Br 1 F9 .lobytes $eff9 -00052Cr 1 FA .lobytes $effa -00052Dr 1 FB .lobytes $effb -00052Er 1 FC .lobytes $effc -00052Fr 1 FD .lobytes $effd -000530r 1 FE .lobytes $effe -000531r 1 FF .lobytes $efff -000532r 1 00 .lobytes $f000 -000533r 1 01 .lobytes $f001 -000534r 1 02 .lobytes $f002 -000535r 1 03 .lobytes $f003 -000536r 1 04 .lobytes $f004 -000537r 1 05 .lobytes $f005 -000538r 1 06 .lobytes $f006 -000539r 1 07 .lobytes $f007 -00053Ar 1 08 .lobytes $f008 -00053Br 1 09 .lobytes $f009 -00053Cr 1 0A .lobytes $f00a -00053Dr 1 0B .lobytes $f00b -00053Er 1 0C .lobytes $f00c -00053Fr 1 0D .lobytes $f00d -000540r 1 0E .lobytes $f00e -000541r 1 0F .lobytes $f00f -000542r 1 E1 .lobytes $ffe1 -000543r 1 E2 .lobytes $ffe2 -000544r 1 E3 .lobytes $ffe3 -000545r 1 E4 .lobytes $ffe4 -000546r 1 E5 .lobytes $ffe5 -000547r 1 E6 .lobytes $ffe6 -000548r 1 E7 .lobytes $ffe7 -000549r 1 E8 .lobytes $ffe8 -00054Ar 1 E9 .lobytes $ffe9 -00054Br 1 EA .lobytes $ffea -00054Cr 1 EB .lobytes $ffeb -00054Dr 1 EC .lobytes $ffec -00054Er 1 ED .lobytes $ffed -00054Fr 1 EE .lobytes $ffee -000550r 1 EF .lobytes $ffef -000551r 1 F0 .lobytes $fff0 -000552r 1 F1 .lobytes $fff1 -000553r 1 F2 .lobytes $fff2 -000554r 1 F3 .lobytes $fff3 -000555r 1 F4 .lobytes $fff4 -000556r 1 F5 .lobytes $fff5 -000557r 1 F6 .lobytes $fff6 -000558r 1 F7 .lobytes $fff7 -000559r 1 F8 .lobytes $fff8 -00055Ar 1 F9 .lobytes $fff9 -00055Br 1 FA .lobytes $fffa -00055Cr 1 FB .lobytes $fffb -00055Dr 1 FC .lobytes $fffc -00055Er 1 FD .lobytes $fffd -00055Fr 1 FE .lobytes $fffe -000560r 1 FF .lobytes $ffff +000396r 1 ; hex values +000396r 1 00 .lobytes $0 +000397r 1 01 .lobytes $1 +000398r 1 02 .lobytes $2 +000399r 1 03 .lobytes $3 +00039Ar 1 04 .lobytes $4 +00039Br 1 05 .lobytes $5 +00039Cr 1 06 .lobytes $6 +00039Dr 1 07 .lobytes $7 +00039Er 1 08 .lobytes $8 +00039Fr 1 09 .lobytes $9 +0003A0r 1 0A .lobytes $a +0003A1r 1 0B .lobytes $b +0003A2r 1 0C .lobytes $c +0003A3r 1 0D .lobytes $d +0003A4r 1 0E .lobytes $e +0003A5r 1 0F .lobytes $f +0003A6r 1 10 .lobytes $10 +0003A7r 1 11 .lobytes $11 +0003A8r 1 12 .lobytes $12 +0003A9r 1 13 .lobytes $13 +0003AAr 1 70 .lobytes $70 +0003ABr 1 71 .lobytes $71 +0003ACr 1 72 .lobytes $72 +0003ADr 1 73 .lobytes $73 +0003AEr 1 74 .lobytes $74 +0003AFr 1 75 .lobytes $75 +0003B0r 1 76 .lobytes $76 +0003B1r 1 77 .lobytes $77 +0003B2r 1 78 .lobytes $78 +0003B3r 1 79 .lobytes $79 +0003B4r 1 7A .lobytes $7a +0003B5r 1 7B .lobytes $7b +0003B6r 1 7C .lobytes $7c +0003B7r 1 7D .lobytes $7d +0003B8r 1 7E .lobytes $7e +0003B9r 1 7F .lobytes $7f +0003BAr 1 80 .lobytes $80 +0003BBr 1 81 .lobytes $81 +0003BCr 1 82 .lobytes $82 +0003BDr 1 83 .lobytes $83 +0003BEr 1 84 .lobytes $84 +0003BFr 1 85 .lobytes $85 +0003C0r 1 86 .lobytes $86 +0003C1r 1 F0 .lobytes $f0 +0003C2r 1 F1 .lobytes $f1 +0003C3r 1 F2 .lobytes $f2 +0003C4r 1 F3 .lobytes $f3 +0003C5r 1 F4 .lobytes $f4 +0003C6r 1 F5 .lobytes $f5 +0003C7r 1 F6 .lobytes $f6 +0003C8r 1 F7 .lobytes $f7 +0003C9r 1 F8 .lobytes $f8 +0003CAr 1 F9 .lobytes $f9 +0003CBr 1 FA .lobytes $fa +0003CCr 1 FB .lobytes $fb +0003CDr 1 FC .lobytes $fc +0003CEr 1 FD .lobytes $fd +0003CFr 1 FE .lobytes $fe +0003D0r 1 FF .lobytes $ff +0003D1r 1 00 .lobytes $100 +0003D2r 1 01 .lobytes $101 +0003D3r 1 02 .lobytes $102 +0003D4r 1 03 .lobytes $103 +0003D5r 1 D2 .lobytes $fd2 +0003D6r 1 D3 .lobytes $fd3 +0003D7r 1 D4 .lobytes $fd4 +0003D8r 1 D5 .lobytes $fd5 +0003D9r 1 D6 .lobytes $fd6 +0003DAr 1 D7 .lobytes $fd7 +0003DBr 1 D8 .lobytes $fd8 +0003DCr 1 D9 .lobytes $fd9 +0003DDr 1 DA .lobytes $fda +0003DEr 1 DB .lobytes $fdb +0003DFr 1 DC .lobytes $fdc +0003E0r 1 DD .lobytes $fdd +0003E1r 1 DE .lobytes $fde +0003E2r 1 DF .lobytes $fdf +0003E3r 1 E0 .lobytes $fe0 +0003E4r 1 E1 .lobytes $fe1 +0003E5r 1 E2 .lobytes $fe2 +0003E6r 1 E3 .lobytes $fe3 +0003E7r 1 E4 .lobytes $fe4 +0003E8r 1 E5 .lobytes $fe5 +0003E9r 1 E6 .lobytes $fe6 +0003EAr 1 E7 .lobytes $fe7 +0003EBr 1 E8 .lobytes $fe8 +0003ECr 1 E9 .lobytes $fe9 +0003EDr 1 EA .lobytes $fea +0003EEr 1 EB .lobytes $feb +0003EFr 1 EC .lobytes $fec +0003F0r 1 ED .lobytes $fed +0003F1r 1 EE .lobytes $fee +0003F2r 1 EF .lobytes $fef +0003F3r 1 F0 .lobytes $ff0 +0003F4r 1 F1 .lobytes $ff1 +0003F5r 1 F2 .lobytes $ff2 +0003F6r 1 F3 .lobytes $ff3 +0003F7r 1 F4 .lobytes $ff4 +0003F8r 1 F5 .lobytes $ff5 +0003F9r 1 F6 .lobytes $ff6 +0003FAr 1 F7 .lobytes $ff7 +0003FBr 1 F8 .lobytes $ff8 +0003FCr 1 F9 .lobytes $ff9 +0003FDr 1 FA .lobytes $ffa +0003FEr 1 FB .lobytes $ffb +0003FFr 1 FC .lobytes $ffc +000400r 1 FD .lobytes $ffd +000401r 1 FE .lobytes $ffe +000402r 1 FF .lobytes $fff +000403r 1 00 .lobytes $1000 +000404r 1 01 .lobytes $1001 +000405r 1 02 .lobytes $1002 +000406r 1 03 .lobytes $1003 +000407r 1 04 .lobytes $1004 +000408r 1 05 .lobytes $1005 +000409r 1 06 .lobytes $1006 +00040Ar 1 07 .lobytes $1007 +00040Br 1 08 .lobytes $1008 +00040Cr 1 F0 .lobytes $7ff0 +00040Dr 1 F1 .lobytes $7ff1 +00040Er 1 F2 .lobytes $7ff2 +00040Fr 1 F3 .lobytes $7ff3 +000410r 1 F4 .lobytes $7ff4 +000411r 1 F5 .lobytes $7ff5 +000412r 1 F6 .lobytes $7ff6 +000413r 1 F7 .lobytes $7ff7 +000414r 1 F8 .lobytes $7ff8 +000415r 1 F9 .lobytes $7ff9 +000416r 1 FA .lobytes $7ffa +000417r 1 FB .lobytes $7ffb +000418r 1 FC .lobytes $7ffc +000419r 1 FD .lobytes $7ffd +00041Ar 1 FE .lobytes $7ffe +00041Br 1 FF .lobytes $7fff +00041Cr 1 00 .lobytes $8000 +00041Dr 1 01 .lobytes $8001 +00041Er 1 02 .lobytes $8002 +00041Fr 1 03 .lobytes $8003 +000420r 1 04 .lobytes $8004 +000421r 1 05 .lobytes $8005 +000422r 1 06 .lobytes $8006 +000423r 1 07 .lobytes $8007 +000424r 1 08 .lobytes $8008 +000425r 1 09 .lobytes $8009 +000426r 1 0A .lobytes $800a +000427r 1 0B .lobytes $800b +000428r 1 E1 .lobytes $9fe1 +000429r 1 E2 .lobytes $9fe2 +00042Ar 1 E3 .lobytes $9fe3 +00042Br 1 E4 .lobytes $9fe4 +00042Cr 1 E5 .lobytes $9fe5 +00042Dr 1 E6 .lobytes $9fe6 +00042Er 1 E7 .lobytes $9fe7 +00042Fr 1 E8 .lobytes $9fe8 +000430r 1 E9 .lobytes $9fe9 +000431r 1 EA .lobytes $9fea +000432r 1 EB .lobytes $9feb +000433r 1 EC .lobytes $9fec +000434r 1 ED .lobytes $9fed +000435r 1 EE .lobytes $9fee +000436r 1 EF .lobytes $9fef +000437r 1 F0 .lobytes $9ff0 +000438r 1 F1 .lobytes $9ff1 +000439r 1 F2 .lobytes $9ff2 +00043Ar 1 F3 .lobytes $9ff3 +00043Br 1 F4 .lobytes $9ff4 +00043Cr 1 F5 .lobytes $9ff5 +00043Dr 1 F6 .lobytes $9ff6 +00043Er 1 F7 .lobytes $9ff7 +00043Fr 1 F8 .lobytes $9ff8 +000440r 1 F9 .lobytes $9ff9 +000441r 1 FA .lobytes $9ffa +000442r 1 FB .lobytes $9ffb +000443r 1 FC .lobytes $9ffc +000444r 1 FD .lobytes $9ffd +000445r 1 FE .lobytes $9ffe +000446r 1 FF .lobytes $9fff +000447r 1 00 .lobytes $a000 +000448r 1 01 .lobytes $a001 +000449r 1 02 .lobytes $a002 +00044Ar 1 03 .lobytes $a003 +00044Br 1 04 .lobytes $a004 +00044Cr 1 05 .lobytes $a005 +00044Dr 1 06 .lobytes $a006 +00044Er 1 07 .lobytes $a007 +00044Fr 1 08 .lobytes $a008 +000450r 1 09 .lobytes $a009 +000451r 1 0A .lobytes $a00a +000452r 1 0B .lobytes $a00b +000453r 1 0C .lobytes $a00c +000454r 1 0D .lobytes $a00d +000455r 1 0E .lobytes $a00e +000456r 1 0F .lobytes $a00f +000457r 1 E1 .lobytes $afe1 +000458r 1 E2 .lobytes $afe2 +000459r 1 E3 .lobytes $afe3 +00045Ar 1 E4 .lobytes $afe4 +00045Br 1 E5 .lobytes $afe5 +00045Cr 1 E6 .lobytes $afe6 +00045Dr 1 E7 .lobytes $afe7 +00045Er 1 E8 .lobytes $afe8 +00045Fr 1 E9 .lobytes $afe9 +000460r 1 EA .lobytes $afea +000461r 1 EB .lobytes $afeb +000462r 1 EC .lobytes $afec +000463r 1 ED .lobytes $afed +000464r 1 EE .lobytes $afee +000465r 1 EF .lobytes $afef +000466r 1 F0 .lobytes $aff0 +000467r 1 F1 .lobytes $aff1 +000468r 1 F2 .lobytes $aff2 +000469r 1 F3 .lobytes $aff3 +00046Ar 1 F4 .lobytes $aff4 +00046Br 1 F5 .lobytes $aff5 +00046Cr 1 F6 .lobytes $aff6 +00046Dr 1 F7 .lobytes $aff7 +00046Er 1 F8 .lobytes $aff8 +00046Fr 1 F9 .lobytes $aff9 +000470r 1 FA .lobytes $affa +000471r 1 FB .lobytes $affb +000472r 1 FC .lobytes $affc +000473r 1 FD .lobytes $affd +000474r 1 FE .lobytes $affe +000475r 1 FF .lobytes $afff +000476r 1 00 .lobytes $b000 +000477r 1 01 .lobytes $b001 +000478r 1 02 .lobytes $b002 +000479r 1 03 .lobytes $b003 +00047Ar 1 04 .lobytes $b004 +00047Br 1 05 .lobytes $b005 +00047Cr 1 06 .lobytes $b006 +00047Dr 1 07 .lobytes $b007 +00047Er 1 08 .lobytes $b008 +00047Fr 1 09 .lobytes $b009 +000480r 1 0A .lobytes $b00a +000481r 1 0B .lobytes $b00b +000482r 1 0C .lobytes $b00c +000483r 1 0D .lobytes $b00d +000484r 1 0E .lobytes $b00e +000485r 1 0F .lobytes $b00f +000486r 1 E1 .lobytes $bfe1 +000487r 1 E2 .lobytes $bfe2 +000488r 1 E3 .lobytes $bfe3 +000489r 1 E4 .lobytes $bfe4 +00048Ar 1 E5 .lobytes $bfe5 +00048Br 1 E6 .lobytes $bfe6 +00048Cr 1 E7 .lobytes $bfe7 +00048Dr 1 E8 .lobytes $bfe8 +00048Er 1 E9 .lobytes $bfe9 +00048Fr 1 EA .lobytes $bfea +000490r 1 EB .lobytes $bfeb +000491r 1 EC .lobytes $bfec +000492r 1 ED .lobytes $bfed +000493r 1 EE .lobytes $bfee +000494r 1 EF .lobytes $bfef +000495r 1 F0 .lobytes $bff0 +000496r 1 F1 .lobytes $bff1 +000497r 1 F2 .lobytes $bff2 +000498r 1 F3 .lobytes $bff3 +000499r 1 F4 .lobytes $bff4 +00049Ar 1 F5 .lobytes $bff5 +00049Br 1 F6 .lobytes $bff6 +00049Cr 1 F7 .lobytes $bff7 +00049Dr 1 F8 .lobytes $bff8 +00049Er 1 F9 .lobytes $bff9 +00049Fr 1 FA .lobytes $bffa +0004A0r 1 FB .lobytes $bffb +0004A1r 1 FC .lobytes $bffc +0004A2r 1 FD .lobytes $bffd +0004A3r 1 FE .lobytes $bffe +0004A4r 1 FF .lobytes $bfff +0004A5r 1 00 .lobytes $c000 +0004A6r 1 01 .lobytes $c001 +0004A7r 1 02 .lobytes $c002 +0004A8r 1 03 .lobytes $c003 +0004A9r 1 04 .lobytes $c004 +0004AAr 1 05 .lobytes $c005 +0004ABr 1 06 .lobytes $c006 +0004ACr 1 07 .lobytes $c007 +0004ADr 1 08 .lobytes $c008 +0004AEr 1 09 .lobytes $c009 +0004AFr 1 0A .lobytes $c00a +0004B0r 1 0B .lobytes $c00b +0004B1r 1 0C .lobytes $c00c +0004B2r 1 0D .lobytes $c00d +0004B3r 1 0E .lobytes $c00e +0004B4r 1 0F .lobytes $c00f +0004B5r 1 E1 .lobytes $cfe1 +0004B6r 1 E2 .lobytes $cfe2 +0004B7r 1 E3 .lobytes $cfe3 +0004B8r 1 E4 .lobytes $cfe4 +0004B9r 1 E5 .lobytes $cfe5 +0004BAr 1 E6 .lobytes $cfe6 +0004BBr 1 E7 .lobytes $cfe7 +0004BCr 1 E8 .lobytes $cfe8 +0004BDr 1 E9 .lobytes $cfe9 +0004BEr 1 EA .lobytes $cfea +0004BFr 1 EB .lobytes $cfeb +0004C0r 1 EC .lobytes $cfec +0004C1r 1 ED .lobytes $cfed +0004C2r 1 EE .lobytes $cfee +0004C3r 1 EF .lobytes $cfef +0004C4r 1 F0 .lobytes $cff0 +0004C5r 1 F1 .lobytes $cff1 +0004C6r 1 F2 .lobytes $cff2 +0004C7r 1 F3 .lobytes $cff3 +0004C8r 1 F4 .lobytes $cff4 +0004C9r 1 F5 .lobytes $cff5 +0004CAr 1 F6 .lobytes $cff6 +0004CBr 1 F7 .lobytes $cff7 +0004CCr 1 F8 .lobytes $cff8 +0004CDr 1 F9 .lobytes $cff9 +0004CEr 1 FA .lobytes $cffa +0004CFr 1 FB .lobytes $cffb +0004D0r 1 FC .lobytes $cffc +0004D1r 1 FD .lobytes $cffd +0004D2r 1 FE .lobytes $cffe +0004D3r 1 FF .lobytes $cfff +0004D4r 1 00 .lobytes $d000 +0004D5r 1 01 .lobytes $d001 +0004D6r 1 02 .lobytes $d002 +0004D7r 1 03 .lobytes $d003 +0004D8r 1 04 .lobytes $d004 +0004D9r 1 05 .lobytes $d005 +0004DAr 1 06 .lobytes $d006 +0004DBr 1 07 .lobytes $d007 +0004DCr 1 08 .lobytes $d008 +0004DDr 1 09 .lobytes $d009 +0004DEr 1 0A .lobytes $d00a +0004DFr 1 0B .lobytes $d00b +0004E0r 1 0C .lobytes $d00c +0004E1r 1 0D .lobytes $d00d +0004E2r 1 0E .lobytes $d00e +0004E3r 1 0F .lobytes $d00f +0004E4r 1 E1 .lobytes $dfe1 +0004E5r 1 E2 .lobytes $dfe2 +0004E6r 1 E3 .lobytes $dfe3 +0004E7r 1 E4 .lobytes $dfe4 +0004E8r 1 E5 .lobytes $dfe5 +0004E9r 1 E6 .lobytes $dfe6 +0004EAr 1 E7 .lobytes $dfe7 +0004EBr 1 E8 .lobytes $dfe8 +0004ECr 1 E9 .lobytes $dfe9 +0004EDr 1 EA .lobytes $dfea +0004EEr 1 EB .lobytes $dfeb +0004EFr 1 EC .lobytes $dfec +0004F0r 1 ED .lobytes $dfed +0004F1r 1 EE .lobytes $dfee +0004F2r 1 EF .lobytes $dfef +0004F3r 1 F0 .lobytes $dff0 +0004F4r 1 F1 .lobytes $dff1 +0004F5r 1 F2 .lobytes $dff2 +0004F6r 1 F3 .lobytes $dff3 +0004F7r 1 F4 .lobytes $dff4 +0004F8r 1 F5 .lobytes $dff5 +0004F9r 1 F6 .lobytes $dff6 +0004FAr 1 F7 .lobytes $dff7 +0004FBr 1 F8 .lobytes $dff8 +0004FCr 1 F9 .lobytes $dff9 +0004FDr 1 FA .lobytes $dffa +0004FEr 1 FB .lobytes $dffb +0004FFr 1 FC .lobytes $dffc +000500r 1 FD .lobytes $dffd +000501r 1 FE .lobytes $dffe +000502r 1 FF .lobytes $dfff +000503r 1 00 .lobytes $e000 +000504r 1 01 .lobytes $e001 +000505r 1 02 .lobytes $e002 +000506r 1 03 .lobytes $e003 +000507r 1 04 .lobytes $e004 +000508r 1 05 .lobytes $e005 +000509r 1 06 .lobytes $e006 +00050Ar 1 07 .lobytes $e007 +00050Br 1 08 .lobytes $e008 +00050Cr 1 09 .lobytes $e009 +00050Dr 1 0A .lobytes $e00a +00050Er 1 0B .lobytes $e00b +00050Fr 1 0C .lobytes $e00c +000510r 1 0D .lobytes $e00d +000511r 1 0E .lobytes $e00e +000512r 1 0F .lobytes $e00f +000513r 1 E1 .lobytes $efe1 +000514r 1 E2 .lobytes $efe2 +000515r 1 E3 .lobytes $efe3 +000516r 1 E4 .lobytes $efe4 +000517r 1 E5 .lobytes $efe5 +000518r 1 E6 .lobytes $efe6 +000519r 1 E7 .lobytes $efe7 +00051Ar 1 E8 .lobytes $efe8 +00051Br 1 E9 .lobytes $efe9 +00051Cr 1 EA .lobytes $efea +00051Dr 1 EB .lobytes $efeb +00051Er 1 EC .lobytes $efec +00051Fr 1 ED .lobytes $efed +000520r 1 EE .lobytes $efee +000521r 1 EF .lobytes $efef +000522r 1 F0 .lobytes $eff0 +000523r 1 F1 .lobytes $eff1 +000524r 1 F2 .lobytes $eff2 +000525r 1 F3 .lobytes $eff3 +000526r 1 F4 .lobytes $eff4 +000527r 1 F5 .lobytes $eff5 +000528r 1 F6 .lobytes $eff6 +000529r 1 F7 .lobytes $eff7 +00052Ar 1 F8 .lobytes $eff8 +00052Br 1 F9 .lobytes $eff9 +00052Cr 1 FA .lobytes $effa +00052Dr 1 FB .lobytes $effb +00052Er 1 FC .lobytes $effc +00052Fr 1 FD .lobytes $effd +000530r 1 FE .lobytes $effe +000531r 1 FF .lobytes $efff +000532r 1 00 .lobytes $f000 +000533r 1 01 .lobytes $f001 +000534r 1 02 .lobytes $f002 +000535r 1 03 .lobytes $f003 +000536r 1 04 .lobytes $f004 +000537r 1 05 .lobytes $f005 +000538r 1 06 .lobytes $f006 +000539r 1 07 .lobytes $f007 +00053Ar 1 08 .lobytes $f008 +00053Br 1 09 .lobytes $f009 +00053Cr 1 0A .lobytes $f00a +00053Dr 1 0B .lobytes $f00b +00053Er 1 0C .lobytes $f00c +00053Fr 1 0D .lobytes $f00d +000540r 1 0E .lobytes $f00e +000541r 1 0F .lobytes $f00f +000542r 1 E1 .lobytes $ffe1 +000543r 1 E2 .lobytes $ffe2 +000544r 1 E3 .lobytes $ffe3 +000545r 1 E4 .lobytes $ffe4 +000546r 1 E5 .lobytes $ffe5 +000547r 1 E6 .lobytes $ffe6 +000548r 1 E7 .lobytes $ffe7 +000549r 1 E8 .lobytes $ffe8 +00054Ar 1 E9 .lobytes $ffe9 +00054Br 1 EA .lobytes $ffea +00054Cr 1 EB .lobytes $ffeb +00054Dr 1 EC .lobytes $ffec +00054Er 1 ED .lobytes $ffed +00054Fr 1 EE .lobytes $ffee +000550r 1 EF .lobytes $ffef +000551r 1 F0 .lobytes $fff0 +000552r 1 F1 .lobytes $fff1 +000553r 1 F2 .lobytes $fff2 +000554r 1 F3 .lobytes $fff3 +000555r 1 F4 .lobytes $fff4 +000556r 1 F5 .lobytes $fff5 +000557r 1 F6 .lobytes $fff6 +000558r 1 F7 .lobytes $fff7 +000559r 1 F8 .lobytes $fff8 +00055Ar 1 F9 .lobytes $fff9 +00055Br 1 FA .lobytes $fffa +00055Cr 1 FB .lobytes $fffb +00055Dr 1 FC .lobytes $fffc +00055Er 1 FD .lobytes $fffd +00055Fr 1 FE .lobytes $fffe +000560r 1 FF .lobytes $ffff 000561r 1 -000561r 1 ; hex values, uppercase -000561r 1 00 .lobytes $0 -000562r 1 01 .lobytes $1 -000563r 1 02 .lobytes $2 -000564r 1 03 .lobytes $3 -000565r 1 04 .lobytes $4 -000566r 1 05 .lobytes $5 -000567r 1 06 .lobytes $6 -000568r 1 07 .lobytes $7 -000569r 1 08 .lobytes $8 -00056Ar 1 09 .lobytes $9 -00056Br 1 0A .lobytes $A -00056Cr 1 0B .lobytes $B -00056Dr 1 0C .lobytes $C -00056Er 1 0D .lobytes $D -00056Fr 1 0E .lobytes $E -000570r 1 0F .lobytes $F -000571r 1 10 .lobytes $10 -000572r 1 11 .lobytes $11 -000573r 1 12 .lobytes $12 -000574r 1 13 .lobytes $13 -000575r 1 70 .lobytes $70 -000576r 1 71 .lobytes $71 -000577r 1 72 .lobytes $72 -000578r 1 73 .lobytes $73 -000579r 1 74 .lobytes $74 -00057Ar 1 75 .lobytes $75 -00057Br 1 76 .lobytes $76 -00057Cr 1 77 .lobytes $77 -00057Dr 1 78 .lobytes $78 -00057Er 1 79 .lobytes $79 -00057Fr 1 7A .lobytes $7A -000580r 1 7B .lobytes $7B -000581r 1 7C .lobytes $7C -000582r 1 7D .lobytes $7D -000583r 1 7E .lobytes $7E -000584r 1 7F .lobytes $7F -000585r 1 80 .lobytes $80 -000586r 1 81 .lobytes $81 -000587r 1 82 .lobytes $82 -000588r 1 83 .lobytes $83 -000589r 1 84 .lobytes $84 -00058Ar 1 85 .lobytes $85 -00058Br 1 86 .lobytes $86 -00058Cr 1 F0 .lobytes $F0 -00058Dr 1 F1 .lobytes $F1 -00058Er 1 F2 .lobytes $F2 -00058Fr 1 F3 .lobytes $F3 -000590r 1 F4 .lobytes $F4 -000591r 1 F5 .lobytes $F5 -000592r 1 F6 .lobytes $F6 -000593r 1 F7 .lobytes $F7 -000594r 1 F8 .lobytes $F8 -000595r 1 F9 .lobytes $F9 -000596r 1 FA .lobytes $FA -000597r 1 FB .lobytes $FB -000598r 1 FC .lobytes $FC -000599r 1 FD .lobytes $FD -00059Ar 1 FE .lobytes $FE -00059Br 1 FF .lobytes $FF -00059Cr 1 00 .lobytes $100 -00059Dr 1 01 .lobytes $101 -00059Er 1 02 .lobytes $102 -00059Fr 1 03 .lobytes $103 -0005A0r 1 D2 .lobytes $FD2 -0005A1r 1 D3 .lobytes $FD3 -0005A2r 1 D4 .lobytes $FD4 -0005A3r 1 D5 .lobytes $FD5 -0005A4r 1 D6 .lobytes $FD6 -0005A5r 1 D7 .lobytes $FD7 -0005A6r 1 D8 .lobytes $FD8 -0005A7r 1 D9 .lobytes $FD9 -0005A8r 1 DA .lobytes $FDA -0005A9r 1 DB .lobytes $FDB -0005AAr 1 DC .lobytes $FDC -0005ABr 1 DD .lobytes $FDD -0005ACr 1 DE .lobytes $FDE -0005ADr 1 DF .lobytes $FDF -0005AEr 1 E0 .lobytes $FE0 -0005AFr 1 E1 .lobytes $FE1 -0005B0r 1 E2 .lobytes $FE2 -0005B1r 1 E3 .lobytes $FE3 -0005B2r 1 E4 .lobytes $FE4 -0005B3r 1 E5 .lobytes $FE5 -0005B4r 1 E6 .lobytes $FE6 -0005B5r 1 E7 .lobytes $FE7 -0005B6r 1 E8 .lobytes $FE8 -0005B7r 1 E9 .lobytes $FE9 -0005B8r 1 EA .lobytes $FEA -0005B9r 1 EB .lobytes $FEB -0005BAr 1 EC .lobytes $FEC -0005BBr 1 ED .lobytes $FED -0005BCr 1 EE .lobytes $FEE -0005BDr 1 EF .lobytes $FEF -0005BEr 1 F0 .lobytes $FF0 -0005BFr 1 F1 .lobytes $FF1 -0005C0r 1 F2 .lobytes $FF2 -0005C1r 1 F3 .lobytes $FF3 -0005C2r 1 F4 .lobytes $FF4 -0005C3r 1 F5 .lobytes $FF5 -0005C4r 1 F6 .lobytes $FF6 -0005C5r 1 F7 .lobytes $FF7 -0005C6r 1 F8 .lobytes $FF8 -0005C7r 1 F9 .lobytes $FF9 -0005C8r 1 FA .lobytes $FFA -0005C9r 1 FB .lobytes $FFB -0005CAr 1 FC .lobytes $FFC -0005CBr 1 FD .lobytes $FFD -0005CCr 1 FE .lobytes $FFE -0005CDr 1 FF .lobytes $FFF -0005CEr 1 00 .lobytes $1000 -0005CFr 1 01 .lobytes $1001 -0005D0r 1 02 .lobytes $1002 -0005D1r 1 03 .lobytes $1003 -0005D2r 1 04 .lobytes $1004 -0005D3r 1 05 .lobytes $1005 -0005D4r 1 06 .lobytes $1006 -0005D5r 1 07 .lobytes $1007 -0005D6r 1 08 .lobytes $1008 -0005D7r 1 F0 .lobytes $7FF0 -0005D8r 1 F1 .lobytes $7FF1 -0005D9r 1 F2 .lobytes $7FF2 -0005DAr 1 F3 .lobytes $7FF3 -0005DBr 1 F4 .lobytes $7FF4 -0005DCr 1 F5 .lobytes $7FF5 -0005DDr 1 F6 .lobytes $7FF6 -0005DEr 1 F7 .lobytes $7FF7 -0005DFr 1 F8 .lobytes $7FF8 -0005E0r 1 F9 .lobytes $7FF9 -0005E1r 1 FA .lobytes $7FFA -0005E2r 1 FB .lobytes $7FFB -0005E3r 1 FC .lobytes $7FFC -0005E4r 1 FD .lobytes $7FFD -0005E5r 1 FE .lobytes $7FFE -0005E6r 1 FF .lobytes $7FFF -0005E7r 1 00 .lobytes $8000 -0005E8r 1 01 .lobytes $8001 -0005E9r 1 02 .lobytes $8002 -0005EAr 1 03 .lobytes $8003 -0005EBr 1 04 .lobytes $8004 -0005ECr 1 05 .lobytes $8005 -0005EDr 1 06 .lobytes $8006 -0005EEr 1 07 .lobytes $8007 -0005EFr 1 08 .lobytes $8008 -0005F0r 1 09 .lobytes $8009 -0005F1r 1 0A .lobytes $800A -0005F2r 1 0B .lobytes $800B -0005F3r 1 E1 .lobytes $9FE1 -0005F4r 1 E2 .lobytes $9FE2 -0005F5r 1 E3 .lobytes $9FE3 -0005F6r 1 E4 .lobytes $9FE4 -0005F7r 1 E5 .lobytes $9FE5 -0005F8r 1 E6 .lobytes $9FE6 -0005F9r 1 E7 .lobytes $9FE7 -0005FAr 1 E8 .lobytes $9FE8 -0005FBr 1 E9 .lobytes $9FE9 -0005FCr 1 EA .lobytes $9FEA -0005FDr 1 EB .lobytes $9FEB -0005FEr 1 EC .lobytes $9FEC -0005FFr 1 ED .lobytes $9FED -000600r 1 EE .lobytes $9FEE -000601r 1 EF .lobytes $9FEF -000602r 1 F0 .lobytes $9FF0 -000603r 1 F1 .lobytes $9FF1 -000604r 1 F2 .lobytes $9FF2 -000605r 1 F3 .lobytes $9FF3 -000606r 1 F4 .lobytes $9FF4 -000607r 1 F5 .lobytes $9FF5 -000608r 1 F6 .lobytes $9FF6 -000609r 1 F7 .lobytes $9FF7 -00060Ar 1 F8 .lobytes $9FF8 -00060Br 1 F9 .lobytes $9FF9 -00060Cr 1 FA .lobytes $9FFA -00060Dr 1 FB .lobytes $9FFB -00060Er 1 FC .lobytes $9FFC -00060Fr 1 FD .lobytes $9FFD -000610r 1 FE .lobytes $9FFE -000611r 1 FF .lobytes $9FFF -000612r 1 00 .lobytes $A000 -000613r 1 01 .lobytes $A001 -000614r 1 02 .lobytes $A002 -000615r 1 03 .lobytes $A003 -000616r 1 04 .lobytes $A004 -000617r 1 05 .lobytes $A005 -000618r 1 06 .lobytes $A006 -000619r 1 07 .lobytes $A007 -00061Ar 1 08 .lobytes $A008 -00061Br 1 09 .lobytes $A009 -00061Cr 1 0A .lobytes $A00A -00061Dr 1 0B .lobytes $A00B -00061Er 1 0C .lobytes $A00C -00061Fr 1 0D .lobytes $A00D -000620r 1 0E .lobytes $A00E -000621r 1 0F .lobytes $A00F -000622r 1 E1 .lobytes $AFE1 -000623r 1 E2 .lobytes $AFE2 -000624r 1 E3 .lobytes $AFE3 -000625r 1 E4 .lobytes $AFE4 -000626r 1 E5 .lobytes $AFE5 -000627r 1 E6 .lobytes $AFE6 -000628r 1 E7 .lobytes $AFE7 -000629r 1 E8 .lobytes $AFE8 -00062Ar 1 E9 .lobytes $AFE9 -00062Br 1 EA .lobytes $AFEA -00062Cr 1 EB .lobytes $AFEB -00062Dr 1 EC .lobytes $AFEC -00062Er 1 ED .lobytes $AFED -00062Fr 1 EE .lobytes $AFEE -000630r 1 EF .lobytes $AFEF -000631r 1 F0 .lobytes $AFF0 -000632r 1 F1 .lobytes $AFF1 -000633r 1 F2 .lobytes $AFF2 -000634r 1 F3 .lobytes $AFF3 -000635r 1 F4 .lobytes $AFF4 -000636r 1 F5 .lobytes $AFF5 -000637r 1 F6 .lobytes $AFF6 -000638r 1 F7 .lobytes $AFF7 -000639r 1 F8 .lobytes $AFF8 -00063Ar 1 F9 .lobytes $AFF9 -00063Br 1 FA .lobytes $AFFA -00063Cr 1 FB .lobytes $AFFB -00063Dr 1 FC .lobytes $AFFC -00063Er 1 FD .lobytes $AFFD -00063Fr 1 FE .lobytes $AFFE -000640r 1 FF .lobytes $AFFF -000641r 1 00 .lobytes $B000 -000642r 1 01 .lobytes $B001 -000643r 1 02 .lobytes $B002 -000644r 1 03 .lobytes $B003 -000645r 1 04 .lobytes $B004 -000646r 1 05 .lobytes $B005 -000647r 1 06 .lobytes $B006 -000648r 1 07 .lobytes $B007 -000649r 1 08 .lobytes $B008 -00064Ar 1 09 .lobytes $B009 -00064Br 1 0A .lobytes $B00A -00064Cr 1 0B .lobytes $B00B -00064Dr 1 0C .lobytes $B00C -00064Er 1 0D .lobytes $B00D -00064Fr 1 0E .lobytes $B00E -000650r 1 0F .lobytes $B00F -000651r 1 E1 .lobytes $BFE1 -000652r 1 E2 .lobytes $BFE2 -000653r 1 E3 .lobytes $BFE3 -000654r 1 E4 .lobytes $BFE4 -000655r 1 E5 .lobytes $BFE5 -000656r 1 E6 .lobytes $BFE6 -000657r 1 E7 .lobytes $BFE7 -000658r 1 E8 .lobytes $BFE8 -000659r 1 E9 .lobytes $BFE9 -00065Ar 1 EA .lobytes $BFEA -00065Br 1 EB .lobytes $BFEB -00065Cr 1 EC .lobytes $BFEC -00065Dr 1 ED .lobytes $BFED -00065Er 1 EE .lobytes $BFEE -00065Fr 1 EF .lobytes $BFEF -000660r 1 F0 .lobytes $BFF0 -000661r 1 F1 .lobytes $BFF1 -000662r 1 F2 .lobytes $BFF2 -000663r 1 F3 .lobytes $BFF3 -000664r 1 F4 .lobytes $BFF4 -000665r 1 F5 .lobytes $BFF5 -000666r 1 F6 .lobytes $BFF6 -000667r 1 F7 .lobytes $BFF7 -000668r 1 F8 .lobytes $BFF8 -000669r 1 F9 .lobytes $BFF9 -00066Ar 1 FA .lobytes $BFFA -00066Br 1 FB .lobytes $BFFB -00066Cr 1 FC .lobytes $BFFC -00066Dr 1 FD .lobytes $BFFD -00066Er 1 FE .lobytes $BFFE -00066Fr 1 FF .lobytes $BFFF -000670r 1 00 .lobytes $C000 -000671r 1 01 .lobytes $C001 -000672r 1 02 .lobytes $C002 -000673r 1 03 .lobytes $C003 -000674r 1 04 .lobytes $C004 -000675r 1 05 .lobytes $C005 -000676r 1 06 .lobytes $C006 -000677r 1 07 .lobytes $C007 -000678r 1 08 .lobytes $C008 -000679r 1 09 .lobytes $C009 -00067Ar 1 0A .lobytes $C00A -00067Br 1 0B .lobytes $C00B -00067Cr 1 0C .lobytes $C00C -00067Dr 1 0D .lobytes $C00D -00067Er 1 0E .lobytes $C00E -00067Fr 1 0F .lobytes $C00F -000680r 1 E1 .lobytes $CFE1 -000681r 1 E2 .lobytes $CFE2 -000682r 1 E3 .lobytes $CFE3 -000683r 1 E4 .lobytes $CFE4 -000684r 1 E5 .lobytes $CFE5 -000685r 1 E6 .lobytes $CFE6 -000686r 1 E7 .lobytes $CFE7 -000687r 1 E8 .lobytes $CFE8 -000688r 1 E9 .lobytes $CFE9 -000689r 1 EA .lobytes $CFEA -00068Ar 1 EB .lobytes $CFEB -00068Br 1 EC .lobytes $CFEC -00068Cr 1 ED .lobytes $CFED -00068Dr 1 EE .lobytes $CFEE -00068Er 1 EF .lobytes $CFEF -00068Fr 1 F0 .lobytes $CFF0 -000690r 1 F1 .lobytes $CFF1 -000691r 1 F2 .lobytes $CFF2 -000692r 1 F3 .lobytes $CFF3 -000693r 1 F4 .lobytes $CFF4 -000694r 1 F5 .lobytes $CFF5 -000695r 1 F6 .lobytes $CFF6 -000696r 1 F7 .lobytes $CFF7 -000697r 1 F8 .lobytes $CFF8 -000698r 1 F9 .lobytes $CFF9 -000699r 1 FA .lobytes $CFFA -00069Ar 1 FB .lobytes $CFFB -00069Br 1 FC .lobytes $CFFC -00069Cr 1 FD .lobytes $CFFD -00069Dr 1 FE .lobytes $CFFE -00069Er 1 FF .lobytes $CFFF -00069Fr 1 00 .lobytes $D000 -0006A0r 1 01 .lobytes $D001 -0006A1r 1 02 .lobytes $D002 -0006A2r 1 03 .lobytes $D003 -0006A3r 1 04 .lobytes $D004 -0006A4r 1 05 .lobytes $D005 -0006A5r 1 06 .lobytes $D006 -0006A6r 1 07 .lobytes $D007 -0006A7r 1 08 .lobytes $D008 -0006A8r 1 09 .lobytes $D009 -0006A9r 1 0A .lobytes $D00A -0006AAr 1 0B .lobytes $D00B -0006ABr 1 0C .lobytes $D00C -0006ACr 1 0D .lobytes $D00D -0006ADr 1 0E .lobytes $D00E -0006AEr 1 0F .lobytes $D00F -0006AFr 1 E1 .lobytes $DFE1 -0006B0r 1 E2 .lobytes $DFE2 -0006B1r 1 E3 .lobytes $DFE3 -0006B2r 1 E4 .lobytes $DFE4 -0006B3r 1 E5 .lobytes $DFE5 -0006B4r 1 E6 .lobytes $DFE6 -0006B5r 1 E7 .lobytes $DFE7 -0006B6r 1 E8 .lobytes $DFE8 -0006B7r 1 E9 .lobytes $DFE9 -0006B8r 1 EA .lobytes $DFEA -0006B9r 1 EB .lobytes $DFEB -0006BAr 1 EC .lobytes $DFEC -0006BBr 1 ED .lobytes $DFED -0006BCr 1 EE .lobytes $DFEE -0006BDr 1 EF .lobytes $DFEF -0006BEr 1 F0 .lobytes $DFF0 -0006BFr 1 F1 .lobytes $DFF1 -0006C0r 1 F2 .lobytes $DFF2 -0006C1r 1 F3 .lobytes $DFF3 -0006C2r 1 F4 .lobytes $DFF4 -0006C3r 1 F5 .lobytes $DFF5 -0006C4r 1 F6 .lobytes $DFF6 -0006C5r 1 F7 .lobytes $DFF7 -0006C6r 1 F8 .lobytes $DFF8 -0006C7r 1 F9 .lobytes $DFF9 -0006C8r 1 FA .lobytes $DFFA -0006C9r 1 FB .lobytes $DFFB -0006CAr 1 FC .lobytes $DFFC -0006CBr 1 FD .lobytes $DFFD -0006CCr 1 FE .lobytes $DFFE -0006CDr 1 FF .lobytes $DFFF -0006CEr 1 00 .lobytes $E000 -0006CFr 1 01 .lobytes $E001 -0006D0r 1 02 .lobytes $E002 -0006D1r 1 03 .lobytes $E003 -0006D2r 1 04 .lobytes $E004 -0006D3r 1 05 .lobytes $E005 -0006D4r 1 06 .lobytes $E006 -0006D5r 1 07 .lobytes $E007 -0006D6r 1 08 .lobytes $E008 -0006D7r 1 09 .lobytes $E009 -0006D8r 1 0A .lobytes $E00A -0006D9r 1 0B .lobytes $E00B -0006DAr 1 0C .lobytes $E00C -0006DBr 1 0D .lobytes $E00D -0006DCr 1 0E .lobytes $E00E -0006DDr 1 0F .lobytes $E00F -0006DEr 1 E1 .lobytes $EFE1 -0006DFr 1 E2 .lobytes $EFE2 -0006E0r 1 E3 .lobytes $EFE3 -0006E1r 1 E4 .lobytes $EFE4 -0006E2r 1 E5 .lobytes $EFE5 -0006E3r 1 E6 .lobytes $EFE6 -0006E4r 1 E7 .lobytes $EFE7 -0006E5r 1 E8 .lobytes $EFE8 -0006E6r 1 E9 .lobytes $EFE9 -0006E7r 1 EA .lobytes $EFEA -0006E8r 1 EB .lobytes $EFEB -0006E9r 1 EC .lobytes $EFEC -0006EAr 1 ED .lobytes $EFED -0006EBr 1 EE .lobytes $EFEE -0006ECr 1 EF .lobytes $EFEF -0006EDr 1 F0 .lobytes $EFF0 -0006EEr 1 F1 .lobytes $EFF1 -0006EFr 1 F2 .lobytes $EFF2 -0006F0r 1 F3 .lobytes $EFF3 -0006F1r 1 F4 .lobytes $EFF4 -0006F2r 1 F5 .lobytes $EFF5 -0006F3r 1 F6 .lobytes $EFF6 -0006F4r 1 F7 .lobytes $EFF7 -0006F5r 1 F8 .lobytes $EFF8 -0006F6r 1 F9 .lobytes $EFF9 -0006F7r 1 FA .lobytes $EFFA -0006F8r 1 FB .lobytes $EFFB -0006F9r 1 FC .lobytes $EFFC -0006FAr 1 FD .lobytes $EFFD -0006FBr 1 FE .lobytes $EFFE -0006FCr 1 FF .lobytes $EFFF -0006FDr 1 00 .lobytes $F000 -0006FEr 1 01 .lobytes $F001 -0006FFr 1 02 .lobytes $F002 -000700r 1 03 .lobytes $F003 -000701r 1 04 .lobytes $F004 -000702r 1 05 .lobytes $F005 -000703r 1 06 .lobytes $F006 -000704r 1 07 .lobytes $F007 -000705r 1 08 .lobytes $F008 -000706r 1 09 .lobytes $F009 -000707r 1 0A .lobytes $F00A -000708r 1 0B .lobytes $F00B -000709r 1 0C .lobytes $F00C -00070Ar 1 0D .lobytes $F00D -00070Br 1 0E .lobytes $F00E -00070Cr 1 0F .lobytes $F00F -00070Dr 1 E1 .lobytes $FFE1 -00070Er 1 E2 .lobytes $FFE2 -00070Fr 1 E3 .lobytes $FFE3 -000710r 1 E4 .lobytes $FFE4 -000711r 1 E5 .lobytes $FFE5 -000712r 1 E6 .lobytes $FFE6 -000713r 1 E7 .lobytes $FFE7 -000714r 1 E8 .lobytes $FFE8 -000715r 1 E9 .lobytes $FFE9 -000716r 1 EA .lobytes $FFEA -000717r 1 EB .lobytes $FFEB -000718r 1 EC .lobytes $FFEC -000719r 1 ED .lobytes $FFED -00071Ar 1 EE .lobytes $FFEE -00071Br 1 EF .lobytes $FFEF -00071Cr 1 F0 .lobytes $FFF0 -00071Dr 1 F1 .lobytes $FFF1 -00071Er 1 F2 .lobytes $FFF2 -00071Fr 1 F3 .lobytes $FFF3 -000720r 1 F4 .lobytes $FFF4 -000721r 1 F5 .lobytes $FFF5 -000722r 1 F6 .lobytes $FFF6 -000723r 1 F7 .lobytes $FFF7 -000724r 1 F8 .lobytes $FFF8 -000725r 1 F9 .lobytes $FFF9 -000726r 1 FA .lobytes $FFFA -000727r 1 FB .lobytes $FFFB -000728r 1 FC .lobytes $FFFC -000729r 1 FD .lobytes $FFFD -00072Ar 1 FE .lobytes $FFFE -00072Br 1 FF .lobytes $FFFF +000561r 1 ; hex values, uppercase +000561r 1 00 .lobytes $0 +000562r 1 01 .lobytes $1 +000563r 1 02 .lobytes $2 +000564r 1 03 .lobytes $3 +000565r 1 04 .lobytes $4 +000566r 1 05 .lobytes $5 +000567r 1 06 .lobytes $6 +000568r 1 07 .lobytes $7 +000569r 1 08 .lobytes $8 +00056Ar 1 09 .lobytes $9 +00056Br 1 0A .lobytes $A +00056Cr 1 0B .lobytes $B +00056Dr 1 0C .lobytes $C +00056Er 1 0D .lobytes $D +00056Fr 1 0E .lobytes $E +000570r 1 0F .lobytes $F +000571r 1 10 .lobytes $10 +000572r 1 11 .lobytes $11 +000573r 1 12 .lobytes $12 +000574r 1 13 .lobytes $13 +000575r 1 70 .lobytes $70 +000576r 1 71 .lobytes $71 +000577r 1 72 .lobytes $72 +000578r 1 73 .lobytes $73 +000579r 1 74 .lobytes $74 +00057Ar 1 75 .lobytes $75 +00057Br 1 76 .lobytes $76 +00057Cr 1 77 .lobytes $77 +00057Dr 1 78 .lobytes $78 +00057Er 1 79 .lobytes $79 +00057Fr 1 7A .lobytes $7A +000580r 1 7B .lobytes $7B +000581r 1 7C .lobytes $7C +000582r 1 7D .lobytes $7D +000583r 1 7E .lobytes $7E +000584r 1 7F .lobytes $7F +000585r 1 80 .lobytes $80 +000586r 1 81 .lobytes $81 +000587r 1 82 .lobytes $82 +000588r 1 83 .lobytes $83 +000589r 1 84 .lobytes $84 +00058Ar 1 85 .lobytes $85 +00058Br 1 86 .lobytes $86 +00058Cr 1 F0 .lobytes $F0 +00058Dr 1 F1 .lobytes $F1 +00058Er 1 F2 .lobytes $F2 +00058Fr 1 F3 .lobytes $F3 +000590r 1 F4 .lobytes $F4 +000591r 1 F5 .lobytes $F5 +000592r 1 F6 .lobytes $F6 +000593r 1 F7 .lobytes $F7 +000594r 1 F8 .lobytes $F8 +000595r 1 F9 .lobytes $F9 +000596r 1 FA .lobytes $FA +000597r 1 FB .lobytes $FB +000598r 1 FC .lobytes $FC +000599r 1 FD .lobytes $FD +00059Ar 1 FE .lobytes $FE +00059Br 1 FF .lobytes $FF +00059Cr 1 00 .lobytes $100 +00059Dr 1 01 .lobytes $101 +00059Er 1 02 .lobytes $102 +00059Fr 1 03 .lobytes $103 +0005A0r 1 D2 .lobytes $FD2 +0005A1r 1 D3 .lobytes $FD3 +0005A2r 1 D4 .lobytes $FD4 +0005A3r 1 D5 .lobytes $FD5 +0005A4r 1 D6 .lobytes $FD6 +0005A5r 1 D7 .lobytes $FD7 +0005A6r 1 D8 .lobytes $FD8 +0005A7r 1 D9 .lobytes $FD9 +0005A8r 1 DA .lobytes $FDA +0005A9r 1 DB .lobytes $FDB +0005AAr 1 DC .lobytes $FDC +0005ABr 1 DD .lobytes $FDD +0005ACr 1 DE .lobytes $FDE +0005ADr 1 DF .lobytes $FDF +0005AEr 1 E0 .lobytes $FE0 +0005AFr 1 E1 .lobytes $FE1 +0005B0r 1 E2 .lobytes $FE2 +0005B1r 1 E3 .lobytes $FE3 +0005B2r 1 E4 .lobytes $FE4 +0005B3r 1 E5 .lobytes $FE5 +0005B4r 1 E6 .lobytes $FE6 +0005B5r 1 E7 .lobytes $FE7 +0005B6r 1 E8 .lobytes $FE8 +0005B7r 1 E9 .lobytes $FE9 +0005B8r 1 EA .lobytes $FEA +0005B9r 1 EB .lobytes $FEB +0005BAr 1 EC .lobytes $FEC +0005BBr 1 ED .lobytes $FED +0005BCr 1 EE .lobytes $FEE +0005BDr 1 EF .lobytes $FEF +0005BEr 1 F0 .lobytes $FF0 +0005BFr 1 F1 .lobytes $FF1 +0005C0r 1 F2 .lobytes $FF2 +0005C1r 1 F3 .lobytes $FF3 +0005C2r 1 F4 .lobytes $FF4 +0005C3r 1 F5 .lobytes $FF5 +0005C4r 1 F6 .lobytes $FF6 +0005C5r 1 F7 .lobytes $FF7 +0005C6r 1 F8 .lobytes $FF8 +0005C7r 1 F9 .lobytes $FF9 +0005C8r 1 FA .lobytes $FFA +0005C9r 1 FB .lobytes $FFB +0005CAr 1 FC .lobytes $FFC +0005CBr 1 FD .lobytes $FFD +0005CCr 1 FE .lobytes $FFE +0005CDr 1 FF .lobytes $FFF +0005CEr 1 00 .lobytes $1000 +0005CFr 1 01 .lobytes $1001 +0005D0r 1 02 .lobytes $1002 +0005D1r 1 03 .lobytes $1003 +0005D2r 1 04 .lobytes $1004 +0005D3r 1 05 .lobytes $1005 +0005D4r 1 06 .lobytes $1006 +0005D5r 1 07 .lobytes $1007 +0005D6r 1 08 .lobytes $1008 +0005D7r 1 F0 .lobytes $7FF0 +0005D8r 1 F1 .lobytes $7FF1 +0005D9r 1 F2 .lobytes $7FF2 +0005DAr 1 F3 .lobytes $7FF3 +0005DBr 1 F4 .lobytes $7FF4 +0005DCr 1 F5 .lobytes $7FF5 +0005DDr 1 F6 .lobytes $7FF6 +0005DEr 1 F7 .lobytes $7FF7 +0005DFr 1 F8 .lobytes $7FF8 +0005E0r 1 F9 .lobytes $7FF9 +0005E1r 1 FA .lobytes $7FFA +0005E2r 1 FB .lobytes $7FFB +0005E3r 1 FC .lobytes $7FFC +0005E4r 1 FD .lobytes $7FFD +0005E5r 1 FE .lobytes $7FFE +0005E6r 1 FF .lobytes $7FFF +0005E7r 1 00 .lobytes $8000 +0005E8r 1 01 .lobytes $8001 +0005E9r 1 02 .lobytes $8002 +0005EAr 1 03 .lobytes $8003 +0005EBr 1 04 .lobytes $8004 +0005ECr 1 05 .lobytes $8005 +0005EDr 1 06 .lobytes $8006 +0005EEr 1 07 .lobytes $8007 +0005EFr 1 08 .lobytes $8008 +0005F0r 1 09 .lobytes $8009 +0005F1r 1 0A .lobytes $800A +0005F2r 1 0B .lobytes $800B +0005F3r 1 E1 .lobytes $9FE1 +0005F4r 1 E2 .lobytes $9FE2 +0005F5r 1 E3 .lobytes $9FE3 +0005F6r 1 E4 .lobytes $9FE4 +0005F7r 1 E5 .lobytes $9FE5 +0005F8r 1 E6 .lobytes $9FE6 +0005F9r 1 E7 .lobytes $9FE7 +0005FAr 1 E8 .lobytes $9FE8 +0005FBr 1 E9 .lobytes $9FE9 +0005FCr 1 EA .lobytes $9FEA +0005FDr 1 EB .lobytes $9FEB +0005FEr 1 EC .lobytes $9FEC +0005FFr 1 ED .lobytes $9FED +000600r 1 EE .lobytes $9FEE +000601r 1 EF .lobytes $9FEF +000602r 1 F0 .lobytes $9FF0 +000603r 1 F1 .lobytes $9FF1 +000604r 1 F2 .lobytes $9FF2 +000605r 1 F3 .lobytes $9FF3 +000606r 1 F4 .lobytes $9FF4 +000607r 1 F5 .lobytes $9FF5 +000608r 1 F6 .lobytes $9FF6 +000609r 1 F7 .lobytes $9FF7 +00060Ar 1 F8 .lobytes $9FF8 +00060Br 1 F9 .lobytes $9FF9 +00060Cr 1 FA .lobytes $9FFA +00060Dr 1 FB .lobytes $9FFB +00060Er 1 FC .lobytes $9FFC +00060Fr 1 FD .lobytes $9FFD +000610r 1 FE .lobytes $9FFE +000611r 1 FF .lobytes $9FFF +000612r 1 00 .lobytes $A000 +000613r 1 01 .lobytes $A001 +000614r 1 02 .lobytes $A002 +000615r 1 03 .lobytes $A003 +000616r 1 04 .lobytes $A004 +000617r 1 05 .lobytes $A005 +000618r 1 06 .lobytes $A006 +000619r 1 07 .lobytes $A007 +00061Ar 1 08 .lobytes $A008 +00061Br 1 09 .lobytes $A009 +00061Cr 1 0A .lobytes $A00A +00061Dr 1 0B .lobytes $A00B +00061Er 1 0C .lobytes $A00C +00061Fr 1 0D .lobytes $A00D +000620r 1 0E .lobytes $A00E +000621r 1 0F .lobytes $A00F +000622r 1 E1 .lobytes $AFE1 +000623r 1 E2 .lobytes $AFE2 +000624r 1 E3 .lobytes $AFE3 +000625r 1 E4 .lobytes $AFE4 +000626r 1 E5 .lobytes $AFE5 +000627r 1 E6 .lobytes $AFE6 +000628r 1 E7 .lobytes $AFE7 +000629r 1 E8 .lobytes $AFE8 +00062Ar 1 E9 .lobytes $AFE9 +00062Br 1 EA .lobytes $AFEA +00062Cr 1 EB .lobytes $AFEB +00062Dr 1 EC .lobytes $AFEC +00062Er 1 ED .lobytes $AFED +00062Fr 1 EE .lobytes $AFEE +000630r 1 EF .lobytes $AFEF +000631r 1 F0 .lobytes $AFF0 +000632r 1 F1 .lobytes $AFF1 +000633r 1 F2 .lobytes $AFF2 +000634r 1 F3 .lobytes $AFF3 +000635r 1 F4 .lobytes $AFF4 +000636r 1 F5 .lobytes $AFF5 +000637r 1 F6 .lobytes $AFF6 +000638r 1 F7 .lobytes $AFF7 +000639r 1 F8 .lobytes $AFF8 +00063Ar 1 F9 .lobytes $AFF9 +00063Br 1 FA .lobytes $AFFA +00063Cr 1 FB .lobytes $AFFB +00063Dr 1 FC .lobytes $AFFC +00063Er 1 FD .lobytes $AFFD +00063Fr 1 FE .lobytes $AFFE +000640r 1 FF .lobytes $AFFF +000641r 1 00 .lobytes $B000 +000642r 1 01 .lobytes $B001 +000643r 1 02 .lobytes $B002 +000644r 1 03 .lobytes $B003 +000645r 1 04 .lobytes $B004 +000646r 1 05 .lobytes $B005 +000647r 1 06 .lobytes $B006 +000648r 1 07 .lobytes $B007 +000649r 1 08 .lobytes $B008 +00064Ar 1 09 .lobytes $B009 +00064Br 1 0A .lobytes $B00A +00064Cr 1 0B .lobytes $B00B +00064Dr 1 0C .lobytes $B00C +00064Er 1 0D .lobytes $B00D +00064Fr 1 0E .lobytes $B00E +000650r 1 0F .lobytes $B00F +000651r 1 E1 .lobytes $BFE1 +000652r 1 E2 .lobytes $BFE2 +000653r 1 E3 .lobytes $BFE3 +000654r 1 E4 .lobytes $BFE4 +000655r 1 E5 .lobytes $BFE5 +000656r 1 E6 .lobytes $BFE6 +000657r 1 E7 .lobytes $BFE7 +000658r 1 E8 .lobytes $BFE8 +000659r 1 E9 .lobytes $BFE9 +00065Ar 1 EA .lobytes $BFEA +00065Br 1 EB .lobytes $BFEB +00065Cr 1 EC .lobytes $BFEC +00065Dr 1 ED .lobytes $BFED +00065Er 1 EE .lobytes $BFEE +00065Fr 1 EF .lobytes $BFEF +000660r 1 F0 .lobytes $BFF0 +000661r 1 F1 .lobytes $BFF1 +000662r 1 F2 .lobytes $BFF2 +000663r 1 F3 .lobytes $BFF3 +000664r 1 F4 .lobytes $BFF4 +000665r 1 F5 .lobytes $BFF5 +000666r 1 F6 .lobytes $BFF6 +000667r 1 F7 .lobytes $BFF7 +000668r 1 F8 .lobytes $BFF8 +000669r 1 F9 .lobytes $BFF9 +00066Ar 1 FA .lobytes $BFFA +00066Br 1 FB .lobytes $BFFB +00066Cr 1 FC .lobytes $BFFC +00066Dr 1 FD .lobytes $BFFD +00066Er 1 FE .lobytes $BFFE +00066Fr 1 FF .lobytes $BFFF +000670r 1 00 .lobytes $C000 +000671r 1 01 .lobytes $C001 +000672r 1 02 .lobytes $C002 +000673r 1 03 .lobytes $C003 +000674r 1 04 .lobytes $C004 +000675r 1 05 .lobytes $C005 +000676r 1 06 .lobytes $C006 +000677r 1 07 .lobytes $C007 +000678r 1 08 .lobytes $C008 +000679r 1 09 .lobytes $C009 +00067Ar 1 0A .lobytes $C00A +00067Br 1 0B .lobytes $C00B +00067Cr 1 0C .lobytes $C00C +00067Dr 1 0D .lobytes $C00D +00067Er 1 0E .lobytes $C00E +00067Fr 1 0F .lobytes $C00F +000680r 1 E1 .lobytes $CFE1 +000681r 1 E2 .lobytes $CFE2 +000682r 1 E3 .lobytes $CFE3 +000683r 1 E4 .lobytes $CFE4 +000684r 1 E5 .lobytes $CFE5 +000685r 1 E6 .lobytes $CFE6 +000686r 1 E7 .lobytes $CFE7 +000687r 1 E8 .lobytes $CFE8 +000688r 1 E9 .lobytes $CFE9 +000689r 1 EA .lobytes $CFEA +00068Ar 1 EB .lobytes $CFEB +00068Br 1 EC .lobytes $CFEC +00068Cr 1 ED .lobytes $CFED +00068Dr 1 EE .lobytes $CFEE +00068Er 1 EF .lobytes $CFEF +00068Fr 1 F0 .lobytes $CFF0 +000690r 1 F1 .lobytes $CFF1 +000691r 1 F2 .lobytes $CFF2 +000692r 1 F3 .lobytes $CFF3 +000693r 1 F4 .lobytes $CFF4 +000694r 1 F5 .lobytes $CFF5 +000695r 1 F6 .lobytes $CFF6 +000696r 1 F7 .lobytes $CFF7 +000697r 1 F8 .lobytes $CFF8 +000698r 1 F9 .lobytes $CFF9 +000699r 1 FA .lobytes $CFFA +00069Ar 1 FB .lobytes $CFFB +00069Br 1 FC .lobytes $CFFC +00069Cr 1 FD .lobytes $CFFD +00069Dr 1 FE .lobytes $CFFE +00069Er 1 FF .lobytes $CFFF +00069Fr 1 00 .lobytes $D000 +0006A0r 1 01 .lobytes $D001 +0006A1r 1 02 .lobytes $D002 +0006A2r 1 03 .lobytes $D003 +0006A3r 1 04 .lobytes $D004 +0006A4r 1 05 .lobytes $D005 +0006A5r 1 06 .lobytes $D006 +0006A6r 1 07 .lobytes $D007 +0006A7r 1 08 .lobytes $D008 +0006A8r 1 09 .lobytes $D009 +0006A9r 1 0A .lobytes $D00A +0006AAr 1 0B .lobytes $D00B +0006ABr 1 0C .lobytes $D00C +0006ACr 1 0D .lobytes $D00D +0006ADr 1 0E .lobytes $D00E +0006AEr 1 0F .lobytes $D00F +0006AFr 1 E1 .lobytes $DFE1 +0006B0r 1 E2 .lobytes $DFE2 +0006B1r 1 E3 .lobytes $DFE3 +0006B2r 1 E4 .lobytes $DFE4 +0006B3r 1 E5 .lobytes $DFE5 +0006B4r 1 E6 .lobytes $DFE6 +0006B5r 1 E7 .lobytes $DFE7 +0006B6r 1 E8 .lobytes $DFE8 +0006B7r 1 E9 .lobytes $DFE9 +0006B8r 1 EA .lobytes $DFEA +0006B9r 1 EB .lobytes $DFEB +0006BAr 1 EC .lobytes $DFEC +0006BBr 1 ED .lobytes $DFED +0006BCr 1 EE .lobytes $DFEE +0006BDr 1 EF .lobytes $DFEF +0006BEr 1 F0 .lobytes $DFF0 +0006BFr 1 F1 .lobytes $DFF1 +0006C0r 1 F2 .lobytes $DFF2 +0006C1r 1 F3 .lobytes $DFF3 +0006C2r 1 F4 .lobytes $DFF4 +0006C3r 1 F5 .lobytes $DFF5 +0006C4r 1 F6 .lobytes $DFF6 +0006C5r 1 F7 .lobytes $DFF7 +0006C6r 1 F8 .lobytes $DFF8 +0006C7r 1 F9 .lobytes $DFF9 +0006C8r 1 FA .lobytes $DFFA +0006C9r 1 FB .lobytes $DFFB +0006CAr 1 FC .lobytes $DFFC +0006CBr 1 FD .lobytes $DFFD +0006CCr 1 FE .lobytes $DFFE +0006CDr 1 FF .lobytes $DFFF +0006CEr 1 00 .lobytes $E000 +0006CFr 1 01 .lobytes $E001 +0006D0r 1 02 .lobytes $E002 +0006D1r 1 03 .lobytes $E003 +0006D2r 1 04 .lobytes $E004 +0006D3r 1 05 .lobytes $E005 +0006D4r 1 06 .lobytes $E006 +0006D5r 1 07 .lobytes $E007 +0006D6r 1 08 .lobytes $E008 +0006D7r 1 09 .lobytes $E009 +0006D8r 1 0A .lobytes $E00A +0006D9r 1 0B .lobytes $E00B +0006DAr 1 0C .lobytes $E00C +0006DBr 1 0D .lobytes $E00D +0006DCr 1 0E .lobytes $E00E +0006DDr 1 0F .lobytes $E00F +0006DEr 1 E1 .lobytes $EFE1 +0006DFr 1 E2 .lobytes $EFE2 +0006E0r 1 E3 .lobytes $EFE3 +0006E1r 1 E4 .lobytes $EFE4 +0006E2r 1 E5 .lobytes $EFE5 +0006E3r 1 E6 .lobytes $EFE6 +0006E4r 1 E7 .lobytes $EFE7 +0006E5r 1 E8 .lobytes $EFE8 +0006E6r 1 E9 .lobytes $EFE9 +0006E7r 1 EA .lobytes $EFEA +0006E8r 1 EB .lobytes $EFEB +0006E9r 1 EC .lobytes $EFEC +0006EAr 1 ED .lobytes $EFED +0006EBr 1 EE .lobytes $EFEE +0006ECr 1 EF .lobytes $EFEF +0006EDr 1 F0 .lobytes $EFF0 +0006EEr 1 F1 .lobytes $EFF1 +0006EFr 1 F2 .lobytes $EFF2 +0006F0r 1 F3 .lobytes $EFF3 +0006F1r 1 F4 .lobytes $EFF4 +0006F2r 1 F5 .lobytes $EFF5 +0006F3r 1 F6 .lobytes $EFF6 +0006F4r 1 F7 .lobytes $EFF7 +0006F5r 1 F8 .lobytes $EFF8 +0006F6r 1 F9 .lobytes $EFF9 +0006F7r 1 FA .lobytes $EFFA +0006F8r 1 FB .lobytes $EFFB +0006F9r 1 FC .lobytes $EFFC +0006FAr 1 FD .lobytes $EFFD +0006FBr 1 FE .lobytes $EFFE +0006FCr 1 FF .lobytes $EFFF +0006FDr 1 00 .lobytes $F000 +0006FEr 1 01 .lobytes $F001 +0006FFr 1 02 .lobytes $F002 +000700r 1 03 .lobytes $F003 +000701r 1 04 .lobytes $F004 +000702r 1 05 .lobytes $F005 +000703r 1 06 .lobytes $F006 +000704r 1 07 .lobytes $F007 +000705r 1 08 .lobytes $F008 +000706r 1 09 .lobytes $F009 +000707r 1 0A .lobytes $F00A +000708r 1 0B .lobytes $F00B +000709r 1 0C .lobytes $F00C +00070Ar 1 0D .lobytes $F00D +00070Br 1 0E .lobytes $F00E +00070Cr 1 0F .lobytes $F00F +00070Dr 1 E1 .lobytes $FFE1 +00070Er 1 E2 .lobytes $FFE2 +00070Fr 1 E3 .lobytes $FFE3 +000710r 1 E4 .lobytes $FFE4 +000711r 1 E5 .lobytes $FFE5 +000712r 1 E6 .lobytes $FFE6 +000713r 1 E7 .lobytes $FFE7 +000714r 1 E8 .lobytes $FFE8 +000715r 1 E9 .lobytes $FFE9 +000716r 1 EA .lobytes $FFEA +000717r 1 EB .lobytes $FFEB +000718r 1 EC .lobytes $FFEC +000719r 1 ED .lobytes $FFED +00071Ar 1 EE .lobytes $FFEE +00071Br 1 EF .lobytes $FFEF +00071Cr 1 F0 .lobytes $FFF0 +00071Dr 1 F1 .lobytes $FFF1 +00071Er 1 F2 .lobytes $FFF2 +00071Fr 1 F3 .lobytes $FFF3 +000720r 1 F4 .lobytes $FFF4 +000721r 1 F5 .lobytes $FFF5 +000722r 1 F6 .lobytes $FFF6 +000723r 1 F7 .lobytes $FFF7 +000724r 1 F8 .lobytes $FFF8 +000725r 1 F9 .lobytes $FFF9 +000726r 1 FA .lobytes $FFFA +000727r 1 FB .lobytes $FFFB +000728r 1 FC .lobytes $FFFC +000729r 1 FD .lobytes $FFFD +00072Ar 1 FE .lobytes $FFFE +00072Br 1 FF .lobytes $FFFF 00072Cr 1 -00072Cr 1 ; 4-digit hex values -00072Cr 1 00 .lobytes $0000 -00072Dr 1 01 .lobytes $0001 -00072Er 1 02 .lobytes $0002 -00072Fr 1 03 .lobytes $0003 -000730r 1 04 .lobytes $0004 -000731r 1 05 .lobytes $0005 -000732r 1 06 .lobytes $0006 -000733r 1 07 .lobytes $0007 -000734r 1 08 .lobytes $0008 -000735r 1 09 .lobytes $0009 -000736r 1 0A .lobytes $000a -000737r 1 0B .lobytes $000b -000738r 1 0C .lobytes $000c -000739r 1 0D .lobytes $000d -00073Ar 1 0E .lobytes $000e -00073Br 1 0F .lobytes $000f -00073Cr 1 10 .lobytes $0010 -00073Dr 1 11 .lobytes $0011 -00073Er 1 12 .lobytes $0012 -00073Fr 1 13 .lobytes $0013 -000740r 1 70 .lobytes $0070 -000741r 1 71 .lobytes $0071 -000742r 1 72 .lobytes $0072 -000743r 1 73 .lobytes $0073 -000744r 1 74 .lobytes $0074 -000745r 1 75 .lobytes $0075 -000746r 1 76 .lobytes $0076 -000747r 1 77 .lobytes $0077 -000748r 1 78 .lobytes $0078 -000749r 1 79 .lobytes $0079 -00074Ar 1 7A .lobytes $007a -00074Br 1 7B .lobytes $007b -00074Cr 1 7C .lobytes $007c -00074Dr 1 7D .lobytes $007d -00074Er 1 7E .lobytes $007e -00074Fr 1 7F .lobytes $007f -000750r 1 80 .lobytes $0080 -000751r 1 81 .lobytes $0081 -000752r 1 82 .lobytes $0082 -000753r 1 83 .lobytes $0083 -000754r 1 84 .lobytes $0084 -000755r 1 85 .lobytes $0085 -000756r 1 86 .lobytes $0086 -000757r 1 F0 .lobytes $00f0 -000758r 1 F1 .lobytes $00f1 -000759r 1 F2 .lobytes $00f2 -00075Ar 1 F3 .lobytes $00f3 -00075Br 1 F4 .lobytes $00f4 -00075Cr 1 F5 .lobytes $00f5 -00075Dr 1 F6 .lobytes $00f6 -00075Er 1 F7 .lobytes $00f7 -00075Fr 1 F8 .lobytes $00f8 -000760r 1 F9 .lobytes $00f9 -000761r 1 FA .lobytes $00fa -000762r 1 FB .lobytes $00fb -000763r 1 FC .lobytes $00fc -000764r 1 FD .lobytes $00fd -000765r 1 FE .lobytes $00fe -000766r 1 FF .lobytes $00ff -000767r 1 00 .lobytes $0100 -000768r 1 01 .lobytes $0101 -000769r 1 02 .lobytes $0102 -00076Ar 1 03 .lobytes $0103 -00076Br 1 D2 .lobytes $0fd2 -00076Cr 1 D3 .lobytes $0fd3 -00076Dr 1 D4 .lobytes $0fd4 -00076Er 1 D5 .lobytes $0fd5 -00076Fr 1 D6 .lobytes $0fd6 -000770r 1 D7 .lobytes $0fd7 -000771r 1 D8 .lobytes $0fd8 -000772r 1 D9 .lobytes $0fd9 -000773r 1 DA .lobytes $0fda -000774r 1 DB .lobytes $0fdb -000775r 1 DC .lobytes $0fdc -000776r 1 DD .lobytes $0fdd -000777r 1 DE .lobytes $0fde -000778r 1 DF .lobytes $0fdf -000779r 1 E0 .lobytes $0fe0 -00077Ar 1 E1 .lobytes $0fe1 -00077Br 1 E2 .lobytes $0fe2 -00077Cr 1 E3 .lobytes $0fe3 -00077Dr 1 E4 .lobytes $0fe4 -00077Er 1 E5 .lobytes $0fe5 -00077Fr 1 E6 .lobytes $0fe6 -000780r 1 E7 .lobytes $0fe7 -000781r 1 E8 .lobytes $0fe8 -000782r 1 E9 .lobytes $0fe9 -000783r 1 EA .lobytes $0fea -000784r 1 EB .lobytes $0feb -000785r 1 EC .lobytes $0fec -000786r 1 ED .lobytes $0fed -000787r 1 EE .lobytes $0fee -000788r 1 EF .lobytes $0fef -000789r 1 F0 .lobytes $0ff0 -00078Ar 1 F1 .lobytes $0ff1 -00078Br 1 F2 .lobytes $0ff2 -00078Cr 1 F3 .lobytes $0ff3 -00078Dr 1 F4 .lobytes $0ff4 -00078Er 1 F5 .lobytes $0ff5 -00078Fr 1 F6 .lobytes $0ff6 -000790r 1 F7 .lobytes $0ff7 -000791r 1 F8 .lobytes $0ff8 -000792r 1 F9 .lobytes $0ff9 -000793r 1 FA .lobytes $0ffa -000794r 1 FB .lobytes $0ffb -000795r 1 FC .lobytes $0ffc -000796r 1 FD .lobytes $0ffd -000797r 1 FE .lobytes $0ffe -000798r 1 FF .lobytes $0fff -000799r 1 00 .lobytes $1000 -00079Ar 1 01 .lobytes $1001 -00079Br 1 02 .lobytes $1002 -00079Cr 1 03 .lobytes $1003 -00079Dr 1 04 .lobytes $1004 -00079Er 1 05 .lobytes $1005 -00079Fr 1 06 .lobytes $1006 -0007A0r 1 07 .lobytes $1007 -0007A1r 1 08 .lobytes $1008 -0007A2r 1 F0 .lobytes $7ff0 -0007A3r 1 F1 .lobytes $7ff1 -0007A4r 1 F2 .lobytes $7ff2 -0007A5r 1 F3 .lobytes $7ff3 -0007A6r 1 F4 .lobytes $7ff4 -0007A7r 1 F5 .lobytes $7ff5 -0007A8r 1 F6 .lobytes $7ff6 -0007A9r 1 F7 .lobytes $7ff7 -0007AAr 1 F8 .lobytes $7ff8 -0007ABr 1 F9 .lobytes $7ff9 -0007ACr 1 FA .lobytes $7ffa -0007ADr 1 FB .lobytes $7ffb -0007AEr 1 FC .lobytes $7ffc -0007AFr 1 FD .lobytes $7ffd -0007B0r 1 FE .lobytes $7ffe -0007B1r 1 FF .lobytes $7fff -0007B2r 1 00 .lobytes $8000 -0007B3r 1 01 .lobytes $8001 -0007B4r 1 02 .lobytes $8002 -0007B5r 1 03 .lobytes $8003 -0007B6r 1 04 .lobytes $8004 -0007B7r 1 05 .lobytes $8005 -0007B8r 1 06 .lobytes $8006 -0007B9r 1 07 .lobytes $8007 -0007BAr 1 08 .lobytes $8008 -0007BBr 1 09 .lobytes $8009 -0007BCr 1 0A .lobytes $800a -0007BDr 1 0B .lobytes $800b -0007BEr 1 E1 .lobytes $9fe1 -0007BFr 1 E2 .lobytes $9fe2 -0007C0r 1 E3 .lobytes $9fe3 -0007C1r 1 E4 .lobytes $9fe4 -0007C2r 1 E5 .lobytes $9fe5 -0007C3r 1 E6 .lobytes $9fe6 -0007C4r 1 E7 .lobytes $9fe7 -0007C5r 1 E8 .lobytes $9fe8 -0007C6r 1 E9 .lobytes $9fe9 -0007C7r 1 EA .lobytes $9fea -0007C8r 1 EB .lobytes $9feb -0007C9r 1 EC .lobytes $9fec -0007CAr 1 ED .lobytes $9fed -0007CBr 1 EE .lobytes $9fee -0007CCr 1 EF .lobytes $9fef -0007CDr 1 F0 .lobytes $9ff0 -0007CEr 1 F1 .lobytes $9ff1 -0007CFr 1 F2 .lobytes $9ff2 -0007D0r 1 F3 .lobytes $9ff3 -0007D1r 1 F4 .lobytes $9ff4 -0007D2r 1 F5 .lobytes $9ff5 -0007D3r 1 F6 .lobytes $9ff6 -0007D4r 1 F7 .lobytes $9ff7 -0007D5r 1 F8 .lobytes $9ff8 -0007D6r 1 F9 .lobytes $9ff9 -0007D7r 1 FA .lobytes $9ffa -0007D8r 1 FB .lobytes $9ffb -0007D9r 1 FC .lobytes $9ffc -0007DAr 1 FD .lobytes $9ffd -0007DBr 1 FE .lobytes $9ffe -0007DCr 1 FF .lobytes $9fff -0007DDr 1 00 .lobytes $a000 -0007DEr 1 01 .lobytes $a001 -0007DFr 1 02 .lobytes $a002 -0007E0r 1 03 .lobytes $a003 -0007E1r 1 04 .lobytes $a004 -0007E2r 1 05 .lobytes $a005 -0007E3r 1 06 .lobytes $a006 -0007E4r 1 07 .lobytes $a007 -0007E5r 1 08 .lobytes $a008 -0007E6r 1 09 .lobytes $a009 -0007E7r 1 0A .lobytes $a00a -0007E8r 1 0B .lobytes $a00b -0007E9r 1 0C .lobytes $a00c -0007EAr 1 0D .lobytes $a00d -0007EBr 1 0E .lobytes $a00e -0007ECr 1 0F .lobytes $a00f -0007EDr 1 E1 .lobytes $afe1 -0007EEr 1 E2 .lobytes $afe2 -0007EFr 1 E3 .lobytes $afe3 -0007F0r 1 E4 .lobytes $afe4 -0007F1r 1 E5 .lobytes $afe5 -0007F2r 1 E6 .lobytes $afe6 -0007F3r 1 E7 .lobytes $afe7 -0007F4r 1 E8 .lobytes $afe8 -0007F5r 1 E9 .lobytes $afe9 -0007F6r 1 EA .lobytes $afea -0007F7r 1 EB .lobytes $afeb -0007F8r 1 EC .lobytes $afec -0007F9r 1 ED .lobytes $afed -0007FAr 1 EE .lobytes $afee -0007FBr 1 EF .lobytes $afef -0007FCr 1 F0 .lobytes $aff0 -0007FDr 1 F1 .lobytes $aff1 -0007FEr 1 F2 .lobytes $aff2 -0007FFr 1 F3 .lobytes $aff3 -000800r 1 F4 .lobytes $aff4 -000801r 1 F5 .lobytes $aff5 -000802r 1 F6 .lobytes $aff6 -000803r 1 F7 .lobytes $aff7 -000804r 1 F8 .lobytes $aff8 -000805r 1 F9 .lobytes $aff9 -000806r 1 FA .lobytes $affa -000807r 1 FB .lobytes $affb -000808r 1 FC .lobytes $affc -000809r 1 FD .lobytes $affd -00080Ar 1 FE .lobytes $affe -00080Br 1 FF .lobytes $afff -00080Cr 1 00 .lobytes $b000 -00080Dr 1 01 .lobytes $b001 -00080Er 1 02 .lobytes $b002 -00080Fr 1 03 .lobytes $b003 -000810r 1 04 .lobytes $b004 -000811r 1 05 .lobytes $b005 -000812r 1 06 .lobytes $b006 -000813r 1 07 .lobytes $b007 -000814r 1 08 .lobytes $b008 -000815r 1 09 .lobytes $b009 -000816r 1 0A .lobytes $b00a -000817r 1 0B .lobytes $b00b -000818r 1 0C .lobytes $b00c -000819r 1 0D .lobytes $b00d -00081Ar 1 0E .lobytes $b00e -00081Br 1 0F .lobytes $b00f -00081Cr 1 E1 .lobytes $bfe1 -00081Dr 1 E2 .lobytes $bfe2 -00081Er 1 E3 .lobytes $bfe3 -00081Fr 1 E4 .lobytes $bfe4 -000820r 1 E5 .lobytes $bfe5 -000821r 1 E6 .lobytes $bfe6 -000822r 1 E7 .lobytes $bfe7 -000823r 1 E8 .lobytes $bfe8 -000824r 1 E9 .lobytes $bfe9 -000825r 1 EA .lobytes $bfea -000826r 1 EB .lobytes $bfeb -000827r 1 EC .lobytes $bfec -000828r 1 ED .lobytes $bfed -000829r 1 EE .lobytes $bfee -00082Ar 1 EF .lobytes $bfef -00082Br 1 F0 .lobytes $bff0 -00082Cr 1 F1 .lobytes $bff1 -00082Dr 1 F2 .lobytes $bff2 -00082Er 1 F3 .lobytes $bff3 -00082Fr 1 F4 .lobytes $bff4 -000830r 1 F5 .lobytes $bff5 -000831r 1 F6 .lobytes $bff6 -000832r 1 F7 .lobytes $bff7 -000833r 1 F8 .lobytes $bff8 -000834r 1 F9 .lobytes $bff9 -000835r 1 FA .lobytes $bffa -000836r 1 FB .lobytes $bffb -000837r 1 FC .lobytes $bffc -000838r 1 FD .lobytes $bffd -000839r 1 FE .lobytes $bffe -00083Ar 1 FF .lobytes $bfff -00083Br 1 00 .lobytes $c000 -00083Cr 1 01 .lobytes $c001 -00083Dr 1 02 .lobytes $c002 -00083Er 1 03 .lobytes $c003 -00083Fr 1 04 .lobytes $c004 -000840r 1 05 .lobytes $c005 -000841r 1 06 .lobytes $c006 -000842r 1 07 .lobytes $c007 -000843r 1 08 .lobytes $c008 -000844r 1 09 .lobytes $c009 -000845r 1 0A .lobytes $c00a -000846r 1 0B .lobytes $c00b -000847r 1 0C .lobytes $c00c -000848r 1 0D .lobytes $c00d -000849r 1 0E .lobytes $c00e -00084Ar 1 0F .lobytes $c00f -00084Br 1 E1 .lobytes $cfe1 -00084Cr 1 E2 .lobytes $cfe2 -00084Dr 1 E3 .lobytes $cfe3 -00084Er 1 E4 .lobytes $cfe4 -00084Fr 1 E5 .lobytes $cfe5 -000850r 1 E6 .lobytes $cfe6 -000851r 1 E7 .lobytes $cfe7 -000852r 1 E8 .lobytes $cfe8 -000853r 1 E9 .lobytes $cfe9 -000854r 1 EA .lobytes $cfea -000855r 1 EB .lobytes $cfeb -000856r 1 EC .lobytes $cfec -000857r 1 ED .lobytes $cfed -000858r 1 EE .lobytes $cfee -000859r 1 EF .lobytes $cfef -00085Ar 1 F0 .lobytes $cff0 -00085Br 1 F1 .lobytes $cff1 -00085Cr 1 F2 .lobytes $cff2 -00085Dr 1 F3 .lobytes $cff3 -00085Er 1 F4 .lobytes $cff4 -00085Fr 1 F5 .lobytes $cff5 -000860r 1 F6 .lobytes $cff6 -000861r 1 F7 .lobytes $cff7 -000862r 1 F8 .lobytes $cff8 -000863r 1 F9 .lobytes $cff9 -000864r 1 FA .lobytes $cffa -000865r 1 FB .lobytes $cffb -000866r 1 FC .lobytes $cffc -000867r 1 FD .lobytes $cffd -000868r 1 FE .lobytes $cffe -000869r 1 FF .lobytes $cfff -00086Ar 1 00 .lobytes $d000 -00086Br 1 01 .lobytes $d001 -00086Cr 1 02 .lobytes $d002 -00086Dr 1 03 .lobytes $d003 -00086Er 1 04 .lobytes $d004 -00086Fr 1 05 .lobytes $d005 -000870r 1 06 .lobytes $d006 -000871r 1 07 .lobytes $d007 -000872r 1 08 .lobytes $d008 -000873r 1 09 .lobytes $d009 -000874r 1 0A .lobytes $d00a -000875r 1 0B .lobytes $d00b -000876r 1 0C .lobytes $d00c -000877r 1 0D .lobytes $d00d -000878r 1 0E .lobytes $d00e -000879r 1 0F .lobytes $d00f -00087Ar 1 E1 .lobytes $dfe1 -00087Br 1 E2 .lobytes $dfe2 -00087Cr 1 E3 .lobytes $dfe3 -00087Dr 1 E4 .lobytes $dfe4 -00087Er 1 E5 .lobytes $dfe5 -00087Fr 1 E6 .lobytes $dfe6 -000880r 1 E7 .lobytes $dfe7 -000881r 1 E8 .lobytes $dfe8 -000882r 1 E9 .lobytes $dfe9 -000883r 1 EA .lobytes $dfea -000884r 1 EB .lobytes $dfeb -000885r 1 EC .lobytes $dfec -000886r 1 ED .lobytes $dfed -000887r 1 EE .lobytes $dfee -000888r 1 EF .lobytes $dfef -000889r 1 F0 .lobytes $dff0 -00088Ar 1 F1 .lobytes $dff1 -00088Br 1 F2 .lobytes $dff2 -00088Cr 1 F3 .lobytes $dff3 -00088Dr 1 F4 .lobytes $dff4 -00088Er 1 F5 .lobytes $dff5 -00088Fr 1 F6 .lobytes $dff6 -000890r 1 F7 .lobytes $dff7 -000891r 1 F8 .lobytes $dff8 -000892r 1 F9 .lobytes $dff9 -000893r 1 FA .lobytes $dffa -000894r 1 FB .lobytes $dffb -000895r 1 FC .lobytes $dffc -000896r 1 FD .lobytes $dffd -000897r 1 FE .lobytes $dffe -000898r 1 FF .lobytes $dfff -000899r 1 00 .lobytes $e000 -00089Ar 1 01 .lobytes $e001 -00089Br 1 02 .lobytes $e002 -00089Cr 1 03 .lobytes $e003 -00089Dr 1 04 .lobytes $e004 -00089Er 1 05 .lobytes $e005 -00089Fr 1 06 .lobytes $e006 -0008A0r 1 07 .lobytes $e007 -0008A1r 1 08 .lobytes $e008 -0008A2r 1 09 .lobytes $e009 -0008A3r 1 0A .lobytes $e00a -0008A4r 1 0B .lobytes $e00b -0008A5r 1 0C .lobytes $e00c -0008A6r 1 0D .lobytes $e00d -0008A7r 1 0E .lobytes $e00e -0008A8r 1 0F .lobytes $e00f -0008A9r 1 E1 .lobytes $efe1 -0008AAr 1 E2 .lobytes $efe2 -0008ABr 1 E3 .lobytes $efe3 -0008ACr 1 E4 .lobytes $efe4 -0008ADr 1 E5 .lobytes $efe5 -0008AEr 1 E6 .lobytes $efe6 -0008AFr 1 E7 .lobytes $efe7 -0008B0r 1 E8 .lobytes $efe8 -0008B1r 1 E9 .lobytes $efe9 -0008B2r 1 EA .lobytes $efea -0008B3r 1 EB .lobytes $efeb -0008B4r 1 EC .lobytes $efec -0008B5r 1 ED .lobytes $efed -0008B6r 1 EE .lobytes $efee -0008B7r 1 EF .lobytes $efef -0008B8r 1 F0 .lobytes $eff0 -0008B9r 1 F1 .lobytes $eff1 -0008BAr 1 F2 .lobytes $eff2 -0008BBr 1 F3 .lobytes $eff3 -0008BCr 1 F4 .lobytes $eff4 -0008BDr 1 F5 .lobytes $eff5 -0008BEr 1 F6 .lobytes $eff6 -0008BFr 1 F7 .lobytes $eff7 -0008C0r 1 F8 .lobytes $eff8 -0008C1r 1 F9 .lobytes $eff9 -0008C2r 1 FA .lobytes $effa -0008C3r 1 FB .lobytes $effb -0008C4r 1 FC .lobytes $effc -0008C5r 1 FD .lobytes $effd -0008C6r 1 FE .lobytes $effe -0008C7r 1 FF .lobytes $efff -0008C8r 1 00 .lobytes $f000 -0008C9r 1 01 .lobytes $f001 -0008CAr 1 02 .lobytes $f002 -0008CBr 1 03 .lobytes $f003 -0008CCr 1 04 .lobytes $f004 -0008CDr 1 05 .lobytes $f005 -0008CEr 1 06 .lobytes $f006 -0008CFr 1 07 .lobytes $f007 -0008D0r 1 08 .lobytes $f008 -0008D1r 1 09 .lobytes $f009 -0008D2r 1 0A .lobytes $f00a -0008D3r 1 0B .lobytes $f00b -0008D4r 1 0C .lobytes $f00c -0008D5r 1 0D .lobytes $f00d -0008D6r 1 0E .lobytes $f00e -0008D7r 1 0F .lobytes $f00f -0008D8r 1 E1 .lobytes $ffe1 -0008D9r 1 E2 .lobytes $ffe2 -0008DAr 1 E3 .lobytes $ffe3 -0008DBr 1 E4 .lobytes $ffe4 -0008DCr 1 E5 .lobytes $ffe5 -0008DDr 1 E6 .lobytes $ffe6 -0008DEr 1 E7 .lobytes $ffe7 -0008DFr 1 E8 .lobytes $ffe8 -0008E0r 1 E9 .lobytes $ffe9 -0008E1r 1 EA .lobytes $ffea -0008E2r 1 EB .lobytes $ffeb -0008E3r 1 EC .lobytes $ffec -0008E4r 1 ED .lobytes $ffed -0008E5r 1 EE .lobytes $ffee -0008E6r 1 EF .lobytes $ffef -0008E7r 1 F0 .lobytes $fff0 -0008E8r 1 F1 .lobytes $fff1 -0008E9r 1 F2 .lobytes $fff2 -0008EAr 1 F3 .lobytes $fff3 -0008EBr 1 F4 .lobytes $fff4 -0008ECr 1 F5 .lobytes $fff5 -0008EDr 1 F6 .lobytes $fff6 -0008EEr 1 F7 .lobytes $fff7 -0008EFr 1 F8 .lobytes $fff8 -0008F0r 1 F9 .lobytes $fff9 -0008F1r 1 FA .lobytes $fffa -0008F2r 1 FB .lobytes $fffb -0008F3r 1 FC .lobytes $fffc -0008F4r 1 FD .lobytes $fffd -0008F5r 1 FE .lobytes $fffe -0008F6r 1 FF .lobytes $ffff +00072Cr 1 ; 4-digit hex values +00072Cr 1 00 .lobytes $0000 +00072Dr 1 01 .lobytes $0001 +00072Er 1 02 .lobytes $0002 +00072Fr 1 03 .lobytes $0003 +000730r 1 04 .lobytes $0004 +000731r 1 05 .lobytes $0005 +000732r 1 06 .lobytes $0006 +000733r 1 07 .lobytes $0007 +000734r 1 08 .lobytes $0008 +000735r 1 09 .lobytes $0009 +000736r 1 0A .lobytes $000a +000737r 1 0B .lobytes $000b +000738r 1 0C .lobytes $000c +000739r 1 0D .lobytes $000d +00073Ar 1 0E .lobytes $000e +00073Br 1 0F .lobytes $000f +00073Cr 1 10 .lobytes $0010 +00073Dr 1 11 .lobytes $0011 +00073Er 1 12 .lobytes $0012 +00073Fr 1 13 .lobytes $0013 +000740r 1 70 .lobytes $0070 +000741r 1 71 .lobytes $0071 +000742r 1 72 .lobytes $0072 +000743r 1 73 .lobytes $0073 +000744r 1 74 .lobytes $0074 +000745r 1 75 .lobytes $0075 +000746r 1 76 .lobytes $0076 +000747r 1 77 .lobytes $0077 +000748r 1 78 .lobytes $0078 +000749r 1 79 .lobytes $0079 +00074Ar 1 7A .lobytes $007a +00074Br 1 7B .lobytes $007b +00074Cr 1 7C .lobytes $007c +00074Dr 1 7D .lobytes $007d +00074Er 1 7E .lobytes $007e +00074Fr 1 7F .lobytes $007f +000750r 1 80 .lobytes $0080 +000751r 1 81 .lobytes $0081 +000752r 1 82 .lobytes $0082 +000753r 1 83 .lobytes $0083 +000754r 1 84 .lobytes $0084 +000755r 1 85 .lobytes $0085 +000756r 1 86 .lobytes $0086 +000757r 1 F0 .lobytes $00f0 +000758r 1 F1 .lobytes $00f1 +000759r 1 F2 .lobytes $00f2 +00075Ar 1 F3 .lobytes $00f3 +00075Br 1 F4 .lobytes $00f4 +00075Cr 1 F5 .lobytes $00f5 +00075Dr 1 F6 .lobytes $00f6 +00075Er 1 F7 .lobytes $00f7 +00075Fr 1 F8 .lobytes $00f8 +000760r 1 F9 .lobytes $00f9 +000761r 1 FA .lobytes $00fa +000762r 1 FB .lobytes $00fb +000763r 1 FC .lobytes $00fc +000764r 1 FD .lobytes $00fd +000765r 1 FE .lobytes $00fe +000766r 1 FF .lobytes $00ff +000767r 1 00 .lobytes $0100 +000768r 1 01 .lobytes $0101 +000769r 1 02 .lobytes $0102 +00076Ar 1 03 .lobytes $0103 +00076Br 1 D2 .lobytes $0fd2 +00076Cr 1 D3 .lobytes $0fd3 +00076Dr 1 D4 .lobytes $0fd4 +00076Er 1 D5 .lobytes $0fd5 +00076Fr 1 D6 .lobytes $0fd6 +000770r 1 D7 .lobytes $0fd7 +000771r 1 D8 .lobytes $0fd8 +000772r 1 D9 .lobytes $0fd9 +000773r 1 DA .lobytes $0fda +000774r 1 DB .lobytes $0fdb +000775r 1 DC .lobytes $0fdc +000776r 1 DD .lobytes $0fdd +000777r 1 DE .lobytes $0fde +000778r 1 DF .lobytes $0fdf +000779r 1 E0 .lobytes $0fe0 +00077Ar 1 E1 .lobytes $0fe1 +00077Br 1 E2 .lobytes $0fe2 +00077Cr 1 E3 .lobytes $0fe3 +00077Dr 1 E4 .lobytes $0fe4 +00077Er 1 E5 .lobytes $0fe5 +00077Fr 1 E6 .lobytes $0fe6 +000780r 1 E7 .lobytes $0fe7 +000781r 1 E8 .lobytes $0fe8 +000782r 1 E9 .lobytes $0fe9 +000783r 1 EA .lobytes $0fea +000784r 1 EB .lobytes $0feb +000785r 1 EC .lobytes $0fec +000786r 1 ED .lobytes $0fed +000787r 1 EE .lobytes $0fee +000788r 1 EF .lobytes $0fef +000789r 1 F0 .lobytes $0ff0 +00078Ar 1 F1 .lobytes $0ff1 +00078Br 1 F2 .lobytes $0ff2 +00078Cr 1 F3 .lobytes $0ff3 +00078Dr 1 F4 .lobytes $0ff4 +00078Er 1 F5 .lobytes $0ff5 +00078Fr 1 F6 .lobytes $0ff6 +000790r 1 F7 .lobytes $0ff7 +000791r 1 F8 .lobytes $0ff8 +000792r 1 F9 .lobytes $0ff9 +000793r 1 FA .lobytes $0ffa +000794r 1 FB .lobytes $0ffb +000795r 1 FC .lobytes $0ffc +000796r 1 FD .lobytes $0ffd +000797r 1 FE .lobytes $0ffe +000798r 1 FF .lobytes $0fff +000799r 1 00 .lobytes $1000 +00079Ar 1 01 .lobytes $1001 +00079Br 1 02 .lobytes $1002 +00079Cr 1 03 .lobytes $1003 +00079Dr 1 04 .lobytes $1004 +00079Er 1 05 .lobytes $1005 +00079Fr 1 06 .lobytes $1006 +0007A0r 1 07 .lobytes $1007 +0007A1r 1 08 .lobytes $1008 +0007A2r 1 F0 .lobytes $7ff0 +0007A3r 1 F1 .lobytes $7ff1 +0007A4r 1 F2 .lobytes $7ff2 +0007A5r 1 F3 .lobytes $7ff3 +0007A6r 1 F4 .lobytes $7ff4 +0007A7r 1 F5 .lobytes $7ff5 +0007A8r 1 F6 .lobytes $7ff6 +0007A9r 1 F7 .lobytes $7ff7 +0007AAr 1 F8 .lobytes $7ff8 +0007ABr 1 F9 .lobytes $7ff9 +0007ACr 1 FA .lobytes $7ffa +0007ADr 1 FB .lobytes $7ffb +0007AEr 1 FC .lobytes $7ffc +0007AFr 1 FD .lobytes $7ffd +0007B0r 1 FE .lobytes $7ffe +0007B1r 1 FF .lobytes $7fff +0007B2r 1 00 .lobytes $8000 +0007B3r 1 01 .lobytes $8001 +0007B4r 1 02 .lobytes $8002 +0007B5r 1 03 .lobytes $8003 +0007B6r 1 04 .lobytes $8004 +0007B7r 1 05 .lobytes $8005 +0007B8r 1 06 .lobytes $8006 +0007B9r 1 07 .lobytes $8007 +0007BAr 1 08 .lobytes $8008 +0007BBr 1 09 .lobytes $8009 +0007BCr 1 0A .lobytes $800a +0007BDr 1 0B .lobytes $800b +0007BEr 1 E1 .lobytes $9fe1 +0007BFr 1 E2 .lobytes $9fe2 +0007C0r 1 E3 .lobytes $9fe3 +0007C1r 1 E4 .lobytes $9fe4 +0007C2r 1 E5 .lobytes $9fe5 +0007C3r 1 E6 .lobytes $9fe6 +0007C4r 1 E7 .lobytes $9fe7 +0007C5r 1 E8 .lobytes $9fe8 +0007C6r 1 E9 .lobytes $9fe9 +0007C7r 1 EA .lobytes $9fea +0007C8r 1 EB .lobytes $9feb +0007C9r 1 EC .lobytes $9fec +0007CAr 1 ED .lobytes $9fed +0007CBr 1 EE .lobytes $9fee +0007CCr 1 EF .lobytes $9fef +0007CDr 1 F0 .lobytes $9ff0 +0007CEr 1 F1 .lobytes $9ff1 +0007CFr 1 F2 .lobytes $9ff2 +0007D0r 1 F3 .lobytes $9ff3 +0007D1r 1 F4 .lobytes $9ff4 +0007D2r 1 F5 .lobytes $9ff5 +0007D3r 1 F6 .lobytes $9ff6 +0007D4r 1 F7 .lobytes $9ff7 +0007D5r 1 F8 .lobytes $9ff8 +0007D6r 1 F9 .lobytes $9ff9 +0007D7r 1 FA .lobytes $9ffa +0007D8r 1 FB .lobytes $9ffb +0007D9r 1 FC .lobytes $9ffc +0007DAr 1 FD .lobytes $9ffd +0007DBr 1 FE .lobytes $9ffe +0007DCr 1 FF .lobytes $9fff +0007DDr 1 00 .lobytes $a000 +0007DEr 1 01 .lobytes $a001 +0007DFr 1 02 .lobytes $a002 +0007E0r 1 03 .lobytes $a003 +0007E1r 1 04 .lobytes $a004 +0007E2r 1 05 .lobytes $a005 +0007E3r 1 06 .lobytes $a006 +0007E4r 1 07 .lobytes $a007 +0007E5r 1 08 .lobytes $a008 +0007E6r 1 09 .lobytes $a009 +0007E7r 1 0A .lobytes $a00a +0007E8r 1 0B .lobytes $a00b +0007E9r 1 0C .lobytes $a00c +0007EAr 1 0D .lobytes $a00d +0007EBr 1 0E .lobytes $a00e +0007ECr 1 0F .lobytes $a00f +0007EDr 1 E1 .lobytes $afe1 +0007EEr 1 E2 .lobytes $afe2 +0007EFr 1 E3 .lobytes $afe3 +0007F0r 1 E4 .lobytes $afe4 +0007F1r 1 E5 .lobytes $afe5 +0007F2r 1 E6 .lobytes $afe6 +0007F3r 1 E7 .lobytes $afe7 +0007F4r 1 E8 .lobytes $afe8 +0007F5r 1 E9 .lobytes $afe9 +0007F6r 1 EA .lobytes $afea +0007F7r 1 EB .lobytes $afeb +0007F8r 1 EC .lobytes $afec +0007F9r 1 ED .lobytes $afed +0007FAr 1 EE .lobytes $afee +0007FBr 1 EF .lobytes $afef +0007FCr 1 F0 .lobytes $aff0 +0007FDr 1 F1 .lobytes $aff1 +0007FEr 1 F2 .lobytes $aff2 +0007FFr 1 F3 .lobytes $aff3 +000800r 1 F4 .lobytes $aff4 +000801r 1 F5 .lobytes $aff5 +000802r 1 F6 .lobytes $aff6 +000803r 1 F7 .lobytes $aff7 +000804r 1 F8 .lobytes $aff8 +000805r 1 F9 .lobytes $aff9 +000806r 1 FA .lobytes $affa +000807r 1 FB .lobytes $affb +000808r 1 FC .lobytes $affc +000809r 1 FD .lobytes $affd +00080Ar 1 FE .lobytes $affe +00080Br 1 FF .lobytes $afff +00080Cr 1 00 .lobytes $b000 +00080Dr 1 01 .lobytes $b001 +00080Er 1 02 .lobytes $b002 +00080Fr 1 03 .lobytes $b003 +000810r 1 04 .lobytes $b004 +000811r 1 05 .lobytes $b005 +000812r 1 06 .lobytes $b006 +000813r 1 07 .lobytes $b007 +000814r 1 08 .lobytes $b008 +000815r 1 09 .lobytes $b009 +000816r 1 0A .lobytes $b00a +000817r 1 0B .lobytes $b00b +000818r 1 0C .lobytes $b00c +000819r 1 0D .lobytes $b00d +00081Ar 1 0E .lobytes $b00e +00081Br 1 0F .lobytes $b00f +00081Cr 1 E1 .lobytes $bfe1 +00081Dr 1 E2 .lobytes $bfe2 +00081Er 1 E3 .lobytes $bfe3 +00081Fr 1 E4 .lobytes $bfe4 +000820r 1 E5 .lobytes $bfe5 +000821r 1 E6 .lobytes $bfe6 +000822r 1 E7 .lobytes $bfe7 +000823r 1 E8 .lobytes $bfe8 +000824r 1 E9 .lobytes $bfe9 +000825r 1 EA .lobytes $bfea +000826r 1 EB .lobytes $bfeb +000827r 1 EC .lobytes $bfec +000828r 1 ED .lobytes $bfed +000829r 1 EE .lobytes $bfee +00082Ar 1 EF .lobytes $bfef +00082Br 1 F0 .lobytes $bff0 +00082Cr 1 F1 .lobytes $bff1 +00082Dr 1 F2 .lobytes $bff2 +00082Er 1 F3 .lobytes $bff3 +00082Fr 1 F4 .lobytes $bff4 +000830r 1 F5 .lobytes $bff5 +000831r 1 F6 .lobytes $bff6 +000832r 1 F7 .lobytes $bff7 +000833r 1 F8 .lobytes $bff8 +000834r 1 F9 .lobytes $bff9 +000835r 1 FA .lobytes $bffa +000836r 1 FB .lobytes $bffb +000837r 1 FC .lobytes $bffc +000838r 1 FD .lobytes $bffd +000839r 1 FE .lobytes $bffe +00083Ar 1 FF .lobytes $bfff +00083Br 1 00 .lobytes $c000 +00083Cr 1 01 .lobytes $c001 +00083Dr 1 02 .lobytes $c002 +00083Er 1 03 .lobytes $c003 +00083Fr 1 04 .lobytes $c004 +000840r 1 05 .lobytes $c005 +000841r 1 06 .lobytes $c006 +000842r 1 07 .lobytes $c007 +000843r 1 08 .lobytes $c008 +000844r 1 09 .lobytes $c009 +000845r 1 0A .lobytes $c00a +000846r 1 0B .lobytes $c00b +000847r 1 0C .lobytes $c00c +000848r 1 0D .lobytes $c00d +000849r 1 0E .lobytes $c00e +00084Ar 1 0F .lobytes $c00f +00084Br 1 E1 .lobytes $cfe1 +00084Cr 1 E2 .lobytes $cfe2 +00084Dr 1 E3 .lobytes $cfe3 +00084Er 1 E4 .lobytes $cfe4 +00084Fr 1 E5 .lobytes $cfe5 +000850r 1 E6 .lobytes $cfe6 +000851r 1 E7 .lobytes $cfe7 +000852r 1 E8 .lobytes $cfe8 +000853r 1 E9 .lobytes $cfe9 +000854r 1 EA .lobytes $cfea +000855r 1 EB .lobytes $cfeb +000856r 1 EC .lobytes $cfec +000857r 1 ED .lobytes $cfed +000858r 1 EE .lobytes $cfee +000859r 1 EF .lobytes $cfef +00085Ar 1 F0 .lobytes $cff0 +00085Br 1 F1 .lobytes $cff1 +00085Cr 1 F2 .lobytes $cff2 +00085Dr 1 F3 .lobytes $cff3 +00085Er 1 F4 .lobytes $cff4 +00085Fr 1 F5 .lobytes $cff5 +000860r 1 F6 .lobytes $cff6 +000861r 1 F7 .lobytes $cff7 +000862r 1 F8 .lobytes $cff8 +000863r 1 F9 .lobytes $cff9 +000864r 1 FA .lobytes $cffa +000865r 1 FB .lobytes $cffb +000866r 1 FC .lobytes $cffc +000867r 1 FD .lobytes $cffd +000868r 1 FE .lobytes $cffe +000869r 1 FF .lobytes $cfff +00086Ar 1 00 .lobytes $d000 +00086Br 1 01 .lobytes $d001 +00086Cr 1 02 .lobytes $d002 +00086Dr 1 03 .lobytes $d003 +00086Er 1 04 .lobytes $d004 +00086Fr 1 05 .lobytes $d005 +000870r 1 06 .lobytes $d006 +000871r 1 07 .lobytes $d007 +000872r 1 08 .lobytes $d008 +000873r 1 09 .lobytes $d009 +000874r 1 0A .lobytes $d00a +000875r 1 0B .lobytes $d00b +000876r 1 0C .lobytes $d00c +000877r 1 0D .lobytes $d00d +000878r 1 0E .lobytes $d00e +000879r 1 0F .lobytes $d00f +00087Ar 1 E1 .lobytes $dfe1 +00087Br 1 E2 .lobytes $dfe2 +00087Cr 1 E3 .lobytes $dfe3 +00087Dr 1 E4 .lobytes $dfe4 +00087Er 1 E5 .lobytes $dfe5 +00087Fr 1 E6 .lobytes $dfe6 +000880r 1 E7 .lobytes $dfe7 +000881r 1 E8 .lobytes $dfe8 +000882r 1 E9 .lobytes $dfe9 +000883r 1 EA .lobytes $dfea +000884r 1 EB .lobytes $dfeb +000885r 1 EC .lobytes $dfec +000886r 1 ED .lobytes $dfed +000887r 1 EE .lobytes $dfee +000888r 1 EF .lobytes $dfef +000889r 1 F0 .lobytes $dff0 +00088Ar 1 F1 .lobytes $dff1 +00088Br 1 F2 .lobytes $dff2 +00088Cr 1 F3 .lobytes $dff3 +00088Dr 1 F4 .lobytes $dff4 +00088Er 1 F5 .lobytes $dff5 +00088Fr 1 F6 .lobytes $dff6 +000890r 1 F7 .lobytes $dff7 +000891r 1 F8 .lobytes $dff8 +000892r 1 F9 .lobytes $dff9 +000893r 1 FA .lobytes $dffa +000894r 1 FB .lobytes $dffb +000895r 1 FC .lobytes $dffc +000896r 1 FD .lobytes $dffd +000897r 1 FE .lobytes $dffe +000898r 1 FF .lobytes $dfff +000899r 1 00 .lobytes $e000 +00089Ar 1 01 .lobytes $e001 +00089Br 1 02 .lobytes $e002 +00089Cr 1 03 .lobytes $e003 +00089Dr 1 04 .lobytes $e004 +00089Er 1 05 .lobytes $e005 +00089Fr 1 06 .lobytes $e006 +0008A0r 1 07 .lobytes $e007 +0008A1r 1 08 .lobytes $e008 +0008A2r 1 09 .lobytes $e009 +0008A3r 1 0A .lobytes $e00a +0008A4r 1 0B .lobytes $e00b +0008A5r 1 0C .lobytes $e00c +0008A6r 1 0D .lobytes $e00d +0008A7r 1 0E .lobytes $e00e +0008A8r 1 0F .lobytes $e00f +0008A9r 1 E1 .lobytes $efe1 +0008AAr 1 E2 .lobytes $efe2 +0008ABr 1 E3 .lobytes $efe3 +0008ACr 1 E4 .lobytes $efe4 +0008ADr 1 E5 .lobytes $efe5 +0008AEr 1 E6 .lobytes $efe6 +0008AFr 1 E7 .lobytes $efe7 +0008B0r 1 E8 .lobytes $efe8 +0008B1r 1 E9 .lobytes $efe9 +0008B2r 1 EA .lobytes $efea +0008B3r 1 EB .lobytes $efeb +0008B4r 1 EC .lobytes $efec +0008B5r 1 ED .lobytes $efed +0008B6r 1 EE .lobytes $efee +0008B7r 1 EF .lobytes $efef +0008B8r 1 F0 .lobytes $eff0 +0008B9r 1 F1 .lobytes $eff1 +0008BAr 1 F2 .lobytes $eff2 +0008BBr 1 F3 .lobytes $eff3 +0008BCr 1 F4 .lobytes $eff4 +0008BDr 1 F5 .lobytes $eff5 +0008BEr 1 F6 .lobytes $eff6 +0008BFr 1 F7 .lobytes $eff7 +0008C0r 1 F8 .lobytes $eff8 +0008C1r 1 F9 .lobytes $eff9 +0008C2r 1 FA .lobytes $effa +0008C3r 1 FB .lobytes $effb +0008C4r 1 FC .lobytes $effc +0008C5r 1 FD .lobytes $effd +0008C6r 1 FE .lobytes $effe +0008C7r 1 FF .lobytes $efff +0008C8r 1 00 .lobytes $f000 +0008C9r 1 01 .lobytes $f001 +0008CAr 1 02 .lobytes $f002 +0008CBr 1 03 .lobytes $f003 +0008CCr 1 04 .lobytes $f004 +0008CDr 1 05 .lobytes $f005 +0008CEr 1 06 .lobytes $f006 +0008CFr 1 07 .lobytes $f007 +0008D0r 1 08 .lobytes $f008 +0008D1r 1 09 .lobytes $f009 +0008D2r 1 0A .lobytes $f00a +0008D3r 1 0B .lobytes $f00b +0008D4r 1 0C .lobytes $f00c +0008D5r 1 0D .lobytes $f00d +0008D6r 1 0E .lobytes $f00e +0008D7r 1 0F .lobytes $f00f +0008D8r 1 E1 .lobytes $ffe1 +0008D9r 1 E2 .lobytes $ffe2 +0008DAr 1 E3 .lobytes $ffe3 +0008DBr 1 E4 .lobytes $ffe4 +0008DCr 1 E5 .lobytes $ffe5 +0008DDr 1 E6 .lobytes $ffe6 +0008DEr 1 E7 .lobytes $ffe7 +0008DFr 1 E8 .lobytes $ffe8 +0008E0r 1 E9 .lobytes $ffe9 +0008E1r 1 EA .lobytes $ffea +0008E2r 1 EB .lobytes $ffeb +0008E3r 1 EC .lobytes $ffec +0008E4r 1 ED .lobytes $ffed +0008E5r 1 EE .lobytes $ffee +0008E6r 1 EF .lobytes $ffef +0008E7r 1 F0 .lobytes $fff0 +0008E8r 1 F1 .lobytes $fff1 +0008E9r 1 F2 .lobytes $fff2 +0008EAr 1 F3 .lobytes $fff3 +0008EBr 1 F4 .lobytes $fff4 +0008ECr 1 F5 .lobytes $fff5 +0008EDr 1 F6 .lobytes $fff6 +0008EEr 1 F7 .lobytes $fff7 +0008EFr 1 F8 .lobytes $fff8 +0008F0r 1 F9 .lobytes $fff9 +0008F1r 1 FA .lobytes $fffa +0008F2r 1 FB .lobytes $fffb +0008F3r 1 FC .lobytes $fffc +0008F4r 1 FD .lobytes $fffd +0008F5r 1 FE .lobytes $fffe +0008F6r 1 FF .lobytes $ffff 0008F7r 1 -0008F7r 1 ; 4-digit hex values, uppercase -0008F7r 1 00 .lobytes $0000 -0008F8r 1 01 .lobytes $0001 -0008F9r 1 02 .lobytes $0002 -0008FAr 1 03 .lobytes $0003 -0008FBr 1 04 .lobytes $0004 -0008FCr 1 05 .lobytes $0005 -0008FDr 1 06 .lobytes $0006 -0008FEr 1 07 .lobytes $0007 -0008FFr 1 08 .lobytes $0008 -000900r 1 09 .lobytes $0009 -000901r 1 0A .lobytes $000A -000902r 1 0B .lobytes $000B -000903r 1 0C .lobytes $000C -000904r 1 0D .lobytes $000D -000905r 1 0E .lobytes $000E -000906r 1 0F .lobytes $000F -000907r 1 10 .lobytes $0010 -000908r 1 11 .lobytes $0011 -000909r 1 12 .lobytes $0012 -00090Ar 1 13 .lobytes $0013 -00090Br 1 70 .lobytes $0070 -00090Cr 1 71 .lobytes $0071 -00090Dr 1 72 .lobytes $0072 -00090Er 1 73 .lobytes $0073 -00090Fr 1 74 .lobytes $0074 -000910r 1 75 .lobytes $0075 -000911r 1 76 .lobytes $0076 -000912r 1 77 .lobytes $0077 -000913r 1 78 .lobytes $0078 -000914r 1 79 .lobytes $0079 -000915r 1 7A .lobytes $007A -000916r 1 7B .lobytes $007B -000917r 1 7C .lobytes $007C -000918r 1 7D .lobytes $007D -000919r 1 7E .lobytes $007E -00091Ar 1 7F .lobytes $007F -00091Br 1 80 .lobytes $0080 -00091Cr 1 81 .lobytes $0081 -00091Dr 1 82 .lobytes $0082 -00091Er 1 83 .lobytes $0083 -00091Fr 1 84 .lobytes $0084 -000920r 1 85 .lobytes $0085 -000921r 1 86 .lobytes $0086 -000922r 1 F0 .lobytes $00F0 -000923r 1 F1 .lobytes $00F1 -000924r 1 F2 .lobytes $00F2 -000925r 1 F3 .lobytes $00F3 -000926r 1 F4 .lobytes $00F4 -000927r 1 F5 .lobytes $00F5 -000928r 1 F6 .lobytes $00F6 -000929r 1 F7 .lobytes $00F7 -00092Ar 1 F8 .lobytes $00F8 -00092Br 1 F9 .lobytes $00F9 -00092Cr 1 FA .lobytes $00FA -00092Dr 1 FB .lobytes $00FB -00092Er 1 FC .lobytes $00FC -00092Fr 1 FD .lobytes $00FD -000930r 1 FE .lobytes $00FE -000931r 1 FF .lobytes $00FF -000932r 1 00 .lobytes $0100 -000933r 1 01 .lobytes $0101 -000934r 1 02 .lobytes $0102 -000935r 1 03 .lobytes $0103 -000936r 1 D2 .lobytes $0FD2 -000937r 1 D3 .lobytes $0FD3 -000938r 1 D4 .lobytes $0FD4 -000939r 1 D5 .lobytes $0FD5 -00093Ar 1 D6 .lobytes $0FD6 -00093Br 1 D7 .lobytes $0FD7 -00093Cr 1 D8 .lobytes $0FD8 -00093Dr 1 D9 .lobytes $0FD9 -00093Er 1 DA .lobytes $0FDA -00093Fr 1 DB .lobytes $0FDB -000940r 1 DC .lobytes $0FDC -000941r 1 DD .lobytes $0FDD -000942r 1 DE .lobytes $0FDE -000943r 1 DF .lobytes $0FDF -000944r 1 E0 .lobytes $0FE0 -000945r 1 E1 .lobytes $0FE1 -000946r 1 E2 .lobytes $0FE2 -000947r 1 E3 .lobytes $0FE3 -000948r 1 E4 .lobytes $0FE4 -000949r 1 E5 .lobytes $0FE5 -00094Ar 1 E6 .lobytes $0FE6 -00094Br 1 E7 .lobytes $0FE7 -00094Cr 1 E8 .lobytes $0FE8 -00094Dr 1 E9 .lobytes $0FE9 -00094Er 1 EA .lobytes $0FEA -00094Fr 1 EB .lobytes $0FEB -000950r 1 EC .lobytes $0FEC -000951r 1 ED .lobytes $0FED -000952r 1 EE .lobytes $0FEE -000953r 1 EF .lobytes $0FEF -000954r 1 F0 .lobytes $0FF0 -000955r 1 F1 .lobytes $0FF1 -000956r 1 F2 .lobytes $0FF2 -000957r 1 F3 .lobytes $0FF3 -000958r 1 F4 .lobytes $0FF4 -000959r 1 F5 .lobytes $0FF5 -00095Ar 1 F6 .lobytes $0FF6 -00095Br 1 F7 .lobytes $0FF7 -00095Cr 1 F8 .lobytes $0FF8 -00095Dr 1 F9 .lobytes $0FF9 -00095Er 1 FA .lobytes $0FFA -00095Fr 1 FB .lobytes $0FFB -000960r 1 FC .lobytes $0FFC -000961r 1 FD .lobytes $0FFD -000962r 1 FE .lobytes $0FFE -000963r 1 FF .lobytes $0FFF -000964r 1 00 .lobytes $1000 -000965r 1 01 .lobytes $1001 -000966r 1 02 .lobytes $1002 -000967r 1 03 .lobytes $1003 -000968r 1 04 .lobytes $1004 -000969r 1 05 .lobytes $1005 -00096Ar 1 06 .lobytes $1006 -00096Br 1 07 .lobytes $1007 -00096Cr 1 08 .lobytes $1008 -00096Dr 1 F0 .lobytes $7FF0 -00096Er 1 F1 .lobytes $7FF1 -00096Fr 1 F2 .lobytes $7FF2 -000970r 1 F3 .lobytes $7FF3 -000971r 1 F4 .lobytes $7FF4 -000972r 1 F5 .lobytes $7FF5 -000973r 1 F6 .lobytes $7FF6 -000974r 1 F7 .lobytes $7FF7 -000975r 1 F8 .lobytes $7FF8 -000976r 1 F9 .lobytes $7FF9 -000977r 1 FA .lobytes $7FFA -000978r 1 FB .lobytes $7FFB -000979r 1 FC .lobytes $7FFC -00097Ar 1 FD .lobytes $7FFD -00097Br 1 FE .lobytes $7FFE -00097Cr 1 FF .lobytes $7FFF -00097Dr 1 00 .lobytes $8000 -00097Er 1 01 .lobytes $8001 -00097Fr 1 02 .lobytes $8002 -000980r 1 03 .lobytes $8003 -000981r 1 04 .lobytes $8004 -000982r 1 05 .lobytes $8005 -000983r 1 06 .lobytes $8006 -000984r 1 07 .lobytes $8007 -000985r 1 08 .lobytes $8008 -000986r 1 09 .lobytes $8009 -000987r 1 0A .lobytes $800A -000988r 1 0B .lobytes $800B -000989r 1 E1 .lobytes $9FE1 -00098Ar 1 E2 .lobytes $9FE2 -00098Br 1 E3 .lobytes $9FE3 -00098Cr 1 E4 .lobytes $9FE4 -00098Dr 1 E5 .lobytes $9FE5 -00098Er 1 E6 .lobytes $9FE6 -00098Fr 1 E7 .lobytes $9FE7 -000990r 1 E8 .lobytes $9FE8 -000991r 1 E9 .lobytes $9FE9 -000992r 1 EA .lobytes $9FEA -000993r 1 EB .lobytes $9FEB -000994r 1 EC .lobytes $9FEC -000995r 1 ED .lobytes $9FED -000996r 1 EE .lobytes $9FEE -000997r 1 EF .lobytes $9FEF -000998r 1 F0 .lobytes $9FF0 -000999r 1 F1 .lobytes $9FF1 -00099Ar 1 F2 .lobytes $9FF2 -00099Br 1 F3 .lobytes $9FF3 -00099Cr 1 F4 .lobytes $9FF4 -00099Dr 1 F5 .lobytes $9FF5 -00099Er 1 F6 .lobytes $9FF6 -00099Fr 1 F7 .lobytes $9FF7 -0009A0r 1 F8 .lobytes $9FF8 -0009A1r 1 F9 .lobytes $9FF9 -0009A2r 1 FA .lobytes $9FFA -0009A3r 1 FB .lobytes $9FFB -0009A4r 1 FC .lobytes $9FFC -0009A5r 1 FD .lobytes $9FFD -0009A6r 1 FE .lobytes $9FFE -0009A7r 1 FF .lobytes $9FFF -0009A8r 1 00 .lobytes $A000 -0009A9r 1 01 .lobytes $A001 -0009AAr 1 02 .lobytes $A002 -0009ABr 1 03 .lobytes $A003 -0009ACr 1 04 .lobytes $A004 -0009ADr 1 05 .lobytes $A005 -0009AEr 1 06 .lobytes $A006 -0009AFr 1 07 .lobytes $A007 -0009B0r 1 08 .lobytes $A008 -0009B1r 1 09 .lobytes $A009 -0009B2r 1 0A .lobytes $A00A -0009B3r 1 0B .lobytes $A00B -0009B4r 1 0C .lobytes $A00C -0009B5r 1 0D .lobytes $A00D -0009B6r 1 0E .lobytes $A00E -0009B7r 1 0F .lobytes $A00F -0009B8r 1 E1 .lobytes $AFE1 -0009B9r 1 E2 .lobytes $AFE2 -0009BAr 1 E3 .lobytes $AFE3 -0009BBr 1 E4 .lobytes $AFE4 -0009BCr 1 E5 .lobytes $AFE5 -0009BDr 1 E6 .lobytes $AFE6 -0009BEr 1 E7 .lobytes $AFE7 -0009BFr 1 E8 .lobytes $AFE8 -0009C0r 1 E9 .lobytes $AFE9 -0009C1r 1 EA .lobytes $AFEA -0009C2r 1 EB .lobytes $AFEB -0009C3r 1 EC .lobytes $AFEC -0009C4r 1 ED .lobytes $AFED -0009C5r 1 EE .lobytes $AFEE -0009C6r 1 EF .lobytes $AFEF -0009C7r 1 F0 .lobytes $AFF0 -0009C8r 1 F1 .lobytes $AFF1 -0009C9r 1 F2 .lobytes $AFF2 -0009CAr 1 F3 .lobytes $AFF3 -0009CBr 1 F4 .lobytes $AFF4 -0009CCr 1 F5 .lobytes $AFF5 -0009CDr 1 F6 .lobytes $AFF6 -0009CEr 1 F7 .lobytes $AFF7 -0009CFr 1 F8 .lobytes $AFF8 -0009D0r 1 F9 .lobytes $AFF9 -0009D1r 1 FA .lobytes $AFFA -0009D2r 1 FB .lobytes $AFFB -0009D3r 1 FC .lobytes $AFFC -0009D4r 1 FD .lobytes $AFFD -0009D5r 1 FE .lobytes $AFFE -0009D6r 1 FF .lobytes $AFFF -0009D7r 1 00 .lobytes $B000 -0009D8r 1 01 .lobytes $B001 -0009D9r 1 02 .lobytes $B002 -0009DAr 1 03 .lobytes $B003 -0009DBr 1 04 .lobytes $B004 -0009DCr 1 05 .lobytes $B005 -0009DDr 1 06 .lobytes $B006 -0009DEr 1 07 .lobytes $B007 -0009DFr 1 08 .lobytes $B008 -0009E0r 1 09 .lobytes $B009 -0009E1r 1 0A .lobytes $B00A -0009E2r 1 0B .lobytes $B00B -0009E3r 1 0C .lobytes $B00C -0009E4r 1 0D .lobytes $B00D -0009E5r 1 0E .lobytes $B00E -0009E6r 1 0F .lobytes $B00F -0009E7r 1 E1 .lobytes $BFE1 -0009E8r 1 E2 .lobytes $BFE2 -0009E9r 1 E3 .lobytes $BFE3 -0009EAr 1 E4 .lobytes $BFE4 -0009EBr 1 E5 .lobytes $BFE5 -0009ECr 1 E6 .lobytes $BFE6 -0009EDr 1 E7 .lobytes $BFE7 -0009EEr 1 E8 .lobytes $BFE8 -0009EFr 1 E9 .lobytes $BFE9 -0009F0r 1 EA .lobytes $BFEA -0009F1r 1 EB .lobytes $BFEB -0009F2r 1 EC .lobytes $BFEC -0009F3r 1 ED .lobytes $BFED -0009F4r 1 EE .lobytes $BFEE -0009F5r 1 EF .lobytes $BFEF -0009F6r 1 F0 .lobytes $BFF0 -0009F7r 1 F1 .lobytes $BFF1 -0009F8r 1 F2 .lobytes $BFF2 -0009F9r 1 F3 .lobytes $BFF3 -0009FAr 1 F4 .lobytes $BFF4 -0009FBr 1 F5 .lobytes $BFF5 -0009FCr 1 F6 .lobytes $BFF6 -0009FDr 1 F7 .lobytes $BFF7 -0009FEr 1 F8 .lobytes $BFF8 -0009FFr 1 F9 .lobytes $BFF9 -000A00r 1 FA .lobytes $BFFA -000A01r 1 FB .lobytes $BFFB -000A02r 1 FC .lobytes $BFFC -000A03r 1 FD .lobytes $BFFD -000A04r 1 FE .lobytes $BFFE -000A05r 1 FF .lobytes $BFFF -000A06r 1 00 .lobytes $C000 -000A07r 1 01 .lobytes $C001 -000A08r 1 02 .lobytes $C002 -000A09r 1 03 .lobytes $C003 -000A0Ar 1 04 .lobytes $C004 -000A0Br 1 05 .lobytes $C005 -000A0Cr 1 06 .lobytes $C006 -000A0Dr 1 07 .lobytes $C007 -000A0Er 1 08 .lobytes $C008 -000A0Fr 1 09 .lobytes $C009 -000A10r 1 0A .lobytes $C00A -000A11r 1 0B .lobytes $C00B -000A12r 1 0C .lobytes $C00C -000A13r 1 0D .lobytes $C00D -000A14r 1 0E .lobytes $C00E -000A15r 1 0F .lobytes $C00F -000A16r 1 E1 .lobytes $CFE1 -000A17r 1 E2 .lobytes $CFE2 -000A18r 1 E3 .lobytes $CFE3 -000A19r 1 E4 .lobytes $CFE4 -000A1Ar 1 E5 .lobytes $CFE5 -000A1Br 1 E6 .lobytes $CFE6 -000A1Cr 1 E7 .lobytes $CFE7 -000A1Dr 1 E8 .lobytes $CFE8 -000A1Er 1 E9 .lobytes $CFE9 -000A1Fr 1 EA .lobytes $CFEA -000A20r 1 EB .lobytes $CFEB -000A21r 1 EC .lobytes $CFEC -000A22r 1 ED .lobytes $CFED -000A23r 1 EE .lobytes $CFEE -000A24r 1 EF .lobytes $CFEF -000A25r 1 F0 .lobytes $CFF0 -000A26r 1 F1 .lobytes $CFF1 -000A27r 1 F2 .lobytes $CFF2 -000A28r 1 F3 .lobytes $CFF3 -000A29r 1 F4 .lobytes $CFF4 -000A2Ar 1 F5 .lobytes $CFF5 -000A2Br 1 F6 .lobytes $CFF6 -000A2Cr 1 F7 .lobytes $CFF7 -000A2Dr 1 F8 .lobytes $CFF8 -000A2Er 1 F9 .lobytes $CFF9 -000A2Fr 1 FA .lobytes $CFFA -000A30r 1 FB .lobytes $CFFB -000A31r 1 FC .lobytes $CFFC -000A32r 1 FD .lobytes $CFFD -000A33r 1 FE .lobytes $CFFE -000A34r 1 FF .lobytes $CFFF -000A35r 1 00 .lobytes $D000 -000A36r 1 01 .lobytes $D001 -000A37r 1 02 .lobytes $D002 -000A38r 1 03 .lobytes $D003 -000A39r 1 04 .lobytes $D004 -000A3Ar 1 05 .lobytes $D005 -000A3Br 1 06 .lobytes $D006 -000A3Cr 1 07 .lobytes $D007 -000A3Dr 1 08 .lobytes $D008 -000A3Er 1 09 .lobytes $D009 -000A3Fr 1 0A .lobytes $D00A -000A40r 1 0B .lobytes $D00B -000A41r 1 0C .lobytes $D00C -000A42r 1 0D .lobytes $D00D -000A43r 1 0E .lobytes $D00E -000A44r 1 0F .lobytes $D00F -000A45r 1 E1 .lobytes $DFE1 -000A46r 1 E2 .lobytes $DFE2 -000A47r 1 E3 .lobytes $DFE3 -000A48r 1 E4 .lobytes $DFE4 -000A49r 1 E5 .lobytes $DFE5 -000A4Ar 1 E6 .lobytes $DFE6 -000A4Br 1 E7 .lobytes $DFE7 -000A4Cr 1 E8 .lobytes $DFE8 -000A4Dr 1 E9 .lobytes $DFE9 -000A4Er 1 EA .lobytes $DFEA -000A4Fr 1 EB .lobytes $DFEB -000A50r 1 EC .lobytes $DFEC -000A51r 1 ED .lobytes $DFED -000A52r 1 EE .lobytes $DFEE -000A53r 1 EF .lobytes $DFEF -000A54r 1 F0 .lobytes $DFF0 -000A55r 1 F1 .lobytes $DFF1 -000A56r 1 F2 .lobytes $DFF2 -000A57r 1 F3 .lobytes $DFF3 -000A58r 1 F4 .lobytes $DFF4 -000A59r 1 F5 .lobytes $DFF5 -000A5Ar 1 F6 .lobytes $DFF6 -000A5Br 1 F7 .lobytes $DFF7 -000A5Cr 1 F8 .lobytes $DFF8 -000A5Dr 1 F9 .lobytes $DFF9 -000A5Er 1 FA .lobytes $DFFA -000A5Fr 1 FB .lobytes $DFFB -000A60r 1 FC .lobytes $DFFC -000A61r 1 FD .lobytes $DFFD -000A62r 1 FE .lobytes $DFFE -000A63r 1 FF .lobytes $DFFF -000A64r 1 00 .lobytes $E000 -000A65r 1 01 .lobytes $E001 -000A66r 1 02 .lobytes $E002 -000A67r 1 03 .lobytes $E003 -000A68r 1 04 .lobytes $E004 -000A69r 1 05 .lobytes $E005 -000A6Ar 1 06 .lobytes $E006 -000A6Br 1 07 .lobytes $E007 -000A6Cr 1 08 .lobytes $E008 -000A6Dr 1 09 .lobytes $E009 -000A6Er 1 0A .lobytes $E00A -000A6Fr 1 0B .lobytes $E00B -000A70r 1 0C .lobytes $E00C -000A71r 1 0D .lobytes $E00D -000A72r 1 0E .lobytes $E00E -000A73r 1 0F .lobytes $E00F -000A74r 1 E1 .lobytes $EFE1 -000A75r 1 E2 .lobytes $EFE2 -000A76r 1 E3 .lobytes $EFE3 -000A77r 1 E4 .lobytes $EFE4 -000A78r 1 E5 .lobytes $EFE5 -000A79r 1 E6 .lobytes $EFE6 -000A7Ar 1 E7 .lobytes $EFE7 -000A7Br 1 E8 .lobytes $EFE8 -000A7Cr 1 E9 .lobytes $EFE9 -000A7Dr 1 EA .lobytes $EFEA -000A7Er 1 EB .lobytes $EFEB -000A7Fr 1 EC .lobytes $EFEC -000A80r 1 ED .lobytes $EFED -000A81r 1 EE .lobytes $EFEE -000A82r 1 EF .lobytes $EFEF -000A83r 1 F0 .lobytes $EFF0 -000A84r 1 F1 .lobytes $EFF1 -000A85r 1 F2 .lobytes $EFF2 -000A86r 1 F3 .lobytes $EFF3 -000A87r 1 F4 .lobytes $EFF4 -000A88r 1 F5 .lobytes $EFF5 -000A89r 1 F6 .lobytes $EFF6 -000A8Ar 1 F7 .lobytes $EFF7 -000A8Br 1 F8 .lobytes $EFF8 -000A8Cr 1 F9 .lobytes $EFF9 -000A8Dr 1 FA .lobytes $EFFA -000A8Er 1 FB .lobytes $EFFB -000A8Fr 1 FC .lobytes $EFFC -000A90r 1 FD .lobytes $EFFD -000A91r 1 FE .lobytes $EFFE -000A92r 1 FF .lobytes $EFFF -000A93r 1 00 .lobytes $F000 -000A94r 1 01 .lobytes $F001 -000A95r 1 02 .lobytes $F002 -000A96r 1 03 .lobytes $F003 -000A97r 1 04 .lobytes $F004 -000A98r 1 05 .lobytes $F005 -000A99r 1 06 .lobytes $F006 -000A9Ar 1 07 .lobytes $F007 -000A9Br 1 08 .lobytes $F008 -000A9Cr 1 09 .lobytes $F009 -000A9Dr 1 0A .lobytes $F00A -000A9Er 1 0B .lobytes $F00B -000A9Fr 1 0C .lobytes $F00C -000AA0r 1 0D .lobytes $F00D -000AA1r 1 0E .lobytes $F00E -000AA2r 1 0F .lobytes $F00F -000AA3r 1 E1 .lobytes $FFE1 -000AA4r 1 E2 .lobytes $FFE2 -000AA5r 1 E3 .lobytes $FFE3 -000AA6r 1 E4 .lobytes $FFE4 -000AA7r 1 E5 .lobytes $FFE5 -000AA8r 1 E6 .lobytes $FFE6 -000AA9r 1 E7 .lobytes $FFE7 -000AAAr 1 E8 .lobytes $FFE8 -000AABr 1 E9 .lobytes $FFE9 -000AACr 1 EA .lobytes $FFEA -000AADr 1 EB .lobytes $FFEB -000AAEr 1 EC .lobytes $FFEC -000AAFr 1 ED .lobytes $FFED -000AB0r 1 EE .lobytes $FFEE -000AB1r 1 EF .lobytes $FFEF -000AB2r 1 F0 .lobytes $FFF0 -000AB3r 1 F1 .lobytes $FFF1 -000AB4r 1 F2 .lobytes $FFF2 -000AB5r 1 F3 .lobytes $FFF3 -000AB6r 1 F4 .lobytes $FFF4 -000AB7r 1 F5 .lobytes $FFF5 -000AB8r 1 F6 .lobytes $FFF6 -000AB9r 1 F7 .lobytes $FFF7 -000ABAr 1 F8 .lobytes $FFF8 -000ABBr 1 F9 .lobytes $FFF9 -000ABCr 1 FA .lobytes $FFFA -000ABDr 1 FB .lobytes $FFFB -000ABEr 1 FC .lobytes $FFFC -000ABFr 1 FD .lobytes $FFFD -000AC0r 1 FE .lobytes $FFFE -000AC1r 1 FF .lobytes $FFFF +0008F7r 1 ; 4-digit hex values, uppercase +0008F7r 1 00 .lobytes $0000 +0008F8r 1 01 .lobytes $0001 +0008F9r 1 02 .lobytes $0002 +0008FAr 1 03 .lobytes $0003 +0008FBr 1 04 .lobytes $0004 +0008FCr 1 05 .lobytes $0005 +0008FDr 1 06 .lobytes $0006 +0008FEr 1 07 .lobytes $0007 +0008FFr 1 08 .lobytes $0008 +000900r 1 09 .lobytes $0009 +000901r 1 0A .lobytes $000A +000902r 1 0B .lobytes $000B +000903r 1 0C .lobytes $000C +000904r 1 0D .lobytes $000D +000905r 1 0E .lobytes $000E +000906r 1 0F .lobytes $000F +000907r 1 10 .lobytes $0010 +000908r 1 11 .lobytes $0011 +000909r 1 12 .lobytes $0012 +00090Ar 1 13 .lobytes $0013 +00090Br 1 70 .lobytes $0070 +00090Cr 1 71 .lobytes $0071 +00090Dr 1 72 .lobytes $0072 +00090Er 1 73 .lobytes $0073 +00090Fr 1 74 .lobytes $0074 +000910r 1 75 .lobytes $0075 +000911r 1 76 .lobytes $0076 +000912r 1 77 .lobytes $0077 +000913r 1 78 .lobytes $0078 +000914r 1 79 .lobytes $0079 +000915r 1 7A .lobytes $007A +000916r 1 7B .lobytes $007B +000917r 1 7C .lobytes $007C +000918r 1 7D .lobytes $007D +000919r 1 7E .lobytes $007E +00091Ar 1 7F .lobytes $007F +00091Br 1 80 .lobytes $0080 +00091Cr 1 81 .lobytes $0081 +00091Dr 1 82 .lobytes $0082 +00091Er 1 83 .lobytes $0083 +00091Fr 1 84 .lobytes $0084 +000920r 1 85 .lobytes $0085 +000921r 1 86 .lobytes $0086 +000922r 1 F0 .lobytes $00F0 +000923r 1 F1 .lobytes $00F1 +000924r 1 F2 .lobytes $00F2 +000925r 1 F3 .lobytes $00F3 +000926r 1 F4 .lobytes $00F4 +000927r 1 F5 .lobytes $00F5 +000928r 1 F6 .lobytes $00F6 +000929r 1 F7 .lobytes $00F7 +00092Ar 1 F8 .lobytes $00F8 +00092Br 1 F9 .lobytes $00F9 +00092Cr 1 FA .lobytes $00FA +00092Dr 1 FB .lobytes $00FB +00092Er 1 FC .lobytes $00FC +00092Fr 1 FD .lobytes $00FD +000930r 1 FE .lobytes $00FE +000931r 1 FF .lobytes $00FF +000932r 1 00 .lobytes $0100 +000933r 1 01 .lobytes $0101 +000934r 1 02 .lobytes $0102 +000935r 1 03 .lobytes $0103 +000936r 1 D2 .lobytes $0FD2 +000937r 1 D3 .lobytes $0FD3 +000938r 1 D4 .lobytes $0FD4 +000939r 1 D5 .lobytes $0FD5 +00093Ar 1 D6 .lobytes $0FD6 +00093Br 1 D7 .lobytes $0FD7 +00093Cr 1 D8 .lobytes $0FD8 +00093Dr 1 D9 .lobytes $0FD9 +00093Er 1 DA .lobytes $0FDA +00093Fr 1 DB .lobytes $0FDB +000940r 1 DC .lobytes $0FDC +000941r 1 DD .lobytes $0FDD +000942r 1 DE .lobytes $0FDE +000943r 1 DF .lobytes $0FDF +000944r 1 E0 .lobytes $0FE0 +000945r 1 E1 .lobytes $0FE1 +000946r 1 E2 .lobytes $0FE2 +000947r 1 E3 .lobytes $0FE3 +000948r 1 E4 .lobytes $0FE4 +000949r 1 E5 .lobytes $0FE5 +00094Ar 1 E6 .lobytes $0FE6 +00094Br 1 E7 .lobytes $0FE7 +00094Cr 1 E8 .lobytes $0FE8 +00094Dr 1 E9 .lobytes $0FE9 +00094Er 1 EA .lobytes $0FEA +00094Fr 1 EB .lobytes $0FEB +000950r 1 EC .lobytes $0FEC +000951r 1 ED .lobytes $0FED +000952r 1 EE .lobytes $0FEE +000953r 1 EF .lobytes $0FEF +000954r 1 F0 .lobytes $0FF0 +000955r 1 F1 .lobytes $0FF1 +000956r 1 F2 .lobytes $0FF2 +000957r 1 F3 .lobytes $0FF3 +000958r 1 F4 .lobytes $0FF4 +000959r 1 F5 .lobytes $0FF5 +00095Ar 1 F6 .lobytes $0FF6 +00095Br 1 F7 .lobytes $0FF7 +00095Cr 1 F8 .lobytes $0FF8 +00095Dr 1 F9 .lobytes $0FF9 +00095Er 1 FA .lobytes $0FFA +00095Fr 1 FB .lobytes $0FFB +000960r 1 FC .lobytes $0FFC +000961r 1 FD .lobytes $0FFD +000962r 1 FE .lobytes $0FFE +000963r 1 FF .lobytes $0FFF +000964r 1 00 .lobytes $1000 +000965r 1 01 .lobytes $1001 +000966r 1 02 .lobytes $1002 +000967r 1 03 .lobytes $1003 +000968r 1 04 .lobytes $1004 +000969r 1 05 .lobytes $1005 +00096Ar 1 06 .lobytes $1006 +00096Br 1 07 .lobytes $1007 +00096Cr 1 08 .lobytes $1008 +00096Dr 1 F0 .lobytes $7FF0 +00096Er 1 F1 .lobytes $7FF1 +00096Fr 1 F2 .lobytes $7FF2 +000970r 1 F3 .lobytes $7FF3 +000971r 1 F4 .lobytes $7FF4 +000972r 1 F5 .lobytes $7FF5 +000973r 1 F6 .lobytes $7FF6 +000974r 1 F7 .lobytes $7FF7 +000975r 1 F8 .lobytes $7FF8 +000976r 1 F9 .lobytes $7FF9 +000977r 1 FA .lobytes $7FFA +000978r 1 FB .lobytes $7FFB +000979r 1 FC .lobytes $7FFC +00097Ar 1 FD .lobytes $7FFD +00097Br 1 FE .lobytes $7FFE +00097Cr 1 FF .lobytes $7FFF +00097Dr 1 00 .lobytes $8000 +00097Er 1 01 .lobytes $8001 +00097Fr 1 02 .lobytes $8002 +000980r 1 03 .lobytes $8003 +000981r 1 04 .lobytes $8004 +000982r 1 05 .lobytes $8005 +000983r 1 06 .lobytes $8006 +000984r 1 07 .lobytes $8007 +000985r 1 08 .lobytes $8008 +000986r 1 09 .lobytes $8009 +000987r 1 0A .lobytes $800A +000988r 1 0B .lobytes $800B +000989r 1 E1 .lobytes $9FE1 +00098Ar 1 E2 .lobytes $9FE2 +00098Br 1 E3 .lobytes $9FE3 +00098Cr 1 E4 .lobytes $9FE4 +00098Dr 1 E5 .lobytes $9FE5 +00098Er 1 E6 .lobytes $9FE6 +00098Fr 1 E7 .lobytes $9FE7 +000990r 1 E8 .lobytes $9FE8 +000991r 1 E9 .lobytes $9FE9 +000992r 1 EA .lobytes $9FEA +000993r 1 EB .lobytes $9FEB +000994r 1 EC .lobytes $9FEC +000995r 1 ED .lobytes $9FED +000996r 1 EE .lobytes $9FEE +000997r 1 EF .lobytes $9FEF +000998r 1 F0 .lobytes $9FF0 +000999r 1 F1 .lobytes $9FF1 +00099Ar 1 F2 .lobytes $9FF2 +00099Br 1 F3 .lobytes $9FF3 +00099Cr 1 F4 .lobytes $9FF4 +00099Dr 1 F5 .lobytes $9FF5 +00099Er 1 F6 .lobytes $9FF6 +00099Fr 1 F7 .lobytes $9FF7 +0009A0r 1 F8 .lobytes $9FF8 +0009A1r 1 F9 .lobytes $9FF9 +0009A2r 1 FA .lobytes $9FFA +0009A3r 1 FB .lobytes $9FFB +0009A4r 1 FC .lobytes $9FFC +0009A5r 1 FD .lobytes $9FFD +0009A6r 1 FE .lobytes $9FFE +0009A7r 1 FF .lobytes $9FFF +0009A8r 1 00 .lobytes $A000 +0009A9r 1 01 .lobytes $A001 +0009AAr 1 02 .lobytes $A002 +0009ABr 1 03 .lobytes $A003 +0009ACr 1 04 .lobytes $A004 +0009ADr 1 05 .lobytes $A005 +0009AEr 1 06 .lobytes $A006 +0009AFr 1 07 .lobytes $A007 +0009B0r 1 08 .lobytes $A008 +0009B1r 1 09 .lobytes $A009 +0009B2r 1 0A .lobytes $A00A +0009B3r 1 0B .lobytes $A00B +0009B4r 1 0C .lobytes $A00C +0009B5r 1 0D .lobytes $A00D +0009B6r 1 0E .lobytes $A00E +0009B7r 1 0F .lobytes $A00F +0009B8r 1 E1 .lobytes $AFE1 +0009B9r 1 E2 .lobytes $AFE2 +0009BAr 1 E3 .lobytes $AFE3 +0009BBr 1 E4 .lobytes $AFE4 +0009BCr 1 E5 .lobytes $AFE5 +0009BDr 1 E6 .lobytes $AFE6 +0009BEr 1 E7 .lobytes $AFE7 +0009BFr 1 E8 .lobytes $AFE8 +0009C0r 1 E9 .lobytes $AFE9 +0009C1r 1 EA .lobytes $AFEA +0009C2r 1 EB .lobytes $AFEB +0009C3r 1 EC .lobytes $AFEC +0009C4r 1 ED .lobytes $AFED +0009C5r 1 EE .lobytes $AFEE +0009C6r 1 EF .lobytes $AFEF +0009C7r 1 F0 .lobytes $AFF0 +0009C8r 1 F1 .lobytes $AFF1 +0009C9r 1 F2 .lobytes $AFF2 +0009CAr 1 F3 .lobytes $AFF3 +0009CBr 1 F4 .lobytes $AFF4 +0009CCr 1 F5 .lobytes $AFF5 +0009CDr 1 F6 .lobytes $AFF6 +0009CEr 1 F7 .lobytes $AFF7 +0009CFr 1 F8 .lobytes $AFF8 +0009D0r 1 F9 .lobytes $AFF9 +0009D1r 1 FA .lobytes $AFFA +0009D2r 1 FB .lobytes $AFFB +0009D3r 1 FC .lobytes $AFFC +0009D4r 1 FD .lobytes $AFFD +0009D5r 1 FE .lobytes $AFFE +0009D6r 1 FF .lobytes $AFFF +0009D7r 1 00 .lobytes $B000 +0009D8r 1 01 .lobytes $B001 +0009D9r 1 02 .lobytes $B002 +0009DAr 1 03 .lobytes $B003 +0009DBr 1 04 .lobytes $B004 +0009DCr 1 05 .lobytes $B005 +0009DDr 1 06 .lobytes $B006 +0009DEr 1 07 .lobytes $B007 +0009DFr 1 08 .lobytes $B008 +0009E0r 1 09 .lobytes $B009 +0009E1r 1 0A .lobytes $B00A +0009E2r 1 0B .lobytes $B00B +0009E3r 1 0C .lobytes $B00C +0009E4r 1 0D .lobytes $B00D +0009E5r 1 0E .lobytes $B00E +0009E6r 1 0F .lobytes $B00F +0009E7r 1 E1 .lobytes $BFE1 +0009E8r 1 E2 .lobytes $BFE2 +0009E9r 1 E3 .lobytes $BFE3 +0009EAr 1 E4 .lobytes $BFE4 +0009EBr 1 E5 .lobytes $BFE5 +0009ECr 1 E6 .lobytes $BFE6 +0009EDr 1 E7 .lobytes $BFE7 +0009EEr 1 E8 .lobytes $BFE8 +0009EFr 1 E9 .lobytes $BFE9 +0009F0r 1 EA .lobytes $BFEA +0009F1r 1 EB .lobytes $BFEB +0009F2r 1 EC .lobytes $BFEC +0009F3r 1 ED .lobytes $BFED +0009F4r 1 EE .lobytes $BFEE +0009F5r 1 EF .lobytes $BFEF +0009F6r 1 F0 .lobytes $BFF0 +0009F7r 1 F1 .lobytes $BFF1 +0009F8r 1 F2 .lobytes $BFF2 +0009F9r 1 F3 .lobytes $BFF3 +0009FAr 1 F4 .lobytes $BFF4 +0009FBr 1 F5 .lobytes $BFF5 +0009FCr 1 F6 .lobytes $BFF6 +0009FDr 1 F7 .lobytes $BFF7 +0009FEr 1 F8 .lobytes $BFF8 +0009FFr 1 F9 .lobytes $BFF9 +000A00r 1 FA .lobytes $BFFA +000A01r 1 FB .lobytes $BFFB +000A02r 1 FC .lobytes $BFFC +000A03r 1 FD .lobytes $BFFD +000A04r 1 FE .lobytes $BFFE +000A05r 1 FF .lobytes $BFFF +000A06r 1 00 .lobytes $C000 +000A07r 1 01 .lobytes $C001 +000A08r 1 02 .lobytes $C002 +000A09r 1 03 .lobytes $C003 +000A0Ar 1 04 .lobytes $C004 +000A0Br 1 05 .lobytes $C005 +000A0Cr 1 06 .lobytes $C006 +000A0Dr 1 07 .lobytes $C007 +000A0Er 1 08 .lobytes $C008 +000A0Fr 1 09 .lobytes $C009 +000A10r 1 0A .lobytes $C00A +000A11r 1 0B .lobytes $C00B +000A12r 1 0C .lobytes $C00C +000A13r 1 0D .lobytes $C00D +000A14r 1 0E .lobytes $C00E +000A15r 1 0F .lobytes $C00F +000A16r 1 E1 .lobytes $CFE1 +000A17r 1 E2 .lobytes $CFE2 +000A18r 1 E3 .lobytes $CFE3 +000A19r 1 E4 .lobytes $CFE4 +000A1Ar 1 E5 .lobytes $CFE5 +000A1Br 1 E6 .lobytes $CFE6 +000A1Cr 1 E7 .lobytes $CFE7 +000A1Dr 1 E8 .lobytes $CFE8 +000A1Er 1 E9 .lobytes $CFE9 +000A1Fr 1 EA .lobytes $CFEA +000A20r 1 EB .lobytes $CFEB +000A21r 1 EC .lobytes $CFEC +000A22r 1 ED .lobytes $CFED +000A23r 1 EE .lobytes $CFEE +000A24r 1 EF .lobytes $CFEF +000A25r 1 F0 .lobytes $CFF0 +000A26r 1 F1 .lobytes $CFF1 +000A27r 1 F2 .lobytes $CFF2 +000A28r 1 F3 .lobytes $CFF3 +000A29r 1 F4 .lobytes $CFF4 +000A2Ar 1 F5 .lobytes $CFF5 +000A2Br 1 F6 .lobytes $CFF6 +000A2Cr 1 F7 .lobytes $CFF7 +000A2Dr 1 F8 .lobytes $CFF8 +000A2Er 1 F9 .lobytes $CFF9 +000A2Fr 1 FA .lobytes $CFFA +000A30r 1 FB .lobytes $CFFB +000A31r 1 FC .lobytes $CFFC +000A32r 1 FD .lobytes $CFFD +000A33r 1 FE .lobytes $CFFE +000A34r 1 FF .lobytes $CFFF +000A35r 1 00 .lobytes $D000 +000A36r 1 01 .lobytes $D001 +000A37r 1 02 .lobytes $D002 +000A38r 1 03 .lobytes $D003 +000A39r 1 04 .lobytes $D004 +000A3Ar 1 05 .lobytes $D005 +000A3Br 1 06 .lobytes $D006 +000A3Cr 1 07 .lobytes $D007 +000A3Dr 1 08 .lobytes $D008 +000A3Er 1 09 .lobytes $D009 +000A3Fr 1 0A .lobytes $D00A +000A40r 1 0B .lobytes $D00B +000A41r 1 0C .lobytes $D00C +000A42r 1 0D .lobytes $D00D +000A43r 1 0E .lobytes $D00E +000A44r 1 0F .lobytes $D00F +000A45r 1 E1 .lobytes $DFE1 +000A46r 1 E2 .lobytes $DFE2 +000A47r 1 E3 .lobytes $DFE3 +000A48r 1 E4 .lobytes $DFE4 +000A49r 1 E5 .lobytes $DFE5 +000A4Ar 1 E6 .lobytes $DFE6 +000A4Br 1 E7 .lobytes $DFE7 +000A4Cr 1 E8 .lobytes $DFE8 +000A4Dr 1 E9 .lobytes $DFE9 +000A4Er 1 EA .lobytes $DFEA +000A4Fr 1 EB .lobytes $DFEB +000A50r 1 EC .lobytes $DFEC +000A51r 1 ED .lobytes $DFED +000A52r 1 EE .lobytes $DFEE +000A53r 1 EF .lobytes $DFEF +000A54r 1 F0 .lobytes $DFF0 +000A55r 1 F1 .lobytes $DFF1 +000A56r 1 F2 .lobytes $DFF2 +000A57r 1 F3 .lobytes $DFF3 +000A58r 1 F4 .lobytes $DFF4 +000A59r 1 F5 .lobytes $DFF5 +000A5Ar 1 F6 .lobytes $DFF6 +000A5Br 1 F7 .lobytes $DFF7 +000A5Cr 1 F8 .lobytes $DFF8 +000A5Dr 1 F9 .lobytes $DFF9 +000A5Er 1 FA .lobytes $DFFA +000A5Fr 1 FB .lobytes $DFFB +000A60r 1 FC .lobytes $DFFC +000A61r 1 FD .lobytes $DFFD +000A62r 1 FE .lobytes $DFFE +000A63r 1 FF .lobytes $DFFF +000A64r 1 00 .lobytes $E000 +000A65r 1 01 .lobytes $E001 +000A66r 1 02 .lobytes $E002 +000A67r 1 03 .lobytes $E003 +000A68r 1 04 .lobytes $E004 +000A69r 1 05 .lobytes $E005 +000A6Ar 1 06 .lobytes $E006 +000A6Br 1 07 .lobytes $E007 +000A6Cr 1 08 .lobytes $E008 +000A6Dr 1 09 .lobytes $E009 +000A6Er 1 0A .lobytes $E00A +000A6Fr 1 0B .lobytes $E00B +000A70r 1 0C .lobytes $E00C +000A71r 1 0D .lobytes $E00D +000A72r 1 0E .lobytes $E00E +000A73r 1 0F .lobytes $E00F +000A74r 1 E1 .lobytes $EFE1 +000A75r 1 E2 .lobytes $EFE2 +000A76r 1 E3 .lobytes $EFE3 +000A77r 1 E4 .lobytes $EFE4 +000A78r 1 E5 .lobytes $EFE5 +000A79r 1 E6 .lobytes $EFE6 +000A7Ar 1 E7 .lobytes $EFE7 +000A7Br 1 E8 .lobytes $EFE8 +000A7Cr 1 E9 .lobytes $EFE9 +000A7Dr 1 EA .lobytes $EFEA +000A7Er 1 EB .lobytes $EFEB +000A7Fr 1 EC .lobytes $EFEC +000A80r 1 ED .lobytes $EFED +000A81r 1 EE .lobytes $EFEE +000A82r 1 EF .lobytes $EFEF +000A83r 1 F0 .lobytes $EFF0 +000A84r 1 F1 .lobytes $EFF1 +000A85r 1 F2 .lobytes $EFF2 +000A86r 1 F3 .lobytes $EFF3 +000A87r 1 F4 .lobytes $EFF4 +000A88r 1 F5 .lobytes $EFF5 +000A89r 1 F6 .lobytes $EFF6 +000A8Ar 1 F7 .lobytes $EFF7 +000A8Br 1 F8 .lobytes $EFF8 +000A8Cr 1 F9 .lobytes $EFF9 +000A8Dr 1 FA .lobytes $EFFA +000A8Er 1 FB .lobytes $EFFB +000A8Fr 1 FC .lobytes $EFFC +000A90r 1 FD .lobytes $EFFD +000A91r 1 FE .lobytes $EFFE +000A92r 1 FF .lobytes $EFFF +000A93r 1 00 .lobytes $F000 +000A94r 1 01 .lobytes $F001 +000A95r 1 02 .lobytes $F002 +000A96r 1 03 .lobytes $F003 +000A97r 1 04 .lobytes $F004 +000A98r 1 05 .lobytes $F005 +000A99r 1 06 .lobytes $F006 +000A9Ar 1 07 .lobytes $F007 +000A9Br 1 08 .lobytes $F008 +000A9Cr 1 09 .lobytes $F009 +000A9Dr 1 0A .lobytes $F00A +000A9Er 1 0B .lobytes $F00B +000A9Fr 1 0C .lobytes $F00C +000AA0r 1 0D .lobytes $F00D +000AA1r 1 0E .lobytes $F00E +000AA2r 1 0F .lobytes $F00F +000AA3r 1 E1 .lobytes $FFE1 +000AA4r 1 E2 .lobytes $FFE2 +000AA5r 1 E3 .lobytes $FFE3 +000AA6r 1 E4 .lobytes $FFE4 +000AA7r 1 E5 .lobytes $FFE5 +000AA8r 1 E6 .lobytes $FFE6 +000AA9r 1 E7 .lobytes $FFE7 +000AAAr 1 E8 .lobytes $FFE8 +000AABr 1 E9 .lobytes $FFE9 +000AACr 1 EA .lobytes $FFEA +000AADr 1 EB .lobytes $FFEB +000AAEr 1 EC .lobytes $FFEC +000AAFr 1 ED .lobytes $FFED +000AB0r 1 EE .lobytes $FFEE +000AB1r 1 EF .lobytes $FFEF +000AB2r 1 F0 .lobytes $FFF0 +000AB3r 1 F1 .lobytes $FFF1 +000AB4r 1 F2 .lobytes $FFF2 +000AB5r 1 F3 .lobytes $FFF3 +000AB6r 1 F4 .lobytes $FFF4 +000AB7r 1 F5 .lobytes $FFF5 +000AB8r 1 F6 .lobytes $FFF6 +000AB9r 1 F7 .lobytes $FFF7 +000ABAr 1 F8 .lobytes $FFF8 +000ABBr 1 F9 .lobytes $FFF9 +000ABCr 1 FA .lobytes $FFFA +000ABDr 1 FB .lobytes $FFFB +000ABEr 1 FC .lobytes $FFFC +000ABFr 1 FD .lobytes $FFFD +000AC0r 1 FE .lobytes $FFFE +000AC1r 1 FF .lobytes $FFFF 000AC2r 1 -000AC2r 1 ; alternative hex values -000AC2r 1 00 .lobytes 0h -000AC3r 1 01 .lobytes 1h -000AC4r 1 02 .lobytes 2h -000AC5r 1 03 .lobytes 3h -000AC6r 1 04 .lobytes 4h -000AC7r 1 05 .lobytes 5h -000AC8r 1 06 .lobytes 6h -000AC9r 1 07 .lobytes 7h -000ACAr 1 08 .lobytes 8h -000ACBr 1 09 .lobytes 9h -000ACCr 1 0A .lobytes 0ah -000ACDr 1 0B .lobytes 0bh -000ACEr 1 0C .lobytes 0ch -000ACFr 1 0D .lobytes 0dh -000AD0r 1 0E .lobytes 0eh -000AD1r 1 0F .lobytes 0fh -000AD2r 1 10 .lobytes 10h -000AD3r 1 11 .lobytes 11h -000AD4r 1 12 .lobytes 12h -000AD5r 1 13 .lobytes 13h -000AD6r 1 70 .lobytes 70h -000AD7r 1 71 .lobytes 71h -000AD8r 1 72 .lobytes 72h -000AD9r 1 73 .lobytes 73h -000ADAr 1 74 .lobytes 74h -000ADBr 1 75 .lobytes 75h -000ADCr 1 76 .lobytes 76h -000ADDr 1 77 .lobytes 77h -000ADEr 1 78 .lobytes 78h -000ADFr 1 79 .lobytes 79h -000AE0r 1 7A .lobytes 7ah -000AE1r 1 7B .lobytes 7bh -000AE2r 1 7C .lobytes 7ch -000AE3r 1 7D .lobytes 7dh -000AE4r 1 7E .lobytes 7eh -000AE5r 1 7F .lobytes 7fh -000AE6r 1 80 .lobytes 80h -000AE7r 1 81 .lobytes 81h -000AE8r 1 82 .lobytes 82h -000AE9r 1 83 .lobytes 83h -000AEAr 1 84 .lobytes 84h -000AEBr 1 85 .lobytes 85h -000AECr 1 86 .lobytes 86h -000AEDr 1 F0 .lobytes 0f0h -000AEEr 1 F1 .lobytes 0f1h -000AEFr 1 F2 .lobytes 0f2h -000AF0r 1 F3 .lobytes 0f3h -000AF1r 1 F4 .lobytes 0f4h -000AF2r 1 F5 .lobytes 0f5h -000AF3r 1 F6 .lobytes 0f6h -000AF4r 1 F7 .lobytes 0f7h -000AF5r 1 F8 .lobytes 0f8h -000AF6r 1 F9 .lobytes 0f9h -000AF7r 1 FA .lobytes 0fah -000AF8r 1 FB .lobytes 0fbh -000AF9r 1 FC .lobytes 0fch -000AFAr 1 FD .lobytes 0fdh -000AFBr 1 FE .lobytes 0feh -000AFCr 1 FF .lobytes 0ffh -000AFDr 1 00 .lobytes 100h -000AFEr 1 01 .lobytes 101h -000AFFr 1 02 .lobytes 102h -000B00r 1 03 .lobytes 103h -000B01r 1 D2 .lobytes 0fd2h -000B02r 1 D3 .lobytes 0fd3h -000B03r 1 D4 .lobytes 0fd4h -000B04r 1 D5 .lobytes 0fd5h -000B05r 1 D6 .lobytes 0fd6h -000B06r 1 D7 .lobytes 0fd7h -000B07r 1 D8 .lobytes 0fd8h -000B08r 1 D9 .lobytes 0fd9h -000B09r 1 DA .lobytes 0fdah -000B0Ar 1 DB .lobytes 0fdbh -000B0Br 1 DC .lobytes 0fdch -000B0Cr 1 DD .lobytes 0fddh -000B0Dr 1 DE .lobytes 0fdeh -000B0Er 1 DF .lobytes 0fdfh -000B0Fr 1 E0 .lobytes 0fe0h -000B10r 1 E1 .lobytes 0fe1h -000B11r 1 E2 .lobytes 0fe2h -000B12r 1 E3 .lobytes 0fe3h -000B13r 1 E4 .lobytes 0fe4h -000B14r 1 E5 .lobytes 0fe5h -000B15r 1 E6 .lobytes 0fe6h -000B16r 1 E7 .lobytes 0fe7h -000B17r 1 E8 .lobytes 0fe8h -000B18r 1 E9 .lobytes 0fe9h -000B19r 1 EA .lobytes 0feah -000B1Ar 1 EB .lobytes 0febh -000B1Br 1 EC .lobytes 0fech -000B1Cr 1 ED .lobytes 0fedh -000B1Dr 1 EE .lobytes 0feeh -000B1Er 1 EF .lobytes 0fefh -000B1Fr 1 F0 .lobytes 0ff0h -000B20r 1 F1 .lobytes 0ff1h -000B21r 1 F2 .lobytes 0ff2h -000B22r 1 F3 .lobytes 0ff3h -000B23r 1 F4 .lobytes 0ff4h -000B24r 1 F5 .lobytes 0ff5h -000B25r 1 F6 .lobytes 0ff6h -000B26r 1 F7 .lobytes 0ff7h -000B27r 1 F8 .lobytes 0ff8h -000B28r 1 F9 .lobytes 0ff9h -000B29r 1 FA .lobytes 0ffah -000B2Ar 1 FB .lobytes 0ffbh -000B2Br 1 FC .lobytes 0ffch -000B2Cr 1 FD .lobytes 0ffdh -000B2Dr 1 FE .lobytes 0ffeh -000B2Er 1 FF .lobytes 0fffh -000B2Fr 1 00 .lobytes 1000h -000B30r 1 01 .lobytes 1001h -000B31r 1 02 .lobytes 1002h -000B32r 1 03 .lobytes 1003h -000B33r 1 04 .lobytes 1004h -000B34r 1 05 .lobytes 1005h -000B35r 1 06 .lobytes 1006h -000B36r 1 07 .lobytes 1007h -000B37r 1 08 .lobytes 1008h -000B38r 1 F0 .lobytes 7ff0h -000B39r 1 F1 .lobytes 7ff1h -000B3Ar 1 F2 .lobytes 7ff2h -000B3Br 1 F3 .lobytes 7ff3h -000B3Cr 1 F4 .lobytes 7ff4h -000B3Dr 1 F5 .lobytes 7ff5h -000B3Er 1 F6 .lobytes 7ff6h -000B3Fr 1 F7 .lobytes 7ff7h -000B40r 1 F8 .lobytes 7ff8h -000B41r 1 F9 .lobytes 7ff9h -000B42r 1 FA .lobytes 7ffah -000B43r 1 FB .lobytes 7ffbh -000B44r 1 FC .lobytes 7ffch -000B45r 1 FD .lobytes 7ffdh -000B46r 1 FE .lobytes 7ffeh -000B47r 1 FF .lobytes 7fffh -000B48r 1 00 .lobytes 8000h -000B49r 1 01 .lobytes 8001h -000B4Ar 1 02 .lobytes 8002h -000B4Br 1 03 .lobytes 8003h -000B4Cr 1 04 .lobytes 8004h -000B4Dr 1 05 .lobytes 8005h -000B4Er 1 06 .lobytes 8006h -000B4Fr 1 07 .lobytes 8007h -000B50r 1 08 .lobytes 8008h -000B51r 1 09 .lobytes 8009h -000B52r 1 0A .lobytes 800ah -000B53r 1 0B .lobytes 800bh -000B54r 1 E1 .lobytes 9fe1h -000B55r 1 E2 .lobytes 9fe2h -000B56r 1 E3 .lobytes 9fe3h -000B57r 1 E4 .lobytes 9fe4h -000B58r 1 E5 .lobytes 9fe5h -000B59r 1 E6 .lobytes 9fe6h -000B5Ar 1 E7 .lobytes 9fe7h -000B5Br 1 E8 .lobytes 9fe8h -000B5Cr 1 E9 .lobytes 9fe9h -000B5Dr 1 EA .lobytes 9feah -000B5Er 1 EB .lobytes 9febh -000B5Fr 1 EC .lobytes 9fech -000B60r 1 ED .lobytes 9fedh -000B61r 1 EE .lobytes 9feeh -000B62r 1 EF .lobytes 9fefh -000B63r 1 F0 .lobytes 9ff0h -000B64r 1 F1 .lobytes 9ff1h -000B65r 1 F2 .lobytes 9ff2h -000B66r 1 F3 .lobytes 9ff3h -000B67r 1 F4 .lobytes 9ff4h -000B68r 1 F5 .lobytes 9ff5h -000B69r 1 F6 .lobytes 9ff6h -000B6Ar 1 F7 .lobytes 9ff7h -000B6Br 1 F8 .lobytes 9ff8h -000B6Cr 1 F9 .lobytes 9ff9h -000B6Dr 1 FA .lobytes 9ffah -000B6Er 1 FB .lobytes 9ffbh -000B6Fr 1 FC .lobytes 9ffch -000B70r 1 FD .lobytes 9ffdh -000B71r 1 FE .lobytes 9ffeh -000B72r 1 FF .lobytes 9fffh -000B73r 1 00 .lobytes 0a000h -000B74r 1 01 .lobytes 0a001h -000B75r 1 02 .lobytes 0a002h -000B76r 1 03 .lobytes 0a003h -000B77r 1 04 .lobytes 0a004h -000B78r 1 05 .lobytes 0a005h -000B79r 1 06 .lobytes 0a006h -000B7Ar 1 07 .lobytes 0a007h -000B7Br 1 08 .lobytes 0a008h -000B7Cr 1 09 .lobytes 0a009h -000B7Dr 1 0A .lobytes 0a00ah -000B7Er 1 0B .lobytes 0a00bh -000B7Fr 1 0C .lobytes 0a00ch -000B80r 1 0D .lobytes 0a00dh -000B81r 1 0E .lobytes 0a00eh -000B82r 1 0F .lobytes 0a00fh -000B83r 1 E1 .lobytes 0afe1h -000B84r 1 E2 .lobytes 0afe2h -000B85r 1 E3 .lobytes 0afe3h -000B86r 1 E4 .lobytes 0afe4h -000B87r 1 E5 .lobytes 0afe5h -000B88r 1 E6 .lobytes 0afe6h -000B89r 1 E7 .lobytes 0afe7h -000B8Ar 1 E8 .lobytes 0afe8h -000B8Br 1 E9 .lobytes 0afe9h -000B8Cr 1 EA .lobytes 0afeah -000B8Dr 1 EB .lobytes 0afebh -000B8Er 1 EC .lobytes 0afech -000B8Fr 1 ED .lobytes 0afedh -000B90r 1 EE .lobytes 0afeeh -000B91r 1 EF .lobytes 0afefh -000B92r 1 F0 .lobytes 0aff0h -000B93r 1 F1 .lobytes 0aff1h -000B94r 1 F2 .lobytes 0aff2h -000B95r 1 F3 .lobytes 0aff3h -000B96r 1 F4 .lobytes 0aff4h -000B97r 1 F5 .lobytes 0aff5h -000B98r 1 F6 .lobytes 0aff6h -000B99r 1 F7 .lobytes 0aff7h -000B9Ar 1 F8 .lobytes 0aff8h -000B9Br 1 F9 .lobytes 0aff9h -000B9Cr 1 FA .lobytes 0affah -000B9Dr 1 FB .lobytes 0affbh -000B9Er 1 FC .lobytes 0affch -000B9Fr 1 FD .lobytes 0affdh -000BA0r 1 FE .lobytes 0affeh -000BA1r 1 FF .lobytes 0afffh -000BA2r 1 00 .lobytes 0b000h -000BA3r 1 01 .lobytes 0b001h -000BA4r 1 02 .lobytes 0b002h -000BA5r 1 03 .lobytes 0b003h -000BA6r 1 04 .lobytes 0b004h -000BA7r 1 05 .lobytes 0b005h -000BA8r 1 06 .lobytes 0b006h -000BA9r 1 07 .lobytes 0b007h -000BAAr 1 08 .lobytes 0b008h -000BABr 1 09 .lobytes 0b009h -000BACr 1 0A .lobytes 0b00ah -000BADr 1 0B .lobytes 0b00bh -000BAEr 1 0C .lobytes 0b00ch -000BAFr 1 0D .lobytes 0b00dh -000BB0r 1 0E .lobytes 0b00eh -000BB1r 1 0F .lobytes 0b00fh -000BB2r 1 E1 .lobytes 0bfe1h -000BB3r 1 E2 .lobytes 0bfe2h -000BB4r 1 E3 .lobytes 0bfe3h -000BB5r 1 E4 .lobytes 0bfe4h -000BB6r 1 E5 .lobytes 0bfe5h -000BB7r 1 E6 .lobytes 0bfe6h -000BB8r 1 E7 .lobytes 0bfe7h -000BB9r 1 E8 .lobytes 0bfe8h -000BBAr 1 E9 .lobytes 0bfe9h -000BBBr 1 EA .lobytes 0bfeah -000BBCr 1 EB .lobytes 0bfebh -000BBDr 1 EC .lobytes 0bfech -000BBEr 1 ED .lobytes 0bfedh -000BBFr 1 EE .lobytes 0bfeeh -000BC0r 1 EF .lobytes 0bfefh -000BC1r 1 F0 .lobytes 0bff0h -000BC2r 1 F1 .lobytes 0bff1h -000BC3r 1 F2 .lobytes 0bff2h -000BC4r 1 F3 .lobytes 0bff3h -000BC5r 1 F4 .lobytes 0bff4h -000BC6r 1 F5 .lobytes 0bff5h -000BC7r 1 F6 .lobytes 0bff6h -000BC8r 1 F7 .lobytes 0bff7h -000BC9r 1 F8 .lobytes 0bff8h -000BCAr 1 F9 .lobytes 0bff9h -000BCBr 1 FA .lobytes 0bffah -000BCCr 1 FB .lobytes 0bffbh -000BCDr 1 FC .lobytes 0bffch -000BCEr 1 FD .lobytes 0bffdh -000BCFr 1 FE .lobytes 0bffeh -000BD0r 1 FF .lobytes 0bfffh -000BD1r 1 00 .lobytes 0c000h -000BD2r 1 01 .lobytes 0c001h -000BD3r 1 02 .lobytes 0c002h -000BD4r 1 03 .lobytes 0c003h -000BD5r 1 04 .lobytes 0c004h -000BD6r 1 05 .lobytes 0c005h -000BD7r 1 06 .lobytes 0c006h -000BD8r 1 07 .lobytes 0c007h -000BD9r 1 08 .lobytes 0c008h -000BDAr 1 09 .lobytes 0c009h -000BDBr 1 0A .lobytes 0c00ah -000BDCr 1 0B .lobytes 0c00bh -000BDDr 1 0C .lobytes 0c00ch -000BDEr 1 0D .lobytes 0c00dh -000BDFr 1 0E .lobytes 0c00eh -000BE0r 1 0F .lobytes 0c00fh -000BE1r 1 E1 .lobytes 0cfe1h -000BE2r 1 E2 .lobytes 0cfe2h -000BE3r 1 E3 .lobytes 0cfe3h -000BE4r 1 E4 .lobytes 0cfe4h -000BE5r 1 E5 .lobytes 0cfe5h -000BE6r 1 E6 .lobytes 0cfe6h -000BE7r 1 E7 .lobytes 0cfe7h -000BE8r 1 E8 .lobytes 0cfe8h -000BE9r 1 E9 .lobytes 0cfe9h -000BEAr 1 EA .lobytes 0cfeah -000BEBr 1 EB .lobytes 0cfebh -000BECr 1 EC .lobytes 0cfech -000BEDr 1 ED .lobytes 0cfedh -000BEEr 1 EE .lobytes 0cfeeh -000BEFr 1 EF .lobytes 0cfefh -000BF0r 1 F0 .lobytes 0cff0h -000BF1r 1 F1 .lobytes 0cff1h -000BF2r 1 F2 .lobytes 0cff2h -000BF3r 1 F3 .lobytes 0cff3h -000BF4r 1 F4 .lobytes 0cff4h -000BF5r 1 F5 .lobytes 0cff5h -000BF6r 1 F6 .lobytes 0cff6h -000BF7r 1 F7 .lobytes 0cff7h -000BF8r 1 F8 .lobytes 0cff8h -000BF9r 1 F9 .lobytes 0cff9h -000BFAr 1 FA .lobytes 0cffah -000BFBr 1 FB .lobytes 0cffbh -000BFCr 1 FC .lobytes 0cffch -000BFDr 1 FD .lobytes 0cffdh -000BFEr 1 FE .lobytes 0cffeh -000BFFr 1 FF .lobytes 0cfffh -000C00r 1 00 .lobytes 0d000h -000C01r 1 01 .lobytes 0d001h -000C02r 1 02 .lobytes 0d002h -000C03r 1 03 .lobytes 0d003h -000C04r 1 04 .lobytes 0d004h -000C05r 1 05 .lobytes 0d005h -000C06r 1 06 .lobytes 0d006h -000C07r 1 07 .lobytes 0d007h -000C08r 1 08 .lobytes 0d008h -000C09r 1 09 .lobytes 0d009h -000C0Ar 1 0A .lobytes 0d00ah -000C0Br 1 0B .lobytes 0d00bh -000C0Cr 1 0C .lobytes 0d00ch -000C0Dr 1 0D .lobytes 0d00dh -000C0Er 1 0E .lobytes 0d00eh -000C0Fr 1 0F .lobytes 0d00fh -000C10r 1 E1 .lobytes 0dfe1h -000C11r 1 E2 .lobytes 0dfe2h -000C12r 1 E3 .lobytes 0dfe3h -000C13r 1 E4 .lobytes 0dfe4h -000C14r 1 E5 .lobytes 0dfe5h -000C15r 1 E6 .lobytes 0dfe6h -000C16r 1 E7 .lobytes 0dfe7h -000C17r 1 E8 .lobytes 0dfe8h -000C18r 1 E9 .lobytes 0dfe9h -000C19r 1 EA .lobytes 0dfeah -000C1Ar 1 EB .lobytes 0dfebh -000C1Br 1 EC .lobytes 0dfech -000C1Cr 1 ED .lobytes 0dfedh -000C1Dr 1 EE .lobytes 0dfeeh -000C1Er 1 EF .lobytes 0dfefh -000C1Fr 1 F0 .lobytes 0dff0h -000C20r 1 F1 .lobytes 0dff1h -000C21r 1 F2 .lobytes 0dff2h -000C22r 1 F3 .lobytes 0dff3h -000C23r 1 F4 .lobytes 0dff4h -000C24r 1 F5 .lobytes 0dff5h -000C25r 1 F6 .lobytes 0dff6h -000C26r 1 F7 .lobytes 0dff7h -000C27r 1 F8 .lobytes 0dff8h -000C28r 1 F9 .lobytes 0dff9h -000C29r 1 FA .lobytes 0dffah -000C2Ar 1 FB .lobytes 0dffbh -000C2Br 1 FC .lobytes 0dffch -000C2Cr 1 FD .lobytes 0dffdh -000C2Dr 1 FE .lobytes 0dffeh -000C2Er 1 FF .lobytes 0dfffh -000C2Fr 1 00 .lobytes 0e000h -000C30r 1 01 .lobytes 0e001h -000C31r 1 02 .lobytes 0e002h -000C32r 1 03 .lobytes 0e003h -000C33r 1 04 .lobytes 0e004h -000C34r 1 05 .lobytes 0e005h -000C35r 1 06 .lobytes 0e006h -000C36r 1 07 .lobytes 0e007h -000C37r 1 08 .lobytes 0e008h -000C38r 1 09 .lobytes 0e009h -000C39r 1 0A .lobytes 0e00ah -000C3Ar 1 0B .lobytes 0e00bh -000C3Br 1 0C .lobytes 0e00ch -000C3Cr 1 0D .lobytes 0e00dh -000C3Dr 1 0E .lobytes 0e00eh -000C3Er 1 0F .lobytes 0e00fh -000C3Fr 1 E1 .lobytes 0efe1h -000C40r 1 E2 .lobytes 0efe2h -000C41r 1 E3 .lobytes 0efe3h -000C42r 1 E4 .lobytes 0efe4h -000C43r 1 E5 .lobytes 0efe5h -000C44r 1 E6 .lobytes 0efe6h -000C45r 1 E7 .lobytes 0efe7h -000C46r 1 E8 .lobytes 0efe8h -000C47r 1 E9 .lobytes 0efe9h -000C48r 1 EA .lobytes 0efeah -000C49r 1 EB .lobytes 0efebh -000C4Ar 1 EC .lobytes 0efech -000C4Br 1 ED .lobytes 0efedh -000C4Cr 1 EE .lobytes 0efeeh -000C4Dr 1 EF .lobytes 0efefh -000C4Er 1 F0 .lobytes 0eff0h -000C4Fr 1 F1 .lobytes 0eff1h -000C50r 1 F2 .lobytes 0eff2h -000C51r 1 F3 .lobytes 0eff3h -000C52r 1 F4 .lobytes 0eff4h -000C53r 1 F5 .lobytes 0eff5h -000C54r 1 F6 .lobytes 0eff6h -000C55r 1 F7 .lobytes 0eff7h -000C56r 1 F8 .lobytes 0eff8h -000C57r 1 F9 .lobytes 0eff9h -000C58r 1 FA .lobytes 0effah -000C59r 1 FB .lobytes 0effbh -000C5Ar 1 FC .lobytes 0effch -000C5Br 1 FD .lobytes 0effdh -000C5Cr 1 FE .lobytes 0effeh -000C5Dr 1 FF .lobytes 0efffh -000C5Er 1 00 .lobytes 0f000h -000C5Fr 1 01 .lobytes 0f001h -000C60r 1 02 .lobytes 0f002h -000C61r 1 03 .lobytes 0f003h -000C62r 1 04 .lobytes 0f004h -000C63r 1 05 .lobytes 0f005h -000C64r 1 06 .lobytes 0f006h -000C65r 1 07 .lobytes 0f007h -000C66r 1 08 .lobytes 0f008h -000C67r 1 09 .lobytes 0f009h -000C68r 1 0A .lobytes 0f00ah -000C69r 1 0B .lobytes 0f00bh -000C6Ar 1 0C .lobytes 0f00ch -000C6Br 1 0D .lobytes 0f00dh -000C6Cr 1 0E .lobytes 0f00eh -000C6Dr 1 0F .lobytes 0f00fh -000C6Er 1 E1 .lobytes 0ffe1h -000C6Fr 1 E2 .lobytes 0ffe2h -000C70r 1 E3 .lobytes 0ffe3h -000C71r 1 E4 .lobytes 0ffe4h -000C72r 1 E5 .lobytes 0ffe5h -000C73r 1 E6 .lobytes 0ffe6h -000C74r 1 E7 .lobytes 0ffe7h -000C75r 1 E8 .lobytes 0ffe8h -000C76r 1 E9 .lobytes 0ffe9h -000C77r 1 EA .lobytes 0ffeah -000C78r 1 EB .lobytes 0ffebh -000C79r 1 EC .lobytes 0ffech -000C7Ar 1 ED .lobytes 0ffedh -000C7Br 1 EE .lobytes 0ffeeh -000C7Cr 1 EF .lobytes 0ffefh -000C7Dr 1 F0 .lobytes 0fff0h -000C7Er 1 F1 .lobytes 0fff1h -000C7Fr 1 F2 .lobytes 0fff2h -000C80r 1 F3 .lobytes 0fff3h -000C81r 1 F4 .lobytes 0fff4h -000C82r 1 F5 .lobytes 0fff5h -000C83r 1 F6 .lobytes 0fff6h -000C84r 1 F7 .lobytes 0fff7h -000C85r 1 F8 .lobytes 0fff8h -000C86r 1 F9 .lobytes 0fff9h -000C87r 1 FA .lobytes 0fffah -000C88r 1 FB .lobytes 0fffbh -000C89r 1 FC .lobytes 0fffch -000C8Ar 1 FD .lobytes 0fffdh -000C8Br 1 FE .lobytes 0fffeh -000C8Cr 1 FF .lobytes 0ffffh +000AC2r 1 ; alternative hex values +000AC2r 1 00 .lobytes 0h +000AC3r 1 01 .lobytes 1h +000AC4r 1 02 .lobytes 2h +000AC5r 1 03 .lobytes 3h +000AC6r 1 04 .lobytes 4h +000AC7r 1 05 .lobytes 5h +000AC8r 1 06 .lobytes 6h +000AC9r 1 07 .lobytes 7h +000ACAr 1 08 .lobytes 8h +000ACBr 1 09 .lobytes 9h +000ACCr 1 0A .lobytes 0ah +000ACDr 1 0B .lobytes 0bh +000ACEr 1 0C .lobytes 0ch +000ACFr 1 0D .lobytes 0dh +000AD0r 1 0E .lobytes 0eh +000AD1r 1 0F .lobytes 0fh +000AD2r 1 10 .lobytes 10h +000AD3r 1 11 .lobytes 11h +000AD4r 1 12 .lobytes 12h +000AD5r 1 13 .lobytes 13h +000AD6r 1 70 .lobytes 70h +000AD7r 1 71 .lobytes 71h +000AD8r 1 72 .lobytes 72h +000AD9r 1 73 .lobytes 73h +000ADAr 1 74 .lobytes 74h +000ADBr 1 75 .lobytes 75h +000ADCr 1 76 .lobytes 76h +000ADDr 1 77 .lobytes 77h +000ADEr 1 78 .lobytes 78h +000ADFr 1 79 .lobytes 79h +000AE0r 1 7A .lobytes 7ah +000AE1r 1 7B .lobytes 7bh +000AE2r 1 7C .lobytes 7ch +000AE3r 1 7D .lobytes 7dh +000AE4r 1 7E .lobytes 7eh +000AE5r 1 7F .lobytes 7fh +000AE6r 1 80 .lobytes 80h +000AE7r 1 81 .lobytes 81h +000AE8r 1 82 .lobytes 82h +000AE9r 1 83 .lobytes 83h +000AEAr 1 84 .lobytes 84h +000AEBr 1 85 .lobytes 85h +000AECr 1 86 .lobytes 86h +000AEDr 1 F0 .lobytes 0f0h +000AEEr 1 F1 .lobytes 0f1h +000AEFr 1 F2 .lobytes 0f2h +000AF0r 1 F3 .lobytes 0f3h +000AF1r 1 F4 .lobytes 0f4h +000AF2r 1 F5 .lobytes 0f5h +000AF3r 1 F6 .lobytes 0f6h +000AF4r 1 F7 .lobytes 0f7h +000AF5r 1 F8 .lobytes 0f8h +000AF6r 1 F9 .lobytes 0f9h +000AF7r 1 FA .lobytes 0fah +000AF8r 1 FB .lobytes 0fbh +000AF9r 1 FC .lobytes 0fch +000AFAr 1 FD .lobytes 0fdh +000AFBr 1 FE .lobytes 0feh +000AFCr 1 FF .lobytes 0ffh +000AFDr 1 00 .lobytes 100h +000AFEr 1 01 .lobytes 101h +000AFFr 1 02 .lobytes 102h +000B00r 1 03 .lobytes 103h +000B01r 1 D2 .lobytes 0fd2h +000B02r 1 D3 .lobytes 0fd3h +000B03r 1 D4 .lobytes 0fd4h +000B04r 1 D5 .lobytes 0fd5h +000B05r 1 D6 .lobytes 0fd6h +000B06r 1 D7 .lobytes 0fd7h +000B07r 1 D8 .lobytes 0fd8h +000B08r 1 D9 .lobytes 0fd9h +000B09r 1 DA .lobytes 0fdah +000B0Ar 1 DB .lobytes 0fdbh +000B0Br 1 DC .lobytes 0fdch +000B0Cr 1 DD .lobytes 0fddh +000B0Dr 1 DE .lobytes 0fdeh +000B0Er 1 DF .lobytes 0fdfh +000B0Fr 1 E0 .lobytes 0fe0h +000B10r 1 E1 .lobytes 0fe1h +000B11r 1 E2 .lobytes 0fe2h +000B12r 1 E3 .lobytes 0fe3h +000B13r 1 E4 .lobytes 0fe4h +000B14r 1 E5 .lobytes 0fe5h +000B15r 1 E6 .lobytes 0fe6h +000B16r 1 E7 .lobytes 0fe7h +000B17r 1 E8 .lobytes 0fe8h +000B18r 1 E9 .lobytes 0fe9h +000B19r 1 EA .lobytes 0feah +000B1Ar 1 EB .lobytes 0febh +000B1Br 1 EC .lobytes 0fech +000B1Cr 1 ED .lobytes 0fedh +000B1Dr 1 EE .lobytes 0feeh +000B1Er 1 EF .lobytes 0fefh +000B1Fr 1 F0 .lobytes 0ff0h +000B20r 1 F1 .lobytes 0ff1h +000B21r 1 F2 .lobytes 0ff2h +000B22r 1 F3 .lobytes 0ff3h +000B23r 1 F4 .lobytes 0ff4h +000B24r 1 F5 .lobytes 0ff5h +000B25r 1 F6 .lobytes 0ff6h +000B26r 1 F7 .lobytes 0ff7h +000B27r 1 F8 .lobytes 0ff8h +000B28r 1 F9 .lobytes 0ff9h +000B29r 1 FA .lobytes 0ffah +000B2Ar 1 FB .lobytes 0ffbh +000B2Br 1 FC .lobytes 0ffch +000B2Cr 1 FD .lobytes 0ffdh +000B2Dr 1 FE .lobytes 0ffeh +000B2Er 1 FF .lobytes 0fffh +000B2Fr 1 00 .lobytes 1000h +000B30r 1 01 .lobytes 1001h +000B31r 1 02 .lobytes 1002h +000B32r 1 03 .lobytes 1003h +000B33r 1 04 .lobytes 1004h +000B34r 1 05 .lobytes 1005h +000B35r 1 06 .lobytes 1006h +000B36r 1 07 .lobytes 1007h +000B37r 1 08 .lobytes 1008h +000B38r 1 F0 .lobytes 7ff0h +000B39r 1 F1 .lobytes 7ff1h +000B3Ar 1 F2 .lobytes 7ff2h +000B3Br 1 F3 .lobytes 7ff3h +000B3Cr 1 F4 .lobytes 7ff4h +000B3Dr 1 F5 .lobytes 7ff5h +000B3Er 1 F6 .lobytes 7ff6h +000B3Fr 1 F7 .lobytes 7ff7h +000B40r 1 F8 .lobytes 7ff8h +000B41r 1 F9 .lobytes 7ff9h +000B42r 1 FA .lobytes 7ffah +000B43r 1 FB .lobytes 7ffbh +000B44r 1 FC .lobytes 7ffch +000B45r 1 FD .lobytes 7ffdh +000B46r 1 FE .lobytes 7ffeh +000B47r 1 FF .lobytes 7fffh +000B48r 1 00 .lobytes 8000h +000B49r 1 01 .lobytes 8001h +000B4Ar 1 02 .lobytes 8002h +000B4Br 1 03 .lobytes 8003h +000B4Cr 1 04 .lobytes 8004h +000B4Dr 1 05 .lobytes 8005h +000B4Er 1 06 .lobytes 8006h +000B4Fr 1 07 .lobytes 8007h +000B50r 1 08 .lobytes 8008h +000B51r 1 09 .lobytes 8009h +000B52r 1 0A .lobytes 800ah +000B53r 1 0B .lobytes 800bh +000B54r 1 E1 .lobytes 9fe1h +000B55r 1 E2 .lobytes 9fe2h +000B56r 1 E3 .lobytes 9fe3h +000B57r 1 E4 .lobytes 9fe4h +000B58r 1 E5 .lobytes 9fe5h +000B59r 1 E6 .lobytes 9fe6h +000B5Ar 1 E7 .lobytes 9fe7h +000B5Br 1 E8 .lobytes 9fe8h +000B5Cr 1 E9 .lobytes 9fe9h +000B5Dr 1 EA .lobytes 9feah +000B5Er 1 EB .lobytes 9febh +000B5Fr 1 EC .lobytes 9fech +000B60r 1 ED .lobytes 9fedh +000B61r 1 EE .lobytes 9feeh +000B62r 1 EF .lobytes 9fefh +000B63r 1 F0 .lobytes 9ff0h +000B64r 1 F1 .lobytes 9ff1h +000B65r 1 F2 .lobytes 9ff2h +000B66r 1 F3 .lobytes 9ff3h +000B67r 1 F4 .lobytes 9ff4h +000B68r 1 F5 .lobytes 9ff5h +000B69r 1 F6 .lobytes 9ff6h +000B6Ar 1 F7 .lobytes 9ff7h +000B6Br 1 F8 .lobytes 9ff8h +000B6Cr 1 F9 .lobytes 9ff9h +000B6Dr 1 FA .lobytes 9ffah +000B6Er 1 FB .lobytes 9ffbh +000B6Fr 1 FC .lobytes 9ffch +000B70r 1 FD .lobytes 9ffdh +000B71r 1 FE .lobytes 9ffeh +000B72r 1 FF .lobytes 9fffh +000B73r 1 00 .lobytes 0a000h +000B74r 1 01 .lobytes 0a001h +000B75r 1 02 .lobytes 0a002h +000B76r 1 03 .lobytes 0a003h +000B77r 1 04 .lobytes 0a004h +000B78r 1 05 .lobytes 0a005h +000B79r 1 06 .lobytes 0a006h +000B7Ar 1 07 .lobytes 0a007h +000B7Br 1 08 .lobytes 0a008h +000B7Cr 1 09 .lobytes 0a009h +000B7Dr 1 0A .lobytes 0a00ah +000B7Er 1 0B .lobytes 0a00bh +000B7Fr 1 0C .lobytes 0a00ch +000B80r 1 0D .lobytes 0a00dh +000B81r 1 0E .lobytes 0a00eh +000B82r 1 0F .lobytes 0a00fh +000B83r 1 E1 .lobytes 0afe1h +000B84r 1 E2 .lobytes 0afe2h +000B85r 1 E3 .lobytes 0afe3h +000B86r 1 E4 .lobytes 0afe4h +000B87r 1 E5 .lobytes 0afe5h +000B88r 1 E6 .lobytes 0afe6h +000B89r 1 E7 .lobytes 0afe7h +000B8Ar 1 E8 .lobytes 0afe8h +000B8Br 1 E9 .lobytes 0afe9h +000B8Cr 1 EA .lobytes 0afeah +000B8Dr 1 EB .lobytes 0afebh +000B8Er 1 EC .lobytes 0afech +000B8Fr 1 ED .lobytes 0afedh +000B90r 1 EE .lobytes 0afeeh +000B91r 1 EF .lobytes 0afefh +000B92r 1 F0 .lobytes 0aff0h +000B93r 1 F1 .lobytes 0aff1h +000B94r 1 F2 .lobytes 0aff2h +000B95r 1 F3 .lobytes 0aff3h +000B96r 1 F4 .lobytes 0aff4h +000B97r 1 F5 .lobytes 0aff5h +000B98r 1 F6 .lobytes 0aff6h +000B99r 1 F7 .lobytes 0aff7h +000B9Ar 1 F8 .lobytes 0aff8h +000B9Br 1 F9 .lobytes 0aff9h +000B9Cr 1 FA .lobytes 0affah +000B9Dr 1 FB .lobytes 0affbh +000B9Er 1 FC .lobytes 0affch +000B9Fr 1 FD .lobytes 0affdh +000BA0r 1 FE .lobytes 0affeh +000BA1r 1 FF .lobytes 0afffh +000BA2r 1 00 .lobytes 0b000h +000BA3r 1 01 .lobytes 0b001h +000BA4r 1 02 .lobytes 0b002h +000BA5r 1 03 .lobytes 0b003h +000BA6r 1 04 .lobytes 0b004h +000BA7r 1 05 .lobytes 0b005h +000BA8r 1 06 .lobytes 0b006h +000BA9r 1 07 .lobytes 0b007h +000BAAr 1 08 .lobytes 0b008h +000BABr 1 09 .lobytes 0b009h +000BACr 1 0A .lobytes 0b00ah +000BADr 1 0B .lobytes 0b00bh +000BAEr 1 0C .lobytes 0b00ch +000BAFr 1 0D .lobytes 0b00dh +000BB0r 1 0E .lobytes 0b00eh +000BB1r 1 0F .lobytes 0b00fh +000BB2r 1 E1 .lobytes 0bfe1h +000BB3r 1 E2 .lobytes 0bfe2h +000BB4r 1 E3 .lobytes 0bfe3h +000BB5r 1 E4 .lobytes 0bfe4h +000BB6r 1 E5 .lobytes 0bfe5h +000BB7r 1 E6 .lobytes 0bfe6h +000BB8r 1 E7 .lobytes 0bfe7h +000BB9r 1 E8 .lobytes 0bfe8h +000BBAr 1 E9 .lobytes 0bfe9h +000BBBr 1 EA .lobytes 0bfeah +000BBCr 1 EB .lobytes 0bfebh +000BBDr 1 EC .lobytes 0bfech +000BBEr 1 ED .lobytes 0bfedh +000BBFr 1 EE .lobytes 0bfeeh +000BC0r 1 EF .lobytes 0bfefh +000BC1r 1 F0 .lobytes 0bff0h +000BC2r 1 F1 .lobytes 0bff1h +000BC3r 1 F2 .lobytes 0bff2h +000BC4r 1 F3 .lobytes 0bff3h +000BC5r 1 F4 .lobytes 0bff4h +000BC6r 1 F5 .lobytes 0bff5h +000BC7r 1 F6 .lobytes 0bff6h +000BC8r 1 F7 .lobytes 0bff7h +000BC9r 1 F8 .lobytes 0bff8h +000BCAr 1 F9 .lobytes 0bff9h +000BCBr 1 FA .lobytes 0bffah +000BCCr 1 FB .lobytes 0bffbh +000BCDr 1 FC .lobytes 0bffch +000BCEr 1 FD .lobytes 0bffdh +000BCFr 1 FE .lobytes 0bffeh +000BD0r 1 FF .lobytes 0bfffh +000BD1r 1 00 .lobytes 0c000h +000BD2r 1 01 .lobytes 0c001h +000BD3r 1 02 .lobytes 0c002h +000BD4r 1 03 .lobytes 0c003h +000BD5r 1 04 .lobytes 0c004h +000BD6r 1 05 .lobytes 0c005h +000BD7r 1 06 .lobytes 0c006h +000BD8r 1 07 .lobytes 0c007h +000BD9r 1 08 .lobytes 0c008h +000BDAr 1 09 .lobytes 0c009h +000BDBr 1 0A .lobytes 0c00ah +000BDCr 1 0B .lobytes 0c00bh +000BDDr 1 0C .lobytes 0c00ch +000BDEr 1 0D .lobytes 0c00dh +000BDFr 1 0E .lobytes 0c00eh +000BE0r 1 0F .lobytes 0c00fh +000BE1r 1 E1 .lobytes 0cfe1h +000BE2r 1 E2 .lobytes 0cfe2h +000BE3r 1 E3 .lobytes 0cfe3h +000BE4r 1 E4 .lobytes 0cfe4h +000BE5r 1 E5 .lobytes 0cfe5h +000BE6r 1 E6 .lobytes 0cfe6h +000BE7r 1 E7 .lobytes 0cfe7h +000BE8r 1 E8 .lobytes 0cfe8h +000BE9r 1 E9 .lobytes 0cfe9h +000BEAr 1 EA .lobytes 0cfeah +000BEBr 1 EB .lobytes 0cfebh +000BECr 1 EC .lobytes 0cfech +000BEDr 1 ED .lobytes 0cfedh +000BEEr 1 EE .lobytes 0cfeeh +000BEFr 1 EF .lobytes 0cfefh +000BF0r 1 F0 .lobytes 0cff0h +000BF1r 1 F1 .lobytes 0cff1h +000BF2r 1 F2 .lobytes 0cff2h +000BF3r 1 F3 .lobytes 0cff3h +000BF4r 1 F4 .lobytes 0cff4h +000BF5r 1 F5 .lobytes 0cff5h +000BF6r 1 F6 .lobytes 0cff6h +000BF7r 1 F7 .lobytes 0cff7h +000BF8r 1 F8 .lobytes 0cff8h +000BF9r 1 F9 .lobytes 0cff9h +000BFAr 1 FA .lobytes 0cffah +000BFBr 1 FB .lobytes 0cffbh +000BFCr 1 FC .lobytes 0cffch +000BFDr 1 FD .lobytes 0cffdh +000BFEr 1 FE .lobytes 0cffeh +000BFFr 1 FF .lobytes 0cfffh +000C00r 1 00 .lobytes 0d000h +000C01r 1 01 .lobytes 0d001h +000C02r 1 02 .lobytes 0d002h +000C03r 1 03 .lobytes 0d003h +000C04r 1 04 .lobytes 0d004h +000C05r 1 05 .lobytes 0d005h +000C06r 1 06 .lobytes 0d006h +000C07r 1 07 .lobytes 0d007h +000C08r 1 08 .lobytes 0d008h +000C09r 1 09 .lobytes 0d009h +000C0Ar 1 0A .lobytes 0d00ah +000C0Br 1 0B .lobytes 0d00bh +000C0Cr 1 0C .lobytes 0d00ch +000C0Dr 1 0D .lobytes 0d00dh +000C0Er 1 0E .lobytes 0d00eh +000C0Fr 1 0F .lobytes 0d00fh +000C10r 1 E1 .lobytes 0dfe1h +000C11r 1 E2 .lobytes 0dfe2h +000C12r 1 E3 .lobytes 0dfe3h +000C13r 1 E4 .lobytes 0dfe4h +000C14r 1 E5 .lobytes 0dfe5h +000C15r 1 E6 .lobytes 0dfe6h +000C16r 1 E7 .lobytes 0dfe7h +000C17r 1 E8 .lobytes 0dfe8h +000C18r 1 E9 .lobytes 0dfe9h +000C19r 1 EA .lobytes 0dfeah +000C1Ar 1 EB .lobytes 0dfebh +000C1Br 1 EC .lobytes 0dfech +000C1Cr 1 ED .lobytes 0dfedh +000C1Dr 1 EE .lobytes 0dfeeh +000C1Er 1 EF .lobytes 0dfefh +000C1Fr 1 F0 .lobytes 0dff0h +000C20r 1 F1 .lobytes 0dff1h +000C21r 1 F2 .lobytes 0dff2h +000C22r 1 F3 .lobytes 0dff3h +000C23r 1 F4 .lobytes 0dff4h +000C24r 1 F5 .lobytes 0dff5h +000C25r 1 F6 .lobytes 0dff6h +000C26r 1 F7 .lobytes 0dff7h +000C27r 1 F8 .lobytes 0dff8h +000C28r 1 F9 .lobytes 0dff9h +000C29r 1 FA .lobytes 0dffah +000C2Ar 1 FB .lobytes 0dffbh +000C2Br 1 FC .lobytes 0dffch +000C2Cr 1 FD .lobytes 0dffdh +000C2Dr 1 FE .lobytes 0dffeh +000C2Er 1 FF .lobytes 0dfffh +000C2Fr 1 00 .lobytes 0e000h +000C30r 1 01 .lobytes 0e001h +000C31r 1 02 .lobytes 0e002h +000C32r 1 03 .lobytes 0e003h +000C33r 1 04 .lobytes 0e004h +000C34r 1 05 .lobytes 0e005h +000C35r 1 06 .lobytes 0e006h +000C36r 1 07 .lobytes 0e007h +000C37r 1 08 .lobytes 0e008h +000C38r 1 09 .lobytes 0e009h +000C39r 1 0A .lobytes 0e00ah +000C3Ar 1 0B .lobytes 0e00bh +000C3Br 1 0C .lobytes 0e00ch +000C3Cr 1 0D .lobytes 0e00dh +000C3Dr 1 0E .lobytes 0e00eh +000C3Er 1 0F .lobytes 0e00fh +000C3Fr 1 E1 .lobytes 0efe1h +000C40r 1 E2 .lobytes 0efe2h +000C41r 1 E3 .lobytes 0efe3h +000C42r 1 E4 .lobytes 0efe4h +000C43r 1 E5 .lobytes 0efe5h +000C44r 1 E6 .lobytes 0efe6h +000C45r 1 E7 .lobytes 0efe7h +000C46r 1 E8 .lobytes 0efe8h +000C47r 1 E9 .lobytes 0efe9h +000C48r 1 EA .lobytes 0efeah +000C49r 1 EB .lobytes 0efebh +000C4Ar 1 EC .lobytes 0efech +000C4Br 1 ED .lobytes 0efedh +000C4Cr 1 EE .lobytes 0efeeh +000C4Dr 1 EF .lobytes 0efefh +000C4Er 1 F0 .lobytes 0eff0h +000C4Fr 1 F1 .lobytes 0eff1h +000C50r 1 F2 .lobytes 0eff2h +000C51r 1 F3 .lobytes 0eff3h +000C52r 1 F4 .lobytes 0eff4h +000C53r 1 F5 .lobytes 0eff5h +000C54r 1 F6 .lobytes 0eff6h +000C55r 1 F7 .lobytes 0eff7h +000C56r 1 F8 .lobytes 0eff8h +000C57r 1 F9 .lobytes 0eff9h +000C58r 1 FA .lobytes 0effah +000C59r 1 FB .lobytes 0effbh +000C5Ar 1 FC .lobytes 0effch +000C5Br 1 FD .lobytes 0effdh +000C5Cr 1 FE .lobytes 0effeh +000C5Dr 1 FF .lobytes 0efffh +000C5Er 1 00 .lobytes 0f000h +000C5Fr 1 01 .lobytes 0f001h +000C60r 1 02 .lobytes 0f002h +000C61r 1 03 .lobytes 0f003h +000C62r 1 04 .lobytes 0f004h +000C63r 1 05 .lobytes 0f005h +000C64r 1 06 .lobytes 0f006h +000C65r 1 07 .lobytes 0f007h +000C66r 1 08 .lobytes 0f008h +000C67r 1 09 .lobytes 0f009h +000C68r 1 0A .lobytes 0f00ah +000C69r 1 0B .lobytes 0f00bh +000C6Ar 1 0C .lobytes 0f00ch +000C6Br 1 0D .lobytes 0f00dh +000C6Cr 1 0E .lobytes 0f00eh +000C6Dr 1 0F .lobytes 0f00fh +000C6Er 1 E1 .lobytes 0ffe1h +000C6Fr 1 E2 .lobytes 0ffe2h +000C70r 1 E3 .lobytes 0ffe3h +000C71r 1 E4 .lobytes 0ffe4h +000C72r 1 E5 .lobytes 0ffe5h +000C73r 1 E6 .lobytes 0ffe6h +000C74r 1 E7 .lobytes 0ffe7h +000C75r 1 E8 .lobytes 0ffe8h +000C76r 1 E9 .lobytes 0ffe9h +000C77r 1 EA .lobytes 0ffeah +000C78r 1 EB .lobytes 0ffebh +000C79r 1 EC .lobytes 0ffech +000C7Ar 1 ED .lobytes 0ffedh +000C7Br 1 EE .lobytes 0ffeeh +000C7Cr 1 EF .lobytes 0ffefh +000C7Dr 1 F0 .lobytes 0fff0h +000C7Er 1 F1 .lobytes 0fff1h +000C7Fr 1 F2 .lobytes 0fff2h +000C80r 1 F3 .lobytes 0fff3h +000C81r 1 F4 .lobytes 0fff4h +000C82r 1 F5 .lobytes 0fff5h +000C83r 1 F6 .lobytes 0fff6h +000C84r 1 F7 .lobytes 0fff7h +000C85r 1 F8 .lobytes 0fff8h +000C86r 1 F9 .lobytes 0fff9h +000C87r 1 FA .lobytes 0fffah +000C88r 1 FB .lobytes 0fffbh +000C89r 1 FC .lobytes 0fffch +000C8Ar 1 FD .lobytes 0fffdh +000C8Br 1 FE .lobytes 0fffeh +000C8Cr 1 FF .lobytes 0ffffh 000C8Dr 1 -000C8Dr 1 ; alternative hex values, uppercase -000C8Dr 1 00 .lobytes 0h -000C8Er 1 01 .lobytes 1h -000C8Fr 1 02 .lobytes 2h -000C90r 1 03 .lobytes 3h -000C91r 1 04 .lobytes 4h -000C92r 1 05 .lobytes 5h -000C93r 1 06 .lobytes 6h -000C94r 1 07 .lobytes 7h -000C95r 1 08 .lobytes 8h -000C96r 1 09 .lobytes 9h -000C97r 1 0A .lobytes 0Ah -000C98r 1 0B .lobytes 0Bh -000C99r 1 0C .lobytes 0Ch -000C9Ar 1 0D .lobytes 0Dh -000C9Br 1 0E .lobytes 0Eh -000C9Cr 1 0F .lobytes 0Fh -000C9Dr 1 10 .lobytes 10h -000C9Er 1 11 .lobytes 11h -000C9Fr 1 12 .lobytes 12h -000CA0r 1 13 .lobytes 13h -000CA1r 1 70 .lobytes 70h -000CA2r 1 71 .lobytes 71h -000CA3r 1 72 .lobytes 72h -000CA4r 1 73 .lobytes 73h -000CA5r 1 74 .lobytes 74h -000CA6r 1 75 .lobytes 75h -000CA7r 1 76 .lobytes 76h -000CA8r 1 77 .lobytes 77h -000CA9r 1 78 .lobytes 78h -000CAAr 1 79 .lobytes 79h -000CABr 1 7A .lobytes 7Ah -000CACr 1 7B .lobytes 7Bh -000CADr 1 7C .lobytes 7Ch -000CAEr 1 7D .lobytes 7Dh -000CAFr 1 7E .lobytes 7Eh -000CB0r 1 7F .lobytes 7Fh -000CB1r 1 80 .lobytes 80h -000CB2r 1 81 .lobytes 81h -000CB3r 1 82 .lobytes 82h -000CB4r 1 83 .lobytes 83h -000CB5r 1 84 .lobytes 84h -000CB6r 1 85 .lobytes 85h -000CB7r 1 86 .lobytes 86h -000CB8r 1 F0 .lobytes 0F0h -000CB9r 1 F1 .lobytes 0F1h -000CBAr 1 F2 .lobytes 0F2h -000CBBr 1 F3 .lobytes 0F3h -000CBCr 1 F4 .lobytes 0F4h -000CBDr 1 F5 .lobytes 0F5h -000CBEr 1 F6 .lobytes 0F6h -000CBFr 1 F7 .lobytes 0F7h -000CC0r 1 F8 .lobytes 0F8h -000CC1r 1 F9 .lobytes 0F9h -000CC2r 1 FA .lobytes 0FAh -000CC3r 1 FB .lobytes 0FBh -000CC4r 1 FC .lobytes 0FCh -000CC5r 1 FD .lobytes 0FDh -000CC6r 1 FE .lobytes 0FEh -000CC7r 1 FF .lobytes 0FFh -000CC8r 1 00 .lobytes 100h -000CC9r 1 01 .lobytes 101h -000CCAr 1 02 .lobytes 102h -000CCBr 1 03 .lobytes 103h -000CCCr 1 D2 .lobytes 0FD2h -000CCDr 1 D3 .lobytes 0FD3h -000CCEr 1 D4 .lobytes 0FD4h -000CCFr 1 D5 .lobytes 0FD5h -000CD0r 1 D6 .lobytes 0FD6h -000CD1r 1 D7 .lobytes 0FD7h -000CD2r 1 D8 .lobytes 0FD8h -000CD3r 1 D9 .lobytes 0FD9h -000CD4r 1 DA .lobytes 0FDAh -000CD5r 1 DB .lobytes 0FDBh -000CD6r 1 DC .lobytes 0FDCh -000CD7r 1 DD .lobytes 0FDDh -000CD8r 1 DE .lobytes 0FDEh -000CD9r 1 DF .lobytes 0FDFh -000CDAr 1 E0 .lobytes 0FE0h -000CDBr 1 E1 .lobytes 0FE1h -000CDCr 1 E2 .lobytes 0FE2h -000CDDr 1 E3 .lobytes 0FE3h -000CDEr 1 E4 .lobytes 0FE4h -000CDFr 1 E5 .lobytes 0FE5h -000CE0r 1 E6 .lobytes 0FE6h -000CE1r 1 E7 .lobytes 0FE7h -000CE2r 1 E8 .lobytes 0FE8h -000CE3r 1 E9 .lobytes 0FE9h -000CE4r 1 EA .lobytes 0FEAh -000CE5r 1 EB .lobytes 0FEBh -000CE6r 1 EC .lobytes 0FECh -000CE7r 1 ED .lobytes 0FEDh -000CE8r 1 EE .lobytes 0FEEh -000CE9r 1 EF .lobytes 0FEFh -000CEAr 1 F0 .lobytes 0FF0h -000CEBr 1 F1 .lobytes 0FF1h -000CECr 1 F2 .lobytes 0FF2h -000CEDr 1 F3 .lobytes 0FF3h -000CEEr 1 F4 .lobytes 0FF4h -000CEFr 1 F5 .lobytes 0FF5h -000CF0r 1 F6 .lobytes 0FF6h -000CF1r 1 F7 .lobytes 0FF7h -000CF2r 1 F8 .lobytes 0FF8h -000CF3r 1 F9 .lobytes 0FF9h -000CF4r 1 FA .lobytes 0FFAh -000CF5r 1 FB .lobytes 0FFBh -000CF6r 1 FC .lobytes 0FFCh -000CF7r 1 FD .lobytes 0FFDh -000CF8r 1 FE .lobytes 0FFEh -000CF9r 1 FF .lobytes 0FFFh -000CFAr 1 00 .lobytes 1000h -000CFBr 1 01 .lobytes 1001h -000CFCr 1 02 .lobytes 1002h -000CFDr 1 03 .lobytes 1003h -000CFEr 1 04 .lobytes 1004h -000CFFr 1 05 .lobytes 1005h -000D00r 1 06 .lobytes 1006h -000D01r 1 07 .lobytes 1007h -000D02r 1 08 .lobytes 1008h -000D03r 1 F0 .lobytes 7FF0h -000D04r 1 F1 .lobytes 7FF1h -000D05r 1 F2 .lobytes 7FF2h -000D06r 1 F3 .lobytes 7FF3h -000D07r 1 F4 .lobytes 7FF4h -000D08r 1 F5 .lobytes 7FF5h -000D09r 1 F6 .lobytes 7FF6h -000D0Ar 1 F7 .lobytes 7FF7h -000D0Br 1 F8 .lobytes 7FF8h -000D0Cr 1 F9 .lobytes 7FF9h -000D0Dr 1 FA .lobytes 7FFAh -000D0Er 1 FB .lobytes 7FFBh -000D0Fr 1 FC .lobytes 7FFCh -000D10r 1 FD .lobytes 7FFDh -000D11r 1 FE .lobytes 7FFEh -000D12r 1 FF .lobytes 7FFFh -000D13r 1 00 .lobytes 8000h -000D14r 1 01 .lobytes 8001h -000D15r 1 02 .lobytes 8002h -000D16r 1 03 .lobytes 8003h -000D17r 1 04 .lobytes 8004h -000D18r 1 05 .lobytes 8005h -000D19r 1 06 .lobytes 8006h -000D1Ar 1 07 .lobytes 8007h -000D1Br 1 08 .lobytes 8008h -000D1Cr 1 09 .lobytes 8009h -000D1Dr 1 0A .lobytes 800Ah -000D1Er 1 0B .lobytes 800Bh -000D1Fr 1 E1 .lobytes 9FE1h -000D20r 1 E2 .lobytes 9FE2h -000D21r 1 E3 .lobytes 9FE3h -000D22r 1 E4 .lobytes 9FE4h -000D23r 1 E5 .lobytes 9FE5h -000D24r 1 E6 .lobytes 9FE6h -000D25r 1 E7 .lobytes 9FE7h -000D26r 1 E8 .lobytes 9FE8h -000D27r 1 E9 .lobytes 9FE9h -000D28r 1 EA .lobytes 9FEAh -000D29r 1 EB .lobytes 9FEBh -000D2Ar 1 EC .lobytes 9FECh -000D2Br 1 ED .lobytes 9FEDh -000D2Cr 1 EE .lobytes 9FEEh -000D2Dr 1 EF .lobytes 9FEFh -000D2Er 1 F0 .lobytes 9FF0h -000D2Fr 1 F1 .lobytes 9FF1h -000D30r 1 F2 .lobytes 9FF2h -000D31r 1 F3 .lobytes 9FF3h -000D32r 1 F4 .lobytes 9FF4h -000D33r 1 F5 .lobytes 9FF5h -000D34r 1 F6 .lobytes 9FF6h -000D35r 1 F7 .lobytes 9FF7h -000D36r 1 F8 .lobytes 9FF8h -000D37r 1 F9 .lobytes 9FF9h -000D38r 1 FA .lobytes 9FFAh -000D39r 1 FB .lobytes 9FFBh -000D3Ar 1 FC .lobytes 9FFCh -000D3Br 1 FD .lobytes 9FFDh -000D3Cr 1 FE .lobytes 9FFEh -000D3Dr 1 FF .lobytes 9FFFh -000D3Er 1 00 .lobytes 0A000h -000D3Fr 1 01 .lobytes 0A001h -000D40r 1 02 .lobytes 0A002h -000D41r 1 03 .lobytes 0A003h -000D42r 1 04 .lobytes 0A004h -000D43r 1 05 .lobytes 0A005h -000D44r 1 06 .lobytes 0A006h -000D45r 1 07 .lobytes 0A007h -000D46r 1 08 .lobytes 0A008h -000D47r 1 09 .lobytes 0A009h -000D48r 1 0A .lobytes 0A00Ah -000D49r 1 0B .lobytes 0A00Bh -000D4Ar 1 0C .lobytes 0A00Ch -000D4Br 1 0D .lobytes 0A00Dh -000D4Cr 1 0E .lobytes 0A00Eh -000D4Dr 1 0F .lobytes 0A00Fh -000D4Er 1 E1 .lobytes 0AFE1h -000D4Fr 1 E2 .lobytes 0AFE2h -000D50r 1 E3 .lobytes 0AFE3h -000D51r 1 E4 .lobytes 0AFE4h -000D52r 1 E5 .lobytes 0AFE5h -000D53r 1 E6 .lobytes 0AFE6h -000D54r 1 E7 .lobytes 0AFE7h -000D55r 1 E8 .lobytes 0AFE8h -000D56r 1 E9 .lobytes 0AFE9h -000D57r 1 EA .lobytes 0AFEAh -000D58r 1 EB .lobytes 0AFEBh -000D59r 1 EC .lobytes 0AFECh -000D5Ar 1 ED .lobytes 0AFEDh -000D5Br 1 EE .lobytes 0AFEEh -000D5Cr 1 EF .lobytes 0AFEFh -000D5Dr 1 F0 .lobytes 0AFF0h -000D5Er 1 F1 .lobytes 0AFF1h -000D5Fr 1 F2 .lobytes 0AFF2h -000D60r 1 F3 .lobytes 0AFF3h -000D61r 1 F4 .lobytes 0AFF4h -000D62r 1 F5 .lobytes 0AFF5h -000D63r 1 F6 .lobytes 0AFF6h -000D64r 1 F7 .lobytes 0AFF7h -000D65r 1 F8 .lobytes 0AFF8h -000D66r 1 F9 .lobytes 0AFF9h -000D67r 1 FA .lobytes 0AFFAh -000D68r 1 FB .lobytes 0AFFBh -000D69r 1 FC .lobytes 0AFFCh -000D6Ar 1 FD .lobytes 0AFFDh -000D6Br 1 FE .lobytes 0AFFEh -000D6Cr 1 FF .lobytes 0AFFFh -000D6Dr 1 00 .lobytes 0B000h -000D6Er 1 01 .lobytes 0B001h -000D6Fr 1 02 .lobytes 0B002h -000D70r 1 03 .lobytes 0B003h -000D71r 1 04 .lobytes 0B004h -000D72r 1 05 .lobytes 0B005h -000D73r 1 06 .lobytes 0B006h -000D74r 1 07 .lobytes 0B007h -000D75r 1 08 .lobytes 0B008h -000D76r 1 09 .lobytes 0B009h -000D77r 1 0A .lobytes 0B00Ah -000D78r 1 0B .lobytes 0B00Bh -000D79r 1 0C .lobytes 0B00Ch -000D7Ar 1 0D .lobytes 0B00Dh -000D7Br 1 0E .lobytes 0B00Eh -000D7Cr 1 0F .lobytes 0B00Fh -000D7Dr 1 E1 .lobytes 0BFE1h -000D7Er 1 E2 .lobytes 0BFE2h -000D7Fr 1 E3 .lobytes 0BFE3h -000D80r 1 E4 .lobytes 0BFE4h -000D81r 1 E5 .lobytes 0BFE5h -000D82r 1 E6 .lobytes 0BFE6h -000D83r 1 E7 .lobytes 0BFE7h -000D84r 1 E8 .lobytes 0BFE8h -000D85r 1 E9 .lobytes 0BFE9h -000D86r 1 EA .lobytes 0BFEAh -000D87r 1 EB .lobytes 0BFEBh -000D88r 1 EC .lobytes 0BFECh -000D89r 1 ED .lobytes 0BFEDh -000D8Ar 1 EE .lobytes 0BFEEh -000D8Br 1 EF .lobytes 0BFEFh -000D8Cr 1 F0 .lobytes 0BFF0h -000D8Dr 1 F1 .lobytes 0BFF1h -000D8Er 1 F2 .lobytes 0BFF2h -000D8Fr 1 F3 .lobytes 0BFF3h -000D90r 1 F4 .lobytes 0BFF4h -000D91r 1 F5 .lobytes 0BFF5h -000D92r 1 F6 .lobytes 0BFF6h -000D93r 1 F7 .lobytes 0BFF7h -000D94r 1 F8 .lobytes 0BFF8h -000D95r 1 F9 .lobytes 0BFF9h -000D96r 1 FA .lobytes 0BFFAh -000D97r 1 FB .lobytes 0BFFBh -000D98r 1 FC .lobytes 0BFFCh -000D99r 1 FD .lobytes 0BFFDh -000D9Ar 1 FE .lobytes 0BFFEh -000D9Br 1 FF .lobytes 0BFFFh -000D9Cr 1 00 .lobytes 0C000h -000D9Dr 1 01 .lobytes 0C001h -000D9Er 1 02 .lobytes 0C002h -000D9Fr 1 03 .lobytes 0C003h -000DA0r 1 04 .lobytes 0C004h -000DA1r 1 05 .lobytes 0C005h -000DA2r 1 06 .lobytes 0C006h -000DA3r 1 07 .lobytes 0C007h -000DA4r 1 08 .lobytes 0C008h -000DA5r 1 09 .lobytes 0C009h -000DA6r 1 0A .lobytes 0C00Ah -000DA7r 1 0B .lobytes 0C00Bh -000DA8r 1 0C .lobytes 0C00Ch -000DA9r 1 0D .lobytes 0C00Dh -000DAAr 1 0E .lobytes 0C00Eh -000DABr 1 0F .lobytes 0C00Fh -000DACr 1 E1 .lobytes 0CFE1h -000DADr 1 E2 .lobytes 0CFE2h -000DAEr 1 E3 .lobytes 0CFE3h -000DAFr 1 E4 .lobytes 0CFE4h -000DB0r 1 E5 .lobytes 0CFE5h -000DB1r 1 E6 .lobytes 0CFE6h -000DB2r 1 E7 .lobytes 0CFE7h -000DB3r 1 E8 .lobytes 0CFE8h -000DB4r 1 E9 .lobytes 0CFE9h -000DB5r 1 EA .lobytes 0CFEAh -000DB6r 1 EB .lobytes 0CFEBh -000DB7r 1 EC .lobytes 0CFECh -000DB8r 1 ED .lobytes 0CFEDh -000DB9r 1 EE .lobytes 0CFEEh -000DBAr 1 EF .lobytes 0CFEFh -000DBBr 1 F0 .lobytes 0CFF0h -000DBCr 1 F1 .lobytes 0CFF1h -000DBDr 1 F2 .lobytes 0CFF2h -000DBEr 1 F3 .lobytes 0CFF3h -000DBFr 1 F4 .lobytes 0CFF4h -000DC0r 1 F5 .lobytes 0CFF5h -000DC1r 1 F6 .lobytes 0CFF6h -000DC2r 1 F7 .lobytes 0CFF7h -000DC3r 1 F8 .lobytes 0CFF8h -000DC4r 1 F9 .lobytes 0CFF9h -000DC5r 1 FA .lobytes 0CFFAh -000DC6r 1 FB .lobytes 0CFFBh -000DC7r 1 FC .lobytes 0CFFCh -000DC8r 1 FD .lobytes 0CFFDh -000DC9r 1 FE .lobytes 0CFFEh -000DCAr 1 FF .lobytes 0CFFFh -000DCBr 1 00 .lobytes 0D000h -000DCCr 1 01 .lobytes 0D001h -000DCDr 1 02 .lobytes 0D002h -000DCEr 1 03 .lobytes 0D003h -000DCFr 1 04 .lobytes 0D004h -000DD0r 1 05 .lobytes 0D005h -000DD1r 1 06 .lobytes 0D006h -000DD2r 1 07 .lobytes 0D007h -000DD3r 1 08 .lobytes 0D008h -000DD4r 1 09 .lobytes 0D009h -000DD5r 1 0A .lobytes 0D00Ah -000DD6r 1 0B .lobytes 0D00Bh -000DD7r 1 0C .lobytes 0D00Ch -000DD8r 1 0D .lobytes 0D00Dh -000DD9r 1 0E .lobytes 0D00Eh -000DDAr 1 0F .lobytes 0D00Fh -000DDBr 1 E1 .lobytes 0DFE1h -000DDCr 1 E2 .lobytes 0DFE2h -000DDDr 1 E3 .lobytes 0DFE3h -000DDEr 1 E4 .lobytes 0DFE4h -000DDFr 1 E5 .lobytes 0DFE5h -000DE0r 1 E6 .lobytes 0DFE6h -000DE1r 1 E7 .lobytes 0DFE7h -000DE2r 1 E8 .lobytes 0DFE8h -000DE3r 1 E9 .lobytes 0DFE9h -000DE4r 1 EA .lobytes 0DFEAh -000DE5r 1 EB .lobytes 0DFEBh -000DE6r 1 EC .lobytes 0DFECh -000DE7r 1 ED .lobytes 0DFEDh -000DE8r 1 EE .lobytes 0DFEEh -000DE9r 1 EF .lobytes 0DFEFh -000DEAr 1 F0 .lobytes 0DFF0h -000DEBr 1 F1 .lobytes 0DFF1h -000DECr 1 F2 .lobytes 0DFF2h -000DEDr 1 F3 .lobytes 0DFF3h -000DEEr 1 F4 .lobytes 0DFF4h -000DEFr 1 F5 .lobytes 0DFF5h -000DF0r 1 F6 .lobytes 0DFF6h -000DF1r 1 F7 .lobytes 0DFF7h -000DF2r 1 F8 .lobytes 0DFF8h -000DF3r 1 F9 .lobytes 0DFF9h -000DF4r 1 FA .lobytes 0DFFAh -000DF5r 1 FB .lobytes 0DFFBh -000DF6r 1 FC .lobytes 0DFFCh -000DF7r 1 FD .lobytes 0DFFDh -000DF8r 1 FE .lobytes 0DFFEh -000DF9r 1 FF .lobytes 0DFFFh -000DFAr 1 00 .lobytes 0E000h -000DFBr 1 01 .lobytes 0E001h -000DFCr 1 02 .lobytes 0E002h -000DFDr 1 03 .lobytes 0E003h -000DFEr 1 04 .lobytes 0E004h -000DFFr 1 05 .lobytes 0E005h -000E00r 1 06 .lobytes 0E006h -000E01r 1 07 .lobytes 0E007h -000E02r 1 08 .lobytes 0E008h -000E03r 1 09 .lobytes 0E009h -000E04r 1 0A .lobytes 0E00Ah -000E05r 1 0B .lobytes 0E00Bh -000E06r 1 0C .lobytes 0E00Ch -000E07r 1 0D .lobytes 0E00Dh -000E08r 1 0E .lobytes 0E00Eh -000E09r 1 0F .lobytes 0E00Fh -000E0Ar 1 E1 .lobytes 0EFE1h -000E0Br 1 E2 .lobytes 0EFE2h -000E0Cr 1 E3 .lobytes 0EFE3h -000E0Dr 1 E4 .lobytes 0EFE4h -000E0Er 1 E5 .lobytes 0EFE5h -000E0Fr 1 E6 .lobytes 0EFE6h -000E10r 1 E7 .lobytes 0EFE7h -000E11r 1 E8 .lobytes 0EFE8h -000E12r 1 E9 .lobytes 0EFE9h -000E13r 1 EA .lobytes 0EFEAh -000E14r 1 EB .lobytes 0EFEBh -000E15r 1 EC .lobytes 0EFECh -000E16r 1 ED .lobytes 0EFEDh -000E17r 1 EE .lobytes 0EFEEh -000E18r 1 EF .lobytes 0EFEFh -000E19r 1 F0 .lobytes 0EFF0h -000E1Ar 1 F1 .lobytes 0EFF1h -000E1Br 1 F2 .lobytes 0EFF2h -000E1Cr 1 F3 .lobytes 0EFF3h -000E1Dr 1 F4 .lobytes 0EFF4h -000E1Er 1 F5 .lobytes 0EFF5h -000E1Fr 1 F6 .lobytes 0EFF6h -000E20r 1 F7 .lobytes 0EFF7h -000E21r 1 F8 .lobytes 0EFF8h -000E22r 1 F9 .lobytes 0EFF9h -000E23r 1 FA .lobytes 0EFFAh -000E24r 1 FB .lobytes 0EFFBh -000E25r 1 FC .lobytes 0EFFCh -000E26r 1 FD .lobytes 0EFFDh -000E27r 1 FE .lobytes 0EFFEh -000E28r 1 FF .lobytes 0EFFFh -000E29r 1 00 .lobytes 0F000h -000E2Ar 1 01 .lobytes 0F001h -000E2Br 1 02 .lobytes 0F002h -000E2Cr 1 03 .lobytes 0F003h -000E2Dr 1 04 .lobytes 0F004h -000E2Er 1 05 .lobytes 0F005h -000E2Fr 1 06 .lobytes 0F006h -000E30r 1 07 .lobytes 0F007h -000E31r 1 08 .lobytes 0F008h -000E32r 1 09 .lobytes 0F009h -000E33r 1 0A .lobytes 0F00Ah -000E34r 1 0B .lobytes 0F00Bh -000E35r 1 0C .lobytes 0F00Ch -000E36r 1 0D .lobytes 0F00Dh -000E37r 1 0E .lobytes 0F00Eh -000E38r 1 0F .lobytes 0F00Fh -000E39r 1 E1 .lobytes 0FFE1h -000E3Ar 1 E2 .lobytes 0FFE2h -000E3Br 1 E3 .lobytes 0FFE3h -000E3Cr 1 E4 .lobytes 0FFE4h -000E3Dr 1 E5 .lobytes 0FFE5h -000E3Er 1 E6 .lobytes 0FFE6h -000E3Fr 1 E7 .lobytes 0FFE7h -000E40r 1 E8 .lobytes 0FFE8h -000E41r 1 E9 .lobytes 0FFE9h -000E42r 1 EA .lobytes 0FFEAh -000E43r 1 EB .lobytes 0FFEBh -000E44r 1 EC .lobytes 0FFECh -000E45r 1 ED .lobytes 0FFEDh -000E46r 1 EE .lobytes 0FFEEh -000E47r 1 EF .lobytes 0FFEFh -000E48r 1 F0 .lobytes 0FFF0h -000E49r 1 F1 .lobytes 0FFF1h -000E4Ar 1 F2 .lobytes 0FFF2h -000E4Br 1 F3 .lobytes 0FFF3h -000E4Cr 1 F4 .lobytes 0FFF4h -000E4Dr 1 F5 .lobytes 0FFF5h -000E4Er 1 F6 .lobytes 0FFF6h -000E4Fr 1 F7 .lobytes 0FFF7h -000E50r 1 F8 .lobytes 0FFF8h -000E51r 1 F9 .lobytes 0FFF9h -000E52r 1 FA .lobytes 0FFFAh -000E53r 1 FB .lobytes 0FFFBh -000E54r 1 FC .lobytes 0FFFCh -000E55r 1 FD .lobytes 0FFFDh -000E56r 1 FE .lobytes 0FFFEh -000E57r 1 FF .lobytes 0FFFFh +000C8Dr 1 ; alternative hex values, uppercase +000C8Dr 1 00 .lobytes 0h +000C8Er 1 01 .lobytes 1h +000C8Fr 1 02 .lobytes 2h +000C90r 1 03 .lobytes 3h +000C91r 1 04 .lobytes 4h +000C92r 1 05 .lobytes 5h +000C93r 1 06 .lobytes 6h +000C94r 1 07 .lobytes 7h +000C95r 1 08 .lobytes 8h +000C96r 1 09 .lobytes 9h +000C97r 1 0A .lobytes 0Ah +000C98r 1 0B .lobytes 0Bh +000C99r 1 0C .lobytes 0Ch +000C9Ar 1 0D .lobytes 0Dh +000C9Br 1 0E .lobytes 0Eh +000C9Cr 1 0F .lobytes 0Fh +000C9Dr 1 10 .lobytes 10h +000C9Er 1 11 .lobytes 11h +000C9Fr 1 12 .lobytes 12h +000CA0r 1 13 .lobytes 13h +000CA1r 1 70 .lobytes 70h +000CA2r 1 71 .lobytes 71h +000CA3r 1 72 .lobytes 72h +000CA4r 1 73 .lobytes 73h +000CA5r 1 74 .lobytes 74h +000CA6r 1 75 .lobytes 75h +000CA7r 1 76 .lobytes 76h +000CA8r 1 77 .lobytes 77h +000CA9r 1 78 .lobytes 78h +000CAAr 1 79 .lobytes 79h +000CABr 1 7A .lobytes 7Ah +000CACr 1 7B .lobytes 7Bh +000CADr 1 7C .lobytes 7Ch +000CAEr 1 7D .lobytes 7Dh +000CAFr 1 7E .lobytes 7Eh +000CB0r 1 7F .lobytes 7Fh +000CB1r 1 80 .lobytes 80h +000CB2r 1 81 .lobytes 81h +000CB3r 1 82 .lobytes 82h +000CB4r 1 83 .lobytes 83h +000CB5r 1 84 .lobytes 84h +000CB6r 1 85 .lobytes 85h +000CB7r 1 86 .lobytes 86h +000CB8r 1 F0 .lobytes 0F0h +000CB9r 1 F1 .lobytes 0F1h +000CBAr 1 F2 .lobytes 0F2h +000CBBr 1 F3 .lobytes 0F3h +000CBCr 1 F4 .lobytes 0F4h +000CBDr 1 F5 .lobytes 0F5h +000CBEr 1 F6 .lobytes 0F6h +000CBFr 1 F7 .lobytes 0F7h +000CC0r 1 F8 .lobytes 0F8h +000CC1r 1 F9 .lobytes 0F9h +000CC2r 1 FA .lobytes 0FAh +000CC3r 1 FB .lobytes 0FBh +000CC4r 1 FC .lobytes 0FCh +000CC5r 1 FD .lobytes 0FDh +000CC6r 1 FE .lobytes 0FEh +000CC7r 1 FF .lobytes 0FFh +000CC8r 1 00 .lobytes 100h +000CC9r 1 01 .lobytes 101h +000CCAr 1 02 .lobytes 102h +000CCBr 1 03 .lobytes 103h +000CCCr 1 D2 .lobytes 0FD2h +000CCDr 1 D3 .lobytes 0FD3h +000CCEr 1 D4 .lobytes 0FD4h +000CCFr 1 D5 .lobytes 0FD5h +000CD0r 1 D6 .lobytes 0FD6h +000CD1r 1 D7 .lobytes 0FD7h +000CD2r 1 D8 .lobytes 0FD8h +000CD3r 1 D9 .lobytes 0FD9h +000CD4r 1 DA .lobytes 0FDAh +000CD5r 1 DB .lobytes 0FDBh +000CD6r 1 DC .lobytes 0FDCh +000CD7r 1 DD .lobytes 0FDDh +000CD8r 1 DE .lobytes 0FDEh +000CD9r 1 DF .lobytes 0FDFh +000CDAr 1 E0 .lobytes 0FE0h +000CDBr 1 E1 .lobytes 0FE1h +000CDCr 1 E2 .lobytes 0FE2h +000CDDr 1 E3 .lobytes 0FE3h +000CDEr 1 E4 .lobytes 0FE4h +000CDFr 1 E5 .lobytes 0FE5h +000CE0r 1 E6 .lobytes 0FE6h +000CE1r 1 E7 .lobytes 0FE7h +000CE2r 1 E8 .lobytes 0FE8h +000CE3r 1 E9 .lobytes 0FE9h +000CE4r 1 EA .lobytes 0FEAh +000CE5r 1 EB .lobytes 0FEBh +000CE6r 1 EC .lobytes 0FECh +000CE7r 1 ED .lobytes 0FEDh +000CE8r 1 EE .lobytes 0FEEh +000CE9r 1 EF .lobytes 0FEFh +000CEAr 1 F0 .lobytes 0FF0h +000CEBr 1 F1 .lobytes 0FF1h +000CECr 1 F2 .lobytes 0FF2h +000CEDr 1 F3 .lobytes 0FF3h +000CEEr 1 F4 .lobytes 0FF4h +000CEFr 1 F5 .lobytes 0FF5h +000CF0r 1 F6 .lobytes 0FF6h +000CF1r 1 F7 .lobytes 0FF7h +000CF2r 1 F8 .lobytes 0FF8h +000CF3r 1 F9 .lobytes 0FF9h +000CF4r 1 FA .lobytes 0FFAh +000CF5r 1 FB .lobytes 0FFBh +000CF6r 1 FC .lobytes 0FFCh +000CF7r 1 FD .lobytes 0FFDh +000CF8r 1 FE .lobytes 0FFEh +000CF9r 1 FF .lobytes 0FFFh +000CFAr 1 00 .lobytes 1000h +000CFBr 1 01 .lobytes 1001h +000CFCr 1 02 .lobytes 1002h +000CFDr 1 03 .lobytes 1003h +000CFEr 1 04 .lobytes 1004h +000CFFr 1 05 .lobytes 1005h +000D00r 1 06 .lobytes 1006h +000D01r 1 07 .lobytes 1007h +000D02r 1 08 .lobytes 1008h +000D03r 1 F0 .lobytes 7FF0h +000D04r 1 F1 .lobytes 7FF1h +000D05r 1 F2 .lobytes 7FF2h +000D06r 1 F3 .lobytes 7FF3h +000D07r 1 F4 .lobytes 7FF4h +000D08r 1 F5 .lobytes 7FF5h +000D09r 1 F6 .lobytes 7FF6h +000D0Ar 1 F7 .lobytes 7FF7h +000D0Br 1 F8 .lobytes 7FF8h +000D0Cr 1 F9 .lobytes 7FF9h +000D0Dr 1 FA .lobytes 7FFAh +000D0Er 1 FB .lobytes 7FFBh +000D0Fr 1 FC .lobytes 7FFCh +000D10r 1 FD .lobytes 7FFDh +000D11r 1 FE .lobytes 7FFEh +000D12r 1 FF .lobytes 7FFFh +000D13r 1 00 .lobytes 8000h +000D14r 1 01 .lobytes 8001h +000D15r 1 02 .lobytes 8002h +000D16r 1 03 .lobytes 8003h +000D17r 1 04 .lobytes 8004h +000D18r 1 05 .lobytes 8005h +000D19r 1 06 .lobytes 8006h +000D1Ar 1 07 .lobytes 8007h +000D1Br 1 08 .lobytes 8008h +000D1Cr 1 09 .lobytes 8009h +000D1Dr 1 0A .lobytes 800Ah +000D1Er 1 0B .lobytes 800Bh +000D1Fr 1 E1 .lobytes 9FE1h +000D20r 1 E2 .lobytes 9FE2h +000D21r 1 E3 .lobytes 9FE3h +000D22r 1 E4 .lobytes 9FE4h +000D23r 1 E5 .lobytes 9FE5h +000D24r 1 E6 .lobytes 9FE6h +000D25r 1 E7 .lobytes 9FE7h +000D26r 1 E8 .lobytes 9FE8h +000D27r 1 E9 .lobytes 9FE9h +000D28r 1 EA .lobytes 9FEAh +000D29r 1 EB .lobytes 9FEBh +000D2Ar 1 EC .lobytes 9FECh +000D2Br 1 ED .lobytes 9FEDh +000D2Cr 1 EE .lobytes 9FEEh +000D2Dr 1 EF .lobytes 9FEFh +000D2Er 1 F0 .lobytes 9FF0h +000D2Fr 1 F1 .lobytes 9FF1h +000D30r 1 F2 .lobytes 9FF2h +000D31r 1 F3 .lobytes 9FF3h +000D32r 1 F4 .lobytes 9FF4h +000D33r 1 F5 .lobytes 9FF5h +000D34r 1 F6 .lobytes 9FF6h +000D35r 1 F7 .lobytes 9FF7h +000D36r 1 F8 .lobytes 9FF8h +000D37r 1 F9 .lobytes 9FF9h +000D38r 1 FA .lobytes 9FFAh +000D39r 1 FB .lobytes 9FFBh +000D3Ar 1 FC .lobytes 9FFCh +000D3Br 1 FD .lobytes 9FFDh +000D3Cr 1 FE .lobytes 9FFEh +000D3Dr 1 FF .lobytes 9FFFh +000D3Er 1 00 .lobytes 0A000h +000D3Fr 1 01 .lobytes 0A001h +000D40r 1 02 .lobytes 0A002h +000D41r 1 03 .lobytes 0A003h +000D42r 1 04 .lobytes 0A004h +000D43r 1 05 .lobytes 0A005h +000D44r 1 06 .lobytes 0A006h +000D45r 1 07 .lobytes 0A007h +000D46r 1 08 .lobytes 0A008h +000D47r 1 09 .lobytes 0A009h +000D48r 1 0A .lobytes 0A00Ah +000D49r 1 0B .lobytes 0A00Bh +000D4Ar 1 0C .lobytes 0A00Ch +000D4Br 1 0D .lobytes 0A00Dh +000D4Cr 1 0E .lobytes 0A00Eh +000D4Dr 1 0F .lobytes 0A00Fh +000D4Er 1 E1 .lobytes 0AFE1h +000D4Fr 1 E2 .lobytes 0AFE2h +000D50r 1 E3 .lobytes 0AFE3h +000D51r 1 E4 .lobytes 0AFE4h +000D52r 1 E5 .lobytes 0AFE5h +000D53r 1 E6 .lobytes 0AFE6h +000D54r 1 E7 .lobytes 0AFE7h +000D55r 1 E8 .lobytes 0AFE8h +000D56r 1 E9 .lobytes 0AFE9h +000D57r 1 EA .lobytes 0AFEAh +000D58r 1 EB .lobytes 0AFEBh +000D59r 1 EC .lobytes 0AFECh +000D5Ar 1 ED .lobytes 0AFEDh +000D5Br 1 EE .lobytes 0AFEEh +000D5Cr 1 EF .lobytes 0AFEFh +000D5Dr 1 F0 .lobytes 0AFF0h +000D5Er 1 F1 .lobytes 0AFF1h +000D5Fr 1 F2 .lobytes 0AFF2h +000D60r 1 F3 .lobytes 0AFF3h +000D61r 1 F4 .lobytes 0AFF4h +000D62r 1 F5 .lobytes 0AFF5h +000D63r 1 F6 .lobytes 0AFF6h +000D64r 1 F7 .lobytes 0AFF7h +000D65r 1 F8 .lobytes 0AFF8h +000D66r 1 F9 .lobytes 0AFF9h +000D67r 1 FA .lobytes 0AFFAh +000D68r 1 FB .lobytes 0AFFBh +000D69r 1 FC .lobytes 0AFFCh +000D6Ar 1 FD .lobytes 0AFFDh +000D6Br 1 FE .lobytes 0AFFEh +000D6Cr 1 FF .lobytes 0AFFFh +000D6Dr 1 00 .lobytes 0B000h +000D6Er 1 01 .lobytes 0B001h +000D6Fr 1 02 .lobytes 0B002h +000D70r 1 03 .lobytes 0B003h +000D71r 1 04 .lobytes 0B004h +000D72r 1 05 .lobytes 0B005h +000D73r 1 06 .lobytes 0B006h +000D74r 1 07 .lobytes 0B007h +000D75r 1 08 .lobytes 0B008h +000D76r 1 09 .lobytes 0B009h +000D77r 1 0A .lobytes 0B00Ah +000D78r 1 0B .lobytes 0B00Bh +000D79r 1 0C .lobytes 0B00Ch +000D7Ar 1 0D .lobytes 0B00Dh +000D7Br 1 0E .lobytes 0B00Eh +000D7Cr 1 0F .lobytes 0B00Fh +000D7Dr 1 E1 .lobytes 0BFE1h +000D7Er 1 E2 .lobytes 0BFE2h +000D7Fr 1 E3 .lobytes 0BFE3h +000D80r 1 E4 .lobytes 0BFE4h +000D81r 1 E5 .lobytes 0BFE5h +000D82r 1 E6 .lobytes 0BFE6h +000D83r 1 E7 .lobytes 0BFE7h +000D84r 1 E8 .lobytes 0BFE8h +000D85r 1 E9 .lobytes 0BFE9h +000D86r 1 EA .lobytes 0BFEAh +000D87r 1 EB .lobytes 0BFEBh +000D88r 1 EC .lobytes 0BFECh +000D89r 1 ED .lobytes 0BFEDh +000D8Ar 1 EE .lobytes 0BFEEh +000D8Br 1 EF .lobytes 0BFEFh +000D8Cr 1 F0 .lobytes 0BFF0h +000D8Dr 1 F1 .lobytes 0BFF1h +000D8Er 1 F2 .lobytes 0BFF2h +000D8Fr 1 F3 .lobytes 0BFF3h +000D90r 1 F4 .lobytes 0BFF4h +000D91r 1 F5 .lobytes 0BFF5h +000D92r 1 F6 .lobytes 0BFF6h +000D93r 1 F7 .lobytes 0BFF7h +000D94r 1 F8 .lobytes 0BFF8h +000D95r 1 F9 .lobytes 0BFF9h +000D96r 1 FA .lobytes 0BFFAh +000D97r 1 FB .lobytes 0BFFBh +000D98r 1 FC .lobytes 0BFFCh +000D99r 1 FD .lobytes 0BFFDh +000D9Ar 1 FE .lobytes 0BFFEh +000D9Br 1 FF .lobytes 0BFFFh +000D9Cr 1 00 .lobytes 0C000h +000D9Dr 1 01 .lobytes 0C001h +000D9Er 1 02 .lobytes 0C002h +000D9Fr 1 03 .lobytes 0C003h +000DA0r 1 04 .lobytes 0C004h +000DA1r 1 05 .lobytes 0C005h +000DA2r 1 06 .lobytes 0C006h +000DA3r 1 07 .lobytes 0C007h +000DA4r 1 08 .lobytes 0C008h +000DA5r 1 09 .lobytes 0C009h +000DA6r 1 0A .lobytes 0C00Ah +000DA7r 1 0B .lobytes 0C00Bh +000DA8r 1 0C .lobytes 0C00Ch +000DA9r 1 0D .lobytes 0C00Dh +000DAAr 1 0E .lobytes 0C00Eh +000DABr 1 0F .lobytes 0C00Fh +000DACr 1 E1 .lobytes 0CFE1h +000DADr 1 E2 .lobytes 0CFE2h +000DAEr 1 E3 .lobytes 0CFE3h +000DAFr 1 E4 .lobytes 0CFE4h +000DB0r 1 E5 .lobytes 0CFE5h +000DB1r 1 E6 .lobytes 0CFE6h +000DB2r 1 E7 .lobytes 0CFE7h +000DB3r 1 E8 .lobytes 0CFE8h +000DB4r 1 E9 .lobytes 0CFE9h +000DB5r 1 EA .lobytes 0CFEAh +000DB6r 1 EB .lobytes 0CFEBh +000DB7r 1 EC .lobytes 0CFECh +000DB8r 1 ED .lobytes 0CFEDh +000DB9r 1 EE .lobytes 0CFEEh +000DBAr 1 EF .lobytes 0CFEFh +000DBBr 1 F0 .lobytes 0CFF0h +000DBCr 1 F1 .lobytes 0CFF1h +000DBDr 1 F2 .lobytes 0CFF2h +000DBEr 1 F3 .lobytes 0CFF3h +000DBFr 1 F4 .lobytes 0CFF4h +000DC0r 1 F5 .lobytes 0CFF5h +000DC1r 1 F6 .lobytes 0CFF6h +000DC2r 1 F7 .lobytes 0CFF7h +000DC3r 1 F8 .lobytes 0CFF8h +000DC4r 1 F9 .lobytes 0CFF9h +000DC5r 1 FA .lobytes 0CFFAh +000DC6r 1 FB .lobytes 0CFFBh +000DC7r 1 FC .lobytes 0CFFCh +000DC8r 1 FD .lobytes 0CFFDh +000DC9r 1 FE .lobytes 0CFFEh +000DCAr 1 FF .lobytes 0CFFFh +000DCBr 1 00 .lobytes 0D000h +000DCCr 1 01 .lobytes 0D001h +000DCDr 1 02 .lobytes 0D002h +000DCEr 1 03 .lobytes 0D003h +000DCFr 1 04 .lobytes 0D004h +000DD0r 1 05 .lobytes 0D005h +000DD1r 1 06 .lobytes 0D006h +000DD2r 1 07 .lobytes 0D007h +000DD3r 1 08 .lobytes 0D008h +000DD4r 1 09 .lobytes 0D009h +000DD5r 1 0A .lobytes 0D00Ah +000DD6r 1 0B .lobytes 0D00Bh +000DD7r 1 0C .lobytes 0D00Ch +000DD8r 1 0D .lobytes 0D00Dh +000DD9r 1 0E .lobytes 0D00Eh +000DDAr 1 0F .lobytes 0D00Fh +000DDBr 1 E1 .lobytes 0DFE1h +000DDCr 1 E2 .lobytes 0DFE2h +000DDDr 1 E3 .lobytes 0DFE3h +000DDEr 1 E4 .lobytes 0DFE4h +000DDFr 1 E5 .lobytes 0DFE5h +000DE0r 1 E6 .lobytes 0DFE6h +000DE1r 1 E7 .lobytes 0DFE7h +000DE2r 1 E8 .lobytes 0DFE8h +000DE3r 1 E9 .lobytes 0DFE9h +000DE4r 1 EA .lobytes 0DFEAh +000DE5r 1 EB .lobytes 0DFEBh +000DE6r 1 EC .lobytes 0DFECh +000DE7r 1 ED .lobytes 0DFEDh +000DE8r 1 EE .lobytes 0DFEEh +000DE9r 1 EF .lobytes 0DFEFh +000DEAr 1 F0 .lobytes 0DFF0h +000DEBr 1 F1 .lobytes 0DFF1h +000DECr 1 F2 .lobytes 0DFF2h +000DEDr 1 F3 .lobytes 0DFF3h +000DEEr 1 F4 .lobytes 0DFF4h +000DEFr 1 F5 .lobytes 0DFF5h +000DF0r 1 F6 .lobytes 0DFF6h +000DF1r 1 F7 .lobytes 0DFF7h +000DF2r 1 F8 .lobytes 0DFF8h +000DF3r 1 F9 .lobytes 0DFF9h +000DF4r 1 FA .lobytes 0DFFAh +000DF5r 1 FB .lobytes 0DFFBh +000DF6r 1 FC .lobytes 0DFFCh +000DF7r 1 FD .lobytes 0DFFDh +000DF8r 1 FE .lobytes 0DFFEh +000DF9r 1 FF .lobytes 0DFFFh +000DFAr 1 00 .lobytes 0E000h +000DFBr 1 01 .lobytes 0E001h +000DFCr 1 02 .lobytes 0E002h +000DFDr 1 03 .lobytes 0E003h +000DFEr 1 04 .lobytes 0E004h +000DFFr 1 05 .lobytes 0E005h +000E00r 1 06 .lobytes 0E006h +000E01r 1 07 .lobytes 0E007h +000E02r 1 08 .lobytes 0E008h +000E03r 1 09 .lobytes 0E009h +000E04r 1 0A .lobytes 0E00Ah +000E05r 1 0B .lobytes 0E00Bh +000E06r 1 0C .lobytes 0E00Ch +000E07r 1 0D .lobytes 0E00Dh +000E08r 1 0E .lobytes 0E00Eh +000E09r 1 0F .lobytes 0E00Fh +000E0Ar 1 E1 .lobytes 0EFE1h +000E0Br 1 E2 .lobytes 0EFE2h +000E0Cr 1 E3 .lobytes 0EFE3h +000E0Dr 1 E4 .lobytes 0EFE4h +000E0Er 1 E5 .lobytes 0EFE5h +000E0Fr 1 E6 .lobytes 0EFE6h +000E10r 1 E7 .lobytes 0EFE7h +000E11r 1 E8 .lobytes 0EFE8h +000E12r 1 E9 .lobytes 0EFE9h +000E13r 1 EA .lobytes 0EFEAh +000E14r 1 EB .lobytes 0EFEBh +000E15r 1 EC .lobytes 0EFECh +000E16r 1 ED .lobytes 0EFEDh +000E17r 1 EE .lobytes 0EFEEh +000E18r 1 EF .lobytes 0EFEFh +000E19r 1 F0 .lobytes 0EFF0h +000E1Ar 1 F1 .lobytes 0EFF1h +000E1Br 1 F2 .lobytes 0EFF2h +000E1Cr 1 F3 .lobytes 0EFF3h +000E1Dr 1 F4 .lobytes 0EFF4h +000E1Er 1 F5 .lobytes 0EFF5h +000E1Fr 1 F6 .lobytes 0EFF6h +000E20r 1 F7 .lobytes 0EFF7h +000E21r 1 F8 .lobytes 0EFF8h +000E22r 1 F9 .lobytes 0EFF9h +000E23r 1 FA .lobytes 0EFFAh +000E24r 1 FB .lobytes 0EFFBh +000E25r 1 FC .lobytes 0EFFCh +000E26r 1 FD .lobytes 0EFFDh +000E27r 1 FE .lobytes 0EFFEh +000E28r 1 FF .lobytes 0EFFFh +000E29r 1 00 .lobytes 0F000h +000E2Ar 1 01 .lobytes 0F001h +000E2Br 1 02 .lobytes 0F002h +000E2Cr 1 03 .lobytes 0F003h +000E2Dr 1 04 .lobytes 0F004h +000E2Er 1 05 .lobytes 0F005h +000E2Fr 1 06 .lobytes 0F006h +000E30r 1 07 .lobytes 0F007h +000E31r 1 08 .lobytes 0F008h +000E32r 1 09 .lobytes 0F009h +000E33r 1 0A .lobytes 0F00Ah +000E34r 1 0B .lobytes 0F00Bh +000E35r 1 0C .lobytes 0F00Ch +000E36r 1 0D .lobytes 0F00Dh +000E37r 1 0E .lobytes 0F00Eh +000E38r 1 0F .lobytes 0F00Fh +000E39r 1 E1 .lobytes 0FFE1h +000E3Ar 1 E2 .lobytes 0FFE2h +000E3Br 1 E3 .lobytes 0FFE3h +000E3Cr 1 E4 .lobytes 0FFE4h +000E3Dr 1 E5 .lobytes 0FFE5h +000E3Er 1 E6 .lobytes 0FFE6h +000E3Fr 1 E7 .lobytes 0FFE7h +000E40r 1 E8 .lobytes 0FFE8h +000E41r 1 E9 .lobytes 0FFE9h +000E42r 1 EA .lobytes 0FFEAh +000E43r 1 EB .lobytes 0FFEBh +000E44r 1 EC .lobytes 0FFECh +000E45r 1 ED .lobytes 0FFEDh +000E46r 1 EE .lobytes 0FFEEh +000E47r 1 EF .lobytes 0FFEFh +000E48r 1 F0 .lobytes 0FFF0h +000E49r 1 F1 .lobytes 0FFF1h +000E4Ar 1 F2 .lobytes 0FFF2h +000E4Br 1 F3 .lobytes 0FFF3h +000E4Cr 1 F4 .lobytes 0FFF4h +000E4Dr 1 F5 .lobytes 0FFF5h +000E4Er 1 F6 .lobytes 0FFF6h +000E4Fr 1 F7 .lobytes 0FFF7h +000E50r 1 F8 .lobytes 0FFF8h +000E51r 1 F9 .lobytes 0FFF9h +000E52r 1 FA .lobytes 0FFFAh +000E53r 1 FB .lobytes 0FFFBh +000E54r 1 FC .lobytes 0FFFCh +000E55r 1 FD .lobytes 0FFFDh +000E56r 1 FE .lobytes 0FFFEh +000E57r 1 FF .lobytes 0FFFFh 000E58r 1 -000E58r 1 ; alternative 4-digit hex values -000E58r 1 00 .lobytes 0000h -000E59r 1 01 .lobytes 0001h -000E5Ar 1 02 .lobytes 0002h -000E5Br 1 03 .lobytes 0003h -000E5Cr 1 04 .lobytes 0004h -000E5Dr 1 05 .lobytes 0005h -000E5Er 1 06 .lobytes 0006h -000E5Fr 1 07 .lobytes 0007h -000E60r 1 08 .lobytes 0008h -000E61r 1 09 .lobytes 0009h -000E62r 1 0A .lobytes 000ah -000E63r 1 0B .lobytes 000bh -000E64r 1 0C .lobytes 000ch -000E65r 1 0D .lobytes 000dh -000E66r 1 0E .lobytes 000eh -000E67r 1 0F .lobytes 000fh -000E68r 1 10 .lobytes 0010h -000E69r 1 11 .lobytes 0011h -000E6Ar 1 12 .lobytes 0012h -000E6Br 1 13 .lobytes 0013h -000E6Cr 1 70 .lobytes 0070h -000E6Dr 1 71 .lobytes 0071h -000E6Er 1 72 .lobytes 0072h -000E6Fr 1 73 .lobytes 0073h -000E70r 1 74 .lobytes 0074h -000E71r 1 75 .lobytes 0075h -000E72r 1 76 .lobytes 0076h -000E73r 1 77 .lobytes 0077h -000E74r 1 78 .lobytes 0078h -000E75r 1 79 .lobytes 0079h -000E76r 1 7A .lobytes 007ah -000E77r 1 7B .lobytes 007bh -000E78r 1 7C .lobytes 007ch -000E79r 1 7D .lobytes 007dh -000E7Ar 1 7E .lobytes 007eh -000E7Br 1 7F .lobytes 007fh -000E7Cr 1 80 .lobytes 0080h -000E7Dr 1 81 .lobytes 0081h -000E7Er 1 82 .lobytes 0082h -000E7Fr 1 83 .lobytes 0083h -000E80r 1 84 .lobytes 0084h -000E81r 1 85 .lobytes 0085h -000E82r 1 86 .lobytes 0086h -000E83r 1 F0 .lobytes 00f0h -000E84r 1 F1 .lobytes 00f1h -000E85r 1 F2 .lobytes 00f2h -000E86r 1 F3 .lobytes 00f3h -000E87r 1 F4 .lobytes 00f4h -000E88r 1 F5 .lobytes 00f5h -000E89r 1 F6 .lobytes 00f6h -000E8Ar 1 F7 .lobytes 00f7h -000E8Br 1 F8 .lobytes 00f8h -000E8Cr 1 F9 .lobytes 00f9h -000E8Dr 1 FA .lobytes 00fah -000E8Er 1 FB .lobytes 00fbh -000E8Fr 1 FC .lobytes 00fch -000E90r 1 FD .lobytes 00fdh -000E91r 1 FE .lobytes 00feh -000E92r 1 FF .lobytes 00ffh -000E93r 1 00 .lobytes 0100h -000E94r 1 01 .lobytes 0101h -000E95r 1 02 .lobytes 0102h -000E96r 1 03 .lobytes 0103h -000E97r 1 D2 .lobytes 0fd2h -000E98r 1 D3 .lobytes 0fd3h -000E99r 1 D4 .lobytes 0fd4h -000E9Ar 1 D5 .lobytes 0fd5h -000E9Br 1 D6 .lobytes 0fd6h -000E9Cr 1 D7 .lobytes 0fd7h -000E9Dr 1 D8 .lobytes 0fd8h -000E9Er 1 D9 .lobytes 0fd9h -000E9Fr 1 DA .lobytes 0fdah -000EA0r 1 DB .lobytes 0fdbh -000EA1r 1 DC .lobytes 0fdch -000EA2r 1 DD .lobytes 0fddh -000EA3r 1 DE .lobytes 0fdeh -000EA4r 1 DF .lobytes 0fdfh -000EA5r 1 E0 .lobytes 0fe0h -000EA6r 1 E1 .lobytes 0fe1h -000EA7r 1 E2 .lobytes 0fe2h -000EA8r 1 E3 .lobytes 0fe3h -000EA9r 1 E4 .lobytes 0fe4h -000EAAr 1 E5 .lobytes 0fe5h -000EABr 1 E6 .lobytes 0fe6h -000EACr 1 E7 .lobytes 0fe7h -000EADr 1 E8 .lobytes 0fe8h -000EAEr 1 E9 .lobytes 0fe9h -000EAFr 1 EA .lobytes 0feah -000EB0r 1 EB .lobytes 0febh -000EB1r 1 EC .lobytes 0fech -000EB2r 1 ED .lobytes 0fedh -000EB3r 1 EE .lobytes 0feeh -000EB4r 1 EF .lobytes 0fefh -000EB5r 1 F0 .lobytes 0ff0h -000EB6r 1 F1 .lobytes 0ff1h -000EB7r 1 F2 .lobytes 0ff2h -000EB8r 1 F3 .lobytes 0ff3h -000EB9r 1 F4 .lobytes 0ff4h -000EBAr 1 F5 .lobytes 0ff5h -000EBBr 1 F6 .lobytes 0ff6h -000EBCr 1 F7 .lobytes 0ff7h -000EBDr 1 F8 .lobytes 0ff8h -000EBEr 1 F9 .lobytes 0ff9h -000EBFr 1 FA .lobytes 0ffah -000EC0r 1 FB .lobytes 0ffbh -000EC1r 1 FC .lobytes 0ffch -000EC2r 1 FD .lobytes 0ffdh -000EC3r 1 FE .lobytes 0ffeh -000EC4r 1 FF .lobytes 0fffh -000EC5r 1 00 .lobytes 1000h -000EC6r 1 01 .lobytes 1001h -000EC7r 1 02 .lobytes 1002h -000EC8r 1 03 .lobytes 1003h -000EC9r 1 04 .lobytes 1004h -000ECAr 1 05 .lobytes 1005h -000ECBr 1 06 .lobytes 1006h -000ECCr 1 07 .lobytes 1007h -000ECDr 1 08 .lobytes 1008h -000ECEr 1 F0 .lobytes 7ff0h -000ECFr 1 F1 .lobytes 7ff1h -000ED0r 1 F2 .lobytes 7ff2h -000ED1r 1 F3 .lobytes 7ff3h -000ED2r 1 F4 .lobytes 7ff4h -000ED3r 1 F5 .lobytes 7ff5h -000ED4r 1 F6 .lobytes 7ff6h -000ED5r 1 F7 .lobytes 7ff7h -000ED6r 1 F8 .lobytes 7ff8h -000ED7r 1 F9 .lobytes 7ff9h -000ED8r 1 FA .lobytes 7ffah -000ED9r 1 FB .lobytes 7ffbh -000EDAr 1 FC .lobytes 7ffch -000EDBr 1 FD .lobytes 7ffdh -000EDCr 1 FE .lobytes 7ffeh -000EDDr 1 FF .lobytes 7fffh -000EDEr 1 00 .lobytes 8000h -000EDFr 1 01 .lobytes 8001h -000EE0r 1 02 .lobytes 8002h -000EE1r 1 03 .lobytes 8003h -000EE2r 1 04 .lobytes 8004h -000EE3r 1 05 .lobytes 8005h -000EE4r 1 06 .lobytes 8006h -000EE5r 1 07 .lobytes 8007h -000EE6r 1 08 .lobytes 8008h -000EE7r 1 09 .lobytes 8009h -000EE8r 1 0A .lobytes 800ah -000EE9r 1 0B .lobytes 800bh -000EEAr 1 E1 .lobytes 9fe1h -000EEBr 1 E2 .lobytes 9fe2h -000EECr 1 E3 .lobytes 9fe3h -000EEDr 1 E4 .lobytes 9fe4h -000EEEr 1 E5 .lobytes 9fe5h -000EEFr 1 E6 .lobytes 9fe6h -000EF0r 1 E7 .lobytes 9fe7h -000EF1r 1 E8 .lobytes 9fe8h -000EF2r 1 E9 .lobytes 9fe9h -000EF3r 1 EA .lobytes 9feah -000EF4r 1 EB .lobytes 9febh -000EF5r 1 EC .lobytes 9fech -000EF6r 1 ED .lobytes 9fedh -000EF7r 1 EE .lobytes 9feeh -000EF8r 1 EF .lobytes 9fefh -000EF9r 1 F0 .lobytes 9ff0h -000EFAr 1 F1 .lobytes 9ff1h -000EFBr 1 F2 .lobytes 9ff2h -000EFCr 1 F3 .lobytes 9ff3h -000EFDr 1 F4 .lobytes 9ff4h -000EFEr 1 F5 .lobytes 9ff5h -000EFFr 1 F6 .lobytes 9ff6h -000F00r 1 F7 .lobytes 9ff7h -000F01r 1 F8 .lobytes 9ff8h -000F02r 1 F9 .lobytes 9ff9h -000F03r 1 FA .lobytes 9ffah -000F04r 1 FB .lobytes 9ffbh -000F05r 1 FC .lobytes 9ffch -000F06r 1 FD .lobytes 9ffdh -000F07r 1 FE .lobytes 9ffeh -000F08r 1 FF .lobytes 9fffh -000F09r 1 00 .lobytes 0a000h -000F0Ar 1 01 .lobytes 0a001h -000F0Br 1 02 .lobytes 0a002h -000F0Cr 1 03 .lobytes 0a003h -000F0Dr 1 04 .lobytes 0a004h -000F0Er 1 05 .lobytes 0a005h -000F0Fr 1 06 .lobytes 0a006h -000F10r 1 07 .lobytes 0a007h -000F11r 1 08 .lobytes 0a008h -000F12r 1 09 .lobytes 0a009h -000F13r 1 0A .lobytes 0a00ah -000F14r 1 0B .lobytes 0a00bh -000F15r 1 0C .lobytes 0a00ch -000F16r 1 0D .lobytes 0a00dh -000F17r 1 0E .lobytes 0a00eh -000F18r 1 0F .lobytes 0a00fh -000F19r 1 E1 .lobytes 0afe1h -000F1Ar 1 E2 .lobytes 0afe2h -000F1Br 1 E3 .lobytes 0afe3h -000F1Cr 1 E4 .lobytes 0afe4h -000F1Dr 1 E5 .lobytes 0afe5h -000F1Er 1 E6 .lobytes 0afe6h -000F1Fr 1 E7 .lobytes 0afe7h -000F20r 1 E8 .lobytes 0afe8h -000F21r 1 E9 .lobytes 0afe9h -000F22r 1 EA .lobytes 0afeah -000F23r 1 EB .lobytes 0afebh -000F24r 1 EC .lobytes 0afech -000F25r 1 ED .lobytes 0afedh -000F26r 1 EE .lobytes 0afeeh -000F27r 1 EF .lobytes 0afefh -000F28r 1 F0 .lobytes 0aff0h -000F29r 1 F1 .lobytes 0aff1h -000F2Ar 1 F2 .lobytes 0aff2h -000F2Br 1 F3 .lobytes 0aff3h -000F2Cr 1 F4 .lobytes 0aff4h -000F2Dr 1 F5 .lobytes 0aff5h -000F2Er 1 F6 .lobytes 0aff6h -000F2Fr 1 F7 .lobytes 0aff7h -000F30r 1 F8 .lobytes 0aff8h -000F31r 1 F9 .lobytes 0aff9h -000F32r 1 FA .lobytes 0affah -000F33r 1 FB .lobytes 0affbh -000F34r 1 FC .lobytes 0affch -000F35r 1 FD .lobytes 0affdh -000F36r 1 FE .lobytes 0affeh -000F37r 1 FF .lobytes 0afffh -000F38r 1 00 .lobytes 0b000h -000F39r 1 01 .lobytes 0b001h -000F3Ar 1 02 .lobytes 0b002h -000F3Br 1 03 .lobytes 0b003h -000F3Cr 1 04 .lobytes 0b004h -000F3Dr 1 05 .lobytes 0b005h -000F3Er 1 06 .lobytes 0b006h -000F3Fr 1 07 .lobytes 0b007h -000F40r 1 08 .lobytes 0b008h -000F41r 1 09 .lobytes 0b009h -000F42r 1 0A .lobytes 0b00ah -000F43r 1 0B .lobytes 0b00bh -000F44r 1 0C .lobytes 0b00ch -000F45r 1 0D .lobytes 0b00dh -000F46r 1 0E .lobytes 0b00eh -000F47r 1 0F .lobytes 0b00fh -000F48r 1 E1 .lobytes 0bfe1h -000F49r 1 E2 .lobytes 0bfe2h -000F4Ar 1 E3 .lobytes 0bfe3h -000F4Br 1 E4 .lobytes 0bfe4h -000F4Cr 1 E5 .lobytes 0bfe5h -000F4Dr 1 E6 .lobytes 0bfe6h -000F4Er 1 E7 .lobytes 0bfe7h -000F4Fr 1 E8 .lobytes 0bfe8h -000F50r 1 E9 .lobytes 0bfe9h -000F51r 1 EA .lobytes 0bfeah -000F52r 1 EB .lobytes 0bfebh -000F53r 1 EC .lobytes 0bfech -000F54r 1 ED .lobytes 0bfedh -000F55r 1 EE .lobytes 0bfeeh -000F56r 1 EF .lobytes 0bfefh -000F57r 1 F0 .lobytes 0bff0h -000F58r 1 F1 .lobytes 0bff1h -000F59r 1 F2 .lobytes 0bff2h -000F5Ar 1 F3 .lobytes 0bff3h -000F5Br 1 F4 .lobytes 0bff4h -000F5Cr 1 F5 .lobytes 0bff5h -000F5Dr 1 F6 .lobytes 0bff6h -000F5Er 1 F7 .lobytes 0bff7h -000F5Fr 1 F8 .lobytes 0bff8h -000F60r 1 F9 .lobytes 0bff9h -000F61r 1 FA .lobytes 0bffah -000F62r 1 FB .lobytes 0bffbh -000F63r 1 FC .lobytes 0bffch -000F64r 1 FD .lobytes 0bffdh -000F65r 1 FE .lobytes 0bffeh -000F66r 1 FF .lobytes 0bfffh -000F67r 1 00 .lobytes 0c000h -000F68r 1 01 .lobytes 0c001h -000F69r 1 02 .lobytes 0c002h -000F6Ar 1 03 .lobytes 0c003h -000F6Br 1 04 .lobytes 0c004h -000F6Cr 1 05 .lobytes 0c005h -000F6Dr 1 06 .lobytes 0c006h -000F6Er 1 07 .lobytes 0c007h -000F6Fr 1 08 .lobytes 0c008h -000F70r 1 09 .lobytes 0c009h -000F71r 1 0A .lobytes 0c00ah -000F72r 1 0B .lobytes 0c00bh -000F73r 1 0C .lobytes 0c00ch -000F74r 1 0D .lobytes 0c00dh -000F75r 1 0E .lobytes 0c00eh -000F76r 1 0F .lobytes 0c00fh -000F77r 1 E1 .lobytes 0cfe1h -000F78r 1 E2 .lobytes 0cfe2h -000F79r 1 E3 .lobytes 0cfe3h -000F7Ar 1 E4 .lobytes 0cfe4h -000F7Br 1 E5 .lobytes 0cfe5h -000F7Cr 1 E6 .lobytes 0cfe6h -000F7Dr 1 E7 .lobytes 0cfe7h -000F7Er 1 E8 .lobytes 0cfe8h -000F7Fr 1 E9 .lobytes 0cfe9h -000F80r 1 EA .lobytes 0cfeah -000F81r 1 EB .lobytes 0cfebh -000F82r 1 EC .lobytes 0cfech -000F83r 1 ED .lobytes 0cfedh -000F84r 1 EE .lobytes 0cfeeh -000F85r 1 EF .lobytes 0cfefh -000F86r 1 F0 .lobytes 0cff0h -000F87r 1 F1 .lobytes 0cff1h -000F88r 1 F2 .lobytes 0cff2h -000F89r 1 F3 .lobytes 0cff3h -000F8Ar 1 F4 .lobytes 0cff4h -000F8Br 1 F5 .lobytes 0cff5h -000F8Cr 1 F6 .lobytes 0cff6h -000F8Dr 1 F7 .lobytes 0cff7h -000F8Er 1 F8 .lobytes 0cff8h -000F8Fr 1 F9 .lobytes 0cff9h -000F90r 1 FA .lobytes 0cffah -000F91r 1 FB .lobytes 0cffbh -000F92r 1 FC .lobytes 0cffch -000F93r 1 FD .lobytes 0cffdh -000F94r 1 FE .lobytes 0cffeh -000F95r 1 FF .lobytes 0cfffh -000F96r 1 00 .lobytes 0d000h -000F97r 1 01 .lobytes 0d001h -000F98r 1 02 .lobytes 0d002h -000F99r 1 03 .lobytes 0d003h -000F9Ar 1 04 .lobytes 0d004h -000F9Br 1 05 .lobytes 0d005h -000F9Cr 1 06 .lobytes 0d006h -000F9Dr 1 07 .lobytes 0d007h -000F9Er 1 08 .lobytes 0d008h -000F9Fr 1 09 .lobytes 0d009h -000FA0r 1 0A .lobytes 0d00ah -000FA1r 1 0B .lobytes 0d00bh -000FA2r 1 0C .lobytes 0d00ch -000FA3r 1 0D .lobytes 0d00dh -000FA4r 1 0E .lobytes 0d00eh -000FA5r 1 0F .lobytes 0d00fh -000FA6r 1 E1 .lobytes 0dfe1h -000FA7r 1 E2 .lobytes 0dfe2h -000FA8r 1 E3 .lobytes 0dfe3h -000FA9r 1 E4 .lobytes 0dfe4h -000FAAr 1 E5 .lobytes 0dfe5h -000FABr 1 E6 .lobytes 0dfe6h -000FACr 1 E7 .lobytes 0dfe7h -000FADr 1 E8 .lobytes 0dfe8h -000FAEr 1 E9 .lobytes 0dfe9h -000FAFr 1 EA .lobytes 0dfeah -000FB0r 1 EB .lobytes 0dfebh -000FB1r 1 EC .lobytes 0dfech -000FB2r 1 ED .lobytes 0dfedh -000FB3r 1 EE .lobytes 0dfeeh -000FB4r 1 EF .lobytes 0dfefh -000FB5r 1 F0 .lobytes 0dff0h -000FB6r 1 F1 .lobytes 0dff1h -000FB7r 1 F2 .lobytes 0dff2h -000FB8r 1 F3 .lobytes 0dff3h -000FB9r 1 F4 .lobytes 0dff4h -000FBAr 1 F5 .lobytes 0dff5h -000FBBr 1 F6 .lobytes 0dff6h -000FBCr 1 F7 .lobytes 0dff7h -000FBDr 1 F8 .lobytes 0dff8h -000FBEr 1 F9 .lobytes 0dff9h -000FBFr 1 FA .lobytes 0dffah -000FC0r 1 FB .lobytes 0dffbh -000FC1r 1 FC .lobytes 0dffch -000FC2r 1 FD .lobytes 0dffdh -000FC3r 1 FE .lobytes 0dffeh -000FC4r 1 FF .lobytes 0dfffh -000FC5r 1 00 .lobytes 0e000h -000FC6r 1 01 .lobytes 0e001h -000FC7r 1 02 .lobytes 0e002h -000FC8r 1 03 .lobytes 0e003h -000FC9r 1 04 .lobytes 0e004h -000FCAr 1 05 .lobytes 0e005h -000FCBr 1 06 .lobytes 0e006h -000FCCr 1 07 .lobytes 0e007h -000FCDr 1 08 .lobytes 0e008h -000FCEr 1 09 .lobytes 0e009h -000FCFr 1 0A .lobytes 0e00ah -000FD0r 1 0B .lobytes 0e00bh -000FD1r 1 0C .lobytes 0e00ch -000FD2r 1 0D .lobytes 0e00dh -000FD3r 1 0E .lobytes 0e00eh -000FD4r 1 0F .lobytes 0e00fh -000FD5r 1 E1 .lobytes 0efe1h -000FD6r 1 E2 .lobytes 0efe2h -000FD7r 1 E3 .lobytes 0efe3h -000FD8r 1 E4 .lobytes 0efe4h -000FD9r 1 E5 .lobytes 0efe5h -000FDAr 1 E6 .lobytes 0efe6h -000FDBr 1 E7 .lobytes 0efe7h -000FDCr 1 E8 .lobytes 0efe8h -000FDDr 1 E9 .lobytes 0efe9h -000FDEr 1 EA .lobytes 0efeah -000FDFr 1 EB .lobytes 0efebh -000FE0r 1 EC .lobytes 0efech -000FE1r 1 ED .lobytes 0efedh -000FE2r 1 EE .lobytes 0efeeh -000FE3r 1 EF .lobytes 0efefh -000FE4r 1 F0 .lobytes 0eff0h -000FE5r 1 F1 .lobytes 0eff1h -000FE6r 1 F2 .lobytes 0eff2h -000FE7r 1 F3 .lobytes 0eff3h -000FE8r 1 F4 .lobytes 0eff4h -000FE9r 1 F5 .lobytes 0eff5h -000FEAr 1 F6 .lobytes 0eff6h -000FEBr 1 F7 .lobytes 0eff7h -000FECr 1 F8 .lobytes 0eff8h -000FEDr 1 F9 .lobytes 0eff9h -000FEEr 1 FA .lobytes 0effah -000FEFr 1 FB .lobytes 0effbh -000FF0r 1 FC .lobytes 0effch -000FF1r 1 FD .lobytes 0effdh -000FF2r 1 FE .lobytes 0effeh -000FF3r 1 FF .lobytes 0efffh -000FF4r 1 00 .lobytes 0f000h -000FF5r 1 01 .lobytes 0f001h -000FF6r 1 02 .lobytes 0f002h -000FF7r 1 03 .lobytes 0f003h -000FF8r 1 04 .lobytes 0f004h -000FF9r 1 05 .lobytes 0f005h -000FFAr 1 06 .lobytes 0f006h -000FFBr 1 07 .lobytes 0f007h -000FFCr 1 08 .lobytes 0f008h -000FFDr 1 09 .lobytes 0f009h -000FFEr 1 0A .lobytes 0f00ah -000FFFr 1 0B .lobytes 0f00bh -001000r 1 0C .lobytes 0f00ch -001001r 1 0D .lobytes 0f00dh -001002r 1 0E .lobytes 0f00eh -001003r 1 0F .lobytes 0f00fh -001004r 1 E1 .lobytes 0ffe1h -001005r 1 E2 .lobytes 0ffe2h -001006r 1 E3 .lobytes 0ffe3h -001007r 1 E4 .lobytes 0ffe4h -001008r 1 E5 .lobytes 0ffe5h -001009r 1 E6 .lobytes 0ffe6h -00100Ar 1 E7 .lobytes 0ffe7h -00100Br 1 E8 .lobytes 0ffe8h -00100Cr 1 E9 .lobytes 0ffe9h -00100Dr 1 EA .lobytes 0ffeah -00100Er 1 EB .lobytes 0ffebh -00100Fr 1 EC .lobytes 0ffech -001010r 1 ED .lobytes 0ffedh -001011r 1 EE .lobytes 0ffeeh -001012r 1 EF .lobytes 0ffefh -001013r 1 F0 .lobytes 0fff0h -001014r 1 F1 .lobytes 0fff1h -001015r 1 F2 .lobytes 0fff2h -001016r 1 F3 .lobytes 0fff3h -001017r 1 F4 .lobytes 0fff4h -001018r 1 F5 .lobytes 0fff5h -001019r 1 F6 .lobytes 0fff6h -00101Ar 1 F7 .lobytes 0fff7h -00101Br 1 F8 .lobytes 0fff8h -00101Cr 1 F9 .lobytes 0fff9h -00101Dr 1 FA .lobytes 0fffah -00101Er 1 FB .lobytes 0fffbh -00101Fr 1 FC .lobytes 0fffch -001020r 1 FD .lobytes 0fffdh -001021r 1 FE .lobytes 0fffeh -001022r 1 FF .lobytes 0ffffh +000E58r 1 ; alternative 4-digit hex values +000E58r 1 00 .lobytes 0000h +000E59r 1 01 .lobytes 0001h +000E5Ar 1 02 .lobytes 0002h +000E5Br 1 03 .lobytes 0003h +000E5Cr 1 04 .lobytes 0004h +000E5Dr 1 05 .lobytes 0005h +000E5Er 1 06 .lobytes 0006h +000E5Fr 1 07 .lobytes 0007h +000E60r 1 08 .lobytes 0008h +000E61r 1 09 .lobytes 0009h +000E62r 1 0A .lobytes 000ah +000E63r 1 0B .lobytes 000bh +000E64r 1 0C .lobytes 000ch +000E65r 1 0D .lobytes 000dh +000E66r 1 0E .lobytes 000eh +000E67r 1 0F .lobytes 000fh +000E68r 1 10 .lobytes 0010h +000E69r 1 11 .lobytes 0011h +000E6Ar 1 12 .lobytes 0012h +000E6Br 1 13 .lobytes 0013h +000E6Cr 1 70 .lobytes 0070h +000E6Dr 1 71 .lobytes 0071h +000E6Er 1 72 .lobytes 0072h +000E6Fr 1 73 .lobytes 0073h +000E70r 1 74 .lobytes 0074h +000E71r 1 75 .lobytes 0075h +000E72r 1 76 .lobytes 0076h +000E73r 1 77 .lobytes 0077h +000E74r 1 78 .lobytes 0078h +000E75r 1 79 .lobytes 0079h +000E76r 1 7A .lobytes 007ah +000E77r 1 7B .lobytes 007bh +000E78r 1 7C .lobytes 007ch +000E79r 1 7D .lobytes 007dh +000E7Ar 1 7E .lobytes 007eh +000E7Br 1 7F .lobytes 007fh +000E7Cr 1 80 .lobytes 0080h +000E7Dr 1 81 .lobytes 0081h +000E7Er 1 82 .lobytes 0082h +000E7Fr 1 83 .lobytes 0083h +000E80r 1 84 .lobytes 0084h +000E81r 1 85 .lobytes 0085h +000E82r 1 86 .lobytes 0086h +000E83r 1 F0 .lobytes 00f0h +000E84r 1 F1 .lobytes 00f1h +000E85r 1 F2 .lobytes 00f2h +000E86r 1 F3 .lobytes 00f3h +000E87r 1 F4 .lobytes 00f4h +000E88r 1 F5 .lobytes 00f5h +000E89r 1 F6 .lobytes 00f6h +000E8Ar 1 F7 .lobytes 00f7h +000E8Br 1 F8 .lobytes 00f8h +000E8Cr 1 F9 .lobytes 00f9h +000E8Dr 1 FA .lobytes 00fah +000E8Er 1 FB .lobytes 00fbh +000E8Fr 1 FC .lobytes 00fch +000E90r 1 FD .lobytes 00fdh +000E91r 1 FE .lobytes 00feh +000E92r 1 FF .lobytes 00ffh +000E93r 1 00 .lobytes 0100h +000E94r 1 01 .lobytes 0101h +000E95r 1 02 .lobytes 0102h +000E96r 1 03 .lobytes 0103h +000E97r 1 D2 .lobytes 0fd2h +000E98r 1 D3 .lobytes 0fd3h +000E99r 1 D4 .lobytes 0fd4h +000E9Ar 1 D5 .lobytes 0fd5h +000E9Br 1 D6 .lobytes 0fd6h +000E9Cr 1 D7 .lobytes 0fd7h +000E9Dr 1 D8 .lobytes 0fd8h +000E9Er 1 D9 .lobytes 0fd9h +000E9Fr 1 DA .lobytes 0fdah +000EA0r 1 DB .lobytes 0fdbh +000EA1r 1 DC .lobytes 0fdch +000EA2r 1 DD .lobytes 0fddh +000EA3r 1 DE .lobytes 0fdeh +000EA4r 1 DF .lobytes 0fdfh +000EA5r 1 E0 .lobytes 0fe0h +000EA6r 1 E1 .lobytes 0fe1h +000EA7r 1 E2 .lobytes 0fe2h +000EA8r 1 E3 .lobytes 0fe3h +000EA9r 1 E4 .lobytes 0fe4h +000EAAr 1 E5 .lobytes 0fe5h +000EABr 1 E6 .lobytes 0fe6h +000EACr 1 E7 .lobytes 0fe7h +000EADr 1 E8 .lobytes 0fe8h +000EAEr 1 E9 .lobytes 0fe9h +000EAFr 1 EA .lobytes 0feah +000EB0r 1 EB .lobytes 0febh +000EB1r 1 EC .lobytes 0fech +000EB2r 1 ED .lobytes 0fedh +000EB3r 1 EE .lobytes 0feeh +000EB4r 1 EF .lobytes 0fefh +000EB5r 1 F0 .lobytes 0ff0h +000EB6r 1 F1 .lobytes 0ff1h +000EB7r 1 F2 .lobytes 0ff2h +000EB8r 1 F3 .lobytes 0ff3h +000EB9r 1 F4 .lobytes 0ff4h +000EBAr 1 F5 .lobytes 0ff5h +000EBBr 1 F6 .lobytes 0ff6h +000EBCr 1 F7 .lobytes 0ff7h +000EBDr 1 F8 .lobytes 0ff8h +000EBEr 1 F9 .lobytes 0ff9h +000EBFr 1 FA .lobytes 0ffah +000EC0r 1 FB .lobytes 0ffbh +000EC1r 1 FC .lobytes 0ffch +000EC2r 1 FD .lobytes 0ffdh +000EC3r 1 FE .lobytes 0ffeh +000EC4r 1 FF .lobytes 0fffh +000EC5r 1 00 .lobytes 1000h +000EC6r 1 01 .lobytes 1001h +000EC7r 1 02 .lobytes 1002h +000EC8r 1 03 .lobytes 1003h +000EC9r 1 04 .lobytes 1004h +000ECAr 1 05 .lobytes 1005h +000ECBr 1 06 .lobytes 1006h +000ECCr 1 07 .lobytes 1007h +000ECDr 1 08 .lobytes 1008h +000ECEr 1 F0 .lobytes 7ff0h +000ECFr 1 F1 .lobytes 7ff1h +000ED0r 1 F2 .lobytes 7ff2h +000ED1r 1 F3 .lobytes 7ff3h +000ED2r 1 F4 .lobytes 7ff4h +000ED3r 1 F5 .lobytes 7ff5h +000ED4r 1 F6 .lobytes 7ff6h +000ED5r 1 F7 .lobytes 7ff7h +000ED6r 1 F8 .lobytes 7ff8h +000ED7r 1 F9 .lobytes 7ff9h +000ED8r 1 FA .lobytes 7ffah +000ED9r 1 FB .lobytes 7ffbh +000EDAr 1 FC .lobytes 7ffch +000EDBr 1 FD .lobytes 7ffdh +000EDCr 1 FE .lobytes 7ffeh +000EDDr 1 FF .lobytes 7fffh +000EDEr 1 00 .lobytes 8000h +000EDFr 1 01 .lobytes 8001h +000EE0r 1 02 .lobytes 8002h +000EE1r 1 03 .lobytes 8003h +000EE2r 1 04 .lobytes 8004h +000EE3r 1 05 .lobytes 8005h +000EE4r 1 06 .lobytes 8006h +000EE5r 1 07 .lobytes 8007h +000EE6r 1 08 .lobytes 8008h +000EE7r 1 09 .lobytes 8009h +000EE8r 1 0A .lobytes 800ah +000EE9r 1 0B .lobytes 800bh +000EEAr 1 E1 .lobytes 9fe1h +000EEBr 1 E2 .lobytes 9fe2h +000EECr 1 E3 .lobytes 9fe3h +000EEDr 1 E4 .lobytes 9fe4h +000EEEr 1 E5 .lobytes 9fe5h +000EEFr 1 E6 .lobytes 9fe6h +000EF0r 1 E7 .lobytes 9fe7h +000EF1r 1 E8 .lobytes 9fe8h +000EF2r 1 E9 .lobytes 9fe9h +000EF3r 1 EA .lobytes 9feah +000EF4r 1 EB .lobytes 9febh +000EF5r 1 EC .lobytes 9fech +000EF6r 1 ED .lobytes 9fedh +000EF7r 1 EE .lobytes 9feeh +000EF8r 1 EF .lobytes 9fefh +000EF9r 1 F0 .lobytes 9ff0h +000EFAr 1 F1 .lobytes 9ff1h +000EFBr 1 F2 .lobytes 9ff2h +000EFCr 1 F3 .lobytes 9ff3h +000EFDr 1 F4 .lobytes 9ff4h +000EFEr 1 F5 .lobytes 9ff5h +000EFFr 1 F6 .lobytes 9ff6h +000F00r 1 F7 .lobytes 9ff7h +000F01r 1 F8 .lobytes 9ff8h +000F02r 1 F9 .lobytes 9ff9h +000F03r 1 FA .lobytes 9ffah +000F04r 1 FB .lobytes 9ffbh +000F05r 1 FC .lobytes 9ffch +000F06r 1 FD .lobytes 9ffdh +000F07r 1 FE .lobytes 9ffeh +000F08r 1 FF .lobytes 9fffh +000F09r 1 00 .lobytes 0a000h +000F0Ar 1 01 .lobytes 0a001h +000F0Br 1 02 .lobytes 0a002h +000F0Cr 1 03 .lobytes 0a003h +000F0Dr 1 04 .lobytes 0a004h +000F0Er 1 05 .lobytes 0a005h +000F0Fr 1 06 .lobytes 0a006h +000F10r 1 07 .lobytes 0a007h +000F11r 1 08 .lobytes 0a008h +000F12r 1 09 .lobytes 0a009h +000F13r 1 0A .lobytes 0a00ah +000F14r 1 0B .lobytes 0a00bh +000F15r 1 0C .lobytes 0a00ch +000F16r 1 0D .lobytes 0a00dh +000F17r 1 0E .lobytes 0a00eh +000F18r 1 0F .lobytes 0a00fh +000F19r 1 E1 .lobytes 0afe1h +000F1Ar 1 E2 .lobytes 0afe2h +000F1Br 1 E3 .lobytes 0afe3h +000F1Cr 1 E4 .lobytes 0afe4h +000F1Dr 1 E5 .lobytes 0afe5h +000F1Er 1 E6 .lobytes 0afe6h +000F1Fr 1 E7 .lobytes 0afe7h +000F20r 1 E8 .lobytes 0afe8h +000F21r 1 E9 .lobytes 0afe9h +000F22r 1 EA .lobytes 0afeah +000F23r 1 EB .lobytes 0afebh +000F24r 1 EC .lobytes 0afech +000F25r 1 ED .lobytes 0afedh +000F26r 1 EE .lobytes 0afeeh +000F27r 1 EF .lobytes 0afefh +000F28r 1 F0 .lobytes 0aff0h +000F29r 1 F1 .lobytes 0aff1h +000F2Ar 1 F2 .lobytes 0aff2h +000F2Br 1 F3 .lobytes 0aff3h +000F2Cr 1 F4 .lobytes 0aff4h +000F2Dr 1 F5 .lobytes 0aff5h +000F2Er 1 F6 .lobytes 0aff6h +000F2Fr 1 F7 .lobytes 0aff7h +000F30r 1 F8 .lobytes 0aff8h +000F31r 1 F9 .lobytes 0aff9h +000F32r 1 FA .lobytes 0affah +000F33r 1 FB .lobytes 0affbh +000F34r 1 FC .lobytes 0affch +000F35r 1 FD .lobytes 0affdh +000F36r 1 FE .lobytes 0affeh +000F37r 1 FF .lobytes 0afffh +000F38r 1 00 .lobytes 0b000h +000F39r 1 01 .lobytes 0b001h +000F3Ar 1 02 .lobytes 0b002h +000F3Br 1 03 .lobytes 0b003h +000F3Cr 1 04 .lobytes 0b004h +000F3Dr 1 05 .lobytes 0b005h +000F3Er 1 06 .lobytes 0b006h +000F3Fr 1 07 .lobytes 0b007h +000F40r 1 08 .lobytes 0b008h +000F41r 1 09 .lobytes 0b009h +000F42r 1 0A .lobytes 0b00ah +000F43r 1 0B .lobytes 0b00bh +000F44r 1 0C .lobytes 0b00ch +000F45r 1 0D .lobytes 0b00dh +000F46r 1 0E .lobytes 0b00eh +000F47r 1 0F .lobytes 0b00fh +000F48r 1 E1 .lobytes 0bfe1h +000F49r 1 E2 .lobytes 0bfe2h +000F4Ar 1 E3 .lobytes 0bfe3h +000F4Br 1 E4 .lobytes 0bfe4h +000F4Cr 1 E5 .lobytes 0bfe5h +000F4Dr 1 E6 .lobytes 0bfe6h +000F4Er 1 E7 .lobytes 0bfe7h +000F4Fr 1 E8 .lobytes 0bfe8h +000F50r 1 E9 .lobytes 0bfe9h +000F51r 1 EA .lobytes 0bfeah +000F52r 1 EB .lobytes 0bfebh +000F53r 1 EC .lobytes 0bfech +000F54r 1 ED .lobytes 0bfedh +000F55r 1 EE .lobytes 0bfeeh +000F56r 1 EF .lobytes 0bfefh +000F57r 1 F0 .lobytes 0bff0h +000F58r 1 F1 .lobytes 0bff1h +000F59r 1 F2 .lobytes 0bff2h +000F5Ar 1 F3 .lobytes 0bff3h +000F5Br 1 F4 .lobytes 0bff4h +000F5Cr 1 F5 .lobytes 0bff5h +000F5Dr 1 F6 .lobytes 0bff6h +000F5Er 1 F7 .lobytes 0bff7h +000F5Fr 1 F8 .lobytes 0bff8h +000F60r 1 F9 .lobytes 0bff9h +000F61r 1 FA .lobytes 0bffah +000F62r 1 FB .lobytes 0bffbh +000F63r 1 FC .lobytes 0bffch +000F64r 1 FD .lobytes 0bffdh +000F65r 1 FE .lobytes 0bffeh +000F66r 1 FF .lobytes 0bfffh +000F67r 1 00 .lobytes 0c000h +000F68r 1 01 .lobytes 0c001h +000F69r 1 02 .lobytes 0c002h +000F6Ar 1 03 .lobytes 0c003h +000F6Br 1 04 .lobytes 0c004h +000F6Cr 1 05 .lobytes 0c005h +000F6Dr 1 06 .lobytes 0c006h +000F6Er 1 07 .lobytes 0c007h +000F6Fr 1 08 .lobytes 0c008h +000F70r 1 09 .lobytes 0c009h +000F71r 1 0A .lobytes 0c00ah +000F72r 1 0B .lobytes 0c00bh +000F73r 1 0C .lobytes 0c00ch +000F74r 1 0D .lobytes 0c00dh +000F75r 1 0E .lobytes 0c00eh +000F76r 1 0F .lobytes 0c00fh +000F77r 1 E1 .lobytes 0cfe1h +000F78r 1 E2 .lobytes 0cfe2h +000F79r 1 E3 .lobytes 0cfe3h +000F7Ar 1 E4 .lobytes 0cfe4h +000F7Br 1 E5 .lobytes 0cfe5h +000F7Cr 1 E6 .lobytes 0cfe6h +000F7Dr 1 E7 .lobytes 0cfe7h +000F7Er 1 E8 .lobytes 0cfe8h +000F7Fr 1 E9 .lobytes 0cfe9h +000F80r 1 EA .lobytes 0cfeah +000F81r 1 EB .lobytes 0cfebh +000F82r 1 EC .lobytes 0cfech +000F83r 1 ED .lobytes 0cfedh +000F84r 1 EE .lobytes 0cfeeh +000F85r 1 EF .lobytes 0cfefh +000F86r 1 F0 .lobytes 0cff0h +000F87r 1 F1 .lobytes 0cff1h +000F88r 1 F2 .lobytes 0cff2h +000F89r 1 F3 .lobytes 0cff3h +000F8Ar 1 F4 .lobytes 0cff4h +000F8Br 1 F5 .lobytes 0cff5h +000F8Cr 1 F6 .lobytes 0cff6h +000F8Dr 1 F7 .lobytes 0cff7h +000F8Er 1 F8 .lobytes 0cff8h +000F8Fr 1 F9 .lobytes 0cff9h +000F90r 1 FA .lobytes 0cffah +000F91r 1 FB .lobytes 0cffbh +000F92r 1 FC .lobytes 0cffch +000F93r 1 FD .lobytes 0cffdh +000F94r 1 FE .lobytes 0cffeh +000F95r 1 FF .lobytes 0cfffh +000F96r 1 00 .lobytes 0d000h +000F97r 1 01 .lobytes 0d001h +000F98r 1 02 .lobytes 0d002h +000F99r 1 03 .lobytes 0d003h +000F9Ar 1 04 .lobytes 0d004h +000F9Br 1 05 .lobytes 0d005h +000F9Cr 1 06 .lobytes 0d006h +000F9Dr 1 07 .lobytes 0d007h +000F9Er 1 08 .lobytes 0d008h +000F9Fr 1 09 .lobytes 0d009h +000FA0r 1 0A .lobytes 0d00ah +000FA1r 1 0B .lobytes 0d00bh +000FA2r 1 0C .lobytes 0d00ch +000FA3r 1 0D .lobytes 0d00dh +000FA4r 1 0E .lobytes 0d00eh +000FA5r 1 0F .lobytes 0d00fh +000FA6r 1 E1 .lobytes 0dfe1h +000FA7r 1 E2 .lobytes 0dfe2h +000FA8r 1 E3 .lobytes 0dfe3h +000FA9r 1 E4 .lobytes 0dfe4h +000FAAr 1 E5 .lobytes 0dfe5h +000FABr 1 E6 .lobytes 0dfe6h +000FACr 1 E7 .lobytes 0dfe7h +000FADr 1 E8 .lobytes 0dfe8h +000FAEr 1 E9 .lobytes 0dfe9h +000FAFr 1 EA .lobytes 0dfeah +000FB0r 1 EB .lobytes 0dfebh +000FB1r 1 EC .lobytes 0dfech +000FB2r 1 ED .lobytes 0dfedh +000FB3r 1 EE .lobytes 0dfeeh +000FB4r 1 EF .lobytes 0dfefh +000FB5r 1 F0 .lobytes 0dff0h +000FB6r 1 F1 .lobytes 0dff1h +000FB7r 1 F2 .lobytes 0dff2h +000FB8r 1 F3 .lobytes 0dff3h +000FB9r 1 F4 .lobytes 0dff4h +000FBAr 1 F5 .lobytes 0dff5h +000FBBr 1 F6 .lobytes 0dff6h +000FBCr 1 F7 .lobytes 0dff7h +000FBDr 1 F8 .lobytes 0dff8h +000FBEr 1 F9 .lobytes 0dff9h +000FBFr 1 FA .lobytes 0dffah +000FC0r 1 FB .lobytes 0dffbh +000FC1r 1 FC .lobytes 0dffch +000FC2r 1 FD .lobytes 0dffdh +000FC3r 1 FE .lobytes 0dffeh +000FC4r 1 FF .lobytes 0dfffh +000FC5r 1 00 .lobytes 0e000h +000FC6r 1 01 .lobytes 0e001h +000FC7r 1 02 .lobytes 0e002h +000FC8r 1 03 .lobytes 0e003h +000FC9r 1 04 .lobytes 0e004h +000FCAr 1 05 .lobytes 0e005h +000FCBr 1 06 .lobytes 0e006h +000FCCr 1 07 .lobytes 0e007h +000FCDr 1 08 .lobytes 0e008h +000FCEr 1 09 .lobytes 0e009h +000FCFr 1 0A .lobytes 0e00ah +000FD0r 1 0B .lobytes 0e00bh +000FD1r 1 0C .lobytes 0e00ch +000FD2r 1 0D .lobytes 0e00dh +000FD3r 1 0E .lobytes 0e00eh +000FD4r 1 0F .lobytes 0e00fh +000FD5r 1 E1 .lobytes 0efe1h +000FD6r 1 E2 .lobytes 0efe2h +000FD7r 1 E3 .lobytes 0efe3h +000FD8r 1 E4 .lobytes 0efe4h +000FD9r 1 E5 .lobytes 0efe5h +000FDAr 1 E6 .lobytes 0efe6h +000FDBr 1 E7 .lobytes 0efe7h +000FDCr 1 E8 .lobytes 0efe8h +000FDDr 1 E9 .lobytes 0efe9h +000FDEr 1 EA .lobytes 0efeah +000FDFr 1 EB .lobytes 0efebh +000FE0r 1 EC .lobytes 0efech +000FE1r 1 ED .lobytes 0efedh +000FE2r 1 EE .lobytes 0efeeh +000FE3r 1 EF .lobytes 0efefh +000FE4r 1 F0 .lobytes 0eff0h +000FE5r 1 F1 .lobytes 0eff1h +000FE6r 1 F2 .lobytes 0eff2h +000FE7r 1 F3 .lobytes 0eff3h +000FE8r 1 F4 .lobytes 0eff4h +000FE9r 1 F5 .lobytes 0eff5h +000FEAr 1 F6 .lobytes 0eff6h +000FEBr 1 F7 .lobytes 0eff7h +000FECr 1 F8 .lobytes 0eff8h +000FEDr 1 F9 .lobytes 0eff9h +000FEEr 1 FA .lobytes 0effah +000FEFr 1 FB .lobytes 0effbh +000FF0r 1 FC .lobytes 0effch +000FF1r 1 FD .lobytes 0effdh +000FF2r 1 FE .lobytes 0effeh +000FF3r 1 FF .lobytes 0efffh +000FF4r 1 00 .lobytes 0f000h +000FF5r 1 01 .lobytes 0f001h +000FF6r 1 02 .lobytes 0f002h +000FF7r 1 03 .lobytes 0f003h +000FF8r 1 04 .lobytes 0f004h +000FF9r 1 05 .lobytes 0f005h +000FFAr 1 06 .lobytes 0f006h +000FFBr 1 07 .lobytes 0f007h +000FFCr 1 08 .lobytes 0f008h +000FFDr 1 09 .lobytes 0f009h +000FFEr 1 0A .lobytes 0f00ah +000FFFr 1 0B .lobytes 0f00bh +001000r 1 0C .lobytes 0f00ch +001001r 1 0D .lobytes 0f00dh +001002r 1 0E .lobytes 0f00eh +001003r 1 0F .lobytes 0f00fh +001004r 1 E1 .lobytes 0ffe1h +001005r 1 E2 .lobytes 0ffe2h +001006r 1 E3 .lobytes 0ffe3h +001007r 1 E4 .lobytes 0ffe4h +001008r 1 E5 .lobytes 0ffe5h +001009r 1 E6 .lobytes 0ffe6h +00100Ar 1 E7 .lobytes 0ffe7h +00100Br 1 E8 .lobytes 0ffe8h +00100Cr 1 E9 .lobytes 0ffe9h +00100Dr 1 EA .lobytes 0ffeah +00100Er 1 EB .lobytes 0ffebh +00100Fr 1 EC .lobytes 0ffech +001010r 1 ED .lobytes 0ffedh +001011r 1 EE .lobytes 0ffeeh +001012r 1 EF .lobytes 0ffefh +001013r 1 F0 .lobytes 0fff0h +001014r 1 F1 .lobytes 0fff1h +001015r 1 F2 .lobytes 0fff2h +001016r 1 F3 .lobytes 0fff3h +001017r 1 F4 .lobytes 0fff4h +001018r 1 F5 .lobytes 0fff5h +001019r 1 F6 .lobytes 0fff6h +00101Ar 1 F7 .lobytes 0fff7h +00101Br 1 F8 .lobytes 0fff8h +00101Cr 1 F9 .lobytes 0fff9h +00101Dr 1 FA .lobytes 0fffah +00101Er 1 FB .lobytes 0fffbh +00101Fr 1 FC .lobytes 0fffch +001020r 1 FD .lobytes 0fffdh +001021r 1 FE .lobytes 0fffeh +001022r 1 FF .lobytes 0ffffh 001023r 1 -001023r 1 ; alternative 4-digit hex values, uppercase -001023r 1 00 .lobytes 0000h -001024r 1 01 .lobytes 0001h -001025r 1 02 .lobytes 0002h -001026r 1 03 .lobytes 0003h -001027r 1 04 .lobytes 0004h -001028r 1 05 .lobytes 0005h -001029r 1 06 .lobytes 0006h -00102Ar 1 07 .lobytes 0007h -00102Br 1 08 .lobytes 0008h -00102Cr 1 09 .lobytes 0009h -00102Dr 1 0A .lobytes 000Ah -00102Er 1 0B .lobytes 000Bh -00102Fr 1 0C .lobytes 000Ch -001030r 1 0D .lobytes 000Dh -001031r 1 0E .lobytes 000Eh -001032r 1 0F .lobytes 000Fh -001033r 1 10 .lobytes 0010h -001034r 1 11 .lobytes 0011h -001035r 1 12 .lobytes 0012h -001036r 1 13 .lobytes 0013h -001037r 1 70 .lobytes 0070h -001038r 1 71 .lobytes 0071h -001039r 1 72 .lobytes 0072h -00103Ar 1 73 .lobytes 0073h -00103Br 1 74 .lobytes 0074h -00103Cr 1 75 .lobytes 0075h -00103Dr 1 76 .lobytes 0076h -00103Er 1 77 .lobytes 0077h -00103Fr 1 78 .lobytes 0078h -001040r 1 79 .lobytes 0079h -001041r 1 7A .lobytes 007Ah -001042r 1 7B .lobytes 007Bh -001043r 1 7C .lobytes 007Ch -001044r 1 7D .lobytes 007Dh -001045r 1 7E .lobytes 007Eh -001046r 1 7F .lobytes 007Fh -001047r 1 80 .lobytes 0080h -001048r 1 81 .lobytes 0081h -001049r 1 82 .lobytes 0082h -00104Ar 1 83 .lobytes 0083h -00104Br 1 84 .lobytes 0084h -00104Cr 1 85 .lobytes 0085h -00104Dr 1 86 .lobytes 0086h -00104Er 1 F0 .lobytes 00F0h -00104Fr 1 F1 .lobytes 00F1h -001050r 1 F2 .lobytes 00F2h -001051r 1 F3 .lobytes 00F3h -001052r 1 F4 .lobytes 00F4h -001053r 1 F5 .lobytes 00F5h -001054r 1 F6 .lobytes 00F6h -001055r 1 F7 .lobytes 00F7h -001056r 1 F8 .lobytes 00F8h -001057r 1 F9 .lobytes 00F9h -001058r 1 FA .lobytes 00FAh -001059r 1 FB .lobytes 00FBh -00105Ar 1 FC .lobytes 00FCh -00105Br 1 FD .lobytes 00FDh -00105Cr 1 FE .lobytes 00FEh -00105Dr 1 FF .lobytes 00FFh -00105Er 1 00 .lobytes 0100h -00105Fr 1 01 .lobytes 0101h -001060r 1 02 .lobytes 0102h -001061r 1 03 .lobytes 0103h -001062r 1 D2 .lobytes 0FD2h -001063r 1 D3 .lobytes 0FD3h -001064r 1 D4 .lobytes 0FD4h -001065r 1 D5 .lobytes 0FD5h -001066r 1 D6 .lobytes 0FD6h -001067r 1 D7 .lobytes 0FD7h -001068r 1 D8 .lobytes 0FD8h -001069r 1 D9 .lobytes 0FD9h -00106Ar 1 DA .lobytes 0FDAh -00106Br 1 DB .lobytes 0FDBh -00106Cr 1 DC .lobytes 0FDCh -00106Dr 1 DD .lobytes 0FDDh -00106Er 1 DE .lobytes 0FDEh -00106Fr 1 DF .lobytes 0FDFh -001070r 1 E0 .lobytes 0FE0h -001071r 1 E1 .lobytes 0FE1h -001072r 1 E2 .lobytes 0FE2h -001073r 1 E3 .lobytes 0FE3h -001074r 1 E4 .lobytes 0FE4h -001075r 1 E5 .lobytes 0FE5h -001076r 1 E6 .lobytes 0FE6h -001077r 1 E7 .lobytes 0FE7h -001078r 1 E8 .lobytes 0FE8h -001079r 1 E9 .lobytes 0FE9h -00107Ar 1 EA .lobytes 0FEAh -00107Br 1 EB .lobytes 0FEBh -00107Cr 1 EC .lobytes 0FECh -00107Dr 1 ED .lobytes 0FEDh -00107Er 1 EE .lobytes 0FEEh -00107Fr 1 EF .lobytes 0FEFh -001080r 1 F0 .lobytes 0FF0h -001081r 1 F1 .lobytes 0FF1h -001082r 1 F2 .lobytes 0FF2h -001083r 1 F3 .lobytes 0FF3h -001084r 1 F4 .lobytes 0FF4h -001085r 1 F5 .lobytes 0FF5h -001086r 1 F6 .lobytes 0FF6h -001087r 1 F7 .lobytes 0FF7h -001088r 1 F8 .lobytes 0FF8h -001089r 1 F9 .lobytes 0FF9h -00108Ar 1 FA .lobytes 0FFAh -00108Br 1 FB .lobytes 0FFBh -00108Cr 1 FC .lobytes 0FFCh -00108Dr 1 FD .lobytes 0FFDh -00108Er 1 FE .lobytes 0FFEh -00108Fr 1 FF .lobytes 0FFFh -001090r 1 00 .lobytes 1000h -001091r 1 01 .lobytes 1001h -001092r 1 02 .lobytes 1002h -001093r 1 03 .lobytes 1003h -001094r 1 04 .lobytes 1004h -001095r 1 05 .lobytes 1005h -001096r 1 06 .lobytes 1006h -001097r 1 07 .lobytes 1007h -001098r 1 08 .lobytes 1008h -001099r 1 F0 .lobytes 7FF0h -00109Ar 1 F1 .lobytes 7FF1h -00109Br 1 F2 .lobytes 7FF2h -00109Cr 1 F3 .lobytes 7FF3h -00109Dr 1 F4 .lobytes 7FF4h -00109Er 1 F5 .lobytes 7FF5h -00109Fr 1 F6 .lobytes 7FF6h -0010A0r 1 F7 .lobytes 7FF7h -0010A1r 1 F8 .lobytes 7FF8h -0010A2r 1 F9 .lobytes 7FF9h -0010A3r 1 FA .lobytes 7FFAh -0010A4r 1 FB .lobytes 7FFBh -0010A5r 1 FC .lobytes 7FFCh -0010A6r 1 FD .lobytes 7FFDh -0010A7r 1 FE .lobytes 7FFEh -0010A8r 1 FF .lobytes 7FFFh -0010A9r 1 00 .lobytes 8000h -0010AAr 1 01 .lobytes 8001h -0010ABr 1 02 .lobytes 8002h -0010ACr 1 03 .lobytes 8003h -0010ADr 1 04 .lobytes 8004h -0010AEr 1 05 .lobytes 8005h -0010AFr 1 06 .lobytes 8006h -0010B0r 1 07 .lobytes 8007h -0010B1r 1 08 .lobytes 8008h -0010B2r 1 09 .lobytes 8009h -0010B3r 1 0A .lobytes 800Ah -0010B4r 1 0B .lobytes 800Bh -0010B5r 1 E1 .lobytes 9FE1h -0010B6r 1 E2 .lobytes 9FE2h -0010B7r 1 E3 .lobytes 9FE3h -0010B8r 1 E4 .lobytes 9FE4h -0010B9r 1 E5 .lobytes 9FE5h -0010BAr 1 E6 .lobytes 9FE6h -0010BBr 1 E7 .lobytes 9FE7h -0010BCr 1 E8 .lobytes 9FE8h -0010BDr 1 E9 .lobytes 9FE9h -0010BEr 1 EA .lobytes 9FEAh -0010BFr 1 EB .lobytes 9FEBh -0010C0r 1 EC .lobytes 9FECh -0010C1r 1 ED .lobytes 9FEDh -0010C2r 1 EE .lobytes 9FEEh -0010C3r 1 EF .lobytes 9FEFh -0010C4r 1 F0 .lobytes 9FF0h -0010C5r 1 F1 .lobytes 9FF1h -0010C6r 1 F2 .lobytes 9FF2h -0010C7r 1 F3 .lobytes 9FF3h -0010C8r 1 F4 .lobytes 9FF4h -0010C9r 1 F5 .lobytes 9FF5h -0010CAr 1 F6 .lobytes 9FF6h -0010CBr 1 F7 .lobytes 9FF7h -0010CCr 1 F8 .lobytes 9FF8h -0010CDr 1 F9 .lobytes 9FF9h -0010CEr 1 FA .lobytes 9FFAh -0010CFr 1 FB .lobytes 9FFBh -0010D0r 1 FC .lobytes 9FFCh -0010D1r 1 FD .lobytes 9FFDh -0010D2r 1 FE .lobytes 9FFEh -0010D3r 1 FF .lobytes 9FFFh -0010D4r 1 00 .lobytes 0A000h -0010D5r 1 01 .lobytes 0A001h -0010D6r 1 02 .lobytes 0A002h -0010D7r 1 03 .lobytes 0A003h -0010D8r 1 04 .lobytes 0A004h -0010D9r 1 05 .lobytes 0A005h -0010DAr 1 06 .lobytes 0A006h -0010DBr 1 07 .lobytes 0A007h -0010DCr 1 08 .lobytes 0A008h -0010DDr 1 09 .lobytes 0A009h -0010DEr 1 0A .lobytes 0A00Ah -0010DFr 1 0B .lobytes 0A00Bh -0010E0r 1 0C .lobytes 0A00Ch -0010E1r 1 0D .lobytes 0A00Dh -0010E2r 1 0E .lobytes 0A00Eh -0010E3r 1 0F .lobytes 0A00Fh -0010E4r 1 E1 .lobytes 0AFE1h -0010E5r 1 E2 .lobytes 0AFE2h -0010E6r 1 E3 .lobytes 0AFE3h -0010E7r 1 E4 .lobytes 0AFE4h -0010E8r 1 E5 .lobytes 0AFE5h -0010E9r 1 E6 .lobytes 0AFE6h -0010EAr 1 E7 .lobytes 0AFE7h -0010EBr 1 E8 .lobytes 0AFE8h -0010ECr 1 E9 .lobytes 0AFE9h -0010EDr 1 EA .lobytes 0AFEAh -0010EEr 1 EB .lobytes 0AFEBh -0010EFr 1 EC .lobytes 0AFECh -0010F0r 1 ED .lobytes 0AFEDh -0010F1r 1 EE .lobytes 0AFEEh -0010F2r 1 EF .lobytes 0AFEFh -0010F3r 1 F0 .lobytes 0AFF0h -0010F4r 1 F1 .lobytes 0AFF1h -0010F5r 1 F2 .lobytes 0AFF2h -0010F6r 1 F3 .lobytes 0AFF3h -0010F7r 1 F4 .lobytes 0AFF4h -0010F8r 1 F5 .lobytes 0AFF5h -0010F9r 1 F6 .lobytes 0AFF6h -0010FAr 1 F7 .lobytes 0AFF7h -0010FBr 1 F8 .lobytes 0AFF8h -0010FCr 1 F9 .lobytes 0AFF9h -0010FDr 1 FA .lobytes 0AFFAh -0010FEr 1 FB .lobytes 0AFFBh -0010FFr 1 FC .lobytes 0AFFCh -001100r 1 FD .lobytes 0AFFDh -001101r 1 FE .lobytes 0AFFEh -001102r 1 FF .lobytes 0AFFFh -001103r 1 00 .lobytes 0B000h -001104r 1 01 .lobytes 0B001h -001105r 1 02 .lobytes 0B002h -001106r 1 03 .lobytes 0B003h -001107r 1 04 .lobytes 0B004h -001108r 1 05 .lobytes 0B005h -001109r 1 06 .lobytes 0B006h -00110Ar 1 07 .lobytes 0B007h -00110Br 1 08 .lobytes 0B008h -00110Cr 1 09 .lobytes 0B009h -00110Dr 1 0A .lobytes 0B00Ah -00110Er 1 0B .lobytes 0B00Bh -00110Fr 1 0C .lobytes 0B00Ch -001110r 1 0D .lobytes 0B00Dh -001111r 1 0E .lobytes 0B00Eh -001112r 1 0F .lobytes 0B00Fh -001113r 1 E1 .lobytes 0BFE1h -001114r 1 E2 .lobytes 0BFE2h -001115r 1 E3 .lobytes 0BFE3h -001116r 1 E4 .lobytes 0BFE4h -001117r 1 E5 .lobytes 0BFE5h -001118r 1 E6 .lobytes 0BFE6h -001119r 1 E7 .lobytes 0BFE7h -00111Ar 1 E8 .lobytes 0BFE8h -00111Br 1 E9 .lobytes 0BFE9h -00111Cr 1 EA .lobytes 0BFEAh -00111Dr 1 EB .lobytes 0BFEBh -00111Er 1 EC .lobytes 0BFECh -00111Fr 1 ED .lobytes 0BFEDh -001120r 1 EE .lobytes 0BFEEh -001121r 1 EF .lobytes 0BFEFh -001122r 1 F0 .lobytes 0BFF0h -001123r 1 F1 .lobytes 0BFF1h -001124r 1 F2 .lobytes 0BFF2h -001125r 1 F3 .lobytes 0BFF3h -001126r 1 F4 .lobytes 0BFF4h -001127r 1 F5 .lobytes 0BFF5h -001128r 1 F6 .lobytes 0BFF6h -001129r 1 F7 .lobytes 0BFF7h -00112Ar 1 F8 .lobytes 0BFF8h -00112Br 1 F9 .lobytes 0BFF9h -00112Cr 1 FA .lobytes 0BFFAh -00112Dr 1 FB .lobytes 0BFFBh -00112Er 1 FC .lobytes 0BFFCh -00112Fr 1 FD .lobytes 0BFFDh -001130r 1 FE .lobytes 0BFFEh -001131r 1 FF .lobytes 0BFFFh -001132r 1 00 .lobytes 0C000h -001133r 1 01 .lobytes 0C001h -001134r 1 02 .lobytes 0C002h -001135r 1 03 .lobytes 0C003h -001136r 1 04 .lobytes 0C004h -001137r 1 05 .lobytes 0C005h -001138r 1 06 .lobytes 0C006h -001139r 1 07 .lobytes 0C007h -00113Ar 1 08 .lobytes 0C008h -00113Br 1 09 .lobytes 0C009h -00113Cr 1 0A .lobytes 0C00Ah -00113Dr 1 0B .lobytes 0C00Bh -00113Er 1 0C .lobytes 0C00Ch -00113Fr 1 0D .lobytes 0C00Dh -001140r 1 0E .lobytes 0C00Eh -001141r 1 0F .lobytes 0C00Fh -001142r 1 E1 .lobytes 0CFE1h -001143r 1 E2 .lobytes 0CFE2h -001144r 1 E3 .lobytes 0CFE3h -001145r 1 E4 .lobytes 0CFE4h -001146r 1 E5 .lobytes 0CFE5h -001147r 1 E6 .lobytes 0CFE6h -001148r 1 E7 .lobytes 0CFE7h -001149r 1 E8 .lobytes 0CFE8h -00114Ar 1 E9 .lobytes 0CFE9h -00114Br 1 EA .lobytes 0CFEAh -00114Cr 1 EB .lobytes 0CFEBh -00114Dr 1 EC .lobytes 0CFECh -00114Er 1 ED .lobytes 0CFEDh -00114Fr 1 EE .lobytes 0CFEEh -001150r 1 EF .lobytes 0CFEFh -001151r 1 F0 .lobytes 0CFF0h -001152r 1 F1 .lobytes 0CFF1h -001153r 1 F2 .lobytes 0CFF2h -001154r 1 F3 .lobytes 0CFF3h -001155r 1 F4 .lobytes 0CFF4h -001156r 1 F5 .lobytes 0CFF5h -001157r 1 F6 .lobytes 0CFF6h -001158r 1 F7 .lobytes 0CFF7h -001159r 1 F8 .lobytes 0CFF8h -00115Ar 1 F9 .lobytes 0CFF9h -00115Br 1 FA .lobytes 0CFFAh -00115Cr 1 FB .lobytes 0CFFBh -00115Dr 1 FC .lobytes 0CFFCh -00115Er 1 FD .lobytes 0CFFDh -00115Fr 1 FE .lobytes 0CFFEh -001160r 1 FF .lobytes 0CFFFh -001161r 1 00 .lobytes 0D000h -001162r 1 01 .lobytes 0D001h -001163r 1 02 .lobytes 0D002h -001164r 1 03 .lobytes 0D003h -001165r 1 04 .lobytes 0D004h -001166r 1 05 .lobytes 0D005h -001167r 1 06 .lobytes 0D006h -001168r 1 07 .lobytes 0D007h -001169r 1 08 .lobytes 0D008h -00116Ar 1 09 .lobytes 0D009h -00116Br 1 0A .lobytes 0D00Ah -00116Cr 1 0B .lobytes 0D00Bh -00116Dr 1 0C .lobytes 0D00Ch -00116Er 1 0D .lobytes 0D00Dh -00116Fr 1 0E .lobytes 0D00Eh -001170r 1 0F .lobytes 0D00Fh -001171r 1 E1 .lobytes 0DFE1h -001172r 1 E2 .lobytes 0DFE2h -001173r 1 E3 .lobytes 0DFE3h -001174r 1 E4 .lobytes 0DFE4h -001175r 1 E5 .lobytes 0DFE5h -001176r 1 E6 .lobytes 0DFE6h -001177r 1 E7 .lobytes 0DFE7h -001178r 1 E8 .lobytes 0DFE8h -001179r 1 E9 .lobytes 0DFE9h -00117Ar 1 EA .lobytes 0DFEAh -00117Br 1 EB .lobytes 0DFEBh -00117Cr 1 EC .lobytes 0DFECh -00117Dr 1 ED .lobytes 0DFEDh -00117Er 1 EE .lobytes 0DFEEh -00117Fr 1 EF .lobytes 0DFEFh -001180r 1 F0 .lobytes 0DFF0h -001181r 1 F1 .lobytes 0DFF1h -001182r 1 F2 .lobytes 0DFF2h -001183r 1 F3 .lobytes 0DFF3h -001184r 1 F4 .lobytes 0DFF4h -001185r 1 F5 .lobytes 0DFF5h -001186r 1 F6 .lobytes 0DFF6h -001187r 1 F7 .lobytes 0DFF7h -001188r 1 F8 .lobytes 0DFF8h -001189r 1 F9 .lobytes 0DFF9h -00118Ar 1 FA .lobytes 0DFFAh -00118Br 1 FB .lobytes 0DFFBh -00118Cr 1 FC .lobytes 0DFFCh -00118Dr 1 FD .lobytes 0DFFDh -00118Er 1 FE .lobytes 0DFFEh -00118Fr 1 FF .lobytes 0DFFFh -001190r 1 00 .lobytes 0E000h -001191r 1 01 .lobytes 0E001h -001192r 1 02 .lobytes 0E002h -001193r 1 03 .lobytes 0E003h -001194r 1 04 .lobytes 0E004h -001195r 1 05 .lobytes 0E005h -001196r 1 06 .lobytes 0E006h -001197r 1 07 .lobytes 0E007h -001198r 1 08 .lobytes 0E008h -001199r 1 09 .lobytes 0E009h -00119Ar 1 0A .lobytes 0E00Ah -00119Br 1 0B .lobytes 0E00Bh -00119Cr 1 0C .lobytes 0E00Ch -00119Dr 1 0D .lobytes 0E00Dh -00119Er 1 0E .lobytes 0E00Eh -00119Fr 1 0F .lobytes 0E00Fh -0011A0r 1 E1 .lobytes 0EFE1h -0011A1r 1 E2 .lobytes 0EFE2h -0011A2r 1 E3 .lobytes 0EFE3h -0011A3r 1 E4 .lobytes 0EFE4h -0011A4r 1 E5 .lobytes 0EFE5h -0011A5r 1 E6 .lobytes 0EFE6h -0011A6r 1 E7 .lobytes 0EFE7h -0011A7r 1 E8 .lobytes 0EFE8h -0011A8r 1 E9 .lobytes 0EFE9h -0011A9r 1 EA .lobytes 0EFEAh -0011AAr 1 EB .lobytes 0EFEBh -0011ABr 1 EC .lobytes 0EFECh -0011ACr 1 ED .lobytes 0EFEDh -0011ADr 1 EE .lobytes 0EFEEh -0011AEr 1 EF .lobytes 0EFEFh -0011AFr 1 F0 .lobytes 0EFF0h -0011B0r 1 F1 .lobytes 0EFF1h -0011B1r 1 F2 .lobytes 0EFF2h -0011B2r 1 F3 .lobytes 0EFF3h -0011B3r 1 F4 .lobytes 0EFF4h -0011B4r 1 F5 .lobytes 0EFF5h -0011B5r 1 F6 .lobytes 0EFF6h -0011B6r 1 F7 .lobytes 0EFF7h -0011B7r 1 F8 .lobytes 0EFF8h -0011B8r 1 F9 .lobytes 0EFF9h -0011B9r 1 FA .lobytes 0EFFAh -0011BAr 1 FB .lobytes 0EFFBh -0011BBr 1 FC .lobytes 0EFFCh -0011BCr 1 FD .lobytes 0EFFDh -0011BDr 1 FE .lobytes 0EFFEh -0011BEr 1 FF .lobytes 0EFFFh -0011BFr 1 00 .lobytes 0F000h -0011C0r 1 01 .lobytes 0F001h -0011C1r 1 02 .lobytes 0F002h -0011C2r 1 03 .lobytes 0F003h -0011C3r 1 04 .lobytes 0F004h -0011C4r 1 05 .lobytes 0F005h -0011C5r 1 06 .lobytes 0F006h -0011C6r 1 07 .lobytes 0F007h -0011C7r 1 08 .lobytes 0F008h -0011C8r 1 09 .lobytes 0F009h -0011C9r 1 0A .lobytes 0F00Ah -0011CAr 1 0B .lobytes 0F00Bh -0011CBr 1 0C .lobytes 0F00Ch -0011CCr 1 0D .lobytes 0F00Dh -0011CDr 1 0E .lobytes 0F00Eh -0011CEr 1 0F .lobytes 0F00Fh -0011CFr 1 E1 .lobytes 0FFE1h -0011D0r 1 E2 .lobytes 0FFE2h -0011D1r 1 E3 .lobytes 0FFE3h -0011D2r 1 E4 .lobytes 0FFE4h -0011D3r 1 E5 .lobytes 0FFE5h -0011D4r 1 E6 .lobytes 0FFE6h -0011D5r 1 E7 .lobytes 0FFE7h -0011D6r 1 E8 .lobytes 0FFE8h -0011D7r 1 E9 .lobytes 0FFE9h -0011D8r 1 EA .lobytes 0FFEAh -0011D9r 1 EB .lobytes 0FFEBh -0011DAr 1 EC .lobytes 0FFECh -0011DBr 1 ED .lobytes 0FFEDh -0011DCr 1 EE .lobytes 0FFEEh -0011DDr 1 EF .lobytes 0FFEFh -0011DEr 1 F0 .lobytes 0FFF0h -0011DFr 1 F1 .lobytes 0FFF1h -0011E0r 1 F2 .lobytes 0FFF2h -0011E1r 1 F3 .lobytes 0FFF3h -0011E2r 1 F4 .lobytes 0FFF4h -0011E3r 1 F5 .lobytes 0FFF5h -0011E4r 1 F6 .lobytes 0FFF6h -0011E5r 1 F7 .lobytes 0FFF7h -0011E6r 1 F8 .lobytes 0FFF8h -0011E7r 1 F9 .lobytes 0FFF9h -0011E8r 1 FA .lobytes 0FFFAh -0011E9r 1 FB .lobytes 0FFFBh -0011EAr 1 FC .lobytes 0FFFCh -0011EBr 1 FD .lobytes 0FFFDh -0011ECr 1 FE .lobytes 0FFFEh -0011EDr 1 FF .lobytes 0FFFFh +001023r 1 ; alternative 4-digit hex values, uppercase +001023r 1 00 .lobytes 0000h +001024r 1 01 .lobytes 0001h +001025r 1 02 .lobytes 0002h +001026r 1 03 .lobytes 0003h +001027r 1 04 .lobytes 0004h +001028r 1 05 .lobytes 0005h +001029r 1 06 .lobytes 0006h +00102Ar 1 07 .lobytes 0007h +00102Br 1 08 .lobytes 0008h +00102Cr 1 09 .lobytes 0009h +00102Dr 1 0A .lobytes 000Ah +00102Er 1 0B .lobytes 000Bh +00102Fr 1 0C .lobytes 000Ch +001030r 1 0D .lobytes 000Dh +001031r 1 0E .lobytes 000Eh +001032r 1 0F .lobytes 000Fh +001033r 1 10 .lobytes 0010h +001034r 1 11 .lobytes 0011h +001035r 1 12 .lobytes 0012h +001036r 1 13 .lobytes 0013h +001037r 1 70 .lobytes 0070h +001038r 1 71 .lobytes 0071h +001039r 1 72 .lobytes 0072h +00103Ar 1 73 .lobytes 0073h +00103Br 1 74 .lobytes 0074h +00103Cr 1 75 .lobytes 0075h +00103Dr 1 76 .lobytes 0076h +00103Er 1 77 .lobytes 0077h +00103Fr 1 78 .lobytes 0078h +001040r 1 79 .lobytes 0079h +001041r 1 7A .lobytes 007Ah +001042r 1 7B .lobytes 007Bh +001043r 1 7C .lobytes 007Ch +001044r 1 7D .lobytes 007Dh +001045r 1 7E .lobytes 007Eh +001046r 1 7F .lobytes 007Fh +001047r 1 80 .lobytes 0080h +001048r 1 81 .lobytes 0081h +001049r 1 82 .lobytes 0082h +00104Ar 1 83 .lobytes 0083h +00104Br 1 84 .lobytes 0084h +00104Cr 1 85 .lobytes 0085h +00104Dr 1 86 .lobytes 0086h +00104Er 1 F0 .lobytes 00F0h +00104Fr 1 F1 .lobytes 00F1h +001050r 1 F2 .lobytes 00F2h +001051r 1 F3 .lobytes 00F3h +001052r 1 F4 .lobytes 00F4h +001053r 1 F5 .lobytes 00F5h +001054r 1 F6 .lobytes 00F6h +001055r 1 F7 .lobytes 00F7h +001056r 1 F8 .lobytes 00F8h +001057r 1 F9 .lobytes 00F9h +001058r 1 FA .lobytes 00FAh +001059r 1 FB .lobytes 00FBh +00105Ar 1 FC .lobytes 00FCh +00105Br 1 FD .lobytes 00FDh +00105Cr 1 FE .lobytes 00FEh +00105Dr 1 FF .lobytes 00FFh +00105Er 1 00 .lobytes 0100h +00105Fr 1 01 .lobytes 0101h +001060r 1 02 .lobytes 0102h +001061r 1 03 .lobytes 0103h +001062r 1 D2 .lobytes 0FD2h +001063r 1 D3 .lobytes 0FD3h +001064r 1 D4 .lobytes 0FD4h +001065r 1 D5 .lobytes 0FD5h +001066r 1 D6 .lobytes 0FD6h +001067r 1 D7 .lobytes 0FD7h +001068r 1 D8 .lobytes 0FD8h +001069r 1 D9 .lobytes 0FD9h +00106Ar 1 DA .lobytes 0FDAh +00106Br 1 DB .lobytes 0FDBh +00106Cr 1 DC .lobytes 0FDCh +00106Dr 1 DD .lobytes 0FDDh +00106Er 1 DE .lobytes 0FDEh +00106Fr 1 DF .lobytes 0FDFh +001070r 1 E0 .lobytes 0FE0h +001071r 1 E1 .lobytes 0FE1h +001072r 1 E2 .lobytes 0FE2h +001073r 1 E3 .lobytes 0FE3h +001074r 1 E4 .lobytes 0FE4h +001075r 1 E5 .lobytes 0FE5h +001076r 1 E6 .lobytes 0FE6h +001077r 1 E7 .lobytes 0FE7h +001078r 1 E8 .lobytes 0FE8h +001079r 1 E9 .lobytes 0FE9h +00107Ar 1 EA .lobytes 0FEAh +00107Br 1 EB .lobytes 0FEBh +00107Cr 1 EC .lobytes 0FECh +00107Dr 1 ED .lobytes 0FEDh +00107Er 1 EE .lobytes 0FEEh +00107Fr 1 EF .lobytes 0FEFh +001080r 1 F0 .lobytes 0FF0h +001081r 1 F1 .lobytes 0FF1h +001082r 1 F2 .lobytes 0FF2h +001083r 1 F3 .lobytes 0FF3h +001084r 1 F4 .lobytes 0FF4h +001085r 1 F5 .lobytes 0FF5h +001086r 1 F6 .lobytes 0FF6h +001087r 1 F7 .lobytes 0FF7h +001088r 1 F8 .lobytes 0FF8h +001089r 1 F9 .lobytes 0FF9h +00108Ar 1 FA .lobytes 0FFAh +00108Br 1 FB .lobytes 0FFBh +00108Cr 1 FC .lobytes 0FFCh +00108Dr 1 FD .lobytes 0FFDh +00108Er 1 FE .lobytes 0FFEh +00108Fr 1 FF .lobytes 0FFFh +001090r 1 00 .lobytes 1000h +001091r 1 01 .lobytes 1001h +001092r 1 02 .lobytes 1002h +001093r 1 03 .lobytes 1003h +001094r 1 04 .lobytes 1004h +001095r 1 05 .lobytes 1005h +001096r 1 06 .lobytes 1006h +001097r 1 07 .lobytes 1007h +001098r 1 08 .lobytes 1008h +001099r 1 F0 .lobytes 7FF0h +00109Ar 1 F1 .lobytes 7FF1h +00109Br 1 F2 .lobytes 7FF2h +00109Cr 1 F3 .lobytes 7FF3h +00109Dr 1 F4 .lobytes 7FF4h +00109Er 1 F5 .lobytes 7FF5h +00109Fr 1 F6 .lobytes 7FF6h +0010A0r 1 F7 .lobytes 7FF7h +0010A1r 1 F8 .lobytes 7FF8h +0010A2r 1 F9 .lobytes 7FF9h +0010A3r 1 FA .lobytes 7FFAh +0010A4r 1 FB .lobytes 7FFBh +0010A5r 1 FC .lobytes 7FFCh +0010A6r 1 FD .lobytes 7FFDh +0010A7r 1 FE .lobytes 7FFEh +0010A8r 1 FF .lobytes 7FFFh +0010A9r 1 00 .lobytes 8000h +0010AAr 1 01 .lobytes 8001h +0010ABr 1 02 .lobytes 8002h +0010ACr 1 03 .lobytes 8003h +0010ADr 1 04 .lobytes 8004h +0010AEr 1 05 .lobytes 8005h +0010AFr 1 06 .lobytes 8006h +0010B0r 1 07 .lobytes 8007h +0010B1r 1 08 .lobytes 8008h +0010B2r 1 09 .lobytes 8009h +0010B3r 1 0A .lobytes 800Ah +0010B4r 1 0B .lobytes 800Bh +0010B5r 1 E1 .lobytes 9FE1h +0010B6r 1 E2 .lobytes 9FE2h +0010B7r 1 E3 .lobytes 9FE3h +0010B8r 1 E4 .lobytes 9FE4h +0010B9r 1 E5 .lobytes 9FE5h +0010BAr 1 E6 .lobytes 9FE6h +0010BBr 1 E7 .lobytes 9FE7h +0010BCr 1 E8 .lobytes 9FE8h +0010BDr 1 E9 .lobytes 9FE9h +0010BEr 1 EA .lobytes 9FEAh +0010BFr 1 EB .lobytes 9FEBh +0010C0r 1 EC .lobytes 9FECh +0010C1r 1 ED .lobytes 9FEDh +0010C2r 1 EE .lobytes 9FEEh +0010C3r 1 EF .lobytes 9FEFh +0010C4r 1 F0 .lobytes 9FF0h +0010C5r 1 F1 .lobytes 9FF1h +0010C6r 1 F2 .lobytes 9FF2h +0010C7r 1 F3 .lobytes 9FF3h +0010C8r 1 F4 .lobytes 9FF4h +0010C9r 1 F5 .lobytes 9FF5h +0010CAr 1 F6 .lobytes 9FF6h +0010CBr 1 F7 .lobytes 9FF7h +0010CCr 1 F8 .lobytes 9FF8h +0010CDr 1 F9 .lobytes 9FF9h +0010CEr 1 FA .lobytes 9FFAh +0010CFr 1 FB .lobytes 9FFBh +0010D0r 1 FC .lobytes 9FFCh +0010D1r 1 FD .lobytes 9FFDh +0010D2r 1 FE .lobytes 9FFEh +0010D3r 1 FF .lobytes 9FFFh +0010D4r 1 00 .lobytes 0A000h +0010D5r 1 01 .lobytes 0A001h +0010D6r 1 02 .lobytes 0A002h +0010D7r 1 03 .lobytes 0A003h +0010D8r 1 04 .lobytes 0A004h +0010D9r 1 05 .lobytes 0A005h +0010DAr 1 06 .lobytes 0A006h +0010DBr 1 07 .lobytes 0A007h +0010DCr 1 08 .lobytes 0A008h +0010DDr 1 09 .lobytes 0A009h +0010DEr 1 0A .lobytes 0A00Ah +0010DFr 1 0B .lobytes 0A00Bh +0010E0r 1 0C .lobytes 0A00Ch +0010E1r 1 0D .lobytes 0A00Dh +0010E2r 1 0E .lobytes 0A00Eh +0010E3r 1 0F .lobytes 0A00Fh +0010E4r 1 E1 .lobytes 0AFE1h +0010E5r 1 E2 .lobytes 0AFE2h +0010E6r 1 E3 .lobytes 0AFE3h +0010E7r 1 E4 .lobytes 0AFE4h +0010E8r 1 E5 .lobytes 0AFE5h +0010E9r 1 E6 .lobytes 0AFE6h +0010EAr 1 E7 .lobytes 0AFE7h +0010EBr 1 E8 .lobytes 0AFE8h +0010ECr 1 E9 .lobytes 0AFE9h +0010EDr 1 EA .lobytes 0AFEAh +0010EEr 1 EB .lobytes 0AFEBh +0010EFr 1 EC .lobytes 0AFECh +0010F0r 1 ED .lobytes 0AFEDh +0010F1r 1 EE .lobytes 0AFEEh +0010F2r 1 EF .lobytes 0AFEFh +0010F3r 1 F0 .lobytes 0AFF0h +0010F4r 1 F1 .lobytes 0AFF1h +0010F5r 1 F2 .lobytes 0AFF2h +0010F6r 1 F3 .lobytes 0AFF3h +0010F7r 1 F4 .lobytes 0AFF4h +0010F8r 1 F5 .lobytes 0AFF5h +0010F9r 1 F6 .lobytes 0AFF6h +0010FAr 1 F7 .lobytes 0AFF7h +0010FBr 1 F8 .lobytes 0AFF8h +0010FCr 1 F9 .lobytes 0AFF9h +0010FDr 1 FA .lobytes 0AFFAh +0010FEr 1 FB .lobytes 0AFFBh +0010FFr 1 FC .lobytes 0AFFCh +001100r 1 FD .lobytes 0AFFDh +001101r 1 FE .lobytes 0AFFEh +001102r 1 FF .lobytes 0AFFFh +001103r 1 00 .lobytes 0B000h +001104r 1 01 .lobytes 0B001h +001105r 1 02 .lobytes 0B002h +001106r 1 03 .lobytes 0B003h +001107r 1 04 .lobytes 0B004h +001108r 1 05 .lobytes 0B005h +001109r 1 06 .lobytes 0B006h +00110Ar 1 07 .lobytes 0B007h +00110Br 1 08 .lobytes 0B008h +00110Cr 1 09 .lobytes 0B009h +00110Dr 1 0A .lobytes 0B00Ah +00110Er 1 0B .lobytes 0B00Bh +00110Fr 1 0C .lobytes 0B00Ch +001110r 1 0D .lobytes 0B00Dh +001111r 1 0E .lobytes 0B00Eh +001112r 1 0F .lobytes 0B00Fh +001113r 1 E1 .lobytes 0BFE1h +001114r 1 E2 .lobytes 0BFE2h +001115r 1 E3 .lobytes 0BFE3h +001116r 1 E4 .lobytes 0BFE4h +001117r 1 E5 .lobytes 0BFE5h +001118r 1 E6 .lobytes 0BFE6h +001119r 1 E7 .lobytes 0BFE7h +00111Ar 1 E8 .lobytes 0BFE8h +00111Br 1 E9 .lobytes 0BFE9h +00111Cr 1 EA .lobytes 0BFEAh +00111Dr 1 EB .lobytes 0BFEBh +00111Er 1 EC .lobytes 0BFECh +00111Fr 1 ED .lobytes 0BFEDh +001120r 1 EE .lobytes 0BFEEh +001121r 1 EF .lobytes 0BFEFh +001122r 1 F0 .lobytes 0BFF0h +001123r 1 F1 .lobytes 0BFF1h +001124r 1 F2 .lobytes 0BFF2h +001125r 1 F3 .lobytes 0BFF3h +001126r 1 F4 .lobytes 0BFF4h +001127r 1 F5 .lobytes 0BFF5h +001128r 1 F6 .lobytes 0BFF6h +001129r 1 F7 .lobytes 0BFF7h +00112Ar 1 F8 .lobytes 0BFF8h +00112Br 1 F9 .lobytes 0BFF9h +00112Cr 1 FA .lobytes 0BFFAh +00112Dr 1 FB .lobytes 0BFFBh +00112Er 1 FC .lobytes 0BFFCh +00112Fr 1 FD .lobytes 0BFFDh +001130r 1 FE .lobytes 0BFFEh +001131r 1 FF .lobytes 0BFFFh +001132r 1 00 .lobytes 0C000h +001133r 1 01 .lobytes 0C001h +001134r 1 02 .lobytes 0C002h +001135r 1 03 .lobytes 0C003h +001136r 1 04 .lobytes 0C004h +001137r 1 05 .lobytes 0C005h +001138r 1 06 .lobytes 0C006h +001139r 1 07 .lobytes 0C007h +00113Ar 1 08 .lobytes 0C008h +00113Br 1 09 .lobytes 0C009h +00113Cr 1 0A .lobytes 0C00Ah +00113Dr 1 0B .lobytes 0C00Bh +00113Er 1 0C .lobytes 0C00Ch +00113Fr 1 0D .lobytes 0C00Dh +001140r 1 0E .lobytes 0C00Eh +001141r 1 0F .lobytes 0C00Fh +001142r 1 E1 .lobytes 0CFE1h +001143r 1 E2 .lobytes 0CFE2h +001144r 1 E3 .lobytes 0CFE3h +001145r 1 E4 .lobytes 0CFE4h +001146r 1 E5 .lobytes 0CFE5h +001147r 1 E6 .lobytes 0CFE6h +001148r 1 E7 .lobytes 0CFE7h +001149r 1 E8 .lobytes 0CFE8h +00114Ar 1 E9 .lobytes 0CFE9h +00114Br 1 EA .lobytes 0CFEAh +00114Cr 1 EB .lobytes 0CFEBh +00114Dr 1 EC .lobytes 0CFECh +00114Er 1 ED .lobytes 0CFEDh +00114Fr 1 EE .lobytes 0CFEEh +001150r 1 EF .lobytes 0CFEFh +001151r 1 F0 .lobytes 0CFF0h +001152r 1 F1 .lobytes 0CFF1h +001153r 1 F2 .lobytes 0CFF2h +001154r 1 F3 .lobytes 0CFF3h +001155r 1 F4 .lobytes 0CFF4h +001156r 1 F5 .lobytes 0CFF5h +001157r 1 F6 .lobytes 0CFF6h +001158r 1 F7 .lobytes 0CFF7h +001159r 1 F8 .lobytes 0CFF8h +00115Ar 1 F9 .lobytes 0CFF9h +00115Br 1 FA .lobytes 0CFFAh +00115Cr 1 FB .lobytes 0CFFBh +00115Dr 1 FC .lobytes 0CFFCh +00115Er 1 FD .lobytes 0CFFDh +00115Fr 1 FE .lobytes 0CFFEh +001160r 1 FF .lobytes 0CFFFh +001161r 1 00 .lobytes 0D000h +001162r 1 01 .lobytes 0D001h +001163r 1 02 .lobytes 0D002h +001164r 1 03 .lobytes 0D003h +001165r 1 04 .lobytes 0D004h +001166r 1 05 .lobytes 0D005h +001167r 1 06 .lobytes 0D006h +001168r 1 07 .lobytes 0D007h +001169r 1 08 .lobytes 0D008h +00116Ar 1 09 .lobytes 0D009h +00116Br 1 0A .lobytes 0D00Ah +00116Cr 1 0B .lobytes 0D00Bh +00116Dr 1 0C .lobytes 0D00Ch +00116Er 1 0D .lobytes 0D00Dh +00116Fr 1 0E .lobytes 0D00Eh +001170r 1 0F .lobytes 0D00Fh +001171r 1 E1 .lobytes 0DFE1h +001172r 1 E2 .lobytes 0DFE2h +001173r 1 E3 .lobytes 0DFE3h +001174r 1 E4 .lobytes 0DFE4h +001175r 1 E5 .lobytes 0DFE5h +001176r 1 E6 .lobytes 0DFE6h +001177r 1 E7 .lobytes 0DFE7h +001178r 1 E8 .lobytes 0DFE8h +001179r 1 E9 .lobytes 0DFE9h +00117Ar 1 EA .lobytes 0DFEAh +00117Br 1 EB .lobytes 0DFEBh +00117Cr 1 EC .lobytes 0DFECh +00117Dr 1 ED .lobytes 0DFEDh +00117Er 1 EE .lobytes 0DFEEh +00117Fr 1 EF .lobytes 0DFEFh +001180r 1 F0 .lobytes 0DFF0h +001181r 1 F1 .lobytes 0DFF1h +001182r 1 F2 .lobytes 0DFF2h +001183r 1 F3 .lobytes 0DFF3h +001184r 1 F4 .lobytes 0DFF4h +001185r 1 F5 .lobytes 0DFF5h +001186r 1 F6 .lobytes 0DFF6h +001187r 1 F7 .lobytes 0DFF7h +001188r 1 F8 .lobytes 0DFF8h +001189r 1 F9 .lobytes 0DFF9h +00118Ar 1 FA .lobytes 0DFFAh +00118Br 1 FB .lobytes 0DFFBh +00118Cr 1 FC .lobytes 0DFFCh +00118Dr 1 FD .lobytes 0DFFDh +00118Er 1 FE .lobytes 0DFFEh +00118Fr 1 FF .lobytes 0DFFFh +001190r 1 00 .lobytes 0E000h +001191r 1 01 .lobytes 0E001h +001192r 1 02 .lobytes 0E002h +001193r 1 03 .lobytes 0E003h +001194r 1 04 .lobytes 0E004h +001195r 1 05 .lobytes 0E005h +001196r 1 06 .lobytes 0E006h +001197r 1 07 .lobytes 0E007h +001198r 1 08 .lobytes 0E008h +001199r 1 09 .lobytes 0E009h +00119Ar 1 0A .lobytes 0E00Ah +00119Br 1 0B .lobytes 0E00Bh +00119Cr 1 0C .lobytes 0E00Ch +00119Dr 1 0D .lobytes 0E00Dh +00119Er 1 0E .lobytes 0E00Eh +00119Fr 1 0F .lobytes 0E00Fh +0011A0r 1 E1 .lobytes 0EFE1h +0011A1r 1 E2 .lobytes 0EFE2h +0011A2r 1 E3 .lobytes 0EFE3h +0011A3r 1 E4 .lobytes 0EFE4h +0011A4r 1 E5 .lobytes 0EFE5h +0011A5r 1 E6 .lobytes 0EFE6h +0011A6r 1 E7 .lobytes 0EFE7h +0011A7r 1 E8 .lobytes 0EFE8h +0011A8r 1 E9 .lobytes 0EFE9h +0011A9r 1 EA .lobytes 0EFEAh +0011AAr 1 EB .lobytes 0EFEBh +0011ABr 1 EC .lobytes 0EFECh +0011ACr 1 ED .lobytes 0EFEDh +0011ADr 1 EE .lobytes 0EFEEh +0011AEr 1 EF .lobytes 0EFEFh +0011AFr 1 F0 .lobytes 0EFF0h +0011B0r 1 F1 .lobytes 0EFF1h +0011B1r 1 F2 .lobytes 0EFF2h +0011B2r 1 F3 .lobytes 0EFF3h +0011B3r 1 F4 .lobytes 0EFF4h +0011B4r 1 F5 .lobytes 0EFF5h +0011B5r 1 F6 .lobytes 0EFF6h +0011B6r 1 F7 .lobytes 0EFF7h +0011B7r 1 F8 .lobytes 0EFF8h +0011B8r 1 F9 .lobytes 0EFF9h +0011B9r 1 FA .lobytes 0EFFAh +0011BAr 1 FB .lobytes 0EFFBh +0011BBr 1 FC .lobytes 0EFFCh +0011BCr 1 FD .lobytes 0EFFDh +0011BDr 1 FE .lobytes 0EFFEh +0011BEr 1 FF .lobytes 0EFFFh +0011BFr 1 00 .lobytes 0F000h +0011C0r 1 01 .lobytes 0F001h +0011C1r 1 02 .lobytes 0F002h +0011C2r 1 03 .lobytes 0F003h +0011C3r 1 04 .lobytes 0F004h +0011C4r 1 05 .lobytes 0F005h +0011C5r 1 06 .lobytes 0F006h +0011C6r 1 07 .lobytes 0F007h +0011C7r 1 08 .lobytes 0F008h +0011C8r 1 09 .lobytes 0F009h +0011C9r 1 0A .lobytes 0F00Ah +0011CAr 1 0B .lobytes 0F00Bh +0011CBr 1 0C .lobytes 0F00Ch +0011CCr 1 0D .lobytes 0F00Dh +0011CDr 1 0E .lobytes 0F00Eh +0011CEr 1 0F .lobytes 0F00Fh +0011CFr 1 E1 .lobytes 0FFE1h +0011D0r 1 E2 .lobytes 0FFE2h +0011D1r 1 E3 .lobytes 0FFE3h +0011D2r 1 E4 .lobytes 0FFE4h +0011D3r 1 E5 .lobytes 0FFE5h +0011D4r 1 E6 .lobytes 0FFE6h +0011D5r 1 E7 .lobytes 0FFE7h +0011D6r 1 E8 .lobytes 0FFE8h +0011D7r 1 E9 .lobytes 0FFE9h +0011D8r 1 EA .lobytes 0FFEAh +0011D9r 1 EB .lobytes 0FFEBh +0011DAr 1 EC .lobytes 0FFECh +0011DBr 1 ED .lobytes 0FFEDh +0011DCr 1 EE .lobytes 0FFEEh +0011DDr 1 EF .lobytes 0FFEFh +0011DEr 1 F0 .lobytes 0FFF0h +0011DFr 1 F1 .lobytes 0FFF1h +0011E0r 1 F2 .lobytes 0FFF2h +0011E1r 1 F3 .lobytes 0FFF3h +0011E2r 1 F4 .lobytes 0FFF4h +0011E3r 1 F5 .lobytes 0FFF5h +0011E4r 1 F6 .lobytes 0FFF6h +0011E5r 1 F7 .lobytes 0FFF7h +0011E6r 1 F8 .lobytes 0FFF8h +0011E7r 1 F9 .lobytes 0FFF9h +0011E8r 1 FA .lobytes 0FFFAh +0011E9r 1 FB .lobytes 0FFFBh +0011EAr 1 FC .lobytes 0FFFCh +0011EBr 1 FD .lobytes 0FFFDh +0011ECr 1 FE .lobytes 0FFFEh +0011EDr 1 FF .lobytes 0FFFFh 0011EEr 1 -0011EEr 1 ; alternative hex values, always leading zero -0011EEr 1 00 .lobytes 00h -0011EFr 1 01 .lobytes 01h -0011F0r 1 02 .lobytes 02h -0011F1r 1 03 .lobytes 03h -0011F2r 1 04 .lobytes 04h -0011F3r 1 05 .lobytes 05h -0011F4r 1 06 .lobytes 06h -0011F5r 1 07 .lobytes 07h -0011F6r 1 08 .lobytes 08h -0011F7r 1 09 .lobytes 09h -0011F8r 1 0A .lobytes 0ah -0011F9r 1 0B .lobytes 0bh -0011FAr 1 0C .lobytes 0ch -0011FBr 1 0D .lobytes 0dh -0011FCr 1 0E .lobytes 0eh -0011FDr 1 0F .lobytes 0fh -0011FEr 1 10 .lobytes 010h -0011FFr 1 11 .lobytes 011h -001200r 1 12 .lobytes 012h -001201r 1 13 .lobytes 013h -001202r 1 70 .lobytes 070h -001203r 1 71 .lobytes 071h -001204r 1 72 .lobytes 072h -001205r 1 73 .lobytes 073h -001206r 1 74 .lobytes 074h -001207r 1 75 .lobytes 075h -001208r 1 76 .lobytes 076h -001209r 1 77 .lobytes 077h -00120Ar 1 78 .lobytes 078h -00120Br 1 79 .lobytes 079h -00120Cr 1 7A .lobytes 07ah -00120Dr 1 7B .lobytes 07bh -00120Er 1 7C .lobytes 07ch -00120Fr 1 7D .lobytes 07dh -001210r 1 7E .lobytes 07eh -001211r 1 7F .lobytes 07fh -001212r 1 80 .lobytes 080h -001213r 1 81 .lobytes 081h -001214r 1 82 .lobytes 082h -001215r 1 83 .lobytes 083h -001216r 1 84 .lobytes 084h -001217r 1 85 .lobytes 085h -001218r 1 86 .lobytes 086h -001219r 1 F0 .lobytes 0f0h -00121Ar 1 F1 .lobytes 0f1h -00121Br 1 F2 .lobytes 0f2h -00121Cr 1 F3 .lobytes 0f3h -00121Dr 1 F4 .lobytes 0f4h -00121Er 1 F5 .lobytes 0f5h -00121Fr 1 F6 .lobytes 0f6h -001220r 1 F7 .lobytes 0f7h -001221r 1 F8 .lobytes 0f8h -001222r 1 F9 .lobytes 0f9h -001223r 1 FA .lobytes 0fah -001224r 1 FB .lobytes 0fbh -001225r 1 FC .lobytes 0fch -001226r 1 FD .lobytes 0fdh -001227r 1 FE .lobytes 0feh -001228r 1 FF .lobytes 0ffh -001229r 1 00 .lobytes 0100h -00122Ar 1 01 .lobytes 0101h -00122Br 1 02 .lobytes 0102h -00122Cr 1 03 .lobytes 0103h -00122Dr 1 D2 .lobytes 0fd2h -00122Er 1 D3 .lobytes 0fd3h -00122Fr 1 D4 .lobytes 0fd4h -001230r 1 D5 .lobytes 0fd5h -001231r 1 D6 .lobytes 0fd6h -001232r 1 D7 .lobytes 0fd7h -001233r 1 D8 .lobytes 0fd8h -001234r 1 D9 .lobytes 0fd9h -001235r 1 DA .lobytes 0fdah -001236r 1 DB .lobytes 0fdbh -001237r 1 DC .lobytes 0fdch -001238r 1 DD .lobytes 0fddh -001239r 1 DE .lobytes 0fdeh -00123Ar 1 DF .lobytes 0fdfh -00123Br 1 E0 .lobytes 0fe0h -00123Cr 1 E1 .lobytes 0fe1h -00123Dr 1 E2 .lobytes 0fe2h -00123Er 1 E3 .lobytes 0fe3h -00123Fr 1 E4 .lobytes 0fe4h -001240r 1 E5 .lobytes 0fe5h -001241r 1 E6 .lobytes 0fe6h -001242r 1 E7 .lobytes 0fe7h -001243r 1 E8 .lobytes 0fe8h -001244r 1 E9 .lobytes 0fe9h -001245r 1 EA .lobytes 0feah -001246r 1 EB .lobytes 0febh -001247r 1 EC .lobytes 0fech -001248r 1 ED .lobytes 0fedh -001249r 1 EE .lobytes 0feeh -00124Ar 1 EF .lobytes 0fefh -00124Br 1 F0 .lobytes 0ff0h -00124Cr 1 F1 .lobytes 0ff1h -00124Dr 1 F2 .lobytes 0ff2h -00124Er 1 F3 .lobytes 0ff3h -00124Fr 1 F4 .lobytes 0ff4h -001250r 1 F5 .lobytes 0ff5h -001251r 1 F6 .lobytes 0ff6h -001252r 1 F7 .lobytes 0ff7h -001253r 1 F8 .lobytes 0ff8h -001254r 1 F9 .lobytes 0ff9h -001255r 1 FA .lobytes 0ffah -001256r 1 FB .lobytes 0ffbh -001257r 1 FC .lobytes 0ffch -001258r 1 FD .lobytes 0ffdh -001259r 1 FE .lobytes 0ffeh -00125Ar 1 FF .lobytes 0fffh -00125Br 1 00 .lobytes 01000h -00125Cr 1 01 .lobytes 01001h -00125Dr 1 02 .lobytes 01002h -00125Er 1 03 .lobytes 01003h -00125Fr 1 04 .lobytes 01004h -001260r 1 05 .lobytes 01005h -001261r 1 06 .lobytes 01006h -001262r 1 07 .lobytes 01007h -001263r 1 08 .lobytes 01008h -001264r 1 F0 .lobytes 07ff0h -001265r 1 F1 .lobytes 07ff1h -001266r 1 F2 .lobytes 07ff2h -001267r 1 F3 .lobytes 07ff3h -001268r 1 F4 .lobytes 07ff4h -001269r 1 F5 .lobytes 07ff5h -00126Ar 1 F6 .lobytes 07ff6h -00126Br 1 F7 .lobytes 07ff7h -00126Cr 1 F8 .lobytes 07ff8h -00126Dr 1 F9 .lobytes 07ff9h -00126Er 1 FA .lobytes 07ffah -00126Fr 1 FB .lobytes 07ffbh -001270r 1 FC .lobytes 07ffch -001271r 1 FD .lobytes 07ffdh -001272r 1 FE .lobytes 07ffeh -001273r 1 FF .lobytes 07fffh -001274r 1 00 .lobytes 08000h -001275r 1 01 .lobytes 08001h -001276r 1 02 .lobytes 08002h -001277r 1 03 .lobytes 08003h -001278r 1 04 .lobytes 08004h -001279r 1 05 .lobytes 08005h -00127Ar 1 06 .lobytes 08006h -00127Br 1 07 .lobytes 08007h -00127Cr 1 08 .lobytes 08008h -00127Dr 1 09 .lobytes 08009h -00127Er 1 0A .lobytes 0800ah -00127Fr 1 0B .lobytes 0800bh -001280r 1 E1 .lobytes 09fe1h -001281r 1 E2 .lobytes 09fe2h -001282r 1 E3 .lobytes 09fe3h -001283r 1 E4 .lobytes 09fe4h -001284r 1 E5 .lobytes 09fe5h -001285r 1 E6 .lobytes 09fe6h -001286r 1 E7 .lobytes 09fe7h -001287r 1 E8 .lobytes 09fe8h -001288r 1 E9 .lobytes 09fe9h -001289r 1 EA .lobytes 09feah -00128Ar 1 EB .lobytes 09febh -00128Br 1 EC .lobytes 09fech -00128Cr 1 ED .lobytes 09fedh -00128Dr 1 EE .lobytes 09feeh -00128Er 1 EF .lobytes 09fefh -00128Fr 1 F0 .lobytes 09ff0h -001290r 1 F1 .lobytes 09ff1h -001291r 1 F2 .lobytes 09ff2h -001292r 1 F3 .lobytes 09ff3h -001293r 1 F4 .lobytes 09ff4h -001294r 1 F5 .lobytes 09ff5h -001295r 1 F6 .lobytes 09ff6h -001296r 1 F7 .lobytes 09ff7h -001297r 1 F8 .lobytes 09ff8h -001298r 1 F9 .lobytes 09ff9h -001299r 1 FA .lobytes 09ffah -00129Ar 1 FB .lobytes 09ffbh -00129Br 1 FC .lobytes 09ffch -00129Cr 1 FD .lobytes 09ffdh -00129Dr 1 FE .lobytes 09ffeh -00129Er 1 FF .lobytes 09fffh -00129Fr 1 00 .lobytes 0a000h -0012A0r 1 01 .lobytes 0a001h -0012A1r 1 02 .lobytes 0a002h -0012A2r 1 03 .lobytes 0a003h -0012A3r 1 04 .lobytes 0a004h -0012A4r 1 05 .lobytes 0a005h -0012A5r 1 06 .lobytes 0a006h -0012A6r 1 07 .lobytes 0a007h -0012A7r 1 08 .lobytes 0a008h -0012A8r 1 09 .lobytes 0a009h -0012A9r 1 0A .lobytes 0a00ah -0012AAr 1 0B .lobytes 0a00bh -0012ABr 1 0C .lobytes 0a00ch -0012ACr 1 0D .lobytes 0a00dh -0012ADr 1 0E .lobytes 0a00eh -0012AEr 1 0F .lobytes 0a00fh -0012AFr 1 E1 .lobytes 0afe1h -0012B0r 1 E2 .lobytes 0afe2h -0012B1r 1 E3 .lobytes 0afe3h -0012B2r 1 E4 .lobytes 0afe4h -0012B3r 1 E5 .lobytes 0afe5h -0012B4r 1 E6 .lobytes 0afe6h -0012B5r 1 E7 .lobytes 0afe7h -0012B6r 1 E8 .lobytes 0afe8h -0012B7r 1 E9 .lobytes 0afe9h -0012B8r 1 EA .lobytes 0afeah -0012B9r 1 EB .lobytes 0afebh -0012BAr 1 EC .lobytes 0afech -0012BBr 1 ED .lobytes 0afedh -0012BCr 1 EE .lobytes 0afeeh -0012BDr 1 EF .lobytes 0afefh -0012BEr 1 F0 .lobytes 0aff0h -0012BFr 1 F1 .lobytes 0aff1h -0012C0r 1 F2 .lobytes 0aff2h -0012C1r 1 F3 .lobytes 0aff3h -0012C2r 1 F4 .lobytes 0aff4h -0012C3r 1 F5 .lobytes 0aff5h -0012C4r 1 F6 .lobytes 0aff6h -0012C5r 1 F7 .lobytes 0aff7h -0012C6r 1 F8 .lobytes 0aff8h -0012C7r 1 F9 .lobytes 0aff9h -0012C8r 1 FA .lobytes 0affah -0012C9r 1 FB .lobytes 0affbh -0012CAr 1 FC .lobytes 0affch -0012CBr 1 FD .lobytes 0affdh -0012CCr 1 FE .lobytes 0affeh -0012CDr 1 FF .lobytes 0afffh -0012CEr 1 00 .lobytes 0b000h -0012CFr 1 01 .lobytes 0b001h -0012D0r 1 02 .lobytes 0b002h -0012D1r 1 03 .lobytes 0b003h -0012D2r 1 04 .lobytes 0b004h -0012D3r 1 05 .lobytes 0b005h -0012D4r 1 06 .lobytes 0b006h -0012D5r 1 07 .lobytes 0b007h -0012D6r 1 08 .lobytes 0b008h -0012D7r 1 09 .lobytes 0b009h -0012D8r 1 0A .lobytes 0b00ah -0012D9r 1 0B .lobytes 0b00bh -0012DAr 1 0C .lobytes 0b00ch -0012DBr 1 0D .lobytes 0b00dh -0012DCr 1 0E .lobytes 0b00eh -0012DDr 1 0F .lobytes 0b00fh -0012DEr 1 E1 .lobytes 0bfe1h -0012DFr 1 E2 .lobytes 0bfe2h -0012E0r 1 E3 .lobytes 0bfe3h -0012E1r 1 E4 .lobytes 0bfe4h -0012E2r 1 E5 .lobytes 0bfe5h -0012E3r 1 E6 .lobytes 0bfe6h -0012E4r 1 E7 .lobytes 0bfe7h -0012E5r 1 E8 .lobytes 0bfe8h -0012E6r 1 E9 .lobytes 0bfe9h -0012E7r 1 EA .lobytes 0bfeah -0012E8r 1 EB .lobytes 0bfebh -0012E9r 1 EC .lobytes 0bfech -0012EAr 1 ED .lobytes 0bfedh -0012EBr 1 EE .lobytes 0bfeeh -0012ECr 1 EF .lobytes 0bfefh -0012EDr 1 F0 .lobytes 0bff0h -0012EEr 1 F1 .lobytes 0bff1h -0012EFr 1 F2 .lobytes 0bff2h -0012F0r 1 F3 .lobytes 0bff3h -0012F1r 1 F4 .lobytes 0bff4h -0012F2r 1 F5 .lobytes 0bff5h -0012F3r 1 F6 .lobytes 0bff6h -0012F4r 1 F7 .lobytes 0bff7h -0012F5r 1 F8 .lobytes 0bff8h -0012F6r 1 F9 .lobytes 0bff9h -0012F7r 1 FA .lobytes 0bffah -0012F8r 1 FB .lobytes 0bffbh -0012F9r 1 FC .lobytes 0bffch -0012FAr 1 FD .lobytes 0bffdh -0012FBr 1 FE .lobytes 0bffeh -0012FCr 1 FF .lobytes 0bfffh -0012FDr 1 00 .lobytes 0c000h -0012FEr 1 01 .lobytes 0c001h -0012FFr 1 02 .lobytes 0c002h -001300r 1 03 .lobytes 0c003h -001301r 1 04 .lobytes 0c004h -001302r 1 05 .lobytes 0c005h -001303r 1 06 .lobytes 0c006h -001304r 1 07 .lobytes 0c007h -001305r 1 08 .lobytes 0c008h -001306r 1 09 .lobytes 0c009h -001307r 1 0A .lobytes 0c00ah -001308r 1 0B .lobytes 0c00bh -001309r 1 0C .lobytes 0c00ch -00130Ar 1 0D .lobytes 0c00dh -00130Br 1 0E .lobytes 0c00eh -00130Cr 1 0F .lobytes 0c00fh -00130Dr 1 E1 .lobytes 0cfe1h -00130Er 1 E2 .lobytes 0cfe2h -00130Fr 1 E3 .lobytes 0cfe3h -001310r 1 E4 .lobytes 0cfe4h -001311r 1 E5 .lobytes 0cfe5h -001312r 1 E6 .lobytes 0cfe6h -001313r 1 E7 .lobytes 0cfe7h -001314r 1 E8 .lobytes 0cfe8h -001315r 1 E9 .lobytes 0cfe9h -001316r 1 EA .lobytes 0cfeah -001317r 1 EB .lobytes 0cfebh -001318r 1 EC .lobytes 0cfech -001319r 1 ED .lobytes 0cfedh -00131Ar 1 EE .lobytes 0cfeeh -00131Br 1 EF .lobytes 0cfefh -00131Cr 1 F0 .lobytes 0cff0h -00131Dr 1 F1 .lobytes 0cff1h -00131Er 1 F2 .lobytes 0cff2h -00131Fr 1 F3 .lobytes 0cff3h -001320r 1 F4 .lobytes 0cff4h -001321r 1 F5 .lobytes 0cff5h -001322r 1 F6 .lobytes 0cff6h -001323r 1 F7 .lobytes 0cff7h -001324r 1 F8 .lobytes 0cff8h -001325r 1 F9 .lobytes 0cff9h -001326r 1 FA .lobytes 0cffah -001327r 1 FB .lobytes 0cffbh -001328r 1 FC .lobytes 0cffch -001329r 1 FD .lobytes 0cffdh -00132Ar 1 FE .lobytes 0cffeh -00132Br 1 FF .lobytes 0cfffh -00132Cr 1 00 .lobytes 0d000h -00132Dr 1 01 .lobytes 0d001h -00132Er 1 02 .lobytes 0d002h -00132Fr 1 03 .lobytes 0d003h -001330r 1 04 .lobytes 0d004h -001331r 1 05 .lobytes 0d005h -001332r 1 06 .lobytes 0d006h -001333r 1 07 .lobytes 0d007h -001334r 1 08 .lobytes 0d008h -001335r 1 09 .lobytes 0d009h -001336r 1 0A .lobytes 0d00ah -001337r 1 0B .lobytes 0d00bh -001338r 1 0C .lobytes 0d00ch -001339r 1 0D .lobytes 0d00dh -00133Ar 1 0E .lobytes 0d00eh -00133Br 1 0F .lobytes 0d00fh -00133Cr 1 E1 .lobytes 0dfe1h -00133Dr 1 E2 .lobytes 0dfe2h -00133Er 1 E3 .lobytes 0dfe3h -00133Fr 1 E4 .lobytes 0dfe4h -001340r 1 E5 .lobytes 0dfe5h -001341r 1 E6 .lobytes 0dfe6h -001342r 1 E7 .lobytes 0dfe7h -001343r 1 E8 .lobytes 0dfe8h -001344r 1 E9 .lobytes 0dfe9h -001345r 1 EA .lobytes 0dfeah -001346r 1 EB .lobytes 0dfebh -001347r 1 EC .lobytes 0dfech -001348r 1 ED .lobytes 0dfedh -001349r 1 EE .lobytes 0dfeeh -00134Ar 1 EF .lobytes 0dfefh -00134Br 1 F0 .lobytes 0dff0h -00134Cr 1 F1 .lobytes 0dff1h -00134Dr 1 F2 .lobytes 0dff2h -00134Er 1 F3 .lobytes 0dff3h -00134Fr 1 F4 .lobytes 0dff4h -001350r 1 F5 .lobytes 0dff5h -001351r 1 F6 .lobytes 0dff6h -001352r 1 F7 .lobytes 0dff7h -001353r 1 F8 .lobytes 0dff8h -001354r 1 F9 .lobytes 0dff9h -001355r 1 FA .lobytes 0dffah -001356r 1 FB .lobytes 0dffbh -001357r 1 FC .lobytes 0dffch -001358r 1 FD .lobytes 0dffdh -001359r 1 FE .lobytes 0dffeh -00135Ar 1 FF .lobytes 0dfffh -00135Br 1 00 .lobytes 0e000h -00135Cr 1 01 .lobytes 0e001h -00135Dr 1 02 .lobytes 0e002h -00135Er 1 03 .lobytes 0e003h -00135Fr 1 04 .lobytes 0e004h -001360r 1 05 .lobytes 0e005h -001361r 1 06 .lobytes 0e006h -001362r 1 07 .lobytes 0e007h -001363r 1 08 .lobytes 0e008h -001364r 1 09 .lobytes 0e009h -001365r 1 0A .lobytes 0e00ah -001366r 1 0B .lobytes 0e00bh -001367r 1 0C .lobytes 0e00ch -001368r 1 0D .lobytes 0e00dh -001369r 1 0E .lobytes 0e00eh -00136Ar 1 0F .lobytes 0e00fh -00136Br 1 E1 .lobytes 0efe1h -00136Cr 1 E2 .lobytes 0efe2h -00136Dr 1 E3 .lobytes 0efe3h -00136Er 1 E4 .lobytes 0efe4h -00136Fr 1 E5 .lobytes 0efe5h -001370r 1 E6 .lobytes 0efe6h -001371r 1 E7 .lobytes 0efe7h -001372r 1 E8 .lobytes 0efe8h -001373r 1 E9 .lobytes 0efe9h -001374r 1 EA .lobytes 0efeah -001375r 1 EB .lobytes 0efebh -001376r 1 EC .lobytes 0efech -001377r 1 ED .lobytes 0efedh -001378r 1 EE .lobytes 0efeeh -001379r 1 EF .lobytes 0efefh -00137Ar 1 F0 .lobytes 0eff0h -00137Br 1 F1 .lobytes 0eff1h -00137Cr 1 F2 .lobytes 0eff2h -00137Dr 1 F3 .lobytes 0eff3h -00137Er 1 F4 .lobytes 0eff4h -00137Fr 1 F5 .lobytes 0eff5h -001380r 1 F6 .lobytes 0eff6h -001381r 1 F7 .lobytes 0eff7h -001382r 1 F8 .lobytes 0eff8h -001383r 1 F9 .lobytes 0eff9h -001384r 1 FA .lobytes 0effah -001385r 1 FB .lobytes 0effbh -001386r 1 FC .lobytes 0effch -001387r 1 FD .lobytes 0effdh -001388r 1 FE .lobytes 0effeh -001389r 1 FF .lobytes 0efffh -00138Ar 1 00 .lobytes 0f000h -00138Br 1 01 .lobytes 0f001h -00138Cr 1 02 .lobytes 0f002h -00138Dr 1 03 .lobytes 0f003h -00138Er 1 04 .lobytes 0f004h -00138Fr 1 05 .lobytes 0f005h -001390r 1 06 .lobytes 0f006h -001391r 1 07 .lobytes 0f007h -001392r 1 08 .lobytes 0f008h -001393r 1 09 .lobytes 0f009h -001394r 1 0A .lobytes 0f00ah -001395r 1 0B .lobytes 0f00bh -001396r 1 0C .lobytes 0f00ch -001397r 1 0D .lobytes 0f00dh -001398r 1 0E .lobytes 0f00eh -001399r 1 0F .lobytes 0f00fh -00139Ar 1 E1 .lobytes 0ffe1h -00139Br 1 E2 .lobytes 0ffe2h -00139Cr 1 E3 .lobytes 0ffe3h -00139Dr 1 E4 .lobytes 0ffe4h -00139Er 1 E5 .lobytes 0ffe5h -00139Fr 1 E6 .lobytes 0ffe6h -0013A0r 1 E7 .lobytes 0ffe7h -0013A1r 1 E8 .lobytes 0ffe8h -0013A2r 1 E9 .lobytes 0ffe9h -0013A3r 1 EA .lobytes 0ffeah -0013A4r 1 EB .lobytes 0ffebh -0013A5r 1 EC .lobytes 0ffech -0013A6r 1 ED .lobytes 0ffedh -0013A7r 1 EE .lobytes 0ffeeh -0013A8r 1 EF .lobytes 0ffefh -0013A9r 1 F0 .lobytes 0fff0h -0013AAr 1 F1 .lobytes 0fff1h -0013ABr 1 F2 .lobytes 0fff2h -0013ACr 1 F3 .lobytes 0fff3h -0013ADr 1 F4 .lobytes 0fff4h -0013AEr 1 F5 .lobytes 0fff5h -0013AFr 1 F6 .lobytes 0fff6h -0013B0r 1 F7 .lobytes 0fff7h -0013B1r 1 F8 .lobytes 0fff8h -0013B2r 1 F9 .lobytes 0fff9h -0013B3r 1 FA .lobytes 0fffah -0013B4r 1 FB .lobytes 0fffbh -0013B5r 1 FC .lobytes 0fffch -0013B6r 1 FD .lobytes 0fffdh -0013B7r 1 FE .lobytes 0fffeh -0013B8r 1 FF .lobytes 0ffffh +0011EEr 1 ; alternative hex values, always leading zero +0011EEr 1 00 .lobytes 00h +0011EFr 1 01 .lobytes 01h +0011F0r 1 02 .lobytes 02h +0011F1r 1 03 .lobytes 03h +0011F2r 1 04 .lobytes 04h +0011F3r 1 05 .lobytes 05h +0011F4r 1 06 .lobytes 06h +0011F5r 1 07 .lobytes 07h +0011F6r 1 08 .lobytes 08h +0011F7r 1 09 .lobytes 09h +0011F8r 1 0A .lobytes 0ah +0011F9r 1 0B .lobytes 0bh +0011FAr 1 0C .lobytes 0ch +0011FBr 1 0D .lobytes 0dh +0011FCr 1 0E .lobytes 0eh +0011FDr 1 0F .lobytes 0fh +0011FEr 1 10 .lobytes 010h +0011FFr 1 11 .lobytes 011h +001200r 1 12 .lobytes 012h +001201r 1 13 .lobytes 013h +001202r 1 70 .lobytes 070h +001203r 1 71 .lobytes 071h +001204r 1 72 .lobytes 072h +001205r 1 73 .lobytes 073h +001206r 1 74 .lobytes 074h +001207r 1 75 .lobytes 075h +001208r 1 76 .lobytes 076h +001209r 1 77 .lobytes 077h +00120Ar 1 78 .lobytes 078h +00120Br 1 79 .lobytes 079h +00120Cr 1 7A .lobytes 07ah +00120Dr 1 7B .lobytes 07bh +00120Er 1 7C .lobytes 07ch +00120Fr 1 7D .lobytes 07dh +001210r 1 7E .lobytes 07eh +001211r 1 7F .lobytes 07fh +001212r 1 80 .lobytes 080h +001213r 1 81 .lobytes 081h +001214r 1 82 .lobytes 082h +001215r 1 83 .lobytes 083h +001216r 1 84 .lobytes 084h +001217r 1 85 .lobytes 085h +001218r 1 86 .lobytes 086h +001219r 1 F0 .lobytes 0f0h +00121Ar 1 F1 .lobytes 0f1h +00121Br 1 F2 .lobytes 0f2h +00121Cr 1 F3 .lobytes 0f3h +00121Dr 1 F4 .lobytes 0f4h +00121Er 1 F5 .lobytes 0f5h +00121Fr 1 F6 .lobytes 0f6h +001220r 1 F7 .lobytes 0f7h +001221r 1 F8 .lobytes 0f8h +001222r 1 F9 .lobytes 0f9h +001223r 1 FA .lobytes 0fah +001224r 1 FB .lobytes 0fbh +001225r 1 FC .lobytes 0fch +001226r 1 FD .lobytes 0fdh +001227r 1 FE .lobytes 0feh +001228r 1 FF .lobytes 0ffh +001229r 1 00 .lobytes 0100h +00122Ar 1 01 .lobytes 0101h +00122Br 1 02 .lobytes 0102h +00122Cr 1 03 .lobytes 0103h +00122Dr 1 D2 .lobytes 0fd2h +00122Er 1 D3 .lobytes 0fd3h +00122Fr 1 D4 .lobytes 0fd4h +001230r 1 D5 .lobytes 0fd5h +001231r 1 D6 .lobytes 0fd6h +001232r 1 D7 .lobytes 0fd7h +001233r 1 D8 .lobytes 0fd8h +001234r 1 D9 .lobytes 0fd9h +001235r 1 DA .lobytes 0fdah +001236r 1 DB .lobytes 0fdbh +001237r 1 DC .lobytes 0fdch +001238r 1 DD .lobytes 0fddh +001239r 1 DE .lobytes 0fdeh +00123Ar 1 DF .lobytes 0fdfh +00123Br 1 E0 .lobytes 0fe0h +00123Cr 1 E1 .lobytes 0fe1h +00123Dr 1 E2 .lobytes 0fe2h +00123Er 1 E3 .lobytes 0fe3h +00123Fr 1 E4 .lobytes 0fe4h +001240r 1 E5 .lobytes 0fe5h +001241r 1 E6 .lobytes 0fe6h +001242r 1 E7 .lobytes 0fe7h +001243r 1 E8 .lobytes 0fe8h +001244r 1 E9 .lobytes 0fe9h +001245r 1 EA .lobytes 0feah +001246r 1 EB .lobytes 0febh +001247r 1 EC .lobytes 0fech +001248r 1 ED .lobytes 0fedh +001249r 1 EE .lobytes 0feeh +00124Ar 1 EF .lobytes 0fefh +00124Br 1 F0 .lobytes 0ff0h +00124Cr 1 F1 .lobytes 0ff1h +00124Dr 1 F2 .lobytes 0ff2h +00124Er 1 F3 .lobytes 0ff3h +00124Fr 1 F4 .lobytes 0ff4h +001250r 1 F5 .lobytes 0ff5h +001251r 1 F6 .lobytes 0ff6h +001252r 1 F7 .lobytes 0ff7h +001253r 1 F8 .lobytes 0ff8h +001254r 1 F9 .lobytes 0ff9h +001255r 1 FA .lobytes 0ffah +001256r 1 FB .lobytes 0ffbh +001257r 1 FC .lobytes 0ffch +001258r 1 FD .lobytes 0ffdh +001259r 1 FE .lobytes 0ffeh +00125Ar 1 FF .lobytes 0fffh +00125Br 1 00 .lobytes 01000h +00125Cr 1 01 .lobytes 01001h +00125Dr 1 02 .lobytes 01002h +00125Er 1 03 .lobytes 01003h +00125Fr 1 04 .lobytes 01004h +001260r 1 05 .lobytes 01005h +001261r 1 06 .lobytes 01006h +001262r 1 07 .lobytes 01007h +001263r 1 08 .lobytes 01008h +001264r 1 F0 .lobytes 07ff0h +001265r 1 F1 .lobytes 07ff1h +001266r 1 F2 .lobytes 07ff2h +001267r 1 F3 .lobytes 07ff3h +001268r 1 F4 .lobytes 07ff4h +001269r 1 F5 .lobytes 07ff5h +00126Ar 1 F6 .lobytes 07ff6h +00126Br 1 F7 .lobytes 07ff7h +00126Cr 1 F8 .lobytes 07ff8h +00126Dr 1 F9 .lobytes 07ff9h +00126Er 1 FA .lobytes 07ffah +00126Fr 1 FB .lobytes 07ffbh +001270r 1 FC .lobytes 07ffch +001271r 1 FD .lobytes 07ffdh +001272r 1 FE .lobytes 07ffeh +001273r 1 FF .lobytes 07fffh +001274r 1 00 .lobytes 08000h +001275r 1 01 .lobytes 08001h +001276r 1 02 .lobytes 08002h +001277r 1 03 .lobytes 08003h +001278r 1 04 .lobytes 08004h +001279r 1 05 .lobytes 08005h +00127Ar 1 06 .lobytes 08006h +00127Br 1 07 .lobytes 08007h +00127Cr 1 08 .lobytes 08008h +00127Dr 1 09 .lobytes 08009h +00127Er 1 0A .lobytes 0800ah +00127Fr 1 0B .lobytes 0800bh +001280r 1 E1 .lobytes 09fe1h +001281r 1 E2 .lobytes 09fe2h +001282r 1 E3 .lobytes 09fe3h +001283r 1 E4 .lobytes 09fe4h +001284r 1 E5 .lobytes 09fe5h +001285r 1 E6 .lobytes 09fe6h +001286r 1 E7 .lobytes 09fe7h +001287r 1 E8 .lobytes 09fe8h +001288r 1 E9 .lobytes 09fe9h +001289r 1 EA .lobytes 09feah +00128Ar 1 EB .lobytes 09febh +00128Br 1 EC .lobytes 09fech +00128Cr 1 ED .lobytes 09fedh +00128Dr 1 EE .lobytes 09feeh +00128Er 1 EF .lobytes 09fefh +00128Fr 1 F0 .lobytes 09ff0h +001290r 1 F1 .lobytes 09ff1h +001291r 1 F2 .lobytes 09ff2h +001292r 1 F3 .lobytes 09ff3h +001293r 1 F4 .lobytes 09ff4h +001294r 1 F5 .lobytes 09ff5h +001295r 1 F6 .lobytes 09ff6h +001296r 1 F7 .lobytes 09ff7h +001297r 1 F8 .lobytes 09ff8h +001298r 1 F9 .lobytes 09ff9h +001299r 1 FA .lobytes 09ffah +00129Ar 1 FB .lobytes 09ffbh +00129Br 1 FC .lobytes 09ffch +00129Cr 1 FD .lobytes 09ffdh +00129Dr 1 FE .lobytes 09ffeh +00129Er 1 FF .lobytes 09fffh +00129Fr 1 00 .lobytes 0a000h +0012A0r 1 01 .lobytes 0a001h +0012A1r 1 02 .lobytes 0a002h +0012A2r 1 03 .lobytes 0a003h +0012A3r 1 04 .lobytes 0a004h +0012A4r 1 05 .lobytes 0a005h +0012A5r 1 06 .lobytes 0a006h +0012A6r 1 07 .lobytes 0a007h +0012A7r 1 08 .lobytes 0a008h +0012A8r 1 09 .lobytes 0a009h +0012A9r 1 0A .lobytes 0a00ah +0012AAr 1 0B .lobytes 0a00bh +0012ABr 1 0C .lobytes 0a00ch +0012ACr 1 0D .lobytes 0a00dh +0012ADr 1 0E .lobytes 0a00eh +0012AEr 1 0F .lobytes 0a00fh +0012AFr 1 E1 .lobytes 0afe1h +0012B0r 1 E2 .lobytes 0afe2h +0012B1r 1 E3 .lobytes 0afe3h +0012B2r 1 E4 .lobytes 0afe4h +0012B3r 1 E5 .lobytes 0afe5h +0012B4r 1 E6 .lobytes 0afe6h +0012B5r 1 E7 .lobytes 0afe7h +0012B6r 1 E8 .lobytes 0afe8h +0012B7r 1 E9 .lobytes 0afe9h +0012B8r 1 EA .lobytes 0afeah +0012B9r 1 EB .lobytes 0afebh +0012BAr 1 EC .lobytes 0afech +0012BBr 1 ED .lobytes 0afedh +0012BCr 1 EE .lobytes 0afeeh +0012BDr 1 EF .lobytes 0afefh +0012BEr 1 F0 .lobytes 0aff0h +0012BFr 1 F1 .lobytes 0aff1h +0012C0r 1 F2 .lobytes 0aff2h +0012C1r 1 F3 .lobytes 0aff3h +0012C2r 1 F4 .lobytes 0aff4h +0012C3r 1 F5 .lobytes 0aff5h +0012C4r 1 F6 .lobytes 0aff6h +0012C5r 1 F7 .lobytes 0aff7h +0012C6r 1 F8 .lobytes 0aff8h +0012C7r 1 F9 .lobytes 0aff9h +0012C8r 1 FA .lobytes 0affah +0012C9r 1 FB .lobytes 0affbh +0012CAr 1 FC .lobytes 0affch +0012CBr 1 FD .lobytes 0affdh +0012CCr 1 FE .lobytes 0affeh +0012CDr 1 FF .lobytes 0afffh +0012CEr 1 00 .lobytes 0b000h +0012CFr 1 01 .lobytes 0b001h +0012D0r 1 02 .lobytes 0b002h +0012D1r 1 03 .lobytes 0b003h +0012D2r 1 04 .lobytes 0b004h +0012D3r 1 05 .lobytes 0b005h +0012D4r 1 06 .lobytes 0b006h +0012D5r 1 07 .lobytes 0b007h +0012D6r 1 08 .lobytes 0b008h +0012D7r 1 09 .lobytes 0b009h +0012D8r 1 0A .lobytes 0b00ah +0012D9r 1 0B .lobytes 0b00bh +0012DAr 1 0C .lobytes 0b00ch +0012DBr 1 0D .lobytes 0b00dh +0012DCr 1 0E .lobytes 0b00eh +0012DDr 1 0F .lobytes 0b00fh +0012DEr 1 E1 .lobytes 0bfe1h +0012DFr 1 E2 .lobytes 0bfe2h +0012E0r 1 E3 .lobytes 0bfe3h +0012E1r 1 E4 .lobytes 0bfe4h +0012E2r 1 E5 .lobytes 0bfe5h +0012E3r 1 E6 .lobytes 0bfe6h +0012E4r 1 E7 .lobytes 0bfe7h +0012E5r 1 E8 .lobytes 0bfe8h +0012E6r 1 E9 .lobytes 0bfe9h +0012E7r 1 EA .lobytes 0bfeah +0012E8r 1 EB .lobytes 0bfebh +0012E9r 1 EC .lobytes 0bfech +0012EAr 1 ED .lobytes 0bfedh +0012EBr 1 EE .lobytes 0bfeeh +0012ECr 1 EF .lobytes 0bfefh +0012EDr 1 F0 .lobytes 0bff0h +0012EEr 1 F1 .lobytes 0bff1h +0012EFr 1 F2 .lobytes 0bff2h +0012F0r 1 F3 .lobytes 0bff3h +0012F1r 1 F4 .lobytes 0bff4h +0012F2r 1 F5 .lobytes 0bff5h +0012F3r 1 F6 .lobytes 0bff6h +0012F4r 1 F7 .lobytes 0bff7h +0012F5r 1 F8 .lobytes 0bff8h +0012F6r 1 F9 .lobytes 0bff9h +0012F7r 1 FA .lobytes 0bffah +0012F8r 1 FB .lobytes 0bffbh +0012F9r 1 FC .lobytes 0bffch +0012FAr 1 FD .lobytes 0bffdh +0012FBr 1 FE .lobytes 0bffeh +0012FCr 1 FF .lobytes 0bfffh +0012FDr 1 00 .lobytes 0c000h +0012FEr 1 01 .lobytes 0c001h +0012FFr 1 02 .lobytes 0c002h +001300r 1 03 .lobytes 0c003h +001301r 1 04 .lobytes 0c004h +001302r 1 05 .lobytes 0c005h +001303r 1 06 .lobytes 0c006h +001304r 1 07 .lobytes 0c007h +001305r 1 08 .lobytes 0c008h +001306r 1 09 .lobytes 0c009h +001307r 1 0A .lobytes 0c00ah +001308r 1 0B .lobytes 0c00bh +001309r 1 0C .lobytes 0c00ch +00130Ar 1 0D .lobytes 0c00dh +00130Br 1 0E .lobytes 0c00eh +00130Cr 1 0F .lobytes 0c00fh +00130Dr 1 E1 .lobytes 0cfe1h +00130Er 1 E2 .lobytes 0cfe2h +00130Fr 1 E3 .lobytes 0cfe3h +001310r 1 E4 .lobytes 0cfe4h +001311r 1 E5 .lobytes 0cfe5h +001312r 1 E6 .lobytes 0cfe6h +001313r 1 E7 .lobytes 0cfe7h +001314r 1 E8 .lobytes 0cfe8h +001315r 1 E9 .lobytes 0cfe9h +001316r 1 EA .lobytes 0cfeah +001317r 1 EB .lobytes 0cfebh +001318r 1 EC .lobytes 0cfech +001319r 1 ED .lobytes 0cfedh +00131Ar 1 EE .lobytes 0cfeeh +00131Br 1 EF .lobytes 0cfefh +00131Cr 1 F0 .lobytes 0cff0h +00131Dr 1 F1 .lobytes 0cff1h +00131Er 1 F2 .lobytes 0cff2h +00131Fr 1 F3 .lobytes 0cff3h +001320r 1 F4 .lobytes 0cff4h +001321r 1 F5 .lobytes 0cff5h +001322r 1 F6 .lobytes 0cff6h +001323r 1 F7 .lobytes 0cff7h +001324r 1 F8 .lobytes 0cff8h +001325r 1 F9 .lobytes 0cff9h +001326r 1 FA .lobytes 0cffah +001327r 1 FB .lobytes 0cffbh +001328r 1 FC .lobytes 0cffch +001329r 1 FD .lobytes 0cffdh +00132Ar 1 FE .lobytes 0cffeh +00132Br 1 FF .lobytes 0cfffh +00132Cr 1 00 .lobytes 0d000h +00132Dr 1 01 .lobytes 0d001h +00132Er 1 02 .lobytes 0d002h +00132Fr 1 03 .lobytes 0d003h +001330r 1 04 .lobytes 0d004h +001331r 1 05 .lobytes 0d005h +001332r 1 06 .lobytes 0d006h +001333r 1 07 .lobytes 0d007h +001334r 1 08 .lobytes 0d008h +001335r 1 09 .lobytes 0d009h +001336r 1 0A .lobytes 0d00ah +001337r 1 0B .lobytes 0d00bh +001338r 1 0C .lobytes 0d00ch +001339r 1 0D .lobytes 0d00dh +00133Ar 1 0E .lobytes 0d00eh +00133Br 1 0F .lobytes 0d00fh +00133Cr 1 E1 .lobytes 0dfe1h +00133Dr 1 E2 .lobytes 0dfe2h +00133Er 1 E3 .lobytes 0dfe3h +00133Fr 1 E4 .lobytes 0dfe4h +001340r 1 E5 .lobytes 0dfe5h +001341r 1 E6 .lobytes 0dfe6h +001342r 1 E7 .lobytes 0dfe7h +001343r 1 E8 .lobytes 0dfe8h +001344r 1 E9 .lobytes 0dfe9h +001345r 1 EA .lobytes 0dfeah +001346r 1 EB .lobytes 0dfebh +001347r 1 EC .lobytes 0dfech +001348r 1 ED .lobytes 0dfedh +001349r 1 EE .lobytes 0dfeeh +00134Ar 1 EF .lobytes 0dfefh +00134Br 1 F0 .lobytes 0dff0h +00134Cr 1 F1 .lobytes 0dff1h +00134Dr 1 F2 .lobytes 0dff2h +00134Er 1 F3 .lobytes 0dff3h +00134Fr 1 F4 .lobytes 0dff4h +001350r 1 F5 .lobytes 0dff5h +001351r 1 F6 .lobytes 0dff6h +001352r 1 F7 .lobytes 0dff7h +001353r 1 F8 .lobytes 0dff8h +001354r 1 F9 .lobytes 0dff9h +001355r 1 FA .lobytes 0dffah +001356r 1 FB .lobytes 0dffbh +001357r 1 FC .lobytes 0dffch +001358r 1 FD .lobytes 0dffdh +001359r 1 FE .lobytes 0dffeh +00135Ar 1 FF .lobytes 0dfffh +00135Br 1 00 .lobytes 0e000h +00135Cr 1 01 .lobytes 0e001h +00135Dr 1 02 .lobytes 0e002h +00135Er 1 03 .lobytes 0e003h +00135Fr 1 04 .lobytes 0e004h +001360r 1 05 .lobytes 0e005h +001361r 1 06 .lobytes 0e006h +001362r 1 07 .lobytes 0e007h +001363r 1 08 .lobytes 0e008h +001364r 1 09 .lobytes 0e009h +001365r 1 0A .lobytes 0e00ah +001366r 1 0B .lobytes 0e00bh +001367r 1 0C .lobytes 0e00ch +001368r 1 0D .lobytes 0e00dh +001369r 1 0E .lobytes 0e00eh +00136Ar 1 0F .lobytes 0e00fh +00136Br 1 E1 .lobytes 0efe1h +00136Cr 1 E2 .lobytes 0efe2h +00136Dr 1 E3 .lobytes 0efe3h +00136Er 1 E4 .lobytes 0efe4h +00136Fr 1 E5 .lobytes 0efe5h +001370r 1 E6 .lobytes 0efe6h +001371r 1 E7 .lobytes 0efe7h +001372r 1 E8 .lobytes 0efe8h +001373r 1 E9 .lobytes 0efe9h +001374r 1 EA .lobytes 0efeah +001375r 1 EB .lobytes 0efebh +001376r 1 EC .lobytes 0efech +001377r 1 ED .lobytes 0efedh +001378r 1 EE .lobytes 0efeeh +001379r 1 EF .lobytes 0efefh +00137Ar 1 F0 .lobytes 0eff0h +00137Br 1 F1 .lobytes 0eff1h +00137Cr 1 F2 .lobytes 0eff2h +00137Dr 1 F3 .lobytes 0eff3h +00137Er 1 F4 .lobytes 0eff4h +00137Fr 1 F5 .lobytes 0eff5h +001380r 1 F6 .lobytes 0eff6h +001381r 1 F7 .lobytes 0eff7h +001382r 1 F8 .lobytes 0eff8h +001383r 1 F9 .lobytes 0eff9h +001384r 1 FA .lobytes 0effah +001385r 1 FB .lobytes 0effbh +001386r 1 FC .lobytes 0effch +001387r 1 FD .lobytes 0effdh +001388r 1 FE .lobytes 0effeh +001389r 1 FF .lobytes 0efffh +00138Ar 1 00 .lobytes 0f000h +00138Br 1 01 .lobytes 0f001h +00138Cr 1 02 .lobytes 0f002h +00138Dr 1 03 .lobytes 0f003h +00138Er 1 04 .lobytes 0f004h +00138Fr 1 05 .lobytes 0f005h +001390r 1 06 .lobytes 0f006h +001391r 1 07 .lobytes 0f007h +001392r 1 08 .lobytes 0f008h +001393r 1 09 .lobytes 0f009h +001394r 1 0A .lobytes 0f00ah +001395r 1 0B .lobytes 0f00bh +001396r 1 0C .lobytes 0f00ch +001397r 1 0D .lobytes 0f00dh +001398r 1 0E .lobytes 0f00eh +001399r 1 0F .lobytes 0f00fh +00139Ar 1 E1 .lobytes 0ffe1h +00139Br 1 E2 .lobytes 0ffe2h +00139Cr 1 E3 .lobytes 0ffe3h +00139Dr 1 E4 .lobytes 0ffe4h +00139Er 1 E5 .lobytes 0ffe5h +00139Fr 1 E6 .lobytes 0ffe6h +0013A0r 1 E7 .lobytes 0ffe7h +0013A1r 1 E8 .lobytes 0ffe8h +0013A2r 1 E9 .lobytes 0ffe9h +0013A3r 1 EA .lobytes 0ffeah +0013A4r 1 EB .lobytes 0ffebh +0013A5r 1 EC .lobytes 0ffech +0013A6r 1 ED .lobytes 0ffedh +0013A7r 1 EE .lobytes 0ffeeh +0013A8r 1 EF .lobytes 0ffefh +0013A9r 1 F0 .lobytes 0fff0h +0013AAr 1 F1 .lobytes 0fff1h +0013ABr 1 F2 .lobytes 0fff2h +0013ACr 1 F3 .lobytes 0fff3h +0013ADr 1 F4 .lobytes 0fff4h +0013AEr 1 F5 .lobytes 0fff5h +0013AFr 1 F6 .lobytes 0fff6h +0013B0r 1 F7 .lobytes 0fff7h +0013B1r 1 F8 .lobytes 0fff8h +0013B2r 1 F9 .lobytes 0fff9h +0013B3r 1 FA .lobytes 0fffah +0013B4r 1 FB .lobytes 0fffbh +0013B5r 1 FC .lobytes 0fffch +0013B6r 1 FD .lobytes 0fffdh +0013B7r 1 FE .lobytes 0fffeh +0013B8r 1 FF .lobytes 0ffffh 0013B9r 1 -0013B9r 1 ; binary values, variable length -0013B9r 1 00 .lobytes %0 -0013BAr 1 01 .lobytes %01 -0013BBr 1 02 .lobytes %010 -0013BCr 1 03 .lobytes %011 -0013BDr 1 04 .lobytes %0100 -0013BEr 1 05 .lobytes %0101 -0013BFr 1 06 .lobytes %0110 -0013C0r 1 07 .lobytes %0111 -0013C1r 1 08 .lobytes %01000 -0013C2r 1 09 .lobytes %01001 -0013C3r 1 0A .lobytes %01010 -0013C4r 1 0B .lobytes %01011 -0013C5r 1 0C .lobytes %01100 -0013C6r 1 0D .lobytes %01101 -0013C7r 1 0E .lobytes %01110 -0013C8r 1 0F .lobytes %01111 -0013C9r 1 10 .lobytes %010000 -0013CAr 1 11 .lobytes %010001 -0013CBr 1 12 .lobytes %010010 -0013CCr 1 13 .lobytes %010011 -0013CDr 1 70 .lobytes %01110000 -0013CEr 1 71 .lobytes %01110001 -0013CFr 1 72 .lobytes %01110010 -0013D0r 1 73 .lobytes %01110011 -0013D1r 1 74 .lobytes %01110100 -0013D2r 1 75 .lobytes %01110101 -0013D3r 1 76 .lobytes %01110110 -0013D4r 1 77 .lobytes %01110111 -0013D5r 1 78 .lobytes %01111000 -0013D6r 1 79 .lobytes %01111001 -0013D7r 1 7A .lobytes %01111010 -0013D8r 1 7B .lobytes %01111011 -0013D9r 1 7C .lobytes %01111100 -0013DAr 1 7D .lobytes %01111101 -0013DBr 1 7E .lobytes %01111110 -0013DCr 1 7F .lobytes %01111111 -0013DDr 1 80 .lobytes %010000000 -0013DEr 1 81 .lobytes %010000001 -0013DFr 1 82 .lobytes %010000010 -0013E0r 1 83 .lobytes %010000011 -0013E1r 1 84 .lobytes %010000100 -0013E2r 1 85 .lobytes %010000101 -0013E3r 1 86 .lobytes %010000110 -0013E4r 1 F0 .lobytes %011110000 -0013E5r 1 F1 .lobytes %011110001 -0013E6r 1 F2 .lobytes %011110010 -0013E7r 1 F3 .lobytes %011110011 -0013E8r 1 F4 .lobytes %011110100 -0013E9r 1 F5 .lobytes %011110101 -0013EAr 1 F6 .lobytes %011110110 -0013EBr 1 F7 .lobytes %011110111 -0013ECr 1 F8 .lobytes %011111000 -0013EDr 1 F9 .lobytes %011111001 -0013EEr 1 FA .lobytes %011111010 -0013EFr 1 FB .lobytes %011111011 -0013F0r 1 FC .lobytes %011111100 -0013F1r 1 FD .lobytes %011111101 -0013F2r 1 FE .lobytes %011111110 -0013F3r 1 FF .lobytes %011111111 -0013F4r 1 00 .lobytes %100000000 -0013F5r 1 01 .lobytes %100000001 -0013F6r 1 02 .lobytes %100000010 -0013F7r 1 03 .lobytes %100000011 -0013F8r 1 D2 .lobytes %111111010010 -0013F9r 1 D3 .lobytes %111111010011 -0013FAr 1 D4 .lobytes %111111010100 -0013FBr 1 D5 .lobytes %111111010101 -0013FCr 1 D6 .lobytes %111111010110 -0013FDr 1 D7 .lobytes %111111010111 -0013FEr 1 D8 .lobytes %111111011000 -0013FFr 1 D9 .lobytes %111111011001 -001400r 1 DA .lobytes %111111011010 -001401r 1 DB .lobytes %111111011011 -001402r 1 DC .lobytes %111111011100 -001403r 1 DD .lobytes %111111011101 -001404r 1 DE .lobytes %111111011110 -001405r 1 DF .lobytes %111111011111 -001406r 1 E0 .lobytes %111111100000 -001407r 1 E1 .lobytes %111111100001 -001408r 1 E2 .lobytes %111111100010 -001409r 1 E3 .lobytes %111111100011 -00140Ar 1 E4 .lobytes %111111100100 -00140Br 1 E5 .lobytes %111111100101 -00140Cr 1 E6 .lobytes %111111100110 -00140Dr 1 E7 .lobytes %111111100111 -00140Er 1 E8 .lobytes %111111101000 -00140Fr 1 E9 .lobytes %111111101001 -001410r 1 EA .lobytes %111111101010 -001411r 1 EB .lobytes %111111101011 -001412r 1 EC .lobytes %111111101100 -001413r 1 ED .lobytes %111111101101 -001414r 1 EE .lobytes %111111101110 -001415r 1 EF .lobytes %111111101111 -001416r 1 F0 .lobytes %111111110000 -001417r 1 F1 .lobytes %111111110001 -001418r 1 F2 .lobytes %111111110010 -001419r 1 F3 .lobytes %111111110011 -00141Ar 1 F4 .lobytes %111111110100 -00141Br 1 F5 .lobytes %111111110101 -00141Cr 1 F6 .lobytes %111111110110 -00141Dr 1 F7 .lobytes %111111110111 -00141Er 1 F8 .lobytes %111111111000 -00141Fr 1 F9 .lobytes %111111111001 -001420r 1 FA .lobytes %111111111010 -001421r 1 FB .lobytes %111111111011 -001422r 1 FC .lobytes %111111111100 -001423r 1 FD .lobytes %111111111101 -001424r 1 FE .lobytes %111111111110 -001425r 1 FF .lobytes %111111111111 -001426r 1 00 .lobytes %1000000000000 -001427r 1 01 .lobytes %1000000000001 -001428r 1 02 .lobytes %1000000000010 -001429r 1 03 .lobytes %1000000000011 -00142Ar 1 04 .lobytes %1000000000100 -00142Br 1 05 .lobytes %1000000000101 -00142Cr 1 06 .lobytes %1000000000110 -00142Dr 1 07 .lobytes %1000000000111 -00142Er 1 08 .lobytes %1000000001000 -00142Fr 1 F0 .lobytes %111111111110000 -001430r 1 F1 .lobytes %111111111110001 -001431r 1 F2 .lobytes %111111111110010 -001432r 1 F3 .lobytes %111111111110011 -001433r 1 F4 .lobytes %111111111110100 -001434r 1 F5 .lobytes %111111111110101 -001435r 1 F6 .lobytes %111111111110110 -001436r 1 F7 .lobytes %111111111110111 -001437r 1 F8 .lobytes %111111111111000 -001438r 1 F9 .lobytes %111111111111001 -001439r 1 FA .lobytes %111111111111010 -00143Ar 1 FB .lobytes %111111111111011 -00143Br 1 FC .lobytes %111111111111100 -00143Cr 1 FD .lobytes %111111111111101 -00143Dr 1 FE .lobytes %111111111111110 -00143Er 1 FF .lobytes %111111111111111 -00143Fr 1 00 .lobytes %1000000000000000 -001440r 1 01 .lobytes %1000000000000001 -001441r 1 02 .lobytes %1000000000000010 -001442r 1 03 .lobytes %1000000000000011 -001443r 1 04 .lobytes %1000000000000100 -001444r 1 05 .lobytes %1000000000000101 -001445r 1 06 .lobytes %1000000000000110 -001446r 1 07 .lobytes %1000000000000111 -001447r 1 08 .lobytes %1000000000001000 -001448r 1 09 .lobytes %1000000000001001 -001449r 1 0A .lobytes %1000000000001010 -00144Ar 1 0B .lobytes %1000000000001011 -00144Br 1 E1 .lobytes %1001111111100001 -00144Cr 1 E2 .lobytes %1001111111100010 -00144Dr 1 E3 .lobytes %1001111111100011 -00144Er 1 E4 .lobytes %1001111111100100 -00144Fr 1 E5 .lobytes %1001111111100101 -001450r 1 E6 .lobytes %1001111111100110 -001451r 1 E7 .lobytes %1001111111100111 -001452r 1 E8 .lobytes %1001111111101000 -001453r 1 E9 .lobytes %1001111111101001 -001454r 1 EA .lobytes %1001111111101010 -001455r 1 EB .lobytes %1001111111101011 -001456r 1 EC .lobytes %1001111111101100 -001457r 1 ED .lobytes %1001111111101101 -001458r 1 EE .lobytes %1001111111101110 -001459r 1 EF .lobytes %1001111111101111 -00145Ar 1 F0 .lobytes %1001111111110000 -00145Br 1 F1 .lobytes %1001111111110001 -00145Cr 1 F2 .lobytes %1001111111110010 -00145Dr 1 F3 .lobytes %1001111111110011 -00145Er 1 F4 .lobytes %1001111111110100 -00145Fr 1 F5 .lobytes %1001111111110101 -001460r 1 F6 .lobytes %1001111111110110 -001461r 1 F7 .lobytes %1001111111110111 -001462r 1 F8 .lobytes %1001111111111000 -001463r 1 F9 .lobytes %1001111111111001 -001464r 1 FA .lobytes %1001111111111010 -001465r 1 FB .lobytes %1001111111111011 -001466r 1 FC .lobytes %1001111111111100 -001467r 1 FD .lobytes %1001111111111101 -001468r 1 FE .lobytes %1001111111111110 -001469r 1 FF .lobytes %1001111111111111 -00146Ar 1 00 .lobytes %1010000000000000 -00146Br 1 01 .lobytes %1010000000000001 -00146Cr 1 02 .lobytes %1010000000000010 -00146Dr 1 03 .lobytes %1010000000000011 -00146Er 1 04 .lobytes %1010000000000100 -00146Fr 1 05 .lobytes %1010000000000101 -001470r 1 06 .lobytes %1010000000000110 -001471r 1 07 .lobytes %1010000000000111 -001472r 1 08 .lobytes %1010000000001000 -001473r 1 09 .lobytes %1010000000001001 -001474r 1 0A .lobytes %1010000000001010 -001475r 1 0B .lobytes %1010000000001011 -001476r 1 0C .lobytes %1010000000001100 -001477r 1 0D .lobytes %1010000000001101 -001478r 1 0E .lobytes %1010000000001110 -001479r 1 0F .lobytes %1010000000001111 -00147Ar 1 E1 .lobytes %1010111111100001 -00147Br 1 E2 .lobytes %1010111111100010 -00147Cr 1 E3 .lobytes %1010111111100011 -00147Dr 1 E4 .lobytes %1010111111100100 -00147Er 1 E5 .lobytes %1010111111100101 -00147Fr 1 E6 .lobytes %1010111111100110 -001480r 1 E7 .lobytes %1010111111100111 -001481r 1 E8 .lobytes %1010111111101000 -001482r 1 E9 .lobytes %1010111111101001 -001483r 1 EA .lobytes %1010111111101010 -001484r 1 EB .lobytes %1010111111101011 -001485r 1 EC .lobytes %1010111111101100 -001486r 1 ED .lobytes %1010111111101101 -001487r 1 EE .lobytes %1010111111101110 -001488r 1 EF .lobytes %1010111111101111 -001489r 1 F0 .lobytes %1010111111110000 -00148Ar 1 F1 .lobytes %1010111111110001 -00148Br 1 F2 .lobytes %1010111111110010 -00148Cr 1 F3 .lobytes %1010111111110011 -00148Dr 1 F4 .lobytes %1010111111110100 -00148Er 1 F5 .lobytes %1010111111110101 -00148Fr 1 F6 .lobytes %1010111111110110 -001490r 1 F7 .lobytes %1010111111110111 -001491r 1 F8 .lobytes %1010111111111000 -001492r 1 F9 .lobytes %1010111111111001 -001493r 1 FA .lobytes %1010111111111010 -001494r 1 FB .lobytes %1010111111111011 -001495r 1 FC .lobytes %1010111111111100 -001496r 1 FD .lobytes %1010111111111101 -001497r 1 FE .lobytes %1010111111111110 -001498r 1 FF .lobytes %1010111111111111 -001499r 1 00 .lobytes %1011000000000000 -00149Ar 1 01 .lobytes %1011000000000001 -00149Br 1 02 .lobytes %1011000000000010 -00149Cr 1 03 .lobytes %1011000000000011 -00149Dr 1 04 .lobytes %1011000000000100 -00149Er 1 05 .lobytes %1011000000000101 -00149Fr 1 06 .lobytes %1011000000000110 -0014A0r 1 07 .lobytes %1011000000000111 -0014A1r 1 08 .lobytes %1011000000001000 -0014A2r 1 09 .lobytes %1011000000001001 -0014A3r 1 0A .lobytes %1011000000001010 -0014A4r 1 0B .lobytes %1011000000001011 -0014A5r 1 0C .lobytes %1011000000001100 -0014A6r 1 0D .lobytes %1011000000001101 -0014A7r 1 0E .lobytes %1011000000001110 -0014A8r 1 0F .lobytes %1011000000001111 -0014A9r 1 E1 .lobytes %1011111111100001 -0014AAr 1 E2 .lobytes %1011111111100010 -0014ABr 1 E3 .lobytes %1011111111100011 -0014ACr 1 E4 .lobytes %1011111111100100 -0014ADr 1 E5 .lobytes %1011111111100101 -0014AEr 1 E6 .lobytes %1011111111100110 -0014AFr 1 E7 .lobytes %1011111111100111 -0014B0r 1 E8 .lobytes %1011111111101000 -0014B1r 1 E9 .lobytes %1011111111101001 -0014B2r 1 EA .lobytes %1011111111101010 -0014B3r 1 EB .lobytes %1011111111101011 -0014B4r 1 EC .lobytes %1011111111101100 -0014B5r 1 ED .lobytes %1011111111101101 -0014B6r 1 EE .lobytes %1011111111101110 -0014B7r 1 EF .lobytes %1011111111101111 -0014B8r 1 F0 .lobytes %1011111111110000 -0014B9r 1 F1 .lobytes %1011111111110001 -0014BAr 1 F2 .lobytes %1011111111110010 -0014BBr 1 F3 .lobytes %1011111111110011 -0014BCr 1 F4 .lobytes %1011111111110100 -0014BDr 1 F5 .lobytes %1011111111110101 -0014BEr 1 F6 .lobytes %1011111111110110 -0014BFr 1 F7 .lobytes %1011111111110111 -0014C0r 1 F8 .lobytes %1011111111111000 -0014C1r 1 F9 .lobytes %1011111111111001 -0014C2r 1 FA .lobytes %1011111111111010 -0014C3r 1 FB .lobytes %1011111111111011 -0014C4r 1 FC .lobytes %1011111111111100 -0014C5r 1 FD .lobytes %1011111111111101 -0014C6r 1 FE .lobytes %1011111111111110 -0014C7r 1 FF .lobytes %1011111111111111 -0014C8r 1 00 .lobytes %1100000000000000 -0014C9r 1 01 .lobytes %1100000000000001 -0014CAr 1 02 .lobytes %1100000000000010 -0014CBr 1 03 .lobytes %1100000000000011 -0014CCr 1 04 .lobytes %1100000000000100 -0014CDr 1 05 .lobytes %1100000000000101 -0014CEr 1 06 .lobytes %1100000000000110 -0014CFr 1 07 .lobytes %1100000000000111 -0014D0r 1 08 .lobytes %1100000000001000 -0014D1r 1 09 .lobytes %1100000000001001 -0014D2r 1 0A .lobytes %1100000000001010 -0014D3r 1 0B .lobytes %1100000000001011 -0014D4r 1 0C .lobytes %1100000000001100 -0014D5r 1 0D .lobytes %1100000000001101 -0014D6r 1 0E .lobytes %1100000000001110 -0014D7r 1 0F .lobytes %1100000000001111 -0014D8r 1 E1 .lobytes %1100111111100001 -0014D9r 1 E2 .lobytes %1100111111100010 -0014DAr 1 E3 .lobytes %1100111111100011 -0014DBr 1 E4 .lobytes %1100111111100100 -0014DCr 1 E5 .lobytes %1100111111100101 -0014DDr 1 E6 .lobytes %1100111111100110 -0014DEr 1 E7 .lobytes %1100111111100111 -0014DFr 1 E8 .lobytes %1100111111101000 -0014E0r 1 E9 .lobytes %1100111111101001 -0014E1r 1 EA .lobytes %1100111111101010 -0014E2r 1 EB .lobytes %1100111111101011 -0014E3r 1 EC .lobytes %1100111111101100 -0014E4r 1 ED .lobytes %1100111111101101 -0014E5r 1 EE .lobytes %1100111111101110 -0014E6r 1 EF .lobytes %1100111111101111 -0014E7r 1 F0 .lobytes %1100111111110000 -0014E8r 1 F1 .lobytes %1100111111110001 -0014E9r 1 F2 .lobytes %1100111111110010 -0014EAr 1 F3 .lobytes %1100111111110011 -0014EBr 1 F4 .lobytes %1100111111110100 -0014ECr 1 F5 .lobytes %1100111111110101 -0014EDr 1 F6 .lobytes %1100111111110110 -0014EEr 1 F7 .lobytes %1100111111110111 -0014EFr 1 F8 .lobytes %1100111111111000 -0014F0r 1 F9 .lobytes %1100111111111001 -0014F1r 1 FA .lobytes %1100111111111010 -0014F2r 1 FB .lobytes %1100111111111011 -0014F3r 1 FC .lobytes %1100111111111100 -0014F4r 1 FD .lobytes %1100111111111101 -0014F5r 1 FE .lobytes %1100111111111110 -0014F6r 1 FF .lobytes %1100111111111111 -0014F7r 1 00 .lobytes %1101000000000000 -0014F8r 1 01 .lobytes %1101000000000001 -0014F9r 1 02 .lobytes %1101000000000010 -0014FAr 1 03 .lobytes %1101000000000011 -0014FBr 1 04 .lobytes %1101000000000100 -0014FCr 1 05 .lobytes %1101000000000101 -0014FDr 1 06 .lobytes %1101000000000110 -0014FEr 1 07 .lobytes %1101000000000111 -0014FFr 1 08 .lobytes %1101000000001000 -001500r 1 09 .lobytes %1101000000001001 -001501r 1 0A .lobytes %1101000000001010 -001502r 1 0B .lobytes %1101000000001011 -001503r 1 0C .lobytes %1101000000001100 -001504r 1 0D .lobytes %1101000000001101 -001505r 1 0E .lobytes %1101000000001110 -001506r 1 0F .lobytes %1101000000001111 -001507r 1 E1 .lobytes %1101111111100001 -001508r 1 E2 .lobytes %1101111111100010 -001509r 1 E3 .lobytes %1101111111100011 -00150Ar 1 E4 .lobytes %1101111111100100 -00150Br 1 E5 .lobytes %1101111111100101 -00150Cr 1 E6 .lobytes %1101111111100110 -00150Dr 1 E7 .lobytes %1101111111100111 -00150Er 1 E8 .lobytes %1101111111101000 -00150Fr 1 E9 .lobytes %1101111111101001 -001510r 1 EA .lobytes %1101111111101010 -001511r 1 EB .lobytes %1101111111101011 -001512r 1 EC .lobytes %1101111111101100 -001513r 1 ED .lobytes %1101111111101101 -001514r 1 EE .lobytes %1101111111101110 -001515r 1 EF .lobytes %1101111111101111 -001516r 1 F0 .lobytes %1101111111110000 -001517r 1 F1 .lobytes %1101111111110001 -001518r 1 F2 .lobytes %1101111111110010 -001519r 1 F3 .lobytes %1101111111110011 -00151Ar 1 F4 .lobytes %1101111111110100 -00151Br 1 F5 .lobytes %1101111111110101 -00151Cr 1 F6 .lobytes %1101111111110110 -00151Dr 1 F7 .lobytes %1101111111110111 -00151Er 1 F8 .lobytes %1101111111111000 -00151Fr 1 F9 .lobytes %1101111111111001 -001520r 1 FA .lobytes %1101111111111010 -001521r 1 FB .lobytes %1101111111111011 -001522r 1 FC .lobytes %1101111111111100 -001523r 1 FD .lobytes %1101111111111101 -001524r 1 FE .lobytes %1101111111111110 -001525r 1 FF .lobytes %1101111111111111 -001526r 1 00 .lobytes %1110000000000000 -001527r 1 01 .lobytes %1110000000000001 -001528r 1 02 .lobytes %1110000000000010 -001529r 1 03 .lobytes %1110000000000011 -00152Ar 1 04 .lobytes %1110000000000100 -00152Br 1 05 .lobytes %1110000000000101 -00152Cr 1 06 .lobytes %1110000000000110 -00152Dr 1 07 .lobytes %1110000000000111 -00152Er 1 08 .lobytes %1110000000001000 -00152Fr 1 09 .lobytes %1110000000001001 -001530r 1 0A .lobytes %1110000000001010 -001531r 1 0B .lobytes %1110000000001011 -001532r 1 0C .lobytes %1110000000001100 -001533r 1 0D .lobytes %1110000000001101 -001534r 1 0E .lobytes %1110000000001110 -001535r 1 0F .lobytes %1110000000001111 -001536r 1 E1 .lobytes %1110111111100001 -001537r 1 E2 .lobytes %1110111111100010 -001538r 1 E3 .lobytes %1110111111100011 -001539r 1 E4 .lobytes %1110111111100100 -00153Ar 1 E5 .lobytes %1110111111100101 -00153Br 1 E6 .lobytes %1110111111100110 -00153Cr 1 E7 .lobytes %1110111111100111 -00153Dr 1 E8 .lobytes %1110111111101000 -00153Er 1 E9 .lobytes %1110111111101001 -00153Fr 1 EA .lobytes %1110111111101010 -001540r 1 EB .lobytes %1110111111101011 -001541r 1 EC .lobytes %1110111111101100 -001542r 1 ED .lobytes %1110111111101101 -001543r 1 EE .lobytes %1110111111101110 -001544r 1 EF .lobytes %1110111111101111 -001545r 1 F0 .lobytes %1110111111110000 -001546r 1 F1 .lobytes %1110111111110001 -001547r 1 F2 .lobytes %1110111111110010 -001548r 1 F3 .lobytes %1110111111110011 -001549r 1 F4 .lobytes %1110111111110100 -00154Ar 1 F5 .lobytes %1110111111110101 -00154Br 1 F6 .lobytes %1110111111110110 -00154Cr 1 F7 .lobytes %1110111111110111 -00154Dr 1 F8 .lobytes %1110111111111000 -00154Er 1 F9 .lobytes %1110111111111001 -00154Fr 1 FA .lobytes %1110111111111010 -001550r 1 FB .lobytes %1110111111111011 -001551r 1 FC .lobytes %1110111111111100 -001552r 1 FD .lobytes %1110111111111101 -001553r 1 FE .lobytes %1110111111111110 -001554r 1 FF .lobytes %1110111111111111 -001555r 1 00 .lobytes %1111000000000000 -001556r 1 01 .lobytes %1111000000000001 -001557r 1 02 .lobytes %1111000000000010 -001558r 1 03 .lobytes %1111000000000011 -001559r 1 04 .lobytes %1111000000000100 -00155Ar 1 05 .lobytes %1111000000000101 -00155Br 1 06 .lobytes %1111000000000110 -00155Cr 1 07 .lobytes %1111000000000111 -00155Dr 1 08 .lobytes %1111000000001000 -00155Er 1 09 .lobytes %1111000000001001 -00155Fr 1 0A .lobytes %1111000000001010 -001560r 1 0B .lobytes %1111000000001011 -001561r 1 0C .lobytes %1111000000001100 -001562r 1 0D .lobytes %1111000000001101 -001563r 1 0E .lobytes %1111000000001110 -001564r 1 0F .lobytes %1111000000001111 -001565r 1 E1 .lobytes %1111111111100001 -001566r 1 E2 .lobytes %1111111111100010 -001567r 1 E3 .lobytes %1111111111100011 -001568r 1 E4 .lobytes %1111111111100100 -001569r 1 E5 .lobytes %1111111111100101 -00156Ar 1 E6 .lobytes %1111111111100110 -00156Br 1 E7 .lobytes %1111111111100111 -00156Cr 1 E8 .lobytes %1111111111101000 -00156Dr 1 E9 .lobytes %1111111111101001 -00156Er 1 EA .lobytes %1111111111101010 -00156Fr 1 EB .lobytes %1111111111101011 -001570r 1 EC .lobytes %1111111111101100 -001571r 1 ED .lobytes %1111111111101101 -001572r 1 EE .lobytes %1111111111101110 -001573r 1 EF .lobytes %1111111111101111 -001574r 1 F0 .lobytes %1111111111110000 -001575r 1 F1 .lobytes %1111111111110001 -001576r 1 F2 .lobytes %1111111111110010 -001577r 1 F3 .lobytes %1111111111110011 -001578r 1 F4 .lobytes %1111111111110100 -001579r 1 F5 .lobytes %1111111111110101 -00157Ar 1 F6 .lobytes %1111111111110110 -00157Br 1 F7 .lobytes %1111111111110111 -00157Cr 1 F8 .lobytes %1111111111111000 -00157Dr 1 F9 .lobytes %1111111111111001 -00157Er 1 FA .lobytes %1111111111111010 -00157Fr 1 FB .lobytes %1111111111111011 -001580r 1 FC .lobytes %1111111111111100 -001581r 1 FD .lobytes %1111111111111101 -001582r 1 FE .lobytes %1111111111111110 -001583r 1 FF .lobytes %1111111111111111 +0013B9r 1 ; binary values, variable length +0013B9r 1 00 .lobytes %0 +0013BAr 1 01 .lobytes %01 +0013BBr 1 02 .lobytes %010 +0013BCr 1 03 .lobytes %011 +0013BDr 1 04 .lobytes %0100 +0013BEr 1 05 .lobytes %0101 +0013BFr 1 06 .lobytes %0110 +0013C0r 1 07 .lobytes %0111 +0013C1r 1 08 .lobytes %01000 +0013C2r 1 09 .lobytes %01001 +0013C3r 1 0A .lobytes %01010 +0013C4r 1 0B .lobytes %01011 +0013C5r 1 0C .lobytes %01100 +0013C6r 1 0D .lobytes %01101 +0013C7r 1 0E .lobytes %01110 +0013C8r 1 0F .lobytes %01111 +0013C9r 1 10 .lobytes %010000 +0013CAr 1 11 .lobytes %010001 +0013CBr 1 12 .lobytes %010010 +0013CCr 1 13 .lobytes %010011 +0013CDr 1 70 .lobytes %01110000 +0013CEr 1 71 .lobytes %01110001 +0013CFr 1 72 .lobytes %01110010 +0013D0r 1 73 .lobytes %01110011 +0013D1r 1 74 .lobytes %01110100 +0013D2r 1 75 .lobytes %01110101 +0013D3r 1 76 .lobytes %01110110 +0013D4r 1 77 .lobytes %01110111 +0013D5r 1 78 .lobytes %01111000 +0013D6r 1 79 .lobytes %01111001 +0013D7r 1 7A .lobytes %01111010 +0013D8r 1 7B .lobytes %01111011 +0013D9r 1 7C .lobytes %01111100 +0013DAr 1 7D .lobytes %01111101 +0013DBr 1 7E .lobytes %01111110 +0013DCr 1 7F .lobytes %01111111 +0013DDr 1 80 .lobytes %010000000 +0013DEr 1 81 .lobytes %010000001 +0013DFr 1 82 .lobytes %010000010 +0013E0r 1 83 .lobytes %010000011 +0013E1r 1 84 .lobytes %010000100 +0013E2r 1 85 .lobytes %010000101 +0013E3r 1 86 .lobytes %010000110 +0013E4r 1 F0 .lobytes %011110000 +0013E5r 1 F1 .lobytes %011110001 +0013E6r 1 F2 .lobytes %011110010 +0013E7r 1 F3 .lobytes %011110011 +0013E8r 1 F4 .lobytes %011110100 +0013E9r 1 F5 .lobytes %011110101 +0013EAr 1 F6 .lobytes %011110110 +0013EBr 1 F7 .lobytes %011110111 +0013ECr 1 F8 .lobytes %011111000 +0013EDr 1 F9 .lobytes %011111001 +0013EEr 1 FA .lobytes %011111010 +0013EFr 1 FB .lobytes %011111011 +0013F0r 1 FC .lobytes %011111100 +0013F1r 1 FD .lobytes %011111101 +0013F2r 1 FE .lobytes %011111110 +0013F3r 1 FF .lobytes %011111111 +0013F4r 1 00 .lobytes %100000000 +0013F5r 1 01 .lobytes %100000001 +0013F6r 1 02 .lobytes %100000010 +0013F7r 1 03 .lobytes %100000011 +0013F8r 1 D2 .lobytes %111111010010 +0013F9r 1 D3 .lobytes %111111010011 +0013FAr 1 D4 .lobytes %111111010100 +0013FBr 1 D5 .lobytes %111111010101 +0013FCr 1 D6 .lobytes %111111010110 +0013FDr 1 D7 .lobytes %111111010111 +0013FEr 1 D8 .lobytes %111111011000 +0013FFr 1 D9 .lobytes %111111011001 +001400r 1 DA .lobytes %111111011010 +001401r 1 DB .lobytes %111111011011 +001402r 1 DC .lobytes %111111011100 +001403r 1 DD .lobytes %111111011101 +001404r 1 DE .lobytes %111111011110 +001405r 1 DF .lobytes %111111011111 +001406r 1 E0 .lobytes %111111100000 +001407r 1 E1 .lobytes %111111100001 +001408r 1 E2 .lobytes %111111100010 +001409r 1 E3 .lobytes %111111100011 +00140Ar 1 E4 .lobytes %111111100100 +00140Br 1 E5 .lobytes %111111100101 +00140Cr 1 E6 .lobytes %111111100110 +00140Dr 1 E7 .lobytes %111111100111 +00140Er 1 E8 .lobytes %111111101000 +00140Fr 1 E9 .lobytes %111111101001 +001410r 1 EA .lobytes %111111101010 +001411r 1 EB .lobytes %111111101011 +001412r 1 EC .lobytes %111111101100 +001413r 1 ED .lobytes %111111101101 +001414r 1 EE .lobytes %111111101110 +001415r 1 EF .lobytes %111111101111 +001416r 1 F0 .lobytes %111111110000 +001417r 1 F1 .lobytes %111111110001 +001418r 1 F2 .lobytes %111111110010 +001419r 1 F3 .lobytes %111111110011 +00141Ar 1 F4 .lobytes %111111110100 +00141Br 1 F5 .lobytes %111111110101 +00141Cr 1 F6 .lobytes %111111110110 +00141Dr 1 F7 .lobytes %111111110111 +00141Er 1 F8 .lobytes %111111111000 +00141Fr 1 F9 .lobytes %111111111001 +001420r 1 FA .lobytes %111111111010 +001421r 1 FB .lobytes %111111111011 +001422r 1 FC .lobytes %111111111100 +001423r 1 FD .lobytes %111111111101 +001424r 1 FE .lobytes %111111111110 +001425r 1 FF .lobytes %111111111111 +001426r 1 00 .lobytes %1000000000000 +001427r 1 01 .lobytes %1000000000001 +001428r 1 02 .lobytes %1000000000010 +001429r 1 03 .lobytes %1000000000011 +00142Ar 1 04 .lobytes %1000000000100 +00142Br 1 05 .lobytes %1000000000101 +00142Cr 1 06 .lobytes %1000000000110 +00142Dr 1 07 .lobytes %1000000000111 +00142Er 1 08 .lobytes %1000000001000 +00142Fr 1 F0 .lobytes %111111111110000 +001430r 1 F1 .lobytes %111111111110001 +001431r 1 F2 .lobytes %111111111110010 +001432r 1 F3 .lobytes %111111111110011 +001433r 1 F4 .lobytes %111111111110100 +001434r 1 F5 .lobytes %111111111110101 +001435r 1 F6 .lobytes %111111111110110 +001436r 1 F7 .lobytes %111111111110111 +001437r 1 F8 .lobytes %111111111111000 +001438r 1 F9 .lobytes %111111111111001 +001439r 1 FA .lobytes %111111111111010 +00143Ar 1 FB .lobytes %111111111111011 +00143Br 1 FC .lobytes %111111111111100 +00143Cr 1 FD .lobytes %111111111111101 +00143Dr 1 FE .lobytes %111111111111110 +00143Er 1 FF .lobytes %111111111111111 +00143Fr 1 00 .lobytes %1000000000000000 +001440r 1 01 .lobytes %1000000000000001 +001441r 1 02 .lobytes %1000000000000010 +001442r 1 03 .lobytes %1000000000000011 +001443r 1 04 .lobytes %1000000000000100 +001444r 1 05 .lobytes %1000000000000101 +001445r 1 06 .lobytes %1000000000000110 +001446r 1 07 .lobytes %1000000000000111 +001447r 1 08 .lobytes %1000000000001000 +001448r 1 09 .lobytes %1000000000001001 +001449r 1 0A .lobytes %1000000000001010 +00144Ar 1 0B .lobytes %1000000000001011 +00144Br 1 E1 .lobytes %1001111111100001 +00144Cr 1 E2 .lobytes %1001111111100010 +00144Dr 1 E3 .lobytes %1001111111100011 +00144Er 1 E4 .lobytes %1001111111100100 +00144Fr 1 E5 .lobytes %1001111111100101 +001450r 1 E6 .lobytes %1001111111100110 +001451r 1 E7 .lobytes %1001111111100111 +001452r 1 E8 .lobytes %1001111111101000 +001453r 1 E9 .lobytes %1001111111101001 +001454r 1 EA .lobytes %1001111111101010 +001455r 1 EB .lobytes %1001111111101011 +001456r 1 EC .lobytes %1001111111101100 +001457r 1 ED .lobytes %1001111111101101 +001458r 1 EE .lobytes %1001111111101110 +001459r 1 EF .lobytes %1001111111101111 +00145Ar 1 F0 .lobytes %1001111111110000 +00145Br 1 F1 .lobytes %1001111111110001 +00145Cr 1 F2 .lobytes %1001111111110010 +00145Dr 1 F3 .lobytes %1001111111110011 +00145Er 1 F4 .lobytes %1001111111110100 +00145Fr 1 F5 .lobytes %1001111111110101 +001460r 1 F6 .lobytes %1001111111110110 +001461r 1 F7 .lobytes %1001111111110111 +001462r 1 F8 .lobytes %1001111111111000 +001463r 1 F9 .lobytes %1001111111111001 +001464r 1 FA .lobytes %1001111111111010 +001465r 1 FB .lobytes %1001111111111011 +001466r 1 FC .lobytes %1001111111111100 +001467r 1 FD .lobytes %1001111111111101 +001468r 1 FE .lobytes %1001111111111110 +001469r 1 FF .lobytes %1001111111111111 +00146Ar 1 00 .lobytes %1010000000000000 +00146Br 1 01 .lobytes %1010000000000001 +00146Cr 1 02 .lobytes %1010000000000010 +00146Dr 1 03 .lobytes %1010000000000011 +00146Er 1 04 .lobytes %1010000000000100 +00146Fr 1 05 .lobytes %1010000000000101 +001470r 1 06 .lobytes %1010000000000110 +001471r 1 07 .lobytes %1010000000000111 +001472r 1 08 .lobytes %1010000000001000 +001473r 1 09 .lobytes %1010000000001001 +001474r 1 0A .lobytes %1010000000001010 +001475r 1 0B .lobytes %1010000000001011 +001476r 1 0C .lobytes %1010000000001100 +001477r 1 0D .lobytes %1010000000001101 +001478r 1 0E .lobytes %1010000000001110 +001479r 1 0F .lobytes %1010000000001111 +00147Ar 1 E1 .lobytes %1010111111100001 +00147Br 1 E2 .lobytes %1010111111100010 +00147Cr 1 E3 .lobytes %1010111111100011 +00147Dr 1 E4 .lobytes %1010111111100100 +00147Er 1 E5 .lobytes %1010111111100101 +00147Fr 1 E6 .lobytes %1010111111100110 +001480r 1 E7 .lobytes %1010111111100111 +001481r 1 E8 .lobytes %1010111111101000 +001482r 1 E9 .lobytes %1010111111101001 +001483r 1 EA .lobytes %1010111111101010 +001484r 1 EB .lobytes %1010111111101011 +001485r 1 EC .lobytes %1010111111101100 +001486r 1 ED .lobytes %1010111111101101 +001487r 1 EE .lobytes %1010111111101110 +001488r 1 EF .lobytes %1010111111101111 +001489r 1 F0 .lobytes %1010111111110000 +00148Ar 1 F1 .lobytes %1010111111110001 +00148Br 1 F2 .lobytes %1010111111110010 +00148Cr 1 F3 .lobytes %1010111111110011 +00148Dr 1 F4 .lobytes %1010111111110100 +00148Er 1 F5 .lobytes %1010111111110101 +00148Fr 1 F6 .lobytes %1010111111110110 +001490r 1 F7 .lobytes %1010111111110111 +001491r 1 F8 .lobytes %1010111111111000 +001492r 1 F9 .lobytes %1010111111111001 +001493r 1 FA .lobytes %1010111111111010 +001494r 1 FB .lobytes %1010111111111011 +001495r 1 FC .lobytes %1010111111111100 +001496r 1 FD .lobytes %1010111111111101 +001497r 1 FE .lobytes %1010111111111110 +001498r 1 FF .lobytes %1010111111111111 +001499r 1 00 .lobytes %1011000000000000 +00149Ar 1 01 .lobytes %1011000000000001 +00149Br 1 02 .lobytes %1011000000000010 +00149Cr 1 03 .lobytes %1011000000000011 +00149Dr 1 04 .lobytes %1011000000000100 +00149Er 1 05 .lobytes %1011000000000101 +00149Fr 1 06 .lobytes %1011000000000110 +0014A0r 1 07 .lobytes %1011000000000111 +0014A1r 1 08 .lobytes %1011000000001000 +0014A2r 1 09 .lobytes %1011000000001001 +0014A3r 1 0A .lobytes %1011000000001010 +0014A4r 1 0B .lobytes %1011000000001011 +0014A5r 1 0C .lobytes %1011000000001100 +0014A6r 1 0D .lobytes %1011000000001101 +0014A7r 1 0E .lobytes %1011000000001110 +0014A8r 1 0F .lobytes %1011000000001111 +0014A9r 1 E1 .lobytes %1011111111100001 +0014AAr 1 E2 .lobytes %1011111111100010 +0014ABr 1 E3 .lobytes %1011111111100011 +0014ACr 1 E4 .lobytes %1011111111100100 +0014ADr 1 E5 .lobytes %1011111111100101 +0014AEr 1 E6 .lobytes %1011111111100110 +0014AFr 1 E7 .lobytes %1011111111100111 +0014B0r 1 E8 .lobytes %1011111111101000 +0014B1r 1 E9 .lobytes %1011111111101001 +0014B2r 1 EA .lobytes %1011111111101010 +0014B3r 1 EB .lobytes %1011111111101011 +0014B4r 1 EC .lobytes %1011111111101100 +0014B5r 1 ED .lobytes %1011111111101101 +0014B6r 1 EE .lobytes %1011111111101110 +0014B7r 1 EF .lobytes %1011111111101111 +0014B8r 1 F0 .lobytes %1011111111110000 +0014B9r 1 F1 .lobytes %1011111111110001 +0014BAr 1 F2 .lobytes %1011111111110010 +0014BBr 1 F3 .lobytes %1011111111110011 +0014BCr 1 F4 .lobytes %1011111111110100 +0014BDr 1 F5 .lobytes %1011111111110101 +0014BEr 1 F6 .lobytes %1011111111110110 +0014BFr 1 F7 .lobytes %1011111111110111 +0014C0r 1 F8 .lobytes %1011111111111000 +0014C1r 1 F9 .lobytes %1011111111111001 +0014C2r 1 FA .lobytes %1011111111111010 +0014C3r 1 FB .lobytes %1011111111111011 +0014C4r 1 FC .lobytes %1011111111111100 +0014C5r 1 FD .lobytes %1011111111111101 +0014C6r 1 FE .lobytes %1011111111111110 +0014C7r 1 FF .lobytes %1011111111111111 +0014C8r 1 00 .lobytes %1100000000000000 +0014C9r 1 01 .lobytes %1100000000000001 +0014CAr 1 02 .lobytes %1100000000000010 +0014CBr 1 03 .lobytes %1100000000000011 +0014CCr 1 04 .lobytes %1100000000000100 +0014CDr 1 05 .lobytes %1100000000000101 +0014CEr 1 06 .lobytes %1100000000000110 +0014CFr 1 07 .lobytes %1100000000000111 +0014D0r 1 08 .lobytes %1100000000001000 +0014D1r 1 09 .lobytes %1100000000001001 +0014D2r 1 0A .lobytes %1100000000001010 +0014D3r 1 0B .lobytes %1100000000001011 +0014D4r 1 0C .lobytes %1100000000001100 +0014D5r 1 0D .lobytes %1100000000001101 +0014D6r 1 0E .lobytes %1100000000001110 +0014D7r 1 0F .lobytes %1100000000001111 +0014D8r 1 E1 .lobytes %1100111111100001 +0014D9r 1 E2 .lobytes %1100111111100010 +0014DAr 1 E3 .lobytes %1100111111100011 +0014DBr 1 E4 .lobytes %1100111111100100 +0014DCr 1 E5 .lobytes %1100111111100101 +0014DDr 1 E6 .lobytes %1100111111100110 +0014DEr 1 E7 .lobytes %1100111111100111 +0014DFr 1 E8 .lobytes %1100111111101000 +0014E0r 1 E9 .lobytes %1100111111101001 +0014E1r 1 EA .lobytes %1100111111101010 +0014E2r 1 EB .lobytes %1100111111101011 +0014E3r 1 EC .lobytes %1100111111101100 +0014E4r 1 ED .lobytes %1100111111101101 +0014E5r 1 EE .lobytes %1100111111101110 +0014E6r 1 EF .lobytes %1100111111101111 +0014E7r 1 F0 .lobytes %1100111111110000 +0014E8r 1 F1 .lobytes %1100111111110001 +0014E9r 1 F2 .lobytes %1100111111110010 +0014EAr 1 F3 .lobytes %1100111111110011 +0014EBr 1 F4 .lobytes %1100111111110100 +0014ECr 1 F5 .lobytes %1100111111110101 +0014EDr 1 F6 .lobytes %1100111111110110 +0014EEr 1 F7 .lobytes %1100111111110111 +0014EFr 1 F8 .lobytes %1100111111111000 +0014F0r 1 F9 .lobytes %1100111111111001 +0014F1r 1 FA .lobytes %1100111111111010 +0014F2r 1 FB .lobytes %1100111111111011 +0014F3r 1 FC .lobytes %1100111111111100 +0014F4r 1 FD .lobytes %1100111111111101 +0014F5r 1 FE .lobytes %1100111111111110 +0014F6r 1 FF .lobytes %1100111111111111 +0014F7r 1 00 .lobytes %1101000000000000 +0014F8r 1 01 .lobytes %1101000000000001 +0014F9r 1 02 .lobytes %1101000000000010 +0014FAr 1 03 .lobytes %1101000000000011 +0014FBr 1 04 .lobytes %1101000000000100 +0014FCr 1 05 .lobytes %1101000000000101 +0014FDr 1 06 .lobytes %1101000000000110 +0014FEr 1 07 .lobytes %1101000000000111 +0014FFr 1 08 .lobytes %1101000000001000 +001500r 1 09 .lobytes %1101000000001001 +001501r 1 0A .lobytes %1101000000001010 +001502r 1 0B .lobytes %1101000000001011 +001503r 1 0C .lobytes %1101000000001100 +001504r 1 0D .lobytes %1101000000001101 +001505r 1 0E .lobytes %1101000000001110 +001506r 1 0F .lobytes %1101000000001111 +001507r 1 E1 .lobytes %1101111111100001 +001508r 1 E2 .lobytes %1101111111100010 +001509r 1 E3 .lobytes %1101111111100011 +00150Ar 1 E4 .lobytes %1101111111100100 +00150Br 1 E5 .lobytes %1101111111100101 +00150Cr 1 E6 .lobytes %1101111111100110 +00150Dr 1 E7 .lobytes %1101111111100111 +00150Er 1 E8 .lobytes %1101111111101000 +00150Fr 1 E9 .lobytes %1101111111101001 +001510r 1 EA .lobytes %1101111111101010 +001511r 1 EB .lobytes %1101111111101011 +001512r 1 EC .lobytes %1101111111101100 +001513r 1 ED .lobytes %1101111111101101 +001514r 1 EE .lobytes %1101111111101110 +001515r 1 EF .lobytes %1101111111101111 +001516r 1 F0 .lobytes %1101111111110000 +001517r 1 F1 .lobytes %1101111111110001 +001518r 1 F2 .lobytes %1101111111110010 +001519r 1 F3 .lobytes %1101111111110011 +00151Ar 1 F4 .lobytes %1101111111110100 +00151Br 1 F5 .lobytes %1101111111110101 +00151Cr 1 F6 .lobytes %1101111111110110 +00151Dr 1 F7 .lobytes %1101111111110111 +00151Er 1 F8 .lobytes %1101111111111000 +00151Fr 1 F9 .lobytes %1101111111111001 +001520r 1 FA .lobytes %1101111111111010 +001521r 1 FB .lobytes %1101111111111011 +001522r 1 FC .lobytes %1101111111111100 +001523r 1 FD .lobytes %1101111111111101 +001524r 1 FE .lobytes %1101111111111110 +001525r 1 FF .lobytes %1101111111111111 +001526r 1 00 .lobytes %1110000000000000 +001527r 1 01 .lobytes %1110000000000001 +001528r 1 02 .lobytes %1110000000000010 +001529r 1 03 .lobytes %1110000000000011 +00152Ar 1 04 .lobytes %1110000000000100 +00152Br 1 05 .lobytes %1110000000000101 +00152Cr 1 06 .lobytes %1110000000000110 +00152Dr 1 07 .lobytes %1110000000000111 +00152Er 1 08 .lobytes %1110000000001000 +00152Fr 1 09 .lobytes %1110000000001001 +001530r 1 0A .lobytes %1110000000001010 +001531r 1 0B .lobytes %1110000000001011 +001532r 1 0C .lobytes %1110000000001100 +001533r 1 0D .lobytes %1110000000001101 +001534r 1 0E .lobytes %1110000000001110 +001535r 1 0F .lobytes %1110000000001111 +001536r 1 E1 .lobytes %1110111111100001 +001537r 1 E2 .lobytes %1110111111100010 +001538r 1 E3 .lobytes %1110111111100011 +001539r 1 E4 .lobytes %1110111111100100 +00153Ar 1 E5 .lobytes %1110111111100101 +00153Br 1 E6 .lobytes %1110111111100110 +00153Cr 1 E7 .lobytes %1110111111100111 +00153Dr 1 E8 .lobytes %1110111111101000 +00153Er 1 E9 .lobytes %1110111111101001 +00153Fr 1 EA .lobytes %1110111111101010 +001540r 1 EB .lobytes %1110111111101011 +001541r 1 EC .lobytes %1110111111101100 +001542r 1 ED .lobytes %1110111111101101 +001543r 1 EE .lobytes %1110111111101110 +001544r 1 EF .lobytes %1110111111101111 +001545r 1 F0 .lobytes %1110111111110000 +001546r 1 F1 .lobytes %1110111111110001 +001547r 1 F2 .lobytes %1110111111110010 +001548r 1 F3 .lobytes %1110111111110011 +001549r 1 F4 .lobytes %1110111111110100 +00154Ar 1 F5 .lobytes %1110111111110101 +00154Br 1 F6 .lobytes %1110111111110110 +00154Cr 1 F7 .lobytes %1110111111110111 +00154Dr 1 F8 .lobytes %1110111111111000 +00154Er 1 F9 .lobytes %1110111111111001 +00154Fr 1 FA .lobytes %1110111111111010 +001550r 1 FB .lobytes %1110111111111011 +001551r 1 FC .lobytes %1110111111111100 +001552r 1 FD .lobytes %1110111111111101 +001553r 1 FE .lobytes %1110111111111110 +001554r 1 FF .lobytes %1110111111111111 +001555r 1 00 .lobytes %1111000000000000 +001556r 1 01 .lobytes %1111000000000001 +001557r 1 02 .lobytes %1111000000000010 +001558r 1 03 .lobytes %1111000000000011 +001559r 1 04 .lobytes %1111000000000100 +00155Ar 1 05 .lobytes %1111000000000101 +00155Br 1 06 .lobytes %1111000000000110 +00155Cr 1 07 .lobytes %1111000000000111 +00155Dr 1 08 .lobytes %1111000000001000 +00155Er 1 09 .lobytes %1111000000001001 +00155Fr 1 0A .lobytes %1111000000001010 +001560r 1 0B .lobytes %1111000000001011 +001561r 1 0C .lobytes %1111000000001100 +001562r 1 0D .lobytes %1111000000001101 +001563r 1 0E .lobytes %1111000000001110 +001564r 1 0F .lobytes %1111000000001111 +001565r 1 E1 .lobytes %1111111111100001 +001566r 1 E2 .lobytes %1111111111100010 +001567r 1 E3 .lobytes %1111111111100011 +001568r 1 E4 .lobytes %1111111111100100 +001569r 1 E5 .lobytes %1111111111100101 +00156Ar 1 E6 .lobytes %1111111111100110 +00156Br 1 E7 .lobytes %1111111111100111 +00156Cr 1 E8 .lobytes %1111111111101000 +00156Dr 1 E9 .lobytes %1111111111101001 +00156Er 1 EA .lobytes %1111111111101010 +00156Fr 1 EB .lobytes %1111111111101011 +001570r 1 EC .lobytes %1111111111101100 +001571r 1 ED .lobytes %1111111111101101 +001572r 1 EE .lobytes %1111111111101110 +001573r 1 EF .lobytes %1111111111101111 +001574r 1 F0 .lobytes %1111111111110000 +001575r 1 F1 .lobytes %1111111111110001 +001576r 1 F2 .lobytes %1111111111110010 +001577r 1 F3 .lobytes %1111111111110011 +001578r 1 F4 .lobytes %1111111111110100 +001579r 1 F5 .lobytes %1111111111110101 +00157Ar 1 F6 .lobytes %1111111111110110 +00157Br 1 F7 .lobytes %1111111111110111 +00157Cr 1 F8 .lobytes %1111111111111000 +00157Dr 1 F9 .lobytes %1111111111111001 +00157Er 1 FA .lobytes %1111111111111010 +00157Fr 1 FB .lobytes %1111111111111011 +001580r 1 FC .lobytes %1111111111111100 +001581r 1 FD .lobytes %1111111111111101 +001582r 1 FE .lobytes %1111111111111110 +001583r 1 FF .lobytes %1111111111111111 001584r 1 -001584r 1 ; binary values, full length -001584r 1 00 .lobytes %0000000000000000 -001585r 1 01 .lobytes %0000000000000001 -001586r 1 02 .lobytes %0000000000000010 -001587r 1 03 .lobytes %0000000000000011 -001588r 1 04 .lobytes %0000000000000100 -001589r 1 05 .lobytes %0000000000000101 -00158Ar 1 06 .lobytes %0000000000000110 -00158Br 1 07 .lobytes %0000000000000111 -00158Cr 1 08 .lobytes %0000000000001000 -00158Dr 1 09 .lobytes %0000000000001001 -00158Er 1 0A .lobytes %0000000000001010 -00158Fr 1 0B .lobytes %0000000000001011 -001590r 1 0C .lobytes %0000000000001100 -001591r 1 0D .lobytes %0000000000001101 -001592r 1 0E .lobytes %0000000000001110 -001593r 1 0F .lobytes %0000000000001111 -001594r 1 10 .lobytes %0000000000010000 -001595r 1 11 .lobytes %0000000000010001 -001596r 1 12 .lobytes %0000000000010010 -001597r 1 13 .lobytes %0000000000010011 -001598r 1 70 .lobytes %0000000001110000 -001599r 1 71 .lobytes %0000000001110001 -00159Ar 1 72 .lobytes %0000000001110010 -00159Br 1 73 .lobytes %0000000001110011 -00159Cr 1 74 .lobytes %0000000001110100 -00159Dr 1 75 .lobytes %0000000001110101 -00159Er 1 76 .lobytes %0000000001110110 -00159Fr 1 77 .lobytes %0000000001110111 -0015A0r 1 78 .lobytes %0000000001111000 -0015A1r 1 79 .lobytes %0000000001111001 -0015A2r 1 7A .lobytes %0000000001111010 -0015A3r 1 7B .lobytes %0000000001111011 -0015A4r 1 7C .lobytes %0000000001111100 -0015A5r 1 7D .lobytes %0000000001111101 -0015A6r 1 7E .lobytes %0000000001111110 -0015A7r 1 7F .lobytes %0000000001111111 -0015A8r 1 80 .lobytes %0000000010000000 -0015A9r 1 81 .lobytes %0000000010000001 -0015AAr 1 82 .lobytes %0000000010000010 -0015ABr 1 83 .lobytes %0000000010000011 -0015ACr 1 84 .lobytes %0000000010000100 -0015ADr 1 85 .lobytes %0000000010000101 -0015AEr 1 86 .lobytes %0000000010000110 -0015AFr 1 F0 .lobytes %0000000011110000 -0015B0r 1 F1 .lobytes %0000000011110001 -0015B1r 1 F2 .lobytes %0000000011110010 -0015B2r 1 F3 .lobytes %0000000011110011 -0015B3r 1 F4 .lobytes %0000000011110100 -0015B4r 1 F5 .lobytes %0000000011110101 -0015B5r 1 F6 .lobytes %0000000011110110 -0015B6r 1 F7 .lobytes %0000000011110111 -0015B7r 1 F8 .lobytes %0000000011111000 -0015B8r 1 F9 .lobytes %0000000011111001 -0015B9r 1 FA .lobytes %0000000011111010 -0015BAr 1 FB .lobytes %0000000011111011 -0015BBr 1 FC .lobytes %0000000011111100 -0015BCr 1 FD .lobytes %0000000011111101 -0015BDr 1 FE .lobytes %0000000011111110 -0015BEr 1 FF .lobytes %0000000011111111 -0015BFr 1 00 .lobytes %0000000100000000 -0015C0r 1 01 .lobytes %0000000100000001 -0015C1r 1 02 .lobytes %0000000100000010 -0015C2r 1 03 .lobytes %0000000100000011 -0015C3r 1 D2 .lobytes %0000111111010010 -0015C4r 1 D3 .lobytes %0000111111010011 -0015C5r 1 D4 .lobytes %0000111111010100 -0015C6r 1 D5 .lobytes %0000111111010101 -0015C7r 1 D6 .lobytes %0000111111010110 -0015C8r 1 D7 .lobytes %0000111111010111 -0015C9r 1 D8 .lobytes %0000111111011000 -0015CAr 1 D9 .lobytes %0000111111011001 -0015CBr 1 DA .lobytes %0000111111011010 -0015CCr 1 DB .lobytes %0000111111011011 -0015CDr 1 DC .lobytes %0000111111011100 -0015CEr 1 DD .lobytes %0000111111011101 -0015CFr 1 DE .lobytes %0000111111011110 -0015D0r 1 DF .lobytes %0000111111011111 -0015D1r 1 E0 .lobytes %0000111111100000 -0015D2r 1 E1 .lobytes %0000111111100001 -0015D3r 1 E2 .lobytes %0000111111100010 -0015D4r 1 E3 .lobytes %0000111111100011 -0015D5r 1 E4 .lobytes %0000111111100100 -0015D6r 1 E5 .lobytes %0000111111100101 -0015D7r 1 E6 .lobytes %0000111111100110 -0015D8r 1 E7 .lobytes %0000111111100111 -0015D9r 1 E8 .lobytes %0000111111101000 -0015DAr 1 E9 .lobytes %0000111111101001 -0015DBr 1 EA .lobytes %0000111111101010 -0015DCr 1 EB .lobytes %0000111111101011 -0015DDr 1 EC .lobytes %0000111111101100 -0015DEr 1 ED .lobytes %0000111111101101 -0015DFr 1 EE .lobytes %0000111111101110 -0015E0r 1 EF .lobytes %0000111111101111 -0015E1r 1 F0 .lobytes %0000111111110000 -0015E2r 1 F1 .lobytes %0000111111110001 -0015E3r 1 F2 .lobytes %0000111111110010 -0015E4r 1 F3 .lobytes %0000111111110011 -0015E5r 1 F4 .lobytes %0000111111110100 -0015E6r 1 F5 .lobytes %0000111111110101 -0015E7r 1 F6 .lobytes %0000111111110110 -0015E8r 1 F7 .lobytes %0000111111110111 -0015E9r 1 F8 .lobytes %0000111111111000 -0015EAr 1 F9 .lobytes %0000111111111001 -0015EBr 1 FA .lobytes %0000111111111010 -0015ECr 1 FB .lobytes %0000111111111011 -0015EDr 1 FC .lobytes %0000111111111100 -0015EEr 1 FD .lobytes %0000111111111101 -0015EFr 1 FE .lobytes %0000111111111110 -0015F0r 1 FF .lobytes %0000111111111111 -0015F1r 1 00 .lobytes %0001000000000000 -0015F2r 1 01 .lobytes %0001000000000001 -0015F3r 1 02 .lobytes %0001000000000010 -0015F4r 1 03 .lobytes %0001000000000011 -0015F5r 1 04 .lobytes %0001000000000100 -0015F6r 1 05 .lobytes %0001000000000101 -0015F7r 1 06 .lobytes %0001000000000110 -0015F8r 1 07 .lobytes %0001000000000111 -0015F9r 1 08 .lobytes %0001000000001000 -0015FAr 1 F0 .lobytes %0111111111110000 -0015FBr 1 F1 .lobytes %0111111111110001 -0015FCr 1 F2 .lobytes %0111111111110010 -0015FDr 1 F3 .lobytes %0111111111110011 -0015FEr 1 F4 .lobytes %0111111111110100 -0015FFr 1 F5 .lobytes %0111111111110101 -001600r 1 F6 .lobytes %0111111111110110 -001601r 1 F7 .lobytes %0111111111110111 -001602r 1 F8 .lobytes %0111111111111000 -001603r 1 F9 .lobytes %0111111111111001 -001604r 1 FA .lobytes %0111111111111010 -001605r 1 FB .lobytes %0111111111111011 -001606r 1 FC .lobytes %0111111111111100 -001607r 1 FD .lobytes %0111111111111101 -001608r 1 FE .lobytes %0111111111111110 -001609r 1 FF .lobytes %0111111111111111 -00160Ar 1 00 .lobytes %1000000000000000 -00160Br 1 01 .lobytes %1000000000000001 -00160Cr 1 02 .lobytes %1000000000000010 -00160Dr 1 03 .lobytes %1000000000000011 -00160Er 1 04 .lobytes %1000000000000100 -00160Fr 1 05 .lobytes %1000000000000101 -001610r 1 06 .lobytes %1000000000000110 -001611r 1 07 .lobytes %1000000000000111 -001612r 1 08 .lobytes %1000000000001000 -001613r 1 09 .lobytes %1000000000001001 -001614r 1 0A .lobytes %1000000000001010 -001615r 1 0B .lobytes %1000000000001011 -001616r 1 E1 .lobytes %1001111111100001 -001617r 1 E2 .lobytes %1001111111100010 -001618r 1 E3 .lobytes %1001111111100011 -001619r 1 E4 .lobytes %1001111111100100 -00161Ar 1 E5 .lobytes %1001111111100101 -00161Br 1 E6 .lobytes %1001111111100110 -00161Cr 1 E7 .lobytes %1001111111100111 -00161Dr 1 E8 .lobytes %1001111111101000 -00161Er 1 E9 .lobytes %1001111111101001 -00161Fr 1 EA .lobytes %1001111111101010 -001620r 1 EB .lobytes %1001111111101011 -001621r 1 EC .lobytes %1001111111101100 -001622r 1 ED .lobytes %1001111111101101 -001623r 1 EE .lobytes %1001111111101110 -001624r 1 EF .lobytes %1001111111101111 -001625r 1 F0 .lobytes %1001111111110000 -001626r 1 F1 .lobytes %1001111111110001 -001627r 1 F2 .lobytes %1001111111110010 -001628r 1 F3 .lobytes %1001111111110011 -001629r 1 F4 .lobytes %1001111111110100 -00162Ar 1 F5 .lobytes %1001111111110101 -00162Br 1 F6 .lobytes %1001111111110110 -00162Cr 1 F7 .lobytes %1001111111110111 -00162Dr 1 F8 .lobytes %1001111111111000 -00162Er 1 F9 .lobytes %1001111111111001 -00162Fr 1 FA .lobytes %1001111111111010 -001630r 1 FB .lobytes %1001111111111011 -001631r 1 FC .lobytes %1001111111111100 -001632r 1 FD .lobytes %1001111111111101 -001633r 1 FE .lobytes %1001111111111110 -001634r 1 FF .lobytes %1001111111111111 -001635r 1 00 .lobytes %1010000000000000 -001636r 1 01 .lobytes %1010000000000001 -001637r 1 02 .lobytes %1010000000000010 -001638r 1 03 .lobytes %1010000000000011 -001639r 1 04 .lobytes %1010000000000100 -00163Ar 1 05 .lobytes %1010000000000101 -00163Br 1 06 .lobytes %1010000000000110 -00163Cr 1 07 .lobytes %1010000000000111 -00163Dr 1 08 .lobytes %1010000000001000 -00163Er 1 09 .lobytes %1010000000001001 -00163Fr 1 0A .lobytes %1010000000001010 -001640r 1 0B .lobytes %1010000000001011 -001641r 1 0C .lobytes %1010000000001100 -001642r 1 0D .lobytes %1010000000001101 -001643r 1 0E .lobytes %1010000000001110 -001644r 1 0F .lobytes %1010000000001111 -001645r 1 E1 .lobytes %1010111111100001 -001646r 1 E2 .lobytes %1010111111100010 -001647r 1 E3 .lobytes %1010111111100011 -001648r 1 E4 .lobytes %1010111111100100 -001649r 1 E5 .lobytes %1010111111100101 -00164Ar 1 E6 .lobytes %1010111111100110 -00164Br 1 E7 .lobytes %1010111111100111 -00164Cr 1 E8 .lobytes %1010111111101000 -00164Dr 1 E9 .lobytes %1010111111101001 -00164Er 1 EA .lobytes %1010111111101010 -00164Fr 1 EB .lobytes %1010111111101011 -001650r 1 EC .lobytes %1010111111101100 -001651r 1 ED .lobytes %1010111111101101 -001652r 1 EE .lobytes %1010111111101110 -001653r 1 EF .lobytes %1010111111101111 -001654r 1 F0 .lobytes %1010111111110000 -001655r 1 F1 .lobytes %1010111111110001 -001656r 1 F2 .lobytes %1010111111110010 -001657r 1 F3 .lobytes %1010111111110011 -001658r 1 F4 .lobytes %1010111111110100 -001659r 1 F5 .lobytes %1010111111110101 -00165Ar 1 F6 .lobytes %1010111111110110 -00165Br 1 F7 .lobytes %1010111111110111 -00165Cr 1 F8 .lobytes %1010111111111000 -00165Dr 1 F9 .lobytes %1010111111111001 -00165Er 1 FA .lobytes %1010111111111010 -00165Fr 1 FB .lobytes %1010111111111011 -001660r 1 FC .lobytes %1010111111111100 -001661r 1 FD .lobytes %1010111111111101 -001662r 1 FE .lobytes %1010111111111110 -001663r 1 FF .lobytes %1010111111111111 -001664r 1 00 .lobytes %1011000000000000 -001665r 1 01 .lobytes %1011000000000001 -001666r 1 02 .lobytes %1011000000000010 -001667r 1 03 .lobytes %1011000000000011 -001668r 1 04 .lobytes %1011000000000100 -001669r 1 05 .lobytes %1011000000000101 -00166Ar 1 06 .lobytes %1011000000000110 -00166Br 1 07 .lobytes %1011000000000111 -00166Cr 1 08 .lobytes %1011000000001000 -00166Dr 1 09 .lobytes %1011000000001001 -00166Er 1 0A .lobytes %1011000000001010 -00166Fr 1 0B .lobytes %1011000000001011 -001670r 1 0C .lobytes %1011000000001100 -001671r 1 0D .lobytes %1011000000001101 -001672r 1 0E .lobytes %1011000000001110 -001673r 1 0F .lobytes %1011000000001111 -001674r 1 E1 .lobytes %1011111111100001 -001675r 1 E2 .lobytes %1011111111100010 -001676r 1 E3 .lobytes %1011111111100011 -001677r 1 E4 .lobytes %1011111111100100 -001678r 1 E5 .lobytes %1011111111100101 -001679r 1 E6 .lobytes %1011111111100110 -00167Ar 1 E7 .lobytes %1011111111100111 -00167Br 1 E8 .lobytes %1011111111101000 -00167Cr 1 E9 .lobytes %1011111111101001 -00167Dr 1 EA .lobytes %1011111111101010 -00167Er 1 EB .lobytes %1011111111101011 -00167Fr 1 EC .lobytes %1011111111101100 -001680r 1 ED .lobytes %1011111111101101 -001681r 1 EE .lobytes %1011111111101110 -001682r 1 EF .lobytes %1011111111101111 -001683r 1 F0 .lobytes %1011111111110000 -001684r 1 F1 .lobytes %1011111111110001 -001685r 1 F2 .lobytes %1011111111110010 -001686r 1 F3 .lobytes %1011111111110011 -001687r 1 F4 .lobytes %1011111111110100 -001688r 1 F5 .lobytes %1011111111110101 -001689r 1 F6 .lobytes %1011111111110110 -00168Ar 1 F7 .lobytes %1011111111110111 -00168Br 1 F8 .lobytes %1011111111111000 -00168Cr 1 F9 .lobytes %1011111111111001 -00168Dr 1 FA .lobytes %1011111111111010 -00168Er 1 FB .lobytes %1011111111111011 -00168Fr 1 FC .lobytes %1011111111111100 -001690r 1 FD .lobytes %1011111111111101 -001691r 1 FE .lobytes %1011111111111110 -001692r 1 FF .lobytes %1011111111111111 -001693r 1 00 .lobytes %1100000000000000 -001694r 1 01 .lobytes %1100000000000001 -001695r 1 02 .lobytes %1100000000000010 -001696r 1 03 .lobytes %1100000000000011 -001697r 1 04 .lobytes %1100000000000100 -001698r 1 05 .lobytes %1100000000000101 -001699r 1 06 .lobytes %1100000000000110 -00169Ar 1 07 .lobytes %1100000000000111 -00169Br 1 08 .lobytes %1100000000001000 -00169Cr 1 09 .lobytes %1100000000001001 -00169Dr 1 0A .lobytes %1100000000001010 -00169Er 1 0B .lobytes %1100000000001011 -00169Fr 1 0C .lobytes %1100000000001100 -0016A0r 1 0D .lobytes %1100000000001101 -0016A1r 1 0E .lobytes %1100000000001110 -0016A2r 1 0F .lobytes %1100000000001111 -0016A3r 1 E1 .lobytes %1100111111100001 -0016A4r 1 E2 .lobytes %1100111111100010 -0016A5r 1 E3 .lobytes %1100111111100011 -0016A6r 1 E4 .lobytes %1100111111100100 -0016A7r 1 E5 .lobytes %1100111111100101 -0016A8r 1 E6 .lobytes %1100111111100110 -0016A9r 1 E7 .lobytes %1100111111100111 -0016AAr 1 E8 .lobytes %1100111111101000 -0016ABr 1 E9 .lobytes %1100111111101001 -0016ACr 1 EA .lobytes %1100111111101010 -0016ADr 1 EB .lobytes %1100111111101011 -0016AEr 1 EC .lobytes %1100111111101100 -0016AFr 1 ED .lobytes %1100111111101101 -0016B0r 1 EE .lobytes %1100111111101110 -0016B1r 1 EF .lobytes %1100111111101111 -0016B2r 1 F0 .lobytes %1100111111110000 -0016B3r 1 F1 .lobytes %1100111111110001 -0016B4r 1 F2 .lobytes %1100111111110010 -0016B5r 1 F3 .lobytes %1100111111110011 -0016B6r 1 F4 .lobytes %1100111111110100 -0016B7r 1 F5 .lobytes %1100111111110101 -0016B8r 1 F6 .lobytes %1100111111110110 -0016B9r 1 F7 .lobytes %1100111111110111 -0016BAr 1 F8 .lobytes %1100111111111000 -0016BBr 1 F9 .lobytes %1100111111111001 -0016BCr 1 FA .lobytes %1100111111111010 -0016BDr 1 FB .lobytes %1100111111111011 -0016BEr 1 FC .lobytes %1100111111111100 -0016BFr 1 FD .lobytes %1100111111111101 -0016C0r 1 FE .lobytes %1100111111111110 -0016C1r 1 FF .lobytes %1100111111111111 -0016C2r 1 00 .lobytes %1101000000000000 -0016C3r 1 01 .lobytes %1101000000000001 -0016C4r 1 02 .lobytes %1101000000000010 -0016C5r 1 03 .lobytes %1101000000000011 -0016C6r 1 04 .lobytes %1101000000000100 -0016C7r 1 05 .lobytes %1101000000000101 -0016C8r 1 06 .lobytes %1101000000000110 -0016C9r 1 07 .lobytes %1101000000000111 -0016CAr 1 08 .lobytes %1101000000001000 -0016CBr 1 09 .lobytes %1101000000001001 -0016CCr 1 0A .lobytes %1101000000001010 -0016CDr 1 0B .lobytes %1101000000001011 -0016CEr 1 0C .lobytes %1101000000001100 -0016CFr 1 0D .lobytes %1101000000001101 -0016D0r 1 0E .lobytes %1101000000001110 -0016D1r 1 0F .lobytes %1101000000001111 -0016D2r 1 E1 .lobytes %1101111111100001 -0016D3r 1 E2 .lobytes %1101111111100010 -0016D4r 1 E3 .lobytes %1101111111100011 -0016D5r 1 E4 .lobytes %1101111111100100 -0016D6r 1 E5 .lobytes %1101111111100101 -0016D7r 1 E6 .lobytes %1101111111100110 -0016D8r 1 E7 .lobytes %1101111111100111 -0016D9r 1 E8 .lobytes %1101111111101000 -0016DAr 1 E9 .lobytes %1101111111101001 -0016DBr 1 EA .lobytes %1101111111101010 -0016DCr 1 EB .lobytes %1101111111101011 -0016DDr 1 EC .lobytes %1101111111101100 -0016DEr 1 ED .lobytes %1101111111101101 -0016DFr 1 EE .lobytes %1101111111101110 -0016E0r 1 EF .lobytes %1101111111101111 -0016E1r 1 F0 .lobytes %1101111111110000 -0016E2r 1 F1 .lobytes %1101111111110001 -0016E3r 1 F2 .lobytes %1101111111110010 -0016E4r 1 F3 .lobytes %1101111111110011 -0016E5r 1 F4 .lobytes %1101111111110100 -0016E6r 1 F5 .lobytes %1101111111110101 -0016E7r 1 F6 .lobytes %1101111111110110 -0016E8r 1 F7 .lobytes %1101111111110111 -0016E9r 1 F8 .lobytes %1101111111111000 -0016EAr 1 F9 .lobytes %1101111111111001 -0016EBr 1 FA .lobytes %1101111111111010 -0016ECr 1 FB .lobytes %1101111111111011 -0016EDr 1 FC .lobytes %1101111111111100 -0016EEr 1 FD .lobytes %1101111111111101 -0016EFr 1 FE .lobytes %1101111111111110 -0016F0r 1 FF .lobytes %1101111111111111 -0016F1r 1 00 .lobytes %1110000000000000 -0016F2r 1 01 .lobytes %1110000000000001 -0016F3r 1 02 .lobytes %1110000000000010 -0016F4r 1 03 .lobytes %1110000000000011 -0016F5r 1 04 .lobytes %1110000000000100 -0016F6r 1 05 .lobytes %1110000000000101 -0016F7r 1 06 .lobytes %1110000000000110 -0016F8r 1 07 .lobytes %1110000000000111 -0016F9r 1 08 .lobytes %1110000000001000 -0016FAr 1 09 .lobytes %1110000000001001 -0016FBr 1 0A .lobytes %1110000000001010 -0016FCr 1 0B .lobytes %1110000000001011 -0016FDr 1 0C .lobytes %1110000000001100 -0016FEr 1 0D .lobytes %1110000000001101 -0016FFr 1 0E .lobytes %1110000000001110 -001700r 1 0F .lobytes %1110000000001111 -001701r 1 E1 .lobytes %1110111111100001 -001702r 1 E2 .lobytes %1110111111100010 -001703r 1 E3 .lobytes %1110111111100011 -001704r 1 E4 .lobytes %1110111111100100 -001705r 1 E5 .lobytes %1110111111100101 -001706r 1 E6 .lobytes %1110111111100110 -001707r 1 E7 .lobytes %1110111111100111 -001708r 1 E8 .lobytes %1110111111101000 -001709r 1 E9 .lobytes %1110111111101001 -00170Ar 1 EA .lobytes %1110111111101010 -00170Br 1 EB .lobytes %1110111111101011 -00170Cr 1 EC .lobytes %1110111111101100 -00170Dr 1 ED .lobytes %1110111111101101 -00170Er 1 EE .lobytes %1110111111101110 -00170Fr 1 EF .lobytes %1110111111101111 -001710r 1 F0 .lobytes %1110111111110000 -001711r 1 F1 .lobytes %1110111111110001 -001712r 1 F2 .lobytes %1110111111110010 -001713r 1 F3 .lobytes %1110111111110011 -001714r 1 F4 .lobytes %1110111111110100 -001715r 1 F5 .lobytes %1110111111110101 -001716r 1 F6 .lobytes %1110111111110110 -001717r 1 F7 .lobytes %1110111111110111 -001718r 1 F8 .lobytes %1110111111111000 -001719r 1 F9 .lobytes %1110111111111001 -00171Ar 1 FA .lobytes %1110111111111010 -00171Br 1 FB .lobytes %1110111111111011 -00171Cr 1 FC .lobytes %1110111111111100 -00171Dr 1 FD .lobytes %1110111111111101 -00171Er 1 FE .lobytes %1110111111111110 -00171Fr 1 FF .lobytes %1110111111111111 -001720r 1 00 .lobytes %1111000000000000 -001721r 1 01 .lobytes %1111000000000001 -001722r 1 02 .lobytes %1111000000000010 -001723r 1 03 .lobytes %1111000000000011 -001724r 1 04 .lobytes %1111000000000100 -001725r 1 05 .lobytes %1111000000000101 -001726r 1 06 .lobytes %1111000000000110 -001727r 1 07 .lobytes %1111000000000111 -001728r 1 08 .lobytes %1111000000001000 -001729r 1 09 .lobytes %1111000000001001 -00172Ar 1 0A .lobytes %1111000000001010 -00172Br 1 0B .lobytes %1111000000001011 -00172Cr 1 0C .lobytes %1111000000001100 -00172Dr 1 0D .lobytes %1111000000001101 -00172Er 1 0E .lobytes %1111000000001110 -00172Fr 1 0F .lobytes %1111000000001111 -001730r 1 E1 .lobytes %1111111111100001 -001731r 1 E2 .lobytes %1111111111100010 -001732r 1 E3 .lobytes %1111111111100011 -001733r 1 E4 .lobytes %1111111111100100 -001734r 1 E5 .lobytes %1111111111100101 -001735r 1 E6 .lobytes %1111111111100110 -001736r 1 E7 .lobytes %1111111111100111 -001737r 1 E8 .lobytes %1111111111101000 -001738r 1 E9 .lobytes %1111111111101001 -001739r 1 EA .lobytes %1111111111101010 -00173Ar 1 EB .lobytes %1111111111101011 -00173Br 1 EC .lobytes %1111111111101100 -00173Cr 1 ED .lobytes %1111111111101101 -00173Dr 1 EE .lobytes %1111111111101110 -00173Er 1 EF .lobytes %1111111111101111 -00173Fr 1 F0 .lobytes %1111111111110000 -001740r 1 F1 .lobytes %1111111111110001 -001741r 1 F2 .lobytes %1111111111110010 -001742r 1 F3 .lobytes %1111111111110011 -001743r 1 F4 .lobytes %1111111111110100 -001744r 1 F5 .lobytes %1111111111110101 -001745r 1 F6 .lobytes %1111111111110110 -001746r 1 F7 .lobytes %1111111111110111 -001747r 1 F8 .lobytes %1111111111111000 -001748r 1 F9 .lobytes %1111111111111001 -001749r 1 FA .lobytes %1111111111111010 -00174Ar 1 FB .lobytes %1111111111111011 -00174Br 1 FC .lobytes %1111111111111100 -00174Cr 1 FD .lobytes %1111111111111101 -00174Dr 1 FE .lobytes %1111111111111110 -00174Er 1 FF .lobytes %1111111111111111 +001584r 1 ; binary values, full length +001584r 1 00 .lobytes %0000000000000000 +001585r 1 01 .lobytes %0000000000000001 +001586r 1 02 .lobytes %0000000000000010 +001587r 1 03 .lobytes %0000000000000011 +001588r 1 04 .lobytes %0000000000000100 +001589r 1 05 .lobytes %0000000000000101 +00158Ar 1 06 .lobytes %0000000000000110 +00158Br 1 07 .lobytes %0000000000000111 +00158Cr 1 08 .lobytes %0000000000001000 +00158Dr 1 09 .lobytes %0000000000001001 +00158Er 1 0A .lobytes %0000000000001010 +00158Fr 1 0B .lobytes %0000000000001011 +001590r 1 0C .lobytes %0000000000001100 +001591r 1 0D .lobytes %0000000000001101 +001592r 1 0E .lobytes %0000000000001110 +001593r 1 0F .lobytes %0000000000001111 +001594r 1 10 .lobytes %0000000000010000 +001595r 1 11 .lobytes %0000000000010001 +001596r 1 12 .lobytes %0000000000010010 +001597r 1 13 .lobytes %0000000000010011 +001598r 1 70 .lobytes %0000000001110000 +001599r 1 71 .lobytes %0000000001110001 +00159Ar 1 72 .lobytes %0000000001110010 +00159Br 1 73 .lobytes %0000000001110011 +00159Cr 1 74 .lobytes %0000000001110100 +00159Dr 1 75 .lobytes %0000000001110101 +00159Er 1 76 .lobytes %0000000001110110 +00159Fr 1 77 .lobytes %0000000001110111 +0015A0r 1 78 .lobytes %0000000001111000 +0015A1r 1 79 .lobytes %0000000001111001 +0015A2r 1 7A .lobytes %0000000001111010 +0015A3r 1 7B .lobytes %0000000001111011 +0015A4r 1 7C .lobytes %0000000001111100 +0015A5r 1 7D .lobytes %0000000001111101 +0015A6r 1 7E .lobytes %0000000001111110 +0015A7r 1 7F .lobytes %0000000001111111 +0015A8r 1 80 .lobytes %0000000010000000 +0015A9r 1 81 .lobytes %0000000010000001 +0015AAr 1 82 .lobytes %0000000010000010 +0015ABr 1 83 .lobytes %0000000010000011 +0015ACr 1 84 .lobytes %0000000010000100 +0015ADr 1 85 .lobytes %0000000010000101 +0015AEr 1 86 .lobytes %0000000010000110 +0015AFr 1 F0 .lobytes %0000000011110000 +0015B0r 1 F1 .lobytes %0000000011110001 +0015B1r 1 F2 .lobytes %0000000011110010 +0015B2r 1 F3 .lobytes %0000000011110011 +0015B3r 1 F4 .lobytes %0000000011110100 +0015B4r 1 F5 .lobytes %0000000011110101 +0015B5r 1 F6 .lobytes %0000000011110110 +0015B6r 1 F7 .lobytes %0000000011110111 +0015B7r 1 F8 .lobytes %0000000011111000 +0015B8r 1 F9 .lobytes %0000000011111001 +0015B9r 1 FA .lobytes %0000000011111010 +0015BAr 1 FB .lobytes %0000000011111011 +0015BBr 1 FC .lobytes %0000000011111100 +0015BCr 1 FD .lobytes %0000000011111101 +0015BDr 1 FE .lobytes %0000000011111110 +0015BEr 1 FF .lobytes %0000000011111111 +0015BFr 1 00 .lobytes %0000000100000000 +0015C0r 1 01 .lobytes %0000000100000001 +0015C1r 1 02 .lobytes %0000000100000010 +0015C2r 1 03 .lobytes %0000000100000011 +0015C3r 1 D2 .lobytes %0000111111010010 +0015C4r 1 D3 .lobytes %0000111111010011 +0015C5r 1 D4 .lobytes %0000111111010100 +0015C6r 1 D5 .lobytes %0000111111010101 +0015C7r 1 D6 .lobytes %0000111111010110 +0015C8r 1 D7 .lobytes %0000111111010111 +0015C9r 1 D8 .lobytes %0000111111011000 +0015CAr 1 D9 .lobytes %0000111111011001 +0015CBr 1 DA .lobytes %0000111111011010 +0015CCr 1 DB .lobytes %0000111111011011 +0015CDr 1 DC .lobytes %0000111111011100 +0015CEr 1 DD .lobytes %0000111111011101 +0015CFr 1 DE .lobytes %0000111111011110 +0015D0r 1 DF .lobytes %0000111111011111 +0015D1r 1 E0 .lobytes %0000111111100000 +0015D2r 1 E1 .lobytes %0000111111100001 +0015D3r 1 E2 .lobytes %0000111111100010 +0015D4r 1 E3 .lobytes %0000111111100011 +0015D5r 1 E4 .lobytes %0000111111100100 +0015D6r 1 E5 .lobytes %0000111111100101 +0015D7r 1 E6 .lobytes %0000111111100110 +0015D8r 1 E7 .lobytes %0000111111100111 +0015D9r 1 E8 .lobytes %0000111111101000 +0015DAr 1 E9 .lobytes %0000111111101001 +0015DBr 1 EA .lobytes %0000111111101010 +0015DCr 1 EB .lobytes %0000111111101011 +0015DDr 1 EC .lobytes %0000111111101100 +0015DEr 1 ED .lobytes %0000111111101101 +0015DFr 1 EE .lobytes %0000111111101110 +0015E0r 1 EF .lobytes %0000111111101111 +0015E1r 1 F0 .lobytes %0000111111110000 +0015E2r 1 F1 .lobytes %0000111111110001 +0015E3r 1 F2 .lobytes %0000111111110010 +0015E4r 1 F3 .lobytes %0000111111110011 +0015E5r 1 F4 .lobytes %0000111111110100 +0015E6r 1 F5 .lobytes %0000111111110101 +0015E7r 1 F6 .lobytes %0000111111110110 +0015E8r 1 F7 .lobytes %0000111111110111 +0015E9r 1 F8 .lobytes %0000111111111000 +0015EAr 1 F9 .lobytes %0000111111111001 +0015EBr 1 FA .lobytes %0000111111111010 +0015ECr 1 FB .lobytes %0000111111111011 +0015EDr 1 FC .lobytes %0000111111111100 +0015EEr 1 FD .lobytes %0000111111111101 +0015EFr 1 FE .lobytes %0000111111111110 +0015F0r 1 FF .lobytes %0000111111111111 +0015F1r 1 00 .lobytes %0001000000000000 +0015F2r 1 01 .lobytes %0001000000000001 +0015F3r 1 02 .lobytes %0001000000000010 +0015F4r 1 03 .lobytes %0001000000000011 +0015F5r 1 04 .lobytes %0001000000000100 +0015F6r 1 05 .lobytes %0001000000000101 +0015F7r 1 06 .lobytes %0001000000000110 +0015F8r 1 07 .lobytes %0001000000000111 +0015F9r 1 08 .lobytes %0001000000001000 +0015FAr 1 F0 .lobytes %0111111111110000 +0015FBr 1 F1 .lobytes %0111111111110001 +0015FCr 1 F2 .lobytes %0111111111110010 +0015FDr 1 F3 .lobytes %0111111111110011 +0015FEr 1 F4 .lobytes %0111111111110100 +0015FFr 1 F5 .lobytes %0111111111110101 +001600r 1 F6 .lobytes %0111111111110110 +001601r 1 F7 .lobytes %0111111111110111 +001602r 1 F8 .lobytes %0111111111111000 +001603r 1 F9 .lobytes %0111111111111001 +001604r 1 FA .lobytes %0111111111111010 +001605r 1 FB .lobytes %0111111111111011 +001606r 1 FC .lobytes %0111111111111100 +001607r 1 FD .lobytes %0111111111111101 +001608r 1 FE .lobytes %0111111111111110 +001609r 1 FF .lobytes %0111111111111111 +00160Ar 1 00 .lobytes %1000000000000000 +00160Br 1 01 .lobytes %1000000000000001 +00160Cr 1 02 .lobytes %1000000000000010 +00160Dr 1 03 .lobytes %1000000000000011 +00160Er 1 04 .lobytes %1000000000000100 +00160Fr 1 05 .lobytes %1000000000000101 +001610r 1 06 .lobytes %1000000000000110 +001611r 1 07 .lobytes %1000000000000111 +001612r 1 08 .lobytes %1000000000001000 +001613r 1 09 .lobytes %1000000000001001 +001614r 1 0A .lobytes %1000000000001010 +001615r 1 0B .lobytes %1000000000001011 +001616r 1 E1 .lobytes %1001111111100001 +001617r 1 E2 .lobytes %1001111111100010 +001618r 1 E3 .lobytes %1001111111100011 +001619r 1 E4 .lobytes %1001111111100100 +00161Ar 1 E5 .lobytes %1001111111100101 +00161Br 1 E6 .lobytes %1001111111100110 +00161Cr 1 E7 .lobytes %1001111111100111 +00161Dr 1 E8 .lobytes %1001111111101000 +00161Er 1 E9 .lobytes %1001111111101001 +00161Fr 1 EA .lobytes %1001111111101010 +001620r 1 EB .lobytes %1001111111101011 +001621r 1 EC .lobytes %1001111111101100 +001622r 1 ED .lobytes %1001111111101101 +001623r 1 EE .lobytes %1001111111101110 +001624r 1 EF .lobytes %1001111111101111 +001625r 1 F0 .lobytes %1001111111110000 +001626r 1 F1 .lobytes %1001111111110001 +001627r 1 F2 .lobytes %1001111111110010 +001628r 1 F3 .lobytes %1001111111110011 +001629r 1 F4 .lobytes %1001111111110100 +00162Ar 1 F5 .lobytes %1001111111110101 +00162Br 1 F6 .lobytes %1001111111110110 +00162Cr 1 F7 .lobytes %1001111111110111 +00162Dr 1 F8 .lobytes %1001111111111000 +00162Er 1 F9 .lobytes %1001111111111001 +00162Fr 1 FA .lobytes %1001111111111010 +001630r 1 FB .lobytes %1001111111111011 +001631r 1 FC .lobytes %1001111111111100 +001632r 1 FD .lobytes %1001111111111101 +001633r 1 FE .lobytes %1001111111111110 +001634r 1 FF .lobytes %1001111111111111 +001635r 1 00 .lobytes %1010000000000000 +001636r 1 01 .lobytes %1010000000000001 +001637r 1 02 .lobytes %1010000000000010 +001638r 1 03 .lobytes %1010000000000011 +001639r 1 04 .lobytes %1010000000000100 +00163Ar 1 05 .lobytes %1010000000000101 +00163Br 1 06 .lobytes %1010000000000110 +00163Cr 1 07 .lobytes %1010000000000111 +00163Dr 1 08 .lobytes %1010000000001000 +00163Er 1 09 .lobytes %1010000000001001 +00163Fr 1 0A .lobytes %1010000000001010 +001640r 1 0B .lobytes %1010000000001011 +001641r 1 0C .lobytes %1010000000001100 +001642r 1 0D .lobytes %1010000000001101 +001643r 1 0E .lobytes %1010000000001110 +001644r 1 0F .lobytes %1010000000001111 +001645r 1 E1 .lobytes %1010111111100001 +001646r 1 E2 .lobytes %1010111111100010 +001647r 1 E3 .lobytes %1010111111100011 +001648r 1 E4 .lobytes %1010111111100100 +001649r 1 E5 .lobytes %1010111111100101 +00164Ar 1 E6 .lobytes %1010111111100110 +00164Br 1 E7 .lobytes %1010111111100111 +00164Cr 1 E8 .lobytes %1010111111101000 +00164Dr 1 E9 .lobytes %1010111111101001 +00164Er 1 EA .lobytes %1010111111101010 +00164Fr 1 EB .lobytes %1010111111101011 +001650r 1 EC .lobytes %1010111111101100 +001651r 1 ED .lobytes %1010111111101101 +001652r 1 EE .lobytes %1010111111101110 +001653r 1 EF .lobytes %1010111111101111 +001654r 1 F0 .lobytes %1010111111110000 +001655r 1 F1 .lobytes %1010111111110001 +001656r 1 F2 .lobytes %1010111111110010 +001657r 1 F3 .lobytes %1010111111110011 +001658r 1 F4 .lobytes %1010111111110100 +001659r 1 F5 .lobytes %1010111111110101 +00165Ar 1 F6 .lobytes %1010111111110110 +00165Br 1 F7 .lobytes %1010111111110111 +00165Cr 1 F8 .lobytes %1010111111111000 +00165Dr 1 F9 .lobytes %1010111111111001 +00165Er 1 FA .lobytes %1010111111111010 +00165Fr 1 FB .lobytes %1010111111111011 +001660r 1 FC .lobytes %1010111111111100 +001661r 1 FD .lobytes %1010111111111101 +001662r 1 FE .lobytes %1010111111111110 +001663r 1 FF .lobytes %1010111111111111 +001664r 1 00 .lobytes %1011000000000000 +001665r 1 01 .lobytes %1011000000000001 +001666r 1 02 .lobytes %1011000000000010 +001667r 1 03 .lobytes %1011000000000011 +001668r 1 04 .lobytes %1011000000000100 +001669r 1 05 .lobytes %1011000000000101 +00166Ar 1 06 .lobytes %1011000000000110 +00166Br 1 07 .lobytes %1011000000000111 +00166Cr 1 08 .lobytes %1011000000001000 +00166Dr 1 09 .lobytes %1011000000001001 +00166Er 1 0A .lobytes %1011000000001010 +00166Fr 1 0B .lobytes %1011000000001011 +001670r 1 0C .lobytes %1011000000001100 +001671r 1 0D .lobytes %1011000000001101 +001672r 1 0E .lobytes %1011000000001110 +001673r 1 0F .lobytes %1011000000001111 +001674r 1 E1 .lobytes %1011111111100001 +001675r 1 E2 .lobytes %1011111111100010 +001676r 1 E3 .lobytes %1011111111100011 +001677r 1 E4 .lobytes %1011111111100100 +001678r 1 E5 .lobytes %1011111111100101 +001679r 1 E6 .lobytes %1011111111100110 +00167Ar 1 E7 .lobytes %1011111111100111 +00167Br 1 E8 .lobytes %1011111111101000 +00167Cr 1 E9 .lobytes %1011111111101001 +00167Dr 1 EA .lobytes %1011111111101010 +00167Er 1 EB .lobytes %1011111111101011 +00167Fr 1 EC .lobytes %1011111111101100 +001680r 1 ED .lobytes %1011111111101101 +001681r 1 EE .lobytes %1011111111101110 +001682r 1 EF .lobytes %1011111111101111 +001683r 1 F0 .lobytes %1011111111110000 +001684r 1 F1 .lobytes %1011111111110001 +001685r 1 F2 .lobytes %1011111111110010 +001686r 1 F3 .lobytes %1011111111110011 +001687r 1 F4 .lobytes %1011111111110100 +001688r 1 F5 .lobytes %1011111111110101 +001689r 1 F6 .lobytes %1011111111110110 +00168Ar 1 F7 .lobytes %1011111111110111 +00168Br 1 F8 .lobytes %1011111111111000 +00168Cr 1 F9 .lobytes %1011111111111001 +00168Dr 1 FA .lobytes %1011111111111010 +00168Er 1 FB .lobytes %1011111111111011 +00168Fr 1 FC .lobytes %1011111111111100 +001690r 1 FD .lobytes %1011111111111101 +001691r 1 FE .lobytes %1011111111111110 +001692r 1 FF .lobytes %1011111111111111 +001693r 1 00 .lobytes %1100000000000000 +001694r 1 01 .lobytes %1100000000000001 +001695r 1 02 .lobytes %1100000000000010 +001696r 1 03 .lobytes %1100000000000011 +001697r 1 04 .lobytes %1100000000000100 +001698r 1 05 .lobytes %1100000000000101 +001699r 1 06 .lobytes %1100000000000110 +00169Ar 1 07 .lobytes %1100000000000111 +00169Br 1 08 .lobytes %1100000000001000 +00169Cr 1 09 .lobytes %1100000000001001 +00169Dr 1 0A .lobytes %1100000000001010 +00169Er 1 0B .lobytes %1100000000001011 +00169Fr 1 0C .lobytes %1100000000001100 +0016A0r 1 0D .lobytes %1100000000001101 +0016A1r 1 0E .lobytes %1100000000001110 +0016A2r 1 0F .lobytes %1100000000001111 +0016A3r 1 E1 .lobytes %1100111111100001 +0016A4r 1 E2 .lobytes %1100111111100010 +0016A5r 1 E3 .lobytes %1100111111100011 +0016A6r 1 E4 .lobytes %1100111111100100 +0016A7r 1 E5 .lobytes %1100111111100101 +0016A8r 1 E6 .lobytes %1100111111100110 +0016A9r 1 E7 .lobytes %1100111111100111 +0016AAr 1 E8 .lobytes %1100111111101000 +0016ABr 1 E9 .lobytes %1100111111101001 +0016ACr 1 EA .lobytes %1100111111101010 +0016ADr 1 EB .lobytes %1100111111101011 +0016AEr 1 EC .lobytes %1100111111101100 +0016AFr 1 ED .lobytes %1100111111101101 +0016B0r 1 EE .lobytes %1100111111101110 +0016B1r 1 EF .lobytes %1100111111101111 +0016B2r 1 F0 .lobytes %1100111111110000 +0016B3r 1 F1 .lobytes %1100111111110001 +0016B4r 1 F2 .lobytes %1100111111110010 +0016B5r 1 F3 .lobytes %1100111111110011 +0016B6r 1 F4 .lobytes %1100111111110100 +0016B7r 1 F5 .lobytes %1100111111110101 +0016B8r 1 F6 .lobytes %1100111111110110 +0016B9r 1 F7 .lobytes %1100111111110111 +0016BAr 1 F8 .lobytes %1100111111111000 +0016BBr 1 F9 .lobytes %1100111111111001 +0016BCr 1 FA .lobytes %1100111111111010 +0016BDr 1 FB .lobytes %1100111111111011 +0016BEr 1 FC .lobytes %1100111111111100 +0016BFr 1 FD .lobytes %1100111111111101 +0016C0r 1 FE .lobytes %1100111111111110 +0016C1r 1 FF .lobytes %1100111111111111 +0016C2r 1 00 .lobytes %1101000000000000 +0016C3r 1 01 .lobytes %1101000000000001 +0016C4r 1 02 .lobytes %1101000000000010 +0016C5r 1 03 .lobytes %1101000000000011 +0016C6r 1 04 .lobytes %1101000000000100 +0016C7r 1 05 .lobytes %1101000000000101 +0016C8r 1 06 .lobytes %1101000000000110 +0016C9r 1 07 .lobytes %1101000000000111 +0016CAr 1 08 .lobytes %1101000000001000 +0016CBr 1 09 .lobytes %1101000000001001 +0016CCr 1 0A .lobytes %1101000000001010 +0016CDr 1 0B .lobytes %1101000000001011 +0016CEr 1 0C .lobytes %1101000000001100 +0016CFr 1 0D .lobytes %1101000000001101 +0016D0r 1 0E .lobytes %1101000000001110 +0016D1r 1 0F .lobytes %1101000000001111 +0016D2r 1 E1 .lobytes %1101111111100001 +0016D3r 1 E2 .lobytes %1101111111100010 +0016D4r 1 E3 .lobytes %1101111111100011 +0016D5r 1 E4 .lobytes %1101111111100100 +0016D6r 1 E5 .lobytes %1101111111100101 +0016D7r 1 E6 .lobytes %1101111111100110 +0016D8r 1 E7 .lobytes %1101111111100111 +0016D9r 1 E8 .lobytes %1101111111101000 +0016DAr 1 E9 .lobytes %1101111111101001 +0016DBr 1 EA .lobytes %1101111111101010 +0016DCr 1 EB .lobytes %1101111111101011 +0016DDr 1 EC .lobytes %1101111111101100 +0016DEr 1 ED .lobytes %1101111111101101 +0016DFr 1 EE .lobytes %1101111111101110 +0016E0r 1 EF .lobytes %1101111111101111 +0016E1r 1 F0 .lobytes %1101111111110000 +0016E2r 1 F1 .lobytes %1101111111110001 +0016E3r 1 F2 .lobytes %1101111111110010 +0016E4r 1 F3 .lobytes %1101111111110011 +0016E5r 1 F4 .lobytes %1101111111110100 +0016E6r 1 F5 .lobytes %1101111111110101 +0016E7r 1 F6 .lobytes %1101111111110110 +0016E8r 1 F7 .lobytes %1101111111110111 +0016E9r 1 F8 .lobytes %1101111111111000 +0016EAr 1 F9 .lobytes %1101111111111001 +0016EBr 1 FA .lobytes %1101111111111010 +0016ECr 1 FB .lobytes %1101111111111011 +0016EDr 1 FC .lobytes %1101111111111100 +0016EEr 1 FD .lobytes %1101111111111101 +0016EFr 1 FE .lobytes %1101111111111110 +0016F0r 1 FF .lobytes %1101111111111111 +0016F1r 1 00 .lobytes %1110000000000000 +0016F2r 1 01 .lobytes %1110000000000001 +0016F3r 1 02 .lobytes %1110000000000010 +0016F4r 1 03 .lobytes %1110000000000011 +0016F5r 1 04 .lobytes %1110000000000100 +0016F6r 1 05 .lobytes %1110000000000101 +0016F7r 1 06 .lobytes %1110000000000110 +0016F8r 1 07 .lobytes %1110000000000111 +0016F9r 1 08 .lobytes %1110000000001000 +0016FAr 1 09 .lobytes %1110000000001001 +0016FBr 1 0A .lobytes %1110000000001010 +0016FCr 1 0B .lobytes %1110000000001011 +0016FDr 1 0C .lobytes %1110000000001100 +0016FEr 1 0D .lobytes %1110000000001101 +0016FFr 1 0E .lobytes %1110000000001110 +001700r 1 0F .lobytes %1110000000001111 +001701r 1 E1 .lobytes %1110111111100001 +001702r 1 E2 .lobytes %1110111111100010 +001703r 1 E3 .lobytes %1110111111100011 +001704r 1 E4 .lobytes %1110111111100100 +001705r 1 E5 .lobytes %1110111111100101 +001706r 1 E6 .lobytes %1110111111100110 +001707r 1 E7 .lobytes %1110111111100111 +001708r 1 E8 .lobytes %1110111111101000 +001709r 1 E9 .lobytes %1110111111101001 +00170Ar 1 EA .lobytes %1110111111101010 +00170Br 1 EB .lobytes %1110111111101011 +00170Cr 1 EC .lobytes %1110111111101100 +00170Dr 1 ED .lobytes %1110111111101101 +00170Er 1 EE .lobytes %1110111111101110 +00170Fr 1 EF .lobytes %1110111111101111 +001710r 1 F0 .lobytes %1110111111110000 +001711r 1 F1 .lobytes %1110111111110001 +001712r 1 F2 .lobytes %1110111111110010 +001713r 1 F3 .lobytes %1110111111110011 +001714r 1 F4 .lobytes %1110111111110100 +001715r 1 F5 .lobytes %1110111111110101 +001716r 1 F6 .lobytes %1110111111110110 +001717r 1 F7 .lobytes %1110111111110111 +001718r 1 F8 .lobytes %1110111111111000 +001719r 1 F9 .lobytes %1110111111111001 +00171Ar 1 FA .lobytes %1110111111111010 +00171Br 1 FB .lobytes %1110111111111011 +00171Cr 1 FC .lobytes %1110111111111100 +00171Dr 1 FD .lobytes %1110111111111101 +00171Er 1 FE .lobytes %1110111111111110 +00171Fr 1 FF .lobytes %1110111111111111 +001720r 1 00 .lobytes %1111000000000000 +001721r 1 01 .lobytes %1111000000000001 +001722r 1 02 .lobytes %1111000000000010 +001723r 1 03 .lobytes %1111000000000011 +001724r 1 04 .lobytes %1111000000000100 +001725r 1 05 .lobytes %1111000000000101 +001726r 1 06 .lobytes %1111000000000110 +001727r 1 07 .lobytes %1111000000000111 +001728r 1 08 .lobytes %1111000000001000 +001729r 1 09 .lobytes %1111000000001001 +00172Ar 1 0A .lobytes %1111000000001010 +00172Br 1 0B .lobytes %1111000000001011 +00172Cr 1 0C .lobytes %1111000000001100 +00172Dr 1 0D .lobytes %1111000000001101 +00172Er 1 0E .lobytes %1111000000001110 +00172Fr 1 0F .lobytes %1111000000001111 +001730r 1 E1 .lobytes %1111111111100001 +001731r 1 E2 .lobytes %1111111111100010 +001732r 1 E3 .lobytes %1111111111100011 +001733r 1 E4 .lobytes %1111111111100100 +001734r 1 E5 .lobytes %1111111111100101 +001735r 1 E6 .lobytes %1111111111100110 +001736r 1 E7 .lobytes %1111111111100111 +001737r 1 E8 .lobytes %1111111111101000 +001738r 1 E9 .lobytes %1111111111101001 +001739r 1 EA .lobytes %1111111111101010 +00173Ar 1 EB .lobytes %1111111111101011 +00173Br 1 EC .lobytes %1111111111101100 +00173Cr 1 ED .lobytes %1111111111101101 +00173Dr 1 EE .lobytes %1111111111101110 +00173Er 1 EF .lobytes %1111111111101111 +00173Fr 1 F0 .lobytes %1111111111110000 +001740r 1 F1 .lobytes %1111111111110001 +001741r 1 F2 .lobytes %1111111111110010 +001742r 1 F3 .lobytes %1111111111110011 +001743r 1 F4 .lobytes %1111111111110100 +001744r 1 F5 .lobytes %1111111111110101 +001745r 1 F6 .lobytes %1111111111110110 +001746r 1 F7 .lobytes %1111111111110111 +001747r 1 F8 .lobytes %1111111111111000 +001748r 1 F9 .lobytes %1111111111111001 +001749r 1 FA .lobytes %1111111111111010 +00174Ar 1 FB .lobytes %1111111111111011 +00174Br 1 FC .lobytes %1111111111111100 +00174Cr 1 FD .lobytes %1111111111111101 +00174Dr 1 FE .lobytes %1111111111111110 +00174Er 1 FF .lobytes %1111111111111111 00174Fr 1 -00174Fr 1 ; multiple values on one line, decimal -00174Fr 1 00 01 02 03 .lobytes 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 +00174Fr 1 ; multiple values on one line, decimal +00174Fr 1 00 01 02 03 .lobytes 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 001753r 1 04 05 06 07 001757r 1 08 09 0A 0B -00175Fr 1 10 11 12 13 .lobytes 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 +00175Fr 1 10 11 12 13 .lobytes 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 001763r 1 14 15 16 17 001767r 1 18 19 1A 1B -00176Fr 1 70 71 72 73 .lobytes 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 +00176Fr 1 70 71 72 73 .lobytes 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 001773r 1 74 75 76 77 001777r 1 78 79 7A 7B -00177Fr 1 80 81 82 83 .lobytes 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 +00177Fr 1 80 81 82 83 .lobytes 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 001783r 1 84 85 86 87 001787r 1 88 89 8A 8B -00178Fr 1 F0 F1 F2 F3 .lobytes 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 +00178Fr 1 F0 F1 F2 F3 .lobytes 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 001793r 1 F4 F5 F6 F7 001797r 1 F8 F9 FA FB -00179Fr 1 00 01 02 03 .lobytes 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 +00179Fr 1 00 01 02 03 .lobytes 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 0017A3r 1 04 05 06 07 0017A7r 1 08 09 0A 0B -0017AFr 1 E0 E1 E2 E3 .lobytes 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 +0017AFr 1 E0 E1 E2 E3 .lobytes 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 0017B3r 1 E4 E5 E6 E7 0017B7r 1 E8 E9 EA EB -0017BFr 1 F0 F1 F2 F3 .lobytes 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 +0017BFr 1 F0 F1 F2 F3 .lobytes 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 0017C3r 1 F4 F5 F6 F7 0017C7r 1 F8 F9 FA FB -0017CFr 1 00 01 02 03 .lobytes 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 +0017CFr 1 00 01 02 03 .lobytes 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 0017D3r 1 04 05 06 07 0017D7r 1 08 09 0A 0B -0017DFr 1 F0 F1 F2 F3 .lobytes 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 +0017DFr 1 F0 F1 F2 F3 .lobytes 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 0017E3r 1 F4 F5 F6 F7 0017E7r 1 F8 F9 FA FB -0017EFr 1 00 01 02 03 .lobytes 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 +0017EFr 1 00 01 02 03 .lobytes 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 0017F3r 1 04 05 06 07 0017F7r 1 08 09 0A 0B -0017FFr 1 F0 F1 F2 F3 .lobytes 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 +0017FFr 1 F0 F1 F2 F3 .lobytes 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 001803r 1 F4 F5 F6 F7 001807r 1 F8 F9 FA FB -00180Fr 1 00 01 02 03 .lobytes 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 +00180Fr 1 00 01 02 03 .lobytes 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 001813r 1 04 05 06 07 001817r 1 08 09 0A 0B -00181Fr 1 F0 F1 F2 F3 .lobytes 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 +00181Fr 1 F0 F1 F2 F3 .lobytes 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 001823r 1 F4 F5 F6 F7 001827r 1 F8 F9 FA FB -00182Fr 1 00 01 02 03 .lobytes 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 +00182Fr 1 00 01 02 03 .lobytes 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 001833r 1 04 05 06 07 001837r 1 08 09 0A 0B -00183Fr 1 F0 F1 F2 F3 .lobytes 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 +00183Fr 1 F0 F1 F2 F3 .lobytes 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 001843r 1 F4 F5 F6 F7 001847r 1 F8 F9 FA FB -00184Fr 1 00 01 02 03 .lobytes 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 +00184Fr 1 00 01 02 03 .lobytes 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 001853r 1 04 05 06 07 001857r 1 08 09 0A 0B -00185Fr 1 F0 F1 F2 F3 .lobytes 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 +00185Fr 1 F0 F1 F2 F3 .lobytes 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 001863r 1 F4 F5 F6 F7 001867r 1 F8 F9 FA FB -00186Fr 1 00 01 02 03 .lobytes 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 +00186Fr 1 00 01 02 03 .lobytes 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 001873r 1 04 05 06 07 001877r 1 08 09 0A 0B -00187Fr 1 F0 F1 F2 F3 .lobytes 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 +00187Fr 1 F0 F1 F2 F3 .lobytes 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 001883r 1 F4 F5 F6 F7 001887r 1 F8 F9 FA FB -00188Fr 1 00 01 02 03 .lobytes 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 +00188Fr 1 00 01 02 03 .lobytes 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 001893r 1 04 05 06 07 001897r 1 08 09 0A 0B -00189Fr 1 F0 F1 F2 F3 .lobytes 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 +00189Fr 1 F0 F1 F2 F3 .lobytes 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 0018A3r 1 F4 F5 F6 F7 0018A7r 1 F8 F9 FA FB -0018AFr 1 00 01 02 03 .lobytes 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 +0018AFr 1 00 01 02 03 .lobytes 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 0018B3r 1 04 05 06 07 0018B7r 1 08 09 0A 0B -0018BFr 1 F0 F1 F2 F3 .lobytes 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 +0018BFr 1 F0 F1 F2 F3 .lobytes 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 0018C3r 1 F4 F5 F6 F7 0018C7r 1 F8 F9 FA FB 0018CFr 1 -0018CFr 1 ; multiple values on one line, hex -0018CFr 1 00 01 02 03 .lobytes $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f +0018CFr 1 ; multiple values on one line, hex +0018CFr 1 00 01 02 03 .lobytes $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f 0018D3r 1 04 05 06 07 0018D7r 1 08 09 0A 0B -0018DFr 1 10 11 12 13 .lobytes $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f +0018DFr 1 10 11 12 13 .lobytes $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f 0018E3r 1 14 15 16 17 0018E7r 1 18 19 1A 1B -0018EFr 1 70 71 72 73 .lobytes $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f +0018EFr 1 70 71 72 73 .lobytes $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f 0018F3r 1 74 75 76 77 0018F7r 1 78 79 7A 7B -0018FFr 1 80 81 82 83 .lobytes $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f +0018FFr 1 80 81 82 83 .lobytes $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f 001903r 1 84 85 86 87 001907r 1 88 89 8A 8B -00190Fr 1 F0 F1 F2 F3 .lobytes $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff +00190Fr 1 F0 F1 F2 F3 .lobytes $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff 001913r 1 F4 F5 F6 F7 001917r 1 F8 F9 FA FB -00191Fr 1 00 01 02 03 .lobytes $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f +00191Fr 1 00 01 02 03 .lobytes $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f 001923r 1 04 05 06 07 001927r 1 08 09 0A 0B -00192Fr 1 E0 E1 E2 E3 .lobytes $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef +00192Fr 1 E0 E1 E2 E3 .lobytes $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef 001933r 1 E4 E5 E6 E7 001937r 1 E8 E9 EA EB -00193Fr 1 F0 F1 F2 F3 .lobytes $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff +00193Fr 1 F0 F1 F2 F3 .lobytes $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff 001943r 1 F4 F5 F6 F7 001947r 1 F8 F9 FA FB -00194Fr 1 00 01 02 03 .lobytes $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f +00194Fr 1 00 01 02 03 .lobytes $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f 001953r 1 04 05 06 07 001957r 1 08 09 0A 0B -00195Fr 1 F0 F1 F2 F3 .lobytes $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff +00195Fr 1 F0 F1 F2 F3 .lobytes $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff 001963r 1 F4 F5 F6 F7 001967r 1 F8 F9 FA FB -00196Fr 1 00 01 02 03 .lobytes $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f +00196Fr 1 00 01 02 03 .lobytes $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f 001973r 1 04 05 06 07 001977r 1 08 09 0A 0B -00197Fr 1 F0 F1 F2 F3 .lobytes $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff +00197Fr 1 F0 F1 F2 F3 .lobytes $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff 001983r 1 F4 F5 F6 F7 001987r 1 F8 F9 FA FB -00198Fr 1 00 01 02 03 .lobytes $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f +00198Fr 1 00 01 02 03 .lobytes $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f 001993r 1 04 05 06 07 001997r 1 08 09 0A 0B -00199Fr 1 F0 F1 F2 F3 .lobytes $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff +00199Fr 1 F0 F1 F2 F3 .lobytes $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff 0019A3r 1 F4 F5 F6 F7 0019A7r 1 F8 F9 FA FB -0019AFr 1 00 01 02 03 .lobytes $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f +0019AFr 1 00 01 02 03 .lobytes $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f 0019B3r 1 04 05 06 07 0019B7r 1 08 09 0A 0B -0019BFr 1 F0 F1 F2 F3 .lobytes $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff +0019BFr 1 F0 F1 F2 F3 .lobytes $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff 0019C3r 1 F4 F5 F6 F7 0019C7r 1 F8 F9 FA FB -0019CFr 1 00 01 02 03 .lobytes $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f +0019CFr 1 00 01 02 03 .lobytes $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f 0019D3r 1 04 05 06 07 0019D7r 1 08 09 0A 0B -0019DFr 1 F0 F1 F2 F3 .lobytes $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff +0019DFr 1 F0 F1 F2 F3 .lobytes $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff 0019E3r 1 F4 F5 F6 F7 0019E7r 1 F8 F9 FA FB -0019EFr 1 00 01 02 03 .lobytes $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f +0019EFr 1 00 01 02 03 .lobytes $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f 0019F3r 1 04 05 06 07 0019F7r 1 08 09 0A 0B -0019FFr 1 F0 F1 F2 F3 .lobytes $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff +0019FFr 1 F0 F1 F2 F3 .lobytes $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff 001A03r 1 F4 F5 F6 F7 001A07r 1 F8 F9 FA FB -001A0Fr 1 00 01 02 03 .lobytes $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f +001A0Fr 1 00 01 02 03 .lobytes $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f 001A13r 1 04 05 06 07 001A17r 1 08 09 0A 0B -001A1Fr 1 F0 F1 F2 F3 .lobytes $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff +001A1Fr 1 F0 F1 F2 F3 .lobytes $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff 001A23r 1 F4 F5 F6 F7 001A27r 1 F8 F9 FA FB -001A2Fr 1 00 01 02 03 .lobytes $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f +001A2Fr 1 00 01 02 03 .lobytes $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f 001A33r 1 04 05 06 07 001A37r 1 08 09 0A 0B -001A3Fr 1 F0 F1 F2 F3 .lobytes $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff +001A3Fr 1 F0 F1 F2 F3 .lobytes $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff 001A43r 1 F4 F5 F6 F7 001A47r 1 F8 F9 FA FB 001A4Fr 1 -001A4Fr 1 ; multiple values on one line, alternative hex -001A4Fr 1 00 01 02 03 .lobytes 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh +001A4Fr 1 ; multiple values on one line, alternative hex +001A4Fr 1 00 01 02 03 .lobytes 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh 001A53r 1 04 05 06 07 001A57r 1 08 09 0A 0B -001A5Fr 1 10 11 12 13 .lobytes 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh +001A5Fr 1 10 11 12 13 .lobytes 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh 001A63r 1 14 15 16 17 001A67r 1 18 19 1A 1B -001A6Fr 1 70 71 72 73 .lobytes 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh +001A6Fr 1 70 71 72 73 .lobytes 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh 001A73r 1 74 75 76 77 001A77r 1 78 79 7A 7B -001A7Fr 1 80 81 82 83 .lobytes 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh +001A7Fr 1 80 81 82 83 .lobytes 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh 001A83r 1 84 85 86 87 001A87r 1 88 89 8A 8B -001A8Fr 1 F0 F1 F2 F3 .lobytes 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh +001A8Fr 1 F0 F1 F2 F3 .lobytes 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh 001A93r 1 F4 F5 F6 F7 001A97r 1 F8 F9 FA FB -001A9Fr 1 00 01 02 03 .lobytes 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh +001A9Fr 1 00 01 02 03 .lobytes 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh 001AA3r 1 04 05 06 07 001AA7r 1 08 09 0A 0B -001AAFr 1 E0 E1 E2 E3 .lobytes 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh +001AAFr 1 E0 E1 E2 E3 .lobytes 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh 001AB3r 1 E4 E5 E6 E7 001AB7r 1 E8 E9 EA EB -001ABFr 1 F0 F1 F2 F3 .lobytes 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh +001ABFr 1 F0 F1 F2 F3 .lobytes 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh 001AC3r 1 F4 F5 F6 F7 001AC7r 1 F8 F9 FA FB -001ACFr 1 00 01 02 03 .lobytes 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh +001ACFr 1 00 01 02 03 .lobytes 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh 001AD3r 1 04 05 06 07 001AD7r 1 08 09 0A 0B -001ADFr 1 F0 F1 F2 F3 .lobytes 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh +001ADFr 1 F0 F1 F2 F3 .lobytes 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh 001AE3r 1 F4 F5 F6 F7 001AE7r 1 F8 F9 FA FB -001AEFr 1 00 01 02 03 .lobytes 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh +001AEFr 1 00 01 02 03 .lobytes 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh 001AF3r 1 04 05 06 07 001AF7r 1 08 09 0A 0B -001AFFr 1 F0 F1 F2 F3 .lobytes 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh +001AFFr 1 F0 F1 F2 F3 .lobytes 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh 001B03r 1 F4 F5 F6 F7 001B07r 1 F8 F9 FA FB -001B0Fr 1 00 01 02 03 .lobytes 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh +001B0Fr 1 00 01 02 03 .lobytes 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh 001B13r 1 04 05 06 07 001B17r 1 08 09 0A 0B -001B1Fr 1 F0 F1 F2 F3 .lobytes 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh +001B1Fr 1 F0 F1 F2 F3 .lobytes 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh 001B23r 1 F4 F5 F6 F7 001B27r 1 F8 F9 FA FB -001B2Fr 1 00 01 02 03 .lobytes 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh +001B2Fr 1 00 01 02 03 .lobytes 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh 001B33r 1 04 05 06 07 001B37r 1 08 09 0A 0B -001B3Fr 1 F0 F1 F2 F3 .lobytes 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh +001B3Fr 1 F0 F1 F2 F3 .lobytes 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh 001B43r 1 F4 F5 F6 F7 001B47r 1 F8 F9 FA FB -001B4Fr 1 00 01 02 03 .lobytes 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh +001B4Fr 1 00 01 02 03 .lobytes 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh 001B53r 1 04 05 06 07 001B57r 1 08 09 0A 0B -001B5Fr 1 F0 F1 F2 F3 .lobytes 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh +001B5Fr 1 F0 F1 F2 F3 .lobytes 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh 001B63r 1 F4 F5 F6 F7 001B67r 1 F8 F9 FA FB -001B6Fr 1 00 01 02 03 .lobytes 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh +001B6Fr 1 00 01 02 03 .lobytes 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh 001B73r 1 04 05 06 07 001B77r 1 08 09 0A 0B -001B7Fr 1 F0 F1 F2 F3 .lobytes 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh +001B7Fr 1 F0 F1 F2 F3 .lobytes 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh 001B83r 1 F4 F5 F6 F7 001B87r 1 F8 F9 FA FB -001B8Fr 1 00 01 02 03 .lobytes 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh +001B8Fr 1 00 01 02 03 .lobytes 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh 001B93r 1 04 05 06 07 001B97r 1 08 09 0A 0B -001B9Fr 1 F0 F1 F2 F3 .lobytes 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh +001B9Fr 1 F0 F1 F2 F3 .lobytes 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh 001BA3r 1 F4 F5 F6 F7 001BA7r 1 F8 F9 FA FB -001BAFr 1 00 01 02 03 .lobytes 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh +001BAFr 1 00 01 02 03 .lobytes 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh 001BB3r 1 04 05 06 07 001BB7r 1 08 09 0A 0B -001BBFr 1 F0 F1 F2 F3 .lobytes 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh +001BBFr 1 F0 F1 F2 F3 .lobytes 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh 001BC3r 1 F4 F5 F6 F7 001BC7r 1 F8 F9 FA FB 001BCFr 1 -001BCFr 1 ; mix some variants -001BCFr 1 0B 11 03 11 .lobytes 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh +001BCFr 1 ; mix some variants +001BCFr 1 0B 11 03 11 .lobytes 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh 001BD3r 1 61 62 7A 41 001BD7r 1 5A 30 39 AA 001BDEr 1 diff --git a/test/asm/listing/107-lobytes.s b/test/asm/listing/107-lobytes.s index ace7f83b6..53a368f38 100644 --- a/test/asm/listing/107-lobytes.s +++ b/test/asm/listing/107-lobytes.s @@ -1,6076 +1,6076 @@ ; 2022-06-15 Spiro Trikaliotis - ; upper case pseudo-op - .LOBYTES 0 - .LOBYTES 1 - .LOBYTES 2 - .LOBYTES 3 - .LOBYTES 4 - .LOBYTES 5 - .LOBYTES 6 - .LOBYTES 7 - .LOBYTES 8 - .LOBYTES 9 - .LOBYTES 10 - .LOBYTES 11 - .LOBYTES 12 - .LOBYTES 13 - .LOBYTES 14 - .LOBYTES 15 - .LOBYTES 16 - .LOBYTES 17 - .LOBYTES 18 - .LOBYTES 19 - .LOBYTES 112 - .LOBYTES 113 - .LOBYTES 114 - .LOBYTES 115 - .LOBYTES 116 - .LOBYTES 117 - .LOBYTES 118 - .LOBYTES 119 - .LOBYTES 120 - .LOBYTES 121 - .LOBYTES 122 - .LOBYTES 123 - .LOBYTES 124 - .LOBYTES 125 - .LOBYTES 126 - .LOBYTES 127 - .LOBYTES 128 - .LOBYTES 129 - .LOBYTES 130 - .LOBYTES 131 - .LOBYTES 132 - .LOBYTES 133 - .LOBYTES 134 - .LOBYTES 240 - .LOBYTES 241 - .LOBYTES 242 - .LOBYTES 243 - .LOBYTES 244 - .LOBYTES 245 - .LOBYTES 246 - .LOBYTES 247 - .LOBYTES 248 - .LOBYTES 249 - .LOBYTES 250 - .LOBYTES 251 - .LOBYTES 252 - .LOBYTES 253 - .LOBYTES 254 - .LOBYTES 255 - .LOBYTES 256 - .LOBYTES 257 - .LOBYTES 258 - .LOBYTES 259 - .LOBYTES 4050 - .LOBYTES 4051 - .LOBYTES 4052 - .LOBYTES 4053 - .LOBYTES 4054 - .LOBYTES 4055 - .LOBYTES 4056 - .LOBYTES 4057 - .LOBYTES 4058 - .LOBYTES 4059 - .LOBYTES 4060 - .LOBYTES 4061 - .LOBYTES 4062 - .LOBYTES 4063 - .LOBYTES 4064 - .LOBYTES 4065 - .LOBYTES 4066 - .LOBYTES 4067 - .LOBYTES 4068 - .LOBYTES 4069 - .LOBYTES 4070 - .LOBYTES 4071 - .LOBYTES 4072 - .LOBYTES 4073 - .LOBYTES 4074 - .LOBYTES 4075 - .LOBYTES 4076 - .LOBYTES 4077 - .LOBYTES 4078 - .LOBYTES 4079 - .LOBYTES 4080 - .LOBYTES 4081 - .LOBYTES 4082 - .LOBYTES 4083 - .LOBYTES 4084 - .LOBYTES 4085 - .LOBYTES 4086 - .LOBYTES 4087 - .LOBYTES 4088 - .LOBYTES 4089 - .LOBYTES 4090 - .LOBYTES 4091 - .LOBYTES 4092 - .LOBYTES 4093 - .LOBYTES 4094 - .LOBYTES 4095 - .LOBYTES 4096 - .LOBYTES 4097 - .LOBYTES 4098 - .LOBYTES 4099 - .LOBYTES 4100 - .LOBYTES 4101 - .LOBYTES 4102 - .LOBYTES 4103 - .LOBYTES 4104 - .LOBYTES 32752 - .LOBYTES 32753 - .LOBYTES 32754 - .LOBYTES 32755 - .LOBYTES 32756 - .LOBYTES 32757 - .LOBYTES 32758 - .LOBYTES 32759 - .LOBYTES 32760 - .LOBYTES 32761 - .LOBYTES 32762 - .LOBYTES 32763 - .LOBYTES 32764 - .LOBYTES 32765 - .LOBYTES 32766 - .LOBYTES 32767 - .LOBYTES 32768 - .LOBYTES 32769 - .LOBYTES 32770 - .LOBYTES 32771 - .LOBYTES 32772 - .LOBYTES 32773 - .LOBYTES 32774 - .LOBYTES 32775 - .LOBYTES 32776 - .LOBYTES 32777 - .LOBYTES 32778 - .LOBYTES 32779 - .LOBYTES 40929 - .LOBYTES 40930 - .LOBYTES 40931 - .LOBYTES 40932 - .LOBYTES 40933 - .LOBYTES 40934 - .LOBYTES 40935 - .LOBYTES 40936 - .LOBYTES 40937 - .LOBYTES 40938 - .LOBYTES 40939 - .LOBYTES 40940 - .LOBYTES 40941 - .LOBYTES 40942 - .LOBYTES 40943 - .LOBYTES 40944 - .LOBYTES 40945 - .LOBYTES 40946 - .LOBYTES 40947 - .LOBYTES 40948 - .LOBYTES 40949 - .LOBYTES 40950 - .LOBYTES 40951 - .LOBYTES 40952 - .LOBYTES 40953 - .LOBYTES 40954 - .LOBYTES 40955 - .LOBYTES 40956 - .LOBYTES 40957 - .LOBYTES 40958 - .LOBYTES 40959 - .LOBYTES 40960 - .LOBYTES 40961 - .LOBYTES 40962 - .LOBYTES 40963 - .LOBYTES 40964 - .LOBYTES 40965 - .LOBYTES 40966 - .LOBYTES 40967 - .LOBYTES 40968 - .LOBYTES 40969 - .LOBYTES 40970 - .LOBYTES 40971 - .LOBYTES 40972 - .LOBYTES 40973 - .LOBYTES 40974 - .LOBYTES 40975 - .LOBYTES 45025 - .LOBYTES 45026 - .LOBYTES 45027 - .LOBYTES 45028 - .LOBYTES 45029 - .LOBYTES 45030 - .LOBYTES 45031 - .LOBYTES 45032 - .LOBYTES 45033 - .LOBYTES 45034 - .LOBYTES 45035 - .LOBYTES 45036 - .LOBYTES 45037 - .LOBYTES 45038 - .LOBYTES 45039 - .LOBYTES 45040 - .LOBYTES 45041 - .LOBYTES 45042 - .LOBYTES 45043 - .LOBYTES 45044 - .LOBYTES 45045 - .LOBYTES 45046 - .LOBYTES 45047 - .LOBYTES 45048 - .LOBYTES 45049 - .LOBYTES 45050 - .LOBYTES 45051 - .LOBYTES 45052 - .LOBYTES 45053 - .LOBYTES 45054 - .LOBYTES 45055 - .LOBYTES 45056 - .LOBYTES 45057 - .LOBYTES 45058 - .LOBYTES 45059 - .LOBYTES 45060 - .LOBYTES 45061 - .LOBYTES 45062 - .LOBYTES 45063 - .LOBYTES 45064 - .LOBYTES 45065 - .LOBYTES 45066 - .LOBYTES 45067 - .LOBYTES 45068 - .LOBYTES 45069 - .LOBYTES 45070 - .LOBYTES 45071 - .LOBYTES 49121 - .LOBYTES 49122 - .LOBYTES 49123 - .LOBYTES 49124 - .LOBYTES 49125 - .LOBYTES 49126 - .LOBYTES 49127 - .LOBYTES 49128 - .LOBYTES 49129 - .LOBYTES 49130 - .LOBYTES 49131 - .LOBYTES 49132 - .LOBYTES 49133 - .LOBYTES 49134 - .LOBYTES 49135 - .LOBYTES 49136 - .LOBYTES 49137 - .LOBYTES 49138 - .LOBYTES 49139 - .LOBYTES 49140 - .LOBYTES 49141 - .LOBYTES 49142 - .LOBYTES 49143 - .LOBYTES 49144 - .LOBYTES 49145 - .LOBYTES 49146 - .LOBYTES 49147 - .LOBYTES 49148 - .LOBYTES 49149 - .LOBYTES 49150 - .LOBYTES 49151 - .LOBYTES 49152 - .LOBYTES 49153 - .LOBYTES 49154 - .LOBYTES 49155 - .LOBYTES 49156 - .LOBYTES 49157 - .LOBYTES 49158 - .LOBYTES 49159 - .LOBYTES 49160 - .LOBYTES 49161 - .LOBYTES 49162 - .LOBYTES 49163 - .LOBYTES 49164 - .LOBYTES 49165 - .LOBYTES 49166 - .LOBYTES 49167 - .LOBYTES 53217 - .LOBYTES 53218 - .LOBYTES 53219 - .LOBYTES 53220 - .LOBYTES 53221 - .LOBYTES 53222 - .LOBYTES 53223 - .LOBYTES 53224 - .LOBYTES 53225 - .LOBYTES 53226 - .LOBYTES 53227 - .LOBYTES 53228 - .LOBYTES 53229 - .LOBYTES 53230 - .LOBYTES 53231 - .LOBYTES 53232 - .LOBYTES 53233 - .LOBYTES 53234 - .LOBYTES 53235 - .LOBYTES 53236 - .LOBYTES 53237 - .LOBYTES 53238 - .LOBYTES 53239 - .LOBYTES 53240 - .LOBYTES 53241 - .LOBYTES 53242 - .LOBYTES 53243 - .LOBYTES 53244 - .LOBYTES 53245 - .LOBYTES 53246 - .LOBYTES 53247 - .LOBYTES 53248 - .LOBYTES 53249 - .LOBYTES 53250 - .LOBYTES 53251 - .LOBYTES 53252 - .LOBYTES 53253 - .LOBYTES 53254 - .LOBYTES 53255 - .LOBYTES 53256 - .LOBYTES 53257 - .LOBYTES 53258 - .LOBYTES 53259 - .LOBYTES 53260 - .LOBYTES 53261 - .LOBYTES 53262 - .LOBYTES 53263 - .LOBYTES 57313 - .LOBYTES 57314 - .LOBYTES 57315 - .LOBYTES 57316 - .LOBYTES 57317 - .LOBYTES 57318 - .LOBYTES 57319 - .LOBYTES 57320 - .LOBYTES 57321 - .LOBYTES 57322 - .LOBYTES 57323 - .LOBYTES 57324 - .LOBYTES 57325 - .LOBYTES 57326 - .LOBYTES 57327 - .LOBYTES 57328 - .LOBYTES 57329 - .LOBYTES 57330 - .LOBYTES 57331 - .LOBYTES 57332 - .LOBYTES 57333 - .LOBYTES 57334 - .LOBYTES 57335 - .LOBYTES 57336 - .LOBYTES 57337 - .LOBYTES 57338 - .LOBYTES 57339 - .LOBYTES 57340 - .LOBYTES 57341 - .LOBYTES 57342 - .LOBYTES 57343 - .LOBYTES 57344 - .LOBYTES 57345 - .LOBYTES 57346 - .LOBYTES 57347 - .LOBYTES 57348 - .LOBYTES 57349 - .LOBYTES 57350 - .LOBYTES 57351 - .LOBYTES 57352 - .LOBYTES 57353 - .LOBYTES 57354 - .LOBYTES 57355 - .LOBYTES 57356 - .LOBYTES 57357 - .LOBYTES 57358 - .LOBYTES 57359 - .LOBYTES 61409 - .LOBYTES 61410 - .LOBYTES 61411 - .LOBYTES 61412 - .LOBYTES 61413 - .LOBYTES 61414 - .LOBYTES 61415 - .LOBYTES 61416 - .LOBYTES 61417 - .LOBYTES 61418 - .LOBYTES 61419 - .LOBYTES 61420 - .LOBYTES 61421 - .LOBYTES 61422 - .LOBYTES 61423 - .LOBYTES 61424 - .LOBYTES 61425 - .LOBYTES 61426 - .LOBYTES 61427 - .LOBYTES 61428 - .LOBYTES 61429 - .LOBYTES 61430 - .LOBYTES 61431 - .LOBYTES 61432 - .LOBYTES 61433 - .LOBYTES 61434 - .LOBYTES 61435 - .LOBYTES 61436 - .LOBYTES 61437 - .LOBYTES 61438 - .LOBYTES 61439 - .LOBYTES 61440 - .LOBYTES 61441 - .LOBYTES 61442 - .LOBYTES 61443 - .LOBYTES 61444 - .LOBYTES 61445 - .LOBYTES 61446 - .LOBYTES 61447 - .LOBYTES 61448 - .LOBYTES 61449 - .LOBYTES 61450 - .LOBYTES 61451 - .LOBYTES 61452 - .LOBYTES 61453 - .LOBYTES 61454 - .LOBYTES 61455 - .LOBYTES 65505 - .LOBYTES 65506 - .LOBYTES 65507 - .LOBYTES 65508 - .LOBYTES 65509 - .LOBYTES 65510 - .LOBYTES 65511 - .LOBYTES 65512 - .LOBYTES 65513 - .LOBYTES 65514 - .LOBYTES 65515 - .LOBYTES 65516 - .LOBYTES 65517 - .LOBYTES 65518 - .LOBYTES 65519 - .LOBYTES 65520 - .LOBYTES 65521 - .LOBYTES 65522 - .LOBYTES 65523 - .LOBYTES 65524 - .LOBYTES 65525 - .LOBYTES 65526 - .LOBYTES 65527 - .LOBYTES 65528 - .LOBYTES 65529 - .LOBYTES 65530 - .LOBYTES 65531 - .LOBYTES 65532 - .LOBYTES 65533 - .LOBYTES 65534 - .LOBYTES 65535 + ; upper case pseudo-op + .LOBYTES 0 + .LOBYTES 1 + .LOBYTES 2 + .LOBYTES 3 + .LOBYTES 4 + .LOBYTES 5 + .LOBYTES 6 + .LOBYTES 7 + .LOBYTES 8 + .LOBYTES 9 + .LOBYTES 10 + .LOBYTES 11 + .LOBYTES 12 + .LOBYTES 13 + .LOBYTES 14 + .LOBYTES 15 + .LOBYTES 16 + .LOBYTES 17 + .LOBYTES 18 + .LOBYTES 19 + .LOBYTES 112 + .LOBYTES 113 + .LOBYTES 114 + .LOBYTES 115 + .LOBYTES 116 + .LOBYTES 117 + .LOBYTES 118 + .LOBYTES 119 + .LOBYTES 120 + .LOBYTES 121 + .LOBYTES 122 + .LOBYTES 123 + .LOBYTES 124 + .LOBYTES 125 + .LOBYTES 126 + .LOBYTES 127 + .LOBYTES 128 + .LOBYTES 129 + .LOBYTES 130 + .LOBYTES 131 + .LOBYTES 132 + .LOBYTES 133 + .LOBYTES 134 + .LOBYTES 240 + .LOBYTES 241 + .LOBYTES 242 + .LOBYTES 243 + .LOBYTES 244 + .LOBYTES 245 + .LOBYTES 246 + .LOBYTES 247 + .LOBYTES 248 + .LOBYTES 249 + .LOBYTES 250 + .LOBYTES 251 + .LOBYTES 252 + .LOBYTES 253 + .LOBYTES 254 + .LOBYTES 255 + .LOBYTES 256 + .LOBYTES 257 + .LOBYTES 258 + .LOBYTES 259 + .LOBYTES 4050 + .LOBYTES 4051 + .LOBYTES 4052 + .LOBYTES 4053 + .LOBYTES 4054 + .LOBYTES 4055 + .LOBYTES 4056 + .LOBYTES 4057 + .LOBYTES 4058 + .LOBYTES 4059 + .LOBYTES 4060 + .LOBYTES 4061 + .LOBYTES 4062 + .LOBYTES 4063 + .LOBYTES 4064 + .LOBYTES 4065 + .LOBYTES 4066 + .LOBYTES 4067 + .LOBYTES 4068 + .LOBYTES 4069 + .LOBYTES 4070 + .LOBYTES 4071 + .LOBYTES 4072 + .LOBYTES 4073 + .LOBYTES 4074 + .LOBYTES 4075 + .LOBYTES 4076 + .LOBYTES 4077 + .LOBYTES 4078 + .LOBYTES 4079 + .LOBYTES 4080 + .LOBYTES 4081 + .LOBYTES 4082 + .LOBYTES 4083 + .LOBYTES 4084 + .LOBYTES 4085 + .LOBYTES 4086 + .LOBYTES 4087 + .LOBYTES 4088 + .LOBYTES 4089 + .LOBYTES 4090 + .LOBYTES 4091 + .LOBYTES 4092 + .LOBYTES 4093 + .LOBYTES 4094 + .LOBYTES 4095 + .LOBYTES 4096 + .LOBYTES 4097 + .LOBYTES 4098 + .LOBYTES 4099 + .LOBYTES 4100 + .LOBYTES 4101 + .LOBYTES 4102 + .LOBYTES 4103 + .LOBYTES 4104 + .LOBYTES 32752 + .LOBYTES 32753 + .LOBYTES 32754 + .LOBYTES 32755 + .LOBYTES 32756 + .LOBYTES 32757 + .LOBYTES 32758 + .LOBYTES 32759 + .LOBYTES 32760 + .LOBYTES 32761 + .LOBYTES 32762 + .LOBYTES 32763 + .LOBYTES 32764 + .LOBYTES 32765 + .LOBYTES 32766 + .LOBYTES 32767 + .LOBYTES 32768 + .LOBYTES 32769 + .LOBYTES 32770 + .LOBYTES 32771 + .LOBYTES 32772 + .LOBYTES 32773 + .LOBYTES 32774 + .LOBYTES 32775 + .LOBYTES 32776 + .LOBYTES 32777 + .LOBYTES 32778 + .LOBYTES 32779 + .LOBYTES 40929 + .LOBYTES 40930 + .LOBYTES 40931 + .LOBYTES 40932 + .LOBYTES 40933 + .LOBYTES 40934 + .LOBYTES 40935 + .LOBYTES 40936 + .LOBYTES 40937 + .LOBYTES 40938 + .LOBYTES 40939 + .LOBYTES 40940 + .LOBYTES 40941 + .LOBYTES 40942 + .LOBYTES 40943 + .LOBYTES 40944 + .LOBYTES 40945 + .LOBYTES 40946 + .LOBYTES 40947 + .LOBYTES 40948 + .LOBYTES 40949 + .LOBYTES 40950 + .LOBYTES 40951 + .LOBYTES 40952 + .LOBYTES 40953 + .LOBYTES 40954 + .LOBYTES 40955 + .LOBYTES 40956 + .LOBYTES 40957 + .LOBYTES 40958 + .LOBYTES 40959 + .LOBYTES 40960 + .LOBYTES 40961 + .LOBYTES 40962 + .LOBYTES 40963 + .LOBYTES 40964 + .LOBYTES 40965 + .LOBYTES 40966 + .LOBYTES 40967 + .LOBYTES 40968 + .LOBYTES 40969 + .LOBYTES 40970 + .LOBYTES 40971 + .LOBYTES 40972 + .LOBYTES 40973 + .LOBYTES 40974 + .LOBYTES 40975 + .LOBYTES 45025 + .LOBYTES 45026 + .LOBYTES 45027 + .LOBYTES 45028 + .LOBYTES 45029 + .LOBYTES 45030 + .LOBYTES 45031 + .LOBYTES 45032 + .LOBYTES 45033 + .LOBYTES 45034 + .LOBYTES 45035 + .LOBYTES 45036 + .LOBYTES 45037 + .LOBYTES 45038 + .LOBYTES 45039 + .LOBYTES 45040 + .LOBYTES 45041 + .LOBYTES 45042 + .LOBYTES 45043 + .LOBYTES 45044 + .LOBYTES 45045 + .LOBYTES 45046 + .LOBYTES 45047 + .LOBYTES 45048 + .LOBYTES 45049 + .LOBYTES 45050 + .LOBYTES 45051 + .LOBYTES 45052 + .LOBYTES 45053 + .LOBYTES 45054 + .LOBYTES 45055 + .LOBYTES 45056 + .LOBYTES 45057 + .LOBYTES 45058 + .LOBYTES 45059 + .LOBYTES 45060 + .LOBYTES 45061 + .LOBYTES 45062 + .LOBYTES 45063 + .LOBYTES 45064 + .LOBYTES 45065 + .LOBYTES 45066 + .LOBYTES 45067 + .LOBYTES 45068 + .LOBYTES 45069 + .LOBYTES 45070 + .LOBYTES 45071 + .LOBYTES 49121 + .LOBYTES 49122 + .LOBYTES 49123 + .LOBYTES 49124 + .LOBYTES 49125 + .LOBYTES 49126 + .LOBYTES 49127 + .LOBYTES 49128 + .LOBYTES 49129 + .LOBYTES 49130 + .LOBYTES 49131 + .LOBYTES 49132 + .LOBYTES 49133 + .LOBYTES 49134 + .LOBYTES 49135 + .LOBYTES 49136 + .LOBYTES 49137 + .LOBYTES 49138 + .LOBYTES 49139 + .LOBYTES 49140 + .LOBYTES 49141 + .LOBYTES 49142 + .LOBYTES 49143 + .LOBYTES 49144 + .LOBYTES 49145 + .LOBYTES 49146 + .LOBYTES 49147 + .LOBYTES 49148 + .LOBYTES 49149 + .LOBYTES 49150 + .LOBYTES 49151 + .LOBYTES 49152 + .LOBYTES 49153 + .LOBYTES 49154 + .LOBYTES 49155 + .LOBYTES 49156 + .LOBYTES 49157 + .LOBYTES 49158 + .LOBYTES 49159 + .LOBYTES 49160 + .LOBYTES 49161 + .LOBYTES 49162 + .LOBYTES 49163 + .LOBYTES 49164 + .LOBYTES 49165 + .LOBYTES 49166 + .LOBYTES 49167 + .LOBYTES 53217 + .LOBYTES 53218 + .LOBYTES 53219 + .LOBYTES 53220 + .LOBYTES 53221 + .LOBYTES 53222 + .LOBYTES 53223 + .LOBYTES 53224 + .LOBYTES 53225 + .LOBYTES 53226 + .LOBYTES 53227 + .LOBYTES 53228 + .LOBYTES 53229 + .LOBYTES 53230 + .LOBYTES 53231 + .LOBYTES 53232 + .LOBYTES 53233 + .LOBYTES 53234 + .LOBYTES 53235 + .LOBYTES 53236 + .LOBYTES 53237 + .LOBYTES 53238 + .LOBYTES 53239 + .LOBYTES 53240 + .LOBYTES 53241 + .LOBYTES 53242 + .LOBYTES 53243 + .LOBYTES 53244 + .LOBYTES 53245 + .LOBYTES 53246 + .LOBYTES 53247 + .LOBYTES 53248 + .LOBYTES 53249 + .LOBYTES 53250 + .LOBYTES 53251 + .LOBYTES 53252 + .LOBYTES 53253 + .LOBYTES 53254 + .LOBYTES 53255 + .LOBYTES 53256 + .LOBYTES 53257 + .LOBYTES 53258 + .LOBYTES 53259 + .LOBYTES 53260 + .LOBYTES 53261 + .LOBYTES 53262 + .LOBYTES 53263 + .LOBYTES 57313 + .LOBYTES 57314 + .LOBYTES 57315 + .LOBYTES 57316 + .LOBYTES 57317 + .LOBYTES 57318 + .LOBYTES 57319 + .LOBYTES 57320 + .LOBYTES 57321 + .LOBYTES 57322 + .LOBYTES 57323 + .LOBYTES 57324 + .LOBYTES 57325 + .LOBYTES 57326 + .LOBYTES 57327 + .LOBYTES 57328 + .LOBYTES 57329 + .LOBYTES 57330 + .LOBYTES 57331 + .LOBYTES 57332 + .LOBYTES 57333 + .LOBYTES 57334 + .LOBYTES 57335 + .LOBYTES 57336 + .LOBYTES 57337 + .LOBYTES 57338 + .LOBYTES 57339 + .LOBYTES 57340 + .LOBYTES 57341 + .LOBYTES 57342 + .LOBYTES 57343 + .LOBYTES 57344 + .LOBYTES 57345 + .LOBYTES 57346 + .LOBYTES 57347 + .LOBYTES 57348 + .LOBYTES 57349 + .LOBYTES 57350 + .LOBYTES 57351 + .LOBYTES 57352 + .LOBYTES 57353 + .LOBYTES 57354 + .LOBYTES 57355 + .LOBYTES 57356 + .LOBYTES 57357 + .LOBYTES 57358 + .LOBYTES 57359 + .LOBYTES 61409 + .LOBYTES 61410 + .LOBYTES 61411 + .LOBYTES 61412 + .LOBYTES 61413 + .LOBYTES 61414 + .LOBYTES 61415 + .LOBYTES 61416 + .LOBYTES 61417 + .LOBYTES 61418 + .LOBYTES 61419 + .LOBYTES 61420 + .LOBYTES 61421 + .LOBYTES 61422 + .LOBYTES 61423 + .LOBYTES 61424 + .LOBYTES 61425 + .LOBYTES 61426 + .LOBYTES 61427 + .LOBYTES 61428 + .LOBYTES 61429 + .LOBYTES 61430 + .LOBYTES 61431 + .LOBYTES 61432 + .LOBYTES 61433 + .LOBYTES 61434 + .LOBYTES 61435 + .LOBYTES 61436 + .LOBYTES 61437 + .LOBYTES 61438 + .LOBYTES 61439 + .LOBYTES 61440 + .LOBYTES 61441 + .LOBYTES 61442 + .LOBYTES 61443 + .LOBYTES 61444 + .LOBYTES 61445 + .LOBYTES 61446 + .LOBYTES 61447 + .LOBYTES 61448 + .LOBYTES 61449 + .LOBYTES 61450 + .LOBYTES 61451 + .LOBYTES 61452 + .LOBYTES 61453 + .LOBYTES 61454 + .LOBYTES 61455 + .LOBYTES 65505 + .LOBYTES 65506 + .LOBYTES 65507 + .LOBYTES 65508 + .LOBYTES 65509 + .LOBYTES 65510 + .LOBYTES 65511 + .LOBYTES 65512 + .LOBYTES 65513 + .LOBYTES 65514 + .LOBYTES 65515 + .LOBYTES 65516 + .LOBYTES 65517 + .LOBYTES 65518 + .LOBYTES 65519 + .LOBYTES 65520 + .LOBYTES 65521 + .LOBYTES 65522 + .LOBYTES 65523 + .LOBYTES 65524 + .LOBYTES 65525 + .LOBYTES 65526 + .LOBYTES 65527 + .LOBYTES 65528 + .LOBYTES 65529 + .LOBYTES 65530 + .LOBYTES 65531 + .LOBYTES 65532 + .LOBYTES 65533 + .LOBYTES 65534 + .LOBYTES 65535 - ; lower case pseudo-op - .lobytes 0 - .lobytes 1 - .lobytes 2 - .lobytes 3 - .lobytes 4 - .lobytes 5 - .lobytes 6 - .lobytes 7 - .lobytes 8 - .lobytes 9 - .lobytes 10 - .lobytes 11 - .lobytes 12 - .lobytes 13 - .lobytes 14 - .lobytes 15 - .lobytes 16 - .lobytes 17 - .lobytes 18 - .lobytes 19 - .lobytes 112 - .lobytes 113 - .lobytes 114 - .lobytes 115 - .lobytes 116 - .lobytes 117 - .lobytes 118 - .lobytes 119 - .lobytes 120 - .lobytes 121 - .lobytes 122 - .lobytes 123 - .lobytes 124 - .lobytes 125 - .lobytes 126 - .lobytes 127 - .lobytes 128 - .lobytes 129 - .lobytes 130 - .lobytes 131 - .lobytes 132 - .lobytes 133 - .lobytes 134 - .lobytes 240 - .lobytes 241 - .lobytes 242 - .lobytes 243 - .lobytes 244 - .lobytes 245 - .lobytes 246 - .lobytes 247 - .lobytes 248 - .lobytes 249 - .lobytes 250 - .lobytes 251 - .lobytes 252 - .lobytes 253 - .lobytes 254 - .lobytes 255 - .lobytes 256 - .lobytes 257 - .lobytes 258 - .lobytes 259 - .lobytes 4050 - .lobytes 4051 - .lobytes 4052 - .lobytes 4053 - .lobytes 4054 - .lobytes 4055 - .lobytes 4056 - .lobytes 4057 - .lobytes 4058 - .lobytes 4059 - .lobytes 4060 - .lobytes 4061 - .lobytes 4062 - .lobytes 4063 - .lobytes 4064 - .lobytes 4065 - .lobytes 4066 - .lobytes 4067 - .lobytes 4068 - .lobytes 4069 - .lobytes 4070 - .lobytes 4071 - .lobytes 4072 - .lobytes 4073 - .lobytes 4074 - .lobytes 4075 - .lobytes 4076 - .lobytes 4077 - .lobytes 4078 - .lobytes 4079 - .lobytes 4080 - .lobytes 4081 - .lobytes 4082 - .lobytes 4083 - .lobytes 4084 - .lobytes 4085 - .lobytes 4086 - .lobytes 4087 - .lobytes 4088 - .lobytes 4089 - .lobytes 4090 - .lobytes 4091 - .lobytes 4092 - .lobytes 4093 - .lobytes 4094 - .lobytes 4095 - .lobytes 4096 - .lobytes 4097 - .lobytes 4098 - .lobytes 4099 - .lobytes 4100 - .lobytes 4101 - .lobytes 4102 - .lobytes 4103 - .lobytes 4104 - .lobytes 32752 - .lobytes 32753 - .lobytes 32754 - .lobytes 32755 - .lobytes 32756 - .lobytes 32757 - .lobytes 32758 - .lobytes 32759 - .lobytes 32760 - .lobytes 32761 - .lobytes 32762 - .lobytes 32763 - .lobytes 32764 - .lobytes 32765 - .lobytes 32766 - .lobytes 32767 - .lobytes 32768 - .lobytes 32769 - .lobytes 32770 - .lobytes 32771 - .lobytes 32772 - .lobytes 32773 - .lobytes 32774 - .lobytes 32775 - .lobytes 32776 - .lobytes 32777 - .lobytes 32778 - .lobytes 32779 - .lobytes 40929 - .lobytes 40930 - .lobytes 40931 - .lobytes 40932 - .lobytes 40933 - .lobytes 40934 - .lobytes 40935 - .lobytes 40936 - .lobytes 40937 - .lobytes 40938 - .lobytes 40939 - .lobytes 40940 - .lobytes 40941 - .lobytes 40942 - .lobytes 40943 - .lobytes 40944 - .lobytes 40945 - .lobytes 40946 - .lobytes 40947 - .lobytes 40948 - .lobytes 40949 - .lobytes 40950 - .lobytes 40951 - .lobytes 40952 - .lobytes 40953 - .lobytes 40954 - .lobytes 40955 - .lobytes 40956 - .lobytes 40957 - .lobytes 40958 - .lobytes 40959 - .lobytes 40960 - .lobytes 40961 - .lobytes 40962 - .lobytes 40963 - .lobytes 40964 - .lobytes 40965 - .lobytes 40966 - .lobytes 40967 - .lobytes 40968 - .lobytes 40969 - .lobytes 40970 - .lobytes 40971 - .lobytes 40972 - .lobytes 40973 - .lobytes 40974 - .lobytes 40975 - .lobytes 45025 - .lobytes 45026 - .lobytes 45027 - .lobytes 45028 - .lobytes 45029 - .lobytes 45030 - .lobytes 45031 - .lobytes 45032 - .lobytes 45033 - .lobytes 45034 - .lobytes 45035 - .lobytes 45036 - .lobytes 45037 - .lobytes 45038 - .lobytes 45039 - .lobytes 45040 - .lobytes 45041 - .lobytes 45042 - .lobytes 45043 - .lobytes 45044 - .lobytes 45045 - .lobytes 45046 - .lobytes 45047 - .lobytes 45048 - .lobytes 45049 - .lobytes 45050 - .lobytes 45051 - .lobytes 45052 - .lobytes 45053 - .lobytes 45054 - .lobytes 45055 - .lobytes 45056 - .lobytes 45057 - .lobytes 45058 - .lobytes 45059 - .lobytes 45060 - .lobytes 45061 - .lobytes 45062 - .lobytes 45063 - .lobytes 45064 - .lobytes 45065 - .lobytes 45066 - .lobytes 45067 - .lobytes 45068 - .lobytes 45069 - .lobytes 45070 - .lobytes 45071 - .lobytes 49121 - .lobytes 49122 - .lobytes 49123 - .lobytes 49124 - .lobytes 49125 - .lobytes 49126 - .lobytes 49127 - .lobytes 49128 - .lobytes 49129 - .lobytes 49130 - .lobytes 49131 - .lobytes 49132 - .lobytes 49133 - .lobytes 49134 - .lobytes 49135 - .lobytes 49136 - .lobytes 49137 - .lobytes 49138 - .lobytes 49139 - .lobytes 49140 - .lobytes 49141 - .lobytes 49142 - .lobytes 49143 - .lobytes 49144 - .lobytes 49145 - .lobytes 49146 - .lobytes 49147 - .lobytes 49148 - .lobytes 49149 - .lobytes 49150 - .lobytes 49151 - .lobytes 49152 - .lobytes 49153 - .lobytes 49154 - .lobytes 49155 - .lobytes 49156 - .lobytes 49157 - .lobytes 49158 - .lobytes 49159 - .lobytes 49160 - .lobytes 49161 - .lobytes 49162 - .lobytes 49163 - .lobytes 49164 - .lobytes 49165 - .lobytes 49166 - .lobytes 49167 - .lobytes 53217 - .lobytes 53218 - .lobytes 53219 - .lobytes 53220 - .lobytes 53221 - .lobytes 53222 - .lobytes 53223 - .lobytes 53224 - .lobytes 53225 - .lobytes 53226 - .lobytes 53227 - .lobytes 53228 - .lobytes 53229 - .lobytes 53230 - .lobytes 53231 - .lobytes 53232 - .lobytes 53233 - .lobytes 53234 - .lobytes 53235 - .lobytes 53236 - .lobytes 53237 - .lobytes 53238 - .lobytes 53239 - .lobytes 53240 - .lobytes 53241 - .lobytes 53242 - .lobytes 53243 - .lobytes 53244 - .lobytes 53245 - .lobytes 53246 - .lobytes 53247 - .lobytes 53248 - .lobytes 53249 - .lobytes 53250 - .lobytes 53251 - .lobytes 53252 - .lobytes 53253 - .lobytes 53254 - .lobytes 53255 - .lobytes 53256 - .lobytes 53257 - .lobytes 53258 - .lobytes 53259 - .lobytes 53260 - .lobytes 53261 - .lobytes 53262 - .lobytes 53263 - .lobytes 57313 - .lobytes 57314 - .lobytes 57315 - .lobytes 57316 - .lobytes 57317 - .lobytes 57318 - .lobytes 57319 - .lobytes 57320 - .lobytes 57321 - .lobytes 57322 - .lobytes 57323 - .lobytes 57324 - .lobytes 57325 - .lobytes 57326 - .lobytes 57327 - .lobytes 57328 - .lobytes 57329 - .lobytes 57330 - .lobytes 57331 - .lobytes 57332 - .lobytes 57333 - .lobytes 57334 - .lobytes 57335 - .lobytes 57336 - .lobytes 57337 - .lobytes 57338 - .lobytes 57339 - .lobytes 57340 - .lobytes 57341 - .lobytes 57342 - .lobytes 57343 - .lobytes 57344 - .lobytes 57345 - .lobytes 57346 - .lobytes 57347 - .lobytes 57348 - .lobytes 57349 - .lobytes 57350 - .lobytes 57351 - .lobytes 57352 - .lobytes 57353 - .lobytes 57354 - .lobytes 57355 - .lobytes 57356 - .lobytes 57357 - .lobytes 57358 - .lobytes 57359 - .lobytes 61409 - .lobytes 61410 - .lobytes 61411 - .lobytes 61412 - .lobytes 61413 - .lobytes 61414 - .lobytes 61415 - .lobytes 61416 - .lobytes 61417 - .lobytes 61418 - .lobytes 61419 - .lobytes 61420 - .lobytes 61421 - .lobytes 61422 - .lobytes 61423 - .lobytes 61424 - .lobytes 61425 - .lobytes 61426 - .lobytes 61427 - .lobytes 61428 - .lobytes 61429 - .lobytes 61430 - .lobytes 61431 - .lobytes 61432 - .lobytes 61433 - .lobytes 61434 - .lobytes 61435 - .lobytes 61436 - .lobytes 61437 - .lobytes 61438 - .lobytes 61439 - .lobytes 61440 - .lobytes 61441 - .lobytes 61442 - .lobytes 61443 - .lobytes 61444 - .lobytes 61445 - .lobytes 61446 - .lobytes 61447 - .lobytes 61448 - .lobytes 61449 - .lobytes 61450 - .lobytes 61451 - .lobytes 61452 - .lobytes 61453 - .lobytes 61454 - .lobytes 61455 - .lobytes 65505 - .lobytes 65506 - .lobytes 65507 - .lobytes 65508 - .lobytes 65509 - .lobytes 65510 - .lobytes 65511 - .lobytes 65512 - .lobytes 65513 - .lobytes 65514 - .lobytes 65515 - .lobytes 65516 - .lobytes 65517 - .lobytes 65518 - .lobytes 65519 - .lobytes 65520 - .lobytes 65521 - .lobytes 65522 - .lobytes 65523 - .lobytes 65524 - .lobytes 65525 - .lobytes 65526 - .lobytes 65527 - .lobytes 65528 - .lobytes 65529 - .lobytes 65530 - .lobytes 65531 - .lobytes 65532 - .lobytes 65533 - .lobytes 65534 - .lobytes 65535 + ; lower case pseudo-op + .lobytes 0 + .lobytes 1 + .lobytes 2 + .lobytes 3 + .lobytes 4 + .lobytes 5 + .lobytes 6 + .lobytes 7 + .lobytes 8 + .lobytes 9 + .lobytes 10 + .lobytes 11 + .lobytes 12 + .lobytes 13 + .lobytes 14 + .lobytes 15 + .lobytes 16 + .lobytes 17 + .lobytes 18 + .lobytes 19 + .lobytes 112 + .lobytes 113 + .lobytes 114 + .lobytes 115 + .lobytes 116 + .lobytes 117 + .lobytes 118 + .lobytes 119 + .lobytes 120 + .lobytes 121 + .lobytes 122 + .lobytes 123 + .lobytes 124 + .lobytes 125 + .lobytes 126 + .lobytes 127 + .lobytes 128 + .lobytes 129 + .lobytes 130 + .lobytes 131 + .lobytes 132 + .lobytes 133 + .lobytes 134 + .lobytes 240 + .lobytes 241 + .lobytes 242 + .lobytes 243 + .lobytes 244 + .lobytes 245 + .lobytes 246 + .lobytes 247 + .lobytes 248 + .lobytes 249 + .lobytes 250 + .lobytes 251 + .lobytes 252 + .lobytes 253 + .lobytes 254 + .lobytes 255 + .lobytes 256 + .lobytes 257 + .lobytes 258 + .lobytes 259 + .lobytes 4050 + .lobytes 4051 + .lobytes 4052 + .lobytes 4053 + .lobytes 4054 + .lobytes 4055 + .lobytes 4056 + .lobytes 4057 + .lobytes 4058 + .lobytes 4059 + .lobytes 4060 + .lobytes 4061 + .lobytes 4062 + .lobytes 4063 + .lobytes 4064 + .lobytes 4065 + .lobytes 4066 + .lobytes 4067 + .lobytes 4068 + .lobytes 4069 + .lobytes 4070 + .lobytes 4071 + .lobytes 4072 + .lobytes 4073 + .lobytes 4074 + .lobytes 4075 + .lobytes 4076 + .lobytes 4077 + .lobytes 4078 + .lobytes 4079 + .lobytes 4080 + .lobytes 4081 + .lobytes 4082 + .lobytes 4083 + .lobytes 4084 + .lobytes 4085 + .lobytes 4086 + .lobytes 4087 + .lobytes 4088 + .lobytes 4089 + .lobytes 4090 + .lobytes 4091 + .lobytes 4092 + .lobytes 4093 + .lobytes 4094 + .lobytes 4095 + .lobytes 4096 + .lobytes 4097 + .lobytes 4098 + .lobytes 4099 + .lobytes 4100 + .lobytes 4101 + .lobytes 4102 + .lobytes 4103 + .lobytes 4104 + .lobytes 32752 + .lobytes 32753 + .lobytes 32754 + .lobytes 32755 + .lobytes 32756 + .lobytes 32757 + .lobytes 32758 + .lobytes 32759 + .lobytes 32760 + .lobytes 32761 + .lobytes 32762 + .lobytes 32763 + .lobytes 32764 + .lobytes 32765 + .lobytes 32766 + .lobytes 32767 + .lobytes 32768 + .lobytes 32769 + .lobytes 32770 + .lobytes 32771 + .lobytes 32772 + .lobytes 32773 + .lobytes 32774 + .lobytes 32775 + .lobytes 32776 + .lobytes 32777 + .lobytes 32778 + .lobytes 32779 + .lobytes 40929 + .lobytes 40930 + .lobytes 40931 + .lobytes 40932 + .lobytes 40933 + .lobytes 40934 + .lobytes 40935 + .lobytes 40936 + .lobytes 40937 + .lobytes 40938 + .lobytes 40939 + .lobytes 40940 + .lobytes 40941 + .lobytes 40942 + .lobytes 40943 + .lobytes 40944 + .lobytes 40945 + .lobytes 40946 + .lobytes 40947 + .lobytes 40948 + .lobytes 40949 + .lobytes 40950 + .lobytes 40951 + .lobytes 40952 + .lobytes 40953 + .lobytes 40954 + .lobytes 40955 + .lobytes 40956 + .lobytes 40957 + .lobytes 40958 + .lobytes 40959 + .lobytes 40960 + .lobytes 40961 + .lobytes 40962 + .lobytes 40963 + .lobytes 40964 + .lobytes 40965 + .lobytes 40966 + .lobytes 40967 + .lobytes 40968 + .lobytes 40969 + .lobytes 40970 + .lobytes 40971 + .lobytes 40972 + .lobytes 40973 + .lobytes 40974 + .lobytes 40975 + .lobytes 45025 + .lobytes 45026 + .lobytes 45027 + .lobytes 45028 + .lobytes 45029 + .lobytes 45030 + .lobytes 45031 + .lobytes 45032 + .lobytes 45033 + .lobytes 45034 + .lobytes 45035 + .lobytes 45036 + .lobytes 45037 + .lobytes 45038 + .lobytes 45039 + .lobytes 45040 + .lobytes 45041 + .lobytes 45042 + .lobytes 45043 + .lobytes 45044 + .lobytes 45045 + .lobytes 45046 + .lobytes 45047 + .lobytes 45048 + .lobytes 45049 + .lobytes 45050 + .lobytes 45051 + .lobytes 45052 + .lobytes 45053 + .lobytes 45054 + .lobytes 45055 + .lobytes 45056 + .lobytes 45057 + .lobytes 45058 + .lobytes 45059 + .lobytes 45060 + .lobytes 45061 + .lobytes 45062 + .lobytes 45063 + .lobytes 45064 + .lobytes 45065 + .lobytes 45066 + .lobytes 45067 + .lobytes 45068 + .lobytes 45069 + .lobytes 45070 + .lobytes 45071 + .lobytes 49121 + .lobytes 49122 + .lobytes 49123 + .lobytes 49124 + .lobytes 49125 + .lobytes 49126 + .lobytes 49127 + .lobytes 49128 + .lobytes 49129 + .lobytes 49130 + .lobytes 49131 + .lobytes 49132 + .lobytes 49133 + .lobytes 49134 + .lobytes 49135 + .lobytes 49136 + .lobytes 49137 + .lobytes 49138 + .lobytes 49139 + .lobytes 49140 + .lobytes 49141 + .lobytes 49142 + .lobytes 49143 + .lobytes 49144 + .lobytes 49145 + .lobytes 49146 + .lobytes 49147 + .lobytes 49148 + .lobytes 49149 + .lobytes 49150 + .lobytes 49151 + .lobytes 49152 + .lobytes 49153 + .lobytes 49154 + .lobytes 49155 + .lobytes 49156 + .lobytes 49157 + .lobytes 49158 + .lobytes 49159 + .lobytes 49160 + .lobytes 49161 + .lobytes 49162 + .lobytes 49163 + .lobytes 49164 + .lobytes 49165 + .lobytes 49166 + .lobytes 49167 + .lobytes 53217 + .lobytes 53218 + .lobytes 53219 + .lobytes 53220 + .lobytes 53221 + .lobytes 53222 + .lobytes 53223 + .lobytes 53224 + .lobytes 53225 + .lobytes 53226 + .lobytes 53227 + .lobytes 53228 + .lobytes 53229 + .lobytes 53230 + .lobytes 53231 + .lobytes 53232 + .lobytes 53233 + .lobytes 53234 + .lobytes 53235 + .lobytes 53236 + .lobytes 53237 + .lobytes 53238 + .lobytes 53239 + .lobytes 53240 + .lobytes 53241 + .lobytes 53242 + .lobytes 53243 + .lobytes 53244 + .lobytes 53245 + .lobytes 53246 + .lobytes 53247 + .lobytes 53248 + .lobytes 53249 + .lobytes 53250 + .lobytes 53251 + .lobytes 53252 + .lobytes 53253 + .lobytes 53254 + .lobytes 53255 + .lobytes 53256 + .lobytes 53257 + .lobytes 53258 + .lobytes 53259 + .lobytes 53260 + .lobytes 53261 + .lobytes 53262 + .lobytes 53263 + .lobytes 57313 + .lobytes 57314 + .lobytes 57315 + .lobytes 57316 + .lobytes 57317 + .lobytes 57318 + .lobytes 57319 + .lobytes 57320 + .lobytes 57321 + .lobytes 57322 + .lobytes 57323 + .lobytes 57324 + .lobytes 57325 + .lobytes 57326 + .lobytes 57327 + .lobytes 57328 + .lobytes 57329 + .lobytes 57330 + .lobytes 57331 + .lobytes 57332 + .lobytes 57333 + .lobytes 57334 + .lobytes 57335 + .lobytes 57336 + .lobytes 57337 + .lobytes 57338 + .lobytes 57339 + .lobytes 57340 + .lobytes 57341 + .lobytes 57342 + .lobytes 57343 + .lobytes 57344 + .lobytes 57345 + .lobytes 57346 + .lobytes 57347 + .lobytes 57348 + .lobytes 57349 + .lobytes 57350 + .lobytes 57351 + .lobytes 57352 + .lobytes 57353 + .lobytes 57354 + .lobytes 57355 + .lobytes 57356 + .lobytes 57357 + .lobytes 57358 + .lobytes 57359 + .lobytes 61409 + .lobytes 61410 + .lobytes 61411 + .lobytes 61412 + .lobytes 61413 + .lobytes 61414 + .lobytes 61415 + .lobytes 61416 + .lobytes 61417 + .lobytes 61418 + .lobytes 61419 + .lobytes 61420 + .lobytes 61421 + .lobytes 61422 + .lobytes 61423 + .lobytes 61424 + .lobytes 61425 + .lobytes 61426 + .lobytes 61427 + .lobytes 61428 + .lobytes 61429 + .lobytes 61430 + .lobytes 61431 + .lobytes 61432 + .lobytes 61433 + .lobytes 61434 + .lobytes 61435 + .lobytes 61436 + .lobytes 61437 + .lobytes 61438 + .lobytes 61439 + .lobytes 61440 + .lobytes 61441 + .lobytes 61442 + .lobytes 61443 + .lobytes 61444 + .lobytes 61445 + .lobytes 61446 + .lobytes 61447 + .lobytes 61448 + .lobytes 61449 + .lobytes 61450 + .lobytes 61451 + .lobytes 61452 + .lobytes 61453 + .lobytes 61454 + .lobytes 61455 + .lobytes 65505 + .lobytes 65506 + .lobytes 65507 + .lobytes 65508 + .lobytes 65509 + .lobytes 65510 + .lobytes 65511 + .lobytes 65512 + .lobytes 65513 + .lobytes 65514 + .lobytes 65515 + .lobytes 65516 + .lobytes 65517 + .lobytes 65518 + .lobytes 65519 + .lobytes 65520 + .lobytes 65521 + .lobytes 65522 + .lobytes 65523 + .lobytes 65524 + .lobytes 65525 + .lobytes 65526 + .lobytes 65527 + .lobytes 65528 + .lobytes 65529 + .lobytes 65530 + .lobytes 65531 + .lobytes 65532 + .lobytes 65533 + .lobytes 65534 + .lobytes 65535 - ; hex values - .lobytes $0 - .lobytes $1 - .lobytes $2 - .lobytes $3 - .lobytes $4 - .lobytes $5 - .lobytes $6 - .lobytes $7 - .lobytes $8 - .lobytes $9 - .lobytes $a - .lobytes $b - .lobytes $c - .lobytes $d - .lobytes $e - .lobytes $f - .lobytes $10 - .lobytes $11 - .lobytes $12 - .lobytes $13 - .lobytes $70 - .lobytes $71 - .lobytes $72 - .lobytes $73 - .lobytes $74 - .lobytes $75 - .lobytes $76 - .lobytes $77 - .lobytes $78 - .lobytes $79 - .lobytes $7a - .lobytes $7b - .lobytes $7c - .lobytes $7d - .lobytes $7e - .lobytes $7f - .lobytes $80 - .lobytes $81 - .lobytes $82 - .lobytes $83 - .lobytes $84 - .lobytes $85 - .lobytes $86 - .lobytes $f0 - .lobytes $f1 - .lobytes $f2 - .lobytes $f3 - .lobytes $f4 - .lobytes $f5 - .lobytes $f6 - .lobytes $f7 - .lobytes $f8 - .lobytes $f9 - .lobytes $fa - .lobytes $fb - .lobytes $fc - .lobytes $fd - .lobytes $fe - .lobytes $ff - .lobytes $100 - .lobytes $101 - .lobytes $102 - .lobytes $103 - .lobytes $fd2 - .lobytes $fd3 - .lobytes $fd4 - .lobytes $fd5 - .lobytes $fd6 - .lobytes $fd7 - .lobytes $fd8 - .lobytes $fd9 - .lobytes $fda - .lobytes $fdb - .lobytes $fdc - .lobytes $fdd - .lobytes $fde - .lobytes $fdf - .lobytes $fe0 - .lobytes $fe1 - .lobytes $fe2 - .lobytes $fe3 - .lobytes $fe4 - .lobytes $fe5 - .lobytes $fe6 - .lobytes $fe7 - .lobytes $fe8 - .lobytes $fe9 - .lobytes $fea - .lobytes $feb - .lobytes $fec - .lobytes $fed - .lobytes $fee - .lobytes $fef - .lobytes $ff0 - .lobytes $ff1 - .lobytes $ff2 - .lobytes $ff3 - .lobytes $ff4 - .lobytes $ff5 - .lobytes $ff6 - .lobytes $ff7 - .lobytes $ff8 - .lobytes $ff9 - .lobytes $ffa - .lobytes $ffb - .lobytes $ffc - .lobytes $ffd - .lobytes $ffe - .lobytes $fff - .lobytes $1000 - .lobytes $1001 - .lobytes $1002 - .lobytes $1003 - .lobytes $1004 - .lobytes $1005 - .lobytes $1006 - .lobytes $1007 - .lobytes $1008 - .lobytes $7ff0 - .lobytes $7ff1 - .lobytes $7ff2 - .lobytes $7ff3 - .lobytes $7ff4 - .lobytes $7ff5 - .lobytes $7ff6 - .lobytes $7ff7 - .lobytes $7ff8 - .lobytes $7ff9 - .lobytes $7ffa - .lobytes $7ffb - .lobytes $7ffc - .lobytes $7ffd - .lobytes $7ffe - .lobytes $7fff - .lobytes $8000 - .lobytes $8001 - .lobytes $8002 - .lobytes $8003 - .lobytes $8004 - .lobytes $8005 - .lobytes $8006 - .lobytes $8007 - .lobytes $8008 - .lobytes $8009 - .lobytes $800a - .lobytes $800b - .lobytes $9fe1 - .lobytes $9fe2 - .lobytes $9fe3 - .lobytes $9fe4 - .lobytes $9fe5 - .lobytes $9fe6 - .lobytes $9fe7 - .lobytes $9fe8 - .lobytes $9fe9 - .lobytes $9fea - .lobytes $9feb - .lobytes $9fec - .lobytes $9fed - .lobytes $9fee - .lobytes $9fef - .lobytes $9ff0 - .lobytes $9ff1 - .lobytes $9ff2 - .lobytes $9ff3 - .lobytes $9ff4 - .lobytes $9ff5 - .lobytes $9ff6 - .lobytes $9ff7 - .lobytes $9ff8 - .lobytes $9ff9 - .lobytes $9ffa - .lobytes $9ffb - .lobytes $9ffc - .lobytes $9ffd - .lobytes $9ffe - .lobytes $9fff - .lobytes $a000 - .lobytes $a001 - .lobytes $a002 - .lobytes $a003 - .lobytes $a004 - .lobytes $a005 - .lobytes $a006 - .lobytes $a007 - .lobytes $a008 - .lobytes $a009 - .lobytes $a00a - .lobytes $a00b - .lobytes $a00c - .lobytes $a00d - .lobytes $a00e - .lobytes $a00f - .lobytes $afe1 - .lobytes $afe2 - .lobytes $afe3 - .lobytes $afe4 - .lobytes $afe5 - .lobytes $afe6 - .lobytes $afe7 - .lobytes $afe8 - .lobytes $afe9 - .lobytes $afea - .lobytes $afeb - .lobytes $afec - .lobytes $afed - .lobytes $afee - .lobytes $afef - .lobytes $aff0 - .lobytes $aff1 - .lobytes $aff2 - .lobytes $aff3 - .lobytes $aff4 - .lobytes $aff5 - .lobytes $aff6 - .lobytes $aff7 - .lobytes $aff8 - .lobytes $aff9 - .lobytes $affa - .lobytes $affb - .lobytes $affc - .lobytes $affd - .lobytes $affe - .lobytes $afff - .lobytes $b000 - .lobytes $b001 - .lobytes $b002 - .lobytes $b003 - .lobytes $b004 - .lobytes $b005 - .lobytes $b006 - .lobytes $b007 - .lobytes $b008 - .lobytes $b009 - .lobytes $b00a - .lobytes $b00b - .lobytes $b00c - .lobytes $b00d - .lobytes $b00e - .lobytes $b00f - .lobytes $bfe1 - .lobytes $bfe2 - .lobytes $bfe3 - .lobytes $bfe4 - .lobytes $bfe5 - .lobytes $bfe6 - .lobytes $bfe7 - .lobytes $bfe8 - .lobytes $bfe9 - .lobytes $bfea - .lobytes $bfeb - .lobytes $bfec - .lobytes $bfed - .lobytes $bfee - .lobytes $bfef - .lobytes $bff0 - .lobytes $bff1 - .lobytes $bff2 - .lobytes $bff3 - .lobytes $bff4 - .lobytes $bff5 - .lobytes $bff6 - .lobytes $bff7 - .lobytes $bff8 - .lobytes $bff9 - .lobytes $bffa - .lobytes $bffb - .lobytes $bffc - .lobytes $bffd - .lobytes $bffe - .lobytes $bfff - .lobytes $c000 - .lobytes $c001 - .lobytes $c002 - .lobytes $c003 - .lobytes $c004 - .lobytes $c005 - .lobytes $c006 - .lobytes $c007 - .lobytes $c008 - .lobytes $c009 - .lobytes $c00a - .lobytes $c00b - .lobytes $c00c - .lobytes $c00d - .lobytes $c00e - .lobytes $c00f - .lobytes $cfe1 - .lobytes $cfe2 - .lobytes $cfe3 - .lobytes $cfe4 - .lobytes $cfe5 - .lobytes $cfe6 - .lobytes $cfe7 - .lobytes $cfe8 - .lobytes $cfe9 - .lobytes $cfea - .lobytes $cfeb - .lobytes $cfec - .lobytes $cfed - .lobytes $cfee - .lobytes $cfef - .lobytes $cff0 - .lobytes $cff1 - .lobytes $cff2 - .lobytes $cff3 - .lobytes $cff4 - .lobytes $cff5 - .lobytes $cff6 - .lobytes $cff7 - .lobytes $cff8 - .lobytes $cff9 - .lobytes $cffa - .lobytes $cffb - .lobytes $cffc - .lobytes $cffd - .lobytes $cffe - .lobytes $cfff - .lobytes $d000 - .lobytes $d001 - .lobytes $d002 - .lobytes $d003 - .lobytes $d004 - .lobytes $d005 - .lobytes $d006 - .lobytes $d007 - .lobytes $d008 - .lobytes $d009 - .lobytes $d00a - .lobytes $d00b - .lobytes $d00c - .lobytes $d00d - .lobytes $d00e - .lobytes $d00f - .lobytes $dfe1 - .lobytes $dfe2 - .lobytes $dfe3 - .lobytes $dfe4 - .lobytes $dfe5 - .lobytes $dfe6 - .lobytes $dfe7 - .lobytes $dfe8 - .lobytes $dfe9 - .lobytes $dfea - .lobytes $dfeb - .lobytes $dfec - .lobytes $dfed - .lobytes $dfee - .lobytes $dfef - .lobytes $dff0 - .lobytes $dff1 - .lobytes $dff2 - .lobytes $dff3 - .lobytes $dff4 - .lobytes $dff5 - .lobytes $dff6 - .lobytes $dff7 - .lobytes $dff8 - .lobytes $dff9 - .lobytes $dffa - .lobytes $dffb - .lobytes $dffc - .lobytes $dffd - .lobytes $dffe - .lobytes $dfff - .lobytes $e000 - .lobytes $e001 - .lobytes $e002 - .lobytes $e003 - .lobytes $e004 - .lobytes $e005 - .lobytes $e006 - .lobytes $e007 - .lobytes $e008 - .lobytes $e009 - .lobytes $e00a - .lobytes $e00b - .lobytes $e00c - .lobytes $e00d - .lobytes $e00e - .lobytes $e00f - .lobytes $efe1 - .lobytes $efe2 - .lobytes $efe3 - .lobytes $efe4 - .lobytes $efe5 - .lobytes $efe6 - .lobytes $efe7 - .lobytes $efe8 - .lobytes $efe9 - .lobytes $efea - .lobytes $efeb - .lobytes $efec - .lobytes $efed - .lobytes $efee - .lobytes $efef - .lobytes $eff0 - .lobytes $eff1 - .lobytes $eff2 - .lobytes $eff3 - .lobytes $eff4 - .lobytes $eff5 - .lobytes $eff6 - .lobytes $eff7 - .lobytes $eff8 - .lobytes $eff9 - .lobytes $effa - .lobytes $effb - .lobytes $effc - .lobytes $effd - .lobytes $effe - .lobytes $efff - .lobytes $f000 - .lobytes $f001 - .lobytes $f002 - .lobytes $f003 - .lobytes $f004 - .lobytes $f005 - .lobytes $f006 - .lobytes $f007 - .lobytes $f008 - .lobytes $f009 - .lobytes $f00a - .lobytes $f00b - .lobytes $f00c - .lobytes $f00d - .lobytes $f00e - .lobytes $f00f - .lobytes $ffe1 - .lobytes $ffe2 - .lobytes $ffe3 - .lobytes $ffe4 - .lobytes $ffe5 - .lobytes $ffe6 - .lobytes $ffe7 - .lobytes $ffe8 - .lobytes $ffe9 - .lobytes $ffea - .lobytes $ffeb - .lobytes $ffec - .lobytes $ffed - .lobytes $ffee - .lobytes $ffef - .lobytes $fff0 - .lobytes $fff1 - .lobytes $fff2 - .lobytes $fff3 - .lobytes $fff4 - .lobytes $fff5 - .lobytes $fff6 - .lobytes $fff7 - .lobytes $fff8 - .lobytes $fff9 - .lobytes $fffa - .lobytes $fffb - .lobytes $fffc - .lobytes $fffd - .lobytes $fffe - .lobytes $ffff + ; hex values + .lobytes $0 + .lobytes $1 + .lobytes $2 + .lobytes $3 + .lobytes $4 + .lobytes $5 + .lobytes $6 + .lobytes $7 + .lobytes $8 + .lobytes $9 + .lobytes $a + .lobytes $b + .lobytes $c + .lobytes $d + .lobytes $e + .lobytes $f + .lobytes $10 + .lobytes $11 + .lobytes $12 + .lobytes $13 + .lobytes $70 + .lobytes $71 + .lobytes $72 + .lobytes $73 + .lobytes $74 + .lobytes $75 + .lobytes $76 + .lobytes $77 + .lobytes $78 + .lobytes $79 + .lobytes $7a + .lobytes $7b + .lobytes $7c + .lobytes $7d + .lobytes $7e + .lobytes $7f + .lobytes $80 + .lobytes $81 + .lobytes $82 + .lobytes $83 + .lobytes $84 + .lobytes $85 + .lobytes $86 + .lobytes $f0 + .lobytes $f1 + .lobytes $f2 + .lobytes $f3 + .lobytes $f4 + .lobytes $f5 + .lobytes $f6 + .lobytes $f7 + .lobytes $f8 + .lobytes $f9 + .lobytes $fa + .lobytes $fb + .lobytes $fc + .lobytes $fd + .lobytes $fe + .lobytes $ff + .lobytes $100 + .lobytes $101 + .lobytes $102 + .lobytes $103 + .lobytes $fd2 + .lobytes $fd3 + .lobytes $fd4 + .lobytes $fd5 + .lobytes $fd6 + .lobytes $fd7 + .lobytes $fd8 + .lobytes $fd9 + .lobytes $fda + .lobytes $fdb + .lobytes $fdc + .lobytes $fdd + .lobytes $fde + .lobytes $fdf + .lobytes $fe0 + .lobytes $fe1 + .lobytes $fe2 + .lobytes $fe3 + .lobytes $fe4 + .lobytes $fe5 + .lobytes $fe6 + .lobytes $fe7 + .lobytes $fe8 + .lobytes $fe9 + .lobytes $fea + .lobytes $feb + .lobytes $fec + .lobytes $fed + .lobytes $fee + .lobytes $fef + .lobytes $ff0 + .lobytes $ff1 + .lobytes $ff2 + .lobytes $ff3 + .lobytes $ff4 + .lobytes $ff5 + .lobytes $ff6 + .lobytes $ff7 + .lobytes $ff8 + .lobytes $ff9 + .lobytes $ffa + .lobytes $ffb + .lobytes $ffc + .lobytes $ffd + .lobytes $ffe + .lobytes $fff + .lobytes $1000 + .lobytes $1001 + .lobytes $1002 + .lobytes $1003 + .lobytes $1004 + .lobytes $1005 + .lobytes $1006 + .lobytes $1007 + .lobytes $1008 + .lobytes $7ff0 + .lobytes $7ff1 + .lobytes $7ff2 + .lobytes $7ff3 + .lobytes $7ff4 + .lobytes $7ff5 + .lobytes $7ff6 + .lobytes $7ff7 + .lobytes $7ff8 + .lobytes $7ff9 + .lobytes $7ffa + .lobytes $7ffb + .lobytes $7ffc + .lobytes $7ffd + .lobytes $7ffe + .lobytes $7fff + .lobytes $8000 + .lobytes $8001 + .lobytes $8002 + .lobytes $8003 + .lobytes $8004 + .lobytes $8005 + .lobytes $8006 + .lobytes $8007 + .lobytes $8008 + .lobytes $8009 + .lobytes $800a + .lobytes $800b + .lobytes $9fe1 + .lobytes $9fe2 + .lobytes $9fe3 + .lobytes $9fe4 + .lobytes $9fe5 + .lobytes $9fe6 + .lobytes $9fe7 + .lobytes $9fe8 + .lobytes $9fe9 + .lobytes $9fea + .lobytes $9feb + .lobytes $9fec + .lobytes $9fed + .lobytes $9fee + .lobytes $9fef + .lobytes $9ff0 + .lobytes $9ff1 + .lobytes $9ff2 + .lobytes $9ff3 + .lobytes $9ff4 + .lobytes $9ff5 + .lobytes $9ff6 + .lobytes $9ff7 + .lobytes $9ff8 + .lobytes $9ff9 + .lobytes $9ffa + .lobytes $9ffb + .lobytes $9ffc + .lobytes $9ffd + .lobytes $9ffe + .lobytes $9fff + .lobytes $a000 + .lobytes $a001 + .lobytes $a002 + .lobytes $a003 + .lobytes $a004 + .lobytes $a005 + .lobytes $a006 + .lobytes $a007 + .lobytes $a008 + .lobytes $a009 + .lobytes $a00a + .lobytes $a00b + .lobytes $a00c + .lobytes $a00d + .lobytes $a00e + .lobytes $a00f + .lobytes $afe1 + .lobytes $afe2 + .lobytes $afe3 + .lobytes $afe4 + .lobytes $afe5 + .lobytes $afe6 + .lobytes $afe7 + .lobytes $afe8 + .lobytes $afe9 + .lobytes $afea + .lobytes $afeb + .lobytes $afec + .lobytes $afed + .lobytes $afee + .lobytes $afef + .lobytes $aff0 + .lobytes $aff1 + .lobytes $aff2 + .lobytes $aff3 + .lobytes $aff4 + .lobytes $aff5 + .lobytes $aff6 + .lobytes $aff7 + .lobytes $aff8 + .lobytes $aff9 + .lobytes $affa + .lobytes $affb + .lobytes $affc + .lobytes $affd + .lobytes $affe + .lobytes $afff + .lobytes $b000 + .lobytes $b001 + .lobytes $b002 + .lobytes $b003 + .lobytes $b004 + .lobytes $b005 + .lobytes $b006 + .lobytes $b007 + .lobytes $b008 + .lobytes $b009 + .lobytes $b00a + .lobytes $b00b + .lobytes $b00c + .lobytes $b00d + .lobytes $b00e + .lobytes $b00f + .lobytes $bfe1 + .lobytes $bfe2 + .lobytes $bfe3 + .lobytes $bfe4 + .lobytes $bfe5 + .lobytes $bfe6 + .lobytes $bfe7 + .lobytes $bfe8 + .lobytes $bfe9 + .lobytes $bfea + .lobytes $bfeb + .lobytes $bfec + .lobytes $bfed + .lobytes $bfee + .lobytes $bfef + .lobytes $bff0 + .lobytes $bff1 + .lobytes $bff2 + .lobytes $bff3 + .lobytes $bff4 + .lobytes $bff5 + .lobytes $bff6 + .lobytes $bff7 + .lobytes $bff8 + .lobytes $bff9 + .lobytes $bffa + .lobytes $bffb + .lobytes $bffc + .lobytes $bffd + .lobytes $bffe + .lobytes $bfff + .lobytes $c000 + .lobytes $c001 + .lobytes $c002 + .lobytes $c003 + .lobytes $c004 + .lobytes $c005 + .lobytes $c006 + .lobytes $c007 + .lobytes $c008 + .lobytes $c009 + .lobytes $c00a + .lobytes $c00b + .lobytes $c00c + .lobytes $c00d + .lobytes $c00e + .lobytes $c00f + .lobytes $cfe1 + .lobytes $cfe2 + .lobytes $cfe3 + .lobytes $cfe4 + .lobytes $cfe5 + .lobytes $cfe6 + .lobytes $cfe7 + .lobytes $cfe8 + .lobytes $cfe9 + .lobytes $cfea + .lobytes $cfeb + .lobytes $cfec + .lobytes $cfed + .lobytes $cfee + .lobytes $cfef + .lobytes $cff0 + .lobytes $cff1 + .lobytes $cff2 + .lobytes $cff3 + .lobytes $cff4 + .lobytes $cff5 + .lobytes $cff6 + .lobytes $cff7 + .lobytes $cff8 + .lobytes $cff9 + .lobytes $cffa + .lobytes $cffb + .lobytes $cffc + .lobytes $cffd + .lobytes $cffe + .lobytes $cfff + .lobytes $d000 + .lobytes $d001 + .lobytes $d002 + .lobytes $d003 + .lobytes $d004 + .lobytes $d005 + .lobytes $d006 + .lobytes $d007 + .lobytes $d008 + .lobytes $d009 + .lobytes $d00a + .lobytes $d00b + .lobytes $d00c + .lobytes $d00d + .lobytes $d00e + .lobytes $d00f + .lobytes $dfe1 + .lobytes $dfe2 + .lobytes $dfe3 + .lobytes $dfe4 + .lobytes $dfe5 + .lobytes $dfe6 + .lobytes $dfe7 + .lobytes $dfe8 + .lobytes $dfe9 + .lobytes $dfea + .lobytes $dfeb + .lobytes $dfec + .lobytes $dfed + .lobytes $dfee + .lobytes $dfef + .lobytes $dff0 + .lobytes $dff1 + .lobytes $dff2 + .lobytes $dff3 + .lobytes $dff4 + .lobytes $dff5 + .lobytes $dff6 + .lobytes $dff7 + .lobytes $dff8 + .lobytes $dff9 + .lobytes $dffa + .lobytes $dffb + .lobytes $dffc + .lobytes $dffd + .lobytes $dffe + .lobytes $dfff + .lobytes $e000 + .lobytes $e001 + .lobytes $e002 + .lobytes $e003 + .lobytes $e004 + .lobytes $e005 + .lobytes $e006 + .lobytes $e007 + .lobytes $e008 + .lobytes $e009 + .lobytes $e00a + .lobytes $e00b + .lobytes $e00c + .lobytes $e00d + .lobytes $e00e + .lobytes $e00f + .lobytes $efe1 + .lobytes $efe2 + .lobytes $efe3 + .lobytes $efe4 + .lobytes $efe5 + .lobytes $efe6 + .lobytes $efe7 + .lobytes $efe8 + .lobytes $efe9 + .lobytes $efea + .lobytes $efeb + .lobytes $efec + .lobytes $efed + .lobytes $efee + .lobytes $efef + .lobytes $eff0 + .lobytes $eff1 + .lobytes $eff2 + .lobytes $eff3 + .lobytes $eff4 + .lobytes $eff5 + .lobytes $eff6 + .lobytes $eff7 + .lobytes $eff8 + .lobytes $eff9 + .lobytes $effa + .lobytes $effb + .lobytes $effc + .lobytes $effd + .lobytes $effe + .lobytes $efff + .lobytes $f000 + .lobytes $f001 + .lobytes $f002 + .lobytes $f003 + .lobytes $f004 + .lobytes $f005 + .lobytes $f006 + .lobytes $f007 + .lobytes $f008 + .lobytes $f009 + .lobytes $f00a + .lobytes $f00b + .lobytes $f00c + .lobytes $f00d + .lobytes $f00e + .lobytes $f00f + .lobytes $ffe1 + .lobytes $ffe2 + .lobytes $ffe3 + .lobytes $ffe4 + .lobytes $ffe5 + .lobytes $ffe6 + .lobytes $ffe7 + .lobytes $ffe8 + .lobytes $ffe9 + .lobytes $ffea + .lobytes $ffeb + .lobytes $ffec + .lobytes $ffed + .lobytes $ffee + .lobytes $ffef + .lobytes $fff0 + .lobytes $fff1 + .lobytes $fff2 + .lobytes $fff3 + .lobytes $fff4 + .lobytes $fff5 + .lobytes $fff6 + .lobytes $fff7 + .lobytes $fff8 + .lobytes $fff9 + .lobytes $fffa + .lobytes $fffb + .lobytes $fffc + .lobytes $fffd + .lobytes $fffe + .lobytes $ffff - ; hex values, uppercase - .lobytes $0 - .lobytes $1 - .lobytes $2 - .lobytes $3 - .lobytes $4 - .lobytes $5 - .lobytes $6 - .lobytes $7 - .lobytes $8 - .lobytes $9 - .lobytes $A - .lobytes $B - .lobytes $C - .lobytes $D - .lobytes $E - .lobytes $F - .lobytes $10 - .lobytes $11 - .lobytes $12 - .lobytes $13 - .lobytes $70 - .lobytes $71 - .lobytes $72 - .lobytes $73 - .lobytes $74 - .lobytes $75 - .lobytes $76 - .lobytes $77 - .lobytes $78 - .lobytes $79 - .lobytes $7A - .lobytes $7B - .lobytes $7C - .lobytes $7D - .lobytes $7E - .lobytes $7F - .lobytes $80 - .lobytes $81 - .lobytes $82 - .lobytes $83 - .lobytes $84 - .lobytes $85 - .lobytes $86 - .lobytes $F0 - .lobytes $F1 - .lobytes $F2 - .lobytes $F3 - .lobytes $F4 - .lobytes $F5 - .lobytes $F6 - .lobytes $F7 - .lobytes $F8 - .lobytes $F9 - .lobytes $FA - .lobytes $FB - .lobytes $FC - .lobytes $FD - .lobytes $FE - .lobytes $FF - .lobytes $100 - .lobytes $101 - .lobytes $102 - .lobytes $103 - .lobytes $FD2 - .lobytes $FD3 - .lobytes $FD4 - .lobytes $FD5 - .lobytes $FD6 - .lobytes $FD7 - .lobytes $FD8 - .lobytes $FD9 - .lobytes $FDA - .lobytes $FDB - .lobytes $FDC - .lobytes $FDD - .lobytes $FDE - .lobytes $FDF - .lobytes $FE0 - .lobytes $FE1 - .lobytes $FE2 - .lobytes $FE3 - .lobytes $FE4 - .lobytes $FE5 - .lobytes $FE6 - .lobytes $FE7 - .lobytes $FE8 - .lobytes $FE9 - .lobytes $FEA - .lobytes $FEB - .lobytes $FEC - .lobytes $FED - .lobytes $FEE - .lobytes $FEF - .lobytes $FF0 - .lobytes $FF1 - .lobytes $FF2 - .lobytes $FF3 - .lobytes $FF4 - .lobytes $FF5 - .lobytes $FF6 - .lobytes $FF7 - .lobytes $FF8 - .lobytes $FF9 - .lobytes $FFA - .lobytes $FFB - .lobytes $FFC - .lobytes $FFD - .lobytes $FFE - .lobytes $FFF - .lobytes $1000 - .lobytes $1001 - .lobytes $1002 - .lobytes $1003 - .lobytes $1004 - .lobytes $1005 - .lobytes $1006 - .lobytes $1007 - .lobytes $1008 - .lobytes $7FF0 - .lobytes $7FF1 - .lobytes $7FF2 - .lobytes $7FF3 - .lobytes $7FF4 - .lobytes $7FF5 - .lobytes $7FF6 - .lobytes $7FF7 - .lobytes $7FF8 - .lobytes $7FF9 - .lobytes $7FFA - .lobytes $7FFB - .lobytes $7FFC - .lobytes $7FFD - .lobytes $7FFE - .lobytes $7FFF - .lobytes $8000 - .lobytes $8001 - .lobytes $8002 - .lobytes $8003 - .lobytes $8004 - .lobytes $8005 - .lobytes $8006 - .lobytes $8007 - .lobytes $8008 - .lobytes $8009 - .lobytes $800A - .lobytes $800B - .lobytes $9FE1 - .lobytes $9FE2 - .lobytes $9FE3 - .lobytes $9FE4 - .lobytes $9FE5 - .lobytes $9FE6 - .lobytes $9FE7 - .lobytes $9FE8 - .lobytes $9FE9 - .lobytes $9FEA - .lobytes $9FEB - .lobytes $9FEC - .lobytes $9FED - .lobytes $9FEE - .lobytes $9FEF - .lobytes $9FF0 - .lobytes $9FF1 - .lobytes $9FF2 - .lobytes $9FF3 - .lobytes $9FF4 - .lobytes $9FF5 - .lobytes $9FF6 - .lobytes $9FF7 - .lobytes $9FF8 - .lobytes $9FF9 - .lobytes $9FFA - .lobytes $9FFB - .lobytes $9FFC - .lobytes $9FFD - .lobytes $9FFE - .lobytes $9FFF - .lobytes $A000 - .lobytes $A001 - .lobytes $A002 - .lobytes $A003 - .lobytes $A004 - .lobytes $A005 - .lobytes $A006 - .lobytes $A007 - .lobytes $A008 - .lobytes $A009 - .lobytes $A00A - .lobytes $A00B - .lobytes $A00C - .lobytes $A00D - .lobytes $A00E - .lobytes $A00F - .lobytes $AFE1 - .lobytes $AFE2 - .lobytes $AFE3 - .lobytes $AFE4 - .lobytes $AFE5 - .lobytes $AFE6 - .lobytes $AFE7 - .lobytes $AFE8 - .lobytes $AFE9 - .lobytes $AFEA - .lobytes $AFEB - .lobytes $AFEC - .lobytes $AFED - .lobytes $AFEE - .lobytes $AFEF - .lobytes $AFF0 - .lobytes $AFF1 - .lobytes $AFF2 - .lobytes $AFF3 - .lobytes $AFF4 - .lobytes $AFF5 - .lobytes $AFF6 - .lobytes $AFF7 - .lobytes $AFF8 - .lobytes $AFF9 - .lobytes $AFFA - .lobytes $AFFB - .lobytes $AFFC - .lobytes $AFFD - .lobytes $AFFE - .lobytes $AFFF - .lobytes $B000 - .lobytes $B001 - .lobytes $B002 - .lobytes $B003 - .lobytes $B004 - .lobytes $B005 - .lobytes $B006 - .lobytes $B007 - .lobytes $B008 - .lobytes $B009 - .lobytes $B00A - .lobytes $B00B - .lobytes $B00C - .lobytes $B00D - .lobytes $B00E - .lobytes $B00F - .lobytes $BFE1 - .lobytes $BFE2 - .lobytes $BFE3 - .lobytes $BFE4 - .lobytes $BFE5 - .lobytes $BFE6 - .lobytes $BFE7 - .lobytes $BFE8 - .lobytes $BFE9 - .lobytes $BFEA - .lobytes $BFEB - .lobytes $BFEC - .lobytes $BFED - .lobytes $BFEE - .lobytes $BFEF - .lobytes $BFF0 - .lobytes $BFF1 - .lobytes $BFF2 - .lobytes $BFF3 - .lobytes $BFF4 - .lobytes $BFF5 - .lobytes $BFF6 - .lobytes $BFF7 - .lobytes $BFF8 - .lobytes $BFF9 - .lobytes $BFFA - .lobytes $BFFB - .lobytes $BFFC - .lobytes $BFFD - .lobytes $BFFE - .lobytes $BFFF - .lobytes $C000 - .lobytes $C001 - .lobytes $C002 - .lobytes $C003 - .lobytes $C004 - .lobytes $C005 - .lobytes $C006 - .lobytes $C007 - .lobytes $C008 - .lobytes $C009 - .lobytes $C00A - .lobytes $C00B - .lobytes $C00C - .lobytes $C00D - .lobytes $C00E - .lobytes $C00F - .lobytes $CFE1 - .lobytes $CFE2 - .lobytes $CFE3 - .lobytes $CFE4 - .lobytes $CFE5 - .lobytes $CFE6 - .lobytes $CFE7 - .lobytes $CFE8 - .lobytes $CFE9 - .lobytes $CFEA - .lobytes $CFEB - .lobytes $CFEC - .lobytes $CFED - .lobytes $CFEE - .lobytes $CFEF - .lobytes $CFF0 - .lobytes $CFF1 - .lobytes $CFF2 - .lobytes $CFF3 - .lobytes $CFF4 - .lobytes $CFF5 - .lobytes $CFF6 - .lobytes $CFF7 - .lobytes $CFF8 - .lobytes $CFF9 - .lobytes $CFFA - .lobytes $CFFB - .lobytes $CFFC - .lobytes $CFFD - .lobytes $CFFE - .lobytes $CFFF - .lobytes $D000 - .lobytes $D001 - .lobytes $D002 - .lobytes $D003 - .lobytes $D004 - .lobytes $D005 - .lobytes $D006 - .lobytes $D007 - .lobytes $D008 - .lobytes $D009 - .lobytes $D00A - .lobytes $D00B - .lobytes $D00C - .lobytes $D00D - .lobytes $D00E - .lobytes $D00F - .lobytes $DFE1 - .lobytes $DFE2 - .lobytes $DFE3 - .lobytes $DFE4 - .lobytes $DFE5 - .lobytes $DFE6 - .lobytes $DFE7 - .lobytes $DFE8 - .lobytes $DFE9 - .lobytes $DFEA - .lobytes $DFEB - .lobytes $DFEC - .lobytes $DFED - .lobytes $DFEE - .lobytes $DFEF - .lobytes $DFF0 - .lobytes $DFF1 - .lobytes $DFF2 - .lobytes $DFF3 - .lobytes $DFF4 - .lobytes $DFF5 - .lobytes $DFF6 - .lobytes $DFF7 - .lobytes $DFF8 - .lobytes $DFF9 - .lobytes $DFFA - .lobytes $DFFB - .lobytes $DFFC - .lobytes $DFFD - .lobytes $DFFE - .lobytes $DFFF - .lobytes $E000 - .lobytes $E001 - .lobytes $E002 - .lobytes $E003 - .lobytes $E004 - .lobytes $E005 - .lobytes $E006 - .lobytes $E007 - .lobytes $E008 - .lobytes $E009 - .lobytes $E00A - .lobytes $E00B - .lobytes $E00C - .lobytes $E00D - .lobytes $E00E - .lobytes $E00F - .lobytes $EFE1 - .lobytes $EFE2 - .lobytes $EFE3 - .lobytes $EFE4 - .lobytes $EFE5 - .lobytes $EFE6 - .lobytes $EFE7 - .lobytes $EFE8 - .lobytes $EFE9 - .lobytes $EFEA - .lobytes $EFEB - .lobytes $EFEC - .lobytes $EFED - .lobytes $EFEE - .lobytes $EFEF - .lobytes $EFF0 - .lobytes $EFF1 - .lobytes $EFF2 - .lobytes $EFF3 - .lobytes $EFF4 - .lobytes $EFF5 - .lobytes $EFF6 - .lobytes $EFF7 - .lobytes $EFF8 - .lobytes $EFF9 - .lobytes $EFFA - .lobytes $EFFB - .lobytes $EFFC - .lobytes $EFFD - .lobytes $EFFE - .lobytes $EFFF - .lobytes $F000 - .lobytes $F001 - .lobytes $F002 - .lobytes $F003 - .lobytes $F004 - .lobytes $F005 - .lobytes $F006 - .lobytes $F007 - .lobytes $F008 - .lobytes $F009 - .lobytes $F00A - .lobytes $F00B - .lobytes $F00C - .lobytes $F00D - .lobytes $F00E - .lobytes $F00F - .lobytes $FFE1 - .lobytes $FFE2 - .lobytes $FFE3 - .lobytes $FFE4 - .lobytes $FFE5 - .lobytes $FFE6 - .lobytes $FFE7 - .lobytes $FFE8 - .lobytes $FFE9 - .lobytes $FFEA - .lobytes $FFEB - .lobytes $FFEC - .lobytes $FFED - .lobytes $FFEE - .lobytes $FFEF - .lobytes $FFF0 - .lobytes $FFF1 - .lobytes $FFF2 - .lobytes $FFF3 - .lobytes $FFF4 - .lobytes $FFF5 - .lobytes $FFF6 - .lobytes $FFF7 - .lobytes $FFF8 - .lobytes $FFF9 - .lobytes $FFFA - .lobytes $FFFB - .lobytes $FFFC - .lobytes $FFFD - .lobytes $FFFE - .lobytes $FFFF + ; hex values, uppercase + .lobytes $0 + .lobytes $1 + .lobytes $2 + .lobytes $3 + .lobytes $4 + .lobytes $5 + .lobytes $6 + .lobytes $7 + .lobytes $8 + .lobytes $9 + .lobytes $A + .lobytes $B + .lobytes $C + .lobytes $D + .lobytes $E + .lobytes $F + .lobytes $10 + .lobytes $11 + .lobytes $12 + .lobytes $13 + .lobytes $70 + .lobytes $71 + .lobytes $72 + .lobytes $73 + .lobytes $74 + .lobytes $75 + .lobytes $76 + .lobytes $77 + .lobytes $78 + .lobytes $79 + .lobytes $7A + .lobytes $7B + .lobytes $7C + .lobytes $7D + .lobytes $7E + .lobytes $7F + .lobytes $80 + .lobytes $81 + .lobytes $82 + .lobytes $83 + .lobytes $84 + .lobytes $85 + .lobytes $86 + .lobytes $F0 + .lobytes $F1 + .lobytes $F2 + .lobytes $F3 + .lobytes $F4 + .lobytes $F5 + .lobytes $F6 + .lobytes $F7 + .lobytes $F8 + .lobytes $F9 + .lobytes $FA + .lobytes $FB + .lobytes $FC + .lobytes $FD + .lobytes $FE + .lobytes $FF + .lobytes $100 + .lobytes $101 + .lobytes $102 + .lobytes $103 + .lobytes $FD2 + .lobytes $FD3 + .lobytes $FD4 + .lobytes $FD5 + .lobytes $FD6 + .lobytes $FD7 + .lobytes $FD8 + .lobytes $FD9 + .lobytes $FDA + .lobytes $FDB + .lobytes $FDC + .lobytes $FDD + .lobytes $FDE + .lobytes $FDF + .lobytes $FE0 + .lobytes $FE1 + .lobytes $FE2 + .lobytes $FE3 + .lobytes $FE4 + .lobytes $FE5 + .lobytes $FE6 + .lobytes $FE7 + .lobytes $FE8 + .lobytes $FE9 + .lobytes $FEA + .lobytes $FEB + .lobytes $FEC + .lobytes $FED + .lobytes $FEE + .lobytes $FEF + .lobytes $FF0 + .lobytes $FF1 + .lobytes $FF2 + .lobytes $FF3 + .lobytes $FF4 + .lobytes $FF5 + .lobytes $FF6 + .lobytes $FF7 + .lobytes $FF8 + .lobytes $FF9 + .lobytes $FFA + .lobytes $FFB + .lobytes $FFC + .lobytes $FFD + .lobytes $FFE + .lobytes $FFF + .lobytes $1000 + .lobytes $1001 + .lobytes $1002 + .lobytes $1003 + .lobytes $1004 + .lobytes $1005 + .lobytes $1006 + .lobytes $1007 + .lobytes $1008 + .lobytes $7FF0 + .lobytes $7FF1 + .lobytes $7FF2 + .lobytes $7FF3 + .lobytes $7FF4 + .lobytes $7FF5 + .lobytes $7FF6 + .lobytes $7FF7 + .lobytes $7FF8 + .lobytes $7FF9 + .lobytes $7FFA + .lobytes $7FFB + .lobytes $7FFC + .lobytes $7FFD + .lobytes $7FFE + .lobytes $7FFF + .lobytes $8000 + .lobytes $8001 + .lobytes $8002 + .lobytes $8003 + .lobytes $8004 + .lobytes $8005 + .lobytes $8006 + .lobytes $8007 + .lobytes $8008 + .lobytes $8009 + .lobytes $800A + .lobytes $800B + .lobytes $9FE1 + .lobytes $9FE2 + .lobytes $9FE3 + .lobytes $9FE4 + .lobytes $9FE5 + .lobytes $9FE6 + .lobytes $9FE7 + .lobytes $9FE8 + .lobytes $9FE9 + .lobytes $9FEA + .lobytes $9FEB + .lobytes $9FEC + .lobytes $9FED + .lobytes $9FEE + .lobytes $9FEF + .lobytes $9FF0 + .lobytes $9FF1 + .lobytes $9FF2 + .lobytes $9FF3 + .lobytes $9FF4 + .lobytes $9FF5 + .lobytes $9FF6 + .lobytes $9FF7 + .lobytes $9FF8 + .lobytes $9FF9 + .lobytes $9FFA + .lobytes $9FFB + .lobytes $9FFC + .lobytes $9FFD + .lobytes $9FFE + .lobytes $9FFF + .lobytes $A000 + .lobytes $A001 + .lobytes $A002 + .lobytes $A003 + .lobytes $A004 + .lobytes $A005 + .lobytes $A006 + .lobytes $A007 + .lobytes $A008 + .lobytes $A009 + .lobytes $A00A + .lobytes $A00B + .lobytes $A00C + .lobytes $A00D + .lobytes $A00E + .lobytes $A00F + .lobytes $AFE1 + .lobytes $AFE2 + .lobytes $AFE3 + .lobytes $AFE4 + .lobytes $AFE5 + .lobytes $AFE6 + .lobytes $AFE7 + .lobytes $AFE8 + .lobytes $AFE9 + .lobytes $AFEA + .lobytes $AFEB + .lobytes $AFEC + .lobytes $AFED + .lobytes $AFEE + .lobytes $AFEF + .lobytes $AFF0 + .lobytes $AFF1 + .lobytes $AFF2 + .lobytes $AFF3 + .lobytes $AFF4 + .lobytes $AFF5 + .lobytes $AFF6 + .lobytes $AFF7 + .lobytes $AFF8 + .lobytes $AFF9 + .lobytes $AFFA + .lobytes $AFFB + .lobytes $AFFC + .lobytes $AFFD + .lobytes $AFFE + .lobytes $AFFF + .lobytes $B000 + .lobytes $B001 + .lobytes $B002 + .lobytes $B003 + .lobytes $B004 + .lobytes $B005 + .lobytes $B006 + .lobytes $B007 + .lobytes $B008 + .lobytes $B009 + .lobytes $B00A + .lobytes $B00B + .lobytes $B00C + .lobytes $B00D + .lobytes $B00E + .lobytes $B00F + .lobytes $BFE1 + .lobytes $BFE2 + .lobytes $BFE3 + .lobytes $BFE4 + .lobytes $BFE5 + .lobytes $BFE6 + .lobytes $BFE7 + .lobytes $BFE8 + .lobytes $BFE9 + .lobytes $BFEA + .lobytes $BFEB + .lobytes $BFEC + .lobytes $BFED + .lobytes $BFEE + .lobytes $BFEF + .lobytes $BFF0 + .lobytes $BFF1 + .lobytes $BFF2 + .lobytes $BFF3 + .lobytes $BFF4 + .lobytes $BFF5 + .lobytes $BFF6 + .lobytes $BFF7 + .lobytes $BFF8 + .lobytes $BFF9 + .lobytes $BFFA + .lobytes $BFFB + .lobytes $BFFC + .lobytes $BFFD + .lobytes $BFFE + .lobytes $BFFF + .lobytes $C000 + .lobytes $C001 + .lobytes $C002 + .lobytes $C003 + .lobytes $C004 + .lobytes $C005 + .lobytes $C006 + .lobytes $C007 + .lobytes $C008 + .lobytes $C009 + .lobytes $C00A + .lobytes $C00B + .lobytes $C00C + .lobytes $C00D + .lobytes $C00E + .lobytes $C00F + .lobytes $CFE1 + .lobytes $CFE2 + .lobytes $CFE3 + .lobytes $CFE4 + .lobytes $CFE5 + .lobytes $CFE6 + .lobytes $CFE7 + .lobytes $CFE8 + .lobytes $CFE9 + .lobytes $CFEA + .lobytes $CFEB + .lobytes $CFEC + .lobytes $CFED + .lobytes $CFEE + .lobytes $CFEF + .lobytes $CFF0 + .lobytes $CFF1 + .lobytes $CFF2 + .lobytes $CFF3 + .lobytes $CFF4 + .lobytes $CFF5 + .lobytes $CFF6 + .lobytes $CFF7 + .lobytes $CFF8 + .lobytes $CFF9 + .lobytes $CFFA + .lobytes $CFFB + .lobytes $CFFC + .lobytes $CFFD + .lobytes $CFFE + .lobytes $CFFF + .lobytes $D000 + .lobytes $D001 + .lobytes $D002 + .lobytes $D003 + .lobytes $D004 + .lobytes $D005 + .lobytes $D006 + .lobytes $D007 + .lobytes $D008 + .lobytes $D009 + .lobytes $D00A + .lobytes $D00B + .lobytes $D00C + .lobytes $D00D + .lobytes $D00E + .lobytes $D00F + .lobytes $DFE1 + .lobytes $DFE2 + .lobytes $DFE3 + .lobytes $DFE4 + .lobytes $DFE5 + .lobytes $DFE6 + .lobytes $DFE7 + .lobytes $DFE8 + .lobytes $DFE9 + .lobytes $DFEA + .lobytes $DFEB + .lobytes $DFEC + .lobytes $DFED + .lobytes $DFEE + .lobytes $DFEF + .lobytes $DFF0 + .lobytes $DFF1 + .lobytes $DFF2 + .lobytes $DFF3 + .lobytes $DFF4 + .lobytes $DFF5 + .lobytes $DFF6 + .lobytes $DFF7 + .lobytes $DFF8 + .lobytes $DFF9 + .lobytes $DFFA + .lobytes $DFFB + .lobytes $DFFC + .lobytes $DFFD + .lobytes $DFFE + .lobytes $DFFF + .lobytes $E000 + .lobytes $E001 + .lobytes $E002 + .lobytes $E003 + .lobytes $E004 + .lobytes $E005 + .lobytes $E006 + .lobytes $E007 + .lobytes $E008 + .lobytes $E009 + .lobytes $E00A + .lobytes $E00B + .lobytes $E00C + .lobytes $E00D + .lobytes $E00E + .lobytes $E00F + .lobytes $EFE1 + .lobytes $EFE2 + .lobytes $EFE3 + .lobytes $EFE4 + .lobytes $EFE5 + .lobytes $EFE6 + .lobytes $EFE7 + .lobytes $EFE8 + .lobytes $EFE9 + .lobytes $EFEA + .lobytes $EFEB + .lobytes $EFEC + .lobytes $EFED + .lobytes $EFEE + .lobytes $EFEF + .lobytes $EFF0 + .lobytes $EFF1 + .lobytes $EFF2 + .lobytes $EFF3 + .lobytes $EFF4 + .lobytes $EFF5 + .lobytes $EFF6 + .lobytes $EFF7 + .lobytes $EFF8 + .lobytes $EFF9 + .lobytes $EFFA + .lobytes $EFFB + .lobytes $EFFC + .lobytes $EFFD + .lobytes $EFFE + .lobytes $EFFF + .lobytes $F000 + .lobytes $F001 + .lobytes $F002 + .lobytes $F003 + .lobytes $F004 + .lobytes $F005 + .lobytes $F006 + .lobytes $F007 + .lobytes $F008 + .lobytes $F009 + .lobytes $F00A + .lobytes $F00B + .lobytes $F00C + .lobytes $F00D + .lobytes $F00E + .lobytes $F00F + .lobytes $FFE1 + .lobytes $FFE2 + .lobytes $FFE3 + .lobytes $FFE4 + .lobytes $FFE5 + .lobytes $FFE6 + .lobytes $FFE7 + .lobytes $FFE8 + .lobytes $FFE9 + .lobytes $FFEA + .lobytes $FFEB + .lobytes $FFEC + .lobytes $FFED + .lobytes $FFEE + .lobytes $FFEF + .lobytes $FFF0 + .lobytes $FFF1 + .lobytes $FFF2 + .lobytes $FFF3 + .lobytes $FFF4 + .lobytes $FFF5 + .lobytes $FFF6 + .lobytes $FFF7 + .lobytes $FFF8 + .lobytes $FFF9 + .lobytes $FFFA + .lobytes $FFFB + .lobytes $FFFC + .lobytes $FFFD + .lobytes $FFFE + .lobytes $FFFF - ; 4-digit hex values - .lobytes $0000 - .lobytes $0001 - .lobytes $0002 - .lobytes $0003 - .lobytes $0004 - .lobytes $0005 - .lobytes $0006 - .lobytes $0007 - .lobytes $0008 - .lobytes $0009 - .lobytes $000a - .lobytes $000b - .lobytes $000c - .lobytes $000d - .lobytes $000e - .lobytes $000f - .lobytes $0010 - .lobytes $0011 - .lobytes $0012 - .lobytes $0013 - .lobytes $0070 - .lobytes $0071 - .lobytes $0072 - .lobytes $0073 - .lobytes $0074 - .lobytes $0075 - .lobytes $0076 - .lobytes $0077 - .lobytes $0078 - .lobytes $0079 - .lobytes $007a - .lobytes $007b - .lobytes $007c - .lobytes $007d - .lobytes $007e - .lobytes $007f - .lobytes $0080 - .lobytes $0081 - .lobytes $0082 - .lobytes $0083 - .lobytes $0084 - .lobytes $0085 - .lobytes $0086 - .lobytes $00f0 - .lobytes $00f1 - .lobytes $00f2 - .lobytes $00f3 - .lobytes $00f4 - .lobytes $00f5 - .lobytes $00f6 - .lobytes $00f7 - .lobytes $00f8 - .lobytes $00f9 - .lobytes $00fa - .lobytes $00fb - .lobytes $00fc - .lobytes $00fd - .lobytes $00fe - .lobytes $00ff - .lobytes $0100 - .lobytes $0101 - .lobytes $0102 - .lobytes $0103 - .lobytes $0fd2 - .lobytes $0fd3 - .lobytes $0fd4 - .lobytes $0fd5 - .lobytes $0fd6 - .lobytes $0fd7 - .lobytes $0fd8 - .lobytes $0fd9 - .lobytes $0fda - .lobytes $0fdb - .lobytes $0fdc - .lobytes $0fdd - .lobytes $0fde - .lobytes $0fdf - .lobytes $0fe0 - .lobytes $0fe1 - .lobytes $0fe2 - .lobytes $0fe3 - .lobytes $0fe4 - .lobytes $0fe5 - .lobytes $0fe6 - .lobytes $0fe7 - .lobytes $0fe8 - .lobytes $0fe9 - .lobytes $0fea - .lobytes $0feb - .lobytes $0fec - .lobytes $0fed - .lobytes $0fee - .lobytes $0fef - .lobytes $0ff0 - .lobytes $0ff1 - .lobytes $0ff2 - .lobytes $0ff3 - .lobytes $0ff4 - .lobytes $0ff5 - .lobytes $0ff6 - .lobytes $0ff7 - .lobytes $0ff8 - .lobytes $0ff9 - .lobytes $0ffa - .lobytes $0ffb - .lobytes $0ffc - .lobytes $0ffd - .lobytes $0ffe - .lobytes $0fff - .lobytes $1000 - .lobytes $1001 - .lobytes $1002 - .lobytes $1003 - .lobytes $1004 - .lobytes $1005 - .lobytes $1006 - .lobytes $1007 - .lobytes $1008 - .lobytes $7ff0 - .lobytes $7ff1 - .lobytes $7ff2 - .lobytes $7ff3 - .lobytes $7ff4 - .lobytes $7ff5 - .lobytes $7ff6 - .lobytes $7ff7 - .lobytes $7ff8 - .lobytes $7ff9 - .lobytes $7ffa - .lobytes $7ffb - .lobytes $7ffc - .lobytes $7ffd - .lobytes $7ffe - .lobytes $7fff - .lobytes $8000 - .lobytes $8001 - .lobytes $8002 - .lobytes $8003 - .lobytes $8004 - .lobytes $8005 - .lobytes $8006 - .lobytes $8007 - .lobytes $8008 - .lobytes $8009 - .lobytes $800a - .lobytes $800b - .lobytes $9fe1 - .lobytes $9fe2 - .lobytes $9fe3 - .lobytes $9fe4 - .lobytes $9fe5 - .lobytes $9fe6 - .lobytes $9fe7 - .lobytes $9fe8 - .lobytes $9fe9 - .lobytes $9fea - .lobytes $9feb - .lobytes $9fec - .lobytes $9fed - .lobytes $9fee - .lobytes $9fef - .lobytes $9ff0 - .lobytes $9ff1 - .lobytes $9ff2 - .lobytes $9ff3 - .lobytes $9ff4 - .lobytes $9ff5 - .lobytes $9ff6 - .lobytes $9ff7 - .lobytes $9ff8 - .lobytes $9ff9 - .lobytes $9ffa - .lobytes $9ffb - .lobytes $9ffc - .lobytes $9ffd - .lobytes $9ffe - .lobytes $9fff - .lobytes $a000 - .lobytes $a001 - .lobytes $a002 - .lobytes $a003 - .lobytes $a004 - .lobytes $a005 - .lobytes $a006 - .lobytes $a007 - .lobytes $a008 - .lobytes $a009 - .lobytes $a00a - .lobytes $a00b - .lobytes $a00c - .lobytes $a00d - .lobytes $a00e - .lobytes $a00f - .lobytes $afe1 - .lobytes $afe2 - .lobytes $afe3 - .lobytes $afe4 - .lobytes $afe5 - .lobytes $afe6 - .lobytes $afe7 - .lobytes $afe8 - .lobytes $afe9 - .lobytes $afea - .lobytes $afeb - .lobytes $afec - .lobytes $afed - .lobytes $afee - .lobytes $afef - .lobytes $aff0 - .lobytes $aff1 - .lobytes $aff2 - .lobytes $aff3 - .lobytes $aff4 - .lobytes $aff5 - .lobytes $aff6 - .lobytes $aff7 - .lobytes $aff8 - .lobytes $aff9 - .lobytes $affa - .lobytes $affb - .lobytes $affc - .lobytes $affd - .lobytes $affe - .lobytes $afff - .lobytes $b000 - .lobytes $b001 - .lobytes $b002 - .lobytes $b003 - .lobytes $b004 - .lobytes $b005 - .lobytes $b006 - .lobytes $b007 - .lobytes $b008 - .lobytes $b009 - .lobytes $b00a - .lobytes $b00b - .lobytes $b00c - .lobytes $b00d - .lobytes $b00e - .lobytes $b00f - .lobytes $bfe1 - .lobytes $bfe2 - .lobytes $bfe3 - .lobytes $bfe4 - .lobytes $bfe5 - .lobytes $bfe6 - .lobytes $bfe7 - .lobytes $bfe8 - .lobytes $bfe9 - .lobytes $bfea - .lobytes $bfeb - .lobytes $bfec - .lobytes $bfed - .lobytes $bfee - .lobytes $bfef - .lobytes $bff0 - .lobytes $bff1 - .lobytes $bff2 - .lobytes $bff3 - .lobytes $bff4 - .lobytes $bff5 - .lobytes $bff6 - .lobytes $bff7 - .lobytes $bff8 - .lobytes $bff9 - .lobytes $bffa - .lobytes $bffb - .lobytes $bffc - .lobytes $bffd - .lobytes $bffe - .lobytes $bfff - .lobytes $c000 - .lobytes $c001 - .lobytes $c002 - .lobytes $c003 - .lobytes $c004 - .lobytes $c005 - .lobytes $c006 - .lobytes $c007 - .lobytes $c008 - .lobytes $c009 - .lobytes $c00a - .lobytes $c00b - .lobytes $c00c - .lobytes $c00d - .lobytes $c00e - .lobytes $c00f - .lobytes $cfe1 - .lobytes $cfe2 - .lobytes $cfe3 - .lobytes $cfe4 - .lobytes $cfe5 - .lobytes $cfe6 - .lobytes $cfe7 - .lobytes $cfe8 - .lobytes $cfe9 - .lobytes $cfea - .lobytes $cfeb - .lobytes $cfec - .lobytes $cfed - .lobytes $cfee - .lobytes $cfef - .lobytes $cff0 - .lobytes $cff1 - .lobytes $cff2 - .lobytes $cff3 - .lobytes $cff4 - .lobytes $cff5 - .lobytes $cff6 - .lobytes $cff7 - .lobytes $cff8 - .lobytes $cff9 - .lobytes $cffa - .lobytes $cffb - .lobytes $cffc - .lobytes $cffd - .lobytes $cffe - .lobytes $cfff - .lobytes $d000 - .lobytes $d001 - .lobytes $d002 - .lobytes $d003 - .lobytes $d004 - .lobytes $d005 - .lobytes $d006 - .lobytes $d007 - .lobytes $d008 - .lobytes $d009 - .lobytes $d00a - .lobytes $d00b - .lobytes $d00c - .lobytes $d00d - .lobytes $d00e - .lobytes $d00f - .lobytes $dfe1 - .lobytes $dfe2 - .lobytes $dfe3 - .lobytes $dfe4 - .lobytes $dfe5 - .lobytes $dfe6 - .lobytes $dfe7 - .lobytes $dfe8 - .lobytes $dfe9 - .lobytes $dfea - .lobytes $dfeb - .lobytes $dfec - .lobytes $dfed - .lobytes $dfee - .lobytes $dfef - .lobytes $dff0 - .lobytes $dff1 - .lobytes $dff2 - .lobytes $dff3 - .lobytes $dff4 - .lobytes $dff5 - .lobytes $dff6 - .lobytes $dff7 - .lobytes $dff8 - .lobytes $dff9 - .lobytes $dffa - .lobytes $dffb - .lobytes $dffc - .lobytes $dffd - .lobytes $dffe - .lobytes $dfff - .lobytes $e000 - .lobytes $e001 - .lobytes $e002 - .lobytes $e003 - .lobytes $e004 - .lobytes $e005 - .lobytes $e006 - .lobytes $e007 - .lobytes $e008 - .lobytes $e009 - .lobytes $e00a - .lobytes $e00b - .lobytes $e00c - .lobytes $e00d - .lobytes $e00e - .lobytes $e00f - .lobytes $efe1 - .lobytes $efe2 - .lobytes $efe3 - .lobytes $efe4 - .lobytes $efe5 - .lobytes $efe6 - .lobytes $efe7 - .lobytes $efe8 - .lobytes $efe9 - .lobytes $efea - .lobytes $efeb - .lobytes $efec - .lobytes $efed - .lobytes $efee - .lobytes $efef - .lobytes $eff0 - .lobytes $eff1 - .lobytes $eff2 - .lobytes $eff3 - .lobytes $eff4 - .lobytes $eff5 - .lobytes $eff6 - .lobytes $eff7 - .lobytes $eff8 - .lobytes $eff9 - .lobytes $effa - .lobytes $effb - .lobytes $effc - .lobytes $effd - .lobytes $effe - .lobytes $efff - .lobytes $f000 - .lobytes $f001 - .lobytes $f002 - .lobytes $f003 - .lobytes $f004 - .lobytes $f005 - .lobytes $f006 - .lobytes $f007 - .lobytes $f008 - .lobytes $f009 - .lobytes $f00a - .lobytes $f00b - .lobytes $f00c - .lobytes $f00d - .lobytes $f00e - .lobytes $f00f - .lobytes $ffe1 - .lobytes $ffe2 - .lobytes $ffe3 - .lobytes $ffe4 - .lobytes $ffe5 - .lobytes $ffe6 - .lobytes $ffe7 - .lobytes $ffe8 - .lobytes $ffe9 - .lobytes $ffea - .lobytes $ffeb - .lobytes $ffec - .lobytes $ffed - .lobytes $ffee - .lobytes $ffef - .lobytes $fff0 - .lobytes $fff1 - .lobytes $fff2 - .lobytes $fff3 - .lobytes $fff4 - .lobytes $fff5 - .lobytes $fff6 - .lobytes $fff7 - .lobytes $fff8 - .lobytes $fff9 - .lobytes $fffa - .lobytes $fffb - .lobytes $fffc - .lobytes $fffd - .lobytes $fffe - .lobytes $ffff + ; 4-digit hex values + .lobytes $0000 + .lobytes $0001 + .lobytes $0002 + .lobytes $0003 + .lobytes $0004 + .lobytes $0005 + .lobytes $0006 + .lobytes $0007 + .lobytes $0008 + .lobytes $0009 + .lobytes $000a + .lobytes $000b + .lobytes $000c + .lobytes $000d + .lobytes $000e + .lobytes $000f + .lobytes $0010 + .lobytes $0011 + .lobytes $0012 + .lobytes $0013 + .lobytes $0070 + .lobytes $0071 + .lobytes $0072 + .lobytes $0073 + .lobytes $0074 + .lobytes $0075 + .lobytes $0076 + .lobytes $0077 + .lobytes $0078 + .lobytes $0079 + .lobytes $007a + .lobytes $007b + .lobytes $007c + .lobytes $007d + .lobytes $007e + .lobytes $007f + .lobytes $0080 + .lobytes $0081 + .lobytes $0082 + .lobytes $0083 + .lobytes $0084 + .lobytes $0085 + .lobytes $0086 + .lobytes $00f0 + .lobytes $00f1 + .lobytes $00f2 + .lobytes $00f3 + .lobytes $00f4 + .lobytes $00f5 + .lobytes $00f6 + .lobytes $00f7 + .lobytes $00f8 + .lobytes $00f9 + .lobytes $00fa + .lobytes $00fb + .lobytes $00fc + .lobytes $00fd + .lobytes $00fe + .lobytes $00ff + .lobytes $0100 + .lobytes $0101 + .lobytes $0102 + .lobytes $0103 + .lobytes $0fd2 + .lobytes $0fd3 + .lobytes $0fd4 + .lobytes $0fd5 + .lobytes $0fd6 + .lobytes $0fd7 + .lobytes $0fd8 + .lobytes $0fd9 + .lobytes $0fda + .lobytes $0fdb + .lobytes $0fdc + .lobytes $0fdd + .lobytes $0fde + .lobytes $0fdf + .lobytes $0fe0 + .lobytes $0fe1 + .lobytes $0fe2 + .lobytes $0fe3 + .lobytes $0fe4 + .lobytes $0fe5 + .lobytes $0fe6 + .lobytes $0fe7 + .lobytes $0fe8 + .lobytes $0fe9 + .lobytes $0fea + .lobytes $0feb + .lobytes $0fec + .lobytes $0fed + .lobytes $0fee + .lobytes $0fef + .lobytes $0ff0 + .lobytes $0ff1 + .lobytes $0ff2 + .lobytes $0ff3 + .lobytes $0ff4 + .lobytes $0ff5 + .lobytes $0ff6 + .lobytes $0ff7 + .lobytes $0ff8 + .lobytes $0ff9 + .lobytes $0ffa + .lobytes $0ffb + .lobytes $0ffc + .lobytes $0ffd + .lobytes $0ffe + .lobytes $0fff + .lobytes $1000 + .lobytes $1001 + .lobytes $1002 + .lobytes $1003 + .lobytes $1004 + .lobytes $1005 + .lobytes $1006 + .lobytes $1007 + .lobytes $1008 + .lobytes $7ff0 + .lobytes $7ff1 + .lobytes $7ff2 + .lobytes $7ff3 + .lobytes $7ff4 + .lobytes $7ff5 + .lobytes $7ff6 + .lobytes $7ff7 + .lobytes $7ff8 + .lobytes $7ff9 + .lobytes $7ffa + .lobytes $7ffb + .lobytes $7ffc + .lobytes $7ffd + .lobytes $7ffe + .lobytes $7fff + .lobytes $8000 + .lobytes $8001 + .lobytes $8002 + .lobytes $8003 + .lobytes $8004 + .lobytes $8005 + .lobytes $8006 + .lobytes $8007 + .lobytes $8008 + .lobytes $8009 + .lobytes $800a + .lobytes $800b + .lobytes $9fe1 + .lobytes $9fe2 + .lobytes $9fe3 + .lobytes $9fe4 + .lobytes $9fe5 + .lobytes $9fe6 + .lobytes $9fe7 + .lobytes $9fe8 + .lobytes $9fe9 + .lobytes $9fea + .lobytes $9feb + .lobytes $9fec + .lobytes $9fed + .lobytes $9fee + .lobytes $9fef + .lobytes $9ff0 + .lobytes $9ff1 + .lobytes $9ff2 + .lobytes $9ff3 + .lobytes $9ff4 + .lobytes $9ff5 + .lobytes $9ff6 + .lobytes $9ff7 + .lobytes $9ff8 + .lobytes $9ff9 + .lobytes $9ffa + .lobytes $9ffb + .lobytes $9ffc + .lobytes $9ffd + .lobytes $9ffe + .lobytes $9fff + .lobytes $a000 + .lobytes $a001 + .lobytes $a002 + .lobytes $a003 + .lobytes $a004 + .lobytes $a005 + .lobytes $a006 + .lobytes $a007 + .lobytes $a008 + .lobytes $a009 + .lobytes $a00a + .lobytes $a00b + .lobytes $a00c + .lobytes $a00d + .lobytes $a00e + .lobytes $a00f + .lobytes $afe1 + .lobytes $afe2 + .lobytes $afe3 + .lobytes $afe4 + .lobytes $afe5 + .lobytes $afe6 + .lobytes $afe7 + .lobytes $afe8 + .lobytes $afe9 + .lobytes $afea + .lobytes $afeb + .lobytes $afec + .lobytes $afed + .lobytes $afee + .lobytes $afef + .lobytes $aff0 + .lobytes $aff1 + .lobytes $aff2 + .lobytes $aff3 + .lobytes $aff4 + .lobytes $aff5 + .lobytes $aff6 + .lobytes $aff7 + .lobytes $aff8 + .lobytes $aff9 + .lobytes $affa + .lobytes $affb + .lobytes $affc + .lobytes $affd + .lobytes $affe + .lobytes $afff + .lobytes $b000 + .lobytes $b001 + .lobytes $b002 + .lobytes $b003 + .lobytes $b004 + .lobytes $b005 + .lobytes $b006 + .lobytes $b007 + .lobytes $b008 + .lobytes $b009 + .lobytes $b00a + .lobytes $b00b + .lobytes $b00c + .lobytes $b00d + .lobytes $b00e + .lobytes $b00f + .lobytes $bfe1 + .lobytes $bfe2 + .lobytes $bfe3 + .lobytes $bfe4 + .lobytes $bfe5 + .lobytes $bfe6 + .lobytes $bfe7 + .lobytes $bfe8 + .lobytes $bfe9 + .lobytes $bfea + .lobytes $bfeb + .lobytes $bfec + .lobytes $bfed + .lobytes $bfee + .lobytes $bfef + .lobytes $bff0 + .lobytes $bff1 + .lobytes $bff2 + .lobytes $bff3 + .lobytes $bff4 + .lobytes $bff5 + .lobytes $bff6 + .lobytes $bff7 + .lobytes $bff8 + .lobytes $bff9 + .lobytes $bffa + .lobytes $bffb + .lobytes $bffc + .lobytes $bffd + .lobytes $bffe + .lobytes $bfff + .lobytes $c000 + .lobytes $c001 + .lobytes $c002 + .lobytes $c003 + .lobytes $c004 + .lobytes $c005 + .lobytes $c006 + .lobytes $c007 + .lobytes $c008 + .lobytes $c009 + .lobytes $c00a + .lobytes $c00b + .lobytes $c00c + .lobytes $c00d + .lobytes $c00e + .lobytes $c00f + .lobytes $cfe1 + .lobytes $cfe2 + .lobytes $cfe3 + .lobytes $cfe4 + .lobytes $cfe5 + .lobytes $cfe6 + .lobytes $cfe7 + .lobytes $cfe8 + .lobytes $cfe9 + .lobytes $cfea + .lobytes $cfeb + .lobytes $cfec + .lobytes $cfed + .lobytes $cfee + .lobytes $cfef + .lobytes $cff0 + .lobytes $cff1 + .lobytes $cff2 + .lobytes $cff3 + .lobytes $cff4 + .lobytes $cff5 + .lobytes $cff6 + .lobytes $cff7 + .lobytes $cff8 + .lobytes $cff9 + .lobytes $cffa + .lobytes $cffb + .lobytes $cffc + .lobytes $cffd + .lobytes $cffe + .lobytes $cfff + .lobytes $d000 + .lobytes $d001 + .lobytes $d002 + .lobytes $d003 + .lobytes $d004 + .lobytes $d005 + .lobytes $d006 + .lobytes $d007 + .lobytes $d008 + .lobytes $d009 + .lobytes $d00a + .lobytes $d00b + .lobytes $d00c + .lobytes $d00d + .lobytes $d00e + .lobytes $d00f + .lobytes $dfe1 + .lobytes $dfe2 + .lobytes $dfe3 + .lobytes $dfe4 + .lobytes $dfe5 + .lobytes $dfe6 + .lobytes $dfe7 + .lobytes $dfe8 + .lobytes $dfe9 + .lobytes $dfea + .lobytes $dfeb + .lobytes $dfec + .lobytes $dfed + .lobytes $dfee + .lobytes $dfef + .lobytes $dff0 + .lobytes $dff1 + .lobytes $dff2 + .lobytes $dff3 + .lobytes $dff4 + .lobytes $dff5 + .lobytes $dff6 + .lobytes $dff7 + .lobytes $dff8 + .lobytes $dff9 + .lobytes $dffa + .lobytes $dffb + .lobytes $dffc + .lobytes $dffd + .lobytes $dffe + .lobytes $dfff + .lobytes $e000 + .lobytes $e001 + .lobytes $e002 + .lobytes $e003 + .lobytes $e004 + .lobytes $e005 + .lobytes $e006 + .lobytes $e007 + .lobytes $e008 + .lobytes $e009 + .lobytes $e00a + .lobytes $e00b + .lobytes $e00c + .lobytes $e00d + .lobytes $e00e + .lobytes $e00f + .lobytes $efe1 + .lobytes $efe2 + .lobytes $efe3 + .lobytes $efe4 + .lobytes $efe5 + .lobytes $efe6 + .lobytes $efe7 + .lobytes $efe8 + .lobytes $efe9 + .lobytes $efea + .lobytes $efeb + .lobytes $efec + .lobytes $efed + .lobytes $efee + .lobytes $efef + .lobytes $eff0 + .lobytes $eff1 + .lobytes $eff2 + .lobytes $eff3 + .lobytes $eff4 + .lobytes $eff5 + .lobytes $eff6 + .lobytes $eff7 + .lobytes $eff8 + .lobytes $eff9 + .lobytes $effa + .lobytes $effb + .lobytes $effc + .lobytes $effd + .lobytes $effe + .lobytes $efff + .lobytes $f000 + .lobytes $f001 + .lobytes $f002 + .lobytes $f003 + .lobytes $f004 + .lobytes $f005 + .lobytes $f006 + .lobytes $f007 + .lobytes $f008 + .lobytes $f009 + .lobytes $f00a + .lobytes $f00b + .lobytes $f00c + .lobytes $f00d + .lobytes $f00e + .lobytes $f00f + .lobytes $ffe1 + .lobytes $ffe2 + .lobytes $ffe3 + .lobytes $ffe4 + .lobytes $ffe5 + .lobytes $ffe6 + .lobytes $ffe7 + .lobytes $ffe8 + .lobytes $ffe9 + .lobytes $ffea + .lobytes $ffeb + .lobytes $ffec + .lobytes $ffed + .lobytes $ffee + .lobytes $ffef + .lobytes $fff0 + .lobytes $fff1 + .lobytes $fff2 + .lobytes $fff3 + .lobytes $fff4 + .lobytes $fff5 + .lobytes $fff6 + .lobytes $fff7 + .lobytes $fff8 + .lobytes $fff9 + .lobytes $fffa + .lobytes $fffb + .lobytes $fffc + .lobytes $fffd + .lobytes $fffe + .lobytes $ffff - ; 4-digit hex values, uppercase - .lobytes $0000 - .lobytes $0001 - .lobytes $0002 - .lobytes $0003 - .lobytes $0004 - .lobytes $0005 - .lobytes $0006 - .lobytes $0007 - .lobytes $0008 - .lobytes $0009 - .lobytes $000A - .lobytes $000B - .lobytes $000C - .lobytes $000D - .lobytes $000E - .lobytes $000F - .lobytes $0010 - .lobytes $0011 - .lobytes $0012 - .lobytes $0013 - .lobytes $0070 - .lobytes $0071 - .lobytes $0072 - .lobytes $0073 - .lobytes $0074 - .lobytes $0075 - .lobytes $0076 - .lobytes $0077 - .lobytes $0078 - .lobytes $0079 - .lobytes $007A - .lobytes $007B - .lobytes $007C - .lobytes $007D - .lobytes $007E - .lobytes $007F - .lobytes $0080 - .lobytes $0081 - .lobytes $0082 - .lobytes $0083 - .lobytes $0084 - .lobytes $0085 - .lobytes $0086 - .lobytes $00F0 - .lobytes $00F1 - .lobytes $00F2 - .lobytes $00F3 - .lobytes $00F4 - .lobytes $00F5 - .lobytes $00F6 - .lobytes $00F7 - .lobytes $00F8 - .lobytes $00F9 - .lobytes $00FA - .lobytes $00FB - .lobytes $00FC - .lobytes $00FD - .lobytes $00FE - .lobytes $00FF - .lobytes $0100 - .lobytes $0101 - .lobytes $0102 - .lobytes $0103 - .lobytes $0FD2 - .lobytes $0FD3 - .lobytes $0FD4 - .lobytes $0FD5 - .lobytes $0FD6 - .lobytes $0FD7 - .lobytes $0FD8 - .lobytes $0FD9 - .lobytes $0FDA - .lobytes $0FDB - .lobytes $0FDC - .lobytes $0FDD - .lobytes $0FDE - .lobytes $0FDF - .lobytes $0FE0 - .lobytes $0FE1 - .lobytes $0FE2 - .lobytes $0FE3 - .lobytes $0FE4 - .lobytes $0FE5 - .lobytes $0FE6 - .lobytes $0FE7 - .lobytes $0FE8 - .lobytes $0FE9 - .lobytes $0FEA - .lobytes $0FEB - .lobytes $0FEC - .lobytes $0FED - .lobytes $0FEE - .lobytes $0FEF - .lobytes $0FF0 - .lobytes $0FF1 - .lobytes $0FF2 - .lobytes $0FF3 - .lobytes $0FF4 - .lobytes $0FF5 - .lobytes $0FF6 - .lobytes $0FF7 - .lobytes $0FF8 - .lobytes $0FF9 - .lobytes $0FFA - .lobytes $0FFB - .lobytes $0FFC - .lobytes $0FFD - .lobytes $0FFE - .lobytes $0FFF - .lobytes $1000 - .lobytes $1001 - .lobytes $1002 - .lobytes $1003 - .lobytes $1004 - .lobytes $1005 - .lobytes $1006 - .lobytes $1007 - .lobytes $1008 - .lobytes $7FF0 - .lobytes $7FF1 - .lobytes $7FF2 - .lobytes $7FF3 - .lobytes $7FF4 - .lobytes $7FF5 - .lobytes $7FF6 - .lobytes $7FF7 - .lobytes $7FF8 - .lobytes $7FF9 - .lobytes $7FFA - .lobytes $7FFB - .lobytes $7FFC - .lobytes $7FFD - .lobytes $7FFE - .lobytes $7FFF - .lobytes $8000 - .lobytes $8001 - .lobytes $8002 - .lobytes $8003 - .lobytes $8004 - .lobytes $8005 - .lobytes $8006 - .lobytes $8007 - .lobytes $8008 - .lobytes $8009 - .lobytes $800A - .lobytes $800B - .lobytes $9FE1 - .lobytes $9FE2 - .lobytes $9FE3 - .lobytes $9FE4 - .lobytes $9FE5 - .lobytes $9FE6 - .lobytes $9FE7 - .lobytes $9FE8 - .lobytes $9FE9 - .lobytes $9FEA - .lobytes $9FEB - .lobytes $9FEC - .lobytes $9FED - .lobytes $9FEE - .lobytes $9FEF - .lobytes $9FF0 - .lobytes $9FF1 - .lobytes $9FF2 - .lobytes $9FF3 - .lobytes $9FF4 - .lobytes $9FF5 - .lobytes $9FF6 - .lobytes $9FF7 - .lobytes $9FF8 - .lobytes $9FF9 - .lobytes $9FFA - .lobytes $9FFB - .lobytes $9FFC - .lobytes $9FFD - .lobytes $9FFE - .lobytes $9FFF - .lobytes $A000 - .lobytes $A001 - .lobytes $A002 - .lobytes $A003 - .lobytes $A004 - .lobytes $A005 - .lobytes $A006 - .lobytes $A007 - .lobytes $A008 - .lobytes $A009 - .lobytes $A00A - .lobytes $A00B - .lobytes $A00C - .lobytes $A00D - .lobytes $A00E - .lobytes $A00F - .lobytes $AFE1 - .lobytes $AFE2 - .lobytes $AFE3 - .lobytes $AFE4 - .lobytes $AFE5 - .lobytes $AFE6 - .lobytes $AFE7 - .lobytes $AFE8 - .lobytes $AFE9 - .lobytes $AFEA - .lobytes $AFEB - .lobytes $AFEC - .lobytes $AFED - .lobytes $AFEE - .lobytes $AFEF - .lobytes $AFF0 - .lobytes $AFF1 - .lobytes $AFF2 - .lobytes $AFF3 - .lobytes $AFF4 - .lobytes $AFF5 - .lobytes $AFF6 - .lobytes $AFF7 - .lobytes $AFF8 - .lobytes $AFF9 - .lobytes $AFFA - .lobytes $AFFB - .lobytes $AFFC - .lobytes $AFFD - .lobytes $AFFE - .lobytes $AFFF - .lobytes $B000 - .lobytes $B001 - .lobytes $B002 - .lobytes $B003 - .lobytes $B004 - .lobytes $B005 - .lobytes $B006 - .lobytes $B007 - .lobytes $B008 - .lobytes $B009 - .lobytes $B00A - .lobytes $B00B - .lobytes $B00C - .lobytes $B00D - .lobytes $B00E - .lobytes $B00F - .lobytes $BFE1 - .lobytes $BFE2 - .lobytes $BFE3 - .lobytes $BFE4 - .lobytes $BFE5 - .lobytes $BFE6 - .lobytes $BFE7 - .lobytes $BFE8 - .lobytes $BFE9 - .lobytes $BFEA - .lobytes $BFEB - .lobytes $BFEC - .lobytes $BFED - .lobytes $BFEE - .lobytes $BFEF - .lobytes $BFF0 - .lobytes $BFF1 - .lobytes $BFF2 - .lobytes $BFF3 - .lobytes $BFF4 - .lobytes $BFF5 - .lobytes $BFF6 - .lobytes $BFF7 - .lobytes $BFF8 - .lobytes $BFF9 - .lobytes $BFFA - .lobytes $BFFB - .lobytes $BFFC - .lobytes $BFFD - .lobytes $BFFE - .lobytes $BFFF - .lobytes $C000 - .lobytes $C001 - .lobytes $C002 - .lobytes $C003 - .lobytes $C004 - .lobytes $C005 - .lobytes $C006 - .lobytes $C007 - .lobytes $C008 - .lobytes $C009 - .lobytes $C00A - .lobytes $C00B - .lobytes $C00C - .lobytes $C00D - .lobytes $C00E - .lobytes $C00F - .lobytes $CFE1 - .lobytes $CFE2 - .lobytes $CFE3 - .lobytes $CFE4 - .lobytes $CFE5 - .lobytes $CFE6 - .lobytes $CFE7 - .lobytes $CFE8 - .lobytes $CFE9 - .lobytes $CFEA - .lobytes $CFEB - .lobytes $CFEC - .lobytes $CFED - .lobytes $CFEE - .lobytes $CFEF - .lobytes $CFF0 - .lobytes $CFF1 - .lobytes $CFF2 - .lobytes $CFF3 - .lobytes $CFF4 - .lobytes $CFF5 - .lobytes $CFF6 - .lobytes $CFF7 - .lobytes $CFF8 - .lobytes $CFF9 - .lobytes $CFFA - .lobytes $CFFB - .lobytes $CFFC - .lobytes $CFFD - .lobytes $CFFE - .lobytes $CFFF - .lobytes $D000 - .lobytes $D001 - .lobytes $D002 - .lobytes $D003 - .lobytes $D004 - .lobytes $D005 - .lobytes $D006 - .lobytes $D007 - .lobytes $D008 - .lobytes $D009 - .lobytes $D00A - .lobytes $D00B - .lobytes $D00C - .lobytes $D00D - .lobytes $D00E - .lobytes $D00F - .lobytes $DFE1 - .lobytes $DFE2 - .lobytes $DFE3 - .lobytes $DFE4 - .lobytes $DFE5 - .lobytes $DFE6 - .lobytes $DFE7 - .lobytes $DFE8 - .lobytes $DFE9 - .lobytes $DFEA - .lobytes $DFEB - .lobytes $DFEC - .lobytes $DFED - .lobytes $DFEE - .lobytes $DFEF - .lobytes $DFF0 - .lobytes $DFF1 - .lobytes $DFF2 - .lobytes $DFF3 - .lobytes $DFF4 - .lobytes $DFF5 - .lobytes $DFF6 - .lobytes $DFF7 - .lobytes $DFF8 - .lobytes $DFF9 - .lobytes $DFFA - .lobytes $DFFB - .lobytes $DFFC - .lobytes $DFFD - .lobytes $DFFE - .lobytes $DFFF - .lobytes $E000 - .lobytes $E001 - .lobytes $E002 - .lobytes $E003 - .lobytes $E004 - .lobytes $E005 - .lobytes $E006 - .lobytes $E007 - .lobytes $E008 - .lobytes $E009 - .lobytes $E00A - .lobytes $E00B - .lobytes $E00C - .lobytes $E00D - .lobytes $E00E - .lobytes $E00F - .lobytes $EFE1 - .lobytes $EFE2 - .lobytes $EFE3 - .lobytes $EFE4 - .lobytes $EFE5 - .lobytes $EFE6 - .lobytes $EFE7 - .lobytes $EFE8 - .lobytes $EFE9 - .lobytes $EFEA - .lobytes $EFEB - .lobytes $EFEC - .lobytes $EFED - .lobytes $EFEE - .lobytes $EFEF - .lobytes $EFF0 - .lobytes $EFF1 - .lobytes $EFF2 - .lobytes $EFF3 - .lobytes $EFF4 - .lobytes $EFF5 - .lobytes $EFF6 - .lobytes $EFF7 - .lobytes $EFF8 - .lobytes $EFF9 - .lobytes $EFFA - .lobytes $EFFB - .lobytes $EFFC - .lobytes $EFFD - .lobytes $EFFE - .lobytes $EFFF - .lobytes $F000 - .lobytes $F001 - .lobytes $F002 - .lobytes $F003 - .lobytes $F004 - .lobytes $F005 - .lobytes $F006 - .lobytes $F007 - .lobytes $F008 - .lobytes $F009 - .lobytes $F00A - .lobytes $F00B - .lobytes $F00C - .lobytes $F00D - .lobytes $F00E - .lobytes $F00F - .lobytes $FFE1 - .lobytes $FFE2 - .lobytes $FFE3 - .lobytes $FFE4 - .lobytes $FFE5 - .lobytes $FFE6 - .lobytes $FFE7 - .lobytes $FFE8 - .lobytes $FFE9 - .lobytes $FFEA - .lobytes $FFEB - .lobytes $FFEC - .lobytes $FFED - .lobytes $FFEE - .lobytes $FFEF - .lobytes $FFF0 - .lobytes $FFF1 - .lobytes $FFF2 - .lobytes $FFF3 - .lobytes $FFF4 - .lobytes $FFF5 - .lobytes $FFF6 - .lobytes $FFF7 - .lobytes $FFF8 - .lobytes $FFF9 - .lobytes $FFFA - .lobytes $FFFB - .lobytes $FFFC - .lobytes $FFFD - .lobytes $FFFE - .lobytes $FFFF + ; 4-digit hex values, uppercase + .lobytes $0000 + .lobytes $0001 + .lobytes $0002 + .lobytes $0003 + .lobytes $0004 + .lobytes $0005 + .lobytes $0006 + .lobytes $0007 + .lobytes $0008 + .lobytes $0009 + .lobytes $000A + .lobytes $000B + .lobytes $000C + .lobytes $000D + .lobytes $000E + .lobytes $000F + .lobytes $0010 + .lobytes $0011 + .lobytes $0012 + .lobytes $0013 + .lobytes $0070 + .lobytes $0071 + .lobytes $0072 + .lobytes $0073 + .lobytes $0074 + .lobytes $0075 + .lobytes $0076 + .lobytes $0077 + .lobytes $0078 + .lobytes $0079 + .lobytes $007A + .lobytes $007B + .lobytes $007C + .lobytes $007D + .lobytes $007E + .lobytes $007F + .lobytes $0080 + .lobytes $0081 + .lobytes $0082 + .lobytes $0083 + .lobytes $0084 + .lobytes $0085 + .lobytes $0086 + .lobytes $00F0 + .lobytes $00F1 + .lobytes $00F2 + .lobytes $00F3 + .lobytes $00F4 + .lobytes $00F5 + .lobytes $00F6 + .lobytes $00F7 + .lobytes $00F8 + .lobytes $00F9 + .lobytes $00FA + .lobytes $00FB + .lobytes $00FC + .lobytes $00FD + .lobytes $00FE + .lobytes $00FF + .lobytes $0100 + .lobytes $0101 + .lobytes $0102 + .lobytes $0103 + .lobytes $0FD2 + .lobytes $0FD3 + .lobytes $0FD4 + .lobytes $0FD5 + .lobytes $0FD6 + .lobytes $0FD7 + .lobytes $0FD8 + .lobytes $0FD9 + .lobytes $0FDA + .lobytes $0FDB + .lobytes $0FDC + .lobytes $0FDD + .lobytes $0FDE + .lobytes $0FDF + .lobytes $0FE0 + .lobytes $0FE1 + .lobytes $0FE2 + .lobytes $0FE3 + .lobytes $0FE4 + .lobytes $0FE5 + .lobytes $0FE6 + .lobytes $0FE7 + .lobytes $0FE8 + .lobytes $0FE9 + .lobytes $0FEA + .lobytes $0FEB + .lobytes $0FEC + .lobytes $0FED + .lobytes $0FEE + .lobytes $0FEF + .lobytes $0FF0 + .lobytes $0FF1 + .lobytes $0FF2 + .lobytes $0FF3 + .lobytes $0FF4 + .lobytes $0FF5 + .lobytes $0FF6 + .lobytes $0FF7 + .lobytes $0FF8 + .lobytes $0FF9 + .lobytes $0FFA + .lobytes $0FFB + .lobytes $0FFC + .lobytes $0FFD + .lobytes $0FFE + .lobytes $0FFF + .lobytes $1000 + .lobytes $1001 + .lobytes $1002 + .lobytes $1003 + .lobytes $1004 + .lobytes $1005 + .lobytes $1006 + .lobytes $1007 + .lobytes $1008 + .lobytes $7FF0 + .lobytes $7FF1 + .lobytes $7FF2 + .lobytes $7FF3 + .lobytes $7FF4 + .lobytes $7FF5 + .lobytes $7FF6 + .lobytes $7FF7 + .lobytes $7FF8 + .lobytes $7FF9 + .lobytes $7FFA + .lobytes $7FFB + .lobytes $7FFC + .lobytes $7FFD + .lobytes $7FFE + .lobytes $7FFF + .lobytes $8000 + .lobytes $8001 + .lobytes $8002 + .lobytes $8003 + .lobytes $8004 + .lobytes $8005 + .lobytes $8006 + .lobytes $8007 + .lobytes $8008 + .lobytes $8009 + .lobytes $800A + .lobytes $800B + .lobytes $9FE1 + .lobytes $9FE2 + .lobytes $9FE3 + .lobytes $9FE4 + .lobytes $9FE5 + .lobytes $9FE6 + .lobytes $9FE7 + .lobytes $9FE8 + .lobytes $9FE9 + .lobytes $9FEA + .lobytes $9FEB + .lobytes $9FEC + .lobytes $9FED + .lobytes $9FEE + .lobytes $9FEF + .lobytes $9FF0 + .lobytes $9FF1 + .lobytes $9FF2 + .lobytes $9FF3 + .lobytes $9FF4 + .lobytes $9FF5 + .lobytes $9FF6 + .lobytes $9FF7 + .lobytes $9FF8 + .lobytes $9FF9 + .lobytes $9FFA + .lobytes $9FFB + .lobytes $9FFC + .lobytes $9FFD + .lobytes $9FFE + .lobytes $9FFF + .lobytes $A000 + .lobytes $A001 + .lobytes $A002 + .lobytes $A003 + .lobytes $A004 + .lobytes $A005 + .lobytes $A006 + .lobytes $A007 + .lobytes $A008 + .lobytes $A009 + .lobytes $A00A + .lobytes $A00B + .lobytes $A00C + .lobytes $A00D + .lobytes $A00E + .lobytes $A00F + .lobytes $AFE1 + .lobytes $AFE2 + .lobytes $AFE3 + .lobytes $AFE4 + .lobytes $AFE5 + .lobytes $AFE6 + .lobytes $AFE7 + .lobytes $AFE8 + .lobytes $AFE9 + .lobytes $AFEA + .lobytes $AFEB + .lobytes $AFEC + .lobytes $AFED + .lobytes $AFEE + .lobytes $AFEF + .lobytes $AFF0 + .lobytes $AFF1 + .lobytes $AFF2 + .lobytes $AFF3 + .lobytes $AFF4 + .lobytes $AFF5 + .lobytes $AFF6 + .lobytes $AFF7 + .lobytes $AFF8 + .lobytes $AFF9 + .lobytes $AFFA + .lobytes $AFFB + .lobytes $AFFC + .lobytes $AFFD + .lobytes $AFFE + .lobytes $AFFF + .lobytes $B000 + .lobytes $B001 + .lobytes $B002 + .lobytes $B003 + .lobytes $B004 + .lobytes $B005 + .lobytes $B006 + .lobytes $B007 + .lobytes $B008 + .lobytes $B009 + .lobytes $B00A + .lobytes $B00B + .lobytes $B00C + .lobytes $B00D + .lobytes $B00E + .lobytes $B00F + .lobytes $BFE1 + .lobytes $BFE2 + .lobytes $BFE3 + .lobytes $BFE4 + .lobytes $BFE5 + .lobytes $BFE6 + .lobytes $BFE7 + .lobytes $BFE8 + .lobytes $BFE9 + .lobytes $BFEA + .lobytes $BFEB + .lobytes $BFEC + .lobytes $BFED + .lobytes $BFEE + .lobytes $BFEF + .lobytes $BFF0 + .lobytes $BFF1 + .lobytes $BFF2 + .lobytes $BFF3 + .lobytes $BFF4 + .lobytes $BFF5 + .lobytes $BFF6 + .lobytes $BFF7 + .lobytes $BFF8 + .lobytes $BFF9 + .lobytes $BFFA + .lobytes $BFFB + .lobytes $BFFC + .lobytes $BFFD + .lobytes $BFFE + .lobytes $BFFF + .lobytes $C000 + .lobytes $C001 + .lobytes $C002 + .lobytes $C003 + .lobytes $C004 + .lobytes $C005 + .lobytes $C006 + .lobytes $C007 + .lobytes $C008 + .lobytes $C009 + .lobytes $C00A + .lobytes $C00B + .lobytes $C00C + .lobytes $C00D + .lobytes $C00E + .lobytes $C00F + .lobytes $CFE1 + .lobytes $CFE2 + .lobytes $CFE3 + .lobytes $CFE4 + .lobytes $CFE5 + .lobytes $CFE6 + .lobytes $CFE7 + .lobytes $CFE8 + .lobytes $CFE9 + .lobytes $CFEA + .lobytes $CFEB + .lobytes $CFEC + .lobytes $CFED + .lobytes $CFEE + .lobytes $CFEF + .lobytes $CFF0 + .lobytes $CFF1 + .lobytes $CFF2 + .lobytes $CFF3 + .lobytes $CFF4 + .lobytes $CFF5 + .lobytes $CFF6 + .lobytes $CFF7 + .lobytes $CFF8 + .lobytes $CFF9 + .lobytes $CFFA + .lobytes $CFFB + .lobytes $CFFC + .lobytes $CFFD + .lobytes $CFFE + .lobytes $CFFF + .lobytes $D000 + .lobytes $D001 + .lobytes $D002 + .lobytes $D003 + .lobytes $D004 + .lobytes $D005 + .lobytes $D006 + .lobytes $D007 + .lobytes $D008 + .lobytes $D009 + .lobytes $D00A + .lobytes $D00B + .lobytes $D00C + .lobytes $D00D + .lobytes $D00E + .lobytes $D00F + .lobytes $DFE1 + .lobytes $DFE2 + .lobytes $DFE3 + .lobytes $DFE4 + .lobytes $DFE5 + .lobytes $DFE6 + .lobytes $DFE7 + .lobytes $DFE8 + .lobytes $DFE9 + .lobytes $DFEA + .lobytes $DFEB + .lobytes $DFEC + .lobytes $DFED + .lobytes $DFEE + .lobytes $DFEF + .lobytes $DFF0 + .lobytes $DFF1 + .lobytes $DFF2 + .lobytes $DFF3 + .lobytes $DFF4 + .lobytes $DFF5 + .lobytes $DFF6 + .lobytes $DFF7 + .lobytes $DFF8 + .lobytes $DFF9 + .lobytes $DFFA + .lobytes $DFFB + .lobytes $DFFC + .lobytes $DFFD + .lobytes $DFFE + .lobytes $DFFF + .lobytes $E000 + .lobytes $E001 + .lobytes $E002 + .lobytes $E003 + .lobytes $E004 + .lobytes $E005 + .lobytes $E006 + .lobytes $E007 + .lobytes $E008 + .lobytes $E009 + .lobytes $E00A + .lobytes $E00B + .lobytes $E00C + .lobytes $E00D + .lobytes $E00E + .lobytes $E00F + .lobytes $EFE1 + .lobytes $EFE2 + .lobytes $EFE3 + .lobytes $EFE4 + .lobytes $EFE5 + .lobytes $EFE6 + .lobytes $EFE7 + .lobytes $EFE8 + .lobytes $EFE9 + .lobytes $EFEA + .lobytes $EFEB + .lobytes $EFEC + .lobytes $EFED + .lobytes $EFEE + .lobytes $EFEF + .lobytes $EFF0 + .lobytes $EFF1 + .lobytes $EFF2 + .lobytes $EFF3 + .lobytes $EFF4 + .lobytes $EFF5 + .lobytes $EFF6 + .lobytes $EFF7 + .lobytes $EFF8 + .lobytes $EFF9 + .lobytes $EFFA + .lobytes $EFFB + .lobytes $EFFC + .lobytes $EFFD + .lobytes $EFFE + .lobytes $EFFF + .lobytes $F000 + .lobytes $F001 + .lobytes $F002 + .lobytes $F003 + .lobytes $F004 + .lobytes $F005 + .lobytes $F006 + .lobytes $F007 + .lobytes $F008 + .lobytes $F009 + .lobytes $F00A + .lobytes $F00B + .lobytes $F00C + .lobytes $F00D + .lobytes $F00E + .lobytes $F00F + .lobytes $FFE1 + .lobytes $FFE2 + .lobytes $FFE3 + .lobytes $FFE4 + .lobytes $FFE5 + .lobytes $FFE6 + .lobytes $FFE7 + .lobytes $FFE8 + .lobytes $FFE9 + .lobytes $FFEA + .lobytes $FFEB + .lobytes $FFEC + .lobytes $FFED + .lobytes $FFEE + .lobytes $FFEF + .lobytes $FFF0 + .lobytes $FFF1 + .lobytes $FFF2 + .lobytes $FFF3 + .lobytes $FFF4 + .lobytes $FFF5 + .lobytes $FFF6 + .lobytes $FFF7 + .lobytes $FFF8 + .lobytes $FFF9 + .lobytes $FFFA + .lobytes $FFFB + .lobytes $FFFC + .lobytes $FFFD + .lobytes $FFFE + .lobytes $FFFF - ; alternative hex values - .lobytes 0h - .lobytes 1h - .lobytes 2h - .lobytes 3h - .lobytes 4h - .lobytes 5h - .lobytes 6h - .lobytes 7h - .lobytes 8h - .lobytes 9h - .lobytes 0ah - .lobytes 0bh - .lobytes 0ch - .lobytes 0dh - .lobytes 0eh - .lobytes 0fh - .lobytes 10h - .lobytes 11h - .lobytes 12h - .lobytes 13h - .lobytes 70h - .lobytes 71h - .lobytes 72h - .lobytes 73h - .lobytes 74h - .lobytes 75h - .lobytes 76h - .lobytes 77h - .lobytes 78h - .lobytes 79h - .lobytes 7ah - .lobytes 7bh - .lobytes 7ch - .lobytes 7dh - .lobytes 7eh - .lobytes 7fh - .lobytes 80h - .lobytes 81h - .lobytes 82h - .lobytes 83h - .lobytes 84h - .lobytes 85h - .lobytes 86h - .lobytes 0f0h - .lobytes 0f1h - .lobytes 0f2h - .lobytes 0f3h - .lobytes 0f4h - .lobytes 0f5h - .lobytes 0f6h - .lobytes 0f7h - .lobytes 0f8h - .lobytes 0f9h - .lobytes 0fah - .lobytes 0fbh - .lobytes 0fch - .lobytes 0fdh - .lobytes 0feh - .lobytes 0ffh - .lobytes 100h - .lobytes 101h - .lobytes 102h - .lobytes 103h - .lobytes 0fd2h - .lobytes 0fd3h - .lobytes 0fd4h - .lobytes 0fd5h - .lobytes 0fd6h - .lobytes 0fd7h - .lobytes 0fd8h - .lobytes 0fd9h - .lobytes 0fdah - .lobytes 0fdbh - .lobytes 0fdch - .lobytes 0fddh - .lobytes 0fdeh - .lobytes 0fdfh - .lobytes 0fe0h - .lobytes 0fe1h - .lobytes 0fe2h - .lobytes 0fe3h - .lobytes 0fe4h - .lobytes 0fe5h - .lobytes 0fe6h - .lobytes 0fe7h - .lobytes 0fe8h - .lobytes 0fe9h - .lobytes 0feah - .lobytes 0febh - .lobytes 0fech - .lobytes 0fedh - .lobytes 0feeh - .lobytes 0fefh - .lobytes 0ff0h - .lobytes 0ff1h - .lobytes 0ff2h - .lobytes 0ff3h - .lobytes 0ff4h - .lobytes 0ff5h - .lobytes 0ff6h - .lobytes 0ff7h - .lobytes 0ff8h - .lobytes 0ff9h - .lobytes 0ffah - .lobytes 0ffbh - .lobytes 0ffch - .lobytes 0ffdh - .lobytes 0ffeh - .lobytes 0fffh - .lobytes 1000h - .lobytes 1001h - .lobytes 1002h - .lobytes 1003h - .lobytes 1004h - .lobytes 1005h - .lobytes 1006h - .lobytes 1007h - .lobytes 1008h - .lobytes 7ff0h - .lobytes 7ff1h - .lobytes 7ff2h - .lobytes 7ff3h - .lobytes 7ff4h - .lobytes 7ff5h - .lobytes 7ff6h - .lobytes 7ff7h - .lobytes 7ff8h - .lobytes 7ff9h - .lobytes 7ffah - .lobytes 7ffbh - .lobytes 7ffch - .lobytes 7ffdh - .lobytes 7ffeh - .lobytes 7fffh - .lobytes 8000h - .lobytes 8001h - .lobytes 8002h - .lobytes 8003h - .lobytes 8004h - .lobytes 8005h - .lobytes 8006h - .lobytes 8007h - .lobytes 8008h - .lobytes 8009h - .lobytes 800ah - .lobytes 800bh - .lobytes 9fe1h - .lobytes 9fe2h - .lobytes 9fe3h - .lobytes 9fe4h - .lobytes 9fe5h - .lobytes 9fe6h - .lobytes 9fe7h - .lobytes 9fe8h - .lobytes 9fe9h - .lobytes 9feah - .lobytes 9febh - .lobytes 9fech - .lobytes 9fedh - .lobytes 9feeh - .lobytes 9fefh - .lobytes 9ff0h - .lobytes 9ff1h - .lobytes 9ff2h - .lobytes 9ff3h - .lobytes 9ff4h - .lobytes 9ff5h - .lobytes 9ff6h - .lobytes 9ff7h - .lobytes 9ff8h - .lobytes 9ff9h - .lobytes 9ffah - .lobytes 9ffbh - .lobytes 9ffch - .lobytes 9ffdh - .lobytes 9ffeh - .lobytes 9fffh - .lobytes 0a000h - .lobytes 0a001h - .lobytes 0a002h - .lobytes 0a003h - .lobytes 0a004h - .lobytes 0a005h - .lobytes 0a006h - .lobytes 0a007h - .lobytes 0a008h - .lobytes 0a009h - .lobytes 0a00ah - .lobytes 0a00bh - .lobytes 0a00ch - .lobytes 0a00dh - .lobytes 0a00eh - .lobytes 0a00fh - .lobytes 0afe1h - .lobytes 0afe2h - .lobytes 0afe3h - .lobytes 0afe4h - .lobytes 0afe5h - .lobytes 0afe6h - .lobytes 0afe7h - .lobytes 0afe8h - .lobytes 0afe9h - .lobytes 0afeah - .lobytes 0afebh - .lobytes 0afech - .lobytes 0afedh - .lobytes 0afeeh - .lobytes 0afefh - .lobytes 0aff0h - .lobytes 0aff1h - .lobytes 0aff2h - .lobytes 0aff3h - .lobytes 0aff4h - .lobytes 0aff5h - .lobytes 0aff6h - .lobytes 0aff7h - .lobytes 0aff8h - .lobytes 0aff9h - .lobytes 0affah - .lobytes 0affbh - .lobytes 0affch - .lobytes 0affdh - .lobytes 0affeh - .lobytes 0afffh - .lobytes 0b000h - .lobytes 0b001h - .lobytes 0b002h - .lobytes 0b003h - .lobytes 0b004h - .lobytes 0b005h - .lobytes 0b006h - .lobytes 0b007h - .lobytes 0b008h - .lobytes 0b009h - .lobytes 0b00ah - .lobytes 0b00bh - .lobytes 0b00ch - .lobytes 0b00dh - .lobytes 0b00eh - .lobytes 0b00fh - .lobytes 0bfe1h - .lobytes 0bfe2h - .lobytes 0bfe3h - .lobytes 0bfe4h - .lobytes 0bfe5h - .lobytes 0bfe6h - .lobytes 0bfe7h - .lobytes 0bfe8h - .lobytes 0bfe9h - .lobytes 0bfeah - .lobytes 0bfebh - .lobytes 0bfech - .lobytes 0bfedh - .lobytes 0bfeeh - .lobytes 0bfefh - .lobytes 0bff0h - .lobytes 0bff1h - .lobytes 0bff2h - .lobytes 0bff3h - .lobytes 0bff4h - .lobytes 0bff5h - .lobytes 0bff6h - .lobytes 0bff7h - .lobytes 0bff8h - .lobytes 0bff9h - .lobytes 0bffah - .lobytes 0bffbh - .lobytes 0bffch - .lobytes 0bffdh - .lobytes 0bffeh - .lobytes 0bfffh - .lobytes 0c000h - .lobytes 0c001h - .lobytes 0c002h - .lobytes 0c003h - .lobytes 0c004h - .lobytes 0c005h - .lobytes 0c006h - .lobytes 0c007h - .lobytes 0c008h - .lobytes 0c009h - .lobytes 0c00ah - .lobytes 0c00bh - .lobytes 0c00ch - .lobytes 0c00dh - .lobytes 0c00eh - .lobytes 0c00fh - .lobytes 0cfe1h - .lobytes 0cfe2h - .lobytes 0cfe3h - .lobytes 0cfe4h - .lobytes 0cfe5h - .lobytes 0cfe6h - .lobytes 0cfe7h - .lobytes 0cfe8h - .lobytes 0cfe9h - .lobytes 0cfeah - .lobytes 0cfebh - .lobytes 0cfech - .lobytes 0cfedh - .lobytes 0cfeeh - .lobytes 0cfefh - .lobytes 0cff0h - .lobytes 0cff1h - .lobytes 0cff2h - .lobytes 0cff3h - .lobytes 0cff4h - .lobytes 0cff5h - .lobytes 0cff6h - .lobytes 0cff7h - .lobytes 0cff8h - .lobytes 0cff9h - .lobytes 0cffah - .lobytes 0cffbh - .lobytes 0cffch - .lobytes 0cffdh - .lobytes 0cffeh - .lobytes 0cfffh - .lobytes 0d000h - .lobytes 0d001h - .lobytes 0d002h - .lobytes 0d003h - .lobytes 0d004h - .lobytes 0d005h - .lobytes 0d006h - .lobytes 0d007h - .lobytes 0d008h - .lobytes 0d009h - .lobytes 0d00ah - .lobytes 0d00bh - .lobytes 0d00ch - .lobytes 0d00dh - .lobytes 0d00eh - .lobytes 0d00fh - .lobytes 0dfe1h - .lobytes 0dfe2h - .lobytes 0dfe3h - .lobytes 0dfe4h - .lobytes 0dfe5h - .lobytes 0dfe6h - .lobytes 0dfe7h - .lobytes 0dfe8h - .lobytes 0dfe9h - .lobytes 0dfeah - .lobytes 0dfebh - .lobytes 0dfech - .lobytes 0dfedh - .lobytes 0dfeeh - .lobytes 0dfefh - .lobytes 0dff0h - .lobytes 0dff1h - .lobytes 0dff2h - .lobytes 0dff3h - .lobytes 0dff4h - .lobytes 0dff5h - .lobytes 0dff6h - .lobytes 0dff7h - .lobytes 0dff8h - .lobytes 0dff9h - .lobytes 0dffah - .lobytes 0dffbh - .lobytes 0dffch - .lobytes 0dffdh - .lobytes 0dffeh - .lobytes 0dfffh - .lobytes 0e000h - .lobytes 0e001h - .lobytes 0e002h - .lobytes 0e003h - .lobytes 0e004h - .lobytes 0e005h - .lobytes 0e006h - .lobytes 0e007h - .lobytes 0e008h - .lobytes 0e009h - .lobytes 0e00ah - .lobytes 0e00bh - .lobytes 0e00ch - .lobytes 0e00dh - .lobytes 0e00eh - .lobytes 0e00fh - .lobytes 0efe1h - .lobytes 0efe2h - .lobytes 0efe3h - .lobytes 0efe4h - .lobytes 0efe5h - .lobytes 0efe6h - .lobytes 0efe7h - .lobytes 0efe8h - .lobytes 0efe9h - .lobytes 0efeah - .lobytes 0efebh - .lobytes 0efech - .lobytes 0efedh - .lobytes 0efeeh - .lobytes 0efefh - .lobytes 0eff0h - .lobytes 0eff1h - .lobytes 0eff2h - .lobytes 0eff3h - .lobytes 0eff4h - .lobytes 0eff5h - .lobytes 0eff6h - .lobytes 0eff7h - .lobytes 0eff8h - .lobytes 0eff9h - .lobytes 0effah - .lobytes 0effbh - .lobytes 0effch - .lobytes 0effdh - .lobytes 0effeh - .lobytes 0efffh - .lobytes 0f000h - .lobytes 0f001h - .lobytes 0f002h - .lobytes 0f003h - .lobytes 0f004h - .lobytes 0f005h - .lobytes 0f006h - .lobytes 0f007h - .lobytes 0f008h - .lobytes 0f009h - .lobytes 0f00ah - .lobytes 0f00bh - .lobytes 0f00ch - .lobytes 0f00dh - .lobytes 0f00eh - .lobytes 0f00fh - .lobytes 0ffe1h - .lobytes 0ffe2h - .lobytes 0ffe3h - .lobytes 0ffe4h - .lobytes 0ffe5h - .lobytes 0ffe6h - .lobytes 0ffe7h - .lobytes 0ffe8h - .lobytes 0ffe9h - .lobytes 0ffeah - .lobytes 0ffebh - .lobytes 0ffech - .lobytes 0ffedh - .lobytes 0ffeeh - .lobytes 0ffefh - .lobytes 0fff0h - .lobytes 0fff1h - .lobytes 0fff2h - .lobytes 0fff3h - .lobytes 0fff4h - .lobytes 0fff5h - .lobytes 0fff6h - .lobytes 0fff7h - .lobytes 0fff8h - .lobytes 0fff9h - .lobytes 0fffah - .lobytes 0fffbh - .lobytes 0fffch - .lobytes 0fffdh - .lobytes 0fffeh - .lobytes 0ffffh + ; alternative hex values + .lobytes 0h + .lobytes 1h + .lobytes 2h + .lobytes 3h + .lobytes 4h + .lobytes 5h + .lobytes 6h + .lobytes 7h + .lobytes 8h + .lobytes 9h + .lobytes 0ah + .lobytes 0bh + .lobytes 0ch + .lobytes 0dh + .lobytes 0eh + .lobytes 0fh + .lobytes 10h + .lobytes 11h + .lobytes 12h + .lobytes 13h + .lobytes 70h + .lobytes 71h + .lobytes 72h + .lobytes 73h + .lobytes 74h + .lobytes 75h + .lobytes 76h + .lobytes 77h + .lobytes 78h + .lobytes 79h + .lobytes 7ah + .lobytes 7bh + .lobytes 7ch + .lobytes 7dh + .lobytes 7eh + .lobytes 7fh + .lobytes 80h + .lobytes 81h + .lobytes 82h + .lobytes 83h + .lobytes 84h + .lobytes 85h + .lobytes 86h + .lobytes 0f0h + .lobytes 0f1h + .lobytes 0f2h + .lobytes 0f3h + .lobytes 0f4h + .lobytes 0f5h + .lobytes 0f6h + .lobytes 0f7h + .lobytes 0f8h + .lobytes 0f9h + .lobytes 0fah + .lobytes 0fbh + .lobytes 0fch + .lobytes 0fdh + .lobytes 0feh + .lobytes 0ffh + .lobytes 100h + .lobytes 101h + .lobytes 102h + .lobytes 103h + .lobytes 0fd2h + .lobytes 0fd3h + .lobytes 0fd4h + .lobytes 0fd5h + .lobytes 0fd6h + .lobytes 0fd7h + .lobytes 0fd8h + .lobytes 0fd9h + .lobytes 0fdah + .lobytes 0fdbh + .lobytes 0fdch + .lobytes 0fddh + .lobytes 0fdeh + .lobytes 0fdfh + .lobytes 0fe0h + .lobytes 0fe1h + .lobytes 0fe2h + .lobytes 0fe3h + .lobytes 0fe4h + .lobytes 0fe5h + .lobytes 0fe6h + .lobytes 0fe7h + .lobytes 0fe8h + .lobytes 0fe9h + .lobytes 0feah + .lobytes 0febh + .lobytes 0fech + .lobytes 0fedh + .lobytes 0feeh + .lobytes 0fefh + .lobytes 0ff0h + .lobytes 0ff1h + .lobytes 0ff2h + .lobytes 0ff3h + .lobytes 0ff4h + .lobytes 0ff5h + .lobytes 0ff6h + .lobytes 0ff7h + .lobytes 0ff8h + .lobytes 0ff9h + .lobytes 0ffah + .lobytes 0ffbh + .lobytes 0ffch + .lobytes 0ffdh + .lobytes 0ffeh + .lobytes 0fffh + .lobytes 1000h + .lobytes 1001h + .lobytes 1002h + .lobytes 1003h + .lobytes 1004h + .lobytes 1005h + .lobytes 1006h + .lobytes 1007h + .lobytes 1008h + .lobytes 7ff0h + .lobytes 7ff1h + .lobytes 7ff2h + .lobytes 7ff3h + .lobytes 7ff4h + .lobytes 7ff5h + .lobytes 7ff6h + .lobytes 7ff7h + .lobytes 7ff8h + .lobytes 7ff9h + .lobytes 7ffah + .lobytes 7ffbh + .lobytes 7ffch + .lobytes 7ffdh + .lobytes 7ffeh + .lobytes 7fffh + .lobytes 8000h + .lobytes 8001h + .lobytes 8002h + .lobytes 8003h + .lobytes 8004h + .lobytes 8005h + .lobytes 8006h + .lobytes 8007h + .lobytes 8008h + .lobytes 8009h + .lobytes 800ah + .lobytes 800bh + .lobytes 9fe1h + .lobytes 9fe2h + .lobytes 9fe3h + .lobytes 9fe4h + .lobytes 9fe5h + .lobytes 9fe6h + .lobytes 9fe7h + .lobytes 9fe8h + .lobytes 9fe9h + .lobytes 9feah + .lobytes 9febh + .lobytes 9fech + .lobytes 9fedh + .lobytes 9feeh + .lobytes 9fefh + .lobytes 9ff0h + .lobytes 9ff1h + .lobytes 9ff2h + .lobytes 9ff3h + .lobytes 9ff4h + .lobytes 9ff5h + .lobytes 9ff6h + .lobytes 9ff7h + .lobytes 9ff8h + .lobytes 9ff9h + .lobytes 9ffah + .lobytes 9ffbh + .lobytes 9ffch + .lobytes 9ffdh + .lobytes 9ffeh + .lobytes 9fffh + .lobytes 0a000h + .lobytes 0a001h + .lobytes 0a002h + .lobytes 0a003h + .lobytes 0a004h + .lobytes 0a005h + .lobytes 0a006h + .lobytes 0a007h + .lobytes 0a008h + .lobytes 0a009h + .lobytes 0a00ah + .lobytes 0a00bh + .lobytes 0a00ch + .lobytes 0a00dh + .lobytes 0a00eh + .lobytes 0a00fh + .lobytes 0afe1h + .lobytes 0afe2h + .lobytes 0afe3h + .lobytes 0afe4h + .lobytes 0afe5h + .lobytes 0afe6h + .lobytes 0afe7h + .lobytes 0afe8h + .lobytes 0afe9h + .lobytes 0afeah + .lobytes 0afebh + .lobytes 0afech + .lobytes 0afedh + .lobytes 0afeeh + .lobytes 0afefh + .lobytes 0aff0h + .lobytes 0aff1h + .lobytes 0aff2h + .lobytes 0aff3h + .lobytes 0aff4h + .lobytes 0aff5h + .lobytes 0aff6h + .lobytes 0aff7h + .lobytes 0aff8h + .lobytes 0aff9h + .lobytes 0affah + .lobytes 0affbh + .lobytes 0affch + .lobytes 0affdh + .lobytes 0affeh + .lobytes 0afffh + .lobytes 0b000h + .lobytes 0b001h + .lobytes 0b002h + .lobytes 0b003h + .lobytes 0b004h + .lobytes 0b005h + .lobytes 0b006h + .lobytes 0b007h + .lobytes 0b008h + .lobytes 0b009h + .lobytes 0b00ah + .lobytes 0b00bh + .lobytes 0b00ch + .lobytes 0b00dh + .lobytes 0b00eh + .lobytes 0b00fh + .lobytes 0bfe1h + .lobytes 0bfe2h + .lobytes 0bfe3h + .lobytes 0bfe4h + .lobytes 0bfe5h + .lobytes 0bfe6h + .lobytes 0bfe7h + .lobytes 0bfe8h + .lobytes 0bfe9h + .lobytes 0bfeah + .lobytes 0bfebh + .lobytes 0bfech + .lobytes 0bfedh + .lobytes 0bfeeh + .lobytes 0bfefh + .lobytes 0bff0h + .lobytes 0bff1h + .lobytes 0bff2h + .lobytes 0bff3h + .lobytes 0bff4h + .lobytes 0bff5h + .lobytes 0bff6h + .lobytes 0bff7h + .lobytes 0bff8h + .lobytes 0bff9h + .lobytes 0bffah + .lobytes 0bffbh + .lobytes 0bffch + .lobytes 0bffdh + .lobytes 0bffeh + .lobytes 0bfffh + .lobytes 0c000h + .lobytes 0c001h + .lobytes 0c002h + .lobytes 0c003h + .lobytes 0c004h + .lobytes 0c005h + .lobytes 0c006h + .lobytes 0c007h + .lobytes 0c008h + .lobytes 0c009h + .lobytes 0c00ah + .lobytes 0c00bh + .lobytes 0c00ch + .lobytes 0c00dh + .lobytes 0c00eh + .lobytes 0c00fh + .lobytes 0cfe1h + .lobytes 0cfe2h + .lobytes 0cfe3h + .lobytes 0cfe4h + .lobytes 0cfe5h + .lobytes 0cfe6h + .lobytes 0cfe7h + .lobytes 0cfe8h + .lobytes 0cfe9h + .lobytes 0cfeah + .lobytes 0cfebh + .lobytes 0cfech + .lobytes 0cfedh + .lobytes 0cfeeh + .lobytes 0cfefh + .lobytes 0cff0h + .lobytes 0cff1h + .lobytes 0cff2h + .lobytes 0cff3h + .lobytes 0cff4h + .lobytes 0cff5h + .lobytes 0cff6h + .lobytes 0cff7h + .lobytes 0cff8h + .lobytes 0cff9h + .lobytes 0cffah + .lobytes 0cffbh + .lobytes 0cffch + .lobytes 0cffdh + .lobytes 0cffeh + .lobytes 0cfffh + .lobytes 0d000h + .lobytes 0d001h + .lobytes 0d002h + .lobytes 0d003h + .lobytes 0d004h + .lobytes 0d005h + .lobytes 0d006h + .lobytes 0d007h + .lobytes 0d008h + .lobytes 0d009h + .lobytes 0d00ah + .lobytes 0d00bh + .lobytes 0d00ch + .lobytes 0d00dh + .lobytes 0d00eh + .lobytes 0d00fh + .lobytes 0dfe1h + .lobytes 0dfe2h + .lobytes 0dfe3h + .lobytes 0dfe4h + .lobytes 0dfe5h + .lobytes 0dfe6h + .lobytes 0dfe7h + .lobytes 0dfe8h + .lobytes 0dfe9h + .lobytes 0dfeah + .lobytes 0dfebh + .lobytes 0dfech + .lobytes 0dfedh + .lobytes 0dfeeh + .lobytes 0dfefh + .lobytes 0dff0h + .lobytes 0dff1h + .lobytes 0dff2h + .lobytes 0dff3h + .lobytes 0dff4h + .lobytes 0dff5h + .lobytes 0dff6h + .lobytes 0dff7h + .lobytes 0dff8h + .lobytes 0dff9h + .lobytes 0dffah + .lobytes 0dffbh + .lobytes 0dffch + .lobytes 0dffdh + .lobytes 0dffeh + .lobytes 0dfffh + .lobytes 0e000h + .lobytes 0e001h + .lobytes 0e002h + .lobytes 0e003h + .lobytes 0e004h + .lobytes 0e005h + .lobytes 0e006h + .lobytes 0e007h + .lobytes 0e008h + .lobytes 0e009h + .lobytes 0e00ah + .lobytes 0e00bh + .lobytes 0e00ch + .lobytes 0e00dh + .lobytes 0e00eh + .lobytes 0e00fh + .lobytes 0efe1h + .lobytes 0efe2h + .lobytes 0efe3h + .lobytes 0efe4h + .lobytes 0efe5h + .lobytes 0efe6h + .lobytes 0efe7h + .lobytes 0efe8h + .lobytes 0efe9h + .lobytes 0efeah + .lobytes 0efebh + .lobytes 0efech + .lobytes 0efedh + .lobytes 0efeeh + .lobytes 0efefh + .lobytes 0eff0h + .lobytes 0eff1h + .lobytes 0eff2h + .lobytes 0eff3h + .lobytes 0eff4h + .lobytes 0eff5h + .lobytes 0eff6h + .lobytes 0eff7h + .lobytes 0eff8h + .lobytes 0eff9h + .lobytes 0effah + .lobytes 0effbh + .lobytes 0effch + .lobytes 0effdh + .lobytes 0effeh + .lobytes 0efffh + .lobytes 0f000h + .lobytes 0f001h + .lobytes 0f002h + .lobytes 0f003h + .lobytes 0f004h + .lobytes 0f005h + .lobytes 0f006h + .lobytes 0f007h + .lobytes 0f008h + .lobytes 0f009h + .lobytes 0f00ah + .lobytes 0f00bh + .lobytes 0f00ch + .lobytes 0f00dh + .lobytes 0f00eh + .lobytes 0f00fh + .lobytes 0ffe1h + .lobytes 0ffe2h + .lobytes 0ffe3h + .lobytes 0ffe4h + .lobytes 0ffe5h + .lobytes 0ffe6h + .lobytes 0ffe7h + .lobytes 0ffe8h + .lobytes 0ffe9h + .lobytes 0ffeah + .lobytes 0ffebh + .lobytes 0ffech + .lobytes 0ffedh + .lobytes 0ffeeh + .lobytes 0ffefh + .lobytes 0fff0h + .lobytes 0fff1h + .lobytes 0fff2h + .lobytes 0fff3h + .lobytes 0fff4h + .lobytes 0fff5h + .lobytes 0fff6h + .lobytes 0fff7h + .lobytes 0fff8h + .lobytes 0fff9h + .lobytes 0fffah + .lobytes 0fffbh + .lobytes 0fffch + .lobytes 0fffdh + .lobytes 0fffeh + .lobytes 0ffffh - ; alternative hex values, uppercase - .lobytes 0h - .lobytes 1h - .lobytes 2h - .lobytes 3h - .lobytes 4h - .lobytes 5h - .lobytes 6h - .lobytes 7h - .lobytes 8h - .lobytes 9h - .lobytes 0Ah - .lobytes 0Bh - .lobytes 0Ch - .lobytes 0Dh - .lobytes 0Eh - .lobytes 0Fh - .lobytes 10h - .lobytes 11h - .lobytes 12h - .lobytes 13h - .lobytes 70h - .lobytes 71h - .lobytes 72h - .lobytes 73h - .lobytes 74h - .lobytes 75h - .lobytes 76h - .lobytes 77h - .lobytes 78h - .lobytes 79h - .lobytes 7Ah - .lobytes 7Bh - .lobytes 7Ch - .lobytes 7Dh - .lobytes 7Eh - .lobytes 7Fh - .lobytes 80h - .lobytes 81h - .lobytes 82h - .lobytes 83h - .lobytes 84h - .lobytes 85h - .lobytes 86h - .lobytes 0F0h - .lobytes 0F1h - .lobytes 0F2h - .lobytes 0F3h - .lobytes 0F4h - .lobytes 0F5h - .lobytes 0F6h - .lobytes 0F7h - .lobytes 0F8h - .lobytes 0F9h - .lobytes 0FAh - .lobytes 0FBh - .lobytes 0FCh - .lobytes 0FDh - .lobytes 0FEh - .lobytes 0FFh - .lobytes 100h - .lobytes 101h - .lobytes 102h - .lobytes 103h - .lobytes 0FD2h - .lobytes 0FD3h - .lobytes 0FD4h - .lobytes 0FD5h - .lobytes 0FD6h - .lobytes 0FD7h - .lobytes 0FD8h - .lobytes 0FD9h - .lobytes 0FDAh - .lobytes 0FDBh - .lobytes 0FDCh - .lobytes 0FDDh - .lobytes 0FDEh - .lobytes 0FDFh - .lobytes 0FE0h - .lobytes 0FE1h - .lobytes 0FE2h - .lobytes 0FE3h - .lobytes 0FE4h - .lobytes 0FE5h - .lobytes 0FE6h - .lobytes 0FE7h - .lobytes 0FE8h - .lobytes 0FE9h - .lobytes 0FEAh - .lobytes 0FEBh - .lobytes 0FECh - .lobytes 0FEDh - .lobytes 0FEEh - .lobytes 0FEFh - .lobytes 0FF0h - .lobytes 0FF1h - .lobytes 0FF2h - .lobytes 0FF3h - .lobytes 0FF4h - .lobytes 0FF5h - .lobytes 0FF6h - .lobytes 0FF7h - .lobytes 0FF8h - .lobytes 0FF9h - .lobytes 0FFAh - .lobytes 0FFBh - .lobytes 0FFCh - .lobytes 0FFDh - .lobytes 0FFEh - .lobytes 0FFFh - .lobytes 1000h - .lobytes 1001h - .lobytes 1002h - .lobytes 1003h - .lobytes 1004h - .lobytes 1005h - .lobytes 1006h - .lobytes 1007h - .lobytes 1008h - .lobytes 7FF0h - .lobytes 7FF1h - .lobytes 7FF2h - .lobytes 7FF3h - .lobytes 7FF4h - .lobytes 7FF5h - .lobytes 7FF6h - .lobytes 7FF7h - .lobytes 7FF8h - .lobytes 7FF9h - .lobytes 7FFAh - .lobytes 7FFBh - .lobytes 7FFCh - .lobytes 7FFDh - .lobytes 7FFEh - .lobytes 7FFFh - .lobytes 8000h - .lobytes 8001h - .lobytes 8002h - .lobytes 8003h - .lobytes 8004h - .lobytes 8005h - .lobytes 8006h - .lobytes 8007h - .lobytes 8008h - .lobytes 8009h - .lobytes 800Ah - .lobytes 800Bh - .lobytes 9FE1h - .lobytes 9FE2h - .lobytes 9FE3h - .lobytes 9FE4h - .lobytes 9FE5h - .lobytes 9FE6h - .lobytes 9FE7h - .lobytes 9FE8h - .lobytes 9FE9h - .lobytes 9FEAh - .lobytes 9FEBh - .lobytes 9FECh - .lobytes 9FEDh - .lobytes 9FEEh - .lobytes 9FEFh - .lobytes 9FF0h - .lobytes 9FF1h - .lobytes 9FF2h - .lobytes 9FF3h - .lobytes 9FF4h - .lobytes 9FF5h - .lobytes 9FF6h - .lobytes 9FF7h - .lobytes 9FF8h - .lobytes 9FF9h - .lobytes 9FFAh - .lobytes 9FFBh - .lobytes 9FFCh - .lobytes 9FFDh - .lobytes 9FFEh - .lobytes 9FFFh - .lobytes 0A000h - .lobytes 0A001h - .lobytes 0A002h - .lobytes 0A003h - .lobytes 0A004h - .lobytes 0A005h - .lobytes 0A006h - .lobytes 0A007h - .lobytes 0A008h - .lobytes 0A009h - .lobytes 0A00Ah - .lobytes 0A00Bh - .lobytes 0A00Ch - .lobytes 0A00Dh - .lobytes 0A00Eh - .lobytes 0A00Fh - .lobytes 0AFE1h - .lobytes 0AFE2h - .lobytes 0AFE3h - .lobytes 0AFE4h - .lobytes 0AFE5h - .lobytes 0AFE6h - .lobytes 0AFE7h - .lobytes 0AFE8h - .lobytes 0AFE9h - .lobytes 0AFEAh - .lobytes 0AFEBh - .lobytes 0AFECh - .lobytes 0AFEDh - .lobytes 0AFEEh - .lobytes 0AFEFh - .lobytes 0AFF0h - .lobytes 0AFF1h - .lobytes 0AFF2h - .lobytes 0AFF3h - .lobytes 0AFF4h - .lobytes 0AFF5h - .lobytes 0AFF6h - .lobytes 0AFF7h - .lobytes 0AFF8h - .lobytes 0AFF9h - .lobytes 0AFFAh - .lobytes 0AFFBh - .lobytes 0AFFCh - .lobytes 0AFFDh - .lobytes 0AFFEh - .lobytes 0AFFFh - .lobytes 0B000h - .lobytes 0B001h - .lobytes 0B002h - .lobytes 0B003h - .lobytes 0B004h - .lobytes 0B005h - .lobytes 0B006h - .lobytes 0B007h - .lobytes 0B008h - .lobytes 0B009h - .lobytes 0B00Ah - .lobytes 0B00Bh - .lobytes 0B00Ch - .lobytes 0B00Dh - .lobytes 0B00Eh - .lobytes 0B00Fh - .lobytes 0BFE1h - .lobytes 0BFE2h - .lobytes 0BFE3h - .lobytes 0BFE4h - .lobytes 0BFE5h - .lobytes 0BFE6h - .lobytes 0BFE7h - .lobytes 0BFE8h - .lobytes 0BFE9h - .lobytes 0BFEAh - .lobytes 0BFEBh - .lobytes 0BFECh - .lobytes 0BFEDh - .lobytes 0BFEEh - .lobytes 0BFEFh - .lobytes 0BFF0h - .lobytes 0BFF1h - .lobytes 0BFF2h - .lobytes 0BFF3h - .lobytes 0BFF4h - .lobytes 0BFF5h - .lobytes 0BFF6h - .lobytes 0BFF7h - .lobytes 0BFF8h - .lobytes 0BFF9h - .lobytes 0BFFAh - .lobytes 0BFFBh - .lobytes 0BFFCh - .lobytes 0BFFDh - .lobytes 0BFFEh - .lobytes 0BFFFh - .lobytes 0C000h - .lobytes 0C001h - .lobytes 0C002h - .lobytes 0C003h - .lobytes 0C004h - .lobytes 0C005h - .lobytes 0C006h - .lobytes 0C007h - .lobytes 0C008h - .lobytes 0C009h - .lobytes 0C00Ah - .lobytes 0C00Bh - .lobytes 0C00Ch - .lobytes 0C00Dh - .lobytes 0C00Eh - .lobytes 0C00Fh - .lobytes 0CFE1h - .lobytes 0CFE2h - .lobytes 0CFE3h - .lobytes 0CFE4h - .lobytes 0CFE5h - .lobytes 0CFE6h - .lobytes 0CFE7h - .lobytes 0CFE8h - .lobytes 0CFE9h - .lobytes 0CFEAh - .lobytes 0CFEBh - .lobytes 0CFECh - .lobytes 0CFEDh - .lobytes 0CFEEh - .lobytes 0CFEFh - .lobytes 0CFF0h - .lobytes 0CFF1h - .lobytes 0CFF2h - .lobytes 0CFF3h - .lobytes 0CFF4h - .lobytes 0CFF5h - .lobytes 0CFF6h - .lobytes 0CFF7h - .lobytes 0CFF8h - .lobytes 0CFF9h - .lobytes 0CFFAh - .lobytes 0CFFBh - .lobytes 0CFFCh - .lobytes 0CFFDh - .lobytes 0CFFEh - .lobytes 0CFFFh - .lobytes 0D000h - .lobytes 0D001h - .lobytes 0D002h - .lobytes 0D003h - .lobytes 0D004h - .lobytes 0D005h - .lobytes 0D006h - .lobytes 0D007h - .lobytes 0D008h - .lobytes 0D009h - .lobytes 0D00Ah - .lobytes 0D00Bh - .lobytes 0D00Ch - .lobytes 0D00Dh - .lobytes 0D00Eh - .lobytes 0D00Fh - .lobytes 0DFE1h - .lobytes 0DFE2h - .lobytes 0DFE3h - .lobytes 0DFE4h - .lobytes 0DFE5h - .lobytes 0DFE6h - .lobytes 0DFE7h - .lobytes 0DFE8h - .lobytes 0DFE9h - .lobytes 0DFEAh - .lobytes 0DFEBh - .lobytes 0DFECh - .lobytes 0DFEDh - .lobytes 0DFEEh - .lobytes 0DFEFh - .lobytes 0DFF0h - .lobytes 0DFF1h - .lobytes 0DFF2h - .lobytes 0DFF3h - .lobytes 0DFF4h - .lobytes 0DFF5h - .lobytes 0DFF6h - .lobytes 0DFF7h - .lobytes 0DFF8h - .lobytes 0DFF9h - .lobytes 0DFFAh - .lobytes 0DFFBh - .lobytes 0DFFCh - .lobytes 0DFFDh - .lobytes 0DFFEh - .lobytes 0DFFFh - .lobytes 0E000h - .lobytes 0E001h - .lobytes 0E002h - .lobytes 0E003h - .lobytes 0E004h - .lobytes 0E005h - .lobytes 0E006h - .lobytes 0E007h - .lobytes 0E008h - .lobytes 0E009h - .lobytes 0E00Ah - .lobytes 0E00Bh - .lobytes 0E00Ch - .lobytes 0E00Dh - .lobytes 0E00Eh - .lobytes 0E00Fh - .lobytes 0EFE1h - .lobytes 0EFE2h - .lobytes 0EFE3h - .lobytes 0EFE4h - .lobytes 0EFE5h - .lobytes 0EFE6h - .lobytes 0EFE7h - .lobytes 0EFE8h - .lobytes 0EFE9h - .lobytes 0EFEAh - .lobytes 0EFEBh - .lobytes 0EFECh - .lobytes 0EFEDh - .lobytes 0EFEEh - .lobytes 0EFEFh - .lobytes 0EFF0h - .lobytes 0EFF1h - .lobytes 0EFF2h - .lobytes 0EFF3h - .lobytes 0EFF4h - .lobytes 0EFF5h - .lobytes 0EFF6h - .lobytes 0EFF7h - .lobytes 0EFF8h - .lobytes 0EFF9h - .lobytes 0EFFAh - .lobytes 0EFFBh - .lobytes 0EFFCh - .lobytes 0EFFDh - .lobytes 0EFFEh - .lobytes 0EFFFh - .lobytes 0F000h - .lobytes 0F001h - .lobytes 0F002h - .lobytes 0F003h - .lobytes 0F004h - .lobytes 0F005h - .lobytes 0F006h - .lobytes 0F007h - .lobytes 0F008h - .lobytes 0F009h - .lobytes 0F00Ah - .lobytes 0F00Bh - .lobytes 0F00Ch - .lobytes 0F00Dh - .lobytes 0F00Eh - .lobytes 0F00Fh - .lobytes 0FFE1h - .lobytes 0FFE2h - .lobytes 0FFE3h - .lobytes 0FFE4h - .lobytes 0FFE5h - .lobytes 0FFE6h - .lobytes 0FFE7h - .lobytes 0FFE8h - .lobytes 0FFE9h - .lobytes 0FFEAh - .lobytes 0FFEBh - .lobytes 0FFECh - .lobytes 0FFEDh - .lobytes 0FFEEh - .lobytes 0FFEFh - .lobytes 0FFF0h - .lobytes 0FFF1h - .lobytes 0FFF2h - .lobytes 0FFF3h - .lobytes 0FFF4h - .lobytes 0FFF5h - .lobytes 0FFF6h - .lobytes 0FFF7h - .lobytes 0FFF8h - .lobytes 0FFF9h - .lobytes 0FFFAh - .lobytes 0FFFBh - .lobytes 0FFFCh - .lobytes 0FFFDh - .lobytes 0FFFEh - .lobytes 0FFFFh + ; alternative hex values, uppercase + .lobytes 0h + .lobytes 1h + .lobytes 2h + .lobytes 3h + .lobytes 4h + .lobytes 5h + .lobytes 6h + .lobytes 7h + .lobytes 8h + .lobytes 9h + .lobytes 0Ah + .lobytes 0Bh + .lobytes 0Ch + .lobytes 0Dh + .lobytes 0Eh + .lobytes 0Fh + .lobytes 10h + .lobytes 11h + .lobytes 12h + .lobytes 13h + .lobytes 70h + .lobytes 71h + .lobytes 72h + .lobytes 73h + .lobytes 74h + .lobytes 75h + .lobytes 76h + .lobytes 77h + .lobytes 78h + .lobytes 79h + .lobytes 7Ah + .lobytes 7Bh + .lobytes 7Ch + .lobytes 7Dh + .lobytes 7Eh + .lobytes 7Fh + .lobytes 80h + .lobytes 81h + .lobytes 82h + .lobytes 83h + .lobytes 84h + .lobytes 85h + .lobytes 86h + .lobytes 0F0h + .lobytes 0F1h + .lobytes 0F2h + .lobytes 0F3h + .lobytes 0F4h + .lobytes 0F5h + .lobytes 0F6h + .lobytes 0F7h + .lobytes 0F8h + .lobytes 0F9h + .lobytes 0FAh + .lobytes 0FBh + .lobytes 0FCh + .lobytes 0FDh + .lobytes 0FEh + .lobytes 0FFh + .lobytes 100h + .lobytes 101h + .lobytes 102h + .lobytes 103h + .lobytes 0FD2h + .lobytes 0FD3h + .lobytes 0FD4h + .lobytes 0FD5h + .lobytes 0FD6h + .lobytes 0FD7h + .lobytes 0FD8h + .lobytes 0FD9h + .lobytes 0FDAh + .lobytes 0FDBh + .lobytes 0FDCh + .lobytes 0FDDh + .lobytes 0FDEh + .lobytes 0FDFh + .lobytes 0FE0h + .lobytes 0FE1h + .lobytes 0FE2h + .lobytes 0FE3h + .lobytes 0FE4h + .lobytes 0FE5h + .lobytes 0FE6h + .lobytes 0FE7h + .lobytes 0FE8h + .lobytes 0FE9h + .lobytes 0FEAh + .lobytes 0FEBh + .lobytes 0FECh + .lobytes 0FEDh + .lobytes 0FEEh + .lobytes 0FEFh + .lobytes 0FF0h + .lobytes 0FF1h + .lobytes 0FF2h + .lobytes 0FF3h + .lobytes 0FF4h + .lobytes 0FF5h + .lobytes 0FF6h + .lobytes 0FF7h + .lobytes 0FF8h + .lobytes 0FF9h + .lobytes 0FFAh + .lobytes 0FFBh + .lobytes 0FFCh + .lobytes 0FFDh + .lobytes 0FFEh + .lobytes 0FFFh + .lobytes 1000h + .lobytes 1001h + .lobytes 1002h + .lobytes 1003h + .lobytes 1004h + .lobytes 1005h + .lobytes 1006h + .lobytes 1007h + .lobytes 1008h + .lobytes 7FF0h + .lobytes 7FF1h + .lobytes 7FF2h + .lobytes 7FF3h + .lobytes 7FF4h + .lobytes 7FF5h + .lobytes 7FF6h + .lobytes 7FF7h + .lobytes 7FF8h + .lobytes 7FF9h + .lobytes 7FFAh + .lobytes 7FFBh + .lobytes 7FFCh + .lobytes 7FFDh + .lobytes 7FFEh + .lobytes 7FFFh + .lobytes 8000h + .lobytes 8001h + .lobytes 8002h + .lobytes 8003h + .lobytes 8004h + .lobytes 8005h + .lobytes 8006h + .lobytes 8007h + .lobytes 8008h + .lobytes 8009h + .lobytes 800Ah + .lobytes 800Bh + .lobytes 9FE1h + .lobytes 9FE2h + .lobytes 9FE3h + .lobytes 9FE4h + .lobytes 9FE5h + .lobytes 9FE6h + .lobytes 9FE7h + .lobytes 9FE8h + .lobytes 9FE9h + .lobytes 9FEAh + .lobytes 9FEBh + .lobytes 9FECh + .lobytes 9FEDh + .lobytes 9FEEh + .lobytes 9FEFh + .lobytes 9FF0h + .lobytes 9FF1h + .lobytes 9FF2h + .lobytes 9FF3h + .lobytes 9FF4h + .lobytes 9FF5h + .lobytes 9FF6h + .lobytes 9FF7h + .lobytes 9FF8h + .lobytes 9FF9h + .lobytes 9FFAh + .lobytes 9FFBh + .lobytes 9FFCh + .lobytes 9FFDh + .lobytes 9FFEh + .lobytes 9FFFh + .lobytes 0A000h + .lobytes 0A001h + .lobytes 0A002h + .lobytes 0A003h + .lobytes 0A004h + .lobytes 0A005h + .lobytes 0A006h + .lobytes 0A007h + .lobytes 0A008h + .lobytes 0A009h + .lobytes 0A00Ah + .lobytes 0A00Bh + .lobytes 0A00Ch + .lobytes 0A00Dh + .lobytes 0A00Eh + .lobytes 0A00Fh + .lobytes 0AFE1h + .lobytes 0AFE2h + .lobytes 0AFE3h + .lobytes 0AFE4h + .lobytes 0AFE5h + .lobytes 0AFE6h + .lobytes 0AFE7h + .lobytes 0AFE8h + .lobytes 0AFE9h + .lobytes 0AFEAh + .lobytes 0AFEBh + .lobytes 0AFECh + .lobytes 0AFEDh + .lobytes 0AFEEh + .lobytes 0AFEFh + .lobytes 0AFF0h + .lobytes 0AFF1h + .lobytes 0AFF2h + .lobytes 0AFF3h + .lobytes 0AFF4h + .lobytes 0AFF5h + .lobytes 0AFF6h + .lobytes 0AFF7h + .lobytes 0AFF8h + .lobytes 0AFF9h + .lobytes 0AFFAh + .lobytes 0AFFBh + .lobytes 0AFFCh + .lobytes 0AFFDh + .lobytes 0AFFEh + .lobytes 0AFFFh + .lobytes 0B000h + .lobytes 0B001h + .lobytes 0B002h + .lobytes 0B003h + .lobytes 0B004h + .lobytes 0B005h + .lobytes 0B006h + .lobytes 0B007h + .lobytes 0B008h + .lobytes 0B009h + .lobytes 0B00Ah + .lobytes 0B00Bh + .lobytes 0B00Ch + .lobytes 0B00Dh + .lobytes 0B00Eh + .lobytes 0B00Fh + .lobytes 0BFE1h + .lobytes 0BFE2h + .lobytes 0BFE3h + .lobytes 0BFE4h + .lobytes 0BFE5h + .lobytes 0BFE6h + .lobytes 0BFE7h + .lobytes 0BFE8h + .lobytes 0BFE9h + .lobytes 0BFEAh + .lobytes 0BFEBh + .lobytes 0BFECh + .lobytes 0BFEDh + .lobytes 0BFEEh + .lobytes 0BFEFh + .lobytes 0BFF0h + .lobytes 0BFF1h + .lobytes 0BFF2h + .lobytes 0BFF3h + .lobytes 0BFF4h + .lobytes 0BFF5h + .lobytes 0BFF6h + .lobytes 0BFF7h + .lobytes 0BFF8h + .lobytes 0BFF9h + .lobytes 0BFFAh + .lobytes 0BFFBh + .lobytes 0BFFCh + .lobytes 0BFFDh + .lobytes 0BFFEh + .lobytes 0BFFFh + .lobytes 0C000h + .lobytes 0C001h + .lobytes 0C002h + .lobytes 0C003h + .lobytes 0C004h + .lobytes 0C005h + .lobytes 0C006h + .lobytes 0C007h + .lobytes 0C008h + .lobytes 0C009h + .lobytes 0C00Ah + .lobytes 0C00Bh + .lobytes 0C00Ch + .lobytes 0C00Dh + .lobytes 0C00Eh + .lobytes 0C00Fh + .lobytes 0CFE1h + .lobytes 0CFE2h + .lobytes 0CFE3h + .lobytes 0CFE4h + .lobytes 0CFE5h + .lobytes 0CFE6h + .lobytes 0CFE7h + .lobytes 0CFE8h + .lobytes 0CFE9h + .lobytes 0CFEAh + .lobytes 0CFEBh + .lobytes 0CFECh + .lobytes 0CFEDh + .lobytes 0CFEEh + .lobytes 0CFEFh + .lobytes 0CFF0h + .lobytes 0CFF1h + .lobytes 0CFF2h + .lobytes 0CFF3h + .lobytes 0CFF4h + .lobytes 0CFF5h + .lobytes 0CFF6h + .lobytes 0CFF7h + .lobytes 0CFF8h + .lobytes 0CFF9h + .lobytes 0CFFAh + .lobytes 0CFFBh + .lobytes 0CFFCh + .lobytes 0CFFDh + .lobytes 0CFFEh + .lobytes 0CFFFh + .lobytes 0D000h + .lobytes 0D001h + .lobytes 0D002h + .lobytes 0D003h + .lobytes 0D004h + .lobytes 0D005h + .lobytes 0D006h + .lobytes 0D007h + .lobytes 0D008h + .lobytes 0D009h + .lobytes 0D00Ah + .lobytes 0D00Bh + .lobytes 0D00Ch + .lobytes 0D00Dh + .lobytes 0D00Eh + .lobytes 0D00Fh + .lobytes 0DFE1h + .lobytes 0DFE2h + .lobytes 0DFE3h + .lobytes 0DFE4h + .lobytes 0DFE5h + .lobytes 0DFE6h + .lobytes 0DFE7h + .lobytes 0DFE8h + .lobytes 0DFE9h + .lobytes 0DFEAh + .lobytes 0DFEBh + .lobytes 0DFECh + .lobytes 0DFEDh + .lobytes 0DFEEh + .lobytes 0DFEFh + .lobytes 0DFF0h + .lobytes 0DFF1h + .lobytes 0DFF2h + .lobytes 0DFF3h + .lobytes 0DFF4h + .lobytes 0DFF5h + .lobytes 0DFF6h + .lobytes 0DFF7h + .lobytes 0DFF8h + .lobytes 0DFF9h + .lobytes 0DFFAh + .lobytes 0DFFBh + .lobytes 0DFFCh + .lobytes 0DFFDh + .lobytes 0DFFEh + .lobytes 0DFFFh + .lobytes 0E000h + .lobytes 0E001h + .lobytes 0E002h + .lobytes 0E003h + .lobytes 0E004h + .lobytes 0E005h + .lobytes 0E006h + .lobytes 0E007h + .lobytes 0E008h + .lobytes 0E009h + .lobytes 0E00Ah + .lobytes 0E00Bh + .lobytes 0E00Ch + .lobytes 0E00Dh + .lobytes 0E00Eh + .lobytes 0E00Fh + .lobytes 0EFE1h + .lobytes 0EFE2h + .lobytes 0EFE3h + .lobytes 0EFE4h + .lobytes 0EFE5h + .lobytes 0EFE6h + .lobytes 0EFE7h + .lobytes 0EFE8h + .lobytes 0EFE9h + .lobytes 0EFEAh + .lobytes 0EFEBh + .lobytes 0EFECh + .lobytes 0EFEDh + .lobytes 0EFEEh + .lobytes 0EFEFh + .lobytes 0EFF0h + .lobytes 0EFF1h + .lobytes 0EFF2h + .lobytes 0EFF3h + .lobytes 0EFF4h + .lobytes 0EFF5h + .lobytes 0EFF6h + .lobytes 0EFF7h + .lobytes 0EFF8h + .lobytes 0EFF9h + .lobytes 0EFFAh + .lobytes 0EFFBh + .lobytes 0EFFCh + .lobytes 0EFFDh + .lobytes 0EFFEh + .lobytes 0EFFFh + .lobytes 0F000h + .lobytes 0F001h + .lobytes 0F002h + .lobytes 0F003h + .lobytes 0F004h + .lobytes 0F005h + .lobytes 0F006h + .lobytes 0F007h + .lobytes 0F008h + .lobytes 0F009h + .lobytes 0F00Ah + .lobytes 0F00Bh + .lobytes 0F00Ch + .lobytes 0F00Dh + .lobytes 0F00Eh + .lobytes 0F00Fh + .lobytes 0FFE1h + .lobytes 0FFE2h + .lobytes 0FFE3h + .lobytes 0FFE4h + .lobytes 0FFE5h + .lobytes 0FFE6h + .lobytes 0FFE7h + .lobytes 0FFE8h + .lobytes 0FFE9h + .lobytes 0FFEAh + .lobytes 0FFEBh + .lobytes 0FFECh + .lobytes 0FFEDh + .lobytes 0FFEEh + .lobytes 0FFEFh + .lobytes 0FFF0h + .lobytes 0FFF1h + .lobytes 0FFF2h + .lobytes 0FFF3h + .lobytes 0FFF4h + .lobytes 0FFF5h + .lobytes 0FFF6h + .lobytes 0FFF7h + .lobytes 0FFF8h + .lobytes 0FFF9h + .lobytes 0FFFAh + .lobytes 0FFFBh + .lobytes 0FFFCh + .lobytes 0FFFDh + .lobytes 0FFFEh + .lobytes 0FFFFh - ; alternative 4-digit hex values - .lobytes 0000h - .lobytes 0001h - .lobytes 0002h - .lobytes 0003h - .lobytes 0004h - .lobytes 0005h - .lobytes 0006h - .lobytes 0007h - .lobytes 0008h - .lobytes 0009h - .lobytes 000ah - .lobytes 000bh - .lobytes 000ch - .lobytes 000dh - .lobytes 000eh - .lobytes 000fh - .lobytes 0010h - .lobytes 0011h - .lobytes 0012h - .lobytes 0013h - .lobytes 0070h - .lobytes 0071h - .lobytes 0072h - .lobytes 0073h - .lobytes 0074h - .lobytes 0075h - .lobytes 0076h - .lobytes 0077h - .lobytes 0078h - .lobytes 0079h - .lobytes 007ah - .lobytes 007bh - .lobytes 007ch - .lobytes 007dh - .lobytes 007eh - .lobytes 007fh - .lobytes 0080h - .lobytes 0081h - .lobytes 0082h - .lobytes 0083h - .lobytes 0084h - .lobytes 0085h - .lobytes 0086h - .lobytes 00f0h - .lobytes 00f1h - .lobytes 00f2h - .lobytes 00f3h - .lobytes 00f4h - .lobytes 00f5h - .lobytes 00f6h - .lobytes 00f7h - .lobytes 00f8h - .lobytes 00f9h - .lobytes 00fah - .lobytes 00fbh - .lobytes 00fch - .lobytes 00fdh - .lobytes 00feh - .lobytes 00ffh - .lobytes 0100h - .lobytes 0101h - .lobytes 0102h - .lobytes 0103h - .lobytes 0fd2h - .lobytes 0fd3h - .lobytes 0fd4h - .lobytes 0fd5h - .lobytes 0fd6h - .lobytes 0fd7h - .lobytes 0fd8h - .lobytes 0fd9h - .lobytes 0fdah - .lobytes 0fdbh - .lobytes 0fdch - .lobytes 0fddh - .lobytes 0fdeh - .lobytes 0fdfh - .lobytes 0fe0h - .lobytes 0fe1h - .lobytes 0fe2h - .lobytes 0fe3h - .lobytes 0fe4h - .lobytes 0fe5h - .lobytes 0fe6h - .lobytes 0fe7h - .lobytes 0fe8h - .lobytes 0fe9h - .lobytes 0feah - .lobytes 0febh - .lobytes 0fech - .lobytes 0fedh - .lobytes 0feeh - .lobytes 0fefh - .lobytes 0ff0h - .lobytes 0ff1h - .lobytes 0ff2h - .lobytes 0ff3h - .lobytes 0ff4h - .lobytes 0ff5h - .lobytes 0ff6h - .lobytes 0ff7h - .lobytes 0ff8h - .lobytes 0ff9h - .lobytes 0ffah - .lobytes 0ffbh - .lobytes 0ffch - .lobytes 0ffdh - .lobytes 0ffeh - .lobytes 0fffh - .lobytes 1000h - .lobytes 1001h - .lobytes 1002h - .lobytes 1003h - .lobytes 1004h - .lobytes 1005h - .lobytes 1006h - .lobytes 1007h - .lobytes 1008h - .lobytes 7ff0h - .lobytes 7ff1h - .lobytes 7ff2h - .lobytes 7ff3h - .lobytes 7ff4h - .lobytes 7ff5h - .lobytes 7ff6h - .lobytes 7ff7h - .lobytes 7ff8h - .lobytes 7ff9h - .lobytes 7ffah - .lobytes 7ffbh - .lobytes 7ffch - .lobytes 7ffdh - .lobytes 7ffeh - .lobytes 7fffh - .lobytes 8000h - .lobytes 8001h - .lobytes 8002h - .lobytes 8003h - .lobytes 8004h - .lobytes 8005h - .lobytes 8006h - .lobytes 8007h - .lobytes 8008h - .lobytes 8009h - .lobytes 800ah - .lobytes 800bh - .lobytes 9fe1h - .lobytes 9fe2h - .lobytes 9fe3h - .lobytes 9fe4h - .lobytes 9fe5h - .lobytes 9fe6h - .lobytes 9fe7h - .lobytes 9fe8h - .lobytes 9fe9h - .lobytes 9feah - .lobytes 9febh - .lobytes 9fech - .lobytes 9fedh - .lobytes 9feeh - .lobytes 9fefh - .lobytes 9ff0h - .lobytes 9ff1h - .lobytes 9ff2h - .lobytes 9ff3h - .lobytes 9ff4h - .lobytes 9ff5h - .lobytes 9ff6h - .lobytes 9ff7h - .lobytes 9ff8h - .lobytes 9ff9h - .lobytes 9ffah - .lobytes 9ffbh - .lobytes 9ffch - .lobytes 9ffdh - .lobytes 9ffeh - .lobytes 9fffh - .lobytes 0a000h - .lobytes 0a001h - .lobytes 0a002h - .lobytes 0a003h - .lobytes 0a004h - .lobytes 0a005h - .lobytes 0a006h - .lobytes 0a007h - .lobytes 0a008h - .lobytes 0a009h - .lobytes 0a00ah - .lobytes 0a00bh - .lobytes 0a00ch - .lobytes 0a00dh - .lobytes 0a00eh - .lobytes 0a00fh - .lobytes 0afe1h - .lobytes 0afe2h - .lobytes 0afe3h - .lobytes 0afe4h - .lobytes 0afe5h - .lobytes 0afe6h - .lobytes 0afe7h - .lobytes 0afe8h - .lobytes 0afe9h - .lobytes 0afeah - .lobytes 0afebh - .lobytes 0afech - .lobytes 0afedh - .lobytes 0afeeh - .lobytes 0afefh - .lobytes 0aff0h - .lobytes 0aff1h - .lobytes 0aff2h - .lobytes 0aff3h - .lobytes 0aff4h - .lobytes 0aff5h - .lobytes 0aff6h - .lobytes 0aff7h - .lobytes 0aff8h - .lobytes 0aff9h - .lobytes 0affah - .lobytes 0affbh - .lobytes 0affch - .lobytes 0affdh - .lobytes 0affeh - .lobytes 0afffh - .lobytes 0b000h - .lobytes 0b001h - .lobytes 0b002h - .lobytes 0b003h - .lobytes 0b004h - .lobytes 0b005h - .lobytes 0b006h - .lobytes 0b007h - .lobytes 0b008h - .lobytes 0b009h - .lobytes 0b00ah - .lobytes 0b00bh - .lobytes 0b00ch - .lobytes 0b00dh - .lobytes 0b00eh - .lobytes 0b00fh - .lobytes 0bfe1h - .lobytes 0bfe2h - .lobytes 0bfe3h - .lobytes 0bfe4h - .lobytes 0bfe5h - .lobytes 0bfe6h - .lobytes 0bfe7h - .lobytes 0bfe8h - .lobytes 0bfe9h - .lobytes 0bfeah - .lobytes 0bfebh - .lobytes 0bfech - .lobytes 0bfedh - .lobytes 0bfeeh - .lobytes 0bfefh - .lobytes 0bff0h - .lobytes 0bff1h - .lobytes 0bff2h - .lobytes 0bff3h - .lobytes 0bff4h - .lobytes 0bff5h - .lobytes 0bff6h - .lobytes 0bff7h - .lobytes 0bff8h - .lobytes 0bff9h - .lobytes 0bffah - .lobytes 0bffbh - .lobytes 0bffch - .lobytes 0bffdh - .lobytes 0bffeh - .lobytes 0bfffh - .lobytes 0c000h - .lobytes 0c001h - .lobytes 0c002h - .lobytes 0c003h - .lobytes 0c004h - .lobytes 0c005h - .lobytes 0c006h - .lobytes 0c007h - .lobytes 0c008h - .lobytes 0c009h - .lobytes 0c00ah - .lobytes 0c00bh - .lobytes 0c00ch - .lobytes 0c00dh - .lobytes 0c00eh - .lobytes 0c00fh - .lobytes 0cfe1h - .lobytes 0cfe2h - .lobytes 0cfe3h - .lobytes 0cfe4h - .lobytes 0cfe5h - .lobytes 0cfe6h - .lobytes 0cfe7h - .lobytes 0cfe8h - .lobytes 0cfe9h - .lobytes 0cfeah - .lobytes 0cfebh - .lobytes 0cfech - .lobytes 0cfedh - .lobytes 0cfeeh - .lobytes 0cfefh - .lobytes 0cff0h - .lobytes 0cff1h - .lobytes 0cff2h - .lobytes 0cff3h - .lobytes 0cff4h - .lobytes 0cff5h - .lobytes 0cff6h - .lobytes 0cff7h - .lobytes 0cff8h - .lobytes 0cff9h - .lobytes 0cffah - .lobytes 0cffbh - .lobytes 0cffch - .lobytes 0cffdh - .lobytes 0cffeh - .lobytes 0cfffh - .lobytes 0d000h - .lobytes 0d001h - .lobytes 0d002h - .lobytes 0d003h - .lobytes 0d004h - .lobytes 0d005h - .lobytes 0d006h - .lobytes 0d007h - .lobytes 0d008h - .lobytes 0d009h - .lobytes 0d00ah - .lobytes 0d00bh - .lobytes 0d00ch - .lobytes 0d00dh - .lobytes 0d00eh - .lobytes 0d00fh - .lobytes 0dfe1h - .lobytes 0dfe2h - .lobytes 0dfe3h - .lobytes 0dfe4h - .lobytes 0dfe5h - .lobytes 0dfe6h - .lobytes 0dfe7h - .lobytes 0dfe8h - .lobytes 0dfe9h - .lobytes 0dfeah - .lobytes 0dfebh - .lobytes 0dfech - .lobytes 0dfedh - .lobytes 0dfeeh - .lobytes 0dfefh - .lobytes 0dff0h - .lobytes 0dff1h - .lobytes 0dff2h - .lobytes 0dff3h - .lobytes 0dff4h - .lobytes 0dff5h - .lobytes 0dff6h - .lobytes 0dff7h - .lobytes 0dff8h - .lobytes 0dff9h - .lobytes 0dffah - .lobytes 0dffbh - .lobytes 0dffch - .lobytes 0dffdh - .lobytes 0dffeh - .lobytes 0dfffh - .lobytes 0e000h - .lobytes 0e001h - .lobytes 0e002h - .lobytes 0e003h - .lobytes 0e004h - .lobytes 0e005h - .lobytes 0e006h - .lobytes 0e007h - .lobytes 0e008h - .lobytes 0e009h - .lobytes 0e00ah - .lobytes 0e00bh - .lobytes 0e00ch - .lobytes 0e00dh - .lobytes 0e00eh - .lobytes 0e00fh - .lobytes 0efe1h - .lobytes 0efe2h - .lobytes 0efe3h - .lobytes 0efe4h - .lobytes 0efe5h - .lobytes 0efe6h - .lobytes 0efe7h - .lobytes 0efe8h - .lobytes 0efe9h - .lobytes 0efeah - .lobytes 0efebh - .lobytes 0efech - .lobytes 0efedh - .lobytes 0efeeh - .lobytes 0efefh - .lobytes 0eff0h - .lobytes 0eff1h - .lobytes 0eff2h - .lobytes 0eff3h - .lobytes 0eff4h - .lobytes 0eff5h - .lobytes 0eff6h - .lobytes 0eff7h - .lobytes 0eff8h - .lobytes 0eff9h - .lobytes 0effah - .lobytes 0effbh - .lobytes 0effch - .lobytes 0effdh - .lobytes 0effeh - .lobytes 0efffh - .lobytes 0f000h - .lobytes 0f001h - .lobytes 0f002h - .lobytes 0f003h - .lobytes 0f004h - .lobytes 0f005h - .lobytes 0f006h - .lobytes 0f007h - .lobytes 0f008h - .lobytes 0f009h - .lobytes 0f00ah - .lobytes 0f00bh - .lobytes 0f00ch - .lobytes 0f00dh - .lobytes 0f00eh - .lobytes 0f00fh - .lobytes 0ffe1h - .lobytes 0ffe2h - .lobytes 0ffe3h - .lobytes 0ffe4h - .lobytes 0ffe5h - .lobytes 0ffe6h - .lobytes 0ffe7h - .lobytes 0ffe8h - .lobytes 0ffe9h - .lobytes 0ffeah - .lobytes 0ffebh - .lobytes 0ffech - .lobytes 0ffedh - .lobytes 0ffeeh - .lobytes 0ffefh - .lobytes 0fff0h - .lobytes 0fff1h - .lobytes 0fff2h - .lobytes 0fff3h - .lobytes 0fff4h - .lobytes 0fff5h - .lobytes 0fff6h - .lobytes 0fff7h - .lobytes 0fff8h - .lobytes 0fff9h - .lobytes 0fffah - .lobytes 0fffbh - .lobytes 0fffch - .lobytes 0fffdh - .lobytes 0fffeh - .lobytes 0ffffh + ; alternative 4-digit hex values + .lobytes 0000h + .lobytes 0001h + .lobytes 0002h + .lobytes 0003h + .lobytes 0004h + .lobytes 0005h + .lobytes 0006h + .lobytes 0007h + .lobytes 0008h + .lobytes 0009h + .lobytes 000ah + .lobytes 000bh + .lobytes 000ch + .lobytes 000dh + .lobytes 000eh + .lobytes 000fh + .lobytes 0010h + .lobytes 0011h + .lobytes 0012h + .lobytes 0013h + .lobytes 0070h + .lobytes 0071h + .lobytes 0072h + .lobytes 0073h + .lobytes 0074h + .lobytes 0075h + .lobytes 0076h + .lobytes 0077h + .lobytes 0078h + .lobytes 0079h + .lobytes 007ah + .lobytes 007bh + .lobytes 007ch + .lobytes 007dh + .lobytes 007eh + .lobytes 007fh + .lobytes 0080h + .lobytes 0081h + .lobytes 0082h + .lobytes 0083h + .lobytes 0084h + .lobytes 0085h + .lobytes 0086h + .lobytes 00f0h + .lobytes 00f1h + .lobytes 00f2h + .lobytes 00f3h + .lobytes 00f4h + .lobytes 00f5h + .lobytes 00f6h + .lobytes 00f7h + .lobytes 00f8h + .lobytes 00f9h + .lobytes 00fah + .lobytes 00fbh + .lobytes 00fch + .lobytes 00fdh + .lobytes 00feh + .lobytes 00ffh + .lobytes 0100h + .lobytes 0101h + .lobytes 0102h + .lobytes 0103h + .lobytes 0fd2h + .lobytes 0fd3h + .lobytes 0fd4h + .lobytes 0fd5h + .lobytes 0fd6h + .lobytes 0fd7h + .lobytes 0fd8h + .lobytes 0fd9h + .lobytes 0fdah + .lobytes 0fdbh + .lobytes 0fdch + .lobytes 0fddh + .lobytes 0fdeh + .lobytes 0fdfh + .lobytes 0fe0h + .lobytes 0fe1h + .lobytes 0fe2h + .lobytes 0fe3h + .lobytes 0fe4h + .lobytes 0fe5h + .lobytes 0fe6h + .lobytes 0fe7h + .lobytes 0fe8h + .lobytes 0fe9h + .lobytes 0feah + .lobytes 0febh + .lobytes 0fech + .lobytes 0fedh + .lobytes 0feeh + .lobytes 0fefh + .lobytes 0ff0h + .lobytes 0ff1h + .lobytes 0ff2h + .lobytes 0ff3h + .lobytes 0ff4h + .lobytes 0ff5h + .lobytes 0ff6h + .lobytes 0ff7h + .lobytes 0ff8h + .lobytes 0ff9h + .lobytes 0ffah + .lobytes 0ffbh + .lobytes 0ffch + .lobytes 0ffdh + .lobytes 0ffeh + .lobytes 0fffh + .lobytes 1000h + .lobytes 1001h + .lobytes 1002h + .lobytes 1003h + .lobytes 1004h + .lobytes 1005h + .lobytes 1006h + .lobytes 1007h + .lobytes 1008h + .lobytes 7ff0h + .lobytes 7ff1h + .lobytes 7ff2h + .lobytes 7ff3h + .lobytes 7ff4h + .lobytes 7ff5h + .lobytes 7ff6h + .lobytes 7ff7h + .lobytes 7ff8h + .lobytes 7ff9h + .lobytes 7ffah + .lobytes 7ffbh + .lobytes 7ffch + .lobytes 7ffdh + .lobytes 7ffeh + .lobytes 7fffh + .lobytes 8000h + .lobytes 8001h + .lobytes 8002h + .lobytes 8003h + .lobytes 8004h + .lobytes 8005h + .lobytes 8006h + .lobytes 8007h + .lobytes 8008h + .lobytes 8009h + .lobytes 800ah + .lobytes 800bh + .lobytes 9fe1h + .lobytes 9fe2h + .lobytes 9fe3h + .lobytes 9fe4h + .lobytes 9fe5h + .lobytes 9fe6h + .lobytes 9fe7h + .lobytes 9fe8h + .lobytes 9fe9h + .lobytes 9feah + .lobytes 9febh + .lobytes 9fech + .lobytes 9fedh + .lobytes 9feeh + .lobytes 9fefh + .lobytes 9ff0h + .lobytes 9ff1h + .lobytes 9ff2h + .lobytes 9ff3h + .lobytes 9ff4h + .lobytes 9ff5h + .lobytes 9ff6h + .lobytes 9ff7h + .lobytes 9ff8h + .lobytes 9ff9h + .lobytes 9ffah + .lobytes 9ffbh + .lobytes 9ffch + .lobytes 9ffdh + .lobytes 9ffeh + .lobytes 9fffh + .lobytes 0a000h + .lobytes 0a001h + .lobytes 0a002h + .lobytes 0a003h + .lobytes 0a004h + .lobytes 0a005h + .lobytes 0a006h + .lobytes 0a007h + .lobytes 0a008h + .lobytes 0a009h + .lobytes 0a00ah + .lobytes 0a00bh + .lobytes 0a00ch + .lobytes 0a00dh + .lobytes 0a00eh + .lobytes 0a00fh + .lobytes 0afe1h + .lobytes 0afe2h + .lobytes 0afe3h + .lobytes 0afe4h + .lobytes 0afe5h + .lobytes 0afe6h + .lobytes 0afe7h + .lobytes 0afe8h + .lobytes 0afe9h + .lobytes 0afeah + .lobytes 0afebh + .lobytes 0afech + .lobytes 0afedh + .lobytes 0afeeh + .lobytes 0afefh + .lobytes 0aff0h + .lobytes 0aff1h + .lobytes 0aff2h + .lobytes 0aff3h + .lobytes 0aff4h + .lobytes 0aff5h + .lobytes 0aff6h + .lobytes 0aff7h + .lobytes 0aff8h + .lobytes 0aff9h + .lobytes 0affah + .lobytes 0affbh + .lobytes 0affch + .lobytes 0affdh + .lobytes 0affeh + .lobytes 0afffh + .lobytes 0b000h + .lobytes 0b001h + .lobytes 0b002h + .lobytes 0b003h + .lobytes 0b004h + .lobytes 0b005h + .lobytes 0b006h + .lobytes 0b007h + .lobytes 0b008h + .lobytes 0b009h + .lobytes 0b00ah + .lobytes 0b00bh + .lobytes 0b00ch + .lobytes 0b00dh + .lobytes 0b00eh + .lobytes 0b00fh + .lobytes 0bfe1h + .lobytes 0bfe2h + .lobytes 0bfe3h + .lobytes 0bfe4h + .lobytes 0bfe5h + .lobytes 0bfe6h + .lobytes 0bfe7h + .lobytes 0bfe8h + .lobytes 0bfe9h + .lobytes 0bfeah + .lobytes 0bfebh + .lobytes 0bfech + .lobytes 0bfedh + .lobytes 0bfeeh + .lobytes 0bfefh + .lobytes 0bff0h + .lobytes 0bff1h + .lobytes 0bff2h + .lobytes 0bff3h + .lobytes 0bff4h + .lobytes 0bff5h + .lobytes 0bff6h + .lobytes 0bff7h + .lobytes 0bff8h + .lobytes 0bff9h + .lobytes 0bffah + .lobytes 0bffbh + .lobytes 0bffch + .lobytes 0bffdh + .lobytes 0bffeh + .lobytes 0bfffh + .lobytes 0c000h + .lobytes 0c001h + .lobytes 0c002h + .lobytes 0c003h + .lobytes 0c004h + .lobytes 0c005h + .lobytes 0c006h + .lobytes 0c007h + .lobytes 0c008h + .lobytes 0c009h + .lobytes 0c00ah + .lobytes 0c00bh + .lobytes 0c00ch + .lobytes 0c00dh + .lobytes 0c00eh + .lobytes 0c00fh + .lobytes 0cfe1h + .lobytes 0cfe2h + .lobytes 0cfe3h + .lobytes 0cfe4h + .lobytes 0cfe5h + .lobytes 0cfe6h + .lobytes 0cfe7h + .lobytes 0cfe8h + .lobytes 0cfe9h + .lobytes 0cfeah + .lobytes 0cfebh + .lobytes 0cfech + .lobytes 0cfedh + .lobytes 0cfeeh + .lobytes 0cfefh + .lobytes 0cff0h + .lobytes 0cff1h + .lobytes 0cff2h + .lobytes 0cff3h + .lobytes 0cff4h + .lobytes 0cff5h + .lobytes 0cff6h + .lobytes 0cff7h + .lobytes 0cff8h + .lobytes 0cff9h + .lobytes 0cffah + .lobytes 0cffbh + .lobytes 0cffch + .lobytes 0cffdh + .lobytes 0cffeh + .lobytes 0cfffh + .lobytes 0d000h + .lobytes 0d001h + .lobytes 0d002h + .lobytes 0d003h + .lobytes 0d004h + .lobytes 0d005h + .lobytes 0d006h + .lobytes 0d007h + .lobytes 0d008h + .lobytes 0d009h + .lobytes 0d00ah + .lobytes 0d00bh + .lobytes 0d00ch + .lobytes 0d00dh + .lobytes 0d00eh + .lobytes 0d00fh + .lobytes 0dfe1h + .lobytes 0dfe2h + .lobytes 0dfe3h + .lobytes 0dfe4h + .lobytes 0dfe5h + .lobytes 0dfe6h + .lobytes 0dfe7h + .lobytes 0dfe8h + .lobytes 0dfe9h + .lobytes 0dfeah + .lobytes 0dfebh + .lobytes 0dfech + .lobytes 0dfedh + .lobytes 0dfeeh + .lobytes 0dfefh + .lobytes 0dff0h + .lobytes 0dff1h + .lobytes 0dff2h + .lobytes 0dff3h + .lobytes 0dff4h + .lobytes 0dff5h + .lobytes 0dff6h + .lobytes 0dff7h + .lobytes 0dff8h + .lobytes 0dff9h + .lobytes 0dffah + .lobytes 0dffbh + .lobytes 0dffch + .lobytes 0dffdh + .lobytes 0dffeh + .lobytes 0dfffh + .lobytes 0e000h + .lobytes 0e001h + .lobytes 0e002h + .lobytes 0e003h + .lobytes 0e004h + .lobytes 0e005h + .lobytes 0e006h + .lobytes 0e007h + .lobytes 0e008h + .lobytes 0e009h + .lobytes 0e00ah + .lobytes 0e00bh + .lobytes 0e00ch + .lobytes 0e00dh + .lobytes 0e00eh + .lobytes 0e00fh + .lobytes 0efe1h + .lobytes 0efe2h + .lobytes 0efe3h + .lobytes 0efe4h + .lobytes 0efe5h + .lobytes 0efe6h + .lobytes 0efe7h + .lobytes 0efe8h + .lobytes 0efe9h + .lobytes 0efeah + .lobytes 0efebh + .lobytes 0efech + .lobytes 0efedh + .lobytes 0efeeh + .lobytes 0efefh + .lobytes 0eff0h + .lobytes 0eff1h + .lobytes 0eff2h + .lobytes 0eff3h + .lobytes 0eff4h + .lobytes 0eff5h + .lobytes 0eff6h + .lobytes 0eff7h + .lobytes 0eff8h + .lobytes 0eff9h + .lobytes 0effah + .lobytes 0effbh + .lobytes 0effch + .lobytes 0effdh + .lobytes 0effeh + .lobytes 0efffh + .lobytes 0f000h + .lobytes 0f001h + .lobytes 0f002h + .lobytes 0f003h + .lobytes 0f004h + .lobytes 0f005h + .lobytes 0f006h + .lobytes 0f007h + .lobytes 0f008h + .lobytes 0f009h + .lobytes 0f00ah + .lobytes 0f00bh + .lobytes 0f00ch + .lobytes 0f00dh + .lobytes 0f00eh + .lobytes 0f00fh + .lobytes 0ffe1h + .lobytes 0ffe2h + .lobytes 0ffe3h + .lobytes 0ffe4h + .lobytes 0ffe5h + .lobytes 0ffe6h + .lobytes 0ffe7h + .lobytes 0ffe8h + .lobytes 0ffe9h + .lobytes 0ffeah + .lobytes 0ffebh + .lobytes 0ffech + .lobytes 0ffedh + .lobytes 0ffeeh + .lobytes 0ffefh + .lobytes 0fff0h + .lobytes 0fff1h + .lobytes 0fff2h + .lobytes 0fff3h + .lobytes 0fff4h + .lobytes 0fff5h + .lobytes 0fff6h + .lobytes 0fff7h + .lobytes 0fff8h + .lobytes 0fff9h + .lobytes 0fffah + .lobytes 0fffbh + .lobytes 0fffch + .lobytes 0fffdh + .lobytes 0fffeh + .lobytes 0ffffh - ; alternative 4-digit hex values, uppercase - .lobytes 0000h - .lobytes 0001h - .lobytes 0002h - .lobytes 0003h - .lobytes 0004h - .lobytes 0005h - .lobytes 0006h - .lobytes 0007h - .lobytes 0008h - .lobytes 0009h - .lobytes 000Ah - .lobytes 000Bh - .lobytes 000Ch - .lobytes 000Dh - .lobytes 000Eh - .lobytes 000Fh - .lobytes 0010h - .lobytes 0011h - .lobytes 0012h - .lobytes 0013h - .lobytes 0070h - .lobytes 0071h - .lobytes 0072h - .lobytes 0073h - .lobytes 0074h - .lobytes 0075h - .lobytes 0076h - .lobytes 0077h - .lobytes 0078h - .lobytes 0079h - .lobytes 007Ah - .lobytes 007Bh - .lobytes 007Ch - .lobytes 007Dh - .lobytes 007Eh - .lobytes 007Fh - .lobytes 0080h - .lobytes 0081h - .lobytes 0082h - .lobytes 0083h - .lobytes 0084h - .lobytes 0085h - .lobytes 0086h - .lobytes 00F0h - .lobytes 00F1h - .lobytes 00F2h - .lobytes 00F3h - .lobytes 00F4h - .lobytes 00F5h - .lobytes 00F6h - .lobytes 00F7h - .lobytes 00F8h - .lobytes 00F9h - .lobytes 00FAh - .lobytes 00FBh - .lobytes 00FCh - .lobytes 00FDh - .lobytes 00FEh - .lobytes 00FFh - .lobytes 0100h - .lobytes 0101h - .lobytes 0102h - .lobytes 0103h - .lobytes 0FD2h - .lobytes 0FD3h - .lobytes 0FD4h - .lobytes 0FD5h - .lobytes 0FD6h - .lobytes 0FD7h - .lobytes 0FD8h - .lobytes 0FD9h - .lobytes 0FDAh - .lobytes 0FDBh - .lobytes 0FDCh - .lobytes 0FDDh - .lobytes 0FDEh - .lobytes 0FDFh - .lobytes 0FE0h - .lobytes 0FE1h - .lobytes 0FE2h - .lobytes 0FE3h - .lobytes 0FE4h - .lobytes 0FE5h - .lobytes 0FE6h - .lobytes 0FE7h - .lobytes 0FE8h - .lobytes 0FE9h - .lobytes 0FEAh - .lobytes 0FEBh - .lobytes 0FECh - .lobytes 0FEDh - .lobytes 0FEEh - .lobytes 0FEFh - .lobytes 0FF0h - .lobytes 0FF1h - .lobytes 0FF2h - .lobytes 0FF3h - .lobytes 0FF4h - .lobytes 0FF5h - .lobytes 0FF6h - .lobytes 0FF7h - .lobytes 0FF8h - .lobytes 0FF9h - .lobytes 0FFAh - .lobytes 0FFBh - .lobytes 0FFCh - .lobytes 0FFDh - .lobytes 0FFEh - .lobytes 0FFFh - .lobytes 1000h - .lobytes 1001h - .lobytes 1002h - .lobytes 1003h - .lobytes 1004h - .lobytes 1005h - .lobytes 1006h - .lobytes 1007h - .lobytes 1008h - .lobytes 7FF0h - .lobytes 7FF1h - .lobytes 7FF2h - .lobytes 7FF3h - .lobytes 7FF4h - .lobytes 7FF5h - .lobytes 7FF6h - .lobytes 7FF7h - .lobytes 7FF8h - .lobytes 7FF9h - .lobytes 7FFAh - .lobytes 7FFBh - .lobytes 7FFCh - .lobytes 7FFDh - .lobytes 7FFEh - .lobytes 7FFFh - .lobytes 8000h - .lobytes 8001h - .lobytes 8002h - .lobytes 8003h - .lobytes 8004h - .lobytes 8005h - .lobytes 8006h - .lobytes 8007h - .lobytes 8008h - .lobytes 8009h - .lobytes 800Ah - .lobytes 800Bh - .lobytes 9FE1h - .lobytes 9FE2h - .lobytes 9FE3h - .lobytes 9FE4h - .lobytes 9FE5h - .lobytes 9FE6h - .lobytes 9FE7h - .lobytes 9FE8h - .lobytes 9FE9h - .lobytes 9FEAh - .lobytes 9FEBh - .lobytes 9FECh - .lobytes 9FEDh - .lobytes 9FEEh - .lobytes 9FEFh - .lobytes 9FF0h - .lobytes 9FF1h - .lobytes 9FF2h - .lobytes 9FF3h - .lobytes 9FF4h - .lobytes 9FF5h - .lobytes 9FF6h - .lobytes 9FF7h - .lobytes 9FF8h - .lobytes 9FF9h - .lobytes 9FFAh - .lobytes 9FFBh - .lobytes 9FFCh - .lobytes 9FFDh - .lobytes 9FFEh - .lobytes 9FFFh - .lobytes 0A000h - .lobytes 0A001h - .lobytes 0A002h - .lobytes 0A003h - .lobytes 0A004h - .lobytes 0A005h - .lobytes 0A006h - .lobytes 0A007h - .lobytes 0A008h - .lobytes 0A009h - .lobytes 0A00Ah - .lobytes 0A00Bh - .lobytes 0A00Ch - .lobytes 0A00Dh - .lobytes 0A00Eh - .lobytes 0A00Fh - .lobytes 0AFE1h - .lobytes 0AFE2h - .lobytes 0AFE3h - .lobytes 0AFE4h - .lobytes 0AFE5h - .lobytes 0AFE6h - .lobytes 0AFE7h - .lobytes 0AFE8h - .lobytes 0AFE9h - .lobytes 0AFEAh - .lobytes 0AFEBh - .lobytes 0AFECh - .lobytes 0AFEDh - .lobytes 0AFEEh - .lobytes 0AFEFh - .lobytes 0AFF0h - .lobytes 0AFF1h - .lobytes 0AFF2h - .lobytes 0AFF3h - .lobytes 0AFF4h - .lobytes 0AFF5h - .lobytes 0AFF6h - .lobytes 0AFF7h - .lobytes 0AFF8h - .lobytes 0AFF9h - .lobytes 0AFFAh - .lobytes 0AFFBh - .lobytes 0AFFCh - .lobytes 0AFFDh - .lobytes 0AFFEh - .lobytes 0AFFFh - .lobytes 0B000h - .lobytes 0B001h - .lobytes 0B002h - .lobytes 0B003h - .lobytes 0B004h - .lobytes 0B005h - .lobytes 0B006h - .lobytes 0B007h - .lobytes 0B008h - .lobytes 0B009h - .lobytes 0B00Ah - .lobytes 0B00Bh - .lobytes 0B00Ch - .lobytes 0B00Dh - .lobytes 0B00Eh - .lobytes 0B00Fh - .lobytes 0BFE1h - .lobytes 0BFE2h - .lobytes 0BFE3h - .lobytes 0BFE4h - .lobytes 0BFE5h - .lobytes 0BFE6h - .lobytes 0BFE7h - .lobytes 0BFE8h - .lobytes 0BFE9h - .lobytes 0BFEAh - .lobytes 0BFEBh - .lobytes 0BFECh - .lobytes 0BFEDh - .lobytes 0BFEEh - .lobytes 0BFEFh - .lobytes 0BFF0h - .lobytes 0BFF1h - .lobytes 0BFF2h - .lobytes 0BFF3h - .lobytes 0BFF4h - .lobytes 0BFF5h - .lobytes 0BFF6h - .lobytes 0BFF7h - .lobytes 0BFF8h - .lobytes 0BFF9h - .lobytes 0BFFAh - .lobytes 0BFFBh - .lobytes 0BFFCh - .lobytes 0BFFDh - .lobytes 0BFFEh - .lobytes 0BFFFh - .lobytes 0C000h - .lobytes 0C001h - .lobytes 0C002h - .lobytes 0C003h - .lobytes 0C004h - .lobytes 0C005h - .lobytes 0C006h - .lobytes 0C007h - .lobytes 0C008h - .lobytes 0C009h - .lobytes 0C00Ah - .lobytes 0C00Bh - .lobytes 0C00Ch - .lobytes 0C00Dh - .lobytes 0C00Eh - .lobytes 0C00Fh - .lobytes 0CFE1h - .lobytes 0CFE2h - .lobytes 0CFE3h - .lobytes 0CFE4h - .lobytes 0CFE5h - .lobytes 0CFE6h - .lobytes 0CFE7h - .lobytes 0CFE8h - .lobytes 0CFE9h - .lobytes 0CFEAh - .lobytes 0CFEBh - .lobytes 0CFECh - .lobytes 0CFEDh - .lobytes 0CFEEh - .lobytes 0CFEFh - .lobytes 0CFF0h - .lobytes 0CFF1h - .lobytes 0CFF2h - .lobytes 0CFF3h - .lobytes 0CFF4h - .lobytes 0CFF5h - .lobytes 0CFF6h - .lobytes 0CFF7h - .lobytes 0CFF8h - .lobytes 0CFF9h - .lobytes 0CFFAh - .lobytes 0CFFBh - .lobytes 0CFFCh - .lobytes 0CFFDh - .lobytes 0CFFEh - .lobytes 0CFFFh - .lobytes 0D000h - .lobytes 0D001h - .lobytes 0D002h - .lobytes 0D003h - .lobytes 0D004h - .lobytes 0D005h - .lobytes 0D006h - .lobytes 0D007h - .lobytes 0D008h - .lobytes 0D009h - .lobytes 0D00Ah - .lobytes 0D00Bh - .lobytes 0D00Ch - .lobytes 0D00Dh - .lobytes 0D00Eh - .lobytes 0D00Fh - .lobytes 0DFE1h - .lobytes 0DFE2h - .lobytes 0DFE3h - .lobytes 0DFE4h - .lobytes 0DFE5h - .lobytes 0DFE6h - .lobytes 0DFE7h - .lobytes 0DFE8h - .lobytes 0DFE9h - .lobytes 0DFEAh - .lobytes 0DFEBh - .lobytes 0DFECh - .lobytes 0DFEDh - .lobytes 0DFEEh - .lobytes 0DFEFh - .lobytes 0DFF0h - .lobytes 0DFF1h - .lobytes 0DFF2h - .lobytes 0DFF3h - .lobytes 0DFF4h - .lobytes 0DFF5h - .lobytes 0DFF6h - .lobytes 0DFF7h - .lobytes 0DFF8h - .lobytes 0DFF9h - .lobytes 0DFFAh - .lobytes 0DFFBh - .lobytes 0DFFCh - .lobytes 0DFFDh - .lobytes 0DFFEh - .lobytes 0DFFFh - .lobytes 0E000h - .lobytes 0E001h - .lobytes 0E002h - .lobytes 0E003h - .lobytes 0E004h - .lobytes 0E005h - .lobytes 0E006h - .lobytes 0E007h - .lobytes 0E008h - .lobytes 0E009h - .lobytes 0E00Ah - .lobytes 0E00Bh - .lobytes 0E00Ch - .lobytes 0E00Dh - .lobytes 0E00Eh - .lobytes 0E00Fh - .lobytes 0EFE1h - .lobytes 0EFE2h - .lobytes 0EFE3h - .lobytes 0EFE4h - .lobytes 0EFE5h - .lobytes 0EFE6h - .lobytes 0EFE7h - .lobytes 0EFE8h - .lobytes 0EFE9h - .lobytes 0EFEAh - .lobytes 0EFEBh - .lobytes 0EFECh - .lobytes 0EFEDh - .lobytes 0EFEEh - .lobytes 0EFEFh - .lobytes 0EFF0h - .lobytes 0EFF1h - .lobytes 0EFF2h - .lobytes 0EFF3h - .lobytes 0EFF4h - .lobytes 0EFF5h - .lobytes 0EFF6h - .lobytes 0EFF7h - .lobytes 0EFF8h - .lobytes 0EFF9h - .lobytes 0EFFAh - .lobytes 0EFFBh - .lobytes 0EFFCh - .lobytes 0EFFDh - .lobytes 0EFFEh - .lobytes 0EFFFh - .lobytes 0F000h - .lobytes 0F001h - .lobytes 0F002h - .lobytes 0F003h - .lobytes 0F004h - .lobytes 0F005h - .lobytes 0F006h - .lobytes 0F007h - .lobytes 0F008h - .lobytes 0F009h - .lobytes 0F00Ah - .lobytes 0F00Bh - .lobytes 0F00Ch - .lobytes 0F00Dh - .lobytes 0F00Eh - .lobytes 0F00Fh - .lobytes 0FFE1h - .lobytes 0FFE2h - .lobytes 0FFE3h - .lobytes 0FFE4h - .lobytes 0FFE5h - .lobytes 0FFE6h - .lobytes 0FFE7h - .lobytes 0FFE8h - .lobytes 0FFE9h - .lobytes 0FFEAh - .lobytes 0FFEBh - .lobytes 0FFECh - .lobytes 0FFEDh - .lobytes 0FFEEh - .lobytes 0FFEFh - .lobytes 0FFF0h - .lobytes 0FFF1h - .lobytes 0FFF2h - .lobytes 0FFF3h - .lobytes 0FFF4h - .lobytes 0FFF5h - .lobytes 0FFF6h - .lobytes 0FFF7h - .lobytes 0FFF8h - .lobytes 0FFF9h - .lobytes 0FFFAh - .lobytes 0FFFBh - .lobytes 0FFFCh - .lobytes 0FFFDh - .lobytes 0FFFEh - .lobytes 0FFFFh + ; alternative 4-digit hex values, uppercase + .lobytes 0000h + .lobytes 0001h + .lobytes 0002h + .lobytes 0003h + .lobytes 0004h + .lobytes 0005h + .lobytes 0006h + .lobytes 0007h + .lobytes 0008h + .lobytes 0009h + .lobytes 000Ah + .lobytes 000Bh + .lobytes 000Ch + .lobytes 000Dh + .lobytes 000Eh + .lobytes 000Fh + .lobytes 0010h + .lobytes 0011h + .lobytes 0012h + .lobytes 0013h + .lobytes 0070h + .lobytes 0071h + .lobytes 0072h + .lobytes 0073h + .lobytes 0074h + .lobytes 0075h + .lobytes 0076h + .lobytes 0077h + .lobytes 0078h + .lobytes 0079h + .lobytes 007Ah + .lobytes 007Bh + .lobytes 007Ch + .lobytes 007Dh + .lobytes 007Eh + .lobytes 007Fh + .lobytes 0080h + .lobytes 0081h + .lobytes 0082h + .lobytes 0083h + .lobytes 0084h + .lobytes 0085h + .lobytes 0086h + .lobytes 00F0h + .lobytes 00F1h + .lobytes 00F2h + .lobytes 00F3h + .lobytes 00F4h + .lobytes 00F5h + .lobytes 00F6h + .lobytes 00F7h + .lobytes 00F8h + .lobytes 00F9h + .lobytes 00FAh + .lobytes 00FBh + .lobytes 00FCh + .lobytes 00FDh + .lobytes 00FEh + .lobytes 00FFh + .lobytes 0100h + .lobytes 0101h + .lobytes 0102h + .lobytes 0103h + .lobytes 0FD2h + .lobytes 0FD3h + .lobytes 0FD4h + .lobytes 0FD5h + .lobytes 0FD6h + .lobytes 0FD7h + .lobytes 0FD8h + .lobytes 0FD9h + .lobytes 0FDAh + .lobytes 0FDBh + .lobytes 0FDCh + .lobytes 0FDDh + .lobytes 0FDEh + .lobytes 0FDFh + .lobytes 0FE0h + .lobytes 0FE1h + .lobytes 0FE2h + .lobytes 0FE3h + .lobytes 0FE4h + .lobytes 0FE5h + .lobytes 0FE6h + .lobytes 0FE7h + .lobytes 0FE8h + .lobytes 0FE9h + .lobytes 0FEAh + .lobytes 0FEBh + .lobytes 0FECh + .lobytes 0FEDh + .lobytes 0FEEh + .lobytes 0FEFh + .lobytes 0FF0h + .lobytes 0FF1h + .lobytes 0FF2h + .lobytes 0FF3h + .lobytes 0FF4h + .lobytes 0FF5h + .lobytes 0FF6h + .lobytes 0FF7h + .lobytes 0FF8h + .lobytes 0FF9h + .lobytes 0FFAh + .lobytes 0FFBh + .lobytes 0FFCh + .lobytes 0FFDh + .lobytes 0FFEh + .lobytes 0FFFh + .lobytes 1000h + .lobytes 1001h + .lobytes 1002h + .lobytes 1003h + .lobytes 1004h + .lobytes 1005h + .lobytes 1006h + .lobytes 1007h + .lobytes 1008h + .lobytes 7FF0h + .lobytes 7FF1h + .lobytes 7FF2h + .lobytes 7FF3h + .lobytes 7FF4h + .lobytes 7FF5h + .lobytes 7FF6h + .lobytes 7FF7h + .lobytes 7FF8h + .lobytes 7FF9h + .lobytes 7FFAh + .lobytes 7FFBh + .lobytes 7FFCh + .lobytes 7FFDh + .lobytes 7FFEh + .lobytes 7FFFh + .lobytes 8000h + .lobytes 8001h + .lobytes 8002h + .lobytes 8003h + .lobytes 8004h + .lobytes 8005h + .lobytes 8006h + .lobytes 8007h + .lobytes 8008h + .lobytes 8009h + .lobytes 800Ah + .lobytes 800Bh + .lobytes 9FE1h + .lobytes 9FE2h + .lobytes 9FE3h + .lobytes 9FE4h + .lobytes 9FE5h + .lobytes 9FE6h + .lobytes 9FE7h + .lobytes 9FE8h + .lobytes 9FE9h + .lobytes 9FEAh + .lobytes 9FEBh + .lobytes 9FECh + .lobytes 9FEDh + .lobytes 9FEEh + .lobytes 9FEFh + .lobytes 9FF0h + .lobytes 9FF1h + .lobytes 9FF2h + .lobytes 9FF3h + .lobytes 9FF4h + .lobytes 9FF5h + .lobytes 9FF6h + .lobytes 9FF7h + .lobytes 9FF8h + .lobytes 9FF9h + .lobytes 9FFAh + .lobytes 9FFBh + .lobytes 9FFCh + .lobytes 9FFDh + .lobytes 9FFEh + .lobytes 9FFFh + .lobytes 0A000h + .lobytes 0A001h + .lobytes 0A002h + .lobytes 0A003h + .lobytes 0A004h + .lobytes 0A005h + .lobytes 0A006h + .lobytes 0A007h + .lobytes 0A008h + .lobytes 0A009h + .lobytes 0A00Ah + .lobytes 0A00Bh + .lobytes 0A00Ch + .lobytes 0A00Dh + .lobytes 0A00Eh + .lobytes 0A00Fh + .lobytes 0AFE1h + .lobytes 0AFE2h + .lobytes 0AFE3h + .lobytes 0AFE4h + .lobytes 0AFE5h + .lobytes 0AFE6h + .lobytes 0AFE7h + .lobytes 0AFE8h + .lobytes 0AFE9h + .lobytes 0AFEAh + .lobytes 0AFEBh + .lobytes 0AFECh + .lobytes 0AFEDh + .lobytes 0AFEEh + .lobytes 0AFEFh + .lobytes 0AFF0h + .lobytes 0AFF1h + .lobytes 0AFF2h + .lobytes 0AFF3h + .lobytes 0AFF4h + .lobytes 0AFF5h + .lobytes 0AFF6h + .lobytes 0AFF7h + .lobytes 0AFF8h + .lobytes 0AFF9h + .lobytes 0AFFAh + .lobytes 0AFFBh + .lobytes 0AFFCh + .lobytes 0AFFDh + .lobytes 0AFFEh + .lobytes 0AFFFh + .lobytes 0B000h + .lobytes 0B001h + .lobytes 0B002h + .lobytes 0B003h + .lobytes 0B004h + .lobytes 0B005h + .lobytes 0B006h + .lobytes 0B007h + .lobytes 0B008h + .lobytes 0B009h + .lobytes 0B00Ah + .lobytes 0B00Bh + .lobytes 0B00Ch + .lobytes 0B00Dh + .lobytes 0B00Eh + .lobytes 0B00Fh + .lobytes 0BFE1h + .lobytes 0BFE2h + .lobytes 0BFE3h + .lobytes 0BFE4h + .lobytes 0BFE5h + .lobytes 0BFE6h + .lobytes 0BFE7h + .lobytes 0BFE8h + .lobytes 0BFE9h + .lobytes 0BFEAh + .lobytes 0BFEBh + .lobytes 0BFECh + .lobytes 0BFEDh + .lobytes 0BFEEh + .lobytes 0BFEFh + .lobytes 0BFF0h + .lobytes 0BFF1h + .lobytes 0BFF2h + .lobytes 0BFF3h + .lobytes 0BFF4h + .lobytes 0BFF5h + .lobytes 0BFF6h + .lobytes 0BFF7h + .lobytes 0BFF8h + .lobytes 0BFF9h + .lobytes 0BFFAh + .lobytes 0BFFBh + .lobytes 0BFFCh + .lobytes 0BFFDh + .lobytes 0BFFEh + .lobytes 0BFFFh + .lobytes 0C000h + .lobytes 0C001h + .lobytes 0C002h + .lobytes 0C003h + .lobytes 0C004h + .lobytes 0C005h + .lobytes 0C006h + .lobytes 0C007h + .lobytes 0C008h + .lobytes 0C009h + .lobytes 0C00Ah + .lobytes 0C00Bh + .lobytes 0C00Ch + .lobytes 0C00Dh + .lobytes 0C00Eh + .lobytes 0C00Fh + .lobytes 0CFE1h + .lobytes 0CFE2h + .lobytes 0CFE3h + .lobytes 0CFE4h + .lobytes 0CFE5h + .lobytes 0CFE6h + .lobytes 0CFE7h + .lobytes 0CFE8h + .lobytes 0CFE9h + .lobytes 0CFEAh + .lobytes 0CFEBh + .lobytes 0CFECh + .lobytes 0CFEDh + .lobytes 0CFEEh + .lobytes 0CFEFh + .lobytes 0CFF0h + .lobytes 0CFF1h + .lobytes 0CFF2h + .lobytes 0CFF3h + .lobytes 0CFF4h + .lobytes 0CFF5h + .lobytes 0CFF6h + .lobytes 0CFF7h + .lobytes 0CFF8h + .lobytes 0CFF9h + .lobytes 0CFFAh + .lobytes 0CFFBh + .lobytes 0CFFCh + .lobytes 0CFFDh + .lobytes 0CFFEh + .lobytes 0CFFFh + .lobytes 0D000h + .lobytes 0D001h + .lobytes 0D002h + .lobytes 0D003h + .lobytes 0D004h + .lobytes 0D005h + .lobytes 0D006h + .lobytes 0D007h + .lobytes 0D008h + .lobytes 0D009h + .lobytes 0D00Ah + .lobytes 0D00Bh + .lobytes 0D00Ch + .lobytes 0D00Dh + .lobytes 0D00Eh + .lobytes 0D00Fh + .lobytes 0DFE1h + .lobytes 0DFE2h + .lobytes 0DFE3h + .lobytes 0DFE4h + .lobytes 0DFE5h + .lobytes 0DFE6h + .lobytes 0DFE7h + .lobytes 0DFE8h + .lobytes 0DFE9h + .lobytes 0DFEAh + .lobytes 0DFEBh + .lobytes 0DFECh + .lobytes 0DFEDh + .lobytes 0DFEEh + .lobytes 0DFEFh + .lobytes 0DFF0h + .lobytes 0DFF1h + .lobytes 0DFF2h + .lobytes 0DFF3h + .lobytes 0DFF4h + .lobytes 0DFF5h + .lobytes 0DFF6h + .lobytes 0DFF7h + .lobytes 0DFF8h + .lobytes 0DFF9h + .lobytes 0DFFAh + .lobytes 0DFFBh + .lobytes 0DFFCh + .lobytes 0DFFDh + .lobytes 0DFFEh + .lobytes 0DFFFh + .lobytes 0E000h + .lobytes 0E001h + .lobytes 0E002h + .lobytes 0E003h + .lobytes 0E004h + .lobytes 0E005h + .lobytes 0E006h + .lobytes 0E007h + .lobytes 0E008h + .lobytes 0E009h + .lobytes 0E00Ah + .lobytes 0E00Bh + .lobytes 0E00Ch + .lobytes 0E00Dh + .lobytes 0E00Eh + .lobytes 0E00Fh + .lobytes 0EFE1h + .lobytes 0EFE2h + .lobytes 0EFE3h + .lobytes 0EFE4h + .lobytes 0EFE5h + .lobytes 0EFE6h + .lobytes 0EFE7h + .lobytes 0EFE8h + .lobytes 0EFE9h + .lobytes 0EFEAh + .lobytes 0EFEBh + .lobytes 0EFECh + .lobytes 0EFEDh + .lobytes 0EFEEh + .lobytes 0EFEFh + .lobytes 0EFF0h + .lobytes 0EFF1h + .lobytes 0EFF2h + .lobytes 0EFF3h + .lobytes 0EFF4h + .lobytes 0EFF5h + .lobytes 0EFF6h + .lobytes 0EFF7h + .lobytes 0EFF8h + .lobytes 0EFF9h + .lobytes 0EFFAh + .lobytes 0EFFBh + .lobytes 0EFFCh + .lobytes 0EFFDh + .lobytes 0EFFEh + .lobytes 0EFFFh + .lobytes 0F000h + .lobytes 0F001h + .lobytes 0F002h + .lobytes 0F003h + .lobytes 0F004h + .lobytes 0F005h + .lobytes 0F006h + .lobytes 0F007h + .lobytes 0F008h + .lobytes 0F009h + .lobytes 0F00Ah + .lobytes 0F00Bh + .lobytes 0F00Ch + .lobytes 0F00Dh + .lobytes 0F00Eh + .lobytes 0F00Fh + .lobytes 0FFE1h + .lobytes 0FFE2h + .lobytes 0FFE3h + .lobytes 0FFE4h + .lobytes 0FFE5h + .lobytes 0FFE6h + .lobytes 0FFE7h + .lobytes 0FFE8h + .lobytes 0FFE9h + .lobytes 0FFEAh + .lobytes 0FFEBh + .lobytes 0FFECh + .lobytes 0FFEDh + .lobytes 0FFEEh + .lobytes 0FFEFh + .lobytes 0FFF0h + .lobytes 0FFF1h + .lobytes 0FFF2h + .lobytes 0FFF3h + .lobytes 0FFF4h + .lobytes 0FFF5h + .lobytes 0FFF6h + .lobytes 0FFF7h + .lobytes 0FFF8h + .lobytes 0FFF9h + .lobytes 0FFFAh + .lobytes 0FFFBh + .lobytes 0FFFCh + .lobytes 0FFFDh + .lobytes 0FFFEh + .lobytes 0FFFFh - ; alternative hex values, always leading zero - .lobytes 00h - .lobytes 01h - .lobytes 02h - .lobytes 03h - .lobytes 04h - .lobytes 05h - .lobytes 06h - .lobytes 07h - .lobytes 08h - .lobytes 09h - .lobytes 0ah - .lobytes 0bh - .lobytes 0ch - .lobytes 0dh - .lobytes 0eh - .lobytes 0fh - .lobytes 010h - .lobytes 011h - .lobytes 012h - .lobytes 013h - .lobytes 070h - .lobytes 071h - .lobytes 072h - .lobytes 073h - .lobytes 074h - .lobytes 075h - .lobytes 076h - .lobytes 077h - .lobytes 078h - .lobytes 079h - .lobytes 07ah - .lobytes 07bh - .lobytes 07ch - .lobytes 07dh - .lobytes 07eh - .lobytes 07fh - .lobytes 080h - .lobytes 081h - .lobytes 082h - .lobytes 083h - .lobytes 084h - .lobytes 085h - .lobytes 086h - .lobytes 0f0h - .lobytes 0f1h - .lobytes 0f2h - .lobytes 0f3h - .lobytes 0f4h - .lobytes 0f5h - .lobytes 0f6h - .lobytes 0f7h - .lobytes 0f8h - .lobytes 0f9h - .lobytes 0fah - .lobytes 0fbh - .lobytes 0fch - .lobytes 0fdh - .lobytes 0feh - .lobytes 0ffh - .lobytes 0100h - .lobytes 0101h - .lobytes 0102h - .lobytes 0103h - .lobytes 0fd2h - .lobytes 0fd3h - .lobytes 0fd4h - .lobytes 0fd5h - .lobytes 0fd6h - .lobytes 0fd7h - .lobytes 0fd8h - .lobytes 0fd9h - .lobytes 0fdah - .lobytes 0fdbh - .lobytes 0fdch - .lobytes 0fddh - .lobytes 0fdeh - .lobytes 0fdfh - .lobytes 0fe0h - .lobytes 0fe1h - .lobytes 0fe2h - .lobytes 0fe3h - .lobytes 0fe4h - .lobytes 0fe5h - .lobytes 0fe6h - .lobytes 0fe7h - .lobytes 0fe8h - .lobytes 0fe9h - .lobytes 0feah - .lobytes 0febh - .lobytes 0fech - .lobytes 0fedh - .lobytes 0feeh - .lobytes 0fefh - .lobytes 0ff0h - .lobytes 0ff1h - .lobytes 0ff2h - .lobytes 0ff3h - .lobytes 0ff4h - .lobytes 0ff5h - .lobytes 0ff6h - .lobytes 0ff7h - .lobytes 0ff8h - .lobytes 0ff9h - .lobytes 0ffah - .lobytes 0ffbh - .lobytes 0ffch - .lobytes 0ffdh - .lobytes 0ffeh - .lobytes 0fffh - .lobytes 01000h - .lobytes 01001h - .lobytes 01002h - .lobytes 01003h - .lobytes 01004h - .lobytes 01005h - .lobytes 01006h - .lobytes 01007h - .lobytes 01008h - .lobytes 07ff0h - .lobytes 07ff1h - .lobytes 07ff2h - .lobytes 07ff3h - .lobytes 07ff4h - .lobytes 07ff5h - .lobytes 07ff6h - .lobytes 07ff7h - .lobytes 07ff8h - .lobytes 07ff9h - .lobytes 07ffah - .lobytes 07ffbh - .lobytes 07ffch - .lobytes 07ffdh - .lobytes 07ffeh - .lobytes 07fffh - .lobytes 08000h - .lobytes 08001h - .lobytes 08002h - .lobytes 08003h - .lobytes 08004h - .lobytes 08005h - .lobytes 08006h - .lobytes 08007h - .lobytes 08008h - .lobytes 08009h - .lobytes 0800ah - .lobytes 0800bh - .lobytes 09fe1h - .lobytes 09fe2h - .lobytes 09fe3h - .lobytes 09fe4h - .lobytes 09fe5h - .lobytes 09fe6h - .lobytes 09fe7h - .lobytes 09fe8h - .lobytes 09fe9h - .lobytes 09feah - .lobytes 09febh - .lobytes 09fech - .lobytes 09fedh - .lobytes 09feeh - .lobytes 09fefh - .lobytes 09ff0h - .lobytes 09ff1h - .lobytes 09ff2h - .lobytes 09ff3h - .lobytes 09ff4h - .lobytes 09ff5h - .lobytes 09ff6h - .lobytes 09ff7h - .lobytes 09ff8h - .lobytes 09ff9h - .lobytes 09ffah - .lobytes 09ffbh - .lobytes 09ffch - .lobytes 09ffdh - .lobytes 09ffeh - .lobytes 09fffh - .lobytes 0a000h - .lobytes 0a001h - .lobytes 0a002h - .lobytes 0a003h - .lobytes 0a004h - .lobytes 0a005h - .lobytes 0a006h - .lobytes 0a007h - .lobytes 0a008h - .lobytes 0a009h - .lobytes 0a00ah - .lobytes 0a00bh - .lobytes 0a00ch - .lobytes 0a00dh - .lobytes 0a00eh - .lobytes 0a00fh - .lobytes 0afe1h - .lobytes 0afe2h - .lobytes 0afe3h - .lobytes 0afe4h - .lobytes 0afe5h - .lobytes 0afe6h - .lobytes 0afe7h - .lobytes 0afe8h - .lobytes 0afe9h - .lobytes 0afeah - .lobytes 0afebh - .lobytes 0afech - .lobytes 0afedh - .lobytes 0afeeh - .lobytes 0afefh - .lobytes 0aff0h - .lobytes 0aff1h - .lobytes 0aff2h - .lobytes 0aff3h - .lobytes 0aff4h - .lobytes 0aff5h - .lobytes 0aff6h - .lobytes 0aff7h - .lobytes 0aff8h - .lobytes 0aff9h - .lobytes 0affah - .lobytes 0affbh - .lobytes 0affch - .lobytes 0affdh - .lobytes 0affeh - .lobytes 0afffh - .lobytes 0b000h - .lobytes 0b001h - .lobytes 0b002h - .lobytes 0b003h - .lobytes 0b004h - .lobytes 0b005h - .lobytes 0b006h - .lobytes 0b007h - .lobytes 0b008h - .lobytes 0b009h - .lobytes 0b00ah - .lobytes 0b00bh - .lobytes 0b00ch - .lobytes 0b00dh - .lobytes 0b00eh - .lobytes 0b00fh - .lobytes 0bfe1h - .lobytes 0bfe2h - .lobytes 0bfe3h - .lobytes 0bfe4h - .lobytes 0bfe5h - .lobytes 0bfe6h - .lobytes 0bfe7h - .lobytes 0bfe8h - .lobytes 0bfe9h - .lobytes 0bfeah - .lobytes 0bfebh - .lobytes 0bfech - .lobytes 0bfedh - .lobytes 0bfeeh - .lobytes 0bfefh - .lobytes 0bff0h - .lobytes 0bff1h - .lobytes 0bff2h - .lobytes 0bff3h - .lobytes 0bff4h - .lobytes 0bff5h - .lobytes 0bff6h - .lobytes 0bff7h - .lobytes 0bff8h - .lobytes 0bff9h - .lobytes 0bffah - .lobytes 0bffbh - .lobytes 0bffch - .lobytes 0bffdh - .lobytes 0bffeh - .lobytes 0bfffh - .lobytes 0c000h - .lobytes 0c001h - .lobytes 0c002h - .lobytes 0c003h - .lobytes 0c004h - .lobytes 0c005h - .lobytes 0c006h - .lobytes 0c007h - .lobytes 0c008h - .lobytes 0c009h - .lobytes 0c00ah - .lobytes 0c00bh - .lobytes 0c00ch - .lobytes 0c00dh - .lobytes 0c00eh - .lobytes 0c00fh - .lobytes 0cfe1h - .lobytes 0cfe2h - .lobytes 0cfe3h - .lobytes 0cfe4h - .lobytes 0cfe5h - .lobytes 0cfe6h - .lobytes 0cfe7h - .lobytes 0cfe8h - .lobytes 0cfe9h - .lobytes 0cfeah - .lobytes 0cfebh - .lobytes 0cfech - .lobytes 0cfedh - .lobytes 0cfeeh - .lobytes 0cfefh - .lobytes 0cff0h - .lobytes 0cff1h - .lobytes 0cff2h - .lobytes 0cff3h - .lobytes 0cff4h - .lobytes 0cff5h - .lobytes 0cff6h - .lobytes 0cff7h - .lobytes 0cff8h - .lobytes 0cff9h - .lobytes 0cffah - .lobytes 0cffbh - .lobytes 0cffch - .lobytes 0cffdh - .lobytes 0cffeh - .lobytes 0cfffh - .lobytes 0d000h - .lobytes 0d001h - .lobytes 0d002h - .lobytes 0d003h - .lobytes 0d004h - .lobytes 0d005h - .lobytes 0d006h - .lobytes 0d007h - .lobytes 0d008h - .lobytes 0d009h - .lobytes 0d00ah - .lobytes 0d00bh - .lobytes 0d00ch - .lobytes 0d00dh - .lobytes 0d00eh - .lobytes 0d00fh - .lobytes 0dfe1h - .lobytes 0dfe2h - .lobytes 0dfe3h - .lobytes 0dfe4h - .lobytes 0dfe5h - .lobytes 0dfe6h - .lobytes 0dfe7h - .lobytes 0dfe8h - .lobytes 0dfe9h - .lobytes 0dfeah - .lobytes 0dfebh - .lobytes 0dfech - .lobytes 0dfedh - .lobytes 0dfeeh - .lobytes 0dfefh - .lobytes 0dff0h - .lobytes 0dff1h - .lobytes 0dff2h - .lobytes 0dff3h - .lobytes 0dff4h - .lobytes 0dff5h - .lobytes 0dff6h - .lobytes 0dff7h - .lobytes 0dff8h - .lobytes 0dff9h - .lobytes 0dffah - .lobytes 0dffbh - .lobytes 0dffch - .lobytes 0dffdh - .lobytes 0dffeh - .lobytes 0dfffh - .lobytes 0e000h - .lobytes 0e001h - .lobytes 0e002h - .lobytes 0e003h - .lobytes 0e004h - .lobytes 0e005h - .lobytes 0e006h - .lobytes 0e007h - .lobytes 0e008h - .lobytes 0e009h - .lobytes 0e00ah - .lobytes 0e00bh - .lobytes 0e00ch - .lobytes 0e00dh - .lobytes 0e00eh - .lobytes 0e00fh - .lobytes 0efe1h - .lobytes 0efe2h - .lobytes 0efe3h - .lobytes 0efe4h - .lobytes 0efe5h - .lobytes 0efe6h - .lobytes 0efe7h - .lobytes 0efe8h - .lobytes 0efe9h - .lobytes 0efeah - .lobytes 0efebh - .lobytes 0efech - .lobytes 0efedh - .lobytes 0efeeh - .lobytes 0efefh - .lobytes 0eff0h - .lobytes 0eff1h - .lobytes 0eff2h - .lobytes 0eff3h - .lobytes 0eff4h - .lobytes 0eff5h - .lobytes 0eff6h - .lobytes 0eff7h - .lobytes 0eff8h - .lobytes 0eff9h - .lobytes 0effah - .lobytes 0effbh - .lobytes 0effch - .lobytes 0effdh - .lobytes 0effeh - .lobytes 0efffh - .lobytes 0f000h - .lobytes 0f001h - .lobytes 0f002h - .lobytes 0f003h - .lobytes 0f004h - .lobytes 0f005h - .lobytes 0f006h - .lobytes 0f007h - .lobytes 0f008h - .lobytes 0f009h - .lobytes 0f00ah - .lobytes 0f00bh - .lobytes 0f00ch - .lobytes 0f00dh - .lobytes 0f00eh - .lobytes 0f00fh - .lobytes 0ffe1h - .lobytes 0ffe2h - .lobytes 0ffe3h - .lobytes 0ffe4h - .lobytes 0ffe5h - .lobytes 0ffe6h - .lobytes 0ffe7h - .lobytes 0ffe8h - .lobytes 0ffe9h - .lobytes 0ffeah - .lobytes 0ffebh - .lobytes 0ffech - .lobytes 0ffedh - .lobytes 0ffeeh - .lobytes 0ffefh - .lobytes 0fff0h - .lobytes 0fff1h - .lobytes 0fff2h - .lobytes 0fff3h - .lobytes 0fff4h - .lobytes 0fff5h - .lobytes 0fff6h - .lobytes 0fff7h - .lobytes 0fff8h - .lobytes 0fff9h - .lobytes 0fffah - .lobytes 0fffbh - .lobytes 0fffch - .lobytes 0fffdh - .lobytes 0fffeh - .lobytes 0ffffh + ; alternative hex values, always leading zero + .lobytes 00h + .lobytes 01h + .lobytes 02h + .lobytes 03h + .lobytes 04h + .lobytes 05h + .lobytes 06h + .lobytes 07h + .lobytes 08h + .lobytes 09h + .lobytes 0ah + .lobytes 0bh + .lobytes 0ch + .lobytes 0dh + .lobytes 0eh + .lobytes 0fh + .lobytes 010h + .lobytes 011h + .lobytes 012h + .lobytes 013h + .lobytes 070h + .lobytes 071h + .lobytes 072h + .lobytes 073h + .lobytes 074h + .lobytes 075h + .lobytes 076h + .lobytes 077h + .lobytes 078h + .lobytes 079h + .lobytes 07ah + .lobytes 07bh + .lobytes 07ch + .lobytes 07dh + .lobytes 07eh + .lobytes 07fh + .lobytes 080h + .lobytes 081h + .lobytes 082h + .lobytes 083h + .lobytes 084h + .lobytes 085h + .lobytes 086h + .lobytes 0f0h + .lobytes 0f1h + .lobytes 0f2h + .lobytes 0f3h + .lobytes 0f4h + .lobytes 0f5h + .lobytes 0f6h + .lobytes 0f7h + .lobytes 0f8h + .lobytes 0f9h + .lobytes 0fah + .lobytes 0fbh + .lobytes 0fch + .lobytes 0fdh + .lobytes 0feh + .lobytes 0ffh + .lobytes 0100h + .lobytes 0101h + .lobytes 0102h + .lobytes 0103h + .lobytes 0fd2h + .lobytes 0fd3h + .lobytes 0fd4h + .lobytes 0fd5h + .lobytes 0fd6h + .lobytes 0fd7h + .lobytes 0fd8h + .lobytes 0fd9h + .lobytes 0fdah + .lobytes 0fdbh + .lobytes 0fdch + .lobytes 0fddh + .lobytes 0fdeh + .lobytes 0fdfh + .lobytes 0fe0h + .lobytes 0fe1h + .lobytes 0fe2h + .lobytes 0fe3h + .lobytes 0fe4h + .lobytes 0fe5h + .lobytes 0fe6h + .lobytes 0fe7h + .lobytes 0fe8h + .lobytes 0fe9h + .lobytes 0feah + .lobytes 0febh + .lobytes 0fech + .lobytes 0fedh + .lobytes 0feeh + .lobytes 0fefh + .lobytes 0ff0h + .lobytes 0ff1h + .lobytes 0ff2h + .lobytes 0ff3h + .lobytes 0ff4h + .lobytes 0ff5h + .lobytes 0ff6h + .lobytes 0ff7h + .lobytes 0ff8h + .lobytes 0ff9h + .lobytes 0ffah + .lobytes 0ffbh + .lobytes 0ffch + .lobytes 0ffdh + .lobytes 0ffeh + .lobytes 0fffh + .lobytes 01000h + .lobytes 01001h + .lobytes 01002h + .lobytes 01003h + .lobytes 01004h + .lobytes 01005h + .lobytes 01006h + .lobytes 01007h + .lobytes 01008h + .lobytes 07ff0h + .lobytes 07ff1h + .lobytes 07ff2h + .lobytes 07ff3h + .lobytes 07ff4h + .lobytes 07ff5h + .lobytes 07ff6h + .lobytes 07ff7h + .lobytes 07ff8h + .lobytes 07ff9h + .lobytes 07ffah + .lobytes 07ffbh + .lobytes 07ffch + .lobytes 07ffdh + .lobytes 07ffeh + .lobytes 07fffh + .lobytes 08000h + .lobytes 08001h + .lobytes 08002h + .lobytes 08003h + .lobytes 08004h + .lobytes 08005h + .lobytes 08006h + .lobytes 08007h + .lobytes 08008h + .lobytes 08009h + .lobytes 0800ah + .lobytes 0800bh + .lobytes 09fe1h + .lobytes 09fe2h + .lobytes 09fe3h + .lobytes 09fe4h + .lobytes 09fe5h + .lobytes 09fe6h + .lobytes 09fe7h + .lobytes 09fe8h + .lobytes 09fe9h + .lobytes 09feah + .lobytes 09febh + .lobytes 09fech + .lobytes 09fedh + .lobytes 09feeh + .lobytes 09fefh + .lobytes 09ff0h + .lobytes 09ff1h + .lobytes 09ff2h + .lobytes 09ff3h + .lobytes 09ff4h + .lobytes 09ff5h + .lobytes 09ff6h + .lobytes 09ff7h + .lobytes 09ff8h + .lobytes 09ff9h + .lobytes 09ffah + .lobytes 09ffbh + .lobytes 09ffch + .lobytes 09ffdh + .lobytes 09ffeh + .lobytes 09fffh + .lobytes 0a000h + .lobytes 0a001h + .lobytes 0a002h + .lobytes 0a003h + .lobytes 0a004h + .lobytes 0a005h + .lobytes 0a006h + .lobytes 0a007h + .lobytes 0a008h + .lobytes 0a009h + .lobytes 0a00ah + .lobytes 0a00bh + .lobytes 0a00ch + .lobytes 0a00dh + .lobytes 0a00eh + .lobytes 0a00fh + .lobytes 0afe1h + .lobytes 0afe2h + .lobytes 0afe3h + .lobytes 0afe4h + .lobytes 0afe5h + .lobytes 0afe6h + .lobytes 0afe7h + .lobytes 0afe8h + .lobytes 0afe9h + .lobytes 0afeah + .lobytes 0afebh + .lobytes 0afech + .lobytes 0afedh + .lobytes 0afeeh + .lobytes 0afefh + .lobytes 0aff0h + .lobytes 0aff1h + .lobytes 0aff2h + .lobytes 0aff3h + .lobytes 0aff4h + .lobytes 0aff5h + .lobytes 0aff6h + .lobytes 0aff7h + .lobytes 0aff8h + .lobytes 0aff9h + .lobytes 0affah + .lobytes 0affbh + .lobytes 0affch + .lobytes 0affdh + .lobytes 0affeh + .lobytes 0afffh + .lobytes 0b000h + .lobytes 0b001h + .lobytes 0b002h + .lobytes 0b003h + .lobytes 0b004h + .lobytes 0b005h + .lobytes 0b006h + .lobytes 0b007h + .lobytes 0b008h + .lobytes 0b009h + .lobytes 0b00ah + .lobytes 0b00bh + .lobytes 0b00ch + .lobytes 0b00dh + .lobytes 0b00eh + .lobytes 0b00fh + .lobytes 0bfe1h + .lobytes 0bfe2h + .lobytes 0bfe3h + .lobytes 0bfe4h + .lobytes 0bfe5h + .lobytes 0bfe6h + .lobytes 0bfe7h + .lobytes 0bfe8h + .lobytes 0bfe9h + .lobytes 0bfeah + .lobytes 0bfebh + .lobytes 0bfech + .lobytes 0bfedh + .lobytes 0bfeeh + .lobytes 0bfefh + .lobytes 0bff0h + .lobytes 0bff1h + .lobytes 0bff2h + .lobytes 0bff3h + .lobytes 0bff4h + .lobytes 0bff5h + .lobytes 0bff6h + .lobytes 0bff7h + .lobytes 0bff8h + .lobytes 0bff9h + .lobytes 0bffah + .lobytes 0bffbh + .lobytes 0bffch + .lobytes 0bffdh + .lobytes 0bffeh + .lobytes 0bfffh + .lobytes 0c000h + .lobytes 0c001h + .lobytes 0c002h + .lobytes 0c003h + .lobytes 0c004h + .lobytes 0c005h + .lobytes 0c006h + .lobytes 0c007h + .lobytes 0c008h + .lobytes 0c009h + .lobytes 0c00ah + .lobytes 0c00bh + .lobytes 0c00ch + .lobytes 0c00dh + .lobytes 0c00eh + .lobytes 0c00fh + .lobytes 0cfe1h + .lobytes 0cfe2h + .lobytes 0cfe3h + .lobytes 0cfe4h + .lobytes 0cfe5h + .lobytes 0cfe6h + .lobytes 0cfe7h + .lobytes 0cfe8h + .lobytes 0cfe9h + .lobytes 0cfeah + .lobytes 0cfebh + .lobytes 0cfech + .lobytes 0cfedh + .lobytes 0cfeeh + .lobytes 0cfefh + .lobytes 0cff0h + .lobytes 0cff1h + .lobytes 0cff2h + .lobytes 0cff3h + .lobytes 0cff4h + .lobytes 0cff5h + .lobytes 0cff6h + .lobytes 0cff7h + .lobytes 0cff8h + .lobytes 0cff9h + .lobytes 0cffah + .lobytes 0cffbh + .lobytes 0cffch + .lobytes 0cffdh + .lobytes 0cffeh + .lobytes 0cfffh + .lobytes 0d000h + .lobytes 0d001h + .lobytes 0d002h + .lobytes 0d003h + .lobytes 0d004h + .lobytes 0d005h + .lobytes 0d006h + .lobytes 0d007h + .lobytes 0d008h + .lobytes 0d009h + .lobytes 0d00ah + .lobytes 0d00bh + .lobytes 0d00ch + .lobytes 0d00dh + .lobytes 0d00eh + .lobytes 0d00fh + .lobytes 0dfe1h + .lobytes 0dfe2h + .lobytes 0dfe3h + .lobytes 0dfe4h + .lobytes 0dfe5h + .lobytes 0dfe6h + .lobytes 0dfe7h + .lobytes 0dfe8h + .lobytes 0dfe9h + .lobytes 0dfeah + .lobytes 0dfebh + .lobytes 0dfech + .lobytes 0dfedh + .lobytes 0dfeeh + .lobytes 0dfefh + .lobytes 0dff0h + .lobytes 0dff1h + .lobytes 0dff2h + .lobytes 0dff3h + .lobytes 0dff4h + .lobytes 0dff5h + .lobytes 0dff6h + .lobytes 0dff7h + .lobytes 0dff8h + .lobytes 0dff9h + .lobytes 0dffah + .lobytes 0dffbh + .lobytes 0dffch + .lobytes 0dffdh + .lobytes 0dffeh + .lobytes 0dfffh + .lobytes 0e000h + .lobytes 0e001h + .lobytes 0e002h + .lobytes 0e003h + .lobytes 0e004h + .lobytes 0e005h + .lobytes 0e006h + .lobytes 0e007h + .lobytes 0e008h + .lobytes 0e009h + .lobytes 0e00ah + .lobytes 0e00bh + .lobytes 0e00ch + .lobytes 0e00dh + .lobytes 0e00eh + .lobytes 0e00fh + .lobytes 0efe1h + .lobytes 0efe2h + .lobytes 0efe3h + .lobytes 0efe4h + .lobytes 0efe5h + .lobytes 0efe6h + .lobytes 0efe7h + .lobytes 0efe8h + .lobytes 0efe9h + .lobytes 0efeah + .lobytes 0efebh + .lobytes 0efech + .lobytes 0efedh + .lobytes 0efeeh + .lobytes 0efefh + .lobytes 0eff0h + .lobytes 0eff1h + .lobytes 0eff2h + .lobytes 0eff3h + .lobytes 0eff4h + .lobytes 0eff5h + .lobytes 0eff6h + .lobytes 0eff7h + .lobytes 0eff8h + .lobytes 0eff9h + .lobytes 0effah + .lobytes 0effbh + .lobytes 0effch + .lobytes 0effdh + .lobytes 0effeh + .lobytes 0efffh + .lobytes 0f000h + .lobytes 0f001h + .lobytes 0f002h + .lobytes 0f003h + .lobytes 0f004h + .lobytes 0f005h + .lobytes 0f006h + .lobytes 0f007h + .lobytes 0f008h + .lobytes 0f009h + .lobytes 0f00ah + .lobytes 0f00bh + .lobytes 0f00ch + .lobytes 0f00dh + .lobytes 0f00eh + .lobytes 0f00fh + .lobytes 0ffe1h + .lobytes 0ffe2h + .lobytes 0ffe3h + .lobytes 0ffe4h + .lobytes 0ffe5h + .lobytes 0ffe6h + .lobytes 0ffe7h + .lobytes 0ffe8h + .lobytes 0ffe9h + .lobytes 0ffeah + .lobytes 0ffebh + .lobytes 0ffech + .lobytes 0ffedh + .lobytes 0ffeeh + .lobytes 0ffefh + .lobytes 0fff0h + .lobytes 0fff1h + .lobytes 0fff2h + .lobytes 0fff3h + .lobytes 0fff4h + .lobytes 0fff5h + .lobytes 0fff6h + .lobytes 0fff7h + .lobytes 0fff8h + .lobytes 0fff9h + .lobytes 0fffah + .lobytes 0fffbh + .lobytes 0fffch + .lobytes 0fffdh + .lobytes 0fffeh + .lobytes 0ffffh - ; binary values, variable length - .lobytes %0 - .lobytes %01 - .lobytes %010 - .lobytes %011 - .lobytes %0100 - .lobytes %0101 - .lobytes %0110 - .lobytes %0111 - .lobytes %01000 - .lobytes %01001 - .lobytes %01010 - .lobytes %01011 - .lobytes %01100 - .lobytes %01101 - .lobytes %01110 - .lobytes %01111 - .lobytes %010000 - .lobytes %010001 - .lobytes %010010 - .lobytes %010011 - .lobytes %01110000 - .lobytes %01110001 - .lobytes %01110010 - .lobytes %01110011 - .lobytes %01110100 - .lobytes %01110101 - .lobytes %01110110 - .lobytes %01110111 - .lobytes %01111000 - .lobytes %01111001 - .lobytes %01111010 - .lobytes %01111011 - .lobytes %01111100 - .lobytes %01111101 - .lobytes %01111110 - .lobytes %01111111 - .lobytes %010000000 - .lobytes %010000001 - .lobytes %010000010 - .lobytes %010000011 - .lobytes %010000100 - .lobytes %010000101 - .lobytes %010000110 - .lobytes %011110000 - .lobytes %011110001 - .lobytes %011110010 - .lobytes %011110011 - .lobytes %011110100 - .lobytes %011110101 - .lobytes %011110110 - .lobytes %011110111 - .lobytes %011111000 - .lobytes %011111001 - .lobytes %011111010 - .lobytes %011111011 - .lobytes %011111100 - .lobytes %011111101 - .lobytes %011111110 - .lobytes %011111111 - .lobytes %100000000 - .lobytes %100000001 - .lobytes %100000010 - .lobytes %100000011 - .lobytes %111111010010 - .lobytes %111111010011 - .lobytes %111111010100 - .lobytes %111111010101 - .lobytes %111111010110 - .lobytes %111111010111 - .lobytes %111111011000 - .lobytes %111111011001 - .lobytes %111111011010 - .lobytes %111111011011 - .lobytes %111111011100 - .lobytes %111111011101 - .lobytes %111111011110 - .lobytes %111111011111 - .lobytes %111111100000 - .lobytes %111111100001 - .lobytes %111111100010 - .lobytes %111111100011 - .lobytes %111111100100 - .lobytes %111111100101 - .lobytes %111111100110 - .lobytes %111111100111 - .lobytes %111111101000 - .lobytes %111111101001 - .lobytes %111111101010 - .lobytes %111111101011 - .lobytes %111111101100 - .lobytes %111111101101 - .lobytes %111111101110 - .lobytes %111111101111 - .lobytes %111111110000 - .lobytes %111111110001 - .lobytes %111111110010 - .lobytes %111111110011 - .lobytes %111111110100 - .lobytes %111111110101 - .lobytes %111111110110 - .lobytes %111111110111 - .lobytes %111111111000 - .lobytes %111111111001 - .lobytes %111111111010 - .lobytes %111111111011 - .lobytes %111111111100 - .lobytes %111111111101 - .lobytes %111111111110 - .lobytes %111111111111 - .lobytes %1000000000000 - .lobytes %1000000000001 - .lobytes %1000000000010 - .lobytes %1000000000011 - .lobytes %1000000000100 - .lobytes %1000000000101 - .lobytes %1000000000110 - .lobytes %1000000000111 - .lobytes %1000000001000 - .lobytes %111111111110000 - .lobytes %111111111110001 - .lobytes %111111111110010 - .lobytes %111111111110011 - .lobytes %111111111110100 - .lobytes %111111111110101 - .lobytes %111111111110110 - .lobytes %111111111110111 - .lobytes %111111111111000 - .lobytes %111111111111001 - .lobytes %111111111111010 - .lobytes %111111111111011 - .lobytes %111111111111100 - .lobytes %111111111111101 - .lobytes %111111111111110 - .lobytes %111111111111111 - .lobytes %1000000000000000 - .lobytes %1000000000000001 - .lobytes %1000000000000010 - .lobytes %1000000000000011 - .lobytes %1000000000000100 - .lobytes %1000000000000101 - .lobytes %1000000000000110 - .lobytes %1000000000000111 - .lobytes %1000000000001000 - .lobytes %1000000000001001 - .lobytes %1000000000001010 - .lobytes %1000000000001011 - .lobytes %1001111111100001 - .lobytes %1001111111100010 - .lobytes %1001111111100011 - .lobytes %1001111111100100 - .lobytes %1001111111100101 - .lobytes %1001111111100110 - .lobytes %1001111111100111 - .lobytes %1001111111101000 - .lobytes %1001111111101001 - .lobytes %1001111111101010 - .lobytes %1001111111101011 - .lobytes %1001111111101100 - .lobytes %1001111111101101 - .lobytes %1001111111101110 - .lobytes %1001111111101111 - .lobytes %1001111111110000 - .lobytes %1001111111110001 - .lobytes %1001111111110010 - .lobytes %1001111111110011 - .lobytes %1001111111110100 - .lobytes %1001111111110101 - .lobytes %1001111111110110 - .lobytes %1001111111110111 - .lobytes %1001111111111000 - .lobytes %1001111111111001 - .lobytes %1001111111111010 - .lobytes %1001111111111011 - .lobytes %1001111111111100 - .lobytes %1001111111111101 - .lobytes %1001111111111110 - .lobytes %1001111111111111 - .lobytes %1010000000000000 - .lobytes %1010000000000001 - .lobytes %1010000000000010 - .lobytes %1010000000000011 - .lobytes %1010000000000100 - .lobytes %1010000000000101 - .lobytes %1010000000000110 - .lobytes %1010000000000111 - .lobytes %1010000000001000 - .lobytes %1010000000001001 - .lobytes %1010000000001010 - .lobytes %1010000000001011 - .lobytes %1010000000001100 - .lobytes %1010000000001101 - .lobytes %1010000000001110 - .lobytes %1010000000001111 - .lobytes %1010111111100001 - .lobytes %1010111111100010 - .lobytes %1010111111100011 - .lobytes %1010111111100100 - .lobytes %1010111111100101 - .lobytes %1010111111100110 - .lobytes %1010111111100111 - .lobytes %1010111111101000 - .lobytes %1010111111101001 - .lobytes %1010111111101010 - .lobytes %1010111111101011 - .lobytes %1010111111101100 - .lobytes %1010111111101101 - .lobytes %1010111111101110 - .lobytes %1010111111101111 - .lobytes %1010111111110000 - .lobytes %1010111111110001 - .lobytes %1010111111110010 - .lobytes %1010111111110011 - .lobytes %1010111111110100 - .lobytes %1010111111110101 - .lobytes %1010111111110110 - .lobytes %1010111111110111 - .lobytes %1010111111111000 - .lobytes %1010111111111001 - .lobytes %1010111111111010 - .lobytes %1010111111111011 - .lobytes %1010111111111100 - .lobytes %1010111111111101 - .lobytes %1010111111111110 - .lobytes %1010111111111111 - .lobytes %1011000000000000 - .lobytes %1011000000000001 - .lobytes %1011000000000010 - .lobytes %1011000000000011 - .lobytes %1011000000000100 - .lobytes %1011000000000101 - .lobytes %1011000000000110 - .lobytes %1011000000000111 - .lobytes %1011000000001000 - .lobytes %1011000000001001 - .lobytes %1011000000001010 - .lobytes %1011000000001011 - .lobytes %1011000000001100 - .lobytes %1011000000001101 - .lobytes %1011000000001110 - .lobytes %1011000000001111 - .lobytes %1011111111100001 - .lobytes %1011111111100010 - .lobytes %1011111111100011 - .lobytes %1011111111100100 - .lobytes %1011111111100101 - .lobytes %1011111111100110 - .lobytes %1011111111100111 - .lobytes %1011111111101000 - .lobytes %1011111111101001 - .lobytes %1011111111101010 - .lobytes %1011111111101011 - .lobytes %1011111111101100 - .lobytes %1011111111101101 - .lobytes %1011111111101110 - .lobytes %1011111111101111 - .lobytes %1011111111110000 - .lobytes %1011111111110001 - .lobytes %1011111111110010 - .lobytes %1011111111110011 - .lobytes %1011111111110100 - .lobytes %1011111111110101 - .lobytes %1011111111110110 - .lobytes %1011111111110111 - .lobytes %1011111111111000 - .lobytes %1011111111111001 - .lobytes %1011111111111010 - .lobytes %1011111111111011 - .lobytes %1011111111111100 - .lobytes %1011111111111101 - .lobytes %1011111111111110 - .lobytes %1011111111111111 - .lobytes %1100000000000000 - .lobytes %1100000000000001 - .lobytes %1100000000000010 - .lobytes %1100000000000011 - .lobytes %1100000000000100 - .lobytes %1100000000000101 - .lobytes %1100000000000110 - .lobytes %1100000000000111 - .lobytes %1100000000001000 - .lobytes %1100000000001001 - .lobytes %1100000000001010 - .lobytes %1100000000001011 - .lobytes %1100000000001100 - .lobytes %1100000000001101 - .lobytes %1100000000001110 - .lobytes %1100000000001111 - .lobytes %1100111111100001 - .lobytes %1100111111100010 - .lobytes %1100111111100011 - .lobytes %1100111111100100 - .lobytes %1100111111100101 - .lobytes %1100111111100110 - .lobytes %1100111111100111 - .lobytes %1100111111101000 - .lobytes %1100111111101001 - .lobytes %1100111111101010 - .lobytes %1100111111101011 - .lobytes %1100111111101100 - .lobytes %1100111111101101 - .lobytes %1100111111101110 - .lobytes %1100111111101111 - .lobytes %1100111111110000 - .lobytes %1100111111110001 - .lobytes %1100111111110010 - .lobytes %1100111111110011 - .lobytes %1100111111110100 - .lobytes %1100111111110101 - .lobytes %1100111111110110 - .lobytes %1100111111110111 - .lobytes %1100111111111000 - .lobytes %1100111111111001 - .lobytes %1100111111111010 - .lobytes %1100111111111011 - .lobytes %1100111111111100 - .lobytes %1100111111111101 - .lobytes %1100111111111110 - .lobytes %1100111111111111 - .lobytes %1101000000000000 - .lobytes %1101000000000001 - .lobytes %1101000000000010 - .lobytes %1101000000000011 - .lobytes %1101000000000100 - .lobytes %1101000000000101 - .lobytes %1101000000000110 - .lobytes %1101000000000111 - .lobytes %1101000000001000 - .lobytes %1101000000001001 - .lobytes %1101000000001010 - .lobytes %1101000000001011 - .lobytes %1101000000001100 - .lobytes %1101000000001101 - .lobytes %1101000000001110 - .lobytes %1101000000001111 - .lobytes %1101111111100001 - .lobytes %1101111111100010 - .lobytes %1101111111100011 - .lobytes %1101111111100100 - .lobytes %1101111111100101 - .lobytes %1101111111100110 - .lobytes %1101111111100111 - .lobytes %1101111111101000 - .lobytes %1101111111101001 - .lobytes %1101111111101010 - .lobytes %1101111111101011 - .lobytes %1101111111101100 - .lobytes %1101111111101101 - .lobytes %1101111111101110 - .lobytes %1101111111101111 - .lobytes %1101111111110000 - .lobytes %1101111111110001 - .lobytes %1101111111110010 - .lobytes %1101111111110011 - .lobytes %1101111111110100 - .lobytes %1101111111110101 - .lobytes %1101111111110110 - .lobytes %1101111111110111 - .lobytes %1101111111111000 - .lobytes %1101111111111001 - .lobytes %1101111111111010 - .lobytes %1101111111111011 - .lobytes %1101111111111100 - .lobytes %1101111111111101 - .lobytes %1101111111111110 - .lobytes %1101111111111111 - .lobytes %1110000000000000 - .lobytes %1110000000000001 - .lobytes %1110000000000010 - .lobytes %1110000000000011 - .lobytes %1110000000000100 - .lobytes %1110000000000101 - .lobytes %1110000000000110 - .lobytes %1110000000000111 - .lobytes %1110000000001000 - .lobytes %1110000000001001 - .lobytes %1110000000001010 - .lobytes %1110000000001011 - .lobytes %1110000000001100 - .lobytes %1110000000001101 - .lobytes %1110000000001110 - .lobytes %1110000000001111 - .lobytes %1110111111100001 - .lobytes %1110111111100010 - .lobytes %1110111111100011 - .lobytes %1110111111100100 - .lobytes %1110111111100101 - .lobytes %1110111111100110 - .lobytes %1110111111100111 - .lobytes %1110111111101000 - .lobytes %1110111111101001 - .lobytes %1110111111101010 - .lobytes %1110111111101011 - .lobytes %1110111111101100 - .lobytes %1110111111101101 - .lobytes %1110111111101110 - .lobytes %1110111111101111 - .lobytes %1110111111110000 - .lobytes %1110111111110001 - .lobytes %1110111111110010 - .lobytes %1110111111110011 - .lobytes %1110111111110100 - .lobytes %1110111111110101 - .lobytes %1110111111110110 - .lobytes %1110111111110111 - .lobytes %1110111111111000 - .lobytes %1110111111111001 - .lobytes %1110111111111010 - .lobytes %1110111111111011 - .lobytes %1110111111111100 - .lobytes %1110111111111101 - .lobytes %1110111111111110 - .lobytes %1110111111111111 - .lobytes %1111000000000000 - .lobytes %1111000000000001 - .lobytes %1111000000000010 - .lobytes %1111000000000011 - .lobytes %1111000000000100 - .lobytes %1111000000000101 - .lobytes %1111000000000110 - .lobytes %1111000000000111 - .lobytes %1111000000001000 - .lobytes %1111000000001001 - .lobytes %1111000000001010 - .lobytes %1111000000001011 - .lobytes %1111000000001100 - .lobytes %1111000000001101 - .lobytes %1111000000001110 - .lobytes %1111000000001111 - .lobytes %1111111111100001 - .lobytes %1111111111100010 - .lobytes %1111111111100011 - .lobytes %1111111111100100 - .lobytes %1111111111100101 - .lobytes %1111111111100110 - .lobytes %1111111111100111 - .lobytes %1111111111101000 - .lobytes %1111111111101001 - .lobytes %1111111111101010 - .lobytes %1111111111101011 - .lobytes %1111111111101100 - .lobytes %1111111111101101 - .lobytes %1111111111101110 - .lobytes %1111111111101111 - .lobytes %1111111111110000 - .lobytes %1111111111110001 - .lobytes %1111111111110010 - .lobytes %1111111111110011 - .lobytes %1111111111110100 - .lobytes %1111111111110101 - .lobytes %1111111111110110 - .lobytes %1111111111110111 - .lobytes %1111111111111000 - .lobytes %1111111111111001 - .lobytes %1111111111111010 - .lobytes %1111111111111011 - .lobytes %1111111111111100 - .lobytes %1111111111111101 - .lobytes %1111111111111110 - .lobytes %1111111111111111 + ; binary values, variable length + .lobytes %0 + .lobytes %01 + .lobytes %010 + .lobytes %011 + .lobytes %0100 + .lobytes %0101 + .lobytes %0110 + .lobytes %0111 + .lobytes %01000 + .lobytes %01001 + .lobytes %01010 + .lobytes %01011 + .lobytes %01100 + .lobytes %01101 + .lobytes %01110 + .lobytes %01111 + .lobytes %010000 + .lobytes %010001 + .lobytes %010010 + .lobytes %010011 + .lobytes %01110000 + .lobytes %01110001 + .lobytes %01110010 + .lobytes %01110011 + .lobytes %01110100 + .lobytes %01110101 + .lobytes %01110110 + .lobytes %01110111 + .lobytes %01111000 + .lobytes %01111001 + .lobytes %01111010 + .lobytes %01111011 + .lobytes %01111100 + .lobytes %01111101 + .lobytes %01111110 + .lobytes %01111111 + .lobytes %010000000 + .lobytes %010000001 + .lobytes %010000010 + .lobytes %010000011 + .lobytes %010000100 + .lobytes %010000101 + .lobytes %010000110 + .lobytes %011110000 + .lobytes %011110001 + .lobytes %011110010 + .lobytes %011110011 + .lobytes %011110100 + .lobytes %011110101 + .lobytes %011110110 + .lobytes %011110111 + .lobytes %011111000 + .lobytes %011111001 + .lobytes %011111010 + .lobytes %011111011 + .lobytes %011111100 + .lobytes %011111101 + .lobytes %011111110 + .lobytes %011111111 + .lobytes %100000000 + .lobytes %100000001 + .lobytes %100000010 + .lobytes %100000011 + .lobytes %111111010010 + .lobytes %111111010011 + .lobytes %111111010100 + .lobytes %111111010101 + .lobytes %111111010110 + .lobytes %111111010111 + .lobytes %111111011000 + .lobytes %111111011001 + .lobytes %111111011010 + .lobytes %111111011011 + .lobytes %111111011100 + .lobytes %111111011101 + .lobytes %111111011110 + .lobytes %111111011111 + .lobytes %111111100000 + .lobytes %111111100001 + .lobytes %111111100010 + .lobytes %111111100011 + .lobytes %111111100100 + .lobytes %111111100101 + .lobytes %111111100110 + .lobytes %111111100111 + .lobytes %111111101000 + .lobytes %111111101001 + .lobytes %111111101010 + .lobytes %111111101011 + .lobytes %111111101100 + .lobytes %111111101101 + .lobytes %111111101110 + .lobytes %111111101111 + .lobytes %111111110000 + .lobytes %111111110001 + .lobytes %111111110010 + .lobytes %111111110011 + .lobytes %111111110100 + .lobytes %111111110101 + .lobytes %111111110110 + .lobytes %111111110111 + .lobytes %111111111000 + .lobytes %111111111001 + .lobytes %111111111010 + .lobytes %111111111011 + .lobytes %111111111100 + .lobytes %111111111101 + .lobytes %111111111110 + .lobytes %111111111111 + .lobytes %1000000000000 + .lobytes %1000000000001 + .lobytes %1000000000010 + .lobytes %1000000000011 + .lobytes %1000000000100 + .lobytes %1000000000101 + .lobytes %1000000000110 + .lobytes %1000000000111 + .lobytes %1000000001000 + .lobytes %111111111110000 + .lobytes %111111111110001 + .lobytes %111111111110010 + .lobytes %111111111110011 + .lobytes %111111111110100 + .lobytes %111111111110101 + .lobytes %111111111110110 + .lobytes %111111111110111 + .lobytes %111111111111000 + .lobytes %111111111111001 + .lobytes %111111111111010 + .lobytes %111111111111011 + .lobytes %111111111111100 + .lobytes %111111111111101 + .lobytes %111111111111110 + .lobytes %111111111111111 + .lobytes %1000000000000000 + .lobytes %1000000000000001 + .lobytes %1000000000000010 + .lobytes %1000000000000011 + .lobytes %1000000000000100 + .lobytes %1000000000000101 + .lobytes %1000000000000110 + .lobytes %1000000000000111 + .lobytes %1000000000001000 + .lobytes %1000000000001001 + .lobytes %1000000000001010 + .lobytes %1000000000001011 + .lobytes %1001111111100001 + .lobytes %1001111111100010 + .lobytes %1001111111100011 + .lobytes %1001111111100100 + .lobytes %1001111111100101 + .lobytes %1001111111100110 + .lobytes %1001111111100111 + .lobytes %1001111111101000 + .lobytes %1001111111101001 + .lobytes %1001111111101010 + .lobytes %1001111111101011 + .lobytes %1001111111101100 + .lobytes %1001111111101101 + .lobytes %1001111111101110 + .lobytes %1001111111101111 + .lobytes %1001111111110000 + .lobytes %1001111111110001 + .lobytes %1001111111110010 + .lobytes %1001111111110011 + .lobytes %1001111111110100 + .lobytes %1001111111110101 + .lobytes %1001111111110110 + .lobytes %1001111111110111 + .lobytes %1001111111111000 + .lobytes %1001111111111001 + .lobytes %1001111111111010 + .lobytes %1001111111111011 + .lobytes %1001111111111100 + .lobytes %1001111111111101 + .lobytes %1001111111111110 + .lobytes %1001111111111111 + .lobytes %1010000000000000 + .lobytes %1010000000000001 + .lobytes %1010000000000010 + .lobytes %1010000000000011 + .lobytes %1010000000000100 + .lobytes %1010000000000101 + .lobytes %1010000000000110 + .lobytes %1010000000000111 + .lobytes %1010000000001000 + .lobytes %1010000000001001 + .lobytes %1010000000001010 + .lobytes %1010000000001011 + .lobytes %1010000000001100 + .lobytes %1010000000001101 + .lobytes %1010000000001110 + .lobytes %1010000000001111 + .lobytes %1010111111100001 + .lobytes %1010111111100010 + .lobytes %1010111111100011 + .lobytes %1010111111100100 + .lobytes %1010111111100101 + .lobytes %1010111111100110 + .lobytes %1010111111100111 + .lobytes %1010111111101000 + .lobytes %1010111111101001 + .lobytes %1010111111101010 + .lobytes %1010111111101011 + .lobytes %1010111111101100 + .lobytes %1010111111101101 + .lobytes %1010111111101110 + .lobytes %1010111111101111 + .lobytes %1010111111110000 + .lobytes %1010111111110001 + .lobytes %1010111111110010 + .lobytes %1010111111110011 + .lobytes %1010111111110100 + .lobytes %1010111111110101 + .lobytes %1010111111110110 + .lobytes %1010111111110111 + .lobytes %1010111111111000 + .lobytes %1010111111111001 + .lobytes %1010111111111010 + .lobytes %1010111111111011 + .lobytes %1010111111111100 + .lobytes %1010111111111101 + .lobytes %1010111111111110 + .lobytes %1010111111111111 + .lobytes %1011000000000000 + .lobytes %1011000000000001 + .lobytes %1011000000000010 + .lobytes %1011000000000011 + .lobytes %1011000000000100 + .lobytes %1011000000000101 + .lobytes %1011000000000110 + .lobytes %1011000000000111 + .lobytes %1011000000001000 + .lobytes %1011000000001001 + .lobytes %1011000000001010 + .lobytes %1011000000001011 + .lobytes %1011000000001100 + .lobytes %1011000000001101 + .lobytes %1011000000001110 + .lobytes %1011000000001111 + .lobytes %1011111111100001 + .lobytes %1011111111100010 + .lobytes %1011111111100011 + .lobytes %1011111111100100 + .lobytes %1011111111100101 + .lobytes %1011111111100110 + .lobytes %1011111111100111 + .lobytes %1011111111101000 + .lobytes %1011111111101001 + .lobytes %1011111111101010 + .lobytes %1011111111101011 + .lobytes %1011111111101100 + .lobytes %1011111111101101 + .lobytes %1011111111101110 + .lobytes %1011111111101111 + .lobytes %1011111111110000 + .lobytes %1011111111110001 + .lobytes %1011111111110010 + .lobytes %1011111111110011 + .lobytes %1011111111110100 + .lobytes %1011111111110101 + .lobytes %1011111111110110 + .lobytes %1011111111110111 + .lobytes %1011111111111000 + .lobytes %1011111111111001 + .lobytes %1011111111111010 + .lobytes %1011111111111011 + .lobytes %1011111111111100 + .lobytes %1011111111111101 + .lobytes %1011111111111110 + .lobytes %1011111111111111 + .lobytes %1100000000000000 + .lobytes %1100000000000001 + .lobytes %1100000000000010 + .lobytes %1100000000000011 + .lobytes %1100000000000100 + .lobytes %1100000000000101 + .lobytes %1100000000000110 + .lobytes %1100000000000111 + .lobytes %1100000000001000 + .lobytes %1100000000001001 + .lobytes %1100000000001010 + .lobytes %1100000000001011 + .lobytes %1100000000001100 + .lobytes %1100000000001101 + .lobytes %1100000000001110 + .lobytes %1100000000001111 + .lobytes %1100111111100001 + .lobytes %1100111111100010 + .lobytes %1100111111100011 + .lobytes %1100111111100100 + .lobytes %1100111111100101 + .lobytes %1100111111100110 + .lobytes %1100111111100111 + .lobytes %1100111111101000 + .lobytes %1100111111101001 + .lobytes %1100111111101010 + .lobytes %1100111111101011 + .lobytes %1100111111101100 + .lobytes %1100111111101101 + .lobytes %1100111111101110 + .lobytes %1100111111101111 + .lobytes %1100111111110000 + .lobytes %1100111111110001 + .lobytes %1100111111110010 + .lobytes %1100111111110011 + .lobytes %1100111111110100 + .lobytes %1100111111110101 + .lobytes %1100111111110110 + .lobytes %1100111111110111 + .lobytes %1100111111111000 + .lobytes %1100111111111001 + .lobytes %1100111111111010 + .lobytes %1100111111111011 + .lobytes %1100111111111100 + .lobytes %1100111111111101 + .lobytes %1100111111111110 + .lobytes %1100111111111111 + .lobytes %1101000000000000 + .lobytes %1101000000000001 + .lobytes %1101000000000010 + .lobytes %1101000000000011 + .lobytes %1101000000000100 + .lobytes %1101000000000101 + .lobytes %1101000000000110 + .lobytes %1101000000000111 + .lobytes %1101000000001000 + .lobytes %1101000000001001 + .lobytes %1101000000001010 + .lobytes %1101000000001011 + .lobytes %1101000000001100 + .lobytes %1101000000001101 + .lobytes %1101000000001110 + .lobytes %1101000000001111 + .lobytes %1101111111100001 + .lobytes %1101111111100010 + .lobytes %1101111111100011 + .lobytes %1101111111100100 + .lobytes %1101111111100101 + .lobytes %1101111111100110 + .lobytes %1101111111100111 + .lobytes %1101111111101000 + .lobytes %1101111111101001 + .lobytes %1101111111101010 + .lobytes %1101111111101011 + .lobytes %1101111111101100 + .lobytes %1101111111101101 + .lobytes %1101111111101110 + .lobytes %1101111111101111 + .lobytes %1101111111110000 + .lobytes %1101111111110001 + .lobytes %1101111111110010 + .lobytes %1101111111110011 + .lobytes %1101111111110100 + .lobytes %1101111111110101 + .lobytes %1101111111110110 + .lobytes %1101111111110111 + .lobytes %1101111111111000 + .lobytes %1101111111111001 + .lobytes %1101111111111010 + .lobytes %1101111111111011 + .lobytes %1101111111111100 + .lobytes %1101111111111101 + .lobytes %1101111111111110 + .lobytes %1101111111111111 + .lobytes %1110000000000000 + .lobytes %1110000000000001 + .lobytes %1110000000000010 + .lobytes %1110000000000011 + .lobytes %1110000000000100 + .lobytes %1110000000000101 + .lobytes %1110000000000110 + .lobytes %1110000000000111 + .lobytes %1110000000001000 + .lobytes %1110000000001001 + .lobytes %1110000000001010 + .lobytes %1110000000001011 + .lobytes %1110000000001100 + .lobytes %1110000000001101 + .lobytes %1110000000001110 + .lobytes %1110000000001111 + .lobytes %1110111111100001 + .lobytes %1110111111100010 + .lobytes %1110111111100011 + .lobytes %1110111111100100 + .lobytes %1110111111100101 + .lobytes %1110111111100110 + .lobytes %1110111111100111 + .lobytes %1110111111101000 + .lobytes %1110111111101001 + .lobytes %1110111111101010 + .lobytes %1110111111101011 + .lobytes %1110111111101100 + .lobytes %1110111111101101 + .lobytes %1110111111101110 + .lobytes %1110111111101111 + .lobytes %1110111111110000 + .lobytes %1110111111110001 + .lobytes %1110111111110010 + .lobytes %1110111111110011 + .lobytes %1110111111110100 + .lobytes %1110111111110101 + .lobytes %1110111111110110 + .lobytes %1110111111110111 + .lobytes %1110111111111000 + .lobytes %1110111111111001 + .lobytes %1110111111111010 + .lobytes %1110111111111011 + .lobytes %1110111111111100 + .lobytes %1110111111111101 + .lobytes %1110111111111110 + .lobytes %1110111111111111 + .lobytes %1111000000000000 + .lobytes %1111000000000001 + .lobytes %1111000000000010 + .lobytes %1111000000000011 + .lobytes %1111000000000100 + .lobytes %1111000000000101 + .lobytes %1111000000000110 + .lobytes %1111000000000111 + .lobytes %1111000000001000 + .lobytes %1111000000001001 + .lobytes %1111000000001010 + .lobytes %1111000000001011 + .lobytes %1111000000001100 + .lobytes %1111000000001101 + .lobytes %1111000000001110 + .lobytes %1111000000001111 + .lobytes %1111111111100001 + .lobytes %1111111111100010 + .lobytes %1111111111100011 + .lobytes %1111111111100100 + .lobytes %1111111111100101 + .lobytes %1111111111100110 + .lobytes %1111111111100111 + .lobytes %1111111111101000 + .lobytes %1111111111101001 + .lobytes %1111111111101010 + .lobytes %1111111111101011 + .lobytes %1111111111101100 + .lobytes %1111111111101101 + .lobytes %1111111111101110 + .lobytes %1111111111101111 + .lobytes %1111111111110000 + .lobytes %1111111111110001 + .lobytes %1111111111110010 + .lobytes %1111111111110011 + .lobytes %1111111111110100 + .lobytes %1111111111110101 + .lobytes %1111111111110110 + .lobytes %1111111111110111 + .lobytes %1111111111111000 + .lobytes %1111111111111001 + .lobytes %1111111111111010 + .lobytes %1111111111111011 + .lobytes %1111111111111100 + .lobytes %1111111111111101 + .lobytes %1111111111111110 + .lobytes %1111111111111111 - ; binary values, full length - .lobytes %0000000000000000 - .lobytes %0000000000000001 - .lobytes %0000000000000010 - .lobytes %0000000000000011 - .lobytes %0000000000000100 - .lobytes %0000000000000101 - .lobytes %0000000000000110 - .lobytes %0000000000000111 - .lobytes %0000000000001000 - .lobytes %0000000000001001 - .lobytes %0000000000001010 - .lobytes %0000000000001011 - .lobytes %0000000000001100 - .lobytes %0000000000001101 - .lobytes %0000000000001110 - .lobytes %0000000000001111 - .lobytes %0000000000010000 - .lobytes %0000000000010001 - .lobytes %0000000000010010 - .lobytes %0000000000010011 - .lobytes %0000000001110000 - .lobytes %0000000001110001 - .lobytes %0000000001110010 - .lobytes %0000000001110011 - .lobytes %0000000001110100 - .lobytes %0000000001110101 - .lobytes %0000000001110110 - .lobytes %0000000001110111 - .lobytes %0000000001111000 - .lobytes %0000000001111001 - .lobytes %0000000001111010 - .lobytes %0000000001111011 - .lobytes %0000000001111100 - .lobytes %0000000001111101 - .lobytes %0000000001111110 - .lobytes %0000000001111111 - .lobytes %0000000010000000 - .lobytes %0000000010000001 - .lobytes %0000000010000010 - .lobytes %0000000010000011 - .lobytes %0000000010000100 - .lobytes %0000000010000101 - .lobytes %0000000010000110 - .lobytes %0000000011110000 - .lobytes %0000000011110001 - .lobytes %0000000011110010 - .lobytes %0000000011110011 - .lobytes %0000000011110100 - .lobytes %0000000011110101 - .lobytes %0000000011110110 - .lobytes %0000000011110111 - .lobytes %0000000011111000 - .lobytes %0000000011111001 - .lobytes %0000000011111010 - .lobytes %0000000011111011 - .lobytes %0000000011111100 - .lobytes %0000000011111101 - .lobytes %0000000011111110 - .lobytes %0000000011111111 - .lobytes %0000000100000000 - .lobytes %0000000100000001 - .lobytes %0000000100000010 - .lobytes %0000000100000011 - .lobytes %0000111111010010 - .lobytes %0000111111010011 - .lobytes %0000111111010100 - .lobytes %0000111111010101 - .lobytes %0000111111010110 - .lobytes %0000111111010111 - .lobytes %0000111111011000 - .lobytes %0000111111011001 - .lobytes %0000111111011010 - .lobytes %0000111111011011 - .lobytes %0000111111011100 - .lobytes %0000111111011101 - .lobytes %0000111111011110 - .lobytes %0000111111011111 - .lobytes %0000111111100000 - .lobytes %0000111111100001 - .lobytes %0000111111100010 - .lobytes %0000111111100011 - .lobytes %0000111111100100 - .lobytes %0000111111100101 - .lobytes %0000111111100110 - .lobytes %0000111111100111 - .lobytes %0000111111101000 - .lobytes %0000111111101001 - .lobytes %0000111111101010 - .lobytes %0000111111101011 - .lobytes %0000111111101100 - .lobytes %0000111111101101 - .lobytes %0000111111101110 - .lobytes %0000111111101111 - .lobytes %0000111111110000 - .lobytes %0000111111110001 - .lobytes %0000111111110010 - .lobytes %0000111111110011 - .lobytes %0000111111110100 - .lobytes %0000111111110101 - .lobytes %0000111111110110 - .lobytes %0000111111110111 - .lobytes %0000111111111000 - .lobytes %0000111111111001 - .lobytes %0000111111111010 - .lobytes %0000111111111011 - .lobytes %0000111111111100 - .lobytes %0000111111111101 - .lobytes %0000111111111110 - .lobytes %0000111111111111 - .lobytes %0001000000000000 - .lobytes %0001000000000001 - .lobytes %0001000000000010 - .lobytes %0001000000000011 - .lobytes %0001000000000100 - .lobytes %0001000000000101 - .lobytes %0001000000000110 - .lobytes %0001000000000111 - .lobytes %0001000000001000 - .lobytes %0111111111110000 - .lobytes %0111111111110001 - .lobytes %0111111111110010 - .lobytes %0111111111110011 - .lobytes %0111111111110100 - .lobytes %0111111111110101 - .lobytes %0111111111110110 - .lobytes %0111111111110111 - .lobytes %0111111111111000 - .lobytes %0111111111111001 - .lobytes %0111111111111010 - .lobytes %0111111111111011 - .lobytes %0111111111111100 - .lobytes %0111111111111101 - .lobytes %0111111111111110 - .lobytes %0111111111111111 - .lobytes %1000000000000000 - .lobytes %1000000000000001 - .lobytes %1000000000000010 - .lobytes %1000000000000011 - .lobytes %1000000000000100 - .lobytes %1000000000000101 - .lobytes %1000000000000110 - .lobytes %1000000000000111 - .lobytes %1000000000001000 - .lobytes %1000000000001001 - .lobytes %1000000000001010 - .lobytes %1000000000001011 - .lobytes %1001111111100001 - .lobytes %1001111111100010 - .lobytes %1001111111100011 - .lobytes %1001111111100100 - .lobytes %1001111111100101 - .lobytes %1001111111100110 - .lobytes %1001111111100111 - .lobytes %1001111111101000 - .lobytes %1001111111101001 - .lobytes %1001111111101010 - .lobytes %1001111111101011 - .lobytes %1001111111101100 - .lobytes %1001111111101101 - .lobytes %1001111111101110 - .lobytes %1001111111101111 - .lobytes %1001111111110000 - .lobytes %1001111111110001 - .lobytes %1001111111110010 - .lobytes %1001111111110011 - .lobytes %1001111111110100 - .lobytes %1001111111110101 - .lobytes %1001111111110110 - .lobytes %1001111111110111 - .lobytes %1001111111111000 - .lobytes %1001111111111001 - .lobytes %1001111111111010 - .lobytes %1001111111111011 - .lobytes %1001111111111100 - .lobytes %1001111111111101 - .lobytes %1001111111111110 - .lobytes %1001111111111111 - .lobytes %1010000000000000 - .lobytes %1010000000000001 - .lobytes %1010000000000010 - .lobytes %1010000000000011 - .lobytes %1010000000000100 - .lobytes %1010000000000101 - .lobytes %1010000000000110 - .lobytes %1010000000000111 - .lobytes %1010000000001000 - .lobytes %1010000000001001 - .lobytes %1010000000001010 - .lobytes %1010000000001011 - .lobytes %1010000000001100 - .lobytes %1010000000001101 - .lobytes %1010000000001110 - .lobytes %1010000000001111 - .lobytes %1010111111100001 - .lobytes %1010111111100010 - .lobytes %1010111111100011 - .lobytes %1010111111100100 - .lobytes %1010111111100101 - .lobytes %1010111111100110 - .lobytes %1010111111100111 - .lobytes %1010111111101000 - .lobytes %1010111111101001 - .lobytes %1010111111101010 - .lobytes %1010111111101011 - .lobytes %1010111111101100 - .lobytes %1010111111101101 - .lobytes %1010111111101110 - .lobytes %1010111111101111 - .lobytes %1010111111110000 - .lobytes %1010111111110001 - .lobytes %1010111111110010 - .lobytes %1010111111110011 - .lobytes %1010111111110100 - .lobytes %1010111111110101 - .lobytes %1010111111110110 - .lobytes %1010111111110111 - .lobytes %1010111111111000 - .lobytes %1010111111111001 - .lobytes %1010111111111010 - .lobytes %1010111111111011 - .lobytes %1010111111111100 - .lobytes %1010111111111101 - .lobytes %1010111111111110 - .lobytes %1010111111111111 - .lobytes %1011000000000000 - .lobytes %1011000000000001 - .lobytes %1011000000000010 - .lobytes %1011000000000011 - .lobytes %1011000000000100 - .lobytes %1011000000000101 - .lobytes %1011000000000110 - .lobytes %1011000000000111 - .lobytes %1011000000001000 - .lobytes %1011000000001001 - .lobytes %1011000000001010 - .lobytes %1011000000001011 - .lobytes %1011000000001100 - .lobytes %1011000000001101 - .lobytes %1011000000001110 - .lobytes %1011000000001111 - .lobytes %1011111111100001 - .lobytes %1011111111100010 - .lobytes %1011111111100011 - .lobytes %1011111111100100 - .lobytes %1011111111100101 - .lobytes %1011111111100110 - .lobytes %1011111111100111 - .lobytes %1011111111101000 - .lobytes %1011111111101001 - .lobytes %1011111111101010 - .lobytes %1011111111101011 - .lobytes %1011111111101100 - .lobytes %1011111111101101 - .lobytes %1011111111101110 - .lobytes %1011111111101111 - .lobytes %1011111111110000 - .lobytes %1011111111110001 - .lobytes %1011111111110010 - .lobytes %1011111111110011 - .lobytes %1011111111110100 - .lobytes %1011111111110101 - .lobytes %1011111111110110 - .lobytes %1011111111110111 - .lobytes %1011111111111000 - .lobytes %1011111111111001 - .lobytes %1011111111111010 - .lobytes %1011111111111011 - .lobytes %1011111111111100 - .lobytes %1011111111111101 - .lobytes %1011111111111110 - .lobytes %1011111111111111 - .lobytes %1100000000000000 - .lobytes %1100000000000001 - .lobytes %1100000000000010 - .lobytes %1100000000000011 - .lobytes %1100000000000100 - .lobytes %1100000000000101 - .lobytes %1100000000000110 - .lobytes %1100000000000111 - .lobytes %1100000000001000 - .lobytes %1100000000001001 - .lobytes %1100000000001010 - .lobytes %1100000000001011 - .lobytes %1100000000001100 - .lobytes %1100000000001101 - .lobytes %1100000000001110 - .lobytes %1100000000001111 - .lobytes %1100111111100001 - .lobytes %1100111111100010 - .lobytes %1100111111100011 - .lobytes %1100111111100100 - .lobytes %1100111111100101 - .lobytes %1100111111100110 - .lobytes %1100111111100111 - .lobytes %1100111111101000 - .lobytes %1100111111101001 - .lobytes %1100111111101010 - .lobytes %1100111111101011 - .lobytes %1100111111101100 - .lobytes %1100111111101101 - .lobytes %1100111111101110 - .lobytes %1100111111101111 - .lobytes %1100111111110000 - .lobytes %1100111111110001 - .lobytes %1100111111110010 - .lobytes %1100111111110011 - .lobytes %1100111111110100 - .lobytes %1100111111110101 - .lobytes %1100111111110110 - .lobytes %1100111111110111 - .lobytes %1100111111111000 - .lobytes %1100111111111001 - .lobytes %1100111111111010 - .lobytes %1100111111111011 - .lobytes %1100111111111100 - .lobytes %1100111111111101 - .lobytes %1100111111111110 - .lobytes %1100111111111111 - .lobytes %1101000000000000 - .lobytes %1101000000000001 - .lobytes %1101000000000010 - .lobytes %1101000000000011 - .lobytes %1101000000000100 - .lobytes %1101000000000101 - .lobytes %1101000000000110 - .lobytes %1101000000000111 - .lobytes %1101000000001000 - .lobytes %1101000000001001 - .lobytes %1101000000001010 - .lobytes %1101000000001011 - .lobytes %1101000000001100 - .lobytes %1101000000001101 - .lobytes %1101000000001110 - .lobytes %1101000000001111 - .lobytes %1101111111100001 - .lobytes %1101111111100010 - .lobytes %1101111111100011 - .lobytes %1101111111100100 - .lobytes %1101111111100101 - .lobytes %1101111111100110 - .lobytes %1101111111100111 - .lobytes %1101111111101000 - .lobytes %1101111111101001 - .lobytes %1101111111101010 - .lobytes %1101111111101011 - .lobytes %1101111111101100 - .lobytes %1101111111101101 - .lobytes %1101111111101110 - .lobytes %1101111111101111 - .lobytes %1101111111110000 - .lobytes %1101111111110001 - .lobytes %1101111111110010 - .lobytes %1101111111110011 - .lobytes %1101111111110100 - .lobytes %1101111111110101 - .lobytes %1101111111110110 - .lobytes %1101111111110111 - .lobytes %1101111111111000 - .lobytes %1101111111111001 - .lobytes %1101111111111010 - .lobytes %1101111111111011 - .lobytes %1101111111111100 - .lobytes %1101111111111101 - .lobytes %1101111111111110 - .lobytes %1101111111111111 - .lobytes %1110000000000000 - .lobytes %1110000000000001 - .lobytes %1110000000000010 - .lobytes %1110000000000011 - .lobytes %1110000000000100 - .lobytes %1110000000000101 - .lobytes %1110000000000110 - .lobytes %1110000000000111 - .lobytes %1110000000001000 - .lobytes %1110000000001001 - .lobytes %1110000000001010 - .lobytes %1110000000001011 - .lobytes %1110000000001100 - .lobytes %1110000000001101 - .lobytes %1110000000001110 - .lobytes %1110000000001111 - .lobytes %1110111111100001 - .lobytes %1110111111100010 - .lobytes %1110111111100011 - .lobytes %1110111111100100 - .lobytes %1110111111100101 - .lobytes %1110111111100110 - .lobytes %1110111111100111 - .lobytes %1110111111101000 - .lobytes %1110111111101001 - .lobytes %1110111111101010 - .lobytes %1110111111101011 - .lobytes %1110111111101100 - .lobytes %1110111111101101 - .lobytes %1110111111101110 - .lobytes %1110111111101111 - .lobytes %1110111111110000 - .lobytes %1110111111110001 - .lobytes %1110111111110010 - .lobytes %1110111111110011 - .lobytes %1110111111110100 - .lobytes %1110111111110101 - .lobytes %1110111111110110 - .lobytes %1110111111110111 - .lobytes %1110111111111000 - .lobytes %1110111111111001 - .lobytes %1110111111111010 - .lobytes %1110111111111011 - .lobytes %1110111111111100 - .lobytes %1110111111111101 - .lobytes %1110111111111110 - .lobytes %1110111111111111 - .lobytes %1111000000000000 - .lobytes %1111000000000001 - .lobytes %1111000000000010 - .lobytes %1111000000000011 - .lobytes %1111000000000100 - .lobytes %1111000000000101 - .lobytes %1111000000000110 - .lobytes %1111000000000111 - .lobytes %1111000000001000 - .lobytes %1111000000001001 - .lobytes %1111000000001010 - .lobytes %1111000000001011 - .lobytes %1111000000001100 - .lobytes %1111000000001101 - .lobytes %1111000000001110 - .lobytes %1111000000001111 - .lobytes %1111111111100001 - .lobytes %1111111111100010 - .lobytes %1111111111100011 - .lobytes %1111111111100100 - .lobytes %1111111111100101 - .lobytes %1111111111100110 - .lobytes %1111111111100111 - .lobytes %1111111111101000 - .lobytes %1111111111101001 - .lobytes %1111111111101010 - .lobytes %1111111111101011 - .lobytes %1111111111101100 - .lobytes %1111111111101101 - .lobytes %1111111111101110 - .lobytes %1111111111101111 - .lobytes %1111111111110000 - .lobytes %1111111111110001 - .lobytes %1111111111110010 - .lobytes %1111111111110011 - .lobytes %1111111111110100 - .lobytes %1111111111110101 - .lobytes %1111111111110110 - .lobytes %1111111111110111 - .lobytes %1111111111111000 - .lobytes %1111111111111001 - .lobytes %1111111111111010 - .lobytes %1111111111111011 - .lobytes %1111111111111100 - .lobytes %1111111111111101 - .lobytes %1111111111111110 - .lobytes %1111111111111111 + ; binary values, full length + .lobytes %0000000000000000 + .lobytes %0000000000000001 + .lobytes %0000000000000010 + .lobytes %0000000000000011 + .lobytes %0000000000000100 + .lobytes %0000000000000101 + .lobytes %0000000000000110 + .lobytes %0000000000000111 + .lobytes %0000000000001000 + .lobytes %0000000000001001 + .lobytes %0000000000001010 + .lobytes %0000000000001011 + .lobytes %0000000000001100 + .lobytes %0000000000001101 + .lobytes %0000000000001110 + .lobytes %0000000000001111 + .lobytes %0000000000010000 + .lobytes %0000000000010001 + .lobytes %0000000000010010 + .lobytes %0000000000010011 + .lobytes %0000000001110000 + .lobytes %0000000001110001 + .lobytes %0000000001110010 + .lobytes %0000000001110011 + .lobytes %0000000001110100 + .lobytes %0000000001110101 + .lobytes %0000000001110110 + .lobytes %0000000001110111 + .lobytes %0000000001111000 + .lobytes %0000000001111001 + .lobytes %0000000001111010 + .lobytes %0000000001111011 + .lobytes %0000000001111100 + .lobytes %0000000001111101 + .lobytes %0000000001111110 + .lobytes %0000000001111111 + .lobytes %0000000010000000 + .lobytes %0000000010000001 + .lobytes %0000000010000010 + .lobytes %0000000010000011 + .lobytes %0000000010000100 + .lobytes %0000000010000101 + .lobytes %0000000010000110 + .lobytes %0000000011110000 + .lobytes %0000000011110001 + .lobytes %0000000011110010 + .lobytes %0000000011110011 + .lobytes %0000000011110100 + .lobytes %0000000011110101 + .lobytes %0000000011110110 + .lobytes %0000000011110111 + .lobytes %0000000011111000 + .lobytes %0000000011111001 + .lobytes %0000000011111010 + .lobytes %0000000011111011 + .lobytes %0000000011111100 + .lobytes %0000000011111101 + .lobytes %0000000011111110 + .lobytes %0000000011111111 + .lobytes %0000000100000000 + .lobytes %0000000100000001 + .lobytes %0000000100000010 + .lobytes %0000000100000011 + .lobytes %0000111111010010 + .lobytes %0000111111010011 + .lobytes %0000111111010100 + .lobytes %0000111111010101 + .lobytes %0000111111010110 + .lobytes %0000111111010111 + .lobytes %0000111111011000 + .lobytes %0000111111011001 + .lobytes %0000111111011010 + .lobytes %0000111111011011 + .lobytes %0000111111011100 + .lobytes %0000111111011101 + .lobytes %0000111111011110 + .lobytes %0000111111011111 + .lobytes %0000111111100000 + .lobytes %0000111111100001 + .lobytes %0000111111100010 + .lobytes %0000111111100011 + .lobytes %0000111111100100 + .lobytes %0000111111100101 + .lobytes %0000111111100110 + .lobytes %0000111111100111 + .lobytes %0000111111101000 + .lobytes %0000111111101001 + .lobytes %0000111111101010 + .lobytes %0000111111101011 + .lobytes %0000111111101100 + .lobytes %0000111111101101 + .lobytes %0000111111101110 + .lobytes %0000111111101111 + .lobytes %0000111111110000 + .lobytes %0000111111110001 + .lobytes %0000111111110010 + .lobytes %0000111111110011 + .lobytes %0000111111110100 + .lobytes %0000111111110101 + .lobytes %0000111111110110 + .lobytes %0000111111110111 + .lobytes %0000111111111000 + .lobytes %0000111111111001 + .lobytes %0000111111111010 + .lobytes %0000111111111011 + .lobytes %0000111111111100 + .lobytes %0000111111111101 + .lobytes %0000111111111110 + .lobytes %0000111111111111 + .lobytes %0001000000000000 + .lobytes %0001000000000001 + .lobytes %0001000000000010 + .lobytes %0001000000000011 + .lobytes %0001000000000100 + .lobytes %0001000000000101 + .lobytes %0001000000000110 + .lobytes %0001000000000111 + .lobytes %0001000000001000 + .lobytes %0111111111110000 + .lobytes %0111111111110001 + .lobytes %0111111111110010 + .lobytes %0111111111110011 + .lobytes %0111111111110100 + .lobytes %0111111111110101 + .lobytes %0111111111110110 + .lobytes %0111111111110111 + .lobytes %0111111111111000 + .lobytes %0111111111111001 + .lobytes %0111111111111010 + .lobytes %0111111111111011 + .lobytes %0111111111111100 + .lobytes %0111111111111101 + .lobytes %0111111111111110 + .lobytes %0111111111111111 + .lobytes %1000000000000000 + .lobytes %1000000000000001 + .lobytes %1000000000000010 + .lobytes %1000000000000011 + .lobytes %1000000000000100 + .lobytes %1000000000000101 + .lobytes %1000000000000110 + .lobytes %1000000000000111 + .lobytes %1000000000001000 + .lobytes %1000000000001001 + .lobytes %1000000000001010 + .lobytes %1000000000001011 + .lobytes %1001111111100001 + .lobytes %1001111111100010 + .lobytes %1001111111100011 + .lobytes %1001111111100100 + .lobytes %1001111111100101 + .lobytes %1001111111100110 + .lobytes %1001111111100111 + .lobytes %1001111111101000 + .lobytes %1001111111101001 + .lobytes %1001111111101010 + .lobytes %1001111111101011 + .lobytes %1001111111101100 + .lobytes %1001111111101101 + .lobytes %1001111111101110 + .lobytes %1001111111101111 + .lobytes %1001111111110000 + .lobytes %1001111111110001 + .lobytes %1001111111110010 + .lobytes %1001111111110011 + .lobytes %1001111111110100 + .lobytes %1001111111110101 + .lobytes %1001111111110110 + .lobytes %1001111111110111 + .lobytes %1001111111111000 + .lobytes %1001111111111001 + .lobytes %1001111111111010 + .lobytes %1001111111111011 + .lobytes %1001111111111100 + .lobytes %1001111111111101 + .lobytes %1001111111111110 + .lobytes %1001111111111111 + .lobytes %1010000000000000 + .lobytes %1010000000000001 + .lobytes %1010000000000010 + .lobytes %1010000000000011 + .lobytes %1010000000000100 + .lobytes %1010000000000101 + .lobytes %1010000000000110 + .lobytes %1010000000000111 + .lobytes %1010000000001000 + .lobytes %1010000000001001 + .lobytes %1010000000001010 + .lobytes %1010000000001011 + .lobytes %1010000000001100 + .lobytes %1010000000001101 + .lobytes %1010000000001110 + .lobytes %1010000000001111 + .lobytes %1010111111100001 + .lobytes %1010111111100010 + .lobytes %1010111111100011 + .lobytes %1010111111100100 + .lobytes %1010111111100101 + .lobytes %1010111111100110 + .lobytes %1010111111100111 + .lobytes %1010111111101000 + .lobytes %1010111111101001 + .lobytes %1010111111101010 + .lobytes %1010111111101011 + .lobytes %1010111111101100 + .lobytes %1010111111101101 + .lobytes %1010111111101110 + .lobytes %1010111111101111 + .lobytes %1010111111110000 + .lobytes %1010111111110001 + .lobytes %1010111111110010 + .lobytes %1010111111110011 + .lobytes %1010111111110100 + .lobytes %1010111111110101 + .lobytes %1010111111110110 + .lobytes %1010111111110111 + .lobytes %1010111111111000 + .lobytes %1010111111111001 + .lobytes %1010111111111010 + .lobytes %1010111111111011 + .lobytes %1010111111111100 + .lobytes %1010111111111101 + .lobytes %1010111111111110 + .lobytes %1010111111111111 + .lobytes %1011000000000000 + .lobytes %1011000000000001 + .lobytes %1011000000000010 + .lobytes %1011000000000011 + .lobytes %1011000000000100 + .lobytes %1011000000000101 + .lobytes %1011000000000110 + .lobytes %1011000000000111 + .lobytes %1011000000001000 + .lobytes %1011000000001001 + .lobytes %1011000000001010 + .lobytes %1011000000001011 + .lobytes %1011000000001100 + .lobytes %1011000000001101 + .lobytes %1011000000001110 + .lobytes %1011000000001111 + .lobytes %1011111111100001 + .lobytes %1011111111100010 + .lobytes %1011111111100011 + .lobytes %1011111111100100 + .lobytes %1011111111100101 + .lobytes %1011111111100110 + .lobytes %1011111111100111 + .lobytes %1011111111101000 + .lobytes %1011111111101001 + .lobytes %1011111111101010 + .lobytes %1011111111101011 + .lobytes %1011111111101100 + .lobytes %1011111111101101 + .lobytes %1011111111101110 + .lobytes %1011111111101111 + .lobytes %1011111111110000 + .lobytes %1011111111110001 + .lobytes %1011111111110010 + .lobytes %1011111111110011 + .lobytes %1011111111110100 + .lobytes %1011111111110101 + .lobytes %1011111111110110 + .lobytes %1011111111110111 + .lobytes %1011111111111000 + .lobytes %1011111111111001 + .lobytes %1011111111111010 + .lobytes %1011111111111011 + .lobytes %1011111111111100 + .lobytes %1011111111111101 + .lobytes %1011111111111110 + .lobytes %1011111111111111 + .lobytes %1100000000000000 + .lobytes %1100000000000001 + .lobytes %1100000000000010 + .lobytes %1100000000000011 + .lobytes %1100000000000100 + .lobytes %1100000000000101 + .lobytes %1100000000000110 + .lobytes %1100000000000111 + .lobytes %1100000000001000 + .lobytes %1100000000001001 + .lobytes %1100000000001010 + .lobytes %1100000000001011 + .lobytes %1100000000001100 + .lobytes %1100000000001101 + .lobytes %1100000000001110 + .lobytes %1100000000001111 + .lobytes %1100111111100001 + .lobytes %1100111111100010 + .lobytes %1100111111100011 + .lobytes %1100111111100100 + .lobytes %1100111111100101 + .lobytes %1100111111100110 + .lobytes %1100111111100111 + .lobytes %1100111111101000 + .lobytes %1100111111101001 + .lobytes %1100111111101010 + .lobytes %1100111111101011 + .lobytes %1100111111101100 + .lobytes %1100111111101101 + .lobytes %1100111111101110 + .lobytes %1100111111101111 + .lobytes %1100111111110000 + .lobytes %1100111111110001 + .lobytes %1100111111110010 + .lobytes %1100111111110011 + .lobytes %1100111111110100 + .lobytes %1100111111110101 + .lobytes %1100111111110110 + .lobytes %1100111111110111 + .lobytes %1100111111111000 + .lobytes %1100111111111001 + .lobytes %1100111111111010 + .lobytes %1100111111111011 + .lobytes %1100111111111100 + .lobytes %1100111111111101 + .lobytes %1100111111111110 + .lobytes %1100111111111111 + .lobytes %1101000000000000 + .lobytes %1101000000000001 + .lobytes %1101000000000010 + .lobytes %1101000000000011 + .lobytes %1101000000000100 + .lobytes %1101000000000101 + .lobytes %1101000000000110 + .lobytes %1101000000000111 + .lobytes %1101000000001000 + .lobytes %1101000000001001 + .lobytes %1101000000001010 + .lobytes %1101000000001011 + .lobytes %1101000000001100 + .lobytes %1101000000001101 + .lobytes %1101000000001110 + .lobytes %1101000000001111 + .lobytes %1101111111100001 + .lobytes %1101111111100010 + .lobytes %1101111111100011 + .lobytes %1101111111100100 + .lobytes %1101111111100101 + .lobytes %1101111111100110 + .lobytes %1101111111100111 + .lobytes %1101111111101000 + .lobytes %1101111111101001 + .lobytes %1101111111101010 + .lobytes %1101111111101011 + .lobytes %1101111111101100 + .lobytes %1101111111101101 + .lobytes %1101111111101110 + .lobytes %1101111111101111 + .lobytes %1101111111110000 + .lobytes %1101111111110001 + .lobytes %1101111111110010 + .lobytes %1101111111110011 + .lobytes %1101111111110100 + .lobytes %1101111111110101 + .lobytes %1101111111110110 + .lobytes %1101111111110111 + .lobytes %1101111111111000 + .lobytes %1101111111111001 + .lobytes %1101111111111010 + .lobytes %1101111111111011 + .lobytes %1101111111111100 + .lobytes %1101111111111101 + .lobytes %1101111111111110 + .lobytes %1101111111111111 + .lobytes %1110000000000000 + .lobytes %1110000000000001 + .lobytes %1110000000000010 + .lobytes %1110000000000011 + .lobytes %1110000000000100 + .lobytes %1110000000000101 + .lobytes %1110000000000110 + .lobytes %1110000000000111 + .lobytes %1110000000001000 + .lobytes %1110000000001001 + .lobytes %1110000000001010 + .lobytes %1110000000001011 + .lobytes %1110000000001100 + .lobytes %1110000000001101 + .lobytes %1110000000001110 + .lobytes %1110000000001111 + .lobytes %1110111111100001 + .lobytes %1110111111100010 + .lobytes %1110111111100011 + .lobytes %1110111111100100 + .lobytes %1110111111100101 + .lobytes %1110111111100110 + .lobytes %1110111111100111 + .lobytes %1110111111101000 + .lobytes %1110111111101001 + .lobytes %1110111111101010 + .lobytes %1110111111101011 + .lobytes %1110111111101100 + .lobytes %1110111111101101 + .lobytes %1110111111101110 + .lobytes %1110111111101111 + .lobytes %1110111111110000 + .lobytes %1110111111110001 + .lobytes %1110111111110010 + .lobytes %1110111111110011 + .lobytes %1110111111110100 + .lobytes %1110111111110101 + .lobytes %1110111111110110 + .lobytes %1110111111110111 + .lobytes %1110111111111000 + .lobytes %1110111111111001 + .lobytes %1110111111111010 + .lobytes %1110111111111011 + .lobytes %1110111111111100 + .lobytes %1110111111111101 + .lobytes %1110111111111110 + .lobytes %1110111111111111 + .lobytes %1111000000000000 + .lobytes %1111000000000001 + .lobytes %1111000000000010 + .lobytes %1111000000000011 + .lobytes %1111000000000100 + .lobytes %1111000000000101 + .lobytes %1111000000000110 + .lobytes %1111000000000111 + .lobytes %1111000000001000 + .lobytes %1111000000001001 + .lobytes %1111000000001010 + .lobytes %1111000000001011 + .lobytes %1111000000001100 + .lobytes %1111000000001101 + .lobytes %1111000000001110 + .lobytes %1111000000001111 + .lobytes %1111111111100001 + .lobytes %1111111111100010 + .lobytes %1111111111100011 + .lobytes %1111111111100100 + .lobytes %1111111111100101 + .lobytes %1111111111100110 + .lobytes %1111111111100111 + .lobytes %1111111111101000 + .lobytes %1111111111101001 + .lobytes %1111111111101010 + .lobytes %1111111111101011 + .lobytes %1111111111101100 + .lobytes %1111111111101101 + .lobytes %1111111111101110 + .lobytes %1111111111101111 + .lobytes %1111111111110000 + .lobytes %1111111111110001 + .lobytes %1111111111110010 + .lobytes %1111111111110011 + .lobytes %1111111111110100 + .lobytes %1111111111110101 + .lobytes %1111111111110110 + .lobytes %1111111111110111 + .lobytes %1111111111111000 + .lobytes %1111111111111001 + .lobytes %1111111111111010 + .lobytes %1111111111111011 + .lobytes %1111111111111100 + .lobytes %1111111111111101 + .lobytes %1111111111111110 + .lobytes %1111111111111111 - ; multiple values on one line, decimal - .lobytes 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 - .lobytes 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 - .lobytes 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 - .lobytes 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 - .lobytes 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 - .lobytes 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 - .lobytes 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 - .lobytes 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 - .lobytes 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 - .lobytes 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 - .lobytes 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 - .lobytes 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 - .lobytes 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 - .lobytes 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 - .lobytes 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 - .lobytes 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 - .lobytes 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 - .lobytes 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 - .lobytes 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 - .lobytes 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 - .lobytes 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 - .lobytes 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 - .lobytes 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 - .lobytes 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 + ; multiple values on one line, decimal + .lobytes 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 + .lobytes 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 + .lobytes 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 + .lobytes 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 + .lobytes 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 + .lobytes 256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271 + .lobytes 4064,4065,4066,4067,4068,4069,4070,4071,4072,4073,4074,4075,4076,4077,4078,4079 + .lobytes 4080,4081,4082,4083,4084,4085,4086,4087,4088,4089,4090,4091,4092,4093,4094,4095 + .lobytes 4096,4097,4098,4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,4109,4110,4111 + .lobytes 32752,32753,32754,32755,32756,32757,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767 + .lobytes 32768,32769,32770,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782,32783 + .lobytes 40944,40945,40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957,40958,40959 + .lobytes 40960,40961,40962,40963,40964,40965,40966,40967,40968,40969,40970,40971,40972,40973,40974,40975 + .lobytes 45040,45041,45042,45043,45044,45045,45046,45047,45048,45049,45050,45051,45052,45053,45054,45055 + .lobytes 45056,45057,45058,45059,45060,45061,45062,45063,45064,45065,45066,45067,45068,45069,45070,45071 + .lobytes 49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151 + .lobytes 49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167 + .lobytes 53232,53233,53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245,53246,53247 + .lobytes 53248,53249,53250,53251,53252,53253,53254,53255,53256,53257,53258,53259,53260,53261,53262,53263 + .lobytes 57328,57329,57330,57331,57332,57333,57334,57335,57336,57337,57338,57339,57340,57341,57342,57343 + .lobytes 57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359 + .lobytes 61424,61425,61426,61427,61428,61429,61430,61431,61432,61433,61434,61435,61436,61437,61438,61439 + .lobytes 61440,61441,61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453,61454,61455 + .lobytes 65520,65521,65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533,65534,65535 - ; multiple values on one line, hex - .lobytes $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f - .lobytes $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f - .lobytes $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f - .lobytes $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f - .lobytes $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff - .lobytes $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f - .lobytes $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef - .lobytes $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff - .lobytes $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f - .lobytes $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff - .lobytes $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f - .lobytes $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff - .lobytes $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f - .lobytes $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff - .lobytes $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f - .lobytes $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff - .lobytes $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f - .lobytes $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff - .lobytes $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f - .lobytes $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff - .lobytes $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f - .lobytes $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff - .lobytes $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f - .lobytes $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff + ; multiple values on one line, hex + .lobytes $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,$a,$b,$c,$d,$e,$f + .lobytes $10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .lobytes $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .lobytes $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .lobytes $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + .lobytes $100,$101,$102,$103,$104,$105,$106,$107,$108,$109,$10a,$10b,$10c,$10d,$10e,$10f + .lobytes $fe0,$fe1,$fe2,$fe3,$fe4,$fe5,$fe6,$fe7,$fe8,$fe9,$fea,$feb,$fec,$fed,$fee,$fef + .lobytes $ff0,$ff1,$ff2,$ff3,$ff4,$ff5,$ff6,$ff7,$ff8,$ff9,$ffa,$ffb,$ffc,$ffd,$ffe,$fff + .lobytes $1000,$1001,$1002,$1003,$1004,$1005,$1006,$1007,$1008,$1009,$100a,$100b,$100c,$100d,$100e,$100f + .lobytes $7ff0,$7ff1,$7ff2,$7ff3,$7ff4,$7ff5,$7ff6,$7ff7,$7ff8,$7ff9,$7ffa,$7ffb,$7ffc,$7ffd,$7ffe,$7fff + .lobytes $8000,$8001,$8002,$8003,$8004,$8005,$8006,$8007,$8008,$8009,$800a,$800b,$800c,$800d,$800e,$800f + .lobytes $9ff0,$9ff1,$9ff2,$9ff3,$9ff4,$9ff5,$9ff6,$9ff7,$9ff8,$9ff9,$9ffa,$9ffb,$9ffc,$9ffd,$9ffe,$9fff + .lobytes $a000,$a001,$a002,$a003,$a004,$a005,$a006,$a007,$a008,$a009,$a00a,$a00b,$a00c,$a00d,$a00e,$a00f + .lobytes $aff0,$aff1,$aff2,$aff3,$aff4,$aff5,$aff6,$aff7,$aff8,$aff9,$affa,$affb,$affc,$affd,$affe,$afff + .lobytes $b000,$b001,$b002,$b003,$b004,$b005,$b006,$b007,$b008,$b009,$b00a,$b00b,$b00c,$b00d,$b00e,$b00f + .lobytes $bff0,$bff1,$bff2,$bff3,$bff4,$bff5,$bff6,$bff7,$bff8,$bff9,$bffa,$bffb,$bffc,$bffd,$bffe,$bfff + .lobytes $c000,$c001,$c002,$c003,$c004,$c005,$c006,$c007,$c008,$c009,$c00a,$c00b,$c00c,$c00d,$c00e,$c00f + .lobytes $cff0,$cff1,$cff2,$cff3,$cff4,$cff5,$cff6,$cff7,$cff8,$cff9,$cffa,$cffb,$cffc,$cffd,$cffe,$cfff + .lobytes $d000,$d001,$d002,$d003,$d004,$d005,$d006,$d007,$d008,$d009,$d00a,$d00b,$d00c,$d00d,$d00e,$d00f + .lobytes $dff0,$dff1,$dff2,$dff3,$dff4,$dff5,$dff6,$dff7,$dff8,$dff9,$dffa,$dffb,$dffc,$dffd,$dffe,$dfff + .lobytes $e000,$e001,$e002,$e003,$e004,$e005,$e006,$e007,$e008,$e009,$e00a,$e00b,$e00c,$e00d,$e00e,$e00f + .lobytes $eff0,$eff1,$eff2,$eff3,$eff4,$eff5,$eff6,$eff7,$eff8,$eff9,$effa,$effb,$effc,$effd,$effe,$efff + .lobytes $f000,$f001,$f002,$f003,$f004,$f005,$f006,$f007,$f008,$f009,$f00a,$f00b,$f00c,$f00d,$f00e,$f00f + .lobytes $fff0,$fff1,$fff2,$fff3,$fff4,$fff5,$fff6,$fff7,$fff8,$fff9,$fffa,$fffb,$fffc,$fffd,$fffe,$ffff - ; multiple values on one line, alternative hex - .lobytes 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh - .lobytes 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh - .lobytes 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh - .lobytes 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh - .lobytes 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh - .lobytes 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh - .lobytes 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh - .lobytes 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh - .lobytes 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh - .lobytes 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh - .lobytes 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh - .lobytes 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh - .lobytes 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh - .lobytes 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh - .lobytes 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh - .lobytes 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh - .lobytes 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh - .lobytes 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh - .lobytes 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh - .lobytes 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh - .lobytes 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh - .lobytes 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh - .lobytes 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh - .lobytes 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh + ; multiple values on one line, alternative hex + .lobytes 0h,1h,2h,3h,4h,5h,6h,7h,8h,9h,0ah,0bh,0ch,0dh,0eh,0fh + .lobytes 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh + .lobytes 70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7ah,7bh,7ch,7dh,7eh,7fh + .lobytes 80h,81h,82h,83h,84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh + .lobytes 0f0h,0f1h,0f2h,0f3h,0f4h,0f5h,0f6h,0f7h,0f8h,0f9h,0fah,0fbh,0fch,0fdh,0feh,0ffh + .lobytes 100h,101h,102h,103h,104h,105h,106h,107h,108h,109h,10ah,10bh,10ch,10dh,10eh,10fh + .lobytes 0fe0h,0fe1h,0fe2h,0fe3h,0fe4h,0fe5h,0fe6h,0fe7h,0fe8h,0fe9h,0feah,0febh,0fech,0fedh,0feeh,0fefh + .lobytes 0ff0h,0ff1h,0ff2h,0ff3h,0ff4h,0ff5h,0ff6h,0ff7h,0ff8h,0ff9h,0ffah,0ffbh,0ffch,0ffdh,0ffeh,0fffh + .lobytes 1000h,1001h,1002h,1003h,1004h,1005h,1006h,1007h,1008h,1009h,100ah,100bh,100ch,100dh,100eh,100fh + .lobytes 7ff0h,7ff1h,7ff2h,7ff3h,7ff4h,7ff5h,7ff6h,7ff7h,7ff8h,7ff9h,7ffah,7ffbh,7ffch,7ffdh,7ffeh,7fffh + .lobytes 8000h,8001h,8002h,8003h,8004h,8005h,8006h,8007h,8008h,8009h,800ah,800bh,800ch,800dh,800eh,800fh + .lobytes 9ff0h,9ff1h,9ff2h,9ff3h,9ff4h,9ff5h,9ff6h,9ff7h,9ff8h,9ff9h,9ffah,9ffbh,9ffch,9ffdh,9ffeh,9fffh + .lobytes 0a000h,0a001h,0a002h,0a003h,0a004h,0a005h,0a006h,0a007h,0a008h,0a009h,0a00ah,0a00bh,0a00ch,0a00dh,0a00eh,0a00fh + .lobytes 0aff0h,0aff1h,0aff2h,0aff3h,0aff4h,0aff5h,0aff6h,0aff7h,0aff8h,0aff9h,0affah,0affbh,0affch,0affdh,0affeh,0afffh + .lobytes 0b000h,0b001h,0b002h,0b003h,0b004h,0b005h,0b006h,0b007h,0b008h,0b009h,0b00ah,0b00bh,0b00ch,0b00dh,0b00eh,0b00fh + .lobytes 0bff0h,0bff1h,0bff2h,0bff3h,0bff4h,0bff5h,0bff6h,0bff7h,0bff8h,0bff9h,0bffah,0bffbh,0bffch,0bffdh,0bffeh,0bfffh + .lobytes 0c000h,0c001h,0c002h,0c003h,0c004h,0c005h,0c006h,0c007h,0c008h,0c009h,0c00ah,0c00bh,0c00ch,0c00dh,0c00eh,0c00fh + .lobytes 0cff0h,0cff1h,0cff2h,0cff3h,0cff4h,0cff5h,0cff6h,0cff7h,0cff8h,0cff9h,0cffah,0cffbh,0cffch,0cffdh,0cffeh,0cfffh + .lobytes 0d000h,0d001h,0d002h,0d003h,0d004h,0d005h,0d006h,0d007h,0d008h,0d009h,0d00ah,0d00bh,0d00ch,0d00dh,0d00eh,0d00fh + .lobytes 0dff0h,0dff1h,0dff2h,0dff3h,0dff4h,0dff5h,0dff6h,0dff7h,0dff8h,0dff9h,0dffah,0dffbh,0dffch,0dffdh,0dffeh,0dfffh + .lobytes 0e000h,0e001h,0e002h,0e003h,0e004h,0e005h,0e006h,0e007h,0e008h,0e009h,0e00ah,0e00bh,0e00ch,0e00dh,0e00eh,0e00fh + .lobytes 0eff0h,0eff1h,0eff2h,0eff3h,0eff4h,0eff5h,0eff6h,0eff7h,0eff8h,0eff9h,0effah,0effbh,0effch,0effdh,0effeh,0efffh + .lobytes 0f000h,0f001h,0f002h,0f003h,0f004h,0f005h,0f006h,0f007h,0f008h,0f009h,0f00ah,0f00bh,0f00ch,0f00dh,0f00eh,0f00fh + .lobytes 0fff0h,0fff1h,0fff2h,0fff3h,0fff4h,0fff5h,0fff6h,0fff7h,0fff8h,0fff9h,0fffah,0fffbh,0fffch,0fffdh,0fffeh,0ffffh - ; mix some variants - .lobytes 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh + ; mix some variants + .lobytes 11,$11,%11,11h,'a','b','z','A','Z','0','9',0aah,$aa,$aA,$aB,0fEh From 1628efd56905dac9bbb50922ee83bc9f782eae5a Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 01:44:40 -0400 Subject: [PATCH 1313/2710] Added Github action steps that update the online documentation repo. --- .github/workflows/snapshot-on-push-master.yml | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 5c36ef7f1..b333152da 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -96,6 +96,21 @@ jobs: name: cc65-snapshot-win64.zip path: cc65-snapshot-win64.zip + - name: Update the online documents. + uses: actions/checkout@v2 + with: + repository: cc65/doc + path: doc.git + - run: | + cd doc.git + rm *.* + cp ../html/*.* . + git config user.name "cc65-github" + git config user.email "cc65.nomail@github.com" + git config push.default simple + git add -A + git commit -m "Updated from cc65 commit $(GITHUB_SHA)." && git push -q || true + # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge uses: nogsantos/scp-deploy@master @@ -106,6 +121,5 @@ jobs: port: ${{ secrets.SSH_PORT }} user: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_KEY }} - - # TODO: Update docs at https://github.com/cc65/doc + # TODO: Publish snapshot zip at https://github.com/cc65/cc65.github.io From 5b0023c3df5b8b6927cd833f49832decdc44a6d8 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 02:30:52 -0400 Subject: [PATCH 1314/2710] Fixed a shell syntax bug. Try again. --- .github/workflows/snapshot-on-push-master.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index b333152da..acd2e463a 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -96,12 +96,13 @@ jobs: name: cc65-snapshot-win64.zip path: cc65-snapshot-win64.zip - - name: Update the online documents. + - name: Get the online documents repo. uses: actions/checkout@v2 with: repository: cc65/doc path: doc.git - - run: | + - name: Update the online documents. + run: | cd doc.git rm *.* cp ../html/*.* . @@ -109,7 +110,7 @@ jobs: git config user.email "cc65.nomail@github.com" git config push.default simple git add -A - git commit -m "Updated from cc65 commit $(GITHUB_SHA)." && git push -q || true + git commit -m "Updated from cc65 commit ${GITHUB_SHA}." && git push # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From 0d5dbb2ce2b537bf2f1612a5c9aab383e3b553eb Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 03:45:57 -0400 Subject: [PATCH 1315/2710] Tried to authorize a push by setting the access token explicitly. --- .github/workflows/snapshot-on-push-master.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index acd2e463a..f6eb20109 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -100,6 +100,7 @@ jobs: uses: actions/checkout@v2 with: repository: cc65/doc + token: ${{ github.token }} path: doc.git - name: Update the online documents. run: | From b4231401bdabf2159748d69f85f7f7375e44fa5b Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 05:38:59 -0400 Subject: [PATCH 1316/2710] Trying a verbose Git push. If I'm lucky, it will tell me more. --- .github/workflows/snapshot-on-push-master.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index f6eb20109..981e02fd8 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -111,7 +111,8 @@ jobs: git config user.email "cc65.nomail@github.com" git config push.default simple git add -A - git commit -m "Updated from cc65 commit ${GITHUB_SHA}." && git push + git commit -m "Updated from cc65 commit ${GITHUB_SHA}." + git push -v # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From 86d68bea8cbdb65c886ef81411095ad5874841f8 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 08:06:21 -0400 Subject: [PATCH 1317/2710] Experiment: checkout the second repo first. Maybe that will give it the github.token that it needs. --- .github/workflows/snapshot-on-push-master.yml | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 981e02fd8..f96f4fb56 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -43,8 +43,18 @@ jobs: - shell: bash run: git config --global core.autocrlf input + + - name: Get the online documents repo. + uses: actions/checkout@v2 + with: + repository: cc65/doc + token: ${{ github.token }} + path: doc.git + - name: Checkout Source uses: actions/checkout@v2 + with: + path: cc65 - name: Do some simple style checks shell: bash @@ -96,17 +106,11 @@ jobs: name: cc65-snapshot-win64.zip path: cc65-snapshot-win64.zip - - name: Get the online documents repo. - uses: actions/checkout@v2 - with: - repository: cc65/doc - token: ${{ github.token }} - path: doc.git - name: Update the online documents. run: | - cd doc.git + cd ../doc.git rm *.* - cp ../html/*.* . + cp ../cc65/html/*.* . git config user.name "cc65-github" git config user.email "cc65.nomail@github.com" git config push.default simple From 3f314c0ee91eae22bc290120f7a560752b978ac3 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 08:18:51 -0400 Subject: [PATCH 1318/2710] Fixed the action/checkout steps. I misunderstood that action's docs. --- .github/workflows/snapshot-on-push-master.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index f96f4fb56..a29ea3bb0 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -53,8 +53,6 @@ jobs: - name: Checkout Source uses: actions/checkout@v2 - with: - path: cc65 - name: Do some simple style checks shell: bash @@ -108,9 +106,9 @@ jobs: - name: Update the online documents. run: | - cd ../doc.git + cd doc.git rm *.* - cp ../cc65/html/*.* . + cp ../html/*.* . git config user.name "cc65-github" git config user.email "cc65.nomail@github.com" git config push.default simple From 0dab508c7554cd93eaa5ee993241b753d222a4b1 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 08:35:06 -0400 Subject: [PATCH 1319/2710] Find out where doc.git is. --- .github/workflows/snapshot-on-push-master.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index a29ea3bb0..ecf36cee7 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -106,6 +106,8 @@ jobs: - name: Update the online documents. run: | + pwd + ls cd doc.git rm *.* cp ../html/*.* . From 997c67de356700a949fbdf26617e9b25728089f9 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 09:00:53 -0400 Subject: [PATCH 1320/2710] Put doc.git next to cc65. --- .github/workflows/snapshot-on-push-master.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index ecf36cee7..08ad9d7ad 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -49,7 +49,7 @@ jobs: with: repository: cc65/doc token: ${{ github.token }} - path: doc.git + path: ../doc.git - name: Checkout Source uses: actions/checkout@v2 @@ -107,10 +107,9 @@ jobs: - name: Update the online documents. run: | pwd - ls - cd doc.git + cd ../doc.git rm *.* - cp ../html/*.* . + cp ../cc65/html/*.* . git config user.name "cc65-github" git config user.email "cc65.nomail@github.com" git config push.default simple From 43c0f5ecd77a327928bb6a22cdf04ea351ac8c89 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 12:58:56 -0400 Subject: [PATCH 1321/2710] Directly clone the document repo. --- .github/workflows/snapshot-on-push-master.yml | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 08ad9d7ad..f6e1524f6 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -43,14 +43,6 @@ jobs: - shell: bash run: git config --global core.autocrlf input - - - name: Get the online documents repo. - uses: actions/checkout@v2 - with: - repository: cc65/doc - token: ${{ github.token }} - path: ../doc.git - - name: Checkout Source uses: actions/checkout@v2 @@ -106,10 +98,10 @@ jobs: - name: Update the online documents. run: | - pwd - cd ../doc.git + git clone --depth 1 https://${{ secrets.GITHUB_TOKEN }}@github.com/cc65/doc.git doc.git + cd doc.git rm *.* - cp ../cc65/html/*.* . + cp ../html/*.* . git config user.name "cc65-github" git config user.email "cc65.nomail@github.com" git config push.default simple From 65c8b4943068d6b96255958e8ab7c2f7ce4ec026 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 13:52:45 -0400 Subject: [PATCH 1322/2710] Passed the token through the environment. --- .github/workflows/snapshot-on-push-master.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index f6e1524f6..2e2406327 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -97,8 +97,10 @@ jobs: path: cc65-snapshot-win64.zip - name: Update the online documents. + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - git clone --depth 1 https://${{ secrets.GITHUB_TOKEN }}@github.com/cc65/doc.git doc.git + git clone --depth 1 https://${GH_TOKEN}@github.com/cc65/doc.git doc.git cd doc.git rm *.* cp ../html/*.* . From a0e0c789dbadadf423369a825a70787335549ff9 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 18:24:42 -0400 Subject: [PATCH 1323/2710] Went back to using actions/checkout@v2. (Direct cloning doesn't support pushing with a hidden token.) I'm putting this aside, for now. A Personal Access Token must be made for the repository. "git push" does a dry-run, so that the workflow will succeed. --- .github/workflows/snapshot-on-push-master.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 2e2406327..7b26a6e2a 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -96,11 +96,16 @@ jobs: name: cc65-snapshot-win64.zip path: cc65-snapshot-win64.zip + - name: Get the online documents repo. + uses: actions/checkout@v2 + with: + repository: cc65/doc + path: doc.git - name: Update the online documents. env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - git clone --depth 1 https://${GH_TOKEN}@github.com/cc65/doc.git doc.git + env cd doc.git rm *.* cp ../html/*.* . @@ -109,7 +114,7 @@ jobs: git config push.default simple git add -A git commit -m "Updated from cc65 commit ${GITHUB_SHA}." - git push -v + git push -n # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From 268823fdbba2dcd6b3adedc782420b4e56ff1cb8 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 21:22:43 -0400 Subject: [PATCH 1324/2710] Changed a line that Github Actions claimed was bad. --- .github/workflows/snapshot-on-push-master.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 7b26a6e2a..8ef2f401a 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -98,14 +98,14 @@ jobs: - name: Get the online documents repo. uses: actions/checkout@v2 - with: - repository: cc65/doc - path: doc.git + with: + repository: cc65/doc + path: doc.git - name: Update the online documents. env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - env + env cd doc.git rm *.* cp ../html/*.* . From 16d259d2b48a96f0521219d5ad35f5d25325e828 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 21:44:42 -0400 Subject: [PATCH 1325/2710] Commented out the push command. --- .github/workflows/snapshot-on-push-master.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 8ef2f401a..f514a84d9 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -114,7 +114,7 @@ jobs: git config push.default simple git add -A git commit -m "Updated from cc65 commit ${GITHUB_SHA}." - git push -n + #git push -v # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From 794ebd7a0bc10b863e6d764df63cc49a5976b64a Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Sat, 18 Jun 2022 21:04:36 +0200 Subject: [PATCH 1326/2710] Test cases for .assert warnings --- test/asm/listing/030-assert-success.bin-ref | 1 + test/asm/listing/030-assert-success.err-ref | 20 +++++ .../listing/030-assert-success.ld65err-ref | 40 +++++++++ test/asm/listing/030-assert-success.s | 81 +++++++++++++++++++ test/asm/listing/Makefile | 17 +++- 5 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 test/asm/listing/030-assert-success.bin-ref create mode 100644 test/asm/listing/030-assert-success.err-ref create mode 100644 test/asm/listing/030-assert-success.ld65err-ref create mode 100644 test/asm/listing/030-assert-success.s diff --git a/test/asm/listing/030-assert-success.bin-ref b/test/asm/listing/030-assert-success.bin-ref new file mode 100644 index 000000000..685e809a7 --- /dev/null +++ b/test/asm/listing/030-assert-success.bin-ref @@ -0,0 +1 @@ +êê \ No newline at end of file diff --git a/test/asm/listing/030-assert-success.err-ref b/test/asm/listing/030-assert-success.err-ref new file mode 100644 index 000000000..e36a9e6bc --- /dev/null +++ b/test/asm/listing/030-assert-success.err-ref @@ -0,0 +1,20 @@ +030-assert-success.s:45: Warning: Code not at $0000 +030-assert-success.s:46: Warning: Code not at $0000 +030-assert-success.s:48: Warning: Code not at $0001 +030-assert-success.s:49: Warning: Code not at $0001 +030-assert-success.s:51: Warning: Code not at $1000 +030-assert-success.s:52: Warning: Code not at $1000 +030-assert-success.s:54: Warning: Code not at $1001 +030-assert-success.s:55: Warning: Code not at $1001 +030-assert-success.s:60: Warning: Code not at $8001 +030-assert-success.s:61: Warning: Code not at $8001 +030-assert-success.s:65: Warning: Code not at $0000 +030-assert-success.s:66: Warning: Code not at $0000 +030-assert-success.s:68: Warning: Code not at $0001 +030-assert-success.s:69: Warning: Code not at $0001 +030-assert-success.s:71: Warning: Code not at $1000 +030-assert-success.s:72: Warning: Code not at $1000 +030-assert-success.s:74: Warning: Code not at $1001 +030-assert-success.s:75: Warning: Code not at $1001 +030-assert-success.s:77: Warning: Code not at $8000 +030-assert-success.s:78: Warning: Code not at $8000 diff --git a/test/asm/listing/030-assert-success.ld65err-ref b/test/asm/listing/030-assert-success.ld65err-ref new file mode 100644 index 000000000..2f099f95f --- /dev/null +++ b/test/asm/listing/030-assert-success.ld65err-ref @@ -0,0 +1,40 @@ +ld65: Warning: 030-assert-success.s:3: Code not at $0000 +ld65: Warning: 030-assert-success.s:4: Code not at $0000 +ld65: Warning: 030-assert-success.s:6: Code not at $0001 +ld65: Warning: 030-assert-success.s:7: Code not at $0001 +ld65: Warning: 030-assert-success.s:12: Code not at $1001 +ld65: Warning: 030-assert-success.s:13: Code not at $1001 +ld65: Warning: 030-assert-success.s:15: Code not at $8000 +ld65: Warning: 030-assert-success.s:16: Code not at $8000 +ld65: Warning: 030-assert-success.s:18: Code not at $8001 +ld65: Warning: 030-assert-success.s:19: Code not at $8001 +ld65: Warning: 030-assert-success.s:23: Code not at $0000 +ld65: Warning: 030-assert-success.s:24: Code not at $0000 +ld65: Warning: 030-assert-success.s:26: Code not at $0001 +ld65: Warning: 030-assert-success.s:27: Code not at $0001 +ld65: Warning: 030-assert-success.s:29: Code not at $1000 +ld65: Warning: 030-assert-success.s:30: Code not at $1000 +ld65: Warning: 030-assert-success.s:35: Code not at $8000 +ld65: Warning: 030-assert-success.s:36: Code not at $8000 +ld65: Warning: 030-assert-success.s:38: Code not at $8001 +ld65: Warning: 030-assert-success.s:39: Code not at $8001 +ld65: Warning: 030-assert-success.s:45: Code not at $0000 +ld65: Warning: 030-assert-success.s:46: Code not at $0000 +ld65: Warning: 030-assert-success.s:48: Code not at $0001 +ld65: Warning: 030-assert-success.s:49: Code not at $0001 +ld65: Warning: 030-assert-success.s:51: Code not at $1000 +ld65: Warning: 030-assert-success.s:52: Code not at $1000 +ld65: Warning: 030-assert-success.s:54: Code not at $1001 +ld65: Warning: 030-assert-success.s:55: Code not at $1001 +ld65: Warning: 030-assert-success.s:60: Code not at $8001 +ld65: Warning: 030-assert-success.s:61: Code not at $8001 +ld65: Warning: 030-assert-success.s:65: Code not at $0000 +ld65: Warning: 030-assert-success.s:66: Code not at $0000 +ld65: Warning: 030-assert-success.s:68: Code not at $0001 +ld65: Warning: 030-assert-success.s:69: Code not at $0001 +ld65: Warning: 030-assert-success.s:71: Code not at $1000 +ld65: Warning: 030-assert-success.s:72: Code not at $1000 +ld65: Warning: 030-assert-success.s:74: Code not at $1001 +ld65: Warning: 030-assert-success.s:75: Code not at $1001 +ld65: Warning: 030-assert-success.s:77: Code not at $8000 +ld65: Warning: 030-assert-success.s:78: Code not at $8000 diff --git a/test/asm/listing/030-assert-success.s b/test/asm/listing/030-assert-success.s new file mode 100644 index 000000000..17abcb22f --- /dev/null +++ b/test/asm/listing/030-assert-success.s @@ -0,0 +1,81 @@ +; 2022-06-15 Spiro Trikaliotis + + .ASSERT * = $0000, warning, "Code not at $0000" + .assert * = $0000, warning, "Code not at $0000" + + .ASSERT * = $0001, warning, "Code not at $0001" + .assert * = $0001, warning, "Code not at $0001" + + .ASSERT * = $1000, warning, "Code not at $1000" + .assert * = $1000, warning, "Code not at $1000" + + .ASSERT * = $1001, warning, "Code not at $1001" + .assert * = $1001, warning, "Code not at $1001" + + .ASSERT * = $8000, warning, "Code not at $8000" + .assert * = $8000, warning, "Code not at $8000" + + .ASSERT * = $8001, warning, "Code not at $8001" + .assert * = $8001, warning, "Code not at $8001" + + nop + + .ASSERT * = $0000, warning, "Code not at $0000" + .assert * = $0000, warning, "Code not at $0000" + + .ASSERT * = $0001, warning, "Code not at $0001" + .assert * = $0001, warning, "Code not at $0001" + + .ASSERT * = $1000, warning, "Code not at $1000" + .assert * = $1000, warning, "Code not at $1000" + + .ASSERT * = $1001, warning, "Code not at $1001" + .assert * = $1001, warning, "Code not at $1001" + + .ASSERT * = $8000, warning, "Code not at $8000" + .assert * = $8000, warning, "Code not at $8000" + + .ASSERT * = $8001, warning, "Code not at $8001" + .assert * = $8001, warning, "Code not at $8001" + + + + .org $8000 + + .ASSERT * = $0000, warning, "Code not at $0000" + .assert * = $0000, warning, "Code not at $0000" + + .ASSERT * = $0001, warning, "Code not at $0001" + .assert * = $0001, warning, "Code not at $0001" + + .ASSERT * = $1000, warning, "Code not at $1000" + .assert * = $1000, warning, "Code not at $1000" + + .ASSERT * = $1001, warning, "Code not at $1001" + .assert * = $1001, warning, "Code not at $1001" + + .ASSERT * = $8000, warning, "Code not at $8000" + .assert * = $8000, warning, "Code not at $8000" + + .ASSERT * = $8001, warning, "Code not at $8001" + .assert * = $8001, warning, "Code not at $8001" + + nop + + .ASSERT * = $0000, warning, "Code not at $0000" + .assert * = $0000, warning, "Code not at $0000" + + .ASSERT * = $0001, warning, "Code not at $0001" + .assert * = $0001, warning, "Code not at $0001" + + .ASSERT * = $1000, warning, "Code not at $1000" + .assert * = $1000, warning, "Code not at $1000" + + .ASSERT * = $1001, warning, "Code not at $1001" + .assert * = $1001, warning, "Code not at $1001" + + .ASSERT * = $8000, warning, "Code not at $8000" + .assert * = $8000, warning, "Code not at $8000" + + .ASSERT * = $8001, warning, "Code not at $8001" + .assert * = $8001, warning, "Code not at $8001" diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index 8eed4e409..6889a84dd 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -43,9 +43,12 @@ $(ISEQUAL): ../../isequal.c | $(WORKDIR) $(CC) $(CFLAGS) -o $@ $< +$(WORKDIR)/_empty: + touch $@ + define LISTING_template -$(WORKDIR)/$1.bin: $1.s $(ISEQUAL) +$(WORKDIR)/$1.bin: $1.s $(ISEQUAL) $(WORKDIR)/_empty $(if $(QUIET),echo asm/$1.bin) # compile without generating listing @@ -54,6 +57,8 @@ $(WORKDIR)/$1.bin: $1.s $(ISEQUAL) ifneq ($(wildcard $1.err-ref),) $(ISEQUAL) $1.err-ref $$(@:.bin=.err) +else + $(ISEQUAL) $(WORKDIR)/_empty $$(@:.bin=.err) endif ifneq ($(wildcard $1.bin-ref),) @@ -61,10 +66,18 @@ ifneq ($(wildcard $1.bin-ref),) endif $(CA65) -t none -l $$(@:.bin=.list.orig) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 - $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib + $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.ld65-err) 2>&1 ifneq ($(wildcard $1.err-ref),) $(ISEQUAL) $1.err-ref $$(@:.bin=.list-err) +else + $(ISEQUAL) $(WORKDIR)/_empty $$(@:.bin=.list-err) +endif + +ifneq ($(wildcard $1.ld65err-ref),) + $(ISEQUAL) $1.ld65err-ref $$(@:.bin=.ld65-err) +else + $(ISEQUAL) $(WORKDIR)/_empty $$(@:.bin=.ld65-err) endif # check if the result bin is the same as without listing file From 297a11fcec5ae5478f6015fd177bbe64295532b4 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Sat, 18 Jun 2022 22:22:27 +0200 Subject: [PATCH 1327/2710] Add more assert tests --- test/asm/listing/031-assert-error.err | 0 test/asm/listing/031-assert-error.err-ref | 2 ++ test/asm/listing/031-assert-error.no-ld65 | 0 test/asm/listing/031-assert-error.s | 28 +++++++++++++++++++ test/asm/listing/032-assert-error2.err | 0 .../asm/listing/032-assert-error2.ld65err-ref | 1 + test/asm/listing/032-assert-error2.s | 8 ++++++ test/asm/listing/032-assert-error3.err | 0 .../asm/listing/032-assert-error3.ld65err-ref | 1 + test/asm/listing/032-assert-error3.s | 8 ++++++ test/asm/listing/Makefile | 28 +++++++++++++++---- 11 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 test/asm/listing/031-assert-error.err create mode 100644 test/asm/listing/031-assert-error.err-ref create mode 100644 test/asm/listing/031-assert-error.no-ld65 create mode 100644 test/asm/listing/031-assert-error.s create mode 100644 test/asm/listing/032-assert-error2.err create mode 100644 test/asm/listing/032-assert-error2.ld65err-ref create mode 100644 test/asm/listing/032-assert-error2.s create mode 100644 test/asm/listing/032-assert-error3.err create mode 100644 test/asm/listing/032-assert-error3.ld65err-ref create mode 100644 test/asm/listing/032-assert-error3.s diff --git a/test/asm/listing/031-assert-error.err b/test/asm/listing/031-assert-error.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/031-assert-error.err-ref b/test/asm/listing/031-assert-error.err-ref new file mode 100644 index 000000000..f5cd108ac --- /dev/null +++ b/test/asm/listing/031-assert-error.err-ref @@ -0,0 +1,2 @@ +031-assert-error.s:27: Error: Code not at $8001 +031-assert-error.s:28: Error: Code not at $8001 diff --git a/test/asm/listing/031-assert-error.no-ld65 b/test/asm/listing/031-assert-error.no-ld65 new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/031-assert-error.s b/test/asm/listing/031-assert-error.s new file mode 100644 index 000000000..4aafb560b --- /dev/null +++ b/test/asm/listing/031-assert-error.s @@ -0,0 +1,28 @@ +; 2022-06-15 Spiro Trikaliotis + + .ASSERT * = $0000, error, "Code not at $0000" + .assert * = $0000, error, "Code not at $0000" + + .ASSERT * = $0001, error, "Code not at $0001" + .assert * = $0001, error, "Code not at $0001" + + .ASSERT * = $1000, error, "Code not at $1000" + .assert * = $1000, error, "Code not at $1000" + + .ASSERT * = $1001, error, "Code not at $1001" + .assert * = $1001, error, "Code not at $1001" + + .ASSERT * = $8000, error, "Code not at $8000" + .assert * = $8000, error, "Code not at $8000" + + .ASSERT * = $8001, error, "Code not at $8001" + .assert * = $8001, error, "Code not at $8001" + + + .org $8000 + + .ASSERT * = $8000, error, "Code not at $8000" + .assert * = $8000, error, "Code not at $8000" + + .ASSERT * = $8001, error, "Code not at $8001" + .assert * = $8001, error, "Code not at $8001" diff --git a/test/asm/listing/032-assert-error2.err b/test/asm/listing/032-assert-error2.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/032-assert-error2.ld65err-ref b/test/asm/listing/032-assert-error2.ld65err-ref new file mode 100644 index 000000000..d275d4ee9 --- /dev/null +++ b/test/asm/listing/032-assert-error2.ld65err-ref @@ -0,0 +1 @@ +ld65: Error: 032-assert-error2.s:3: Code not at $0000 diff --git a/test/asm/listing/032-assert-error2.s b/test/asm/listing/032-assert-error2.s new file mode 100644 index 000000000..236c2c6c4 --- /dev/null +++ b/test/asm/listing/032-assert-error2.s @@ -0,0 +1,8 @@ +; 2022-06-18 Spiro Trikaliotis + + .ASSERT * = $0000, error, "Code not at $0000" + .ASSERT * = $0001, error, "Code not at $0001" + .ASSERT * = $1000, error, "Code not at $1000" + .ASSERT * = $1001, error, "Code not at $1001" + .ASSERT * = $8000, error, "Code not at $8000" + .ASSERT * = $8001, error, "Code not at $8001" diff --git a/test/asm/listing/032-assert-error3.err b/test/asm/listing/032-assert-error3.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/032-assert-error3.ld65err-ref b/test/asm/listing/032-assert-error3.ld65err-ref new file mode 100644 index 000000000..623c6642b --- /dev/null +++ b/test/asm/listing/032-assert-error3.ld65err-ref @@ -0,0 +1 @@ +ld65: Error: 032-assert-error3.s:3: Code not at $0000 diff --git a/test/asm/listing/032-assert-error3.s b/test/asm/listing/032-assert-error3.s new file mode 100644 index 000000000..c497dc6ed --- /dev/null +++ b/test/asm/listing/032-assert-error3.s @@ -0,0 +1,8 @@ +; 2022-06-18 Spiro Trikaliotis + + .assert * = $0000, error, "Code not at $0000" + .assert * = $0001, error, "Code not at $0001" + .assert * = $1000, error, "Code not at $1000" + .assert * = $1001, error, "Code not at $1001" + .assert * = $8000, error, "Code not at $8000" + .assert * = $8001, error, "Code not at $8001" diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index 6889a84dd..d65b47bde 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -52,8 +52,17 @@ $(WORKDIR)/$1.bin: $1.s $(ISEQUAL) $(WORKDIR)/_empty $(if $(QUIET),echo asm/$1.bin) # compile without generating listing +ifeq ($(wildcard $1.err),) $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) 2>&1 +ifeq ($(wildcard $1.no-ld65),) $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib +endif +else + $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) 2>&1 || true +ifeq ($(wildcard $1.no-ld65),) + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib || true +endif +endif ifneq ($(wildcard $1.err-ref),) $(ISEQUAL) $1.err-ref $$(@:.bin=.err) @@ -65,8 +74,17 @@ ifneq ($(wildcard $1.bin-ref),) $(ISEQUAL) $1.bin-ref $$@ endif +ifeq ($(wildcard $1.err),) $(CA65) -t none -l $$(@:.bin=.list.orig) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 +ifeq ($(wildcard $1.no-ld65),) $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.ld65-err) 2>&1 +endif +else + $(CA65) -t none -l $$(@:.bin=.list.orig) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 || true +ifeq ($(wildcard $1.no-ld65),) + $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.ld65-err) 2>&1 || true +endif +endif ifneq ($(wildcard $1.err-ref),) $(ISEQUAL) $1.err-ref $$(@:.bin=.list-err) @@ -74,14 +92,18 @@ else $(ISEQUAL) $(WORKDIR)/_empty $$(@:.bin=.list-err) endif +ifneq ($(wildcard $(WORKDIR)/$1.ld65-err),) ifneq ($(wildcard $1.ld65err-ref),) $(ISEQUAL) $1.ld65err-ref $$(@:.bin=.ld65-err) else $(ISEQUAL) $(WORKDIR)/_empty $$(@:.bin=.ld65-err) endif +endif # check if the result bin is the same as without listing file +ifeq ($(wildcard $1.err),) $(ISEQUAL) $$@ $$(@:.bin=.list-bin) +endif ifneq ($(wildcard $1.list-ref),) # we have a reference file, compare that, too @@ -91,12 +113,6 @@ ifneq ($(wildcard $1.list-ref),) $(ISEQUAL) $1.list-ref $$(@:.bin=.lst) endif -# $(CA65) -t none -f -l $$(@:.bin=.flist.orig) -o $$(@:.bin=.flist-o) $$< -# $(LD65) -t none -o $$(@:.bin=.flist-bin) $$(@:.bin=.flist-o) none.lib - -# # check if the result bin is the same as without listing file -# $(ISEQUAL) $$@ $$(@:.bin=.flist-bin) - endef # LISTING_template From 1446b7dcc305bda4d973c5ef9d3203243d82868b Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Sat, 18 Jun 2022 23:38:18 +0200 Subject: [PATCH 1328/2710] isequal: Add options for better handling --binary: handled binary files --empty: check if file is empty --skipleft=<n>: Skip <n> lines at the start of the left (first) file --skipright=<n>: Skip <n> lines at the start of the right (second) file Note that --binary, --empty and one or both of --skipXXX are mutual exclusive; that is, you cannot specify more than one of them at the same time, or the behaviour will be unpredictable. --- test/asm/listing/Makefile | 20 ++--- test/isequal.c | 151 +++++++++++++++++++++++++++++++++++--- 2 files changed, 149 insertions(+), 22 deletions(-) diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index d65b47bde..24b4c2d0e 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -43,12 +43,9 @@ $(ISEQUAL): ../../isequal.c | $(WORKDIR) $(CC) $(CFLAGS) -o $@ $< -$(WORKDIR)/_empty: - touch $@ - define LISTING_template -$(WORKDIR)/$1.bin: $1.s $(ISEQUAL) $(WORKDIR)/_empty +$(WORKDIR)/$1.bin: $1.s $(ISEQUAL) $(if $(QUIET),echo asm/$1.bin) # compile without generating listing @@ -67,20 +64,20 @@ endif ifneq ($(wildcard $1.err-ref),) $(ISEQUAL) $1.err-ref $$(@:.bin=.err) else - $(ISEQUAL) $(WORKDIR)/_empty $$(@:.bin=.err) + $(ISEQUAL) --empty $$(@:.bin=.err) endif ifneq ($(wildcard $1.bin-ref),) - $(ISEQUAL) $1.bin-ref $$@ + $(ISEQUAL) --binary $1.bin-ref $$@ endif ifeq ($(wildcard $1.err),) - $(CA65) -t none -l $$(@:.bin=.list.orig) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 + $(CA65) -t none -l $$(@:.bin=.lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 ifeq ($(wildcard $1.no-ld65),) $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.ld65-err) 2>&1 endif else - $(CA65) -t none -l $$(@:.bin=.list.orig) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 || true + $(CA65) -t none -l $$(@:.bin=.lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 || true ifeq ($(wildcard $1.no-ld65),) $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.ld65-err) 2>&1 || true endif @@ -89,14 +86,14 @@ endif ifneq ($(wildcard $1.err-ref),) $(ISEQUAL) $1.err-ref $$(@:.bin=.list-err) else - $(ISEQUAL) $(WORKDIR)/_empty $$(@:.bin=.list-err) + $(ISEQUAL) --empty $$(@:.bin=.list-err) endif ifneq ($(wildcard $(WORKDIR)/$1.ld65-err),) ifneq ($(wildcard $1.ld65err-ref),) $(ISEQUAL) $1.ld65err-ref $$(@:.bin=.ld65-err) else - $(ISEQUAL) $(WORKDIR)/_empty $$(@:.bin=.ld65-err) + $(ISEQUAL) --empty $$(@:.bin=.ld65-err) endif endif @@ -109,8 +106,7 @@ ifneq ($(wildcard $1.list-ref),) # we have a reference file, compare that, too # remove first line which contains a version number - tail -n +2 $$(@:.bin=.list.orig) > $$(@:.bin=.lst) - $(ISEQUAL) $1.list-ref $$(@:.bin=.lst) + $(ISEQUAL) --skipright=1 $1.list-ref $$(@:.bin=.lst) endif endef # LISTING_template diff --git a/test/isequal.c b/test/isequal.c index b3806c7e4..e71416180 100644 --- a/test/isequal.c +++ b/test/isequal.c @@ -3,6 +3,97 @@ #include <stdlib.h> #include <stdio.h> +#include <string.h> + +static int binary = 0; +static int empty = 0; +static int skiplines_left = 0; +static int skiplines_right = 0; +static char * filename_left = 0; +static char * filename_right = 0; + +int handleargparameter(int offset, char * parameter) +{ + long number = -1; + char * endptr = NULL; + + if (parameter[offset++] != '=') { + return -1; + } + + number = strtol(parameter + offset, &endptr, 10); + + if (endptr == NULL || *endptr != 0) { + return -1; + + } + return number; +} + +int handleparameter(int argc, char *argv[]) +{ + static const char opt_binary[] = "--binary"; + static const char opt_empty[] = "--empty"; + static const char opt_skipleft[] = "--skipleft"; + static const char opt_skipright[] = "--skipright"; + + static const char len_skipleft = sizeof opt_skipleft - 1; + static const char len_skipright = sizeof opt_skipright - 1; + + int argindex = 1; + + if (argc < 2) { + return -1; + } + + while (argindex < argc && argv[argindex] && argv[argindex][0] == '-') { + if (strcmp(argv[argindex], opt_binary) == 0) { + if (empty || skiplines_left || skiplines_right) { + fprintf(stderr, "--empty cannot go with other options.\n"); + exit(1); + } + binary = 1; + } + else if (strcmp(argv[argindex], opt_empty) == 0) { + if (binary || skiplines_left || skiplines_right) { + fprintf(stderr, "--binary cannot go with other options.\n"); + exit(1); + } + empty = 1; + } + else if (strncmp(argv[argindex], opt_skipleft, len_skipleft) == 0) { + if (binary || empty) { + fprintf(stderr, "%s cannot go with other options.\n", opt_skipleft); + exit(1); + } + skiplines_left = handleargparameter(len_skipleft, argv[argindex]); + if (skiplines_left < 0) { + fprintf(stderr, "%s: you must specify the number of lines\n", opt_skipleft); + } + } + else if (strncmp(argv[argindex], opt_skipright, len_skipright) == 0) { + if (binary || empty) { + fprintf(stderr, "%s cannot go with other options.\n", opt_skipright); + exit(1); + } + skiplines_right = handleargparameter(len_skipright, argv[argindex]); + if (skiplines_right < 0) { + fprintf(stderr, "%s: you must specify the number of lines\n", opt_skipright); + } + } + ++argindex; + } + + if (argc + empty - argindex != 2) { + fprintf(stderr, "filenames are missing!\n"); + return -1; + } + + filename_left = argv[argindex++]; + filename_right = argv[argindex++]; + + return 0; +} /* get the next character from FILE and convert commonly used line-endings all into the same value (0x0a, as used on *nix systems) @@ -17,7 +108,7 @@ int getnext(FILE *f) { int c = fgetc(f); - if (c == 0x0d) { + if (!binary && c == 0x0d) { if (!feof(f)) { int n = fgetc(f); if (n != 0x0a) { @@ -30,25 +121,65 @@ int getnext(FILE *f) return c; } +void skiplines(FILE *f, int skipcount) +{ + int c; + + while (skipcount > 0) { + c = getnext(f); + if (feof(f)) { + return; + } + + if (c == 0x0a) { + --skipcount; + } + } +} + int main(int argc, char *argv[]) { FILE *f1, *f2; - if (argc < 3) { + + if (handleparameter(argc, argv) < 0) { return EXIT_FAILURE; } - f1 = fopen(argv[1], "rb"); - f2 = fopen(argv[2], "rb"); - if ((f1 == NULL) || (f2 == NULL)) { + + f1 = fopen(filename_left, "rb"); + if (f1 == NULL) { return EXIT_FAILURE; } - for(;;) { - if (feof(f1) && feof(f2)) { - return EXIT_SUCCESS; - } else if (feof(f1) || feof(f2)) { + + if (empty) { + fseek(f1, 0, SEEK_END); + if (ftell(f1) != 0) { return EXIT_FAILURE; } - if (getnext(f1) != getnext(f2)) { + else { + return EXIT_SUCCESS; + } + } + else { + if (skiplines_left) { + skiplines(f1, skiplines_left); + } + + f2 = fopen(filename_right, "rb"); + if (f2 == NULL) { return EXIT_FAILURE; } + if (skiplines_right) { + skiplines(f2, skiplines_right); + } + for(;;) { + if (feof(f1) && feof(f2)) { + return EXIT_SUCCESS; + } else if (feof(f1) || feof(f2)) { + return EXIT_FAILURE; + } + if (getnext(f1) != getnext(f2)) { + return EXIT_FAILURE; + } + } } } From e17cb6d60297b5ef868ec9e4c0f7b33bcf092bf2 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Sun, 19 Jun 2022 22:42:44 +0200 Subject: [PATCH 1329/2710] isequal: add --skip for both left and right file isequal: New option --skip as a shortcut for --skipleft and --skipright at once. Use that for the .list-ref files, so they now contain the first line of the output, too, which is ignored. --- test/asm/listing/001-macro-simple-listing.list-ref | 1 + test/asm/listing/002-macro-param-listing.list-ref | 1 + test/asm/listing/020-asciiz.list-ref | 1 + test/asm/listing/100-byte.list-ref | 1 + test/asm/listing/101-byt.list-ref | 1 + test/asm/listing/102-word.list-ref | 1 + test/asm/listing/103-dbyt.list-ref | 1 + test/asm/listing/104-dword.list-ref | 1 + test/asm/listing/105-faraddr.list-ref | 1 + test/asm/listing/106-hibytes.list-ref | 1 + test/asm/listing/107-lobytes.list-ref | 1 + test/asm/listing/Makefile | 2 +- test/isequal.c | 12 ++++++++++++ 13 files changed, 24 insertions(+), 1 deletion(-) diff --git a/test/asm/listing/001-macro-simple-listing.list-ref b/test/asm/listing/001-macro-simple-listing.list-ref index 72849ea11..268862e80 100644 --- a/test/asm/listing/001-macro-simple-listing.list-ref +++ b/test/asm/listing/001-macro-simple-listing.list-ref @@ -1,3 +1,4 @@ +ca65 Vx.xx - Git XXXXXXXXX Main file : 001-macro-simple-listing.s Current file: 001-macro-simple-listing.s diff --git a/test/asm/listing/002-macro-param-listing.list-ref b/test/asm/listing/002-macro-param-listing.list-ref index 25d67d504..f538ca197 100644 --- a/test/asm/listing/002-macro-param-listing.list-ref +++ b/test/asm/listing/002-macro-param-listing.list-ref @@ -1,3 +1,4 @@ +ca65 Vx.xx - Git XXXXXXXXX Main file : 002-macro-param-listing.s Current file: 002-macro-param-listing.s diff --git a/test/asm/listing/020-asciiz.list-ref b/test/asm/listing/020-asciiz.list-ref index a090f06a4..7b2f9d2f4 100644 --- a/test/asm/listing/020-asciiz.list-ref +++ b/test/asm/listing/020-asciiz.list-ref @@ -1,3 +1,4 @@ +ca65 Vx.xx - Git XXXXXXXXX Main file : 020-asciiz.s Current file: 020-asciiz.s diff --git a/test/asm/listing/100-byte.list-ref b/test/asm/listing/100-byte.list-ref index 1c091efff..4885dfd53 100644 --- a/test/asm/listing/100-byte.list-ref +++ b/test/asm/listing/100-byte.list-ref @@ -1,3 +1,4 @@ +ca65 Vx.xx - Git XXXXXXXXX Main file : 100-byte.s Current file: 100-byte.s diff --git a/test/asm/listing/101-byt.list-ref b/test/asm/listing/101-byt.list-ref index 796c8e6a1..43677a703 100644 --- a/test/asm/listing/101-byt.list-ref +++ b/test/asm/listing/101-byt.list-ref @@ -1,3 +1,4 @@ +ca65 Vx.xx - Git XXXXXXXXX Main file : 101-byt.s Current file: 101-byt.s diff --git a/test/asm/listing/102-word.list-ref b/test/asm/listing/102-word.list-ref index 3d55bc3fb..5c5d4e9e5 100644 --- a/test/asm/listing/102-word.list-ref +++ b/test/asm/listing/102-word.list-ref @@ -1,3 +1,4 @@ +ca65 Vx.xx - Git XXXXXXXXX Main file : 102-word.s Current file: 102-word.s diff --git a/test/asm/listing/103-dbyt.list-ref b/test/asm/listing/103-dbyt.list-ref index 4d06dbe26..211ec8280 100644 --- a/test/asm/listing/103-dbyt.list-ref +++ b/test/asm/listing/103-dbyt.list-ref @@ -1,3 +1,4 @@ +ca65 Vx.xx - Git XXXXXXXXX Main file : 103-dbyt.s Current file: 103-dbyt.s diff --git a/test/asm/listing/104-dword.list-ref b/test/asm/listing/104-dword.list-ref index b449b45a8..9f52412d8 100644 --- a/test/asm/listing/104-dword.list-ref +++ b/test/asm/listing/104-dword.list-ref @@ -1,3 +1,4 @@ +ca65 Vx.xx - Git XXXXXXXXX Main file : 104-dword.s Current file: 104-dword.s diff --git a/test/asm/listing/105-faraddr.list-ref b/test/asm/listing/105-faraddr.list-ref index 5a8966de9..86f534b76 100644 --- a/test/asm/listing/105-faraddr.list-ref +++ b/test/asm/listing/105-faraddr.list-ref @@ -1,3 +1,4 @@ +ca65 Vx.xx - Git XXXXXXXXX Main file : 105-faraddr.s Current file: 105-faraddr.s diff --git a/test/asm/listing/106-hibytes.list-ref b/test/asm/listing/106-hibytes.list-ref index d4c4272af..ddd9146de 100644 --- a/test/asm/listing/106-hibytes.list-ref +++ b/test/asm/listing/106-hibytes.list-ref @@ -1,3 +1,4 @@ +ca65 Vx.xx - Git XXXXXXXXX Main file : 106-hibytes.s Current file: 106-hibytes.s diff --git a/test/asm/listing/107-lobytes.list-ref b/test/asm/listing/107-lobytes.list-ref index 3511c91d8..c4b5f27d3 100644 --- a/test/asm/listing/107-lobytes.list-ref +++ b/test/asm/listing/107-lobytes.list-ref @@ -1,3 +1,4 @@ +ca65 Vx.xx - Git XXXXXXXXX Main file : 107-lobytes.s Current file: 107-lobytes.s diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index 24b4c2d0e..272a6904c 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -106,7 +106,7 @@ ifneq ($(wildcard $1.list-ref),) # we have a reference file, compare that, too # remove first line which contains a version number - $(ISEQUAL) --skipright=1 $1.list-ref $$(@:.bin=.lst) + $(ISEQUAL) --skip=1 $1.list-ref $$(@:.bin=.lst) endif endef # LISTING_template diff --git a/test/isequal.c b/test/isequal.c index e71416180..2d6cf5253 100644 --- a/test/isequal.c +++ b/test/isequal.c @@ -36,9 +36,11 @@ int handleparameter(int argc, char *argv[]) static const char opt_empty[] = "--empty"; static const char opt_skipleft[] = "--skipleft"; static const char opt_skipright[] = "--skipright"; + static const char opt_skip[] = "--skip"; static const char len_skipleft = sizeof opt_skipleft - 1; static const char len_skipright = sizeof opt_skipright - 1; + static const char len_skip = sizeof opt_skip - 1; int argindex = 1; @@ -81,6 +83,16 @@ int handleparameter(int argc, char *argv[]) fprintf(stderr, "%s: you must specify the number of lines\n", opt_skipright); } } + else if (strncmp(argv[argindex], opt_skip, len_skip) == 0) { + if (binary || empty) { + fprintf(stderr, "%s cannot go with other options.\n", opt_skipright); + exit(1); + } + skiplines_left = skiplines_right = handleargparameter(len_skip, argv[argindex]); + if (skiplines_left < 0) { + fprintf(stderr, "%s: you must specify the number of lines\n", opt_skip); + } + } ++argindex; } From 68da626d9ca2e2c497409348a29653c9e7c984d4 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 20 Jun 2022 03:08:47 -0400 Subject: [PATCH 1330/2710] Removed an environment experiment. --- .github/workflows/snapshot-on-push-master.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index f514a84d9..769d778d5 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -102,10 +102,7 @@ jobs: repository: cc65/doc path: doc.git - name: Update the online documents. - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - env cd doc.git rm *.* cp ../html/*.* . From 2040da052025f374f837b04564b83e79f571f06b Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Mon, 20 Jun 2022 16:30:51 +0200 Subject: [PATCH 1331/2710] Reorga of test/asm/listing/ add ref/ and control/ subdirectories, so the control files and result files do not clutter the directory, and it is clear which file has which purpose. --- test/asm/listing/Makefile | 34 +++++++++--------- .../{ => control}/031-assert-error.err | 0 .../{ => control}/031-assert-error.no-ld65 | 0 .../{ => control}/032-assert-error2.err | 0 .../{ => control}/032-assert-error3.err | 0 .../001-macro-simple-listing.list-ref | 0 .../002-macro-param-listing.list-ref | 0 .../listing/{ => ref}/010-paramcount.err-ref | 0 test/asm/listing/{ => ref}/020-asciiz.bin-ref | Bin .../asm/listing/{ => ref}/020-asciiz.list-ref | 0 .../{ => ref}/030-assert-success.bin-ref | 0 .../{ => ref}/030-assert-success.err-ref | 0 .../{ => ref}/030-assert-success.ld65err-ref | 0 .../{ => ref}/031-assert-error.err-ref | 0 .../{ => ref}/032-assert-error2.ld65err-ref | 0 .../{ => ref}/032-assert-error3.ld65err-ref | 0 test/asm/listing/{ => ref}/100-byte.bin-ref | Bin test/asm/listing/{ => ref}/100-byte.list-ref | 0 test/asm/listing/{ => ref}/101-byt.bin-ref | Bin test/asm/listing/{ => ref}/101-byt.list-ref | 0 test/asm/listing/{ => ref}/102-word.bin-ref | Bin test/asm/listing/{ => ref}/102-word.list-ref | 0 test/asm/listing/{ => ref}/103-dbyt.bin-ref | Bin test/asm/listing/{ => ref}/103-dbyt.list-ref | 0 test/asm/listing/{ => ref}/104-dword.bin-ref | Bin test/asm/listing/{ => ref}/104-dword.list-ref | 0 .../asm/listing/{ => ref}/105-faraddr.bin-ref | Bin .../listing/{ => ref}/105-faraddr.list-ref | 0 .../asm/listing/{ => ref}/106-hibytes.bin-ref | Bin .../listing/{ => ref}/106-hibytes.list-ref | 0 .../asm/listing/{ => ref}/107-lobytes.bin-ref | Bin .../listing/{ => ref}/107-lobytes.list-ref | 0 32 files changed, 17 insertions(+), 17 deletions(-) rename test/asm/listing/{ => control}/031-assert-error.err (100%) rename test/asm/listing/{ => control}/031-assert-error.no-ld65 (100%) rename test/asm/listing/{ => control}/032-assert-error2.err (100%) rename test/asm/listing/{ => control}/032-assert-error3.err (100%) rename test/asm/listing/{ => ref}/001-macro-simple-listing.list-ref (100%) rename test/asm/listing/{ => ref}/002-macro-param-listing.list-ref (100%) rename test/asm/listing/{ => ref}/010-paramcount.err-ref (100%) rename test/asm/listing/{ => ref}/020-asciiz.bin-ref (100%) rename test/asm/listing/{ => ref}/020-asciiz.list-ref (100%) rename test/asm/listing/{ => ref}/030-assert-success.bin-ref (100%) rename test/asm/listing/{ => ref}/030-assert-success.err-ref (100%) rename test/asm/listing/{ => ref}/030-assert-success.ld65err-ref (100%) rename test/asm/listing/{ => ref}/031-assert-error.err-ref (100%) rename test/asm/listing/{ => ref}/032-assert-error2.ld65err-ref (100%) rename test/asm/listing/{ => ref}/032-assert-error3.ld65err-ref (100%) rename test/asm/listing/{ => ref}/100-byte.bin-ref (100%) rename test/asm/listing/{ => ref}/100-byte.list-ref (100%) rename test/asm/listing/{ => ref}/101-byt.bin-ref (100%) rename test/asm/listing/{ => ref}/101-byt.list-ref (100%) rename test/asm/listing/{ => ref}/102-word.bin-ref (100%) rename test/asm/listing/{ => ref}/102-word.list-ref (100%) rename test/asm/listing/{ => ref}/103-dbyt.bin-ref (100%) rename test/asm/listing/{ => ref}/103-dbyt.list-ref (100%) rename test/asm/listing/{ => ref}/104-dword.bin-ref (100%) rename test/asm/listing/{ => ref}/104-dword.list-ref (100%) rename test/asm/listing/{ => ref}/105-faraddr.bin-ref (100%) rename test/asm/listing/{ => ref}/105-faraddr.list-ref (100%) rename test/asm/listing/{ => ref}/106-hibytes.bin-ref (100%) rename test/asm/listing/{ => ref}/106-hibytes.list-ref (100%) rename test/asm/listing/{ => ref}/107-lobytes.bin-ref (100%) rename test/asm/listing/{ => ref}/107-lobytes.list-ref (100%) diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index 272a6904c..e4528dd06 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -49,64 +49,64 @@ $(WORKDIR)/$1.bin: $1.s $(ISEQUAL) $(if $(QUIET),echo asm/$1.bin) # compile without generating listing -ifeq ($(wildcard $1.err),) +ifeq ($(wildcard control/$1.err),) $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) 2>&1 -ifeq ($(wildcard $1.no-ld65),) +ifeq ($(wildcard control/$1.no-ld65),) $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib endif else $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) 2>&1 || true -ifeq ($(wildcard $1.no-ld65),) +ifeq ($(wildcard control/$1.no-ld65),) $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib || true endif endif -ifneq ($(wildcard $1.err-ref),) - $(ISEQUAL) $1.err-ref $$(@:.bin=.err) +ifneq ($(wildcard ref/$1.err-ref),) + $(ISEQUAL) ref/$1.err-ref $$(@:.bin=.err) else $(ISEQUAL) --empty $$(@:.bin=.err) endif -ifneq ($(wildcard $1.bin-ref),) - $(ISEQUAL) --binary $1.bin-ref $$@ +ifneq ($(wildcard ref/$1.bin-ref),) + $(ISEQUAL) --binary ref/$1.bin-ref $$@ endif -ifeq ($(wildcard $1.err),) +ifeq ($(wildcard control/$1.err),) $(CA65) -t none -l $$(@:.bin=.lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 -ifeq ($(wildcard $1.no-ld65),) +ifeq ($(wildcard control/$1.no-ld65),) $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.ld65-err) 2>&1 endif else $(CA65) -t none -l $$(@:.bin=.lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 || true -ifeq ($(wildcard $1.no-ld65),) +ifeq ($(wildcard control/$1.no-ld65),) $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.ld65-err) 2>&1 || true endif endif -ifneq ($(wildcard $1.err-ref),) - $(ISEQUAL) $1.err-ref $$(@:.bin=.list-err) +ifneq ($(wildcard ref/$1.err-ref),) + $(ISEQUAL) ref/$1.err-ref $$(@:.bin=.list-err) else $(ISEQUAL) --empty $$(@:.bin=.list-err) endif ifneq ($(wildcard $(WORKDIR)/$1.ld65-err),) -ifneq ($(wildcard $1.ld65err-ref),) - $(ISEQUAL) $1.ld65err-ref $$(@:.bin=.ld65-err) +ifneq ($(wildcard ref/$1.ld65err-ref),) + $(ISEQUAL) ref/$1.ld65err-ref $$(@:.bin=.ld65-err) else $(ISEQUAL) --empty $$(@:.bin=.ld65-err) endif endif # check if the result bin is the same as without listing file -ifeq ($(wildcard $1.err),) +ifeq ($(wildcard control/$1.err),) $(ISEQUAL) $$@ $$(@:.bin=.list-bin) endif -ifneq ($(wildcard $1.list-ref),) +ifneq ($(wildcard ref/$1.list-ref),) # we have a reference file, compare that, too # remove first line which contains a version number - $(ISEQUAL) --skip=1 $1.list-ref $$(@:.bin=.lst) + $(ISEQUAL) --skip=1 ref/$1.list-ref $$(@:.bin=.lst) endif endef # LISTING_template diff --git a/test/asm/listing/031-assert-error.err b/test/asm/listing/control/031-assert-error.err similarity index 100% rename from test/asm/listing/031-assert-error.err rename to test/asm/listing/control/031-assert-error.err diff --git a/test/asm/listing/031-assert-error.no-ld65 b/test/asm/listing/control/031-assert-error.no-ld65 similarity index 100% rename from test/asm/listing/031-assert-error.no-ld65 rename to test/asm/listing/control/031-assert-error.no-ld65 diff --git a/test/asm/listing/032-assert-error2.err b/test/asm/listing/control/032-assert-error2.err similarity index 100% rename from test/asm/listing/032-assert-error2.err rename to test/asm/listing/control/032-assert-error2.err diff --git a/test/asm/listing/032-assert-error3.err b/test/asm/listing/control/032-assert-error3.err similarity index 100% rename from test/asm/listing/032-assert-error3.err rename to test/asm/listing/control/032-assert-error3.err diff --git a/test/asm/listing/001-macro-simple-listing.list-ref b/test/asm/listing/ref/001-macro-simple-listing.list-ref similarity index 100% rename from test/asm/listing/001-macro-simple-listing.list-ref rename to test/asm/listing/ref/001-macro-simple-listing.list-ref diff --git a/test/asm/listing/002-macro-param-listing.list-ref b/test/asm/listing/ref/002-macro-param-listing.list-ref similarity index 100% rename from test/asm/listing/002-macro-param-listing.list-ref rename to test/asm/listing/ref/002-macro-param-listing.list-ref diff --git a/test/asm/listing/010-paramcount.err-ref b/test/asm/listing/ref/010-paramcount.err-ref similarity index 100% rename from test/asm/listing/010-paramcount.err-ref rename to test/asm/listing/ref/010-paramcount.err-ref diff --git a/test/asm/listing/020-asciiz.bin-ref b/test/asm/listing/ref/020-asciiz.bin-ref similarity index 100% rename from test/asm/listing/020-asciiz.bin-ref rename to test/asm/listing/ref/020-asciiz.bin-ref diff --git a/test/asm/listing/020-asciiz.list-ref b/test/asm/listing/ref/020-asciiz.list-ref similarity index 100% rename from test/asm/listing/020-asciiz.list-ref rename to test/asm/listing/ref/020-asciiz.list-ref diff --git a/test/asm/listing/030-assert-success.bin-ref b/test/asm/listing/ref/030-assert-success.bin-ref similarity index 100% rename from test/asm/listing/030-assert-success.bin-ref rename to test/asm/listing/ref/030-assert-success.bin-ref diff --git a/test/asm/listing/030-assert-success.err-ref b/test/asm/listing/ref/030-assert-success.err-ref similarity index 100% rename from test/asm/listing/030-assert-success.err-ref rename to test/asm/listing/ref/030-assert-success.err-ref diff --git a/test/asm/listing/030-assert-success.ld65err-ref b/test/asm/listing/ref/030-assert-success.ld65err-ref similarity index 100% rename from test/asm/listing/030-assert-success.ld65err-ref rename to test/asm/listing/ref/030-assert-success.ld65err-ref diff --git a/test/asm/listing/031-assert-error.err-ref b/test/asm/listing/ref/031-assert-error.err-ref similarity index 100% rename from test/asm/listing/031-assert-error.err-ref rename to test/asm/listing/ref/031-assert-error.err-ref diff --git a/test/asm/listing/032-assert-error2.ld65err-ref b/test/asm/listing/ref/032-assert-error2.ld65err-ref similarity index 100% rename from test/asm/listing/032-assert-error2.ld65err-ref rename to test/asm/listing/ref/032-assert-error2.ld65err-ref diff --git a/test/asm/listing/032-assert-error3.ld65err-ref b/test/asm/listing/ref/032-assert-error3.ld65err-ref similarity index 100% rename from test/asm/listing/032-assert-error3.ld65err-ref rename to test/asm/listing/ref/032-assert-error3.ld65err-ref diff --git a/test/asm/listing/100-byte.bin-ref b/test/asm/listing/ref/100-byte.bin-ref similarity index 100% rename from test/asm/listing/100-byte.bin-ref rename to test/asm/listing/ref/100-byte.bin-ref diff --git a/test/asm/listing/100-byte.list-ref b/test/asm/listing/ref/100-byte.list-ref similarity index 100% rename from test/asm/listing/100-byte.list-ref rename to test/asm/listing/ref/100-byte.list-ref diff --git a/test/asm/listing/101-byt.bin-ref b/test/asm/listing/ref/101-byt.bin-ref similarity index 100% rename from test/asm/listing/101-byt.bin-ref rename to test/asm/listing/ref/101-byt.bin-ref diff --git a/test/asm/listing/101-byt.list-ref b/test/asm/listing/ref/101-byt.list-ref similarity index 100% rename from test/asm/listing/101-byt.list-ref rename to test/asm/listing/ref/101-byt.list-ref diff --git a/test/asm/listing/102-word.bin-ref b/test/asm/listing/ref/102-word.bin-ref similarity index 100% rename from test/asm/listing/102-word.bin-ref rename to test/asm/listing/ref/102-word.bin-ref diff --git a/test/asm/listing/102-word.list-ref b/test/asm/listing/ref/102-word.list-ref similarity index 100% rename from test/asm/listing/102-word.list-ref rename to test/asm/listing/ref/102-word.list-ref diff --git a/test/asm/listing/103-dbyt.bin-ref b/test/asm/listing/ref/103-dbyt.bin-ref similarity index 100% rename from test/asm/listing/103-dbyt.bin-ref rename to test/asm/listing/ref/103-dbyt.bin-ref diff --git a/test/asm/listing/103-dbyt.list-ref b/test/asm/listing/ref/103-dbyt.list-ref similarity index 100% rename from test/asm/listing/103-dbyt.list-ref rename to test/asm/listing/ref/103-dbyt.list-ref diff --git a/test/asm/listing/104-dword.bin-ref b/test/asm/listing/ref/104-dword.bin-ref similarity index 100% rename from test/asm/listing/104-dword.bin-ref rename to test/asm/listing/ref/104-dword.bin-ref diff --git a/test/asm/listing/104-dword.list-ref b/test/asm/listing/ref/104-dword.list-ref similarity index 100% rename from test/asm/listing/104-dword.list-ref rename to test/asm/listing/ref/104-dword.list-ref diff --git a/test/asm/listing/105-faraddr.bin-ref b/test/asm/listing/ref/105-faraddr.bin-ref similarity index 100% rename from test/asm/listing/105-faraddr.bin-ref rename to test/asm/listing/ref/105-faraddr.bin-ref diff --git a/test/asm/listing/105-faraddr.list-ref b/test/asm/listing/ref/105-faraddr.list-ref similarity index 100% rename from test/asm/listing/105-faraddr.list-ref rename to test/asm/listing/ref/105-faraddr.list-ref diff --git a/test/asm/listing/106-hibytes.bin-ref b/test/asm/listing/ref/106-hibytes.bin-ref similarity index 100% rename from test/asm/listing/106-hibytes.bin-ref rename to test/asm/listing/ref/106-hibytes.bin-ref diff --git a/test/asm/listing/106-hibytes.list-ref b/test/asm/listing/ref/106-hibytes.list-ref similarity index 100% rename from test/asm/listing/106-hibytes.list-ref rename to test/asm/listing/ref/106-hibytes.list-ref diff --git a/test/asm/listing/107-lobytes.bin-ref b/test/asm/listing/ref/107-lobytes.bin-ref similarity index 100% rename from test/asm/listing/107-lobytes.bin-ref rename to test/asm/listing/ref/107-lobytes.bin-ref diff --git a/test/asm/listing/107-lobytes.list-ref b/test/asm/listing/ref/107-lobytes.list-ref similarity index 100% rename from test/asm/listing/107-lobytes.list-ref rename to test/asm/listing/ref/107-lobytes.list-ref From 7476c86ba9dbda053ca863cd90364fadf87973c4 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Mon, 20 Jun 2022 16:33:25 +0200 Subject: [PATCH 1332/2710] More .assert testcases Add testcases with error generation. --- test/asm/listing/032-assert-error3.s | 7 +------ test/asm/listing/032-assert-error4.s | 3 +++ test/asm/listing/032-assert-error5.s | 3 +++ test/asm/listing/032-assert-error6.s | 3 +++ test/asm/listing/032-assert-error7.s | 3 +++ test/asm/listing/032-assert-error8.s | 3 +++ test/asm/listing/control/032-assert-error4.err | 0 test/asm/listing/control/032-assert-error6.err | 0 test/asm/listing/control/032-assert-error7.err | 0 test/asm/listing/control/032-assert-error8.err | 0 test/asm/listing/ref/032-assert-error4.ld65err-ref | 1 + test/asm/listing/ref/032-assert-error5.ld65err-ref | 0 test/asm/listing/ref/032-assert-error6.ld65err-ref | 1 + test/asm/listing/ref/032-assert-error7.ld65err-ref | 1 + test/asm/listing/ref/032-assert-error8.ld65err-ref | 1 + 15 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 test/asm/listing/032-assert-error4.s create mode 100644 test/asm/listing/032-assert-error5.s create mode 100644 test/asm/listing/032-assert-error6.s create mode 100644 test/asm/listing/032-assert-error7.s create mode 100644 test/asm/listing/032-assert-error8.s create mode 100644 test/asm/listing/control/032-assert-error4.err create mode 100644 test/asm/listing/control/032-assert-error6.err create mode 100644 test/asm/listing/control/032-assert-error7.err create mode 100644 test/asm/listing/control/032-assert-error8.err create mode 100644 test/asm/listing/ref/032-assert-error4.ld65err-ref create mode 100644 test/asm/listing/ref/032-assert-error5.ld65err-ref create mode 100644 test/asm/listing/ref/032-assert-error6.ld65err-ref create mode 100644 test/asm/listing/ref/032-assert-error7.ld65err-ref create mode 100644 test/asm/listing/ref/032-assert-error8.ld65err-ref diff --git a/test/asm/listing/032-assert-error3.s b/test/asm/listing/032-assert-error3.s index c497dc6ed..37a4f29c2 100644 --- a/test/asm/listing/032-assert-error3.s +++ b/test/asm/listing/032-assert-error3.s @@ -1,8 +1,3 @@ -; 2022-06-18 Spiro Trikaliotis +; 2022-06-20 Spiro Trikaliotis .assert * = $0000, error, "Code not at $0000" - .assert * = $0001, error, "Code not at $0001" - .assert * = $1000, error, "Code not at $1000" - .assert * = $1001, error, "Code not at $1001" - .assert * = $8000, error, "Code not at $8000" - .assert * = $8001, error, "Code not at $8001" diff --git a/test/asm/listing/032-assert-error4.s b/test/asm/listing/032-assert-error4.s new file mode 100644 index 000000000..c28f83757 --- /dev/null +++ b/test/asm/listing/032-assert-error4.s @@ -0,0 +1,3 @@ +; 2022-06-20 Spiro Trikaliotis + + .assert * = $0001, error, "Code not at $0001" diff --git a/test/asm/listing/032-assert-error5.s b/test/asm/listing/032-assert-error5.s new file mode 100644 index 000000000..2f9678978 --- /dev/null +++ b/test/asm/listing/032-assert-error5.s @@ -0,0 +1,3 @@ +; 2022-06-20 Spiro Trikaliotis + + .assert * = $1000, error, "Code not at $1000" diff --git a/test/asm/listing/032-assert-error6.s b/test/asm/listing/032-assert-error6.s new file mode 100644 index 000000000..27fafe068 --- /dev/null +++ b/test/asm/listing/032-assert-error6.s @@ -0,0 +1,3 @@ +; 2022-06-20 Spiro Trikaliotis + + .assert * = $1001, error, "Code not at $1001" diff --git a/test/asm/listing/032-assert-error7.s b/test/asm/listing/032-assert-error7.s new file mode 100644 index 000000000..bcb627d7f --- /dev/null +++ b/test/asm/listing/032-assert-error7.s @@ -0,0 +1,3 @@ +; 2022-06-20 Spiro Trikaliotis + + .assert * = $8000, error, "Code not at $8000" diff --git a/test/asm/listing/032-assert-error8.s b/test/asm/listing/032-assert-error8.s new file mode 100644 index 000000000..a542629e5 --- /dev/null +++ b/test/asm/listing/032-assert-error8.s @@ -0,0 +1,3 @@ +; 2022-06-20 Spiro Trikaliotis + + .assert * = $8001, error, "Code not at $8001" diff --git a/test/asm/listing/control/032-assert-error4.err b/test/asm/listing/control/032-assert-error4.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/032-assert-error6.err b/test/asm/listing/control/032-assert-error6.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/032-assert-error7.err b/test/asm/listing/control/032-assert-error7.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/032-assert-error8.err b/test/asm/listing/control/032-assert-error8.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/ref/032-assert-error4.ld65err-ref b/test/asm/listing/ref/032-assert-error4.ld65err-ref new file mode 100644 index 000000000..aef48ea00 --- /dev/null +++ b/test/asm/listing/ref/032-assert-error4.ld65err-ref @@ -0,0 +1 @@ +ld65: Error: 032-assert-error4.s:3: Code not at $0001 diff --git a/test/asm/listing/ref/032-assert-error5.ld65err-ref b/test/asm/listing/ref/032-assert-error5.ld65err-ref new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/ref/032-assert-error6.ld65err-ref b/test/asm/listing/ref/032-assert-error6.ld65err-ref new file mode 100644 index 000000000..431a185d3 --- /dev/null +++ b/test/asm/listing/ref/032-assert-error6.ld65err-ref @@ -0,0 +1 @@ +ld65: Error: 032-assert-error6.s:3: Code not at $1001 diff --git a/test/asm/listing/ref/032-assert-error7.ld65err-ref b/test/asm/listing/ref/032-assert-error7.ld65err-ref new file mode 100644 index 000000000..c7d5fe38f --- /dev/null +++ b/test/asm/listing/ref/032-assert-error7.ld65err-ref @@ -0,0 +1 @@ +ld65: Error: 032-assert-error7.s:3: Code not at $8000 diff --git a/test/asm/listing/ref/032-assert-error8.ld65err-ref b/test/asm/listing/ref/032-assert-error8.ld65err-ref new file mode 100644 index 000000000..ea476cfb6 --- /dev/null +++ b/test/asm/listing/ref/032-assert-error8.ld65err-ref @@ -0,0 +1 @@ +ld65: Error: 032-assert-error8.s:3: Code not at $8001 From 77a6ea370437125b5b484b6ddfed9d14f3004585 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Mon, 20 Jun 2022 16:34:14 +0200 Subject: [PATCH 1333/2710] Makefile fix for ld65 error processing --- test/asm/listing/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index e4528dd06..976af1fc8 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -89,10 +89,10 @@ else $(ISEQUAL) --empty $$(@:.bin=.list-err) endif -ifneq ($(wildcard $(WORKDIR)/$1.ld65-err),) ifneq ($(wildcard ref/$1.ld65err-ref),) $(ISEQUAL) ref/$1.ld65err-ref $$(@:.bin=.ld65-err) else +ifneq ($(wildcard $(WORKDIR)/$1.ld65-err),) $(ISEQUAL) --empty $$(@:.bin=.ld65-err) endif endif From e9888a0c287397ed80e5565ea0b8d9c3fd0a4aac Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Mon, 20 Jun 2022 21:57:22 +0200 Subject: [PATCH 1334/2710] testcase for ca65 .align --- test/asm/listing/040-align.s | 20 ++++++++++++++ test/asm/listing/ref/040-align.bin-ref | Bin 0 -> 129 bytes test/asm/listing/ref/040-align.ld65err-ref | 1 + test/asm/listing/ref/040-align.list-ref | 29 +++++++++++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 test/asm/listing/040-align.s create mode 100644 test/asm/listing/ref/040-align.bin-ref create mode 100644 test/asm/listing/ref/040-align.ld65err-ref create mode 100644 test/asm/listing/ref/040-align.list-ref diff --git a/test/asm/listing/040-align.s b/test/asm/listing/040-align.s new file mode 100644 index 000000000..0eeaab0c2 --- /dev/null +++ b/test/asm/listing/040-align.s @@ -0,0 +1,20 @@ +; 2022-06-20 Spiro Trikaliotis + + .byte 0 + + .align 4 + .byte 4 + .word 12 + .word 18 + + .align 1 + .byte 1 + + .align 8 + .byte 8 + + .align 8 + .byte 8 + + .align 128 + .byte 128 diff --git a/test/asm/listing/ref/040-align.bin-ref b/test/asm/listing/ref/040-align.bin-ref new file mode 100644 index 0000000000000000000000000000000000000000..59fe4c266a84eb4d1da20bf067862a26dae0238c GIT binary patch literal 129 dcmZQzU|?Y3VGv?q1Tuht146-RD3@kb0{|GI0JH!A literal 0 HcmV?d00001 diff --git a/test/asm/listing/ref/040-align.ld65err-ref b/test/asm/listing/ref/040-align.ld65err-ref new file mode 100644 index 000000000..4fa8ee839 --- /dev/null +++ b/test/asm/listing/ref/040-align.ld65err-ref @@ -0,0 +1 @@ +ld65: Warning: /home/spiro/Work/tmp/cc65.spiro.testcases-ca65/cfg/none.cfg:18: Segment 'CODE' isn't aligned properly; the resulting executable might not be functional. diff --git a/test/asm/listing/ref/040-align.list-ref b/test/asm/listing/ref/040-align.list-ref new file mode 100644 index 000000000..c8771aa54 --- /dev/null +++ b/test/asm/listing/ref/040-align.list-ref @@ -0,0 +1,29 @@ +ca65 Vx.xx - Git XXXXXXXXX +Main file : 040-align.s +Current file: 040-align.s + +000000r 1 ; 2022-06-20 Spiro Trikaliotis +000000r 1 +000000r 1 00 .byte 0 +000001r 1 +000001r 1 xx xx xx .align 4 +000004r 1 04 .byte 4 +000005r 1 0C 00 .word 12 +000007r 1 12 00 .word 18 +000009r 1 +000009r 1 .align 1 +000009r 1 01 .byte 1 +00000Ar 1 +00000Ar 1 xx xx xx xx .align 8 +00000Er 1 xx xx +000010r 1 08 .byte 8 +000011r 1 +000011r 1 xx xx xx xx .align 8 +000015r 1 xx xx xx +000018r 1 08 .byte 8 +000019r 1 +000019r 1 xx xx xx xx .align 128 +00001Dr 1 xx xx xx xx +000021r 1 xx xx xx xx +000080r 1 80 .byte 128 +000080r 1 From 343bc1a48962ea62cd358a77cdad6b4682951486 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Mon, 20 Jun 2022 22:12:05 +0200 Subject: [PATCH 1335/2710] More assert tests Also test ldwarning and lderror options. --- .../listing/033-assert-ldwarning-success.s | 81 +++++++++++++++++++ test/asm/listing/034-assert-lderror1.s | 28 +++++++ test/asm/listing/034-assert-lderror2.s | 8 ++ test/asm/listing/034-assert-lderror3.s | 3 + test/asm/listing/034-assert-lderror4.s | 3 + test/asm/listing/034-assert-lderror5.s | 3 + test/asm/listing/034-assert-lderror6.s | 3 + test/asm/listing/034-assert-lderror7.s | 3 + test/asm/listing/034-assert-lderror8.s | 3 + .../listing/control/034-assert-lderror1.err | 0 .../control/034-assert-lderror1.no-ld65 | 0 .../listing/control/034-assert-lderror2.err | 0 .../listing/control/034-assert-lderror3.err | 0 .../listing/control/034-assert-lderror4.err | 0 .../listing/control/034-assert-lderror6.err | 0 .../listing/control/034-assert-lderror7.err | 0 .../listing/control/034-assert-lderror8.err | 0 .../ref/033-assert-ldwarning-success.bin-ref | 1 + .../033-assert-ldwarning-success.ld65err-ref | 40 +++++++++ .../listing/ref/034-assert-lderror1.err-ref | 2 + .../ref/034-assert-lderror2.ld65err-ref | 1 + .../ref/034-assert-lderror3.ld65err-ref | 1 + .../ref/034-assert-lderror4.ld65err-ref | 1 + .../ref/034-assert-lderror6.ld65err-ref | 1 + .../ref/034-assert-lderror7.ld65err-ref | 1 + .../ref/034-assert-lderror8.ld65err-ref | 1 + 26 files changed, 184 insertions(+) create mode 100644 test/asm/listing/033-assert-ldwarning-success.s create mode 100644 test/asm/listing/034-assert-lderror1.s create mode 100644 test/asm/listing/034-assert-lderror2.s create mode 100644 test/asm/listing/034-assert-lderror3.s create mode 100644 test/asm/listing/034-assert-lderror4.s create mode 100644 test/asm/listing/034-assert-lderror5.s create mode 100644 test/asm/listing/034-assert-lderror6.s create mode 100644 test/asm/listing/034-assert-lderror7.s create mode 100644 test/asm/listing/034-assert-lderror8.s create mode 100644 test/asm/listing/control/034-assert-lderror1.err create mode 100644 test/asm/listing/control/034-assert-lderror1.no-ld65 create mode 100644 test/asm/listing/control/034-assert-lderror2.err create mode 100644 test/asm/listing/control/034-assert-lderror3.err create mode 100644 test/asm/listing/control/034-assert-lderror4.err create mode 100644 test/asm/listing/control/034-assert-lderror6.err create mode 100644 test/asm/listing/control/034-assert-lderror7.err create mode 100644 test/asm/listing/control/034-assert-lderror8.err create mode 100644 test/asm/listing/ref/033-assert-ldwarning-success.bin-ref create mode 100644 test/asm/listing/ref/033-assert-ldwarning-success.ld65err-ref create mode 100644 test/asm/listing/ref/034-assert-lderror1.err-ref create mode 100644 test/asm/listing/ref/034-assert-lderror2.ld65err-ref create mode 100644 test/asm/listing/ref/034-assert-lderror3.ld65err-ref create mode 100644 test/asm/listing/ref/034-assert-lderror4.ld65err-ref create mode 100644 test/asm/listing/ref/034-assert-lderror6.ld65err-ref create mode 100644 test/asm/listing/ref/034-assert-lderror7.ld65err-ref create mode 100644 test/asm/listing/ref/034-assert-lderror8.ld65err-ref diff --git a/test/asm/listing/033-assert-ldwarning-success.s b/test/asm/listing/033-assert-ldwarning-success.s new file mode 100644 index 000000000..68ebe375a --- /dev/null +++ b/test/asm/listing/033-assert-ldwarning-success.s @@ -0,0 +1,81 @@ +; 2022-06-15 Spiro Trikaliotis + + .ASSERT * = $0000, ldwarning, "Code not at $0000" + .assert * = $0000, ldwarning, "Code not at $0000" + + .ASSERT * = $0001, ldwarning, "Code not at $0001" + .assert * = $0001, ldwarning, "Code not at $0001" + + .ASSERT * = $1000, ldwarning, "Code not at $1000" + .assert * = $1000, ldwarning, "Code not at $1000" + + .ASSERT * = $1001, ldwarning, "Code not at $1001" + .assert * = $1001, ldwarning, "Code not at $1001" + + .ASSERT * = $8000, ldwarning, "Code not at $8000" + .assert * = $8000, ldwarning, "Code not at $8000" + + .ASSERT * = $8001, ldwarning, "Code not at $8001" + .assert * = $8001, ldwarning, "Code not at $8001" + + nop + + .ASSERT * = $0000, ldwarning, "Code not at $0000" + .assert * = $0000, ldwarning, "Code not at $0000" + + .ASSERT * = $0001, ldwarning, "Code not at $0001" + .assert * = $0001, ldwarning, "Code not at $0001" + + .ASSERT * = $1000, ldwarning, "Code not at $1000" + .assert * = $1000, ldwarning, "Code not at $1000" + + .ASSERT * = $1001, ldwarning, "Code not at $1001" + .assert * = $1001, ldwarning, "Code not at $1001" + + .ASSERT * = $8000, ldwarning, "Code not at $8000" + .assert * = $8000, ldwarning, "Code not at $8000" + + .ASSERT * = $8001, ldwarning, "Code not at $8001" + .assert * = $8001, ldwarning, "Code not at $8001" + + + + .org $8000 + + .ASSERT * = $0000, ldwarning, "Code not at $0000" + .assert * = $0000, ldwarning, "Code not at $0000" + + .ASSERT * = $0001, ldwarning, "Code not at $0001" + .assert * = $0001, ldwarning, "Code not at $0001" + + .ASSERT * = $1000, ldwarning, "Code not at $1000" + .assert * = $1000, ldwarning, "Code not at $1000" + + .ASSERT * = $1001, ldwarning, "Code not at $1001" + .assert * = $1001, ldwarning, "Code not at $1001" + + .ASSERT * = $8000, ldwarning, "Code not at $8000" + .assert * = $8000, ldwarning, "Code not at $8000" + + .ASSERT * = $8001, ldwarning, "Code not at $8001" + .assert * = $8001, ldwarning, "Code not at $8001" + + nop + + .ASSERT * = $0000, ldwarning, "Code not at $0000" + .assert * = $0000, ldwarning, "Code not at $0000" + + .ASSERT * = $0001, ldwarning, "Code not at $0001" + .assert * = $0001, ldwarning, "Code not at $0001" + + .ASSERT * = $1000, ldwarning, "Code not at $1000" + .assert * = $1000, ldwarning, "Code not at $1000" + + .ASSERT * = $1001, ldwarning, "Code not at $1001" + .assert * = $1001, ldwarning, "Code not at $1001" + + .ASSERT * = $8000, ldwarning, "Code not at $8000" + .assert * = $8000, ldwarning, "Code not at $8000" + + .ASSERT * = $8001, ldwarning, "Code not at $8001" + .assert * = $8001, ldwarning, "Code not at $8001" diff --git a/test/asm/listing/034-assert-lderror1.s b/test/asm/listing/034-assert-lderror1.s new file mode 100644 index 000000000..4aafb560b --- /dev/null +++ b/test/asm/listing/034-assert-lderror1.s @@ -0,0 +1,28 @@ +; 2022-06-15 Spiro Trikaliotis + + .ASSERT * = $0000, error, "Code not at $0000" + .assert * = $0000, error, "Code not at $0000" + + .ASSERT * = $0001, error, "Code not at $0001" + .assert * = $0001, error, "Code not at $0001" + + .ASSERT * = $1000, error, "Code not at $1000" + .assert * = $1000, error, "Code not at $1000" + + .ASSERT * = $1001, error, "Code not at $1001" + .assert * = $1001, error, "Code not at $1001" + + .ASSERT * = $8000, error, "Code not at $8000" + .assert * = $8000, error, "Code not at $8000" + + .ASSERT * = $8001, error, "Code not at $8001" + .assert * = $8001, error, "Code not at $8001" + + + .org $8000 + + .ASSERT * = $8000, error, "Code not at $8000" + .assert * = $8000, error, "Code not at $8000" + + .ASSERT * = $8001, error, "Code not at $8001" + .assert * = $8001, error, "Code not at $8001" diff --git a/test/asm/listing/034-assert-lderror2.s b/test/asm/listing/034-assert-lderror2.s new file mode 100644 index 000000000..aba08ab6f --- /dev/null +++ b/test/asm/listing/034-assert-lderror2.s @@ -0,0 +1,8 @@ +; 2022-06-18 Spiro Trikaliotis + + .ASSERT * = $0000, lderror, "Code not at $0000" + .ASSERT * = $0001, lderror, "Code not at $0001" + .ASSERT * = $1000, lderror, "Code not at $1000" + .ASSERT * = $1001, lderror, "Code not at $1001" + .ASSERT * = $8000, lderror, "Code not at $8000" + .ASSERT * = $8001, lderror, "Code not at $8001" diff --git a/test/asm/listing/034-assert-lderror3.s b/test/asm/listing/034-assert-lderror3.s new file mode 100644 index 000000000..43bb9a96d --- /dev/null +++ b/test/asm/listing/034-assert-lderror3.s @@ -0,0 +1,3 @@ +; 2022-06-20 Spiro Trikaliotis + + .assert * = $0000, lderror, "Code not at $0000" diff --git a/test/asm/listing/034-assert-lderror4.s b/test/asm/listing/034-assert-lderror4.s new file mode 100644 index 000000000..0bb1d32f8 --- /dev/null +++ b/test/asm/listing/034-assert-lderror4.s @@ -0,0 +1,3 @@ +; 2022-06-20 Spiro Trikaliotis + + .assert * = $0001, lderror, "Code not at $0001" diff --git a/test/asm/listing/034-assert-lderror5.s b/test/asm/listing/034-assert-lderror5.s new file mode 100644 index 000000000..ee6a03493 --- /dev/null +++ b/test/asm/listing/034-assert-lderror5.s @@ -0,0 +1,3 @@ +; 2022-06-20 Spiro Trikaliotis + + .assert * = $1000, lderror, "Code not at $1000" diff --git a/test/asm/listing/034-assert-lderror6.s b/test/asm/listing/034-assert-lderror6.s new file mode 100644 index 000000000..e142441fc --- /dev/null +++ b/test/asm/listing/034-assert-lderror6.s @@ -0,0 +1,3 @@ +; 2022-06-20 Spiro Trikaliotis + + .assert * = $1001, lderror, "Code not at $1001" diff --git a/test/asm/listing/034-assert-lderror7.s b/test/asm/listing/034-assert-lderror7.s new file mode 100644 index 000000000..7082783fc --- /dev/null +++ b/test/asm/listing/034-assert-lderror7.s @@ -0,0 +1,3 @@ +; 2022-06-20 Spiro Trikaliotis + + .assert * = $8000, lderror, "Code not at $8000" diff --git a/test/asm/listing/034-assert-lderror8.s b/test/asm/listing/034-assert-lderror8.s new file mode 100644 index 000000000..858727fcf --- /dev/null +++ b/test/asm/listing/034-assert-lderror8.s @@ -0,0 +1,3 @@ +; 2022-06-20 Spiro Trikaliotis + + .assert * = $8001, lderror, "Code not at $8001" diff --git a/test/asm/listing/control/034-assert-lderror1.err b/test/asm/listing/control/034-assert-lderror1.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/034-assert-lderror1.no-ld65 b/test/asm/listing/control/034-assert-lderror1.no-ld65 new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/034-assert-lderror2.err b/test/asm/listing/control/034-assert-lderror2.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/034-assert-lderror3.err b/test/asm/listing/control/034-assert-lderror3.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/034-assert-lderror4.err b/test/asm/listing/control/034-assert-lderror4.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/034-assert-lderror6.err b/test/asm/listing/control/034-assert-lderror6.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/034-assert-lderror7.err b/test/asm/listing/control/034-assert-lderror7.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/034-assert-lderror8.err b/test/asm/listing/control/034-assert-lderror8.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/ref/033-assert-ldwarning-success.bin-ref b/test/asm/listing/ref/033-assert-ldwarning-success.bin-ref new file mode 100644 index 000000000..685e809a7 --- /dev/null +++ b/test/asm/listing/ref/033-assert-ldwarning-success.bin-ref @@ -0,0 +1 @@ +êê \ No newline at end of file diff --git a/test/asm/listing/ref/033-assert-ldwarning-success.ld65err-ref b/test/asm/listing/ref/033-assert-ldwarning-success.ld65err-ref new file mode 100644 index 000000000..67e5b2aed --- /dev/null +++ b/test/asm/listing/ref/033-assert-ldwarning-success.ld65err-ref @@ -0,0 +1,40 @@ +ld65: Warning: 033-assert-ldwarning-success.s:3: Code not at $0000 +ld65: Warning: 033-assert-ldwarning-success.s:4: Code not at $0000 +ld65: Warning: 033-assert-ldwarning-success.s:6: Code not at $0001 +ld65: Warning: 033-assert-ldwarning-success.s:7: Code not at $0001 +ld65: Warning: 033-assert-ldwarning-success.s:12: Code not at $1001 +ld65: Warning: 033-assert-ldwarning-success.s:13: Code not at $1001 +ld65: Warning: 033-assert-ldwarning-success.s:15: Code not at $8000 +ld65: Warning: 033-assert-ldwarning-success.s:16: Code not at $8000 +ld65: Warning: 033-assert-ldwarning-success.s:18: Code not at $8001 +ld65: Warning: 033-assert-ldwarning-success.s:19: Code not at $8001 +ld65: Warning: 033-assert-ldwarning-success.s:23: Code not at $0000 +ld65: Warning: 033-assert-ldwarning-success.s:24: Code not at $0000 +ld65: Warning: 033-assert-ldwarning-success.s:26: Code not at $0001 +ld65: Warning: 033-assert-ldwarning-success.s:27: Code not at $0001 +ld65: Warning: 033-assert-ldwarning-success.s:29: Code not at $1000 +ld65: Warning: 033-assert-ldwarning-success.s:30: Code not at $1000 +ld65: Warning: 033-assert-ldwarning-success.s:35: Code not at $8000 +ld65: Warning: 033-assert-ldwarning-success.s:36: Code not at $8000 +ld65: Warning: 033-assert-ldwarning-success.s:38: Code not at $8001 +ld65: Warning: 033-assert-ldwarning-success.s:39: Code not at $8001 +ld65: Warning: 033-assert-ldwarning-success.s:45: Code not at $0000 +ld65: Warning: 033-assert-ldwarning-success.s:46: Code not at $0000 +ld65: Warning: 033-assert-ldwarning-success.s:48: Code not at $0001 +ld65: Warning: 033-assert-ldwarning-success.s:49: Code not at $0001 +ld65: Warning: 033-assert-ldwarning-success.s:51: Code not at $1000 +ld65: Warning: 033-assert-ldwarning-success.s:52: Code not at $1000 +ld65: Warning: 033-assert-ldwarning-success.s:54: Code not at $1001 +ld65: Warning: 033-assert-ldwarning-success.s:55: Code not at $1001 +ld65: Warning: 033-assert-ldwarning-success.s:60: Code not at $8001 +ld65: Warning: 033-assert-ldwarning-success.s:61: Code not at $8001 +ld65: Warning: 033-assert-ldwarning-success.s:65: Code not at $0000 +ld65: Warning: 033-assert-ldwarning-success.s:66: Code not at $0000 +ld65: Warning: 033-assert-ldwarning-success.s:68: Code not at $0001 +ld65: Warning: 033-assert-ldwarning-success.s:69: Code not at $0001 +ld65: Warning: 033-assert-ldwarning-success.s:71: Code not at $1000 +ld65: Warning: 033-assert-ldwarning-success.s:72: Code not at $1000 +ld65: Warning: 033-assert-ldwarning-success.s:74: Code not at $1001 +ld65: Warning: 033-assert-ldwarning-success.s:75: Code not at $1001 +ld65: Warning: 033-assert-ldwarning-success.s:77: Code not at $8000 +ld65: Warning: 033-assert-ldwarning-success.s:78: Code not at $8000 diff --git a/test/asm/listing/ref/034-assert-lderror1.err-ref b/test/asm/listing/ref/034-assert-lderror1.err-ref new file mode 100644 index 000000000..14986aaf9 --- /dev/null +++ b/test/asm/listing/ref/034-assert-lderror1.err-ref @@ -0,0 +1,2 @@ +034-assert-lderror1.s:27: Error: Code not at $8001 +034-assert-lderror1.s:28: Error: Code not at $8001 diff --git a/test/asm/listing/ref/034-assert-lderror2.ld65err-ref b/test/asm/listing/ref/034-assert-lderror2.ld65err-ref new file mode 100644 index 000000000..d65db4ffd --- /dev/null +++ b/test/asm/listing/ref/034-assert-lderror2.ld65err-ref @@ -0,0 +1 @@ +ld65: Error: 034-assert-lderror2.s:3: Code not at $0000 diff --git a/test/asm/listing/ref/034-assert-lderror3.ld65err-ref b/test/asm/listing/ref/034-assert-lderror3.ld65err-ref new file mode 100644 index 000000000..bad05ca51 --- /dev/null +++ b/test/asm/listing/ref/034-assert-lderror3.ld65err-ref @@ -0,0 +1 @@ +ld65: Error: 034-assert-lderror3.s:3: Code not at $0000 diff --git a/test/asm/listing/ref/034-assert-lderror4.ld65err-ref b/test/asm/listing/ref/034-assert-lderror4.ld65err-ref new file mode 100644 index 000000000..ff1ee25ef --- /dev/null +++ b/test/asm/listing/ref/034-assert-lderror4.ld65err-ref @@ -0,0 +1 @@ +ld65: Error: 034-assert-lderror4.s:3: Code not at $0001 diff --git a/test/asm/listing/ref/034-assert-lderror6.ld65err-ref b/test/asm/listing/ref/034-assert-lderror6.ld65err-ref new file mode 100644 index 000000000..b207ff331 --- /dev/null +++ b/test/asm/listing/ref/034-assert-lderror6.ld65err-ref @@ -0,0 +1 @@ +ld65: Error: 034-assert-lderror6.s:3: Code not at $1001 diff --git a/test/asm/listing/ref/034-assert-lderror7.ld65err-ref b/test/asm/listing/ref/034-assert-lderror7.ld65err-ref new file mode 100644 index 000000000..fcb2dab20 --- /dev/null +++ b/test/asm/listing/ref/034-assert-lderror7.ld65err-ref @@ -0,0 +1 @@ +ld65: Error: 034-assert-lderror7.s:3: Code not at $8000 diff --git a/test/asm/listing/ref/034-assert-lderror8.ld65err-ref b/test/asm/listing/ref/034-assert-lderror8.ld65err-ref new file mode 100644 index 000000000..d1c7fd0b1 --- /dev/null +++ b/test/asm/listing/ref/034-assert-lderror8.ld65err-ref @@ -0,0 +1 @@ +ld65: Error: 034-assert-lderror8.s:3: Code not at $8001 From b3846ee1c46dd29d96eff6c951cfb4ade0d1efb1 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Mon, 20 Jun 2022 22:19:22 +0200 Subject: [PATCH 1336/2710] Complete check of ld65 output ld65 output was only checked for listing build before. No, both builds are tested separately for better test coverage. --- test/asm/listing/Makefile | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index 976af1fc8..62b742689 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -52,12 +52,12 @@ $(WORKDIR)/$1.bin: $1.s $(ISEQUAL) ifeq ($(wildcard control/$1.err),) $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) 2>&1 ifeq ($(wildcard control/$1.no-ld65),) - $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) 2>&1 endif else $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) 2>&1 || true ifeq ($(wildcard control/$1.no-ld65),) - $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib || true + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) 2>&1 || true endif endif @@ -71,15 +71,24 @@ ifneq ($(wildcard ref/$1.bin-ref),) $(ISEQUAL) --binary ref/$1.bin-ref $$@ endif +ifneq ($(wildcard ref/$1.ld65err-ref),) + $(ISEQUAL) ref/$1.ld65err-ref $$(@:.bin=.ld65-err) +else +ifneq ($(wildcard $(WORKDIR)/$1.ld65-err),) + $(ISEQUAL) --empty $$(@:.bin=.ld65-err) +endif +endif + +# compile with listing file ifeq ($(wildcard control/$1.err),) - $(CA65) -t none -l $$(@:.bin=.lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 + $(CA65) -t none -l $$(@:.bin=.list-lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 ifeq ($(wildcard control/$1.no-ld65),) - $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.ld65-err) 2>&1 + $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) 2>&1 endif else - $(CA65) -t none -l $$(@:.bin=.lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 || true + $(CA65) -t none -l $$(@:.bin=.list-lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 || true ifeq ($(wildcard control/$1.no-ld65),) - $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.ld65-err) 2>&1 || true + $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) 2>&1 || true endif endif @@ -90,10 +99,10 @@ else endif ifneq ($(wildcard ref/$1.ld65err-ref),) - $(ISEQUAL) ref/$1.ld65err-ref $$(@:.bin=.ld65-err) + $(ISEQUAL) ref/$1.ld65err-ref $$(@:.bin=.list-ld65-err) else -ifneq ($(wildcard $(WORKDIR)/$1.ld65-err),) - $(ISEQUAL) --empty $$(@:.bin=.ld65-err) +ifneq ($(wildcard $(WORKDIR)/$1.list-ld65-err),) + $(ISEQUAL) --empty $$(@:.bin=.list-ld65-err) endif endif @@ -106,7 +115,7 @@ ifneq ($(wildcard ref/$1.list-ref),) # we have a reference file, compare that, too # remove first line which contains a version number - $(ISEQUAL) --skip=1 ref/$1.list-ref $$(@:.bin=.lst) + $(ISEQUAL) --skip=1 ref/$1.list-ref $$(@:.bin=.list-lst) endif endef # LISTING_template From b816ee6676c17a01a6426de07b021d815aa670ff Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Mon, 20 Jun 2022 22:53:46 +0200 Subject: [PATCH 1337/2710] Remove TABs again --- test/asm/listing/040-align.s | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/asm/listing/040-align.s b/test/asm/listing/040-align.s index 0eeaab0c2..bfd7bc2e8 100644 --- a/test/asm/listing/040-align.s +++ b/test/asm/listing/040-align.s @@ -4,8 +4,8 @@ .align 4 .byte 4 - .word 12 - .word 18 + .word 12 + .word 18 .align 1 .byte 1 @@ -16,5 +16,5 @@ .align 8 .byte 8 - .align 128 - .byte 128 + .align 128 + .byte 128 From 3a5fee75a392125ba1342ad0d1263aa4ccab534f Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Mon, 20 Jun 2022 22:57:20 +0200 Subject: [PATCH 1338/2710] Remove TAB for reference file, too --- test/asm/listing/ref/040-align.list-ref | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/asm/listing/ref/040-align.list-ref b/test/asm/listing/ref/040-align.list-ref index c8771aa54..b9fee7841 100644 --- a/test/asm/listing/ref/040-align.list-ref +++ b/test/asm/listing/ref/040-align.list-ref @@ -8,8 +8,8 @@ Current file: 040-align.s 000001r 1 000001r 1 xx xx xx .align 4 000004r 1 04 .byte 4 -000005r 1 0C 00 .word 12 -000007r 1 12 00 .word 18 +000005r 1 0C 00 .word 12 +000007r 1 12 00 .word 18 000009r 1 000009r 1 .align 1 000009r 1 01 .byte 1 @@ -22,8 +22,8 @@ Current file: 040-align.s 000015r 1 xx xx xx 000018r 1 08 .byte 8 000019r 1 -000019r 1 xx xx xx xx .align 128 +000019r 1 xx xx xx xx .align 128 00001Dr 1 xx xx xx xx 000021r 1 xx xx xx xx -000080r 1 80 .byte 128 +000080r 1 80 .byte 128 000080r 1 From aa64234707a7d5f61a143970ffc1f3631a12a1fd Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Mon, 20 Jun 2022 23:03:12 +0200 Subject: [PATCH 1339/2710] Testcases for case --- test/asm/listing/050-case-off-2.s | 10 ++++++++++ test/asm/listing/050-case-off-3.s | 10 ++++++++++ test/asm/listing/050-case-off-4.s | 10 ++++++++++ test/asm/listing/050-case-on-1.s | 10 ++++++++++ test/asm/listing/050-case-on-2.s | 10 ++++++++++ test/asm/listing/050-case-on-3.s | 10 ++++++++++ test/asm/listing/050-case-on-4.s | 10 ++++++++++ test/asm/listing/050-case-on-5.s | 10 ++++++++++ test/asm/listing/control/050-case-on-1.err | 0 test/asm/listing/control/050-case-on-1.no-ld65 | 0 test/asm/listing/control/050-case-on-2.err | 0 test/asm/listing/control/050-case-on-2.no-ld65 | 0 test/asm/listing/control/050-case-on-3.err | 0 test/asm/listing/control/050-case-on-3.no-ld65 | 0 test/asm/listing/control/050-case-on-4.err | 0 test/asm/listing/control/050-case-on-4.no-ld65 | 0 test/asm/listing/control/050-case-on-5.err | 0 test/asm/listing/control/050-case-on-5.no-ld65 | 0 test/asm/listing/ref/050-case-off-2.list-ref | 15 +++++++++++++++ test/asm/listing/ref/050-case-off-3.list-ref | 15 +++++++++++++++ test/asm/listing/ref/050-case-off-4.list-ref | 15 +++++++++++++++ test/asm/listing/ref/050-case-on-1.err-ref | 1 + test/asm/listing/ref/050-case-on-2.err-ref | 1 + test/asm/listing/ref/050-case-on-3.err-ref | 1 + test/asm/listing/ref/050-case-on-4.err-ref | 1 + test/asm/listing/ref/050-case-on-5.err-ref | 1 + 26 files changed, 130 insertions(+) create mode 100644 test/asm/listing/050-case-off-2.s create mode 100644 test/asm/listing/050-case-off-3.s create mode 100644 test/asm/listing/050-case-off-4.s create mode 100644 test/asm/listing/050-case-on-1.s create mode 100644 test/asm/listing/050-case-on-2.s create mode 100644 test/asm/listing/050-case-on-3.s create mode 100644 test/asm/listing/050-case-on-4.s create mode 100644 test/asm/listing/050-case-on-5.s create mode 100644 test/asm/listing/control/050-case-on-1.err create mode 100644 test/asm/listing/control/050-case-on-1.no-ld65 create mode 100644 test/asm/listing/control/050-case-on-2.err create mode 100644 test/asm/listing/control/050-case-on-2.no-ld65 create mode 100644 test/asm/listing/control/050-case-on-3.err create mode 100644 test/asm/listing/control/050-case-on-3.no-ld65 create mode 100644 test/asm/listing/control/050-case-on-4.err create mode 100644 test/asm/listing/control/050-case-on-4.no-ld65 create mode 100644 test/asm/listing/control/050-case-on-5.err create mode 100644 test/asm/listing/control/050-case-on-5.no-ld65 create mode 100644 test/asm/listing/ref/050-case-off-2.list-ref create mode 100644 test/asm/listing/ref/050-case-off-3.list-ref create mode 100644 test/asm/listing/ref/050-case-off-4.list-ref create mode 100644 test/asm/listing/ref/050-case-on-1.err-ref create mode 100644 test/asm/listing/ref/050-case-on-2.err-ref create mode 100644 test/asm/listing/ref/050-case-on-3.err-ref create mode 100644 test/asm/listing/ref/050-case-on-4.err-ref create mode 100644 test/asm/listing/ref/050-case-on-5.err-ref diff --git a/test/asm/listing/050-case-off-2.s b/test/asm/listing/050-case-off-2.s new file mode 100644 index 000000000..15b34415a --- /dev/null +++ b/test/asm/listing/050-case-off-2.s @@ -0,0 +1,10 @@ +; 2022-06-20 Spiro Trikaliotis + + .case - + +CamelCase: + lda #0 + +Test: + beq CamelCase + bne camelcase diff --git a/test/asm/listing/050-case-off-3.s b/test/asm/listing/050-case-off-3.s new file mode 100644 index 000000000..1b06fbc30 --- /dev/null +++ b/test/asm/listing/050-case-off-3.s @@ -0,0 +1,10 @@ +; 2022-06-20 Spiro Trikaliotis + + .case off + +CamelCase: + lda #0 + +Test: + beq CamelCase + bne camelcase diff --git a/test/asm/listing/050-case-off-4.s b/test/asm/listing/050-case-off-4.s new file mode 100644 index 000000000..e751f35fd --- /dev/null +++ b/test/asm/listing/050-case-off-4.s @@ -0,0 +1,10 @@ +; 2022-06-20 Spiro Trikaliotis + + .CASE OFF + +CamelCase: + lda #0 + +Test: + beq CamelCase + bne camelcase diff --git a/test/asm/listing/050-case-on-1.s b/test/asm/listing/050-case-on-1.s new file mode 100644 index 000000000..16b5f32a9 --- /dev/null +++ b/test/asm/listing/050-case-on-1.s @@ -0,0 +1,10 @@ +; 2022-06-20 Spiro Trikaliotis + + + +CamelCase: + lda #0 + +Test: + beq CamelCase + bne camelcase diff --git a/test/asm/listing/050-case-on-2.s b/test/asm/listing/050-case-on-2.s new file mode 100644 index 000000000..0b681f8fe --- /dev/null +++ b/test/asm/listing/050-case-on-2.s @@ -0,0 +1,10 @@ +; 2022-06-20 Spiro Trikaliotis + + .case + + +CamelCase: + lda #0 + +Test: + beq CamelCase + bne camelcase diff --git a/test/asm/listing/050-case-on-3.s b/test/asm/listing/050-case-on-3.s new file mode 100644 index 000000000..bd0b77a6b --- /dev/null +++ b/test/asm/listing/050-case-on-3.s @@ -0,0 +1,10 @@ +; 2022-06-20 Spiro Trikaliotis + + .case on + +CamelCase: + lda #0 + +Test: + beq CamelCase + bne camelcase diff --git a/test/asm/listing/050-case-on-4.s b/test/asm/listing/050-case-on-4.s new file mode 100644 index 000000000..f6d6babbb --- /dev/null +++ b/test/asm/listing/050-case-on-4.s @@ -0,0 +1,10 @@ +; 2022-06-20 Spiro Trikaliotis + + .CASE ON + +CamelCase: + lda #0 + +Test: + beq CamelCase + bne camelcase diff --git a/test/asm/listing/050-case-on-5.s b/test/asm/listing/050-case-on-5.s new file mode 100644 index 000000000..393f853d1 --- /dev/null +++ b/test/asm/listing/050-case-on-5.s @@ -0,0 +1,10 @@ +; 2022-06-20 Spiro Trikaliotis + + .case + +CamelCase: + lda #0 + +Test: + beq CamelCase + bne camelcase diff --git a/test/asm/listing/control/050-case-on-1.err b/test/asm/listing/control/050-case-on-1.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/050-case-on-1.no-ld65 b/test/asm/listing/control/050-case-on-1.no-ld65 new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/050-case-on-2.err b/test/asm/listing/control/050-case-on-2.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/050-case-on-2.no-ld65 b/test/asm/listing/control/050-case-on-2.no-ld65 new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/050-case-on-3.err b/test/asm/listing/control/050-case-on-3.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/050-case-on-3.no-ld65 b/test/asm/listing/control/050-case-on-3.no-ld65 new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/050-case-on-4.err b/test/asm/listing/control/050-case-on-4.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/050-case-on-4.no-ld65 b/test/asm/listing/control/050-case-on-4.no-ld65 new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/050-case-on-5.err b/test/asm/listing/control/050-case-on-5.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/control/050-case-on-5.no-ld65 b/test/asm/listing/control/050-case-on-5.no-ld65 new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/ref/050-case-off-2.list-ref b/test/asm/listing/ref/050-case-off-2.list-ref new file mode 100644 index 000000000..5a88a19ba --- /dev/null +++ b/test/asm/listing/ref/050-case-off-2.list-ref @@ -0,0 +1,15 @@ +ca65 Vx.xx - Git XXXXXXXXX +Main file : 050-case-off-2.s +Current file: 050-case-off-2.s + +000000r 1 ; 2022-06-20 Spiro Trikaliotis +000000r 1 +000000r 1 .case - +000000r 1 +000000r 1 CamelCase: +000000r 1 A9 00 lda #0 +000002r 1 +000002r 1 Test: +000002r 1 F0 FC beq CamelCase +000004r 1 D0 FA bne camelcase +000004r 1 diff --git a/test/asm/listing/ref/050-case-off-3.list-ref b/test/asm/listing/ref/050-case-off-3.list-ref new file mode 100644 index 000000000..5f6ea21a0 --- /dev/null +++ b/test/asm/listing/ref/050-case-off-3.list-ref @@ -0,0 +1,15 @@ +ca65 Vx.xx - Git XXXXXXXXX +Main file : 050-case-off-3.s +Current file: 050-case-off-3.s + +000000r 1 ; 2022-06-20 Spiro Trikaliotis +000000r 1 +000000r 1 .case off +000000r 1 +000000r 1 CamelCase: +000000r 1 A9 00 lda #0 +000002r 1 +000002r 1 Test: +000002r 1 F0 FC beq CamelCase +000004r 1 D0 FA bne camelcase +000004r 1 diff --git a/test/asm/listing/ref/050-case-off-4.list-ref b/test/asm/listing/ref/050-case-off-4.list-ref new file mode 100644 index 000000000..61f34a7f8 --- /dev/null +++ b/test/asm/listing/ref/050-case-off-4.list-ref @@ -0,0 +1,15 @@ +ca65 Vx.xx - Git XXXXXXXXX +Main file : 050-case-off-4.s +Current file: 050-case-off-4.s + +000000r 1 ; 2022-06-20 Spiro Trikaliotis +000000r 1 +000000r 1 .CASE OFF +000000r 1 +000000r 1 CamelCase: +000000r 1 A9 00 lda #0 +000002r 1 +000002r 1 Test: +000002r 1 F0 FC beq CamelCase +000004r 1 D0 FA bne camelcase +000004r 1 diff --git a/test/asm/listing/ref/050-case-on-1.err-ref b/test/asm/listing/ref/050-case-on-1.err-ref new file mode 100644 index 000000000..12a14ca31 --- /dev/null +++ b/test/asm/listing/ref/050-case-on-1.err-ref @@ -0,0 +1 @@ +050-case-on-1.s:10: Error: Symbol 'camelcase' is undefined diff --git a/test/asm/listing/ref/050-case-on-2.err-ref b/test/asm/listing/ref/050-case-on-2.err-ref new file mode 100644 index 000000000..9331ee992 --- /dev/null +++ b/test/asm/listing/ref/050-case-on-2.err-ref @@ -0,0 +1 @@ +050-case-on-2.s:10: Error: Symbol 'camelcase' is undefined diff --git a/test/asm/listing/ref/050-case-on-3.err-ref b/test/asm/listing/ref/050-case-on-3.err-ref new file mode 100644 index 000000000..5d0a08d1a --- /dev/null +++ b/test/asm/listing/ref/050-case-on-3.err-ref @@ -0,0 +1 @@ +050-case-on-3.s:10: Error: Symbol 'camelcase' is undefined diff --git a/test/asm/listing/ref/050-case-on-4.err-ref b/test/asm/listing/ref/050-case-on-4.err-ref new file mode 100644 index 000000000..4fb8db100 --- /dev/null +++ b/test/asm/listing/ref/050-case-on-4.err-ref @@ -0,0 +1 @@ +050-case-on-4.s:10: Error: Symbol 'camelcase' is undefined diff --git a/test/asm/listing/ref/050-case-on-5.err-ref b/test/asm/listing/ref/050-case-on-5.err-ref new file mode 100644 index 000000000..b6691f5d9 --- /dev/null +++ b/test/asm/listing/ref/050-case-on-5.err-ref @@ -0,0 +1 @@ +050-case-on-5.s:10: Error: Symbol 'camelcase' is undefined From b5b3654017a8d44b94044be324bc4e4845eb516d Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Mon, 20 Jun 2022 23:07:36 +0200 Subject: [PATCH 1340/2710] Un-silence Make --- test/asm/listing/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index 62b742689..ca1981be0 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -15,7 +15,7 @@ else endif ifdef QUIET - .SILENT: +# .SILENT: endif CA65 := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) From 0d7fba233259c006eaf609f21456d266300c1f0a Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Mon, 20 Jun 2022 23:10:32 +0200 Subject: [PATCH 1341/2710] More make test output for debugging --- test/asm/listing/Makefile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index ca1981be0..c2a1c8f32 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -99,6 +99,13 @@ else endif ifneq ($(wildcard ref/$1.ld65err-ref),) + @echo cat $$(@:.bin=.list-ld65-err) + cat $$(@:.bin=.list-ld65-err) + @echo + @echo + -diff -u ref/$1.ld65err-ref $$(@:.bin=.list-ld65-err) + @echo + @echo $(ISEQUAL) ref/$1.ld65err-ref $$(@:.bin=.list-ld65-err) else ifneq ($(wildcard $(WORKDIR)/$1.list-ld65-err),) From c738c949359a4ec79bc5a9b5573e1721a030e30e Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Mon, 20 Jun 2022 23:13:49 +0200 Subject: [PATCH 1342/2710] Debugging fix --- test/asm/listing/Makefile | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index c2a1c8f32..1b54bafef 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -72,6 +72,13 @@ ifneq ($(wildcard ref/$1.bin-ref),) endif ifneq ($(wildcard ref/$1.ld65err-ref),) + @echo cat $$(@:.bin=.ld65-err) + cat $$(@:.bin=.ld65-err) + @echo + @echo + -diff -u ref/$1.ld65err-ref $$(@:.bin=.ld65-err) + @echo + @echo $(ISEQUAL) ref/$1.ld65err-ref $$(@:.bin=.ld65-err) else ifneq ($(wildcard $(WORKDIR)/$1.ld65-err),) @@ -99,13 +106,6 @@ else endif ifneq ($(wildcard ref/$1.ld65err-ref),) - @echo cat $$(@:.bin=.list-ld65-err) - cat $$(@:.bin=.list-ld65-err) - @echo - @echo - -diff -u ref/$1.ld65err-ref $$(@:.bin=.list-ld65-err) - @echo - @echo $(ISEQUAL) ref/$1.ld65err-ref $$(@:.bin=.list-ld65-err) else ifneq ($(wildcard $(WORKDIR)/$1.list-ld65-err),) From a7b2a92fc245c8e9b2a7807ce23911377aef5591 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Tue, 21 Jun 2022 22:23:10 +0200 Subject: [PATCH 1343/2710] isequal: add --wildcards option --- test/asm/listing/Makefile | 4 +- test/asm/listing/ref/040-align.ld65err-ref | 2 +- test/isequal.c | 292 ++++++++++++++++++++- 3 files changed, 281 insertions(+), 17 deletions(-) diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index 1b54bafef..d3dc21409 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -79,7 +79,7 @@ ifneq ($(wildcard ref/$1.ld65err-ref),) -diff -u ref/$1.ld65err-ref $$(@:.bin=.ld65-err) @echo @echo - $(ISEQUAL) ref/$1.ld65err-ref $$(@:.bin=.ld65-err) + $(ISEQUAL) --wildcards ref/$1.ld65err-ref $$(@:.bin=.ld65-err) else ifneq ($(wildcard $(WORKDIR)/$1.ld65-err),) $(ISEQUAL) --empty $$(@:.bin=.ld65-err) @@ -106,7 +106,7 @@ else endif ifneq ($(wildcard ref/$1.ld65err-ref),) - $(ISEQUAL) ref/$1.ld65err-ref $$(@:.bin=.list-ld65-err) + $(ISEQUAL) --wildcards ref/$1.ld65err-ref $$(@:.bin=.list-ld65-err) else ifneq ($(wildcard $(WORKDIR)/$1.list-ld65-err),) $(ISEQUAL) --empty $$(@:.bin=.list-ld65-err) diff --git a/test/asm/listing/ref/040-align.ld65err-ref b/test/asm/listing/ref/040-align.ld65err-ref index 4fa8ee839..ac8d96432 100644 --- a/test/asm/listing/ref/040-align.ld65err-ref +++ b/test/asm/listing/ref/040-align.ld65err-ref @@ -1 +1 @@ -ld65: Warning: /home/spiro/Work/tmp/cc65.spiro.testcases-ca65/cfg/none.cfg:18: Segment 'CODE' isn't aligned properly; the resulting executable might not be functional. +ld65: Warning: <<<#PATH#>>>:<<<#INTEGER#>>>: Segment 'CODE' isn't aligned properly; the resulting executable might not be functional. diff --git a/test/isequal.c b/test/isequal.c index 2d6cf5253..6d98701bd 100644 --- a/test/isequal.c +++ b/test/isequal.c @@ -5,14 +5,67 @@ #include <stdio.h> #include <string.h> +#define ARRAYSIZE(_x) (sizeof _x / sizeof _x[0]) + +typedef int wildcardfunc(FILE * f2); + +struct wildcardtype { + char * name; + wildcardfunc * func; +}; + + +static int wildcard_path(FILE * f1); +static int wildcard_integer(FILE * f1); + +struct wildcardtype wildcards[] = { + { "PATH", wildcard_path }, + { "INTEGER", wildcard_integer } +}; + +static wildcardfunc * currentwildcardfunc = 0; + static int binary = 0; static int empty = 0; static int skiplines_left = 0; static int skiplines_right = 0; +static int use_wildcards = 0; static char * filename_left = 0; static char * filename_right = 0; -int handleargparameter(int offset, char * parameter) +/* LOOKAHEADBUFFERSIZE must be a power of 2, because the wrap-around for the + indices requires this! +*/ +#define LOOKAHEADBUFFERSIZE 0x80 +#define WILDCARDCHAR_OPEN '<' +#define WILDCARDCHAR_INTERNAL '#' +#define WILDCARDCHAR_CLOSE '>' + +#define WILDCARDCHAR_OPEN_CLOSE_COUNT 3 +#define WILDCARDNAME_MAXLENGTH 20 + +static char lookaheadbuffer[LOOKAHEADBUFFERSIZE] = { 0 }; +static int lookaheadindexread = 0; +static int lookaheadindexwrite = 0; + +static int wildcardendchar; + +wildcardfunc * findwildcardfunc(char * wildcardname) +{ + wildcardfunc * func = NULL; + + unsigned int i; + + for (i = 0; i < ARRAYSIZE(wildcards); ++i) { + if (strcmp(wildcards[i].name, wildcardname) == 0) { + func = wildcards[i].func; + } + } + + return func; +} + +static int handleargparameter(int offset, char * parameter) { long number = -1; char * endptr = NULL; @@ -30,13 +83,14 @@ int handleargparameter(int offset, char * parameter) return number; } -int handleparameter(int argc, char *argv[]) +static int handleparameter(int argc, char *argv[]) { static const char opt_binary[] = "--binary"; static const char opt_empty[] = "--empty"; static const char opt_skipleft[] = "--skipleft"; static const char opt_skipright[] = "--skipright"; static const char opt_skip[] = "--skip"; + static const char opt_wildcards[] = "--wildcards"; static const char len_skipleft = sizeof opt_skipleft - 1; static const char len_skipright = sizeof opt_skipright - 1; @@ -57,7 +111,7 @@ int handleparameter(int argc, char *argv[]) binary = 1; } else if (strcmp(argv[argindex], opt_empty) == 0) { - if (binary || skiplines_left || skiplines_right) { + if (binary || skiplines_left || skiplines_right || use_wildcards) { fprintf(stderr, "--binary cannot go with other options.\n"); exit(1); } @@ -93,6 +147,13 @@ int handleparameter(int argc, char *argv[]) fprintf(stderr, "%s: you must specify the number of lines\n", opt_skip); } } + else if (strcmp(argv[argindex], opt_wildcards) == 0) { + if (binary) { + fprintf(stderr, "--wildcards cannot go with --binary.\n"); + exit(1); + } + use_wildcards = 1; + } ++argindex; } @@ -117,7 +178,7 @@ int handleparameter(int argc, char *argv[]) 0x0d (CR) classic MacOS */ -int getnext(FILE *f) +static int getnext(FILE *f) { int c = fgetc(f); if (!binary && c == 0x0d) { @@ -133,7 +194,7 @@ int getnext(FILE *f) return c; } -void skiplines(FILE *f, int skipcount) +static void skiplines(FILE *f, int skipcount) { int c; @@ -149,6 +210,213 @@ void skiplines(FILE *f, int skipcount) } } +static int comparefiles(FILE *f1, FILE *f2) +{ + for(;;) { + if (feof(f1) && feof(f2)) { + return EXIT_SUCCESS; + } else if (feof(f1) || feof(f2)) { + return EXIT_FAILURE; + } + if (getnext(f1) != getnext(f2)) { + return EXIT_FAILURE; + } + } +} + +static int lookaheadbufferisempty(void) +{ + return lookaheadindexread == lookaheadindexwrite; +} + +static char lookaheadbufferread(void) +{ + char ch; + + if (lookaheadbufferisempty()) { + fprintf(stderr, "### want to take from lookahead buffer, but it is empty --> aborting!\n"); + exit(EXIT_FAILURE); + } + + ch = lookaheadbuffer[lookaheadindexread]; + + /* advance read pointer, with wrap-around */ + lookaheadindexread = (lookaheadindexread + 1) & (sizeof lookaheadbuffer - 1); + + return ch; +} + +static void lookaheadbufferwrite(char ch) +{ + lookaheadbuffer[lookaheadindexwrite] = ch; + + /* advance write pointer, with wrap-around */ + lookaheadindexwrite = (lookaheadindexwrite + 1) & (sizeof lookaheadbuffer - 1); + + if (lookaheadbufferisempty()) { + fprintf(stderr, "### lookahead buffer ovrrun, aborting!\n"); + exit(EXIT_FAILURE); + } +} + +static int processwildcardchar(FILE *f1) +{ + int countwildcardchar = 1; + int foundwildcard = 0; + int ch; + + static char wildcardname[WILDCARDNAME_MAXLENGTH + 1]; + unsigned int wildcardnamenextindex; + + while ((ch = getnext(f1)) == WILDCARDCHAR_OPEN) { + ++countwildcardchar; + if (feof(f1)) { + break; + } + } + + if (countwildcardchar == WILDCARDCHAR_OPEN_CLOSE_COUNT) { + if (ch == WILDCARDCHAR_INTERNAL) { + /* we found a wildcard! */ + foundwildcard = 1; + } + } + else { + if (ch == WILDCARDCHAR_OPEN) { + ch = -1; + } + } + + if (foundwildcard) { + char c; + + /* we found a wildcard init sequence; now check which wildcard it is */ + + wildcardnamenextindex = 0; + wildcardname[WILDCARDNAME_MAXLENGTH] = 0; + + c = getnext(f1); + while (c != WILDCARDCHAR_INTERNAL && c != 0x0a && !feof(f1)) { + wildcardname[wildcardnamenextindex] = c; + if (++wildcardnamenextindex >= WILDCARDNAME_MAXLENGTH) { + wildcardname[WILDCARDNAME_MAXLENGTH] = 0; + fprintf(stderr, "wildcard '%s' is too long!\n", wildcardname); + exit(EXIT_FAILURE); + } + c = getnext(f1); + } + + wildcardname[wildcardnamenextindex] = 0; + + if (c == WILDCARDCHAR_INTERNAL) { + int countwildcardcharclose = 0; + + fprintf(stderr, "Found wildcard '%s'\n", wildcardname); + + while ((c = getnext(f1)) == WILDCARDCHAR_CLOSE && !feof(f1)) { + ++countwildcardcharclose; + } + + wildcardendchar = c; /* remember next char */ + + currentwildcardfunc = findwildcardfunc(wildcardname); + if (currentwildcardfunc == NULL) { + fprintf(stderr, "Wildcard '%s' is unknown!\n", wildcardname); + exit(EXIT_FAILURE); + } + } + else { + fprintf(stderr, "Thought I found wildcard '%s', but it does not end.\n", wildcardname); + } + } + + if (!foundwildcard) { + int i; + + /* no wildcard; restore the chars */ + for (i = 0; i < countwildcardchar; ++i) { + lookaheadbufferwrite(WILDCARDCHAR_OPEN); + } + + if (ch >= 0) { + lookaheadbufferwrite(ch); + } + } + + return foundwildcard; +} + +static int wildcard_path(FILE * f2) +{ + int isstillwildcard = 1; + + int ch = getnext(f2); + + if ((ch == wildcardendchar) || ch < ' ' || ch > 126) { + /* this is not a path char anymore, abort the wildcard processing */ + isstillwildcard = 0; + + if (ch != wildcardendchar) { + exit(EXIT_FAILURE); + } + } + + return isstillwildcard; +} + +static int wildcard_integer(FILE * f2) +{ + int isstillwildcard = 1; + int ch = getnext(f2); + + if ((ch == wildcardendchar) || ch < '0' || ch > '9') { + /* this is not a digit anymore, abort the wildcard processing */ + isstillwildcard = 0; + + if (ch != wildcardendchar) { + exit(EXIT_FAILURE); + } + } + + return isstillwildcard; +} + +static int comparefileswithwildcards(FILE *f1, FILE *f2) +{ + static int iswildcard = 0; + + for(;;) { + int c1; + + if (lookaheadbufferisempty() && !iswildcard && feof(f1) && feof(f2)) { + return EXIT_SUCCESS; + } else if (((lookaheadbufferisempty() && !iswildcard && feof(f1))) || feof(f2)) { + return EXIT_FAILURE; + } + + if (iswildcard) { + /* f1 has a wildcard; process that */ + iswildcard = currentwildcardfunc(f2); + } + else { + /* f1 does not have a wildcard; process the next char (unless it starts a wildcard) */ + if (lookaheadbufferisempty()) { + c1 = getnext(f1); + if (c1 == WILDCARDCHAR_OPEN) { + iswildcard = processwildcardchar(f1); + continue; + } + } + else { + c1 = lookaheadbufferread(); + } + if (c1 != getnext(f2)) { + return EXIT_FAILURE; + } + } + } +} + int main(int argc, char *argv[]) { FILE *f1, *f2; @@ -183,15 +451,11 @@ int main(int argc, char *argv[]) if (skiplines_right) { skiplines(f2, skiplines_right); } - for(;;) { - if (feof(f1) && feof(f2)) { - return EXIT_SUCCESS; - } else if (feof(f1) || feof(f2)) { - return EXIT_FAILURE; - } - if (getnext(f1) != getnext(f2)) { - return EXIT_FAILURE; - } + if (use_wildcards) { + return comparefileswithwildcards(f1, f2); + } + else { + return comparefiles(f1, f2); } } } From 6b7d23ca74b41b83cdab86c4b6de5ce8a814003b Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Wed, 22 Jun 2022 21:23:44 +0200 Subject: [PATCH 1344/2710] isequal with --wildcard: Allow DOS/Win paths Allow a colon (':') at the second position of a DOS or Windows path, so a path with drive specifier (i.e., "c:") is recognized as a path of the wildcard should end with a colon. --- test/isequal.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/test/isequal.c b/test/isequal.c index 6d98701bd..1add62412 100644 --- a/test/isequal.c +++ b/test/isequal.c @@ -349,18 +349,37 @@ static int processwildcardchar(FILE *f1) static int wildcard_path(FILE * f2) { int isstillwildcard = 1; + static int allowedcolonin = 2; int ch = getnext(f2); + if (allowedcolonin >= 0) { + --allowedcolonin; + } + if ((ch == wildcardendchar) || ch < ' ' || ch > 126) { /* this is not a path char anymore, abort the wildcard processing */ - isstillwildcard = 0; - if (ch != wildcardendchar) { - exit(EXIT_FAILURE); + /* first of all, ignore a colon at position 2 if it is the wildcardendchar. + * This is needed for windows path specifications, which can begin with + * a drive specifier and a colon. + */ + + if ( (allowedcolonin >= 0) && (ch == ':') ) { + fprintf(stderr, "Ignoring ':' at drive specifier, do not end the path here!\n"); + } + else { + isstillwildcard = 0; + + allowedcolonin = 2; + + if (ch != wildcardendchar) { + exit(EXIT_FAILURE); + } } } + return isstillwildcard; } From 590de7566d3986f9813e7bf743e16b85c9d8389c Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sat, 25 Jun 2022 00:19:21 +0200 Subject: [PATCH 1345/2710] Telestrat : change default start address --- cfg/telestrat.cfg | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cfg/telestrat.cfg b/cfg/telestrat.cfg index db897133e..3567fa8bf 100644 --- a/cfg/telestrat.cfg +++ b/cfg/telestrat.cfg @@ -1,3 +1,7 @@ +FEATURES { + STARTADDRESS: default = $1000; +} + SYMBOLS { __ORIXHDR__: type = import; __STACKSIZE__: type = weak, value = $0800; # 2K stack @@ -7,7 +11,7 @@ SYMBOLS { MEMORY { ZP: file = "", define = yes, start = $00B0, size = $003A; ORIXHDR: file = %O, type = ro, start = $0000, size = $001F; - MAIN: file = %O, define = yes, start = $0800, size = __RAMEND__ - __MAIN_START__; + MAIN: file = %O, define = yes, start = %S, size = __RAMEND__ - __MAIN_START__; BSS: file = "", start = __ONCE_RUN__, size = __RAMEND__ - __STACKSIZE__ - __ONCE_RUN__; } SEGMENTS { From e0718314b3d67de064a86db5140477060bd26a29 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sat, 25 Jun 2022 00:21:19 +0200 Subject: [PATCH 1346/2710] Telestrat cfg : fix space --- cfg/telestrat.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/telestrat.cfg b/cfg/telestrat.cfg index 3567fa8bf..bd720fb8d 100644 --- a/cfg/telestrat.cfg +++ b/cfg/telestrat.cfg @@ -11,7 +11,7 @@ SYMBOLS { MEMORY { ZP: file = "", define = yes, start = $00B0, size = $003A; ORIXHDR: file = %O, type = ro, start = $0000, size = $001F; - MAIN: file = %O, define = yes, start = %S, size = __RAMEND__ - __MAIN_START__; + MAIN: file = %O, define = yes, start = %S, size = __RAMEND__ - __MAIN_START__; BSS: file = "", start = __ONCE_RUN__, size = __RAMEND__ - __STACKSIZE__ - __ONCE_RUN__; } SEGMENTS { From 9e3b75954017c30b2a865127231f249e18f40aa7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 5 Jul 2022 22:22:49 +0800 Subject: [PATCH 1347/2710] Fixed ICE with duplicate macro parameters. --- src/cc65/macrotab.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/macrotab.c b/src/cc65/macrotab.c index 09f0db50a..c04024dc8 100644 --- a/src/cc65/macrotab.c +++ b/src/cc65/macrotab.c @@ -245,7 +245,7 @@ void AddMacroArg (Macro* M, const char* Arg) for (I = 0; I < CollCount (&M->FormalArgs); ++I) { if (strcmp (CollAtUnchecked (&M->FormalArgs, I), Arg) == 0) { /* Found */ - Error ("Duplicate macro parameter: '%s'", Arg); + PPError ("Duplicate macro parameter: '%s'", Arg); break; } } From 16bf472e66a215b93391b36b11fded0a7c257f44 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 13 Jul 2022 23:10:19 +0200 Subject: [PATCH 1348/2710] reserve enough space for the longest string we can expect --- libsrc/common/asctime.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/libsrc/common/asctime.c b/libsrc/common/asctime.c index 15450425e..b46f29128 100644 --- a/libsrc/common/asctime.c +++ b/libsrc/common/asctime.c @@ -42,15 +42,18 @@ /* Code */ /*****************************************************************************/ +/* + CAUTION: we need to reserve enough space to be able to hold the maximum + length string: + 1234567890123456789012345678901234567 + "Wednesday September ..1 00:00:00 1970" +*/ char* __fastcall__ asctime (const struct tm* timep) { - static char buf[26]; + static char buf[38]; /* Format into given buffer and return the result */ return strftime (buf, sizeof (buf), "%c\n", timep)? buf : 0; } - - - From a6b807b1d89f1e93cbe5857b51e61e4598fe49ea Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 14 Jul 2022 22:39:29 +0200 Subject: [PATCH 1349/2710] more verbose comment --- src/cc65/codegen.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index c79863d0e..326d751b6 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -461,7 +461,8 @@ void g_importstartup (void) void g_importmainargs (void) -/* Forced import of a special symbol that handles arguments to main */ +/* Forced import of a special symbol that handles arguments to main. This will + happen only when the compiler sees a main function that takes arguments. */ { AddTextLine ("\t.forceimport\tinitmainargs"); } From 7165b2980954610712b136c42f55f7429ad332d4 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 14 Jul 2022 22:54:18 +0200 Subject: [PATCH 1350/2710] omit an error message also when an unresolved import was added by the compiler. fixes bug #1551 --- src/ld65/exports.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/ld65/exports.c b/src/ld65/exports.c index 35de5c8f2..9149f54d1 100644 --- a/src/ld65/exports.c +++ b/src/ld65/exports.c @@ -776,14 +776,20 @@ static void PrintUnresolved (ExpCheckFunc F, void* Data) Import* Imp = E->ImpList; const char* name = GetString (E->Name); while (Imp) { - unsigned J; - for (J = 0; J < CollCount (&Imp->RefLines); ++J) { - const LineInfo* LI = CollConstAt (&Imp->RefLines, J); - fprintf (stderr, - "%s:%u: Error: Unresolved external '%s'\n", - GetSourceName (LI), - GetSourceLine (LI), - name); + unsigned J, count = CollCount (&Imp->RefLines); + /* The count is 0 when the import was not added by an input file, + but by the compiler itself. */ + if (count == 0) { + fprintf (stderr, "Error: Unresolved external '%s'\n", name); + } else { + for (J = 0; J < count; ++J) { + const LineInfo* LI = CollConstAt (&Imp->RefLines, J); + fprintf (stderr, + "%s:%u: Error: Unresolved external '%s'\n", + GetSourceName (LI), + GetSourceLine (LI), + name); + } } Imp = Imp->Next; } From 092c0a6531dd784656afc267cba1274387f455a5 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Wed, 20 Jul 2022 23:54:57 +0200 Subject: [PATCH 1351/2710] Update lynx.h remove TGI_COLOR_DARKBROWN --- include/lynx.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/lynx.h b/include/lynx.h index 63bab3508..1b4828a72 100644 --- a/include/lynx.h +++ b/include/lynx.h @@ -83,7 +83,6 @@ #define TGI_COLOR_YELLOW COLOR_YELLOW #define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN #define TGI_COLOR_GREEN COLOR_GREEN -#define TGI_COLOR_DARKBROWN COLOR_BROWN #define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE From 27bfc8e35fa02be1f8cb347e2f6830c825fb1d3c Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 4 Apr 2021 03:13:45 +0200 Subject: [PATCH 1352/2710] Update README.md Commander X16 --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 33c7d2830..b4d098dd3 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,10 @@ including - the Lynx console. - the Ohio Scientific Challenger 1P. - the Commander X16. +<<<<<<< HEAD - the Synertek Systems Sym-1. +======= +>>>>>>> 2583dfb71 (Update README.md) The libraries are fairly portable, so creating a version for other 6502s shouldn't be too much work. From 6c1c260e7b04a7d4388abf9002285af000a3ee91 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Thu, 9 Sep 2021 11:05:39 +0200 Subject: [PATCH 1353/2710] Create c-cpp.yml --- .github/workflows/c-cpp.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/workflows/c-cpp.yml diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml new file mode 100644 index 000000000..e3233268f --- /dev/null +++ b/.github/workflows/c-cpp.yml @@ -0,0 +1,23 @@ +name: C/C++ CI + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: configure + run: ./configure + - name: make + run: make + - name: make check + run: make check + - name: make distcheck + run: make distcheck From 687c8052aea79dae81cc0a7d90e0a7e2c0fddf53 Mon Sep 17 00:00:00 2001 From: polluks <polluks@sdf.lonestar.org> Date: Thu, 30 Dec 2021 00:04:57 +0100 Subject: [PATCH 1354/2710] Save a few bytes --- libsrc/cbm/read.s | 2 +- libsrc/cbm/write.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/cbm/read.s b/libsrc/cbm/read.s index fb0bb3171..71ba5d713 100644 --- a/libsrc/cbm/read.s +++ b/libsrc/cbm/read.s @@ -135,7 +135,7 @@ eof: lda #0 devnotpresent: lda #ENODEV - jmp __directerrno ; Sets _errno, clears _oserror, returns -1 + .byte $2C ; Skip next opcode ; Error entry: The given file descriptor is not valid or not open diff --git a/libsrc/cbm/write.s b/libsrc/cbm/write.s index ebc44a0ac..04010f2e4 100644 --- a/libsrc/cbm/write.s +++ b/libsrc/cbm/write.s @@ -106,7 +106,7 @@ devnotpresent2: pla devnotpresent: lda #ENODEV - jmp __directerrno ; Sets _errno, clears _oserror, returns -1 + .byte $2C ; Skip next opcode ; Error entry: The given file descriptor is not valid or not open From 919645f2832ef9e3875f91584fabf54ded746d18 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 12 Dec 2021 23:41:19 +0100 Subject: [PATCH 1355/2710] Updated URL and improved consistency. --- doc/apple2.sgml | 4 ++-- doc/apple2enh.sgml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index bd01b68dc..cf83dacc9 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -33,7 +33,7 @@ more information. The standard binary file format generated by the linker for the Apple ][ target is an <url name="AppleSingle" -url="http://kaiser-edv.de/documents/AppleSingle_AppleDouble.pdf"> file. +url="https://nulib.com/library/AppleSingle_AppleDouble.pdf"> file. The default load address is $803. <bf/AppleCommander 1.4.0/ or later (available at <url @@ -281,7 +281,7 @@ AppleCommander option to put LOADER.SYSTEM on a ProDOS 8 disk image is <tt/-p/. If the cc65 program can be successfully linked as system program using the linker configuration <ref id="apple-sys-cfg" name="apple2-system.cfg">, but uses the heap either explicitly or implicitly (i.e. by loading a driver) then -the memory from $800 to $2000 can be added to the heap by calling +the memory from $800 to $1FFF can be added to the heap by calling <tt/_heapadd ((void *) 0x0800, 0x1800);/ at the beginning of <tt/main()/. diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 56fc05e31..8b61df91c 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -33,7 +33,7 @@ more information. The standard binary file format generated by the linker for the enhanced Apple //e target is an <url name="AppleSingle" -url="http://kaiser-edv.de/documents/AppleSingle_AppleDouble.pdf"> file. +url="https://nulib.com/library/AppleSingle_AppleDouble.pdf"> file. The default load address is $803. <bf/AppleCommander 1.4.0/ or later (available at <url @@ -281,7 +281,7 @@ AppleCommander option to put LOADER.SYSTEM on a ProDOS 8 disk image is <tt/-p/. If the cc65 program can be successfully linked as system program using the linker configuration <ref id="apple-sys-cfg" name="apple2enh-system.cfg">, but uses the heap either explicitly or implicitly (i.e. by loading a driver) then -the memory from $800 to $2000 can be added to the heap by calling +the memory from $800 to $1FFF can be added to the heap by calling <tt/_heapadd ((void *) 0x0800, 0x1800);/ at the beginning of <tt/main()/. From 67fc9a4d3652991138961e648410e0121ee254fa Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 12 Dec 2021 12:27:55 -0500 Subject: [PATCH 1356/2710] Changed a big script into separate named steps. It makes the job log easier to navigate. Also, Pull Requests don't need a Zip file. --- .github/workflows/build-on-pull-request.yml | 37 ++++++++------ .github/workflows/snapshot-on-push-master.yml | 48 ++++++++++++------- 2 files changed, 52 insertions(+), 33 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 53f79fef4..da9216a3d 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -1,6 +1,6 @@ name: Build Pull Request on: [pull_request] -concurrency: +concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -8,11 +8,11 @@ jobs: build_linux: name: Build and Test (Linux) runs-on: ubuntu-latest - + steps: - shell: bash run: git config --global core.autocrlf input - + - name: Checkout Source uses: actions/checkout@v2 @@ -21,28 +21,35 @@ jobs: run: | sudo apt-get update sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass - - - name: Build - id: build + + - name: Build the tools. shell: bash + run: make -j2 bin USER_CFLAGS=-Werror + - name: Build the platform libraries. + shell: bash + run: make -j2 lib QUIET=1 + - name: Run the regression tests. + shell: bash + run: make test QUIET=1 + - name: Test that the samples can be built. + shell: bash + run: make -j2 samples + - name: Build the document files. + shell: bash + run: make -j2 doc + - name: Build 32-bit Windows versions of the tools. run: | - make -j2 bin USER_CFLAGS=-Werror - make -j2 lib QUIET=1 - make test QUIET=1 - make -j2 samples make -C src clean make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- - make -C samples clean - make -j2 doc zip build_windows: name: Build (Windows) runs-on: windows-latest - + steps: - shell: bash run: git config --global core.autocrlf input - + - name: Checkout Source uses: actions/checkout@v2 @@ -51,6 +58,6 @@ jobs: - name: Build app (debug) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug - + - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index aefc7f2f5..e10904357 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -1,9 +1,9 @@ -name: Snapshot Build +name: Snapshot Build on: push: branches: master -concurrency: +concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -11,11 +11,11 @@ jobs: build_windows: name: Build (Windows) runs-on: windows-latest - + steps: - shell: bash run: git config --global core.autocrlf input - + - name: Checkout Source uses: actions/checkout@v2 @@ -24,7 +24,7 @@ jobs: - name: Build app (debug) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug - + - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release @@ -32,11 +32,11 @@ jobs: name: Build, Test and Snaphot (Linux) runs-on: ubuntu-latest needs: build_windows - + steps: - shell: bash run: git config --global core.autocrlf input - + - name: Checkout Source uses: actions/checkout@v2 @@ -45,25 +45,37 @@ jobs: run: | sudo apt-get update sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass - - - name: Build - id: build + + - name: Build the tools. shell: bash + run: make -j2 bin USER_CFLAGS=-Werror + - name: Build the platform libraries. + shell: bash + run: make -j2 lib QUIET=1 + - name: Run the regression tests. + shell: bash + run: make test QUIET=1 + - name: Test that the samples can be built. + shell: bash + run: make -j2 samples + - name: Remove the output from the samples tests. + shell: bash + run: make -C samples clean + - name: Build the document files. + shell: bash + run: make -j2 doc + - name: Build and package 32-bit Windows versions of the tools. run: | - make -j2 bin USER_CFLAGS=-Werror - make -j2 lib QUIET=1 - make test QUIET=1 - make -j2 samples make -C src clean make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- - make -C samples clean - make -j2 doc zip - + make zip + mv cc65.zip cc65-win32.zip + - name: Upload Snapshot Zip uses: actions/upload-artifact@v2 with: name: cc65-snapshot-win32.zip - path: cc65.zip + path: cc65-win32.zip # TODO: Update docs at https://github.com/cc65/doc # TODO: Publish snapshot zip at https://github.com/cc65/cc65.github.io From 32253a4e519de76bf068e465878f4b091a302538 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 12 Dec 2021 12:35:27 -0500 Subject: [PATCH 1357/2710] Removed unneeded package names. sshpass isn't needed because the Windows packages are put on Github. linuxdoc-tools is a dependency of linuxdoc-tools-info. The binutils package is a dependency of the gcc package. --- .github/workflows/build-on-pull-request.yml | 2 +- .github/workflows/snapshot-on-push-master.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index da9216a3d..c3214c308 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -20,7 +20,7 @@ jobs: shell: bash run: | sudo apt-get update - sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass + sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-i686 - name: Build the tools. shell: bash diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index e10904357..3f138e492 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -44,7 +44,7 @@ jobs: shell: bash run: | sudo apt-get update - sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass + sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-i686 - name: Build the tools. shell: bash From c143dd1f414e0c62c73a70f0183d366c5f98bbba Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 12 Dec 2021 13:42:25 -0500 Subject: [PATCH 1358/2710] Added a 64-bit Windows cross-compile. That compiler catches pointer-integer width mismatches that other compilers ignore. --- .github/workflows/build-on-pull-request.yml | 6 +++--- .github/workflows/snapshot-on-push-master.yml | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index c3214c308..fe99c4673 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -20,7 +20,7 @@ jobs: shell: bash run: | sudo apt-get update - sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-i686 + sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-x86-64 - name: Build the tools. shell: bash @@ -37,10 +37,10 @@ jobs: - name: Build the document files. shell: bash run: make -j2 doc - - name: Build 32-bit Windows versions of the tools. + - name: Build 64-bit Windows versions of the tools. run: | make -C src clean - make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- + make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32- build_windows: name: Build (Windows) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 3f138e492..c8d36488d 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -44,7 +44,7 @@ jobs: shell: bash run: | sudo apt-get update - sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-i686 + sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 - name: Build the tools. shell: bash @@ -64,6 +64,12 @@ jobs: - name: Build the document files. shell: bash run: make -j2 doc + - name: Build and package 64-bit Windows versions of the tools. + run: | + make -C src clean + make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32- + make zip + mv cc65.zip cc65-win64.zip - name: Build and package 32-bit Windows versions of the tools. run: | make -C src clean @@ -71,11 +77,16 @@ jobs: make zip mv cc65.zip cc65-win32.zip - - name: Upload Snapshot Zip + - name: Upload a 32-bit Snapshot Zip uses: actions/upload-artifact@v2 with: name: cc65-snapshot-win32.zip path: cc65-win32.zip + - name: Upload a 64-bit Snapshot Zip + uses: actions/upload-artifact@v2 + with: + name: cc65-snapshot-win64.zip + path: cc65-win64.zip # TODO: Update docs at https://github.com/cc65/doc # TODO: Publish snapshot zip at https://github.com/cc65/cc65.github.io From 81930053dd2e4aaee3f832597a03088b0acef1d4 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 12 Dec 2021 17:36:03 -0500 Subject: [PATCH 1359/2710] Used (size_t), instead of (long) where converting between pointers and integers. (long) still is 32 bits on 64-bit Windows! --- src/cc65/locals.c | 2 +- src/cc65/symentry.h | 2 +- src/cc65/symtab.c | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cc65/locals.c b/src/cc65/locals.c index c2e314485..d3902f329 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -286,7 +286,7 @@ static void ParseAutoDecl (Declaration* Decl) ** We abuse the Collection somewhat by using it to store line ** numbers. */ - CollReplace (&CurrentFunc->LocalsBlockStack, (void *)(long)GetCurrentLine (), + CollReplace (&CurrentFunc->LocalsBlockStack, (void *)(size_t)GetCurrentLine (), CollCount (&CurrentFunc->LocalsBlockStack) - 1); } else { diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index bb87c7472..bcf586510 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -115,7 +115,7 @@ struct CodeEntry; typedef struct DefOrRef DefOrRef; struct DefOrRef { unsigned Line; - long LocalsBlockId; + size_t LocalsBlockId; unsigned Flags; int StackPtr; unsigned Depth; diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 5d7bd1436..3de0bb460 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -951,7 +951,7 @@ DefOrRef* AddDefOrRef (SymEntry* E, unsigned Flags) DOR = xmalloc (sizeof (DefOrRef)); CollAppend (E->V.L.DefsOrRefs, DOR); DOR->Line = GetCurrentLine (); - DOR->LocalsBlockId = (long)CollLast (&CurrentFunc->LocalsBlockStack); + DOR->LocalsBlockId = (size_t)CollLast (&CurrentFunc->LocalsBlockStack); DOR->Flags = Flags; DOR->StackPtr = StackPtr; DOR->Depth = CollCount (&CurrentFunc->LocalsBlockStack); @@ -1013,9 +1013,9 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags) /* Are we jumping into a block with initalization of an object that ** has automatic storage duration? Let's emit a warning. */ - if ((long)CollLast (AIC) != DOR->LocalsBlockId && + if ((size_t)CollLast (AIC) != DOR->LocalsBlockId && (CollCount (AIC) < DOR->Depth || - (long)CollAt (AIC, DOR->Depth - 1) != DOR->LocalsBlockId)) { + (size_t)CollAt (AIC, DOR->Depth - 1) != DOR->LocalsBlockId)) { Warning ("Goto at line %d to label %s jumps into a block with " "initialization of an object that has automatic storage duration", GetCurrentLine (), Name); @@ -1044,9 +1044,9 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags) /* Are we jumping into a block with initalization of an object that ** has automatic storage duration? Let's emit a warning. */ - if ((long)CollLast (AIC) != DOR->LocalsBlockId && + if ((size_t)CollLast (AIC) != DOR->LocalsBlockId && (CollCount (AIC) >= DOR->Depth || - (long)CollLast (AIC) >= (long)DOR->Line)) + (size_t)CollLast (AIC) >= (size_t)DOR->Line)) Warning ("Goto at line %d to label %s jumps into a block with " "initialization of an object that has automatic storage duration", DOR->Line, Name); From dd27a66a7bb0abd0111fec92d7b859e9dd69b024 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 12 Dec 2021 23:54:17 -0500 Subject: [PATCH 1360/2710] Install system packages before checking out the repo. --- .github/workflows/build-on-pull-request.yml | 11 +++++------ .github/workflows/snapshot-on-push-master.yml | 11 +++++------ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index fe99c4673..f5477d191 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -10,18 +10,17 @@ jobs: runs-on: ubuntu-latest steps: - - shell: bash - run: git config --global core.autocrlf input - - - name: Checkout Source - uses: actions/checkout@v2 - - name: Install Dependencies shell: bash run: | sudo apt-get update sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-x86-64 + - shell: bash + run: git config --global core.autocrlf input + - name: Checkout Source + uses: actions/checkout@v2 + - name: Build the tools. shell: bash run: make -j2 bin USER_CFLAGS=-Werror diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index c8d36488d..110edbbf0 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -34,18 +34,17 @@ jobs: needs: build_windows steps: - - shell: bash - run: git config --global core.autocrlf input - - - name: Checkout Source - uses: actions/checkout@v2 - - name: Install Dependencies shell: bash run: | sudo apt-get update sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 + - shell: bash + run: git config --global core.autocrlf input + - name: Checkout Source + uses: actions/checkout@v2 + - name: Build the tools. shell: bash run: make -j2 bin USER_CFLAGS=-Werror From 5afc349199f6175af63a6e1b0468cd6438c11a4b Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Mon, 13 Dec 2021 17:14:57 +0100 Subject: [PATCH 1361/2710] Fixed typo --- src/ld65/scanner.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ld65/scanner.c b/src/ld65/scanner.c index 256d47f07..718951aa5 100644 --- a/src/ld65/scanner.c +++ b/src/ld65/scanner.c @@ -196,7 +196,7 @@ static void StrVal (void) default: CfgWarning (&CfgErrorPos, - "Unkown escape sequence '%%%c'", C); + "Unknown escape sequence '%%%c'", C); SB_AppendChar (&CfgSVal, '%'); SB_AppendChar (&CfgSVal, C); NextChar (); From 7a0a0edb89ea7396304a1036dffee6b931bcbfee Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Mon, 13 Dec 2021 17:20:56 +0100 Subject: [PATCH 1362/2710] Fixed many typos --- src/dbginfo/dbginfo.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/dbginfo/dbginfo.c b/src/dbginfo/dbginfo.c index 42001ed07..fdebe6910 100644 --- a/src/dbginfo/dbginfo.c +++ b/src/dbginfo/dbginfo.c @@ -183,7 +183,7 @@ typedef struct DbgInfo DbgInfo; struct DbgInfo { /* First we have all items in collections sorted by id. The ids are - ** continous, so an access by id is almost as cheap as an array access. + ** continuous, so an access by id is almost as cheap as an array access. ** The collections are also used when the objects are deleted, so they're ** actually the ones that "own" the items. */ @@ -680,7 +680,7 @@ static char* SB_StrDup (const StrBuf* B) static Collection* CollInit (Collection* C) /* Initialize a collection and return it. */ { - /* Intialize the fields. */ + /* Initialize the fields. */ C->Count = 0; C->Size = 0; C->Items = 0; @@ -1349,7 +1349,7 @@ static int CompareFileInfoByName (const void* L, const void* R) static LibInfo* NewLibInfo (const StrBuf* Name) -/* Create a new LibInfo struct, intialize and return it */ +/* Create a new LibInfo struct, initialize and return it */ { /* Allocate memory */ LibInfo* L = xmalloc (sizeof (LibInfo) + SB_GetLen (Name)); @@ -1463,7 +1463,7 @@ static int CompareLineInfoByLine (const void* L, const void* R) static ModInfo* NewModInfo (const StrBuf* Name) -/* Create a new ModInfo struct, intialize and return it */ +/* Create a new ModInfo struct, initialize and return it */ { /* Allocate memory */ ModInfo* M = xmalloc (sizeof (ModInfo) + SB_GetLen (Name)); @@ -1536,7 +1536,7 @@ static int CompareModInfoByName (const void* L, const void* R) static ScopeInfo* NewScopeInfo (const StrBuf* Name) -/* Create a new ScopeInfo struct, intialize and return it */ +/* Create a new ScopeInfo struct, initialize and return it */ { /* Allocate memory */ ScopeInfo* S = xmalloc (sizeof (ScopeInfo) + SB_GetLen (Name)); @@ -1697,7 +1697,7 @@ static int CompareSegInfoByName (const void* L, const void* R) static SpanInfo* NewSpanInfo (void) -/* Create a new SpanInfo struct, intialize and return it */ +/* Create a new SpanInfo struct, initialize and return it */ { /* Allocate memory */ SpanInfo* S = xmalloc (sizeof (SpanInfo)); @@ -1779,7 +1779,7 @@ static int CompareSpanInfoByAddr (const void* L, const void* R) static SymInfo* NewSymInfo (const StrBuf* Name) -/* Create a new SymInfo struct, intialize and return it */ +/* Create a new SymInfo struct, initialize and return it */ { /* Allocate memory */ SymInfo* S = xmalloc (sizeof (SymInfo) + SB_GetLen (Name)); @@ -2147,7 +2147,7 @@ static TypeInfo* ParseTypeString (InputData* D, StrBuf* Type) I += GT_GET_SIZE (A[I]) + 1; } else { /* Unknown type in type string */ - ParseError (D, CC65_ERROR, "Unkown type in type value"); + ParseError (D, CC65_ERROR, "Unknown type in type value"); return 0; } break; @@ -2733,7 +2733,7 @@ static int StrConstFollows (InputData* D) static int Consume (InputData* D, Token Tok, const char* Name) -/* Check for a token and consume it. Return true if the token was comsumed, +/* Check for a token and consume it. Return true if the token was consumed, ** return false otherwise. */ { @@ -6936,7 +6936,7 @@ const cc65_scopeinfo* cc65_scope_byspan (cc65_dbginfo Handle, unsigned SpanId) const cc65_scopeinfo* cc65_childscopes_byid (cc65_dbginfo Handle, unsigned Id) /* Return the direct child scopes of a scope with a given id. The function ** returns NULL if no scope with this id was found, otherwise a list of the -** direct childs. +** direct children. */ { const DbgInfo* Info; From a08f9e51a0ca78eff4037c09f05a04695872f000 Mon Sep 17 00:00:00 2001 From: polluks2 <stefan@Stefan-PC.localdomain> Date: Tue, 14 Dec 2021 13:13:16 +0100 Subject: [PATCH 1363/2710] Fixed many typos --- doc/apple2.sgml | 2 +- doc/apple2enh.sgml | 2 +- doc/atari.sgml | 12 ++++++------ doc/atari5200.sgml | 2 +- doc/ca65.sgml | 2 +- doc/cc65.sgml | 6 +++--- doc/cl65.sgml | 4 ++-- doc/co65.sgml | 4 ++-- doc/coding.sgml | 2 +- doc/da65.sgml | 2 +- doc/debugging.sgml | 6 +++--- doc/geos.sgml | 4 ++-- doc/grc65.sgml | 6 +++--- doc/intro.sgml | 2 +- doc/ld65.sgml | 2 +- doc/smc.sgml | 4 ++-- 16 files changed, 31 insertions(+), 31 deletions(-) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index cf83dacc9..09052ade1 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -73,7 +73,7 @@ system takes care of actually moving the code into the Language Card. The amount of memory available in the Language Card for generated code depends on the <ref id="link-configs" name="linker configuration"> parameters. There are -several usefull settings: +several useful settings: <descrip> diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 8b61df91c..a105cb47a 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -73,7 +73,7 @@ system takes care of actually moving the code into the Language Card. The amount of memory available in the Language Card for generated code depends on the <ref id="link-configs" name="linker configuration"> parameters. There are -several usefull settings: +several useful settings: <descrip> diff --git a/doc/atari.sgml b/doc/atari.sgml index 903895d17..85dcaaf5e 100644 --- a/doc/atari.sgml +++ b/doc/atari.sgml @@ -131,7 +131,7 @@ With the default load address of $2400 this gives a usable memory range o [$2400-$CFFF]. Please note that the first load chunk (which checks the system -compatibilty and available memory) will always be loaded at +compatibility and available memory) will always be loaded at $2E00, regardless of the specified start address. This address can only be changed by a custom linker config file. @@ -305,7 +305,7 @@ The names are the usual ones you can find in system reference manuals. Example: ... </verb></tscreen> -Please note that memory location 762/$2FA is called "<tt/char_/" while the orignal name "<tt/char/" conflicts with the C keyword. +Please note that memory location 762/$2FA is called "<tt/char_/" while the original name "<tt/char/" conflicts with the C keyword. If you like to use the OS names and locations for the original Atari 800 operating system, please "<tt/#define OSA/" before including the <tt/atari.h/ header file. @@ -401,7 +401,7 @@ OS.sdlst = &DisplayList; ... </verb></tscreen> -Please inspect the <tt/_antic.h/ header file to detemine the supported +Please inspect the <tt/_antic.h/ header file to determine the supported instruction names. Modifiers on instructions can be nested without need for an order: @@ -410,7 +410,7 @@ for an order: Please mind that ANTIC has memory alignment requirements for "player missile graphics"-data, font data, display lists and screen memory. Creation of a special linker configuration with appropriate aligned segments and -switching to that segment in the c-code is usually neccessary. A more memory +switching to that segment in the c-code is usually necessary. A more memory hungry solution consists in using the "<tt/posix_memalign()/" function in conjunction with copying your data to the allocated memory. @@ -1141,8 +1141,8 @@ ld65: Error: Missing memory area assignment for segment 'MAINHDR' </verb></tscreen> The old "HEADER" memory description contained six bytes: $FFFF -and the first and last memory addess of the program. For the "system -check" load chunk this had to be split into two memory assigments. The +and the first and last memory address of the program. For the "system +check" load chunk this had to be split into two memory assignments The "HEADER" now only contains the $FFFF. The main program's first and last memory address were moved to a new segment, called "MAINHDR", which in the new linker config file goes into its own memory area (also diff --git a/doc/atari5200.sgml b/doc/atari5200.sgml index c7e5be73e..599ffe3c9 100644 --- a/doc/atari5200.sgml +++ b/doc/atari5200.sgml @@ -237,7 +237,7 @@ The runtime library provides a default game name which is "cc65 compiled". To change that, one has to link a file which puts data into the "<tt/CARTNAME/" segment. -For reference, here's the default version used by the cc65 libary: +For reference, here's the default version used by the cc65 library: <tscreen><verb> .export __CART_NAME__: absolute = 1 .macpack atari diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 8ae8eabd9..0638ab08c 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -301,7 +301,7 @@ Here is a description of all the command line options: compiler, see there for a list. Depending on the target, the default CPU type is also set. This can be - overriden by using the <tt/<ref id="option--cpu" name="--cpu">/ option. + overridden by using the <tt/<ref id="option--cpu" name="--cpu">/ option. <label id="option-v"> diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 821e76586..b20e05cc6 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -395,7 +395,7 @@ Here is a description of all the command line options: This option is used to set the target system. The target system determines the character set that is used for strings and character constants and the - default CPU. The CPU setting can be overriden by use of the <tt/<ref + default CPU. The CPU setting can be overridden by use of the <tt/<ref id="option--cpu" name="--cpu">/ option. The following target systems are supported: @@ -1250,7 +1250,7 @@ parameter with the <tt/#pragma/. This pragma is used to display informational messages at compile-time. - The message intented to be displayed must be a string literal. + The message intended to be displayed must be a string literal. Example: <tscreen><verb> @@ -1369,7 +1369,7 @@ parameter with the <tt/#pragma/. Switch compiler warnings on or off. "name" is the name of a warning (see the <tt/<ref name="-W" id="option-W">/ compiler option for a list). The name is followed either by "pop", which restores the last pushed state, or by "on" or - "off", optionally preceeded by "push" to push the current state before + "off", optionally preceded by "push" to push the current state before changing it. Example: diff --git a/doc/cl65.sgml b/doc/cl65.sgml index f00856bda..24d2f5927 100644 --- a/doc/cl65.sgml +++ b/doc/cl65.sgml @@ -57,11 +57,11 @@ Short options: -O Optimize code -Oi Optimize code, inline more code -Or Optimize code, honour the register keyword - -Os Optimize code, inline standard funtions + -Os Optimize code, inline standard functions -S Compile but don't assemble and link -T Include source as comment -V Print the version number - -W name[,...] Supress compiler warnings + -W name[,...] Suppress compiler warnings -Wa options Pass options to the assembler -Wc options Pass options to the compiler -Wl options Pass options to the linker diff --git a/doc/co65.sgml b/doc/co65.sgml index 865aed2bb..0a50fb3a8 100644 --- a/doc/co65.sgml +++ b/doc/co65.sgml @@ -235,12 +235,12 @@ things to be different from runtime loading: <item> Without changing the segment names, all segments take the default names used by the standard linker configurations. This means that the - driver code is no longer contingous in memory, instead the code + driver code is no longer contiguous in memory, instead the code segment is placed somewhere in between all other code segments, the data segment is placed with all other data segments and so on. If the driver doesn't do strange things this shouldn't be a problem. -<item> With statically linked code, data and bss segments will get intialized +<item> With statically linked code, data and bss segments will get initialized once (when the application is loaded), while a loadable driver will get its initialization each time the driver is loaded into memory (which may be more than once in the lifetime of a program). It depends diff --git a/doc/coding.sgml b/doc/coding.sgml index 57961209f..3b1066dcd 100644 --- a/doc/coding.sgml +++ b/doc/coding.sgml @@ -59,7 +59,7 @@ slower than the same code for unsigned types. <sect>Use chars instead of ints if possible<p> -While in arithmetic operations, chars are immidiately promoted to ints, they +While in arithmetic operations, chars are immediately promoted to ints, they are passed as chars in parameter lists and are accessed as chars in variables. The code generated is usually not much smaller, but it is faster, since accessing chars is faster. For several operations, the generated code may be diff --git a/doc/da65.sgml b/doc/da65.sgml index b46ee9dd3..1702694a0 100644 --- a/doc/da65.sgml +++ b/doc/da65.sgml @@ -156,7 +156,7 @@ Here is a description of all the command line options: <tag><tt>-i name, --info name</tt></tag> Specify an info file. The info file contains global options that may - override or replace command line options plus informations about the code + override or replace command line options plus information about the code that has to be disassembled. See the separate section <ref id="infofile" name="Info File Format">. diff --git a/doc/debugging.sgml b/doc/debugging.sgml index 8b09db384..a270d12c7 100644 --- a/doc/debugging.sgml +++ b/doc/debugging.sgml @@ -39,7 +39,7 @@ transfer the program to the real machine until it is done. <item>An emulator allows many things that are almost impossible one of the original machines. You may set watchpoints (detect read or write access to -arbitary addresses), debug interrupt handlers and even debug routines that run +arbitrary addresses), debug interrupt handlers and even debug routines that run inside the 1541 floppy. <item>You may use the label file generated by the linker to make much more use @@ -117,7 +117,7 @@ these warnings and errors as long as they reference any problems VICE thinks it has with the labels. After loading the labels, they are used by VICE in the disassembler listing, -and you may use them whereever you need to specify an address. Try +and you may use them wherever you need to specify an address. Try <tscreen><verb> d ._main @@ -138,7 +138,7 @@ load your label file like this: </verb></tscreen> After loading the labels, they are used by Oricutron in the disassembler listing, -and you may use them whereever you need to specify an address. Try +and you may use them wherever you need to specify an address. Try <tscreen><verb> d ._main diff --git a/doc/geos.sgml b/doc/geos.sgml index f7943f8cd..c3601e741 100644 --- a/doc/geos.sgml +++ b/doc/geos.sgml @@ -207,7 +207,7 @@ see them together in the filling box in GeoPaint. <p> <tt/void GraphicsString (const void *myGString)/ <p> -One of the more powerfull routines of GEOS. This function calls other graphic functions depending +One of the more powerful routines of GEOS. This function calls other graphic functions depending on the given command string. See the structures chapter for a more detailed description. <sect2>Rectangle functions @@ -652,7 +652,7 @@ For some purposes you might consider using the <tt/dio.h/ interface to disk acce <p> All GEOS disk functions return an error code in the X register. In some cases this is returned by the GEOSLib function (if its type is <tt/char/), but in all cases the last error is saved in the <tt/__oserror/ -location. If it is nonzero - an error occured. See <tt/gdisk.h/ for the list of possible errorcodes. +location. If it is nonzero - an error occurred. See <tt/gdisk.h/ for the list of possible errorcodes. You need to include <tt/errno.h/ to get <tt/__oserror/, together with the standard <tt/errno/. The latter gives less verbose, but still usable information and can be used with <tt/strerror/. Probably you will get more information using <tt/_stroserror/ in a similar way. diff --git a/doc/grc65.sgml b/doc/grc65.sgml index aec112f6b..c03815ade 100644 --- a/doc/grc65.sgml +++ b/doc/grc65.sgml @@ -7,7 +7,7 @@ <url url="mailto:greg.king5@verizon.net" name="Greg King"> <abstract> -This document describes a compiler that can create GEOS headers and menues for +This document describes a compiler that can create GEOS headers and menus for cc65-compiled programs. </abstract> @@ -24,7 +24,7 @@ Optional resources might be menu definitions, other headers (e.g., for data files of an app.), dialog definitions, etc. Without an application's header, GEOS is unable to load and start it. -Currently, <bf/grc65/ supports only menues and the required header definition, +Currently, <bf/grc65/ supports only menus and the required header definition, along with support for building applications with VLIR-structured overlays. <bf/grc65/ generates output in two formats: C header and <bf/ca65/ source (.s). @@ -345,7 +345,7 @@ for addresses. <!-- <appendix> --> <sect>Appendix A -- example.grc<label id="example-grc"> <p><tscreen><verb> -; Note that MENU can define both menues and submenues. +; Note that MENU can define both menus and submenus. ; If you want to use any C operators (such as "|", "&", etc.), do it WITHOUT ; any spaces between the arguments (the parser is simple and weak). diff --git a/doc/intro.sgml b/doc/intro.sgml index 0617b0ab3..5d1889d76 100644 --- a/doc/intro.sgml +++ b/doc/intro.sgml @@ -555,7 +555,7 @@ feature on. </quote> <quote> -In VICE, got to <bf/Settings/ -> <bf/Settings/, then <bf/Peripherial devices/ -> +In VICE, got to <bf/Settings/ -> <bf/Settings/, then <bf/Peripheral devices/ -> <bf/Drive/. Then, you must enable the <bf/True drive emulation/ checkbox. </quote> diff --git a/doc/ld65.sgml b/doc/ld65.sgml index 56d77ca63..87c2cae51 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -886,7 +886,7 @@ also for a segment. The value must be an integer between 0 and 255. It is used as the fill value for space reserved by the assembler's <tt/.ALIGN/ and <tt/.RES/ commands. It is also used as the fill value for space between sections (part of a segment that comes from one object file) caused by alignment, but not for -space that preceeds the first section. +space that precedes the first section. To suppress the warning, the linker issues if it encounters a segment that is not found in any of the input files, use "<tt/optional=yes/" as an additional diff --git a/doc/smc.sgml b/doc/smc.sgml index e277c5008..88cd6dc14 100644 --- a/doc/smc.sgml +++ b/doc/smc.sgml @@ -85,7 +85,7 @@ Please note: <item> The macro '<tt>SMC_StoreValue</tt>' takes care, that the store operation will occur on the value-position of a SMC-instruction. As you will see, other macros influence other instruction part positions. - There is no consistency check, if the targeted SMC instruction acually + There is no consistency check, if the targeted SMC instruction actually contains a value. Storing a 'value' on an immplied SMC instruction would corrupt the following memory cell! </enum> @@ -582,7 +582,7 @@ into a single instruction line. These can be changed of course too. Line 10,11: These lines construct a branch operation for line 8: The X-register will be used to change it from 'inc StoreAccuFirstSection+2' (high-byte operation) to 'beq restoreCode'. Please note: To calculate the -relaive branch offset, we introduced a second label +relative branch offset, we introduced a second label ('RestoreCodeBranchBaseAdr') for to calculate it. Some could also use the internal name of the SMC label, but you should abstain to do so - it may be changed in the future... From 152241f26c821f1ab6c72e01b9c3334df451b8e1 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 19 Dec 2021 16:44:37 +0100 Subject: [PATCH 1364/2710] Don't rely on (actually changed) unspecified compiler behavior. --- libsrc/common/pmemalign.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/common/pmemalign.c b/libsrc/common/pmemalign.c index 8f055a3fc..d9d6b4e97 100644 --- a/libsrc/common/pmemalign.c +++ b/libsrc/common/pmemalign.c @@ -75,7 +75,7 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size) } /* Test alignment: is it a power of two? There must be only one bit set. */ - if (alignment == 0 || (alignment & --alignment) != 0) { + if (alignment == 0 || (alignment & alignment - 1) != 0) { *memptr = NULL; return EINVAL; } From e1ef1325ec7d747d8dd62797897f6b79a4a75c8d Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 19 Dec 2021 20:27:56 -0500 Subject: [PATCH 1365/2710] Put the alignment decrement code back into posix_memalign(). Without that code, the function returns a very broken pointer. --- libsrc/common/pmemalign.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/libsrc/common/pmemalign.c b/libsrc/common/pmemalign.c index d9d6b4e97..52adb240d 100644 --- a/libsrc/common/pmemalign.c +++ b/libsrc/common/pmemalign.c @@ -75,7 +75,7 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size) } /* Test alignment: is it a power of two? There must be only one bit set. */ - if (alignment == 0 || (alignment & alignment - 1) != 0) { + if (alignment == 0 || (alignment & (alignment - 1)) != 0) { *memptr = NULL; return EINVAL; } @@ -86,7 +86,7 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size) ** overhead added one time; and, the worst thing that might happen is that ** we cannot free the upper and lower blocks. */ - b = malloc (size + alignment); + b = malloc (--alignment + size); /* Handle out-of-memory */ if (b == NULL) { @@ -169,6 +169,3 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size) return EOK; } - - - From 5b97a74dbc4811f371da5894b0070ab26650c459 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Wed, 22 Dec 2021 09:50:38 +0100 Subject: [PATCH 1366/2710] Delete c-cpp.yml --- .github/workflows/c-cpp.yml | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 .github/workflows/c-cpp.yml diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml deleted file mode 100644 index e3233268f..000000000 --- a/.github/workflows/c-cpp.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: C/C++ CI - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - name: configure - run: ./configure - - name: make - run: make - - name: make check - run: make check - - name: make distcheck - run: make distcheck From baa582ac0b42ecb2521e19d8221d16066ff9cd39 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 23 Dec 2021 22:24:55 -0500 Subject: [PATCH 1367/2710] Made cbm_open() be more efficient. The fastcall argument doesn't need to be put on a stack. SETNAM can be called before SETLFS. --- libsrc/cbm/cbm_open.s | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/libsrc/cbm/cbm_open.s b/libsrc/cbm/cbm_open.s index 1842fc149..db4179db8 100644 --- a/libsrc/cbm/cbm_open.s +++ b/libsrc/cbm/cbm_open.s @@ -1,5 +1,6 @@ ; -; Ullrich von Bassewitz, 22.06.2002 +; 2002-06-22, Ullrich von Bassewitz +; 2021-12-23, Greg King ; ; Original C code by Marc 'BlackJack' Rintsch, 18.03.2001 ; @@ -19,26 +20,17 @@ ; .export _cbm_open + .import popa .import _cbm_k_setlfs, _cbm_k_setnam, _cbm_k_open .import __oserror _cbm_open: - pha - txa - pha ; Save name + jsr _cbm_k_setnam jsr popa ; Get sec_addr jsr _cbm_k_setlfs ; Call SETLFS, pop all args - pla - tax - pla ; Get name - jsr _cbm_k_setnam - jsr _cbm_k_open sta __oserror - rts - - From a270a56a71135720aa785558394dcc2cc6697112 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sat, 22 Jan 2022 01:04:08 +0100 Subject: [PATCH 1368/2710] Wrong platform There was no conio for Lynx ```` ../bin/ld65 -o mandelbrot -t lynx -m mandelbrot.map mandelbrot.o lynx.lib mandelbrot.s:516: Error: Unresolved external '_clrscr' conio/vcprintf.s:85: Error: Unresolved external '_cputc' conio/cputs.s:25: Error: Unresolved external '_cputc' conio/cputs.s:15: Error: Unresolved external 'gotoxy' ld65: Error: 3 unresolved external(s) found - cannot create output file make: *** [mandelbrot] Error 1 ```` --- samples/readme.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/readme.txt b/samples/readme.txt index 56b275764..11326146b 100644 --- a/samples/readme.txt +++ b/samples/readme.txt @@ -68,10 +68,10 @@ Platforms: Runs on all platforms that support conio, which means: Name: mandelbrot Description: A mandelbrot demo using integer arithmetic. The demo was written by groepaz, and converted to cc65 using TGI graphics - by Stephan Haubenthal. + by Stefan Haubenthal. Platforms: Runs on all platforms that have TGI support: Apple ][, Atari, C64, C128, Oric Atmos and Telestrat, GEOS, - NES, and Lynx. + and NES. ----------------------------------------------------------------------------- Name: mousedemo From caa74b325df379d82a027b0800b8d5997b824428 Mon Sep 17 00:00:00 2001 From: Scott Prive <Scott Prive> Date: Sun, 23 Jan 2022 18:53:14 -0500 Subject: [PATCH 1369/2710] document special case on sub 40-col modes --- doc/funcref.sgml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index e6cb42a0f..2dc28137a 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -7788,6 +7788,10 @@ format specifiers as <tt/vprintf/. <!-- <tt/<ref id="vprintf" name="vprintf">/. between <tt/\r/ and <tt/\n/. <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. +<item>cprintf targets a 40 character line. On a 20-column display this has +the unexpected effect of a blank line after your text. On such displays you can either +use for example gotoxy(20,0) to target the "next" line, or you can switch to write() +function which does not have this side effect. </itemize> <tag/Availability/cc65 <tag/See also/ From ded575c4771091441903aa2aaba50be00c28c88f Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Mon, 24 Jan 2022 20:13:49 +0100 Subject: [PATCH 1370/2710] put Atari 20-column note to where it belongs... --- doc/atari.sgml | 5 +++++ doc/funcref.sgml | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/atari.sgml b/doc/atari.sgml index 85dcaaf5e..ff41d0bb4 100644 --- a/doc/atari.sgml +++ b/doc/atari.sgml @@ -726,6 +726,11 @@ for sectors 1 to 3, regardless of the type of diskette. The console I/O is speed optimized therefore support for XEP80 hardware or f80.com software is missing. Of course you may use stdio.h functions. +<tt/cprintf/ targets a 40 character line. On a 20-column display this has +the unexpected effect of a blank line after your text. On such displays you can either +use for example <tt/gotoxy(20,0)/ to target the "next" line, or you can switch to <tt/write()/ +function which does not have this side effect. + <sect>Technical details<label id="techdetail"><p> diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 2dc28137a..e6cb42a0f 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -7788,10 +7788,6 @@ format specifiers as <tt/vprintf/. <!-- <tt/<ref id="vprintf" name="vprintf">/. between <tt/\r/ and <tt/\n/. <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. -<item>cprintf targets a 40 character line. On a 20-column display this has -the unexpected effect of a blank line after your text. On such displays you can either -use for example gotoxy(20,0) to target the "next" line, or you can switch to write() -function which does not have this side effect. </itemize> <tag/Availability/cc65 <tag/See also/ From be594912eba1b8bc0c59f6d716316a60145f2794 Mon Sep 17 00:00:00 2001 From: Daniel Lehenbauer <DLehenbauer@users.noreply.github.com> Date: Mon, 17 Jan 2022 08:22:15 -0800 Subject: [PATCH 1371/2710] asminc/pet.inc: Add PIA1 & PIA2 --- asminc/pet.inc | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/asminc/pet.inc b/asminc/pet.inc index d165bb336..ee96d378c 100644 --- a/asminc/pet.inc +++ b/asminc/pet.inc @@ -50,7 +50,6 @@ PET_2000 = $CA PET_3000 = $FC PET_4000 = $FD - ;---------------------------------------------------------------------------- ; Vector and other locations @@ -59,7 +58,25 @@ BRKVec := $0092 NMIVec := $0094 ; --------------------------------------------------------------------------- -; I/O: 6522 VIA2 +; I/O: 6520 PIA1 + +PIA1 := $E810 ; PIA1 base address +PIA1_PORTA := PIA1+$0 ; Port A (PA) and data direction register A (DDRA) +PIA1_PACTL := PIA1+$1 ; Port A control register (CRA) +PIA1_PORTB := PIA1+$2 ; Port B (PB) and data direction register B (DDRB) +PIA1_PBCTL := PIA1+$3 ; Port B control register (CRB) + +; --------------------------------------------------------------------------- +; I/O: 6520 PIA2 + +PIA2 := $E820 ; PIA2 base address +PIA2_PORTA := PIA2+$0 ; Port A (PA) and data direction register A (DDRA) +PIA2_PACTL := PIA2+$1 ; Port A control register (CRA) +PIA2_PORTB := PIA2+$2 ; Port B (PB) and data direction register B (DDRB) +PIA2_PBCTL := PIA2+$3 ; Port B control register (CRB) + +; --------------------------------------------------------------------------- +; I/O: 6522 VIA VIA := $E840 ; VIA base address VIA_PB := VIA+$0 ; Port register B From 88fdaeb490863621865fb95620b5d6bb7acad188 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Fri, 24 Dec 2021 23:44:57 +0100 Subject: [PATCH 1372/2710] Add standard C library function strnlen(). --- include/string.h | 1 + libsrc/common/strnlen.s | 54 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 libsrc/common/strnlen.s diff --git a/include/string.h b/include/string.h index 2f5953196..74442415f 100644 --- a/include/string.h +++ b/include/string.h @@ -50,6 +50,7 @@ char* __fastcall__ strcpy (char* dest, const char* src); size_t __fastcall__ strcspn (const char* s1, const char* s2); char* __fastcall__ strerror (int errcode); size_t __fastcall__ strlen (const char* s); +size_t __fastcall__ strnlen (const char* s, size_t maxlen); char* __fastcall__ strncat (char* s1, const char* s2, size_t count); int __fastcall__ strncmp (const char* s1, const char* s2, size_t count); char* __fastcall__ strncpy (char* dest, const char* src, size_t count); diff --git a/libsrc/common/strnlen.s b/libsrc/common/strnlen.s new file mode 100644 index 000000000..e748325e2 --- /dev/null +++ b/libsrc/common/strnlen.s @@ -0,0 +1,54 @@ +; size_t __fastcall__ strnlen (const char* s, size_t maxlen); + +.export _strnlen +.import popax +.importzp ptr1, tmp1, tmp2, tmp3, tmp4 + +.proc _strnlen + ; Fetch string pointer. + sta ptr1 + stx ptr1+1 + + ; Clear return value. + lda #0 + sta tmp1 + sta tmp2 + + ; Get maximum length. + jsr popax + sta tmp3 + inc tmp3 + inx + stx tmp4 + + ;;; Loop over string. + ldy #0 + + ; Decrement maximum length. +next: dec tmp3 + bne l2 + dec tmp4 + beq done +l2: + + lda (ptr1),y + beq done + + ; Step to next character. + inc ptr1 + bne l1 + inc ptr1+1 +l1: + + ; Increment return value. + inc tmp1 + bne next + inc tmp2 + + jmp next + + +done: lda tmp1 + ldx tmp2 + rts +.endproc From 3ee9b35080a3811feff5b703335943971fa2ff6e Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 09:11:58 +0100 Subject: [PATCH 1373/2710] Fix strnlen(). --- libsrc/common/strnlen.s | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/libsrc/common/strnlen.s b/libsrc/common/strnlen.s index e748325e2..eb2c16006 100644 --- a/libsrc/common/strnlen.s +++ b/libsrc/common/strnlen.s @@ -5,25 +5,25 @@ .importzp ptr1, tmp1, tmp2, tmp3, tmp4 .proc _strnlen + ; Get maximum length. + tay + iny + sty tmp3 + inx + stx tmp4 + ; Fetch string pointer. + jsr popax sta ptr1 stx ptr1+1 ; Clear return value. - lda #0 - sta tmp1 - sta tmp2 + ldy #0 + sty tmp1 + sty tmp2 - ; Get maximum length. - jsr popax - sta tmp3 - inc tmp3 - inx - stx tmp4 ;;; Loop over string. - ldy #0 - ; Decrement maximum length. next: dec tmp3 bne l2 @@ -35,7 +35,7 @@ l2: beq done ; Step to next character. - inc ptr1 + iny bne l1 inc ptr1+1 l1: @@ -45,7 +45,7 @@ l1: bne next inc tmp2 - jmp next + bne next ; (jmp) done: lda tmp1 From 2c27c075a976a64e859dfec6d3afc70ca0f9fdd1 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 09:12:13 +0100 Subject: [PATCH 1374/2710] strnlen(): Add comment with POSIX standard. --- include/string.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/string.h b/include/string.h index 74442415f..70abd5851 100644 --- a/include/string.h +++ b/include/string.h @@ -50,7 +50,7 @@ char* __fastcall__ strcpy (char* dest, const char* src); size_t __fastcall__ strcspn (const char* s1, const char* s2); char* __fastcall__ strerror (int errcode); size_t __fastcall__ strlen (const char* s); -size_t __fastcall__ strnlen (const char* s, size_t maxlen); +size_t __fastcall__ strnlen (const char* s, size_t maxlen); /* POSIX.1-2008 */ char* __fastcall__ strncat (char* s1, const char* s2, size_t count); int __fastcall__ strncmp (const char* s1, const char* s2, size_t count); char* __fastcall__ strncpy (char* dest, const char* src, size_t count); From 34e03fd9ecff6eae7f3002b29787f753a9abf1d5 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 09:13:43 +0100 Subject: [PATCH 1375/2710] Add test of strnlen(). --- targettest/Makefile | 4 ++++ targettest/strnlen.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 targettest/strnlen.c diff --git a/targettest/Makefile b/targettest/Makefile index f3694335c..44933949a 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -160,6 +160,7 @@ EXELIST_c64 = \ scanf-test \ ser-test \ strdup-test \ + strnlen \ stroserror-test \ strqtok-test \ tinyshell \ @@ -190,6 +191,7 @@ EXELIST_vic20 = \ rename-test \ scanf-test \ strdup-test \ + strnlen \ stroserror-test \ strqtok-test \ tinyshell \ @@ -222,6 +224,7 @@ EXELIST_apple2 = \ seek \ ser-test \ strdup-test \ + strnlen \ stroserror-test \ strqtok-test \ tinyshell \ @@ -257,6 +260,7 @@ EXELIST_atari = \ seek \ ser-test \ strdup-test \ + strnlen \ stroserror-test \ strqtok-test \ tinyshell \ diff --git a/targettest/strnlen.c b/targettest/strnlen.c new file mode 100644 index 000000000..d07b7628c --- /dev/null +++ b/targettest/strnlen.c @@ -0,0 +1,32 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +const char * str = "0123456789"; + +void +check (size_t result, size_t expected) +{ + if (result != expected) { + printf ("Expected strnlen() to return %d, got %d.\n", + expected, result); + exit (EXIT_FAILURE); + } +} + +int +main (void) +{ + size_t maxlen = strlen (str); + size_t result; + size_t expected; + + for (expected = 0; expected < maxlen; expected++) + check (strnlen (str, expected), expected); + + check (strnlen (str, maxlen << 1), maxlen); + + printf ("strnlen() OK.\n"); + + return EXIT_SUCCESS; +} From d29ec4c8009085e0d59e4018a20600328edda4fc Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 14:21:47 +0100 Subject: [PATCH 1376/2710] Move strnlen() to non-ANSI section. --- include/string.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/string.h b/include/string.h index 70abd5851..83970493e 100644 --- a/include/string.h +++ b/include/string.h @@ -50,7 +50,6 @@ char* __fastcall__ strcpy (char* dest, const char* src); size_t __fastcall__ strcspn (const char* s1, const char* s2); char* __fastcall__ strerror (int errcode); size_t __fastcall__ strlen (const char* s); -size_t __fastcall__ strnlen (const char* s, size_t maxlen); /* POSIX.1-2008 */ char* __fastcall__ strncat (char* s1, const char* s2, size_t count); int __fastcall__ strncmp (const char* s1, const char* s2, size_t count); char* __fastcall__ strncpy (char* dest, const char* src, size_t count); @@ -79,6 +78,7 @@ int __fastcall__ stricmp (const char* s1, const char* s2); /* DOS/Windows */ int __fastcall__ strcasecmp (const char* s1, const char* s2); /* Same for Unix */ int __fastcall__ strnicmp (const char* s1, const char* s2, size_t count); /* DOS/Windows */ int __fastcall__ strncasecmp (const char* s1, const char* s2, size_t count); /* Same for Unix */ +size_t __fastcall__ strnlen (const char* s, size_t maxlen); /* POSIX.1-2008 */ char* __fastcall__ strlwr (char* s); char* __fastcall__ strlower (char* s); char* __fastcall__ strupr (char* s); From c2608599aa374ed3dced9ecad32a71e79b59572e Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 20:04:10 +0100 Subject: [PATCH 1377/2710] More strict printf() format string. --- targettest/strnlen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targettest/strnlen.c b/targettest/strnlen.c index d07b7628c..ac39f2396 100644 --- a/targettest/strnlen.c +++ b/targettest/strnlen.c @@ -8,7 +8,7 @@ void check (size_t result, size_t expected) { if (result != expected) { - printf ("Expected strnlen() to return %d, got %d.\n", + printf ("Expected strnlen() to return %u, got %u.\n", expected, result); exit (EXIT_FAILURE); } From 623e951e33137339f7f628659d6bb03ced1b9962 Mon Sep 17 00:00:00 2001 From: "Matthew D. Steele" <mdsteele@alum.mit.edu> Date: Fri, 7 Jan 2022 09:56:46 -0500 Subject: [PATCH 1378/2710] Fix Pop() implementation in src/sim65/paravirt.c (fixes #1625) The Pop() function was not handling stack pointer wrap around correctly. Also, change the simulated RTS implementation in ParaVirtHooks() to explicitly sequence the two Pop() calls in the correct order. --- src/sim65/paravirt.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index e73bd3400..b3ec8fa37 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -105,7 +105,7 @@ static void SetAX (CPURegs* Regs, unsigned Val) static unsigned char Pop (CPURegs* Regs) { - return MemReadByte (0x0100 + ++Regs->SP); + return MemReadByte (0x0100 + (++Regs->SP & 0xFF)); } @@ -327,5 +327,7 @@ void ParaVirtHooks (CPURegs* Regs) Hooks[Regs->PC - PARAVIRT_BASE] (Regs); /* Simulate RTS */ - Regs->PC = Pop(Regs) + (Pop(Regs) << 8) + 1; + unsigned lo = Pop(Regs); + unsigned hi = Pop(Regs); + Regs->PC = lo + (hi << 8) + 1; } From ceca1c496dd28ec12dba2ca9ffd0a56c820492cd Mon Sep 17 00:00:00 2001 From: "Matthew D. Steele" <mdsteele@alum.mit.edu> Date: Sat, 8 Jan 2022 16:24:40 -0500 Subject: [PATCH 1379/2710] Adjust Pop() sequencing in paravirt.c --- src/sim65/paravirt.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index b3ec8fa37..7da683f1d 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -328,6 +328,5 @@ void ParaVirtHooks (CPURegs* Regs) /* Simulate RTS */ unsigned lo = Pop(Regs); - unsigned hi = Pop(Regs); - Regs->PC = lo + (hi << 8) + 1; + Regs->PC = lo + (Pop(Regs) << 8) + 1; } From db02a89b5d89697b083bbdb30a81478b01bc8910 Mon Sep 17 00:00:00 2001 From: "Matthew D. Steele" <mdsteele@alum.mit.edu> Date: Sat, 8 Jan 2022 16:29:42 -0500 Subject: [PATCH 1380/2710] Move local variable declaration to top of block --- src/sim65/paravirt.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index 7da683f1d..ba3a76461 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -317,6 +317,8 @@ void ParaVirtInit (unsigned aArgStart, unsigned char aSPAddr) void ParaVirtHooks (CPURegs* Regs) /* Potentially execute paravirtualization hooks */ { + unsigned lo; + /* Check for paravirtualization address range */ if (Regs->PC < PARAVIRT_BASE || Regs->PC >= PARAVIRT_BASE + sizeof (Hooks) / sizeof (Hooks[0])) { @@ -327,6 +329,6 @@ void ParaVirtHooks (CPURegs* Regs) Hooks[Regs->PC - PARAVIRT_BASE] (Regs); /* Simulate RTS */ - unsigned lo = Pop(Regs); + lo = Pop(Regs); Regs->PC = lo + (Pop(Regs) << 8) + 1; } From 815e30c47f2cdd427381c358ba1bf2276cb94e53 Mon Sep 17 00:00:00 2001 From: "Matthew D. Steele" <mdsteele@alum.mit.edu> Date: Sat, 8 Jan 2022 16:39:30 -0500 Subject: [PATCH 1381/2710] Add space after function names --- src/sim65/paravirt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index ba3a76461..db4120326 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -329,6 +329,6 @@ void ParaVirtHooks (CPURegs* Regs) Hooks[Regs->PC - PARAVIRT_BASE] (Regs); /* Simulate RTS */ - lo = Pop(Regs); - Regs->PC = lo + (Pop(Regs) << 8) + 1; + lo = Pop (Regs); + Regs->PC = lo + (Pop (Regs) << 8) + 1; } From b40c76a6326203d5803e1b2e9574cffa531c3379 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 09:19:37 +0100 Subject: [PATCH 1382/2710] Do not compile petscii test for unsupported platforms. Only C64 is supported. --- targettest/cbm/Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index 298f80d62..147df2c1c 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -32,8 +32,12 @@ endif all: petscii.prg cbmdir-test.prg +ifeq ($(SYS),c64) petscii.prg: petscii.c $(CL) -t $(SYS) -O -o petscii.prg petscii.c +else +petscii.prg: +endif cbmdir-test.prg: cbmdir-test.c $(CL) -t $(SYS) -Oris -o $@ $< From 4bc9a9d9ccc76722f2ef846a951d810cbaa8751c Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 09:40:32 +0100 Subject: [PATCH 1383/2710] Make VICE monitor command lists for Commodore platforms. --- targettest/Makefile | 40 +++++++++++++++++++++++++++++++++++++++- targettest/cbm/Makefile | 2 +- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/targettest/Makefile b/targettest/Makefile index 44933949a..221464108 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -122,6 +122,44 @@ DISK_atarixl = testcode.atr .PRECIOUS: %.o +LDFLAGS= +ifeq ($(SYS),c64) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),c128) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),c16) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),cbm510) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),cbm510) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),cx16) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),geos-cbm) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),lunix) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),pet) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),pet-overlay) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),plus4) + LDFLAGS+=-Ln $@.lst +endif +ifeq ($(SYS),vic20) + LDFLAGS+=-Ln $@.lst +endif + .o: ifeq ($(SYS),vic20) $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib @@ -390,7 +428,7 @@ testcode.atr: testcode # Clean-up rules mostlyclean: - @$(DEL) *.lbl *.map *.o 2>$(NULLDEV) + @$(DEL) *.lbl *.map *.lst *.o 2>$(NULLDEV) # we cant use .s since we have asm files in the directory that we want to keep @$(DEL) ${patsubst %.c,%.s,$(wildcard *.c)} 2>$(NULLDEV) diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index 147df2c1c..73b51fc76 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -43,4 +43,4 @@ cbmdir-test.prg: cbmdir-test.c $(CL) -t $(SYS) -Oris -o $@ $< clean: - @$(DEL) petscii.prg cbmdir-test.prg 2>$(NULLDEV) + @$(DEL) *.lst petscii.prg cbmdir-test.prg 2>$(NULLDEV) From 20f7320baee6a4a83f99d835ff6df160b076e49b Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 09:45:15 +0100 Subject: [PATCH 1384/2710] cbmdir-test for VICs needs memory expansion. --- targettest/cbm/Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index 73b51fc76..3c0678c32 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -40,7 +40,11 @@ petscii.prg: endif cbmdir-test.prg: cbmdir-test.c +ifeq ($(SYS),vic20) + $(CL) -C vic20-32k.cfg -Oris -o $@ $< +else $(CL) -t $(SYS) -Oris -o $@ $< +endif clean: @$(DEL) *.lst petscii.prg cbmdir-test.prg 2>$(NULLDEV) From 0ac1b8d6b12575c2ac225744c4fb69bdfa6e9d24 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 09:57:18 +0100 Subject: [PATCH 1385/2710] Remove most compiler warnings. --- targettest/gamate/ctest.c | 3 +++ targettest/heaptest.c | 6 +++--- targettest/strdup-test.c | 2 +- targettest/tinyshell.c | 14 +++++++------- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/targettest/gamate/ctest.c b/targettest/gamate/ctest.c index bff3f5986..b2c3740c5 100644 --- a/targettest/gamate/ctest.c +++ b/targettest/gamate/ctest.c @@ -9,6 +9,9 @@ unsigned short n; int main(int argc, char *argv[]) { + (void) argc; // Suppress warnings. + (void) argv; + clrscr(); gotoxy(0,0);cputs("Gamate C-Test"); diff --git a/targettest/heaptest.c b/targettest/heaptest.c index 560694bee..e3a21eaa6 100644 --- a/targettest/heaptest.c +++ b/targettest/heaptest.c @@ -6,7 +6,7 @@ -static unsigned char* V[256]; +static char* V[256]; @@ -17,7 +17,7 @@ static char* Alloc (void) unsigned char Size = (((unsigned char)rand()) & 0x7F) + 1; /* Allocate memory */ - unsigned char* P = malloc (Size); + char* P = malloc (Size); /* Set the string to a defined value. We use the size, since this will ** also allow us to retrieve it later. @@ -33,7 +33,7 @@ static char* Alloc (void) -static void Free (unsigned char* P) +static void Free (char* P) /* Check a memory block and free it */ { unsigned char I; diff --git a/targettest/strdup-test.c b/targettest/strdup-test.c index 2fcc9816f..8e7ae87d8 100644 --- a/targettest/strdup-test.c +++ b/targettest/strdup-test.c @@ -5,7 +5,7 @@ #include <_heap.h> -static unsigned char* V[256]; +static char* V[256]; static void ShowInfo (void) /* Show heap info */ diff --git a/targettest/tinyshell.c b/targettest/tinyshell.c index c83bd14e8..71e9b56e3 100644 --- a/targettest/tinyshell.c +++ b/targettest/tinyshell.c @@ -60,13 +60,13 @@ extern unsigned int getsp(void); /* comes from getsp.s */ static unsigned char verbose; static unsigned char terminate; static unsigned char cmd; -static unsigned char *cmd_asc, *arg1, *arg2, *arg3, *args; /* 'args': everything after command */ -static unsigned char keyb_buf[KEYB_BUFSZ + 1]; -static unsigned char keyb_buf2[KEYB_BUFSZ + 1]; +static char *cmd_asc, *arg1, *arg2, *arg3, *args; /* 'args': everything after command */ +static char keyb_buf[KEYB_BUFSZ + 1]; +static char keyb_buf2[KEYB_BUFSZ + 1]; static size_t cpbuf_sz = 4096; struct cmd_table { - unsigned char *name; + char *name; unsigned char code; } cmd_table[] = { { "help", CMD_HELP }, @@ -196,7 +196,7 @@ static void cmd_help(void) static void cmd_ls(void) { DIR *dir; - unsigned char *arg; + char *arg; struct dirent *dirent; #ifdef __ATARI__ char need_free = 0; @@ -356,7 +356,7 @@ static void cmd_rename(void) static void cmd_exec(void) { - unsigned char *progname, *arguments; + char *progname, *arguments; progname = strtok(args, " \t\n"); if (! progname) { @@ -373,7 +373,7 @@ static void cmd_exec(void) static void cmd_copy(void) { int srcfd = -1, dstfd = -1; - unsigned char *buf; + char *buf; int readsz, writesz; if (!arg2 || arg3) { From 582c2f65e391fba6a9d3b3ffdef868d9c92a3ea8 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 20:07:34 +0100 Subject: [PATCH 1386/2710] Use suffix '.lbl' instead of '.lst'. --- targettest/Makefile | 26 +++++++++++++------------- targettest/cbm/Makefile | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/targettest/Makefile b/targettest/Makefile index 221464108..9c9e07ee5 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -124,40 +124,40 @@ DISK_atarixl = testcode.atr LDFLAGS= ifeq ($(SYS),c64) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),c128) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),c16) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),cbm510) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),cbm510) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),cx16) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),geos-cbm) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),lunix) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),pet) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),pet-overlay) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),plus4) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),vic20) - LDFLAGS+=-Ln $@.lst + LDFLAGS+=-Ln $@.lbl endif .o: @@ -428,7 +428,7 @@ testcode.atr: testcode # Clean-up rules mostlyclean: - @$(DEL) *.lbl *.map *.lst *.o 2>$(NULLDEV) + @$(DEL) *.lbl *.map *.lbl *.o 2>$(NULLDEV) # we cant use .s since we have asm files in the directory that we want to keep @$(DEL) ${patsubst %.c,%.s,$(wildcard *.c)} 2>$(NULLDEV) diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index 3c0678c32..cbff73273 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -47,4 +47,4 @@ else endif clean: - @$(DEL) *.lst petscii.prg cbmdir-test.prg 2>$(NULLDEV) + @$(DEL) *.lbl petscii.prg cbmdir-test.prg 2>$(NULLDEV) From a5ca1928f5ee88a701edd8d98d039fc76b315b08 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 20:09:18 +0100 Subject: [PATCH 1387/2710] Use -t option alongside -C. --- targettest/Makefile | 2 +- targettest/cbm/Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/targettest/Makefile b/targettest/Makefile index 9c9e07ee5..82e8f47ba 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -162,7 +162,7 @@ endif .o: ifeq ($(SYS),vic20) - $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib + $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(SYS) -C vic20-32k.cfg -m $@.map $^ $(SYS).lib else $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(SYS) -m $@.map $^ $(SYS).lib endif diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index cbff73273..a7646c2d9 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -41,7 +41,7 @@ endif cbmdir-test.prg: cbmdir-test.c ifeq ($(SYS),vic20) - $(CL) -C vic20-32k.cfg -Oris -o $@ $< + $(CL) -t $(SYS) -C vic20-32k.cfg -Oris -o $@ $< else $(CL) -t $(SYS) -Oris -o $@ $< endif From 6aabee0564fa563caf29d5e33bd8a791ac5b85c7 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 20:10:53 +0100 Subject: [PATCH 1388/2710] Remove -t option for linker only. --- targettest/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targettest/Makefile b/targettest/Makefile index 82e8f47ba..9c9e07ee5 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -162,7 +162,7 @@ endif .o: ifeq ($(SYS),vic20) - $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(SYS) -C vic20-32k.cfg -m $@.map $^ $(SYS).lib + $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib else $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(SYS) -m $@.map $^ $(SYS).lib endif From d5591bc1844a7c586f8198b14a8c343eae760cef Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 20:11:22 +0100 Subject: [PATCH 1389/2710] Make label file for c610 platform. --- targettest/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targettest/Makefile b/targettest/Makefile index 9c9e07ee5..ee3e9c9d2 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -135,7 +135,7 @@ endif ifeq ($(SYS),cbm510) LDFLAGS+=-Ln $@.lbl endif -ifeq ($(SYS),cbm510) +ifeq ($(SYS),cbm610) LDFLAGS+=-Ln $@.lbl endif ifeq ($(SYS),cx16) From d23c83dd1eb7a24c4129ca3abe2e66c87bb9044c Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 20:12:45 +0100 Subject: [PATCH 1390/2710] Remove command line arguments and return value from main(). --- targettest/gamate/ctest.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/targettest/gamate/ctest.c b/targettest/gamate/ctest.c index b2c3740c5..6b2de2354 100644 --- a/targettest/gamate/ctest.c +++ b/targettest/gamate/ctest.c @@ -7,11 +7,8 @@ unsigned char y = 0; unsigned char x = 0; unsigned short n; -int main(int argc, char *argv[]) +void main(void) { - (void) argc; // Suppress warnings. - (void) argv; - clrscr(); gotoxy(0,0);cputs("Gamate C-Test"); From a60ac67783379f47fb7ba92decc44a31d2d0fe97 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 20:15:09 +0100 Subject: [PATCH 1391/2710] main(): Re-introduce return value. Compiler rejects 'void'. --- targettest/gamate/ctest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targettest/gamate/ctest.c b/targettest/gamate/ctest.c index 6b2de2354..c3ee819bc 100644 --- a/targettest/gamate/ctest.c +++ b/targettest/gamate/ctest.c @@ -7,7 +7,7 @@ unsigned char y = 0; unsigned char x = 0; unsigned short n; -void main(void) +int main(void) { clrscr(); gotoxy(0,0);cputs("Gamate C-Test"); From a45a92a71facdcb571a517cc477e92c93a7806cc Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 21:21:01 +0100 Subject: [PATCH 1392/2710] main(): No return value. --- targettest/gamate/ctest.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/targettest/gamate/ctest.c b/targettest/gamate/ctest.c index c3ee819bc..9acbe94cd 100644 --- a/targettest/gamate/ctest.c +++ b/targettest/gamate/ctest.c @@ -7,7 +7,7 @@ unsigned char y = 0; unsigned char x = 0; unsigned short n; -int main(void) +void main(void) { clrscr(); gotoxy(0,0);cputs("Gamate C-Test"); @@ -47,6 +47,4 @@ int main(void) (*((unsigned char*)LCD_YPOS)) = y; } - - return 0; } From 24a9886717e0ddb1770e91df3ed1a164d6a23c1e Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sat, 25 Dec 2021 21:25:52 +0100 Subject: [PATCH 1393/2710] mostlyclean: Clean up. --- targettest/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targettest/Makefile b/targettest/Makefile index ee3e9c9d2..f222bb471 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -428,7 +428,7 @@ testcode.atr: testcode # Clean-up rules mostlyclean: - @$(DEL) *.lbl *.map *.lbl *.o 2>$(NULLDEV) + @$(DEL) *.lbl *.map *.o 2>$(NULLDEV) # we cant use .s since we have asm files in the directory that we want to keep @$(DEL) ${patsubst %.c,%.s,$(wildcard *.c)} 2>$(NULLDEV) From e9e9d7aab8ed7b2fc9104d480aa99bb19f9aad86 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 01:23:10 +0100 Subject: [PATCH 1394/2710] iterate through all targettest builds --- .github/workflows/build-on-pull-request.yml | 65 +++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index f5477d191..4408727b3 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -33,6 +33,71 @@ jobs: - name: Test that the samples can be built. shell: bash run: make -j2 samples + - name: Test that the targettest programs can be built. + shell: bash + run: | + make SYS=apple2 -C targettest + make SYS=apple2 -C targettest clean + make SYS=apple2enh -C targettest + make SYS=apple2enh -C targettest clean + make SYS=atari -C targettest + make SYS=atari -C targettest clean + make SYS=atarixl -C targettest + make SYS=atarixl -C targettest clean + make SYS=atari2600 -C targettest + make SYS=atari2600 -C targettest clean + make SYS=atari5200 -C targettest + make SYS=atari5200 -C targettest clean + make SYS=atmos -C targettest + make SYS=atmos -C targettest clean + make SYS=bbc -C targettest + make SYS=bbc -C targettest clean + make SYS=c128 -C targettest + make SYS=c128 -C targettest clean + make SYS=c16 -C targettest + make SYS=c16 -C targettest clean + make SYS=c64 -C targettest + make SYS=c64 -C targettest clean + make SYS=cbm510 -C targettest + make SYS=cbm510 -C targettest clean + make SYS=cbm610 -C targettest + make SYS=cbm610 -C targettest clean + make SYS=creativision -C targettest + make SYS=creativision -C targettest clean + make SYS=cx16 -C targettest + make SYS=cx16 -C targettest clean + make SYS=gamate -C targettest + make SYS=gamate -C targettest clean + make SYS=geos-apple -C targettest + make SYS=geos-apple -C targettest clean + make SYS=geos-cbm -C targettest + make SYS=geos-cbm -C targettest clean + make SYS=lunix -C targettest + make SYS=lunix -C targettest clean + make SYS=lynx -C targettest + make SYS=lynx -C targettest clean + make SYS=nes -C targettest + make SYS=nes -C targettest clean + make SYS=osic1p -C targettest + make SYS=osic1p -C targettest clean + make SYS=pce -C targettest + make SYS=pce -C targettest clean + make SYS=pet -C targettest + make SYS=pet -C targettest clean + make SYS=plus4 -C targettest + make SYS=plus4 -C targettest clean + make SYS=sim6502 -C targettest + make SYS=sim6502 -C targettest clean + make SYS=sim65c02 -C targettest + make SYS=sim65c02 -C targettest clean + make SYS=supervision -C targettest + make SYS=supervision -C targettest clean + make SYS=sym1 -C targettest + make SYS=sym1 -C targettest clean + make SYS=telestrat -C targettest + make SYS=telestrat -C targettest clean + make SYS=vic20 -C targettest + make SYS=vic20 -C targettest clean - name: Build the document files. shell: bash run: make -j2 doc From f2ac6796aaf5b1e74f93a55392cfcd2bf5e1c5b9 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 01:46:47 +0100 Subject: [PATCH 1395/2710] another try --- .github/workflows/build-on-pull-request.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 4408727b3..fc2a6b7dd 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -36,6 +36,8 @@ jobs: - name: Test that the targettest programs can be built. shell: bash run: | + make SYS=c64 all + make SYS=c64 clean make SYS=apple2 -C targettest make SYS=apple2 -C targettest clean make SYS=apple2enh -C targettest @@ -44,8 +46,8 @@ jobs: make SYS=atari -C targettest clean make SYS=atarixl -C targettest make SYS=atarixl -C targettest clean - make SYS=atari2600 -C targettest - make SYS=atari2600 -C targettest clean + # make SYS=atari2600 -C targettest + # make SYS=atari2600 -C targettest clean make SYS=atari5200 -C targettest make SYS=atari5200 -C targettest clean make SYS=atmos -C targettest @@ -90,8 +92,8 @@ jobs: make SYS=sim6502 -C targettest clean make SYS=sim65c02 -C targettest make SYS=sim65c02 -C targettest clean - make SYS=supervision -C targettest - make SYS=supervision -C targettest clean + # make SYS=supervision -C targettest + # make SYS=supervision -C targettest clean make SYS=sym1 -C targettest make SYS=sym1 -C targettest clean make SYS=telestrat -C targettest From 8867d55b838fc71afaacacdbcdb2d360ee5b0912 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 01:54:06 +0100 Subject: [PATCH 1396/2710] and another --- .github/workflows/build-on-pull-request.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index fc2a6b7dd..5c39082bd 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -36,8 +36,8 @@ jobs: - name: Test that the targettest programs can be built. shell: bash run: | - make SYS=c64 all - make SYS=c64 clean + make SYS=c64 -C targettest all + make SYS=c64 -C targettest clean make SYS=apple2 -C targettest make SYS=apple2 -C targettest clean make SYS=apple2enh -C targettest From 53fed67bbcc19c1866a4f67a9c38c32d1a6e188f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 02:07:50 +0100 Subject: [PATCH 1397/2710] fix pathes --- .github/workflows/build-on-pull-request.yml | 4 ++++ targettest/accelerator/Makefile | 8 ++++---- targettest/apple2/Makefile | 8 ++++---- targettest/atari/Makefile | 8 ++++---- targettest/atari5200/Makefile | 8 ++++---- targettest/cbm/Makefile | 8 ++++---- targettest/gamate/Makefile | 8 ++++---- targettest/pce/Makefile | 8 ++++---- 8 files changed, 32 insertions(+), 28 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 5c39082bd..aa76f1f64 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -127,3 +127,7 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release + +# TODO: build targettest cbm subdir for all cbm targets +# TODO: build targettest atari subdir for all atari targets +# TODO: build targettest apple2 subdir for all apple2 targets diff --git a/targettest/accelerator/Makefile b/targettest/accelerator/Makefile index 527b13f33..90871f20c 100644 --- a/targettest/accelerator/Makefile +++ b/targettest/accelerator/Makefile @@ -20,10 +20,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif all: c64-scpu-test.prg c128-scpu-test.prg c64dtv-test.prg \ diff --git a/targettest/apple2/Makefile b/targettest/apple2/Makefile index f8167b47c..15a4075af 100644 --- a/targettest/apple2/Makefile +++ b/targettest/apple2/Makefile @@ -23,10 +23,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif all: hgrshow hgrtest dhgrshow diff --git a/targettest/atari/Makefile b/targettest/atari/Makefile index 18ddf55ce..05388ddd7 100644 --- a/targettest/atari/Makefile +++ b/targettest/atari/Makefile @@ -21,10 +21,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif all: charmapping.xex defdev.xex displaylist.xex mem.xex multi.xex ostype.xex \ diff --git a/targettest/atari5200/Makefile b/targettest/atari5200/Makefile index 3a8114975..532bb815e 100644 --- a/targettest/atari5200/Makefile +++ b/targettest/atari5200/Makefile @@ -21,10 +21,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif all: hello diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index a7646c2d9..3a4eff86f 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -24,10 +24,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif all: petscii.prg cbmdir-test.prg diff --git a/targettest/gamate/Makefile b/targettest/gamate/Makefile index a14b8a854..69ac30dc5 100644 --- a/targettest/gamate/Makefile +++ b/targettest/gamate/Makefile @@ -21,10 +21,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif all: audiotest.bin lcdtest.bin ctest.bin diff --git a/targettest/pce/Makefile b/targettest/pce/Makefile index f91f0eed8..695fed0a5 100644 --- a/targettest/pce/Makefile +++ b/targettest/pce/Makefile @@ -21,10 +21,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif .PHONY: all clean test From 3fbfddc5fbe2890425de9bf6baa163d3f9f5d259 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 02:13:54 +0100 Subject: [PATCH 1398/2710] fix pathes --- targettest/sym1/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/targettest/sym1/Makefile b/targettest/sym1/Makefile index 23742f6d1..8e469a599 100644 --- a/targettest/sym1/Makefile +++ b/targettest/sym1/Makefile @@ -20,10 +20,10 @@ ifdef CC65_HOME CL = $(CC65_HOME)/bin/cl65 LD = $(CC65_HOME)/bin/ld65 else - AS := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) - CC := $(if $(wildcard ../../../bin/cc65*),../../../bin/cc65,cc65) - CL := $(if $(wildcard ../../../bin/cl65*),../../../bin/cl65,cl65) - LD := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif all: symHello.bin symTiny.bin symDisplay.bin symIO.bin symNotepad.bin From e602d6e9c305ab86de540e2e9140d5b77a7a7f1e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 02:14:01 +0100 Subject: [PATCH 1399/2710] add sym1 target --- targettest/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/targettest/Makefile b/targettest/Makefile index f222bb471..8207fc560 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -334,6 +334,7 @@ all: testcode make -C cbm SYS=$(SYS) make -C gamate make -C pce + make -C sym1 # -------------------------------------------------------------------------- # some programs link against getsp.o @@ -441,3 +442,4 @@ clean: mostlyclean make -C cbm SYS=$(SYS) clean make -C gamate clean make -C pce clean + make -C sym1 clean From 09f2dc8d69a75c97e45cfd6f7643e3e7805750d5 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 02:29:11 +0100 Subject: [PATCH 1400/2710] comment out all the non working targets --- .github/workflows/build-on-pull-request.yml | 93 +++++++++++---------- 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index aa76f1f64..e121aaca5 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -48,56 +48,56 @@ jobs: make SYS=atarixl -C targettest clean # make SYS=atari2600 -C targettest # make SYS=atari2600 -C targettest clean - make SYS=atari5200 -C targettest - make SYS=atari5200 -C targettest clean - make SYS=atmos -C targettest - make SYS=atmos -C targettest clean - make SYS=bbc -C targettest - make SYS=bbc -C targettest clean - make SYS=c128 -C targettest - make SYS=c128 -C targettest clean - make SYS=c16 -C targettest - make SYS=c16 -C targettest clean + # make SYS=atari5200 -C targettest + # make SYS=atari5200 -C targettest clean + # make SYS=atmos -C targettest + # make SYS=atmos -C targettest clean + # make SYS=bbc -C targettest + # make SYS=bbc -C targettest clean + # make SYS=c128 -C targettest + # make SYS=c128 -C targettest clean + # make SYS=c16 -C targettest + # make SYS=c16 -C targettest clean make SYS=c64 -C targettest make SYS=c64 -C targettest clean - make SYS=cbm510 -C targettest - make SYS=cbm510 -C targettest clean - make SYS=cbm610 -C targettest - make SYS=cbm610 -C targettest clean - make SYS=creativision -C targettest - make SYS=creativision -C targettest clean - make SYS=cx16 -C targettest - make SYS=cx16 -C targettest clean - make SYS=gamate -C targettest - make SYS=gamate -C targettest clean - make SYS=geos-apple -C targettest - make SYS=geos-apple -C targettest clean - make SYS=geos-cbm -C targettest - make SYS=geos-cbm -C targettest clean - make SYS=lunix -C targettest - make SYS=lunix -C targettest clean - make SYS=lynx -C targettest - make SYS=lynx -C targettest clean - make SYS=nes -C targettest - make SYS=nes -C targettest clean - make SYS=osic1p -C targettest - make SYS=osic1p -C targettest clean - make SYS=pce -C targettest - make SYS=pce -C targettest clean - make SYS=pet -C targettest - make SYS=pet -C targettest clean - make SYS=plus4 -C targettest - make SYS=plus4 -C targettest clean - make SYS=sim6502 -C targettest - make SYS=sim6502 -C targettest clean - make SYS=sim65c02 -C targettest - make SYS=sim65c02 -C targettest clean + # make SYS=cbm510 -C targettest + # make SYS=cbm510 -C targettest clean + # make SYS=cbm610 -C targettest + # make SYS=cbm610 -C targettest clean + # make SYS=creativision -C targettest + # make SYS=creativision -C targettest clean + # make SYS=cx16 -C targettest + # make SYS=cx16 -C targettest clean + # make SYS=gamate -C targettest + # make SYS=gamate -C targettest clean + # make SYS=geos-apple -C targettest + # make SYS=geos-apple -C targettest clean + # make SYS=geos-cbm -C targettest + # make SYS=geos-cbm -C targettest clean + # make SYS=lunix -C targettest + # make SYS=lunix -C targettest clean + # make SYS=lynx -C targettest + # make SYS=lynx -C targettest clean + # make SYS=nes -C targettest + # make SYS=nes -C targettest clean + # make SYS=osic1p -C targettest + # make SYS=osic1p -C targettest clean + # make SYS=pce -C targettest + # make SYS=pce -C targettest clean + # make SYS=pet -C targettest + # make SYS=pet -C targettest clean + # make SYS=plus4 -C targettest + # make SYS=plus4 -C targettest clean + # make SYS=sim6502 -C targettest + # make SYS=sim6502 -C targettest clean + # make SYS=sim65c02 -C targettest + # make SYS=sim65c02 -C targettest clean # make SYS=supervision -C targettest # make SYS=supervision -C targettest clean - make SYS=sym1 -C targettest - make SYS=sym1 -C targettest clean - make SYS=telestrat -C targettest - make SYS=telestrat -C targettest clean + # make SYS=sym1 -C targettest + # make SYS=sym1 -C targettest clean + # make SYS=telestrat -C targettest + # make SYS=telestrat -C targettest clean make SYS=vic20 -C targettest make SYS=vic20 -C targettest clean - name: Build the document files. @@ -128,6 +128,7 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release +# TODO: fix tergettest Makefile for all currently commented out targets # TODO: build targettest cbm subdir for all cbm targets # TODO: build targettest atari subdir for all atari targets # TODO: build targettest apple2 subdir for all apple2 targets From 5f151b1316ec7ab55550d4854e9ea855d6813299 Mon Sep 17 00:00:00 2001 From: polluks <polluks@sdf.lonestar.org> Date: Sun, 30 Jan 2022 03:15:28 +0100 Subject: [PATCH 1401/2710] Revert commits --- libsrc/cbm/read.s | 2 +- libsrc/cbm/write.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/cbm/read.s b/libsrc/cbm/read.s index 71ba5d713..fb0bb3171 100644 --- a/libsrc/cbm/read.s +++ b/libsrc/cbm/read.s @@ -135,7 +135,7 @@ eof: lda #0 devnotpresent: lda #ENODEV - .byte $2C ; Skip next opcode + jmp __directerrno ; Sets _errno, clears _oserror, returns -1 ; Error entry: The given file descriptor is not valid or not open diff --git a/libsrc/cbm/write.s b/libsrc/cbm/write.s index 04010f2e4..ebc44a0ac 100644 --- a/libsrc/cbm/write.s +++ b/libsrc/cbm/write.s @@ -106,7 +106,7 @@ devnotpresent2: pla devnotpresent: lda #ENODEV - .byte $2C ; Skip next opcode + jmp __directerrno ; Sets _errno, clears _oserror, returns -1 ; Error entry: The given file descriptor is not valid or not open From 1e7886b9c785b33107c4bedbe327bbf082eaa119 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 12:36:15 +0100 Subject: [PATCH 1402/2710] build samples for all targets --- .github/workflows/build-on-pull-request.yml | 71 ++++++++++++++++++++- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index e121aaca5..9d6166e02 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -32,7 +32,71 @@ jobs: run: make test QUIET=1 - name: Test that the samples can be built. shell: bash - run: make -j2 samples + run: | + make SYS=c64 -C samples all + make SYS=c64 -C samples clean + make SYS=apple2 -C samples + make SYS=apple2 -C samples clean + make SYS=apple2enh -C samples + make SYS=apple2enh -C samples clean + make SYS=atari -C samples + make SYS=atari -C samples clean + make SYS=atarixl -C samples + make SYS=atarixl -C samples clean + # make SYS=atari2600 -C samples + # make SYS=atari2600 -C samples clean + # make SYS=atari5200 -C samples + # make SYS=atari5200 -C samples clean + make SYS=atmos -C samples + make SYS=atmos -C samples clean + # make SYS=bbc -C samples + # make SYS=bbc -C samples clean + make SYS=c128 -C samples + make SYS=c128 -C samples clean + make SYS=c16 -C samples + make SYS=c16 -C samples clean + make SYS=c64 -C samples + make SYS=c64 -C samples clean + make SYS=cbm510 -C samples + make SYS=cbm510 -C samples clean + make SYS=cbm610 -C samples + make SYS=cbm610 -C samples clean + make SYS=creativision -C samples + make SYS=creativision -C samples clean + make SYS=cx16 -C samples + make SYS=cx16 -C samples clean + make SYS=gamate -C samples + make SYS=gamate -C samples clean + make SYS=geos-apple -C samples + make SYS=geos-apple -C samples clean + make SYS=geos-cbm -C samples + make SYS=geos-cbm -C samples clean + make SYS=lunix -C samples + make SYS=lunix -C samples clean + make SYS=lynx -C samples + make SYS=lynx -C samples clean + make SYS=nes -C samples + make SYS=nes -C samples clean + make SYS=osic1p -C samples + make SYS=osic1p -C samples clean + make SYS=pce -C samples + make SYS=pce -C samples clean + make SYS=pet -C samples + make SYS=pet -C samples clean + make SYS=plus4 -C samples + make SYS=plus4 -C samples clean + make SYS=sim6502 -C samples + make SYS=sim6502 -C samples clean + make SYS=sim65c02 -C samples + make SYS=sim65c02 -C samples clean + make SYS=supervision -C samples + make SYS=supervision -C samples clean + make SYS=sym1 -C samples + make SYS=sym1 -C samples clean + make SYS=telestrat -C samples + make SYS=telestrat -C samples clean + make SYS=vic20 -C samples + make SYS=vic20 -C samples clean - name: Test that the targettest programs can be built. shell: bash run: | @@ -128,7 +192,10 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -# TODO: fix tergettest Makefile for all currently commented out targets +# TODO: fix samples Makefile for all currently commented out targets +# TODO: build samples cbm subdir for all cbm targets + +# TODO: fix targettest Makefile for all currently commented out targets # TODO: build targettest cbm subdir for all cbm targets # TODO: build targettest atari subdir for all atari targets # TODO: build targettest apple2 subdir for all apple2 targets From f82208b009e536ea4e2ec45e16a85a8cee833ba6 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 12:49:02 +0100 Subject: [PATCH 1403/2710] fix for atari5200 --- samples/Makefile | 2 +- samples/tutorial/Makefile | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/samples/Makefile b/samples/Makefile index 1dc3aef8a..44276d879 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -188,7 +188,7 @@ EXELIST_atari = \ EXELIST_atarixl = $(EXELIST_atari) EXELIST_atari2600 = \ - atari2600hello + notavailable EXELIST_atari5200 = \ notavailable diff --git a/samples/tutorial/Makefile b/samples/tutorial/Makefile index af5062588..67dd84003 100644 --- a/samples/tutorial/Makefile +++ b/samples/tutorial/Makefile @@ -34,6 +34,9 @@ endif EXELIST_atari2600 = \ notavailable +EXELIST_atari5200 = \ + notavailable + EXELIST_bbc = \ notavailable From 7a0d630d1b2ca503ba0d39fcbd8dcd508a105bdd Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 12:49:33 +0100 Subject: [PATCH 1404/2710] actually use all targets for the samples dir --- .github/workflows/build-on-pull-request.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 9d6166e02..bb343a9ff 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -43,14 +43,14 @@ jobs: make SYS=atari -C samples clean make SYS=atarixl -C samples make SYS=atarixl -C samples clean - # make SYS=atari2600 -C samples - # make SYS=atari2600 -C samples clean - # make SYS=atari5200 -C samples - # make SYS=atari5200 -C samples clean + make SYS=atari2600 -C samples + make SYS=atari2600 -C samples clean + make SYS=atari5200 -C samples + make SYS=atari5200 -C samples clean make SYS=atmos -C samples make SYS=atmos -C samples clean - # make SYS=bbc -C samples - # make SYS=bbc -C samples clean + make SYS=bbc -C samples + make SYS=bbc -C samples clean make SYS=c128 -C samples make SYS=c128 -C samples clean make SYS=c16 -C samples @@ -192,7 +192,6 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -# TODO: fix samples Makefile for all currently commented out targets # TODO: build samples cbm subdir for all cbm targets # TODO: fix targettest Makefile for all currently commented out targets From 69346960b80a0fc67bc2af7978bc2cc6505bcc8a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 13:18:51 +0100 Subject: [PATCH 1405/2710] samples makefile already goes through the subdirs correctly --- .github/workflows/build-on-pull-request.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index bb343a9ff..41a3529b8 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -33,8 +33,6 @@ jobs: - name: Test that the samples can be built. shell: bash run: | - make SYS=c64 -C samples all - make SYS=c64 -C samples clean make SYS=apple2 -C samples make SYS=apple2 -C samples clean make SYS=apple2enh -C samples @@ -192,8 +190,6 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -# TODO: build samples cbm subdir for all cbm targets - # TODO: fix targettest Makefile for all currently commented out targets # TODO: build targettest cbm subdir for all cbm targets # TODO: build targettest atari subdir for all atari targets From d6349e0f9224225e29eeac112cce080c3735472c Mon Sep 17 00:00:00 2001 From: polluks <polluks@sdf.lonestar.org> Date: Sun, 30 Jan 2022 03:26:32 +0100 Subject: [PATCH 1406/2710] Save a few bytes --- libsrc/cbm/read.s | 2 +- libsrc/cbm/write.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/cbm/read.s b/libsrc/cbm/read.s index fb0bb3171..1c2c670e7 100644 --- a/libsrc/cbm/read.s +++ b/libsrc/cbm/read.s @@ -135,7 +135,7 @@ eof: lda #0 devnotpresent: lda #ENODEV - jmp __directerrno ; Sets _errno, clears _oserror, returns -1 + .byte $2C ; Skip next opcode via BIT <abs> ; Error entry: The given file descriptor is not valid or not open diff --git a/libsrc/cbm/write.s b/libsrc/cbm/write.s index ebc44a0ac..93bdda31d 100644 --- a/libsrc/cbm/write.s +++ b/libsrc/cbm/write.s @@ -106,7 +106,7 @@ devnotpresent2: pla devnotpresent: lda #ENODEV - jmp __directerrno ; Sets _errno, clears _oserror, returns -1 + .byte $2C ; Skip next opcode via BIT <abs> ; Error entry: The given file descriptor is not valid or not open From df662f4b6639f12494f0ddb66c5b0cb48e09b32b Mon Sep 17 00:00:00 2001 From: polluks <polluks@sdf.lonestar.org> Date: Mon, 31 Jan 2022 02:18:01 +0100 Subject: [PATCH 1407/2710] Added more purple (rain) --- include/apple2.h | 1 + include/atari.h | 2 ++ include/c128.h | 2 ++ include/lynx.h | 3 +++ include/nes.h | 20 ++++++++++++++++++++ include/pce.h | 1 + 6 files changed, 29 insertions(+) diff --git a/include/apple2.h b/include/apple2.h index 57d7086ce..41b45f58f 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -59,6 +59,7 @@ #define TGI_COLOR_BLACK 0x00 #define TGI_COLOR_GREEN 0x01 #define TGI_COLOR_VIOLET 0x02 +#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET #define TGI_COLOR_WHITE 0x03 #define TGI_COLOR_BLACK2 0x04 #define TGI_COLOR_ORANGE 0x05 diff --git a/include/atari.h b/include/atari.h index 86c7b9706..ab3ce81e6 100644 --- a/include/atari.h +++ b/include/atari.h @@ -393,6 +393,7 @@ extern void atrx15p2_tgi[]; #define COLOR_RED GTIA_COLOR_RED #define COLOR_CYAN GTIA_COLOR_CYAN #define COLOR_VIOLET GTIA_COLOR_VIOLET +#define COLOR_PURPLE COLOR_VIOLET #define COLOR_GREEN GTIA_COLOR_GREEN #define COLOR_BLUE GTIA_COLOR_BLUE #define COLOR_YELLOW GTIA_COLOR_YELLOW @@ -411,6 +412,7 @@ extern void atrx15p2_tgi[]; #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN #define TGI_COLOR_VIOLET COLOR_VIOLET +#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_YELLOW COLOR_YELLOW diff --git a/include/c128.h b/include/c128.h index fe1dd4317..623e5f99d 100644 --- a/include/c128.h +++ b/include/c128.h @@ -61,6 +61,7 @@ #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 #define COLOR_VIOLET 0x04 +#define COLOR_PURPLE COLOR_VIOLET #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 @@ -79,6 +80,7 @@ #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN #define TGI_COLOR_VIOLET COLOR_VIOLET +#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_YELLOW COLOR_YELLOW diff --git a/include/lynx.h b/include/lynx.h index 4b0390a13..cf8f32b59 100644 --- a/include/lynx.h +++ b/include/lynx.h @@ -65,6 +65,7 @@ #define COLOR_GREEN 0x0A #define COLOR_DARKBROWN 0x0B #define COLOR_VIOLET 0x0C +#define COLOR_PURPLE COLOR_VIOLET #define COLOR_BLUE 0x0D #define COLOR_LIGHTBLUE 0x0E #define COLOR_WHITE 0x0F @@ -77,12 +78,14 @@ #define TGI_COLOR_GREY COLOR_GREY #define TGI_COLOR_DARKGREY COLOR_DARKGREY #define TGI_COLOR_BROWN COLOR_BROWN +#define TGI_COLOR_ORANGE COLOR_BROWN #define TGI_COLOR_PEACH COLOR_PEACH #define TGI_COLOR_YELLOW COLOR_YELLOW #define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_DARKBROWN COLOR_DARKBROWN #define TGI_COLOR_VIOLET COLOR_VIOLET +#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE #define TGI_COLOR_WHITE COLOR_WHITE diff --git a/include/nes.h b/include/nes.h index 217a90779..0724418b2 100644 --- a/include/nes.h +++ b/include/nes.h @@ -70,6 +70,7 @@ #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 #define COLOR_VIOLET 0x04 +#define COLOR_PURPLE COLOR_VIOLET #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 @@ -82,6 +83,25 @@ #define COLOR_LIGHTBLUE 0x0E #define COLOR_GRAY3 0x0F +/* TGI color defines (default palette) */ +#define TGI_COLOR_BLACK COLOR_BLACK +#define TGI_COLOR_RED COLOR_RED +#define TGI_COLOR_PINK COLOR_LIGHTRED +#define TGI_COLOR_LIGHTGREY COLOR_GRAY1 +#define TGI_COLOR_GREY COLOR_GRAY2 +#define TGI_COLOR_DARKGREY COLOR_GRAY3 +#define TGI_COLOR_BROWN COLOR_BROWN +#define TGI_COLOR_PEACH COLOR_CYAN +#define TGI_COLOR_YELLOW COLOR_YELLOW +#define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN +#define TGI_COLOR_GREEN COLOR_GREEN +#define TGI_COLOR_DARKBROWN COLOR_ORANGE +#define TGI_COLOR_VIOLET COLOR_VIOLET +#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET +#define TGI_COLOR_BLUE COLOR_BLUE +#define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE +#define TGI_COLOR_WHITE COLOR_WHITE + /* Masks for joy_read */ #define JOY_UP_MASK 0x10 #define JOY_DOWN_MASK 0x20 diff --git a/include/pce.h b/include/pce.h index d7cf0a695..8ab5b363f 100644 --- a/include/pce.h +++ b/include/pce.h @@ -57,6 +57,7 @@ #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 #define COLOR_VIOLET 0x04 +#define COLOR_PURPLE COLOR_VIOLET #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 From 33bb1a22ff0a9134593a59f6898875a6e39ae1c8 Mon Sep 17 00:00:00 2001 From: polluks <polluks@sdf.lonestar.org> Date: Wed, 2 Feb 2022 00:58:50 +0100 Subject: [PATCH 1408/2710] Removed the colour purple This commit may break compatibility. --- asminc/cx16.inc | 4 +--- include/apple2.h | 3 +-- include/atari.h | 6 ++---- include/c128.h | 6 ++---- include/c64.h | 4 +--- include/cbm264.h | 6 ++---- include/cbm510.h | 3 +-- include/cx16.h | 5 +---- include/geos.h | 2 -- include/lynx.h | 6 ++---- include/nes.h | 6 ++---- include/pce.h | 3 +-- include/vic20.h | 4 ++-- libsrc/nes/color.s | 3 +-- libsrc/nes/ppu.s | 2 +- 15 files changed, 20 insertions(+), 43 deletions(-) diff --git a/asminc/cx16.inc b/asminc/cx16.inc index 4d9ce89db..4e5971593 100644 --- a/asminc/cx16.inc +++ b/asminc/cx16.inc @@ -10,8 +10,7 @@ WHITE RED CYAN - VIOLET - PURPLE = VIOLET + PURPLE GREEN BLUE YELLOW @@ -84,7 +83,6 @@ LIGHTGREEN LIGHTBLUE GRAY3 PURPLE -VIOLET = PURPLE CURS_LEFT YELLOW CYAN diff --git a/include/apple2.h b/include/apple2.h index 41b45f58f..2735e948b 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -58,8 +58,7 @@ /* TGI color defines */ #define TGI_COLOR_BLACK 0x00 #define TGI_COLOR_GREEN 0x01 -#define TGI_COLOR_VIOLET 0x02 -#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET +#define TGI_COLOR_PURPLE 0x02 #define TGI_COLOR_WHITE 0x03 #define TGI_COLOR_BLACK2 0x04 #define TGI_COLOR_ORANGE 0x05 diff --git a/include/atari.h b/include/atari.h index ab3ce81e6..781ee7a80 100644 --- a/include/atari.h +++ b/include/atari.h @@ -392,8 +392,7 @@ extern void atrx15p2_tgi[]; #define COLOR_WHITE GTIA_COLOR_WHITE #define COLOR_RED GTIA_COLOR_RED #define COLOR_CYAN GTIA_COLOR_CYAN -#define COLOR_VIOLET GTIA_COLOR_VIOLET -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE GTIA_COLOR_VIOLET #define COLOR_GREEN GTIA_COLOR_GREEN #define COLOR_BLUE GTIA_COLOR_BLUE #define COLOR_YELLOW GTIA_COLOR_YELLOW @@ -411,8 +410,7 @@ extern void atrx15p2_tgi[]; #define TGI_COLOR_WHITE COLOR_WHITE #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN -#define TGI_COLOR_VIOLET COLOR_VIOLET -#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET +#define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_YELLOW COLOR_YELLOW diff --git a/include/c128.h b/include/c128.h index 623e5f99d..ee1dce99e 100644 --- a/include/c128.h +++ b/include/c128.h @@ -60,8 +60,7 @@ #define COLOR_WHITE 0x01 #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 -#define COLOR_VIOLET 0x04 -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE 0x04 #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 @@ -79,8 +78,7 @@ #define TGI_COLOR_WHITE COLOR_WHITE #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN -#define TGI_COLOR_VIOLET COLOR_VIOLET -#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET +#define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_YELLOW COLOR_YELLOW diff --git a/include/c64.h b/include/c64.h index afe47ece6..f501a4e7f 100644 --- a/include/c64.h +++ b/include/c64.h @@ -66,8 +66,7 @@ #define COLOR_WHITE 0x01 #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 -#define COLOR_VIOLET 0x04 -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE 0x04 #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 @@ -85,7 +84,6 @@ #define TGI_COLOR_WHITE COLOR_WHITE #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN -#define TGI_COLOR_VIOLET COLOR_VIOLET #define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE diff --git a/include/cbm264.h b/include/cbm264.h index a51ee79c5..4951df518 100644 --- a/include/cbm264.h +++ b/include/cbm264.h @@ -79,8 +79,7 @@ #define BCOLOR_WHITE 0x01 #define BCOLOR_RED 0x02 #define BCOLOR_CYAN 0x03 -#define BCOLOR_VIOLET 0x04 -#define BCOLOR_PURPLE BCOLOR_VIOLET +#define BCOLOR_PURPLE 0x04 #define BCOLOR_GREEN 0x05 #define BCOLOR_BLUE 0x06 #define BCOLOR_YELLOW 0x07 @@ -98,8 +97,7 @@ #define COLOR_WHITE (BCOLOR_WHITE | CATTR_LUMA7) #define COLOR_RED (BCOLOR_RED | CATTR_LUMA4) #define COLOR_CYAN (BCOLOR_CYAN | CATTR_LUMA7) -#define COLOR_VIOLET (BCOLOR_VIOLET | CATTR_LUMA7) -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE (BCOLOR_VIOLET | CATTR_LUMA7) #define COLOR_GREEN (BCOLOR_GREEN | CATTR_LUMA7) #define COLOR_BLUE (BCOLOR_BLUE | CATTR_LUMA7) #define COLOR_YELLOW (BCOLOR_YELLOW | CATTR_LUMA7) diff --git a/include/cbm510.h b/include/cbm510.h index 3d6ccd209..20b334ed9 100644 --- a/include/cbm510.h +++ b/include/cbm510.h @@ -78,8 +78,7 @@ #define COLOR_WHITE 0x01 #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 -#define COLOR_VIOLET 0x04 -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE 0x04 #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 diff --git a/include/cx16.h b/include/cx16.h index 179021e84..4100da631 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -70,7 +70,6 @@ #define CH_LIGHTBLUE 0x9A #define CH_GRAY3 0x9B #define CH_PURPLE 0x9C -#define CH_VIOLET CH_PURPLE #define CH_YELLOW 0x9E #define CH_CYAN 0x9F #define CH_SHIFT_SPACE 0xA0 @@ -96,8 +95,7 @@ #define COLOR_WHITE 0x01 #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 -#define COLOR_VIOLET 0x04 -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE 0x04 #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 @@ -116,7 +114,6 @@ #define TGI_COLOR_WHITE COLOR_WHITE #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN -#define TGI_COLOR_VIOLET COLOR_VIOLET #define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE diff --git a/include/geos.h b/include/geos.h index 3f760b6ad..99b49777f 100644 --- a/include/geos.h +++ b/include/geos.h @@ -67,7 +67,6 @@ #define COLOR_WHITE WHITE #define COLOR_RED RED #define COLOR_CYAN CYAN -#define COLOR_VIOLET PURPLE #define COLOR_PURPLE PURPLE #define COLOR_GREEN GREEN #define COLOR_BLUE BLUE @@ -85,7 +84,6 @@ #define TGI_COLOR_WHITE COLOR_WHITE #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN -#define TGI_COLOR_VIOLET COLOR_VIOLET #define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE diff --git a/include/lynx.h b/include/lynx.h index cf8f32b59..6c7e13da9 100644 --- a/include/lynx.h +++ b/include/lynx.h @@ -64,8 +64,7 @@ #define COLOR_LIGHTGREEN 0x09 #define COLOR_GREEN 0x0A #define COLOR_DARKBROWN 0x0B -#define COLOR_VIOLET 0x0C -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE 0x0C #define COLOR_BLUE 0x0D #define COLOR_LIGHTBLUE 0x0E #define COLOR_WHITE 0x0F @@ -84,8 +83,7 @@ #define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_DARKBROWN COLOR_DARKBROWN -#define TGI_COLOR_VIOLET COLOR_VIOLET -#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET +#define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE #define TGI_COLOR_WHITE COLOR_WHITE diff --git a/include/nes.h b/include/nes.h index 0724418b2..9537dd698 100644 --- a/include/nes.h +++ b/include/nes.h @@ -69,8 +69,7 @@ #define COLOR_WHITE 0x01 #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 -#define COLOR_VIOLET 0x04 -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE 0x04 #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 @@ -96,8 +95,7 @@ #define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_DARKBROWN COLOR_ORANGE -#define TGI_COLOR_VIOLET COLOR_VIOLET -#define TGI_COLOR_PURPLE TGI_COLOR_VIOLET +#define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE #define TGI_COLOR_WHITE COLOR_WHITE diff --git a/include/pce.h b/include/pce.h index 8ab5b363f..826f85390 100644 --- a/include/pce.h +++ b/include/pce.h @@ -56,8 +56,7 @@ #define COLOR_WHITE 0x01 #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 -#define COLOR_VIOLET 0x04 -#define COLOR_PURPLE COLOR_VIOLET +#define COLOR_PURPLE 0x04 #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 diff --git a/include/vic20.h b/include/vic20.h index d60c7e270..55b81f13f 100644 --- a/include/vic20.h +++ b/include/vic20.h @@ -62,7 +62,7 @@ #define COLOR_WHITE 0x01 #define COLOR_RED 0x02 #define COLOR_CYAN 0x03 -#define COLOR_VIOLET 0x04 +#define COLOR_PURPLE 0x04 #define COLOR_GREEN 0x05 #define COLOR_BLUE 0x06 #define COLOR_YELLOW 0x07 @@ -81,7 +81,7 @@ #define TGI_COLOR_WHITE COLOR_WHITE #define TGI_COLOR_RED COLOR_RED #define TGI_COLOR_CYAN COLOR_CYAN -#define TGI_COLOR_VIOLET COLOR_VIOLET +#define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_GREEN COLOR_GREEN #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_YELLOW COLOR_YELLOW diff --git a/libsrc/nes/color.s b/libsrc/nes/color.s index bb91ff908..e3aef9a28 100644 --- a/libsrc/nes/color.s +++ b/libsrc/nes/color.s @@ -54,7 +54,7 @@ colors: .byte $0f ; 0 black .byte $3d ; 1 white .byte $04 ; 2 red .byte $3b ; 3 cyan - .byte $14 ; 4 violett + .byte $14 ; 4 violet .byte $1a ; 5 green .byte $01 ; 6 blue .byte $38 ; 7 yellow @@ -66,4 +66,3 @@ colors: .byte $0f ; 0 black .byte $2b ; d light green .byte $22 ; e light blue .byte $3d ; f light gray - diff --git a/libsrc/nes/ppu.s b/libsrc/nes/ppu.s index 07b6842f7..92e056fb4 100644 --- a/libsrc/nes/ppu.s +++ b/libsrc/nes/ppu.s @@ -137,7 +137,7 @@ paldata: .repeat 2 .byte $0f ; 0 black - .byte $14 ; 4 violett + .byte $14 ; 4 violet .byte $3b ; 3 cyan .byte $3d ; 1 white From 6eca9a6aac15b25e8d0d8bfa82e4b9bab5d90bfe Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 19:50:13 +0100 Subject: [PATCH 1409/2710] fix Makefiles for all targets, dive into subdirs like in samples --- targettest/Makefile | 424 ++++++++++++++++++++++++++++++-- targettest/accelerator/Makefile | 29 ++- targettest/apple2/Makefile | 20 +- targettest/atari/Makefile | 26 +- targettest/atari5200/Makefile | 18 +- targettest/cbm/Makefile | 22 +- targettest/gamate/Makefile | 18 +- targettest/pce/Makefile | 18 +- targettest/sym1/Makefile | 18 +- 9 files changed, 561 insertions(+), 32 deletions(-) diff --git a/targettest/Makefile b/targettest/Makefile index 8207fc560..be6842f0f 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -160,6 +160,10 @@ ifeq ($(SYS),vic20) LDFLAGS+=-Ln $@.lbl endif +ifeq ($(SYS),pce) + LDFLAGS+=-D__CARTSIZE__=0x8000 +endif + .o: ifeq ($(SYS),vic20) $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib @@ -167,11 +171,17 @@ else $(LD) $(LDFLAGS_$(@F)_$(SYS)) $(LDFLAGS) -o $@ -t $(SYS) -m $@.map $^ $(SYS).lib endif +# -------------------------------------------------------------------------- +# Lists of subdirectories + +DIRLIST = accelerator apple2 atari atari5200 cbm gamate pce sym1 + # -------------------------------------------------------------------------- # Lists of executables # omitted: seek EXELIST_c64 = \ + minimal \ arg-test \ clock \ clock-test \ @@ -204,8 +214,206 @@ EXELIST_c64 = \ tinyshell \ uname-test +# omitted: seek +EXELIST_c128 = \ + minimal \ + arg-test \ + clock \ + clock-test \ + conio \ + cpeek-test \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + em-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mouse-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + ser-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + + +# omitted: seek clock clock-test mouse-test ser-test +EXELIST_c16 = \ + minimal \ + arg-test \ + conio \ + cpeek-test \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + em-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + +# omitted: seek ser-test +EXELIST_cbm510 = \ + minimal \ + arg-test \ + clock \ + clock-test \ + conio \ + cpeek-test \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + em-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mouse-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + +# omitted: joy-test mouse-test seek +EXELIST_cbm610 = \ + minimal \ + arg-test \ + clock \ + clock-test \ + conio \ + cpeek-test \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + em-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + moddiv-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + ser-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + +# omitted: clock-test em-test mouse-test seek ser-test +EXELIST_pet = \ + minimal \ + arg-test \ + clock \ + conio \ + cpeek-test \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + +# omitted: clock-test em-test mouse-test seek +EXELIST_plus4 = \ + minimal \ + arg-test \ + clock \ + conio \ + cpeek-test \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + ser-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + # omitted: seek clock-test mouse-test ser-test EXELIST_vic20 = \ + minimal \ arg-test \ clock \ conio \ @@ -237,6 +445,7 @@ EXELIST_vic20 = \ # omitted: cpeek-test, clock EXELIST_apple2 = \ + minimal \ arg-test \ clock-test \ conio \ @@ -272,6 +481,7 @@ EXELIST_apple2enh = $(EXELIST_apple2) # omitted: cpeek-test EXELIST_atari = \ + minimal \ arg-test \ clock-test \ clock \ @@ -306,11 +516,185 @@ EXELIST_atari = \ EXELIST_atarixl = $(EXELIST_atari) -# none of the testcode can work on the 2600 -# EXELIST_atari2600 = +# omitted: clock-test clock cpeek-test deb dir-test em-test exec-test1 exec-test2 +# joy-test mouse-test rename-test seek ser-test stroserror-test tinyshell +EXELIST_telestrat = \ + minimal \ + arg-test \ + conio \ + cprintf \ + cursor \ + div-test \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + moddiv-test \ + mul-test \ + posixio-test \ + scanf-test \ + strdup-test \ + strnlen \ + strqtok-test \ + uname-test -# none of the testcode can work on supervision -# EXELIST_supervision = +# omitted: arg-test clock-test clock cpeek-test conio cprintf cursor deb dir-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test +# mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test +# stroserror-test tinyshell uname-test +EXELIST_sym1 = \ + minimal \ + div-test \ + moddiv-test \ + strnlen \ + strqtok-test + +# omitted: clock-test cpeek-test conio deb dir-test em-test exec-test1 exec-test2 +# fileio-test ft mouse-test posixio-test rename-test seek ser-test tinyshell +EXELIST_atmos = \ + minimal \ + arg-test \ + clock \ + cprintf \ + cursor \ + div-test \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mul-test \ + scanf-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + uname-test + +# omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test +# mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test +# strnlen stroserror-test strqtok-test tinyshell uname-test +EXELIST_creativision = \ + minimal \ + cursor + +# omitted: cpeek-test seek ser-test +EXELIST_cx16 = \ + minimal \ + arg-test \ + clock-test \ + clock \ + conio \ + cprintf \ + cursor \ + deb \ + dir-test \ + div-test \ + em-test \ + exec-test1 \ + exec-test2 \ + fileio-test \ + ft \ + getopt-test \ + heaptest \ + joy-test \ + moddiv-test \ + mouse-test \ + mul-test \ + posixio-test \ + rename-test \ + scanf-test \ + strdup-test \ + strnlen \ + stroserror-test \ + strqtok-test \ + tinyshell \ + uname-test + +# omitted: arg-test clock-test clock cpeek-test cprintf cursor deb dir-test div-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test +# mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test +# strnlen stroserror-test strqtok-test tinyshell uname-test +EXELIST_nes = \ + minimal \ + conio + +# omitted: arg-test clock-test clock cpeek-test cprintf cursor deb dir-test div-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test +# mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test +# strnlen stroserror-test strqtok-test tinyshell uname-test +EXELIST_pce = \ + minimal \ + conio + +# omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test +# mouse-test posixio-test rename-test scanf-test seek ser-test strdup-test strnlen +# stroserror-test strqtok-test tinyshell uname-test +EXELIST_osic1p = \ + minimal \ + cursor \ + mul-test + +# omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test +# mouse-test posixio-test rename-test scanf-test seek ser-test strdup-test strnlen +# stroserror-test strqtok-test tinyshell uname-test +EXELIST_geos-apple = \ + minimal \ + cursor \ + mul-test + +# omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test +# mouse-test posixio-test rename-test scanf-test seek ser-test strdup-test strnlen +# stroserror-test strqtok-test tinyshell uname-test + +EXELIST_geos-cbm = \ + minimal \ + cursor \ + mul-test + +# omitted: clock clock-test conio cpeek-test cprintf cursor deb dir-test em-test +# exec-test1 exec-test2 ft heaptest joy-test mouse-test mul-test rename-test seek +# ser-test strdup-test stroserror-test tinyshell uname-test +EXELIST_sim6502 = \ + minimal \ + arg-test \ + div-test \ + fileio-test \ + getopt-test \ + moddiv-test \ + posixio-test \ + scanf-test \ + strnlen \ + strqtok-test + +EXELIST_sim65c02 = $(EXELIST_sim6502) + +EXELIST_atari2600 = \ + minimal + +EXELIST_atari5200 = \ + minimal + +EXELIST_gamate = \ + minimal + +EXELIST_supervision = \ + minimal + +# none of the testcode can work on the bbc (no library support) +EXELIST_bbc = \ + notavailable + +# none of the testcode can work on lunix (no library support) +EXELIST_lunix = \ + notavailable + +# none of the testcode can work on the lynx (library support is broken!) +EXELIST_lynx = \ + notavailable # Unlisted targets will try to build everything. # That lets us learn what they cannot build, and what settings @@ -319,22 +703,27 @@ ifndef EXELIST_$(SYS) EXELIST_$(SYS) := ${patsubst %.c,%,$(wildcard *.c)} endif +define SUBDIR_recipe + +@$(MAKE) -C $(dir) --no-print-directory $@ + +endef # SUBDIR_recipe + # -------------------------------------------------------------------------- # Rules to make the binaries and the disk testcode: $(EXELIST_$(SYS)) + $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: generic targettest programs not available for" $(SYS) +endif disk: $(DISK_$(SYS)) -all: testcode - make -C accelerator - make -C apple2 - make -C atari - make -C atari5200 - make -C cbm SYS=$(SYS) - make -C gamate - make -C pce - make -C sym1 +all: # -------------------------------------------------------------------------- # some programs link against getsp.o @@ -435,11 +824,4 @@ mostlyclean: clean: mostlyclean @$(DEL) $(EXELIST_$(SYS)) $(DISK_$(SYS)) 2>$(NULLDEV) - make -C accelerator clean - make -C apple2 clean - make -C atari clean - make -C atari5200 clean - make -C cbm SYS=$(SYS) clean - make -C gamate clean - make -C pce clean - make -C sym1 clean + $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) diff --git a/targettest/accelerator/Makefile b/targettest/accelerator/Makefile index 90871f20c..a46ec43c0 100644 --- a/targettest/accelerator/Makefile +++ b/targettest/accelerator/Makefile @@ -26,9 +26,32 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: c64-scpu-test.prg c128-scpu-test.prg c64dtv-test.prg \ - c64-c128-test.prg c128-test.prg chameleon-test.prg \ - c65-test.prg turbomaster-test.prg +EXELIST_c64 = \ + c64-scpu-test.prg \ + c128-scpu-test.prg \ + c64dtv-test.prg \ + c64-c128-test.prg \ + chameleon-test.prg \ + c65-test.prg \ + turbomaster-test.prg + +EXELIST_c128 = \ + c128-test.prg + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: accelerator tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif c64-scpu-test.prg: c64-c128-scpu-test.c $(CL) -t c64 c64-c128-scpu-test.c -o c64-scpu-test.prg diff --git a/targettest/apple2/Makefile b/targettest/apple2/Makefile index 15a4075af..d71c5be3a 100644 --- a/targettest/apple2/Makefile +++ b/targettest/apple2/Makefile @@ -29,7 +29,25 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: hgrshow hgrtest dhgrshow +EXELIST_apple2 = \ + hgrshow \ + hgrtest \ + dhgrshow + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: apple2 tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif disk: hgr.dsk dhgr.dsk diff --git a/targettest/atari/Makefile b/targettest/atari/Makefile index 05388ddd7..609d2c758 100644 --- a/targettest/atari/Makefile +++ b/targettest/atari/Makefile @@ -27,8 +27,30 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: charmapping.xex defdev.xex displaylist.xex mem.xex multi.xex ostype.xex \ - scrcode.com sys.xex +EXELIST_atari = \ + charmapping.xex \ + defdev.xex \ + displaylist.xex \ + mem.xex \ + multi.xex \ + ostype.xex \ + scrcode.com \ + sys.xex + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: atari tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif charmapping.xex: charmapping.c $(CL) -t atari -o charmapping.xex charmapping.c diff --git a/targettest/atari5200/Makefile b/targettest/atari5200/Makefile index 532bb815e..ab0c99f1c 100644 --- a/targettest/atari5200/Makefile +++ b/targettest/atari5200/Makefile @@ -27,7 +27,23 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: hello +EXELIST_atari5200 = \ + hello + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: atari 5200 tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif hello: hello.c $(CL) -t atari5200 -o hello hello.c diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index 3a4eff86f..47ae5171d 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -30,7 +30,27 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: petscii.prg cbmdir-test.prg +EXELIST_c64 = \ + petscii.prg \ + cbmdir-test.prg + +EXELIST_vic20 = \ + cbmdir-test.prg + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: cbm tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif ifeq ($(SYS),c64) petscii.prg: petscii.c diff --git a/targettest/gamate/Makefile b/targettest/gamate/Makefile index 69ac30dc5..74a3d8c50 100644 --- a/targettest/gamate/Makefile +++ b/targettest/gamate/Makefile @@ -27,7 +27,23 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: audiotest.bin lcdtest.bin ctest.bin +EXELIST_gamate = \ + audiotest.bin lcdtest.bin ctest.bin + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: gamate tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif audiotest.bin: audiotest.s $(CL) -l audiotest.lst -t gamate -o audiotest.bin audiotest.s diff --git a/targettest/pce/Makefile b/targettest/pce/Makefile index 695fed0a5..598c38575 100644 --- a/targettest/pce/Makefile +++ b/targettest/pce/Makefile @@ -42,7 +42,23 @@ else COUNT := 1 endif -all: conio.bin +EXELIST_pce = \ + conio.bin + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: pce tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif %.bin: %.c $(CL) -t pce $< -Wl -D__CARTSIZE__=${CARTSIZE} -m $*.map -o $@ diff --git a/targettest/sym1/Makefile b/targettest/sym1/Makefile index 8e469a599..c9f9eb099 100644 --- a/targettest/sym1/Makefile +++ b/targettest/sym1/Makefile @@ -26,7 +26,23 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -all: symHello.bin symTiny.bin symDisplay.bin symIO.bin symNotepad.bin +EXELIST_sym1 = \ + symHello.bin symTiny.bin symDisplay.bin symIO.bin symNotepad.bin + +ifneq ($(EXELIST_$(SYS)),) +testcode: $(EXELIST_$(SYS)) +else +testcode: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: sym1 tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'testcode' message + @echo > $(NULLDEV) +endif symHello.bin: symHello.c $(CL) -t sym1 -O -o symHello.bin symHello.c From afc80949e39ea076719ae9affe9f4050a0492fbc Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 19:50:52 +0100 Subject: [PATCH 1410/2710] build targettest progrs for all targets --- .github/workflows/build-on-pull-request.yml | 107 +++++++++----------- 1 file changed, 50 insertions(+), 57 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 41a3529b8..7f09ec6af 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -98,8 +98,6 @@ jobs: - name: Test that the targettest programs can be built. shell: bash run: | - make SYS=c64 -C targettest all - make SYS=c64 -C targettest clean make SYS=apple2 -C targettest make SYS=apple2 -C targettest clean make SYS=apple2enh -C targettest @@ -108,58 +106,58 @@ jobs: make SYS=atari -C targettest clean make SYS=atarixl -C targettest make SYS=atarixl -C targettest clean - # make SYS=atari2600 -C targettest - # make SYS=atari2600 -C targettest clean - # make SYS=atari5200 -C targettest - # make SYS=atari5200 -C targettest clean - # make SYS=atmos -C targettest - # make SYS=atmos -C targettest clean - # make SYS=bbc -C targettest - # make SYS=bbc -C targettest clean - # make SYS=c128 -C targettest - # make SYS=c128 -C targettest clean - # make SYS=c16 -C targettest - # make SYS=c16 -C targettest clean + make SYS=atari2600 -C targettest + make SYS=atari2600 -C targettest clean + make SYS=atari5200 -C targettest + make SYS=atari5200 -C targettest clean + make SYS=atmos -C targettest + make SYS=atmos -C targettest clean + make SYS=bbc -C targettest + make SYS=bbc -C targettest clean + make SYS=c128 -C targettest + make SYS=c128 -C targettest clean + make SYS=c16 -C targettest + make SYS=c16 -C targettest clean make SYS=c64 -C targettest make SYS=c64 -C targettest clean - # make SYS=cbm510 -C targettest - # make SYS=cbm510 -C targettest clean - # make SYS=cbm610 -C targettest - # make SYS=cbm610 -C targettest clean - # make SYS=creativision -C targettest - # make SYS=creativision -C targettest clean - # make SYS=cx16 -C targettest - # make SYS=cx16 -C targettest clean - # make SYS=gamate -C targettest - # make SYS=gamate -C targettest clean - # make SYS=geos-apple -C targettest - # make SYS=geos-apple -C targettest clean - # make SYS=geos-cbm -C targettest - # make SYS=geos-cbm -C targettest clean - # make SYS=lunix -C targettest - # make SYS=lunix -C targettest clean - # make SYS=lynx -C targettest - # make SYS=lynx -C targettest clean - # make SYS=nes -C targettest - # make SYS=nes -C targettest clean - # make SYS=osic1p -C targettest - # make SYS=osic1p -C targettest clean - # make SYS=pce -C targettest - # make SYS=pce -C targettest clean - # make SYS=pet -C targettest - # make SYS=pet -C targettest clean - # make SYS=plus4 -C targettest - # make SYS=plus4 -C targettest clean - # make SYS=sim6502 -C targettest - # make SYS=sim6502 -C targettest clean - # make SYS=sim65c02 -C targettest - # make SYS=sim65c02 -C targettest clean - # make SYS=supervision -C targettest - # make SYS=supervision -C targettest clean - # make SYS=sym1 -C targettest - # make SYS=sym1 -C targettest clean - # make SYS=telestrat -C targettest - # make SYS=telestrat -C targettest clean + make SYS=cbm510 -C targettest + make SYS=cbm510 -C targettest clean + make SYS=cbm610 -C targettest + make SYS=cbm610 -C targettest clean + make SYS=creativision -C targettest + make SYS=creativision -C targettest clean + make SYS=cx16 -C targettest + make SYS=cx16 -C targettest clean + make SYS=gamate -C targettest + make SYS=gamate -C targettest clean + make SYS=geos-apple -C targettest + make SYS=geos-apple -C targettest clean + make SYS=geos-cbm -C targettest + make SYS=geos-cbm -C targettest clean + make SYS=lunix -C targettest + make SYS=lunix -C targettest clean + make SYS=lynx -C targettest + make SYS=lynx -C targettest clean + make SYS=nes -C targettest + make SYS=nes -C targettest clean + make SYS=osic1p -C targettest + make SYS=osic1p -C targettest clean + make SYS=pce -C targettest + make SYS=pce -C targettest clean + make SYS=pet -C targettest + make SYS=pet -C targettest clean + make SYS=plus4 -C targettest + make SYS=plus4 -C targettest clean + make SYS=sim6502 -C targettest + make SYS=sim6502 -C targettest clean + make SYS=sim65c02 -C targettest + make SYS=sim65c02 -C targettest clean + make SYS=supervision -C targettest + make SYS=supervision -C targettest clean + make SYS=sym1 -C targettest + make SYS=sym1 -C targettest clean + make SYS=telestrat -C targettest + make SYS=telestrat -C targettest clean make SYS=vic20 -C targettest make SYS=vic20 -C targettest clean - name: Build the document files. @@ -189,8 +187,3 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release - -# TODO: fix targettest Makefile for all currently commented out targets -# TODO: build targettest cbm subdir for all cbm targets -# TODO: build targettest atari subdir for all atari targets -# TODO: build targettest apple2 subdir for all apple2 targets From f1e70517ec37431035c149719604631f24f327c8 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 30 Jan 2022 23:26:07 +0100 Subject: [PATCH 1411/2710] the forgotten minimal testprog --- targettest/minimal.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 targettest/minimal.c diff --git a/targettest/minimal.c b/targettest/minimal.c new file mode 100644 index 000000000..65ec37a97 --- /dev/null +++ b/targettest/minimal.c @@ -0,0 +1,13 @@ + +/* this is a minimal / empty c program, any supported target that has some + * sort of C support should be able to link this. Failure indicates a problem + * with the crt0 or the linker config of the respective target */ + +char bss_variable; +char data_variable = 42; +const char rodata_variable = 23; + +void main(void) +{ + /* nothing here */ +} From 5cad3ce55a1c4c8a86fd3f11453e20510a99f4a7 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 30 Jan 2022 19:59:32 -0500 Subject: [PATCH 1412/2710] Fixed heaptest.c compiler warnings in a way that's better than PR #1621. This fix adds "unsigned" to one line instead of removing it from several lines. --- targettest/heaptest.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/targettest/heaptest.c b/targettest/heaptest.c index e3a21eaa6..f33808261 100644 --- a/targettest/heaptest.c +++ b/targettest/heaptest.c @@ -6,18 +6,18 @@ -static char* V[256]; +static unsigned char* V[256]; -static char* Alloc (void) +static unsigned char* Alloc (void) /* Allocate a random sized chunk of memory */ { /* Determine the size */ unsigned char Size = (((unsigned char)rand()) & 0x7F) + 1; /* Allocate memory */ - char* P = malloc (Size); + unsigned char* P = malloc (Size); /* Set the string to a defined value. We use the size, since this will ** also allow us to retrieve it later. @@ -33,7 +33,7 @@ static char* Alloc (void) -static void Free (char* P) +static void Free (unsigned char* P) /* Check a memory block and free it */ { unsigned char I; @@ -234,6 +234,3 @@ int main (void) /* Done */ return EXIT_SUCCESS; } - - - From 3885dd8504be41716750851c8347087000dbf151 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 30 Jan 2022 21:44:39 -0500 Subject: [PATCH 1413/2710] Removed an obsolete command-line option from the cc65 compiler. --- src/cc65/main.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/cc65/main.c b/src/cc65/main.c index f95d89bd9..0ed5af986 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -955,10 +955,6 @@ int main (int argc, char* argv[]) OptTarget (Arg, GetArg (&I, 2)); break; - case 'u': - OptCreateDep (Arg, 0); - break; - case 'v': OptVerbose (Arg, 0); break; From 103d3ccfcd158cdff48944f2356083873c5eb9c3 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 31 Jan 2022 07:10:03 -0500 Subject: [PATCH 1414/2710] Fixed the cart directory build code to handle even simple programs. Carts can be built containing programs that don't link some segments. --- libsrc/lynx/defdir.s | 5 ++--- targettest/Makefile | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/libsrc/lynx/defdir.s b/libsrc/lynx/defdir.s index c0fe19f4d..d15a99d5a 100644 --- a/libsrc/lynx/defdir.s +++ b/libsrc/lynx/defdir.s @@ -6,8 +6,7 @@ .include "lynx.inc" .import __STARTOFDIRECTORY__ .import __MAIN_START__ - .import __CODE_SIZE__, __DATA_SIZE__, __RODATA_SIZE__ - .import __STARTUP_SIZE__, __ONCE_SIZE__, __LOWCODE_SIZE__ + .import __STARTUP_LOAD__, __BSS_LOAD__ .import __BANK0BLOCKSIZE__ .export __DEFDIR__: absolute = 1 @@ -21,7 +20,7 @@ off0 = __STARTOFDIRECTORY__ + (__DIRECTORY_END__ - __DIRECTORY_START__) blocka = off0 / __BANK0BLOCKSIZE__ ; Entry 0 - first executable block0 = off0 / __BANK0BLOCKSIZE__ -len0 = __STARTUP_SIZE__ + __ONCE_SIZE__ + __CODE_SIZE__ + __DATA_SIZE__ + __RODATA_SIZE__ + __LOWCODE_SIZE__ +len0 = __BSS_LOAD__ - __STARTUP_LOAD__ .byte <block0 .word off0 & (__BANK0BLOCKSIZE__ - 1) .byte $88 diff --git a/targettest/Makefile b/targettest/Makefile index be6842f0f..6c1de1101 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -692,9 +692,8 @@ EXELIST_bbc = \ EXELIST_lunix = \ notavailable -# none of the testcode can work on the lynx (library support is broken!) EXELIST_lynx = \ - notavailable + minimal # Unlisted targets will try to build everything. # That lets us learn what they cannot build, and what settings From 27f975666c8c14e5658ecc7e6967ccdf523bde8d Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Mon, 31 Jan 2022 19:32:44 +0100 Subject: [PATCH 1415/2710] Disable double hires on exit. A program being run afterwards might not even know about the existence of double hires. So it's our task to turn double hires off on exit. --- targettest/apple2/dhgrshow.c | 1 + 1 file changed, 1 insertion(+) diff --git a/targettest/apple2/dhgrshow.c b/targettest/apple2/dhgrshow.c index f0b37e461..8bc8bcebd 100644 --- a/targettest/apple2/dhgrshow.c +++ b/targettest/apple2/dhgrshow.c @@ -40,6 +40,7 @@ void main (void) } closedir (dir); + POKE (0xC05F, 0); tgi_uninstall (); videomode (old); } From ad95ba7854780939b3cdbcccf270084a7c167719 Mon Sep 17 00:00:00 2001 From: polluks <polluks@sdf.lonestar.org> Date: Wed, 2 Feb 2022 23:02:01 +0100 Subject: [PATCH 1416/2710] Added tail call optimization --- libsrc/sym1/beep.s | 3 +-- libsrc/sym1/crt0.s | 4 ++-- libsrc/sym1/display.s | 3 +-- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/libsrc/sym1/beep.s b/libsrc/sym1/beep.s index 40a3d42c6..edb5f23e4 100644 --- a/libsrc/sym1/beep.s +++ b/libsrc/sym1/beep.s @@ -12,7 +12,6 @@ .proc _beep: near - jsr BEEP ; Beep - rts + jmp BEEP ; Beep .endproc diff --git a/libsrc/sym1/crt0.s b/libsrc/sym1/crt0.s index 5d398b311..5d4e0449b 100644 --- a/libsrc/sym1/crt0.s +++ b/libsrc/sym1/crt0.s @@ -53,5 +53,5 @@ _exit: jsr donelib ; Run destructors lda TECHO ora #$80 ; Re-enable console echo sta TECHO - jsr NACCES ; Lock System RAM - rts ; Re-enter Sym-1 monitor + jmp NACCES ; Lock System RAM + ; Re-enter Sym-1 monitor diff --git a/libsrc/sym1/display.s b/libsrc/sym1/display.s index f3b2923d6..160b98806 100644 --- a/libsrc/sym1/display.s +++ b/libsrc/sym1/display.s @@ -12,7 +12,6 @@ .proc _fdisp: near - jsr SCAND ; Flash Display - rts + jmp SCAND ; Flash Display .endproc From 2ed9df708f4b789d339edff459aaab9184b18f54 Mon Sep 17 00:00:00 2001 From: polluks <polluks@sdf.lonestar.org> Date: Thu, 3 Feb 2022 01:01:10 +0100 Subject: [PATCH 1417/2710] Fixed many typos --- doc/atari.sgml | 2 +- doc/ca65.sgml | 2 +- doc/cc65.sgml | 2 +- doc/funcref.sgml | 20 ++++++++++---------- doc/smc.sgml | 2 +- doc/telestrat.sgml | 4 ++-- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/doc/atari.sgml b/doc/atari.sgml index ff41d0bb4..170ffd5fb 100644 --- a/doc/atari.sgml +++ b/doc/atari.sgml @@ -117,7 +117,7 @@ Special locations: The startup code rearranges the memory as follows: <enum> -<item>Sceen memory and display list are moved below the program start address. +<item>Screen memory and display list are moved below the program start address. <item>The ROM is disabled, making the memory in the areas [$C000-$CFFF] and [$D800-$FFF9] available. <item>Character generator data is copied from ROM to the CHARGEN location specified in the diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 0638ab08c..309fbf28d 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -3724,7 +3724,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE" <tt/.PUSHCHARMAP/ allows together with <tt><ref id=".POPCHARMAP" name=".POPCHARMAP"></tt> to switch to another character mapping and to restore the old - characther mapping later, without knowledge of the current mapping. + character mapping later, without knowledge of the current mapping. The assembler will print an error message if the character mapping stack is already full, when this command is issued. diff --git a/doc/cc65.sgml b/doc/cc65.sgml index b20e05cc6..df58a0a95 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1673,7 +1673,7 @@ This is the original compiler copyright: Anyone may copy or redistribute these programs, provided that: - 1: You don't charge anything for the copy. It is permissable to + 1: You don't charge anything for the copy. It is permissible to charge a nominal fee for media, etc. 2: All source code and documentation for the programs is made diff --git a/doc/funcref.sgml b/doc/funcref.sgml index e6cb42a0f..4dff14dd3 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -3513,7 +3513,7 @@ extended memory that should be supported. There is no autodetect capability. <tag/Declaration/<tt/void* __fastcall__ em_map (unsigned page);/ <tag/Description/The function maps one page of extended memory into linear memory and returns a pointer to the page frame. Depending on the hardware -and driver, the data is either mapped into the address space or transfered +and driver, the data is either mapped into the address space or transferred into a buffer. If you don't need the actual contents of the page (for example because you're going to overwrite it completely), it is better to call <tt/<ref id="em_use" name="em_use">/ instead. <tt/em_use/ will not transfer the @@ -3728,7 +3728,7 @@ switching the CPU into double clock mode. <tag/Function/Return the end-of-file indicator of a stream. <tag/Header/<tt/<ref id="stdio.h" name="stdio.h">/ <tag/Declaration/<tt/int __fastcall__ feof (FILE* f);/ -<tag/Description/<tt/feof/ tests the end-of-file indicator ofthe stream +<tag/Description/<tt/feof/ tests the end-of-file indicator of the stream <tt/f/, and returns a non zero value if it is set. <tag/Notes/<itemize> <item>The indicator is set only after a read past the end of a file is @@ -4172,7 +4172,7 @@ const char* optstring);/ is a string that contains command line option characters. If a character in <tt/optstring/ is followed by a colon, the option requires an argument. An option on the command line is recognized if it is one of the option characters -preceeded by a '-'. +preceded by a '-'. <tt/getopt/ must be called repeatedly. It will return each option character found on the command line and <tt/EOF/ (-1) if there is no other option. An option argument is placed in <tt/optarg/, the index of the next element on the @@ -5020,7 +5020,7 @@ always be the same. <tag/Header/<tt/<ref id="setjmp.h" name="setjmp.h">/ <tag/Declaration/<tt/void __fastcall__ longjmp (jmp_buf buf, int retval);/ <tag/Description/The <tt/longjmp/ function restores a program context from the -data in <tt/buf/, which must have been set by a preceeding call to +data in <tt/buf/, which must have been set by a preceding call to <tt/<ref id="setjmp" name="setjmp">/. Program execution continues as if the call to <tt/<ref id="setjmp" name="setjmp">/ has just returned the value <tt/retval/. @@ -5664,7 +5664,7 @@ cc65 allows to pass this argument, it is ignored. <tag/Function/Open a directory. <tag/Header/<tt/<ref id="dirent.h" name="dirent.h">/ <tag/Declaration/<tt/DIR* __fastcall__ opendir (const char* name);/ -<tag/Description/<tt/opendir/ opens a directory and returns the direcory +<tag/Description/<tt/opendir/ opens a directory and returns the directory descriptor associated with it. On error, NULL is returned and an error code is stored in <tt/errno/. <tag/Notes/<itemize> @@ -6863,7 +6863,7 @@ be used in presence of a prototype. <quote> <descrip> -<tag/Function/Concatentate two strings. +<tag/Function/Concatenate two strings. <tag/Header/<tt/<ref id="string.h" name="string.h">/ <tag/Declaration/<tt/char* __fastcall__ strcat (char* s1, const char* s2);/ <tag/Description/The <tt/strcat/ function appends a copy of the string @@ -7189,7 +7189,7 @@ be used in presence of a prototype. <quote> <descrip> -<tag/Function/Concatentate two strings. +<tag/Function/Concatenate two strings. <tag/Header/<tt/<ref id="string.h" name="string.h">/ <tag/Declaration/<tt/char* __fastcall__ strncat (char* s1, const char* s2, size_t n);/ <tag/Description/The <tt/strncat/ function appends not more than n characters @@ -7314,7 +7314,7 @@ be used in presence of a prototype. <tag/Header/<tt/<ref id="string.h" name="string.h">/ <tag/Declaration/<tt/char* __fastcall__ strpbrk (const char* str, const char* set);/ <tag/Description/<tt/strpbrk()/ searches within <tt/str/ for the first -occurance of any character from <tt/set/. It returns a pointer to that +occurrence of any character from <tt/set/. It returns a pointer to that character if found; otherwise, it returns <tt/NULL/. <tag/Notes/<itemize> <item>The function is available only as a fastcall function; @@ -7418,7 +7418,7 @@ be used in presence of a prototype. <tag/Function/Find a substring. <tag/Header/<tt/<ref id="string.h" name="string.h">/ <tag/Declaration/<tt/char* __fastcall__ strstr (const char* str, const char* substr);/ -<tag/Description/<tt/strstr/ searches for the first occurance of the string +<tag/Description/<tt/strstr/ searches for the first occurrence of the string <tt/substr/ within <tt/str/. If found, it returns a pointer to the copy, otherwise it returns <tt/NULL/. <tag/Notes/<itemize> @@ -7485,7 +7485,7 @@ the behaviour is undefined. <item>If <tt/n/ is zero, <tt/s1/ may be a NULL pointer. <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. -<item>Since cc65 doesn't support different charcter sets, <tt/strxfrm/ will +<item>Since cc65 doesn't support different character sets, <tt/strxfrm/ will just copy s2 to s1 using <tt><ref id="strncpy" name="strncpy"></tt>. </itemize> <tag/Availability/ISO 9899 diff --git a/doc/smc.sgml b/doc/smc.sgml index 88cd6dc14..71de20208 100644 --- a/doc/smc.sgml +++ b/doc/smc.sgml @@ -257,7 +257,7 @@ SMC LoadDefault, { LDX #25 } <label id="Load value"> <tag><tt>SMC_LoadValue label (, register)</tt></tag> - Retreives the value of a SMC line. + Retrieves the value of a SMC line. Example: <tscreen><verb> diff --git a/doc/telestrat.sgml b/doc/telestrat.sgml index eac341880..385bd69f9 100644 --- a/doc/telestrat.sgml +++ b/doc/telestrat.sgml @@ -79,7 +79,7 @@ in Telemon, there is no way to load a binary easily. Stratsed (the Telestrat operating system) handles files management. Stratsed is loaded to memory from floppy disk. Stratsed vector are declared in asminc/telestrat.inc. -But, reverse engineering is required to find how theses vectors works. Please, note that +But, reverse engineering is required to find how these vectors works. Please, note that Stratsed is located in overlay memory (bank 0) There is no tool to insert a binary in a Stratsed floppy disk. @@ -194,7 +194,7 @@ if you get input from keyboard by conio cgetc function, you will get direction f Anyway, if you don't want to use ROM, you can use joysticks standard drivers in your code. -The standard driver manages two joysticks. Only one button is managed for theses joysticks. +The standard driver manages two joysticks. Only one button is managed for these joysticks. Telestrat can handle one button for the left port, and three buttons for the right port (but this port was designed for a mouse). From bdd7466afdad3842dced1ed76d8bc0b0e50a2e6d Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 3 Feb 2022 00:18:02 -0500 Subject: [PATCH 1418/2710] Added telestrat to <time.h>. That library has clock(). --- include/time.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/time.h b/include/time.h index 92cbeee37..ca7ee385f 100644 --- a/include/time.h +++ b/include/time.h @@ -102,6 +102,8 @@ extern struct _timezone { # define CLOCKS_PER_SEC 135 /* FIXME */ #elif defined(__GEOS__) # define CLOCKS_PER_SEC 1 +#elif defined(__TELESTRAT__) +# define CLOCKS_PER_SEC 10 #elif defined(__ATARI__) || defined (__LYNX__) /* Read the clock rate at runtime */ clock_t _clocks_per_sec (void); From 8bf9766e9e9570588b9a57176c8eece2641daca0 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 3 Feb 2022 00:29:48 -0500 Subject: [PATCH 1419/2710] Added to the telestrat library the name of the standard dynamic TGI driver. --- libsrc/telestrat/tgi_stddrv.s | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 libsrc/telestrat/tgi_stddrv.s diff --git a/libsrc/telestrat/tgi_stddrv.s b/libsrc/telestrat/tgi_stddrv.s new file mode 100644 index 000000000..959fa457e --- /dev/null +++ b/libsrc/telestrat/tgi_stddrv.s @@ -0,0 +1,13 @@ +; +; Name of the standard TGI driver +; +; 2022-02-02, Greg King +; +; const char tgi_stddrv[]; +; + + .export _tgi_stddrv + +.rodata + +_tgi_stddrv: .asciiz "telestrat-240-200-2.tgi" From e0b23258dc1cc315f29e49f3375af53b848c6def Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 3 Feb 2022 03:05:50 -0500 Subject: [PATCH 1420/2710] Added the names of samples and targettest programs that the telestrat library can build now. --- samples/Makefile | 5 ++++- targettest/Makefile | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index 44276d879..2cfd8d89b 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -308,7 +308,10 @@ EXELIST_sym1 = \ EXELIST_telestrat = \ ascii \ gunzip65 \ - hello + hello \ + mandelbrot \ + sieve \ +# tgidemo EXELIST_vic20 = \ ascii \ diff --git a/targettest/Makefile b/targettest/Makefile index 6c1de1101..806eda2fd 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -516,11 +516,12 @@ EXELIST_atari = \ EXELIST_atarixl = $(EXELIST_atari) -# omitted: clock-test clock cpeek-test deb dir-test em-test exec-test1 exec-test2 +# omitted: clock-test cpeek-test deb dir-test em-test exec-test1 exec-test2 # joy-test mouse-test rename-test seek ser-test stroserror-test tinyshell EXELIST_telestrat = \ minimal \ arg-test \ + clock \ conio \ cprintf \ cursor \ From bcc03acfc8ffb8d77f6906f7374fcdd62a6ed1d7 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:28:11 +0100 Subject: [PATCH 1421/2710] also compile the programs in the util directory by default, not only do we want to test they can be compiled, but also samples may use/require them. we might want to install them too, perhaps --- Makefile | 6 +++++- util/Makefile | 20 ++++++++++++++++++++ util/atari/Makefile | 12 ++++++++++++ util/gamate/Makefile | 12 ++++++++++++ util/zlib/Makefile | 17 +++++++++++++++++ 5 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 util/Makefile create mode 100644 util/atari/Makefile create mode 100644 util/gamate/Makefile create mode 100644 util/zlib/Makefile diff --git a/Makefile b/Makefile index 3331f6fb9..6552c60ec 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples test +.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples test util .SUFFIXES: @@ -7,6 +7,7 @@ all mostlyclean clean install zip: @$(MAKE) -C libsrc --no-print-directory $@ @$(MAKE) -C doc --no-print-directory $@ @$(MAKE) -C samples --no-print-directory $@ + @$(MAKE) -C util --no-print-directory $@ avail unavail bin: @$(MAKE) -C src --no-print-directory $@ @@ -23,6 +24,9 @@ samples: test: @$(MAKE) -C test --no-print-directory $@ +util: + @$(MAKE) -C util --no-print-directory $@ + %65: @$(MAKE) -C src --no-print-directory $@ diff --git a/util/Makefile b/util/Makefile new file mode 100644 index 000000000..52cd10435 --- /dev/null +++ b/util/Makefile @@ -0,0 +1,20 @@ + +.PHONY: atari gamate zlib + +all: atari gamate zlib + +atari: + @$(MAKE) -C atari --no-print-directory $@ +gamate: + @$(MAKE) -C gamate --no-print-directory $@ +zlib: + @$(MAKE) -C zlib --no-print-directory $@ + +mostlyclean clean: + @$(MAKE) -C atari --no-print-directory $@ + @$(MAKE) -C gamate --no-print-directory $@ + @$(MAKE) -C zlib --no-print-directory $@ + +install zip: + + diff --git a/util/atari/Makefile b/util/atari/Makefile new file mode 100644 index 000000000..28efeafa1 --- /dev/null +++ b/util/atari/Makefile @@ -0,0 +1,12 @@ + +.PHONY: mostlyclean clean + +atari: ataricvt + +ataricvt: ataricvt.c + $(CC) $(CFLAGS) -o ataricvt ataricvt.c + +mostlyclean clean: + $(RM) ataricvt + +install zip: diff --git a/util/gamate/Makefile b/util/gamate/Makefile new file mode 100644 index 000000000..a6281de21 --- /dev/null +++ b/util/gamate/Makefile @@ -0,0 +1,12 @@ + +.PHONY: mostlyclean clean + +gamate: gamate-fixcart + +gamate-fixcart: gamate-fixcart.c + $(CC) $(CFLAGS) -o gamate-fixcart gamate-fixcart.c + +mostlyclean clean: + $(RM) gamate-fixcart + +install zip: diff --git a/util/zlib/Makefile b/util/zlib/Makefile new file mode 100644 index 000000000..75c67fb26 --- /dev/null +++ b/util/zlib/Makefile @@ -0,0 +1,17 @@ + +.PHONY: mostlyclean clean + +zlib: warning +#zlib: deflater + +warning: + @echo "deflater needs zlib installed, use 'make deflater' to build" + +deflater: deflater.c + $(CC) $(CFLAGS) -o deflater deflater.c -lz + +mostlyclean clean: + $(RM) deflater + +install zip: + From 0046d8ec5c9b8db760b849192b49125d6cff504f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:44:32 +0100 Subject: [PATCH 1422/2710] build util dir when testing --- .github/workflows/build-on-pull-request.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 7f09ec6af..307cbd048 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -23,7 +23,9 @@ jobs: - name: Build the tools. shell: bash - run: make -j2 bin USER_CFLAGS=-Werror + run: | + make -j2 bin USER_CFLAGS=-Werror + make -j2 util - name: Build the platform libraries. shell: bash run: make -j2 lib QUIET=1 From 0300d4fcd17a6be94bf7dbb4f4a69e966f1280d8 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:44:46 +0100 Subject: [PATCH 1423/2710] utils before samples --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 6552c60ec..540c214fc 100644 --- a/Makefile +++ b/Makefile @@ -6,8 +6,8 @@ all mostlyclean clean install zip: @$(MAKE) -C src --no-print-directory $@ @$(MAKE) -C libsrc --no-print-directory $@ @$(MAKE) -C doc --no-print-directory $@ - @$(MAKE) -C samples --no-print-directory $@ @$(MAKE) -C util --no-print-directory $@ + @$(MAKE) -C samples --no-print-directory $@ avail unavail bin: @$(MAKE) -C src --no-print-directory $@ From f800e71d7af2f0a8fd749536bdbf72906e200b0d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:44:54 +0100 Subject: [PATCH 1424/2710] cleanup --- targettest/Makefile | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/targettest/Makefile b/targettest/Makefile index 806eda2fd..e430fb356 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -673,6 +673,11 @@ EXELIST_sim6502 = \ EXELIST_sim65c02 = $(EXELIST_sim6502) + +# omitted: arg-test clock clock-test conio cpeek-test cprintf cursor deb dir-test +# div-test em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest +# joy-test moddiv-test mouse-test mul-test posixio-test rename-test scanf-test +# ser-test seek strdup-test strnlen stroserror-test strqtok-test tinyshell uname-test EXELIST_atari2600 = \ minimal @@ -682,6 +687,9 @@ EXELIST_atari5200 = \ EXELIST_gamate = \ minimal +EXELIST_lynx = \ + minimal + EXELIST_supervision = \ minimal @@ -693,9 +701,6 @@ EXELIST_bbc = \ EXELIST_lunix = \ notavailable -EXELIST_lynx = \ - minimal - # Unlisted targets will try to build everything. # That lets us learn what they cannot build, and what settings # we need to use for programs that can be built and run. From 9509288b8022fcf31d1ab8c15aaae6e3a372cc5e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:47:20 +0100 Subject: [PATCH 1425/2710] remove programs in util dir before making a snapshot. we might later decide to leave them there anyway. --- .github/workflows/snapshot-on-push-master.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 110edbbf0..c6a6eda8e 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -47,7 +47,9 @@ jobs: - name: Build the tools. shell: bash - run: make -j2 bin USER_CFLAGS=-Werror + run: | + make -j2 bin USER_CFLAGS=-Werror + make -j2 util - name: Build the platform libraries. shell: bash run: make -j2 lib QUIET=1 @@ -60,6 +62,9 @@ jobs: - name: Remove the output from the samples tests. shell: bash run: make -C samples clean + - name: Remove programs in util directory + shell: bash + run: make -j2 util clean - name: Build the document files. shell: bash run: make -j2 doc From f6e7a91fb414d04a69f780983ae1fc1e48cdb20b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:51:48 +0100 Subject: [PATCH 1426/2710] fix --- util/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/Makefile b/util/Makefile index 52cd10435..14a006379 100644 --- a/util/Makefile +++ b/util/Makefile @@ -1,7 +1,7 @@ .PHONY: atari gamate zlib -all: atari gamate zlib +util: atari gamate zlib atari: @$(MAKE) -C atari --no-print-directory $@ From 6129ff532b640dec9191519c1e314f755911d2e0 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:56:33 +0100 Subject: [PATCH 1427/2710] fix again. sigh --- util/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/util/Makefile b/util/Makefile index 14a006379..6d960abf6 100644 --- a/util/Makefile +++ b/util/Makefile @@ -3,6 +3,8 @@ util: atari gamate zlib +all: util + atari: @$(MAKE) -C atari --no-print-directory $@ gamate: From 1af84ed9a0be8f21544a43b93042366b798165f6 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 18:09:32 +0100 Subject: [PATCH 1428/2710] fix this too --- .github/workflows/snapshot-on-push-master.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index c6a6eda8e..442adc160 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -64,7 +64,7 @@ jobs: run: make -C samples clean - name: Remove programs in util directory shell: bash - run: make -j2 util clean + run: make -C util clean - name: Build the document files. shell: bash run: make -j2 doc From 16acb7675e475213690861a18a016c09b2e3e685 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 16:55:57 +0100 Subject: [PATCH 1429/2710] move some things from targettest to samples --- samples/Makefile | 39 +++++++++- {targettest => samples}/apple2/Makefile | 11 ++- {targettest => samples}/apple2/astronaut.hgr | Bin {targettest => samples}/apple2/catface.dhgr | Bin {targettest => samples}/apple2/chips.hgr | Bin {targettest => samples}/apple2/dhgrshow.c | 0 {targettest => samples}/apple2/gatsby.dhgr | Bin {targettest => samples}/apple2/girl.dhgr | Bin {targettest => samples}/apple2/hgrshow.c | 0 {targettest => samples}/apple2/hgrtest.c | 0 {targettest => samples}/apple2/macrometer.hgr | Bin {targettest => samples}/apple2/mariner.hgr | Bin {targettest => samples}/apple2/monarch.dhgr | Bin {targettest => samples}/apple2/rose.hgr | Bin {targettest => samples}/apple2/superman.dhgr | Bin {targettest => samples}/apple2/venice.dhgr | Bin {targettest => samples}/apple2/werner.hgr | Bin {targettest => samples}/apple2/werner.s | 0 {targettest => samples}/apple2/winston.hgr | Bin {targettest => samples}/atari5200/Makefile | 10 ++- {targettest => samples}/atari5200/hello.c | 0 samples/gamate/Makefile | 57 ++++++++++++++ {targettest => samples}/gamate/nachtm.c | 0 samples/getsp.s | 12 +++ samples/readme.txt | 70 ++++++++++++++++++ {targettest => samples}/sym1/Makefile | 11 ++- {targettest => samples}/sym1/symDisplay.c | 0 {targettest => samples}/sym1/symHello.c | 0 {targettest => samples}/sym1/symIO.c | 0 {targettest => samples}/sym1/symNotepad.c | 0 {targettest => samples}/sym1/symTiny.c | 0 {targettest => samples}/tinyshell.c | 0 targettest/Makefile | 39 +++------- targettest/atari/Makefile | 4 + targettest/gamate/Makefile | 7 +- targettest/pce/Makefile | 4 + targettest/readme.txt | 9 +++ 37 files changed, 231 insertions(+), 42 deletions(-) rename {targettest => samples}/apple2/Makefile (92%) rename {targettest => samples}/apple2/astronaut.hgr (100%) rename {targettest => samples}/apple2/catface.dhgr (100%) rename {targettest => samples}/apple2/chips.hgr (100%) rename {targettest => samples}/apple2/dhgrshow.c (100%) rename {targettest => samples}/apple2/gatsby.dhgr (100%) rename {targettest => samples}/apple2/girl.dhgr (100%) rename {targettest => samples}/apple2/hgrshow.c (100%) rename {targettest => samples}/apple2/hgrtest.c (100%) rename {targettest => samples}/apple2/macrometer.hgr (100%) rename {targettest => samples}/apple2/mariner.hgr (100%) rename {targettest => samples}/apple2/monarch.dhgr (100%) rename {targettest => samples}/apple2/rose.hgr (100%) rename {targettest => samples}/apple2/superman.dhgr (100%) rename {targettest => samples}/apple2/venice.dhgr (100%) rename {targettest => samples}/apple2/werner.hgr (100%) rename {targettest => samples}/apple2/werner.s (100%) rename {targettest => samples}/apple2/winston.hgr (100%) rename {targettest => samples}/atari5200/Makefile (82%) rename {targettest => samples}/atari5200/hello.c (100%) create mode 100644 samples/gamate/Makefile rename {targettest => samples}/gamate/nachtm.c (100%) create mode 100644 samples/getsp.s rename {targettest => samples}/sym1/Makefile (88%) rename {targettest => samples}/sym1/symDisplay.c (100%) rename {targettest => samples}/sym1/symHello.c (100%) rename {targettest => samples}/sym1/symIO.c (100%) rename {targettest => samples}/sym1/symNotepad.c (100%) rename {targettest => samples}/sym1/symTiny.c (100%) rename {targettest => samples}/tinyshell.c (100%) create mode 100644 targettest/readme.txt diff --git a/samples/Makefile b/samples/Makefile index 2cfd8d89b..5b08d4bb0 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -154,7 +154,7 @@ endif # Lists of subdirectories # disasm depends on cpp -DIRLIST = tutorial geos atari2600 supervision cbm +DIRLIST = tutorial geos atari2600 atari5200 apple2 gamate supervision sym1 cbm # -------------------------------------------------------------------------- # Lists of executables @@ -170,6 +170,7 @@ EXELIST_apple2 = \ multdemo \ ovrldemo \ sieve \ + tinyshell \ tgidemo EXELIST_apple2enh = $(EXELIST_apple2) @@ -183,6 +184,7 @@ EXELIST_atari = \ multdemo \ ovrldemo \ sieve \ + tinyshell \ tgidemo EXELIST_atarixl = $(EXELIST_atari) @@ -212,6 +214,7 @@ EXELIST_c64 = \ multdemo \ ovrldemo \ sieve \ + tinyshell \ tgidemo EXELIST_c128 = \ @@ -222,11 +225,13 @@ EXELIST_c128 = \ mandelbrot \ mousedemo \ sieve \ + tinyshell \ tgidemo EXELIST_c16 = \ ascii \ enumdevdir \ + tinyshell \ hello EXELIST_cbm510 = \ @@ -234,12 +239,14 @@ EXELIST_cbm510 = \ gunzip65 \ hello \ mousedemo \ + tinyshell \ sieve EXELIST_cbm610 = \ ascii \ gunzip65 \ hello \ + tinyshell \ sieve EXELIST_creativision = \ @@ -254,6 +261,7 @@ EXELIST_cx16 = \ mandelbrot \ mousedemo \ sieve \ + tinyshell \ tgidemo EXELIST_gamate = \ @@ -285,6 +293,7 @@ EXELIST_pet = \ ascii \ enumdevdir \ hello \ + tinyshell \ sieve EXELIST_plus4 = \ @@ -292,6 +301,7 @@ EXELIST_plus4 = \ enumdevdir \ gunzip65 \ hello \ + tinyshell \ sieve EXELIST_sim6502 = \ @@ -376,6 +386,23 @@ tgidemo: tgidemo.o $(LD) -D __HIMEM__=0x6000 $(LDFLAGS) -o $@ -C vic20-tgi.cfg -m $@.map $^ $(SYS).lib endif +# -------------------------------------------------------------------------- +# some programs link against getsp.o + +getsp.o: getsp.s + $(AS) $(ASFLAGS) -t $(SYS) $< + +ifneq ($(SYS),vic20) +tinyshell: tinyshell.o getsp.o + $(LD) $(LDFLAGS) -t $(SYS) -o $@ $^ $(SYS).lib +endif + +# some programs need more memory on the vic20 +ifeq ($(SYS),vic20) +tinyshell: tinyshell.o getsp.o + $(LD) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib +endif + # -------------------------------------------------------------------------- # Rule to make a CBM disk with all samples. Needs the c1541 program that comes # with the VICE emulator. @@ -456,7 +483,10 @@ install: $(INSTALL) -d $(DESTDIR)$(samplesdir)/geos $(INSTALL) -d $(DESTDIR)$(samplesdir)/tutorial $(INSTALL) -d $(DESTDIR)$(samplesdir)/atari2600 + $(INSTALL) -d $(DESTDIR)$(samplesdir)/atari5200 + $(INSTALL) -d $(DESTDIR)$(samplesdir)/apple2 $(INSTALL) -d $(DESTDIR)$(samplesdir)/cbm + $(INSTALL) -d $(DESTDIR)$(samplesdir)/gamate $(INSTALL) -d $(DESTDIR)$(samplesdir)/supervision $(INSTALL) -m0644 *.* $(DESTDIR)$(samplesdir) $(INSTALL) -m0644 readme.txt $(DESTDIR)$(samplesdir) @@ -464,7 +494,10 @@ install: $(INSTALL) -m0644 geos/*.* $(DESTDIR)$(samplesdir)/geos $(INSTALL) -m0644 tutorial/*.* $(DESTDIR)$(samplesdir)/tutorial $(INSTALL) -m0644 atari2600/*.* $(DESTDIR)$(samplesdir)/atari2600 + $(INSTALL) -m0644 atari5200/*.* $(DESTDIR)$(samplesdir)/atari5200 + $(INSTALL) -m0644 apple2/*.* $(DESTDIR)$(samplesdir)/apple2 $(INSTALL) -m0644 cbm/*.* $(DESTDIR)$(samplesdir)/cbm + $(INSTALL) -m0644 gamate/*.* $(DESTDIR)$(samplesdir)/gamate $(INSTALL) -m0644 supervision/*.* $(DESTDIR)$(samplesdir)/supervision # -------------------------------------------------------------------------- @@ -477,7 +510,9 @@ zip: # Clean-up rules mostlyclean: - @$(DEL) *.lbl *.map *.o *.s 2>$(NULLDEV) + @$(DEL) *.lbl *.map *.o 2>$(NULLDEV) +# we cant use .s since we have asm files in the directory that we want to keep + @$(DEL) ${patsubst %.c,%.s,$(wildcard *.c)} 2>$(NULLDEV) clean: mostlyclean @$(DEL) $(EXELIST_$(SYS)) $(DISK_$(SYS)) 2>$(NULLDEV) diff --git a/targettest/apple2/Makefile b/samples/apple2/Makefile similarity index 92% rename from targettest/apple2/Makefile rename to samples/apple2/Makefile index d71c5be3a..55e84aed6 100644 --- a/targettest/apple2/Makefile +++ b/samples/apple2/Makefile @@ -1,3 +1,8 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= apple2 + # For this one see https://applecommander.github.io/ AC ?= ac.jar @@ -35,9 +40,9 @@ EXELIST_apple2 = \ dhgrshow ifneq ($(EXELIST_$(SYS)),) -testcode: $(EXELIST_$(SYS)) +samples: $(EXELIST_$(SYS)) else -testcode: notavailable +samples: notavailable endif # empty target used to skip systems that will not work with any program in this dir @@ -45,7 +50,7 @@ notavailable: ifeq ($(MAKELEVEL),0) @echo "info: apple2 tests not available for" $(SYS) else -# suppress the "nothing to be done for 'testcode' message +# suppress the "nothing to be done for 'samples' message @echo > $(NULLDEV) endif diff --git a/targettest/apple2/astronaut.hgr b/samples/apple2/astronaut.hgr similarity index 100% rename from targettest/apple2/astronaut.hgr rename to samples/apple2/astronaut.hgr diff --git a/targettest/apple2/catface.dhgr b/samples/apple2/catface.dhgr similarity index 100% rename from targettest/apple2/catface.dhgr rename to samples/apple2/catface.dhgr diff --git a/targettest/apple2/chips.hgr b/samples/apple2/chips.hgr similarity index 100% rename from targettest/apple2/chips.hgr rename to samples/apple2/chips.hgr diff --git a/targettest/apple2/dhgrshow.c b/samples/apple2/dhgrshow.c similarity index 100% rename from targettest/apple2/dhgrshow.c rename to samples/apple2/dhgrshow.c diff --git a/targettest/apple2/gatsby.dhgr b/samples/apple2/gatsby.dhgr similarity index 100% rename from targettest/apple2/gatsby.dhgr rename to samples/apple2/gatsby.dhgr diff --git a/targettest/apple2/girl.dhgr b/samples/apple2/girl.dhgr similarity index 100% rename from targettest/apple2/girl.dhgr rename to samples/apple2/girl.dhgr diff --git a/targettest/apple2/hgrshow.c b/samples/apple2/hgrshow.c similarity index 100% rename from targettest/apple2/hgrshow.c rename to samples/apple2/hgrshow.c diff --git a/targettest/apple2/hgrtest.c b/samples/apple2/hgrtest.c similarity index 100% rename from targettest/apple2/hgrtest.c rename to samples/apple2/hgrtest.c diff --git a/targettest/apple2/macrometer.hgr b/samples/apple2/macrometer.hgr similarity index 100% rename from targettest/apple2/macrometer.hgr rename to samples/apple2/macrometer.hgr diff --git a/targettest/apple2/mariner.hgr b/samples/apple2/mariner.hgr similarity index 100% rename from targettest/apple2/mariner.hgr rename to samples/apple2/mariner.hgr diff --git a/targettest/apple2/monarch.dhgr b/samples/apple2/monarch.dhgr similarity index 100% rename from targettest/apple2/monarch.dhgr rename to samples/apple2/monarch.dhgr diff --git a/targettest/apple2/rose.hgr b/samples/apple2/rose.hgr similarity index 100% rename from targettest/apple2/rose.hgr rename to samples/apple2/rose.hgr diff --git a/targettest/apple2/superman.dhgr b/samples/apple2/superman.dhgr similarity index 100% rename from targettest/apple2/superman.dhgr rename to samples/apple2/superman.dhgr diff --git a/targettest/apple2/venice.dhgr b/samples/apple2/venice.dhgr similarity index 100% rename from targettest/apple2/venice.dhgr rename to samples/apple2/venice.dhgr diff --git a/targettest/apple2/werner.hgr b/samples/apple2/werner.hgr similarity index 100% rename from targettest/apple2/werner.hgr rename to samples/apple2/werner.hgr diff --git a/targettest/apple2/werner.s b/samples/apple2/werner.s similarity index 100% rename from targettest/apple2/werner.s rename to samples/apple2/werner.s diff --git a/targettest/apple2/winston.hgr b/samples/apple2/winston.hgr similarity index 100% rename from targettest/apple2/winston.hgr rename to samples/apple2/winston.hgr diff --git a/targettest/atari5200/Makefile b/samples/atari5200/Makefile similarity index 82% rename from targettest/atari5200/Makefile rename to samples/atari5200/Makefile index ab0c99f1c..2fbda11d9 100644 --- a/targettest/atari5200/Makefile +++ b/samples/atari5200/Makefile @@ -1,4 +1,8 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= atari5200 + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -31,9 +35,9 @@ EXELIST_atari5200 = \ hello ifneq ($(EXELIST_$(SYS)),) -testcode: $(EXELIST_$(SYS)) +samples: $(EXELIST_$(SYS)) else -testcode: notavailable +samples: notavailable endif # empty target used to skip systems that will not work with any program in this dir @@ -41,7 +45,7 @@ notavailable: ifeq ($(MAKELEVEL),0) @echo "info: atari 5200 tests not available for" $(SYS) else -# suppress the "nothing to be done for 'testcode' message +# suppress the "nothing to be done for 'samples' message @echo > $(NULLDEV) endif diff --git a/targettest/atari5200/hello.c b/samples/atari5200/hello.c similarity index 100% rename from targettest/atari5200/hello.c rename to samples/atari5200/hello.c diff --git a/samples/gamate/Makefile b/samples/gamate/Makefile new file mode 100644 index 000000000..6e0617163 --- /dev/null +++ b/samples/gamate/Makefile @@ -0,0 +1,57 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= gamate + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) +endif + +EXELIST_gamate = \ + nachtm.bin + +ifneq ($(EXELIST_$(SYS)),) +samples: $(EXELIST_$(SYS)) +else +samples: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: gamate tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'samples' message + @echo > $(NULLDEV) +endif + +nachtm.bin: nachtm.c + $(CL) -Os -l nachtm.lst -t gamate -o nachtm.bin nachtm.c + gamate-fixcart nachtm.bin + +clean: + @$(DEL) nachtm.bin nachtm.lst 2>$(NULLDEV) diff --git a/targettest/gamate/nachtm.c b/samples/gamate/nachtm.c similarity index 100% rename from targettest/gamate/nachtm.c rename to samples/gamate/nachtm.c diff --git a/samples/getsp.s b/samples/getsp.s new file mode 100644 index 000000000..9f169dc0b --- /dev/null +++ b/samples/getsp.s @@ -0,0 +1,12 @@ + + .export _getsp + .importzp sp + +.proc _getsp + + ldx sp+1 + lda sp + rts + +.endproc + diff --git a/samples/readme.txt b/samples/readme.txt index 11326146b..506cd5d43 100644 --- a/samples/readme.txt +++ b/samples/readme.txt @@ -1,6 +1,14 @@ This directory contains sample programs for the cc65 compiler. +The programs contained here are +- used as samples and referenced from within the documentation (this is their + main purpose) +- installed into the filesystem +- compiled (but NOT run) by the CI test + +----------------------------------------------------------------------------- + Below is a short description for each of the programs, together with a list of the supported platforms. @@ -105,6 +113,11 @@ Platforms: All systems with conio and clock support: Commander X16, Apple ][ (without timing due to missing clock support). +----------------------------------------------------------------------------- +Name: tinyshell +Description: Simple ("tiny") shell to test filename and directory functions. +Platforms: Runs on all platforms that have stdio support + ----------------------------------------------------------------------------- Name: tgidemo Description: Shows some of the graphics capabilities of the "Tiny Graphics @@ -125,6 +138,37 @@ Description: A "Hello world" type program. Platforms: Runs on only the Atari 2600 Video Console System. ----------------------------------------------------------------------------- +atari 5200: +----------- + +Name: hello +Description: A "Hello world" type program. +Platforms: Runs on only the Atari 5200 Video Console System. +----------------------------------------------------------------------------- + +apple2: +------- + +Name: hgrtest +Description: shows how to incorporate a hires screen right into the binary, + thus allowing to place content both below and above the hires + video ram without multiple files nor copying stuff around (plus + having a nice splash screen as bonus). It basically demos how to + make use of apple2-hgr.cfg. + +Name: hgrshow +Description: is a (single) hires program showing how to load (single) hires + screens from files without support from TGI. TGI could be used + to "paint" on the loaded screens. + +Name: dhgrshow +Description: is a double hires program showing how to load double hires + screens from files. TGI is used for most of the I/O address + manipulation, but (in contrast to hgrshow) is not actually + functional. + +----------------------------------------------------------------------------- + cbm: ---- @@ -147,6 +191,32 @@ Platforms: The program needs a VIC-II or a TED, so it runs on the following C64, C128, CBM510, Plus/4. ----------------------------------------------------------------------------- +gamate: +------- + +Name: nachtm +Description: Plays "Eine kleine Nachtmusik" by Wolfgang Amadeus Mozart. +----------------------------------------------------------------------------- + +sym1: +----- + +Name: symHello +Description: Hello World for Sym-1 + +Name: symTiny +Description: Hello World for Sym-1 (tiny version without printf) + +Name: symDisplay +Description: Sym-1 front panel display example + +Name: symIO +Description: Sym-1 digital I/O interface example + +Name: symNotepad +Description: Sym-1 Notepad + +----------------------------------------------------------------------------- supervision: ------------ diff --git a/targettest/sym1/Makefile b/samples/sym1/Makefile similarity index 88% rename from targettest/sym1/Makefile rename to samples/sym1/Makefile index c9f9eb099..14da90ad3 100644 --- a/targettest/sym1/Makefile +++ b/samples/sym1/Makefile @@ -1,3 +1,8 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= sym1 + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -30,9 +35,9 @@ EXELIST_sym1 = \ symHello.bin symTiny.bin symDisplay.bin symIO.bin symNotepad.bin ifneq ($(EXELIST_$(SYS)),) -testcode: $(EXELIST_$(SYS)) +samples: $(EXELIST_$(SYS)) else -testcode: notavailable +samples: notavailable endif # empty target used to skip systems that will not work with any program in this dir @@ -40,7 +45,7 @@ notavailable: ifeq ($(MAKELEVEL),0) @echo "info: sym1 tests not available for" $(SYS) else -# suppress the "nothing to be done for 'testcode' message +# suppress the "nothing to be done for 'samples' message @echo > $(NULLDEV) endif diff --git a/targettest/sym1/symDisplay.c b/samples/sym1/symDisplay.c similarity index 100% rename from targettest/sym1/symDisplay.c rename to samples/sym1/symDisplay.c diff --git a/targettest/sym1/symHello.c b/samples/sym1/symHello.c similarity index 100% rename from targettest/sym1/symHello.c rename to samples/sym1/symHello.c diff --git a/targettest/sym1/symIO.c b/samples/sym1/symIO.c similarity index 100% rename from targettest/sym1/symIO.c rename to samples/sym1/symIO.c diff --git a/targettest/sym1/symNotepad.c b/samples/sym1/symNotepad.c similarity index 100% rename from targettest/sym1/symNotepad.c rename to samples/sym1/symNotepad.c diff --git a/targettest/sym1/symTiny.c b/samples/sym1/symTiny.c similarity index 100% rename from targettest/sym1/symTiny.c rename to samples/sym1/symTiny.c diff --git a/targettest/tinyshell.c b/samples/tinyshell.c similarity index 100% rename from targettest/tinyshell.c rename to samples/tinyshell.c diff --git a/targettest/Makefile b/targettest/Makefile index e430fb356..55b4660fc 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -174,7 +174,7 @@ endif # -------------------------------------------------------------------------- # Lists of subdirectories -DIRLIST = accelerator apple2 atari atari5200 cbm gamate pce sym1 +DIRLIST = accelerator atari cbm gamate pce # -------------------------------------------------------------------------- # Lists of executables @@ -211,7 +211,6 @@ EXELIST_c64 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: seek @@ -246,7 +245,6 @@ EXELIST_c128 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test @@ -278,7 +276,6 @@ EXELIST_c16 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: seek ser-test @@ -312,7 +309,6 @@ EXELIST_cbm510 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: joy-test mouse-test seek @@ -345,7 +341,6 @@ EXELIST_cbm610 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: clock-test em-test mouse-test seek ser-test @@ -376,7 +371,6 @@ EXELIST_pet = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: clock-test em-test mouse-test seek @@ -408,7 +402,6 @@ EXELIST_plus4 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: seek clock-test mouse-test ser-test @@ -440,7 +433,6 @@ EXELIST_vic20 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: cpeek-test, clock @@ -474,7 +466,6 @@ EXELIST_apple2 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test EXELIST_apple2enh = $(EXELIST_apple2) @@ -511,13 +502,12 @@ EXELIST_atari = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test EXELIST_atarixl = $(EXELIST_atari) # omitted: clock-test cpeek-test deb dir-test em-test exec-test1 exec-test2 -# joy-test mouse-test rename-test seek ser-test stroserror-test tinyshell +# joy-test mouse-test rename-test seek ser-test stroserror-test EXELIST_telestrat = \ minimal \ arg-test \ @@ -542,7 +532,7 @@ EXELIST_telestrat = \ # omitted: arg-test clock-test clock cpeek-test conio cprintf cursor deb dir-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test # mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test -# stroserror-test tinyshell uname-test +# stroserror-test uname-test EXELIST_sym1 = \ minimal \ div-test \ @@ -551,7 +541,7 @@ EXELIST_sym1 = \ strqtok-test # omitted: clock-test cpeek-test conio deb dir-test em-test exec-test1 exec-test2 -# fileio-test ft mouse-test posixio-test rename-test seek ser-test tinyshell +# fileio-test ft mouse-test posixio-test rename-test seek ser-test EXELIST_atmos = \ minimal \ arg-test \ @@ -574,7 +564,7 @@ EXELIST_atmos = \ # omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test # mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test -# strnlen stroserror-test strqtok-test tinyshell uname-test +# strnlen stroserror-test strqtok-test uname-test EXELIST_creativision = \ minimal \ cursor @@ -609,13 +599,12 @@ EXELIST_cx16 = \ strnlen \ stroserror-test \ strqtok-test \ - tinyshell \ uname-test # omitted: arg-test clock-test clock cpeek-test cprintf cursor deb dir-test div-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test # mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test -# strnlen stroserror-test strqtok-test tinyshell uname-test +# strnlen stroserror-test strqtok-test uname-test EXELIST_nes = \ minimal \ conio @@ -623,7 +612,7 @@ EXELIST_nes = \ # omitted: arg-test clock-test clock cpeek-test cprintf cursor deb dir-test div-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test # mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test -# strnlen stroserror-test strqtok-test tinyshell uname-test +# strnlen stroserror-test strqtok-test uname-test EXELIST_pce = \ minimal \ conio @@ -631,7 +620,7 @@ EXELIST_pce = \ # omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test # mouse-test posixio-test rename-test scanf-test seek ser-test strdup-test strnlen -# stroserror-test strqtok-test tinyshell uname-test +# stroserror-test strqtok-test uname-test EXELIST_osic1p = \ minimal \ cursor \ @@ -640,7 +629,7 @@ EXELIST_osic1p = \ # omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test # mouse-test posixio-test rename-test scanf-test seek ser-test strdup-test strnlen -# stroserror-test strqtok-test tinyshell uname-test +# stroserror-test strqtok-test uname-test EXELIST_geos-apple = \ minimal \ cursor \ @@ -649,7 +638,7 @@ EXELIST_geos-apple = \ # omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test # mouse-test posixio-test rename-test scanf-test seek ser-test strdup-test strnlen -# stroserror-test strqtok-test tinyshell uname-test +# stroserror-test strqtok-test uname-test EXELIST_geos-cbm = \ minimal \ @@ -658,7 +647,7 @@ EXELIST_geos-cbm = \ # omitted: clock clock-test conio cpeek-test cprintf cursor deb dir-test em-test # exec-test1 exec-test2 ft heaptest joy-test mouse-test mul-test rename-test seek -# ser-test strdup-test stroserror-test tinyshell uname-test +# ser-test strdup-test stroserror-test uname-test EXELIST_sim6502 = \ minimal \ arg-test \ @@ -739,9 +728,6 @@ mouse-test: mouse-test.o getsp.o ifneq ($(SYS),vic20) ft: ft.o getsp.o $(LD) $(LDFLAGS) -t $(SYS) -o $@ $^ $(SYS).lib - -tinyshell: tinyshell.o getsp.o - $(LD) $(LDFLAGS) -t $(SYS) -o $@ $^ $(SYS).lib endif # some programs need more memory on the vic20 @@ -749,9 +735,6 @@ endif ifeq ($(SYS),vic20) ft: ft.o getsp.o $(LD) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib - -tinyshell: tinyshell.o getsp.o - $(LD) $(LDFLAGS) -o $@ -C vic20-32k.cfg -m $@.map $^ $(SYS).lib endif # -------------------------------------------------------------------------- diff --git a/targettest/atari/Makefile b/targettest/atari/Makefile index 609d2c758..dd4f6078f 100644 --- a/targettest/atari/Makefile +++ b/targettest/atari/Makefile @@ -1,4 +1,8 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= atari + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) diff --git a/targettest/gamate/Makefile b/targettest/gamate/Makefile index 74a3d8c50..e2b060406 100644 --- a/targettest/gamate/Makefile +++ b/targettest/gamate/Makefile @@ -1,4 +1,8 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= gamate + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -51,9 +55,6 @@ lcdtest.bin: lcdtest.s $(CL) -l lcdtest.lst -t gamate -o lcdtest.bin lcdtest.s ctest.bin: ctest.c $(CL) -l ctest.lst -t gamate -o ctest.bin ctest.c -nachtm.bin: nachtm.c - $(CL) -Os -l nachtm.lst -t gamate -o nachtm.bin nachtm.c - gamate-fixcart nachtm.bin clean: @$(DEL) lcdtest.o audiotest.o ctest.o 2>$(NULLDEV) diff --git a/targettest/pce/Makefile b/targettest/pce/Makefile index 598c38575..f757c3062 100644 --- a/targettest/pce/Makefile +++ b/targettest/pce/Makefile @@ -1,4 +1,8 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= pce + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) diff --git a/targettest/readme.txt b/targettest/readme.txt new file mode 100644 index 000000000..355812776 --- /dev/null +++ b/targettest/readme.txt @@ -0,0 +1,9 @@ + +This directory contains test programs for the cc65 compiler. + +The programs contained here are +- NOT to be referenced in the documentation +- compiled (but NOT run) by the CI test (this is their main purpose) +- some programs can be used interactively to check certain library features + +Sample programs ment for endusers should be placed in the samples directory. From 76026ed59ecb8e0b50cad53b4252e91473f4c689 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Feb 2022 17:34:22 +0100 Subject: [PATCH 1430/2710] use gamate-fixcart from util dir --- samples/gamate/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/gamate/Makefile b/samples/gamate/Makefile index 6e0617163..cfb8505cc 100644 --- a/samples/gamate/Makefile +++ b/samples/gamate/Makefile @@ -51,7 +51,7 @@ endif nachtm.bin: nachtm.c $(CL) -Os -l nachtm.lst -t gamate -o nachtm.bin nachtm.c - gamate-fixcart nachtm.bin + ../../util/gamate/gamate-fixcart nachtm.bin clean: @$(DEL) nachtm.bin nachtm.lst 2>$(NULLDEV) From 561e973c5d0fabc530483d6468b52c2dc8c21d45 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 6 Feb 2022 16:49:01 +0100 Subject: [PATCH 1431/2710] try publishing on sf after snapshot --- .github/workflows/snapshot-on-push-master.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 442adc160..6bb1d4b5d 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -92,5 +92,15 @@ jobs: name: cc65-snapshot-win64.zip path: cc65-win64.zip + - name: Upload snapshot to sourceforge + uses: nogsantos/scp-deploy@master + with: + src: cc65-win32.zip + host: ${{ secrets.SSH_HOST }} + remote: ${{ secrets.SSH_DIR }} + port: ${{ secrets.SSH_PORT }} + user: ${{ secrets.SSH_USER }} + key: ${{ secrets.SSH_KEY }} + # TODO: Update docs at https://github.com/cc65/doc # TODO: Publish snapshot zip at https://github.com/cc65/cc65.github.io From b9bda8c40dd68eabaf67292b71e9f881d3964a4e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 6 Feb 2022 17:29:14 +0100 Subject: [PATCH 1432/2710] test upload again --- .github/workflows/snapshot-on-push-master.yml | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 6bb1d4b5d..957caba87 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -53,9 +53,9 @@ jobs: - name: Build the platform libraries. shell: bash run: make -j2 lib QUIET=1 - - name: Run the regression tests. - shell: bash - run: make test QUIET=1 +# - name: Run the regression tests. +# shell: bash +# run: make test QUIET=1 - name: Test that the samples can be built. shell: bash run: make -j2 samples @@ -68,34 +68,34 @@ jobs: - name: Build the document files. shell: bash run: make -j2 doc - - name: Build and package 64-bit Windows versions of the tools. - run: | - make -C src clean - make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32- - make zip - mv cc65.zip cc65-win64.zip +# - name: Build and package 64-bit Windows versions of the tools. +# run: | +# make -C src clean +# make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32- +# make zip +# mv cc65.zip cc65-snapshot-win64.zip - name: Build and package 32-bit Windows versions of the tools. run: | make -C src clean make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- make zip - mv cc65.zip cc65-win32.zip + mv cc65.zip cc65-snapshot-win32.zip - name: Upload a 32-bit Snapshot Zip uses: actions/upload-artifact@v2 with: name: cc65-snapshot-win32.zip - path: cc65-win32.zip - - name: Upload a 64-bit Snapshot Zip - uses: actions/upload-artifact@v2 - with: - name: cc65-snapshot-win64.zip - path: cc65-win64.zip + path: cc65-snapshot-win32.zip +# - name: Upload a 64-bit Snapshot Zip +# uses: actions/upload-artifact@v2 +# with: +# name: cc65-snapshot-win64.zip +# path: cc65-snapshot-win64.zip - name: Upload snapshot to sourceforge uses: nogsantos/scp-deploy@master with: - src: cc65-win32.zip + src: cc65-snapshot-win32.zip host: ${{ secrets.SSH_HOST }} remote: ${{ secrets.SSH_DIR }} port: ${{ secrets.SSH_PORT }} From 138d2badb2573364c5b093fa8a6d436684c76ddf Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 6 Feb 2022 18:20:09 +0100 Subject: [PATCH 1433/2710] upload snapshot to sourceforge --- .github/workflows/snapshot-on-push-master.yml | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 957caba87..c361b28b9 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -53,9 +53,9 @@ jobs: - name: Build the platform libraries. shell: bash run: make -j2 lib QUIET=1 -# - name: Run the regression tests. -# shell: bash -# run: make test QUIET=1 + - name: Run the regression tests. + shell: bash + run: make test QUIET=1 - name: Test that the samples can be built. shell: bash run: make -j2 samples @@ -68,12 +68,12 @@ jobs: - name: Build the document files. shell: bash run: make -j2 doc -# - name: Build and package 64-bit Windows versions of the tools. -# run: | -# make -C src clean -# make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32- -# make zip -# mv cc65.zip cc65-snapshot-win64.zip + - name: Build and package 64-bit Windows versions of the tools. + run: | + make -C src clean + make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32- + make zip + mv cc65.zip cc65-snapshot-win64.zip - name: Build and package 32-bit Windows versions of the tools. run: | make -C src clean @@ -86,12 +86,13 @@ jobs: with: name: cc65-snapshot-win32.zip path: cc65-snapshot-win32.zip -# - name: Upload a 64-bit Snapshot Zip -# uses: actions/upload-artifact@v2 -# with: -# name: cc65-snapshot-win64.zip -# path: cc65-snapshot-win64.zip + - name: Upload a 64-bit Snapshot Zip + uses: actions/upload-artifact@v2 + with: + name: cc65-snapshot-win64.zip + path: cc65-snapshot-win64.zip + # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge uses: nogsantos/scp-deploy@master with: @@ -101,6 +102,6 @@ jobs: port: ${{ secrets.SSH_PORT }} user: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_KEY }} - + # TODO: Update docs at https://github.com/cc65/doc # TODO: Publish snapshot zip at https://github.com/cc65/cc65.github.io From c60144afbb552b4cb0b0acf0faadad24a77a138f Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Feb 2022 19:14:02 -0600 Subject: [PATCH 1434/2710] Documentation updates for Sym-1. --- doc/funcref.sgml | 100 +++++++++++++++++++++++++++++++++++++++++++++++ doc/sym1.sgml | 4 +- 2 files changed, 102 insertions(+), 2 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 4dff14dd3..4571d34a3 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -754,6 +754,16 @@ communication, see also <tt>testcode/lib/ser-test.c</tt>. </itemize> +<sect1><tt/sym1.h/<label id="sym1.h"><p> + +<itemize> +<item><ref id="beep" name="beep"> +<item><ref id="fdisp" name="fdisp"> +<item><ref id="loadt" name="loadt"> +<item><ref id="dumpt" name="dumpt"> +</itemize> + + <sect1><tt/telestrat.h/<label id="telestrat.h"><p> <itemize> @@ -1669,6 +1679,27 @@ used in presence of a prototype. </quote> +<sect1>beep<label id="beep"><p> + +<quote> +<descrip> +<tag/Function/Beep sound. +<tag/Header/<tt/<ref id="sym1.h" name="sym1.h">/ +<tag/Declaration/<tt/void beep(void);/ +<tag/Description/<tt/beep/ makes a brief tone. +<tag/Notes/<itemize> +<item>The function is specific to the Sym-1. +</itemize> +<tag/Availability/cc65 +<tag/See also/ +<ref id="fdisp" name="fdisp">, +<ref id="loadt" name="loadt">, +<ref id="dumpt" name="dumpt">, +<tag/Example/None. +</descrip> +</quote> + + <sect1>bgcolor<label id="bgcolor"><p> <quote> @@ -3363,6 +3394,29 @@ int main(void) </quote> +<sect1>dumpt<label id="dumpt"><p> + +<quote> +<descrip> +<tag/Function/Dump memory to tape. +<tag/Header/<tt/<ref id="sym1.h" name="sym1.h">/ +<tag/Declaration/<tt/int __fastcall__ dumpt (unsigned char id, const void* start, const void* end);/ +<tag/Description/<tt/dumpt/ saves memory onto data tape. +<tag/Notes/<itemize> +<item>The function is specific to the Sym-1. +<item>The function is only available as fastcall function, so it may only +be used in presence of a prototype. +</itemize> +<tag/Availability/cc65 +<tag/See also/ +<ref id="fdisp" name="beep">, +<ref id="loadt" name="fdisp">, +<ref id="dumpt" name="loadt">, +<tag/Example/None. +</descrip> +</quote> + + <sect1>em_commit<label id="em_commit"><p> <quote> @@ -3721,6 +3775,28 @@ switching the CPU into double clock mode. </quote> +<sect1>fdisp<label id="fdisp"><p> + +<quote> +<descrip> +<tag/Function/Flash front-panel display. +<tag/Header/<tt/<ref id="sym1.h" name="sym1.h">/ +<tag/Declaration/<tt/void fdisp(void);/ +<tag/Description/<tt/fdisp/ flashes front-panel display. +<tag/Notes/<itemize> +<item>The function is specific to the Sym-1. +<item>The front-panel display buffer mut be loaded prior to calling fdisp. See the DISPLAY struct definition in sym1.h. +</itemize> +<tag/Availability/cc65 +<tag/See also/ +<ref id="fdisp" name="beep">, +<ref id="loadt" name="loadt">, +<ref id="dumpt" name="dumpt">, +<tag/Example/None. +</descrip> +</quote> + + <sect1>feof<label id="feof"><p> <quote> @@ -4961,6 +5037,30 @@ used in presence of a prototype. </quote> +<sect1>loadt<label id="loadt"><p> + +<quote> +<descrip> +<tag/Function/Load memory from tape. +<tag/Header/<tt/<ref id="sym1.h" name="sym1.h">/ +<tag/Declaration/<tt/int __fastcall__ loadt (unsigned char id);/ +<tag/Description/<tt/loadt/ loads memory from data tape. +<tag/Notes/<itemize> +<item>The function is specific to the Sym-1. +<item>The return value is status. Non-zero status indicates an error. +<item>The function is only available as fastcall function, so it may only +be used in presence of a prototype. +</itemize> +<tag/Availability/cc65 +<tag/See also/ +<ref id="fdisp" name="beep">, +<ref id="loadt" name="fdisp">, +<ref id="dumpt" name="dumpt">, +<tag/Example/None. +</descrip> +</quote> + + <sect1>ltoa<label id="ltoa"><p> <quote> diff --git a/doc/sym1.sgml b/doc/sym1.sgml index 60eb1c020..5961984bd 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -38,7 +38,7 @@ Special locations: Conio support is not currently available for the Sym-1. But stdio console functions are available. <tag/Stack/ - The C runtime stack is located at $0FFF on 4KB Syms, or at $7FFFfor 32KB systems. The stack always grows downwards. + The C runtime stack is located at $0FFF on 4KB Syms, or at $7FFF for 32KB systems. The stack always grows downwards. <tag/Heap/ The C heap is located at the end of the program and grows towards the C runtime stack. @@ -102,7 +102,7 @@ As stated earlier, there are config files for 4KB and 32KB systems. If you have <sect3>Sample programs<p> -All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. These sample programs can be found in the targettest/sym1 directory: +All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. These sample programs can be found in the samples/sym1 directory: <itemize> <item>symHello prints "Hello World!" and then inputs characters, which are echoed on the screen. It also makes a "beep" sound.</item> From 0302e7be970abf7632802eecdcdb1015a9f1cc5f Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Feb 2022 19:46:16 -0600 Subject: [PATCH 1435/2710] Typo correction. --- doc/funcref.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 4571d34a3..b66344a01 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -3785,7 +3785,7 @@ switching the CPU into double clock mode. <tag/Description/<tt/fdisp/ flashes front-panel display. <tag/Notes/<itemize> <item>The function is specific to the Sym-1. -<item>The front-panel display buffer mut be loaded prior to calling fdisp. See the DISPLAY struct definition in sym1.h. +<item>The front-panel display buffer must be loaded prior to calling fdisp. See the DISPLAY struct definition in sym1.h. </itemize> <tag/Availability/cc65 <tag/See also/ From dd38de6263ee2e496ff1e517bc1a851dae9ced29 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 7 Feb 2022 19:51:03 -0600 Subject: [PATCH 1436/2710] Added note about return value being function status. --- doc/funcref.sgml | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index b66344a01..86c286909 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -3404,6 +3404,7 @@ int main(void) <tag/Description/<tt/dumpt/ saves memory onto data tape. <tag/Notes/<itemize> <item>The function is specific to the Sym-1. +<item>The return value is status. Non-zero status indicates an error. <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> From bf46abf8c53201c1e95fdc1680fff95e55fd39c7 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Tue, 8 Feb 2022 14:22:09 -0600 Subject: [PATCH 1437/2710] Correction of link typos --- doc/funcref.sgml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 86c286909..1a9dcaa77 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -3410,9 +3410,9 @@ be used in presence of a prototype. </itemize> <tag/Availability/cc65 <tag/See also/ -<ref id="fdisp" name="beep">, -<ref id="loadt" name="fdisp">, -<ref id="dumpt" name="loadt">, +<ref id="beep" name="beep">, +<ref id="fdisp" name="fdisp">, +<ref id="loadt" name="loadt">, <tag/Example/None. </descrip> </quote> @@ -3790,7 +3790,7 @@ switching the CPU into double clock mode. </itemize> <tag/Availability/cc65 <tag/See also/ -<ref id="fdisp" name="beep">, +<ref id="beep" name="beep">, <ref id="loadt" name="loadt">, <ref id="dumpt" name="dumpt">, <tag/Example/None. @@ -5054,8 +5054,8 @@ be used in presence of a prototype. </itemize> <tag/Availability/cc65 <tag/See also/ -<ref id="fdisp" name="beep">, -<ref id="loadt" name="fdisp">, +<ref id="beep" name="beep">, +<ref id="fdisp" name="fdisp">, <ref id="dumpt" name="dumpt">, <tag/Example/None. </descrip> From 9c1c1c04d8242dceb62d8e1ff9793ad72d0ab083 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 6 Feb 2022 04:21:53 -0500 Subject: [PATCH 1438/2710] Moved the platform-test enumerations from Github Actions over to makefiles. Now, we can run those tests locally, as well as on Github. --- .github/workflows/build-on-pull-request.yml | 130 +----------------- .github/workflows/snapshot-on-push-master.yml | 3 +- samples/Makefile | 52 ++++++- targettest/Makefile | 58 +++++++- 4 files changed, 106 insertions(+), 137 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 307cbd048..2203e43dd 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -33,135 +33,9 @@ jobs: shell: bash run: make test QUIET=1 - name: Test that the samples can be built. - shell: bash - run: | - make SYS=apple2 -C samples - make SYS=apple2 -C samples clean - make SYS=apple2enh -C samples - make SYS=apple2enh -C samples clean - make SYS=atari -C samples - make SYS=atari -C samples clean - make SYS=atarixl -C samples - make SYS=atarixl -C samples clean - make SYS=atari2600 -C samples - make SYS=atari2600 -C samples clean - make SYS=atari5200 -C samples - make SYS=atari5200 -C samples clean - make SYS=atmos -C samples - make SYS=atmos -C samples clean - make SYS=bbc -C samples - make SYS=bbc -C samples clean - make SYS=c128 -C samples - make SYS=c128 -C samples clean - make SYS=c16 -C samples - make SYS=c16 -C samples clean - make SYS=c64 -C samples - make SYS=c64 -C samples clean - make SYS=cbm510 -C samples - make SYS=cbm510 -C samples clean - make SYS=cbm610 -C samples - make SYS=cbm610 -C samples clean - make SYS=creativision -C samples - make SYS=creativision -C samples clean - make SYS=cx16 -C samples - make SYS=cx16 -C samples clean - make SYS=gamate -C samples - make SYS=gamate -C samples clean - make SYS=geos-apple -C samples - make SYS=geos-apple -C samples clean - make SYS=geos-cbm -C samples - make SYS=geos-cbm -C samples clean - make SYS=lunix -C samples - make SYS=lunix -C samples clean - make SYS=lynx -C samples - make SYS=lynx -C samples clean - make SYS=nes -C samples - make SYS=nes -C samples clean - make SYS=osic1p -C samples - make SYS=osic1p -C samples clean - make SYS=pce -C samples - make SYS=pce -C samples clean - make SYS=pet -C samples - make SYS=pet -C samples clean - make SYS=plus4 -C samples - make SYS=plus4 -C samples clean - make SYS=sim6502 -C samples - make SYS=sim6502 -C samples clean - make SYS=sim65c02 -C samples - make SYS=sim65c02 -C samples clean - make SYS=supervision -C samples - make SYS=supervision -C samples clean - make SYS=sym1 -C samples - make SYS=sym1 -C samples clean - make SYS=telestrat -C samples - make SYS=telestrat -C samples clean - make SYS=vic20 -C samples - make SYS=vic20 -C samples clean + run: make -C samples platforms - name: Test that the targettest programs can be built. - shell: bash - run: | - make SYS=apple2 -C targettest - make SYS=apple2 -C targettest clean - make SYS=apple2enh -C targettest - make SYS=apple2enh -C targettest clean - make SYS=atari -C targettest - make SYS=atari -C targettest clean - make SYS=atarixl -C targettest - make SYS=atarixl -C targettest clean - make SYS=atari2600 -C targettest - make SYS=atari2600 -C targettest clean - make SYS=atari5200 -C targettest - make SYS=atari5200 -C targettest clean - make SYS=atmos -C targettest - make SYS=atmos -C targettest clean - make SYS=bbc -C targettest - make SYS=bbc -C targettest clean - make SYS=c128 -C targettest - make SYS=c128 -C targettest clean - make SYS=c16 -C targettest - make SYS=c16 -C targettest clean - make SYS=c64 -C targettest - make SYS=c64 -C targettest clean - make SYS=cbm510 -C targettest - make SYS=cbm510 -C targettest clean - make SYS=cbm610 -C targettest - make SYS=cbm610 -C targettest clean - make SYS=creativision -C targettest - make SYS=creativision -C targettest clean - make SYS=cx16 -C targettest - make SYS=cx16 -C targettest clean - make SYS=gamate -C targettest - make SYS=gamate -C targettest clean - make SYS=geos-apple -C targettest - make SYS=geos-apple -C targettest clean - make SYS=geos-cbm -C targettest - make SYS=geos-cbm -C targettest clean - make SYS=lunix -C targettest - make SYS=lunix -C targettest clean - make SYS=lynx -C targettest - make SYS=lynx -C targettest clean - make SYS=nes -C targettest - make SYS=nes -C targettest clean - make SYS=osic1p -C targettest - make SYS=osic1p -C targettest clean - make SYS=pce -C targettest - make SYS=pce -C targettest clean - make SYS=pet -C targettest - make SYS=pet -C targettest clean - make SYS=plus4 -C targettest - make SYS=plus4 -C targettest clean - make SYS=sim6502 -C targettest - make SYS=sim6502 -C targettest clean - make SYS=sim65c02 -C targettest - make SYS=sim65c02 -C targettest clean - make SYS=supervision -C targettest - make SYS=supervision -C targettest clean - make SYS=sym1 -C targettest - make SYS=sym1 -C targettest clean - make SYS=telestrat -C targettest - make SYS=telestrat -C targettest clean - make SYS=vic20 -C targettest - make SYS=vic20 -C targettest clean + run: make -C targettest platforms - name: Build the document files. shell: bash run: make -j2 doc diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index c361b28b9..10aeace3c 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -29,9 +29,8 @@ jobs: run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release build_linux: - name: Build, Test and Snaphot (Linux) + name: Build, Test, and Snapshot (Linux) runs-on: ubuntu-latest - needs: build_windows steps: - name: Install Dependencies diff --git a/samples/Makefile b/samples/Makefile index 5b08d4bb0..18a663c1b 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -129,7 +129,7 @@ LDFLAGS_tgidemo_atarixl = --start-addr 0x4000 # -------------------------------------------------------------------------- # Generic rules -.PHONY: all mostlyclean clean install zip samples disk +.PHONY: samples all mostlyclean clean install zip disk platforms %: %.c %: %.s @@ -340,7 +340,7 @@ endif define SUBDIR_recipe -@$(MAKE) -C $(dir) --no-print-directory $@ +@+$(MAKE) -C $(dir) --no-print-directory $@ endef # SUBDIR_recipe @@ -360,6 +360,54 @@ disk: $(DISK_$(SYS)) all: +# -------------------------------------------------------------------------- +# List of every supported platform +TARGETS := \ + apple2 \ + apple2enh \ + atari \ + atarixl \ + atari2600 \ + atari5200 \ + atmos \ + bbc \ + c128 \ + c16 \ + c64 \ + cbm510 \ + cbm610 \ + creativision \ + cx16 \ + gamate \ + geos-apple \ + geos-cbm \ + lunix \ + lynx \ + nes \ + osic1p \ + pce \ + pet \ + plus4 \ + sim6502 \ + sim65c02 \ + supervision \ + sym1 \ + telestrat \ + vic20 + +# -------------------------------------------------------------------------- +# Rule to make the binaries for every platform + +define TARGET_recipe + +@$(MAKE) -j2 SYS:=$(T) +@$(MAKE) --no-print-directory clean SYS:=$(T) + +endef # TARGET_recipe + +platforms: + $(foreach T,$(TARGETS),$(TARGET_recipe)) + # -------------------------------------------------------------------------- # Overlay rules. Overlays need special ld65 configuration files. Also, the # overlay file-names are shortenned to fit the Atari's 8.3-character limit. diff --git a/targettest/Makefile b/targettest/Makefile index 55b4660fc..3e8698c34 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -108,7 +108,7 @@ DISK_atarixl = testcode.atr # -------------------------------------------------------------------------- # Generic rules -.PHONY: all mostlyclean clean zip testcode disk +.PHONY: testcode all mostlyclean clean zip disk platforms %: %.c %: %.s @@ -404,7 +404,7 @@ EXELIST_plus4 = \ strqtok-test \ uname-test -# omitted: seek clock-test mouse-test ser-test +# omitted: seek clock-test mouse-test ser-test EXELIST_vic20 = \ minimal \ arg-test \ @@ -616,7 +616,7 @@ EXELIST_nes = \ EXELIST_pce = \ minimal \ conio - + # omitted: arg-test clock-test clock cpeek-test conio cprintf deb dir-test div-test # em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test moddiv-test # mouse-test posixio-test rename-test scanf-test seek ser-test strdup-test strnlen @@ -659,7 +659,7 @@ EXELIST_sim6502 = \ scanf-test \ strnlen \ strqtok-test - + EXELIST_sim65c02 = $(EXELIST_sim6502) @@ -699,7 +699,7 @@ endif define SUBDIR_recipe -@$(MAKE) -C $(dir) --no-print-directory $@ +@+$(MAKE) -C $(dir) --no-print-directory $@ endef # SUBDIR_recipe @@ -719,6 +719,54 @@ disk: $(DISK_$(SYS)) all: +# -------------------------------------------------------------------------- +# List of every supported platform +TARGETS := \ + apple2 \ + apple2enh \ + atari \ + atarixl \ + atari2600 \ + atari5200 \ + atmos \ + bbc \ + c128 \ + c16 \ + c64 \ + cbm510 \ + cbm610 \ + creativision \ + cx16 \ + gamate \ + geos-apple \ + geos-cbm \ + lunix \ + lynx \ + nes \ + osic1p \ + pce \ + pet \ + plus4 \ + sim6502 \ + sim65c02 \ + supervision \ + sym1 \ + telestrat \ + vic20 + +# -------------------------------------------------------------------------- +# Rule to make the binaries for every platform + +define TARGET_recipe + +@$(MAKE) -j2 SYS:=$(T) +@$(MAKE) --no-print-directory clean SYS:=$(T) + +endef # TARGET_recipe + +platforms: + $(foreach T,$(TARGETS),$(TARGET_recipe)) + # -------------------------------------------------------------------------- # some programs link against getsp.o From bc46c90cfa936c7c4be753406d2fc90a687c8707 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 7 Feb 2022 14:09:27 -0500 Subject: [PATCH 1439/2710] Added '+' to another SUBDIRS_recipe. --- samples/geos/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/geos/Makefile b/samples/geos/Makefile index e792c52f1..04de0aaa3 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -50,7 +50,7 @@ DIRLIST = grc define SUBDIR_recipe -@$(MAKE) SYS=$(SYS) -C $(dir) --no-print-directory $@ +@+$(MAKE) SYS=$(SYS) -C $(dir) --no-print-directory $@ endef # SUBDIR_recipe From c138454bcc583cfd1a37536665ba5be5de0e4020 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 7 Feb 2022 14:14:30 -0500 Subject: [PATCH 1440/2710] Removed geos_apple and geos_cbm from the lists of targets. They need resource files to go with the program source files. The top-level samples and targettest programs don't have those resources. --- samples/Makefile | 2 -- targettest/Makefile | 2 -- 2 files changed, 4 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index 18a663c1b..5c44d1947 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -379,8 +379,6 @@ TARGETS := \ creativision \ cx16 \ gamate \ - geos-apple \ - geos-cbm \ lunix \ lynx \ nes \ diff --git a/targettest/Makefile b/targettest/Makefile index 3e8698c34..806f6b445 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -738,8 +738,6 @@ TARGETS := \ creativision \ cx16 \ gamate \ - geos-apple \ - geos-cbm \ lunix \ lynx \ nes \ From 648c8e21e346a1ea972040d1d54f6468d477fad7 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 11 Feb 2022 16:38:40 +0100 Subject: [PATCH 1441/2710] build utilities in a seperate step --- .github/workflows/build-on-pull-request.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 2203e43dd..6ab8543de 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -23,9 +23,10 @@ jobs: - name: Build the tools. shell: bash - run: | - make -j2 bin USER_CFLAGS=-Werror - make -j2 util + run: make -j2 bin USER_CFLAGS=-Werror + - name: Build the utilities. + shell: bash + run: make -j2 util - name: Build the platform libraries. shell: bash run: make -j2 lib QUIET=1 From 2628a176f98855b47e06de7e6d92f006a7c7b9cf Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 11 Feb 2022 16:53:34 +0100 Subject: [PATCH 1442/2710] attempt to prevent utils being compiled with cc65 --- util/atari/Makefile | 8 ++++++++ util/gamate/Makefile | 8 ++++++++ util/zlib/Makefile | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/util/atari/Makefile b/util/atari/Makefile index 28efeafa1..db4226f69 100644 --- a/util/atari/Makefile +++ b/util/atari/Makefile @@ -1,4 +1,12 @@ +CC = $(CROSS_COMPILE)gcc + +ifdef CROSS_COMPILE + $(info CC: $(CC)) +endif + +CFLAGS += -O3 -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) + .PHONY: mostlyclean clean atari: ataricvt diff --git a/util/gamate/Makefile b/util/gamate/Makefile index a6281de21..db2a1f059 100644 --- a/util/gamate/Makefile +++ b/util/gamate/Makefile @@ -1,4 +1,12 @@ +CC = $(CROSS_COMPILE)gcc + +ifdef CROSS_COMPILE + $(info CC: $(CC)) +endif + +CFLAGS += -O3 -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) + .PHONY: mostlyclean clean gamate: gamate-fixcart diff --git a/util/zlib/Makefile b/util/zlib/Makefile index 75c67fb26..3770e1f3c 100644 --- a/util/zlib/Makefile +++ b/util/zlib/Makefile @@ -1,4 +1,12 @@ +CC = $(CROSS_COMPILE)gcc + +ifdef CROSS_COMPILE + $(info CC: $(CC)) +endif + +CFLAGS += -O3 -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) + .PHONY: mostlyclean clean zlib: warning From 800568dd588ff813b9ea726f205cb6ac930b70aa Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 12 Feb 2022 04:48:47 -0500 Subject: [PATCH 1443/2710] Added code that avoids infinite loops that were caused by circular references (a symbol that was defined by referring to itself directly or indirectly). Patch by kugelfuhr. --- src/ca65/expr.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/ca65/expr.c b/src/ca65/expr.c index 8703b2a55..aad4d9ae5 100644 --- a/src/ca65/expr.c +++ b/src/ca65/expr.c @@ -171,6 +171,25 @@ int IsFarRange (long Val) +static const ExprNode* ResolveSymbolChain(const ExprNode* E) +/* Recursive helper function for IsEasyConst */ +{ + if (E->Op == EXPR_SYMBOL) { + SymEntry* Sym = E->V.Sym; + + if (Sym == 0 || Sym->Expr == 0 || SymHasUserMark (Sym)) { + return 0; + } else { + SymMarkUser (Sym); + E = ResolveSymbolChain (Sym->Expr); + SymUnmarkUser (Sym); + } + } + return E; +} + + + int IsEasyConst (const ExprNode* E, long* Val) /* Do some light checking if the given node is a constant. Don't care if E is ** a complex expression. If E is a constant, return true and place its value @@ -178,12 +197,10 @@ int IsEasyConst (const ExprNode* E, long* Val) */ { /* Resolve symbols, follow symbol chains */ - while (E->Op == EXPR_SYMBOL) { - E = SymResolve (E->V.Sym); - if (E == 0) { - /* Could not resolve */ - return 0; - } + E = ResolveSymbolChain (E); + if (E == 0) { + /* Could not resolve */ + return 0; } /* Symbols resolved, check for a literal */ From 879ed5bb9540403efae0a095ebcdcee818dbfeb3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Jan 2022 23:50:48 +0800 Subject: [PATCH 1444/2710] Fixed crash with labels in non-function/block scopes. --- src/cc65/declare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index c1346e872..8af67524f 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1485,7 +1485,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, ** long as it has no qualifiers. */ D->Flags |= DS_DEF_TYPE; - D->Type[0].C = T_QUAL_NONE; + D->Type[0].C = T_INT; D->Type[1].C = T_END; break; } From ace0bc414bab7e42bdf72f0400b62016e5481a1c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Jan 2022 23:54:14 +0800 Subject: [PATCH 1445/2710] Fixed anonymous bit-fields declared with typedef'ed type names. --- src/cc65/declare.c | 2 +- src/cc65/symtab.c | 95 +++++++++++++++++++++++++++++++++++++--------- src/cc65/symtab.h | 23 ++++++++++- 3 files changed, 100 insertions(+), 20 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 8af67524f..fa4c52818 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1462,7 +1462,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, case TOK_IDENT: /* This could be a label */ - if (NextTok.Tok != TOK_COLON) { + if (NextTok.Tok != TOK_COLON || GetLexicalLevel () == LEX_LEVEL_STRUCT) { Entry = FindSym (CurTok.Ident); if (Entry && SymIsTypeDef (Entry)) { /* It's a typedef */ diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 3de0bb460..c1c5c4696 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -88,7 +88,8 @@ SymTable EmptySymTab = { #define SYMTAB_SIZE_LABEL 7U /* The current and root symbol tables */ -static unsigned LexicalLevel = 0; /* For safety checks */ +static unsigned LexLevelDepth = 0; /* For safety checks */ +static LexicalLevel* CurrentLex = 0; static SymTable* SymTab0 = 0; static SymTable* SymTab = 0; static SymTable* TagTab0 = 0; @@ -213,10 +214,46 @@ static void CheckSymTable (SymTable* Tab) +unsigned GetLexicalLevelDepth (void) +/* Return the current lexical level depth */ +{ + return LexLevelDepth; +} + + + unsigned GetLexicalLevel (void) /* Return the current lexical level */ { - return LexicalLevel; + if (CurrentLex != 0) { + return CurrentLex->CurrentLevel; + } + return LEX_LEVEL_NONE; +} + + + +void PushLexicalLevel (unsigned NewLevel) +/* Enter the specified lexical level */ +{ + LexicalLevel* L = xmalloc (sizeof (LexicalLevel)); + L->PrevLex = CurrentLex; + CurrentLex = L; + CurrentLex->CurrentLevel = NewLevel; + ++LexLevelDepth; +} + + + +void PopLexicalLevel (void) +/* Exit the current lexical level */ +{ + LexicalLevel* L; + PRECONDITION (CurrentLex != 0 && LexLevelDepth > 0); + L = CurrentLex; + CurrentLex = L->PrevLex; + xfree (L); + --LexLevelDepth; } @@ -225,7 +262,10 @@ void EnterGlobalLevel (void) /* Enter the program global lexical level */ { /* Safety */ - PRECONDITION (++LexicalLevel == LEX_LEVEL_GLOBAL); + PRECONDITION (GetLexicalLevel () == LEX_LEVEL_NONE); + + /* Enter global lexical level */ + PushLexicalLevel (LEX_LEVEL_GLOBAL); /* Create and assign the symbol table */ SymTab0 = SymTab = NewSymTable (SYMTAB_SIZE_GLOBAL); @@ -246,7 +286,7 @@ void LeaveGlobalLevel (void) /* Leave the program global lexical level */ { /* Safety */ - PRECONDITION (LexicalLevel-- == LEX_LEVEL_GLOBAL); + PRECONDITION (GetLexicalLevel () == LEX_LEVEL_GLOBAL); /* Check the tables */ CheckSymTable (SymTab0); @@ -260,6 +300,9 @@ void LeaveGlobalLevel (void) /* Don't delete the symbol and struct tables! */ SymTab = 0; TagTab = 0; + + /* Exit global lexical level */ + PopLexicalLevel (); } @@ -269,8 +312,8 @@ void EnterFunctionLevel (void) { SymTable* S; - /* New lexical level */ - ++LexicalLevel; + /* Enter function lexical level */ + PushLexicalLevel (LEX_LEVEL_FUNCTION); /* Get a new symbol table and make it current */ S = NewSymTable (SYMTAB_SIZE_FUNCTION); @@ -293,8 +336,11 @@ void EnterFunctionLevel (void) void RememberFunctionLevel (struct FuncDesc* F) /* Remember the symbol tables for the level and leave the level without checks */ { - /* Leave the lexical level */ - --LexicalLevel; + /* Safety */ + PRECONDITION (GetLexicalLevel () == LEX_LEVEL_FUNCTION); + + /* Leave function lexical level */ + PopLexicalLevel (); /* Remember the tables */ F->SymTab = SymTab; @@ -311,8 +357,8 @@ void RememberFunctionLevel (struct FuncDesc* F) void ReenterFunctionLevel (struct FuncDesc* F) /* Reenter the function lexical level using the existing tables from F */ { - /* New lexical level */ - ++LexicalLevel; + /* Enter function lexical level */ + PushLexicalLevel (LEX_LEVEL_FUNCTION); /* Make the tables current again */ F->SymTab->PrevTab = SymTab; @@ -330,8 +376,11 @@ void ReenterFunctionLevel (struct FuncDesc* F) void LeaveFunctionLevel (void) /* Leave function lexical level */ { - /* Leave the lexical level */ - --LexicalLevel; + /* Safety */ + PRECONDITION (GetLexicalLevel () == LEX_LEVEL_FUNCTION); + + /* Leave function lexical level */ + PopLexicalLevel (); /* Check the tables */ CheckSymTable (SymTab); @@ -355,8 +404,8 @@ void EnterBlockLevel (void) { SymTable* S; - /* New lexical level */ - ++LexicalLevel; + /* Enter block lexical level */ + PushLexicalLevel (LEX_LEVEL_BLOCK); /* Get a new symbol table and make it current */ S = NewSymTable (SYMTAB_SIZE_BLOCK); @@ -374,8 +423,11 @@ void EnterBlockLevel (void) void LeaveBlockLevel (void) /* Leave a nested block in a function */ { - /* Leave the lexical level */ - --LexicalLevel; + /* Safety */ + PRECONDITION (GetLexicalLevel () == LEX_LEVEL_BLOCK); + + /* Leave block lexical level */ + PopLexicalLevel (); /* Check the tables */ CheckSymTable (SymTab); @@ -392,6 +444,9 @@ void EnterStructLevel (void) { SymTable* S; + /* Enter struct lexical level */ + PushLexicalLevel (LEX_LEVEL_STRUCT); + /* Get a new symbol table and make it current. Note: Structs and enums ** nested in struct scope are NOT local to the struct but visible in the ** outside scope. So we will NOT create a new struct or enum table. @@ -406,6 +461,12 @@ void EnterStructLevel (void) void LeaveStructLevel (void) /* Leave a nested block for a struct definition */ { + /* Safety */ + PRECONDITION (GetLexicalLevel () == LEX_LEVEL_STRUCT); + + /* Leave struct lexical level */ + PopLexicalLevel (); + /* Don't delete the table */ FieldTab = FieldTab->PrevTab; } @@ -1398,7 +1459,7 @@ void EmitDebugInfo (void) /* For cosmetic reasons in the output file, we will insert two tabs ** on global level and just one on local level. */ - if (LexicalLevel == LEX_LEVEL_GLOBAL) { + if (GetLexicalLevel () == LEX_LEVEL_GLOBAL) { Head = "\t.dbg\t\tsym"; } else { Head = "\t.dbg\tsym"; diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h index 469a4ba77..1df61a822 100644 --- a/src/cc65/symtab.h +++ b/src/cc65/symtab.h @@ -65,12 +65,22 @@ struct SymTable { /* An empty symbol table */ extern SymTable EmptySymTab; -/* Forwards */ -struct FuncDesc; +/* Lexical level linked list node type */ +typedef struct LexicalLevel LexicalLevel; +struct LexicalLevel { + LexicalLevel* PrevLex; + unsigned CurrentLevel; +}; /* Predefined lexical levels */ +#define LEX_LEVEL_NONE 0U #define LEX_LEVEL_GLOBAL 1U #define LEX_LEVEL_FUNCTION 2U +#define LEX_LEVEL_BLOCK 3U +#define LEX_LEVEL_STRUCT 4U + +/* Forwards */ +struct FuncDesc; @@ -80,9 +90,18 @@ struct FuncDesc; +unsigned GetLexicalLevelDepth (void); +/* Return the current lexical level depth */ + unsigned GetLexicalLevel (void); /* Return the current lexical level */ +void PushLexicalLevel (unsigned NewLevel); +/* Enter the specified lexical level */ + +void PopLexicalLevel (void); +/* Exit the current lexical level */ + void EnterGlobalLevel (void); /* Enter the program global lexical level */ From 479f450d1167ce933162d1020a85599f30fba523 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 14 Feb 2022 22:28:22 +0800 Subject: [PATCH 1446/2710] Testcase for #1662. --- test/val/bitfield.c | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/test/val/bitfield.c b/test/val/bitfield.c index 939d90dff..1de19777a 100644 --- a/test/val/bitfield.c +++ b/test/val/bitfield.c @@ -26,8 +26,10 @@ static unsigned char failures = 0; +typedef unsigned int field_type; + static struct four_bits { - unsigned int x : 4; + field_type x : 4; } fb = {1}; static void test_four_bits(void) @@ -57,8 +59,8 @@ static void test_four_bits(void) */ static struct four_bits_with_int { - unsigned int x : 4; - unsigned int y; + field_type x : 4; + field_type y; } fbi = {1, 2}; static void test_four_bits_with_int(void) @@ -95,8 +97,8 @@ static void test_four_bits_with_int(void) } static struct overlap { - unsigned int x : 10; - unsigned int y : 10; + field_type x : 10; + field_type y : 10; } o = {11, 22}; /* Tests that bit-fields can share allocation units. */ @@ -133,9 +135,9 @@ static void test_overlap(void) } static struct overlap_with_int { - unsigned int x : 10; - unsigned int y : 10; - unsigned int z; + field_type x : 10; + field_type y : 10; + field_type z; } oi = {111, 222, 333}; static void test_overlap_with_int(void) @@ -183,8 +185,8 @@ static void test_overlap_with_int(void) } static struct full_width { - unsigned int x : 8; - unsigned int y : 16; + field_type x : 8; + field_type y : 16; } fw = {255, 17}; static void test_full_width(void) @@ -220,13 +222,13 @@ static void test_full_width(void) } static struct aligned_end { - unsigned int : 2; - unsigned int x : 6; - unsigned int : 3; - unsigned int y : 13; + field_type : 2; + field_type x : 6; + field_type : 3; + field_type y : 13; /* z crosses a byte boundary, but fits in a byte when shifted. */ - unsigned int : 6; - unsigned int z : 7; + field_type : 6; + field_type z : 7; } ae = {63, 17, 100}; static void test_aligned_end(void) From 3b964c967472527a3a5f26fa416a6c88d2c419f4 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 15 Feb 2022 21:25:03 +0100 Subject: [PATCH 1447/2710] add hint on VICE -moncommands --- doc/debugging.sgml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/doc/debugging.sgml b/doc/debugging.sgml index a270d12c7..ce678601d 100644 --- a/doc/debugging.sgml +++ b/doc/debugging.sgml @@ -16,7 +16,7 @@ How to debug your code using the VICE and Oricutron emulators. <sect>Overview<p> This document describes how to debug your programs using the cc65 development -tools and the VICE CBM emulator. +tools and the VICE or Oricutron emulator. @@ -126,6 +126,12 @@ and you may use them wherever you need to specify an address. Try as an example (note that VICE needs a leading dot before all labels, and that the compiler prepends an underline under most named labels). +If you start the emulator from the commandline, you can also load the labels +directly using something like this: + +<tscreen><verb> + x64sc -moncommands hello.lbl hello.prg +</verb></tscreen> <sect>How to use the label file with Oricutron<p> @@ -144,8 +150,7 @@ and you may use them wherever you need to specify an address. Try d ._main </verb></tscreen> -as an example (note that VICE needs a leading dot before all labels, and that -the compiler prepends an underline under most named labels). +as an example. From e35f4fb48fc180568dff523d2cb68ea9bb519c44 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Tue, 15 Feb 2022 21:46:07 +0100 Subject: [PATCH 1448/2710] Invalid flagged errors if token is missing A missing factor in an expression causes an expected but missing token to be skipped, leading to invalid flagged errors in the following line: l = 3 + lda #$00 An error should be output for line 1, but not for line 2. Actually, both are flagged as errors: test.s(1): Error: Syntax error test.s(2): Error: Unexpected trailing garbage characters This patch (as proposed in issue #1634 by kugelfuhr) fixes this. --- src/ca65/expr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ca65/expr.c b/src/ca65/expr.c index aad4d9ae5..74133d533 100644 --- a/src/ca65/expr.c +++ b/src/ca65/expr.c @@ -1226,11 +1226,11 @@ static ExprNode* Factor (void) SB_GetLen (&CurTok.SVal) == 1) { /* A character constant */ N = GenLiteralExpr (TgtTranslateChar (SB_At (&CurTok.SVal, 0))); + NextTok (); } else { N = GenLiteral0 (); /* Dummy */ Error ("Syntax error"); } - NextTok (); break; } return N; From bfaa2b37e0193ce22a91b849060532e96aa72525 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Tue, 15 Feb 2022 22:16:06 +0100 Subject: [PATCH 1449/2710] Add link to DEB and RPM snapshots --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index b4d098dd3..efc0ff6a9 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ [Windows Snapshot](https://sourceforge.net/projects/cc65/files/cc65-snapshot-win32.zip) +[Linux Snapshot DEB and RPM](https://software.opensuse.org//download.html?project=home%3Astrik&package=cc65) + [Documentation](https://cc65.github.io/doc) [Wiki](https://github.com/cc65/wiki/wiki) From 77fa71994ff06a6c23ef9b19b6f1d23ac3e6cef1 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Tue, 15 Feb 2022 22:03:47 +0100 Subject: [PATCH 1450/2710] ca65: .constructor after .export fails The actor directives (.constructor, .destructor, .interruptor, and .condes) can't handle a symbol that's already exported. The relevant code does the checks in the wrong order. For example, the following correct snippet does not assemble: .export C C: .constructor C, 5 The assembler outputs: test.s:2: Error: Address size mismatch for symbol 'C' Exchanging both lines makes it work. This fixes #1647; the patch is provided by 'kugelfuhr' and taken from there. --- src/ca65/symentry.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/ca65/symentry.c b/src/ca65/symentry.c index cf789da5e..1048bfbc2 100644 --- a/src/ca65/symentry.c +++ b/src/ca65/symentry.c @@ -546,6 +546,18 @@ void SymConDes (SymEntry* S, unsigned char AddrSize, unsigned Type, unsigned Pri return; } + /* If the symbol is already defined, check symbol size against the + ** exported size. + */ + if (S->Flags & SF_DEFINED) { + if (AddrSize == ADDR_SIZE_DEFAULT) { + /* Use the real size of the symbol */ + AddrSize = S->AddrSize; + } else if (S->AddrSize != AddrSize) { + Error ("Address size mismatch for symbol '%m%p'", GetSymName (S)); + } + } + /* If the symbol was already marked as an export or global, check if ** this was done specifiying the same address size. In case of a global ** declaration, silently remove the global flag. @@ -558,18 +570,6 @@ void SymConDes (SymEntry* S, unsigned char AddrSize, unsigned Type, unsigned Pri } S->ExportSize = AddrSize; - /* If the symbol is already defined, check symbol size against the - ** exported size. - */ - if (S->Flags & SF_DEFINED) { - if (S->ExportSize == ADDR_SIZE_DEFAULT) { - /* Use the real size of the symbol */ - S->ExportSize = S->AddrSize; - } else if (S->AddrSize != S->ExportSize) { - Error ("Address size mismatch for symbol '%m%p'", GetSymName (S)); - } - } - /* If the symbol already was declared as a condes of this type, ** check if the new priority value is the same as the old one. */ From e4f38f4476ead6f80ef5df7dd7fcb5295efccf84 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Thu, 17 Feb 2022 00:30:31 -0500 Subject: [PATCH 1451/2710] Made the snapshot-on-push Github action run on only the upstream repository. --- .github/workflows/snapshot-on-push-master.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 10aeace3c..48a63a12c 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -10,6 +10,7 @@ concurrency: jobs: build_windows: name: Build (Windows) + if: github.repository == 'cc65/cc65' runs-on: windows-latest steps: @@ -30,6 +31,7 @@ jobs: build_linux: name: Build, Test, and Snapshot (Linux) + if: github.repository == 'cc65/cc65' runs-on: ubuntu-latest steps: From 14b27f8317f4ce968e261a69dd58eac130465e98 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 20 Feb 2022 16:49:01 +0100 Subject: [PATCH 1452/2710] do not use cl65 to prevent tests from failing randomly because of one process deleting the temp files from another --- targettest/accelerator/Makefile | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/targettest/accelerator/Makefile b/targettest/accelerator/Makefile index a46ec43c0..bcddac1fa 100644 --- a/targettest/accelerator/Makefile +++ b/targettest/accelerator/Makefile @@ -1,3 +1,7 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= c64 + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -54,10 +58,18 @@ else endif c64-scpu-test.prg: c64-c128-scpu-test.c - $(CL) -t c64 c64-c128-scpu-test.c -o c64-scpu-test.prg +# do not use cl65 to prevent tests from failing randomly because of one process +# deleting the temp files from another +# $(CL) -t c64 c64-c128-scpu-test.c -o c64-scpu-test.prg + $(CC) -t c64 c64-c128-scpu-test.c -o c64-scpu-test.s + $(CL) -t c64 c64-scpu-test.s -o c64-scpu-test.prg c128-scpu-test.prg: c64-c128-scpu-test.c - $(CL) -t c128 c64-c128-scpu-test.c -o c128-scpu-test.prg +# do not use cl65 to prevent tests from failing randomly because of one process +# deleting the temp files from another +# $(CL) -t c128 c64-c128-scpu-test.c -o c128-scpu-test.prg + $(CC) -t c128 c64-c128-scpu-test.c -o c128-scpu-test.s + $(CL) -t c128 c128-scpu-test.s -o c128-scpu-test.prg c64dtv-test.prg: c64dtv-test.c $(CL) -t c64 c64dtv-test.c -o c64dtv-test.prg @@ -79,3 +91,4 @@ turbomaster-test.prg: turbomaster-test.c clean: @$(DEL) *.prg 2>$(NULLDEV) + @$(DEL) *.s 2>$(NULLDEV) From 2edd9543ce560660bb8ca4e93e3963c461e3e475 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Sat, 19 Feb 2022 12:44:20 +0100 Subject: [PATCH 1453/2710] Reorganized test/asm --- test/asm/Makefile | 71 +++----------- test/asm/{ => cpudetect}/4510-cpudetect.ref | Bin test/asm/{ => cpudetect}/6502-cpudetect.ref | Bin .../asm/{ => cpudetect}/6502dtv-cpudetect.ref | Bin test/asm/{ => cpudetect}/6502x-cpudetect.ref | Bin test/asm/{ => cpudetect}/65816-cpudetect.ref | Bin test/asm/{ => cpudetect}/65c02-cpudetect.ref | Bin test/asm/{ => cpudetect}/65sc02-cpudetect.ref | Bin test/asm/cpudetect/Makefile | 61 ++++++++++++ test/asm/{ => cpudetect}/cpudetect.s | 0 .../asm/{ => cpudetect}/huc6280-cpudetect.ref | Bin test/asm/listing/Makefile | 89 ++++++++++++++++++ test/asm/{ => listing}/paramcount.s | 0 test/asm/{ => opcodes}/4510-opcodes.ref | Bin test/asm/{ => opcodes}/4510-opcodes.s | 0 test/asm/{ => opcodes}/6502-opcodes.ref | Bin test/asm/{ => opcodes}/6502-opcodes.s | 0 test/asm/{ => opcodes}/6502dtv-opcodes.ref | Bin test/asm/{ => opcodes}/6502dtv-opcodes.s | 0 test/asm/{ => opcodes}/6502x-opcodes.ref | Bin test/asm/{ => opcodes}/6502x-opcodes.s | 0 test/asm/{ => opcodes}/65c02-opcodes.ref | Bin test/asm/{ => opcodes}/65c02-opcodes.s | 0 test/asm/{ => opcodes}/65sc02-opcodes.ref | Bin test/asm/{ => opcodes}/65sc02-opcodes.s | 0 test/asm/opcodes/Makefile | 61 ++++++++++++ test/asm/{ => opcodes}/huc6280-opcodes.ref | Bin test/asm/{ => opcodes}/huc6280-opcodes.s | 0 test/asm/{ => opcodes}/m740-opcodes.s | 0 29 files changed, 225 insertions(+), 57 deletions(-) rename test/asm/{ => cpudetect}/4510-cpudetect.ref (100%) rename test/asm/{ => cpudetect}/6502-cpudetect.ref (100%) rename test/asm/{ => cpudetect}/6502dtv-cpudetect.ref (100%) rename test/asm/{ => cpudetect}/6502x-cpudetect.ref (100%) rename test/asm/{ => cpudetect}/65816-cpudetect.ref (100%) rename test/asm/{ => cpudetect}/65c02-cpudetect.ref (100%) rename test/asm/{ => cpudetect}/65sc02-cpudetect.ref (100%) create mode 100644 test/asm/cpudetect/Makefile rename test/asm/{ => cpudetect}/cpudetect.s (100%) rename test/asm/{ => cpudetect}/huc6280-cpudetect.ref (100%) create mode 100644 test/asm/listing/Makefile rename test/asm/{ => listing}/paramcount.s (100%) rename test/asm/{ => opcodes}/4510-opcodes.ref (100%) rename test/asm/{ => opcodes}/4510-opcodes.s (100%) rename test/asm/{ => opcodes}/6502-opcodes.ref (100%) rename test/asm/{ => opcodes}/6502-opcodes.s (100%) rename test/asm/{ => opcodes}/6502dtv-opcodes.ref (100%) rename test/asm/{ => opcodes}/6502dtv-opcodes.s (100%) rename test/asm/{ => opcodes}/6502x-opcodes.ref (100%) rename test/asm/{ => opcodes}/6502x-opcodes.s (100%) rename test/asm/{ => opcodes}/65c02-opcodes.ref (100%) rename test/asm/{ => opcodes}/65c02-opcodes.s (100%) rename test/asm/{ => opcodes}/65sc02-opcodes.ref (100%) rename test/asm/{ => opcodes}/65sc02-opcodes.s (100%) create mode 100644 test/asm/opcodes/Makefile rename test/asm/{ => opcodes}/huc6280-opcodes.ref (100%) rename test/asm/{ => opcodes}/huc6280-opcodes.s (100%) rename test/asm/{ => opcodes}/m740-opcodes.s (100%) diff --git a/test/asm/Makefile b/test/asm/Makefile index e951c2015..d722c47db 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -1,77 +1,34 @@ -# Makefile for the assembler regression tests +# top-level Makefile for the regression tests ifneq ($(shell echo),) CMD_EXE = 1 endif ifdef CMD_EXE - EXE = .exe - MKDIR = mkdir $(subst /,\,$1) - RMDIR = -rmdir /q /s $(subst /,\,$1) + RMDIR = -rmdir /s /q $(subst /,\,$1) else - EXE = - MKDIR = mkdir -p $1 RMDIR = $(RM) -r $1 endif -ifdef QUIET - .SILENT: -endif +WORKDIR = ../testwrk/asm -CA65 := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) -LD65 := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) +SUBDIRS = cpudetect opcodes listing -WORKDIR = ../../testwrk/asm +.PHONY: test continue mostlyclean clean -ISEQUAL = ../../testwrk/isequal$(EXE) +test: mostlyclean continue -CC = gcc -CFLAGS = -O2 +define CALL_template -.PHONY: all clean +continue:: + @$(MAKE) -C $1 all -OPCODE_REFS := $(wildcard *-opcodes.ref) -OPCODE_BINS = $(OPCODE_REFS:%.ref=$(WORKDIR)/%.bin) -OPCODE_CPUS = $(OPCODE_REFS:%-opcodes.ref=%) +mostlyclean:: + @$(MAKE) -C $1 clean -CPUDETECT_REFS := $(wildcard *-cpudetect.ref) -CPUDETECT_BINS = $(CPUDETECT_REFS:%.ref=$(WORKDIR)/%.bin) -CPUDETECT_CPUS = $(CPUDETECT_REFS:%-cpudetect.ref=%) +endef -all: $(OPCODE_BINS) $(CPUDETECT_BINS) $(WORKDIR)/paramcount.o +$(foreach subdir,$(SUBDIRS),$(eval $(call CALL_template,$(subdir)))) -$(WORKDIR): - $(call MKDIR,$(WORKDIR)) - -$(ISEQUAL): ../isequal.c | $(WORKDIR) - $(CC) $(CFLAGS) -o $@ $< - -define OPCODE_template - -$(WORKDIR)/$1-opcodes.bin: $1-opcodes.s $(ISEQUAL) - $(if $(QUIET),echo asm/$1-opcodes.bin) - $(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$< - $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib - $(ISEQUAL) $1-opcodes.ref $$@ - -endef # OPCODE_template - -$(foreach cpu,$(OPCODE_CPUS),$(eval $(call OPCODE_template,$(cpu)))) - -define CPUDETECT_template - -$(WORKDIR)/$1-cpudetect.bin: cpudetect.s $1-cpudetect.ref $(ISEQUAL) - $(if $(QUIET),echo asm/$1-cpudetect.bin) - $(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$< - $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib - $(ISEQUAL) $1-cpudetect.ref $$@ - -endef # CPUDETECT_template - -$(foreach cpu,$(CPUDETECT_CPUS),$(eval $(call CPUDETECT_template,$(cpu)))) - -$(WORKDIR)/%.o: %.s | $(WORKDIR) - $(CA65) -l $(@:.o=.lst) -o $@ $< - -clean: +clean: mostlyclean @$(call RMDIR,$(WORKDIR)) diff --git a/test/asm/4510-cpudetect.ref b/test/asm/cpudetect/4510-cpudetect.ref similarity index 100% rename from test/asm/4510-cpudetect.ref rename to test/asm/cpudetect/4510-cpudetect.ref diff --git a/test/asm/6502-cpudetect.ref b/test/asm/cpudetect/6502-cpudetect.ref similarity index 100% rename from test/asm/6502-cpudetect.ref rename to test/asm/cpudetect/6502-cpudetect.ref diff --git a/test/asm/6502dtv-cpudetect.ref b/test/asm/cpudetect/6502dtv-cpudetect.ref similarity index 100% rename from test/asm/6502dtv-cpudetect.ref rename to test/asm/cpudetect/6502dtv-cpudetect.ref diff --git a/test/asm/6502x-cpudetect.ref b/test/asm/cpudetect/6502x-cpudetect.ref similarity index 100% rename from test/asm/6502x-cpudetect.ref rename to test/asm/cpudetect/6502x-cpudetect.ref diff --git a/test/asm/65816-cpudetect.ref b/test/asm/cpudetect/65816-cpudetect.ref similarity index 100% rename from test/asm/65816-cpudetect.ref rename to test/asm/cpudetect/65816-cpudetect.ref diff --git a/test/asm/65c02-cpudetect.ref b/test/asm/cpudetect/65c02-cpudetect.ref similarity index 100% rename from test/asm/65c02-cpudetect.ref rename to test/asm/cpudetect/65c02-cpudetect.ref diff --git a/test/asm/65sc02-cpudetect.ref b/test/asm/cpudetect/65sc02-cpudetect.ref similarity index 100% rename from test/asm/65sc02-cpudetect.ref rename to test/asm/cpudetect/65sc02-cpudetect.ref diff --git a/test/asm/cpudetect/Makefile b/test/asm/cpudetect/Makefile new file mode 100644 index 000000000..ffddb1ad8 --- /dev/null +++ b/test/asm/cpudetect/Makefile @@ -0,0 +1,61 @@ +# Makefile for the assembler regression tests + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + EXE = .exe + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /q /s $(subst /,\,$1) +else + EXE = + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +ifdef QUIET + .SILENT: +endif + +CA65 := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) +LD65 := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + +WORKDIR = ../../../testwrk/asm/cpudetect + +ISEQUAL = ../../../testwrk/isequal$(EXE) + +CC = gcc +CFLAGS = -O2 + +.PHONY: all clean + +CPUDETECT_REFS := $(wildcard *-cpudetect.ref) +CPUDETECT_BINS = $(CPUDETECT_REFS:%.ref=$(WORKDIR)/%.bin) +CPUDETECT_CPUS = $(CPUDETECT_REFS:%-cpudetect.ref=%) + +all: $(CPUDETECT_BINS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +$(ISEQUAL): ../../isequal.c | $(WORKDIR) + $(CC) $(CFLAGS) -o $@ $< + +define CPUDETECT_template + +$(WORKDIR)/$1-cpudetect.bin: cpudetect.s $1-cpudetect.ref $(ISEQUAL) + $(if $(QUIET),echo asm/$1-cpudetect.bin) + $(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$< + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib + $(ISEQUAL) $1-cpudetect.ref $$@ + +endef # CPUDETECT_template + +$(foreach cpu,$(CPUDETECT_CPUS),$(eval $(call CPUDETECT_template,$(cpu)))) + +$(WORKDIR)/%.o: %.s | $(WORKDIR) + $(CA65) -l $(@:.o=.lst) -o $@ $< + +clean: + @$(call RMDIR,$(WORKDIR)) diff --git a/test/asm/cpudetect.s b/test/asm/cpudetect/cpudetect.s similarity index 100% rename from test/asm/cpudetect.s rename to test/asm/cpudetect/cpudetect.s diff --git a/test/asm/huc6280-cpudetect.ref b/test/asm/cpudetect/huc6280-cpudetect.ref similarity index 100% rename from test/asm/huc6280-cpudetect.ref rename to test/asm/cpudetect/huc6280-cpudetect.ref diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile new file mode 100644 index 000000000..f4a7df81c --- /dev/null +++ b/test/asm/listing/Makefile @@ -0,0 +1,89 @@ +# Makefile for the assembler regression tests + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + EXE = .exe + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /q /s $(subst /,\,$1) +else + EXE = + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +ifdef QUIET + .SILENT: +endif + +CA65 := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) +LD65 := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + +WORKDIR = ../../../testwrk/asm/listing + +ISEQUAL = ../../../testwrk/isequal$(EXE) + +CC = gcc +CFLAGS = -O2 + +.PHONY: all clean + +LISTING_SRC := $(wildcard *.s) +LISTING_TESTS = $(LISTING_SRC:%.s=%) +LISTING_BINS = $(LISTING_SRC:%.s=$(WORKDIR)/%.bin) + +all: $(LISTING_BINS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +$(ISEQUAL): ../../isequal.c | $(WORKDIR) + $(CC) $(CFLAGS) -o $@ $< + + +define LISTING_template + +$(WORKDIR)/$1.bin: $1.s $(ISEQUAL) + $(if $(QUIET),echo asm/$1.bin) + + # compile without generating listing + $(CA65) -t none -o $$(@:.bin=.o) $$< + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib + +ifneq ($(wildcard $1.bin-ref),) + $(ISEQUAL) $1.bin-ref $$@ +endif + + $(CA65) -t none -l $$(@:.bin=.list.orig) -o $$(@:.bin=.list-o) $$< + $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib + + # check if the result bin is the same as without listing file + $(ISEQUAL) $$@ $$(@:.bin=.list-bin) + +ifneq ($(wildcard $1.list-ref),) + # we have a reference file, compare that, too + + # remove first line which contains a version number + tail -n +2 $$(@:.bin=.lst.orig) > $$(@:.bin=.lst) + $(ISEQUAL) $1.list-ref $$(@:.bin=.lst) +endif + +# $(CA65) -t none -f -l $$(@:.bin=.flist.orig) -o $$(@:.bin=.flist-o) $$< +# $(LD65) -t none -o $$(@:.bin=.flist-bin) $$(@:.bin=.flist-o) none.lib + +# # check if the result bin is the same as without listing file +# $(ISEQUAL) $$@ $$(@:.bin=.flist-bin) + +endef # LISTING_template + + +$(foreach listing,$(LISTING_TESTS),$(eval $(call LISTING_template,$(listing)))) + + +$(WORKDIR)/%.o: %.s | $(WORKDIR) + $(CA65) -l $(@:.o=.lst) -o $@ $< + +clean: + @$(call RMDIR,$(WORKDIR)) diff --git a/test/asm/paramcount.s b/test/asm/listing/paramcount.s similarity index 100% rename from test/asm/paramcount.s rename to test/asm/listing/paramcount.s diff --git a/test/asm/4510-opcodes.ref b/test/asm/opcodes/4510-opcodes.ref similarity index 100% rename from test/asm/4510-opcodes.ref rename to test/asm/opcodes/4510-opcodes.ref diff --git a/test/asm/4510-opcodes.s b/test/asm/opcodes/4510-opcodes.s similarity index 100% rename from test/asm/4510-opcodes.s rename to test/asm/opcodes/4510-opcodes.s diff --git a/test/asm/6502-opcodes.ref b/test/asm/opcodes/6502-opcodes.ref similarity index 100% rename from test/asm/6502-opcodes.ref rename to test/asm/opcodes/6502-opcodes.ref diff --git a/test/asm/6502-opcodes.s b/test/asm/opcodes/6502-opcodes.s similarity index 100% rename from test/asm/6502-opcodes.s rename to test/asm/opcodes/6502-opcodes.s diff --git a/test/asm/6502dtv-opcodes.ref b/test/asm/opcodes/6502dtv-opcodes.ref similarity index 100% rename from test/asm/6502dtv-opcodes.ref rename to test/asm/opcodes/6502dtv-opcodes.ref diff --git a/test/asm/6502dtv-opcodes.s b/test/asm/opcodes/6502dtv-opcodes.s similarity index 100% rename from test/asm/6502dtv-opcodes.s rename to test/asm/opcodes/6502dtv-opcodes.s diff --git a/test/asm/6502x-opcodes.ref b/test/asm/opcodes/6502x-opcodes.ref similarity index 100% rename from test/asm/6502x-opcodes.ref rename to test/asm/opcodes/6502x-opcodes.ref diff --git a/test/asm/6502x-opcodes.s b/test/asm/opcodes/6502x-opcodes.s similarity index 100% rename from test/asm/6502x-opcodes.s rename to test/asm/opcodes/6502x-opcodes.s diff --git a/test/asm/65c02-opcodes.ref b/test/asm/opcodes/65c02-opcodes.ref similarity index 100% rename from test/asm/65c02-opcodes.ref rename to test/asm/opcodes/65c02-opcodes.ref diff --git a/test/asm/65c02-opcodes.s b/test/asm/opcodes/65c02-opcodes.s similarity index 100% rename from test/asm/65c02-opcodes.s rename to test/asm/opcodes/65c02-opcodes.s diff --git a/test/asm/65sc02-opcodes.ref b/test/asm/opcodes/65sc02-opcodes.ref similarity index 100% rename from test/asm/65sc02-opcodes.ref rename to test/asm/opcodes/65sc02-opcodes.ref diff --git a/test/asm/65sc02-opcodes.s b/test/asm/opcodes/65sc02-opcodes.s similarity index 100% rename from test/asm/65sc02-opcodes.s rename to test/asm/opcodes/65sc02-opcodes.s diff --git a/test/asm/opcodes/Makefile b/test/asm/opcodes/Makefile new file mode 100644 index 000000000..00be96d91 --- /dev/null +++ b/test/asm/opcodes/Makefile @@ -0,0 +1,61 @@ +# Makefile for the assembler regression tests + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + EXE = .exe + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /q /s $(subst /,\,$1) +else + EXE = + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +ifdef QUIET + .SILENT: +endif + +CA65 := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) +LD65 := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) + +WORKDIR = ../../../testwrk/asm/opcodes + +ISEQUAL = ../../../testwrk/isequal$(EXE) + +CC = gcc +CFLAGS = -O2 + +.PHONY: all clean + +OPCODE_REFS := $(wildcard *-opcodes.ref) +OPCODE_BINS = $(OPCODE_REFS:%.ref=$(WORKDIR)/%.bin) +OPCODE_CPUS = $(OPCODE_REFS:%-opcodes.ref=%) + +all: $(OPCODE_BINS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +$(ISEQUAL): ../../isequal.c | $(WORKDIR) + $(CC) $(CFLAGS) -o $@ $< + +define OPCODE_template + +$(WORKDIR)/$1-opcodes.bin: $1-opcodes.s $(ISEQUAL) + $(if $(QUIET),echo asm/$1-opcodes.bin) + $(CA65) -t none --cpu $1 -l $$(@:.bin=.lst) -o $$(@:.bin=.o) $$< + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib + $(ISEQUAL) $1-opcodes.ref $$@ + +endef # OPCODE_template + +$(foreach cpu,$(OPCODE_CPUS),$(eval $(call OPCODE_template,$(cpu)))) + +$(WORKDIR)/%.o: %.s | $(WORKDIR) + $(CA65) -l $(@:.o=.lst) -o $@ $< + +clean: + @$(call RMDIR,$(WORKDIR)) diff --git a/test/asm/huc6280-opcodes.ref b/test/asm/opcodes/huc6280-opcodes.ref similarity index 100% rename from test/asm/huc6280-opcodes.ref rename to test/asm/opcodes/huc6280-opcodes.ref diff --git a/test/asm/huc6280-opcodes.s b/test/asm/opcodes/huc6280-opcodes.s similarity index 100% rename from test/asm/huc6280-opcodes.s rename to test/asm/opcodes/huc6280-opcodes.s diff --git a/test/asm/m740-opcodes.s b/test/asm/opcodes/m740-opcodes.s similarity index 100% rename from test/asm/m740-opcodes.s rename to test/asm/opcodes/m740-opcodes.s From e85d7756a6015ae0eb197552863147658ccd6649 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Sat, 19 Feb 2022 12:52:02 +0100 Subject: [PATCH 1454/2710] Rename target test to asm --- test/asm/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/asm/Makefile b/test/asm/Makefile index d722c47db..b35c30c9f 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -14,9 +14,9 @@ WORKDIR = ../testwrk/asm SUBDIRS = cpudetect opcodes listing -.PHONY: test continue mostlyclean clean +.PHONY: all continue mostlyclean clean -test: mostlyclean continue +all: mostlyclean continue define CALL_template From 49bf32dc063942dd9407650f848c6473efaee50d Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Sun, 20 Feb 2022 11:20:20 +0100 Subject: [PATCH 1455/2710] Add proper readmes --- test/asm/cpudetect/readme.txt | 15 ++++++++++++++ test/asm/listing/readme.txt | 27 +++++++++++++++++++++++++ test/asm/opcodes/readme.txt | 29 ++++++++++++++++++++++++++ test/asm/readme.txt | 38 +++++------------------------------ 4 files changed, 76 insertions(+), 33 deletions(-) create mode 100644 test/asm/cpudetect/readme.txt create mode 100644 test/asm/listing/readme.txt create mode 100644 test/asm/opcodes/readme.txt diff --git a/test/asm/cpudetect/readme.txt b/test/asm/cpudetect/readme.txt new file mode 100644 index 000000000..6a1adf480 --- /dev/null +++ b/test/asm/cpudetect/readme.txt @@ -0,0 +1,15 @@ +CPU Detect Tests +---------------- + +These tests all assemble the same file "cpudetect.s" which contains several +conditionals for several CPUs, only using every option known to the "--cpu" +command-line switch of ca65/cl65. + +Reference (".ref") Files +------------------------ + +Some hints about creating new files: +Make an empty file with the CPU's name prepended to "-cpudetect.ref". Run the +tests; one of them will fail due to a mismatch. Review the output of the +".lst" file pedantically, then copy the ".bin" over the empty ".ref" file. + diff --git a/test/asm/listing/readme.txt b/test/asm/listing/readme.txt new file mode 100644 index 000000000..e43f2008a --- /dev/null +++ b/test/asm/listing/readme.txt @@ -0,0 +1,27 @@ +Overall test: +------------- + +These testcases can be used to test different aspects of the assembler. +The name of a test is everything in the form <test>.s. + +The following reference files can be added: + +- <test>.bin-ref: + This is a reference for the resulting binary. + The binary as binary tested against this file. + If they are not equal, the test fails. + +- <test>.list-ref + This is a reference for the resulting listing output + This file *must* have the first line of the listing removed, as that + contains a ca65 version string, and almost always this will be changed! + + +Note that the resulting .bin file is generated twice: Once with no listing +file, and once with listing file. This way, one can find out if the listing +file generation changes anything with the resulting binary output. + + +TODO: +- add the possibility to test for specific error output that are to be + expected diff --git a/test/asm/opcodes/readme.txt b/test/asm/opcodes/readme.txt new file mode 100644 index 000000000..098dd549a --- /dev/null +++ b/test/asm/opcodes/readme.txt @@ -0,0 +1,29 @@ +Opcode Tests: +------------- + +These testcases are inspired by the ones now removed from test/assembler. +The main purpose is to have each possible opcode generated at least once, +either by an Assembly instruction or a ".byte"-placeholder. Typically +generated by disassembling a binary dump that contains data in the form +of the pattern that each opcode is stated once in order followed by easy +to recognise: + +00 00 EA 00 +01 00 EA 00 +02 00 EA 00 +[...] +fe 00 EA 00 +ff 00 EA 00 + +The disassembly is then put in a better readable form by replacing the +leftover dummy opcode parameters with something more recognizable. + +The testcases for 6502, 6502x, 65sc02, 65c02, 4510, and huc6280 have been +put together by Sven Oliver ("SvOlli") Moll, as well as a template for the +m740 instructions set. Later 6502dtv support was also added. + +Still to do is to find a way to implement an opcode testcase for the 65816 +processor, since it's capable of executing instructions with an 8-bit and +a 16-bit operator alike, distinguished by only one processor flag. + + diff --git a/test/asm/readme.txt b/test/asm/readme.txt index 1d135c895..18354bb47 100644 --- a/test/asm/readme.txt +++ b/test/asm/readme.txt @@ -4,44 +4,16 @@ Assembler Testcases Opcode Tests: ------------- -These testcases are inspired by the ones now removed from test/assembler. -The main purpose is to have each possible opcode generated at least once, -either by an Assembly instruction or a ".byte"-placeholder. Typically -generated by disassembling a binary dump that contains data in the form -of the pattern that each opcode is stated once in order followed by easy -to recognise: - -00 00 EA 00 -01 00 EA 00 -02 00 EA 00 -[...] -fe 00 EA 00 -ff 00 EA 00 - -The disassembly is then put in a better readable form by replacing the -leftover dummy opcode parameters with something more recognizable. - -The testcases for 6502, 6502x, 65sc02, 65c02, 4510, and huc6280 have been -put together by Sven Oliver ("SvOlli") Moll, as well as a template for the -m740 instructions set. Later 6502dtv support was also added. - -Still to do is to find a way to implement an opcode testcase for the 65816 -processor, since it's capable of executing instructions with an 8-bit and -a 16-bit operator alike, distinguished by only one processor flag. +these go into opcodes/. Refer to opcodes/readme.txt CPU Detect Tests ---------------- -These tests all assemble the same file "cpudetect.s" which contains several -conditionals for several CPUs, only using every option known to the "--cpu" -command-line switch of ca65/cl65. +these go into cpudetect/. Refer to cpudetect/readme.txt -Reference (".ref") Files ------------------------- +Overall tests: +-------------- -Some hints about creating new files: -Make an empty file with the CPU's name prepended to "-cpudetect.ref". Run the -tests; one of them will fail due to a mismatch. Review the output of the -".lst" file pedantically, then copy the ".bin" over the empty ".ref" file. +These go into listing/. Refer to listing/readme.txt From 9dcd7f8858cd00e6dd3ba8fb143bba432d256b42 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 21 Feb 2022 15:46:13 -0500 Subject: [PATCH 1456/2710] Reverted "do not use cl65 to prevent tests from failing randomly because of one process deleting the temp files from another". This reverted commit 02a46e02379dbeb86dc6b44bbcfa6d6fa1267528. That commit didn't fix the real bug (a program name in the wrong list). --- targettest/accelerator/Makefile | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/targettest/accelerator/Makefile b/targettest/accelerator/Makefile index bcddac1fa..a46ec43c0 100644 --- a/targettest/accelerator/Makefile +++ b/targettest/accelerator/Makefile @@ -1,7 +1,3 @@ -# Run 'make SYS=<target>'; or, set a SYS env. -# var. to build for another target system. -SYS ?= c64 - # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -58,18 +54,10 @@ else endif c64-scpu-test.prg: c64-c128-scpu-test.c -# do not use cl65 to prevent tests from failing randomly because of one process -# deleting the temp files from another -# $(CL) -t c64 c64-c128-scpu-test.c -o c64-scpu-test.prg - $(CC) -t c64 c64-c128-scpu-test.c -o c64-scpu-test.s - $(CL) -t c64 c64-scpu-test.s -o c64-scpu-test.prg + $(CL) -t c64 c64-c128-scpu-test.c -o c64-scpu-test.prg c128-scpu-test.prg: c64-c128-scpu-test.c -# do not use cl65 to prevent tests from failing randomly because of one process -# deleting the temp files from another -# $(CL) -t c128 c64-c128-scpu-test.c -o c128-scpu-test.prg - $(CC) -t c128 c64-c128-scpu-test.c -o c128-scpu-test.s - $(CL) -t c128 c128-scpu-test.s -o c128-scpu-test.prg + $(CL) -t c128 c64-c128-scpu-test.c -o c128-scpu-test.prg c64dtv-test.prg: c64dtv-test.c $(CL) -t c64 c64dtv-test.c -o c64dtv-test.prg @@ -91,4 +79,3 @@ turbomaster-test.prg: turbomaster-test.c clean: @$(DEL) *.prg 2>$(NULLDEV) - @$(DEL) *.s 2>$(NULLDEV) From cac1e263723a03195fa50a242cf47bc703c515bc Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 21 Feb 2022 16:07:22 -0500 Subject: [PATCH 1457/2710] Made the c128, not the c64, target build the c128 version of "c64-c128-scpu-test.c". Its placement in the wrong list caused a parallel race condition that sometimes led to failed test builds. --- targettest/accelerator/Makefile | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/targettest/accelerator/Makefile b/targettest/accelerator/Makefile index a46ec43c0..dd5011459 100644 --- a/targettest/accelerator/Makefile +++ b/targettest/accelerator/Makefile @@ -1,3 +1,7 @@ +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= c64 + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -28,16 +32,16 @@ endif EXELIST_c64 = \ c64-scpu-test.prg \ - c128-scpu-test.prg \ c64dtv-test.prg \ - c64-c128-test.prg \ + c64-test.prg \ chameleon-test.prg \ c65-test.prg \ turbomaster-test.prg - + EXELIST_c128 = \ + c128-scpu-test.prg \ c128-test.prg - + ifneq ($(EXELIST_$(SYS)),) testcode: $(EXELIST_$(SYS)) else @@ -62,8 +66,8 @@ c128-scpu-test.prg: c64-c128-scpu-test.c c64dtv-test.prg: c64dtv-test.c $(CL) -t c64 c64dtv-test.c -o c64dtv-test.prg -c64-c128-test.prg: c64-c128-test.c - $(CL) -t c64 c64-c128-test.c -o c64-c128-test.prg +c64-test.prg: c64-c128-test.c + $(CL) -t c64 c64-c128-test.c -o c64-test.prg c128-test.prg: c64-c128-test.c $(CL) -t c128 c64-c128-test.c -o c128-test.prg From ba13ba32a17ccaafc90ebd2c9e0d3e64a2d4eedf Mon Sep 17 00:00:00 2001 From: Jeff Tranter <tranter@pobox.com> Date: Mon, 21 Feb 2022 15:44:31 -0500 Subject: [PATCH 1458/2710] Fix some commonly made spelling errors in comments. --- asminc/telestrat.inc | 2 +- doc/apple2.sgml | 2 +- doc/apple2enh.sgml | 2 +- doc/c64.sgml | 2 +- doc/ca65.sgml | 8 ++++---- doc/funcref.sgml | 2 +- include/_atarios.h | 2 +- include/cc65.h | 10 +++++----- libsrc/apple2/exec.s | 6 +++--- libsrc/c128/emd/c128-reu.s | 2 +- libsrc/c64/emd/c64-reu.s | 2 +- libsrc/cbm/open.s | 4 ++-- libsrc/common/freopen.c | 2 +- libsrc/common/itoa.s | 2 +- libsrc/common/ltoa.s | 2 +- libsrc/dbg/dbgsupp.s | 2 +- libsrc/telestrat/gotoxy.s | 2 +- libsrc/telestrat/tgi/telestrat-228-200-3.s | 2 +- libsrc/telestrat/tgi/telestrat-240-200-2.s | 2 +- libsrc/tgi/tgi_clippedline.s | 8 ++++---- libsrc/tgi/tgi_imulround.s | 2 +- libsrc/tgi/tgi_vectorchar.s | 6 +++--- samples/geos/grc/Makefile | 4 ++-- samples/multidemo.c | 2 +- samples/overlaydemo.c | 2 +- src/ca65/expr.c | 2 +- src/ca65/expr.h | 2 +- src/ca65/lineinfo.c | 2 +- src/ca65/macro.c | 2 +- src/ca65/studyexpr.c | 4 ++-- src/cc65/casenode.c | 2 +- src/cc65/casenode.h | 2 +- src/cc65/codegen.c | 2 +- src/cc65/codegen.h | 2 +- src/cc65/expr.c | 2 +- src/cl65/main.c | 4 ++-- src/common/fp.c | 4 ++-- src/common/fp.h | 4 ++-- targettest/ft.c | 2 +- test/val/cc65150311.c | 2 +- test/val/sub1.c | 2 +- test/val/sub2.c | 2 +- 42 files changed, 62 insertions(+), 62 deletions(-) diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index 7d4c1e31d..79ac2d566 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -275,7 +275,7 @@ XFWRITE = $3B ; Only in TELEMON 3.x write file (bank 7 of Orix ; Clock primitive XRECLK = $3C ; Reset clock XCLCL = $3D ; Close clock -XWRCLK = $3E ; Displays clock in the adress in A & Y registers +XWRCLK = $3E ; Displays clock in the address in A & Y registers ; Sound primitives XSONPS = $40 ; Send data to PSG register (14 values) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index 09052ade1..63b40c6f8 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -370,7 +370,7 @@ The names in the parentheses denote the symbols to be used for static linking of In memory constrained situations the memory from $803 to $1FFF can be made available to a program by calling <tt/_heapadd ((void *) 0x0803, 0x17FD);/ at the beginning of <tt/main()/. Doing so is beneficial even if the program - doesn't use the the heap explicitly because loading the driver (and in fact + doesn't use the heap explicitly because loading the driver (and in fact already opening the driver file) uses the heap implicitly. </descrip><p> diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index a105cb47a..15ceed04f 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -376,7 +376,7 @@ The names in the parentheses denote the symbols to be used for static linking of In memory constrained situations the memory from $803 to $1FFF can be made available to a program by calling <tt/_heapadd ((void *) 0x0803, 0x17FD);/ at the beginning of <tt/main()/. Doing so is beneficial even if the program - doesn't use the the heap explicitly because loading the driver (and in fact + doesn't use the heap explicitly because loading the driver (and in fact already opening the driver file) uses the heap implicitly. </descrip><p> diff --git a/doc/c64.sgml b/doc/c64.sgml index de37ed4b7..8c1b3754e 100644 --- a/doc/c64.sgml +++ b/doc/c64.sgml @@ -126,7 +126,7 @@ and $FF3F. In memory constrained situations the memory from $400 to $7FF can be made available to a program by calling <tt/_heapadd ((void *) 0x0400, 0x0400);/ at the beginning of <tt/main()/. Doing so is beneficial even if the program -doesn't use the the heap explicitly because loading a driver uses the heap implicitly. +doesn't use the heap explicitly because loading a driver uses the heap implicitly. Using <tt/c64-soft80.o/ is as simple as placing it on the linker command line like this: diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 309fbf28d..de30f4147 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -3108,7 +3108,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.IFDEF</tt><label id=".IFDEF"><p> Conditional assembly: Check if a symbol is defined. Must be followed by - a symbol name. The condition is true if the the given symbol is already + a symbol name. The condition is true if the given symbol is already defined, and false otherwise. See also: <tt><ref id=".DEFINED" name=".DEFINED"></tt> @@ -3143,7 +3143,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.IFNDEF</tt><label id=".IFNDEF"><p> Conditional assembly: Check if a symbol is defined. Must be followed by - a symbol name. The condition is true if the the given symbol is not + a symbol name. The condition is true if the given symbol is not defined, and false otherwise. See also: <tt><ref id=".DEFINED" name=".DEFINED"></tt> @@ -3152,7 +3152,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.IFNREF</tt><label id=".IFNREF"><p> Conditional assembly: Check if a symbol is referenced. Must be followed - by a symbol name. The condition is true if if the the given symbol was + by a symbol name. The condition is true if if the given symbol was not referenced before, and false otherwise. See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt> @@ -3197,7 +3197,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.IFREF</tt><label id=".IFREF"><p> Conditional assembly: Check if a symbol is referenced. Must be followed - by a symbol name. The condition is true if if the the given symbol was + by a symbol name. The condition is true if if the given symbol was referenced before, and false otherwise. This command may be used to build subroutine libraries in include files diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 1a9dcaa77..a8593ebb5 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -6127,7 +6127,7 @@ pointer you're passing somewhere else, otherwise <tscreen><verb> ptr = realloc (ptr, size); </verb></tscreen> -will loose your only copy of <tt/ptr/ if <tt/realloc/ returns <tt/NULL/. +will lose your only copy of <tt/ptr/ if <tt/realloc/ returns <tt/NULL/. <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> diff --git a/include/_atarios.h b/include/_atarios.h index 5e1374fa5..986092659 100644 --- a/include/_atarios.h +++ b/include/_atarios.h @@ -105,7 +105,7 @@ struct __dos2x { unsigned char* zbufp; /* points to user filename */ unsigned char* zdrva; /* points to serveral buffers (mostly VTOC) */ unsigned char* zsba; /* points to sector buffer */ - unsigned char errno; /* number of occured error */ + unsigned char errno; /* number of occurred error */ }; typedef struct __dos2x dos2x_t; diff --git a/include/cc65.h b/include/cc65.h index 7e9c2cae2..2b05cc17a 100644 --- a/include/cc65.h +++ b/include/cc65.h @@ -59,21 +59,21 @@ unsigned long __fastcall__ udiv32by16r16 (unsigned long rhs, unsigned lhs); */ int __fastcall__ imul8x8r16 (signed char lhs, signed char rhs); -/* Multiplicate two signed 8 bit to yield an signed 16 bit result */ +/* Multiply two signed 8 bit to yield an signed 16 bit result */ long __fastcall__ imul16x16r32 (int lhs, int rhs); -/* Multiplicate two signed 16 bit to yield a signed 32 bit result */ +/* Multiply two signed 16 bit to yield a signed 32 bit result */ unsigned __fastcall__ umul8x8r16 (unsigned char lhs, unsigned char rhs); -/* Multiplicate two unsigned 8 bit to yield an unsigned 16 bit result */ +/* Multiply two unsigned 8 bit to yield an unsigned 16 bit result */ unsigned long __fastcall__ umul16x8r32 (unsigned lhs, unsigned char rhs); -/* Multiplicate an unsigned 16 bit by an unsigned 8 bit number yielding a 24 +/* Multiply an unsigned 16 bit by an unsigned 8 bit number yielding a 24 ** bit unsigned result that is extended to 32 bits for easier handling from C. */ unsigned long __fastcall__ umul16x16r32 (unsigned lhs, unsigned rhs); -/* Multiplicate two unsigned 16 bit to yield an unsigned 32 bit result */ +/* Multiply two unsigned 16 bit to yield an unsigned 32 bit result */ unsigned int __fastcall__ mul20 (unsigned char value); /* Multiply an 8 bit unsigned value by 20 and return the 16 bit unsigned diff --git a/libsrc/apple2/exec.s b/libsrc/apple2/exec.s index c0cd98650..9212ecb8a 100644 --- a/libsrc/apple2/exec.s +++ b/libsrc/apple2/exec.s @@ -129,7 +129,7 @@ setbuf: lda #$00 ; Low byte .assert MLI::OPEN::PATHNAME = MLI::INFO::PATHNAME, error ; Lower file level to avoid program file - ; being closed by C libary shutdown code + ; being closed by C library shutdown code ldx LEVEL stx level beq :+ @@ -185,13 +185,13 @@ setbuf: lda #$00 ; Low byte lda #$00 ; '\0' beq :- ; Branch always - ; Call loader stub after C libary shutdown + ; Call loader stub after C library shutdown : lda #<target ldx #>target sta done+1 stx done+2 - ; Initiate C libary shutdown + ; Initiate C library shutdown jmp _exit .bss diff --git a/libsrc/c128/emd/c128-reu.s b/libsrc/c128/emd/c128-reu.s index 3ded00d67..84e7cb695 100644 --- a/libsrc/c128/emd/c128-reu.s +++ b/libsrc/c128/emd/c128-reu.s @@ -72,7 +72,7 @@ reu_params: .word $0000 ; Host address, lo, hi .byte $00 ; Expansion bank no. .word $0000 ; # bytes to move, lo, hi .byte $00 ; Interrupt mask reg. - .byte $00 ; Adress control reg. + .byte $00 ; Address control reg. .code diff --git a/libsrc/c64/emd/c64-reu.s b/libsrc/c64/emd/c64-reu.s index a563305ce..07ac1fbed 100644 --- a/libsrc/c64/emd/c64-reu.s +++ b/libsrc/c64/emd/c64-reu.s @@ -73,7 +73,7 @@ reu_params: .word $0000 ; Host address, lo, hi .byte $00 ; Expansion bank no. .word $0000 ; # bytes to move, lo, hi .byte $00 ; Interrupt mask reg. - .byte $00 ; Adress control reg. + .byte $00 ; Address control reg. .code diff --git a/libsrc/cbm/open.s b/libsrc/cbm/open.s index 317f9eaa2..e9f0237cc 100644 --- a/libsrc/cbm/open.s +++ b/libsrc/cbm/open.s @@ -130,7 +130,7 @@ dowrite: beq notrunc jsr scratch -; Complete the the file name. Check for append mode here. +; Complete the file name. Check for append mode here. notrunc: lda tmp3 ; Get the mode again @@ -168,7 +168,7 @@ nofile: ; ... else use SA=0 (read) jsr OPEN bcs oserror -; Open the the drive command channel and read it +; Open the drive command channel and read it ldx fnunit jsr opencmdchannel diff --git a/libsrc/common/freopen.c b/libsrc/common/freopen.c index d79d3cf15..41b0b094b 100644 --- a/libsrc/common/freopen.c +++ b/libsrc/common/freopen.c @@ -31,7 +31,7 @@ FILE* __fastcall__ freopen (const char* name, const char* mode, FILE* f) ** overwritten by _fopen. */ if (close (f->f_fd) < 0) { - /* An error occured, errno is already set */ + /* An error occurred, errno is already set */ return 0; } diff --git a/libsrc/common/itoa.s b/libsrc/common/itoa.s index 176bc2ddd..808f9bc33 100644 --- a/libsrc/common/itoa.s +++ b/libsrc/common/itoa.s @@ -19,7 +19,7 @@ specval: ; Common subroutine to pop the parameters and put them into core ; -dopop: sta tmp1 ; will loose high byte +dopop: sta tmp1 ; will lose high byte ldy #0 lda (sp),y sta ptr2 diff --git a/libsrc/common/ltoa.s b/libsrc/common/ltoa.s index 54b693ecc..d8d8c988d 100644 --- a/libsrc/common/ltoa.s +++ b/libsrc/common/ltoa.s @@ -18,7 +18,7 @@ ; Common subroutine to pop the parameters and put them into core ; -dopop: sta tmp1 ; will loose high byte +dopop: sta tmp1 ; will lose high byte jsr popax ; get s to ptr2 sta ptr2 stx ptr2+1 diff --git a/libsrc/dbg/dbgsupp.s b/libsrc/dbg/dbgsupp.s index 07ab9e25a..b1f122013 100644 --- a/libsrc/dbg/dbgsupp.s +++ b/libsrc/dbg/dbgsupp.s @@ -58,7 +58,7 @@ DbgBreak: .res 256 DbgStack: -; Swap space for the the C temporaries +; Swap space for the C temporaries CTemp: _DbgCS: .res 2 ; sp diff --git a/libsrc/telestrat/gotoxy.s b/libsrc/telestrat/gotoxy.s index ea7ed5623..3fbdc25e0 100644 --- a/libsrc/telestrat/gotoxy.s +++ b/libsrc/telestrat/gotoxy.s @@ -24,7 +24,7 @@ gotoxy: jsr popa ; Get Y jsr popa sta SCRX -; Update adress video ram position when SCRY is modified (update_adscr) +; Update address video ram position when SCRY is modified (update_adscr) ; Fall through .endproc diff --git a/libsrc/telestrat/tgi/telestrat-228-200-3.s b/libsrc/telestrat/tgi/telestrat-228-200-3.s index 34af597eb..7eda27bc9 100644 --- a/libsrc/telestrat/tgi/telestrat-228-200-3.s +++ b/libsrc/telestrat/tgi/telestrat-228-200-3.s @@ -379,7 +379,7 @@ out: tya tax - lda ptr3 ; XSCHAR needs in A and Y the adress of the string + lda ptr3 ; XSCHAR needs in A and Y the address of the string ldy ptr3+1 BRK_TELEMON(XSCHAR) rts diff --git a/libsrc/telestrat/tgi/telestrat-240-200-2.s b/libsrc/telestrat/tgi/telestrat-240-200-2.s index 345f80e0e..7a6bb8a4c 100644 --- a/libsrc/telestrat/tgi/telestrat-240-200-2.s +++ b/libsrc/telestrat/tgi/telestrat-240-200-2.s @@ -372,7 +372,7 @@ out: tya tax - lda ptr3 ; XSCHAR needs in A and Y the adress of the string + lda ptr3 ; XSCHAR needs in A and Y the address of the string ldy ptr3+1 BRK_TELEMON(XSCHAR) rts diff --git a/libsrc/tgi/tgi_clippedline.s b/libsrc/tgi/tgi_clippedline.s index b32b819ec..b0f1dd456 100644 --- a/libsrc/tgi/tgi_clippedline.s +++ b/libsrc/tgi/tgi_clippedline.s @@ -159,7 +159,7 @@ tgi_clip_sign: .res 1 ;---------------------------------------------------------------------------- -; Multiplicate value in y/a by dy, then divide by dx. +; Multiply value in y/a by dy, then divide by dx. ; .code @@ -176,7 +176,7 @@ tgi_clip_sign: .res 1 lda tgi_clip_dy ldx tgi_clip_dy+1 ; rhs - jsr umul16x16r32 ; Multiplicate + jsr umul16x16r32 ; Multiply ; Move the result of the multiplication into ptr1:ptr2 @@ -199,7 +199,7 @@ done: bit tmp1 ;---------------------------------------------------------------------------- -; Multiplicate value in y/a by dx, then divide by dy. +; Multiply value in y/a by dx, then divide by dy. ; .code @@ -216,7 +216,7 @@ done: bit tmp1 lda tgi_clip_dx ldx tgi_clip_dx+1 ; rhs - jsr umul16x16r32 ; Multiplicate + jsr umul16x16r32 ; Multiply ; Move the result of the multiplication into ptr1:ptr2 diff --git a/libsrc/tgi/tgi_imulround.s b/libsrc/tgi/tgi_imulround.s index 238c69fc8..112f2930f 100644 --- a/libsrc/tgi/tgi_imulround.s +++ b/libsrc/tgi/tgi_imulround.s @@ -33,7 +33,7 @@ _tgi_imulround: ; ASM callable entry point tgi_imulround: -; Multiplicate +; Multiply jsr imul16x16r32 diff --git a/libsrc/tgi/tgi_vectorchar.s b/libsrc/tgi/tgi_vectorchar.s index bd4cc84c4..3e5e6a3dc 100644 --- a/libsrc/tgi/tgi_vectorchar.s +++ b/libsrc/tgi/tgi_vectorchar.s @@ -79,9 +79,9 @@ GetProcessedCoord: jsr GetOp -; Multiplicate with the scale factor. +; Multiply with the scale factor. - jmp tgi_imulround ; Multiplicate, round and scale + jmp tgi_imulround ; Multiply, round and scale ;---------------------------------------------------------------------------- ; Add the base coordinate with offset in Y to the value in A/X @@ -133,7 +133,7 @@ GetProcessedCoord: .code .proc _tgi_vectorchar -; Multiplicate the char value by two and save into Y +; Multiply the char value by two and save into Y asl a tay diff --git a/samples/geos/grc/Makefile b/samples/geos/grc/Makefile index 9dd9ebc5e..ef30a6e03 100644 --- a/samples/geos/grc/Makefile +++ b/samples/geos/grc/Makefile @@ -53,7 +53,7 @@ test.s: test.grc $(GRC) -s test.s test.grc vlir.cvt: vlir.grc vlir0.s vlir1.s vlir2.s -# using seperate calls here for demonstration purposes: +# using separate calls here for demonstration purposes: $(GRC) -t $(SYS) -s vlir.s vlir.grc $(AS) -t $(SYS) vlir.s $(AS) -t $(SYS) vlir0.s @@ -63,7 +63,7 @@ vlir.cvt: vlir.grc vlir0.s vlir1.s vlir2.s # you can also do the above in one command: # $(CL) -t $(SYS) -o vlir.cvt vlir.grc vlir0.s vlir1.s vlir2.s - + clean: @$(DEL) test.s test.h 2>$(NULLDEV) @$(DEL) vlir.s vlir.cvt vlir.c vlir.h 2>$(NULLDEV) diff --git a/samples/multidemo.c b/samples/multidemo.c index 396d7344a..02bb6fcac 100644 --- a/samples/multidemo.c +++ b/samples/multidemo.c @@ -237,7 +237,7 @@ void main (void) /* The linker makes sure that the call to foo() ends up at the right mem ** addr. However it's up to user to make sure that the - right - overlay - ** is actually loaded before making the the call. + ** is actually loaded before making the call. */ foo (); } diff --git a/samples/overlaydemo.c b/samples/overlaydemo.c index 7553f3d0e..dde6b70ab 100644 --- a/samples/overlaydemo.c +++ b/samples/overlaydemo.c @@ -112,7 +112,7 @@ void main (void) /* The linker makes sure that the call to foo() ends up at the right mem ** addr. However it's up to user to make sure that the - right - overlay - ** is actually loaded before making the the call. + ** is actually loaded before making the call. */ foo (); } diff --git a/src/ca65/expr.c b/src/ca65/expr.c index 74133d533..812b6e90c 100644 --- a/src/ca65/expr.c +++ b/src/ca65/expr.c @@ -1708,7 +1708,7 @@ ExprNode* GenLiteralExpr (long Val) ExprNode* GenLiteral0 (void) -/* Return an expression tree that encodes the the number zero */ +/* Return an expression tree that encodes the number zero */ { return GenLiteralExpr (0); } diff --git a/src/ca65/expr.h b/src/ca65/expr.h index 16dffd901..b18fabb01 100644 --- a/src/ca65/expr.h +++ b/src/ca65/expr.h @@ -81,7 +81,7 @@ ExprNode* GenLiteralExpr (long Val); /* Return an expression tree that encodes the given literal value */ ExprNode* GenLiteral0 (void); -/* Return an expression tree that encodes the the number zero */ +/* Return an expression tree that encodes the number zero */ ExprNode* GenSymExpr (struct SymEntry* Sym); /* Return an expression node that encodes the given symbol */ diff --git a/src/ca65/lineinfo.c b/src/ca65/lineinfo.c index e6707dac4..4f29a29d2 100644 --- a/src/ca65/lineinfo.c +++ b/src/ca65/lineinfo.c @@ -429,7 +429,7 @@ void ReleaseFullLineInfo (Collection* LineInfos) /* Walk over all entries */ for (I = 0; I < CollCount (LineInfos); ++I) { - /* Release the the line info */ + /* Release the line info */ ReleaseLineInfo (CollAt (LineInfos, I)); } diff --git a/src/ca65/macro.c b/src/ca65/macro.c index d6c807035..0bdc89b5b 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -637,7 +637,7 @@ void MacUndef (const StrBuf* Name, unsigned char Style) static int MacExpand (void* Data) -/* If we're currently expanding a macro, set the the scanner token and +/* If we're currently expanding a macro, set the scanner token and ** attribute to the next value and return true. If we are not expanding ** a macro, return false. */ diff --git a/src/ca65/studyexpr.c b/src/ca65/studyexpr.c index 6d8734c9e..2a345a07c 100644 --- a/src/ca65/studyexpr.c +++ b/src/ca65/studyexpr.c @@ -711,7 +711,7 @@ static void StudyMul (ExprNode* Expr, ExprDesc* D) */ if (ED_IsConst (D) && ED_IsValid (&Right)) { - /* Multiplicate both, result goes into Right */ + /* Multiply both, result goes into Right */ ED_Mul (&Right, D); /* Move result into D */ @@ -719,7 +719,7 @@ static void StudyMul (ExprNode* Expr, ExprDesc* D) } else if (ED_IsConst (&Right) && ED_IsValid (D)) { - /* Multiplicate both */ + /* Multiply both */ ED_Mul (D, &Right); } else { diff --git a/src/cc65/casenode.c b/src/cc65/casenode.c index f5e751f08..e7da64995 100644 --- a/src/cc65/casenode.c +++ b/src/cc65/casenode.c @@ -95,7 +95,7 @@ void FreeCaseNodeColl (Collection* Nodes) int SearchCaseNode (const Collection* Nodes, unsigned char Key, int* Index) /* Search for a node in the given collection. If the node has been found, ** set Index to the index of the node and return true. If the node was not -** found, set Index the the insertion position of the node and return +** found, set Index the insertion position of the node and return ** false. */ { diff --git a/src/cc65/casenode.h b/src/cc65/casenode.h index aef546f19..df80e62fd 100644 --- a/src/cc65/casenode.h +++ b/src/cc65/casenode.h @@ -116,7 +116,7 @@ void FreeCaseNodeColl (Collection* Nodes); int SearchCaseNode (const Collection* Nodes, unsigned char Key, int* Index); /* Search for a node in the given collection. If the node has been found, ** set Index to the index of the node and return true. If the node was not -** found, set Index the the insertion position of the node and return +** found, set Index to the insertion position of the node and return ** false. */ diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index cf10314b9..3a98f5e63 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -1409,7 +1409,7 @@ static unsigned g_intpromotion (unsigned flags) unsigned g_typeadjust (unsigned lhs, unsigned rhs) /* Adjust the integer operands before doing a binary operation. lhs is a flags ** value, that corresponds to the value on TOS, rhs corresponds to the value -** in (e)ax. The return value is the the flags value for the resulting type. +** in (e)ax. The return value is the flags value for the resulting type. */ { /* Get the type spec from the flags */ diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index d6d3d2370..b0cf9858d 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -217,7 +217,7 @@ void g_reglong (unsigned Flags); unsigned g_typeadjust (unsigned lhs, unsigned rhs); /* Adjust the integer operands before doing a binary operation. lhs is a flags ** value, that corresponds to the value on TOS, rhs corresponds to the value -** in (e)ax. The return value is the the flags value for the resulting type. +** in (e)ax. The return value is the flags value for the resulting type. */ unsigned g_typecast (unsigned lhs, unsigned rhs); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 3b9307a37..8c1ce6bcb 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -846,7 +846,7 @@ static unsigned FunctionArgList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) /* The function returns the size of all arguments pushed onto the stack. ** However, if there are parameters missed (which is an error, and was ** flagged by the compiler), AND a stack frame was preallocated above, - ** we would loose track of the stackpointer, and generate an internal error + ** we would lose track of the stackpointer, and generate an internal error ** later. So we correct the value by the parameters that should have been ** pushed into, to avoid an internal compiler error. Since an error was ** generated before, no code will be output anyway. diff --git a/src/cl65/main.c b/src/cl65/main.c index dba4915f2..023e111e0 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -538,7 +538,7 @@ static void AssembleFile (const char* File, unsigned ArgCount) /* Check if this is the last processing step */ if (DoLink) { /* We're linking later. Add the output file of the assembly - ** the the file list of the linker. The name of the output + ** to the file list of the linker. The name of the output ** file is that of the input file with ".s" replaced by ".o". */ char* ObjName = MakeFilename (File, ".o"); @@ -1627,7 +1627,7 @@ int main (int argc, char* argv []) break; case FILETYPE_O65: - /* Add the the object file converter files */ + /* Add the object file converter files */ ConvertO65 (Arg); break; diff --git a/src/common/fp.c b/src/common/fp.c index 0c4d2790c..0682f9f9e 100644 --- a/src/common/fp.c +++ b/src/common/fp.c @@ -134,7 +134,7 @@ Float FP_F_Sub (Float Left, Float Right) Float FP_F_Mul (Float Left, Float Right) -/* Multiplicate two floats */ +/* Multiply two floats */ { Float D; D.V = Left.V * Right.V; @@ -220,7 +220,7 @@ Double FP_D_Sub (Double Left, Double Right) Double FP_D_Mul (Double Left, Double Right) -/* Multiplicate two floats */ +/* Multiply two floats */ { Double D; D.V = Left.V * Right.V; diff --git a/src/common/fp.h b/src/common/fp.h index 978359b8b..4e89e2316 100644 --- a/src/common/fp.h +++ b/src/common/fp.h @@ -102,7 +102,7 @@ Float FP_F_Sub (Float Left, Float Right); /* Subtract two floats */ Float FP_F_Mul (Float Left, Float Right); -/* Multiplicate two floats */ +/* Multiply two floats */ Float FP_F_Div (Float Left, Float Right); /* Divide two floats */ @@ -129,7 +129,7 @@ Double FP_D_Sub (Double Left, Double Right); /* Subtract two floats */ Double FP_D_Mul (Double Left, Double Right); -/* Multiplicate two floats */ +/* Multiply two floats */ Double FP_D_Div (Double Left, Double Right); /* Divide two floats */ diff --git a/targettest/ft.c b/targettest/ft.c index 880df6369..3dfa0e37b 100644 --- a/targettest/ft.c +++ b/targettest/ft.c @@ -8,7 +8,7 @@ ** ** The program asks for a filename (if it hasn't ** got one from argv). I then opens the file, -** reads the the first 16 bytes and displays them +** reads the first 16 bytes and displays them ** (as hex values). ** The values of sp (cc65 runtime stack pointer) ** are displayed at some places. The displayed diff --git a/test/val/cc65150311.c b/test/val/cc65150311.c index cd644f491..10676d679 100644 --- a/test/val/cc65150311.c +++ b/test/val/cc65150311.c @@ -20,7 +20,7 @@ int main(void) { n = (p == &func); n = (p == func); -/* the following are not valid C and should go into seperate tests that MUST fail */ +/* the following are not valid C and should go into separate tests that MUST fail */ /* ++p; n = (p > &func); diff --git a/test/val/sub1.c b/test/val/sub1.c index 5dbba97df..06e5cf463 100644 --- a/test/val/sub1.c +++ b/test/val/sub1.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! Substraction Test + !!DESCRIPTION!! Subtraction Test !!ORIGIN!! SDCC regression tests !!LICENCE!! GPL, read COPYING.GPL */ diff --git a/test/val/sub2.c b/test/val/sub2.c index 835e65733..d3ea2a05b 100644 --- a/test/val/sub2.c +++ b/test/val/sub2.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! Substraction Test + !!DESCRIPTION!! Subtraction Test !!ORIGIN!! SDCC regression tests !!LICENCE!! GPL, read COPYING.GPL */ From 93291add05e6d149082125dae6f581e176daad81 Mon Sep 17 00:00:00 2001 From: Jeff Tranter <tranter@pobox.com> Date: Mon, 21 Feb 2022 15:54:47 -0500 Subject: [PATCH 1459/2710] A couple of addtional fixes. --- doc/ca65.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index de30f4147..8797f2c60 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -3152,7 +3152,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.IFNREF</tt><label id=".IFNREF"><p> Conditional assembly: Check if a symbol is referenced. Must be followed - by a symbol name. The condition is true if if the given symbol was + by a symbol name. The condition is true if the given symbol was not referenced before, and false otherwise. See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt> @@ -3197,7 +3197,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.IFREF</tt><label id=".IFREF"><p> Conditional assembly: Check if a symbol is referenced. Must be followed - by a symbol name. The condition is true if if the given symbol was + by a symbol name. The condition is true if the given symbol was referenced before, and false otherwise. This command may be used to build subroutine libraries in include files From 1579d2ec412c1f11695859f28cdfbcf9bd5f2226 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 1 Mar 2022 10:40:01 +0800 Subject: [PATCH 1460/2710] Fixed OptCmp1 with certain code patterns with labels. --- src/cc65/coptcmp.c | 4 ++-- test/val/bug1690.c | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 test/val/bug1690.c diff --git a/src/cc65/coptcmp.c b/src/cc65/coptcmp.c index fda23ae0a..92401a858 100644 --- a/src/cc65/coptcmp.c +++ b/src/cc65/coptcmp.c @@ -309,10 +309,10 @@ unsigned OptCmp1 (CodeSeg* S) /* Insert the ora instead */ X = NewCodeEntry (OP65_ORA, L[0]->AM, L[0]->Arg, 0, L[0]->LI); - CS_InsertEntry (S, X, I); + CS_InsertEntry (S, X, I+3); /* Remove all other instructions */ - CS_DelEntries (S, I+1, 3); + CS_DelEntries (S, I, 3); /* Remember, we had changes */ ++Changes; diff --git a/test/val/bug1690.c b/test/val/bug1690.c new file mode 100644 index 000000000..317913634 --- /dev/null +++ b/test/val/bug1690.c @@ -0,0 +1,23 @@ +/* OptCmp1 messed up with labels */ + +#include <stdio.h> + +int main(void) +{ + register unsigned int x = 0x200; + register unsigned int y = 0; + + do + { + ++y; + } + while (--x); + + if (y != 0x200) + { + printf("0x%X\n", y); + return 1; + } + + return 0; +} From 74bdc065296cbca696c5e6c106932269a28fb38d Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Tue, 1 Mar 2022 12:56:34 -0500 Subject: [PATCH 1461/2710] Added a more general test to test/val/bug1690.c --- test/val/bug1690.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/test/val/bug1690.c b/test/val/bug1690.c index 317913634..499dc6b35 100644 --- a/test/val/bug1690.c +++ b/test/val/bug1690.c @@ -2,22 +2,29 @@ #include <stdio.h> +static int failures = 0; +static unsigned int z = 0xFF23; + int main(void) { register unsigned int x = 0x200; register unsigned int y = 0; - do - { + do { ++y; + } while (--x); + if (y != 0x200) { + printf("y should be 0x200, not 0x%X.\n", y); + ++failures;; } - while (--x); - if (y != 0x200) - { - printf("0x%X\n", y); - return 1; - } + if ((z -= 0x23)) { + /* Passed -- non-zero z looks like non-zero. */ + } else { + /* Failed -- only the low byte of z was tested. */ + printf("Test thinks non-zero z is zero.\n"); + ++failures; + } - return 0; + return failures; } From 7e3aaf199a8185fc57e44263fab807e43e1a880f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 16 Feb 2022 20:10:54 +0800 Subject: [PATCH 1462/2710] Fixed bitwise shift with numeric constant operand(s). --- src/cc65/shiftexpr.c | 54 ++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c index 168574a1b..f7385ace1 100644 --- a/src/cc65/shiftexpr.c +++ b/src/cc65/shiftexpr.c @@ -64,11 +64,11 @@ void ShiftExpr (struct ExprDesc* Expr) CodeMark Mark1; CodeMark Mark2; token_t Tok; /* The operator token */ - const Type* EffType; /* Effective lhs type */ const Type* ResultType; /* Type of the result */ unsigned ExprBits; /* Bits of the lhs operand */ unsigned GenFlags; /* Generator flags */ unsigned ltype; + int lconst; /* Operand is a constant */ int rconst; /* Operand is a constant */ @@ -92,7 +92,7 @@ void ShiftExpr (struct ExprDesc* Expr) NextToken (); /* Get the type of the result */ - ResultType = EffType = IntPromotion (Expr->Type); + ResultType = IntPromotion (Expr->Type); /* Prepare the code generator flags */ GenFlags = TypeOf (ResultType); @@ -103,7 +103,8 @@ void ShiftExpr (struct ExprDesc* Expr) /* Get the lhs on stack */ GetCodePos (&Mark1); ltype = TypeOf (Expr->Type); - if (ED_IsConstAbs (Expr)) { + lconst = ED_IsConstAbs (Expr); + if (lconst) { /* Constant value */ GetCodePos (&Mark2); g_push (ltype | CF_CONST, Expr->IVal); @@ -115,7 +116,7 @@ void ShiftExpr (struct ExprDesc* Expr) } /* Get the right hand side */ - ExprWithCheck (hie8, &Expr2); + MarkedExprWithCheck (hie8, &Expr2); /* Check the type of the rhs */ if (!IsClassInt (Expr2.Type)) { @@ -124,7 +125,7 @@ void ShiftExpr (struct ExprDesc* Expr) } /* Check for a constant right side expression */ - rconst = ED_IsConstAbs (&Expr2); + rconst = ED_IsConstAbs (&Expr2) && ED_CodeRangeIsEmpty (&Expr2); if (!rconst) { /* Not constant, load into the primary */ @@ -154,31 +155,32 @@ void ShiftExpr (struct ExprDesc* Expr) } - /* If the shift count is zero, nothing happens */ - if (Expr2.IVal == 0) { + /* If the shift count is zero, nothing happens. If the left hand + ** side is a constant, the result is constant. + */ + if (Expr2.IVal == 0 || lconst) { - /* Result is already in Expr, remove the generated code */ - RemoveCode (&Mark1); + /* Set the type */ + Expr->Type = ResultType; - /* Done */ - goto Next; - } + if (lconst) { - /* If the left hand side is a constant, the result is constant */ - if (ED_IsConstAbs (Expr)) { + /* Evaluate the result */ + switch (Tok) { + case TOK_SHL: Expr->IVal <<= Expr2.IVal; break; + case TOK_SHR: Expr->IVal >>= Expr2.IVal; break; + default: /* Shutup gcc */ break; + } - /* Evaluate the result */ - switch (Tok) { - case TOK_SHL: Expr->IVal <<= Expr2.IVal; break; - case TOK_SHR: Expr->IVal >>= Expr2.IVal; break; - default: /* Shutup gcc */ break; + /* Limit the calculated value to the range of its type */ + LimitExprValue (Expr); } - /* Both operands are constant, remove the generated code */ + /* Result is already got, remove the generated code */ RemoveCode (&Mark1); /* Done */ - goto Next; + continue; } /* If we're shifting an integer or unsigned to the right, the lhs @@ -188,13 +190,12 @@ void ShiftExpr (struct ExprDesc* Expr) ** shift count is zero, we're done. */ if (Tok == TOK_SHR && - IsTypeInt (Expr->Type) && + IsClassInt (Expr->Type) && + SizeOf (Expr->Type) == SIZEOF_INT && ED_IsLVal (Expr) && ED_IsLocQuasiConst (Expr) && Expr2.IVal >= 8) { - const Type* OldType; - /* Increase the address by one and decrease the shift count */ ++Expr->IVal; Expr2.IVal -= 8; @@ -202,7 +203,6 @@ void ShiftExpr (struct ExprDesc* Expr) /* Replace the type of the expression temporarily by the ** corresponding char type. */ - OldType = Expr->Type; if (IsSignUnsigned (Expr->Type)) { Expr->Type = type_uchar; } else { @@ -215,9 +215,6 @@ void ShiftExpr (struct ExprDesc* Expr) /* Generate again code for the load, this time with the new type */ LoadExpr (CF_NONE, Expr); - /* Reset the type */ - Expr->Type = OldType; - /* If the shift count is now zero, we're done */ if (Expr2.IVal == 0) { /* Be sure to mark the value as in the primary */ @@ -238,7 +235,6 @@ MakeRVal: /* We have an rvalue in the primary now */ ED_FinalizeRValLoad (Expr); -Next: /* Set the type of the result */ Expr->Type = ResultType; } From f0242fb7d56b196216ffa59262b5ad6809cfda7e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 26 Feb 2022 23:02:51 +0800 Subject: [PATCH 1463/2710] Fixed LimitExprValue() for 64-bit long env. --- src/cc65/expr.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 8c1ce6bcb..b3e97ef99 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -216,8 +216,11 @@ void LimitExprValue (ExprDesc* Expr) break; case T_LONG: + Expr->IVal = (int32_t)Expr->IVal; + break; + case T_ULONG: - /* No need to do anything */ + Expr->IVal = (uint32_t)Expr->IVal; break; case T_SCHAR: From e95184e20e3320f77c5e5590c0d5677d5c22897a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 18 Feb 2022 15:20:01 +0800 Subject: [PATCH 1464/2710] Testcase for #1675. --- test/val/bug1675-ub.c | 60 +++++++++++++++++++++++++ test/val/bug1675.c | 101 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+) create mode 100644 test/val/bug1675-ub.c create mode 100644 test/val/bug1675.c diff --git a/test/val/bug1675-ub.c b/test/val/bug1675-ub.c new file mode 100644 index 000000000..72e372308 --- /dev/null +++ b/test/val/bug1675-ub.c @@ -0,0 +1,60 @@ +/* #1675 - Some UB cases of bit-shifts */ + +#include <stdio.h> + +int unexpected = 0; + +void Test_UB(void) +{ + { + /* UB per standard, lhs expected in cc65: (int)-32768 */ + if (!((0x4000 << 1) < 0)) { + ++unexpected; + printf("Expected: (0x4000 << 1) < 0, got lhs: %ld\n", (long)(0x4000 << 1)); + } + } + + { + /* UB per standard, lhs expected in cc65: (long)-2147483648L */ + if (!((0x40000000 << 1) < 0)) { + ++unexpected; + printf("Expected: (0x40000000 << 1) < 0, got lhs: %ld\n", (long)(0x40000000 << 1)); + } + } + + { + /* UB per standard, lhs expected in cc65: (int)-32768 */ + if (!(((unsigned char)0x80 << 8) < 0)) { + ++unexpected; + printf("Expected: ((unsigned char)0x80 << 8) < 0, got lhs: %ld\n", (long)((unsigned char)0x80 << 8)); + } + } + + { + /* UB per standard, lhs expected in cc65: (int)-32768 */ + if (!(((short)0x4000L << 1) < 0)) { + ++unexpected; + printf("Expected: ((short)0x4000L << 1) < 0, got lhs: %ld\n", (long)((short)0x4000L << 1)); + } + } + + { + const signed short x = 0x4000; + /* UB per standard, lhs expected in cc65: (int)-32768 */ + if (!((x << 1) < 0)) { + ++unexpected; + printf("Expected: (x << 1) < 0, got lhs: %ld\n", (long)(x << 1)); + } + } +} + +int main(void) +{ + Test_UB(); + + if (unexpected != 0) { + printf("Unexpected: %d\n", unexpected); + } + + return unexpected; +} diff --git a/test/val/bug1675.c b/test/val/bug1675.c new file mode 100644 index 000000000..ee24425df --- /dev/null +++ b/test/val/bug1675.c @@ -0,0 +1,101 @@ +/* #1675 - Some corner cases of bit-shifts */ + +#include <stdio.h> + +int failures = 0; + +void Test_Defined(void) +{ + { + /* Well-defined per standard, lhs expected in cc65: (int)-256 */ + if (!(((signed char)0x80 << 1) < 0)) { + ++failures; + printf("Expected: ((signed char)0x80 << 1) < 0, got lhs: %ld\n", (long)((signed char)0x80 << 1)); + } + } + + { + /* Implementation-defined per standard, lhs expected in cc65: (int)-128 */ + if (!(((signed char)0x80 >> 1 << 1) < 0)) { + ++failures; + printf("Expected: ((signed char)0x80 >> 1 << 1) < 0, got lhs: %ld\n", (long)((signed char)0x80 >> 1 << 1)); + } + } + + { + int x = 0; + /* Well-defined per standard, lhs expected in cc65: (int)1 */ + if (!((1 << (x++, 0)) == 1)) { + ++failures; + x = 0; + printf("Expected: (1 << (x++, 0)) == 1, got lhs: %ld\n", (long)(1 << (x++, 0))); + } + + /* Well-defined per standard, lhs expected in cc65: (int)1 */ + if (!(x == 1)) { + ++failures; + printf("Expected: (1 << (x++, 0)) == 1 && x == 1, got x: %d\n", x); + } + } + + { + int x = 0, y = 0x100; + /* Well-defined per standard, lhs expected in cc65: (int)128 */ + if (!((y >> (x++, 0) >> 1) == 0x80)) { + ++failures; + x = 0; + printf("Expected: (y >> (x++, 0) >> 1) == 0x80, got lhs: %ld\n", (long)(y >> (x++, 0) >> 1)); + } + + /* Well-defined per standard, lhs expected in cc65: (int)1 */ + if (!(x == 1)) { + ++failures; + printf("Expected: (y >> (x++, 0) >> 1) == 0x80 && x == 1, got x: %d\n", x); + } + } + + { + int x = 0, y = 0x100; + /* Well-defined per standard, lhs expected in cc65: (int)1 */ + if (!((y >> (x++, 8)) == 1)) { + ++failures; + x = 0; + printf("Expected: (y >> (x++, 8)) == 1, got lhs: %ld\n", (long)(y >> (x++, 8))); + } + + /* Well-defined per standard, lhs expected in cc65: (int)1 */ + if (!(x == 1)) { + ++failures; + printf("Expected: (y >> (x++, 8)) == 1 && x == 1, got x: %d\n", x); + } + } + + { + const signed char x = 0x80; + /* Well-defined per standard, lhs expected in cc65: (int)-256 */ + if (!((x << 1) < 0)) { + ++failures; + printf("Expected: (x << 1) < 0, got lhs: %ld\n", (long)(x << 1)); + } + } + + { + const signed char x = 0x40; + /* Well-defined per standard, lhs expected in cc65: (int)128 */ + if (!((x << 1) >= 0)) { + ++failures; + printf("Expected: (x << 1) >= 0, got lhs: %ld\n", (long)(x << 1)); + } + } +} + +int main(void) +{ + Test_Defined(); + + if (failures != 0) { + printf("Failures: %d\n", failures); + } + + return failures; +} From 0dc82c0d112e88a0e506c80a58d590f2264aeee7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 3 Mar 2022 14:03:01 +0800 Subject: [PATCH 1465/2710] Fixed test/asm/listing/Makefile with mingw32-make.exe that has problems with comments lead with tabulators. --- test/asm/listing/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index f4a7df81c..c152db7be 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -48,7 +48,7 @@ define LISTING_template $(WORKDIR)/$1.bin: $1.s $(ISEQUAL) $(if $(QUIET),echo asm/$1.bin) - # compile without generating listing +# compile without generating listing $(CA65) -t none -o $$(@:.bin=.o) $$< $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib @@ -59,13 +59,13 @@ endif $(CA65) -t none -l $$(@:.bin=.list.orig) -o $$(@:.bin=.list-o) $$< $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib - # check if the result bin is the same as without listing file +# check if the result bin is the same as without listing file $(ISEQUAL) $$@ $$(@:.bin=.list-bin) ifneq ($(wildcard $1.list-ref),) - # we have a reference file, compare that, too +# we have a reference file, compare that, too - # remove first line which contains a version number +# remove first line which contains a version number tail -n +2 $$(@:.bin=.lst.orig) > $$(@:.bin=.lst) $(ISEQUAL) $1.list-ref $$(@:.bin=.lst) endif From 43abc5b01f9298f995769afc1e4562c4985dffdd Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 3 Mar 2022 20:24:14 +0800 Subject: [PATCH 1466/2710] Fixed signed long comparisons with smaller unsigned types. --- src/cc65/expr.c | 5 +---- test/val/bug1696.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 test/val/bug1696.c diff --git a/src/cc65/expr.c b/src/cc65/expr.c index b3e97ef99..ab48a4554 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2587,12 +2587,9 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ CmpSigned = 0; flags |= CF_UNSIGNED; } + } else { unsigned rtype = TypeOf (Expr2.Type) | (flags & CF_CONST); - if (CmpSigned) { - ltype &= ~CF_UNSIGNED; - rtype &= ~CF_UNSIGNED; - } flags |= g_typeadjust (ltype, rtype); } diff --git a/test/val/bug1696.c b/test/val/bug1696.c new file mode 100644 index 000000000..c31dc257b --- /dev/null +++ b/test/val/bug1696.c @@ -0,0 +1,44 @@ +/* + Copyright 2022 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of unsigned short/unsigned int vs signed long comparisons; + see https://github.com/cc65/cc65/issues/1696 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +int main(void) +{ + unsigned int x = 65535; + unsigned short y = 65535; + if (!(x > 1L)) { + printf("x = %ld but x > 1L failed\n", (long)x); + ++failures; + } + if (!(y == 65535L)) { + printf("y = %ld but y == 65535L failed\n", (long)y); + ++failures; + } + printf("failures: %u\n", failures); + return failures; +} From 12aa8693b8797b7895fb186431aa04ecc6ea9598 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Thu, 3 Mar 2022 12:06:15 -0600 Subject: [PATCH 1467/2710] Corrected size of BASROM definition --- cfg/sym1-32k.cfg | 2 +- cfg/sym1-4k.cfg | 2 +- cfg/sym1.cfg | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cfg/sym1-32k.cfg b/cfg/sym1-32k.cfg index ad0d760f3..7949375d3 100644 --- a/cfg/sym1-32k.cfg +++ b/cfg/sym1-32k.cfg @@ -29,7 +29,7 @@ MEMORY { EXT: file = "", define = yes, start = $9000, size = $1000; IO: file = "", define = yes, start = $A000, size = $1000; RAE1: file = "", define = yes, start = $B000, size = $1000; - BASROM: file = "", define = yes, start = $C000, size = $1000; + BASROM: file = "", define = yes, start = $C000, size = $2000; RAE2: file = "", define = yes, start = $E000, size = $1000; TOP: file = "", define = yes, start = $F000, size = $1000; } diff --git a/cfg/sym1-4k.cfg b/cfg/sym1-4k.cfg index 32d3cbb3a..468a76fe0 100644 --- a/cfg/sym1-4k.cfg +++ b/cfg/sym1-4k.cfg @@ -29,7 +29,7 @@ MEMORY { EXT: file = "", define = yes, start = $9000, size = $1000; IO: file = "", define = yes, start = $A000, size = $1000; RAE1: file = "", define = yes, start = $B000, size = $1000; - BASROM: file = "", define = yes, start = $C000, size = $1000; + BASROM: file = "", define = yes, start = $C000, size = $2000; RAE2: file = "", define = yes, start = $E000, size = $1000; TOP: file = "", define = yes, start = $F000, size = $1000; } diff --git a/cfg/sym1.cfg b/cfg/sym1.cfg index 32d3cbb3a..468a76fe0 100644 --- a/cfg/sym1.cfg +++ b/cfg/sym1.cfg @@ -29,7 +29,7 @@ MEMORY { EXT: file = "", define = yes, start = $9000, size = $1000; IO: file = "", define = yes, start = $A000, size = $1000; RAE1: file = "", define = yes, start = $B000, size = $1000; - BASROM: file = "", define = yes, start = $C000, size = $1000; + BASROM: file = "", define = yes, start = $C000, size = $2000; RAE2: file = "", define = yes, start = $E000, size = $1000; TOP: file = "", define = yes, start = $F000, size = $1000; } From b2520593693c0388a99685de34a4d5a03d8186e2 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 24 Feb 2022 08:50:36 +0200 Subject: [PATCH 1468/2710] Mark index 0 as TRANSPARENT. Let palette start from index 1 --- libsrc/lynx/tgi/lynx-160-102-16.s | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/libsrc/lynx/tgi/lynx-160-102-16.s b/libsrc/lynx/tgi/lynx-160-102-16.s index 903d8f25e..c35b6a5aa 100644 --- a/libsrc/lynx/tgi/lynx-160-102-16.s +++ b/libsrc/lynx/tgi/lynx-160-102-16.s @@ -113,7 +113,8 @@ text_bitmap: .res 8*(1+20+1)+1 .rodata -DEFPALETTE: .byte >$011 +DEFPALETTE: .byte >$223 + .byte >$011 .byte >$34d .byte >$9af .byte >$9b8 @@ -124,11 +125,11 @@ DEFPALETTE: .byte >$011 .byte >$d5f .byte >$c53 .byte >$822 - .byte >$223 .byte >$484 .byte >$8e5 .byte >$cf5 .byte >$fff + .byte <$223 .byte <$011 .byte <$34d .byte <$9af @@ -140,7 +141,6 @@ DEFPALETTE: .byte >$011 .byte <$d5f .byte <$c53 .byte <$822 - .byte <$223 .byte <$484 .byte <$8e5 .byte <$cf5 @@ -162,6 +162,7 @@ INSTALL: lda #1 sta TEXTMAGX sta TEXTMAGY + sta DRAWINDEX stz BGINDEX stz DRAWPAGE stz SWAPREQUEST @@ -418,7 +419,7 @@ cls_sprite: .word 0 .word $a000 ; 160 .word $6600 ; 102 - .byte $00 + .byte $11 .code CLEAR: lda #<cls_sprite @@ -844,11 +845,6 @@ OUTTEXT: lda TEXTMAGY sta text_sy+1 - lda BGINDEX - beq @L1 ; Choose opaque black sprite? - lda #$04 ; No, choose normal sprite -@L1: - sta text_sprite lda DRAWINDEX ; Set color asl asl @@ -956,7 +952,7 @@ OUTTEXT: text_coll: .byte 0 text_sprite: - .byte $00,$90,$20 + .byte $04,$90,$20 .addr 0, text_bitmap text_x: .word 0 From 4f9b30d50d03db5ec03cbaed270fa6631cf18f64 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Fri, 25 Feb 2022 16:00:03 +0200 Subject: [PATCH 1469/2710] Fix black index in tgi_colors.s --- libsrc/lynx/tgi_colors.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/lynx/tgi_colors.s b/libsrc/lynx/tgi_colors.s index c7aefb417..ebc8c2889 100644 --- a/libsrc/lynx/tgi_colors.s +++ b/libsrc/lynx/tgi_colors.s @@ -4,5 +4,5 @@ .include "tgi-kernel.inc" - .export tgi_color_black:zp = $00 + .export tgi_color_black:zp = $01 .export tgi_color_white:zp = $0F From 5dd952ba8c2620f9b5e4a94010da90a346fef048 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Thu, 3 Mar 2022 17:47:31 -0600 Subject: [PATCH 1470/2710] Added Sym-1 extended memory sample program and documentation --- doc/sym1.sgml | 9 +-- samples/sym1/Makefile | 7 ++- samples/sym1/symExtendedMemory.c | 95 ++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 samples/sym1/symExtendedMemory.c diff --git a/doc/sym1.sgml b/doc/sym1.sgml index 5961984bd..c2265ba7b 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -29,7 +29,7 @@ Included with this distribution is a 4k configuration file and a 32k config file <sect>Memory layout<p> -The ROMs and I/O areas are defined in the configuration files, as are most of the entry points for useful subroutines in the Sym-1 monitor ROM. cc65 generated programs compiled and linked using 4k config run in the memory range of $200 - $0FFF. The 32k config expands this range to $7FFF. The starting memory location and entry point for running the program is $200, so when the program is transferred to the Sym-1, it is executed by typing 'g 200'. The system returns control back to the monitor ROM when the program terminates, providing the '.' prompt. +The ROMs and I/O areas are defined in the configuration files, as are most of the entry points for useful subroutines in the Sym-1 monitor ROM. cc65 generated programs compiled and linked using 4k config run in the memory range of $200 - $0FFF. The 32k config expands this range to $7FFF. Memory above 32K can be used to extend the heap, as described below. The starting memory location and entry point for running the program is $200, so when the program is transferred to the Sym-1, it is executed by typing 'g 200'. The system returns control back to the monitor ROM when the program terminates, providing the '.' prompt. Special locations: @@ -41,7 +41,7 @@ Special locations: The C runtime stack is located at $0FFF on 4KB Syms, or at $7FFF for 32KB systems. The stack always grows downwards. <tag/Heap/ - The C heap is located at the end of the program and grows towards the C runtime stack. + The C heap is located at the end of the program and grows towards the C runtime stack. Extended memory can be added to the heap, as described below. </descrip><p> @@ -61,7 +61,7 @@ No graphics drivers are currently available for the Sym-1. <sect1>Extended memory drivers<p> -No extended memory drivers are currently available for the Sym-1. +See the example program, symExtendedMemory, in the samples directory. <sect1>Joystick drivers<p> @@ -102,7 +102,7 @@ As stated earlier, there are config files for 4KB and 32KB systems. If you have <sect3>Sample programs<p> -All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. These sample programs can be found in the samples/sym1 directory: +All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. Additionally, symExtendedMemory shows how to access memory above 32KB, so it expects more than 32KB. These sample programs can be found in the samples/sym1 directory: <itemize> <item>symHello prints "Hello World!" and then inputs characters, which are echoed on the screen. It also makes a "beep" sound.</item> @@ -110,6 +110,7 @@ All the samples will run on the "stock" 4KB Sym-1, except for symIO an <item>symDisplay allows entry of a message, which is then displayed by scrolling it across the front panel display.</item> <item>symIO allows access to the Sym-1 digital I/O ports.</item> <item>symNotepad is a simple text entry/retrieval program that uses tape storage.</item> +<item>symExtendedMemory demonstrates how to access upper-memory and add it to the heap.</item> </itemize> <sect>License<p> diff --git a/samples/sym1/Makefile b/samples/sym1/Makefile index 14da90ad3..281b5bcd0 100644 --- a/samples/sym1/Makefile +++ b/samples/sym1/Makefile @@ -32,7 +32,7 @@ else endif EXELIST_sym1 = \ - symHello.bin symTiny.bin symDisplay.bin symIO.bin symNotepad.bin + symHello.bin symTiny.bin symDisplay.bin symIO.bin symNotepad.bin symExtendedMemory.bin ifneq ($(EXELIST_$(SYS)),) samples: $(EXELIST_$(SYS)) @@ -64,9 +64,14 @@ symIO.bin: symIO.c symNotepad.bin: symNotepad.c $(CL) -t sym1 -C sym1-32k.cfg -O -o symNotepad.bin symNotepad.c +symExtendedMemory.bin: symExtendedMemory.c + $(CL) -t sym1 -C sym1-32k.cfg -O -o symExtendedMemory.bin symExtendedMemory.c + + clean: @$(DEL) symHello.bin 2>$(NULLDEV) @$(DEL) symTiny.bin 2>$(NULLDEV) @$(DEL) symDisplay.bin 2>$(NULLDEV) @$(DEL) symIO.bin 2>$(NULLDEV) @$(DEL) symNotepad.bin 2>$(NULLDEV) + @$(DEL) symExtendedMemory.bin 2>$(NULLDEV) diff --git a/samples/sym1/symExtendedMemory.c b/samples/sym1/symExtendedMemory.c new file mode 100644 index 000000000..81902382f --- /dev/null +++ b/samples/sym1/symExtendedMemory.c @@ -0,0 +1,95 @@ +// -------------------------------------------------------------------------- +// Sym-1 Extended Memory +// +// Wayne Parham +// +// wayne@parhamdata.com +// -------------------------------------------------------------------------- +// +// Note: This program examines memory above the monitor ROM (8000-8FFF) to +// Determine what, if any, memory is available. It then adds whatever +// 4K segments it finds to the heap. +// +// Memory Segment Remark +// 0x9000 Usually available +// 0xA000 System I/O, always unavailable +// 0xB000 Used by RAE, but normally available +// 0xC000 Used by BASIC, normally unavailable +// 0xD000 Used by BASIC, normally unavailable +// 0xE000 Used by RAE, but normally available +// 0xF000 Normally available, but only to FF7F +// +// -------------------------------------------------------------------------- + +#include <sym1.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#define SEGMENT 0x9000 // First 4K segment of extended memory +#define SEG_END 0x0FFF // Last location of segment +#define BLOCK_SIZE 0x1000 // Size of segment +#define TOP_END 0x0F7F // Last location of memory +#define TOP_SIZE 0x0F80 // Size of top segment +#define UNAVAILABLE 0xA000 // System I/O area + +int main (void) { + int error = 0; + unsigned heap_size = 0x0000; + char* segment = (char*) SEGMENT; + + printf ( "Analyzing memory.\n\n" ); + + heap_size = _heapmemavail(); + + printf ( "Main memory has %d bytes available.\n", heap_size ); + + while ( (int) segment < 0xEFFF ) { // Iterate through 4K memory blocks + if( (int) segment != UNAVAILABLE ) { + segment[0] = 0x00; // Check beginning of segment + if ( segment[0] != 0x00 ) + error = 1; + segment[0] = 0xFF; + if ( segment[0] != 0xFF ) + error = 1; + segment[SEG_END] = 0x00; // Check end of segment + if ( segment[SEG_END] != 0x00 ) + error = 1; + segment[SEG_END] = 0xFF; + if ( segment[SEG_END] != 0xFF ) + error = 1; + if ( ! error ) { // If memory found, add to the heap + printf ( "Memory found at location %p, ", segment ); + _heapadd ( segment, BLOCK_SIZE ); + heap_size = _heapmemavail(); + printf( "so the system now has %u bytes available.\n", heap_size ); + } else { + error = 0; + } + } + segment += 0x1000; // Increment to next segment + } + + segment[0] = 0x00; // Check beginning of top memory segment + if ( segment[0] != 0x00 ) + error = 1; + segment[0] = 0xFF; + if ( segment[0] != 0xFF ) + error = 1; + segment[TOP_END] = 0x00; // Check end of usable memory + if ( segment[TOP_END] != 0x00 ) + error = 1; + segment[TOP_END] = 0xFF; + if ( segment[TOP_END] != 0xFF ) + error = 1; + if ( ! error ) { // If memory found, add to the heap + printf ( "Memory found at location %p, ", segment ); + _heapadd ( segment, TOP_SIZE ); + heap_size = _heapmemavail(); + printf( "so the system now has %u bytes available.\n", heap_size ); + } + + puts ("\nEnjoy your day!\n"); + + return 0; +} From d6fe34107e69c59239c4e223d88d24ac0e7c1f1d Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Thu, 3 Mar 2022 19:57:43 -0600 Subject: [PATCH 1471/2710] unsigned int format specifier --- samples/sym1/symExtendedMemory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/sym1/symExtendedMemory.c b/samples/sym1/symExtendedMemory.c index 81902382f..db0231236 100644 --- a/samples/sym1/symExtendedMemory.c +++ b/samples/sym1/symExtendedMemory.c @@ -42,7 +42,7 @@ int main (void) { heap_size = _heapmemavail(); - printf ( "Main memory has %d bytes available.\n", heap_size ); + printf ( "Main memory has %u bytes available.\n", heap_size ); while ( (int) segment < 0xEFFF ) { // Iterate through 4K memory blocks if( (int) segment != UNAVAILABLE ) { From cb322551e5055445c72b64230e4ea20f8d6502b9 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Thu, 3 Mar 2022 20:51:16 -0600 Subject: [PATCH 1472/2710] Documentation clarifications --- doc/sym1.sgml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/sym1.sgml b/doc/sym1.sgml index c2265ba7b..565f11e43 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -61,7 +61,7 @@ No graphics drivers are currently available for the Sym-1. <sect1>Extended memory drivers<p> -See the example program, symExtendedMemory, in the samples directory. +There are no extended memory drivers for the Sym-1. However, there is a way to access memory beyond the 32k boundary, if memory is physically present in the system. See the example program, symExtendedMemory, in the samples directory. <sect1>Joystick drivers<p> @@ -100,7 +100,11 @@ This header exposes Sym-specific I/O functions that are useful for reading and w As stated earlier, there are config files for 4KB and 32KB systems. If you have 32KB RAM, then you will probably want to use the sym1-32k configuration, but if not - if you are using the sym1-4k configuration - then you may want to use functions like getchar, putchar, gets and puts rather than functions like scanf and printf. Printf, for example, requires about 1KB because it needs to know how to process all the format specifiers. -<sect3>Sample programs<p> +<sect3>Using extended memory<p> + +Memory may be physically present that is addressed at locations above the monitor ROM at $8000. This extended memory is accessible by adding to the heap, as described in the symExtendedMemory sample program. + +<sect4>Sample programs<p> All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. Additionally, symExtendedMemory shows how to access memory above 32KB, so it expects more than 32KB. These sample programs can be found in the samples/sym1 directory: From eb25027f7b59c880de90c3199983183e215334af Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Fri, 4 Mar 2022 06:23:06 -0600 Subject: [PATCH 1473/2710] Minor updates --- doc/sym1.sgml | 72 ++++++++++++++++------ samples/sym1/symExtendedMemory.c | 102 ++++++++++++++++--------------- 2 files changed, 108 insertions(+), 66 deletions(-) diff --git a/doc/sym1.sgml b/doc/sym1.sgml index 565f11e43..b97f94720 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -15,21 +15,40 @@ An overview over the Sym-1 runtime system as it is implemented for the cc65 C co <sect>Overview<p> -This file contains an overview of the Sym-1 runtime system as it comes with the cc65 C compiler. It describes the memory layout, Sym-1 specific header files, available drivers, and any pitfalls specific to the platform. +This file contains an overview of the Sym-1 runtime system as it comes with the cc65 C compiler. +It describes the memory layout, Sym-1 specific header files, available drivers, and any pitfalls +specific to the platform. -Please note that Sym-1 specific functions are just mentioned here, they are described in detail in the separate <url url="funcref.html" name="function reference">. Even functions marked as "platform dependent" may be available on more than one platform. Please see the function reference for more information. +Please note that Sym-1 specific functions are just mentioned here, they are described in detail +in the separate <url url="funcref.html" name="function reference">. Even functions marked as +"platform dependent" may be available on more than one platform. Please see the +function reference for more information. <sect>Binary format<p> -The output format generated by the linker for the Sym-1 target is a raw binary BIN file, which is essentially a memory image. You can convert this to a HEX file using BIN2HEX, which is a popular open-source conversion utility program. A HEX file has ASCII representations of the hexadecimal byte values of the machine-language program. So the HEX file can be transferred to the Sym-1 using the RS-232 terminal port, just as if the machine-code was entered by hand. Enter 'm 200' in the monitor and start the HEX file transfer. +The output format generated by the linker for the Sym-1 target is a raw binary BIN file, which +is essentially a memory image. You can convert this to a HEX file using BIN2HEX, which is a +popular open-source conversion utility program. A HEX file has ASCII representations of the +hexadecimal byte values of the machine-language program. So the HEX file can be transferred +to the Sym-1 using the RS-232 terminal port, just as if the machine-code was entered by hand. +Enter 'm 200' in the monitor and start the HEX file transfer. <p> -Included with this distribution is a 4k configuration file and a 32k config file. The Sym-1 on-board memory is limited to 4 kbytes but system memory can be increased to 32 kbytes of contiguous RAM with aftermarket add-on boards. So choose the config file that matches your system configuration before compiling and linking user programs. +Included with this distribution is a 4k configuration file and a 32k config file. The Sym-1 +on-board memory is limited to 4 kbytes but system memory can be increased to 32 kbytes of +contiguous RAM with aftermarket add-on boards. So choose the config file that matches your +system configuration before compiling and linking user programs. <sect>Memory layout<p> -The ROMs and I/O areas are defined in the configuration files, as are most of the entry points for useful subroutines in the Sym-1 monitor ROM. cc65 generated programs compiled and linked using 4k config run in the memory range of $200 - $0FFF. The 32k config expands this range to $7FFF. Memory above 32K can be used to extend the heap, as described below. The starting memory location and entry point for running the program is $200, so when the program is transferred to the Sym-1, it is executed by typing 'g 200'. The system returns control back to the monitor ROM when the program terminates, providing the '.' prompt. +The ROMs and I/O areas are defined in the configuration files, as are most of the entry points +for useful subroutines in the Sym-1 monitor ROM. cc65 generated programs compiled and linked +using 4k config run in the memory range of $200 - $0FFF. The 32k config expands +this range to $7FFF. Memory above 32k can be used to extend the heap, as described below. +The starting memory location and entry point for running the program is $200, so when the +program is transferred to the Sym-1, it is executed by typing 'g 200'. The system returns control +back to the monitor ROM when the program terminates, providing the '.' prompt. Special locations: @@ -38,10 +57,12 @@ Special locations: Conio support is not currently available for the Sym-1. But stdio console functions are available. <tag/Stack/ - The C runtime stack is located at $0FFF on 4KB Syms, or at $7FFF for 32KB systems. The stack always grows downwards. + The C runtime stack is located at $0FFF on 4kb Syms, or at $7FFF for 32kb systems. + The stack always grows downwards. <tag/Heap/ - The C heap is located at the end of the program and grows towards the C runtime stack. Extended memory can be added to the heap, as described below. + The C heap is located at the end of the program and grows towards the C runtime stack. Extended + memory can be added to the heap, as described below. </descrip><p> @@ -51,7 +72,8 @@ Programs containing Sym-1 code may use the <tt/sym1.h/ header file. See the hea <sect1>Hardware access<p> -The pseudo variables declared in the <tt/sym1.inc/ include file allow access to hardware located in the address space. See the include file for more information. +The pseudo variables declared in the <tt/sym1.inc/ include file allow access to hardware located in the +address space. See the include file for more information. <sect>Loadable drivers<p> @@ -61,7 +83,9 @@ No graphics drivers are currently available for the Sym-1. <sect1>Extended memory drivers<p> -There are no extended memory drivers for the Sym-1. However, there is a way to access memory beyond the 32k boundary, if memory is physically present in the system. See the example program, symExtendedMemory, in the samples directory. +There are no extended memory drivers for the Sym-1. However, there is a way to access memory beyond the +32kb boundary, if extended memory is physically present in the system. See the example program, +symExtendedMemory, in the samples directory. <sect1>Joystick drivers<p> @@ -73,7 +97,8 @@ No mouse drivers are currently available for the Sym-1. <sect1>RS232 device drivers<p> -No communication port drivers are currently available for the Sym-1. It has only the "master console" e.g. stdin and stdout. +No communication port drivers are currently available for the Sym-1. It has only the "master console" +e.g. stdin and stdout. <sect>Limitations<p> @@ -94,23 +119,32 @@ To be more specific, this limitation means that you cannot use any of the follow <sect>Other hints<p> <sect1>sym1.h<p> -This header exposes Sym-specific I/O functions that are useful for reading and writing its ports and front panel. See the <tt/sym1.h/ include file for a list of the functions available. +This header exposes Sym-specific I/O functions that are useful for reading and writing its ports and front panel. +See the <tt/sym1.h/ include file for a list of the functions available. <sect2>Limited memory applications<p> -As stated earlier, there are config files for 4KB and 32KB systems. If you have 32KB RAM, then you will probably want to use the sym1-32k configuration, but if not - if you are using the sym1-4k configuration - then you may want to use functions like getchar, putchar, gets and puts rather than functions like scanf and printf. Printf, for example, requires about 1KB because it needs to know how to process all the format specifiers. +As stated earlier, there are config files for 4kb and 32kb systems. If you have 32kb RAM, then you will probably +want to use the sym1-32k configuration, but if not - if you are using the sym1-4k configuration - then you may +want to use functions like getchar, putchar, gets and puts rather than functions like scanf and printf. +Printf, for example, requires about 1KB because it needs to know how to process all the format specifiers. <sect3>Using extended memory<p> -Memory may be physically present that is addressed at locations above the monitor ROM at $8000. This extended memory is accessible by adding to the heap, as described in the symExtendedMemory sample program. +Memory may be physically present that is addressed at locations above the monitor ROM at $8000. This extended +memory is accessible by adding to the heap, as described in the symExtendedMemory sample program. <sect4>Sample programs<p> -All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. Additionally, symExtendedMemory shows how to access memory above 32KB, so it expects more than 32KB. These sample programs can be found in the samples/sym1 directory: +All the samples will run on the "stock" 4kb Sym-1, except for symIO and symNotepad, which require 32kb. +Additionally, symExtendedMemory shows how to access memory above 32kb, so it expects more than 32kb. +These sample programs can be found in the samples/sym1 directory: <itemize> -<item>symHello prints "Hello World!" and then inputs characters, which are echoed on the screen. It also makes a "beep" sound.</item> -<item>symTiny does the same as symHello, but does it with puts() rather than printf() to show the difference in compiled binary size.</item> +<item>symHello prints "Hello World!" and then inputs characters, which are echoed on the screen. + It also makes a "beep" sound.</item> +<item>symTiny does the same as symHello, but does it with puts() rather than printf() to show the difference + in compiled binary size.</item> <item>symDisplay allows entry of a message, which is then displayed by scrolling it across the front panel display.</item> <item>symIO allows access to the Sym-1 digital I/O ports.</item> <item>symNotepad is a simple text entry/retrieval program that uses tape storage.</item> @@ -119,9 +153,11 @@ All the samples will run on the "stock" 4KB Sym-1, except for symIO an <sect>License<p> -This software is provided 'as-is', without any expressed or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. +This software is provided 'as-is', without any expressed or implied warranty. In no event will the authors be held +liable for any damages arising from the use of this software. -Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter +it and redistribute it freely, subject to the following restrictions: <enum> <item> The origin of this software must not be misrepresented; you must not diff --git a/samples/sym1/symExtendedMemory.c b/samples/sym1/symExtendedMemory.c index db0231236..cc01da353 100644 --- a/samples/sym1/symExtendedMemory.c +++ b/samples/sym1/symExtendedMemory.c @@ -26,12 +26,13 @@ #include <stdlib.h> #include <string.h> -#define SEGMENT 0x9000 // First 4K segment of extended memory -#define SEG_END 0x0FFF // Last location of segment -#define BLOCK_SIZE 0x1000 // Size of segment -#define TOP_END 0x0F7F // Last location of memory -#define TOP_SIZE 0x0F80 // Size of top segment -#define UNAVAILABLE 0xA000 // System I/O area +#define STD_MEM 0x7FFF // Last address of standard memory +#define SEGMENT 0x9000 // First 4K segment of extended memory +#define SEG_END 0x0FFF // Last location of segment +#define BLOCK_SIZE 0x1000 // Size of segment +#define TOP_END 0x0F7F // Last location of memory +#define TOP_SIZE 0x0F80 // Size of top segment +#define UNAVAILABLE 0xA000 // System I/O area int main (void) { int error = 0; @@ -44,49 +45,54 @@ int main (void) { printf ( "Main memory has %u bytes available.\n", heap_size ); - while ( (int) segment < 0xEFFF ) { // Iterate through 4K memory blocks - if( (int) segment != UNAVAILABLE ) { - segment[0] = 0x00; // Check beginning of segment - if ( segment[0] != 0x00 ) - error = 1; - segment[0] = 0xFF; - if ( segment[0] != 0xFF ) - error = 1; - segment[SEG_END] = 0x00; // Check end of segment - if ( segment[SEG_END] != 0x00 ) - error = 1; - segment[SEG_END] = 0xFF; - if ( segment[SEG_END] != 0xFF ) - error = 1; - if ( ! error ) { // If memory found, add to the heap - printf ( "Memory found at location %p, ", segment ); - _heapadd ( segment, BLOCK_SIZE ); - heap_size = _heapmemavail(); - printf( "so the system now has %u bytes available.\n", heap_size ); - } else { - error = 0; - } - } - segment += 0x1000; // Increment to next segment - } + if ( heap_size > STD_MEM ) { + printf ( "Extended memory already installed.\n" ); + } else { - segment[0] = 0x00; // Check beginning of top memory segment - if ( segment[0] != 0x00 ) - error = 1; - segment[0] = 0xFF; - if ( segment[0] != 0xFF ) - error = 1; - segment[TOP_END] = 0x00; // Check end of usable memory - if ( segment[TOP_END] != 0x00 ) - error = 1; - segment[TOP_END] = 0xFF; - if ( segment[TOP_END] != 0xFF ) - error = 1; - if ( ! error ) { // If memory found, add to the heap - printf ( "Memory found at location %p, ", segment ); - _heapadd ( segment, TOP_SIZE ); - heap_size = _heapmemavail(); - printf( "so the system now has %u bytes available.\n", heap_size ); + while ( (int) segment < 0xEFFF ) { // Iterate through 4K memory blocks + if( (int) segment != UNAVAILABLE ) { + segment[0] = 0x00; // Check beginning of segment + if ( segment[0] != 0x00 ) + error = 1; + segment[0] = 0xFF; + if ( segment[0] != 0xFF ) + error = 1; + segment[SEG_END] = 0x00; // Check end of segment + if ( segment[SEG_END] != 0x00 ) + error = 1; + segment[SEG_END] = 0xFF; + if ( segment[SEG_END] != 0xFF ) + error = 1; + if ( ! error ) { // If memory found, add to the heap + printf ( "Memory found at location %p, ", segment ); + _heapadd ( segment, BLOCK_SIZE ); + heap_size = _heapmemavail(); + printf( "so the system now has %u bytes available.\n", heap_size ); + } else { + error = 0; + } + } + segment += 0x1000; // Increment to next segment + } + + segment[0] = 0x00; // Check beginning of top memory segment + if ( segment[0] != 0x00 ) + error = 1; + segment[0] = 0xFF; + if ( segment[0] != 0xFF ) + error = 1; + segment[TOP_END] = 0x00; // Check end of usable memory + if ( segment[TOP_END] != 0x00 ) + error = 1; + segment[TOP_END] = 0xFF; + if ( segment[TOP_END] != 0xFF ) + error = 1; + if ( ! error ) { // If memory found, add to the heap + printf ( "Memory found at location %p, ", segment ); + _heapadd ( segment, TOP_SIZE ); + heap_size = _heapmemavail(); + printf( "so the system now has %u bytes available.\n", heap_size ); + } } puts ("\nEnjoy your day!\n"); From eb2f2a2fca12379cf0d236295451d97c980d3b4e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 7 Mar 2022 14:48:55 +0100 Subject: [PATCH 1474/2710] fix #warning directive so the test could actually compile :) --- test/misc/sitest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/misc/sitest.c b/test/misc/sitest.c index d13acf92c..2f1d7df4d 100644 --- a/test/misc/sitest.c +++ b/test/misc/sitest.c @@ -38,7 +38,7 @@ #ifdef NO_WCHAR -#warn "this test checks C99 features, but NO_WCHAR is defined so the test will most definitely fail." +#warning "this test checks C99 features, but NO_WCHAR is defined so the test will most definitely fail." #endif From b9651e4b06c59a81baf7d9910c305c00cf27d6af Mon Sep 17 00:00:00 2001 From: nyanpasu64 <nyanpasu64@tuta.io> Date: Mon, 21 Feb 2022 21:15:43 -0800 Subject: [PATCH 1475/2710] Fix segfault on 64-bit LLP64 Windows builds There are many occurrences of unsigned long in codegen.h's function arguments. Changing g_getimmed and g_defdata makes `make` succeed without segfaulting. I don't know if it makes cc65 behave correctly in all cases, or if there are more unsigned long that need to be changed. --- src/cc65/codegen.c | 4 ++-- src/cc65/codegen.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 3a98f5e63..59be677fd 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -689,7 +689,7 @@ void g_restore_regvars (int StackOffs, int RegOffs, unsigned Bytes) -void g_getimmed (unsigned Flags, unsigned long Val, long Offs) +void g_getimmed (unsigned Flags, uintptr_t Val, long Offs) /* Load a constant into the primary register */ { unsigned char B1, B2, B3, B4; @@ -4394,7 +4394,7 @@ void g_res (unsigned n) -void g_defdata (unsigned flags, unsigned long val, long offs) +void g_defdata (unsigned flags, uintptr_t val, long offs) /* Define data with the size given in flags */ { if (flags & CF_CONST) { diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index b0cf9858d..0a5384578 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -271,7 +271,7 @@ void g_restore_regvars (int StackOffs, int RegOffs, unsigned Bytes); -void g_getimmed (unsigned Flags, unsigned long Val, long Offs); +void g_getimmed (unsigned Flags, uintptr_t Val, long Offs); /* Load a constant into the primary register */ void g_getstatic (unsigned Flags, uintptr_t Label, long Offs); @@ -461,7 +461,7 @@ void g_ge (unsigned flags, unsigned long val); void g_res (unsigned n); /* Reserve static storage, n bytes */ -void g_defdata (unsigned flags, unsigned long val, long offs); +void g_defdata (unsigned flags, uintptr_t val, long offs); /* Define data with the size given in flags */ void g_defbytes (const void* bytes, unsigned count); From 190e04b0ce795566b12ddd49ff7d41484af2140b Mon Sep 17 00:00:00 2001 From: nyanpasu64 <nyanpasu64@tuta.io> Date: Sat, 5 Mar 2022 03:23:51 -0800 Subject: [PATCH 1476/2710] Remove broken inttypes.h src/common/inttypes.h is a shim to fix building cc65 on non-C99-compliant compilers missing inttypes.h (like VS2012 and earlier). The shim is actually incomplete and does not define the PRI... macros supplied by the actual compiler headers. Since we're planning to use those macros, delete this header so cc65's source files instead use host-supplied inttypes.h containing macro definitions. --- src/common.vcxproj | 1 - src/common/inttypes.h | 123 ------------------------------------------ 2 files changed, 124 deletions(-) delete mode 100644 src/common/inttypes.h diff --git a/src/common.vcxproj b/src/common.vcxproj index f7929df2b..df99fc4a9 100644 --- a/src/common.vcxproj +++ b/src/common.vcxproj @@ -74,7 +74,6 @@ <ClInclude Include="common\inline.h" /> <ClInclude Include="common\intptrstack.h" /> <ClInclude Include="common\intstack.h" /> - <ClInclude Include="common\inttypes.h" /> <ClInclude Include="common\libdefs.h" /> <ClInclude Include="common\lidefs.h" /> <ClInclude Include="common\matchpat.h" /> diff --git a/src/common/inttypes.h b/src/common/inttypes.h deleted file mode 100644 index 28ffb2cc5..000000000 --- a/src/common/inttypes.h +++ /dev/null @@ -1,123 +0,0 @@ -/*****************************************************************************/ -/* */ -/* inttypes.h */ -/* */ -/* Define integer types */ -/* */ -/* */ -/* */ -/* (C) 2004 Ullrich von Bassewitz */ -/* Roemerstrasse 52 */ -/* D-70794 Filderstadt */ -/* EMail: uz@cc65.org */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#ifndef INTTYPES_H -#define INTTYPES_H - - - -/* If we have <stdint.h>, include it; otherwise, adapt types from <stddef.h> -** and define integer boundary constants. -** gcc and msvc don't define __STDC_VERSION__ without special flags, so check -** for them explicitly. Undefined symbols are replaced by zero; so, checks for -** defined(__GNUC__) and defined(_MSC_VER) aren't necessary. -*/ -#if (__STDC_VERSION__ >= 199901) || (__GNUC__ >= 3) || (_MSC_VER >= 1600) -#include <stdint.h> -#else - -/* Assume that ptrdiff_t and size_t are wide enough to hold pointers. -** Assume that they are the widest type. -*/ -#include <limits.h> -#include <stddef.h> - -typedef ptrdiff_t intptr_t; -typedef size_t uintptr_t; -typedef ptrdiff_t intmax_t; -typedef size_t uintmax_t; - -#define INT8_MAX (0x7F) -#define INT16_MAX (0x7FFF) -#define INT32_MAX (0x7FFFFFFF) - -#define INT8_MIN (-INT8_MAX - 1) -#define INT16_MIN (-INT16_MAX - 1) -#define INT32_MIN (-INT32_MAX - 1) - -#define UINT8_MAX (0xFF) -#define UINT16_MAX (0xFFFF) -#define UINT32_MAX (0xFFFFFFFF) - -#if UCHAR_MAX == UINT8_MAX -typedef unsigned char uint8_t; -#else -#error "No suitable type for uint8_t found." -#endif - -#if SCHAR_MIN == INT8_MIN && SCHAR_MAX == INT8_MAX -typedef signed char int8_t; -#else -#error "No suitable type for int8_t found." -#endif - -#if UINT_MAX == UINT16_MAX -typedef unsigned int uint16_t; -#elif USHRT_MAX == UINT16_MAX -typedef unsigned short uint16_t; -#else -#error "No suitable type for uint16_t found." -#endif - -#if INT_MIN == INT16_MIN && INT_MAX == INT16_MAX -typedef int int16_t; -#elif SHRT_MIN == INT16_MIN && SHRT_MAX == INT16_MAX -typedef short int16_t; -#else -#error "No suitable type for int16_t found." -#endif - -#if UINT_MAX == UINT32_MAX -typedef unsigned int uint32_t; -#elif ULONG_MAX == UINT32_MAX -typedef unsigned long uint32_t; -#else -#error "No suitable type for uint32_t found." -#endif - -#if INT_MIN == INT32_MIN && INT_MAX == INT32_MAX -typedef int int32_t; -#elif LONG_MIN == INT32_MIN && LONG_MAX == INT32_MAX -typedef long int32_t; -#else -#error "No suitable type for int32_t found." -#endif - -#endif - - - -/* End of inttypes.h */ -#endif From 8afbf3f5ff6e7a8a880b290ee79868b585451d7f Mon Sep 17 00:00:00 2001 From: nyanpasu64 <nyanpasu64@tuta.io> Date: Sat, 5 Mar 2022 03:30:14 -0800 Subject: [PATCH 1477/2710] Fix format strings to properly format uintptr_t --- src/cc65/codegen.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 59be677fd..4f737555c 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -4403,15 +4403,15 @@ void g_defdata (unsigned flags, uintptr_t val, long offs) switch (flags & CF_TYPEMASK) { case CF_CHAR: - AddDataLine ("\t.byte\t$%02lX", val & 0xFF); + AddDataLine ("\t.byte\t$%02"PRIXPTR, val & 0xFF); break; case CF_INT: - AddDataLine ("\t.word\t$%04lX", val & 0xFFFF); + AddDataLine ("\t.word\t$%04"PRIXPTR, val & 0xFFFF); break; case CF_LONG: - AddDataLine ("\t.dword\t$%08lX", val & 0xFFFFFFFF); + AddDataLine ("\t.dword\t$%08"PRIXPTR, val & 0xFFFFFFFF); break; default: From aebf61464d8abce13f850db221a2b0b5a95fef60 Mon Sep 17 00:00:00 2001 From: nyanpasu64 <nyanpasu64@tuta.io> Date: Sun, 6 Mar 2022 14:46:56 -0800 Subject: [PATCH 1478/2710] Replace #include "inttypes.h" with <inttypes.h> --- src/cc65/codegen.c | 2 +- src/cc65/codegen.h | 2 +- src/cc65/exprdesc.h | 2 +- src/common/xsprintf.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 4f737555c..5bfc6696b 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -33,6 +33,7 @@ +#include <inttypes.h> #include <limits.h> #include <stdio.h> #include <string.h> @@ -42,7 +43,6 @@ #include "addrsize.h" #include "check.h" #include "cpu.h" -#include "inttypes.h" #include "strbuf.h" #include "xmalloc.h" #include "xsprintf.h" diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index 0a5384578..1de71e7d3 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -37,10 +37,10 @@ #define CODEGEN_H +#include <inttypes.h> /* common */ #include "coll.h" -#include "inttypes.h" /* cc65 */ #include "segments.h" diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index a1487a0bd..13eb36e5e 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -38,12 +38,12 @@ +#include <inttypes.h> #include <string.h> /* common */ #include "fp.h" #include "inline.h" -#include "inttypes.h" /* cc65 */ #include "asmcode.h" diff --git a/src/common/xsprintf.c b/src/common/xsprintf.c index a7d26d5ef..5994bb604 100644 --- a/src/common/xsprintf.c +++ b/src/common/xsprintf.c @@ -33,6 +33,7 @@ +#include <inttypes.h> #include <stdio.h> #include <stddef.h> #include <string.h> @@ -41,7 +42,6 @@ /* common */ #include "chartype.h" #include "check.h" -#include "inttypes.h" #include "strbuf.h" #include "va_copy.h" #include "xsprintf.h" From c6c199bd5902ba6ea4da16926d84d92ddd179ed5 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 12 Mar 2022 01:35:33 -0500 Subject: [PATCH 1479/2710] Added a URL to the snapshot's commit history as a comment in the Windows snapshot ZIPs. --- src/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Makefile b/src/Makefile index 87f1e8236..c8028204b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -119,6 +119,7 @@ endif # CMD_EXE zip: @cd .. && zip cc65 bin/* + @echo 'https://github.com/cc65/cc65/commits/'$(word 2,$(BUILD_ID))|zip -zq ../cc65 define OBJS_template From 1951e845055f4e4a8e17dd72cad9710222b4a735 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 18 Mar 2022 01:06:48 -0400 Subject: [PATCH 1480/2710] Made tgidemo draw circles in blue instead of orange. That change lets it be built on two more platforms (Atmos, Telestrat). --- samples/Makefile | 7 ++++--- samples/tgidemo.c | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index 5c44d1947..86be30a83 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -199,7 +199,8 @@ EXELIST_atmos = \ ascii \ hello \ mandelbrot \ - sieve + sieve \ + tgidemo EXELIST_bbc = \ notavailable @@ -311,7 +312,7 @@ EXELIST_sim65c02 = $(EXELIST_sim6502) EXELIST_supervision = \ notavailable - + EXELIST_sym1 = \ notavailable @@ -321,7 +322,7 @@ EXELIST_telestrat = \ hello \ mandelbrot \ sieve \ -# tgidemo + tgidemo EXELIST_vic20 = \ ascii \ diff --git a/samples/tgidemo.c b/samples/tgidemo.c index b431cfb98..f193a1b83 100644 --- a/samples/tgidemo.c +++ b/samples/tgidemo.c @@ -68,7 +68,7 @@ static void DoWarning (void) static void DoCircles (void) { - static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_ORANGE }; + static const unsigned char Palette[2] = { TGI_COLOR_WHITE, TGI_COLOR_BLUE }; unsigned char I; unsigned char Color = COLOR_BACK; const unsigned X = MaxX / 2; From 314cdd7feb1f8c617778a57134cf0e5bdbb9baa3 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 19 Mar 2022 01:21:52 -0400 Subject: [PATCH 1481/2710] Added Atari Lynx versions of three sample programs. The Lynx target can't build the usual versions because its library doesn't have conio output and stdio. --- samples/Makefile | 2 +- samples/lynx/Makefile | 59 +++++++++++++ samples/lynx/hello.c | 43 +++++++++ samples/lynx/mandelbrot.c | 86 ++++++++++++++++++ samples/lynx/tgidemo.c | 179 ++++++++++++++++++++++++++++++++++++++ samples/readme.txt | 23 ++++- 6 files changed, 390 insertions(+), 2 deletions(-) create mode 100644 samples/lynx/Makefile create mode 100644 samples/lynx/hello.c create mode 100644 samples/lynx/mandelbrot.c create mode 100644 samples/lynx/tgidemo.c diff --git a/samples/Makefile b/samples/Makefile index 86be30a83..9732cfac7 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -154,7 +154,7 @@ endif # Lists of subdirectories # disasm depends on cpp -DIRLIST = tutorial geos atari2600 atari5200 apple2 gamate supervision sym1 cbm +DIRLIST = tutorial geos atari2600 atari5200 apple2 gamate lynx supervision sym1 cbm # -------------------------------------------------------------------------- # Lists of executables diff --git a/samples/lynx/Makefile b/samples/lynx/Makefile new file mode 100644 index 000000000..b4ef64af0 --- /dev/null +++ b/samples/lynx/Makefile @@ -0,0 +1,59 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= lynx + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f +else + NULLDEV = /dev/null + DEL = $(RM) +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) +endif + +EXELIST_lynx = \ + hello.lnx \ + mandelbrot.lnx \ + tgidemo.lnx + +.PHONY: samples clean + +ifneq ($(EXELIST_$(SYS)),) +samples: $(EXELIST_$(SYS)) +else +samples: +# recipe used to skip systems that will not work with any program in this dir +ifeq ($(MAKELEVEL),0) + @echo "info: Lynx tests not available for" $(SYS) +else +# Suppress the "nothing to be done for 'samples' message. + @echo "" > $(NULLDEV) +endif +endif + +.SUFFIXES: +.SUFFIXES: .c .lnx + +%.lnx : %.c + $(CL) -t $(SYS) -Oris -m $*.map -o $@ $< + +clean: + @$(DEL) *.o *.map *.lnx 2>$(NULLDEV) diff --git a/samples/lynx/hello.c b/samples/lynx/hello.c new file mode 100644 index 000000000..5e6832514 --- /dev/null +++ b/samples/lynx/hello.c @@ -0,0 +1,43 @@ +/* Atari Lynx version of samples/hello.c, using TGI instead of conio */ + +#include <tgi.h> + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + +static const char Text[] = "Hello world!"; + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + +void main (void) +{ + unsigned int XMax, YMax; + + tgi_install (tgi_static_stddrv); + tgi_init (); + + /* Set screen color. */ + tgi_setcolor (TGI_COLOR_WHITE); + + /* Clear the screen. */ + tgi_clear(); + + /* Ask for the screen size. */ + XMax = tgi_getmaxx (); + YMax = tgi_getmaxy (); + + /* Draw a frame around the screen. */ + tgi_line (0, 0, XMax, 0); + tgi_lineto (XMax, YMax); + tgi_lineto (0, YMax); + tgi_lineto (0, 0); + + /* Write the greeting in the middle of the screen. */ + tgi_outtextxy ((tgi_getxres () - tgi_gettextwidth (Text)) / 2, + (tgi_getyres () - tgi_gettextheight (Text)) / 2, Text); +} diff --git a/samples/lynx/mandelbrot.c b/samples/lynx/mandelbrot.c new file mode 100644 index 000000000..ce49fbf7a --- /dev/null +++ b/samples/lynx/mandelbrot.c @@ -0,0 +1,86 @@ +/*****************************************************************************\ +** mandelbrot sample program for Atari Lynx ** +** ** +** (w) 2002 by groepaz/hitmen, TGI support by Stefan Haubenthal ** +\*****************************************************************************/ + + + +#include <stdlib.h> +#include <tgi.h> + + + +/* Graphics definitions */ +#define SCREEN_X (tgi_getxres()) +#define SCREEN_Y (tgi_getyres()) +#define MAXCOL (tgi_getcolorcount()) + +#define maxiterations 32 +#define fpshift (10) +#define tofp(_x) ((_x)<<fpshift) +#define fromfp(_x) ((_x)>>fpshift) +#define fpabs(_x) (abs(_x)) + +#define mulfp(_a,_b) ((((signed long)_a)*(_b))>>fpshift) +#define divfp(_a,_b) ((((signed long)_a)<<fpshift)/(_b)) + +/* Use static local variables for speed */ +#pragma static-locals (1); + + + +static void mandelbrot (signed short x1, signed short y1, signed short x2, + signed short y2) +{ + /* */ + register signed short r, r1, i; + register signed short xs, ys, xx, yy; + register signed short x, y; + register unsigned char count; + register unsigned char maxcol = MAXCOL; + + /* Calc stepwidth */ + xs = ((x2 - x1) / (SCREEN_X)); + ys = ((y2 - y1) / (SCREEN_Y)); + + yy = y1; + for (y = 0; y < (SCREEN_Y); y++) { + yy += ys; + xx = x1; + for (x = 0; x < (SCREEN_X); x++) { + xx += xs; + /* Do iterations */ + r = 0; + i = 0; + for (count = 0; (count < maxiterations) && + (fpabs (r) < tofp (2)) && (fpabs (i) < tofp (2)); + ++count) { + r1 = (mulfp (r, r) - mulfp (i, i)) + xx; + /* i = (mulfp(mulfp(r,i),tofp(2)))+yy; */ + i = (((signed long) r * i) >> (fpshift - 1)) + yy; + r = r1; + } + if (count == maxiterations) { + tgi_setcolor (0); + } else { + tgi_setcolor (count % maxcol); + } + /* Set pixel */ + tgi_setpixel (x, y); + } + } +} + +void main (void) +{ + /* Install the graphics driver */ + tgi_install (tgi_static_stddrv); + + /* Initialize graphics */ + tgi_init (); + tgi_clear (); + + /* Calc mandelbrot set */ + mandelbrot (tofp (-2), tofp (-2), tofp (2), tofp (2)); +} diff --git a/samples/lynx/tgidemo.c b/samples/lynx/tgidemo.c new file mode 100644 index 000000000..e92a078dc --- /dev/null +++ b/samples/lynx/tgidemo.c @@ -0,0 +1,179 @@ +/* Tgidemo modified for the Atari Lynx. +** +** Press any of the Lynx's option buttons to go to the next screen. +*/ + +#include <cc65.h> +#include <conio.h> +#include <tgi.h> +#include <time.h> + + +#define COLOR_BACK TGI_COLOR_BLACK +#define COLOR_FORE TGI_COLOR_WHITE + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* Driver stuff */ +static unsigned MaxX; +static unsigned MaxY; +static unsigned AspectRatio; + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +/* The Lynx draws too fast. This function delays +** the drawing so that we can watch it. +*/ +static void wait (unsigned char ticks) +{ + clock_t T = clock () + ticks; + + while (clock () < T) {} +} + + + +static void DoCircles (void) +{ + unsigned char I; + unsigned char Color = COLOR_BACK; + const unsigned X = MaxX / 2; + const unsigned Y = MaxY / 2; + const unsigned Limit = (X < Y) ? Y : X; + + tgi_setcolor (COLOR_FORE); + tgi_clear (); + + tgi_line (0, 0, MaxX, MaxY); + tgi_line (0, MaxY, MaxX, 0); + while (!kbhit ()) { + Color = (Color == COLOR_FORE) ? COLOR_BACK : COLOR_FORE; + tgi_setcolor (Color); + for (I = 10; I <= Limit; I += 10) { + tgi_ellipse (X, Y, I, tgi_imulround (I, AspectRatio)); + wait (9); + } + } + + cgetc (); +} + + + +static void DoCheckerboard (void) +{ + unsigned X, Y; + unsigned char Color = COLOR_BACK; + + tgi_clear (); + + while (1) { + for (Y = 0; Y <= MaxY - 2; Y += 10) { + for (X = 0; X <= MaxX; X += 10) { + Color = (Color == COLOR_FORE) ? COLOR_BACK : COLOR_FORE; + tgi_setcolor (Color); + tgi_bar (X, Y, X+9, Y+9); + if (kbhit ()) { + cgetc (); + return; + } + wait (1); + } + Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE; + } + Color = Color == COLOR_FORE ? COLOR_BACK : COLOR_FORE; + } +} + + + +static void DoDiagram (void) +{ + int XOrigin, YOrigin; + int Amp; + int X, Y; + unsigned I; + + tgi_setcolor (COLOR_FORE); + tgi_clear (); + + /* Determine zero and amplitude */ + YOrigin = MaxY / 2; + XOrigin = 10; + Amp = (MaxY - 19) / 2; + + /* Y axis */ + tgi_line (XOrigin, 10, XOrigin, MaxY-10); + tgi_line (XOrigin-2, 12, XOrigin, 10); + tgi_lineto (XOrigin+2, 12); + + /* X axis */ + tgi_line (XOrigin, YOrigin, MaxX-10, YOrigin); + tgi_line (MaxX-12, YOrigin-2, MaxX-10, YOrigin); + tgi_lineto (MaxX-12, YOrigin+2); + + /* Sine */ + tgi_gotoxy (XOrigin, YOrigin); + for (I = 0; I <= 360; ++I) { + /* Calculate the next points */ + X = (int)(((long)(MaxX - 19) * I) / 360); + Y = (int)(((long)Amp * -_sin (I)) / 256); + + /* Draw the line */ + tgi_lineto (XOrigin + X, YOrigin + Y); + } + + cgetc (); +} + + + +static void DoLines (void) +{ + unsigned X; + const unsigned Min = (MaxX < MaxY) ? MaxX : MaxY; + + tgi_setcolor (COLOR_FORE); + tgi_clear (); + + for (X = 0; X <= Min; X += 10) { + tgi_line (0, 0, Min, X); + tgi_line (0, 0, X, Min); + tgi_line (Min, Min, 0, Min-X); + tgi_line (Min, Min, Min-X, 0); + wait (9); + } + + cgetc (); +} + + + +void main (void) +{ + /* Install the driver */ + tgi_install (tgi_static_stddrv); + tgi_init (); + + /* Get stuff from the driver */ + MaxX = tgi_getmaxx (); + MaxY = tgi_getmaxy (); + AspectRatio = tgi_getaspectratio (); + + /* Do graphics stuff */ + DoCircles (); + DoCheckerboard (); + DoDiagram (); + DoLines (); +} diff --git a/samples/readme.txt b/samples/readme.txt index 506cd5d43..1a5b1c9ff 100644 --- a/samples/readme.txt +++ b/samples/readme.txt @@ -128,7 +128,7 @@ Platforms: Runs on all platforms that have TGI support: ============================================================================= -Platform specific samples follow: +Platform-specific samples follow: atari 2600: ----------- @@ -198,6 +198,27 @@ Name: nachtm Description: Plays "Eine kleine Nachtmusik" by Wolfgang Amadeus Mozart. ----------------------------------------------------------------------------- +lynx: +----- + +These programs are adapted for the Atari Lynx because its library has no conio +output or stdio. + +Name: hello +Description: A nice "Hello world" type program that uses the TGI graphics + library for output. + +Name: mandelbrot +Description: A mandelbrot demo using integer arithmetic. The demo was + written by groepaz, and converted to cc65 using TGI graphics + by Stefan Haubenthal. + +Name: tgidemo +Description: Shows some of the graphics capabilities of the "Tiny Graphics + Interface". + +----------------------------------------------------------------------------- + sym1: ----- From 2bd30afdeb8eeac44ce46763f711a3ddb2f21e2a Mon Sep 17 00:00:00 2001 From: empathicqubit <empathicqubit@entan.gl> Date: Fri, 10 Sep 2021 21:09:22 +0200 Subject: [PATCH 1482/2710] Add --debug-tables <filename> option and output struct and union fields --- src/cc65/global.c | 7 +++-- src/cc65/global.h | 1 + src/cc65/main.c | 8 ++++- src/cc65/symtab.c | 74 +++++++++++++++++++++++++++++++++++++++++------ 4 files changed, 77 insertions(+), 13 deletions(-) diff --git a/src/cc65/global.c b/src/cc65/global.c index a337549fe..8b9838dc5 100644 --- a/src/cc65/global.c +++ b/src/cc65/global.c @@ -66,6 +66,7 @@ IntStack CodeSizeFactor = INTSTACK(100);/* Size factor for generated code */ IntStack DataAlignment = INTSTACK(1); /* Alignment for data */ /* File names */ -StrBuf DepName = STATIC_STRBUF_INITIALIZER; /* Name of dependencies file */ -StrBuf FullDepName = STATIC_STRBUF_INITIALIZER; /* Name of full dependencies file */ -StrBuf DepTarget = STATIC_STRBUF_INITIALIZER; /* Name of dependency target */ +StrBuf DepName = STATIC_STRBUF_INITIALIZER; /* Name of dependencies file */ +StrBuf FullDepName = STATIC_STRBUF_INITIALIZER; /* Name of full dependencies file */ +StrBuf DepTarget = STATIC_STRBUF_INITIALIZER; /* Name of dependency target */ +StrBuf DebugTableName = STATIC_STRBUF_INITIALIZER; /* Name of debug table dump file */ diff --git a/src/cc65/global.h b/src/cc65/global.h index b9bcf5550..266035346 100644 --- a/src/cc65/global.h +++ b/src/cc65/global.h @@ -77,6 +77,7 @@ extern IntStack DataAlignment; /* Alignment for data */ extern StrBuf DepName; /* Name of dependencies file */ extern StrBuf FullDepName; /* Name of full dependencies file */ extern StrBuf DepTarget; /* Name of dependency target */ +extern StrBuf DebugTableName; /* Name of debug table dump file */ diff --git a/src/cc65/main.c b/src/cc65/main.c index 0ed5af986..74d4fd146 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -114,6 +114,7 @@ static void Usage (void) " --create-full-dep name\tCreate a full make dependency file\n" " --data-name seg\t\tSet the name of the DATA segment\n" " --debug\t\t\tDebug mode\n" + " --debug-tables name\t\tWrite symbol table debug info to a file\n" " --debug-info\t\t\tAdd debug info to object file\n" " --debug-opt name\t\tDebug optimization steps\n" " --debug-opt-output\t\tDebug output of each optimization step\n" @@ -494,7 +495,11 @@ static void OptDebug (const char* Opt attribute ((unused)), ++Debug; } - +static void OptDebugTables (const char* Opt, const char* Arg) +/* Dump tables to file */ +{ + FileNameOption (Opt, Arg, &DebugTableName); +} static void OptDebugInfo (const char* Opt attribute ((unused)), const char* Arg attribute ((unused))) @@ -865,6 +870,7 @@ int main (int argc, char* argv[]) { "--create-full-dep", 1, OptCreateFullDep }, { "--data-name", 1, OptDataName }, { "--debug", 0, OptDebug }, + { "--debug-tables", 1, OptDebugTables }, { "--debug-info", 0, OptDebugInfo }, { "--debug-opt", 1, OptDebugOpt }, { "--debug-opt-output", 0, OptDebugOptOutput }, diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index c1c5c4696..b4c97e962 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -37,6 +37,7 @@ #include <stdlib.h> #include <stdarg.h> #include <string.h> +#include <errno.h> /* common */ #include "check.h" @@ -68,8 +69,6 @@ /* Data */ /*****************************************************************************/ - - /* An empty symbol table */ SymTable EmptySymTab = { 0, /* PrevTab */ @@ -99,6 +98,7 @@ static SymTable* LabelTab = 0; static SymTable* SPAdjustTab = 0; static SymTable* FailSafeTab = 0; /* For errors */ +static FILE* DebugTableFile = 0; /*****************************************************************************/ /* struct SymTable */ @@ -256,11 +256,25 @@ void PopLexicalLevel (void) --LexLevelDepth; } - - void EnterGlobalLevel (void) /* Enter the program global lexical level */ { + const char* OutName = NULL; + if (!SB_IsEmpty (&DebugTableName)) { + OutName = SB_GetConstBuf (&DebugTableName); + } + + if (OutName) { + /* Open the table file */ + DebugTableFile = fopen (OutName, "w"); + if (DebugTableFile == 0) { + Error ("Cannot create table dump file '%s': %s", OutName, strerror (errno)); + } + } + else if (Debug) { + DebugTableFile = stdout; + } + /* Safety */ PRECONDITION (GetLexicalLevel () == LEX_LEVEL_NONE); @@ -280,8 +294,6 @@ void EnterGlobalLevel (void) FailSafeTab = NewSymTable (SYMTAB_SIZE_GLOBAL); } - - void LeaveGlobalLevel (void) /* Leave the program global lexical level */ { @@ -292,9 +304,41 @@ void LeaveGlobalLevel (void) CheckSymTable (SymTab0); /* Dump the tables if requested */ - if (Debug) { - PrintSymTable (SymTab0, stdout, "Global symbol table"); - PrintSymTable (TagTab0, stdout, "Global tag table"); + if (DebugTableFile) { + SymEntry* Entry; + StrBuf* Header; + + PrintSymTable (SymTab0, DebugTableFile, "Global symbol table"); + PrintSymTable (TagTab0, DebugTableFile, "Global tag table"); + + Entry = TagTab0->SymHead; + if (Entry) { + fputs ("\nGlobal struct and union definitions", DebugTableFile); + fputs ("\n=========================\n", DebugTableFile); + + do { + if (!((Entry->Flags & SC_STRUCT) || (Entry->Flags & SC_UNION)) || !Entry->V.S.SymTab) { + continue; + } + + Header = NewStrBuf(); + if(Entry->Flags & SC_STRUCT) { + SB_AppendStr (Header, "SC_STRUCT: "); + } + else { + SB_AppendStr (Header, "SC_UNION: "); + } + SB_AppendStr (Header, Entry->Name); + SB_Terminate (Header); + + PrintSymTable (Entry->V.S.SymTab, DebugTableFile, SB_GetConstBuf (Header)); + } while ((Entry = Entry->NextSym)); + } + + /* Close the file */ + if (DebugTableFile != stdout && fclose (DebugTableFile) != 0) { + Error ("Error closing table dump file '%s': %s", SB_GetConstBuf(&DebugTableName), strerror (errno)); + } } /* Don't delete the symbol and struct tables! */ @@ -386,6 +430,18 @@ void LeaveFunctionLevel (void) CheckSymTable (SymTab); CheckSymTable (LabelTab); + /* Dump the tables if requested */ + if (DebugTableFile) { + StrBuf* SymbolHeader = NewStrBuf(); + + SB_AppendStr (SymbolHeader, "SC_FUNC: "); + SB_AppendStr (SymbolHeader, CurrentFunc->FuncEntry->AsmName); + SB_AppendStr (SymbolHeader, ": Symbol table"); + SB_Terminate (SymbolHeader); + + PrintSymTable (SymTab, DebugTableFile, SB_GetConstBuf(SymbolHeader)); + } + /* Drop the label table if it is empty */ if (LabelTab->SymCount == 0) { FreeSymTable (LabelTab); From 06ddd042f20a0fe095f54452ca15692a56b22a6d Mon Sep 17 00:00:00 2001 From: empathicqubit <empathicqubit@entan.gl> Date: Sun, 20 Feb 2022 11:44:08 +0100 Subject: [PATCH 1483/2710] Documentation --- doc/cc65.sgml | 183 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index df58a0a95..67323931c 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -198,6 +198,189 @@ Here is a description of all the command line options: Enables debug mode, for debugging the behavior of cc65. + <tag><tt>--debug-tables name</tt></tag> + + Writes symbol table information to a file, which includes details on structs, unions + functions, and global variables. For example, given the following code: + + <tscreen><verb> + struct l { + unsigned char m; + unsigned char n; + }; + + struct hello { + unsigned char j; + unsigned char k; + struct l l; + }; + + struct sub { + unsigned char x; + unsigned char y; + }; + + union xy { + struct sub xy; + unsigned int mem; + }; + + typedef struct hello thingy; + + unsigned char single; + + unsigned char test_local_vars_main(void) { + static unsigned char wahoo; + static unsigned char bonanza = 0x42; + unsigned char i; + unsigned int j; + unsigned int *random; + unsigned char *lol; + signed char whoa; + struct hello wow; + thingy *cool; + union xy xy; + + return 0; + } + </verb></tscreen> + + The following output would be produced: + + <tscreen><verb> + SC_FUNC: _test_local_vars_main: Symbol table + ============================================ + __fixargs__: + Flags: SC_CONST SC_DEF + Type: unsigned int + __argsize__: + Flags: SC_CONST SC_DEF + Type: unsigned char + wahoo: + AsmName: M0001 + Flags: SC_STATIC SC_DEF SC_REF + Type: unsigned char + bonanza: + AsmName: M0002 + Flags: SC_STATIC SC_DEF SC_REF + Type: unsigned char + i: + Flags: SC_AUTO SC_DEF SC_REF + Type: unsigned char + j: + Flags: SC_AUTO SC_DEF SC_REF + Type: unsigned int + random: + Flags: SC_AUTO SC_DEF SC_REF + Type: unsigned int * + lol: + Flags: SC_AUTO SC_DEF SC_REF + Type: unsigned char * + whoa: + Flags: SC_AUTO SC_DEF SC_REF + Type: signed char + wow: + Flags: SC_AUTO SC_DEF SC_REF + Type: struct hello + cool: + Flags: SC_AUTO SC_DEF SC_REF + Type: struct hello * + xy: + Flags: SC_AUTO SC_DEF SC_REF + Type: union xy + + + + + Global symbol table + =================== + thingy: + AsmName: _thingy + Flags: SC_TYPEDEF 0x100000 + Type: struct hello + single: + AsmName: _single + Flags: SC_STATIC SC_EXTERN SC_STORAGE SC_DEF SC_REF 0x100000 + Type: unsigned char + test_local_vars_main: + AsmName: _test_local_vars_main + Flags: SC_FUNC SC_STATIC SC_EXTERN SC_DEF 0x100000 + Type: unsigned char (void) + + + + + Global tag table + ================ + l: + Flags: SC_STRUCT SC_DEF + Type: (none) + hello: + Flags: SC_STRUCT SC_DEF + Type: (none) + sub: + Flags: SC_STRUCT SC_DEF + Type: (none) + xy: + Flags: SC_UNION SC_DEF + Type: (none) + + + + + Global struct and union definitions + ========================= + + SC_STRUCT: l + ============ + m: + Flags: SC_STRUCTFIELD + Type: unsigned char + n: + Flags: SC_STRUCTFIELD + Type: unsigned char + + + + + SC_STRUCT: hello + ================ + j: + Flags: SC_STRUCTFIELD + Type: unsigned char + k: + Flags: SC_STRUCTFIELD + Type: unsigned char + l: + Flags: SC_STRUCTFIELD + Type: struct l + + + + + SC_STRUCT: sub + ============== + x: + Flags: SC_STRUCTFIELD + Type: unsigned char + y: + Flags: SC_STRUCTFIELD + Type: unsigned char + + + + + SC_UNION: xy + ============ + xy: + Flags: SC_STRUCTFIELD + Type: struct sub + mem: + Flags: SC_STRUCTFIELD + Type: unsigned int + </verb></tscreen> + + <tag><tt>--debug-opt name</tt></tag> The named file contains a list of specific optimization steps to enable or disable. From 89716ac831c478452e903895507d179038b57cd9 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 1 Mar 2022 06:44:26 +0200 Subject: [PATCH 1484/2710] Add target atari7800 --- asminc/atari7800.inc | 8 +++ asminc/atari7800_maria.inc | 39 ++++++++++++ asminc/atari7800_riot.inc | 20 ++++++ asminc/atari7800_tia.inc | 69 +++++++++++++++++++++ cfg/atari7800.cfg | 50 +++++++++++++++ doc/atari7800.sgml | 122 +++++++++++++++++++++++++++++++++++++ include/_maria.h | 63 +++++++++++++++++++ include/atari7800.h | 105 +++++++++++++++++++++++++++++++ 8 files changed, 476 insertions(+) create mode 100644 asminc/atari7800.inc create mode 100644 asminc/atari7800_maria.inc create mode 100644 asminc/atari7800_riot.inc create mode 100644 asminc/atari7800_tia.inc create mode 100644 cfg/atari7800.cfg create mode 100644 doc/atari7800.sgml create mode 100644 include/_maria.h create mode 100644 include/atari7800.h diff --git a/asminc/atari7800.inc b/asminc/atari7800.inc new file mode 100644 index 000000000..a7625aa8a --- /dev/null +++ b/asminc/atari7800.inc @@ -0,0 +1,8 @@ +; Atari 7800 TIA & RIOT read / write registers +; +; Karri Kaksonen (karri@sipo.fi), 2022 + +; TIA, RIOT & MARIA registers mapping +.include "atari7800_tia.inc" +.include "atari7800_riot.inc" +.include "atari7800_maria.inc" diff --git a/asminc/atari7800_maria.inc b/asminc/atari7800_maria.inc new file mode 100644 index 000000000..a8857812d --- /dev/null +++ b/asminc/atari7800_maria.inc @@ -0,0 +1,39 @@ +; Atari 7800 MARIA read / write registers +; + +; Read registers +BKGRND := $00 +P0C1 := $01 +P0C2 := $02 +P0C3 := $03 +MWSYNC := $04 +P1C1 := $05 +P1C2 := $06 +P1C3 := $07 +MSTAT := $08 +P2C1 := $09 +P2C2 := $0A +P2C3 := $0B +DPPH := $0C +P3C1 := $0D +P3C2 := $0E +P3C3 := $0F +DPPL := $10 +P4C1 := $11 +P4C2 := $12 +P4C3 := $13 +CHBASE := $14 +P5C1 := $15 +P5C2 := $16 +P5C3 := $17 +OFFSET := $18 +P6C1 := $19 +P6C2 := $1A +P6C3 := $1B +CTRL := $1C +P7C1 := $1D +P7C2 := $1E +P7C3 := $1F + +; Write registers + diff --git a/asminc/atari7800_riot.inc b/asminc/atari7800_riot.inc new file mode 100644 index 000000000..780e34df3 --- /dev/null +++ b/asminc/atari7800_riot.inc @@ -0,0 +1,20 @@ +; Atari 7800 RIOT read / write registers +; +; Source: DASM - vcs.h +; Details available in: Stella Programmer's Guide by Steve Wright +; +; Florent Flament (contact@florentflament.com), 2017 + +; Read registers +SWCHA := $0280 +CTLSWA := $0281 +SWCHB := $0282 +CTLSWB := $0283 +INTIM := $0284 +TIMINT := $0285 + +; Write registers +TIM1T := $0294 +TIM8T := $0295 +TIM64T := $0296 +T1024T := $0297 diff --git a/asminc/atari7800_tia.inc b/asminc/atari7800_tia.inc new file mode 100644 index 000000000..f4439e421 --- /dev/null +++ b/asminc/atari7800_tia.inc @@ -0,0 +1,69 @@ +; Atari 7800 TIA read / write registers +; +; Source: DASM - vcs.h +; Details available in: Stella Programmer's Guide by Steve Wright +; +; Florent Flament (contact@florentflament.com), 2017 + +; Read registers +VSYNC := $00 +VBLANK := $01 +WSYNC := $02 +RSYNC := $03 +NUSIZ0 := $04 +NUSIZ1 := $05 +COLUP0 := $06 +COLUP1 := $07 +COLUPF := $08 +COLUBK := $09 +CTRLPF := $0A +REFP0 := $0B +REFP1 := $0C +PF0 := $0D +PF1 := $0E +PF2 := $0F +RESP0 := $10 +RESP1 := $11 +RESM0 := $12 +RESM1 := $13 +RESBL := $14 +AUDC0 := $15 +AUDC1 := $16 +AUDF0 := $17 +AUDF1 := $18 +AUDV0 := $19 +AUDV1 := $1A +GRP0 := $1B +GRP1 := $1C +ENAM0 := $1D +ENAM1 := $1E +ENABL := $1F +HMP0 := $20 +HMP1 := $21 +HMM0 := $22 +HMM1 := $23 +HMBL := $24 +VDELP0 := $25 +VDELP1 := $26 +VDELBL := $27 +RESMP0 := $28 +RESMP1 := $29 +HMOVE := $2A +HMCLR := $2B +CXCLR := $2C + +; Write registers +CXM0P := $00 +CXM1P := $01 +CXP0FB := $02 +CXP1FB := $03 +CXM0FB := $04 +CXM1FB := $05 +CXBLPF := $06 +CXPPMM := $07 +INPT0 := $08 +INPT1 := $09 +INPT2 := $0A +INPT3 := $0B +INPT4 := $0C +INPT5 := $0D diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg new file mode 100644 index 000000000..a2aa7b36c --- /dev/null +++ b/cfg/atari7800.cfg @@ -0,0 +1,50 @@ +# Atari VCS 7800 linker configuration file for cc65 + +SYMBOLS { + __STACKSIZE__: type = weak, value = $0010; # 16 bytes stack +} + +MEMORY { + ZP: file = "", define = yes, start = $0040, size = $00C0, type = rw; + SP: file = "", define = yes, start = $0140, size = $00C0, type = rw; + RAM1: file = "", define = yes, start = $1800, size = $0840, type = rw; + RAM2: file = "", define = yes, start = $2100, size = $0040, type = rw; + RAM3: file = "", define = yes, start = $2200, size = $0600, type = rw; + # "Normal" cartridge rom. Multiple banks arent supported + # by this script. You may change the rom size, but keep + # two things in mind: + # - start must be a multiple of $1000 + # - ROM must end at $ff79 + ROM: file = %O, define = yes, start = $8000, size = $7f7a, type = ro, fill = yes, fillval = $ff; + # Encryption stuff + ROME: file = %O, start = $ff7a, size = $80, type = ro, fill = yes, fillval = $ff; + # Interrupt vectors + ROMV: file = %O, start = $fffa, size = $6, type = ro, fill = yes, fillval = $ff; +} + +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + STARTUP: load = ROM, type = ro, define = yes; + CODE: load = ROM, type = ro, define = yes; + RODATA: load = ROM, type = ro, define = yes, align = 256; + DATA: load = ROM, run = RAM1, type = rw, define = yes; + BSS: load = RAM1, type = bss, define = yes; + VECTORS: load = ROM, type = ro, define = yes; + ENCRYPTION: load = ROME, type = ro 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/doc/atari7800.sgml b/doc/atari7800.sgml new file mode 100644 index 000000000..95868bbd9 --- /dev/null +++ b/doc/atari7800.sgml @@ -0,0 +1,122 @@ +<!doctype linuxdoc system> + +<article> +<title>Atari 7800 specific information for cc65 +<author> +<url url="mailto:contact@florentflament.com" name="Florent Flament"><newline> + +<abstract> +An overview over the Atari 7800 runtime system as it is implemented +for the cc65 C compiler. +</abstract> + +<!-- Table of contents --> +<toc> + +<!-- Begin the document --> + +<sect>Overview<p> + +This file contains an overview of the Atari 7800 runtime system as it +comes with the cc65 C compiler. It describes the memory layout, Atari +7800 specific header files and any pitfalls specific to that platform. + +<sect>Binary format<p> + +The default binary output format generated by the linker for the Atari +7800 target is a 4K cartridge image. + +<sect>Memory layout<p> + +cc65 generated programs with the default setup can use RAM from +$0080 to $00FF - __STACKSIZE__, where __STACKSIZE__ is +the size of the system stack with a default value of 16 bytes. The +size of the system stack can be customized by defining the +__STACKSIZE__ linker variable. + +Special locations: + +<descrip> + <tag/Stack/ The C runtime stack is located at $00FF - + __STACKSIZE__ and growing downwards. + + <tag/Heap/ The C heap is located at $0080 and grows upwards. + +</descrip><p> + +<sect>Start-up condition<p> + +When powered-up, the Atari 7800 TIA registers contain random +values. During the initialization phase, the start-up code needs to +initialize the TIA registers to sound values (or else the console has +an unpredictable behavior). In this implementation, zeros are written +to all of TIA registers during the start-up phase. + +Note that RIOT registers (mostly timers) are left uninitialized, as +they don't have any consequence on the console behavior. + +<sect>Platform specific header files<p> + +Programs containing Atari 7800 specific code may use the +<tt/atari7800.h/ header file. + +The following pseudo variables declared in the <tt/atari7800.h/ header +file allow access to the Atari 7800 TIA & RIOT chips registers. + +<descrip> + + <tag><tt/TIA/</tag> The <tt/TIA/ structure allows read/write access + to the Atari 7800 TIA chip registers. See the <tt/_tia.h/ header + file located in the include directory for the declaration of the + structure. Also refer to the Stella Programmer's Guide by Steve + Wright for a detailed description of the chip and its registers. + + <tag><tt/RIOT/</tag> The <tt/RIOT/ structure allows read/write + access to the Atari 7800 RIOT chip registers. See the + <tt/_riot.h/ header file located in the include directory for the + declaration of the structure. Also refer to the Stella Programmer's + Guide by Steve Wright for a detailed description of the chip and its + registers. + +</descrip><p> + + +<sect>Loadable drivers<p> + +There are no drivers for the Atari 7800. + + +<sect>Limitations<p> + +TBD + + +<sect>Other hints<p> + +One may write a custom linker configuration file to tune the memory +layout of a program. See the <tt/atari7800.cfg/ file in the cfg +directory as a starting point. + + +<sect>License<p> + +This software is provided 'as-is', without any expressed or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +<enum> +<item> The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +<item> Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. +<item> This notice may not be removed or altered from any source + distribution. +</enum> + +</article> diff --git a/include/_maria.h b/include/_maria.h new file mode 100644 index 000000000..461119fda --- /dev/null +++ b/include/_maria.h @@ -0,0 +1,63 @@ +/*****************************************************************************/ +/* */ +/* _maria.h */ +/* */ +/* Atari 7800, Maria chip register hardware structures */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + +/* + * MARIA registers + */ +struct __maria { + unsigned char bkgrnd; + unsigned char p0c1; + unsigned char p0c2; + unsigned char p0c3; + unsigned char wsync; + unsigned char p1c1; + unsigned char p1c2; + unsigned char p1c3; + unsigned char mstat; + unsigned char p2c1; + unsigned char p2c2; + unsigned char p2c3; + unsigned char dpph; + unsigned char p3c1; + unsigned char p3c2; + unsigned char p3c3; + unsigned char dppl; + unsigned char p4c1; + unsigned char p4c2; + unsigned char p4c3; + unsigned char chbase; + unsigned char p5c1; + unsigned char p5c2; + unsigned char p5c3; + unsigned char offset; + unsigned char p6c1; + unsigned char p6c2; + unsigned char p6c3; + unsigned char ctrl; + unsigned char p7c1; + unsigned char p7c2; + unsigned char p7c3; +}; diff --git a/include/atari7800.h b/include/atari7800.h new file mode 100644 index 000000000..378f8786a --- /dev/null +++ b/include/atari7800.h @@ -0,0 +1,105 @@ +/*****************************************************************************/ +/* */ +/* Atari VCS 7800 TIA & RIOT registers addresses */ +/* */ +/* Karri Kaksonen (karri@sipo.fi), 2022 */ +/* */ +/* */ +/*****************************************************************************/ + + + +#ifndef _ATARI7800_H +#define _ATARI7800_H + +/* Check for errors */ +#if !defined(__ATARI7800__) +# error This module may only be used when compiling for the Atari 7800! +#endif + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* Color defines */ +#define COLOR_BLACK 0x00 +#define COLOR_WHITE 0x0F + +/* TGI color defines (default palette) */ +#define TGI_COLOR_BLACK COLOR_BLACK +#define TGI_COLOR_WHITE COLOR_WHITE + +/* Masks for joy_read */ +#define JOY_RIGHT_MASK 0x80 +#define JOY_LEFT_MASK 0x40 +#define JOY_DOWN_MASK 0x20 +#define JOY_UP_MASK 0x10 +#define JOY_BTN_1_MASK 0x01 +#define JOY_BTN_2_MASK 0x02 + +#define JOY_BTN_A_MASK JOY_BTN_1_MASK +#define JOY_BTN_B_MASK JOY_BTN_2_MASK + +#define JOY_BTN_A(v) ((v) & JOY_BTN_A_MASK) +#define JOY_BTN_B(v) ((v) & JOY_BTN_B_MASK) + +/* No support for dynamically loadable drivers */ +#define DYN_DRV 0 + +#include <_tia.h> +#define TIA (*(struct __tia*)0x0000) + +#include <_riot.h> +#define RIOT (*(struct __riot*)0x0280) + +#include <_maria.h> +#define MARIA (*(struct __maria*)0x0020) + +/* + * Alternative MARIA register definitions. + */ +#define BKGRND MARIA.bkgrnd +#define BACKGRND MARIA.bkgrnd +#define P0C1 MARIA.p0c1 +#define P0C2 MARIA.p0c2 +#define P0C3 MARIA.p0c3 +#define WSYNC MARIA.wsync +#define P1C1 MARIA.p1c1 +#define P1C2 MARIA.p1c2 +#define P1C3 MARIA.p1c3 +#define MSTAT MARIA.mstat +#define P2C1 MARIA.p2c1 +#define P2C2 MARIA.p2c2 +#define P2C3 MARIA.p2c3 +#define DPPH MARIA.dpph +#define DPH MARIA.dpph +#define P3C1 MARIA.p3c1 +#define P3C2 MARIA.p3c2 +#define P3C3 MARIA.p3c3 +#define DPPL MARIA.dppl +#define DPL MARIA.dppl +#define P4C1 MARIA.p4c1 +#define P4C2 MARIA.p4c2 +#define P4C3 MARIA.p4c3 +#define CHBASE MARIA.chbase +#define P5C1 MARIA.p5c1 +#define P5C2 MARIA.p5c2 +#define P5C3 MARIA.p5c3 +#define OFFSET MARIA.offset +#define P6C1 MARIA.p6c1 +#define P6C2 MARIA.p6c2 +#define P6C3 MARIA.p6c3 +#define CTRL MARIA.ctrl +#define P7C1 MARIA.p7c1 +#define P7C2 MARIA.p7c2 +#define P7C3 MARIA.p7c3 + +/* + * MSTAT register constants + */ +#define MSTAT_VBLANK 0x80 /* vblank is on when bit 7 is set */ + +/* End of atari7800.h */ +#endif From e653204ffe3fe6f4b275fa3d9f736e722237d40f Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 1 Mar 2022 06:44:55 +0200 Subject: [PATCH 1485/2710] Add target atari7800 --- README.md | 1 + doc/ca65.sgml | 1 + doc/index.sgml | 3 +++ doc/ld65.sgml | 1 + include/target.h | 2 ++ libsrc/Makefile | 1 + src/ca65/main.c | 4 ++++ src/cc65/main.c | 4 ++++ src/common/target.c | 2 ++ src/common/target.h | 1 + targettest/Makefile | 4 ++++ 11 files changed, 24 insertions(+) diff --git a/README.md b/README.md index efc0ff6a9..32e3345c6 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ including - the Atari 8-bit machines. - the Atari 2600 console. - the Atari 5200 console. +- the Atari 7800 console. - GEOS for the C64, C128 and Apple //e. - the Bit Corporation Gamate console. - the NEC PC-Engine (aka TurboGrafx-16) console. diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 8797f2c60..c0ebe3688 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -4763,6 +4763,7 @@ compiler, depending on the target system selected: <item><tt/__APPLE2ENH__/ - Target system is <tt/apple2enh/ <item><tt/__ATARI2600__/ - Target system is <tt/atari2600/ <item><tt/__ATARI5200__/ - Target system is <tt/atari5200/ +<item><tt/__ATARI7800__/ - Target system is <tt/atari7800/ <item><tt/__ATARI__/ - Target system is <tt/atari/ or <tt/atarixl/ <item><tt/__ATARIXL__/ - Target system is <tt/atarixl/ <item><tt/__ATMOS__/ - Target system is <tt/atmos/ diff --git a/doc/index.sgml b/doc/index.sgml index 3bb085bf6..bb3ad5357 100644 --- a/doc/index.sgml +++ b/doc/index.sgml @@ -124,6 +124,9 @@ <tag><htmlurl url="atari5200.html" name="atari5200.html"></tag> Topics specific to the Atari 5200 Game Console. + <tag><htmlurl url="atari7800.html" name="atari7800.html"></tag> + Topics specific to the Atari 7800 Game Console. + <tag><htmlurl url="atmos.html" name="atmos.html"></tag> Topics specific to the Oric Atmos. diff --git a/doc/ld65.sgml b/doc/ld65.sgml index 87c2cae51..307caeaa4 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -166,6 +166,7 @@ Here is a description of all of the command-line options: <item>apple2 <item>apple2enh <item>atari2600 + <item>atari7800 <item>atari <item>atarixl <item>atmos diff --git a/include/target.h b/include/target.h index af401ec35..7663a39dd 100644 --- a/include/target.h +++ b/include/target.h @@ -43,6 +43,8 @@ # include <atari2600.h> #elif defined(__ATARI5200__) # include <atari5200.h> +#elif defined(__ATARI7800__) +# include <atari7800.h> #elif defined(__ATMOS__) # include <atmos.h> #elif defined(__CBM__) diff --git a/libsrc/Makefile b/libsrc/Makefile index 60946b59f..177314bdf 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -21,6 +21,7 @@ TARGETS = apple2 \ atarixl \ atari2600 \ atari5200 \ + atari7800 \ atmos \ creativision \ $(CBMS) \ diff --git a/src/ca65/main.c b/src/ca65/main.c index 0eaf4ba6b..b1ef3a3db 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -212,6 +212,10 @@ static void SetSys (const char* Sys) NewSymbol ("__ATARI5200__", 1); break; + case TGT_ATARI7800: + NewSymbol ("__ATARI7800__", 1); + break; + case TGT_ATARI: NewSymbol ("__ATARI__", 1); break; diff --git a/src/cc65/main.c b/src/cc65/main.c index 74d4fd146..c08616efa 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -173,6 +173,10 @@ static void SetSys (const char* Sys) DefineNumericMacro ("__ATARI5200__", 1); break; + case TGT_ATARI7800: + DefineNumericMacro ("__ATARI7800__", 1); + break; + case TGT_ATARI: DefineNumericMacro ("__ATARI__", 1); break; diff --git a/src/common/target.c b/src/common/target.c index a35bf67a8..4a851034a 100644 --- a/src/common/target.c +++ b/src/common/target.c @@ -147,6 +147,7 @@ static const TargetEntry TargetMap[] = { { "atari", TGT_ATARI }, { "atari2600", TGT_ATARI2600 }, { "atari5200", TGT_ATARI5200 }, + { "atari7800", TGT_ATARI7800 }, { "atarixl", TGT_ATARIXL }, { "atmos", TGT_ATMOS }, { "bbc", TGT_BBC }, @@ -188,6 +189,7 @@ static const TargetProperties PropertyTable[TGT_COUNT] = { { "atari", CPU_6502, BINFMT_BINARY, CTAtari }, { "atari2600", CPU_6502, BINFMT_BINARY, CTNone }, { "atari5200", CPU_6502, BINFMT_BINARY, CTAtari }, + { "atari7800", CPU_6502, BINFMT_BINARY, CTNone }, { "atarixl", CPU_6502, BINFMT_BINARY, CTAtari }, { "vic20", CPU_6502, BINFMT_BINARY, CTPET }, { "c16", CPU_6502, BINFMT_BINARY, CTPET }, diff --git a/src/common/target.h b/src/common/target.h index 7f85713cf..7087048e2 100644 --- a/src/common/target.h +++ b/src/common/target.h @@ -57,6 +57,7 @@ typedef enum { TGT_ATARI, TGT_ATARI2600, TGT_ATARI5200, + TGT_ATARI7800, TGT_ATARIXL, TGT_VIC20, TGT_C16, diff --git a/targettest/Makefile b/targettest/Makefile index 806f6b445..0450bfd4e 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -673,6 +673,9 @@ EXELIST_atari2600 = \ EXELIST_atari5200 = \ minimal +EXELIST_atari7800 = \ + minimal + EXELIST_gamate = \ minimal @@ -728,6 +731,7 @@ TARGETS := \ atarixl \ atari2600 \ atari5200 \ + atari7800 \ atmos \ bbc \ c128 \ From 92043bc7c8df96b1d11095db62d894a61016655c Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 1 Mar 2022 07:03:29 +0200 Subject: [PATCH 1486/2710] Remove garbage --- include/atari7800.h | 50 +++++---------------------------------------- 1 file changed, 5 insertions(+), 45 deletions(-) diff --git a/include/atari7800.h b/include/atari7800.h index 378f8786a..4fdaacfcc 100644 --- a/include/atari7800.h +++ b/include/atari7800.h @@ -25,10 +25,14 @@ /* Color defines */ #define COLOR_BLACK 0x00 -#define COLOR_WHITE 0x0F +#define COLOR_GREY 0x01 +#define COLOR_LIGHTGREY 0x02 +#define COLOR_WHITE 0x03 /* TGI color defines (default palette) */ #define TGI_COLOR_BLACK COLOR_BLACK +#define TGI_COLOR_GREY COLOR_GREY +#define TGI_COLOR_LIGHTGREY COLOR_LIGHTGREY #define TGI_COLOR_WHITE COLOR_WHITE /* Masks for joy_read */ @@ -57,49 +61,5 @@ #include <_maria.h> #define MARIA (*(struct __maria*)0x0020) -/* - * Alternative MARIA register definitions. - */ -#define BKGRND MARIA.bkgrnd -#define BACKGRND MARIA.bkgrnd -#define P0C1 MARIA.p0c1 -#define P0C2 MARIA.p0c2 -#define P0C3 MARIA.p0c3 -#define WSYNC MARIA.wsync -#define P1C1 MARIA.p1c1 -#define P1C2 MARIA.p1c2 -#define P1C3 MARIA.p1c3 -#define MSTAT MARIA.mstat -#define P2C1 MARIA.p2c1 -#define P2C2 MARIA.p2c2 -#define P2C3 MARIA.p2c3 -#define DPPH MARIA.dpph -#define DPH MARIA.dpph -#define P3C1 MARIA.p3c1 -#define P3C2 MARIA.p3c2 -#define P3C3 MARIA.p3c3 -#define DPPL MARIA.dppl -#define DPL MARIA.dppl -#define P4C1 MARIA.p4c1 -#define P4C2 MARIA.p4c2 -#define P4C3 MARIA.p4c3 -#define CHBASE MARIA.chbase -#define P5C1 MARIA.p5c1 -#define P5C2 MARIA.p5c2 -#define P5C3 MARIA.p5c3 -#define OFFSET MARIA.offset -#define P6C1 MARIA.p6c1 -#define P6C2 MARIA.p6c2 -#define P6C3 MARIA.p6c3 -#define CTRL MARIA.ctrl -#define P7C1 MARIA.p7c1 -#define P7C2 MARIA.p7c2 -#define P7C3 MARIA.p7c3 - -/* - * MSTAT register constants - */ -#define MSTAT_VBLANK 0x80 /* vblank is on when bit 7 is set */ - /* End of atari7800.h */ #endif From 3792347d5d3a0f364581999a14c687054aae0b53 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 1 Mar 2022 07:37:07 +0200 Subject: [PATCH 1487/2710] Add crt0.s and ctype.s --- libsrc/atari7800/crt0.s | 71 ++++++++++++++++++++++++++++++++++++++++ libsrc/atari7800/ctype.s | 5 +++ 2 files changed, 76 insertions(+) create mode 100644 libsrc/atari7800/crt0.s create mode 100644 libsrc/atari7800/ctype.s diff --git a/libsrc/atari7800/crt0.s b/libsrc/atari7800/crt0.s new file mode 100644 index 000000000..3d53abfa8 --- /dev/null +++ b/libsrc/atari7800/crt0.s @@ -0,0 +1,71 @@ + .export _zonecounter + .export __STARTUP__ : absolute = 1 + .export _exit + .import __ROM_START__ + .import __RAM3_START__, __RAM3_SIZE__ + .import initlib, donelib + .import zerobss, copydata + .import push0, _main + .include "zeropage.inc" + +INPTCTRL = $01 +OFFSET = $38 +CTRL = $3c + + .segment "STARTUP" +start: + ; Startup sequence recommended by Atari. + ; See the 7800 standards document. + sei ; Initialize 6502 + cld + lda #$07 ; Lock machine in 7800 mode + sta INPTCTRL + lda #$7f ; DMA off + sta CTRL + ldx #0 ; OFFSET must always be 0 + stx OFFSET + stx INPTCTRL ; Make sure joysticks don't freeze + dex ; Stack pointer = $ff + txs + + ; Set up parameter stack + lda #<(__RAM3_START__ + __RAM3_SIZE__) + sta sp + lda #>(__RAM3_START__ + __RAM3_SIZE__) + sta sp+1 + + jsr copydata + jsr zerobss + jsr initlib + + ; Call main program (pass empty command line) + jsr push0 ; argc + jsr push0 ; argv + ldy #4 ; Argument size + jsr _main + +_exit: + jsr donelib + jmp start + +NMIHandler: + inc _zonecounter + rti + +IRQHandler: + rti + + .segment "DATA" +_zonecounter: + .byte 0 + + .segment "ENCRYPTION" + .res 126, $ff ; Reserved for encryption +Lfff8: .byte $ff ; Region verification (always $ff) +Lfff9: .byte $f7 ; Use last 4096 bytes only for encryption +;;;Lfff9: .byte <(((__ROM_START__/4096)<<4) | 7) + + .segment "VECTORS" + .word NMIHandler + .word start + .word IRQHandler diff --git a/libsrc/atari7800/ctype.s b/libsrc/atari7800/ctype.s new file mode 100644 index 000000000..1301965eb --- /dev/null +++ b/libsrc/atari7800/ctype.s @@ -0,0 +1,5 @@ +; Character specification table. +; +; uses the "common" definition + + .include "ctype_common.inc" From 4cd32829eac192434e12d05453e867246268150c Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 1 Mar 2022 07:44:47 +0200 Subject: [PATCH 1488/2710] Add segment ONCE --- cfg/atari7800.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index a2aa7b36c..cf663be3d 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -25,6 +25,7 @@ MEMORY { SEGMENTS { ZEROPAGE: load = ZP, type = zp; STARTUP: load = ROM, type = ro, define = yes; + ONCE: load = ROM, type = ro, define = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, define = yes, align = 256; DATA: load = ROM, run = RAM1, type = rw, define = yes; From dc75972e9e81bf3511cc3e11330f27d3ad836a7c Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 1 Mar 2022 09:28:06 +0200 Subject: [PATCH 1489/2710] Add exehdr --- libsrc/atari7800/exehdr.s | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 libsrc/atari7800/exehdr.s diff --git a/libsrc/atari7800/exehdr.s b/libsrc/atari7800/exehdr.s new file mode 100644 index 000000000..15ce7ea29 --- /dev/null +++ b/libsrc/atari7800/exehdr.s @@ -0,0 +1,39 @@ +; ------------------------------------------------------------------------ +; EXE header + .segment "EXEHDR" + .byte 3 ; version + .byte 'A','T','A','R','I','7','8','0','0',' ',' ',' ',' ',' ',' ',' ' + .byte 'G','a','m','e',' ','n','a','m','e',0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,$80,0 ; Size + ; bit 0 - pokey at 4000 + ; bit 1 - supergame bank switched + ; bit 2 - supergame ram at $4000 + ; bit 3 - rom at $4000 + ; bit 4 - bank 6 at $4000 + ; bit 5 - supergame banked ram + ; bit 6 - pokey at $450 + ; bit 7 - mirror ram at $4000 + ; bit 8 - activision banking + ; bit 9 - absolute banking + ; bit 10 - pokey at $440 + ; bit 11 - ym2151 at $461/462 + ; bit 12 - souper + ; bit 13-15 - Special + ; 0 = Normal cart + .byte 0,0 ; 0 = Normal cart + .byte 1 ; 1 = Joystick, 2 = lightgun + .byte 0 ; No joystick 2 + .byte 0 ; bit0 = 0:NTSC,1:PAL bit1 = 0:component,1:composite + .byte 0 ; Save data peripheral - 1 byte (version 2) + ; 0 = None / unknown (default) + ; 1 = High Score Cart (HSC) + ; 2 = SaveKey + + .byte 0 ; 63 Expansion module + ; 0 = No expansion module (default on all currently released games) + ; 1 = Expansion module required + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0 + .byte 'A','C','T','U','A','L',' ','C','A','R','T',' ','D','A','T','A',' ','S','T','A','R','T','S',' ','H','E','R','E' From d586c83dae85ab876aea3ab445313d5ac4636966 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 1 Mar 2022 09:28:15 +0200 Subject: [PATCH 1490/2710] Add exehdr --- cfg/atari7800.cfg | 26 ++++++++++++++++++++------ libsrc/atari7800/exehdr.s | 7 +++++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index cf663be3d..8029ca674 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -2,6 +2,16 @@ SYMBOLS { __STACKSIZE__: type = weak, value = $0010; # 16 bytes stack + __EXEHDR__: type = import; + __VEC_BOTTOM__: value = $fffa, type = export; + __VEC_SIZE__: value = $6, type = export; + __ENCRYPT_BOTTOM__: value = $ff7a, type = export; + __ENCRYPT_SIZE__: value = $80, type = export; + __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; + __INIT_SIZE__: value = 69, type = export; + __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; + __MEMORY_BOTTOM__: value = $8000, type = export; + __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; } MEMORY { @@ -10,27 +20,31 @@ MEMORY { RAM1: file = "", define = yes, start = $1800, size = $0840, type = rw; RAM2: file = "", define = yes, start = $2100, size = $0040, type = rw; RAM3: file = "", define = yes, start = $2200, size = $0600, type = rw; + # For emulators you also need a header file + HEADER: file = %O, start = $0000, size = 128; # "Normal" cartridge rom. Multiple banks arent supported # by this script. You may change the rom size, but keep # two things in mind: # - start must be a multiple of $1000 # - ROM must end at $ff79 - ROM: file = %O, define = yes, start = $8000, size = $7f7a, type = ro, fill = yes, fillval = $ff; + ROM: file = %O, define = yes, start = __MEMORY_BOTTOM__, size = __FREE_ROM_SIZE__, type = ro, fill = yes, fillval = $ff; + ROMS: file = %O, define = yes, start = __MEMORY_INIT__, size = __INIT_SIZE__, type = ro, fill = yes, fillval = $ff; # Encryption stuff - ROME: file = %O, start = $ff7a, size = $80, type = ro, fill = yes, fillval = $ff; + ROME: file = %O, start = __ENCRYPT_BOTTOM__, size = __ENCRYPT_SIZE__, type = ro, fill = yes, fillval = $ff; # Interrupt vectors - ROMV: file = %O, start = $fffa, size = $6, type = ro, fill = yes, fillval = $ff; + ROMV: file = %O, start = __VEC_BOTTOM__, size = __VEC_SIZE__, type = ro, fill = yes, fillval = $ff; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; - STARTUP: load = ROM, type = ro, define = yes; - ONCE: load = ROM, type = ro, define = yes; + EXEHDR: load = HEADER, type = ro, define = yes; + STARTUP: load = ROMS, type = ro, define = yes; + ONCE: load = ROMS, type = ro, define = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, define = yes, align = 256; DATA: load = ROM, run = RAM1, type = rw, define = yes; BSS: load = RAM1, type = bss, define = yes; - VECTORS: load = ROM, type = ro, define = yes; + VECTORS: load = ROMV, type = ro, define = yes; ENCRYPTION: load = ROME, type = ro define = yes; } diff --git a/libsrc/atari7800/exehdr.s b/libsrc/atari7800/exehdr.s index 15ce7ea29..6f3023040 100644 --- a/libsrc/atari7800/exehdr.s +++ b/libsrc/atari7800/exehdr.s @@ -1,3 +1,10 @@ +; +; Karri Kaksonen, 2022 +; +; This header contains data for emulators +; + .export __EXEHDR__: absolute = 1 + ; ------------------------------------------------------------------------ ; EXE header .segment "EXEHDR" From db48605434d8768e187424019f588aa4e9bf0ff5 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Fri, 4 Mar 2022 20:21:20 +0200 Subject: [PATCH 1491/2710] Update docs --- doc/atari7800.sgml | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/doc/atari7800.sgml b/doc/atari7800.sgml index 95868bbd9..85f6e4f9f 100644 --- a/doc/atari7800.sgml +++ b/doc/atari7800.sgml @@ -3,7 +3,7 @@ <article> <title>Atari 7800 specific information for cc65 <author> -<url url="mailto:contact@florentflament.com" name="Florent Flament"><newline> +<url url="mailto:karri@sipo.fi" name="Karri Kaksonen"><newline> <abstract> An overview over the Atari 7800 runtime system as it is implemented @@ -24,23 +24,31 @@ comes with the cc65 C compiler. It describes the memory layout, Atari <sect>Binary format<p> The default binary output format generated by the linker for the Atari -7800 target is a 4K cartridge image. +7800 target is a 32K cartridge image. <sect>Memory layout<p> cc65 generated programs with the default setup can use RAM from -$0080 to $00FF - __STACKSIZE__, where __STACKSIZE__ is -the size of the system stack with a default value of 16 bytes. The +from $1800 to $203f. +The 4k RAM is then mapped to zero page area. +$2040 to $20ff is visible as zero page. +After that we have a vero small RAM area that is unused. +$2100 to $213f. +Then we mirror a second block from the RAM to become the hardware stack. +This would be from $2140 to $21ff. + +The C-stack starts at $2800 and it can grow down to $2200. + size of the system stack can be customized by defining the __STACKSIZE__ linker variable. Special locations: <descrip> - <tag/Stack/ The C runtime stack is located at $00FF - + <tag/Stack/ The C runtime stack is located at $2800 - __STACKSIZE__ and growing downwards. - <tag/Heap/ The C heap is located at $0080 and grows upwards. + <tag/Heap/ The C heap is located at $2200 and grows upwards. </descrip><p> @@ -61,7 +69,7 @@ Programs containing Atari 7800 specific code may use the <tt/atari7800.h/ header file. The following pseudo variables declared in the <tt/atari7800.h/ header -file allow access to the Atari 7800 TIA & RIOT chips registers. +file allow access to the Atari 7800 TIA, MARIA & RIOT chips registers. <descrip> @@ -78,6 +86,11 @@ file allow access to the Atari 7800 TIA & RIOT chips registers. Guide by Steve Wright for a detailed description of the chip and its registers. + <tag><tt/MARIA/</tag> The <tt/MARIA/ structure allows read/write + access to the Atari 7800 MARIA chip registers. See the + <tt/_maria.h/ header file located in the include directory for the + declaration of the structure. + </descrip><p> @@ -91,6 +104,12 @@ There are no drivers for the Atari 7800. TBD +<sect>Encryption<p> + +In order to boot the game in a mode that supports atari7800 functions +the cart must be encrypted after the linking phase. +There is a program called sign7800 that can be used to sign the cart. + <sect>Other hints<p> One may write a custom linker configuration file to tune the memory From f7c59ee1ec21b0b90fab50a24bc502e2f7cff183 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 7 Mar 2022 08:48:59 +0200 Subject: [PATCH 1492/2710] Add CARTSIZE to cfg file for configuring the a78 header. Add descriptions of usage. --- cfg/atari7800.cfg | 11 ++++++++--- doc/atari7800.sgml | 30 +++++++++++++++++++++++------- libsrc/atari7800/exehdr.s | 4 ++-- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 8029ca674..d7b166809 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -1,7 +1,12 @@ # Atari VCS 7800 linker configuration file for cc65 +# This cfg file adds the a78 header in front of the image +# If you want just the ROM you can mark the __EXEHDR__ as weak instead of import +# But for the most common use we add the a78 automatically as it +# contains info about what kind of cart the build supports SYMBOLS { - __STACKSIZE__: type = weak, value = $0010; # 16 bytes stack + __STACKSIZE__: type = weak, value = $0600; # C stack + __CARTSIZE__: type = weak, value = $c000; __EXEHDR__: type = import; __VEC_BOTTOM__: value = $fffa, type = export; __VEC_SIZE__: value = $6, type = export; @@ -21,7 +26,7 @@ MEMORY { RAM2: file = "", define = yes, start = $2100, size = $0040, type = rw; RAM3: file = "", define = yes, start = $2200, size = $0600, type = rw; # For emulators you also need a header file - HEADER: file = %O, start = $0000, size = 128; + HEADER: file = %O, start = $0000, size = 128; # "Normal" cartridge rom. Multiple banks arent supported # by this script. You may change the rom size, but keep # two things in mind: @@ -37,7 +42,7 @@ MEMORY { SEGMENTS { ZEROPAGE: load = ZP, type = zp; - EXEHDR: load = HEADER, type = ro, define = yes; + EXEHDR: load = HEADER, type = ro; STARTUP: load = ROMS, type = ro, define = yes; ONCE: load = ROMS, type = ro, define = yes; CODE: load = ROM, type = ro, define = yes; diff --git a/doc/atari7800.sgml b/doc/atari7800.sgml index 85f6e4f9f..b6551614c 100644 --- a/doc/atari7800.sgml +++ b/doc/atari7800.sgml @@ -24,7 +24,29 @@ comes with the cc65 C compiler. It describes the memory layout, Atari <sect>Binary format<p> The default binary output format generated by the linker for the Atari -7800 target is a 32K cartridge image. +7800 target is a 48K cartridge image. + +<sect>A78 header<p> + +There is lots of different cart hardware available for the atari7800. +Some carts have ROM, RAM, sound hardware, non-volatile high score chips. +In order to know what kind of hardware the cart build requires there is +a header file of 128 bytes in front of the binary. + +The default build creates a cart file for a 48K rom cart without any +extra features like the pokey audio chip or extra RAM. + +In order to make cc65 more user friendly the build will add the a78 +header automatically. This allows you to run the binary on emulators +and flash carts on the real console. + +<sect>Encryption<p> + +In order to boot the game in a mode that supports atari7800 functions +the cart must be encrypted after the linking phase. +There is a program called sign7800 that can be used to sign the cart. +The encryption is not required for running the cart on emulators. +You can also run atari2600 games without encryption. <sect>Memory layout<p> @@ -104,12 +126,6 @@ There are no drivers for the Atari 7800. TBD -<sect>Encryption<p> - -In order to boot the game in a mode that supports atari7800 functions -the cart must be encrypted after the linking phase. -There is a program called sign7800 that can be used to sign the cart. - <sect>Other hints<p> One may write a custom linker configuration file to tune the memory diff --git a/libsrc/atari7800/exehdr.s b/libsrc/atari7800/exehdr.s index 6f3023040..618164cd4 100644 --- a/libsrc/atari7800/exehdr.s +++ b/libsrc/atari7800/exehdr.s @@ -4,7 +4,7 @@ ; This header contains data for emulators ; .export __EXEHDR__: absolute = 1 - + .import __CARTSIZE__ ; ------------------------------------------------------------------------ ; EXE header .segment "EXEHDR" @@ -12,7 +12,7 @@ .byte 'A','T','A','R','I','7','8','0','0',' ',' ',' ',' ',' ',' ',' ' .byte 'G','a','m','e',' ','n','a','m','e',0,0,0,0,0,0,0 .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - .byte 0,0,$80,0 ; Size + .byte 0,0,>__CARTSIZE__,0 ; Set the cart size in the cfg file ; bit 0 - pokey at 4000 ; bit 1 - supergame bank switched ; bit 2 - supergame ram at $4000 From 0be3882f0871d2c5c8e3b606cb01e67d4879c9ce Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sun, 13 Mar 2022 12:32:13 +0200 Subject: [PATCH 1493/2710] Remove the EXEHDR from the default build --- cfg/atari7800.cfg | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index d7b166809..85abc24ee 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -1,13 +1,10 @@ # Atari VCS 7800 linker configuration file for cc65 -# This cfg file adds the a78 header in front of the image -# If you want just the ROM you can mark the __EXEHDR__ as weak instead of import -# But for the most common use we add the a78 automatically as it -# contains info about what kind of cart the build supports +# In order to add the a78 header to the build you can add +# "--force-import __EXEHDR__" to the command line SYMBOLS { __STACKSIZE__: type = weak, value = $0600; # C stack __CARTSIZE__: type = weak, value = $c000; - __EXEHDR__: type = import; __VEC_BOTTOM__: value = $fffa, type = export; __VEC_SIZE__: value = $6, type = export; __ENCRYPT_BOTTOM__: value = $ff7a, type = export; @@ -42,9 +39,9 @@ MEMORY { SEGMENTS { ZEROPAGE: load = ZP, type = zp; - EXEHDR: load = HEADER, type = ro; - STARTUP: load = ROMS, type = ro, define = yes; - ONCE: load = ROMS, type = ro, define = yes; + EXEHDR: load = HEADER, type = ro, optional = yes; + STARTUP: load = ROMS, type = ro, define = yes; + ONCE: load = ROMS, type = ro, define = yes; CODE: load = ROM, type = ro, define = yes; RODATA: load = ROM, type = ro, define = yes, align = 256; DATA: load = ROM, run = RAM1, type = rw, define = yes; From 750ce3076860c3f2c1e62642108fe4adde9a9984 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sun, 13 Mar 2022 13:31:11 +0200 Subject: [PATCH 1494/2710] Make start of ROM depend on CARTSIZE --- cfg/atari7800.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 85abc24ee..562dd3857 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -4,7 +4,7 @@ SYMBOLS { __STACKSIZE__: type = weak, value = $0600; # C stack - __CARTSIZE__: type = weak, value = $c000; + __CARTSIZE__: type = weak, value = $8000; __VEC_BOTTOM__: value = $fffa, type = export; __VEC_SIZE__: value = $6, type = export; __ENCRYPT_BOTTOM__: value = $ff7a, type = export; @@ -12,7 +12,7 @@ SYMBOLS { __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; __INIT_SIZE__: value = 69, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; - __MEMORY_BOTTOM__: value = $8000, type = export; + __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; } From 926959d80a8884fe36c2971b93c9d4d0028fabda Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 19 Mar 2022 09:09:50 +0200 Subject: [PATCH 1495/2710] Fix offset for MARIA --- asminc/atari7800_maria.inc | 64 +++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/asminc/atari7800_maria.inc b/asminc/atari7800_maria.inc index a8857812d..39624d21d 100644 --- a/asminc/atari7800_maria.inc +++ b/asminc/atari7800_maria.inc @@ -2,38 +2,38 @@ ; ; Read registers -BKGRND := $00 -P0C1 := $01 -P0C2 := $02 -P0C3 := $03 -MWSYNC := $04 -P1C1 := $05 -P1C2 := $06 -P1C3 := $07 -MSTAT := $08 -P2C1 := $09 -P2C2 := $0A -P2C3 := $0B -DPPH := $0C -P3C1 := $0D -P3C2 := $0E -P3C3 := $0F -DPPL := $10 -P4C1 := $11 -P4C2 := $12 -P4C3 := $13 -CHBASE := $14 -P5C1 := $15 -P5C2 := $16 -P5C3 := $17 -OFFSET := $18 -P6C1 := $19 -P6C2 := $1A -P6C3 := $1B -CTRL := $1C -P7C1 := $1D -P7C2 := $1E -P7C3 := $1F +BKGRND := $20 +P0C1 := $21 +P0C2 := $22 +P0C3 := $23 +MWSYNC := $24 +P1C1 := $25 +P1C2 := $26 +P1C3 := $27 +MSTAT := $28 +P2C1 := $29 +P2C2 := $2A +P2C3 := $2B +DPPH := $2C +P3C1 := $2D +P3C2 := $2E +P3C3 := $2F +DPPL := $30 +P4C1 := $31 +P4C2 := $32 +P4C3 := $33 +CHBASE := $34 +P5C1 := $35 +P5C2 := $36 +P5C3 := $37 +OFFSET := $38 +P6C1 := $39 +P6C2 := $3A +P6C3 := $3B +CTRL := $3C +P7C1 := $3D +P7C2 := $3E +P7C3 := $3F ; Write registers From d099df05333070849f386442b9f4a3185dcb04df Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 21 Mar 2022 08:37:49 +0200 Subject: [PATCH 1496/2710] Clear hw palette and set AUDIN low at startup --- libsrc/lynx/bootldr.s | 72 ++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 28 deletions(-) diff --git a/libsrc/lynx/bootldr.s b/libsrc/lynx/bootldr.s index 64569e6ee..58f04afc6 100644 --- a/libsrc/lynx/bootldr.s +++ b/libsrc/lynx/bootldr.s @@ -18,44 +18,60 @@ ; The idea is to make the smalles possible encrypted loader as decryption ; is very slow. The minimum size is 49 bytes plus a zero byte. ;********************************** -; EXE = $fb68 +; EXE = $fb68 ; -; .org $0200 +; .org $0200 ; -; ; 1. force Mikey to be in memory -; stz MAPCTL +; ; 1. force Mikey to be in memory +; 9C F9 FF stz MAPCTL ; -; ; 3. set ComLynx to open collector -; lda #4 ; a = 00000100 -; sta SERCTL ; set the ComLynx to open collector +; ; 2. clear palette +; A0 1F ldy #31 +; A9 00 lda #0 +; 99 A0 FD nextc: sta GCOLMAP, y +; 88 dey +; 10 FA bpl nextc ; -; ; 4. make sure the ROM is powered on -; lda #8 ; a = 00001000 -; sta IODAT ; set the ROM power to on +; ; 3. set ComLynx to open collector +; A9 04 lda #4 ; a = 00000100 +; 8D 8C FD sta SERCTL ; set the ComLynx to open collector ; -; ; 5. read in secondary exe + 8 bytes from the cart and store it in $f000 -; ldx #0 ; x = 0 -; ldy #$97 ; y = secondary loader size (151 bytes) -;rloop1: lda RCART0 ; read a byte from the cart -; sta EXE,X ; EXE[X] = a -; inx ; x++ -; dey ; y-- -; bne rloop1 ; loops until y wraps +; ; 4. set AUDIN to output +; A9 1A lda #$1a ; audin = out, rest = out, +; ; noexp = in, cart addr = out, ext pwd = in +; 8D 8A FD sta IODIR ; -; ; 6. jump to secondary loader -; jmp EXE ; run the secondary loader +; ; 5. set AUDIN to LOW +; A9 0B lda #$0B ; Set AUDIN low +; 85 1A sta $1a ; Save local copy to ZP +; 8D 8B FD sta IODAT ; -; .reloc +; ; 6. read in secondary exe + 8 bytes from the cart +; ; and store it in $f000 +; A2 00 ldx #0 ; x = 0 +; A0 97 ldy #$97 ; y = secondary loader size (151 bytes) +; AD B2 FC rloop1: lda RCART0 ; read a byte from the cart +; 9D 68 FB sta EXE,X ; EXE[X] = a +; E8 inx ; x++ +; 88 dey ; y-- +; D0 F6 bne rloop1 ; loops until y wraps +; +; ; 7. jump to secondary loader +; 4C 68 FB jmp EXE +; 00 00 00 00 ; spares +; 00 ; End of encrypted header mark +; +; .reloc ;********************************** ; After compilation, encryption and obfuscation it turns into this. ;********************************** - .byte $ff, $81, $ca, $33, $be, $80, $a2, $c4 - .byte $6d, $98, $fe, $8d, $bc, $66, $c0, $7a - .byte $09, $50, $23, $28, $18, $c8, $06, $70 - .byte $58, $4f, $1b, $e1, $c7, $90, $08, $cd - .byte $1a, $6e, $5a, $45, $32, $d7, $6d, $c6 - .byte $8a, $e5, $d8, $5c, $a0, $e8, $4f, $7a - .byte $5f, $73, $8d, $22 + .byte $ff, $b6, $bb, $82, $d5, $9f, $48, $cf + .byte $23, $37, $8e, $07, $38, $f5, $b6, $30 + .byte $d6, $2f, $12, $29, $9f, $43, $5b, $2e + .byte $f5, $66, $5c, $db, $93, $1a, $78, $55 + .byte $5e, $c9, $0d, $72, $1b, $e9, $d8, $4d + .byte $2f, $e4, $95, $c0, $4f, $7f, $1b, $66 + .byte $8b, $a7, $fc, $21 ;********************************** ; Now we have the secondary loader From 76fae9da82fb1ccad09d7a599ee5d56ec2ef8dc7 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 22 Mar 2022 20:02:46 +0200 Subject: [PATCH 1497/2710] Add irq handling, PAL/NTSC detection and clock() --- libsrc/atari7800/clock.s | 89 ++++++++++++++++++++++++++++++++++++++++ libsrc/atari7800/irq.s | 36 ++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 libsrc/atari7800/clock.s create mode 100644 libsrc/atari7800/irq.s diff --git a/libsrc/atari7800/clock.s b/libsrc/atari7800/clock.s new file mode 100644 index 000000000..814defceb --- /dev/null +++ b/libsrc/atari7800/clock.s @@ -0,0 +1,89 @@ +; +; 2022-03-15, Karri Kaksonen +; +; clock_t clock (void); +; clock_t _clocks_per_sec (void); +; + + .export _clock, __clocks_per_sec, clock_count + .interruptor update_clock, 2 ; (low priority) + .constructor init_clock + + .import sreg: zp + .import _zonecounter + .import _paldetected + .include "atari7800.inc" + + .macpack generic + + .code + +;----------------------------------------------------------------------------- +; Read the clock counter. +; + .proc _clock + + lda #0 + sta sreg+1 ; Promote 24 bits up to 32 bits + lda clock_count+2 + sta sreg + ldx clock_count+1 + lda clock_count + + rts + .endproc + +;----------------------------------------------------------------------------- +; Return the number of clock ticks in one second. +; + .proc __clocks_per_sec + + lda #0 + tax + sta sreg ; return 32 bits + sta sreg+1 + lda _paldetected + bne pal + lda #60 ; NTSC - 60Hz + rts +pal: + lda #50 ; PAL - 50Hz + rts + .endproc + +;----------------------------------------------------------------------------- +; This interrupt handler increments a 24-bit counter at every video +; vertical-blanking time. +; Update the clock only on interrupt while the drawing on screen is on +; _zonecounter == 1 (from 1st visible scanline to last visible scanline) +; +update_clock: + lda _zonecounter + and #01 + beq @L1 + inc clock_count + bne @L1 + inc clock_count+1 + bne @L1 + inc clock_count+2 +@L1: ;clc ; General interrupt was not reset + rts + +;----------------------------------------------------------------------------- +; Set time to zero at startup +; + .segment "ONCE" +init_clock: + lda #0 + sta clock_count+2 + sta clock_count+1 + sta clock_count + rts + +;----------------------------------------------------------------------------- +; Store time in 3 bytes +; + .bss +clock_count: + .res 3 + diff --git a/libsrc/atari7800/irq.s b/libsrc/atari7800/irq.s new file mode 100644 index 000000000..ed315a1b7 --- /dev/null +++ b/libsrc/atari7800/irq.s @@ -0,0 +1,36 @@ +; +; IRQ handling (Atari 7800 version) +; + + .export initirq, doneirq, IRQStub + + .import __INTERRUPTOR_COUNT__, callirq + + .include "atari7800.inc" + + .code +; ------------------------------------------------------------------------ + +initirq: +doneirq: + rts + +; ------------------------------------------------------------------------ + +IRQStub: + cld ; Just to be sure + pha + lda #<(__INTERRUPTOR_COUNT__ * 2) + beq @L1 + txa + pha + tya + pha + jsr callirq ; Call the functions + pla + tay + pla + tax +@L1: pla + rti + From 7c129167183a7d106e79ddb7a6f01bb0e3b6b815 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 22 Mar 2022 20:02:54 +0200 Subject: [PATCH 1498/2710] Add irq handling, PAL/NTSC detection and clock() --- libsrc/atari7800/crt0.s | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/libsrc/atari7800/crt0.s b/libsrc/atari7800/crt0.s index 3d53abfa8..bd8a57525 100644 --- a/libsrc/atari7800/crt0.s +++ b/libsrc/atari7800/crt0.s @@ -1,16 +1,17 @@ .export _zonecounter + .export _paldetected .export __STARTUP__ : absolute = 1 .export _exit .import __ROM_START__ .import __RAM3_START__, __RAM3_SIZE__ .import initlib, donelib .import zerobss, copydata + .import IRQStub .import push0, _main + .include "atari7800.inc" .include "zeropage.inc" INPTCTRL = $01 -OFFSET = $38 -CTRL = $3c .segment "STARTUP" start: @@ -38,6 +39,29 @@ start: jsr zerobss jsr initlib + ; Examine machine type as we need the info early +vboff: lda MSTAT + bmi vboff +vbon: lda MSTAT + bpl vbon +vboff2: lda MSTAT + bmi vboff2 + lda #$00 + sta _paldetected + jmp mtsta +count: sta WSYNC + sta WSYNC + dec _paldetected +mtsta: lda MSTAT + bpl count + lda _paldetected + cmp #$78 + bcc mtntsc + lda #$01 + jmp mtpal +mtntsc: lda #$00 +mtpal: sta _paldetected + ; Call main program (pass empty command line) jsr push0 ; argc jsr push0 ; argv @@ -50,7 +74,7 @@ _exit: NMIHandler: inc _zonecounter - rti + jmp IRQStub IRQHandler: rti @@ -58,6 +82,9 @@ IRQHandler: .segment "DATA" _zonecounter: .byte 0 +_paldetected: + .byte 0 ; 0 = NTSC, 1 = PAL + .segment "ENCRYPTION" .res 126, $ff ; Reserved for encryption From 9cf4f166c00db9a1bc0c4448252ca9810e8f61a3 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 22 Mar 2022 21:16:56 +0200 Subject: [PATCH 1499/2710] Add more space to init segmen --- cfg/atari7800.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 562dd3857..b27353307 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -10,7 +10,7 @@ SYMBOLS { __ENCRYPT_BOTTOM__: value = $ff7a, type = export; __ENCRYPT_SIZE__: value = $80, type = export; __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; - __INIT_SIZE__: value = 69, type = export; + __INIT_SIZE__: value = 107, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; From 218c98d4d5383a6330ecb4a1e4f58d1eb08186e3 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 22 Mar 2022 21:28:35 +0200 Subject: [PATCH 1500/2710] Add get_tv.s --- libsrc/atari7800/get_tv.s | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 libsrc/atari7800/get_tv.s diff --git a/libsrc/atari7800/get_tv.s b/libsrc/atari7800/get_tv.s new file mode 100644 index 000000000..307a5c58d --- /dev/null +++ b/libsrc/atari7800/get_tv.s @@ -0,0 +1,26 @@ +; +; Stefan Haubenthal, 2007-01-21 +; +; unsigned char get_tv (void); +; /* Return the video mode the machine is using */ +; + + .include "atari7800.inc" + .include "get_tv.inc" + .importzp tmp1, tmp2 + .import _paldetected + +;-------------------------------------------------------------------------- +; _get_tv + +.proc _get_tv + + lda _paldetected + beq ntsc + lda #TV::PAL + rts +ntsc: + lda #TV::NTSC + rts + +.endproc From cf8c7ee28ddc51cb6814300f3064ca2e26f99f13 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 22 Mar 2022 21:29:06 +0200 Subject: [PATCH 1501/2710] Split clock file to components --- libsrc/atari7800/clock.s | 22 +------------------- libsrc/atari7800/clocks_per_sec.s | 34 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 21 deletions(-) create mode 100644 libsrc/atari7800/clocks_per_sec.s diff --git a/libsrc/atari7800/clock.s b/libsrc/atari7800/clock.s index 814defceb..3b259cfcf 100644 --- a/libsrc/atari7800/clock.s +++ b/libsrc/atari7800/clock.s @@ -2,16 +2,14 @@ ; 2022-03-15, Karri Kaksonen ; ; clock_t clock (void); -; clock_t _clocks_per_sec (void); ; - .export _clock, __clocks_per_sec, clock_count + .export _clock, clock_count .interruptor update_clock, 2 ; (low priority) .constructor init_clock .import sreg: zp .import _zonecounter - .import _paldetected .include "atari7800.inc" .macpack generic @@ -33,24 +31,6 @@ rts .endproc -;----------------------------------------------------------------------------- -; Return the number of clock ticks in one second. -; - .proc __clocks_per_sec - - lda #0 - tax - sta sreg ; return 32 bits - sta sreg+1 - lda _paldetected - bne pal - lda #60 ; NTSC - 60Hz - rts -pal: - lda #50 ; PAL - 50Hz - rts - .endproc - ;----------------------------------------------------------------------------- ; This interrupt handler increments a 24-bit counter at every video ; vertical-blanking time. diff --git a/libsrc/atari7800/clocks_per_sec.s b/libsrc/atari7800/clocks_per_sec.s new file mode 100644 index 000000000..dc09c4396 --- /dev/null +++ b/libsrc/atari7800/clocks_per_sec.s @@ -0,0 +1,34 @@ +; +; 2022-03-15, Karri Kaksonen +; +; clock_t _clocks_per_sec (void); +; + + .export __clocks_per_sec + + .import sreg: zp + .import _paldetected + .include "atari7800.inc" + + .macpack generic + + .code + +;----------------------------------------------------------------------------- +; Return the number of clock ticks in one second. +; + .proc __clocks_per_sec + + lda #0 + tax + sta sreg ; return 32 bits + sta sreg+1 + lda _paldetected + bne pal + lda #60 ; NTSC - 60Hz + rts +pal: + lda #50 ; PAL - 50Hz + rts + .endproc + From 9fbeb68b224a9295d6dbb6da9270592a7cf5f529 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 22 Mar 2022 21:41:12 +0200 Subject: [PATCH 1502/2710] Make STARTUP segment larger --- cfg/atari7800.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index b27353307..4d20ab0d9 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -10,7 +10,7 @@ SYMBOLS { __ENCRYPT_BOTTOM__: value = $ff7a, type = export; __ENCRYPT_SIZE__: value = $80, type = export; __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; - __INIT_SIZE__: value = 107, type = export; + __INIT_SIZE__: value = 121, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; From fd305c1e31b019174689412c7b948e327364d5f0 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Fri, 25 Mar 2022 14:44:54 +0200 Subject: [PATCH 1503/2710] Separate machine detection from crt0 and put it in get_tv --- libsrc/atari7800/crt0.s | 27 --------------- libsrc/atari7800/get_tv.s | 69 ++++++++++++++++++++++++++++++--------- 2 files changed, 53 insertions(+), 43 deletions(-) diff --git a/libsrc/atari7800/crt0.s b/libsrc/atari7800/crt0.s index bd8a57525..d7cf307ee 100644 --- a/libsrc/atari7800/crt0.s +++ b/libsrc/atari7800/crt0.s @@ -1,5 +1,4 @@ .export _zonecounter - .export _paldetected .export __STARTUP__ : absolute = 1 .export _exit .import __ROM_START__ @@ -39,29 +38,6 @@ start: jsr zerobss jsr initlib - ; Examine machine type as we need the info early -vboff: lda MSTAT - bmi vboff -vbon: lda MSTAT - bpl vbon -vboff2: lda MSTAT - bmi vboff2 - lda #$00 - sta _paldetected - jmp mtsta -count: sta WSYNC - sta WSYNC - dec _paldetected -mtsta: lda MSTAT - bpl count - lda _paldetected - cmp #$78 - bcc mtntsc - lda #$01 - jmp mtpal -mtntsc: lda #$00 -mtpal: sta _paldetected - ; Call main program (pass empty command line) jsr push0 ; argc jsr push0 ; argv @@ -82,9 +58,6 @@ IRQHandler: .segment "DATA" _zonecounter: .byte 0 -_paldetected: - .byte 0 ; 0 = NTSC, 1 = PAL - .segment "ENCRYPTION" .res 126, $ff ; Reserved for encryption diff --git a/libsrc/atari7800/get_tv.s b/libsrc/atari7800/get_tv.s index 307a5c58d..5438b2b95 100644 --- a/libsrc/atari7800/get_tv.s +++ b/libsrc/atari7800/get_tv.s @@ -1,26 +1,63 @@ ; -; Stefan Haubenthal, 2007-01-21 +; Karri Kaksonen, 2022-03-25 ; -; unsigned char get_tv (void); -; /* Return the video mode the machine is using */ +; unsigned char get_tv (void) ; + .include "atari7800.inc" + .export _get_tv - .include "atari7800.inc" - .include "get_tv.inc" - .importzp tmp1, tmp2 - .import _paldetected +.segment "DATA" -;-------------------------------------------------------------------------- -; _get_tv +_paldetected: + .byte $FF -.proc _get_tv +; --------------------------------------------------------------- +; unsigned char get_tv (void) +; --------------------------------------------------------------- - lda _paldetected - beq ntsc - lda #TV::PAL - rts -ntsc: - lda #TV::NTSC +.segment "CODE" + +.proc _get_tv: near + +.segment "CODE" + + ldx #$00 + lda #$FF + cmp _paldetected + bne L8 +L1: lda $0028 + and #$80 + bne L1 +L2: lda $0028 + and #$80 + beq L2 +L3: lda $0028 + and #$80 + bne L3 + lda #$00 + sta M0001 + jmp L5 +L4: sta $0024 + sta $0024 + dec M0001 +L5: lda $0028 + and #$80 + beq L4 + lda M0001 + cmp #$78 + bcc L6 + lda #$00 + jmp L7 +L6: lda #$01 +L7: sta _paldetected + ldx #$00 +L8: lda _paldetected rts +.segment "BSS" + +M0001: + .res 1,$00 + .endproc + From ef13a470e84fd7c418a4453ed8b9a95619e5ba9c Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Fri, 25 Mar 2022 15:02:43 +0200 Subject: [PATCH 1504/2710] Use proper mnemonics --- libsrc/atari7800/get_tv.s | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/libsrc/atari7800/get_tv.s b/libsrc/atari7800/get_tv.s index 5438b2b95..995b5c652 100644 --- a/libsrc/atari7800/get_tv.s +++ b/libsrc/atari7800/get_tv.s @@ -4,6 +4,7 @@ ; unsigned char get_tv (void) ; .include "atari7800.inc" + .include "get_tv.inc" .export _get_tv .segment "DATA" @@ -25,30 +26,30 @@ _paldetected: lda #$FF cmp _paldetected bne L8 -L1: lda $0028 +L1: lda MSTAT and #$80 bne L1 -L2: lda $0028 +L2: lda MSTAT and #$80 beq L2 -L3: lda $0028 +L3: lda MSTAT and #$80 bne L3 lda #$00 sta M0001 jmp L5 -L4: sta $0024 - sta $0024 +L4: sta MWSYNC + sta MWSYNC dec M0001 -L5: lda $0028 +L5: lda MSTAT and #$80 beq L4 lda M0001 cmp #$78 bcc L6 - lda #$00 + lda #TV::NTSC jmp L7 -L6: lda #$01 +L6: lda #TV::PAL L7: sta _paldetected ldx #$00 L8: lda _paldetected From 6f11c4ffad9b2dfddfaffcfd1b2c4cc2aef03dc8 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Fri, 25 Mar 2022 15:08:14 +0200 Subject: [PATCH 1505/2710] Export paldetected --- libsrc/atari7800/get_tv.s | 1 + 1 file changed, 1 insertion(+) diff --git a/libsrc/atari7800/get_tv.s b/libsrc/atari7800/get_tv.s index 995b5c652..3eb94d54d 100644 --- a/libsrc/atari7800/get_tv.s +++ b/libsrc/atari7800/get_tv.s @@ -6,6 +6,7 @@ .include "atari7800.inc" .include "get_tv.inc" .export _get_tv + .export _paldetected .segment "DATA" From 82cfbb5fa8fb5d32c9356c12add8191290fbc7b4 Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Sat, 2 Apr 2022 12:44:27 +0200 Subject: [PATCH 1506/2710] Fix Gamate CONIO: non-solid characters bug --- libsrc/gamate/cputc.s | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/libsrc/gamate/cputc.s b/libsrc/gamate/cputc.s index 84742cb9d..435bebfad 100644 --- a/libsrc/gamate/cputc.s +++ b/libsrc/gamate/cputc.s @@ -89,28 +89,32 @@ putchar: adc #>(fontdata-$f8) sta ptr3+1 - lda CHARCOLOR - and #1 - beq @skip_plane1 - lda #LCD_XPOS_PLANE1 clc adc CURS_X sta LCD_X - ldy #$f8 + lda CHARCOLOR + and #1 + beq @delete1 + + ldy #$F8 @copylp1: lda (ptr3),y eor RVS sta LCD_DATA iny bne @copylp1 + + beq @skip_delete1 -@skip_plane1: +@delete1: + lda #$00 + sta LCD_DATA + iny + bne @delete1 - lda CHARCOLOR - and #2 - beq @skip_plane2 +@skip_delete1: lda #LCD_XPOS_PLANE2 clc @@ -120,16 +124,29 @@ putchar: ldx CURS_Y lda _plotlo,x sta LCD_Y + + lda CHARCOLOR + and #2 + beq @delete2 + + ldy #$F8 - ldy #$f8 @copylp2: lda (ptr3),y eor RVS sta LCD_DATA iny bne @copylp2 + + beq @skip_delete2 + +@delete2: + lda #$00 + sta LCD_DATA + iny + bne @delete2 -@skip_plane2: +@skip_delete2: pla tax ldy CURS_X From 87e90b6e9aa3c462e3fb4f8cec5cb89e13cbc1e2 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 3 Apr 2022 08:21:31 +0200 Subject: [PATCH 1507/2710] Fixed documentation typo --- doc/intro.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/intro.sgml b/doc/intro.sgml index 5d1889d76..4713de136 100644 --- a/doc/intro.sgml +++ b/doc/intro.sgml @@ -500,7 +500,7 @@ prompt. Before you can run the cartridge image produced by the linker, the binary has to be patched using the <bf/gamate-fixcart/ tool that is included in the cc65 -package in the util/gamata directory. +package in the util/gamate/ directory. <tscreen><verb> gamate-fixcart <image.bin> From fc6548db5c2bafd179b7483835ea39c2d0c9ceee Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Sat, 2 Apr 2022 23:09:05 +0200 Subject: [PATCH 1508/2710] Fix color 1 and 2 (grey/green levels) --- libsrc/gamate/cputc.s | 7 ++++--- util/atari/ataricvt.exe | Bin 0 -> 65526 bytes util/gamate/gamate-fixcart.exe | Bin 0 -> 67781 bytes 3 files changed, 4 insertions(+), 3 deletions(-) create mode 100755 util/atari/ataricvt.exe create mode 100755 util/gamate/gamate-fixcart.exe diff --git a/libsrc/gamate/cputc.s b/libsrc/gamate/cputc.s index 435bebfad..7f407ea00 100644 --- a/libsrc/gamate/cputc.s +++ b/libsrc/gamate/cputc.s @@ -94,11 +94,12 @@ putchar: adc CURS_X sta LCD_X + ldy #$F8 + lda CHARCOLOR and #1 beq @delete1 - ldy #$F8 @copylp1: lda (ptr3),y eor RVS @@ -125,11 +126,11 @@ putchar: lda _plotlo,x sta LCD_Y + ldy #$F8 + lda CHARCOLOR and #2 beq @delete2 - - ldy #$F8 @copylp2: lda (ptr3),y diff --git a/util/atari/ataricvt.exe b/util/atari/ataricvt.exe new file mode 100755 index 0000000000000000000000000000000000000000..78c628e3e6d1719bbbcbe18871bc5b58da420604 GIT binary patch literal 65526 zcmeHw3t(Kub@tqSUg^quS+Zqp<CT%Yfc0L<GT5+sOQ2WuFouMzSJFxrmL+9(<p<Ej z#gO0viPMmVB>oc!<PS+mOIw<fM;kXUCk^dS(=>h27V;-8B(xzdq$K$h|KB%rpSzM} z2&7HJmG0e{GiT1soO9-JXU@#+zwU(a3n2oy&zuqBQT+0X$>-T0M-g1O>C=Vck-R^v zd{pcEv&zwZGwH}eYJNJEI1rgg%+1YbBIC(OYH=<yGZ*O?9Elv5pG?-QT9sdAk{;?5 zqE9Opm%XohTzpxG-|`9Zq_|KsG~X7X11W+VFi~vY^fPz#1I~PFxcMuuqwvA=#vK~V zbyN}{E+fca`$wXS1tEq=|ELg8+eB25e4Y^E2|8jzY><F+d)!I7XF;vWBoAj0es>s; zV%#iiR{DE|*jqE1$RrRH!)^1TfF9?H32~|>r4S!uS?X|;Rv~WJ6$6=?@x__h$(hL} z!T}J(FU9S;VhE{?DnJjFg9RbIG6l1qF-b3-roWg%*h^RLb(Hy=QTda+UH}g1Rd{h@ zvK;Bu1i(@jN8t$J&SHE_;w5M2fhc8j0yr$kX56kTCPZ6py(-9I=I>tI#H+&Xx?;p@ z*dZa$@5j%>xMy)+C_(lkM!aaf^q*RVp9qMO$G<5-_9I5TCdpxOJ>^;lynOuLi`#X@ zh}XPbLXPnn10M7DF$uCCG2(4+k^U>!;AaSU<lRFOWItlW+o8&fsw~8UN$-m`igd() zXF<k}f9Ke@pF8$!@##QS@!FVp`X<CV-BHDC^Os^02;<MwZ#hd?`Yd77X9;^f!oK>2 z6V`?NT(f)R*s~j$W?f92DSvDsCXPKDxb0NYt#3glj(@=p`36Gn*!8#yzhCT)$qW}E z*6|HhXa4%wv-<Hbvj|&Uko!d>CT{y-ri1|jMhR543?ZFwvd{qpx(XdD0Yk1rqIV^q zfBhTd*MDK^glr%GnB4f@BX?yk6y)Et757Q1r!sjKwa4#cc5XYBDL5XeI#d1?l}D8G z%$7UhK7rp8=I_Ji?`P#NN`6O2Rm92!Vn5xB#88$q<#z+a;gsUoOZ9`b704vTd&e89 zs-C_R0>16<i*9`aVz{IH9;9$bAChkmJP3@_?fPd7{uKD>J9ZRLUZ;=Uisu-m+P>{5 zwB~es-JSBMEP`SmA1OY5_14qvJr9F_r`!8Z$)BOe<<IDo@~3J8c~7#ysJM3x5jWf; ze<BadpN^yaImWvEAY7FH<8a>*J51-7=q#@ylfPbc+aJ=mDiVS3t3Z=wsiN=eMYmq& zW7t+RYy*Ae+sv?^5pz|Y8TO=%7d68^FT+~Qum@z=PBZMy(#Q0U7b6$^9SYo0&P0w6 z>5BgGp@KWgN&5H@a7gv|P}v>jBzSzN;*N6CIzA-z9Jzn`Ch+2Pdz6X<Z9m?A^Xc}M z7(A!jcS_A}j}<4#kGp~VSOZ=6*shasq4luq>3e+8m@ig5id>4<e_j`N9Ta!m{s25m z!lz?Ox-lu;<M~qJF(u=pM}fxc^if;JF(u=el5tGQxM%C>m=bVI2{@(%98&_0DFG`| zF(u%b5^zijIHm-A)Ggre|Ln|}<6lrBzHK8s&-?=(tY>!=A1^1rpSgellxJweamm7G zG6Xy#n`#NKI4*ho%mCn1C+-+3J1&|3Or7ZmAxh<$Qqx~>T&lw}&;L~6>&K-WpZTWg z4;+^Qe&$j5Pn<ygyl>lHNDi&VeRawaxGzcvs%jxPe(c$TV_)3x1v5*>p52D}9KB<- zst#;!IrgHj=+;x<%Ao-?4mYxz*OkXa{i)l&dc3Tv=<ZX<ENGn$k~GD4d=*o>pNjr; zF{!_J=Kihl6utXY(I-zG`{K6G7YOp_*o*$f^~aF{NJd$$jw3|`KXVh@;EU7+2mJ(4 zb-R%%t9p7AXvjG-^>OGi5<merAWKhAAOI!Ua5_ln8C>5x4tiEnK37u3a6e-J!)na& zE7L_DEl_rQb!N*+v;Di*{C&XueaQTM#Qc5K{5>Uqr%tFpwr9v*6&f?yXvUazNTTc~ zXU?z#P~a+pQ6pae42MouUif=v%Y!Ce_A@6=*!|(t*Zug+nWwME11!&+zw7;on5jSZ z;#)EsNWYJvSE|s(Z+*4?)EDmhBrsS7^YHWZHUxd|)YJ+1+4DcWf&Pb2oOovak39S# zLl@9=@}gThUVFU8fnN{@CXP%`PfWzq)%7)#v$G-|PbH^k(wSr`K81I<WPE0BY97$Z z<Wg|tvAezfvdGr%fw7At_4PFkHFc4Ox`z6??F}uFtzF5<`BWm(eq{O(-u_f@b;HHE zah9U96zt{Del5<+lgWQ)zAdF2fW3D8d>mk3z7F?>817ObhDSO^4nN;{{kkK^+Fn=x zwU3_uS!O-QB(Ginb2w0D7Dc;pSZFuv+WLY(;C2X^Q!c!p{M?x{ZzE1?p?;gMZB@{B z>`Oqgr-HKMZ8PJwoH}zxPET0zy58o0Yv5SW_s;w;w0^nubStT}8#0YP#Ca6>weEEG z%Vd^KCt{{E^yM>W-sp~($!Ek~ytXbIms2M!+ucYrf?v^I7#S_Bz;pRH9NRL^QN*$8 zz;e8^a3@~^ZqG}=-F6PRTh06y1NREP4?qsbd?=#-y;|Xhs|q8&&iq2X>kEZ}E@QcJ zSUOPfg)?U^1_|;hURZ`_dtm@x%6cd64G4b@zX-4My)nNq&~5C&v&ZO>&(Xpv1l(L0 zAYW#2KLPw8@o_Dew#CC!z?E}R=YabFa95H|73i>BUjc3uzcyd?NCg-y)LX$52CSU7 z=og)Gs2IO|&z%cSo~u$qaNhc`3l;<HD=xo-4LJh-EbbR^>u<u8B<?EQEx7w|zXA6o z?giX8<354=ByL_0;`fud{}lHVChV1_w;lu6iNlF_0(0#%86igCKaiN2WBN~tIL5p2 ziBzU8RtNw4wD`<{g~e1dzK}tYMVEgfF)L@7h4{K3qht(WF$&HkCiXF+_=W|WnZsat zE<wG1-cORaNfrJN2c}ZVq!8Z<OeZrF`x2!4AHf4Q-HFh`e0t_^{6G@0nQ56Xe|TZh z!i|JeNelURwJy-=n;B0fQb)wE`MQ&t{`twp*<?>*ZgMu+3T_fMl$xJtot#W1IV=Ac z{=WIdq!|YoT<dr_w<^7QK_~+a_kDHe@IYr@V}pEq0QuLhUuF(ya#;cW<56!ZG&vUq zoz8(1uLt)YguKISHwoK$<>3Rfk%P%pdS-rZ*XH_~y3LW~+{FCk%-r;@&10io)h(MN z=?s)NF*`q(+_m{gGQIiAEAn?H(&^-Z@!2C0#Ggy=+Ps*WyDUAi4^<>xePCuHHJ_fJ z%2ZFxAGj=$K2US8esknNVs2(Cna=EXCw4`CB(gJ;T1;np@dkU2#2Pm<8X~5X6N{;t z%n{`UAeDU6B9cf>4y9%e&desKlW8l=9ol&q5i=-pU-DpbHZsfSuFZ*b@7%%p{mInk zS}W4d+GQ#3taYcpv(_#I<L*Sk7ZRD7@tIj<Z{=cn(8(>8ft`tkh1r=25SpK}vs77K zJ-RO$>FvOh?d<#^tk_NxC7F)6up{Zkg@yT4CNedjid+Mf`9tZ*Zp;`YBGuJ4DHAC< zi51`8$z7XoN;cHh*GHSSSJyX1o2#RZ6HV2Lrm19gU0us$GMQ|gY@Dk5H5YqceqOep zH6M*l^^Gm#I}+7RlRJ=)sqx9`mSn?Zb)q2}t!rp#n%dErcxCd@a@KrA6Ae=hEy>2} zrpECd)zN6QzIr^dW1@PpdB<cl5lu8F8(UtXeALvRH7E5`&D)zNwl`O|)FtbyqYaHa zs&_Pvk5{)ePS#B|Pu5K)w#%GEWX*sEzI@Tt*PS&dEy=p6?TPw^>hY=ZM#v`FQVmHp zRYzN<CY$OK^-YN#QZ_0lJ8NB9DXT`UN7>Po)LL!H6`X>7?OKup#cB<`pzdVdhw46A z_u0D7*ZpbT*XzDr_k+5h)&=Sd>o?YS*ALfUTR&Bws=u-RmiphQf2h8&p{=2}VW{Ey zhRKHg4XK7B4R39@tKsg3_cwgF;g1_0Yxui{ryG9Q5NIrIj5O9X?riL6>~GxN7;oIy z_@>4i8&5R;uf_)&Ki>EUjh}1$YU6W_7e-kFu84L<`=TS!>!Q=qx#(i_=IC3a4@Lhd z`d88KL|=#oo64KEG)0?sHFY)J()626_cVQ|=_5^#G?h1B+I&m%Z#4gA^ZS}V)cmpL z-)nxn`CpoS+w-^IsutFlEc9zYivxTY;=GS-d{P_}@_k>z)Vq>Te5uq5KY`WTh#AHo z761NnE1XNd);pLJ9$agMb1gVGd>TUzHF)46ac=lmF)gLSxq6%%e(8EE{5gcn_gyoO zDt}L3X@zsOZHtS53jddGD}3*om^8&PqnqVxyxIz1K)5Tq89sq243)oA2#;Ek@mq%5 zC*FlA3fJJs75-oC{1ZqvC^VV5wV1|_wAXJx=b8LS^?}SH25-~Jxnyc)0^USwV&ATr z=9cD2^)&vcC&wezgAI}DskwQM*$&Ll!A%pS3|0iHrw-sfB{7|>o=wh8XZGzv{{T=5 zfQk7z4h}PEKr*SsL^1^jAQStmVP2L=PGsg&)#*%Xeh$fycvcuXnuP=wFm|QW3)SO` zQ&UNx&)k^Y6%`xF@<u*fs;&ouc##u9;>0t;_ZMq7Ldtp|yf~M}n^|%aqoIt@ec|*z z4t~5)J%}OfbVNQRT0ua%C+8Q(XOluN4#c}==M$Owh8Ce~A^9d)LE9XpYDe-D;18=* zCDfaUrrUl=U|k^Can0axhw$IE@m(@jV2X(_1vASMPxl2?o@M#sSkTEdHlT=s{t6}* zjK>#k(BL{*YCSB|&&`Ct0Zm0oJdXF`#4P#be~=```UVHO<3ppvBDj4W^P+O5AfLOa z9g#}$`kWzS->6B>2IKQnQ_WF8LVGLQWj?0xGE9G_@Yig=!nm>Y5J&{$X;V6(cdcdC z&kKY;?0*s=tK;!Q6Z^zR3Z`w(xOi|igG7iqd=9QKi{=;W_0Wg%Hef<5fVqMBMF=(Y zK$z4BIGC7SOp4G)gP%c!08%_K4!z2-q@j=bNd@d0>w~aGc#SG)yl=4m>iDS83yMAk zD#18}FtHyI!WXQ+63H0xwwY<Nz9JmeY3~w<&(ZQP+`L*^zXam@MR>c+K_GzHiNl8` z(*PJs5#p32yk+zj1mY@iJ$+EB!y?>bJO-L&!oL?kp;|niz%9$lwBwlrqAI*ozZ>-% z<;xt1<K04pugJ4X49EdYh=i|{5afV3`{ox@A{>(-U4afvCXR@3s{|n*#6n#b;Wi0D zUI;mo#1u!kU4qIK=#Y%pAwd-;mIQT5&;|vXNl&K1k}e60$Tk&f93IraEAu@ymq<;6 zD?|D8qac&%`S?CL?;*mk%Omh;S$t|Pb7Ucz79-?>(8}U7Y0mzL-Sh`E5u$v43|z^b zO=6=pFLXi+kL#V7khDZIQA!`Yc)bzf$q<<Z)=bSI4^w$pAxu9X;UYYJJ{fzv@RMxl zIt1`G>HFhwZ-NZcXn%wrzEOV%0D<^;BApcBn@X;rdIlij8{xfKB_i@a2Iwb%=aUa+ z*>{`|T9yd^?;#|DCE6quDi#PQefmTgWsN6OskwRN$EQ?Ti>EVq(H7xZpW(yUHy{D? zi{SCBuZ$2~LJ*CR^9d=y1lSyOW6q~b^#W1Z6wggS@bf<XvjxyIEsjQLAvrNKHItmQ zngO{)98RgU>ogNA!fD@{YLq6bfd#NQoteWNTzFBTwE#FVn@r3tE{O0UU;bZ%`c4fc zOE1m>>qeif9We{SN^+Bm*`dW3njnaq6-tkWh3aH-7H^;;{A<3lCqSrAi%%TPpidFu zqbkyngisFQU-#vap`#k=;UN)zz!$z7QT7yA+VG%nHKpI9S&%yMQC}$q+y@ZqV|;26 zeENjXcoy-V@D-qR(`+_=&sY3en0`DdAyeWJU;Yn)fJVblxl6&m6~b}}R(h3SX`bre zhv59%!Lr}>;t}MNHP(NED0H6opa}o(!!O&qC*Y78=u`e@Ex&9J(p|lMoy}3P5Pn`i zj@$;~;QtGyrY=GoerPpC;LU$ZH(G$H*#zs~i+N8WWmNwu%z%jSkEFK{8V$DoxMVL% ziH2Zyd`hYGPh@OVdTIC@{%I*SdIJP8Kfiwl(S?>z^^Q=+3Dh&6wvozQrNs|n>IDb^ zZQ~sPY=x>OlTd)Lwu+3|1`@OLtV6n%M>as^7RN={&}0^%Zq%s)O%@6|#kOpfCNl$l zT9isqtd%^5n9!v;=`Ybr$hU4NFDR8MN>Huw+5M_8YZU?Lk>o{#2v=ybwSpd@Crc-x zedlQf?5Fmq{DR5h^;*$Kz~sHMPM`$mYXyU7j3za!V-ev9R$~C#C-Uz>Tw=QvgdkJ! z6jo_GPVtHGX6-zRwKy&nuOPft`zeB{(d=0+(Mss0e`bCha=TPzK7bl7{o6FzD(J#b zh4nv#M{zub_B7fe3d0>*51Ip62uP(<E2S6y1F~jzDSt?dCngcxt(8_&Cq#%pdw^-` zUiss<`PM@J!ST7pG#U%i7vZ=0D%cN`d?uBd-yfe%u;SkCD`llb4io8#%na;Kq*#vo zib(^Fl^k(60l(o}%YLp(i%%yG97xD+5-t(G!&k)G0nsr%lOcEdwyg#yA-ohy7{1GQ zUKkmLoG{OroI_5~#f$LUeQTs72+qtOf=!HqzeB+npqChR9vHXaClvfJGS?hUs0_c; zS9}pNd=$k)$DNo}(BJeGZwK^t<TjZ>ZAh}c7U6fPyxz+MQ?88Mtq4CL;qIKgTLnDC zfHb&wXd-Q8=C@SPBg`a1oLs&~1$>qPjDwg~oO@Kz7q$34s{?tjYWyD)A&y2_6e-Si z%FjYbe^~juE&p0k{@e$A8F-ZrqCL3Jx1N3i%mt6|hkO;c0(4k}*xb-5iER`issvkM z(_i^q_?XYn4rh(o*S*h2)mmfflDOZ;q*W#!v*J~VReue)tUkg|u%9EWRcxlsO7sH) zpTZ+Voe#l;U#932Mo;g+$Y|?8duKc@0{+MS+YlB|nk(RyjjssWScF{x6hCPMd-?}E z#!xT)-z;Z5KbtjO517M$zF5c+ciy(u|AvsDJ>Jf%E91L&@dB)^@K!UyMVkln>$UZm zlhN2+&On3G3nIT!lYN%Z4kV^$CgS5W>4`;jruo~of)q2Vaoy=a;)eN@$Zt_FUBPDN z2-~4x1)8(OC6~GKFV|Kxv0^PbcaZB|`MWeD0zes3lB-|&ZJMzIfC^16W#zYP`MvON z(5#iI{0_|+2PC3Rachqv+okDmM@g$d1*4Gs9xd-EP_}A(YfFp#Ud^}-{%zW%@?WL= zbsBpLYG(>%>(}zg$EX4((Rkz!C{T+wo|Z~Xv_S>iDPa<8NI_y6-ch)Kmp`l-A3$;) z+CmDe2+Yu^mVZAWJsLJ9#bu_@4d!2il7O3gG*j;R*J`W24zxFD6Nj-#XHt8Ew)w{Z z9@h4uyjXt|`ES&WcEr0`ODxP-QrN5IeFnKds$fbA2?e{=q~9R&r?pjQK<jobYaKBE z1}$%E2^LJXg>-Upavrq+C9ya&s|t9xH&B-SfC{<?g2rpL8fxaxDd0&hvyVM3)G?Ww z!Yj4NPpgo7U3ww%7d6>aKOp?<u>D(*K|dR3*;`W=%(3VtaIT^<_$VjgzXDE)Lv@fa z6LEk6tU*))SrdIEDj&i>4X2;OW*L`)lF`h#zX5;f_wnE@E304lABB6>pW)#mMz8Q6 zgB(I*s8ipv&_klcRlV>+U`x_Z9En^6R!iEN$|qUx8v!YIPKZ=!t^=Ej)F^J%Mv2S9 zsWQoIWT7>PW7<tCqt%OBv=6O}RwsU4`|1*Co26=NMFq^vcRUE<0yE!oU0N#%onbH^ z!XLo=j}%S?98N(*70I;^kB+c5VnC&>)vWmv?PO6orcRhfHzIBEWrQfI2ZXtw1|$y< ztq#wCeCk@ADC$Qzneet{!e<apUVdch@C$E4cs0V8pe@ATLE@am+Q{EujY+JhP}EK6 z-cDe?GXg>0k6TldSX$PsmA2%pm6kngrFmzqH218PX3kn61vx9k2@QV&iiWgur-`)e zxhgGS&P{=idu~c|&rNB|PCIFKUmEI%R(A3I%U4wNW2En=!H;^;07I1iR?x+V@Gl}% zw+%gnR<PFg!0KZcaPmZc+*Ld9cEU+Y;VUj$0vyBW5ftCd1fGGzM;BThJPlVXBMMv; zg;t_jLefsInu33=jQdVe_z?(?nfOcG0aP0QJ4Fb;s5YYLVT4hiv6U4mQM><@Sic(D zU4hr_5!_?~N)J5)3%reQ9o`=`D_lF-0}Kt*MCk9!>Gr)-dJhT%Lj-yQ!l$Z-e-wWI zwFH`4ZF9IC73x=n!&jomy%D#y9@7VYWO2Bj9Jaz=Ar8OySBJy*VdwG`?#E3Xz9*N% z4dk#D{t9vU`@cFIz6*08U%_py34S}5!;R#y75;N__)}G?9qvTKbdhX_FTL~?Uo7*i znprDnsZ3@@EpsIgPb3#;wZnxmEPG*Ur5cmm)tFR(iKBx3-0N(ht6mk-37F_`8f0dI z>A|)1`rEPrFJ)owEK7Ek--ikCBe<VKUE=C)9lF9i?^q%)d(e^R9$e%tIR*+j%VEC$ z3aU?@>LZHjMyUO&?i*a^XPQ|<t6~Yv9!cdbJCZR;;#C_fM82obV|0v&<eH=ZFV;$G z-eFiC*H+}h9#;>yP9`U2xy-S3ZgF-NWG-fwaz|i>x!mT*a+}JxGj0pnOK*X_l^iC8 z;^xv@AXCVNFXfj@Z-E<2PfLik^cHy6TC(P1J#fEPU&nbUbA4<EQn@4$_}~66I5t=d zavw)z<>7)HafIJmcMCiaCMg2cx?A9*!Af8RMEC=MAAwV6-u=jslTP4cegh$w1|WX9 zzFGWscth44OK{ujuTylk;DU8!&shM)_TX@NJIDqZFZf${<Y~U~`T1E9{0=?7FxC<i zluwY^E11Pn^g+=Qx<v0rWA29l@NPXDUzq0@IJ7PA&k;%ZGgvcAW5yBl63GQjhDvb2 zKb@LiT!6)+2-Qf4?nkURYztHI^pOMONHkO{0}A{E!a(wf9Z)9&iv1Xl!tmIWYP}39 zlR;T2H^`t08RVqiD4`qtoM*_)98AjTNfC-laKt~CoJJkD!A%leCG(11fD`daEMaES zBGjytX<Pjs;C2bT*uN0RbR^!4Cz6v`g$uPv@Ff6)Bk^&RYk_kPp&b%_sUH(BZuH9} zcpJc8^vfl@nq)Ae3bv=`L};f3))3hN?vlV-nd>a#SID3`Gsv63l`^c}3UlbiWI%%q z$SPZ_3~Drky!6^+Skwx0=(Wp$CQLbSxf}}!8+q1EsO{QO%;?{-jyfMwEBfKPWKf>< z))ag*G;dq*Ry;Sl7T@=3`tOyZ`}5OCb9z2C1Gejr7+2v9TKLsmwb1{-cr*M@`qiAa z(Erd_3;(zM6E|?~9h#|sDxZ4(w10x_ik!dGKW$K}pY<!<*FRJG0=&;v%ud9Sl+gdA z{1|9#)kIKcdaQR~6ssM1RW%p0K#ny)-u88}h_Y1D8X)g;7hQ-P8|^)<!y<p9CM$38 zRRl?<<Zsf-*aQXlNYGIG2#gByN3^y3;YZ`C*4~XZimtWxUQkeUCo+h3%UpXmE?Ccn zvI2YU-H7TH=sx^vLBMEUO&`4bg|S_>LIJ<E_HJx9$PeAG>WHzuOg004x%O^sUr%4L zA8YSMi?I<@%0%#YkyiL99@X&6Hj8OvMO;)FJN56#gt<P>wRhu+JW^n*$2D}!MjBU2 z2y#G(TzfZS5`;WRBrcd6trApVg7AuJv`Gl^LL|BNZnR5KnF7hRccVjsDoiX%s#AhC zD3DrvH@YM&BC3awIbAab^((nHghg+;_HGR2(+_}a?cI1?9)U+I?6r4eB%gc`T7|Xx zZtRwjfF{C}(ID_8hdk@=#`t?>Vsib;m?)(WNpbnzm<*9$;0~AHjj6m3kU|Y}X-uC_ z-rg>Pq#FKhJb0VrgTD`VEmvo`l%yLs>i-u2znT*@ZYp8Tfmbf?88@p$ME;MVd>WP- zeDc8@`&box*8nbpA%vW7E=j}!2A1C+$1GvpbH=T{;5IBPY<m2yzNfJB%)97iV9|>m z8NlvEF9VBSq@A_sWnj_k^O%{;S@bfn=tTv~S@bfn=tUlR7QGBCda*j1i(Up6y%s<< zYthTVq8B^beOZfM1{S>t&tCL0u;@j&d(q3lq8F#hk9rop3@mzaf;DT=%fO-+^LlUA zqL+b1FA~mK^fIvM#egLiy$mdRF(_xz%fO-+1D06yGO*~yAlIUofkiK7=`peCxexjZ zAx3Kv%fKSmzoQHUnA86T7O{MohCFPWVZ6_`8Cnr>mZqoxh@ng}447n)H~`8d!+=S~ ze$a%}0ia0+AZ3I=;DB&t5Rmf;DNrUE223(Yqu6bdVZbD#6d5U_t}ShnVZbDV@#@Uw z)1)w9lJOSwB2l+Vh5?fdqP4h8G7OkxaJCi8=cY-90h0_inlTH)wi6~9jM<?~G7Okx z5CwW@n`9U;$!GwfKHDV2II1E+F=3>^x@o{9gB4+vd_N=%m}FFdrF&LcCK(27GT0>a zXcnkW7%<9UweJHAg8*feVZbV*4XHihTV+{g7%<DI0xzGGAS4F6j6R^iE+fbWLDu;H z;9S2`<Np$wF>Cx^Ate8AP><H&oG%v&K|YpU1YaZyowXhm5nK<y9LjdUAzLM%@{d}6 z*-h9c8OHPa4~p0(EePX<QnP)6HvCXB87&}q^Pkd<jzO7Z7%%4i4pK(1AWbriA4zW^ zS~-;T$0d)Tfao7AlMLf0GB)}GX_8_5w3KDuV4GwZX!_XXMJQvKWEe2XU;|fWnPeC+ z$sn(`LRD#!0V}mtWXv|pB*TD72H60WgGq(~lMH47>V_2r111?P6m$wE83s%;$TaAa zG|4bvk`YBr=#n(aFkq5FzA2Lo111@y1l6)kG7OkxkO1_^G|4bvl0gXc$TZ0?V3NW2 z7qoiJF9s<FOfrg~4tq_L3<D+^_aal1a!p+>_!}_EU=sn8jHeNo*e<~nWD1_bf_axT z$uMA&L9v#aCK<+7O`k$c)szSWHW~ENFKsXk*kmxT0n;YKfK7&M1VoV98Z5)3)V9em zIxy6e)KCn_1x6Y4f|@kSFkqBHziE_Vz$oLhpj{xs{E?jr`yXiE+flBs15;|_I^}08 zE&XBT|98v3R)i@pHg__7qX?4>TOG?!dYdhOg(zX0A(<tD1P9q1l(0scEbAt4J04*c z@C|TCN<LBO-hF8_`qxr3!((Wxe%(R}ivoN7ovZZW$Ne8cnBQEjg_jHk7i=s6*r$LJ zB#n@@N+14aIpYPX>3Pn|g7b>GYIhmsFY9zE2D(c6PXgq#TLvEkMDQO-==*qJoS{a? z7=r5$=^TUmxuCB9cF_?OLipt%<ahFAhp+g&7dW!?A^F^-669!IB}h~sUrEihh#%&$ z4DYfdiUQZFgL`c=Qdp)>u12!+L}060xW>qfFe4TOEG%3rVF3l3OwJ}@2UA#)Ukejy z-3=t}Iteat;^XzV@I2!p5G{6q@i@WjCAiE(g76LbJAq!|fvXrBWyl8Tfnx)JREtWr z66%-<#u~Q*MikJt15nUv2Wn$pu3+)@(ZS((U+>5$QOmT|94QvY;~j2rxdI3O94Xef zU)w#}HxeIe?HK93u2Ym4#`mCJC+kb&SC3pfGTPZ6AMNe$6a~e*0>#(D%3tf7KQu(k zh2kp%d7LT`TF=b%zWPyEGhyX4pkI%=6p*k61#49>T^JsU#cct92n5fMUp+R`IUFCs zyHaOIyrXrrRXpl1?g$jG!)^<0IGIkS4kjn-MR8X^e-m_2XuVw8Pc1HFR07>9XS$8s zAc}heI-{4Z>X=C%p#5{ZG=eVfRhdT5X%TJ|#a9LNOMr~N(?hv!CXp7!R|oRfqDT+> zRXrtQ1KS5QxU%A227uJ;|APYNl%%*1YKKxb5-mD{8JFbb7)sQ^<4%j;6s$T3xDY>k zOXV0GP2qrSdM5o1b>=b<OsQyi8dpZYuRjmWZNEmn5f1eZbPX#1*nqUpRuGLC-JPSO zJ;R-?9RsZppU(s-1V4QvoukT!^C_gyg&s7~cXtkt^bQWlbV7uYV0?Fdynk?PU^G73 z+Sb=O0t-fj$dXIp>GTeD4$BTB&!iNGo^=fO?(U2a4R?0+?m@JCGf3tl-Zj?OCk%pm z2YN^2oqO6lhenb12n;a+L~$GvGC!*bMj;5krgs2Y>xSA7UmKSNE_6l84K0#!M~7Qs z2sJv`-3_CrVi%~jeH1wrB?Ot&hk84J83!r2L@7f$_mIG7ykoGx73sGQbVw$M)iPRt zM_=zirzn%2o=zCg4~&j<wu^ECSenk^;eo+;*YIFJslqonEY?_oLxUr|dr-RevEkm) zYvZk>qr<&zW0*l%YhjG^^!K&3iVDj=h73w#Bgo%63)=05o@YVZdIw<2)hX5!&@(uA zwb(#c>u~pOv5~IMf!#yme7ZV1+s3+)k-jdmiT;sm2ij$R2X>1H0a@)wr9?vUa0s#- zGQ_WG9fksRi_KQZ5Y!-kb?3F>0uv%RA*$%>+ymJU4G*?=j*N&cRt#_&+wWWZAc3np z2gHShlZ7;9BcY23!0Zgw0rj92;@nD5`|i<rKfr@Sqa)&CLi*4!+K@{KfyyY}Uuwlb z;Z0G)CAJaV+6S_6rN8~HL!z2MI9#9_g1Uw~J6*6^!jPxVfl*OMH!@9kJ>8uH9dtLC z@PUz$k<KB}XnKdPp&X;8uN&2{Lp0F`epA71#gW?H%n;V94yX!wD7Kq1K{h^gO-FoW zxLvfkVBNz*61IadyRxAYwPUZ1rAXbZXxQ{|8Ih21PbZ2D>2#r~AWy{Q3{Z7~EOY9L z*vXLo);(_6E)iO?Q7gSacoQ1GQdcK09xScb^bk5|&1E213IjoQTG<AIr7#fuIN)vr z!BQ9q66Q7#EQNs}VL1kZr7#d=Vzz-`DGUS+0Bi%nQWyws0>Cs7EQNs}hYyZ{U?~g) zdjN482$sS?@HwPs8VHucKyV5umVsa?3<USXZy5-d!a$IIkAYw*3<NoZa~TMh!a$H9 zw}D_O3<L>t3<OJIAV`R9AXo|m!COJzF%T?;f#7jKyas}$Fc5q{BH9Lmr7#eD6lfj; z!BQ9qeg#0sK(G`Bf`5$u*=-<L3IoA$3=)pI3<OJIAV`>FAXo|m!9N47+nc%Hq!d<x zKZI{dtH4rN1+r92SOu2CDv&`QtH4rN1rnHR6<GQvtvI%cQ#6jXs3?V1Acy1+h#-H0 zPh)T?-xVo)^If?Z&JqgWN5XiKfm7m8{1Rp&Mj61tI)yIZ41A;~A0pTfV35Nz8JB{Q z(ag9D@Q2@v2X8sN@M9Vp?vmff!$pi<5j>1>LAV9O6pBQRwndNwXbJoW3kbtM=7-$% z{W(PCPLW8P`$w^GW13Bt{hLoGgNm>+WUbnWAE;RkQKVK*)z-3q_o-1|(Sm|<c?8=M zlj3>bs<(lHZU;>4!>R1z1qCj!!9>Qu`G*Q#d_gbw(7fo2UpG)+@5)k?@XmwcV^EWa zaj$0f#066`hZnK*lEhIB$v7VS#gB5L)^E?j0-^r^kssNFOq9eFIH2gP{;^Nb&P08) zqU4}~khTLkQP~l}pMaAs6Nfm>h1vG>eo?len1=b`%{0{=$KtZk|HT(3XNo4q#dm%A zR0B~Yr-i@gD`Nn5<z0s##}KT%sEBH`14PA|HJb4PLN9wGqG{*7A^)G?xtyN!;)TfX zNM;AVNU$$8e<+@5k1~6I1BBI#f;R4B_%Y1I*fkZJT$~j_LZv41^~v{bq6U9#!8Thk zA6=r7=>>U=SjkR?upX$8;5PWnaE|7YxdcuzL2-{@PeWo7Z}XQGQ1#Zq0(%DASw*YP zx)Ah7_Qu4zxHPI3?Q$tH=;xW)ATo?GCf+^bLnEDI9fRnb*a@5OHl3^Z!gE$6bg*~{ z>M{`>OJM-7mcVsbqE!bTxy)q;HnG|uUy+!oiZ3K*8e5v<u%DKjGNgTS0@mE3=))xq zl_<5WemiqcDO!8S`fOM%D%d*iW2^<#RIv++C)PzYS?J>gXI07b$iMjsv5WluFcCOC zuNsK+EW`9B27aD_QVMbcze*ahS5&Y1D+?~pGbeVp5bIfsmMHfco6*vD^=8nbs8nMm z3z&sQOW(^@Mx&)~Vr4X1`rf_-+7)KrWQ)X;r%E-=_$;#j5Rv&Nbfs9c3p{L$^Eg*5 zR>!ZKObi_yzS^z-;vb1Ed9xY1Db`fuQSXW|n-in>0#A&!nC}v`PK>$44OvN$dM6{X z+Ng@Kb{`^DyCNN0D$<SKNU}7SI+0i!@m?!8D(e@!f{}Ics2wcxd65&0d<y35@2o_G z%+wYa#vz6A|7?tyT_bR`mt`cXU59y3v!Xa)7>QC#EK?QjWGiewuiJDdS@2HLwg^ux zm4_d4z+!{gg6Ww>@rGi;u7sc8q1du`D3PX#2fiQiH^}N9z(#Rj7$}Vi>co3si?p6* z)-B?~yH>{p>)gjJSe<D9Tfp)GlQ?yV`4iME8j-#pGjc`08b+j_!c6rGxUC}}9*4Q3 zX#?uZvg7eBX&&UuHtg|vZF78X6KTts6e-vy(qWoNBduHm9bdM!QgJ|6i~qj6Hr^;> znI_Yq>o%G8xviS8TT7D8rC&0%dk}9%eoZU67t~7aIZ-t70pH{PDj)hibLJFYS~X)h zVq*!wnt>Aj83J@`=G6Dia>gsmB&OR3IUCW|Is)5;0JpFP-d%VMVVV;V?;q<M?NyT} zogE<WvnN~2cVkLxV65Ma8`ONEbr6n**V4}Zq0wuVbAU4+8iBnHm=oo16eYs%a1^gJ z{B6N-6u<4)V(uHim}WtK=xU?kfG%OZBSWpD?L9E_0bIS(=1Y{pK}@XBh1~SE;+3<2 zp0R<e2L`Vh5Uc3v=xp!pZ|xI>^z>q?O=7@Nq8trqdl?5ATP;yq@Ma_dEuvfkKz5CS zz_pexDVPenFby>V9*K4I@c4xD=oo43>TDezZoO8lr?*|XH_*+wqz=py4S=5;3FsSQ zInP(lYv|rYw|ZN}>lNI5{U_}$^w3m8`Yxo86H#&!Ge%!q-(Z_)rHilrt^J}+xd(?^ zyE{d@6M&cL!M3Y9+eh)nB(VoMKWTzG2_h*A&_zId7Z!5(+sF6y9y-k_G{iKM>kTj_ zJSrz=is;{sWHA4OStxiECosK2#A`8KhL<?H!N$(v-PEz8^!E1kb#_B&XU@2M{jDQc z14B_Ay>_UR0C<JYjV^Law^pQG0xb;J;<1J`q6ZFHHT=@WhX`{^L0%d|o#doCdQq@W z1pU#yF$+GNOr$ZA`w%dLetyWo#2><f0Bd8=&u==cU2-&tOfc!7zl!m=uMbub$;0CN z639<5RG3|k>o7`0`Y!WIB(bhzc9z>D1fZrfR*wzK2wR7@OIh{(%$uKi5$BoY5*hn! zOGG54Hez4y!-JI*OI;@B9A10O^DvP;yr1Ae%Cm%7i4U!bp$9_MKKVBw9NH)Oh8{75 zA&SK=nCXYOY{H!R-l?x2LmXn`*kHLi0>1%2aPX`9->D<S&J|hZ&5I4Oa<CU?|2!vi z@M-jh`6>s80m$IacV**F_-`l7%FDg*oW#8$g^k{(h&~Pf!?+6`23d0UMs~62levon zzX8Y|A!5~c@T7PO3Q!t4K9Yr~)d5|Vr*I2!{uDT?$Sxw&<O?OSBuX)o?8OMtPKFXv zuH@plR97-^!gT3{!)D4*Weg(N{YUZgu68)QX1lD;4tmvXmv>>A_z3R35GV#;;$f)D zayzxM2OLZ6$#RT=gRlzCG6r61pVl(lzZ^T)bKAp(jY)0nF^?6!gOyVaR_@x!?<v{a zyL^3W*zw+yHiEq)mvh|g6}AT<=1}EvkiywVuymi~u!N~2eH%+W?&n^(yZ}#5adwL3 zn@wL<E7$=fOAy*g|Gr)vGbM^wF%32`W*bnFHzWZ80Msg*D9xXeAV_c<a=^OuRn#Tz zS7RvskHtc8$MgbpnEWq93+7vX5&&J8g{hqs+c<9kemxI<t@+j9*VCBLV6jhuUs3Su zjo{ZW{D`r&KkpG^75`O7j1{@8oX`1)u~n+=3E`E88`4)Td*WC)>%_5e&WU5;8%y7c z+U}e<7FH*YtqX)d?EgMOimeR}2W<~GI50@aQ+Uq6Wo}nLPY-`6?^5)?*vO%#g~Qn= zj)gxO{8L2mo;Vi%n4eVa6UX$d6UXwhPaM-PSU-Sd@@=bUJ*t0GrYk2<_2$*|Asd)x z%|3BV_ntVWdrlnFw>u|}=`F_JgG!n3&*LY=%{bq~Ez8QZVT&xP^qu<s0a;+v>RHb@ zaSZ0g9Ll&)9Mf}89Mf}79Mf}89Mf}89Mf}89MhLLaZI;P99zE##^{<psQ*aj+q8Pt zhw|wM%Uo8^`s?xtJX&H~J&(u(C$$pG=6N^$0rSMMJdEKacQ#=sjM}D!6&!tBA4Pz9 z;+Q^BN*}y5dDcBAj_Ff**CI^cD6=?yJ{gM>$4E9bg9mSuzJCtx^C1Ie@~q#ee*ggU z#4+7_;+SroIF|P*DA{L$=aUas9ruZ2e}a%rw#l;&ljjuLGRwSG&pvTXhk0uW$C$Qx zD<EZrIOeT@oKJ{p-l{Kk;+PKe)~{i9tPJLX%b2(7IVX<kOPx5TFLC0S4)fN326e~0 zRfl;iYe&pw-l}^~9MfUmN))$ws}A$l?}3nG-m1gAm5S|{x9Z*#$8?yt-j67I3`-ke z-Ad{AXck1CI7R{Y0c0Du!nXA%i1&n#N6J|zj(rUaBu`3+JaH_D=`L8d`YCrQ*mtv| zb_6TEt`o-&Avo_nP=G)3;t?b_(+mFxiNX?n(}N=XpNC(zb>D+SYM^=I7^fPY_P{o8 z)t}ezL2h~CnC?1pOn03)re~cvrh88u)7>YI=|3)+M=3D{XPLL^-V?|4pO&)Vj(MvN z^H!>N#58Z!Vctq*uCmNqb(pul4*<)&6$jz1B4cdxRvqT8WP>tq)nVSsEGY9<-E-oY zo^|4w4)fN(N6Ze>yj6#JEBU6(TXmSXl9J23RnIwbOwT!SOow?Z`zgn~Rfl=&C&A>s zrg^Il^VT;)XD1!=RvqT8?2Yz`ypJF*v0Vy6kSTZy3ue^PT1kg_E5%x9nz!m(wF1;& z)4ElMbt}E}OY2rW>%=h~)~&J)5PmAG|1)?L+SaXlhjxu5CXHKl7`M_3V$!%(hjA<Y zrg5w8J#lOrA*Sw?;>58FQ9;;Z@MS@rIHoUs;+VeliDNo8UyueGD=aW2a7wLt6q%0A z7wqStE8Y{w^rcQ5)4eB->DYX+1{sB%+$WCd*nA-+L9pwbFCCjN2w&itU9PjdbZovL z{4g?Soj9gr^F=c<d=%|1wwjqIj_KHZ(FN%3-V?|4WlkK^vH608A7Do0xnfwNMOP(s zY`$Q?Lk#eqIHqIs1%n=8Cfz5F>DYY1fX_0(d*Yam%@+*%qI2Sy?mcmgMUmn(PaI<* zq~APoY`5iKD@t+V*fDsO4q}H7HfzvNfVrlpW3$G)05VS;qf-(yPaI<_Z2BY5;p0et zb~vlezV3ZKs@7^}TL+UC@>sOLx8hZZf`5ivRv+Of*v}54fX%d7i3A#C|8ww%sPpCU z$rOD!6f5h*vC9#*!ii)3Bt{zU6UP{Dxf93ovrin$uahT^6?!a+jCze{Ik^prjAc$7 zGhk5k>&&R@#4!T~MTEHxiVPSO5td_6WWb<^iP;841`LX70k92<3>Xyk0ALyv889f? z1FvIH1Y>yPO@O!!ieLfnK5@)|LD4&aVi^<}Fethke#@Z9fI$)c9)lty_rx({i4(_+ zoD;{4>=VZf7!-X1<Q;<|0|rI3(Dxb?889e%6S!m>6d5omdJ1SBgCYY4MR|CibPS3N z7!(a7p4*_vSmMMnBj?010|rHfpp|ptm;u`&+T|~4TVyPM;+V12iDSmHCyp6Qoj7K| zwun77P8{QpKMD@W6UXEMaMT6!FfblIRzPJiPaNxqQ{qq^+$WA*&j5~Ds06Ym`bbnh zg#RF%eh!;uTnfs4&ewb44{^@~Z&_J!;@D}p3!cEkMT}nI|4qn29wPPw3q2%?T-D2M zmG38xL_Qy^mb5jMPqN;}!{^*NAyUvj@Tj1uh^49ItTt|WlvhCsj{HSO!Pry?pUl%{ zYcifV)>?JJ*$y=NT@u*Iha_;p5=#Q58dI|7GqjUs`@{w&`F$|qUvZaBiLIpYBHTa3 zU4?b-vW?_U&>!0y6I-6ZR0uP=1=Awsa+W+0!Y^jY87wY*9^w567vg$G!hF#d{D!mU zi&i>tULHHoV>7H<9yZU94pq<2j89MCjQS-`ix(RW*jcvVF30@dFJO(>J2RTI7<`V4 zyi2bvyVjrezz`}yo`2>rY;|~2Ki@BBaL%Os#KZHNhK@<wgRs%DfzJ3ydrzl4$I=BG zY8@W!g@G}Q$gvnYByDrC+N!x?jld9TX)K=?Yh<VoM$Dizf>m5QRV!{+Uu(Ba2Ip{M z-8bN1^bhXdgLPgzMt^7jAk5kOdq?`Yu#5FWMhH0wU05fLxAzZ8)AP1r9P8N=Z{!M? zO=2kw><-h<jxjRGOpahB*-NOkZ_JgH$ajKU+uO&m431^#_~6)RHx|viX-z(Yb!VFd z?1uXWyT>}Qy31gc7Q0HE;Lf4moZwYXFpJvP*@`%Y4sd8}q$jS}B#Im`>Gwfe2t@~M zXP{$n4BHhHxWoZl*n>k@<jz3`bhQJ;E*b1o863u%^4I`22@DRPL$~8FbhvYLY#5ss z${ldm;Mj2dsxio^ueTqj*=w92aC#K>@yHZbc{?Fwa;B|w0BhgvP)97J+r<0YVX!SV zpuz#l?HDlS@9nx4tLru{nbkYcj#YguwcAjviFbBmqfJK_jsK+pMzHp7hr>!f-r7Be zA&3oX<sv@$9`C}oqSlU%VXVj7p(A~RFuRA`@#x3VuaE@R=$8&|!HT^dqR0XrmiaK! zBkgvn4-p5)6bshL!4pWK(g~8x8jef*1u%SwMHy)WcLqn=#AXK%HK(<&w;NUjvano$ zCx4-caZB4q#03sM**4PJ(}lMmJFBva^^JDGuD}Cp8x<Ei5LKYA);>@`^C3&r*54~G za-nowHHOUxV*{uLeHgLX)CSQc^>)SE2eIt{W90#Hu@h!8s;d(x_KHg!c;}uWZZ~Od z8xfZ}Q0BF#R|>bQ7cAT64H|I;ReOWFxN%`f)HqOVxrn#aHMVSL#&~2fc2Lwh!QIf& zVbxxa#IbQ9K7#7ohk>SDECR={XG8J7ZxD3@3MQ>g>X*ZU1W^|(v<5HQP-{CZ8{(#3 zkW)5hqZgBA57?K4jFH|5CN4a=VqWTCSP>uE1Cxs;Cy*6n7@0=vO>G?EmIfGRh~~4P z$SpTS+P)+brK<K&jlf*r$%gDAJQbj8NUA_5jv^I198Aho8HdE(7?&-Hp;7~Z%bj3Z zNry&y#=6=t4`}B=X;ze{vdG3q?#SBZgfrdl*3q8MVR3~6Rk3hFQ&)d$9EY1g3gXJ_ z;D)AVS8&W7ya!>+X+`T<5WR}gmV@c)a@#$D$f~U+9i9;8#L~1*C&cU|u7N=p+dI+a z1hw{E(|Rp7HKCtHuMFPAQ9VSrgP`g*o0&fBQtEL6MtXX?M(ahd1G%n~jS#jqp%$yO z20Fx5PB_}A{y~Vwtj=s?#nn!5S1XzlwUG{!r?yaC-9h{sY#i$p{Z1fNI^JI&-`(39 zhu#l3Ap?VKmxfw<hq<3m3_2m!poPOC)%gs$0?j<WPPQxJb-5uuy=oXV>;#zwBKyRM z16Bf*-`9~<51ZTVQc)H6wD)wki7_t_m~~>e17kT<U6H%nu5m(?-kS9Y-6A)??Qw$5 zu@e~D(JOm(@SP3bwGN6Zq!hcj&H-C;dYxI)*E>O-=<DOVDd@2w?1se4u3e%&h)-OP zm$Sndlk!tip7H9fzT2(wYU?nDbnF_<@vG?{B0J2%sT<VN2Kzy#B7u9TziI?3{cR)H zVC$M1a7uv8MiB1-mI<cr=cff{lZPYf6HAUIqp#QwGLL)5SuYl{G|RNW5gY7$3@V>? zXY$A;-zCLYVW=MXE~kp{-eYjx&%I~4mXk_=xi>7=5hkPXEc$}C;oS*~PK;iVSA%EJ zuP0(6bRL|mOn?Bub7`xDU%$+_Jh;Q?UEPACOMF4m%bnvz!l(?;6)-Uj3nREjMUenx zSJQe|Yd{QFB4#Z}=v6rS;R?f#cd5Ky;j4HvzV4P^u3fZF;Tfwnzit>v6ciY-K&DU` zHZy@Y^Hs!VP+^UB<vL`rG9Q7Jt1eo%Q-X_nv|rQSB2z84sR2P}oRZbZ-%flnuGGw^ zEE^{CR5BqZ%Yv0z$r?K<^HF%DTfQ3G+b)wisSK0W8Vd)+Wu&zw+7^Aa;or1=Q;Aj@ zDqf43stYB@)`4Rv{CR6h!Y<o-NzwLhKyC|-pcB4PX5R%kA1M~9a3zpU<>Dd~CSoI^ zILun5nULw-Y;sB_MOG_LUEl>PV3ixlV#F$LL=sylEWC;<=2Dv+LFTH3CD~vuM?zi= z2|Kda-6_xMZ_`YH<{@2??+tVcVOSC^aARDw&dK_!pi3uNh(bq0ih2Z<h2@c0m73B3 zqWPQ>x->qwM8TyKrW{_QDwb_TWbKg}sdPE86=K?eS`xIImuy|JS`*!BP4XNOp%F2g z5O2*cu-gE$MOkGgtXefx>_S+M+s)jSP&y%sRMlQ>HGK`0Xn>1VT`notDB4n+u35=e zvvG_fa+#!OX_6vXZt6&7scfrMRa+y0g_lXx%F;PBOr*Tl171C+TlKZV!!qQ2T~<oe z+ViZGDxk@gg;w14R+ZeKiWab1I(H+Z+Q{>>Ta!(y<zq)sna3PP6b%WGEnj7^)gx^7 zsRq1K@{Y(>D<dJ5`kW4C?p!x18)#2sqe{QUQzqZqKWsxYYBoD0cTsKy+<G|#h=WI+ z=5$Ur_Lq2@+e=j=yzN5N%W9O-)7GL-^fs-vnDG;J-gdO!)D+oCY=8i;wFcc99F0w~ zosXIbQnxn1n6oLMU11pDk!rP7zM9Rnlm<fMx0^DPT`d@7kUyAo^dtwo9Xr5WP%<^{ zGFb>$hjO{8IkHw!ohH`Zp&2B#(@p_-cQk639YN+rN#F__*9E+ijd08kF{wC>Y-@HS z+vWi%F}6FshgI3#jjS47sCEE64O%K2vYO_~q8*i}<y7;q-AL%(4kgdh9~W|dHUX6# z!z>Q!pG2P1*{xV*qOuh@J;f^a6t`&W*jW@>y+%>4G8QW>EAh5MPHSPdLTbR_YW~Us zkgZ!+n0~njXo`J}(`Bx8Ysi)B$e0SZjI1%yIyX=iQ_0$DEwV-i>sfBIup8WInDudE zjZ#Du#?3NzcutG#lPsw8SuKs<k^*8WAqH~U7gTjQq_`Ni8(EWWx@>t|Y|A4eM{HRG z1V@g{RBk%H8X*Udl9VNKqM8Xv)qfSnypHVhv&&}4q$_o^(?Ja=u!g#;yxLS~N43Va zMb;>&SP=<ZOfRvBIs;kgA_uZeM-61n!LI~JUY1#ssw|bFQq`s0s*h`O*|}ErjTK64 z>%0x`c}~MjrN*$=+xBwct9u5%$h2pid%hayq9Za9&8iUbw$GJrHFt)Hp5d=s`>n3Y z)_zA3sytecdbP!A3NCat1wvb@C6m>*GA!Sc*u8_(Ar?JgjbMVRm15nfEa_dX1_`04 z=w5wUrJv|{>5$Ew!)m@x=$5wUDTd^G+diWb8eCuvj^O_Jt`8!5Pz1z0el<<|N#QE~ zU?hZBNxC+L=ivS*?!UtQ|8Ud%onQBQ7Pn8^<SR1zures#f`>+HB;Pym@V_6Az(aI> z5|7~L_&AM6=+Eim@rj`z4iNU?Xe@!#-h%$sK`m4g^uIIoIsFs-gIE8A&xbr*3+l{b zBYv06qVGCbUA!B&%#Qy{aN)y7KrZ1!CUc?$$&@(B><YnjF$8iwCh?kOiN760zKUBC z_ep!uDC(`E`!MO^b<C%o6Rkf$#OH7;S`iE$#Ot{oMCOs7+IR`Ho<Kw%z@=z)!zFIP zL(zKtrP1Qh>I&S7)*M{oqj)G<{Ct9)uajUdh4Gim@vER2hAwZyeIIT=Y-ldQeLL=N z;V#7hXFu+*;r>tDwD*x|u1~-v9>hcY9AS^+;s0Aa0^j0;-|!2*fJX>zw+Lf+FG6ei z*n~&mB0O|C;ek<?$m7S@^7{A~<s*rQK1bIfK7Jh!?RGr!@5Uo^KOVt{`1k`n3@He1 z-S+<-N^dIV_N#+hI*6w~bnO~{{w=|^A%C$JH1-9{{Bu_UdMH>N0(NLI>-U4E|K4DM z8Loa023JY{!C<f)#2EF8pdo)_!4ea7xnGskArtQglhmRae=%5S##c!!2Fs=Y{$M#K zw6xGI!2<s73`X$dyCoP7JrTSJPX9N9Vg9TRUhMH*;_+?s_|6tq?ZK>d`O1Rp=##nf zb*~9V;41OweL5KNAIby^cY+!Iyq&9qMP@lH)~a$H46c*#51M@Ypvi~(f*U3LGiWzf zqg4I}-}3F%LH}9=`wKM)D)niPpa9N?2pfXM{uD)MiS8Uk2C{2jeQAY05G>dU`G8ki z=(qU%5g&S*&mS!H@D-vBdIHsm^|Nca`suI3u?_oizaO`(d!etv#lg1FR^#E@#K%Q^ zMEQ_af?E#3M=i87<g3Pc6L264{*e9w{^<CaMZhneQ*`a&<13*lLV_Xsf}yMUyoHae z9>UWX`gcBc;^)c0yb#gzh!W6i_>|y)1Y8xm1^dTPzU$2LZC|#0k08_E$Gr*GGO~RB zLAb;ncxdk-OcrP_%uW2Itm0G;=!_5M!CIe5y=FP;z6)TY@<!aMrF=ULR{jzX)lzcP z(>m2^s2<_>O?pR`qZgirIn0M}e;xOaa9_L{S;hSfZkfia-ZDhK3lHr+JbWL+!~aP< z0;lQv3qJl9kKniX_%0ryAJFv^x&nB?Rav9ujw&xZ+Tvh-Ur_7e6Edt1=7+Sag4(fQ zey?P5hnel2%Vpbt0|=kQ{dL?jn}HYL5}R?Tg?2F>z9v2ZdF}e|&4D<+F2YX-VYvmL z_~zlTJjN%2Gf5(^zg}d0m(&h6&x+0RGlrL*ecF<Tau(8mZwCDj&t2_eI#ruaP1H^% z#}}t-mE~V`V-5bQ>ua%xF1@&5LThPHSTiBc9%ZJvrMY@xqFPb%Qh4>EdNQh#fxTZX z4E}1fGE`q*J2N*iyEvItXj#GOBkAhY{Cq|h(nPF1)YyP;`wEK>WS3byH@~u&S3}B@ zwWv(UjKvY<s|5skQ#q+UkiY?ObI6fN_LWZo<$8svdsuCkK+=Edx@4*p4sV-GPSxxa z_#g`CD>uG+G?l<d=hYFv2pmtOlbQ4+TsA0`#F-BO@WU^JgAk6zf=e+Hj<aj4w=h&0 z6*2zHqU+S7pR<hK63c?WbheqFME<2{A6^#ETm^JFU#fPQQR{yhn$e$!O)TIqqO7^~ z*G#qH)#PwasxP?)x^n4qzD#Xud^O9O)jxWQ{!)wmQt@j|-mri!=h@lxN@loriLDeh z6R+YB$irS$0bjKtfj#J8x6Q6^h0)ThmXTL(Y_i1IO6gpdQv6~^d2%c1D>b<DYKS#} ze2K#^#gr9gUORE=rP<@>aefI>*1&U${*tTwGBs{FaP}C{9!c6mL}yH><bW}udz6VG zr44rmnBcM;MrMsK<)=aI(IvjTdl()i5jf^D*qEh4Gqd=(Wnz-23ESv!sAHf_NMc3~ zRQXbc@#>|Q;yCH4nQ6GeSa~*Z3NIb-s@<$`plk?&18V+~`O1A`@_e*kuFm46RNR;F z`a#`wbHwd-Ylo!=FzKXnD1jW3-yDG)&fXDuYpRtZj~jedyO1o7d2;bmbFA>QD4w<P zd>JyZI6@g%Znq51&gHDk{anSZT}USvC+Dl>an{w7iw6!Ic{OW`C$BGWw7pb*Uq&Hv za$>y(JEuavnv8fQWvEn^wQYsr3^g??;j?P?t2X?x$6>Ep3UYMtict3|%F7&m$ib${ z4$i=_jva-9Ed{eXba#_*mZ>4+Q1;w*|DV-`JHr8$8k+H?r#zrO)%Eo?4K;O`2!%dT zoz%|~@0K3qEUi+JvYXzYGlrR=ni{F*YUohQGx^V&&N*boB&>c|QW6D|rpITiaT-Y~ z4Yw2cKYVule}3^MQADm6+n2Qc35X3iNj9+Ioqla3@PhvZKYcIwKN8f20v`$faY!36 z@dIUF)Bv-C9tp}Ip9pMtO!L)!5Fw8Qef1v{i&^Oe>OP_2#Ld7TX!rQ=E3ZJ^M*#}} zb~j)uPl3Ao0Mh}x6EI!Swntroy0>ef9JpKiC;9tN8aA{K1)kS#1LADpHs8HICXCM^ zxC$5$7pT+%;!-OKi{P*1Z;kwLEDZKg`k$Q<Vp=n2zO%S7XZke}!GdpApy_?H8%NY+ zl7}-k1gq2<Hz?8M$+>FehiH|btHu5$DA(XCk5&xEUJ8fdrV?T66mh<UwR9NtWL^Ku z^uv+}I2)H-p#Hdt19K(dMDWZ-<Jr%=n1WxsA5SdTXI)=5{WPxdYkcNje_?`Pt^gdK zW1D+D1yBq(HQ%pA@yxxRH9;^f15OK`UPf9{u0@C`<s;MRP^YUQ?eXNa8C{;-!Pt@x zmTAXtU<hlX<UBn%-a!6HuBh6$36K*2o=rEJfD^+lactdCv6$z7LVQ>(xUO8?pjn#t z%GHexUIf!e{@CTx_QB_6bxq1qM8#)*KPC5i3LxsV!hwoqT^67D9S_B4e9kg8gAZM! zBQ-DijstfwjrGLRwaKbGJi!(J;ExsC`L*~%uCO#q;+S=ZTsd3a=?8t4AJX9mlZfrT zo`Uyw+{=}n*yQuQxRoAC^AY%*%i>QvK#D(8iTz0@oUYumGcR5SSaiA(vJ#!ch|1W0 zZFxFZp97tv=Rjxh9O&GB4s=){?Rtt4t+gBpu)JOm8Yd*3v+Iw-Vc8>ym!<Qj%D)o& z!?u?#u4;S#5ebp1_hQ@27FV^sk9z}6AKTst?v>i!`+=j{-s|DY)m65uY)w_Wx*eR# zy`BQ-ByOe8%eSjf07vOFalE7~J$ws7l)TJk3a*2?u6>C1Fz%J=yTYNoyy=kCD_P$u zulr%JrQ|h^#BzB^dHt&`FYL5l;-b7_xL1-F*{0;x2W)cFdr@8$=w_6>F3K%D!k@xT ztyxK4#fYuswGG%_QkJ~lgAk9rxL)bHjv(48+$+gT;rwFc6~x|vmE_e9=BWC$yu9|J zoGZzz4`p9TURQ$2E6EFoAg?H|oxoX1UcZApd*sCzQ`hwypz%2FmE@&xelhZz#)guW z<n`Wjkk?U^b0vA*gR-wAuPIdVmE_d|I>-{*pXJ*_wq+~H>ojP1<i!<S*Y$qTcoO$Y z@=`dz7<qja+j>`$*Z0psUiYG$E6Ix=h+9cscVT?ElDuX?XC-;v4V;za^?#9PB`*r; zFA>9gJp{;exL1;w!lAr)1Ug5-&Smvq5rELGm}3&}IKdjvJL6SvxJ8Zq*QI!6Rr30y zDj_0Pkp0X4s}p^SY7f`&B_`+kf?3jHg!tuqK@N)eI6$XxuO!nt6iUhTUX*=n4xujt z!nZ*6KFASX?!|ua5foX;JxH<TTu%XVFY>*T+)n{V$-M(H%z~QKtbUO13`*|q1u!Sc z?;^YoL@4*A-Y<yx0&v*Vas<IV;Q}Y>@Z&%V0bz^cK=|F5y(VQiaW&wFTyt=C0Wt)y z)H?gUK;?(>+JclzWL)cE=~xT^Qe7&~mX1MbR9adYT)7u@>}ja5(y=qBjT>{2sAK%1 zqSCRyMSgNG>exPjm5y;IK<-5ydlL6bI>t{JDjl=15y^E?fB4x$r9ZbWnV+YC^9_Wo zq(1>LQ0dRjh+#_BOv}=r^`PVEkF|JbBH`zH(AaB9aEaVl?|KS{@&Yrnu9qTHzT->% zSt2cxrA+^&+mdM?3Po)1MVaz5SxTnw_6C|h%8ONMC3*2%PfA{Vr-lk;U6dEU52fTa zwPdcJ0*($ot|YIcw!Byyy`(I8v43~k`CAdgd(8l{a1QcPIFy$+9a4Lx<<)q#C9gUp zwzRzXDJCVaOT7g$eUw)Ou~(88ziXuAHG~+{e(yzj@jFOLUY)sxNBC2?cb<d1xH(qU zuO;MV&Yd2WvY_m1X85{Zwf#k;Nj<V5P4~d(fkb<<A<eoI%bf4!s9R~m@-r}Y>Svib ziJb$T+pSWZg-*vg&^d7qbb8K#&OPTqhi^bD@#o%ipfhw1bRIkhI-}=6hpi3JP%Gh( zF8r96)dIZ9ro#a0p!a$&Ag3gq$ddE?@x>Z;?IMPosXz}+T~)D|I(vHWaO<VC2{vWz zLD0#)*oIH^*=+)5o!GN_FSg<Q+?Z+;>T^m-Z1&4f;g_-f8oxQ7d$HZ1hOg9a@cUk> z-S|Vq;7&O2^<{Xu0=Cjx0KXfi+LjBv9j-}^`CUM1R_Y75zh1R1F~mRtT$iN@Hv_zq zhO=Q|>?JkIl)G-><hK068f%e=sV!zZ7DWy{tya@xNXG+-a@^s8G=CCwOo-Wz@y&m^ zQtX>c97ux3VVllWX5Zr6ej&bMLoDreX1@`Xb-fhrwM$C2WnE?)-oWvuEQK6-dIfFb zM4ddFkS152&9d{Yf4Q>%7nCb{yIn4C?I#<oQvA)zINM{EZg8`I)@5lg-$+&2bBz&R zy|U-FG|V1bq<3L}XW-YbC6H<Ay7yv>!~^YBi}ZePpy^|4vlr!3txW}dxk|*9M;=nI zTALpDs7c<7qZA%!uUe95E)j%3h5G@!C0TwYi|=WQ&oGy<Rt%H)N|||`LU;vKShhA2 z_J06bK&F;^XMCllQ;hP-wq?n3sx>J)hZ;MtTtu#asXSAHEK4rVw^6QJWx0q$4bR1S z3eZP^r`qQwxawLH2P%6{a}_2AA0iTBt#^aGx6S0JQnnj*ZTbdccp%YRvmwn-fR2gt zbEV#rlltS?X+@7_Lz@5e6-u46E1r_N+e6i-<hGg34?3wUoCahti_V?dkm$~A$o6Nm z=`@`~tmY?dI<cu_B2!bx7Z`k&TuRyO2cOHKe8P@p^#!qPNb|EcWO>TZ=TN@ej%88q z$c8k(XhW8#{Qq(&pR{9Hl>4$F%@ua6<teiYc%^)AHl65DHl(@g94K=(!%O*rY&y}= zY)CWTmsPCg^UQa1FXacb=|uNrLz?-1u@dEi9Lf)6(}}(z8`AuSbD&(DL;2xsI?=t^ zkmkvApj?(i`H^fo(aCH`^TIh$uE?SMXf~bbzHCS{N4YEUnSGpBf}hQ%6P?Y5G@m#J z%8?w(r?Tlp7qTJECs(E%&1A=F`eHU@dzF)V3OmXX&I^MF^fK{<#mvOMMCx{=rRG-| z_5;Lt3^)5P{NO646Bm67vdM(79aE4RK<)$sLCS>e0)#SEl;cyd!9|#Q?~a%_R|ChI zmr!)BHz@<v#F+)eo1deA+>3C^OU2?E8ZRe5UnJzH8}bAp#cs$8Ik74Oz!4D_oy!3s z(4l;d#37!Q`b-YwrX0u}fK(v{dvlfN`-mes7BL~e4TyS^vLK%)j=TWTaGZ+duL&}L z{?^2CDF1T~<at0G9>(L>P0kJ-w8{9iswF9}<siuB7<LXFoJq~kMF4ct;-RRI1LDY{ zo3U^?9OJiZy^z~X2%(A_?*YWBaSHOkJvecG@Csjp_tN=f4&|>&NX(V`-vMH^5{fcU zUvtVuiXj#Vmy_o;fP4iIr(Bl;a*qdc1t3p&AXfpRW~eL)@@O|+4&}E2;>dzw9|k0b zU*=Bb@b>^YDs{txoC2g6wFy5a&SP|%mrumw%BJkFUE>(U^Wm&ZQT{hT)Lc`<r1LXC zVhD6fdLEok>T!Gn6T9QYQQ(<%IX-n@9%pB40BI(mC|^thxSW#i^g!a%N!i*Q_2h67 zI93~_=-h6`;*Wy7-$RFKd>N1v_;ql;VLF}E|HTsvpLCSPQ1fF}*(=cyT78pBs}>M7 zS83t20m2I9P`(C`2R*6Z0LUp1<Om>ldLVBD<Zc@hM|GMs^%+33r0)aHV-Ak_4a<9N z&J&YsgWi_*^EqjK6A-GnljrYC2%%P58qVeuBId#=<Y|3?Ik7eXauN`S&zAu5fCthl z=>UXF@o)f;i0M<12|ykO#G#WiV>xMk91v@4qhkFbAmluK3i2g07U}ym7{fp#v#);y z4xtX^ADXcoNEolzWx#Rrvzag4=H=5OaOF~N0gkukUS-B|C{KClR4z&9CQmH1#&d}q zfM{MmZ3|qvslUrZc~cG!=^XOVxiANZNqiJ^zJXt-?4L6!JEiy$Al{O$=fnms2dC47 z5UQjz=7wmS0r!@I{Z7Ku?_7|Ba|3A9B==#sz<IkGc_I<crAo|A<BN5scV=#C-f}0# z$5Y9JmT#5^=$KgPOv-W+j6FY&e|}<iCXGGJvdwJAXN6#)n^{~C@oQ%0`ms6F1zIu9 ztjw*L1!-nnb>odUy2^>xyR#?WHQd_YiBFt$_YR<C!2YIGavIr8rW7~ut$8-{*ffO3 z%pG7svm>Z!`5Ju3R~63OT1Df2VeO^1Y!$Ns_1S=iY(OKDbx|}wG8t>JnQk*V7mJ%; zQ51CP<Tj7&nNKArhae%-Ih;(S=k0)=#N6a;(n-%YREX6hTlDd~pu-Nr-29xGs28<E zB`BlC7n0o86i+SA$xl4X4WB&tOf0#1(kiR7S#8O!YABTwBfnk*A$lbh=k6&{qxMiW zH#Olnc|;f<8^FiE@U5wl&asX`d={v0upQsS!)J^@AkN7la0N1?w+qAQzM1h<B6TDd zWn}lqVBnoNoUpzrAIC?K0hu|lu$W59FU-KlP3bnVIA|`UWx-7-C<5OW>}1l~nI~!v zB@_E=K!F{pYHQ%j6)hA%jn(*Ok(hw?LWO50(y}bv3m>1KVh$$uOO3&)bMYM79Gxyt z+)E^tOea$Zlal;_#0~SQczSUhn;kRB1M!2&RC)%7+mVelpN=1%broJgW|n}ct{HJA zk6`&=h6A7@_!xL%GC8T#4O*pYQFk)aKR>xRn^Y>=s$`NSblG0T_hHNwR}<C94kq~A z2`{e#rXJzb-imemumRoSoGC73V<<I0(K<N^cBCnS9EdHy>{bGGXKKDCD|?DJ3$83m zwJ={8ZFVl0qZkZ6XXe2A`Lu`UGY1mW$v8L7OA#m%^XZwx@dHVWZSb*jP)a8!G8B^Z zAHeYh#O(vKO*L0Mm2tC`Ujn@f-rG8A<;m1doCTIl;j8GmT86%8c`aLBB6g*;)WrRb zCM8)bM6q$g%8{vr6AoLm4p)p*LGZOmJoh8h$yvA)5D@!9sG~O_PvwPn<P;FYis7qA zGCS-O7?&-rVpYA_l&aLAXp?6BmH|tVUzVV1Ma*}Sc$|w>9s%3hXtpLC7o1~W6=`#5 zY&AfxhKh-@8OYH^G;8b)?7FK6nePQ)FIC5B8kKG_0&98<J*L86vc`KGVHMTe6nm<# zyUkK6l5wRR?`5@VL#<)$up2X~ouq8Ok6FGW)7%_lYdO?}ZM>s_Djdg@fG_ez&Wt#% zUdM99dgxrWMrB7%?69p&&&T&!9d+*DMKyw^Y*fSGZl2X)C-JG-#I))vr1~vU8^8rQ zd*Rg<K;6{=r3XZ{Ne&0y>2b`RLqbK!&72&z=3q-<WHnSddX1jU8*%w6vwVxA`T!Sg T_vr5|?RUmj1HKw~^CA8}rG&Fa literal 0 HcmV?d00001 diff --git a/util/gamate/gamate-fixcart.exe b/util/gamate/gamate-fixcart.exe new file mode 100755 index 0000000000000000000000000000000000000000..8d9d698683a9c262e463f92af677e136e301b674 GIT binary patch literal 67781 zcmeIb3t$~bbvHhHpDV4bmnB<{?fBY}6DP4`J+2;3?BvRNC$c2;aGXF`UrAT8uq+8( z$&ZkNixY@z9;O5uAccgae*y%WmJ|Y{#U%mrNL!btke0MfXlNbC_hD#~h5+^V`_1h0 zUdfgr;olZk+Pynx&YU@O&Y8!~oSof%!!Z#QLWFRhIU~eF_~nt1*Rx*^Av%A}7xKk} zIe)eGA+77L)(-3*PsgTbrp9KHdt<}N$;qkN*ib4qGdCF<pNzHi^vCv2jif4<EXggm zNcXl1(WMoND?ZphB)%rZ>3|SViHkKu3#=EpKw5_rFi~ioG5nG{h5;wv8czPo;}Aj! zd^@eNT!(~+DO@IC8XVS-3QXgN0yreZDTj!PlGkHG<S~PU5UV`kbKTw#x+J~OQ8}AB zFpJ1%bX*E?vaA{T?-F8H<w$ZiiKqll7KLRN`8YjCLWtv)GYat~##iAaEz<QI36QBA znj4=O86T-58~{nLgaP+RAZAlsg?CXly*Np4nS$BZgrt{FGh9U(?c!bbaftklTLmG# zX`G~Y0Zz}6kmX3v3<D;0aR@gNoEPHs90`e+nwSEj)XgzOvfSk!B-|#1*tV%!732W< zy9+1rF2?CO62z<7EFsVD!OsIYCva|%Am@@GUc6d{k1xSb3`D7m+a<`kB#2ihB`j{F zekmO4_oEJqyh#wRzCqp}<~0F4@^`-kIhO?S8X9HzYU-dDcxCwgv;;Yq1o1Yj@}eq3 z&KA9|Iw<lc0X!Qrc;x$spE-T_xxy2n@<YoL;?xh3=0r<5+2$|RBoN1+Q$IRO+`pbB z?mK6R`zGSP{>U-=06*95=s*12D&|?05NAsB-k1=Fp9|f3yx^9%fQciII58!NIl8q_ z#or@#B_zWINOfdY`I+w=eojB~RTg2r2Xc>yCB&^S&K5Bu#3Z5e#$M#}Z5BF&NKc^? zMG(kM$n>45=U@AJ^TtO;kIDA&FDQ*4KKRbriv{KPT-n`{>hakeo7%~{$<D3EXY-DP z%FmSQibs?aB|F+u9s^#2T!D#G;~<9c862n9<K7m9{5`Y&{^<ljXVyPp{XS^@K5qR! zVf{X7{XT5{K4bl!vVKonzdx71qsP>r&5xyNaC@o~JV175N*@BIs~N@C`G%p&G8B&H zbo6!Q<)_{OgSz#*1-Cp2wI3}#jvS75K^)DY`zVEG{fh>F^4Ln8ID80K9w!dpg6kly zsCnbbvIKsro|Hc&RS@%${=y^IZaC505i4d?SC#zfO~{{tUinkLk-8>XV3ZZY(oZz6 z(&bMqCVyH^F9Y!KF<_JdKzloh`=f~iy!{GqOXF1Pw+e3k979WDF@(MjG+CB%hQ3vB z%M}5}ZLs22F;u$Iiu*5OE~&EOo|5U}R@|3mT%#3tuZ-Jb#l2aEnBS4YqovI0NN?z9 zDKk0Jt1J3Pdh?E!lJt>Y;E?K(-jbuGBzUB^>}V-z9qE<z3f!N16J&9sIZnex?K;wY z^NHrh1Og|Tx5%2*oTy4t9&FoQs^Q%o&fT53WAh5d^5)bZ1Yj|bmOTV6#cRK;i+Ao5 zM{m0q0j1#+38meH)b5d7squu;@u5RN<8k7UqvM3qaYE@hp>*7_;Y30yIH44rPzp{c z1t*k(6{&<$a6&0Kp%k1@3O?jj@Q?oM%$XyPC>7tj8i8m32^ZGuqlHIGDeq@5A^_#- zU3El?@Yz`c9+X{(gqIzWGJduj@X=#OdrOW;;Xhktg+Yi~dA8UJ=N*ye@a*%yQ26>0 zsmEu(ZG}Teq=KJ)2;pOFFYey53z|dgbaz7Cgzj$P4XSEBB!2k0yu**Kdc<Ps@N*l{ zzQm6XlvhE_jfY<f6x?zgQrX{)#^@%tZFiL>MD_7ozkZ~oyx{iZM@mWSM3|(hz9UPR z+dVY&Q-!4d(wTc25h!@y@q*7DKm6#%FXsu$=kQCxxs^wd14zbMt&Si^L_hl`+(RzX z7F_gWK-KM*6*-?802(+4Q=f#5A_Ej~6(fcbffB4b5hj$4;t!92o}E>|lT{(^pEZEt zX)$HK;L!$UwpVA?KWepuU$cH6vwokmexJ8~U$TA$+U{dkYdLz1?HSlBM`IRad3KR? zXrkn2XU?$0QQ&fdQ6paaY#w;DdExJw^(QU5?AMMRL;umQI^d%>=AF9mWl;GYT`PFk z(@019eN_o@v^m5q)*|wr4Is?+=$k6u?WQ3N$p?^5gv)`&<3u=S-C5>w>~0bu;x~VK z=8Ps0?^y-V-9$WmT)T(ATh9~-vF~w-3ntu5K$2<y7-<zDa9HqJNrmutXTaB6dF^-L zK)MEjqc{G%`uNu$IT~cDXI}!~wV_ih5WynvK#?Iw{b+)n=cyWkt?n^`d#^N)9eehh z|LFtKV2-0};K6%&^V`dBCGcAb%qxN6gJWaE!)Cgox^iS<LYU@EYHU0`o0>64@eH3b z$0tXp03Auq2M5KubaE_pMQnXK_S(_$iPVj`V&?K8F+4RlF)}$Do0?8dUJ<)wefknU z{<JqYUlH5T-aU9}th&0grm`wlQ&m%4)lkzI+t8L8nVLz)nh%cc$4r5WuBf>*JI#D_ z=7aq*w11oCm($6AXSvO18-V@x$d*6=pcOb*C2*Dq(bwP7Kl+(vH(!0j=YN08CAt53 z?bG|e%Q50_kN-UqfSTo@-P9+vn{{nvUMO@Ml+3wKo=<)0%$c_nqbXm%HLz_-IB@tY zKoJY2+i0b0JbvbkoW`=#wY@#~w$R~l;61sIG<~({L=&kr8#0eBq<IMVo4on#k=ZPm z56AxG?*XK{i0PX1V|*B`!g>E!&zz~Dq1t)39}Wh7lKYiMkYy9*7Z&23Q);C79B9Vy zOPT}uWw<V!#^&P*q_OM9LiBCihtC7|uJgdXWf8a=P%M^lH*l}wa~ouIIDjGsKcMBW zx+XssXwA*n+aAdewHXVQgXwvWJaXpDrTC?s%={8uoAW~m(gwERoJIU;{35<8@cP{R zP`j}c*AAmYUI+5a5pi>Vh;o_08GrQ5nK1EjER?q`!!qE?=aNO>{v3RqOE<I~mMI3h zar`=R*(nX6Ctq)ZOc-%)-X^}{mP4iZ?|a=c?eg~c4C)TTcX(i@0n^{;;&|^?0lpFE z7MvY8cj6quIg9fU&f9U`hw~wv$8kP}^KqO{;yi`(G|rcB3gnT8Glp{`P9BZ;ZNqs3 z&It?l>&|Z_2EM}wl4cTXHRH1=Bf?{;*_l*o5+Nb_5#E~|pXB}1!o>L59G;o2N>m|y zm1d4|^ji;O`k-cx@135TNtx5LEJ|B&I5{C#FNFA35F>C5c`?GCO%CrS5%IVU8=u5L zd@{+p@qCcvaWV&lD?^H>w$SMC#8f&3kk}g<1$)Ed_K?h4d>}MBJp&q}i2D%k=MeWt zp;7RUb~7}ZPNnvU{|N7Oco~jNPo>8Xn0r%zjgQH4y)EL95V7b?%0~VZtqpX##)oE- zGY7@*1lm)x+owk6CQ=>A$&ravlMtUJtaoN=xM^f$CdE~vzYTUxB}c3@z>w=ew6$0G zR1#GWG$o+zJ+E!;>u&9;t&vYV$ojX3R|1+`Rzg2`$P48PE89=lT^5{p9XNL)=G|8N zNZ6LE5A2<Y?Muz1$EPN@uB)!BS{F-A4o{7YPmXO}H#pE%(YP*_o`ta_C#EJ-Th|>- zrPp13RqmE#I-S}(G;uJ7^pokW>*i)AuSgH?hDoL?_KpwFOr@trXDf!M_Fj=p@2%Wd zy)L#lIXOO>O3&`_W_DF>EVgBKW-dM3i6_`a602RuWJs7!4bRPt&mL4k0A^BeoI@6= zk=~i{eR$3tOQr2NZ*1!UB%DQwyHfj76R`<ix2{X3J16%|?Mcn7+hix&vS~qzTQ+%f z-?GUm1k-Lo!Kah6<3r;UVDH?;@}W~&ih(W3>FJ5_VGx>{bXZzjQ8BPP73*xllKsTg zeyrG!5G9q4d9Y*Yx#{Vtnc3Lr)J*I;piJ#g$97=GAQ`Kua7bB5sS&LBcaCgb_oh@$ zRdsc|uA!p3E?!>|uN|(dNY;&}Dypg)M^dR&?MUrt)$e%3^UL$na8^EQ>#A!Thc+iG z>P9w$kI|u#ipEsUNJX+H9<QpYsT<u~n|x*XXgn()@np?tO=GIIqONvmb45HJudWzM zZXT`}soy*jPsWq=soKU@h>yzZvvN{BTHjDV+)!W9Se2@-h}YC^uGm~RG*r=8J5n`T zKT<W4Y>=G9WX*sD{_?7+t~x6xjj5{9hGcb3#n9+bEp(G=tbnHKD&mc!BXw2D>bm4+ zsT;+~mQ5b3lvQJs&)CtFY_i*ut2q1g+hbk{6e=HzysA5^K3etJs)wt-T=k8rZ&f{0 z_2a5vRE4VZt5;XISNBz4Up-oVQ}suyKT-Xs)nBOoa`iW=zg7K@)!(cBLG@3nSJk|^ z=1*%rUvs?XuWBBz`EJekYM!lmvE~;wp<1K1w6?N#OYJqaJ8MU4XKUYDd#v`uwfEOP zSo`O-U#<O{+9ztCuKhu+h%bqk#8<}G$2Y|{$9KiwAOFMnz41@S|1AD+{E_%K;@^q? zbNu`9=i)EMSJhS2wbl*RrRwJDZmoM?-Mw|6s{3r+PwE2odVO*I^7``nTkAhm|C9Qc z>jMqB4aE%?G^}e#G+fs(({NM6T@4R3e7oVPh95VaX$UpuG!`|kZoHzgwXv`9#>O`^ zzPIu5#(CxQzZ}SC9?ttX&PRm_A)ogpOg$3?#8--)_~L|!S#kVP>F+7E<GBRSv4VZ5 z`0#Q&o@?{j@naZrsKEml?X%;*j%g_s&(-|w_{&$?@w*T&pKC1!RQ{)~w&S__x!yxS z#s7P|9e;9JLfFrhB%$JKueIZ!LcAxr6+etA48>m+Tn8}Zca9R=1;l$_Z^t_k|4nZG z5}FMQO)|e6Q}eOr>V`$n&c`bD&dy=*HkO)9&5REtn4B5jy>-04u|8HYhX1jVp;$#v zO{`*ca*AWNy;GC8rwiIFX89{d_u{z#>jxDRsmZa~-CNN=05k)@@YEy+hqGxwW@nPa zsTte=GQ6h(?uE0d;n}H~iuCNv)FiSY@r*chG}B2eU~EmNrz?i$Mn_XXAHONJH7-_D z^0mBpOkEF!@t`Ea#4%?@;BS|&hL-hEbZ#<@C!y2`Mnkhg4@A?uIr#BI^)QC8V=;M= zXn7%dKQc8pG?5Z|VaRNom`cu8*E9-Uiwy5h&WJMlW+7K6QILROROKq6{!BF82}=Si zLgAL{diq*K@SUsQD^rC=nF({SSeAHtAgp+n<ukFMGh17OB8Ik?F|)8~&N-l-6|&TN zROX+}M6d=;MUiRZ*)=&qIR)<{iNUU(?sl_xpihJwR*)CPnSy-jl4c|-#v|@51^aqU zN;YgxjgHpG0g3Ed+bsDQ#lt7Vv-!W{gcZh3#rr`bY^E*kMBclctX~j{{88{J#4I(< z{lmM($MVLUz>v6aDWgP$9MY*Y%Ay6uN<H$?oK=|k3gOv)Y7R<`+#4k|0`?^*=29Z^ z@$eUsAcP$E4#BQwS<=WSf}{d*4R%4<BDzeK)a>eMzSbNNdS1cjK_zTL3B!AkAbQct ztC5XiZW|w?=*yyU{e;YSlAfQ@`lSpZ*F7TIAUOzyFq?2-|414DLm7feO(IyrU|z^n zkt-R3Q5_J`M&mJ1DG|Y4_=#-7<w=~ftjyb--7CtYTlCvezfr!~y(XS5MD(g0yTpL( z#RNw5Y6$@c#MwPHHzT463DOm4?@02Xh&D+O_#hVQvWRYz5b#3C!4wQT+AKjO3bbFQ zYmuNb3rm7pC1{lbji*P_5J{Va#blcbGmiG?KahNnP9|r@AeG)+hEb4_^pv?<&NGPU zYjOxYRAP=!&K{gjrA0rbAhZ&5Jk8k~v4i1|CL+|&%fOY=StC~4^E$`0=#buuiN}zs zR5M)65Q2ET5z&zdg$2=!PJ)NgoNExLUx;`S9lMZ%y-fs3HgW?Zcv|#>Chpfj2WhlF zLXY00zZ-y%Ih4d~P4rDgSJ6B}(C|$N-mEeaxt{>^Q@{(z3t0{v;f0<)BKW6>iD8MB z6HtjzG!@W?qbRGHnwgoL0zUy|%9@#;#e=qpP6Uhq#=ap5n3{u(Cjupe=n{ftgj`5S z9ww<KVH=YHU78n&%BFa77>b_?=nv<?&NLH^&~$2ed~`fDVmAYFi8wl=@~+Y>u!yDu z%PLTsxCRlx<9K`$b7;{yh1Lk*@I)#(IX5k$`vbY(0rf2!N|v6R0M<<bSvwLogq7q? zDrJjiPS-&ZH!GA5%(For6L<m@(ccM_JPATwnmN307JZ6{9#V;VC4_p2{%#<L0v*tx z?ENBoZy<U*lI+a0t>M1FQfj|LvmsUD<AGu-xC<cEM{{%za{5%jcn;~F4CJA7V{A75 zG*I|(4i-!#WK=vD$bAtAXf%S<yHxDkpe&DKWl$-W?#aR3h|awYBKx!-kD!38vB6_R z;q3_@iU@uNVcFI_i5qEw0Tq7E4$Jl+-PYOFiaE*Y==1s!a2qlq{}+laTZA>dXg5WW z&40>!v;d<MN!GuYa-K%csQz5(7tx=}U_LAwVtu)27fOkSU}9)gne@+OYE*jZ_#OR4 zF)ex(6frfmXB^3emP_-FQO8Ntvw*gm#$2wM`!V$bgpjuSC;%H^s+_3=xg`|LMv#y* zo>5)Pp%`Ftb3-C(Xp#k(8*M62lZAp!u`OGoNoHVAbJ7S3wW7z661Frc!$n#V<<<`4 z1*H;238pnPu}2kVxgr2NlCr1~(K1c8R<I-VWa$*F?*c84{nSpyFN7RjsTF(-Lf$3o z1WItBme+&EXhgF+77>kM)dis4BKHoYCAP;v2(lDUWfhwy)hD9sv<s-#LQ@)EUUY-@ z3q;eR*|S`x6*0*0_|y>ecDZ6cgc>fx8#UP~=psmi4c?DSp*e&0G~Oukqb*tongdw~ zXr)yvW)R`MvSzlaa6~hcBZzL-iYsUnBEp}Yz_e_y^yIC9<*<K9d~z<0#)9-k^zDH% z_QNDUJ2N}A$DByA;@%c0W~Bs&$@K8-IQ&keT8;z?Ndt|Q9C5f2zZY1}ey&_I$C7*Z zCS^B?I}tq^C}8b?>X@G;kaq+&E`=naycv`*`p&=wQ7{TUVV*HH2~N<(i|D%o%cLd< zo}JncpBM#yw}MZ@E-~udJ7mL;Dfj^}S07I*hTjt?yaWs%Lh;aXCnps2_XC9ufZhgf zQ?sZIDYn-l`d-EBUCeOC!^rK5@Vyf5<>Y-T;(kV?A-(;>X`7k%tEdObBw}1H|3F1N z%m}7IN;}ORD(X?q+--LtA5e||V<N)QD2pQ1xk80m2pNv5aJwB|E=o^-I53N#vO%;5 zcL!E7On|k(5dCPN>=u9yhzOe--b!MtMT927R@e%!Jsmw92(rUjX7zO+4A8WeS+*qZ z2{3EL#A9~4GO^@4xR=#O1PKmugtdgtv{i|IOyJYFL}>F7yuu-K3<#s6v%7zwsk^z= zG({+QGPn_OA!WG&LD~3<u!BX|RX_=nMz~{pPs<?cW$@djOc!Lcrt2YV_|FFmIpWUQ zxb*)bChUy2bE-=C>|HnwZ!0|240Dm>zT9eUWg+Co?s6O!l%5v3wVLd+gtj+1Ha=_) zji-m_(3$2oXn8YaRO8yv-sBsmW<+kIg6Rr2K1tYS1<TXiWhl86m3yVOl$jN3smXm@ zo66m)88HA#kds`Y%H5_Jn*k`(<g!t2vzFV5;3~~t3CeBJj3Gc`+9+S`Qe@jS{aq+& zIjCS1lG~x>90JM)jZbZ9k=v;mw<5ez8&TnFRJclGPeJRPLD{xzIh12u0aIu^a=R6% zQ5#B2BPLppf^Cs7iPfth2@TIETx84b(~J)zyB2MF2CE2UXh6%o2apa8FQ%E2DRhIm z*P$ek=1$Ghd+znxl5YX+b=vR&EQ(pwUZ<^l8NdVDZj=}6T_X4On$e7OH*3l1aa#+! zw45)3`$Gz*w2)M=TP*rDB6mz%at5?+(=yiGa^IlkY$$@`ur{4e&5cZ<7N8`yWF}Mr zZ}&&avhP(<cR<m2tX4zK+(`wzQ=8q*o)+eqni<6-wa87Yn7cf7A#&$5*;C&ug6yz^ z>%m}<jkD~nX$#g^^fKHop)mxgClR~~w-SfuAYm3_HzQbsXauq*21rz1L~snZK@OW` zS}IB=v(o+^!jaG5!c$h(pa?#M`z3#ci-#D4B6t{jhzz1mea}XZh$2t*!UKV$$slng zasfmwX={p4iayW}QeIAoly9xoT830BZqWva%fhKLNj5UjYQ$mfP3K0d7H`!)dTz8T z@w?jB=RsR1O<OC-BQxLkA&84CzUA7nRunnIXkJ7xg!vz-oHE?F1rg;W*W5SI&)SFq zm9|{7=S#FZ3raC{!aUlMXnkN-h=OWB$o&`~Ie=(YxQ66a*Q!LpcEnQ%Z(ksO9PyOp z$L5c}_*TSMAbuX&Li{5%&PlA*{Qb?C#CjS<U4!mT6emOsKlk9&)FhUcF>9sGJ8Pw7 z&RS{ySu4#uYo%GUR>(ol3UNXsn1rDruk2|eEpx6)3t4khpyQpJ(!6t1+Je(gn$wp? zw!<ph`1}<pD0mt92kF?O9yA~jWxr*-<3$AL5UV?m8A8ij?gZeau@yKuBG>fP4m_Q3 zl2QZ;3+4eQFnR>VH#380aTDMjS{+;sPb(wxJQRgiq}fW+?p!j8@N${<JtBWOlt(81 z4rd6JCior^!7r+fD2O4B_AJEfkrS=^{}Agp!@A4xxZRJFLO|(ZXAptE@vXx1qh`lz zcXj|n!!!~4`%>Nq-Xnwign=OfgCP-6)gw57aPWEpEvt4U+>8qK8zSMW(c|8P(_WA1 zf;=)LTulkv@vo4CKk%C);kzS3jN(jKHhf36gli~aJN^}t@Q;3TB>YayfqV_8y(aif zwuEabVLSd;l<?=vRXf~@hUpU74qtxxE52CfTQ##+&Sqw3$JH`d>cDVnnqE6x7{js` zrdBF2$z6d-1-K|G*sr|K2D<7|A)SPa4yQrJhnXMl=3jqXFyed`=FYNYxAsR^l6?^8 zF4QHi?pC2I%<+#Uaxw=UIo`oV&b(uwh`SsX*j`5S$x(eoA@33EJgNtJRs@-6#?Y!z z0y9TaISY<tERuNC#tKp3)CEkA5s_ST4F2tMNzFeD%i-FJT-f94;f9ga@C27RHcZY< zOn}U#WGQ<DW?0K@K`gf^zTI(K#94X^?OMxWQpB{D-a@naT=-I9x%3vgsrZD1*h_Dr z_b#VsF4aT#Xw_AmhqBhk#-WwVLZSaJ*oK=`_JZ6ekyr(|AV(Y#wAbB2_eM#I0JZKG z`gnLPFhU~wVZaaKRwwU4Fy!VF`b5w`%;h1dU#@Q!z6-&KJ;xH>xb$08oujyLRmo`^ zpu`^TD{ThZFw=$Kk4ugg7@C@z5aI7L5Qt(eF-iS|$zI+BmZJBG#>i!QI~wyK6o6;z z33GaiW8lcfoWDjQ5uC-ESsF8rn3qURV=`2NL&33`skv!*Jc>xAgy=z}GT~b|W2O)8 z9YUs&O)?@cNFW>}4>}Q5GNLeu;V7JgeYsZ4s1g~Kk#miVDw9!e?zIxSD#&?;+3|fT zIXx*NaS4tECsSjn;|{n^g3BeZcnfgY9KjOiY+6L>bqZ}m&<AXgz)OSECZ;3tWIUW2 z!75y&QGzc67!omuP_AjtIYc%~_~k)Nym-;Ckl>8~`_ZqI@CuT_j4H&Qo)nQS5?D!O z7r0ddH%YEDh+ie6s;nq~23O0tYCF!Qmyi)PG9sgFO){$1it^LjCgb9EoJ+4+M$}=- zfy?DsKv?~LR;_K<4`4?B=nC3=M6KvY-zlSV?5C#in_+ny!?)nN+Ozn+OVj_f7~Nlx zPMTv=Gvg4u{-ALUo}fig%~cEi&x|)C{8UiQX$$>x#&U$82@b!3bMLTB{qwoB^HafL zwkvY}PXB^It9~x1Y+wIk@e2r^E}IxOk(JQ@vh*-$Y|unlGCkPYJ%H7Yobt*`Ss>RN zAg5u4ETSxx^ajZJ(j^yzW23pFsZZpt)@0=^yoMktl-xC137eqsP6_I5?uS!BZojsC z55j0X)!MtUOwqO1-t+Pb-T?;DZdq&Z#ziZ+P?qPcy&G}84BbaiEeII(OBq6Nk1!f! zD-;UaYwt#bL3!vwRY#1564?v{<=VT^u#%y|AlBZEMq@Rol!)-3Ag|~lTq+QjZ5H#! zinu5@w&>rN8FPJ{YwyNYIi$c=k89|djWn*75O6?<TzfYX5(FM35*N&kCJD;3KzKwo zwn+$hA(C8sH<~4=M1kbmyU`*+Wfqns)ha=&6iBVT8*LI66BWH+PS=bc{c5faVbNQz zy&Ju`3<Ka<dpBN_L*St@XYJkS&!rrMR%Wlh8#^Q<q=_hX)B}7eA>aDDG4uhMnOwgz zhKm_OR$P8JMk16Kq{HQRV>IW(q)<sNjj;<U+uKB#RHL89g{MV6{2APD;_57yl62!H z{a*nHsyR{PO+~CZ2+HL><7SnK$bA{cr(vlfATQ)Nz^V|q4sa2UAm&1ANg@$4u>5`! zvxHTrjavfYjaXJ#bMkG0r}2WBf6>dpq8B?dfW3=e1{S?YJ7dwyz@pce3#o&QMK1%3 zUNo?*MK1%3UX+n<(aXT17ptSS=w)EhYZ_ED7QGBCda<M3ow4X;V9|^4%tbE)i(Z6# z7rhKDdU2ZkkZ;k;z@ir?STh#A3@mz)*Sj(ny$mdRk#N?cmw`nuM$EJ5Wnj^ZQCW*# z1{S>-G0&oxfkiJyc^174EP9cp$Hbb`9|`0`jrJmzfkmvJpbP|9)Bgq*u>zQeJm9!t zd@!&MRuOZTrf2|2p<FTyxMYwx0Lmr9fJ??6(1g|jpi2fIC4@lXfN*6HkP8XPQ!W_> zTrx<b(Cd<6z$K#?jFiyU=6A_3;F7^~RhA{CgaMa~x1bk^dtEXNxMUEm(c_X~z$JsT ztyn&{Trv!}WU$dp*bugzaLHiG7Uhy*z$JqyutUcs!+=Xh4G48PE*Zull?a9jCk@t3 z11=e?2m_S+eqq2RqYNV5xx{wKFyNEHCZR*KK~=(lQwFPj7ho6!D5neqUK!hv+mnGM zwpWG$w~TVg@+k>IX7J1C0t);x!fX&^jsFkM^}99x@4$>z<NqEpxlf=TEyF%<9u$HC zEV~H5L=@g`@}Y?EN`&Q5wgoq`RSKx^fE||IgyWK7Jg@&4`>q7B7G=CpY_(6Yh8Lxf z(E>s?|0(a$F({V|<E5NGM$YIJq)UeJQyI)hD~FQ4T=XCci2lKL$uNE<Q=>1CE*Zuz zidp7Wj!TAtrjJctj5>x(h5?rhHgM&(ONIfL49aQ)OqDJf@KRes!ECf$G7Pw6Pz*3R zxMUb`$sh|bH>@BSaLHhyU{i3(FyN9wp~0S{ONIfLj5t!lmZVFD0hbKQO}S(kaLFJg zn3nC5VZbGW1Yk#&ONIfL3_@T>mP>{Kmkd6?pw%P47^E0*$tZw1?2>f?C4fuDU0`ZN zuBpofe*-QVY$D*2aSCaP?NK~Img1=_xOYjH3<EA1RBN&2l3{Gn^iiZ#O^GnzlffXv z(g(wUPX>7nSw0yCd@^JsAi}iPa0xEOj!%Zsf}x(IhGIZ3aLQm1)TC2}0jCUxEvF0v zP8kn_cAkjxM|LLce_(y@Lb<*LOlgfPRG6)_3`bS?Cw6$bh*Do{?qvLG5hWS6I(C@! z*4g1QQN%Vw3QL3u4zoEZVvV#!)=pppE>RZnb-0m~0wUl0hNMv&Tu#f34x+94T^lJX z@|^W|uF^+O20w<lptV|yAO#93I9LL(&jTe)8WDSyKKkuarVG>3bKI2$_Yrf+juPr$ z*6Cslbd~m>0x00L3;{-n@IR5zk8r^_Lye9x1lRA^IR+1ML0$iJ!9f&41mz&)k8@>* zujIT7II{E+d0nG2<Y--GNYnryNv*tyA6<pZd!2+L&$H^_UE7T1m*^u)ku6?9osq3- z{xTycMn-H1M3}!^!a@o*lA1`t4<^4XcN1KsbuW;(D<nA2O^?Ul{0odrK(x>WnkK<3 zCAh>#g78(jTYz5XgR2y)Wy~trf$IZ+Tnmb|BHEY*#u~Q*#uU);15nTk7wTYMsbFUF zKu@39)!9El)DmqeM~eBT+2RG4DscF(kz;l9_3Z;){bp}dOMmALt)j><ehBlrv%1*4 zw*UJ6f!6KjK<D;Wkyp4iRCqnS{I#yB{k`;DD7-q9!>IzHb&QYgt{#9l6IM<``i-bd zAqlHduqFl5h2f)ExGfZnfZ&DZwS)bweP%zNm0DZOmZpIw@ldd^B~-WqZ(C@6sdQ>) zUuvXU6t;!*H^K&m*2$&)nYrm%l|j4WOm}c=L}5orXY!IIE#v9E^nY%aPSAy&ifQzm zHsM-Pcuh#Z49Ms^eU!J2C)1+v+EDIt6zPGWs;5M(Vf%mvS619B0FajbHz;6MNea7Q zb|_^n(c=A>aY>B~qC_p+?zZra;qrZe3-MoXSv!cEx@br?JtM)IDr*@Cu2gh9HI>uv zYcGIso3B$(guR{JZ9OVH*e(6D6+|OOd+WeJM_+4GOLr607qCDIA;?gF>wpSje+n7$ zpocB=9j$%+oju($p9o<jXzr*sxAzQo510c@+qzo&;lYR)S#qg7ox$GLKG|X9Sd>iI zSxaB%j#jg`ueGgnCz9n_QIZR@ZLq6L7zA~8cMh1XJDXd32atC^95Dezaa<CTpCtsN z5CmV>*$vj(VfKC3o3g<9o<!NP1v2eGUlSam2721t;nY;<0W~!bfKyRKkVU<>vjvzY zNa0QtGp2PX2@IGmJ=>d*e^Ymh6oObPlWlM5>g;Y6B{I;_3g`Lmf&SKJQAz+y)7sb9 z-D9@(^=v0qgnIhKGCQ)jr@wP2O4mHt*Ew*#*)%ZF*ST#FGbqb#jQ)=8UE7*OnH?Sk zgOXT3_*-E^+r7{WZ0NSmZn$!_ij@R(^z>XSR`IT>uYHGD&AZm_9lhd0-nF!D8*B$7 zU2S3w!~NHHH%orIcZe7P8STefiG<=|6KpwTFt2Osg8{XRb#_cI%)q?1^?GrU1(A{v z<qWm%gzkI$dYW7N`^9=Y1tg8v*_*ncfoog4#l?hEgmh*jp-TwB><rBT^`Hsr+(1zC zjsbH!z&*VK{o+zWy3jB>kjn^x$tc-hZl^%uEmh-AY$Uj;3uH}YzuTL7MFoMl@qj7` zYU^ul^}sd}2A*2G2SgR`!8GrydEeUI!uuKv-re8d-`Xo`tzhqU)MMNVwWAugh&qNK zZyLB`IMUkd8N*uD0#l(3MT3<RWX;~|TFm~wX3^+@wfFT(*k;0<%7#kRjCXBpLuzM5 z!%H7m5D6J~w4%t+P8*sE%0yhr2vsL2GPkaXEsWXTw9^aQDkAeXYQ^`2--O1m*we|2 z`--bIJ%SEe^Ee0=!$FXpR;GhsF&qRx3Aoomuow=4gn1nVi{T(hSeAoeF&qS$nd2Z> z3<p620LMYF7!HDK0I(bci{T*1;e+cSSPTcj4nVvPg2iwUJdOM;2f<=E2#x~9b`UIv zgWw*7Z3n?(I0!QAa}X?sgCK`+9tXi<I0zEtbr39ugCJq9gJ3Zn1PO5*1dHJycniq8 z4uZvS5Ih2i-$Ae#4uT&-LdQX{7!HCD0nO(iSPTcjuL0;f2o}RZ@GsCmdmRLe;UGAK zLBb)AgJ3Zn1POB;1dHJy_*bBHTRq=5DTY_ziwMo@6<7?fK$dDAufSq>1v1L#6<7?f zKmxP90*l|M6(-hjipKR86~*uh<dFPc5#~?$6b6^_S&_Q8o|Ox6TSVmtNEi<?xRp3m zzl2$caYk^kPNmByg8=EtiwJKAFwEhZOiRVcWLDZ~grgt8g{K@|1ThVb`=Za_;vvSM z2p_<>Alisw3RR*;+ak;Xv;_W>4TR$#`Jr?Je+^Z6b0pHb?E_f2vD_w0{%=61fC{iO zWUtzYAFEjnQJ_{%)vIMc38+zD!L)*Mc?7Q|ro{7sC2t1>-H909ja~W03ksa)fQgKO z^NR{zcu^<cp?N7_-q2lL?O`cSc<Vm#37E+PIG2(=anb1bfjKO_q_9;(3cJzF>=8fB zN?P5Jg#|+Y0U|$j2w5n}QAj}1S^9E7&t#&yUQu$<KuFsRP82&L{4+?had<zcxiH(F z-Xls@71A+3x{j{8Ls(oE`o9OFluW_!koZ9$mu4Ue<h1Y)10{^WTX{F&$8`iNEhwNF zZ3a=XY?)@ffY>Wuk7U{fugm=x1g>P@0y7`{_Rns{7b$knOzk&ko8x5f2_P(G60~uj zz>i@q#x5(<<l?Ld6Dlo{k57STh#G#`hOM(<0p5wV%rDIC!iu&qhV?+jgf}8wf_*d( zPA0L735t6V)4RzLJk4K`N7GvY5A1Qg&MKO8)`f788=J2%rBk(NmP?W0Aonl_kv@zu z@$6yt_O}kU^q_BICu}|2v@YQT&smYs!QvsP%|diNg#o-)0#{&(R&7e;ahL60!)g-_ za#QSbb2>F%+gNYHe_FnjA^nq+@a7f;e^gYn7NwTeZ%fv$K+BJ=%!DQ4g016jrkX}g z6<c9=Vns}og+4-XMwPsP@|zkKTPfc^A_Ax9RReK>?U-K2$S*TeYC%rmmrE!1vWg{t zZ^Oj}*2M05Vm)Wm5~Y4;GkW?iT?blJm1?YH0W;9(>3hYw(dg-$JU1FWeQ%ow?JA2m z*&=awsA5es9tQjO6PZs!SBqs^A;Vge+qq(~+Pq;T*}JdrTCe?!e<rq+%{thoSXO~c zwI{_yR*J%ld?}V=zDsO!Q%ok`kdXzcw=xl{jj9OCcOy}SC(-`-65ZraBujI-n~0?m zAF#PmtY7Mh2J7M>CtC7(i5m?*1v&diI};(9TJOQwuP}b@U?iLxf$g_!CsFMN%zIiD z#RbDjlvZN9s%UpM!RPaaHSeGZ-XpfnA+U+Y!w-32u|cfIr1zY7T_IstBh2rRte@MT zOw+{!-w$~LtnLJC0O!TC#R);1_yhPNt)!cEqqz7NOA~^1?vpmGN;G$tBt$M?5~m6& ze}<YxC(_qqMy}vD!-@3sn5ljNr@iIFNw_;&KA?dNKc2w6?m>Y}$DV-SHz(kAk+z*l zk%QwR9i@vj^2&D531oUJ6^3-R_#b%Z>YHRL%VipLy)M%MuU8Y^){>;N=@<3x=)sdw zP}7R;0<~giP85xNC~z`Z9zefm&72}guVxHK94rA?Jy4?mg$UiAISqWfl<7)llVi<2 zoQ>Gl)DPc<5MN;py)XYT;xsqH+&<Vf(5WU*T3bLq;7qob?!c5*_uzIbZCDFLRzNu# z9!p!d_YPdIZo4`2p%K_wgE>+D#!({t_Qml?!{0^>NAcTyJ?6ggi)j|{!@F&C9MC1K zv%j}#pt%EXK7gx7+FXg!(}Rf>-hrFWCOmTHF)-MDZFkRg-C_v?Ev?O++nc&XJ_DVY zYLghaDN;8zXnUCkj4hQYjd(JWfJRX&0U*0fL2$R6cTzEByu&n9KV&3UFu?5-F5pdn zQ(J3OUtiPpVkLvk>V6gPIhWLeS)y*pb2R~7y)5U2>h?O`ui?FVTE*iP?)msn+Upsh ztA-3+%n&D{<RoT-p>16~+e8!Z_~_rXU2IeLJ$+5>t)khDz{7OUwrg6O2k^usv3oc_ zX@Ob^A}JftMnH2L7IOI8#pm@7-da;=NNHu)8DdHV6enj27~X+wF#m&DC<K%wFug*= z>oHx1hdACtjIDh;Xk&*M?Ck1lZHLm%obiOVH}zi&3`KR|`rcLo5EMFJbdj%gYX#b6 zu)^pjT$Zs$bl^r-ji9{aMMU{ZK~5S&oz#fh>QJywgo7=+5;nXql}uwK_fcSmg9#Vj ziv<DJ#&D3|*jPUAXb?;=>u@m6bbPN5UJ$7Rf}dUr2O9w_v$`D5hLK401M*5Fv7%*S zg0D#kK&{(EHC|Xo+zLEh%BmkEZ$a`RF0jZYXPx~gk&u+O5&OyjF07nb>as8=@z`VS zSqb*=e1Z)i&k|>6etcO1JrJt)olk&pWVe(Xdc+8ZD7LuZrXS(52{{YAM_>6Bq#-u8 z4VEuQ;5QTm4u19EdvwG&Tv1ehUL1(c!Ab1>b6Rrn1@wlwih~0H%;L=Tu<;IrZzIg+ z<t_y7#JOq)FM3-l`U1ia;LMAGNlNx6cCqM_`4$I$L*XEM9<gK)@l;RV&DPDwG7z;Y zpsVuazYjRy0P+%wi>c`Hg_77Br5Z{0Qp9L?Mv_vml;V&yR|;_0y3_N&3`9vobYKv{ z?mv!)clCzDZ+(~5-a)Ur@A6hG6CcER5(>rOOFRHmS?Eoz%mK$d?_{~oz+rfWW;g@S z_ny`QuYb9Iu8Vtz3oj;ZV~=^b;N7g8YOwOo)%?Dd^LkgHOAR|dP_&I;|Hx&LFMCCu zL5MX}ISEqO`v{)yBOI16cjWJ2iIYLT3zrk(&MEGjV!2k+m(dEg0LfN_c4u&RC$^aq zg-e(Rn;5GND9Y)TfDiy`l}!}qj!F<TxDgz%E`1$!N&C$hO8;}A5PW0$DcCUOpN|$S zu<#@Rx-c74yHjlByaD9(Jmj_PH$z^hFrmR>+q=QN9`gFNZ!xy~SKVT)?EkMV#tJ-M z&Wqk+Y>8@nB6#HC3+YQ1+;J?LvEx`YYsazZO~r3RZFhGZi>e*RR)nH|6#Nll3hfsh z_BjE*;J_#$ci}mMJL`4z3-stmb1p~!ix)Z6v~V<Y$Fb<g!{0yx|BhqPPXtND*>OzI z*l{c;bH_3LqLtmqCfD(L*5mrOWxjF(Rj*&l5ZJ&pYvzt)x_`$p-M8bI-r(*yrZ*bj z1(gyJoWf6pFXQ|Wrz|V;hA*-x*SF~Rgk*s&uV+1L$1%7Ub1388aZJzNaZJzJaZJzN zaZJzNaZJzNaZI0Q$1&aBact!r1fy$ukN#81x8?P$_vSJTk$JqH_1EMOc&NzndhVAS zPHIKA&+`t3L)MOCIT*u9>8!z<FzPietl;QF`T!!V9mn+HVulc;%d_s=aZDf0xgK%) zYRTf*g%m7y93$DtI4(Rb`oT%uUkDv2muLMZ{lfrQJC5o89mjNg$FZEx!^j>6UO--0 zb-X){{Uu`7I4;jRT%Kppmf7yDdghK}I^0`}IL36`TLCE{#C2~4<U&F$_f~zr9mjOI zw|*0|V<m78T)@3m&)RWJpKr%8eV!f1bhx+v8>qYPtvcLWSvwLQ_g3A%<CqTjR-$;_ zTXnd%{t$#*_f{S5tu$=cy;b+`IHtqB^&TYIY1q~P?^bHRL$e`r$1y6n3n0h26~3)M zL%Jse+)~coaqOE|AbCnc<c?!uOn1SvHAuZn#lDXnwX0Ye^z1mcAJI8~00a1QKORBy zWqJ|(2vJy~Z~IV0@XH9xw(f_xkrrs}IL4_)w>@y&TlMGlJHRb>9Me5Jj_IBq$MlRH z$8`UWW4d?8G5zJDDU=dZaJGA^?%#1t|3xti?z*??aBrn~$1L|&9qz3(=5pJ;Rfl`) z2LZ6%Td@(|5(>s~Z`I-6N--$+RvqrGWI?&N>b@Pv^o$+Hbhx*E7b#mT_f{S5t(2Q` zZ`I-6N=hF0Ry}LSF+FR?F&*x$?5AA!RvqrGpM{WjS?;Ym+*@A{n;mi8TXnd%vNzf- zaz2K%#P%2nL6+jFEVxliZzUb>tyF8i<=(1q(DG1&E$>zx-mMHWEWKOxj2*{xc(=+n zKm=*9!7t*H?|8TBE!uUGm~?K{;oQm~h)L&G9nP%`Th6Vzf5)*g#8|dhj2*`=Mg?Ju z!G{I4<Cs4Gj$``#JC5mi`GPdiSYd%FiCt=~t;lq|e8GMWw&LG$OrLMZG2Or8n2wh( zmVr^|$-Cp2j+ZZ_CJ6TI^QGhE3&N+lXP0L$FC8ym5Pks6**lKuc=@6p3?D*!i&xF8 z9mjOMe9;EzZT=m{^aXYt)A8~J3ExXb<i289qD5CFbi91Qi2E7g-*HUG%NLA#kW6}a z9Mkdg1tT72gn!2|9WP%n>QQ&cG2Or87>gp+Y3(@1LddYS<Jb;6yj&Dx$Fai*DjUQb zK6qJ!VFIi*JsmG=ycZyA$1&bYV%CmhY=y0G>@+@t6l909)avU#7@%n_bzkdX)<SNJ z_FX$&naKM$+{@}Cf&>TILFBQSwknZ8gB(1KaD+Brijd4PfK9P7b{xABap%}^Y&(gO zhIhv?rdw#ovE0lZ$8yz<WBERhBBNU4UQS+zB4dFa#|$_W{Vo~x>^Nq?p@=ZALy-Z8 zBEqs9iVQduF*C=Z$bdu9CIB3VA_ERZ9ROGkMFt#-b|UCH6u}wZcq1TQhaz~udv_c& z;865#px6#Y1{{iRN7!~KGT>0eu+O2$$lh_xm}kc^BWuSoBXh?w0}e%>0(sY=$bdr; zJ@ow!MFt#--Uul<4n+nWik=3V&!NbGLs1T%CtZgk0}e%fNauAZGUnNF%*fht%z#5t zK4@j_IA*}Nh<^F=`W6`r?>J`6x8s<x;ErR)d^?UA@GW9bjUC7M6O2Owa>p^b0UT|? z+6;`FkLA%AtR2U;<5uF(9K1V@-N*=zS!e{ZCI(1UUPN#oZi5^)%d}LKcb~5hAROU4 z6Fg;Q#g1bqaG&=iE*@eGis0`<4{{T+AKT~=QQ)awUa$NhaU}AE5VfSODLyIs05_lW zazdoAv*A%*K><s%mb2P8<yKyKMcDEe9R*X<AOe!7b@pUDaqP9~yt8d+^d}^+g%?TS zqIs4CiZ$kB&u3_Nmh2X*nB|Wkg#UxHWK?V*g_m&uBF=KGbC;~9bi%=1yAoo3*Ybp9 zbUmg;O64qhD1u+ik~3OdJc9V`ARxqzOoaKO_4tiu%om+&!+E*wJh#oTPr2DVKRQ$~ zF+Malj6Le-*)3kIHcH`|gtHX$d%uP?V*ku&)?)A?7kTGjS@x_y>!Ds$f}G&^0r={0 zr+z+Pj$@xm`H6?;H4Pn;wi9s!gWauWe{)Bx+{e-b>uu^A=!AnYoXD{l+ADo?vD&J6 zQuV_TX@0DLAFIE&3r@_S)Q?qMCs#XdTUS%N%m({#V%<07Vr=i(u@mdOPKxcV+k4>7 zzP+=5I~R7be#it77oiR7q-OK>Ug>(itq<FJc9^wX0dq*qhk>`l^s{61_mIhctR(vh zHFXVovJ$y&bW?NlAeO<gEN%7-4zy#@yq(_U{aAN)NWgEntEYXi6|1|9MrrX@i5uP8 z+nE);#EoWAyIPx&Cf^124)%ALN=%}_1(SXkw1rr7zzzc~J%e~%L4k{0u#Mf*i$(4% zWI&g?P`o9B_f&fNu%<lNjh6&^y3wIKX&BqrIxyIWmljH0a9ht{pLxw7^wib49j@8S z+$czT0RHh{3ah-WP%<U6t+g9#-_0;bETlWcyPDy!EiItT1<Kbk;L6|Gc0E?t9b5{l zv%49q`dDgrpjZ=cZO4l?Ep2rEmkQ{|+Pf1EFL|@6eGo$s2h_wxe9GNy!)rxNEiHXm zk9T7GyL#Yu5542E9b3Ob6Ii34Ke`bs_D+l<3v_tq!%2^{o25O(TpUX+SSN=}poO(= zloVE<Dg759@Lm?Be;cIJ)4xrubMa7fnz}mM;YA<|%LRDK7lvrs*48gBa`7p){-%yL zJpDMV$|}}1&;q{#A8gxzxY&iL0<|@DfdZNjS)y&*JH;g)l$L7-@$$i7H>yDwMr;nX z9yCdvZDw;1UOT{8xm#T7##w@DYsHSe;xZTBy0e$Bn>20f7ni$G^4ifUmD|<{k!|!x z^?RZ!{84RuaiLdKx=_4wVK!FPHa3tkZW)X>C^os#?Xb~4)n4|ScyYn(NA>N(K+`D} zfrEHwL&?9Z2XzAmCcR9m7s7%DQ5S5q8b4ZZQ!_jpOv^4PDF?IGk4d)&yq5&VNUt9g z7e21YOBEa|%-)@Fxu|m^SwZ^1G+J+3V?SSMfMbTJKMRU{<%UQN^CD5J>K&?nxa+%Y z$S%TH0or<{3AAD>QnA^^q)wG{i0Q?+VqOfD8wgzKM$1at+ut$Rwhi-u4hPDz;@p)* zHa_x=tgUW5^KEY$=xFW3Cq6S$VTY!+?M)^&H-Q$!)tS*Xb@iU;gg1I8;uf-srn4aW z4P#ptrl-qo_C<nK$4Xj!G33Oyv{pC9>Ljj%Ll@gS(dI@qbzRqVJzi=;KZ{-&vN2IT zM7xWi>NcC1F1)4G;YRd#bhZsti%u7ELn|90yw-$Ttn%t^5!bl!Xrs3GKs8o%W+N-E zb)(yw(3Geb=`eZfsK?VCnAhROu~xC&jigDN+pEnTolPd}zT1uI?qR#s+tk^|_xVJR z8)FYzI4n|~Pp>D^;_)@IT@kOzj_K%B!=OGl$|?}WC;DBmQlR|4j;wlkx!oxhO>t*) zNBcH0=m!F`O6+i9EQhKq^6j?k+!$r;Ry{(u$d})Cy3y9y2?A~Dl)XCS&Ia##7ey6P zs$JaRf^9v$#wzJ+-KbXd_2v#LdaxI7L*ilADNz^HCvL>U*#V46`6(&ic=eXRZT5Jz zsSiUsc8%8f)e84g9M<5}3u@d3|3T&=fjeoxY6L37+xoA=t7~e&DFKp=FrEW!7fe0K zPYX_@4#d<amRwK9K%o<5ZTF77UTkFPmT7}y4%qz|R4)C_<d#c;%L=c-P(AbmP8H#~ z$Kbl3_nqZUoKynL`@(V+VKNE#qR)Ffo}IAh#N>H7mAHn38<GhTxd69IEI<qZ-=QrL zLH!Ej%J62Rb7>>CE(wH1C*K?|5XRaN??M)aVPk}ssU#8rb~UYYsRqR8TBO_r5_&nd zez?jA;#n%EQv}N1jIX=pmTH%*P<X~tEvOp?G6e-D%#%5+jap3L$$Sa18I@nDUA+Pf zuFXZ{+9j8)*doCN9op|`Z;`ncI@ExmGfmM_@V5nDj4QSnm1V<Zp2{Y|Y+0}pJ6mJ( z+FTSK`Iaul>upy^PS!?AYnhD$;xf_lB5l3C)CjIwxu!@fjubA(Ox49wVk;mq6#jzc zB;k~8rKIQtSApAnBkabnmh5`~7b3@e6|WSsrc_*l!o(az6o;&>wKB4T>nushtSD+F zsf+wz1uXXhS&T&4O~_(Bm4!!fC0tsQtH^A#ur(XbmPo{JAyHTNx;N)Z{q35i&>Z9| za{ZBRAq-oid0vc5R=BJ$343gkg~)d;q@Y94SXds3wN_IWK(v5cLXX8~mnb}c#?-@a zsfq;~5m|erMJihkZGf6qp_YW5<|Wfs?AAoLTaz4DMQB8<Cd6N}^PD!oYEhP08LL(e z6+0iE<4!YoHH=P(0#&t_+D%{0S~S3gsxB9mYE*5pL)WTgOW8Qak+?+Cvn@#xEVXQ8 zZLw^tR8?Chf%#WR)V0NvXqZTOxevT_Qn%}CnNMWkd__i1wAu^ooXTLyYxC{2EA1+| zN);_+w{+e{MzxU_X0|44RLjSXU~LXLj42utAX~n*g?5jyE}$ClwNiFOwp$qqS*uU# z5ayN@BeH?^H8!gB>wRSkEdSg#G^19tLvoj7SHKNdLV?(L)NM{DWn+Jtzq!3!HNqP& zM!l>+8GUUn`b2-zx(PFWnA21Zwx!}~%Ti<~u?h;nt2OA>a8p|++xfVKAZ=?EoH^@4 z+Es=D8L3uV@l|i-r7RE@-(cxXcC`?YLHS_P(U%?YHgAS-LCIq03RwtGhjOK5IkHyK zoQ78%)eMr_;^Y9{U5nc4B#^u)4P52mdVp865l%QU78SRVZOUw9xA_1{jm>WFVOMr< zBdbOisvUq#!?wvr?525b!REE7<uvoC(@5z44kgF79}jYFCIQ8cVHF4UPa;q1>{jeD z(b)3bo?;1minnSj*jeP;y+%Q{F%~K-EAqEOZfjw+LTbR_Y5qz=(5=^2n187cXsLaf z+hs2ITFBKaD3~&@j_fhf3NKI<Q|a1nEiy(1D_L%<u&cazSoLvrr7}bm#w#**cy5av zkRn(cuv?m-tp%h~N(^O-FRbcvL`gB~G_sc1blLKF#Fj%uj@U8=2(BK<RCYdrN+Ac2 zl9a7-qFNb9(|;AlysqwYGs|Yktk>#Rr-K@hXAgCk_^m15NotR43+z!)p&}Bsg<fP6 zbqBJrMGj<{j~d8YgI@`dvMjMRwYFHQN>!IqyFM<<7Uy!+H<l^2t?)Oz7q|^GjT*yV zf7{D}ukIW8f@$A4_d+$!MMq>IT2&$DZ=ctC&D<R#`i8$=>$kfm$NF7EDEC=C>eYI; zDY)3v6bNm;mP}ULwNd$$#O@uEj<Dz<dju0!trY9V+M>>-YLF0#i}s~gtPK(!4;`|Z zb4AU^3Ej5#93_xkf7@rQg$3u?gCpGkYR5;AJS;+D3cs4B{Vab8e=rilqa^RvL??0o zah!jT^XE9}{?4y^J%=-(tqBwuU04|uZ^1>QH&Wo;xCB3hOXz;yeHNGSmv}jWOXRP4 z$L$j%VQe5Az}8p-yS;^jOT${EC>(rG<V*Ue_=lkWsXzccTo3AGu@=AcvKY7lUKj7f zDcK2r1$X$c5s-^`QP~tDn<6)xtr55`MnJB^B3`*5@ppm9*KtbX0qGAKN4-^aW2B46 zv4FNHT7QOwr*SG;F$^BWYxz2e<dL7+I1gG+A|W^6QncD}C*F#SqQ#F&oChrqt**kU zXiefyd>j`=i=R($Xx$0nQW<}@ki7Eh;pp;4oOk04!iVNEoVVfp9?oJ6aQ5K*CeHuF zNq--i=gK7R#C^DEUn1-zF2R4mCG<UB_zl1C3%Eqkc8e&6_ad^Kmo>PAF2O~Y6CN0K zi5z~6EvJi@0bWwL=##wL&&%)PqTPl|?(Mil?!hH|KQDiViy;-kSGR-zh|*g|*>G)G zONVg{My_8L%zbNkc_dh<g^k_elHlYufbI_$Mt~ie%lQ3>6}~H+XT_`Eec>fCye}Ls z1u-VQDs0H#M7YR8UFcV3wco;fgGFl2N<SCQx6-RD=E9{id{4L(6Ixp2t>HZWZVAWm z6L@Pl8hJ8&32uYm4oCU3G<>NqbeS)-(HA;fT!jyFlP6RXUcr#$D$u?x9K&5vFy{;5 zSaAPrIDZR-5zN`LG+bbn!xpV7*S_!y3IB*Cw~ttIxI4UB!oP@iV<}1%yzec~EDZ;j zBRZI`K~Xbb@F@!5T&S=nTo|083T@RbLS-Pk?A6y+<ip{-Ezl2SrA6M)>rZ*n)4cw8 zzDpn<ZP1gbMy#K03)RnH6}D~IgY!c;W!;N>6L%bJ3vDSbfi=8b!b_YNSta<&A>^n< zwnPFI*lz+iU?CXMKg=H;AF~Jr<?Sf%cJlJI$S5J<2t(n>HN3u+muv3FH4ym;uR8H_ zWMoc+=s83Q>6N@na7Y5KiM$o>kD+`wSmkS2uzU}K=^x=-QwZkSKLvYmCywHx{Q+UJ zKzs=-Sj;L;^MK6+;2x}XS=1{Rq8_*iE-J65rwl0v-bII%zr#hflzi!Fg=#fakMJ3b z-ob_FMaSR{^HH4N!ueC2mtq8Q6z8)zWgbg9OOW`TxM+9d68Hoz!O!9nI>EcY<>eo6 z34f25AK()CG4FoHyAU356>Id|QRQVvTNuvm3Tqv_LWkAi+=zBfSUVif?UX`pvDn_S z5Zl2wfbg9-zlBq>8F~SCVjVWM&@RO#P{#`(zdinYOTfg}Mfm9;EVtkj-`pIQ+xWz= zCrRwJH;Rn!k~-1WUa=Wrrts5qc3bjM&OrL_EujD9+-;gm&umK13~w4q4b6>hQl5Vm zwUzj*sNRHk=+bl37IYK+2`h)i*^`XdH`Z574_7EkehRN%QXiu#8~FQeg2UgY42G(! zH;qpYPt1*^6k0}f`e3?ZW@>6y7Scl8w7<3n-}V)@94IcUcwTvB2(OZqrD#!^z>F;s z71{&{cvGBg+MC1%aFgK3BKykcfO5S;)P16MN+9W<zb#oNh0WVWQlpi-1wM!Z`syBE zJsM5oqw{KuUqlWi)2Z3?2<{xvObUBG0KgBw5Dr4v77KSukhnR!wfYM~lTiuH|0%Xk zJNgyN=r6G>`1y;?`XuuIi1y)^l9{J~p4;=aE-PvE|Ac1rR}m8n`0FTZcKx+-t$8&i zoR#Z&*FX=Kp4(s2nrdIovS##;zM`LRvCkKOlO-D#&~tlsF};!uZ<^;-ipt?vaR}rS zud0Br+K|8*bg<iI*LRN5(yPYED>pWoXKbZxF2g8(y`wz&D(NdVxbs_xJ%BvV;g=H1 zId#5i`0~p$$InCj5~Qqwi%NdpRepgQw-7jUjOdIcogtz-CRBRBn9w`Q#E{Z~y8}!} zSq>vJ#+UNbpw8$LU*0`{fYJzVCTH<tmWrL7z{f3<Biv2cLC1~S2HJuo$K^nk4^<ei zUVb^YlO7!(!#xBm_XeK9LkEKDZC2c%Y>2`Q%>2CN%J;_P{%HTRI*aqExaaZsLEH68 z#Cz|x4%-gk(n;e`3fV8eIRZVLy(9A1R69p*H~6Y{AsG_$adEyJEBp+KXKg%x2_4uH zp$_bOuMW;G<qYP2rQ&XyPN(KZrYhui))gajd-ooEHEWBH*I#b5Js-cnL?N;`u^)ro zT_ImhLA;VWR3^*Xc8=i;Ej1(Kvs(76HvDnMVXs;aa&+*DQ1=_kFFE><gH6Q__Q0{X z9fg6-2Xi`fZ<BDAsUdJEdv2%y&*;M4;eg5w&G`IN9x$JZ>gvjx$|_8R!k%bO>Svy3 zOCNHERjEXoP4BOm!eXehQkuCMI&9*e{AbN)5v*8*)elQbq7c&9&_o4xBbiC#-i`cU zK0E%uzjz}kBG-$ZL;C)N#47A08(Q_Apw=IHA^1X&p%;Q53v0chkA?ptqV-$&p^`^6 zz?`TD!!jx$LaQFr0#zSD%!A=T^+&{9Mn0jcPife3GxTTL9Rd8xBUJTqz(RoC4w&L8 zRCPCCI$-YrOc(U+QAeoiT^cBdZrA=r{{D-G7utJ6&ug~=aUyhU;I05O#^(?`1q_Lc zRBj=0xt)bg@Hg_eQhqoV4tps5f1MFxOtWUbGo&$Tg*6ewf^SBo6@0T7M^w(H4$L|b ztWs-yL5VI;?olZ}M61GFEe_5@xe{M_v{Nwkd^n7^j0mqz5$7vdONT>G#_@+%7@kDH zSv~Ip^(QSHxGMoChHEw&_kQNV9D>?CxMI0J<M^r-rgKG5<2C#ETMGnt1>kTW+w9|M zfF^L#@`GAD8v&5#EGS&dfYXSpUy!zzHzCH-^1(55sACn-_E2ifN-lTqU}{MR%d|sp zU<_-blsp62-a!6Hsi@kx29RR_p3OGufRn%}aU9!FsmSxcAU!-5JV&-|&@Ih>WZT9n zKY|sae4KJ=yAkq>x^l)fL?vf_KPCHk8lbyyDjb+t#$n5O8{kUL*ewh@X;t9UNW=U% zC=PQjog7PXd#{BhCZB_Vdx#Ew0yWN&m`X*7U4(cge^TXPON?@2`R1!Bw!|nWRh!@v zlX2M6NC2)%dRYdB3T{UU6o<^K2BB=}KMm9e9Xi<(BPD9*E}YWpv;o{@Xvb=!+7P3p zI-1-A33?B^wYdvi;2-?3bi8v9TRYbPbS^sgErL$>BIrD@2s(X>p!3io=-_SGbC&D) zBIwY^>Rj^q+9K%i!&~Q~b8-=Mh898RiAB&ET?Cz{7D0!N;<?IoY7unUr=E+>=|#|a zn?uKXfXe8?Uke(nQVX@ucHL1ptUEE409X4spSEQq60!Ep*Zz<mdusO2s;B;EaF*S& zv!`bNoQL0_b`sa@gFST&XD-h9cm`Oor@jZL>ZxzU9XazK?1kC)s$RH((#krX2IOlv zReKoEiYI{W*z-75J4PHoDZBmoFk+P6twk-antP7jNETa!z7!72?$3v$UTJ;Z1NT0q zuOVcXEko+-|2X<$OO$<3UkRM&(ig?1^wkAyO4EN(Uu77SD1BX$U3kPljq~R?&!w*o zNUiimtM!wz_4QfA`1HlqZO?HK$*LBiFNO2#(N`F6lAKFl%@B^NUkmGN7s`1qeRZMy z=hD~J5c0Y7RRucd($@fR&ZV!v2G2fyaT>#O{2pi|7NIYN^Xt*q7+ya*m%cu*2z?zw zInSl9I~Jj@QB?7B>1$*W`Z}}-ef=AF_UVi3{hs4PpurDvoU8v*IKLi!eH|}>pG#jq zT7<stLOIW+FMdw&T=nancv3i*zNmMwg#KdT{_Fll=!?()N?%mc-y!5bNMqL`^rdjf z4>!!`w-4RJ?!RIHft1z1`^O3PvkY5q_DDg^9}kc`INrD%6C6rke_k#`OhtIE?7v#k zr>ORD86SDGjz_GL@`))ZpCYqR#3undj`LhPWnZ9ldKb#RA&byg0pXkh&!FZ!p!@LH z4?c(@E4_!aJ4(bqjq@?^eJ;Io{H)s57NoEWiaQ>5Ke!HHrFZXgslws)2Z+B5L|9K3 z8vDHfoGrkW`cg?DiG&Z54+yz%arl)Xe!fw*05Vk#Abg^Cakc_-96^O+k7*S@l;L{h zTqM)l7u&`X03h+aJli(L8YA=4N^qBb(8f-|gq4k*L2X=}g+v?U_cxV|{R8;PK4@dR z0aiA~_eQc0+SpS#&t+qjn6fb&8;Lvz?S~)9RQ7Yry!<>(d<f@U_CpOR`?(nji0vM> z{ak?@T>G(?dR@F5LF1&Y!Fjl`b*gZvF9<W^I3JyMAg$7A1`#Vro&I~ft<x?PirD^x zI^{>zluqC0kF-M67pv5{^u;fODSh$D877o*P+$C-n9|qiJQ7m%J-!Hi-Qnnqt*4)q zt*`3<cH8+|kivhA1M<`&^rdj9FMmFy_Dbuk_F7wC98J!zFMha7>FaWTfvgbq6+`NC z>5E^%Qu^ve3R=JapuYIkETym3?7}1dX`H(kp|3~JrY~!z{j}5tYhUF!=QGP2jv*E8 z$br-yN5}_>lXoAap5r<TV$Hm920>ZE!ZUA9?q`{KGZ#VUCA$=7p)<S)IxGUvV0E+t z-noZu;bV)Sqc4Kao<-0pTm+q|MbIf*1fBFE=)@L5=a@r>vg7Og{^J9HR7pCqc~^zZ zxymZ0*oBi?fE`-4s!~xq>{<Q8t@CLU9Lm~#pp$*D4Il1u+62rxp+aUHY{U6+I@Kmr zXO)uZ?3bU$FH;A#3kk|P*lr|%cdmAWUxQQa#^;cN?@juTuOi6xQZ@GDHTz)O!mrG! zw&fy!hijpe-#bwnMxJfVe;PQd?@j;{1@IhpP2n@xxmtkfvssj-_X9RgcFQm9u~rOu zS=M5;W6yv?B=odndBE{O;&&q62dQs!Q(5iU$InuV-IK|^DbTpXp))$Wdv0<MW+&ae ztWq4ZOM#fo<9w{wDd~K4RM~4d-jwB%BTv7gt#&@{@@zrsJUm-v|J+&1Zr93RW4Yq2 zuc}=B+E01fr6{u{uPunvK<ia>Sf~7lZN1-g%AW1I^6Hg6yQLv_Y?0oJ0iJ>1pq2#F zv~~Z%7KxufP%YAj{E=3Ot<5f!OSLwbKFX-MMC0r?KWU&^8;*A=DgVKigr7f9ElC^{ zvyZ0%Ite+emLz)>&zAEra8xUSl?Z!%IfZZ9S;uk2SAmFZZ6xe(067j07kXxVrL|*^ z3Kx1leGXhX9BS;mvIW9*PsKAe$g*VPu*G^@mWw#F-fWzw0VUpoQngwepveQhr?pI- zKo|+x9$MZJF_8DSna=@1)(fXLl>o;FiQfwvK1lt9o9b7}{gg{bwPSUKS-IbpmHQ2D zs$VJhr(8N#?w<BgL9*M-`o_#uHDJ&$pSt@qA#u)T_+;2{b0(d|q^e)#$R{zHO3qeR z(Nysfd#Po`bHkx5$`54b9#3RK>NhTe@-11EAIzi^Z^?wzZ&?K8+p;J>lu0LUw@l7+ zN`1#7D8D0%^21q_yD}m5I~PIu_AJVeX3~idWJ2m^7eSfN-9Brn`&uTQ_|8m7{h>ur z=19*^`LRqo@z-TS>Th2J<-4*dpUk8a-<1iezi$zg@6Dq8cqX0rNG7EIp+!)>FN^XM znRMd2Ga>cI7eSd%L4G+unMo%;kqN2i9IQ&UaP58|i}F*MbmG&Qkow0LLHWTf%Fkrd ziO*(2>YrQ$<%hB;pUR{YKadHjKeY(T4`)$+E|X6D=1fTa=|xaJo<;d|CY|`9Oi2Ap zi=g~y7UkzN>BMizgwzWs)xx&%H3!EY8^4rECw^Ndq(09{wJ_z!92}eS&ok-7-;oKa zk2$Fprpytezou{y<b%YIWl`Sfq*{=2{PxUL*n>BNa>L^eoyr;Pr-2kabetS-3GrjZ zzl4(^{NN~55i+D8Yb*$RVFjrK<Vg@gb{1qSAa^0C)*Z}Iyl;RwHER^JaIOW8J*yTF z<~VZ`B8HP=HbwbHD=z>n$OIsM4i5qHHN;bfDizm+dAJ-tO2{EE<Vivby^t5OQmqXE z2OPO{t^|ZY7jm7%A)cN4coyVMS&*ZE#F4@+>D_>+xq_HgicbTgW(I7?mmNBQXv>hE z689hfVBsjr=IHd??643|Il3VBzxi+oc^;5c_;qE-A-pSR)4XA1qIVxr<q^=z@td7{ zIS2lZRPk=*zVVr<$tnQdl5PQxJ?>Td8el3Mu2e^}Air-xh^JEB>w}p50HA3y+C%5T zEIMD8kc0>42|yl4D!1&<0AjZ!DzBHB$|)D~C}e?fxID)Iu}9P@RUIIwf#Xu%2FP(A zWDpR0l&exD0bvqVcW^Ie2*Kgz^<h9<?J(|PKoa;R4MpecfSmNz%I^Te0W^LroPXu5 zb)XKK%E$Hr$68=NGuS(3^a%$-<p1!cA_QCV2{i{BvnZDWV$VV-eyRa+`7uYaQPw0N z4rLSH7RFo0Ld}`mbP`C#QIpk@n4^2AuuIWK<mr~83phNKeDHk~8QOrWi(~q5h;RoW zc6+Ee{G^4$9|idf+}a}<1^K3h<Lcr?KpsR2H&qByCjl2{IUzVK4rfxbs4*mQwfq|3 zJP#a~jtPjG`M0Gp0|+axOZn}9ob;voARw%oE*)-LdcP0nbAUYLgM0&!2ONlrsykxU zCIBsIu#LCp7-21=V=1;RUvsr%ePg)LSFRV4%IzJ@(cy`ybV?j|QjvZL`=UOBUzg{l zfcSa71dt~j9CH+3#>PA(M@_B_>wv?G>dL2ELI`CkOl2B^t(R*XyChD+lWH#@><(Ny zZvx~|KwJ)w0P>U%@_s-b^FclZh<zyg`2rv@fEZGczp-%KymU-oJ&brauQEWM^Fhi1 zp(VI<YB=d7j~IFfxVq5@GLCD3L#UhAu$4+dOz4xxDx9u-W`Sdme-zJe1*8NxE{A_; z(P8R<7Q;0=_s;;w-)eouO6BtNw2#i(dFj09ONG8^GWiA|T1P-zkGt&L^EtU_9oU`` zcYYkw+3%xsaW)RO1q75&TdviWgR(u31RGOLra0}xxx&ibE$J*Eerdcv3+K26A=^sw zC%q7DT{eg4sgu5*`l2kH?}J8VYBz>uoZYXKyWC-~!{p=`zJh86$0tXp?EB=<&`fHd z9h%^#Y!+5}cE-LX81Ip~;i=(?@ig|ukbO!sK2<l1mp$gDg?Zih<aWI9?*W}N&kW|y z$%1@!rTnIwZt|29y<2OC+1A&zy%nF$Z13zw`-XRBXHsKeGc}{6VUA9+8^nvK_~yAc z!iHuhP>Xk!_%^&MoX6W-*!y$X9?hA6>P$dQCZHDCdMH{SE>1K$LU)9mjl~TWP!tS{ zC~a;7H#L(Q>4k=@+rCsXJ>^7nBqv8EQf_{ZJ5!<>Y%#<==nl9DlT(vcrhe2Gm7z># zPN(>)tT{6`IXk{L1(|YR5ila=eIeg2tNQ}<ystl_R7#EfA|90J*ObXOaz&+jFSov~ z4xcDNg1*6Sd{7eKFYIp}Z0W(L=DK>C@r_k{8V>|aP9Z}o&>@3ucwFfkADT(d98AQS z*!zJo1cwhK@s74^3QTiyFCgQ4r{`u;@~dSCaibH5m<gKGX<2X!3W~sY6g!f#-}V-j z`%}q1m7u@@f@+Tt%2q85K#g~YccW$u!+K%D<HKoL7VfWNPK}a-;XTq~u#>5oMVsUK zg^Bx#%%sw(nSCiqesA&(Q!{3IZU`^X&!+a8`%*LMacr1MF>;4M^T33s@Cq_M4@3<x zkY?l{78%Dm_&aFIEnY^HxxuRV&W14CQ?uKrM&>3`%0!!#PBN4(+beT7Mu(<a&H_7F z2JmDoWv-rwkn6(sU>TKZi(of)IB~^j=?*;g&P)wAjf_AxY3d^j;wUq-$v{OKovO^> zRS9a^!><jo1%;&}2!1N<llb^vyf<fZ8y2YmSw_n+<$cCxwWgU)4bM_t$%*l?$-UV8 zhUvPdk|UPEE9uI#nbklEP!78+DfsQavuVH@HrghOM~BqRWO5?g_|QcyY<vsr#;L2e zP`sZ5R0_9al=y~ijx5_8b_JXz8rTg!OpNOuFrAvfeG;l-7YTduXJlgNEB8=9l&^lH z?qwAgqm#aC`)4;h8~-j?a#ho-t=3lM4D%bY<S8SNqf!J|7@jY$1*xla)-#@IatYjL z29Cj6tq;c$i)37pwub+<_B{<7Gi9@pWxZ$y*?Ty3T@kXLk5E+Fl-rcbg3APK84_q4 z>@s=uA(2oUv)c@RGp?j)4b~h&zP4SVs0S8Q9jjrL4T85xRHioTVbttoz1)Us2^QV9 zlIAOET93N6D&?cF9d&RF+jYS3tf~XsV}IhBwTj0!Tac-IV9wMVMzQCmHuWfuPrcjh zaJG&Ob9&0$ZI24FM@p*2wG^w`A#Y!xcIz@nCz4~TUy=oP#4XKwo*IXY<y4cu1b}+0 z8H53dY7kxNdUNL^K^6&>Ae&V=V$Q;r{ARR_nWAPV>QA_E?OV82Q$3D{ws+upmfm94 Mu?jx9`1uh34=rG${{R30 literal 0 HcmV?d00001 From 6b3920f9e07948b907fc431373a3f9c5f20f4407 Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Sat, 2 Apr 2022 23:47:36 +0200 Subject: [PATCH 1509/2710] Make the intermediate gray/green levels available --- include/gamate.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/gamate.h b/include/gamate.h index 8b9790e39..bc6de3f98 100644 --- a/include/gamate.h +++ b/include/gamate.h @@ -145,6 +145,8 @@ /* constants for the conio implementation */ #define COLOR_BLACK 0x03 +#define COLOR_GRAY2 0x02 +#define COLOR_GRAY1 0x01 #define COLOR_WHITE 0x00 #define CH_HLINE 1 From 3d4772e1fe90754c02d5c22d6a8875adf8369a1a Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Sat, 2 Apr 2022 23:58:35 +0200 Subject: [PATCH 1510/2710] Remove executables --- util/atari/ataricvt.exe | Bin 65526 -> 0 bytes util/gamate/gamate-fixcart.exe | Bin 67781 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100755 util/atari/ataricvt.exe delete mode 100755 util/gamate/gamate-fixcart.exe diff --git a/util/atari/ataricvt.exe b/util/atari/ataricvt.exe deleted file mode 100755 index 78c628e3e6d1719bbbcbe18871bc5b58da420604..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65526 zcmeHw3t(Kub@tqSUg^quS+Zqp<CT%Yfc0L<GT5+sOQ2WuFouMzSJFxrmL+9(<p<Ej z#gO0viPMmVB>oc!<PS+mOIw<fM;kXUCk^dS(=>h27V;-8B(xzdq$K$h|KB%rpSzM} z2&7HJmG0e{GiT1soO9-JXU@#+zwU(a3n2oy&zuqBQT+0X$>-T0M-g1O>C=Vck-R^v zd{pcEv&zwZGwH}eYJNJEI1rgg%+1YbBIC(OYH=<yGZ*O?9Elv5pG?-QT9sdAk{;?5 zqE9Opm%XohTzpxG-|`9Zq_|KsG~X7X11W+VFi~vY^fPz#1I~PFxcMuuqwvA=#vK~V zbyN}{E+fca`$wXS1tEq=|ELg8+eB25e4Y^E2|8jzY><F+d)!I7XF;vWBoAj0es>s; zV%#iiR{DE|*jqE1$RrRH!)^1TfF9?H32~|>r4S!uS?X|;Rv~WJ6$6=?@x__h$(hL} z!T}J(FU9S;VhE{?DnJjFg9RbIG6l1qF-b3-roWg%*h^RLb(Hy=QTda+UH}g1Rd{h@ zvK;Bu1i(@jN8t$J&SHE_;w5M2fhc8j0yr$kX56kTCPZ6py(-9I=I>tI#H+&Xx?;p@ z*dZa$@5j%>xMy)+C_(lkM!aaf^q*RVp9qMO$G<5-_9I5TCdpxOJ>^;lynOuLi`#X@ zh}XPbLXPnn10M7DF$uCCG2(4+k^U>!;AaSU<lRFOWItlW+o8&fsw~8UN$-m`igd() zXF<k}f9Ke@pF8$!@##QS@!FVp`X<CV-BHDC^Os^02;<MwZ#hd?`Yd77X9;^f!oK>2 z6V`?NT(f)R*s~j$W?f92DSvDsCXPKDxb0NYt#3glj(@=p`36Gn*!8#yzhCT)$qW}E z*6|HhXa4%wv-<Hbvj|&Uko!d>CT{y-ri1|jMhR543?ZFwvd{qpx(XdD0Yk1rqIV^q zfBhTd*MDK^glr%GnB4f@BX?yk6y)Et757Q1r!sjKwa4#cc5XYBDL5XeI#d1?l}D8G z%$7UhK7rp8=I_Ji?`P#NN`6O2Rm92!Vn5xB#88$q<#z+a;gsUoOZ9`b704vTd&e89 zs-C_R0>16<i*9`aVz{IH9;9$bAChkmJP3@_?fPd7{uKD>J9ZRLUZ;=Uisu-m+P>{5 zwB~es-JSBMEP`SmA1OY5_14qvJr9F_r`!8Z$)BOe<<IDo@~3J8c~7#ysJM3x5jWf; ze<BadpN^yaImWvEAY7FH<8a>*J51-7=q#@ylfPbc+aJ=mDiVS3t3Z=wsiN=eMYmq& zW7t+RYy*Ae+sv?^5pz|Y8TO=%7d68^FT+~Qum@z=PBZMy(#Q0U7b6$^9SYo0&P0w6 z>5BgGp@KWgN&5H@a7gv|P}v>jBzSzN;*N6CIzA-z9Jzn`Ch+2Pdz6X<Z9m?A^Xc}M z7(A!jcS_A}j}<4#kGp~VSOZ=6*shasq4luq>3e+8m@ig5id>4<e_j`N9Ta!m{s25m z!lz?Ox-lu;<M~qJF(u=pM}fxc^if;JF(u=el5tGQxM%C>m=bVI2{@(%98&_0DFG`| zF(u%b5^zijIHm-A)Ggre|Ln|}<6lrBzHK8s&-?=(tY>!=A1^1rpSgellxJweamm7G zG6Xy#n`#NKI4*ho%mCn1C+-+3J1&|3Or7ZmAxh<$Qqx~>T&lw}&;L~6>&K-WpZTWg z4;+^Qe&$j5Pn<ygyl>lHNDi&VeRawaxGzcvs%jxPe(c$TV_)3x1v5*>p52D}9KB<- zst#;!IrgHj=+;x<%Ao-?4mYxz*OkXa{i)l&dc3Tv=<ZX<ENGn$k~GD4d=*o>pNjr; zF{!_J=Kihl6utXY(I-zG`{K6G7YOp_*o*$f^~aF{NJd$$jw3|`KXVh@;EU7+2mJ(4 zb-R%%t9p7AXvjG-^>OGi5<merAWKhAAOI!Ua5_ln8C>5x4tiEnK37u3a6e-J!)na& zE7L_DEl_rQb!N*+v;Di*{C&XueaQTM#Qc5K{5>Uqr%tFpwr9v*6&f?yXvUazNTTc~ zXU?z#P~a+pQ6pae42MouUif=v%Y!Ce_A@6=*!|(t*Zug+nWwME11!&+zw7;on5jSZ z;#)EsNWYJvSE|s(Z+*4?)EDmhBrsS7^YHWZHUxd|)YJ+1+4DcWf&Pb2oOovak39S# zLl@9=@}gThUVFU8fnN{@CXP%`PfWzq)%7)#v$G-|PbH^k(wSr`K81I<WPE0BY97$Z z<Wg|tvAezfvdGr%fw7At_4PFkHFc4Ox`z6??F}uFtzF5<`BWm(eq{O(-u_f@b;HHE zah9U96zt{Del5<+lgWQ)zAdF2fW3D8d>mk3z7F?>817ObhDSO^4nN;{{kkK^+Fn=x zwU3_uS!O-QB(Ginb2w0D7Dc;pSZFuv+WLY(;C2X^Q!c!p{M?x{ZzE1?p?;gMZB@{B z>`Oqgr-HKMZ8PJwoH}zxPET0zy58o0Yv5SW_s;w;w0^nubStT}8#0YP#Ca6>weEEG z%Vd^KCt{{E^yM>W-sp~($!Ek~ytXbIms2M!+ucYrf?v^I7#S_Bz;pRH9NRL^QN*$8 zz;e8^a3@~^ZqG}=-F6PRTh06y1NREP4?qsbd?=#-y;|Xhs|q8&&iq2X>kEZ}E@QcJ zSUOPfg)?U^1_|;hURZ`_dtm@x%6cd64G4b@zX-4My)nNq&~5C&v&ZO>&(Xpv1l(L0 zAYW#2KLPw8@o_Dew#CC!z?E}R=YabFa95H|73i>BUjc3uzcyd?NCg-y)LX$52CSU7 z=og)Gs2IO|&z%cSo~u$qaNhc`3l;<HD=xo-4LJh-EbbR^>u<u8B<?EQEx7w|zXA6o z?giX8<354=ByL_0;`fud{}lHVChV1_w;lu6iNlF_0(0#%86igCKaiN2WBN~tIL5p2 ziBzU8RtNw4wD`<{g~e1dzK}tYMVEgfF)L@7h4{K3qht(WF$&HkCiXF+_=W|WnZsat zE<wG1-cORaNfrJN2c}ZVq!8Z<OeZrF`x2!4AHf4Q-HFh`e0t_^{6G@0nQ56Xe|TZh z!i|JeNelURwJy-=n;B0fQb)wE`MQ&t{`twp*<?>*ZgMu+3T_fMl$xJtot#W1IV=Ac z{=WIdq!|YoT<dr_w<^7QK_~+a_kDHe@IYr@V}pEq0QuLhUuF(ya#;cW<56!ZG&vUq zoz8(1uLt)YguKISHwoK$<>3Rfk%P%pdS-rZ*XH_~y3LW~+{FCk%-r;@&10io)h(MN z=?s)NF*`q(+_m{gGQIiAEAn?H(&^-Z@!2C0#Ggy=+Ps*WyDUAi4^<>xePCuHHJ_fJ z%2ZFxAGj=$K2US8esknNVs2(Cna=EXCw4`CB(gJ;T1;np@dkU2#2Pm<8X~5X6N{;t z%n{`UAeDU6B9cf>4y9%e&desKlW8l=9ol&q5i=-pU-DpbHZsfSuFZ*b@7%%p{mInk zS}W4d+GQ#3taYcpv(_#I<L*Sk7ZRD7@tIj<Z{=cn(8(>8ft`tkh1r=25SpK}vs77K zJ-RO$>FvOh?d<#^tk_NxC7F)6up{Zkg@yT4CNedjid+Mf`9tZ*Zp;`YBGuJ4DHAC< zi51`8$z7XoN;cHh*GHSSSJyX1o2#RZ6HV2Lrm19gU0us$GMQ|gY@Dk5H5YqceqOep zH6M*l^^Gm#I}+7RlRJ=)sqx9`mSn?Zb)q2}t!rp#n%dErcxCd@a@KrA6Ae=hEy>2} zrpECd)zN6QzIr^dW1@PpdB<cl5lu8F8(UtXeALvRH7E5`&D)zNwl`O|)FtbyqYaHa zs&_Pvk5{)ePS#B|Pu5K)w#%GEWX*sEzI@Tt*PS&dEy=p6?TPw^>hY=ZM#v`FQVmHp zRYzN<CY$OK^-YN#QZ_0lJ8NB9DXT`UN7>Po)LL!H6`X>7?OKup#cB<`pzdVdhw46A z_u0D7*ZpbT*XzDr_k+5h)&=Sd>o?YS*ALfUTR&Bws=u-RmiphQf2h8&p{=2}VW{Ey zhRKHg4XK7B4R39@tKsg3_cwgF;g1_0Yxui{ryG9Q5NIrIj5O9X?riL6>~GxN7;oIy z_@>4i8&5R;uf_)&Ki>EUjh}1$YU6W_7e-kFu84L<`=TS!>!Q=qx#(i_=IC3a4@Lhd z`d88KL|=#oo64KEG)0?sHFY)J()626_cVQ|=_5^#G?h1B+I&m%Z#4gA^ZS}V)cmpL z-)nxn`CpoS+w-^IsutFlEc9zYivxTY;=GS-d{P_}@_k>z)Vq>Te5uq5KY`WTh#AHo z761NnE1XNd);pLJ9$agMb1gVGd>TUzHF)46ac=lmF)gLSxq6%%e(8EE{5gcn_gyoO zDt}L3X@zsOZHtS53jddGD}3*om^8&PqnqVxyxIz1K)5Tq89sq243)oA2#;Ek@mq%5 zC*FlA3fJJs75-oC{1ZqvC^VV5wV1|_wAXJx=b8LS^?}SH25-~Jxnyc)0^USwV&ATr z=9cD2^)&vcC&wezgAI}DskwQM*$&Ll!A%pS3|0iHrw-sfB{7|>o=wh8XZGzv{{T=5 zfQk7z4h}PEKr*SsL^1^jAQStmVP2L=PGsg&)#*%Xeh$fycvcuXnuP=wFm|QW3)SO` zQ&UNx&)k^Y6%`xF@<u*fs;&ouc##u9;>0t;_ZMq7Ldtp|yf~M}n^|%aqoIt@ec|*z z4t~5)J%}OfbVNQRT0ua%C+8Q(XOluN4#c}==M$Owh8Ce~A^9d)LE9XpYDe-D;18=* zCDfaUrrUl=U|k^Can0axhw$IE@m(@jV2X(_1vASMPxl2?o@M#sSkTEdHlT=s{t6}* zjK>#k(BL{*YCSB|&&`Ct0Zm0oJdXF`#4P#be~=```UVHO<3ppvBDj4W^P+O5AfLOa z9g#}$`kWzS->6B>2IKQnQ_WF8LVGLQWj?0xGE9G_@Yig=!nm>Y5J&{$X;V6(cdcdC z&kKY;?0*s=tK;!Q6Z^zR3Z`w(xOi|igG7iqd=9QKi{=;W_0Wg%Hef<5fVqMBMF=(Y zK$z4BIGC7SOp4G)gP%c!08%_K4!z2-q@j=bNd@d0>w~aGc#SG)yl=4m>iDS83yMAk zD#18}FtHyI!WXQ+63H0xwwY<Nz9JmeY3~w<&(ZQP+`L*^zXam@MR>c+K_GzHiNl8` z(*PJs5#p32yk+zj1mY@iJ$+EB!y?>bJO-L&!oL?kp;|niz%9$lwBwlrqAI*ozZ>-% z<;xt1<K04pugJ4X49EdYh=i|{5afV3`{ox@A{>(-U4afvCXR@3s{|n*#6n#b;Wi0D zUI;mo#1u!kU4qIK=#Y%pAwd-;mIQT5&;|vXNl&K1k}e60$Tk&f93IraEAu@ymq<;6 zD?|D8qac&%`S?CL?;*mk%Omh;S$t|Pb7Ucz79-?>(8}U7Y0mzL-Sh`E5u$v43|z^b zO=6=pFLXi+kL#V7khDZIQA!`Yc)bzf$q<<Z)=bSI4^w$pAxu9X;UYYJJ{fzv@RMxl zIt1`G>HFhwZ-NZcXn%wrzEOV%0D<^;BApcBn@X;rdIlij8{xfKB_i@a2Iwb%=aUa+ z*>{`|T9yd^?;#|DCE6quDi#PQefmTgWsN6OskwRN$EQ?Ti>EVq(H7xZpW(yUHy{D? zi{SCBuZ$2~LJ*CR^9d=y1lSyOW6q~b^#W1Z6wggS@bf<XvjxyIEsjQLAvrNKHItmQ zngO{)98RgU>ogNA!fD@{YLq6bfd#NQoteWNTzFBTwE#FVn@r3tE{O0UU;bZ%`c4fc zOE1m>>qeif9We{SN^+Bm*`dW3njnaq6-tkWh3aH-7H^;;{A<3lCqSrAi%%TPpidFu zqbkyngisFQU-#vap`#k=;UN)zz!$z7QT7yA+VG%nHKpI9S&%yMQC}$q+y@ZqV|;26 zeENjXcoy-V@D-qR(`+_=&sY3en0`DdAyeWJU;Yn)fJVblxl6&m6~b}}R(h3SX`bre zhv59%!Lr}>;t}MNHP(NED0H6opa}o(!!O&qC*Y78=u`e@Ex&9J(p|lMoy}3P5Pn`i zj@$;~;QtGyrY=GoerPpC;LU$ZH(G$H*#zs~i+N8WWmNwu%z%jSkEFK{8V$DoxMVL% ziH2Zyd`hYGPh@OVdTIC@{%I*SdIJP8Kfiwl(S?>z^^Q=+3Dh&6wvozQrNs|n>IDb^ zZQ~sPY=x>OlTd)Lwu+3|1`@OLtV6n%M>as^7RN={&}0^%Zq%s)O%@6|#kOpfCNl$l zT9isqtd%^5n9!v;=`Ybr$hU4NFDR8MN>Huw+5M_8YZU?Lk>o{#2v=ybwSpd@Crc-x zedlQf?5Fmq{DR5h^;*$Kz~sHMPM`$mYXyU7j3za!V-ev9R$~C#C-Uz>Tw=QvgdkJ! z6jo_GPVtHGX6-zRwKy&nuOPft`zeB{(d=0+(Mss0e`bCha=TPzK7bl7{o6FzD(J#b zh4nv#M{zub_B7fe3d0>*51Ip62uP(<E2S6y1F~jzDSt?dCngcxt(8_&Cq#%pdw^-` zUiss<`PM@J!ST7pG#U%i7vZ=0D%cN`d?uBd-yfe%u;SkCD`llb4io8#%na;Kq*#vo zib(^Fl^k(60l(o}%YLp(i%%yG97xD+5-t(G!&k)G0nsr%lOcEdwyg#yA-ohy7{1GQ zUKkmLoG{OroI_5~#f$LUeQTs72+qtOf=!HqzeB+npqChR9vHXaClvfJGS?hUs0_c; zS9}pNd=$k)$DNo}(BJeGZwK^t<TjZ>ZAh}c7U6fPyxz+MQ?88Mtq4CL;qIKgTLnDC zfHb&wXd-Q8=C@SPBg`a1oLs&~1$>qPjDwg~oO@Kz7q$34s{?tjYWyD)A&y2_6e-Si z%FjYbe^~juE&p0k{@e$A8F-ZrqCL3Jx1N3i%mt6|hkO;c0(4k}*xb-5iER`issvkM z(_i^q_?XYn4rh(o*S*h2)mmfflDOZ;q*W#!v*J~VReue)tUkg|u%9EWRcxlsO7sH) zpTZ+Voe#l;U#932Mo;g+$Y|?8duKc@0{+MS+YlB|nk(RyjjssWScF{x6hCPMd-?}E z#!xT)-z;Z5KbtjO517M$zF5c+ciy(u|AvsDJ>Jf%E91L&@dB)^@K!UyMVkln>$UZm zlhN2+&On3G3nIT!lYN%Z4kV^$CgS5W>4`;jruo~of)q2Vaoy=a;)eN@$Zt_FUBPDN z2-~4x1)8(OC6~GKFV|Kxv0^PbcaZB|`MWeD0zes3lB-|&ZJMzIfC^16W#zYP`MvON z(5#iI{0_|+2PC3Rachqv+okDmM@g$d1*4Gs9xd-EP_}A(YfFp#Ud^}-{%zW%@?WL= zbsBpLYG(>%>(}zg$EX4((Rkz!C{T+wo|Z~Xv_S>iDPa<8NI_y6-ch)Kmp`l-A3$;) z+CmDe2+Yu^mVZAWJsLJ9#bu_@4d!2il7O3gG*j;R*J`W24zxFD6Nj-#XHt8Ew)w{Z z9@h4uyjXt|`ES&WcEr0`ODxP-QrN5IeFnKds$fbA2?e{=q~9R&r?pjQK<jobYaKBE z1}$%E2^LJXg>-Upavrq+C9ya&s|t9xH&B-SfC{<?g2rpL8fxaxDd0&hvyVM3)G?Ww z!Yj4NPpgo7U3ww%7d6>aKOp?<u>D(*K|dR3*;`W=%(3VtaIT^<_$VjgzXDE)Lv@fa z6LEk6tU*))SrdIEDj&i>4X2;OW*L`)lF`h#zX5;f_wnE@E304lABB6>pW)#mMz8Q6 zgB(I*s8ipv&_klcRlV>+U`x_Z9En^6R!iEN$|qUx8v!YIPKZ=!t^=Ej)F^J%Mv2S9 zsWQoIWT7>PW7<tCqt%OBv=6O}RwsU4`|1*Co26=NMFq^vcRUE<0yE!oU0N#%onbH^ z!XLo=j}%S?98N(*70I;^kB+c5VnC&>)vWmv?PO6orcRhfHzIBEWrQfI2ZXtw1|$y< ztq#wCeCk@ADC$Qzneet{!e<apUVdch@C$E4cs0V8pe@ATLE@am+Q{EujY+JhP}EK6 z-cDe?GXg>0k6TldSX$PsmA2%pm6kngrFmzqH218PX3kn61vx9k2@QV&iiWgur-`)e zxhgGS&P{=idu~c|&rNB|PCIFKUmEI%R(A3I%U4wNW2En=!H;^;07I1iR?x+V@Gl}% zw+%gnR<PFg!0KZcaPmZc+*Ld9cEU+Y;VUj$0vyBW5ftCd1fGGzM;BThJPlVXBMMv; zg;t_jLefsInu33=jQdVe_z?(?nfOcG0aP0QJ4Fb;s5YYLVT4hiv6U4mQM><@Sic(D zU4hr_5!_?~N)J5)3%reQ9o`=`D_lF-0}Kt*MCk9!>Gr)-dJhT%Lj-yQ!l$Z-e-wWI zwFH`4ZF9IC73x=n!&jomy%D#y9@7VYWO2Bj9Jaz=Ar8OySBJy*VdwG`?#E3Xz9*N% z4dk#D{t9vU`@cFIz6*08U%_py34S}5!;R#y75;N__)}G?9qvTKbdhX_FTL~?Uo7*i znprDnsZ3@@EpsIgPb3#;wZnxmEPG*Ur5cmm)tFR(iKBx3-0N(ht6mk-37F_`8f0dI z>A|)1`rEPrFJ)owEK7Ek--ikCBe<VKUE=C)9lF9i?^q%)d(e^R9$e%tIR*+j%VEC$ z3aU?@>LZHjMyUO&?i*a^XPQ|<t6~Yv9!cdbJCZR;;#C_fM82obV|0v&<eH=ZFV;$G z-eFiC*H+}h9#;>yP9`U2xy-S3ZgF-NWG-fwaz|i>x!mT*a+}JxGj0pnOK*X_l^iC8 z;^xv@AXCVNFXfj@Z-E<2PfLik^cHy6TC(P1J#fEPU&nbUbA4<EQn@4$_}~66I5t=d zavw)z<>7)HafIJmcMCiaCMg2cx?A9*!Af8RMEC=MAAwV6-u=jslTP4cegh$w1|WX9 zzFGWscth44OK{ujuTylk;DU8!&shM)_TX@NJIDqZFZf${<Y~U~`T1E9{0=?7FxC<i zluwY^E11Pn^g+=Qx<v0rWA29l@NPXDUzq0@IJ7PA&k;%ZGgvcAW5yBl63GQjhDvb2 zKb@LiT!6)+2-Qf4?nkURYztHI^pOMONHkO{0}A{E!a(wf9Z)9&iv1Xl!tmIWYP}39 zlR;T2H^`t08RVqiD4`qtoM*_)98AjTNfC-laKt~CoJJkD!A%leCG(11fD`daEMaES zBGjytX<Pjs;C2bT*uN0RbR^!4Cz6v`g$uPv@Ff6)Bk^&RYk_kPp&b%_sUH(BZuH9} zcpJc8^vfl@nq)Ae3bv=`L};f3))3hN?vlV-nd>a#SID3`Gsv63l`^c}3UlbiWI%%q z$SPZ_3~Drky!6^+Skwx0=(Wp$CQLbSxf}}!8+q1EsO{QO%;?{-jyfMwEBfKPWKf>< z))ag*G;dq*Ry;Sl7T@=3`tOyZ`}5OCb9z2C1Gejr7+2v9TKLsmwb1{-cr*M@`qiAa z(Erd_3;(zM6E|?~9h#|sDxZ4(w10x_ik!dGKW$K}pY<!<*FRJG0=&;v%ud9Sl+gdA z{1|9#)kIKcdaQR~6ssM1RW%p0K#ny)-u88}h_Y1D8X)g;7hQ-P8|^)<!y<p9CM$38 zRRl?<<Zsf-*aQXlNYGIG2#gByN3^y3;YZ`C*4~XZimtWxUQkeUCo+h3%UpXmE?Ccn zvI2YU-H7TH=sx^vLBMEUO&`4bg|S_>LIJ<E_HJx9$PeAG>WHzuOg004x%O^sUr%4L zA8YSMi?I<@%0%#YkyiL99@X&6Hj8OvMO;)FJN56#gt<P>wRhu+JW^n*$2D}!MjBU2 z2y#G(TzfZS5`;WRBrcd6trApVg7AuJv`Gl^LL|BNZnR5KnF7hRccVjsDoiX%s#AhC zD3DrvH@YM&BC3awIbAab^((nHghg+;_HGR2(+_}a?cI1?9)U+I?6r4eB%gc`T7|Xx zZtRwjfF{C}(ID_8hdk@=#`t?>Vsib;m?)(WNpbnzm<*9$;0~AHjj6m3kU|Y}X-uC_ z-rg>Pq#FKhJb0VrgTD`VEmvo`l%yLs>i-u2znT*@ZYp8Tfmbf?88@p$ME;MVd>WP- zeDc8@`&box*8nbpA%vW7E=j}!2A1C+$1GvpbH=T{;5IBPY<m2yzNfJB%)97iV9|>m z8NlvEF9VBSq@A_sWnj_k^O%{;S@bfn=tTv~S@bfn=tUlR7QGBCda*j1i(Up6y%s<< zYthTVq8B^beOZfM1{S>t&tCL0u;@j&d(q3lq8F#hk9rop3@mzaf;DT=%fO-+^LlUA zqL+b1FA~mK^fIvM#egLiy$mdRF(_xz%fO-+1D06yGO*~yAlIUofkiK7=`peCxexjZ zAx3Kv%fKSmzoQHUnA86T7O{MohCFPWVZ6_`8Cnr>mZqoxh@ng}447n)H~`8d!+=S~ ze$a%}0ia0+AZ3I=;DB&t5Rmf;DNrUE223(Yqu6bdVZbD#6d5U_t}ShnVZbDV@#@Uw z)1)w9lJOSwB2l+Vh5?fdqP4h8G7OkxaJCi8=cY-90h0_inlTH)wi6~9jM<?~G7Okx z5CwW@n`9U;$!GwfKHDV2II1E+F=3>^x@o{9gB4+vd_N=%m}FFdrF&LcCK(27GT0>a zXcnkW7%<9UweJHAg8*feVZbV*4XHihTV+{g7%<DI0xzGGAS4F6j6R^iE+fbWLDu;H z;9S2`<Np$wF>Cx^Ate8AP><H&oG%v&K|YpU1YaZyowXhm5nK<y9LjdUAzLM%@{d}6 z*-h9c8OHPa4~p0(EePX<QnP)6HvCXB87&}q^Pkd<jzO7Z7%%4i4pK(1AWbriA4zW^ zS~-;T$0d)Tfao7AlMLf0GB)}GX_8_5w3KDuV4GwZX!_XXMJQvKWEe2XU;|fWnPeC+ z$sn(`LRD#!0V}mtWXv|pB*TD72H60WgGq(~lMH47>V_2r111?P6m$wE83s%;$TaAa zG|4bvk`YBr=#n(aFkq5FzA2Lo111@y1l6)kG7OkxkO1_^G|4bvl0gXc$TZ0?V3NW2 z7qoiJF9s<FOfrg~4tq_L3<D+^_aal1a!p+>_!}_EU=sn8jHeNo*e<~nWD1_bf_axT z$uMA&L9v#aCK<+7O`k$c)szSWHW~ENFKsXk*kmxT0n;YKfK7&M1VoV98Z5)3)V9em zIxy6e)KCn_1x6Y4f|@kSFkqBHziE_Vz$oLhpj{xs{E?jr`yXiE+flBs15;|_I^}08 zE&XBT|98v3R)i@pHg__7qX?4>TOG?!dYdhOg(zX0A(<tD1P9q1l(0scEbAt4J04*c z@C|TCN<LBO-hF8_`qxr3!((Wxe%(R}ivoN7ovZZW$Ne8cnBQEjg_jHk7i=s6*r$LJ zB#n@@N+14aIpYPX>3Pn|g7b>GYIhmsFY9zE2D(c6PXgq#TLvEkMDQO-==*qJoS{a? z7=r5$=^TUmxuCB9cF_?OLipt%<ahFAhp+g&7dW!?A^F^-669!IB}h~sUrEihh#%&$ z4DYfdiUQZFgL`c=Qdp)>u12!+L}060xW>qfFe4TOEG%3rVF3l3OwJ}@2UA#)Ukejy z-3=t}Iteat;^XzV@I2!p5G{6q@i@WjCAiE(g76LbJAq!|fvXrBWyl8Tfnx)JREtWr z66%-<#u~Q*MikJt15nUv2Wn$pu3+)@(ZS((U+>5$QOmT|94QvY;~j2rxdI3O94Xef zU)w#}HxeIe?HK93u2Ym4#`mCJC+kb&SC3pfGTPZ6AMNe$6a~e*0>#(D%3tf7KQu(k zh2kp%d7LT`TF=b%zWPyEGhyX4pkI%=6p*k61#49>T^JsU#cct92n5fMUp+R`IUFCs zyHaOIyrXrrRXpl1?g$jG!)^<0IGIkS4kjn-MR8X^e-m_2XuVw8Pc1HFR07>9XS$8s zAc}heI-{4Z>X=C%p#5{ZG=eVfRhdT5X%TJ|#a9LNOMr~N(?hv!CXp7!R|oRfqDT+> zRXrtQ1KS5QxU%A227uJ;|APYNl%%*1YKKxb5-mD{8JFbb7)sQ^<4%j;6s$T3xDY>k zOXV0GP2qrSdM5o1b>=b<OsQyi8dpZYuRjmWZNEmn5f1eZbPX#1*nqUpRuGLC-JPSO zJ;R-?9RsZppU(s-1V4QvoukT!^C_gyg&s7~cXtkt^bQWlbV7uYV0?Fdynk?PU^G73 z+Sb=O0t-fj$dXIp>GTeD4$BTB&!iNGo^=fO?(U2a4R?0+?m@JCGf3tl-Zj?OCk%pm z2YN^2oqO6lhenb12n;a+L~$GvGC!*bMj;5krgs2Y>xSA7UmKSNE_6l84K0#!M~7Qs z2sJv`-3_CrVi%~jeH1wrB?Ot&hk84J83!r2L@7f$_mIG7ykoGx73sGQbVw$M)iPRt zM_=zirzn%2o=zCg4~&j<wu^ECSenk^;eo+;*YIFJslqonEY?_oLxUr|dr-RevEkm) zYvZk>qr<&zW0*l%YhjG^^!K&3iVDj=h73w#Bgo%63)=05o@YVZdIw<2)hX5!&@(uA zwb(#c>u~pOv5~IMf!#yme7ZV1+s3+)k-jdmiT;sm2ij$R2X>1H0a@)wr9?vUa0s#- zGQ_WG9fksRi_KQZ5Y!-kb?3F>0uv%RA*$%>+ymJU4G*?=j*N&cRt#_&+wWWZAc3np z2gHShlZ7;9BcY23!0Zgw0rj92;@nD5`|i<rKfr@Sqa)&CLi*4!+K@{KfyyY}Uuwlb z;Z0G)CAJaV+6S_6rN8~HL!z2MI9#9_g1Uw~J6*6^!jPxVfl*OMH!@9kJ>8uH9dtLC z@PUz$k<KB}XnKdPp&X;8uN&2{Lp0F`epA71#gW?H%n;V94yX!wD7Kq1K{h^gO-FoW zxLvfkVBNz*61IadyRxAYwPUZ1rAXbZXxQ{|8Ih21PbZ2D>2#r~AWy{Q3{Z7~EOY9L z*vXLo);(_6E)iO?Q7gSacoQ1GQdcK09xScb^bk5|&1E213IjoQTG<AIr7#fuIN)vr z!BQ9q66Q7#EQNs}VL1kZr7#d=Vzz-`DGUS+0Bi%nQWyws0>Cs7EQNs}hYyZ{U?~g) zdjN482$sS?@HwPs8VHucKyV5umVsa?3<USXZy5-d!a$IIkAYw*3<NoZa~TMh!a$H9 zw}D_O3<L>t3<OJIAV`R9AXo|m!COJzF%T?;f#7jKyas}$Fc5q{BH9Lmr7#eD6lfj; z!BQ9qeg#0sK(G`Bf`5$u*=-<L3IoA$3=)pI3<OJIAV`>FAXo|m!9N47+nc%Hq!d<x zKZI{dtH4rN1+r92SOu2CDv&`QtH4rN1rnHR6<GQvtvI%cQ#6jXs3?V1Acy1+h#-H0 zPh)T?-xVo)^If?Z&JqgWN5XiKfm7m8{1Rp&Mj61tI)yIZ41A;~A0pTfV35Nz8JB{Q z(ag9D@Q2@v2X8sN@M9Vp?vmff!$pi<5j>1>LAV9O6pBQRwndNwXbJoW3kbtM=7-$% z{W(PCPLW8P`$w^GW13Bt{hLoGgNm>+WUbnWAE;RkQKVK*)z-3q_o-1|(Sm|<c?8=M zlj3>bs<(lHZU;>4!>R1z1qCj!!9>Qu`G*Q#d_gbw(7fo2UpG)+@5)k?@XmwcV^EWa zaj$0f#066`hZnK*lEhIB$v7VS#gB5L)^E?j0-^r^kssNFOq9eFIH2gP{;^Nb&P08) zqU4}~khTLkQP~l}pMaAs6Nfm>h1vG>eo?len1=b`%{0{=$KtZk|HT(3XNo4q#dm%A zR0B~Yr-i@gD`Nn5<z0s##}KT%sEBH`14PA|HJb4PLN9wGqG{*7A^)G?xtyN!;)TfX zNM;AVNU$$8e<+@5k1~6I1BBI#f;R4B_%Y1I*fkZJT$~j_LZv41^~v{bq6U9#!8Thk zA6=r7=>>U=SjkR?upX$8;5PWnaE|7YxdcuzL2-{@PeWo7Z}XQGQ1#Zq0(%DASw*YP zx)Ah7_Qu4zxHPI3?Q$tH=;xW)ATo?GCf+^bLnEDI9fRnb*a@5OHl3^Z!gE$6bg*~{ z>M{`>OJM-7mcVsbqE!bTxy)q;HnG|uUy+!oiZ3K*8e5v<u%DKjGNgTS0@mE3=))xq zl_<5WemiqcDO!8S`fOM%D%d*iW2^<#RIv++C)PzYS?J>gXI07b$iMjsv5WluFcCOC zuNsK+EW`9B27aD_QVMbcze*ahS5&Y1D+?~pGbeVp5bIfsmMHfco6*vD^=8nbs8nMm z3z&sQOW(^@Mx&)~Vr4X1`rf_-+7)KrWQ)X;r%E-=_$;#j5Rv&Nbfs9c3p{L$^Eg*5 zR>!ZKObi_yzS^z-;vb1Ed9xY1Db`fuQSXW|n-in>0#A&!nC}v`PK>$44OvN$dM6{X z+Ng@Kb{`^DyCNN0D$<SKNU}7SI+0i!@m?!8D(e@!f{}Ics2wcxd65&0d<y35@2o_G z%+wYa#vz6A|7?tyT_bR`mt`cXU59y3v!Xa)7>QC#EK?QjWGiewuiJDdS@2HLwg^ux zm4_d4z+!{gg6Ww>@rGi;u7sc8q1du`D3PX#2fiQiH^}N9z(#Rj7$}Vi>co3si?p6* z)-B?~yH>{p>)gjJSe<D9Tfp)GlQ?yV`4iME8j-#pGjc`08b+j_!c6rGxUC}}9*4Q3 zX#?uZvg7eBX&&UuHtg|vZF78X6KTts6e-vy(qWoNBduHm9bdM!QgJ|6i~qj6Hr^;> znI_Yq>o%G8xviS8TT7D8rC&0%dk}9%eoZU67t~7aIZ-t70pH{PDj)hibLJFYS~X)h zVq*!wnt>Aj83J@`=G6Dia>gsmB&OR3IUCW|Is)5;0JpFP-d%VMVVV;V?;q<M?NyT} zogE<WvnN~2cVkLxV65Ma8`ONEbr6n**V4}Zq0wuVbAU4+8iBnHm=oo16eYs%a1^gJ z{B6N-6u<4)V(uHim}WtK=xU?kfG%OZBSWpD?L9E_0bIS(=1Y{pK}@XBh1~SE;+3<2 zp0R<e2L`Vh5Uc3v=xp!pZ|xI>^z>q?O=7@Nq8trqdl?5ATP;yq@Ma_dEuvfkKz5CS zz_pexDVPenFby>V9*K4I@c4xD=oo43>TDezZoO8lr?*|XH_*+wqz=py4S=5;3FsSQ zInP(lYv|rYw|ZN}>lNI5{U_}$^w3m8`Yxo86H#&!Ge%!q-(Z_)rHilrt^J}+xd(?^ zyE{d@6M&cL!M3Y9+eh)nB(VoMKWTzG2_h*A&_zId7Z!5(+sF6y9y-k_G{iKM>kTj_ zJSrz=is;{sWHA4OStxiECosK2#A`8KhL<?H!N$(v-PEz8^!E1kb#_B&XU@2M{jDQc z14B_Ay>_UR0C<JYjV^Law^pQG0xb;J;<1J`q6ZFHHT=@WhX`{^L0%d|o#doCdQq@W z1pU#yF$+GNOr$ZA`w%dLetyWo#2><f0Bd8=&u==cU2-&tOfc!7zl!m=uMbub$;0CN z639<5RG3|k>o7`0`Y!WIB(bhzc9z>D1fZrfR*wzK2wR7@OIh{(%$uKi5$BoY5*hn! zOGG54Hez4y!-JI*OI;@B9A10O^DvP;yr1Ae%Cm%7i4U!bp$9_MKKVBw9NH)Oh8{75 zA&SK=nCXYOY{H!R-l?x2LmXn`*kHLi0>1%2aPX`9->D<S&J|hZ&5I4Oa<CU?|2!vi z@M-jh`6>s80m$IacV**F_-`l7%FDg*oW#8$g^k{(h&~Pf!?+6`23d0UMs~62levon zzX8Y|A!5~c@T7PO3Q!t4K9Yr~)d5|Vr*I2!{uDT?$Sxw&<O?OSBuX)o?8OMtPKFXv zuH@plR97-^!gT3{!)D4*Weg(N{YUZgu68)QX1lD;4tmvXmv>>A_z3R35GV#;;$f)D zayzxM2OLZ6$#RT=gRlzCG6r61pVl(lzZ^T)bKAp(jY)0nF^?6!gOyVaR_@x!?<v{a zyL^3W*zw+yHiEq)mvh|g6}AT<=1}EvkiywVuymi~u!N~2eH%+W?&n^(yZ}#5adwL3 zn@wL<E7$=fOAy*g|Gr)vGbM^wF%32`W*bnFHzWZ80Msg*D9xXeAV_c<a=^OuRn#Tz zS7RvskHtc8$MgbpnEWq93+7vX5&&J8g{hqs+c<9kemxI<t@+j9*VCBLV6jhuUs3Su zjo{ZW{D`r&KkpG^75`O7j1{@8oX`1)u~n+=3E`E88`4)Td*WC)>%_5e&WU5;8%y7c z+U}e<7FH*YtqX)d?EgMOimeR}2W<~GI50@aQ+Uq6Wo}nLPY-`6?^5)?*vO%#g~Qn= zj)gxO{8L2mo;Vi%n4eVa6UX$d6UXwhPaM-PSU-Sd@@=bUJ*t0GrYk2<_2$*|Asd)x z%|3BV_ntVWdrlnFw>u|}=`F_JgG!n3&*LY=%{bq~Ez8QZVT&xP^qu<s0a;+v>RHb@ zaSZ0g9Ll&)9Mf}89Mf}79Mf}89Mf}89Mf}89MhLLaZI;P99zE##^{<psQ*aj+q8Pt zhw|wM%Uo8^`s?xtJX&H~J&(u(C$$pG=6N^$0rSMMJdEKacQ#=sjM}D!6&!tBA4Pz9 z;+Q^BN*}y5dDcBAj_Ff**CI^cD6=?yJ{gM>$4E9bg9mSuzJCtx^C1Ie@~q#ee*ggU z#4+7_;+SroIF|P*DA{L$=aUas9ruZ2e}a%rw#l;&ljjuLGRwSG&pvTXhk0uW$C$Qx zD<EZrIOeT@oKJ{p-l{Kk;+PKe)~{i9tPJLX%b2(7IVX<kOPx5TFLC0S4)fN326e~0 zRfl;iYe&pw-l}^~9MfUmN))$ws}A$l?}3nG-m1gAm5S|{x9Z*#$8?yt-j67I3`-ke z-Ad{AXck1CI7R{Y0c0Du!nXA%i1&n#N6J|zj(rUaBu`3+JaH_D=`L8d`YCrQ*mtv| zb_6TEt`o-&Avo_nP=G)3;t?b_(+mFxiNX?n(}N=XpNC(zb>D+SYM^=I7^fPY_P{o8 z)t}ezL2h~CnC?1pOn03)re~cvrh88u)7>YI=|3)+M=3D{XPLL^-V?|4pO&)Vj(MvN z^H!>N#58Z!Vctq*uCmNqb(pul4*<)&6$jz1B4cdxRvqT8WP>tq)nVSsEGY9<-E-oY zo^|4w4)fN(N6Ze>yj6#JEBU6(TXmSXl9J23RnIwbOwT!SOow?Z`zgn~Rfl=&C&A>s zrg^Il^VT;)XD1!=RvqT8?2Yz`ypJF*v0Vy6kSTZy3ue^PT1kg_E5%x9nz!m(wF1;& z)4ElMbt}E}OY2rW>%=h~)~&J)5PmAG|1)?L+SaXlhjxu5CXHKl7`M_3V$!%(hjA<Y zrg5w8J#lOrA*Sw?;>58FQ9;;Z@MS@rIHoUs;+VeliDNo8UyueGD=aW2a7wLt6q%0A z7wqStE8Y{w^rcQ5)4eB->DYX+1{sB%+$WCd*nA-+L9pwbFCCjN2w&itU9PjdbZovL z{4g?Soj9gr^F=c<d=%|1wwjqIj_KHZ(FN%3-V?|4WlkK^vH608A7Do0xnfwNMOP(s zY`$Q?Lk#eqIHqIs1%n=8Cfz5F>DYY1fX_0(d*Yam%@+*%qI2Sy?mcmgMUmn(PaI<* zq~APoY`5iKD@t+V*fDsO4q}H7HfzvNfVrlpW3$G)05VS;qf-(yPaI<_Z2BY5;p0et zb~vlezV3ZKs@7^}TL+UC@>sOLx8hZZf`5ivRv+Of*v}54fX%d7i3A#C|8ww%sPpCU z$rOD!6f5h*vC9#*!ii)3Bt{zU6UP{Dxf93ovrin$uahT^6?!a+jCze{Ik^prjAc$7 zGhk5k>&&R@#4!T~MTEHxiVPSO5td_6WWb<^iP;841`LX70k92<3>Xyk0ALyv889f? z1FvIH1Y>yPO@O!!ieLfnK5@)|LD4&aVi^<}Fethke#@Z9fI$)c9)lty_rx({i4(_+ zoD;{4>=VZf7!-X1<Q;<|0|rI3(Dxb?889e%6S!m>6d5omdJ1SBgCYY4MR|CibPS3N z7!(a7p4*_vSmMMnBj?010|rHfpp|ptm;u`&+T|~4TVyPM;+V12iDSmHCyp6Qoj7K| zwun77P8{QpKMD@W6UXEMaMT6!FfblIRzPJiPaNxqQ{qq^+$WA*&j5~Ds06Ym`bbnh zg#RF%eh!;uTnfs4&ewb44{^@~Z&_J!;@D}p3!cEkMT}nI|4qn29wPPw3q2%?T-D2M zmG38xL_Qy^mb5jMPqN;}!{^*NAyUvj@Tj1uh^49ItTt|WlvhCsj{HSO!Pry?pUl%{ zYcifV)>?JJ*$y=NT@u*Iha_;p5=#Q58dI|7GqjUs`@{w&`F$|qUvZaBiLIpYBHTa3 zU4?b-vW?_U&>!0y6I-6ZR0uP=1=Awsa+W+0!Y^jY87wY*9^w567vg$G!hF#d{D!mU zi&i>tULHHoV>7H<9yZU94pq<2j89MCjQS-`ix(RW*jcvVF30@dFJO(>J2RTI7<`V4 zyi2bvyVjrezz`}yo`2>rY;|~2Ki@BBaL%Os#KZHNhK@<wgRs%DfzJ3ydrzl4$I=BG zY8@W!g@G}Q$gvnYByDrC+N!x?jld9TX)K=?Yh<VoM$Dizf>m5QRV!{+Uu(Ba2Ip{M z-8bN1^bhXdgLPgzMt^7jAk5kOdq?`Yu#5FWMhH0wU05fLxAzZ8)AP1r9P8N=Z{!M? zO=2kw><-h<jxjRGOpahB*-NOkZ_JgH$ajKU+uO&m431^#_~6)RHx|viX-z(Yb!VFd z?1uXWyT>}Qy31gc7Q0HE;Lf4moZwYXFpJvP*@`%Y4sd8}q$jS}B#Im`>Gwfe2t@~M zXP{$n4BHhHxWoZl*n>k@<jz3`bhQJ;E*b1o863u%^4I`22@DRPL$~8FbhvYLY#5ss z${ldm;Mj2dsxio^ueTqj*=w92aC#K>@yHZbc{?Fwa;B|w0BhgvP)97J+r<0YVX!SV zpuz#l?HDlS@9nx4tLru{nbkYcj#YguwcAjviFbBmqfJK_jsK+pMzHp7hr>!f-r7Be zA&3oX<sv@$9`C}oqSlU%VXVj7p(A~RFuRA`@#x3VuaE@R=$8&|!HT^dqR0XrmiaK! zBkgvn4-p5)6bshL!4pWK(g~8x8jef*1u%SwMHy)WcLqn=#AXK%HK(<&w;NUjvano$ zCx4-caZB4q#03sM**4PJ(}lMmJFBva^^JDGuD}Cp8x<Ei5LKYA);>@`^C3&r*54~G za-nowHHOUxV*{uLeHgLX)CSQc^>)SE2eIt{W90#Hu@h!8s;d(x_KHg!c;}uWZZ~Od z8xfZ}Q0BF#R|>bQ7cAT64H|I;ReOWFxN%`f)HqOVxrn#aHMVSL#&~2fc2Lwh!QIf& zVbxxa#IbQ9K7#7ohk>SDECR={XG8J7ZxD3@3MQ>g>X*ZU1W^|(v<5HQP-{CZ8{(#3 zkW)5hqZgBA57?K4jFH|5CN4a=VqWTCSP>uE1Cxs;Cy*6n7@0=vO>G?EmIfGRh~~4P z$SpTS+P)+brK<K&jlf*r$%gDAJQbj8NUA_5jv^I198Aho8HdE(7?&-Hp;7~Z%bj3Z zNry&y#=6=t4`}B=X;ze{vdG3q?#SBZgfrdl*3q8MVR3~6Rk3hFQ&)d$9EY1g3gXJ_ z;D)AVS8&W7ya!>+X+`T<5WR}gmV@c)a@#$D$f~U+9i9;8#L~1*C&cU|u7N=p+dI+a z1hw{E(|Rp7HKCtHuMFPAQ9VSrgP`g*o0&fBQtEL6MtXX?M(ahd1G%n~jS#jqp%$yO z20Fx5PB_}A{y~Vwtj=s?#nn!5S1XzlwUG{!r?yaC-9h{sY#i$p{Z1fNI^JI&-`(39 zhu#l3Ap?VKmxfw<hq<3m3_2m!poPOC)%gs$0?j<WPPQxJb-5uuy=oXV>;#zwBKyRM z16Bf*-`9~<51ZTVQc)H6wD)wki7_t_m~~>e17kT<U6H%nu5m(?-kS9Y-6A)??Qw$5 zu@e~D(JOm(@SP3bwGN6Zq!hcj&H-C;dYxI)*E>O-=<DOVDd@2w?1se4u3e%&h)-OP zm$Sndlk!tip7H9fzT2(wYU?nDbnF_<@vG?{B0J2%sT<VN2Kzy#B7u9TziI?3{cR)H zVC$M1a7uv8MiB1-mI<cr=cff{lZPYf6HAUIqp#QwGLL)5SuYl{G|RNW5gY7$3@V>? zXY$A;-zCLYVW=MXE~kp{-eYjx&%I~4mXk_=xi>7=5hkPXEc$}C;oS*~PK;iVSA%EJ zuP0(6bRL|mOn?Bub7`xDU%$+_Jh;Q?UEPACOMF4m%bnvz!l(?;6)-Uj3nREjMUenx zSJQe|Yd{QFB4#Z}=v6rS;R?f#cd5Ky;j4HvzV4P^u3fZF;Tfwnzit>v6ciY-K&DU` zHZy@Y^Hs!VP+^UB<vL`rG9Q7Jt1eo%Q-X_nv|rQSB2z84sR2P}oRZbZ-%flnuGGw^ zEE^{CR5BqZ%Yv0z$r?K<^HF%DTfQ3G+b)wisSK0W8Vd)+Wu&zw+7^Aa;or1=Q;Aj@ zDqf43stYB@)`4Rv{CR6h!Y<o-NzwLhKyC|-pcB4PX5R%kA1M~9a3zpU<>Dd~CSoI^ zILun5nULw-Y;sB_MOG_LUEl>PV3ixlV#F$LL=sylEWC;<=2Dv+LFTH3CD~vuM?zi= z2|Kda-6_xMZ_`YH<{@2??+tVcVOSC^aARDw&dK_!pi3uNh(bq0ih2Z<h2@c0m73B3 zqWPQ>x->qwM8TyKrW{_QDwb_TWbKg}sdPE86=K?eS`xIImuy|JS`*!BP4XNOp%F2g z5O2*cu-gE$MOkGgtXefx>_S+M+s)jSP&y%sRMlQ>HGK`0Xn>1VT`notDB4n+u35=e zvvG_fa+#!OX_6vXZt6&7scfrMRa+y0g_lXx%F;PBOr*Tl171C+TlKZV!!qQ2T~<oe z+ViZGDxk@gg;w14R+ZeKiWab1I(H+Z+Q{>>Ta!(y<zq)sna3PP6b%WGEnj7^)gx^7 zsRq1K@{Y(>D<dJ5`kW4C?p!x18)#2sqe{QUQzqZqKWsxYYBoD0cTsKy+<G|#h=WI+ z=5$Ur_Lq2@+e=j=yzN5N%W9O-)7GL-^fs-vnDG;J-gdO!)D+oCY=8i;wFcc99F0w~ zosXIbQnxn1n6oLMU11pDk!rP7zM9Rnlm<fMx0^DPT`d@7kUyAo^dtwo9Xr5WP%<^{ zGFb>$hjO{8IkHw!ohH`Zp&2B#(@p_-cQk639YN+rN#F__*9E+ijd08kF{wC>Y-@HS z+vWi%F}6FshgI3#jjS47sCEE64O%K2vYO_~q8*i}<y7;q-AL%(4kgdh9~W|dHUX6# z!z>Q!pG2P1*{xV*qOuh@J;f^a6t`&W*jW@>y+%>4G8QW>EAh5MPHSPdLTbR_YW~Us zkgZ!+n0~njXo`J}(`Bx8Ysi)B$e0SZjI1%yIyX=iQ_0$DEwV-i>sfBIup8WInDudE zjZ#Du#?3NzcutG#lPsw8SuKs<k^*8WAqH~U7gTjQq_`Ni8(EWWx@>t|Y|A4eM{HRG z1V@g{RBk%H8X*Udl9VNKqM8Xv)qfSnypHVhv&&}4q$_o^(?Ja=u!g#;yxLS~N43Va zMb;>&SP=<ZOfRvBIs;kgA_uZeM-61n!LI~JUY1#ssw|bFQq`s0s*h`O*|}ErjTK64 z>%0x`c}~MjrN*$=+xBwct9u5%$h2pid%hayq9Za9&8iUbw$GJrHFt)Hp5d=s`>n3Y z)_zA3sytecdbP!A3NCat1wvb@C6m>*GA!Sc*u8_(Ar?JgjbMVRm15nfEa_dX1_`04 z=w5wUrJv|{>5$Ew!)m@x=$5wUDTd^G+diWb8eCuvj^O_Jt`8!5Pz1z0el<<|N#QE~ zU?hZBNxC+L=ivS*?!UtQ|8Ud%onQBQ7Pn8^<SR1zures#f`>+HB;Pym@V_6Az(aI> z5|7~L_&AM6=+Eim@rj`z4iNU?Xe@!#-h%$sK`m4g^uIIoIsFs-gIE8A&xbr*3+l{b zBYv06qVGCbUA!B&%#Qy{aN)y7KrZ1!CUc?$$&@(B><YnjF$8iwCh?kOiN760zKUBC z_ep!uDC(`E`!MO^b<C%o6Rkf$#OH7;S`iE$#Ot{oMCOs7+IR`Ho<Kw%z@=z)!zFIP zL(zKtrP1Qh>I&S7)*M{oqj)G<{Ct9)uajUdh4Gim@vER2hAwZyeIIT=Y-ldQeLL=N z;V#7hXFu+*;r>tDwD*x|u1~-v9>hcY9AS^+;s0Aa0^j0;-|!2*fJX>zw+Lf+FG6ei z*n~&mB0O|C;ek<?$m7S@^7{A~<s*rQK1bIfK7Jh!?RGr!@5Uo^KOVt{`1k`n3@He1 z-S+<-N^dIV_N#+hI*6w~bnO~{{w=|^A%C$JH1-9{{Bu_UdMH>N0(NLI>-U4E|K4DM z8Loa023JY{!C<f)#2EF8pdo)_!4ea7xnGskArtQglhmRae=%5S##c!!2Fs=Y{$M#K zw6xGI!2<s73`X$dyCoP7JrTSJPX9N9Vg9TRUhMH*;_+?s_|6tq?ZK>d`O1Rp=##nf zb*~9V;41OweL5KNAIby^cY+!Iyq&9qMP@lH)~a$H46c*#51M@Ypvi~(f*U3LGiWzf zqg4I}-}3F%LH}9=`wKM)D)niPpa9N?2pfXM{uD)MiS8Uk2C{2jeQAY05G>dU`G8ki z=(qU%5g&S*&mS!H@D-vBdIHsm^|Nca`suI3u?_oizaO`(d!etv#lg1FR^#E@#K%Q^ zMEQ_af?E#3M=i87<g3Pc6L264{*e9w{^<CaMZhneQ*`a&<13*lLV_Xsf}yMUyoHae z9>UWX`gcBc;^)c0yb#gzh!W6i_>|y)1Y8xm1^dTPzU$2LZC|#0k08_E$Gr*GGO~RB zLAb;ncxdk-OcrP_%uW2Itm0G;=!_5M!CIe5y=FP;z6)TY@<!aMrF=ULR{jzX)lzcP z(>m2^s2<_>O?pR`qZgirIn0M}e;xOaa9_L{S;hSfZkfia-ZDhK3lHr+JbWL+!~aP< z0;lQv3qJl9kKniX_%0ryAJFv^x&nB?Rav9ujw&xZ+Tvh-Ur_7e6Edt1=7+Sag4(fQ zey?P5hnel2%Vpbt0|=kQ{dL?jn}HYL5}R?Tg?2F>z9v2ZdF}e|&4D<+F2YX-VYvmL z_~zlTJjN%2Gf5(^zg}d0m(&h6&x+0RGlrL*ecF<Tau(8mZwCDj&t2_eI#ruaP1H^% z#}}t-mE~V`V-5bQ>ua%xF1@&5LThPHSTiBc9%ZJvrMY@xqFPb%Qh4>EdNQh#fxTZX z4E}1fGE`q*J2N*iyEvItXj#GOBkAhY{Cq|h(nPF1)YyP;`wEK>WS3byH@~u&S3}B@ zwWv(UjKvY<s|5skQ#q+UkiY?ObI6fN_LWZo<$8svdsuCkK+=Edx@4*p4sV-GPSxxa z_#g`CD>uG+G?l<d=hYFv2pmtOlbQ4+TsA0`#F-BO@WU^JgAk6zf=e+Hj<aj4w=h&0 z6*2zHqU+S7pR<hK63c?WbheqFME<2{A6^#ETm^JFU#fPQQR{yhn$e$!O)TIqqO7^~ z*G#qH)#PwasxP?)x^n4qzD#Xud^O9O)jxWQ{!)wmQt@j|-mri!=h@lxN@loriLDeh z6R+YB$irS$0bjKtfj#J8x6Q6^h0)ThmXTL(Y_i1IO6gpdQv6~^d2%c1D>b<DYKS#} ze2K#^#gr9gUORE=rP<@>aefI>*1&U${*tTwGBs{FaP}C{9!c6mL}yH><bW}udz6VG zr44rmnBcM;MrMsK<)=aI(IvjTdl()i5jf^D*qEh4Gqd=(Wnz-23ESv!sAHf_NMc3~ zRQXbc@#>|Q;yCH4nQ6GeSa~*Z3NIb-s@<$`plk?&18V+~`O1A`@_e*kuFm46RNR;F z`a#`wbHwd-Ylo!=FzKXnD1jW3-yDG)&fXDuYpRtZj~jedyO1o7d2;bmbFA>QD4w<P zd>JyZI6@g%Znq51&gHDk{anSZT}USvC+Dl>an{w7iw6!Ic{OW`C$BGWw7pb*Uq&Hv za$>y(JEuavnv8fQWvEn^wQYsr3^g??;j?P?t2X?x$6>Ep3UYMtict3|%F7&m$ib${ z4$i=_jva-9Ed{eXba#_*mZ>4+Q1;w*|DV-`JHr8$8k+H?r#zrO)%Eo?4K;O`2!%dT zoz%|~@0K3qEUi+JvYXzYGlrR=ni{F*YUohQGx^V&&N*boB&>c|QW6D|rpITiaT-Y~ z4Yw2cKYVule}3^MQADm6+n2Qc35X3iNj9+Ioqla3@PhvZKYcIwKN8f20v`$faY!36 z@dIUF)Bv-C9tp}Ip9pMtO!L)!5Fw8Qef1v{i&^Oe>OP_2#Ld7TX!rQ=E3ZJ^M*#}} zb~j)uPl3Ao0Mh}x6EI!Swntroy0>ef9JpKiC;9tN8aA{K1)kS#1LADpHs8HICXCM^ zxC$5$7pT+%;!-OKi{P*1Z;kwLEDZKg`k$Q<Vp=n2zO%S7XZke}!GdpApy_?H8%NY+ zl7}-k1gq2<Hz?8M$+>FehiH|btHu5$DA(XCk5&xEUJ8fdrV?T66mh<UwR9NtWL^Ku z^uv+}I2)H-p#Hdt19K(dMDWZ-<Jr%=n1WxsA5SdTXI)=5{WPxdYkcNje_?`Pt^gdK zW1D+D1yBq(HQ%pA@yxxRH9;^f15OK`UPf9{u0@C`<s;MRP^YUQ?eXNa8C{;-!Pt@x zmTAXtU<hlX<UBn%-a!6HuBh6$36K*2o=rEJfD^+lactdCv6$z7LVQ>(xUO8?pjn#t z%GHexUIf!e{@CTx_QB_6bxq1qM8#)*KPC5i3LxsV!hwoqT^67D9S_B4e9kg8gAZM! zBQ-DijstfwjrGLRwaKbGJi!(J;ExsC`L*~%uCO#q;+S=ZTsd3a=?8t4AJX9mlZfrT zo`Uyw+{=}n*yQuQxRoAC^AY%*%i>QvK#D(8iTz0@oUYumGcR5SSaiA(vJ#!ch|1W0 zZFxFZp97tv=Rjxh9O&GB4s=){?Rtt4t+gBpu)JOm8Yd*3v+Iw-Vc8>ym!<Qj%D)o& z!?u?#u4;S#5ebp1_hQ@27FV^sk9z}6AKTst?v>i!`+=j{-s|DY)m65uY)w_Wx*eR# zy`BQ-ByOe8%eSjf07vOFalE7~J$ws7l)TJk3a*2?u6>C1Fz%J=yTYNoyy=kCD_P$u zulr%JrQ|h^#BzB^dHt&`FYL5l;-b7_xL1-F*{0;x2W)cFdr@8$=w_6>F3K%D!k@xT ztyxK4#fYuswGG%_QkJ~lgAk9rxL)bHjv(48+$+gT;rwFc6~x|vmE_e9=BWC$yu9|J zoGZzz4`p9TURQ$2E6EFoAg?H|oxoX1UcZApd*sCzQ`hwypz%2FmE@&xelhZz#)guW z<n`Wjkk?U^b0vA*gR-wAuPIdVmE_d|I>-{*pXJ*_wq+~H>ojP1<i!<S*Y$qTcoO$Y z@=`dz7<qja+j>`$*Z0psUiYG$E6Ix=h+9cscVT?ElDuX?XC-;v4V;za^?#9PB`*r; zFA>9gJp{;exL1;w!lAr)1Ug5-&Smvq5rELGm}3&}IKdjvJL6SvxJ8Zq*QI!6Rr30y zDj_0Pkp0X4s}p^SY7f`&B_`+kf?3jHg!tuqK@N)eI6$XxuO!nt6iUhTUX*=n4xujt z!nZ*6KFASX?!|ua5foX;JxH<TTu%XVFY>*T+)n{V$-M(H%z~QKtbUO13`*|q1u!Sc z?;^YoL@4*A-Y<yx0&v*Vas<IV;Q}Y>@Z&%V0bz^cK=|F5y(VQiaW&wFTyt=C0Wt)y z)H?gUK;?(>+JclzWL)cE=~xT^Qe7&~mX1MbR9adYT)7u@>}ja5(y=qBjT>{2sAK%1 zqSCRyMSgNG>exPjm5y;IK<-5ydlL6bI>t{JDjl=15y^E?fB4x$r9ZbWnV+YC^9_Wo zq(1>LQ0dRjh+#_BOv}=r^`PVEkF|JbBH`zH(AaB9aEaVl?|KS{@&Yrnu9qTHzT->% zSt2cxrA+^&+mdM?3Po)1MVaz5SxTnw_6C|h%8ONMC3*2%PfA{Vr-lk;U6dEU52fTa zwPdcJ0*($ot|YIcw!Byyy`(I8v43~k`CAdgd(8l{a1QcPIFy$+9a4Lx<<)q#C9gUp zwzRzXDJCVaOT7g$eUw)Ou~(88ziXuAHG~+{e(yzj@jFOLUY)sxNBC2?cb<d1xH(qU zuO;MV&Yd2WvY_m1X85{Zwf#k;Nj<V5P4~d(fkb<<A<eoI%bf4!s9R~m@-r}Y>Svib ziJb$T+pSWZg-*vg&^d7qbb8K#&OPTqhi^bD@#o%ipfhw1bRIkhI-}=6hpi3JP%Gh( zF8r96)dIZ9ro#a0p!a$&Ag3gq$ddE?@x>Z;?IMPosXz}+T~)D|I(vHWaO<VC2{vWz zLD0#)*oIH^*=+)5o!GN_FSg<Q+?Z+;>T^m-Z1&4f;g_-f8oxQ7d$HZ1hOg9a@cUk> z-S|Vq;7&O2^<{Xu0=Cjx0KXfi+LjBv9j-}^`CUM1R_Y75zh1R1F~mRtT$iN@Hv_zq zhO=Q|>?JkIl)G-><hK068f%e=sV!zZ7DWy{tya@xNXG+-a@^s8G=CCwOo-Wz@y&m^ zQtX>c97ux3VVllWX5Zr6ej&bMLoDreX1@`Xb-fhrwM$C2WnE?)-oWvuEQK6-dIfFb zM4ddFkS152&9d{Yf4Q>%7nCb{yIn4C?I#<oQvA)zINM{EZg8`I)@5lg-$+&2bBz&R zy|U-FG|V1bq<3L}XW-YbC6H<Ay7yv>!~^YBi}ZePpy^|4vlr!3txW}dxk|*9M;=nI zTALpDs7c<7qZA%!uUe95E)j%3h5G@!C0TwYi|=WQ&oGy<Rt%H)N|||`LU;vKShhA2 z_J06bK&F;^XMCllQ;hP-wq?n3sx>J)hZ;MtTtu#asXSAHEK4rVw^6QJWx0q$4bR1S z3eZP^r`qQwxawLH2P%6{a}_2AA0iTBt#^aGx6S0JQnnj*ZTbdccp%YRvmwn-fR2gt zbEV#rlltS?X+@7_Lz@5e6-u46E1r_N+e6i-<hGg34?3wUoCahti_V?dkm$~A$o6Nm z=`@`~tmY?dI<cu_B2!bx7Z`k&TuRyO2cOHKe8P@p^#!qPNb|EcWO>TZ=TN@ej%88q z$c8k(XhW8#{Qq(&pR{9Hl>4$F%@ua6<teiYc%^)AHl65DHl(@g94K=(!%O*rY&y}= zY)CWTmsPCg^UQa1FXacb=|uNrLz?-1u@dEi9Lf)6(}}(z8`AuSbD&(DL;2xsI?=t^ zkmkvApj?(i`H^fo(aCH`^TIh$uE?SMXf~bbzHCS{N4YEUnSGpBf}hQ%6P?Y5G@m#J z%8?w(r?Tlp7qTJECs(E%&1A=F`eHU@dzF)V3OmXX&I^MF^fK{<#mvOMMCx{=rRG-| z_5;Lt3^)5P{NO646Bm67vdM(79aE4RK<)$sLCS>e0)#SEl;cyd!9|#Q?~a%_R|ChI zmr!)BHz@<v#F+)eo1deA+>3C^OU2?E8ZRe5UnJzH8}bAp#cs$8Ik74Oz!4D_oy!3s z(4l;d#37!Q`b-YwrX0u}fK(v{dvlfN`-mes7BL~e4TyS^vLK%)j=TWTaGZ+duL&}L z{?^2CDF1T~<at0G9>(L>P0kJ-w8{9iswF9}<siuB7<LXFoJq~kMF4ct;-RRI1LDY{ zo3U^?9OJiZy^z~X2%(A_?*YWBaSHOkJvecG@Csjp_tN=f4&|>&NX(V`-vMH^5{fcU zUvtVuiXj#Vmy_o;fP4iIr(Bl;a*qdc1t3p&AXfpRW~eL)@@O|+4&}E2;>dzw9|k0b zU*=Bb@b>^YDs{txoC2g6wFy5a&SP|%mrumw%BJkFUE>(U^Wm&ZQT{hT)Lc`<r1LXC zVhD6fdLEok>T!Gn6T9QYQQ(<%IX-n@9%pB40BI(mC|^thxSW#i^g!a%N!i*Q_2h67 zI93~_=-h6`;*Wy7-$RFKd>N1v_;ql;VLF}E|HTsvpLCSPQ1fF}*(=cyT78pBs}>M7 zS83t20m2I9P`(C`2R*6Z0LUp1<Om>ldLVBD<Zc@hM|GMs^%+33r0)aHV-Ak_4a<9N z&J&YsgWi_*^EqjK6A-GnljrYC2%%P58qVeuBId#=<Y|3?Ik7eXauN`S&zAu5fCthl z=>UXF@o)f;i0M<12|ykO#G#WiV>xMk91v@4qhkFbAmluK3i2g07U}ym7{fp#v#);y z4xtX^ADXcoNEolzWx#Rrvzag4=H=5OaOF~N0gkukUS-B|C{KClR4z&9CQmH1#&d}q zfM{MmZ3|qvslUrZc~cG!=^XOVxiANZNqiJ^zJXt-?4L6!JEiy$Al{O$=fnms2dC47 z5UQjz=7wmS0r!@I{Z7Ku?_7|Ba|3A9B==#sz<IkGc_I<crAo|A<BN5scV=#C-f}0# z$5Y9JmT#5^=$KgPOv-W+j6FY&e|}<iCXGGJvdwJAXN6#)n^{~C@oQ%0`ms6F1zIu9 ztjw*L1!-nnb>odUy2^>xyR#?WHQd_YiBFt$_YR<C!2YIGavIr8rW7~ut$8-{*ffO3 z%pG7svm>Z!`5Ju3R~63OT1Df2VeO^1Y!$Ns_1S=iY(OKDbx|}wG8t>JnQk*V7mJ%; zQ51CP<Tj7&nNKArhae%-Ih;(S=k0)=#N6a;(n-%YREX6hTlDd~pu-Nr-29xGs28<E zB`BlC7n0o86i+SA$xl4X4WB&tOf0#1(kiR7S#8O!YABTwBfnk*A$lbh=k6&{qxMiW zH#Olnc|;f<8^FiE@U5wl&asX`d={v0upQsS!)J^@AkN7la0N1?w+qAQzM1h<B6TDd zWn}lqVBnoNoUpzrAIC?K0hu|lu$W59FU-KlP3bnVIA|`UWx-7-C<5OW>}1l~nI~!v zB@_E=K!F{pYHQ%j6)hA%jn(*Ok(hw?LWO50(y}bv3m>1KVh$$uOO3&)bMYM79Gxyt z+)E^tOea$Zlal;_#0~SQczSUhn;kRB1M!2&RC)%7+mVelpN=1%broJgW|n}ct{HJA zk6`&=h6A7@_!xL%GC8T#4O*pYQFk)aKR>xRn^Y>=s$`NSblG0T_hHNwR}<C94kq~A z2`{e#rXJzb-imemumRoSoGC73V<<I0(K<N^cBCnS9EdHy>{bGGXKKDCD|?DJ3$83m zwJ={8ZFVl0qZkZ6XXe2A`Lu`UGY1mW$v8L7OA#m%^XZwx@dHVWZSb*jP)a8!G8B^Z zAHeYh#O(vKO*L0Mm2tC`Ujn@f-rG8A<;m1doCTIl;j8GmT86%8c`aLBB6g*;)WrRb zCM8)bM6q$g%8{vr6AoLm4p)p*LGZOmJoh8h$yvA)5D@!9sG~O_PvwPn<P;FYis7qA zGCS-O7?&-rVpYA_l&aLAXp?6BmH|tVUzVV1Ma*}Sc$|w>9s%3hXtpLC7o1~W6=`#5 zY&AfxhKh-@8OYH^G;8b)?7FK6nePQ)FIC5B8kKG_0&98<J*L86vc`KGVHMTe6nm<# zyUkK6l5wRR?`5@VL#<)$up2X~ouq8Ok6FGW)7%_lYdO?}ZM>s_Djdg@fG_ez&Wt#% zUdM99dgxrWMrB7%?69p&&&T&!9d+*DMKyw^Y*fSGZl2X)C-JG-#I))vr1~vU8^8rQ zd*Rg<K;6{=r3XZ{Ne&0y>2b`RLqbK!&72&z=3q-<WHnSddX1jU8*%w6vwVxA`T!Sg T_vr5|?RUmj1HKw~^CA8}rG&Fa diff --git a/util/gamate/gamate-fixcart.exe b/util/gamate/gamate-fixcart.exe deleted file mode 100755 index 8d9d698683a9c262e463f92af677e136e301b674..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67781 zcmeIb3t$~bbvHhHpDV4bmnB<{?fBY}6DP4`J+2;3?BvRNC$c2;aGXF`UrAT8uq+8( z$&ZkNixY@z9;O5uAccgae*y%WmJ|Y{#U%mrNL!btke0MfXlNbC_hD#~h5+^V`_1h0 zUdfgr;olZk+Pynx&YU@O&Y8!~oSof%!!Z#QLWFRhIU~eF_~nt1*Rx*^Av%A}7xKk} zIe)eGA+77L)(-3*PsgTbrp9KHdt<}N$;qkN*ib4qGdCF<pNzHi^vCv2jif4<EXggm zNcXl1(WMoND?ZphB)%rZ>3|SViHkKu3#=EpKw5_rFi~ioG5nG{h5;wv8czPo;}Aj! zd^@eNT!(~+DO@IC8XVS-3QXgN0yreZDTj!PlGkHG<S~PU5UV`kbKTw#x+J~OQ8}AB zFpJ1%bX*E?vaA{T?-F8H<w$ZiiKqll7KLRN`8YjCLWtv)GYat~##iAaEz<QI36QBA znj4=O86T-58~{nLgaP+RAZAlsg?CXly*Np4nS$BZgrt{FGh9U(?c!bbaftklTLmG# zX`G~Y0Zz}6kmX3v3<D;0aR@gNoEPHs90`e+nwSEj)XgzOvfSk!B-|#1*tV%!732W< zy9+1rF2?CO62z<7EFsVD!OsIYCva|%Am@@GUc6d{k1xSb3`D7m+a<`kB#2ihB`j{F zekmO4_oEJqyh#wRzCqp}<~0F4@^`-kIhO?S8X9HzYU-dDcxCwgv;;Yq1o1Yj@}eq3 z&KA9|Iw<lc0X!Qrc;x$spE-T_xxy2n@<YoL;?xh3=0r<5+2$|RBoN1+Q$IRO+`pbB z?mK6R`zGSP{>U-=06*95=s*12D&|?05NAsB-k1=Fp9|f3yx^9%fQciII58!NIl8q_ z#or@#B_zWINOfdY`I+w=eojB~RTg2r2Xc>yCB&^S&K5Bu#3Z5e#$M#}Z5BF&NKc^? zMG(kM$n>45=U@AJ^TtO;kIDA&FDQ*4KKRbriv{KPT-n`{>hakeo7%~{$<D3EXY-DP z%FmSQibs?aB|F+u9s^#2T!D#G;~<9c862n9<K7m9{5`Y&{^<ljXVyPp{XS^@K5qR! zVf{X7{XT5{K4bl!vVKonzdx71qsP>r&5xyNaC@o~JV175N*@BIs~N@C`G%p&G8B&H zbo6!Q<)_{OgSz#*1-Cp2wI3}#jvS75K^)DY`zVEG{fh>F^4Ln8ID80K9w!dpg6kly zsCnbbvIKsro|Hc&RS@%${=y^IZaC505i4d?SC#zfO~{{tUinkLk-8>XV3ZZY(oZz6 z(&bMqCVyH^F9Y!KF<_JdKzloh`=f~iy!{GqOXF1Pw+e3k979WDF@(MjG+CB%hQ3vB z%M}5}ZLs22F;u$Iiu*5OE~&EOo|5U}R@|3mT%#3tuZ-Jb#l2aEnBS4YqovI0NN?z9 zDKk0Jt1J3Pdh?E!lJt>Y;E?K(-jbuGBzUB^>}V-z9qE<z3f!N16J&9sIZnex?K;wY z^NHrh1Og|Tx5%2*oTy4t9&FoQs^Q%o&fT53WAh5d^5)bZ1Yj|bmOTV6#cRK;i+Ao5 zM{m0q0j1#+38meH)b5d7squu;@u5RN<8k7UqvM3qaYE@hp>*7_;Y30yIH44rPzp{c z1t*k(6{&<$a6&0Kp%k1@3O?jj@Q?oM%$XyPC>7tj8i8m32^ZGuqlHIGDeq@5A^_#- zU3El?@Yz`c9+X{(gqIzWGJduj@X=#OdrOW;;Xhktg+Yi~dA8UJ=N*ye@a*%yQ26>0 zsmEu(ZG}Teq=KJ)2;pOFFYey53z|dgbaz7Cgzj$P4XSEBB!2k0yu**Kdc<Ps@N*l{ zzQm6XlvhE_jfY<f6x?zgQrX{)#^@%tZFiL>MD_7ozkZ~oyx{iZM@mWSM3|(hz9UPR z+dVY&Q-!4d(wTc25h!@y@q*7DKm6#%FXsu$=kQCxxs^wd14zbMt&Si^L_hl`+(RzX z7F_gWK-KM*6*-?802(+4Q=f#5A_Ej~6(fcbffB4b5hj$4;t!92o}E>|lT{(^pEZEt zX)$HK;L!$UwpVA?KWepuU$cH6vwokmexJ8~U$TA$+U{dkYdLz1?HSlBM`IRad3KR? zXrkn2XU?$0QQ&fdQ6paaY#w;DdExJw^(QU5?AMMRL;umQI^d%>=AF9mWl;GYT`PFk z(@019eN_o@v^m5q)*|wr4Is?+=$k6u?WQ3N$p?^5gv)`&<3u=S-C5>w>~0bu;x~VK z=8Ps0?^y-V-9$WmT)T(ATh9~-vF~w-3ntu5K$2<y7-<zDa9HqJNrmutXTaB6dF^-L zK)MEjqc{G%`uNu$IT~cDXI}!~wV_ih5WynvK#?Iw{b+)n=cyWkt?n^`d#^N)9eehh z|LFtKV2-0};K6%&^V`dBCGcAb%qxN6gJWaE!)Cgox^iS<LYU@EYHU0`o0>64@eH3b z$0tXp03Auq2M5KubaE_pMQnXK_S(_$iPVj`V&?K8F+4RlF)}$Do0?8dUJ<)wefknU z{<JqYUlH5T-aU9}th&0grm`wlQ&m%4)lkzI+t8L8nVLz)nh%cc$4r5WuBf>*JI#D_ z=7aq*w11oCm($6AXSvO18-V@x$d*6=pcOb*C2*Dq(bwP7Kl+(vH(!0j=YN08CAt53 z?bG|e%Q50_kN-UqfSTo@-P9+vn{{nvUMO@Ml+3wKo=<)0%$c_nqbXm%HLz_-IB@tY zKoJY2+i0b0JbvbkoW`=#wY@#~w$R~l;61sIG<~({L=&kr8#0eBq<IMVo4on#k=ZPm z56AxG?*XK{i0PX1V|*B`!g>E!&zz~Dq1t)39}Wh7lKYiMkYy9*7Z&23Q);C79B9Vy zOPT}uWw<V!#^&P*q_OM9LiBCihtC7|uJgdXWf8a=P%M^lH*l}wa~ouIIDjGsKcMBW zx+XssXwA*n+aAdewHXVQgXwvWJaXpDrTC?s%={8uoAW~m(gwERoJIU;{35<8@cP{R zP`j}c*AAmYUI+5a5pi>Vh;o_08GrQ5nK1EjER?q`!!qE?=aNO>{v3RqOE<I~mMI3h zar`=R*(nX6Ctq)ZOc-%)-X^}{mP4iZ?|a=c?eg~c4C)TTcX(i@0n^{;;&|^?0lpFE z7MvY8cj6quIg9fU&f9U`hw~wv$8kP}^KqO{;yi`(G|rcB3gnT8Glp{`P9BZ;ZNqs3 z&It?l>&|Z_2EM}wl4cTXHRH1=Bf?{;*_l*o5+Nb_5#E~|pXB}1!o>L59G;o2N>m|y zm1d4|^ji;O`k-cx@135TNtx5LEJ|B&I5{C#FNFA35F>C5c`?GCO%CrS5%IVU8=u5L zd@{+p@qCcvaWV&lD?^H>w$SMC#8f&3kk}g<1$)Ed_K?h4d>}MBJp&q}i2D%k=MeWt zp;7RUb~7}ZPNnvU{|N7Oco~jNPo>8Xn0r%zjgQH4y)EL95V7b?%0~VZtqpX##)oE- zGY7@*1lm)x+owk6CQ=>A$&ravlMtUJtaoN=xM^f$CdE~vzYTUxB}c3@z>w=ew6$0G zR1#GWG$o+zJ+E!;>u&9;t&vYV$ojX3R|1+`Rzg2`$P48PE89=lT^5{p9XNL)=G|8N zNZ6LE5A2<Y?Muz1$EPN@uB)!BS{F-A4o{7YPmXO}H#pE%(YP*_o`ta_C#EJ-Th|>- zrPp13RqmE#I-S}(G;uJ7^pokW>*i)AuSgH?hDoL?_KpwFOr@trXDf!M_Fj=p@2%Wd zy)L#lIXOO>O3&`_W_DF>EVgBKW-dM3i6_`a602RuWJs7!4bRPt&mL4k0A^BeoI@6= zk=~i{eR$3tOQr2NZ*1!UB%DQwyHfj76R`<ix2{X3J16%|?Mcn7+hix&vS~qzTQ+%f z-?GUm1k-Lo!Kah6<3r;UVDH?;@}W~&ih(W3>FJ5_VGx>{bXZzjQ8BPP73*xllKsTg zeyrG!5G9q4d9Y*Yx#{Vtnc3Lr)J*I;piJ#g$97=GAQ`Kua7bB5sS&LBcaCgb_oh@$ zRdsc|uA!p3E?!>|uN|(dNY;&}Dypg)M^dR&?MUrt)$e%3^UL$na8^EQ>#A!Thc+iG z>P9w$kI|u#ipEsUNJX+H9<QpYsT<u~n|x*XXgn()@np?tO=GIIqONvmb45HJudWzM zZXT`}soy*jPsWq=soKU@h>yzZvvN{BTHjDV+)!W9Se2@-h}YC^uGm~RG*r=8J5n`T zKT<W4Y>=G9WX*sD{_?7+t~x6xjj5{9hGcb3#n9+bEp(G=tbnHKD&mc!BXw2D>bm4+ zsT;+~mQ5b3lvQJs&)CtFY_i*ut2q1g+hbk{6e=HzysA5^K3etJs)wt-T=k8rZ&f{0 z_2a5vRE4VZt5;XISNBz4Up-oVQ}suyKT-Xs)nBOoa`iW=zg7K@)!(cBLG@3nSJk|^ z=1*%rUvs?XuWBBz`EJekYM!lmvE~;wp<1K1w6?N#OYJqaJ8MU4XKUYDd#v`uwfEOP zSo`O-U#<O{+9ztCuKhu+h%bqk#8<}G$2Y|{$9KiwAOFMnz41@S|1AD+{E_%K;@^q? zbNu`9=i)EMSJhS2wbl*RrRwJDZmoM?-Mw|6s{3r+PwE2odVO*I^7``nTkAhm|C9Qc z>jMqB4aE%?G^}e#G+fs(({NM6T@4R3e7oVPh95VaX$UpuG!`|kZoHzgwXv`9#>O`^ zzPIu5#(CxQzZ}SC9?ttX&PRm_A)ogpOg$3?#8--)_~L|!S#kVP>F+7E<GBRSv4VZ5 z`0#Q&o@?{j@naZrsKEml?X%;*j%g_s&(-|w_{&$?@w*T&pKC1!RQ{)~w&S__x!yxS z#s7P|9e;9JLfFrhB%$JKueIZ!LcAxr6+etA48>m+Tn8}Zca9R=1;l$_Z^t_k|4nZG z5}FMQO)|e6Q}eOr>V`$n&c`bD&dy=*HkO)9&5REtn4B5jy>-04u|8HYhX1jVp;$#v zO{`*ca*AWNy;GC8rwiIFX89{d_u{z#>jxDRsmZa~-CNN=05k)@@YEy+hqGxwW@nPa zsTte=GQ6h(?uE0d;n}H~iuCNv)FiSY@r*chG}B2eU~EmNrz?i$Mn_XXAHONJH7-_D z^0mBpOkEF!@t`Ea#4%?@;BS|&hL-hEbZ#<@C!y2`Mnkhg4@A?uIr#BI^)QC8V=;M= zXn7%dKQc8pG?5Z|VaRNom`cu8*E9-Uiwy5h&WJMlW+7K6QILROROKq6{!BF82}=Si zLgAL{diq*K@SUsQD^rC=nF({SSeAHtAgp+n<ukFMGh17OB8Ik?F|)8~&N-l-6|&TN zROX+}M6d=;MUiRZ*)=&qIR)<{iNUU(?sl_xpihJwR*)CPnSy-jl4c|-#v|@51^aqU zN;YgxjgHpG0g3Ed+bsDQ#lt7Vv-!W{gcZh3#rr`bY^E*kMBclctX~j{{88{J#4I(< z{lmM($MVLUz>v6aDWgP$9MY*Y%Ay6uN<H$?oK=|k3gOv)Y7R<`+#4k|0`?^*=29Z^ z@$eUsAcP$E4#BQwS<=WSf}{d*4R%4<BDzeK)a>eMzSbNNdS1cjK_zTL3B!AkAbQct ztC5XiZW|w?=*yyU{e;YSlAfQ@`lSpZ*F7TIAUOzyFq?2-|414DLm7feO(IyrU|z^n zkt-R3Q5_J`M&mJ1DG|Y4_=#-7<w=~ftjyb--7CtYTlCvezfr!~y(XS5MD(g0yTpL( z#RNw5Y6$@c#MwPHHzT463DOm4?@02Xh&D+O_#hVQvWRYz5b#3C!4wQT+AKjO3bbFQ zYmuNb3rm7pC1{lbji*P_5J{Va#blcbGmiG?KahNnP9|r@AeG)+hEb4_^pv?<&NGPU zYjOxYRAP=!&K{gjrA0rbAhZ&5Jk8k~v4i1|CL+|&%fOY=StC~4^E$`0=#buuiN}zs zR5M)65Q2ET5z&zdg$2=!PJ)NgoNExLUx;`S9lMZ%y-fs3HgW?Zcv|#>Chpfj2WhlF zLXY00zZ-y%Ih4d~P4rDgSJ6B}(C|$N-mEeaxt{>^Q@{(z3t0{v;f0<)BKW6>iD8MB z6HtjzG!@W?qbRGHnwgoL0zUy|%9@#;#e=qpP6Uhq#=ap5n3{u(Cjupe=n{ftgj`5S z9ww<KVH=YHU78n&%BFa77>b_?=nv<?&NLH^&~$2ed~`fDVmAYFi8wl=@~+Y>u!yDu z%PLTsxCRlx<9K`$b7;{yh1Lk*@I)#(IX5k$`vbY(0rf2!N|v6R0M<<bSvwLogq7q? zDrJjiPS-&ZH!GA5%(For6L<m@(ccM_JPATwnmN307JZ6{9#V;VC4_p2{%#<L0v*tx z?ENBoZy<U*lI+a0t>M1FQfj|LvmsUD<AGu-xC<cEM{{%za{5%jcn;~F4CJA7V{A75 zG*I|(4i-!#WK=vD$bAtAXf%S<yHxDkpe&DKWl$-W?#aR3h|awYBKx!-kD!38vB6_R z;q3_@iU@uNVcFI_i5qEw0Tq7E4$Jl+-PYOFiaE*Y==1s!a2qlq{}+laTZA>dXg5WW z&40>!v;d<MN!GuYa-K%csQz5(7tx=}U_LAwVtu)27fOkSU}9)gne@+OYE*jZ_#OR4 zF)ex(6frfmXB^3emP_-FQO8Ntvw*gm#$2wM`!V$bgpjuSC;%H^s+_3=xg`|LMv#y* zo>5)Pp%`Ftb3-C(Xp#k(8*M62lZAp!u`OGoNoHVAbJ7S3wW7z661Frc!$n#V<<<`4 z1*H;238pnPu}2kVxgr2NlCr1~(K1c8R<I-VWa$*F?*c84{nSpyFN7RjsTF(-Lf$3o z1WItBme+&EXhgF+77>kM)dis4BKHoYCAP;v2(lDUWfhwy)hD9sv<s-#LQ@)EUUY-@ z3q;eR*|S`x6*0*0_|y>ecDZ6cgc>fx8#UP~=psmi4c?DSp*e&0G~Oukqb*tongdw~ zXr)yvW)R`MvSzlaa6~hcBZzL-iYsUnBEp}Yz_e_y^yIC9<*<K9d~z<0#)9-k^zDH% z_QNDUJ2N}A$DByA;@%c0W~Bs&$@K8-IQ&keT8;z?Ndt|Q9C5f2zZY1}ey&_I$C7*Z zCS^B?I}tq^C}8b?>X@G;kaq+&E`=naycv`*`p&=wQ7{TUVV*HH2~N<(i|D%o%cLd< zo}JncpBM#yw}MZ@E-~udJ7mL;Dfj^}S07I*hTjt?yaWs%Lh;aXCnps2_XC9ufZhgf zQ?sZIDYn-l`d-EBUCeOC!^rK5@Vyf5<>Y-T;(kV?A-(;>X`7k%tEdObBw}1H|3F1N z%m}7IN;}ORD(X?q+--LtA5e||V<N)QD2pQ1xk80m2pNv5aJwB|E=o^-I53N#vO%;5 zcL!E7On|k(5dCPN>=u9yhzOe--b!MtMT927R@e%!Jsmw92(rUjX7zO+4A8WeS+*qZ z2{3EL#A9~4GO^@4xR=#O1PKmugtdgtv{i|IOyJYFL}>F7yuu-K3<#s6v%7zwsk^z= zG({+QGPn_OA!WG&LD~3<u!BX|RX_=nMz~{pPs<?cW$@djOc!Lcrt2YV_|FFmIpWUQ zxb*)bChUy2bE-=C>|HnwZ!0|240Dm>zT9eUWg+Co?s6O!l%5v3wVLd+gtj+1Ha=_) zji-m_(3$2oXn8YaRO8yv-sBsmW<+kIg6Rr2K1tYS1<TXiWhl86m3yVOl$jN3smXm@ zo66m)88HA#kds`Y%H5_Jn*k`(<g!t2vzFV5;3~~t3CeBJj3Gc`+9+S`Qe@jS{aq+& zIjCS1lG~x>90JM)jZbZ9k=v;mw<5ez8&TnFRJclGPeJRPLD{xzIh12u0aIu^a=R6% zQ5#B2BPLppf^Cs7iPfth2@TIETx84b(~J)zyB2MF2CE2UXh6%o2apa8FQ%E2DRhIm z*P$ek=1$Ghd+znxl5YX+b=vR&EQ(pwUZ<^l8NdVDZj=}6T_X4On$e7OH*3l1aa#+! zw45)3`$Gz*w2)M=TP*rDB6mz%at5?+(=yiGa^IlkY$$@`ur{4e&5cZ<7N8`yWF}Mr zZ}&&avhP(<cR<m2tX4zK+(`wzQ=8q*o)+eqni<6-wa87Yn7cf7A#&$5*;C&ug6yz^ z>%m}<jkD~nX$#g^^fKHop)mxgClR~~w-SfuAYm3_HzQbsXauq*21rz1L~snZK@OW` zS}IB=v(o+^!jaG5!c$h(pa?#M`z3#ci-#D4B6t{jhzz1mea}XZh$2t*!UKV$$slng zasfmwX={p4iayW}QeIAoly9xoT830BZqWva%fhKLNj5UjYQ$mfP3K0d7H`!)dTz8T z@w?jB=RsR1O<OC-BQxLkA&84CzUA7nRunnIXkJ7xg!vz-oHE?F1rg;W*W5SI&)SFq zm9|{7=S#FZ3raC{!aUlMXnkN-h=OWB$o&`~Ie=(YxQ66a*Q!LpcEnQ%Z(ksO9PyOp z$L5c}_*TSMAbuX&Li{5%&PlA*{Qb?C#CjS<U4!mT6emOsKlk9&)FhUcF>9sGJ8Pw7 z&RS{ySu4#uYo%GUR>(ol3UNXsn1rDruk2|eEpx6)3t4khpyQpJ(!6t1+Je(gn$wp? zw!<ph`1}<pD0mt92kF?O9yA~jWxr*-<3$AL5UV?m8A8ij?gZeau@yKuBG>fP4m_Q3 zl2QZ;3+4eQFnR>VH#380aTDMjS{+;sPb(wxJQRgiq}fW+?p!j8@N${<JtBWOlt(81 z4rd6JCior^!7r+fD2O4B_AJEfkrS=^{}Agp!@A4xxZRJFLO|(ZXAptE@vXx1qh`lz zcXj|n!!!~4`%>Nq-Xnwign=OfgCP-6)gw57aPWEpEvt4U+>8qK8zSMW(c|8P(_WA1 zf;=)LTulkv@vo4CKk%C);kzS3jN(jKHhf36gli~aJN^}t@Q;3TB>YayfqV_8y(aif zwuEabVLSd;l<?=vRXf~@hUpU74qtxxE52CfTQ##+&Sqw3$JH`d>cDVnnqE6x7{js` zrdBF2$z6d-1-K|G*sr|K2D<7|A)SPa4yQrJhnXMl=3jqXFyed`=FYNYxAsR^l6?^8 zF4QHi?pC2I%<+#Uaxw=UIo`oV&b(uwh`SsX*j`5S$x(eoA@33EJgNtJRs@-6#?Y!z z0y9TaISY<tERuNC#tKp3)CEkA5s_ST4F2tMNzFeD%i-FJT-f94;f9ga@C27RHcZY< zOn}U#WGQ<DW?0K@K`gf^zTI(K#94X^?OMxWQpB{D-a@naT=-I9x%3vgsrZD1*h_Dr z_b#VsF4aT#Xw_AmhqBhk#-WwVLZSaJ*oK=`_JZ6ekyr(|AV(Y#wAbB2_eM#I0JZKG z`gnLPFhU~wVZaaKRwwU4Fy!VF`b5w`%;h1dU#@Q!z6-&KJ;xH>xb$08oujyLRmo`^ zpu`^TD{ThZFw=$Kk4ugg7@C@z5aI7L5Qt(eF-iS|$zI+BmZJBG#>i!QI~wyK6o6;z z33GaiW8lcfoWDjQ5uC-ESsF8rn3qURV=`2NL&33`skv!*Jc>xAgy=z}GT~b|W2O)8 z9YUs&O)?@cNFW>}4>}Q5GNLeu;V7JgeYsZ4s1g~Kk#miVDw9!e?zIxSD#&?;+3|fT zIXx*NaS4tECsSjn;|{n^g3BeZcnfgY9KjOiY+6L>bqZ}m&<AXgz)OSECZ;3tWIUW2 z!75y&QGzc67!omuP_AjtIYc%~_~k)Nym-;Ckl>8~`_ZqI@CuT_j4H&Qo)nQS5?D!O z7r0ddH%YEDh+ie6s;nq~23O0tYCF!Qmyi)PG9sgFO){$1it^LjCgb9EoJ+4+M$}=- zfy?DsKv?~LR;_K<4`4?B=nC3=M6KvY-zlSV?5C#in_+ny!?)nN+Ozn+OVj_f7~Nlx zPMTv=Gvg4u{-ALUo}fig%~cEi&x|)C{8UiQX$$>x#&U$82@b!3bMLTB{qwoB^HafL zwkvY}PXB^It9~x1Y+wIk@e2r^E}IxOk(JQ@vh*-$Y|unlGCkPYJ%H7Yobt*`Ss>RN zAg5u4ETSxx^ajZJ(j^yzW23pFsZZpt)@0=^yoMktl-xC137eqsP6_I5?uS!BZojsC z55j0X)!MtUOwqO1-t+Pb-T?;DZdq&Z#ziZ+P?qPcy&G}84BbaiEeII(OBq6Nk1!f! zD-;UaYwt#bL3!vwRY#1564?v{<=VT^u#%y|AlBZEMq@Rol!)-3Ag|~lTq+QjZ5H#! zinu5@w&>rN8FPJ{YwyNYIi$c=k89|djWn*75O6?<TzfYX5(FM35*N&kCJD;3KzKwo zwn+$hA(C8sH<~4=M1kbmyU`*+Wfqns)ha=&6iBVT8*LI66BWH+PS=bc{c5faVbNQz zy&Ju`3<Ka<dpBN_L*St@XYJkS&!rrMR%Wlh8#^Q<q=_hX)B}7eA>aDDG4uhMnOwgz zhKm_OR$P8JMk16Kq{HQRV>IW(q)<sNjj;<U+uKB#RHL89g{MV6{2APD;_57yl62!H z{a*nHsyR{PO+~CZ2+HL><7SnK$bA{cr(vlfATQ)Nz^V|q4sa2UAm&1ANg@$4u>5`! zvxHTrjavfYjaXJ#bMkG0r}2WBf6>dpq8B?dfW3=e1{S?YJ7dwyz@pce3#o&QMK1%3 zUNo?*MK1%3UX+n<(aXT17ptSS=w)EhYZ_ED7QGBCda<M3ow4X;V9|^4%tbE)i(Z6# z7rhKDdU2ZkkZ;k;z@ir?STh#A3@mz)*Sj(ny$mdRk#N?cmw`nuM$EJ5Wnj^ZQCW*# z1{S>-G0&oxfkiJyc^174EP9cp$Hbb`9|`0`jrJmzfkmvJpbP|9)Bgq*u>zQeJm9!t zd@!&MRuOZTrf2|2p<FTyxMYwx0Lmr9fJ??6(1g|jpi2fIC4@lXfN*6HkP8XPQ!W_> zTrx<b(Cd<6z$K#?jFiyU=6A_3;F7^~RhA{CgaMa~x1bk^dtEXNxMUEm(c_X~z$JsT ztyn&{Trv!}WU$dp*bugzaLHiG7Uhy*z$JqyutUcs!+=Xh4G48PE*Zull?a9jCk@t3 z11=e?2m_S+eqq2RqYNV5xx{wKFyNEHCZR*KK~=(lQwFPj7ho6!D5neqUK!hv+mnGM zwpWG$w~TVg@+k>IX7J1C0t);x!fX&^jsFkM^}99x@4$>z<NqEpxlf=TEyF%<9u$HC zEV~H5L=@g`@}Y?EN`&Q5wgoq`RSKx^fE||IgyWK7Jg@&4`>q7B7G=CpY_(6Yh8Lxf z(E>s?|0(a$F({V|<E5NGM$YIJq)UeJQyI)hD~FQ4T=XCci2lKL$uNE<Q=>1CE*Zuz zidp7Wj!TAtrjJctj5>x(h5?rhHgM&(ONIfL49aQ)OqDJf@KRes!ECf$G7Pw6Pz*3R zxMUb`$sh|bH>@BSaLHhyU{i3(FyN9wp~0S{ONIfLj5t!lmZVFD0hbKQO}S(kaLFJg zn3nC5VZbGW1Yk#&ONIfL3_@T>mP>{Kmkd6?pw%P47^E0*$tZw1?2>f?C4fuDU0`ZN zuBpofe*-QVY$D*2aSCaP?NK~Img1=_xOYjH3<EA1RBN&2l3{Gn^iiZ#O^GnzlffXv z(g(wUPX>7nSw0yCd@^JsAi}iPa0xEOj!%Zsf}x(IhGIZ3aLQm1)TC2}0jCUxEvF0v zP8kn_cAkjxM|LLce_(y@Lb<*LOlgfPRG6)_3`bS?Cw6$bh*Do{?qvLG5hWS6I(C@! z*4g1QQN%Vw3QL3u4zoEZVvV#!)=pppE>RZnb-0m~0wUl0hNMv&Tu#f34x+94T^lJX z@|^W|uF^+O20w<lptV|yAO#93I9LL(&jTe)8WDSyKKkuarVG>3bKI2$_Yrf+juPr$ z*6Cslbd~m>0x00L3;{-n@IR5zk8r^_Lye9x1lRA^IR+1ML0$iJ!9f&41mz&)k8@>* zujIT7II{E+d0nG2<Y--GNYnryNv*tyA6<pZd!2+L&$H^_UE7T1m*^u)ku6?9osq3- z{xTycMn-H1M3}!^!a@o*lA1`t4<^4XcN1KsbuW;(D<nA2O^?Ul{0odrK(x>WnkK<3 zCAh>#g78(jTYz5XgR2y)Wy~trf$IZ+Tnmb|BHEY*#u~Q*#uU);15nTk7wTYMsbFUF zKu@39)!9El)DmqeM~eBT+2RG4DscF(kz;l9_3Z;){bp}dOMmALt)j><ehBlrv%1*4 zw*UJ6f!6KjK<D;Wkyp4iRCqnS{I#yB{k`;DD7-q9!>IzHb&QYgt{#9l6IM<``i-bd zAqlHduqFl5h2f)ExGfZnfZ&DZwS)bweP%zNm0DZOmZpIw@ldd^B~-WqZ(C@6sdQ>) zUuvXU6t;!*H^K&m*2$&)nYrm%l|j4WOm}c=L}5orXY!IIE#v9E^nY%aPSAy&ifQzm zHsM-Pcuh#Z49Ms^eU!J2C)1+v+EDIt6zPGWs;5M(Vf%mvS619B0FajbHz;6MNea7Q zb|_^n(c=A>aY>B~qC_p+?zZra;qrZe3-MoXSv!cEx@br?JtM)IDr*@Cu2gh9HI>uv zYcGIso3B$(guR{JZ9OVH*e(6D6+|OOd+WeJM_+4GOLr607qCDIA;?gF>wpSje+n7$ zpocB=9j$%+oju($p9o<jXzr*sxAzQo510c@+qzo&;lYR)S#qg7ox$GLKG|X9Sd>iI zSxaB%j#jg`ueGgnCz9n_QIZR@ZLq6L7zA~8cMh1XJDXd32atC^95Dezaa<CTpCtsN z5CmV>*$vj(VfKC3o3g<9o<!NP1v2eGUlSam2721t;nY;<0W~!bfKyRKkVU<>vjvzY zNa0QtGp2PX2@IGmJ=>d*e^Ymh6oObPlWlM5>g;Y6B{I;_3g`Lmf&SKJQAz+y)7sb9 z-D9@(^=v0qgnIhKGCQ)jr@wP2O4mHt*Ew*#*)%ZF*ST#FGbqb#jQ)=8UE7*OnH?Sk zgOXT3_*-E^+r7{WZ0NSmZn$!_ij@R(^z>XSR`IT>uYHGD&AZm_9lhd0-nF!D8*B$7 zU2S3w!~NHHH%orIcZe7P8STefiG<=|6KpwTFt2Osg8{XRb#_cI%)q?1^?GrU1(A{v z<qWm%gzkI$dYW7N`^9=Y1tg8v*_*ncfoog4#l?hEgmh*jp-TwB><rBT^`Hsr+(1zC zjsbH!z&*VK{o+zWy3jB>kjn^x$tc-hZl^%uEmh-AY$Uj;3uH}YzuTL7MFoMl@qj7` zYU^ul^}sd}2A*2G2SgR`!8GrydEeUI!uuKv-re8d-`Xo`tzhqU)MMNVwWAugh&qNK zZyLB`IMUkd8N*uD0#l(3MT3<RWX;~|TFm~wX3^+@wfFT(*k;0<%7#kRjCXBpLuzM5 z!%H7m5D6J~w4%t+P8*sE%0yhr2vsL2GPkaXEsWXTw9^aQDkAeXYQ^`2--O1m*we|2 z`--bIJ%SEe^Ee0=!$FXpR;GhsF&qRx3Aoomuow=4gn1nVi{T(hSeAoeF&qS$nd2Z> z3<p620LMYF7!HDK0I(bci{T*1;e+cSSPTcj4nVvPg2iwUJdOM;2f<=E2#x~9b`UIv zgWw*7Z3n?(I0!QAa}X?sgCK`+9tXi<I0zEtbr39ugCJq9gJ3Zn1PO5*1dHJycniq8 z4uZvS5Ih2i-$Ae#4uT&-LdQX{7!HCD0nO(iSPTcjuL0;f2o}RZ@GsCmdmRLe;UGAK zLBb)AgJ3Zn1POB;1dHJy_*bBHTRq=5DTY_ziwMo@6<7?fK$dDAufSq>1v1L#6<7?f zKmxP90*l|M6(-hjipKR86~*uh<dFPc5#~?$6b6^_S&_Q8o|Ox6TSVmtNEi<?xRp3m zzl2$caYk^kPNmByg8=EtiwJKAFwEhZOiRVcWLDZ~grgt8g{K@|1ThVb`=Za_;vvSM z2p_<>Alisw3RR*;+ak;Xv;_W>4TR$#`Jr?Je+^Z6b0pHb?E_f2vD_w0{%=61fC{iO zWUtzYAFEjnQJ_{%)vIMc38+zD!L)*Mc?7Q|ro{7sC2t1>-H909ja~W03ksa)fQgKO z^NR{zcu^<cp?N7_-q2lL?O`cSc<Vm#37E+PIG2(=anb1bfjKO_q_9;(3cJzF>=8fB zN?P5Jg#|+Y0U|$j2w5n}QAj}1S^9E7&t#&yUQu$<KuFsRP82&L{4+?had<zcxiH(F z-Xls@71A+3x{j{8Ls(oE`o9OFluW_!koZ9$mu4Ue<h1Y)10{^WTX{F&$8`iNEhwNF zZ3a=XY?)@ffY>Wuk7U{fugm=x1g>P@0y7`{_Rns{7b$knOzk&ko8x5f2_P(G60~uj zz>i@q#x5(<<l?Ld6Dlo{k57STh#G#`hOM(<0p5wV%rDIC!iu&qhV?+jgf}8wf_*d( zPA0L735t6V)4RzLJk4K`N7GvY5A1Qg&MKO8)`f788=J2%rBk(NmP?W0Aonl_kv@zu z@$6yt_O}kU^q_BICu}|2v@YQT&smYs!QvsP%|diNg#o-)0#{&(R&7e;ahL60!)g-_ za#QSbb2>F%+gNYHe_FnjA^nq+@a7f;e^gYn7NwTeZ%fv$K+BJ=%!DQ4g016jrkX}g z6<c9=Vns}og+4-XMwPsP@|zkKTPfc^A_Ax9RReK>?U-K2$S*TeYC%rmmrE!1vWg{t zZ^Oj}*2M05Vm)Wm5~Y4;GkW?iT?blJm1?YH0W;9(>3hYw(dg-$JU1FWeQ%ow?JA2m z*&=awsA5es9tQjO6PZs!SBqs^A;Vge+qq(~+Pq;T*}JdrTCe?!e<rq+%{thoSXO~c zwI{_yR*J%ld?}V=zDsO!Q%ok`kdXzcw=xl{jj9OCcOy}SC(-`-65ZraBujI-n~0?m zAF#PmtY7Mh2J7M>CtC7(i5m?*1v&diI};(9TJOQwuP}b@U?iLxf$g_!CsFMN%zIiD z#RbDjlvZN9s%UpM!RPaaHSeGZ-XpfnA+U+Y!w-32u|cfIr1zY7T_IstBh2rRte@MT zOw+{!-w$~LtnLJC0O!TC#R);1_yhPNt)!cEqqz7NOA~^1?vpmGN;G$tBt$M?5~m6& ze}<YxC(_qqMy}vD!-@3sn5ljNr@iIFNw_;&KA?dNKc2w6?m>Y}$DV-SHz(kAk+z*l zk%QwR9i@vj^2&D531oUJ6^3-R_#b%Z>YHRL%VipLy)M%MuU8Y^){>;N=@<3x=)sdw zP}7R;0<~giP85xNC~z`Z9zefm&72}guVxHK94rA?Jy4?mg$UiAISqWfl<7)llVi<2 zoQ>Gl)DPc<5MN;py)XYT;xsqH+&<Vf(5WU*T3bLq;7qob?!c5*_uzIbZCDFLRzNu# z9!p!d_YPdIZo4`2p%K_wgE>+D#!({t_Qml?!{0^>NAcTyJ?6ggi)j|{!@F&C9MC1K zv%j}#pt%EXK7gx7+FXg!(}Rf>-hrFWCOmTHF)-MDZFkRg-C_v?Ev?O++nc&XJ_DVY zYLghaDN;8zXnUCkj4hQYjd(JWfJRX&0U*0fL2$R6cTzEByu&n9KV&3UFu?5-F5pdn zQ(J3OUtiPpVkLvk>V6gPIhWLeS)y*pb2R~7y)5U2>h?O`ui?FVTE*iP?)msn+Upsh ztA-3+%n&D{<RoT-p>16~+e8!Z_~_rXU2IeLJ$+5>t)khDz{7OUwrg6O2k^usv3oc_ zX@Ob^A}JftMnH2L7IOI8#pm@7-da;=NNHu)8DdHV6enj27~X+wF#m&DC<K%wFug*= z>oHx1hdACtjIDh;Xk&*M?Ck1lZHLm%obiOVH}zi&3`KR|`rcLo5EMFJbdj%gYX#b6 zu)^pjT$Zs$bl^r-ji9{aMMU{ZK~5S&oz#fh>QJywgo7=+5;nXql}uwK_fcSmg9#Vj ziv<DJ#&D3|*jPUAXb?;=>u@m6bbPN5UJ$7Rf}dUr2O9w_v$`D5hLK401M*5Fv7%*S zg0D#kK&{(EHC|Xo+zLEh%BmkEZ$a`RF0jZYXPx~gk&u+O5&OyjF07nb>as8=@z`VS zSqb*=e1Z)i&k|>6etcO1JrJt)olk&pWVe(Xdc+8ZD7LuZrXS(52{{YAM_>6Bq#-u8 z4VEuQ;5QTm4u19EdvwG&Tv1ehUL1(c!Ab1>b6Rrn1@wlwih~0H%;L=Tu<;IrZzIg+ z<t_y7#JOq)FM3-l`U1ia;LMAGNlNx6cCqM_`4$I$L*XEM9<gK)@l;RV&DPDwG7z;Y zpsVuazYjRy0P+%wi>c`Hg_77Br5Z{0Qp9L?Mv_vml;V&yR|;_0y3_N&3`9vobYKv{ z?mv!)clCzDZ+(~5-a)Ur@A6hG6CcER5(>rOOFRHmS?Eoz%mK$d?_{~oz+rfWW;g@S z_ny`QuYb9Iu8Vtz3oj;ZV~=^b;N7g8YOwOo)%?Dd^LkgHOAR|dP_&I;|Hx&LFMCCu zL5MX}ISEqO`v{)yBOI16cjWJ2iIYLT3zrk(&MEGjV!2k+m(dEg0LfN_c4u&RC$^aq zg-e(Rn;5GND9Y)TfDiy`l}!}qj!F<TxDgz%E`1$!N&C$hO8;}A5PW0$DcCUOpN|$S zu<#@Rx-c74yHjlByaD9(Jmj_PH$z^hFrmR>+q=QN9`gFNZ!xy~SKVT)?EkMV#tJ-M z&Wqk+Y>8@nB6#HC3+YQ1+;J?LvEx`YYsazZO~r3RZFhGZi>e*RR)nH|6#Nll3hfsh z_BjE*;J_#$ci}mMJL`4z3-stmb1p~!ix)Z6v~V<Y$Fb<g!{0yx|BhqPPXtND*>OzI z*l{c;bH_3LqLtmqCfD(L*5mrOWxjF(Rj*&l5ZJ&pYvzt)x_`$p-M8bI-r(*yrZ*bj z1(gyJoWf6pFXQ|Wrz|V;hA*-x*SF~Rgk*s&uV+1L$1%7Ub1388aZJzNaZJzJaZJzN zaZJzNaZJzNaZI0Q$1&aBact!r1fy$ukN#81x8?P$_vSJTk$JqH_1EMOc&NzndhVAS zPHIKA&+`t3L)MOCIT*u9>8!z<FzPietl;QF`T!!V9mn+HVulc;%d_s=aZDf0xgK%) zYRTf*g%m7y93$DtI4(Rb`oT%uUkDv2muLMZ{lfrQJC5o89mjNg$FZEx!^j>6UO--0 zb-X){{Uu`7I4;jRT%Kppmf7yDdghK}I^0`}IL36`TLCE{#C2~4<U&F$_f~zr9mjOI zw|*0|V<m78T)@3m&)RWJpKr%8eV!f1bhx+v8>qYPtvcLWSvwLQ_g3A%<CqTjR-$;_ zTXnd%{t$#*_f{S5tu$=cy;b+`IHtqB^&TYIY1q~P?^bHRL$e`r$1y6n3n0h26~3)M zL%Jse+)~coaqOE|AbCnc<c?!uOn1SvHAuZn#lDXnwX0Ye^z1mcAJI8~00a1QKORBy zWqJ|(2vJy~Z~IV0@XH9xw(f_xkrrs}IL4_)w>@y&TlMGlJHRb>9Me5Jj_IBq$MlRH z$8`UWW4d?8G5zJDDU=dZaJGA^?%#1t|3xti?z*??aBrn~$1L|&9qz3(=5pJ;Rfl`) z2LZ6%Td@(|5(>s~Z`I-6N--$+RvqrGWI?&N>b@Pv^o$+Hbhx*E7b#mT_f{S5t(2Q` zZ`I-6N=hF0Ry}LSF+FR?F&*x$?5AA!RvqrGpM{WjS?;Ym+*@A{n;mi8TXnd%vNzf- zaz2K%#P%2nL6+jFEVxliZzUb>tyF8i<=(1q(DG1&E$>zx-mMHWEWKOxj2*{xc(=+n zKm=*9!7t*H?|8TBE!uUGm~?K{;oQm~h)L&G9nP%`Th6Vzf5)*g#8|dhj2*`=Mg?Ju z!G{I4<Cs4Gj$``#JC5mi`GPdiSYd%FiCt=~t;lq|e8GMWw&LG$OrLMZG2Or8n2wh( zmVr^|$-Cp2j+ZZ_CJ6TI^QGhE3&N+lXP0L$FC8ym5Pks6**lKuc=@6p3?D*!i&xF8 z9mjOMe9;EzZT=m{^aXYt)A8~J3ExXb<i289qD5CFbi91Qi2E7g-*HUG%NLA#kW6}a z9Mkdg1tT72gn!2|9WP%n>QQ&cG2Or87>gp+Y3(@1LddYS<Jb;6yj&Dx$Fai*DjUQb zK6qJ!VFIi*JsmG=ycZyA$1&bYV%CmhY=y0G>@+@t6l909)avU#7@%n_bzkdX)<SNJ z_FX$&naKM$+{@}Cf&>TILFBQSwknZ8gB(1KaD+Brijd4PfK9P7b{xABap%}^Y&(gO zhIhv?rdw#ovE0lZ$8yz<WBERhBBNU4UQS+zB4dFa#|$_W{Vo~x>^Nq?p@=ZALy-Z8 zBEqs9iVQduF*C=Z$bdu9CIB3VA_ERZ9ROGkMFt#-b|UCH6u}wZcq1TQhaz~udv_c& z;865#px6#Y1{{iRN7!~KGT>0eu+O2$$lh_xm}kc^BWuSoBXh?w0}e%>0(sY=$bdr; zJ@ow!MFt#--Uul<4n+nWik=3V&!NbGLs1T%CtZgk0}e%fNauAZGUnNF%*fht%z#5t zK4@j_IA*}Nh<^F=`W6`r?>J`6x8s<x;ErR)d^?UA@GW9bjUC7M6O2Owa>p^b0UT|? z+6;`FkLA%AtR2U;<5uF(9K1V@-N*=zS!e{ZCI(1UUPN#oZi5^)%d}LKcb~5hAROU4 z6Fg;Q#g1bqaG&=iE*@eGis0`<4{{T+AKT~=QQ)awUa$NhaU}AE5VfSODLyIs05_lW zazdoAv*A%*K><s%mb2P8<yKyKMcDEe9R*X<AOe!7b@pUDaqP9~yt8d+^d}^+g%?TS zqIs4CiZ$kB&u3_Nmh2X*nB|Wkg#UxHWK?V*g_m&uBF=KGbC;~9bi%=1yAoo3*Ybp9 zbUmg;O64qhD1u+ik~3OdJc9V`ARxqzOoaKO_4tiu%om+&!+E*wJh#oTPr2DVKRQ$~ zF+Malj6Le-*)3kIHcH`|gtHX$d%uP?V*ku&)?)A?7kTGjS@x_y>!Ds$f}G&^0r={0 zr+z+Pj$@xm`H6?;H4Pn;wi9s!gWauWe{)Bx+{e-b>uu^A=!AnYoXD{l+ADo?vD&J6 zQuV_TX@0DLAFIE&3r@_S)Q?qMCs#XdTUS%N%m({#V%<07Vr=i(u@mdOPKxcV+k4>7 zzP+=5I~R7be#it77oiR7q-OK>Ug>(itq<FJc9^wX0dq*qhk>`l^s{61_mIhctR(vh zHFXVovJ$y&bW?NlAeO<gEN%7-4zy#@yq(_U{aAN)NWgEntEYXi6|1|9MrrX@i5uP8 z+nE);#EoWAyIPx&Cf^124)%ALN=%}_1(SXkw1rr7zzzc~J%e~%L4k{0u#Mf*i$(4% zWI&g?P`o9B_f&fNu%<lNjh6&^y3wIKX&BqrIxyIWmljH0a9ht{pLxw7^wib49j@8S z+$czT0RHh{3ah-WP%<U6t+g9#-_0;bETlWcyPDy!EiItT1<Kbk;L6|Gc0E?t9b5{l zv%49q`dDgrpjZ=cZO4l?Ep2rEmkQ{|+Pf1EFL|@6eGo$s2h_wxe9GNy!)rxNEiHXm zk9T7GyL#Yu5542E9b3Ob6Ii34Ke`bs_D+l<3v_tq!%2^{o25O(TpUX+SSN=}poO(= zloVE<Dg759@Lm?Be;cIJ)4xrubMa7fnz}mM;YA<|%LRDK7lvrs*48gBa`7p){-%yL zJpDMV$|}}1&;q{#A8gxzxY&iL0<|@DfdZNjS)y&*JH;g)l$L7-@$$i7H>yDwMr;nX z9yCdvZDw;1UOT{8xm#T7##w@DYsHSe;xZTBy0e$Bn>20f7ni$G^4ifUmD|<{k!|!x z^?RZ!{84RuaiLdKx=_4wVK!FPHa3tkZW)X>C^os#?Xb~4)n4|ScyYn(NA>N(K+`D} zfrEHwL&?9Z2XzAmCcR9m7s7%DQ5S5q8b4ZZQ!_jpOv^4PDF?IGk4d)&yq5&VNUt9g z7e21YOBEa|%-)@Fxu|m^SwZ^1G+J+3V?SSMfMbTJKMRU{<%UQN^CD5J>K&?nxa+%Y z$S%TH0or<{3AAD>QnA^^q)wG{i0Q?+VqOfD8wgzKM$1at+ut$Rwhi-u4hPDz;@p)* zHa_x=tgUW5^KEY$=xFW3Cq6S$VTY!+?M)^&H-Q$!)tS*Xb@iU;gg1I8;uf-srn4aW z4P#ptrl-qo_C<nK$4Xj!G33Oyv{pC9>Ljj%Ll@gS(dI@qbzRqVJzi=;KZ{-&vN2IT zM7xWi>NcC1F1)4G;YRd#bhZsti%u7ELn|90yw-$Ttn%t^5!bl!Xrs3GKs8o%W+N-E zb)(yw(3Geb=`eZfsK?VCnAhROu~xC&jigDN+pEnTolPd}zT1uI?qR#s+tk^|_xVJR z8)FYzI4n|~Pp>D^;_)@IT@kOzj_K%B!=OGl$|?}WC;DBmQlR|4j;wlkx!oxhO>t*) zNBcH0=m!F`O6+i9EQhKq^6j?k+!$r;Ry{(u$d})Cy3y9y2?A~Dl)XCS&Ia##7ey6P zs$JaRf^9v$#wzJ+-KbXd_2v#LdaxI7L*ilADNz^HCvL>U*#V46`6(&ic=eXRZT5Jz zsSiUsc8%8f)e84g9M<5}3u@d3|3T&=fjeoxY6L37+xoA=t7~e&DFKp=FrEW!7fe0K zPYX_@4#d<amRwK9K%o<5ZTF77UTkFPmT7}y4%qz|R4)C_<d#c;%L=c-P(AbmP8H#~ z$Kbl3_nqZUoKynL`@(V+VKNE#qR)Ffo}IAh#N>H7mAHn38<GhTxd69IEI<qZ-=QrL zLH!Ej%J62Rb7>>CE(wH1C*K?|5XRaN??M)aVPk}ssU#8rb~UYYsRqR8TBO_r5_&nd zez?jA;#n%EQv}N1jIX=pmTH%*P<X~tEvOp?G6e-D%#%5+jap3L$$Sa18I@nDUA+Pf zuFXZ{+9j8)*doCN9op|`Z;`ncI@ExmGfmM_@V5nDj4QSnm1V<Zp2{Y|Y+0}pJ6mJ( z+FTSK`Iaul>upy^PS!?AYnhD$;xf_lB5l3C)CjIwxu!@fjubA(Ox49wVk;mq6#jzc zB;k~8rKIQtSApAnBkabnmh5`~7b3@e6|WSsrc_*l!o(az6o;&>wKB4T>nushtSD+F zsf+wz1uXXhS&T&4O~_(Bm4!!fC0tsQtH^A#ur(XbmPo{JAyHTNx;N)Z{q35i&>Z9| za{ZBRAq-oid0vc5R=BJ$343gkg~)d;q@Y94SXds3wN_IWK(v5cLXX8~mnb}c#?-@a zsfq;~5m|erMJihkZGf6qp_YW5<|Wfs?AAoLTaz4DMQB8<Cd6N}^PD!oYEhP08LL(e z6+0iE<4!YoHH=P(0#&t_+D%{0S~S3gsxB9mYE*5pL)WTgOW8Qak+?+Cvn@#xEVXQ8 zZLw^tR8?Chf%#WR)V0NvXqZTOxevT_Qn%}CnNMWkd__i1wAu^ooXTLyYxC{2EA1+| zN);_+w{+e{MzxU_X0|44RLjSXU~LXLj42utAX~n*g?5jyE}$ClwNiFOwp$qqS*uU# z5ayN@BeH?^H8!gB>wRSkEdSg#G^19tLvoj7SHKNdLV?(L)NM{DWn+Jtzq!3!HNqP& zM!l>+8GUUn`b2-zx(PFWnA21Zwx!}~%Ti<~u?h;nt2OA>a8p|++xfVKAZ=?EoH^@4 z+Es=D8L3uV@l|i-r7RE@-(cxXcC`?YLHS_P(U%?YHgAS-LCIq03RwtGhjOK5IkHyK zoQ78%)eMr_;^Y9{U5nc4B#^u)4P52mdVp865l%QU78SRVZOUw9xA_1{jm>WFVOMr< zBdbOisvUq#!?wvr?525b!REE7<uvoC(@5z44kgF79}jYFCIQ8cVHF4UPa;q1>{jeD z(b)3bo?;1minnSj*jeP;y+%Q{F%~K-EAqEOZfjw+LTbR_Y5qz=(5=^2n187cXsLaf z+hs2ITFBKaD3~&@j_fhf3NKI<Q|a1nEiy(1D_L%<u&cazSoLvrr7}bm#w#**cy5av zkRn(cuv?m-tp%h~N(^O-FRbcvL`gB~G_sc1blLKF#Fj%uj@U8=2(BK<RCYdrN+Ac2 zl9a7-qFNb9(|;AlysqwYGs|Yktk>#Rr-K@hXAgCk_^m15NotR43+z!)p&}Bsg<fP6 zbqBJrMGj<{j~d8YgI@`dvMjMRwYFHQN>!IqyFM<<7Uy!+H<l^2t?)Oz7q|^GjT*yV zf7{D}ukIW8f@$A4_d+$!MMq>IT2&$DZ=ctC&D<R#`i8$=>$kfm$NF7EDEC=C>eYI; zDY)3v6bNm;mP}ULwNd$$#O@uEj<Dz<dju0!trY9V+M>>-YLF0#i}s~gtPK(!4;`|Z zb4AU^3Ej5#93_xkf7@rQg$3u?gCpGkYR5;AJS;+D3cs4B{Vab8e=rilqa^RvL??0o zah!jT^XE9}{?4y^J%=-(tqBwuU04|uZ^1>QH&Wo;xCB3hOXz;yeHNGSmv}jWOXRP4 z$L$j%VQe5Az}8p-yS;^jOT${EC>(rG<V*Ue_=lkWsXzccTo3AGu@=AcvKY7lUKj7f zDcK2r1$X$c5s-^`QP~tDn<6)xtr55`MnJB^B3`*5@ppm9*KtbX0qGAKN4-^aW2B46 zv4FNHT7QOwr*SG;F$^BWYxz2e<dL7+I1gG+A|W^6QncD}C*F#SqQ#F&oChrqt**kU zXiefyd>j`=i=R($Xx$0nQW<}@ki7Eh;pp;4oOk04!iVNEoVVfp9?oJ6aQ5K*CeHuF zNq--i=gK7R#C^DEUn1-zF2R4mCG<UB_zl1C3%Eqkc8e&6_ad^Kmo>PAF2O~Y6CN0K zi5z~6EvJi@0bWwL=##wL&&%)PqTPl|?(Mil?!hH|KQDiViy;-kSGR-zh|*g|*>G)G zONVg{My_8L%zbNkc_dh<g^k_elHlYufbI_$Mt~ie%lQ3>6}~H+XT_`Eec>fCye}Ls z1u-VQDs0H#M7YR8UFcV3wco;fgGFl2N<SCQx6-RD=E9{id{4L(6Ixp2t>HZWZVAWm z6L@Pl8hJ8&32uYm4oCU3G<>NqbeS)-(HA;fT!jyFlP6RXUcr#$D$u?x9K&5vFy{;5 zSaAPrIDZR-5zN`LG+bbn!xpV7*S_!y3IB*Cw~ttIxI4UB!oP@iV<}1%yzec~EDZ;j zBRZI`K~Xbb@F@!5T&S=nTo|083T@RbLS-Pk?A6y+<ip{-Ezl2SrA6M)>rZ*n)4cw8 zzDpn<ZP1gbMy#K03)RnH6}D~IgY!c;W!;N>6L%bJ3vDSbfi=8b!b_YNSta<&A>^n< zwnPFI*lz+iU?CXMKg=H;AF~Jr<?Sf%cJlJI$S5J<2t(n>HN3u+muv3FH4ym;uR8H_ zWMoc+=s83Q>6N@na7Y5KiM$o>kD+`wSmkS2uzU}K=^x=-QwZkSKLvYmCywHx{Q+UJ zKzs=-Sj;L;^MK6+;2x}XS=1{Rq8_*iE-J65rwl0v-bII%zr#hflzi!Fg=#fakMJ3b z-ob_FMaSR{^HH4N!ueC2mtq8Q6z8)zWgbg9OOW`TxM+9d68Hoz!O!9nI>EcY<>eo6 z34f25AK()CG4FoHyAU356>Id|QRQVvTNuvm3Tqv_LWkAi+=zBfSUVif?UX`pvDn_S z5Zl2wfbg9-zlBq>8F~SCVjVWM&@RO#P{#`(zdinYOTfg}Mfm9;EVtkj-`pIQ+xWz= zCrRwJH;Rn!k~-1WUa=Wrrts5qc3bjM&OrL_EujD9+-;gm&umK13~w4q4b6>hQl5Vm zwUzj*sNRHk=+bl37IYK+2`h)i*^`XdH`Z574_7EkehRN%QXiu#8~FQeg2UgY42G(! zH;qpYPt1*^6k0}f`e3?ZW@>6y7Scl8w7<3n-}V)@94IcUcwTvB2(OZqrD#!^z>F;s z71{&{cvGBg+MC1%aFgK3BKykcfO5S;)P16MN+9W<zb#oNh0WVWQlpi-1wM!Z`syBE zJsM5oqw{KuUqlWi)2Z3?2<{xvObUBG0KgBw5Dr4v77KSukhnR!wfYM~lTiuH|0%Xk zJNgyN=r6G>`1y;?`XuuIi1y)^l9{J~p4;=aE-PvE|Ac1rR}m8n`0FTZcKx+-t$8&i zoR#Z&*FX=Kp4(s2nrdIovS##;zM`LRvCkKOlO-D#&~tlsF};!uZ<^;-ipt?vaR}rS zud0Br+K|8*bg<iI*LRN5(yPYED>pWoXKbZxF2g8(y`wz&D(NdVxbs_xJ%BvV;g=H1 zId#5i`0~p$$InCj5~Qqwi%NdpRepgQw-7jUjOdIcogtz-CRBRBn9w`Q#E{Z~y8}!} zSq>vJ#+UNbpw8$LU*0`{fYJzVCTH<tmWrL7z{f3<Biv2cLC1~S2HJuo$K^nk4^<ei zUVb^YlO7!(!#xBm_XeK9LkEKDZC2c%Y>2`Q%>2CN%J;_P{%HTRI*aqExaaZsLEH68 z#Cz|x4%-gk(n;e`3fV8eIRZVLy(9A1R69p*H~6Y{AsG_$adEyJEBp+KXKg%x2_4uH zp$_bOuMW;G<qYP2rQ&XyPN(KZrYhui))gajd-ooEHEWBH*I#b5Js-cnL?N;`u^)ro zT_ImhLA;VWR3^*Xc8=i;Ej1(Kvs(76HvDnMVXs;aa&+*DQ1=_kFFE><gH6Q__Q0{X z9fg6-2Xi`fZ<BDAsUdJEdv2%y&*;M4;eg5w&G`IN9x$JZ>gvjx$|_8R!k%bO>Svy3 zOCNHERjEXoP4BOm!eXehQkuCMI&9*e{AbN)5v*8*)elQbq7c&9&_o4xBbiC#-i`cU zK0E%uzjz}kBG-$ZL;C)N#47A08(Q_Apw=IHA^1X&p%;Q53v0chkA?ptqV-$&p^`^6 zz?`TD!!jx$LaQFr0#zSD%!A=T^+&{9Mn0jcPife3GxTTL9Rd8xBUJTqz(RoC4w&L8 zRCPCCI$-YrOc(U+QAeoiT^cBdZrA=r{{D-G7utJ6&ug~=aUyhU;I05O#^(?`1q_Lc zRBj=0xt)bg@Hg_eQhqoV4tps5f1MFxOtWUbGo&$Tg*6ewf^SBo6@0T7M^w(H4$L|b ztWs-yL5VI;?olZ}M61GFEe_5@xe{M_v{Nwkd^n7^j0mqz5$7vdONT>G#_@+%7@kDH zSv~Ip^(QSHxGMoChHEw&_kQNV9D>?CxMI0J<M^r-rgKG5<2C#ETMGnt1>kTW+w9|M zfF^L#@`GAD8v&5#EGS&dfYXSpUy!zzHzCH-^1(55sACn-_E2ifN-lTqU}{MR%d|sp zU<_-blsp62-a!6Hsi@kx29RR_p3OGufRn%}aU9!FsmSxcAU!-5JV&-|&@Ih>WZT9n zKY|sae4KJ=yAkq>x^l)fL?vf_KPCHk8lbyyDjb+t#$n5O8{kUL*ewh@X;t9UNW=U% zC=PQjog7PXd#{BhCZB_Vdx#Ew0yWN&m`X*7U4(cge^TXPON?@2`R1!Bw!|nWRh!@v zlX2M6NC2)%dRYdB3T{UU6o<^K2BB=}KMm9e9Xi<(BPD9*E}YWpv;o{@Xvb=!+7P3p zI-1-A33?B^wYdvi;2-?3bi8v9TRYbPbS^sgErL$>BIrD@2s(X>p!3io=-_SGbC&D) zBIwY^>Rj^q+9K%i!&~Q~b8-=Mh898RiAB&ET?Cz{7D0!N;<?IoY7unUr=E+>=|#|a zn?uKXfXe8?Uke(nQVX@ucHL1ptUEE409X4spSEQq60!Ep*Zz<mdusO2s;B;EaF*S& zv!`bNoQL0_b`sa@gFST&XD-h9cm`Oor@jZL>ZxzU9XazK?1kC)s$RH((#krX2IOlv zReKoEiYI{W*z-75J4PHoDZBmoFk+P6twk-antP7jNETa!z7!72?$3v$UTJ;Z1NT0q zuOVcXEko+-|2X<$OO$<3UkRM&(ig?1^wkAyO4EN(Uu77SD1BX$U3kPljq~R?&!w*o zNUiimtM!wz_4QfA`1HlqZO?HK$*LBiFNO2#(N`F6lAKFl%@B^NUkmGN7s`1qeRZMy z=hD~J5c0Y7RRucd($@fR&ZV!v2G2fyaT>#O{2pi|7NIYN^Xt*q7+ya*m%cu*2z?zw zInSl9I~Jj@QB?7B>1$*W`Z}}-ef=AF_UVi3{hs4PpurDvoU8v*IKLi!eH|}>pG#jq zT7<stLOIW+FMdw&T=nancv3i*zNmMwg#KdT{_Fll=!?()N?%mc-y!5bNMqL`^rdjf z4>!!`w-4RJ?!RIHft1z1`^O3PvkY5q_DDg^9}kc`INrD%6C6rke_k#`OhtIE?7v#k zr>ORD86SDGjz_GL@`))ZpCYqR#3undj`LhPWnZ9ldKb#RA&byg0pXkh&!FZ!p!@LH z4?c(@E4_!aJ4(bqjq@?^eJ;Io{H)s57NoEWiaQ>5Ke!HHrFZXgslws)2Z+B5L|9K3 z8vDHfoGrkW`cg?DiG&Z54+yz%arl)Xe!fw*05Vk#Abg^Cakc_-96^O+k7*S@l;L{h zTqM)l7u&`X03h+aJli(L8YA=4N^qBb(8f-|gq4k*L2X=}g+v?U_cxV|{R8;PK4@dR z0aiA~_eQc0+SpS#&t+qjn6fb&8;Lvz?S~)9RQ7Yry!<>(d<f@U_CpOR`?(nji0vM> z{ak?@T>G(?dR@F5LF1&Y!Fjl`b*gZvF9<W^I3JyMAg$7A1`#Vro&I~ft<x?PirD^x zI^{>zluqC0kF-M67pv5{^u;fODSh$D877o*P+$C-n9|qiJQ7m%J-!Hi-Qnnqt*4)q zt*`3<cH8+|kivhA1M<`&^rdj9FMmFy_Dbuk_F7wC98J!zFMha7>FaWTfvgbq6+`NC z>5E^%Qu^ve3R=JapuYIkETym3?7}1dX`H(kp|3~JrY~!z{j}5tYhUF!=QGP2jv*E8 z$br-yN5}_>lXoAap5r<TV$Hm920>ZE!ZUA9?q`{KGZ#VUCA$=7p)<S)IxGUvV0E+t z-noZu;bV)Sqc4Kao<-0pTm+q|MbIf*1fBFE=)@L5=a@r>vg7Og{^J9HR7pCqc~^zZ zxymZ0*oBi?fE`-4s!~xq>{<Q8t@CLU9Lm~#pp$*D4Il1u+62rxp+aUHY{U6+I@Kmr zXO)uZ?3bU$FH;A#3kk|P*lr|%cdmAWUxQQa#^;cN?@juTuOi6xQZ@GDHTz)O!mrG! zw&fy!hijpe-#bwnMxJfVe;PQd?@j;{1@IhpP2n@xxmtkfvssj-_X9RgcFQm9u~rOu zS=M5;W6yv?B=odndBE{O;&&q62dQs!Q(5iU$InuV-IK|^DbTpXp))$Wdv0<MW+&ae ztWq4ZOM#fo<9w{wDd~K4RM~4d-jwB%BTv7gt#&@{@@zrsJUm-v|J+&1Zr93RW4Yq2 zuc}=B+E01fr6{u{uPunvK<ia>Sf~7lZN1-g%AW1I^6Hg6yQLv_Y?0oJ0iJ>1pq2#F zv~~Z%7KxufP%YAj{E=3Ot<5f!OSLwbKFX-MMC0r?KWU&^8;*A=DgVKigr7f9ElC^{ zvyZ0%Ite+emLz)>&zAEra8xUSl?Z!%IfZZ9S;uk2SAmFZZ6xe(067j07kXxVrL|*^ z3Kx1leGXhX9BS;mvIW9*PsKAe$g*VPu*G^@mWw#F-fWzw0VUpoQngwepveQhr?pI- zKo|+x9$MZJF_8DSna=@1)(fXLl>o;FiQfwvK1lt9o9b7}{gg{bwPSUKS-IbpmHQ2D zs$VJhr(8N#?w<BgL9*M-`o_#uHDJ&$pSt@qA#u)T_+;2{b0(d|q^e)#$R{zHO3qeR z(Nysfd#Po`bHkx5$`54b9#3RK>NhTe@-11EAIzi^Z^?wzZ&?K8+p;J>lu0LUw@l7+ zN`1#7D8D0%^21q_yD}m5I~PIu_AJVeX3~idWJ2m^7eSfN-9Brn`&uTQ_|8m7{h>ur z=19*^`LRqo@z-TS>Th2J<-4*dpUk8a-<1iezi$zg@6Dq8cqX0rNG7EIp+!)>FN^XM znRMd2Ga>cI7eSd%L4G+unMo%;kqN2i9IQ&UaP58|i}F*MbmG&Qkow0LLHWTf%Fkrd ziO*(2>YrQ$<%hB;pUR{YKadHjKeY(T4`)$+E|X6D=1fTa=|xaJo<;d|CY|`9Oi2Ap zi=g~y7UkzN>BMizgwzWs)xx&%H3!EY8^4rECw^Ndq(09{wJ_z!92}eS&ok-7-;oKa zk2$Fprpytezou{y<b%YIWl`Sfq*{=2{PxUL*n>BNa>L^eoyr;Pr-2kabetS-3GrjZ zzl4(^{NN~55i+D8Yb*$RVFjrK<Vg@gb{1qSAa^0C)*Z}Iyl;RwHER^JaIOW8J*yTF z<~VZ`B8HP=HbwbHD=z>n$OIsM4i5qHHN;bfDizm+dAJ-tO2{EE<Vivby^t5OQmqXE z2OPO{t^|ZY7jm7%A)cN4coyVMS&*ZE#F4@+>D_>+xq_HgicbTgW(I7?mmNBQXv>hE z689hfVBsjr=IHd??643|Il3VBzxi+oc^;5c_;qE-A-pSR)4XA1qIVxr<q^=z@td7{ zIS2lZRPk=*zVVr<$tnQdl5PQxJ?>Td8el3Mu2e^}Air-xh^JEB>w}p50HA3y+C%5T zEIMD8kc0>42|yl4D!1&<0AjZ!DzBHB$|)D~C}e?fxID)Iu}9P@RUIIwf#Xu%2FP(A zWDpR0l&exD0bvqVcW^Ie2*Kgz^<h9<?J(|PKoa;R4MpecfSmNz%I^Te0W^LroPXu5 zb)XKK%E$Hr$68=NGuS(3^a%$-<p1!cA_QCV2{i{BvnZDWV$VV-eyRa+`7uYaQPw0N z4rLSH7RFo0Ld}`mbP`C#QIpk@n4^2AuuIWK<mr~83phNKeDHk~8QOrWi(~q5h;RoW zc6+Ee{G^4$9|idf+}a}<1^K3h<Lcr?KpsR2H&qByCjl2{IUzVK4rfxbs4*mQwfq|3 zJP#a~jtPjG`M0Gp0|+axOZn}9ob;voARw%oE*)-LdcP0nbAUYLgM0&!2ONlrsykxU zCIBsIu#LCp7-21=V=1;RUvsr%ePg)LSFRV4%IzJ@(cy`ybV?j|QjvZL`=UOBUzg{l zfcSa71dt~j9CH+3#>PA(M@_B_>wv?G>dL2ELI`CkOl2B^t(R*XyChD+lWH#@><(Ny zZvx~|KwJ)w0P>U%@_s-b^FclZh<zyg`2rv@fEZGczp-%KymU-oJ&brauQEWM^Fhi1 zp(VI<YB=d7j~IFfxVq5@GLCD3L#UhAu$4+dOz4xxDx9u-W`Sdme-zJe1*8NxE{A_; z(P8R<7Q;0=_s;;w-)eouO6BtNw2#i(dFj09ONG8^GWiA|T1P-zkGt&L^EtU_9oU`` zcYYkw+3%xsaW)RO1q75&TdviWgR(u31RGOLra0}xxx&ibE$J*Eerdcv3+K26A=^sw zC%q7DT{eg4sgu5*`l2kH?}J8VYBz>uoZYXKyWC-~!{p=`zJh86$0tXp?EB=<&`fHd z9h%^#Y!+5}cE-LX81Ip~;i=(?@ig|ukbO!sK2<l1mp$gDg?Zih<aWI9?*W}N&kW|y z$%1@!rTnIwZt|29y<2OC+1A&zy%nF$Z13zw`-XRBXHsKeGc}{6VUA9+8^nvK_~yAc z!iHuhP>Xk!_%^&MoX6W-*!y$X9?hA6>P$dQCZHDCdMH{SE>1K$LU)9mjl~TWP!tS{ zC~a;7H#L(Q>4k=@+rCsXJ>^7nBqv8EQf_{ZJ5!<>Y%#<==nl9DlT(vcrhe2Gm7z># zPN(>)tT{6`IXk{L1(|YR5ila=eIeg2tNQ}<ystl_R7#EfA|90J*ObXOaz&+jFSov~ z4xcDNg1*6Sd{7eKFYIp}Z0W(L=DK>C@r_k{8V>|aP9Z}o&>@3ucwFfkADT(d98AQS z*!zJo1cwhK@s74^3QTiyFCgQ4r{`u;@~dSCaibH5m<gKGX<2X!3W~sY6g!f#-}V-j z`%}q1m7u@@f@+Tt%2q85K#g~YccW$u!+K%D<HKoL7VfWNPK}a-;XTq~u#>5oMVsUK zg^Bx#%%sw(nSCiqesA&(Q!{3IZU`^X&!+a8`%*LMacr1MF>;4M^T33s@Cq_M4@3<x zkY?l{78%Dm_&aFIEnY^HxxuRV&W14CQ?uKrM&>3`%0!!#PBN4(+beT7Mu(<a&H_7F z2JmDoWv-rwkn6(sU>TKZi(of)IB~^j=?*;g&P)wAjf_AxY3d^j;wUq-$v{OKovO^> zRS9a^!><jo1%;&}2!1N<llb^vyf<fZ8y2YmSw_n+<$cCxwWgU)4bM_t$%*l?$-UV8 zhUvPdk|UPEE9uI#nbklEP!78+DfsQavuVH@HrghOM~BqRWO5?g_|QcyY<vsr#;L2e zP`sZ5R0_9al=y~ijx5_8b_JXz8rTg!OpNOuFrAvfeG;l-7YTduXJlgNEB8=9l&^lH z?qwAgqm#aC`)4;h8~-j?a#ho-t=3lM4D%bY<S8SNqf!J|7@jY$1*xla)-#@IatYjL z29Cj6tq;c$i)37pwub+<_B{<7Gi9@pWxZ$y*?Ty3T@kXLk5E+Fl-rcbg3APK84_q4 z>@s=uA(2oUv)c@RGp?j)4b~h&zP4SVs0S8Q9jjrL4T85xRHioTVbttoz1)Us2^QV9 zlIAOET93N6D&?cF9d&RF+jYS3tf~XsV}IhBwTj0!Tac-IV9wMVMzQCmHuWfuPrcjh zaJG&Ob9&0$ZI24FM@p*2wG^w`A#Y!xcIz@nCz4~TUy=oP#4XKwo*IXY<y4cu1b}+0 z8H53dY7kxNdUNL^K^6&>Ae&V=V$Q;r{ARR_nWAPV>QA_E?OV82Q$3D{ws+upmfm94 Mu?jx9`1uh34=rG${{R30 From c40e099969a04be4010a8caed1083ad42c08718b Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Sun, 3 Apr 2022 00:02:00 +0200 Subject: [PATCH 1511/2710] Ignore executables in util directory --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index ad4d26c3f..9112484b8 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ /testwrk/ /wrk/ /cc65.zip +/util/atari/*.exe +/util/gamate/*.exe + From 3050e3afcd37c7246f3708f789f12932b72803c5 Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Sun, 3 Apr 2022 15:28:37 +0200 Subject: [PATCH 1512/2710] Use lsr --- libsrc/gamate/cputc.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/gamate/cputc.s b/libsrc/gamate/cputc.s index 7f407ea00..b972535c5 100644 --- a/libsrc/gamate/cputc.s +++ b/libsrc/gamate/cputc.s @@ -97,8 +97,8 @@ putchar: ldy #$F8 lda CHARCOLOR - and #1 - beq @delete1 + lsr + bcc @delete1 @copylp1: lda (ptr3),y From 1effa5944bc940fd5b5c1e6f6fd46421088a8a34 Mon Sep 17 00:00:00 2001 From: Fabrizio Caruso <fabrizio_caruso@hotmail.com> Date: Sun, 3 Apr 2022 17:23:36 +0200 Subject: [PATCH 1513/2710] Optimize delete cycles --- libsrc/gamate/cputc.s | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libsrc/gamate/cputc.s b/libsrc/gamate/cputc.s index b972535c5..d80e8b41a 100644 --- a/libsrc/gamate/cputc.s +++ b/libsrc/gamate/cputc.s @@ -111,9 +111,10 @@ putchar: @delete1: lda #$00 +@del1: sta LCD_DATA iny - bne @delete1 + bne @del1 @skip_delete1: @@ -143,9 +144,10 @@ putchar: @delete2: lda #$00 +@del2: sta LCD_DATA iny - bne @delete2 + bne @del2 @skip_delete2: pla From 14956f3b15978fa2b3a8e5924d91426fb9b7f4f4 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 31 Mar 2022 07:44:26 +0300 Subject: [PATCH 1514/2710] Add atari7800-stdjoy --- libsrc/atari7800/joy/atari7800-stdjoy.s | 164 ++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 libsrc/atari7800/joy/atari7800-stdjoy.s diff --git a/libsrc/atari7800/joy/atari7800-stdjoy.s b/libsrc/atari7800/joy/atari7800-stdjoy.s new file mode 100644 index 000000000..a2bcd4a3a --- /dev/null +++ b/libsrc/atari7800/joy/atari7800-stdjoy.s @@ -0,0 +1,164 @@ +; +; Standard joystick driver for the Atari 7800. +; This version tries to use 7800 and 2600 joysticks. +; But assumes that both joysticks are of same type. +; +; Modified by Karri Kaksonen, 2022-02-27 +; Ullrich von Bassewitz, 2002-12-20 +; Using code from Steve Schmidtke +; + + .include "zeropage.inc" + + .include "joy-kernel.inc" + .include "joy-error.inc" + .include "atari7800.inc" + + .macpack generic + .macpack module + + +; ------------------------------------------------------------------------ +; Header. Includes jump table + + module_header _atari7800_stdjoy_joy + +; Driver signature + + .byte $6A, $6F, $79 ; "joy" + .byte JOY_API_VERSION ; Driver API version number + +; Library reference + + .addr $0000 + +; Jump table. + + .addr INSTALL + .addr UNINSTALL + .addr COUNT + .addr READ + +; ------------------------------------------------------------------------ +; Constants + +JOY_COUNT = 2 ; Number of joysticks we support + +.code + +; ------------------------------------------------------------------------ +; INSTALL routine. Is called after the driver is loaded into memory. If +; possible, check if the hardware is present and determine the amount of +; memory available. +; Must return an JOY_ERR_xx code in a/x. +; + +INSTALL: + ; Assume 7800 2-button controller, can change + ; to 2600 1-button later + lda #$14 + sta CTLSWB ; enable 2-button 7800 controller 1: set pin 6 to output + ldy #$00 + sty SWCHB ; enable 2-button 7800 controller 2: pull pin 6 (INPT4) high + +reset: + lda #<JOY_ERR_OK + ldx #>JOY_ERR_OK +; rts ; Run into UNINSTALL instead + +; ------------------------------------------------------------------------ +; UNINSTALL routine. Is called before the driver is removed from memory. +; Can do cleanup or whatever. Must not return anything. +; + +UNINSTALL: + rts + + +; ------------------------------------------------------------------------ +; COUNT: Return the total number of available joysticks in a/x. +; + +COUNT: + lda #<JOY_COUNT + ldx #>JOY_COUNT + rts + +; ------------------------------------------------------------------------ +; READ: Read a particular joystick passed in A for 2 fire buttons. + +readbuttons: + ; Y has joystick of interest 0/1 + ; return value: + ; $00: no button, + ; $80: left/B button, + ; $40: right/A button, + ; $c0: both buttons + ; preserves X + tya + beq L5 + ; Joystick 1 processing + ; 7800 joystick 1 buttons + ldy #0 ; ........ + bit INPT2 ; Check for right button + bpl L1 + ldy #2 ; ......2. +L1: bit INPT3 ;Check for left button + bpl L2 + iny ; ......21 +L2: tya + bne L4 ; Joystick worked + ; 2600 Joystick 1 + bit INPT5 + bpl L4 +L3: iny ; .......1 + lda #0 ; Fallback to 2600 joystick mode + sta CTLSWB +L4: tya + ror ; .......2 1 + ror ; 1....... 2 + ror ; 21...... + rts + +L5: ; Joystick 0 processing + ; 7800 joystick 0 buttons + ldy #0 ; ........ + bit INPT0 ; Check for right button + bpl L6 + ldy #2 ; ......2. +L6: bit INPT1 ;Check for left button + bpl L7 + iny ; ......21 +L7: tya + bne L4 ; Joystick worked + ; 2600 Joystick 0 + bit INPT4 + bpl L4 + bmi L3 + +READ: + tay ; Store joystick 0/1 in Y + beq L8 + lda SWCHA + rol ; ...RLDU. + rol ; ..RLDU.. + rol ; .RLDU... - joystick 1 + jmp L9 +L8: lda SWCHA ; Read joystick + ror ; .RLDU... - joystick 0 +L9: tax + jsr readbuttons ; A = 21......, X = .RLDU... + rol ; A = 1 .......2 + tay ; Y = .......2 + txa ; A = .RLDU... + ror ; A = 1.RLDU.. + tax ; X = 1.RLDU.. + tya ; A = .......2 + ror ; A = ........ 2 + txa ; A = 1.RLDU.. + rol ; A = .RLDU..2 1 + rol ; A = RLDU..21 + eor #$F0 ; The direction buttons were inversed + and #$F3 + rts + From cdf83d2a26f6c12eee13f0382252660c0e84af56 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 31 Mar 2022 08:05:41 +0300 Subject: [PATCH 1515/2710] Fixed logic flaw --- libsrc/atari7800/joy/atari7800-stdjoy.s | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/libsrc/atari7800/joy/atari7800-stdjoy.s b/libsrc/atari7800/joy/atari7800-stdjoy.s index a2bcd4a3a..ec3806dde 100644 --- a/libsrc/atari7800/joy/atari7800-stdjoy.s +++ b/libsrc/atari7800/joy/atari7800-stdjoy.s @@ -91,9 +91,9 @@ readbuttons: ; Y has joystick of interest 0/1 ; return value: ; $00: no button, - ; $80: left/B button, - ; $40: right/A button, - ; $c0: both buttons + ; $01: left/B button, + ; $02: right/A button, + ; $03: both buttons ; preserves X tya beq L5 @@ -114,10 +114,7 @@ L2: tya L3: iny ; .......1 lda #0 ; Fallback to 2600 joystick mode sta CTLSWB -L4: tya - ror ; .......2 1 - ror ; 1....... 2 - ror ; 21...... +L4: tya ; ......21 rts L5: ; Joystick 0 processing @@ -147,8 +144,8 @@ READ: L8: lda SWCHA ; Read joystick ror ; .RLDU... - joystick 0 L9: tax - jsr readbuttons ; A = 21......, X = .RLDU... - rol ; A = 1 .......2 + jsr readbuttons ; A = ......21, X = .RLDU... + ror ; A = .......2 1 tay ; Y = .......2 txa ; A = .RLDU... ror ; A = 1.RLDU.. From 3ceae59857dc711215ada7d278af047c2a137d16 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 31 Mar 2022 09:08:40 +0300 Subject: [PATCH 1516/2710] Add stdjoy driver --- libsrc/atari7800/joy_stat_stddrv.s | 14 ++++++++++++++ libsrc/atari7800/libref.s | 8 ++++++++ 2 files changed, 22 insertions(+) create mode 100644 libsrc/atari7800/joy_stat_stddrv.s create mode 100644 libsrc/atari7800/libref.s diff --git a/libsrc/atari7800/joy_stat_stddrv.s b/libsrc/atari7800/joy_stat_stddrv.s new file mode 100644 index 000000000..eafe0d314 --- /dev/null +++ b/libsrc/atari7800/joy_stat_stddrv.s @@ -0,0 +1,14 @@ +; +; Address of the static standard joystick driver +; +; Oliver Schmidt, 2012-11-01 +; +; const void joy_static_stddrv[]; +; + + .export _joy_static_stddrv + .import _atari7800_stdjoy_joy + +.rodata + +_joy_static_stddrv := _atari7800_stdjoy_joy diff --git a/libsrc/atari7800/libref.s b/libsrc/atari7800/libref.s new file mode 100644 index 000000000..e4afa7eb1 --- /dev/null +++ b/libsrc/atari7800/libref.s @@ -0,0 +1,8 @@ +; +; Oliver Schmidt, 2013-05-31 +; + + .export joy_libref + .import _exit + +joy_libref := _exit From 851c65344c6d8d7b4c352e78c2dd192634f850b6 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 31 Mar 2022 09:09:11 +0300 Subject: [PATCH 1517/2710] Add comments --- libsrc/atari7800/joy/atari7800-stdjoy.s | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libsrc/atari7800/joy/atari7800-stdjoy.s b/libsrc/atari7800/joy/atari7800-stdjoy.s index ec3806dde..1ad7bff0d 100644 --- a/libsrc/atari7800/joy/atari7800-stdjoy.s +++ b/libsrc/atari7800/joy/atari7800-stdjoy.s @@ -3,7 +3,7 @@ ; This version tries to use 7800 and 2600 joysticks. ; But assumes that both joysticks are of same type. ; -; Modified by Karri Kaksonen, 2022-02-27 +; Modified by Karri Kaksonen, 2022-03-31 ; Ullrich von Bassewitz, 2002-12-20 ; Using code from Steve Schmidtke ; @@ -107,7 +107,7 @@ L1: bit INPT3 ;Check for left button bpl L2 iny ; ......21 L2: tya - bne L4 ; Joystick worked + bne L4 ; 7800 mode joystick worked ; 2600 Joystick 1 bit INPT5 bpl L4 @@ -127,7 +127,7 @@ L6: bit INPT1 ;Check for left button bpl L7 iny ; ......21 L7: tya - bne L4 ; Joystick worked + bne L4 ; 7800 mode joystick worked ; 2600 Joystick 0 bit INPT4 bpl L4 @@ -136,12 +136,12 @@ L7: tya READ: tay ; Store joystick 0/1 in Y beq L8 - lda SWCHA + lda SWCHA ; Read directions of joystick 1 rol ; ...RLDU. rol ; ..RLDU.. rol ; .RLDU... - joystick 1 jmp L9 -L8: lda SWCHA ; Read joystick +L8: lda SWCHA ; Read directions of joystick 0 ror ; .RLDU... - joystick 0 L9: tax jsr readbuttons ; A = ......21, X = .RLDU... From f92e1f2e3c2680a19f6ede6ec7905ceed68428ab Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 31 Mar 2022 11:04:10 +0300 Subject: [PATCH 1518/2710] Change polarity for 2600 buttons --- libsrc/atari7800/joy/atari7800-stdjoy.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/atari7800/joy/atari7800-stdjoy.s b/libsrc/atari7800/joy/atari7800-stdjoy.s index 1ad7bff0d..00bb57dcf 100644 --- a/libsrc/atari7800/joy/atari7800-stdjoy.s +++ b/libsrc/atari7800/joy/atari7800-stdjoy.s @@ -110,7 +110,7 @@ L2: tya bne L4 ; 7800 mode joystick worked ; 2600 Joystick 1 bit INPT5 - bpl L4 + bmi L4 L3: iny ; .......1 lda #0 ; Fallback to 2600 joystick mode sta CTLSWB @@ -130,8 +130,8 @@ L7: tya bne L4 ; 7800 mode joystick worked ; 2600 Joystick 0 bit INPT4 - bpl L4 - bmi L3 + bmi L4 + bpl L3 READ: tay ; Store joystick 0/1 in Y From 175da4bcd6a437f2e18643a1fa54c8c957cc30a8 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 15:24:41 +0200 Subject: [PATCH 1519/2710] add gitignores --- util/.gitignore | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 util/.gitignore diff --git a/util/.gitignore b/util/.gitignore new file mode 100644 index 000000000..4da436acb --- /dev/null +++ b/util/.gitignore @@ -0,0 +1,3 @@ +/atari/ataricvt +/gamate/gamate-fixcart +/zlib/deflater From 722bdebd397e56e11567b1ab1f022a7b4d3c1200 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 16:17:50 +0200 Subject: [PATCH 1520/2710] Create Contributing.md Starting to move info hidden elsewhere into this file --- Contributing.md | 89 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 Contributing.md diff --git a/Contributing.md b/Contributing.md new file mode 100644 index 000000000..1aeae7786 --- /dev/null +++ b/Contributing.md @@ -0,0 +1,89 @@ +This document contains all kinds of information that you should know if you want to contribute to the cc65 project. Before you start, please read all of it. If something is not clear to you, please ask - this document is an ongoing effort and may well be incomplete. + +(''Note:'' The word "must" indicates a requirement. The word "should" indicates a recomendation.) + +# generally + +* You must obey these rules when contributing new code or documentation to cc65. We are well aware that not all existing code may respect all rules outlined here - but this is no reason for you not to respect them. +* One commit/patch/PR per issue. Do not mix several things unless they are very closely related. + +# Codestyle rules + +## All Sources + +* TAB characters must be expanded to spaces. +* All text files must end with new-line characters. Don't leave the last line "dangling". +* 80 characters is the desired maximum width of files. But, it isn't a "strong" rule; sometimes, you will want to type longer lines, in order to keep the parts of expressions or comments together on the same line. +* You should avoid typing non-ASCII characters. +* If you change "normal" source code into comments, then you must add a comment about why that code is a comment. +* When you want to create a comment from several lines of code, you should use preprocessor lines, instead of ```/* */``` or "```;```". Example: +<pre> +#if 0 + one (); + two (); + three = two () + one (); +#endif +</pre> +* You should type upper case characters for hex values. +* When you type zero-page addresses in hexadecimal, you should type two hex characters (after the hex prefix). When you type non-zero-page addresses in hex, you should type four hex characters. +* When you type lists of addresses, it is a good idea to sort them in ascending numerical order. That makes it easier for readers to build mental pictures of where things are in an address space. And, it is easier to see how big the variables and buffers are. Example: +<pre> +xCoord := $0703 +yCoord := $0705 ; (this address implies that xCoord is 16 bits) +cmdbuf := $0706 ; (this address implies that yCoord is 8 bits) +cmdlen := $0786 ; (this address implies that cmdbuf is 128 bytes) +color := $0787 +</pre> + +## C Sources + +* Your files should obey the C89 standard. +* All declarations in a block must be at the beginning of that block. +* You should put a blank line between a list of local variable declarations and the first line of code. +* You must use ANSI C comments (```/* */```); you must not use C++ comments (```//```). +* The normal indentation width should be four spaces. +* When a function's argument list wraps around to a next line, you should indent that next line by either the normal width or enough spaces to align it with the arguments on the previous line. +* When you add functions to an existing file, you should separate them by the same number of blank lines that separate the functions that already are in that file. + +(The next two rules will be changed at some time in the future; but, for now:) + +* You must separate function names and parameter/argument lists by one space. +* When declaring/defining pointers, you must put the asterisk (```*```) next to the data type, with a space between it and the variable's name. Examples: +<pre> + int* namedPtr[5]; + char* nextLine (FILE* f); +</pre> + +## Assembly Sources + +* Op-code mnemonics must have lower-case letters. The names of instruction macroes may have upper-case letters. +* Hexadecimal number constants should be used except where decimal or binary numbers make much more sense in that constant's context. +* Hexadecimal letters should be upper-case. +* When you set two registers or two memory locations to an immediate 16-bit zero, you should use the expressions ```#<$0000``` and ```#>$0000``` (they make it obvious where you are putting the lower and upper bytes). +* If a function is declared to return a char-sized value, it actually must return an integer-sized value. (When cc65 promotes a returned value, it sometimes assumes that the value already is an integer.) +* Functions, that are intended for a platform's system library, should be optimized as much as possible. +* Sometimes, there must be a trade-off between size and speed. If you think that a library function won't be used often, then you should make it small. Otherwise, you should make it fast. +* Comments that are put on the right side of instructions must be aligned (start in the same character columns). +* Assembly source fields (label, operation, operand, comment) should start ''after'' character columns that are multiples of eight (such as 1, 9, 17, 33, and 41). + +## LinuxDoc Sources + +* TAB characters must be expanded to spaces. +* All text files must end with new-line characters. Don't leave the last line "dangling". +* 80 characters is the desired maximum width of files. +* You should avoid typing non-ASCII characters. + +* You should put blank lines between LinuxDoc sections: + * Three blank lines between ```<sect>``` sections. + * Two blank lines between ```<sect1>``` sections. + * One blank line between other sections. + +# Documentation rules + +## User manual (LinuxDoc) + +* This is the primary documentation. + +## Wiki + +* The Wiki is strictly for additional information that does not fit into the regular user manual (LinuxDoc). The wiki must not duplicate any information that is present in the user manual From c611077e3d9b37ffc8ea7c09b42e6cad788f5033 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 16:20:48 +0200 Subject: [PATCH 1521/2710] Update README.md link Contributing.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 32e3345c6..12d74717b 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,9 @@ [Documentation](https://cc65.github.io/doc) -[Wiki](https://github.com/cc65/wiki/wiki) +[Contributing](Contributing.md) to the CC65 project. + +The [Wiki](https://github.com/cc65/wiki/wiki) contains extra info that does not fit into the regular documentation. [![Snapshot Build](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml/badge.svg?branch=master)](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml) From 45cbb04a042a794fb31aa30c2d760f3004e565eb Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 17:36:25 +0200 Subject: [PATCH 1522/2710] remove literal TABs --- doc/using-make.sgml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/using-make.sgml b/doc/using-make.sgml index e324b7484..9898e9626 100644 --- a/doc/using-make.sgml +++ b/doc/using-make.sgml @@ -76,13 +76,13 @@ ifneq ($(MAKECMDGOALS),clean) endif %.o: %.c - $(CC) -c $(CFLAGS) -o $@ $< + $(CC) -c $(CFLAGS) -o $@ $< $(PROGRAM): $(SOURCES:.c=.o) - $(CC) $(LDFLAGS) -o $@ $^ + $(CC) $(LDFLAGS) -o $@ $^ clean: - $(RM) $(SOURCES:.c=.o) $(SOURCES:.c=.d) $(PROGRAM) $(PROGRAM).map + $(RM) $(SOURCES:.c=.o) $(SOURCES:.c=.d) $(PROGRAM) $(PROGRAM).map </verb></tscreen> <bf/Important:/ When using the sample Makefile above via copy & paste it is From cbbdd3d9cf0348887c4584e592b42110ea463226 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 18:16:14 +0200 Subject: [PATCH 1523/2710] remove a bunch of TABs --- libsrc/atari7800/clock.s | 18 ++-- libsrc/atari7800/clocks_per_sec.s | 14 +-- libsrc/atari7800/crt0.s | 24 ++--- libsrc/atari7800/exehdr.s | 34 +++--- libsrc/atari7800/get_tv.s | 86 +++++++-------- libsrc/atari7800/irq.s | 6 +- libsrc/atari7800/joy/atari7800-stdjoy.s | 134 ++++++++++++------------ libsrc/lynx/bootldr.s | 2 +- samples/sym1/symNotepad.c | 26 ++--- test/val/bug1696.c | 20 ++-- 10 files changed, 182 insertions(+), 182 deletions(-) diff --git a/libsrc/atari7800/clock.s b/libsrc/atari7800/clock.s index 3b259cfcf..03ae1e970 100644 --- a/libsrc/atari7800/clock.s +++ b/libsrc/atari7800/clock.s @@ -9,12 +9,12 @@ .constructor init_clock .import sreg: zp - .import _zonecounter + .import _zonecounter .include "atari7800.inc" .macpack generic - .code + .code ;----------------------------------------------------------------------------- ; Read the clock counter. @@ -38,9 +38,9 @@ ; _zonecounter == 1 (from 1st visible scanline to last visible scanline) ; update_clock: - lda _zonecounter - and #01 - beq @L1 + lda _zonecounter + and #01 + beq @L1 inc clock_count bne @L1 inc clock_count+1 @@ -54,10 +54,10 @@ update_clock: ; .segment "ONCE" init_clock: - lda #0 - sta clock_count+2 - sta clock_count+1 - sta clock_count + lda #0 + sta clock_count+2 + sta clock_count+1 + sta clock_count rts ;----------------------------------------------------------------------------- diff --git a/libsrc/atari7800/clocks_per_sec.s b/libsrc/atari7800/clocks_per_sec.s index dc09c4396..e2c7d9d8d 100644 --- a/libsrc/atari7800/clocks_per_sec.s +++ b/libsrc/atari7800/clocks_per_sec.s @@ -7,12 +7,12 @@ .export __clocks_per_sec .import sreg: zp - .import _paldetected + .import _paldetected .include "atari7800.inc" .macpack generic - .code + .code ;----------------------------------------------------------------------------- ; Return the number of clock ticks in one second. @@ -20,15 +20,15 @@ .proc __clocks_per_sec lda #0 - tax + tax sta sreg ; return 32 bits sta sreg+1 lda _paldetected - bne pal - lda #60 ; NTSC - 60Hz - rts + bne pal + lda #60 ; NTSC - 60Hz + rts pal: - lda #50 ; PAL - 50Hz + lda #50 ; PAL - 50Hz rts .endproc diff --git a/libsrc/atari7800/crt0.s b/libsrc/atari7800/crt0.s index d7cf307ee..cefe16730 100644 --- a/libsrc/atari7800/crt0.s +++ b/libsrc/atari7800/crt0.s @@ -1,14 +1,14 @@ - .export _zonecounter - .export __STARTUP__ : absolute = 1 - .export _exit - .import __ROM_START__ - .import __RAM3_START__, __RAM3_SIZE__ - .import initlib, donelib - .import zerobss, copydata - .import IRQStub - .import push0, _main - .include "atari7800.inc" - .include "zeropage.inc" + .export _zonecounter + .export __STARTUP__ : absolute = 1 + .export _exit + .import __ROM_START__ + .import __RAM3_START__, __RAM3_SIZE__ + .import initlib, donelib + .import zerobss, copydata + .import IRQStub + .import push0, _main + .include "atari7800.inc" + .include "zeropage.inc" INPTCTRL = $01 @@ -50,7 +50,7 @@ _exit: NMIHandler: inc _zonecounter - jmp IRQStub + jmp IRQStub IRQHandler: rti diff --git a/libsrc/atari7800/exehdr.s b/libsrc/atari7800/exehdr.s index 618164cd4..99e62e3d6 100644 --- a/libsrc/atari7800/exehdr.s +++ b/libsrc/atari7800/exehdr.s @@ -4,15 +4,15 @@ ; This header contains data for emulators ; .export __EXEHDR__: absolute = 1 - .import __CARTSIZE__ + .import __CARTSIZE__ ; ------------------------------------------------------------------------ ; EXE header - .segment "EXEHDR" - .byte 3 ; version - .byte 'A','T','A','R','I','7','8','0','0',' ',' ',' ',' ',' ',' ',' ' - .byte 'G','a','m','e',' ','n','a','m','e',0,0,0,0,0,0,0 - .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - .byte 0,0,>__CARTSIZE__,0 ; Set the cart size in the cfg file + .segment "EXEHDR" + .byte 3 ; version + .byte 'A','T','A','R','I','7','8','0','0',' ',' ',' ',' ',' ',' ',' ' + .byte 'G','a','m','e',' ','n','a','m','e',0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,>__CARTSIZE__,0 ; Set the cart size in the cfg file ; bit 0 - pokey at 4000 ; bit 1 - supergame bank switched ; bit 2 - supergame ram at $4000 @@ -28,19 +28,19 @@ ; bit 12 - souper ; bit 13-15 - Special ; 0 = Normal cart - .byte 0,0 ; 0 = Normal cart - .byte 1 ; 1 = Joystick, 2 = lightgun - .byte 0 ; No joystick 2 - .byte 0 ; bit0 = 0:NTSC,1:PAL bit1 = 0:component,1:composite - .byte 0 ; Save data peripheral - 1 byte (version 2) + .byte 0,0 ; 0 = Normal cart + .byte 1 ; 1 = Joystick, 2 = lightgun + .byte 0 ; No joystick 2 + .byte 0 ; bit0 = 0:NTSC,1:PAL bit1 = 0:component,1:composite + .byte 0 ; Save data peripheral - 1 byte (version 2) ; 0 = None / unknown (default) ; 1 = High Score Cart (HSC) ; 2 = SaveKey - .byte 0 ; 63 Expansion module + .byte 0 ; 63 Expansion module ; 0 = No expansion module (default on all currently released games) ; 1 = Expansion module required - .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 - .byte 0,0,0,0,0,0,0,0 - .byte 'A','C','T','U','A','L',' ','C','A','R','T',' ','D','A','T','A',' ','S','T','A','R','T','S',' ','H','E','R','E' + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0,0,0,0,0 + .byte 'A','C','T','U','A','L',' ','C','A','R','T',' ','D','A','T','A',' ','S','T','A','R','T','S',' ','H','E','R','E' diff --git a/libsrc/atari7800/get_tv.s b/libsrc/atari7800/get_tv.s index 3eb94d54d..12c54f807 100644 --- a/libsrc/atari7800/get_tv.s +++ b/libsrc/atari7800/get_tv.s @@ -3,63 +3,63 @@ ; ; unsigned char get_tv (void) ; - .include "atari7800.inc" - .include "get_tv.inc" - .export _get_tv - .export _paldetected + .include "atari7800.inc" + .include "get_tv.inc" + .export _get_tv + .export _paldetected -.segment "DATA" +.segment "DATA" _paldetected: - .byte $FF + .byte $FF ; --------------------------------------------------------------- ; unsigned char get_tv (void) ; --------------------------------------------------------------- -.segment "CODE" +.segment "CODE" -.proc _get_tv: near +.proc _get_tv: near -.segment "CODE" +.segment "CODE" - ldx #$00 - lda #$FF - cmp _paldetected - bne L8 -L1: lda MSTAT - and #$80 - bne L1 -L2: lda MSTAT - and #$80 - beq L2 -L3: lda MSTAT - and #$80 - bne L3 - lda #$00 - sta M0001 - jmp L5 -L4: sta MWSYNC - sta MWSYNC - dec M0001 -L5: lda MSTAT - and #$80 - beq L4 - lda M0001 - cmp #$78 - bcc L6 - lda #TV::NTSC - jmp L7 -L6: lda #TV::PAL -L7: sta _paldetected - ldx #$00 -L8: lda _paldetected - rts + ldx #$00 + lda #$FF + cmp _paldetected + bne L8 +L1: lda MSTAT + and #$80 + bne L1 +L2: lda MSTAT + and #$80 + beq L2 +L3: lda MSTAT + and #$80 + bne L3 + lda #$00 + sta M0001 + jmp L5 +L4: sta MWSYNC + sta MWSYNC + dec M0001 +L5: lda MSTAT + and #$80 + beq L4 + lda M0001 + cmp #$78 + bcc L6 + lda #TV::NTSC + jmp L7 +L6: lda #TV::PAL +L7: sta _paldetected + ldx #$00 +L8: lda _paldetected + rts -.segment "BSS" +.segment "BSS" M0001: - .res 1,$00 + .res 1,$00 .endproc diff --git a/libsrc/atari7800/irq.s b/libsrc/atari7800/irq.s index ed315a1b7..3cfc74541 100644 --- a/libsrc/atari7800/irq.s +++ b/libsrc/atari7800/irq.s @@ -8,7 +8,7 @@ .include "atari7800.inc" - .code + .code ; ------------------------------------------------------------------------ initirq: @@ -27,10 +27,10 @@ IRQStub: tya pha jsr callirq ; Call the functions - pla + pla tay pla tax -@L1: pla +@L1: pla rti diff --git a/libsrc/atari7800/joy/atari7800-stdjoy.s b/libsrc/atari7800/joy/atari7800-stdjoy.s index 00bb57dcf..cea6625a4 100644 --- a/libsrc/atari7800/joy/atari7800-stdjoy.s +++ b/libsrc/atari7800/joy/atari7800-stdjoy.s @@ -88,74 +88,74 @@ COUNT: ; READ: Read a particular joystick passed in A for 2 fire buttons. readbuttons: - ; Y has joystick of interest 0/1 - ; return value: - ; $00: no button, - ; $01: left/B button, - ; $02: right/A button, - ; $03: both buttons - ; preserves X - tya - beq L5 - ; Joystick 1 processing - ; 7800 joystick 1 buttons - ldy #0 ; ........ - bit INPT2 ; Check for right button - bpl L1 - ldy #2 ; ......2. -L1: bit INPT3 ;Check for left button - bpl L2 - iny ; ......21 -L2: tya - bne L4 ; 7800 mode joystick worked - ; 2600 Joystick 1 - bit INPT5 - bmi L4 -L3: iny ; .......1 - lda #0 ; Fallback to 2600 joystick mode - sta CTLSWB -L4: tya ; ......21 - rts + ; Y has joystick of interest 0/1 + ; return value: + ; $00: no button, + ; $01: left/B button, + ; $02: right/A button, + ; $03: both buttons + ; preserves X + tya + beq L5 + ; Joystick 1 processing + ; 7800 joystick 1 buttons + ldy #0 ; ........ + bit INPT2 ; Check for right button + bpl L1 + ldy #2 ; ......2. +L1: bit INPT3 ;Check for left button + bpl L2 + iny ; ......21 +L2: tya + bne L4 ; 7800 mode joystick worked + ; 2600 Joystick 1 + bit INPT5 + bmi L4 +L3: iny ; .......1 + lda #0 ; Fallback to 2600 joystick mode + sta CTLSWB +L4: tya ; ......21 + rts -L5: ; Joystick 0 processing - ; 7800 joystick 0 buttons - ldy #0 ; ........ - bit INPT0 ; Check for right button - bpl L6 - ldy #2 ; ......2. -L6: bit INPT1 ;Check for left button - bpl L7 - iny ; ......21 -L7: tya - bne L4 ; 7800 mode joystick worked - ; 2600 Joystick 0 - bit INPT4 - bmi L4 - bpl L3 +L5: ; Joystick 0 processing + ; 7800 joystick 0 buttons + ldy #0 ; ........ + bit INPT0 ; Check for right button + bpl L6 + ldy #2 ; ......2. +L6: bit INPT1 ;Check for left button + bpl L7 + iny ; ......21 +L7: tya + bne L4 ; 7800 mode joystick worked + ; 2600 Joystick 0 + bit INPT4 + bmi L4 + bpl L3 READ: - tay ; Store joystick 0/1 in Y - beq L8 - lda SWCHA ; Read directions of joystick 1 - rol ; ...RLDU. - rol ; ..RLDU.. - rol ; .RLDU... - joystick 1 - jmp L9 -L8: lda SWCHA ; Read directions of joystick 0 - ror ; .RLDU... - joystick 0 -L9: tax - jsr readbuttons ; A = ......21, X = .RLDU... - ror ; A = .......2 1 - tay ; Y = .......2 - txa ; A = .RLDU... - ror ; A = 1.RLDU.. - tax ; X = 1.RLDU.. - tya ; A = .......2 - ror ; A = ........ 2 - txa ; A = 1.RLDU.. - rol ; A = .RLDU..2 1 - rol ; A = RLDU..21 - eor #$F0 ; The direction buttons were inversed - and #$F3 - rts + tay ; Store joystick 0/1 in Y + beq L8 + lda SWCHA ; Read directions of joystick 1 + rol ; ...RLDU. + rol ; ..RLDU.. + rol ; .RLDU... - joystick 1 + jmp L9 +L8: lda SWCHA ; Read directions of joystick 0 + ror ; .RLDU... - joystick 0 +L9: tax + jsr readbuttons ; A = ......21, X = .RLDU... + ror ; A = .......2 1 + tay ; Y = .......2 + txa ; A = .RLDU... + ror ; A = 1.RLDU.. + tax ; X = 1.RLDU.. + tya ; A = .......2 + ror ; A = ........ 2 + txa ; A = 1.RLDU.. + rol ; A = .RLDU..2 1 + rol ; A = RLDU..21 + eor #$F0 ; The direction buttons were inversed + and #$F3 + rts diff --git a/libsrc/lynx/bootldr.s b/libsrc/lynx/bootldr.s index 58f04afc6..c8b4ca402 100644 --- a/libsrc/lynx/bootldr.s +++ b/libsrc/lynx/bootldr.s @@ -61,7 +61,7 @@ ; 00 00 00 00 ; spares ; 00 ; End of encrypted header mark ; -; .reloc +; .reloc ;********************************** ; After compilation, encryption and obfuscation it turns into this. ;********************************** diff --git a/samples/sym1/symNotepad.c b/samples/sym1/symNotepad.c index 1d0541ab6..6fb6db902 100644 --- a/samples/sym1/symNotepad.c +++ b/samples/sym1/symNotepad.c @@ -68,7 +68,7 @@ int main (void) { } else { memset ( tapio, 0, TAPIO_MAX_SIZE ); - } + } while ( running ) { @@ -138,21 +138,21 @@ int main (void) { } else { - for ( l = 0; l <= heap_size; l++ ) { - buffer[l] = tapio[l]; - } + for ( l = 0; l <= heap_size; l++ ) { + buffer[l] = tapio[l]; + } - p = strlen ( buffer ); + p = strlen ( buffer ); - putchar ( '\r' ); - for ( l = 0; l < 25; l++ ) { - putchar ( '\n' ); - } - puts ("===================== Sym-1 Notepad ====================\n"); + putchar ( '\r' ); + for ( l = 0; l < 25; l++ ) { + putchar ( '\n' ); + } + puts ("===================== Sym-1 Notepad ====================\n"); - for ( l = 0; l <= p; l++ ) { - putchar ( buffer[l] ); - } + for ( l = 0; l <= p; l++ ) { + putchar ( buffer[l] ); + } } } else if ( c == 0x03 ) { // Clear diff --git a/test/val/bug1696.c b/test/val/bug1696.c index c31dc257b..72cf9cc7e 100644 --- a/test/val/bug1696.c +++ b/test/val/bug1696.c @@ -29,16 +29,16 @@ static unsigned char failures = 0; int main(void) { - unsigned int x = 65535; - unsigned short y = 65535; - if (!(x > 1L)) { - printf("x = %ld but x > 1L failed\n", (long)x); - ++failures; - } - if (!(y == 65535L)) { - printf("y = %ld but y == 65535L failed\n", (long)y); - ++failures; - } + unsigned int x = 65535; + unsigned short y = 65535; + if (!(x > 1L)) { + printf("x = %ld but x > 1L failed\n", (long)x); + ++failures; + } + if (!(y == 65535L)) { + printf("y = %ld but y == 65535L failed\n", (long)y); + ++failures; + } printf("failures: %u\n", failures); return failures; } From 59d386e18ff0a1b42f19a38df7b8a75591dc7868 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 18:18:51 +0200 Subject: [PATCH 1524/2710] added TAB checker script, to be added to the PR checker action --- .github/checks/Makefile | 7 +++++++ .github/checks/tabs.sh | 16 ++++++++++++++++ Makefile | 5 ++++- 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 .github/checks/Makefile create mode 100755 .github/checks/tabs.sh diff --git a/.github/checks/Makefile b/.github/checks/Makefile new file mode 100644 index 000000000..3e85c0fd7 --- /dev/null +++ b/.github/checks/Makefile @@ -0,0 +1,7 @@ + +.PHONY: tabs + +check: tabs + +tabs: tabs.sh + @./tabs.sh diff --git a/.github/checks/tabs.sh b/.github/checks/tabs.sh new file mode 100755 index 000000000..ad10dfe14 --- /dev/null +++ b/.github/checks/tabs.sh @@ -0,0 +1,16 @@ +#! /bin/bash +OLDCWD=`pwd` +SCRIPT_PATH=`dirname $0` +cd $SCRIPT_PATH/../../ + +FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l $'\t' | grep -v "libwrk/" | grep -v "testwrk/"` + +cd $OLDCWD + +if [ x"$FILES"x != xx ]; then + echo "error: found TABs in the following files:" + for n in $FILES; do + echo $n + done + exit -1 +fi diff --git a/Makefile b/Makefile index 540c214fc..f565727e6 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples test util +.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples test util check .SUFFIXES: @@ -24,6 +24,9 @@ samples: test: @$(MAKE) -C test --no-print-directory $@ +check: + @$(MAKE) -C .github/checks --no-print-directory $@ + util: @$(MAKE) -C util --no-print-directory $@ From db20b1dc14c9409728462be3b1b18302fa9768e1 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 18:21:57 +0200 Subject: [PATCH 1525/2710] run style checks on PR --- .github/workflows/build-on-pull-request.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 6ab8543de..e9176f8c4 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -21,6 +21,9 @@ jobs: - name: Checkout Source uses: actions/checkout@v2 + - name: Do some simple style checks + shell: bash + run: make -j2 check - name: Build the tools. shell: bash run: make -j2 bin USER_CFLAGS=-Werror From 5d45c655bd22920eadd0fdea7f2bb34a59310424 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 18:32:49 +0200 Subject: [PATCH 1526/2710] add check action also to the snapshot build --- .github/workflows/snapshot-on-push-master.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 48a63a12c..798381951 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -46,6 +46,9 @@ jobs: - name: Checkout Source uses: actions/checkout@v2 + - name: Do some simple style checks + shell: bash + run: make -j2 check - name: Build the tools. shell: bash run: | From be22b8ad4d2619292b5027e730d43668a37db733 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 19:51:48 +0200 Subject: [PATCH 1527/2710] add missing newline to a bunch of files --- libsrc/apple2/color.s | 2 +- libsrc/geos-cbm/system/initdoneio.s | 4 ++-- libsrc/geos-cbm/system/tobasic.s | 2 +- libsrc/geos-common/memory/crc.s | 1 - libsrc/geos-common/menuicon/doicons.s | 2 +- libsrc/geos-common/menuicon/domenu.s | 2 +- libsrc/geos-common/menuicon/dopreviousmenu.s | 2 +- libsrc/geos-common/menuicon/gotofirstmenu.s | 2 +- libsrc/geos-common/menuicon/recoverallmenus.s | 2 +- libsrc/geos-common/menuicon/recovermenu.s | 2 +- libsrc/geos-common/menuicon/redomenu.s | 2 +- .../geos-common/mousesprite/clearmousemode.s | 2 +- libsrc/geos-common/mousesprite/disablsprite.s | 2 +- libsrc/geos-common/mousesprite/drawsprite.s | 2 +- libsrc/geos-common/mousesprite/enablsprite.s | 2 +- .../geos-common/mousesprite/inittextprompt.s | 2 +- libsrc/geos-common/mousesprite/mouseoff.s | 2 +- libsrc/geos-common/mousesprite/mouseup.s | 2 +- libsrc/geos-common/mousesprite/possprite.s | 2 +- .../geos-common/mousesprite/startmousemode.s | 2 +- libsrc/geos-common/system/callroutine.s | 2 +- libsrc/geos-common/system/firstinit.s | 2 +- libsrc/geos-common/system/panic.s | 2 +- libsrc/osic1p/osiscreen.inc | 23 ++++++++++--------- test/err/cc65091001.c | 2 +- test/ref/cc65070303.c | 2 +- test/ref/cc65080227.c | 2 +- test/ref/cc65101209.c | 2 +- test/ref/cc65101216.c | 2 +- test/val/cc65091020.c | 2 +- 30 files changed, 41 insertions(+), 41 deletions(-) diff --git a/libsrc/apple2/color.s b/libsrc/apple2/color.s index 3b0c5b6d4..c54207288 100644 --- a/libsrc/apple2/color.s +++ b/libsrc/apple2/color.s @@ -13,4 +13,4 @@ _textcolor := return1 _bgcolor := return0 -_bordercolor := return0 \ No newline at end of file +_bordercolor := return0 diff --git a/libsrc/geos-cbm/system/initdoneio.s b/libsrc/geos-cbm/system/initdoneio.s index b5e51524a..4b8762bad 100644 --- a/libsrc/geos-cbm/system/initdoneio.s +++ b/libsrc/geos-cbm/system/initdoneio.s @@ -11,5 +11,5 @@ .include "jumptab.inc" _InitForIO = InitForIO - -_DoneWithIO = DoneWithIO \ No newline at end of file + +_DoneWithIO = DoneWithIO diff --git a/libsrc/geos-cbm/system/tobasic.s b/libsrc/geos-cbm/system/tobasic.s index cb47da531..59bdc2936 100644 --- a/libsrc/geos-cbm/system/tobasic.s +++ b/libsrc/geos-cbm/system/tobasic.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_ToBASIC = ToBASIC \ No newline at end of file +_ToBASIC = ToBASIC diff --git a/libsrc/geos-common/memory/crc.s b/libsrc/geos-common/memory/crc.s index 9ec2feb0c..94ab98f34 100644 --- a/libsrc/geos-common/memory/crc.s +++ b/libsrc/geos-common/memory/crc.s @@ -17,4 +17,3 @@ _CRC: lda r2L ldx r2H rts - \ No newline at end of file diff --git a/libsrc/geos-common/menuicon/doicons.s b/libsrc/geos-common/menuicon/doicons.s index 5ddf06d01..b0456e67f 100644 --- a/libsrc/geos-common/menuicon/doicons.s +++ b/libsrc/geos-common/menuicon/doicons.s @@ -13,4 +13,4 @@ _DoIcons: sta r0L stx r0H - jmp DoIcons \ No newline at end of file + jmp DoIcons diff --git a/libsrc/geos-common/menuicon/domenu.s b/libsrc/geos-common/menuicon/domenu.s index 1624a3852..43a2b5a0c 100644 --- a/libsrc/geos-common/menuicon/domenu.s +++ b/libsrc/geos-common/menuicon/domenu.s @@ -14,4 +14,4 @@ _DoMenu: sta r0L stx r0H lda #0 - jmp DoMenu \ No newline at end of file + jmp DoMenu diff --git a/libsrc/geos-common/menuicon/dopreviousmenu.s b/libsrc/geos-common/menuicon/dopreviousmenu.s index 5ac19b57a..1a92e1fe1 100644 --- a/libsrc/geos-common/menuicon/dopreviousmenu.s +++ b/libsrc/geos-common/menuicon/dopreviousmenu.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_DoPreviousMenu = DoPreviousMenu \ No newline at end of file +_DoPreviousMenu = DoPreviousMenu diff --git a/libsrc/geos-common/menuicon/gotofirstmenu.s b/libsrc/geos-common/menuicon/gotofirstmenu.s index b5f2306db..a8d00b132 100644 --- a/libsrc/geos-common/menuicon/gotofirstmenu.s +++ b/libsrc/geos-common/menuicon/gotofirstmenu.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_GotoFirstMenu = GotoFirstMenu \ No newline at end of file +_GotoFirstMenu = GotoFirstMenu diff --git a/libsrc/geos-common/menuicon/recoverallmenus.s b/libsrc/geos-common/menuicon/recoverallmenus.s index 03a8368bf..0420e88be 100644 --- a/libsrc/geos-common/menuicon/recoverallmenus.s +++ b/libsrc/geos-common/menuicon/recoverallmenus.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_RecoverAllMenus = RecoverAllMenus \ No newline at end of file +_RecoverAllMenus = RecoverAllMenus diff --git a/libsrc/geos-common/menuicon/recovermenu.s b/libsrc/geos-common/menuicon/recovermenu.s index 638d03d16..a8a6870c7 100644 --- a/libsrc/geos-common/menuicon/recovermenu.s +++ b/libsrc/geos-common/menuicon/recovermenu.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_RecoverMenu = RecoverMenu \ No newline at end of file +_RecoverMenu = RecoverMenu diff --git a/libsrc/geos-common/menuicon/redomenu.s b/libsrc/geos-common/menuicon/redomenu.s index 44d62e807..818102f8b 100644 --- a/libsrc/geos-common/menuicon/redomenu.s +++ b/libsrc/geos-common/menuicon/redomenu.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_ReDoMenu = ReDoMenu \ No newline at end of file +_ReDoMenu = ReDoMenu diff --git a/libsrc/geos-common/mousesprite/clearmousemode.s b/libsrc/geos-common/mousesprite/clearmousemode.s index 01e659567..635a0fcd4 100644 --- a/libsrc/geos-common/mousesprite/clearmousemode.s +++ b/libsrc/geos-common/mousesprite/clearmousemode.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_ClearMouseMode = ClearMouseMode \ No newline at end of file +_ClearMouseMode = ClearMouseMode diff --git a/libsrc/geos-common/mousesprite/disablsprite.s b/libsrc/geos-common/mousesprite/disablsprite.s index 95d298094..e6c769e29 100644 --- a/libsrc/geos-common/mousesprite/disablsprite.s +++ b/libsrc/geos-common/mousesprite/disablsprite.s @@ -12,4 +12,4 @@ _DisablSprite: sta r3L - jmp DisablSprite \ No newline at end of file + jmp DisablSprite diff --git a/libsrc/geos-common/mousesprite/drawsprite.s b/libsrc/geos-common/mousesprite/drawsprite.s index 0f4d611c0..90382c63c 100644 --- a/libsrc/geos-common/mousesprite/drawsprite.s +++ b/libsrc/geos-common/mousesprite/drawsprite.s @@ -16,4 +16,4 @@ _DrawSprite: stx r4H jsr popa sta r3L - jmp DrawSprite \ No newline at end of file + jmp DrawSprite diff --git a/libsrc/geos-common/mousesprite/enablsprite.s b/libsrc/geos-common/mousesprite/enablsprite.s index a271d2cdb..404a7cb05 100644 --- a/libsrc/geos-common/mousesprite/enablsprite.s +++ b/libsrc/geos-common/mousesprite/enablsprite.s @@ -12,4 +12,4 @@ _EnablSprite: sta r3L - jmp EnablSprite \ No newline at end of file + jmp EnablSprite diff --git a/libsrc/geos-common/mousesprite/inittextprompt.s b/libsrc/geos-common/mousesprite/inittextprompt.s index 2fc5e58fc..e0c4cc1cd 100644 --- a/libsrc/geos-common/mousesprite/inittextprompt.s +++ b/libsrc/geos-common/mousesprite/inittextprompt.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_InitTextPrompt = InitTextPrompt \ No newline at end of file +_InitTextPrompt = InitTextPrompt diff --git a/libsrc/geos-common/mousesprite/mouseoff.s b/libsrc/geos-common/mousesprite/mouseoff.s index a918bb612..b48d30807 100644 --- a/libsrc/geos-common/mousesprite/mouseoff.s +++ b/libsrc/geos-common/mousesprite/mouseoff.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_MouseOff = MouseOff \ No newline at end of file +_MouseOff = MouseOff diff --git a/libsrc/geos-common/mousesprite/mouseup.s b/libsrc/geos-common/mousesprite/mouseup.s index 45b4e83c2..8f7b4e0f6 100644 --- a/libsrc/geos-common/mousesprite/mouseup.s +++ b/libsrc/geos-common/mousesprite/mouseup.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_MouseUp = MouseUp \ No newline at end of file +_MouseUp = MouseUp diff --git a/libsrc/geos-common/mousesprite/possprite.s b/libsrc/geos-common/mousesprite/possprite.s index 24e8bd14c..5543cb3c6 100644 --- a/libsrc/geos-common/mousesprite/possprite.s +++ b/libsrc/geos-common/mousesprite/possprite.s @@ -26,4 +26,4 @@ _PosSprite: sta r5L jsr popa sta r3L - jmp PosSprite \ No newline at end of file + jmp PosSprite diff --git a/libsrc/geos-common/mousesprite/startmousemode.s b/libsrc/geos-common/mousesprite/startmousemode.s index 06a547714..26d969744 100644 --- a/libsrc/geos-common/mousesprite/startmousemode.s +++ b/libsrc/geos-common/mousesprite/startmousemode.s @@ -11,4 +11,4 @@ _StartMouseMode: clc - jmp StartMouseMode \ No newline at end of file + jmp StartMouseMode diff --git a/libsrc/geos-common/system/callroutine.s b/libsrc/geos-common/system/callroutine.s index 54de4cac7..3213d507e 100644 --- a/libsrc/geos-common/system/callroutine.s +++ b/libsrc/geos-common/system/callroutine.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_CallRoutine = CallRoutine \ No newline at end of file +_CallRoutine = CallRoutine diff --git a/libsrc/geos-common/system/firstinit.s b/libsrc/geos-common/system/firstinit.s index c0695ee47..617ecf4d6 100644 --- a/libsrc/geos-common/system/firstinit.s +++ b/libsrc/geos-common/system/firstinit.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_FirstInit = FirstInit \ No newline at end of file +_FirstInit = FirstInit diff --git a/libsrc/geos-common/system/panic.s b/libsrc/geos-common/system/panic.s index 9ea916023..d34b74a5a 100644 --- a/libsrc/geos-common/system/panic.s +++ b/libsrc/geos-common/system/panic.s @@ -9,4 +9,4 @@ .include "jumptab.inc" -_Panic = Panic \ No newline at end of file +_Panic = Panic diff --git a/libsrc/osic1p/osiscreen.inc b/libsrc/osic1p/osiscreen.inc index 9399d7eee..ee2e52174 100644 --- a/libsrc/osic1p/osiscreen.inc +++ b/libsrc/osic1p/osiscreen.inc @@ -3,7 +3,7 @@ ; .include "extzp.inc" - + .linecont + ; @@ -13,7 +13,7 @@ ; Macro implementation of internal screensize ; function for given width and height in ; characters - + .export screensize .proc screensize @@ -34,11 +34,11 @@ lda #<ScrBase ; Fill whole video RAM with blanks by calling ldx #>ScrBase ; memset appropriately jsr pushax - + lda #' ' ldx #$00 jsr pushax - + lda #<ScrRamSize ldx #>ScrRamSize jsr _memset @@ -46,7 +46,7 @@ lda #$00 ; Cursor in upper left corner sta CURS_X sta CURS_Y - + jmp plot ; Set the cursor position .endproc @@ -112,12 +112,12 @@ newline: lda #<(ScrBase + ScrFirstChar) ldx #>(ScrBase + ScrFirstChar) jsr pushax - + ; Scroll source address lda #<(ScrBase + ScrFirstChar + ScrollDist) ldx #>(ScrBase + ScrFirstChar + ScrollDist) jsr pushax - + ; Number of characters to move lda #<ScrollLength ldx #>ScrollLength @@ -129,7 +129,7 @@ newline: sta ptr1 lda #>(ScrBase + ScrFirstChar + ScrollLength) sta ptr1+1 - + ldy #ScrWidth ; Fill last line with blanks lda #' ' clrln: sta (ptr1),y @@ -150,7 +150,7 @@ putchar: ldy CURS_X sta (SCREEN_PTR),y ; Set char rts - + .endmacro .macro osi_screen_funcs ScrBase, ScrRamSize, ScrFirstChar, \ @@ -167,12 +167,13 @@ ScrTabLo: .repeat ScrHeight, I .byte <(ScrBase + ScrFirstChar + I * ScrollDist) .endrep - + ScrTabHi: .repeat ScrHeight, I .byte >(ScrBase + ScrFirstChar + I * ScrollDist) .endrep + .code osi_cputfuncs ScrBase, ScrFirstChar, ScrWidth, ScrHeight, \ @@ -180,4 +181,4 @@ osi_cputfuncs ScrBase, ScrFirstChar, ScrWidth, ScrHeight, \ osi_screensize ScrWidth, ScrHeight osi_clrscr ScrBase, ScrRamSize -.endmacro \ No newline at end of file +.endmacro diff --git a/test/err/cc65091001.c b/test/err/cc65091001.c index 65ce6ec83..8bcf158ac 100644 --- a/test/err/cc65091001.c +++ b/test/err/cc65091001.c @@ -27,4 +27,4 @@ int main() { printf("it works :)\n"); return 0; -} \ No newline at end of file +} diff --git a/test/ref/cc65070303.c b/test/ref/cc65070303.c index 6dbceeefc..049f14c40 100644 --- a/test/ref/cc65070303.c +++ b/test/ref/cc65070303.c @@ -35,4 +35,4 @@ seems to work. greetings,    Andreas -*/ \ No newline at end of file +*/ diff --git a/test/ref/cc65080227.c b/test/ref/cc65080227.c index 78afbb2c2..b6d068b2a 100644 --- a/test/ref/cc65080227.c +++ b/test/ref/cc65080227.c @@ -36,4 +36,4 @@ int main(void) 000023r 1 A4 rr ldy sreg 000025r 1 8C rr rr sty _b+2 000028r 1 8C rr rr sty _b+3 ; lost 4th BYTE ! -*/ \ No newline at end of file +*/ diff --git a/test/ref/cc65101209.c b/test/ref/cc65101209.c index c14543640..daeab8509 100644 --- a/test/ref/cc65101209.c +++ b/test/ref/cc65101209.c @@ -35,4 +35,4 @@ So testing with 999 gives: 999 mod 999 is 0 This seems to be systematic. -*/ \ No newline at end of file +*/ diff --git a/test/ref/cc65101216.c b/test/ref/cc65101216.c index eaaf0b3e4..1f6101afa 100644 --- a/test/ref/cc65101216.c +++ b/test/ref/cc65101216.c @@ -24,4 +24,4 @@ int main() printf("a / b = %d", c); return 0; -} \ No newline at end of file +} diff --git a/test/val/cc65091020.c b/test/val/cc65091020.c index d23b70a06..8f6b11761 100644 --- a/test/val/cc65091020.c +++ b/test/val/cc65091020.c @@ -24,4 +24,4 @@ int main() { return 0; } -/* Assert fails. (SVN rev 4381) */ \ No newline at end of file +/* Assert fails. (SVN rev 4381) */ From 2cc46e11d30053d762481346e34fe7600e7ba5ee Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 19:59:25 +0200 Subject: [PATCH 1528/2710] add comment explaining what the empty file is about --- libsrc/cx16/cpeeks.s | 1 + 1 file changed, 1 insertion(+) diff --git a/libsrc/cx16/cpeeks.s b/libsrc/cx16/cpeeks.s index e69de29bb..281cbd75d 100644 --- a/libsrc/cx16/cpeeks.s +++ b/libsrc/cx16/cpeeks.s @@ -0,0 +1 @@ +; empty file to prevent cbm/cpeeks.s being pulled into the cx16 lib From 302016997aa467f79d62715c603a375383e41cc4 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 20:00:10 +0200 Subject: [PATCH 1529/2710] add more style checks --- .github/checks/Makefile | 10 +++++++++- .github/checks/lastline.sh | 22 ++++++++++++++++++++++ .github/checks/spaces.sh | 16 ++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100755 .github/checks/lastline.sh create mode 100755 .github/checks/spaces.sh diff --git a/.github/checks/Makefile b/.github/checks/Makefile index 3e85c0fd7..827606d01 100644 --- a/.github/checks/Makefile +++ b/.github/checks/Makefile @@ -1,7 +1,15 @@ .PHONY: tabs -check: tabs +check: tabs lastline tabs: tabs.sh @./tabs.sh + +lastline: lastline.sh + @./lastline.sh + +# checks that will currently fail (on a lot of files), so they are not included +# in the general "check" action +spaces: spaces.sh + @./spaces.sh diff --git a/.github/checks/lastline.sh b/.github/checks/lastline.sh new file mode 100755 index 000000000..d455481d1 --- /dev/null +++ b/.github/checks/lastline.sh @@ -0,0 +1,22 @@ +#! /bin/bash +OLDCWD=`pwd` +SCRIPT_PATH=`dirname $0` +cd $SCRIPT_PATH/../../ + +nl=' +' +nl=$'\n' +FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | while read f; do + t=$(tail -c2 $f; printf x); r1="${nl}$"; + [[ ${t%x} =~ $r1 ]] || echo "$f" +done` + +cd $OLDCWD + +if [ x"$FILES"x != xx ]; then + echo "error: found following files that have no newline at the end:" + for n in $FILES; do + echo $n + done + exit -1 +fi diff --git a/.github/checks/spaces.sh b/.github/checks/spaces.sh new file mode 100755 index 000000000..309ba9ac1 --- /dev/null +++ b/.github/checks/spaces.sh @@ -0,0 +1,16 @@ +#! /bin/bash +OLDCWD=`pwd` +SCRIPT_PATH=`dirname $0` +cd $SCRIPT_PATH/../../ + +FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l ' $' | grep -v "libwrk/" | grep -v "testwrk/"` + +cd $OLDCWD + +if [ x"$FILES"x != xx ]; then + echo "error: found dangling spaces in the following files:" + for n in $FILES; do + echo $n + done + exit -1 +fi From 3e84da0aca1d207d709a01aee0284403ae7a0639 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 16 Apr 2022 22:08:03 +0200 Subject: [PATCH 1530/2710] updated a bit --- Contributing.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Contributing.md b/Contributing.md index 1aeae7786..c8681c7ee 100644 --- a/Contributing.md +++ b/Contributing.md @@ -11,8 +11,19 @@ This document contains all kinds of information that you should know if you want ## All Sources +### TABs and spaces + +This is an ongoing controversial topic - everyone knows that. However, the following is how we do it :) + * TAB characters must be expanded to spaces. +* 4 spaces per indention level (rather than 8) are preferred, especially if there are many different levels. +* No extra spaces at the end of lines. * All text files must end with new-line characters. Don't leave the last line "dangling". + +The (bash) scipts used to check the above rules can be found in ```.github/check``` + +### misc + * 80 characters is the desired maximum width of files. But, it isn't a "strong" rule; sometimes, you will want to type longer lines, in order to keep the parts of expressions or comments together on the same line. * You should avoid typing non-ASCII characters. * If you change "normal" source code into comments, then you must add a comment about why that code is a comment. @@ -78,6 +89,19 @@ color := $0787 * Two blank lines between ```<sect1>``` sections. * One blank line between other sections. +# Library implementation rules + +* By default the toolchain must output a "standard" binary for the platform, no emulator formats, no extra headers used by tools. If the resulting binaries can not be run as is on emulators or eg flash cartridges, the process of converting them to something that can be used with these should be documented in the user manual. +* Generally every function should live in a seperate source file - unless the functions are so closely related that splitting makes no sense. +* Source files should not contain commented out code - if they do, there should be a comment that explains why that commented out code exists. + +# Makefile rules + +* Makefiles must generally work on both *nix (ba)sh and windows cmd.exe. +* Makefiles must not use external tools that are not provided by the cc65 toolchain itself. + +The only exception to the above are actions that are exclusive to the github actions - those may rely on bash and/or linux tools. + # Documentation rules ## User manual (LinuxDoc) From c317319d099c3dae5b5db2c5b65a69fd6a834408 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:04:58 +0200 Subject: [PATCH 1531/2710] remove dangling spaces --- asminc/_file.inc | 2 +- asminc/atari5200.inc | 14 ++++++------ asminc/atari_antic.inc | 14 ++++++------ asminc/em-kernel.inc | 2 +- asminc/errno.inc | 2 +- asminc/lynx.inc | 16 ++++++------- asminc/opcodes.inc | 34 +++++++++++++-------------- asminc/telestrat.inc | 48 +++++++++++++++++++-------------------- asminc/tgi-vectorfont.inc | 2 +- asminc/utsname.inc | 2 +- asminc/zeropage.inc | 2 +- 11 files changed, 69 insertions(+), 69 deletions(-) diff --git a/asminc/_file.inc b/asminc/_file.inc index 2f9938a3e..a9ac1e34a 100644 --- a/asminc/_file.inc +++ b/asminc/_file.inc @@ -24,4 +24,4 @@ _FPUSHBACK = $08 ; File table .global __filetab - + diff --git a/asminc/atari5200.inc b/asminc/atari5200.inc index a17268de2..b560c06af 100644 --- a/asminc/atari5200.inc +++ b/asminc/atari5200.inc @@ -7,7 +7,7 @@ ;------------------------------------------------------------------------- ; ATASCII CHARACTER DEFS ;------------------------------------------------------------------------- - + ATEOL = $9B ; END-OF-LINE, used by CONIO ;------------------------------------------------------------------------- @@ -27,9 +27,9 @@ CH_VLINE = $01 ; exclamation mark POKMSK = $00 ; Mask for Pokey IRQ enable RTCLOK = $01 ; 60 hz. clock -JUMP = $01 +JUMP = $01 CRITIC = $03 ; Critical section -ATRACT = $04 ; Attract Mode +ATRACT = $04 ; Attract Mode SDLSTL = $05 ; DLISTL Shadow SDLSTH = $06 ; DLISTH " @@ -66,20 +66,20 @@ SAVMSC = $1B ; pointer to screen memory (conio) ;------------------------------------------------------------------------- ;Interrupt Vectors - -VIMIRQ = $0200 ; Immediate IRQ + +VIMIRQ = $0200 ; Immediate IRQ ; Preset $FC03 (SYSIRQ) VVBLKI = $0202 ; Vblank immediate ; Preset $FCB8 (SYSVBL) VVBLKD = $0204 ; Vblank deferred ; Preset $FCB2 (XITVBL) -VDSLST = $0206 ; Display List +VDSLST = $0206 ; Display List ; Preset $FEA1 (OSDLI) VKYBDI = $0208 ; Keyboard immediate ; Preset $FD02 (SYSKBD) VKYBDF = $020A ; Deferred Keyboard ; Preset $FCB2 (XITVBL) -VTRIGR = $020C ; Soft Trigger +VTRIGR = $020C ; Soft Trigger VBRKOP = $020E ; BRK Opcode VSERIN = $0210 ; Serial in Ready VSEROR = $0212 ; Serial Out Ready diff --git a/asminc/atari_antic.inc b/asminc/atari_antic.inc index a4557c7b4..9a097e05a 100644 --- a/asminc/atari_antic.inc +++ b/asminc/atari_antic.inc @@ -76,13 +76,13 @@ DL_CHR20x8x2 = 6 ; colour (duochrome per character), 20 character DL_CHR20x16x2 = 7 ; colour (duochrome per character), 20 character & 16 scanlines per mode line (GR. 2) DL_MAP40x8x4 = 8 ; colour, 40 pixel & 8 scanlines per mode line (GR. 3) -DL_MAP80x4x2 = 9 ; 'duochrome', 80 pixel & 4 scanlines per mode line (GR.4) -DL_MAP80x4x4 = 10 ; colour, 80 pixel & 4 scanlines per mode line (GR.5) -DL_MAP160x2x2 = 11 ; 'duochrome', 160 pixel & 2 scanlines per mode line (GR.6) -DL_MAP160x1x2 = 12 ; 'duochrome', 160 pixel & 1 scanline per mode line (GR.14) -DL_MAP160x2x4 = 13 ; 4 colours, 160 pixel & 2 scanlines per mode line (GR.7) -DL_MAP160x1x4 = 14 ; 4 colours, 160 pixel & 1 scanline per mode line (GR.15) -DL_MAP320x1x1 = 15 ; monochrome, 320 pixel & 1 scanline per mode line (GR.8) +DL_MAP80x4x2 = 9 ; 'duochrome', 80 pixel & 4 scanlines per mode line (GR.4) +DL_MAP80x4x4 = 10 ; colour, 80 pixel & 4 scanlines per mode line (GR.5) +DL_MAP160x2x2 = 11 ; 'duochrome', 160 pixel & 2 scanlines per mode line (GR.6) +DL_MAP160x1x2 = 12 ; 'duochrome', 160 pixel & 1 scanline per mode line (GR.14) +DL_MAP160x2x4 = 13 ; 4 colours, 160 pixel & 2 scanlines per mode line (GR.7) +DL_MAP160x1x4 = 14 ; 4 colours, 160 pixel & 1 scanline per mode line (GR.15) +DL_MAP320x1x1 = 15 ; monochrome, 320 pixel & 1 scanline per mode line (GR.8) ; modifiers on mode lines... diff --git a/asminc/em-kernel.inc b/asminc/em-kernel.inc index 889ffba98..9e89b6f4e 100644 --- a/asminc/em-kernel.inc +++ b/asminc/em-kernel.inc @@ -75,7 +75,7 @@ EMD_API_VERSION = $02 ;------------------------------------------------------------------------------ ; Driver entry points - + .global emd_install .global emd_uninstall .global emd_pagecount diff --git a/asminc/errno.inc b/asminc/errno.inc index 6e5cce42b..1efe88cda 100644 --- a/asminc/errno.inc +++ b/asminc/errno.inc @@ -1,4 +1,4 @@ -; +; ; Ullrich von Bassewitz, 16.05.2000 ; diff --git a/asminc/lynx.inc b/asminc/lynx.inc index 81a60bf2e..403d15d07 100644 --- a/asminc/lynx.inc +++ b/asminc/lynx.inc @@ -135,35 +135,35 @@ STIMCTLB = $FD1F TIM0BKUP = $FD00 TIM0CTLA = $FD01 TIM0CNT = $FD02 -TIM0CTLB = $FD03 +TIM0CTLB = $FD03 TIM1BKUP = $FD04 TIM1CTLA = $FD05 TIM1CNT = $FD06 -TIM1CTLB = $FD07 +TIM1CTLB = $FD07 TIM2BKUP = $FD08 TIM2CTLA = $FD09 TIM2CNT = $FD0A -TIM2CTLB = $FD0B +TIM2CTLB = $FD0B TIM3BKUP = $FD0C TIM3CTLA = $FD0D TIM3CNT = $FD0E -TIM3CTLB = $FD0F +TIM3CTLB = $FD0F TIM4BKUP = $FD10 TIM4CTLA = $FD11 TIM4CNT = $FD12 -TIM4CTLB = $FD13 +TIM4CTLB = $FD13 TIM5BKUP = $FD14 TIM5CTLA = $FD15 TIM5CNT = $FD16 -TIM5CTLB = $FD17 +TIM5CTLB = $FD17 TIM6BKUP = $FD18 TIM6CTLA = $FD19 TIM6CNT = $FD1A -TIM6CTLB = $FD1B +TIM6CTLB = $FD1B TIM7BKUP = $FD1C TIM7CTLA = $FD1D TIM7CNT = $FD1E -TIM7CTLB = $FD1F +TIM7CTLB = $FD1F ; Mikey Audio diff --git a/asminc/opcodes.inc b/asminc/opcodes.inc index e6b7e73df..b610360e1 100644 --- a/asminc/opcodes.inc +++ b/asminc/opcodes.inc @@ -3,23 +3,23 @@ ; ; Christian Krüger, latest change: 18-Sep-2010 ; -; This software is provided 'as-is', without any expressed or implied -; warranty. In no event will the authors be held liable for any damages -; arising from the use of this software. -; -; Permission is granted to anyone to use this software for any purpose, -; including commercial applications, and to alter it and redistribute it -; freely, subject to the following restrictions: -; -; 1. The origin of this software must not be misrepresented; you must not -; claim that you wrote the original software. If you use this software -; in a product, an acknowledgment in the product documentation would be -; appreciated but is not required. -; 2. Altered source versions must be plainly marked as such, and must not -; be misrepresented as being the original software. -; 3. This notice may not be removed or altered from any source -; distribution. -; +; This software is provided 'as-is', without any expressed or implied +; warranty. In no event will the authors be held liable for any damages +; arising from the use of this software. +; +; Permission is granted to anyone to use this software for any purpose, +; including commercial applications, and to alter it and redistribute it +; freely, subject to the following restrictions: +; +; 1. The origin of this software must not be misrepresented; you must not +; claim that you wrote the original software. If you use this software +; in a product, an acknowledgment in the product documentation would be +; appreciated but is not required. +; 2. Altered source versions must be plainly marked as such, and must not +; be misrepresented as being the original software. +; 3. This notice may not be removed or altered from any source +; distribution. +; ; Opcode-Table ; ------------ diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index 79ac2d566..703dbaa3b 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -17,7 +17,7 @@ FNAME_LEN = 11 ; Maximum length of file-name ; --------------------------------------------------------------------------- ; I/O Identifier ; Theses identifers are used for channel management -; +; XKBD = $80 ; Keyboard XRSE = $83 ; RS232 in @@ -87,27 +87,27 @@ HRSFB := $57 VABKP1 := $58 ; RS232T -; b0-b3 : speed +; b0-b3 : speed ; 1111 => 19200 bps (please note that telestrat can't handle this speed without stopping all IRQ except ACIA's one) ; 1100 => 9600 bps (default from TELEMON) -; 1110 => 4800 bps -; 1010 => 2400 bps -; 1000 => 1200 bps -; 0111 => 600 bps -; 0110 => 300 bps -; 0101 => 150 bps -; 0010 => 75 bps +; 1110 => 4800 bps +; 1010 => 2400 bps +; 1000 => 1200 bps +; 0111 => 600 bps +; 0110 => 300 bps +; 0101 => 150 bps +; 0010 => 75 bps ; b4 : 0 external clock, 1 internal clock ; b6-b5 : 00 8 bits ; 01 7 bits ; 10 6 bits ; 11 5 bits -; b7 : 0 a stop +; b7 : 0 a stop RS232T := $59 -; RS232C +; RS232C ; b0-b3 : 0 ; b4 : 1 if echo ; b5 : 1 if parity @@ -218,7 +218,7 @@ SCREEN := $BB80 ; TELEMON primitives (2.4 & 3.x) -; all values are used to call bank 7 of telestrat cardridge. It works with 'brk value' +; all values are used to call bank 7 of telestrat cardridge. It works with 'brk value' XOP0 = $00 ; Open device on channel 0 XOP1 = $01 ; Open device on channel 1 XOP2 = $02 ; Open device on channel 2 @@ -281,8 +281,8 @@ XWRCLK = $3E ; Displays clock in the address in A & Y registe XSONPS = $40 ; Send data to PSG register (14 values) XOUPS = $42 ; Send Oups sound into PSG XPLAY = $43 ; Play a sound -XSOUND = $44 -XMUSIC = $45 +XSOUND = $44 +XMUSIC = $45 XZAP = $46 ; Send Zap sound to PSG XSHOOT = $47 @@ -303,13 +303,13 @@ XFWR = $4E ; Put a char on the first screen. Only available ; Keyboard primitives XALLKB = $50 ; Read Keyboard, and populate KBDCOL XKBDAS = $51 ; Ascii conversion -XGOKBD = $52 ; Swap keyboard type (Qwerty, French ...) +XGOKBD = $52 ; Swap keyboard type (Qwerty, French ...) ; Buffer management XECRBU = $54 ; Write A or AY in the buffer XLISBU = $55 ; Read A or AY in the buffer XTSTBU = $56 -XVIDBU = $57 ; Flush the buffer +XVIDBU = $57 ; Flush the buffer XINIBU = $58 ; Initialize the buffer X XDEFBU = $59 ; Reset all value of the buffer XBUSY = $5A ; Test if the buffer is empty @@ -328,7 +328,7 @@ XMSAVE = $61 ; Write a file to Minitel XFREE = $62 ; Only in TELEMON 3.x (bank 7 of Orix) -; Next Minitel primitives +; Next Minitel primitives XWCXFI = $63 ; Wait connection XLIGNE = $64 ; XDECON = $65 ; Minitel disconnection @@ -340,7 +340,7 @@ XHRSSE = $8C ; Set hires position cursor XDRAWA = $8D ; Draw a line absolute XDRAWR = $8E ; Draw a line (relative) XCIRCL = $8F ; Draw a circle -XCURSE = $90 ; Plot a pixel +XCURSE = $90 ; Plot a pixel XCURMO = $91 ; Move to x,y pos in Hires XPAPER = $92 XINK = $93 @@ -358,8 +358,8 @@ XPING = $9D ; Send Ping sound to PSG PWD_PTR = $00 ; --------------------------------------------------------------------------- -; -BUFTRV := $100 +; +BUFTRV := $100 ; --------------------------------------------------------------------------- @@ -377,7 +377,7 @@ TIMES := $211 TIMEM := $212 TIMEH := $213 FLGCLK := $214 -FLGCLK_FLAG := $215 +FLGCLK_FLAG := $215 FLGCUR := $216 ; Cursor management flag ; screens position managements @@ -466,7 +466,7 @@ DESALO := $52D FISALO := $52F EXSALO := $531 EXTDEF := $55D ; Default extension. At the start of telemon, it's set to ".COM" -BUFEDT := $590 ; Buffer edition +BUFEDT := $590 ; Buffer edition MAX_BUFEDT_LENGTH=110 @@ -480,7 +480,7 @@ BUFBUF := $c080 ; --------------------------------------------------------------------------- ; Stratsed vectors -; Stratsed is the main OS for Telestrat +; Stratsed is the main OS for Telestrat XMERGE := $FF0E XFST := $FF11 XSPUT := $FF14 @@ -532,7 +532,7 @@ XPMAP := $FFA7 XRWTS := $FFAA ; --------------------------------------------------------------------------- -; MACRO +; MACRO .macro BRK_TELEMON value .byte $00,value diff --git a/asminc/tgi-vectorfont.inc b/asminc/tgi-vectorfont.inc index ffe6ac686..124fe93cc 100644 --- a/asminc/tgi-vectorfont.inc +++ b/asminc/tgi-vectorfont.inc @@ -54,7 +54,7 @@ TGI_VF_CCOUNT = (TGI_VF_LASTCHAR - TGI_VF_FIRSTCHAR + 1) ; Font data loaded directly from file .struct TGI_VECTORFONT TOP .byte ; Height of char - BOTTOM .byte ; Descender + BOTTOM .byte ; Descender HEIGHT .byte ; Maximum char height WIDTHS .byte ::TGI_VF_CCOUNT ; Char widths CHARS .word ::TGI_VF_CCOUNT ; Pointer to character defs diff --git a/asminc/utsname.inc b/asminc/utsname.inc index 2c7052ce1..6d978dd21 100644 --- a/asminc/utsname.inc +++ b/asminc/utsname.inc @@ -33,7 +33,7 @@ -; Struct utsname +; Struct utsname .struct utsname sysname .byte 17 nodename .byte 9 diff --git a/asminc/zeropage.inc b/asminc/zeropage.inc index 1ba035868..6627d86b6 100644 --- a/asminc/zeropage.inc +++ b/asminc/zeropage.inc @@ -12,7 +12,7 @@ .globalzp ptr1, ptr2, ptr3, ptr4 .globalzp tmp1, tmp2, tmp3, tmp4 .globalzp regbank - + ; The size of the register bank regbanksize = 6 From eb8490f13a84f082f546b602d62237e01b73c880 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:05:10 +0200 Subject: [PATCH 1532/2710] remove dangling spaces --- doc/atari5200.sgml | 4 ++-- doc/ca65.sgml | 2 +- doc/da65.sgml | 10 +++++----- doc/geos.sgml | 2 +- doc/intro.sgml | 4 ++-- doc/lynx.sgml | 2 +- doc/sim65.sgml | 2 +- doc/sym1.sgml | 4 ++-- doc/telestrat.sgml | 14 +++++++------- 9 files changed, 22 insertions(+), 22 deletions(-) diff --git a/doc/atari5200.sgml b/doc/atari5200.sgml index 599ffe3c9..29e6aadb3 100644 --- a/doc/atari5200.sgml +++ b/doc/atari5200.sgml @@ -84,7 +84,7 @@ The names are the usual ones you can find in system reference manuals. Example: tics = OS.rtclok[1] // get ticks ... </verb></tscreen> - + <sect1>Atari 5200 specific functions<p> <itemize> @@ -221,7 +221,7 @@ you cannot use any of the following functions (and a few others): <sect1>CAR format<p> -AtariROMMaker (<url url="https://www.wudsn.com/index.php/productions-atari800/tools/atarirommaker"> ) +AtariROMMaker (<url url="https://www.wudsn.com/index.php/productions-atari800/tools/atarirommaker"> ) can be used to create a <tt/.CAR/ file from the binary ROM image cc65 generates. This might be more convenient when working with emulators. diff --git a/doc/ca65.sgml b/doc/ca65.sgml index c0ebe3688..19fd3aa2a 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -3622,7 +3622,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE" <sect1><tt>.PDTV</tt><label id=".PDTV"><p> - Enable the 6502DTV instruction set. This is a superset of the 6502 + Enable the 6502DTV instruction set. This is a superset of the 6502 instruction set. See: <tt><ref id=".P02" name=".P02"></tt> diff --git a/doc/da65.sgml b/doc/da65.sgml index 1702694a0..bf074a667 100644 --- a/doc/da65.sgml +++ b/doc/da65.sgml @@ -119,9 +119,9 @@ Here is a description of all the command line options: <item>4510 </itemize> - 6502x is for the NMOS 6502 with unofficial opcodes. 6502dtv is for the - emulated CPU of the C64DTV device. huc6280 is the CPU of the PC engine. - 4510 is the CPU of the Commodore C65. Support for the 65816 currently + 6502x is for the NMOS 6502 with unofficial opcodes. 6502dtv is for the + emulated CPU of the C64DTV device. huc6280 is the CPU of the PC engine. + 4510 is the CPU of the Commodore C65. Support for the 65816 currently is not available. @@ -253,8 +253,8 @@ for this CPU. Invalid opcodes are translated into <tt/.byte/ commands. With the command line option <tt><ref id="option--cpu" name="--cpu"></tt>, the disassembler may be told to recognize either the 65SC02 or 65C02 CPUs. The latter understands the same opcodes as the former, plus 16 additional bit -manipulation and bit test-and-branch commands. Using 6502x as CPU the illegal -opcodes of 6502 CPU are detected and displayed. 6502dtv setting recognizes the +manipulation and bit test-and-branch commands. Using 6502x as CPU the illegal +opcodes of 6502 CPU are detected and displayed. 6502dtv setting recognizes the emulated CPU instructons of the C64DTV device. diff --git a/doc/geos.sgml b/doc/geos.sgml index c3601e741..8a43d134b 100644 --- a/doc/geos.sgml +++ b/doc/geos.sgml @@ -1332,7 +1332,7 @@ This function returns the GEOS Kernal version combined (by logical OR) with the <p> This function returns the PAL/NTSC flag combined (by logical OR) with the 40/80 columns flag. This is not the best way to check if the screen has 40 or 80 columns since a PAL/NTSC check is always -performed and it can take as long as a full raster frame. If you just want to know if the +performed and it can take as long as a full raster frame. If you just want to know if the screen has 40 or 80 columns use the expression <tt/graphMode & 0x80/ which returns <tt/0/ for 40 columns and <tt/0x80/ for 80 columns. Remember that this value can be changed during runtime. It is unclear if this will work for GEOS 64 so you probably do not want to test diff --git a/doc/intro.sgml b/doc/intro.sgml index 4713de136..1eebe24c4 100644 --- a/doc/intro.sgml +++ b/doc/intro.sgml @@ -410,7 +410,7 @@ Available at <url url="https://github.com/commanderx16/x16-emulator/releases">: Emulates the Commander X16 Single Board Computer, with sound, SD card images, -VGA and NTSC video, and a NES game controller emulation. Includes a monitor. +VGA and NTSC video, and a NES game controller emulation. Includes a monitor. It runs on all SDL2 platforms. Compile the tutorial with @@ -459,7 +459,7 @@ Substitute the name of a Commodore computer for that <tt/<sys>/: Start the desired version of the emulator (CBM610 programs run on the CBM II [<tt/xcbm2/] emulator). -Choose <bf>File>Autostart disk/tape image...</bf>, choose your executable, +Choose <bf>File>Autostart disk/tape image...</bf>, choose your executable, and click <bf/OK/. The file has a 14-byte header which corresponds to a PRG-format BASIC program, diff --git a/doc/lynx.sgml b/doc/lynx.sgml index 0eef70535..76cfb377c 100644 --- a/doc/lynx.sgml +++ b/doc/lynx.sgml @@ -36,7 +36,7 @@ Here is a small traditional Hello World program for the Atari Lynx. <tscreen><verb> #include <lynx.h> #include <tgi.h> -#include <6502.h> +#include <6502.h> void main(void) { tgi_install(tgi_static_stddrv); diff --git a/doc/sim65.sgml b/doc/sim65.sgml index 075d95849..310de4667 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -112,7 +112,7 @@ For a C test compiled and linked with <tt/--target sim6502/ the command line arguments to <tt/sim65/ will be passed to <tt/main/, and the return value from <tt/main/ will become sim65's exit code. The <tt/exit/ function may also be used to terminate with an exit code. - + Exit codes are limited to 8 bits. The standard C library high level file input and output is functional. diff --git a/doc/sym1.sgml b/doc/sym1.sgml index b97f94720..0d4cc8a20 100644 --- a/doc/sym1.sgml +++ b/doc/sym1.sgml @@ -48,7 +48,7 @@ using 4k config run in the memory range of $200 - $0FFF. The 32k this range to $7FFF. Memory above 32k can be used to extend the heap, as described below. The starting memory location and entry point for running the program is $200, so when the program is transferred to the Sym-1, it is executed by typing 'g 200'. The system returns control -back to the monitor ROM when the program terminates, providing the '.' prompt. +back to the monitor ROM when the program terminates, providing the '.' prompt. Special locations: @@ -58,7 +58,7 @@ Special locations: <tag/Stack/ The C runtime stack is located at $0FFF on 4kb Syms, or at $7FFF for 32kb systems. - The stack always grows downwards. + The stack always grows downwards. <tag/Heap/ The C heap is located at the end of the program and grows towards the C runtime stack. Extended diff --git a/doc/telestrat.sgml b/doc/telestrat.sgml index 385bd69f9..e12846091 100644 --- a/doc/telestrat.sgml +++ b/doc/telestrat.sgml @@ -192,9 +192,9 @@ port cardridge. Telemon 2.4 returns in keyboard buffer the direction of the joysticks. This means that if you get input from keyboard by conio cgetc function, you will get direction from joysticks. -Anyway, if you don't want to use ROM, you can use joysticks standard drivers in your code. +Anyway, if you don't want to use ROM, you can use joysticks standard drivers in your code. -The standard driver manages two joysticks. Only one button is managed for these joysticks. +The standard driver manages two joysticks. Only one button is managed for these joysticks. Telestrat can handle one button for the left port, and three buttons for the right port (but this port was designed for a mouse). @@ -217,7 +217,7 @@ RS232 port with Telemon calls (see XSOUT primitive for example) Telemon 3.0 handles fopen, fread, fclose primitives. It means that this function will crash the Telestrat because Telemon 2.4 does not have these primitives. By the way, Telemon 3.0 uses an extension "ch376 card" which -handles sdcard and FAT 32 usb key. In the next version of Telemon, FT DOS, +handles sdcard and FAT 32 usb key. In the next version of Telemon, FT DOS, Sedoric, Stratsed will be handled in these 3 primitives (fopen, fread, fclose). <itemize> @@ -227,10 +227,10 @@ Sedoric, Stratsed will be handled in these 3 primitives (fopen, fread, fclose). </itemize> <sect1>conio<p> -Functions textcolor and bgcolor are available only with Telemon 3.0 (Orix). -Telemon 2.4 primitives can't handle any change of colors in text mode except with XINK or -XPAPER primitives which put on the first and second columns ink and paper attributes. -The only way to change color on the same line for text is to handle it in pure assembly +Functions textcolor and bgcolor are available only with Telemon 3.0 (Orix). +Telemon 2.4 primitives can't handle any change of colors in text mode except with XINK or +XPAPER primitives which put on the first and second columns ink and paper attributes. +The only way to change color on the same line for text is to handle it in pure assembly without systems calls. <sect>Other hints<p> From 5276033be1ea2a37dd8fd098b00c193650a1601b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:05:19 +0200 Subject: [PATCH 1533/2710] remove dangling spaces --- include/_antic.h | 2 +- include/_atari5200os.h | 16 ++-- include/_atarios.h | 210 ++++++++++++++++++++--------------------- include/_pokey.h | 4 +- include/accelerator.h | 2 +- include/apple2.h | 4 +- include/dbg.h | 4 +- include/errno.h | 2 +- include/geos/gmemory.h | 2 +- include/stdlib.h | 4 +- include/sys/utsname.h | 2 +- 11 files changed, 126 insertions(+), 126 deletions(-) diff --git a/include/_antic.h b/include/_antic.h index 717f7f820..742237332 100644 --- a/include/_antic.h +++ b/include/_antic.h @@ -137,7 +137,7 @@ struct __antic { ** Called during every vertical blank; see SYSVBV, VVBLKI, CRITIC, and VVBLKD, ** as well as the SETVBV routine. */ -#define NMIEN_VBI 0x40 +#define NMIEN_VBI 0x40 /* [Reset] key pressed */ #define NMIEN_RESET 0x20 diff --git a/include/_atari5200os.h b/include/_atari5200os.h index db0f7f0c9..5bba43016 100644 --- a/include/_atari5200os.h +++ b/include/_atari5200os.h @@ -31,19 +31,19 @@ struct __os { /*Page zero*/ - unsigned char pokmsk; // = $00 System mask for POKEY IRQ enable + unsigned char pokmsk; // = $00 System mask for POKEY IRQ enable unsigned char rtclok[2]; // = $01,$02 Real time clock - unsigned char critic; // = $03 Critical section flag + unsigned char critic; // = $03 Critical section flag unsigned char atract; // = $04 Attract mode counter - + union { struct { unsigned char sdlstl; // = $05 Save display list LO unsigned char sdlsth; // = $06 Save display list HI }; void* sdlst; // = $05,$06 Display list shadow - }; - + }; + unsigned char sdmctl; // = $07 DMACTL shadow unsigned char pcolr0; // = $08 PM color 0 unsigned char pcolr1; // = $09 PM color 1 @@ -55,10 +55,10 @@ struct __os { unsigned char color3; // = $0F PF color 3 unsigned char color4; // = $10 PF color 4 unsigned char _free_1[0xEF]; // = $11-$FF User space - + /*Stack*/ unsigned char stack[0x100]; // = $100-$1FF Stack - + /*Page 2 OS variables*/ void (*vinter)(void); // = $200 Immediate IRQ vector void (*vvblki)(void); // = $202 Immediate VBI vector @@ -74,7 +74,7 @@ struct __os { void (*vtimr1)(void); // = $216 POKEY timer 1 IRQ vector void (*vtimr2)(void); // = $218 POKEY timer 2 IRQ vector void (*vtimr4)(void); // = $21A POKEY timer 4 IRQ vector - + }; #endif diff --git a/include/_atarios.h b/include/_atarios.h index 986092659..ec33b98c9 100644 --- a/include/_atarios.h +++ b/include/_atarios.h @@ -66,7 +66,7 @@ struct __dcb { unsigned char dtimlo; /* device timeout in seconds */ unsigned char dunuse; /* - unused - */ unsigned int dbyt; /* # of bytes to transfer */ - union { + union { struct { unsigned char daux1; /* 1st command auxiliary byte */ unsigned char daux2; /* 2nd command auxiliary byte */ @@ -167,28 +167,28 @@ struct __os { #ifdef OSA unsigned char* linzbs; // = $00/$01 LINBUG RAM (WILL BE REPLACED BY MONITOR RAM) -#else +#else unsigned char linflg; // = $00 LNBUG FLAG (0 = NOT LNBUG) unsigned char ngflag; // = $01 MEMORY STATUS (0 = FAILURE) -#endif +#endif unsigned char* casini; // = $02/$03 CASSETTE INIT LOCATION unsigned char* ramlo; // = $04/$05 RAM POINTER FOR MEMORY TEST - -#ifdef OSA + +#ifdef OSA unsigned char tramsz; // = $06 FLAG FOR LEFT CARTRIDGE unsigned char tstdat; // = $07 FLAG FOR RIGHT CARTRIDGE -#else +#else unsigned char trnsmz; // = $06 TEMPORARY REGISTER FOR RAM SIZE unsigned char tstdat; // = $07 UNUSED (NOT TOUCHED DURING RESET/COLD START) #endif - - // Cleared upon Coldstart only - + + // Cleared upon Coldstart only + unsigned char warmst; // = $08 WARM START FLAG - unsigned char bootq; // = $09 SUCCESSFUL BOOT FLAG + unsigned char bootq; // = $09 SUCCESSFUL BOOT FLAG void (*dosvec)(void); // = $0A/$0B DISK SOFTWARE START VECTOR void (*dosini)(void); // = $0C/$0D DISK SOFTWARE INIT ADDRESS - unsigned char* appmhi; // = $0E/$0F APPLICATIONS MEMORY HI LIMIT + unsigned char* appmhi; // = $0E/$0F APPLICATIONS MEMORY HI LIMIT // Cleared upon Coldstart or Warmstart @@ -199,26 +199,26 @@ struct __os { unsigned char iccomt; // = $17 COMMAND FOR VECTOR unsigned char* dskfms; // = $18/$19 DISK FILE MANAGER POINTER unsigned char* dskutl; // = $1A/$1B DISK UTILITIES POINTER -#ifdef OSA +#ifdef OSA unsigned char ptimot; // = $1C PRINTER TIME OUT REGISTER unsigned char pbpnt; // = $1D PRINT BUFFER POINTER unsigned char pbufsz; // = $1E PRINT BUFFER SIZE unsigned char ptemp; // = $1F TEMPORARY REGISTER -#else +#else unsigned char abufpt[4]; // = $1C-$1F ACMI BUFFER POINTER AREA -#endif +#endif iocb_t ziocb; // = $20-$2F ZERO PAGE I/O CONTROL BLOCK - + unsigned char status; // = $30 INTERNAL STATUS STORAGE unsigned char chksum; // = $31 CHECKSUM (SINGLE BYTE SUM WITH CARRY) unsigned char* bufr; // = $32/$33 POINTER TO DATA BUFFER unsigned char* bfen; // = $34/$35 NEXT BYTE PAST END OF THE DATA BUFFER LO -#ifdef OSA +#ifdef OSA unsigned char cretry; // = $36 NUMBER OF COMMAND FRAME RETRIES unsigned char dretry; // = $37 NUMBER OF DEVICE RETRIES -#else +#else unsigned int ltemp; // = $36/$37 LOADER TEMPORARY -#endif +#endif unsigned char bufrfl; // = $38 DATA BUFFER FULL FLAG unsigned char recvdn; // = $39 RECEIVE DONE FLAG unsigned char xmtdon; // = $3A TRANSMISSION DONE FLAG @@ -227,22 +227,22 @@ struct __os { unsigned char bptr; // = $3D CASSETTE BUFFER POINTER unsigned char ftype; // = $3E CASSETTE IRG TYPE unsigned char feof; // = $3F CASSETTE EOF FLAG (0 // = QUIET) - + unsigned char freq; // = $40 CASSETTE BEEP COUNTER unsigned char soundr; // = $41 NOISY I/0 FLAG. (ZERO IS QUIET) unsigned char critic; // = $42 DEFINES CRITICAL SECTION (CRITICAL IF NON-Z) dos2x_t fmszpg; // = $43-$49 DISK FILE MANAGER SYSTEM ZERO PAGE -#ifdef OSA +#ifdef OSA unsigned char ckey; // = $4A FLAG SET WHEN GAME START PRESSED unsigned char cassbt; // = $4B CASSETTE BOOT FLAG -#else +#else void* zchain; // = $4A/$4B HANDLER LINKAGE CHAIN POINTER -#endif +#endif unsigned char dstat; // = $4C DISPLAY STATUS unsigned char atract; // = $4D ATRACT FLAG unsigned char drkmsk; // = $4E DARK ATRACT MASK unsigned char colrsh; // = $4F ATRACT COLOR SHIFTER (EOR'ED WITH PLAYFIELD - + unsigned char tmpchr; // = $50 TEMPORARY CHARACTER unsigned char hold1; // = $51 TEMPORARY unsigned char lmargn; // = $52 LEFT MARGIN (NORMALLY 2, CC65 C STARTUP CODE SETS IT TO 0) @@ -255,68 +255,68 @@ struct __os { unsigned int oldcol; // = $5B/$5C PRIOR COLUMN unsigned char oldchr; // = $5D DATA UNDER CURSOR unsigned char* oldadr; // = $5E/$5F SAVED CURSOR MEMORY ADDRESS - -#ifdef OSA + +#ifdef OSA unsigned char newrow; // = $60 POINT DRAW GOES TO unsigned int newcol; // = $61/$62 COLUMN DRAW GOES TO -#else +#else unsigned char* fkdef; // = $60/$61 FUNCTION KEY DEFINITION TABLE unsigned char palnts; // = $62 PAL/NTSC INDICATOR (0 // = NTSC) -#endif +#endif unsigned char logcol; // = $63 POINTS AT COLUMN IN LOGICAL LINE unsigned char* adress; // = $64/$65 TEMPORARY ADDRESS - unsigned int mlttmp; // = $66/$67 TEMPORARY / FIRST BYTE IS USED IN OPEN AS TEMP - unsigned int savadr; // = $68/$69 SAVED ADDRESS + unsigned int mlttmp; // = $66/$67 TEMPORARY / FIRST BYTE IS USED IN OPEN AS TEMP + unsigned int savadr; // = $68/$69 SAVED ADDRESS unsigned char ramtop; // = $6A RAM SIZE DEFINED BY POWER ON LOGIC unsigned char bufcnt; // = $6B BUFFER COUNT unsigned char* bufstr; // = $6C/$6D EDITOR GETCH POINTER unsigned char bitmsk; // = $6E BIT MASK unsigned char shfamt; // = $6F SHIFT AMOUNT FOR PIXEL JUSTIFUCATION - + unsigned int rowac; // = $70/$71 DRAW WORKING ROW unsigned int colac; // = $72/$73 DRAW WORKING COLUMN unsigned char* endpt; // = $74/$75 END POINT unsigned char deltar; // = $76 ROW DIFFERENCE unsigned int deltac; // = $77/$78 COLUMN DIFFERENCE -#ifdef OSA - unsigned char rowinc; // = $79 ROWINC +#ifdef OSA + unsigned char rowinc; // = $79 ROWINC unsigned char colinc; // = $7A COLINC -#else +#else unsigned char* keydef; // = $79/$7A 2-BYTE KEY DEFINITION TABLE ADDRESS -#endif +#endif unsigned char swpflg; // = $7B NON-0 1F TXT AND REGULAR RAM IS SWAPPED unsigned char holdch; // = $7C CH IS MOVED HERE IN KGETCH BEFORE CNTL & SH unsigned char insdat; // = $7D 1-BYTE TEMPORARY unsigned int countr; // = $7E/$7F 2-BYTE DRAW ITERATION COUNT - + unsigned char _free_1[0xD4-0x7F-1]; // USER SPACE - + // Floating Point Package Page Zero Address Equates - fpreg_t fpreg[4]; // = $D4-$EB 4 REGSITERS, ACCCESS LIKE "fpreg[FPIDX_R0].fr" - unsigned char frx; // = $EC 1-BYTE TEMPORARY + fpreg_t fpreg[4]; // = $D4-$EB 4 REGSITERS, ACCCESS LIKE "fpreg[FPIDX_R0].fr" + unsigned char frx; // = $EC 1-BYTE TEMPORARY unsigned char eexp; // = $ED VALUE OF EXP -#ifdef OS_REV2 +#ifdef OS_REV2 unsigned char frsign; // = $EE ##REV2## 1-BYTE FLOATING POINT SIGN unsigned char plycnt; // = $EF ##REV2## 1-BYTE POLYNOMIAL DEGREE unsigned char sgnflg; // = $F0 ##REV2## 1-BYTE SIGN FLAG unsigned char xfmflg; // = $F1 ##REV2## 1-BYTE TRANSFORM FLAG -#else +#else unsigned char nsign; // = $EE SIGN OF # unsigned char esign; // = $EF SIGN OF EXPONENT unsigned char fchrflg; // = $F0 1ST CHAR FLAG unsigned char digrt; // = $F1 # OF DIGITS RIGHT OF DECIMAL -#endif +#endif unsigned char cix; // = $F2 CURRENT INPUT INDEX - unsigned char* inbuff; // = $F3/$F4 POINTS TO USER'S LINE INPUT BUFFER + unsigned char* inbuff; // = $F3/$F4 POINTS TO USER'S LINE INPUT BUFFER unsigned int ztemp1; // = $F5/$F6 2-BYTE TEMPORARY unsigned int ztemp4; // = $F7/$F8 2-BYTE TEMPORARY unsigned int ztemp3; // = $F9/$FA 2-BYTE TEMPORARY - - union { + + union { unsigned char degflg; // = $FB ##OLD## SAME AS RADFLG unsigned char radflg; // = $FB ##OLD## 0=RADIANS, 6=DEGREES }; - + fpreg_t* flptr; // = $FC/$FD 2-BYTE FLOATING POINT NUMBER POINTER fpreg_t* fptr2; // = $FE/$FF 2-BYTE FLOATING POINT NUMBER POINTER @@ -356,28 +356,28 @@ struct __os { union { struct { unsigned char sdlstl; // = $0230 SAVE DISPLAY LIST LOW BYTE - unsigned char sdlsth; // = $0231 SAVE DISPLAY LIST HI BYTE + unsigned char sdlsth; // = $0231 SAVE DISPLAY LIST HI BYTE }; void* sdlst; // = $0230/$0231 (same as above as pointer) }; unsigned char sskctl; // = $0232 SKCTL REGISTER RAM -#ifdef OSA +#ifdef OSA unsigned char _spare_1; // = $0233 No OS use. #else unsigned char lcount; // = $0233 ##1200xl## 1-byte relocating loader record -#endif +#endif unsigned char lpenh; // = $0234 LIGHT PEN HORIZONTAL VALUE unsigned char lpenv; // = $0235 LIGHT PEN VERTICAL VALUE void (*brkky)(void); // = $0236/$0237 BREAK KEY VECTOR -#ifdef OSA +#ifdef OSA unsigned char spare2[2]; // = $0238/$0239 No OS use. -#else +#else void (*vpirq)(void); // = $0238/$0239 ##rev2## 2-byte parallel device IRQ vector -#endif +#endif unsigned char cdevic; // = $023A COMMAND FRAME BUFFER - DEVICE unsigned char ccomnd; // = $023B COMMAND union { - struct { + struct { unsigned char caux1; // = $023C COMMAND AUX BYTE 1 unsigned char caux2; // = $023D COMMAND AUX BYTE 2 }; @@ -389,15 +389,15 @@ struct __os { unsigned char dbsect; // = $0241 NUMBER OF DISK BOOT SECTORS unsigned char* bootad; // = $0242/$0243 ADDRESS WHERE DISK BOOT LOADER WILL BE PUT unsigned char coldst; // = $0244 COLDSTART FLAG (1=IN MIDDLE OF COLDSTART> -#ifdef OSA +#ifdef OSA unsigned char spare3; // = $0245 No OS use. -#else +#else unsigned char reclen; // = $0245 ##1200xl## 1-byte relocating loader record length -#endif +#endif unsigned char dsktim; // = $0246 DISK TIME OUT REGISTER -#ifdef OSA +#ifdef OSA unsigned char linbuf[40]; // = $0247-$026E ##old## CHAR LINE BUFFER -#else +#else unsigned char pdvmsk; // = $0247 ##rev2## 1-byte parallel device selection mask unsigned char shpdvs; // = $0248 ##rev2## 1-byte PDVS (parallel device select) unsigned char pdimsk; // = $0249 ##rev2## 1-byte parallel device IRQ selection @@ -409,7 +409,7 @@ struct __os { unsigned char vsflag; // = $026C ##1200xl## 1-byte fine vertical scroll count unsigned char keydis; // = $026D ##1200xl## 1-byte keyboard disable unsigned char fine; // = $026E ##1200xl## 1-byte fine scrolling mode -#endif +#endif unsigned char gprior; // = $026F GLOBAL PRIORITY CELL unsigned char paddl0; // = $0270 1-BYTE POTENTIOMETER 0 unsigned char paddl1; // = $0271 1-BYTE POTENTIOMETER 1 @@ -435,30 +435,30 @@ struct __os { unsigned char strig1; // = $0285 1-BYTE JOYSTICK TRIGGER 1 unsigned char strig2; // = $0286 1-BYTE JOYSTICK TRIGGER 2 unsigned char strig3; // = $0287 1-BYTE JOYSTICK TRIGGER 3 -#ifdef OSA +#ifdef OSA unsigned char cstat; // = $0288 ##old## cassette status register -#else +#else unsigned char hibyte; // = $0288 ##1200xl## 1-byte relocating loader high byte -#endif +#endif unsigned char wmode; // = $0289 1-byte cassette WRITE mode unsigned char blim; // = $028A 1-byte cassette buffer limit #ifdef OSA unsigned char _reserved_2[5]; // = $028B-$028F RESERVED -#else +#else unsigned char imask; // = $028B ##rev2## (not used) void (*jveck)(void); // = $028C/$028D 2-byte jump vector unsigned newadr; // = $028E/028F ##1200xl## 2-byte relocating address -#endif +#endif unsigned char txtrow; // = $0290 TEXT ROWCRS unsigned txtcol; // = $0291/$0292 TEXT COLCRS unsigned char tindex; // = $0293 TEXT INDEX unsigned char* txtmsc; // = $0294/$0295 FOOLS CONVRT INTO NEW MSC unsigned char txtold[6]; // = $0296-$029B OLDROW & OLDCOL FOR TEXT (AND THEN SOME) -#ifdef OSA +#ifdef OSA unsigned char tmpx1; // = $029C ##old## 1--byte temporary register -#else +#else unsigned char cretry; // = $029C ##1200xl## 1-byte number of command frame retries -#endif +#endif unsigned char hold3; // = $029D 1-byte temporary unsigned char subtmp; // = $029E 1-byte temporary unsigned char hold2; // = $029F 1-byte (not used) @@ -473,41 +473,41 @@ struct __os { unsigned tmpcol; // = $02B9/$02BA 2-byte temporary column unsigned char scrflg; // = $02BB SET IF SCROLL OCCURS unsigned char hold4; // = $02BC TEMP CELL USED IN DRAW ONLY -#ifdef OSA +#ifdef OSA unsigned char hold5; // = $02BD ##old## DITTO -#else +#else unsigned char dretry; // = $02BD ##1200xl## 1-byte number of device retries -#endif +#endif unsigned char shflok; // = $02BE 1-byte shift/control lock flags unsigned char botscr; // = $02BF BOTTOM OF SCREEN 24 NORM 4 SPLIT unsigned char pcolr0; // = $02C0 1-byte player-missile 0 color/luminance unsigned char pcolr1; // = $02C1 1-byte player-missile 1 color/luminance unsigned char pcolr2; // = $02C2 1-byte player-missile 2 color/luminance - unsigned char pcolr3; // = $02C3 1-byte player-missile 3 color/luminance + unsigned char pcolr3; // = $02C3 1-byte player-missile 3 color/luminance unsigned char color0; // = $02C4 1-byte playfield 0 color/luminance unsigned char color1; // = $02C5 1-byte playfield 1 color/luminance unsigned char color2; // = $02C6 1-byte playfield 2 color/luminance unsigned char color3; // = $02C7 1-byte playfield 3 color/luminance unsigned char color4; // = $02C8 1-byte background color/luminance -#ifdef OSA +#ifdef OSA unsigned char _spare_2[23]; // = $02C9-$02DF No OS use. #else union { unsigned char parmbl[6]; // = $02C9 ##rev2## 6-byte relocating loader parameter - struct { + struct { void (*runadr)(void); // = $02C9 ##1200xl## 2-byte run address unsigned int hiused; // = $02CB ##1200xl## 2-byte highest non-zero page address unsigned int zhiuse; // = $02CD ##1200xl## 2-byte highest zero page address - }; - }; - union { + }; + }; + union { unsigned char oldpar[6]; // = $02CF ##rev2## 6-byte relocating loader parameter - struct { + struct { void (*gbytea)(void); // = $02CF ##1200xl## 2-byte GET-BYTE routine address unsigned int loadad; // = $02D1 ##1200xl## 2-byte non-zero page load address unsigned int zloada; // = $02D3 ##1200xl## 2-byte zero page load address - }; - }; + }; + }; unsigned int dsctln; // = $02D5 ##1200xl## 2-byte disk sector length unsigned int acmisr; // = $02D7 ##1200xl## 2-byte ACMI interrupt service routine unsigned char krpdel; // = $02D9 ##1200xl## 1-byte auto-repeat delay @@ -517,78 +517,78 @@ struct __os { unsigned char dmasav; // = $02DD ##1200xl## 1-byte SDMCTL save/restore unsigned char pbpnt; // = $02DE ##1200xl## 1-byte printer buffer pointer unsigned char pbufsz; // = $02DF ##1200xl## 1-byte printer buffer size -#endif - union { +#endif + union { unsigned char glbabs[4]; // = $02E0-$02E3 byte global variables for non-DOS users - struct { + struct { void (*runad)(void); // = $02E0 ##map## 2-byte binary file run address void (*initad)(void); // = $02E2 ##map## 2-byte binary file initialization address - }; - }; + }; + }; unsigned char ramsiz; // = $02E4 RAM SIZE (HI BYTE ONLY) void* memtop; // = $02E5 TOP OF AVAILABLE USER MEMORY void* memlo; // = $02E7 BOTTOM OF AVAILABLE USER MEMORY -#ifdef OSA +#ifdef OSA unsigned char _spare_3; // = $02E9 No OS use. -#else +#else unsigned char hndlod; // = $02E9 ##1200xl## 1-byte user load flag -#endif +#endif unsigned char dvstat[4]; // = $02EA-$02ED STATUS BUFFER - union { + union { unsigned int cbaud; // = $02EE/$02EF 2-byte cassette baud rate - struct { + struct { unsigned char cbaudl; // = $02EE 1-byte low cassette baud rate unsigned char cbaudh; // = $02EF 1-byte high cassette baud rate - }; - }; + }; + }; unsigned char crsinh; // = $02F0 CURSOR INHIBIT (00 = CURSOR ON) unsigned char keydel; // = $02F1 KEY DELAY unsigned char ch1; // = $02F2 1-byte prior keyboard character unsigned char chact; // = $02F3 CHACTL REGISTER RAM unsigned char chbas; // = $02F4 CHBAS REGISTER RAM -#ifdef OSA +#ifdef OSA unsigned char _spare_4[5]; // = $02F5-$02F9 No OS use. -#else +#else unsigned char newrow; // = $02F5 ##1200xl## 1-byte draw destination row unsigned int newcol; // = $02F6/$02F7 ##1200xl## 2-byte draw destination column unsigned char rowinc; // = $02F8 ##1200xl## 1-byte draw row increment unsigned char colinc; // = $02F9 ##1200xl## 1-byte draw column increment -#endif +#endif unsigned char char_; // = $02FA 1-byte internal character (naming changed due to do keyword conflict) unsigned char atachr; // = $02FB ATASCII CHARACTER unsigned char ch; // = $02FC GLOBAL VARIABLE FOR KEYBOARD unsigned char fildat; // = $02FD RIGHT FILL DATA <DRAW> unsigned char dspflg; // = $02FE DISPLAY FLAG DISPLAY CNTLS IF NON-ZERO unsigned char ssflag; // = $02FF START/STOP FLAG FOR PAGING (CNTL 1). CLEARE - + // --- Page 3 --- dcb_t dcb; // = $0300-$030B DEVICE CONTROL BLOCK unsigned int timer1; // = $030C/$030D INITIAL TIMER VALUE -#ifdef OSA +#ifdef OSA unsigned char addcor; // = $030E ##old## ADDITION CORRECTION -#else +#else unsigned char jmpers; // = $030E ##1200xl## 1-byte jumper options -#endif +#endif unsigned char casflg; // = $030F CASSETTE MODE WHEN SET unsigned int timer2; // = $0310/$0311 2-byte final baud rate timer value unsigned char temp1; // = $0312 TEMPORARY STORAGE REGISTER -#ifdef OSA +#ifdef OSA unsigned char _spare_5; // = $0313 unused unsigned char temp2; // = $0314 ##old## TEMPORARY STORAGE REGISTER -#else +#else unsigned char temp2; // = $0313 ##1200xl## 1-byte temporary unsigned char ptimot; // = $0314 ##1200xl## 1-byte printer timeout -#endif +#endif unsigned char temp3; // = $0315 TEMPORARY STORAGE REGISTER unsigned char savio; // = $0316 SAVE SERIAL IN DATA PORT unsigned char timflg; // = $0317 TIME OUT FLAG FOR BAUD RATE CORRECTION unsigned char stackp; // = $0318 SIO STACK POINTER SAVE CELL unsigned char tstat; // = $0319 TEMPORARY STATUS HOLDER -#ifdef OSA +#ifdef OSA hatabs_t hatabs[12]; // = $031A-$033D handler address table unsigned int zeropad; // = $033E/$033F zero padding -#else +#else hatabs_t hatabs[11]; // = $031A-$033A handler address table unsigned int zeropad; // = $033B/$033C zero padding unsigned char pupbt1; // = $033D ##1200xl## 1-byte power-up validation byte 1 @@ -598,9 +598,9 @@ struct __os { iocb_t iocb[8]; // = $0340-$03BF 8 I/O Control Blocks unsigned char prnbuf[40]; // = $03C0-$3E7 PRINTER BUFFER -#ifdef OSA +#ifdef OSA unsigned char _spare_6[151]; // = $03E8-$047F unused -#else +#else unsigned char superf; // = $03E8 ##1200xl## 1-byte editor super function flag unsigned char ckey; // = $03E9 ##1200xl## 1-byte cassette boot request flag unsigned char cassbt; // = $03EA ##1200xl## 1-byte cassette boot flag @@ -639,7 +639,7 @@ struct __basic { void* starp; // = $8C/$8D ADDRESS FOR THE STRING AND ARRAY TABLE void* runstk; // = $8E/$8F ADDRESS OF THE RUNTIME STACK void* memtop; // = $90/$91 POINTER TO THE TOP OF BASIC MEMORY - + unsigned char _internal_1[0xBA-0x91-1]; // INTERNAL DATA unsigned int stopln; // = $BA/$BB LINE WHERE A PROGRAM WAS STOPPED diff --git a/include/_pokey.h b/include/_pokey.h index 88d6949aa..15af4919e 100644 --- a/include/_pokey.h +++ b/include/_pokey.h @@ -131,7 +131,7 @@ struct __pokey_write { #define SKCTL_KEYBOARD_SCANNING 0x02 /* Enable keyboard scanning circuit */ /* Fast pot scan -** The pot scan counter completes its sequence in two TV line times instead of +** The pot scan counter completes its sequence in two TV line times instead of ** one frame time (228 scan lines). Not as accurate as the normal pot scan */ #define SKCTL_FAST_POT_SCAN 0x04 @@ -204,7 +204,7 @@ struct __pokey_read { #define SKSTAT_DATA_READ_INGORING_SHIFTREG 0x10 /* Data can be read directly from the serial input port, ignoring the shift register. */ #define SKSTAT_KEYBOARD_OVERRUN 0x20 /* Keyboard over-run; Reset BITs 7, 6 and 5 (latches) to 1, using SKREST */ #define SKSTAT_INPUT_OVERRUN 0x40 /* Serial data input over-run. Reset latches as above. */ -#define SKSTAT_INPUT_FRAMEERROR 0x80 /* Serial data input frame error caused by missing or extra bits. Reset latches as above. */ +#define SKSTAT_INPUT_FRAMEERROR 0x80 /* Serial data input frame error caused by missing or extra bits. Reset latches as above. */ /* KBCODE, internal keyboard codes for Atari 8-bit computers, diff --git a/include/accelerator.h b/include/accelerator.h index fdd2ebaf7..b5d8d0194 100644 --- a/include/accelerator.h +++ b/include/accelerator.h @@ -180,7 +180,7 @@ unsigned char detect_c128 (void); unsigned char __fastcall__ set_chameleon_speed (unsigned char speed); /* Set the speed of the C64 Chameleon cartridge, the following inputs - * are accepted: + * are accepted: * SPEED_SLOW : 1 Mhz mode * SPEED_1X : 1 Mhz mode * SPEED_2X : 2 Mhz mode diff --git a/include/apple2.h b/include/apple2.h index 2735e948b..cb15cab97 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -159,11 +159,11 @@ extern struct { unsigned day :5; unsigned mon :4; unsigned year :7; - } createdate; /* Current date: 0 */ + } createdate; /* Current date: 0 */ struct { unsigned char min; unsigned char hour; - } createtime; /* Current time: 0 */ + } createtime; /* Current time: 0 */ } _datetime; /* The addresses of the static drivers */ diff --git a/include/dbg.h b/include/dbg.h index 7b4f67e31..4cca826ec 100644 --- a/include/dbg.h +++ b/include/dbg.h @@ -39,7 +39,7 @@ ** are declared here. ** ** To use the debugger, just call DbgInit in your application. Once it has -** been called, the debugger will catch any BRK opcode. Use the BREAK macro +** been called, the debugger will catch any BRK opcode. Use the BREAK macro ** defined below to insert breakpoints into your code. ** ** There are currently a lot of things that cannot be debugged, graphical @@ -121,4 +121,4 @@ void __fastcall__ DbgInit (unsigned unused); - + diff --git a/include/errno.h b/include/errno.h index ae76b6c05..92d304938 100644 --- a/include/errno.h +++ b/include/errno.h @@ -84,7 +84,7 @@ extern int _errno; int __fastcall__ _osmaperrno (unsigned char oserror); -/* Map an operating system specific error code (for example from _oserror) +/* Map an operating system specific error code (for example from _oserror) ** into one of the E... codes above. It is user callable. */ diff --git a/include/geos/gmemory.h b/include/geos/gmemory.h index ba8e9f211..1e9ca83b4 100644 --- a/include/geos/gmemory.h +++ b/include/geos/gmemory.h @@ -12,7 +12,7 @@ void __fastcall__ CopyString(char *dest, const char *source); char __fastcall__ CmpString(const char *dest, const char *source); void __fastcall__ CopyFString(char len, char *dest, const char *source); -char __fastcall__ CmpFString(char len, char *dest, const char *source); +char __fastcall__ CmpFString(char len, char *dest, const char *source); unsigned __fastcall__ CRC(const char *buffer, unsigned len); void* __fastcall__ ClearRam(char *dest, unsigned len); diff --git a/include/stdlib.h b/include/stdlib.h index b929e8f02..99151317f 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -52,8 +52,8 @@ typedef unsigned size_t; /* Those non-standard cc65 exit constants definitions are in addition ** to the EXIT_SUCCESS and EXIT_FAILURE constants, which should not be -** redefined -*/ +** redefined +*/ #define EXIT_ASSERT 2 #define EXIT_ABORT 3 diff --git a/include/sys/utsname.h b/include/sys/utsname.h index a601d9eed..fdd87dec3 100644 --- a/include/sys/utsname.h +++ b/include/sys/utsname.h @@ -41,7 +41,7 @@ /*****************************************************************************/ /* Data */ /*****************************************************************************/ - + /* From c6f23eefc85f50730c5c0607e351443f042e143e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:06:22 +0200 Subject: [PATCH 1534/2710] remove dangling spaces --- libsrc/apple2/exec.s | 2 +- libsrc/apple2/iobuf.s | 2 +- libsrc/apple2/mcbdefault.s | 4 +- libsrc/apple2/mou/a2.stdmou.s | 16 +++--- libsrc/apple2/opendir.c | 2 +- libsrc/apple2/write.s | 2 +- libsrc/atari/break.s | 2 +- libsrc/atari/cclear.s | 2 +- libsrc/atari/ctype.s | 2 +- libsrc/atari/cvline.s | 2 +- libsrc/atari/diopncls.s | 2 +- libsrc/atari/dioqsize.s | 2 +- libsrc/atari/doesclrscr.s | 2 +- libsrc/atari/emd/atr130.s | 50 +++++++++---------- libsrc/atari/mcbtxtchar.s | 2 +- libsrc/atari/randomize.s | 2 +- libsrc/atari/revers.s | 2 +- libsrc/atari/shadow_ram_handlers.s | 6 +-- libsrc/atari/system_check.s | 2 +- libsrc/atari/xlmemchk.inc | 2 +- libsrc/atari5200/conioscreen.s | 2 +- libsrc/atari5200/cvline.s | 2 +- libsrc/atari5200/extra/conioscreen-20x12.s | 2 +- libsrc/atari5200/joy/atr5200std.s | 2 +- libsrc/atari5200/randomize.s | 2 +- libsrc/atari5200/y2k.inc | 14 +++--- libsrc/atari7800/crt0.s | 6 +-- libsrc/atari7800/joy/atari7800-stdjoy.s | 2 +- libsrc/atmos/cclear.s | 4 +- libsrc/atmos/ctype.s | 2 +- libsrc/c128/emd/c128-vdc.s | 18 +++---- libsrc/c64/sysuname.s | 2 +- libsrc/cbm/cbm_save.c | 4 +- libsrc/cbm/ctype.s | 2 +- libsrc/cbm/opendir.c | 2 +- libsrc/cbm610/revers.s | 2 +- libsrc/common/_heap.s | 2 +- libsrc/common/_heapmaxavail.s | 2 +- libsrc/common/_longminstr.c | 4 +- libsrc/common/_seterrno.s | 2 +- libsrc/common/abort.c | 2 +- libsrc/common/ctypemask.s | 2 +- libsrc/common/divt.s | 4 +- libsrc/common/doesclrscr.s | 2 +- libsrc/common/fread.s | 2 +- libsrc/common/free.s | 2 +- libsrc/common/fsetpos.c | 2 +- libsrc/common/fwrite.s | 2 +- libsrc/common/getcwd.s | 2 +- libsrc/common/ltoa.s | 6 +-- libsrc/common/memcpy.s | 2 +- libsrc/common/memset.s | 4 +- libsrc/common/mul20.s | 4 +- libsrc/common/mul40.s | 4 +- libsrc/common/putenv.s | 2 +- libsrc/common/raise.s | 6 +-- libsrc/common/rewind.c | 2 +- libsrc/common/strcspn.s | 2 +- libsrc/common/strncat.s | 6 +-- libsrc/common/strrchr.s | 4 +- libsrc/common/ungetc.s | 2 +- libsrc/common/vsprintf.s | 2 +- libsrc/conio/cputs.s | 2 +- libsrc/conio/scrsize.s | 4 +- libsrc/creativision/_scrsize.s | 6 +-- libsrc/creativision/boxchars.inc | 10 ++-- libsrc/dbg/asmtab.s | 2 +- libsrc/dbg/dbg.c | 6 +-- libsrc/dbg/dbgdasm.s | 2 +- libsrc/em/em_load.s | 2 +- libsrc/gamate/cputc.s | 14 +++--- libsrc/geos-apple/disk/exitturbo.s | 4 +- libsrc/geos-cbm/disk/changediskdevice.s | 2 +- libsrc/geos-cbm/disk/chkdkgeos.s | 2 +- libsrc/geos-cbm/disk/dio_cts.s | 16 +++--- libsrc/geos-cbm/disk/dio_openclose.s | 4 +- libsrc/geos-cbm/disk/dio_stc.s | 48 +++++++++--------- libsrc/geos-cbm/disk/enterturbo.s | 2 +- libsrc/geos-cbm/disk/exitturbo.s | 2 +- libsrc/geos-cbm/disk/findbambit.s | 2 +- libsrc/geos-cbm/disk/newdisk.s | 2 +- libsrc/geos-cbm/disk/purgeturbo.s | 2 +- libsrc/geos-cbm/disk/readblock.s | 2 +- libsrc/geos-cbm/disk/readbuff.s | 2 +- libsrc/geos-cbm/disk/verwriteblock.s | 2 +- libsrc/geos-cbm/disk/writeblock.s | 2 +- libsrc/geos-cbm/disk/writebuff.s | 2 +- libsrc/geos-cbm/emd/geos-vdc.s | 36 ++++++------- libsrc/geos-cbm/file/followchain.s | 2 +- libsrc/geos-cbm/graph/setnewmode.s | 2 +- libsrc/geos-cbm/system/setdevice.s | 2 +- libsrc/geos-cbm/tgi/geos-tgi.s | 6 +-- libsrc/geos-common/common/zerobss.s | 2 +- libsrc/geos-common/conio/_scrsize.s | 4 +- libsrc/geos-common/conio/cputc.s | 2 +- libsrc/geos-common/conio/cvline.s | 2 +- libsrc/geos-common/disk/blkalloc.s | 2 +- libsrc/geos-common/disk/calcblksfree.s | 2 +- libsrc/geos-common/disk/freeblock.s | 2 +- libsrc/geos-common/disk/getblock.s | 2 +- libsrc/geos-common/disk/getptrcurdknm.s | 4 +- libsrc/geos-common/disk/nxtblkalloc.s | 2 +- libsrc/geos-common/disk/opendisk.s | 2 +- libsrc/geos-common/disk/putblock.s | 2 +- libsrc/geos-common/disk/putdirhead.s | 2 +- libsrc/geos-common/disk/setnextfree.s | 2 +- libsrc/geos-common/dlgbox/rstrfrmdialogue.s | 2 +- libsrc/geos-common/drivers/fio_module.s | 8 +-- libsrc/geos-common/drivers/geos-stdmou.s | 2 +- libsrc/geos-common/file/appendrecord.s | 2 +- libsrc/geos-common/file/closerecordfile.s | 2 +- libsrc/geos-common/file/deletefile.s | 2 +- libsrc/geos-common/file/deleterecord.s | 2 +- libsrc/geos-common/file/findfile.s | 2 +- libsrc/geos-common/file/freefile.s | 2 +- libsrc/geos-common/file/getfhdrinfo.s | 2 +- libsrc/geos-common/file/getfile.s | 2 +- libsrc/geos-common/file/openrecordfile.s | 2 +- libsrc/geos-common/file/pointrecord.s | 2 +- libsrc/geos-common/file/readfile.s | 2 +- libsrc/geos-common/file/readrecord.s | 2 +- libsrc/geos-common/file/writerecord.s | 2 +- libsrc/geos-common/geosmac.inc | 4 +- libsrc/geos-common/graph/bitotherclip.s | 2 +- libsrc/geos-common/graph/framerectangle.s | 2 +- libsrc/geos-common/graph/imprintrectangle.s | 4 +- libsrc/geos-common/graph/invertline.s | 2 +- libsrc/geos-common/graph/invertrectangle.s | 2 +- libsrc/geos-common/graph/recoverline.s | 2 +- libsrc/geos-common/graph/recoverrectangle.s | 4 +- libsrc/geos-common/graph/rectangle.s | 2 +- libsrc/geos-common/graph/testpoint.s | 2 +- libsrc/geos-common/graph/verticalline.s | 4 +- .../geos-common/mousesprite/ismseinregion.s | 2 +- libsrc/geos-common/process/processblock.s | 4 +- libsrc/geos-common/process/processfreeze.s | 4 +- .../process/processinitrestartenable.s | 4 +- libsrc/joystick/joy_load.s | 2 +- libsrc/lynx/bllhdr.s | 2 +- libsrc/lynx/bootldr.s | 2 +- libsrc/lynx/cgetc.s | 2 +- libsrc/lynx/eeprom.s | 2 +- libsrc/lynx/eeprom46.s | 2 +- libsrc/lynx/eeprom66.s | 2 +- libsrc/lynx/eeprom86.s | 2 +- libsrc/lynx/exec.s | 2 +- libsrc/lynx/kbhit.s | 2 +- libsrc/lynx/lynx-cart.s | 6 +-- libsrc/mouse/mouse_load.s | 2 +- libsrc/mouse/mouse_move.s | 2 +- libsrc/nes/cclear.s | 2 +- libsrc/nes/chline.s | 2 +- libsrc/nes/gotoy.s | 2 +- libsrc/nes/ppubuf.s | 2 +- libsrc/nes/sysuname.s | 2 +- libsrc/osic1p/cclear.s | 2 +- libsrc/pce/cclear.s | 2 +- libsrc/plus4/randomize.s | 2 +- libsrc/runtime/add.s | 4 +- libsrc/runtime/aslax1.s | 2 +- libsrc/runtime/decsp1.s | 2 +- libsrc/runtime/incsp1.s | 2 +- libsrc/runtime/incsp3.s | 2 +- libsrc/runtime/incsp4.s | 2 +- libsrc/runtime/incsp5.s | 2 +- libsrc/runtime/incsp6.s | 2 +- libsrc/runtime/incsp7.s | 2 +- libsrc/runtime/land.s | 6 +-- libsrc/runtime/ldauisp.s | 2 +- libsrc/runtime/leave.s | 2 +- libsrc/runtime/leq.s | 2 +- libsrc/runtime/lmod.s | 2 +- libsrc/runtime/lmul.s | 6 +-- libsrc/runtime/lor.s | 6 +-- libsrc/runtime/lpop.s | 2 +- libsrc/runtime/lpush.s | 4 +- libsrc/runtime/lrsub.s | 2 +- libsrc/runtime/lsub.s | 2 +- libsrc/runtime/lsubeq.s | 10 ++-- libsrc/runtime/ltest.s | 2 +- libsrc/runtime/ludiv.s | 2 +- libsrc/runtime/lumod.s | 2 +- libsrc/runtime/lxor.s | 2 +- libsrc/runtime/mul.s | 4 +- libsrc/runtime/mulax3.s | 2 +- libsrc/runtime/or.s | 2 +- libsrc/runtime/pushaff.s | 2 +- libsrc/runtime/pushax.s | 2 +- libsrc/runtime/return0.s | 2 +- libsrc/runtime/return1.s | 2 +- libsrc/runtime/swap.s | 6 +-- libsrc/runtime/umod.s | 2 +- libsrc/runtime/umul16x16r32.s | 2 +- libsrc/sym1/read.s | 2 +- libsrc/sym1/write.s | 2 +- libsrc/telestrat/cclear.s | 4 +- libsrc/telestrat/chline.s | 4 +- libsrc/telestrat/clrscr.s | 8 +-- libsrc/telestrat/cputc.s | 12 ++--- libsrc/telestrat/gotoxy.s | 4 +- libsrc/telestrat/joy/telestrat.s | 12 ++--- libsrc/telestrat/orixhdr.s | 2 +- libsrc/telestrat/sound.s | 2 +- libsrc/telestrat/syschdir.s | 6 +-- libsrc/telestrat/sysmkdir.s | 8 +-- libsrc/telestrat/tgi/telestrat-228-200-3.s | 38 +++++++------- libsrc/telestrat/tgi/telestrat-240-200-2.s | 44 ++++++++-------- libsrc/tgi/tgi_gettextheight.s | 2 +- libsrc/tgi/tgi_imulround.s | 4 +- libsrc/tgi/tgi_lineto.s | 2 +- libsrc/tgi/tgi_outtext.s | 2 +- libsrc/tgi/tgidrv_line.inc | 2 +- 212 files changed, 432 insertions(+), 432 deletions(-) diff --git a/libsrc/apple2/exec.s b/libsrc/apple2/exec.s index 9212ecb8a..0ff4bc6f0 100644 --- a/libsrc/apple2/exec.s +++ b/libsrc/apple2/exec.s @@ -18,7 +18,7 @@ typerr: lda #$4A ; "Incompatible file format" ; Cleanup name oserr: jsr popname ; Preserves A - + ; Set __oserror jmp __mappederrno diff --git a/libsrc/apple2/iobuf.s b/libsrc/apple2/iobuf.s index 77433ce61..f5aacb74a 100644 --- a/libsrc/apple2/iobuf.s +++ b/libsrc/apple2/iobuf.s @@ -2,7 +2,7 @@ ; Oliver Schmidt, 10.9.2009 ; ; Default ProDOS 8 I/O buffer management -; +; .export iobuf_alloc, iobuf_free .import _posix_memalign, _free diff --git a/libsrc/apple2/mcbdefault.s b/libsrc/apple2/mcbdefault.s index c24c5df56..556a9d8fb 100644 --- a/libsrc/apple2/mcbdefault.s +++ b/libsrc/apple2/mcbdefault.s @@ -8,13 +8,13 @@ ; .export _mouse_def_callbacks - + .include "apple2.inc" ; ------------------------------------------------------------------------ .bss - + backup: .res 1 visible:.res 1 diff --git a/libsrc/apple2/mou/a2.stdmou.s b/libsrc/apple2/mou/a2.stdmou.s index c3d10f057..dfc69a942 100644 --- a/libsrc/apple2/mou/a2.stdmou.s +++ b/libsrc/apple2/mou/a2.stdmou.s @@ -152,7 +152,7 @@ next: inc ptr1+1 sta xparam+1 sta jump+2 - ; Disable interrupts now because setting the slot number makes + ; Disable interrupts now because setting the slot number makes ; the IRQ handler (maybe called due to some non-mouse IRQ) try ; calling the firmware which isn't correctly set up yet sei @@ -167,7 +167,7 @@ next: inc ptr1+1 asl asl sta yparam+1 - + ; The AppleMouse II Card needs the ROM switched in ; to be able to detect an Apple //e and use RDVBL bit $C082 @@ -175,7 +175,7 @@ next: inc ptr1+1 ; Reset mouse hardware ldx #INITMOUSE jsr firmware - + ; Switch in LC bank 2 for R/O bit $C080 @@ -236,12 +236,12 @@ UNINSTALL: SETBOX: sta ptr1 stx ptr1+1 - + ; Set x clamps ldx #$00 ldy #MOUSE_BOX::MINX jsr :+ - + ; Set y clamps ldx #$01 ldy #MOUSE_BOX::MINY @@ -257,7 +257,7 @@ SETBOX: sta pos1_lo iny lda (ptr1),y - sta box,y + sta box,y sta pos1_hi ; Skip one word @@ -267,11 +267,11 @@ SETBOX: ; Set high clamp iny lda (ptr1),y - sta box,y + sta box,y sta pos2_lo iny lda (ptr1),y - sta box,y + sta box,y sta pos2_hi txa diff --git a/libsrc/apple2/opendir.c b/libsrc/apple2/opendir.c index 040593118..1144d8511 100644 --- a/libsrc/apple2/opendir.c +++ b/libsrc/apple2/opendir.c @@ -57,7 +57,7 @@ extern char _cwd[FILENAME_MAX]; -DIR* __fastcall__ opendir (register const char* name) +DIR* __fastcall__ opendir (register const char* name) { register DIR* dir; diff --git a/libsrc/apple2/write.s b/libsrc/apple2/write.s index 21f4a45a4..d9dd73ca9 100644 --- a/libsrc/apple2/write.s +++ b/libsrc/apple2/write.s @@ -111,4 +111,4 @@ errno: jmp __directerrno ; Set __oserror oserr: jmp __mappederrno - + diff --git a/libsrc/atari/break.s b/libsrc/atari/break.s index 0cfba1c5a..ae4c8e007 100644 --- a/libsrc/atari/break.s +++ b/libsrc/atari/break.s @@ -63,7 +63,7 @@ L1: lda #<brk_handler ; Set the break vector to our routine lda #$00 sta oldvec ; Clear the old vector stx oldvec+1 -@L9: rts +@L9: rts .endproc diff --git a/libsrc/atari/cclear.s b/libsrc/atari/cclear.s index 7fe3f0f1b..3d3b841cf 100644 --- a/libsrc/atari/cclear.s +++ b/libsrc/atari/cclear.s @@ -17,7 +17,7 @@ _cclearxy: _cclear: cmp #0 ; Is the length zero? beq L9 ; Jump if done - sta tmp1 + sta tmp1 L1: lda #0 ; Blank - screen code jsr cputdirect ; Direct output dec tmp1 diff --git a/libsrc/atari/ctype.s b/libsrc/atari/ctype.s index 2f219f8c3..ca2d3a67f 100644 --- a/libsrc/atari/ctype.s +++ b/libsrc/atari/ctype.s @@ -12,7 +12,7 @@ .include "ctypetable.inc" .export __ctypeidx - + ; The tables are readonly, put them into the rodata segment .rodata diff --git a/libsrc/atari/cvline.s b/libsrc/atari/cvline.s index 735e47dd2..96ceef5c1 100644 --- a/libsrc/atari/cvline.s +++ b/libsrc/atari/cvline.s @@ -5,7 +5,7 @@ ; void cvline (unsigned char length); ; .include "atari.inc" - + .export _cvlinexy, _cvline .import gotoxy, putchar, setcursor .importzp tmp1 diff --git a/libsrc/atari/diopncls.s b/libsrc/atari/diopncls.s index 2cdeba78b..528c0fad8 100644 --- a/libsrc/atari/diopncls.s +++ b/libsrc/atari/diopncls.s @@ -137,7 +137,7 @@ _dio_open: iny lda #1 -finish: sta (ptr2),y ; set default sector size +finish: sta (ptr2),y ; set default sector size fini2: lda ptr2 ldx ptr2+1 rts diff --git a/libsrc/atari/dioqsize.s b/libsrc/atari/dioqsize.s index f26667af7..caef0588f 100644 --- a/libsrc/atari/dioqsize.s +++ b/libsrc/atari/dioqsize.s @@ -12,7 +12,7 @@ .proc _dio_query_sectsize sta ptr1 ; handle - stx ptr1+1 + stx ptr1+1 lda #0 sta __oserror diff --git a/libsrc/atari/doesclrscr.s b/libsrc/atari/doesclrscr.s index f937f9ac5..4b2f30b2a 100644 --- a/libsrc/atari/doesclrscr.s +++ b/libsrc/atari/doesclrscr.s @@ -12,7 +12,7 @@ .ifdef __ATARIXL__ _doesclrscrafterexit = return1 ; the c65 runtime always clears the screen at program termination -.else +.else _doesclrscrafterexit: jsr __is_cmdline_dos ; currently (unless a DOS behaving differently is popping up) eor #$01 ; we can get by with the inverse of __is_cmdline_dos diff --git a/libsrc/atari/emd/atr130.s b/libsrc/atari/emd/atr130.s index f2d5777d5..7f4d51590 100644 --- a/libsrc/atari/emd/atr130.s +++ b/libsrc/atari/emd/atr130.s @@ -11,7 +11,7 @@ ; Bit 2: bank control ; Bit 1: BASIC on/off ; Bit 0: OS RAM on/off -; +; ; Masks: %11100011 $E3 Bank 0 ; %11100111 $E7 Bank 1 ; %11101011 $EB Bank 2 @@ -67,7 +67,7 @@ ; Constants BANK = $4000 ; bank window -STACK = $0100 ; stack location +STACK = $0100 ; stack location PAGES = 256 ; 4 x 16k banks @@ -93,17 +93,17 @@ stacktest: sei @2: sta $4000 ; restore cli rts -stacktest_end: +stacktest_end: stackcopy: sei ; disable interrupts @1: dex ; pre-decrement (full page x=0) ldy #$FF ; this will be replaced STACK+3 - sty $D301 ; set bank + sty $D301 ; set bank lda $FF00,x ; address to copy from STACK+8,+9 ldy #$FF ; this will be replaced STACK+11 - sty $D301 + sty $D301 sta $FF00,x ; address to copy to STACK+16,+17 - cpx #0 + cpx #0 bne @1 ldy #$FF ; portb_save STACK+23 sty $D301 @@ -122,7 +122,7 @@ stackcopy_byte: sei sty $D301 cli rts -stackcopy_byte_end: +stackcopy_byte_end: .data @@ -186,14 +186,14 @@ setpage: INSTALL: lda $D301 ; save state of portb sta portb_save - tay + tay jsr install_test ; doesn't touch Y sty STACK+13 lda $4000 ; test for extended memory jsr STACK - bcs @1 + bcs @1 lda #EM_ERR_OK rts @1: lda #EM_ERR_NO_DEVICE @@ -242,7 +242,7 @@ MAP: jsr setpage ; extract the bank/page lda banks,x sta STACK+3 ; set bank to copy from ; lda ptr1 -; sta STACK+8 +; sta STACK+8 lda ptr1+1 sta STACK+9 ; set copy from address lda portb_save @@ -251,10 +251,10 @@ MAP: jsr setpage ; extract the bank/page lda ptr2 sta STACK+16 lda ptr2+1 - sta STACK+17 ; set copy to address + sta STACK+17 ; set copy to address ldx #0 ; full page copy - jsr STACK ; do the copy! + jsr STACK ; do the copy! ; Return the memory window @@ -298,7 +298,7 @@ COMMIT: lda curpage ; Get the current page sta STACK+3 ; set bank to copy from sta STACK+23 ; set final portb restore lda ptr1 - sta STACK+8 + sta STACK+8 lda ptr1+1 sta STACK+9 ; set copy from address ldx curbank @@ -307,10 +307,10 @@ COMMIT: lda curpage ; Get the current page ;lda ptr2 ;sta STACK+16 lda ptr2+1 - sta STACK+17 ; set copy to address + sta STACK+17 ; set copy to address ldx #0 ; full page copy - jsr STACK ; do the copy! + jsr STACK ; do the copy! commit_done: rts @@ -329,7 +329,7 @@ COPYFROM: ldy #EM_COPY::OFFS lda (ptr3),y - sta STACK+7 ; offset goes into BANK low + sta STACK+7 ; offset goes into BANK low ldy #EM_COPY::PAGE lda (ptr3),y @@ -357,9 +357,9 @@ COPYFROM: add #>BANK ; add to BANK address sta STACK+8 ; current page in bank ldx curbank - lda banks,x - sta STACK+2 ; set bank in stack - lda portb_save + lda banks,x + sta STACK+2 ; set bank in stack + lda portb_save sta STACK+10 ; set bank restore in stack sta STACK+18 ; set final restore too @@ -399,7 +399,7 @@ copyfrom_copy: bne @3 inc STACK+16 -@3: jmp copyfrom_copy ; copy another byte +@3: jmp copyfrom_copy ; copy another byte done: rts @@ -418,7 +418,7 @@ COPYTO: ldy #EM_COPY::OFFS lda (ptr3),y - sta STACK+15 ; offset goes into BANK low + sta STACK+15 ; offset goes into BANK low ldy #EM_COPY::PAGE lda (ptr3),y @@ -446,9 +446,9 @@ COPYTO: add #>BANK ; add to BANK address sta STACK+16 ; current page in bank ldx curbank - lda banks,x - sta STACK+10 ; set bank in stack - lda portb_save + lda banks,x + sta STACK+10 ; set bank in stack + lda portb_save sta STACK+2 ; set bank restore in stack sta STACK+18 ; set final restore too @@ -488,5 +488,5 @@ copyto_copy: bne @3 inc STACK+8 -@3: jmp copyto_copy ; copy another byte +@3: jmp copyto_copy ; copy another byte diff --git a/libsrc/atari/mcbtxtchar.s b/libsrc/atari/mcbtxtchar.s index 4ff79c651..95dd1651a 100644 --- a/libsrc/atari/mcbtxtchar.s +++ b/libsrc/atari/mcbtxtchar.s @@ -74,7 +74,7 @@ prep: jsr getcursor ; Get character at cursor position cmp #mouse_txt_char ; "mouse" character bne overwr ; no, probably program has overwritten it - lda backup ; + lda backup ; jmp setcursor ; Draw character overwr: sta backup rts diff --git a/libsrc/atari/randomize.s b/libsrc/atari/randomize.s index ed4400b55..915fee3bd 100644 --- a/libsrc/atari/randomize.s +++ b/libsrc/atari/randomize.s @@ -10,7 +10,7 @@ .include "atari.inc" -__randomize: +__randomize: ldx VCOUNT ; Use vertical line counter as high byte lda RTCLOK+2 ; Use clock as low byte jmp _srand ; Initialize generator diff --git a/libsrc/atari/revers.s b/libsrc/atari/revers.s index 719503940..23126a88f 100644 --- a/libsrc/atari/revers.s +++ b/libsrc/atari/revers.s @@ -4,7 +4,7 @@ ; unsigned char revers (unsigned char onoff); ; .include "atari.inc" - + .export _revers .export _revflag diff --git a/libsrc/atari/shadow_ram_handlers.s b/libsrc/atari/shadow_ram_handlers.s index a8ba611b6..eaea35195 100644 --- a/libsrc/atari/shadow_ram_handlers.s +++ b/libsrc/atari/shadow_ram_handlers.s @@ -737,9 +737,9 @@ fn_cont:jsr get_fn_len lda #0 sta ICBLH,x jsr chk_CIO_buf - pla + pla sta ICBLH,x - pla + pla sta ICBLL,x pla tay @@ -756,7 +756,7 @@ chk_CIO_buf: lda ICBAH,x cmp #$c0 bcc @cont -@ret: +@ret: .ifdef DEBUG jsr CIO_buf_noti .endif diff --git a/libsrc/atari/system_check.s b/libsrc/atari/system_check.s index df7c433a4..762fc954f 100644 --- a/libsrc/atari/system_check.s +++ b/libsrc/atari/system_check.s @@ -93,7 +93,7 @@ sdnobw: lda DOS+1 ; SD version ldy #31 ; offset for OSRMFLG lda (DOSVEC),y ; get OSRMFLG bne sdcrts1 - + sdcrts0:clc rts sdcrts1:sec diff --git a/libsrc/atari/xlmemchk.inc b/libsrc/atari/xlmemchk.inc index f8be1c137..ecb874799 100644 --- a/libsrc/atari/xlmemchk.inc +++ b/libsrc/atari/xlmemchk.inc @@ -7,7 +7,7 @@ ; It calculates the value to put into RAMTOP for a subsequent ; "GRAPHICS 0" call, and the lowest address which will be used ; by the screen memory afterwards. -; +; ; inputs: ; __STARTADDRESS__ - load address of the program ; outputs: diff --git a/libsrc/atari5200/conioscreen.s b/libsrc/atari5200/conioscreen.s index 1311e874c..8c78fd44f 100644 --- a/libsrc/atari5200/conioscreen.s +++ b/libsrc/atari5200/conioscreen.s @@ -74,7 +74,7 @@ conio_color: .res 1 dlist: .repeat 3 .byte DL_BLK8 .endrepeat - + .byte DL_CHR20x8x2 | DL_LMS .word SCREEN_BUF diff --git a/libsrc/atari5200/cvline.s b/libsrc/atari5200/cvline.s index 204d90382..b4b3f1a3e 100644 --- a/libsrc/atari5200/cvline.s +++ b/libsrc/atari5200/cvline.s @@ -5,7 +5,7 @@ ; void cvline (unsigned char length); ; .include "atari5200.inc" - + .export _cvlinexy, _cvline .import gotoxy, putchar .importzp tmp1 diff --git a/libsrc/atari5200/extra/conioscreen-20x12.s b/libsrc/atari5200/extra/conioscreen-20x12.s index e591bf05a..aeb11cb43 100644 --- a/libsrc/atari5200/extra/conioscreen-20x12.s +++ b/libsrc/atari5200/extra/conioscreen-20x12.s @@ -74,7 +74,7 @@ conio_color: .res 1 dlist: .repeat 3 .byte DL_BLK8 .endrepeat - + .byte DL_CHR20x16x2 | DL_LMS .word SCREEN_BUF diff --git a/libsrc/atari5200/joy/atr5200std.s b/libsrc/atari5200/joy/atr5200std.s index 989bc5ee0..fb7946bea 100644 --- a/libsrc/atari5200/joy/atr5200std.s +++ b/libsrc/atari5200/joy/atr5200std.s @@ -44,7 +44,7 @@ ; INSTALL: - lda #$04 ; enable POT input from the joystick ports, see section "GTIA" in + lda #$04 ; enable POT input from the joystick ports, see section "GTIA" in sta CONSOL ; http://www.atarimuseum.com/videogames/consoles/5200/conv_to_5200.html lda #JOY_ERR_OK ldx #0 diff --git a/libsrc/atari5200/randomize.s b/libsrc/atari5200/randomize.s index ef462827e..978ccf3f3 100644 --- a/libsrc/atari5200/randomize.s +++ b/libsrc/atari5200/randomize.s @@ -10,7 +10,7 @@ .include "atari5200.inc" -__randomize: +__randomize: ldx VCOUNT ; Use vertical line counter as high byte lda RTCLOK+1 ; Use clock as low byte jmp _srand ; Initialize generator diff --git a/libsrc/atari5200/y2k.inc b/libsrc/atari5200/y2k.inc index f8531451c..9f7917cd3 100644 --- a/libsrc/atari5200/y2k.inc +++ b/libsrc/atari5200/y2k.inc @@ -9,16 +9,16 @@ Y2K LDY #$00 ; Copy BIOS opening screen to RAM CPX #$E8 ; Is this a 4 port? BNE Y2K0 ; Jump if not LDA #$42 ; Yes, 4 port system -Y2K0 STA TEMPL -Y2K1 LDA (TEMPL),Y +Y2K0 STA TEMPL +Y2K1 LDA (TEMPL),Y STA $0600,Y - INY + INY BNE Y2K1 LDY #$50 INC TEMPH -Y2K2 LDA (TEMPL),Y +Y2K2 LDA (TEMPL),Y STA $0700,Y - DEY + DEY BPL Y2K2 LDA #$D4 ; Point to copyright string STA $0724 @@ -26,8 +26,8 @@ Y2K2 LDA (TEMPL),Y STA $0725 LDX #$0B ; Store NOP's @ end LDA #$EA -Y2K3 STA $0732,X - DEX +Y2K3 STA $0732,X + DEX BPL Y2K3 LDA #$60 ; Store RTS opcode @ end STA $0750 diff --git a/libsrc/atari7800/crt0.s b/libsrc/atari7800/crt0.s index cefe16730..e791179f3 100644 --- a/libsrc/atari7800/crt0.s +++ b/libsrc/atari7800/crt0.s @@ -19,7 +19,7 @@ start: sei ; Initialize 6502 cld lda #$07 ; Lock machine in 7800 mode - sta INPTCTRL + sta INPTCTRL lda #$7f ; DMA off sta CTRL ldx #0 ; OFFSET must always be 0 @@ -28,7 +28,7 @@ start: dex ; Stack pointer = $ff txs - ; Set up parameter stack + ; Set up parameter stack lda #<(__RAM3_START__ + __RAM3_SIZE__) sta sp lda #>(__RAM3_START__ + __RAM3_SIZE__) @@ -48,7 +48,7 @@ _exit: jsr donelib jmp start -NMIHandler: +NMIHandler: inc _zonecounter jmp IRQStub diff --git a/libsrc/atari7800/joy/atari7800-stdjoy.s b/libsrc/atari7800/joy/atari7800-stdjoy.s index cea6625a4..d76e1d105 100644 --- a/libsrc/atari7800/joy/atari7800-stdjoy.s +++ b/libsrc/atari7800/joy/atari7800-stdjoy.s @@ -85,7 +85,7 @@ COUNT: rts ; ------------------------------------------------------------------------ -; READ: Read a particular joystick passed in A for 2 fire buttons. +; READ: Read a particular joystick passed in A for 2 fire buttons. readbuttons: ; Y has joystick of interest 0/1 diff --git a/libsrc/atmos/cclear.s b/libsrc/atmos/cclear.s index 9d356a8ab..f6416363c 100644 --- a/libsrc/atmos/cclear.s +++ b/libsrc/atmos/cclear.s @@ -6,7 +6,7 @@ ; .export _cclearxy, _cclear - .import setscrptr + .import setscrptr .import rvs .import popax .importzp ptr2 @@ -25,7 +25,7 @@ _cclear: tax ; Is the length zero? beq @L9 ; Jump if done jsr setscrptr ; Set ptr2 to screen, won't use X - lda #' ' + lda #' ' ora rvs @L1: sta (ptr2),y ; Write one char iny ; Next char diff --git a/libsrc/atmos/ctype.s b/libsrc/atmos/ctype.s index 90a3baa6e..57ad8c1a3 100644 --- a/libsrc/atmos/ctype.s +++ b/libsrc/atmos/ctype.s @@ -119,7 +119,7 @@ __ctypeidx: ct_mix CT_NONE_IDX, CT_NONE_IDX ; 186/ba ___________, 187/bb ___________ ct_mix CT_NONE_IDX, CT_NONE_IDX ; 188/bc ___________, 189/bd ___________ ct_mix CT_NONE_IDX, CT_NONE_IDX ; 190/be ___________, 191/bf ___________ - + ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 192/c0 ___________, 193/c1 ___________ ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 194/c2 ___________, 195/c3 ___________ ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 196/c4 ___________, 197/c5 ___________ diff --git a/libsrc/c128/emd/c128-vdc.s b/libsrc/c128/emd/c128-vdc.s index e294ddc18..accb82154 100644 --- a/libsrc/c128/emd/c128-vdc.s +++ b/libsrc/c128/emd/c128-vdc.s @@ -73,7 +73,7 @@ INSTALL: lda #$ff sta curpage sta curpage+1 - + ; do test for VDC presence here??? ldx #VDC_CSET ; determine size of RAM... jsr vdcgetreg @@ -97,29 +97,29 @@ INSTALL: jsr vdcputbyte ; restore original value of test byte ldx #0 ; prepare x with hi of default pagecount - + lda ptr1 ; do bytes match? cmp ptr1+1 bne @have64k lda ptr2 cmp ptr2+1 bne @have64k - + lda #64 ; assumes x = 0, here -> p.c = 64 bne @setpagecnt -@have64k: +@have64k: txa ; assumes x = 0, here inx ; so that a/x becomes 0/1 -> p.c. = 256 -@setpagecnt: +@setpagecnt: sta pagecount stx pagecount+1 txa - bne @keep64kBit - + bne @keep64kBit + ldx #VDC_CSET ; restore 16/64k flag - lda vdc_cset_save - jsr vdcputreg + lda vdc_cset_save + jsr vdcputreg @keep64kBit: lda #<EM_ERR_OK ldx #>EM_ERR_OK diff --git a/libsrc/c64/sysuname.s b/libsrc/c64/sysuname.s index 2d185a1c8..1903986c9 100644 --- a/libsrc/c64/sysuname.s +++ b/libsrc/c64/sysuname.s @@ -12,7 +12,7 @@ ;-------------------------------------------------------------------------- ; Data. We define a fixed utsname struct here and just copy it. - + .rodata utsdata: diff --git a/libsrc/cbm/cbm_save.c b/libsrc/cbm/cbm_save.c index 7f774b1b6..2e22b89fc 100644 --- a/libsrc/cbm/cbm_save.c +++ b/libsrc/cbm/cbm_save.c @@ -12,9 +12,9 @@ /* saves a memory area from start to end-1 to a file. */ -unsigned char __fastcall__ cbm_save (const char* name, +unsigned char __fastcall__ cbm_save (const char* name, unsigned char device, - const void* data, + const void* data, unsigned int size) { cbm_k_setlfs(0, device, 0); diff --git a/libsrc/cbm/ctype.s b/libsrc/cbm/ctype.s index 7388f68b8..a66905fe7 100644 --- a/libsrc/cbm/ctype.s +++ b/libsrc/cbm/ctype.s @@ -13,7 +13,7 @@ .include "ctypetable.inc" .export __ctypeidx - + ; The tables are readonly, put them into the rodata segment .rodata diff --git a/libsrc/cbm/opendir.c b/libsrc/cbm/opendir.c index b39e6b77e..87b9ab73d 100644 --- a/libsrc/cbm/opendir.c +++ b/libsrc/cbm/opendir.c @@ -38,7 +38,7 @@ DIR* __fastcall__ opendir (register const char* name) d.fd = open (d.name, O_RDONLY); if (d.fd >= 0) { - /* Skip the load address */ + /* Skip the load address */ if (_dirread (&d, buf, sizeof (buf))) { /* Allocate memory for the DIR structure returned */ diff --git a/libsrc/cbm610/revers.s b/libsrc/cbm610/revers.s index eb44f0282..78b8a0591 100644 --- a/libsrc/cbm610/revers.s +++ b/libsrc/cbm610/revers.s @@ -9,7 +9,7 @@ .import RVS: zp .include "cbm610.inc" - + .proc _revers diff --git a/libsrc/common/_heap.s b/libsrc/common/_heap.s index e2470577a..4ec8c80cd 100644 --- a/libsrc/common/_heap.s +++ b/libsrc/common/_heap.s @@ -39,4 +39,4 @@ initheap: sta __heapend+1 rts - + diff --git a/libsrc/common/_heapmaxavail.s b/libsrc/common/_heapmaxavail.s index 4d44fadc1..19ae18b8d 100644 --- a/libsrc/common/_heapmaxavail.s +++ b/libsrc/common/_heapmaxavail.s @@ -6,7 +6,7 @@ ; size_t _heapmaxavail (void); ; ; - + .importzp ptr1, ptr2 .export __heapmaxavail diff --git a/libsrc/common/_longminstr.c b/libsrc/common/_longminstr.c index ffc35aa77..28a19f39b 100644 --- a/libsrc/common/_longminstr.c +++ b/libsrc/common/_longminstr.c @@ -1,9 +1,9 @@ /* ** Ullrich von Bassewitz, 2012-11-26 ** -** Minimum value of a long. Is used in ascii conversions, since this value +** Minimum value of a long. Is used in ascii conversions, since this value ** has no positive counterpart than can be represented in 32 bits. In C, -** since the compiler will convert to the correct character set for the +** since the compiler will convert to the correct character set for the ** target platform. */ diff --git a/libsrc/common/_seterrno.s b/libsrc/common/_seterrno.s index e35c0b342..79021143a 100644 --- a/libsrc/common/_seterrno.s +++ b/libsrc/common/_seterrno.s @@ -2,7 +2,7 @@ ; Ullrich von Bassewitz, 2004-05-13 ; ; __seterrno: Will set __errno to the value in A and return zero in A. Other -; registers aren't changed. The function is C callable, but +; registers aren't changed. The function is C callable, but ; currently only called from asm code. ; diff --git a/libsrc/common/abort.c b/libsrc/common/abort.c index 1dda559bb..1100d33a3 100644 --- a/libsrc/common/abort.c +++ b/libsrc/common/abort.c @@ -7,7 +7,7 @@ #include <stdio.h> -#include <stdlib.h> +#include <stdlib.h> #include <signal.h> diff --git a/libsrc/common/ctypemask.s b/libsrc/common/ctypemask.s index b518a10c0..9238f24e9 100644 --- a/libsrc/common/ctypemask.s +++ b/libsrc/common/ctypemask.s @@ -9,7 +9,7 @@ ; ; ctypemask(int c) ; -; converts a character to test via the is*-functions to the matching ctype-masks +; converts a character to test via the is*-functions to the matching ctype-masks ; If c is out of the 8-bit range, the function returns with carry set and accu cleared. ; Return value is in accu and x has to be always clear when returning ; (makes calling code shorter)! diff --git a/libsrc/common/divt.s b/libsrc/common/divt.s index 914eb569d..7f2b4e1bb 100644 --- a/libsrc/common/divt.s +++ b/libsrc/common/divt.s @@ -18,10 +18,10 @@ .importzp sreg, ptr1, tmp1 _div: jsr tosdivax ; Division-operator does most of the work - + ldy sreg ; low byte remainder from sreg sta sreg ; store low byte quotient to sreg - + lda sreg+1 ; high byte remainder from sreg stx sreg+1 ; store high byte quotient to sreg diff --git a/libsrc/common/doesclrscr.s b/libsrc/common/doesclrscr.s index 49ce2fd12..14d9ab804 100644 --- a/libsrc/common/doesclrscr.s +++ b/libsrc/common/doesclrscr.s @@ -7,6 +7,6 @@ ; .export _doesclrscrafterexit - .import return0 + .import return0 _doesclrscrafterexit = return0 diff --git a/libsrc/common/fread.s b/libsrc/common/fread.s index 91d692985..c0733994e 100644 --- a/libsrc/common/fread.s +++ b/libsrc/common/fread.s @@ -161,7 +161,7 @@ bne @L8 ; Error in read. Set the stream error flag and bail out. errno has already -; been set by read(). On entry to label @L7, X must be zero. +; been set by read(). On entry to label @L7, X must be zero. inx ; X = 0 lda #_FERROR diff --git a/libsrc/common/free.s b/libsrc/common/free.s index 00b5e63f8..53796303c 100644 --- a/libsrc/common/free.s +++ b/libsrc/common/free.s @@ -274,7 +274,7 @@ _free: sta ptr2 ; } ; } ; -; +; ; On entry, ptr2 must contain a pointer to the block, which must be at least ; HEAP_MIN_BLOCKSIZE bytes in size, and ptr1 contains the total size of the ; block. diff --git a/libsrc/common/fsetpos.c b/libsrc/common/fsetpos.c index 14690f520..a0cf8d31f 100644 --- a/libsrc/common/fsetpos.c +++ b/libsrc/common/fsetpos.c @@ -21,4 +21,4 @@ int __fastcall__ fsetpos (FILE* f, const fpos_t *pos) return fseek (f, (fpos_t)*pos, SEEK_SET); } - + diff --git a/libsrc/common/fwrite.s b/libsrc/common/fwrite.s index dc0bad1b6..b0fa7ec42 100644 --- a/libsrc/common/fwrite.s +++ b/libsrc/common/fwrite.s @@ -19,7 +19,7 @@ ; ------------------------------------------------------------------------ ; Code - + .proc _fwrite ; Save file and place it into ptr1 diff --git a/libsrc/common/getcwd.s b/libsrc/common/getcwd.s index 4bfc0a5b6..9b856ea7c 100644 --- a/libsrc/common/getcwd.s +++ b/libsrc/common/getcwd.s @@ -53,7 +53,7 @@ overflow: lda #<ERANGE jsr __seterrno ; Returns 0 in A tax ; Return zero - rts + rts ; Success, return buf diff --git a/libsrc/common/ltoa.s b/libsrc/common/ltoa.s index d8d8c988d..78e43e23f 100644 --- a/libsrc/common/ltoa.s +++ b/libsrc/common/ltoa.s @@ -56,7 +56,7 @@ L1: lda __longminstr,y ; copy -2147483648 dey bpl L1 jmp L10 - + ; Check if the value is negative. If so, write a - sign and negate the ; number. @@ -66,7 +66,7 @@ L2: txa ; get high byte .if (.cpu .bitand CPU_ISET_65SC02) sta (ptr2) -.else +.else ldy #0 sta (ptr2),y ; store sign .endif @@ -79,7 +79,7 @@ L3: lda ptr1 ; negate val ldx ptr1+1 jsr negeax - + sta ptr1 stx ptr1+1 jmp ultoa diff --git a/libsrc/common/memcpy.s b/libsrc/common/memcpy.s index 1ee53be07..fd090c788 100644 --- a/libsrc/common/memcpy.s +++ b/libsrc/common/memcpy.s @@ -67,7 +67,7 @@ memcpy_getparams: ; IMPORTANT! Function has to leave with Y=0! jsr popptr1 ; save src to ptr1 ; save dest to ptr2 - iny ; Y=0 guaranteed by popptr1, we need '1' here... + iny ; Y=0 guaranteed by popptr1, we need '1' here... ; (direct stack access is three cycles faster ; (total cycle count with return)) lda (sp),y diff --git a/libsrc/common/memset.s b/libsrc/common/memset.s index 96f5d9e11..a57a90e5c 100644 --- a/libsrc/common/memset.s +++ b/libsrc/common/memset.s @@ -87,7 +87,7 @@ L3: dey sta (ptr1),y ; set bytes in low sta (ptr2),y ; and high section bne L3 ; flags still up to date from dey! -leave: +leave: jmp popax ; Pop ptr and return as result - + diff --git a/libsrc/common/mul20.s b/libsrc/common/mul20.s index 5b3bbf830..ba29b94dd 100644 --- a/libsrc/common/mul20.s +++ b/libsrc/common/mul20.s @@ -9,7 +9,7 @@ ; ; ; unsigned int __fastcall__ mul20(unsigned char value); -; +; ; REMARKS: Function is defined to return with carry-flag cleared @@ -34,7 +34,7 @@ mul5: adc tmp4 ; * 5 inx ; yes, correct... mul10: stx tmp4 ; continue with classic shifting... - + asl a ; * 10 rol tmp4 diff --git a/libsrc/common/mul40.s b/libsrc/common/mul40.s index 07d6164b5..06780a6e0 100644 --- a/libsrc/common/mul40.s +++ b/libsrc/common/mul40.s @@ -9,7 +9,7 @@ ; ; ; unsigned int __fastcall__ mul40(unsigned char value); -; +; ; REMARKS: Function is defined to return with carry-flag cleared @@ -34,7 +34,7 @@ mul5: adc tmp4 ; * 5 inx ; yes, correct... mul10: stx tmp4 ; continue with classic shifting... - + asl a ; * 10 rol tmp4 diff --git a/libsrc/common/putenv.s b/libsrc/common/putenv.s index 7e44a7cd8..c68d20a32 100644 --- a/libsrc/common/putenv.s +++ b/libsrc/common/putenv.s @@ -185,4 +185,4 @@ error: jsr __seterrno name: .addr 0 ; Pointer to name newsize: .byte 0 ; New environment size - + diff --git a/libsrc/common/raise.s b/libsrc/common/raise.s index db96cdcd0..07898ef90 100644 --- a/libsrc/common/raise.s +++ b/libsrc/common/raise.s @@ -28,9 +28,9 @@ _raise: sta jmpvec+1 lda sigtable+1,x sta jmpvec+2 - + ; Reset the signal handler to SIG_DFL (I don't like this because it may -; introduce race conditions, but it's the simplest way to satisfy the +; introduce race conditions, but it's the simplest way to satisfy the ; standard). lda #<__sig_dfl @@ -51,4 +51,4 @@ _raise: invalidsig: rts - + diff --git a/libsrc/common/rewind.c b/libsrc/common/rewind.c index a4cdfa97c..333230b74 100644 --- a/libsrc/common/rewind.c +++ b/libsrc/common/rewind.c @@ -22,4 +22,4 @@ void __fastcall__ rewind (FILE* f) clearerr(f); } - + diff --git a/libsrc/common/strcspn.s b/libsrc/common/strcspn.s index 9cf159218..4bb01479a 100644 --- a/libsrc/common/strcspn.s +++ b/libsrc/common/strcspn.s @@ -20,7 +20,7 @@ _strcspn: sta tmp1 ; tmp1 = strlen of test chars jsr popptr1 ; get and save s1 to ptr1 - + ldx #0 ; low counter byte stx tmp2 ; high counter byte diff --git a/libsrc/common/strncat.s b/libsrc/common/strncat.s index 060378442..75572db7c 100644 --- a/libsrc/common/strncat.s +++ b/libsrc/common/strncat.s @@ -9,19 +9,19 @@ .import popax, popptr1 .importzp ptr1, ptr2, ptr3, tmp1, tmp2 .macpack cpu - + _strncat: inx stx tmp2 tax inx stx tmp1 ; save count with each byte incremented separately - + jsr popptr1 ; get src jsr popax ; get dest sta ptr3 ; remember for function return - stx ptr3+1 + stx ptr3+1 stx ptr2+1 tay ; low byte as offset in Y .if (.cpu .bitand ::CPU_ISET_65SC02) diff --git a/libsrc/common/strrchr.s b/libsrc/common/strrchr.s index 3e4fb0810..2858337b5 100644 --- a/libsrc/common/strrchr.s +++ b/libsrc/common/strrchr.s @@ -16,8 +16,8 @@ _strrchr: stx ptr1+1 ldx #0 ; default function result is NULL, X is high byte... stx tmp2 ; tmp2 is low-byte - stx ptr1 ; low-byte of source string is in Y, so clear real one... - + stx ptr1 ; low-byte of source string is in Y, so clear real one... + testChar: lda (ptr1),y ; get char beq finished ; jump if end of string diff --git a/libsrc/common/ungetc.s b/libsrc/common/ungetc.s index 386c450a8..88595068c 100644 --- a/libsrc/common/ungetc.s +++ b/libsrc/common/ungetc.s @@ -68,4 +68,4 @@ error: lda #EINVAL rts .endproc - + diff --git a/libsrc/common/vsprintf.s b/libsrc/common/vsprintf.s index eb47dae18..b4cb9c419 100644 --- a/libsrc/common/vsprintf.s +++ b/libsrc/common/vsprintf.s @@ -30,7 +30,7 @@ _vsprintf: ldy #2 jsr staxysp -; Contine by jumping to vsnprintf, which expects ap on the CPU stack and will +; Contine by jumping to vsnprintf, which expects ap on the CPU stack and will ; cleanup the C stack jmp vsnprintf diff --git a/libsrc/conio/cputs.s b/libsrc/conio/cputs.s index ef7c65462..41191a0b0 100644 --- a/libsrc/conio/cputs.s +++ b/libsrc/conio/cputs.s @@ -8,7 +8,7 @@ .export _cputsxy, _cputs .import gotoxy, _cputc .importzp ptr1, tmp1 - + _cputsxy: sta ptr1 ; Save s for later stx ptr1+1 diff --git a/libsrc/conio/scrsize.s b/libsrc/conio/scrsize.s index 014b6f08b..834c14820 100644 --- a/libsrc/conio/scrsize.s +++ b/libsrc/conio/scrsize.s @@ -10,7 +10,7 @@ .import screensize .importzp ptr1, ptr2 - .macpack cpu + .macpack cpu .proc _screensize @@ -29,7 +29,7 @@ sta (ptr2),y txa sta (ptr1),y -.endif +.endif rts .endproc diff --git a/libsrc/creativision/_scrsize.s b/libsrc/creativision/_scrsize.s index 9e4ce53c7..b1b05efea 100644 --- a/libsrc/creativision/_scrsize.s +++ b/libsrc/creativision/_scrsize.s @@ -3,13 +3,13 @@ ;* .export screensize - + .include "creativision.inc" - + .proc screensize ldx #SCREEN_COLS ldy #SCREEN_ROWS rts - + .endproc diff --git a/libsrc/creativision/boxchars.inc b/libsrc/creativision/boxchars.inc index 45484a5d2..5fbb3409d 100644 --- a/libsrc/creativision/boxchars.inc +++ b/libsrc/creativision/boxchars.inc @@ -2,7 +2,7 @@ boxchars: ; Vertical Line - .byte $18 + .byte $18 .byte $18 .byte $18 .byte $18 @@ -29,7 +29,7 @@ boxchars: .byte $18 .byte $18 .byte $18 - .byte $18 + .byte $18 ; Top Right .byte $00 @@ -39,7 +39,7 @@ boxchars: .byte $18 .byte $18 .byte $18 - .byte $18 + .byte $18 ; Bottom Left .byte $18 @@ -49,7 +49,7 @@ boxchars: .byte $00 .byte $00 .byte $00 - .byte $00 + .byte $00 ; Bottom Right .byte $18 @@ -59,4 +59,4 @@ boxchars: .byte $00 .byte $00 .byte $00 - .byte $00 + .byte $00 diff --git a/libsrc/dbg/asmtab.s b/libsrc/dbg/asmtab.s index 3d27aea1f..fdeedaa48 100644 --- a/libsrc/dbg/asmtab.s +++ b/libsrc/dbg/asmtab.s @@ -57,5 +57,5 @@ MnemoTab2: .byte $C4,$CA,$26,$48,$44,$44,$A2,$C8 - + diff --git a/libsrc/dbg/dbg.c b/libsrc/dbg/dbg.c index 27f2086eb..832ed0a20 100644 --- a/libsrc/dbg/dbg.c +++ b/libsrc/dbg/dbg.c @@ -1579,12 +1579,12 @@ void DbgEntry (void) case 'q': /* Quit program */ clrscr (); - + /* Exit intentionally with error because one may - ** say that DbgEntry is always abnormal. + ** say that DbgEntry is always abnormal. */ exit (EXIT_FAILURE); - + } } } diff --git a/libsrc/dbg/dbgdasm.s b/libsrc/dbg/dbgdasm.s index 9899c0add..cd1287a8a 100644 --- a/libsrc/dbg/dbgdasm.s +++ b/libsrc/dbg/dbgdasm.s @@ -77,7 +77,7 @@ disassret: inx ; Adjust for opcode byte txa ldx #$00 ; Clear high byte - rts + rts ; ------------------------------------------------------------------------- ; Helper functions diff --git a/libsrc/em/em_load.s b/libsrc/em/em_load.s index 1e4a364e2..39abbc8a5 100644 --- a/libsrc/em/em_load.s +++ b/libsrc/em/em_load.s @@ -29,7 +29,7 @@ ctrl: .addr _read .res 2 ; MODULE .res 2 ; MODULE_SIZE .res 2 ; MODULE_ID - + ;---------------------------------------------------------------------------- ; Code diff --git a/libsrc/gamate/cputc.s b/libsrc/gamate/cputc.s index d80e8b41a..a5d591d1e 100644 --- a/libsrc/gamate/cputc.s +++ b/libsrc/gamate/cputc.s @@ -97,7 +97,7 @@ putchar: ldy #$F8 lda CHARCOLOR - lsr + lsr bcc @delete1 @copylp1: @@ -106,7 +106,7 @@ putchar: sta LCD_DATA iny bne @copylp1 - + beq @skip_delete1 @delete1: @@ -126,9 +126,9 @@ putchar: ldx CURS_Y lda _plotlo,x sta LCD_Y - - ldy #$F8 - + + ldy #$F8 + lda CHARCOLOR and #2 beq @delete2 @@ -139,9 +139,9 @@ putchar: sta LCD_DATA iny bne @copylp2 - + beq @skip_delete2 - + @delete2: lda #$00 @del2: diff --git a/libsrc/geos-apple/disk/exitturbo.s b/libsrc/geos-apple/disk/exitturbo.s index 7098a56c4..14164d2e9 100644 --- a/libsrc/geos-apple/disk/exitturbo.s +++ b/libsrc/geos-apple/disk/exitturbo.s @@ -9,5 +9,5 @@ .import return0 _ExitTurbo = return0 - - + + diff --git a/libsrc/geos-cbm/disk/changediskdevice.s b/libsrc/geos-cbm/disk/changediskdevice.s index c3035deee..dd9c91609 100644 --- a/libsrc/geos-cbm/disk/changediskdevice.s +++ b/libsrc/geos-cbm/disk/changediskdevice.s @@ -9,7 +9,7 @@ .import setoserror .include "jumptab.inc" - + _ChangeDiskDevice: jsr ChangeDiskDevice jmp setoserror diff --git a/libsrc/geos-cbm/disk/chkdkgeos.s b/libsrc/geos-cbm/disk/chkdkgeos.s index c2b4821a4..a091916d7 100644 --- a/libsrc/geos-cbm/disk/chkdkgeos.s +++ b/libsrc/geos-cbm/disk/chkdkgeos.s @@ -10,7 +10,7 @@ .include "jumptab.inc" .include "geossym.inc" - + _ChkDkGEOS: jsr ChkDkGEOS jsr setoserror diff --git a/libsrc/geos-cbm/disk/dio_cts.s b/libsrc/geos-cbm/disk/dio_cts.s index 043e1f8d8..478181b69 100644 --- a/libsrc/geos-cbm/disk/dio_cts.s +++ b/libsrc/geos-cbm/disk/dio_cts.s @@ -20,21 +20,21 @@ _dio_phys_to_log: sta ptr1 stx ptr1+1 ; pointer to result - + jsr popax sta ptr2 stx ptr2+1 ; pointer to input structure - + jsr popax sta ptr3 stx ptr3+1 ; pointer to handle - + ldy #sst_flag lda (ptr3),y and #128 beq _inv_hand ; handle not open or invalid - - + + ldy #diopp_head lda (ptr2),y bne _inv_data ; there is only head 0 @@ -66,7 +66,7 @@ _dio_phys_to_log: beq dio_cts1571 cmp #DRV_1581 beq dio_cts1581 - + lda #INCOMPATIBLE ; unsupported device ldx #0 beq ret @@ -78,10 +78,10 @@ dio_ctsend: dey lda tmp1 sta (ptr1),y - + ldx #0 txa -ret: +ret: sta __oserror rts ; return success diff --git a/libsrc/geos-cbm/disk/dio_openclose.s b/libsrc/geos-cbm/disk/dio_openclose.s index 72e3e32e9..327503017 100644 --- a/libsrc/geos-cbm/disk/dio_openclose.s +++ b/libsrc/geos-cbm/disk/dio_openclose.s @@ -45,7 +45,7 @@ _dio_open: asl a ; make index from drive id asl a tax - + lda #0 sta sectsizetab+sst_sectsize,x lda #128 @@ -54,7 +54,7 @@ _dio_open: sta sectsizetab+sst_sectsize+1,x tya sta sectsizetab+sst_driveno,x - + stx tmp1 lda #<sectsizetab clc diff --git a/libsrc/geos-cbm/disk/dio_stc.s b/libsrc/geos-cbm/disk/dio_stc.s index 7398edb63..469df93ca 100644 --- a/libsrc/geos-cbm/disk/dio_stc.s +++ b/libsrc/geos-cbm/disk/dio_stc.s @@ -20,15 +20,15 @@ _dio_log_to_phys: ; check device type sta ptr1 stx ptr1+1 ; pointer to result (struct dio_phys_pos) - + jsr popax sta ptr2 stx ptr2+1 ; pointer to input structure (pointer to int) - + jsr popax sta ptr3 stx ptr3+1 ; pointer to handle - + ldy #sst_flag lda (ptr3),y and #128 @@ -42,18 +42,18 @@ _dio_log_to_phys: sta (ptr1),y ; track <256 ldy #diopp_sector+1 sta (ptr1),y ; sector <256 - + ldy #0 lda (ptr2),y sta tmp1 - iny + iny lda (ptr2),y sta tmp2 ; get drive info ldy #sst_driveno lda (ptr3),y - tay + tay lda driveType,y and #%00001111 ; remove ramDisk flags cmp #DRV_1541 @@ -62,7 +62,7 @@ _dio_log_to_phys: beq dio_stc1571 cmp #DRV_1581 beq dio_stc1581 - + lda #INCOMPATIBLE ; unsupported device ldx #0 beq _ret @@ -74,10 +74,10 @@ dio_stcend: ldy #diopp_sector lda tmp2 sta (ptr1),y - + ldx #0 - txa -_ret: + txa +_ret: sta __oserror rts ; return success @@ -107,14 +107,14 @@ _nxt: bcc _found cpx #35 bne _loop41 beq _inv_data - -_found: + +_found: lda tmp1 - sec + sec sbc sectab_1541_l,x sta tmp2 -_fndend: - inx +_fndend: + inx stx tmp1 jmp dio_stcend @@ -128,9 +128,9 @@ dio_stc1571: lda tmp1 cmp #<683 _if71: bcc dio_stc1541 - + lda tmp1 - sec + sec sbc #<683 sta tmp1 lda tmp2 @@ -139,10 +139,10 @@ _if71: bcc dio_stc1541 jsr dio_stc1541 ; will fall through here tay bne _ret ; result beyond track 70 - + ldy #diopp_track lda (ptr1),y - clc + clc adc #35 sta (ptr1),y lda #0 @@ -153,26 +153,26 @@ _if71: bcc dio_stc1541 ; - the remainder is sector dio_stc1581: ldx #0 ; index=(track-1) -_loop81: +_loop81: lda tmp2 bne _sub81 lda tmp1 cmp #40 bcc _got81 _sub81: lda tmp1 - sec + sec sbc #40 sta tmp1 lda tmp2 sbc #0 sta tmp2 - inx + inx cpx #80 bne _loop81 beq _inv_data - + _got81: lda tmp1 sta tmp2 - inx + inx stx tmp1 jmp dio_stcend diff --git a/libsrc/geos-cbm/disk/enterturbo.s b/libsrc/geos-cbm/disk/enterturbo.s index 777822bae..31864e32f 100644 --- a/libsrc/geos-cbm/disk/enterturbo.s +++ b/libsrc/geos-cbm/disk/enterturbo.s @@ -8,5 +8,5 @@ .export _EnterTurbo .include "jumptab.inc" - + _EnterTurbo = EnterTurbo diff --git a/libsrc/geos-cbm/disk/exitturbo.s b/libsrc/geos-cbm/disk/exitturbo.s index ab894aeff..5a37b4682 100644 --- a/libsrc/geos-cbm/disk/exitturbo.s +++ b/libsrc/geos-cbm/disk/exitturbo.s @@ -8,5 +8,5 @@ .export _ExitTurbo .include "jumptab.inc" - + _ExitTurbo = ExitTurbo diff --git a/libsrc/geos-cbm/disk/findbambit.s b/libsrc/geos-cbm/disk/findbambit.s index 3bb566f4d..3a6ffab21 100644 --- a/libsrc/geos-cbm/disk/findbambit.s +++ b/libsrc/geos-cbm/disk/findbambit.s @@ -12,7 +12,7 @@ .include "jumptab.inc" .include "geossym.inc" - + _FindBAMBit: jsr gettrse sta r6L diff --git a/libsrc/geos-cbm/disk/newdisk.s b/libsrc/geos-cbm/disk/newdisk.s index 30c7283ae..99e39604f 100644 --- a/libsrc/geos-cbm/disk/newdisk.s +++ b/libsrc/geos-cbm/disk/newdisk.s @@ -9,7 +9,7 @@ .import setoserror .include "jumptab.inc" - + _NewDisk: jsr NewDisk jmp setoserror diff --git a/libsrc/geos-cbm/disk/purgeturbo.s b/libsrc/geos-cbm/disk/purgeturbo.s index f0a293423..26b61a4fd 100644 --- a/libsrc/geos-cbm/disk/purgeturbo.s +++ b/libsrc/geos-cbm/disk/purgeturbo.s @@ -8,5 +8,5 @@ .export _PurgeTurbo .include "jumptab.inc" - + _PurgeTurbo = PurgeTurbo diff --git a/libsrc/geos-cbm/disk/readblock.s b/libsrc/geos-cbm/disk/readblock.s index 977860d91..d9a25f254 100644 --- a/libsrc/geos-cbm/disk/readblock.s +++ b/libsrc/geos-cbm/disk/readblock.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "geossym.inc" - + _ReadBlock: sta r4L stx r4H diff --git a/libsrc/geos-cbm/disk/readbuff.s b/libsrc/geos-cbm/disk/readbuff.s index 149eae1b9..0c0c90108 100644 --- a/libsrc/geos-cbm/disk/readbuff.s +++ b/libsrc/geos-cbm/disk/readbuff.s @@ -11,7 +11,7 @@ .include "diskdrv.inc" .include "geossym.inc" - + _ReadBuff: jsr gettrse sta r1L diff --git a/libsrc/geos-cbm/disk/verwriteblock.s b/libsrc/geos-cbm/disk/verwriteblock.s index 74243f13f..bb4eabdda 100644 --- a/libsrc/geos-cbm/disk/verwriteblock.s +++ b/libsrc/geos-cbm/disk/verwriteblock.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "geossym.inc" - + _VerWriteBlock: sta r4L stx r4H diff --git a/libsrc/geos-cbm/disk/writeblock.s b/libsrc/geos-cbm/disk/writeblock.s index c5a3b3f7a..7b257e79c 100644 --- a/libsrc/geos-cbm/disk/writeblock.s +++ b/libsrc/geos-cbm/disk/writeblock.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "geossym.inc" - + _WriteBlock: sta r4L stx r4H diff --git a/libsrc/geos-cbm/disk/writebuff.s b/libsrc/geos-cbm/disk/writebuff.s index 34e7b137b..52194ebb1 100644 --- a/libsrc/geos-cbm/disk/writebuff.s +++ b/libsrc/geos-cbm/disk/writebuff.s @@ -11,7 +11,7 @@ .include "diskdrv.inc" .include "geossym.inc" - + _WriteBuff: jsr gettrse sta r1L diff --git a/libsrc/geos-cbm/emd/geos-vdc.s b/libsrc/geos-cbm/emd/geos-vdc.s index 791d2a0a8..27316e1a0 100644 --- a/libsrc/geos-cbm/emd/geos-vdc.s +++ b/libsrc/geos-cbm/emd/geos-vdc.s @@ -82,54 +82,54 @@ INSTALL: pha lda #$35 sta $01 - + ldx #VDC_CSET ; determine size of RAM... jsr vdcgetreg sta tmp1 ora #%00010000 jsr vdcputreg ; turn on 64k - + jsr settestadr1 ; save original value of test byte jsr vdcgetbyte sta tmp2 - + lda #$55 ; write $55 here ldy #ptr1 jsr test64k ; read it here and there lda #$aa ; write $aa here ldy #ptr2 jsr test64k ; read it here and there - + jsr settestadr1 lda tmp2 jsr vdcputbyte ; restore original value of test byte - + lda ptr1 ; do bytes match? cmp ptr1+1 bne @have64k lda ptr2 cmp ptr2+1 bne @have64k - + ldx #VDC_CSET lda tmp1 jsr vdcputreg ; restore 16/64k flag jmp @endok ; and leave default values for 16k - -@have64k: + +@have64k: lda #<256 ldx #>256 sta pagecount stx pagecount+1 -@endok: +@endok: pla sta $01 plp lda #<EM_ERR_OK ldx #>EM_ERR_OK - rts - -test64k: + rts + +test64k: sta tmp1 sty ptr3 lda #0 @@ -186,14 +186,14 @@ MAP: sta curpage sta ptr1+1 ldy #0 sty ptr1 - + lda #<window sta ptr2 lda #>window sta ptr2+1 - + jsr transferin - + lda #<window ldx #>window rts @@ -299,7 +299,7 @@ COPYFROM: bne @L1 ; Copy the remainder of the page - + @L2: ldy #EM_COPY::COUNT lda (ptr3),y ; Get bytes in last page beq @L4 @@ -391,9 +391,9 @@ vdcgetreg: @L0: bit VDC_ADDR_REG bpl @L0 lda VDC_DATA_REG - rts + rts -vdcputbyte: +vdcputbyte: ldx #VDC_DATA vdcputreg: stx VDC_ADDR_REG diff --git a/libsrc/geos-cbm/file/followchain.s b/libsrc/geos-cbm/file/followchain.s index df20bcaac..9b882d59a 100644 --- a/libsrc/geos-cbm/file/followchain.s +++ b/libsrc/geos-cbm/file/followchain.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "geossym.inc" - + _FollowChain: sta r3L stx r3H diff --git a/libsrc/geos-cbm/graph/setnewmode.s b/libsrc/geos-cbm/graph/setnewmode.s index 1d63cf78e..56fc123f7 100644 --- a/libsrc/geos-cbm/graph/setnewmode.s +++ b/libsrc/geos-cbm/graph/setnewmode.s @@ -9,7 +9,7 @@ .include "jumptab.inc" .include "geossym.inc" - + _SetNewMode: lda graphMode eor #$80 diff --git a/libsrc/geos-cbm/system/setdevice.s b/libsrc/geos-cbm/system/setdevice.s index 37a162303..a67c10228 100644 --- a/libsrc/geos-cbm/system/setdevice.s +++ b/libsrc/geos-cbm/system/setdevice.s @@ -8,5 +8,5 @@ .export _SetDevice .include "jumptab.inc" - + _SetDevice = SetDevice diff --git a/libsrc/geos-cbm/tgi/geos-tgi.s b/libsrc/geos-cbm/tgi/geos-tgi.s index 08927e6c1..c04742fb6 100644 --- a/libsrc/geos-cbm/tgi/geos-tgi.s +++ b/libsrc/geos-cbm/tgi/geos-tgi.s @@ -93,7 +93,7 @@ Y2 = ptr4 SCRBASE: .res 1 ; High byte of screen base (64k VDC only) -ERROR: +ERROR: .res 1 ; Error code PALETTE: .res 2 ; The current palette @@ -199,9 +199,9 @@ INSTALL: @endok: lda #0 sta SCRBASE ; draw page 0 as default - rts + rts -test64k: +test64k: sta tmp1 sty ptr3 lda #0 diff --git a/libsrc/geos-common/common/zerobss.s b/libsrc/geos-common/common/zerobss.s index 48fc5a89a..85d3e03eb 100644 --- a/libsrc/geos-common/common/zerobss.s +++ b/libsrc/geos-common/common/zerobss.s @@ -7,7 +7,7 @@ .export zerobss .import __BSS_RUN__, __BSS_SIZE__ - + .include "jumptab.inc" .include "geossym.inc" diff --git a/libsrc/geos-common/conio/_scrsize.s b/libsrc/geos-common/conio/_scrsize.s index 494182b9d..ffb17dec6 100644 --- a/libsrc/geos-common/conio/_scrsize.s +++ b/libsrc/geos-common/conio/_scrsize.s @@ -11,7 +11,7 @@ .importzp cursor_r, cursor_c .import _cursor .constructor initscrsize - + .include "geossym.inc" .segment "ONCE" @@ -38,7 +38,7 @@ L1: lda #40 ; 40 columns (more or less) .code -screensize: +screensize: ldx xsize ldy ysize rts diff --git a/libsrc/geos-common/conio/cputc.s b/libsrc/geos-common/conio/cputc.s index 014c2ed0b..af4194312 100644 --- a/libsrc/geos-common/conio/cputc.s +++ b/libsrc/geos-common/conio/cputc.s @@ -19,7 +19,7 @@ ; ESC_GRAPHICS, ESC_RULER, GOTOX, GOTOY, GOTOXY, NEWCARDSET, all 1..8 ; ; note that there are conflicts between control characters and keyboard: -; HOME = KEY_ENTER, KEY_HOME = REV_ON, +; HOME = KEY_ENTER, KEY_HOME = REV_ON, ; UPLINE = ?, KEY_UPARROW = GOTOY, ... .export _cputcxy, _cputc diff --git a/libsrc/geos-common/conio/cvline.s b/libsrc/geos-common/conio/cvline.s index c12b8764b..9aa3d3eee 100644 --- a/libsrc/geos-common/conio/cvline.s +++ b/libsrc/geos-common/conio/cvline.s @@ -18,7 +18,7 @@ _cvlinexy: jsr gotoxy ; Call this one, will pop params pla ; Restore the length -_cvline: +_cvline: cmp #0 ; Is the length zero? beq L9 ; Jump if done tax diff --git a/libsrc/geos-common/disk/blkalloc.s b/libsrc/geos-common/disk/blkalloc.s index 6bfcb312c..bace80098 100644 --- a/libsrc/geos-common/disk/blkalloc.s +++ b/libsrc/geos-common/disk/blkalloc.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _BlkAlloc: sta r2L stx r2H diff --git a/libsrc/geos-common/disk/calcblksfree.s b/libsrc/geos-common/disk/calcblksfree.s index 5d7b98aba..7e1bb4f52 100644 --- a/libsrc/geos-common/disk/calcblksfree.s +++ b/libsrc/geos-common/disk/calcblksfree.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _CalcBlksFree: lda #<curDirHead ldx #>curDirHead diff --git a/libsrc/geos-common/disk/freeblock.s b/libsrc/geos-common/disk/freeblock.s index cd8b08d2f..da9a83f86 100644 --- a/libsrc/geos-common/disk/freeblock.s +++ b/libsrc/geos-common/disk/freeblock.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _FreeBlock: jsr gettrse sta r6L diff --git a/libsrc/geos-common/disk/getblock.s b/libsrc/geos-common/disk/getblock.s index cef7ece6f..bb1690827 100644 --- a/libsrc/geos-common/disk/getblock.s +++ b/libsrc/geos-common/disk/getblock.s @@ -12,7 +12,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _GetBlock: sta r4L stx r4H diff --git a/libsrc/geos-common/disk/getptrcurdknm.s b/libsrc/geos-common/disk/getptrcurdknm.s index 7a99225ef..d92e5d91e 100644 --- a/libsrc/geos-common/disk/getptrcurdknm.s +++ b/libsrc/geos-common/disk/getptrcurdknm.s @@ -12,8 +12,8 @@ .include "jumptab.inc" .include "geossym.inc" - -_GetPtrCurDkNm: + +_GetPtrCurDkNm: sta ptr3 stx ptr3+1 ldx #ptr4 diff --git a/libsrc/geos-common/disk/nxtblkalloc.s b/libsrc/geos-common/disk/nxtblkalloc.s index 7427f3de0..560eb0945 100644 --- a/libsrc/geos-common/disk/nxtblkalloc.s +++ b/libsrc/geos-common/disk/nxtblkalloc.s @@ -13,7 +13,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _NxtBlkAlloc: sta r2L stx r2H diff --git a/libsrc/geos-common/disk/opendisk.s b/libsrc/geos-common/disk/opendisk.s index 66bd24d30..9de5fb1d7 100644 --- a/libsrc/geos-common/disk/opendisk.s +++ b/libsrc/geos-common/disk/opendisk.s @@ -10,7 +10,7 @@ .include "jumptab.inc" .include "diskdrv.inc" - + _OpenDisk: jsr OpenDisk jmp setoserror diff --git a/libsrc/geos-common/disk/putblock.s b/libsrc/geos-common/disk/putblock.s index df1af9f19..4c17274e1 100644 --- a/libsrc/geos-common/disk/putblock.s +++ b/libsrc/geos-common/disk/putblock.s @@ -12,7 +12,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _PutBlock: sta r4L stx r4H diff --git a/libsrc/geos-common/disk/putdirhead.s b/libsrc/geos-common/disk/putdirhead.s index 411b64307..afd7f9b39 100644 --- a/libsrc/geos-common/disk/putdirhead.s +++ b/libsrc/geos-common/disk/putdirhead.s @@ -10,7 +10,7 @@ .include "jumptab.inc" .include "diskdrv.inc" - + _PutDirHead: jsr PutDirHead jmp setoserror diff --git a/libsrc/geos-common/disk/setnextfree.s b/libsrc/geos-common/disk/setnextfree.s index 410532cea..b24f16f6f 100644 --- a/libsrc/geos-common/disk/setnextfree.s +++ b/libsrc/geos-common/disk/setnextfree.s @@ -12,7 +12,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _SetNextFree: jsr gettrse sta r3L diff --git a/libsrc/geos-common/dlgbox/rstrfrmdialogue.s b/libsrc/geos-common/dlgbox/rstrfrmdialogue.s index efee17465..9119770a0 100644 --- a/libsrc/geos-common/dlgbox/rstrfrmdialogue.s +++ b/libsrc/geos-common/dlgbox/rstrfrmdialogue.s @@ -8,5 +8,5 @@ .export _RstrFrmDialogue .include "jumptab.inc" - + _RstrFrmDialogue = RstrFrmDialogue diff --git a/libsrc/geos-common/drivers/fio_module.s b/libsrc/geos-common/drivers/fio_module.s index 937ef292e..1314fc4c5 100644 --- a/libsrc/geos-common/drivers/fio_module.s +++ b/libsrc/geos-common/drivers/fio_module.s @@ -38,21 +38,21 @@ _open: jsr popax ; Get flags sta tmp1 jsr popptr1 ; Get name - + lda filedesc ; is there a file already open? bne @alreadyopen - + lda tmp1 ; check open mode and #(O_RDWR | O_CREAT) cmp #O_RDONLY ; only O_RDONLY is valid bne @badmode - + lda ptr1 ldx ptr1+1 jsr _FindFile ; try to find the file tax bne @oserror - + lda dirEntryBuf + OFF_DE_TR_SC ; tr&se for ReadByte (r1) sta f_track lda dirEntryBuf + OFF_DE_TR_SC + 1 diff --git a/libsrc/geos-common/drivers/geos-stdmou.s b/libsrc/geos-common/drivers/geos-stdmou.s index 7e544ba82..88bbc7df9 100644 --- a/libsrc/geos-common/drivers/geos-stdmou.s +++ b/libsrc/geos-common/drivers/geos-stdmou.s @@ -5,7 +5,7 @@ ; ; Driver for GEOS standard input device interface ; - + .export _mouse_init, _mouse_done .export _mouse_hide, _mouse_show .export _mouse_box diff --git a/libsrc/geos-common/file/appendrecord.s b/libsrc/geos-common/file/appendrecord.s index 2a7864a13..1ec1e8869 100644 --- a/libsrc/geos-common/file/appendrecord.s +++ b/libsrc/geos-common/file/appendrecord.s @@ -10,7 +10,7 @@ .include "jumptab.inc" .include "diskdrv.inc" - + _AppendRecord: jsr AppendRecord diff --git a/libsrc/geos-common/file/closerecordfile.s b/libsrc/geos-common/file/closerecordfile.s index ee0778d7b..1c8b19b01 100644 --- a/libsrc/geos-common/file/closerecordfile.s +++ b/libsrc/geos-common/file/closerecordfile.s @@ -10,7 +10,7 @@ .include "jumptab.inc" .include "diskdrv.inc" - + _CloseRecordFile: jsr CloseRecordFile jmp setoserror diff --git a/libsrc/geos-common/file/deletefile.s b/libsrc/geos-common/file/deletefile.s index 730569e55..b9d994142 100644 --- a/libsrc/geos-common/file/deletefile.s +++ b/libsrc/geos-common/file/deletefile.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _DeleteFile: sta r0L stx r0H diff --git a/libsrc/geos-common/file/deleterecord.s b/libsrc/geos-common/file/deleterecord.s index 7ffe5d739..fac73f665 100644 --- a/libsrc/geos-common/file/deleterecord.s +++ b/libsrc/geos-common/file/deleterecord.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _DeleteRecord: jsr DeleteRecord jmp setoserror diff --git a/libsrc/geos-common/file/findfile.s b/libsrc/geos-common/file/findfile.s index 0f58e99e6..285e8d650 100644 --- a/libsrc/geos-common/file/findfile.s +++ b/libsrc/geos-common/file/findfile.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _FindFile: sta r6L stx r6H diff --git a/libsrc/geos-common/file/freefile.s b/libsrc/geos-common/file/freefile.s index 791f3f31c..03a8b9d88 100644 --- a/libsrc/geos-common/file/freefile.s +++ b/libsrc/geos-common/file/freefile.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _FreeFile: sta r9L stx r9H diff --git a/libsrc/geos-common/file/getfhdrinfo.s b/libsrc/geos-common/file/getfhdrinfo.s index a9a843e74..1503b1cf1 100644 --- a/libsrc/geos-common/file/getfhdrinfo.s +++ b/libsrc/geos-common/file/getfhdrinfo.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _GetFHdrInfo: sta r9L stx r9H diff --git a/libsrc/geos-common/file/getfile.s b/libsrc/geos-common/file/getfile.s index 9c8011542..24f87e859 100644 --- a/libsrc/geos-common/file/getfile.s +++ b/libsrc/geos-common/file/getfile.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _GetFile: sta r3L stx r3H diff --git a/libsrc/geos-common/file/openrecordfile.s b/libsrc/geos-common/file/openrecordfile.s index cdab3dd6c..cba5d7c08 100644 --- a/libsrc/geos-common/file/openrecordfile.s +++ b/libsrc/geos-common/file/openrecordfile.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _OpenRecordFile: sta r0L stx r0H diff --git a/libsrc/geos-common/file/pointrecord.s b/libsrc/geos-common/file/pointrecord.s index 82b88c4c6..29294737d 100644 --- a/libsrc/geos-common/file/pointrecord.s +++ b/libsrc/geos-common/file/pointrecord.s @@ -10,7 +10,7 @@ .include "jumptab.inc" .include "diskdrv.inc" - + _PointRecord: jsr PointRecord jmp setoserror diff --git a/libsrc/geos-common/file/readfile.s b/libsrc/geos-common/file/readfile.s index 3b43cffd4..d8b941cde 100644 --- a/libsrc/geos-common/file/readfile.s +++ b/libsrc/geos-common/file/readfile.s @@ -12,7 +12,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _ReadFile: sta r2L stx r2H diff --git a/libsrc/geos-common/file/readrecord.s b/libsrc/geos-common/file/readrecord.s index dd464e0b1..be155c718 100644 --- a/libsrc/geos-common/file/readrecord.s +++ b/libsrc/geos-common/file/readrecord.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _ReadRecord: sta r2L stx r2H diff --git a/libsrc/geos-common/file/writerecord.s b/libsrc/geos-common/file/writerecord.s index e0d4c86d4..33b5fef31 100644 --- a/libsrc/geos-common/file/writerecord.s +++ b/libsrc/geos-common/file/writerecord.s @@ -11,7 +11,7 @@ .include "jumptab.inc" .include "diskdrv.inc" .include "geossym.inc" - + _WriteRecord: sta r2L stx r2H diff --git a/libsrc/geos-common/geosmac.inc b/libsrc/geos-common/geosmac.inc index 5ce20ff7f..6398b7a0b 100644 --- a/libsrc/geos-common/geosmac.inc +++ b/libsrc/geos-common/geosmac.inc @@ -136,7 +136,7 @@ Skip: ;------------------------------------------------------------------------- .macro CmpW source, dest -.local Skip +.local Skip CmpB source+1, dest+1 bne Skip CmpB source+0, dest+0 @@ -203,7 +203,7 @@ Skip: .macro rmb bitNumber, dest pha - lda #(1 << bitNumber) ^ $ff + lda #(1 << bitNumber) ^ $ff and dest sta dest pla diff --git a/libsrc/geos-common/graph/bitotherclip.s b/libsrc/geos-common/graph/bitotherclip.s index ef849f6d7..020139da8 100644 --- a/libsrc/geos-common/graph/bitotherclip.s +++ b/libsrc/geos-common/graph/bitotherclip.s @@ -3,7 +3,7 @@ ; ; 21.12.99 -; void BitOtherClip (void *proc1, void* proc2, char skipl, char skipr, int skipy, +; void BitOtherClip (void *proc1, void* proc2, char skipl, char skipr, int skipy, ; struct iconpic *myGfx); ; both proc1, proc2 should be: char __fastcall something (void); diff --git a/libsrc/geos-common/graph/framerectangle.s b/libsrc/geos-common/graph/framerectangle.s index c5f9de04c..eb3ea8df6 100644 --- a/libsrc/geos-common/graph/framerectangle.s +++ b/libsrc/geos-common/graph/framerectangle.s @@ -8,5 +8,5 @@ .export _FrameRectangle .include "jumptab.inc" - + _FrameRectangle = FrameRectangle diff --git a/libsrc/geos-common/graph/imprintrectangle.s b/libsrc/geos-common/graph/imprintrectangle.s index fc327e9d3..08b28690d 100644 --- a/libsrc/geos-common/graph/imprintrectangle.s +++ b/libsrc/geos-common/graph/imprintrectangle.s @@ -4,10 +4,10 @@ ; 21.12.99 ; void ImprintRectangle (void); - + .export _ImprintRectangle .include "jumptab.inc" - + _ImprintRectangle = ImprintRectangle diff --git a/libsrc/geos-common/graph/invertline.s b/libsrc/geos-common/graph/invertline.s index baa4a6e5a..72fb87afb 100644 --- a/libsrc/geos-common/graph/invertline.s +++ b/libsrc/geos-common/graph/invertline.s @@ -9,7 +9,7 @@ .export _InvertLine .include "jumptab.inc" - + _InvertLine: jsr HLineRegs jmp InvertLine diff --git a/libsrc/geos-common/graph/invertrectangle.s b/libsrc/geos-common/graph/invertrectangle.s index 084187255..52750a8e9 100644 --- a/libsrc/geos-common/graph/invertrectangle.s +++ b/libsrc/geos-common/graph/invertrectangle.s @@ -6,7 +6,7 @@ ; void InvertRectangle (void); .export _InvertRectangle - + .include "jumptab.inc" _InvertRectangle = InvertRectangle diff --git a/libsrc/geos-common/graph/recoverline.s b/libsrc/geos-common/graph/recoverline.s index edc366114..8214242d3 100644 --- a/libsrc/geos-common/graph/recoverline.s +++ b/libsrc/geos-common/graph/recoverline.s @@ -7,7 +7,7 @@ .import HLineRegs .export _RecoverLine - + .include "jumptab.inc" _RecoverLine: diff --git a/libsrc/geos-common/graph/recoverrectangle.s b/libsrc/geos-common/graph/recoverrectangle.s index 009ca81eb..2e494fcbe 100644 --- a/libsrc/geos-common/graph/recoverrectangle.s +++ b/libsrc/geos-common/graph/recoverrectangle.s @@ -4,10 +4,10 @@ ; 29.10.99 ; void RecoverRectangle (void); - + .export _RecoverRectangle .include "jumptab.inc" - + _RecoverRectangle = RecoverRectangle diff --git a/libsrc/geos-common/graph/rectangle.s b/libsrc/geos-common/graph/rectangle.s index a9351c47e..6dc283024 100644 --- a/libsrc/geos-common/graph/rectangle.s +++ b/libsrc/geos-common/graph/rectangle.s @@ -6,7 +6,7 @@ ; void Rectangle (void); .export _Rectangle - + .include "jumptab.inc" _Rectangle = Rectangle diff --git a/libsrc/geos-common/graph/testpoint.s b/libsrc/geos-common/graph/testpoint.s index f2dfb7b5d..ad1dd3fee 100644 --- a/libsrc/geos-common/graph/testpoint.s +++ b/libsrc/geos-common/graph/testpoint.s @@ -10,7 +10,7 @@ .export _TestPoint .include "jumptab.inc" - + _TestPoint: jsr PointRegs jsr TestPoint diff --git a/libsrc/geos-common/graph/verticalline.s b/libsrc/geos-common/graph/verticalline.s index 01fb0b725..1ec89a9d7 100644 --- a/libsrc/geos-common/graph/verticalline.s +++ b/libsrc/geos-common/graph/verticalline.s @@ -5,12 +5,12 @@ ; void VerticalLine (char pattern, char ystart, char yend, int x); - .import popa + .import popa .export _VerticalLine .include "jumptab.inc" .include "geossym.inc" - + _VerticalLine: stx r4H sta r4L diff --git a/libsrc/geos-common/mousesprite/ismseinregion.s b/libsrc/geos-common/mousesprite/ismseinregion.s index 0617490c5..da14c9fe8 100644 --- a/libsrc/geos-common/mousesprite/ismseinregion.s +++ b/libsrc/geos-common/mousesprite/ismseinregion.s @@ -7,7 +7,7 @@ .import _InitDrawWindow .export _IsMseInRegion - + .include "jumptab.inc" _IsMseInRegion: diff --git a/libsrc/geos-common/process/processblock.s b/libsrc/geos-common/process/processblock.s index 84ead5993..17f07f28c 100644 --- a/libsrc/geos-common/process/processblock.s +++ b/libsrc/geos-common/process/processblock.s @@ -12,11 +12,11 @@ .export _UnblockProcess .include "jumptab.inc" - + _BlockProcess: tax jmp BlockProcess - + _UnblockProcess: tax jmp UnblockProcess diff --git a/libsrc/geos-common/process/processfreeze.s b/libsrc/geos-common/process/processfreeze.s index bda914bdc..e77bec2d7 100644 --- a/libsrc/geos-common/process/processfreeze.s +++ b/libsrc/geos-common/process/processfreeze.s @@ -10,11 +10,11 @@ .export _UnfreezeProcess .include "jumptab.inc" - + _FreezeProcess: tax jmp FreezeProcess - + _UnfreezeProcess: tax jmp UnfreezeProcess diff --git a/libsrc/geos-common/process/processinitrestartenable.s b/libsrc/geos-common/process/processinitrestartenable.s index 800c2dc5f..73f030d56 100644 --- a/libsrc/geos-common/process/processinitrestartenable.s +++ b/libsrc/geos-common/process/processinitrestartenable.s @@ -20,11 +20,11 @@ _InitProcesses: stx r0H jsr popa jmp InitProcesses - + _RestartProcess: tax jmp RestartProcess - + _EnableProcess: tax jmp EnableProcess diff --git a/libsrc/joystick/joy_load.s b/libsrc/joystick/joy_load.s index 7115f5d07..97ba7a0cd 100644 --- a/libsrc/joystick/joy_load.s +++ b/libsrc/joystick/joy_load.s @@ -87,7 +87,7 @@ ctrl: .addr _read ; Check the driver signature, install the driver. c is already on stack and ; will get removed by joy_install(). -; Res = joy_install (ctrl.module); +; Res = joy_install (ctrl.module); lda ctrl + MOD_CTRL::MODULE ldx ctrl + MOD_CTRL::MODULE+1 diff --git a/libsrc/lynx/bllhdr.s b/libsrc/lynx/bllhdr.s index 07ed06ffb..c34d7b53b 100644 --- a/libsrc/lynx/bllhdr.s +++ b/libsrc/lynx/bllhdr.s @@ -6,7 +6,7 @@ .import __BSS_LOAD__ .import __MAIN_START__ .export __BLLHDR__: absolute = 1 - + ; ------------------------------------------------------------------------ ; BLL header (BLL header) diff --git a/libsrc/lynx/bootldr.s b/libsrc/lynx/bootldr.s index c8b4ca402..ddc24faed 100644 --- a/libsrc/lynx/bootldr.s +++ b/libsrc/lynx/bootldr.s @@ -155,7 +155,7 @@ secreadbyte0: bne exit ;********************************** -; Select a block +; Select a block ;********************************** seclynxblock: pha diff --git a/libsrc/lynx/cgetc.s b/libsrc/lynx/cgetc.s index 362371ec3..d940b2b94 100644 --- a/libsrc/lynx/cgetc.s +++ b/libsrc/lynx/cgetc.s @@ -19,7 +19,7 @@ ; and Opt1 + Opt2 pressed '3'. ; So the keyboard returns '1', '2', '3', 'P', 'R', 'F' or '?'. -_cgetc: +_cgetc: jsr _kbhit ; Check for char available beq _cgetc ora KBSTL diff --git a/libsrc/lynx/eeprom.s b/libsrc/lynx/eeprom.s index 978220cfd..fb0247e90 100644 --- a/libsrc/lynx/eeprom.s +++ b/libsrc/lynx/eeprom.s @@ -252,4 +252,4 @@ EEloop4: rts - + diff --git a/libsrc/lynx/eeprom46.s b/libsrc/lynx/eeprom46.s index 55d9037c0..2b2277e45 100644 --- a/libsrc/lynx/eeprom46.s +++ b/libsrc/lynx/eeprom46.s @@ -4,7 +4,7 @@ ; ; created : 11.05.95 ; last modified : -; +; ; 16.02.96 leaner (thanks to Harry) ; 12.03.96 test for busy after write and erase (well, Harry ;)) ) ; 22.08.97 ported to ra65 for use with cc65 diff --git a/libsrc/lynx/eeprom66.s b/libsrc/lynx/eeprom66.s index 680db8166..6511cf8af 100644 --- a/libsrc/lynx/eeprom66.s +++ b/libsrc/lynx/eeprom66.s @@ -4,7 +4,7 @@ ; ; created : 11.05.95 ; last modified : -; +; ; 16.02.96 leaner (thanks to Harry) ; 12.03.96 test for busy after write and erase (well, Harry ;)) ) ; 22.08.97 ported to ra65 for use with cc65 diff --git a/libsrc/lynx/eeprom86.s b/libsrc/lynx/eeprom86.s index f753b73c3..73b342fae 100644 --- a/libsrc/lynx/eeprom86.s +++ b/libsrc/lynx/eeprom86.s @@ -4,7 +4,7 @@ ; ; created : 11.05.95 ; last modified : -; +; ; 16.02.96 leaner (thanks to Harry) ; 12.03.96 test for busy after write and erase (well, Harry ;)) ) ; 22.08.97 ported to ra65 for use with cc65 diff --git a/libsrc/lynx/exec.s b/libsrc/lynx/exec.s index c0a630a72..307475f1d 100644 --- a/libsrc/lynx/exec.s +++ b/libsrc/lynx/exec.s @@ -6,7 +6,7 @@ ; ; lynx_exec is often used in compilation carts when you run small demos ; created with various (non-cc65) compilers. -; +; ; void lynx_exec(int fileno) ; .importzp _FileDestAddr diff --git a/libsrc/lynx/kbhit.s b/libsrc/lynx/kbhit.s index 90d9061cd..d5b3d1cde 100644 --- a/libsrc/lynx/kbhit.s +++ b/libsrc/lynx/kbhit.s @@ -30,7 +30,7 @@ KBNPR: .byte 0 .code _kbhit: lda KBEDG - bne L1 + bne L1 lda $FCB0 ; Read the Opt buttons and #$0c sta KBTMP diff --git a/libsrc/lynx/lynx-cart.s b/libsrc/lynx/lynx-cart.s index 86e907348..94edff677 100644 --- a/libsrc/lynx/lynx-cart.s +++ b/libsrc/lynx/lynx-cart.s @@ -6,7 +6,7 @@ ; ; Ported to cc65 (http://www.cc65.org) by ; Shawn Jefferson, June 2004 -; +; ; This version by Karri Kaksonen, December 2010 ; ; Helper stuff for the cartridge file functions. This version can deal @@ -16,7 +16,7 @@ .include "lynx.inc" .include "extzp.inc" .export lynxskip0, lynxread0 - .export lynxblock + .export lynxblock .import __BLOCKSIZE__ .code @@ -60,7 +60,7 @@ readbyte0: bne exit ;********************************** -; Select a block +; Select a block ;********************************** lynxblock: pha diff --git a/libsrc/mouse/mouse_load.s b/libsrc/mouse/mouse_load.s index 347250843..a3a3f284d 100644 --- a/libsrc/mouse/mouse_load.s +++ b/libsrc/mouse/mouse_load.s @@ -1,4 +1,4 @@ -; +; ; Ullrich von Bassewitz, 2006-06-05 ; ; unsigned char __fastcall__ mouse_load_driver (const struct mouse_callbacks* c, diff --git a/libsrc/mouse/mouse_move.s b/libsrc/mouse/mouse_move.s index b25716b37..4d809109c 100644 --- a/libsrc/mouse/mouse_move.s +++ b/libsrc/mouse/mouse_move.s @@ -10,7 +10,7 @@ ; .import incsp2 - .import ptr1: zp + .import ptr1: zp .include "mouse-kernel.inc" diff --git a/libsrc/nes/cclear.s b/libsrc/nes/cclear.s index 7a2413826..93f5c7c9a 100644 --- a/libsrc/nes/cclear.s +++ b/libsrc/nes/cclear.s @@ -17,7 +17,7 @@ _cclearxy: _cclear: cmp #0 ; Is the length zero? beq L9 ; Jump if done - sta tmp1 + sta tmp1 L1: lda #$20 ; Blank - screen code jsr cputdirect ; Direct output dec tmp1 diff --git a/libsrc/nes/chline.s b/libsrc/nes/chline.s index d68a77df9..fff229575 100644 --- a/libsrc/nes/chline.s +++ b/libsrc/nes/chline.s @@ -10,7 +10,7 @@ .importzp tmp1 .include "nes.inc" - + _chlinexy: pha ; Save the length jsr gotoxy ; Call this one, will pop params diff --git a/libsrc/nes/gotoy.s b/libsrc/nes/gotoy.s index cfd913f2e..a36e77964 100644 --- a/libsrc/nes/gotoy.s +++ b/libsrc/nes/gotoy.s @@ -19,4 +19,4 @@ .endproc - + diff --git a/libsrc/nes/ppubuf.s b/libsrc/nes/ppubuf.s index 3708b93c1..f08fc1a71 100644 --- a/libsrc/nes/ppubuf.s +++ b/libsrc/nes/ppubuf.s @@ -101,7 +101,7 @@ @end: stx ringread sty ringcount - rts + rts .endproc diff --git a/libsrc/nes/sysuname.s b/libsrc/nes/sysuname.s index 2606d1a60..fcab503e1 100644 --- a/libsrc/nes/sysuname.s +++ b/libsrc/nes/sysuname.s @@ -35,5 +35,5 @@ utsdata: ; machine .asciiz "NES" - + diff --git a/libsrc/osic1p/cclear.s b/libsrc/osic1p/cclear.s index f7e9b2984..e399f14a9 100644 --- a/libsrc/osic1p/cclear.s +++ b/libsrc/osic1p/cclear.s @@ -20,7 +20,7 @@ _cclearxy: _cclear: cmp #0 ; Is the length zero? beq L9 ; Jump if done - sta tmp1 + sta tmp1 L1: lda #' ' jsr cputdirect ; Direct output dec tmp1 diff --git a/libsrc/pce/cclear.s b/libsrc/pce/cclear.s index 14b9d0e8b..e6277eed0 100644 --- a/libsrc/pce/cclear.s +++ b/libsrc/pce/cclear.s @@ -17,7 +17,7 @@ _cclearxy: _cclear: cmp #0 ; Is the length zero? beq L9 ; Jump if done - sta tmp1 + sta tmp1 L1: lda #$20 ; Blank - screen code jsr cputdirect ; Direct output dec tmp1 diff --git a/libsrc/plus4/randomize.s b/libsrc/plus4/randomize.s index 2a7f6a44b..796ad118b 100644 --- a/libsrc/plus4/randomize.s +++ b/libsrc/plus4/randomize.s @@ -11,7 +11,7 @@ .include "plus4.inc" -__randomize: +__randomize: ldx TED_VLINELO ; Use TED rasterline as high byte lda TIME+2 ; Use 60HZ clock as low byte jmp _srand ; Initialize generator diff --git a/libsrc/runtime/add.s b/libsrc/runtime/add.s index e644671c0..a4658cc13 100644 --- a/libsrc/runtime/add.s +++ b/libsrc/runtime/add.s @@ -33,13 +33,13 @@ hiadd: txa ; (19) inc sp+1 ; (-1+5) done: tya ; (36) -.else +.else ldy #0 ; (4) adc (sp),y ; (9) lo byte iny ; (11) sta tmp1 ; (14) save it - txa ; (16) + txa ; (16) adc (sp),y ; (21) hi byte tax ; (23) clc ; (25) diff --git a/libsrc/runtime/aslax1.s b/libsrc/runtime/aslax1.s index 14f0be3cc..97ac71c45 100644 --- a/libsrc/runtime/aslax1.s +++ b/libsrc/runtime/aslax1.s @@ -6,7 +6,7 @@ .export aslax1, shlax1 .importzp tmp1 - + aslax1: shlax1: stx tmp1 asl A diff --git a/libsrc/runtime/decsp1.s b/libsrc/runtime/decsp1.s index 5aa7fa204..3c673664a 100644 --- a/libsrc/runtime/decsp1.s +++ b/libsrc/runtime/decsp1.s @@ -20,4 +20,4 @@ - + diff --git a/libsrc/runtime/incsp1.s b/libsrc/runtime/incsp1.s index 43c92dc82..2272e200f 100644 --- a/libsrc/runtime/incsp1.s +++ b/libsrc/runtime/incsp1.s @@ -19,4 +19,4 @@ - + diff --git a/libsrc/runtime/incsp3.s b/libsrc/runtime/incsp3.s index 29067a55e..f54b13920 100644 --- a/libsrc/runtime/incsp3.s +++ b/libsrc/runtime/incsp3.s @@ -17,4 +17,4 @@ - + diff --git a/libsrc/runtime/incsp4.s b/libsrc/runtime/incsp4.s index 51e9229bb..736438fce 100644 --- a/libsrc/runtime/incsp4.s +++ b/libsrc/runtime/incsp4.s @@ -17,4 +17,4 @@ - + diff --git a/libsrc/runtime/incsp5.s b/libsrc/runtime/incsp5.s index 164c62524..55cf780d4 100644 --- a/libsrc/runtime/incsp5.s +++ b/libsrc/runtime/incsp5.s @@ -17,4 +17,4 @@ - + diff --git a/libsrc/runtime/incsp6.s b/libsrc/runtime/incsp6.s index 1a393840e..94c536e7c 100644 --- a/libsrc/runtime/incsp6.s +++ b/libsrc/runtime/incsp6.s @@ -17,4 +17,4 @@ - + diff --git a/libsrc/runtime/incsp7.s b/libsrc/runtime/incsp7.s index 8a5838137..be8784ecb 100644 --- a/libsrc/runtime/incsp7.s +++ b/libsrc/runtime/incsp7.s @@ -17,4 +17,4 @@ - + diff --git a/libsrc/runtime/land.s b/libsrc/runtime/land.s index 6ea4e5bcb..8e21ebb60 100644 --- a/libsrc/runtime/land.s +++ b/libsrc/runtime/land.s @@ -10,7 +10,7 @@ .importzp sp, sreg, tmp1 .macpack cpu - + tosand0ax: .if (.cpu .bitand ::CPU_ISET_65SC02) stz sreg @@ -19,7 +19,7 @@ tosand0ax: ldy #$00 sty sreg sty sreg+1 -.endif +.endif tosandeax: .if (.cpu .bitand ::CPU_ISET_65SC02) @@ -29,7 +29,7 @@ tosandeax: ldy #0 and (sp),y ; byte 0 iny -.endif +.endif sta tmp1 txa and (sp),y ; byte 1 diff --git a/libsrc/runtime/ldauisp.s b/libsrc/runtime/ldauisp.s index 1afcf2487..54f4d1bd1 100644 --- a/libsrc/runtime/ldauisp.s +++ b/libsrc/runtime/ldauisp.s @@ -21,4 +21,4 @@ ldauiysp: lda (ptr1),y rts - + diff --git a/libsrc/runtime/leave.s b/libsrc/runtime/leave.s index 4a9ff7994..95dcdec9d 100644 --- a/libsrc/runtime/leave.s +++ b/libsrc/runtime/leave.s @@ -1,4 +1,4 @@ -; +; ; Ullrich von Bassewitz, 06.08.1998 ; Christian Krueger, 11-Mar-2017, added 65SC02 optimization ; diff --git a/libsrc/runtime/leq.s b/libsrc/runtime/leq.s index 44316aa08..ac9894b53 100644 --- a/libsrc/runtime/leq.s +++ b/libsrc/runtime/leq.s @@ -7,7 +7,7 @@ .export toseqeax .import toslcmp, booleq -toseqeax: +toseqeax: jsr toslcmp ; Set flags jmp booleq ; Convert to boolean diff --git a/libsrc/runtime/lmod.s b/libsrc/runtime/lmod.s index caeb0c4f6..b8e796dea 100644 --- a/libsrc/runtime/lmod.s +++ b/libsrc/runtime/lmod.s @@ -23,7 +23,7 @@ tosmod0ax: sty sreg+1 .endif -tosmodeax: +tosmodeax: jsr poplsargs ; Get arguments from stack, adjust sign jsr udiv32 ; Do the division, remainder is in (ptr2:tmp3:tmp4) diff --git a/libsrc/runtime/lmul.s b/libsrc/runtime/lmul.s index d3c34637c..90d5f1e97 100644 --- a/libsrc/runtime/lmul.s +++ b/libsrc/runtime/lmul.s @@ -17,10 +17,10 @@ tosumul0ax: stz sreg stz sreg+1 .else - ldy #$00 + ldy #$00 sty sreg sty sreg+1 -.endif +.endif tosmuleax: tosumuleax: @@ -29,7 +29,7 @@ mul32: sta ptr1 .if (.cpu .bitand ::CPU_ISET_65SC02) lda (sp) ldy #1 -.else +.else ldy #0 lda (sp),y iny diff --git a/libsrc/runtime/lor.s b/libsrc/runtime/lor.s index 94ab3c890..f2204b981 100644 --- a/libsrc/runtime/lor.s +++ b/libsrc/runtime/lor.s @@ -8,7 +8,7 @@ .export tosor0ax, tosoreax .import addysp1 .importzp sp, sreg, tmp1 - + .macpack cpu tosor0ax: @@ -19,7 +19,7 @@ tosor0ax: ldy #$00 sty sreg sty sreg+1 -.endif +.endif tosoreax: .if (.cpu .bitand ::CPU_ISET_65SC02) @@ -29,7 +29,7 @@ tosoreax: ldy #0 ora (sp),y ; byte 0 iny -.endif +.endif sta tmp1 txa ora (sp),y ; byte 1 diff --git a/libsrc/runtime/lpop.s b/libsrc/runtime/lpop.s index ffff5ffc1..a90ea5fcb 100644 --- a/libsrc/runtime/lpop.s +++ b/libsrc/runtime/lpop.s @@ -22,7 +22,7 @@ popeax: ldy #3 tax .if (.cpu .bitand ::CPU_ISET_65SC02) lda (sp) -.else +.else dey lda (sp),y .endif diff --git a/libsrc/runtime/lpush.s b/libsrc/runtime/lpush.s index 4fed77f05..0bc67b523 100644 --- a/libsrc/runtime/lpush.s +++ b/libsrc/runtime/lpush.s @@ -41,9 +41,9 @@ pusheax: pla .if (.cpu .bitand ::CPU_ISET_65SC02) sta (sp) -.else +.else dey sta (sp),y -.endif +.endif rts diff --git a/libsrc/runtime/lrsub.s b/libsrc/runtime/lrsub.s index 928164f40..5e8d0b543 100644 --- a/libsrc/runtime/lrsub.s +++ b/libsrc/runtime/lrsub.s @@ -29,7 +29,7 @@ tosrsubeax: .if (.cpu .bitand ::CPU_ISET_65SC02) sbc (sp) ldy #1 -.else +.else ldy #0 sbc (sp),y ; byte 0 iny diff --git a/libsrc/runtime/lsub.s b/libsrc/runtime/lsub.s index 6f80491ca..4c50ded14 100644 --- a/libsrc/runtime/lsub.s +++ b/libsrc/runtime/lsub.s @@ -21,7 +21,7 @@ tossub0ax: ldy #$00 sty sreg sty sreg+1 -.endif +.endif tossubeax: sec diff --git a/libsrc/runtime/lsubeq.s b/libsrc/runtime/lsubeq.s index 5e3d25783..b16ab18e1 100644 --- a/libsrc/runtime/lsubeq.s +++ b/libsrc/runtime/lsubeq.s @@ -1,4 +1,4 @@ -; +; ; Ullrich von Bassewitz, 07.04.2000 ; Christian Krueger, 12-Mar-2017, added 65SC02 optimization ; @@ -22,19 +22,19 @@ lsubeqa: stx sreg+1 lsubeq: sty ptr1+1 ; Store high byte of address - + sec eor #$FF .if (.cpu .bitand ::CPU_ISET_65SC02) adc (ptr1) ; Subtract byte 0 sta (ptr1) - ldy #$01 ; Address byte 1 + ldy #$01 ; Address byte 1 .else ldy #$00 ; Address low byte adc (ptr1),y ; Subtract byte 0 sta (ptr1),y - iny ; Address byte 1 - .endif + iny ; Address byte 1 + .endif pha ; Save byte 0 of result for later txa eor #$FF diff --git a/libsrc/runtime/ltest.s b/libsrc/runtime/ltest.s index 6027b8dd4..d0caf2197 100644 --- a/libsrc/runtime/ltest.s +++ b/libsrc/runtime/ltest.s @@ -17,6 +17,6 @@ utsteax: beq L9 tya ldy #1 ; Force NE -L9: rts +L9: rts diff --git a/libsrc/runtime/ludiv.s b/libsrc/runtime/ludiv.s index 8a3126d72..e2e27371e 100644 --- a/libsrc/runtime/ludiv.s +++ b/libsrc/runtime/ludiv.s @@ -21,7 +21,7 @@ tosudiv0ax: sty sreg+1 .endif -tosudiveax: +tosudiveax: jsr getlop ; Get the paramameters jsr udiv32 ; Do the division lda ptr1 ; Result is in ptr1:sreg diff --git a/libsrc/runtime/lumod.s b/libsrc/runtime/lumod.s index 241801a90..09909c0c9 100644 --- a/libsrc/runtime/lumod.s +++ b/libsrc/runtime/lumod.s @@ -11,7 +11,7 @@ .macpack cpu -tosumod0ax: +tosumod0ax: .if (.cpu .bitand ::CPU_ISET_65SC02) stz sreg stz sreg+1 diff --git a/libsrc/runtime/lxor.s b/libsrc/runtime/lxor.s index 4ec9a4129..a92a59959 100644 --- a/libsrc/runtime/lxor.s +++ b/libsrc/runtime/lxor.s @@ -25,7 +25,7 @@ tosxoreax: .if (.cpu .bitand ::CPU_ISET_65SC02) eor (sp) ; byte 0 ldy #1 -.else +.else ldy #0 eor (sp),y ; byte 0 iny diff --git a/libsrc/runtime/mul.s b/libsrc/runtime/mul.s index 087e639fc..68cdea0c6 100644 --- a/libsrc/runtime/mul.s +++ b/libsrc/runtime/mul.s @@ -23,7 +23,7 @@ tosumulax: ; Do ptr4:ptr4+1 * ptr1:ptr1+1 --> AX - tya ; A = 0 + tya ; A = 0 ldy ptr1+1 ; check if lhs is 8 bit only beq @L4 ; -> we can do 8x16 after swap sta tmp1 @@ -36,7 +36,7 @@ tosumulax: clc adc ptr1 tax - lda ptr1+1 ; Hi byte of left op + lda ptr1+1 ; Hi byte of left op adc tmp1 sta tmp1 txa diff --git a/libsrc/runtime/mulax3.s b/libsrc/runtime/mulax3.s index 513ba723e..342379605 100644 --- a/libsrc/runtime/mulax3.s +++ b/libsrc/runtime/mulax3.s @@ -7,7 +7,7 @@ .export mulax3 .importzp ptr1 - + .proc mulax3 sta ptr1 diff --git a/libsrc/runtime/or.s b/libsrc/runtime/or.s index 1c2c4125e..735f30f61 100644 --- a/libsrc/runtime/or.s +++ b/libsrc/runtime/or.s @@ -21,7 +21,7 @@ tosorax: ldy #0 ora (sp),y iny -.endif +.endif sta tmp1 txa ora (sp),y diff --git a/libsrc/runtime/pushaff.s b/libsrc/runtime/pushaff.s index 08d988bb2..ae2142b0e 100644 --- a/libsrc/runtime/pushaff.s +++ b/libsrc/runtime/pushaff.s @@ -17,4 +17,4 @@ .endproc - + diff --git a/libsrc/runtime/pushax.s b/libsrc/runtime/pushax.s index cba313c2f..ac181b994 100644 --- a/libsrc/runtime/pushax.s +++ b/libsrc/runtime/pushax.s @@ -30,6 +30,6 @@ pusha0: ldx #0 pla ; (31) dey ; (33) sta (sp),y ; (38) - rts ; (44) + rts ; (44) .endproc diff --git a/libsrc/runtime/return0.s b/libsrc/runtime/return0.s index c061e013c..331f3334f 100644 --- a/libsrc/runtime/return0.s +++ b/libsrc/runtime/return0.s @@ -17,4 +17,4 @@ - + diff --git a/libsrc/runtime/return1.s b/libsrc/runtime/return1.s index 76153f3e1..e39cdf74e 100644 --- a/libsrc/runtime/return1.s +++ b/libsrc/runtime/return1.s @@ -17,4 +17,4 @@ - + diff --git a/libsrc/runtime/swap.s b/libsrc/runtime/swap.s index d4a74df5f..5358e08d3 100644 --- a/libsrc/runtime/swap.s +++ b/libsrc/runtime/swap.s @@ -23,13 +23,13 @@ swapstk: tay lda ptr4 sta (sp) - tya -.else + tya +.else dey lda (sp),y pha lda ptr4 sta (sp),y pla -.endif +.endif rts ; whew! diff --git a/libsrc/runtime/umod.s b/libsrc/runtime/umod.s index 5788d569e..205df59d7 100644 --- a/libsrc/runtime/umod.s +++ b/libsrc/runtime/umod.s @@ -25,4 +25,4 @@ tosumodax: ldx sreg+1 rts - + diff --git a/libsrc/runtime/umul16x16r32.s b/libsrc/runtime/umul16x16r32.s index cd2dae351..cfcf82d9e 100644 --- a/libsrc/runtime/umul16x16r32.s +++ b/libsrc/runtime/umul16x16r32.s @@ -12,7 +12,7 @@ ;--------------------------------------------------------------------------- ; 16x16 => 32 unsigned multiplication routine. Because the overhead for a -; 16x16 => 16 unsigned multiplication routine is small, we will tag it with +; 16x16 => 16 unsigned multiplication routine is small, we will tag it with ; the matching labels, as well. ; ; routine LHS RHS result result also in diff --git a/libsrc/sym1/read.s b/libsrc/sym1/read.s index c041664da..5f6a71144 100644 --- a/libsrc/sym1/read.s +++ b/libsrc/sym1/read.s @@ -48,6 +48,6 @@ putch: ldy #$00 ; Put char into return buffer done: lda ptr3 ldx ptr3+1 - rts ; Return count + rts ; Return count .endproc diff --git a/libsrc/sym1/write.s b/libsrc/sym1/write.s index dbe738468..008902e58 100644 --- a/libsrc/sym1/write.s +++ b/libsrc/sym1/write.s @@ -13,7 +13,7 @@ .proc _write - sta ptr3 + sta ptr3 stx ptr3+1 ; Count in ptr3 inx stx ptr2+1 ; Increment and store in ptr2 diff --git a/libsrc/telestrat/cclear.s b/libsrc/telestrat/cclear.s index b9fce4708..804381e89 100644 --- a/libsrc/telestrat/cclear.s +++ b/libsrc/telestrat/cclear.s @@ -6,9 +6,9 @@ ; .export _cclearxy, _cclear - .import update_adscr, display_conio + .import update_adscr, display_conio - .importzp tmp1 + .importzp tmp1 .import popax .include "telestrat.inc" diff --git a/libsrc/telestrat/chline.s b/libsrc/telestrat/chline.s index 91f3bdc9f..cd7628eca 100644 --- a/libsrc/telestrat/chline.s +++ b/libsrc/telestrat/chline.s @@ -4,7 +4,7 @@ ; .export _chlinexy, _chline - + .import rvs, display_conio, update_adscr .import popax @@ -22,7 +22,7 @@ _chlinexy: _chline: tax ; Is the length zero? beq @L9 ; Jump if done -@L1: +@L1: lda #'-' ; Horizontal line screen code ora rvs diff --git a/libsrc/telestrat/clrscr.s b/libsrc/telestrat/clrscr.s index c02c26647..749e40b8f 100644 --- a/libsrc/telestrat/clrscr.s +++ b/libsrc/telestrat/clrscr.s @@ -4,7 +4,7 @@ .export _clrscr .import OLD_CHARCOLOR, OLD_BGCOLOR, BGCOLOR, CHARCOLOR - + .include "telestrat.inc" .proc _clrscr @@ -35,13 +35,13 @@ ldx #$00 stx SCRY stx SCRX - + stx OLD_BGCOLOR ; Black stx BGCOLOR - + ldx #$07 ; White stx OLD_CHARCOLOR stx CHARCOLOR - + rts .endproc diff --git a/libsrc/telestrat/cputc.s b/libsrc/telestrat/cputc.s index 16b13f8cd..13714b32d 100644 --- a/libsrc/telestrat/cputc.s +++ b/libsrc/telestrat/cputc.s @@ -6,7 +6,7 @@ .export _cputc, _cputcxy, cputdirect, display_conio .export CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR - + .import update_adscr .import popax @@ -19,13 +19,13 @@ _cputcxy: sta SCRY ; Store Y stx SCRX ; Store X jsr update_adscr - pla + pla _cputc: cmp #$0D bne @not_CR ldy #$00 - sty SCRX + sty SCRX rts @not_CR: cmp #$0A @@ -80,10 +80,10 @@ do_not_change_color: sty SCRX inc SCRY - + jmp update_adscr - -@no_inc: + +@no_inc: sty SCRX rts .endproc diff --git a/libsrc/telestrat/gotoxy.s b/libsrc/telestrat/gotoxy.s index 3fbdc25e0..c0907a623 100644 --- a/libsrc/telestrat/gotoxy.s +++ b/libsrc/telestrat/gotoxy.s @@ -19,7 +19,7 @@ gotoxy: jsr popa ; Get Y ; In telemon, there is a position for the prompt, and another for the cursor. sta SCRY - + jsr popa sta SCRX @@ -48,6 +48,6 @@ skip: sta ADSCR dey bne loop -out: +out: rts .endproc diff --git a/libsrc/telestrat/joy/telestrat.s b/libsrc/telestrat/joy/telestrat.s index e4a6d94f2..0f5d28651 100644 --- a/libsrc/telestrat/joy/telestrat.s +++ b/libsrc/telestrat/joy/telestrat.s @@ -52,7 +52,7 @@ INSTALL: lda #%11000000 sta VIA2::DDRB sta VIA2::PRB - ; We could detect joysticks because with previous command bit0,1,2,3,4 should be set to 1 after + ; We could detect joysticks because with previous command bit0,1,2,3,4 should be set to 1 after ; But if some one press fire or press direction, we could reach others values which could break joystick detection. lda #<JOY_ERR_OK ldx #>JOY_ERR_OK @@ -83,7 +83,7 @@ COUNT: ; PB7 and PB6 select right or left port ; When PB7 and PB6 are high, it controls two CA3083 (2 NPN transistors array) bases. ; In that case, PB0 to PB4 are set to high (it means no action are pressed) -; When the user press something then bit will be set to 0. +; When the user press something then bit will be set to 0. ; Bit 0 is right ; Bit 1 is left ; Bit 2 is fire @@ -94,18 +94,18 @@ READ: lda VIA2::PRB and #%01111111 - ora #%01000000 + ora #%01000000 sta VIA2::PRB ; then read lda VIA2::PRB eor #%01011111 - + rts -right: +right: lda VIA2::PRB and #%10111111 ora #%10000000 - sta VIA2::PRB + sta VIA2::PRB ; then read lda VIA2::PRB diff --git a/libsrc/telestrat/orixhdr.s b/libsrc/telestrat/orixhdr.s index 58e93efbb..78d6c945a 100644 --- a/libsrc/telestrat/orixhdr.s +++ b/libsrc/telestrat/orixhdr.s @@ -24,7 +24,7 @@ .byte $01 ; Version of the header .byte $00,%00000000 ; 6502 only .byte $00,$00 ; Type of language - .byte $00,$00 ; OS version + .byte $00,$00 ; OS version .byte $00 ; Reserved .byte $00 ; Auto or not diff --git a/libsrc/telestrat/sound.s b/libsrc/telestrat/sound.s index 3718debd4..2a786a452 100644 --- a/libsrc/telestrat/sound.s +++ b/libsrc/telestrat/sound.s @@ -33,7 +33,7 @@ sound_bip_keyboard: rts .endproc -.proc _zap +.proc _zap BRK_TELEMON XZAP rts .endproc diff --git a/libsrc/telestrat/syschdir.s b/libsrc/telestrat/syschdir.s index 09763bdbb..6257880b8 100644 --- a/libsrc/telestrat/syschdir.s +++ b/libsrc/telestrat/syschdir.s @@ -11,7 +11,7 @@ .include "telestrat.inc" .include "zeropage.inc" - + __syschdir: ; Throw away all parameters except the name @@ -24,9 +24,9 @@ __syschdir: stx tmp1 ldy tmp1 - + ; Call telemon primitive - + BRK_TELEMON(XPUTCWD) jmp initcwd ; Update cwd diff --git a/libsrc/telestrat/sysmkdir.s b/libsrc/telestrat/sysmkdir.s index 26d97c4b0..259be8d7c 100644 --- a/libsrc/telestrat/sysmkdir.s +++ b/libsrc/telestrat/sysmkdir.s @@ -9,7 +9,7 @@ .include "telestrat.inc" .include "zeropage.inc" - + __sysmkdir: ; Throw away all parameters except the name @@ -19,11 +19,11 @@ __sysmkdir: ; Get name jsr popax - + ; Call telemon primitive - + BRK_TELEMON(XMKDIR) - + rts diff --git a/libsrc/telestrat/tgi/telestrat-228-200-3.s b/libsrc/telestrat/tgi/telestrat-228-200-3.s index 7eda27bc9..402e04e7e 100644 --- a/libsrc/telestrat/tgi/telestrat-228-200-3.s +++ b/libsrc/telestrat/tgi/telestrat-228-200-3.s @@ -107,7 +107,7 @@ INIT: ; Switch into graphics mode. BRK_TELEMON(XHIRES) - + ; Done, reset the error code. lda #TGI_ERR_OK @@ -255,18 +255,18 @@ GETDEFPALETTE: SETPIXEL: lda #$80 - + SETPIXELSETMODE: sta HRSFB lda X1 sta HRS1 lda Y1 sta HRS2 - - + + BRK_TELEMON(XCURSE) - + rts ; ------------------------------------------------------------------------ @@ -291,7 +291,7 @@ LINE: sta HRS1 lda Y1 sta HRS2 - + lda X2 sta HRS3 lda Y2 @@ -300,14 +300,14 @@ LINE: lda X1+1 sta HRS1+1 - lda Y1+1 + lda Y1+1 sta HRS2+1 lda X2+1 sta HRS3+1 - - lda Y2+1 - sta HRS4+1 + + lda Y2+1 + sta HRS4+1 lda #$FF sta HRSPAT @@ -315,12 +315,12 @@ LINE: BRK_TELEMON(XDRAWA) rts - - + + CIRCLE: ; not done yet rts - + ; ------------------------------------------------------------------------ ; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where ; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4, using the current drawing color. @@ -364,11 +364,11 @@ OUTTEXT: ; put hires cursor in X & Y lda #$00 jsr SETPIXELSETMODE - - + + ; count the length of the string ldy #$00 -loop: +loop: lda (ptr3),y beq out iny @@ -376,10 +376,10 @@ loop: out: ; XSCHAR routine from telemon needs to have the length of the string in X register ; copy Y register to X register. It could be optimized in 65C02 with TYX - tya + tya tax - + lda ptr3 ; XSCHAR needs in A and Y the address of the string - ldy ptr3+1 + ldy ptr3+1 BRK_TELEMON(XSCHAR) rts diff --git a/libsrc/telestrat/tgi/telestrat-240-200-2.s b/libsrc/telestrat/tgi/telestrat-240-200-2.s index 7a6bb8a4c..d619fc6f1 100644 --- a/libsrc/telestrat/tgi/telestrat-240-200-2.s +++ b/libsrc/telestrat/tgi/telestrat-240-200-2.s @@ -124,7 +124,7 @@ INIT: ; Switch into graphics mode BRK_TELEMON(XHIRES) - + ; Done, reset the error code lda #TGI_ERR_OK @@ -247,17 +247,17 @@ GETDEFPALETTE: ; SETPIXEL: - lda #$80 ; curset on -SETPIXELSETMODE: + lda #$80 ; curset on +SETPIXELSETMODE: sta HRSFB - + lda X1 sta HRS1 lda Y1 sta HRS2 - - - + + + BRK_TELEMON(XCURSE) rts @@ -289,19 +289,19 @@ LINE: sta HRS3 lda Y2 sta HRS4 - + lda X1+1 sta HRS1+1 - lda Y1+1 + lda Y1+1 sta HRS2+1 lda X2+1 sta HRS3+1 - - lda Y2+1 - sta HRS4+1 + + lda Y2+1 + sta HRS4+1 lda #$FF sta HRSPAT @@ -309,11 +309,11 @@ LINE: BRK_TELEMON(XDRAWA) rts - -CIRCLE: + +CIRCLE: ; not done yet - rts - + rts + ; ------------------------------------------------------------------------ ; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where ; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4 using the current drawing color. @@ -357,11 +357,11 @@ OUTTEXT: ; put hires cursor in X & Y lda #$00 jsr SETPIXELSETMODE - - + + ; count the length of the string ldy #$00 -loop: +loop: lda (ptr3),y beq out iny @@ -369,10 +369,10 @@ loop: out: ; XSCHAR routine from telemon needs to have the length of the string in X register ; copy Y register to X register. It could be optimized in 65C02 with TYX - tya + tya tax - + lda ptr3 ; XSCHAR needs in A and Y the address of the string - ldy ptr3+1 + ldy ptr3+1 BRK_TELEMON(XSCHAR) rts diff --git a/libsrc/tgi/tgi_gettextheight.s b/libsrc/tgi/tgi_gettextheight.s index 38df6a69a..bd05386c1 100644 --- a/libsrc/tgi/tgi_gettextheight.s +++ b/libsrc/tgi/tgi_gettextheight.s @@ -15,7 +15,7 @@ ; */ ; -.proc _tgi_gettextheight +.proc _tgi_gettextheight ldy _tgi_font bne @L2 ; Jump if vector font diff --git a/libsrc/tgi/tgi_imulround.s b/libsrc/tgi/tgi_imulround.s index 112f2930f..7b7f25b78 100644 --- a/libsrc/tgi/tgi_imulround.s +++ b/libsrc/tgi/tgi_imulround.s @@ -1,7 +1,7 @@ ; ; Ullrich von Bassewitz, 2009-11-05 ; -; Helper function for graphics functions: Multiply two values, one being +; Helper function for graphics functions: Multiply two values, one being ; an 8.8 fixed point one, and return the rounded and scaled result. ; ; The module has two entry points: One is C callable and expects the @@ -60,4 +60,4 @@ tgi_imulround: tya rts - + diff --git a/libsrc/tgi/tgi_lineto.s b/libsrc/tgi/tgi_lineto.s index abe4b3f96..6934bfe2c 100644 --- a/libsrc/tgi/tgi_lineto.s +++ b/libsrc/tgi/tgi_lineto.s @@ -17,7 +17,7 @@ @L1: lda _tgi_curx,y sta tgi_clip_x1,y dey - bpl @L1 + bpl @L1 pla jsr tgi_linepop ; Pop x2/y2 jmp tgi_clippedline ; Call the line clipper diff --git a/libsrc/tgi/tgi_outtext.s b/libsrc/tgi/tgi_outtext.s index 079cea3af..e0a3c6d25 100644 --- a/libsrc/tgi/tgi_outtext.s +++ b/libsrc/tgi/tgi_outtext.s @@ -125,7 +125,7 @@ VectorFont: jsr MoveCursor ; Move the graphics cursor ; Next char in string - + inc text bne @L1 inc text+1 diff --git a/libsrc/tgi/tgidrv_line.inc b/libsrc/tgi/tgidrv_line.inc index e904b5117..5fd6b229e 100644 --- a/libsrc/tgi/tgidrv_line.inc +++ b/libsrc/tgi/tgidrv_line.inc @@ -269,7 +269,7 @@ abs: ; A/Y := abs (A/Y) cpy #$00 bpl :+ - + ; A/Y := neg (A/Y) neg: clc eor #$FF From cd1b7a9e9dc9baeccbb8384a02f8efd31bf82f2b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:06:45 +0200 Subject: [PATCH 1535/2710] remove dangling spaces --- samples/geos/dialog.c | 4 ++-- samples/geos/filesel.c | 6 +++--- samples/geos/geosconio.c | 10 +++++----- samples/geos/geosver.c | 2 +- samples/geos/hello1.c | 8 ++++---- samples/geos/hello2.c | 12 ++++++------ samples/geos/overlay-demo.c | 2 +- samples/geos/rmvprot.c | 8 ++++---- samples/sym1/symDisplay.c | 4 ++-- samples/sym1/symExtendedMemory.c | 2 +- samples/sym1/symIO.c | 4 ++-- 11 files changed, 31 insertions(+), 31 deletions(-) diff --git a/samples/geos/dialog.c b/samples/geos/dialog.c index 27199a493..c3231e855 100644 --- a/samples/geos/dialog.c +++ b/samples/geos/dialog.c @@ -1,4 +1,4 @@ -/* Note: +/* Note: ** This is just a sample piece of code that shows how to use some structs - ** it may not even run. */ @@ -28,5 +28,5 @@ static const dlgBoxStr myDialog = { void main (void) { - DoDlgBox (&myDialog); + DoDlgBox (&myDialog); } diff --git a/samples/geos/filesel.c b/samples/geos/filesel.c index c0a591eb9..fcca258bb 100644 --- a/samples/geos/filesel.c +++ b/samples/geos/filesel.c @@ -1,11 +1,11 @@ /* GEOSLib example - + using DlgBoxFileSelect - + Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl> - + 26.12.1999 */ diff --git a/samples/geos/geosconio.c b/samples/geos/geosconio.c index 963fa06a0..55acac38e 100644 --- a/samples/geos/geosconio.c +++ b/samples/geos/geosconio.c @@ -9,16 +9,16 @@ void main(void) char ch; DlgBoxOk("Now the screen will be", "cleared."); - + clrscr(); - + DlgBoxOk("Now a character will be", "written at 20,20"); - + gotoxy(20, 20); cputc('A'); DlgBoxOk("Now a string will be", "written at 0,1"); - + cputsxy(0, 1, CBOLDON "Just" COUTLINEON "a " CITALICON "string." CPLAINTEXT ); DlgBoxOk("Write text and finish it", "with a dot."); @@ -31,7 +31,7 @@ void main(void) cursor(0); DlgBoxOk("Seems that it is all for conio.", "Let's test mouse routines."); - + mouse_init(1); cputsxy(0, 2, CBOLDON "Now you can't see mouse (press any key)" CPLAINTEXT); mouse_hide(); diff --git a/samples/geos/geosver.c b/samples/geos/geosver.c index 3d68798a2..fa8351e0d 100644 --- a/samples/geos/geosver.c +++ b/samples/geos/geosver.c @@ -57,6 +57,6 @@ void main (void) } Sleep(10*50); - + return; } diff --git a/samples/geos/hello1.c b/samples/geos/hello1.c index 8dc13d5b4..bd51dd1b9 100644 --- a/samples/geos/hello1.c +++ b/samples/geos/hello1.c @@ -1,11 +1,11 @@ /* GEOSLib example - + Hello, world example - with DBox - + Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl> - + 26.12.1999 */ @@ -18,7 +18,7 @@ void main (void) DlgBoxOk(CBOLDON "Hello, world" CPLAINTEXT, "This is written in C!"); - + // Normal apps exit from main into system's mainloop, and app finish // when user selects it from icons or menu, but here we want to exit // immediately. diff --git a/samples/geos/hello2.c b/samples/geos/hello2.c index 3f148b0b8..ae93fa1a4 100644 --- a/samples/geos/hello2.c +++ b/samples/geos/hello2.c @@ -1,11 +1,11 @@ /* GEOSLib example - + Hello, world example - using graphic functions - + Maciej 'YTM/Alliance' Witkowiak <ytm@friko.onet.pl> - + 26.12.1999 */ @@ -25,18 +25,18 @@ void main (void) SetPattern(0); InitDrawWindow(&wholeScreen); Rectangle(); - + // Now some texts PutString(COUTLINEON "This is compiled using cc65!" CPLAINTEXT, 20, 10); PutString(CBOLDON "This is bold", 30, 10); PutString(CULINEON "and this is bold and underline!", 40, 10); PutString(CPLAINTEXT "This is plain text", 50, 10); - + // Wait for 5 secs... // Note that this is multitasking sleep, and if there are any icons/menus onscreen, // they would be usable, in this case you have only pointer usable Sleep(5*50); - + // Normal apps exit from main into system's mainloop, and app finish // when user selects it from icons or menu, but here we want to exit // immediately. diff --git a/samples/geos/overlay-demo.c b/samples/geos/overlay-demo.c index a37f6bdcb..73ab0e3c0 100644 --- a/samples/geos/overlay-demo.c +++ b/samples/geos/overlay-demo.c @@ -33,7 +33,7 @@ void foo(void) { /* Functions resident in an overlay can access all program variables and ** constants at any time without any precautions because those are never - ** placed in overlays. The string constant "One" is an example for such + ** placed in overlays. The string constant "One" is an example for such ** a constant resident in the main program. */ show("One"); diff --git a/samples/geos/rmvprot.c b/samples/geos/rmvprot.c index 4f8798f98..152f6cf0f 100644 --- a/samples/geos/rmvprot.c +++ b/samples/geos/rmvprot.c @@ -1,12 +1,12 @@ /* GEOSLib example - + This small application removes GEOS disk write protection tag. e.g. boot disk is always protected after boot-up - + Maciej 'YTM/Elysium' Witkowiak <ytm@elysium.pl> - + 21.03.2000 */ @@ -60,7 +60,7 @@ void main(void) { // Here we clear the screen. Not really needed anyway... GraphicsString(&clearScreen); - + // Get the name of current disk to show it in dialog box GetPtrCurDkNm(diskName); diff --git a/samples/sym1/symDisplay.c b/samples/sym1/symDisplay.c index dce39f6b9..43d18f911 100644 --- a/samples/sym1/symDisplay.c +++ b/samples/sym1/symDisplay.c @@ -14,7 +14,7 @@ int main (void) { int flashes = 255; int displayable = 1; int e = 0; - int r = 0; + int r = 0; int d = 0; int i = 0; int l = 0; @@ -40,7 +40,7 @@ int main (void) { puts ("\n\nHow many times (0 for forever) to repeat?"); c = getchar(); if ( (c >= '0') && (c <= '9') ) {// between 1 and 9 loops allowed - z = 1; // a number was pressed + z = 1; // a number was pressed t = c - '0'; // convert char to int puts ("\n\nLook at the front panel.\n"); } diff --git a/samples/sym1/symExtendedMemory.c b/samples/sym1/symExtendedMemory.c index cc01da353..897276e6f 100644 --- a/samples/sym1/symExtendedMemory.c +++ b/samples/sym1/symExtendedMemory.c @@ -72,7 +72,7 @@ int main (void) { error = 0; } } - segment += 0x1000; // Increment to next segment + segment += 0x1000; // Increment to next segment } segment[0] = 0x00; // Check beginning of top memory segment diff --git a/samples/sym1/symIO.c b/samples/sym1/symIO.c index 50fefc303..bb46dc3df 100644 --- a/samples/sym1/symIO.c +++ b/samples/sym1/symIO.c @@ -52,7 +52,7 @@ int main (void) { ior3b = VIA3.prb; puts ("================== Digital I/O Status =================="); - puts (" Port1A Port1B Port2A Port2B Port3A Port3B" ); + puts (" Port1A Port1B Port2A Port2B Port3A Port3B" ); printf ("DDR %02X %02X %02X %02X %02X %02X\n\r",ddr1a,ddr1b,ddr2a,ddr2b,ddr3a,ddr3b); printf ("IOR %02X %02X %02X %02X %02X %02X\n\r",ior1a,ior1b,ior2a,ior2b,ior3a,ior3b); puts ("========================================================\n"); @@ -75,7 +75,7 @@ int main (void) { cmd[strlen(cmd)-1] = '\0'; if ( strncasecmp(cmd, "quit", 4) == 0 ) { - going = 0; + going = 0; } else if ( strncasecmp(cmd, "help", 4) == 0 ) { instr = 1; From 78244351b7d1ea7a77e0993e75930e21081d0607 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:07:09 +0200 Subject: [PATCH 1536/2710] remove dangling spaces --- src/ar65/del.h | 2 +- src/ca65/anonname.c | 2 +- src/ca65/anonname.h | 2 +- src/ca65/easw16.c | 2 +- src/ca65/easw16.h | 2 +- src/ca65/instr.c | 10 +++++----- src/ca65/instr.h | 2 +- src/ca65/istack.c | 2 +- src/ca65/macro.h | 2 +- src/ca65/options.c | 2 +- src/ca65/span.c | 4 ++-- src/ca65/studyexpr.h | 2 +- src/ca65/symbol.c | 2 +- src/ca65/ulabel.c | 4 ++-- src/cc65/codeent.c | 2 +- src/cc65/datatype.c | 2 +- src/cc65/declare.c | 2 +- src/cc65/expr.c | 2 +- src/cl65/error.c | 2 +- src/cl65/main.c | 4 ++-- src/co65/convert.h | 2 +- src/co65/error.c | 2 +- src/co65/model.c | 2 +- src/common/debugflag.c | 2 +- src/common/debugflag.h | 2 +- src/common/filepos.c | 2 +- src/common/searchpath.c | 4 ++-- src/common/strstack.c | 4 ++-- src/common/strutil.c | 4 ++-- src/common/va_copy.h | 2 +- src/common/xsprintf.c | 2 +- src/common/xsprintf.h | 6 +++--- src/da65/comments.c | 2 +- src/da65/opc6502dtv.h | 2 +- src/da65/opc6502x.h | 2 +- src/da65/opctable.h | 2 +- src/dbginfo/dbginfo.h | 2 +- src/ld65/condes.c | 2 +- src/ld65/fragment.h | 2 +- src/ld65/mapfile.c | 2 +- src/od65/dump.c | 2 +- src/od65/fileio.c | 2 +- src/sim65/6502.c | 8 ++++---- src/sp65/bin.c | 2 +- src/sp65/color.h | 2 +- src/sp65/geosbitmap.h | 6 +++--- src/sp65/koala.c | 2 +- src/sp65/lynxsprite.h | 2 +- src/sp65/vic2sprite.c | 2 +- src/sp65/vic2sprite.h | 2 +- 50 files changed, 67 insertions(+), 67 deletions(-) diff --git a/src/ar65/del.h b/src/ar65/del.h index 6100fe60a..dd45d0ec5 100644 --- a/src/ar65/del.h +++ b/src/ar65/del.h @@ -49,6 +49,6 @@ void DelObjFiles (int argc, char* argv []); -/* End of del.h */ +/* End of del.h */ #endif diff --git a/src/ca65/anonname.c b/src/ca65/anonname.c index 90b73fcab..fca20c8cd 100644 --- a/src/ca65/anonname.c +++ b/src/ca65/anonname.c @@ -72,7 +72,7 @@ StrBuf* AnonName (StrBuf* Buf, const char* Spec) int IsAnonName (const StrBuf* Name) /* Check if the given symbol name is that of an anonymous symbol */ -{ +{ if (SB_GetLen (Name) < sizeof (AnonTag) - 1) { /* Too short */ return 0; diff --git a/src/ca65/anonname.h b/src/ca65/anonname.h index 142cd9f87..7d5671c68 100644 --- a/src/ca65/anonname.h +++ b/src/ca65/anonname.h @@ -58,7 +58,7 @@ StrBuf* AnonName (StrBuf* Buf, const char* Spec); int IsAnonName (const StrBuf* Name); /* Check if the given symbol name is that of an anonymous symbol */ - + /* End of anonname.h */ diff --git a/src/ca65/easw16.c b/src/ca65/easw16.c index 578a25734..081828991 100644 --- a/src/ca65/easw16.c +++ b/src/ca65/easw16.c @@ -147,4 +147,4 @@ void GetSweet16EA (EffAddr* A) } - + diff --git a/src/ca65/easw16.h b/src/ca65/easw16.h index b8b06d466..03a48c437 100644 --- a/src/ca65/easw16.h +++ b/src/ca65/easw16.h @@ -65,4 +65,4 @@ void GetSweet16EA (EffAddr* A); - + diff --git a/src/ca65/instr.c b/src/ca65/instr.c index faeff2026..834edfb5f 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -303,9 +303,9 @@ static const struct { } }; -/* Instruction table for the 6502 with DTV extra opcodes (DTV) and +/* Instruction table for the 6502 with DTV extra opcodes (DTV) and ** those illegal instructions (X) which are supported by DTV. -** Note: illegals opcodes which contain more subinstructions +** Note: illegals opcodes which contain more subinstructions ** (ASO, DCM, LSE, LXA, SBX and SHS) are not enlisted. */ static const struct { @@ -1207,9 +1207,9 @@ static int EvalEA (const InsDesc* Ins, EffAddr* A) } else { ED.AddrSize = DataAddrSize; /* If the default address size of the data segment is unequal - ** to zero page addressing, but zero page addressing is - ** allowed by the instruction, mark all symbols in the - ** expression tree. This mark will be checked at end of + ** to zero page addressing, but zero page addressing is + ** allowed by the instruction, mark all symbols in the + ** expression tree. This mark will be checked at end of ** assembly, and a warning is issued, if a zero page symbol ** was guessed wrong here. */ diff --git a/src/ca65/instr.h b/src/ca65/instr.h index 0a1a5e13d..fe18d2110 100644 --- a/src/ca65/instr.h +++ b/src/ca65/instr.h @@ -101,7 +101,7 @@ /* Bitmask for all FAR operations */ #define AM65_ALL_FAR (AM65_ABS_LONG | AM65_ABS_LONG_X) - + /* Bitmask for all immediate operations */ #define AM65_ALL_IMM (AM65_IMM_ACCU | AM65_IMM_INDEX | AM65_IMM_IMPLICIT | AM65_IMM_IMPLICIT_WORD) diff --git a/src/ca65/istack.c b/src/ca65/istack.c index 8cda7dd2f..7a95e7e8c 100644 --- a/src/ca65/istack.c +++ b/src/ca65/istack.c @@ -81,7 +81,7 @@ void PushInput (int (*Func) (void*), void* Data, const char* Desc) /* Check for a stack overflow */ if (ICount > ISTACK_MAX) { Fatal ("Maximum input stack nesting exceeded"); - } + } /* Create a new stack element */ E = xmalloc (sizeof (*E)); diff --git a/src/ca65/macro.h b/src/ca65/macro.h index bb7b817a8..7f4335706 100644 --- a/src/ca65/macro.h +++ b/src/ca65/macro.h @@ -62,7 +62,7 @@ struct StrBuf; struct Macro; typedef struct Macro Macro; - + /*****************************************************************************/ /* Code */ diff --git a/src/ca65/options.c b/src/ca65/options.c index c71296a57..84d7148be 100644 --- a/src/ca65/options.c +++ b/src/ca65/options.c @@ -182,4 +182,4 @@ void WriteOptions (void) - + diff --git a/src/ca65/span.c b/src/ca65/span.c index a4faea121..5ab3fc955 100644 --- a/src/ca65/span.c +++ b/src/ca65/span.c @@ -204,7 +204,7 @@ static Span* MergeSpan (Span* S) void SetSpanType (Span* S, const StrBuf* Type) /* Set the generic type of the span to Type */ -{ +{ /* Ignore the call if we won't generate debug infos */ if (DbgSyms) { S->Type = GetStrBufId (Type); @@ -354,7 +354,7 @@ static int CollectSpans (void* Entry, void* Data) return 0; } - + void WriteSpans (void) /* Write all spans to the object file */ diff --git a/src/ca65/studyexpr.h b/src/ca65/studyexpr.h index 389bce5a3..a81f6c9c8 100644 --- a/src/ca65/studyexpr.h +++ b/src/ca65/studyexpr.h @@ -36,7 +36,7 @@ #ifndef STUDYEXPR_H #define STUDYEXPR_H - + /* common */ #include "exprdefs.h" diff --git a/src/ca65/symbol.c b/src/ca65/symbol.c index 3b06fd1a2..f1c259082 100644 --- a/src/ca65/symbol.c +++ b/src/ca65/symbol.c @@ -187,7 +187,7 @@ SymEntry* ParseScopedSymName (SymFindAction Action) ** may not expect NULL to be returned if Action contains SYM_ALLOC_NEW, ** create a new symbol. */ - if (Action & SYM_ALLOC_NEW) { + if (Action & SYM_ALLOC_NEW) { Sym = NewSymEntry (&Ident, SF_NONE); } else { Sym = 0; diff --git a/src/ca65/ulabel.c b/src/ca65/ulabel.c index 9712f4942..1127c3743 100644 --- a/src/ca65/ulabel.c +++ b/src/ca65/ulabel.c @@ -160,7 +160,7 @@ void ULabDef (void) */ ULabel* L = CollAtUnchecked (&ULabList, ULabDefCount); CHECK (L->Val == 0); - L->Val = GenCurrentPC (); + L->Val = GenCurrentPC (); ReleaseFullLineInfo (&L->LineInfos); GetFullLineInfo (&L->LineInfos); } else { @@ -200,7 +200,7 @@ ExprNode* ULabResolve (unsigned Index) void ULabDone (void) -/* Run through all unnamed labels, check for anomalies and errors and do +/* Run through all unnamed labels, check for anomalies and errors and do ** necessary cleanups. */ { diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 0a1b917db..62118d80c 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -1781,7 +1781,7 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) if (RegValIsKnown (In->RegX)) { Out->RegX = (In->RegX ^ 0xFF); } - } else if (strncmp (E->Arg, "asrax", 5) == 0 || + } else if (strncmp (E->Arg, "asrax", 5) == 0 || strncmp (E->Arg, "shrax", 5) == 0) { if (RegValIsKnown (In->RegX)) { if (In->RegX == 0x00 || In->RegX == 0xFF) { diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index e5d3f8d96..cc313bd21 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1105,7 +1105,7 @@ Type* NewBitFieldType (const Type* T, unsigned BitOffs, unsigned BitWidth) /* The type specifier must be integeral */ CHECK (IsClassInt (T)); - + /* Allocate the new type string */ P = TypeAlloc (3); diff --git a/src/cc65/declare.c b/src/cc65/declare.c index fa4c52818..017a69874 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2267,7 +2267,7 @@ static void DefineBitFieldData (StructInitData* SI) static void DefineStrData (Literal* Lit, unsigned Count) -{ +{ /* Translate into target charset */ TranslateLiteral (Lit); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index ab48a4554..7343702ea 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3786,7 +3786,7 @@ static void hieOr (ExprDesc *Expr) /* Load false only if the result is not true */ g_getimmed (CF_INT | CF_CONST, 0, 0); /* Load FALSE */ g_falsejump (CF_NONE, DoneLab); - + /* Load the true value */ g_defcodelabel (TrueLab); g_getimmed (CF_INT | CF_CONST, 1, 0); /* Load TRUE */ diff --git a/src/cl65/error.c b/src/cl65/error.c index ee2adcfcc..9c234681f 100644 --- a/src/cl65/error.c +++ b/src/cl65/error.c @@ -39,7 +39,7 @@ /* common */ #include "cmdline.h" - + /* cl65 */ #include "global.h" #include "error.h" diff --git a/src/cl65/main.c b/src/cl65/main.c index 023e111e0..e032baee4 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -1503,7 +1503,7 @@ int main (int argc, char* argv []) case 'E': /* Forward -E to compiler */ - CmdAddArg (&CC65, Arg); + CmdAddArg (&CC65, Arg); DisableAssemblingAndLinking (); break; @@ -1513,7 +1513,7 @@ int main (int argc, char* argv []) OptAsmArgs (Arg, GetArg (&I, 3)); } else if (Arg[2] == 'c' && Arg[3] == '\0') { /* -Wc: Pass options to compiler */ - /* Remember -Wc sub arguments in cc65 arg struct */ + /* Remember -Wc sub arguments in cc65 arg struct */ OptCCArgs (Arg, GetArg (&I, 3)); } else if (Arg[2] == 'l' && Arg[3] == '\0') { /* -Wl: Pass options to linker */ diff --git a/src/co65/convert.h b/src/co65/convert.h index 8c7782ff3..5045acedd 100644 --- a/src/co65/convert.h +++ b/src/co65/convert.h @@ -56,7 +56,7 @@ struct O65Data; void Convert (const struct O65Data* D); -/* Convert the o65 file in D */ +/* Convert the o65 file in D */ diff --git a/src/co65/error.c b/src/co65/error.c index 1fa099c94..dc3e4e73b 100644 --- a/src/co65/error.c +++ b/src/co65/error.c @@ -81,7 +81,7 @@ void Error (const char* Format, ...) void Internal (const char* Format, ...) /* Print an internal error message and die */ { - va_list ap; + va_list ap; va_start (ap, Format); fprintf (stderr, "%s: Internal error: ", ProgName); vfprintf (stderr, Format, ap); diff --git a/src/co65/model.c b/src/co65/model.c index bb815cd15..2206993bf 100644 --- a/src/co65/model.c +++ b/src/co65/model.c @@ -53,7 +53,7 @@ O65Model Model = O65_MODEL_NONE; /* Name table */ static const char* const NameTable[O65_MODEL_COUNT] = { - "none", + "none", "os/a65", "lunix", "cc65-module" diff --git a/src/common/debugflag.c b/src/common/debugflag.c index 7d2e80009..0a452ae36 100644 --- a/src/common/debugflag.c +++ b/src/common/debugflag.c @@ -32,7 +32,7 @@ /*****************************************************************************/ - + /* common */ #include "debugflag.h" diff --git a/src/common/debugflag.h b/src/common/debugflag.h index d325a9eb9..39034044e 100644 --- a/src/common/debugflag.h +++ b/src/common/debugflag.h @@ -31,7 +31,7 @@ /* */ /*****************************************************************************/ - + #ifndef DEBUGFLAG_H #define DEBUGFLAG_H diff --git a/src/common/filepos.c b/src/common/filepos.c index 51488ffe5..b2cac79e1 100644 --- a/src/common/filepos.c +++ b/src/common/filepos.c @@ -60,7 +60,7 @@ int CompareFilePos (const FilePos* P1, const FilePos* P2) ** compare rates file index over line over column. */ { - if (P1->Name > P2->Name) { + if (P1->Name > P2->Name) { return 1; } else if (P1->Name < P2->Name) { return -1; diff --git a/src/common/searchpath.c b/src/common/searchpath.c index ca7017e6f..70237a1c9 100644 --- a/src/common/searchpath.c +++ b/src/common/searchpath.c @@ -210,9 +210,9 @@ int PushSearchPath (SearchPaths* P, const char* NewPath) ** that it's not already there. If the path is already at the first position, ** return zero, otherwise return a non zero value. */ -{ +{ /* Generate a clean copy of NewPath */ - char* Path = CleanupPath (NewPath); + char* Path = CleanupPath (NewPath); /* If we have paths, check if Path is already at position zero */ if (CollCount (P) > 0 && strcmp (CollConstAt (P, 0), Path) == 0) { diff --git a/src/common/strstack.c b/src/common/strstack.c index 29dd10426..6b9fb0f8b 100644 --- a/src/common/strstack.c +++ b/src/common/strstack.c @@ -32,12 +32,12 @@ /*****************************************************************************/ - + /* common */ #include "check.h" #include "strstack.h" #include "xmalloc.h" - + /*****************************************************************************/ diff --git a/src/common/strutil.c b/src/common/strutil.c index dabed34cd..60284e860 100644 --- a/src/common/strutil.c +++ b/src/common/strutil.c @@ -66,7 +66,7 @@ char* StrCopy (char* Dest, size_t DestSize, const char* Source) int StrCaseCmp (const char* S1, const char* S2) -/* Compare two strings ignoring case */ +/* Compare two strings ignoring case */ { int Diff; while ((Diff = toupper (*S1) - toupper (*S2)) == 0 && *S1) { @@ -77,4 +77,4 @@ int StrCaseCmp (const char* S1, const char* S2) } - + diff --git a/src/common/va_copy.h b/src/common/va_copy.h index 4aa2428db..413d96bdd 100644 --- a/src/common/va_copy.h +++ b/src/common/va_copy.h @@ -41,7 +41,7 @@ #include <stdarg.h> - + /* No action if we have a working va_copy */ #if !defined(va_copy) diff --git a/src/common/xsprintf.c b/src/common/xsprintf.c index 5994bb604..a3fbc676b 100644 --- a/src/common/xsprintf.c +++ b/src/common/xsprintf.c @@ -580,7 +580,7 @@ int xvsnprintf (char* Buf, size_t Size, const char* Format, va_list ap) CHECK (S != 0); /* Handle the length by using a precision */ if ((P.Flags & fPrec) != 0) { - /* Precision already specified, use length of string + /* Precision already specified, use length of string ** if less. */ if ((unsigned) P.Prec > SB_GetLen (S)) { diff --git a/src/common/xsprintf.h b/src/common/xsprintf.h index a37b71914..4d32a7410 100644 --- a/src/common/xsprintf.h +++ b/src/common/xsprintf.h @@ -33,9 +33,9 @@ -/* We need a way to output a StrBuf, but on the other side, we don't want to -** switch off gcc's printf format string checking. So we cheat as follows: -** %m (which is a gcc extension and doesn't take an argument) switches %p +/* We need a way to output a StrBuf, but on the other side, we don't want to +** switch off gcc's printf format string checking. So we cheat as follows: +** %m (which is a gcc extension and doesn't take an argument) switches %p ** between outputting a pointer and a string buf. This works just one time, ** so each StrBuf needs in fact a %m%p spec. There's no way to apply a width ** and precision to such a StrBuf, but *not* using %p would bring up a warning diff --git a/src/da65/comments.c b/src/da65/comments.c index cf0b9d4e9..7c671131f 100644 --- a/src/da65/comments.c +++ b/src/da65/comments.c @@ -36,7 +36,7 @@ /* common */ #include "xmalloc.h" -/* da65 */ +/* da65 */ #include "attrtab.h" #include "comments.h" #include "error.h" diff --git a/src/da65/opc6502dtv.h b/src/da65/opc6502dtv.h index e63e4e44c..33b485029 100644 --- a/src/da65/opc6502dtv.h +++ b/src/da65/opc6502dtv.h @@ -58,4 +58,4 @@ extern const OpcDesc OpcTable_6502DTV[256]; - + diff --git a/src/da65/opc6502x.h b/src/da65/opc6502x.h index e086f87ae..23cd9068c 100644 --- a/src/da65/opc6502x.h +++ b/src/da65/opc6502x.h @@ -58,4 +58,4 @@ extern const OpcDesc OpcTable_6502X[256]; - + diff --git a/src/da65/opctable.h b/src/da65/opctable.h index 69a64db9c..7c871f7b0 100644 --- a/src/da65/opctable.h +++ b/src/da65/opctable.h @@ -38,7 +38,7 @@ -/* common */ +/* common */ #include "cpu.h" /* da65 */ diff --git a/src/dbginfo/dbginfo.h b/src/dbginfo/dbginfo.h index 7317e575f..38d891e7c 100644 --- a/src/dbginfo/dbginfo.h +++ b/src/dbginfo/dbginfo.h @@ -135,7 +135,7 @@ struct cc65_csymdata { unsigned char csym_kind; /* Kind of c symbol */ unsigned char csym_sc; /* Storage class of c symbol */ int csym_offs; /* Offset for auto and register */ - unsigned type_id; /* Id of the data type */ + unsigned type_id; /* Id of the data type */ unsigned symbol_id; /* Attached asm symbol if any */ unsigned scope_id; /* Scope of c symbol */ const char* csym_name; /* Name of the symbol */ diff --git a/src/ld65/condes.c b/src/ld65/condes.c index d8c378211..734b64ebd 100644 --- a/src/ld65/condes.c +++ b/src/ld65/condes.c @@ -281,7 +281,7 @@ const ConDesImport* ConDesGetImport (unsigned Type) /* Check the parameters */ PRECONDITION (Type <= CD_TYPE_MAX); - /* Return the import */ + /* Return the import */ Import = &ConDes[Type].Import; return (Import->Name != INVALID_STRING_ID)? Import : 0; } diff --git a/src/ld65/fragment.h b/src/ld65/fragment.h index 7d6dd9201..34eb5b695 100644 --- a/src/ld65/fragment.h +++ b/src/ld65/fragment.h @@ -100,7 +100,7 @@ INLINE const char* GetFragmentSourceName (const Fragment* F) #if defined(HAVE_INLINE) INLINE unsigned GetFragmentSourceLine (const Fragment* F) /* Return the source file line for this fragment */ -{ +{ return GetSourceLineFromList (&F->LineInfos); } #else diff --git a/src/ld65/mapfile.c b/src/ld65/mapfile.c index 7fec986ff..10d65960e 100644 --- a/src/ld65/mapfile.c +++ b/src/ld65/mapfile.c @@ -93,7 +93,7 @@ void CreateMapFile (int ShortMap) ** requested */ if (VerboseMap || S->Size > 0) { - fprintf (F, + fprintf (F, " %-17s Offs=%06lX Size=%06lX " "Align=%05lX Fill=%04lX\n", GetString (S->Seg->Name), S->Offs, S->Size, diff --git a/src/od65/dump.c b/src/od65/dump.c index 2f538fe1d..1a8c4dbb1 100644 --- a/src/od65/dump.c +++ b/src/od65/dump.c @@ -933,7 +933,7 @@ void DumpObjSegSize (FILE* F, unsigned long Offset) unsigned Len = strlen (Name); /* Skip segment flags, read size */ - (void) ReadVar (F); + (void) ReadVar (F); Size = ReadVar (F); /* Skip alignment, type and fragment count */ diff --git a/src/od65/fileio.c b/src/od65/fileio.c index a8d31c730..1689c4734 100644 --- a/src/od65/fileio.c +++ b/src/od65/fileio.c @@ -53,7 +53,7 @@ void FileSetPos (FILE* F, unsigned long Pos) /* Seek to the given absolute position, fail on errors */ -{ +{ if (fseek (F, Pos, SEEK_SET) != 0) { Error ("Cannot seek: %s", strerror (errno)); } diff --git a/src/sim65/6502.c b/src/sim65/6502.c index b3c06293a..6c23b0dfc 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -1270,8 +1270,8 @@ static void OPC_6502_6C (void) Cycles = 6; Regs.PC = MemReadWord(Lo); } - - ParaVirtHooks (&Regs); + + ParaVirtHooks (&Regs); } @@ -1283,7 +1283,7 @@ static void OPC_65C02_6C (void) Cycles = 5; Regs.PC = MemReadWord (MemReadWord (Regs.PC+1)); - ParaVirtHooks (&Regs); + ParaVirtHooks (&Regs); } @@ -1439,7 +1439,7 @@ static void OPC_65SC02_7C (void) Adr = MemReadWord (PC+1); Regs.PC = MemReadWord(Adr+Regs.XR); - ParaVirtHooks (&Regs); + ParaVirtHooks (&Regs); } diff --git a/src/sp65/bin.c b/src/sp65/bin.c index a3f856340..93e6a456a 100644 --- a/src/sp65/bin.c +++ b/src/sp65/bin.c @@ -53,7 +53,7 @@ -void WriteBinFile (const StrBuf* Data, const Collection* A, +void WriteBinFile (const StrBuf* Data, const Collection* A, const Bitmap* B attribute ((unused))) /* Write the contents of Data to the given file in binary format */ { diff --git a/src/sp65/color.h b/src/sp65/color.h index 31688bff4..6d898ab2e 100644 --- a/src/sp65/color.h +++ b/src/sp65/color.h @@ -60,7 +60,7 @@ struct Color { /*****************************************************************************/ - + #if defined(HAVE_INLINE) INLINE Color RGB (unsigned char R, unsigned char G, unsigned char B) diff --git a/src/sp65/geosbitmap.h b/src/sp65/geosbitmap.h index 759030224..8f9f09a29 100644 --- a/src/sp65/geosbitmap.h +++ b/src/sp65/geosbitmap.h @@ -54,8 +54,8 @@ StrBuf* GenGeosBitmap (const Bitmap* B, const Collection* A); -/* Generate binary output in GEOS compacted bitmap format for the bitmap B. -** The output is stored in a string buffer (which is actually a dynamic char +/* Generate binary output in GEOS compacted bitmap format for the bitmap B. +** The output is stored in a string buffer (which is actually a dynamic char ** array) and returned. */ @@ -67,4 +67,4 @@ StrBuf* GenGeosBitmap (const Bitmap* B, const Collection* A); - + diff --git a/src/sp65/koala.c b/src/sp65/koala.c index e2122c781..688e37f61 100644 --- a/src/sp65/koala.c +++ b/src/sp65/koala.c @@ -94,7 +94,7 @@ StrBuf* GenKoala (const Bitmap* B, const Collection* A attribute ((unused))) /* Add $4400 as load address */ SB_AppendChar (D, 0x00); SB_AppendChar (D, 0x44); - + /* TODO: The actual work ;-) */ (void) Screen; diff --git a/src/sp65/lynxsprite.h b/src/sp65/lynxsprite.h index 4f9a9f07d..fe686ec8e 100644 --- a/src/sp65/lynxsprite.h +++ b/src/sp65/lynxsprite.h @@ -54,7 +54,7 @@ StrBuf* GenLynxSprite (const Bitmap* B, const Collection* A); -/* Generate binary output in packed Lynx sprite format for the bitmap B. The output +/* Generate binary output in packed Lynx sprite format for the bitmap B. The output ** is stored in a string buffer (which is actually a dynamic char array) and ** returned. */ diff --git a/src/sp65/vic2sprite.c b/src/sp65/vic2sprite.c index 94a9ad499..4ea71b562 100644 --- a/src/sp65/vic2sprite.c +++ b/src/sp65/vic2sprite.c @@ -83,7 +83,7 @@ static enum Mode GetMode (const Collection* A) } else { Error ("Invalid value for attribute 'mode'"); } - } + } return smAuto; } diff --git a/src/sp65/vic2sprite.h b/src/sp65/vic2sprite.h index b6c839c7c..ce2f078e4 100644 --- a/src/sp65/vic2sprite.h +++ b/src/sp65/vic2sprite.h @@ -54,7 +54,7 @@ StrBuf* GenVic2Sprite (const Bitmap* B, const Collection* A); -/* Generate binary output in VICII sprite format for the bitmap B. The output +/* Generate binary output in VICII sprite format for the bitmap B. The output ** is stored in a string buffer (which is actually a dynamic char array) and ** returned. */ From b54fb2dfd128cb1fc0ed116921fa7e3959417ee9 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:07:20 +0200 Subject: [PATCH 1537/2710] remove dangling spaces --- targettest/cpeek-test.c | 4 ++-- targettest/gamate/audiotest.s | 2 +- targettest/minimal.c | 2 +- targettest/uname-test.c | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/targettest/cpeek-test.c b/targettest/cpeek-test.c index 1777bce4a..4c1aadcb2 100644 --- a/targettest/cpeek-test.c +++ b/targettest/cpeek-test.c @@ -294,8 +294,8 @@ int main (void) revers(0); cputc('x'); chBack (); c1 = cpeekrevers(); chForth(); revers(1); cputc('X'); chBack (); c2 = cpeekrevers(); chForth(); cputc('\n'); cputc('\r'); - revers(c1); cputc('o'); - revers(c2); cputc('O'); + revers(c1); cputc('o'); + revers(c2); cputc('O'); /* test cpeeks() */ revers(0); diff --git a/targettest/gamate/audiotest.s b/targettest/gamate/audiotest.s index f40199994..4f1496789 100644 --- a/targettest/gamate/audiotest.s +++ b/targettest/gamate/audiotest.s @@ -155,7 +155,7 @@ nocursor: .proc printy ldy #0 -loop1: +loop1: tya pha asl diff --git a/targettest/minimal.c b/targettest/minimal.c index 65ec37a97..f950a5d13 100644 --- a/targettest/minimal.c +++ b/targettest/minimal.c @@ -1,4 +1,4 @@ - + /* this is a minimal / empty c program, any supported target that has some * sort of C support should be able to link this. Failure indicates a problem * with the crt0 or the linker config of the respective target */ diff --git a/targettest/uname-test.c b/targettest/uname-test.c index b0733d0bd..2851da19c 100644 --- a/targettest/uname-test.c +++ b/targettest/uname-test.c @@ -4,7 +4,7 @@ int main (void) -{ +{ /* Get the uname data */ struct utsname buf; if (uname (&buf) != 0) { @@ -12,7 +12,7 @@ int main (void) return EXIT_FAILURE; } - /* Print it */ + /* Print it */ printf ("sysname: \"%s\"\n", buf.sysname); printf ("nodename: \"%s\"\n", buf.nodename); printf ("release: \"%s\"\n", buf.release); From 9d3cdc5a1064afffb46ff4968b53de32292623e6 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:07:52 +0200 Subject: [PATCH 1538/2710] remove dangling spaces --- test/err/bug1098.c | 2 +- test/err/bug1098a.c | 2 +- test/err/bug1098b.c | 2 +- test/err/pr1110.c | 4 +- test/misc/bug1265.c | 4 +- test/misc/sitest.c | 10 +- test/ref/array.c | 2 +- test/ref/cc65070303.c | 2 +- test/ref/cc65080227.c | 2 +- test/ref/cc65080328.c | 2 +- test/ref/cc65090111.c | 2 +- test/ref/cc65090124.c | 6 +- test/ref/cc65090726.c | 4 +- test/ref/cc65101209.c | 2 +- test/ref/cf.c | 2 +- test/ref/strptr.c | 18 ++-- test/ref/struct.c | 2 +- test/ref/switch2.c | 6 +- test/ref/yacc.c | 174 +++++++++++++++++----------------- test/ref/yacc2.c | 22 ++--- test/val/bug1075.c | 2 +- test/val/bug1178.c | 4 +- test/val/bug1181.c | 4 +- test/val/bug1438.c | 2 +- test/val/bug1552.c | 2 +- test/val/call1.c | 4 +- test/val/compare10.c | 10 +- test/val/compare5.c | 4 +- test/val/compare6.c | 6 +- test/val/compare7.c | 8 +- test/val/compare8.c | 12 +-- test/val/compare9.c | 10 +- test/val/constexpr.c | 2 +- test/val/cq22.c | 2 +- test/val/cq241.c | 2 +- test/val/cq243.c | 2 +- test/val/cq244.c | 2 +- test/val/cq25.c | 2 +- test/val/cq26.c | 2 +- test/val/cq4.c | 2 +- test/val/cq61.c | 2 +- test/val/cq626.c | 2 +- test/val/cq71.c | 2 +- test/val/cq714.c | 2 +- test/val/cq714b.c | 2 +- test/val/cq715.c | 2 +- test/val/cq72.c | 2 +- test/val/cq7813.c | 2 +- test/val/cq81.c | 2 +- test/val/cq84.c | 2 +- test/val/cq85.c | 2 +- test/val/cq86.c | 2 +- test/val/cq88.c | 2 +- test/val/duffs-device.c | 10 +- test/val/lib_common_ctype.c | 8 +- test/val/lib_common_memmove.c | 4 +- test/val/lib_common_mulxx.c | 2 +- test/val/lib_common_strcat.c | 8 +- test/val/lib_common_strchr.c | 2 +- test/val/lib_common_strcspn.c | 2 +- test/val/lib_common_strncat.c | 8 +- test/val/lib_common_strrchr.c | 2 +- test/val/lib_common_strspn.c | 2 +- test/val/mult1.c | 32 +++---- test/val/or1.c | 22 ++--- test/val/postdec-16-16.c | 26 ++--- test/val/postdec-16-8.c | 26 ++--- test/val/postdec-8-16.c | 26 ++--- test/val/postdec-8-8.c | 26 ++--- test/val/postinc-16-16.c | 26 ++--- test/val/postinc-16-8.c | 26 ++--- test/val/postinc-8-16.c | 26 ++--- test/val/postinc-8-8.c | 26 ++--- test/val/pptest4.c | 2 +- test/val/pptest5.c | 2 +- test/val/pr1423.c | 2 +- test/val/predec-16-16.c | 26 ++--- test/val/predec-16-8.c | 26 ++--- test/val/predec-8-16.c | 26 ++--- test/val/predec-8-8.c | 26 ++--- test/val/preinc-16-16.c | 26 ++--- test/val/preinc-16-8.c | 26 ++--- test/val/preinc-8-16.c | 26 ++--- test/val/preinc-8-8.c | 26 ++--- test/val/static-fwd-decl.c | 2 +- test/val/strnicmp-test.c | 4 +- test/val/switch2.c | 2 +- test/val/time-test.c | 2 +- test/val/xor.c | 4 +- 89 files changed, 459 insertions(+), 459 deletions(-) diff --git a/test/err/bug1098.c b/test/err/bug1098.c index c49296245..eddbce3f1 100644 --- a/test/err/bug1098.c +++ b/test/err/bug1098.c @@ -1,7 +1,7 @@ /* bug #1098 Empty enumerator-list */ -/* The C Standard requires that something exists between the braces for +/* The C Standard requires that something exists between the braces for * enum, struct, and union. */ enum { diff --git a/test/err/bug1098a.c b/test/err/bug1098a.c index 63c1c8da0..aed750267 100644 --- a/test/err/bug1098a.c +++ b/test/err/bug1098a.c @@ -1,7 +1,7 @@ /* bug #1098 Empty enumerator-list */ -/* The C Standard requires that something exists between the braces for +/* The C Standard requires that something exists between the braces for * enum, struct, and union. */ struct { diff --git a/test/err/bug1098b.c b/test/err/bug1098b.c index ebd3e94c8..5f6d8b0f2 100644 --- a/test/err/bug1098b.c +++ b/test/err/bug1098b.c @@ -1,7 +1,7 @@ /* bug #1098 Empty enumerator-list */ -/* The C Standard requires that something exists between the braces for +/* The C Standard requires that something exists between the braces for * enum, struct, and union. */ union { diff --git a/test/err/pr1110.c b/test/err/pr1110.c index 86955c720..671abf9a4 100644 --- a/test/err/pr1110.c +++ b/test/err/pr1110.c @@ -1,5 +1,5 @@ -/* pr #1110 - not only should the current test case for #975 compile and work, +/* pr #1110 - not only should the current test case for #975 compile and work, * but also the code piece below fail to compile and generate errors like commented: */ static const unsigned char array[3]; /* OK */ @@ -7,7 +7,7 @@ static const unsigned char array[] = { 0, 1, 2 }; /* OK - complete definition* static const unsigned char array[3]; /* OK */ static const unsigned char array[]; /* OK */ static const unsigned char array[] = { 1, 2, 3 }; /* Error - redefinition */ -static const unsigned char array[4]; /* Error - conflicting size */ +static const unsigned char array[4]; /* Error - conflicting size */ int main(void) { diff --git a/test/misc/bug1265.c b/test/misc/bug1265.c index 36d1459a7..7c34a25b7 100644 --- a/test/misc/bug1265.c +++ b/test/misc/bug1265.c @@ -17,7 +17,7 @@ int main (void) { x = 1234; n = f1 (x); sprintf (str2, "%p\n", &x); - + if (strcmp(str1, str2)) { puts("not equal"); failures++; @@ -31,7 +31,7 @@ int main (void) { x = 2345; n = f2 (x); sprintf (str2, "%p\n", &x); - + if (strcmp(str1, str2)) { puts("not equal"); failures++; diff --git a/test/misc/sitest.c b/test/misc/sitest.c index 2f1d7df4d..6c8a6f1e2 100644 --- a/test/misc/sitest.c +++ b/test/misc/sitest.c @@ -106,7 +106,7 @@ int main() { int status = 0; /* exit status to be returned */ - + /* <stdint.h> features: */ printf("CHAR_BIT=%u\n", (unsigned)CHAR_BIT ); @@ -526,12 +526,12 @@ main() { else /* for trailing semicolon */ #else - + #define SCAN(buf,fs,var,exp) #define PRINT(fs,var,exp) #endif - + #ifdef SCNo32 SCAN(in_dn, SCNo32, int32, 9); @@ -586,7 +586,7 @@ main() { #endif #if 0 - + #ifdef INT16_MAX { INT16_MAX, INT16_MAX, }, { -INT16_MAX, INT16_MAX, }, @@ -830,7 +830,7 @@ main() { } #endif } - + { char *endptr; wchar_t *wendptr; diff --git a/test/ref/array.c b/test/ref/array.c index 96bf22c3a..19265ef90 100644 --- a/test/ref/array.c +++ b/test/ref/array.c @@ -29,7 +29,7 @@ main() { p[j] = x[i][j]; } g(z, y); - + return 0; } diff --git a/test/ref/cc65070303.c b/test/ref/cc65070303.c index 049f14c40..6cf2e9dc7 100644 --- a/test/ref/cc65070303.c +++ b/test/ref/cc65070303.c @@ -27,7 +27,7 @@ int main(int argc, char* argv[]) test.c(20): Error: Incompatible pointer types for   APtr=&(Bs[7].Data[1]); -My experience in C is very limited, but as this works both in MSVC and +My experience in C is very limited, but as this works both in MSVC and the 8 bit Z80 compiler i originally used, i guess its an bug in CC65. As a workaround, an typecast via  APtr=(TypA*)&(Bs[7].Data[1]); diff --git a/test/ref/cc65080227.c b/test/ref/cc65080227.c index b6d068b2a..86d5ee331 100644 --- a/test/ref/cc65080227.c +++ b/test/ref/cc65080227.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! + !!DESCRIPTION!! !!ORIGIN!! testsuite !!LICENCE!! Public Domain !!AUTHOR!! diff --git a/test/ref/cc65080328.c b/test/ref/cc65080328.c index 630638f3d..7e26ea20a 100644 --- a/test/ref/cc65080328.c +++ b/test/ref/cc65080328.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! + !!DESCRIPTION!! !!ORIGIN!! testsuite !!LICENCE!! Public Domain !!AUTHOR!! diff --git a/test/ref/cc65090111.c b/test/ref/cc65090111.c index be889a608..30b2b3cd0 100644 --- a/test/ref/cc65090111.c +++ b/test/ref/cc65090111.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! + !!DESCRIPTION!! !!ORIGIN!! testsuite !!LICENCE!! Public Domain !!AUTHOR!! diff --git a/test/ref/cc65090124.c b/test/ref/cc65090124.c index 3a75b28fa..910dc1195 100644 --- a/test/ref/cc65090124.c +++ b/test/ref/cc65090124.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! + !!DESCRIPTION!! !!ORIGIN!! testsuite !!LICENCE!! Public Domain !!AUTHOR!! @@ -8,7 +8,7 @@ #include <stdio.h> /* -there is a bug in the preprocessor (i think) ... the following works +there is a bug in the preprocessor (i think) ... the following works (compiles) correctly: unsigned long fs,fd,a; @@ -32,7 +32,7 @@ int main(void) fs=(func((fd/a),(func(2,0x0082c90f)))); } -i get "Error: ')' expected" on that line. (this is with the snapshot, freshly +i get "Error: ')' expected" on that line. (this is with the snapshot, freshly compiled 5 minutes ago) */ diff --git a/test/ref/cc65090726.c b/test/ref/cc65090726.c index 609594dc4..f22b9c203 100644 --- a/test/ref/cc65090726.c +++ b/test/ref/cc65090726.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! + !!DESCRIPTION!! !!ORIGIN!! testsuite !!LICENCE!! Public Domain !!AUTHOR!! @@ -36,7 +36,7 @@ void Proc1(RecordPtr PtrParIn) Proc3((*(PtrParIn->PtrComp)).PtrComp); Proc3(NextRecord.PtrComp); #endif - + #undef NextRecord } diff --git a/test/ref/cc65101209.c b/test/ref/cc65101209.c index daeab8509..eba209d1d 100644 --- a/test/ref/cc65101209.c +++ b/test/ref/cc65101209.c @@ -34,5 +34,5 @@ So testing with 999 gives: 231 mod 999 is 0 999 mod 999 is 0 -This seems to be systematic. +This seems to be systematic. */ diff --git a/test/ref/cf.c b/test/ref/cf.c index bb0c13e8b..6001009ce 100644 --- a/test/ref/cf.c +++ b/test/ref/cf.c @@ -67,7 +67,7 @@ char *argv[]; } printf("input:\n\n"); - + nc = 0; while ((c = GETCHAR()) != -1) { diff --git a/test/ref/strptr.c b/test/ref/strptr.c index 152c1bb48..d596e19d1 100644 --- a/test/ref/strptr.c +++ b/test/ref/strptr.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! + !!DESCRIPTION!! !!ORIGIN!! testsuite !!LICENCE!! Public Domain !!AUTHOR!! Groepaz/Hitmen @@ -24,7 +24,7 @@ FILE *outfile=NULL; #else #endif - + #include <stdio.h> #include <stdlib.h> #include <fcntl.h> @@ -65,17 +65,17 @@ static unsigned char ch; /* basic line-link / file-length */ memcpy(buffer,b1,4); - - dir->off=dir->off+4; + + dir->off=dir->off+4; entry.d_reclen=254*(buffer[2]+(buffer[3]<<8)); /* read file entry */ memcpy(buffer,b2,0x10); - - dir->off=dir->off+i; + + dir->off=dir->off+i; printf("Xreaddir: '%s'\n",buffer); - + /* skip until either quote (file) or b (blocks free => end) */ i=0;ii=0; while(i==0){ @@ -113,9 +113,9 @@ int main(void) char mydirname[XNAME_MAX+1]="."; XDIR mydir; struct Xdirent *mydirent; - + printf("start\n"); - + if((mydirent=Xreaddir(&mydir))==NULL) { printf("NULL\n"); diff --git a/test/ref/struct.c b/test/ref/struct.c index 15fae62fc..e5957f265 100644 --- a/test/ref/struct.c +++ b/test/ref/struct.c @@ -246,7 +246,7 @@ rect screen = ); test1(); - + for (i = 0; i < sizeof pts/sizeof pts[0]; i++) { printf("(%d,%d) is ", pts[i].x, (x = makepoint(pts[i].x, pts[i].y)).y); diff --git a/test/ref/switch2.c b/test/ref/switch2.c index 78d383b52..0e52775e4 100644 --- a/test/ref/switch2.c +++ b/test/ref/switch2.c @@ -169,7 +169,7 @@ void testdefault2(unsigned char i) { case 170: break; - + case 18: break; case 19: @@ -215,12 +215,12 @@ int main(void) { testlimits(32767); testlimits(-32768); testlimits(-1); - + testdefault1(1); testdefault1(2); testdefault1(3); testdefault1(4); - + testdefault2(1); testdefault2(2); testdefault2(3); diff --git a/test/ref/yacc.c b/test/ref/yacc.c index 776e4f93d..3831b67fd 100644 --- a/test/ref/yacc.c +++ b/test/ref/yacc.c @@ -70,7 +70,7 @@ int yytchar; #define yyout outfile extern int yylineno; -struct yysvf +struct yysvf { struct yywork *yystoff; struct yysvf *yyother; @@ -150,7 +150,7 @@ yyfussy: } } - + #ifdef YYDEBUG fprintf(yyout,"yylex: return 0\n"); #endif @@ -164,9 +164,9 @@ int yyvstop[] = }; # define YYTYPE char -struct yywork -{ - YYTYPE verify, advance; +struct yywork +{ + YYTYPE verify, advance; } yycrank[] = { {0,0}, {0,0}, {1,3}, {0,0}, @@ -178,12 +178,12 @@ struct yywork {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, - + {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, - + {0,0}, {1,5}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, @@ -193,17 +193,17 @@ struct yywork {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {0,0}, {0,0}, {0,0}, - + {0,0}, {0,0}, {0,0}, {0,0}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, - + {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {0,0}, {0,0}, - + {0,0}, {0,0}, {6,8}, {0,0}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, @@ -240,7 +240,7 @@ struct yywork }; /* -struct yysvf +struct yysvf { struct yywork *yystoff; struct yysvf *yyother; @@ -281,27 +281,27 @@ char yymatch[] = #endif 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , - + 011 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , 01 ,01 ,01 ,01 ,01 ,01 ,01 ,01 , - + '0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' ,'0' , '0' ,'0' ,01 ,01 ,01 ,01 ,01 ,01 , - + /* 0x40 (ascii) @A... (petscii) @a... */ 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , - + 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,'A' , - + /* 0x60 (ascii) @a... */ 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , - + 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,01 , - + #ifdef CHARSETHACK /* 0x80 */ 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, @@ -312,10 +312,10 @@ char yymatch[] = /* 0xc0 (petcii) @A... */ 01 ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , - + 'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' ,'A' , 'A' ,'A' ,'A' ,01 ,01 ,01 ,01 ,01 , - + 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, @@ -354,9 +354,9 @@ yylook() int debug; # endif */ - + char *yylastch; - + /* start off machines */ /* @@ -372,11 +372,11 @@ yylook() # else #define debug 0 #endif - + #ifdef YYDEBUG fprintf(yyout,"yylook()\n"); # endif - + if (!yymorfg) yylastch = yytext; else @@ -388,7 +388,7 @@ yylook() #ifdef YYDEBUG fprintf(yyout,"yylook: yymorfg=%d\n",yymorfg); # endif - + for(;;) { #ifdef YYDEBUG @@ -400,7 +400,7 @@ yylook() if (yyprevious==YYNEWLINE) yystate++; testbreak=0; - + for (;;) { # ifdef LEXDEBUG @@ -412,12 +412,12 @@ yylook() exit(EXIT_FAILURE); } testbreak++; - + yyt = yystate->yystoff; /* fprintf(yyout,"yylook: yyt offs: %02x\n",yyt-yycrank); */ - + if(yyt == yycrank) { /* may not be any transitions */ yyz = yystate->yyother; @@ -430,7 +430,7 @@ yylook() fprintf(yyout,"yylook: input "); printchar("yych",yych); # endif - + tryagain: # ifdef LEXDEBUG @@ -440,7 +440,7 @@ yylook() yyr = yyt; /* fprintf(yyout,"yylook: yyr offs: %02x\n",yyr-yycrank); */ - + if ( yyt > yycrank) { yyt = yyr + yych; @@ -467,7 +467,7 @@ yylook() } # ifdef YYOPTIM else if(yyt < yycrank) /* r < yycrank */ - { + { yyt = yyr = yycrank+(yycrank-yyt); # ifdef LEXDEBUG fprintf(yyout,"yylook: compressed state\n"); @@ -492,7 +492,7 @@ yylook() fprintf(yyout,"yylook: continue (2)\n"); # endif goto contin; - + } # ifdef LEXDEBUG /* @@ -509,12 +509,12 @@ yylook() */ fprintf(yyout,"yylook: try fall back character\n"); # endif - if(yyt <= yytop && yyt->verify+yysvec == yystate) + if(yyt <= yytop && yyt->verify+yysvec == yystate) { # ifdef LEXDEBUG fprintf(yyout,"yylook: (2a)\n"); # endif - + if(yyt->advance+yysvec == YYLERR) /* error transition */ { # ifdef LEXDEBUG @@ -531,7 +531,7 @@ yylook() fprintf(yyout,"yylook: continue (3)\n"); # endif goto contin; - + } # ifdef LEXDEBUG fprintf(yyout,"yylook: (2)\n"); @@ -578,7 +578,7 @@ yylook() { yyolsp = lsp; if(yyextra[*yyfnd]) /* must backup */ - { + { while(yyback((*lsp)->yystops,-*yyfnd) != 1 && lsp > yylstate) { lsp--; @@ -630,7 +630,7 @@ yylook() # endif } - + yyback(p, m) int *p; { @@ -648,25 +648,25 @@ yyback(p, m) yyinput() { int out=input(); - + #ifdef YYDEBUG fprintf(yyout,"yylook: input "); printchar("out",out); -#endif +#endif return(out); } yyoutput(c) - int c; + int c; { output(c); } yyunput(c) - int c; + int c; { unput(c); } -main() +main() { printf("main start\n"); infile = fopen("yacc.in","rb"); @@ -681,8 +681,8 @@ main() } /* yyerror - issue error message */ -yyerror(s) -char *s; +yyerror(s) +char *s; { printf("[%s]\n", s); } @@ -722,39 +722,39 @@ short yyact[]= 0, 0, 0, 0, 0, 0, 0, 6, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4, 6 + 0, 0, 0, 0, 0, 0, 0, 4, 6 }; short yypact[]= { -1000, -9,-1000, 5, -7, -59,-1000,-1000,-1000, -40, -29, -40, -40,-1000,-1000, -40, -40, -40, -40, -38, - -35, -38, -38,-1000,-1000,-1000 + -35, -38, -38,-1000,-1000,-1000 }; short yypgo[]= { - 0, 21, 20, 17, 11 + 0, 21, 20, 17, 11 }; short yyr1[]= { 0, 1, 1, 1, 1, 2, 4, 4, 4, 4, - 4, 4, 4, 4, 3 + 4, 4, 4, 4, 3 }; short yyr2[]= { 0, 0, 2, 3, 3, 3, 3, 3, 3, 3, - 2, 3, 1, 1, 1 + 2, 3, 1, 1, 1 }; short yychk[]= { -1000, -1, 10, -2, 256, -3, 257, 10, 10, 61, -4, 45, 40, -3, 258, 43, 45, 42, 47, -4, - -4, -4, -4, -4, -4, 41 + -4, -4, -4, -4, -4, 41 }; short yydef[]= { 1, -2, 2, 0, 0, 0, 14, 3, 4, 0, 5, 0, 0, 12, 13, 0, 0, 0, 0, 10, - 0, 6, 7, 8, 9, 11 + 0, 6, 7, 8, 9, 11 }; # define YYFLAG -1000 @@ -774,7 +774,7 @@ int yychar = -1; /* current input token number */ int yynerrs = 0; /* number of errors */ short yyerrflag = 0; /* error recovery flag */ -yyparse() +yyparse() { short yys[YYMAXDEPTH]; short yyj, yym; @@ -820,23 +820,23 @@ yyparse() #ifdef YYDEBUG printf("yyparse: yynewstate (1)\n"); #endif - + if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0; #ifdef YYDEBUG - + printf("yyparse: yynewstate yyn=%d ",yyn); printchar("yychar",yychar); #endif - + if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault; #ifdef YYDEBUG printf("yyparse: yynewstate (2)\n"); #endif - + if( yychk[ yyn=yyact[ yyn ] ] == yychar ) /* valid shift */ - { + { yychar = -1; yyval = yylval; yystate = yyn; @@ -872,9 +872,9 @@ yyparse() #ifdef YYDEBUG printf("yyparse: yyn=%d yyerrflag=%d\n",yyn,yyerrflag); #endif - + if( yyn == 0 ) /* error */ - { + { /* error ... attempt to resume parsing */ switch( yyerrflag ){ @@ -942,65 +942,65 @@ yyparse() yyn = yyr1[yyn]; yyj = yypgo[yyn] + *yyps + 1; if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]]; - + switch(yym) { case 4: - { - yyerrok; + { + yyerrok; } break; case 5: - { + { printf("[STORE]\n"); - } + } break; case 6: - { + { printf("[ADD]\n"); - } + } break; case 7: - { + { printf("[NEG]\n[ADD]\n"); - } + } break; case 8: - { + { printf("[MUL]\n"); - } + } break; case 9: - { + { printf("[DIV]\n"); - } + } break; case 10: - { - printf("[NEG]\n"); - } + { + printf("[NEG]\n"); + } break; case 12: - { - printf("[LOAD]\n"); - } + { + printf("[LOAD]\n"); + } break; case 13: - { + { printf("[PUSH %s]\n", yytext); - } + } break; case 14: - { + { printf("[%s]\n", yytext); - } + } break; } - + goto yystack; /* stack new state and value */ } - -int yywrap() -{ - return 1; + +int yywrap() +{ + return 1; } diff --git a/test/ref/yacc2.c b/test/ref/yacc2.c index 3b4819c55..33288b25d 100644 --- a/test/ref/yacc2.c +++ b/test/ref/yacc2.c @@ -8,9 +8,9 @@ #include <stdio.h> # define YYTYPE char -struct yywork -{ - YYTYPE verify, advance; +struct yywork +{ + YYTYPE verify, advance; } yycrank[] = { {0,0}, {0,0}, {1,3}, {0,0}, @@ -22,12 +22,12 @@ struct yywork {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, - + {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, - + {0,0}, {1,5}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, @@ -37,17 +37,17 @@ struct yywork {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {0,0}, {0,0}, {0,0}, - + {0,0}, {0,0}, {0,0}, {0,0}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, - + {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {0,0}, {0,0}, - + {0,0}, {0,0}, {6,8}, {0,0}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, {6,8}, @@ -90,7 +90,7 @@ int yyvstop[] = 0,4,0,3,4,0,2,4,0,1,4,0,2,0,1,0,0 }; -struct yysvf +struct yysvf { struct yywork *yystoff; struct yysvf *yyother; @@ -157,7 +157,7 @@ void subtest3(void) yyt=yycrank; yystate=yysvec; - + bogus(); if(yyt <= yytop && yyt->verify+yysvec == yystate) { @@ -173,7 +173,7 @@ void subtest3(void) short yyr2[]= { 0, 0, 2, 3, 3, 3, 3, 3, 3, 3, - 2, 3, 1, 1, 1 + 2, 3, 1, 1, 1 }; // yyps -= yyr2[yyn]; diff --git a/test/val/bug1075.c b/test/val/bug1075.c index 6ff5ec8e7..3e259fd22 100644 --- a/test/val/bug1075.c +++ b/test/val/bug1075.c @@ -8,7 +8,7 @@ long rhs; int test(void) { - /* the whole lhs is errorneously treated as an absolute address (integer + /* the whole lhs is errorneously treated as an absolute address (integer constant) neglecting its dereference */ return *(char *)0xD77C + rhs; } diff --git a/test/val/bug1178.c b/test/val/bug1178.c index 043767e4c..7fb7e7803 100644 --- a/test/val/bug1178.c +++ b/test/val/bug1178.c @@ -41,7 +41,7 @@ void dotest1(void) StructArray1[0] = test1; - printf ("test1: %d, %d, %d, %d, %d\n", + printf ("test1: %d, %d, %d, %d, %d\n", (int)StructArray1[0].a, (int)StructArray1[0].b, (int)StructArray1[0].c, (int)StructArray1[0].d, (int)StructArray1[0].e); if ((StructArray1[0].a != 42) || @@ -62,7 +62,7 @@ void dotest2(void) StructArray2[0] = test2; - printf ("test2: %d, %d, %d, %d, %d\n", + printf ("test2: %d, %d, %d, %d, %d\n", (int)StructArray2[0].a, (int)StructArray2[0].b, (int)StructArray2[0].c, (int)StructArray2[0].d); if ((StructArray2[0].a != 42) || diff --git a/test/val/bug1181.c b/test/val/bug1181.c index 4ea2d54bf..077707d94 100644 --- a/test/val/bug1181.c +++ b/test/val/bug1181.c @@ -1,5 +1,5 @@ -/* bug #1181 - Testing struct member against NULL is broken */ +/* bug #1181 - Testing struct member against NULL is broken */ #include <stdio.h> #include <stdlib.h> @@ -52,7 +52,7 @@ MENUITEM optionsitems_menu[] = { static MENU optionsmenu_menu = { &optionsitems_menu[0], -}; +}; unsigned char __fastcall__ menu_getnumitems(MENU *menu) { diff --git a/test/val/bug1438.c b/test/val/bug1438.c index 3894f87f1..9c8f7a8ce 100644 --- a/test/val/bug1438.c +++ b/test/val/bug1438.c @@ -1,5 +1,5 @@ -/* Issue #1438 fix #1439 - crash in cc65, related to delayed post-counting +/* Issue #1438 fix #1439 - crash in cc65, related to delayed post-counting this is an odd issue, the compile would crash *sometimes*, perhaps in one of ten compilation runs. diff --git a/test/val/bug1552.c b/test/val/bug1552.c index 42f39eec6..92ad902bd 100644 --- a/test/val/bug1552.c +++ b/test/val/bug1552.c @@ -23,7 +23,7 @@ int execute(TREPTR argt, int execflg, int *pf1, int *pf2) { register TREPTR t; int type; - switch (type) + switch (type) { case 6: { diff --git a/test/val/call1.c b/test/val/call1.c index c7ac920b3..d09ae0dec 100644 --- a/test/val/call1.c +++ b/test/val/call1.c @@ -70,7 +70,7 @@ call5 (unsigned int k) return (k); } -unsigned char +unsigned char call6a(unsigned char uc) { if(uc>uchar1) @@ -85,7 +85,7 @@ call6(unsigned char uc) return(call6a(uc)); } -unsigned int +unsigned int call7a(unsigned int ui) { if(ui) diff --git a/test/val/compare10.c b/test/val/compare10.c index 861a02d64..742213851 100644 --- a/test/val/compare10.c +++ b/test/val/compare10.c @@ -59,7 +59,7 @@ void c_char_gte_lit1(unsigned char expected_result) if(char0 >= 0x7e) result |= 0x10; - + if(char0 >= 0x7f) result |= 0x20; @@ -138,10 +138,10 @@ void c_int_gte_lit1(unsigned char expected_result) if(int0 >= 0x0101) result |= 0x10; - + if(int0 >= 0x01ff) result |= 0x20; - + if(int0 >= 0x0200) result |= 0x40; @@ -226,10 +226,10 @@ void c_int_gte_lit2(unsigned char expected_result) if(int0 >= -0x0101) result |= 0x10; - + if(int0 >= -0x0100) result |= 0x20; - + if(int0 >= -0xff) result |= 0x40; diff --git a/test/val/compare5.c b/test/val/compare5.c index f1d94d537..cf51fac89 100644 --- a/test/val/compare5.c +++ b/test/val/compare5.c @@ -284,7 +284,7 @@ void c_ifelse1(void) void c_minus1(void) { printf("long0:%ld long1:%ld\n",long0,long1); - + printf("(long0 != -1)\n"); if(long0 != -1) { @@ -432,7 +432,7 @@ main (void) success = failures; done (); - + printf("failures: %d\n",failures); return failures; diff --git a/test/val/compare6.c b/test/val/compare6.c index 85f16a1c4..bad411c0c 100644 --- a/test/val/compare6.c +++ b/test/val/compare6.c @@ -60,7 +60,7 @@ void c_char(void) if(char1 || !char0) failures++; - if((char0 >5 ) && (char0 < 10)) + if((char0 >5 ) && (char0 < 10)) failures++; char0 +=5; /* char0 = 6 now */ @@ -100,7 +100,7 @@ void c_int(void) if(int1 || !int0) failures++; - if((int0 >5 ) && (int0 < 10)) + if((int0 >5 ) && (int0 < 10)) failures++; int0 +=5; /* int0 = 6 now */ @@ -140,7 +140,7 @@ void c_long(void) if(long1 || !long0) failures++; - if((long0 >5 ) && (long0 < 10)) + if((long0 >5 ) && (long0 < 10)) failures++; long0 +=5; /* long0 = 6 now */ diff --git a/test/val/compare7.c b/test/val/compare7.c index 6c9636dec..d88952f62 100644 --- a/test/val/compare7.c +++ b/test/val/compare7.c @@ -129,10 +129,10 @@ void c_int_lt_lit1(unsigned char expected_result) if(int0 < 0x0101) result |= 0x10; - + if(int0 < 0x01ff) result |= 0x20; - + if(int0 < 0x0200) result |= 0x40; @@ -214,10 +214,10 @@ void c_int_lt_lit2(unsigned char expected_result) if(int0 < -0x0101) result |= 0x10; - + if(int0 < -0x0100) result |= 0x20; - + if(int0 < -0xff) result |= 0x40; diff --git a/test/val/compare8.c b/test/val/compare8.c index 0abff8c69..2621dad1d 100644 --- a/test/val/compare8.c +++ b/test/val/compare8.c @@ -59,10 +59,10 @@ void c_char_gt_lit1(unsigned char expected_result) if(char0 > 0x7e) result |= 0x10; - + if(char0 > 0x7f) result |= 0x20; - + if(result != expected_result) failures++; } @@ -132,10 +132,10 @@ void c_int_gt_lit1(unsigned char expected_result) if(int0 > 0x0101) result |= 0x10; - + if(int0 > 0x01ff) result |= 0x20; - + if(int0 > 0x0200) result |= 0x40; @@ -220,10 +220,10 @@ void c_int_gt_lit2(unsigned char expected_result) if(int0 > -0x0101) result |= 0x10; - + if(int0 > -0x0100) result |= 0x20; - + if(int0 > -0xff) result |= 0x40; diff --git a/test/val/compare9.c b/test/val/compare9.c index 4a3714199..a498c15cb 100644 --- a/test/val/compare9.c +++ b/test/val/compare9.c @@ -54,7 +54,7 @@ void c_char_lte_lit1(unsigned char expected_result) if(char0 <= 0x7f) result |= 0x10; - + if(result != expected_result) failures++; } @@ -124,10 +124,10 @@ void c_int_lte_lit1(unsigned char expected_result) if(int0 <= 0x0101) result |= 0x10; - + if(int0 <= 0x01ff) result |= 0x20; - + if(int0 <= 0x0200) result |= 0x40; @@ -209,10 +209,10 @@ void c_int_lte_lit2(unsigned char expected_result) if(int0 <= -0x0101) result |= 0x10; - + if(int0 <= -0x0100) result |= 0x20; - + if(int0 <= -0xff) result |= 0x40; diff --git a/test/val/constexpr.c b/test/val/constexpr.c index 4338717f4..c66946a19 100644 --- a/test/val/constexpr.c +++ b/test/val/constexpr.c @@ -8,7 +8,7 @@ if they are being compiled/evaluated correctly. related: pr #1424 - More compile-time constant expressions regarding object addresses -issue #1196 - Constant expressions in general +issue #1196 - Constant expressions in general */ diff --git a/test/val/cq22.c b/test/val/cq22.c index 015b7bf77..20048fa2c 100644 --- a/test/val/cq22.c +++ b/test/val/cq22.c @@ -125,7 +125,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq241.c b/test/val/cq241.c index 1f66a378c..611b5a376 100644 --- a/test/val/cq241.c +++ b/test/val/cq241.c @@ -267,7 +267,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq243.c b/test/val/cq243.c index aaec9a8ea..8aba7dfe8 100644 --- a/test/val/cq243.c +++ b/test/val/cq243.c @@ -245,7 +245,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq244.c b/test/val/cq244.c index 9f4704f36..896ddb75b 100644 --- a/test/val/cq244.c +++ b/test/val/cq244.c @@ -140,7 +140,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq25.c b/test/val/cq25.c index bfdade957..7cacebf0a 100644 --- a/test/val/cq25.c +++ b/test/val/cq25.c @@ -152,7 +152,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq26.c b/test/val/cq26.c index 239411f1c..1c88dfed6 100644 --- a/test/val/cq26.c +++ b/test/val/cq26.c @@ -197,7 +197,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq4.c b/test/val/cq4.c index a8b6b1d52..205f62c88 100644 --- a/test/val/cq4.c +++ b/test/val/cq4.c @@ -344,7 +344,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq61.c b/test/val/cq61.c index fc4d1d95f..c16b64066 100644 --- a/test/val/cq61.c +++ b/test/val/cq61.c @@ -167,7 +167,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq626.c b/test/val/cq626.c index a8b05c8f2..b7c592d58 100644 --- a/test/val/cq626.c +++ b/test/val/cq626.c @@ -318,7 +318,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq71.c b/test/val/cq71.c index f7167c728..725a40e88 100644 --- a/test/val/cq71.c +++ b/test/val/cq71.c @@ -221,7 +221,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq714.c b/test/val/cq714.c index d7a878033..c36c992aa 100644 --- a/test/val/cq714.c +++ b/test/val/cq714.c @@ -1776,7 +1776,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq714b.c b/test/val/cq714b.c index 9538281b8..19b58628c 100644 --- a/test/val/cq714b.c +++ b/test/val/cq714b.c @@ -997,7 +997,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq715.c b/test/val/cq715.c index 0fe864159..2e7e22d85 100644 --- a/test/val/cq715.c +++ b/test/val/cq715.c @@ -132,7 +132,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq72.c b/test/val/cq72.c index 421177a0b..6b8026576 100644 --- a/test/val/cq72.c +++ b/test/val/cq72.c @@ -326,7 +326,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq7813.c b/test/val/cq7813.c index 9d4308a3e..d6c9b445f 100644 --- a/test/val/cq7813.c +++ b/test/val/cq7813.c @@ -362,7 +362,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq81.c b/test/val/cq81.c index 85e1ac1d6..1e83a2e04 100644 --- a/test/val/cq81.c +++ b/test/val/cq81.c @@ -708,7 +708,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq84.c b/test/val/cq84.c index 64429e300..c1f62913e 100644 --- a/test/val/cq84.c +++ b/test/val/cq84.c @@ -249,7 +249,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq85.c b/test/val/cq85.c index 49423e7de..81a99c960 100644 --- a/test/val/cq85.c +++ b/test/val/cq85.c @@ -294,7 +294,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq86.c b/test/val/cq86.c index 9c850662a..90cfa0b7c 100644 --- a/test/val/cq86.c +++ b/test/val/cq86.c @@ -209,7 +209,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/cq88.c b/test/val/cq88.c index ef742824e..a9af7bef7 100644 --- a/test/val/cq88.c +++ b/test/val/cq88.c @@ -165,7 +165,7 @@ int main(int n,char **args) { int j; static struct defs d0, *pd0; - + d0.flgs = 1; /* These flags dictate */ d0.flgm = 1; /* the verbosity of */ d0.flgd = 1; /* the program. */ diff --git a/test/val/duffs-device.c b/test/val/duffs-device.c index effb33bb2..eb91e244f 100644 --- a/test/val/duffs-device.c +++ b/test/val/duffs-device.c @@ -1,6 +1,6 @@ /* !!DESCRIPTION!! Implementation of Duff's device (loop unrolling). - !!ORIGIN!! + !!ORIGIN!! !!LICENCE!! GPL, read COPYING.GPL */ @@ -34,7 +34,7 @@ int acmp(char* a, char* b, int count) return 0; } -void duffit (char* to, char* from, int count) +void duffit (char* to, char* from, int count) { int n = (count + 7) / 8; @@ -55,14 +55,14 @@ int main(void) { char a[ASIZE] = {1}; char b[ASIZE] = {2}; - + /* a and b should be different */ if(!acmp(a, b, ASIZE)) { failures++; } - + duffit(a, b, ASIZE); - + /* a and b should be the same */ if(acmp(a, b, ASIZE)) { failures++; diff --git a/test/val/lib_common_ctype.c b/test/val/lib_common_ctype.c index 39c92953b..281ee454e 100644 --- a/test/val/lib_common_ctype.c +++ b/test/val/lib_common_ctype.c @@ -16,7 +16,7 @@ #define NUMTESTS 257 -typedef struct +typedef struct { bool isalnum; bool isalpha; @@ -30,7 +30,7 @@ typedef struct bool isspace; bool isupper; bool isxdigit; - bool isblank; + bool isblank; } CTypeClassifications; @@ -89,7 +89,7 @@ CTypeClassifications testSet[NUMTESTS] = {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2D {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2E {false, false, true, false, false, true, false, true, true, false, false, false, false}, // 2F - + {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 30 {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 31 {true, false, true, false, true, true, false, true, false, false, false, true, false}, // 32 @@ -123,7 +123,7 @@ CTypeClassifications testSet[NUMTESTS] = {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4D {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4E {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 4F - + {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 50 {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 51 {true, true, true, false, false, true, false, true, false, false, true, false, false}, // 52 diff --git a/test/val/lib_common_memmove.c b/test/val/lib_common_memmove.c index 6b2273e78..cf81bc404 100644 --- a/test/val/lib_common_memmove.c +++ b/test/val/lib_common_memmove.c @@ -10,7 +10,7 @@ TEST { unsigned i, v; char* p; - + for (i=0; i < BufferSize; ++i) Buffer[i+1] = (i%128); @@ -35,7 +35,7 @@ TEST ASSERT_AreEqual(i%128, (unsigned)Buffer[i+2], "%u", "Unexpected value in buffer at position %u!" COMMA i+2); } - v = Buffer[BufferSize+1]; // rember value of first untouched end-byte + v = Buffer[BufferSize+1]; // rember value of first untouched end-byte // copy downwards p = memmove(Buffer+1, Buffer+2, BufferSize); diff --git a/test/val/lib_common_mulxx.c b/test/val/lib_common_mulxx.c index cf5f089e9..e5afb3f0e 100644 --- a/test/val/lib_common_mulxx.c +++ b/test/val/lib_common_mulxx.c @@ -4,7 +4,7 @@ TEST { unsigned i; - + for (i=0; i < 256; ++i) { ASSERT_AreEqual(i*20, mul20(i), "%u", "Invalid 'mul20(%u)' calculation!" COMMA i); diff --git a/test/val/lib_common_strcat.c b/test/val/lib_common_strcat.c index 1872053a4..3947c5130 100644 --- a/test/val/lib_common_strcat.c +++ b/test/val/lib_common_strcat.c @@ -11,7 +11,7 @@ TEST { unsigned i,j; char* p; - + for (i=0; i < SourceStringSize; ++i) SourceString[i] = (i%128)+1; @@ -23,13 +23,13 @@ TEST DestinationString[0] = 0; ASSERT_AreEqual(0, strlen(DestinationString), "%u", "Destination string initialization or 'strlen()' problem!"); - + /* Test concatenation to empty buffer */ strcat(DestinationString, SourceString); - + ASSERT_AreEqual(SourceStringSize, strlen(DestinationString), "%u", "Unexpected string length while string concatenation to empty buffer!"); - + /* Test concatenation to non empty buffer */ p = strcat(DestinationString, SourceString); diff --git a/test/val/lib_common_strchr.c b/test/val/lib_common_strchr.c index a48d287e5..6f2db258a 100644 --- a/test/val/lib_common_strchr.c +++ b/test/val/lib_common_strchr.c @@ -1,7 +1,7 @@ #include <string.h> #include "unittest.h" - + /* Test string. Must NOT have duplicate characters! */ static char S[] = "Helo wrd!\n"; diff --git a/test/val/lib_common_strcspn.c b/test/val/lib_common_strcspn.c index f289ddb95..1adb19671 100644 --- a/test/val/lib_common_strcspn.c +++ b/test/val/lib_common_strcspn.c @@ -11,7 +11,7 @@ static char* TestChars="1234567890"; // we like to find numbe TEST { unsigned i; - + for (i=0; i < EstimatedStringSize; ++i) EstimatedString[i] = (i%26)+'A'; // put ABCD... into the string to be estimated diff --git a/test/val/lib_common_strncat.c b/test/val/lib_common_strncat.c index a6f92ac05..54cf0e3e5 100644 --- a/test/val/lib_common_strncat.c +++ b/test/val/lib_common_strncat.c @@ -11,7 +11,7 @@ TEST { unsigned i; char* p; - + for (i=0; i < SourceStringSize; ++i) SourceString[i] = (i%128)+1; @@ -23,13 +23,13 @@ TEST DestinationString[0] = 0; ASSERT_AreEqual(0, strlen(DestinationString), "%u", "Destination string initialization or 'strlen()' problem!"); - + /* Test "unlimted" concatenation to empty buffer */ strncat(DestinationString, SourceString, 1024); - + ASSERT_AreEqual(SourceStringSize, strlen(DestinationString), "%u", "Unexpected string length while string concatenation to empty buffer!"); - + /* Test limited concatenation to non empty buffer */ p = strncat(DestinationString, SourceString, 128); diff --git a/test/val/lib_common_strrchr.c b/test/val/lib_common_strrchr.c index a72c44db9..840ec2b7c 100644 --- a/test/val/lib_common_strrchr.c +++ b/test/val/lib_common_strrchr.c @@ -1,6 +1,6 @@ #include <string.h> #include "unittest.h" - + static char TestString[] = "01234567890123456789"; // two times the same string static char Found[256]; diff --git a/test/val/lib_common_strspn.c b/test/val/lib_common_strspn.c index 96a006469..b7b4c1d85 100644 --- a/test/val/lib_common_strspn.c +++ b/test/val/lib_common_strspn.c @@ -10,7 +10,7 @@ static char* TestChars="1234567890"; // we like to find numbe TEST { unsigned i; - + for (i=0; i < EstimatedStringSize; ++i) EstimatedString[i] = (i%10)+'0'; // put 0123... into the string to be estimated diff --git a/test/val/mult1.c b/test/val/mult1.c index 831bde7ec..6d491a427 100644 --- a/test/val/mult1.c +++ b/test/val/mult1.c @@ -48,23 +48,23 @@ void m2(unsigned char uc) void m3(unsigned char uc) { volatile unsigned char vuc; - + /* uchar = uchar * lit */ /* testing literal multiply with same source and destination */ vuc = uc; - uc2 = 0; - uc1 = vuc; uc1 = uc1*1; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*2; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*3; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*4; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc2 = 0; + uc1 = vuc; uc1 = uc1*1; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*2; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*3; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*4; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*5; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*6; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*7; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*8; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*6; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*7; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*8; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*9; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*10; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*11; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*12; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*10; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*11; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*12; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*13; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*14; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*15; if( uc1 != (uc2+=TESTLIT) ) failures++; @@ -75,17 +75,17 @@ void m3(unsigned char uc) uc1 = vuc; uc1 = uc1*20; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*21; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*22; if( uc1 != (uc2+=TESTLIT) ) failures++; - uc1 = vuc; uc1 = uc1*23; if( uc1 != (uc2+=TESTLIT) ) failures++; + uc1 = vuc; uc1 = uc1*23; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*24; if( uc1 != (uc2+=TESTLIT) ) failures++; - + uc1 = vuc; uc1 = uc1*31; if( uc1 != ((31*TESTLIT) & 0xff) ) failures++; uc1 = vuc; uc1 = uc1*32; if( uc1 != ((32*TESTLIT) & 0xff) ) failures++; uc1 = vuc; uc1 = uc1*64; if( uc1 != ((64*TESTLIT) & 0xff) ) failures++; uc1 = vuc; uc1 = uc1*128;if( uc1 != ((128*TESTLIT)& 0xff) ) failures++; /* testing literal multiply with different source and destination */ - uc1 = vuc*1; if( uc1 != ((1*TESTLIT) & 0xff) ) failures++; - uc1 = vuc*2; if( uc1 != ((2*TESTLIT) & 0xff) ) failures++; + uc1 = vuc*1; if( uc1 != ((1*TESTLIT) & 0xff) ) failures++; + uc1 = vuc*2; if( uc1 != ((2*TESTLIT) & 0xff) ) failures++; uc1 = vuc*4; if( uc1 != ((4*TESTLIT) & 0xff) ) failures++; } diff --git a/test/val/or1.c b/test/val/or1.c index 9e41d7a39..b5f550331 100644 --- a/test/val/or1.c +++ b/test/val/or1.c @@ -57,23 +57,23 @@ void or_lit2uint(void) failures++; uint0 |= 1; - if(uint0 != 1) + if(uint0 != 1) failures++; uint0 |= 2; - if(uint0 != 3) + if(uint0 != 3) failures++; uint0 |= 0x100; - if(uint0 != 0x103) + if(uint0 != 0x103) failures++; uint0 |= 0x102; - if(uint0 != 0x103) + if(uint0 != 0x103) failures++; uint0 |= 0x303; - if(uint0 != 0x303) + if(uint0 != 0x303) failures++; } @@ -83,27 +83,27 @@ void or_lit2ulong(void) failures++; ulong0 |= 1; - if(ulong0 != 1) + if(ulong0 != 1) failures++; ulong0 |= 2; - if(ulong0 != 3) + if(ulong0 != 3) failures++; ulong0 |= 0x100; - if(ulong0 != 0x103) + if(ulong0 != 0x103) failures++; ulong0 |= 0x102; - if(ulong0 != 0x103) + if(ulong0 != 0x103) failures++; ulong0 |= 0x303; - if(ulong0 != 0x303) + if(ulong0 != 0x303) failures++; ulong0 |= 0x80000000; - if(ulong0 != 0x80000303) + if(ulong0 != 0x80000303) failures++; } diff --git a/test/val/postdec-16-16.c b/test/val/postdec-16-16.c index e55b5765f..bb4475959 100644 --- a/test/val/postdec-16-16.c +++ b/test/val/postdec-16-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 3; static unsigned short u16r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/postdec-16-8.c b/test/val/postdec-16-8.c index 76a64d769..d2a5bab3b 100644 --- a/test/val/postdec-16-8.c +++ b/test/val/postdec-16-8.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 3; static unsigned char u8r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/postdec-8-16.c b/test/val/postdec-8-16.c index f7716ae89..7eeda2dcc 100644 --- a/test/val/postdec-8-16.c +++ b/test/val/postdec-8-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 3; static unsigned short u16r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/postdec-8-8.c b/test/val/postdec-8-8.c index b620c46dc..38470cb14 100644 --- a/test/val/postdec-8-8.c +++ b/test/val/postdec-8-8.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 3; static unsigned char u8r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0xc, 0xd, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/postinc-16-16.c b/test/val/postinc-16-16.c index 286e0364b..4a122e51f 100644 --- a/test/val/postinc-16-16.c +++ b/test/val/postinc-16-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 1; static unsigned short u16r = 3; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/postinc-16-8.c b/test/val/postinc-16-8.c index dd0a03d6c..a604ab34c 100644 --- a/test/val/postinc-16-8.c +++ b/test/val/postinc-16-8.c @@ -1,12 +1,12 @@ #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -26,9 +26,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 1; static unsigned char u8r = 3; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = 0; @@ -40,17 +40,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -60,13 +60,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/postinc-8-16.c b/test/val/postinc-8-16.c index 57e934ced..7ac57e9da 100644 --- a/test/val/postinc-8-16.c +++ b/test/val/postinc-8-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 1; static unsigned short u16r = 3; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/postinc-8-8.c b/test/val/postinc-8-8.c index b168af8df..97c8aa9f7 100644 --- a/test/val/postinc-8-8.c +++ b/test/val/postinc-8-8.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 1; static unsigned char u8r = 3; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/pptest4.c b/test/val/pptest4.c index 827be7200..6c0891661 100644 --- a/test/val/pptest4.c +++ b/test/val/pptest4.c @@ -2,7 +2,7 @@ /* preprocessor test #4 */ #define t(x,y,z) x ## y ## z -int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,), +int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,), t(10,,), t(,11,), t(,,12), t(,,) }; int e[] = { 123, 45, 67, 89, 10, 11, 12, }; diff --git a/test/val/pptest5.c b/test/val/pptest5.c index 82f642c8e..0b9db291d 100644 --- a/test/val/pptest5.c +++ b/test/val/pptest5.c @@ -1,7 +1,7 @@ /* preprocessor test #5 */ -#define t(x,y,z) x ## y ## z +#define t(x,y,z) x ## y ## z int j[] = { t(1,2,3), t(,4,5), t(6,,7), t(8,9,), t(10,,), t(,11,), t(,,12), t(,,) }; diff --git a/test/val/pr1423.c b/test/val/pr1423.c index 3135b64a3..47f0f0610 100644 --- a/test/val/pr1423.c +++ b/test/val/pr1423.c @@ -10,7 +10,7 @@ void test1(void) } fails++; return; -} +} void test2(void) { diff --git a/test/val/predec-16-16.c b/test/val/predec-16-16.c index 7d70b1208..a8c1658e4 100644 --- a/test/val/predec-16-16.c +++ b/test/val/predec-16-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 3; static unsigned short u16r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/predec-16-8.c b/test/val/predec-16-8.c index 69a0a3e28..a0e77da89 100644 --- a/test/val/predec-16-8.c +++ b/test/val/predec-16-8.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 3; static unsigned char u8r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/predec-8-16.c b/test/val/predec-8-16.c index 750312215..353f819d2 100644 --- a/test/val/predec-8-16.c +++ b/test/val/predec-8-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 3; static unsigned short u16r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/predec-8-8.c b/test/val/predec-8-8.c index d1069b39e..e468c9426 100644 --- a/test/val/predec-8-8.c +++ b/test/val/predec-8-8.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 3; static unsigned char u8r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0xb, 0xc, 0x3, 0x4, 0x5, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/preinc-16-16.c b/test/val/preinc-16-16.c index d9c6dbf62..b600b6533 100644 --- a/test/val/preinc-16-16.c +++ b/test/val/preinc-16-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 3; static unsigned short u16r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/preinc-16-8.c b/test/val/preinc-16-8.c index 97a5dd306..a7bc5d53a 100644 --- a/test/val/preinc-16-8.c +++ b/test/val/preinc-16-8.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned short u16w = 3; static unsigned char u8r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u16w: %d\n\r", u16w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/preinc-8-16.c b/test/val/preinc-8-16.c index 3c3a9b479..2b4104df5 100644 --- a/test/val/preinc-8-16.c +++ b/test/val/preinc-8-16.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 3; static unsigned short u16r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u16r: %d\n\r", u16r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/preinc-8-8.c b/test/val/preinc-8-8.c index a700bfc48..9f6ec35a9 100644 --- a/test/val/preinc-8-8.c +++ b/test/val/preinc-8-8.c @@ -2,12 +2,12 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> -#ifdef __C64__ +#ifdef __C64__ #include <conio.h> #endif /* apparently we dont trigger the bug when not using absolute addresses? */ -#ifdef __C64__ +#ifdef __C64__ #define TARGETMEM 0x4c8 #define SOURCEMEM 0x702 #elif __SIM6502__ @@ -27,9 +27,9 @@ static unsigned char mem[0x10]; static unsigned char u8w = 3; static unsigned char u8r = 5; -static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; -static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; -static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; +static unsigned char target[8] = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7 }; +static unsigned char source[8] = { 0x8, 0x9, 0xa, 0xb, 0xc, 0xd, 0xe, 0xf }; +static unsigned char expect[8] = { 0x0, 0x1, 0x2, 0x3, 0xe, 0xf, 0x6, 0x7 }; static unsigned char i; static unsigned char err = EXIT_SUCCESS; @@ -41,17 +41,17 @@ void test1(void) void dotest(void) { - + memcpy(TARGETMEM, target, 8); memcpy(SOURCEMEM, source, 8); - + test1(); memcpy(target, TARGETMEM, 8); memcpy(source, SOURCEMEM, 8); -#ifdef __C64__ +#ifdef __C64__ clrscr(); -#endif +#endif printf("source:"); for(i = 0; i < 8; ++i) { printf("%0x ", source[i]); @@ -61,13 +61,13 @@ void dotest(void) printf("%0x ", target[i]); } printf("\n\r"); - + printf("u8w: %d\n\r", u8w); printf("u8r: %d\n\r", u8r); - + } - -int main(void) + +int main(void) { dotest(); dotest(); diff --git a/test/val/static-fwd-decl.c b/test/val/static-fwd-decl.c index 420640d97..a133e930f 100644 --- a/test/val/static-fwd-decl.c +++ b/test/val/static-fwd-decl.c @@ -15,7 +15,7 @@ typedef struct _DIRMENU { const char *name; struct _DIRMENU *dest; -} DIRMENU; +} DIRMENU; static DIRMENU rmenu; diff --git a/test/val/strnicmp-test.c b/test/val/strnicmp-test.c index 6376a39bb..e6e5a3b04 100644 --- a/test/val/strnicmp-test.c +++ b/test/val/strnicmp-test.c @@ -71,9 +71,9 @@ int main(void) ret = do_test("", "", 5); printresult(ret); - + printf("fails: %d\n", fails); - + #if defined(__CC65__) && !defined(__SIM6502__) && !defined(__SIM65C02__) cgetc(); #endif diff --git a/test/val/switch2.c b/test/val/switch2.c index 65c24eeda..eff06ce12 100644 --- a/test/val/switch2.c +++ b/test/val/switch2.c @@ -1,6 +1,6 @@ /* !!DESCRIPTION!! Testing empty bodied switch statements. - !!ORIGIN!! + !!ORIGIN!! !!LICENCE!! GPL, read COPYING.GPL */ diff --git a/test/val/time-test.c b/test/val/time-test.c index 304238fa0..db086410d 100644 --- a/test/val/time-test.c +++ b/test/val/time-test.c @@ -46,7 +46,7 @@ int main (void) sprintf (result, "%08lX - %s\n", t, buf); printf (result); if (strcmp(result, EXPECTSTR) != 0) { fails++; } - + printf("fails: %d\n", fails); return fails; diff --git a/test/val/xor.c b/test/val/xor.c index 2a346023e..98bd5faf1 100644 --- a/test/val/xor.c +++ b/test/val/xor.c @@ -31,12 +31,12 @@ void xor_chars_0_1(void) void xor_if(void) { - if(achar0 ^ achar1) + if(achar0 ^ achar1) failures++; achar0 ^= 0xff; - if( !(achar0 ^ achar1) ) + if( !(achar0 ^ achar1) ) failures++; } From eec62257c7d3183941f27576611fdf5df56ef847 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:08:04 +0200 Subject: [PATCH 1539/2710] remove dangling spaces --- util/atari/ataricvt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/atari/ataricvt.c b/util/atari/ataricvt.c index 104d4f6de..23ad5a24a 100644 --- a/util/atari/ataricvt.c +++ b/util/atari/ataricvt.c @@ -8,7 +8,7 @@ int main (void) putchar ('\n'); } else if (C == 0x7F) { putchar ('\t'); - } else { + } else { putchar (C); } } From 3834232c29ed1eb9ce0540d3cbf973fb726bb8fb Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 16:08:21 +0200 Subject: [PATCH 1540/2710] also check spaces at end of lines --- .github/checks/Makefile | 8 +++----- Contributing.md | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/checks/Makefile b/.github/checks/Makefile index 827606d01..662477790 100644 --- a/.github/checks/Makefile +++ b/.github/checks/Makefile @@ -1,15 +1,13 @@ .PHONY: tabs -check: tabs lastline +check: tabs lastline spaces tabs: tabs.sh @./tabs.sh - + lastline: lastline.sh @./lastline.sh - -# checks that will currently fail (on a lot of files), so they are not included -# in the general "check" action + spaces: spaces.sh @./spaces.sh diff --git a/Contributing.md b/Contributing.md index c8681c7ee..6258ce523 100644 --- a/Contributing.md +++ b/Contributing.md @@ -20,7 +20,7 @@ This is an ongoing controversial topic - everyone knows that. However, the follo * No extra spaces at the end of lines. * All text files must end with new-line characters. Don't leave the last line "dangling". -The (bash) scipts used to check the above rules can be found in ```.github/check``` +The (bash) scipts used to check the above rules can be found in ```.github/check```. You can also run all checks using ```make check```. ### misc From 37ebe3781bc7b11ad27ae59c7c94d91e3fc7332e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Apr 2022 17:12:52 +0200 Subject: [PATCH 1541/2710] define CHECK_PATH rather than leaving it open --- .github/checks/lastline.sh | 2 ++ .github/checks/spaces.sh | 2 ++ .github/checks/tabs.sh | 2 ++ 3 files changed, 6 insertions(+) diff --git a/.github/checks/lastline.sh b/.github/checks/lastline.sh index d455481d1..464f1774a 100755 --- a/.github/checks/lastline.sh +++ b/.github/checks/lastline.sh @@ -1,6 +1,8 @@ #! /bin/bash OLDCWD=`pwd` SCRIPT_PATH=`dirname $0` +CHECK_PATH=. + cd $SCRIPT_PATH/../../ nl=' diff --git a/.github/checks/spaces.sh b/.github/checks/spaces.sh index 309ba9ac1..71bdd877f 100755 --- a/.github/checks/spaces.sh +++ b/.github/checks/spaces.sh @@ -1,6 +1,8 @@ #! /bin/bash OLDCWD=`pwd` SCRIPT_PATH=`dirname $0` +CHECK_PATH=. + cd $SCRIPT_PATH/../../ FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l ' $' | grep -v "libwrk/" | grep -v "testwrk/"` diff --git a/.github/checks/tabs.sh b/.github/checks/tabs.sh index ad10dfe14..db2b61eac 100755 --- a/.github/checks/tabs.sh +++ b/.github/checks/tabs.sh @@ -1,6 +1,8 @@ #! /bin/bash OLDCWD=`pwd` SCRIPT_PATH=`dirname $0` +CHECK_PATH=. + cd $SCRIPT_PATH/../../ FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l $'\t' | grep -v "libwrk/" | grep -v "testwrk/"` From f8b05deef40450bb2840d30b6c02f746a71cb935 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 17 Apr 2022 14:45:33 -0400 Subject: [PATCH 1542/2710] Made all of the Makefile's rules be phony. --- .github/checks/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/checks/Makefile b/.github/checks/Makefile index 662477790..dc42d14ca 100644 --- a/.github/checks/Makefile +++ b/.github/checks/Makefile @@ -1,5 +1,5 @@ -.PHONY: tabs +.PHONY: check tabs lastline spaces check: tabs lastline spaces From 17b9f9c2a81658bfe9a6d7f4bcaf0aadc47c4b94 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 17 Apr 2022 14:47:19 -0400 Subject: [PATCH 1543/2710] Fixed and tightenned the find commands' expressions. --- .github/checks/lastline.sh | 2 +- .github/checks/spaces.sh | 2 +- .github/checks/tabs.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/checks/lastline.sh b/.github/checks/lastline.sh index 464f1774a..797b6acfd 100755 --- a/.github/checks/lastline.sh +++ b/.github/checks/lastline.sh @@ -8,7 +8,7 @@ cd $SCRIPT_PATH/../../ nl=' ' nl=$'\n' -FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | while read f; do +FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | while read f; do t=$(tail -c2 $f; printf x); r1="${nl}$"; [[ ${t%x} =~ $r1 ]] || echo "$f" done` diff --git a/.github/checks/spaces.sh b/.github/checks/spaces.sh index 71bdd877f..02a03ff58 100755 --- a/.github/checks/spaces.sh +++ b/.github/checks/spaces.sh @@ -5,7 +5,7 @@ CHECK_PATH=. cd $SCRIPT_PATH/../../ -FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l ' $' | grep -v "libwrk/" | grep -v "testwrk/"` +FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l ' $' | grep -v "libwrk/" | grep -v "testwrk/"` cd $OLDCWD diff --git a/.github/checks/tabs.sh b/.github/checks/tabs.sh index db2b61eac..3823eb370 100755 --- a/.github/checks/tabs.sh +++ b/.github/checks/tabs.sh @@ -5,7 +5,7 @@ CHECK_PATH=. cd $SCRIPT_PATH/../../ -FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.c -o -name \*.s -o -name \*.h -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l $'\t' | grep -v "libwrk/" | grep -v "testwrk/"` +FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l $'\t' | grep -v "libwrk/" | grep -v "testwrk/"` cd $OLDCWD From 1ea27c35d0be40df2306f3964772f84df4039f69 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 17 Apr 2022 15:08:42 -0400 Subject: [PATCH 1544/2710] Moved a constant expression out of a loop. --- .github/checks/lastline.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/checks/lastline.sh b/.github/checks/lastline.sh index 797b6acfd..406814ff4 100755 --- a/.github/checks/lastline.sh +++ b/.github/checks/lastline.sh @@ -8,8 +8,9 @@ cd $SCRIPT_PATH/../../ nl=' ' nl=$'\n' +r1="${nl}$" FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | while read f; do - t=$(tail -c2 $f; printf x); r1="${nl}$"; + t=$(tail -c2 $f; printf x) [[ ${t%x} =~ $r1 ]] || echo "$f" done` From fb97ce4bfdb413f989aa8af1cad597247f8629ba Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 17 Apr 2022 16:10:28 -0400 Subject: [PATCH 1545/2710] Remove work directory paths _before_ checking for style errors. --- .github/checks/spaces.sh | 2 +- .github/checks/tabs.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/checks/spaces.sh b/.github/checks/spaces.sh index 02a03ff58..e133d1e47 100755 --- a/.github/checks/spaces.sh +++ b/.github/checks/spaces.sh @@ -5,7 +5,7 @@ CHECK_PATH=. cd $SCRIPT_PATH/../../ -FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l ' $' | grep -v "libwrk/" | grep -v "testwrk/"` +FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l ' $'` cd $OLDCWD diff --git a/.github/checks/tabs.sh b/.github/checks/tabs.sh index 3823eb370..87350efd9 100755 --- a/.github/checks/tabs.sh +++ b/.github/checks/tabs.sh @@ -5,7 +5,7 @@ CHECK_PATH=. cd $SCRIPT_PATH/../../ -FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | xargs grep -l $'\t' | grep -v "libwrk/" | grep -v "testwrk/"` +FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l $'\t'` cd $OLDCWD From be5298925c2c42dd271c348b8cf6262e1ea30365 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sun, 17 Apr 2022 19:06:35 -0400 Subject: [PATCH 1546/2710] Oops, forgot to check macros. --- .github/checks/lastline.sh | 2 +- .github/checks/spaces.sh | 2 +- .github/checks/tabs.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/checks/lastline.sh b/.github/checks/lastline.sh index 406814ff4..851a2cfc4 100755 --- a/.github/checks/lastline.sh +++ b/.github/checks/lastline.sh @@ -9,7 +9,7 @@ nl=' ' nl=$'\n' r1="${nl}$" -FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | while read f; do +FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | while read f; do t=$(tail -c2 $f; printf x) [[ ${t%x} =~ $r1 ]] || echo "$f" done` diff --git a/.github/checks/spaces.sh b/.github/checks/spaces.sh index e133d1e47..d695beaba 100755 --- a/.github/checks/spaces.sh +++ b/.github/checks/spaces.sh @@ -5,7 +5,7 @@ CHECK_PATH=. cd $SCRIPT_PATH/../../ -FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l ' $'` +FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l ' $'` cd $OLDCWD diff --git a/.github/checks/tabs.sh b/.github/checks/tabs.sh index 87350efd9..16f0280ae 100755 --- a/.github/checks/tabs.sh +++ b/.github/checks/tabs.sh @@ -5,7 +5,7 @@ CHECK_PATH=. cd $SCRIPT_PATH/../../ -FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l $'\t'` +FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l $'\t'` cd $OLDCWD From ff1eca570157bc5e0288cffbd70ce2bd89eafc46 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 1 Dec 2021 09:45:17 +0800 Subject: [PATCH 1547/2710] Added and used new utility type functions for bit-fields. Fixed GetUnderlyingTypeCode() for bit-fields with widths > 16. --- src/cc65/assignment.c | 34 ++++------------------ src/cc65/datatype.c | 66 ++++++++++++++++++++++++++++++++++++++++--- src/cc65/datatype.h | 6 ++++ src/cc65/expr.c | 4 +-- src/cc65/loadexpr.c | 36 ++++++++++------------- src/cc65/loadexpr.h | 5 +++- 6 files changed, 95 insertions(+), 56 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 05a6d9a96..e6d1e4526 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -156,19 +156,8 @@ void DoIncDecBitField (ExprDesc* Expr, long Val, unsigned KeepResult) unsigned ChunkFlags; const Type* ChunkType; - /* If the bit-field fits within one byte, do the following operations - ** with bytes. - */ - if ((Expr->Type->A.B.Width - 1U) / CHAR_BITS == - (Expr->Type->A.B.Offs + Expr->Type->A.B.Width - 1U) / CHAR_BITS) { - ChunkType = GetUnderlyingType (Expr->Type); - } else { - /* We use the declarartion integer type as the chunk type. - ** Note: A bit-field will not occupy bits located in bytes more than - ** that of its declaration type in cc65. So this is OK. - */ - ChunkType = Expr->Type + 1; - } + /* Determine the type to operate on the whole byte chunk containing the bit-field */ + ChunkType = GetBitFieldChunkType (Expr->Type); /* Determine code generator flags */ Flags = TypeOf (Expr->Type) | CF_FORCECHAR; @@ -254,19 +243,8 @@ static void OpAssignBitField (const GenDesc* Gen, ExprDesc* Expr, const char* Op ED_Init (&Expr2); Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; - /* If the bit-field fits within one byte, do the following operations - ** with bytes. - */ - if ((Expr->Type->A.B.Width - 1U) / CHAR_BITS == - (Expr->Type->A.B.Offs + Expr->Type->A.B.Width - 1U) / CHAR_BITS) { - ChunkType = GetUnderlyingType (Expr->Type); - } else { - /* We use the declarartion integer type as the chunk type. - ** Note: A bit-field will not occupy bits located in bytes more than - ** that of its declaration type in cc65. So this is OK. - */ - ChunkType = Expr->Type + 1; - } + /* Determine the type to operate on the whole byte chunk containing the bit-field */ + ChunkType = GetBitFieldChunkType (Expr->Type); /* Determine code generator flags */ Flags = TypeOf (Expr->Type) | CF_FORCECHAR; @@ -620,8 +598,8 @@ void OpAssign (const GenDesc* Gen, ExprDesc* Expr, const char* Op) if (IsClassStruct (ltype)) { /* Copy the struct or union by value */ CopyStruct (Expr, &Expr2); - } else if (IsTypeBitField (ltype)) { - /* Special care is needed for bit-field 'op=' */ + } else if (IsTypeFragBitField (ltype)) { + /* Special care is needed for bit-fields if they don't fit in full bytes */ OpAssignBitField (Gen, Expr, Op); } else { /* Normal straight 'op=' */ diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index cc313bd21..bb7c40476 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -551,6 +551,24 @@ unsigned long GetIntegerTypeMax (const Type* Type) +static unsigned GetBitFieldMinimalTypeSize (unsigned BitWidth) +/* Return the size of the smallest integer type that may have BitWidth bits */ +{ + /* Since all integer types supported in cc65 for bit-fields have sizes that + ** are powers of 2, we can just use this bit-twiddling trick. + */ + unsigned V = (int)(BitWidth - 1U) / (int)CHAR_BITS; + V |= V >> 1; + V |= V >> 2; + V |= V >> 4; + V |= V >> 8; + V |= V >> 16; + + /* Return the result size */ + return V + 1U; +} + + static unsigned TypeOfBySize (unsigned Size) /* Get the code generator replacement type of the object by its size */ { @@ -591,8 +609,7 @@ const Type* GetUnderlyingType (const Type* Type) ** bit-field, instead of the type used in the declaration, the truly ** underlying of the bit-field. */ - unsigned Size = (int)(Type->A.B.Width - 1) / (int)CHAR_BITS + 1; - switch (Size) { + switch (GetBitFieldMinimalTypeSize (Type->A.B.Width)) { case SIZEOF_CHAR: Type = IsSignSigned (Type) ? type_schar : type_uchar; break; case SIZEOF_INT: Type = IsSignSigned (Type) ? type_int : type_uint; break; case SIZEOF_LONG: Type = IsSignSigned (Type) ? type_long : type_ulong; break; @@ -646,8 +663,7 @@ TypeCode GetUnderlyingTypeCode (const Type* Type) ** bit-field, instead of the type used in the declaration, the truly ** underlying of the bit-field. */ - unsigned Size = (int)(Type->A.B.Width - 1) / (int)CHAR_BITS + 1; - switch (Size) { + switch (GetBitFieldMinimalTypeSize (Type->A.B.Width)) { case SIZEOF_CHAR: Underlying = T_CHAR; break; case SIZEOF_INT: Underlying = T_INT; break; case SIZEOF_LONG: Underlying = T_LONG; break; @@ -663,6 +679,39 @@ TypeCode GetUnderlyingTypeCode (const Type* Type) +const Type* GetBitFieldChunkType (const Type* Type) +/* Get the type needed to operate on the byte chunk containing the bit-field */ +{ + unsigned ChunkSize; + if ((Type->A.B.Width - 1U) / CHAR_BITS == + (Type->A.B.Offs + Type->A.B.Width - 1U) / CHAR_BITS) { + /* T bit-field fits within its underlying type */ + return GetUnderlyingType (Type); + } + + ChunkSize = GetBitFieldMinimalTypeSize (Type->A.B.Offs + Type->A.B.Width); + if (ChunkSize < SizeOf (Type + 1)) { + /* The end of the bit-field is offset by some bits so that it requires + ** more bytes to be accessed as a whole than its underlying type does. + ** Note: In cc65 the bit offset is always less than CHAR_BITS. + */ + switch (ChunkSize) { + case SIZEOF_CHAR: return IsSignSigned (Type) ? type_schar : type_uchar; + case SIZEOF_INT: return IsSignSigned (Type) ? type_int : type_uint; + case SIZEOF_LONG: return IsSignSigned (Type) ? type_long : type_ulong; + default: return IsSignSigned (Type) ? type_int : type_uint; + } + } + + /* We can always use the declarartion integer type as the chunk type. + ** Note: A bit-field will not occupy bits located in bytes more than that + ** of its declaration type in cc65. So this is OK. + */ + return Type + 1; +} + + + unsigned SizeOf (const Type* T) /* Compute size of object represented by type array. */ { @@ -1127,6 +1176,15 @@ Type* NewBitFieldType (const Type* T, unsigned BitOffs, unsigned BitWidth) +int IsTypeFragBitField (const Type* T) +/* Return true if this is a bit-field that shares byte space with other fields */ +{ + return IsTypeBitField (T) && + (T->A.B.Offs != 0 || T->A.B.Width != CHAR_BITS * SizeOf (T)); +} + + + int IsClassObject (const Type* T) /* Return true if this is a fully described object type */ { diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index e36d7c82e..c60023944 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -313,6 +313,9 @@ TypeCode GetUnderlyingTypeCode (const Type* Type); ** Return TCode if it is not scalar. */ +const Type* GetBitFieldChunkType (const Type* Type); +/* Get the type needed to operate on the byte chunk containing the bit-field */ + unsigned SizeOf (const Type* T); /* Compute size of object represented by type array. */ @@ -556,6 +559,9 @@ INLINE int IsTypeBitField (const Type* T) # define IsTypeBitField(T) (IsTypeSignedBitField (T) || IsTypeUnsignedBitField (T)) #endif +int IsTypeFragBitField (const Type* T); +/* Return true if this is a bit-field that shares byte space with other fields */ + #if defined(HAVE_INLINE) INLINE int IsTypeStruct (const Type* T) /* Return true if this is a struct type */ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 7343702ea..3b3754665 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -398,7 +398,7 @@ static void DoInc (ExprDesc* Expr, unsigned KeepResult) Val = IsTypePtr (Expr->Type) ? CheckedSizeOf (Expr->Type + 1) : 1; /* Special treatment is needed for bit-fields */ - if (IsTypeBitField (Expr->Type)) { + if (IsTypeFragBitField (Expr->Type)) { DoIncDecBitField (Expr, Val, KeepResult); return; } @@ -485,7 +485,7 @@ static void DoDec (ExprDesc* Expr, unsigned KeepResult) Val = IsTypePtr (Expr->Type) ? CheckedSizeOf (Expr->Type + 1) : 1; /* Special treatment is needed for bit-fields */ - if (IsTypeBitField (Expr->Type)) { + if (IsTypeFragBitField (Expr->Type)) { DoIncDecBitField (Expr, -Val, KeepResult); return; } diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index a742087b7..4b7f8e279 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -110,6 +110,8 @@ static void LoadAddress (unsigned Flags, ExprDesc* Expr) void LoadExpr (unsigned Flags, struct ExprDesc* Expr) /* Load an expression into the primary register if it is not already there. +** If Flags contains any CF_TYPEMASK bits, it then overrides the codegen type +** info that would be otherwise taken from the expression type. ** Note: This function can't modify the content in Expr since there are many ** instances of the "GetCodePos + LoadExpr (maybe indirectly) + RemoveCode" ** code pattern here and there which assumes that Expr should be unchanged, @@ -125,32 +127,24 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) int AdjustBitField = 0; unsigned BitFieldFullWidthFlags = 0; if ((Flags & CF_TYPEMASK) == 0) { - if (IsTypeBitField (Expr->Type)) { - unsigned EndBit = Expr->Type->A.B.Offs + Expr->Type->A.B.Width; - AdjustBitField = Expr->Type->A.B.Offs != 0 || (EndBit != CHAR_BITS && EndBit != INT_BITS); - - /* TODO: This probably needs to be guarded by AdjustBitField when long bit-fields are - ** supported. - */ - Flags |= (EndBit <= CHAR_BITS) ? CF_CHAR : CF_INT; - if (IsSignUnsigned (Expr->Type)) { - Flags |= CF_UNSIGNED; - } + if (IsTypeFragBitField (Expr->Type)) { + /* We need to adjust the bits in this case. */ + AdjustBitField = 1; /* Flags we need operate on the whole bit-field, without CF_FORCECHAR. */ - BitFieldFullWidthFlags = Flags; + BitFieldFullWidthFlags = Flags | TypeOf (Expr->Type); + + /* Flags we need operate on the whole chunk containing the bit-field. */ + Flags |= TypeOf (GetBitFieldChunkType (Expr->Type)); /* If we're adjusting, then only load a char (not an int) and do only char ops; - ** We will clear the high byte in the adjustment. CF_FORCECHAR does nothing if the - ** type is not CF_CHAR. + ** We will clear the high byte in the adjustment. CF_FORCECHAR does nothing if + ** the type is not CF_CHAR; + ** If adjusting, then we're sign extending manually, so do everything unsigned + ** to make shifts faster. */ - if (AdjustBitField) { - /* If adjusting, then we're sign extending manually, so do everything unsigned - ** to make shifts faster. - */ - Flags |= CF_UNSIGNED | CF_FORCECHAR; - BitFieldFullWidthFlags |= CF_UNSIGNED; - } + Flags |= CF_UNSIGNED | CF_FORCECHAR; + BitFieldFullWidthFlags |= CF_UNSIGNED; } else { /* If Expr is an incomplete ESY type, bail out */ if (IsIncompleteESUType (Expr->Type)) { diff --git a/src/cc65/loadexpr.h b/src/cc65/loadexpr.h index c9e70e1f6..90862e33a 100644 --- a/src/cc65/loadexpr.h +++ b/src/cc65/loadexpr.h @@ -55,7 +55,10 @@ struct ExprDesc; void LoadExpr (unsigned Flags, struct ExprDesc* Expr); -/* Load an expression into the primary register if it is not already there. */ +/* Load an expression into the primary register if it is not already there. +** If Flags contains any CF_TYPEMASK bits, it then overrides the codegen type +** info that would be otherwise taken from the expression type. +*/ From 087b7bd8c81cc86afc3add1c38305f1b78f66874 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 5 Dec 2021 12:21:01 +0800 Subject: [PATCH 1548/2710] Optimized g_testbitfield() and g_extractbitfield() with enhanced support for long bit-fields. --- src/cc65/codegen.c | 295 ++++++++++++++++++++++++++++++++++----------- src/cc65/codegen.h | 4 +- 2 files changed, 229 insertions(+), 70 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 5bfc6696b..c79863d0e 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -43,6 +43,7 @@ #include "addrsize.h" #include "check.h" #include "cpu.h" +#include "shift.h" #include "strbuf.h" #include "xmalloc.h" #include "xsprintf.h" @@ -4560,110 +4561,268 @@ void g_initstatic (unsigned InitLabel, unsigned VarLabel, unsigned Size) void g_testbitfield (unsigned Flags, unsigned BitOffs, unsigned BitWidth) -/* Test bit-field in ax. */ +/* Test bit-field in primary. */ { - unsigned EndBit = BitOffs + BitWidth; + /* Since the end is inclusive and cannot be negative here, we subtract 1 from the sum */ + unsigned MSBit = BitOffs + BitWidth - 1U; + unsigned Bytes = MSBit / CHAR_BITS + 1U - BitOffs / CHAR_BITS; + unsigned HeadMask = (0xFF << (BitOffs % CHAR_BITS)) & 0xFF; + unsigned TailMask = ((1U << (MSBit % CHAR_BITS + 1U)) - 1U) & 0xFF; + unsigned UntestedBytes = ((1U << Bytes) - 1U) << (BitOffs / CHAR_BITS); + + /* We don't use these flags for now. Could CF_NOKEEP be potentially interesting? */ + Flags &= ~CF_STYPEMASK; /* If we need to do a test, then we avoid shifting (ASR only shifts one bit at a time, - ** so is slow) and just AND with the appropriate mask, then test the result of that. + ** so is slow) and just AND the head and tail bytes with the appropriate mask, then + ** OR the results with the rest bytes. */ - - /* Avoid overly large shift on host platform. */ - if (EndBit == sizeof (unsigned long) * CHAR_BIT) { - g_and (Flags | CF_CONST, (~0UL << BitOffs)); - } else { - g_and (Flags | CF_CONST, ((1UL << EndBit) - 1) & (~0UL << BitOffs)); + if (Bytes == 1) { + HeadMask = TailMask = HeadMask & TailMask; } - /* TODO: When long bit-fields are supported, an optimization to test only 3 bytes when - ** EndBit <= 24 is possible. - */ - g_test (Flags | CF_CONST); + /* Get the head byte */ + switch (BitOffs / CHAR_BITS) { + case 0: + if (HeadMask == 0xFF && Bytes == 1) { + AddCodeLine ("tax"); + UntestedBytes &= ~0x1; + } + break; + case 1: + if (HeadMask != 0xFF || TailMask == 0xFF) { + AddCodeLine ("txa"); + UntestedBytes &= ~0x2; + } + break; + case 2: + if (HeadMask != 0xFF || TailMask == 0xFF) { + AddCodeLine ("lda sreg"); + UntestedBytes &= ~0x4; + } + break; + case 3: + /* In this case we'd have HeadMask == TailMask and only 1 byte, but anyways... */ + if (HeadMask != 0xFF || TailMask == 0xFF) { + AddCodeLine ("lda sreg+1"); + UntestedBytes &= ~0x8; + } + break; + default: + break; + } + + /* Keep in mind that the head is NOT always "Byte 0" */ + if (HeadMask != 0xFF) { + AddCodeLine ("and #$%02X", HeadMask); + /* Abuse the "Byte 0" flag so that this head content will be saved by the routine */ + UntestedBytes |= 0x1; + } + + /* If there is only 1 byte to test, we have done with it */ + if (Bytes == 1) { + return; + } + + /* Handle the tail byte */ + if (TailMask != 0xFF) { + /* If we have to do any more masking operation, register A will be used for that, + ** and its current content in it must be saved. + */ + if (UntestedBytes & 0x1) { + AddCodeLine ("sta tmp1"); + } + + /* Test the tail byte */ + switch (MSBit / CHAR_BITS) { + case 1: + AddCodeLine ("txa"); + UntestedBytes &= ~0x2; + break; + case 2: + AddCodeLine ("lda sreg"); + UntestedBytes &= ~0x4; + break; + case 3: + AddCodeLine ("lda sreg+1"); + UntestedBytes &= ~0x8; + break; + default: + break; + } + AddCodeLine ("and #$%02X", TailMask); + + if (UntestedBytes & 0x1) { + AddCodeLine ("ora tmp1"); + } + } + + /* OR the rest bytes together, which could never need masking */ + if (UntestedBytes & 0x2) { + AddCodeLine ("stx tmp1"); + AddCodeLine ("ora tmp1"); + } + if (UntestedBytes & 0x4) { + AddCodeLine ("ora sreg"); + } + if (UntestedBytes & 0x8) { + AddCodeLine ("ora sreg+1"); + } } void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, int IsSigned, unsigned BitOffs, unsigned BitWidth) -/* Extract bits from bit-field in ax. */ +/* Extract bits from bit-field in primary. */ { unsigned EndBit = BitOffs + BitWidth; + unsigned long ZeroExtendMask = 0; /* Zero if we don't need to zero-extend. */ /* Shift right by the bit offset; no code is emitted if BitOffs is zero */ g_asr (Flags | CF_CONST, BitOffs); - /* Since we have now shifted down, we could do char ops when the width fits in a char, but we - ** also need to clear (or set) the high byte since we've been using CF_FORCECHAR up to now. - */ - unsigned Mask = (1U << BitWidth) - 1; - /* To zero-extend, we will and by the width if the field doesn't end on a char or ** int boundary. If it does end on a boundary, then zeros will have already been shifted in, ** but we need to clear the high byte for char. g_and emits no code if the mask is all ones. ** This is here so the signed and unsigned branches can use it. */ - unsigned ZeroExtendMask = 0; /* Zero if we don't need to zero-extend. */ if (EndBit == CHAR_BITS) { /* We need to clear the high byte, since CF_FORCECHAR was set. */ ZeroExtendMask = 0xFF; - } else if (EndBit != INT_BITS) { - ZeroExtendMask = (1U << BitWidth) - 1; + } else if (EndBit != INT_BITS && EndBit != LONG_BITS) { + ZeroExtendMask = shl_l (1UL, BitWidth) - 1UL; } /* Handle signed bit-fields. */ if (IsSigned) { - /* Save .A because the sign-bit test will destroy it. */ - AddCodeLine ("tay"); - - /* Check sign bit */ unsigned SignBitPos = BitWidth - 1U; unsigned SignBitByte = SignBitPos / CHAR_BITS; unsigned SignBitPosInByte = SignBitPos % CHAR_BITS; - unsigned SignBitMask = 1U << SignBitPosInByte; - /* Move the correct byte to .A. This can be only .X for now, - ** but more cases will be needed to support long. - */ - switch (SignBitByte) { - case 0: - break; - case 1: - AddCodeLine ("txa"); - break; - default: - FAIL ("Invalid Byte for sign bit"); - } - - /* Test the sign bit */ - AddCodeLine ("and #$%02X", SignBitMask); - unsigned ZeroExtendLabel = GetLocalLabel (); - AddCodeLine ("beq %s", LocalLabelName (ZeroExtendLabel)); - - /* Get back .A and sign-extend if required; operating on the full result needs - ** to sign-extend into the high byte, too. - */ - AddCodeLine ("tya"); - g_or (FullWidthFlags | CF_CONST, ~Mask); - - /* We can generate a branch, instead of a jump, here because we know - ** that only a few instructions will be put between here and where - ** DoneLabel will be defined. - */ - unsigned DoneLabel = GetLocalLabel (); - g_branch (DoneLabel); - - /* Get back .A, then zero-extend. We need to duplicate the TYA, rather than move it before - ** the branch to share with the other label, because TYA changes some condition codes. - */ - g_defcodelabel (ZeroExtendLabel); - AddCodeLine ("tya"); - - /* Zero the upper bits, the same as the unsigned path. */ if (ZeroExtendMask != 0) { - g_and (FullWidthFlags | CF_CONST, ZeroExtendMask); - } + /* The universal trick is: + ** x = bits & bit_mask + ** m = 1 << (bit_width - 1) + ** r = (x ^ m) - m + ** which works for long as well. + */ - g_defcodelabel (DoneLabel); + if (SignBitByte + 1U == sizeofarg (FullWidthFlags)) { + /* We can just sign-extend on the high byte if it is the only affected one */ + unsigned char SignBitMask = (1UL << SignBitPosInByte) & 0xFF; + unsigned char Mask = ((2UL << (SignBitPos % CHAR_BITS)) - 1UL) & 0xFF; + + /* Move the correct byte to .A */ + switch (SignBitByte) { + case 0: + break; + case 1: + AddCodeLine ("tay"); + AddCodeLine ("txa"); + break; + case 3: + AddCodeLine ("tay"); + AddCodeLine ("lda sreg+1"); + break; + default: + FAIL ("Invalid Byte for sign bit"); + } + + /* Use .A to do the ops on the correct byte */ + AddCodeLine ("and #$%02X", Mask); + AddCodeLine ("eor #$%02X", SignBitMask); + AddCodeLine ("sec"); + AddCodeLine ("sbc #$%02X", SignBitMask); + + /* Move the correct byte from .A */ + switch (SignBitByte) { + case 0: + break; + case 1: + AddCodeLine ("tax"); + AddCodeLine ("tya"); + break; + case 3: + AddCodeLine ("sta sreg+1"); + AddCodeLine ("tya"); + break; + default: + FAIL ("Invalid Byte for sign bit"); + } + } else { + unsigned long SignBitMask = 1UL << SignBitPos; + unsigned long Mask = (2UL << SignBitPos) - 1UL; + g_and (FullWidthFlags | CF_CONST, Mask); + g_xor (FullWidthFlags | CF_CONST, SignBitMask); + g_dec (FullWidthFlags | CF_CONST, SignBitMask); + } + } else { + unsigned char SignBitMask = (1UL << SignBitPosInByte) & 0xFF; + unsigned ZeroExtendLabel = GetLocalLabel (); + + /* Save .A because the sign-bit test will destroy it. */ + AddCodeLine ("tay"); + + /* Move the correct byte to .A */ + switch (SignBitByte) { + case 0: + break; + case 1: + AddCodeLine ("txa"); + break; + case 3: + AddCodeLine ("lda sreg+1"); + break; + default: + FAIL ("Invalid Byte for sign bit"); + } + + /* Test the sign bit */ + AddCodeLine ("and #$%02X", SignBitMask); + AddCodeLine ("beq %s", LocalLabelName (ZeroExtendLabel)); + + if (SignBitByte + 1U == sizeofarg (FullWidthFlags)) { + /* We can just sign-extend on the high byte if it is the only affected one */ + unsigned char Mask = ~((2UL << (SignBitPos % CHAR_BITS)) - 1UL) & 0xFF; + + /* Use .A to do the ops on the correct byte */ + switch (SignBitByte) { + case 0: + AddCodeLine ("tya"); + AddCodeLine ("ora #$%02X", Mask); + /* We could jump over the following tya instead, but that wouldn't be faster + ** than taking this extra tay and then the tya. + */ + AddCodeLine ("tay"); + break; + case 1: + AddCodeLine ("txa"); + AddCodeLine ("ora #$%02X", Mask); + AddCodeLine ("tax"); + break; + case 3: + AddCodeLine ("lda sreg+1"); + AddCodeLine ("ora #$%02X", Mask); + AddCodeLine ("sta sreg+1"); + break; + default: + FAIL ("Invalid Byte for sign bit"); + } + } else { + /* Since we are going to get back .A later anyways, we may just do the op on the + ** higher bytes with whatever content currently in it. + */ + unsigned long Mask = ~((2UL << SignBitPos) - 1UL); + g_or (FullWidthFlags | CF_CONST, Mask); + } + + /* Get back .A. We need to duplicate the TYA, rather than move it before + ** the branch to share with the other label, because TYA changes some condition codes. + */ + g_defcodelabel (ZeroExtendLabel); + AddCodeLine ("tya"); + } } else { /* Unsigned bit-field, needs only zero-extension. */ if (ZeroExtendMask != 0) { diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index 1de71e7d3..cb62d78bd 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -486,11 +486,11 @@ void g_initstatic (unsigned InitLabel, unsigned VarLabel, unsigned Size); /*****************************************************************************/ void g_testbitfield (unsigned Flags, unsigned BitOffs, unsigned BitWidth); -/* Test bit-field in ax. */ +/* Test bit-field in primary. */ void g_extractbitfield (unsigned Flags, unsigned FullWidthFlags, int IsSigned, unsigned BitOffs, unsigned BitWidth); -/* Extract bits from bit-field in ax. */ +/* Extract bits from bit-field in primary. */ /*****************************************************************************/ /* Switch statement */ From 3e614d935386f9f524ccc6f6a1f92fa8b75a1cdd Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 3 Jan 2022 13:10:32 +0800 Subject: [PATCH 1549/2710] Separated data initializer stuff from declaration stuff. --- src/cc65.vcxproj | 2 + src/cc65/compile.c | 1 + src/cc65/declare.c | 720 --------------------------------------- src/cc65/declare.h | 5 - src/cc65/expr.c | 1 + src/cc65/initdata.c | 800 ++++++++++++++++++++++++++++++++++++++++++++ src/cc65/initdata.h | 61 ++++ src/cc65/locals.c | 1 + 8 files changed, 866 insertions(+), 725 deletions(-) create mode 100644 src/cc65/initdata.c create mode 100644 src/cc65/initdata.h diff --git a/src/cc65.vcxproj b/src/cc65.vcxproj index 14500296d..5cddc1862 100644 --- a/src/cc65.vcxproj +++ b/src/cc65.vcxproj @@ -93,6 +93,7 @@ <ClInclude Include="cc65\hexval.h" /> <ClInclude Include="cc65\ident.h" /> <ClInclude Include="cc65\incpath.h" /> + <ClInclude Include="cc65\initdata.h" /> <ClInclude Include="cc65\input.h" /> <ClInclude Include="cc65\lineinfo.h" /> <ClInclude Include="cc65\litpool.h" /> @@ -170,6 +171,7 @@ <ClCompile Include="cc65\hexval.c" /> <ClCompile Include="cc65\ident.c" /> <ClCompile Include="cc65\incpath.c" /> + <ClCompile Include="cc65\initdata.c" /> <ClCompile Include="cc65\input.c" /> <ClCompile Include="cc65\lineinfo.c" /> <ClCompile Include="cc65\litpool.c" /> diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 94dfc3ffb..85c9bd5a4 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -56,6 +56,7 @@ #include "funcdesc.h" #include "function.h" #include "global.h" +#include "initdata.h" #include "input.h" #include "litpool.h" #include "macrotab.h" diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 017a69874..67e9a1783 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -66,22 +66,6 @@ -/*****************************************************************************/ -/* Data */ -/*****************************************************************************/ - - - -typedef struct StructInitData StructInitData; -struct StructInitData { - unsigned Size; /* Size of struct */ - unsigned Offs; /* Current offset in struct */ - unsigned BitVal; /* Summed up bit-field value */ - unsigned ValBits; /* Valid bits in Val */ -}; - - - /*****************************************************************************/ /* Forwards */ /*****************************************************************************/ @@ -92,9 +76,6 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, int* SignednessSpecified); /* Parse a type specifier */ -static unsigned ParseInitInternal (Type* T, int* Braces, int AllowFlexibleMembers); -/* Parse initialization of variables. Return the number of data bytes. */ - /*****************************************************************************/ @@ -2121,704 +2102,3 @@ void CheckEmptyDecl (const DeclSpec* D) Warning ("Useless declaration"); } } - - - -static void SkipInitializer (int BracesExpected) -/* Skip the remainder of an initializer in case of errors. Try to be somewhat -** smart so we don't have too many following errors. -*/ -{ - while (CurTok.Tok != TOK_CEOF && CurTok.Tok != TOK_SEMI && BracesExpected >= 0) { - switch (CurTok.Tok) { - case TOK_RCURLY: --BracesExpected; break; - case TOK_LCURLY: ++BracesExpected; break; - default: break; - } - if (BracesExpected >= 0) { - NextToken (); - } - } -} - - - -static unsigned OpeningCurlyBraces (unsigned BracesNeeded) -/* Accept any number of opening curly braces around an initialization, skip -** them and return the number. If the number of curly braces is less than -** BracesNeeded, issue a warning. -*/ -{ - unsigned BraceCount = 0; - while (CurTok.Tok == TOK_LCURLY) { - ++BraceCount; - NextToken (); - } - if (BraceCount < BracesNeeded) { - Error ("'{' expected"); - } - return BraceCount; -} - - - -static void ClosingCurlyBraces (unsigned BracesExpected) -/* Accept and skip the given number of closing curly braces together with -** an optional comma. Output an error messages, if the input does not contain -** the expected number of braces. -*/ -{ - while (BracesExpected) { - /* TODO: Skip all excess initializers until next closing curly brace */ - if (CurTok.Tok == TOK_RCURLY) { - NextToken (); - } else if (CurTok.Tok == TOK_COMMA && NextTok.Tok == TOK_RCURLY) { - NextToken (); - NextToken (); - } else { - Error ("'}' expected"); - return; - } - --BracesExpected; - } -} - - - -static void DefineData (ExprDesc* Expr) -/* Output a data definition for the given expression */ -{ - switch (ED_GetLoc (Expr)) { - - case E_LOC_NONE: - /* Immediate numeric value with no storage */ - g_defdata (CF_IMM | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); - break; - - case E_LOC_ABS: - /* Absolute numeric address */ - g_defdata (CF_ABSOLUTE | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); - break; - - case E_LOC_GLOBAL: - /* Global variable */ - g_defdata (CF_EXTERNAL, Expr->Name, Expr->IVal); - break; - - case E_LOC_STATIC: - /* Static variable */ - g_defdata (CF_STATIC, Expr->Name, Expr->IVal); - break; - - case E_LOC_LITERAL: - /* Literal in the literal pool */ - g_defdata (CF_LITERAL, Expr->Name, Expr->IVal); - break; - - case E_LOC_REGISTER: - /* Register variable. Taking the address is usually not - ** allowed. - */ - if (IS_Get (&AllowRegVarAddr) == 0) { - Error ("Cannot take the address of a register variable"); - } - g_defdata (CF_REGVAR, Expr->Name, Expr->IVal); - break; - - case E_LOC_CODE: - /* Code label location */ - g_defdata (CF_CODE, Expr->Name, Expr->IVal); - break; - - case E_LOC_STACK: - case E_LOC_PRIMARY: - case E_LOC_EXPR: - Error ("Non constant initializer"); - break; - - default: - Internal ("Unknown constant type: 0x%04X", ED_GetLoc (Expr)); - } -} - - - -static void DefineBitFieldData (StructInitData* SI) -/* Output bit field data */ -{ - /* Ignore if we have no data */ - if (SI->ValBits > 0) { - - /* Output the data */ - g_defdata (CF_CHAR | CF_UNSIGNED | CF_CONST, SI->BitVal, 0); - - /* Update the data from SI and account for the size */ - if (SI->ValBits >= CHAR_BITS) { - SI->BitVal >>= CHAR_BITS; - SI->ValBits -= CHAR_BITS; - } else { - SI->BitVal = 0; - SI->ValBits = 0; - } - SI->Offs += SIZEOF_CHAR; - } -} - - - -static void DefineStrData (Literal* Lit, unsigned Count) -{ - /* Translate into target charset */ - TranslateLiteral (Lit); - - /* Output the data */ - g_defbytes (GetLiteralStr (Lit), Count); -} - - - -static ExprDesc ParseScalarInitInternal (const Type* T) -/* Parse initializaton for scalar data types. This function will not output the -** data but return it in ED. -*/ -{ - /* Optional opening brace */ - unsigned BraceCount = OpeningCurlyBraces (0); - - /* We warn if an initializer for a scalar contains braces, because this is - ** quite unusual and often a sign for some problem in the input. - */ - if (BraceCount > 0) { - Warning ("Braces around scalar initializer"); - } - - /* Get the expression and convert it to the target type */ - ExprDesc ED = NoCodeConstExpr (hie1); - TypeConversion (&ED, T); - - /* Close eventually opening braces */ - ClosingCurlyBraces (BraceCount); - - return ED; -} - - - -static unsigned ParseScalarInit (const Type* T) -/* Parse initializaton for scalar data types. Return the number of data bytes. */ -{ - /* Parse initialization */ - ExprDesc ED = ParseScalarInitInternal (T); - - /* Output the data */ - DefineData (&ED); - - /* Do this anyways for safety */ - DoDeferred (SQP_KEEP_NONE, &ED); - - /* Done */ - return SizeOf (T); -} - - - -static unsigned ParsePointerInit (const Type* T) -/* Parse initializaton for pointer data types. Return the number of data bytes. */ -{ - /* Optional opening brace */ - unsigned BraceCount = OpeningCurlyBraces (0); - - /* Expression */ - ExprDesc ED = NoCodeConstExpr (hie1); - TypeConversion (&ED, T); - - /* Output the data */ - DefineData (&ED); - - /* Do this anyways for safety */ - DoDeferred (SQP_KEEP_NONE, &ED); - - /* Close eventually opening braces */ - ClosingCurlyBraces (BraceCount); - - /* Done */ - return SIZEOF_PTR; -} - - - -static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) -/* Parse initializaton for arrays. Return the number of data bytes. */ -{ - int Count; - int HasCurly = 0; - - /* Get the array data */ - Type* ElementType = IndirectModifiable (T); - unsigned ElementSize = SizeOf (ElementType); - long ElementCount = GetElementCount (T); - - /* Special handling for a character array initialized by a literal */ - if (IsClassChar (ElementType) && - (CurTok.Tok == TOK_SCONST || CurTok.Tok == TOK_WCSCONST || - (CurTok.Tok == TOK_LCURLY && - (NextTok.Tok == TOK_SCONST || NextTok.Tok == TOK_WCSCONST)))) { - - /* Char array initialized by string constant */ - int NeedParen; - - /* If we initializer is enclosed in brackets, remember this fact and - ** skip the opening bracket. - */ - NeedParen = (CurTok.Tok == TOK_LCURLY); - if (NeedParen) { - NextToken (); - } - - /* If the array is one too small for the string literal, omit the - ** trailing zero. - */ - Count = GetLiteralSize (CurTok.SVal); - if (ElementCount != UNSPECIFIED && - ElementCount != FLEXIBLE && - Count == ElementCount + 1) { - /* Omit the trailing zero */ - --Count; - } - - /* Output the data */ - DefineStrData (CurTok.SVal, Count); - - /* Skip the string */ - NextToken (); - - /* If the initializer was enclosed in curly braces, we need a closing - ** one. - */ - if (NeedParen) { - ConsumeRCurly (); - } - - } else { - - /* Arrays can be initialized without a pair of curly braces */ - if (*Braces == 0 || CurTok.Tok == TOK_LCURLY) { - /* Consume the opening curly brace */ - HasCurly = ConsumeLCurly (); - *Braces += HasCurly; - } - - /* Initialize the array members */ - Count = 0; - while (CurTok.Tok != TOK_RCURLY) { - /* Flexible array members may not be initialized within - ** an array (because the size of each element may differ - ** otherwise). - */ - ParseInitInternal (ElementType, Braces, 0); - ++Count; - if (CurTok.Tok != TOK_COMMA) - break; - NextToken (); - } - - if (HasCurly) { - /* Closing curly braces */ - ConsumeRCurly (); - } - } - - /* Size of 'void' elements are determined after initialization */ - if (ElementSize == 0) { - ElementSize = SizeOf (ElementType); - } - - if (ElementCount == UNSPECIFIED) { - /* Number of elements determined by initializer */ - SetElementCount (T, Count); - ElementCount = Count; - } else if (ElementCount == FLEXIBLE) { - if (AllowFlexibleMembers) { - /* In non ANSI mode, allow initialization of flexible array - ** members. - */ - ElementCount = Count; - } else { - /* Forbid */ - Error ("Initializing flexible array member is forbidden"); - ElementCount = Count; - } - } else if (Count < ElementCount) { - g_zerobytes ((ElementCount - Count) * ElementSize); - } else if (Count > ElementCount && HasCurly) { - Error ("Excess elements in array initializer"); - } - return ElementCount * ElementSize; -} - - - -static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) -/* Parse initialization of a struct or union. Return the number of data bytes. */ -{ - SymEntry* Sym; - SymTable* Tab; - StructInitData SI; - int HasCurly = 0; - int SkipComma = 0; - - - /* Fields can be initialized without a pair of curly braces */ - if (*Braces == 0 || CurTok.Tok == TOK_LCURLY) { - /* Consume the opening curly brace */ - HasCurly = ConsumeLCurly (); - *Braces += HasCurly; - } - - /* Get a pointer to the struct entry from the type */ - Sym = GetESUSymEntry (T); - - /* Get the size of the struct from the symbol table entry */ - SI.Size = Sym->V.S.Size; - - /* Check if this struct definition has a field table. If it doesn't, it - ** is an incomplete definition. - */ - Tab = Sym->V.S.SymTab; - if (Tab == 0) { - Error ("Cannot initialize variables with incomplete type"); - /* Try error recovery */ - SkipInitializer (HasCurly); - /* Nothing initialized */ - return 0; - } - - /* Get a pointer to the list of symbols */ - Sym = Tab->SymHead; - - /* Initialize fields */ - SI.Offs = 0; - SI.BitVal = 0; - SI.ValBits = 0; - while (CurTok.Tok != TOK_RCURLY) { - - /* Check for excess elements */ - if (Sym == 0) { - /* Is there just one trailing comma before a closing curly? */ - if (NextTok.Tok == TOK_RCURLY && CurTok.Tok == TOK_COMMA) { - /* Skip comma and exit scope */ - NextToken (); - break; - } - - if (HasCurly) { - Error ("Excess elements in %s initializer", GetBasicTypeName (T)); - SkipInitializer (HasCurly); - } - return SI.Offs; - } - - /* Check for special members that don't consume the initializer */ - if ((Sym->Flags & SC_ALIAS) == SC_ALIAS) { - /* Just skip */ - goto NextMember; - } - - /* This may be an anonymous bit-field, in which case it doesn't - ** have an initializer. - */ - if (SymIsBitField (Sym) && (IsAnonName (Sym->Name))) { - /* Account for the data and output it if we have at least a full - ** word. We may have more if there was storage unit overlap, for - ** example two consecutive 10 bit fields. These will be packed - ** into 3 bytes. - */ - SI.ValBits += Sym->Type->A.B.Width; - /* TODO: Generalize this so any type can be used. */ - CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); - while (SI.ValBits >= CHAR_BITS) { - DefineBitFieldData (&SI); - } - /* Avoid consuming the comma if any */ - goto NextMember; - } - - /* Skip comma this round */ - if (SkipComma) { - NextToken (); - SkipComma = 0; - } - - if (SymIsBitField (Sym)) { - - /* Parse initialization of one field. Bit-fields need a special - ** handling. - */ - ExprDesc ED; - ED_Init (&ED); - unsigned Val; - unsigned Shift; - - /* Calculate the bitmask from the bit-field data */ - unsigned Mask = (1U << Sym->Type->A.B.Width) - 1U; - - /* Safety ... */ - CHECK (Sym->V.Offs * CHAR_BITS + Sym->Type->A.B.Offs == - SI.Offs * CHAR_BITS + SI.ValBits); - - /* Read the data, check for a constant integer, do a range check */ - ED = ParseScalarInitInternal (IntPromotion (Sym->Type)); - if (!ED_IsConstAbsInt (&ED)) { - Error ("Constant initializer expected"); - ED_MakeConstAbsInt (&ED, 1); - } - - /* Truncate the initializer value to the width of the bit-field and check if we lost - ** any useful bits. - */ - Val = (unsigned) ED.IVal & Mask; - if (IsSignUnsigned (Sym->Type)) { - if (ED.IVal < 0 || (unsigned long) ED.IVal != Val) { - Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer" - " changes value from %ld to %u", - GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), - Sym->Type->A.B.Width, ED.IVal, Val); - } - } else { - /* Sign extend back to full width of host long. */ - unsigned ShiftBits = sizeof (long) * CHAR_BIT - Sym->Type->A.B.Width; - long RestoredVal = asr_l(asl_l (Val, ShiftBits), ShiftBits); - if (ED.IVal != RestoredVal) { - Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer " - "changes value from %ld to %ld", - GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), - Sym->Type->A.B.Width, ED.IVal, RestoredVal); - } - } - - /* Add the value to the currently stored bit-field value */ - Shift = (Sym->V.Offs - SI.Offs) * CHAR_BITS + Sym->Type->A.B.Offs; - SI.BitVal |= (Val << Shift); - - /* Account for the data and output any full bytes we have. */ - SI.ValBits += Sym->Type->A.B.Width; - /* Make sure unsigned is big enough to hold the value, 22 bits. - ** This is 22 bits because the most we can have is 7 bits left - ** over from the previous OutputBitField call, plus 15 bits - ** from this field. A 16-bit bit-field will always be byte - ** aligned, so will have padding before it. - */ - CHECK (SI.ValBits <= CHAR_BIT * sizeof(SI.BitVal)); - /* TODO: Generalize this so any type can be used. */ - CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); - while (SI.ValBits >= CHAR_BITS) { - DefineBitFieldData (&SI); - } - - } else { - - /* Standard member. We should never have stuff from a - ** bit-field left because an anonymous member was added - ** for padding by ParseStructDecl. - */ - CHECK (SI.ValBits == 0); - - /* Flexible array members may only be initialized if they are - ** the last field (or part of the last struct field). - */ - SI.Offs += ParseInitInternal (Sym->Type, Braces, AllowFlexibleMembers && Sym->NextSym == 0); - } - - /* More initializers? */ - if (CurTok.Tok != TOK_COMMA) { - break; - } - - /* Skip the comma next round */ - SkipComma = 1; - -NextMember: - /* Next member. For unions, only the first one can be initialized */ - if (IsTypeUnion (T)) { - /* Union */ - Sym = 0; - } else { - /* Struct */ - Sym = Sym->NextSym; - } - } - - if (HasCurly) { - /* Consume the closing curly brace */ - ConsumeRCurly (); - } - - /* If we have data from a bit-field left, output it now */ - CHECK (SI.ValBits < CHAR_BITS); - DefineBitFieldData (&SI); - - /* If there are struct fields left, reserve additional storage */ - if (SI.Offs < SI.Size) { - g_zerobytes (SI.Size - SI.Offs); - SI.Offs = SI.Size; - } - - /* Return the actual number of bytes initialized. This number may be - ** larger than sizeof (Struct) if flexible array members are present and - ** were initialized (possible in non ANSI mode). - */ - return SI.Offs; -} - - - -static unsigned ParseVoidInit (Type* T) -/* Parse an initialization of a void variable (special cc65 extension). -** Return the number of bytes initialized. -*/ -{ - unsigned Size; - - /* Opening brace */ - ConsumeLCurly (); - - /* Allow an arbitrary list of values */ - Size = 0; - do { - ExprDesc Expr = NoCodeConstExpr (hie1); - switch (GetUnderlyingTypeCode (&Expr.Type[0])) { - - case T_SCHAR: - case T_UCHAR: - if (ED_IsConstAbsInt (&Expr)) { - /* Make it byte sized */ - Expr.IVal &= 0xFF; - } - DefineData (&Expr); - Size += SIZEOF_CHAR; - break; - - case T_SHORT: - case T_USHORT: - case T_INT: - case T_UINT: - case T_PTR: - case T_ARRAY: - if (ED_IsConstAbsInt (&Expr)) { - /* Make it word sized */ - Expr.IVal &= 0xFFFF; - } - DefineData (&Expr); - Size += SIZEOF_INT; - break; - - case T_LONG: - case T_ULONG: - if (ED_IsConstAbsInt (&Expr)) { - /* Make it dword sized */ - Expr.IVal &= 0xFFFFFFFF; - } - DefineData (&Expr); - Size += SIZEOF_LONG; - break; - - default: - Error ("Illegal type in initialization"); - break; - - } - - if (CurTok.Tok != TOK_COMMA) { - break; - } - NextToken (); - - } while (CurTok.Tok != TOK_RCURLY); - - /* Closing brace */ - ConsumeRCurly (); - - /* Number of bytes determined by initializer */ - if (T->A.U != 0 && T->A.U != Size) { - Error ("'void' array initialized with elements of variant sizes"); - } else { - T->A.U = Size; - } - - /* Return the number of bytes initialized */ - return Size; -} - - - -static unsigned ParseInitInternal (Type* T, int *Braces, int AllowFlexibleMembers) -/* Parse initialization of variables. Return the number of data bytes. */ -{ - switch (GetUnderlyingTypeCode (T)) { - - case T_SCHAR: - case T_UCHAR: - case T_SHORT: - case T_USHORT: - case T_INT: - case T_UINT: - case T_LONG: - case T_ULONG: - case T_FLOAT: - case T_DOUBLE: - return ParseScalarInit (T); - - case T_PTR: - return ParsePointerInit (T); - - case T_ARRAY: - return ParseArrayInit (T, Braces, AllowFlexibleMembers); - - case T_STRUCT: - case T_UNION: - return ParseStructInit (T, Braces, AllowFlexibleMembers); - - case T_ENUM: - /* Incomplete enum type must have already raised errors. - ** Just proceed to consume the value. - */ - return ParseScalarInit (T); - - case T_VOID: - if (IS_Get (&Standard) == STD_CC65) { - /* Special cc65 extension in non-ANSI mode */ - return ParseVoidInit (T); - } - /* FALLTHROUGH */ - - default: - Error ("Illegal type"); - return SIZEOF_CHAR; - - } -} - - - -unsigned ParseInit (Type* T) -/* Parse initialization of variables. Return the number of data bytes. */ -{ - /* Current curly braces layers */ - int Braces = 0; - - /* Parse the initialization. Flexible array members can only be initialized - ** in cc65 mode. - */ - unsigned Size = ParseInitInternal (T, &Braces, IS_Get (&Standard) == STD_CC65); - - /* The initialization may not generate code on global level, because code - ** outside function scope will never get executed. - */ - if (HaveGlobalCode ()) { - Error ("Non constant initializers"); - RemoveGlobalCode (); - } - - /* Return the size needed for the initialization */ - return Size; -} diff --git a/src/cc65/declare.h b/src/cc65/declare.h index 3293a0dcb..2b8b36f1c 100644 --- a/src/cc65/declare.h +++ b/src/cc65/declare.h @@ -114,11 +114,6 @@ void CheckEmptyDecl (const DeclSpec* D); ** warning if not. */ -unsigned ParseInit (Type* T); -/* Parse initialization of variables. Return the number of initialized data -** bytes. -*/ - /* End of declare.h */ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 3b3754665..0275e61a3 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -25,6 +25,7 @@ #include "funcdesc.h" #include "function.h" #include "global.h" +#include "initdata.h" #include "litpool.h" #include "loadexpr.h" #include "macrotab.h" diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c new file mode 100644 index 000000000..1f8b35ce4 --- /dev/null +++ b/src/cc65/initdata.c @@ -0,0 +1,800 @@ +/*****************************************************************************/ +/* */ +/* initdata.c */ +/* */ +/* Parse and generate initializer data */ +/* */ +/* */ +/* */ +/* (C) 1998-2015, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#include <limits.h> +#include <stdio.h> +#include <string.h> +#include <errno.h> + +/* common */ +#include "addrsize.h" +#include "mmodel.h" +#include "shift.h" +#include "xmalloc.h" + +/* cc65 */ +#include "anonname.h" +#include "codegen.h" +#include "datatype.h" +#include "declattr.h" +#include "error.h" +#include "expr.h" +#include "exprdesc.h" +#include "funcdesc.h" +#include "function.h" +#include "global.h" +#include "litpool.h" +#include "pragma.h" +#include "scanner.h" +#include "shift.h" +#include "standard.h" +#include "symtab.h" +#include "wrappedcall.h" +#include "typeconv.h" +#include "initdata.h" + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +typedef struct StructInitData StructInitData; +struct StructInitData { + unsigned Size; /* Size of struct */ + unsigned Offs; /* Current offset in struct */ + unsigned BitVal; /* Summed up bit-field value */ + unsigned ValBits; /* Valid bits in Val */ +}; + + + +/*****************************************************************************/ +/* Forwards */ +/*****************************************************************************/ + + + +static unsigned ParseInitInternal (Type* T, int* Braces, int AllowFlexibleMembers); +/* Parse initialization of variables. Return the number of data bytes. */ + + + +/*****************************************************************************/ +/* code */ +/*****************************************************************************/ + + + +static void SkipInitializer (int BracesExpected) +/* Skip the remainder of an initializer in case of errors. Try to be somewhat +** smart so we don't have too many following errors. +*/ +{ + while (CurTok.Tok != TOK_CEOF && CurTok.Tok != TOK_SEMI && BracesExpected >= 0) { + switch (CurTok.Tok) { + case TOK_RCURLY: --BracesExpected; break; + case TOK_LCURLY: ++BracesExpected; break; + default: break; + } + if (BracesExpected >= 0) { + NextToken (); + } + } +} + + + +static unsigned OpeningCurlyBraces (unsigned BracesNeeded) +/* Accept any number of opening curly braces around an initialization, skip +** them and return the number. If the number of curly braces is less than +** BracesNeeded, issue a warning. +*/ +{ + unsigned BraceCount = 0; + while (CurTok.Tok == TOK_LCURLY) { + ++BraceCount; + NextToken (); + } + if (BraceCount < BracesNeeded) { + Error ("'{' expected"); + } + return BraceCount; +} + + + +static void ClosingCurlyBraces (unsigned BracesExpected) +/* Accept and skip the given number of closing curly braces together with +** an optional comma. Output an error messages, if the input does not contain +** the expected number of braces. +*/ +{ + while (BracesExpected) { + /* TODO: Skip all excess initializers until next closing curly brace */ + if (CurTok.Tok == TOK_RCURLY) { + NextToken (); + } else if (CurTok.Tok == TOK_COMMA && NextTok.Tok == TOK_RCURLY) { + NextToken (); + NextToken (); + } else { + Error ("'}' expected"); + return; + } + --BracesExpected; + } +} + + + +static void DefineData (ExprDesc* Expr) +/* Output a data definition for the given expression */ +{ + switch (ED_GetLoc (Expr)) { + + case E_LOC_NONE: + /* Immediate numeric value with no storage */ + g_defdata (CF_IMM | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); + break; + + case E_LOC_ABS: + /* Absolute numeric address */ + g_defdata (CF_ABSOLUTE | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); + break; + + case E_LOC_GLOBAL: + /* Global variable */ + g_defdata (CF_EXTERNAL, Expr->Name, Expr->IVal); + break; + + case E_LOC_STATIC: + /* Static variable */ + g_defdata (CF_STATIC, Expr->Name, Expr->IVal); + break; + + case E_LOC_LITERAL: + /* Literal in the literal pool */ + g_defdata (CF_LITERAL, Expr->Name, Expr->IVal); + break; + + case E_LOC_REGISTER: + /* Register variable. Taking the address is usually not + ** allowed. + */ + if (IS_Get (&AllowRegVarAddr) == 0) { + Error ("Cannot take the address of a register variable"); + } + g_defdata (CF_REGVAR, Expr->Name, Expr->IVal); + break; + + case E_LOC_CODE: + /* Code label location */ + g_defdata (CF_CODE, Expr->Name, Expr->IVal); + break; + + case E_LOC_STACK: + case E_LOC_PRIMARY: + case E_LOC_EXPR: + Error ("Non constant initializer"); + break; + + default: + Internal ("Unknown constant type: 0x%04X", ED_GetLoc (Expr)); + } +} + + + +static void DefineBitFieldData (StructInitData* SI) +/* Output bit field data */ +{ + /* Ignore if we have no data */ + if (SI->ValBits > 0) { + + /* Output the data */ + g_defdata (CF_CHAR | CF_UNSIGNED | CF_CONST, SI->BitVal, 0); + + /* Update the data from SI and account for the size */ + if (SI->ValBits >= CHAR_BITS) { + SI->BitVal >>= CHAR_BITS; + SI->ValBits -= CHAR_BITS; + } else { + SI->BitVal = 0; + SI->ValBits = 0; + } + SI->Offs += SIZEOF_CHAR; + } +} + + + +static void DefineStrData (Literal* Lit, unsigned Count) +{ + /* Translate into target charset */ + TranslateLiteral (Lit); + + /* Output the data */ + g_defbytes (GetLiteralStr (Lit), Count); +} + + + +static ExprDesc ParseScalarInitInternal (const Type* T) +/* Parse initializaton for scalar data types. This function will not output the +** data but return it in ED. +*/ +{ + /* Optional opening brace */ + unsigned BraceCount = OpeningCurlyBraces (0); + + /* We warn if an initializer for a scalar contains braces, because this is + ** quite unusual and often a sign for some problem in the input. + */ + if (BraceCount > 0) { + Warning ("Braces around scalar initializer"); + } + + /* Get the expression and convert it to the target type */ + ExprDesc ED = NoCodeConstExpr (hie1); + TypeConversion (&ED, T); + + /* Close eventually opening braces */ + ClosingCurlyBraces (BraceCount); + + return ED; +} + + + +static unsigned ParseScalarInit (const Type* T) +/* Parse initializaton for scalar data types. Return the number of data bytes. */ +{ + /* Parse initialization */ + ExprDesc ED = ParseScalarInitInternal (T); + + /* Output the data */ + DefineData (&ED); + + /* Do this anyways for safety */ + DoDeferred (SQP_KEEP_NONE, &ED); + + /* Done */ + return SizeOf (T); +} + + + +static unsigned ParsePointerInit (const Type* T) +/* Parse initializaton for pointer data types. Return the number of data bytes. */ +{ + /* Optional opening brace */ + unsigned BraceCount = OpeningCurlyBraces (0); + + /* Expression */ + ExprDesc ED = NoCodeConstExpr (hie1); + TypeConversion (&ED, T); + + /* Output the data */ + DefineData (&ED); + + /* Do this anyways for safety */ + DoDeferred (SQP_KEEP_NONE, &ED); + + /* Close eventually opening braces */ + ClosingCurlyBraces (BraceCount); + + /* Done */ + return SIZEOF_PTR; +} + + + +static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) +/* Parse initializaton for arrays. Return the number of data bytes. */ +{ + int Count; + int HasCurly = 0; + + /* Get the array data */ + Type* ElementType = IndirectModifiable (T); + unsigned ElementSize = SizeOf (ElementType); + long ElementCount = GetElementCount (T); + + /* Special handling for a character array initialized by a literal */ + if (IsClassChar (ElementType) && + (CurTok.Tok == TOK_SCONST || CurTok.Tok == TOK_WCSCONST || + (CurTok.Tok == TOK_LCURLY && + (NextTok.Tok == TOK_SCONST || NextTok.Tok == TOK_WCSCONST)))) { + + /* Char array initialized by string constant */ + int NeedParen; + + /* If we initializer is enclosed in brackets, remember this fact and + ** skip the opening bracket. + */ + NeedParen = (CurTok.Tok == TOK_LCURLY); + if (NeedParen) { + NextToken (); + } + + /* If the array is one too small for the string literal, omit the + ** trailing zero. + */ + Count = GetLiteralSize (CurTok.SVal); + if (ElementCount != UNSPECIFIED && + ElementCount != FLEXIBLE && + Count == ElementCount + 1) { + /* Omit the trailing zero */ + --Count; + } + + /* Output the data */ + DefineStrData (CurTok.SVal, Count); + + /* Skip the string */ + NextToken (); + + /* If the initializer was enclosed in curly braces, we need a closing + ** one. + */ + if (NeedParen) { + ConsumeRCurly (); + } + + } else { + + /* Arrays can be initialized without a pair of curly braces */ + if (*Braces == 0 || CurTok.Tok == TOK_LCURLY) { + /* Consume the opening curly brace */ + HasCurly = ConsumeLCurly (); + *Braces += HasCurly; + } + + /* Initialize the array members */ + Count = 0; + while (CurTok.Tok != TOK_RCURLY) { + /* Flexible array members may not be initialized within + ** an array (because the size of each element may differ + ** otherwise). + */ + ParseInitInternal (ElementType, Braces, 0); + ++Count; + if (CurTok.Tok != TOK_COMMA) + break; + NextToken (); + } + + if (HasCurly) { + /* Closing curly braces */ + ConsumeRCurly (); + } + } + + /* Size of 'void' elements are determined after initialization */ + if (ElementSize == 0) { + ElementSize = SizeOf (ElementType); + } + + if (ElementCount == UNSPECIFIED) { + /* Number of elements determined by initializer */ + SetElementCount (T, Count); + ElementCount = Count; + } else if (ElementCount == FLEXIBLE) { + if (AllowFlexibleMembers) { + /* In non ANSI mode, allow initialization of flexible array + ** members. + */ + ElementCount = Count; + } else { + /* Forbid */ + Error ("Initializing flexible array member is forbidden"); + ElementCount = Count; + } + } else if (Count < ElementCount) { + g_zerobytes ((ElementCount - Count) * ElementSize); + } else if (Count > ElementCount && HasCurly) { + Error ("Excess elements in array initializer"); + } + return ElementCount * ElementSize; +} + + + +static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) +/* Parse initialization of a struct or union. Return the number of data bytes. */ +{ + SymEntry* Sym; + SymTable* Tab; + StructInitData SI; + int HasCurly = 0; + int SkipComma = 0; + + + /* Fields can be initialized without a pair of curly braces */ + if (*Braces == 0 || CurTok.Tok == TOK_LCURLY) { + /* Consume the opening curly brace */ + HasCurly = ConsumeLCurly (); + *Braces += HasCurly; + } + + /* Get a pointer to the struct entry from the type */ + Sym = GetESUSymEntry (T); + + /* Get the size of the struct from the symbol table entry */ + SI.Size = Sym->V.S.Size; + + /* Check if this struct definition has a field table. If it doesn't, it + ** is an incomplete definition. + */ + Tab = Sym->V.S.SymTab; + if (Tab == 0) { + Error ("Cannot initialize variables with incomplete type"); + /* Try error recovery */ + SkipInitializer (HasCurly); + /* Nothing initialized */ + return 0; + } + + /* Get a pointer to the list of symbols */ + Sym = Tab->SymHead; + + /* Initialize fields */ + SI.Offs = 0; + SI.BitVal = 0; + SI.ValBits = 0; + while (CurTok.Tok != TOK_RCURLY) { + + /* Check for excess elements */ + if (Sym == 0) { + /* Is there just one trailing comma before a closing curly? */ + if (NextTok.Tok == TOK_RCURLY && CurTok.Tok == TOK_COMMA) { + /* Skip comma and exit scope */ + NextToken (); + break; + } + + if (HasCurly) { + Error ("Excess elements in %s initializer", GetBasicTypeName (T)); + SkipInitializer (HasCurly); + } + return SI.Offs; + } + + /* Check for special members that don't consume the initializer */ + if ((Sym->Flags & SC_ALIAS) == SC_ALIAS) { + /* Just skip */ + goto NextMember; + } + + /* This may be an anonymous bit-field, in which case it doesn't + ** have an initializer. + */ + if (SymIsBitField (Sym) && (IsAnonName (Sym->Name))) { + /* Account for the data and output it if we have at least a full + ** word. We may have more if there was storage unit overlap, for + ** example two consecutive 10 bit fields. These will be packed + ** into 3 bytes. + */ + SI.ValBits += Sym->Type->A.B.Width; + /* TODO: Generalize this so any type can be used. */ + CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); + while (SI.ValBits >= CHAR_BITS) { + DefineBitFieldData (&SI); + } + /* Avoid consuming the comma if any */ + goto NextMember; + } + + /* Skip comma this round */ + if (SkipComma) { + NextToken (); + SkipComma = 0; + } + + if (SymIsBitField (Sym)) { + + /* Parse initialization of one field. Bit-fields need a special + ** handling. + */ + ExprDesc ED; + ED_Init (&ED); + unsigned Val; + unsigned Shift; + + /* Calculate the bitmask from the bit-field data */ + unsigned Mask = (1U << Sym->Type->A.B.Width) - 1U; + + /* Safety ... */ + CHECK (Sym->V.Offs * CHAR_BITS + Sym->Type->A.B.Offs == + SI.Offs * CHAR_BITS + SI.ValBits); + + /* Read the data, check for a constant integer, do a range check */ + ED = ParseScalarInitInternal (IntPromotion (Sym->Type)); + if (!ED_IsConstAbsInt (&ED)) { + Error ("Constant initializer expected"); + ED_MakeConstAbsInt (&ED, 1); + } + + /* Truncate the initializer value to the width of the bit-field and check if we lost + ** any useful bits. + */ + Val = (unsigned) ED.IVal & Mask; + if (IsSignUnsigned (Sym->Type)) { + if (ED.IVal < 0 || (unsigned long) ED.IVal != Val) { + Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer" + " changes value from %ld to %u", + GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), + Sym->Type->A.B.Width, ED.IVal, Val); + } + } else { + /* Sign extend back to full width of host long. */ + unsigned ShiftBits = sizeof (long) * CHAR_BIT - Sym->Type->A.B.Width; + long RestoredVal = asr_l(asl_l (Val, ShiftBits), ShiftBits); + if (ED.IVal != RestoredVal) { + Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer " + "changes value from %ld to %ld", + GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), + Sym->Type->A.B.Width, ED.IVal, RestoredVal); + } + } + + /* Add the value to the currently stored bit-field value */ + Shift = (Sym->V.Offs - SI.Offs) * CHAR_BITS + Sym->Type->A.B.Offs; + SI.BitVal |= (Val << Shift); + + /* Account for the data and output any full bytes we have. */ + SI.ValBits += Sym->Type->A.B.Width; + /* Make sure unsigned is big enough to hold the value, 22 bits. + ** This is 22 bits because the most we can have is 7 bits left + ** over from the previous OutputBitField call, plus 15 bits + ** from this field. A 16-bit bit-field will always be byte + ** aligned, so will have padding before it. + */ + CHECK (SI.ValBits <= CHAR_BIT * sizeof(SI.BitVal)); + /* TODO: Generalize this so any type can be used. */ + CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); + while (SI.ValBits >= CHAR_BITS) { + DefineBitFieldData (&SI); + } + + } else { + + /* Standard member. We should never have stuff from a + ** bit-field left because an anonymous member was added + ** for padding by ParseStructDecl. + */ + CHECK (SI.ValBits == 0); + + /* Flexible array members may only be initialized if they are + ** the last field (or part of the last struct field). + */ + SI.Offs += ParseInitInternal (Sym->Type, Braces, AllowFlexibleMembers && Sym->NextSym == 0); + } + + /* More initializers? */ + if (CurTok.Tok != TOK_COMMA) { + break; + } + + /* Skip the comma next round */ + SkipComma = 1; + +NextMember: + /* Next member. For unions, only the first one can be initialized */ + if (IsTypeUnion (T)) { + /* Union */ + Sym = 0; + } else { + /* Struct */ + Sym = Sym->NextSym; + } + } + + if (HasCurly) { + /* Consume the closing curly brace */ + ConsumeRCurly (); + } + + /* If we have data from a bit-field left, output it now */ + CHECK (SI.ValBits < CHAR_BITS); + DefineBitFieldData (&SI); + + /* If there are struct fields left, reserve additional storage */ + if (SI.Offs < SI.Size) { + g_zerobytes (SI.Size - SI.Offs); + SI.Offs = SI.Size; + } + + /* Return the actual number of bytes initialized. This number may be + ** larger than sizeof (Struct) if flexible array members are present and + ** were initialized (possible in non ANSI mode). + */ + return SI.Offs; +} + + + +static unsigned ParseVoidInit (Type* T) +/* Parse an initialization of a void variable (special cc65 extension). +** Return the number of bytes initialized. +*/ +{ + unsigned Size; + + /* Opening brace */ + ConsumeLCurly (); + + /* Allow an arbitrary list of values */ + Size = 0; + do { + ExprDesc Expr = NoCodeConstExpr (hie1); + switch (GetUnderlyingTypeCode (&Expr.Type[0])) { + + case T_SCHAR: + case T_UCHAR: + if (ED_IsConstAbsInt (&Expr)) { + /* Make it byte sized */ + Expr.IVal &= 0xFF; + } + DefineData (&Expr); + Size += SIZEOF_CHAR; + break; + + case T_SHORT: + case T_USHORT: + case T_INT: + case T_UINT: + case T_PTR: + case T_ARRAY: + if (ED_IsConstAbsInt (&Expr)) { + /* Make it word sized */ + Expr.IVal &= 0xFFFF; + } + DefineData (&Expr); + Size += SIZEOF_INT; + break; + + case T_LONG: + case T_ULONG: + if (ED_IsConstAbsInt (&Expr)) { + /* Make it dword sized */ + Expr.IVal &= 0xFFFFFFFF; + } + DefineData (&Expr); + Size += SIZEOF_LONG; + break; + + default: + Error ("Illegal type in initialization"); + break; + + } + + if (CurTok.Tok != TOK_COMMA) { + break; + } + NextToken (); + + } while (CurTok.Tok != TOK_RCURLY); + + /* Closing brace */ + ConsumeRCurly (); + + /* Number of bytes determined by initializer */ + if (T->A.U != 0 && T->A.U != Size) { + Error ("'void' array initialized with elements of variant sizes"); + } else { + T->A.U = Size; + } + + /* Return the number of bytes initialized */ + return Size; +} + + + +static unsigned ParseInitInternal (Type* T, int *Braces, int AllowFlexibleMembers) +/* Parse initialization of variables. Return the number of data bytes. */ +{ + switch (GetUnderlyingTypeCode (T)) { + + case T_SCHAR: + case T_UCHAR: + case T_SHORT: + case T_USHORT: + case T_INT: + case T_UINT: + case T_LONG: + case T_ULONG: + case T_FLOAT: + case T_DOUBLE: + return ParseScalarInit (T); + + case T_PTR: + return ParsePointerInit (T); + + case T_ARRAY: + return ParseArrayInit (T, Braces, AllowFlexibleMembers); + + case T_STRUCT: + case T_UNION: + return ParseStructInit (T, Braces, AllowFlexibleMembers); + + case T_ENUM: + /* Incomplete enum type must have already raised errors. + ** Just proceed to consume the value. + */ + return ParseScalarInit (T); + + case T_VOID: + if (IS_Get (&Standard) == STD_CC65) { + /* Special cc65 extension in non-ANSI mode */ + return ParseVoidInit (T); + } + /* FALLTHROUGH */ + + default: + Error ("Illegal type"); + return SIZEOF_CHAR; + + } +} + + + +unsigned ParseInit (Type* T) +/* Parse initialization of variables. Return the number of data bytes. */ +{ + /* Current curly braces layers */ + int Braces = 0; + + /* Parse the initialization. Flexible array members can only be initialized + ** in cc65 mode. + */ + unsigned Size = ParseInitInternal (T, &Braces, IS_Get (&Standard) == STD_CC65); + + /* The initialization may not generate code on global level, because code + ** outside function scope will never get executed. + */ + if (HaveGlobalCode ()) { + Error ("Non constant initializers"); + RemoveGlobalCode (); + } + + /* Return the size needed for the initialization */ + return Size; +} diff --git a/src/cc65/initdata.h b/src/cc65/initdata.h new file mode 100644 index 000000000..6fa3f20b3 --- /dev/null +++ b/src/cc65/initdata.h @@ -0,0 +1,61 @@ +/*****************************************************************************/ +/* */ +/* initdata.h */ +/* */ +/* Parse and generate initializer data */ +/* */ +/* */ +/* */ +/* (C) 1998-2009, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef INITDATA_H +#define INITDATA_H + + + +/* cc65 */ +#include "datatype.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +unsigned ParseInit (Type* T); +/* Parse initialization of variables. Return the number of initialized data +** bytes. +*/ + + + +/* End of initdata.h */ + +#endif diff --git a/src/cc65/locals.c b/src/cc65/locals.c index d3902f329..297994455 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -46,6 +46,7 @@ #include "expr.h" #include "function.h" #include "global.h" +#include "initdata.h" #include "loadexpr.h" #include "locals.h" #include "stackptr.h" From bf7ef02fbc63f746dd51839e5bfbb603ef65faeb Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 4 Jan 2022 18:23:04 +0800 Subject: [PATCH 1550/2710] Added supports for long bit-fields. --- src/cc65/datatype.c | 13 +++++++-- src/cc65/declare.c | 10 +++---- src/cc65/initdata.c | 65 +++++++++++++++++++++++++-------------------- 3 files changed, 51 insertions(+), 37 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index bb7c40476..e43af238e 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1016,9 +1016,18 @@ const Type* IntPromotion (const Type* T) */ if (IsTypeBitField (T)) { - /* The standard rule is OK for now as we don't support bit-fields with widths > 16. + /* As we now support long bit-fields, we need modified rules for them: + ** - If an int can represent all values of the bit-field, the bit-field is converted + ** to an int; + ** - Otherwise, if an unsigned int can represent all values of the bit-field, the + ** bit-field is converted to an unsigned int; + ** - Otherwise, the bit-field will have its declared integer type. + ** These rules are borrowed from C++ and seem to be consistent with GCC/Clang's. */ - return T->A.B.Width >= INT_BITS && IsSignUnsigned (T) ? type_uint : type_int; + if (T->A.B.Width > INT_BITS) { + return IsSignUnsigned (T) ? type_ulong : type_long; + } + return T->A.B.Width == INT_BITS && IsSignUnsigned (T) ? type_uint : type_int; } else if (IsTypeChar (T)) { /* An integer can represent all values from either signed or unsigned char, so convert ** chars to int. diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 67e9a1783..7cc7444b6 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -746,12 +746,10 @@ static int ParseFieldWidth (Declaration* D) D->Type[0].C = T_INT; } - /* TODO: This can be relaxed to be any integral type, but - ** ParseStructInit currently supports only up to int. - */ - if (SizeOf (D->Type) > SizeOf (type_uint)) { - /* Only int-sized or smaller types may be used for bit-fields, for now */ - Error ("cc65 currently supports only char-sized and int-sized bit-field types"); + /* We currently support integral types up to long */ + if (SizeOf (D->Type) > SizeOf (type_ulong)) { + /* Only long-sized or smaller types may be used for bit-fields, for now */ + Error ("cc65 currently supports only long-sized and smaller bit-field types"); /* Avoid a diagnostic storm */ D->Type[0].C = T_INT; diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c index 1f8b35ce4..99dacdca9 100644 --- a/src/cc65/initdata.c +++ b/src/cc65/initdata.c @@ -505,13 +505,14 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) */ if (SymIsBitField (Sym) && (IsAnonName (Sym->Name))) { /* Account for the data and output it if we have at least a full - ** word. We may have more if there was storage unit overlap, for - ** example two consecutive 10 bit fields. These will be packed - ** into 3 bytes. + ** byte. We may have more if there was storage unit overlap, for + ** example two consecutive 7 bit fields. Those would be packed + ** into 2 bytes. */ SI.ValBits += Sym->Type->A.B.Width; + CHECK (SI.ValBits <= CHAR_BIT * sizeof(SI.BitVal)); /* TODO: Generalize this so any type can be used. */ - CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); + CHECK (SI.ValBits <= LONG_BITS); while (SI.ValBits >= CHAR_BITS) { DefineBitFieldData (&SI); } @@ -530,45 +531,51 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Parse initialization of one field. Bit-fields need a special ** handling. */ - ExprDesc ED; - ED_Init (&ED); - unsigned Val; + ExprDesc Field; + ED_Init (&Field); + unsigned long Val; unsigned Shift; /* Calculate the bitmask from the bit-field data */ - unsigned Mask = (1U << Sym->Type->A.B.Width) - 1U; + unsigned long Mask = shl_l (1UL, Sym->Type->A.B.Width) - 1UL; /* Safety ... */ CHECK (Sym->V.Offs * CHAR_BITS + Sym->Type->A.B.Offs == SI.Offs * CHAR_BITS + SI.ValBits); /* Read the data, check for a constant integer, do a range check */ - ED = ParseScalarInitInternal (IntPromotion (Sym->Type)); - if (!ED_IsConstAbsInt (&ED)) { + Field = ParseScalarInitInternal (IntPromotion (Sym->Type)); + if (!ED_IsConstAbsInt (&Field)) { Error ("Constant initializer expected"); - ED_MakeConstAbsInt (&ED, 1); + ED_MakeConstAbsInt (&Field, 1); } /* Truncate the initializer value to the width of the bit-field and check if we lost ** any useful bits. */ - Val = (unsigned) ED.IVal & Mask; + Val = (unsigned long) Field.IVal & Mask; if (IsSignUnsigned (Sym->Type)) { - if (ED.IVal < 0 || (unsigned long) ED.IVal != Val) { - Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer" - " changes value from %ld to %u", - GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), - Sym->Type->A.B.Width, ED.IVal, Val); + if (Field.IVal < 0 || (unsigned long) Field.IVal != Val) { + Warning (IsSignUnsigned (Field.Type) ? + "Implicit truncation from '%s' to '%s : %u' in bit-field initializer" + " changes value from %lu to %lu" : + "Implicit truncation from '%s' to '%s : %u' in bit-field initializer" + " changes value from %ld to %lu", + GetFullTypeName (Field.Type), GetFullTypeName (Sym->Type), + Sym->Type->A.B.Width, Field.IVal, Val); } } else { /* Sign extend back to full width of host long. */ unsigned ShiftBits = sizeof (long) * CHAR_BIT - Sym->Type->A.B.Width; - long RestoredVal = asr_l(asl_l (Val, ShiftBits), ShiftBits); - if (ED.IVal != RestoredVal) { - Warning ("Implicit truncation from '%s' to '%s : %u' in bit-field initializer " - "changes value from %ld to %ld", - GetFullTypeName (ED.Type), GetFullTypeName (Sym->Type), - Sym->Type->A.B.Width, ED.IVal, RestoredVal); + long RestoredVal = asr_l (asl_l (Val, ShiftBits), ShiftBits); + if (Field.IVal != RestoredVal) { + Warning (IsSignUnsigned (Field.Type) ? + "Implicit truncation from '%s' to '%s : %u' in bit-field initializer" + " changes value from %lu to %ld" : + "Implicit truncation from '%s' to '%s : %u' in bit-field initializer" + " changes value from %ld to %ld", + GetFullTypeName (Field.Type), GetFullTypeName (Sym->Type), + Sym->Type->A.B.Width, Field.IVal, RestoredVal); } } @@ -578,15 +585,15 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Account for the data and output any full bytes we have. */ SI.ValBits += Sym->Type->A.B.Width; - /* Make sure unsigned is big enough to hold the value, 22 bits. - ** This is 22 bits because the most we can have is 7 bits left - ** over from the previous OutputBitField call, plus 15 bits - ** from this field. A 16-bit bit-field will always be byte - ** aligned, so will have padding before it. + /* Make sure unsigned is big enough to hold the value, 32 bits. + ** This cannot be more than 32 bits because a 16-bit or 32-bit + ** bit-field will always be byte-aligned with padding before it + ** if there are bits from prior fields that haven't been output + ** yet. */ CHECK (SI.ValBits <= CHAR_BIT * sizeof(SI.BitVal)); /* TODO: Generalize this so any type can be used. */ - CHECK (SI.ValBits <= CHAR_BITS + INT_BITS - 2); + CHECK (SI.ValBits <= LONG_BITS); while (SI.ValBits >= CHAR_BITS) { DefineBitFieldData (&SI); } From 933e8c967dc6b62bcc7561ad72d5051c8a349760 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 3 Mar 2022 16:14:26 +0800 Subject: [PATCH 1551/2710] Testcases for long bit-fields. --- test/val/{enum-bitfield.c => bitfield-enum.c} | 162 ++++++++- test/val/bitfield-packing-char.c | 278 ++++++++++++++++ test/val/bitfield-packing-long.c | 315 ++++++++++++++++++ test/val/{bitfield.c => bitfield-packing.c} | 18 +- test/val/bitfield-plain.c | 180 ++++++++++ test/val/bitfield-signed.c | 180 ++++++++++ test/val/plain-int-bitfield.c | 63 ---- 7 files changed, 1123 insertions(+), 73 deletions(-) rename test/val/{enum-bitfield.c => bitfield-enum.c} (61%) create mode 100644 test/val/bitfield-packing-char.c create mode 100644 test/val/bitfield-packing-long.c rename test/val/{bitfield.c => bitfield-packing.c} (93%) create mode 100644 test/val/bitfield-plain.c create mode 100644 test/val/bitfield-signed.c delete mode 100644 test/val/plain-int-bitfield.c diff --git a/test/val/enum-bitfield.c b/test/val/bitfield-enum.c similarity index 61% rename from test/val/enum-bitfield.c rename to test/val/bitfield-enum.c index 5669978c9..ce74b062e 100644 --- a/test/val/enum-bitfield.c +++ b/test/val/bitfield-enum.c @@ -1,5 +1,5 @@ /* - Copyright 2020 The cc65 Authors + Copyright 2020-2022 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -247,7 +247,7 @@ static void test_enum_bitfield_char(void) failures++; } if (e8scbf.y != 5) { - printf ("Got e8scbf.y = %d, expected 10.\n", e8scbf.y); + printf ("Got e8scbf.y = %d, expected 5.\n", e8scbf.y); failures++; } if (e8scbf.z != 100) { @@ -273,12 +273,170 @@ static void test_enum_bitfield_char(void) } } +/* Enum with underlying type unsigned long. */ +enum e20ul { + E20UL_10 = 10, + E20UL_1000 = 1000, + E20UL_1000000000 = 1000000000L, +}; + +static struct enum_bitfield_ulong { + enum e20ul x : 4; + enum e20ul y : 16; + enum e20ul z : CHAR_BIT * sizeof (enum e20ul); +} e20ulbf = {E20UL_10, E20UL_1000, E20UL_1000000000}; + +static void test_enum_bitfield_ulong(void) +{ + if (sizeof (struct enum_bitfield_ulong) != 7) { + printf ("Got sizeof(struct enum_bitfield_ulong) = %zu, expected 7.\n", + sizeof(struct enum_bitfield_ulong)); + failures++; + } + + if (e20ulbf.x != 10) { + printf ("Got e20ulbf.x = %u, expected 10.\n", e20ulbf.x); + failures++; + } + if (e20ulbf.y != 1000) { + printf ("Got e20ulbf.y = %u, expected 1000.\n", e20ulbf.y); + failures++; + } + if (e20ulbf.z != 1000000000L) { + printf ("Got e20ulbf.z = %ul, expected 1000000000.\n", e20ulbf.z); + failures++; + } + + e20ulbf.x = 8; + e20ulbf.y = -1; /* Will store 65535. */ + e20ulbf.z = 1048575L; + + if (e20ulbf.x != 8) { + printf ("Got e20ulbf.x = %ld, expected 8.\n", (long)e20ulbf.x); + failures++; + } + + /* Check signedness, should be signed. */ + { + if (e20ulbf.x - 9 >= 0) { + printf ("Got non-negative e20ulbf.x - 9 = %lu, expected negative.\n", (unsigned long)(e20ulbf.x - 9)); + failures++; + } + } + + if (e20ulbf.y != 65535L) { + printf ("Got e20ulbf.y = %ld, expected 65535.\n", (long)e20ulbf.y); + failures++; + } + + /* Check signedness, should be signed. */ + { + if (e20ulbf.y - 65536L >= 0) { + printf ("Got non-negative e20ulbf.y - 65536L = %lu, expected negative.\n", (unsigned long)(e20ulbf.y - 65536L)); + failures++; + } + } + + if (e20ulbf.z != 1048575L) { + printf ("Got e20ulbf.z = %lu, expected 1048575.\n", (unsigned long)e20ulbf.z); + failures++; + } + + /* Check signedness, should be unsigned. */ + { + if (e20ulbf.z - 1048576L < 0) { + printf ("Got negative e20ulbf.z - 1048576 = %ld, expected positive.\n", (long)(e20ulbf.z - 1048576L)); + failures++; + } + } +} + +/* Enum with underlying type signed long. */ +enum e20sl { + E20SL_M1 = -1, + E20SL_1000 = 1000, + E20SL_1000000000 = 1000000000L, +}; + +static struct enum_bitfield_long { + enum e20sl x : 2; + enum e20sl y : 16; + enum e20sl z : CHAR_BIT * sizeof (enum e20sl); +} e20slbf = {E20SL_M1, E20SL_1000, E20SL_1000000000}; + +static void test_enum_bitfield_long(void) +{ + if (sizeof (struct enum_bitfield_long) != 7) { + printf ("Got sizeof(struct enum_bitfield_long) = %zu, expected 8.\n", + sizeof(struct enum_bitfield_long)); + failures++; + } + + if (e20slbf.x != -1) { + printf ("Got e20slbf.x = %ld, expected -1.\n", (long)e20slbf.x); + failures++; + } + if (e20slbf.y != 1000) { + printf ("Got e20slbf.y = %ld, expected 1000.\n", (long)e20slbf.y); + failures++; + } + if (e20slbf.z != 1000000000L) { + printf ("Got e20slbf.z = %ld, expected 1000000000.\n", (long)e20slbf.z); + failures++; + } + + e20slbf.x = 1; + e20slbf.y = 257; + e20slbf.z = 1048575L; + + if (e20slbf.x != 1) { + printf ("Got e20slbf.x = %d, expected 1.\n", e20slbf.x); + failures++; + } + + /* Check signedness, should be signed. */ + { + if (e20slbf.x - 2 >= 0) { + printf ("Got non-negative e20slbf.x - 2 = %lu, expected negative.\n", (unsigned long)(e20slbf.x - 2)); + failures++; + } + } + + if (e20slbf.y != 257) { + printf ("Got e20slbf.y = %ld, expected 257.\n", (long)e20slbf.y); + failures++; + } + + /* Check signedness, should be signed. */ + { + if (e20slbf.y - 258 >= 0) { + printf ("Got non-negative e20slbf.y - 258 = %lu, expected negative.\n", (unsigned long)(e20slbf.y - 258)); + failures++; + } + } + + if (e20slbf.z != 1048575L) { + printf ("Got e20slbf.z = %ld, expected 1048575.\n", (long)e20slbf.z); + failures++; + } + + /* Check signedness, should be signed. */ + { + if (e20slbf.z - 1048576L >= 0) { + printf ("Got non-negative e20slbf.z - 1048576L = %ld, expected negative.\n", (long)(e20slbf.z - 1048576L)); + failures++; + } + } +} + int main(void) { test_enum_bitfield_uint(); test_enum_bitfield_int(); test_enum_bitfield_uchar(); test_enum_bitfield_char(); + test_enum_bitfield_ulong(); + test_enum_bitfield_long(); printf("failures: %u\n", failures); return failures; } diff --git a/test/val/bitfield-packing-char.c b/test/val/bitfield-packing-char.c new file mode 100644 index 000000000..18621e0eb --- /dev/null +++ b/test/val/bitfield-packing-char.c @@ -0,0 +1,278 @@ +/* + Copyright 2020-2022 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of char bit-field packing and typedef works with them; see issues below + - packing issue: https://github.com/cc65/cc65/issues/1054 + - typedef issue: https://github.com/cc65/cc65/pull/1662 + - char bit-field support: https://github.com/cc65/cc65/issues/1047 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +typedef unsigned char field_type; + +static struct four_bits { + field_type x : 4; +} fb = {1}; + +static void test_four_bits(void) +{ + if (sizeof(struct four_bits) != 1) { + printf("Got sizeof(struct four_bits) = %zu, expected 1.\n", + sizeof(struct four_bits)); + failures++; + } + + if (fb.x != 1) { + printf("Got fb.x = %u, expected 1.\n", fb.x); + failures++; + } + + fb.x = 3; + + if (fb.x != 3) { + printf("Got fb.x = %u, expected 3.\n", fb.x); + failures++; + } +} + +/* + Logic is somewhat diferent for bit-fields that end a struct vs + having additional fields. +*/ + +static struct four_bits_with_char { + field_type x : 4; + field_type y; +} fbi = {1, 2}; + +static void test_four_bits_with_char(void) +{ + /* The first 4-bit bit-field just takes one byte, so the size is 2. */ + if (sizeof(struct four_bits_with_char) != 2) { + printf("Got sizeof(struct four_bits_with_char) = %zu, expected 2.\n", + sizeof(struct four_bits_with_char)); + failures++; + } + + if (fbi.x != 1) { + printf("Got fbi.x = %u, expected 1.\n", fbi.x); + failures++; + } + + if (fbi.y != 2) { + printf("Got fbi.y = %u, expected 2.\n", fbi.y); + failures++; + } + + fbi.x = 3; + fbi.y = 17; + + if (fbi.x != 3) { + printf("Got fbi.x = %u, expected 3.\n", fbi.x); + failures++; + } + + if (fbi.y != 17) { + printf("Got fbi.y = %u, expected 17.\n", fbi.y); + failures++; + } +} + +static struct overlap { + field_type x : 6; + field_type y : 6; +} o = {11, 22}; + +/* Tests that bit-fields can share allocation units. */ +static void test_overlap(void) +{ + if (sizeof(struct overlap) != 2) { + printf("Got sizeof(struct overlap) = %zu, expected 2.\n", + sizeof(struct overlap)); + failures++; + } + + if (o.x != 11) { + printf("Got o.x = %u, expected 11.\n", o.x); + failures++; + } + + if (o.y != 22) { + printf("Got o.y = %u, expected 22.\n", o.y); + failures++; + } + + o.x = 33; + o.y = 44; + + if (o.x != 33) { + printf("Got o.x = %u, expected 33.\n", o.x); + failures++; + } + + if (o.y != 44) { + printf("Got o.y = %u, expected 44.\n", o.y); + failures++; + } +} + +static struct overlap_with_char { + field_type x : 6; + field_type y : 6; + field_type z; +} oi = {11, 22, 33}; + +static void test_overlap_with_char(void) +{ + /* First two fields in 2 bytes, then another 1 byte. */ + if (sizeof(struct overlap_with_char) != 3) { + printf("Got sizeof(struct overlap_with_char) = %zu, expected 3.\n", + sizeof(struct overlap_with_char)); + failures++; + } + + if (oi.x != 11) { + printf("Got oi.x = %u, expected 11.\n", oi.x); + failures++; + } + + if (oi.y != 22) { + printf("Got oi.y = %u, expected 22.\n", oi.y); + failures++; + } + + if (oi.z != 33) { + printf("Got oi.z = %u, expected 33.\n", oi.z); + failures++; + } + + oi.x = 44; + oi.y = 55; + oi.z = 66; + + if (oi.x != 44) { + printf("Got oi.x = %u, expected 44.\n", oi.x); + failures++; + } + + if (oi.y != 55) { + printf("Got oi.y = %u, expected 55.\n", oi.y); + failures++; + } + + if (oi.z != 66) { + printf("Got oi.z = %u, expected 66.\n", oi.z); + failures++; + } +} + +static struct full_width { + field_type x : 8; + field_type y : 8; +} fw = {255, 17}; + +static void test_full_width(void) +{ + if (sizeof(struct full_width) != 2) { + printf("Got sizeof(struct full_width) = %zu, expected 2.\n", + sizeof(struct full_width)); + failures++; + } + + if (fw.x != 255) { + printf("Got fw.x = %u, expected 255.\n", fw.x); + failures++; + } + + if (fw.y != 17) { + printf("Got fw.y = %u, expected 17.\n", fw.y); + failures++; + } + + fw.x = 42; + fw.y = 255; + + if (fw.x != 42) { + printf("Got fw.x = %u, expected 42.\n", fw.x); + failures++; + } + + if (fw.y != 255) { + printf("Got fw.y = %u, expected 255.\n", fw.y); + failures++; + } +} + +static struct aligned_end { + field_type : 2; + field_type x : 6; + /* y crosses a byte boundary, but fits in a byte when shifted. */ + field_type : 6; + field_type y : 7; +} ae = {63, 17}; + +static void test_aligned_end(void) +{ + if (sizeof(struct aligned_end) != 3) { + printf("Got sizeof(struct aligned_end) = %zu, expected 3.\n", + sizeof(struct aligned_end)); + failures++; + } + + if (ae.x != 63) { + printf("Got ae.x = %u, expected 63.\n", ae.x); + failures++; + } + + if (ae.y != 17) { + printf("Got ae.y = %u, expected 17.\n", ae.y); + failures++; + } + + ae.x = 42; + ae.y = 127; + + if (ae.x != 42) { + printf("Got ae.x = %u, expected 42.\n", ae.x); + failures++; + } + + if (ae.y != 127) { + printf("Got ae.y = %u, expected 127.\n", ae.y); + failures++; + } + +} + +int main(void) +{ + test_four_bits(); + test_four_bits_with_char(); + test_overlap(); + test_overlap_with_char(); + test_full_width(); + test_aligned_end(); + printf("failures: %u\n", failures); + return failures; +} diff --git a/test/val/bitfield-packing-long.c b/test/val/bitfield-packing-long.c new file mode 100644 index 000000000..fcc8eb7fe --- /dev/null +++ b/test/val/bitfield-packing-long.c @@ -0,0 +1,315 @@ +/* + Copyright 2020-2022 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests of long bit-field packing and typedef works with them; see issues below + - packing: https://github.com/cc65/cc65/issues/1054 + - typedef: https://github.com/cc65/cc65/pull/1662 + - long bit-field support: https://github.com/cc65/cc65/issues/1131 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +typedef unsigned long field_type; + +static struct four_bits { + field_type x : 4; +} fb = {1}; + +static void test_four_bits(void) +{ + if (sizeof(struct four_bits) != 1) { + printf("Got sizeof(struct four_bits) = %zu, expected 1.\n", + sizeof(struct four_bits)); + failures++; + } + + if (fb.x != 1) { + printf("Got fb.x = %u, expected 1.\n", fb.x); + failures++; + } + + fb.x = 3; + + if (fb.x != 3) { + printf("Got fb.x = %u, expected 3.\n", fb.x); + failures++; + } +} + +/* + Logic is somewhat diferent for bit-fields that end a struct vs + having additional fields. +*/ + +static struct four_bits_with_long { + field_type x : 4; + field_type y; +} fbi = {1, 2}; + +static void test_four_bits_with_long(void) +{ + /* The first 4-bit bit-field just takes one byte, so the size is 5. */ + if (sizeof(struct four_bits_with_long) != 5) { + printf("Got sizeof(struct four_bits_with_long) = %zu, expected 5.\n", + sizeof(struct four_bits_with_long)); + failures++; + } + + if (fbi.x != 1) { + printf("Got fbi.x = %u, expected 1.\n", fbi.x); + failures++; + } + + if (fbi.y != 2) { + printf("Got fbi.y = %lu, expected 2.\n", fbi.y); + failures++; + } + + fbi.x = 3; + fbi.y = 65537; + + if (fbi.x != 3) { + printf("Got fbi.x = %u, expected 3.\n", fbi.x); + failures++; + } + + if (fbi.y != 65537) { + printf("Got fbi.y = %lu, expected 65537.\n", fbi.y); + failures++; + } +} + +static struct overlap { + field_type x : 10; + field_type y : 10; +} o = {11, 22}; + +/* Tests that bit-fields can share allocation units. */ +static void test_overlap(void) +{ + if (sizeof(struct overlap) != 3) { + printf("Got sizeof(struct overlap) = %zu, expected 3.\n", + sizeof(struct overlap)); + failures++; + } + + if (o.x != 11) { + printf("Got o.x = %u, expected 11.\n", o.x); + failures++; + } + + if (o.y != 22) { + printf("Got o.y = %u, expected 22.\n", o.y); + failures++; + } + + o.x = 33; + o.y = 44; + + if (o.x != 33) { + printf("Got o.x = %u, expected 33.\n", o.x); + failures++; + } + + if (o.y != 44) { + printf("Got o.y = %u, expected 44.\n", o.y); + failures++; + } +} + +static struct overlap_with_long { + field_type x : 10; + field_type y : 10; + field_type z; +} oi = {111, 222, 333}; + +static void test_overlap_with_long(void) +{ + /* First two fields in 3 bytes, then another 4 bytes. */ + if (sizeof(struct overlap_with_long) != 7) { + printf("Got sizeof(struct overlap_with_long) = %zu, expected 7.\n", + sizeof(struct overlap_with_long)); + failures++; + } + + if (oi.x != 111) { + printf("Got oi.x = %u, expected 111.\n", oi.x); + failures++; + } + + if (oi.y != 222) { + printf("Got oi.y = %u, expected 222.\n", oi.y); + failures++; + } + + if (oi.z != 333) { + printf("Got oi.z = %u, expected 333.\n", oi.z); + failures++; + } + + oi.x = 444; + oi.y = 555; + oi.z = 4294967295; + + if (oi.x != 444) { + printf("Got oi.x = %u, expected 444.\n", oi.x); + failures++; + } + + if (oi.y != 555) { + printf("Got oi.y = %u, expected 555.\n", oi.y); + failures++; + } + + if (oi.z != 4294967295) { + printf("Got oi.z = %lu, expected 4294967295.\n", oi.z); + failures++; + } +} + +static struct full_width { + field_type x : 8; + field_type y : 16; + field_type z : 32; +} fw = {255, 17, 1}; + +static void test_full_width(void) +{ + if (sizeof(struct full_width) != 7) { + printf("Got sizeof(struct full_width) = %zu, expected 7.\n", + sizeof(struct full_width)); + failures++; + } + + if (fw.x != 255) { + printf("Got fw.x = %u, expected 255.\n", fw.x); + failures++; + } + + if (fw.y != 17) { + printf("Got fw.y = %u, expected 17.\n", fw.y); + failures++; + } + + if (fw.z != 1) { + printf("Got fw.z = %lu, expected 1.\n", fw.z); + failures++; + } + + fw.x = 42; + fw.y = 1023; + fw.z = 65537; + + if (fw.x != 42) { + printf("Got fw.x = %u, expected 42.\n", fw.x); + failures++; + } + + if (fw.y != 1023) { + printf("Got fw.y = %u, expected 1023.\n", fw.y); + failures++; + } + + if (fw.z != 65537) { + printf("Got fw.z = %lu, expected 65537.\n", fw.z); + failures++; + } +} + +static struct aligned_end { + field_type : 2; + field_type x : 6; + field_type : 3; + field_type y : 13; + field_type : 14; + field_type z : 18; + /* w crosses a byte boundary, but fits in a byte when shifted. */ + field_type : 6; + field_type w : 7; +} ae = {63, 17, 1, 100}; + +static void test_aligned_end(void) +{ + if (sizeof(struct aligned_end) != 9) { + printf("Got sizeof(struct aligned_end) = %zu, expected 9.\n", + sizeof(struct aligned_end)); + failures++; + } + + if (ae.x != 63) { + printf("Got ae.x = %u, expected 63.\n", ae.x); + failures++; + } + + if (ae.y != 17) { + printf("Got ae.y = %u, expected 17.\n", ae.y); + failures++; + } + + if (ae.z != 1) { + printf("Got ae.z = %lu, expected 1.\n", ae.z); + failures++; + } + + if (ae.w != 100) { + printf("Got ae.w = %u, expected 100.\n", ae.w); + failures++; + } + + ae.x = 42; + ae.y = 1023; + ae.z = 262143; + ae.w = 66; + + if (ae.x != 42) { + printf("Got ae.x = %u, expected 42.\n", ae.x); + failures++; + } + + if (ae.y != 1023) { + printf("Got ae.y = %u, expected 1023.\n", ae.y); + failures++; + } + + if (ae.z != 262143) { + printf("Got ae.z = %lu, expected 262143.\n", ae.z); + failures++; + } + + if (ae.w != 66) { + printf("Got ae.w = %u, expected 66.\n", ae.w); + failures++; + } +} + +int main(void) +{ + test_four_bits(); + test_four_bits_with_long(); + test_overlap(); + test_overlap_with_long(); + test_full_width(); + test_aligned_end(); + printf("failures: %u\n", failures); + return failures; +} diff --git a/test/val/bitfield.c b/test/val/bitfield-packing.c similarity index 93% rename from test/val/bitfield.c rename to test/val/bitfield-packing.c index 1de19777a..5786d6906 100644 --- a/test/val/bitfield.c +++ b/test/val/bitfield-packing.c @@ -1,5 +1,5 @@ /* - Copyright 2020 The cc65 Authors + Copyright 2020-2022 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -19,7 +19,9 @@ */ /* - Tests of bit-field packing; see https://github.com/cc65/cc65/issues/1054 + Tests of int bit-field packing and typedef works with them; see issues below + - packing issue: https://github.com/cc65/cc65/issues/1054 + - typedef issue: https://github.com/cc65/cc65/pull/1662 */ #include <stdio.h> @@ -83,15 +85,15 @@ static void test_four_bits_with_int(void) } fbi.x = 3; - fbi.y = 17; + fbi.y = 257; if (fbi.x != 3) { printf("Got fbi.x = %u, expected 3.\n", fbi.x); failures++; } - if (fbi.y != 17) { - printf("Got fbi.y = %u, expected 17.\n", fbi.y); + if (fbi.y != 257) { + printf("Got fbi.y = %u, expected 257.\n", fbi.y); failures++; } } @@ -166,7 +168,7 @@ static void test_overlap_with_int(void) oi.x = 444; oi.y = 555; - oi.z = 666; + oi.z = 65535; if (oi.x != 444) { printf("Got oi.x = %u, expected 444.\n", oi.x); @@ -178,8 +180,8 @@ static void test_overlap_with_int(void) failures++; } - if (oi.z != 666) { - printf("Got oi.z = %u, expected 666.\n", oi.z); + if (oi.z != 65535) { + printf("Got oi.z = %u, expected 65535.\n", oi.z); failures++; } } diff --git a/test/val/bitfield-plain.c b/test/val/bitfield-plain.c new file mode 100644 index 000000000..735f3dc87 --- /dev/null +++ b/test/val/bitfield-plain.c @@ -0,0 +1,180 @@ +/* + Copyright 2020-2022 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests that plain bit-fields are unsigned; see issues below + - unsigned integer types by default: https://github.com/cc65/cc65/issues/1095 + - char bit-field support: https://github.com/cc65/cc65/issues/1047 + - long bit-field support: https://github.com/cc65/cc65/issues/1131 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +static struct plain_ints { + int x : 4; + int y : 10; +} pi = {15, 700}; + +static void test_plain_int_bitfields (void) +{ + if (pi.x != 15) { + printf ("Got pi.x = %ld, expected 15.\n", (long)pi.x); + failures++; + } + if (pi.y != 700) { + printf ("Got pi.y = %ld, expected 700.\n", (long)pi.y); + failures++; + } + + pi.x = 3; + pi.y = 1023; + + if (pi.x != 3) { + printf ("Got pi.x = %ld, expected 3.\n", (long)pi.x); + failures++; + } + if (pi.y != 1023) { + printf ("Got pi.y = %ld, expected 1023.\n", (long)pi.y); + failures++; + } +} + +static struct plain_shorts { + short x : 4; + short y : 10; +} ps = {15, 700}; + +static void test_plain_short_bitfields (void) +{ + if (ps.x != 15) { + printf ("Got ps.x = %ld, expected 15.\n", (long)ps.x); + failures++; + } + if (ps.y != 700) { + printf ("Got ps.y = %ld, expected 700.\n", (long)ps.y); + failures++; + } + + ps.x = 3; + ps.y = 1023; + + if (ps.x != 3) { + printf ("Got ps.x = %ld, expected 3.\n", (long)ps.x); + failures++; + } + if (ps.y != 1023) { + printf ("Got ps.y = %ld, expected 1023.\n", (long)ps.y); + failures++; + } +} + +static struct plain_chars { + char x : 4; +} pc = {15}; + +static void test_plain_char_bitfields (void) +{ + if (pc.x != 15) { + printf ("Got pc.x = %ld, expected 15.\n", (long)pc.x); + failures++; + } + + pc.x = 3; + + if (pc.x != 3) { + printf ("Got pc.x = %ld, expected 3.\n", (long)pc.x); + failures++; + } +} + +static struct plain_longs { + long x : 4; + long y : 10; + long z : 18; +} pl = {15, 700, 200000}; + +static void test_plain_long_bitfields (void) +{ + if (pl.x != 15) { + if (pl.x < 0) { + printf ("Got pl.x = %ld, expected 15.\n", (long)pl.x); + } else { + printf ("Got pl.x = %lu, expected 15.\n", (unsigned long)pl.x); + } + failures++; + } + if (pl.y != 700) { + if (pl.y < 0) { + printf ("Got pl.y = %ld, expected 700.\n", (long)pl.y); + } else { + printf ("Got pl.y = %lu, expected 700.\n", (unsigned long)pl.y); + } + failures++; + } + if (pl.z != 200000) { + if (pl.z < 0) { + printf ("Got pl.z = %ld, expected 200000.\n", (long)pl.z); + } else { + printf ("Got pl.z = %lu, expected 200000.\n", (unsigned long)pl.z); + } + failures++; + } + + pl.x = 3; + pl.y = 1023; + pl.z = 262143; + + if (pl.x != 3) { + if (pl.x < 0) { + printf ("Got pl.x = %ld, expected 3.\n", (long)pl.x); + } else { + printf ("Got pl.x = %lu, expected 3.\n", (unsigned long)pl.x); + } + failures++; + } + if (pl.y != 1023) { + if (pl.y < 0) { + printf ("Got pl.y = %ld, expected 1023.\n", (long)pl.y); + } else { + printf ("Got pl.y = %lu, expected 1023.\n", (unsigned long)pl.y); + } + failures++; + } + if (pl.z != 262143) { + if (pl.z < 0) { + printf ("Got pl.z = %ld, expected 262143.\n", (long)pl.z); + } else { + printf ("Got pl.z = %lu, expected 262143.\n", (unsigned long)pl.z); + } + failures++; + } +} + +int main (void) +{ + test_plain_int_bitfields (); + test_plain_short_bitfields (); + test_plain_char_bitfields (); + test_plain_long_bitfields (); + printf ("failures: %u\n", failures); + return failures; +} diff --git a/test/val/bitfield-signed.c b/test/val/bitfield-signed.c new file mode 100644 index 000000000..68f36f92a --- /dev/null +++ b/test/val/bitfield-signed.c @@ -0,0 +1,180 @@ +/* + Copyright 2020-2022 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be signedly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Tests that signed bit-fields are indeed signed; see issues below + - unsigned integer types by default: https://github.com/cc65/cc65/issues/1095 + - char bit-field support: https://github.com/cc65/cc65/issues/1047 + - long bit-field support: https://github.com/cc65/cc65/issues/1131 +*/ + +#include <stdio.h> + +static unsigned char failures = 0; + +static struct signed_ints { + signed int x : 4; + signed int y : 10; +} pi = {-8, -500}; + +static void test_signed_int_bitfields (void) +{ + if (pi.x != -8) { + printf ("Got pi.x = %ld, expected -8.\n", (long)pi.x); + failures++; + } + if (pi.y != -500) { + printf ("Got pi.y = %ld, expected -500.\n", (long)pi.y); + failures++; + } + + pi.x = -3; + pi.y = -512; + + if (pi.x != -3) { + printf ("Got pi.x = %ld, expected -3.\n", (long)pi.x); + failures++; + } + if (pi.y != -512) { + printf ("Got pi.y = %ld, expected -512.\n", (long)pi.y); + failures++; + } +} + +static struct signed_shorts { + signed short x : 4; + signed short y : 10; +} ps = {-8, -500}; + +static void test_signed_short_bitfields (void) +{ + if (ps.x != -8) { + printf ("Got ps.x = %ld, expected -8.\n", (long)ps.x); + failures++; + } + if (ps.y != -500) { + printf ("Got ps.y = %ld, expected -500.\n", (long)ps.y); + failures++; + } + + ps.x = -3; + ps.y = -512; + + if (ps.x != -3) { + printf ("Got ps.x = %ld, expected -3.\n", (long)ps.x); + failures++; + } + if (ps.y != -512) { + printf ("Got ps.y = %ld, expected -512.\n", (long)ps.y); + failures++; + } +} + +static struct signed_chars { + signed char x : 4; +} pc = {-8}; + +static void test_signed_char_bitfields (void) +{ + if (pc.x != -8) { + printf ("Got pc.x = %ld, expected -8.\n", (long)pc.x); + failures++; + } + + pc.x = -3; + + if (pc.x != -3) { + printf ("Got pc.x = %ld, expected -3.\n", (long)pc.x); + failures++; + } +} + +static struct signed_longs { + signed long x : 4; + signed long y : 10; + signed long z : 18; +} pl = {-8, -500, -70000}; + +static void test_signed_long_bitfields (void) +{ + if (pl.x != -8) { + if (pl.x < 0) { + printf ("Got pl.x = %ld, expected -8.\n", (long)pl.x); + } else { + printf ("Got pl.x = %lu, expected -8.\n", (unsigned long)pl.x); + } + failures++; + } + if (pl.y != -500) { + if (pl.y < 0) { + printf ("Got pl.y = %ld, expected -500.\n", (long)pl.y); + } else { + printf ("Got pl.y = %lu, expected -500.\n", (unsigned long)pl.y); + } + failures++; + } + if (pl.z != -70000) { + if (pl.z < 0) { + printf ("Got pl.z = %ld, expected -70000.\n", (long)pl.z); + } else { + printf ("Got pl.z = %lu, expected -70000.\n", (unsigned long)pl.z); + } + failures++; + } + + pl.x = -3; + pl.y = -512; + pl.z = -131072; + + if (pl.x != -3) { + if (pl.x < 0) { + printf ("Got pl.x = %ld, expected -3.\n", (long)pl.x); + } else { + printf ("Got pl.x = %lu, expected -3.\n", (unsigned long)pl.x); + } + failures++; + } + if (pl.y != -512) { + if (pl.y < 0) { + printf ("Got pl.y = %ld, expected -512.\n", (long)pl.y); + } else { + printf ("Got pl.y = %lu, expected -512.\n", (unsigned long)pl.y); + } + failures++; + } + if (pl.z != -131072) { + if (pl.z < 0) { + printf ("Got pl.z = %ld, expected -131072.\n", (long)pl.z); + } else { + printf ("Got pl.z = %lu, expected -131072.\n", (unsigned long)pl.z); + } + failures++; + } +} + +int main (void) +{ + test_signed_int_bitfields (); + test_signed_short_bitfields (); + test_signed_char_bitfields (); + test_signed_long_bitfields (); + printf ("failures: %u\n", failures); + return failures; +} diff --git a/test/val/plain-int-bitfield.c b/test/val/plain-int-bitfield.c deleted file mode 100644 index 4d158eca9..000000000 --- a/test/val/plain-int-bitfield.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright 2020 The cc65 Authors - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/* - Tests that plain int bit-fields are unsigned. -*/ - -#include <stdio.h> - -static unsigned char failures = 0; - -static struct plain_ints { - int x : 4; - int y : 10; -} pi = {15, 700}; - -static void test_plain_int_bitfields (void) -{ - if (pi.x != 15) { - printf ("Got pi.x = %u, expected 15.\n", pi.x); - failures++; - } - if (pi.y != 700) { - printf ("Got pi.y = %u, expected 700.\n", pi.y); - failures++; - } - - pi.x = 3; - pi.y = 1023; - - if (pi.x != 3) { - printf ("Got pi.x = %u, expected 3.\n", pi.x); - failures++; - } - if (pi.y != 1023) { - printf ("Got pi.y = %u, expected 1023.\n", pi.y); - failures++; - } -} - -int main (void) -{ - test_plain_int_bitfields (); - printf ("failures: %u\n", failures); - return failures; -} From 4bb152eb6519a6bdf66df3223558dfeb49be34e3 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 18 Apr 2022 17:43:56 +0200 Subject: [PATCH 1552/2710] remove dangling spaces when changing the checker scripts and/or directly comitting to git head, please make sure to also run the checks first so you don't break the autobuilds --- asminc/atari.mac | 2 +- samples/atari2600/Makefile | 2 +- samples/cbm/Makefile | 2 +- samples/geos/Makefile | 2 +- samples/supervision/Makefile | 2 +- samples/tutorial/Makefile | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/asminc/atari.mac b/asminc/atari.mac index 8e76888d7..3916254d0 100644 --- a/asminc/atari.mac +++ b/asminc/atari.mac @@ -1,5 +1,5 @@ ; Convert characters to screen codes - + ; Helper macro that converts and outputs one character .macro _scrcode char .if (char >= 0) .and (char <= 31) diff --git a/samples/atari2600/Makefile b/samples/atari2600/Makefile index a02ec9e80..bd2ebc41a 100644 --- a/samples/atari2600/Makefile +++ b/samples/atari2600/Makefile @@ -31,7 +31,7 @@ else CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) SP := $(if $(wildcard ../../bin/sp65*),../../bin/sp65,sp65) -endif +endif EXELIST_atari2600 = \ hello diff --git a/samples/cbm/Makefile b/samples/cbm/Makefile index 989710932..03387a061 100644 --- a/samples/cbm/Makefile +++ b/samples/cbm/Makefile @@ -31,7 +31,7 @@ else CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) SP := $(if $(wildcard ../../bin/sp65*),../../bin/sp65,sp65) -endif +endif ifneq ($(filter disk samples.%,$(MAKECMDGOALS)),) ifdef CC65_HOME diff --git a/samples/geos/Makefile b/samples/geos/Makefile index 04de0aaa3..1fc49a873 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -44,7 +44,7 @@ else CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) SP := $(if $(wildcard ../../bin/sp65*),../../bin/sp65,sp65) -endif +endif DIRLIST = grc diff --git a/samples/supervision/Makefile b/samples/supervision/Makefile index 5829b3f01..097329384 100644 --- a/samples/supervision/Makefile +++ b/samples/supervision/Makefile @@ -31,7 +31,7 @@ else CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) SP := $(if $(wildcard ../../bin/sp65*),../../bin/sp65,sp65) -endif +endif EXELIST_supervision = \ hello diff --git a/samples/tutorial/Makefile b/samples/tutorial/Makefile index 67dd84003..eb8627c29 100644 --- a/samples/tutorial/Makefile +++ b/samples/tutorial/Makefile @@ -29,7 +29,7 @@ else CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) -endif +endif EXELIST_atari2600 = \ notavailable From 320312e7cc7da4dacd92215b96b4900baea14f26 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 18 Apr 2022 19:25:48 -0400 Subject: [PATCH 1553/2710] Made the style-check scripts send their file lists to stderr. A complete list will be shown before make shows its error message. There will be less confusion about which lines are in the list. --- .github/checks/lastline.sh | 4 ++-- .github/checks/spaces.sh | 4 ++-- .github/checks/tabs.sh | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/checks/lastline.sh b/.github/checks/lastline.sh index 851a2cfc4..d80d2fb57 100755 --- a/.github/checks/lastline.sh +++ b/.github/checks/lastline.sh @@ -17,9 +17,9 @@ done` cd $OLDCWD if [ x"$FILES"x != xx ]; then - echo "error: found following files that have no newline at the end:" + echo "error: found following files that have no newline at the end:" >&2 for n in $FILES; do - echo $n + echo $n >&2 done exit -1 fi diff --git a/.github/checks/spaces.sh b/.github/checks/spaces.sh index d695beaba..945e9acc3 100755 --- a/.github/checks/spaces.sh +++ b/.github/checks/spaces.sh @@ -10,9 +10,9 @@ FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cf cd $OLDCWD if [ x"$FILES"x != xx ]; then - echo "error: found dangling spaces in the following files:" + echo "error: found dangling spaces in the following files:" >&2 for n in $FILES; do - echo $n + echo $n >&2 done exit -1 fi diff --git a/.github/checks/tabs.sh b/.github/checks/tabs.sh index 16f0280ae..1c32def17 100755 --- a/.github/checks/tabs.sh +++ b/.github/checks/tabs.sh @@ -10,9 +10,9 @@ FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) - cd $OLDCWD if [ x"$FILES"x != xx ]; then - echo "error: found TABs in the following files:" + echo "error: found TABs in the following files:" >&2 for n in $FILES; do - echo $n + echo $n >&2 done exit -1 fi From 964546d44498bf95175e42f39d617841ea15262a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 20 Apr 2022 00:11:24 +0200 Subject: [PATCH 1554/2710] typo --- src/ca65/expr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ca65/expr.h b/src/ca65/expr.h index b18fabb01..c098aa1e2 100644 --- a/src/ca65/expr.h +++ b/src/ca65/expr.h @@ -172,7 +172,7 @@ ExprNode* FuncHiByte (void); /* Handle the .HIBYTE builtin function */ ExprNode* MakeBoundedExpr (ExprNode* Expr, unsigned Size); -/* Force the given expression into a specific size of ForceRange is true */ +/* Force the given expression into a specific size if ForceRange is true */ ExprNode* BoundedExpr (ExprNode* (*ExprFunc) (void), unsigned Size); /* Parse an expression and force it within a given size if ForceRange is true */ From b523d7247162441d84764f866b3bac6892c2c340 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 20 Apr 2022 00:12:03 +0200 Subject: [PATCH 1555/2710] more descriptive error message --- src/ca65/segment.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ca65/segment.c b/src/ca65/segment.c index fa4e97dd0..26b568711 100644 --- a/src/ca65/segment.c +++ b/src/ca65/segment.c @@ -417,7 +417,7 @@ void SegDone (void) if ((F->Len == 1 && ED.AddrSize > ADDR_SIZE_ZP) || (F->Len == 2 && ED.AddrSize > ADDR_SIZE_ABS) || (F->Len == 3 && ED.AddrSize > ADDR_SIZE_FAR)) { - LIError (&F->LI, "Range error"); + LIError (&F->LI, "Range error (Address size %u does not match fragment size %u)", ED.AddrSize, F->Len); } } From 6702b3c85ec041ab1b08a75931c607052e483e15 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 20 Apr 2022 00:13:34 +0200 Subject: [PATCH 1556/2710] special case for evaluating the AND operator, this should fix the problems described in issue #1538 --- src/ca65/studyexpr.c | 58 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/src/ca65/studyexpr.c b/src/ca65/studyexpr.c index 2a345a07c..565a98ecc 100644 --- a/src/ca65/studyexpr.c +++ b/src/ca65/studyexpr.c @@ -43,6 +43,7 @@ /* ca65 */ #include "error.h" +#include "expr.h" #include "segment.h" #include "studyexpr.h" #include "symtab.h" @@ -187,6 +188,57 @@ static void ED_MergeAddrSize (ExprDesc* ED, const ExprDesc* Right) } +static void ED_MergeAddrSizeAND (ExprNode* Expr, ExprDesc* ED, const ExprDesc* Right) +/* Merge the address sizes of two expressions into ED, special case for AND operator */ +{ + int ConstL, ConstR; + long Val, ValR; + + if (ED->AddrSize == ADDR_SIZE_DEFAULT) { + /* If ED is valid, ADDR_SIZE_DEFAULT gets always overridden, otherwise + ** it takes precedence over anything else. + */ + if (ED_IsValid (ED)) { + ED->AddrSize = Right->AddrSize; + } + } else if (Right->AddrSize == ADDR_SIZE_DEFAULT) { + /* If Right is valid, ADDR_SIZE_DEFAULT gets always overridden, + ** otherwise it takes precedence over anything else. + */ + if (!ED_IsValid (Right)) { + ED->AddrSize = Right->AddrSize; + } + } else { + /* Neither ED nor Right has a default address size, use the smaller of + ** the two. + */ + if (Right->AddrSize < ED->AddrSize) { + ED->AddrSize = Right->AddrSize; + } + } + /* Check if either side of the expression is constant */ + ConstL = IsConstExpr (Expr->Left, &Val); + ConstR = IsConstExpr (Expr->Right, &ValR); + if (!ConstL && !ConstR) { + /* If neither part of the expression is constant, the above is all we can do */ + return; + } + /* Use the constant side of the expression */ + if (ConstR) { + Val = ValR; + } + /* Figure out the size of the constant value and use that as expression size */ + if (IsByteRange (Val)) { + ED->AddrSize = ADDR_SIZE_ZP; + } else if (IsWordRange (Val)) { + ED->AddrSize = ADDR_SIZE_ABS; + } else if (IsFarRange (Val)) { + ED->AddrSize = ADDR_SIZE_FAR; + } else { + ED->AddrSize = ADDR_SIZE_DEFAULT; + } +} + static ED_SymRef* ED_FindSymRef (ExprDesc* ED, SymEntry* Sym) /* Find a symbol reference and return it. Return NULL if the reference does @@ -489,7 +541,11 @@ static void StudyBinaryExpr (ExprNode* Expr, ExprDesc* D) /* Merge references and update address size */ ED_MergeRefs (D, &Right); - ED_MergeAddrSize (D, &Right); + if (Expr->Op == EXPR_AND) { + ED_MergeAddrSizeAND (Expr, D, &Right); + } else { + ED_MergeAddrSize (D, &Right); + } } From 501da2de2b97ad1eeda72a0182fb76ff1ae7ca59 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 20 Apr 2022 12:53:34 +0200 Subject: [PATCH 1557/2710] Also handle the case when the non constant side of the AND expression is known to have a smaller size than the constant side of the expression. --- src/ca65/studyexpr.c | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/ca65/studyexpr.c b/src/ca65/studyexpr.c index 565a98ecc..463d00c98 100644 --- a/src/ca65/studyexpr.c +++ b/src/ca65/studyexpr.c @@ -192,6 +192,7 @@ static void ED_MergeAddrSizeAND (ExprNode* Expr, ExprDesc* ED, const ExprDesc* R /* Merge the address sizes of two expressions into ED, special case for AND operator */ { int ConstL, ConstR; + int Size, ConstSize; long Val, ValR; if (ED->AddrSize == ADDR_SIZE_DEFAULT) { @@ -223,19 +224,33 @@ static void ED_MergeAddrSizeAND (ExprNode* Expr, ExprDesc* ED, const ExprDesc* R /* If neither part of the expression is constant, the above is all we can do */ return; } - /* Use the constant side of the expression */ + /* We start assuming the left side is constant, left value is in Val, right + size in Size */ + Size = Right->AddrSize; + /* Now check if the right side is constant, and if so put the right value + into Val and the Left size into Size. */ if (ConstR) { Val = ValR; + Size = ED->AddrSize; } - /* Figure out the size of the constant value and use that as expression size */ + /* Figure out the size of the constant value */ if (IsByteRange (Val)) { - ED->AddrSize = ADDR_SIZE_ZP; + ConstSize = ADDR_SIZE_ZP; } else if (IsWordRange (Val)) { - ED->AddrSize = ADDR_SIZE_ABS; + ConstSize = ADDR_SIZE_ABS; } else if (IsFarRange (Val)) { - ED->AddrSize = ADDR_SIZE_FAR; + ConstSize = ADDR_SIZE_FAR; } else { - ED->AddrSize = ADDR_SIZE_DEFAULT; + ConstSize = ADDR_SIZE_DEFAULT; + } + + if (Size == ADDR_SIZE_DEFAULT) { + ED->AddrSize = ConstSize; + } else if (ConstSize == ADDR_SIZE_DEFAULT) { + ED->AddrSize = Size; + } else { + /* use the smaller of the two sizes */ + ED->AddrSize = (ConstSize < Size) ? ConstSize : Size; } } From 623d7634578ff7ef6e66005df62f77e6de49ca0e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 20 Apr 2022 14:50:42 +0200 Subject: [PATCH 1558/2710] added a testprogram to check for some of the edge cases --- test/asm/Makefile | 2 +- test/asm/readme.txt | 7 +++ test/asm/val/Makefile | 58 +++++++++++++++++++ test/asm/val/bug1538.s | 99 ++++++++++++++++++++++++++++++++ test/asm/val/sim6502-asmtest.cfg | 35 +++++++++++ 5 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 test/asm/val/Makefile create mode 100644 test/asm/val/bug1538.s create mode 100644 test/asm/val/sim6502-asmtest.cfg diff --git a/test/asm/Makefile b/test/asm/Makefile index b35c30c9f..82a0ba0e9 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -12,7 +12,7 @@ endif WORKDIR = ../testwrk/asm -SUBDIRS = cpudetect opcodes listing +SUBDIRS = cpudetect opcodes listing val .PHONY: all continue mostlyclean clean diff --git a/test/asm/readme.txt b/test/asm/readme.txt index 18354bb47..787f2951e 100644 --- a/test/asm/readme.txt +++ b/test/asm/readme.txt @@ -17,3 +17,10 @@ Overall tests: -------------- These go into listing/. Refer to listing/readme.txt + +Val: +---- + +Works very much like the /val directory used to test the compiler - individual +tests are run in the simulator and should exit with an exit code of 0 when they +pass, or either -1 or a number indicating what part of the test failed on error. diff --git a/test/asm/val/Makefile b/test/asm/val/Makefile new file mode 100644 index 000000000..01094b0cd --- /dev/null +++ b/test/asm/val/Makefile @@ -0,0 +1,58 @@ +# Makefile for the regression tests that return an error code on failure + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + S = $(subst /,\,/) + NULLDEV = nul: + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /s /q $(subst /,\,$1) +else + S = / + NULLDEV = /dev/null + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +ifdef QUIET + .SILENT: + NULLOUT = >$(NULLDEV) + NULLERR = 2>$(NULLDEV) +endif + +SIM65FLAGS = -x 5000000000 + +CA65 := $(if $(wildcard ../../../bin/ca65*),..$S..$S..$Sbin$Sca65,ca65) +LD65 := $(if $(wildcard ../../../bin/ld65*),..$S..$S..$Sbin$Sld65,ld65) +SIM65 := $(if $(wildcard ../../../bin/sim65*),..$S..$S..$Sbin$Ssim65,sim65) + +WORKDIR = ../../testwrk/asm/val + +.PHONY: all clean + +SOURCES := $(wildcard *.s) +TESTS = $(SOURCES:%.s=$(WORKDIR)/%.6502.prg) +TESTS += $(SOURCES:%.s=$(WORKDIR)/%.65c02.prg) + +all: $(TESTS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +define PRG_template + +$(WORKDIR)/%.$1.prg: %.s | $(WORKDIR) + $(if $(QUIET),echo asm/val/$$*.$1.prg) + $(CA65) -t sim$1 -o $$(@:.prg=.o) $$< $(NULLERR) + $(LD65) -C sim6502-asmtest.cfg -o $$@ $$(@:.prg=.o) sim$1.lib $(NULLERR) + $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) + +endef # PRG_template + +$(eval $(call PRG_template,6502)) +$(eval $(call PRG_template,65c02)) + +clean: + @$(call RMDIR,$(WORKDIR)) diff --git a/test/asm/val/bug1538.s b/test/asm/val/bug1538.s new file mode 100644 index 000000000..ca9a8b6e5 --- /dev/null +++ b/test/asm/val/bug1538.s @@ -0,0 +1,99 @@ + + .macpack longbranch + + .import _exit + .export _main + +offset1 = ($123456 + ((.bank(_main)) * $2345)) ; should produce $123456 + ($23 * $2345) = 1706c5 + +_main: + ldx #1 ; test counter + + ;--------------------------------------------------------------------- + ; first check if we can still force an 16bit address although we are + ; ANDing with a 8bit value +test1: +test1a: bit a:$1234 & $ff ; should produce 00 34 + lda test1a+1 + cmp #$34 + jne exiterror + + inx + lda test1a+2 + cmp #$00 + jne exiterror + + inx +test1b: bit a:$34 & $ff ; should produce 00 34 + lda test1b+1 + cmp #$34 + jne exiterror + + inx + lda test1b+2 + cmp #$00 + jne exiterror + + ;--------------------------------------------------------------------- + ; the original bug report, use an expression that contains a non constant + ; part (.bank(_main)) and limit it to 8bit size by ANDing with $ff +test2: + inx + lda #(offset1 >> 0) & $ff + cmp #$c5 + jne exiterror + + inx + lda #(offset1 >> 8) & $ff + cmp #$06 + jne exiterror + + inx + lda #(offset1 >> 16) & $ff + cmp #$17 + jne exiterror + + ;--------------------------------------------------------------------- + ; import a zeropage symbol (1 byte size) and then AND with a constant + ; 16bit value - it should not turn into a 16bit address +test3: + jmp test3chk + .importzp tmp1 +test3a: .byte tmp1 ; verify its 8bit +test3b: .byte tmp1 & $ff ; AND with $ff should work of course +test3c: .byte tmp1 & $ffff ; AND with $ffff should not change size +test3d: .word tmp1 & $ffffff ; AND with $ffffff should not change size +test3chk: + inx + lda test3a + cmp #tmp1 + jne exiterror + + inx + lda test3b + cmp #tmp1 + jne exiterror + + inx + lda test3c + cmp #tmp1 + jne exiterror + + inx + lda test3d + cmp #tmp1 + jne exiterror + + inx + lda test3d+1 + cmp #$00 + jne exiterror + + ;--------------------------------------------------------------------- + ; exit OK + ldx #0 +exiterror: + txa + ldx #0 + jmp _exit + diff --git a/test/asm/val/sim6502-asmtest.cfg b/test/asm/val/sim6502-asmtest.cfg new file mode 100644 index 000000000..a969fb044 --- /dev/null +++ b/test/asm/val/sim6502-asmtest.cfg @@ -0,0 +1,35 @@ +SYMBOLS { + __EXEHDR__: type = import; + __STACKSIZE__: type = weak, value = $0800; # 2k stack +} +MEMORY { + ZP: file = "", start = $0000, size = $0100; + HEADER: file = %O, start = $0000, size = $000C; + MAIN: file = %O, define = yes, start = $0200, size = $FDF0 - __STACKSIZE__, BANK = $23; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + EXEHDR: load = HEADER, type = ro; + STARTUP: load = MAIN, type = ro; + LOWCODE: load = MAIN, type = ro, optional = yes; + ONCE: load = MAIN, type = ro, optional = yes; + CODE: load = MAIN, type = ro; + RODATA: load = MAIN, type = ro; + DATA: load = MAIN, type = rw; + BSS: load = MAIN, 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__; +} From 87d26b68f4c2beb51b8e1cc7fd4f0f0202bcca04 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 20 Apr 2022 14:54:44 +0200 Subject: [PATCH 1559/2710] fix workdir path --- test/asm/val/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/asm/val/Makefile b/test/asm/val/Makefile index 01094b0cd..91dae9afd 100644 --- a/test/asm/val/Makefile +++ b/test/asm/val/Makefile @@ -28,7 +28,7 @@ CA65 := $(if $(wildcard ../../../bin/ca65*),..$S..$S..$Sbin$Sca65,ca65) LD65 := $(if $(wildcard ../../../bin/ld65*),..$S..$S..$Sbin$Sld65,ld65) SIM65 := $(if $(wildcard ../../../bin/sim65*),..$S..$S..$Sbin$Ssim65,sim65) -WORKDIR = ../../testwrk/asm/val +WORKDIR = ../../../testwrk/asm/val .PHONY: all clean From 7c96af75c569140fa82a15565f8ec8d1b83833c2 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 21 Apr 2022 14:50:48 +0200 Subject: [PATCH 1560/2710] const value should never have default size, use 32bit instead --- src/ca65/studyexpr.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ca65/studyexpr.c b/src/ca65/studyexpr.c index 463d00c98..40e9b7aab 100644 --- a/src/ca65/studyexpr.c +++ b/src/ca65/studyexpr.c @@ -241,13 +241,11 @@ static void ED_MergeAddrSizeAND (ExprNode* Expr, ExprDesc* ED, const ExprDesc* R } else if (IsFarRange (Val)) { ConstSize = ADDR_SIZE_FAR; } else { - ConstSize = ADDR_SIZE_DEFAULT; + ConstSize = ADDR_SIZE_LONG; } if (Size == ADDR_SIZE_DEFAULT) { ED->AddrSize = ConstSize; - } else if (ConstSize == ADDR_SIZE_DEFAULT) { - ED->AddrSize = Size; } else { /* use the smaller of the two sizes */ ED->AddrSize = (ConstSize < Size) ? ConstSize : Size; From ba3cd27d30e9976a5a8a5e2e6d076d56f5f09e98 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 09:39:46 +0300 Subject: [PATCH 1561/2710] Add basic conio buffer --- asminc/atari7800.inc | 5 +++++ cfg/atari7800.cfg | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/asminc/atari7800.inc b/asminc/atari7800.inc index a7625aa8a..5b725c1c3 100644 --- a/asminc/atari7800.inc +++ b/asminc/atari7800.inc @@ -6,3 +6,8 @@ .include "atari7800_tia.inc" .include "atari7800_riot.inc" .include "atari7800_maria.inc" + +; constants for the conio implementation +charsperline = 20 +screenrows = 28 + diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 4d20ab0d9..835d0b18f 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -10,7 +10,7 @@ SYMBOLS { __ENCRYPT_BOTTOM__: value = $ff7a, type = export; __ENCRYPT_SIZE__: value = $80, type = export; __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; - __INIT_SIZE__: value = 121, type = export; + __INIT_SIZE__: value = 139, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; From e4c1bf15da59016e3e9d5b49ab5fdf9032824442 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 09:39:55 +0300 Subject: [PATCH 1562/2710] Add basic conio buffer --- libsrc/atari7800/clrscr.s | 31 +++++ libsrc/atari7800/conio.s | 230 ++++++++++++++++++++++++++++++++ libsrc/atari7800/font160.s | 259 +++++++++++++++++++++++++++++++++++++ 3 files changed, 520 insertions(+) create mode 100644 libsrc/atari7800/clrscr.s create mode 100644 libsrc/atari7800/conio.s create mode 100644 libsrc/atari7800/font160.s diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s new file mode 100644 index 000000000..8d695b706 --- /dev/null +++ b/libsrc/atari7800/clrscr.s @@ -0,0 +1,31 @@ + + .include "atari7800.inc" + + .export _clrscr + + .import CURS_X + .import CURS_Y + .import _screen + .import pushax, __bzero + + .code + + .proc _clrscr + + lda #0 + sta CURS_X + sta CURS_Y + lda #<(_screen) + ldx #>(_screen) + jsr pushax + ldx #>(charsperline * screenrows) + lda #<(charsperline * screenrows) + jmp __bzero + + .endproc + +;------------------------------------------------------------------------------- +; force the init constructor to be imported + + .import initconio +conio_init = initconio diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s new file mode 100644 index 000000000..f50b70cfe --- /dev/null +++ b/libsrc/atari7800/conio.s @@ -0,0 +1,230 @@ +; +; 2022-04-02, Karri Kaksonen +; +; The Atari 7800 has only 4k of RAM. So for a generic conio implementation +; the best alternative is to use indirect tile mapping with a character +; frame buffer +; + + .constructor initconio + .include "atari7800.inc" + .import _font160 + .import _get_tv + .import _clrscr + .export _screen + .export _zones + .export _dll + .export _initconio + .export CURS_X, CURS_Y + + .bss +_screen: + .res charsperline * screenrows + + .data +CURS_X: + .byte 0 +CURS_Y: + .byte 0 + +;---------------------------------------------------------------------------- +; Macros used to generate lists + +.macro DLLentry offset, addr + .byte offset + .byte >addr + .byte <addr +.endmacro + +.macro NullHeader offset, zero + .byte offset + .byte zero +.endmacro + +.macro Header addr, palwidth, hpos + .byte <addr + .byte palwidth + .byte >addr + .byte hpos +.endmacro + +.macro XHeader addr, flags, palwidth, hpos + .byte <addr + .byte flags + .byte >addr + .byte palwidth + .byte hpos +.endmacro + +.macro TextZone row + ; Text + .byte <(_screen + row * charsperline) + .byte $60 + .byte >(_screen + row * charsperline) + .byte 12 + .byte 0 + ; Cursor + .byte 127 + .byte 0 + .byte >_font160 + .byte 0 +.endmacro + +;----------------------------------------------------------------------------- +; The Atari 7800 has only 4k of RAM. So for a generic conio implementation +; the best alternative is to use indirect tile mapping with a character +; frame buffer + .data + +_zones: +zone0: TextZone 0 +nh: NullHeader 0, 0 +zone1: TextZone 1 + NullHeader 0, 0 +zone2: TextZone 2 + NullHeader 0, 0 +zone3: TextZone 3 + NullHeader 0, 0 +zone4: TextZone 4 + NullHeader 0, 0 +zone5: TextZone 5 + NullHeader 0, 0 +zone6: TextZone 6 + NullHeader 0, 0 +zone7: TextZone 7 + NullHeader 0, 0 +zone8: TextZone 8 + NullHeader 0, 0 +zone9: TextZone 9 + NullHeader 0, 0 +zone10: TextZone 10 + NullHeader 0, 0 +zone11: TextZone 11 + NullHeader 0, 0 +zone12: TextZone 12 + NullHeader 0, 0 +zone13: TextZone 13 + NullHeader 0, 0 +zone14: TextZone 14 + NullHeader 0, 0 +zone15: TextZone 15 + NullHeader 0, 0 +zone16: TextZone 16 + NullHeader 0, 0 +zone17: TextZone 17 + NullHeader 0, 0 +zone18: TextZone 18 + NullHeader 0, 0 +zone19: TextZone 19 + NullHeader 0, 0 +zone20: TextZone 20 + NullHeader 0, 0 +zone21: TextZone 21 + NullHeader 0, 0 +zone22: TextZone 22 + NullHeader 0, 0 +zone23: TextZone 23 + NullHeader 0, 0 +zone24: TextZone 24 + NullHeader 0, 0 +zone25: TextZone 25 + NullHeader 0, 0 +zone26: TextZone 26 + NullHeader 0, 0 +zone27: TextZone 27 + NullHeader 0, 0 + +_dll: +PALscanlines: ; 25 lines + DLLentry 15, nh + DLLentry 8, nh + +Topscanlines: ; 9 lines + DLLentry 8, nh + +Displaylines: + DLLentry $80+7, zone0 ; NMI interrupt from end of prev zone + DLLentry 7, zone1 + DLLentry 7, zone2 + DLLentry 7, zone3 + DLLentry 7, zone4 + DLLentry 7, zone5 + DLLentry 7, zone6 + DLLentry 7, zone7 + DLLentry 7, zone8 + DLLentry 7, zone9 + DLLentry 7, zone10 + DLLentry 7, zone11 + DLLentry 7, zone12 + DLLentry 7, zone13 + DLLentry 7, zone14 + DLLentry 7, zone15 + DLLentry 7, zone16 + DLLentry 7, zone17 + DLLentry 7, zone18 + DLLentry 7, zone19 + DLLentry 7, zone20 + DLLentry 7, zone21 + DLLentry 7, zone22 + DLLentry 7, zone23 + DLLentry 7, zone24 + DLLentry 7, zone25 + DLLentry 7, zone26 + DLLentry 7, zone27 + +Bottomscanlines: + DLLentry $80+15, nh ; NMI interrupt at end of display + DLLentry 9, nh + DLLentry 15, nh + DLLentry 8, nh + +;----------------------------------------------------------------------------- +; Set up the screen to 320a mode +; + .segment "ONCE" + +CTRL_MODE160 .set 0 +CTRL_MODEAC .set 3 +CTRL_KANGOFF .set 0 +CTRL_BCBLACK .set 0 +CTRL_CHAR1B .set 0 +CTRL_CHAR2B .set $10 +CTRL_DMAON .set $40 +CTRL_CKOFF .set 0 + +_initconio: +initconio: + jsr _get_tv + bne pal + lda #<Topscanlines + sta DPPL + lda #>Topscanlines + sta DPPH + jmp vblankon +pal: lda #<PALscanlines + sta DPPL + lda #>PALscanlines + sta DPPH + jsr _clrscr +vblankon: + lda MSTAT + bmi vblankon +vblankoff: + lda MSTAT + bpl vblankoff + lda #>_font160 + sta CHBASE + lda #(CTRL_MODE160 | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR2B | CTRL_DMAON | CTRL_CKOFF) + sta CTRL + lda #$00 ; Black background + sta BKGRND + lda #$33 ; Red + sta P0C1 + lda #$c8 ; Green + sta P0C2 + lda #$78 ; Blue + sta P0C3 + lda #$0f ; Cursor gray + sta P1C1 + rts + diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s new file mode 100644 index 000000000..9dbeda92c --- /dev/null +++ b/libsrc/atari7800/font160.s @@ -0,0 +1,259 @@ + .export _font160 + .rodata +_font160: + .byte $0, $0, $0, $0, $41, $41, $14, $0 + .byte $0, $0, $0, $0, $1, $40, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $82, $82, $28, $0, $0, $0, $0, $0 + .byte $2, $80, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $c3, $c3, $3c, $0 + .byte $0, $0, $0, $0, $3, $c0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $15, $15 + .byte $0, $0, $5, $0, $11, $44, $5, $0 + .byte $0, $0, $5, $0, $1, $40, $15, $50 + .byte $55, $50, $55, $50, $15, $40, $1, $54 + .byte $15, $40, $15, $40, $5, $0, $15, $40 + .byte $15, $0, $50, $50, $55, $50, $5, $50 + .byte $55, $40, $55, $54, $55, $0, $5, $54 + .byte $50, $50, $15, $40, $15, $40, $54, $14 + .byte $55, $54, $50, $14, $50, $14, $5, $40 + .byte $55, $0, $1, $50, $54, $14, $15, $40 + .byte $15, $40, $55, $50, $5, $0, $50, $14 + .byte $50, $14, $15, $40, $55, $54, $a, $0 + .byte $22, $88, $a, $0, $0, $0, $a, $0 + .byte $2, $80, $2a, $a0, $aa, $a0, $aa, $a0 + .byte $2a, $80, $2, $a8, $2a, $80, $2a, $80 + .byte $a, $0, $2a, $80, $2a, $0, $a0, $a0 + .byte $aa, $a0, $a, $a0, $aa, $80, $aa, $a8 + .byte $aa, $0, $a, $a8, $a0, $a0, $2a, $80 + .byte $2a, $80, $a8, $28, $aa, $a8, $a0, $28 + .byte $a0, $28, $a, $80, $aa, $0, $2, $a0 + .byte $a8, $28, $2a, $80, $2a, $80, $aa, $a0 + .byte $a, $0, $a0, $28, $a0, $28, $2a, $80 + .byte $aa, $a8, $f, $0, $33, $cc, $f, $0 + .byte $0, $0, $f, $0, $3, $c0, $3f, $f0 + .byte $ff, $f0, $ff, $f0, $3f, $c0, $3, $fc + .byte $3f, $c0, $3f, $c0, $f, $0, $3f, $c0 + .byte $3f, $0, $f0, $f0, $ff, $f0, $f, $f0 + .byte $ff, $c0, $ff, $fc, $ff, $0, $f, $fc + .byte $f0, $f0, $3f, $c0, $3f, $c0, $fc, $3c + .byte $ff, $fc, $f0, $3c, $f0, $3c, $f, $c0 + .byte $ff, $0, $3, $f0, $fc, $3c, $3f, $c0 + .byte $3f, $c0, $ff, $f0, $f, $0, $f0, $3c + .byte $f0, $3c, $3f, $c0, $ff, $fc, $0, $0 + .byte $0, $0, $0, $0, $5, $50, $5, $0 + .byte $0, $0, $5, $0, $1, $40, $54, $14 + .byte $5, $0, $50, $50, $50, $50, $0, $50 + .byte $50, $50, $50, $50, $5, $0, $50, $50 + .byte $1, $40, $50, $50, $14, $14, $14, $14 + .byte $14, $50, $14, $4, $14, $0, $14, $14 + .byte $50, $50, $5, $0, $50, $50, $14, $14 + .byte $14, $14, $50, $14, $50, $14, $14, $50 + .byte $14, $0, $15, $40, $14, $14, $50, $50 + .byte $5, $0, $50, $50, $15, $40, $54, $54 + .byte $14, $50, $5, $0, $14, $14, $0, $0 + .byte $a, $a0, $a, $0, $0, $0, $a, $0 + .byte $2, $80, $a8, $28, $a, $0, $a0, $a0 + .byte $a0, $a0, $0, $a0, $a0, $a0, $a0, $a0 + .byte $a, $0, $a0, $a0, $2, $80, $a0, $a0 + .byte $28, $28, $28, $28, $28, $a0, $28, $8 + .byte $28, $0, $28, $28, $a0, $a0, $a, $0 + .byte $a0, $a0, $28, $28, $28, $28, $a0, $28 + .byte $a0, $28, $28, $a0, $28, $0, $2a, $80 + .byte $28, $28, $a0, $a0, $a, $0, $a0, $a0 + .byte $2a, $80, $a8, $a8, $28, $a0, $a, $0 + .byte $28, $28, $0, $0, $f, $f0, $f, $0 + .byte $0, $0, $f, $0, $3, $c0, $fc, $3c + .byte $f, $0, $f0, $f0, $f0, $f0, $0, $f0 + .byte $f0, $f0, $f0, $f0, $f, $0, $f0, $f0 + .byte $3, $c0, $f0, $f0, $3c, $3c, $3c, $3c + .byte $3c, $f0, $3c, $c, $3c, $0, $3c, $3c + .byte $f0, $f0, $f, $0, $f0, $f0, $3c, $3c + .byte $3c, $3c, $f0, $3c, $f0, $3c, $3c, $f0 + .byte $3c, $0, $3f, $c0, $3c, $3c, $f0, $f0 + .byte $f, $0, $f0, $f0, $3f, $c0, $fc, $fc + .byte $3c, $f0, $f, $0, $3c, $3c, $0, $0 + .byte $0, $0, $5, $0, $54, $15, $0, $0 + .byte $55, $55, $0, $0, $1, $40, $55, $14 + .byte $5, $0, $14, $0, $0, $50, $55, $54 + .byte $0, $50, $50, $50, $5, $0, $50, $50 + .byte $0, $50, $55, $50, $14, $14, $50, $0 + .byte $14, $14, $14, $40, $14, $40, $50, $54 + .byte $50, $50, $5, $0, $50, $50, $14, $50 + .byte $14, $4, $51, $14, $50, $54, $50, $14 + .byte $14, $0, $51, $50, $14, $50, $1, $50 + .byte $5, $0, $50, $50, $50, $50, $55, $54 + .byte $5, $40, $5, $0, $5, $4, $a, $0 + .byte $a8, $2a, $0, $0, $aa, $aa, $0, $0 + .byte $2, $80, $aa, $28, $a, $0, $28, $0 + .byte $0, $a0, $aa, $a8, $0, $a0, $a0, $a0 + .byte $a, $0, $a0, $a0, $0, $a0, $aa, $a0 + .byte $28, $28, $a0, $0, $28, $28, $28, $80 + .byte $28, $80, $a0, $a8, $a0, $a0, $a, $0 + .byte $a0, $a0, $28, $a0, $28, $8, $a2, $28 + .byte $a0, $a8, $a0, $28, $28, $0, $a2, $a0 + .byte $28, $a0, $2, $a0, $a, $0, $a0, $a0 + .byte $a0, $a0, $aa, $a8, $a, $80, $a, $0 + .byte $a, $8, $f, $0, $fc, $3f, $0, $0 + .byte $ff, $ff, $0, $0, $3, $c0, $ff, $3c + .byte $f, $0, $3c, $0, $0, $f0, $ff, $fc + .byte $0, $f0, $f0, $f0, $f, $0, $f0, $f0 + .byte $0, $f0, $ff, $f0, $3c, $3c, $f0, $0 + .byte $3c, $3c, $3c, $c0, $3c, $c0, $f0, $fc + .byte $f0, $f0, $f, $0, $f0, $f0, $3c, $f0 + .byte $3c, $c, $f3, $3c, $f0, $fc, $f0, $3c + .byte $3c, $0, $f3, $f0, $3c, $f0, $3, $f0 + .byte $f, $0, $f0, $f0, $f0, $f0, $ff, $fc + .byte $f, $c0, $f, $0, $f, $c, $0, $0 + .byte $0, $0, $5, $0, $54, $15, $0, $0 + .byte $55, $55, $0, $0, $1, $40, $51, $54 + .byte $5, $0, $5, $40, $5, $40, $50, $50 + .byte $0, $50, $55, $40, $1, $40, $15, $40 + .byte $15, $50, $50, $50, $15, $50, $50, $0 + .byte $14, $14, $15, $40, $15, $40, $50, $0 + .byte $55, $50, $5, $0, $0, $50, $15, $40 + .byte $14, $0, $55, $54, $51, $54, $50, $14 + .byte $15, $50, $50, $50, $15, $50, $15, $0 + .byte $5, $0, $50, $50, $50, $50, $51, $14 + .byte $5, $40, $15, $40, $1, $40, $a, $0 + .byte $a8, $2a, $0, $0, $aa, $aa, $0, $0 + .byte $2, $80, $a2, $a8, $a, $0, $a, $80 + .byte $a, $80, $a0, $a0, $0, $a0, $aa, $80 + .byte $2, $80, $2a, $80, $2a, $a0, $a0, $a0 + .byte $2a, $a0, $a0, $0, $28, $28, $2a, $80 + .byte $2a, $80, $a0, $0, $aa, $a0, $a, $0 + .byte $0, $a0, $2a, $80, $28, $0, $aa, $a8 + .byte $a2, $a8, $a0, $28, $2a, $a0, $a0, $a0 + .byte $2a, $a0, $2a, $0, $a, $0, $a0, $a0 + .byte $a0, $a0, $a2, $28, $a, $80, $2a, $80 + .byte $2, $80, $f, $0, $fc, $3f, $0, $0 + .byte $ff, $ff, $0, $0, $3, $c0, $f3, $fc + .byte $f, $0, $f, $c0, $f, $c0, $f0, $f0 + .byte $0, $f0, $ff, $c0, $3, $c0, $3f, $c0 + .byte $3f, $f0, $f0, $f0, $3f, $f0, $f0, $0 + .byte $3c, $3c, $3f, $c0, $3f, $c0, $f0, $0 + .byte $ff, $f0, $f, $0, $0, $f0, $3f, $c0 + .byte $3c, $0, $ff, $fc, $f3, $fc, $f0, $3c + .byte $3f, $f0, $f0, $f0, $3f, $f0, $3f, $0 + .byte $f, $0, $f0, $f0, $f0, $f0, $f3, $3c + .byte $f, $c0, $3f, $c0, $3, $c0, $0, $0 + .byte $0, $0, $15, $40, $5, $50, $0, $0 + .byte $0, $0, $0, $0, $1, $40, $50, $54 + .byte $5, $0, $0, $50, $0, $50, $14, $50 + .byte $55, $40, $50, $0, $0, $50, $50, $50 + .byte $50, $50, $50, $50, $14, $14, $50, $0 + .byte $14, $14, $14, $40, $14, $40, $50, $0 + .byte $50, $50, $5, $0, $0, $50, $14, $50 + .byte $14, $0, $55, $54, $55, $14, $50, $14 + .byte $14, $14, $50, $50, $14, $14, $54, $0 + .byte $5, $0, $50, $50, $50, $50, $50, $14 + .byte $14, $50, $50, $50, $40, $50, $2a, $80 + .byte $a, $a0, $0, $0, $0, $0, $0, $0 + .byte $2, $80, $a0, $a8, $a, $0, $0, $a0 + .byte $0, $a0, $28, $a0, $aa, $80, $a0, $0 + .byte $0, $a0, $a0, $a0, $a0, $a0, $a0, $a0 + .byte $28, $28, $a0, $0, $28, $28, $28, $80 + .byte $28, $80, $a0, $0, $a0, $a0, $a, $0 + .byte $0, $a0, $28, $a0, $28, $0, $aa, $a8 + .byte $aa, $28, $a0, $28, $28, $28, $a0, $a0 + .byte $28, $28, $a8, $0, $a, $0, $a0, $a0 + .byte $a0, $a0, $a0, $28, $28, $a0, $a0, $a0 + .byte $80, $a0, $3f, $c0, $f, $f0, $0, $0 + .byte $0, $0, $0, $0, $3, $c0, $f0, $fc + .byte $f, $0, $0, $f0, $0, $f0, $3c, $f0 + .byte $ff, $c0, $f0, $0, $0, $f0, $f0, $f0 + .byte $f0, $f0, $f0, $f0, $3c, $3c, $f0, $0 + .byte $3c, $3c, $3c, $c0, $3c, $c0, $f0, $0 + .byte $f0, $f0, $f, $0, $0, $f0, $3c, $f0 + .byte $3c, $0, $ff, $fc, $ff, $3c, $f0, $3c + .byte $3c, $3c, $f0, $f0, $3c, $3c, $fc, $0 + .byte $f, $0, $f0, $f0, $f0, $f0, $f0, $3c + .byte $3c, $f0, $f0, $f0, $c0, $f0, $0, $0 + .byte $0, $0, $15, $40, $11, $44, $0, $0 + .byte $0, $0, $0, $0, $1, $40, $50, $14 + .byte $15, $0, $50, $50, $50, $50, $5, $50 + .byte $50, $0, $14, $0, $50, $50, $50, $50 + .byte $50, $50, $15, $40, $14, $14, $14, $14 + .byte $14, $50, $14, $4, $14, $4, $14, $14 + .byte $50, $50, $5, $0, $0, $50, $14, $14 + .byte $14, $0, $54, $54, $54, $14, $14, $50 + .byte $14, $14, $50, $50, $14, $14, $50, $50 + .byte $45, $10, $50, $50, $50, $50, $50, $14 + .byte $50, $14, $50, $50, $50, $14, $2a, $80 + .byte $22, $88, $0, $0, $0, $0, $0, $0 + .byte $2, $80, $a0, $28, $2a, $0, $a0, $a0 + .byte $a0, $a0, $a, $a0, $a0, $0, $28, $0 + .byte $a0, $a0, $a0, $a0, $a0, $a0, $2a, $80 + .byte $28, $28, $28, $28, $28, $a0, $28, $8 + .byte $28, $8, $28, $28, $a0, $a0, $a, $0 + .byte $0, $a0, $28, $28, $28, $0, $a8, $a8 + .byte $a8, $28, $28, $a0, $28, $28, $a0, $a0 + .byte $28, $28, $a0, $a0, $8a, $20, $a0, $a0 + .byte $a0, $a0, $a0, $28, $a0, $28, $a0, $a0 + .byte $a0, $28, $3f, $c0, $33, $cc, $0, $0 + .byte $0, $0, $0, $0, $3, $c0, $f0, $3c + .byte $3f, $0, $f0, $f0, $f0, $f0, $f, $f0 + .byte $f0, $0, $3c, $0, $f0, $f0, $f0, $f0 + .byte $f0, $f0, $3f, $c0, $3c, $3c, $3c, $3c + .byte $3c, $f0, $3c, $c, $3c, $c, $3c, $3c + .byte $f0, $f0, $f, $0, $0, $f0, $3c, $3c + .byte $3c, $0, $fc, $fc, $fc, $3c, $3c, $f0 + .byte $3c, $3c, $f0, $f0, $3c, $3c, $f0, $f0 + .byte $cf, $30, $f0, $f0, $f0, $f0, $f0, $3c + .byte $f0, $3c, $f0, $f0, $f0, $3c, $0, $0 + .byte $0, $0, $5, $0, $41, $41, $0, $0 + .byte $0, $0, $0, $0, $1, $40, $15, $50 + .byte $5, $0, $15, $40, $15, $40, $1, $50 + .byte $55, $50, $5, $40, $55, $50, $15, $40 + .byte $15, $40, $5, $0, $55, $50, $5, $50 + .byte $55, $40, $55, $54, $55, $54, $5, $50 + .byte $50, $50, $15, $40, $1, $54, $54, $14 + .byte $55, $0, $50, $14, $50, $14, $5, $40 + .byte $55, $50, $15, $40, $55, $50, $15, $40 + .byte $55, $50, $50, $50, $50, $50, $50, $14 + .byte $50, $14, $50, $50, $55, $54, $a, $0 + .byte $82, $82, $0, $0, $0, $0, $0, $0 + .byte $2, $80, $2a, $a0, $a, $0, $2a, $80 + .byte $2a, $80, $2, $a0, $aa, $a0, $a, $80 + .byte $aa, $a0, $2a, $80, $2a, $80, $a, $0 + .byte $aa, $a0, $a, $a0, $aa, $80, $aa, $a8 + .byte $aa, $a8, $a, $a0, $a0, $a0, $2a, $80 + .byte $2, $a8, $a8, $28, $aa, $0, $a0, $28 + .byte $a0, $28, $a, $80, $aa, $a0, $2a, $80 + .byte $aa, $a0, $2a, $80, $aa, $a0, $a0, $a0 + .byte $a0, $a0, $a0, $28, $a0, $28, $a0, $a0 + .byte $aa, $a8, $f, $0, $c3, $c3, $0, $0 + .byte $0, $0, $0, $0, $3, $c0, $3f, $f0 + .byte $f, $0, $3f, $c0, $3f, $c0, $3, $f0 + .byte $ff, $f0, $f, $c0, $ff, $f0, $3f, $c0 + .byte $3f, $c0, $f, $0, $ff, $f0, $f, $f0 + .byte $ff, $c0, $ff, $fc, $ff, $fc, $f, $f0 + .byte $f0, $f0, $3f, $c0, $3, $fc, $fc, $3c + .byte $ff, $0, $f0, $3c, $f0, $3c, $f, $c0 + .byte $ff, $f0, $3f, $c0, $ff, $f0, $3f, $c0 + .byte $ff, $f0, $f0, $f0, $f0, $f0, $f0, $3c + .byte $f0, $3c, $f0, $f0, $ff, $fc, $0, $0 From ff0ddcb52bf34b8a14c9a29081a75823b8045102 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 10:04:53 +0300 Subject: [PATCH 1563/2710] Add the font160.png --- libsrc/atari7800/font160.png | Bin 0 -> 2990 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 libsrc/atari7800/font160.png diff --git a/libsrc/atari7800/font160.png b/libsrc/atari7800/font160.png new file mode 100644 index 0000000000000000000000000000000000000000..7a0fa1eba62bd3a1fb784b512db586aed1abe1b5 GIT binary patch literal 2990 zcmV;f3sLlmP)<h;3K|Lk000e1NJLTq00aO4000OC0{{R3l`oLa000HDdQ@0+Qek%> zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bvk}M|-{O1%t0$M=mI3Q4jZ{XuQsqUFKZ}Ar4 zuBoLd8l=or!j$vJ?^%Ashgu&+n~m<hSA5jfdE#Nz*T<hLRei1>AAPre*Iqt<#Ap)S z<@MF(>rNBx?b{DNy3_i;y^Qx89`AuZW_}MScV@=J{u(6O`PEMP9>~w@q5H6}p)P*i z<K6KI<$bRApie~g^}T#;Py<T4VIpBZLQ<dWcts%hWSO|@b7l0aVt7`uf?Jc1lmN(g z>3swED?mSjPcN{4K)>>@!RPtzAwOW*KUnL(enIWm;6D(5nOHs};_qJ^uliFu?=y3c z%=5}_Y6qhIt*8fV`WOZs7a*7CXB~&(Y<RZka2%t~8lZgFs0&As6N8m3q_k;L(s}Md zfe@7s8}7`(^0W;xb`G#a;0OmLo49NlU^4g=5j68>EcDFl&wN1xGjBpyCJaUo{eN+k zzkB&#j*=M{B6<Mj2P?$IR|E*-GIy`&1qvwNytN15kK;{${UWR@RYkW8^FV^LuGbK& z(Kl_$!?U1Y!~N|A#rAsuK!mv)f*}C|wUadJRE^n)fa3r`6OpqhFEBu@@kWrWBAtuz z;5#>dWAyap#+`37ya_}!>8Pgxh9<~TZP1VDfQDw1rmeN!tc}vV%`RPg>%CjQCO1t? ztywp-VQzEC(9uR8HpcKVon7F8&AXcqcb}8X#6%NgP4u5=S-fQFYO60>WBHl^`GiJ` z9u^}!=H@LMHnID*J+|+8s2n)O(bG;pcE<5D6Ix42&6YhaM|#dr*50iCbo>X_=*=2G zOx=F=$r@UV*~buc?WA4Kz!)omak~sa(0n<ogH-u4cR8!hD2m1ivR!V<rpp*8)I;2o zKDqnG+`r<jwDGTa<9}kVT<ZQ0<_f6$nYUlCw(mL@4`Z(?yqH!&^(Fb@EWUKC+4^a! zgheaiG$NR3!TkD!Yh8w-UvOcLfP~tyt+@=d?TSf)dyZnMuuoX*K5YQ-sQBBVP}518 z;{dtK;phy+K_nuUzQD$q$80Uxy=B#6rzPe^zmD>A{Kc_svpFFtTmT3eO7yHi6@xNg zYp-*#blm_zq!>`bDq@&=PS_&P8M7YLyH(jH$U?V^F1uL-gc5pi!%*NUeFu83emXVQ zq5%$%CZCPIU=6fVfc2bk48%qKI0EgBc{_5T=yICP9f_0y`Pv)76ziVSMsy6sKm@Y! z!L|Xf9R&~!N|1uvSzGQ?KR28-QcFmo)8!yb0*$2z#<w3sA-C;F`5-4J%^I=mK<Hi# z0~1mPsF$4O7w=?;P&`lRkpsV!oCgTmv`A4Dmc%?!V;kT^3E4m%ca4mS?HTl%zJzvc z$kMjYQJ`zKBxqz!hk&;0=}vp;T!-TTLP1?SL-n;S>;Vq8QWI4IR(a%sND?bwk$Ubb z$7**8(<YYi4#cXGOQ7t7s$9@}Z>SaceuHWasPEAwvBYw35;;r4W1!8ceiWsOMH-@Z ztj&0v3x;r|Gl3h#wvc)S#S6P9H*A%FH6ex#+b<~~ELx|&)Bs7+)n&@$jco!fV%@qq ziIU0zN4gbq!LE?)3QQJQr%@>d>&(u>D?uiBs7SNwhJkc!<L;gf8Zx*MNJRhEa;(!F zaGeU<8V>1d-0FWgTyx4oJbAh;v||qeJMt4TtlwlhAOT>bheP@(REZ5AGwU~dD9;Pm z175bl%`oJim_R|+i4Mkf(Vkm+9RW?lM-Ri()Hk*;;j&iDMr*B89YqW4xv8t{sJ=I} z41kE|f}QjYFNj;pf(pjD0U9h6)xBXR$w&m1+S`HE`jH4Yb;cSuD%*Fv>l2<7uCYk4 z0ygM$Kc?HZwh+ZmEAX!Z7ITd$iEYh6W%nCZ`lT8~t;CM#0lzXz6YdD&%AYWk0+FEr z;xqsN0flKpLr_UWLm+T+Z)Rz1WdHzpoPCiyNW)MRhW|dKA{B>r5OK&*9mI;Lh@)1a z2o*xD(5i#UO<&NYAxUv@6kH1qJ{GGEF3!3-xC(;c1H{qENzp}0JU1z{i1EPXe*E|R zKlh#s_!||bn!#~E)hr{OObFTBst|fb5I#gOh7pOG`kW}H;8|by)Jt_2=ULu;e^#%O zHyPj)h-aB@Si~E|)0>vgd7n7SN|Hi+PCRPR1&JTIF1!53x#+N;XGV=odY(8+EEGFf z?qF6jRN^V(n4)Tw@6WodaNgpqR%)zuPyWJiURzn_I;}w@v4|yz5Fn$5GAghTr(Gk( zM4HYM9{vHxFOo|pR~d{P3#dYc<oLn=;P-6J!sLXT6ixtLFSh+L1cY{hX5F^Gk8Qho z0tB9cE3NIXHh`H=((7$4b_Dco0~gnAP2K}8cYyvUT{0v`3efTw3c&jreNzsI+yXso z?%Z1EIDG&zG^^ANaBv6=7b$z)<K5kzbNjcaHNPK*t8%Z=X&ZL{000kAOjJbx00930 z06qTzdwc((p`m}bv?l-n010qNS#tmY4#WTe4#WYKD-Ig~000McNliru<^%!+FF6@d zB+UQ-1LH|VK~z}7%~$P_D<KRs&;WG6PysWvaQ)Zxuw=7lFPZoELI^vUj|>u$S42Ne zq^6oAeo~dx8e*wc)cqq3eHHEL*DmyH9I@K?AX;p0ZF>_gxm(>JtP|U(a2%d>y&=+b z&)5IVUGmt0{mrAJ?jITG>u68EcA;P6i1on-(PDG^*qd<4-RcHmo!CBw<M6EOEs<Gf zx&CLFQq~UaZ&?#{|Hwk$M0@(R3;h~LY%V^C7MnZQ-h@l;RyPRi#P%s1hi6^yV68x= zTHgfF!%qN=g@7U?7fd?8dI7YRmEd6#SF4y?Nd}JP7;kG!p9!#A0GWG#6F?6?127f> zijZ6|>HO{m&~{dWhe=$mV{RuIIF@6)?IV9Cz-|F#ne$BmJ^TW|SO_RWa>1nYrx!pw zSqUB{akYuLlVspnj`4P`@|ghGH4s3-{Y?P9k|q%bNAs?W0uG=U$V!N6vmyZ+$peLO z_yYkdw|cJ%V(iLWJmfb4^hy#uzqiA?E($n+VjwFay3L9N7$grA!r>1D=-lePDu}Tw zZ}F1f1kfu<@ciB`@46`90E&UEgqSuf5`ZvLAsqfdfXS`itAZF3{~uI65vFELPy!@F z8w9BYQ%C|@1Z{#U;Od~N!B`Ww1|tBJ!U&+20EKzxr}iR1qD>^*4~LGs4sgaHKsK~N zkWMg#B%npmCa40g4yqcA4RLEQ0zfH@0BQ+Pm}h<-F9KxRM7I5K=(y_uXB`3*LmLE{ z1XD-?S_Ex^D&Xp%s=?S2w+15sl)?z0mH>r$=9l#%K%q?(+wcDbXpjM%y|@n_JCHz# zZwk<A9P9R=z%pi*kQkHHZUR7VstZv4N`L_wz}buY@Ua64g!rZaqsOss4+<<}W(k=w z$>Syf<fgj-^{)h2kO4b;_u+MJ^+Skn3b1Az>-M0)GG>-g7?ZMY0zhu23(##*a&D?A zJ}w^#aB_ek&W8ZBicdL!#2g@waVoeacn)!m1@?`!YGPCoT7bKN8NK>+1SE>{Apou7 zQw|_82Z&>w3T_FWLtJBl{UEJ|7*&K8;3{iIuRa|CiQ;?+K&$wa14zsP;uxobTY~2h z*H~b`NUJ4Am7oC0O*;?(@@&;J`I!0hS^T!X-U2|XdXmIOLLqj&1qk0RqIEPUf)T~m z!~wf$2LeEzt$HROGk-pd-`3Y#07%tOk~l~x#ICmh;oC*Dj^RWwqS%@^U^neR0LZgd z&*Wp~&u8)5`g#ihspd%%7YT*f^%fv}yNK4YoCrn~Tk{eCJ^xhiB=9eO^!#(blfb|D k(euA-w#+~GAAk1eA57`mwI1`)d;kCd07*qoM6N<$f@x=T>Hq)$ literal 0 HcmV?d00001 From f5c24be5721a90644bf8079b78d067bb4775e70d Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 10:51:45 +0300 Subject: [PATCH 1564/2710] Fix cursor character --- libsrc/atari7800/conio.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index f50b70cfe..3f19ae02e 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -64,7 +64,7 @@ CURS_Y: .byte 12 .byte 0 ; Cursor - .byte 127 + .byte 254 .byte 0 .byte >_font160 .byte 0 From 646997ed435af5ee742a473d758733d5adb225d2 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 11:47:37 +0300 Subject: [PATCH 1565/2710] Add the build tools for the font --- libsrc/atari7800/buildfont160.py | 30 ++++++++++++++++++++++++++++ libsrc/atari7800/font160.data | Bin 0 -> 8192 bytes libsrc/atari7800/font160flipped.png | Bin 0 -> 2957 bytes 3 files changed, 30 insertions(+) create mode 100644 libsrc/atari7800/buildfont160.py create mode 100644 libsrc/atari7800/font160.data create mode 100644 libsrc/atari7800/font160flipped.png diff --git a/libsrc/atari7800/buildfont160.py b/libsrc/atari7800/buildfont160.py new file mode 100644 index 000000000..bb944e335 --- /dev/null +++ b/libsrc/atari7800/buildfont160.py @@ -0,0 +1,30 @@ +blen = 0 + +def gb(val): + b = val[0] << 6 + b = b + (val[1] << 4) + b = b + (val[2] << 2) + b = b + val[3] + return '$' + hex(b)[2:4] + +def printline(f, val): + f.write(" .byte " + + gb(val[0:4]) + ', ' + + gb(val[4:8]) + ', ' + + gb(val[8:12]) + ', ' + + gb(val[12:16]) + ', ' + + gb(val[16:20]) + ', ' + + gb(val[20:24]) + ', ' + + gb(val[24:28]) + ', ' + + gb(val[28:32]) + '\n') + +fname='font160' +with open(fname + '.data', 'rb') as f: + data = f.read() +fname= fname + '.s' +with open(fname, 'w') as f: + f.write(" .export _font160\n") + f.write(' .rodata\n') + f.write("_font160:\n") + for i in range(0, int(len(data)/32)): + printline(f, data[i * 32:i * 32 + 32]) diff --git a/libsrc/atari7800/font160.data b/libsrc/atari7800/font160.data new file mode 100644 index 0000000000000000000000000000000000000000..79d2d83c3591585b230651e7c8142a130755a331 GIT binary patch literal 8192 zcmeHJ3v%5s2y~MB-?{7$ke@p30iuZoEXyLl5uQBHxxSv~3lH}*l?eIY^`F1M_w#(? z;eM|{{&)T7FYxm`KX|y`Ymon4|M&&IyoTnn=Hz3--(%jf9M*${HI{%xCxKYe=q6^h zx*a+$08OWn=g@-sOf_NkVO1qqMXT24s@^IntK|~D%$(N^r6XGJOE>SAej58?a`G|Z z?=kOK&NmiVrzL=fN@X7#U6m0R8Lnv4z_G=u<R!1q6!}X}r>7YCs-uXyr=Sms6M)*A z8XL79^GFD0#pt;|Osz_KtU39Z@b{Q^EawLctkV)eL#48hjjqawiwsw^Y2esmRq~S8 zXNvr#r_)o6eAQ7z-BZwq#0fy{O^uCOk9i~nvtsnzAEp*4e_6ipb)io}#~vZiiFp9` zgW4U(7dko9n%hna%EI-Q@)ig!iH_sg!ayVT@GDg@QzV!-K(}ii*sL&D44+elP_5<b z>w7Ltxc!+Pd&wfqbHhlt?&1;dIL@+7sE<=0%lXif=s3>ep%x*x?dz~i?c4xe0>={k z7BR7TsfVOiuJ8L2cT9(O+#c%S?&pS)zUD{q9-)g+k;v1Q@#|)QnOb}ElPnu77C`$t zEJK3M4bbi2xD54bzImyK<hgR&Imnn6E{p|M;<5~g*)y>zfLY`+#hDO+!B8aMU7QfB zlO*vFm4J1PZB&AbKn-o+ark%LDrP=>T1cf~_Z$6rKhr3dbD%J{m@|ec;lg#tN?bPg ze+^Smu|QCj$`nrru!4>6E>6I3g;<u5tzaDi{#IuU9&l|i1Q6nN1T#n*y=8KuMSy(O zN^;&$Wo~3X8s`@CPS>V|>yDMUECXWpm|GOMEHb8eI)EQ+e0Ooer9&)$hp-h*Gc4}x z^lFPO5%}74w#kviHhRm{0ZPMlUSN9ohRl#A#W3+&ua(<gcQ;qM7{2G61Q*Ph#A6~w zvPelWGn2ew2%`?xTmmb$><EO<GG=`~C4{)IWF5FoHQ=A@=wA9mI31!6WIYt4vIu8^ zCW5n}O=`a9xX@V{9i$55Mk~^wli@J!PyiI!Kq{7_K**Fw0ABbkL*Q~Jgh*@g7tf!7 zQleONDZlEV=XOTP7hMP>BC^lLN_Na`_ka-N5agm8>CpjRnCg05Dh@gs>qtSct3d~l zXUC)`vH53L*3UWY4c{^V{0WdvQ@|hnagOu2!!e&?KuIif6sUOi%nK)K;ETt5t~tPn z<l2uHf;kCWO87BLJy&s9go;JxKvulFCOzHlfwzeKtPoS8b8rL=pE0}j`<b?n(`P$! zsmOfc;`2h|Wv+{9&4LCctki{IPQuV`v(#9eXeEaAoY5u^D?f<i3W*rTTh%H|iO#_h zG<?SFR%a%YyQ%HRIq+2U{cWe;|K;$WYX)%RbM40q!JLFGBm85Yq~s)vP_f9KGyWft zeA3h1UM0ve5pPwiFeN$%N6_#YdzyuEH?{pZ2Y&n_{mQt@xW;8U4J+~ClGj_xG)6ri z5tJx&HBT_Nr$8|-NhY*eXGB8p25FT9>yX8Z>B#|@!bUvOXPlqIw3O1OE;bw{IT&>q zj!o|V$8QOM1JN7i$>5#?&=MoBDw*KhntmmK=dP!%L^Pb3R!OiJS<XIfikLFbMl$5u z1-beszb#Wf+Z(UDjB8x8fLoor&*Qx}@_I{|#wa5JA!a1XkUEHOkLlNB_rkdpG%s3C zbdRHnPJ<SFl51V!kyelB=I7{mogX^DW5W^1qpS_Lw`M?NKz}8-YvLYQ6k@uTB_g;J zPBZ@CH|r1r4Z5`D#ik*WO+bGqSY^IIX2KQC<Xta)CssavwuP8$X_ccwRpJKMo@<Zb zzD(47r>@EeR~-SsohZEH1+#JblK=q`64I7X?Bsm{(YvrhCIa&etf#c}-Nm^!?W{bo z_XEJ(mE#Gkk~cXMhFkr&WuoRgbyYsNDhUAYMByDTSk0O>e9oFe)p34ZDT69j8g&cw dVIr_O;fi)S5BOUzvE^7FAAz|Gk3fmn`U9J)83h0U literal 0 HcmV?d00001 diff --git a/libsrc/atari7800/font160flipped.png b/libsrc/atari7800/font160flipped.png new file mode 100644 index 0000000000000000000000000000000000000000..a99a13657addb8e2c0ae3797643869ebea4a87ef GIT binary patch literal 2957 zcmV;83v%>{P)<h;3K|Lk000e1NJLTq00aO4000OA0{{R38gFH8000H$dQ@0+Qek%> zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1YuvLrVM{I65^2m&NP$3Y7bzJZVLRCT>==GmT! za4TwQl@`cM5ZC_e&%FM?kCgSQ&0M=`!LRn(Iq>4;_3QVYO1<xIzxwok>A&75F}eg# zdHuC`Jt@%NJ|?^kr}4G_^5+Ztv(Vel&w_GxX1uJ=Mxviz{ZyZY`hLA=cl&JW;Ma3L z18-BFYdnkI7M0ik>vKmnptKq`66P%=<-YsN0y!5;;92iGV;rFc{_Ayj>0=21`QqLO zz@Gv75qx@q{R8@izXzY=86iJlsc)?5_aCTz5B?4Dr;X*^BL4aTP_&=id9KXmnfv8k zR0X2?DC!2A-j>0@0m$W^rf7z%;oa`m(Y!>NpnR2C2HK=f3|8`@N{fP$_WhhRVPfUY zh9~o6x%*s<J5M=0)zc{1q{|Wqlau!)f^L4dh3<X(z279q&WkXV35(H9|39?r-#-3M zyE5m2h;Bgn#tL@v5dq9N%$++%fe^}vw{`>k)*kxHCt*RVV6fdVI~<HMUQ3KdAKH?e z=fiHp^T`F5t!Dv1guNS#f$S?4C26EojM<2Qql2J;<t&v47@*d8!APzm%9pY8*&B0= z?y=lh`E(;Ufrut525!0p$f~tLKUN(YiYBeL*0fpktMwKtTD7UF=}B^7V%3_dnYncf z7q8x2-Q2x<bnb#2*t&M>-g}SWE3i>ut-$y|&)^}Wjy81I@X<$1$Y<8srcRqa`;5g) z7ShDhWy@DzvFX~#6ua)Wb=&sccO<lyk~LduT6*@3ch(+Oe`>$M8a=G>&D0rZ@2sKs zGJ9KsPC99aGcd-Lz_=X-AZR|E6{lMHFn2gBoe>m`VPrepT#F84ps;S@mh{fu2Xnu~ z+tvJ+c;o+K?mE={AIx2#?q}Y<VQrmrZr+T&qVQl^1ksn&Yxc{g#GYfyIiNbNnmZ|C zH7B;F!%N-xa!!TZy9axu?65Vk!FF4=NwCP3Q7y5qCNF$s^1iV_Z0VV{A}TI`H=*y* zYNu&cx>9Y_=1#yEbL`?*&XJY&4g}wG+DzM{)(Fuqhr#Kxdmj84%dWi=njkvcLmJxl z0y39T`l<u^Tk3Oy+3cOm>{&4d`_|Q^4l}?uSBdQb84Va$cEK@iw(CMpzPz;IG(|8{ z&b;nh#zb}*O_4r;H=nSHanw9|scMo8{Rr}Uk4Bao0=(A7PBC=)NWlqE;Y^X`0BWnk zn}LMh;p~!3-QIz*5pabHlyEk+<6^X{uhyoK_K+>U*4cmUEpv2pX^;ezyJX)L6aopj z68^$c1jj*qw}T*9o2w^rhGko=b9O4zppxnxSL0c{6@<r_UDA6%A|!j^coL0V3xWf4 zz$jqtteLT+PSDxv*uF^TXi~rw4$D5lr&Ydz6<rScqiEeW7Y?;KGwHfLlo{5uL3xsm zZmM!}Zp&VB&s=8|B3T4sKkA7y&`=?eW(Y8N=a)h@ffCDeYK*n2I^2`u5IZ0FA?OYi zJRlgafe=FUCf32piNUKzFRPcU8qIA26R3HPqxQa_WS2Amgy4p#5gUm>F32XQ<~Wh0 zxM$^?*Hve~U2_-@Ce^bV56A*yhgZQhi=I4?C+^@9`GC4-iHM2Xpd|MRO%Bv0*UiNC zQ6-^tgDAnJl!ZECRnm>P;jL{JfOdA@K+WLy(kx>K%tU!DN~lJ7COHbSJ#{Ulf@&yA zj1VK6kp)&2q|Rs?@e4;H;N>Z95R<d7vpDKuYZrM4A@s$46$wSYL@Z(S+UP_vqB=N$ zE&`J7f;AUlTLa~eBD6uYgX!a1zmv=<q!(yXn7km589@k>VQYt`5)=uU2lTD>s*Y(R zPER=Nz#N>kdS>7#uZDbnk|{RX%3P8DePb~>64RFtT?d#)qTMI~Xy_@(hBunXkUJ5N z0?QC*27VT5xpYe~Gl+pqcL)aNJJL2X16X~_6wwA=q9HUc#{|SR9LH(-HxX+ggsN+7 zj{pDxglR)VP)S2WAaHVTW@&6?004NLeUUv#!$2IxU(-s9R2=Le;*g;_Sr8R*)G8FA zLZ}s5buhW~3z{?}DK3tJYr(;f#j1mgv#t)Vf*|+-;^^e0=prTlFDbN$@!+^0@9sVB z-T^|h$}}r94rsb<W>QHpmtPgbuLwav1PR1tW*Kvml!ov4x<`PocL|>5f9}uGrxq** z1VrLlW|%hd2J!T!ZE)Tvj<K?=5}y-~nRG$oN3JU#zi}?PEbz>jna#`-$B4yJ7b{)N z%BDs<MI2W(o$`g8$13M7&RVt3+V|uyj285jWv<g4Mhc5qf&>u?>ZqU!oBFCiC&faB z_LDyTA=fXFOCeVUj2sK7L4)l2!T;cQw^ng-!b^%Kfu0w~`4|DhyFjbqIN!&P(>eiy z&%l-5@z<Kb%qQuMjut-x`nQ3L>yD=E0hc?#;FBSnvMU8?3dJJuen#Jv2L^6|-Zihc z_C8J@fGl;Dz5xynfzc9Wulu|^(%sv?XWIS!09-b5o@#co82|tP3{Xr|MF0Q*{{R3z z{{a90{|=bWFaQ7m32;bRa{vGi!~g&e!~vBn4jTXf00(qQO+^Rh1Of;y2w0Eo(f|Mh zlSxEDR7l6ImBEUnIuwSFRV_5q;2ntjVOGJ_z-$F=n7dCwd>`r6Fi#O`6?_Vzw*&W8 z0<{fz|38V<1+(plNjwqp|8o8l5wzD=#X+h`KCQjI=`@~}&->>4`;f--_E}$?XLPlE z`B|s2nmRM%>ZZzeQ#aLuUJN3&nWx##Qd?uVV%2PoGOC_tsf<;O;VoedGuz0wUk$$5 z06_0nT>WzL{n9UupcjWo<JM*Mt2Ev@u6VtAr=4z=RZh-p#_*OfhM8~W$DbD8Yyn^l zJFam%$8j6CR?tg8qz(JF$6eYO0$1X&$1sGU-F7*LI538{gfYxw;ZU0cfK?EImO2VD z)ntrfGwMkRh7`>K!w!&+D8N{SnL<J}?f~F5M4+XPg4}6wPO~}vtOY}g=73`dNJkW4 zyv9r;q1tc&hyz5RrH+Eac?)4+3&YDG7*aF`0y{uDq5u;I%!Zs$wb(8vLp99+fWJ4h zl>z{B>VzmYsma&^05~oRPtbb7Q)M!^+1ALL`l%7$i>xaxumS-7-mP8=0L-ZqqV%E{ z=L-PfxN1B>>lIHYm%**RLEbdat;A7e-)Vsz0Pyz#dsqNqPMr`nY{M2}0RSAg0Z-6+ z!_zrraC>Z#H|@(`04^54Kh;wbKEV<&1$NdD0MpzE6J4;^N@jZjfV|#G25^BXV4&#{ zz}4gTmu5-A7gz$Oz|J}XV46E&q6_v~%j&NHkk@<30Io0v475A~xJCT_)^17o21~#c z*x5h;O!FX2birN^vd0?$<n>W9fE!E!1Lax*uNx^v&{)c&m1l^}Mlg>VASMA|>Z2ym z1d8jn0N|^}Oa@+eQi`DSlt(MC5SxwQ9y35(0>IQqO`r)h*L?xNSDjlNydI<!!4N5r zR^A~t8zDSqfP@5qsgIgK6AWCB1pr?SVG9Mom!Ee4s!Kv@?s?HqkCz(ol-(}WEf$7P zWgy-E{*wV15>Wl}?bjWE?vs#)dtUU@<D~{XXSWM=i-+M;8A$i<uNi<N0X=R%{@ei! zV-nJG&x?L~ywre~>~^7Ui7<RB1L^+ndj=3l;HUwwuLpq6q{=^4to+k#@>y^{1#F#w zRFFPPIR#8t?hgPw1>W8c0KH3<e>t)8FRROE!Tl8QO#*U)^i|3!;QDfZ0N^R`{(b-$ zL#q7SnU#OrLp}@cr$B5IkTaz3Qci&|miq$$Pl5jd@d|0FDrV*a00000NkvXXu0mjf D!48YU literal 0 HcmV?d00001 From ce313922d1e229ec971d59b2123ce64101f303f6 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 11:48:05 +0300 Subject: [PATCH 1566/2710] Change blue to white --- libsrc/atari7800/conio.s | 4 +--- libsrc/atari7800/font160.png | Bin 2990 -> 2978 bytes 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index 3f19ae02e..4955f2406 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -222,9 +222,7 @@ vblankoff: sta P0C1 lda #$c8 ; Green sta P0C2 - lda #$78 ; Blue + lda #$0f ; White sta P0C3 - lda #$0f ; Cursor gray - sta P1C1 rts diff --git a/libsrc/atari7800/font160.png b/libsrc/atari7800/font160.png index 7a0fa1eba62bd3a1fb784b512db586aed1abe1b5..6ad5fdeaf5deb684c3ddf6efff10e7941d3bc7d5 100644 GIT binary patch delta 2955 zcmV;63v~3Z7or!C7=Ho-0000QZ)I)(00rxMR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3 z004N}tyWo*D=7^8=M-}UBq4;3!y-k@4d(chl->RMEwe?8v8ggefyhiHl=$QKEWhDH zom**YqkHcapXSYZ;%3y>$Df*Nd+Lu*d$)eqUOr!9GzqTq`hRQlb)|`R{r18~cUs@K zm+^kW<2}&F%<lo^&dj(uUxP$DzuKw22l9B`bRYIL)Wxsses_FAdH>dX&?ln$`d_{_ zGy_UUF_AEbkkqFhuL$J+SSGIRsTutUW#T`V=hEMi0FdvN_YL5$0R0F)y}<qf{mQ=v zpXa-W{D5WuV1KRu`T^;$!G9qBGO>I{#NR()`atYwkTcK7jMwUB>p-->74?8kAH$&I z0_5_%)=>;U#l1bnQAVA0gYr{%T_~HJ7_4NWMu#RP#dF=X5n|(D!<BinJZ(daowr<` z+AWl9;&Nnw$<0wjE_t7^&@-<;^KBZK`4GA?VK92=|9^{8{_f#_DJ64Xi0A>7AFL1; z^Mm_^QErW1AcXSGn?3-4lsEnLi?AS7FsKjA0}GsWy@psy-?SwU&w_r6>)Q*8o%aBM z2y-iff$SUAPNLMQ8nY1r#{q&SB4=s5zyPW8L6F=;Iv3-?cW%66^z>!r&bJxf1R_+r z7`SnnAb+bhg?_9JXlSZvQ`N4fqp0ib(p%TwyY*{w)5Myobu%00HiwKhbo60k3?I|k z1s<s0-F&$FoLnX*niy-M|3u5;C95r6ec2kz*W8fLZd-TXw#W884<9+OiPMjras14n z5^#!Wq0z%)gvU&1EhSrO_Ou-7IX_u@v-(r{4}YxDn>Buzy8Y~vHMAD9k0I#ViC)gY z7&ijrb{T-6`EphVwZ@mZ%UN|sQYa%xz1);TmoZS-f>@J2x%<Z4zv8Xv_*cB~KQUJ> zb^ix*1=Rh_+b>u<cc0r2W3Mc{m{vjdCHdkkzS>w*duVHfO)KFvBA98x{Q87zU50kQ z;D5p#0SRf?X}Juuor*~|_Z-Et!9Ht^6FLC+uK1qapr%NgBY@oHaC8RZAQBNvUtnX* zFk4Gb*Q~8rXkuRU>qtMxcZa1;b;6=h0T42zXsnGa24%k1SrOQ}ZU7)s3@Bk2F-$!t zY?0^Ovj+0rsvHxnq8*pE?5<)%D7ytN7=H>prJs$St4Aljr;!Z~qb0{dU$6#RX@m8g za16vnJsg2{Wj>BI(C!jy^X$Zu0r@%y!4&JBqGNXq#6SeH@xgWguSEk83`(#Bw^&E+ zU5^`18Z}Euq0{9cO9GA65R4xWLn7;OEIF_yr<Qf^QwKu#Y8aTXWPp0fS$^?Oc7F)P zGfLk%@TTMpAY{{aN<(7Fp0Vpb1~`#IHn5JnNA9Y9K(Fab=<EYo+VMFGbj_9ojjZVq z(D4@C>8v(a@D4yI$ZKb)zUsmmAaInL$P%#1BLgBy?0iLP++B{F-7T!CSi(CHYm;08 zWe2iyLGN9WEAV}VY7MBL(Iv6Pa(`FZIZMK0pv~Dl8d4RTG(_##oAERk4B<*=0yl_l zVd)hVFPxs-a8v@;gcuHNzodY$t-5_6pKQxP?hWvH&`JR<;5DddPe||V>sfMYpiZ2~ zE~%$&&xAvco!C{Pk8H*(13wT8PBP#gi)@^k9)i<EARP#P#)t%)ltA`r`+v#ZLb{}% zTnm}2z)n>J5jVct!L7UGxZv4g0<iGJ2<~mgp*`DSc86`X0yJ(qVoovuC`d`!z~6jA zKp;@FUBd&BP^$D`9iT8e1bTA_idfrwD`Kbzyc1NKE`{p_QvLY4gW|x4VPpoTMxJ0L zy^jNF8dABVFF}toD81CHPk(F^i(!h`s}~%8D~>#C0d4dFg&QGI%*PuN`|yGh?={!B zs$Nj=G%vkDo##wCfz;g-N35<@9J0nXkS#7Vqw)#(Aix7-2wxTwA*yu13N^KJU~G)Q z)I{SNi^Fv=7h+n#3VEfA&VXMCc4oLDUd9U-oC%f$HTFF?#VknZJbw^t`4dm!AePk% zUV#7r0fcEoLr_UWLm+T+Z)Rz1WdHzpoPCi!NW(xJ#b48kMJf(<5OK&*#leE8h@)1a z2o*xD(5i#UrC-pbAxUv@6kH1qek@iUT%2`va1{i>4-iKuCq)-2@qbC7MT`f>{djlp zarX`o8WpBlp>aUdZGSVJOo-Xss@VOC5CnuVim1#iV@{G%@Eu?G2=MhT&a?c_{W*Ho zyv2ZkNIc67(<a^^p5C+#&ilksR+3fXbK)_RE=c^yb;aX1&PA66o*6YW>3QNPu~_V2 zrGr_?)QG2uW2&Z8zL51;<-EmNtJGNQp8SQ8yuPx`b(%v+Vt)}!kRU=q4P{hdBTlPM ziiI@oCw%;au3sXTLas6xITlcb2HEw4|H1EWt-|DlmlR0=T`!LFF${F?0?oSPd>=bb z^8^S!16O+6Uu^(0pQP8@TI>ku+XgPK+nTZmT<!n^PljyDt`wvx6bium8GTa@=)VPe z*1X<Y`#607GDOr>>IOJC1V)OKz3%hwaA$A-o@w>>11IZpi3fkCs{jB13{Xr|MF0Q* z{{R3z{{a90{|=bWFaQ7m0b)x>L;#2d9Y~Xl2O)n5DlYEstSbNj1C>ccK~zY`tyMv4 z<S-EInTa8ofHxrDmz;!83%LsHK=!Ty`9CJ7u&)qv5`Kjt*T8;7Fjs-MS}i*RdyNJU z?Y1#gbyYPHRrK;g`5cDUR@4sdaImAThS73e5o$XQqZ?giEqVv%)JRrYCGW_U4|>*) zuBLytH~Hpq>U>Sz)J;b}`+Ax^*EON`^E8J!)ZU|a3_;K2wb$~FT=}5q{Tv$l_>ga& zmOeJrFa2_gYiyP^a@`Q>xGrm2QxhY4r<BY}(L^Kf$dwOzF|H|pt{om<Hv+6`iE#iZ zDH2TWp!isIhacco1nf$Y0}be+!`JU0Uj%<x)lE<D8v$N-#5e$yGzq3|(tNzW#}Dvo z0(Pw_fChBY;p@-OF9N*om*>xofM|MR8~{p&1XI5lKG8hj2Y3wuyD^kN1G?z&_4n5o z0nro!D!UWl7#<II9MH67tO|4}H7N870ag(d!T2))4m#RiwRW(WvEK;@43CF9PiTMo zGFA;bw4OA2g#fP!ieUVifIu~EuX;au%sB1@B!<VsT^BTC8LI&u#w-TCLI5yA5sW_* zkf@>U)fgA~UPZ1Y8b>DJ3<9d58Xy2r0879W&;aW}u^lYi0R%u5AmHqvnEbpg1e{?C zSY)UvbVT#a1YAHsJ=GHg0199Um;!$qU_EHIgJ(N{0H^{4Tmlr6pLd0T3rqovObw-; zXkD3rD+p+oW`O`e0W1MiKm)7?!*+;l2M_>NfPia)V)FC85O9SlV3FlN0!CFq`T*}3 z4}(H|s{kimHpE%s4punh?qG!gqy#dfy1OM{)-|LL@PY9#DAczK2-0OkTr_{~V1*0r zj$Q~rN+2`p`&$B5(?I&fE@mT8CgN5BNxE!^tHB+taK+sz3IRw7WJdEKilU0A3L*}J zQvyWv%r$Ib_Y5G(0O{Bq0E##xq}vXN1yo>#YMv@)c$|V3AfjikVGF-!07(W&$L9dh z#2F#oZbB@e0xQ(;R58QTl8k=<5j}GaTf{vBNHRb=F$aJl&IsxD3t|D4F+~B7uNwg^ z<~`<|m;A>+fbCm=DrfU%z!q?23(Y!5aE_fTOAJiTuObeQ*?b6)Zv{{Xgc0jh(~ zn*m!Olr2C<AF@5z9Na^NE%5xg5zu4aYtDJefBXa3z6GdBF>eNJfmA!T0G(pW_F!{x z4^=7(czIDJ1nJw(+nX*S_<i5}_%I~|zw3+R_zzGMX{j7yry&3U002ovPDHLkV1g%6 BTyX#Z delta 2968 zcmV;J3upAA7p@nO7=Hu<0001$FObdv00pvoR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3 z004N}tyfu+EGG>7=M+8yT0rPHAW(#F;Nv@~?wL1l@fP8(sii3zq|8*pl=H{$S$@NZ zS|3H5jqbfyeALx>;$hU+$Db=zeXbuLeYbwsUOs=sXcFAz^?%jo>rNBx?b{DNy3_i; zy^Qx89`AuZW_}MScV@=J{u(6O`PEMP9>~w@q5H6}p)P*i<K6KI<$bRApie~g^}T#; zPy<T4VIpBZLQ<dWcts%hWSO|@b7l0aVt7`uf?Jc1lmN(g>3swED?mSjPcN{4K)>>@ z!RPtzAwOW*KYv*3zkWgO*Wf=8f0<Z5BjWF09IyIQI`1=ckIeJRZfXaj{jI16Z2A}m z9Ty;%=Vu*<;cR%e=WraO&KjV6*Qg6ekQ0NIETpt)Qqp<uL4gpJ4;${x!Sb{XF?J5H zMBoSqC7ZZx8DKK_6cIG@XDsy0>(6{a12b<zS0)Tb4}blCag@J%`CpEb85bgY0ObcO z#Kl(x2;(w$ujmB|DBrxb2jGw6O@I9&tSePTw+r(?g0rsI5UbHQZOOy4pkKrN?FGg5 zdjLR$xf_BZ0Ry#@H0o51*@%GS06`OxvnVexK&|mckgOt|i}Bz)H-2OE^yS8#Z!^3J zL^SEBr+)#4Cdg84(2wbWhGvtdt+n2)jncf$E?s-;y<5K~H%&~fSvRv`Zga@c(MBIO z#_%znUEqPuyPFSppOeePL=$68^q**1ykzNWt1nw)`I-Uwghq=V79%|7<}DjGvHP|? zw(ohU95}_%(@sBj#_=-~T1!dImOU*;dd^SQ-hZtAbo>X_=*=2GOx=F=$r@UV*~buc z?WA4Kz!)omak~sa(0n<ogH-u4cR8!hD2m1ivR!V<rpp*8)I;2oKDqnG+`r<jwDGTa z<9}kVT<ZQ0<_f6$nYUlCw(mL@4`Z(?yqH!&^(Fb@EWUKC+4^a!gheaiG$NR3!TkD! zYkysaqF-=fj(~*Pv8}lbv+asWf_si)sjyF2>^^M(@TmCPp-|IFn&SYu%i-t@#6ct? zmcGEon8$1_*}Y}eVy7kMMZb>nbNt1zY_mBbDO>;u8A|l5Kox^BUu&;(uyox3K%^K@ z!YX2zdQR9P&l$5G)Vo#LCdfj!i!Qra1b>7QdT_%~;3<6vdaiytHP)g54v!|EjlN(F zv{HceoNx@pMg2Ge?TvXma-isPn#~=FlmYqL8^ILop3+8i48%YLvhl&T0k0he5DZF? zg4<bJ?o&TEoHSBPNTJi^AWH&`r3l8iA44Ix?MV3`CnwDsvFkwSUJU~iQU<7(oPXsP z?_`HiJWuJ71HY7<2MF1;NKq7)#5_@B8{k9<*+3q5jf{%z8T6XIgm!Gm(zef0plh}y zXk<-?fVS)DPJ8KGhvNW3L0vmT^|dYR0S>lO6IB9MdE|je5-VSkdhRO6YIh0KCYJCH z#Hx}@pzMRHT+n-Os1^8rgK7<^?|;!HvBYw35;;r4W1!8ceiWsOMH-@Ztj&0v3x;r| zGl3h#wvc)S#S6P9H*A%FH6ex#+b<~~ELx|&)Bs7+)n&@$jco!fV%@qqiIU0zN4gbq z!LE?)3QQJQr%@>d>&(u>D?uiBs7SNwhJkc!<L;gf8Zx*MNJRhEa;(!FaDSZ&+Zqn( zYTW97I9zkeLOgl8Ewp0~0Xy;&F|6NYIv@dHqlZKKC{&3JA2aJWdnnHf*8^U*!Obw_ zo|r&E)`<?rb<v(%dL02x!$%Lp)6_S%FyXRR%tmXiQyoPM>$$0`?5Mssv<!fV=YpN| z4KIjW%7O~Uxd9q16xF?9CV$CD1eMy`fz|qv2sm}d8aFE2cf0Eoo)oUJNU#Dn=yX4( z+qSk4#ZD{muL2fxjVXz3%|T`N8&&$H8bqzcj_3iuGD;Kf2;$10Fp~n2p#b7E0004n zX+uL$Nkc;*aB^>EX>4Tx0C=2zkvmAkP!xv$KBOWQhjtKg$WR@`ihrnxqgJ5^6+*4h zs)NZ*U(lo>NpW!$Tni397OM^}&bm6d3WDGR#L>w~(M3u;Hz~A;@xbMN{P+An_nr&* z8x^LS!Er#<EF+yv2-)1K5PC%rK148v5s8`loG7N?Szq_mOLZ6LS>AnrR<Dvb8Q>F$ zXPItT#2duZo0iUbpMN;YN|Hi+PCRPR1&JTIF1!53x#+N;XGV=odY(8+EEGFf?qF6j zRN^V(n4)Tw@6WodaNgpqR%)zuPyWJiURzn_I;}w@v4|yz5Fn$5GAghTr(Gk(M4HYM z9{vHxFOo|pR~d{P3#dYc<oLn=;P-6J!sLXT6ixtLFSh+L1b>8ffo9#dzmILZc>)BU zfh(=;uQq_0PtxmcEp`O-Z37qAZB5<-E_Z<bCtWfmM+(sL7Ye}p8GTa@h};4_Ywp}y z=Qw=;GBm5y4RCM>3>PVT-Q(TeopbxQr!~JHhO2U~(P<lZ0000FP)t-s00030002Gz z0DF7?p`oFFw*s^$lg$Sqe*`Z%8Biq6000ByNkl<ZSi{X%?U5@X3^ULGbihynGqiC1 z*YvPtvt}=u_xC~wJD86Q5|UR$KTV{jnk0TwmDCzysa4edBMp5O?djJp^lKck+V~(^ zY;J9P6E3-1-5{(J+oy0Go^`z;(sR$(|IA(T*n$1cqoeL08R+Y1e^0-5p<m;O^}z?x zVsrc0n{dh9>IPw**gl2h@T}`Cky&QB{%4s|)(-4%Src{t$U@&ld-}Bt{TfGXE<T7B zn>*LugiG#LHwf#*_9+~PXI<}Ltw5$)-vrRZPXLUCfFdLpOgg`M0koBs;9(M1tC(9! z29D(zZ);1R39wrLf0=uK6F?6?127f>ijZ6|>HO{m&~{dWhe=$mV{RuIIF@6)?IV9C zz-|F#ne$BmJ^TW|SO_RWa>1nYrx!pwSqUB{akYuLlVspnj`4P`@|ghGH4s3-{Y?P9 zk|q%bNAs?W0uG=U$V!N6vmyZ+$peLO_yYkdw|cJ%V(iLWe>~(j0rW}|JioWYyDkbi zfMOskA-c_q1Q;X_6vE*T1nAuAy();YD{t|V-vrPrN$~vMF7LW1-~ft&tb~|0D-wV( zQXw4vK!C}u-m8Kb68|4mJrSm6Oi%(OLmLFC1XD-?S_Ex^D&Xp%s=-(jw+15sl)?z0 zmH>r$=BM@|e?X#5B-;;%j=K(U#vwp9v_X(gFoh(bMbIXw0<I3K8jKBbYcK*pDU1MW z2~e14ejYCZWZFcw{cz~G>i}mR0u)0V1epX=NCH{}ZGtM`>Y%E@*b=t}BLI}b2%we# zg?Z+e^&&u_O%&Vj{{(1|0i3<K4<9>_K!|S&&}tm(fA*ljGG>;L7?ad)0zhu63sC(^ zfB_l6*^B$|u>%Q&_@)4($FXh?3M^x037Ij;<0b&)rn><3uLM|-0Xuv5;dO5HLx^t* zux1?V_MpHrW|mMGld^6CKyIcB&}~t2ZmKChE*}YSa)2PthXAySPdR|Z93YNyD!3(h z4sneIfA)>EYGPCoT7bKN8NK>+1SE>{Apou7Qw|_82Z&>w3T_FWLtJBl{UEJ|7*&K8 z;3{iIuRa|CiQ;?+K&$wa14zsP;uxobTY~2h*H~b`NUJ4Am7oC0O*;?(@@&;J`I!0h zS^T!X-U2|XdXmIOLLqj&1qk0RqIEPUf)T~mf5ZX1X$Jy8o~?Q&A2WYGi{IAQTL4Ja zPm(xDD8#O}0O8w3w2t9KFrwI+IAAyJKmf?IRnO#O=FeyG+xmJ70IB9l5*G=D*!315 ze7lI&v787-6kGEW06qUy?<DXqe)Rlvzmvef_|fyfY_`ll_aA@u=O0Yz+O;0@(R=^^ O3IG5}MNUMnLSTX=s(Qcx From 7fc69a34ac01c945bc667301f2f6d8bd67722249 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 12:09:15 +0300 Subject: [PATCH 1567/2710] Change blue to white --- libsrc/atari7800/font160.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s index 9dbeda92c..62db40fdd 100644 --- a/libsrc/atari7800/font160.s +++ b/libsrc/atari7800/font160.s @@ -32,7 +32,7 @@ _font160: .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 - .byte $0, $0, $0, $0, $0, $0, $15, $15 + .byte $0, $0, $0, $0, $0, $0, $55, $55 .byte $0, $0, $5, $0, $11, $44, $5, $0 .byte $0, $0, $5, $0, $1, $40, $15, $50 .byte $55, $50, $55, $50, $15, $40, $1, $54 From 8f86d5533bac6ea2c251a92ff9c5f06e9bd118e4 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 13:01:05 +0300 Subject: [PATCH 1568/2710] Remove clrscr from init --- libsrc/atari7800/conio.s | 2 -- 1 file changed, 2 deletions(-) diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index 4955f2406..2b9062342 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -10,7 +10,6 @@ .include "atari7800.inc" .import _font160 .import _get_tv - .import _clrscr .export _screen .export _zones .export _dll @@ -205,7 +204,6 @@ pal: lda #<PALscanlines sta DPPL lda #>PALscanlines sta DPPH - jsr _clrscr vblankon: lda MSTAT bmi vblankon From 9775a71433808be00f4784e388802cb453cff00a Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 21:28:34 +0300 Subject: [PATCH 1569/2710] Use question mark instead of exclamation mark --- libsrc/atari7800/font160.data | Bin 8192 -> 8192 bytes libsrc/atari7800/font160.png | Bin 2978 -> 2983 bytes libsrc/atari7800/font160.s | 24 ++++++++++++------------ libsrc/atari7800/font160flipped.png | Bin 2957 -> 2979 bytes 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/libsrc/atari7800/font160.data b/libsrc/atari7800/font160.data index 79d2d83c3591585b230651e7c8142a130755a331..08ac1dbe430a08ec7275fe59b0b7b666bff489c7 100644 GIT binary patch delta 131 zcmZp0XmHrTCBV$U$hetTz?YGkfr)8ztRRTN%)EK6Pz>W_0~y}UVj|9rtPBhw$v9DO zFcT=fPArO%jggT7q?u2`i;<0q38F+2$Yy3{02#4PDw>gn5ePQ(%J?v{Fag2lSXm&8 M83;D7l?!GB0Lu3jQ~&?~ delta 133 zcmZp0XmHrTB`}#sgmbg7fIA~I6BEPcSV3P#W@cuF&1;2X7+D#CfMGMAh&LlE6A&<L zjuQnkf$~5F>%^iM*%+WIB)ouZs1ivK8>&Vsnvn&lhG8?Wj1Q0nwm}xe0$U*$%m@JA CP!%Qs diff --git a/libsrc/atari7800/font160.png b/libsrc/atari7800/font160.png index 6ad5fdeaf5deb684c3ddf6efff10e7941d3bc7d5..b7d36b3e64cecce132f337e7bfe5b206cb1941bb 100644 GIT binary patch delta 2845 zcmV+&3*z*m7pE7HBmwS`B_MyY>?RETXBAljk`O}60fDNrgDgJ>ci;Q&8!}bJuD0D6 zgE)gkIe+|~<u@GExtFFky7yjjG;hum52L;gf38&9bNx8lyY;*F^7#>?NpP3fUz@Kx zO|<K`4?eon`o6u4_ZuGXfj(w_4=8tL#>4&^B-;7aPVGIApVve8VPAhkUHrPoyW<ne z`?ubMJ`vT||MIn=8Bp4aiG=wGNqw&46@lCz%f!7sS4KY)$1_VWxV5J%y#V=cdEWs3 z3eb<>(+lh$(69V!@Oi#_$PZZd57zpxUy%M9{0HJM6U%2r{QV1VABg=7a^@bH=e4@o zIuPw|MLl5C$1v!)0J(oWpLLvupW@k`({YYEYk=}yqb{65P7GGEP@_$glFoAv3WV7B zu;I=eEKl1IW9N{|Q@bZ68yMR%z*+DqB53B%Sm>G8pZS6YX5NIZOc;zF`v2lAfA{jg zoFy|ZMDzg44_1hauLuyvW$s?l3xrU<dD92rkMm7`{UR(#wO)VLF3bZ9oOQj1SW4ft zB@fSnev11$7Zls?0RR!^Rs=%=25Ki!>Qs%{h=Ah&K@*X)G+tnURCyyvZX%tF@!&f* zzA<|GvU2C!jNAkwRJs_rfu}%LYYP2X8_>{H(Wa_hO-E7J*`>Fxy?5(3$xRb$rq<1D znA;pO+R)L5jWK_GOlKG5K=tnC!`<iPGBMG_SQGsxS{5%^ZRzUE)>yt~Kt9nzqld)^ zkGXlvMw-}t+aBBZJX8)c#c4-RKX%6PGZR`%$(EWuEk}CJPuAY7{&fBa*67U|KTO?z z_Q@Jri`mBzbkm7m&cGNq0^@cWfS~zuRtL4lm$}PXb%qTolo6y}Zpx<17$|Iqlga`f zf7`dt#lzUkg%{H*a9@%y&f=?$HMJjYjZm}_Y?xr6S?5|Ej@}LV2}Jq`a9}Vw;^q}O z@ogSUWV23Xw4F7N(@jaSst0O{3|hmF<UTN5%m{8nP~-aPToY^RyGv8jI0+<yMmcq4 ztZc047bySSfMVnUNXU+fTthB{6K37me<n-@jAFKI$IX-3M(-yV1R01W;bgF{>W!iT zG1UIku>vd~ES|dppG?CyZWss|H)V~}vTwvYTLG1h1^dyx(xKo6^UF9e3UUdeYMt>8 z;6N?Qj3-vwu2xqvF9Vr=*Id%nbMI+^RnuA)Q@qo`M#uAtGvO302g^SS`r5^Ef3h7c zO|ddiC^Rg~AOqCBZ-fdtnjeG2I;fY`+i5Cs>jTq8k2Z$Ax^TNgyjH(r+Lm$`zvRFj zpmITremo`i^=9%~6^07-s$lU_@o0y1GWa?@!mbH0bm<Qd!(sBwd1ednsp7L)-#l|b z<dDw}q*Q3N5~MZPnAi+3YN!B-e_Si9B(eddlOPIOYF8XkR`A0U1Qwt)9S+ZF4*n2C z_1-ES3+V*yz&!4)q?{Ef%30w<bBeuDh7Dh|D?N+^mqU5Hx}MP{ECg6lbgv&`9Ek0z zUP`Y+B0(3aA$9Zva2M>i%rViOvQ5aPjSWbUF!sha06EMsIZvbsOm+Jde*ly!4C(|% zy|R-HQ)HqY#Rj~rYda1-($}#8>&b#}TLka{{?QJ;FZ)(c7*TudWe10AmvjZ{P)J=D zWjuC}`nU_8uoc=?!j8_l8nzb#WzVj@p<L*H?6aU8fLL>mNN|AUvJiq#wM{5I2V_F4 z8-pONdOC8<h8vLl<s_@ue|^*$ITqn=B&)6rhth%}@1S!KIgrKF6Q*W^<wPORg9<Pe zKDs3v4m}N6VXMtR?qCz8z~ol$kql=Ov;i6oA%xAFA23q$35JCaGUKCc$QYEW3vvT8 zHWGwO^0)xBdJG%<=yyMLb&I-Wvj-?gEq8=}t{Je4a%_(yV~c6VI<TV}$T^tk^sMLB z%7&zdL;wQ9U~0sR0&#W@5Hy}t;gINNFP6k|CN`N!;C})v6eG?X)cpDY00D)Q90nbK zN~KgB>>whTp*mR*6%kyt3Pq?;YK2xEOfLO`CJjl7i=*ILaPVWX>fqw6tAnc`2!4P# zIyou2NQwVT3N2zhIPS;0dyl(!fY7Kg)eMXQs%9DKL|n|~R>j~e0uT_w5N0H1>T{`7 z5}xDh9zMR_#dwzYxj#pbk~bOP6NzVknQmCb8^lwamd<&fIKoPjLVQj<YS0CVAGt2O z{KmQHu)s4TMkYN^93d8q9V~Y+D;X;BBym(xHOd#VE-Re3IIEQ!Yu%H-Fr3#`mbp%I z5D6?|2`Pw>Q9~IOScuW8kzyiE`*9Edfa6b*OD0ztj2sK7LWSh`!T;cQw`O5~V%$v% z$APXF+x{2^g1bPoZrk6-w%t4d{LjFZ*7jE$!1O2S^|ls00(!TBi|e)~?*W%PK>w32 z8ImLUX$pk`@P0<$lmq&1fzX=UTWcSu4?u>xO5OkmhrmdYve!M{-QC&Szh_$g{Q!4? za;d#YsyYAw01Qw}R7C&)0RI4!wFfzW5E?Mql2vm600WjuL_t(Y$E}sYirY#MMay;s zK?Ib5ynkfXX!Ri525BH~-v;S_#H>QTqVY=TD+IF*ykBYXR-l~flI{6`X(LlzZVT?M zdvA-#xqEq$ybj$t6ztF4Aq=7DhM;vJ)M4m`e&~x3=pFjL9wgMEwlntRMK6SZp>M|5 zS9|AiY+@<R*o?<G$8wyb)}>I#d7P(tDr2N~oF+F*bkW%vd-9?e<2<#?+nc@fw6v*` zc4?PW+ETS_N$X0e)3$8uwpJ<8JFTnVB>Cj+j6HeLOKDs4>q7YU^G-mh&!RX0DzzA< zb64vM^(Q{SEBFh0>7jux9ew_P`}!mx)G>blbtfRYMid7?#ff2RMyD&f&wPMa3fP^K z2^#3q(dYL+PXeM#>BpZt0m-+bH~=bM3{$&!UCDpp1H4MW?!BzgK$ng_|Nr|WAbEQq za32Kp3QvbSbU}6o6rcdPtLg0ogj!I9;?D&1Qpo*i2pj|MgMdll>2T+Nk!IY->Y&59 z(b3xph)z(1;?D$3Qp){kj2r{*gMd}x>2SA&X4=Q<p~L&d)7uFEBZ^S`nSfO)xgSkw zNjvQREHVsQT_B+7iVgul0hYiNXh8K)s~v*c0Rm731YCL)lYc+&1Y9r$7U_=T)QHTp z5^#lpax6y#00meAQ=kEV)q_(zM70A1pb7}MPADe--s}WiF$ESGPs`ehY?~5rgMezO z76bqVSOQa^0o8+7J0!IO1fU8CxUDEA|K9Ed+%N?eSuz2IJP8=;0_g+3S3C-e`n>{r z>#89xH9M?uVRr~d04YIc6rW0Y5-__G=>vXJJPL~Xy#gldsv)j_jvZFGvO7j2fRrFJ z%FmTN3D|sv^hI5)MvzRzdj+i4RYTl7JFIYHcS=S8DM4mbUrbR_=u{yBEz}0Y^sF_u z2#*X9%K+<y900XwMp*aU5ernXBBf518KMPeKuphCV~hC60I>|PPRs$|L^Hy=%}6Xz z!HQHmRc445ya6$PJ!_3E(jx=JGQc`12Y?sN2<x^Bu|Vbhu7Gbp?*yEg_mFem@}F;j zJ#GOh`jBr1Zh?Nk1>_L=Y!5Yu_Ne+&zW=%t&@k^g=e*@V-vE2u0#Z&f-wfOW(|!xc zF;3YYY7XsDO_lukb0?r>-doOj%YVKB_P7P4T2sCmxCPcc{T7f@TC+XW9NME=cLlt> v)O#AphppFFw};@zz4PtO?;-e6Zybid+rn;@+ljIp00000NkvXXu0mjfM^;L4 delta 2841 zcmV+!3+D8v7or!CBmwJ@B_My2D=7^8=M-}UBq4;3!y-k@4d(chl->RMEwe?8v8gge zfyhiHl=$QKEWhDHom**YqkHcapXSYZ;%3y>$Df*Nd+Lu*d$)eqUOr!9GzqTq`fKxb zrHOX^_QFSZTHm*q@qWVNJ<!L@?*Zk`%(yvUgG4*O+Nr$<@_5~JANGGW)Wxsses_FA zdH>dX&?ln$`d_{_Gy_UUF_AEbkkqFhuL$J+SSGIRsTutUW#T`V=hEMi0FdvN_YL5$ z0R0F)y}<qf{mQ=vpXa-W{D5WuV6Ff90qL*7e<1!cv3y3v-#=jbK<sCbGtbD3*Xm~L zK(xOV^?*$u!=U2=<nn*K)=>;U#l1bnQAVA0gYr{%T_~HJ7_4NWMu#RP#dF=X5n|(D z!<BinJZ(daowr<`+AWl9;&Nnw$<0wjE_t7^&@-<;^KBZK`4GA?VK92=|BF)o?%{ta zC39bh=mC@;tPmITgZqV1ZjD|bg!0XsJ^+7|H~saCupm`1s1JY40}GsWy@psy-?SwU z&w_r6>)Q*8o%aBM2y-iff$SUAPNLMQ8nY1r#{q&SB4=s5zyPW8L6F=;Iv3-?cW%66 z^z>!r&bJxf1R_+r7`SnnAgeWneyj~>XsT#a)vl(asO#*~Ti4#Z^=op|#G0vfGaKeM zhm1CK^kHKRAJc!?1s<s0-F&$FoLnX*niy-M|3u5;C95r6ec2kz*W8fLZd-TXw#W88 z4<9+OiPMjras14n5^#!Wq0z%)gvU&1EhSrO_Ou-7IX_u@v-(r{53JFfHGY`7{p^!9 zv=+0EA?VtPUe3T6Hv;2!8GxYqa#jbm#+SLvS#?HIC?g6;z1);TmoZS-f|Jbx9)CM` zpW6>(uPnTnRzdb9`Qj|T+E`P2XlsN`E8#REm}$ZM`h;s;hIYT;!W;n!Y1nDG46~hz zNjCQ!#j?RZYmE~+0Qj!>p536PNSY&n+~sg|2I3$R5ldfSW6UsHOHS9UtypMcUi9lo zKgV~6rA~FiqEG=4GNfp%jVuObzJJzP5!kwJ03cEfC}9^dOg$%Tk>}jA2J+pi922af z9hbK3u3|$dy9F*73OuEsjh?GVC%vbU4GyCv$3b7P23l!@^_*}F#6>+Efp%p+jy2Hk z5^D48#F7E|ItRfN>z<-xcMQZp1hVnLb^xzM0}u>KumrbQNA6vZ8%`QEOMghA)8!yb z0*%!Wj2{m}BI|K1Ij|<DmUZt_2SWF17?`kRfO^SUe(_Fr2*oo>-#PH6<P0EW({@Tj zV#%Jd>pliJkwP}Gj=M+hs(nDO=}YMB16kVfISO>mmIRHg=@8KI7TxKrHdpWtKq$y- zXQ;mF!WkfNl$yvAu*xF?B7aHjd_`*9U5=aGEv%_n!aERalUxF22eNWO?_H5A@O_19 z4XB^dC9%bFSJ^pB!egM#**qFj6`M3f?bw^~G#3ovN@oH$h;3o%6%;R=p4@O$0@j2W z4s5@qfUvE)eITD~%R%l9@OjWm0WIJ)sAx|}@9gVYa%!MXoX9Szr+;nFghP&<*j1vB zY{n}CKM)H}GT<JIY@C@Mg40AG9SDBLhy<IIK=x_-$=yP_q@P?1nXAA~RRj??zS_a9 zyX3gw*<k{(@Wcr2ZN;HI+hKNxZM6b4ZaQL4G5{z@N!h^Pd_q7VP_tdb1Cdaw^k5yJ zFggT!a|nu9+j}cwsDB5%6I7Zmh3f@U{rI|r;=qStWCo^2o?s=tj{|8MQn{lqL60&h zz0|8uY!i!NirA|c9DXZ~JZk}M^Z|t%AyCZ68xs5Qf)VdE*SM-)Q1CP_y+NJlOge$o z-4jQwu2mee#x{^GE;FO@3HTtu17iqZ77`(<bifKVwR2!>j5@&7MB^HZ!*wthVp_lo zd8LcafL{o9X1F3=#tRpm36=yk_B}YoEJ)})5Nr7pPvIbz)e2sL0004mlOF~he~Lva z4t5Z6$WX<>f~bh2R-p(LLaorMgUO{|(4-+rad8w}3l4rPRvlcNb#-tR1i=pwM<*vm z7b)?7NufoI2gm(*ckglc4iFj@rdgqJK+|nAolJ<?+^X39iVy^ZF^Z_nEMrcRQt%yL z_XzOyF3z+3&;2=i)x5=kfJi*ce+<(m-XNadv<=St#8Fm~RpN8vF_SJx{K$31<2TMl zmj#{~H8bgX;wZ6L>|mvXS;^Fhr-);!rc=I<^;qS+#aXM=SnHnrg^|3zvdndwLr7u~ zOOPN!K@DY8U?WbePKt#z?I(QvgRWm9mqM;G7&#VDg$CL6ga5(rZmq)Pe}tD5NdR3h zj`J}LbngPqy5oEwJ5KWi2tET>dfQ)Z05hMY*V|g`2<Y1eF0R{}vIku500U2kY|5?_ zq$v~%!220}Qx53A1$x%J-dg)OeE>4lRq6&fI0QzDl)dir?r>*s|DI{}_X8*Ea)}3j zrmFw|01Qw}R7C&)0RI30lez~ue+Vir?(VEB000A(Nkl<ZNXM;JL2BeM5bT+WA(((S zAm5jqgii~(3hY4kt^xT!Ca18k5OWfKg(26#enl`>fwx*MI|F--1`qAFF;sO`H4#<x z@<RC>hSpZp4()KTqpgO~a$ON>I}W28U1cqL2j|pCR#_$Q$dwOz){d^Gf44XJ=5gwL zP2JQ@M?d>|nmyMwq4x7MhdI>VqjwBJ&*Zh&@{U~jpy&M@8v6K<Z=RMuHq<Zua*Atg zmNjzS5bC%tYg$tiBYLNl%u3NjBk#zS4|*}KDSxgV9$z;CtZIpI04OOEOzoifSapXV z;8g_dN|6H%=%T~d?;l?Te^}K`PwyK6UU$Se0F*Qdrf$-FyuQZ|@M;2ftto&8bkX7K z&(ALcyzZCh&y9d+dSV;^N`?eezZgEzJm3d-4FS6`lt2Tz=<xOT*B1fN6ap%{6W|yg z4|g2Uv}LRcbSO0_^a=r15fs7rGXV}d+FrGGu$Zym2?z|2hdWPbfBG_34LY=*G<t;q zuL+7^{F#72HEpkYKY7eJ?gS);$HQG0G-Da70UgFH2E9T6FhUWGKNFCsq3zWe7x`XA zt|b~rCg2PLs-YSn08ju+z!cB`>p`&{EZYGDKoub1?4X$Zye$NrVG3Aes3~+r^UMTX zKtMg!69fPXU<sH4e;QytXtslAJAeSF0t8$F6qBEKg@6l80gFrxrJiVAnSd(@XqIMy z06+mO0aHK&tOvt(h-?QC09Am1Yl33(^S%&pg(+Z><v#*ORYCdy?-&n*LVc?MCtWtg zS>X;=IOFbMg#e@kGNZb?C1BPyqz~|c@h~XVw+aZ-WkXyvf9_y~3+|3y2tZ08GwS<W z0#?&N`ou0~BTy#dRsl)6Y>2DD9jtK0-6;wINC{*{^B{_%il+)94uewyMD)xxY+?5d zAjtsf*c<?gI3uLn4u}O*V1;U)DrR_`f)*g6XRcujzh?kR21v)}0MNu4A>D35ET94_ z)bLa>!_$(Ce*h6Za}8U>Jp)KGKsqr8fFaHZ>Glg^0hKXD0gta60WIb|=A4)O$3KAW zTYxHO^Jc&naAgb7!Mbb@HV5}mVGBIHZv=Fh_ndQH@*n>Iwr>HdgU_1*TOgDzKt~_4 zJ=h%FLxnBy{J9a(W8Q1ddC7nL1K7R=s7Wzz25f;;JGKCwV#@Ylb8rt;DhhacQ6&WF r+s@mYE+P1R-~9M6B?Q0gi{tnYP!nmX9Ac*-00000NkvXXu0mjf0pBfF diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s index 62db40fdd..279fa1d9a 100644 --- a/libsrc/atari7800/font160.s +++ b/libsrc/atari7800/font160.s @@ -129,7 +129,7 @@ _font160: .byte $3c, $0, $f3, $f0, $3c, $f0, $3, $f0 .byte $f, $0, $f0, $f0, $f0, $f0, $ff, $fc .byte $f, $c0, $f, $0, $f, $c, $0, $0 - .byte $0, $0, $5, $0, $54, $15, $0, $0 + .byte $0, $0, $1, $40, $54, $15, $0, $0 .byte $55, $55, $0, $0, $1, $40, $51, $54 .byte $5, $0, $5, $40, $5, $40, $50, $50 .byte $0, $50, $55, $40, $1, $40, $15, $40 @@ -139,7 +139,7 @@ _font160: .byte $14, $0, $55, $54, $51, $54, $50, $14 .byte $15, $50, $50, $50, $15, $50, $15, $0 .byte $5, $0, $50, $50, $50, $50, $51, $14 - .byte $5, $40, $15, $40, $1, $40, $a, $0 + .byte $5, $40, $15, $40, $1, $40, $2, $80 .byte $a8, $2a, $0, $0, $aa, $aa, $0, $0 .byte $2, $80, $a2, $a8, $a, $0, $a, $80 .byte $a, $80, $a0, $a0, $0, $a0, $aa, $80 @@ -150,7 +150,7 @@ _font160: .byte $a2, $a8, $a0, $28, $2a, $a0, $a0, $a0 .byte $2a, $a0, $2a, $0, $a, $0, $a0, $a0 .byte $a0, $a0, $a2, $28, $a, $80, $2a, $80 - .byte $2, $80, $f, $0, $fc, $3f, $0, $0 + .byte $2, $80, $3, $c0, $fc, $3f, $0, $0 .byte $ff, $ff, $0, $0, $3, $c0, $f3, $fc .byte $f, $0, $f, $c0, $f, $c0, $f0, $f0 .byte $0, $f0, $ff, $c0, $3, $c0, $3f, $c0 @@ -161,7 +161,7 @@ _font160: .byte $3f, $f0, $f0, $f0, $3f, $f0, $3f, $0 .byte $f, $0, $f0, $f0, $f0, $f0, $f3, $3c .byte $f, $c0, $3f, $c0, $3, $c0, $0, $0 - .byte $0, $0, $15, $40, $5, $50, $0, $0 + .byte $0, $0, $0, $50, $5, $50, $0, $0 .byte $0, $0, $0, $0, $1, $40, $50, $54 .byte $5, $0, $0, $50, $0, $50, $14, $50 .byte $55, $40, $50, $0, $0, $50, $50, $50 @@ -171,7 +171,7 @@ _font160: .byte $14, $0, $55, $54, $55, $14, $50, $14 .byte $14, $14, $50, $50, $14, $14, $54, $0 .byte $5, $0, $50, $50, $50, $50, $50, $14 - .byte $14, $50, $50, $50, $40, $50, $2a, $80 + .byte $14, $50, $50, $50, $40, $50, $0, $a0 .byte $a, $a0, $0, $0, $0, $0, $0, $0 .byte $2, $80, $a0, $a8, $a, $0, $0, $a0 .byte $0, $a0, $28, $a0, $aa, $80, $a0, $0 @@ -182,7 +182,7 @@ _font160: .byte $aa, $28, $a0, $28, $28, $28, $a0, $a0 .byte $28, $28, $a8, $0, $a, $0, $a0, $a0 .byte $a0, $a0, $a0, $28, $28, $a0, $a0, $a0 - .byte $80, $a0, $3f, $c0, $f, $f0, $0, $0 + .byte $80, $a0, $0, $f0, $f, $f0, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $f0, $fc .byte $f, $0, $0, $f0, $0, $f0, $3c, $f0 .byte $ff, $c0, $f0, $0, $0, $f0, $f0, $f0 @@ -193,7 +193,7 @@ _font160: .byte $3c, $3c, $f0, $f0, $3c, $3c, $fc, $0 .byte $f, $0, $f0, $f0, $f0, $f0, $f0, $3c .byte $3c, $f0, $f0, $f0, $c0, $f0, $0, $0 - .byte $0, $0, $15, $40, $11, $44, $0, $0 + .byte $0, $0, $50, $50, $11, $44, $0, $0 .byte $0, $0, $0, $0, $1, $40, $50, $14 .byte $15, $0, $50, $50, $50, $50, $5, $50 .byte $50, $0, $14, $0, $50, $50, $50, $50 @@ -203,7 +203,7 @@ _font160: .byte $14, $0, $54, $54, $54, $14, $14, $50 .byte $14, $14, $50, $50, $14, $14, $50, $50 .byte $45, $10, $50, $50, $50, $50, $50, $14 - .byte $50, $14, $50, $50, $50, $14, $2a, $80 + .byte $50, $14, $50, $50, $50, $14, $a0, $a0 .byte $22, $88, $0, $0, $0, $0, $0, $0 .byte $2, $80, $a0, $28, $2a, $0, $a0, $a0 .byte $a0, $a0, $a, $a0, $a0, $0, $28, $0 @@ -214,7 +214,7 @@ _font160: .byte $a8, $28, $28, $a0, $28, $28, $a0, $a0 .byte $28, $28, $a0, $a0, $8a, $20, $a0, $a0 .byte $a0, $a0, $a0, $28, $a0, $28, $a0, $a0 - .byte $a0, $28, $3f, $c0, $33, $cc, $0, $0 + .byte $a0, $28, $f0, $f0, $33, $cc, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $f0, $3c .byte $3f, $0, $f0, $f0, $f0, $f0, $f, $f0 .byte $f0, $0, $3c, $0, $f0, $f0, $f0, $f0 @@ -225,7 +225,7 @@ _font160: .byte $3c, $3c, $f0, $f0, $3c, $3c, $f0, $f0 .byte $cf, $30, $f0, $f0, $f0, $f0, $f0, $3c .byte $f0, $3c, $f0, $f0, $f0, $3c, $0, $0 - .byte $0, $0, $5, $0, $41, $41, $0, $0 + .byte $0, $0, $15, $40, $41, $41, $0, $0 .byte $0, $0, $0, $0, $1, $40, $15, $50 .byte $5, $0, $15, $40, $15, $40, $1, $50 .byte $55, $50, $5, $40, $55, $50, $15, $40 @@ -235,7 +235,7 @@ _font160: .byte $55, $0, $50, $14, $50, $14, $5, $40 .byte $55, $50, $15, $40, $55, $50, $15, $40 .byte $55, $50, $50, $50, $50, $50, $50, $14 - .byte $50, $14, $50, $50, $55, $54, $a, $0 + .byte $50, $14, $50, $50, $55, $54, $2a, $80 .byte $82, $82, $0, $0, $0, $0, $0, $0 .byte $2, $80, $2a, $a0, $a, $0, $2a, $80 .byte $2a, $80, $2, $a0, $aa, $a0, $a, $80 @@ -246,7 +246,7 @@ _font160: .byte $a0, $28, $a, $80, $aa, $a0, $2a, $80 .byte $aa, $a0, $2a, $80, $aa, $a0, $a0, $a0 .byte $a0, $a0, $a0, $28, $a0, $28, $a0, $a0 - .byte $aa, $a8, $f, $0, $c3, $c3, $0, $0 + .byte $aa, $a8, $3f, $c0, $c3, $c3, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $3f, $f0 .byte $f, $0, $3f, $c0, $3f, $c0, $3, $f0 .byte $ff, $f0, $f, $c0, $ff, $f0, $3f, $c0 diff --git a/libsrc/atari7800/font160flipped.png b/libsrc/atari7800/font160flipped.png index a99a13657addb8e2c0ae3797643869ebea4a87ef..289f29c47c163c9dd364467d5a4f1d3202433d5f 100644 GIT binary patch delta 2908 zcmV-i3#0Un7o!)DB!BdJR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}tygW9?5Yj? z&nmJ6Bq1a%2Lzmx9c1|_+}(5Mek6JCoV2HHH^v~UN+qW3fBo~6f8ax1xHL8I(R;<G zMGGFd@%sA2bEev!^XJpvtv|Jwua_82f~&lK+IU@Qpk05w@PFw}^XK;B?<ef<fj%?8 z2b4QA<7Ryi67BqIr}iEw_UopH+xJi>zpnZ2_=NKQ&i9~CMD_K%d~aw5l$K&5VctSg zpR>Orko#pBxVGoa=tmN`XYqmy$!Dzq<frBR0QfsVzk*LMuzx|n@}I%y@$MnNVA(&c z^*=u#{WJIv#DCu=mamBT=LZ}g#C`|)oaN{2*Xl;=K(xOV^?*&EVbE~`a(Q0sI1FFK zy*)?Z@H%RO@>R1=97#b8R!*Ttiv}Iq&owC#V&lz*D|50uZ7#;aDVL{q4?1jMY>9)j z<XuG2%wMt4GjBZeB{^nZgsw~&j2`;`!%_a*!@qNsbAR$eL=T|+V1>B&iU46;=I$B2 zKnR^TZ~6fIIo|ZwZ^D99!Js}cI~F+Vd<`*`erQV`o(26B*S8lGTkin?5$09|LjneB zhv2DGHD)6Mjt+tbB4=ql!2qf9LXg}<Iu~Q-J2&1jdit_*=i3Z#0ud@*4BQ~6KvruC z{aABoXn&|^Q`N4fUNm%c>8)$;-TF1TVPehHx|z9!4Hs{&-rd|id<2KU12uYBctniB zWniL#u?G4Nv`n5d+tk^oO`kDGLO$72v!|tJ<XF69!6sH;wtU4Jo63e$?6!6HZQFP3 zaiFy$ryV{0*zpr*e6jXs^|#}1utsmz_+jeyvwttv&|1tsL(sJoy_|tDZUn~dG5|sI z<*Yij#+SLvSq(-~C?iO{+>}L^F;Lhxu^#&3?gw*!iMOKumw4m<#ay}6{Xdv1pze3x z{=nM0buJ&qURiiCt%B@3G}?(`DK~k~Q+Jwg7~k1=HO7>V+Pie@idykhK3E?Z9Nh=c zM1P;z&b9+L>r}k0Q}HTYOUh~eqyy)W-KV41I(>xT8!=G;_EK&}t8RcxsP{70!XidF zNJ1=SRht9SdDjr5GZyjiHQKHqiR&4*_F#Z0X46)JKZD3J0zacjq;2Q{4l6nYE5E@s zxS}nwd1nQqfOeg{3%jWgdeRudRdF__b$>!ib4SJM8#+z&&4o9)i*IB~<Fz9Q@$^A7 zB)jLxYrXS&h9~X18o}RV6eT+wN?cn`j@i@a5mbT(SyoxTfoFfvg|Ub2x#XO_JwT?> zU7Tm9vrE+*@KDgBY1CuL7GDdYkF~et40BOP0}5VPb$@bBHZlf3!7-AgDHYu+pnn_T ztT@Dg^yt#y6I9cnmgZQT1H|gUBxGjD@fd;fB^x+0I6bQ@D6iXP1JPzXXFy7MtZSRw z7xkPf6^cjEjD(b|vDt1*`ts=5cJ#I_S3z}4&_T}vC5Oe)4VyTZFM`ODujm3=ONa`+ zkkKMY|JiQ75i)p4S9mr+QSnY`1AkjBKiLOF*1BVPQhlbtJJOJR7+HCC-QEUL30ZtF z4k{=*m(@np71(4^Zj)v{TAfHSU1RB!H!8rXW<RJWpg-p}xCQ(Oe>GFU*`jjv;&T)N zJX?^fSjLb=Iqov>1Qln)JU|_-p@3Ni<nE~pj#jT3-9)q!fC_q<+%DG3ntvh(_rY{= zlR6w)v<}ZTZk0?J(%lz6J<V+<Ok<ksDXQUu@Fr%bZcwY%8~F}MNsyf4$aBN&pp!g! z@j+#jYmAtvJ-aF7RM~OKx#oaq$&r4Pzz$+#xR-DA-Up4_`xKZdK-@#`rW(n<bN0T% zH#QNdtMw8F+k0mkc7L$j=6_T0Kf#9as#a`<*4#kSu-ic$n+9=Jk^S19o>mJFofEEV z&X6A7=vX6mP9PW+9i<F@fX$Yq8FCY=Jn~usdZVMlvXReqm1(d)#g+_y3&kQA5!s$k z8g#IJQqDq|@BlI`8_SLUW;{LeB*7aXz6@+BaEAi5VSP&>@dH`a@(pja5FS<Catgr! z00D)Q76u-FrBod3AR?HdI$01E5nQwiMW|3}g;pI*F8zWg4M~cNqu^R_@ME#+;Nq;S zgR3A2et<YSIVrkGiT_IqEn+-4?#H`(kGpq((5Nug42%J)W*O;3T+HTH#o#Lf5D>x; zW+Z0nbE#Akp5yBtKEB??c$W9MKSz&}HyPj)iD#LAZdk+{#8aD=&Uv3W!b*}td`>)S z&;^Mfxh}i>#<}RQz%wI8COuCaAr^}rEO#&~87lE4aa2(?$``UOE1b7DtCbpS-IKpC zoYz*CxlVHs2`pj>DTt6!Lm3rVh|#K%Vj@lZaS#81<4=)GCRZ7Z91EyIh2;3b|KNAG zW?^D~+)WC{fvy+Z{ul;=yFjyU+uz5w-8=#O&%l+|_E#Ig^e5@{wiZ1Cdbfd#>$WEE z0hc>K|C25mk|X(P3WWmjen#Jv1Nv@((3;y@Yagc%K!&<X-T()Oz(|p@*FE0d-Pzl} zXIlOJ0C$0Msl7<5IsgCw3{Xr|MF0Q*{{R4!um>xD5F8c6%qFq`00WsxL_t(Y$E}q? zisU#DMZ=k8C`^H;LEaC&5?&4T)?gL%?3Ezj$JDCnQ;1v%pTbbvhPjF$w*t@qk}|6f zP%@U~kTCvF@k1hLudj*^X^ebXdwbLQd0M~joA2*aexCQQ`r@*nYvtR|Ha{CP*ag>M z8aJ4K!L)*2EF!I4%;FYlowb~CYH?Os)tW^b>l9;HC5&O@I{E&q!#6ts82yH8Tu)(K z$F±t}cmwr*jQE_lzGpts<)*WJ3w$p_6CRtaMmg<gLA>G91T0Ook$n)h>>_j&IH zy+lO%c<e_yq)#z&CQV0*Q=Iz!kaJ8EV^}4BjA4{2ht}Q!I0X@CxuYQ47;6=qRZmLr z$k7t8>;UN=1sJC=Qb?%I-vI;-5oo!iAb(oD*KA%tYr!K&OTe=Oq<a)#g2qTAq560S zkS2&g%N+&9^B&{G7N?g<@W{~;i0lCA9tD^*VKkM5YQ+sD85*+y0RG-CPAUM5sS~1q zlu^dI3II4R3UAPQ!CPYsxW%=|oA#-bFp6v&EwBLq{@!mvDgcbB6QcC0S05?>;J9kM zLF*N7CttvAp+nwu&%LBs<Tz-70|4;%5qnqxU`(A5HSN<LQw0DVw+V01dc)f}7H~)E zkvIKIb^Zr{i^K1m)@0!ZmVha+vz7pVnC4cP=z_ggvbYNXl=(plfD23k0~zf51Hd)l z_t$RC!dF-Vrohg60$`eZVWJE6TFVx$08r*fDFCi81q`%e-yZ;O3BSMhdltUK5-<gJ zHWC2SJPH$Cu-B6u=>`C0ewG5@22;R5wU)r)Qc+k(d9?BZvBe1Xa|Vdb0GRrJs0lQI z;=HQ>xYSxKgTtj3K_4iOR^A}C7{Pze0Pz_BQy(>fCeWM@6#$odk7aPU)FK!Y<<ZIq z#1<pO&lw;w17PZ-CeQ>E=Tim1r7`a1d)9vY`2e7XETrY0SN-&OtpQKP?Lyt+VE9}H z^8N2$1%M?1<^A_x4*+`1LOSk$dDTyk*BbC#+%D8D0fx_IAm6|LE&x0U=oo+ec>tK^ zETre2SN-&OtpP8^?Lys>VE9}H^8MdG1wbT$QUeC_`g#X2*j)Kd!^&?KTh4;VDd5@+ zq=EEB>M3A{dVc^|+_=8I-2sd~SN`?H%D-;DoCS|lAaohX3DP&Ir+^<n>-_;>3-kW| zeg`neT>1AiEB}7Pauz&Jfz)RpXGlM!o&s^M_Xhx;0{;VScW#xKq6(w{0000<MNUMn GLSTZDa)18- delta 2898 zcmV-Y3$65{7mXK?B!A_4R9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}tyWpGBsU2B zuT%I40wh4kK?@PSfsgN0b-iuo*`A4TD{5(#7RXEx*Z%9zy#BzCl=Z63T)S$)ulCwG z@Z#n5>-U{Xz3*?o`t*M3zuqS?x&%*o{k3>KDbU|OCcF)&@qe}d^5+Ztv(Vel&w_Gx zX1uJ=Mxviz{ZyZY`hLA=cl&JW;Ma3L18-BFYdnkI7M0ik>vKmnptKq`66P%=<-YsN z0y!5;;92iGV;rFc{_Ayj>0=21`QqLOz@Gv75qx@q{R8@izXzY=86iJlsc)?5_aCTz z5B?4Dr;X*^B7gq+0Z_D`+<C6d<(d2CT~r04`Y7rKo8FeezyZkRo~CGqtKr@5*3rB~ znV@`?Sq9pqP7GG^qDqT`lJ@<aG+|=p&4wrQWV!oXj5|*`Jk`@E*`&)72a}WcC4z2# zw}tL~`@P>J$Igo|lnIN`P5(c%>)$^9PP;PafrxHE`G3X=cJUDb%s9-QJ4S&J%7?dh z1N_z=`pYL_L8@S|-7q^Gj51zJj7A^YlAGtlZo~7*1(&U70YHSk8;pVMD-|Vaq*RRA zh=8Mmpn&Bpl?NE0)_B24t|H2pvGds*bByk>+*tW^BR7GFCMpJQx&+9owLw2t9U6)z zt+v**S%34Z^%g2xwW+G<NpfLg)taf9xpfN{uijkU+`W5r?t&cHx_0Z{dyn8Nuu)*G z!1zGV;31=qHgwqV(ML?kXV%%KPMbdajKxb9(!|nb%U55q>DtH?yY9Ai+xFdeB(#>2 zHCt+0diIQW)*e=WYQMo6J*@G~)EQ^*tfBWZdw*MkPC99aGcd-Lz_=X-AZR|E6{lMH zFn2gBoe>m`VPrepT#F84ps;S@mh{fu2Xnu~+tvJ+c;o+K?mE={AIx2#?q}Y<VQrmr zZr+T&qVQl^1ksn&Yxc{g#GYfyIiNbNnmZ|CH7B;F!%N-xa!!TZy9axu?65Vk!FF4= zNq?}&l~FCRt|l*hWb(eTL2T)nwjwGnfH$G<(Q2n@Rk~7b)aFjW7<266SI&`@_6`K! zbJ|SXqt*z~E{DPCvU?u<7|X7`5}F`7+d~@K_5w1OQTnO_`djLAg4yhy%j{V(1^d?3 zr4BQ|Hdl%50T~S#S9ZZMZMN$|PQJXf;eRwmFjCIE?pwx0b{S2PK7co$u!(WhJbI~W zk_`O_@_LU(mKy@R*2YdTboxla2~gook>vnttHPUsgx=xol1$y+fw2*Ag$k5#Hnrno zw5zYyrjhoLExy*-f9)-EbaQEt1eCjE-xU-B3Ahse!cqjsL43D^AXuBLCvk>lTYs%{ zb}G}LlIk5-<5|2FgvXd&(tAK6Bzxg_5{+C7f&+8FC}8cZnX#iz(AnzPzDVb2Qos}r z%Ra%URlb20T@L!AXx%m!4z)Qm>AF3X8P>Bwd6JE8s&aB}%U*KNTxS#_Sp;D}>WMSZ zP$7_J2rzi(mqIpy63cUHjJ2vd+<%ke5IZ0FA?OYiJRlgafe=FUCf32piNUKzFRPcU z8qIA26R3HPqxQa_WS2Amgy4p#5gUm>F32XQ<~Wh0xM$^?*Hve~U2_-@Ce^bV56A*y zhgZQhi=I4?C+^@9`GC4-iHM2Xpd|MRO%Bv0*UiNCQ6-^tgDAnJl!ZECRe#crxZ$mB z7Jznk-$2da_tGq52h2oyElQ|HcqTatvORSzq=ITFN{kRAn~?=p6{OB+8}SQABH-mI zZV;2Rud_JnVQUw82qE;veH95szC<ix^xEh|F`_y+fGz@(?t(QJU|R#_jv}-{w1es6 zTECObDWn%@Qkc9Tj~PJ-lYe1rho%w~37H4<t@f&pX(LWgIP1V1oV0po;3%(#e14KC zHrdKtk^X&SF*y>`mk(VBm`9@BC;@2bDaeL5n#hnl5sw1P5N8H{7HYY4OE5EtflPM@ z2If1`HZlWPeajTl2412eG%m*k#5EkpY56x1YaxWHYiy4I00D$)Lw`e1Nkc;*aB^>E zX>4Tx0C=2zkv&MmKpe$i(@Kj}9PA+CkfAzR5EXIMDionYs1;guFuC*#nlvOSE{=k0 z!NHHks)LKOt`4q(Aou~|=;Wm6A|?JWDYS_3;J6>}?mh0_0YbCNG%GX?Xu54?Qb{qF zUlqfz2thyu3B+Y)8Gmz<l!ov4x<`PocL|>5f9}uGrxq**1VrLlW|%hd2J!T!ZE)Tv zj<K?=5}y-~nRG$oN3JU#zi}?PEbz>jna#`-$B4yJ7b{)N%BDs<MI2W(o$`g8$13M7 z&RVt3+V|uyj285jWv<g4Mhc5qf&>u?>ZqU!oBFCiC&faB_J5N;{vp>dkxL<01&kaE zs6m75`oaI;cehq?a>7fBCV`$8$N3lm!n;7L;W*#Nj?+2;g3rK}-tpI(z|1G<jgA&S z0{XXsi|dZ2>;acMz~GZ1o3bkfX$r+6@P0<$lm`ZGf!;N*xAs0xAAl@%mA(NE4uR1U zWv~0ZJJQ|TzYS;F{rv!3HgcY7cCs0hvIjYT2rdX%kL=O_00WarL_t(Y$E}sYiljOe zhL2S(G}7Q5i2Gqy!PUTQ1#OtSPeFVi>D4e#5o#5D3Zb_H_f-P54S4@QiPZ(O?TAS{ z5%K?W{u2?j*H^_ss!2Yry}ju)o|e!1=KK4Q#`E@BUz}%jwS4(mr?HwkGvn%}%63zK zH`Rh(3?j9er`gU@TVuFl)ohJ2s-9-4j8%-`Eny5Z+sL<H4Zhg`K<`#u{c`gC(l3pm z7l%mW)@AjpG~PL`c)fb3oo<#@PR?t_@Rl%!nQ!ICpBCS20bmR}u5mlZaT~W*&`Ut1 z4g0poUD_A|SK_e8FodDqb~%SQFow5(gfYxw;ZU0cfK?EImO2VD)ntrfGwMkRh7`>K z!w!&+D8N{SnL<J}?f~F5M4+XPg4}6wPO~}vtOY}g=73`dNJkW4yv9r;q1tc&hyz5R zrH+Eac?)4+3&YDG7*aF`0y{uDq5u;I%!Zs$wb(8vLp99+fWJ4hl>z{B>VznNHL1zi z0suHJ3Qy2_!Bb^2xY^dooBF8{-;1m(EwBOr{@$%#3INQh6QcB@7v~EA;J9i$LF*My zCzrvkzCqqJ&#lB!WZ!9l9RTq60ee^gU{0M7HEhEcVgUdgw*gPkdc)H>WN>?IkvHwj zUjQx^zdzMe5<bBaFa>tj5CGGE+z1n0u-8gvdjWvF-bn^<fhl01=@G!y<M)?lNx~Oc z0;a&uIs#ytJ7J;=_FBv8uK<wOd&vN<Fa->>JOa2y{QlN%N%#g!z!ccoKmbhhAWU?@ zUJtUz8vx|>Q8IuVOaTMsS^}>dDMip&%A=KMh|NYYj~O5)0buH*CeQ?bitDxj;H$<= z23~hkilFn9M=P%on~mTeGeBGdz|==gpb0eBeF4B%om(8d9;6h(5GjvV-XS&{Av|V) zgam-8kD5Re3|x-|0ACGZ3kATJpLYPNOG0YydC^agmm2Vt-7eHE7KTq{Al?7|lK~hK zQ2p}l*ByZFlaPjcUi8y{<D~{XXSWM=i-+M;8A$i<uNi<N0X=R%{@ei!V-nJG&x?L~ zywre~>~^7Ui7<RB1L^+ndj=3l;HUwwuLpq6q{=^4to+k#@>y^{1#F#wRFFPPIR#8t z?hgPw1>W8c0KH3<e>t)8FRROE!Tl8QO#*U)^i|3!;QDfZ0N^P(@cw=P7(=T3+nJSr w+e1DJ?x#R(6Oc2c?@~^IFqZoR08fGc0r3iHsVZjX0ssI207*qoM6N<$g3RoPxc~qF From fce4bc0c5858ad3816c381db40c0863659ee6e84 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 2 Apr 2022 22:49:28 +0300 Subject: [PATCH 1570/2710] Change order to make decoding easier --- libsrc/atari7800/font160.data | Bin 8192 -> 8192 bytes libsrc/atari7800/font160.png | Bin 2983 -> 2973 bytes libsrc/atari7800/font160.s | 66 ++++++++++++++-------------- libsrc/atari7800/font160flipped.png | Bin 2979 -> 2956 bytes 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/libsrc/atari7800/font160.data b/libsrc/atari7800/font160.data index 08ac1dbe430a08ec7275fe59b0b7b666bff489c7..dfbf65b63f56b90ca4a3837ce4e7e3309ecc4bce 100644 GIT binary patch delta 470 zcmY+AO-chn5QY0qC+24+GMdheMiWV75)c$j$V!x1<N$*w(2Zo}1w@GE1Y=#qP@9|~ zOLGkc1s5*u8Ye;uy67(Iz52SQ@ig{T9#9H$(v#!)Faq76LJ#Qj4EFKrREk+2eT89~ zY|(dU=82EG(s`_Hlx;SK+l33jc?k^P7wt_`5*qpmJzj3b@L*#t;GjH)=h*nK+*QV? ziSN3i?ASUlt5=y+Kr>o;*KHnnJ@}bAPa@(;Ery>t<SDBzwiDEHu>b({p<6ugH!M_! z!jqj13;R<sUhH0@ApGfR#6#0ZLD1<D5ziWZlydC9J-NIJMyM*tY9*!T9UksQw&chZ zN%Vvc&-Npfl$IHqKHX-TRC(1LA@yA{=7?P5^5x+H%63UY=g@7V%g?PI%9cvVG|hu9 IzqQZs3soOQ>Hq)$ delta 588 zcmZ9JPin$Y5XRpmYE7y!)~7@hEd-<>6a|sCyLf_n1iLFef-AvIw_z?~nO%?IuDJ0S z?F~9JN&gPKS<Ga9`M#NLw#{PmFTfa($2ng{IH-p&_a5Xcd+r$H$m1-XC-1xC8sp02 zES*=s>@+T+jGvzfoJ05qux&dusZ1eIG}nc09DL|@Xj7d+Q^8ypw!x3s(xH~IoO(sb z7+Q;yN<g>u6dJ;na5!+?wYaGU^z8lWxE#3eSv=GNI{7mQ3%8QhI8fBcq$*C8q=_Dz zS{0Y#RSmoN?)K>|xB;A5zxFjB>X!w8g_QH{qN;$u^A~q;R;s`-Noj7cq@V(DJxpoW z)q;-Vew5O&w}4imm(>)T%$EtxqcOCKKZ<ri@TC&k^|@YX7WJ}8zEeWS!Gf*I9u*@O lF?{rx=E;~FvPR{o7AD2C8;-#f|FQ@6--_~;Psh<Ud;)*5NNxZC diff --git a/libsrc/atari7800/font160.png b/libsrc/atari7800/font160.png index b7d36b3e64cecce132f337e7bfe5b206cb1941bb..845d91482459f72af2263f7dba0c4c2844fecef6 100644 GIT binary patch delta 2896 zcmX}rcRbXO1IO{to#S-GolV9W*+p?A>(0u|$PS^TBRfKukF)nzWo2H|ykyG`C7~|j z6vrj<waK3S>ihdXzJI;{c|P9%y^47Yc+(|7dbqXyEi1R%X#YUJ>-d`<=v!g_9%zqH z{B-~b{Ytj;xj!w*diYT$5GDc9>46Z-0;2`B*}rP4H>(?kl)KxF`3kVCX~7D%u7C!6 z3~<bcQtPDw$G&q(+~0}ug;(Nfax;OID^E1YlXb;^W%HRuHMg|Qhtlw*)`&abXa(Sp z?WI!fc7G7sdLaV(p8w(6OD(CykchfVVbCuTn#v1%YQw#i&DuhKvL8LQaDE26o0@lh zr4bpnZ?K&$u@aNspa*)k>#V=R_WJ{0nZY5SK`Bn)CvBq*a==d#d0osqs!b}|^<E9r z(42<LkLA^EZL(XpGyT#zz`O3gO90z{5l2o`72(qCHQn2<s~R&rUb6hmm^a}@34jK^ zs>I|cnZK!-81moJsE+=bscD{n(SX%f%<_?bbktU>x|)@Ii$j2CNY>bh{+Cf4D^Wb3 ztHQndX|(EWfgYt_<P}ATx*U2@NL)e3P7?OSWJ^1LZZhJaKuLdxm~fgzr~-9d2zrsq zY(cY0F6fx4Z)BIq$yr_SNJ8F_n{|XGs0VhTuo77_sOr-@<3OpLI{F;-bm16~pctZm zR>Bpndfzy;`m7wve-V8H9hB9{$!bAvNtfWg_txmuI{%3kX<D1pt2MlV4-{pSE8Td8 zA6=e-IJ_}Op_Evekn3#7pr%dv6C*it{YY(rn5uQ{jp65I&Sn>~UBZ{h-Yc{{MHSrf ziV;(C-WR@nCMJOd3<V^4{LFB;Uf?soIP}B+T~D%|--`(vLEfd>Lelnf(_S@3<yoq6 zRo{zdAKKk9VF)=^FHzu>a=3j8`-reDcpi+#gxi1b`#e`HQt=1_mbU3qWTZCzncg-c z`KVn0Y#_d7yp&6;U+6>i8B<GsqmeE%$6I_1u^yaM68m!7nQfDnXJ5fY)gy%;gO8Sf zxt=CA6@~3b)di2JwWqW?g(?m}w;9tD4C4`nWM2gjfu%21&^d$LeQTc5;#|vFros;_ z4TK;O(aYld-NW*rz_ST=k-m%<RhCWHReGQj1=kx+RjJ6&b`_ZLrhHQ2+3TqI>SZNs zGYOHuAP_Vwto6iSU%RK#De_4VlWECcL@!;*0)`OhQR#ewsde#b?Mx1}+WJdq5DtSV zME`Omr+d1_4TB9@qmt1*LY{2VrDL7Pi55Y+*C$VY)oH_nT<LfXT8Og}tH9}(?Hk9- zu_~OLn;flA9&@eNPt#$&3MpY+%4aSJFtSJ(*!M}zGfQF!#+9slC0T+wUKvWfA{;N8 z*e8;S`amaVV76p@wDkr-Gls09OERn@TR1T6pS}F$SyIu-sJV^{a`Ga0J{N*n#2zJ+ zEm_5*OPCSd(MhR4)lEI)xth<P7Fh3un{t~<il29-)a8krHKM(eLh#r^>{NfmUsLGX zq}0bgYYA)xU2pm<ZA7W21M4|=1#xctnMz9!pX=J?Lhz9?%>cs+_lN8f!Lipeaf+iF zaRSnMVqYA4Ylokq(CZSuw&<Zb`-kFPDPGgqA^;rnohf0jat%&caU^9!M1rl}HGH&e z_4|8i(ZJMkc?uU~WwX}QXU+U_@d+!jd)BdeA-$f|8sd^Vf!1*Fyz0;W;8qS!0OlD* z*MI3Vyo!M6xn>b*$L6^WN=c;Sj~P#`Cc@!7izxJ+?pS=V2vwy7HC&ux^zAAZ_W2IY z9=x?CU4f&PN&9%OV+o_Zw^A=<Fmc`Q5Nk2+NkhWx(?+*t<x77clI@-XGW|4~ru}on zxRdW6p^!c2bvonD4aQb5s)wL+xR+7`nH1dMHIgdX%!ows6x#+%QJ^1&OgSFh^*-5r zZ9-FKgK+>_X`1AiV%0aYV?7ilmOQTtQuOsn^QrRz-VC+%^iZXYs~pVsr+nUV%#C(i zUOU|Y3<0j!GKZD6dd3b`qntOK2Fvcb>Beo?ER+?VAT(i?;_eGJqbng&k8}HNemtBk zk?<B%q7RIoT1G(B_3XN<F5=4JN6l{Clf(^GbeNF)w?@4o0D#2cb#*O_bafv{GVy}? zvTRG}sq{zZ>*%~wB{tGJu@-W*^R9t&yvle(D<?rlYE-mHvJITq(^<%g5x2_F{i)aJ zlfLo66{{Plh1UVv6SO<ytqd^+v3OfoR?4k0Qz=e&l?GX+E2zjwMR&gJhaUY#RtV=F zswRQZn!H}IJbNT~=r!RUX)aOd5eMQq{gCE<Uzuj_PBF{%%C4ye^gm_c&<=E7+er=j z<U#Z_=r;{7Jf|biqi#RvYI_zlB{Nl0HkYArP19D*FJMF#Gtwjlx=B}7$_EwvP`q#7 z%^{IsVWG><J(@67_P|}#Y(MezktkK+o{6X(e~KVWiB9z5-s@lV+YPpEft{cU;$&nY zZ_h3tB&r!(vwUu{Cv8Xra`3Sub7ITxL`T2W+-5zGCX}h3n7mN`d=ZkZ-a&sLnpZ8i zi$}ylS0fB2GZ;D>u#>se%ibcz?AW*_V;TUD@3?WVn%dmb+)&d1eyrWwhh*jj)?Gdc zyaND$)xy+T|M&g^0L=%@a8-~~5zY#YIt~B~c}99TYr`J0&1<jkid+OEFX`uW=kyg5 z^UmT}7se3R?H7>;+LFbCl}NQ?V5}&$^C$^zN4#BFIJLo0MqkxXiQ^wgN%%YTCj7m( zYHj`FkQ?y@LOz(3tl1>Ru>d~W-?HAsrTk0c4j!2;;&v__6+*P#anS7Nz~SfJ+@{jJ zt%$8n<vWGmor|-0wxE($cs)Dr<8&SMXPQ$OWIck7>fQcMmEA<-#C&#yS~o_ePaw>f zImjs+LoQ83jf$SEu~Po@PCamjQT{Dv=HubP)g@=3+|gYaZJZQyNnP5-R`VM?oSWEe zHH~JlKobrR*N`1$Aocdj3N)04S_do#CGwk$)_?BtYg5XPjn_Q~_#>g;7QRz;fyzm( zt1T=@GxL51z20>HdEPF$T;2n0rKrDZ9LF^P5mO1ai$L`rXxll2Gt+Z~{g%%GwH}wb zr!BlJI+6fel;G=w8X!%!soiVI)!UpM0v-B3P#_iAb`va*6Ld5eut#-xM~UZvJZKBE zZM)VY0_U74);+xC)dEy8%LkL*mGcIWgGP$~^OGph)GqK{Y%*wx4aIkXhYo|3JrZyQ z3?mKET&uu7E<jMe2LkQjM$)J0IR`DLp!rCI-Zf^LFe=BBhYp3zmlpn~!F^nipvJ$P z;}4gEI{o3shY*y#9S@xelKafzKfeFkUr_8{o%Kg6K*#@R8EB*x%GH{?g8gUOuA)r; z6(Kro2Aj{djEv=64zYz{O-M>*#T4RiG=lk!i2p}O7&wD<QvR)2mbYB~QS-B(qkk*R z@e1>NcQ&YpXxn-8vG>GA{&7)+>bTHj=Ey9pr?SE}Gt$HY2NcI7>^$`B?(`MH4nm?v zoq(i9ahMPMGgR^!65@W$iy2vqL}{<5*zb@T49{bcMJ!m(+c6|sjAO@Bj2KoP2QonJ zqr|2>3sK39!GIB*nIj0oH<gC0y<)+VlOl7{-UnJcx^iZ_WkdT2cT=6QBv7S@^&F#< z8siO5=QMbH^cmCT&DIIn-!CVFmc!=2gXqx^goO}6i{Bp+6NsQp#0#>s!LR0Yj(OG` zqg-vLj;{~?+JRRsagik75YEzZT!u4TBwbTAVL`UHioG)a8XRL<+334N=Zg}3icD6U l+rnBo9$H0BZVm(=vajy=%?0=C)c+0`Fw(!M_d>@t>VI>?KFk0B delta 2899 zcmV-Z3#{~=7pE7HB!BLDR9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}tyWpG>?RET zXBAljk`O}60fDNrgDgJ>ci;Q&8!}bJuD0D6gE)gkIe+|~<u@GExtFFky7yjjG;hum z52L;gf38&9bNx8lyY;*F^7#>?NpP3fUz@KxO|<K`4?eon`hUK?jQ1NJ?}0vMeh(;j zX2!$*8YJ5J)lTg_ke}B>_hDZ{UHrPoyW<ne`?ubMJ`vT||MIn=8Bp4aiG=wGNqw&4 z6@lCz%f!7sS4KY)$1_VWxV5J%y#V=cdEWs33eb<>(+lh$(69V!@Oi#_$PZZd57zpx zUy%M9{0HJM6MxHRMEv~=ZXbyK407fkndh~-**XyIZ$&*|)5kFAxB$64pLLvupW@k` z({YYEYk=}yqb{65P7GGEP@_$glFoAv3WV7Bu;I=eEKl1IW9N{|Q@bZ68yMR%z*+Dq zB53B%Sm>G8pZS6YX5NIZOc;zF`v2lAfA{jgoFy|ZM1S-E$`4kEi?0X}#%1na(F=r7 zzIoFJ;E(f7fBhmXNVQ(pF3bZ9oOQj1SW4ftB@fSnev11$7Zls?0RR!^Rs=%=25Ki! z>Qs%{h=Ah&K@*X)G+tnURCyyvZX%tF@!&f*zA<|GvU2C!jNAkwRJs_rfu}%LYYP2X z8_>{H(SN3@T}?+(*V(1FuDy5bH_1&CYo^xCY?#{|GTPA5hmA3OOlKG5K=tnC!`<iP zGBMG_SQGsxS{5%^ZRzUE)>yt~Kt9nzqld)^kGXlvMw-}t+aBBZJX8)c#c4-RKX%6P zGZR`%$(EWuEk}CJPuAY7{&fBa*67U|KTO?z_J7G5T8r7o5OmXtUe3T6Hv;2!8GxYq za#jbm#+SLvS#^dflo6y}Zpx<17$|IqSd%`v`^MbA;;rcTSG@5*F;^~i{|9pg)cwrc zFId~R&c(yn%Y_%yDsW$tFV5ntjWx9&ZH-X05^R`Ypjqcy9gf}&`3Xe&2ykF9IpXFO zIe+nO9!q4iPGz*6HILIxNwKO2YKjb6!;j=XFkH+CZbMMx`srK~YwEj8Q_?sIB!Nab zb!4n;tmqdg|J;CL<N-*?j)`1DE`t+h-Pk5f28?31Y{$)$*+%at7X%rICE;YSuj-AW z0x{J7)3E|9A1t1`0-sF7H*OdR88>B((|@vW#5-F7m5v4b(Y?~4;0E){I4}xw38HG9 z@ebfXEz682R@$ysS28aHnSR$?($sVBX@OPKS{75h)4@i^^NKU!6f6hJKMMNV#d5M8 zEKRX8P$)Dk%OC^Py>EmHIhr4X#5$;#)!S(*aq9!qMUOUyy}EF_L%deMV%nB+7k|Ix zz#X7+L5qGoCHD1Z@>&&!3ihgC@lx?<hjcRdIz7U!2{3f&4-dm(^2~W=3-GDpvsvFf zb3o*f&km$iXtffgHP@Kf3@~b_0Et{HtR%7lq>~^DT54AuP*(8669g8ZG#w7lX%7An zMD^Y(9Si9M?Z7<lt)!e4D9TykLw|FMy-|h@U$iSdj0BfMdAz!w(IzYeSW$GZA7UJc z?W$f%uR|h17pWn2^aF4g?6=G@(VenQ$fb=9NRTl0#x?*s%rH4mqzO!Q`xF3_Dh%ob zM!m9=4O3*I9mNK`tZO?CJ<`{)0qe<va9afM0sherzAyV$PZ&{q>}3asYk!w?1?o^p zT^D6Mc98nG3!bnQ+E&7j&bb=47XoF^uD+pM=zr|9pd5f$bB;)GfaJ0ef={(gC_D#b zLaQ5tAgy{ja?FMsko@H&tJi(h895f=ZX~O&42RN!A@87b5IK;=)Dxy=gXKga&w~mu z6+XHp8xB1USYfNpK<;1@rGLQWR_>7uXA`sm8Vw<Y&6^)EQu7Ihg%2|0qio0+l&TAI z12Q%egiG?c0JM4x8~o^ZKXrABx@5BlC`T=KgnzCXu#0kRk0WD?X~wXl8pt`A==7}T z*2;#YhC~1Y!eDB|ivn?W4iGe+RN;{5W-pe+awayJNZ@}0EEFTo8wb?<`Tzg{g_98m z9)G1&9PA(>n4vmZ5ET(zv<gM2P-=x%9ZW9$f+h_~ii@M*T5#}VvFhOBtgC~oAP9bd zI665gx=4xtOA0MwJUH&hyL*qjcYx5SFx3o<0jg#h=|o)2=2pevD*_M@!VqR8X6kdP zR1%)!>mEM7-o<#9_qjhukCHbT;1h{wnSX9r#2ds@o0iUbpE$xwl0tk=JZjJdi66Nx zyZpwv=&-;uBSt1YPaGi@iybU?Fe@1<@g#9nQ8mgJvMwu}w>Ybn8f)E?zc8HFR+hO= za}WtEVhJgTkWoV!6<CPTs*z$MP5W^V|A6C9kxM358H^kYs6vJ0_`(0+ceiF?Vt?FC z3de!27u)_A27<dlvu@kp$F|)(0sPOvmDcuG8^H7@>Gif2Jpy{Sfs5<5Chq~4J3#-F zE*X*|`DqG;0`PuD-;@LTZh_F6+gocNrw>4ex=P*v2Zz8&k+Ro4-re2V+rMX8{rv!U zfpV$6NUAyj000b7OjJbx009300F$c+IDZftFxiq-a{vGXmPtfGR7l6ImBEVJN)ScM zb_78Llz_Z{WYuW(Aln9MAaCCW>3_tmLcXH$O6V&DvkkmoY4BE{oa&P8`G9F7Q(bNg z?yY-oi^#cqd6B#h-8mHO&)p#mq3DL7bs^MY=!SmiixB7?`o10{)S<RB_T)t`gnyxL z#@APS=W%ReDb3i7$2iAwoTJvIP{(<kr+F%4q<5SqH%oNU*%^ECq8H;lwaeR^z4NrR zsgibSms8qOwQNc2N~qJeZ0ojGDbYKvtKTH~<n4?-dC^O0Tl4Ee`1bQoK&a26H~=cO z7^ZVq>k9QJKENyZ3w!CIfi4|={(t-WBp}o=e*bkRAi72r2SCM%VQNOFE4t5ofL99G zos$U~=+e>W_dibpqD$$=pF07`x1u-zDqajzyLes6f8hhXO2F>Dtk6K0jz0hY`y?QF zdmnHg1oR3|hdXpZb_Nun0J*E_?F58cP=w;o1oTqK{b&dr1MY)>N#W^m=YNrA+{fym z!@1GX+X;wHP=w;o1WZ!O{b-CF1MY)>RpIGyw}ocf$LgWO`^D4S2>>ICQ2d#IRVuk3 zO=(Fx?EWk=3|d_vpy-MY0YCwkz!Yde^-!xFg4zKBPz3~BdK8m?Kko!wFa;Lrj^osb z%(D`3g@AG_M+5)`SOQa^0e{tlQ#(Yp0|cN72)IrtCjZ{-1Y9u%78y^=+KOzO5^#fn zYN-|k00meAQ=kFWgI7BwwF3m83JAEZC?@~j?gZR01r}K{0fjsX80rG)1HM;03X1x@ z0($GJAucsLtZ-p>2u1)YL1q-6N_i46yAtUGeo{ONiu%0*ChMvpu78dlR=Bb|Mk9cf zAT!F(l{^X9e1-HyU93isOvHNytkzXS+&nw1aAS8$MgS>6W>jBHQBvqsAp$Mb2E_EN zHMR(k3=qoz>x3KtwP;3I_uLT+RInnYPL&y=1!q7^&st-P_{adU46shj0pLV4!n(~! zEKtFUR612=h!(s7F@HU4jV;n61H>}GIw=Q$7tILkwhOU9<^8UJZ$Iw@oSFBKbKdfw zZ-6~+0V(>BZw79Ge!m6e5c+HnHHY@7`cl6Cx)aba?>XnZ<v-s5d)xw2PBGsM+yc{n z3&=4}*&b>R?NLpY{P=Sxpk>}$&Uwp!z5({Q1*BS2z8Sa$);#?dkW*T-J=7f9qgr<b xyu8$V8pwyO*H^cP;K#l5?al8Y_)%{hhQHgwZk5}KvKs&Z002ovPDHLkV1hnJWx)Ud diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s index 279fa1d9a..e9c2e46d8 100644 --- a/libsrc/atari7800/font160.s +++ b/libsrc/atari7800/font160.s @@ -1,7 +1,7 @@ .export _font160 .rodata _font160: - .byte $0, $0, $0, $0, $41, $41, $14, $0 + .byte $0, $0, $41, $41, $0, $0, $14, $0 .byte $0, $0, $0, $0, $1, $40, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 @@ -11,8 +11,8 @@ _font160: .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 - .byte $0, $0, $0, $0, $0, $0, $0, $0 - .byte $82, $82, $28, $0, $0, $0, $0, $0 + .byte $0, $0, $0, $0, $0, $0, $82, $82 + .byte $0, $0, $28, $0, $0, $0, $0, $0 .byte $2, $80, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 @@ -22,7 +22,7 @@ _font160: .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 - .byte $0, $0, $0, $0, $c3, $c3, $3c, $0 + .byte $0, $0, $c3, $c3, $0, $0, $3c, $0 .byte $0, $0, $0, $0, $3, $c0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 @@ -32,8 +32,8 @@ _font160: .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 - .byte $0, $0, $0, $0, $0, $0, $55, $55 - .byte $0, $0, $5, $0, $11, $44, $5, $0 + .byte $0, $0, $0, $0, $0, $0, $ff, $ff + .byte $0, $0, $11, $44, $5, $0, $5, $0 .byte $0, $0, $5, $0, $1, $40, $15, $50 .byte $55, $50, $55, $50, $15, $40, $1, $54 .byte $15, $40, $15, $40, $5, $0, $15, $40 @@ -43,8 +43,8 @@ _font160: .byte $55, $54, $50, $14, $50, $14, $5, $40 .byte $55, $0, $1, $50, $54, $14, $15, $40 .byte $15, $40, $55, $50, $5, $0, $50, $14 - .byte $50, $14, $15, $40, $55, $54, $a, $0 - .byte $22, $88, $a, $0, $0, $0, $a, $0 + .byte $50, $14, $15, $40, $55, $54, $22, $88 + .byte $a, $0, $a, $0, $0, $0, $a, $0 .byte $2, $80, $2a, $a0, $aa, $a0, $aa, $a0 .byte $2a, $80, $2, $a8, $2a, $80, $2a, $80 .byte $a, $0, $2a, $80, $2a, $0, $a0, $a0 @@ -54,7 +54,7 @@ _font160: .byte $a0, $28, $a, $80, $aa, $0, $2, $a0 .byte $a8, $28, $2a, $80, $2a, $80, $aa, $a0 .byte $a, $0, $a0, $28, $a0, $28, $2a, $80 - .byte $aa, $a8, $f, $0, $33, $cc, $f, $0 + .byte $aa, $a8, $33, $cc, $f, $0, $f, $0 .byte $0, $0, $f, $0, $3, $c0, $3f, $f0 .byte $ff, $f0, $ff, $f0, $3f, $c0, $3, $fc .byte $3f, $c0, $3f, $c0, $f, $0, $3f, $c0 @@ -65,7 +65,7 @@ _font160: .byte $ff, $0, $3, $f0, $fc, $3c, $3f, $c0 .byte $3f, $c0, $ff, $f0, $f, $0, $f0, $3c .byte $f0, $3c, $3f, $c0, $ff, $fc, $0, $0 - .byte $0, $0, $0, $0, $5, $50, $5, $0 + .byte $0, $0, $5, $50, $0, $0, $5, $0 .byte $0, $0, $5, $0, $1, $40, $54, $14 .byte $5, $0, $50, $50, $50, $50, $0, $50 .byte $50, $50, $50, $50, $5, $0, $50, $50 @@ -75,8 +75,8 @@ _font160: .byte $14, $14, $50, $14, $50, $14, $14, $50 .byte $14, $0, $15, $40, $14, $14, $50, $50 .byte $5, $0, $50, $50, $15, $40, $54, $54 - .byte $14, $50, $5, $0, $14, $14, $0, $0 - .byte $a, $a0, $a, $0, $0, $0, $a, $0 + .byte $14, $50, $5, $0, $14, $14, $a, $a0 + .byte $0, $0, $a, $0, $0, $0, $a, $0 .byte $2, $80, $a8, $28, $a, $0, $a0, $a0 .byte $a0, $a0, $0, $a0, $a0, $a0, $a0, $a0 .byte $a, $0, $a0, $a0, $2, $80, $a0, $a0 @@ -86,7 +86,7 @@ _font160: .byte $a0, $28, $28, $a0, $28, $0, $2a, $80 .byte $28, $28, $a0, $a0, $a, $0, $a0, $a0 .byte $2a, $80, $a8, $a8, $28, $a0, $a, $0 - .byte $28, $28, $0, $0, $f, $f0, $f, $0 + .byte $28, $28, $f, $f0, $0, $0, $f, $0 .byte $0, $0, $f, $0, $3, $c0, $fc, $3c .byte $f, $0, $f0, $f0, $f0, $f0, $0, $f0 .byte $f0, $f0, $f0, $f0, $f, $0, $f0, $f0 @@ -97,7 +97,7 @@ _font160: .byte $3c, $0, $3f, $c0, $3c, $3c, $f0, $f0 .byte $f, $0, $f0, $f0, $3f, $c0, $fc, $fc .byte $3c, $f0, $f, $0, $3c, $3c, $0, $0 - .byte $0, $0, $5, $0, $54, $15, $0, $0 + .byte $0, $0, $54, $15, $5, $0, $0, $0 .byte $55, $55, $0, $0, $1, $40, $55, $14 .byte $5, $0, $14, $0, $0, $50, $55, $54 .byte $0, $50, $50, $50, $5, $0, $50, $50 @@ -107,8 +107,8 @@ _font160: .byte $14, $4, $51, $14, $50, $54, $50, $14 .byte $14, $0, $51, $50, $14, $50, $1, $50 .byte $5, $0, $50, $50, $50, $50, $55, $54 - .byte $5, $40, $5, $0, $5, $4, $a, $0 - .byte $a8, $2a, $0, $0, $aa, $aa, $0, $0 + .byte $5, $40, $5, $0, $5, $4, $a8, $2a + .byte $a, $0, $0, $0, $aa, $aa, $0, $0 .byte $2, $80, $aa, $28, $a, $0, $28, $0 .byte $0, $a0, $aa, $a8, $0, $a0, $a0, $a0 .byte $a, $0, $a0, $a0, $0, $a0, $aa, $a0 @@ -118,7 +118,7 @@ _font160: .byte $a0, $a8, $a0, $28, $28, $0, $a2, $a0 .byte $28, $a0, $2, $a0, $a, $0, $a0, $a0 .byte $a0, $a0, $aa, $a8, $a, $80, $a, $0 - .byte $a, $8, $f, $0, $fc, $3f, $0, $0 + .byte $a, $8, $fc, $3f, $f, $0, $0, $0 .byte $ff, $ff, $0, $0, $3, $c0, $ff, $3c .byte $f, $0, $3c, $0, $0, $f0, $ff, $fc .byte $0, $f0, $f0, $f0, $f, $0, $f0, $f0 @@ -129,7 +129,7 @@ _font160: .byte $3c, $0, $f3, $f0, $3c, $f0, $3, $f0 .byte $f, $0, $f0, $f0, $f0, $f0, $ff, $fc .byte $f, $c0, $f, $0, $f, $c, $0, $0 - .byte $0, $0, $1, $40, $54, $15, $0, $0 + .byte $0, $0, $54, $15, $1, $40, $0, $0 .byte $55, $55, $0, $0, $1, $40, $51, $54 .byte $5, $0, $5, $40, $5, $40, $50, $50 .byte $0, $50, $55, $40, $1, $40, $15, $40 @@ -139,8 +139,8 @@ _font160: .byte $14, $0, $55, $54, $51, $54, $50, $14 .byte $15, $50, $50, $50, $15, $50, $15, $0 .byte $5, $0, $50, $50, $50, $50, $51, $14 - .byte $5, $40, $15, $40, $1, $40, $2, $80 - .byte $a8, $2a, $0, $0, $aa, $aa, $0, $0 + .byte $5, $40, $15, $40, $1, $40, $a8, $2a + .byte $2, $80, $0, $0, $aa, $aa, $0, $0 .byte $2, $80, $a2, $a8, $a, $0, $a, $80 .byte $a, $80, $a0, $a0, $0, $a0, $aa, $80 .byte $2, $80, $2a, $80, $2a, $a0, $a0, $a0 @@ -150,7 +150,7 @@ _font160: .byte $a2, $a8, $a0, $28, $2a, $a0, $a0, $a0 .byte $2a, $a0, $2a, $0, $a, $0, $a0, $a0 .byte $a0, $a0, $a2, $28, $a, $80, $2a, $80 - .byte $2, $80, $3, $c0, $fc, $3f, $0, $0 + .byte $2, $80, $fc, $3f, $3, $c0, $0, $0 .byte $ff, $ff, $0, $0, $3, $c0, $f3, $fc .byte $f, $0, $f, $c0, $f, $c0, $f0, $f0 .byte $0, $f0, $ff, $c0, $3, $c0, $3f, $c0 @@ -161,7 +161,7 @@ _font160: .byte $3f, $f0, $f0, $f0, $3f, $f0, $3f, $0 .byte $f, $0, $f0, $f0, $f0, $f0, $f3, $3c .byte $f, $c0, $3f, $c0, $3, $c0, $0, $0 - .byte $0, $0, $0, $50, $5, $50, $0, $0 + .byte $0, $0, $5, $50, $0, $50, $0, $0 .byte $0, $0, $0, $0, $1, $40, $50, $54 .byte $5, $0, $0, $50, $0, $50, $14, $50 .byte $55, $40, $50, $0, $0, $50, $50, $50 @@ -171,8 +171,8 @@ _font160: .byte $14, $0, $55, $54, $55, $14, $50, $14 .byte $14, $14, $50, $50, $14, $14, $54, $0 .byte $5, $0, $50, $50, $50, $50, $50, $14 - .byte $14, $50, $50, $50, $40, $50, $0, $a0 - .byte $a, $a0, $0, $0, $0, $0, $0, $0 + .byte $14, $50, $50, $50, $40, $50, $a, $a0 + .byte $0, $a0, $0, $0, $0, $0, $0, $0 .byte $2, $80, $a0, $a8, $a, $0, $0, $a0 .byte $0, $a0, $28, $a0, $aa, $80, $a0, $0 .byte $0, $a0, $a0, $a0, $a0, $a0, $a0, $a0 @@ -182,7 +182,7 @@ _font160: .byte $aa, $28, $a0, $28, $28, $28, $a0, $a0 .byte $28, $28, $a8, $0, $a, $0, $a0, $a0 .byte $a0, $a0, $a0, $28, $28, $a0, $a0, $a0 - .byte $80, $a0, $0, $f0, $f, $f0, $0, $0 + .byte $80, $a0, $f, $f0, $0, $f0, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $f0, $fc .byte $f, $0, $0, $f0, $0, $f0, $3c, $f0 .byte $ff, $c0, $f0, $0, $0, $f0, $f0, $f0 @@ -193,7 +193,7 @@ _font160: .byte $3c, $3c, $f0, $f0, $3c, $3c, $fc, $0 .byte $f, $0, $f0, $f0, $f0, $f0, $f0, $3c .byte $3c, $f0, $f0, $f0, $c0, $f0, $0, $0 - .byte $0, $0, $50, $50, $11, $44, $0, $0 + .byte $0, $0, $11, $44, $50, $50, $0, $0 .byte $0, $0, $0, $0, $1, $40, $50, $14 .byte $15, $0, $50, $50, $50, $50, $5, $50 .byte $50, $0, $14, $0, $50, $50, $50, $50 @@ -203,8 +203,8 @@ _font160: .byte $14, $0, $54, $54, $54, $14, $14, $50 .byte $14, $14, $50, $50, $14, $14, $50, $50 .byte $45, $10, $50, $50, $50, $50, $50, $14 - .byte $50, $14, $50, $50, $50, $14, $a0, $a0 - .byte $22, $88, $0, $0, $0, $0, $0, $0 + .byte $50, $14, $50, $50, $50, $14, $22, $88 + .byte $a0, $a0, $0, $0, $0, $0, $0, $0 .byte $2, $80, $a0, $28, $2a, $0, $a0, $a0 .byte $a0, $a0, $a, $a0, $a0, $0, $28, $0 .byte $a0, $a0, $a0, $a0, $a0, $a0, $2a, $80 @@ -214,7 +214,7 @@ _font160: .byte $a8, $28, $28, $a0, $28, $28, $a0, $a0 .byte $28, $28, $a0, $a0, $8a, $20, $a0, $a0 .byte $a0, $a0, $a0, $28, $a0, $28, $a0, $a0 - .byte $a0, $28, $f0, $f0, $33, $cc, $0, $0 + .byte $a0, $28, $33, $cc, $f0, $f0, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $f0, $3c .byte $3f, $0, $f0, $f0, $f0, $f0, $f, $f0 .byte $f0, $0, $3c, $0, $f0, $f0, $f0, $f0 @@ -225,7 +225,7 @@ _font160: .byte $3c, $3c, $f0, $f0, $3c, $3c, $f0, $f0 .byte $cf, $30, $f0, $f0, $f0, $f0, $f0, $3c .byte $f0, $3c, $f0, $f0, $f0, $3c, $0, $0 - .byte $0, $0, $15, $40, $41, $41, $0, $0 + .byte $0, $0, $41, $41, $15, $40, $0, $0 .byte $0, $0, $0, $0, $1, $40, $15, $50 .byte $5, $0, $15, $40, $15, $40, $1, $50 .byte $55, $50, $5, $40, $55, $50, $15, $40 @@ -235,8 +235,8 @@ _font160: .byte $55, $0, $50, $14, $50, $14, $5, $40 .byte $55, $50, $15, $40, $55, $50, $15, $40 .byte $55, $50, $50, $50, $50, $50, $50, $14 - .byte $50, $14, $50, $50, $55, $54, $2a, $80 - .byte $82, $82, $0, $0, $0, $0, $0, $0 + .byte $50, $14, $50, $50, $55, $54, $82, $82 + .byte $2a, $80, $0, $0, $0, $0, $0, $0 .byte $2, $80, $2a, $a0, $a, $0, $2a, $80 .byte $2a, $80, $2, $a0, $aa, $a0, $a, $80 .byte $aa, $a0, $2a, $80, $2a, $80, $a, $0 @@ -246,7 +246,7 @@ _font160: .byte $a0, $28, $a, $80, $aa, $a0, $2a, $80 .byte $aa, $a0, $2a, $80, $aa, $a0, $a0, $a0 .byte $a0, $a0, $a0, $28, $a0, $28, $a0, $a0 - .byte $aa, $a8, $3f, $c0, $c3, $c3, $0, $0 + .byte $aa, $a8, $c3, $c3, $3f, $c0, $0, $0 .byte $0, $0, $0, $0, $3, $c0, $3f, $f0 .byte $f, $0, $3f, $c0, $3f, $c0, $3, $f0 .byte $ff, $f0, $f, $c0, $ff, $f0, $3f, $c0 diff --git a/libsrc/atari7800/font160flipped.png b/libsrc/atari7800/font160flipped.png index 289f29c47c163c9dd364467d5a4f1d3202433d5f..ae237c74bc660ca30a72977999a37b3b54e2e726 100644 GIT binary patch delta 2897 zcmV-X3$FB|7mOE>Bmvx!B_DrTj^#EC{MRXR1alLq<4_xr8|3&Y`MI~5PBH_;hV9p~ zOi@+ElDe$F{@mpc98@Wann!K5UO2RA<HV1+UPrs{bm@J6JM?M&(q7&_Vl)Y!^7_;B z^`u0*eSGlNo%+}I63-isC(zr-Pe3^%Gk(m^Nur%!?W9kjwq8GK3;%zdYUkH;JRR>; zo~u7W?~Jb3-{o_II#8O1frNPp$#vi3m4Td#CGphz&ivM*5(N*E_GAJ;zD(}};Lia4 z2tK{Q{sH}qzXzZ5=^;O0S>ITz-@hRH9{d~PPXo()M*Q^!XtkfF^IUt+*n7QZms){n zeH3+rO>be)u>*3sKdXN@9hc#^-)F-aS6%~@&ud&A=b%OmR(2t!NlBa5{TwuqqVi(L zlX<Y*Z6VH$2e=||gp)SAG?^0MZSX20Xy*4^=pMJ-;|&UoJPBQy5R7iJ|KTkE_VRbm zviCR;(G4iySRpSyB0w64xpPM^5JLOm&2E6-&WHZ%ldvFFFlc`_%z+8!)n6gH(TBF= z=2_6s@O-?W_<RBYB8+WFh6D^;mBe5)moqyNa10QX$ecyFg8?$*i6mJ?Di`PAGd8|) zy8E(m<<ksr0ud%v9NaWXkfmzSk840fX<}+-)!d?3v#e6JTCLUVF}ZYcb@S@(;mtE7 zG%RX(M6}4pP2hil)@t(>t+h-piGdQa68#e`ox61H)@%13z4aWB&(L9`4j(bv$jMVC zY+}~wGiIB)s4O_e(q*eIU$NTC4Xth2x^36(J9gXo&f3H3Pv>v2Mh|OzGj;m;J8Nhy z?r$OJ*ohs^z!)omaX$<|(0n+%f>il1cR0HmqbQ7#q#b{5%A~^>DAYx4o8GzmVD6WA zD;B@R8~+z`<xuy3Fjqj`&%AxZ+C1yrxEXs@;lcD0RNtnQy}=qxXVf`Ig?UXlO2|&i zE)^^9v|QJ{IPmR|;4f<=_kr*Oo!ed&8C5EMM^~SW0#EHcXWvZGmhP5I+TK1h6&C;; z(0Dg(G+ckBRZ=4xYXi#6($^Jx^sTg3q5z*2XZY%>nNph^7Dvcx`(VfjJJ;OM1<}b7 z@~F1T1UybVrgms>)))iq?$-DkZ7V*(xH_9?cL#K1Ub!M6rH<sTbz!M?Us@)NIWFr# zLj*nLeAi-0A8?onG<OE&vJRlCuL|5R1F-^{0hfP5dOWHYq#E5JN<GWW9N1)R1N^!Z zIOPNo)o3H|*0UBh_2m<<4_{ar&<2OPSxXzS29O2nFe(~#_2vfZY1!xl47y|{Fp}4b ziQ>hi8sb15S8_lw1vuOsjvWo`Baa*nqKgWUk-6gH1}UK0MgyXtU8ly1wrlH+y7^i= zi+6uH>8oxmWqUg8(R=5#tu=bJY=Lru59>mmOA_YDh)@UEnb?lFtlDT5lo!OiC#E3- z5{6UkLvm!@i*BC6H&BM3#3XPOmS>L`DQtvlYJiYi!Q#2jddUD$%pfMLqCQ%vEozv8 zOq3zwHtW2V%@ucb#DP?>5Y#k{Itn0<g~fk2Wx$zuqdaSaK(Ly?3h*v_PrGu4Ow4$U zBL@WX8)L)Nz$hxSI7$I14b&xGfVBmu@DM^Gz+ZBv#;^(dx{mXly7LARUnlSjdRNPW zFF_*~f}`fBNnT;F&dAAyq1ttq6h!2Gz#+PaZL=0K1Y4khD|!sF0y~wu+H{r)v;u#C zJ4S~JP`W%B9{~vDf`RnjI<2aZrJe0;Pb5nabfbdG3W9sUs$!uxiWy`^?E>cnrYr62 zpdsEhdad(R4`U5Ib&W8X+Bot#TR(WKMi=}806|nUDBova0MfCw!J^gOplFfxa)zzg zP+CXLVwybq`JiIM4!T%TAoVB+wugWE0fElmj;!Q02XseAgFh2?zOy^b&anN0x1#hL z;4OQgvg!`l$Aqn1uwh<x8UXa8=Sw?*!6Dnn<wj$>;JZWqvCKWeV)+}w7#boxqHhHN z00D$)LqkwWLqi~Na&Km7Y-Iodc$|HaJxIeq9K~PLN<}IT?I7Zip*pqT7vg`YRVYG* zP%E_RU~=gfG-*guTpR`0f`cE6RR<SmT^(EnLGS~_(aA~CMN0f%QfLwD!Ery{-Fw`< z1B6C}X;xqi&~)2OClg{ew<-o-5rBX&Vi=d1Wz0!Z3SGz7J$!t<i}S4R=l&f1YTjai zPb8jYhG`RT5KnK~2Iqa^2rGZdD)BjS%%lqvKXP61_>FVXWr1f#%uIToI6^EIJ6P#p zRx&l>DdMQA>69;IJytnyan>p|*19KuVJNS!EOVXaFp^lr5+sOFP(v9N*of1rlVTxF z`-v|8A=fXFOCeVoj2sK7LWAu3!T;cQw^m_t!b=JzfSwn}`4|C$yFh=l?l|Aaj?+8= z{LjFZ-u71;z|1G<^|ls00tU8$i|e+g>;acMz~GZ1o3bnUX$pk`@P0<$lmo)IK;N3z zTWcSu4?u>xO5Felhrno&ve&!3ySKBqf6uh~`vH}ka<y9}0LTCU01Qw}R7C&)0RI30 zJ^ujz|Njn{&M*J~011=M2OWPCFcxOAqW=H@1Di=iK~zY`t(8G)<T?~ZUsc5rOu)ZE zo_~5IJZk8v!4CAFt3ck5$td(HM2&=3A;`3$w<4&i!2e!JRh0!q#<Kh*jPKFAPa^XA zDx!q#Fv}OUw>J@;N5}Q6zWMPXGUm}KeAPGi9o@HIjWl>R0MMHSS3iFrY(MvNBk08- z(wJpl>>`adhBH<z)+nQzd69#$iZQGb#xSzq-&<+%%@zO#x8WMrqaW5`Z3VqJL|V74 zo8P4M&T+=;%{%RMyKZuHUNeSO!Wc&W=buhGe6s_9DekzYa7t5{LMP}YBGSb@>}i)S z#mJd7?kSFO?7}Xmm_~obuu2%iC}j$bkvjmZAObCS6l4ywF^bKoCnb2~XbBj0fOLxj zj8zyZ)jGKY@ERh}az{b#xH_lVoPO4VM~;?&V+TmLD8P7)k=9+5JAgDo1X}JWD4s%$ zBU>C_M!_RTOCYiXq+1kV(umPm63X_Jzbv%C0sydsS*%n57*l^IM5$TL##R8paaMR! zO3rvYm;!FG4f3XW@&n~>8!fN_0PNs4FBJgB)Co~~)vNOr0B~G1-n5nr-j1$-+kA_> zX`j>7)ucUz9RTq65qnqxU`(A5HHI<7Q~?0Tb;KLAUh#H{1>BxG<W2Wd0nqyez}e#W z=Vs2rXIKKJz|Maf0$`dOVWJE6TFGM108r+8DFDte1q?L%f!;3wE*`(Xwrdu?!V)kA zcGeL9)7%LYU9i_$Hh%$tGCxQGaDgdcpfyeOegSYz`2Em@EIhyxFa>rt5&+XY3KLzh z*Q4y|3IJt(k^<lgQ@}vsW&tC$2pUUywDJP6#R%qe28e&j0GRry2{eJ?ysZGZ)R@`8 z0#0fXbe{5P<qcws5!~kt5SIZk^-&XO0?m0}0dT2vtAhoi)FK!Y<<ZJJ#1<pO&lw;w z17PZ-CeQ>U=Tim1r7?!`y>GwF1AywYkcN9+_0!|E20RtF3w4Wy;d2?t_kaHs0EPtA z_jmUIpof1fq~)Gh{q%UP0nf$lLfztF_*@3^{rlenz>$Fd`6oUAj8hiUanGxMdc4+v zm*RGzZb>kFE(7`g`=bDeBv5L=>uW#X0Q4qT{`tVlKQE@71@}|HHW|nP(if?xfa&Y~ z0I=A%w_&{j7+kLW>yedz-CQ{f?x%onGms;sZ&E=|0XNk90buhVA5*vim}0K{;l#=x v_E^q>`zesR4CDmqyVO%4PW65O;3@Dw*MM*7sN7Y500000NkvXXu0mjf#bI<c delta 2899 zcmV-Z3#{~v7o!)DBmwl1B_Drnmh7qx{Ld<~1SBCOEe8aglO1IFDcs$2=YAx4@0_%! zZ8ydss!AoM?0^09lz-quUAQzg@6mh3r$q}Mxbgb>#B-+Fp7ZC^-mO2im#>!?O@gbu ze%g3lX`o$yyzuEx^XK;B?<ef<fj%?82b4QA<7Ryi67BqIr}iEw_UnJ9huim1C%>-w z?)ZfA{?7NHPek?gyL@kG29%a!B4OS_QlGQGB9QxK8MwCR%;-lFxM%T#3(04#0OY6T z{Q&qoK)-@dFR*_>zw)2K=ke|#zhK!vto1)XApJA=55(UlmamBT=LZ}g#C`|)oaN{2 z*Xl;=K(xOV^?*&EVbFhZ0&;m?>o^Qw#l1a8;P5(Xg7Q_fP8>-=3|3B|MvDd=+Rrs9 z5n|)bhAVTjJZ&z<!6}!gb`LsiU~Gwlv*cYw(9B=4&@*p5^CdZEUWBep7>pkJ|HD!K z+rz(elymYzL=T|+V1>B&iU46;=I$B2KnR^TZ~6fIIo|ZwZ^D0qRKcJ=Fgq4F>U<3` zm40YT9-amL6xX*G6kG2B01@U^1VaJ_YKP#dQ#EEI0*(%X1|nx^Ji!2|@<Nc@L^>B^ z=Q}svF?#y4a_8F&Zvqi2T@2hHr$AO~3jJ7fXlSTtQ`N4fUNm%c>8)$;-TF1TVPehH zx|z9!4Hs{&-raxPJ$wX*zymdUSa?K?!DV2gfw2bq54234GTYSIr%j(RM?yZ?QnRO} zXXIGCWWgp@U$%V38k@?7Q|z{N_ifvE>~WyABc~lb{n+snXMC~tX7#t@Z?Hyh*7#xS z_Omb6&|1tsL(sJoy_|tDZUn~dG5|sI<*Yij#+SLvSq*<iQYa%xz1);VmoZS-HnAT1 z;_e4?e~GuE{+D>;|HWLn)crr0E1>Ro-u}Sax^*re#$H)?F|C5^J2cvfVktLy&r^4r zZy4X%cs0h9j@r9)?220PR6bZA7#!UP&qSZu&b9+L>r}k0Q}HTYOUh~eqyy)W-KV41 zI(>xT8!>-T0QORDMyqasOQ`oU*TN!3IY>e*WmTI4(s|bqqcaxq@HN`5Ac^Z4w)S9v zC}z`Ef<J@EG6FxNNThA(0S+rV1S`M6G`ONIv3X|&qkwjuybHUj4|>uV!BufKr*%R~ zb4SJM8#+z&&4o9)i*IB~<Fz9Q@$^A7B)jLxYrTK-dWI+Mx*EaXV-zJj8%kVTPLA2r z=Mhwb23b~FzJX_d(1o#w?YZQfzCA#u(OsNpr?X4d8}LxjqiNJ*$QEA<p^vq<<P39B zNCOI9SapALPBt<IKfy7Qq$w5MDxe$TtT@Dg^yt#y6I9cnmgZQT1H|gUBxGjD@fd;f zB^!S@GB`b}EGVzrWdqS>J7+*jd8})j+ZXkmDiw-H(Ts$Ytg+c{OZxKY*mm@`EmuKx zOVB~j0wssV(G8n8moI|IlCS6jT1$uuy^zr&NdMVxz7aBbNLP3^KvD5dX#-m=KiLOF z*1BVPQhlbtJJOJR7+HCC-QEUL30ZtF4k~{rI+xW()D_rdQEroFK3bhfF<oQnlQ$~B zsb)W@C!jy)Hn;`+2!AzGz}cd5^x|_A0z6xgt60X6MLF&=@B|fS!#qG8t)YNf2ITIk z3yxN=8Qny*5`YSNncObc%bFqw_rY{=lR6w)v<}ZTZk0?J(%lz6J<V+<Ok<ksDXM?r zg77A0r*2TI)*JZ_NJ)^K;>dHu?4Xl8c=17HlxvKbs6D$W<W$*l$+_l$XvvX&l)w&R zW4M=Z^xg-J+xrxlDL~vq@1`2bzH|1z!Z$V%sH^o72HSgQ8g_rM+vZd7Kf#9as#a`< z*4#kSu-ic$n+9=Jk^S19o>mJFofChqYR-@z-so5(c1|D|6&<Avet^xEq#1G(t32{r z0(zsP!m^Rib(LwbKgE^|ehbAS7ZKT>Pa1Tvep1dtneYHIEgQ>?{$@Nq@+83<AifN2 zDR74ZwPAfrA@KuQ)$(t&5FS<Catgr!00D(*LqkwWLqi~Na&Km7Y-Iodc$||U1`B_s zR2=LeBAB5%Sr8QwT(k;Bs8DK!Rvk<({emV9Ns5c3;979-W3lSs;;gHKs~`w|fH*oi zDY{6B|4RxjVmvtR$GdxvyLW)ls4&$Gi~*`<8R<k^%;r|b;41<U5W)~<BxdS!sZ<i4 z<Le$izTU-nmiM_oM~{*>8Q>F%XPJL)Si~E|Q=68~d7n7KN|Hi+PCRPR1&JTIF1!53 zx#+OKGb2VOJx?4V7K<G$cQ7j%D)A(7R8cj`7qTuZoVPful^Sc^lfN*W*H)IfPIC|m zEMf^Mh>%f385LNF(W;SRB2D{o5C4GUPmxO|R~d{P3#dYc<oLn=;CHuXVPb#WO$x_> zt{2<>7zTp7K(lV!-^aGyJOTXAz?IhaR~x|eC+YRJ7Ci!bw}Ff6wkGcZmpefJlP(#O zBl&3xg#z$?M&FbJ`fh>Hn%i4zAEysMhPq1L00)P_NRhJFJ>K2j+1tNoTK)Y1cY$)L zy-2D$0000CP)t-s00030005Jx2P=ON92LaOCb9qk1DQ!gK~zY`t(8HF<TwyT!<l6$ zOo69C-VePJUJdltU={T2l_1~8)T-%Ih+GMu!cg0Wxr!jS0?+@FGOG?yGM43#F#b>R zLn3IeuZj<8jC@&pd(-)OTEFg_@9$H7p7*c%;<BJ?<=f9TKN~aH1=nC2H<*9Hw1QqN zBCTD_;udM0wVZKkaaLK?nnfDx6k}K=jA7(D`TncJH#-0r{f28?PhnigwG;H>5$XK4 zZef!yc+Z)jx8Swc-MY!i2hA8(31b+AUVi-P@y#9p=6K+m_j8)}dG7_iL`3>{>_<AJ zPcd>PO-G7TocjHcb4(LsSS5dqVU#L|*4_a)1rcbuqafQDYZaSSPfGB}(Gsxi0O=kD z7^g5&NT|-=0R#;ZXt|>xe_FlQY+gTW!6QdYz_SCSdlX=T#z-Tf`gjMBCWt`G9R<bn z9^=For<Y0a$k7sr>;UN=1(-BpG?j#E#SJAH8nXZZ{@yN5DgcbB6QX~VQO3Fo05~oR zZ_s+dTVo5j#kI(r_NkLFifkJ#umJ%6-fuxF0F0><qV%d)A1VOgxN5vX>lJS&U%+jl zL*8`Hy`)*>IB0<b0Pyz_dsqQrOq~!l?b9Ap1ppkk32)GP!`nF)a7XHqH~mX>{s(}I z!|$8cWZ?#ufGM!EmH>a4=2n>Kg1uI<xC;Q3`9TVR3rqn68SMK5z%}6a*KW<iS6Bk3 zz|MLCV48bjq6_v~%NDKxQ07M|0Io0v476h39{_F%zrXi;7QVw0Fa>rt5&+XY3KLzh z*OMIS1^{J#mIB}gQ@}vAmcZdsQCLTLwDJP6#R&Fu28hi7nEHRH2{eJ?ysH4X)LJZq z!=)BMA1IGj-XOLZ!GF#G@fiS9A2op{(3}qy0GE1?WpKFEA{Z0p(aHzJ79+&Z86YtO zVCthL&;%3bQw6}KG4ADi)_(i>0HB5}q~)Gh{q%UP0Z+y4LfztE_*@3^{qJ7|fF%Lt z{r6uF0D8<qI_`gY)lZMt8t`1)F4QdnhR<an-@pGZ06Yok7=QeE0GQ@1r01Sj{q%UP z0WZbvLfw*J_*@3^{og+YKqP@u0|xW@dIvDrT=`AI%5N51&Vt7&;MxqNf%HY{DPV_s ze*jqAxW2vJ0gOIZ{`JJlziz&q1&>o8bQ#DA(l@E6fFD2W{Q+PL^Zx#R2QbH6`S&v` x|9-@B7CcUY)Mp@PNI#^W0&%YQ2LPS|{{w7yZk3p#3Zwu4002ovPDHLkV1oQgdk+8r From 8b06ff18c086d97eb4cbc503c2855a1253c85311 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 4 Apr 2022 10:50:38 +0300 Subject: [PATCH 1571/2710] Don't set cursor in clrscr --- libsrc/atari7800/clrscr.s | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s index 8d695b706..4d3873499 100644 --- a/libsrc/atari7800/clrscr.s +++ b/libsrc/atari7800/clrscr.s @@ -3,18 +3,13 @@ .export _clrscr - .import CURS_X - .import CURS_Y .import _screen - .import pushax, __bzero + .import pusha0,pushax, __bzero .code .proc _clrscr - lda #0 - sta CURS_X - sta CURS_Y lda #<(_screen) ldx #>(_screen) jsr pushax From f57676421438d207fd95df0e08326f24c2faa355 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 4 Apr 2022 10:51:13 +0300 Subject: [PATCH 1572/2710] Remove cursor from conio init --- libsrc/atari7800/conio.s | 7 ------- 1 file changed, 7 deletions(-) diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index 2b9062342..5852c1103 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -14,18 +14,11 @@ .export _zones .export _dll .export _initconio - .export CURS_X, CURS_Y .bss _screen: .res charsperline * screenrows - .data -CURS_X: - .byte 0 -CURS_Y: - .byte 0 - ;---------------------------------------------------------------------------- ; Macros used to generate lists From 7f1e69f5e011d540e7a303e57fd9478ad47c47be Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 4 Apr 2022 10:51:43 +0300 Subject: [PATCH 1573/2710] Add cursor processing --- libsrc/atari7800/setcursor.s | 169 +++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 libsrc/atari7800/setcursor.s diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s new file mode 100644 index 000000000..9f8765656 --- /dev/null +++ b/libsrc/atari7800/setcursor.s @@ -0,0 +1,169 @@ +; +; 2022-04-03, Karri Kaksonen +; +; setcursor (unsigned char on); +; +; The Atari 7800 does not have a hw cursor. +; This module emulates a cursor to be used with the conio +; implementation. +; +; The actual cursor display is included in the conio dll +; but every scanline has the element silenced by default +; at the end of every zone. +; +; The way the cursor works is to silence it before the cursor +; position changes and enable it afterwards. +; +; In order to get some performance we have a pointer to the +; cursor header structure. This structure is always at the +; end of the zone. So the pointer changes when CURS_Y changes. +; +; There is so many dependencies that it makes sense to +; deal with all CURS_X, CURS_Y stuff in this file and +; definitely not allow direct access to the variables. +; + + .export _cursor_visible + .export _cursorzone + .export _gotoxy, _gotox, _gotoy, wherex, wherey + .constructor init_cursor + + .importzp ptr1, sp + .import _zones + .import pusha, incsp1, pusha0, pushax, popax, tosumula0, incax5 + .include "atari7800.inc" + + .macpack generic + + .data +CURS_X: + .byte 0 +CURS_Y: + .byte 0 +_cursor_visible: + .byte 1 + + .bss +_cursorzone: + .res 2 + + .code + +;----------------------------------------------------------------------------- +; Calculate cursorzone address +; You also need to set the cursorzone to point to the correct cursor Header +; at the end of line CURS_Y. +; Offset to cursor zone 5. To next line offset 11 +; cursorzone points to _zones + CURS_Y * 11 + 5 +; A = CURS_Y +calccursorzone: + jsr pusha0 + lda #11 + jsr tosumula0 + jsr incax5 + clc + adc #<_zones + sta _cursorzone ; calculate new cursorzone + sta ptr1 + txa + adc #>_zones + sta _cursorzone+1 + sta ptr1+1 + rts + +;----------------------------------------------------------------------------- +; Set cursor to Y position. +; You also need to set the cursorzone to point to the correct cursor Header +; at the end of line CURS_Y. +; Offset to cursor zone 5. To next line offset 11 +; cursorzone points to _zones + CURS_Y * 11 + 5 +; +; cursorzone[1] = 0 when not CURS_Y, 30 if CURS_Y +; +; Disable cursor +; cursorzone[1] = 0 +; +; Enable cursor +; if showcursor cursorzone[1] = 30 +; +_gotoy: pha + lda CURS_Y + jsr calccursorzone + ldy #1 + lda #0 + sta (ptr1),y ; disable cursor + pla + sta CURS_Y + jsr calccursorzone + lda _cursor_visible + beq L2 + lda #30 ; enable cursor +L2: ldy #1 + sta (ptr1),y + rts + +;----------------------------------------------------------------------------- +; Set cursor to X position. +; You also need to set the hpos offset to the correct value on this line +; cursorzone[3] = 8 * CURS_X +; +_gotox: tay + lda _cursorzone + ldx _cursorzone+1 + sta ptr1 + stx ptr1+1 + tya + ldy #3 + clc + rol + rol + rol + sta (ptr1),y + rts + +;----------------------------------------------------------------------------- +; Set cursor to desired position (X,Y) +; + .proc _gotoxy + + jsr _gotoy + jsr popax + jsr _gotox + rts + .endproc + +;----------------------------------------------------------------------------- +; Get cursor X position +; + .proc wherex + + lda CURS_X + jsr pusha0 + rts + .endproc + +;----------------------------------------------------------------------------- +; Get cursor Y position +; + .proc wherey + + lda CURS_Y + jsr pusha0 + rts + .endproc + +;----------------------------------------------------------------------------- +; Initialize cursorzone at startup +; Offset to cursor zone 5. +; +; .segment "ONCE" +init_cursor: + lda #0 + jsr calccursorzone + rts + +;----------------------------------------------------------------------------- +; force the init constructor to be imported + + .import initconio +conio_init = initconio From 9cdaf82f955a7914152eefae67d8296343ba7e20 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 4 Apr 2022 10:52:04 +0300 Subject: [PATCH 1574/2710] Add space to config --- cfg/atari7800.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 835d0b18f..72922e52e 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -10,7 +10,7 @@ SYMBOLS { __ENCRYPT_BOTTOM__: value = $ff7a, type = export; __ENCRYPT_SIZE__: value = $80, type = export; __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; - __INIT_SIZE__: value = 139, type = export; + __INIT_SIZE__: value = 139+9, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; From ebd2e5085a3eccbcc5f09fc1fdcbbaf5a8bf7d70 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 4 Apr 2022 15:17:26 +0300 Subject: [PATCH 1575/2710] Remove export --- libsrc/atari7800/conio.s | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index 5852c1103..777de004b 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -13,7 +13,6 @@ .export _screen .export _zones .export _dll - .export _initconio .bss _screen: @@ -184,8 +183,11 @@ CTRL_CHAR2B .set $10 CTRL_DMAON .set $40 CTRL_CKOFF .set 0 -_initconio: -initconio: +;----------------------------------------------------------------------------- +; Initialize the conio display lists and zones +; + .proc initconio + jsr _get_tv bne pal lda #<Topscanlines @@ -217,3 +219,5 @@ vblankoff: sta P0C3 rts + .endproc + From 1a2207ffc9fb1de5f5e28f616a9c58bda1d50bda Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 4 Apr 2022 15:18:13 +0300 Subject: [PATCH 1576/2710] Add setcursor method --- libsrc/atari7800/setcursor.s | 42 ++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 9f8765656..37ead5ca6 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -23,9 +23,9 @@ ; definitely not allow direct access to the variables. ; - .export _cursor_visible - .export _cursorzone + .export _setcursor .export _gotoxy, _gotox, _gotoy, wherex, wherey + .export CURS_X, CURS_Y .constructor init_cursor .importzp ptr1, sp @@ -36,6 +36,10 @@ .macpack generic .data +;----------------------------------------------------------------------------- +; The variables used by cursor functions +; + CURS_X: .byte 0 CURS_Y: @@ -49,6 +53,18 @@ _cursorzone: .code +;----------------------------------------------------------------------------- +; Enable/disable cursor +; + .proc _setcursor + + ldx _cursor_visible + sta _cursor_visible + txa + rts + + .endproc + ;----------------------------------------------------------------------------- ; Calculate cursorzone address ; You also need to set the cursorzone to point to the correct cursor Header @@ -56,7 +72,8 @@ _cursorzone: ; Offset to cursor zone 5. To next line offset 11 ; cursorzone points to _zones + CURS_Y * 11 + 5 ; A = CURS_Y -calccursorzone: + .proc calccursorzone + jsr pusha0 lda #11 jsr tosumula0 @@ -71,6 +88,8 @@ calccursorzone: sta ptr1+1 rts + .endproc + ;----------------------------------------------------------------------------- ; Set cursor to Y position. ; You also need to set the cursorzone to point to the correct cursor Header @@ -86,7 +105,9 @@ calccursorzone: ; Enable cursor ; if showcursor cursorzone[1] = 30 ; -_gotoy: pha + .proc _gotoy + + pha lda CURS_Y jsr calccursorzone ldy #1 @@ -96,18 +117,23 @@ _gotoy: pha sta CURS_Y jsr calccursorzone lda _cursor_visible - beq L2 + beq @L1 lda #30 ; enable cursor -L2: ldy #1 +@L1: ldy #1 sta (ptr1),y rts + .endproc + ;----------------------------------------------------------------------------- ; Set cursor to X position. ; You also need to set the hpos offset to the correct value on this line ; cursorzone[3] = 8 * CURS_X ; -_gotox: tay + .proc _gotox + + sta CURS_X + tay lda _cursorzone ldx _cursorzone+1 sta ptr1 @@ -121,6 +147,8 @@ _gotox: tay sta (ptr1),y rts + .endproc + ;----------------------------------------------------------------------------- ; Set cursor to desired position (X,Y) ; From b8dbe0254afc92f1281463f2f13381a9c7c973f9 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 4 Apr 2022 15:18:40 +0300 Subject: [PATCH 1577/2710] Add cputc method --- libsrc/atari7800/cputc.s | 144 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 libsrc/atari7800/cputc.s diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s new file mode 100644 index 000000000..5f4346868 --- /dev/null +++ b/libsrc/atari7800/cputc.s @@ -0,0 +1,144 @@ +; +; Mark Keates, Christian Groessler, Piotr Fusik, Karri Kaksonen +; +; void cputcxy (unsigned char x, unsigned char y, char c); +; void cputc (char c); +; + + .export _cputc + .export _textcolor + .import _gotoxy, _gotox, _gotoy, tosaddax, tosumula0, pusha0 + .import pushax + .import _screen + .importzp ptr1 + .import CURS_X, CURS_Y + + .include "atari7800.inc" + + .data +;----------------------------------------------------------------------------- +; Holder of the text colour offset +; 0 = red, 42 = green, 82 = white +; +txtcolor: + .byte 0 + + .code + +;----------------------------------------------------------------------------- +; Change the text colour +; +; Logical colour names are +; 0 = red +; 1 = green +; 2 = white +; +; The routine will also return the previous textcolor +; + .proc _textcolor + + beq @L2 + sec + sbc #1 + beq @L1 + lda #82 + jmp @L2 +@L1: lda #42 +@L2: ldy txtcolor + sta txtcolor + tya + bne @L3 + rts +@L3: sec + sbc #42 + bne @L4 + lda #1 + rts +@L4: lda #2 + rts + .endproc + +;----------------------------------------------------------------------------- +; Put a character on screen +; +; The code will handle newlines that wrap to start of screen +; + .proc _cputc + + cmp #$0A ; LF + beq @L3 + cmp #$20 ; ' ' + beq @L1 + + jsr @L5 +@L1: + lda CURS_X + cmp #(charsperline-1) + bne @L2 + jmp @L3 +@L2: + clc + adc #1 + jmp _gotox + +@L3: + lda #0 + jsr _gotox + lda CURS_Y + cmp #(screenrows-1) + bne @L4 + lda #0 + jmp _gotoy +@L4: + clc + adc #1 + jmp _gotoy + +@L5: + cmp #$3F ; '?' + bne @L6 + lda #$01 + jmp @L10 +@L6: + cmp #$7C ; '|' + bne @L7 + lda #$05 + jmp @L10 +@L7: + cmp #$41 ; >= 'A' + bcc @L8 + and #$5F + sec + sbc #($41 - 16) + jmp @L10 +@L8: + sec + sbc #($2A) +@L10: + sec + adc txtcolor + asl + pha + + lda CURS_Y + jsr pusha0 + lda #charsperline + jsr tosumula0 + clc + adc CURS_X + bcc @L11 + inx +@L11: jsr pushax + lda #<(_screen) + ldx #>(_screen) + jsr tosaddax + sta ptr1 + stx ptr1+1 + + pla + ldy #0 + sta (ptr1),y + rts + + .endproc + From 0f250d06b9e430cc7455e5120fcbeaaddfbd2b20 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 5 Apr 2022 10:35:59 +0300 Subject: [PATCH 1578/2710] Fix conflicts with some conio routines --- include/atari7800.h | 2 ++ libsrc/atari7800/cputc.s | 8 ++++---- libsrc/atari7800/setcursor.s | 21 ++++++++++++--------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/include/atari7800.h b/include/atari7800.h index 4fdaacfcc..3cbeedb8b 100644 --- a/include/atari7800.h +++ b/include/atari7800.h @@ -52,6 +52,8 @@ /* No support for dynamically loadable drivers */ #define DYN_DRV 0 +extern unsigned char get_tv(void); /* get TV system */ + #include <_tia.h> #define TIA (*(struct __tia*)0x0000) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 5f4346868..3cf8e9de1 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -10,7 +10,7 @@ .import _gotoxy, _gotox, _gotoy, tosaddax, tosumula0, pusha0 .import pushax .import _screen - .importzp ptr1 + .importzp ptr3 .import CURS_X, CURS_Y .include "atari7800.inc" @@ -132,12 +132,12 @@ txtcolor: lda #<(_screen) ldx #>(_screen) jsr tosaddax - sta ptr1 - stx ptr1+1 + sta ptr3 + stx ptr3+1 pla ldy #0 - sta (ptr1),y + sta (ptr3),y rts .endproc diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 37ead5ca6..b283fdff0 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -24,11 +24,11 @@ ; .export _setcursor - .export _gotoxy, _gotox, _gotoy, wherex, wherey + .export gotoxy, _gotoxy, _gotox, _gotoy, wherex, wherey .export CURS_X, CURS_Y .constructor init_cursor - .importzp ptr1, sp + .importzp ptr3, sp .import _zones .import pusha, incsp1, pusha0, pushax, popax, tosumula0, incax5 .include "atari7800.inc" @@ -81,11 +81,11 @@ _cursorzone: clc adc #<_zones sta _cursorzone ; calculate new cursorzone - sta ptr1 + sta ptr3 txa adc #>_zones sta _cursorzone+1 - sta ptr1+1 + sta ptr3+1 rts .endproc @@ -112,7 +112,7 @@ _cursorzone: jsr calccursorzone ldy #1 lda #0 - sta (ptr1),y ; disable cursor + sta (ptr3),y ; disable cursor pla sta CURS_Y jsr calccursorzone @@ -120,7 +120,7 @@ _cursorzone: beq @L1 lda #30 ; enable cursor @L1: ldy #1 - sta (ptr1),y + sta (ptr3),y rts .endproc @@ -136,15 +136,15 @@ _cursorzone: tay lda _cursorzone ldx _cursorzone+1 - sta ptr1 - stx ptr1+1 + sta ptr3 + stx ptr3+1 tya ldy #3 clc rol rol rol - sta (ptr1),y + sta (ptr3),y rts .endproc @@ -160,6 +160,9 @@ _cursorzone: rts .endproc + .proc gotoxy + jmp _gotoxy + .endproc ;----------------------------------------------------------------------------- ; Get cursor X position ; From 0eaf3eef6d45f650af2d65e40d5fa6d24a5ec3dc Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 5 Apr 2022 10:42:58 +0300 Subject: [PATCH 1579/2710] Align font to 256 bytes --- libsrc/atari7800/buildfont160.py | 1 + libsrc/atari7800/font160.s | 1 + 2 files changed, 2 insertions(+) diff --git a/libsrc/atari7800/buildfont160.py b/libsrc/atari7800/buildfont160.py index bb944e335..30ee02695 100644 --- a/libsrc/atari7800/buildfont160.py +++ b/libsrc/atari7800/buildfont160.py @@ -25,6 +25,7 @@ fname= fname + '.s' with open(fname, 'w') as f: f.write(" .export _font160\n") f.write(' .rodata\n') + f.write(' .align 256\n') f.write("_font160:\n") for i in range(0, int(len(data)/32)): printline(f, data[i * 32:i * 32 + 32]) diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s index e9c2e46d8..e5ebbede2 100644 --- a/libsrc/atari7800/font160.s +++ b/libsrc/atari7800/font160.s @@ -1,5 +1,6 @@ .export _font160 .rodata + .align 256 _font160: .byte $0, $0, $41, $41, $0, $0, $14, $0 .byte $0, $0, $0, $0, $1, $40, $0, $0 From 60fffb289af5ef0d1aabbb2495d02a308db159d3 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 5 Apr 2022 11:13:18 +0300 Subject: [PATCH 1580/2710] Allocate own zp pointer for conio implementation --- libsrc/atari7800/extzp.inc | 11 +++++++++++ libsrc/atari7800/extzp.s | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 libsrc/atari7800/extzp.inc create mode 100644 libsrc/atari7800/extzp.s diff --git a/libsrc/atari7800/extzp.inc b/libsrc/atari7800/extzp.inc new file mode 100644 index 000000000..7b24ce0d9 --- /dev/null +++ b/libsrc/atari7800/extzp.inc @@ -0,0 +1,11 @@ +; +; extzp.inc for the Atari 7800 +; +; Karri Kaksonen, 2022-04-05 +; +; Assembler include file that imports the runtime zero page locations used +; by the atari7800 runtime, ready for usage in asm code. +; + + .global ptr7800: zp + diff --git a/libsrc/atari7800/extzp.s b/libsrc/atari7800/extzp.s new file mode 100644 index 000000000..384731941 --- /dev/null +++ b/libsrc/atari7800/extzp.s @@ -0,0 +1,11 @@ +; +; Karri Kaksonen, 2022-04-05 +; +; zeropage locations for exclusive use by the library +; + + .include "extzp.inc" + + .segment "EXTZP" : zeropage + +ptr7800: .res 2 From c6b9a012c846bf4f78f3dc0f1f668910ec1c0111 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 5 Apr 2022 11:13:38 +0300 Subject: [PATCH 1581/2710] Allocate own zp pointer for conio implementation --- cfg/atari7800.cfg | 1 + libsrc/atari7800/cputc.s | 8 ++++---- libsrc/atari7800/setcursor.s | 17 +++++++++-------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 72922e52e..04216f3bd 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -39,6 +39,7 @@ MEMORY { SEGMENTS { ZEROPAGE: load = ZP, type = zp; + EXTZP: load = ZP, type = zp; EXEHDR: load = HEADER, type = ro, optional = yes; STARTUP: load = ROMS, type = ro, define = yes; ONCE: load = ROMS, type = ro, define = yes; diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 3cf8e9de1..f7614e528 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -10,10 +10,10 @@ .import _gotoxy, _gotox, _gotoy, tosaddax, tosumula0, pusha0 .import pushax .import _screen - .importzp ptr3 .import CURS_X, CURS_Y .include "atari7800.inc" + .include "extzp.inc" .data ;----------------------------------------------------------------------------- @@ -132,12 +132,12 @@ txtcolor: lda #<(_screen) ldx #>(_screen) jsr tosaddax - sta ptr3 - stx ptr3+1 + sta ptr7800 + stx ptr7800+1 pla ldy #0 - sta (ptr3),y + sta (ptr7800),y rts .endproc diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index b283fdff0..4400798c3 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -28,10 +28,11 @@ .export CURS_X, CURS_Y .constructor init_cursor - .importzp ptr3, sp + .importzp sp .import _zones .import pusha, incsp1, pusha0, pushax, popax, tosumula0, incax5 .include "atari7800.inc" + .include "extzp.inc" .macpack generic @@ -81,11 +82,11 @@ _cursorzone: clc adc #<_zones sta _cursorzone ; calculate new cursorzone - sta ptr3 + sta ptr7800 txa adc #>_zones sta _cursorzone+1 - sta ptr3+1 + sta ptr7800+1 rts .endproc @@ -112,7 +113,7 @@ _cursorzone: jsr calccursorzone ldy #1 lda #0 - sta (ptr3),y ; disable cursor + sta (ptr7800),y ; disable cursor pla sta CURS_Y jsr calccursorzone @@ -120,7 +121,7 @@ _cursorzone: beq @L1 lda #30 ; enable cursor @L1: ldy #1 - sta (ptr3),y + sta (ptr7800),y rts .endproc @@ -136,15 +137,15 @@ _cursorzone: tay lda _cursorzone ldx _cursorzone+1 - sta ptr3 - stx ptr3+1 + sta ptr7800 + stx ptr7800+1 tya ldy #3 clc rol rol rol - sta (ptr3),y + sta (ptr7800),y rts .endproc From 9d4f1a04156cf63a5f845abb5222da906a9ada03 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Wed, 6 Apr 2022 13:27:47 +0300 Subject: [PATCH 1582/2710] Add local multiply routine --- libsrc/atari7800/cputc.s | 128 ++++++++++++++++++++++--------------- libsrc/atari7800/extzp.inc | 2 + libsrc/atari7800/extzp.s | 2 + 3 files changed, 82 insertions(+), 50 deletions(-) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index f7614e528..18904adfb 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -7,7 +7,7 @@ .export _cputc .export _textcolor - .import _gotoxy, _gotox, _gotoy, tosaddax, tosumula0, pusha0 + .import _gotoxy, _gotox, _gotoy, tosaddax, pusha0 .import pushax .import _screen .import CURS_X, CURS_Y @@ -18,13 +18,39 @@ .data ;----------------------------------------------------------------------------- ; Holder of the text colour offset -; 0 = red, 42 = green, 82 = white +; 0 = red, 42 = green, 84 = white ; txtcolor: .byte 0 .code +;--------------------------------------------------------------------------- +; 8x16 routine + +umula0: + ldy #8 ; Number of bits + lda #0 + lsr ptr7800 ; Get first bit into carry +@L0: bcc @L1 + + clc + adc ptrtmp + tax + lda ptrtmp+1 ; hi byte of left op + adc ptr7800+1 + sta ptr7800+1 + txa + +@L1: ror ptr7800+1 + ror a + ror ptr7800 + dey + bne @L0 + tax + lda ptr7800 ; Load the result + rts + ;----------------------------------------------------------------------------- ; Change the text colour ; @@ -41,21 +67,21 @@ txtcolor: sec sbc #1 beq @L1 - lda #82 + lda #84 jmp @L2 @L1: lda #42 @L2: ldy txtcolor - sta txtcolor + sta txtcolor ; Store new textcolor tya bne @L3 - rts + rts ; Old colour was 0 @L3: sec sbc #42 bne @L4 lda #1 - rts + rts ; Old colour was 1 @L4: lda #2 - rts + rts ; Old colour was 2 .endproc ;----------------------------------------------------------------------------- @@ -66,79 +92,81 @@ txtcolor: .proc _cputc cmp #$0A ; LF - beq @L3 - cmp #$20 ; ' ' - beq @L1 - - jsr @L5 -@L1: - lda CURS_X - cmp #(charsperline-1) - bne @L2 - jmp @L3 -@L2: - clc - adc #1 - jmp _gotox - -@L3: - lda #0 + bne @L4 +@L1: lda #0 ; newline jsr _gotox lda CURS_Y cmp #(screenrows-1) - bne @L4 + bne @L2 lda #0 - jmp _gotoy -@L4: - clc + beq @L3 +@L2: clc adc #1 - jmp _gotoy +@L3: jmp _gotoy +@L4: + cmp #$20 ; ' ' + bne @L5 + lda #$00 + jmp @L10 @L5: cmp #$3F ; '?' bne @L6 - lda #$01 - jmp @L10 + lda #$02 + jmp @L9 @L6: cmp #$7C ; '|' bne @L7 - lda #$05 - jmp @L10 + lda #$06 + jmp @L9 @L7: cmp #$41 ; >= 'A' bcc @L8 - and #$5F + and #$5F ; make upper case sec - sbc #($41 - 16) - jmp @L10 + sbc #($41 - 17) + jmp @L9 @L8: - sec - sbc #($2A) -@L10: - sec + sec ; >= '*' + sbc #($2A - 1) +@L9: + clc adc txtcolor +@L10: asl pha - lda CURS_Y - jsr pusha0 + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + lda CURS_Y ; Find position on screen buffer + sta ptr7800 lda #charsperline - jsr tosumula0 + sta ptrtmp + jsr umula0 clc adc CURS_X bcc @L11 inx -@L11: jsr pushax - lda #<(_screen) - ldx #>(_screen) - jsr tosaddax +@L11: adc #<(_screen) sta ptr7800 - stx ptr7800+1 + bcc @L12 + inx +@L12: clc + txa + adc #>(_screen) + sta ptr7800+1 - pla + pla ; Print character on screen ldy #0 sta (ptr7800),y - rts + + lda CURS_X ; Increment cursor + cmp #(charsperline-1) + beq @L1 + clc + adc #1 + jmp _gotox .endproc diff --git a/libsrc/atari7800/extzp.inc b/libsrc/atari7800/extzp.inc index 7b24ce0d9..ac1dd7e41 100644 --- a/libsrc/atari7800/extzp.inc +++ b/libsrc/atari7800/extzp.inc @@ -8,4 +8,6 @@ ; .global ptr7800: zp + .global ptrtmp: zp + .global cursorzone: zp diff --git a/libsrc/atari7800/extzp.s b/libsrc/atari7800/extzp.s index 384731941..376674268 100644 --- a/libsrc/atari7800/extzp.s +++ b/libsrc/atari7800/extzp.s @@ -9,3 +9,5 @@ .segment "EXTZP" : zeropage ptr7800: .res 2 +ptrtmp: .res 2 +cursorzone: .res 2 From 3ba6dd0a4a14f9c8a46f255b7afea3ac1a200365 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Wed, 6 Apr 2022 14:08:03 +0300 Subject: [PATCH 1583/2710] Use local multiply for cursorzone calculations --- libsrc/atari7800/cputc.s | 2 +- libsrc/atari7800/setcursor.s | 68 ++++++++++++++++++++++++------------ 2 files changed, 46 insertions(+), 24 deletions(-) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 18904adfb..773227c8a 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -7,7 +7,7 @@ .export _cputc .export _textcolor - .import _gotoxy, _gotox, _gotoy, tosaddax, pusha0 + .import _gotoxy, _gotox, _gotoy, pusha0 .import pushax .import _screen .import CURS_X, CURS_Y diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 4400798c3..dda92f060 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -30,7 +30,7 @@ .importzp sp .import _zones - .import pusha, incsp1, pusha0, pushax, popax, tosumula0, incax5 + .import pusha, incsp1, pusha0, pushax, popax .include "atari7800.inc" .include "extzp.inc" @@ -48,12 +48,34 @@ CURS_Y: _cursor_visible: .byte 1 - .bss -_cursorzone: - .res 2 - .code +;--------------------------------------------------------------------------- +; 8x16 routine + +umula0: + ldy #8 ; Number of bits + lda #0 + lsr ptr7800 ; Get first bit into carry +@L0: bcc @L1 + + clc + adc ptrtmp + tax + lda ptrtmp+1 ; hi byte of left op + adc ptr7800+1 + sta ptr7800+1 + txa + +@L1: ror ptr7800+1 + ror a + ror ptr7800 + dey + bne @L0 + tax + lda ptr7800 ; Load the result + rts + ;----------------------------------------------------------------------------- ; Enable/disable cursor ; @@ -75,18 +97,23 @@ _cursorzone: ; A = CURS_Y .proc calccursorzone - jsr pusha0 - lda #11 - jsr tosumula0 - jsr incax5 - clc - adc #<_zones - sta _cursorzone ; calculate new cursorzone sta ptr7800 + lda #11 + sta ptrtmp + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + jsr umula0 + clc + adc #5 + bcc @L1 + inx +@L1: clc + adc #<_zones + sta cursorzone ; calculate new cursorzone txa adc #>_zones - sta _cursorzone+1 - sta ptr7800+1 + sta cursorzone+1 rts .endproc @@ -113,7 +140,7 @@ _cursorzone: jsr calccursorzone ldy #1 lda #0 - sta (ptr7800),y ; disable cursor + sta (cursorzone),y ; disable cursor pla sta CURS_Y jsr calccursorzone @@ -121,7 +148,7 @@ _cursorzone: beq @L1 lda #30 ; enable cursor @L1: ldy #1 - sta (ptr7800),y + sta (cursorzone),y rts .endproc @@ -134,18 +161,12 @@ _cursorzone: .proc _gotox sta CURS_X - tay - lda _cursorzone - ldx _cursorzone+1 - sta ptr7800 - stx ptr7800+1 - tya ldy #3 clc rol rol rol - sta (ptr7800),y + sta (cursorzone),y rts .endproc @@ -162,6 +183,7 @@ _cursorzone: .endproc .proc gotoxy + jsr popax jmp _gotoxy .endproc ;----------------------------------------------------------------------------- From 1d7bcb934863c840fb1377bb8191eb6e5b3448c7 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 7 Apr 2022 07:22:19 +0300 Subject: [PATCH 1584/2710] Cleanup --- libsrc/atari7800/clrscr.s | 23 ++++++++++++++++++----- libsrc/atari7800/cputc.s | 4 ++-- libsrc/atari7800/setcursor.s | 8 +++----- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s index 4d3873499..36af7cce2 100644 --- a/libsrc/atari7800/clrscr.s +++ b/libsrc/atari7800/clrscr.s @@ -4,7 +4,8 @@ .export _clrscr .import _screen - .import pusha0,pushax, __bzero + .import pusha0,pushax + .include "extzp.inc" .code @@ -12,10 +13,22 @@ lda #<(_screen) ldx #>(_screen) - jsr pushax - ldx #>(charsperline * screenrows) - lda #<(charsperline * screenrows) - jmp __bzero + sta ptr7800 + stx ptr7800+1 + ldx #screenrows +@L1: ldy #charsperline + lda #0 +@L2: sta (ptr7800),y + dey + bne @L2 + lda ptr7800 + clc + adc #charsperline + bcc @L3 + inc ptr7800+1 +@L3: dex + bne @L1 + rts .endproc diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 773227c8a..d954921ff 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -152,8 +152,8 @@ umula0: sta ptr7800 bcc @L12 inx -@L12: clc - txa +@L12: txa + clc adc #>(_screen) sta ptr7800+1 diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index dda92f060..81a89144b 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -24,7 +24,7 @@ ; .export _setcursor - .export gotoxy, _gotoxy, _gotox, _gotoy, wherex, wherey + .export gotoxy, _gotoxy, _gotox, _gotoy, _wherex, _wherey .export CURS_X, CURS_Y .constructor init_cursor @@ -189,20 +189,18 @@ umula0: ;----------------------------------------------------------------------------- ; Get cursor X position ; - .proc wherex + .proc _wherex lda CURS_X - jsr pusha0 rts .endproc ;----------------------------------------------------------------------------- ; Get cursor Y position ; - .proc wherey + .proc _wherey lda CURS_Y - jsr pusha0 rts .endproc From ff8d2e84bf72891a1cc91d12966a3a197c2b455a Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 7 Apr 2022 07:46:28 +0300 Subject: [PATCH 1585/2710] Fix screen index bug --- libsrc/atari7800/cputc.s | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index d954921ff..8aeb8b9c4 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -38,6 +38,7 @@ umula0: adc ptrtmp tax lda ptrtmp+1 ; hi byte of left op + clc adc ptr7800+1 sta ptr7800+1 txa @@ -148,7 +149,8 @@ umula0: adc CURS_X bcc @L11 inx -@L11: adc #<(_screen) +@L11: clc + adc #<(_screen) sta ptr7800 bcc @L12 inx From 7e7f9ffa58ed2c303742831e3bee15cb703bc078 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 7 Apr 2022 08:17:36 +0300 Subject: [PATCH 1586/2710] Add blinking cursor --- cfg/atari7800.cfg | 2 +- libsrc/atari7800/setcursor.s | 24 +++++++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 04216f3bd..160d1e58e 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -10,7 +10,7 @@ SYMBOLS { __ENCRYPT_BOTTOM__: value = $ff7a, type = export; __ENCRYPT_SIZE__: value = $80, type = export; __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; - __INIT_SIZE__: value = 139+9, type = export; + __INIT_SIZE__: value = 154, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 81a89144b..0b49fe097 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -27,6 +27,7 @@ .export gotoxy, _gotoxy, _gotox, _gotoy, _wherex, _wherey .export CURS_X, CURS_Y .constructor init_cursor + .interruptor blink_cursor .importzp sp .import _zones @@ -47,6 +48,8 @@ CURS_Y: .byte 0 _cursor_visible: .byte 1 +blink_time: + .byte 140 .code @@ -208,7 +211,26 @@ umula0: ; Initialize cursorzone at startup ; Offset to cursor zone 5. ; -; .segment "ONCE" + .proc blink_cursor + inc blink_time + bne @L3 + lda #140 + sta blink_time + ldy #0 + lda (cursorzone),y + bne @L1 + lda #254 + bne @L2 +@L1: lda #0 +@L2: sta (cursorzone),y +@L3: rts + .endproc + +;----------------------------------------------------------------------------- +; Initialize cursorzone at startup +; Offset to cursor zone 5. +; + .segment "ONCE" init_cursor: lda #0 jsr calccursorzone From 770b22e14d9444f81bc9a10c9d6c33a3e724c838 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 9 Apr 2022 07:37:07 +0300 Subject: [PATCH 1587/2710] Remove duplicate code --- libsrc/atari7800/setcursor.s | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 0b49fe097..69cd5f126 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -23,7 +23,6 @@ ; definitely not allow direct access to the variables. ; - .export _setcursor .export gotoxy, _gotoxy, _gotox, _gotoy, _wherex, _wherey .export CURS_X, CURS_Y .constructor init_cursor @@ -31,6 +30,7 @@ .importzp sp .import _zones + .import cursor .import pusha, incsp1, pusha0, pushax, popax .include "atari7800.inc" .include "extzp.inc" @@ -46,8 +46,6 @@ CURS_X: .byte 0 CURS_Y: .byte 0 -_cursor_visible: - .byte 1 blink_time: .byte 140 @@ -79,18 +77,6 @@ umula0: lda ptr7800 ; Load the result rts -;----------------------------------------------------------------------------- -; Enable/disable cursor -; - .proc _setcursor - - ldx _cursor_visible - sta _cursor_visible - txa - rts - - .endproc - ;----------------------------------------------------------------------------- ; Calculate cursorzone address ; You also need to set the cursorzone to point to the correct cursor Header @@ -147,7 +133,7 @@ umula0: pla sta CURS_Y jsr calccursorzone - lda _cursor_visible + lda cursor beq @L1 lda #30 ; enable cursor @L1: ldy #1 From 141b887d4dab6471260678d537b0316ba8a48679 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sun, 10 Apr 2022 14:43:18 +0300 Subject: [PATCH 1588/2710] Change order of gotox gotoy for correct x after newline --- libsrc/atari7800/cputc.s | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 8aeb8b9c4..e1af2765c 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -94,16 +94,16 @@ umula0: cmp #$0A ; LF bne @L4 -@L1: lda #0 ; newline - jsr _gotox - lda CURS_Y +@L1: lda CURS_Y ; newline cmp #(screenrows-1) bne @L2 lda #0 beq @L3 @L2: clc adc #1 -@L3: jmp _gotoy +@L3: jsr _gotoy + lda #0 + jmp _gotox @L4: cmp #$20 ; ' ' From 0f404280a1717df33d5aba5bf0d816b3388e41bb Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sun, 10 Apr 2022 19:35:29 +0300 Subject: [PATCH 1589/2710] Change attributes on gotoxy --- libsrc/atari7800/setcursor.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 69cd5f126..34c7562ab 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -31,7 +31,7 @@ .importzp sp .import _zones .import cursor - .import pusha, incsp1, pusha0, pushax, popax + .import pusha, incsp1, pusha0, pushax, popa .include "atari7800.inc" .include "extzp.inc" @@ -166,13 +166,13 @@ umula0: .proc _gotoxy jsr _gotoy - jsr popax + jsr popa jsr _gotox rts .endproc .proc gotoxy - jsr popax + jsr popa jmp _gotoxy .endproc ;----------------------------------------------------------------------------- From 6a6581815d02bf46cf1516b4eaeec99e86fcc854 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 14 Apr 2022 21:52:57 +0300 Subject: [PATCH 1590/2710] Import conio automatically --- libsrc/atari7800/cputc.s | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index e1af2765c..607940332 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -172,3 +172,8 @@ umula0: .endproc +;------------------------------------------------------------------------------- +; force the init constructor to be imported + + .import initconio +conio_init = initconio From e0c7880e34837e854696c54c25540fdd1db8b17f Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 19:15:06 +0300 Subject: [PATCH 1591/2710] Split files --- libsrc/atari7800/buildfont160.py | 31 ---------------------------- libsrc/atari7800/font160.png | Bin 2973 -> 0 bytes libsrc/atari7800/font160flipped.png | Bin 2956 -> 0 bytes libsrc/atari7800/wherex.s | 18 ++++++++++++++++ libsrc/atari7800/wherey.s | 19 +++++++++++++++++ 5 files changed, 37 insertions(+), 31 deletions(-) delete mode 100644 libsrc/atari7800/buildfont160.py delete mode 100644 libsrc/atari7800/font160.png delete mode 100644 libsrc/atari7800/font160flipped.png create mode 100644 libsrc/atari7800/wherex.s create mode 100644 libsrc/atari7800/wherey.s diff --git a/libsrc/atari7800/buildfont160.py b/libsrc/atari7800/buildfont160.py deleted file mode 100644 index 30ee02695..000000000 --- a/libsrc/atari7800/buildfont160.py +++ /dev/null @@ -1,31 +0,0 @@ -blen = 0 - -def gb(val): - b = val[0] << 6 - b = b + (val[1] << 4) - b = b + (val[2] << 2) - b = b + val[3] - return '$' + hex(b)[2:4] - -def printline(f, val): - f.write(" .byte " + - gb(val[0:4]) + ', ' + - gb(val[4:8]) + ', ' + - gb(val[8:12]) + ', ' + - gb(val[12:16]) + ', ' + - gb(val[16:20]) + ', ' + - gb(val[20:24]) + ', ' + - gb(val[24:28]) + ', ' + - gb(val[28:32]) + '\n') - -fname='font160' -with open(fname + '.data', 'rb') as f: - data = f.read() -fname= fname + '.s' -with open(fname, 'w') as f: - f.write(" .export _font160\n") - f.write(' .rodata\n') - f.write(' .align 256\n') - f.write("_font160:\n") - for i in range(0, int(len(data)/32)): - printline(f, data[i * 32:i * 32 + 32]) diff --git a/libsrc/atari7800/font160.png b/libsrc/atari7800/font160.png deleted file mode 100644 index 845d91482459f72af2263f7dba0c4c2844fecef6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2973 zcmYk-c|6qZ769<yEDU3tv70Po$zBvgvd!4n4B0~{X~@2WCX9W5RkrM{)=75RLrEwR zqZlSBubu3&T)p?+&%J+~=RD{6d_U*EbDl)}C4Ck+3Jw4Oi=lyz1pq)#t^flVa&n@4 z+`IvRjuvKV8))Hj8|~}wbAxcp4ILQj>xOm<A>06fkgsGLuluv&%!ePP{GnnXtzHnR z+&`LMlkKazYKy92aD}VQgg1(5T?1OMeKkUF9|FUCD6?E1wC}%=#PyvNUwAd1D)Ym? zYW0a4dAh#juWVk^sFv3Dg%B#CxGnt7H)_Gpo#isk4&MlHn|?U>J>SFiml_g@!Qu6n zL&0Cd)fE@_RYv=&S~LZGq(8cA;C%G<w$$%>OTsg(-(b61W5uRDBizt)-RFJfcHSR& zOAU{B4NGtUzo?t-paZ^Qq1Pom<C?`qd!B2dYU;Bv*@?XR?JYLT4*FxQ1A_D3yM&Ho z(%7l$B3zoSx@*S`Wh2PrW%JK;c~dS!eqjGsRhaxFvp2O<Bfi^eHPOE^)y?uR=`mZ2 zm_O2uj@oWhRk4t5wexci&YBq0{W6YYCW+>AR=U<ajaHs3&>0#KdNm|KSqZr$AS$P2 zBMyCHyseo(KOKHhprE@;N;q3gtk!ZO>O?BC2FxWnp<`ygk)0x^=d>e^#AFS)n8%m` zdZGG-RfyVQWv{*;c0*M&N1vmfE;0fM^1-_2#hlT~_l;6(&dVTum(VxS0a;xf%y@EZ zx){&Bw}!7a_)e`#QrjI~trPUTz(}iH$)<CB=!y*Z;m!G>p;8NDa=jH<-Kye=p$xfU ztgb*r*|P5D=<{+%Q~hkGuw}C6Ds^983CB`7W<t*U!kbS|k4nG{MHIXJ%CNgp;I*(c z^3(TSZ?cWgizzBm)~N<BZhfVBzXqf9EY+yG|3!-z_3nfqh#aevh&rPfW}Ct`CTJaT zF(MihX8XPW^L&X=<s(d4yY`Tj#Fj7p+a?4rr5k__#@9}kacT?*e5g5RV$Nqc)@^DZ z$P0;e<De9?t+b!pF>ZbKH6l^@NbcwGqm^Ulv!v#t(BDz@L1QW%DQylR@`K<Vy7UBt zcz7Y%Th0x&{G}Q^ub2DVlDn)V*L;q?@B>pLF+fQ8is<j2QCZZpDOaKXj2G4B%{P>K z!D0nB8qZWK$<B2b81tljQsUn4to-U>A#F7clGR5A%n52d@zvGrZE}cw(o1hr`WMMV zTf6`g>^Lr&Pc*SCIjfn;u2R=<865$Gg5;u)?aArx&T*p=jT+<P(Y*rhtkGo?T`VMg zfcA~)(_gjP37qK!HEOV<0yFCD%Z^Q!3ak<b#}<3rlgFGJ4YM?8pIk~Pr{Xz%6djY8 zo^8Lx0)se)XjH|#Uz)|A<B_4jBgFoqnQbbWqziO$_-Bj9M_X<Z)nmv?+QkO-WV{{Z z_xUSdo+TBXj+*b(mys1B@H!Dq!}o_WS(BCAx&`TWwNe_+^ia;ZujTWl`8PP=W?W{H z;uoBU>hnZRo6sIf!31m}c4i>_uNib*QtD%`^#s;}?l=ABR>BmM!Ht}|{5TiBOoio# z&$VrGL4-)D767u!^&z{If8w=Nocy?297<A0<cob@-RLtUdPB_H8a*;^`%tty#bXv* z1dMq9C}pd54oX<HFU|%D1zEgn{Ak|h^Y`+So{9a+3@*UJYQ4GNlHujj6J}D+oPEn; zdP8wruv6+3TFuV=nlIObz#JS3>K;YYed#s21_$XlXOXCk3tW0-#l<X->CUVr!eHD> zNc5eaSVE8xMX3}yT9RV;?HU&P`3}`Ka9y$zM=6)|^4!1@$NK_PFK5tm-tQD?HR?@6 zz#7uVccf*@e!`P&o&r(>RI0k|bA!0k?;jx%y%)8*;w}uwR??{kqjR{HQ~l}XTwt~0 zO4$tXM9~!MMss0c0E$Rq3F>~IY_>k7F11NF2(B_ovQM$-AKSGYi4sX(P#)6NEnY}n z@biS!HPAv7GOn>R*q-rv$38#aV}AW?BQOFuU(Xy>*zTP;Sc`JpbQmtb=b|0AX|-5h zc#7DJS&qBU--50JNj%OSu=@FMx>U?lM1eLqer5#@Qq{5PslJ4(fE~5C^h}dBmC>OB zuHTw;MgRa5L(ta78)|F+ch{e6`24%~)D60^{BN#~80kv0E~97CA6=}c@ywK3NovL7 zW$G53{pWcU2?iDp{B)G4XrW{)7>~Q7fCC+F4bt<e&+wD3(ZN-Vo5;o2ewtI%JCkjY z7`<46wKMZj;Dm_;hpSSfH2qa%WTd<+Z}vmC0YeM8V=qOWNNh{qs9c#l;y?75a*Z?- zD|Cw^aQGn1e7@4p-JM~O>62bp@f&!`#IEV@xW1bj@X3wjt~X#3R(L^6mRr?!-r4#* zW=3kJw0u58?z+0QijUuzG-j+>BEm(os!BGX;HUh3+a7kY1Uz1wk83<(r2K)au<7r_ zvq!=dxqHUKHhd}kOr=`UOZ%^nX}24#UHrR@;in@Dd3yJFK~XK(+La5_y=fzApo5Q{ znN!;~r#c5D=C>NS)xq=)q~yhh=S!e$)lS+2;k+7|Jpw!yycVuEodM};#7^f@u6PQS zuwmnxji>-DzVqh28cIuROJi+g#K*e*-=NGq|N1MZfp;fgFf-o7Quibu1AzK5aD05s zn)5;aqz1Vf>+1jsbOHt^1*5NlT>t>E_WTJ@rVQ(;lSf#fp{XwHClt&f4`T*Lu>b%h z&rk<vY0yiydhPLDo|9<kA^Du<n7(Rk)>RVgL>KJ5^CI#<Q@muj3ZcRn5i3mTI!Z#@ zkZu<i&TK-;X=`dqaeRX*34e#&g1z@tu4{N4d^5g4zzdU-HJ2nm;m1q;TiTPfoPSx= z&MmW5)W)f^Qh>TQY5HsM@bg}7b6MVY`1Y3KokGv9r8xp?KxrGSferU@wx04U%^?)D z5zb2S?0BclW-N4SAv;{92cy)F3iW0PaLC4x%My{}!l!F36hFOF_5VR9`xf)#<Ke-z zWk;aG-c=B7loWGWRno~?{TnQdi_~H<i-zFQ#KXgNL}xkW_UbA)go@k%%!kGDn+-R9 z?el34RWMH0KL_|C!QU3YQ?!AqX^m^GObAo60f<gty6*x{w@fb20k%rmS2>RTIslKU zis%pm>pal3u?u6M<p}z$Tmb6au5iubJ@B1LfHji;^+7F=Cf(fOvFz+=#s&h9d><^3 zh-|-A5yx+DhO$L=dPa%nL~x_=raLxmMMREyVXSLd>#Ieue3lm`y*uX(AOnsR{ijVL zs<{L8U1U07nH9;a&rO4Z${(Se0fR^bH0K)d8|TL_+Y17Bav^B5w48(1GvIs#T<1Ci zRS=ou&P@Y@7Rn0$PY3X;{YSI^(K29%KicRJgtWEcrqP3PpV|FSzxL%9`H#-}qvgPp zf3y@h(gNvh$yLerD{W6+YT&8>4f+F{&$)t#<yZ-}hGLD270OG7NGE6vbAm|!Mu-#S zpm>6qR<@n~K?`%AqfZcqrP3_ll@;tJ+<p<w_@30nHz^EPo)mb@5SfK_SCrdfKp5k3 zKuJu(?nC#UE^h(sFeqx=0Z3{Rg?hn0gT<dAK(34)42U`eQgb84c9#q>xQIm*F=07w z#}rdz>^q-gM6j|r2<SdiWX8P^ncNfv7{VCX13<hpX^6V3c&3~bsnfPz;JWeEb33h@ znn$=>s&u9PN=3{U=p0n&Zn`_B!Q!LOnXGKJO+o*DIUTSPIv;TmJsu3l3lKH<eBm+v z@S&-Ael}LvwVbXA_gcoGYaNuyjp5^6SoJbzvG^O}c^ap|56)t36BR*z*0=I~Qod^J z6B^m*yCWBi61|Fy*IL>`+t?pkL``oE1|71k?fT3I4QMr-OfF!kdr9YomUGm<0Q_P~ AuK)l5 diff --git a/libsrc/atari7800/font160flipped.png b/libsrc/atari7800/font160flipped.png deleted file mode 100644 index ae237c74bc660ca30a72977999a37b3b54e2e726..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2956 zcmV;73v={|P)<h;3K|Lk000e1NJLTq00aO4000OA0{{R38gFH8000HtdQ@0+Qek%> zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bvj^#EC{MRXR1alLq<4_xr8|3&Y`MI~5PBH_; zhV9p~Oi@+ElDe$F{@mpc98@Wann!K5UO2RA<HV1+UPrs{bm@J6JM?M&(q7&_Vl)Y! z^7_;B^`u0*eSGlNo%+}I63-isC(zr-Pe3^%Gk(m^Nur%!?W9kjwq8GK3;&#I=ht&Q z9q&}0t3N^SjIP(;<#U5NP@0B;gn0?cb>HKaft-sa@zndy{MMop1rL(;WCB3GOz#8W z&j9@hKE1&H0sV`=2cPrlAwOVQ-&m{PzaaY_{2Ss=1Iv3x{PhKBwV$T*Tzk*hd%b3t zT7hVN6m^45Z(-1}19G`Pt2iB(;kVys!x>jz1C-BeTpj12MhsSVA*D%4o7VjtG?1e5 zV#kwtu-t7S&W#7SB5;J0HoG*L65ws{Dk5m+_gv^6x836n3XD7nU6~M!ZnFR3EdTcM zch0i+I1tedDBoBiFFqnb8i%=aM=uaU`{B)QfZxuC{_B&lAXPAEH_U+v=G9*zy3vQW z<mOq>&+vS_p!j?O03wWSNQMLqT$RLNG?z0w5pWC;l*pV#xq|^R<B23$MJgBP;4?P9 zak~4maplttZvqh}RUF(jNsy&#(2r|CLuq1aX4TxHShK8BwOXy!>oK`>adq?R?%~Zd zBs45)cto_w#!cXX)@t(>t+h-piGdQa68#e`ox61H)@%13z4aWB&(L9`4j(bv$jMVC zY+}~wGiIB)s4O_e(q*eIU$NTC4Xth2x^36(J9gXo&f3H3Pv>v2Mh|OzGj;m;J8Nhy z?r$OJ*ohs^z!)omaX$<|(0n+%f>il1cR0HmqbQ7#q#bU`q{A2})J1HY-nsi=?w5Eg z7Qe(B{}*%RQ1^c@S3up*ynVykJnP)J8GBXX!SoVT-=>tk!5U0w)Hz3mc}+M<$WF>G z6)W$wT-Uug@a>S`FKZ<Cf$#&J+g=qJRVsZ)SD%amPwhNs-%Qb#?v_j1-aa!G7XTd4 zcsFe{T%}b~BO7Z2%FNQ&6?^opv{s@3pA~2L>Z+Min;aHL$ZGpw$Ot>v+|UKl$r19X zw#o!NPCKS{XmHjT1MKeB_!@01KEb#;n`n0jbYot*A|a)Y<gRsLsdislCX6{Q>p?>V zJ>`7YVo4uxm<cp@2IaC2psKG5+%E&M0-6DrLV7%^7Ni>8Axb^V%pBNcYy<qd6FB7r z5Y=cS@Yb^yHTC5auMb~X8PEoYx>-vbu?CO@>M$xAb@k>3>S@{N0}Q%kCNPrMiizUI zq#EKt9anNdFa<c=9F83g>?4mH4Wf$*kde9K;sz<8+C~GSpk1fNineR(jk@_-JBxQY z>8oxmWqUg8(R=5#tu=bJY=Lru59>mmOA_YDh)@UEnb?lFtlDT5lo!OiC#E3-5{6Uk zLvm!@i*BC6H&BM3#3XPOmS>L`DQtvlYJiYi!Q#2jddUD$%pfMLqCQ%vEozv8Oq3zw zHtW2V%@ucb#DP?>5Y#k{Itn0<g~c~zz?pcXJZpnMu$sUM@Gg5#yK;t1%y^6=2L$pP zW5d+IC@Ql!N&zSh)FobkwFRf}5JDorUvj3#unGIRj`N(l^9B)LC-4h;SIdGgK_eD| zqvohdUSY7#$jODF+I5!{MC5(IA-accvlcQ0TcCg|dJM7xJC(ZHbe0LU0)RV4hYC=- zJQ*JW2;_o+^xitHs*t6f?QBmZOAvIUg31bld%&t<p*M;dWJc`*=LDuJ?d+f--Zgry z^HdLG4Lx;@Fqqmn@;O^Sc&kPi`~v_%R5K{wXI}u)v9-aX)!m?Ik@a$ht=LdnN6liI zJo@>dV#5x)SWzJLC<wNP`T>E?-j1x~H3xJ@M}t2TcD}Pa%+9d=g14gd8{jQ_pt9-? z*vEveT(DtYbs7NlqvuOIfx#i$$K^(2yWqP+{;|wG!D9Iv!WbGNJfd#}0004mX+uL$ zNkc;*aB^>EX>4Tx0C=2zkv&MmKpe$i(@I4u4(%Y~kfA!Y;1}YkRVYG*P%E_RU~=gf zG-*guTpR`0f`cE6RR<SmT^(EnLGS~_(aA~CMN0f%QfLwD!Ery{-Fw`<1B6C}X;xqi z&~)2OClg{ew<-o-5rBX&Vi=d1Wz0!Z3SGz7J$!t<i}S4R=l&f1YTjaiPb8jYhG`RT z5KnK~2Iqa^2rJ1d@i}qKqze*1a$WKGjdRgufoDd{OnRO;LM#?LSm|I^GBx5U;;5?W zlrLmGRyl8R)+#mDx+i~OD6g+9bDicel32tNB#2N@Lm3s=h|{W*Vj)fYi7x&j*DsMv zAy*lU91EyIgY5dj|KNAGR$+3&O9~}`o)^dY7y*L2K(p>R-^Y&AJOTXAz?I(iR~x|0 zC+YRJ7Ciz6wt<W5wx;X>mpj1VlOdb3EBR>(g#z$?M&FbJ!nZ)*n%7%vAEysMhPq1K z00)P_XpyqlyS%%%v$ucGwEFu2m78+4TO|O<0000CP)t-s00030002Gz0RR904w%j` z00009a7bBm000ie000ie0hKEb8vp<R2XskIMF-{t0uwM6X0oFH000A<Nkl<ZNXM;} zL2BeW6h&WE#Sl!uzd@dVdL%q*=&8XD^q;Fh-jB&B^eRM+gjXTRw4t{msHwpJUP)Dz z1w_WO{3ML;(YsF~^7<;GgzYfP7qz!H5uHcJ^{c-5@gXwi(J6e@H}@Ugw_lAkcs2mg zn*~=tA8bGOb0g@*Akvs+UhE=`HHI@*E!HTbnt73fv5GOQ62>sH-``tl@y!+h2DjlF z)}tTRVQmGyI7C{vt()JZ_0Dm|>&-jubh~bHbY3%tRl*oX{^y@gI()MOfGO^{rf^DA zm_jG$B_h(rJ?v?hF2%^1H0~*maqPk_r<g{@uu2%iC}j$bkvjmZAObCS6l4ywF^bKo zCnb2~XbBj0fOLxjj8zyZ)jGKY@ERh}az{b#xH_lVoPO4VM~;?&V+TmLD8P7)k=9+5 zJAgDo1X}JWD4s%$BU>C_M!_RTOCYiXq+1kV(umPm63X_Jzbv%C0sydsS*%n57*i)i zsaeg&Rsg_pR(MlN&UibR0&cMl@}_z61LbcUEwBLq?BF&p6#&N62~m30tMe5Aa9lLr zw3Z9rj;?^)e2ctkpVQRUq&<Zl0Pyz_dsqQrOq~!lhB3rc0RYE!#2d6;@pg&@+@3n* zP4`j((EA0z+2Z%-X3oNASOTWN&Kd$>nj2xF3-(&cV$T3j=6fjs&M*ZGH2Z<xF90qc zzrVI?7QVs~Fa>tj5dhQN2@_qg*IG7z0e~_;NC9wxDPW*AP4s>Na83CA(1k2Kz!ES8 zb~X|K(>w|jU9i`q?CA;sWqy(Z;0jZ~K;dQqBee(`OL?^N0<pyi=5q#!$pD!8s0lQI z;=HW@xYU^0zyeNc5p<sNXypxJixJ%C3=o$AF!fOrXadc7UjcBbbE|^|qSPW76Xns$ zJH!?v#LpQZF#}-gqbAS<Bj-~Ez@;&U^1W}r%maYxvyg^+UiH)CwFW#Dw+nTPh2e7< z$oGH$6aa<<)c1Gy0HB8~q~)Gh{q%UP0nf$lLfztF_*@3^{rlenz>$Fd`6oUAj8hiU zanGxMdc4+vm*RGzZb>kFE(7`g`=bDeBv5L=>uW#X0Q4qT{`tVlKQE@71@}|HHW|nP z(if?xfa&Y~0I=A%w_&{j7+kLW>yedz-CQ{f?x%onGms;sZ&FVIH`Mz9VDldzQ@8<` zVy^t*#L6G`Sk8j`DUiAh<OJ!v)Kef%^?m^0DeynnfN$xj+*N-70000<MNUMnLSTY| C8harC diff --git a/libsrc/atari7800/wherex.s b/libsrc/atari7800/wherex.s new file mode 100644 index 000000000..3215302ac --- /dev/null +++ b/libsrc/atari7800/wherex.s @@ -0,0 +1,18 @@ +; +; 2022-04-16, Karri Kaksonen +; +; unsigned char wherex() +; + + .export _wherex + .import CURS_X + +;----------------------------------------------------------------------------- +; Get cursor X position +; + .proc _wherex + + lda CURS_X + rts + .endproc + diff --git a/libsrc/atari7800/wherey.s b/libsrc/atari7800/wherey.s new file mode 100644 index 000000000..2223f29ac --- /dev/null +++ b/libsrc/atari7800/wherey.s @@ -0,0 +1,19 @@ +; +; 2022-04-16, Karri Kaksonen +; +; unsigned char wherey() +; + + .export _wherey + .import CURS_Y + +;----------------------------------------------------------------------------- +; Get cursor Y position +; + .proc _wherey + + ldx #0 + lda CURS_Y + rts + .endproc + From f0e16514e02addee05371f38e0ef66cf9b119477 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 19:15:19 +0300 Subject: [PATCH 1592/2710] Split files --- libsrc/atari7800/cputc.s | 186 +++++++++++++++++------------------ libsrc/atari7800/setcursor.s | 181 +++++++++++++++------------------- libsrc/atari7800/wherex.s | 11 ++- 3 files changed, 181 insertions(+), 197 deletions(-) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 607940332..7266190ee 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -6,31 +6,31 @@ ; .export _cputc - .export _textcolor - .import _gotoxy, _gotox, _gotoy, pusha0 - .import pushax - .import _screen - .import CURS_X, CURS_Y + .export _textcolor + .import _gotoxy, gotox, gotoy, pusha0 + .import pushax + .import _screen + .import CURS_X, CURS_Y .include "atari7800.inc" .include "extzp.inc" - .data + .data ;----------------------------------------------------------------------------- ; Holder of the text colour offset ; 0 = red, 42 = green, 84 = white ; txtcolor: - .byte 0 + .byte 0 - .code + .code ;--------------------------------------------------------------------------- ; 8x16 routine umula0: ldy #8 ; Number of bits - lda #0 + lda #0 lsr ptr7800 ; Get first bit into carry @L0: bcc @L1 @@ -38,7 +38,7 @@ umula0: adc ptrtmp tax lda ptrtmp+1 ; hi byte of left op - clc + clc adc ptr7800+1 sta ptr7800+1 txa @@ -64,25 +64,25 @@ umula0: ; .proc _textcolor - beq @L2 - sec - sbc #1 - beq @L1 - lda #84 - jmp @L2 -@L1: lda #42 -@L2: ldy txtcolor - sta txtcolor ; Store new textcolor - tya - bne @L3 - rts ; Old colour was 0 -@L3: sec - sbc #42 - bne @L4 - lda #1 - rts ; Old colour was 1 -@L4: lda #2 - rts ; Old colour was 2 + beq @L2 + sec + sbc #1 + beq @L1 + lda #84 + jmp @L2 +@L1: lda #42 +@L2: ldy txtcolor + sta txtcolor ; Store new textcolor + tya + bne @L3 + rts ; Old colour was 0 +@L3: sec + sbc #42 + bne @L4 + lda #1 + rts ; Old colour was 1 +@L4: lda #2 + rts ; Old colour was 2 .endproc ;----------------------------------------------------------------------------- @@ -92,83 +92,83 @@ umula0: ; .proc _cputc - cmp #$0A ; LF + cmp #$0A ; LF bne @L4 -@L1: lda CURS_Y ; newline - cmp #(screenrows-1) +@L1: lda CURS_Y ; newline + cmp #(screenrows-1) bne @L2 - lda #0 - beq @L3 -@L2: clc - adc #1 -@L3: jsr _gotoy - lda #0 - jmp _gotox + lda #0 + beq @L3 +@L2: clc + adc #1 +@L3: jsr gotoy + lda #0 + jmp gotox @L4: - cmp #$20 ; ' ' - bne @L5 - lda #$00 - jmp @L10 + cmp #$20 ; ' ' + bne @L5 + lda #$00 + jmp @L10 @L5: - cmp #$3F ; '?' - bne @L6 - lda #$02 - jmp @L9 + cmp #$3F ; '?' + bne @L6 + lda #$02 + jmp @L9 @L6: - cmp #$7C ; '|' - bne @L7 - lda #$06 - jmp @L9 + cmp #$7C ; '|' + bne @L7 + lda #$06 + jmp @L9 @L7: - cmp #$41 ; >= 'A' - bcc @L8 - and #$5F ; make upper case - sec - sbc #($41 - 17) - jmp @L9 + cmp #$41 ; >= 'A' + bcc @L8 + and #$5F ; make upper case + sec + sbc #($41 - 17) + jmp @L9 @L8: - sec ; >= '*' - sbc #($2A - 1) + sec ; >= '*' + sbc #($2A - 1) @L9: - clc - adc txtcolor + clc + adc txtcolor @L10: - asl - pha + asl + pha - lda #0 - sta ptr7800+1 - sta ptrtmp+1 - lda CURS_Y ; Find position on screen buffer - sta ptr7800 - lda #charsperline - sta ptrtmp - jsr umula0 - clc - adc CURS_X - bcc @L11 - inx -@L11: clc - adc #<(_screen) - sta ptr7800 - bcc @L12 - inx -@L12: txa - clc - adc #>(_screen) - sta ptr7800+1 + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + lda CURS_Y ; Find position on screen buffer + sta ptr7800 + lda #charsperline + sta ptrtmp + jsr umula0 + clc + adc CURS_X + bcc @L11 + inx +@L11: clc + adc #<(_screen) + sta ptr7800 + bcc @L12 + inx +@L12: txa + clc + adc #>(_screen) + sta ptr7800+1 - pla ; Print character on screen - ldy #0 - sta (ptr7800),y + pla ; Print character on screen + ldy #0 + sta (ptr7800),y - lda CURS_X ; Increment cursor - cmp #(charsperline-1) - beq @L1 - clc - adc #1 - jmp _gotox + lda CURS_X ; Increment cursor + cmp #(charsperline-1) + beq @L1 + clc + adc #1 + jmp gotox .endproc diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 34c7562ab..30151820a 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -23,40 +23,40 @@ ; definitely not allow direct access to the variables. ; - .export gotoxy, _gotoxy, _gotox, _gotoy, _wherex, _wherey - .export CURS_X, CURS_Y + .export gotoxy, _gotoxy, gotox, gotoy + .export CURS_X, CURS_Y .constructor init_cursor .interruptor blink_cursor - .importzp sp - .import _zones - .import cursor - .import pusha, incsp1, pusha0, pushax, popa + .importzp sp + .import _zones + .import cursor + .import pusha, incsp1, pusha0, pushax, popa .include "atari7800.inc" .include "extzp.inc" .macpack generic - .data + .data ;----------------------------------------------------------------------------- ; The variables used by cursor functions ; CURS_X: - .byte 0 + .byte 0 CURS_Y: - .byte 0 + .byte 0 blink_time: - .byte 140 + .byte 140 - .code + .code ;--------------------------------------------------------------------------- ; 8x16 routine umula0: ldy #8 ; Number of bits - lda #0 + lda #0 lsr ptr7800 ; Get first bit into carry @L0: bcc @L1 @@ -86,24 +86,24 @@ umula0: ; A = CURS_Y .proc calccursorzone - sta ptr7800 - lda #11 - sta ptrtmp - lda #0 - sta ptr7800+1 - sta ptrtmp+1 - jsr umula0 - clc - adc #5 - bcc @L1 - inx -@L1: clc - adc #<_zones - sta cursorzone ; calculate new cursorzone - txa - adc #>_zones - sta cursorzone+1 - rts + sta ptr7800 + lda #11 + sta ptrtmp + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + jsr umula0 + clc + adc #5 + bcc @L1 + inx +@L1: clc + adc #<_zones + sta cursorzone ; calculate new cursorzone + txa + adc #>_zones + sta cursorzone+1 + rts .endproc @@ -122,23 +122,23 @@ umula0: ; Enable cursor ; if showcursor cursorzone[1] = 30 ; - .proc _gotoy + .proc gotoy - pha - lda CURS_Y - jsr calccursorzone - ldy #1 - lda #0 - sta (cursorzone),y ; disable cursor - pla - sta CURS_Y - jsr calccursorzone - lda cursor - beq @L1 - lda #30 ; enable cursor -@L1: ldy #1 - sta (cursorzone),y - rts + pha + lda CURS_Y + jsr calccursorzone + ldy #1 + lda #0 + sta (cursorzone),y ; disable cursor + pla + sta CURS_Y + jsr calccursorzone + lda cursor + beq @L1 + lda #30 ; enable cursor +@L1: ldy #1 + sta (cursorzone),y + rts .endproc @@ -147,70 +147,53 @@ umula0: ; You also need to set the hpos offset to the correct value on this line ; cursorzone[3] = 8 * CURS_X ; - .proc _gotox + .proc gotox - sta CURS_X - ldy #3 - clc - rol - rol - rol - sta (cursorzone),y - rts + sta CURS_X + ldy #3 + clc + rol + rol + rol + sta (cursorzone),y + rts .endproc ;----------------------------------------------------------------------------- ; Set cursor to desired position (X,Y) ; - .proc _gotoxy + .proc _gotoxy - jsr _gotoy - jsr popa - jsr _gotox - rts - .endproc + jsr gotoy + jsr popa + jsr gotox + rts + .endproc - .proc gotoxy - jsr popa - jmp _gotoxy - .endproc -;----------------------------------------------------------------------------- -; Get cursor X position -; - .proc _wherex - - lda CURS_X - rts - .endproc - -;----------------------------------------------------------------------------- -; Get cursor Y position -; - .proc _wherey - - lda CURS_Y - rts - .endproc + .proc gotoxy + jsr popa + jmp _gotoxy + .endproc ;----------------------------------------------------------------------------- ; Initialize cursorzone at startup ; Offset to cursor zone 5. ; - .proc blink_cursor - inc blink_time - bne @L3 - lda #140 - sta blink_time - ldy #0 - lda (cursorzone),y - bne @L1 - lda #254 - bne @L2 -@L1: lda #0 -@L2: sta (cursorzone),y -@L3: rts - .endproc + .proc blink_cursor + inc blink_time + bne @L3 + lda #140 + sta blink_time + ldy #0 + lda (cursorzone),y + bne @L1 + lda #254 + bne @L2 +@L1: lda #0 +@L2: sta (cursorzone),y +@L3: rts + .endproc ;----------------------------------------------------------------------------- ; Initialize cursorzone at startup @@ -218,9 +201,9 @@ umula0: ; .segment "ONCE" init_cursor: - lda #0 - jsr calccursorzone - rts + lda #0 + jsr calccursorzone + rts ;----------------------------------------------------------------------------- ; force the init constructor to be imported diff --git a/libsrc/atari7800/wherex.s b/libsrc/atari7800/wherex.s index 3215302ac..f90105c46 100644 --- a/libsrc/atari7800/wherex.s +++ b/libsrc/atari7800/wherex.s @@ -5,14 +5,15 @@ ; .export _wherex - .import CURS_X + .import CURS_X ;----------------------------------------------------------------------------- ; Get cursor X position ; - .proc _wherex + .proc _wherex - lda CURS_X - rts - .endproc + ldx #0 + lda CURS_X + rts + .endproc From 02fbcad6973e5c8b5f69595110f072cdc53118a6 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 21:13:51 +0300 Subject: [PATCH 1593/2710] Split files --- libsrc/atari7800/clrscr.s | 48 ++++++++++++++--------------- libsrc/atari7800/cputc.s | 44 ++------------------------- libsrc/atari7800/setcursor.s | 27 +---------------- libsrc/atari7800/textcolor.s | 58 ++++++++++++++++++++++++++++++++++++ 4 files changed, 85 insertions(+), 92 deletions(-) create mode 100644 libsrc/atari7800/textcolor.s diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s index 36af7cce2..b5b3a1ebf 100644 --- a/libsrc/atari7800/clrscr.s +++ b/libsrc/atari7800/clrscr.s @@ -3,34 +3,34 @@ .export _clrscr - .import _screen - .import pusha0,pushax - .include "extzp.inc" + .import _screen + .import pusha0,pushax + .include "extzp.inc" - .code + .code - .proc _clrscr + .proc _clrscr - lda #<(_screen) - ldx #>(_screen) - sta ptr7800 - stx ptr7800+1 - ldx #screenrows -@L1: ldy #charsperline - lda #0 -@L2: sta (ptr7800),y - dey - bne @L2 - lda ptr7800 - clc - adc #charsperline - bcc @L3 - inc ptr7800+1 -@L3: dex - bne @L1 - rts + lda #<(_screen) + ldx #>(_screen) + sta ptr7800 + stx ptr7800+1 + ldx #screenrows +@L1: ldy #charsperline + lda #0 +@L2: sta (ptr7800),y + dey + bne @L2 + lda ptr7800 + clc + adc #charsperline + bcc @L3 + inc ptr7800+1 +@L3: dex + bne @L1 + rts - .endproc + .endproc ;------------------------------------------------------------------------------- ; force the init constructor to be imported diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 7266190ee..4d2b8dbf6 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -6,23 +6,16 @@ ; .export _cputc - .export _textcolor + .export umula0 .import _gotoxy, gotox, gotoy, pusha0 .import pushax .import _screen .import CURS_X, CURS_Y + .import txtcolor .include "atari7800.inc" .include "extzp.inc" - .data -;----------------------------------------------------------------------------- -; Holder of the text colour offset -; 0 = red, 42 = green, 84 = white -; -txtcolor: - .byte 0 - .code ;--------------------------------------------------------------------------- @@ -52,39 +45,6 @@ umula0: lda ptr7800 ; Load the result rts -;----------------------------------------------------------------------------- -; Change the text colour -; -; Logical colour names are -; 0 = red -; 1 = green -; 2 = white -; -; The routine will also return the previous textcolor -; - .proc _textcolor - - beq @L2 - sec - sbc #1 - beq @L1 - lda #84 - jmp @L2 -@L1: lda #42 -@L2: ldy txtcolor - sta txtcolor ; Store new textcolor - tya - bne @L3 - rts ; Old colour was 0 -@L3: sec - sbc #42 - bne @L4 - lda #1 - rts ; Old colour was 1 -@L4: lda #2 - rts ; Old colour was 2 - .endproc - ;----------------------------------------------------------------------------- ; Put a character on screen ; diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 30151820a..caaa9c1d5 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -32,6 +32,7 @@ .import _zones .import cursor .import pusha, incsp1, pusha0, pushax, popa + .import umula0 .include "atari7800.inc" .include "extzp.inc" @@ -51,32 +52,6 @@ blink_time: .code -;--------------------------------------------------------------------------- -; 8x16 routine - -umula0: - ldy #8 ; Number of bits - lda #0 - lsr ptr7800 ; Get first bit into carry -@L0: bcc @L1 - - clc - adc ptrtmp - tax - lda ptrtmp+1 ; hi byte of left op - adc ptr7800+1 - sta ptr7800+1 - txa - -@L1: ror ptr7800+1 - ror a - ror ptr7800 - dey - bne @L0 - tax - lda ptr7800 ; Load the result - rts - ;----------------------------------------------------------------------------- ; Calculate cursorzone address ; You also need to set the cursorzone to point to the correct cursor Header diff --git a/libsrc/atari7800/textcolor.s b/libsrc/atari7800/textcolor.s new file mode 100644 index 000000000..6ccbcf491 --- /dev/null +++ b/libsrc/atari7800/textcolor.s @@ -0,0 +1,58 @@ +; +; Karri Kaksonen, 2022-04-16 +; +; + + .export _textcolor + .export txtcolor + + .include "atari7800.inc" + + .data +;----------------------------------------------------------------------------- +; Holder of the text colour offset +; 0 = red, 42 = green, 84 = white +; +txtcolor: + .byte 0 + + .code + +;----------------------------------------------------------------------------- +; Change the text colour +; +; Logical colour names are +; 0 = red +; 1 = green +; 2 = white +; +; The routine will also return the previous textcolor +; + .proc _textcolor + + beq @L2 + sec + sbc #1 + beq @L1 + lda #84 + jmp @L2 +@L1: lda #42 +@L2: ldy txtcolor + sta txtcolor ; Store new textcolor + tya + bne @L3 + rts ; Old colour was 0 +@L3: sec + sbc #42 + bne @L4 + lda #1 + rts ; Old colour was 1 +@L4: lda #2 + rts ; Old colour was 2 + .endproc + +;------------------------------------------------------------------------------- +; force the init constructor to be imported + + .import initconio +conio_init = initconio From 3edb27aa3bdcdb36cecf1e15b97996977a763557 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 21:21:27 +0300 Subject: [PATCH 1594/2710] Remove obsolete file and fix tabs --- asminc/atari7800.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/asminc/atari7800.inc b/asminc/atari7800.inc index 5b725c1c3..93e990870 100644 --- a/asminc/atari7800.inc +++ b/asminc/atari7800.inc @@ -8,6 +8,6 @@ .include "atari7800_maria.inc" ; constants for the conio implementation -charsperline = 20 -screenrows = 28 +charsperline = 20 +screenrows = 28 From 057fd866dabe586c81ab8fbad6e1bdef468e4830 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 21:21:35 +0300 Subject: [PATCH 1595/2710] Remove obsolete file and fix tabs --- libsrc/atari7800/font160.data | Bin 8192 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 libsrc/atari7800/font160.data diff --git a/libsrc/atari7800/font160.data b/libsrc/atari7800/font160.data deleted file mode 100644 index dfbf65b63f56b90ca4a3837ce4e7e3309ecc4bce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 zcmeHI3zpk32uybGf9En^;lxP~(CV!P48sWL3Gd^f^?W>@cpNHfaB;x<zy9(I{5&2% zcuGTbzdmQ~`Tr#P`*{4~>B}R!U!ODg{C^Vt_3Fz%G5?tCjCX7pjpaPCz`j}nDme+n zis&$%c&ySo8E}y5yBvvRee%SrYr+JIn6Ek=4L*xdVBIlTF0tT5$VV4p0Kv>f>V-Fz zKbU{ae8xK#)mV+?{9pmSS^_BuLFE>xkwX=!hu%c=dAbhLX%S@8>MRM{F%(5OE1X(( zZe6I&0xcVz32UihKrnMhkEe)Ep<m2DW<KK`i)yUKa(KUiVjW8$1xcvf0yT12E%nfw zh%QgpK{_phY+9WqVLOJR2xo;;%Z{xJwOOELqcdSGRSXDb?&$Fp(J2JdW#xVc)NN1X zp+T6rsTUB5Ja?EB&n_=|OD-a|<Y_a>T?}SQ+B$I(wlGM>UVJsnR0I$lK)!2ZCNI+F zrM?#(+FY8#M9A-ihh-q)njJ-9zG8=Y;Smm(atUlp!1sxPj~(BXw?3LMfo0|=7mV-a z`Q16@39Nq4oKHsmY+mYn(J78iQ`qptOn6wz)9k1!m9LoavzteQ?cxL&TO8jf20qp~ zL1(9jZ9Tzak*klF^!%m<Ip)`Hehf-T+Pu_5axdTI-umS5RlrI-HurxGQ&6!q7N<<{ zhk0@-**L{y9s;>l%qAv2wD0pz4Q-Gi86jRrFaw;zd@x$k+`y#`)~a81f?bT*XYTSE zFp_|CDdO(28DsCDslmLQGSKp5fKQwp_*3r$eaMA47HPzX_I>`Tp-p9|WiPVTwru#c zI4K8S+lWRRCXJ{YoDO}Ld+U+G!dPG_GGv^0U0a5w1XZcbV`Ao+mZ&Q4Q%p{dMZusx zK2!y1hQ&QQz1d=itukYHo#yCBHdrCHuL%3~;Ty7(^OkOq9l}2gGr_?)7nw=lb6s)K z&zQsub6Lrq0_vQQXHnFN@>gs*bp#xMtpbHfNM7{tIIJ#%0{>)>E?<4s;UFJplrlJH zJ^hI6zF0XMFZ-FmL9}qmu@a9xV-k<akYtfcmHgxlPw4TYQ$FxjOLhcsj?zopK#?{W z{d7m-fUzPX@_8(93>FKmyE*pz5$SuZ0?fo*a9m|>N)gIMKafbk7hTa7i4g1(5$x(D z#GxF8Qp;{4fDT-jJay3qiLmyLzA-YvVutn6Wq+$quSM19imJ$dKO#P!k~yA-UN#Tb zV7TL77Soyo4NADF3&EU(q3s!Z^8-XHF|6mT|NkMVGveup92l!C-VY<ojdd*+biqJd zYMWX=4yb*mNTr$sXyoQg?`>yVGk}|a*zrOzCt-zzXZ)^~azkJdDi+yu*8l%I{nke` zEX1)UrUYSZe&U{(r@4XBlBP|NTH01*U~=Qp?d{?{*9>S-!nzE=1m+M<4qV~)Hp%iA z*>l$a|66N!&Dz;w#moFF(HtB>htHU&x!b?@YMD!KIJZmx8hek6zdO9%-8?A0|DFX* zK`=_NV9m*%8H}3fw}hUB$yZR`Il~7~%G*goz7I7RA6}_;68mRK$;Bc7FE%v<IdYmi z+~Y5c>2Cf%$-95XY0C9Isg|8rUSiX42aToLl*bpqg{>!`uFF43$oJW`+uwC5_0JO8 z#Ue;e`S|S+a9lF8Uw%yw8t%JiHDl?}go!c}RAWI(-mU5HiK**Zm@Wn7AtdA-XO(}F zgF#0R3H198f!=g^y3dGQEQ;XAZXA8=m2sTA%PYNeFTV2N;qGe!U=pUD0N^IbcD!K9 zSO;+VY)T>FNyO$raLGqPjnZRee!FCxmc<8o*MEw^d3^x5cI70PiJH61E3MXUcjdvu zUDpJ_BuqU4z)g_tc)^sh4&d_HltRLjh|PiEl8=PirN_wpcF8y`ix2Xy{}hAs`T%h4 z%1JO+eC{%@v|78}l?M-ZUlRb6F!clgH$k@J1yja4fXio73JFglHV1-BJ`!q|9wYPH YCF8U#KFGWNQw+}Q1HiQ_7eO`i2mhTJ6#xJL From a2aaeb0d1deb0a79b11798299686e6255a42a4bd Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 21:22:44 +0300 Subject: [PATCH 1596/2710] Fix tabs --- libsrc/atari7800/conio.s | 316 +++++++++++++++++++-------------------- 1 file changed, 158 insertions(+), 158 deletions(-) diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index 777de004b..ad1c4a976 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -8,11 +8,11 @@ .constructor initconio .include "atari7800.inc" - .import _font160 - .import _get_tv - .export _screen - .export _zones - .export _dll + .import _font160 + .import _get_tv + .export _screen + .export _zones + .export _dll .bss _screen: @@ -22,43 +22,43 @@ _screen: ; Macros used to generate lists .macro DLLentry offset, addr - .byte offset - .byte >addr - .byte <addr + .byte offset + .byte >addr + .byte <addr .endmacro .macro NullHeader offset, zero - .byte offset - .byte zero + .byte offset + .byte zero .endmacro .macro Header addr, palwidth, hpos - .byte <addr - .byte palwidth - .byte >addr - .byte hpos + .byte <addr + .byte palwidth + .byte >addr + .byte hpos .endmacro .macro XHeader addr, flags, palwidth, hpos - .byte <addr - .byte flags - .byte >addr - .byte palwidth - .byte hpos + .byte <addr + .byte flags + .byte >addr + .byte palwidth + .byte hpos .endmacro .macro TextZone row - ; Text - .byte <(_screen + row * charsperline) - .byte $60 - .byte >(_screen + row * charsperline) - .byte 12 - .byte 0 - ; Cursor - .byte 254 - .byte 0 - .byte >_font160 - .byte 0 + ; Text + .byte <(_screen + row * charsperline) + .byte $60 + .byte >(_screen + row * charsperline) + .byte 12 + .byte 0 + ; Cursor + .byte 254 + .byte 0 + .byte >_font160 + .byte 0 .endmacro ;----------------------------------------------------------------------------- @@ -68,155 +68,155 @@ _screen: .data _zones: -zone0: TextZone 0 -nh: NullHeader 0, 0 -zone1: TextZone 1 - NullHeader 0, 0 -zone2: TextZone 2 - NullHeader 0, 0 -zone3: TextZone 3 - NullHeader 0, 0 -zone4: TextZone 4 - NullHeader 0, 0 -zone5: TextZone 5 - NullHeader 0, 0 -zone6: TextZone 6 - NullHeader 0, 0 -zone7: TextZone 7 - NullHeader 0, 0 -zone8: TextZone 8 - NullHeader 0, 0 -zone9: TextZone 9 - NullHeader 0, 0 -zone10: TextZone 10 - NullHeader 0, 0 -zone11: TextZone 11 - NullHeader 0, 0 -zone12: TextZone 12 - NullHeader 0, 0 -zone13: TextZone 13 - NullHeader 0, 0 -zone14: TextZone 14 - NullHeader 0, 0 -zone15: TextZone 15 - NullHeader 0, 0 -zone16: TextZone 16 - NullHeader 0, 0 -zone17: TextZone 17 - NullHeader 0, 0 -zone18: TextZone 18 - NullHeader 0, 0 -zone19: TextZone 19 - NullHeader 0, 0 -zone20: TextZone 20 - NullHeader 0, 0 -zone21: TextZone 21 - NullHeader 0, 0 -zone22: TextZone 22 - NullHeader 0, 0 -zone23: TextZone 23 - NullHeader 0, 0 -zone24: TextZone 24 - NullHeader 0, 0 -zone25: TextZone 25 - NullHeader 0, 0 -zone26: TextZone 26 - NullHeader 0, 0 -zone27: TextZone 27 - NullHeader 0, 0 +zone0: TextZone 0 +nh: NullHeader 0, 0 +zone1: TextZone 1 + NullHeader 0, 0 +zone2: TextZone 2 + NullHeader 0, 0 +zone3: TextZone 3 + NullHeader 0, 0 +zone4: TextZone 4 + NullHeader 0, 0 +zone5: TextZone 5 + NullHeader 0, 0 +zone6: TextZone 6 + NullHeader 0, 0 +zone7: TextZone 7 + NullHeader 0, 0 +zone8: TextZone 8 + NullHeader 0, 0 +zone9: TextZone 9 + NullHeader 0, 0 +zone10: TextZone 10 + NullHeader 0, 0 +zone11: TextZone 11 + NullHeader 0, 0 +zone12: TextZone 12 + NullHeader 0, 0 +zone13: TextZone 13 + NullHeader 0, 0 +zone14: TextZone 14 + NullHeader 0, 0 +zone15: TextZone 15 + NullHeader 0, 0 +zone16: TextZone 16 + NullHeader 0, 0 +zone17: TextZone 17 + NullHeader 0, 0 +zone18: TextZone 18 + NullHeader 0, 0 +zone19: TextZone 19 + NullHeader 0, 0 +zone20: TextZone 20 + NullHeader 0, 0 +zone21: TextZone 21 + NullHeader 0, 0 +zone22: TextZone 22 + NullHeader 0, 0 +zone23: TextZone 23 + NullHeader 0, 0 +zone24: TextZone 24 + NullHeader 0, 0 +zone25: TextZone 25 + NullHeader 0, 0 +zone26: TextZone 26 + NullHeader 0, 0 +zone27: TextZone 27 + NullHeader 0, 0 _dll: -PALscanlines: ; 25 lines - DLLentry 15, nh - DLLentry 8, nh +PALscanlines: ; 25 lines + DLLentry 15, nh + DLLentry 8, nh -Topscanlines: ; 9 lines - DLLentry 8, nh +Topscanlines: ; 9 lines + DLLentry 8, nh Displaylines: - DLLentry $80+7, zone0 ; NMI interrupt from end of prev zone - DLLentry 7, zone1 - DLLentry 7, zone2 - DLLentry 7, zone3 - DLLentry 7, zone4 - DLLentry 7, zone5 - DLLentry 7, zone6 - DLLentry 7, zone7 - DLLentry 7, zone8 - DLLentry 7, zone9 - DLLentry 7, zone10 - DLLentry 7, zone11 - DLLentry 7, zone12 - DLLentry 7, zone13 - DLLentry 7, zone14 - DLLentry 7, zone15 - DLLentry 7, zone16 - DLLentry 7, zone17 - DLLentry 7, zone18 - DLLentry 7, zone19 - DLLentry 7, zone20 - DLLentry 7, zone21 - DLLentry 7, zone22 - DLLentry 7, zone23 - DLLentry 7, zone24 - DLLentry 7, zone25 - DLLentry 7, zone26 - DLLentry 7, zone27 + DLLentry $80+7, zone0 ; NMI interrupt from end of prev zone + DLLentry 7, zone1 + DLLentry 7, zone2 + DLLentry 7, zone3 + DLLentry 7, zone4 + DLLentry 7, zone5 + DLLentry 7, zone6 + DLLentry 7, zone7 + DLLentry 7, zone8 + DLLentry 7, zone9 + DLLentry 7, zone10 + DLLentry 7, zone11 + DLLentry 7, zone12 + DLLentry 7, zone13 + DLLentry 7, zone14 + DLLentry 7, zone15 + DLLentry 7, zone16 + DLLentry 7, zone17 + DLLentry 7, zone18 + DLLentry 7, zone19 + DLLentry 7, zone20 + DLLentry 7, zone21 + DLLentry 7, zone22 + DLLentry 7, zone23 + DLLentry 7, zone24 + DLLentry 7, zone25 + DLLentry 7, zone26 + DLLentry 7, zone27 Bottomscanlines: - DLLentry $80+15, nh ; NMI interrupt at end of display - DLLentry 9, nh - DLLentry 15, nh - DLLentry 8, nh + DLLentry $80+15, nh ; NMI interrupt at end of display + DLLentry 9, nh + DLLentry 15, nh + DLLentry 8, nh ;----------------------------------------------------------------------------- ; Set up the screen to 320a mode ; .segment "ONCE" -CTRL_MODE160 .set 0 -CTRL_MODEAC .set 3 -CTRL_KANGOFF .set 0 -CTRL_BCBLACK .set 0 -CTRL_CHAR1B .set 0 -CTRL_CHAR2B .set $10 -CTRL_DMAON .set $40 -CTRL_CKOFF .set 0 +CTRL_MODE160 .set 0 +CTRL_MODEAC .set 3 +CTRL_KANGOFF .set 0 +CTRL_BCBLACK .set 0 +CTRL_CHAR1B .set 0 +CTRL_CHAR2B .set $10 +CTRL_DMAON .set $40 +CTRL_CKOFF .set 0 ;----------------------------------------------------------------------------- ; Initialize the conio display lists and zones ; .proc initconio - jsr _get_tv - bne pal - lda #<Topscanlines - sta DPPL - lda #>Topscanlines - sta DPPH - jmp vblankon -pal: lda #<PALscanlines - sta DPPL - lda #>PALscanlines - sta DPPH + jsr _get_tv + bne pal + lda #<Topscanlines + sta DPPL + lda #>Topscanlines + sta DPPH + jmp vblankon +pal: lda #<PALscanlines + sta DPPL + lda #>PALscanlines + sta DPPH vblankon: - lda MSTAT - bmi vblankon + lda MSTAT + bmi vblankon vblankoff: - lda MSTAT - bpl vblankoff - lda #>_font160 - sta CHBASE - lda #(CTRL_MODE160 | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR2B | CTRL_DMAON | CTRL_CKOFF) - sta CTRL - lda #$00 ; Black background - sta BKGRND - lda #$33 ; Red - sta P0C1 - lda #$c8 ; Green - sta P0C2 - lda #$0f ; White - sta P0C3 + lda MSTAT + bpl vblankoff + lda #>_font160 + sta CHBASE + lda #(CTRL_MODE160 | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR2B | CTRL_DMAON | CTRL_CKOFF) + sta CTRL + lda #$00 ; Black background + sta BKGRND + lda #$33 ; Red + sta P0C1 + lda #$c8 ; Green + sta P0C2 + lda #$0f ; White + sta P0C3 rts .endproc From 190911e26f1c537c9d8c71a3c512c1964afeb364 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 21:32:22 +0300 Subject: [PATCH 1597/2710] Add x=0 to textcolor --- libsrc/atari7800/textcolor.s | 1 + 1 file changed, 1 insertion(+) diff --git a/libsrc/atari7800/textcolor.s b/libsrc/atari7800/textcolor.s index 6ccbcf491..be98ed340 100644 --- a/libsrc/atari7800/textcolor.s +++ b/libsrc/atari7800/textcolor.s @@ -39,6 +39,7 @@ txtcolor: @L1: lda #42 @L2: ldy txtcolor sta txtcolor ; Store new textcolor + ldx #0 tya bne @L3 rts ; Old colour was 0 From 2db45920298c3f3739829242824094a1f49a6cc8 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 21:48:57 +0300 Subject: [PATCH 1598/2710] Add info --- libsrc/atari7800/font160.s | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s index e5ebbede2..00b62c36a 100644 --- a/libsrc/atari7800/font160.s +++ b/libsrc/atari7800/font160.s @@ -1,3 +1,21 @@ +; The internal font structure for Atari7800 needs a full set of 128 +; characters. Each character is 16 x 8 bits. +; The font consists of 8 rows of data: +: row7 +; row6 +; row5 +; row4 +; row3 +; row2 +; row1 +; row0 +; Each row is 256 bytes long +; As we have 2 bits per pixel we need 2 bytes to represent +; one character. So we can fit 128 characters in this font +; When you later use the font you must address the characters as +; 0, 2, 4, 6, ... 254 +; Odd indices cannot be used. + .export _font160 .rodata .align 256 From bb20af1695af01276cb219036d7891aff536c0f4 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Sat, 16 Apr 2022 21:54:52 +0300 Subject: [PATCH 1599/2710] Add info --- libsrc/atari7800/font160.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s index 00b62c36a..69c5774ab 100644 --- a/libsrc/atari7800/font160.s +++ b/libsrc/atari7800/font160.s @@ -1,7 +1,7 @@ ; The internal font structure for Atari7800 needs a full set of 128 ; characters. Each character is 16 x 8 bits. ; The font consists of 8 rows of data: -: row7 +; row7 ; row6 ; row5 ; row4 From b8c450cb460f8dd5cab3a03732269c3029d6d006 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 11:59:06 +0300 Subject: [PATCH 1600/2710] Add mono conio files --- libsrc/atari7800/extra/mono.s | 28 + libsrc/atari7800/mono_clrscr.s | 39 + libsrc/atari7800/mono_conio.s | 227 ++++ libsrc/atari7800/mono_cputc.s | 102 ++ libsrc/atari7800/mono_font.s | 2052 +++++++++++++++++++++++++++++ libsrc/atari7800/mono_setcursor.s | 208 +++ 6 files changed, 2656 insertions(+) create mode 100644 libsrc/atari7800/extra/mono.s create mode 100644 libsrc/atari7800/mono_clrscr.s create mode 100644 libsrc/atari7800/mono_conio.s create mode 100644 libsrc/atari7800/mono_cputc.s create mode 100644 libsrc/atari7800/mono_font.s create mode 100644 libsrc/atari7800/mono_setcursor.s diff --git a/libsrc/atari7800/extra/mono.s b/libsrc/atari7800/extra/mono.s new file mode 100644 index 000000000..5d99fc02a --- /dev/null +++ b/libsrc/atari7800/extra/mono.s @@ -0,0 +1,28 @@ +; +; Groepaz/Hitmen, 19.10.2015 +; +; import/overload stubs for the monochrome conio implementation +; + + ; mono_conio.s + .import _mono_screen + .export _screen := _mono_screen + + ; mono_clrscr.s + .import _mono_clrscr + .export _clrscr := _mono_clrscr + + ; mono_cputc.s + .import _mono_cputc + .export _cputc := _mono_cputc + + ; mono_font.s + .import _mono_font + .export _font := _mono_font + + ; mono_setcursor.s + .import mono_gotoxy + .export gotoxy := mono_gotoxy + .import _mono_gotoxy + .export _gotoxy := _mono_gotoxy + diff --git a/libsrc/atari7800/mono_clrscr.s b/libsrc/atari7800/mono_clrscr.s new file mode 100644 index 000000000..e6137d684 --- /dev/null +++ b/libsrc/atari7800/mono_clrscr.s @@ -0,0 +1,39 @@ + + .include "atari7800.inc" + + .export _mono_clrscr + + .import _screen + .import pusha0,pushax + .include "extzp.inc" + + .code + + .proc _mono_clrscr + + lda #<_screen + ldx #>_screen + sta ptr7800 + stx ptr7800+1 + ldx #screenrows +@L1: ldy #mono_charsperline + lda #0 +@L2: sta (ptr7800),y + dey + bne @L2 + lda ptr7800 + clc + adc #mono_charsperline + bcc @L3 + inc ptr7800+1 +@L3: dex + bne @L1 + rts + + .endproc + +;------------------------------------------------------------------------------- +; force the init constructor to be imported + + .import mono_initconio +conio_init = mono_initconio diff --git a/libsrc/atari7800/mono_conio.s b/libsrc/atari7800/mono_conio.s new file mode 100644 index 000000000..51ecc93b8 --- /dev/null +++ b/libsrc/atari7800/mono_conio.s @@ -0,0 +1,227 @@ +; +; 2022-04-02, Karri Kaksonen +; +; The Atari 7800 has only 4k of RAM. So for a generic conio implementation +; the best alternative is to use indirect tile mapping with a character +; frame buffer +; + + .constructor mono_initconio + .include "atari7800.inc" + .include "extzp.inc" + .import _mono_font + .import _get_tv + .export _mono_screen + .export _mono_zones + .export _mono_dll + + .bss +_mono_screen: + .res mono_charsperline * screenrows + +;---------------------------------------------------------------------------- +; Macros used to generate lists + +.macro DLLentry offset, addr + .byte offset + .byte >addr + .byte <addr +.endmacro + +.macro NullHeader offset, zero + .byte offset + .byte zero +.endmacro + +.macro Header addr, palwidth, hpos + .byte <addr + .byte palwidth + .byte >addr + .byte hpos +.endmacro + +.macro XHeader addr, flags, palwidth, hpos + .byte <addr + .byte flags + .byte >addr + .byte palwidth + .byte hpos +.endmacro + +.macro TextZone row + ; Text + .byte <(_mono_screen + 2 * row * charsperline) + .byte $60 + .byte >(_mono_screen + 2 * row * charsperline) + .byte 12 + .byte 0 + .byte <(_mono_screen + 2 * row * charsperline + charsperline) + .byte $60 + .byte >(_mono_screen + 2 * row * charsperline + charsperline) + .byte 12 + .byte 80 + ; Cursor + .byte 95 + .byte 0 + .byte >_mono_font + .byte 0 +.endmacro + +;----------------------------------------------------------------------------- +; The Atari 7800 has only 4k of RAM. So for a generic conio implementation +; the best alternative is to use indirect tile mapping with a character +; frame buffer + .data + +_mono_zones: +zone0: TextZone 0 +nh: NullHeader 0, 0 +zone1: TextZone 1 + NullHeader 0, 0 +zone2: TextZone 2 + NullHeader 0, 0 +zone3: TextZone 3 + NullHeader 0, 0 +zone4: TextZone 4 + NullHeader 0, 0 +zone5: TextZone 5 + NullHeader 0, 0 +zone6: TextZone 6 + NullHeader 0, 0 +zone7: TextZone 7 + NullHeader 0, 0 +zone8: TextZone 8 + NullHeader 0, 0 +zone9: TextZone 9 + NullHeader 0, 0 +zone10: TextZone 10 + NullHeader 0, 0 +zone11: TextZone 11 + NullHeader 0, 0 +zone12: TextZone 12 + NullHeader 0, 0 +zone13: TextZone 13 + NullHeader 0, 0 +zone14: TextZone 14 + NullHeader 0, 0 +zone15: TextZone 15 + NullHeader 0, 0 +zone16: TextZone 16 + NullHeader 0, 0 +zone17: TextZone 17 + NullHeader 0, 0 +zone18: TextZone 18 + NullHeader 0, 0 +zone19: TextZone 19 + NullHeader 0, 0 +zone20: TextZone 20 + NullHeader 0, 0 +zone21: TextZone 21 + NullHeader 0, 0 +zone22: TextZone 22 + NullHeader 0, 0 +zone23: TextZone 23 + NullHeader 0, 0 +zone24: TextZone 24 + NullHeader 0, 0 +zone25: TextZone 25 + NullHeader 0, 0 +zone26: TextZone 26 + NullHeader 0, 0 +zone27: TextZone 27 + NullHeader 0, 0 + +_mono_dll: +PALscanlines: ; 25 lines + DLLentry 15, nh + DLLentry 8, nh + +Topscanlines: ; 9 lines + DLLentry 8, nh + +Displaylines: + DLLentry $80+7, zone0 ; NMI interrupt from end of prev zone + DLLentry 7, zone1 + DLLentry 7, zone2 + DLLentry 7, zone3 + DLLentry 7, zone4 + DLLentry 7, zone5 + DLLentry 7, zone6 + DLLentry 7, zone7 + DLLentry 7, zone8 + DLLentry 7, zone9 + DLLentry 7, zone10 + DLLentry 7, zone11 + DLLentry 7, zone12 + DLLentry 7, zone13 + DLLentry 7, zone14 + DLLentry 7, zone15 + DLLentry 7, zone16 + DLLentry 7, zone17 + DLLentry 7, zone18 + DLLentry 7, zone19 + DLLentry 7, zone20 + DLLentry 7, zone21 + DLLentry 7, zone22 + DLLentry 7, zone23 + DLLentry 7, zone24 + DLLentry 7, zone25 + DLLentry 7, zone26 + DLLentry 7, zone27 + +Bottomscanlines: + DLLentry $80+15, nh ; NMI interrupt at end of display + DLLentry 9, nh + DLLentry 15, nh + DLLentry 8, nh + +;----------------------------------------------------------------------------- +; Set up the screen to 320a mode +; + .segment "ONCE" + +CTRL_MODE160 .set 0 +CTRL_MODEAC .set 3 +CTRL_KANGOFF .set 0 +CTRL_BCBLACK .set 0 +CTRL_CHAR1B .set 0 +CTRL_CHAR2B .set $10 +CTRL_DMAON .set $40 +CTRL_CKOFF .set 0 + +;----------------------------------------------------------------------------- +; Initialize the conio display lists and zones +; + .proc mono_initconio + + jsr _get_tv + bne pal + lda #<Topscanlines + sta DPPL + lda #>Topscanlines + sta DPPH + jmp vblankon +pal: lda #<PALscanlines + sta DPPL + lda #>PALscanlines + sta DPPH +vblankon: + lda MSTAT + bmi vblankon +vblankoff: + lda MSTAT + bpl vblankoff + lda #>_mono_font + sta CHBASE + lda #(CTRL_MODEAC | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR1B | CTRL_DMAON | CTRL_CKOFF) + sta CTRL + lda #$00 ; Black background + sta BKGRND + sta CURS_X + sta CURS_Y + lda #$0f ; White + sta P0C1 + rts + + .endproc + diff --git a/libsrc/atari7800/mono_cputc.s b/libsrc/atari7800/mono_cputc.s new file mode 100644 index 000000000..5735749ea --- /dev/null +++ b/libsrc/atari7800/mono_cputc.s @@ -0,0 +1,102 @@ +; +; Mark Keates, Christian Groessler, Piotr Fusik, Karri Kaksonen +; +; void cputcxy (unsigned char x, unsigned char y, char c); +; void cputc (char c); +; + + .export _mono_cputc + .import _mono_gotoxy, _mono_gotox, _mono_gotoy, pusha0 + .import pushax + .import _mono_screen + + .include "atari7800.inc" + .include "extzp.inc" + + .code + +;--------------------------------------------------------------------------- +; 8x16 routine + +umula0: + ldy #8 ; Number of bits + lda #0 + lsr ptr7800 ; Get first bit into carry +@L0: bcc @L1 + + clc + adc ptrtmp + tax + lda ptrtmp+1 ; hi byte of left op + clc + adc ptr7800+1 + sta ptr7800+1 + txa + +@L1: ror ptr7800+1 + ror a + ror ptr7800 + dey + bne @L0 + tax + lda ptr7800 ; Load the result + rts + +;----------------------------------------------------------------------------- +; Put a character on screen +; +; The code will handle newlines that wrap to start of screen +; + .proc _mono_cputc + + cmp #$0A ; LF + bne @L4 +@L1: lda #0 ; newline + jsr _mono_gotox + lda CURS_Y + cmp #(screenrows-1) + bne @L2 + lda #0 + beq @L3 +@L2: clc + adc #1 +@L3: jmp _mono_gotoy + +@L4: + pha + + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + lda CURS_Y ; Find position on screen buffer + sta ptr7800 + lda #mono_charsperline + sta ptrtmp + jsr umula0 + clc + adc CURS_X + bcc @L11 + inx +@L11: clc + adc #<(_mono_screen) + sta ptr7800 + bcc @L12 + inx +@L12: txa + clc + adc #>(_mono_screen) + sta ptr7800+1 + + pla ; Print character on screen + ldy #0 + sta (ptr7800),y + + lda CURS_X ; Increment cursor + cmp #(mono_charsperline-1) + beq @L1 + clc + adc #1 + jmp _mono_gotox + + .endproc + diff --git a/libsrc/atari7800/mono_font.s b/libsrc/atari7800/mono_font.s new file mode 100644 index 000000000..3c828544a --- /dev/null +++ b/libsrc/atari7800/mono_font.s @@ -0,0 +1,2052 @@ + .export _mono_font + .segment "RODATA" + .align 256 +_mono_font: + .byte $00 + .byte $7e + .byte $7e + .byte $00 + .byte $00 + .byte $7c + .byte $7c + .byte $00 + .byte $ff + .byte $00 + .byte $ff + .byte $78 + .byte $18 + .byte $e0 + .byte $c0 + .byte $99 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $ff + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $60 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $60 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $ff + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f8 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f0 + .byte $1e + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f8 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $38 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f8 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $30 + .byte $c7 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $0f + .byte $03 + .byte $00 + .byte $00 + .byte $00 + .byte $88 + .byte $aa + .byte $ee + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $36 + .byte $36 + .byte $36 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $fc + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $1c + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $81 + .byte $ff + .byte $10 + .byte $10 + .byte $38 + .byte $38 + .byte $00 + .byte $ff + .byte $3c + .byte $c3 + .byte $cc + .byte $7e + .byte $f0 + .byte $e6 + .byte $5a + .byte $80 + .byte $02 + .byte $3c + .byte $66 + .byte $1b + .byte $cc + .byte $7e + .byte $18 + .byte $18 + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $6c + .byte $30 + .byte $c6 + .byte $76 + .byte $00 + .byte $18 + .byte $60 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $30 + .byte $80 + .byte $7c + .byte $fc + .byte $fc + .byte $78 + .byte $1e + .byte $78 + .byte $78 + .byte $30 + .byte $78 + .byte $70 + .byte $30 + .byte $30 + .byte $18 + .byte $00 + .byte $60 + .byte $30 + .byte $78 + .byte $cc + .byte $fc + .byte $3c + .byte $f8 + .byte $fe + .byte $f0 + .byte $3e + .byte $cc + .byte $78 + .byte $78 + .byte $e6 + .byte $fe + .byte $c6 + .byte $c6 + .byte $38 + .byte $f0 + .byte $1c + .byte $e6 + .byte $78 + .byte $78 + .byte $fc + .byte $30 + .byte $c6 + .byte $c6 + .byte $78 + .byte $fe + .byte $78 + .byte $02 + .byte $78 + .byte $00 + .byte $00 + .byte $00 + .byte $76 + .byte $dc + .byte $78 + .byte $76 + .byte $78 + .byte $f0 + .byte $0c + .byte $e6 + .byte $78 + .byte $cc + .byte $e6 + .byte $78 + .byte $c6 + .byte $cc + .byte $78 + .byte $60 + .byte $0c + .byte $f0 + .byte $f8 + .byte $18 + .byte $76 + .byte $30 + .byte $6c + .byte $c6 + .byte $0c + .byte $fc + .byte $1c + .byte $18 + .byte $e0 + .byte $00 + .byte $fe + .byte $0c + .byte $7e + .byte $78 + .byte $3f + .byte $7e + .byte $7e + .byte $7e + .byte $0c + .byte $3c + .byte $78 + .byte $78 + .byte $78 + .byte $3c + .byte $78 + .byte $c6 + .byte $cc + .byte $fc + .byte $7f + .byte $ce + .byte $78 + .byte $78 + .byte $78 + .byte $7e + .byte $7e + .byte $0c + .byte $18 + .byte $78 + .byte $18 + .byte $fc + .byte $30 + .byte $c6 + .byte $d8 + .byte $7e + .byte $78 + .byte $78 + .byte $7e + .byte $cc + .byte $cc + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $cc + .byte $cf + .byte $18 + .byte $00 + .byte $00 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $36 + .byte $36 + .byte $36 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $76 + .byte $c0 + .byte $c0 + .byte $6c + .byte $fc + .byte $70 + .byte $60 + .byte $18 + .byte $30 + .byte $38 + .byte $ee + .byte $78 + .byte $00 + .byte $60 + .byte $38 + .byte $cc + .byte $00 + .byte $fc + .byte $fc + .byte $fc + .byte $18 + .byte $d8 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $3c + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $99 + .byte $e7 + .byte $38 + .byte $38 + .byte $7c + .byte $7c + .byte $18 + .byte $e7 + .byte $66 + .byte $99 + .byte $cc + .byte $18 + .byte $70 + .byte $67 + .byte $3c + .byte $e0 + .byte $0e + .byte $7e + .byte $00 + .byte $1b + .byte $38 + .byte $7e + .byte $3c + .byte $18 + .byte $3c + .byte $18 + .byte $30 + .byte $fe + .byte $24 + .byte $ff + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $6c + .byte $f8 + .byte $66 + .byte $cc + .byte $00 + .byte $30 + .byte $30 + .byte $66 + .byte $30 + .byte $30 + .byte $00 + .byte $30 + .byte $c0 + .byte $e6 + .byte $30 + .byte $cc + .byte $cc + .byte $0c + .byte $cc + .byte $cc + .byte $30 + .byte $cc + .byte $18 + .byte $30 + .byte $30 + .byte $30 + .byte $fc + .byte $30 + .byte $00 + .byte $c0 + .byte $cc + .byte $66 + .byte $66 + .byte $6c + .byte $62 + .byte $60 + .byte $66 + .byte $cc + .byte $30 + .byte $cc + .byte $66 + .byte $66 + .byte $c6 + .byte $c6 + .byte $6c + .byte $60 + .byte $78 + .byte $66 + .byte $cc + .byte $30 + .byte $cc + .byte $78 + .byte $ee + .byte $6c + .byte $30 + .byte $66 + .byte $60 + .byte $06 + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $cc + .byte $66 + .byte $cc + .byte $cc + .byte $c0 + .byte $60 + .byte $7c + .byte $66 + .byte $30 + .byte $cc + .byte $6c + .byte $30 + .byte $d6 + .byte $cc + .byte $cc + .byte $7c + .byte $7c + .byte $60 + .byte $0c + .byte $34 + .byte $cc + .byte $78 + .byte $fe + .byte $6c + .byte $7c + .byte $64 + .byte $30 + .byte $18 + .byte $30 + .byte $00 + .byte $c6 + .byte $18 + .byte $cc + .byte $c0 + .byte $66 + .byte $cc + .byte $cc + .byte $cc + .byte $78 + .byte $60 + .byte $c0 + .byte $c0 + .byte $30 + .byte $18 + .byte $30 + .byte $c6 + .byte $fc + .byte $60 + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $7c + .byte $3c + .byte $cc + .byte $7e + .byte $e6 + .byte $fc + .byte $cf + .byte $18 + .byte $cc + .byte $30 + .byte $cc + .byte $cc + .byte $cc + .byte $dc + .byte $7e + .byte $7c + .byte $cc + .byte $c0 + .byte $0c + .byte $66 + .byte $6f + .byte $18 + .byte $33 + .byte $cc + .byte $88 + .byte $aa + .byte $77 + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $36 + .byte $36 + .byte $36 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $dc + .byte $f8 + .byte $c0 + .byte $6c + .byte $cc + .byte $d8 + .byte $7c + .byte $18 + .byte $78 + .byte $6c + .byte $6c + .byte $cc + .byte $7e + .byte $7e + .byte $60 + .byte $cc + .byte $fc + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $d8 + .byte $30 + .byte $dc + .byte $00 + .byte $00 + .byte $00 + .byte $6c + .byte $00 + .byte $00 + .byte $3c + .byte $00 + .byte $00 + .byte $bd + .byte $c3 + .byte $7c + .byte $7c + .byte $fe + .byte $fe + .byte $3c + .byte $c3 + .byte $42 + .byte $bd + .byte $cc + .byte $3c + .byte $30 + .byte $63 + .byte $e7 + .byte $f8 + .byte $3e + .byte $18 + .byte $66 + .byte $1b + .byte $6c + .byte $7e + .byte $7e + .byte $18 + .byte $7e + .byte $0c + .byte $60 + .byte $c0 + .byte $66 + .byte $ff + .byte $3c + .byte $00 + .byte $30 + .byte $00 + .byte $fe + .byte $0c + .byte $30 + .byte $dc + .byte $00 + .byte $60 + .byte $18 + .byte $3c + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $60 + .byte $f6 + .byte $30 + .byte $60 + .byte $0c + .byte $fe + .byte $0c + .byte $cc + .byte $30 + .byte $cc + .byte $0c + .byte $00 + .byte $00 + .byte $60 + .byte $00 + .byte $18 + .byte $30 + .byte $de + .byte $fc + .byte $66 + .byte $c0 + .byte $66 + .byte $68 + .byte $68 + .byte $ce + .byte $cc + .byte $30 + .byte $cc + .byte $6c + .byte $62 + .byte $d6 + .byte $ce + .byte $c6 + .byte $60 + .byte $dc + .byte $6c + .byte $1c + .byte $30 + .byte $cc + .byte $cc + .byte $fe + .byte $38 + .byte $30 + .byte $32 + .byte $60 + .byte $0c + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $7c + .byte $66 + .byte $c0 + .byte $cc + .byte $fc + .byte $60 + .byte $cc + .byte $66 + .byte $30 + .byte $0c + .byte $78 + .byte $30 + .byte $fe + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $66 + .byte $78 + .byte $30 + .byte $cc + .byte $cc + .byte $fe + .byte $38 + .byte $cc + .byte $30 + .byte $30 + .byte $18 + .byte $30 + .byte $00 + .byte $c6 + .byte $78 + .byte $cc + .byte $fc + .byte $3e + .byte $7c + .byte $7c + .byte $7c + .byte $c0 + .byte $7e + .byte $fc + .byte $fc + .byte $30 + .byte $18 + .byte $30 + .byte $fe + .byte $cc + .byte $78 + .byte $7f + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $c0 + .byte $60 + .byte $30 + .byte $c6 + .byte $18 + .byte $7c + .byte $30 + .byte $cc + .byte $cc + .byte $cc + .byte $fc + .byte $00 + .byte $00 + .byte $c0 + .byte $c0 + .byte $0c + .byte $33 + .byte $37 + .byte $18 + .byte $66 + .byte $66 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $f8 + .byte $f8 + .byte $f6 + .byte $fe + .byte $f8 + .byte $f6 + .byte $36 + .byte $f6 + .byte $fe + .byte $fe + .byte $f8 + .byte $f8 + .byte $1f + .byte $ff + .byte $ff + .byte $1f + .byte $ff + .byte $ff + .byte $1f + .byte $37 + .byte $3f + .byte $37 + .byte $ff + .byte $f7 + .byte $37 + .byte $ff + .byte $f7 + .byte $ff + .byte $ff + .byte $ff + .byte $ff + .byte $3f + .byte $1f + .byte $1f + .byte $3f + .byte $ff + .byte $ff + .byte $f8 + .byte $1f + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $c8 + .byte $cc + .byte $c0 + .byte $6c + .byte $60 + .byte $d8 + .byte $66 + .byte $18 + .byte $cc + .byte $c6 + .byte $6c + .byte $cc + .byte $db + .byte $db + .byte $c0 + .byte $cc + .byte $00 + .byte $30 + .byte $60 + .byte $18 + .byte $18 + .byte $18 + .byte $00 + .byte $76 + .byte $00 + .byte $18 + .byte $18 + .byte $ec + .byte $6c + .byte $78 + .byte $3c + .byte $00 + .byte $00 + .byte $81 + .byte $ff + .byte $fe + .byte $fe + .byte $fe + .byte $7c + .byte $3c + .byte $c3 + .byte $42 + .byte $bd + .byte $7d + .byte $66 + .byte $30 + .byte $63 + .byte $e7 + .byte $fe + .byte $fe + .byte $18 + .byte $66 + .byte $7b + .byte $6c + .byte $00 + .byte $18 + .byte $18 + .byte $18 + .byte $fe + .byte $fe + .byte $c0 + .byte $ff + .byte $7e + .byte $7e + .byte $00 + .byte $30 + .byte $00 + .byte $6c + .byte $78 + .byte $18 + .byte $76 + .byte $00 + .byte $60 + .byte $18 + .byte $ff + .byte $fc + .byte $00 + .byte $fc + .byte $00 + .byte $30 + .byte $de + .byte $30 + .byte $38 + .byte $38 + .byte $cc + .byte $0c + .byte $f8 + .byte $18 + .byte $78 + .byte $7c + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $0c + .byte $18 + .byte $de + .byte $cc + .byte $7c + .byte $c0 + .byte $66 + .byte $78 + .byte $78 + .byte $c0 + .byte $fc + .byte $30 + .byte $0c + .byte $78 + .byte $60 + .byte $fe + .byte $de + .byte $c6 + .byte $7c + .byte $cc + .byte $7c + .byte $70 + .byte $30 + .byte $cc + .byte $cc + .byte $d6 + .byte $38 + .byte $78 + .byte $18 + .byte $60 + .byte $18 + .byte $18 + .byte $c6 + .byte $00 + .byte $00 + .byte $0c + .byte $7c + .byte $cc + .byte $7c + .byte $cc + .byte $f0 + .byte $cc + .byte $76 + .byte $30 + .byte $0c + .byte $6c + .byte $30 + .byte $fe + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $76 + .byte $c0 + .byte $30 + .byte $cc + .byte $cc + .byte $d6 + .byte $6c + .byte $cc + .byte $98 + .byte $e0 + .byte $00 + .byte $1c + .byte $00 + .byte $6c + .byte $cc + .byte $cc + .byte $cc + .byte $06 + .byte $0c + .byte $0c + .byte $0c + .byte $c0 + .byte $66 + .byte $cc + .byte $cc + .byte $30 + .byte $18 + .byte $30 + .byte $c6 + .byte $78 + .byte $60 + .byte $0c + .byte $fe + .byte $78 + .byte $78 + .byte $78 + .byte $cc + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $c0 + .byte $f0 + .byte $fc + .byte $fa + .byte $3c + .byte $0c + .byte $30 + .byte $78 + .byte $cc + .byte $f8 + .byte $ec + .byte $3e + .byte $38 + .byte $60 + .byte $fc + .byte $fc + .byte $de + .byte $db + .byte $18 + .byte $cc + .byte $33 + .byte $88 + .byte $aa + .byte $ee + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $18 + .byte $06 + .byte $36 + .byte $06 + .byte $06 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $30 + .byte $30 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $dc + .byte $f8 + .byte $c0 + .byte $6c + .byte $30 + .byte $d8 + .byte $66 + .byte $18 + .byte $cc + .byte $fe + .byte $c6 + .byte $7c + .byte $db + .byte $db + .byte $f8 + .byte $cc + .byte $fc + .byte $30 + .byte $30 + .byte $30 + .byte $18 + .byte $18 + .byte $fc + .byte $00 + .byte $38 + .byte $18 + .byte $00 + .byte $0c + .byte $6c + .byte $60 + .byte $3c + .byte $00 + .byte $00 + .byte $a5 + .byte $db + .byte $fe + .byte $7c + .byte $38 + .byte $38 + .byte $18 + .byte $e7 + .byte $66 + .byte $99 + .byte $0f + .byte $66 + .byte $3f + .byte $7f + .byte $3c + .byte $f8 + .byte $3e + .byte $7e + .byte $66 + .byte $db + .byte $38 + .byte $00 + .byte $7e + .byte $7e + .byte $18 + .byte $0c + .byte $60 + .byte $c0 + .byte $66 + .byte $3c + .byte $ff + .byte $00 + .byte $78 + .byte $6c + .byte $fe + .byte $c0 + .byte $cc + .byte $38 + .byte $c0 + .byte $60 + .byte $18 + .byte $3c + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $ce + .byte $30 + .byte $0c + .byte $0c + .byte $6c + .byte $f8 + .byte $c0 + .byte $0c + .byte $cc + .byte $cc + .byte $30 + .byte $30 + .byte $60 + .byte $fc + .byte $18 + .byte $0c + .byte $de + .byte $cc + .byte $66 + .byte $c0 + .byte $66 + .byte $68 + .byte $68 + .byte $c0 + .byte $cc + .byte $30 + .byte $0c + .byte $6c + .byte $60 + .byte $fe + .byte $f6 + .byte $c6 + .byte $66 + .byte $cc + .byte $66 + .byte $e0 + .byte $30 + .byte $cc + .byte $cc + .byte $c6 + .byte $6c + .byte $cc + .byte $8c + .byte $60 + .byte $30 + .byte $18 + .byte $6c + .byte $00 + .byte $18 + .byte $78 + .byte $60 + .byte $78 + .byte $0c + .byte $78 + .byte $60 + .byte $76 + .byte $6c + .byte $70 + .byte $0c + .byte $66 + .byte $30 + .byte $cc + .byte $f8 + .byte $78 + .byte $dc + .byte $76 + .byte $dc + .byte $7c + .byte $7c + .byte $cc + .byte $cc + .byte $c6 + .byte $c6 + .byte $cc + .byte $fc + .byte $30 + .byte $18 + .byte $30 + .byte $00 + .byte $38 + .byte $c0 + .byte $00 + .byte $78 + .byte $3c + .byte $78 + .byte $78 + .byte $78 + .byte $78 + .byte $3c + .byte $78 + .byte $78 + .byte $70 + .byte $38 + .byte $70 + .byte $6c + .byte $00 + .byte $fc + .byte $7f + .byte $cc + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $3c + .byte $cc + .byte $7e + .byte $64 + .byte $78 + .byte $cc + .byte $18 + .byte $78 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $cc + .byte $6c + .byte $6c + .byte $30 + .byte $00 + .byte $00 + .byte $cc + .byte $cc + .byte $00 + .byte $66 + .byte $66 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $18 + .byte $f8 + .byte $36 + .byte $00 + .byte $f8 + .byte $f6 + .byte $36 + .byte $fe + .byte $f6 + .byte $36 + .byte $f8 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $1f + .byte $36 + .byte $37 + .byte $3f + .byte $f7 + .byte $ff + .byte $37 + .byte $ff + .byte $f7 + .byte $ff + .byte $36 + .byte $ff + .byte $00 + .byte $36 + .byte $1f + .byte $1f + .byte $00 + .byte $36 + .byte $ff + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $76 + .byte $cc + .byte $cc + .byte $6c + .byte $60 + .byte $7e + .byte $66 + .byte $dc + .byte $78 + .byte $c6 + .byte $c6 + .byte $18 + .byte $7e + .byte $7e + .byte $c0 + .byte $cc + .byte $00 + .byte $fc + .byte $18 + .byte $60 + .byte $1b + .byte $18 + .byte $00 + .byte $dc + .byte $6c + .byte $00 + .byte $00 + .byte $0c + .byte $6c + .byte $30 + .byte $3c + .byte $00 + .byte $00 + .byte $81 + .byte $ff + .byte $fe + .byte $38 + .byte $7c + .byte $10 + .byte $00 + .byte $ff + .byte $3c + .byte $c3 + .byte $07 + .byte $66 + .byte $33 + .byte $63 + .byte $5a + .byte $e0 + .byte $0e + .byte $3c + .byte $66 + .byte $db + .byte $63 + .byte $00 + .byte $3c + .byte $3c + .byte $18 + .byte $18 + .byte $30 + .byte $00 + .byte $24 + .byte $18 + .byte $ff + .byte $00 + .byte $78 + .byte $6c + .byte $6c + .byte $7c + .byte $c6 + .byte $6c + .byte $60 + .byte $30 + .byte $30 + .byte $66 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $0c + .byte $c6 + .byte $70 + .byte $cc + .byte $cc + .byte $3c + .byte $c0 + .byte $60 + .byte $cc + .byte $cc + .byte $cc + .byte $30 + .byte $30 + .byte $30 + .byte $00 + .byte $30 + .byte $cc + .byte $c6 + .byte $78 + .byte $66 + .byte $66 + .byte $6c + .byte $62 + .byte $62 + .byte $66 + .byte $cc + .byte $30 + .byte $0c + .byte $66 + .byte $60 + .byte $ee + .byte $e6 + .byte $6c + .byte $66 + .byte $cc + .byte $66 + .byte $cc + .byte $b4 + .byte $cc + .byte $cc + .byte $c6 + .byte $c6 + .byte $cc + .byte $c6 + .byte $60 + .byte $60 + .byte $18 + .byte $38 + .byte $00 + .byte $30 + .byte $00 + .byte $60 + .byte $00 + .byte $0c + .byte $00 + .byte $6c + .byte $00 + .byte $60 + .byte $00 + .byte $00 + .byte $60 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $18 + .byte $30 + .byte $dc + .byte $10 + .byte $cc + .byte $cc + .byte $00 + .byte $c3 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $c3 + .byte $00 + .byte $00 + .byte $00 + .byte $c6 + .byte $00 + .byte $38 + .byte $30 + .byte $00 + .byte $00 + .byte $6c + .byte $cc + .byte $cc + .byte $e0 + .byte $cc + .byte $e0 + .byte $cc + .byte $18 + .byte $00 + .byte $18 + .byte $6c + .byte $cc + .byte $cc + .byte $1b + .byte $00 + .byte $00 + .byte $1c + .byte $1c + .byte $f8 + .byte $00 + .byte $6c + .byte $6c + .byte $00 + .byte $00 + .byte $00 + .byte $c6 + .byte $c6 + .byte $18 + .byte $33 + .byte $cc + .byte $88 + .byte $aa + .byte $77 + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $00 + .byte $78 + .byte $fc + .byte $fe + .byte $cc + .byte $00 + .byte $66 + .byte $76 + .byte $30 + .byte $6c + .byte $6c + .byte $30 + .byte $00 + .byte $0c + .byte $60 + .byte $cc + .byte $fc + .byte $30 + .byte $30 + .byte $30 + .byte $1b + .byte $18 + .byte $30 + .byte $76 + .byte $6c + .byte $00 + .byte $00 + .byte $0c + .byte $6c + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $7e + .byte $7e + .byte $6c + .byte $10 + .byte $38 + .byte $10 + .byte $00 + .byte $ff + .byte $00 + .byte $ff + .byte $0f + .byte $3c + .byte $3f + .byte $7f + .byte $99 + .byte $80 + .byte $02 + .byte $18 + .byte $66 + .byte $7f + .byte $3e + .byte $00 + .byte $18 + .byte $18 + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $6c + .byte $6c + .byte $30 + .byte $00 + .byte $38 + .byte $60 + .byte $18 + .byte $60 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $06 + .byte $7c + .byte $30 + .byte $78 + .byte $78 + .byte $1c + .byte $fc + .byte $38 + .byte $fc + .byte $78 + .byte $78 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $60 + .byte $78 + .byte $7c + .byte $30 + .byte $fc + .byte $3c + .byte $f8 + .byte $fe + .byte $fe + .byte $3c + .byte $cc + .byte $78 + .byte $1e + .byte $e6 + .byte $f0 + .byte $c6 + .byte $c6 + .byte $38 + .byte $fc + .byte $78 + .byte $fc + .byte $78 + .byte $fc + .byte $cc + .byte $cc + .byte $c6 + .byte $c6 + .byte $cc + .byte $fe + .byte $78 + .byte $c0 + .byte $78 + .byte $10 + .byte $00 + .byte $30 + .byte $00 + .byte $e0 + .byte $00 + .byte $1c + .byte $00 + .byte $38 + .byte $00 + .byte $e0 + .byte $30 + .byte $0c + .byte $e0 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $10 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $1c + .byte $18 + .byte $e0 + .byte $76 + .byte $00 + .byte $78 + .byte $00 + .byte $1c + .byte $7e + .byte $cc + .byte $e0 + .byte $30 + .byte $00 + .byte $7e + .byte $cc + .byte $e0 + .byte $cc + .byte $7c + .byte $e0 + .byte $c6 + .byte $30 + .byte $1c + .byte $00 + .byte $3e + .byte $78 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $c3 + .byte $cc + .byte $18 + .byte $38 + .byte $cc + .byte $f8 + .byte $0e + .byte $1c + .byte $38 + .byte $00 + .byte $00 + .byte $00 + .byte $fc + .byte $3c + .byte $38 + .byte $30 + .byte $00 + .byte $00 + .byte $c3 + .byte $c3 + .byte $18 + .byte $00 + .byte $00 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $fc + .byte $00 + .byte $00 + .byte $00 + .byte $fc + .byte $38 + .byte $38 + .byte $1c + .byte $00 + .byte $06 + .byte $38 + .byte $78 + .byte $00 + .byte $30 + .byte $60 + .byte $18 + .byte $0e + .byte $18 + .byte $30 + .byte $00 + .byte $38 + .byte $00 + .byte $00 + .byte $0f + .byte $78 + .byte $70 + .byte $00 + .byte $00 diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s new file mode 100644 index 000000000..c75ff16f3 --- /dev/null +++ b/libsrc/atari7800/mono_setcursor.s @@ -0,0 +1,208 @@ +; +; 2022-04-03, Karri Kaksonen +; +; setcursor (unsigned char on); +; +; The Atari 7800 does not have a hw cursor. +; This module emulates a cursor to be used with the conio +; implementation. +; +; The actual cursor display is included in the conio dll +; but every scanline has the element silenced by default +; at the end of every zone. +; +; The way the cursor works is to silence it before the cursor +; position changes and enable it afterwards. +; +; In order to get some performance we have a pointer to the +; cursor header structure. This structure is always at the +; end of the zone. So the pointer changes when CURS_Y changes. +; +; There is so many dependencies that it makes sense to +; deal with all CURS_X, CURS_Y stuff in this file and +; definitely not allow direct access to the variables. +; + + .export mono_gotoxy, _mono_gotoxy, _mono_gotox, _mono_gotoy + .constructor mono_init_cursor + .interruptor mono_blink_cursor + + .importzp sp + .import _mono_zones + .import cursor + .import pusha, incsp1, pusha0, pushax, popa + .include "atari7800.inc" + .include "extzp.inc" + + .macpack generic + + .data +;----------------------------------------------------------------------------- +; The variables used by cursor functions +; + +blink_time: + .byte 140 + + .code + +;--------------------------------------------------------------------------- +; 8x16 routine + +umula0: + ldy #8 ; Number of bits + lda #0 + lsr ptr7800 ; Get first bit into carry +@L0: bcc @L1 + + clc + adc ptrtmp + tax + lda ptrtmp+1 ; hi byte of left op + adc ptr7800+1 + sta ptr7800+1 + txa + +@L1: ror ptr7800+1 + ror a + ror ptr7800 + dey + bne @L0 + tax + lda ptr7800 ; Load the result + rts + +;----------------------------------------------------------------------------- +; Calculate cursorzone address +; You also need to set the cursorzone to point to the correct cursor Header +; at the end of line CURS_Y. +; Offset to cursor zone 5. To next line offset 11 +; cursorzone points to _mono_zones + CURS_Y * 16 + 10 +; A = CURS_Y + .proc calccursorzone + + sta ptr7800 + lda #16 + sta ptrtmp + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + jsr umula0 + clc + adc #10 + bcc @L1 + inx +@L1: clc + adc #<_mono_zones + sta cursorzone ; calculate new cursorzone + txa + clc + adc #>_mono_zones + sta cursorzone+1 + rts + + .endproc + +;----------------------------------------------------------------------------- +; Set cursor to Y position. +; You also need to set the cursorzone to point to the correct cursor Header +; at the end of line CURS_Y. +; Offset to cursor zone 5. To next line offset 11 +; cursorzone points to _mono_zones + CURS_Y * 11 + 5 +; +; cursorzone[1] = 0 when not CURS_Y, 31 if CURS_Y +; +; Disable cursor +; cursorzone[1] = 0 +; +; Enable cursor +; if showcursor cursorzone[1] = 31 +; + .proc _mono_gotoy + + pha + lda CURS_Y + jsr calccursorzone + ldy #1 + lda #0 + sta (cursorzone),y ; disable cursor + pla + sta CURS_Y + jsr calccursorzone + lda cursor + beq @L1 + lda #31 ; enable cursor +@L1: ldy #1 + sta (cursorzone),y + rts + + .endproc + +;----------------------------------------------------------------------------- +; Set cursor to X position. +; You also need to set the hpos offset to the correct value on this line +; cursorzone[3] = 4 * CURS_X? +; + .proc _mono_gotox + + sta CURS_X + ldy #3 + clc + rol + rol + sta (cursorzone),y + rts + + .endproc + +;----------------------------------------------------------------------------- +; Set cursor to desired position (X,Y) +; + .proc _mono_gotoxy + + jsr _mono_gotoy + jsr popa + jsr _mono_gotox + rts + .endproc + + .proc mono_gotoxy + jsr popa + jmp _mono_gotoxy + .endproc + +;----------------------------------------------------------------------------- +; Initialize cursorzone at startup +; Offset to cursor zone 5. +; + .proc mono_blink_cursor + inc blink_time + bne @L3 + lda #140 + sta blink_time + ldy #0 + lda (cursorzone),y + cmp #32 + bne @L1 + lda #95 + bne @L2 +@L1: lda #32 +@L2: sta (cursorzone),y +@L3: rts + .endproc + +;----------------------------------------------------------------------------- +; Initialize cursorzone at startup +; Offset to cursor zone 5. +; + .segment "ONCE" +mono_init_cursor: + lda #0 + jsr calccursorzone + rts + +;----------------------------------------------------------------------------- +; force the init constructor to be imported + + .import mono_initconio +conio_init = mono_initconio From f2f358262e6edef222fcaa5aa64f993bbac52c90 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 11:59:54 +0300 Subject: [PATCH 1601/2710] Add mono conio files --- asminc/atari7800.inc | 1 + cfg/atari7800.cfg | 2 +- libsrc/atari7800/clrscr.s | 4 ++-- libsrc/atari7800/conio.s | 9 ++++++--- libsrc/atari7800/cputc.s | 1 - libsrc/atari7800/extzp.inc | 2 ++ libsrc/atari7800/extzp.s | 2 ++ libsrc/atari7800/font160.s | 4 ++-- libsrc/atari7800/setcursor.s | 5 ----- libsrc/atari7800/textcolor.s | 6 ------ libsrc/atari7800/wherex.s | 2 +- libsrc/atari7800/wherey.s | 2 +- 12 files changed, 18 insertions(+), 22 deletions(-) diff --git a/asminc/atari7800.inc b/asminc/atari7800.inc index 93e990870..0f109ba64 100644 --- a/asminc/atari7800.inc +++ b/asminc/atari7800.inc @@ -8,6 +8,7 @@ .include "atari7800_maria.inc" ; constants for the conio implementation +mono_charsperline = 40 charsperline = 20 screenrows = 28 diff --git a/cfg/atari7800.cfg b/cfg/atari7800.cfg index 160d1e58e..1eed534f3 100644 --- a/cfg/atari7800.cfg +++ b/cfg/atari7800.cfg @@ -10,7 +10,7 @@ SYMBOLS { __ENCRYPT_BOTTOM__: value = $ff7a, type = export; __ENCRYPT_SIZE__: value = $80, type = export; __MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export; - __INIT_SIZE__: value = 154, type = export; + __INIT_SIZE__: value = 156, type = export; __MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export; __MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak; __FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export; diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s index b5b3a1ebf..9d063fad6 100644 --- a/libsrc/atari7800/clrscr.s +++ b/libsrc/atari7800/clrscr.s @@ -11,8 +11,8 @@ .proc _clrscr - lda #<(_screen) - ldx #>(_screen) + lda #<_screen + ldx #>_screen sta ptr7800 stx ptr7800+1 ldx #screenrows diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index ad1c4a976..5b60f39fe 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -8,7 +8,8 @@ .constructor initconio .include "atari7800.inc" - .import _font160 + .include "extzp.inc" + .import _font .import _get_tv .export _screen .export _zones @@ -57,7 +58,7 @@ _screen: ; Cursor .byte 254 .byte 0 - .byte >_font160 + .byte >_font .byte 0 .endmacro @@ -205,12 +206,14 @@ vblankon: vblankoff: lda MSTAT bpl vblankoff - lda #>_font160 + lda #>_font sta CHBASE lda #(CTRL_MODE160 | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR2B | CTRL_DMAON | CTRL_CKOFF) sta CTRL lda #$00 ; Black background sta BKGRND + sta CURS_X + sta CURS_Y lda #$33 ; Red sta P0C1 lda #$c8 ; Green diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index 4d2b8dbf6..fb95277d2 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -10,7 +10,6 @@ .import _gotoxy, gotox, gotoy, pusha0 .import pushax .import _screen - .import CURS_X, CURS_Y .import txtcolor .include "atari7800.inc" diff --git a/libsrc/atari7800/extzp.inc b/libsrc/atari7800/extzp.inc index ac1dd7e41..5990b5c86 100644 --- a/libsrc/atari7800/extzp.inc +++ b/libsrc/atari7800/extzp.inc @@ -10,4 +10,6 @@ .global ptr7800: zp .global ptrtmp: zp .global cursorzone: zp + .global CURS_X: zp + .global CURS_Y: zp diff --git a/libsrc/atari7800/extzp.s b/libsrc/atari7800/extzp.s index 376674268..a79ede01a 100644 --- a/libsrc/atari7800/extzp.s +++ b/libsrc/atari7800/extzp.s @@ -11,3 +11,5 @@ ptr7800: .res 2 ptrtmp: .res 2 cursorzone: .res 2 +CURS_X: .res 1 +CURS_Y: .res 1 diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/font160.s index 69c5774ab..07be43c4d 100644 --- a/libsrc/atari7800/font160.s +++ b/libsrc/atari7800/font160.s @@ -16,10 +16,10 @@ ; 0, 2, 4, 6, ... 254 ; Odd indices cannot be used. - .export _font160 + .export _font .rodata .align 256 -_font160: +_font: .byte $0, $0, $41, $41, $0, $0, $14, $0 .byte $0, $0, $0, $0, $1, $40, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index caaa9c1d5..99e051cff 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -24,7 +24,6 @@ ; .export gotoxy, _gotoxy, gotox, gotoy - .export CURS_X, CURS_Y .constructor init_cursor .interruptor blink_cursor @@ -43,10 +42,6 @@ ; The variables used by cursor functions ; -CURS_X: - .byte 0 -CURS_Y: - .byte 0 blink_time: .byte 140 diff --git a/libsrc/atari7800/textcolor.s b/libsrc/atari7800/textcolor.s index be98ed340..1f8efced5 100644 --- a/libsrc/atari7800/textcolor.s +++ b/libsrc/atari7800/textcolor.s @@ -51,9 +51,3 @@ txtcolor: @L4: lda #2 rts ; Old colour was 2 .endproc - -;------------------------------------------------------------------------------- -; force the init constructor to be imported - - .import initconio -conio_init = initconio diff --git a/libsrc/atari7800/wherex.s b/libsrc/atari7800/wherex.s index f90105c46..4926f1479 100644 --- a/libsrc/atari7800/wherex.s +++ b/libsrc/atari7800/wherex.s @@ -5,7 +5,7 @@ ; .export _wherex - .import CURS_X + .include "extzp.inc" ;----------------------------------------------------------------------------- ; Get cursor X position diff --git a/libsrc/atari7800/wherey.s b/libsrc/atari7800/wherey.s index 2223f29ac..f105975c0 100644 --- a/libsrc/atari7800/wherey.s +++ b/libsrc/atari7800/wherey.s @@ -5,7 +5,7 @@ ; .export _wherey - .import CURS_Y + .include "extzp.inc" ;----------------------------------------------------------------------------- ; Get cursor Y position From 2e51b2b17ca60c5e90abaff847f5fcd34e5447e6 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 12:05:36 +0300 Subject: [PATCH 1602/2710] Fix tabs --- libsrc/atari7800/mono_clrscr.s | 48 +- libsrc/atari7800/mono_conio.s | 322 +-- libsrc/atari7800/mono_cputc.s | 92 +- libsrc/atari7800/mono_font.s | 4102 ++++++++++++++--------------- libsrc/atari7800/mono_setcursor.s | 154 +- 5 files changed, 2359 insertions(+), 2359 deletions(-) diff --git a/libsrc/atari7800/mono_clrscr.s b/libsrc/atari7800/mono_clrscr.s index e6137d684..cdf12bf4d 100644 --- a/libsrc/atari7800/mono_clrscr.s +++ b/libsrc/atari7800/mono_clrscr.s @@ -3,34 +3,34 @@ .export _mono_clrscr - .import _screen - .import pusha0,pushax - .include "extzp.inc" + .import _screen + .import pusha0,pushax + .include "extzp.inc" - .code + .code - .proc _mono_clrscr + .proc _mono_clrscr - lda #<_screen - ldx #>_screen - sta ptr7800 - stx ptr7800+1 - ldx #screenrows -@L1: ldy #mono_charsperline - lda #0 -@L2: sta (ptr7800),y - dey - bne @L2 - lda ptr7800 - clc - adc #mono_charsperline - bcc @L3 - inc ptr7800+1 -@L3: dex - bne @L1 - rts + lda #<_screen + ldx #>_screen + sta ptr7800 + stx ptr7800+1 + ldx #screenrows +@L1: ldy #mono_charsperline + lda #0 +@L2: sta (ptr7800),y + dey + bne @L2 + lda ptr7800 + clc + adc #mono_charsperline + bcc @L3 + inc ptr7800+1 +@L3: dex + bne @L1 + rts - .endproc + .endproc ;------------------------------------------------------------------------------- ; force the init constructor to be imported diff --git a/libsrc/atari7800/mono_conio.s b/libsrc/atari7800/mono_conio.s index 51ecc93b8..cd79af128 100644 --- a/libsrc/atari7800/mono_conio.s +++ b/libsrc/atari7800/mono_conio.s @@ -9,11 +9,11 @@ .constructor mono_initconio .include "atari7800.inc" .include "extzp.inc" - .import _mono_font - .import _get_tv - .export _mono_screen - .export _mono_zones - .export _mono_dll + .import _mono_font + .import _get_tv + .export _mono_screen + .export _mono_zones + .export _mono_dll .bss _mono_screen: @@ -23,48 +23,48 @@ _mono_screen: ; Macros used to generate lists .macro DLLentry offset, addr - .byte offset - .byte >addr - .byte <addr + .byte offset + .byte >addr + .byte <addr .endmacro .macro NullHeader offset, zero - .byte offset - .byte zero + .byte offset + .byte zero .endmacro .macro Header addr, palwidth, hpos - .byte <addr - .byte palwidth - .byte >addr - .byte hpos + .byte <addr + .byte palwidth + .byte >addr + .byte hpos .endmacro .macro XHeader addr, flags, palwidth, hpos - .byte <addr - .byte flags - .byte >addr - .byte palwidth - .byte hpos + .byte <addr + .byte flags + .byte >addr + .byte palwidth + .byte hpos .endmacro .macro TextZone row - ; Text - .byte <(_mono_screen + 2 * row * charsperline) - .byte $60 - .byte >(_mono_screen + 2 * row * charsperline) - .byte 12 - .byte 0 - .byte <(_mono_screen + 2 * row * charsperline + charsperline) - .byte $60 - .byte >(_mono_screen + 2 * row * charsperline + charsperline) - .byte 12 - .byte 80 - ; Cursor - .byte 95 - .byte 0 - .byte >_mono_font - .byte 0 + ; Text + .byte <(_mono_screen + 2 * row * charsperline) + .byte $60 + .byte >(_mono_screen + 2 * row * charsperline) + .byte 12 + .byte 0 + .byte <(_mono_screen + 2 * row * charsperline + charsperline) + .byte $60 + .byte >(_mono_screen + 2 * row * charsperline + charsperline) + .byte 12 + .byte 80 + ; Cursor + .byte 95 + .byte 0 + .byte >_mono_font + .byte 0 .endmacro ;----------------------------------------------------------------------------- @@ -74,153 +74,153 @@ _mono_screen: .data _mono_zones: -zone0: TextZone 0 -nh: NullHeader 0, 0 -zone1: TextZone 1 - NullHeader 0, 0 -zone2: TextZone 2 - NullHeader 0, 0 -zone3: TextZone 3 - NullHeader 0, 0 -zone4: TextZone 4 - NullHeader 0, 0 -zone5: TextZone 5 - NullHeader 0, 0 -zone6: TextZone 6 - NullHeader 0, 0 -zone7: TextZone 7 - NullHeader 0, 0 -zone8: TextZone 8 - NullHeader 0, 0 -zone9: TextZone 9 - NullHeader 0, 0 -zone10: TextZone 10 - NullHeader 0, 0 -zone11: TextZone 11 - NullHeader 0, 0 -zone12: TextZone 12 - NullHeader 0, 0 -zone13: TextZone 13 - NullHeader 0, 0 -zone14: TextZone 14 - NullHeader 0, 0 -zone15: TextZone 15 - NullHeader 0, 0 -zone16: TextZone 16 - NullHeader 0, 0 -zone17: TextZone 17 - NullHeader 0, 0 -zone18: TextZone 18 - NullHeader 0, 0 -zone19: TextZone 19 - NullHeader 0, 0 -zone20: TextZone 20 - NullHeader 0, 0 -zone21: TextZone 21 - NullHeader 0, 0 -zone22: TextZone 22 - NullHeader 0, 0 -zone23: TextZone 23 - NullHeader 0, 0 -zone24: TextZone 24 - NullHeader 0, 0 -zone25: TextZone 25 - NullHeader 0, 0 -zone26: TextZone 26 - NullHeader 0, 0 -zone27: TextZone 27 - NullHeader 0, 0 +zone0: TextZone 0 +nh: NullHeader 0, 0 +zone1: TextZone 1 + NullHeader 0, 0 +zone2: TextZone 2 + NullHeader 0, 0 +zone3: TextZone 3 + NullHeader 0, 0 +zone4: TextZone 4 + NullHeader 0, 0 +zone5: TextZone 5 + NullHeader 0, 0 +zone6: TextZone 6 + NullHeader 0, 0 +zone7: TextZone 7 + NullHeader 0, 0 +zone8: TextZone 8 + NullHeader 0, 0 +zone9: TextZone 9 + NullHeader 0, 0 +zone10: TextZone 10 + NullHeader 0, 0 +zone11: TextZone 11 + NullHeader 0, 0 +zone12: TextZone 12 + NullHeader 0, 0 +zone13: TextZone 13 + NullHeader 0, 0 +zone14: TextZone 14 + NullHeader 0, 0 +zone15: TextZone 15 + NullHeader 0, 0 +zone16: TextZone 16 + NullHeader 0, 0 +zone17: TextZone 17 + NullHeader 0, 0 +zone18: TextZone 18 + NullHeader 0, 0 +zone19: TextZone 19 + NullHeader 0, 0 +zone20: TextZone 20 + NullHeader 0, 0 +zone21: TextZone 21 + NullHeader 0, 0 +zone22: TextZone 22 + NullHeader 0, 0 +zone23: TextZone 23 + NullHeader 0, 0 +zone24: TextZone 24 + NullHeader 0, 0 +zone25: TextZone 25 + NullHeader 0, 0 +zone26: TextZone 26 + NullHeader 0, 0 +zone27: TextZone 27 + NullHeader 0, 0 _mono_dll: -PALscanlines: ; 25 lines - DLLentry 15, nh - DLLentry 8, nh +PALscanlines: ; 25 lines + DLLentry 15, nh + DLLentry 8, nh -Topscanlines: ; 9 lines - DLLentry 8, nh +Topscanlines: ; 9 lines + DLLentry 8, nh Displaylines: - DLLentry $80+7, zone0 ; NMI interrupt from end of prev zone - DLLentry 7, zone1 - DLLentry 7, zone2 - DLLentry 7, zone3 - DLLentry 7, zone4 - DLLentry 7, zone5 - DLLentry 7, zone6 - DLLentry 7, zone7 - DLLentry 7, zone8 - DLLentry 7, zone9 - DLLentry 7, zone10 - DLLentry 7, zone11 - DLLentry 7, zone12 - DLLentry 7, zone13 - DLLentry 7, zone14 - DLLentry 7, zone15 - DLLentry 7, zone16 - DLLentry 7, zone17 - DLLentry 7, zone18 - DLLentry 7, zone19 - DLLentry 7, zone20 - DLLentry 7, zone21 - DLLentry 7, zone22 - DLLentry 7, zone23 - DLLentry 7, zone24 - DLLentry 7, zone25 - DLLentry 7, zone26 - DLLentry 7, zone27 + DLLentry $80+7, zone0 ; NMI interrupt from end of prev zone + DLLentry 7, zone1 + DLLentry 7, zone2 + DLLentry 7, zone3 + DLLentry 7, zone4 + DLLentry 7, zone5 + DLLentry 7, zone6 + DLLentry 7, zone7 + DLLentry 7, zone8 + DLLentry 7, zone9 + DLLentry 7, zone10 + DLLentry 7, zone11 + DLLentry 7, zone12 + DLLentry 7, zone13 + DLLentry 7, zone14 + DLLentry 7, zone15 + DLLentry 7, zone16 + DLLentry 7, zone17 + DLLentry 7, zone18 + DLLentry 7, zone19 + DLLentry 7, zone20 + DLLentry 7, zone21 + DLLentry 7, zone22 + DLLentry 7, zone23 + DLLentry 7, zone24 + DLLentry 7, zone25 + DLLentry 7, zone26 + DLLentry 7, zone27 Bottomscanlines: - DLLentry $80+15, nh ; NMI interrupt at end of display - DLLentry 9, nh - DLLentry 15, nh - DLLentry 8, nh + DLLentry $80+15, nh ; NMI interrupt at end of display + DLLentry 9, nh + DLLentry 15, nh + DLLentry 8, nh ;----------------------------------------------------------------------------- ; Set up the screen to 320a mode ; .segment "ONCE" -CTRL_MODE160 .set 0 -CTRL_MODEAC .set 3 -CTRL_KANGOFF .set 0 -CTRL_BCBLACK .set 0 -CTRL_CHAR1B .set 0 -CTRL_CHAR2B .set $10 -CTRL_DMAON .set $40 -CTRL_CKOFF .set 0 +CTRL_MODE160 .set 0 +CTRL_MODEAC .set 3 +CTRL_KANGOFF .set 0 +CTRL_BCBLACK .set 0 +CTRL_CHAR1B .set 0 +CTRL_CHAR2B .set $10 +CTRL_DMAON .set $40 +CTRL_CKOFF .set 0 ;----------------------------------------------------------------------------- ; Initialize the conio display lists and zones ; .proc mono_initconio - jsr _get_tv - bne pal - lda #<Topscanlines - sta DPPL - lda #>Topscanlines - sta DPPH - jmp vblankon -pal: lda #<PALscanlines - sta DPPL - lda #>PALscanlines - sta DPPH + jsr _get_tv + bne pal + lda #<Topscanlines + sta DPPL + lda #>Topscanlines + sta DPPH + jmp vblankon +pal: lda #<PALscanlines + sta DPPL + lda #>PALscanlines + sta DPPH vblankon: - lda MSTAT - bmi vblankon + lda MSTAT + bmi vblankon vblankoff: - lda MSTAT - bpl vblankoff - lda #>_mono_font - sta CHBASE - lda #(CTRL_MODEAC | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR1B | CTRL_DMAON | CTRL_CKOFF) - sta CTRL - lda #$00 ; Black background - sta BKGRND - sta CURS_X - sta CURS_Y - lda #$0f ; White - sta P0C1 + lda MSTAT + bpl vblankoff + lda #>_mono_font + sta CHBASE + lda #(CTRL_MODEAC | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR1B | CTRL_DMAON | CTRL_CKOFF) + sta CTRL + lda #$00 ; Black background + sta BKGRND + sta CURS_X + sta CURS_Y + lda #$0f ; White + sta P0C1 rts .endproc diff --git a/libsrc/atari7800/mono_cputc.s b/libsrc/atari7800/mono_cputc.s index 5735749ea..4a7e5638c 100644 --- a/libsrc/atari7800/mono_cputc.s +++ b/libsrc/atari7800/mono_cputc.s @@ -7,20 +7,20 @@ .export _mono_cputc .import _mono_gotoxy, _mono_gotox, _mono_gotoy, pusha0 - .import pushax - .import _mono_screen + .import pushax + .import _mono_screen .include "atari7800.inc" .include "extzp.inc" - .code + .code ;--------------------------------------------------------------------------- ; 8x16 routine umula0: ldy #8 ; Number of bits - lda #0 + lda #0 lsr ptr7800 ; Get first bit into carry @L0: bcc @L1 @@ -28,7 +28,7 @@ umula0: adc ptrtmp tax lda ptrtmp+1 ; hi byte of left op - clc + clc adc ptr7800+1 sta ptr7800+1 txa @@ -49,54 +49,54 @@ umula0: ; .proc _mono_cputc - cmp #$0A ; LF + cmp #$0A ; LF bne @L4 -@L1: lda #0 ; newline - jsr _mono_gotox - lda CURS_Y - cmp #(screenrows-1) +@L1: lda #0 ; newline + jsr _mono_gotox + lda CURS_Y + cmp #(screenrows-1) bne @L2 - lda #0 - beq @L3 -@L2: clc - adc #1 -@L3: jmp _mono_gotoy + lda #0 + beq @L3 +@L2: clc + adc #1 +@L3: jmp _mono_gotoy @L4: - pha + pha - lda #0 - sta ptr7800+1 - sta ptrtmp+1 - lda CURS_Y ; Find position on screen buffer - sta ptr7800 - lda #mono_charsperline - sta ptrtmp - jsr umula0 - clc - adc CURS_X - bcc @L11 - inx -@L11: clc - adc #<(_mono_screen) - sta ptr7800 - bcc @L12 - inx -@L12: txa - clc - adc #>(_mono_screen) - sta ptr7800+1 + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + lda CURS_Y ; Find position on screen buffer + sta ptr7800 + lda #mono_charsperline + sta ptrtmp + jsr umula0 + clc + adc CURS_X + bcc @L11 + inx +@L11: clc + adc #<(_mono_screen) + sta ptr7800 + bcc @L12 + inx +@L12: txa + clc + adc #>(_mono_screen) + sta ptr7800+1 - pla ; Print character on screen - ldy #0 - sta (ptr7800),y + pla ; Print character on screen + ldy #0 + sta (ptr7800),y - lda CURS_X ; Increment cursor - cmp #(mono_charsperline-1) - beq @L1 - clc - adc #1 - jmp _mono_gotox + lda CURS_X ; Increment cursor + cmp #(mono_charsperline-1) + beq @L1 + clc + adc #1 + jmp _mono_gotox .endproc diff --git a/libsrc/atari7800/mono_font.s b/libsrc/atari7800/mono_font.s index 3c828544a..d07266989 100644 --- a/libsrc/atari7800/mono_font.s +++ b/libsrc/atari7800/mono_font.s @@ -1,2052 +1,2052 @@ - .export _mono_font - .segment "RODATA" - .align 256 + .export _mono_font + .segment "RODATA" + .align 256 _mono_font: - .byte $00 - .byte $7e - .byte $7e - .byte $00 - .byte $00 - .byte $7c - .byte $7c - .byte $00 - .byte $ff - .byte $00 - .byte $ff - .byte $78 - .byte $18 - .byte $e0 - .byte $c0 - .byte $99 - .byte $00 - .byte $00 - .byte $18 - .byte $00 - .byte $00 - .byte $78 - .byte $00 - .byte $ff - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $60 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $60 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $ff - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $f8 - .byte $00 - .byte $00 - .byte $78 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $f0 - .byte $1e - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $f8 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $78 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $38 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $f8 - .byte $00 - .byte $00 - .byte $18 - .byte $00 - .byte $30 - .byte $c7 - .byte $70 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $0f - .byte $03 - .byte $00 - .byte $00 - .byte $00 - .byte $88 - .byte $aa - .byte $ee - .byte $18 - .byte $18 - .byte $18 - .byte $36 - .byte $36 - .byte $18 - .byte $36 - .byte $36 - .byte $36 - .byte $00 - .byte $00 - .byte $00 - .byte $18 - .byte $00 - .byte $00 - .byte $18 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $36 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $00 - .byte $18 - .byte $36 - .byte $00 - .byte $00 - .byte $18 - .byte $36 - .byte $36 - .byte $18 - .byte $00 - .byte $18 - .byte $ff - .byte $ff - .byte $f0 - .byte $0f - .byte $00 - .byte $00 - .byte $c0 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $c0 - .byte $00 - .byte $fc - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $c0 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $18 - .byte $70 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $1c - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $81 - .byte $ff - .byte $10 - .byte $10 - .byte $38 - .byte $38 - .byte $00 - .byte $ff - .byte $3c - .byte $c3 - .byte $cc - .byte $7e - .byte $f0 - .byte $e6 - .byte $5a - .byte $80 - .byte $02 - .byte $3c - .byte $66 - .byte $1b - .byte $cc - .byte $7e - .byte $18 - .byte $18 - .byte $18 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $30 - .byte $00 - .byte $6c - .byte $30 - .byte $c6 - .byte $76 - .byte $00 - .byte $18 - .byte $60 - .byte $00 - .byte $00 - .byte $30 - .byte $00 - .byte $30 - .byte $80 - .byte $7c - .byte $fc - .byte $fc - .byte $78 - .byte $1e - .byte $78 - .byte $78 - .byte $30 - .byte $78 - .byte $70 - .byte $30 - .byte $30 - .byte $18 - .byte $00 - .byte $60 - .byte $30 - .byte $78 - .byte $cc - .byte $fc - .byte $3c - .byte $f8 - .byte $fe - .byte $f0 - .byte $3e - .byte $cc - .byte $78 - .byte $78 - .byte $e6 - .byte $fe - .byte $c6 - .byte $c6 - .byte $38 - .byte $f0 - .byte $1c - .byte $e6 - .byte $78 - .byte $78 - .byte $fc - .byte $30 - .byte $c6 - .byte $c6 - .byte $78 - .byte $fe - .byte $78 - .byte $02 - .byte $78 - .byte $00 - .byte $00 - .byte $00 - .byte $76 - .byte $dc - .byte $78 - .byte $76 - .byte $78 - .byte $f0 - .byte $0c - .byte $e6 - .byte $78 - .byte $cc - .byte $e6 - .byte $78 - .byte $c6 - .byte $cc - .byte $78 - .byte $60 - .byte $0c - .byte $f0 - .byte $f8 - .byte $18 - .byte $76 - .byte $30 - .byte $6c - .byte $c6 - .byte $0c - .byte $fc - .byte $1c - .byte $18 - .byte $e0 - .byte $00 - .byte $fe - .byte $0c - .byte $7e - .byte $78 - .byte $3f - .byte $7e - .byte $7e - .byte $7e - .byte $0c - .byte $3c - .byte $78 - .byte $78 - .byte $78 - .byte $3c - .byte $78 - .byte $c6 - .byte $cc - .byte $fc - .byte $7f - .byte $ce - .byte $78 - .byte $78 - .byte $78 - .byte $7e - .byte $7e - .byte $0c - .byte $18 - .byte $78 - .byte $18 - .byte $fc - .byte $30 - .byte $c6 - .byte $d8 - .byte $7e - .byte $78 - .byte $78 - .byte $7e - .byte $cc - .byte $cc - .byte $00 - .byte $00 - .byte $78 - .byte $00 - .byte $00 - .byte $cc - .byte $cf - .byte $18 - .byte $00 - .byte $00 - .byte $22 - .byte $55 - .byte $db - .byte $18 - .byte $18 - .byte $18 - .byte $36 - .byte $36 - .byte $18 - .byte $36 - .byte $36 - .byte $36 - .byte $00 - .byte $00 - .byte $00 - .byte $18 - .byte $00 - .byte $00 - .byte $18 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $36 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $00 - .byte $18 - .byte $36 - .byte $00 - .byte $00 - .byte $18 - .byte $36 - .byte $36 - .byte $18 - .byte $00 - .byte $18 - .byte $ff - .byte $ff - .byte $f0 - .byte $0f - .byte $00 - .byte $76 - .byte $c0 - .byte $c0 - .byte $6c - .byte $fc - .byte $70 - .byte $60 - .byte $18 - .byte $30 - .byte $38 - .byte $ee - .byte $78 - .byte $00 - .byte $60 - .byte $38 - .byte $cc - .byte $00 - .byte $fc - .byte $fc - .byte $fc - .byte $18 - .byte $d8 - .byte $30 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $3c - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $99 - .byte $e7 - .byte $38 - .byte $38 - .byte $7c - .byte $7c - .byte $18 - .byte $e7 - .byte $66 - .byte $99 - .byte $cc - .byte $18 - .byte $70 - .byte $67 - .byte $3c - .byte $e0 - .byte $0e - .byte $7e - .byte $00 - .byte $1b - .byte $38 - .byte $7e - .byte $3c - .byte $18 - .byte $3c - .byte $18 - .byte $30 - .byte $fe - .byte $24 - .byte $ff - .byte $18 - .byte $00 - .byte $00 - .byte $00 - .byte $6c - .byte $f8 - .byte $66 - .byte $cc - .byte $00 - .byte $30 - .byte $30 - .byte $66 - .byte $30 - .byte $30 - .byte $00 - .byte $30 - .byte $c0 - .byte $e6 - .byte $30 - .byte $cc - .byte $cc - .byte $0c - .byte $cc - .byte $cc - .byte $30 - .byte $cc - .byte $18 - .byte $30 - .byte $30 - .byte $30 - .byte $fc - .byte $30 - .byte $00 - .byte $c0 - .byte $cc - .byte $66 - .byte $66 - .byte $6c - .byte $62 - .byte $60 - .byte $66 - .byte $cc - .byte $30 - .byte $cc - .byte $66 - .byte $66 - .byte $c6 - .byte $c6 - .byte $6c - .byte $60 - .byte $78 - .byte $66 - .byte $cc - .byte $30 - .byte $cc - .byte $78 - .byte $ee - .byte $6c - .byte $30 - .byte $66 - .byte $60 - .byte $06 - .byte $18 - .byte $00 - .byte $00 - .byte $00 - .byte $cc - .byte $66 - .byte $cc - .byte $cc - .byte $c0 - .byte $60 - .byte $7c - .byte $66 - .byte $30 - .byte $cc - .byte $6c - .byte $30 - .byte $d6 - .byte $cc - .byte $cc - .byte $7c - .byte $7c - .byte $60 - .byte $0c - .byte $34 - .byte $cc - .byte $78 - .byte $fe - .byte $6c - .byte $7c - .byte $64 - .byte $30 - .byte $18 - .byte $30 - .byte $00 - .byte $c6 - .byte $18 - .byte $cc - .byte $c0 - .byte $66 - .byte $cc - .byte $cc - .byte $cc - .byte $78 - .byte $60 - .byte $c0 - .byte $c0 - .byte $30 - .byte $18 - .byte $30 - .byte $c6 - .byte $fc - .byte $60 - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $7c - .byte $3c - .byte $cc - .byte $7e - .byte $e6 - .byte $fc - .byte $cf - .byte $18 - .byte $cc - .byte $30 - .byte $cc - .byte $cc - .byte $cc - .byte $dc - .byte $7e - .byte $7c - .byte $cc - .byte $c0 - .byte $0c - .byte $66 - .byte $6f - .byte $18 - .byte $33 - .byte $cc - .byte $88 - .byte $aa - .byte $77 - .byte $18 - .byte $18 - .byte $18 - .byte $36 - .byte $36 - .byte $18 - .byte $36 - .byte $36 - .byte $36 - .byte $00 - .byte $00 - .byte $00 - .byte $18 - .byte $00 - .byte $00 - .byte $18 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $36 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $00 - .byte $18 - .byte $36 - .byte $00 - .byte $00 - .byte $18 - .byte $36 - .byte $36 - .byte $18 - .byte $00 - .byte $18 - .byte $ff - .byte $ff - .byte $f0 - .byte $0f - .byte $00 - .byte $dc - .byte $f8 - .byte $c0 - .byte $6c - .byte $cc - .byte $d8 - .byte $7c - .byte $18 - .byte $78 - .byte $6c - .byte $6c - .byte $cc - .byte $7e - .byte $7e - .byte $60 - .byte $cc - .byte $fc - .byte $00 - .byte $00 - .byte $00 - .byte $18 - .byte $d8 - .byte $30 - .byte $dc - .byte $00 - .byte $00 - .byte $00 - .byte $6c - .byte $00 - .byte $00 - .byte $3c - .byte $00 - .byte $00 - .byte $bd - .byte $c3 - .byte $7c - .byte $7c - .byte $fe - .byte $fe - .byte $3c - .byte $c3 - .byte $42 - .byte $bd - .byte $cc - .byte $3c - .byte $30 - .byte $63 - .byte $e7 - .byte $f8 - .byte $3e - .byte $18 - .byte $66 - .byte $1b - .byte $6c - .byte $7e - .byte $7e - .byte $18 - .byte $7e - .byte $0c - .byte $60 - .byte $c0 - .byte $66 - .byte $ff - .byte $3c - .byte $00 - .byte $30 - .byte $00 - .byte $fe - .byte $0c - .byte $30 - .byte $dc - .byte $00 - .byte $60 - .byte $18 - .byte $3c - .byte $30 - .byte $00 - .byte $00 - .byte $00 - .byte $60 - .byte $f6 - .byte $30 - .byte $60 - .byte $0c - .byte $fe - .byte $0c - .byte $cc - .byte $30 - .byte $cc - .byte $0c - .byte $00 - .byte $00 - .byte $60 - .byte $00 - .byte $18 - .byte $30 - .byte $de - .byte $fc - .byte $66 - .byte $c0 - .byte $66 - .byte $68 - .byte $68 - .byte $ce - .byte $cc - .byte $30 - .byte $cc - .byte $6c - .byte $62 - .byte $d6 - .byte $ce - .byte $c6 - .byte $60 - .byte $dc - .byte $6c - .byte $1c - .byte $30 - .byte $cc - .byte $cc - .byte $fe - .byte $38 - .byte $30 - .byte $32 - .byte $60 - .byte $0c - .byte $18 - .byte $00 - .byte $00 - .byte $00 - .byte $7c - .byte $66 - .byte $c0 - .byte $cc - .byte $fc - .byte $60 - .byte $cc - .byte $66 - .byte $30 - .byte $0c - .byte $78 - .byte $30 - .byte $fe - .byte $cc - .byte $cc - .byte $66 - .byte $cc - .byte $66 - .byte $78 - .byte $30 - .byte $cc - .byte $cc - .byte $fe - .byte $38 - .byte $cc - .byte $30 - .byte $30 - .byte $18 - .byte $30 - .byte $00 - .byte $c6 - .byte $78 - .byte $cc - .byte $fc - .byte $3e - .byte $7c - .byte $7c - .byte $7c - .byte $c0 - .byte $7e - .byte $fc - .byte $fc - .byte $30 - .byte $18 - .byte $30 - .byte $fe - .byte $cc - .byte $78 - .byte $7f - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $cc - .byte $66 - .byte $cc - .byte $c0 - .byte $60 - .byte $30 - .byte $c6 - .byte $18 - .byte $7c - .byte $30 - .byte $cc - .byte $cc - .byte $cc - .byte $fc - .byte $00 - .byte $00 - .byte $c0 - .byte $c0 - .byte $0c - .byte $33 - .byte $37 - .byte $18 - .byte $66 - .byte $66 - .byte $22 - .byte $55 - .byte $db - .byte $18 - .byte $f8 - .byte $f8 - .byte $f6 - .byte $fe - .byte $f8 - .byte $f6 - .byte $36 - .byte $f6 - .byte $fe - .byte $fe - .byte $f8 - .byte $f8 - .byte $1f - .byte $ff - .byte $ff - .byte $1f - .byte $ff - .byte $ff - .byte $1f - .byte $37 - .byte $3f - .byte $37 - .byte $ff - .byte $f7 - .byte $37 - .byte $ff - .byte $f7 - .byte $ff - .byte $ff - .byte $ff - .byte $ff - .byte $3f - .byte $1f - .byte $1f - .byte $3f - .byte $ff - .byte $ff - .byte $f8 - .byte $1f - .byte $ff - .byte $ff - .byte $f0 - .byte $0f - .byte $00 - .byte $c8 - .byte $cc - .byte $c0 - .byte $6c - .byte $60 - .byte $d8 - .byte $66 - .byte $18 - .byte $cc - .byte $c6 - .byte $6c - .byte $cc - .byte $db - .byte $db - .byte $c0 - .byte $cc - .byte $00 - .byte $30 - .byte $60 - .byte $18 - .byte $18 - .byte $18 - .byte $00 - .byte $76 - .byte $00 - .byte $18 - .byte $18 - .byte $ec - .byte $6c - .byte $78 - .byte $3c - .byte $00 - .byte $00 - .byte $81 - .byte $ff - .byte $fe - .byte $fe - .byte $fe - .byte $7c - .byte $3c - .byte $c3 - .byte $42 - .byte $bd - .byte $7d - .byte $66 - .byte $30 - .byte $63 - .byte $e7 - .byte $fe - .byte $fe - .byte $18 - .byte $66 - .byte $7b - .byte $6c - .byte $00 - .byte $18 - .byte $18 - .byte $18 - .byte $fe - .byte $fe - .byte $c0 - .byte $ff - .byte $7e - .byte $7e - .byte $00 - .byte $30 - .byte $00 - .byte $6c - .byte $78 - .byte $18 - .byte $76 - .byte $00 - .byte $60 - .byte $18 - .byte $ff - .byte $fc - .byte $00 - .byte $fc - .byte $00 - .byte $30 - .byte $de - .byte $30 - .byte $38 - .byte $38 - .byte $cc - .byte $0c - .byte $f8 - .byte $18 - .byte $78 - .byte $7c - .byte $00 - .byte $00 - .byte $c0 - .byte $00 - .byte $0c - .byte $18 - .byte $de - .byte $cc - .byte $7c - .byte $c0 - .byte $66 - .byte $78 - .byte $78 - .byte $c0 - .byte $fc - .byte $30 - .byte $0c - .byte $78 - .byte $60 - .byte $fe - .byte $de - .byte $c6 - .byte $7c - .byte $cc - .byte $7c - .byte $70 - .byte $30 - .byte $cc - .byte $cc - .byte $d6 - .byte $38 - .byte $78 - .byte $18 - .byte $60 - .byte $18 - .byte $18 - .byte $c6 - .byte $00 - .byte $00 - .byte $0c - .byte $7c - .byte $cc - .byte $7c - .byte $cc - .byte $f0 - .byte $cc - .byte $76 - .byte $30 - .byte $0c - .byte $6c - .byte $30 - .byte $fe - .byte $cc - .byte $cc - .byte $66 - .byte $cc - .byte $76 - .byte $c0 - .byte $30 - .byte $cc - .byte $cc - .byte $d6 - .byte $6c - .byte $cc - .byte $98 - .byte $e0 - .byte $00 - .byte $1c - .byte $00 - .byte $6c - .byte $cc - .byte $cc - .byte $cc - .byte $06 - .byte $0c - .byte $0c - .byte $0c - .byte $c0 - .byte $66 - .byte $cc - .byte $cc - .byte $30 - .byte $18 - .byte $30 - .byte $c6 - .byte $78 - .byte $60 - .byte $0c - .byte $fe - .byte $78 - .byte $78 - .byte $78 - .byte $cc - .byte $cc - .byte $cc - .byte $66 - .byte $cc - .byte $c0 - .byte $f0 - .byte $fc - .byte $fa - .byte $3c - .byte $0c - .byte $30 - .byte $78 - .byte $cc - .byte $f8 - .byte $ec - .byte $3e - .byte $38 - .byte $60 - .byte $fc - .byte $fc - .byte $de - .byte $db - .byte $18 - .byte $cc - .byte $33 - .byte $88 - .byte $aa - .byte $ee - .byte $18 - .byte $18 - .byte $18 - .byte $36 - .byte $00 - .byte $18 - .byte $06 - .byte $36 - .byte $06 - .byte $06 - .byte $36 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $00 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $36 - .byte $30 - .byte $30 - .byte $00 - .byte $00 - .byte $30 - .byte $00 - .byte $00 - .byte $00 - .byte $36 - .byte $00 - .byte $00 - .byte $36 - .byte $18 - .byte $18 - .byte $00 - .byte $36 - .byte $18 - .byte $18 - .byte $00 - .byte $ff - .byte $00 - .byte $f0 - .byte $0f - .byte $ff - .byte $dc - .byte $f8 - .byte $c0 - .byte $6c - .byte $30 - .byte $d8 - .byte $66 - .byte $18 - .byte $cc - .byte $fe - .byte $c6 - .byte $7c - .byte $db - .byte $db - .byte $f8 - .byte $cc - .byte $fc - .byte $30 - .byte $30 - .byte $30 - .byte $18 - .byte $18 - .byte $fc - .byte $00 - .byte $38 - .byte $18 - .byte $00 - .byte $0c - .byte $6c - .byte $60 - .byte $3c - .byte $00 - .byte $00 - .byte $a5 - .byte $db - .byte $fe - .byte $7c - .byte $38 - .byte $38 - .byte $18 - .byte $e7 - .byte $66 - .byte $99 - .byte $0f - .byte $66 - .byte $3f - .byte $7f - .byte $3c - .byte $f8 - .byte $3e - .byte $7e - .byte $66 - .byte $db - .byte $38 - .byte $00 - .byte $7e - .byte $7e - .byte $18 - .byte $0c - .byte $60 - .byte $c0 - .byte $66 - .byte $3c - .byte $ff - .byte $00 - .byte $78 - .byte $6c - .byte $fe - .byte $c0 - .byte $cc - .byte $38 - .byte $c0 - .byte $60 - .byte $18 - .byte $3c - .byte $30 - .byte $00 - .byte $00 - .byte $00 - .byte $18 - .byte $ce - .byte $30 - .byte $0c - .byte $0c - .byte $6c - .byte $f8 - .byte $c0 - .byte $0c - .byte $cc - .byte $cc - .byte $30 - .byte $30 - .byte $60 - .byte $fc - .byte $18 - .byte $0c - .byte $de - .byte $cc - .byte $66 - .byte $c0 - .byte $66 - .byte $68 - .byte $68 - .byte $c0 - .byte $cc - .byte $30 - .byte $0c - .byte $6c - .byte $60 - .byte $fe - .byte $f6 - .byte $c6 - .byte $66 - .byte $cc - .byte $66 - .byte $e0 - .byte $30 - .byte $cc - .byte $cc - .byte $c6 - .byte $6c - .byte $cc - .byte $8c - .byte $60 - .byte $30 - .byte $18 - .byte $6c - .byte $00 - .byte $18 - .byte $78 - .byte $60 - .byte $78 - .byte $0c - .byte $78 - .byte $60 - .byte $76 - .byte $6c - .byte $70 - .byte $0c - .byte $66 - .byte $30 - .byte $cc - .byte $f8 - .byte $78 - .byte $dc - .byte $76 - .byte $dc - .byte $7c - .byte $7c - .byte $cc - .byte $cc - .byte $c6 - .byte $c6 - .byte $cc - .byte $fc - .byte $30 - .byte $18 - .byte $30 - .byte $00 - .byte $38 - .byte $c0 - .byte $00 - .byte $78 - .byte $3c - .byte $78 - .byte $78 - .byte $78 - .byte $78 - .byte $3c - .byte $78 - .byte $78 - .byte $70 - .byte $38 - .byte $70 - .byte $6c - .byte $00 - .byte $fc - .byte $7f - .byte $cc - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $3c - .byte $cc - .byte $7e - .byte $64 - .byte $78 - .byte $cc - .byte $18 - .byte $78 - .byte $70 - .byte $00 - .byte $00 - .byte $00 - .byte $cc - .byte $6c - .byte $6c - .byte $30 - .byte $00 - .byte $00 - .byte $cc - .byte $cc - .byte $00 - .byte $66 - .byte $66 - .byte $22 - .byte $55 - .byte $db - .byte $18 - .byte $18 - .byte $f8 - .byte $36 - .byte $00 - .byte $f8 - .byte $f6 - .byte $36 - .byte $fe - .byte $f6 - .byte $36 - .byte $f8 - .byte $00 - .byte $18 - .byte $18 - .byte $00 - .byte $18 - .byte $00 - .byte $18 - .byte $1f - .byte $36 - .byte $37 - .byte $3f - .byte $f7 - .byte $ff - .byte $37 - .byte $ff - .byte $f7 - .byte $ff - .byte $36 - .byte $ff - .byte $00 - .byte $36 - .byte $1f - .byte $1f - .byte $00 - .byte $36 - .byte $ff - .byte $18 - .byte $00 - .byte $ff - .byte $00 - .byte $f0 - .byte $0f - .byte $ff - .byte $76 - .byte $cc - .byte $cc - .byte $6c - .byte $60 - .byte $7e - .byte $66 - .byte $dc - .byte $78 - .byte $c6 - .byte $c6 - .byte $18 - .byte $7e - .byte $7e - .byte $c0 - .byte $cc - .byte $00 - .byte $fc - .byte $18 - .byte $60 - .byte $1b - .byte $18 - .byte $00 - .byte $dc - .byte $6c - .byte $00 - .byte $00 - .byte $0c - .byte $6c - .byte $30 - .byte $3c - .byte $00 - .byte $00 - .byte $81 - .byte $ff - .byte $fe - .byte $38 - .byte $7c - .byte $10 - .byte $00 - .byte $ff - .byte $3c - .byte $c3 - .byte $07 - .byte $66 - .byte $33 - .byte $63 - .byte $5a - .byte $e0 - .byte $0e - .byte $3c - .byte $66 - .byte $db - .byte $63 - .byte $00 - .byte $3c - .byte $3c - .byte $18 - .byte $18 - .byte $30 - .byte $00 - .byte $24 - .byte $18 - .byte $ff - .byte $00 - .byte $78 - .byte $6c - .byte $6c - .byte $7c - .byte $c6 - .byte $6c - .byte $60 - .byte $30 - .byte $30 - .byte $66 - .byte $30 - .byte $00 - .byte $00 - .byte $00 - .byte $0c - .byte $c6 - .byte $70 - .byte $cc - .byte $cc - .byte $3c - .byte $c0 - .byte $60 - .byte $cc - .byte $cc - .byte $cc - .byte $30 - .byte $30 - .byte $30 - .byte $00 - .byte $30 - .byte $cc - .byte $c6 - .byte $78 - .byte $66 - .byte $66 - .byte $6c - .byte $62 - .byte $62 - .byte $66 - .byte $cc - .byte $30 - .byte $0c - .byte $66 - .byte $60 - .byte $ee - .byte $e6 - .byte $6c - .byte $66 - .byte $cc - .byte $66 - .byte $cc - .byte $b4 - .byte $cc - .byte $cc - .byte $c6 - .byte $c6 - .byte $cc - .byte $c6 - .byte $60 - .byte $60 - .byte $18 - .byte $38 - .byte $00 - .byte $30 - .byte $00 - .byte $60 - .byte $00 - .byte $0c - .byte $00 - .byte $6c - .byte $00 - .byte $60 - .byte $00 - .byte $00 - .byte $60 - .byte $30 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $30 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $30 - .byte $18 - .byte $30 - .byte $dc - .byte $10 - .byte $cc - .byte $cc - .byte $00 - .byte $c3 - .byte $00 - .byte $00 - .byte $30 - .byte $00 - .byte $c3 - .byte $00 - .byte $00 - .byte $00 - .byte $c6 - .byte $00 - .byte $38 - .byte $30 - .byte $00 - .byte $00 - .byte $6c - .byte $cc - .byte $cc - .byte $e0 - .byte $cc - .byte $e0 - .byte $cc - .byte $18 - .byte $00 - .byte $18 - .byte $6c - .byte $cc - .byte $cc - .byte $1b - .byte $00 - .byte $00 - .byte $1c - .byte $1c - .byte $f8 - .byte $00 - .byte $6c - .byte $6c - .byte $00 - .byte $00 - .byte $00 - .byte $c6 - .byte $c6 - .byte $18 - .byte $33 - .byte $cc - .byte $88 - .byte $aa - .byte $77 - .byte $18 - .byte $18 - .byte $18 - .byte $36 - .byte $00 - .byte $00 - .byte $36 - .byte $36 - .byte $00 - .byte $36 - .byte $36 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $00 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $36 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $36 - .byte $18 - .byte $36 - .byte $00 - .byte $00 - .byte $36 - .byte $18 - .byte $00 - .byte $00 - .byte $36 - .byte $18 - .byte $18 - .byte $00 - .byte $ff - .byte $00 - .byte $f0 - .byte $0f - .byte $ff - .byte $00 - .byte $78 - .byte $fc - .byte $fe - .byte $cc - .byte $00 - .byte $66 - .byte $76 - .byte $30 - .byte $6c - .byte $6c - .byte $30 - .byte $00 - .byte $0c - .byte $60 - .byte $cc - .byte $fc - .byte $30 - .byte $30 - .byte $30 - .byte $1b - .byte $18 - .byte $30 - .byte $76 - .byte $6c - .byte $00 - .byte $00 - .byte $0c - .byte $6c - .byte $18 - .byte $00 - .byte $00 - .byte $00 - .byte $7e - .byte $7e - .byte $6c - .byte $10 - .byte $38 - .byte $10 - .byte $00 - .byte $ff - .byte $00 - .byte $ff - .byte $0f - .byte $3c - .byte $3f - .byte $7f - .byte $99 - .byte $80 - .byte $02 - .byte $18 - .byte $66 - .byte $7f - .byte $3e - .byte $00 - .byte $18 - .byte $18 - .byte $18 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $30 - .byte $6c - .byte $6c - .byte $30 - .byte $00 - .byte $38 - .byte $60 - .byte $18 - .byte $60 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $06 - .byte $7c - .byte $30 - .byte $78 - .byte $78 - .byte $1c - .byte $fc - .byte $38 - .byte $fc - .byte $78 - .byte $78 - .byte $00 - .byte $00 - .byte $18 - .byte $00 - .byte $60 - .byte $78 - .byte $7c - .byte $30 - .byte $fc - .byte $3c - .byte $f8 - .byte $fe - .byte $fe - .byte $3c - .byte $cc - .byte $78 - .byte $1e - .byte $e6 - .byte $f0 - .byte $c6 - .byte $c6 - .byte $38 - .byte $fc - .byte $78 - .byte $fc - .byte $78 - .byte $fc - .byte $cc - .byte $cc - .byte $c6 - .byte $c6 - .byte $cc - .byte $fe - .byte $78 - .byte $c0 - .byte $78 - .byte $10 - .byte $00 - .byte $30 - .byte $00 - .byte $e0 - .byte $00 - .byte $1c - .byte $00 - .byte $38 - .byte $00 - .byte $e0 - .byte $30 - .byte $0c - .byte $e0 - .byte $70 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $10 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $1c - .byte $18 - .byte $e0 - .byte $76 - .byte $00 - .byte $78 - .byte $00 - .byte $1c - .byte $7e - .byte $cc - .byte $e0 - .byte $30 - .byte $00 - .byte $7e - .byte $cc - .byte $e0 - .byte $cc - .byte $7c - .byte $e0 - .byte $c6 - .byte $30 - .byte $1c - .byte $00 - .byte $3e - .byte $78 - .byte $00 - .byte $00 - .byte $78 - .byte $00 - .byte $00 - .byte $c3 - .byte $cc - .byte $18 - .byte $38 - .byte $cc - .byte $f8 - .byte $0e - .byte $1c - .byte $38 - .byte $00 - .byte $00 - .byte $00 - .byte $fc - .byte $3c - .byte $38 - .byte $30 - .byte $00 - .byte $00 - .byte $c3 - .byte $c3 - .byte $18 - .byte $00 - .byte $00 - .byte $22 - .byte $55 - .byte $db - .byte $18 - .byte $18 - .byte $18 - .byte $36 - .byte $00 - .byte $00 - .byte $36 - .byte $36 - .byte $00 - .byte $36 - .byte $36 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $00 - .byte $18 - .byte $00 - .byte $18 - .byte $18 - .byte $36 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $36 - .byte $00 - .byte $36 - .byte $18 - .byte $36 - .byte $00 - .byte $00 - .byte $36 - .byte $18 - .byte $00 - .byte $00 - .byte $36 - .byte $18 - .byte $18 - .byte $00 - .byte $ff - .byte $00 - .byte $f0 - .byte $0f - .byte $ff - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .byte $fc - .byte $00 - .byte $00 - .byte $00 - .byte $fc - .byte $38 - .byte $38 - .byte $1c - .byte $00 - .byte $06 - .byte $38 - .byte $78 - .byte $00 - .byte $30 - .byte $60 - .byte $18 - .byte $0e - .byte $18 - .byte $30 - .byte $00 - .byte $38 - .byte $00 - .byte $00 - .byte $0f - .byte $78 - .byte $70 - .byte $00 - .byte $00 + .byte $00 + .byte $7e + .byte $7e + .byte $00 + .byte $00 + .byte $7c + .byte $7c + .byte $00 + .byte $ff + .byte $00 + .byte $ff + .byte $78 + .byte $18 + .byte $e0 + .byte $c0 + .byte $99 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $ff + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $60 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $60 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $ff + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f8 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f0 + .byte $1e + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f8 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $38 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $f8 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $30 + .byte $c7 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $0f + .byte $03 + .byte $00 + .byte $00 + .byte $00 + .byte $88 + .byte $aa + .byte $ee + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $36 + .byte $36 + .byte $36 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $fc + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $1c + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $81 + .byte $ff + .byte $10 + .byte $10 + .byte $38 + .byte $38 + .byte $00 + .byte $ff + .byte $3c + .byte $c3 + .byte $cc + .byte $7e + .byte $f0 + .byte $e6 + .byte $5a + .byte $80 + .byte $02 + .byte $3c + .byte $66 + .byte $1b + .byte $cc + .byte $7e + .byte $18 + .byte $18 + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $6c + .byte $30 + .byte $c6 + .byte $76 + .byte $00 + .byte $18 + .byte $60 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $30 + .byte $80 + .byte $7c + .byte $fc + .byte $fc + .byte $78 + .byte $1e + .byte $78 + .byte $78 + .byte $30 + .byte $78 + .byte $70 + .byte $30 + .byte $30 + .byte $18 + .byte $00 + .byte $60 + .byte $30 + .byte $78 + .byte $cc + .byte $fc + .byte $3c + .byte $f8 + .byte $fe + .byte $f0 + .byte $3e + .byte $cc + .byte $78 + .byte $78 + .byte $e6 + .byte $fe + .byte $c6 + .byte $c6 + .byte $38 + .byte $f0 + .byte $1c + .byte $e6 + .byte $78 + .byte $78 + .byte $fc + .byte $30 + .byte $c6 + .byte $c6 + .byte $78 + .byte $fe + .byte $78 + .byte $02 + .byte $78 + .byte $00 + .byte $00 + .byte $00 + .byte $76 + .byte $dc + .byte $78 + .byte $76 + .byte $78 + .byte $f0 + .byte $0c + .byte $e6 + .byte $78 + .byte $cc + .byte $e6 + .byte $78 + .byte $c6 + .byte $cc + .byte $78 + .byte $60 + .byte $0c + .byte $f0 + .byte $f8 + .byte $18 + .byte $76 + .byte $30 + .byte $6c + .byte $c6 + .byte $0c + .byte $fc + .byte $1c + .byte $18 + .byte $e0 + .byte $00 + .byte $fe + .byte $0c + .byte $7e + .byte $78 + .byte $3f + .byte $7e + .byte $7e + .byte $7e + .byte $0c + .byte $3c + .byte $78 + .byte $78 + .byte $78 + .byte $3c + .byte $78 + .byte $c6 + .byte $cc + .byte $fc + .byte $7f + .byte $ce + .byte $78 + .byte $78 + .byte $78 + .byte $7e + .byte $7e + .byte $0c + .byte $18 + .byte $78 + .byte $18 + .byte $fc + .byte $30 + .byte $c6 + .byte $d8 + .byte $7e + .byte $78 + .byte $78 + .byte $7e + .byte $cc + .byte $cc + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $cc + .byte $cf + .byte $18 + .byte $00 + .byte $00 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $36 + .byte $36 + .byte $36 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $76 + .byte $c0 + .byte $c0 + .byte $6c + .byte $fc + .byte $70 + .byte $60 + .byte $18 + .byte $30 + .byte $38 + .byte $ee + .byte $78 + .byte $00 + .byte $60 + .byte $38 + .byte $cc + .byte $00 + .byte $fc + .byte $fc + .byte $fc + .byte $18 + .byte $d8 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $3c + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $99 + .byte $e7 + .byte $38 + .byte $38 + .byte $7c + .byte $7c + .byte $18 + .byte $e7 + .byte $66 + .byte $99 + .byte $cc + .byte $18 + .byte $70 + .byte $67 + .byte $3c + .byte $e0 + .byte $0e + .byte $7e + .byte $00 + .byte $1b + .byte $38 + .byte $7e + .byte $3c + .byte $18 + .byte $3c + .byte $18 + .byte $30 + .byte $fe + .byte $24 + .byte $ff + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $6c + .byte $f8 + .byte $66 + .byte $cc + .byte $00 + .byte $30 + .byte $30 + .byte $66 + .byte $30 + .byte $30 + .byte $00 + .byte $30 + .byte $c0 + .byte $e6 + .byte $30 + .byte $cc + .byte $cc + .byte $0c + .byte $cc + .byte $cc + .byte $30 + .byte $cc + .byte $18 + .byte $30 + .byte $30 + .byte $30 + .byte $fc + .byte $30 + .byte $00 + .byte $c0 + .byte $cc + .byte $66 + .byte $66 + .byte $6c + .byte $62 + .byte $60 + .byte $66 + .byte $cc + .byte $30 + .byte $cc + .byte $66 + .byte $66 + .byte $c6 + .byte $c6 + .byte $6c + .byte $60 + .byte $78 + .byte $66 + .byte $cc + .byte $30 + .byte $cc + .byte $78 + .byte $ee + .byte $6c + .byte $30 + .byte $66 + .byte $60 + .byte $06 + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $cc + .byte $66 + .byte $cc + .byte $cc + .byte $c0 + .byte $60 + .byte $7c + .byte $66 + .byte $30 + .byte $cc + .byte $6c + .byte $30 + .byte $d6 + .byte $cc + .byte $cc + .byte $7c + .byte $7c + .byte $60 + .byte $0c + .byte $34 + .byte $cc + .byte $78 + .byte $fe + .byte $6c + .byte $7c + .byte $64 + .byte $30 + .byte $18 + .byte $30 + .byte $00 + .byte $c6 + .byte $18 + .byte $cc + .byte $c0 + .byte $66 + .byte $cc + .byte $cc + .byte $cc + .byte $78 + .byte $60 + .byte $c0 + .byte $c0 + .byte $30 + .byte $18 + .byte $30 + .byte $c6 + .byte $fc + .byte $60 + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $7c + .byte $3c + .byte $cc + .byte $7e + .byte $e6 + .byte $fc + .byte $cf + .byte $18 + .byte $cc + .byte $30 + .byte $cc + .byte $cc + .byte $cc + .byte $dc + .byte $7e + .byte $7c + .byte $cc + .byte $c0 + .byte $0c + .byte $66 + .byte $6f + .byte $18 + .byte $33 + .byte $cc + .byte $88 + .byte $aa + .byte $77 + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $36 + .byte $36 + .byte $36 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $18 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $dc + .byte $f8 + .byte $c0 + .byte $6c + .byte $cc + .byte $d8 + .byte $7c + .byte $18 + .byte $78 + .byte $6c + .byte $6c + .byte $cc + .byte $7e + .byte $7e + .byte $60 + .byte $cc + .byte $fc + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $d8 + .byte $30 + .byte $dc + .byte $00 + .byte $00 + .byte $00 + .byte $6c + .byte $00 + .byte $00 + .byte $3c + .byte $00 + .byte $00 + .byte $bd + .byte $c3 + .byte $7c + .byte $7c + .byte $fe + .byte $fe + .byte $3c + .byte $c3 + .byte $42 + .byte $bd + .byte $cc + .byte $3c + .byte $30 + .byte $63 + .byte $e7 + .byte $f8 + .byte $3e + .byte $18 + .byte $66 + .byte $1b + .byte $6c + .byte $7e + .byte $7e + .byte $18 + .byte $7e + .byte $0c + .byte $60 + .byte $c0 + .byte $66 + .byte $ff + .byte $3c + .byte $00 + .byte $30 + .byte $00 + .byte $fe + .byte $0c + .byte $30 + .byte $dc + .byte $00 + .byte $60 + .byte $18 + .byte $3c + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $60 + .byte $f6 + .byte $30 + .byte $60 + .byte $0c + .byte $fe + .byte $0c + .byte $cc + .byte $30 + .byte $cc + .byte $0c + .byte $00 + .byte $00 + .byte $60 + .byte $00 + .byte $18 + .byte $30 + .byte $de + .byte $fc + .byte $66 + .byte $c0 + .byte $66 + .byte $68 + .byte $68 + .byte $ce + .byte $cc + .byte $30 + .byte $cc + .byte $6c + .byte $62 + .byte $d6 + .byte $ce + .byte $c6 + .byte $60 + .byte $dc + .byte $6c + .byte $1c + .byte $30 + .byte $cc + .byte $cc + .byte $fe + .byte $38 + .byte $30 + .byte $32 + .byte $60 + .byte $0c + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $7c + .byte $66 + .byte $c0 + .byte $cc + .byte $fc + .byte $60 + .byte $cc + .byte $66 + .byte $30 + .byte $0c + .byte $78 + .byte $30 + .byte $fe + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $66 + .byte $78 + .byte $30 + .byte $cc + .byte $cc + .byte $fe + .byte $38 + .byte $cc + .byte $30 + .byte $30 + .byte $18 + .byte $30 + .byte $00 + .byte $c6 + .byte $78 + .byte $cc + .byte $fc + .byte $3e + .byte $7c + .byte $7c + .byte $7c + .byte $c0 + .byte $7e + .byte $fc + .byte $fc + .byte $30 + .byte $18 + .byte $30 + .byte $fe + .byte $cc + .byte $78 + .byte $7f + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $c0 + .byte $60 + .byte $30 + .byte $c6 + .byte $18 + .byte $7c + .byte $30 + .byte $cc + .byte $cc + .byte $cc + .byte $fc + .byte $00 + .byte $00 + .byte $c0 + .byte $c0 + .byte $0c + .byte $33 + .byte $37 + .byte $18 + .byte $66 + .byte $66 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $f8 + .byte $f8 + .byte $f6 + .byte $fe + .byte $f8 + .byte $f6 + .byte $36 + .byte $f6 + .byte $fe + .byte $fe + .byte $f8 + .byte $f8 + .byte $1f + .byte $ff + .byte $ff + .byte $1f + .byte $ff + .byte $ff + .byte $1f + .byte $37 + .byte $3f + .byte $37 + .byte $ff + .byte $f7 + .byte $37 + .byte $ff + .byte $f7 + .byte $ff + .byte $ff + .byte $ff + .byte $ff + .byte $3f + .byte $1f + .byte $1f + .byte $3f + .byte $ff + .byte $ff + .byte $f8 + .byte $1f + .byte $ff + .byte $ff + .byte $f0 + .byte $0f + .byte $00 + .byte $c8 + .byte $cc + .byte $c0 + .byte $6c + .byte $60 + .byte $d8 + .byte $66 + .byte $18 + .byte $cc + .byte $c6 + .byte $6c + .byte $cc + .byte $db + .byte $db + .byte $c0 + .byte $cc + .byte $00 + .byte $30 + .byte $60 + .byte $18 + .byte $18 + .byte $18 + .byte $00 + .byte $76 + .byte $00 + .byte $18 + .byte $18 + .byte $ec + .byte $6c + .byte $78 + .byte $3c + .byte $00 + .byte $00 + .byte $81 + .byte $ff + .byte $fe + .byte $fe + .byte $fe + .byte $7c + .byte $3c + .byte $c3 + .byte $42 + .byte $bd + .byte $7d + .byte $66 + .byte $30 + .byte $63 + .byte $e7 + .byte $fe + .byte $fe + .byte $18 + .byte $66 + .byte $7b + .byte $6c + .byte $00 + .byte $18 + .byte $18 + .byte $18 + .byte $fe + .byte $fe + .byte $c0 + .byte $ff + .byte $7e + .byte $7e + .byte $00 + .byte $30 + .byte $00 + .byte $6c + .byte $78 + .byte $18 + .byte $76 + .byte $00 + .byte $60 + .byte $18 + .byte $ff + .byte $fc + .byte $00 + .byte $fc + .byte $00 + .byte $30 + .byte $de + .byte $30 + .byte $38 + .byte $38 + .byte $cc + .byte $0c + .byte $f8 + .byte $18 + .byte $78 + .byte $7c + .byte $00 + .byte $00 + .byte $c0 + .byte $00 + .byte $0c + .byte $18 + .byte $de + .byte $cc + .byte $7c + .byte $c0 + .byte $66 + .byte $78 + .byte $78 + .byte $c0 + .byte $fc + .byte $30 + .byte $0c + .byte $78 + .byte $60 + .byte $fe + .byte $de + .byte $c6 + .byte $7c + .byte $cc + .byte $7c + .byte $70 + .byte $30 + .byte $cc + .byte $cc + .byte $d6 + .byte $38 + .byte $78 + .byte $18 + .byte $60 + .byte $18 + .byte $18 + .byte $c6 + .byte $00 + .byte $00 + .byte $0c + .byte $7c + .byte $cc + .byte $7c + .byte $cc + .byte $f0 + .byte $cc + .byte $76 + .byte $30 + .byte $0c + .byte $6c + .byte $30 + .byte $fe + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $76 + .byte $c0 + .byte $30 + .byte $cc + .byte $cc + .byte $d6 + .byte $6c + .byte $cc + .byte $98 + .byte $e0 + .byte $00 + .byte $1c + .byte $00 + .byte $6c + .byte $cc + .byte $cc + .byte $cc + .byte $06 + .byte $0c + .byte $0c + .byte $0c + .byte $c0 + .byte $66 + .byte $cc + .byte $cc + .byte $30 + .byte $18 + .byte $30 + .byte $c6 + .byte $78 + .byte $60 + .byte $0c + .byte $fe + .byte $78 + .byte $78 + .byte $78 + .byte $cc + .byte $cc + .byte $cc + .byte $66 + .byte $cc + .byte $c0 + .byte $f0 + .byte $fc + .byte $fa + .byte $3c + .byte $0c + .byte $30 + .byte $78 + .byte $cc + .byte $f8 + .byte $ec + .byte $3e + .byte $38 + .byte $60 + .byte $fc + .byte $fc + .byte $de + .byte $db + .byte $18 + .byte $cc + .byte $33 + .byte $88 + .byte $aa + .byte $ee + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $18 + .byte $06 + .byte $36 + .byte $06 + .byte $06 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $30 + .byte $30 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $dc + .byte $f8 + .byte $c0 + .byte $6c + .byte $30 + .byte $d8 + .byte $66 + .byte $18 + .byte $cc + .byte $fe + .byte $c6 + .byte $7c + .byte $db + .byte $db + .byte $f8 + .byte $cc + .byte $fc + .byte $30 + .byte $30 + .byte $30 + .byte $18 + .byte $18 + .byte $fc + .byte $00 + .byte $38 + .byte $18 + .byte $00 + .byte $0c + .byte $6c + .byte $60 + .byte $3c + .byte $00 + .byte $00 + .byte $a5 + .byte $db + .byte $fe + .byte $7c + .byte $38 + .byte $38 + .byte $18 + .byte $e7 + .byte $66 + .byte $99 + .byte $0f + .byte $66 + .byte $3f + .byte $7f + .byte $3c + .byte $f8 + .byte $3e + .byte $7e + .byte $66 + .byte $db + .byte $38 + .byte $00 + .byte $7e + .byte $7e + .byte $18 + .byte $0c + .byte $60 + .byte $c0 + .byte $66 + .byte $3c + .byte $ff + .byte $00 + .byte $78 + .byte $6c + .byte $fe + .byte $c0 + .byte $cc + .byte $38 + .byte $c0 + .byte $60 + .byte $18 + .byte $3c + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $18 + .byte $ce + .byte $30 + .byte $0c + .byte $0c + .byte $6c + .byte $f8 + .byte $c0 + .byte $0c + .byte $cc + .byte $cc + .byte $30 + .byte $30 + .byte $60 + .byte $fc + .byte $18 + .byte $0c + .byte $de + .byte $cc + .byte $66 + .byte $c0 + .byte $66 + .byte $68 + .byte $68 + .byte $c0 + .byte $cc + .byte $30 + .byte $0c + .byte $6c + .byte $60 + .byte $fe + .byte $f6 + .byte $c6 + .byte $66 + .byte $cc + .byte $66 + .byte $e0 + .byte $30 + .byte $cc + .byte $cc + .byte $c6 + .byte $6c + .byte $cc + .byte $8c + .byte $60 + .byte $30 + .byte $18 + .byte $6c + .byte $00 + .byte $18 + .byte $78 + .byte $60 + .byte $78 + .byte $0c + .byte $78 + .byte $60 + .byte $76 + .byte $6c + .byte $70 + .byte $0c + .byte $66 + .byte $30 + .byte $cc + .byte $f8 + .byte $78 + .byte $dc + .byte $76 + .byte $dc + .byte $7c + .byte $7c + .byte $cc + .byte $cc + .byte $c6 + .byte $c6 + .byte $cc + .byte $fc + .byte $30 + .byte $18 + .byte $30 + .byte $00 + .byte $38 + .byte $c0 + .byte $00 + .byte $78 + .byte $3c + .byte $78 + .byte $78 + .byte $78 + .byte $78 + .byte $3c + .byte $78 + .byte $78 + .byte $70 + .byte $38 + .byte $70 + .byte $6c + .byte $00 + .byte $fc + .byte $7f + .byte $cc + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $3c + .byte $cc + .byte $7e + .byte $64 + .byte $78 + .byte $cc + .byte $18 + .byte $78 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $cc + .byte $6c + .byte $6c + .byte $30 + .byte $00 + .byte $00 + .byte $cc + .byte $cc + .byte $00 + .byte $66 + .byte $66 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $18 + .byte $f8 + .byte $36 + .byte $00 + .byte $f8 + .byte $f6 + .byte $36 + .byte $fe + .byte $f6 + .byte $36 + .byte $f8 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $1f + .byte $36 + .byte $37 + .byte $3f + .byte $f7 + .byte $ff + .byte $37 + .byte $ff + .byte $f7 + .byte $ff + .byte $36 + .byte $ff + .byte $00 + .byte $36 + .byte $1f + .byte $1f + .byte $00 + .byte $36 + .byte $ff + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $76 + .byte $cc + .byte $cc + .byte $6c + .byte $60 + .byte $7e + .byte $66 + .byte $dc + .byte $78 + .byte $c6 + .byte $c6 + .byte $18 + .byte $7e + .byte $7e + .byte $c0 + .byte $cc + .byte $00 + .byte $fc + .byte $18 + .byte $60 + .byte $1b + .byte $18 + .byte $00 + .byte $dc + .byte $6c + .byte $00 + .byte $00 + .byte $0c + .byte $6c + .byte $30 + .byte $3c + .byte $00 + .byte $00 + .byte $81 + .byte $ff + .byte $fe + .byte $38 + .byte $7c + .byte $10 + .byte $00 + .byte $ff + .byte $3c + .byte $c3 + .byte $07 + .byte $66 + .byte $33 + .byte $63 + .byte $5a + .byte $e0 + .byte $0e + .byte $3c + .byte $66 + .byte $db + .byte $63 + .byte $00 + .byte $3c + .byte $3c + .byte $18 + .byte $18 + .byte $30 + .byte $00 + .byte $24 + .byte $18 + .byte $ff + .byte $00 + .byte $78 + .byte $6c + .byte $6c + .byte $7c + .byte $c6 + .byte $6c + .byte $60 + .byte $30 + .byte $30 + .byte $66 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $0c + .byte $c6 + .byte $70 + .byte $cc + .byte $cc + .byte $3c + .byte $c0 + .byte $60 + .byte $cc + .byte $cc + .byte $cc + .byte $30 + .byte $30 + .byte $30 + .byte $00 + .byte $30 + .byte $cc + .byte $c6 + .byte $78 + .byte $66 + .byte $66 + .byte $6c + .byte $62 + .byte $62 + .byte $66 + .byte $cc + .byte $30 + .byte $0c + .byte $66 + .byte $60 + .byte $ee + .byte $e6 + .byte $6c + .byte $66 + .byte $cc + .byte $66 + .byte $cc + .byte $b4 + .byte $cc + .byte $cc + .byte $c6 + .byte $c6 + .byte $cc + .byte $c6 + .byte $60 + .byte $60 + .byte $18 + .byte $38 + .byte $00 + .byte $30 + .byte $00 + .byte $60 + .byte $00 + .byte $0c + .byte $00 + .byte $6c + .byte $00 + .byte $60 + .byte $00 + .byte $00 + .byte $60 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $18 + .byte $30 + .byte $dc + .byte $10 + .byte $cc + .byte $cc + .byte $00 + .byte $c3 + .byte $00 + .byte $00 + .byte $30 + .byte $00 + .byte $c3 + .byte $00 + .byte $00 + .byte $00 + .byte $c6 + .byte $00 + .byte $38 + .byte $30 + .byte $00 + .byte $00 + .byte $6c + .byte $cc + .byte $cc + .byte $e0 + .byte $cc + .byte $e0 + .byte $cc + .byte $18 + .byte $00 + .byte $18 + .byte $6c + .byte $cc + .byte $cc + .byte $1b + .byte $00 + .byte $00 + .byte $1c + .byte $1c + .byte $f8 + .byte $00 + .byte $6c + .byte $6c + .byte $00 + .byte $00 + .byte $00 + .byte $c6 + .byte $c6 + .byte $18 + .byte $33 + .byte $cc + .byte $88 + .byte $aa + .byte $77 + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $00 + .byte $78 + .byte $fc + .byte $fe + .byte $cc + .byte $00 + .byte $66 + .byte $76 + .byte $30 + .byte $6c + .byte $6c + .byte $30 + .byte $00 + .byte $0c + .byte $60 + .byte $cc + .byte $fc + .byte $30 + .byte $30 + .byte $30 + .byte $1b + .byte $18 + .byte $30 + .byte $76 + .byte $6c + .byte $00 + .byte $00 + .byte $0c + .byte $6c + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $7e + .byte $7e + .byte $6c + .byte $10 + .byte $38 + .byte $10 + .byte $00 + .byte $ff + .byte $00 + .byte $ff + .byte $0f + .byte $3c + .byte $3f + .byte $7f + .byte $99 + .byte $80 + .byte $02 + .byte $18 + .byte $66 + .byte $7f + .byte $3e + .byte $00 + .byte $18 + .byte $18 + .byte $18 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $30 + .byte $6c + .byte $6c + .byte $30 + .byte $00 + .byte $38 + .byte $60 + .byte $18 + .byte $60 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $06 + .byte $7c + .byte $30 + .byte $78 + .byte $78 + .byte $1c + .byte $fc + .byte $38 + .byte $fc + .byte $78 + .byte $78 + .byte $00 + .byte $00 + .byte $18 + .byte $00 + .byte $60 + .byte $78 + .byte $7c + .byte $30 + .byte $fc + .byte $3c + .byte $f8 + .byte $fe + .byte $fe + .byte $3c + .byte $cc + .byte $78 + .byte $1e + .byte $e6 + .byte $f0 + .byte $c6 + .byte $c6 + .byte $38 + .byte $fc + .byte $78 + .byte $fc + .byte $78 + .byte $fc + .byte $cc + .byte $cc + .byte $c6 + .byte $c6 + .byte $cc + .byte $fe + .byte $78 + .byte $c0 + .byte $78 + .byte $10 + .byte $00 + .byte $30 + .byte $00 + .byte $e0 + .byte $00 + .byte $1c + .byte $00 + .byte $38 + .byte $00 + .byte $e0 + .byte $30 + .byte $0c + .byte $e0 + .byte $70 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $10 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $1c + .byte $18 + .byte $e0 + .byte $76 + .byte $00 + .byte $78 + .byte $00 + .byte $1c + .byte $7e + .byte $cc + .byte $e0 + .byte $30 + .byte $00 + .byte $7e + .byte $cc + .byte $e0 + .byte $cc + .byte $7c + .byte $e0 + .byte $c6 + .byte $30 + .byte $1c + .byte $00 + .byte $3e + .byte $78 + .byte $00 + .byte $00 + .byte $78 + .byte $00 + .byte $00 + .byte $c3 + .byte $cc + .byte $18 + .byte $38 + .byte $cc + .byte $f8 + .byte $0e + .byte $1c + .byte $38 + .byte $00 + .byte $00 + .byte $00 + .byte $fc + .byte $3c + .byte $38 + .byte $30 + .byte $00 + .byte $00 + .byte $c3 + .byte $c3 + .byte $18 + .byte $00 + .byte $00 + .byte $22 + .byte $55 + .byte $db + .byte $18 + .byte $18 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $36 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $00 + .byte $18 + .byte $00 + .byte $18 + .byte $18 + .byte $36 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $00 + .byte $36 + .byte $18 + .byte $36 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $00 + .byte $00 + .byte $36 + .byte $18 + .byte $18 + .byte $00 + .byte $ff + .byte $00 + .byte $f0 + .byte $0f + .byte $ff + .byte $00 + .byte $00 + .byte $00 + .byte $00 + .byte $fc + .byte $00 + .byte $00 + .byte $00 + .byte $fc + .byte $38 + .byte $38 + .byte $1c + .byte $00 + .byte $06 + .byte $38 + .byte $78 + .byte $00 + .byte $30 + .byte $60 + .byte $18 + .byte $0e + .byte $18 + .byte $30 + .byte $00 + .byte $38 + .byte $00 + .byte $00 + .byte $0f + .byte $78 + .byte $70 + .byte $00 + .byte $00 diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s index c75ff16f3..060f45cde 100644 --- a/libsrc/atari7800/mono_setcursor.s +++ b/libsrc/atari7800/mono_setcursor.s @@ -27,31 +27,31 @@ .constructor mono_init_cursor .interruptor mono_blink_cursor - .importzp sp - .import _mono_zones - .import cursor - .import pusha, incsp1, pusha0, pushax, popa + .importzp sp + .import _mono_zones + .import cursor + .import pusha, incsp1, pusha0, pushax, popa .include "atari7800.inc" .include "extzp.inc" .macpack generic - .data + .data ;----------------------------------------------------------------------------- ; The variables used by cursor functions ; blink_time: - .byte 140 + .byte 140 - .code + .code ;--------------------------------------------------------------------------- ; 8x16 routine umula0: ldy #8 ; Number of bits - lda #0 + lda #0 lsr ptr7800 ; Get first bit into carry @L0: bcc @L1 @@ -81,25 +81,25 @@ umula0: ; A = CURS_Y .proc calccursorzone - sta ptr7800 - lda #16 - sta ptrtmp - lda #0 - sta ptr7800+1 - sta ptrtmp+1 - jsr umula0 - clc - adc #10 - bcc @L1 - inx -@L1: clc - adc #<_mono_zones - sta cursorzone ; calculate new cursorzone - txa - clc - adc #>_mono_zones - sta cursorzone+1 - rts + sta ptr7800 + lda #16 + sta ptrtmp + lda #0 + sta ptr7800+1 + sta ptrtmp+1 + jsr umula0 + clc + adc #10 + bcc @L1 + inx +@L1: clc + adc #<_mono_zones + sta cursorzone ; calculate new cursorzone + txa + clc + adc #>_mono_zones + sta cursorzone+1 + rts .endproc @@ -120,21 +120,21 @@ umula0: ; .proc _mono_gotoy - pha - lda CURS_Y - jsr calccursorzone - ldy #1 - lda #0 - sta (cursorzone),y ; disable cursor - pla - sta CURS_Y - jsr calccursorzone - lda cursor - beq @L1 - lda #31 ; enable cursor -@L1: ldy #1 - sta (cursorzone),y - rts + pha + lda CURS_Y + jsr calccursorzone + ldy #1 + lda #0 + sta (cursorzone),y ; disable cursor + pla + sta CURS_Y + jsr calccursorzone + lda cursor + beq @L1 + lda #31 ; enable cursor +@L1: ldy #1 + sta (cursorzone),y + rts .endproc @@ -145,51 +145,51 @@ umula0: ; .proc _mono_gotox - sta CURS_X - ldy #3 - clc - rol - rol - sta (cursorzone),y - rts + sta CURS_X + ldy #3 + clc + rol + rol + sta (cursorzone),y + rts .endproc ;----------------------------------------------------------------------------- ; Set cursor to desired position (X,Y) ; - .proc _mono_gotoxy + .proc _mono_gotoxy - jsr _mono_gotoy - jsr popa - jsr _mono_gotox - rts - .endproc + jsr _mono_gotoy + jsr popa + jsr _mono_gotox + rts + .endproc - .proc mono_gotoxy - jsr popa - jmp _mono_gotoxy - .endproc + .proc mono_gotoxy + jsr popa + jmp _mono_gotoxy + .endproc ;----------------------------------------------------------------------------- ; Initialize cursorzone at startup ; Offset to cursor zone 5. ; - .proc mono_blink_cursor - inc blink_time - bne @L3 - lda #140 - sta blink_time - ldy #0 - lda (cursorzone),y - cmp #32 - bne @L1 - lda #95 - bne @L2 -@L1: lda #32 -@L2: sta (cursorzone),y -@L3: rts - .endproc + .proc mono_blink_cursor + inc blink_time + bne @L3 + lda #140 + sta blink_time + ldy #0 + lda (cursorzone),y + cmp #32 + bne @L1 + lda #95 + bne @L2 +@L1: lda #32 +@L2: sta (cursorzone),y +@L3: rts + .endproc ;----------------------------------------------------------------------------- ; Initialize cursorzone at startup @@ -197,9 +197,9 @@ umula0: ; .segment "ONCE" mono_init_cursor: - lda #0 - jsr calccursorzone - rts + lda #0 + jsr calccursorzone + rts ;----------------------------------------------------------------------------- ; force the init constructor to be imported From 9fab67761f232ba5569991c28f97f734c706e9e2 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 12:09:19 +0300 Subject: [PATCH 1603/2710] Fix tabs --- libsrc/atari7800/clrscr.s | 4 ++-- libsrc/atari7800/conio.s | 4 ++-- libsrc/atari7800/extzp.s | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s index 9d063fad6..7ce690af4 100644 --- a/libsrc/atari7800/clrscr.s +++ b/libsrc/atari7800/clrscr.s @@ -11,8 +11,8 @@ .proc _clrscr - lda #<_screen - ldx #>_screen + lda #<_screen + ldx #>_screen sta ptr7800 stx ptr7800+1 ldx #screenrows diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index 5b60f39fe..1240c2e5d 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -212,8 +212,8 @@ vblankoff: sta CTRL lda #$00 ; Black background sta BKGRND - sta CURS_X - sta CURS_Y + sta CURS_X + sta CURS_Y lda #$33 ; Red sta P0C1 lda #$c8 ; Green diff --git a/libsrc/atari7800/extzp.s b/libsrc/atari7800/extzp.s index a79ede01a..8e8b73459 100644 --- a/libsrc/atari7800/extzp.s +++ b/libsrc/atari7800/extzp.s @@ -11,5 +11,5 @@ ptr7800: .res 2 ptrtmp: .res 2 cursorzone: .res 2 -CURS_X: .res 1 -CURS_Y: .res 1 +CURS_X: .res 1 +CURS_Y: .res 1 From 3954e9bccb45b0f40da21fd70c4615b80ee3c8db Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 12:12:30 +0300 Subject: [PATCH 1604/2710] Fix wrong screen in --- libsrc/atari7800/mono_clrscr.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/atari7800/mono_clrscr.s b/libsrc/atari7800/mono_clrscr.s index cdf12bf4d..c4ab34369 100644 --- a/libsrc/atari7800/mono_clrscr.s +++ b/libsrc/atari7800/mono_clrscr.s @@ -3,7 +3,7 @@ .export _mono_clrscr - .import _screen + .import _momo_screen .import pusha0,pushax .include "extzp.inc" @@ -11,8 +11,8 @@ .proc _mono_clrscr - lda #<_screen - ldx #>_screen + lda #<_momo_screen + ldx #>_momo_screen sta ptr7800 stx ptr7800+1 ldx #screenrows From 4f195d46f972dc8c44bb134453237def9f1a72d1 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 12:21:12 +0300 Subject: [PATCH 1605/2710] Use consisten line lenght values --- libsrc/atari7800/mono_conio.s | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/atari7800/mono_conio.s b/libsrc/atari7800/mono_conio.s index cd79af128..c51d7ff59 100644 --- a/libsrc/atari7800/mono_conio.s +++ b/libsrc/atari7800/mono_conio.s @@ -50,14 +50,14 @@ _mono_screen: .macro TextZone row ; Text - .byte <(_mono_screen + 2 * row * charsperline) + .byte <(_mono_screen + row * mono_charsperline) .byte $60 - .byte >(_mono_screen + 2 * row * charsperline) + .byte >(_mono_screen + row * mono_charsperline) .byte 12 .byte 0 - .byte <(_mono_screen + 2 * row * charsperline + charsperline) + .byte <(_mono_screen + row * mono_charsperline + 20) .byte $60 - .byte >(_mono_screen + 2 * row * charsperline + charsperline) + .byte >(_mono_screen + row * mono_charsperline + 20) .byte 12 .byte 80 ; Cursor From 627ec17b14003e0289e89cb8e8f4a64801b12666 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 12:26:21 +0300 Subject: [PATCH 1606/2710] Fix typo --- libsrc/atari7800/mono_clrscr.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/atari7800/mono_clrscr.s b/libsrc/atari7800/mono_clrscr.s index c4ab34369..a700aadc1 100644 --- a/libsrc/atari7800/mono_clrscr.s +++ b/libsrc/atari7800/mono_clrscr.s @@ -3,7 +3,7 @@ .export _mono_clrscr - .import _momo_screen + .import _mono_screen .import pusha0,pushax .include "extzp.inc" @@ -11,8 +11,8 @@ .proc _mono_clrscr - lda #<_momo_screen - ldx #>_momo_screen + lda #<_mono_screen + ldx #>_mono_screen sta ptr7800 stx ptr7800+1 ldx #screenrows From 5d0f064edce386f3815b4cd40c4348dfdfd0674b Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Mon, 18 Apr 2022 13:49:29 +0300 Subject: [PATCH 1607/2710] Not sharing umula0 and fix cursor bug --- libsrc/atari7800/cputc.s | 3 +-- libsrc/atari7800/mono_cputc.s | 8 ++++---- libsrc/atari7800/mono_setcursor.s | 11 +++++------ libsrc/atari7800/setcursor.s | 28 +++++++++++++++++++++++++++- 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/libsrc/atari7800/cputc.s b/libsrc/atari7800/cputc.s index fb95277d2..9ec84bfe5 100644 --- a/libsrc/atari7800/cputc.s +++ b/libsrc/atari7800/cputc.s @@ -6,8 +6,7 @@ ; .export _cputc - .export umula0 - .import _gotoxy, gotox, gotoy, pusha0 + .import gotox, gotoy, pusha0 .import pushax .import _screen .import txtcolor diff --git a/libsrc/atari7800/mono_cputc.s b/libsrc/atari7800/mono_cputc.s index 4a7e5638c..aa6787e05 100644 --- a/libsrc/atari7800/mono_cputc.s +++ b/libsrc/atari7800/mono_cputc.s @@ -6,7 +6,7 @@ ; .export _mono_cputc - .import _mono_gotoxy, _mono_gotox, _mono_gotoy, pusha0 + .import mono_gotox, mono_gotoy, pusha0 .import pushax .import _mono_screen @@ -52,7 +52,7 @@ umula0: cmp #$0A ; LF bne @L4 @L1: lda #0 ; newline - jsr _mono_gotox + jsr mono_gotox lda CURS_Y cmp #(screenrows-1) bne @L2 @@ -60,7 +60,7 @@ umula0: beq @L3 @L2: clc adc #1 -@L3: jmp _mono_gotoy +@L3: jmp mono_gotoy @L4: pha @@ -96,7 +96,7 @@ umula0: beq @L1 clc adc #1 - jmp _mono_gotox + jmp mono_gotox .endproc diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s index 060f45cde..fa02b1744 100644 --- a/libsrc/atari7800/mono_setcursor.s +++ b/libsrc/atari7800/mono_setcursor.s @@ -23,7 +23,7 @@ ; definitely not allow direct access to the variables. ; - .export mono_gotoxy, _mono_gotoxy, _mono_gotox, _mono_gotoy + .export mono_gotoxy, _mono_gotoxy, mono_gotox, mono_gotoy .constructor mono_init_cursor .interruptor mono_blink_cursor @@ -96,7 +96,6 @@ umula0: adc #<_mono_zones sta cursorzone ; calculate new cursorzone txa - clc adc #>_mono_zones sta cursorzone+1 rts @@ -118,7 +117,7 @@ umula0: ; Enable cursor ; if showcursor cursorzone[1] = 31 ; - .proc _mono_gotoy + .proc mono_gotoy pha lda CURS_Y @@ -143,7 +142,7 @@ umula0: ; You also need to set the hpos offset to the correct value on this line ; cursorzone[3] = 4 * CURS_X? ; - .proc _mono_gotox + .proc mono_gotox sta CURS_X ldy #3 @@ -160,9 +159,9 @@ umula0: ; .proc _mono_gotoxy - jsr _mono_gotoy + jsr mono_gotoy jsr popa - jsr _mono_gotox + jsr mono_gotox rts .endproc diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 99e051cff..d94eb8094 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -31,7 +31,6 @@ .import _zones .import cursor .import pusha, incsp1, pusha0, pushax, popa - .import umula0 .include "atari7800.inc" .include "extzp.inc" @@ -47,6 +46,33 @@ blink_time: .code +;--------------------------------------------------------------------------- +; 8x16 routine + +umula0: + ldy #8 ; Number of bits + lda #0 + lsr ptr7800 ; Get first bit into carry +@L0: bcc @L1 + + clc + adc ptrtmp + tax + lda ptrtmp+1 ; hi byte of left op + clc + adc ptr7800+1 + sta ptr7800+1 + txa + +@L1: ror ptr7800+1 + ror a + ror ptr7800 + dey + bne @L0 + tax + lda ptr7800 ; Load the result + rts + ;----------------------------------------------------------------------------- ; Calculate cursorzone address ; You also need to set the cursorzone to point to the correct cursor Header From 29b9a9f6154780209534c05b0e9b6277355a4631 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 19 Apr 2022 10:31:51 +0300 Subject: [PATCH 1608/2710] Rename font --- libsrc/atari7800/{font160.s => conio_font.s} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename libsrc/atari7800/{font160.s => conio_font.s} (100%) diff --git a/libsrc/atari7800/font160.s b/libsrc/atari7800/conio_font.s similarity index 100% rename from libsrc/atari7800/font160.s rename to libsrc/atari7800/conio_font.s From 9ad2eea14651331a2d7321a13d745f74b384ddcf Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 19 Apr 2022 10:32:22 +0300 Subject: [PATCH 1609/2710] Add color setup --- libsrc/atari7800/mono_conio.s | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libsrc/atari7800/mono_conio.s b/libsrc/atari7800/mono_conio.s index c51d7ff59..63849aea7 100644 --- a/libsrc/atari7800/mono_conio.s +++ b/libsrc/atari7800/mono_conio.s @@ -219,8 +219,12 @@ vblankoff: sta BKGRND sta CURS_X sta CURS_Y - lda #$0f ; White + lda #$33 ; Red sta P0C1 + lda #$c8 ; Green + sta P0C2 + lda #$0f ; White + sta P0C3 rts .endproc From d8b8368e4e7602b38b655c52e496e4f27d883a51 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 19 Apr 2022 10:33:58 +0300 Subject: [PATCH 1610/2710] Add documentation --- libsrc/atari7800/mono_font.s | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libsrc/atari7800/mono_font.s b/libsrc/atari7800/mono_font.s index d07266989..74307ccfb 100644 --- a/libsrc/atari7800/mono_font.s +++ b/libsrc/atari7800/mono_font.s @@ -1,3 +1,16 @@ +; The internal font structure for Atari7800 needs a full set of 256 +; characters. Each character is 8 x 8 bits. +; The font consists of 8 rows of data: +; row7 +; row6 +; row5 +; row4 +; row3 +; row2 +; row1 +; row0 +; Each row is 256 bytes long + .export _mono_font .segment "RODATA" .align 256 From 7f9909ef812a99a29a3b2ef2733cdf30bd2b1a0a Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Mon, 18 Apr 2022 17:49:12 +0200 Subject: [PATCH 1611/2710] use jmp instead of jsr/rts --- libsrc/atari7800/mono_setcursor.s | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s index fa02b1744..42f9bf466 100644 --- a/libsrc/atari7800/mono_setcursor.s +++ b/libsrc/atari7800/mono_setcursor.s @@ -161,8 +161,8 @@ umula0: jsr mono_gotoy jsr popa - jsr mono_gotox - rts + jmp mono_gotox + .endproc .proc mono_gotoxy @@ -197,8 +197,8 @@ umula0: .segment "ONCE" mono_init_cursor: lda #0 - jsr calccursorzone - rts + jmp calccursorzone + ;----------------------------------------------------------------------------- ; force the init constructor to be imported From 4ee3e59f191e55ff661276598b0612a52409ee1e Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 19 Apr 2022 20:01:47 +0300 Subject: [PATCH 1612/2710] Fix race condition --- libsrc/atari7800/clrscr.s | 22 +++++----------------- libsrc/atari7800/conio.s | 6 +++--- libsrc/atari7800/conio_font.s | 4 ++-- libsrc/atari7800/mono_clrscr.s | 22 +++++----------------- libsrc/atari7800/mono_setcursor.s | 10 ++++++++-- libsrc/atari7800/setcursor.s | 7 ++++++- 6 files changed, 29 insertions(+), 42 deletions(-) diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s index 7ce690af4..f9d4938b0 100644 --- a/libsrc/atari7800/clrscr.s +++ b/libsrc/atari7800/clrscr.s @@ -4,7 +4,7 @@ .export _clrscr .import _screen - .import pusha0,pushax + .import pushax, __bzero .include "extzp.inc" .code @@ -13,22 +13,10 @@ lda #<_screen ldx #>_screen - sta ptr7800 - stx ptr7800+1 - ldx #screenrows -@L1: ldy #charsperline - lda #0 -@L2: sta (ptr7800),y - dey - bne @L2 - lda ptr7800 - clc - adc #charsperline - bcc @L3 - inc ptr7800+1 -@L3: dex - bne @L1 - rts + jsr pushax + ldx #>(charsperline * screenrows) + lda #<(charsperline * screenrows) + jmp __bzero .endproc diff --git a/libsrc/atari7800/conio.s b/libsrc/atari7800/conio.s index 1240c2e5d..92cc7d8b1 100644 --- a/libsrc/atari7800/conio.s +++ b/libsrc/atari7800/conio.s @@ -9,7 +9,7 @@ .constructor initconio .include "atari7800.inc" .include "extzp.inc" - .import _font + .import _conio_font .import _get_tv .export _screen .export _zones @@ -58,7 +58,7 @@ _screen: ; Cursor .byte 254 .byte 0 - .byte >_font + .byte >_conio_font .byte 0 .endmacro @@ -206,7 +206,7 @@ vblankon: vblankoff: lda MSTAT bpl vblankoff - lda #>_font + lda #>_conio_font sta CHBASE lda #(CTRL_MODE160 | CTRL_KANGOFF | CTRL_BCBLACK | CTRL_CHAR2B | CTRL_DMAON | CTRL_CKOFF) sta CTRL diff --git a/libsrc/atari7800/conio_font.s b/libsrc/atari7800/conio_font.s index 07be43c4d..829e3e2ce 100644 --- a/libsrc/atari7800/conio_font.s +++ b/libsrc/atari7800/conio_font.s @@ -16,10 +16,10 @@ ; 0, 2, 4, 6, ... 254 ; Odd indices cannot be used. - .export _font + .export _conio_font .rodata .align 256 -_font: +_conio_font: .byte $0, $0, $41, $41, $0, $0, $14, $0 .byte $0, $0, $0, $0, $1, $40, $0, $0 .byte $0, $0, $0, $0, $0, $0, $0, $0 diff --git a/libsrc/atari7800/mono_clrscr.s b/libsrc/atari7800/mono_clrscr.s index a700aadc1..19f1fdfd6 100644 --- a/libsrc/atari7800/mono_clrscr.s +++ b/libsrc/atari7800/mono_clrscr.s @@ -4,7 +4,7 @@ .export _mono_clrscr .import _mono_screen - .import pusha0,pushax + .import pushax, __bzero .include "extzp.inc" .code @@ -13,22 +13,10 @@ lda #<_mono_screen ldx #>_mono_screen - sta ptr7800 - stx ptr7800+1 - ldx #screenrows -@L1: ldy #mono_charsperline - lda #0 -@L2: sta (ptr7800),y - dey - bne @L2 - lda ptr7800 - clc - adc #mono_charsperline - bcc @L3 - inc ptr7800+1 -@L3: dex - bne @L1 - rts + jsr pushax + ldx #>(mono_charsperline * screenrows) + lda #<(mono_charsperline * screenrows) + jmp __bzero .endproc diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s index 42f9bf466..06d1f10d8 100644 --- a/libsrc/atari7800/mono_setcursor.s +++ b/libsrc/atari7800/mono_setcursor.s @@ -42,7 +42,7 @@ ; blink_time: - .byte 140 + .byte 255 .code @@ -175,6 +175,9 @@ umula0: ; Offset to cursor zone 5. ; .proc mono_blink_cursor + lda blink_time + cmp #255 + beq @L3 inc blink_time bne @L3 lda #140 @@ -197,7 +200,10 @@ umula0: .segment "ONCE" mono_init_cursor: lda #0 - jmp calccursorzone + jsr calccursorzone + lda #0 + sta blink_time + rts ;----------------------------------------------------------------------------- diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index d94eb8094..9ccc20ab6 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -42,7 +42,7 @@ ; blink_time: - .byte 140 + .byte 255 .code @@ -177,6 +177,9 @@ umula0: ; Offset to cursor zone 5. ; .proc blink_cursor + lda blink_time + cmp #255 + beq @L3 inc blink_time bne @L3 lda #140 @@ -199,6 +202,8 @@ umula0: init_cursor: lda #0 jsr calccursorzone + lda #0 + sta blink_time rts ;----------------------------------------------------------------------------- From 76849181125addcfa48bc4b2aabe54bc66dad40a Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Tue, 19 Apr 2022 21:31:16 +0300 Subject: [PATCH 1613/2710] Too much time in irq fix --- libsrc/atari7800/mono_setcursor.s | 5 +---- libsrc/atari7800/setcursor.s | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s index 06d1f10d8..7253d4a40 100644 --- a/libsrc/atari7800/mono_setcursor.s +++ b/libsrc/atari7800/mono_setcursor.s @@ -42,7 +42,7 @@ ; blink_time: - .byte 255 + .byte 140 .code @@ -175,9 +175,6 @@ umula0: ; Offset to cursor zone 5. ; .proc mono_blink_cursor - lda blink_time - cmp #255 - beq @L3 inc blink_time bne @L3 lda #140 diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index 9ccc20ab6..a475d0416 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -42,7 +42,7 @@ ; blink_time: - .byte 255 + .byte 140 .code @@ -177,9 +177,6 @@ umula0: ; Offset to cursor zone 5. ; .proc blink_cursor - lda blink_time - cmp #255 - beq @L3 inc blink_time bne @L3 lda #140 From d2e8f7bc90f647e70fe3f091d5f6f24753aff4b6 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Wed, 20 Apr 2022 14:28:34 +0200 Subject: [PATCH 1614/2710] Update Contributing.md --- Contributing.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Contributing.md b/Contributing.md index 6258ce523..8528997df 100644 --- a/Contributing.md +++ b/Contributing.md @@ -68,6 +68,7 @@ color := $0787 ## Assembly Sources * Op-code mnemonics must have lower-case letters. The names of instruction macroes may have upper-case letters. +* Op-codes must use their official and commonly used mnemonics, ie bcc and bcs and not bgt and blt * Hexadecimal number constants should be used except where decimal or binary numbers make much more sense in that constant's context. * Hexadecimal letters should be upper-case. * When you set two registers or two memory locations to an immediate 16-bit zero, you should use the expressions ```#<$0000``` and ```#>$0000``` (they make it obvious where you are putting the lower and upper bytes). From 249a04dbde751aa61d6240568ccbab32b98d8579 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Thu, 21 Apr 2022 21:54:33 +0300 Subject: [PATCH 1615/2710] Move cursor IRQ processing to when the screen is being drawn --- libsrc/atari7800/mono_setcursor.s | 4 ++++ libsrc/atari7800/setcursor.s | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s index 7253d4a40..52a5a997a 100644 --- a/libsrc/atari7800/mono_setcursor.s +++ b/libsrc/atari7800/mono_setcursor.s @@ -28,6 +28,7 @@ .interruptor mono_blink_cursor .importzp sp + .import _zonecounter .import _mono_zones .import cursor .import pusha, incsp1, pusha0, pushax, popa @@ -175,6 +176,9 @@ umula0: ; Offset to cursor zone 5. ; .proc mono_blink_cursor + lda _zonecounter + and #01 + beq @L3 inc blink_time bne @L3 lda #140 diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index a475d0416..c0bf1252b 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -28,6 +28,7 @@ .interruptor blink_cursor .importzp sp + .import _zonecounter .import _zones .import cursor .import pusha, incsp1, pusha0, pushax, popa @@ -177,6 +178,9 @@ umula0: ; Offset to cursor zone 5. ; .proc blink_cursor + lda _zonecounter + and #01 + beq @L3 inc blink_time bne @L3 lda #140 From 3922cccafb8ec43e02d57110a858634b6c50fd61 Mon Sep 17 00:00:00 2001 From: Karri Kaksonen <karri@sipo.fi> Date: Fri, 22 Apr 2022 06:51:35 +0300 Subject: [PATCH 1616/2710] Speed up the cursor a bit --- libsrc/atari7800/mono_setcursor.s | 4 ++-- libsrc/atari7800/setcursor.s | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/atari7800/mono_setcursor.s b/libsrc/atari7800/mono_setcursor.s index 52a5a997a..02e0308f6 100644 --- a/libsrc/atari7800/mono_setcursor.s +++ b/libsrc/atari7800/mono_setcursor.s @@ -43,7 +43,7 @@ ; blink_time: - .byte 140 + .byte 200 .code @@ -181,7 +181,7 @@ umula0: beq @L3 inc blink_time bne @L3 - lda #140 + lda #200 sta blink_time ldy #0 lda (cursorzone),y diff --git a/libsrc/atari7800/setcursor.s b/libsrc/atari7800/setcursor.s index c0bf1252b..f438de24f 100644 --- a/libsrc/atari7800/setcursor.s +++ b/libsrc/atari7800/setcursor.s @@ -43,7 +43,7 @@ ; blink_time: - .byte 140 + .byte 200 .code @@ -183,7 +183,7 @@ umula0: beq @L3 inc blink_time bne @L3 - lda #140 + lda #200 sta blink_time ldy #0 lda (cursorzone),y From 09e0dd02a02c9e0d887287e700eaaf3d52055dcb Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Mon, 25 Apr 2022 14:58:38 +0000 Subject: [PATCH 1617/2710] build: allow the user to specify make V=1 for verbose build it's often required to see the full commandline when things go wrong. the standard way for Makefile-only based buildsystems and autoconf is to pass V=1 to make. --- src/Makefile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index c8028204b..c37af1d32 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2,6 +2,12 @@ ifneq ($(shell echo),) CMD_EXE = 1 endif +ifneq ($(V),1) + Q=@ +else + Q= +endif + PROGS = ar65 \ ca65 \ cc65 \ @@ -147,7 +153,7 @@ endef # PROG_template ../wrk/%.o: %.c @echo $< - @$(CC) -c $(CFLAGS) -o $@ $< + $(Q)$(CC) -c $(CFLAGS) -o $@ $< ../bin: @$(call MKDIR,$@) From 910ce5c1fd730aaeba2efedd47b06db7094ccd94 Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Mon, 25 Apr 2022 16:52:46 +0000 Subject: [PATCH 1618/2710] build: properly quote strings passed as cpp macros until now, the strings intended to be hardcoded into the binary, such as directory names and build id, were passed unquoted, which means they're interpreted by the preprocessor as C tokens, rather than strings, which can result in all sorts of "interesting" behaviour such as interpreting paths starting with // as C++-style comment. this was then worked around using a stringize macro which turned the tokens into a string (if they happened to be in a compatible format). adresses #1726 --- src/Makefile | 6 +++--- src/ca65/incpath.c | 2 +- src/cc65/incpath.c | 2 +- src/cl65/main.c | 2 +- src/common/version.c | 2 +- src/ld65/filepath.c | 6 +++--- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Makefile b/src/Makefile index c37af1d32..75b92394e 100644 --- a/src/Makefile +++ b/src/Makefile @@ -68,9 +68,9 @@ $(info BUILD_ID: $(BUILD_ID)) CFLAGS += -MMD -MP -O3 -I common \ -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) \ - -DCA65_INC="$(CA65_INC)" -DCC65_INC="$(CC65_INC)" -DCL65_TGT="$(CL65_TGT)" \ - -DLD65_LIB="$(LD65_LIB)" -DLD65_OBJ="$(LD65_OBJ)" -DLD65_CFG="$(LD65_CFG)" \ - -DBUILD_ID="$(BUILD_ID)" + -DCA65_INC="\"$(CA65_INC)\"" -DCC65_INC="\"$(CC65_INC)\"" -DCL65_TGT="\"$(CL65_TGT)\"" \ + -DLD65_LIB="\"$(LD65_LIB)\"" -DLD65_OBJ="\"$(LD65_OBJ)\"" -DLD65_CFG="\"$(LD65_CFG)\"" \ + -DBUILD_ID="\"$(BUILD_ID)\"" LDLIBS += -lm diff --git a/src/ca65/incpath.c b/src/ca65/incpath.c index ff21b175d..42e54b2da 100644 --- a/src/ca65/incpath.c +++ b/src/ca65/incpath.c @@ -76,7 +76,7 @@ void FinishIncludePaths (void) /* Add some compiled-in search paths if defined at compile time. */ #if defined(CA65_INC) && !defined(_WIN32) - AddSearchPath (IncSearchPath, STRINGIZE (CA65_INC)); + AddSearchPath (IncSearchPath, CA65_INC); #endif /* Add paths relative to the parent directory of the Windows binary. */ diff --git a/src/cc65/incpath.c b/src/cc65/incpath.c index ab164d5ca..d32614cf9 100644 --- a/src/cc65/incpath.c +++ b/src/cc65/incpath.c @@ -77,7 +77,7 @@ void FinishIncludePaths (void) /* Add some compiled-in search paths if defined at compile time. */ #if defined(CC65_INC) && !defined(_WIN32) - AddSearchPath (SysIncSearchPath, STRINGIZE (CC65_INC)); + AddSearchPath (SysIncSearchPath, CC65_INC); #endif /* Add paths relative to the parent directory of the Windows binary. */ diff --git a/src/cl65/main.c b/src/cl65/main.c index e032baee4..701355904 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -1216,7 +1216,7 @@ static void OptPrintTargetPath (const char* Opt attribute ((unused)), SearchPaths* TargetPaths = NewSearchPath (); AddSubSearchPathFromEnv (TargetPaths, "CC65_HOME", "target"); #if defined(CL65_TGT) && !defined(_WIN32) - AddSearchPath (TargetPaths, STRINGIZE (CL65_TGT)); + AddSearchPath (TargetPaths, CL65_TGT); #endif AddSubSearchPathFromWinBin (TargetPaths, "target"); diff --git a/src/common/version.c b/src/common/version.c index 992be45ee..2f19f0466 100644 --- a/src/common/version.c +++ b/src/common/version.c @@ -62,7 +62,7 @@ const char* GetVersionAsString (void) { static char Buf[60]; #if defined(BUILD_ID) - xsnprintf (Buf, sizeof (Buf), "%u.%u - %s", VER_MAJOR, VER_MINOR, STRINGIZE (BUILD_ID)); + xsnprintf (Buf, sizeof (Buf), "%u.%u - %s", VER_MAJOR, VER_MINOR, BUILD_ID); #else xsnprintf (Buf, sizeof (Buf), "%u.%u", VER_MAJOR, VER_MINOR); #endif diff --git a/src/ld65/filepath.c b/src/ld65/filepath.c index 17cd451de..f722ad34b 100644 --- a/src/ld65/filepath.c +++ b/src/ld65/filepath.c @@ -89,13 +89,13 @@ void InitSearchPaths (void) /* Add some compiled-in search paths if defined at compile time. */ #if defined(LD65_LIB) && !defined(_WIN32) - AddSearchPath (LibDefaultPath, STRINGIZE (LD65_LIB)); + AddSearchPath (LibDefaultPath, LD65_LIB); #endif #if defined(LD65_OBJ) && !defined(_WIN32) - AddSearchPath (ObjDefaultPath, STRINGIZE (LD65_OBJ)); + AddSearchPath (ObjDefaultPath, LD65_OBJ); #endif #if defined(LD65_CFG) && !defined(_WIN32) - AddSearchPath (CfgDefaultPath, STRINGIZE (LD65_CFG)); + AddSearchPath (CfgDefaultPath, LD65_CFG); #endif /* Add paths relative to the parent directory of the Windows binary. */ From 058126ae4148acf793f2d18429c7f3868a289fbd Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:12:09 +0000 Subject: [PATCH 1619/2710] remove orphaned STRINGIZE macro --- src/common/searchpath.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/common/searchpath.h b/src/common/searchpath.h index 974886a67..f078c0799 100644 --- a/src/common/searchpath.h +++ b/src/common/searchpath.h @@ -48,10 +48,6 @@ -/* Convert argument to C string */ -#define _STRINGIZE(arg) #arg -#define STRINGIZE(arg) _STRINGIZE(arg) - /* A search path is a pointer to the list */ typedef struct Collection SearchPaths; From c38504b06d97a55817ae45f50356743a00ea254a Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 26 Apr 2022 00:40:16 +0200 Subject: [PATCH 1620/2710] cgetc export data now --- libsrc/telestrat/cgetc.s | 34 ++++++++++++++++++++++++---------- libsrc/telestrat/kbhit.s | 20 ++++++++++++++++---- 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/libsrc/telestrat/cgetc.s b/libsrc/telestrat/cgetc.s index cad8814af..e77ed794b 100644 --- a/libsrc/telestrat/cgetc.s +++ b/libsrc/telestrat/cgetc.s @@ -5,24 +5,38 @@ .import cursor + .export store_char + .include "telestrat.inc" .proc _cgetc - ; this routine could be quicker if we wrote in page 2 variables, - ; but it's better to use telemon routine in that case, because telemon can manage 4 I/O - ldx cursor ; if cursor equal to 0, then switch off cursor + ; This routine could be quicker if we wrote in page 2 variables, + ; But it's better to use telemon routine in that case, because telemon can manage 4 I/O + ldx cursor ; If cursor equal to 0, then switch off cursor beq switchoff_cursor ldx #$00 ; x is the first screen - BRK_TELEMON(XCSSCR) ; display cursor - jmp loop ; could be replaced by a bne/beq but 'jmp' is cleaner than a bne/beq which could expect some matters + BRK_TELEMON(XCSSCR) ; Display cursor + jmp start ; Could be replaced by a bne/beq but 'jmp' is cleaner than a bne/beq which could expect some matters switchoff_cursor: - ; at this step X is equal to $00, X must be set, because it's the id of the screen (telestrat can handle 4 virtuals screen) - BRK_TELEMON(XCOSCR) ; switch off cursor + ; At this step X is equal to $00, X must be set, because it's the id of the screen (telestrat can handle 4 virtuals screen) + BRK_TELEMON(XCOSCR) ; Switch off cursor -loop: - BRK_TELEMON XRD0 ; waits until key is pressed - bcs loop + +start: + lda store_char ; Does kbhit store a value in store_char ? + bne @out ; Yes, we returns A and we reset store_char +@wait_key: + BRK_TELEMON XRD0 ; Waits until key is pressed + bcs @wait_key + ldx #$00 + rts +@out: + ldx #$00 + stx store_char rts .endproc +.data +store_char: + .byte 0 diff --git a/libsrc/telestrat/kbhit.s b/libsrc/telestrat/kbhit.s index 54e4bf4d8..da2c8b587 100644 --- a/libsrc/telestrat/kbhit.s +++ b/libsrc/telestrat/kbhit.s @@ -6,12 +6,24 @@ .export _kbhit + .import store_char + .include "telestrat.inc" _kbhit: - BRK_TELEMON XRD0 + lda store_char ; Check if a key has been detected previously + beq @call_telemon ; No, calls Telemon routine + lda #$01 ; There is a key pressed previously, return 1 ldx #$00 - txa - rol - eor #$01 + rts +@call_telemon: + BRK_TELEMON XRD0 + + ldx #$00 + bcs @no_char_action + sta store_char + lda #$01 + rts +@no_char_action: + tax rts From ebcf6ec52dbc1017661ee65ac50d7ef5445f3fa0 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 26 Apr 2022 10:23:38 +0200 Subject: [PATCH 1621/2710] FIX space --- libsrc/telestrat/kbhit.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/kbhit.s b/libsrc/telestrat/kbhit.s index da2c8b587..9af696e24 100644 --- a/libsrc/telestrat/kbhit.s +++ b/libsrc/telestrat/kbhit.s @@ -11,7 +11,7 @@ .include "telestrat.inc" _kbhit: - lda store_char ; Check if a key has been detected previously + lda store_char ; Check if a key has been detected previously beq @call_telemon ; No, calls Telemon routine lda #$01 ; There is a key pressed previously, return 1 ldx #$00 From 164acad6cba7f11ded42b9b42208d30c13531ee5 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 26 Apr 2022 11:10:07 +0200 Subject: [PATCH 1622/2710] fix space --- libsrc/telestrat/kbhit.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/kbhit.s b/libsrc/telestrat/kbhit.s index 9af696e24..aea345036 100644 --- a/libsrc/telestrat/kbhit.s +++ b/libsrc/telestrat/kbhit.s @@ -16,7 +16,7 @@ _kbhit: lda #$01 ; There is a key pressed previously, return 1 ldx #$00 rts -@call_telemon: +@call_telemon: BRK_TELEMON XRD0 ldx #$00 From 84e2fee9a4576c6024fd5546a75810da93b73da6 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 26 Apr 2022 14:14:27 +0200 Subject: [PATCH 1623/2710] fix bss --- libsrc/telestrat/cgetc.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/cgetc.s b/libsrc/telestrat/cgetc.s index e77ed794b..b76c62ee0 100644 --- a/libsrc/telestrat/cgetc.s +++ b/libsrc/telestrat/cgetc.s @@ -37,6 +37,6 @@ start: stx store_char rts .endproc -.data +.bss store_char: .byte 0 From 72e2751bfd58b067a29bd90e322de040633d1b1c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 26 Apr 2022 17:07:57 +0200 Subject: [PATCH 1624/2710] added a test that must fail --- test/asm/Makefile | 2 +- test/asm/err/Makefile | 45 ++++++++++++++++++++++++++++++++++++++++ test/asm/err/bug1538-1.s | 3 +++ test/asm/readme.txt | 8 ++++++- 4 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 test/asm/err/Makefile create mode 100644 test/asm/err/bug1538-1.s diff --git a/test/asm/Makefile b/test/asm/Makefile index 82a0ba0e9..3481dae78 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -12,7 +12,7 @@ endif WORKDIR = ../testwrk/asm -SUBDIRS = cpudetect opcodes listing val +SUBDIRS = cpudetect opcodes listing val err .PHONY: all continue mostlyclean clean diff --git a/test/asm/err/Makefile b/test/asm/err/Makefile new file mode 100644 index 000000000..6d2430d34 --- /dev/null +++ b/test/asm/err/Makefile @@ -0,0 +1,45 @@ +# Makefile for the tests that MUST NOT compile + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + S = $(subst /,\,/) + NOT = - # Hack + NULLDEV = nul: + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /s /q $(subst /,\,$1) +else + S = / + NOT = ! + NULLDEV = /dev/null + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +ifdef QUIET + .SILENT: + NULLERR = 2>$(NULLDEV) +endif + +CA65 := $(if $(wildcard ../../../bin/ca65*),..$S..$S..$Sbin$Sca65,ca65) + +WORKDIR = ../../../testwrk/asm/err + +.PHONY: all clean + +SOURCES := $(wildcard *.s) +TESTS = $(patsubst %.s,$(WORKDIR)/%.prg,$(SOURCES)) + +all: $(TESTS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +$(WORKDIR)/%.prg: %.s | $(WORKDIR) + $(if $(QUIET),echo asm/err/$*.s) + $(NOT) $(CA65) -o $@ $< $(NULLERR) + +clean: + @$(call RMDIR,$(WORKDIR)) diff --git a/test/asm/err/bug1538-1.s b/test/asm/err/bug1538-1.s new file mode 100644 index 000000000..334d19c4c --- /dev/null +++ b/test/asm/err/bug1538-1.s @@ -0,0 +1,3 @@ + + ; this should produce a range error + .byte $1234 & $ffff diff --git a/test/asm/readme.txt b/test/asm/readme.txt index 787f2951e..c3198c12a 100644 --- a/test/asm/readme.txt +++ b/test/asm/readme.txt @@ -18,9 +18,15 @@ Overall tests: These go into listing/. Refer to listing/readme.txt -Val: +val: ---- Works very much like the /val directory used to test the compiler - individual tests are run in the simulator and should exit with an exit code of 0 when they pass, or either -1 or a number indicating what part of the test failed on error. + +err: +---- + +Works very much like the /err directory used to test the compiler - individual +tests are assembled and MUST NOT assemble without error. From 976c6af74b3dacb071727ac2f32b3bb6c7f22e8e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 26 Apr 2022 17:08:19 +0200 Subject: [PATCH 1625/2710] test some more cases that should not change size --- test/asm/val/bug1538.s | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/test/asm/val/bug1538.s b/test/asm/val/bug1538.s index ca9a8b6e5..95aa89e34 100644 --- a/test/asm/val/bug1538.s +++ b/test/asm/val/bug1538.s @@ -62,7 +62,10 @@ test3: test3a: .byte tmp1 ; verify its 8bit test3b: .byte tmp1 & $ff ; AND with $ff should work of course test3c: .byte tmp1 & $ffff ; AND with $ffff should not change size -test3d: .word tmp1 & $ffffff ; AND with $ffffff should not change size +test3d: .byte tmp1 & $ffffff ; AND with $ffffff should not change size +test3e: .byte tmp1 & $ffffffff ; AND with $ffffffff should not change size +test3f: .word tmp1 & $ffffff ; AND with $ffffff should not change size +test3g: .word tmp1 & $ffffffff ; AND with $ffffffff should not change size test3chk: inx lda test3a @@ -85,7 +88,27 @@ test3chk: jne exiterror inx - lda test3d+1 + lda test3e + cmp #tmp1 + jne exiterror + + inx + lda test3f + cmp #tmp1 + jne exiterror + + inx + lda test3f+1 + cmp #$00 + jne exiterror + + inx + lda test3g + cmp #tmp1 + jne exiterror + + inx + lda test3g+1 cmp #$00 jne exiterror From 6fac3be97cc520278318f14faee83ae3515ffa1e Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Wed, 27 Apr 2022 14:25:46 +0200 Subject: [PATCH 1626/2710] Update README.md --- README.md | 86 +++++++++++++++++++++++++++---------------------------- 1 file changed, 42 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 12d74717b..1bbeb5909 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,48 @@ -[Windows Snapshot](https://sourceforge.net/projects/cc65/files/cc65-snapshot-win32.zip) - -[Linux Snapshot DEB and RPM](https://software.opensuse.org//download.html?project=home%3Astrik&package=cc65) - -[Documentation](https://cc65.github.io/doc) - -[Contributing](Contributing.md) to the CC65 project. - -The [Wiki](https://github.com/cc65/wiki/wiki) contains extra info that does not fit into the regular documentation. - -[![Snapshot Build](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml/badge.svg?branch=master)](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml) +# About cc65 cc65 is a complete cross development package for 65(C)02 systems, including a powerful macro assembler, a C compiler, linker, librarian and several -other tools. +other tools. cc65 has C and runtime library support for many of the old 6502 machines. +For details look at the [Website](https://cc65.github.io). -cc65 has C and runtime library support for many of the old 6502 machines, -including +## People -- the following Commodore machines: - - VIC20 - - C16/C116 and Plus/4 - - C64 - - C128 - - CBM 510 (aka P500) - - the 600/700 family - - newer PET machines (not 2001). -- the Apple ]\[+ and successors. -- the Atari 8-bit machines. -- the Atari 2600 console. -- the Atari 5200 console. -- the Atari 7800 console. -- GEOS for the C64, C128 and Apple //e. -- the Bit Corporation Gamate console. -- the NEC PC-Engine (aka TurboGrafx-16) console. -- the Nintendo Entertainment System (NES) console. -- the Watara Supervision console. -- the VTech Creativision console. -- the Oric Atmos. -- the Oric Telestrat. -- the Lynx console. -- the Ohio Scientific Challenger 1P. -- the Commander X16. -<<<<<<< HEAD -- the Synertek Systems Sym-1. -======= ->>>>>>> 2583dfb71 (Update README.md) +Core team members: -The libraries are fairly portable, so creating a version for other 6502s -shouldn't be too much work. +* [Christian Groessler](https://github.com/groessler): Atari, Atari5200, and CreatiVision library Maintainer +* [dqh](https://github.com/dqh-au): GHA help +* [Greg King](https://github.com/greg-king5): all around hackery +* [groepaz](https://github.com/mrdudz): CBM libary, Project Maintainer +* [Oliver Schmidt](https://github.com/oliverschmidt): Apple II library Maintainer + +External contributors: + +* [acqn](https://github.com/acqn): various compiler fixes +* [jedeoric](https://github.com/jedeoric): Telestrat target +* [jmr](https://github.com/jmr): compiler fixes +* [karrika](https://github.com/karrika): Atari 7800 target +* [Stephan Mühlstrasser](https://github.com/smuehlst): osic1p target + +*(The above list is incomplete, if you feel left out - please speak up or add yourself in a PR)* + +For a complete list look at the [full team list](https://github.com/orgs/cc65/teams) or the list of [all contributors](https://github.com/cc65/cc65/graphs/contributors) + +# Contact + +For general discussion, questions, etc subscribe to the [mailing list](https://cc65.github.io/mailing-lists.html) or use the [github discussions](https://github.com/cc65/cc65/discussions). + +# Documentation + +* The main [Documentation](https://cc65.github.io/doc) for users and developers + +* Info on [Contributing](Contributing.md) to the CC65 project. Please read this before working on something you want to contribute, and before reporting bugs. + +* The [Wiki](https://github.com/cc65/wiki/wiki) contains some extra info that does not fit into the regular documentation. + +# Downloads + +* [Windows Snapshot](https://sourceforge.net/projects/cc65/files/cc65-snapshot-win32.zip) + +* [Linux Snapshot DEB and RPM](https://software.opensuse.org//download.html?project=home%3Astrik&package=cc65) + +[![Snapshot Build](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml/badge.svg?branch=master)](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml) From 6e3e98220bac36fdb5ff5f7022b8d10c711e4af0 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Thu, 28 Apr 2022 15:14:34 +0200 Subject: [PATCH 1627/2710] Update Contributing.md --- Contributing.md | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/Contributing.md b/Contributing.md index 8528997df..cf4daa9e6 100644 --- a/Contributing.md +++ b/Contributing.md @@ -48,16 +48,36 @@ color := $0787 ## C Sources +The following is still very incomplete - if in doubt please look at existing sourcefiles and adapt to the existing style + * Your files should obey the C89 standard. +* The normal indentation width should be four spaces. +* You must use ANSI C comments (```/* */```); you must not use C++ comments (```//```). +* When you add functions to an existing file, you should separate them by the same number of blank lines that separate the functions that already are in that file. +* All function declarations must be followed by a comment block that tells at least briefly what the function does, what the parameters are, and what is returned. This comment must sit between the declaration and the function body, like this: +<pre> +int foo(int bar) +/* Add 1 to bar, takes bar and returns the result */ +{ + return bar + 1; +} +</pre> +* When a function's argument list wraps around to a next line, you should indent that next line by either the normal width or enough spaces to align it with the arguments on the previous line. * All declarations in a block must be at the beginning of that block. * You should put a blank line between a list of local variable declarations and the first line of code. -* You must use ANSI C comments (```/* */```); you must not use C++ comments (```//```). -* The normal indentation width should be four spaces. -* When a function's argument list wraps around to a next line, you should indent that next line by either the normal width or enough spaces to align it with the arguments on the previous line. -* When you add functions to an existing file, you should separate them by the same number of blank lines that separate the functions that already are in that file. - -(The next two rules will be changed at some time in the future; but, for now:) - +* Always use curly braces even for single statements after ```if```, and the single statement should go into a new line. +* Use "cuddling" braces, ie the opening brace goes in the same line as the ```if```: +<pre> +if (foo > 42) { + bar = 23; +} +</pre> +* Should the ```if``` statement be followed by an empty conditional block, there should be a comment telling why this is the case +<pre> +if (check()) { + /* nothing happened, do nothing */ +} +</pre> * You must separate function names and parameter/argument lists by one space. * When declaring/defining pointers, you must put the asterisk (```*```) next to the data type, with a space between it and the variable's name. Examples: <pre> From 55ea831e2de8674d34d9b66d1f21966d2454b132 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Sat, 2 Apr 2022 09:39:35 -0400 Subject: [PATCH 1628/2710] Upgraded the cx16 library to the Commander X16 Kernal ROM's prerelease 39. --- asminc/cbm_kernal.inc | 9 +++- asminc/cx16.inc | 104 ++++++++++++++++++++----------------- cfg/cx16-asm.cfg | 2 - doc/cx16.sgml | 26 ++++++---- include/cx16.h | 37 +++++++++---- libsrc/cx16/cgetc.s | 7 ++- libsrc/cx16/cpeekc.s | 9 +++- libsrc/cx16/cpeekcolor.s | 9 +++- libsrc/cx16/cpeekrevers.s | 9 +++- libsrc/cx16/cputc.s | 10 ++-- libsrc/cx16/crt0.s | 43 +++------------ libsrc/cx16/joy/cx16-std.s | 13 ++--- libsrc/cx16/kbhit.s | 11 ++-- libsrc/cx16/kernal.s | 11 ++-- libsrc/cx16/mou/cx16-std.s | 5 +- libsrc/cx16/tgi/cx320p1.s | 31 +++++------ libsrc/cx16/videomode.s | 36 +++++++------ libsrc/cx16/waitvsync.s | 8 +-- 18 files changed, 208 insertions(+), 172 deletions(-) diff --git a/asminc/cbm_kernal.inc b/asminc/cbm_kernal.inc index 5f41c6267..4d78cf93f 100644 --- a/asminc/cbm_kernal.inc +++ b/asminc/cbm_kernal.inc @@ -7,8 +7,13 @@ .if .def(__CX16__) ; CX16 extended jump table + KBDBUF_PEEK := $FEBD + KBDBUF_GET_MODIFIERS := $FEC0 + KBDBUF_PUT := $FEC3 + I2C_READ_BYTE := $FEC6 + I2C_WRITE_BYTE := $FEC9 + CX_MONITOR := $FECC ENTROPY_GET := $FECF - KEYBRD_BUF_PUT := $FED2 CONSOLE_SET_PAGE_MSG := $FED5 CONSOLE_PUT_IMAGE := $FED8 CONSOLE_INIT := $FEDB @@ -52,7 +57,7 @@ CLOCK_GET_DATE_TIME := $FF50 JOYSTICK_SCAN := $FF53 JOYSTICK_GET := $FF56 - SCREEN_SET_MODE := $FF5F + SCREEN_MODE := $FF5F SCREEN_SET_CHARSET := $FF62 MOUSE_CONFIG := $FF68 MOUSE_GET := $FF6B diff --git a/asminc/cx16.inc b/asminc/cx16.inc index 4e5971593..268d701d6 100644 --- a/asminc/cx16.inc +++ b/asminc/cx16.inc @@ -1,5 +1,5 @@ ; -; CX16 r38 definitions +; CX16 r39 definitions ; ; --------------------------------------------------------------------------- @@ -104,6 +104,10 @@ PI ; --------------------------------------------------------------------------- ; Zero page +; Banking registers +RAM_BANK := $00 +ROM_BANK := $01 + ; GEOS and graphics pseudo-registers .struct gREG .org $02 @@ -224,7 +228,7 @@ PI ; Kernal KTEMP2 := $80 ; 2 bytes for temporary storage IMPARM := $82 ; Pointer for PRIMM function -FNAM := $8C ; Pointer to filename +FNAM := $8A ; Pointer to filename ; BASIC TXTPTR := $EE ; Pointer into BASIC source code @@ -234,14 +238,13 @@ TXTPTR := $EE ; Pointer into BASIC source code BASIC_BUF := $0200 ; Location of command-line BASIC_BUF_LEN = 81 ; Maximum length of command-line -SCREEN_MODE := $0261 ; Current screen mode (set by SCREEN_SET_MODE) SCREEN_PTR := $0262 ; Pointer to current row on text screen (16 bits) -STATUS := $0286 ; Status from previous I/O operation -IN_DEV := $028A ; Current input device number -OUT_DEV := $028B ; Current output device number -FNAM_LEN := $028E ; Length of filename -SECADR := $0290 ; Secondary address -DEVNUM := $0291 ; Device number +STATUS := $0289 ; Status from previous I/O operation +IN_DEV := $028D ; Current input device number +OUT_DEV := $028E ; Current output device number +FNAM_LEN := $0291 ; Length of filename +SECADR := $0293 ; Secondary address +DEVNUM := $0294 ; Device number CURS_COLOR := $0373 ; Color under the cursor CHARCOLOR := $0376 ; Cursor's color nybbles (high: background, low: foreground) RVS := $0377 ; Reverse flag @@ -268,6 +271,42 @@ NMIVec := $0318 ; --------------------------------------------------------------------------- ; I/O locations +; 65C22 Versatile Interface Adapter +.struct VIA1 ; Versatile Interface Adapter + .org $9F00 + PRB .byte ; mouse, LED, VIC bus (Port Register B) + PRA .byte ; keyboard, controllers (Port Register A) + DDRB .byte ; (Data Direction Register B) + DDRA .byte ; (Data Direction Register A) + T1 .word ; (Timer 1) + T1L .word ; (Timer 1 Latch) + T2 .word ; (Timer 2) + SR .byte ; (Shift Register) + ACR .byte ; (Auxiliary Control Register) + PCR .byte ; (Peripheral Control Register) + IFR .byte ; (Interrupt Flags Register) + IER .byte ; (Interrupt Enable Register) + PRA2 .byte ; keyboard, controllers (PRA without handshake) +.endstruct + +; 65C22 Versatile Interface Adapter +.struct VIA2 + .org $9F10 + PRB .byte + PRA .byte + DDRB .byte + DDRA .byte + T1 .word + T1L .word + T2 .word + SR .byte + ACR .byte + PCR .byte + IFR .byte + IER .byte + PRA2 .byte +.endstruct + ; Video Enhanced Retro Adapter ; Has audio and SPI. .scope VERA @@ -496,44 +535,16 @@ NMIVec := $0318 .endstruct .endscope -; 65C22 -.struct VIA1 ; Versatile Interface Adapter - .org $9F60 - PRB .byte ; ROM bank, IEC (Port Register B) - PRA .byte ; RAM bank (Port Register A) - DDRB .byte ; (Data Direction Register B) - DDRA .byte ; (Data Direction Register A) - T1 .word ; (Timer 1) - T1L .word ; (Timer 1 Latch) - T2 .word ; (Timer 2) - SR .byte ; (Shift Register) - ACR .byte ; (Auxiliary Control Register) - PCR .byte ; (Peripheral Control Register) - IFR .byte ; (Interrupt Flags Register) - IER .byte ; (Interrupt Enable Register) - PRA2 .byte ; RAM bank (Port Register A without handshaking) +; YM2151 audio chip +.struct YM2151 + .org $9F40 + .union + STATUS .byte + ADDR .byte + .endunion + DATA .byte .endstruct -; 65C22 -.struct VIA2 - .org $9F70 - PRB .byte ; Mouse communication ? - PRA .byte ; NES controller communication - DDRB .byte - DDRA .byte - T1 .word - T1L .word - T2 .word - SR .byte - ACR .byte - PCR .byte - IFR .byte - IER .byte - PRA2 .byte -.endstruct - -; Real-Time Clock - ; X16 Emulator device ; This device doesn't exist on the real machine. .struct EMULATOR @@ -554,8 +565,7 @@ NMIVec := $0318 ; --------------------------------------------------------------------------- ; Banked RAM and ROM -KEY_COUNT := $A00A ; (bank 0) Number of keys in input buffer -TIMER := $A037 ; (bank 0) 60 Hz. timer (3 bytes, big-endian) +TIMER := $A03B ; (bank 0) 60 Hz. timer (3 bytes, big-endian) .struct BANK .org $A000 diff --git a/cfg/cx16-asm.cfg b/cfg/cx16-asm.cfg index 92c9d96f7..1b1cce8ec 100644 --- a/cfg/cx16-asm.cfg +++ b/cfg/cx16-asm.cfg @@ -1,5 +1,3 @@ -# Assembly configuration for R38 - FEATURES { STARTADDRESS: default = $0801; } diff --git a/doc/cx16.sgml b/doc/cx16.sgml index 9e743064f..78a51206b 100644 --- a/doc/cx16.sgml +++ b/doc/cx16.sgml @@ -200,15 +200,23 @@ access to hardware located in the address space. Some variables are structures, accessing the struct fields will access the chip registers. <descrip> - <tag><tt/VERA/</tag> - The <tt/VERA/ structure allows access - to the Video Enhanced Retro Adapter chip. + + <tag><tt/RAM_BANK/</tag> + A register that controls which bank of high RAM is visible in the + <tt/BANK_RAM/ window. + + <tag><tt/ROM_BANK/</tag> + A register that controls which bank of ROM is active at the moment. <tag><tt/VIA1, VIA2/</tag> Access to the two VIA (Versatile Interface Adapter) chips is available via the <tt/VIA1/ and <tt/VIA2/ variables. The structure behind those variables is explained in <tt/_6522.h/. + <tag><tt/VERA/</tag> + The <tt/VERA/ structure allows access + to the Video Enhanced Retro Adapter chip. + <tag><tt/BANK_RAM/</tag> A character array that mirrors the eight-Kibibyte window, at $A000, into banked RAM. @@ -219,7 +227,7 @@ structures, accessing the struct fields will access the chip registers. <sect>Loadable drivers<p> The names in the parentheses denote the symbols to be used for static linking -of the drivers. The names fit into the 8.3 character limit of the SD-Card's +of the drivers. The names fit into the old 8.3-character limit of the SD-Card's FAT32 file-system. @@ -230,7 +238,7 @@ point to <tt/cx320p1.tgi (cx320p1_tgi)/. <descrip> <tag><tt/cx320p1.tgi (cx320p1_tgi)/</tag> - This driver features a resolution of 320 across and 200 down with 256 colors, + This driver features a resolution of 320 across and 240 down with 256 colors, and a slightly adjustable palette (the order of the colors can be changed in a way that's compatible with some of the other color drivers). </descrip><p> @@ -248,10 +256,10 @@ point to <tt/cx16-std.joy (cx16_std_joy)/. <descrip> <tag><tt/cx16-std.joy (cx16_std_joy)/</tag> - Supports up to two NES (and SNES) controllers connected to the joystick ports - of the CX16. It reads the four directions, and the <bf/A/, <bf/B/, - <bf/Select/, and <bf/Start/ buttons. Buttons <bf/A/ and <bf/B/ are - the first and second fire buttons. + Supports the keyboard emulation of a controller and up to four SNES (and NES) + controllers connected to the joystick ports of the CX16. It reads the four + directions, and the <bf/A/, <bf/B/, <bf/Select/, and <bf/Start/ buttons. + Buttons <bf/A/ and <bf/B/ are the first and second fire buttons. </descrip><p> diff --git a/include/cx16.h b/include/cx16.h index 4100da631..42495c862 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -3,7 +3,7 @@ /* cx16.h */ /* */ /* CX16 system-specific definitions */ -/* For prerelease 38 */ +/* For prerelease 39 */ /* */ /* */ /* This software is provided "as-is", without any expressed or implied */ @@ -169,11 +169,16 @@ enum { }; /* Video modes for videomode() */ -#define VIDEOMODE_40x30 0x00 -#define VIDEOMODE_80x60 0x02 -#define VIDEOMODE_40COL VIDEOMODE_40x30 +#define VIDEOMODE_80x60 0x00 +#define VIDEOMODE_80x30 0x01 +#define VIDEOMODE_40x60 0x02 +#define VIDEOMODE_40x30 0x03 +#define VIDEOMODE_40x15 0x04 +#define VIDEOMODE_20x30 0x05 +#define VIDEOMODE_20x15 0x06 #define VIDEOMODE_80COL VIDEOMODE_80x60 -#define VIDEOMODE_320x200 0x80 +#define VIDEOMODE_40COL VIDEOMODE_40x30 +#define VIDEOMODE_320x240 0x80 #define VIDEOMODE_SWAP (-1) /* VERA's address increment/decrement numbers */ @@ -221,6 +226,13 @@ enum { /* Define hardware. */ +#define RAM_BANK (*(unsigned char *)0x00) +#define ROM_BANK (*(unsigned char *)0x01) + +#include <_6522.h> +#define VIA1 (*(volatile struct __6522 *)0x9F00) +#define VIA2 (*(volatile struct __6522 *)0x9F10) + /* A structure with the Video Enhanced Retro Adapter's external registers */ struct __vera { unsigned short address; /* Address for data ports */ @@ -271,12 +283,15 @@ struct __vera { }; #define VERA (*(volatile struct __vera *)0x9F20) -#include <_6522.h> -#define VIA1 (*(volatile struct __6522 *)0x9F60) -#define VIA2 (*(volatile struct __6522 *)0x9F70) - -#define RAM_BANK (VIA1.pra) -#define ROM_BANK (VIA1.prb) +/* Audio chip */ +struct __ym2151 { + union { + unsigned char reg; /* Register number for data */ + unsigned char status; /* Busy flag */ + }; + unsigned char data; +}; +#define YM2151 (*(volatile struct __ym2151 *)0x9F40) /* A structure with the x16emu's settings registers */ struct __emul { diff --git a/libsrc/cx16/cgetc.s b/libsrc/cx16/cgetc.s index 2372b431a..b4354197f 100644 --- a/libsrc/cx16/cgetc.s +++ b/libsrc/cx16/cgetc.s @@ -1,5 +1,5 @@ ; -; 2019-12-22, Greg King +; 2022-03-29, Greg King ; ; char cgetc (void); ; /* Return a character from the keyboard. */ @@ -13,6 +13,8 @@ .macpack generic +screen_addr := $1B000 ; VRAM address of text screen + _cgetc: jsr _kbhit bnz L3 ; Jump if there are already chars waiting @@ -57,8 +59,9 @@ setcursor: stz VERA::CTRL ; Use port 0 lda CURS_Y + add #<(>screen_addr) sta VERA::ADDR+1 ; Set row number - lda #VERA::INC1 ; Increment address by one + lda #VERA::INC1 | ^screen_addr ; Increment address by one sta VERA::ADDR+2 lda CURS_X ; Get character column asl a diff --git a/libsrc/cx16/cpeekc.s b/libsrc/cx16/cpeekc.s index 6756d995a..9f4b3b296 100644 --- a/libsrc/cx16/cpeekc.s +++ b/libsrc/cx16/cpeekc.s @@ -1,6 +1,6 @@ ; ; 2016-02-28, Groepaz -; 2020-04-29, Greg King +; 2022-03-29, Greg King ; ; char cpeekc (void); ; /* Return the character from the current cursor position. */ @@ -9,13 +9,18 @@ .export _cpeekc .include "cx16.inc" + .macpack generic +screen_addr := $1B000 ; VRAM address of text screen + _cpeekc: stz VERA::CTRL ; use port 0 lda CURS_Y + add #<(>screen_addr) sta VERA::ADDR+1 ; set row number - stz VERA::ADDR+2 + lda #^screen_addr + sta VERA::ADDR+2 lda CURS_X ; get character column asl a ; each character has two bytes sta VERA::ADDR diff --git a/libsrc/cx16/cpeekcolor.s b/libsrc/cx16/cpeekcolor.s index 9c167b07a..668f2a0da 100644 --- a/libsrc/cx16/cpeekcolor.s +++ b/libsrc/cx16/cpeekcolor.s @@ -1,5 +1,5 @@ ; -; 2020-04-30, Greg King +; 2022-03-29, Greg King ; ; unsigned char cpeekcolor (void); ; /* Return the colors from the current cursor position. */ @@ -8,8 +8,11 @@ .export _cpeekcolor .include "cx16.inc" + .macpack generic +screen_addr := $1B000 ; VRAM address of text screen + _cpeekcolor: php lda CURS_FLAG ; is the cursor currently off? @@ -22,8 +25,10 @@ _cpeekcolor: @L1: stz VERA::CTRL ; use port 0 lda CURS_Y + add #<(>screen_addr) sta VERA::ADDR+1 ; set row number - stz VERA::ADDR+2 + lda #^screen_addr + sta VERA::ADDR+2 lda CURS_X ; get character column sec ; color attribute is second byte rol a diff --git a/libsrc/cx16/cpeekrevers.s b/libsrc/cx16/cpeekrevers.s index fd7428779..1d10a2654 100644 --- a/libsrc/cx16/cpeekrevers.s +++ b/libsrc/cx16/cpeekrevers.s @@ -1,6 +1,6 @@ ; ; 2016-02-28, Groepaz -; 2020-04-30, Greg King +; 2022-03-29, Greg King ; ; unsigned char cpeekrevers (void); ; /* Return the reverse attribute from the current cursor position. @@ -11,8 +11,11 @@ .export _cpeekrevers .include "cx16.inc" + .macpack generic +screen_addr := $1B000 ; VRAM address of text screen + _cpeekrevers: php lda CURS_FLAG ; is the cursor currently off? @@ -25,8 +28,10 @@ _cpeekrevers: @L1: stz VERA::CTRL ; use port 0 lda CURS_Y + add #<(>screen_addr) sta VERA::ADDR+1 ; set row number - stz VERA::ADDR+2 + lda #^screen_addr + sta VERA::ADDR+2 lda CURS_X ; get character column asl a ; each character has two bytes sta VERA::ADDR diff --git a/libsrc/cx16/cputc.s b/libsrc/cx16/cputc.s index 4a7034e59..22327d25a 100644 --- a/libsrc/cx16/cputc.s +++ b/libsrc/cx16/cputc.s @@ -11,8 +11,11 @@ .import gotoxy, PLOT .include "cx16.inc" + .macpack generic +screen_addr := $1B000 ; VRAM address of text screen + ; Move to a cursor position, then print a character. _cputcxy: @@ -79,16 +82,17 @@ putchar: tax stz VERA::CTRL ; Use port 0 lda CURS_Y + add #<(>screen_addr) sta VERA::ADDR+1 ; Set row number - lda #VERA::INC1 ; Address increments by one + lda #VERA::INC1 | ^screen_addr ; Address increments by one sta VERA::ADDR+2 ldy CURS_X ; Get character column into .Y tya asl a ; Each character has two bytes sta VERA::ADDR - stx VERA::DATA0 + stx VERA::DATA0 ; Put the character lda CHARCOLOR - sta VERA::DATA0 + sta VERA::DATA0 ; Put its colors rts diff --git a/libsrc/cx16/crt0.s b/libsrc/cx16/crt0.s index be83927fc..e37a64a7c 100644 --- a/libsrc/cx16/crt0.s +++ b/libsrc/cx16/crt0.s @@ -1,5 +1,5 @@ ; -; Start-up code for cc65 (CX16 r35 version) +; Start-up code for cc65 (CX16 r39 version) ; .export _exit @@ -20,7 +20,7 @@ .segment "STARTUP" Start: tsx - stx spsave ; Save the system stack ptr + stx spsave ; Save the system stack ptr. ; Save space by putting some of the start-up code in the ONCE segment ; which will be re-used by the BSS segment, the heap, and the C stack. @@ -46,26 +46,14 @@ _exit: jsr donelib -.if 0 ; (We don't need to preserve zero-page space for cc65's variables.) -; Copy back the zero-page stuff. - - ldx #zpspace-1 -L2: lda zpsave,x - sta sp,x - dex - bpl L2 -.endif - ; Restore the system stuff. ldx spsave txs ; Restore stack pointer ldx ramsave - stx VIA1::PRA ; Restore former RAM bank - lda VIA1::PRB - and #<~$07 - ora #$04 - sta VIA1::PRB ; Change back to BASIC ROM + stx RAM_BANK ; Restore former RAM bank + lda #$04 + sta ROM_BANK ; Change back to BASIC ROM ; Back to BASIC. @@ -79,26 +67,14 @@ L2: lda zpsave,x init: ; Change from BASIC's ROM to Kernal's ROM. - lda VIA1::PRB - and #<~$07 - sta VIA1::PRB + stz ROM_BANK ; Change to the second RAM bank. - lda VIA1::PRA + lda RAM_BANK sta ramsave ; Save the current RAM bank number lda #$01 - sta VIA1::PRA - -.if 0 ; (We don't need to preserve zero-page space for cc65's variables.) -; Save the zero-page locations that we need. - - ldx #zpspace-1 -L1: lda sp,x - sta zpsave,x - dex - bpl L1 -.endif + sta RAM_BANK ; Set up the stack. @@ -125,6 +101,3 @@ L1: lda sp,x ramsave: .res 1 spsave: .res 1 -.if 0 -zpsave: .res zpspace -.endif diff --git a/libsrc/cx16/joy/cx16-std.s b/libsrc/cx16/joy/cx16-std.s index 5c10c0592..a40fcb061 100644 --- a/libsrc/cx16/joy/cx16-std.s +++ b/libsrc/cx16/joy/cx16-std.s @@ -2,7 +2,7 @@ ; Standard joystick driver for the CX16. ; May be installed multiple times when statically linked to an application. ; -; 2019-12-24, Greg King +; 2021-04-07, Greg King ; .include "joy-kernel.inc" @@ -41,7 +41,7 @@ ; ------------------------------------------------------------------------ ; Constant -JOY_COUNT = 2 ; Number of joysticks we support +JOY_COUNT = $05 ; Number of joysticks we support ; ------------------------------------------------------------------------ ; Data. @@ -51,8 +51,7 @@ JOY_COUNT = 2 ; Number of joysticks we support ; ------------------------------------------------------------------------ ; INSTALL routine -- is called after the driver is loaded into memory. -; If possible, check if the hardware is present, and determine the amount -; of memory available. +; If possible, check if the hardware is present. ; Must return a JOY_ERR_xx code in .XA . INSTALL: @@ -77,8 +76,10 @@ COUNT: lda #<JOY_COUNT ; ------------------------------------------------------------------------ ; READ: Read a particular joystick passed in .A . -READ: and #%00000001 - jsr JOYSTICK_GET +READ: cmp #JOY_COUNT + blt :+ + lda #$00 +: jsr JOYSTICK_GET sta tmp1 txa bit #%00001110 ; Is it NES or SNES controller? diff --git a/libsrc/cx16/kbhit.s b/libsrc/cx16/kbhit.s index d7e22efd1..3cfe351a9 100644 --- a/libsrc/cx16/kbhit.s +++ b/libsrc/cx16/kbhit.s @@ -1,5 +1,5 @@ ; -; 2020-01-08, Greg King +; 2022-03-28, Greg King ; ; unsigned char kbhit (void); ; /* Returns non-zero (true) if a typed character is waiting. */ @@ -7,14 +7,11 @@ .export _kbhit - .include "cx16.inc" + .import KBDBUF_PEEK .proc _kbhit - ldy VIA1::PRA ; (KEY_COUNT is in RAM bank 0) - stz VIA1::PRA - lda KEY_COUNT ; Get number of characters - sty VIA1::PRA - tax ; High byte of return (only its zero/nonzero ... + jsr KBDBUF_PEEK + txa ; Low byte of return (only its zero/nonzero ... rts ; ... state matters) .endproc diff --git a/libsrc/cx16/kernal.s b/libsrc/cx16/kernal.s index a252569e5..40bcfed11 100644 --- a/libsrc/cx16/kernal.s +++ b/libsrc/cx16/kernal.s @@ -1,13 +1,18 @@ ; -; 2020-04-27, Greg King +; 2022-03-28, Greg King ; ; CX16 Kernal functions ; .include "cbm_kernal.inc" + .export KBDBUF_PEEK + .export KBDBUF_GET_MODIFIERS + .export KBDBUF_PUT + .export I2C_READ_BYTE + .export I2C_WRITE_BYTE + .export CX_MONITOR .export ENTROPY_GET - .export KEYBRD_BUF_PUT .export CONSOLE_SET_PAGE_MSG .export CONSOLE_PUT_IMAGE .export CONSOLE_INIT @@ -50,7 +55,7 @@ .export CLOCK_GET_DATE_TIME .export JOYSTICK_SCAN .export JOYSTICK_GET - .export SCREEN_SET_MODE + .export SCREEN_MODE .export SCREEN_SET_CHARSET .export MOUSE_CONFIG .export MOUSE_GET diff --git a/libsrc/cx16/mou/cx16-std.s b/libsrc/cx16/mou/cx16-std.s index 0d046bbc2..3af7d2eb3 100644 --- a/libsrc/cx16/mou/cx16-std.s +++ b/libsrc/cx16/mou/cx16-std.s @@ -1,7 +1,7 @@ ; ; Driver for the Commander X16 Kernal's mouse driver. ; -; 2019-12-25, Greg King +; 2022-03-28, Greg King ; .include "zeropage.inc" @@ -118,7 +118,8 @@ INSTALL: dex bpl @L1 - ldx #$00 ; Don't change sprite's scale + sec ; Get screen geometry + jsr SCREEN_MODE lda #$01 ; Create sprite jsr MOUSE_CONFIG diff --git a/libsrc/cx16/tgi/cx320p1.s b/libsrc/cx16/tgi/cx320p1.s index 1ad5c2cbd..2fcd9adf3 100644 --- a/libsrc/cx16/tgi/cx320p1.s +++ b/libsrc/cx16/tgi/cx320p1.s @@ -1,8 +1,8 @@ ; -; Graphics driver for the 320 pixels across, 200 pixels down, 256 colors mode +; Graphics driver for the 320 pixels across, 240 pixels down, 256 colors mode ; on the Commander X16 ; -; 2020-07-02, Greg King <gregdk@users.sf.net> +; 2022-03-30, Greg King <gregdk@users.sf.net> ; .include "zeropage.inc" @@ -39,7 +39,7 @@ .byte TGI_API_VERSION ; TGI API version number .addr $0000 ; Library reference .word 320 ; X resolution - .word 200 ; Y resolution + .word 240 ; Y resolution .byte <$0100 ; Number of drawing colors .byte 1 ; Number of screens available .byte 8 ; System font X size @@ -100,7 +100,7 @@ palette: .res $0100 bcolor := palette + 0 ; Background color color: .res 1 ; Stroke and fill index -mode: .res 1 ; Old text mode +text_mode: .res 1 ; Old text mode .data @@ -152,13 +152,15 @@ INIT: stz error ; #TGI_ERR_OK ; Save the current text mode. - lda SCREEN_MODE - sta mode + sec + jsr SCREEN_MODE + sta text_mode -; Switch into (320 x 200 x 256) graphics mode. +; Switch into (320 x 240 x 256) graphics mode. lda #GRAPH320 - jmp SCREEN_SET_MODE + clc + jmp SCREEN_MODE ; ------------------------------------------------------------------------ ; DONE: Will be called to switch the graphics device back into text mode. @@ -168,16 +170,9 @@ INIT: stz error ; #TGI_ERR_OK ; Must set an error code: NO DONE: -; Work around a prerelease 37 Kernal bug. -; VERA (graphics) layer 0 isn't disabled by SCREEN_SET_MODE. - - stz VERA::CTRL - lda VERA::DISP::VIDEO - and #<~VERA::DISP::ENABLE::LAYER0 - sta VERA::DISP::VIDEO - - lda mode - jmp SCREEN_SET_MODE + lda text_mode + clc + jmp SCREEN_MODE ; ------------------------------------------------------------------------ ; GETERROR: Return the error code in .A, and clear it. diff --git a/libsrc/cx16/videomode.s b/libsrc/cx16/videomode.s index 8fe797449..998316858 100644 --- a/libsrc/cx16/videomode.s +++ b/libsrc/cx16/videomode.s @@ -1,10 +1,15 @@ ; -; 2020-01-06, Greg King +; 2022-03-28, Greg King ; ; /* Video mode defines */ -; #define VIDEOMODE_40x30 0x00 -; #define VIDEOMODE_80x60 0x02 -; #define VIDEOMODE_320x200 0x80 +; #define VIDEOMODE_80x60 0x00 +; #define VIDEOMODE_80x30 0x01 +; #define VIDEOMODE_40x60 0x02 +; #define VIDEOMODE_40x30 0x03 +; #define VIDEOMODE_40x15 0x04 +; #define VIDEOMODE_20x30 0x05 +; #define VIDEOMODE_20x15 0x06 +; #define VIDEOMODE_320x240 0x80 ; #define VIDEOMODE_SWAP (-1) ; ; signed char __fastcall__ videomode (signed char Mode); @@ -16,25 +21,26 @@ .export _videomode - .import SCREEN_SET_MODE - .include "cx16.inc" + .import SCREEN_MODE .proc _videomode - ldx SCREEN_MODE ; Get old mode - phx - - jsr SCREEN_SET_MODE + sec ; Get old mode + pha + jsr SCREEN_MODE + plx + pha ; Save old mode + txa + clc ; Set new mode + jsr SCREEN_MODE pla ; Get back old mode ldx #>$0000 ; Clear high byte - bcs @L1 - rts + bcc @L1 -; The new mode is invalid. Go back to the old one. Return -1. +; The new mode is invalid. Return -1. -@L1: sta SCREEN_MODE dex txa - rts +@L1: rts .endproc diff --git a/libsrc/cx16/waitvsync.s b/libsrc/cx16/waitvsync.s index 6316a0483..dc0509223 100644 --- a/libsrc/cx16/waitvsync.s +++ b/libsrc/cx16/waitvsync.s @@ -1,5 +1,5 @@ ; -; 2020-01-08, Greg King +; 2021-04-01, Greg King ; ; void waitvsync (void); ; /* Wait for the start of the next video field. */ @@ -12,10 +12,10 @@ .include "cx16.inc" _waitvsync: - ldx VIA1::PRA ; (TIMER is in RAM bank 0) - stz VIA1::PRA + ldx RAM_BANK ; (TIMER is in RAM bank 0) + stz RAM_BANK lda TIMER + 2 : cmp TIMER + 2 beq :- ; Wait for next jiffy - stx VIA1::PRA + stx RAM_BANK rts From dfab2b27cdc592f825221bd634d356dccc9d0080 Mon Sep 17 00:00:00 2001 From: Wayne Parham <wayne@parhamdata.com> Date: Mon, 2 May 2022 11:44:47 -0500 Subject: [PATCH 1629/2710] Added myself as an external contributor for the Sym-1 target --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 1bbeb5909..530efdfdb 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ External contributors: * [jmr](https://github.com/jmr): compiler fixes * [karrika](https://github.com/karrika): Atari 7800 target * [Stephan Mühlstrasser](https://github.com/smuehlst): osic1p target +* [Wayne Parham](https://github.com/WayneParham): Sym-1 target *(The above list is incomplete, if you feel left out - please speak up or add yourself in a PR)* From 244da9c91150ad67e2dc2df35264d149a36b8ca8 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sun, 24 Apr 2022 00:39:04 +0200 Subject: [PATCH 1630/2710] missing fd_management and cleaning --- asminc/telestrat.inc | 30 ++++++++++++----------- libsrc/telestrat/close.s | 18 +++++++------- libsrc/telestrat/read.s | 51 +++++++++++++++++++++------------------- libsrc/telestrat/write.s | 10 +++++--- 4 files changed, 59 insertions(+), 50 deletions(-) diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index 703dbaa3b..38dfa31ca 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -1,7 +1,7 @@ ; ; Oric TELEMON definition -; TELEMON 2.4 & TELEMON 3.x -; For TELEMON 3.x check http://orix.oric.org +; TELEMON 2.4 & Orix +; For TOrix check http://orix.oric.org ; ; --------------------------------------------------------------------------- @@ -59,7 +59,7 @@ SCRNB := $28 ; Id of the current window ADKBD := $2A ; Address ASCII conversion table -PTR_READ_DEST := $2C ; Used for XFREAD and XWRITE only in TELEMON 3.x +PTR_READ_DEST := $2C ; Used for XFREAD and XWRITE only in Orix ADCLK := $40 ; Address for clock display TIMEUS := $42 @@ -249,10 +249,10 @@ XHIRES = $1A XEFFHI = $1B ; Clear hires screen XFILLM = $1C XMINMA = $1F -XVARS = $24 ; Only in TELEMON 3.x, in TELEMON 2.4, it's XNOMFI ($24) +XVARS = $24 ; Only in Orix, in TELEMON 2.4, it's XNOMFI ($24) XCRLF = $25 ; Jump a line and return to the beginning of the line XDECAY = $26 -XFREAD = $27 ; Only in TELEMON 3.x (bank 7 of Orix) +XFREAD = $27 ; Only in Orix XBINDX = $28 ; Convert a number into hex and displays on channel 0 XDECIM = $29 XHEXA = $2A ; Convert a number into hex @@ -261,7 +261,7 @@ XEDT = $2D ; Launch editor XINSER = $2E XSCELG = $2F ; Search a line in editor mode -XOPEN = $30 ; Only in TELEMON 3.x (bank 7 of Orix) +XOPEN = $30 ; Only in Orix XECRPR = $33 ; Displays prompt XCOSCR = $34 ; Switch off cursor XCSSCR = $35 ; Switch on cursor @@ -269,8 +269,8 @@ XSCRSE = $36 XSCROH = $37 ; Scroll up text screen XSCROB = $38 ; Scroll down text screen XSCRNE = $39 ; Load charset from rom to ram -XCLOSE = $3A ; Only in TELEMON 3.x close file (bank 7 of Orix) -XFWRITE = $3B ; Only in TELEMON 3.x write file (bank 7 of Orix) +XCLOSE = $3A ; Only in Orix close file +XFWRITE = $3B ; Only in Orix write file ; Clock primitive XRECLK = $3C ; Reset clock @@ -291,14 +291,14 @@ XGETCWD = $48 ; Get current CWD XPUTCWD = $49 ; Chdir ; File management -XMKDIR = $4B ; Create a folder. Only available in TELEMON 3.x (bank 7 of Orix) +XMKDIR = $4B ; Create a folder. Only available in Orix XHCHRS = $4C ; Hard copy hires ; File management -XRM = $4D ; Remove a folder or a file. Only available in TELEMON 3.x (bank 7 of Orix) +XRM = $4D ; Remove a folder or a file. Only available in Orix -XFWR = $4E ; Put a char on the first screen. Only available in TELEMON 3.x (bank 7 of Orix) +XFWR = $4E ; Put a char on the first screen. Only available in Orix ; Keyboard primitives XALLKB = $50 ; Read Keyboard, and populate KBDCOL @@ -314,7 +314,7 @@ XINIBU = $58 ; Initialize the buffer X XDEFBU = $59 ; Reset all value of the buffer XBUSY = $5A ; Test if the buffer is empty -XMALLOC = $5B ; Only in TELEMON 3.x (bank 7 of Orix) +XMALLOC = $5B ; Only in Orix ; RS232 primitives XSDUMP = $5C ; RS232 input dump @@ -326,7 +326,9 @@ XSSAVE = $5F ; Write a file to RS232 XMLOAD = $60 ; Read a file from Minitel XMSAVE = $61 ; Write a file to Minitel -XFREE = $62 ; Only in TELEMON 3.x (bank 7 of Orix) +XFREE = $62 ; Only in Orix + +XEXEC = $63 ; Only in Orix ; Next Minitel primitives XWCXFI = $63 ; Wait connection @@ -334,7 +336,7 @@ XLIGNE = $64 ; XDECON = $65 ; Minitel disconnection XMOUT = $66 ; Send a byte to minitel (from A) -XSOUT = $67 ; Send accumulator value (A) to RS232, available in TELEMON 2.4 & 3.x : if RS232 buffer is full, the Oric Telestrat freezes +XSOUT = $67 ; Send accumulator value (A) to RS232, available in TELEMON 2.4 : if RS232 buffer is full, the Oric Telestrat freezes XHRSSE = $8C ; Set hires position cursor XDRAWA = $8D ; Draw a line absolute diff --git a/libsrc/telestrat/close.s b/libsrc/telestrat/close.s index 17f6327f0..53186ff42 100644 --- a/libsrc/telestrat/close.s +++ b/libsrc/telestrat/close.s @@ -1,16 +1,16 @@ ; jede jede@oric.org 2017-01-22 - .export _close + .export _close - .import addysp,popax + .import addysp,popax - .include "zeropage.inc" - .include "telestrat.inc" - .include "errno.inc" - .include "fcntl.inc" + .include "zeropage.inc" + .include "telestrat.inc" + .include "errno.inc" + .include "fcntl.inc" -; int open (const char* name, int flags, ...); /* May take a mode argument */ +; int __fastcall__ close (int fd); .proc _close - BRK_TELEMON XCLOSE ; launch primitive ROM - rts + BRK_TELEMON XCLOSE ; Launch primitive ROM + rts .endproc diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index db764fc84..d2bfcc5f5 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -2,38 +2,41 @@ ; jede jede@oric.org 2017-01-22 ; - .export _read + .export _read - .import popax + .import popax - .include "zeropage.inc" - .include "telestrat.inc" + .include "zeropage.inc" + .include "telestrat.inc" ;int read (int fd, void* buf, unsigned count); .proc _read - sta ptr1 ; Count - stx ptr1+1 ; Count - jsr popax ; Get buf + sta ptr1 ; count + stx ptr1+1 ; count + jsr popax ; get buf - sta PTR_READ_DEST - stx PTR_READ_DEST+1 - sta ptr2 ; In order to calculate nb of bytes read - stx ptr2+1 ; + sta PTR_READ_DEST + stx PTR_READ_DEST+1 + sta ptr2 ; in order to calculate nb of bytes read + stx ptr2+1 + jsr popax ; get FD - lda ptr1 ; - ldy ptr1+1 ; - BRK_TELEMON XFREAD ; calls telemon30 routine - ; Compute nb of bytes read - lda PTR_READ_DEST+1 - sec - sbc ptr2+1 - tax - lda PTR_READ_DEST - sec - sbc ptr2 - ; Here A and X contains number of bytes read - rts + tax ; send FD to X + + lda ptr1 + ldy ptr1+1 + BRK_TELEMON XFREAD + ; compute nb of bytes read + lda PTR_READ_DEST+1 + sec + sbc ptr2+1 + tax + lda PTR_READ_DEST + sec + sbc ptr2 + ; here A and X contains number of bytes read + rts .endproc diff --git a/libsrc/telestrat/write.s b/libsrc/telestrat/write.s index 215db3e52..2ce2657ac 100644 --- a/libsrc/telestrat/write.s +++ b/libsrc/telestrat/write.s @@ -3,8 +3,8 @@ .export _write .import popax, popptr1 - .importzp ptr1, ptr2, ptr3, tmp1 + .include "zeropage.inc" .include "telestrat.inc" ; int write (int fd, const void* buf, int count); @@ -20,7 +20,10 @@ stx ptr2 ; save count with each byte incremented separately jsr popptr1 ; get buf - jsr popax ; get fd and discard + + jsr popax ; get fd + + sta tmp1 ; save fd ; if fd=0001 then it stdout cpx #0 @@ -37,6 +40,7 @@ next: sta PTR_READ_DEST+1 lda ptr3 ldy ptr3+1 + ldx tmp1 ; send fd in X BRK_TELEMON XFWRITE ; compute nb of bytes written @@ -74,7 +78,7 @@ L3: inc ptr1+1 jmp L1 - ; No error, return count + ; no error, return count L9: lda ptr3 ldx ptr3+1 From e1b8508798a6178f8bc8859c90529b3980338df5 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sun, 24 Apr 2022 00:41:12 +0200 Subject: [PATCH 1631/2710] fix typo --- asminc/telestrat.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index 38dfa31ca..682696887 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -1,7 +1,7 @@ ; ; Oric TELEMON definition ; TELEMON 2.4 & Orix -; For TOrix check http://orix.oric.org +; For Orix check http://orix.oric.org ; ; --------------------------------------------------------------------------- From e1fbb8465bba96f793ff4f4e786f24bbabd05a0f Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sun, 24 Apr 2022 15:15:10 +0200 Subject: [PATCH 1632/2710] fix spaces --- libsrc/telestrat/read.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index d2bfcc5f5..f31909f45 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -20,15 +20,15 @@ sta PTR_READ_DEST stx PTR_READ_DEST+1 sta ptr2 ; in order to calculate nb of bytes read - stx ptr2+1 + stx ptr2+1 jsr popax ; get FD tax ; send FD to X lda ptr1 - ldy ptr1+1 - BRK_TELEMON XFREAD + ldy ptr1+1 + BRK_TELEMON XFREAD ; compute nb of bytes read lda PTR_READ_DEST+1 sec From 16d896b73fb05787a3c1fccab076dd5d06ac5f0f Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Thu, 5 May 2022 22:43:06 +0200 Subject: [PATCH 1633/2710] fix mkdir --- libsrc/telestrat/sysmkdir.s | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libsrc/telestrat/sysmkdir.s b/libsrc/telestrat/sysmkdir.s index 259be8d7c..0ca897c17 100644 --- a/libsrc/telestrat/sysmkdir.s +++ b/libsrc/telestrat/sysmkdir.s @@ -3,6 +3,8 @@ ; ; unsigned char _sysmkdir (const char* name, ...); ; +; This routine only works with Orix + .export __sysmkdir .import addysp, popax @@ -10,7 +12,6 @@ .include "telestrat.inc" .include "zeropage.inc" - __sysmkdir: ; Throw away all parameters except the name dey @@ -20,11 +21,13 @@ __sysmkdir: ; Get name jsr popax - ; Call telemon primitive + stx tmp1 + ldy tmp1 + ldx #$00 ; X register is used to set if all folders must be created + + ; Call telemon primitive + BRK_TELEMON(XMKDIR) rts - - - From e9bf0dd64fdb90912c91db790082c13a873ade85 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Thu, 5 May 2022 22:50:37 +0200 Subject: [PATCH 1634/2710] fix space --- libsrc/telestrat/sysmkdir.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/telestrat/sysmkdir.s b/libsrc/telestrat/sysmkdir.s index 0ca897c17..6b0d62264 100644 --- a/libsrc/telestrat/sysmkdir.s +++ b/libsrc/telestrat/sysmkdir.s @@ -27,7 +27,7 @@ __sysmkdir: ldx #$00 ; X register is used to set if all folders must be created ; Call telemon primitive - + BRK_TELEMON(XMKDIR) rts From 6eeaf7485c656abb7f00635235c3a775c38010fa Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Wed, 27 Apr 2022 16:17:04 +0000 Subject: [PATCH 1635/2710] build: allow empty prefix there was some concern that this will break windows' way of doing file lookups relatively from the binary, rather than via hardcoded locations, but so far each occurence adding e.g. "CA65_INC" to the pathsearch is already shielded with an #ifndef _WIN32. addressing #1726 --- doc/Makefile | 1 - libsrc/Makefile | 1 - samples/Makefile | 1 - src/Makefile | 3 +-- 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/doc/Makefile b/doc/Makefile index bb8f551ad..bfdf0cce3 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -46,7 +46,6 @@ clean: $(RM) -r ../html ../info install: - $(if $(PREFIX),,$(error variable "PREFIX" must be set)) ifeq ($(wildcard ../html),../html) $(INSTALL) -d $(DESTDIR)$(htmldir) $(INSTALL) -m0644 ../html/*.* $(DESTDIR)$(htmldir) diff --git a/libsrc/Makefile b/libsrc/Makefile index 177314bdf..2018de801 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -96,7 +96,6 @@ INSTALL = install define INSTALL_recipe -$(if $(PREFIX),,$(error variable "PREFIX" must be set)) $(INSTALL) -d $(DESTDIR)$(datadir)/$(dir) $(INSTALL) -m0644 ../$(dir)/*.* $(DESTDIR)$(datadir)/$(dir) diff --git a/samples/Makefile b/samples/Makefile index 9732cfac7..01ad6f983 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -525,7 +525,6 @@ INSTALL = install samplesdir = $(PREFIX)/share/cc65/samples install: - $(if $(PREFIX),,$(error variable "PREFIX" must be set)) $(INSTALL) -d $(DESTDIR)$(samplesdir) $(INSTALL) -d $(DESTDIR)$(samplesdir)/geos $(INSTALL) -d $(DESTDIR)$(samplesdir)/tutorial diff --git a/src/Makefile b/src/Makefile index 75b92394e..8356d0001 100644 --- a/src/Makefile +++ b/src/Makefile @@ -26,7 +26,7 @@ PROGS = ar65 \ .SUFFIXES: bindir := $(PREFIX)/bin -datadir := $(if $(PREFIX),$(PREFIX)/share/cc65,$(abspath ..)) +datadir := $(PREFIX)/share/cc65 CA65_INC = $(datadir)/asminc CC65_INC = $(datadir)/include @@ -111,7 +111,6 @@ $(RM) /usr/local/bin/$(prog) endef # UNAVAIL_recipe install: - $(if $(PREFIX),,$(error variable "PREFIX" must be set)) $(INSTALL) -d $(DESTDIR)$(bindir) $(INSTALL) ../bin/* $(DESTDIR)$(bindir) From 6a5375ace4e34553f14b929a059d75c914ef291b Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Wed, 27 Apr 2022 17:33:41 +0000 Subject: [PATCH 1636/2710] implement AddSubSearchPathFromWinBin() counterpart for unix this looks up paths relative to the binary used to start the specific application. --- src/common/searchpath.c | 138 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 126 insertions(+), 12 deletions(-) diff --git a/src/common/searchpath.c b/src/common/searchpath.c index 70237a1c9..ac507d924 100644 --- a/src/common/searchpath.c +++ b/src/common/searchpath.c @@ -44,6 +44,12 @@ #else /* Anyone else */ # include <unistd.h> +# include <stdio.h> +# include <limits.h> +# ifndef PATH_MAX +# define PATH_MAX 4096 +# endif +# include "cmdline.h" #endif /* common */ @@ -157,18 +163,127 @@ void AddSubSearchPathFromEnv (SearchPaths* P, const char* EnvVar, const char* Su SB_Done (&Dir); } +#ifdef _WIN32 +#define PATHSEP "\\" +#undef PATH_MAX +#define PATH_MAX _MAX_PATH +#else +#define PATHSEP "/" + +/* + on POSIX-compatible operating system, a binary can be started in + 3 distinct ways: + + 1) using absolute path; in which case argv[0] starts with '/' + 2) using relative path; in which case argv[0] contains '/', but + does not start with it. e.g.: ./ca65 ; bin/cc65 + 3) using PATH environment variable, which is a colon-separated + list of directories which will be searched for a command + name used unprefixed. see execlp() and execvp() in man 3p exec: + +> The argument file is used to construct a pathname that identifies the new +> process image file. If the file argument contains a <slash> character, +> the file argument shall be used as the pathname for this file. +> Otherwise, the path prefix for this file is obtained by a search of the +> directories passed as the environment variable PATH (see the Base +> Definitions volume of POSIX.1*2008, Chapter 8, Environment Variables). +> If this environment variable is not present, the results of the search +> are implementation-defined. + +*/ + + + +static int SearchPathBin(const char* bin, char* buf, size_t buflen) +/* search colon-separated list of paths in PATH environment variable +** for the full path of argv[0]. +** returns 1 if successfull, in which case buf will contain the full path. +** bin = binary name (from argv[0]), buf = work buffer, buflen = sizeof buf +*/ +{ + char* p = getenv ("PATH"); + char* o; + size_t l; + + if (!p) { + return 0; + } + for (;;) { + o = buf; + l = buflen; + while (l && *p && *p != ':') { + *(o++) = *(p++); + l--; + } + snprintf (o, l, "/%s", bin); + if (access (buf, X_OK) == 0) { + return 1; + } + if (*p == ':') { + p++; + } else if (!p) { + break; + } + } + return 0; +} + + + +static char* MyDirname(char* in) +/* returns the dirname() part of a filename. +** the passed string is modified in place, then returned. +*/ +{ + char* p = strrchr (in, '/'); + + if (p) { + *p = 0; + } + return in; +} + + + +static char* GetProgPath(char* pathbuf, char* a0) +/* search for the full path of the binary using the argv[0] parameter +** passed to int main(), according to the description above. +** if the binary was started using a relative path, realpath(3p) will +** turn the relative path into an absolute path with pwd resolved, and +** gratuitous path components such as "./" or ".." removed. +** +** argument "pathbuf" is a work buffer of size PATH_MAX, +** "a0" the original argv[0]. +** returns pathbuf with the full path of the binary, minus the binary +** name itself. +*/ +{ + if (a0[0] == '/') { + strcpy (pathbuf, a0); + } else if (a0[0] == '.' || strrchr (a0, '/')) { + /* realpath returns the work buffer passed to it, so checking the + return value is superfluous. gcc11 warns anyway. */ + if (realpath (a0, pathbuf)) {} + } else { + SearchPathBin (a0, pathbuf, PATH_MAX); + } + return MyDirname(pathbuf); +} + +#endif + void AddSubSearchPathFromWinBin (SearchPaths* P, const char* SubDir) { /* Windows only: ** Add a search path from the running binary, adding a subdirectory to ** the parent directory of the directory containing the binary. */ -#if defined(_WIN32) - - char Dir[_MAX_PATH]; char* Ptr; + char Dir[PATH_MAX]; + +#if defined(_WIN32) if (GetModuleFileName (NULL, Dir, _MAX_PATH) == 0) { return; @@ -181,12 +296,18 @@ void AddSubSearchPathFromWinBin (SearchPaths* P, const char* SubDir) } *Ptr = '\0'; +#else + + GetProgPath(Dir, ArgVec[0]); + +#endif + /* Check for 'bin' directory */ - Ptr = strrchr (Dir, '\\'); + Ptr = strrchr (Dir, PATHSEP[0]); if (Ptr == 0) { return; } - if (strcmp (Ptr++, "\\bin") != 0) { + if (strcmp (Ptr++, PATHSEP "bin") != 0) { return; } @@ -195,13 +316,6 @@ void AddSubSearchPathFromWinBin (SearchPaths* P, const char* SubDir) /* Add the search path */ AddSearchPath (P, Dir); - -#else - - (void) P; - (void) SubDir; - -#endif } From 6f74a2e9c79a50301466c55346377bcf238db83f Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Wed, 27 Apr 2022 21:11:01 +0000 Subject: [PATCH 1637/2710] rename AddSubSearchPathFromWinBin to AddSubSearchPathFromBin --- src/ca65/incpath.c | 2 +- src/cc65/incpath.c | 2 +- src/cl65/main.c | 2 +- src/common/searchpath.c | 2 +- src/common/searchpath.h | 5 ++--- src/ld65/filepath.c | 6 +++--- 6 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/ca65/incpath.c b/src/ca65/incpath.c index 42e54b2da..8ea67df6f 100644 --- a/src/ca65/incpath.c +++ b/src/ca65/incpath.c @@ -80,5 +80,5 @@ void FinishIncludePaths (void) #endif /* Add paths relative to the parent directory of the Windows binary. */ - AddSubSearchPathFromWinBin (IncSearchPath, "asminc"); + AddSubSearchPathFromBin (IncSearchPath, "asminc"); } diff --git a/src/cc65/incpath.c b/src/cc65/incpath.c index d32614cf9..85f6e070b 100644 --- a/src/cc65/incpath.c +++ b/src/cc65/incpath.c @@ -81,5 +81,5 @@ void FinishIncludePaths (void) #endif /* Add paths relative to the parent directory of the Windows binary. */ - AddSubSearchPathFromWinBin (SysIncSearchPath, "include"); + AddSubSearchPathFromBin (SysIncSearchPath, "include"); } diff --git a/src/cl65/main.c b/src/cl65/main.c index 701355904..5d84fb625 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -1218,7 +1218,7 @@ static void OptPrintTargetPath (const char* Opt attribute ((unused)), #if defined(CL65_TGT) && !defined(_WIN32) AddSearchPath (TargetPaths, CL65_TGT); #endif - AddSubSearchPathFromWinBin (TargetPaths, "target"); + AddSubSearchPathFromBin (TargetPaths, "target"); TargetPath = GetSearchPath (TargetPaths, 0); while (*TargetPath) { diff --git a/src/common/searchpath.c b/src/common/searchpath.c index ac507d924..f1ee0b6e2 100644 --- a/src/common/searchpath.c +++ b/src/common/searchpath.c @@ -274,7 +274,7 @@ static char* GetProgPath(char* pathbuf, char* a0) #endif -void AddSubSearchPathFromWinBin (SearchPaths* P, const char* SubDir) +void AddSubSearchPathFromBin (SearchPaths* P, const char* SubDir) { /* Windows only: ** Add a search path from the running binary, adding a subdirectory to diff --git a/src/common/searchpath.h b/src/common/searchpath.h index f078c0799..371388d38 100644 --- a/src/common/searchpath.h +++ b/src/common/searchpath.h @@ -75,9 +75,8 @@ void AddSubSearchPathFromEnv (SearchPaths* P, const char* EnvVar, const char* Su ** the environment variable value. */ -void AddSubSearchPathFromWinBin (SearchPaths* P, const char* SubDir); -/* Windows only: -** Add a search path from the running binary, adding a subdirectory to +void AddSubSearchPathFromBin (SearchPaths* P, const char* SubDir); +/* Add a search path from the running binary, adding a subdirectory to ** the parent directory of the directory containing the binary. */ diff --git a/src/ld65/filepath.c b/src/ld65/filepath.c index f722ad34b..1ceb2333e 100644 --- a/src/ld65/filepath.c +++ b/src/ld65/filepath.c @@ -99,7 +99,7 @@ void InitSearchPaths (void) #endif /* Add paths relative to the parent directory of the Windows binary. */ - AddSubSearchPathFromWinBin (LibDefaultPath, "lib"); - AddSubSearchPathFromWinBin (ObjDefaultPath, "lib"); - AddSubSearchPathFromWinBin (CfgDefaultPath, "cfg"); + AddSubSearchPathFromBin (LibDefaultPath, "lib"); + AddSubSearchPathFromBin (ObjDefaultPath, "lib"); + AddSubSearchPathFromBin (CfgDefaultPath, "cfg"); } From 546e82965ddcf523e5369e1b2f4fee5c8ae353e3 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Sat, 30 Apr 2022 15:01:58 +0200 Subject: [PATCH 1638/2710] Try reading from /proc/self first on linux, this is needed to make the edgy "make avail" work --- src/common/searchpath.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/common/searchpath.c b/src/common/searchpath.c index f1ee0b6e2..ebf14106f 100644 --- a/src/common/searchpath.c +++ b/src/common/searchpath.c @@ -296,10 +296,23 @@ void AddSubSearchPathFromBin (SearchPaths* P, const char* SubDir) } *Ptr = '\0'; +#elif defined(__linux__) + + /* reading from proc will return the real location, excluding symlinked + pathes - which is needed for certain edgy cases */ + if (readlink("/proc/self/exe", Dir, sizeof(Dir) - 1) < 0) { + GetProgPath(Dir, ArgVec[0]); + } else { + /* Remove binary name */ + Ptr = strrchr (Dir, PATHSEP[0]); + if (Ptr == 0) { + return; + } + *Ptr = '\0'; + } + #else - GetProgPath(Dir, ArgVec[0]); - #endif /* Check for 'bin' directory */ From 5867d3a020f6b8802ab6bd0deb6b54340b7ff0f1 Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Mon, 2 May 2022 08:22:21 +0000 Subject: [PATCH 1639/2710] change GetProgPath() to return full & resolved binary path GetProgPath() now resolves the path derived from argv[0] always via realpath(3p) to its real location in the filesystem, and returns the path including binary name, effectively making it work like windows' GetModuleFileName(), so we can re-use the existing code to strip the trailing binary name. since symlinks are now always resolved, we no longer need the special case code for linux to use /proc/self/exe for this purpose. --- src/common/searchpath.c | 73 ++++++++++++++--------------------------- 1 file changed, 24 insertions(+), 49 deletions(-) diff --git a/src/common/searchpath.c b/src/common/searchpath.c index ebf14106f..fc23f47cb 100644 --- a/src/common/searchpath.c +++ b/src/common/searchpath.c @@ -232,44 +232,32 @@ static int SearchPathBin(const char* bin, char* buf, size_t buflen) -static char* MyDirname(char* in) -/* returns the dirname() part of a filename. -** the passed string is modified in place, then returned. -*/ -{ - char* p = strrchr (in, '/'); - - if (p) { - *p = 0; - } - return in; -} - - - static char* GetProgPath(char* pathbuf, char* a0) /* search for the full path of the binary using the argv[0] parameter ** passed to int main(), according to the description above. -** if the binary was started using a relative path, realpath(3p) will -** turn the relative path into an absolute path with pwd resolved, and -** gratuitous path components such as "./" or ".." removed. +** +** the binary name will be passed to realpath(3p) to have all symlinks +** resolved and gratuitous path components like "../" removed. ** ** argument "pathbuf" is a work buffer of size PATH_MAX, ** "a0" the original argv[0]. -** returns pathbuf with the full path of the binary, minus the binary -** name itself. +** returns pathbuf with the full path of the binary. */ { - if (a0[0] == '/') { - strcpy (pathbuf, a0); - } else if (a0[0] == '.' || strrchr (a0, '/')) { - /* realpath returns the work buffer passed to it, so checking the - return value is superfluous. gcc11 warns anyway. */ - if (realpath (a0, pathbuf)) {} - } else { - SearchPathBin (a0, pathbuf, PATH_MAX); + char tmp[PATH_MAX]; + + if (!strchr(a0, '/')) { + /* path doesn't contain directory separator, so it was looked up + via PATH environment variable */ + SearchPathBin (a0, tmp, PATH_MAX); + a0 = tmp; } - return MyDirname(pathbuf); + + /* realpath returns the work buffer passed to it, so checking the + return value is superfluous. gcc11 warns anyway. */ + if (realpath (a0, pathbuf)) {} + + return pathbuf; } #endif @@ -289,32 +277,19 @@ void AddSubSearchPathFromBin (SearchPaths* P, const char* SubDir) return; } +#else + + GetProgPath(Dir, ArgVec[0]); + +#endif + /* Remove binary name */ - Ptr = strrchr (Dir, '\\'); + Ptr = strrchr (Dir, PATHSEP[0]); if (Ptr == 0) { return; } *Ptr = '\0'; -#elif defined(__linux__) - - /* reading from proc will return the real location, excluding symlinked - pathes - which is needed for certain edgy cases */ - if (readlink("/proc/self/exe", Dir, sizeof(Dir) - 1) < 0) { - GetProgPath(Dir, ArgVec[0]); - } else { - /* Remove binary name */ - Ptr = strrchr (Dir, PATHSEP[0]); - if (Ptr == 0) { - return; - } - *Ptr = '\0'; - } - -#else - GetProgPath(Dir, ArgVec[0]); -#endif - /* Check for 'bin' directory */ Ptr = strrchr (Dir, PATHSEP[0]); if (Ptr == 0) { From d365b8a4eeb6066f948aca53b661ad184a61683c Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Thu, 5 May 2022 14:24:02 +0200 Subject: [PATCH 1640/2710] Adjust comments --- src/common/searchpath.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/common/searchpath.c b/src/common/searchpath.c index fc23f47cb..3628dab5c 100644 --- a/src/common/searchpath.c +++ b/src/common/searchpath.c @@ -263,11 +263,14 @@ static char* GetProgPath(char* pathbuf, char* a0) #endif void AddSubSearchPathFromBin (SearchPaths* P, const char* SubDir) -{ -/* Windows only: -** Add a search path from the running binary, adding a subdirectory to +/* Add a search path from the running binary, adding a subdirectory to ** the parent directory of the directory containing the binary. +** +** currently this will work on POSIX systems and on Windows. Should +** we run into build errors on systems that are neither, we must add +** another exception below. */ +{ char* Ptr; char Dir[PATH_MAX]; @@ -277,7 +280,7 @@ void AddSubSearchPathFromBin (SearchPaths* P, const char* SubDir) return; } -#else +#else /* POSIX */ GetProgPath(Dir, ArgVec[0]); From 395e072c3bedc5f91d80c93a1b70005b5fc594d8 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Wed, 20 Apr 2022 12:49:30 +0200 Subject: [PATCH 1641/2710] typo --- Contributing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Contributing.md b/Contributing.md index cf4daa9e6..18243b3bb 100644 --- a/Contributing.md +++ b/Contributing.md @@ -20,7 +20,7 @@ This is an ongoing controversial topic - everyone knows that. However, the follo * No extra spaces at the end of lines. * All text files must end with new-line characters. Don't leave the last line "dangling". -The (bash) scipts used to check the above rules can be found in ```.github/check```. You can also run all checks using ```make check```. +The (bash) scripts used to check the above rules can be found in ```.github/check```. You can also run all checks using ```make check```. ### misc From f8a940bce4629885a405be954196cdb6db5aeea4 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 3 Apr 2022 00:06:45 +0200 Subject: [PATCH 1642/2710] Some clean-up One exit() too much file is not optional --- util/gamate/gamate-fixcart.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/util/gamate/gamate-fixcart.c b/util/gamate/gamate-fixcart.c index ba09ac083..65c0c5311 100644 --- a/util/gamate/gamate-fixcart.c +++ b/util/gamate/gamate-fixcart.c @@ -1,4 +1,3 @@ - #include <stdlib.h> #include <stdio.h> @@ -7,8 +6,7 @@ unsigned int n, i, c; void usage(char *arg) { - printf("usage: %s [file]\n", arg); - exit(-1); + printf("usage: %s file\n", arg); } int main(int argc, char *argv[]) { @@ -33,5 +31,5 @@ int main(int argc, char *argv[]) { fputc((n >> 8) & 0xff, in); fclose(in); - return (0); + return 0; } From bfe9ddeb6a0569f9cfe25886859553b365e73633 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Fri, 6 May 2022 22:13:33 +0200 Subject: [PATCH 1643/2710] Update Contributing.md --- Contributing.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Contributing.md b/Contributing.md index 18243b3bb..acaa396b1 100644 --- a/Contributing.md +++ b/Contributing.md @@ -51,6 +51,9 @@ color := $0787 The following is still very incomplete - if in doubt please look at existing sourcefiles and adapt to the existing style * Your files should obey the C89 standard. +* We generally have a "no warnings" policy +* Warnings must not be hidden by using typecasts - fix the code instead + * In printf-style functions use the PRIX64 (and similar) macros to deal with 64bit values * The normal indentation width should be four spaces. * You must use ANSI C comments (```/* */```); you must not use C++ comments (```//```). * When you add functions to an existing file, you should separate them by the same number of blank lines that separate the functions that already are in that file. From ab7079df006b216ec541cd1e5784f5d3226b2032 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 13:18:27 +0200 Subject: [PATCH 1644/2710] add sourcelines to the generated asm for easier inspection, redirect output of sim65, including cycle count, into a seperate .out file per program --- test/val/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/val/Makefile b/test/val/Makefile index 1a9fa9a45..acac670cb 100644 --- a/test/val/Makefile +++ b/test/val/Makefile @@ -22,7 +22,7 @@ ifdef QUIET NULLERR = 2>$(NULLDEV) endif -SIM65FLAGS = -x 5000000000 +SIM65FLAGS = -x 5000000000 -c CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) CA65 := $(if $(wildcard ../../bin/ca65*),..$S..$Sbin$Sca65,ca65) @@ -48,10 +48,10 @@ define PRG_template $(WORKDIR)/%.$1.$2.prg: %.c | $(WORKDIR) $(if $(QUIET),echo val/$$*.$1.$2.prg) - $(CC65) -t sim$2 $$(CC65FLAGS) -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CC65) -t sim$2 $$(CC65FLAGS) --add-source -$1 -o $$(@:.prg=.s) $$< $(NULLERR) $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) - $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) + $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/$$@.out endef # PRG_template From 4ddbe5f8388771b9f9f0d772ce5fe5e2d31b0096 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 13:19:32 +0200 Subject: [PATCH 1645/2710] test related to issue #1652, shows regression broken by #1231 and the case that #1231 improved. --- test/val/bug1652-optimizer.c | 122 +++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 test/val/bug1652-optimizer.c diff --git a/test/val/bug1652-optimizer.c b/test/val/bug1652-optimizer.c new file mode 100644 index 000000000..7926ef770 --- /dev/null +++ b/test/val/bug1652-optimizer.c @@ -0,0 +1,122 @@ + +/* #1652 - Regression in code optimization */ + +#include <stdlib.h> + +/* better before pr#1231 + +before: + + jsr pusha + ldy #$01 + ldx #$00 + lda (sp),y + beq L0005 + lda (sp,x) + beq L0005 + txa + jmp incsp2 ; <-- +L0005: tya + jmp incsp2 + +after: + + jsr pusha + ldy #$01 + ldx #$00 + lda (sp),y + beq L0004 + lda (sp,x) + beq L0004 + txa + jmp L0001 ; <-- +L0004: tya +L0001: jmp incsp2 + +*/ + +int foo(unsigned char bar, unsigned char baz) +{ + return (bar == 0 || baz == 0); +} + +/* worse before pr#1231 + +before: +; +; y = 1; +; + lda #$01 + sta _y +; +; (*tablePtr)[y][x] = 83; +; + ldx #$00 + lda _y + jsr aslax2 + clc + adc _tablePtr + pha + txa + adc _tablePtr+1 + tax + pla + clc + adc _x + bcc L0019 + inx +L0019: + sta ptr1 + stx ptr1+1 + lda #$53 + ldy #$00 + sta (ptr1),y + +after: + +; +; y = 1; +; + lda #$01 + sta _y +; +; (*tablePtr)[y][x] = 83; +; + ldx #$00 + lda _y + jsr aslax2 + clc + adc _tablePtr + sta ptr1 + txa + adc _tablePtr+1 + sta ptr1+1 + ldy _x + lda #$53 + sta (ptr1),y +*/ + +typedef unsigned char array_t[4][4]; + +static array_t table = { + {12, 13, 14, 15}, + { 8, 9, 10, 11}, + { 4, 5, 6, 7}, + { 0, 1, 2, 3} +}; +static array_t *tablePtr = &table; + +static unsigned char y = 0, x; + +void pointed_array(void) +{ + x = 3; + y = 1; + (*tablePtr)[y][x] = 83; +} + +int main(void) +{ + pointed_array(); + return foo(2, 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} From 8ec41083e97bb91664d1e681cd32e61b33bfa89c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 13:20:18 +0200 Subject: [PATCH 1646/2710] add extra optimizer step that replaces BRA by JMP if the target is external --- src/cc65/coptjmp.c | 31 +++++++++++++++++++++++++++++++ src/cc65/coptjmp.h | 3 +++ 2 files changed, 34 insertions(+) diff --git a/src/cc65/coptjmp.c b/src/cc65/coptjmp.c index dd092a5ad..9dd4a29c5 100644 --- a/src/cc65/coptjmp.c +++ b/src/cc65/coptjmp.c @@ -194,6 +194,37 @@ unsigned OptBranchDist (CodeSeg* S) +unsigned OptBranchDist2 (CodeSeg* S) +/* Change BRA to JMP if target is an external symbol */ +{ + unsigned Changes = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + if ((CPUIsets[CPU] & (CPU_ISET_65SC02 |CPU_ISET_6502DTV)) != 0 && /* CPU has BRA */ + (E->Info & OF_UBRA) != 0 && /* is a unconditional branch */ + E->JumpTo == NULL) { /* target is extern */ + /* BRA jumps to external symbol and must be replaced by a JMP on the 65C02 CPU */ + CE_ReplaceOPC (E, OP65_JMP); + ++Changes; + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + /*****************************************************************************/ /* Replace jumps to RTS by RTS */ /*****************************************************************************/ diff --git a/src/cc65/coptjmp.h b/src/cc65/coptjmp.h index 4cb7a2792..8df53415d 100644 --- a/src/cc65/coptjmp.h +++ b/src/cc65/coptjmp.h @@ -52,6 +52,9 @@ unsigned OptBranchDist (CodeSeg* S); /* Change branches for the distance needed. */ +unsigned OptBranchDist2 (CodeSeg* S); +/* If BRA points to an external symbol, change it to JMP */ + unsigned OptRTSJumps1 (CodeSeg* S); /* Replace jumps to RTS by RTS */ From 4285a3023664f3d283347e60295388bba3908476 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 13:22:10 +0200 Subject: [PATCH 1647/2710] At the end of the optimizer run, remove jump cascades again. fixes the regression reported in #1652 --- src/cc65/codeopt.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index 29fa79d26..9c90a0e5f 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -117,6 +117,7 @@ static OptFunc DOptBNegAX3 = { OptBNegAX3, "OptBNegAX3", 100, 0, static OptFunc DOptBNegAX4 = { OptBNegAX4, "OptBNegAX4", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptBoolTrans = { OptBoolTrans, "OptBoolTrans", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptBranchDist = { OptBranchDist, "OptBranchDist", 0, 0, 0, 0, 0, 0 }; +static OptFunc DOptBranchDist2 = { OptBranchDist2, "OptBranchDist2", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptCmp1 = { OptCmp1, "OptCmp1", 42, 0, 0, 0, 0, 0 }; static OptFunc DOptCmp2 = { OptCmp2, "OptCmp2", 85, 0, 0, 0, 0, 0 }; static OptFunc DOptCmp3 = { OptCmp3, "OptCmp3", 75, 0, 0, 0, 0, 0 }; @@ -222,6 +223,7 @@ static OptFunc* OptFuncs[] = { &DOptBNegAX4, &DOptBoolTrans, &DOptBranchDist, + &DOptBranchDist2, &DOptCmp1, &DOptCmp2, &DOptCmp3, @@ -849,6 +851,10 @@ static unsigned RunOptGroup7 (CodeSeg* S) /* Replace JSR followed by RTS to JMP */ C += RunOptFunc (S, &DOptRTS, 1); + /* Replace JMP/BRA to JMP by direct JMP */ + C += RunOptFunc (S, &DOptJumpCascades, 1); + C += RunOptFunc (S, &DOptBranchDist2, 1); + Changes += C; /* If we had changes, we must run dead code elimination again, ** since the changes may have introduced dead code. From cb5ced7c9d85a3f9b5fb4d0696049151ec5883cf Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 18:46:12 +0200 Subject: [PATCH 1648/2710] Update Contributing.md --- Contributing.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/Contributing.md b/Contributing.md index acaa396b1..9572dd6e0 100644 --- a/Contributing.md +++ b/Contributing.md @@ -2,6 +2,8 @@ This document contains all kinds of information that you should know if you want (''Note:'' The word "must" indicates a requirement. The word "should" indicates a recomendation.) +*this is work in progress and is constantly updated - if in doubt, please ask* + # generally * You must obey these rules when contributing new code or documentation to cc65. We are well aware that not all existing code may respect all rules outlined here - but this is no reason for you not to respect them. @@ -88,6 +90,21 @@ if (check()) { char* nextLine (FILE* f); </pre> +### Header files + +Headers that belong to the standard library (libc) must conform with the C standard. That means: +* all non standard functions, or functions that only exist in a certain standard, should be in #ifdefs + * the same is true for macros or typedefs +<pre> +#if __CC65_STD__ == __CC65_STD_C99__ +/* stuff that only exists in C99 here */ +#endif +#if __CC65_STD__ == __CC65_STD_CC65__ +/* non standard stuff here */ +#endif +</pre> +You can refer to Annex B of the ISO C99 standard ([here](https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf) is the draft). + ## Assembly Sources * Op-code mnemonics must have lower-case letters. The names of instruction macroes may have upper-case letters. @@ -135,3 +152,10 @@ The only exception to the above are actions that are exclusive to the github act ## Wiki * The Wiki is strictly for additional information that does not fit into the regular user manual (LinuxDoc). The wiki must not duplicate any information that is present in the user manual + +# Roadmap / TODOs / open Ends + +## Test suite + +* specific tests to check the optimizer (rather than the codegenerator) are needed. +* we need more specific tests to check standard conformance of the library headers From 738d6dba8805bee3dfeea0416af97b93c9e42e2e Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 19:27:32 +0200 Subject: [PATCH 1649/2710] Update Contributing.md --- Contributing.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Contributing.md b/Contributing.md index 9572dd6e0..5861a9c2e 100644 --- a/Contributing.md +++ b/Contributing.md @@ -155,6 +155,10 @@ The only exception to the above are actions that are exclusive to the github act # Roadmap / TODOs / open Ends +## Documentation + +* the printf family of function does not completely implement all printf modifiers and does not behave as expected in some cases - all this should be documented in detail + ## Test suite * specific tests to check the optimizer (rather than the codegenerator) are needed. From db2dfc922615b4c7c5b7c8eabc0bd45e9f015915 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 18:47:55 +0200 Subject: [PATCH 1650/2710] must include stdarg.h to use varargs --- libsrc/geos-common/dlgbox/messagebox.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libsrc/geos-common/dlgbox/messagebox.c b/libsrc/geos-common/dlgbox/messagebox.c index fd4a5cd11..141a84b89 100644 --- a/libsrc/geos-common/dlgbox/messagebox.c +++ b/libsrc/geos-common/dlgbox/messagebox.c @@ -7,6 +7,7 @@ #include <geos.h> #include <stdio.h> +#include <stdarg.h> void _mbprintout(void); From 4579d584b1845483856bf5acbe33bbc6188350a4 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 18:49:48 +0200 Subject: [PATCH 1651/2710] fix some header files to conform with C99 hopefully, should fix issue #1670 --- include/ctype.h | 6 ++++-- include/limits.h | 5 +++-- include/stdio.h | 50 +++++++++++++++++++++++++++++++++++------------- include/string.h | 15 ++++++++++----- include/time.h | 38 +++++++++++++++++++----------------- 5 files changed, 74 insertions(+), 40 deletions(-) diff --git a/include/ctype.h b/include/ctype.h index d842228e9..6e299f859 100644 --- a/include/ctype.h +++ b/include/ctype.h @@ -57,7 +57,9 @@ /* Character classification functions */ int __fastcall__ isalnum (int c); int __fastcall__ isalpha (int c); -int __fastcall__ isascii (int c); +#if __CC65_STD__ >= __CC65_STD_CC65__ +int __fastcall__ isascii (int c); /* non standard */ +#endif int __fastcall__ iscntrl (int c); int __fastcall__ isdigit (int c); int __fastcall__ isgraph (int c); @@ -75,7 +77,7 @@ int __fastcall__ toupper (int c); /* Always external */ int __fastcall__ tolower (int c); /* Always external */ #if __CC65_STD__ >= __CC65_STD_CC65__ -unsigned char __fastcall__ toascii (unsigned char c); +unsigned char __fastcall__ toascii (unsigned char c); /* non standard */ /* Convert a target-specific character to ASCII. */ #endif diff --git a/include/limits.h b/include/limits.h index 531c6bef2..43328f4bd 100644 --- a/include/limits.h +++ b/include/limits.h @@ -37,7 +37,6 @@ #define _LIMITS_H - #define CHAR_BIT 8 #define SCHAR_MIN ((signed char) 0x80) @@ -63,7 +62,9 @@ #define ULONG_MAX 4294967295UL +#if __CC65_STD__ >= __CC65_STD_CC65__ /* These defines that are platform dependent */ +/* FILENAME_MAX in stdlib.h is defined as the same value as PATH_MAX */ #if defined(__APPLE2__) # define PATH_MAX (64+1) #elif defined(__ATARI__) @@ -77,7 +78,7 @@ #else # define PATH_MAX (16+1) #endif - +#endif /* __CC65_STD__ >= __CC65_STD_CC65__ */ /* End of limits.h */ #endif diff --git a/include/stdio.h b/include/stdio.h index 916affe71..84a991a98 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -37,12 +37,21 @@ #define _STDIO_H +/* NULL pointer */ +#ifndef _HAVE_NULL +#define NULL 0 +#define _HAVE_NULL +#endif -#include <stddef.h> -#include <stdarg.h> -#include <limits.h> - +/* size_t is needed */ +#ifndef _HAVE_size_t +#define _HAVE_size_t +typedef unsigned size_t; +#endif +/* stdio.h should not define va_list, so we use an equivalent type in the + compiler namespace instead */ +typedef unsigned char* __va_list; /* Types */ typedef struct _FILE FILE; @@ -65,9 +74,24 @@ extern FILE* stderr; #define SEEK_SET 2 #define TMP_MAX 256 -#define FILENAME_MAX PATH_MAX -#define L_tmpnam FILENAME_MAX +/* These defines that are platform dependent */ +/* FILENAME_MAX is defined as the same value as PATH_MAX in limits.h, but we + are not allowed to include limits.h here */ +#if defined(__APPLE2__) +# define FILENAME_MAX (64+1) +#elif defined(__ATARI__) +# define FILENAME_MAX (63+1) +#elif defined(__CBM__) +# define FILENAME_MAX (255) /* should be 256+1, see libsrc/common/_cmd.s why it's not */ +#elif defined(__LUNIX__) +# define FILENAME_MAX (80+1) +#elif defined(__TELESTRAT__) +# define FILENAME_MAX (50+1) +#else +# define FILENAME_MAX (16+1) +#endif +#define L_tmpnam FILENAME_MAX /*****************************************************************************/ @@ -107,17 +131,17 @@ int __fastcall__ rename (const char* oldname, const char* newname); int snprintf (char* buf, size_t size, const char* format, ...); int sprintf (char* buf, const char* format, ...); int __fastcall__ ungetc (int c, FILE* f); -int __fastcall__ vfprintf (FILE* f, const char* format, va_list ap); -int __fastcall__ vprintf (const char* format, va_list ap); -int __fastcall__ vsnprintf (char* buf, size_t size, const char* format, va_list ap); -int __fastcall__ vsprintf (char* buf, const char* format, va_list ap); +int __fastcall__ vfprintf (FILE* f, const char* format, __va_list ap); +int __fastcall__ vprintf (const char* format, __va_list ap); +int __fastcall__ vsnprintf (char* buf, size_t size, const char* format, __va_list ap); +int __fastcall__ vsprintf (char* buf, const char* format, __va_list ap); int scanf (const char* format, ...); int fscanf (FILE* f, const char* format, ...); int sscanf (const char* s, const char* format, ...); -int __fastcall__ vscanf (const char* format, va_list ap); -int __fastcall__ vsscanf (const char* s, const char* format, va_list ap); -int __fastcall__ vfscanf (FILE* f, const char* format, va_list ap); +int __fastcall__ vscanf (const char* format, __va_list ap); +int __fastcall__ vsscanf (const char* s, const char* format, __va_list ap); +int __fastcall__ vfscanf (FILE* f, const char* format, __va_list ap); #if __CC65_STD__ == __CC65_STD_CC65__ FILE* __fastcall__ fdopen (int fd, const char* mode); /* Unix */ diff --git a/include/string.h b/include/string.h index 83970493e..1bd83b385 100644 --- a/include/string.h +++ b/include/string.h @@ -36,11 +36,17 @@ #ifndef _STRING_H #define _STRING_H +/* NULL pointer */ +#ifndef _HAVE_NULL +#define NULL 0 +#define _HAVE_NULL +#endif - -#include <stddef.h> - - +/* size_t is needed */ +#ifndef _HAVE_size_t +#define _HAVE_size_t +typedef unsigned size_t; +#endif char* __fastcall__ strcat (char* dest, const char* src); char* __fastcall__ strchr (const char* s, int c); @@ -90,6 +96,5 @@ const char* __fastcall__ _stroserror (unsigned char errcode); /* Map an operating system error number to an error message. */ - /* End of string.h */ #endif diff --git a/include/time.h b/include/time.h index ca7ee385f..99bb1c8e3 100644 --- a/include/time.h +++ b/include/time.h @@ -52,7 +52,6 @@ typedef unsigned size_t; typedef unsigned long time_t; typedef unsigned long clock_t; -typedef unsigned char clockid_t; /* Structure for broken down time */ struct tm { @@ -67,22 +66,6 @@ struct tm { int tm_isdst; }; -/* Structure for seconds and nanoseconds */ -struct timespec { - time_t tv_sec; - long tv_nsec; -}; - -/* Timezone representation, default is UTC */ -extern struct _timezone { - char daylight; /* True if daylight savings time active */ - long timezone; /* Number of seconds behind UTC */ - char tzname[5]; /* Name of timezone, e.g. CET */ - char dstname[5]; /* Name when daylight true, e.g. CEST */ -} _tz; - - - #if defined(__ATARI5200__) # define CLOCKS_PER_SEC 60 #elif defined(__ATMOS__) @@ -109,7 +92,6 @@ extern struct _timezone { clock_t _clocks_per_sec (void); # define CLOCKS_PER_SEC _clocks_per_sec() #endif -#define CLK_TCK CLOCKS_PER_SEC #define CLOCK_REALTIME 0 @@ -125,12 +107,32 @@ size_t __fastcall__ strftime (char* buf, size_t bufsize, const char* format, con time_t __fastcall__ time (time_t* t); +#if __CC65_STD__ >= __CC65_STD_CC65__ + +typedef unsigned char clockid_t; + +/* Structure for seconds and nanoseconds */ +struct timespec { + time_t tv_sec; + long tv_nsec; +}; + +/* Timezone representation, default is UTC */ +extern struct _timezone { + char daylight; /* True if daylight savings time active */ + long timezone; /* Number of seconds behind UTC */ + char tzname[5]; /* Name of timezone, e.g. CET */ + char dstname[5]; /* Name when daylight true, e.g. CEST */ +} _tz; + +#define CLK_TCK CLOCKS_PER_SEC /* POSIX function prototypes */ int __fastcall__ clock_getres (clockid_t clock_id, struct timespec *res); int __fastcall__ clock_gettime (clockid_t clock_id, struct timespec *tp); int __fastcall__ clock_settime (clockid_t clock_id, const struct timespec *tp); +#endif /* End of time.h */ From b8d0bd7f95330b6d52eac3c964987138e8491f15 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 8 May 2022 19:29:27 +0200 Subject: [PATCH 1652/2710] Add a directory for tests that exercise the supported C standard differences. As a first test added the snippet given in issue #1670 --- test/readme.txt | 7 +++++ test/standard/Makefile | 63 +++++++++++++++++++++++++++++++++++++++++ test/standard/bug1670.c | 33 +++++++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 test/standard/Makefile create mode 100644 test/standard/bug1670.c diff --git a/test/readme.txt b/test/readme.txt index 49ae363cc..dd87ea9df 100644 --- a/test/readme.txt +++ b/test/readme.txt @@ -12,6 +12,13 @@ compiler is working as expected (when the tests behave as described): /val - The bulk of tests are contained here, individual tests should exit with an exit code of EXIT_SUCCESS when they pass, or EXIT_FAILURE on error. +/standard - like the tests in /val, the tests must exit with EXIT_SUCCESS on + success. Unlike the tests in /val these are not compiled for every + combination of optimizer options, but instead always with -Osir and then + for each supported C-standard (C89, C99, CC65). The goal is to use these + to check for regressions in standard conformance of the compiler and the + library. + /ref - These tests produce output that must be compared with reference output. /err - contains tests that MUST NOT compile diff --git a/test/standard/Makefile b/test/standard/Makefile new file mode 100644 index 000000000..054623b79 --- /dev/null +++ b/test/standard/Makefile @@ -0,0 +1,63 @@ +# Makefile for the regression tests that return an error code on failure + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + S = $(subst /,\,/) + NULLDEV = nul: + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /s /q $(subst /,\,$1) +else + S = / + NULLDEV = /dev/null + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +ifdef QUIET + .SILENT: + NULLOUT = >$(NULLDEV) + NULLERR = 2>$(NULLDEV) +endif + +SIM65FLAGS = -x 5000000000 -c + +CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) +CA65 := $(if $(wildcard ../../bin/ca65*),..$S..$Sbin$Sca65,ca65) +LD65 := $(if $(wildcard ../../bin/ld65*),..$S..$Sbin$Sld65,ld65) +SIM65 := $(if $(wildcard ../../bin/sim65*),..$S..$Sbin$Ssim65,sim65) + +WORKDIR = ../../testwrk/standard + +OPTIONS = c89 c99 cc65 + +.PHONY: all clean + +SOURCES := $(wildcard *.c) +TESTS = $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).6502.prg)) +#TESTS += $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).65c02.prg)) + +all: $(TESTS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +define PRG_template + +$(WORKDIR)/%.$1.$2.prg: %.c | $(WORKDIR) + $(if $(QUIET),echo standard/$$*.$1.$2.prg) + $(CC65) -t sim$2 $$(CC65FLAGS) -Osir --add-source --standard $1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) + $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/$$@.out + +endef # PRG_template + +$(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option),6502))) + +#$(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option),65c02))) + +clean: + @$(call RMDIR,$(WORKDIR)) diff --git a/test/standard/bug1670.c b/test/standard/bug1670.c new file mode 100644 index 000000000..038b40067 --- /dev/null +++ b/test/standard/bug1670.c @@ -0,0 +1,33 @@ + +/* #1670 - Standard headers contain non standard identifiers in C89/C99 mode */ + +#include <stdlib.h> +#include <stdio.h> +#include <time.h> + +#if __CC65_STD__ != __CC65_STD_CC65__ +/* implement our own clock_gettime, using a different signature than the POSIX one */ +const char* clock_gettime(void) +{ + static char buf[32]; + struct tm *my_tm; +#if 0 + /* FIXME: this will not work in the simulator */ + time_t t = time(NULL); +#else + time_t t = 0x12345678; +#endif + my_tm = localtime(&t); + printf("%2d:%2d:%2d\n", my_tm->tm_hour, my_tm->tm_min, my_tm->tm_sec); + strftime(buf, sizeof(buf), "<%H:%M:%S>", my_tm); + return buf; +} +#endif + +int main(void) +{ +#if __CC65_STD__ != __CC65_STD_CC65__ + printf("The time is %s\n", clock_gettime()); +#endif + return EXIT_SUCCESS; +} From 3943dc1216fbc0b9e14c7bb706ecbc867f3b4029 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 9 May 2022 21:26:45 +0200 Subject: [PATCH 1653/2710] Fix endless loop on expanding a recursive macro, fixed issue #1678, patch by kugelfuhr --- src/ca65/macro.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/ca65/macro.c b/src/ca65/macro.c index 0bdc89b5b..d9f1f385c 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -801,9 +801,6 @@ static void StartExpClassic (MacExp* E) { token_t Term; - /* Skip the macro name */ - NextTok (); - /* Does this invocation have any arguments? */ if (!TokIsSep (CurTok.Tok)) { @@ -887,9 +884,6 @@ static void StartExpDefine (MacExp* E) */ unsigned Count = E->M->ParamCount; - /* Skip the current token */ - NextTok (); - /* Read the actual parameters */ while (Count--) { TokNode* Last; @@ -965,14 +959,19 @@ static void StartExpDefine (MacExp* E) void MacExpandStart (Macro* M) /* Start expanding a macro */ { + FilePos Pos; MacExp* E; /* Check the argument */ PRECONDITION (M && (M->Style != MAC_STYLE_DEFINE || DisableDefines == 0)); + /* Remember the current file position, then skip the macro name token */ + Pos = CurTok.Pos; + NextTok (); + /* We cannot expand an incomplete macro */ if (M->Incomplete) { - Error ("Cannot expand an incomplete macro"); + PError (&Pos, "Cannot expand an incomplete macro"); return; } @@ -980,7 +979,7 @@ void MacExpandStart (Macro* M) ** to force an endless loop and assembler crash. */ if (MacExpansions >= MAX_MACEXPANSIONS) { - Error ("Too many nested macro expansions"); + PError (&Pos, "Too many nested macro expansions"); return; } From 15047d9754dae0d27b70dc4805f337dbfaaa4cd3 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 9 May 2022 21:27:21 +0200 Subject: [PATCH 1654/2710] simple test related to #1678 --- test/asm/err/bug1678.s | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 test/asm/err/bug1678.s diff --git a/test/asm/err/bug1678.s b/test/asm/err/bug1678.s new file mode 100644 index 000000000..d91e52214 --- /dev/null +++ b/test/asm/err/bug1678.s @@ -0,0 +1,22 @@ + +; #1678 Endless loop printing error messages + + .macpack longbranch + + .import _exit + .export _main + +.macro foo + foo +.endmacro + +.struct bar + foo +.endstruct + +_main: + ; exit OK + lda #0 + ldx #0 + jmp _exit + From 354dcd6101c11d61f27abb259e660e4225ba1d7c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 10 May 2022 01:12:13 +0200 Subject: [PATCH 1655/2710] define __CC65__ as ((VER_MAJOR * 0x100) + VER_MINOR), fixes issue #1667 --- src/common/version.c | 46 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/common/version.c b/src/common/version.c index 2f19f0466..2ebb58b0a 100644 --- a/src/common/version.c +++ b/src/common/version.c @@ -49,7 +49,46 @@ #define VER_MAJOR 2U #define VER_MINOR 19U - +/* + * Note: until 2.19 the __CC65__ macro was defined as (VER_MAJOR * 0x100) + VER_MINOR * 0x10 + * which resulted in broken values starting at version 2.16 of the compiler: + * + * version __CC65__ identifies as + * + * 2.0 0x0200 2.0 + * 2.1 0x0210 2.16 + * 2.2 0x0220 2.32 + * 2.3 0x0230 2.48 + * 2.4 0x0240 2.64 + * 2.5 0x0250 2.80 + * 2.6 0x0260 2.96 + * 2.7 0x0270 2.112 + * 2.8 0x0280 2.128 + * 2.9 0x0290 2.144 + * 2.10 0x02a0 2.160 + * 2.11 0x02b0 2.176 + * 2.12 0x02c0 2.192 + * 2.13 0x02d0 2.208 + * 2.14 0x02e0 2.224 + * 2.15 0x02f0 2.240 + * 2.16 0x0300 3.0 + * 2.17 0x0310 3.16 + * 2.18 0x0320 3.32 + * 2.19 0x0330 3.48 + * 2.19-git 0x0213 2.19 + * + * to keep damage low(er), we should do the following: + * + * - bump to 3.1 (skip 3.0) before 2.32 + * - bump to 4.0 before 3.16 + * + * That way at least each value is unique, and checking compiler version(s) can + * still work to some degree, should it really be necessary. + * + * Some preprocessor kludges can be used to still check for greater or lesser + * versions - see the checkversion program in the samples directory. + * + */ /*****************************************************************************/ /* Code */ @@ -74,5 +113,8 @@ const char* GetVersionAsString (void) unsigned GetVersionAsNumber (void) /* Returns the version number as a combined unsigned for use in a #define */ { - return ((VER_MAJOR * 0x100) + (VER_MINOR * 0x10)); +#if VER_MINOR >= 0x100 +#error "VER_MINOR must be smaller than 0x100 - time to bump the major version!" +#endif + return ((VER_MAJOR * 0x100) + VER_MINOR); } From b9779927e743b240ea9f492de6e11ebda6673427 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 10 May 2022 01:13:24 +0200 Subject: [PATCH 1656/2710] document changes to __CC65__ --- doc/cc65.sgml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 67323931c..43039f713 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1102,8 +1102,20 @@ The compiler defines several macros at startup: <tag><tt>__CC65__</tt></tag> This macro is always defined. Its value is the version number of the - compiler in hex. For example, version 2.14 of the compiler has this macro - defined as <tt/0x02E0/. + compiler in hex: <tt>(VER_MAJOR * 0x100) + VER_MINOR</tt>. The upper 8 bits + are the major-, the lower 8 bits are the minor version. For example, version + 47.11 of the compiler would have this macro defined as <tt/0x2f0b/. + + Note: until 2.19 this macro was defined as <tt>(VER_MAJOR * 0x100) + VER_MINOR * 0x10</tt> - + which resulted in broken values starting at version 2.16 of the compiler. For + this reason the value of this macro is considered purely informal - you should + not use it to check for a specific compiler version and use different code + according to the detected version - please update your code to work with the + recent version of the compiler instead (There is very little reason to not use + the most recent version - and even less to support older versions in your code). + + Should you still insist on doing this for some reason - look at <tt>checkversion.c</tt> + in the samples directory for some preprocessor kludges that might help. <tag><tt>__CC65_STD__</tt></tag> From 1334a10101ebd286ca2633798b53b15be6c0d70d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 10 May 2022 01:16:19 +0200 Subject: [PATCH 1657/2710] sample program that demonstrates how to compare the value of __CC65__ for any version of the compiler --- samples/Makefile | 19 +++++++++++++++++++ samples/checkversion.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 samples/checkversion.c diff --git a/samples/Makefile b/samples/Makefile index 01ad6f983..70e5ff760 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -161,6 +161,7 @@ DIRLIST = tutorial geos atari2600 atari5200 apple2 gamate lynx supervision sym1 EXELIST_apple2 = \ ascii \ + checkversion \ diodemo \ enumdevdir \ gunzip65 \ @@ -177,6 +178,7 @@ EXELIST_apple2enh = $(EXELIST_apple2) EXELIST_atari = \ ascii \ + checkversion \ gunzip65 \ hello \ mandelbrot \ @@ -197,6 +199,7 @@ EXELIST_atari5200 = \ EXELIST_atmos = \ ascii \ + checkversion \ hello \ mandelbrot \ sieve \ @@ -207,6 +210,7 @@ EXELIST_bbc = \ EXELIST_c64 = \ ascii \ + checkversion \ enumdevdir \ gunzip65 \ hello \ @@ -220,6 +224,7 @@ EXELIST_c64 = \ EXELIST_c128 = \ ascii \ + checkversion \ enumdevdir \ gunzip65 \ hello \ @@ -231,12 +236,14 @@ EXELIST_c128 = \ EXELIST_c16 = \ ascii \ + checkversion \ enumdevdir \ tinyshell \ hello EXELIST_cbm510 = \ ascii \ + checkversion \ gunzip65 \ hello \ mousedemo \ @@ -245,6 +252,7 @@ EXELIST_cbm510 = \ EXELIST_cbm610 = \ ascii \ + checkversion \ gunzip65 \ hello \ tinyshell \ @@ -252,10 +260,12 @@ EXELIST_cbm610 = \ EXELIST_creativision = \ ascii \ + checkversion \ hello EXELIST_cx16 = \ ascii \ + checkversion \ enumdevdir \ gunzip65 \ hello \ @@ -266,10 +276,12 @@ EXELIST_cx16 = \ tgidemo EXELIST_gamate = \ + checkversion \ hello EXELIST_geos-cbm = \ ascii \ + checkversion \ diodemo EXELIST_geos-apple = \ @@ -282,16 +294,19 @@ EXELIST_lynx = \ notavailable EXELIST_nes = \ + checkversion \ hello EXELIST_osic1p = \ notavailable EXELIST_pce = \ + checkversion \ hello EXELIST_pet = \ ascii \ + checkversion \ enumdevdir \ hello \ tinyshell \ @@ -299,6 +314,7 @@ EXELIST_pet = \ EXELIST_plus4 = \ ascii \ + checkversion \ enumdevdir \ gunzip65 \ hello \ @@ -306,6 +322,7 @@ EXELIST_plus4 = \ sieve EXELIST_sim6502 = \ + checkversion \ gunzip65 EXELIST_sim65c02 = $(EXELIST_sim6502) @@ -318,6 +335,7 @@ EXELIST_sym1 = \ EXELIST_telestrat = \ ascii \ + checkversion \ gunzip65 \ hello \ mandelbrot \ @@ -326,6 +344,7 @@ EXELIST_telestrat = \ EXELIST_vic20 = \ ascii \ + checkversion \ enumdevdir \ hello \ mandelbrot \ diff --git a/samples/checkversion.c b/samples/checkversion.c new file mode 100644 index 000000000..1d3494a87 --- /dev/null +++ b/samples/checkversion.c @@ -0,0 +1,40 @@ + +/* Until 2.19 the __CC65__ macro was defined as (VER_MAJOR * 0x100) + (VER_MINOR * 0x10), + * which caused it to contain broken values in compiler releases 2.16 to 2.19. The + * macro was fixed some time after 2.19 to (VER_MAJOR * 0x100) + VER_MINOR. + * + * The following strategy can be used to still compare for less or greater versions, + * should this really be necessary or wanted - it is not recommended afterall. + */ + +#include <stdio.h> +#include <stdlib.h> + +#if ((__CC65__ & 0xff00) > 3) || ((__CC65__ & 0x000f) > 0) +/* compiler version is 2.19-git or higher */ +# define VER_MAJOR ((__CC65__ >> 8) & 0xff) +# define VER_MINOR (__CC65__ & 0xff) +#elif ((__CC65__ & 0xff00) == 3) +/* broken values in version 2.16 - 2.19-git before the bug was fixed */ +# define VER_MAJOR 2 +# define VER_MINOR (((__CC65__ >> 4) & 0x0f) + 16) +#else +/* values before 2.16 */ +# define VER_MAJOR ((__CC65__ >> 8) & 0xff) +# define VER_MINOR ((__CC65__ >> 4) & 0x0f) +#endif + +/* define a new value that will work for comparing all versions */ +#define VERSION ((VER_MAJOR << 8) + VER_MINOR) + +int main(void) +{ + printf("__CC65__ defined as %04x\n", __CC65__); + printf("compiler version is %u.%u\n", VER_MAJOR, VER_MINOR); + if (__CC65__ == VERSION) { + printf("__CC65__ is defined correctly as (VER_MAJOR * 0x100) + VER_MINOR\n"); + return EXIT_SUCCESS; + } + printf("__CC65__ is incorrectly defined as (VER_MAJOR * 0x100) + (VER_MINOR * 0x10)\n"); + return EXIT_FAILURE; +} From 133d7039645252f49ed83e228b49197e3b0c3b74 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Fri, 18 Feb 2022 00:43:49 +0100 Subject: [PATCH 1658/2710] smarter manufacturer some kind of promotion --- libsrc/lynx/exehdr.s | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libsrc/lynx/exehdr.s b/libsrc/lynx/exehdr.s index d63c0524d..0fbe99150 100644 --- a/libsrc/lynx/exehdr.s +++ b/libsrc/lynx/exehdr.s @@ -16,8 +16,12 @@ .word __BANK1BLOCKSIZE__ ; bank 1 page size .word 1 ; version number .asciiz "Cart name " ; 32 bytes cart name - .asciiz "Manufacturer " ; 16 bytes manufacturer + .byte "cc65 V" ; 16 bytes manufacturer + .byte ((.VERSION >> 8) & $0F) + '0' + .byte '.' + .byte ((.VERSION >> 4) & $0F) + '0' + .byte (.VERSION & $0F) + '0' + .asciiz " " .byte 0 ; rotation 1=left ; rotation 2=right .byte 0,0,0,0,0 ; spare - From 08bad5b93b355e8791917bb9179423b0c82d15d7 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Tue, 10 May 2022 01:56:52 +0200 Subject: [PATCH 1659/2710] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 530efdfdb..e917a13e0 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,8 @@ For a complete list look at the [full team list](https://github.com/orgs/cc65/te For general discussion, questions, etc subscribe to the [mailing list](https://cc65.github.io/mailing-lists.html) or use the [github discussions](https://github.com/cc65/cc65/discussions). +Some of us may also be around on IRC [#cc65](https://web.libera.chat/#cc65) on libera.chat + # Documentation * The main [Documentation](https://cc65.github.io/doc) for users and developers From 976d07b98ff79f6ac41948a40bb6c9bb6c77b537 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 17 May 2022 13:25:12 +0200 Subject: [PATCH 1660/2710] clean and mostlyclean should also clean the test and targettest directories --- Makefile | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index f565727e6..4f57ef7cc 100644 --- a/Makefile +++ b/Makefile @@ -2,13 +2,22 @@ .SUFFIXES: -all mostlyclean clean install zip: +all install zip: @$(MAKE) -C src --no-print-directory $@ @$(MAKE) -C libsrc --no-print-directory $@ @$(MAKE) -C doc --no-print-directory $@ @$(MAKE) -C util --no-print-directory $@ @$(MAKE) -C samples --no-print-directory $@ +mostlyclean clean: + @$(MAKE) -C src --no-print-directory $@ + @$(MAKE) -C libsrc --no-print-directory $@ + @$(MAKE) -C doc --no-print-directory $@ + @$(MAKE) -C util --no-print-directory $@ + @$(MAKE) -C samples --no-print-directory $@ + @$(MAKE) -C test --no-print-directory $@ + @$(MAKE) -C targettest --no-print-directory $@ + avail unavail bin: @$(MAKE) -C src --no-print-directory $@ From 0113d1328b942f54912139ca04038c344336b0e4 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 17 May 2022 13:52:30 +0200 Subject: [PATCH 1661/2710] don't try to build the checkversion sample for targets that do not have printf --- samples/Makefile | 4 ---- 1 file changed, 4 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index 70e5ff760..4007e3522 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -260,7 +260,6 @@ EXELIST_cbm610 = \ EXELIST_creativision = \ ascii \ - checkversion \ hello EXELIST_cx16 = \ @@ -276,7 +275,6 @@ EXELIST_cx16 = \ tgidemo EXELIST_gamate = \ - checkversion \ hello EXELIST_geos-cbm = \ @@ -294,14 +292,12 @@ EXELIST_lynx = \ notavailable EXELIST_nes = \ - checkversion \ hello EXELIST_osic1p = \ notavailable EXELIST_pce = \ - checkversion \ hello EXELIST_pet = \ From 0e4d3aa7c5592d1faf0b985e53b7fefa85982f35 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 17 May 2022 14:30:41 +0200 Subject: [PATCH 1662/2710] rename the "check" target to "checkstyle". also created a new "check" target which runs all tests, as it is common with GNU programs --- .github/workflows/build-on-pull-request.yml | 2 +- .github/workflows/snapshot-on-push-master.yml | 2 +- Makefile | 23 +++++++++++++------ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index e9176f8c4..0ba0c6a1f 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -23,7 +23,7 @@ jobs: - name: Do some simple style checks shell: bash - run: make -j2 check + run: make -j2 checkstyle - name: Build the tools. shell: bash run: make -j2 bin USER_CFLAGS=-Werror diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 798381951..eaaa3101a 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -48,7 +48,7 @@ jobs: - name: Do some simple style checks shell: bash - run: make -j2 check + run: make -j2 checkstyle - name: Build the tools. shell: bash run: | diff --git a/Makefile b/Makefile index 4f57ef7cc..e8b73e86b 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples test util check +.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples test util checkstyle check .SUFFIXES: @@ -30,12 +30,6 @@ doc html info: samples: @$(MAKE) -C samples --no-print-directory $@ -test: - @$(MAKE) -C test --no-print-directory $@ - -check: - @$(MAKE) -C .github/checks --no-print-directory $@ - util: @$(MAKE) -C util --no-print-directory $@ @@ -44,3 +38,18 @@ util: %: @$(MAKE) -C libsrc --no-print-directory $@ + +# check the code style +checkstyle: + @$(MAKE) -C .github/checks --no-print-directory $@ + +# simple "test" target, only run regression tests for c64 target +test: + @$(MAKE) -C test --no-print-directory $@ + +# GNU "check" target, which runs all tests +check: + @$(MAKE) -C .github/checks --no-print-directory $@ + @$(MAKE) test + @$(MAKE) -C targettest platforms --no-print-directory + @$(MAKE) -C samples platforms --no-print-directory From 3717f36c52a97c55c4ba823082537178f22e2939 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 17 May 2022 14:39:35 +0200 Subject: [PATCH 1663/2710] rename the actual checkstyle target too :) --- .github/checks/Makefile | 2 +- Makefile | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/checks/Makefile b/.github/checks/Makefile index dc42d14ca..52d6611aa 100644 --- a/.github/checks/Makefile +++ b/.github/checks/Makefile @@ -1,7 +1,7 @@ .PHONY: check tabs lastline spaces -check: tabs lastline spaces +checkstyle: tabs lastline spaces tabs: tabs.sh @./tabs.sh diff --git a/Makefile b/Makefile index e8b73e86b..909de81ec 100644 --- a/Makefile +++ b/Makefile @@ -49,7 +49,7 @@ test: # GNU "check" target, which runs all tests check: - @$(MAKE) -C .github/checks --no-print-directory $@ + @$(MAKE) -C .github/checks checkstyle --no-print-directory @$(MAKE) test - @$(MAKE) -C targettest platforms --no-print-directory - @$(MAKE) -C samples platforms --no-print-directory + @$(MAKE) -C targettest platforms --no-print-directory + @$(MAKE) -C samples platforms --no-print-directory From 4595d08c6e8fb1aa0b4c5749824ac6670c561f38 Mon Sep 17 00:00:00 2001 From: compyx <b.wassink@ziggo.nl> Date: Tue, 17 May 2022 10:05:25 +0200 Subject: [PATCH 1664/2710] Fix set but unused variable --- src/cc65/codeopt.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index 9c90a0e5f..440b10751 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -397,7 +397,6 @@ static void ReadOptStats (const char* Name) /* Read the optimizer statistics file */ { char Buf [256]; - unsigned Lines; /* Try to open the file */ FILE* F = fopen (Name, "r"); @@ -407,7 +406,6 @@ static void ReadOptStats (const char* Name) } /* Read and parse the lines */ - Lines = 0; while (fgets (Buf, sizeof (Buf), F) != 0) { char* B; @@ -419,9 +417,6 @@ static void ReadOptStats (const char* Name) unsigned long TotalRuns; unsigned long TotalChanges; - /* Count lines */ - ++Lines; - /* Remove trailing white space including the line terminator */ B = Buf; Len = strlen (B); From 8e787c0c0a3fccc519c19b3fd97dbc0e4f61d40e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 17 May 2022 15:28:21 +0200 Subject: [PATCH 1665/2710] remove +x flag --- libsrc/gamate/vga.s | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 libsrc/gamate/vga.s diff --git a/libsrc/gamate/vga.s b/libsrc/gamate/vga.s old mode 100755 new mode 100644 From 85fb6ba9448392cfd3bdfc05161e98bed52e5695 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 17 May 2022 15:28:41 +0200 Subject: [PATCH 1666/2710] add check for +x flag --- .github/checks/Makefile | 7 +++++-- .github/checks/noexec.sh | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100755 .github/checks/noexec.sh diff --git a/.github/checks/Makefile b/.github/checks/Makefile index 52d6611aa..18cc153d4 100644 --- a/.github/checks/Makefile +++ b/.github/checks/Makefile @@ -1,7 +1,7 @@ -.PHONY: check tabs lastline spaces +.PHONY: checkstyle tabs lastline spaces noexec -checkstyle: tabs lastline spaces +checkstyle: tabs lastline spaces noexec tabs: tabs.sh @./tabs.sh @@ -11,3 +11,6 @@ lastline: lastline.sh spaces: spaces.sh @./spaces.sh + +noexec: noexec.sh + @./noexec.sh diff --git a/.github/checks/noexec.sh b/.github/checks/noexec.sh new file mode 100755 index 000000000..c76ae481d --- /dev/null +++ b/.github/checks/noexec.sh @@ -0,0 +1,18 @@ +#! /bin/bash +OLDCWD=`pwd` +SCRIPT_PATH=`dirname $0` +CHECK_PATH=. + +cd $SCRIPT_PATH/../../ + +FILES=`find $CHECK_PATH -executable -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print` + +cd $OLDCWD + +if [ x"$FILES"x != xx ]; then + echo "error: executable flag is set for the following files:" >&2 + for n in $FILES; do + echo $n >&2 + done + exit -1 +fi From f69b993ee6b6b1a7fc47eb8f66bdd5df5007ce94 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Wed, 18 May 2022 05:09:48 -0400 Subject: [PATCH 1667/2710] Fixed a multi-line comment. The left border is thicker in cc65 than it is in VICE. --- src/common/version.c | 78 ++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/src/common/version.c b/src/common/version.c index 2ebb58b0a..270eab118 100644 --- a/src/common/version.c +++ b/src/common/version.c @@ -50,45 +50,45 @@ #define VER_MINOR 19U /* - * Note: until 2.19 the __CC65__ macro was defined as (VER_MAJOR * 0x100) + VER_MINOR * 0x10 - * which resulted in broken values starting at version 2.16 of the compiler: - * - * version __CC65__ identifies as - * - * 2.0 0x0200 2.0 - * 2.1 0x0210 2.16 - * 2.2 0x0220 2.32 - * 2.3 0x0230 2.48 - * 2.4 0x0240 2.64 - * 2.5 0x0250 2.80 - * 2.6 0x0260 2.96 - * 2.7 0x0270 2.112 - * 2.8 0x0280 2.128 - * 2.9 0x0290 2.144 - * 2.10 0x02a0 2.160 - * 2.11 0x02b0 2.176 - * 2.12 0x02c0 2.192 - * 2.13 0x02d0 2.208 - * 2.14 0x02e0 2.224 - * 2.15 0x02f0 2.240 - * 2.16 0x0300 3.0 - * 2.17 0x0310 3.16 - * 2.18 0x0320 3.32 - * 2.19 0x0330 3.48 - * 2.19-git 0x0213 2.19 - * - * to keep damage low(er), we should do the following: - * - * - bump to 3.1 (skip 3.0) before 2.32 - * - bump to 4.0 before 3.16 - * - * That way at least each value is unique, and checking compiler version(s) can - * still work to some degree, should it really be necessary. - * - * Some preprocessor kludges can be used to still check for greater or lesser - * versions - see the checkversion program in the samples directory. - * - */ +** Note: until 2.19 the __CC65__ macro was defined as (VER_MAJOR * 0x100) + VER_MINOR * 0x10 +** which resulted in broken values starting at version 2.16 of the compiler: +** +** version __CC65__ identifies as +** +** 2.0 0x0200 2.0 +** 2.1 0x0210 2.16 +** 2.2 0x0220 2.32 +** 2.3 0x0230 2.48 +** 2.4 0x0240 2.64 +** 2.5 0x0250 2.80 +** 2.6 0x0260 2.96 +** 2.7 0x0270 2.112 +** 2.8 0x0280 2.128 +** 2.9 0x0290 2.144 +** 2.10 0x02a0 2.160 +** 2.11 0x02b0 2.176 +** 2.12 0x02c0 2.192 +** 2.13 0x02d0 2.208 +** 2.14 0x02e0 2.224 +** 2.15 0x02f0 2.240 +** 2.16 0x0300 3.0 +** 2.17 0x0310 3.16 +** 2.18 0x0320 3.32 +** 2.19 0x0330 3.48 +** 2.19-git 0x0213 2.19 +** +** to keep damage low(er), we should do the following: +** +** - bump to 3.1 (skip 3.0) before 2.32 +** - bump to 4.0 before 3.16 +** +** That way at least each value is unique, and checking compiler version(s) can +** still work to some degree, should it really be necessary. +** +** Some preprocessor kludges can be used to still check for greater or lesser +** versions - see the checkversion program in the samples directory. +** +*/ /*****************************************************************************/ /* Code */ From 8ec1f76b9c30919b1b87b89af9a4057e90bb5ee3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChlstrasser?= <stephan.muehlstrasser@web.de> Date: Wed, 18 May 2022 18:57:52 +0200 Subject: [PATCH 1668/2710] Fix switched meaning of '\n' and '\r' When conio was implemented for the osic1p target, the cbm target was used as a blueprint. But it was overlooked that the cbm target encodes CR as 0x0A and LF as 0x0D, while the osic1p target uses the ASCII encoding of CR and LF. Therefore conio output of '\n' moved the active position to the start of the line and '\r' moved the active position to the next line. This change implements the correct semantics of '\n' and '\r' in conio for the osic1p target. Fixes #1747. --- libsrc/osic1p/osiscreen.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/osic1p/osiscreen.inc b/libsrc/osic1p/osiscreen.inc index ee2e52174..509b4cf79 100644 --- a/libsrc/osic1p/osiscreen.inc +++ b/libsrc/osic1p/osiscreen.inc @@ -78,13 +78,13 @@ _cputcxy: ; Plot a character - also used as internal function -_cputc: cmp #$0A ; CR? +_cputc: cmp #$0D ; CR? bne L1 lda #0 sta CURS_X beq plot ; Recalculate pointers -L1: cmp #$0D ; LF? +L1: cmp #$0A ; LF? beq newline ; Recalculate pointers cputdirect: From 9cb8bf95009e9298abf79da1fea3c81dfbc19bd5 Mon Sep 17 00:00:00 2001 From: rofl0r <rofl0r@users.noreply.github.com> Date: Mon, 30 May 2022 12:22:02 +0000 Subject: [PATCH 1669/2710] cl65: fix regression in --print-target-path since the "empty prefix means run from current dir" hack was removed, cl65 --print-target-path no longer prints the path relative to the binary, but the hardcoded library path which points to prefix, because the code adds the hardcoded path first to the pathsearch, but then actually only returns the first entry rather than looking whether the path exists. closes #1754 --- src/cl65/main.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/cl65/main.c b/src/cl65/main.c index 5d84fb625..67e9444f4 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -1212,6 +1212,7 @@ static void OptPrintTargetPath (const char* Opt attribute ((unused)), /* Print the target file path */ { char* TargetPath; + char* tmp; SearchPaths* TargetPaths = NewSearchPath (); AddSubSearchPathFromEnv (TargetPaths, "CC65_HOME", "target"); @@ -1220,7 +1221,15 @@ static void OptPrintTargetPath (const char* Opt attribute ((unused)), #endif AddSubSearchPathFromBin (TargetPaths, "target"); - TargetPath = GetSearchPath (TargetPaths, 0); + TargetPath = SearchFile (TargetPaths, "."); + if (!TargetPath) { + fprintf (stderr, "%s: error - could not determine target path\n", ProgName); + exit (EXIT_FAILURE); + } + tmp = strrchr(TargetPath, '.'); + if (tmp) { + *(--tmp) = 0; + } while (*TargetPath) { if (*TargetPath == ' ') { /* Escape spaces */ From e8e1889b0b66f49eaac55c1274a807d880d65896 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 6 Jun 2022 14:01:16 +0200 Subject: [PATCH 1670/2710] handle loadaddr the same as with the other CBM targets --- cfg/vic20-asm.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/vic20-asm.cfg b/cfg/vic20-asm.cfg index 7ab70888c..286a7f95c 100644 --- a/cfg/vic20-asm.cfg +++ b/cfg/vic20-asm.cfg @@ -6,7 +6,7 @@ SYMBOLS { } MEMORY { ZP: file = "", start = $0002, size = $001A, define = yes; - LOADADDR: file = %O, start = $1001, size = $0002; + LOADADDR: file = %O, start = %S - 2, size = $0002; MAIN: file = %O, start = %S, size = $0DF3 - %S; } SEGMENTS { From 735f0cda25f9a5752e743f4e4df8981a0f9d0a6b Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 01:44:40 -0400 Subject: [PATCH 1671/2710] Added Github action steps that update the online documentation repo. --- .github/workflows/snapshot-on-push-master.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index eaaa3101a..42b6513c0 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -96,6 +96,21 @@ jobs: name: cc65-snapshot-win64.zip path: cc65-snapshot-win64.zip + - name: Update the online documents. + uses: actions/checkout@v2 + with: + repository: cc65/doc + path: doc.git + - run: | + cd doc.git + rm *.* + cp ../html/*.* . + git config user.name "cc65-github" + git config user.email "cc65.nomail@github.com" + git config push.default simple + git add -A + git commit -m "Updated from cc65 commit $(GITHUB_SHA)." && git push -q || true + # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge uses: nogsantos/scp-deploy@master From 3232ce1bad532c517b8cfc4d6b7c704678774bf2 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 02:30:52 -0400 Subject: [PATCH 1672/2710] Fixed a shell syntax bug. Try again. --- .github/workflows/snapshot-on-push-master.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 42b6513c0..76ab85db0 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -96,12 +96,13 @@ jobs: name: cc65-snapshot-win64.zip path: cc65-snapshot-win64.zip - - name: Update the online documents. + - name: Get the online documents repo. uses: actions/checkout@v2 with: repository: cc65/doc path: doc.git - - run: | + - name: Update the online documents. + run: | cd doc.git rm *.* cp ../html/*.* . @@ -109,7 +110,7 @@ jobs: git config user.email "cc65.nomail@github.com" git config push.default simple git add -A - git commit -m "Updated from cc65 commit $(GITHUB_SHA)." && git push -q || true + git commit -m "Updated from cc65 commit ${GITHUB_SHA}." && git push # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From cb20b2e968b249f7f8183bab37144a37acf04417 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 03:45:57 -0400 Subject: [PATCH 1673/2710] Tried to authorize a push by setting the access token explicitly. --- .github/workflows/snapshot-on-push-master.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 76ab85db0..1428c9626 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -100,6 +100,7 @@ jobs: uses: actions/checkout@v2 with: repository: cc65/doc + token: ${{ github.token }} path: doc.git - name: Update the online documents. run: | From 4c74d4b851cc6cc803b24b5e203b7abf544f2848 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 05:38:59 -0400 Subject: [PATCH 1674/2710] Trying a verbose Git push. If I'm lucky, it will tell me more. --- .github/workflows/snapshot-on-push-master.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 1428c9626..1f17559ca 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -111,7 +111,8 @@ jobs: git config user.email "cc65.nomail@github.com" git config push.default simple git add -A - git commit -m "Updated from cc65 commit ${GITHUB_SHA}." && git push + git commit -m "Updated from cc65 commit ${GITHUB_SHA}." + git push -v # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From 2290e70e0c5ef5c15334ceb54e42452de0743e2a Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 08:06:21 -0400 Subject: [PATCH 1675/2710] Experiment: checkout the second repo first. Maybe that will give it the github.token that it needs. --- .github/workflows/snapshot-on-push-master.yml | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 1f17559ca..c4fea18c9 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -43,8 +43,18 @@ jobs: - shell: bash run: git config --global core.autocrlf input + + - name: Get the online documents repo. + uses: actions/checkout@v2 + with: + repository: cc65/doc + token: ${{ github.token }} + path: doc.git + - name: Checkout Source uses: actions/checkout@v2 + with: + path: cc65 - name: Do some simple style checks shell: bash @@ -96,17 +106,11 @@ jobs: name: cc65-snapshot-win64.zip path: cc65-snapshot-win64.zip - - name: Get the online documents repo. - uses: actions/checkout@v2 - with: - repository: cc65/doc - token: ${{ github.token }} - path: doc.git - name: Update the online documents. run: | - cd doc.git + cd ../doc.git rm *.* - cp ../html/*.* . + cp ../cc65/html/*.* . git config user.name "cc65-github" git config user.email "cc65.nomail@github.com" git config push.default simple From e004e92f21b9364c8c62b729a1cad78b37f20e1f Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 08:18:51 -0400 Subject: [PATCH 1676/2710] Fixed the action/checkout steps. I misunderstood that action's docs. --- .github/workflows/snapshot-on-push-master.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index c4fea18c9..dca886010 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -53,8 +53,6 @@ jobs: - name: Checkout Source uses: actions/checkout@v2 - with: - path: cc65 - name: Do some simple style checks shell: bash @@ -108,9 +106,9 @@ jobs: - name: Update the online documents. run: | - cd ../doc.git + cd doc.git rm *.* - cp ../cc65/html/*.* . + cp ../html/*.* . git config user.name "cc65-github" git config user.email "cc65.nomail@github.com" git config push.default simple From 964c4a220e9cf77e3a7a9a8f0a7cb30eb9408073 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 08:35:06 -0400 Subject: [PATCH 1677/2710] Find out where doc.git is. --- .github/workflows/snapshot-on-push-master.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index dca886010..1e8e523e3 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -106,6 +106,8 @@ jobs: - name: Update the online documents. run: | + pwd + ls cd doc.git rm *.* cp ../html/*.* . From 4d045a68e312e781e773f241627a58e6fb43647e Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 09:00:53 -0400 Subject: [PATCH 1678/2710] Put doc.git next to cc65. --- .github/workflows/snapshot-on-push-master.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 1e8e523e3..c6ab07fed 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -49,7 +49,7 @@ jobs: with: repository: cc65/doc token: ${{ github.token }} - path: doc.git + path: ../doc.git - name: Checkout Source uses: actions/checkout@v2 @@ -107,10 +107,9 @@ jobs: - name: Update the online documents. run: | pwd - ls - cd doc.git + cd ../doc.git rm *.* - cp ../html/*.* . + cp ../cc65/html/*.* . git config user.name "cc65-github" git config user.email "cc65.nomail@github.com" git config push.default simple From c00c89c2b7260add52d2ed4e978c13518a10d861 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 12:58:56 -0400 Subject: [PATCH 1679/2710] Directly clone the document repo. --- .github/workflows/snapshot-on-push-master.yml | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index c6ab07fed..cb0483827 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -43,14 +43,6 @@ jobs: - shell: bash run: git config --global core.autocrlf input - - - name: Get the online documents repo. - uses: actions/checkout@v2 - with: - repository: cc65/doc - token: ${{ github.token }} - path: ../doc.git - - name: Checkout Source uses: actions/checkout@v2 @@ -106,10 +98,10 @@ jobs: - name: Update the online documents. run: | - pwd - cd ../doc.git + git clone --depth 1 https://${{ secrets.GITHUB_TOKEN }}@github.com/cc65/doc.git doc.git + cd doc.git rm *.* - cp ../cc65/html/*.* . + cp ../html/*.* . git config user.name "cc65-github" git config user.email "cc65.nomail@github.com" git config push.default simple From 9dec4034e318a8bbc64cbebad59e249d0c421371 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 13:52:45 -0400 Subject: [PATCH 1680/2710] Passed the token through the environment. --- .github/workflows/snapshot-on-push-master.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index cb0483827..a4d2950ca 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -97,8 +97,10 @@ jobs: path: cc65-snapshot-win64.zip - name: Update the online documents. + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - git clone --depth 1 https://${{ secrets.GITHUB_TOKEN }}@github.com/cc65/doc.git doc.git + git clone --depth 1 https://${GH_TOKEN}@github.com/cc65/doc.git doc.git cd doc.git rm *.* cp ../html/*.* . From bcc8c5049b0c2f558ec0b6b84393fb4b3d12d7b4 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 18:24:42 -0400 Subject: [PATCH 1681/2710] Went back to using actions/checkout@v2. (Direct cloning doesn't support pushing with a hidden token.) I'm putting this aside, for now. A Personal Access Token must be made for the repository. "git push" does a dry-run, so that the workflow will succeed. --- .github/workflows/snapshot-on-push-master.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index a4d2950ca..b014bac54 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -96,11 +96,16 @@ jobs: name: cc65-snapshot-win64.zip path: cc65-snapshot-win64.zip + - name: Get the online documents repo. + uses: actions/checkout@v2 + with: + repository: cc65/doc + path: doc.git - name: Update the online documents. env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - git clone --depth 1 https://${GH_TOKEN}@github.com/cc65/doc.git doc.git + env cd doc.git rm *.* cp ../html/*.* . @@ -109,7 +114,7 @@ jobs: git config push.default simple git add -A git commit -m "Updated from cc65 commit ${GITHUB_SHA}." - git push -v + git push -n # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From f835412562f73c7e6363a0ccd695493c6cf6d468 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 21:22:43 -0400 Subject: [PATCH 1682/2710] Changed a line that Github Actions claimed was bad. --- .github/workflows/snapshot-on-push-master.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index b014bac54..934008671 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -98,14 +98,14 @@ jobs: - name: Get the online documents repo. uses: actions/checkout@v2 - with: - repository: cc65/doc - path: doc.git + with: + repository: cc65/doc + path: doc.git - name: Update the online documents. env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - env + env cd doc.git rm *.* cp ../html/*.* . From 3bf3bfa294882dd8f200ba7af94ad241e3745a48 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Fri, 17 Jun 2022 21:44:42 -0400 Subject: [PATCH 1683/2710] Commented out the push command. --- .github/workflows/snapshot-on-push-master.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 934008671..c68ebf9e6 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -114,7 +114,7 @@ jobs: git config push.default simple git add -A git commit -m "Updated from cc65 commit ${GITHUB_SHA}." - git push -n + #git push -v # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From a94b614f2d780097495fcee67c52c68d165c8f92 Mon Sep 17 00:00:00 2001 From: Greg King <gregdk@users.sf.net> Date: Mon, 20 Jun 2022 03:08:47 -0400 Subject: [PATCH 1684/2710] Removed an environment experiment. --- .github/workflows/snapshot-on-push-master.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index c68ebf9e6..6d3bded6c 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -102,10 +102,7 @@ jobs: repository: cc65/doc path: doc.git - name: Update the online documents. - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - env cd doc.git rm *.* cp ../html/*.* . From 36a27055e89ad6fa15e7098670db23569f51a49a Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sat, 25 Jun 2022 00:19:21 +0200 Subject: [PATCH 1685/2710] Telestrat : change default start address --- cfg/telestrat.cfg | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cfg/telestrat.cfg b/cfg/telestrat.cfg index db897133e..3567fa8bf 100644 --- a/cfg/telestrat.cfg +++ b/cfg/telestrat.cfg @@ -1,3 +1,7 @@ +FEATURES { + STARTADDRESS: default = $1000; +} + SYMBOLS { __ORIXHDR__: type = import; __STACKSIZE__: type = weak, value = $0800; # 2K stack @@ -7,7 +11,7 @@ SYMBOLS { MEMORY { ZP: file = "", define = yes, start = $00B0, size = $003A; ORIXHDR: file = %O, type = ro, start = $0000, size = $001F; - MAIN: file = %O, define = yes, start = $0800, size = __RAMEND__ - __MAIN_START__; + MAIN: file = %O, define = yes, start = %S, size = __RAMEND__ - __MAIN_START__; BSS: file = "", start = __ONCE_RUN__, size = __RAMEND__ - __STACKSIZE__ - __ONCE_RUN__; } SEGMENTS { From e60836add8a5b5b38326badab6fd179828975c02 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Sat, 25 Jun 2022 00:21:19 +0200 Subject: [PATCH 1686/2710] Telestrat cfg : fix space --- cfg/telestrat.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/telestrat.cfg b/cfg/telestrat.cfg index 3567fa8bf..bd720fb8d 100644 --- a/cfg/telestrat.cfg +++ b/cfg/telestrat.cfg @@ -11,7 +11,7 @@ SYMBOLS { MEMORY { ZP: file = "", define = yes, start = $00B0, size = $003A; ORIXHDR: file = %O, type = ro, start = $0000, size = $001F; - MAIN: file = %O, define = yes, start = %S, size = __RAMEND__ - __MAIN_START__; + MAIN: file = %O, define = yes, start = %S, size = __RAMEND__ - __MAIN_START__; BSS: file = "", start = __ONCE_RUN__, size = __RAMEND__ - __STACKSIZE__ - __ONCE_RUN__; } SEGMENTS { From f614f3b9e2064115686f0cfd026509afd50ba450 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 13 Jul 2022 23:10:19 +0200 Subject: [PATCH 1687/2710] reserve enough space for the longest string we can expect --- libsrc/common/asctime.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/libsrc/common/asctime.c b/libsrc/common/asctime.c index 15450425e..b46f29128 100644 --- a/libsrc/common/asctime.c +++ b/libsrc/common/asctime.c @@ -42,15 +42,18 @@ /* Code */ /*****************************************************************************/ +/* + CAUTION: we need to reserve enough space to be able to hold the maximum + length string: + 1234567890123456789012345678901234567 + "Wednesday September ..1 00:00:00 1970" +*/ char* __fastcall__ asctime (const struct tm* timep) { - static char buf[26]; + static char buf[38]; /* Format into given buffer and return the result */ return strftime (buf, sizeof (buf), "%c\n", timep)? buf : 0; } - - - From 1dae5062e9c87c76e56520228c7cba528d238b9c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 14 Jul 2022 22:39:29 +0200 Subject: [PATCH 1688/2710] more verbose comment --- src/cc65/codegen.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index c79863d0e..326d751b6 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -461,7 +461,8 @@ void g_importstartup (void) void g_importmainargs (void) -/* Forced import of a special symbol that handles arguments to main */ +/* Forced import of a special symbol that handles arguments to main. This will + happen only when the compiler sees a main function that takes arguments. */ { AddTextLine ("\t.forceimport\tinitmainargs"); } From 36315ecc060731ba2e327fe55ebc9b8649e35608 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 14 Jul 2022 22:54:18 +0200 Subject: [PATCH 1689/2710] omit an error message also when an unresolved import was added by the compiler. fixes bug #1551 --- src/ld65/exports.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/ld65/exports.c b/src/ld65/exports.c index 35de5c8f2..9149f54d1 100644 --- a/src/ld65/exports.c +++ b/src/ld65/exports.c @@ -776,14 +776,20 @@ static void PrintUnresolved (ExpCheckFunc F, void* Data) Import* Imp = E->ImpList; const char* name = GetString (E->Name); while (Imp) { - unsigned J; - for (J = 0; J < CollCount (&Imp->RefLines); ++J) { - const LineInfo* LI = CollConstAt (&Imp->RefLines, J); - fprintf (stderr, - "%s:%u: Error: Unresolved external '%s'\n", - GetSourceName (LI), - GetSourceLine (LI), - name); + unsigned J, count = CollCount (&Imp->RefLines); + /* The count is 0 when the import was not added by an input file, + but by the compiler itself. */ + if (count == 0) { + fprintf (stderr, "Error: Unresolved external '%s'\n", name); + } else { + for (J = 0; J < count; ++J) { + const LineInfo* LI = CollConstAt (&Imp->RefLines, J); + fprintf (stderr, + "%s:%u: Error: Unresolved external '%s'\n", + GetSourceName (LI), + GetSourceLine (LI), + name); + } } Imp = Imp->Next; } From 9004c4fccbe629fe32d7cf864fe57203ba7c0ed9 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 15 Aug 2020 06:27:11 +0800 Subject: [PATCH 1690/2710] Made it easier to support 0-size structs in the future. --- src/cc65/compile.c | 10 ++++++---- src/cc65/datatype.c | 12 ++++++++++-- src/cc65/locals.c | 12 ++++++------ 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 85c9bd5a4..d1f78098d 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -218,14 +218,16 @@ static void Parse (void) ** void types in ISO modes. */ if (Size == 0) { - if (!IsTypeVoid (Decl.Type)) { + if (!IsEmptiableObjectType (Decl.Type)) { if (!IsTypeArray (Decl.Type)) { /* Size is unknown and not an array */ - Error ("Variable '%s' has unknown size", Decl.Ident); + Error ("Cannot initialize variable '%s' of unknown size", Decl.Ident); } } else if (IS_Get (&Standard) != STD_CC65) { /* We cannot declare variables of type void */ - Error ("Illegal type for variable '%s'", Decl.Ident); + Error ("Illegal type '%s' for variable '%s'", + GetFullTypeName (Decl.Type), + Decl.Ident); } } @@ -253,7 +255,7 @@ static void Parse (void) /* We cannot declare variables of type void */ Error ("Illegal type for variable '%s'", Decl.Ident); Entry->Flags &= ~(SC_STORAGE | SC_DEF); - } else if (Size == 0 && SymIsDef (Entry)) { + } else if (Size == 0 && SymIsDef (Entry) && !IsEmptiableObjectType (Decl.Type)) { /* Size is unknown. Is it an array? */ if (!IsTypeArray (Decl.Type)) { Error ("Variable '%s' has unknown size", Decl.Ident); diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index e43af238e..b69a44dd0 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -805,7 +805,11 @@ unsigned CheckedSizeOf (const Type* T) { unsigned Size = SizeOf (T); if (Size == 0) { - Error ("Size of type '%s' is unknown", GetFullTypeName (T)); + if (HasUnknownSize (T + 1)) { + Error ("Size of type '%s' is unknown", GetFullTypeName (T)); + } else { + Error ("Size of type '%s' is 0", GetFullTypeName (T)); + } Size = SIZEOF_CHAR; /* Don't return zero */ } return Size; @@ -821,7 +825,11 @@ unsigned CheckedPSizeOf (const Type* T) { unsigned Size = PSizeOf (T); if (Size == 0) { - Error ("Size of type '%s' is unknown", GetFullTypeName (T + 1)); + if (HasUnknownSize (T + 1)) { + Error ("Pointer to type '%s' of unknown size", GetFullTypeName (T + 1)); + } else { + Error ("Pointer to type '%s' of 0 size", GetFullTypeName (T + 1)); + } Size = SIZEOF_CHAR; /* Don't return zero */ } return Size; diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 297994455..ad36bded0 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -174,8 +174,8 @@ static void ParseRegisterDecl (Declaration* Decl, int Reg) Sym->Flags |= SC_REF; } - /* Cannot allocate a variable of zero size */ - if (Size == 0) { + /* Cannot allocate a variable of unknown size */ + if (HasUnknownSize (Sym->Type)) { if (IsTypeArray (Decl->Type)) { Error ("Array '%s' has unknown size", Decl->Ident); } else { @@ -370,8 +370,8 @@ static void ParseAutoDecl (Declaration* Decl) } } - /* Cannot allocate a variable of zero size */ - if (Size == 0) { + /* Cannot allocate an incomplete variable */ + if (HasUnknownSize (Sym->Type)) { if (IsTypeArray (Decl->Type)) { Error ("Array '%s' has unknown size", Decl->Ident); } else { @@ -428,8 +428,8 @@ static void ParseStaticDecl (Declaration* Decl) } - /* Cannot allocate a variable of zero size */ - if (Size == 0) { + /* Cannot allocate an incomplete variable */ + if (HasUnknownSize (Sym->Type)) { if (IsTypeArray (Decl->Type)) { Error ("Array '%s' has unknown size", Decl->Ident); } else { From 3a6920bf10db2a65da00918e784301080cb390c5 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 17 Apr 2021 11:43:03 +0800 Subject: [PATCH 1691/2710] Minor clean-ups and typo fixes. --- src/cc65/assignment.c | 15 --------------- src/cc65/expr.c | 9 +-------- src/cc65/expr.h | 9 ++++++++- src/cc65/swstmt.c | 2 +- 4 files changed, 10 insertions(+), 25 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index e6d1e4526..d565551ea 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -49,21 +49,6 @@ -/*****************************************************************************/ -/* Data */ -/*****************************************************************************/ - - - -/* Map a generator function and its attributes to a token */ -typedef struct GenDesc { - token_t Tok; /* Token to map to */ - unsigned Flags; /* Flags for generator function */ - void (*Func) (unsigned, unsigned long); /* Generator func */ -} GenDesc; - - - /*****************************************************************************/ /* Code */ /*****************************************************************************/ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 0275e61a3..dc45b108d 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -48,13 +48,6 @@ -/* Map a generator function and its attributes to a token */ -typedef struct GenDesc { - token_t Tok; /* Token to map to */ - unsigned Flags; /* Flags for generator function */ - void (*Func) (unsigned, unsigned long); /* Generator func */ -} GenDesc; - /* Descriptors for the operations */ static GenDesc GenPASGN = { TOK_PLUS_ASSIGN, GEN_NOPUSH, g_add }; static GenDesc GenSASGN = { TOK_MINUS_ASSIGN, GEN_NOPUSH, g_sub }; @@ -243,7 +236,7 @@ static const GenDesc* FindGen (token_t Tok, const GenDesc* Table) /* Find a token in a generator table */ { while (Table->Tok != TOK_INVALID) { - if (Table->Tok == Tok) { + if ((token_t)Table->Tok == Tok) { return Table; } ++Table; diff --git a/src/cc65/expr.h b/src/cc65/expr.h index 841edcb62..abdf8ab0d 100644 --- a/src/cc65/expr.h +++ b/src/cc65/expr.h @@ -26,13 +26,20 @@ #define SQP_KEEP_NONE 0x00 #define SQP_KEEP_TEST 0x01U #define SQP_KEEP_EAX 0x02U -#define SQP_KEEP_EXPR 0x03U /* SQP_KEEP_TEST | SQP_KEEP_EAX */ +#define SQP_KEEP_EXPR 0x03U /* SQP_KEEP_TEST | SQP_KEEP_EAX */ /* Generator attributes */ #define GEN_NOPUSH 0x01 /* Don't push lhs */ #define GEN_COMM 0x02 /* Operator is commutative */ #define GEN_NOFUNC 0x04 /* Not allowed for function pointers */ +/* Map a generator function and its attributes to a token */ +typedef struct GenDesc { + long Tok; /* Token to map to */ + unsigned Flags; /* Flags for generator function */ + void (*Func) (unsigned, unsigned long); /* Generator func */ +} GenDesc; + /*****************************************************************************/ diff --git a/src/cc65/swstmt.c b/src/cc65/swstmt.c index ee0bd1a85..00555ffc3 100644 --- a/src/cc65/swstmt.c +++ b/src/cc65/swstmt.c @@ -206,7 +206,7 @@ void SwitchStatement (void) void CaseLabel (void) -/* Handle a case sabel */ +/* Handle a case label */ { ExprDesc CaseExpr; /* Case label expression */ long Val; /* Case label value */ From 7e1df39432f740a1079a1fa55cd05c89600faf5e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 8 Jun 2021 09:32:58 +0800 Subject: [PATCH 1692/2710] Replaced several occurance of PtrConversion() with StdConversion(). Variadic arguments of functions should be default-promoted. --- src/cc65/datatype.c | 19 +++++++++++++++++++ src/cc65/datatype.h | 6 ++++++ src/cc65/expr.c | 9 +++++---- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index b69a44dd0..6d9afa403 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1007,6 +1007,25 @@ const Type* PtrConversion (const Type* T) +const Type* StdConversion (const Type* T) +/* If the type is a function, convert it to pointer to function. If the +** expression is an array, convert it to pointer to first element. If the +** type is an integer, do integeral promotion. Otherwise return T. +*/ +{ + if (IsTypeFunc (T)) { + return AddressOf (T); + } else if (IsTypeArray (T)) { + return AddressOf (GetElementType (T)); + } else if (IsClassInt (T)) { + return IntPromotion (T); + } else { + return T; + } +} + + + const Type* IntPromotion (const Type* T) /* Apply the integer promotions to T and return the result. The returned type ** string may be T if there is no need to change it. diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index c60023944..e8ba7b6c0 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -368,6 +368,12 @@ const Type* PtrConversion (const Type* T); ** return T. */ +const Type* StdConversion (const Type* T); +/* If the type is a function, convert it to pointer to function. If the +** expression is an array, convert it to pointer to first element. If the +** type is an integer, do integeral promotion. Otherwise return T. +*/ + const Type* IntPromotion (const Type* T); /* Apply the integer promotions to T and return the result. The returned type ** string may be T if there is no need to change it. diff --git a/src/cc65/expr.c b/src/cc65/expr.c index dc45b108d..dc2374190 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -765,9 +765,10 @@ static unsigned FunctionArgList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) } else { /* No prototype available. Convert array to "pointer to first - ** element", and function to "pointer to function". + ** element", function to "pointer to function" and do integral + ** promotion if necessary. */ - Expr.Type = PtrConversion (Expr.Type); + TypeConversion (&Expr, StdConversion (Expr.Type)); } @@ -3062,7 +3063,7 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) Error ("Invalid operands for binary operator '+'"); } else { /* Array and function types must be converted to pointer types */ - Expr->Type = PtrConversion (Expr->Type); + Expr->Type = StdConversion (Expr->Type); } } @@ -3341,7 +3342,7 @@ static void parsesub (ExprDesc* Expr) } /* Result type is either a pointer or an integer */ - Expr->Type = PtrConversion (Expr->Type); + Expr->Type = StdConversion (Expr->Type); /* Condition code not set */ ED_MarkAsUntested (Expr); From 55881e913d20d8c6635f751427526b4ae46400e7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 8 Jun 2021 00:43:26 +0800 Subject: [PATCH 1693/2710] Replaced certain usage of "(New-)PointerTo()" with "AddressOf()". --- src/cc65/expr.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index dc2374190..9c12741ec 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1127,7 +1127,7 @@ static void Primary (ExprDesc* E) /* output its label */ E->Flags = E_RTYPE_RVAL | E_LOC_CODE | E_ADDRESS_OF; E->Name = Entry->V.L.Label; - E->Type = NewPointerTo (type_void); + E->Type = type_void_p; NextToken (); } else { Error ("Computed gotos are a C extension, not supported with this --standard"); @@ -1946,7 +1946,7 @@ void hie10 (ExprDesc* Expr) /* The & operator yields an rvalue address */ ED_AddrExpr (Expr); } - Expr->Type = NewPointerTo (Expr->Type); + Expr->Type = AddressOf (Expr->Type); break; case TOK_SIZEOF: @@ -2265,9 +2265,9 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ Tok = CurTok.Tok; NextToken (); - /* If lhs is a function, convert it to pointer to function */ + /* If lhs is a function, convert it to the address of the function */ if (IsTypeFunc (Expr->Type)) { - Expr->Type = NewPointerTo (Expr->Type); + Expr->Type = AddressOf (Expr->Type); } /* Get the lhs on stack */ @@ -2287,9 +2287,9 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ /* Get the right hand side */ MarkedExprWithCheck (hienext, &Expr2); - /* If rhs is a function, convert it to pointer to function */ + /* If rhs is a function, convert it to the address of the function */ if (IsTypeFunc (Expr2.Type)) { - Expr2.Type = NewPointerTo (Expr2.Type); + Expr2.Type = AddressOf (Expr2.Type); } /* Check for a numeric constant expression */ From 9e82de46071c92776edfee4913a52e136526cfe3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 16 May 2021 19:08:42 +0800 Subject: [PATCH 1694/2710] Better future-proof bit-masking. --- src/cc65/typeconv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index a7528a2f8..c72b2c5eb 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -143,10 +143,10 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) /* Do the integer constant <-> absolute address conversion if necessary */ if (IsClassPtr (NewType)) { - Expr->Flags &= ~E_LOC_NONE; + Expr->Flags &= ~E_MASK_LOC; Expr->Flags |= E_LOC_ABS | E_ADDRESS_OF; } else if (IsClassInt (NewType)) { - Expr->Flags &= ~(E_LOC_ABS | E_ADDRESS_OF); + Expr->Flags &= ~(E_MASK_LOC | E_ADDRESS_OF); Expr->Flags |= E_LOC_NONE; } From 80a468f8bd531e9c090b9b2a33c51577c997f15f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 16 May 2021 19:08:42 +0800 Subject: [PATCH 1695/2710] E_ADDRESS_OF logic fix. --- src/cc65/exprdesc.c | 5 ++--- src/cc65/exprdesc.h | 3 +-- src/cc65/loadexpr.c | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index 3d7b7c384..7d0ace004 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -93,8 +93,7 @@ int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr) int ED_IsIndExpr (const ExprDesc* Expr) /* Check if the expression is a reference to its value */ { - return (Expr->Flags & E_ADDRESS_OF) == 0 && - !ED_IsLocNone (Expr) && !ED_IsLocPrimary (Expr); + return (Expr->Flags & E_ADDRESS_OF) == 0 && !ED_IsLocNone (Expr); } #endif @@ -282,7 +281,7 @@ ExprDesc* ED_AddrExpr (ExprDesc* Expr) case E_LOC_EXPR: Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE); - Expr->Flags |= E_LOC_PRIMARY | E_RTYPE_RVAL; + Expr->Flags |= E_ADDRESS_OF | E_LOC_PRIMARY | E_RTYPE_RVAL; break; default: diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index 13eb36e5e..f2b66ee56 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -493,8 +493,7 @@ INLINE int ED_IsAddrExpr (const ExprDesc* Expr) INLINE int ED_IsIndExpr (const ExprDesc* Expr) /* Check if the expression is a reference to its value */ { - return (Expr->Flags & E_ADDRESS_OF) == 0 && - !ED_IsLocNone (Expr) && !ED_IsLocPrimary (Expr); + return (Expr->Flags & E_ADDRESS_OF) == 0 && !ED_IsLocNone (Expr); } #else int ED_IsIndExpr (const ExprDesc* Expr); diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index 4b7f8e279..c5badc1b3 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -92,6 +92,7 @@ static void LoadAddress (unsigned Flags, ExprDesc* Expr) g_leasp (Expr->IVal); break; + case E_LOC_PRIMARY: case E_LOC_EXPR: if (Expr->IVal != 0) { /* We have an expression in the primary plus a constant From 51d7c0f1eb76e94c1ce653b6a003184b9d26f1cb Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 30 Mar 2021 16:47:57 +0800 Subject: [PATCH 1696/2710] More detailed diagnostic info about conflicted function types. --- src/cc65/symtab.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index b4c97e962..aa4a9a44a 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -728,6 +728,7 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags /* New type must be compatible with the composite prototype */ if (IsDistinctRedef (E_Type, T, TC_EQUAL, TCF_MASK_QUAL)) { Error ("Conflicting function types for '%s'", Entry->Name); + TypeCompatibilityDiagnostic (T, E_Type, 0, "'%s' vs '%s'"); Entry = 0; } else { /* Refine the existing composite prototype with this new From fcbb4a52468bcfa25af1dbb9e73cf15a996cd781 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 16 May 2021 19:08:43 +0800 Subject: [PATCH 1697/2710] NoCodeConstExpr() fix to avoid exessive error messages. --- src/cc65/expr.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 9c12741ec..506a963a6 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -4211,7 +4211,8 @@ ExprDesc NoCodeConstExpr (void (*Func) (ExprDesc*)) if (!ED_IsConst (&Expr) || !ED_CodeRangeIsEmpty (&Expr)) { Error ("Constant expression expected"); /* To avoid any compiler errors, make the expression a valid const */ - ED_MakeConstAbsInt (&Expr, 1); + Expr.Flags &= E_MASK_RTYPE | E_MASK_KEEP_RESULT; + Expr.Flags |= E_LOC_NONE; } /* Return by value */ From 4cb5063e9c1e43bf4e1007fe48839fdca1feefd6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 21 Feb 2021 16:36:29 +0800 Subject: [PATCH 1698/2710] Now the compiler tracks code that has no observable effect. --- src/cc65/assignment.c | 12 +++++++ src/cc65/expr.c | 77 +++++++++++++++++++++++++++++++++++++++---- src/cc65/exprdesc.h | 14 ++++++++ src/cc65/loadexpr.c | 4 +++ src/cc65/shiftexpr.c | 3 ++ src/cc65/stdfunc.c | 9 +++++ src/cc65/stmt.c | 11 ++++--- 7 files changed, 119 insertions(+), 11 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index d565551ea..9834ae5d1 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -590,6 +590,12 @@ void OpAssign (const GenDesc* Gen, ExprDesc* Expr, const char* Op) /* Normal straight 'op=' */ OpAssignArithmetic (Gen, Expr, Op); } + + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; + + /* Propagate viral flags */ + ED_PropagateFrom (Expr, &Expr2); } @@ -710,4 +716,10 @@ void OpAddSubAssign (const GenDesc* Gen, ExprDesc *Expr, const char* Op) /* Expression is an rvalue in the primary now */ ED_FinalizeRValLoad (Expr); + + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; + + /* Propagate viral flags */ + ED_PropagateFrom (Expr, &Expr2); } diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 506a963a6..ef3c4ec38 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -642,6 +642,9 @@ void DoDeferred (unsigned Flags, ExprDesc* Expr) /* Sufficient to pop the processor flags */ AddCodeLine ("plp"); } + + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; } @@ -816,6 +819,9 @@ static unsigned FunctionArgList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) } } + /* Propagate viral flags */ + ED_PropagateFrom (ED, &Expr); + /* Check for end of argument list */ if (CurTok.Tok != TOK_COMMA) { break; @@ -1058,6 +1064,9 @@ static void FunctionCall (ExprDesc* Expr) } Expr->Type = ReturnType; + + /* We assume all function calls had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; } @@ -1267,7 +1276,7 @@ static void Primary (ExprDesc* E) case TOK_ASM: /* ASM statement */ AsmStatement (); - E->Flags = E_RTYPE_RVAL | E_EVAL_MAYBE_UNUSED; + E->Flags = E_RTYPE_RVAL | E_EVAL_MAYBE_UNUSED | E_SIDE_EFFECTS; E->Type = type_void; break; @@ -1652,6 +1661,9 @@ static void PreInc (ExprDesc* Expr) /* Result is an expression, no reference */ ED_FinalizeRValLoad (Expr); + + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; } @@ -1679,6 +1691,9 @@ static void PreDec (ExprDesc* Expr) /* Result is an expression, no reference */ ED_FinalizeRValLoad (Expr); + + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; } @@ -1715,6 +1730,9 @@ static void PostInc (ExprDesc* Expr) LoadExpr (CF_NONE, Expr); AddCodeLine ("inc %s", ED_GetLabelName (Expr, 0)); + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; + } else { if (ED_IsLocPrimaryOrExpr (Expr)) { @@ -1722,6 +1740,9 @@ static void PostInc (ExprDesc* Expr) /* Do the increment */ DoInc (Expr, OA_NEED_OLD); + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; + } else { /* Defer the increment until after the value of this expression is used */ @@ -1765,6 +1786,9 @@ static void PostDec (ExprDesc* Expr) LoadExpr (CF_NONE, Expr); AddCodeLine ("dec %s", ED_GetLabelName (Expr, 0)); + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; + } else { if (ED_IsLocPrimaryOrExpr (Expr)) { @@ -1772,6 +1796,9 @@ static void PostDec (ExprDesc* Expr) /* Do the decrement */ DoDec (Expr, OA_NEED_OLD); + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; + } else { /* Defer the decrement until after the value of this expression is used */ @@ -2232,6 +2259,9 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ /* We have an rvalue in the primary now */ ED_FinalizeRValLoad (Expr); } + + /* Propagate viral flags */ + ED_PropagateFrom (Expr, &Expr2); } } @@ -2653,6 +2683,9 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ /* Result type is always boolean */ Done: Expr->Type = type_bool; + + /* Propagate viral flags */ + ED_PropagateFrom (Expr, &Expr2); } } @@ -3069,6 +3102,9 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) /* Condition code not set */ ED_MarkAsUntested (Expr); + + /* Propagate viral flags */ + ED_PropagateFrom (Expr, &Expr2); } @@ -3346,6 +3382,9 @@ static void parsesub (ExprDesc* Expr) /* Condition code not set */ ED_MarkAsUntested (Expr); + + /* Propagate viral flags */ + ED_PropagateFrom (Expr, &Expr2); } @@ -3597,6 +3636,12 @@ static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) } } } + + /* Propagate viral flags */ + if ((Expr->Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + ED_PropagateFrom (Expr, &Expr2); + } + } /* Last expression */ @@ -3762,6 +3807,11 @@ static void hieOr (ExprDesc *Expr) } } + /* Propagate viral flags */ + if ((Expr->Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + ED_PropagateFrom (Expr, &Expr2); + } + } /* Convert to bool */ @@ -4053,6 +4103,14 @@ static void hieQuest (ExprDesc* Expr) /* Setup the target expression */ Expr->Type = ResultType; + + /* Propagate viral flags */ + if ((Expr2.Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + ED_PropagateFrom (Expr, &Expr2); + } + if ((Expr3.Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { + ED_PropagateFrom (Expr, &Expr3); + } } } @@ -4134,22 +4192,29 @@ void hie0 (ExprDesc *Expr) ** emit a warning. */ GetCodePos (&End); - if (!ED_MayHaveNoEffect (Expr) && - CodeRangeIsEmpty (&Start, &End) && - IS_Get (&WarnNoEffect) && + if (!ED_MayHaveNoEffect (Expr) && + (CodeRangeIsEmpty (&Start, &End) || + (Expr->Flags & E_SIDE_EFFECTS) == 0) && + IS_Get (&WarnNoEffect) && PrevErrorCount == ErrorCount) { - Warning ("Expression result unused"); + Warning ("Left-hand operand of comma expression has no effect"); } PrevErrorCount = ErrorCount; /* Remember the current code position */ GetCodePos (&Start); + /* Keep viral flags propagated from subexpressions */ + Flags |= Expr->Flags & E_MASK_VIRAL; + /* Reset the expression */ ED_Init (Expr); - Expr->Flags = Flags; + Expr->Flags = Flags & ~E_MASK_VIRAL; NextToken (); hie1 (Expr); + + /* Propagate viral flags */ + Expr->Flags |= Flags & E_MASK_VIRAL; } } diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index f2b66ee56..a1674a7cc 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -125,6 +125,7 @@ enum { E_LOADED = 0x1000, /* Expression is loaded in primary */ E_CC_SET = 0x2000, /* Condition codes are set */ E_HAVE_MARKS = 0x4000, /* Code marks are valid */ + E_SIDE_EFFECTS = 0x8000, /* Expression has had side effects */ /* Optimization hints */ E_MASK_NEED = 0x030000, @@ -181,6 +182,9 @@ enum { /* Expression result must be known to the compiler and generate no code to load */ E_EVAL_C_CONST = E_EVAL_COMPILER_KNOWN | E_EVAL_NO_CODE, + /* Flags to combine from subexpressions */ + E_MASK_VIRAL = E_SIDE_EFFECTS, + /* Flags to keep in subexpressions of most operations other than ternary */ E_MASK_KEEP_SUBEXPR = E_MASK_EVAL, @@ -467,6 +471,16 @@ INLINE int ED_MayHaveNoEffect (const ExprDesc* Expr) # define ED_MayHaveNoEffect(Expr) (((Expr)->Flags & E_EVAL_MAYBE_UNUSED) == E_EVAL_MAYBE_UNUSED) #endif +#if defined(HAVE_INLINE) +INLINE void ED_PropagateFrom (ExprDesc* Expr, const ExprDesc* SubExpr) +/* Propagate viral flags from subexpression */ +{ + Expr->Flags |= SubExpr->Flags & E_MASK_VIRAL; +} +#else +# define ED_PropagateFrom(Expr, SubExpr) (void)((Expr)->Flags |= (SubExpr)->Flags & E_MASK_VIRAL) +#endif + #if defined(HAVE_INLINE) INLINE int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr) /* Return true if the expression is E_LOC_PRIMARY or E_LOC_EXPR */ diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index c5badc1b3..0b75e0a9c 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -278,4 +278,8 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) } } + if (ED_IsLVal (Expr) && IsQualVolatile (Expr->Type)) { + /* Expression has had side effects */ + Expr->Flags |= E_SIDE_EFFECTS; + } } diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c index f7385ace1..eb879a475 100644 --- a/src/cc65/shiftexpr.c +++ b/src/cc65/shiftexpr.c @@ -237,5 +237,8 @@ MakeRVal: /* Set the type of the result */ Expr->Type = ResultType; + + /* Propagate from subexpressions */ + Expr->Flags |= Expr2.Flags & E_MASK_VIRAL; } } diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index 37566a455..5ed5ce671 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -185,6 +185,9 @@ static void ParseArg (ArgDesc* Arg, const Type* Type, ExprDesc* Expr) /* Use the type of the argument for the push */ Arg->Flags |= TypeOf (Arg->Expr.Type); + + /* Propagate from subexpressions */ + Expr->Flags |= Arg->Expr.Flags & E_MASK_VIRAL; } @@ -1365,6 +1368,9 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ExitPoint: /* We expect the closing brace */ ConsumeRParen (); + + /* Propagate from subexpressions */ + Expr->Flags |= Arg.Flags & E_MASK_VIRAL; } @@ -1405,4 +1411,7 @@ void HandleStdFunc (int Index, FuncDesc* F, ExprDesc* lval) /* Call the handler function */ D->Handler (F, lval); + + /* We assume all function calls had side effects */ + lval->Flags |= E_SIDE_EFFECTS; } diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index 022a8475c..a08197c09 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -613,12 +613,13 @@ static void Statement (int* PendingToken) ** void, emit a warning. */ GetCodePos (&End); - if (!ED_YetToLoad (&Expr) && - !ED_MayHaveNoEffect (&Expr) && - CodeRangeIsEmpty (&Start, &End) && - IS_Get (&WarnNoEffect) && + if (!ED_YetToLoad (&Expr) && + !ED_MayHaveNoEffect (&Expr) && + (CodeRangeIsEmpty (&Start, &End) || + (Expr.Flags & E_SIDE_EFFECTS) == 0) && + IS_Get (&WarnNoEffect) && PrevErrorCount == ErrorCount) { - Warning ("Expression result unused"); + Warning ("Statement has no effect"); } CheckSemi (PendingToken); } From a4ad212316bce9ae9a2d54fa35999a2b5c15ba96 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Feb 2021 13:47:32 +0800 Subject: [PATCH 1699/2710] Now the compiler removes code that has no observable effect. --- src/cc65/expr.c | 22 ++++++++++++++-------- src/cc65/stmt.c | 23 ++++++++++++++--------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index ef3c4ec38..eb0afb38b 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -4188,19 +4188,25 @@ void hie0 (ExprDesc *Expr) /* Append deferred inc/dec at sequence point */ DoDeferred (SQP_KEEP_NONE, Expr); - /* If the expression didn't generate code or isn't cast to type void, - ** emit a warning. + /* If the expression has no observable effect and isn't cast to type + ** void, emit a warning and remove useless code if any. */ GetCodePos (&End); - if (!ED_MayHaveNoEffect (Expr) && - (CodeRangeIsEmpty (&Start, &End) || - (Expr->Flags & E_SIDE_EFFECTS) == 0) && - IS_Get (&WarnNoEffect) && - PrevErrorCount == ErrorCount) { - Warning ("Left-hand operand of comma expression has no effect"); + if (CodeRangeIsEmpty (&Start, &End) || + (Expr->Flags & E_SIDE_EFFECTS) == 0) { + + if (!ED_MayHaveNoEffect (Expr) && + IS_Get (&WarnNoEffect) && + PrevErrorCount == ErrorCount) { + Warning ("Left-hand operand of comma expression has no effect"); + } + + /* Remove code with no effect */ + RemoveCode (&Start); } PrevErrorCount = ErrorCount; + /* Remember the current code position */ GetCodePos (&Start); diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index a08197c09..7355e88a8 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -609,18 +609,23 @@ static void Statement (int* PendingToken) Expr.Flags |= E_NEED_NONE; Expression0 (&Expr); - /* If the statement didn't generate code, and is not of type - ** void, emit a warning. + /* If the statement has no observable effect and isn't cast to type + ** void, emit a warning and remove useless code if any. */ GetCodePos (&End); - if (!ED_YetToLoad (&Expr) && - !ED_MayHaveNoEffect (&Expr) && - (CodeRangeIsEmpty (&Start, &End) || - (Expr.Flags & E_SIDE_EFFECTS) == 0) && - IS_Get (&WarnNoEffect) && - PrevErrorCount == ErrorCount) { - Warning ("Statement has no effect"); + if (CodeRangeIsEmpty (&Start, &End) || + (Expr.Flags & E_SIDE_EFFECTS) == 0) { + + if (!ED_MayHaveNoEffect (&Expr) && + IS_Get (&WarnNoEffect) && + PrevErrorCount == ErrorCount) { + Warning ("Statement has no effect"); + } + + /* Remove code with no effect */ + RemoveCode (&Start); } + CheckSemi (PendingToken); } From 4dcf18eca78b4ef2823d9e6424acb013fc628cec Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 5 Jul 2022 22:22:49 +0800 Subject: [PATCH 1700/2710] Fixed ICE with duplicate macro parameters. --- src/cc65/macrotab.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/macrotab.c b/src/cc65/macrotab.c index 09f0db50a..c04024dc8 100644 --- a/src/cc65/macrotab.c +++ b/src/cc65/macrotab.c @@ -245,7 +245,7 @@ void AddMacroArg (Macro* M, const char* Arg) for (I = 0; I < CollCount (&M->FormalArgs); ++I) { if (strcmp (CollAtUnchecked (&M->FormalArgs, I), Arg) == 0) { /* Found */ - Error ("Duplicate macro parameter: '%s'", Arg); + PPError ("Duplicate macro parameter: '%s'", Arg); break; } } From ad051efa0b203dbf7423666995e7c12efee89623 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Mon, 30 May 2022 17:10:33 +0200 Subject: [PATCH 1701/2710] Fixed typo --- include/serial.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/include/serial.h b/include/serial.h index 58943d507..35d7b8f66 100644 --- a/include/serial.h +++ b/include/serial.h @@ -148,7 +148,7 @@ unsigned char __fastcall__ ser_open (const struct ser_params* params); /* "Open" the port by setting the port parameters and enable interrupts. */ unsigned char ser_close (void); -/* "Close" the port. Clear buffers and and disable interrupts. */ +/* "Close" the port. Clear buffers and disable interrupts. */ unsigned char __fastcall__ ser_get (char* b); /* Get a character from the serial port. If no characters are available, the @@ -171,6 +171,3 @@ unsigned char __fastcall__ ser_ioctl (unsigned char code, void* data); /* End of serial.h */ #endif - - - From 358084806ab64d8eccd9e49f9f84758bbacd373b Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Fri, 3 Jun 2022 12:36:04 +0200 Subject: [PATCH 1702/2710] Fixed term #1553 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e917a13e0..536e59243 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # About cc65 cc65 is a complete cross development package for 65(C)02 systems, including -a powerful macro assembler, a C compiler, linker, librarian and several +a powerful macro assembler, a C compiler, linker, archiver and several other tools. cc65 has C and runtime library support for many of the old 6502 machines. For details look at the [Website](https://cc65.github.io). From 35a4a03c516df5062951d63b2d7b59e2a1ed8b4c Mon Sep 17 00:00:00 2001 From: Kevin Pulo <kev@pulo.com.au> Date: Thu, 16 Jun 2022 15:06:02 +1000 Subject: [PATCH 1703/2710] lynx: fix TGI_COLOR_DARKBROWN --- include/lynx.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/lynx.h b/include/lynx.h index 6c7e13da9..27804f898 100644 --- a/include/lynx.h +++ b/include/lynx.h @@ -82,7 +82,7 @@ #define TGI_COLOR_YELLOW COLOR_YELLOW #define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN #define TGI_COLOR_GREEN COLOR_GREEN -#define TGI_COLOR_DARKBROWN COLOR_DARKBROWN +#define TGI_COLOR_DARKBROWN COLOR_BROWN #define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE From c680c9fa055a3ecec2d2503eb687f2ea1665bc21 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Wed, 20 Jul 2022 23:54:57 +0200 Subject: [PATCH 1704/2710] Update lynx.h remove TGI_COLOR_DARKBROWN --- include/lynx.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/lynx.h b/include/lynx.h index 27804f898..010491d4c 100644 --- a/include/lynx.h +++ b/include/lynx.h @@ -82,7 +82,6 @@ #define TGI_COLOR_YELLOW COLOR_YELLOW #define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN #define TGI_COLOR_GREEN COLOR_GREEN -#define TGI_COLOR_DARKBROWN COLOR_BROWN #define TGI_COLOR_PURPLE COLOR_PURPLE #define TGI_COLOR_BLUE COLOR_BLUE #define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE From a55807f682544e399867bfcab7bd92f8b9db4fba Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 21 Jul 2022 03:30:47 +0200 Subject: [PATCH 1705/2710] cleanup --- libsrc/c64/emd/c64-rrr.s | 394 +++++++++++++++++++-------------------- 1 file changed, 197 insertions(+), 197 deletions(-) diff --git a/libsrc/c64/emd/c64-rrr.s b/libsrc/c64/emd/c64-rrr.s index 3de0ec0f4..db73be8f7 100644 --- a/libsrc/c64/emd/c64-rrr.s +++ b/libsrc/c64/emd/c64-rrr.s @@ -13,41 +13,41 @@ ;NOTE: If called from ROM the Lo_Code routines must exit with LDA #$00 / STA $DE00!!! just change and recompile! - .include "em-kernel.inc" - .importzp ptr1,ptr2,ptr3,ptr4,tmp1 - .macpack generic + .include "em-kernel.inc" + .importzp ptr1,ptr2,ptr3,ptr4,tmp1 + .macpack generic -c64_ram = ptr1 ;use some more expressive identifiers... -rr_ram = ptr2 -len = ptr3 -aux = ptr4 -temp = tmp1 +c64_ram = ptr1 ;use some more expressive identifiers... +rr_ram = ptr2 +len = ptr3 +aux = ptr4 +temp = tmp1 -Lo_Mem = $0100 ;location of Lo_Code (must be below $1000 or above $e000) +Lo_Mem = $0100 ;location of Lo_Code (must be below $1000 or above $e000) .segment "JUMPTABLE" - .byte $65,$6d,$64 ;Driver signature - .byte EMD_API_VERSION + .byte $65,$6d,$64 ;Driver signature + .byte EMD_API_VERSION - .addr INSTALL ;Jump Table - .addr UNINSTALL - .addr PAGECOUNT - .addr MAP - .addr USE - .addr COMMIT - .addr COPYFROM - .addr COPYTO + .addr INSTALL ;Jump Table + .addr UNINSTALL + .addr PAGECOUNT + .addr MAP + .addr USE + .addr COMMIT + .addr COPYFROM + .addr COPYTO .bss -window: .res 256 ;the memory window (256 bytes) +window: .res 256 ;the memory window (256 bytes) .rodata -dummy: .word window ;a "pseudo"-em_copy_struct, used by em_map/ em_commit - .byte 0 ;to pass over to COPYTO/COPYFROM -curpage: .byte $ff ;just this byte is changed according to the desired page - .byte 0 - .word 256 +dummy: .word window ;a "pseudo"-em_copy_struct, used by em_map/ em_commit + .byte 0 ;to pass over to COPYTO/COPYFROM +curpage: .byte $ff ;just this byte is changed according to the desired page + .byte 0 + .word 256 .code @@ -56,230 +56,230 @@ curpage: .byte $ff ;just this byte is changed according to the desired page ;returns an error code ;---------------------------------------------------------------------------------------- INSTALL: - ldx #c2-c1 -: lda c1,x - sta Lo_Mem,x - dex - bpl :- - stx curpage ;invalidate current page ($ff) - - ldx #$23 ;$de00 value for rr-ram - ldy #$02 ;$de00 value for c64-ram, CHANGE TO LDA #$00 if driver is called from ROM! - bne COMMON - -c1: stx $de00 ;try accessing rr-ram - lda $8888 - pha - lda $9999 ;remember old content of $8888 and $9999 - pha - - lda #$55 - sta $8888 ;write test values - asl - sta $9999 - - sty $de00 ;switch to c64 ram - stx $8888 - stx $9999 - - stx $de00 ;switch to rr-ram again (if present) - ldx $8888 ;read the values - ldy $9999 - pla - sta $9999 ;and write the old values back - pla - sta $8888 + ldx #c2-c1 +: lda c1,x + sta Lo_Mem,x + dex + bpl :- + stx curpage ;invalidate current page ($ff) - lda #2 - sta $de00 ;c64 ram again + ldx #$23 ;$de00 value for rr-ram + ldy #$02 ;$de00 value for c64-ram, CHANGE TO LDA #$00 if driver is called from ROM! + bne COMMON - cli - cpx #$55 - bne no - cpy #$aa - bne no - lda #0 - rts -no: asl ;.A still has #2, so return #4: error code for "device not present" - rts +c1: stx $de00 ;try accessing rr-ram + lda $8888 + pha + lda $9999 ;remember old content of $8888 and $9999 + pha + + lda #$55 + sta $8888 ;write test values + asl + sta $9999 + + sty $de00 ;switch to c64 ram + stx $8888 + stx $9999 + + stx $de00 ;switch to rr-ram again (if present) + ldx $8888 ;read the values + ldy $9999 + pla + sta $9999 ;and write the old values back + pla + sta $8888 + + lda #2 + sta $de00 ;c64 ram again + + cli + cpx #$55 + bne no + cpy #$aa + bne no + lda #0 + rts +no: asl ;.A still has #2, so return #4: error code for "device not present" + rts c2: ;---------------------------------------------------------------------------------------- ;void em_uninstall(void); ;---------------------------------------------------------------------------------------- UNINSTALL: return_null: - lda #$00 ;always return 32kb (128 pages) - .byte $2c + lda #$00 ;always return 32kb (128 pages) + .byte $2c ;---------------------------------------------------------------------------------------- ;unsigned __fastcall__ em_pagecount(void); ;---------------------------------------------------------------------------------------- PAGECOUNT: - lda #$80 - ldx #$00 - rts + lda #$80 + ldx #$00 + rts ;---------------------------------------------------------------------------------------- ;void* __fastcall__ em_use(unsigned page); ;---------------------------------------------------------------------------------------- -USE: - cmp #$80 ;valid page? - bcs return_null ;no, return NULL pointer - sta curpage ;set to current page -return_win: lda #<window ;return pointer to window - ldx #>window -return: rts +USE: + cmp #$80 ;valid page? + bcs return_null ;no, return NULL pointer + sta curpage ;set to current page +return_win: lda #<window ;return pointer to window + ldx #>window +return: rts ;---------------------------------------------------------------------------------------- ;void* __fastcall__ em_map(unsigned page); ;---------------------------------------------------------------------------------------- -MAP: - cmp #$80 - bcs return_null - sta curpage - lda #<dummy ;load .A/.X with adress of data for COPYFROM-call (which expects the - ldx #>dummy ;adress in .A/.X) - jsr COPYFROM - bcs return_win ;function returns pointer to window (returns always with carry set!) +MAP: + cmp #$80 + bcs return_null + sta curpage + lda #<dummy ;load .A/.X with adress of data for COPYFROM-call (which expects the + ldx #>dummy ;adress in .A/.X) + jsr COPYFROM + bcs return_win ;function returns pointer to window (returns always with carry set!) ;---------------------------------------------------------------------------------------- ;void __fastcall__ em_commit(void); ;---------------------------------------------------------------------------------------- -COMMIT: - lda curpage - cmp #$80 - bcs return - lda #<dummy ;load .A/.X with adress of data for COPYTO-call (which expects the - ldx #>dummy ;adress in .A/.X) - +COMMIT: + lda curpage + cmp #$80 + bcs return + lda #<dummy ;load .A/.X with adress of data for COPYTO-call (which expects the + ldx #>dummy ;adress in .A/.X) + ;---------------------------------------------------------------------------------------- ;void __fastcall__ em_copyto (struct em_copy *copy_data); ;---------------------------------------------------------------------------------------- COPYTO: - jsr get_struct_data ;read the parameters passed in the em_struct pointed to by .A/.X upon call + jsr get_struct_data ;read the parameters passed in the em_struct pointed to by .A/.X upon call - ;copy the main copyto routine into Lo_Mem - - ldy #Lo_Code1_End - Lo_Code1 -: lda Lo_Code1-1,y - sta Lo_Mem-1,y - dey - bne :- + ;copy the main copyto routine into Lo_Mem + + ldy #Lo_Code1_End - Lo_Code1 +: lda Lo_Code1-1,y + sta Lo_Mem-1,y + dey + bne :- COMMON: - sei - jmp Lo_Mem + sei + jmp Lo_Mem - ;this part will be executed in Lo_Mem (!) by COPYFROM + ;this part will be executed in Lo_Mem (!) by COPYFROM Lo_Code2: - stx $de00 ;map in rr-ram - lda (rr_ram),y ;get byte from rr-ram - sty $de00 ;RR-ROM will be mapped to $8000-$a000 but write access will go to c64-ram anyway!! - sta (c64_ram),y ;and write to c64-ram - nop ;pad to same size as Lo_Code1 - nop + stx $de00 ;map in rr-ram + lda (rr_ram),y ;get byte from rr-ram + sty $de00 ;RR-ROM will be mapped to $8000-$a000 but write access will go to c64-ram anyway!! + sta (c64_ram),y ;and write to c64-ram + nop ;pad to same size as Lo_Code1 + nop Lo_Code2_End: - ;this part will be executed in Lo_Mem (!) by COPYTO + ;this part will be executed in Lo_Mem (!) by COPYTO Lo_Code1: - lda (c64_ram),y ;read 1 byte from c64-ram - stx $de00 ;map in rr-ram - sta (rr_ram),y ;write byte to rr-ram - lda #$02 ;map in c64-ram again - sta $de00 - ;12 bytes + lda (c64_ram),y ;read 1 byte from c64-ram + stx $de00 ;map in rr-ram + sta (rr_ram),y ;write byte to rr-ram + lda #$02 ;map in c64-ram again + sta $de00 + ;12 bytes + + ;this part is common for both COPYFROM/COPYTO and executed in Lo_Mem, too - ;this part is common for both COPYFROM/COPYTO and executed in Lo_Mem, too - Lo_Code_Common: - inc c64_ram ;increase pointers - bne :+ - inc c64_ram+1 -: inc rr_ram - bne @skip - inc rr_ram+1 - lda rr_ram+1 - cmp #$a0 ;wrap around 16k boundary in rr-ram window ($8000-$a000) - bne @skip - - lda #$80 ;reset pointer to $8000 - sta rr_ram+1 - txa ;adjust value in .X to map in next 16k-bank in rr-ram - adc #7 ;carry is set because of former CMP, so it adds 8 - tax - ;27 bytes -@skip: lda c64_ram - cmp len - lda c64_ram+1 - sbc len+1 - bcc Lo_Code1 - lda #2 ;CHANGE to LDA #0 if driver is called from ROM - sta $de00 - cli - rts ;17 bytes = 56 bytes Lo_Code ($38) -Lo_Code1_End: + inc c64_ram ;increase pointers + bne :+ + inc c64_ram+1 +: inc rr_ram + bne @skip + inc rr_ram+1 + lda rr_ram+1 + cmp #$a0 ;wrap around 16k boundary in rr-ram window ($8000-$a000) + bne @skip + + lda #$80 ;reset pointer to $8000 + sta rr_ram+1 + txa ;adjust value in .X to map in next 16k-bank in rr-ram + adc #7 ;carry is set because of former CMP, so it adds 8 + tax + ;27 bytes +@skip: lda c64_ram + cmp len + lda c64_ram+1 + sbc len+1 + bcc Lo_Code1 + lda #2 ;CHANGE to LDA #0 if driver is called from ROM + sta $de00 + cli + rts ;17 bytes = 56 bytes Lo_Code ($38) +Lo_Code1_End: ;---------------------------------------------------------------------------------------- ;void __fastcall__ em_copyfrom(struct em_copy *copy_data); ;copy from extended memory into linear memory ;---------------------------------------------------------------------------------------- COPYFROM: - jsr get_struct_data + jsr get_struct_data - ldy #Lo_Code2_End - Lo_Code2 ;copy routine into Lo_Mem -: lda Lo_Code2-1,y - sta Lo_Mem-1,y - dey - bne :- - ldy #Lo_Code1_End-Lo_Code_Common -: lda Lo_Code_Common-1,y - sta Lo_Mem+11,y - dey - bne :- - beq COMMON ;and execute... + ldy #Lo_Code2_End - Lo_Code2 ;copy routine into Lo_Mem +: lda Lo_Code2-1,y + sta Lo_Mem-1,y + dey + bne :- + ldy #Lo_Code1_End-Lo_Code_Common +: lda Lo_Code_Common-1,y + sta Lo_Mem+11,y + dey + bne :- + beq COMMON ;and execute... ;---------------------------------------------------------------------------------------- ;read the struct data located at (.A/.X) ;and setup parameters for stash/ fetch operation ;---------------------------------------------------------------------------------------- get_struct_data: - ;read and process the values from the em_copy struct passed to as parameters rameter to the - ;functions em_copyto and em_copyfrom + ;read and process the values from the em_copy struct passed to as parameters rameter to the + ;functions em_copyto and em_copyfrom - sta aux ;store adress of struct (passed in .A/.X) into a zp pointer - stx aux+1 - ldy #0 ;index 0 - - lda (aux),y ;read c64-adress lo - sta c64_ram - iny - lda (aux),y ;read c64-adress hi - sta c64_ram+1 ;(c64_ram) --> points to c64-adress space - iny - lda (aux),y ;read rr-adress lo - sta rr_ram - iny - lda (aux),y ;rr-adress hi - pha ;remember - and #$1f - ora #$80 ;adjust into 16k-window ($8000-$a000) - sta rr_ram+1 - pla ;re-get hi byte of rr-adress - and #$60 ;isolate bits 5 and 6 - lsr - lsr ;shift into bits 3 and 4 - ora #$23 ;set bit 5 (select ram) and 1+2 (game/exrom setting for ULTIMAX-mode) - tax ;.X has now the value to write into $de00 to acess rr-ram at desired 16k-bank - iny - iny ;skip unused byte - lda (aux),y ;read length lo-byte - clc - adc c64_ram ;add to c64-addres - sta len - iny - lda (aux),y ;length hi-byte - adc c64_ram+1 - sta len+1 ;tmp2: length, tmp3 contains end adress of transfer in c64-ram. - rts ;55 bytes + sta aux ;store adress of struct (passed in .A/.X) into a zp pointer + stx aux+1 + ldy #0 ;index 0 + + lda (aux),y ;read c64-adress lo + sta c64_ram + iny + lda (aux),y ;read c64-adress hi + sta c64_ram+1 ;(c64_ram) --> points to c64-adress space + iny + lda (aux),y ;read rr-adress lo + sta rr_ram + iny + lda (aux),y ;rr-adress hi + pha ;remember + and #$1f + ora #$80 ;adjust into 16k-window ($8000-$a000) + sta rr_ram+1 + pla ;re-get hi byte of rr-adress + and #$60 ;isolate bits 5 and 6 + lsr + lsr ;shift into bits 3 and 4 + ora #$23 ;set bit 5 (select ram) and 1+2 (game/exrom setting for ULTIMAX-mode) + tax ;.X has now the value to write into $de00 to acess rr-ram at desired 16k-bank + iny + iny ;skip unused byte + lda (aux),y ;read length lo-byte + clc + adc c64_ram ;add to c64-addres + sta len + iny + lda (aux),y ;length hi-byte + adc c64_ram+1 + sta len+1 ;tmp2: length, tmp3 contains end adress of transfer in c64-ram. + rts ;55 bytes From 86091ac6bf2f447ed745b1a4ff98234d9cda7706 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 21 Jul 2022 03:43:54 +0200 Subject: [PATCH 1706/2710] some cleanup --- libsrc/c64/emd/c64-rrr.s | 203 +++++++++++++++++++++------------------ 1 file changed, 112 insertions(+), 91 deletions(-) diff --git a/libsrc/c64/emd/c64-rrr.s b/libsrc/c64/emd/c64-rrr.s index db73be8f7..289ee7e39 100644 --- a/libsrc/c64/emd/c64-rrr.s +++ b/libsrc/c64/emd/c64-rrr.s @@ -3,49 +3,67 @@ ;should work for ActionReplay as well... ; ; -;Version 1.0 -; -;Johannes Braun 2006-08-22 -;hannenz@freenet.de +; original Version 1.0 by Johannes Braun 2006-08-22 <hannenz@freenet.de> ; ;use the functions described in "usr/lib/cc65/include/em.h" to make use of this driver. -;------------------------------------------------------------------------------------------------------------------------- +; ------------------------------------------------------------------------ ;NOTE: If called from ROM the Lo_Code routines must exit with LDA #$00 / STA $DE00!!! just change and recompile! - .include "em-kernel.inc" - .importzp ptr1,ptr2,ptr3,ptr4,tmp1 - .macpack generic + .include "zeropage.inc" -c64_ram = ptr1 ;use some more expressive identifiers... -rr_ram = ptr2 -len = ptr3 -aux = ptr4 -temp = tmp1 + .include "em-kernel.inc" + .include "em-error.inc" -Lo_Mem = $0100 ;location of Lo_Code (must be below $1000 or above $e000) + .macpack generic + .macpack module -.segment "JUMPTABLE" +; ------------------------------------------------------------------------ - .byte $65,$6d,$64 ;Driver signature - .byte EMD_API_VERSION +c64_ram = ptr1 ; use some more expressive identifiers... +rr_ram = ptr2 +len = ptr3 +aux = ptr4 +temp = tmp1 - .addr INSTALL ;Jump Table - .addr UNINSTALL - .addr PAGECOUNT - .addr MAP - .addr USE - .addr COMMIT - .addr COPYFROM - .addr COPYTO +Lo_Mem = $0100 ; location of Lo_Code (must be below $1000 or above $e000) + +; ------------------------------------------------------------------------ +; Header. Includes jump table + + module_header _c64_rrr_emd + +; Driver signature + + .byte $65, $6d, $64 ; "emd" + .byte EMD_API_VERSION ; EM API version number + +; Library reference + + .addr $0000 + +; Jump table + + .addr INSTALL + .addr UNINSTALL + .addr PAGECOUNT + .addr MAP + .addr USE + .addr COMMIT + .addr COPYFROM + .addr COPYTO + +; ------------------------------------------------------------------------ .bss -window: .res 256 ;the memory window (256 bytes) +window: .res 256 ; the memory window (256 bytes) .rodata -dummy: .word window ;a "pseudo"-em_copy_struct, used by em_map/ em_commit - .byte 0 ;to pass over to COPYTO/COPYFROM -curpage: .byte $ff ;just this byte is changed according to the desired page +dummy: + .word window ; a "pseudo"-em_copy_struct, used by em_map/ em_commit + .byte 0 ; to pass over to COPYTO/COPYFROM +curpage: + .byte $ff ; just this byte is changed according to the desired page .byte 0 .word 256 @@ -61,37 +79,37 @@ INSTALL: sta Lo_Mem,x dex bpl :- - stx curpage ;invalidate current page ($ff) + stx curpage ; invalidate current page ($ff) - ldx #$23 ;$de00 value for rr-ram - ldy #$02 ;$de00 value for c64-ram, CHANGE TO LDA #$00 if driver is called from ROM! + ldx #$23 ; $de00 value for rr-ram + ldy #$02 ; $de00 value for c64-ram, CHANGE TO LDA #$00 if driver is called from ROM! bne COMMON -c1: stx $de00 ;try accessing rr-ram +c1: stx $de00 ; try accessing rr-ram lda $8888 pha - lda $9999 ;remember old content of $8888 and $9999 + lda $9999 ; remember old content of $8888 and $9999 pha lda #$55 - sta $8888 ;write test values + sta $8888 ; write test values asl sta $9999 - sty $de00 ;switch to c64 ram + sty $de00 ; switch to c64 ram stx $8888 stx $9999 - stx $de00 ;switch to rr-ram again (if present) - ldx $8888 ;read the values + stx $de00 ; switch to rr-ram again (if present) + ldx $8888 ; read the values ldy $9999 pla - sta $9999 ;and write the old values back + sta $9999 ; and write the old values back pla sta $8888 lda #2 - sta $de00 ;c64 ram again + sta $de00 ; c64 ram again cli cpx #$55 @@ -100,7 +118,7 @@ c1: stx $de00 ;try accessing rr-ram bne no lda #0 rts -no: asl ;.A still has #2, so return #4: error code for "device not present" +no: asl ; A still has #2, so return #4: error code for "device not present" rts c2: ;---------------------------------------------------------------------------------------- @@ -108,7 +126,8 @@ c2: ;---------------------------------------------------------------------------------------- UNINSTALL: return_null: - lda #$00 ;always return 32kb (128 pages) + lda #$00 ; always return 32kb (128 pages) + ; fall through, skip the LDA .byte $2c ;---------------------------------------------------------------------------------------- @@ -123,12 +142,13 @@ PAGECOUNT: ;void* __fastcall__ em_use(unsigned page); ;---------------------------------------------------------------------------------------- USE: - cmp #$80 ;valid page? - bcs return_null ;no, return NULL pointer - sta curpage ;set to current page -return_win: lda #<window ;return pointer to window + cmp #$80 ; valid page? + bcs return_null ; no, return NULL pointer + sta curpage ; set to current page +return_win: + lda #<window ; return pointer to window ldx #>window -return: rts +return: rts ;---------------------------------------------------------------------------------------- ;void* __fastcall__ em_map(unsigned page); @@ -137,10 +157,10 @@ MAP: cmp #$80 bcs return_null sta curpage - lda #<dummy ;load .A/.X with adress of data for COPYFROM-call (which expects the - ldx #>dummy ;adress in .A/.X) + lda #<dummy ; load .A/.X with adress of data for COPYFROM-call (which expects the + ldx #>dummy ; adress in .A/.X) jsr COPYFROM - bcs return_win ;function returns pointer to window (returns always with carry set!) + bcs return_win ; function returns pointer to window (returns always with carry set!) ;---------------------------------------------------------------------------------------- ;void __fastcall__ em_commit(void); @@ -149,8 +169,8 @@ COMMIT: lda curpage cmp #$80 bcs return - lda #<dummy ;load .A/.X with adress of data for COPYTO-call (which expects the - ldx #>dummy ;adress in .A/.X) + lda #<dummy ; load .A/.X with adress of data for COPYTO-call (which expects the + ldx #>dummy ; adress in .A/.X) ;---------------------------------------------------------------------------------------- ;void __fastcall__ em_copyto (struct em_copy *copy_data); @@ -161,7 +181,7 @@ COPYTO: ;copy the main copyto routine into Lo_Mem ldy #Lo_Code1_End - Lo_Code1 -: lda Lo_Code1-1,y +: lda Lo_Code1-1,y sta Lo_Mem-1,y dey bne :- @@ -172,11 +192,11 @@ COMMON: ;this part will be executed in Lo_Mem (!) by COPYFROM Lo_Code2: - stx $de00 ;map in rr-ram - lda (rr_ram),y ;get byte from rr-ram - sty $de00 ;RR-ROM will be mapped to $8000-$a000 but write access will go to c64-ram anyway!! - sta (c64_ram),y ;and write to c64-ram - nop ;pad to same size as Lo_Code1 + stx $de00 ;map in rr-ram + lda (rr_ram),y ;get byte from rr-ram + sty $de00 ;RR-ROM will be mapped to $8000-$a000 but write access will go to c64-ram anyway!! + sta (c64_ram),y ;and write to c64-ram + nop ;pad to same size as Lo_Code1 nop Lo_Code2_End: @@ -184,41 +204,41 @@ Lo_Code2_End: ;this part will be executed in Lo_Mem (!) by COPYTO Lo_Code1: - lda (c64_ram),y ;read 1 byte from c64-ram - stx $de00 ;map in rr-ram - sta (rr_ram),y ;write byte to rr-ram + lda (c64_ram),y ;read 1 byte from c64-ram + stx $de00 ;map in rr-ram + sta (rr_ram),y ;write byte to rr-ram lda #$02 ;map in c64-ram again sta $de00 - ;12 bytes + ;12 bytes ;this part is common for both COPYFROM/COPYTO and executed in Lo_Mem, too Lo_Code_Common: - inc c64_ram ;increase pointers + inc c64_ram ;increase pointers bne :+ inc c64_ram+1 -: inc rr_ram +: inc rr_ram bne @skip inc rr_ram+1 lda rr_ram+1 - cmp #$a0 ;wrap around 16k boundary in rr-ram window ($8000-$a000) + cmp #$a0 ;wrap around 16k boundary in rr-ram window ($8000-$a000) bne @skip - lda #$80 ;reset pointer to $8000 + lda #$80 ;reset pointer to $8000 sta rr_ram+1 - txa ;adjust value in .X to map in next 16k-bank in rr-ram - adc #7 ;carry is set because of former CMP, so it adds 8 + txa ;adjust value in .X to map in next 16k-bank in rr-ram + adc #7 ;carry is set because of former CMP, so it adds 8 tax ;27 bytes -@skip: lda c64_ram +@skip: lda c64_ram cmp len lda c64_ram+1 sbc len+1 bcc Lo_Code1 - lda #2 ;CHANGE to LDA #0 if driver is called from ROM + lda #2 ;CHANGE to LDA #0 if driver is called from ROM sta $de00 cli - rts ;17 bytes = 56 bytes Lo_Code ($38) + rts ;17 bytes = 56 bytes Lo_Code ($38) Lo_Code1_End: ;---------------------------------------------------------------------------------------- ;void __fastcall__ em_copyfrom(struct em_copy *copy_data); @@ -228,16 +248,16 @@ COPYFROM: jsr get_struct_data ldy #Lo_Code2_End - Lo_Code2 ;copy routine into Lo_Mem -: lda Lo_Code2-1,y +: lda Lo_Code2-1,y sta Lo_Mem-1,y dey bne :- ldy #Lo_Code1_End-Lo_Code_Common -: lda Lo_Code_Common-1,y +: lda Lo_Code_Common-1,y sta Lo_Mem+11,y dey bne :- - beq COMMON ;and execute... + beq COMMON ;and execute... ;---------------------------------------------------------------------------------------- ;read the struct data located at (.A/.X) ;and setup parameters for stash/ fetch operation @@ -247,39 +267,40 @@ get_struct_data: ;read and process the values from the em_copy struct passed to as parameters rameter to the ;functions em_copyto and em_copyfrom - sta aux ;store adress of struct (passed in .A/.X) into a zp pointer + sta aux ;store adress of struct (passed in .A/.X) into a zp pointer stx aux+1 - ldy #0 ;index 0 + ldy #0 ;index 0 - lda (aux),y ;read c64-adress lo + lda (aux),y ;read c64-adress lo sta c64_ram iny - lda (aux),y ;read c64-adress hi - sta c64_ram+1 ;(c64_ram) --> points to c64-adress space + lda (aux),y ;read c64-adress hi + sta c64_ram+1 ;(c64_ram) --> points to c64-adress space iny - lda (aux),y ;read rr-adress lo + lda (aux),y ;read rr-adress lo sta rr_ram iny - lda (aux),y ;rr-adress hi - pha ;remember + lda (aux),y ;rr-adress hi + pha ;remember and #$1f ora #$80 ;adjust into 16k-window ($8000-$a000) sta rr_ram+1 - pla ;re-get hi byte of rr-adress + pla ;re-get hi byte of rr-adress and #$60 ;isolate bits 5 and 6 lsr - lsr ;shift into bits 3 and 4 + lsr ;shift into bits 3 and 4 ora #$23 ;set bit 5 (select ram) and 1+2 (game/exrom setting for ULTIMAX-mode) - tax ;.X has now the value to write into $de00 to acess rr-ram at desired 16k-bank + tax ;.X has now the value to write into $de00 to acess rr-ram at desired 16k-bank iny - iny ;skip unused byte - lda (aux),y ;read length lo-byte + iny ;skip unused byte + lda (aux),y ;read length lo-byte clc - adc c64_ram ;add to c64-addres + adc c64_ram ;add to c64-addres sta len iny - lda (aux),y ;length hi-byte + lda (aux),y ;length hi-byte adc c64_ram+1 - sta len+1 ;tmp2: length, tmp3 contains end adress of transfer in c64-ram. - rts ;55 bytes + sta len+1 ;tmp2: length, tmp3 contains end adress of transfer in c64-ram. + rts + ;55 bytes From 3cb3d5dad37da0a153a73001f7c5691169a8a9c2 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 21 Jul 2022 03:45:40 +0200 Subject: [PATCH 1707/2710] cleanup --- libsrc/c64/emd/c64-rrr.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/c64/emd/c64-rrr.s b/libsrc/c64/emd/c64-rrr.s index 289ee7e39..8382e406e 100644 --- a/libsrc/c64/emd/c64-rrr.s +++ b/libsrc/c64/emd/c64-rrr.s @@ -53,7 +53,7 @@ Lo_Mem = $0100 ; location of Lo_Code (must be below $1000 or above $e000) .addr COPYFROM .addr COPYTO -; ------------------------------------------------------------------------ +; ------------------------------------------------------------------------ .bss window: .res 256 ; the memory window (256 bytes) From d3d6de2704fe9d7b177f68a1a38f6612705ae05d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 21 Jul 2022 11:09:56 +0800 Subject: [PATCH 1708/2710] Allowed the pp-tokens following #error and #warning directives to be optional. --- src/cc65/preproc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index a607e3217..5057b5d71 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1028,7 +1028,7 @@ static void DoError (void) { SkipWhitespace (0); if (CurC == '\0') { - PPError ("Invalid #error directive"); + PPError ("#error"); } else { PPError ("#error: %s", SB_GetConstBuf (Line) + SB_GetIndex (Line)); } @@ -1212,7 +1212,7 @@ static void DoWarning (void) { SkipWhitespace (0); if (CurC == '\0') { - PPError ("Invalid #warning directive"); + PPWarning ("#warning"); } else { PPWarning ("#warning: %s", SB_GetConstBuf (Line) + SB_GetIndex (Line)); } From f91c8ad247397f66d567cd4a5c84531725f088d5 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 21 Jul 2022 11:09:59 +0800 Subject: [PATCH 1709/2710] Allowed comments right after "#" in preporcessor directives. --- src/cc65/preproc.c | 99 +++++++++++++++++++++++++++++++--------------- src/cc65/preproc.h | 5 +++ 2 files changed, 72 insertions(+), 32 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 5057b5d71..58b924f6a 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -288,7 +288,7 @@ static void OldStyleComment (void) /* Remember the current line number, so we can output better error ** messages if the comment is not terminated in the current file. */ - unsigned StartingLine = GetCurrentLine(); + unsigned StartingLine = GetCurrentLine (); /* Skip the start of comment chars */ NextChar (); @@ -336,8 +336,8 @@ static void NewStyleComment (void) static int SkipWhitespace (int SkipLines) -/* Skip white space in the input stream. Do also skip newlines if SkipLines -** is true. Return zero if nothing was skipped, otherwise return a +/* Skip white space and comments in the input stream. Do also skip newlines if +** SkipLines is true. Return zero if nothing was skipped, otherwise return a ** value != zero. */ { @@ -346,6 +346,12 @@ static int SkipWhitespace (int SkipLines) if (IsSpace (CurC)) { NextChar (); Skipped = 1; + } else if (CurC == '/' && NextC == '*') { + OldStyleComment (); + Skipped = 1; + } else if (IS_Get (&Standard) >= STD_C99 && CurC == '/' && NextC == '/') { + NewStyleComment (); + Skipped = 1; } else if (CurC == '\0' && SkipLines) { /* End of line, read next */ if (NextLine () != 0) { @@ -479,16 +485,6 @@ static void ReadMacroArgs (MacroExp* E) if (SB_NotEmpty (&Arg)) { SB_AppendChar (&Arg, ' '); } - } else if (CurC == '/' && NextC == '*') { - if (SB_NotEmpty (&Arg)) { - SB_AppendChar (&Arg, ' '); - } - OldStyleComment (); - } else if (IS_Get (&Standard) >= STD_C99 && CurC == '/' && NextC == '/') { - if (SB_NotEmpty (&Arg)) { - SB_AppendChar (&Arg, ' '); - } - NewStyleComment (); } else if (CurC == '\0') { /* End of input inside macro argument list */ PPError ("Unterminated argument list invoking macro '%s'", E->M->Name); @@ -839,7 +835,7 @@ static void DefineMacro (void) /* Remove whitespace and comments from the line, store the preprocessed ** line into the macro replacement buffer. */ - Pass1 (Line, &M->Replacement); + TranslationPhase3 (Line, &M->Replacement); /* Remove whitespace from the end of the line */ while (IsSpace (SB_LookAtLast (&M->Replacement))) { @@ -865,9 +861,55 @@ static void DefineMacro (void) +void TranslationPhase3 (StrBuf* Source, StrBuf* Target) +/* Mimic Translation Phase 3. Handle old and new style comments. Collapse +** non-newline whitespace sequences. +*/ +{ + /* Switch to the new input source */ + StrBuf* OldSource = InitLine (Source); + + /* Loop removing ws and comments */ + while (CurC != '\0') { + int HasWhiteSpace = 0; + while (1) { + /* Squeeze runs of blanks */ + if (IsSpace (CurC)) { + NextChar (); + HasWhiteSpace = 1; + } else if (CurC == '/' && NextC == '*') { + OldStyleComment (); + HasWhiteSpace = 1; + } else if (IS_Get (&Standard) >= STD_C99 && CurC == '/' && NextC == '/') { + NewStyleComment (); + HasWhiteSpace = 1; + } else { + /* No more white space */ + break; + } + } + if (HasWhiteSpace) { + SB_AppendChar (Target, ' '); + } else if (IsQuote (CurC)) { + CopyQuotedString (Target); + } else { + SB_AppendChar (Target, CurC); + NextChar (); + } + } + + /* Terminate the new input line */ + SB_Terminate (Target); + + /* Switch back to the old source */ + InitLine (OldSource); +} + + + static unsigned Pass1 (StrBuf* Source, StrBuf* Target) -/* Preprocessor pass 1. Remove whitespace. Handle old and new style comments -** and the "defined" operator. +/* Preprocessor pass 1. Remove whitespace, old and new style comments. Handle +** the "defined" operator. */ { unsigned IdentCount; @@ -915,16 +957,6 @@ static unsigned Pass1 (StrBuf* Source, StrBuf* Target) } } else if (IsQuote (CurC)) { CopyQuotedString (Target); - } else if (CurC == '/' && NextC == '*') { - if (!IsSpace (SB_LookAtLast (Target))) { - SB_AppendChar (Target, ' '); - } - OldStyleComment (); - } else if (IS_Get (&Standard) >= STD_C99 && CurC == '/' && NextC == '/') { - if (!IsSpace (SB_LookAtLast (Target))) { - SB_AppendChar (Target, ' '); - } - NewStyleComment (); } else { SB_AppendChar (Target, CurC); NextChar (); @@ -981,7 +1013,7 @@ static void MacroReplacement (StrBuf* Source, StrBuf* Target) static void PreprocessLine (void) -/* Translate one line. */ +/* Translate one line with defined macros replaced */ { /* Trim whitespace and remove comments. The function returns the number of ** identifiers found. If there were any, we will have to check for macros. @@ -1030,7 +1062,10 @@ static void DoError (void) if (CurC == '\0') { PPError ("#error"); } else { - PPError ("#error: %s", SB_GetConstBuf (Line) + SB_GetIndex (Line)); + StrBuf MsgLine = AUTO_STRBUF_INITIALIZER; + TranslationPhase3 (Line, &MsgLine); + PPError ("#error: %s", SB_GetConstBuf (&MsgLine) + SB_GetIndex (&MsgLine)); + SB_Done (&MsgLine); } /* Clear the rest of line */ @@ -1174,9 +1209,6 @@ static void DoPragma (void) ** the _Pragma() compiler operator. */ { - /* Skip blanks following the #pragma directive */ - SkipWhitespace (0); - /* Copy the remainder of the line into MLine removing comments and ws */ SB_Clear (MLine); Pass1 (Line, MLine); @@ -1214,7 +1246,10 @@ static void DoWarning (void) if (CurC == '\0') { PPWarning ("#warning"); } else { - PPWarning ("#warning: %s", SB_GetConstBuf (Line) + SB_GetIndex (Line)); + StrBuf MsgLine = AUTO_STRBUF_INITIALIZER; + TranslationPhase3 (Line, &MsgLine); + PPWarning ("#warning: %s", SB_GetConstBuf (&MsgLine) + SB_GetIndex (&MsgLine)); + SB_Done (&MsgLine); } /* Clear the rest of line */ diff --git a/src/cc65/preproc.h b/src/cc65/preproc.h index 78a91a590..c65636ef0 100644 --- a/src/cc65/preproc.h +++ b/src/cc65/preproc.h @@ -55,6 +55,11 @@ extern unsigned char Preprocessing; +void TranslationPhase3 (StrBuf* Source, StrBuf* Target); +/* Mimic Translation Phase 3. Handle old and new style comments. Collapse +** non-newline whitespace sequences. +*/ + void Preprocess (void); /* Preprocess a line */ From 16a8a647469337a5e3bcd7b0c6f0a9a341f6a724 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 21 Jul 2022 11:10:02 +0800 Subject: [PATCH 1710/2710] Use a dedicated expression parser for the preprocessor. --- src/cc65.vcxproj | 2 + src/cc65/expr.c | 146 ++------ src/cc65/ppexpr.c | 845 +++++++++++++++++++++++++++++++++++++++++++++ src/cc65/ppexpr.h | 76 ++++ src/cc65/preproc.c | 93 ++--- src/cc65/preproc.h | 16 - 6 files changed, 1010 insertions(+), 168 deletions(-) create mode 100644 src/cc65/ppexpr.c create mode 100644 src/cc65/ppexpr.h diff --git a/src/cc65.vcxproj b/src/cc65.vcxproj index 5cddc1862..7e2e8ea8c 100644 --- a/src/cc65.vcxproj +++ b/src/cc65.vcxproj @@ -103,6 +103,7 @@ <ClInclude Include="cc65\macrotab.h" /> <ClInclude Include="cc65\opcodes.h" /> <ClInclude Include="cc65\output.h" /> + <ClInclude Include="cc65\ppexpr.h" /> <ClInclude Include="cc65\pragma.h" /> <ClInclude Include="cc65\preproc.h" /> <ClInclude Include="cc65\reginfo.h" /> @@ -182,6 +183,7 @@ <ClCompile Include="cc65\main.c" /> <ClCompile Include="cc65\opcodes.c" /> <ClCompile Include="cc65\output.c" /> + <ClCompile Include="cc65\ppexpr.c" /> <ClCompile Include="cc65\pragma.c" /> <ClCompile Include="cc65\preproc.c" /> <ClCompile Include="cc65\reginfo.c" /> diff --git a/src/cc65/expr.c b/src/cc65/expr.c index eb0afb38b..a666db470 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -304,13 +304,9 @@ void PushAddr (const ExprDesc* Expr) static void WarnConstCompareResult (const ExprDesc* Expr) -/* If the result of a comparison is constant, this is suspicious when not in -** preprocessor mode. -*/ +/* If the result of a comparison is constant, this is suspicious */ { - if (!Preprocessing && - !ED_NeedsConst (Expr) && - IS_Get (&WarnConstComparison) != 0) { + if (!ED_NeedsConst (Expr) && IS_Get (&WarnConstComparison) != 0) { Warning ("Result of comparison is always %s", Expr->IVal != 0 ? "true" : "false"); } } @@ -1075,58 +1071,19 @@ static void Primary (ExprDesc* E) /* This is the lowest level of the expression parser. */ { SymEntry* Sym; - - /* Character and integer constants. */ - if (CurTok.Tok == TOK_ICONST || CurTok.Tok == TOK_CCONST) { - E->IVal = CurTok.IVal; - E->Flags |= E_LOC_NONE | E_RTYPE_RVAL; - E->Type = CurTok.Type; - NextToken (); - return; - } - - /* Floating point constant */ - if (CurTok.Tok == TOK_FCONST) { - E->V.FVal = CurTok.FVal; - E->Flags |= E_LOC_NONE | E_RTYPE_RVAL; - E->Type = CurTok.Type; - NextToken (); - return; - } - - /* Process parenthesized subexpression by calling the whole parser - ** recursively. - */ - if (CurTok.Tok == TOK_LPAREN) { - NextToken (); - hie0 (E); - ConsumeRParen (); - return; - } - - /* If we run into an identifier in preprocessing mode, we assume that this - ** is an undefined macro and replace it by a constant value of zero. - */ - if (Preprocessing && CurTok.Tok == TOK_IDENT) { - NextToken (); - ED_MakeConstAbsInt (E, 0); - return; - } - - /* All others may only be used if the expression evaluation is not called - ** recursively by the preprocessor. - */ - if (Preprocessing) { - /* Illegal expression in PP mode */ - Error ("Preprocessor expression expected"); - ED_MakeConstAbsInt (E, 1); - return; - } - unsigned Flags = E->Flags & E_MASK_KEEP_MAKE; switch (CurTok.Tok) { + case TOK_LPAREN: + /* Process parenthesized subexpression by calling the whole parser + ** recursively. + */ + NextToken (); + hie0 (E); + ConsumeRParen (); + break; + case TOK_BOOL_AND: /* A computed goto label address */ if (IS_Get (&Standard) >= STD_CC65) { @@ -1160,9 +1117,9 @@ static void Primary (ExprDesc* E) /* Cannot use type symbols */ Error ("Variable identifier expected"); /* Assume an int type to make E valid */ - E->Flags |= E_LOC_STACK | E_RTYPE_LVAL; - E->Type = type_int; - return; + E->Flags = E_LOC_STACK | E_RTYPE_LVAL; + E->Type = type_int; + break; } /* Mark the symbol as referenced */ @@ -1175,11 +1132,11 @@ static void Primary (ExprDesc* E) if ((Sym->Flags & SC_CONST) == SC_CONST) { /* Enum or some other numeric constant */ E->Flags = E_LOC_NONE | E_RTYPE_RVAL; - E->IVal = Sym->V.ConstVal; + E->IVal = Sym->V.ConstVal; } else if ((Sym->Flags & SC_FUNC) == SC_FUNC) { /* Function */ E->Flags = E_LOC_GLOBAL | E_RTYPE_LVAL; - E->Name = (uintptr_t) Sym->Name; + E->Name = (uintptr_t) Sym->Name; } else if ((Sym->Flags & SC_AUTO) == SC_AUTO) { /* Local variable. If this is a parameter for a variadic ** function, we have to add some address calculations, and the @@ -1202,10 +1159,10 @@ static void Primary (ExprDesc* E) /* Static variable */ if (Sym->Flags & (SC_EXTERN | SC_STORAGE | SC_DECL)) { E->Flags = E_LOC_GLOBAL | E_RTYPE_LVAL; - E->Name = (uintptr_t) Sym->Name; + E->Name = (uintptr_t) Sym->Name; } else { E->Flags = E_LOC_STATIC | E_RTYPE_LVAL; - E->Name = Sym->V.L.Label; + E->Name = Sym->V.L.Label; } } else { /* Local static variable */ @@ -1251,7 +1208,7 @@ static void Primary (ExprDesc* E) /* Undeclared Variable */ Sym = AddLocalSym (Ident, type_int, SC_AUTO | SC_REF, 0); E->Flags = E_LOC_STACK | E_RTYPE_LVAL; - E->Type = type_int; + E->Type = type_int; Error ("Undefined symbol: '%s'", Ident); } @@ -1273,6 +1230,23 @@ static void Primary (ExprDesc* E) NextToken (); break; + case TOK_ICONST: + case TOK_CCONST: + /* Character and integer constants */ + E->IVal = CurTok.IVal; + E->Flags = E_LOC_NONE | E_RTYPE_RVAL; + E->Type = CurTok.Type; + NextToken (); + break; + + case TOK_FCONST: + /* Floating point constant */ + E->V.FVal = CurTok.FVal; + E->Flags = E_LOC_NONE | E_RTYPE_RVAL; + E->Type = CurTok.Type; + NextToken (); + break; + case TOK_ASM: /* ASM statement */ AsmStatement (); @@ -3474,48 +3448,6 @@ static void hie2 (ExprDesc* Expr) -static void hieAndPP (ExprDesc* Expr) -/* Process "exp && exp" in preprocessor mode (that is, when the parser is -** called recursively from the preprocessor. -*/ -{ - *Expr = NoCodeConstAbsIntExpr (hie2); - while (CurTok.Tok == TOK_BOOL_AND) { - - /* Skip the && */ - NextToken (); - - /* Get rhs */ - ExprDesc Expr2 = NoCodeConstAbsIntExpr (hie2); - - /* Combine the two */ - Expr->IVal = (Expr->IVal && Expr2.IVal); - } -} - - - -static void hieOrPP (ExprDesc *Expr) -/* Process "exp || exp" in preprocessor mode (that is, when the parser is -** called recursively from the preprocessor. -*/ -{ - *Expr = NoCodeConstAbsIntExpr (hieAndPP); - while (CurTok.Tok == TOK_BOOL_OR) { - - /* Skip the && */ - NextToken (); - - /* Get rhs */ - ExprDesc Expr2 = NoCodeConstAbsIntExpr (hieAndPP); - - /* Combine the two */ - Expr->IVal = (Expr->IVal || Expr2.IVal); - } -} - - - static int hieAnd (ExprDesc* Expr, unsigned* TrueLab, int* TrueLabAllocated) /* Process "exp && exp". This should only be called within hieOr. ** Return true if logic AND does occur. @@ -3865,11 +3797,7 @@ static void hieQuest (ExprDesc* Expr) Type* ResultType; /* Type of result */ /* Call the lower level eval routine */ - if (Preprocessing) { - ExprWithCheck (hieOrPP, Expr); - } else { - ExprWithCheck (hieOr, Expr); - } + ExprWithCheck (hieOr, Expr); /* Check if it's a ternary expression */ if (CurTok.Tok == TOK_QUEST) { diff --git a/src/cc65/ppexpr.c b/src/cc65/ppexpr.c new file mode 100644 index 000000000..da25e12f1 --- /dev/null +++ b/src/cc65/ppexpr.c @@ -0,0 +1,845 @@ +/*****************************************************************************/ +/* */ +/* ppexpr.h */ +/* */ +/* Expressions for C preprocessor */ +/* */ +/* */ +/* */ +/* (C) 2022 The cc65 Authors */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +/* cc65 */ +#include "error.h" +#include "scanner.h" +#include "ppexpr.h" + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* PP expression parser status */ +static int PPEvaluationEnabled = 0; +static int PPEvaluationFailed = 0; + + + +/*****************************************************************************/ +/* Forwards */ +/*****************************************************************************/ + + + +static void PPhie0 (PPExpr* Expr); +static void PPhie1 (PPExpr* Expr); + + + +/*****************************************************************************/ +/* Helper functions */ +/*****************************************************************************/ + + + +static token_t PPFindTok (token_t Tok, const token_t* Table) +/* Find a token in a generator table */ +{ + while (*Table != TOK_INVALID) { + if (*Table == Tok) { + return Tok; + } + ++Table; + } + return TOK_INVALID; +} + + + +static void PPExprInit (PPExpr* Expr) +/* Initialize the expression */ +{ + Expr->IVal = 0; + Expr->Flags = PPEXPR_NONE; +} + + + +static void PPErrorSkipLine (void) +/* Skip the remain tokens till the end of the line and set the expression +** parser error flag. +*/ +{ + SkipTokens (0, 0); + PPEvaluationFailed = 1; +} + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +static void PPhiePrimary (PPExpr* Expr) +/* This is the lowest level of the PP expression parser */ +{ + switch (CurTok.Tok) { + case TOK_ICONST: + case TOK_CCONST: + /* Character and integer constants */ + Expr->IVal = CurTok.IVal; + /* According to the C standard, all signed types act as intmax_t + ** and all unsigned types act as uintmax_t. + */ + if (IsSignUnsigned (CurTok.Type)) { + Expr->Flags |= PPEXPR_UNSIGNED; + } + NextToken (); + break; + + case TOK_FCONST: + /* Floating point constant */ + PPError ("Floating constant in preprocessor expression"); + Expr->IVal = 0; + NextToken (); + break; + + case TOK_LPAREN: + /* Parse parenthesized subexpression by calling the whole parser + ** recursively. + */ + NextToken (); + PPhie0 (Expr); + ConsumeRParen (); + break; + + case TOK_IDENT: + /* Assume that this identifier is an undefined macro and replace + ** it by a constant value of zero. + */ + NextToken (); + Expr->Flags |= PPEXPR_UNDEFINED; + Expr->IVal = 0; + break; + + default: + /* Illegal expression in PP mode */ + PPError ("Preprocessor expression expected"); + PPErrorSkipLine (); + break; + } +} + + + +static void PPhie11 (PPExpr* Expr) +/* Handle compound types (structs and arrays) etc which are invalid in PP */ +{ + /* Evaluate the lhs */ + PPhiePrimary (Expr); + + /* Check for a rhs */ + while (CurTok.Tok == TOK_INC || CurTok.Tok == TOK_DEC || + CurTok.Tok == TOK_LBRACK || CurTok.Tok == TOK_LPAREN || + CurTok.Tok == TOK_DOT || CurTok.Tok == TOK_PTR_REF) { + + switch (CurTok.Tok) { + + case TOK_LBRACK: + PPError ("Token \".\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); + break; + + case TOK_LPAREN: + /* Function call syntax is not recognized in preprocessor + ** expressions. + */ + PPError ("Missing binary operator before token \"(\""); + PPErrorSkipLine (); + break; + + case TOK_DOT: + PPError ("Token \".\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); + break; + + case TOK_PTR_REF: + PPError ("Token \"->\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); + break; + + case TOK_INC: + PPError ("Token \"++\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); + break; + + case TOK_DEC: + PPError ("Token \"--\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); + break; + + default: + Internal ("Invalid token in PPhie11: %d", CurTok.Tok); + + } + } +} + + + +void PPhie10 (PPExpr* Expr) +/* Handle prefixing unary operators */ +{ + switch (CurTok.Tok) { + + case TOK_INC: + PPError ("Token \"++\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); + break; + + case TOK_DEC: + PPError ("Token \"--\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); + break; + + case TOK_PLUS: + NextToken (); + PPhie10 (Expr); + Expr->IVal = +Expr->IVal; + break; + + case TOK_MINUS: + NextToken (); + PPhie10 (Expr); + Expr->IVal = -Expr->IVal; + break; + + case TOK_COMP: + NextToken (); + PPhie10 (Expr); + Expr->IVal = ~Expr->IVal; + break; + + case TOK_BOOL_NOT: + NextToken (); + PPhie10 (Expr); + Expr->IVal = !Expr->IVal; + break; + + case TOK_STAR: + case TOK_AND: + case TOK_SIZEOF: + default: + /* Type cast, sizeof, *, &, are not recognized in preprocessor + ** expressions. So everything is treated as as expression here. + */ + PPhie11 (Expr); + break; + } +} + + + +static void PPhie_internal (const token_t* Ops, /* List of generators */ + PPExpr* Expr, + void (*hienext) (PPExpr*)) +/* Helper function */ +{ + token_t Tok; + + hienext (Expr); + + while ((Tok = PPFindTok (CurTok.Tok, Ops)) != 0) { + + PPExpr Rhs; + PPExprInit (&Rhs); + + /* Remember the operator token, then skip it */ + NextToken (); + + /* Get the right hand side */ + hienext (&Rhs); + + if (PPEvaluationEnabled) { + + /* If either side is unsigned, the result is unsigned */ + Expr->Flags |= Rhs.Flags & PPEXPR_UNSIGNED; + + /* Handle the op differently for signed and unsigned integers */ + if ((Expr->Flags & PPEXPR_UNSIGNED) == 0) { + + /* Evaluate the result for signed operands */ + signed long Val1 = Expr->IVal; + signed long Val2 = Rhs.IVal; + switch (Tok) { + case TOK_OR: + Expr->IVal = (Val1 | Val2); + break; + case TOK_XOR: + Expr->IVal = (Val1 ^ Val2); + break; + case TOK_AND: + Expr->IVal = (Val1 & Val2); + break; + case TOK_PLUS: + Expr->IVal = (Val1 + Val2); + break; + case TOK_MINUS: + Expr->IVal = (Val1 - Val2); + break; + case TOK_MUL: + Expr->IVal = (Val1 * Val2); + break; + case TOK_DIV: + if (Val2 == 0) { + PPError ("Division by zero"); + Expr->IVal = 0; + } else { + Expr->IVal = (Val1 / Val2); + } + break; + case TOK_MOD: + if (Val2 == 0) { + PPError ("Modulo operation with zero"); + Expr->IVal = 0; + } else { + Expr->IVal = (Val1 % Val2); + } + break; + default: + Internal ("PPhie_internal: got token 0x%X\n", Tok); + } + + } else { + + /* Evaluate the result for unsigned operands */ + unsigned long Val1 = Expr->IVal; + unsigned long Val2 = Rhs.IVal; + switch (Tok) { + case TOK_OR: + Expr->IVal = (Val1 | Val2); + break; + case TOK_XOR: + Expr->IVal = (Val1 ^ Val2); + break; + case TOK_AND: + Expr->IVal = (Val1 & Val2); + break; + case TOK_PLUS: + Expr->IVal = (Val1 + Val2); + break; + case TOK_MINUS: + Expr->IVal = (Val1 - Val2); + break; + case TOK_MUL: + Expr->IVal = (Val1 * Val2); + break; + case TOK_DIV: + if (Val2 == 0) { + PPError ("Division by zero"); + Expr->IVal = 0; + } else { + Expr->IVal = (Val1 / Val2); + } + break; + case TOK_MOD: + if (Val2 == 0) { + PPError ("Modulo operation with zero"); + Expr->IVal = 0; + } else { + Expr->IVal = (Val1 % Val2); + } + break; + default: + Internal ("PPhie_internal: got token 0x%X\n", Tok); + } + } + } + } +} + + + +static void PPhie_compare (const token_t* Ops, /* List of generators */ + PPExpr* Expr, + void (*hienext) (PPExpr*)) +/* Helper function for the compare operators */ +{ + token_t Tok; + + hienext (Expr); + + while ((Tok = PPFindTok (CurTok.Tok, Ops)) != 0) { + + PPExpr Rhs; + + PPExprInit (&Rhs); + + /* Skip the operator token */ + NextToken (); + + /* Get the right hand side */ + hienext (&Rhs); + + if (PPEvaluationEnabled) { + + /* If either side is unsigned, the comparison is unsigned */ + Expr->Flags |= Rhs.Flags & PPEXPR_UNSIGNED; + + /* Determine if this is a signed or unsigned compare */ + if ((Expr->Flags & PPEXPR_UNSIGNED) == 0) { + + /* Evaluate the result for signed operands */ + signed long Val1 = Expr->IVal; + signed long Val2 = Rhs.IVal; + switch (Tok) { + case TOK_EQ: Expr->IVal = (Val1 == Val2); break; + case TOK_NE: Expr->IVal = (Val1 != Val2); break; + case TOK_LT: Expr->IVal = (Val1 < Val2); break; + case TOK_LE: Expr->IVal = (Val1 <= Val2); break; + case TOK_GE: Expr->IVal = (Val1 >= Val2); break; + case TOK_GT: Expr->IVal = (Val1 > Val2); break; + default: Internal ("PPhie_compare: got token 0x%X\n", Tok); + } + + } else { + + /* Evaluate the result for unsigned operands */ + unsigned long Val1 = Expr->IVal; + unsigned long Val2 = Rhs.IVal; + switch (Tok) { + case TOK_EQ: Expr->IVal = (Val1 == Val2); break; + case TOK_NE: Expr->IVal = (Val1 != Val2); break; + case TOK_LT: Expr->IVal = (Val1 < Val2); break; + case TOK_LE: Expr->IVal = (Val1 <= Val2); break; + case TOK_GE: Expr->IVal = (Val1 >= Val2); break; + case TOK_GT: Expr->IVal = (Val1 > Val2); break; + default: Internal ("PPhie_compare: got token 0x%X\n", Tok); + } + } + } + } + + /* The result is signed */ + Expr->Flags &= ~PPEXPR_UNSIGNED; +} + + + +static void PPhie9 (PPExpr* Expr) +/* Handle "*", "/" and "%" operators */ +{ + static const token_t PPhie9_ops[] = { + TOK_STAR, + TOK_DIV, + TOK_MOD, + TOK_INVALID + }; + + PPhie_internal (PPhie9_ops, Expr, PPhie10); +} + + + +static void PPhie8 (PPExpr* Expr) +/* Handle "+" and "-" binary operators */ +{ + static const token_t PPhie8_ops[] = { + TOK_PLUS, + TOK_MINUS, + TOK_INVALID + }; + + PPhie_internal (PPhie8_ops, Expr, PPhie9); +} + + + +static void PPhie7 (PPExpr* Expr) +/* Handle the "<<" and ">>" shift operators */ +{ + /* Evaluate the lhs */ + PPhie8 (Expr); + + while (CurTok.Tok == TOK_SHL || CurTok.Tok == TOK_SHR) { + + token_t Op; /* The operator token */ + PPExpr Rhs; + PPExprInit (&Rhs); + + /* Remember the operator, then skip its token */ + Op = CurTok.Tok; + NextToken (); + + /* Get the right hand side */ + PPhie8 (&Rhs); + + /* Evaluate */ + if (PPEvaluationEnabled) { + /* To shift by a negative value is equivalent to shift to the + ** opposite direction. + */ + if ((Rhs.Flags & PPEXPR_UNSIGNED) != 0 && Rhs.IVal > (long)LONG_BITS) { + Rhs.IVal = (long)LONG_BITS; + } + if (Op == TOK_SHR) { + Rhs.IVal = -Rhs.IVal; + } + + /* Evaluate the result */ + if ((Expr->Flags & PPEXPR_UNSIGNED) != 0) { + if (Rhs.IVal >= (long)LONG_BITS) { + /* For now we use (unsigned) long types for integer constants */ + PPWarning ("Integer overflow in preprocessor expression"); + Expr->IVal = 0; + } else if (Rhs.IVal > 0) { + Expr->IVal <<= Rhs.IVal; + } else if (Rhs.IVal < -(long)LONG_BITS) { + Expr->IVal = 0; + } else if (Rhs.IVal < 0) { + Expr->IVal = (unsigned long)Expr->IVal >> -Rhs.IVal; + } + } else { + if (Rhs.IVal >= (long)(LONG_BITS - 1)) { + /* For now we use (unsigned) long types for integer constants */ + PPWarning ("Integer overflow in preprocessor expression"); + Expr->IVal = 0; + } else if (Rhs.IVal > 0) { + Expr->IVal <<= Rhs.IVal; + } else if (Rhs.IVal < -(long)LONG_BITS) { + Expr->IVal = -1; + } else if (Rhs.IVal < 0) { + Expr->IVal >>= Expr->IVal >> -Rhs.IVal; + } + } + } + } +} + + + +static void PPhie6 (PPExpr* Expr) +/* Handle greater-than type relational operators */ +{ + static const token_t PPhie6_ops [] = { + TOK_LT, + TOK_LE, + TOK_GE, + TOK_GT, + TOK_INVALID + }; + + PPhie_compare (PPhie6_ops, Expr, PPhie7); +} + + + +static void PPhie5 (PPExpr* Expr) +/* Handle "==" and "!=" relational operators */ +{ + static const token_t PPhie5_ops[] = { + TOK_EQ, + TOK_NE, + TOK_INVALID + }; + + PPhie_compare (PPhie5_ops, Expr, PPhie6); +} + + + +static void PPhie4 (PPExpr* Expr) +/* Handle the bitwise AND "&" operator */ +{ + static const token_t PPhie4_ops[] = { + TOK_AND, + TOK_INVALID + }; + + PPhie_internal (PPhie4_ops, Expr, PPhie5); +} + + + +static void PPhie3 (PPExpr* Expr) +/* Handle the bitwise exclusive OR "^" operator */ +{ + static const token_t PPhie3_ops[] = { + TOK_XOR, + TOK_INVALID + }; + + PPhie_internal (PPhie3_ops, Expr, PPhie4); +} + + + +static void PPhie2 (PPExpr* Expr) +/* Handle the bitwise OR "|" operator */ +{ + static const token_t PPhie2_ops[] = { + TOK_OR, + TOK_INVALID + }; + + PPhie_internal (PPhie2_ops, Expr, PPhie3); +} + + + +static void PPhieAnd (PPExpr* Expr) +/* Handle the logical AND "expr1 && expr2" operator */ +{ + /* Get one operand */ + PPhie2 (Expr); + + if (CurTok.Tok == TOK_BOOL_AND) { + + int PPEvaluationEnabledPrev = PPEvaluationEnabled; + PPExpr One; + + /* Do logical and */ + Expr->IVal = (Expr->IVal != 0); + if (Expr->IVal == 0) { + PPEvaluationEnabled = 0; + } + + /* While there are more expressions */ + while (CurTok.Tok == TOK_BOOL_AND) { + /* Skip the && */ + NextToken (); + + /* Get one operand */ + PPExprInit (&One); + PPhie2 (&One); + + /* Evaluate */ + if (PPEvaluationEnabled) { + if (One.IVal == 0) { + /* Skip evaluating remaining */ + PPEvaluationEnabled = 0; + /* The value of the result will be false */ + Expr->IVal = 0; + } + } + } + + /* Restore evaluation as before */ + PPEvaluationEnabled = PPEvaluationEnabledPrev; + } +} + + + +static void PPhieOr (PPExpr* Expr) +/* Handle the logical OR "||" operator */ +{ + /* Call the next level parser */ + PPhieAnd (Expr); + + if (CurTok.Tok == TOK_BOOL_OR) { + + int PPEvaluationEnabledPrev = PPEvaluationEnabled; + PPExpr One; + + /* Do logical or */ + Expr->IVal = (Expr->IVal != 0); + if (Expr->IVal != 0) { + PPEvaluationEnabled = 0; + } + + /* While there are more expressions */ + while (CurTok.Tok == TOK_BOOL_OR) { + /* Skip the || */ + NextToken (); + + /* Get rhs subexpression */ + PPExprInit (&One); + PPhieAnd (&One); + + /* Evaluate */ + if (PPEvaluationEnabled) { + if (One.IVal != 0) { + /* Skip evaluating remaining */ + PPEvaluationEnabled = 0; + /* The value of the result will be true */ + Expr->IVal = 1; + } + } + } + + /* Restore evaluation as before */ + PPEvaluationEnabled = PPEvaluationEnabledPrev; + } +} + + + +static void PPhieQuest (PPExpr* Expr) +/* Handle the ternary "expr1 ? expr2 : expr3 " operator */ +{ + /* Call the lower level eval routine */ + PPhieOr (Expr); + + /* Check if it's a ternary expression */ + if (CurTok.Tok == TOK_QUEST) { + int PPEvaluationEnabledPrev = PPEvaluationEnabled; + PPExpr Expr2; /* Expression 2 */ + PPExpr Expr3; /* Expression 3 */ + + /* Skip the question mark */ + NextToken (); + + /* Disable evaluation for Expr2 if the condition is false */ + if (Expr->IVal == 0) { + PPEvaluationEnabled = 0; + } + + /* Parse second expression */ + PPExprInit (&Expr2); + PPhie0 (&Expr2); + + /* Skip the colon */ + ConsumeColon (); + + /* Disable evaluation for Expr3 if the condition is true */ + if (Expr->IVal != 0) { + PPEvaluationEnabled = 0; + } + + /* Parse third expression */ + PPExprInit (&Expr3); + PPhie1 (&Expr3); + + /* Set the result */ + Expr->IVal = Expr->IVal ? Expr2.IVal != 0 : Expr3.IVal != 0; + + /* Restore evaluation as before */ + PPEvaluationEnabled = PPEvaluationEnabledPrev; + } +} + + + +static void PPhie1 (PPExpr* Expr) +/* Handle first level of expression hierarchy */ +{ + PPhieQuest (Expr); + + if (!PPEvaluationEnabled) { + /* Skip evaluation */ + return; + } + + switch (CurTok.Tok) { + + case TOK_ASSIGN: + PPError ("Token \"=\" is not valid in preprocessor expressions"); + break; + + case TOK_PLUS_ASSIGN: + PPError ("Token \"+=\" is not valid in preprocessor expressions"); + break; + + case TOK_MINUS_ASSIGN: + PPError ("Token \"-=\" is not valid in preprocessor expressions"); + break; + + case TOK_MUL_ASSIGN: + PPError ("Token \"*=\" is not valid in preprocessor expressions"); + break; + + case TOK_DIV_ASSIGN: + PPError ("Token \"/=\" is not valid in preprocessor expressions"); + break; + + case TOK_MOD_ASSIGN: + PPError ("Token \"%%=\" is not valid in preprocessor expressions"); + break; + + case TOK_SHL_ASSIGN: + PPError ("Token \"<<=\" is not valid in preprocessor expressions"); + break; + + case TOK_SHR_ASSIGN: + PPError ("Token \">>=\" is not valid in preprocessor expressions"); + break; + + case TOK_AND_ASSIGN: + PPError ("Token \"&=\" is not valid in preprocessor expressions"); + break; + + case TOK_OR_ASSIGN: + PPError ("Token \"|=\" is not valid in preprocessor expressions"); + break; + + case TOK_XOR_ASSIGN: + PPError ("Token \"^=\" is not valid in preprocessor expressions"); + break; + + default: + break; + } +} + + + +static void PPhie0 (PPExpr* Expr) +/* Handle the comma "," operator */ +{ + PPhie1 (Expr); + + while (CurTok.Tok == TOK_COMMA) { + /* Skip the comma */ + NextToken (); + /* Reset the expression */ + PPExprInit (Expr); + /* Use the next operand as the value instead */ + PPhie1 (Expr); + } +} + + + +void ParsePPExpr (PPExpr* Expr) +/* Parse a line for PP expression */ +{ + /* Initialize the parser status */ + PPEvaluationFailed = 0; + PPEvaluationEnabled = 1; + + /* Parse */ + PPExprInit (Expr); + PPhie0 (Expr); + + /* If the evaluation fails, the result is always zero */ + if (PPEvaluationFailed) { + Expr->IVal = 0; + } +} diff --git a/src/cc65/ppexpr.h b/src/cc65/ppexpr.h new file mode 100644 index 000000000..683c6c49d --- /dev/null +++ b/src/cc65/ppexpr.h @@ -0,0 +1,76 @@ +/*****************************************************************************/ +/* */ +/* ppexpr.h */ +/* */ +/* Expressions for C preprocessor */ +/* */ +/* */ +/* */ +/* (C) 2022 The cc65 Authors */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef PPEXPR_H +#define PPEXPR_H + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* PPExpr data struct */ +typedef struct PPExpr PPExpr; +struct PPExpr +{ + long IVal; + unsigned Flags; +}; + +/* PPExpr initializers */ +#define AUTO_PPEXPR_INITIALIZER { 0, 0 } +#define STATIC_PPEXPR_INITIALIZER { 0, 0 } + +/* PPExpr flags */ +#define PPEXPR_NONE 0U +#define PPEXPR_UNSIGNED 1U +#define PPEXPR_UNDEFINED 2U + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +void ParsePPExpr (PPExpr* Expr); +/* Parse a line for PP expression */ + + + +/* End of ppexpr.h */ + +#endif diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 58b924f6a..7e690874a 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -48,13 +48,13 @@ /* cc65 */ #include "codegen.h" #include "error.h" -#include "expr.h" #include "global.h" #include "ident.h" #include "incpath.h" #include "input.h" #include "lineinfo.h" #include "macrotab.h" +#include "ppexpr.h" #include "preproc.h" #include "scanner.h" #include "standard.h" @@ -68,7 +68,7 @@ /* Set when the preprocessor calls expr() recursively */ -unsigned char Preprocessing = 0; +static unsigned char Preprocessing = 0; /* Management data for #if */ #define MAX_IFS 256 @@ -98,6 +98,11 @@ struct MacroExp { +static void TranslationPhase3 (StrBuf* Source, StrBuf* Target); +/* Mimic Translation Phase 3. Handle old and new style comments. Collapse +** non-newline whitespace sequences. +*/ + static unsigned Pass1 (StrBuf* Source, StrBuf* Target); /* Preprocessor pass 1. Remove whitespace. Handle old and new style comments ** and the "defined" operator. @@ -861,7 +866,7 @@ static void DefineMacro (void) -void TranslationPhase3 (StrBuf* Source, StrBuf* Target) +static void TranslationPhase3 (StrBuf* Source, StrBuf* Target) /* Mimic Translation Phase 3. Handle old and new style comments. Collapse ** non-newline whitespace sequences. */ @@ -1077,48 +1082,50 @@ static void DoError (void) static int DoIf (int Skip) /* Process #if directive */ { - /* We're about to abuse the compiler expression parser to evaluate the - ** #if expression. Save the current tokens to come back here later. - ** NOTE: Yes, this is a hack, but it saves a complete separate expression - ** evaluation for the preprocessor. - */ - Token SavedCurTok = CurTok; - Token SavedNextTok = NextTok; + PPExpr Expr = AUTO_PPEXPR_INITIALIZER; - /* Make sure the line infos for the tokens won't get removed */ - if (SavedCurTok.LI) { - UseLineInfo (SavedCurTok.LI); + if (!Skip) { + /* We're about to use a dedicated expression parser to evaluate the #if + ** expression. Save the current tokens to come back here later. + */ + Token SavedCurTok = CurTok; + Token SavedNextTok = NextTok; + + /* Make sure the line infos for the tokens won't get removed */ + if (SavedCurTok.LI) { + UseLineInfo (SavedCurTok.LI); + } + if (SavedNextTok.LI) { + UseLineInfo (SavedNextTok.LI); + } + + /* Switch into special preprocessing mode */ + Preprocessing = 1; + + /* Expand macros in this line */ + PreprocessLine (); + + /* Add two semicolons as sentinels to the line, so the following + ** expression evaluation will eat these two tokens but nothing from + ** the following line. + */ + SB_AppendStr (Line, ";;"); + SB_Terminate (Line); + + /* Load CurTok and NextTok with tokens from the new input */ + NextToken (); + NextToken (); + + /* Call the expression parser */ + ParsePPExpr (&Expr); + + /* End preprocessing mode */ + Preprocessing = 0; + + /* Reset the old tokens */ + CurTok = SavedCurTok; + NextTok = SavedNextTok; } - if (SavedNextTok.LI) { - UseLineInfo (SavedNextTok.LI); - } - - /* Switch into special preprocessing mode */ - Preprocessing = 1; - - /* Expand macros in this line */ - PreprocessLine (); - - /* Add two semicolons as sentinels to the line, so the following - ** expression evaluation will eat these two tokens but nothing from - ** the following line. - */ - SB_AppendStr (Line, ";;"); - SB_Terminate (Line); - - /* Load CurTok and NextTok with tokens from the new input */ - NextToken (); - NextToken (); - - /* Call the expression parser */ - ExprDesc Expr = NoCodeConstExpr (hie1); - - /* End preprocessing mode */ - Preprocessing = 0; - - /* Reset the old tokens */ - CurTok = SavedCurTok; - NextTok = SavedNextTok; /* Set the #if condition according to the expression result */ return PushIf (Skip, 1, Expr.IVal != 0); diff --git a/src/cc65/preproc.h b/src/cc65/preproc.h index c65636ef0..34f62c114 100644 --- a/src/cc65/preproc.h +++ b/src/cc65/preproc.h @@ -38,28 +38,12 @@ -/*****************************************************************************/ -/* data */ -/*****************************************************************************/ - - - -/* Set when the preprocessor calls NoCodeConstExpr() recursively */ -extern unsigned char Preprocessing; - - - /*****************************************************************************/ /* code */ /*****************************************************************************/ -void TranslationPhase3 (StrBuf* Source, StrBuf* Target); -/* Mimic Translation Phase 3. Handle old and new style comments. Collapse -** non-newline whitespace sequences. -*/ - void Preprocess (void); /* Preprocess a line */ From ac4cb258be99d5c3a0254c87141e8a093d61a87e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 21 Jul 2022 11:59:38 +0800 Subject: [PATCH 1711/2710] Removed a mysterious "Hey!" message. --- src/cc65/codeent.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 62118d80c..928815934 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -1797,7 +1797,6 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) } } else if (strcmp (E->Arg, "tosaslax") == 0) { if (RegValIsKnown (In->RegA) && (In->RegA & 0x0F) >= 8) { - printf ("Hey!\n"); Out->RegA = 0; } } else if (strcmp (E->Arg, "tosorax") == 0) { From 758d9466c0e6cedc8c4877559ffa77e41a4e92d2 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Sun, 24 Jul 2022 00:33:56 +0200 Subject: [PATCH 1712/2710] rename '_poserror' to '__poserror' The old name could be non-conforming to the C standard. The new name is definitely in the "implementation name space". See issue #1796. --- doc/funcref.sgml | 10 +++++----- include/stdio.h | 2 +- libsrc/common/_poserror.c | 4 ++-- libsrc/geos-common/common/_poserror.c | 4 ++-- samples/geos/overlay-demo.c | 16 ++++++++-------- targettest/rename-test.c | 12 ++++++------ 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index a8593ebb5..c249cc3cf 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -627,7 +627,7 @@ communication, see also <tt>testcode/lib/ser-test.c</tt>. <sect1><tt/stdio.h/<label id="stdio.h"><p> <itemize> -<item><ref id="_poserror" name="_poserror"> +<item><ref id="__poserror" name="__poserror"> <item><ref id="clearerr" name="clearerr"> <!-- <item><ref id="fclose" name="fclose"> --> <!-- <item><ref id="fdopen" name="fdopen"> --> @@ -1058,14 +1058,14 @@ It returns 1 if it does. </descrip> </quote> -<sect1>_poserror<label id="_poserror"><p> +<sect1>__poserror<label id="__poserror"><p> <quote> <descrip> <tag/Function/Print an error message for the error in <tt/_oserror/. <tag/Header/<tt/<ref id="stdio.h" name="stdio.h">/ -<tag/Declaration/<tt/void __fastcall__ _poserror (const char* msg);/ -<tag/Description/<tt/_poserror/ prints an error message to <tt/stderr/. If +<tag/Declaration/<tt/void __fastcall__ __poserror (const char* msg);/ +<tag/Description/<tt/__poserror/ prints an error message to <tt/stderr/. If <tt/msg/ is not <tt/NULL/ and not an empty string, it is printed followed by a colon and a blank. Then the error message for the current contents of <tt/_oserror/ are printed followed by a newline. The message output is the @@ -5856,7 +5856,7 @@ be used in presence of a prototype. </itemize> <tag/Availability/ISO 9899 <tag/See also/ -<ref id="_poserror" name="_poserror">, +<ref id="__poserror" name="__poserror">, <ref id="strerror" name="strerror"> <tag/Example/None. </descrip> diff --git a/include/stdio.h b/include/stdio.h index 84a991a98..f4ba52a15 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -147,7 +147,7 @@ int __fastcall__ vfscanf (FILE* f, const char* format, __va_list ap); FILE* __fastcall__ fdopen (int fd, const char* mode); /* Unix */ int __fastcall__ fileno (FILE* f); /* Unix */ #endif -void __fastcall__ _poserror (const char* msg); /* cc65 */ +void __fastcall__ __poserror (const char* msg); /* cc65 */ /* Masking macros for some functions */ #define getc(f) fgetc (f) /* ANSI */ diff --git a/libsrc/common/_poserror.c b/libsrc/common/_poserror.c index 2777fee98..93c67dcf7 100644 --- a/libsrc/common/_poserror.c +++ b/libsrc/common/_poserror.c @@ -1,6 +1,6 @@ /*****************************************************************************/ /* */ -/* _poserror.c */ +/* __poserror.c */ /* */ /* Output a system dependent error code */ /* */ @@ -39,7 +39,7 @@ -void __fastcall__ _poserror (const char* msg) +void __fastcall__ __poserror (const char* msg) { /* Fetch the message that corresponds to _oserror */ const char* errormsg = _stroserror (_oserror); diff --git a/libsrc/geos-common/common/_poserror.c b/libsrc/geos-common/common/_poserror.c index eeb3f368e..1e06a3b24 100644 --- a/libsrc/geos-common/common/_poserror.c +++ b/libsrc/geos-common/common/_poserror.c @@ -1,5 +1,5 @@ /* -** _poserror.c +** __poserror.c ** ** Maciej 'YTM/Elysium' Witkowiak, 25.04.2003 */ @@ -9,7 +9,7 @@ #include <errno.h> #include <geos.h> -void __fastcall__ _poserror (const char* msg) +void __fastcall__ __poserror (const char* msg) { const char *errmsg = _stroserror(_oserror); diff --git a/samples/geos/overlay-demo.c b/samples/geos/overlay-demo.c index 73ab0e3c0..d6acbe655 100644 --- a/samples/geos/overlay-demo.c +++ b/samples/geos/overlay-demo.c @@ -65,7 +65,7 @@ void foobar (void) void main(int /*argc*/, char *argv[]) { if (OpenRecordFile(argv[0])) { - _poserror("OpenRecordFile"); + __poserror("OpenRecordFile"); return; } @@ -73,7 +73,7 @@ void main(int /*argc*/, char *argv[]) "Click OK to call Overlay One."); if (PointRecord(1)) { - _poserror("PointRecord.1"); + __poserror("PointRecord.1"); return; } @@ -82,7 +82,7 @@ void main(int /*argc*/, char *argv[]) ** size specific to a certain program. */ if (ReadRecord(OVERLAY_ADDR, OVERLAY_SIZE)) { - _poserror("ReadRecord.1"); + __poserror("ReadRecord.1"); return; } @@ -96,7 +96,7 @@ void main(int /*argc*/, char *argv[]) "Click OK to call Overlay Two."); if (PointRecord(2)) { - _poserror("PointRecord.2"); + __poserror("PointRecord.2"); return; } @@ -104,7 +104,7 @@ void main(int /*argc*/, char *argv[]) ** program. This implies that an overlay can never load another overlay. */ if (ReadRecord(OVERLAY_ADDR, OVERLAY_SIZE)) { - _poserror("ReadRecord.2"); + __poserror("ReadRecord.2"); return; } @@ -114,19 +114,19 @@ void main(int /*argc*/, char *argv[]) "Click OK to call Overlay Three."); if (PointRecord(3)) { - _poserror("PointRecord.3"); + __poserror("PointRecord.3"); return; } if (ReadRecord(OVERLAY_ADDR, OVERLAY_SIZE)) { - _poserror("ReadRecord.3"); + __poserror("ReadRecord.3"); return; } foobar(); if (CloseRecordFile()) { - _poserror("CloseRecordFile"); + __poserror("CloseRecordFile"); return; } } diff --git a/targettest/rename-test.c b/targettest/rename-test.c index 0e9160b9e..2f1d77600 100644 --- a/targettest/rename-test.c +++ b/targettest/rename-test.c @@ -58,7 +58,7 @@ int main(void) printf("Creating file: %s\n", name1); file = fopen(name1, "w"); if (file == NULL) { - _poserror("Disk error making first file"); + __poserror("Disk error making first file"); return EXIT_FAILURE; } fclose(file); @@ -66,7 +66,7 @@ int main(void) /* Verify that the file-name exists now. */ file = fopen(name1, "r"); if (file == NULL) { - _poserror("Cannot find first name"); + __poserror("Cannot find first name"); return EXIT_FAILURE; } fclose(file); @@ -78,7 +78,7 @@ int main(void) printf("Renaming %s to %s\n", name1, name2); r = rename(name1, name2); if (r < 0) { - _poserror("rename() failed"); + __poserror("rename() failed"); return EXIT_FAILURE; } @@ -86,14 +86,14 @@ int main(void) file = fopen(name1, "r"); if (file != NULL) { fclose(file); - _poserror("First name still exists"); + __poserror("First name still exists"); return EXIT_FAILURE; } /* Verify that the second file-name exists now. */ file = fopen(name2, "r"); if (file == NULL) { - _poserror("Cannot find second name"); + __poserror("Cannot find second name"); return EXIT_FAILURE; } fclose(file); @@ -104,7 +104,7 @@ int main(void) printf("Removing %s\n", name2); r = remove(name2); if (r < 0) { - _poserror("remove() failed"); + __poserror("remove() failed"); return EXIT_FAILURE; } From 1bc05a7aa0c1c2286d1de6c88e86a37272d4c113 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 02:42:49 +0200 Subject: [PATCH 1713/2710] add rrr driver to list --- targettest/em-test.c | 1 + 1 file changed, 1 insertion(+) diff --git a/targettest/em-test.c b/targettest/em-test.c index 2da9138e1..6f887bdcc 100644 --- a/targettest/em-test.c +++ b/targettest/em-test.c @@ -96,6 +96,7 @@ static emd_test_t drivers[] = { { '8', "C64DTV himem", "dtv-himem.emd" }, { '9', "65816 extra banks", "c64-65816.emd" }, { 'k', "Kerberos", "c64-kerberos.emd" }, + { 'r', "Retro Replay RAM", "c64-rrr.emd" }, #endif #if defined(__C128__) From 8db0def88b21d552f3695282059b8efb0681f87c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 02:43:18 +0200 Subject: [PATCH 1714/2710] add a target for testcode.d81, which contains all drivers too --- targettest/Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/targettest/Makefile b/targettest/Makefile index 0450bfd4e..1475d4eb2 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -808,6 +808,11 @@ testcode.d64: testcode $(foreach file,$(EXELIST_$(SYS)),$(D64_WRITE_PRG_recipe)) # $(foreach file,$(EMD) $(MOU) $(TGI),$(D64_WRITE_SEQ_recipe)) +testcode.d81: testcode + @$(C1541) -format testcode,AA d81 $@ >$(NULLDEV) + $(foreach file,$(EXELIST_$(SYS)),$(D64_WRITE_PRG_recipe)) + $(foreach file,$(EMD) $(MOU) $(TGI),$(D64_WRITE_SEQ_recipe)) + # -------------------------------------------------------------------------- # Rule to make an Apple II disk with all testcode. Needs the AppleCommander # program, available at https://applecommander.github.io/, and a template disk From 8e19d84cb471b258ddd1870a78d8c9e7ccd6cbea Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 02:47:02 +0200 Subject: [PATCH 1715/2710] detect number of RAM pages --- libsrc/c64/emd/c64-rrr.s | 137 +++++++++++++++++++++++++++------------ 1 file changed, 97 insertions(+), 40 deletions(-) diff --git a/libsrc/c64/emd/c64-rrr.s b/libsrc/c64/emd/c64-rrr.s index 8382e406e..4d175cd32 100644 --- a/libsrc/c64/emd/c64-rrr.s +++ b/libsrc/c64/emd/c64-rrr.s @@ -1,15 +1,9 @@ ; -;Extended Memory Driver for the Retro Replay RAM (32k) -;should work for ActionReplay as well... -; +; Extended Memory Driver for the Action Replay/Retro Replay RAM ; ; original Version 1.0 by Johannes Braun 2006-08-22 <hannenz@freenet.de> -; -;use the functions described in "usr/lib/cc65/include/em.h" to make use of this driver. ; ------------------------------------------------------------------------ -;NOTE: If called from ROM the Lo_Code routines must exit with LDA #$00 / STA $DE00!!! just change and recompile! - .include "zeropage.inc" .include "em-kernel.inc" @@ -28,6 +22,9 @@ temp = tmp1 Lo_Mem = $0100 ; location of Lo_Code (must be below $1000 or above $e000) +RRMODE_OFF = $02 +RRMODE_CART_RAM = $23 + ; ------------------------------------------------------------------------ ; Header. Includes jump table @@ -54,9 +51,11 @@ Lo_Mem = $0100 ; location of Lo_Code (must be below $1000 or above $e000) .addr COPYTO ; ------------------------------------------------------------------------ +; Data. .bss -window: .res 256 ; the memory window (256 bytes) +window: .res 256 ; the memory window (256 bytes) +pagecount: .res 1 ; Number of available pages .rodata dummy: @@ -79,62 +78,118 @@ INSTALL: sta Lo_Mem,x dex bpl :- - stx curpage ; invalidate current page ($ff) + ;ldx #$ff + stx curpage ; invalidate current page - ldx #$23 ; $de00 value for rr-ram - ldy #$02 ; $de00 value for c64-ram, CHANGE TO LDA #$00 if driver is called from ROM! - bne COMMON + ldy #RRMODE_OFF + sei + jmp Lo_Mem+8 ; jump to the code below -c1: stx $de00 ; try accessing rr-ram + ; copied to Lo_Mem +c1: + +;detectmodes: + .byte RRMODE_CART_RAM | $00 + .byte RRMODE_CART_RAM | $08 + .byte RRMODE_CART_RAM | $10 + .byte RRMODE_CART_RAM | $18 + .byte RRMODE_CART_RAM | $80 + .byte RRMODE_CART_RAM | $88 + .byte RRMODE_CART_RAM | $90 + .byte RRMODE_CART_RAM | $98 + + ; first save c64 memory lda $8888 pha - lda $9999 ; remember old content of $8888 and $9999 - pha - lda #$55 - sta $8888 ; write test values + ; tag c64 memory + lda #$00 + sta $8888 + + ldx #$07 +: + ; try accessing rr-ram + ;lda detectmodes, x + lda Lo_Mem, x + sta $de00 + + ; tag (hopefully) rr memory + txa + ora #$80 + sta $8888 + + dex + bpl :- + + ;ldy #RRMODE_OFF + sty $de00 + + ; now if C64 memory is $80, there is no AR/RR + ; if C64 memory is $00, there is a AR/RR. + + lda $8888 + beq detectpages + + lda #0 + beq hasnopages + +detectpages: + ; we can now read the highest available bank nr from the highest bank :) + + lda #RRMODE_CART_RAM | $98 + sta $de00 + + ldx $8888 + inx + txa + + ; 8k = 32 pages + asl + asl + asl + asl asl - sta $9999 - sty $de00 ; switch to c64 ram - stx $8888 - stx $9999 +hasnopages: - stx $de00 ; switch to rr-ram again (if present) - ldx $8888 ; read the values - ldy $9999 - pla - sta $9999 ; and write the old values back + ;ldy #RRMODE_OFF + sty $de00 ; c64 ram again + + sta pagecount + + ; restore c64 memory pla sta $8888 - lda #2 - sta $de00 ; c64 ram again - cli - cpx #$55 - bne no - cpy #$aa - bne no + + ldx pagecount + beq no + + ; no error lda #0 + tax rts -no: asl ; A still has #2, so return #4: error code for "device not present" + +no: + lda #4 ; return #4: error code for "device not present" rts c2: + ;---------------------------------------------------------------------------------------- ;void em_uninstall(void); ;---------------------------------------------------------------------------------------- UNINSTALL: return_null: - lda #$00 ; always return 32kb (128 pages) - ; fall through, skip the LDA - .byte $2c + lda #$00 + tax + rts ;---------------------------------------------------------------------------------------- ;unsigned __fastcall__ em_pagecount(void); ;---------------------------------------------------------------------------------------- PAGECOUNT: - lda #$80 + lda pagecount ; always return 32kb (128 pages) ldx #$00 rts @@ -154,7 +209,7 @@ return: rts ;void* __fastcall__ em_map(unsigned page); ;---------------------------------------------------------------------------------------- MAP: - cmp #$80 + cmp pagecount bcs return_null sta curpage lda #<dummy ; load .A/.X with adress of data for COPYFROM-call (which expects the @@ -167,7 +222,7 @@ MAP: ;---------------------------------------------------------------------------------------- COMMIT: lda curpage - cmp #$80 + cmp pagecount bcs return lda #<dummy ; load .A/.X with adress of data for COPYTO-call (which expects the ldx #>dummy ; adress in .A/.X) @@ -192,6 +247,7 @@ COMMON: ;this part will be executed in Lo_Mem (!) by COPYFROM Lo_Code2: + ; copy byte rr -> c64 stx $de00 ;map in rr-ram lda (rr_ram),y ;get byte from rr-ram sty $de00 ;RR-ROM will be mapped to $8000-$a000 but write access will go to c64-ram anyway!! @@ -204,6 +260,7 @@ Lo_Code2_End: ;this part will be executed in Lo_Mem (!) by COPYTO Lo_Code1: + ; copy byte c64 -> rr lda (c64_ram),y ;read 1 byte from c64-ram stx $de00 ;map in rr-ram sta (rr_ram),y ;write byte to rr-ram From 74098077d3bb93be8943b45a5c8cdf6810fbd74a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 03:36:19 +0200 Subject: [PATCH 1716/2710] bleh --- asminc/c128.inc | 224 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 asminc/c128.inc diff --git a/asminc/c128.inc b/asminc/c128.inc new file mode 100644 index 000000000..749b4168c --- /dev/null +++ b/asminc/c128.inc @@ -0,0 +1,224 @@ +; +; C128 generic definitions. Stolen from Elite128 +; + + +; --------------------------------------------------------------------------- +; Zero page, Commodore stuff + +TXTPTR := $3D ; Pointer into BASIC source code +STATUS := $90 ; Kernal I/O completion status +TIME := $A0 ; 60HZ clock +FNAM_LEN := $B7 ; Length of filename +SECADR := $B9 ; Secondary address +DEVNUM := $BA ; Device number +FNAM := $BB ; Address of filename +FNAM_BANK := $C7 ; Bank for filename +KEY_COUNT := $D0 ; Number of keys in input buffer +FKEY_COUNT := $D1 ; Characters for function key +MODE := $D7 ; 40-/80-column mode (bit 7: 80 columns) +GRAPHM := $D8 ; Graphics mode flags (bits 5-7) +CHARDIS := $D9 ; Bit 2 shadow for location $01 +CURS_X := $EC ; Cursor column +CURS_Y := $EB ; Cursor row +SCREEN_PTR := $E0 ; Pointer to current char in text screen +CRAM_PTR := $E2 ; Pointer to current char in color RAM + +CHARCOLOR := $F1 +RVS := $F3 ; Reverse output flag +SCROLL := $F8 ; Disable scrolling flag + +BASIC_BUF := $0200 ; Location of command-line +BASIC_BUF_LEN = 162 ; Maximum length of command-line + +FETCH := $02A2 ; Fetch subroutine in RAM +FETVEC := $02AA ; Vector patch location for FETCH +STASH := $02AF ; Stash routine in RAM +STAVEC := $02B9 ; Vector patch location for STASH +IRQInd := $02FD ; JMP $0000 -- used as indirect IRQ vector +PALFLAG := $0A03 ; $FF=PAL, $00=NTSC +INIT_STATUS := $0A04 ; Flags: Reset/Restore initiation status +VM2 := $0A2D ; VIC-IIe shadow for $D018 -- graphics mode +FKEY_LEN := $1000 ; Function key lengths +FKEY_TEXT := $100A ; Function key texts + +KBDREPEAT := $028a +KBDREPEATRATE := $028b +KBDREPEATDELAY := $028c + +; --------------------------------------------------------------------------- +; Vectors + +IRQVec := $0314 +BRKVec := $0316 +NMIVec := $0318 +KeyStoreVec := $033C + +; --------------------------------------------------------------------------- +; I/O: VIC + +VIC := $D000 +VIC_SPR0_X := $D000 +VIC_SPR0_Y := $D001 +VIC_SPR1_X := $D002 +VIC_SPR1_Y := $D003 +VIC_SPR2_X := $D004 +VIC_SPR2_Y := $D005 +VIC_SPR3_X := $D006 +VIC_SPR3_Y := $D007 +VIC_SPR4_X := $D008 +VIC_SPR4_Y := $D009 +VIC_SPR5_X := $D00A +VIC_SPR5_Y := $D00B +VIC_SPR6_X := $D00C +VIC_SPR6_Y := $D00D +VIC_SPR7_X := $D00E +VIC_SPR7_Y := $D00F +VIC_SPR_HI_X := $D010 +VIC_SPR_ENA := $D015 +VIC_SPR_EXP_Y := $D017 +VIC_SPR_EXP_X := $D01D +VIC_SPR_MCOLOR := $D01C +VIC_SPR_BG_PRIO := $D01B + +VIC_SPR_MCOLOR0 := $D025 +VIC_SPR_MCOLOR1 := $D026 + +VIC_SPR0_COLOR := $D027 +VIC_SPR1_COLOR := $D028 +VIC_SPR2_COLOR := $D029 +VIC_SPR3_COLOR := $D02A +VIC_SPR4_COLOR := $D02B +VIC_SPR5_COLOR := $D02C +VIC_SPR6_COLOR := $D02D +VIC_SPR7_COLOR := $D02E + +VIC_CTRL1 := $D011 +VIC_CTRL2 := $D016 + +VIC_HLINE := $D012 + +VIC_LPEN_X := $D013 +VIC_LPEN_Y := $D014 + +VIC_VIDEO_ADR := $D018 + +VIC_IRR := $D019 ; Interrupt request register +VIC_IMR := $D01A ; Interrupt mask register + +VIC_BORDERCOLOR := $D020 +VIC_BG_COLOR0 := $D021 +VIC_BG_COLOR1 := $D022 +VIC_BG_COLOR2 := $D023 +VIC_BG_COLOR3 := $D024 + +; 128 stuff: +VIC_KBD_128 := $D02F ; Extended kbd bits (visible in 64 mode) +VIC_CLK_128 := $D030 ; Clock rate register (visible in 64 mode) + + +; --------------------------------------------------------------------------- +; I/O: SID + +SID := $D400 +SID_S1Lo := $D400 +SID_S1Hi := $D401 +SID_PB1Lo := $D402 +SID_PB1Hi := $D403 +SID_Ctl1 := $D404 +SID_AD1 := $D405 +SID_SUR1 := $D406 + +SID_S2Lo := $D407 +SID_S2Hi := $D408 +SID_PB2Lo := $D409 +SID_PB2Hi := $D40A +SID_Ctl2 := $D40B +SID_AD2 := $D40C +SID_SUR2 := $D40D + +SID_S3Lo := $D40E +SID_S3Hi := $D40F +SID_PB3Lo := $D410 +SID_PB3Hi := $D411 +SID_Ctl3 := $D412 +SID_AD3 := $D413 +SID_SUR3 := $D414 + +SID_FltLo := $D415 +SID_FltHi := $D416 +SID_FltCtl := $D417 +SID_Amp := $D418 +SID_ADConv1 := $D419 +SID_ADConv2 := $D41A +SID_Noise := $D41B +SID_Read3 := $D41C + +; --------------------------------------------------------------------------- +; I/O: VDC (128 only) + +VDC_INDEX := $D600 ; register address port +VDC_DATA := $D601 ; data port + +; Registers +VDC_DATA_HI = 18 ; video RAM address (big endian) +VDC_DATA_LO = 19 +VDC_CSET = 28 +VDC_RAM_RW = 31 ; RAM port + +; --------------------------------------------------------------------------- +; I/O: Complex Interface Adapters + +CIA1 := $DC00 +CIA1_PRA := $DC00 ; Port A +CIA1_PRB := $DC01 ; Port B +CIA1_DDRA := $DC02 ; Data direction register for port A +CIA1_DDRB := $DC03 ; Data direction register for port B +CIA1_TA := $DC04 ; 16-bit timer A +CIA1_TB := $DC06 ; 16-bit timer B +CIA1_TOD10 := $DC08 ; Time-of-day tenths of a second +CIA1_TODSEC := $DC09 ; Time-of-day seconds +CIA1_TODMIN := $DC0A ; Time-of-day minutes +CIA1_TODHR := $DC0B ; Time-of-day hours +CIA1_SDR := $DC0C ; Serial data register +CIA1_ICR := $DC0D ; Interrupt control register +CIA1_CRA := $DC0E ; Control register for timer A +CIA1_CRB := $DC0F ; Control register for timer B + +CIA2 := $DD00 +CIA2_PRA := $DD00 +CIA2_PRB := $DD01 +CIA2_DDRA := $DD02 +CIA2_DDRB := $DD03 +CIA2_TA := $DD04 +CIA2_TB := $DD06 +CIA2_TOD10 := $DD08 +CIA2_TODSEC := $DD09 +CIA2_TODMIN := $DD0A +CIA2_TODHR := $DD0B +CIA2_SDR := $DD0C +CIA2_ICR := $DD0D +CIA2_CRA := $DD0E +CIA2_CRB := $DD0F + +; --------------------------------------------------------------------------- +; I/O: MMU + +MMU_CR := $FF00 +MMU_CFG_CC65 := %00001110 ; Bank 0 with kernal ROM +MMU_CFG_RAM0 := %00111111 ; Bank 0 full RAM +MMU_CFG_RAM1 := %01111111 ; Bank 1 full RAM +MMU_CFG_RAM2 := %10111111 ; Bank 2 full RAM +MMU_CFG_RAM3 := %11111111 ; Bank 3 full RAM +MMU_CFG_IFROM := %01010111 ; Bank 1 with Internal Function RAM/ROM +MMU_CFG_EFROM := %01101011 ; Bank 1 with External Function RAM/ROM + +; --------------------------------------------------------------------------- +; Super CPU + +SCPU_VIC_Bank1 := $D075 +SCPU_Slow := $D07A +SCPU_Fast := $D07B +SCPU_EnableRegs := $D07E +SCPU_DisableRegs:= $D07F +SCPU_Detect := $D0BC From 6dae5324ddbea4dcbb19c913109f4bc4d5fbfde5 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 03:59:19 +0200 Subject: [PATCH 1717/2710] cleanup --- libsrc/c128/cpeekcol.s | 67 ------------------------------------ libsrc/c16/cpeekcol.s | 11 ++---- libsrc/c64/cpeekcol.s | 23 +++++-------- libsrc/c64/soft80_cpeekcol.s | 21 ----------- libsrc/cbm510/cpeekcol.s | 32 ----------------- libsrc/plus4/cpeekcol.s | 23 +++++-------- libsrc/vic20/cpeekcol.s | 23 +++++-------- 7 files changed, 26 insertions(+), 174 deletions(-) delete mode 100644 libsrc/c128/cpeekcol.s delete mode 100644 libsrc/c64/soft80_cpeekcol.s delete mode 100644 libsrc/cbm510/cpeekcol.s diff --git a/libsrc/c128/cpeekcol.s b/libsrc/c128/cpeekcol.s deleted file mode 100644 index d96563574..000000000 --- a/libsrc/c128/cpeekcol.s +++ /dev/null @@ -1,67 +0,0 @@ - - .export _cpeekcol - .export _cpeekcolxy - - .import _gotoxy - - .include "c128.inc" - - .segment "CODE" - -_cpeekcolxy: - - jsr _gotoxy ; Set cursor - -_cpeekcol: - - bit MODE - bmi @c80 - - ldy CURS_X - lda (CRAM_PTR),y ; get col - and #$0f - ldx #0 - rts - -@c80: - lda CRAM_PTR - ldy CRAM_PTR+1 - clc - adc CURS_X - bcc @s - iny -@s: - ; get byte from vdc mem - ldx #VDC_DATA_LO - stx VDC_INDEX -@L0: bit VDC_INDEX - bpl @L0 - sta VDC_DATA - dex - ;;tya - stx VDC_INDEX - sty VDC_DATA - - ldx #VDC_DATA_RW - stx VDC_INDEX -@L1: bit VDC_INDEX - bpl @L1 - lda VDC_DATA - - - and #$0f - -; translate vdc->vic colour - -vdctovic: - ldy #16 -@L2: cmp $CE5C-1,y - beq @L3 - dey - bne @L2 -@L3: - dey - tya - - ldx #0 - rts diff --git a/libsrc/c16/cpeekcol.s b/libsrc/c16/cpeekcol.s index 41fed7b9f..446079ddd 100644 --- a/libsrc/c16/cpeekcol.s +++ b/libsrc/c16/cpeekcol.s @@ -1,18 +1,11 @@ - .export _cpeekcol - .export _cpeekcolxy - - .import _gotoxy + .export _cpeekcolor .include "c16.inc" .segment "CODE" -_cpeekcolxy: - - jsr _gotoxy ; Set cursor - -_cpeekcol: +_cpeekcolor: ldy CURS_X lda (CRAM_PTR),y ; get color diff --git a/libsrc/c64/cpeekcol.s b/libsrc/c64/cpeekcol.s index 60fb45c7b..8e87cff23 100644 --- a/libsrc/c64/cpeekcol.s +++ b/libsrc/c64/cpeekcol.s @@ -1,21 +1,14 @@ - .export _cpeekcol - .export _cpeekcolxy + .export _cpeekcolor - .import _gotoxy + .include "c64.inc" - .include "c64.inc" + .segment "CODE" - .segment "CODE" +_cpeekcolor: -_cpeekcolxy: - - jsr _gotoxy ; Set cursor - -_cpeekcol: - - ldy CURS_X - lda (CRAM_PTR),y ; get color - and #$0f + ldy CURS_X + lda (CRAM_PTR),y ; get color + and #$0f ldx #0 - rts + rts diff --git a/libsrc/c64/soft80_cpeekcol.s b/libsrc/c64/soft80_cpeekcol.s deleted file mode 100644 index 9891ab28a..000000000 --- a/libsrc/c64/soft80_cpeekcol.s +++ /dev/null @@ -1,21 +0,0 @@ - - .export _cpeekcol - .export _cpeekcolxy - - .import _gotoxy - - .include "c64.inc" - - .segment "CODE" - -_cpeekcolxy: - - jsr _gotoxy ; Set cursor - -_cpeekcol: - - ldy #0 - lda (CRAM_PTR),y ; get char - and #$0f - ldx #0 - rts diff --git a/libsrc/cbm510/cpeekcol.s b/libsrc/cbm510/cpeekcol.s deleted file mode 100644 index bbe7c5632..000000000 --- a/libsrc/cbm510/cpeekcol.s +++ /dev/null @@ -1,32 +0,0 @@ - - .export _cpeekcol - .export _cpeekcolxy - - .import _gotoxy - - .include "cbm510.inc" - .include "extzp.inc" - - .segment "CODE" - -_cpeekcolxy: - - jsr _gotoxy ; Set cursor - -_cpeekcol: - - lda #0 - ldx #0 - rts - - ;; why the HELL doesnt this work ?!? - lda #$0F - ldy CURS_X - sei - ldx IndReg - sta IndReg - lda (CRAM_PTR),y ; get color - stx IndReg - cli - ldx #0 - rts diff --git a/libsrc/plus4/cpeekcol.s b/libsrc/plus4/cpeekcol.s index 0f3258eb3..b98b0124e 100644 --- a/libsrc/plus4/cpeekcol.s +++ b/libsrc/plus4/cpeekcol.s @@ -1,21 +1,14 @@ - .export _cpeekcol - .export _cpeekcolxy + .export _cpeekcolor - .import _gotoxy + .include "plus4.inc" - .include "plus4.inc" + .segment "CODE" - .segment "CODE" +_cpeekcolor: -_cpeekcolxy: - - jsr _gotoxy ; Set cursor - -_cpeekcol: - - ldy CURS_X - lda (CRAM_PTR),y ; get color - ;and #$0f is this ok? + ldy CURS_X + lda (CRAM_PTR),y ; get color + ;and #$0f is this ok? ldx #0 - rts + rts diff --git a/libsrc/vic20/cpeekcol.s b/libsrc/vic20/cpeekcol.s index 59bf057ff..31fa4612a 100644 --- a/libsrc/vic20/cpeekcol.s +++ b/libsrc/vic20/cpeekcol.s @@ -1,21 +1,14 @@ - .export _cpeekcol - .export _cpeekcolxy + .export _cpeekcolor - .import _gotoxy + .include "vic20.inc" - .include "vic20.inc" + .segment "CODE" - .segment "CODE" +_cpeekcolor: -_cpeekcolxy: - - jsr _gotoxy ; Set cursor - -_cpeekcol: - - ldy CURS_X - lda (CRAM_PTR),y ; get color - and #$0f + ldy CURS_X + lda (CRAM_PTR),y ; get color + and #$0f ldx #0 - rts + rts From 7890f4102e30bad2d76c8888b6dcd0487598bf95 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 04:14:48 +0200 Subject: [PATCH 1718/2710] cleanup --- libsrc/c128/cpeekchar.s | 74 ---------------------- libsrc/c64/soft80_cpeekchar.s | 113 ---------------------------------- libsrc/cbm610/cpeekchar.s | 46 -------------- 3 files changed, 233 deletions(-) delete mode 100644 libsrc/c128/cpeekchar.s delete mode 100644 libsrc/c64/soft80_cpeekchar.s delete mode 100644 libsrc/cbm610/cpeekchar.s diff --git a/libsrc/c128/cpeekchar.s b/libsrc/c128/cpeekchar.s deleted file mode 100644 index cf82dd529..000000000 --- a/libsrc/c128/cpeekchar.s +++ /dev/null @@ -1,74 +0,0 @@ - - .export _cpeekchar - .export _cpeekcharxy - - .import _gotoxy - - .import plot,popa - - - .include "zeropage.inc" - .include "c128.inc" - - .segment "CODE" - -_cpeekcharxy: - - jsr _gotoxy ; Set cursor - -_cpeekchar: - - lda MODE - bmi @c80 - - ldy CURS_X - lda (SCREEN_PTR),y ; get char - -@return: - ; convert to asc - and #$7f - - ; 0 - $1f +$40 - ; $20 - $3f - ; $40 - $7e +$80 - - cmp #$1f - bcs @sk1 -;; clc - adc #$40 - rts - -@sk1: - cmp #$40 - bcc @end - clc - adc #$80 -@end: - ldx #0 - rts - -@c80: - lda SCREEN_PTR - ldy SCREEN_PTR+1 - clc - adc CURS_X - bcc @s - iny -@s: - ; get byte from vdc mem - ldx #VDC_DATA_LO - stx VDC_INDEX -@L0: bit VDC_INDEX - bpl @L0 - sta VDC_DATA - dex - tya - stx VDC_INDEX - sta VDC_DATA - - ldx #VDC_DATA_RW - stx VDC_INDEX -@L1: bit VDC_INDEX - bpl @L1 - lda VDC_DATA - jmp @return diff --git a/libsrc/c64/soft80_cpeekchar.s b/libsrc/c64/soft80_cpeekchar.s deleted file mode 100644 index 21a9fc5e7..000000000 --- a/libsrc/c64/soft80_cpeekchar.s +++ /dev/null @@ -1,113 +0,0 @@ - - .export _cpeekchar - .export _cpeekcharxy - - .import _gotoxy - .import soft80_hi_charset - .import soft80_lo_charset - - .include "c64.inc" - - .macpack longbranch - - .segment "CODE" - -readdirect: -; sei -; dec $01 ;; assumed = $36 -; dec $01 ;; assumed = $36 - lda (SCREEN_PTR),y -; inc $01 -; inc $01 -; cli - rts - -_cpeekcharxy: - - jsr _gotoxy ; Set cursor - -_cpeekchar: - -;;rts - sei - ;;dec $01 ;; assumed = $36 - ;;dec $01 ;; assumed = $36 - lda #$34 - sta $01 - - lda CURS_X - and #$01 - - jne @l1a - -;; inc $d020 - -;;jmp * - - ldx #0 -@l2aa: - ldy #0 - -;; stx $d020 - - .repeat 8,line -;; jsr readdirect - lda (SCREEN_PTR),y - and #$f0 - sta $e100,y - cmp soft80_hi_charset+(line*$80),x -; cmp #0 - bne @l2b - .if (line < 7) - iny - .endif - .endrepeat - - -@backok: -;inc $d020 -; inc $01 -; inc $01 - lda #$36 - sta $01 - cli - txa - ; sec -; sbc #$20 - ldx #$00 - rts -@l2b: -;jmp * - inx - cpx #$80 - jne @l2aa -@backerr: - ;; inc $01 -;; inc $01 - lda #$36 - sta $01 - cli - ldx #0 - txa - rts - -@l1a: - ldx #0 -@l1aa: - ldy #0 - .repeat 8,line -;; jsr readdirect - lda (SCREEN_PTR),y - and #$0f - eor soft80_lo_charset+(line*$80),x - bne @l2bb - .if line < 7 - iny - .endif - .endrepeat - jmp @backok -@l2bb: - inx - cpx #$80 - bne @l1aa - jmp @backerr diff --git a/libsrc/cbm610/cpeekchar.s b/libsrc/cbm610/cpeekchar.s deleted file mode 100644 index 217532ab5..000000000 --- a/libsrc/cbm610/cpeekchar.s +++ /dev/null @@ -1,46 +0,0 @@ - - .export _cpeekchar - .export _cpeekcharxy - - .import _gotoxy - - .include "cbm610.inc" - .include "extzp.inc" - - .segment "CODE" - -_cpeekcharxy: - - jsr _gotoxy ; Set cursor - -_cpeekchar: - - ldx IndReg - ldy #$0F - sty IndReg - - ldy CURS_X - lda (CharPtr),y ; get char - ; convert to asc - and #$7f - - ; 0 - $1f +$40 - ; $20 - $3f - ; $40 - $7e +$80 - - cmp #$1f - bcs @sk1 -;; clc - adc #$40 - jmp @end - -@sk1: - cmp #$40 - bcc @end - clc - adc #$80 - -@end: - stx IndReg - ldx #0 - rts From d40def3d2d9b74eb5d326d35367f8f974a70b256 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 04:42:44 +0200 Subject: [PATCH 1719/2710] cleanup --- libsrc/c16/cpeekcol.s | 14 -------------- libsrc/c64/cpeekcol.s | 14 -------------- libsrc/plus4/cpeekcol.s | 14 -------------- libsrc/vic20/cpeekcol.s | 14 -------------- 4 files changed, 56 deletions(-) delete mode 100644 libsrc/c16/cpeekcol.s delete mode 100644 libsrc/c64/cpeekcol.s delete mode 100644 libsrc/plus4/cpeekcol.s delete mode 100644 libsrc/vic20/cpeekcol.s diff --git a/libsrc/c16/cpeekcol.s b/libsrc/c16/cpeekcol.s deleted file mode 100644 index 446079ddd..000000000 --- a/libsrc/c16/cpeekcol.s +++ /dev/null @@ -1,14 +0,0 @@ - - .export _cpeekcolor - - .include "c16.inc" - - .segment "CODE" - -_cpeekcolor: - - ldy CURS_X - lda (CRAM_PTR),y ; get color - ;and #$0f is this ok? - ldx #0 - rts diff --git a/libsrc/c64/cpeekcol.s b/libsrc/c64/cpeekcol.s deleted file mode 100644 index 8e87cff23..000000000 --- a/libsrc/c64/cpeekcol.s +++ /dev/null @@ -1,14 +0,0 @@ - - .export _cpeekcolor - - .include "c64.inc" - - .segment "CODE" - -_cpeekcolor: - - ldy CURS_X - lda (CRAM_PTR),y ; get color - and #$0f - ldx #0 - rts diff --git a/libsrc/plus4/cpeekcol.s b/libsrc/plus4/cpeekcol.s deleted file mode 100644 index b98b0124e..000000000 --- a/libsrc/plus4/cpeekcol.s +++ /dev/null @@ -1,14 +0,0 @@ - - .export _cpeekcolor - - .include "plus4.inc" - - .segment "CODE" - -_cpeekcolor: - - ldy CURS_X - lda (CRAM_PTR),y ; get color - ;and #$0f is this ok? - ldx #0 - rts diff --git a/libsrc/vic20/cpeekcol.s b/libsrc/vic20/cpeekcol.s deleted file mode 100644 index 31fa4612a..000000000 --- a/libsrc/vic20/cpeekcol.s +++ /dev/null @@ -1,14 +0,0 @@ - - .export _cpeekcolor - - .include "vic20.inc" - - .segment "CODE" - -_cpeekcolor: - - ldy CURS_X - lda (CRAM_PTR),y ; get color - and #$0f - ldx #0 - rts From 193b7b9ee7f75c11c3ce2bbb73a2802146cf09de Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 04:54:34 +0200 Subject: [PATCH 1720/2710] cleanup --- libsrc/c16/cpeekchar.s | 39 --------------------------------------- libsrc/c64/cpeekchar.s | 39 --------------------------------------- libsrc/cbm510/cpeekchar.s | 33 --------------------------------- libsrc/pet/cpeekchar.s | 39 --------------------------------------- libsrc/plus4/cpeekchar.s | 39 --------------------------------------- libsrc/vic20/cpeekchar.s | 39 --------------------------------------- 6 files changed, 228 deletions(-) delete mode 100644 libsrc/c16/cpeekchar.s delete mode 100644 libsrc/c64/cpeekchar.s delete mode 100644 libsrc/cbm510/cpeekchar.s delete mode 100644 libsrc/pet/cpeekchar.s delete mode 100644 libsrc/plus4/cpeekchar.s delete mode 100644 libsrc/vic20/cpeekchar.s diff --git a/libsrc/c16/cpeekchar.s b/libsrc/c16/cpeekchar.s deleted file mode 100644 index 5d89570f1..000000000 --- a/libsrc/c16/cpeekchar.s +++ /dev/null @@ -1,39 +0,0 @@ - - .export _cpeekchar - .export _cpeekcharxy - - .import _gotoxy - - .include "c16.inc" - - .segment "CODE" - -_cpeekcharxy: - - jsr _gotoxy ; Set cursor - -_cpeekchar: - - ldy CURS_X - lda (SCREEN_PTR),y ; get char - ldx #0 - - and #$7f - - ; 0 - $1f +$40 - ; $20 - $3f - ; $40 - $7e +$80 - - cmp #$1f - bcs @sk1 -;; clc - adc #$40 - rts - -@sk1: - cmp #$40 - bcc @end - clc - adc #$80 -@end: - rts diff --git a/libsrc/c64/cpeekchar.s b/libsrc/c64/cpeekchar.s deleted file mode 100644 index 33d0284e7..000000000 --- a/libsrc/c64/cpeekchar.s +++ /dev/null @@ -1,39 +0,0 @@ - - .export _cpeekchar - .export _cpeekcharxy - - .import _gotoxy - - .include "c64.inc" - - .segment "CODE" - -_cpeekcharxy: - - jsr _gotoxy ; Set cursor - -_cpeekchar: - - ldy CURS_X - lda (SCREEN_PTR),y ; get char - ldx #0 - - and #$7f - - ; 0 - $1f +$40 - ; $20 - $3f - ; $40 - $7e +$80 - - cmp #$1f - bcs @sk1 -;; clc - adc #$40 - rts - -@sk1: - cmp #$40 - bcc @end - clc - adc #$80 -@end: - rts diff --git a/libsrc/cbm510/cpeekchar.s b/libsrc/cbm510/cpeekchar.s deleted file mode 100644 index 11787fe1e..000000000 --- a/libsrc/cbm510/cpeekchar.s +++ /dev/null @@ -1,33 +0,0 @@ - - .export _cpeekchar - .export _cpeekcharxy - - .import _gotoxy - - .include "cbm510.inc" - .include "extzp.inc" - - .segment "CODE" - -_cpeekcharxy: - - jsr _gotoxy ; Set cursor - -_cpeekchar: - lda #0 - ldx #0 - rts - - ;; ?!?! - - ldx IndReg - ldy #$0F - sty IndReg - - ldy CURS_X - lda (SCREEN_PTR),y ; get char - - stx IndReg - - ldx #0 - rts diff --git a/libsrc/pet/cpeekchar.s b/libsrc/pet/cpeekchar.s deleted file mode 100644 index c846beb56..000000000 --- a/libsrc/pet/cpeekchar.s +++ /dev/null @@ -1,39 +0,0 @@ - - .export _cpeekchar - .export _cpeekcharxy - - .import _gotoxy - - .include "pet.inc" - - .segment "CODE" - -_cpeekcharxy: - - jsr _gotoxy ; Set cursor - -_cpeekchar: - - ldy CURS_X - lda (SCREEN_PTR),y ; get char - ldx #0 - - and #$7f - - ; 0 - $1f +$40 - ; $20 - $3f - ; $40 - $7e +$80 - - cmp #$1f - bcs @sk1 -;; clc - adc #$40 - rts - -@sk1: - cmp #$40 - bcc @end - clc - adc #$80 -@end: - rts diff --git a/libsrc/plus4/cpeekchar.s b/libsrc/plus4/cpeekchar.s deleted file mode 100644 index 1d47c6d64..000000000 --- a/libsrc/plus4/cpeekchar.s +++ /dev/null @@ -1,39 +0,0 @@ - - .export _cpeekchar - .export _cpeekcharxy - - .import _gotoxy - - .include "plus4.inc" - - .segment "CODE" - -_cpeekcharxy: - - jsr _gotoxy ; Set cursor - -_cpeekchar: - - ldy CURS_X - lda (SCREEN_PTR),y ; get char - ldx #0 - - and #$7f - - ; 0 - $1f +$40 - ; $20 - $3f - ; $40 - $7e +$80 - - cmp #$1f - bcs @sk1 -;; clc - adc #$40 - rts - -@sk1: - cmp #$40 - bcc @end - clc - adc #$80 -@end: - rts diff --git a/libsrc/vic20/cpeekchar.s b/libsrc/vic20/cpeekchar.s deleted file mode 100644 index fae7ec1b4..000000000 --- a/libsrc/vic20/cpeekchar.s +++ /dev/null @@ -1,39 +0,0 @@ - - .export _cpeekchar - .export _cpeekcharxy - - .import _gotoxy - - .include "vic20.inc" - - .segment "CODE" - -_cpeekcharxy: - - jsr _gotoxy ; Set cursor - -_cpeekchar: - - ldy CURS_X - lda (SCREEN_PTR),y ; get char - ldx #0 - - and #$7f - - ; 0 - $1f +$40 - ; $20 - $3f - ; $40 - $7e +$80 - - cmp #$1f - bcs @sk1 -;; clc - adc #$40 - rts - -@sk1: - cmp #$40 - bcc @end - clc - adc #$80 -@end: - rts From 10c2ce205b77c979ea396eb92bd503d5d9f75281 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 04:59:45 +0200 Subject: [PATCH 1721/2710] cleanup --- libsrc/atari/cpeekchar.s | 50 ++++++++++++++++++---------------------- libsrc/atmos/cpeekchar.s | 43 +++++++++++++++------------------- libsrc/nes/cpeekchar.s | 40 ++++++++++++++------------------ 3 files changed, 58 insertions(+), 75 deletions(-) diff --git a/libsrc/atari/cpeekchar.s b/libsrc/atari/cpeekchar.s index 6697ce230..c895059db 100644 --- a/libsrc/atari/cpeekchar.s +++ b/libsrc/atari/cpeekchar.s @@ -1,41 +1,35 @@ - .export _cpeekchar - .export _cpeekcharxy + .export _cpeekchar - .import _gotoxy - .import mul40 - .importzp ptr4 + .import mul40 + .importzp ptr4 - .include "atari.inc" + .include "atari.inc" - .segment "CODE" - -_cpeekcharxy: - - jsr _gotoxy ; Set cursor + .segment "CODE" _cpeekchar: - lda ROWCRS - jsr mul40 ; destroys tmp4 - clc - adc SAVMSC ; add start of screen memory - sta ptr4 - txa - adc SAVMSC+1 - sta ptr4+1 + lda ROWCRS + jsr mul40 ; destroys tmp4 + clc + adc SAVMSC ; add start of screen memory + sta ptr4 + txa + adc SAVMSC+1 + sta ptr4+1 - ldy COLCRS - lda (ptr4),y ; get char - tax + ldy COLCRS + lda (ptr4),y ; get char + tax - ;; convert to asc + ;; convert to asc - ;; ugly hack here to make tetris fx work :=P - lda #' ' - cpx #0 + ;; FIXME: ugly hack here to make tetris fx work :=P + lda #' ' + cpx #0 beq @l - lda #0 + lda #0 @l: ldx #0 - rts + rts diff --git a/libsrc/atmos/cpeekchar.s b/libsrc/atmos/cpeekchar.s index a1d6d4474..a03bdb6a7 100644 --- a/libsrc/atmos/cpeekchar.s +++ b/libsrc/atmos/cpeekchar.s @@ -1,36 +1,31 @@ - .include "atmos.inc" + .include "atmos.inc" -.import _gotoxy -.export _cpeekchar,_cpeekcharxy - -_cpeekcharxy: - - jsr _gotoxy ; Will pop x parameter + .export _cpeekchar _cpeekchar: - ldy CURS_Y - ldx ScrTabLo,y - stx @l+1 - ldx ScrTabHi,y - stx @l+2 - ldx CURS_X + ldy CURS_Y + ldx ScrTabLo,y + stx @l+1 + ldx ScrTabHi,y + stx @l+2 + ldx CURS_X @l: - lda $bb80,x -;; inc COORDX_TEXT - ldx #0 - rts + lda $bb80,x +;; inc COORDX_TEXT + ldx #0 + rts - ; FIXME: is that table available elsewhere? + ; FIXME: is that table available elsewhere? .rodata ScrTabLo: - .repeat 28, Line - .byte <(SCREEN + Line * 40) - .endrep + .repeat 28, Line + .byte <(SCREEN + Line * 40) + .endrep ScrTabHi: - .repeat 28, Line - .byte >(SCREEN + Line * 40) - .endrep + .repeat 28, Line + .byte >(SCREEN + Line * 40) + .endrep diff --git a/libsrc/nes/cpeekchar.s b/libsrc/nes/cpeekchar.s index 292a4591f..995e01bc1 100644 --- a/libsrc/nes/cpeekchar.s +++ b/libsrc/nes/cpeekchar.s @@ -1,40 +1,34 @@ - .export _cpeekchar - .export _cpeekcharxy + .export _cpeekchar - .import _gotoxy - .import ppubuf_waitempty + .import ppubuf_waitempty - .include "nes.inc" + .include "nes.inc" - .segment "CODE" - -_cpeekcharxy: - - jsr _gotoxy ; Set cursor + .segment "CODE" _cpeekchar: - ; wait until all console data has been written - jsr ppubuf_waitempty + ; wait until all console data has been written + jsr ppubuf_waitempty + + ldy SCREEN_PTR+1 + ldx SCREEN_PTR - ldy SCREEN_PTR+1 - ldx SCREEN_PTR - ; waiting for vblank is incredibly slow :// vwait: -; lda $2002 ;wait -; bpl vwait +; lda $2002 ;wait +; bpl vwait - lda #0 - sty $2006 + lda #0 + sty $2006 stx $2006 - ldy $2007 ; first read is invalid - ldy $2007 ; get data + ldy $2007 ; first read is invalid + ldy $2007 ; get data sta $2006 sta $2006 tya - and #$7f ; ?!?! - rts + and #$7f ; ?!?! + rts From 066a5e0fec286feac1a46dde15365d009c32bfe3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 24 Jul 2022 16:38:41 +0800 Subject: [PATCH 1722/2710] Fixed #pragma charmap for string literals. --- src/cc65/expr.c | 2 ++ src/cc65/litpool.c | 6 ------ 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index eb0afb38b..a506fa5a1 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1263,6 +1263,8 @@ static void Primary (ExprDesc* E) /* String literal */ if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { E->V.LVal = UseLiteral (CurTok.SVal); + /* Translate into target charset */ + TranslateLiteral (E->V.LVal); } else { E->V.LVal = CurTok.SVal; } diff --git a/src/cc65/litpool.c b/src/cc65/litpool.c index 95228179d..d741f87d0 100644 --- a/src/cc65/litpool.c +++ b/src/cc65/litpool.c @@ -126,9 +126,6 @@ static void FreeLiteral (Literal* L) static void OutputLiteral (Literal* L) /* Output one literal to the currently active data segment */ { - /* Translate the literal into the target charset */ - TranslateLiteral (L); - /* Define the label for the literal */ g_defliterallabel (L->Label); @@ -387,9 +384,6 @@ static void OutputReadOnlyLiterals (Collection* Literals) continue; } - /* Translate the literal into the target charset */ - TranslateLiteral (L); - /* Check if this literal is part of another one. Since the literals ** are sorted by size (larger ones first), it can only be part of a ** literal with a smaller index. From be26b0631b271e6690f0c2d8a0ceb2cd4c9df855 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 24 Jul 2022 19:07:02 +0800 Subject: [PATCH 1723/2710] Fixed #ifdef and #ifndef. --- src/cc65/preproc.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 7e690874a..107541994 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1136,14 +1136,18 @@ static int DoIf (int Skip) static int DoIfDef (int skip, int flag) /* Process #ifdef if flag == 1, or #ifndef if flag == 0. */ { - ident Ident; + int Value = 0; - SkipWhitespace (0); - if (MacName (Ident) == 0) { - return 0; - } else { - return PushIf (skip, flag, IsMacro(Ident)); + if (!skip) { + ident Ident; + + SkipWhitespace (0); + if (MacName (Ident)) { + Value = IsMacro (Ident); + } } + + return PushIf (skip, flag, Value); } From 7381a2c4201fcd7edc07d3fbc499d11bc28ec2f4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 24 Jul 2022 19:07:16 +0800 Subject: [PATCH 1724/2710] Added check for extra tokens at the end of directives. Improved diagnostics on missing/illegal macro names. --- src/cc65/preproc.c | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 96bb0bf1c..016abf11e 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -404,6 +404,21 @@ static void CopyQuotedString (StrBuf* Target) +static int CheckExtraTokens (const char* Name) +/* Check for extra tokens at the end of the directive. Return 1 if there are +** extra tokens, otherwise 0. +*/ +{ + SkipWhitespace (0); + if (SB_GetIndex (Line) != SB_GetLen (Line)) { + PPWarning ("Extra tokens at end of #%s directive", Name); + return 1; + } + return 0; +} + + + /*****************************************************************************/ /* Macro stuff */ /*****************************************************************************/ @@ -416,7 +431,11 @@ static int MacName (char* Ident) */ { if (IsSym (Ident) == 0) { - PPError ("Identifier expected"); + if (CurC != '\0') { + PPError ("Macro name must be an identifier"); + } else { + PPError ("Missing macro name"); + } ClearLine (); return 0; } else { @@ -1144,6 +1163,8 @@ static int DoIfDef (int skip, int flag) SkipWhitespace (0); if (MacName (Ident)) { Value = IsMacro (Ident); + /* Check for extra tokens */ + CheckExtraTokens (flag ? "ifdef" : "ifndef"); } } @@ -1196,6 +1217,10 @@ static void DoInclude (void) /* Check if we got a terminator */ if (CurC == RTerm) { + /* Skip the terminator */ + NextChar (); + /* Check for extra tokens following the filename */ + CheckExtraTokens ("include"); /* Open the include file */ OpenIncludeFile (SB_GetConstBuf (&Filename), IT); } else if (CurC == '\0') { @@ -1246,6 +1271,8 @@ static void DoUndef (void) if (MacName (Ident)) { UndefineMacro (Ident); } + /* Check for extra tokens */ + CheckExtraTokens ("undef"); } @@ -1312,7 +1339,6 @@ void Preprocess (void) case PP_ELIF: if (IfIndex >= 0) { if ((IfStack[IfIndex] & IFCOND_ELSE) == 0) { - /* Handle as #else/#if combination */ if ((IfStack[IfIndex] & IFCOND_SKIP) == 0) { Skip = !Skip; @@ -1337,6 +1363,9 @@ void Preprocess (void) Skip = !Skip; } IfStack[IfIndex] |= IFCOND_ELSE; + + /* Check for extra tokens */ + CheckExtraTokens ("else"); } else { PPError ("Duplicate #else"); } @@ -1359,6 +1388,9 @@ void Preprocess (void) /* Remove the clause that needs a terminator */ Skip = (IfStack[IfIndex--] & IFCOND_SKIP) != 0; + + /* Check for extra tokens */ + CheckExtraTokens ("endif"); } else { PPError ("Unexpected '#endif'"); } From 8485d59aa6b26f608648f442a839df21dd32dcad Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 24 Jul 2022 20:58:10 +0800 Subject: [PATCH 1725/2710] Removed an extra colon from libsrc/dbg/dbg/c. --- libsrc/dbg/dbg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/dbg/dbg.c b/libsrc/dbg/dbg.c index 832ed0a20..dd47eae0c 100644 --- a/libsrc/dbg/dbg.c +++ b/libsrc/dbg/dbg.c @@ -1063,7 +1063,7 @@ static char StackHandler (void) break; case 'a': -#ifdef CH_CURS_UP: +#ifdef CH_CURS_UP case CH_CURS_UP: #endif --StackAddr; From 0063f73f8a4a80df6e271aaadd9fc2204e0c900a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 24 Jul 2022 23:19:05 +0800 Subject: [PATCH 1726/2710] Fixed __FILE__ and __LINE__ macros for preprocessor. --- src/cc65/compile.c | 4 ++++ src/cc65/macrotab.c | 5 +++++ src/cc65/preproc.c | 18 ++++++++++++++++++ src/cc65/preproc.h | 13 +++++++++++++ src/cc65/scanner.c | 11 +---------- 5 files changed, 41 insertions(+), 10 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 75250da0a..d6069e914 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -396,6 +396,10 @@ void Compile (const char* FileName) DefineNumericMacro ("__EAGERLY_INLINE_FUNCS__", 1); } + /* Placeholders for __FILE__ and __LINE__ macros */ + DefineTextMacro ("__FILE__", ""); + DefineTextMacro ("__LINE__", ""); + /* __TIME__ and __DATE__ macros */ Time = time (0); TM = localtime (&Time); diff --git a/src/cc65/macrotab.c b/src/cc65/macrotab.c index 37b52351f..0e80cd638 100644 --- a/src/cc65/macrotab.c +++ b/src/cc65/macrotab.c @@ -42,6 +42,7 @@ /* cc65 */ #include "error.h" +#include "preproc.h" #include "macrotab.h" @@ -246,6 +247,10 @@ Macro* FindMacro (const char* Name) Macro* M = MacroTab[Hash]; while (M) { if (strcmp (M->Name, Name) == 0) { + /* Check for some special macro names */ + if (Name[0] == '_') { + HandleSpecialMacro (M, Name); + } /* Found it */ return M; } diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index f1328c4d0..6dcbeea70 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1533,6 +1533,24 @@ static int ParseDirectives (unsigned ModeFlags) +void HandleSpecialMacro (Macro* M, const char* Name) +/* Handle special mandatory macros */ +{ + if (strcmp (Name, "__LINE__") == 0) { + /* Replace __LINE__ with the current line number */ + SB_Printf (&M->Replacement, "%u", GetCurrentLine ()); + } else if (strcmp (Name, "__FILE__") == 0) { + /* Replace __FILE__ with the current filename */ + StrBuf B = AUTO_STRBUF_INITIALIZER; + SB_InitFromString (&B, GetCurrentFile ()); + SB_Clear (&M->Replacement); + Stringize (&B, &M->Replacement); + SB_Done (&B); + } +} + + + /*****************************************************************************/ /* Preprocessing */ /*****************************************************************************/ diff --git a/src/cc65/preproc.h b/src/cc65/preproc.h index f543b05b5..2143dde98 100644 --- a/src/cc65/preproc.h +++ b/src/cc65/preproc.h @@ -38,6 +38,16 @@ +/*****************************************************************************/ +/* Forwards */ +/*****************************************************************************/ + + + +typedef struct Macro Macro; + + + /*****************************************************************************/ /* Data */ /*****************************************************************************/ @@ -80,6 +90,9 @@ void InitPreprocess (void); void DonePreprocess (void); /* Done with preprocessor */ +void HandleSpecialMacro (Macro* M, const char* Name); +/* Handle special mandatory macros */ + /* End of preproc.h */ diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index ebdcdb33e..09dd8fef8 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -835,16 +835,7 @@ void NextToken (void) /* No reserved word, check for special symbols */ if (token[0] == '_' && token[1] == '_') { /* Special symbols */ - if (strcmp (token+2, "FILE__") == 0) { - NextTok.SVal = AddLiteral (GetCurrentFile()); - NextTok.Tok = TOK_SCONST; - return; - } else if (strcmp (token+2, "LINE__") == 0) { - NextTok.Tok = TOK_ICONST; - NextTok.IVal = GetCurrentLine(); - NextTok.Type = type_int; - return; - } else if (strcmp (token+2, "func__") == 0) { + if (strcmp (token+2, "func__") == 0) { /* __func__ is only defined in functions */ if (CurrentFunc) { NextTok.SVal = AddLiteral (F_GetFuncName (CurrentFunc)); From 36123c9c8fce00e03938d8d3a585a1548b1c79f4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 24 Jul 2022 23:19:05 +0800 Subject: [PATCH 1727/2710] Improved naming for stuff related to preprocessing directives. --- src/cc65/preproc.c | 170 ++++++++++++++++++++++++--------------------- 1 file changed, 91 insertions(+), 79 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 4b1966437..35a9119c7 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -121,67 +121,67 @@ static void MacroReplacement (StrBuf* Source, StrBuf* Target, int MultiLine); -/* Types of preprocessor tokens */ +/* Types of preprocessor directives */ typedef enum { - PP_ILLEGAL = -1, - PP_DEFINE, - PP_ELIF, - PP_ELSE, - PP_ENDIF, - PP_ERROR, - PP_IF, - PP_IFDEF, - PP_IFNDEF, - PP_INCLUDE, - PP_LINE, - PP_PRAGMA, - PP_UNDEF, - PP_WARNING, -} pptoken_t; + PPD_ILLEGAL = -1, + PPD_DEFINE, + PPD_ELIF, + PPD_ELSE, + PPD_ENDIF, + PPD_ERROR, + PPD_IF, + PPD_IFDEF, + PPD_IFNDEF, + PPD_INCLUDE, + PPD_LINE, + PPD_PRAGMA, + PPD_UNDEF, + PPD_WARNING, +} ppdirective_t; -/* Preprocessor keyword to token mapping table */ -static const struct PPToken { - const char* Key; /* Keyword */ - pptoken_t Tok; /* Token */ -} PPTokens[] = { - { "define", PP_DEFINE }, - { "elif", PP_ELIF }, - { "else", PP_ELSE }, - { "endif", PP_ENDIF }, - { "error", PP_ERROR }, - { "if", PP_IF }, - { "ifdef", PP_IFDEF }, - { "ifndef", PP_IFNDEF }, - { "include", PP_INCLUDE }, - { "line", PP_LINE }, - { "pragma", PP_PRAGMA }, - { "undef", PP_UNDEF }, - { "warning", PP_WARNING }, +/* Preprocessor directive tokens mapping table */ +static const struct PPDType { + const char* Tok; /* Token */ + ppdirective_t Type; /* Type */ +} PPDTypes[] = { + { "define", PPD_DEFINE }, + { "elif", PPD_ELIF }, + { "else", PPD_ELSE }, + { "endif", PPD_ENDIF }, + { "error", PPD_ERROR }, + { "if", PPD_IF }, + { "ifdef", PPD_IFDEF }, + { "ifndef", PPD_IFNDEF }, + { "include", PPD_INCLUDE }, + { "line", PPD_LINE }, + { "pragma", PPD_PRAGMA }, + { "undef", PPD_UNDEF }, + { "warning", PPD_WARNING }, }; -/* Number of preprocessor tokens */ -#define PPTOKEN_COUNT (sizeof(PPTokens) / sizeof(PPTokens[0])) +/* Number of preprocessor directive types */ +#define PPDTOKEN_COUNT (sizeof(PPDTypes) / sizeof(PPDTypes[0])) static int CmpToken (const void* Key, const void* Elem) /* Compare function for bsearch */ { - return strcmp ((const char*) Key, ((const struct PPToken*) Elem)->Key); + return strcmp ((const char*) Key, ((const struct PPDType*) Elem)->Tok); } -static pptoken_t FindPPToken (const char* Ident) -/* Find a preprocessor token and return it. Return PP_ILLEGAL if the identifier -** is not a valid preprocessor token. +static ppdirective_t FindPPDirectiveType (const char* Ident) +/* Find a preprocessor directive type and return it. Return PPD_ILLEGAL if the +** identifier is not a valid preprocessor directive token. */ { - struct PPToken* P; - P = bsearch (Ident, PPTokens, PPTOKEN_COUNT, sizeof (PPTokens[0]), CmpToken); - return P? P->Tok : PP_ILLEGAL; + struct PPDType* P; + P = bsearch (Ident, PPDTypes, PPDTOKEN_COUNT, sizeof (PPDTypes[0]), CmpToken); + return P? P->Type : PPD_ILLEGAL; } @@ -257,6 +257,26 @@ static int ME_ArgIsVariadic (const MacroExp* E, const Macro* M) +static int MacName (char* Ident) +/* Get a macro symbol name into Ident. If we have an error, print a +** diagnostic message and clear the line. +*/ +{ + if (IsSym (Ident) == 0) { + if (CurC != '\0') { + PPError ("Macro name must be an identifier"); + } else { + PPError ("Missing macro name"); + } + ClearLine (); + return 0; + } else { + return 1; + } +} + + + static void AddPreLine (StrBuf* Str) /* Add newlines to the string buffer */ { @@ -502,26 +522,6 @@ static int CheckExtraTokens (const char* Name) -static int MacName (char* Ident) -/* Get a macro symbol name into Ident. If we have an error, print a -** diagnostic message and clear the line. -*/ -{ - if (IsSym (Ident) == 0) { - if (CurC != '\0') { - PPError ("Macro name must be an identifier"); - } else { - PPError ("Missing macro name"); - } - ClearLine (); - return 0; - } else { - return 1; - } -} - - - static void ReadMacroArgs (MacroExp* E, const Macro* M, int MultiLine) /* Identify the arguments to a macro call as-is */ { @@ -637,7 +637,7 @@ static void ReadMacroArgs (MacroExp* E, const Macro* M, int MultiLine) -static void MacroArgSubst (MacroExp* E, Macro* M) +static void SubstMacroArgs (MacroExp* E, Macro* M) /* Argument substitution according to ISO/IEC 9899:1999 (E), 6.10.3.1ff */ { ident Ident; @@ -792,7 +792,7 @@ static void ExpandMacro (StrBuf* Target, Macro* M, int MultiLine) } /* Replace macro arguments handling the # and ## operators */ - MacroArgSubst (&E, M); + SubstMacroArgs (&E, M); /* Forbide repeated expansion of the same macro in use */ M->Expanding = 1; @@ -1036,6 +1036,12 @@ static void MacroReplacement (StrBuf* Source, StrBuf* Target, int MultiLine) +/*****************************************************************************/ +/* Directives */ +/*****************************************************************************/ + + + static void DoDefine (void) /* Process #define directive */ { @@ -1468,15 +1474,15 @@ static int ParseDirectives (int InArgList) } ClearLine (); } else { - switch (FindPPToken (Directive)) { + switch (FindPPDirectiveType (Directive)) { - case PP_DEFINE: + case PPD_DEFINE: if (!PPSkip) { DoDefine (); } break; - case PP_ELIF: + case PPD_ELIF: if (PPStack->Index >= 0) { if ((PPStack->Stack[PPStack->Index] & IFCOND_ELSE) == 0) { /* Handle as #else/#if combination */ @@ -1496,7 +1502,7 @@ static int ParseDirectives (int InArgList) } break; - case PP_ELSE: + case PPD_ELSE: if (PPStack->Index >= 0) { if ((PPStack->Stack[PPStack->Index] & IFCOND_ELSE) == 0) { if ((PPStack->Stack[PPStack->Index] & IFCOND_SKIP) == 0) { @@ -1514,7 +1520,7 @@ static int ParseDirectives (int InArgList) } break; - case PP_ENDIF: + case PPD_ENDIF: if (PPStack->Index >= 0) { /* Remove any clauses on top of stack that do not ** need a terminating #endif. @@ -1537,38 +1543,38 @@ static int ParseDirectives (int InArgList) } break; - case PP_ERROR: + case PPD_ERROR: if (!PPSkip) { DoError (); } break; - case PP_IF: + case PPD_IF: PPSkip = DoIf (PPSkip); break; - case PP_IFDEF: + case PPD_IFDEF: PPSkip = DoIfDef (PPSkip, 1); break; - case PP_IFNDEF: + case PPD_IFNDEF: PPSkip = DoIfDef (PPSkip, 0); break; - case PP_INCLUDE: + case PPD_INCLUDE: if (!PPSkip) { DoInclude (); } break; - case PP_LINE: + case PPD_LINE: /* Should do something in C99 at least, but we ignore it */ if (!PPSkip) { ClearLine (); } break; - case PP_PRAGMA: + case PPD_PRAGMA: if (!PPSkip) { if (!InArgList) { DoPragma (); @@ -1578,13 +1584,13 @@ static int ParseDirectives (int InArgList) } break; - case PP_UNDEF: + case PPD_UNDEF: if (!PPSkip) { DoUndef (); } break; - case PP_WARNING: + case PPD_WARNING: /* #warning is a non standard extension */ if (IS_Get (&Standard) > STD_C99) { if (!PPSkip) { @@ -1619,6 +1625,12 @@ static int ParseDirectives (int InArgList) +/*****************************************************************************/ +/* Preprocessor */ +/*****************************************************************************/ + + + void Preprocess (void) /* Preprocess lines count of which is affected by directives */ { From bb9c98f4c9ce005b5becc7d47f5b38ccc9500e91 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 24 Jul 2022 23:19:05 +0800 Subject: [PATCH 1728/2710] Added support for the #line directive. --- src/cc65/input.c | 40 ++++++++++++++++++-- src/cc65/input.h | 6 +++ src/cc65/preproc.c | 93 +++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 134 insertions(+), 5 deletions(-) diff --git a/src/cc65/input.c b/src/cc65/input.c index 18441f5c8..c6037091f 100644 --- a/src/cc65/input.c +++ b/src/cc65/input.c @@ -92,6 +92,7 @@ struct AFile { FILE* F; /* Input file stream */ IFile* Input; /* Points to corresponding IFile */ int SearchPath; /* True if we've added a path for this file */ + char* PName; /* Presumed name of the file */ PPIfStack IfStack; /* PP #if stack */ int MissingNL; /* Last input line was missing a newline */ }; @@ -159,6 +160,7 @@ static AFile* NewAFile (IFile* IF, FILE* F) AF->Line = 0; AF->F = F; AF->Input = IF; + AF->PName = 0; AF->IfStack.Index = -1; AF->MissingNL = 0; @@ -209,6 +211,9 @@ static AFile* NewAFile (IFile* IF, FILE* F) static void FreeAFile (AFile* AF) /* Free an AFile structure */ { + if (AF->PName != 0) { + xfree (AF->PName); + } xfree (AF); } @@ -599,8 +604,8 @@ const char* GetCurrentFile (void) { unsigned AFileCount = CollCount (&AFiles); if (AFileCount > 0) { - const AFile* AF = (const AFile*) CollAt (&AFiles, AFileCount-1); - return AF->Input->Name; + const AFile* AF = CollLast (&AFiles); + return AF->PName == 0 ? AF->Input->Name : AF->PName; } else { /* No open file */ return "(outside file scope)"; @@ -614,7 +619,7 @@ unsigned GetCurrentLine (void) { unsigned AFileCount = CollCount (&AFiles); if (AFileCount > 0) { - const AFile* AF = (const AFile*) CollAt (&AFiles, AFileCount-1); + const AFile* AF = CollLast (&AFiles); return AF->Line; } else { /* No open file */ @@ -624,6 +629,35 @@ unsigned GetCurrentLine (void) +void SetCurrentLine (unsigned LineNum) +/* Set the line number in the current input file */ +{ + unsigned AFileCount = CollCount (&AFiles); + if (AFileCount > 0) { + AFile* AF = CollLast (&AFiles); + AF->Line = LineNum; + } +} + + + +void SetCurrentFilename (const char* Name) +/* Set the presumed name of the current input file */ +{ + unsigned AFileCount = CollCount (&AFiles); + if (AFileCount > 0) { + size_t Len = strlen (Name); + AFile* AF = CollLast (&AFiles); + if (AF->PName != 0) { + xfree (AF->PName); + } + AF->PName = xmalloc (Len + 1); + memcpy (AF->PName, Name, Len + 1); + } +} + + + static void WriteEscaped (FILE* F, const char* Name) /* Write a file name to a dependency file escaping spaces */ { diff --git a/src/cc65/input.h b/src/cc65/input.h index 779217b9b..cf529e169 100644 --- a/src/cc65/input.h +++ b/src/cc65/input.h @@ -122,6 +122,12 @@ const char* GetCurrentFile (void); unsigned GetCurrentLine (void); /* Return the line number in the current input file */ +void SetCurrentLine (unsigned LineNum); +/* Set the line number in the current input file */ + +void SetCurrentFilename (const char* Name); +/* Set the presumed name of the current input file */ + void CreateDependencies (void); /* Create dependency files requested by the user */ diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 6dcbeea70..3b73ee493 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -57,6 +57,7 @@ #include "ppexpr.h" #include "preproc.h" #include "scanner.h" +#include "scanstrbuf.h" #include "standard.h" @@ -1294,6 +1295,95 @@ Done: +static unsigned GetLineDirectiveNum (void) +/* Get a decimal digit-sequence from the input. Return 0 on errors. */ +{ + unsigned long Num = 0; + StrBuf Buf = AUTO_STRBUF_INITIALIZER; + + /* The only non-decimal-numeric character allowed in the digit-sequence is + ** the digit separator '\'' as of C23, but we haven't supported it yet. + */ + SkipWhitespace (0); + while (IsDigit (CurC)) + { + SB_AppendChar (&Buf, CurC); + NextChar (); + } + + /* Ensure the buffer is terminated with a '\0' */ + SB_Terminate (&Buf); + if (SkipWhitespace (0) != 0 || CurC == '\0') { + const char* Str = SB_GetConstBuf (&Buf); + if (Str[0] == '\0') { + PPWarning ("#line directive interprets number as decimal, not octal"); + } else { + Num = strtoul (Str, 0, 10); + if (Num > 2147483647) { + PPError ("#line directive requires an integer argument not greater than 2147483647"); + ClearLine (); + Num = 0; + } else if (Num == 0) { + PPError ("#line directive requires a positive integer argument"); + ClearLine (); + } + } + } else { + PPError ("#line directive requires a simple decimal digit sequence"); + ClearLine (); + } + + /* Done with the buffer */ + SB_Done (&Buf); + + return (unsigned)Num; +} + + + +static void DoLine (void) +/* Process #line directive */ +{ + unsigned LineNum; + + /* Macro-replace a single line with support for the "defined" operator */ + SB_Clear (MLine); + PreprocessDirective (Line, MLine, MSM_NONE); + + /* Read from the processed line */ + SB_Reset (MLine); + MLine = InitLine (MLine); + + /* Parse and check the specified line number */ + LineNum = GetLineDirectiveNum (); + if (LineNum != 0) { + /* Parse and check the optional filename argument */ + if (SB_GetIndex (Line) < SB_GetLen (Line)) { + StrBuf Filename = AUTO_STRBUF_INITIALIZER; + if (SB_GetString (Line, &Filename)) { + SB_Terminate (&Filename); + SetCurrentFilename (SB_GetConstBuf (&Filename)); + } else { + PPError ("Invalid filename for #line directive"); + LineNum = 0; + } + SB_Done (&Filename); + } + + /* #line actually sets the line number of the next line */ + if (LineNum > 0) { + SetCurrentLine (LineNum - 1); + /* Check for extra tokens at the end */ + CheckExtraTokens ("line"); + } + } + + /* Restore input source */ + MLine = InitLine (MLine); +} + + + static void DoPragma (void) /* Handle a #pragma line by converting the #pragma preprocessor directive into ** the _Pragma() compiler operator. @@ -1476,9 +1566,8 @@ static int ParseDirectives (unsigned ModeFlags) break; case PPD_LINE: - /* Should do something in C99 at least, but we ignore it */ if (!PPSkip) { - ClearLine (); + DoLine (); } break; From 43d2fd2a960c1fb40c740eb057a34329f8d54075 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 24 Jul 2022 23:19:05 +0800 Subject: [PATCH 1729/2710] Added support for the popular __COUNTER__ macro. --- src/cc65/compile.c | 3 ++- src/cc65/input.c | 14 +++++++++++ src/cc65/input.h | 3 +++ src/cc65/preproc.c | 10 ++++++-- src/cc65/preproc.h | 2 +- test/val/counter.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++ test/val/counter.h | 4 ++++ 7 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 test/val/counter.c create mode 100644 test/val/counter.h diff --git a/src/cc65/compile.c b/src/cc65/compile.c index d6069e914..11dcbced0 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -396,9 +396,10 @@ void Compile (const char* FileName) DefineNumericMacro ("__EAGERLY_INLINE_FUNCS__", 1); } - /* Placeholders for __FILE__ and __LINE__ macros */ + /* Placeholders for __FILE__, __LINE__ and __COUNTER__ macros */ DefineTextMacro ("__FILE__", ""); DefineTextMacro ("__LINE__", ""); + DefineTextMacro ("__COUNTER__", ""); /* __TIME__ and __DATE__ macros */ Time = time (0); diff --git a/src/cc65/input.c b/src/cc65/input.c index c6037091f..0e8fc3276 100644 --- a/src/cc65/input.c +++ b/src/cc65/input.c @@ -106,6 +106,9 @@ static Collection AFiles = STATIC_COLLECTION_INITIALIZER; /* Input stack used when preprocessing. */ static Collection InputStack = STATIC_COLLECTION_INITIALIZER; +/* Counter for the __COUNTER__ macro */ +static unsigned MainFileCounter; + /*****************************************************************************/ @@ -280,6 +283,9 @@ void OpenMainFile (const char* Name) ** the main file before the first line is read. */ UpdateLineInfo (MainFile->Input, MainFile->Line, Line); + + /* Initialize the __COUNTER__ counter */ + MainFileCounter = 0; } @@ -658,6 +664,14 @@ void SetCurrentFilename (const char* Name) +unsigned GetCurrentCounter (void) +/* Return the counter number in the current input file */ +{ + return MainFileCounter++; +} + + + static void WriteEscaped (FILE* F, const char* Name) /* Write a file name to a dependency file escaping spaces */ { diff --git a/src/cc65/input.h b/src/cc65/input.h index cf529e169..fb24bbaa8 100644 --- a/src/cc65/input.h +++ b/src/cc65/input.h @@ -128,6 +128,9 @@ void SetCurrentLine (unsigned LineNum); void SetCurrentFilename (const char* Name); /* Set the presumed name of the current input file */ +unsigned GetCurrentCounter (void); +/* Return the counter number in the current input file */ + void CreateDependencies (void); /* Create dependency files requested by the user */ diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 91aa503fc..020df011a 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1630,9 +1630,15 @@ static int ParseDirectives (unsigned ModeFlags) void HandleSpecialMacro (Macro* M, const char* Name) -/* Handle special mandatory macros */ +/* Handle special "magic" macros that may change */ { - if (strcmp (Name, "__LINE__") == 0) { + if (strcmp (Name, "__COUNTER__") == 0) { + /* Replace __COUNTER__ with the current counter number */ + if (IS_Get (&Standard) < STD_CC65) { + PPWarning ("__COUNTER__ is a cc65 extension"); + } + SB_Printf (&M->Replacement, "%u", GetCurrentCounter ()); + } else if (strcmp (Name, "__LINE__") == 0) { /* Replace __LINE__ with the current line number */ SB_Printf (&M->Replacement, "%u", GetCurrentLine ()); } else if (strcmp (Name, "__FILE__") == 0) { diff --git a/src/cc65/preproc.h b/src/cc65/preproc.h index 2143dde98..a4619e545 100644 --- a/src/cc65/preproc.h +++ b/src/cc65/preproc.h @@ -91,7 +91,7 @@ void DonePreprocess (void); /* Done with preprocessor */ void HandleSpecialMacro (Macro* M, const char* Name); -/* Handle special mandatory macros */ +/* Handle special "magic" macros that may change */ diff --git a/test/val/counter.c b/test/val/counter.c new file mode 100644 index 000000000..4efa18359 --- /dev/null +++ b/test/val/counter.c @@ -0,0 +1,60 @@ +/* Tests for predefined macro __COUNTER__ */ + +#include <stdio.h> + +static int failures = 0; + +#if __COUNTER__ /* 0 */ +# error __COUNTER__ should begin at 0! +#elif __COUNTER__ == 1 /* 1 */ +# define CONCAT(a,b) CONCAT_impl_(a,b) +# define CONCAT_impl_(a,b) a##b +#endif + +#line 42 "What is the answer?" +int CONCAT(ident,__COUNTER__)[0+__LINE__] = {__LINE__}, CONCAT(ident,__COUNTER__)[0+__LINE__] = {__LINE__}; /* 2,3 */ + +#if __COUNTER__ == 4 ? 1 || __COUNTER__ : 0 && __COUNTER__ /* 4,5,6 */ +_Static_assert(__COUNTER__ == 7, "__COUNTER__ should be 7 here!"); /* 7 */ +# define GET_COUNTER() __COUNTER__ +# define GET_LINE() __LINE__ +# warning __COUNTER__ in #warning is just output as text and will never increase! +#else +# if __COUNTER__ + __COUNTER__ + __COUNTER__ /* Skipped as a whole and not incrementing */ +# endif +# error __COUNTER__ is skipped along with the whole #error line and will never increase anyways! */ +#endif + +#include "counter.h" +#include "counter.h" + +_Static_assert(GET_COUNTER() == 10, "__COUNTER__ should be 10 here!"); /* 10 */ + +int main(void) +{ + if (ident2[0] != 42) { + printf("Expected ident2[0]: %s, got: %s\n", 42, ident2[0]); + ++failures; + } + + if (ident3[0] != 42) { + printf("Expected ident3[0]: %s, got: %s\n", 42, ident3[0]); + ++failures; + } + + if (ident8 != 8) { + printf("Expected ident8: %s, got: %s\n", 8, ident8); + ++failures; + } + + if (ident9 != 9) { + printf("Expected ident9: %s, got: %s\n", 9, ident9); + ++failures; + } + + if (failures != 0) { + printf("Failures: %d\n", failures); + } + + return failures; +} diff --git a/test/val/counter.h b/test/val/counter.h new file mode 100644 index 000000000..b6b5a98e2 --- /dev/null +++ b/test/val/counter.h @@ -0,0 +1,4 @@ +/* Tests for predefined macro __COUNTER__ */ + +#line GET_COUNTER() /* 1st: 8; 2nd: 9 */ +int CONCAT(ident,GET_LINE()) = GET_LINE(); From 6239fbe18c0a557125134245a90775f54e6031cd Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 18:14:21 +0200 Subject: [PATCH 1730/2710] Revert "rename '_poserror' to '__poserror'" --- doc/funcref.sgml | 10 +++++----- include/stdio.h | 2 +- libsrc/common/_poserror.c | 4 ++-- libsrc/geos-common/common/_poserror.c | 4 ++-- samples/geos/overlay-demo.c | 16 ++++++++-------- targettest/rename-test.c | 12 ++++++------ 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index c249cc3cf..a8593ebb5 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -627,7 +627,7 @@ communication, see also <tt>testcode/lib/ser-test.c</tt>. <sect1><tt/stdio.h/<label id="stdio.h"><p> <itemize> -<item><ref id="__poserror" name="__poserror"> +<item><ref id="_poserror" name="_poserror"> <item><ref id="clearerr" name="clearerr"> <!-- <item><ref id="fclose" name="fclose"> --> <!-- <item><ref id="fdopen" name="fdopen"> --> @@ -1058,14 +1058,14 @@ It returns 1 if it does. </descrip> </quote> -<sect1>__poserror<label id="__poserror"><p> +<sect1>_poserror<label id="_poserror"><p> <quote> <descrip> <tag/Function/Print an error message for the error in <tt/_oserror/. <tag/Header/<tt/<ref id="stdio.h" name="stdio.h">/ -<tag/Declaration/<tt/void __fastcall__ __poserror (const char* msg);/ -<tag/Description/<tt/__poserror/ prints an error message to <tt/stderr/. If +<tag/Declaration/<tt/void __fastcall__ _poserror (const char* msg);/ +<tag/Description/<tt/_poserror/ prints an error message to <tt/stderr/. If <tt/msg/ is not <tt/NULL/ and not an empty string, it is printed followed by a colon and a blank. Then the error message for the current contents of <tt/_oserror/ are printed followed by a newline. The message output is the @@ -5856,7 +5856,7 @@ be used in presence of a prototype. </itemize> <tag/Availability/ISO 9899 <tag/See also/ -<ref id="__poserror" name="__poserror">, +<ref id="_poserror" name="_poserror">, <ref id="strerror" name="strerror"> <tag/Example/None. </descrip> diff --git a/include/stdio.h b/include/stdio.h index f4ba52a15..84a991a98 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -147,7 +147,7 @@ int __fastcall__ vfscanf (FILE* f, const char* format, __va_list ap); FILE* __fastcall__ fdopen (int fd, const char* mode); /* Unix */ int __fastcall__ fileno (FILE* f); /* Unix */ #endif -void __fastcall__ __poserror (const char* msg); /* cc65 */ +void __fastcall__ _poserror (const char* msg); /* cc65 */ /* Masking macros for some functions */ #define getc(f) fgetc (f) /* ANSI */ diff --git a/libsrc/common/_poserror.c b/libsrc/common/_poserror.c index 93c67dcf7..2777fee98 100644 --- a/libsrc/common/_poserror.c +++ b/libsrc/common/_poserror.c @@ -1,6 +1,6 @@ /*****************************************************************************/ /* */ -/* __poserror.c */ +/* _poserror.c */ /* */ /* Output a system dependent error code */ /* */ @@ -39,7 +39,7 @@ -void __fastcall__ __poserror (const char* msg) +void __fastcall__ _poserror (const char* msg) { /* Fetch the message that corresponds to _oserror */ const char* errormsg = _stroserror (_oserror); diff --git a/libsrc/geos-common/common/_poserror.c b/libsrc/geos-common/common/_poserror.c index 1e06a3b24..eeb3f368e 100644 --- a/libsrc/geos-common/common/_poserror.c +++ b/libsrc/geos-common/common/_poserror.c @@ -1,5 +1,5 @@ /* -** __poserror.c +** _poserror.c ** ** Maciej 'YTM/Elysium' Witkowiak, 25.04.2003 */ @@ -9,7 +9,7 @@ #include <errno.h> #include <geos.h> -void __fastcall__ __poserror (const char* msg) +void __fastcall__ _poserror (const char* msg) { const char *errmsg = _stroserror(_oserror); diff --git a/samples/geos/overlay-demo.c b/samples/geos/overlay-demo.c index d6acbe655..73ab0e3c0 100644 --- a/samples/geos/overlay-demo.c +++ b/samples/geos/overlay-demo.c @@ -65,7 +65,7 @@ void foobar (void) void main(int /*argc*/, char *argv[]) { if (OpenRecordFile(argv[0])) { - __poserror("OpenRecordFile"); + _poserror("OpenRecordFile"); return; } @@ -73,7 +73,7 @@ void main(int /*argc*/, char *argv[]) "Click OK to call Overlay One."); if (PointRecord(1)) { - __poserror("PointRecord.1"); + _poserror("PointRecord.1"); return; } @@ -82,7 +82,7 @@ void main(int /*argc*/, char *argv[]) ** size specific to a certain program. */ if (ReadRecord(OVERLAY_ADDR, OVERLAY_SIZE)) { - __poserror("ReadRecord.1"); + _poserror("ReadRecord.1"); return; } @@ -96,7 +96,7 @@ void main(int /*argc*/, char *argv[]) "Click OK to call Overlay Two."); if (PointRecord(2)) { - __poserror("PointRecord.2"); + _poserror("PointRecord.2"); return; } @@ -104,7 +104,7 @@ void main(int /*argc*/, char *argv[]) ** program. This implies that an overlay can never load another overlay. */ if (ReadRecord(OVERLAY_ADDR, OVERLAY_SIZE)) { - __poserror("ReadRecord.2"); + _poserror("ReadRecord.2"); return; } @@ -114,19 +114,19 @@ void main(int /*argc*/, char *argv[]) "Click OK to call Overlay Three."); if (PointRecord(3)) { - __poserror("PointRecord.3"); + _poserror("PointRecord.3"); return; } if (ReadRecord(OVERLAY_ADDR, OVERLAY_SIZE)) { - __poserror("ReadRecord.3"); + _poserror("ReadRecord.3"); return; } foobar(); if (CloseRecordFile()) { - __poserror("CloseRecordFile"); + _poserror("CloseRecordFile"); return; } } diff --git a/targettest/rename-test.c b/targettest/rename-test.c index 2f1d77600..0e9160b9e 100644 --- a/targettest/rename-test.c +++ b/targettest/rename-test.c @@ -58,7 +58,7 @@ int main(void) printf("Creating file: %s\n", name1); file = fopen(name1, "w"); if (file == NULL) { - __poserror("Disk error making first file"); + _poserror("Disk error making first file"); return EXIT_FAILURE; } fclose(file); @@ -66,7 +66,7 @@ int main(void) /* Verify that the file-name exists now. */ file = fopen(name1, "r"); if (file == NULL) { - __poserror("Cannot find first name"); + _poserror("Cannot find first name"); return EXIT_FAILURE; } fclose(file); @@ -78,7 +78,7 @@ int main(void) printf("Renaming %s to %s\n", name1, name2); r = rename(name1, name2); if (r < 0) { - __poserror("rename() failed"); + _poserror("rename() failed"); return EXIT_FAILURE; } @@ -86,14 +86,14 @@ int main(void) file = fopen(name1, "r"); if (file != NULL) { fclose(file); - __poserror("First name still exists"); + _poserror("First name still exists"); return EXIT_FAILURE; } /* Verify that the second file-name exists now. */ file = fopen(name2, "r"); if (file == NULL) { - __poserror("Cannot find second name"); + _poserror("Cannot find second name"); return EXIT_FAILURE; } fclose(file); @@ -104,7 +104,7 @@ int main(void) printf("Removing %s\n", name2); r = remove(name2); if (r < 0) { - __poserror("remove() failed"); + _poserror("remove() failed"); return EXIT_FAILURE; } From aeb13b60a71efb71624d63b753bf828acb3fef0b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 19:10:27 +0200 Subject: [PATCH 1731/2710] rename --- libsrc/atari/cpeekchar.s | 4 ++-- libsrc/atmos/cpeekchar.s | 4 ++-- libsrc/nes/cpeekchar.s | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libsrc/atari/cpeekchar.s b/libsrc/atari/cpeekchar.s index c895059db..ff502074d 100644 --- a/libsrc/atari/cpeekchar.s +++ b/libsrc/atari/cpeekchar.s @@ -1,5 +1,5 @@ - .export _cpeekchar + .export _cpeekc .import mul40 .importzp ptr4 @@ -8,7 +8,7 @@ .segment "CODE" -_cpeekchar: +_cpeekc: lda ROWCRS jsr mul40 ; destroys tmp4 diff --git a/libsrc/atmos/cpeekchar.s b/libsrc/atmos/cpeekchar.s index a03bdb6a7..2139989c3 100644 --- a/libsrc/atmos/cpeekchar.s +++ b/libsrc/atmos/cpeekchar.s @@ -1,9 +1,9 @@ .include "atmos.inc" - .export _cpeekchar + .export _cpeekc -_cpeekchar: +_cpeekc: ldy CURS_Y ldx ScrTabLo,y diff --git a/libsrc/nes/cpeekchar.s b/libsrc/nes/cpeekchar.s index 995e01bc1..b4e3c34fd 100644 --- a/libsrc/nes/cpeekchar.s +++ b/libsrc/nes/cpeekchar.s @@ -1,5 +1,5 @@ - .export _cpeekchar + .export _cpeekc .import ppubuf_waitempty @@ -7,7 +7,7 @@ .segment "CODE" -_cpeekchar: +_cpeekc: ; wait until all console data has been written jsr ppubuf_waitempty From a998d3490713e29f8ce16ecc7967cede6227a733 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 19:16:15 +0200 Subject: [PATCH 1732/2710] remove tabs --- libsrc/atmos/cpeekchar.s | 3 +-- libsrc/nes/cpeekchar.s | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/libsrc/atmos/cpeekchar.s b/libsrc/atmos/cpeekchar.s index 2139989c3..fba51bf72 100644 --- a/libsrc/atmos/cpeekchar.s +++ b/libsrc/atmos/cpeekchar.s @@ -1,5 +1,5 @@ - .include "atmos.inc" + .include "atmos.inc" .export _cpeekc @@ -28,4 +28,3 @@ ScrTabHi: .repeat 28, Line .byte >(SCREEN + Line * 40) .endrep - diff --git a/libsrc/nes/cpeekchar.s b/libsrc/nes/cpeekchar.s index b4e3c34fd..55230edbc 100644 --- a/libsrc/nes/cpeekchar.s +++ b/libsrc/nes/cpeekchar.s @@ -3,7 +3,7 @@ .import ppubuf_waitempty - .include "nes.inc" + .include "nes.inc" .segment "CODE" From 416040dfb628c02a195ffd618ebe6151e0b3b174 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 23:43:53 +0200 Subject: [PATCH 1733/2710] add prototype for static driver --- include/c64.h | 1 + 1 file changed, 1 insertion(+) diff --git a/include/c64.h b/include/c64.h index f501a4e7f..13d252dcb 100644 --- a/include/c64.h +++ b/include/c64.h @@ -145,6 +145,7 @@ extern void c64_ram_emd[]; extern void c64_ramcart_emd[]; extern void c64_reu_emd[]; extern void c64_vdc_emd[]; +extern void c64_rrr_emd[]; extern void dtv_himem_emd[]; extern void c64_hitjoy_joy[]; extern void c64_numpad_joy[]; From 3c71455bd6d76bf3bdb6be4a3f7f94ae053139a1 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 23:49:45 +0200 Subject: [PATCH 1734/2710] test related to issue #1373, should be move to val in pr #1807 --- test/todo/bug1373.c | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 test/todo/bug1373.c diff --git a/test/todo/bug1373.c b/test/todo/bug1373.c new file mode 100644 index 000000000..e42ae3f9a --- /dev/null +++ b/test/todo/bug1373.c @@ -0,0 +1,47 @@ + +/* #1373 - #pragma charmap works in unexpected ways */ + +#include <stdio.h> +#include <string.h> + +char res0[10]; +char res1[10]; +char res2[10]; +char res3[10]; +char res4[10]; + +int err = 0; + +#pragma charmap(0x61, 0x44) +#define STRING_A "abAB" + +extern char mappedA[5]; + +#pragma charmap(0x61, 0x61) +char notmappedA[5] = "abAB"; + +#pragma charmap(0x61, 0x42) +int main(void) +{ + char mappedB[5] = STRING_A; + sprintf(res0, "abAB"); /* expected: BbAB */ + +#pragma charmap(0x61, 0x61) + sprintf(res1, mappedA); /* expected: CbAB */ + sprintf(res2, STRING_A); /* expected: abAB */ + sprintf(res3, mappedB); /* expected: BBaB */ + +#pragma charmap(0x61, 0x43) + sprintf(res4, notmappedA); /* expected: abAB */ + +#pragma charmap(0x61, 0x61) + puts(res0); if (strcmp(res0, "BbAB") != 0) { puts("expected: BbAB"); err++; } + puts(res1); if (strcmp(res1, "CbAB") != 0) { puts("expected: CbAB"); err++; } + puts(res2); if (strcmp(res2, "abAB") != 0) { puts("expected: abAB"); err++; } + puts(res3); if (strcmp(res3, "BBaB") != 0) { puts("expected: BBaB"); err++; } + puts(res4); if (strcmp(res4, "abAB") != 0) { puts("expected: abAB"); err++; } + + return err; +} + +char mappedA[5] = "abAB"; From d03f28d0eda3f75589b32edbfd39987e911c35a3 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 24 Jul 2022 23:52:53 +0200 Subject: [PATCH 1735/2710] dangling! --- test/todo/bug1373.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/todo/bug1373.c b/test/todo/bug1373.c index e42ae3f9a..29eaaa56f 100644 --- a/test/todo/bug1373.c +++ b/test/todo/bug1373.c @@ -44,4 +44,4 @@ int main(void) return err; } -char mappedA[5] = "abAB"; +char mappedA[5] = "abAB"; From f99cb177c63d7f45a2d326ee1ffd6c7f33f95961 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 25 Jul 2022 21:01:31 +0200 Subject: [PATCH 1736/2710] added example/test for cbm_read, related to issue #1306 --- targettest/cbm/Makefile | 48 ++++++++++++++++++++++- targettest/cbm/cbmread.c | 82 ++++++++++++++++++++++++++++++++++++++++ targettest/cbm/read-0 | 0 targettest/cbm/read-1 | 1 + targettest/cbm/read-8 | 1 + 5 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 targettest/cbm/cbmread.c create mode 100644 targettest/cbm/read-0 create mode 100644 targettest/cbm/read-1 create mode 100644 targettest/cbm/read-8 diff --git a/targettest/cbm/Makefile b/targettest/cbm/Makefile index 47ae5171d..c3171b13e 100644 --- a/targettest/cbm/Makefile +++ b/targettest/cbm/Makefile @@ -2,6 +2,10 @@ # var. to build for another target system. SYS ?= c64 +# This one comes with the VICE emulator. +# See http://vice-emu.sourceforge.net/ +C1541 ?= c1541 + # Just the usual way to find out if we're # using cmd.exe to execute make rules. ifneq ($(shell echo),) @@ -32,11 +36,20 @@ endif EXELIST_c64 = \ petscii.prg \ - cbmdir-test.prg + cbmdir-test.prg \ + cbmread.prg + +EXTRALIST_c64 = \ + read-0 \ + read-1 \ + read-8 EXELIST_vic20 = \ cbmdir-test.prg +DISK_c64 = testcode.d64 +DISK_vic20 = testcode.d64 + ifneq ($(EXELIST_$(SYS)),) testcode: $(EXELIST_$(SYS)) else @@ -66,5 +79,38 @@ else $(CL) -t $(SYS) -Oris -o $@ $< endif +cbmread.prg: cbmread.c +ifeq ($(SYS),vic20) + $(CL) -t $(SYS) -C vic20-32k.cfg -Oris -o $@ $< +else + $(CL) -t $(SYS) -Oris -o $@ $< +endif + +# -------------------------------------------------------------------------- +# Rule to make a CBM disk with all testcode. Needs the c1541 program that comes +# with the VICE emulator. + +define D64_WRITE_PRG_recipe + +$(C1541) -attach $@ -write "$(subst ?,$(SPACE),$(file))" "$(subst ?,$(SPACE),$(subst .prg,,$(notdir $(file))))",p >$(NULLDEV) + +endef # D64_WRITE_PRG_recipe + +define D64_WRITE_SEQ_recipe + +$(C1541) -attach $@ -write "$(subst ?,$(SPACE),$(file))" $(notdir $(file)),s >$(NULLDEV) + +endef # D64_WRITE_SEQ_recipe + +disk: $(DISK_$(SYS)) + +testcode.d64: testcode + @$(C1541) -format "testcode,00" d64 $@ >$(NULLDEV) + $(foreach file,$(EXELIST_$(SYS)),$(D64_WRITE_PRG_recipe)) + $(foreach file,$(EXTRALIST_$(SYS)),$(D64_WRITE_SEQ_recipe)) +# $(foreach file,$(EMD) $(MOU) $(TGI),$(D64_WRITE_SEQ_recipe)) + clean: @$(DEL) *.lbl petscii.prg cbmdir-test.prg 2>$(NULLDEV) + @$(DEL) $(DISK_c64) + @$(DEL) $(DISK_vic20) diff --git a/targettest/cbm/cbmread.c b/targettest/cbm/cbmread.c new file mode 100644 index 000000000..b48410e00 --- /dev/null +++ b/targettest/cbm/cbmread.c @@ -0,0 +1,82 @@ +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> + +#include <cbm.h> + +int res = 0; +int tests = 0; + +#define LFN 8 + +#define MAXREADSIZE 256 + +static char data[MAXREADSIZE]; + +void test1 (char * what, char * filename, int len1, int len2, int rlen1, int rlen2) +{ + int rlen; + unsigned char err; + + printf ("1:%s (%d bytes)..." , what, rlen1); + + err = cbm_open (LFN, 8, 8, filename); + if (err != 0) { + printf ("\nError: could not open file.\n"); + goto test1exit; + } + + rlen = cbm_read (LFN, data, rlen1); + if (rlen == -1) { + printf ("\ncbm_read error (%d)\n", _oserror); + res++; + goto test1exit; + } + if (rlen != len1) { + printf ("\nError: 1st read returned %d instead of %d\n", rlen, len1); + res++; + goto test1exit; + } + + printf (" OK\n"); + + printf ("2:%s (%d bytes)..." , what, rlen2); + + rlen = cbm_read (LFN, data, rlen2); + if (rlen == -1) { + printf ("\ncbm_read error (%d)\n", _oserror); + res++; + goto test1exit; + } + if (rlen != len2) { + printf ("\nError: 2nd read returned %d instead of %d\n", rlen, len2); + res++; + goto test1exit; + } + + printf (" OK\n"); + +test1exit: + cbm_close (LFN); + tests++; +} + +int main(void) +{ + test1 ("Read empty file", "read-0", 0, 0, 0, 0); + test1 ("Read empty file", "read-0", 0, 0, 1, 1); + test1 ("Read empty file", "read-0", 0, 0, 8, 8); + + test1 ("Read 1 byte file", "read-1", 0, 0, 0, 0); + test1 ("Read 1 byte file", "read-1", 1, 0, 1, 1); + test1 ("Read 1 byte file", "read-1", 1, 0, 8, 8); + + test1 ("Read 8 byte file", "read-8", 0, 0, 0, 0); + test1 ("Read 8 byte file", "read-8", 1, 1, 1, 1); + test1 ("Read 8 byte file", "read-8", 4, 4, 4, 4); + test1 ("Read 8 byte file", "read-8", 8, 0, 8, 8); + test1 ("Read 8 byte file", "read-8", 8, 0,10, 1); + + printf ("%d/%d Tests failed.\n", res, tests); + return res; +} diff --git a/targettest/cbm/read-0 b/targettest/cbm/read-0 new file mode 100644 index 000000000..e69de29bb diff --git a/targettest/cbm/read-1 b/targettest/cbm/read-1 new file mode 100644 index 000000000..7371f47a6 --- /dev/null +++ b/targettest/cbm/read-1 @@ -0,0 +1 @@ +B \ No newline at end of file diff --git a/targettest/cbm/read-8 b/targettest/cbm/read-8 new file mode 100644 index 000000000..42ec1bdb8 --- /dev/null +++ b/targettest/cbm/read-8 @@ -0,0 +1 @@ +Gª»ÌÝ \ No newline at end of file From 8289c94e69682c33296978280889764afb35f00e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 26 Jul 2022 14:28:27 +0800 Subject: [PATCH 1737/2710] Fixed skipped lines consist of a leading # followed by any non-directive PP-token sequence. --- src/cc65/preproc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 107541994..96bb0bf1c 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1296,7 +1296,9 @@ void Preprocess (void) continue; } if (!IsSym (Directive)) { - PPError ("Preprocessor directive expected"); + if (!Skip) { + PPError ("Preprocessor directive expected"); + } ClearLine (); } else { switch (FindPPToken (Directive)) { From 9f767770ac014211a9d684987fc44b188817ef7d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 26 Jul 2022 15:19:48 +0800 Subject: [PATCH 1738/2710] Added test case for #pragma charmap. --- test/val/bug1373.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 test/val/bug1373.c diff --git a/test/val/bug1373.c b/test/val/bug1373.c new file mode 100644 index 000000000..f13f375c1 --- /dev/null +++ b/test/val/bug1373.c @@ -0,0 +1,54 @@ + +/* #1373 - #pragma charmap works in unexpected ways */ + +#include <stdio.h> +#include <string.h> + +char res0[10]; +char res1[10]; +char res2[10]; +char res3[10]; +char res4[10]; + +int err = 0; + +#pragma charmap(0x61, 0x44) +#define STRING_A "abABa" + +extern char mappedA[10]; + +#pragma charmap(0x61, 0x61) +char notmappedA[10] = "abABa"; + +void test(void); + +#pragma charmap(0x61, 0x42) +int main(void) +{ + char mappedB[10] = STRING_A; + sprintf(res0, "abABa"); /* expected: BbABB */ + +#pragma charmap(0x61, 0x61) + sprintf(res1, mappedA); /* expected: CbABC */ + sprintf(res2, STRING_A); /* expected: abABa */ + sprintf(res3, mappedB); /* expected: BbABB */ + +#pragma charmap(0x61, 0x43) + sprintf(res4, notmappedA); /* expected: abABa */ + + test(); + + return err; +} + +char mappedA[10] = "abABa"; + +#pragma charmap(0x61, 0x61) +void test(void) +{ + puts(res0); if (strcmp(res0, "BbABB") != 0) { puts("expected: BbABB"); err++; } + puts(res1); if (strcmp(res1, "CbABC") != 0) { puts("expected: CbABC"); err++; } + puts(res2); if (strcmp(res2, "abABa") != 0) { puts("expected: abABa"); err++; } + puts(res3); if (strcmp(res3, "BbABB") != 0) { puts("expected: BbABB"); err++; } + puts(res4); if (strcmp(res4, "abABa") != 0) { puts("expected: abABa"); err++; } +} From 60c12904686cda5ad4552514d72584545168527a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 26 Jul 2022 21:10:26 +0800 Subject: [PATCH 1739/2710] Fixed the bug that preprocessor could run past the end of included files. Fixed the wrong filename and 0 line number in disgnostics when a preprocessor error occurred at the end of a file. Fixed diagnostics for missing #endif. --- src/cc65/compile.c | 21 +++++---- src/cc65/input.c | 115 +++++++++++++++++++++++++++++++++------------ src/cc65/input.h | 16 ++++++- src/cc65/preproc.c | 77 ++++++++++++++++++++---------- src/cc65/preproc.h | 29 +++++++++++- src/cc65/scanner.c | 3 +- 6 files changed, 193 insertions(+), 68 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index d1f78098d..f4fb16c37 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -82,8 +82,11 @@ static void Parse (void) SymEntry* Entry; FuncDesc* FuncDef = 0; - /* Go... */ - NextToken (); + /* Initialization for deferred operations */ + InitDeferredOps (); + + /* Fill up the next token with a bogus semicolon and start the tokenizer */ + NextTok.Tok = TOK_SEMI; NextToken (); /* Parse until end of input */ @@ -336,6 +339,9 @@ static void Parse (void) } } + + /* Done with deferred operations */ + DoneDeferredOps (); } @@ -401,8 +407,6 @@ void Compile (const char* FileName) /* DefineNumericMacro ("__STDC__", 1); <- not now */ DefineNumericMacro ("__STDC_HOSTED__", 1); - InitDeferredOps (); - /* Create the base lexical level */ EnterGlobalLevel (); @@ -431,10 +435,8 @@ void Compile (const char* FileName) OpenOutputFile (); /* Preprocess each line and write it to the output file */ - while (NextLine ()) { - Preprocess (); - WriteOutput ("%.*s\n", (int) SB_GetLen (Line), SB_GetConstBuf (Line)); - } + while (PreprocessNextLine ()) + { /* Nothing */ } /* Close the output file */ CloseOutputFile (); @@ -492,9 +494,8 @@ void Compile (const char* FileName) } } } - } - DoneDeferredOps (); + } if (Debug) { PrintMacroStats (stdout); diff --git a/src/cc65/input.c b/src/cc65/input.c index 22a66e1f7..18441f5c8 100644 --- a/src/cc65/input.c +++ b/src/cc65/input.c @@ -54,6 +54,7 @@ #include "input.h" #include "lineinfo.h" #include "output.h" +#include "preproc.h" @@ -91,6 +92,8 @@ struct AFile { FILE* F; /* Input file stream */ IFile* Input; /* Points to corresponding IFile */ int SearchPath; /* True if we've added a path for this file */ + PPIfStack IfStack; /* PP #if stack */ + int MissingNL; /* Last input line was missing a newline */ }; /* List of all input files */ @@ -156,6 +159,8 @@ static AFile* NewAFile (IFile* IF, FILE* F) AF->Line = 0; AF->F = F; AF->Input = IF; + AF->IfStack.Index = -1; + AF->MissingNL = 0; /* Increment the usage counter of the corresponding IFile. If this ** is the first use, set the file data and output debug info if @@ -257,6 +262,12 @@ void OpenMainFile (const char* Name) /* Allocate a new AFile structure for the file */ MainFile = NewAFile (IF, F); + /* Use this file with PP */ + SetPPIfStack (&MainFile->IfStack); + + /* Begin PP for this file */ + PreprocessBegin (); + /* Allocate the input line buffer */ Line = NewStrBuf (); @@ -274,6 +285,7 @@ void OpenIncludeFile (const char* Name, InputType IT) char* N; FILE* F; IFile* IF; + AFile* AF; /* Check for the maximum include nesting */ if (CollCount (&AFiles) > MAX_INC_NESTING) { @@ -311,12 +323,18 @@ void OpenIncludeFile (const char* Name, InputType IT) Print (stdout, 1, "Opened include file '%s'\n", IF->Name); /* Allocate a new AFile structure */ - (void) NewAFile (IF, F); + AF = NewAFile (IF, F); + + /* Use this file with PP */ + SetPPIfStack (&AF->IfStack); + + /* Begin PP for this file */ + PreprocessBegin (); } -static void CloseIncludeFile (void) +void CloseIncludeFile (void) /* Close an include file and switch to the higher level file. Set Input to ** NULL if this was the main file. */ @@ -329,14 +347,18 @@ static void CloseIncludeFile (void) /* Must have an input file when called */ PRECONDITION (AFileCount > 0); + /* End preprocessor in this file */ + PreprocessEnd (); + /* Get the current active input file */ - Input = (AFile*) CollLast (&AFiles); + Input = CollLast (&AFiles); /* Close the current input file (we're just reading so no error check) */ fclose (Input->F); /* Delete the last active file from the active file collection */ - CollDelete (&AFiles, AFileCount-1); + --AFileCount; + CollDelete (&AFiles, AFileCount); /* If we had added an extra search path for this AFile, remove it */ if (Input->SearchPath) { @@ -345,6 +367,12 @@ static void CloseIncludeFile (void) /* Delete the active file structure */ FreeAFile (Input); + + /* Use previous file with PP if it is not the main file */ + if (AFileCount > 0) { + Input = CollLast (&AFiles); + SetPPIfStack (&Input->IfStack); + } } @@ -436,47 +464,49 @@ StrBuf* InitLine (StrBuf* Buf) int NextLine (void) -/* Get a line from the current input. Returns 0 on end of file. */ +/* Get a line from the current input. Returns 0 on end of file with no new +** input bytes. +*/ { + int C; AFile* Input; /* Clear the current line */ ClearLine (); + SB_Clear (Line); - /* If there is no file open, bail out, otherwise get the current input file */ - if (CollCount (&AFiles) == 0) { + /* Must have an input file when called */ + if (CollCount(&AFiles) == 0) { return 0; } + + /* Get the current input file */ Input = CollLast (&AFiles); /* Read characters until we have one complete line */ while (1) { /* Read the next character */ - int C = fgetc (Input->F); + C = fgetc (Input->F); /* Check for EOF */ if (C == EOF) { - /* Accept files without a newline at the end */ - if (SB_NotEmpty (Line)) { + if (!Input->MissingNL || SB_NotEmpty (Line)) { + + /* Accept files without a newline at the end */ ++Input->Line; - break; - } - /* Leave the current file */ - CloseIncludeFile (); + /* Assume no new line */ + Input->MissingNL = 1; - /* If there is no file open, bail out, otherwise get the - ** previous input file and start over. - */ - if (CollCount (&AFiles) == 0) { - return 0; } - Input = CollLast (&AFiles); - continue; + break; } + /* Assume no new line */ + Input->MissingNL = 1; + /* Check for end of line */ if (C == '\n') { @@ -497,6 +527,7 @@ int NextLine (void) if (SB_LookAtLast (Line) == '\\') { Line->Buf[Line->Len-1] = '\n'; } else { + Input->MissingNL = 0; break; } @@ -517,6 +548,38 @@ int NextLine (void) /* Create line information for this line */ UpdateLineInfo (Input->Input, Input->Line, Line); + /* Done */ + return C != EOF || SB_NotEmpty (Line); +} + + + +int PreprocessNextLine (void) +/* Get a line from opened input files and do preprocess. Returns 0 on end of +** main file. +*/ +{ + while (NextLine() == 0) { + + /* If there is no input file open, bail out. Otherwise get the previous + ** input file and start over. + */ + if (CollCount (&AFiles) == 0) { + return 0; + } + + /* Leave the current file */ + CloseIncludeFile (); + } + + /* Do preprocess anyways */ + Preprocess (); + + /* Write it to the output file if in preprocess-only mode */ + if (PreprocessOnly) { + WriteOutput ("%.*s\n", (int) SB_GetLen (Line), SB_GetConstBuf (Line)); + } + /* Done */ return 1; } @@ -539,14 +602,8 @@ const char* GetCurrentFile (void) const AFile* AF = (const AFile*) CollAt (&AFiles, AFileCount-1); return AF->Input->Name; } else { - /* No open file. Use the main file if we have one. */ - unsigned IFileCount = CollCount (&IFiles); - if (IFileCount > 0) { - const IFile* IF = (const IFile*) CollAt (&IFiles, 0); - return IF->Name; - } else { - return "(outside file scope)"; - } + /* No open file */ + return "(outside file scope)"; } } diff --git a/src/cc65/input.h b/src/cc65/input.h index a643800ba..779217b9b 100644 --- a/src/cc65/input.h +++ b/src/cc65/input.h @@ -46,7 +46,7 @@ /*****************************************************************************/ -/* data */ +/* Data */ /*****************************************************************************/ @@ -84,6 +84,11 @@ void OpenMainFile (const char* Name); void OpenIncludeFile (const char* Name, InputType IT); /* Open an include file and insert it into the tables. */ +void CloseIncludeFile (void); +/* Close an include file and switch to the higher level file. Set Input to +** NULL if this was the main file. +*/ + void NextChar (void); /* Read the next character from the input stream and make CurC and NextC ** valid. If end of line is reached, both are set to NUL, no more lines @@ -99,7 +104,14 @@ StrBuf* InitLine (StrBuf* Buf); */ int NextLine (void); -/* Get a line from the current input. Returns 0 on end of file. */ +/* Get a line from the current input. Returns 0 on end of file with no new +** input bytes. +*/ + +int PreprocessNextLine (void); +/* Get a line from opened input files and do preprocess. Returns 0 on end of +** main file. +*/ const char* GetInputFile (const struct IFile* IF); /* Return a filename from an IFile struct */ diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 016abf11e..7b33d4b0f 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -71,13 +71,13 @@ static unsigned char Preprocessing = 0; /* Management data for #if */ -#define MAX_IFS 256 #define IFCOND_NONE 0x00U #define IFCOND_SKIP 0x01U #define IFCOND_ELSE 0x02U #define IFCOND_NEEDTERM 0x04U -static unsigned char IfStack[MAX_IFS]; -static int IfIndex = -1; + +/* Current PP if stack */ +static PPIfStack* PPStack; /* Buffer for macro expansion */ static StrBuf* MLine; @@ -1061,18 +1061,18 @@ static int PushIf (int Skip, int Invert, int Cond) /* Push a new if level onto the if stack */ { /* Check for an overflow of the if stack */ - if (IfIndex >= MAX_IFS-1) { + if (PPStack->Index >= MAX_PP_IFS-1) { PPError ("Too many nested #if clauses"); return 1; } /* Push the #if condition */ - ++IfIndex; + ++PPStack->Index; if (Skip) { - IfStack[IfIndex] = IFCOND_SKIP | IFCOND_NEEDTERM; + PPStack->Stack[PPStack->Index] = IFCOND_SKIP | IFCOND_NEEDTERM; return 1; } else { - IfStack[IfIndex] = IFCOND_NONE | IFCOND_NEEDTERM; + PPStack->Stack[PPStack->Index] = IFCOND_NONE | IFCOND_NEEDTERM; return (Invert ^ Cond); } } @@ -1337,17 +1337,17 @@ void Preprocess (void) break; case PP_ELIF: - if (IfIndex >= 0) { - if ((IfStack[IfIndex] & IFCOND_ELSE) == 0) { + if (PPStack->Index >= 0) { + if ((PPStack->Stack[PPStack->Index] & IFCOND_ELSE) == 0) { /* Handle as #else/#if combination */ - if ((IfStack[IfIndex] & IFCOND_SKIP) == 0) { + if ((PPStack->Stack[PPStack->Index] & IFCOND_SKIP) == 0) { Skip = !Skip; } - IfStack[IfIndex] |= IFCOND_ELSE; + PPStack->Stack[PPStack->Index] |= IFCOND_ELSE; Skip = DoIf (Skip); /* #elif doesn't need a terminator */ - IfStack[IfIndex] &= ~IFCOND_NEEDTERM; + PPStack->Stack[PPStack->Index] &= ~IFCOND_NEEDTERM; } else { PPError ("Duplicate #else/#elif"); } @@ -1357,12 +1357,12 @@ void Preprocess (void) break; case PP_ELSE: - if (IfIndex >= 0) { - if ((IfStack[IfIndex] & IFCOND_ELSE) == 0) { - if ((IfStack[IfIndex] & IFCOND_SKIP) == 0) { + if (PPStack->Index >= 0) { + if ((PPStack->Stack[PPStack->Index] & IFCOND_ELSE) == 0) { + if ((PPStack->Stack[PPStack->Index] & IFCOND_SKIP) == 0) { Skip = !Skip; } - IfStack[IfIndex] |= IFCOND_ELSE; + PPStack->Stack[PPStack->Index] |= IFCOND_ELSE; /* Check for extra tokens */ CheckExtraTokens ("else"); @@ -1375,19 +1375,20 @@ void Preprocess (void) break; case PP_ENDIF: - if (IfIndex >= 0) { + if (PPStack->Index >= 0) { /* Remove any clauses on top of stack that do not ** need a terminating #endif. */ - while (IfIndex >= 0 && (IfStack[IfIndex] & IFCOND_NEEDTERM) == 0) { - --IfIndex; + while (PPStack->Index >= 0 && + (PPStack->Stack[PPStack->Index] & IFCOND_NEEDTERM) == 0) { + --PPStack->Index; } /* Stack may not be empty here or something is wrong */ - CHECK (IfIndex >= 0); + CHECK (PPStack->Index >= 0); /* Remove the clause that needs a terminator */ - Skip = (IfStack[IfIndex--] & IFCOND_SKIP) != 0; + Skip = (PPStack->Stack[PPStack->Index--] & IFCOND_SKIP) != 0; /* Check for extra tokens */ CheckExtraTokens ("endif"); @@ -1464,9 +1465,6 @@ void Preprocess (void) } if (NextLine () == 0) { - if (IfIndex >= 0) { - PPError ("'#endif' expected"); - } return; } SkipWhitespace (0); @@ -1480,3 +1478,34 @@ Done: (int) SB_GetLen (Line), SB_GetConstBuf (Line)); } } + + + +void SetPPIfStack (PPIfStack* Stack) +/* Specify which PP #if stack to use */ +{ + PPStack = Stack; +} + + + +void PreprocessBegin (void) +/* Initialize preprocessor with current file */ +{ + /* Reset #if depth */ + PPStack->Index = -1; +} + + + +void PreprocessEnd (void) +/* Preprocessor done with current file */ +{ + /* Check for missing #endif */ + while (PPStack->Index >= 0) { + if ((PPStack->Stack[PPStack->Index] & IFCOND_NEEDTERM) != 0) { + PPError ("#endif expected"); + } + --PPStack->Index; + } +} diff --git a/src/cc65/preproc.h b/src/cc65/preproc.h index 34f62c114..67b371252 100644 --- a/src/cc65/preproc.h +++ b/src/cc65/preproc.h @@ -39,7 +39,25 @@ /*****************************************************************************/ -/* code */ +/* Data */ +/*****************************************************************************/ + + + +/* Maximum #if depth per file */ +#define MAX_PP_IFS 256 + +/* Data struct used for per-file-directive handling */ +typedef struct PPIfStack PPIfStack; +struct PPIfStack { + unsigned char Stack[MAX_PP_IFS]; + int Index; +}; + + + +/*****************************************************************************/ +/* Code */ /*****************************************************************************/ @@ -47,6 +65,15 @@ void Preprocess (void); /* Preprocess a line */ +void SetPPIfStack (PPIfStack* Stack); +/* Specify which PP #if stack to use */ + +void PreprocessBegin (void); +/* Initialize preprocessor with current file */ + +void PreprocessEnd (void); +/* Preprocessor done with current file */ + /* End of preproc.h */ diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 70203d027..98e9e1c06 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -188,10 +188,9 @@ static int SkipWhite (void) { while (1) { while (CurC == '\0') { - if (NextLine () == 0) { + if (PreprocessNextLine () == 0) { return 0; } - Preprocess (); } if (IsSpace (CurC)) { NextChar (); From 2c9c8ee19615fbae1463d9db3ccf0ce0972e76af Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 26 Jul 2022 21:10:31 +0800 Subject: [PATCH 1740/2710] Fixed extra "Macro argument count mismatch" message when a macro argument list is unterminated. --- src/cc65/preproc.c | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 7b33d4b0f..6de50d0b5 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -446,10 +446,14 @@ static int MacName (char* Ident) static void ReadMacroArgs (MacroExp* E) -/* Identify the arguments to a macro call */ +/* Identify the arguments to a macro call as-is */ { + int MissingParen = 0; unsigned Parens; /* Number of open parenthesis */ - StrBuf Arg = STATIC_STRBUF_INITIALIZER; + StrBuf Arg = AUTO_STRBUF_INITIALIZER; + + /* Eat the left paren */ + NextChar (); /* Read the actual macro arguments */ Parens = 0; @@ -512,7 +516,7 @@ static void ReadMacroArgs (MacroExp* E) } else if (CurC == '\0') { /* End of input inside macro argument list */ PPError ("Unterminated argument list invoking macro '%s'", E->M->Name); - + MissingParen = 1; ClearLine (); break; } else { @@ -522,6 +526,21 @@ static void ReadMacroArgs (MacroExp* E) } } + /* Compare formal and actual argument count */ + if (CollCount (&E->ActualArgs) != (unsigned) E->M->ArgCount) { + + if (!MissingParen) { + /* Argument count mismatch */ + PPError ("Macro argument count mismatch"); + } + + /* Be sure to make enough empty arguments available */ + SB_Clear (&Arg); + while (CollCount (&E->ActualArgs) < (unsigned) E->M->ArgCount) { + ME_AppendActual (E, &Arg); + } + } + /* Deallocate string buf resources */ SB_Done (&Arg); } @@ -666,29 +685,12 @@ static void MacroCall (StrBuf* Target, Macro* M) { MacroExp E; - /* Eat the left paren */ - NextChar (); - /* Initialize our MacroExp structure */ InitMacroExp (&E, M); - /* Read the actual macro arguments */ + /* Read the actual macro arguments (with the enclosing parentheses) */ ReadMacroArgs (&E); - /* Compare formal and actual argument count */ - if (CollCount (&E.ActualArgs) != (unsigned) M->ArgCount) { - - StrBuf Arg = STATIC_STRBUF_INITIALIZER; - - /* Argument count mismatch */ - PPError ("Macro argument count mismatch"); - - /* Be sure to make enough empty arguments available */ - while (CollCount (&E.ActualArgs) < (unsigned) M->ArgCount) { - ME_AppendActual (&E, &Arg); - } - } - /* Replace macro arguments handling the # and ## operators */ MacroArgSubst (&E); From 80fc8cd11ef913f8e51f16dc7526ac1ac4188fe3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 26 Jul 2022 21:10:36 +0800 Subject: [PATCH 1741/2710] Added preprocessor warning on missing terminating characters of character/string literals. --- src/cc65/preproc.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 6de50d0b5..4af37a4b5 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -399,6 +399,8 @@ static void CopyQuotedString (StrBuf* Target) if (CurC != '\0') { SB_AppendChar (Target, CurC); NextChar (); + } else { + PPWarning ("Missing terminating %c character", Quote); } } From 2f357ba9b24bee49b09e8c2dc9ae9adb363ac34b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 26 Jul 2022 21:10:38 +0800 Subject: [PATCH 1742/2710] Preprocessor directives can now appear in the argument list of function-like macro calls. #pragma PP-tokens can now be macro replaced. #include header names directly enclosed in <> are free of macro replacement. Preprocess-only mode (-E) now outputs with #line as source info. Moved testcases for #760 and #1357. Added testcase for #1643. --- src/cc65/compile.c | 6 + src/cc65/macrotab.c | 23 ++ src/cc65/macrotab.h | 6 + src/cc65/preproc.c | 498 +++++++++++++++++++++++++---------- src/cc65/preproc.h | 6 + test/{misc => val}/bug1357.c | 0 test/val/bug1643.c | 12 + test/val/bug1643.h | 13 + test/{misc => val}/bug760.c | 0 9 files changed, 420 insertions(+), 144 deletions(-) rename test/{misc => val}/bug1357.c (100%) create mode 100644 test/val/bug1643.c create mode 100644 test/val/bug1643.h rename test/{misc => val}/bug760.c (100%) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index f4fb16c37..4b3584147 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -425,6 +425,9 @@ void Compile (const char* FileName) /* Generate the code generator preamble */ g_preamble (); + /* Init preprocessor */ + InitPreprocess (); + /* Open the input file */ OpenMainFile (FileName); @@ -497,6 +500,9 @@ void Compile (const char* FileName) } + /* Done with preprocessor */ + DonePreprocess (); + if (Debug) { PrintMacroStats (stdout); } diff --git a/src/cc65/macrotab.c b/src/cc65/macrotab.c index c04024dc8..d835b7708 100644 --- a/src/cc65/macrotab.c +++ b/src/cc65/macrotab.c @@ -108,6 +108,29 @@ void FreeMacro (Macro* M) +Macro* CloneMacro (const Macro* M) +/* Clone a macro definition. The function is not insert the macro into the +** macro table, thus the cloned instance cannot be freed with UndefineMacro. +** Use FreeMacro for that. +*/ +{ + Macro* New = NewMacro (M->Name); + unsigned I; + + for (I = 0; I < CollCount (&M->FormalArgs); ++I) { + /* Copy the argument */ + const char* Arg = CollAtUnchecked (&M->FormalArgs, I); + CollAppend (&New->FormalArgs, xstrdup (Arg)); + } + New->ArgCount = M->ArgCount; + New->Variadic = M->Variadic; + SB_Copy (&New->Replacement, &M->Replacement); + + return New; +} + + + void DefineNumericMacro (const char* Name, long Val) /* Define a macro for a numeric constant */ { diff --git a/src/cc65/macrotab.h b/src/cc65/macrotab.h index c3ff20ceb..0f9bff01a 100644 --- a/src/cc65/macrotab.h +++ b/src/cc65/macrotab.h @@ -82,6 +82,12 @@ void FreeMacro (Macro* M); ** table, use UndefineMacro for that. */ +Macro* CloneMacro (const Macro* M); +/* Clone a macro definition. The function is not insert the macro into the +** macro table, thus the cloned instance cannot be freed with UndefineMacro. +** Use FreeMacro for that. +*/ + void DefineNumericMacro (const char* Name, long Val); /* Define a macro for a numeric constant */ diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 4af37a4b5..c06545e77 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -67,9 +67,6 @@ -/* Set when the preprocessor calls expr() recursively */ -static unsigned char Preprocessing = 0; - /* Management data for #if */ #define IFCOND_NONE 0x00U #define IFCOND_SKIP 0x01U @@ -79,8 +76,15 @@ static unsigned char Preprocessing = 0; /* Current PP if stack */ static PPIfStack* PPStack; -/* Buffer for macro expansion */ -static StrBuf* MLine; +/* Intermediate input buffers */ +static StrBuf* PLine; /* Buffer for macro expansion */ +static StrBuf* MLine; /* Buffer for macro expansion in #pragma */ +static StrBuf* OLine; /* Buffer for #pragma output */ + +/* Newlines to be added to preprocessed text */ +static int PendingNewLines; +static int FileChanged; +static int LeadingWhitespace; /* Structure used when expanding macros */ typedef struct MacroExp MacroExp; @@ -103,12 +107,12 @@ static void TranslationPhase3 (StrBuf* Source, StrBuf* Target); ** non-newline whitespace sequences. */ -static unsigned Pass1 (StrBuf* Source, StrBuf* Target); -/* Preprocessor pass 1. Remove whitespace. Handle old and new style comments -** and the "defined" operator. +static int ParseDirectives (void); +/* Handle directives. Return 1 if there are directives parsed, -1 if new lines +** are read, otherwise 0. */ -static void MacroReplacement (StrBuf* Source, StrBuf* Target); +static void MacroReplacement (StrBuf* Source, StrBuf* Target, int MultiLine); /* Perform macro replacement. */ @@ -256,6 +260,46 @@ static int ME_ArgIsVariadic (const MacroExp* E) +static void AddPreLine (StrBuf* Str) +/* Add newlines to the string buffer */ +{ + if (!PreprocessOnly) { + PendingNewLines = 0; + return; + } + + if (FileChanged || PendingNewLines > 4) { + /* Output #line directives as source info */ + StrBuf Comment = AUTO_STRBUF_INITIALIZER; + if (SB_NotEmpty (Str) && SB_LookAtLast (Str) != '\n') { + SB_AppendChar (Str, '\n'); + } + SB_Printf (&Comment, "#line %u \"%s\"\n", GetCurrentLine (), GetCurrentFile ()); + SB_Append (Str, &Comment); + } else { + /* Output new lines */ + while (PendingNewLines > 0) { + SB_AppendChar (Str, '\n'); + --PendingNewLines; + } + } + FileChanged = 0; + PendingNewLines = 0; +} + + + +static void AppendIndent (StrBuf* Str, int Count) +/* Add Count of spaces ' ' to the string buffer */ +{ + while (Count > 0) { + SB_AppendChar (Str, ' '); + --Count; + } +} + + + static void Stringize (StrBuf* Source, StrBuf* Target) /* Stringize the given string: Add double quotes at start and end and preceed ** each occurance of " and \ by a backslash. @@ -341,12 +385,15 @@ static void NewStyleComment (void) static int SkipWhitespace (int SkipLines) -/* Skip white space and comments in the input stream. Do also skip newlines if -** SkipLines is true. Return zero if nothing was skipped, otherwise return a -** value != zero. +/* Skip white space and comments in the input stream. If skipLines is true, +** also skip newlines and add that count to global PendingNewLines. Return 1 +** if the last skipped character was a white space other than a newline '\n', +** otherwise return -1 if there were any newline characters skipped, otherwise +** return 0 if nothing was skipped. */ { int Skipped = 0; + int NewLine = 0; while (1) { if (IsSpace (CurC)) { NextChar (); @@ -360,7 +407,9 @@ static int SkipWhitespace (int SkipLines) } else if (CurC == '\0' && SkipLines) { /* End of line, read next */ if (NextLine () != 0) { - Skipped = 1; + ++PendingNewLines; + NewLine = 1; + Skipped = 0; } else { /* End of input */ break; @@ -370,7 +419,36 @@ static int SkipWhitespace (int SkipLines) break; } } - return Skipped; + return Skipped != 0 ? Skipped : -(NewLine != 0); +} + + + +static void CopyHeaderNameToken (StrBuf* Target) +/* Copy a header name from the input to Target. */ +{ + /* Remember the quote character, copy it to the target buffer and skip it */ + char Quote = CurC == '"' ? '"' : '>'; + SB_AppendChar (Target, CurC); + NextChar (); + + /* Copy the characters inside the string */ + while (CurC != '\0' && CurC != Quote) { + /* Keep an escaped char */ + if (CurC == '\\') { + SB_AppendChar (Target, CurC); + NextChar (); + } + /* Copy the character */ + SB_AppendChar (Target, CurC); + NextChar (); + } + + /* If we had a terminating quote, copy it */ + if (CurC != '\0') { + SB_AppendChar (Target, CurC); + NextChar (); + } } @@ -447,7 +525,7 @@ static int MacName (char* Ident) -static void ReadMacroArgs (MacroExp* E) +static void ReadMacroArgs (MacroExp* E, int MultiLine) /* Identify the arguments to a macro call as-is */ { int MissingParen = 0; @@ -460,6 +538,30 @@ static void ReadMacroArgs (MacroExp* E) /* Read the actual macro arguments */ Parens = 0; while (1) { + /* Squeeze runs of blanks within an arg */ + int OldPendingNewLines = PendingNewLines; + int Skipped = SkipWhitespace (MultiLine); + if (MultiLine && CurC == '#') { + int Newlines = 0; + + SB_Cut (OLine, SB_GetLen (OLine) - LeadingWhitespace); + if (OldPendingNewLines == 0 && SB_NotEmpty (Line) && SB_LookAtLast (OLine) != '\n') { + OldPendingNewLines = 1; + } + while (CurC == '#') { + Newlines += PendingNewLines - OldPendingNewLines; + PendingNewLines = OldPendingNewLines; + OldPendingNewLines = 0; + Skipped = ParseDirectives () || Skipped; + Skipped = SkipWhitespace (MultiLine) || Skipped; + } + AppendIndent (OLine, LeadingWhitespace); + LeadingWhitespace = 0; + PendingNewLines += Newlines; + } + if (Skipped && SB_NotEmpty (&Arg)) { + SB_AppendChar (&Arg, ' '); + } if (CurC == '(') { /* Nested parenthesis */ @@ -510,11 +612,6 @@ static void ReadMacroArgs (MacroExp* E) NextChar (); SB_Clear (&Arg); } - } else if (SkipWhitespace (1)) { - /* Squeeze runs of blanks within an arg */ - if (SB_NotEmpty (&Arg)) { - SB_AppendChar (&Arg, ' '); - } } else if (CurC == '\0') { /* End of input inside macro argument list */ PPError ("Unterminated argument list invoking macro '%s'", E->M->Name); @@ -593,7 +690,7 @@ static void MacroArgSubst (MacroExp* E) ** of the actual. */ SB_Reset (Arg); - MacroReplacement (Arg, &E->Replacement); + MacroReplacement (Arg, &E->Replacement, 0); /* If we skipped whitespace before, re-add it now */ if (HaveSpace) { @@ -682,60 +779,53 @@ static void MacroArgSubst (MacroExp* E) -static void MacroCall (StrBuf* Target, Macro* M) -/* Process a function like macro */ -{ - MacroExp E; - - /* Initialize our MacroExp structure */ - InitMacroExp (&E, M); - - /* Read the actual macro arguments (with the enclosing parentheses) */ - ReadMacroArgs (&E); - - /* Replace macro arguments handling the # and ## operators */ - MacroArgSubst (&E); - - /* Do macro replacement on the macro that already has the parameters - ** substituted. - */ - M->Expanding = 1; - MacroReplacement (&E.Replacement, Target); - M->Expanding = 0; - - /* Free memory allocated for the macro expansion structure */ - DoneMacroExp (&E); -} - - - -static void ExpandMacro (StrBuf* Target, Macro* M) +static void ExpandMacro (StrBuf* Target, Macro* M, int MultiLine) /* Expand a macro into Target */ { + MacroExp E; + #if 0 static unsigned V = 0; printf ("Expanding %s(%u)\n", M->Name, ++V); #endif - /* Check if this is a function like macro */ - if (M->ArgCount >= 0) { + /* Initialize our MacroExp structure */ + InitMacroExp (&E, M); - int Whitespace = SkipWhitespace (1); - if (CurC != '(') { - /* Function like macro but no parameter list */ - SB_AppendStr (Target, M->Name); - if (Whitespace) { - SB_AppendChar (Target, ' '); - } - } else { - /* Function like macro */ - MacroCall (Target, M); + /* Check if this is a function like macro */ + if (E.M->ArgCount >= 0) { + + /* Since the macro could be undefined or redefined during its argument + ** parsing, we make a clone of the current one and stick to it. + */ + if (MultiLine) { + E.M = CloneMacro (E.M); } - } else { + /* Read the actual macro arguments (with the enclosing parentheses) */ + ReadMacroArgs (&E, MultiLine); - MacroExp E; - InitMacroExp (&E, M); + /* Replace macro arguments handling the # and ## operators */ + MacroArgSubst (&E); + + /* Do macro replacement on the macro that already has the parameters + ** substituted. + */ + if (MultiLine) { + /* Check if the macro was undefined or redefined */ + M = FindMacro (E.M->Name); + if (M == 0 || MacroCmp (E.M, M) != 0) { + /* Use the cloned macro */ + M = E.M; + } + } + + /* Forbide repeated expansion of the same macro in use */ + M->Expanding = 1; + MacroReplacement (&E.Replacement, Target, 0); + M->Expanding = 0; + + } else { /* Handle # and ## operators for object like macros */ MacroArgSubst (&E); @@ -744,16 +834,23 @@ static void ExpandMacro (StrBuf* Target, Macro* M) ** substituted. */ M->Expanding = 1; - MacroReplacement (&E.Replacement, Target); + MacroReplacement (&E.Replacement, Target, 0); M->Expanding = 0; - /* Free memory allocated for the macro expansion structure */ - DoneMacroExp (&E); - } + #if 0 - printf ("Done with %s(%u)\n", M->Name, V--); + printf ("Done with %s(%u)\n", E.M->Name, V--); #endif + + /* Free cloned macro */ + if (MultiLine && E.M->ArgCount >= 0) { + FreeMacro (E.M); + E.M = 0; + } + + /* Free memory allocated for the macro expansion structure */ + DoneMacroExp (&E); } @@ -935,20 +1032,25 @@ static void TranslationPhase3 (StrBuf* Source, StrBuf* Target) -static unsigned Pass1 (StrBuf* Source, StrBuf* Target) -/* Preprocessor pass 1. Remove whitespace, old and new style comments. Handle -** the "defined" operator. +static void ProcessSingleLine (StrBuf* Source, + StrBuf* Target, + int HandleDefined, + int HandleHeader) +/* Process a single line. Remove whitespace, old and new style comments. +** Recognize and handle the "defined" operator if HandleDefined is true. +** Recognize and handle header name tokens if HandleHeader is true. */ { - unsigned IdentCount; + int OldIndex = SB_GetIndex (Source); ident Ident; int HaveParen; - /* Switch to the new input source */ + /* Operate on the new input source */ StrBuf* OldSource = InitLine (Source); + SkipWhitespace (0); + /* Loop removing ws and comments */ - IdentCount = 0; while (CurC != '\0') { if (SkipWhitespace (0)) { /* Squeeze runs of blanks */ @@ -956,7 +1058,7 @@ static unsigned Pass1 (StrBuf* Source, StrBuf* Target) SB_AppendChar (Target, ' '); } } else if (IsSym (Ident)) { - if (Preprocessing && strcmp (Ident, "defined") == 0) { + if (HandleDefined && strcmp (Ident, "defined") == 0) { /* Handle the "defined" operator */ SkipWhitespace (0); HaveParen = 0; @@ -980,9 +1082,32 @@ static unsigned Pass1 (StrBuf* Source, StrBuf* Target) SB_AppendChar (Target, '0'); } } else { - ++IdentCount; - SB_AppendStr (Target, Ident); + Macro* M = FindMacro (Ident); + if (M != 0 && !M->Expanding) { + /* Check if this is a function-like macro */ + if (M->ArgCount >= 0) { + int Whitespace = SkipWhitespace (0); + if (CurC != '(') { + /* Function-like macro without an argument list is not replaced */ + SB_AppendStr (Target, M->Name); + if (Whitespace) { + SB_AppendChar (Target, ' '); + } + } else { + /* Function-like macro */ + ExpandMacro (Target, M, 0); + } + } else { + /* Object-like macro */ + ExpandMacro (Target, M, 0); + } + } else { + /* An identifier, keep it */ + SB_AppendStr (Target, Ident); + } } + } else if (HandleHeader && (CurC == '<' || CurC == '\"')) { + CopyHeaderNameToken (Target); } else if (IsQuote (CurC)) { CopyQuotedString (Target); } else { @@ -994,13 +1119,13 @@ static unsigned Pass1 (StrBuf* Source, StrBuf* Target) /* Switch back to the old source */ InitLine (OldSource); - /* Return the number of identifiers found in the line */ - return IdentCount; + /* Restore the source input index */ + SB_SetIndex (Source, OldIndex); } -static void MacroReplacement (StrBuf* Source, StrBuf* Target) +static void MacroReplacement (StrBuf* Source, StrBuf* Target, int MultiLine) /* Perform macro replacement. */ { ident Ident; @@ -1015,22 +1140,54 @@ static void MacroReplacement (StrBuf* Source, StrBuf* Target) if (IsSym (Ident)) { /* Check if it's a macro */ if ((M = FindMacro (Ident)) != 0 && !M->Expanding) { - /* It's a macro, expand it */ - ExpandMacro (Target, M); + /* Check if this is a function-like macro */ + if (M->ArgCount >= 0) { + int Whitespace = SkipWhitespace (MultiLine); + if (CurC != '(') { + /* Function-like macro without an argument list is not replaced */ + SB_AppendStr (Target, M->Name); + if (Whitespace > 0) { + SB_AppendChar (Target, ' '); + } + if (CurC == '#') { + if (OLine == 0) { + OLine = Target; + ParseDirectives (); + OLine = 0; + } else { + ParseDirectives (); + } + } + /* Add the source info to preprocessor output if needed */ + AddPreLine (Target); + } else { + /* Function-like macro */ + if (OLine == 0) { + OLine = Target; + ExpandMacro (Target, M, MultiLine); + OLine = 0; + } else { + ExpandMacro (Target, M, MultiLine); + } + } + } else { + /* Object-like macro */ + ExpandMacro (Target, M, 0); + } } else { /* An identifier, keep it */ SB_AppendStr (Target, Ident); } } else if (IsQuote (CurC)) { CopyQuotedString (Target); - } else if (IsSpace (CurC)) { - if (!IsSpace (SB_LookAtLast (Target))) { - SB_AppendChar (Target, CurC); - } - NextChar (); } else { - SB_AppendChar (Target, CurC); - NextChar (); + int Whitespace = SkipWhitespace (0); + if (Whitespace) { + SB_AppendChar (Target, ' '); + } else { + SB_AppendChar (Target, CurC); + NextChar (); + } } } @@ -1040,27 +1197,6 @@ static void MacroReplacement (StrBuf* Source, StrBuf* Target) -static void PreprocessLine (void) -/* Translate one line with defined macros replaced */ -{ - /* Trim whitespace and remove comments. The function returns the number of - ** identifiers found. If there were any, we will have to check for macros. - */ - SB_Clear (MLine); - if (Pass1 (Line, MLine) > 0) { - MLine = InitLine (MLine); - SB_Reset (Line); - SB_Clear (MLine); - MacroReplacement (Line, MLine); - } - - /* Read from the new line */ - SB_Reset (MLine); - MLine = InitLine (MLine); -} - - - static int PushIf (int Skip, int Invert, int Cond) /* Push a new if level onto the if stack */ { @@ -1108,10 +1244,11 @@ static int DoIf (int Skip) PPExpr Expr = AUTO_PPEXPR_INITIALIZER; if (!Skip) { + /* We're about to use a dedicated expression parser to evaluate the #if ** expression. Save the current tokens to come back here later. */ - Token SavedCurTok = CurTok; + Token SavedCurTok = CurTok; Token SavedNextTok = NextTok; /* Make sure the line infos for the tokens won't get removed */ @@ -1122,11 +1259,13 @@ static int DoIf (int Skip) UseLineInfo (SavedNextTok.LI); } - /* Switch into special preprocessing mode */ - Preprocessing = 1; + /* Macro-replace a single line with support for the "defined" operator */ + SB_Clear (MLine); + ProcessSingleLine (Line, MLine, 1, 0); - /* Expand macros in this line */ - PreprocessLine (); + /* Read from the processed line */ + SB_Reset (MLine); + MLine = InitLine (MLine); /* Add two semicolons as sentinels to the line, so the following ** expression evaluation will eat these two tokens but nothing from @@ -1142,8 +1281,8 @@ static int DoIf (int Skip) /* Call the expression parser */ ParsePPExpr (&Expr); - /* End preprocessing mode */ - Preprocessing = 0; + /* Restore input source */ + MLine = InitLine (MLine); /* Reset the old tokens */ CurTok = SavedCurTok; @@ -1182,14 +1321,15 @@ static void DoInclude (void) { char RTerm; InputType IT; - StrBuf Filename = STATIC_STRBUF_INITIALIZER; + StrBuf Filename = AUTO_STRBUF_INITIALIZER; + /* Macro-replace a single line with special support for <filename> */ + SB_Clear (MLine); + ProcessSingleLine (Line, MLine, 0, 1); - /* Preprocess the remainder of the line */ - PreprocessLine (); - - /* Skip blanks */ - SkipWhitespace (0); + /* Read from the processed line */ + SB_Reset (MLine); + MLine = InitLine (MLine); /* Get the next char and check for a valid file name terminator. Setup ** the include directory spec (SYS/USR) by looking at the terminator. @@ -1236,6 +1376,9 @@ Done: /* Free the allocated filename data */ SB_Done (&Filename); + /* Restore input source */ + MLine = InitLine (MLine); + /* Clear the remaining line so the next input will come from the new ** file (if open) */ @@ -1249,19 +1392,30 @@ static void DoPragma (void) ** the _Pragma() compiler operator. */ { - /* Copy the remainder of the line into MLine removing comments and ws */ + StrBuf* PragmaLine = OLine; + + /* Macro-replace a single line */ SB_Clear (MLine); - Pass1 (Line, MLine); + ProcessSingleLine (Line, MLine, 0, 0); /* Convert the directive into the operator */ - SB_CopyStr (Line, "_Pragma ("); - SB_Reset (MLine); - Stringize (MLine, Line); - SB_AppendChar (Line, ')'); + if (OLine == 0) { + SB_Clear (Line); + PragmaLine = Line; + } - /* Initialize reading from line */ - SB_Reset (Line); - InitLine (Line); + /* Add the source info to preprocessor output if needed */ + AddPreLine (PragmaLine); + + /* Convert #pragma to _Pragma () */ + SB_AppendStr (PragmaLine, "_Pragma ("); + SB_Reset (MLine); + Stringize (MLine, PragmaLine); + SB_AppendChar (PragmaLine, ')'); + SB_AppendChar (PragmaLine, '\n'); + + /* End this line */ + SB_SetIndex (PragmaLine, SB_GetLen (PragmaLine)); } @@ -1300,17 +1454,13 @@ static void DoWarning (void) -void Preprocess (void) -/* Preprocess a line */ +static int ParseDirectives (void) +/* Handle directives. Return howmany newlines are parsed. */ { + int NewLines = 0; int Skip; ident Directive; - /* Create the output buffer if we don't already have one */ - if (MLine == 0) { - MLine = NewStrBuf (); - } - /* Skip white space at the beginning of the line */ SkipWhitespace (0); @@ -1435,7 +1585,7 @@ void Preprocess (void) case PP_PRAGMA: if (!Skip) { DoPragma (); - goto Done; + --NewLines; } break; @@ -1469,14 +1619,48 @@ void Preprocess (void) } if (NextLine () == 0) { - return; + break; } + ++NewLines; SkipWhitespace (0); } - PreprocessLine (); + PendingNewLines += NewLines; + return NewLines; +} + + + +void Preprocess (void) +/* Preprocess lines count of which is affected by directives */ +{ + SB_Clear (PLine); + + /* Add the source info to preprocessor output if needed */ + AddPreLine (PLine); + + /* Parse any directives */ + OLine = PLine; + ParseDirectives (); + OLine = 0; + + /* Add the source info to preprocessor output if needed */ + AddPreLine (PLine); + + /* Add leading whitespace to prettify preprocessor output */ + LeadingWhitespace = SB_GetIndex (Line); + AppendIndent (PLine, LeadingWhitespace); + + /* Expand macros if any */ + MacroReplacement (Line, PLine, 1); + + /* Add the source info to preprocessor output if needed */ + AddPreLine (PLine); + + /* Read from the new line */ + SB_Reset (PLine); + PLine = InitLine (PLine); -Done: if (Verbosity > 1 && SB_NotEmpty (Line)) { printf ("%s:%u: %.*s\n", GetCurrentFile (), GetCurrentLine (), (int) SB_GetLen (Line), SB_GetConstBuf (Line)); @@ -1485,6 +1669,26 @@ Done: +void InitPreprocess (void) +/* Init preprocessor */ +{ + /* Create the output buffers */ + MLine = NewStrBuf (); + PLine = NewStrBuf (); +} + + + +void DonePreprocess (void) +/* Done with preprocessor */ +{ + /* Done with the output buffers */ + SB_Done (MLine); + SB_Done (PLine); +} + + + void SetPPIfStack (PPIfStack* Stack) /* Specify which PP #if stack to use */ { @@ -1498,6 +1702,9 @@ void PreprocessBegin (void) { /* Reset #if depth */ PPStack->Index = -1; + + /* Remember to update source file location in preprocess-only mode */ + FileChanged = 1; } @@ -1512,4 +1719,7 @@ void PreprocessEnd (void) } --PPStack->Index; } + + /* Remember to update source file location in preprocess-only mode */ + FileChanged = 1; } diff --git a/src/cc65/preproc.h b/src/cc65/preproc.h index 67b371252..f543b05b5 100644 --- a/src/cc65/preproc.h +++ b/src/cc65/preproc.h @@ -74,6 +74,12 @@ void PreprocessBegin (void); void PreprocessEnd (void); /* Preprocessor done with current file */ +void InitPreprocess (void); +/* Init preprocessor */ + +void DonePreprocess (void); +/* Done with preprocessor */ + /* End of preproc.h */ diff --git a/test/misc/bug1357.c b/test/val/bug1357.c similarity index 100% rename from test/misc/bug1357.c rename to test/val/bug1357.c diff --git a/test/val/bug1643.c b/test/val/bug1643.c new file mode 100644 index 000000000..eba733511 --- /dev/null +++ b/test/val/bug1643.c @@ -0,0 +1,12 @@ +/* bug #1643, macro expansion in #include */ + +#define MKSTR(a) MKSTR_IMPL(a) +#define MKSTR_IMPL(a) #a +#define BUG1643_H bug1643.h + +#include MKSTR(BUG1643_H) + +int main(void) +{ + return BUG1643_RESULT; +} diff --git a/test/val/bug1643.h b/test/val/bug1643.h new file mode 100644 index 000000000..fe0423688 --- /dev/null +++ b/test/val/bug1643.h @@ -0,0 +1,13 @@ +/* bug #1643, macro expansion in #include */ + +#define STDIO_H <stdio.h> +#include STDIO_H + +#ifdef string +#undef string +#endif + +#define string 0!%^&*/_= +#include <string.h> + +#define BUG1643_RESULT 0 diff --git a/test/misc/bug760.c b/test/val/bug760.c similarity index 100% rename from test/misc/bug760.c rename to test/val/bug760.c From f8d08b1e1a13bdbdd96e667ab5c5650b03c97a6f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 26 Jul 2022 21:40:19 +0800 Subject: [PATCH 1743/2710] More post-C99 predefined macros. --- src/cc65/compile.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 4b3584147..78d0817e3 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -407,6 +407,14 @@ void Compile (const char* FileName) /* DefineNumericMacro ("__STDC__", 1); <- not now */ DefineNumericMacro ("__STDC_HOSTED__", 1); + /* Stuff unsupported */ + if (IS_Get (&Standard) > STD_C99) { + DefineNumericMacro ("__STDC_NO_ATOMICS__", 1); + DefineNumericMacro ("__STDC_NO_COMPLEX__", 1); + DefineNumericMacro ("__STDC_NO_THREADS__", 1); + DefineNumericMacro ("__STDC_NO_VLA__", 1); + } + /* Create the base lexical level */ EnterGlobalLevel (); From 5164b88a2750f2f757d6836141e41a89e6a36bff Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Tue, 26 Jul 2022 17:21:33 +0200 Subject: [PATCH 1744/2710] test was moved to test/val --- test/todo/bug1373.c | 47 --------------------------------------------- 1 file changed, 47 deletions(-) delete mode 100644 test/todo/bug1373.c diff --git a/test/todo/bug1373.c b/test/todo/bug1373.c deleted file mode 100644 index 29eaaa56f..000000000 --- a/test/todo/bug1373.c +++ /dev/null @@ -1,47 +0,0 @@ - -/* #1373 - #pragma charmap works in unexpected ways */ - -#include <stdio.h> -#include <string.h> - -char res0[10]; -char res1[10]; -char res2[10]; -char res3[10]; -char res4[10]; - -int err = 0; - -#pragma charmap(0x61, 0x44) -#define STRING_A "abAB" - -extern char mappedA[5]; - -#pragma charmap(0x61, 0x61) -char notmappedA[5] = "abAB"; - -#pragma charmap(0x61, 0x42) -int main(void) -{ - char mappedB[5] = STRING_A; - sprintf(res0, "abAB"); /* expected: BbAB */ - -#pragma charmap(0x61, 0x61) - sprintf(res1, mappedA); /* expected: CbAB */ - sprintf(res2, STRING_A); /* expected: abAB */ - sprintf(res3, mappedB); /* expected: BBaB */ - -#pragma charmap(0x61, 0x43) - sprintf(res4, notmappedA); /* expected: abAB */ - -#pragma charmap(0x61, 0x61) - puts(res0); if (strcmp(res0, "BbAB") != 0) { puts("expected: BbAB"); err++; } - puts(res1); if (strcmp(res1, "CbAB") != 0) { puts("expected: CbAB"); err++; } - puts(res2); if (strcmp(res2, "abAB") != 0) { puts("expected: abAB"); err++; } - puts(res3); if (strcmp(res3, "BBaB") != 0) { puts("expected: BBaB"); err++; } - puts(res4); if (strcmp(res4, "abAB") != 0) { puts("expected: abAB"); err++; } - - return err; -} - -char mappedA[5] = "abAB"; From b3015ef731a4b2e1890fa21fbebded3f9abe8d89 Mon Sep 17 00:00:00 2001 From: IrgendwerA8 <c.krueger.b@web.de> Date: Wed, 27 Jul 2022 13:54:00 +0200 Subject: [PATCH 1745/2710] Updated documentation while char-mapping is fixed. --- doc/atari.sgml | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/doc/atari.sgml b/doc/atari.sgml index 170ffd5fb..2e2db0402 100644 --- a/doc/atari.sgml +++ b/doc/atari.sgml @@ -442,19 +442,7 @@ package delivers the same feature.</em> You can switch back to the ATASCII mapping by including "<tt/atari_atascii_charmap.h/". -A final note: Since cc65 has currently some difficulties with string merging -under different mappings, defining remapped strings works only flawlessly -with static array initialization: - -<tscreen><verb> -#include <atari_screen_charmap.h> -char pcScreenMappingString[] = "Hello Atari!"; - -#include <atari_atascii_charmap.h> -char pcAtasciiMappingString[] = "Hello Atari!"; -</verb></tscreen> - -delivers correct results, while +Example: <tscreen><verb> #include <atari_screen_charmap.h> @@ -464,8 +452,6 @@ char* pcScreenMappingString = "Hello Atari!"; char* pcAtasciiMappingString = "Hello Atari!"; </verb></tscreen> -does not. - <sect1>Keyboard codes<p> For direct keyboard scanning in conjunction with e.g. the OS location "CH" (764/$2FC), From 15756cc73030e703f0ac03b7909110ed2267fed0 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Thu, 28 Jul 2022 00:29:05 +0200 Subject: [PATCH 1746/2710] Update Contributing.md --- Contributing.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Contributing.md b/Contributing.md index 5861a9c2e..71d7dc3a2 100644 --- a/Contributing.md +++ b/Contributing.md @@ -24,6 +24,10 @@ This is an ongoing controversial topic - everyone knows that. However, the follo The (bash) scripts used to check the above rules can be found in ```.github/check```. You can also run all checks using ```make check```. +### identifiers and symbol names + +* any symbols that are exported from source files and/or appear in header files should not be in the "_symbol" form in C, or "__symbol" form in assembly. This way we evade the problem that "_symbol" may or may not be reserved by that standard. + ### misc * 80 characters is the desired maximum width of files. But, it isn't a "strong" rule; sometimes, you will want to type longer lines, in order to keep the parts of expressions or comments together on the same line. From fb8de287bec0aa71b9b6714a73e15c829ad74106 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 28 Jul 2022 01:50:54 +0200 Subject: [PATCH 1747/2710] test related to pr #1800 --- test/val/pr1800.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 test/val/pr1800.c diff --git a/test/val/pr1800.c b/test/val/pr1800.c new file mode 100644 index 000000000..cc8a60eea --- /dev/null +++ b/test/val/pr1800.c @@ -0,0 +1,73 @@ + +/* Compiler outputs errors for valid code #1788 */ +/* (rest tested later below) */ +# /* Comment */ + +/* Unexpected "Error: Illegal indirection" under #if 0 #1769 */ +#if 0 +#if x ** 1 +#endif +#endif + +/* Unexpected "Error: Division by zero" #1768 */ +#if 1 || (8 / 0) +#endif + +/* Preprocessor fixes #1800 */ + +#/* +comment*/define __ATARI__ 1 +# /*comment*/ + +#/* +*/define /**/M(/**/x, /* +*/y)/* +*/(x+/* +*/y) + +#if M(-1, 1) != 0 +#error M(x,y) error! +#endif + +#warning/**//**/asd/**/) fgh +#warning + +#if 'z' - 'a' != 25 +#if x ** 1 +#endif +#endif + +#if -1 < 0xF0000000 * 0 +/* Note: this doesn't fail with cc65 as 0xF0000000 is an unsigned integer for cc65 */ +#error "Fails with most non-cc65 compilers" +#endif + +#if !+-0, (1U >> -31), x != (2L << -1) +#warning "/**/no problem" +#if 65536L * 32768L > -1U && 1 % 0 +#error "error2" +#endif +#if -1 > 0U ? y != y : 1/0 +#error "??" +#if d<(sasa +#endif +#endif +#endif + +#if !defined(__ATARI__) +#error "__ATARI__" is undefined?! +#endif + +#if !__ATARI__ +#error "__ATARI__" == 0?! +#endif + +#ifndef __ATARI__ +#error __ATARI__ is undefined?! +#endif + +int main(void) +{ + /* nope */ + return 0; +} From 7a93d3c707d75268ac71feb1caa5fbdd9351d180 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Thu, 4 Aug 2022 00:25:04 +0200 Subject: [PATCH 1748/2710] Shorter isascii --- libsrc/common/isascii.s | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libsrc/common/isascii.s b/libsrc/common/isascii.s index 70d2f72a3..9a905d1db 100644 --- a/libsrc/common/isascii.s +++ b/libsrc/common/isascii.s @@ -11,6 +11,7 @@ ; .export _isascii + .import return0 _isascii: asl a ; high-bit to carry @@ -19,6 +20,4 @@ _isascii: adc #$FF ; calculate return value based on carry rts -@L1: lda #$00 ; return false - tax - rts +@L1: jmp return0 ; return false From 251e984ba88ca9afe62a2b22d789a453d2e6f2cf Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 5 Aug 2022 14:03:51 +0800 Subject: [PATCH 1749/2710] Fixed error recovery with preprocessing directives failures. --- src/cc65/ppexpr.c | 40 +++++++++++++++++++++++++++++++++------- src/cc65/ppexpr.h | 2 +- src/cc65/preproc.c | 2 +- src/cc65/scanner.c | 4 +++- src/cc65/scanner.h | 1 + 5 files changed, 39 insertions(+), 10 deletions(-) diff --git a/src/cc65/ppexpr.c b/src/cc65/ppexpr.c index da25e12f1..af2c1de3b 100644 --- a/src/cc65/ppexpr.c +++ b/src/cc65/ppexpr.c @@ -90,12 +90,14 @@ static void PPExprInit (PPExpr* Expr) static void PPErrorSkipLine (void) -/* Skip the remain tokens till the end of the line and set the expression -** parser error flag. +/* Set the expression parser error flag, skip the remain tokens till the end +** of the line, clear the current and the next tokens. */ { - SkipTokens (0, 0); PPEvaluationFailed = 1; + SkipTokens (0, 0); + CurTok.Tok = TOK_CEOF; + NextTok.Tok = TOK_CEOF; } @@ -148,6 +150,10 @@ static void PPhiePrimary (PPExpr* Expr) Expr->IVal = 0; break; + case TOK_CEOF: + /* Error recovery */ + break; + default: /* Illegal expression in PP mode */ PPError ("Preprocessor expression expected"); @@ -252,6 +258,10 @@ void PPhie10 (PPExpr* Expr) Expr->IVal = !Expr->IVal; break; + case TOK_CEOF: + /* Error recovery */ + break; + case TOK_STAR: case TOK_AND: case TOK_SIZEOF: @@ -286,7 +296,7 @@ static void PPhie_internal (const token_t* Ops, /* List of generators */ /* Get the right hand side */ hienext (&Rhs); - if (PPEvaluationEnabled) { + if (PPEvaluationEnabled && !PPEvaluationFailed) { /* If either side is unsigned, the result is unsigned */ Expr->Flags |= Rhs.Flags & PPEXPR_UNSIGNED; @@ -407,7 +417,7 @@ static void PPhie_compare (const token_t* Ops, /* List of generators */ /* Get the right hand side */ hienext (&Rhs); - if (PPEvaluationEnabled) { + if (PPEvaluationEnabled && !PPEvaluationFailed) { /* If either side is unsigned, the comparison is unsigned */ Expr->Flags |= Rhs.Flags & PPEXPR_UNSIGNED; @@ -501,7 +511,7 @@ static void PPhie7 (PPExpr* Expr) PPhie8 (&Rhs); /* Evaluate */ - if (PPEvaluationEnabled) { + if (PPEvaluationEnabled && !PPEvaluationFailed) { /* To shift by a negative value is equivalent to shift to the ** opposite direction. */ @@ -761,46 +771,57 @@ static void PPhie1 (PPExpr* Expr) case TOK_ASSIGN: PPError ("Token \"=\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); break; case TOK_PLUS_ASSIGN: PPError ("Token \"+=\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); break; case TOK_MINUS_ASSIGN: PPError ("Token \"-=\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); break; case TOK_MUL_ASSIGN: PPError ("Token \"*=\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); break; case TOK_DIV_ASSIGN: PPError ("Token \"/=\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); break; case TOK_MOD_ASSIGN: PPError ("Token \"%%=\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); break; case TOK_SHL_ASSIGN: PPError ("Token \"<<=\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); break; case TOK_SHR_ASSIGN: PPError ("Token \">>=\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); break; case TOK_AND_ASSIGN: PPError ("Token \"&=\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); break; case TOK_OR_ASSIGN: PPError ("Token \"|=\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); break; case TOK_XOR_ASSIGN: PPError ("Token \"^=\" is not valid in preprocessor expressions"); + PPErrorSkipLine (); break; default: @@ -827,12 +848,13 @@ static void PPhie0 (PPExpr* Expr) -void ParsePPExpr (PPExpr* Expr) +void ParsePPExprInLine (PPExpr* Expr) /* Parse a line for PP expression */ { /* Initialize the parser status */ PPEvaluationFailed = 0; PPEvaluationEnabled = 1; + NextLineDisabled = 1; /* Parse */ PPExprInit (Expr); @@ -841,5 +863,9 @@ void ParsePPExpr (PPExpr* Expr) /* If the evaluation fails, the result is always zero */ if (PPEvaluationFailed) { Expr->IVal = 0; + PPEvaluationFailed = 0; } + + /* Restore parser status */ + NextLineDisabled = 0; } diff --git a/src/cc65/ppexpr.h b/src/cc65/ppexpr.h index 683c6c49d..5e9968a2b 100644 --- a/src/cc65/ppexpr.h +++ b/src/cc65/ppexpr.h @@ -66,7 +66,7 @@ struct PPExpr -void ParsePPExpr (PPExpr* Expr); +void ParsePPExprInLine (PPExpr* Expr); /* Parse a line for PP expression */ diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index c06545e77..4cbef33f3 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1279,7 +1279,7 @@ static int DoIf (int Skip) NextToken (); /* Call the expression parser */ - ParsePPExpr (&Expr); + ParsePPExprInLine (&Expr); /* Restore input source */ MLine = InitLine (MLine); diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 98e9e1c06..c7e9bb6c2 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -69,6 +69,7 @@ Token CurTok; /* The current token */ Token NextTok; /* The next token */ +int NextLineDisabled; /* Disabled to read next line */ @@ -188,7 +189,8 @@ static int SkipWhite (void) { while (1) { while (CurC == '\0') { - if (PreprocessNextLine () == 0) { + /* If reading next line fails or is forbidden, bail out */ + if (NextLineDisabled || PreprocessNextLine () == 0) { return 0; } } diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h index e6a362bf3..cd34cbbe8 100644 --- a/src/cc65/scanner.h +++ b/src/cc65/scanner.h @@ -210,6 +210,7 @@ struct Token { extern Token CurTok; /* The current token */ extern Token NextTok; /* The next token */ +extern int NextLineDisabled; /* Disabled to read next line */ From 78870219a4f10bb0438d3b59d2efb674b8937fbf Mon Sep 17 00:00:00 2001 From: ZeroByteOrg <thatguy@zerobyte.org> Date: Fri, 5 Aug 2022 17:44:18 -0500 Subject: [PATCH 1750/2710] CX16 waitvsync uses Kernal API to retreive jiffies --- libsrc/cx16/waitvsync.s | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/libsrc/cx16/waitvsync.s b/libsrc/cx16/waitvsync.s index dc0509223..9cd1824cf 100644 --- a/libsrc/cx16/waitvsync.s +++ b/libsrc/cx16/waitvsync.s @@ -5,17 +5,20 @@ ; /* Wait for the start of the next video field. */ ; ; VERA's vertical sync causes IRQs which increment the jiffy timer. +; +; Updated by ZeroByteOrg to use Kernal API RDTIM to retreive the TIMER variable ; .export _waitvsync - .include "cx16.inc" - -_waitvsync: - ldx RAM_BANK ; (TIMER is in RAM bank 0) - stz RAM_BANK - lda TIMER + 2 -: cmp TIMER + 2 - beq :- ; Wait for next jiffy - stx RAM_BANK - rts +.proc _waitvsync: near + RDTIM = $FFDE ; Kernal API for reading the jiffy timer + jsr RDTIM + sta lastjiffy +keep_waiting: + jsr RDTIM + cmp #$FF ; self-mod the value returned by RDTIM to save memory + lastjiffy=(*-1) + beq keep_waiting + rts +.endproc From 0a051a4deebe70ec92d50ffa1553a09ae49f3512 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 6 Aug 2022 16:56:28 +0800 Subject: [PATCH 1751/2710] Unsupported #pragma within argument lists of function-like macro invocation. --- src/cc65/preproc.c | 97 ++++++++++++++++++++-------------------------- 1 file changed, 42 insertions(+), 55 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 4cbef33f3..d33bef34c 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -84,7 +84,6 @@ static StrBuf* OLine; /* Buffer for #pragma output */ /* Newlines to be added to preprocessed text */ static int PendingNewLines; static int FileChanged; -static int LeadingWhitespace; /* Structure used when expanding macros */ typedef struct MacroExp MacroExp; @@ -107,7 +106,7 @@ static void TranslationPhase3 (StrBuf* Source, StrBuf* Target); ** non-newline whitespace sequences. */ -static int ParseDirectives (void); +static int ParseDirectives (int InArgList); /* Handle directives. Return 1 if there are directives parsed, -1 if new lines ** are read, otherwise 0. */ @@ -544,19 +543,13 @@ static void ReadMacroArgs (MacroExp* E, int MultiLine) if (MultiLine && CurC == '#') { int Newlines = 0; - SB_Cut (OLine, SB_GetLen (OLine) - LeadingWhitespace); - if (OldPendingNewLines == 0 && SB_NotEmpty (Line) && SB_LookAtLast (OLine) != '\n') { - OldPendingNewLines = 1; - } while (CurC == '#') { Newlines += PendingNewLines - OldPendingNewLines; PendingNewLines = OldPendingNewLines; OldPendingNewLines = 0; - Skipped = ParseDirectives () || Skipped; + Skipped = ParseDirectives (1) || Skipped; Skipped = SkipWhitespace (MultiLine) || Skipped; } - AppendIndent (OLine, LeadingWhitespace); - LeadingWhitespace = 0; PendingNewLines += Newlines; } if (Skipped && SB_NotEmpty (&Arg)) { @@ -1152,10 +1145,10 @@ static void MacroReplacement (StrBuf* Source, StrBuf* Target, int MultiLine) if (CurC == '#') { if (OLine == 0) { OLine = Target; - ParseDirectives (); + ParseDirectives (0); OLine = 0; } else { - ParseDirectives (); + ParseDirectives (0); } } /* Add the source info to preprocessor output if needed */ @@ -1394,25 +1387,20 @@ static void DoPragma (void) { StrBuf* PragmaLine = OLine; - /* Macro-replace a single line */ - SB_Clear (MLine); - ProcessSingleLine (Line, MLine, 0, 0); - - /* Convert the directive into the operator */ - if (OLine == 0) { - SB_Clear (Line); - PragmaLine = Line; - } + PRECONDITION (PragmaLine != 0); /* Add the source info to preprocessor output if needed */ AddPreLine (PragmaLine); + /* Macro-replace a single line */ + SB_Clear (MLine); + ProcessSingleLine (Line, MLine, 0, 0); + /* Convert #pragma to _Pragma () */ SB_AppendStr (PragmaLine, "_Pragma ("); SB_Reset (MLine); Stringize (MLine, PragmaLine); SB_AppendChar (PragmaLine, ')'); - SB_AppendChar (PragmaLine, '\n'); /* End this line */ SB_SetIndex (PragmaLine, SB_GetLen (PragmaLine)); @@ -1454,19 +1442,17 @@ static void DoWarning (void) -static int ParseDirectives (void) -/* Handle directives. Return howmany newlines are parsed. */ +static int ParseDirectives (int InArgList) +/* Handle directives. Return 1 if any whitespace or newlines are parsed. */ { - int NewLines = 0; - int Skip; + int PPSkip = 0; ident Directive; - /* Skip white space at the beginning of the line */ - SkipWhitespace (0); + /* Skip white space at the beginning of the first line */ + int Whitespace = SkipWhitespace (0); /* Check for stuff to skip */ - Skip = 0; - while (CurC == '\0' || CurC == '#' || Skip) { + while (CurC == '\0' || CurC == '#' || PPSkip) { /* Check for preprocessor lines lines */ if (CurC == '#') { @@ -1477,7 +1463,7 @@ static int ParseDirectives (void) continue; } if (!IsSym (Directive)) { - if (!Skip) { + if (!PPSkip) { PPError ("Preprocessor directive expected"); } ClearLine (); @@ -1485,7 +1471,7 @@ static int ParseDirectives (void) switch (FindPPToken (Directive)) { case PP_DEFINE: - if (!Skip) { + if (!PPSkip) { DefineMacro (); } break; @@ -1495,10 +1481,10 @@ static int ParseDirectives (void) if ((PPStack->Stack[PPStack->Index] & IFCOND_ELSE) == 0) { /* Handle as #else/#if combination */ if ((PPStack->Stack[PPStack->Index] & IFCOND_SKIP) == 0) { - Skip = !Skip; + PPSkip = !PPSkip; } PPStack->Stack[PPStack->Index] |= IFCOND_ELSE; - Skip = DoIf (Skip); + PPSkip = DoIf (PPSkip); /* #elif doesn't need a terminator */ PPStack->Stack[PPStack->Index] &= ~IFCOND_NEEDTERM; @@ -1514,7 +1500,7 @@ static int ParseDirectives (void) if (PPStack->Index >= 0) { if ((PPStack->Stack[PPStack->Index] & IFCOND_ELSE) == 0) { if ((PPStack->Stack[PPStack->Index] & IFCOND_SKIP) == 0) { - Skip = !Skip; + PPSkip = !PPSkip; } PPStack->Stack[PPStack->Index] |= IFCOND_ELSE; @@ -1542,7 +1528,7 @@ static int ParseDirectives (void) CHECK (PPStack->Index >= 0); /* Remove the clause that needs a terminator */ - Skip = (PPStack->Stack[PPStack->Index--] & IFCOND_SKIP) != 0; + PPSkip = (PPStack->Stack[PPStack->Index--] & IFCOND_SKIP) != 0; /* Check for extra tokens */ CheckExtraTokens ("endif"); @@ -1552,45 +1538,48 @@ static int ParseDirectives (void) break; case PP_ERROR: - if (!Skip) { + if (!PPSkip) { DoError (); } break; case PP_IF: - Skip = DoIf (Skip); + PPSkip = DoIf (PPSkip); break; case PP_IFDEF: - Skip = DoIfDef (Skip, 1); + PPSkip = DoIfDef (PPSkip, 1); break; case PP_IFNDEF: - Skip = DoIfDef (Skip, 0); + PPSkip = DoIfDef (PPSkip, 0); break; case PP_INCLUDE: - if (!Skip) { + if (!PPSkip) { DoInclude (); } break; case PP_LINE: /* Should do something in C99 at least, but we ignore it */ - if (!Skip) { + if (!PPSkip) { ClearLine (); } break; case PP_PRAGMA: - if (!Skip) { - DoPragma (); - --NewLines; + if (!PPSkip) { + if (!InArgList) { + DoPragma (); + } else { + PPError ("Embedded #pragma directive within macro arguments is unsupported"); + } } break; case PP_UNDEF: - if (!Skip) { + if (!PPSkip) { DoUndef (); } break; @@ -1598,11 +1587,11 @@ static int ParseDirectives (void) case PP_WARNING: /* #warning is a non standard extension */ if (IS_Get (&Standard) > STD_C99) { - if (!Skip) { + if (!PPSkip) { DoWarning (); } } else { - if (!Skip) { + if (!PPSkip) { PPError ("Preprocessor directive expected"); } ClearLine (); @@ -1610,7 +1599,7 @@ static int ParseDirectives (void) break; default: - if (!Skip) { + if (!PPSkip) { PPError ("Preprocessor directive expected"); } ClearLine (); @@ -1621,12 +1610,11 @@ static int ParseDirectives (void) if (NextLine () == 0) { break; } - ++NewLines; - SkipWhitespace (0); + ++PendingNewLines; + Whitespace = SkipWhitespace (0) || Whitespace; } - PendingNewLines += NewLines; - return NewLines; + return Whitespace != 0; } @@ -1641,15 +1629,14 @@ void Preprocess (void) /* Parse any directives */ OLine = PLine; - ParseDirectives (); + ParseDirectives (0); OLine = 0; /* Add the source info to preprocessor output if needed */ AddPreLine (PLine); /* Add leading whitespace to prettify preprocessor output */ - LeadingWhitespace = SB_GetIndex (Line); - AppendIndent (PLine, LeadingWhitespace); + AppendIndent (PLine, SB_GetIndex (Line)); /* Expand macros if any */ MacroReplacement (Line, PLine, 1); From ae811baaf1f261bc45bfbde87896bd43a3f491f2 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 6 Aug 2022 18:21:42 +0800 Subject: [PATCH 1752/2710] Fixed the bug that redefined macros could co-exist but not all be undefined with a single #undef. --- src/cc65/preproc.c | 256 +++++++++++++++++++------------------- test/val/bug1822-pptest.c | 25 ++++ 2 files changed, 155 insertions(+), 126 deletions(-) create mode 100644 test/val/bug1822-pptest.c diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index c545bf889..6d2261a3a 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -809,131 +809,6 @@ static void ExpandMacro (StrBuf* Target, Macro* M, int MultiLine) -static void DefineMacro (void) -/* Handle a macro definition. */ -{ - ident Ident; - Macro* M; - Macro* Existing; - int C89; - - /* Read the macro name */ - SkipWhitespace (0); - if (!MacName (Ident)) { - return; - } - - /* Remember if we're in C89 mode */ - C89 = (IS_Get (&Standard) == STD_C89); - - /* Get an existing macro definition with this name */ - Existing = FindMacro (Ident); - - /* Create a new macro definition */ - M = NewMacro (Ident); - - /* Check if this is a function like macro */ - if (CurC == '(') { - - /* Skip the left paren */ - NextChar (); - - /* Set the marker that this is a function like macro */ - M->ArgCount = 0; - - /* Read the formal parameter list */ - while (1) { - - /* Skip white space and check for end of parameter list */ - SkipWhitespace (0); - if (CurC == ')') { - break; - } - - /* The next token must be either an identifier, or - if not in - ** C89 mode - the ellipsis. - */ - if (!C89 && CurC == '.') { - /* Ellipsis */ - NextChar (); - if (CurC != '.' || NextC != '.') { - PPError ("'...' expected"); - ClearLine (); - return; - } - NextChar (); - NextChar (); - - /* Remember that the macro is variadic and use __VA_ARGS__ as - ** the argument name. - */ - AddMacroArg (M, "__VA_ARGS__"); - M->Variadic = 1; - - } else { - /* Must be macro argument name */ - if (MacName (Ident) == 0) { - return; - } - - /* __VA_ARGS__ is only allowed in C89 mode */ - if (!C89 && strcmp (Ident, "__VA_ARGS__") == 0) { - PPWarning ("'__VA_ARGS__' can only appear in the expansion " - "of a C99 variadic macro"); - } - - /* Add the macro argument */ - AddMacroArg (M, Ident); - } - - /* If we had an ellipsis, or the next char is not a comma, we've - ** reached the end of the macro argument list. - */ - SkipWhitespace (0); - if (M->Variadic || CurC != ',') { - break; - } - NextChar (); - } - - /* Check for a right paren and eat it if we find one */ - if (CurC != ')') { - PPError ("')' expected"); - ClearLine (); - return; - } - NextChar (); - } - - /* Skip whitespace before the macro replacement */ - SkipWhitespace (0); - - /* Insert the macro into the macro table and allocate the ActualArgs array */ - InsertMacro (M); - - /* Remove whitespace and comments from the line, store the preprocessed - ** line into the macro replacement buffer. - */ - TranslationPhase3 (Line, &M->Replacement); - - /* Remove whitespace from the end of the line */ - while (IsSpace (SB_LookAtLast (&M->Replacement))) { - SB_Drop (&M->Replacement, 1); - } -#if 0 - printf ("%s: <%.*s>\n", M->Name, SB_GetLen (&M->Replacement), SB_GetConstBuf (&M->Replacement)); -#endif - - /* If we have an existing macro, check if the redefinition is identical. - ** Print a diagnostic if not. - */ - if (Existing && MacroCmp (M, Existing) != 0) { - PPError ("Macro redefinition is not identical"); - } -} - - - /*****************************************************************************/ /* Preprocessing */ /*****************************************************************************/ @@ -1161,6 +1036,135 @@ static void MacroReplacement (StrBuf* Source, StrBuf* Target, int MultiLine) +static void DoDefine (void) +/* Process #define directive */ +{ + ident Ident; + Macro* M; + Macro* Existing; + int C89; + + /* Read the macro name */ + SkipWhitespace (0); + if (!MacName (Ident)) { + return; + } + + /* Remember if we're in C89 mode */ + C89 = (IS_Get (&Standard) == STD_C89); + + /* Create a new macro definition */ + M = NewMacro (Ident); + + /* Check if this is a function like macro */ + if (CurC == '(') { + + /* Skip the left paren */ + NextChar (); + + /* Set the marker that this is a function like macro */ + M->ArgCount = 0; + + /* Read the formal parameter list */ + while (1) { + + /* Skip white space and check for end of parameter list */ + SkipWhitespace (0); + if (CurC == ')') { + break; + } + + /* The next token must be either an identifier, or - if not in + ** C89 mode - the ellipsis. + */ + if (!C89 && CurC == '.') { + /* Ellipsis */ + NextChar (); + if (CurC != '.' || NextC != '.') { + PPError ("'...' expected"); + ClearLine (); + return; + } + NextChar (); + NextChar (); + + /* Remember that the macro is variadic and use __VA_ARGS__ as + ** the argument name. + */ + AddMacroArg (M, "__VA_ARGS__"); + M->Variadic = 1; + + } else { + /* Must be macro argument name */ + if (MacName (Ident) == 0) { + return; + } + + /* __VA_ARGS__ is only allowed in post-C89 mode */ + if (!C89 && strcmp (Ident, "__VA_ARGS__") == 0) { + PPWarning ("'__VA_ARGS__' can only appear in the expansion " + "of a C99 variadic macro"); + } + + /* Add the macro argument */ + AddMacroArg (M, Ident); + } + + /* If we had an ellipsis, or the next char is not a comma, we've + ** reached the end of the macro argument list. + */ + SkipWhitespace (0); + if (M->Variadic || CurC != ',') { + break; + } + NextChar (); + } + + /* Check for a right paren and eat it if we find one */ + if (CurC != ')') { + PPError ("')' expected"); + ClearLine (); + return; + } + NextChar (); + } + + /* Skip whitespace before the macro replacement */ + SkipWhitespace (0); + + /* Remove whitespace and comments from the line, store the preprocessed + ** line into the macro replacement buffer. + */ + TranslationPhase3 (Line, &M->Replacement); + + /* Remove whitespace from the end of the line */ + while (IsSpace (SB_LookAtLast (&M->Replacement))) { + SB_Drop (&M->Replacement, 1); + } +#if 0 + printf ("%s: <%.*s>\n", M->Name, SB_GetLen (&M->Replacement), SB_GetConstBuf (&M->Replacement)); +#endif + + /* Get an existing macro definition with this name */ + Existing = FindMacro (M->Name); + + /* If we have an existing macro, check if the redefinition is identical. + ** Print a diagnostic if not. + */ + if (Existing != 0) { + if (MacroCmp (M, Existing) != 0) { + PPError ("Macro redefinition is not identical"); + } + /* Undefine the existing macro anyways */ + UndefineMacro (Existing->Name); + } + + /* Insert the new macro into the macro table */ + InsertMacro (M); +} + + + static int PushIf (int Skip, int Invert, int Cond) /* Push a new if level onto the if stack */ { @@ -1443,7 +1447,7 @@ static int ParseDirectives (int InArgList) case PP_DEFINE: if (!PPSkip) { - DefineMacro (); + DoDefine (); } break; diff --git a/test/val/bug1822-pptest.c b/test/val/bug1822-pptest.c new file mode 100644 index 000000000..eb4d23391 --- /dev/null +++ b/test/val/bug1822-pptest.c @@ -0,0 +1,25 @@ +/* Bug #1822 - Redefined macros failed to be all undefined with a single #undef */ + +#undef F +#undef F + +#define F 1 +#define F 1 + +#undef F +#if defined F +#error #undef F fails! +#endif + +#define F 0 + +#include <stdio.h> + +int main(void) +{ + if (F != 0) + { + printf("failed: F = %d\n", F); + } + return F; +} From 7a139a800e5ee81a3c2ec3c7b0e7c2ced4be10f6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 6 Aug 2022 18:45:49 +0800 Subject: [PATCH 1753/2710] Added # and ## as punctuators recognized by the tokenizer. Reorganized the token enum. --- src/cc65/scanner.c | 9 +++ src/cc65/scanner.h | 143 ++++++++++++++++++++++++++------------------- 2 files changed, 91 insertions(+), 61 deletions(-) diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index c7e9bb6c2..9f0498c26 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -1012,6 +1012,15 @@ void NextToken (void) SetTok (TOK_COMP); break; + case '#': + NextChar (); + if (CurC == '#') { + SetTok (TOK_DOUBLE_HASH); + } else { + NextTok.Tok = TOK_HASH; + } + break; + default: UnknownChar (CurC); diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h index cd34cbbe8..2ed59771c 100644 --- a/src/cc65/scanner.h +++ b/src/cc65/scanner.h @@ -79,6 +79,10 @@ typedef enum token_t { TOK_FASTCALL, TOK_CDECL, + /* Address sizes */ + TOK_FAR, + TOK_NEAR, + /* Tokens denoting types */ TOK_FIRST_TYPE, TOK_ENUM = TOK_FIRST_TYPE, @@ -95,94 +99,100 @@ typedef enum token_t { TOK_VOID, TOK_LAST_TYPE = TOK_VOID, - /* Control statements */ + /* Selection statements */ + TOK_IF, + TOK_ELSE, + TOK_SWITCH, + + /* Iteration statements */ + TOK_WHILE, TOK_DO, TOK_FOR, - TOK_GOTO, - TOK_IF, - TOK_RETURN, - TOK_SWITCH, - TOK_WHILE, - TOK_ASM, + /* Jump statements */ + TOK_GOTO, + TOK_CONTINUE, + TOK_BREAK, + TOK_RETURN, + + /* Labels */ TOK_CASE, TOK_DEFAULT, - TOK_BREAK, - TOK_CONTINUE, - TOK_ELSE, - TOK_ELLIPSIS, + + /* Misc. */ + TOK_ATTRIBUTE, + TOK_PRAGMA, + TOK_STATIC_ASSERT, + TOK_ASM, TOK_SIZEOF, - TOK_IDENT, - TOK_SEMI, - - /* Primary operators */ - TOK_LBRACK, + /* Punctuators */ + TOK_FIRST_PUNC, + TOK_LBRACK = TOK_FIRST_PUNC, + TOK_RBRACK, TOK_LPAREN, + TOK_RPAREN, + TOK_LCURLY, + TOK_RCURLY, TOK_DOT, TOK_PTR_REF, - - TOK_LCURLY, - TOK_RBRACK, - TOK_COMP, TOK_INC, - TOK_PLUS_ASSIGN, - TOK_PLUS, - TOK_COMMA, TOK_DEC, - TOK_MINUS_ASSIGN, - TOK_RCURLY, - TOK_MINUS, - TOK_MUL_ASSIGN, + TOK_ADDR, + TOK_AND = TOK_ADDR, /* Alias */ TOK_STAR, TOK_MUL = TOK_STAR, /* Alias */ - TOK_DIV_ASSIGN, - TOK_DIV, - TOK_BOOL_AND, - TOK_AND_ASSIGN, - TOK_AND, - TOK_NE, + TOK_PLUS, + TOK_MINUS, + TOK_COMP, TOK_BOOL_NOT, - TOK_BOOL_OR, - TOK_OR_ASSIGN, - TOK_OR, - TOK_EQ, - TOK_ASSIGN, - - /* Inequalities */ - TOK_LE, - TOK_LT, - TOK_GE, - TOK_GT, - - TOK_SHL_ASSIGN, - TOK_SHL, - TOK_SHR_ASSIGN, - TOK_SHR, - TOK_XOR_ASSIGN, - TOK_XOR, - TOK_MOD_ASSIGN, + TOK_DIV, TOK_MOD, + TOK_SHL, + TOK_SHR, + TOK_LT, + TOK_GT, + TOK_LE, + TOK_GE, + TOK_EQ, + TOK_NE, + TOK_XOR, + TOK_OR, + TOK_BOOL_AND, + TOK_BOOL_OR, TOK_QUEST, TOK_COLON, - TOK_RPAREN, + TOK_SEMI, + TOK_ELLIPSIS, + TOK_ASSIGN, + TOK_MUL_ASSIGN, + TOK_DIV_ASSIGN, + TOK_MOD_ASSIGN, + TOK_PLUS_ASSIGN, + TOK_MINUS_ASSIGN, + TOK_SHL_ASSIGN, + TOK_SHR_ASSIGN, + TOK_AND_ASSIGN, + TOK_XOR_ASSIGN, + TOK_OR_ASSIGN, + TOK_COMMA, + TOK_HASH, + TOK_HASH_HASH, + TOK_DOUBLE_HASH = TOK_HASH_HASH, /* Alias */ + TOK_LAST_PUNC = TOK_DOUBLE_HASH, + + /* Primary expressions */ TOK_SCONST, TOK_ICONST, TOK_CCONST, TOK_FCONST, TOK_WCSCONST, - - TOK_ATTRIBUTE, - TOK_STATIC_ASSERT, - TOK_FAR, - TOK_NEAR, + TOK_IDENT, TOK_A, TOK_X, TOK_Y, TOK_AX, - TOK_EAX, - - TOK_PRAGMA + TOK_EAX } token_t; @@ -220,6 +230,17 @@ extern int NextLineDisabled; /* Disabled to read next line */ +#if defined(HAVE_INLINE) +INLINE int TokIsPunc (const Token* T) +/* Return true if the token is a punctuator */ +{ + return (T->Tok >= TOK_FIRST_PUNC && T->Tok <= TOK_LAST_PUNC); +} +#else +# define TokIsPunc(T) \ + ((T)->Tok >= TOK_FIRST_PUNC && (T)->Tok <= TOK_LAST_PUNC) +#endif + #if defined(HAVE_INLINE) INLINE int TokIsStorageClass (const Token* T) /* Return true if the token is a storage class specifier */ From 7971eec3ccf05719fb497ee026c0ecc610819865 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 7 Aug 2022 12:45:48 +0800 Subject: [PATCH 1754/2710] Fixed parentheses handling when a function-like macro name itself is used as an macro argument. --- src/cc65/preproc.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index d33bef34c..3fd994e80 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1142,17 +1142,27 @@ static void MacroReplacement (StrBuf* Source, StrBuf* Target, int MultiLine) if (Whitespace > 0) { SB_AppendChar (Target, ' '); } - if (CurC == '#') { - if (OLine == 0) { - OLine = Target; - ParseDirectives (0); - OLine = 0; - } else { - ParseDirectives (0); + + /* Directives can only be found in an argument list + ** that spans multiple lines. + */ + if (MultiLine) { + if (CurC == '#') { + /* If we were going to support #pragma in + ** macro argument list, it would be output + ** to OLine. + */ + if (OLine == 0) { + OLine = Target; + ParseDirectives (0); + OLine = 0; + } else { + ParseDirectives (0); + } } + /* Add the source info to preprocessor output if needed */ + AddPreLine (Target); } - /* Add the source info to preprocessor output if needed */ - AddPreLine (Target); } else { /* Function-like macro */ if (OLine == 0) { From a3a5fbe8094312ecc1e945fd9ffb6f677e265a31 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 7 Aug 2022 13:56:47 +0800 Subject: [PATCH 1755/2710] Disallowed 'defined' as a macro name. --- src/cc65/preproc.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 6d2261a3a..153d6a4e7 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1053,6 +1053,12 @@ static void DoDefine (void) /* Remember if we're in C89 mode */ C89 = (IS_Get (&Standard) == STD_C89); + /* Check for forbidden macro names */ + if (strcmp (Ident, "defined") == 0) { + PPError ("'%s' cannot be used as a macro name", Ident); + return; + } + /* Create a new macro definition */ M = NewMacro (Ident); From 4bb4f033ea9774ae04c8fdaf42c34f8b572859db Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 7 Aug 2022 16:14:45 +0800 Subject: [PATCH 1756/2710] Fixed the bug that C keywords were not simply recognized as identifiers in preprocessing. --- src/cc65/ppexpr.c | 10 ++++++++-- src/cc65/scanner.c | 19 ++++++++++++------- src/cc65/scanner.h | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/cc65/ppexpr.c b/src/cc65/ppexpr.c index af2c1de3b..788fb27d5 100644 --- a/src/cc65/ppexpr.c +++ b/src/cc65/ppexpr.c @@ -215,6 +215,12 @@ static void PPhie11 (PPExpr* Expr) } } + + /* Check for excessive expressions */ + if (!TokIsPunc (&CurTok)) { + PPError ("Missing binary operator"); + PPErrorSkipLine (); + } } @@ -854,7 +860,7 @@ void ParsePPExprInLine (PPExpr* Expr) /* Initialize the parser status */ PPEvaluationFailed = 0; PPEvaluationEnabled = 1; - NextLineDisabled = 1; + PPParserRunning = 1; /* Parse */ PPExprInit (Expr); @@ -867,5 +873,5 @@ void ParsePPExprInLine (PPExpr* Expr) } /* Restore parser status */ - NextLineDisabled = 0; + PPParserRunning = 0; } diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 9f0498c26..af3ddaab5 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -69,7 +69,7 @@ Token CurTok; /* The current token */ Token NextTok; /* The next token */ -int NextLineDisabled; /* Disabled to read next line */ +int PPParserRunning; /* Is tokenizer used by the preprocessor */ @@ -189,8 +189,10 @@ static int SkipWhite (void) { while (1) { while (CurC == '\0') { - /* If reading next line fails or is forbidden, bail out */ - if (NextLineDisabled || PreprocessNextLine () == 0) { + /* If reading next line fails or is disabled with directives, bail + ** out. + */ + if (PPParserRunning || PreprocessNextLine () == 0) { return 0; } } @@ -759,11 +761,14 @@ void NextToken (void) /* Check for keywords and identifiers */ if (IsSym (token)) { - /* Check for a keyword */ - if ((NextTok.Tok = FindKey (token)) != TOK_IDENT) { - /* Reserved word found */ - return; + if (!PPParserRunning) { + /* Check for a keyword */ + if ((NextTok.Tok = FindKey (token)) != TOK_IDENT) { + /* Reserved word found */ + return; + } } + /* No reserved word, check for special symbols */ if (token[0] == '_' && token[1] == '_') { /* Special symbols */ diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h index 2ed59771c..194f27b7c 100644 --- a/src/cc65/scanner.h +++ b/src/cc65/scanner.h @@ -220,7 +220,7 @@ struct Token { extern Token CurTok; /* The current token */ extern Token NextTok; /* The next token */ -extern int NextLineDisabled; /* Disabled to read next line */ +extern int PPParserRunning; /* Is tokenizer used by the preprocessor */ From 71a9ed04a227bbb42effe4a4b9590b2689d0d4b7 Mon Sep 17 00:00:00 2001 From: Marco Aurelio da Costa <costa@gamic.com> Date: Sun, 7 Aug 2022 11:24:47 -0300 Subject: [PATCH 1757/2710] Revert: Parse file included inside a macro at definition time The reverted change broke too many use cases where users where expecting the compiler quirky behavior to be the correct behavior. A better solution is needed for the quirk which does not break current usage. --- src/ca65/macro.c | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/ca65/macro.c b/src/ca65/macro.c index d9f1f385c..4812b12c4 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -489,23 +489,6 @@ void MacDef (unsigned Style) ** the .LOCAL command is detected and removed, at this time. */ while (1) { - /* Check for include */ - if (CurTok.Tok == TOK_INCLUDE && Style == MAC_STYLE_CLASSIC) { - /* Include another file */ - NextTok (); - /* Name must follow */ - if (CurTok.Tok != TOK_STRCON) { - ErrorSkip ("String constant expected"); - } else { - SB_Terminate (&CurTok.SVal); - if (NewInputFile (SB_GetConstBuf (&CurTok.SVal)) == 0) { - /* Error opening the file, skip remainder of line */ - SkipUntilSep (); - } - } - NextTok (); - } - /* Check for end of macro */ if (Style == MAC_STYLE_CLASSIC) { /* In classic macros, only .endmacro is allowed */ From 9b3b652fa54093d9e937c22fd8deb0d082094bb8 Mon Sep 17 00:00:00 2001 From: ZeroByteOrg <thatguy@zerobyte.org> Date: Mon, 8 Aug 2022 15:17:28 -0500 Subject: [PATCH 1758/2710] Switched to using tmp1 instead of self-mod to store the jiffies value --- libsrc/cx16/waitvsync.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libsrc/cx16/waitvsync.s b/libsrc/cx16/waitvsync.s index 9cd1824cf..f8828eec2 100644 --- a/libsrc/cx16/waitvsync.s +++ b/libsrc/cx16/waitvsync.s @@ -10,15 +10,15 @@ ; .export _waitvsync + .importzp tmp1 .proc _waitvsync: near RDTIM = $FFDE ; Kernal API for reading the jiffy timer jsr RDTIM - sta lastjiffy + sta tmp1 keep_waiting: jsr RDTIM - cmp #$FF ; self-mod the value returned by RDTIM to save memory - lastjiffy=(*-1) + cmp tmp1 beq keep_waiting rts .endproc From 582e43931d0a362e4faacea1ccae5a724e3b4edf Mon Sep 17 00:00:00 2001 From: ZeroByteOrg <thatguy@zerobyte.org> Date: Mon, 8 Aug 2022 15:21:30 -0500 Subject: [PATCH 1759/2710] import RDTIM symbol instead of hard-wiring it here --- libsrc/cx16/waitvsync.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/cx16/waitvsync.s b/libsrc/cx16/waitvsync.s index f8828eec2..d75a7a735 100644 --- a/libsrc/cx16/waitvsync.s +++ b/libsrc/cx16/waitvsync.s @@ -11,9 +11,9 @@ .export _waitvsync .importzp tmp1 + .import RDTIM .proc _waitvsync: near - RDTIM = $FFDE ; Kernal API for reading the jiffy timer jsr RDTIM sta tmp1 keep_waiting: From 5608453aea5a72532fe1c9966163e181b7fc545c Mon Sep 17 00:00:00 2001 From: ZeroByteOrg <thatguy@zerobyte.org> Date: Mon, 8 Aug 2022 16:16:37 -0500 Subject: [PATCH 1760/2710] Fixed YM2151 struct to match HW behavior --- asminc/cx16.inc | 6 +++--- include/cx16.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/asminc/cx16.inc b/asminc/cx16.inc index 268d701d6..1a916ecdb 100644 --- a/asminc/cx16.inc +++ b/asminc/cx16.inc @@ -538,11 +538,11 @@ NMIVec := $0318 ; YM2151 audio chip .struct YM2151 .org $9F40 - .union - STATUS .byte ADDR .byte - .endunion + .union DATA .byte + STATUS .byte + .endunion .endstruct ; X16 Emulator device diff --git a/include/cx16.h b/include/cx16.h index 42495c862..66f21843e 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -285,11 +285,11 @@ struct __vera { /* Audio chip */ struct __ym2151 { + unsigned char reg; /* Register number for data */ union { - unsigned char reg; /* Register number for data */ + unsigned char data; unsigned char status; /* Busy flag */ }; - unsigned char data; }; #define YM2151 (*(volatile struct __ym2151 *)0x9F40) From 78e80eb942b7ad7f78d111a553637314cec7192f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 9 Aug 2022 13:13:33 +0800 Subject: [PATCH 1761/2710] Fixed superfluous warning on pointer types comparing a non-void pointer to a void pointer. --- src/cc65/expr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 84f46504c..dbcddd4f9 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2340,7 +2340,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ } else if (IsClassPtr (Expr->Type)) { if (IsClassPtr (Expr2.Type)) { /* Pointers are allowed in comparison */ - if (TypeCmp (Expr->Type, Expr2.Type).C < TC_STRICT_COMPATIBLE) { + if (TypeCmp (Expr->Type, Expr2.Type).C < TC_VOID_PTR) { /* Warn about distinct pointer types */ TypeCompatibilityDiagnostic (PtrConversion (Expr->Type), PtrConversion (Expr2.Type), 0, "Distinct pointer types comparing '%s' with '%s'"); From f14e79319713639f7f62bf643595457995deb65d Mon Sep 17 00:00:00 2001 From: Alejandro Colomar <alx.manpages@gmail.com> Date: Mon, 8 Aug 2022 21:48:32 +0200 Subject: [PATCH 1762/2710] Make NULL conform to POSIX POSIX.1-2008 tightened the definition of NULL to be 0 cast to the type 'void *'. Defining NULL as 0 is problematic, because it requires users to cast NULL to a pointer type before passing it to variadic functions. Using POSIX's definition is safer, because NULL can be used in all contexts without a cast, due to the alignment of 'void *' and 'char *' being the same. It also helps the compiler be able to detect when NULL is being used in an integer context. Link: <http://ewontfix.com/11/> Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com> --- include/stddef.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/stddef.h b/include/stddef.h index 3230a32b0..ca93edf62 100644 --- a/include/stddef.h +++ b/include/stddef.h @@ -54,7 +54,7 @@ typedef unsigned size_t; /* NULL pointer */ #ifndef _HAVE_NULL -#define NULL 0 +#define NULL ((void *) 0) #define _HAVE_NULL #endif From f942c629d70cd3b8c00ea230b71c2b4dfd13cda3 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 11 Aug 2022 00:04:36 +0200 Subject: [PATCH 1763/2710] simple test related to issue #1655 --- test/asm/val/bug1655.inc | 5 +++++ test/asm/val/bug1655.s | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 test/asm/val/bug1655.inc create mode 100644 test/asm/val/bug1655.s diff --git a/test/asm/val/bug1655.inc b/test/asm/val/bug1655.inc new file mode 100644 index 000000000..a3c34fff8 --- /dev/null +++ b/test/asm/val/bug1655.inc @@ -0,0 +1,5 @@ + + inx ; x = 2 + cpx #$02 + jne exiterror + diff --git a/test/asm/val/bug1655.s b/test/asm/val/bug1655.s new file mode 100644 index 000000000..383f871e4 --- /dev/null +++ b/test/asm/val/bug1655.s @@ -0,0 +1,23 @@ + .macpack longbranch + + .import _exit + .export _main + + .macpack cpu + .macro pfinc what + .out .sprintf("Including bug%s.inc", what) + .include .sprintf("bug%s.inc", what) + .endmacro + +_main: + ldx #1 ; test counter + + pfinc "1655" + + ;--------------------------------------------------------------------- + ; exit OK + ldx #0 +exiterror: + txa + ldx #0 + jmp _exit From c1fd3218df3ee05190fa99fdd2d96611c34dda11 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 11 Aug 2022 00:59:09 +0200 Subject: [PATCH 1764/2710] add test related to pr #1799 --- test/todo/inline-asm-1489.c | 109 ++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 test/todo/inline-asm-1489.c diff --git a/test/todo/inline-asm-1489.c b/test/todo/inline-asm-1489.c new file mode 100644 index 000000000..57699ab0a --- /dev/null +++ b/test/todo/inline-asm-1489.c @@ -0,0 +1,109 @@ + +#include <stdlib.h> +#include <stdio.h> +#include <stdint.h> +#include <string.h> + +#define testasm1(C) (__AX__ = (C), \ + asm("and #$3f"),\ + __AX__) + +#define testasm2(C) (__A__ = (C), \ + asm("and #$3f"),\ + __A__) + +uint8_t src[32] = { 0x10, 0x41, 0x62, 0x83, 0xb4, 0xf5, 0xe6, 0xc7, 0, 0 }; +uint8_t src2[32] = { 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0, 0 }; + + +uint8_t ref1[32] = { 0x10, 0x01, 0x22, 0x03, 0x34, 0x35, 0x26, 0x07, 0, 0 }; +uint8_t ref2[32] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0, 0 }; + +uint8_t dest[32]; +int res = 0; + +void dotest1a(uint8_t *s, uint8_t *d) +{ + printf("dotest1a\n"); + while (*s != 0) { + *d = (testasm1(*s)); +// printf("%04x:%02x\n",d,*d); + d++; + s++; + } +} + +void dotest1b(uint8_t *s, uint8_t *d) +{ + printf("dotest1b\n"); + while (*s != 0) { + *d = (testasm2(*s)); + d++; + s++; + } +} + +void dotest2a (void) +{ + char *p = &src2[0]; + uint16_t scaddr=&dest[0]; //output to line 11 on the screen + + printf("dotest2a\n"); + while (*p != 0) { + (*(unsigned char *)(scaddr++)=(testasm1(*p))); + p++; + } +} + +void dotest2b (void) +{ + char *p = &src2[0]; + uint16_t scaddr=&dest[0]; //output to line 11 on the screen + + printf("dotest2b\n"); + while (*p != 0) { + (*(unsigned char *)(scaddr++)=(testasm2(*p))); + p++; + } +} + +int docmp(uint8_t *s, uint8_t *r) +{ + int res = 0; + while (*s != 0) { +// printf("is %02x\n", *s); + if (*r != *s) { + printf("is %02x expected %02x\n", *s, *r); + res++; + } + r++; + s++; + } + return res; +} + +int main(void) +{ + memset(dest, 0, 10); + memset(dest, 0x11, 8); + dotest1a(src, dest); + res = docmp(dest, ref1); + + memset(dest, 0, 10); + memset(dest, 0x22, 8); + dotest2a(); + res += docmp(&dest[0], &ref2[0]); + + memset(dest, 0, 10); + memset(dest, 0x33, 8); + dotest1b(&src[0], &dest[0]); + res = docmp(&dest[0], &ref1[0]); + + memset(dest, 0, 10); + memset(dest, 0x44, 8); + dotest2b(); + res += docmp(&dest[0], &ref2[0]); + + printf("res: %02x\n", res); + return res; +} From 5cca1e8b1d8b6ac6adfd90de93326ee179863d5b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 11 Aug 2022 10:55:16 +0800 Subject: [PATCH 1765/2710] Fixed parsing numeric constants. --- src/cc65/scanner.c | 178 +++++++++++++++++++++++++++++---------------- src/cc65/scanner.h | 8 ++ 2 files changed, 123 insertions(+), 63 deletions(-) diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index af3ddaab5..11d356281 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -248,6 +248,45 @@ int IsSym (char* S) +int IsPPNumber (int Cur, int Next) +/* Return 1 if the two successive characters indicate a pp-number, otherwise +** return 0. +*/ +{ + return Cur != '.' ? IsDigit (Cur) : IsDigit (Next); +} + + + +void CopyPPNumber (StrBuf* Target) +/* Copy a pp-number from the input to Target */ +{ + int Std; + + if (!IsPPNumber (CurC, NextC)) { + return; + } + + /* P-exp is only valid in C99 and later */ + Std = IS_Get (&Standard); + while (IsIdent (CurC) || IsDigit (CurC) || CurC == '.') { + SB_AppendChar (Target, CurC); + if (NextC == '+' || NextC == '-') { + if (CurC == 'e' || CurC == 'E' || + (Std >= STD_C99 && (CurC == 'p' || CurC == 'P'))) { + SB_AppendChar (Target, NextC); + NextChar (); + } else { + NextChar (); + break; + } + } + NextChar (); + } +} + + + static void UnknownChar (char C) /* Error message for unknown character */ { @@ -460,76 +499,77 @@ static void StringConst (void) static void NumericConst (void) /* Parse a numeric constant */ { - unsigned Base; /* Temporary number base */ - unsigned Prefix; /* Base according to prefix */ - StrBuf S = STATIC_STRBUF_INITIALIZER; + unsigned Base; /* Temporary number base according to prefix */ + unsigned Index; + StrBuf Src = AUTO_STRBUF_INITIALIZER; int IsFloat; char C; unsigned DigitVal; unsigned long IVal; /* Value */ + /* Get the pp-number first, then parse on it */ + CopyPPNumber (&Src); + SB_Terminate (&Src); + SB_Reset (&Src); + /* Check for a leading hex, octal or binary prefix and determine the ** possible integer types. */ - if (CurC == '0') { + if (SB_Peek (&Src) == '0') { /* Gobble 0 and examine next char */ - NextChar (); - if (toupper (CurC) == 'X') { - Base = Prefix = 16; - NextChar (); /* gobble "x" */ - } else if (toupper (CurC) == 'B' && IS_Get (&Standard) >= STD_CC65) { - Base = Prefix = 2; - NextChar (); /* gobble 'b' */ + SB_Skip (&Src); + if (toupper (SB_Peek (&Src)) == 'X' && + IsXDigit (SB_LookAt (&Src, SB_GetIndex (&Src) + 1))) { + Base = 16; + SB_Skip (&Src); /* gobble "x" */ + } else if (toupper (SB_Peek (&Src)) == 'B' && + IS_Get (&Standard) >= STD_CC65 && + IsDigit (SB_LookAt (&Src, SB_GetIndex (&Src) + 1))) { + Base = 2; + SB_Skip (&Src); /* gobble 'b' */ } else { Base = 10; /* Assume 10 for now - see below */ - Prefix = 8; /* Actual prefix says octal */ } } else { - Base = Prefix = 10; + Base = 10; } - /* Because floating point numbers don't have octal prefixes (a number - ** with a leading zero is decimal), we first have to read the number - ** before converting it, so we can determine if it's a float or an - ** integer. + /* Because floating point numbers don't have octal prefixes (a number with + ** a leading zero is decimal), we first have to read the number before + ** converting it, so we can determine if it's a float or an integer. */ - while (IsXDigit (CurC) && HexVal (CurC) < Base) { - SB_AppendChar (&S, CurC); - NextChar (); + Index = SB_GetIndex (&Src); + while ((C = SB_Peek (&Src)) != '\0' && (Base <= 10 ? IsDigit (C) : IsXDigit (C))) { + SB_Skip (&Src); } - SB_Terminate (&S); /* The following character tells us if we have an integer or floating ** point constant. Note: Hexadecimal floating point constants aren't ** supported in C89. */ - IsFloat = (CurC == '.' || - (Base == 10 && toupper (CurC) == 'E') || - (Base == 16 && toupper (CurC) == 'P' && IS_Get (&Standard) >= STD_C99)); + IsFloat = (C == '.' || + (Base == 10 && toupper (C) == 'E') || + (Base == 16 && toupper (C) == 'P' && IS_Get (&Standard) >= STD_C99)); - /* If we don't have a floating point type, an octal prefix results in an - ** octal base. - */ - if (!IsFloat && Prefix == 8) { + /* An octal prefix for an integer type results in an octal base */ + if (!IsFloat && Base == 10 && SB_LookAt (&Src, 0) == '0') { Base = 8; } - /* Since we do now know the correct base, convert the remembered input - ** into a number. - */ - SB_Reset (&S); + /* Since we now know the correct base, convert the input into a number */ + SB_SetIndex (&Src, Index); IVal = 0; - while ((C = SB_Get (&S)) != '\0') { + while ((C = SB_Peek (&Src)) != '\0' && (Base <= 10 ? IsDigit (C) : IsXDigit (C))) { DigitVal = HexVal (C); if (DigitVal >= Base) { - Error ("Numeric constant contains digits beyond the radix"); + Error ("Invalid digit \"%c\" beyond radix %u constant", C, Base); + SB_Clear (&Src); + break; } IVal = (IVal * Base) + DigitVal; + SB_Skip (&Src); } - /* We don't need the string buffer any longer */ - SB_Done (&S); - /* Distinguish between integer and floating point constants */ if (!IsFloat) { @@ -540,27 +580,32 @@ static void NumericConst (void) ** possible to convert the data to unsigned long even if the IT_ULONG ** flag were not set, but we are not doing that. */ - if (toupper (CurC) == 'U') { + if (toupper (SB_Peek (&Src)) == 'U') { /* Unsigned type */ - NextChar (); - if (toupper (CurC) != 'L') { + SB_Skip (&Src); + if (toupper (SB_Peek (&Src)) != 'L') { Types = IT_UINT | IT_ULONG; } else { - NextChar (); + SB_Skip (&Src); Types = IT_ULONG; } - } else if (toupper (CurC) == 'L') { + } else if (toupper (SB_Peek (&Src)) == 'L') { /* Long type */ - NextChar (); - if (toupper (CurC) != 'U') { + SB_Skip (&Src); + if (toupper (SB_Peek (&Src)) != 'U') { Types = IT_LONG | IT_ULONG; WarnTypes = IT_ULONG; } else { - NextChar (); + SB_Skip (&Src); Types = IT_ULONG; } } else { - if (Prefix == 10) { + if (SB_Peek (&Src) != '\0') { + Error ("Invalid suffix \"%s\" on integer constant", + SB_GetConstBuf (&Src) + SB_GetIndex (&Src)); + } + + if (Base == 10) { /* Decimal constants are of any type but uint */ Types = IT_INT | IT_LONG | IT_ULONG; WarnTypes = IT_LONG | IT_ULONG; @@ -624,16 +669,16 @@ static void NumericConst (void) Double FVal = FP_D_FromInt (IVal); /* Convert to double */ /* Check for a fractional part and read it */ - if (CurC == '.') { + if (SB_Peek (&Src) == '.') { Double Scale; /* Skip the dot */ - NextChar (); + SB_Skip (&Src); /* Read fractional digits */ Scale = FP_D_Make (1.0); - while (IsXDigit (CurC) && (DigitVal = HexVal (CurC)) < Base) { + while (IsXDigit (SB_Peek (&Src)) && (DigitVal = HexVal (SB_Peek (&Src))) < Base) { /* Get the value of this digit */ Double FracVal = FP_D_Div (FP_D_FromInt (DigitVal * Base), Scale); /* Add it to the float value */ @@ -641,25 +686,25 @@ static void NumericConst (void) /* Scale base */ Scale = FP_D_Mul (Scale, FP_D_FromInt (DigitVal)); /* Skip the digit */ - NextChar (); + SB_Skip (&Src); } } /* Check for an exponent and read it */ - if ((Base == 16 && toupper (CurC) == 'F') || - (Base == 10 && toupper (CurC) == 'E')) { + if ((Base == 16 && toupper (SB_Peek (&Src)) == 'P') || + (Base == 10 && toupper (SB_Peek (&Src)) == 'E')) { unsigned Digits; unsigned Exp; /* Skip the exponent notifier */ - NextChar (); + SB_Skip (&Src); /* Read an optional sign */ - if (CurC == '-') { - NextChar (); - } else if (CurC == '+') { - NextChar (); + if (SB_Peek (&Src) == '-') { + SB_Skip (&Src); + } else if (SB_Peek (&Src) == '+') { + SB_Skip (&Src); } /* Read exponent digits. Since we support only 32 bit floats @@ -670,11 +715,11 @@ static void NumericConst (void) */ Digits = 0; Exp = 0; - while (IsDigit (CurC)) { + while (IsDigit (SB_Peek (&Src))) { if (++Digits <= 3) { - Exp = Exp * 10 + HexVal (CurC); + Exp = Exp * 10 + HexVal (SB_Peek (&Src)); } - NextChar (); + SB_Skip (&Src); } /* Check for errors: We must have exponent digits, and not more @@ -693,10 +738,14 @@ static void NumericConst (void) } /* Check for a suffix and determine the type of the constant */ - if (toupper (CurC) == 'F') { - NextChar (); + if (toupper (SB_Peek (&Src)) == 'F') { + SB_Skip (&Src); NextTok.Type = type_float; } else { + if (SB_Peek (&Src) != '\0') { + Error ("Invalid suffix \"%s\" on floating constant", + SB_GetConstBuf (&Src) + SB_GetIndex (&Src)); + } NextTok.Type = type_double; } @@ -705,6 +754,9 @@ static void NumericConst (void) NextTok.Tok = TOK_FCONST; } + + /* We don't need the string buffer any longer */ + SB_Done (&Src); } @@ -746,7 +798,7 @@ void NextToken (void) } /* Determine the next token from the lookahead */ - if (IsDigit (CurC) || (CurC == '.' && IsDigit (NextC))) { + if (IsPPNumber (CurC, NextC)) { /* A number */ NumericConst (); return; diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h index 194f27b7c..c47d660d5 100644 --- a/src/cc65/scanner.h +++ b/src/cc65/scanner.h @@ -284,6 +284,14 @@ void SymName (char* S); int IsSym (char* S); /* If a symbol follows, read it and return 1, otherwise return 0 */ +int IsPPNumber (int Cur, int Next); +/* Return 1 if the two successive characters indicate a pp-number, otherwise +** return 0. +*/ + +void CopyPPNumber (StrBuf* Target); +/* Copy a pp-number from the input to Target */ + void NextToken (void); /* Get next token from input stream */ From 624e5025b03aa9f7a8949a4fe3fca35e66952cca Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 17 Aug 2022 22:28:00 +0800 Subject: [PATCH 1766/2710] Fixed parsing wide char constants. --- src/cc65/expr.c | 1 + src/cc65/ppexpr.c | 1 + src/cc65/scanner.c | 25 ++++++++++++++++++------- src/cc65/scanner.h | 3 ++- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index dbcddd4f9..f3003507a 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1234,6 +1234,7 @@ static void Primary (ExprDesc* E) case TOK_ICONST: case TOK_CCONST: + case TOK_WCCONST: /* Character and integer constants */ E->IVal = CurTok.IVal; E->Flags = E_LOC_NONE | E_RTYPE_RVAL; diff --git a/src/cc65/ppexpr.c b/src/cc65/ppexpr.c index 788fb27d5..dd129ced9 100644 --- a/src/cc65/ppexpr.c +++ b/src/cc65/ppexpr.c @@ -114,6 +114,7 @@ static void PPhiePrimary (PPExpr* Expr) switch (CurTok.Tok) { case TOK_ICONST: case TOK_CCONST: + case TOK_WCCONST: /* Character and integer constants */ Expr->IVal = CurTok.IVal; /* According to the C standard, all signed types act as intmax_t diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 11d356281..ebdcdb33e 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -412,6 +412,15 @@ static void CharConst (void) { int C; + if (CurC == 'L') { + /* Wide character constant */ + NextTok.Tok = TOK_WCCONST; + NextChar (); + } else { + /* Narrow character constant */ + NextTok.Tok = TOK_CCONST; + } + /* Skip the quote */ NextChar (); @@ -426,9 +435,6 @@ static void CharConst (void) NextChar (); } - /* Setup values and attributes */ - NextTok.Tok = TOK_CCONST; - /* Translate into target charset */ NextTok.IVal = SignExtendChar (TgtTranslateChar (C)); @@ -804,10 +810,15 @@ void NextToken (void) return; } - /* Check for wide character literals */ - if (CurC == 'L' && NextC == '\"') { - StringConst (); - return; + /* Check for wide character constants and literals */ + if (CurC == 'L') { + if (NextC == '\"') { + StringConst (); + return; + } else if (NextC == '\'') { + CharConst (); + return; + } } /* Check for keywords and identifiers */ diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h index c47d660d5..7a67b10ed 100644 --- a/src/cc65/scanner.h +++ b/src/cc65/scanner.h @@ -182,10 +182,11 @@ typedef enum token_t { TOK_LAST_PUNC = TOK_DOUBLE_HASH, /* Primary expressions */ - TOK_SCONST, TOK_ICONST, TOK_CCONST, + TOK_WCCONST, TOK_FCONST, + TOK_SCONST, TOK_WCSCONST, TOK_IDENT, TOK_A, From b8211a2921b11b045db0dd0d9ead6972c9b7bbf1 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Wed, 17 Aug 2022 21:42:42 +0200 Subject: [PATCH 1767/2710] Update Contributing.md --- Contributing.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Contributing.md b/Contributing.md index 71d7dc3a2..ab1e73508 100644 --- a/Contributing.md +++ b/Contributing.md @@ -163,6 +163,13 @@ The only exception to the above are actions that are exclusive to the github act * the printf family of function does not completely implement all printf modifiers and does not behave as expected in some cases - all this should be documented in detail +## Floating point support + +The first step is implementing the datatype "float" as IEEE488 floats. Help welcomed! + +* WIP compiler/library changes are here: https://github.com/cc65/cc65/pull/1777 +* free software library with testbench is here: http://www.jhauser.us/arithmetic/ + ## Test suite * specific tests to check the optimizer (rather than the codegenerator) are needed. From 47d5e74a6e3cd2b2483d8b640e0f97a3a7faa214 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 18 Aug 2022 22:51:23 +0800 Subject: [PATCH 1768/2710] Modified way to keep undefined macro handling more consistent. --- src/cc65/macrotab.c | 36 +++++++++++++--- src/cc65/macrotab.h | 12 ++++-- src/cc65/preproc.c | 102 ++++++++++++++------------------------------ 3 files changed, 70 insertions(+), 80 deletions(-) diff --git a/src/cc65/macrotab.c b/src/cc65/macrotab.c index d835b7708..37b52351f 100644 --- a/src/cc65/macrotab.c +++ b/src/cc65/macrotab.c @@ -56,6 +56,9 @@ #define MACRO_TAB_SIZE 211 static Macro* MacroTab[MACRO_TAB_SIZE]; +/* The undefined macros list head */ +static Macro* UndefinedMacrosListHead; + /*****************************************************************************/ @@ -173,10 +176,11 @@ void InsertMacro (Macro* M) -int UndefineMacro (const char* Name) -/* Search for the macro with the given name and remove it from the macro -** table if it exists. Return 1 if a macro was found and deleted, return -** 0 otherwise. +Macro* UndefineMacro (const char* Name) +/* Search for the macro with the given name, if it exists, remove it from +** the defined macro table and insert it to a list for pending deletion. +** Return the macro if it was found and removed, return 0 otherwise. +** To safely free the removed macro, use FreeUndefinedMacros(). */ { /* Get the hash value of the macro name */ @@ -196,11 +200,12 @@ int UndefineMacro (const char* Name) L->Next = M->Next; } - /* Delete the macro */ - FreeMacro (M); + /* Add this macro to pending deletion list */ + M->Next = UndefinedMacrosListHead; + UndefinedMacrosListHead = M; /* Done */ - return 1; + return M; } /* Next macro */ @@ -214,6 +219,23 @@ int UndefineMacro (const char* Name) +void FreeUndefinedMacros (void) +/* Free all undefined macros */ +{ + Macro* Next; + + while (UndefinedMacrosListHead != 0) { + Next = UndefinedMacrosListHead->Next; + + /* Delete the macro */ + FreeMacro (UndefinedMacrosListHead); + + UndefinedMacrosListHead = Next; + } +} + + + Macro* FindMacro (const char* Name) /* Find a macro with the given name. Return the macro definition or NULL */ { diff --git a/src/cc65/macrotab.h b/src/cc65/macrotab.h index 0f9bff01a..6a09d7281 100644 --- a/src/cc65/macrotab.h +++ b/src/cc65/macrotab.h @@ -97,12 +97,16 @@ void DefineTextMacro (const char* Name, const char* Val); void InsertMacro (Macro* M); /* Insert the given macro into the macro table. */ -int UndefineMacro (const char* Name); -/* Search for the macro with the given name and remove it from the macro -** table if it exists. Return 1 if a macro was found and deleted, return -** 0 otherwise. +Macro* UndefineMacro (const char* Name); +/* Search for the macro with the given name, if it exists, remove it from +** the defined macro table and insert it to a list for pending deletion. +** Return the macro if it was found and removed, return 0 otherwise. +** To safely free the removed macro, use FreeUndefinedMacros(). */ +void FreeUndefinedMacros (void); +/* Free all undefined macros */ + Macro* FindMacro (const char* Name); /* Find a macro with the given name. Return the macro definition or NULL */ diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 3fd994e80..c545bf889 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -90,7 +90,6 @@ typedef struct MacroExp MacroExp; struct MacroExp { Collection ActualArgs; /* Actual arguments */ StrBuf Replacement; /* Replacement with arguments substituted */ - Macro* M; /* The macro we're handling */ }; @@ -193,12 +192,11 @@ static pptoken_t FindPPToken (const char* Ident) -static MacroExp* InitMacroExp (MacroExp* E, Macro* M) +static MacroExp* InitMacroExp (MacroExp* E) /* Initialize a MacroExp structure */ { InitCollection (&E->ActualArgs); SB_Init (&E->Replacement); - E->M = M; return E; } @@ -244,11 +242,11 @@ static StrBuf* ME_GetActual (MacroExp* E, unsigned Index) -static int ME_ArgIsVariadic (const MacroExp* E) +static int ME_ArgIsVariadic (const MacroExp* E, const Macro* M) /* Return true if the next actual argument we will add is a variadic one */ { - return (E->M->Variadic && - E->M->ArgCount == (int) CollCount (&E->ActualArgs) + 1); + return (M->Variadic && + M->ArgCount == (int) CollCount (&E->ActualArgs) + 1); } @@ -524,7 +522,7 @@ static int MacName (char* Ident) -static void ReadMacroArgs (MacroExp* E, int MultiLine) +static void ReadMacroArgs (MacroExp* E, const Macro* M, int MultiLine) /* Identify the arguments to a macro call as-is */ { int MissingParen = 0; @@ -576,7 +574,7 @@ static void ReadMacroArgs (MacroExp* E, int MultiLine) } SB_AppendChar (&Arg, CurC); NextChar (); - } else if (CurC == ',' && ME_ArgIsVariadic (E)) { + } else if (CurC == ',' && ME_ArgIsVariadic (E, M)) { /* It's a comma, but we're inside a variadic macro argument, so ** just copy it and proceed. */ @@ -591,7 +589,7 @@ static void ReadMacroArgs (MacroExp* E, int MultiLine) /* If this is not the single empty argument for a macro with ** an empty argument list, remember it. */ - if (CurC != ')' || SB_NotEmpty (&Arg) || E->M->ArgCount > 0) { + if (CurC != ')' || SB_NotEmpty (&Arg) || M->ArgCount > 0) { ME_AppendActual (E, &Arg); } @@ -607,7 +605,7 @@ static void ReadMacroArgs (MacroExp* E, int MultiLine) } } else if (CurC == '\0') { /* End of input inside macro argument list */ - PPError ("Unterminated argument list invoking macro '%s'", E->M->Name); + PPError ("Unterminated argument list invoking macro '%s'", M->Name); MissingParen = 1; ClearLine (); break; @@ -619,7 +617,7 @@ static void ReadMacroArgs (MacroExp* E, int MultiLine) } /* Compare formal and actual argument count */ - if (CollCount (&E->ActualArgs) != (unsigned) E->M->ArgCount) { + if (CollCount (&E->ActualArgs) != (unsigned) M->ArgCount) { if (!MissingParen) { /* Argument count mismatch */ @@ -628,7 +626,7 @@ static void ReadMacroArgs (MacroExp* E, int MultiLine) /* Be sure to make enough empty arguments available */ SB_Clear (&Arg); - while (CollCount (&E->ActualArgs) < (unsigned) E->M->ArgCount) { + while (CollCount (&E->ActualArgs) < (unsigned) M->ArgCount) { ME_AppendActual (E, &Arg); } } @@ -639,7 +637,7 @@ static void ReadMacroArgs (MacroExp* E, int MultiLine) -static void MacroArgSubst (MacroExp* E) +static void MacroArgSubst (MacroExp* E, Macro* M) /* Argument substitution according to ISO/IEC 9899:1999 (E), 6.10.3.1ff */ { ident Ident; @@ -650,9 +648,9 @@ static void MacroArgSubst (MacroExp* E) /* Remember the current input and switch to the macro replacement. */ - int OldIndex = SB_GetIndex (&E->M->Replacement); - SB_Reset (&E->M->Replacement); - OldSource = InitLine (&E->M->Replacement); + int OldIndex = SB_GetIndex (&M->Replacement); + SB_Reset (&M->Replacement); + OldSource = InitLine (&M->Replacement); /* Argument handling loop */ while (CurC != '\0') { @@ -661,7 +659,7 @@ static void MacroArgSubst (MacroExp* E) if (IsSym (Ident)) { /* Check if it's a macro argument */ - if ((ArgIdx = FindMacroArg (E->M, Ident)) >= 0) { + if ((ArgIdx = FindMacroArg (M, Ident)) >= 0) { /* A macro argument. Get the corresponding actual argument. */ Arg = ME_GetActual (E, ArgIdx); @@ -720,7 +718,7 @@ static void MacroArgSubst (MacroExp* E) if (IsSym (Ident)) { /* Check if it's a macro argument */ - if ((ArgIdx = FindMacroArg (E->M, Ident)) >= 0) { + if ((ArgIdx = FindMacroArg (M, Ident)) >= 0) { /* Get the corresponding actual argument and add it. */ SB_Append (&E->Replacement, ME_GetActual (E, ArgIdx)); @@ -733,7 +731,7 @@ static void MacroArgSubst (MacroExp* E) } } - } else if (CurC == '#' && E->M->ArgCount >= 0) { + } else if (CurC == '#' && M->ArgCount >= 0) { /* A # operator within a macro expansion of a function like ** macro. Read the following identifier and check if it's a @@ -741,7 +739,7 @@ static void MacroArgSubst (MacroExp* E) */ NextChar (); SkipWhitespace (0); - if (!IsSym (Ident) || (ArgIdx = FindMacroArg (E->M, Ident)) < 0) { + if (!IsSym (Ident) || (ArgIdx = FindMacroArg (M, Ident)) < 0) { PPError ("'#' is not followed by a macro parameter"); } else { /* Make a valid string from Replacement */ @@ -767,7 +765,7 @@ static void MacroArgSubst (MacroExp* E) /* Switch back the input */ InitLine (OldSource); - SB_SetIndex (&E->M->Replacement, OldIndex); + SB_SetIndex (&M->Replacement, OldIndex); } @@ -783,65 +781,28 @@ static void ExpandMacro (StrBuf* Target, Macro* M, int MultiLine) #endif /* Initialize our MacroExp structure */ - InitMacroExp (&E, M); + InitMacroExp (&E); /* Check if this is a function like macro */ - if (E.M->ArgCount >= 0) { - - /* Since the macro could be undefined or redefined during its argument - ** parsing, we make a clone of the current one and stick to it. - */ - if (MultiLine) { - E.M = CloneMacro (E.M); - } + if (M->ArgCount >= 0) { /* Read the actual macro arguments (with the enclosing parentheses) */ - ReadMacroArgs (&E, MultiLine); - - /* Replace macro arguments handling the # and ## operators */ - MacroArgSubst (&E); - - /* Do macro replacement on the macro that already has the parameters - ** substituted. - */ - if (MultiLine) { - /* Check if the macro was undefined or redefined */ - M = FindMacro (E.M->Name); - if (M == 0 || MacroCmp (E.M, M) != 0) { - /* Use the cloned macro */ - M = E.M; - } - } - - /* Forbide repeated expansion of the same macro in use */ - M->Expanding = 1; - MacroReplacement (&E.Replacement, Target, 0); - M->Expanding = 0; - - } else { - - /* Handle # and ## operators for object like macros */ - MacroArgSubst (&E); - - /* Do macro replacement on the macro that already has the parameters - ** substituted. - */ - M->Expanding = 1; - MacroReplacement (&E.Replacement, Target, 0); - M->Expanding = 0; + ReadMacroArgs (&E, M, MultiLine); } + /* Replace macro arguments handling the # and ## operators */ + MacroArgSubst (&E, M); + + /* Forbide repeated expansion of the same macro in use */ + M->Expanding = 1; + MacroReplacement (&E.Replacement, Target, 0); + M->Expanding = 0; + #if 0 printf ("Done with %s(%u)\n", E.M->Name, V--); #endif - /* Free cloned macro */ - if (MultiLine && E.M->ArgCount >= 0) { - FreeMacro (E.M); - E.M = 0; - } - /* Free memory allocated for the macro expansion structure */ DoneMacroExp (&E); } @@ -1662,6 +1623,9 @@ void Preprocess (void) printf ("%s:%u: %.*s\n", GetCurrentFile (), GetCurrentLine (), (int) SB_GetLen (Line), SB_GetConstBuf (Line)); } + + /* Free all undefined macros */ + FreeUndefinedMacros (); } From b93f9fbba43693e549dd2c5935a4f7622e5979be Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 18 Aug 2022 22:51:23 +0800 Subject: [PATCH 1769/2710] Updated documents about the predefined macros. --- doc/cc65.sgml | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 43039f713..683249bda 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1202,17 +1202,34 @@ The compiler defines several macros at startup: This macro is defined if the target is the Commodore Plus/4 (-t plus4). - <tag><tt>__STDC_HOSTED__</tt></tag> - - This macro is expands to the integer constant 1. - <tag><tt>__SIM6502__</tt></tag> This macro is defined if the target is sim65 in 6502 mode (-t sim6502). <tag><tt>__SIM65C02__</tt></tag> + This macro is defined if the target is sim65 in 65C02 mode (-t sim65c02). + <tag><tt>__STDC_HOSTED__</tt></tag> + + This macro expands to the integer constant 1. + + <tag><tt>__STDC_NO_ATOMICS__</tt></tag> + + This macro expands to the integer constant 1 if the language standard is cc65 (--standard cc65). + + <tag><tt>__STDC_NO_COMPLEX__</tt></tag> + + This macro expands to the integer constant 1 if the language standard is cc65 (--standard cc65). + + <tag><tt>__STDC_NO_THREADS__</tt></tag> + + This macro expands to the integer constant 1 if the language standard is cc65 (--standard cc65). + + <tag><tt>__STDC_NO_VLA__</tt></tag> + + This macro expands to the integer constant 1 if the language standard is cc65 (--standard cc65). + <tag><tt>__SUPERVISION__</tt></tag> This macro is defined if the target is the Supervision (-t supervision). From cf7558add3fb492d14d827b832d1df189c5f98eb Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 18 Aug 2022 23:16:29 +0800 Subject: [PATCH 1770/2710] Added check for ## at either end of macro expansion. --- src/cc65/preproc.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 153d6a4e7..4b1966437 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1043,6 +1043,7 @@ static void DoDefine (void) Macro* M; Macro* Existing; int C89; + unsigned Len; /* Read the macro name */ SkipWhitespace (0); @@ -1151,6 +1152,24 @@ static void DoDefine (void) printf ("%s: <%.*s>\n", M->Name, SB_GetLen (&M->Replacement), SB_GetConstBuf (&M->Replacement)); #endif + /* Check for ## at start or end */ + Len = SB_GetLen (&M->Replacement); + if (Len >= 2) { + if (SB_LookAt (&M->Replacement, 0) == '#' && + SB_LookAt (&M->Replacement, 1) == '#') { + /* Diagnose and bail out */ + PPError ("'##' cannot appear at start of macro expansion"); + FreeMacro (M); + return; + } else if (SB_LookAt (&M->Replacement, Len - 1) == '#' && + SB_LookAt (&M->Replacement, Len - 2) == '#') { + /* Diagnose and bail out */ + PPError ("'##' cannot appear at end of macro expansion"); + FreeMacro (M); + return; + } + } + /* Get an existing macro definition with this name */ Existing = FindMacro (M->Name); From 79f97e77149467ec28792b0c28b77fad06f07342 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Aug 2022 00:24:28 +0800 Subject: [PATCH 1771/2710] Reused code more for macros in preprocessing directives. --- src/cc65/preproc.c | 330 ++++++++++++++++++++------------------------- 1 file changed, 149 insertions(+), 181 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 35a9119c7..855d59844 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -67,6 +67,17 @@ +/* Macro scanner mode flags */ +#define MSM_NONE 0x00U /* Default */ +#define MSM_MULTILINE 0x01U /* Read from multiple lines */ +#define MSM_IN_DIRECTIVE 0x02U /* In PP directives scan */ +#define MSM_IN_ARG_LIST 0x04U /* In macro argument scan */ +#define MSM_IN_ARG_EXPANSION 0x08U /* In expansion on arguments */ +#define MSM_OP_DEFINED 0x10U /* Handle the defined operator */ +#define MSM_OP_HAS_INCLUDE 0x20U /* Handle the __has_include operator */ +#define MSM_OP_HAS_C_ATTRIBUTE 0x40U /* Handle the __has_c_attribute operator */ +#define MSM_TOK_HEADER 0x80U /* Support header tokens */ + /* Management data for #if */ #define IFCOND_NONE 0x00U #define IFCOND_SKIP 0x01U @@ -105,13 +116,16 @@ static void TranslationPhase3 (StrBuf* Source, StrBuf* Target); ** non-newline whitespace sequences. */ -static int ParseDirectives (int InArgList); -/* Handle directives. Return 1 if there are directives parsed, -1 if new lines -** are read, otherwise 0. +static void PreprocessDirective (StrBuf* Source, StrBuf* Target, unsigned ModeFlags); +/* Preprocess a single line. Handle specified tokens and operators, remove +** whitespace and comments, then do macro replacement. */ -static void MacroReplacement (StrBuf* Source, StrBuf* Target, int MultiLine); -/* Perform macro replacement. */ +static int ParseDirectives (unsigned ModeFlags); +/* Handle directives. Return 1 if any whitespace or newlines are parsed. */ + +static void MacroReplacement (StrBuf* Source, StrBuf* Target, unsigned ModeFlags); +/* Scan for and perform macro replacement */ @@ -545,7 +559,7 @@ static void ReadMacroArgs (MacroExp* E, const Macro* M, int MultiLine) Newlines += PendingNewLines - OldPendingNewLines; PendingNewLines = OldPendingNewLines; OldPendingNewLines = 0; - Skipped = ParseDirectives (1) || Skipped; + Skipped = ParseDirectives (MSM_IN_ARG_LIST) || Skipped; Skipped = SkipWhitespace (MultiLine) || Skipped; } PendingNewLines += Newlines; @@ -809,122 +823,89 @@ static void ExpandMacro (StrBuf* Target, Macro* M, int MultiLine) -/*****************************************************************************/ -/* Preprocessing */ -/*****************************************************************************/ - - - -static void TranslationPhase3 (StrBuf* Source, StrBuf* Target) -/* Mimic Translation Phase 3. Handle old and new style comments. Collapse -** non-newline whitespace sequences. -*/ +static void MacroReplacement (StrBuf* Source, StrBuf* Target, unsigned ModeFlags) +/* Scan for and perform macro replacement */ { - /* Switch to the new input source */ - StrBuf* OldSource = InitLine (Source); - - /* Loop removing ws and comments */ - while (CurC != '\0') { - int HasWhiteSpace = 0; - while (1) { - /* Squeeze runs of blanks */ - if (IsSpace (CurC)) { - NextChar (); - HasWhiteSpace = 1; - } else if (CurC == '/' && NextC == '*') { - OldStyleComment (); - HasWhiteSpace = 1; - } else if (IS_Get (&Standard) >= STD_C99 && CurC == '/' && NextC == '/') { - NewStyleComment (); - HasWhiteSpace = 1; - } else { - /* No more white space */ - break; - } - } - if (HasWhiteSpace) { - SB_AppendChar (Target, ' '); - } else if (IsQuote (CurC)) { - CopyQuotedString (Target); - } else { - SB_AppendChar (Target, CurC); - NextChar (); - } - } - - /* Terminate the new input line */ - SB_Terminate (Target); - - /* Switch back to the old source */ - InitLine (OldSource); -} - - - -static void ProcessSingleLine (StrBuf* Source, - StrBuf* Target, - int HandleDefined, - int HandleHeader) -/* Process a single line. Remove whitespace, old and new style comments. -** Recognize and handle the "defined" operator if HandleDefined is true. -** Recognize and handle header name tokens if HandleHeader is true. -*/ -{ - int OldIndex = SB_GetIndex (Source); ident Ident; - int HaveParen; - /* Operate on the new input source */ + /* Remember the current input and switch to Source */ StrBuf* OldSource = InitLine (Source); - SkipWhitespace (0); - - /* Loop removing ws and comments */ + /* Loop substituting macros */ while (CurC != '\0') { - if (SkipWhitespace (0)) { - /* Squeeze runs of blanks */ - if (!IsSpace (SB_LookAtLast (Target))) { - SB_AppendChar (Target, ' '); - } - } else if (IsSym (Ident)) { - if (HandleDefined && strcmp (Ident, "defined") == 0) { + /* If we have an identifier, check if it's a macro */ + if (IsSym (Ident)) { + if ((ModeFlags & MSM_OP_DEFINED) != 0 && strcmp (Ident, "defined") == 0) { /* Handle the "defined" operator */ + int HaveParen = 0; + SkipWhitespace (0); - HaveParen = 0; if (CurC == '(') { HaveParen = 1; NextChar (); SkipWhitespace (0); } if (IsSym (Ident)) { - SB_AppendChar (Target, IsMacro (Ident)? '1' : '0'); + /* Eat the identifier */ + SB_AppendChar (Target, IsMacro (Ident) ? '1' : '0'); if (HaveParen) { SkipWhitespace (0); if (CurC != ')') { PPError ("')' expected"); + ClearLine (); } else { NextChar (); } } } else { - PPError ("Identifier expected"); + PPError ("Macro name must be an identifier"); + ClearLine (); SB_AppendChar (Target, '0'); } } else { + /* Check if it's an expandable macro */ Macro* M = FindMacro (Ident); if (M != 0 && !M->Expanding) { /* Check if this is a function-like macro */ if (M->ArgCount >= 0) { - int Whitespace = SkipWhitespace (0); + int MultiLine = (ModeFlags & MSM_MULTILINE) != 0; + int Whitespace = SkipWhitespace (MultiLine); if (CurC != '(') { /* Function-like macro without an argument list is not replaced */ SB_AppendStr (Target, M->Name); - if (Whitespace) { + if (Whitespace > 0) { SB_AppendChar (Target, ' '); } + + /* Directives can only be found in an argument list + ** that spans multiple lines. + */ + if (MultiLine) { + if (CurC == '#') { + /* If we were going to support #pragma in + ** macro argument list, it would be output + ** to OLine. + */ + if (OLine == 0) { + OLine = Target; + ParseDirectives (ModeFlags); + OLine = 0; + } else { + ParseDirectives (ModeFlags); + } + } + /* Add the source info to preprocessor output if needed */ + AddPreLine (Target); + } } else { /* Function-like macro */ - ExpandMacro (Target, M, 0); + if (OLine == 0) { + OLine = Target; + ExpandMacro (Target, M, MultiLine); + OLine = 0; + } else { + ExpandMacro (Target, M, MultiLine); + } } } else { /* Object-like macro */ @@ -935,97 +916,19 @@ static void ProcessSingleLine (StrBuf* Source, SB_AppendStr (Target, Ident); } } - } else if (HandleHeader && (CurC == '<' || CurC == '\"')) { - CopyHeaderNameToken (Target); - } else if (IsQuote (CurC)) { - CopyQuotedString (Target); } else { - SB_AppendChar (Target, CurC); - NextChar (); - } - } - - /* Switch back to the old source */ - InitLine (OldSource); - - /* Restore the source input index */ - SB_SetIndex (Source, OldIndex); -} - - - -static void MacroReplacement (StrBuf* Source, StrBuf* Target, int MultiLine) -/* Perform macro replacement. */ -{ - ident Ident; - Macro* M; - - /* Remember the current input and switch to Source */ - StrBuf* OldSource = InitLine (Source); - - /* Loop substituting macros */ - while (CurC != '\0') { - /* If we have an identifier, check if it's a macro */ - if (IsSym (Ident)) { - /* Check if it's a macro */ - if ((M = FindMacro (Ident)) != 0 && !M->Expanding) { - /* Check if this is a function-like macro */ - if (M->ArgCount >= 0) { - int Whitespace = SkipWhitespace (MultiLine); - if (CurC != '(') { - /* Function-like macro without an argument list is not replaced */ - SB_AppendStr (Target, M->Name); - if (Whitespace > 0) { - SB_AppendChar (Target, ' '); - } - - /* Directives can only be found in an argument list - ** that spans multiple lines. - */ - if (MultiLine) { - if (CurC == '#') { - /* If we were going to support #pragma in - ** macro argument list, it would be output - ** to OLine. - */ - if (OLine == 0) { - OLine = Target; - ParseDirectives (0); - OLine = 0; - } else { - ParseDirectives (0); - } - } - /* Add the source info to preprocessor output if needed */ - AddPreLine (Target); - } - } else { - /* Function-like macro */ - if (OLine == 0) { - OLine = Target; - ExpandMacro (Target, M, MultiLine); - OLine = 0; - } else { - ExpandMacro (Target, M, MultiLine); - } - } + if ((ModeFlags & MSM_TOK_HEADER) != 0 && (CurC == '<' || CurC == '\"')) { + CopyHeaderNameToken (Target); + } else if (IsQuote (CurC)) { + CopyQuotedString (Target); + } else { + int Whitespace = SkipWhitespace (0); + if (Whitespace) { + SB_AppendChar (Target, ' '); } else { - /* Object-like macro */ - ExpandMacro (Target, M, 0); + SB_AppendChar (Target, CurC); + NextChar (); } - } else { - /* An identifier, keep it */ - SB_AppendStr (Target, Ident); - } - } else if (IsQuote (CurC)) { - CopyQuotedString (Target); - } else { - int Whitespace = SkipWhitespace (0); - if (Whitespace) { - SB_AppendChar (Target, ' '); - } else { - SB_AppendChar (Target, CurC); - NextChar (); } } } @@ -1260,7 +1163,7 @@ static int DoIf (int Skip) /* Macro-replace a single line with support for the "defined" operator */ SB_Clear (MLine); - ProcessSingleLine (Line, MLine, 1, 0); + PreprocessDirective (Line, MLine, MSM_OP_DEFINED); /* Read from the processed line */ SB_Reset (MLine); @@ -1324,7 +1227,7 @@ static void DoInclude (void) /* Macro-replace a single line with special support for <filename> */ SB_Clear (MLine); - ProcessSingleLine (Line, MLine, 0, 1); + PreprocessDirective (Line, MLine, MSM_TOK_HEADER); /* Read from the processed line */ SB_Reset (MLine); @@ -1400,7 +1303,7 @@ static void DoPragma (void) /* Macro-replace a single line */ SB_Clear (MLine); - ProcessSingleLine (Line, MLine, 0, 0); + PreprocessDirective (Line, MLine, MSM_NONE); /* Convert #pragma to _Pragma () */ SB_AppendStr (PragmaLine, "_Pragma ("); @@ -1448,7 +1351,7 @@ static void DoWarning (void) -static int ParseDirectives (int InArgList) +static int ParseDirectives (unsigned ModeFlags) /* Handle directives. Return 1 if any whitespace or newlines are parsed. */ { int PPSkip = 0; @@ -1576,7 +1479,7 @@ static int ParseDirectives (int InArgList) case PPD_PRAGMA: if (!PPSkip) { - if (!InArgList) { + if ((ModeFlags & MSM_IN_ARG_LIST) == 0) { DoPragma (); } else { PPError ("Embedded #pragma directive within macro arguments is unsupported"); @@ -1626,11 +1529,76 @@ static int ParseDirectives (int InArgList) /*****************************************************************************/ -/* Preprocessor */ +/* Preprocessing */ /*****************************************************************************/ +static void TranslationPhase3 (StrBuf* Source, StrBuf* Target) +/* Mimic Translation Phase 3. Handle old and new style comments. Collapse +** non-newline whitespace sequences. +*/ +{ + /* Switch to the new input source */ + StrBuf* OldSource = InitLine (Source); + + /* Loop removing ws and comments */ + while (CurC != '\0') { + int HasWhiteSpace = 0; + while (1) { + /* Squeeze runs of blanks */ + if (IsSpace (CurC)) { + NextChar (); + HasWhiteSpace = 1; + } else if (CurC == '/' && NextC == '*') { + OldStyleComment (); + HasWhiteSpace = 1; + } else if (IS_Get (&Standard) >= STD_C99 && CurC == '/' && NextC == '/') { + NewStyleComment (); + HasWhiteSpace = 1; + } else { + /* No more white space */ + break; + } + } + if (HasWhiteSpace) { + SB_AppendChar (Target, ' '); + } else if (IsQuote (CurC)) { + CopyQuotedString (Target); + } else { + SB_AppendChar (Target, CurC); + NextChar (); + } + } + + /* Terminate the new input line */ + SB_Terminate (Target); + + /* Switch back to the old source */ + InitLine (OldSource); +} + + + +static void PreprocessDirective (StrBuf* Source, StrBuf* Target, unsigned ModeFlags) +/* Preprocess a single line. Handle specified tokens and operators, remove +** whitespace and comments, then do macro replacement. +*/ +{ + int OldIndex = SB_GetIndex (Source); + MacroExp E; + + SkipWhitespace (0); + InitMacroExp (&E); + MacroReplacement (Source, Target, ModeFlags | MSM_IN_DIRECTIVE); + DoneMacroExp (&E); + + /* Restore the source input index */ + SB_SetIndex (Source, OldIndex); +} + + + void Preprocess (void) /* Preprocess lines count of which is affected by directives */ { @@ -1641,7 +1609,7 @@ void Preprocess (void) /* Parse any directives */ OLine = PLine; - ParseDirectives (0); + ParseDirectives (MSM_MULTILINE); OLine = 0; /* Add the source info to preprocessor output if needed */ @@ -1651,7 +1619,7 @@ void Preprocess (void) AppendIndent (PLine, SB_GetIndex (Line)); /* Expand macros if any */ - MacroReplacement (Line, PLine, 1); + MacroReplacement (Line, PLine, MSM_MULTILINE); /* Add the source info to preprocessor output if needed */ AddPreLine (PLine); From 5d5bd472c637d8ec5304e1b152e2930abd8e3399 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Aug 2022 00:27:21 +0800 Subject: [PATCH 1772/2710] Removed extra whitespace at line ends in preprocess-only output (-E). Increased threshold from 5 to 7 for skipped newlines with #line directives in preprocess-only output (-E). --- src/cc65/preproc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 855d59844..76a625f53 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -299,7 +299,7 @@ static void AddPreLine (StrBuf* Str) return; } - if (FileChanged || PendingNewLines > 4) { + if (FileChanged || PendingNewLines > 6) { /* Output #line directives as source info */ StrBuf Comment = AUTO_STRBUF_INITIALIZER; if (SB_NotEmpty (Str) && SB_LookAtLast (Str) != '\n') { @@ -933,6 +933,11 @@ static void MacroReplacement (StrBuf* Source, StrBuf* Target, unsigned ModeFlags } } + /* Drop whitespace at the end */ + if (IsBlank (SB_LookAtLast (Target))) { + SB_Drop (Target, 1); + } + /* Switch back the input */ InitLine (OldSource); } From 9565f41381285d06814c993c75148d8f49381750 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 19 Aug 2022 13:27:56 +0800 Subject: [PATCH 1773/2710] Improved Diagnostic with #include. --- src/cc65/preproc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 76a625f53..f1328c4d0 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1254,7 +1254,7 @@ static void DoInclude (void) break; default: - PPError ("'\"' or '<' expected"); + PPError ("#include expects \"FILENAME\" or <FILENAME>"); goto Done; } NextChar (); @@ -1274,7 +1274,7 @@ static void DoInclude (void) CheckExtraTokens ("include"); /* Open the include file */ OpenIncludeFile (SB_GetConstBuf (&Filename), IT); - } else if (CurC == '\0') { + } else { /* No terminator found */ PPError ("#include expects \"FILENAME\" or <FILENAME>"); } From 3fbefdef451de5a72d2cbf4f86a00d1e6896f8b1 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 19 Aug 2022 18:48:52 +0800 Subject: [PATCH 1774/2710] Fixed warning on forward declaration of enums. Fixed the issue that global static variables put on zeropage were missing optimization. --- src/cc65/compile.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index d1f78098d..7f2cd8ba0 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -207,7 +207,7 @@ static void Parse (void) /* Allow initialization */ if (CurTok.Tok == TOK_ASSIGN) { - /* This is a definition */ + /* This is a definition with storage */ if (SymIsDef (Entry)) { Error ("Global variable '%s' has already been defined", Entry->Name); @@ -251,6 +251,7 @@ static void Parse (void) ParseInit (Entry->Type); } else { + /* This is a declaration */ if (IsTypeVoid (Decl.Type)) { /* We cannot declare variables of type void */ Error ("Illegal type for variable '%s'", Decl.Ident); @@ -261,6 +262,15 @@ static void Parse (void) Error ("Variable '%s' has unknown size", Decl.Ident); } } else { + /* Check for enum forward declaration. + ** Warn about it when extensions are not allowed. + */ + if (Size == 0 && IsTypeEnum (Decl.Type)) { + if (IS_Get (&Standard) != STD_CC65) { + Warning ("ISO C forbids forward references to 'enum' types"); + } + } + /* A global (including static) uninitialized variable is ** only a tentative definition. For example, this is valid: ** int i; @@ -287,17 +297,9 @@ static void Parse (void) } /* Make the symbol zeropage according to the segment address size */ - if ((Entry->Flags & SC_EXTERN) != 0) { + if ((Entry->Flags & SC_STATIC) != 0) { if (GetSegAddrSize (GetSegName (CS->CurDSeg)) == ADDR_SIZE_ZP) { Entry->Flags |= SC_ZEROPAGE; - /* Check for enum forward declaration. - ** Warn about it when extensions are not allowed. - */ - if (Size == 0 && IsTypeEnum (Decl.Type)) { - if (IS_Get (&Standard) != STD_CC65) { - Warning ("ISO C forbids forward references to 'enum' types"); - } - } } } From 47ee543fe00783ddaae2b1aabe9606bfe4b33832 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 21 Aug 2022 00:11:19 +0800 Subject: [PATCH 1775/2710] Added testcase for some part of PR #1833. --- test/val/pr1833.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 test/val/pr1833.c diff --git a/test/val/pr1833.c b/test/val/pr1833.c new file mode 100644 index 000000000..bdc820811 --- /dev/null +++ b/test/val/pr1833.c @@ -0,0 +1,13 @@ +/* Test for PR #1833 fixes */ + +#define char 1 + +#if char && !int && L'A' - L'B' == 'A' - 'B' && L'A' == 'A' +#else +#error +#endif + +int main(void) +{ + return 0; +} From fd7f32ecd3c3bcb331612a17b79e25a8f1ee8b99 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Aug 2022 14:31:51 +0800 Subject: [PATCH 1776/2710] Improved error handling and diagnostics with failed macro definitions. --- src/cc65/preproc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index f1328c4d0..ffae5baa6 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1004,6 +1004,7 @@ static void DoDefine (void) if (CurC != '.' || NextC != '.') { PPError ("'...' expected"); ClearLine (); + FreeMacro (M); return; } NextChar (); @@ -1043,8 +1044,9 @@ static void DoDefine (void) /* Check for a right paren and eat it if we find one */ if (CurC != ')') { - PPError ("')' expected"); + PPError ("')' expected for macro definition"); ClearLine (); + FreeMacro (M); return; } NextChar (); From 57ad7c87661f2bf313321e71476f5b75ecaaf548 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Aug 2022 14:31:53 +0800 Subject: [PATCH 1777/2710] Improved diagnostics about C++ style comments for c89. --- src/cc65/preproc.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index ffae5baa6..a49fade20 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -400,6 +400,11 @@ static void OldStyleComment (void) static void NewStyleComment (void) /* Remove a new style C comment from line. */ { + /* Diagnose if this is unsupported */ + if (IS_Get (&Standard) < STD_C99) { + PPError ("C++ style comments are not allowed in C89"); + } + /* Beware: Because line continuation chars are handled when reading ** lines, we may only skip until the end of the source line, which ** may not be the same as the end of the input line. The end of the @@ -432,7 +437,7 @@ static int SkipWhitespace (int SkipLines) } else if (CurC == '/' && NextC == '*') { OldStyleComment (); Skipped = 1; - } else if (IS_Get (&Standard) >= STD_C99 && CurC == '/' && NextC == '/') { + } else if (CurC == '/' && NextC == '/') { NewStyleComment (); Skipped = 1; } else if (CurC == '\0' && SkipLines) { @@ -1560,7 +1565,7 @@ static void TranslationPhase3 (StrBuf* Source, StrBuf* Target) } else if (CurC == '/' && NextC == '*') { OldStyleComment (); HasWhiteSpace = 1; - } else if (IS_Get (&Standard) >= STD_C99 && CurC == '/' && NextC == '/') { + } else if (CurC == '/' && NextC == '/') { NewStyleComment (); HasWhiteSpace = 1; } else { From 95e5471cd6a4ac49ecb188562c3d02023ade3798 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Aug 2022 14:34:50 +0800 Subject: [PATCH 1778/2710] Better preprocess macro expansion. --- src/cc65/input.c | 91 ++- src/cc65/input.h | 10 + src/cc65/macrotab.c | 68 +- src/cc65/macrotab.h | 16 +- src/cc65/preproc.c | 1561 ++++++++++++++++++++++++++++++++++++------- 5 files changed, 1414 insertions(+), 332 deletions(-) diff --git a/src/cc65/input.c b/src/cc65/input.c index 0e8fc3276..5754b1054 100644 --- a/src/cc65/input.c +++ b/src/cc65/input.c @@ -103,8 +103,8 @@ static Collection IFiles = STATIC_COLLECTION_INITIALIZER; /* List of all active files */ static Collection AFiles = STATIC_COLLECTION_INITIALIZER; -/* Input stack used when preprocessing. */ -static Collection InputStack = STATIC_COLLECTION_INITIALIZER; +/* Input stack used when preprocessing */ +static Collection* CurrentInputStack; /* Counter for the __COUNTER__ macro */ static unsigned MainFileCounter; @@ -394,34 +394,37 @@ static void GetInputChar (void) ** are read by this function. */ { - /* Drop all pushed fragments that don't have data left */ - while (SB_GetIndex (Line) >= SB_GetLen (Line)) { - /* Cannot read more from this line, check next line on stack if any */ - if (CollCount (&InputStack) == 0) { - /* This is THE line */ - break; - } - FreeStrBuf (Line); - Line = CollPop (&InputStack); - } - - /* Now get the next characters from the line */ - if (SB_GetIndex (Line) >= SB_GetLen (Line)) { - CurC = NextC = '\0'; + /* Get the next-next character from the line */ + if (SB_GetIndex (Line) + 1 < SB_GetLen (Line)) { + /* CurC and NextC come from this fragment */ + CurC = SB_AtUnchecked (Line, SB_GetIndex (Line)); + NextC = SB_AtUnchecked (Line, SB_GetIndex (Line) + 1); } else { - CurC = SB_AtUnchecked (Line, SB_GetIndex (Line)); - if (SB_GetIndex (Line) + 1 < SB_GetLen (Line)) { - /* NextC comes from this fragment */ - NextC = SB_AtUnchecked (Line, SB_GetIndex (Line) + 1); - } else { + /* NextC is '\0' by default */ + NextC = '\0'; + + /* Drop all pushed fragments that don't have data left */ + if (CurrentInputStack != 0) { + while (SB_GetIndex (Line) >= SB_GetLen (Line)) { + /* Cannot read more from this line, check next line on stack if any */ + if (CollCount (CurrentInputStack) == 0) { + /* This is THE line */ + break; + } + FreeStrBuf (Line); + Line = CollPop (CurrentInputStack); + } + /* NextC comes from next fragment */ - if (CollCount (&InputStack) > 0) { + if (CollCount (CurrentInputStack) > 0) { NextC = ' '; - } else { - NextC = '\0'; } } + + /* Get CurC from the line */ + CurC = SB_LookAt (Line, SB_GetIndex (Line)); } + } @@ -441,16 +444,46 @@ void NextChar (void) +Collection* UseInputStack (Collection* InputStack) +/* Use the provided input stack for incoming input. Return the previously used +** InputStack. +*/ +{ + Collection* OldInputStack = CurrentInputStack; + + CurrentInputStack = InputStack; + return OldInputStack; +} + + + +void PushLine (StrBuf* L) +/* Save the current input line and use a new one */ +{ + PRECONDITION (CurrentInputStack != 0); + if (SB_GetIndex (L) < SB_GetLen (L)) { + CollAppend (CurrentInputStack, Line); + Line = L; + GetInputChar (); + } else { + FreeStrBuf (L); + } +} + + + void ClearLine (void) /* Clear the current input line */ { - unsigned I; + if (CurrentInputStack != 0) { + unsigned I; - /* Remove all pushed fragments from the input stack */ - for (I = 0; I < CollCount (&InputStack); ++I) { - FreeStrBuf (CollAtUnchecked (&InputStack, I)); + /* Remove all pushed fragments from the input stack */ + for (I = 0; I < CollCount (CurrentInputStack); ++I) { + FreeStrBuf (Line); + Line = CollPop (CurrentInputStack); + } } - CollDeleteAll (&InputStack); /* Clear the contents of Line */ SB_Clear (Line); diff --git a/src/cc65/input.h b/src/cc65/input.h index fb24bbaa8..f9565229b 100644 --- a/src/cc65/input.h +++ b/src/cc65/input.h @@ -70,6 +70,8 @@ extern StrBuf* Line; extern char CurC; extern char NextC; +typedef struct Collection Collection; + /*****************************************************************************/ @@ -95,6 +97,14 @@ void NextChar (void); ** are read by this function. */ +Collection* UseInputStack (Collection* InputStack); +/* Use the provided input stack for incoming input. Return the previously used +** InputStack. +*/ + +void PushLine (StrBuf* L); +/* Save the current input line and use a new one */ + void ClearLine (void); /* Clear the current input line */ diff --git a/src/cc65/macrotab.c b/src/cc65/macrotab.c index 0e80cd638..3bfae0811 100644 --- a/src/cc65/macrotab.c +++ b/src/cc65/macrotab.c @@ -74,19 +74,17 @@ Macro* NewMacro (const char* Name) */ { /* Get the length of the macro name */ - unsigned Len = strlen(Name); + unsigned Len = strlen (Name); /* Allocate the structure */ Macro* M = (Macro*) xmalloc (sizeof(Macro) + Len); /* Initialize the data */ - M->Next = 0; - M->Expanding = 0; - M->ArgCount = -1; /* Flag: Not a function like macro */ - M->MaxArgs = 0; - InitCollection (&M->FormalArgs); + M->Next = 0; + M->ParamCount = -1; /* Flag: Not a function-like macro */ + InitCollection (&M->Params); SB_Init (&M->Replacement); - M->Variadic = 0; + M->Variadic = 0; memcpy (M->Name, Name, Len+1); /* Return the new macro */ @@ -102,10 +100,10 @@ void FreeMacro (Macro* M) { unsigned I; - for (I = 0; I < CollCount (&M->FormalArgs); ++I) { - xfree (CollAtUnchecked (&M->FormalArgs, I)); + for (I = 0; I < CollCount (&M->Params); ++I) { + xfree (CollAtUnchecked (&M->Params, I)); } - DoneCollection (&M->FormalArgs); + DoneCollection (&M->Params); SB_Done (&M->Replacement); xfree (M); } @@ -121,12 +119,12 @@ Macro* CloneMacro (const Macro* M) Macro* New = NewMacro (M->Name); unsigned I; - for (I = 0; I < CollCount (&M->FormalArgs); ++I) { - /* Copy the argument */ - const char* Arg = CollAtUnchecked (&M->FormalArgs, I); - CollAppend (&New->FormalArgs, xstrdup (Arg)); + for (I = 0; I < CollCount (&M->Params); ++I) { + /* Copy the parameter */ + const char* Param = CollAtUnchecked (&M->Params, I); + CollAppend (&New->Params, xstrdup (Param)); } - New->ArgCount = M->ArgCount; + New->ParamCount = M->ParamCount; New->Variadic = M->Variadic; SB_Copy (&New->Replacement, &M->Replacement); @@ -265,14 +263,14 @@ Macro* FindMacro (const char* Name) -int FindMacroArg (Macro* M, const char* Arg) -/* Search for a formal macro argument. If found, return the index of the -** argument. If the argument was not found, return -1. +int FindMacroParam (const Macro* M, const char* Param) +/* Search for a macro parameter. If found, return the index of the parameter. +** If the parameter was not found, return -1. */ { unsigned I; - for (I = 0; I < CollCount (&M->FormalArgs); ++I) { - if (strcmp (CollAtUnchecked (&M->FormalArgs, I), Arg) == 0) { + for (I = 0; I < CollCount (&M->Params); ++I) { + if (strcmp (CollAtUnchecked (&M->Params, I), Param) == 0) { /* Found */ return I; } @@ -284,25 +282,25 @@ int FindMacroArg (Macro* M, const char* Arg) -void AddMacroArg (Macro* M, const char* Arg) -/* Add a formal macro argument. */ +void AddMacroParam (Macro* M, const char* Param) +/* Add a macro parameter. */ { - /* Check if we have a duplicate macro argument, but add it anyway. - ** Beware: Don't use FindMacroArg here, since the actual argument array + /* Check if we have a duplicate macro parameter, but add it anyway. + ** Beware: Don't use FindMacroParam here, since the actual argument array ** may not be initialized. */ unsigned I; - for (I = 0; I < CollCount (&M->FormalArgs); ++I) { - if (strcmp (CollAtUnchecked (&M->FormalArgs, I), Arg) == 0) { + for (I = 0; I < CollCount (&M->Params); ++I) { + if (strcmp (CollAtUnchecked (&M->Params, I), Param) == 0) { /* Found */ - PPError ("Duplicate macro parameter: '%s'", Arg); + PPError ("Duplicate macro parameter: '%s'", Param); break; } } - /* Add the new argument */ - CollAppend (&M->FormalArgs, xstrdup (Arg)); - ++M->ArgCount; + /* Add the new parameter */ + CollAppend (&M->Params, xstrdup (Param)); + ++M->ParamCount; } @@ -313,14 +311,14 @@ int MacroCmp (const Macro* M1, const Macro* M2) int I; /* Argument count must be identical */ - if (M1->ArgCount != M2->ArgCount) { + if (M1->ParamCount != M2->ParamCount) { return 1; } - /* Compare the arguments */ - for (I = 0; I < M1->ArgCount; ++I) { - if (strcmp (CollConstAt (&M1->FormalArgs, I), - CollConstAt (&M2->FormalArgs, I)) != 0) { + /* Compare the parameters */ + for (I = 0; I < M1->ParamCount; ++I) { + if (strcmp (CollConstAt (&M1->Params, I), + CollConstAt (&M2->Params, I)) != 0) { return 1; } } diff --git a/src/cc65/macrotab.h b/src/cc65/macrotab.h index 6a09d7281..52b812b2f 100644 --- a/src/cc65/macrotab.h +++ b/src/cc65/macrotab.h @@ -55,10 +55,8 @@ typedef struct Macro Macro; struct Macro { Macro* Next; /* Next macro with same hash value */ - int Expanding; /* Are we currently expanding this macro? */ - int ArgCount; /* Number of parameters, -1 = no parens */ - unsigned MaxArgs; /* Size of formal argument list */ - Collection FormalArgs; /* Formal argument list (char*) */ + int ParamCount; /* Number of parameters, -1 = no parens */ + Collection Params; /* Parameter list (char*) */ StrBuf Replacement; /* Replacement text */ unsigned char Variadic; /* C99 variadic macro */ char Name[1]; /* Name, dynamically allocated */ @@ -120,13 +118,13 @@ INLINE int IsMacro (const char* Name) # define IsMacro(Name) (FindMacro (Name) != 0) #endif -int FindMacroArg (Macro* M, const char* Arg); -/* Search for a formal macro argument. If found, return the index of the -** argument. If the argument was not found, return -1. +int FindMacroParam (const Macro* M, const char* Param); +/* Search for a macro parameter. If found, return the index of the parameter. +** If the parameter was not found, return -1. */ -void AddMacroArg (Macro* M, const char* Arg); -/* Add a formal macro argument. */ +void AddMacroParam (Macro* M, const char* Param); +/* Add a macro parameter. */ int MacroCmp (const Macro* M1, const Macro* M2); /* Compare two macros and return zero if both are identical. */ diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 020df011a..8b3d43d7f 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -74,11 +74,20 @@ #define MSM_IN_DIRECTIVE 0x02U /* In PP directives scan */ #define MSM_IN_ARG_LIST 0x04U /* In macro argument scan */ #define MSM_IN_ARG_EXPANSION 0x08U /* In expansion on arguments */ -#define MSM_OP_DEFINED 0x10U /* Handle the defined operator */ -#define MSM_OP_HAS_INCLUDE 0x20U /* Handle the __has_include operator */ -#define MSM_OP_HAS_C_ATTRIBUTE 0x40U /* Handle the __has_c_attribute operator */ +#define MSM_OP_DEFINED 0x10U /* Handle the "defined" operator */ +#define MSM_OP_HAS_INCLUDE 0x20U /* Handle the "__has_include" operator */ +#define MSM_OP_HAS_C_ATTRIBUTE 0x40U /* Handle the "__has_c_attribute" operator */ #define MSM_TOK_HEADER 0x80U /* Support header tokens */ +/* Macro expansion state flags */ +#define MES_NONE 0x00U /* Nothing */ +#define MES_FIRST_TOKEN 0x01U /* Mark for detecting pp-token count in the sequence */ +#define MES_MULTIPLE_TOKEN 0x02U /* Multiple pp-tokens are detected in the sequence */ +#define MES_BEGIN_WITH_IDENT 0x04U /* The first pp-token of the sequence is an identifier */ +#define MES_HAS_REPLACEMENT 0x10U /* Macro argument has cached replacement result */ +#define MES_NO_VA_COMMA 0x20U /* Variadic macro called w/o the ',' in front of variable argument */ +#define MES_ERROR 0x80U /* Error has occurred in macro expansion */ + /* Management data for #if */ #define IFCOND_NONE 0x00U #define IFCOND_SKIP 0x01U @@ -88,6 +97,9 @@ /* Current PP if stack */ static PPIfStack* PPStack; +/* Input backup for rescan */ +static Collection* CurRescanStack; + /* Intermediate input buffers */ static StrBuf* PLine; /* Buffer for macro expansion */ static StrBuf* MLine; /* Buffer for macro expansion in #pragma */ @@ -100,8 +112,28 @@ static int FileChanged; /* Structure used when expanding macros */ typedef struct MacroExp MacroExp; struct MacroExp { - Collection ActualArgs; /* Actual arguments */ - StrBuf Replacement; /* Replacement with arguments substituted */ + Collection Args; /* Actual arguments (for function-like) */ + Collection HideSets; /* Macros hidden from expansion */ + StrBuf Tokens; /* Originally read sequence */ + unsigned IdentCount; /* Count of identifiers in the pp-token sequence */ + unsigned Flags; /* Macro argument flags */ + MacroExp* Replaced; /* Macro-replaced version of this pp-token sequence */ + unsigned FirstTokLen; /* Length of the first pp-token */ + unsigned LastTokLen; /* Length of the last pp-token */ +}; + +typedef struct HideRange HideRange; +struct HideRange +{ + HideRange* Next; + unsigned Start; + unsigned End; +}; + +typedef struct HiddenMacro HiddenMacro; +struct HiddenMacro { + const Macro* M; + HideRange* HS; }; @@ -125,8 +157,16 @@ static void PreprocessDirective (StrBuf* Source, StrBuf* Target, unsigned ModeFl static int ParseDirectives (unsigned ModeFlags); /* Handle directives. Return 1 if any whitespace or newlines are parsed. */ -static void MacroReplacement (StrBuf* Source, StrBuf* Target, unsigned ModeFlags); -/* Scan for and perform macro replacement */ +static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsigned ModeFlags); +/* Scan for and perform macro replacement. Return the count of identifiers in +** the replacement result. +*/ + +static MacroExp* InitMacroExp (MacroExp* E); +/* Initialize a MacroExp structure */ + +static void DoneMacroExp (MacroExp* E); +/* Cleanup after use of a MacroExp structure */ @@ -201,17 +241,417 @@ static ppdirective_t FindPPDirectiveType (const char* Ident) +/*****************************************************************************/ +/* MacroExp helpers */ +/*****************************************************************************/ + + + +static HideRange* NewHideRange (unsigned Start, unsigned Len) +/* Create a hide range */ +{ + HideRange* HS = xmalloc (sizeof (HideRange)); + + HS->Next = 0; + HS->Start = Start; + HS->End = Start + Len; + + return HS; +} + + + +static void FreeHideRange (HideRange* HS) +/* Free a hide range */ +{ + xfree (HS); +} + + + +static HiddenMacro* NewHiddenMacro (const Macro* M) +/* Create a new struct for the hidden macro */ +{ + HiddenMacro* MHS = xmalloc (sizeof (HiddenMacro)); + + MHS->M = M; + MHS->HS = 0; + + return MHS; +} + + + +static void FreeHiddenMacro (HiddenMacro* MHS) +/* Free the struct and all ranges of the hidden macro */ +{ + HideRange* This; + HideRange* Next; + + if (MHS == 0) { + return; + } + + for (This = MHS->HS; This != 0; This = Next) { + Next = This->Next; + FreeHideRange (This); + } + + xfree (MHS); +} + + + /*****************************************************************************/ /* struct MacroExp */ /*****************************************************************************/ +static HiddenMacro* ME_FindHiddenMacro (const MacroExp* E, const Macro* M) +/* Find the macro hide set */ +{ + unsigned I; + + for (I = 0; I < CollCount (&E->HideSets); ++I) { + HiddenMacro* MHS = CollAtUnchecked (&E->HideSets, I); + if (MHS->M == M) { + return MHS; + } + } + + return 0; +} + + + +static void ME_HideMacro (unsigned Idx, unsigned Count, MacroExp* E, const Macro* M) +/* Hide the macro from the Idx'th identifier */ +{ + if (Count > 0) { + /* Find the macro hideset */ + HiddenMacro* MHS = ME_FindHiddenMacro (E, M); + HideRange** This; + + /* New hidden section */ + HideRange* NewHS = NewHideRange (Idx, Count); + + /* New macro to hide */ + if (MHS == 0) { + MHS = NewHiddenMacro (M); + CollAppend (&E->HideSets, MHS); + } + This = &MHS->HS; + + if (*This == 0) { + *This = NewHS; + } else { + /* Insert */ + while (1) { + if (*This == 0 || NewHS->Start <= (*This)->Start) { + /* Insert before */ + NewHS->Next = *This; + *This = NewHS; + break; + } else if (NewHS->Start <= (*This)->End) { + /* Insert after */ + NewHS->Next = (*This)->Next; + (*This)->Next = NewHS; + break; + } + /* Advance */ + This = &(*This)->Next; + } + + /* Merge */ + while (*This != 0) { + HideRange* Next = (*This)->Next; + + if (Next != 0 && (*This)->End >= Next->Start) { + /* Expand this to the next */ + if ((*This)->End < Next->End) { + (*This)->End = Next->End; + } + + /* Remove next */ + (*This)->Next = Next->Next; + FreeHideRange (Next); + + /* Advance */ + This = &(*This)->Next; + } else { + /* No more */ + break; + } + } + } + } +} + + + +static int ME_CanExpand (unsigned Idx, const MacroExp* E, const Macro* M) +/* Return 1 if the macro can be expanded with the Idx'th identifier */ +{ + if (E != 0) { + /* Find the macro hideset */ + HiddenMacro* MHS = ME_FindHiddenMacro (E, M); + if (MHS != 0) { + /* Check if the macro is hidden from this identifier */ + HideRange* HS = MHS->HS; + while (HS != 0) { + /* If the macro name overlaps with the range where the macro is hidden, + ** the macro cannot be expanded. + */ + if (Idx >= HS->Start && Idx < HS->End) { + return 0; + } + HS = HS->Next; + } + } + } + + return 1; +} + + + +static void ME_OffsetHideSets (unsigned Idx, unsigned Offs, MacroExp* E) +/* Adjust all macro hide set ranges for the macro expansion when the identifier +** at Idx is replaced with a count of Offs + 1 (if Offs > 0) of identifiers. +*/ +{ + if (Offs != 0) { + unsigned I; + + for (I = 0; I < CollCount (&E->HideSets); ++I) { + HiddenMacro* MHS = CollAtUnchecked (&E->HideSets, I); + HideRange* This; + + for (This = MHS->HS; This != 0; This = This->Next) { + if (Idx < This->Start) { + This->Start += Offs; + This->End += Offs; + } else if (Idx < This->End) { + This->End += Offs; + } + } + } + } +} + + + +static void ME_RemoveToken (unsigned Idx, unsigned Count, MacroExp* E) +/* Remove the Idx'th identifier token from tracking and offset all hidden +** ranges accordingly. +*/ +{ + unsigned I; + + for (I = 0; I < CollCount (&E->HideSets); ++I) { + HiddenMacro* MHS = CollAtUnchecked (&E->HideSets, I); + HideRange* This; + HideRange** Prev; + + for (Prev = &MHS->HS, This = *Prev; This != 0; This = *Prev) { + if (Idx < This->Start) { + if (This->Start - Idx >= Count) { + This->Start -= Count; + This->End -= Count; + } else { + if (This->End - Idx > Count) { + This->Start = Idx; + This->End -= Count; + } else { + /* Remove */ + (*Prev) = This->Next; + FreeHideRange (This); + continue; + } + } + } else if (Idx < This->End) { + if (This->End - Idx > Count) { + This->End -= Count; + } else { + This->End = Idx; + } + + if (This->End == This->Start) { + /* Remove */ + (*Prev) = This->Next; + FreeHideRange (This); + continue; + } + } + + Prev = &This->Next; + } + } +} + + + +static void ME_AddArgHideSets (unsigned Idx, const MacroExp* A, MacroExp* Parent) +/* Propagate the macro hide sets of the substituted argument starting as the +** Idx'th identifier of the result. +*/ +{ + unsigned I; + + /* Move the hide set generated with in the argument as it will be freed later */ + for (I = 0; I < CollCount (&A->HideSets); ++I) { + HiddenMacro* MHS = CollAtUnchecked (&A->HideSets, I); + HideRange* HS; + + for (HS = MHS->HS; HS != 0; HS = HS->Next) { + ME_HideMacro (Idx + HS->Start, HS->End - HS->Start, Parent, MHS->M); + } + } +} + + + +static void ME_DoneHideSets (MacroExp* E) +/* Free all of hidden macros for the macro expansion */ +{ + unsigned I; + + for (I = 0; I < CollCount (&E->HideSets); ++I) { + HiddenMacro* MHS = CollAtUnchecked (&E->HideSets, I); + FreeHiddenMacro (MHS); + } + DoneCollection (&E->HideSets); +} + + + +static void ME_SetTokLens (MacroExp* E, unsigned TokLen) +/* Set token lengths and flags for macro expansion struct */ +{ + E->LastTokLen = TokLen; + if ((E->Flags & MES_FIRST_TOKEN) != 0) { + E->Flags &= ~MES_FIRST_TOKEN; + E->FirstTokLen = E->LastTokLen; + } else { + E->Flags |= MES_MULTIPLE_TOKEN; + } +} + + + +static MacroExp* ME_MakeReplaced (MacroExp* A) +/* Make a replaced version of the argument */ +{ + /* Replace the parameter with actual argument tokens */ + if ((A->Flags & MES_HAS_REPLACEMENT) == 0) { + A->Replaced = xmalloc (sizeof (MacroExp)); + + InitMacroExp (A->Replaced); + SB_Reset (&A->Tokens); + + /* Propagate the hide sets */ + ME_AddArgHideSets (0, A, A->Replaced); + + /* Do macro expansion on the argument */ + A->Replaced->IdentCount = ReplaceMacros (&A->Tokens, + &A->Replaced->Tokens, + A->Replaced, + MSM_IN_ARG_EXPANSION); + + A->Flags |= MES_HAS_REPLACEMENT; + } + + return A->Replaced != 0 ? A->Replaced : A; +} + + + +static MacroExp* ME_GetOriginalArg (const MacroExp* E, unsigned Index) +/* Return an actual macro argument with the given index */ +{ + return CollAt (&E->Args, Index); +} + + + +static MacroExp* ME_GetReplacedArg (const MacroExp* E, unsigned Index) +/* Return a replaced macro argument with the given index */ +{ + return ME_MakeReplaced (CollAt (&E->Args, Index)); +} + + + +static MacroExp* ME_AppendArg (MacroExp* E, MacroExp* Arg) +/* Add a copy of Arg to the list of actual macro arguments. +** NOTE: This function will clear the token sequence of Arg! +*/ +{ + MacroExp* A = xmalloc (sizeof (MacroExp)); + + /* Initialize our MacroExp structure */ + InitMacroExp (A); + + /* Copy info about the original strings */ + A->IdentCount = Arg->IdentCount; + A->Flags = Arg->Flags; + A->FirstTokLen = Arg->FirstTokLen; + A->LastTokLen = Arg->LastTokLen; + + /* Move the contents of Arg to A */ + SB_Move (&A->Tokens, &Arg->Tokens); + + /* Add A to the list of actual arguments */ + CollAppend (&E->Args, A); + + return A; +} + + + +static void ME_ClearArgs (MacroExp* E) +/* Clear all read arguments for macro expansion */ +{ + unsigned I; + + /* Delete the list with actual arguments */ + for (I = 0; I < CollCount (&E->Args); ++I) { + MacroExp* A = CollAtUnchecked (&E->Args, I); + + /* Destroy the macro expansion structure and then free memory allocated + ** for it. + */ + DoneMacroExp (A); + xfree (A); + } + + DoneCollection (&E->Args); + InitCollection (&E->Args); +} + + + +static int ME_IsNextArgVariadic (const MacroExp* E, const Macro* M) +/* Return true if the next actual argument we will add is a variadic one */ +{ + return (M->Variadic && + M->ParamCount == (int) CollCount (&E->Args) + 1); +} + + + static MacroExp* InitMacroExp (MacroExp* E) /* Initialize a MacroExp structure */ { - InitCollection (&E->ActualArgs); - SB_Init (&E->Replacement); + InitCollection (&E->Args); + InitCollection (&E->HideSets); + SB_Init (&E->Tokens); + E->IdentCount = 0; + E->Flags = MES_FIRST_TOKEN; + E->Replaced = 0; + E->FirstTokLen = 0; + E->LastTokLen = 0; return E; } @@ -220,48 +660,12 @@ static MacroExp* InitMacroExp (MacroExp* E) static void DoneMacroExp (MacroExp* E) /* Cleanup after use of a MacroExp structure */ { - unsigned I; - - /* Delete the list with actual arguments */ - for (I = 0; I < CollCount (&E->ActualArgs); ++I) { - FreeStrBuf (CollAtUnchecked (&E->ActualArgs, I)); + ME_ClearArgs (E); + ME_DoneHideSets (E); + SB_Done (&E->Tokens); + if (E->Replaced != 0) { + DoneMacroExp (E->Replaced); } - DoneCollection (&E->ActualArgs); - SB_Done (&E->Replacement); -} - - - -static void ME_AppendActual (MacroExp* E, StrBuf* Arg) -/* Add a copy of Arg to the list of actual macro arguments. -** NOTE: This function will clear Arg! -*/ -{ - /* Create a new string buffer */ - StrBuf* A = NewStrBuf (); - - /* Move the contents of Arg to A */ - SB_Move (A, Arg); - - /* Add A to the actual arguments */ - CollAppend (&E->ActualArgs, A); -} - - - -static StrBuf* ME_GetActual (MacroExp* E, unsigned Index) -/* Return an actual macro argument with the given index */ -{ - return CollAt (&E->ActualArgs, Index); -} - - - -static int ME_ArgIsVariadic (const MacroExp* E, const Macro* M) -/* Return true if the next actual argument we will add is a variadic one */ -{ - return (M->Variadic && - M->ArgCount == (int) CollCount (&E->ActualArgs) + 1); } @@ -272,6 +676,17 @@ static int ME_ArgIsVariadic (const MacroExp* E, const Macro* M) +static void PopRescanLine (void) +/* Pop and free a rescan input line if it reaches the end */ +{ + if (CurC == '\0' && CollCount (CurRescanStack) > 1) { + FreeStrBuf (CollPop (CurRescanStack)); + InitLine (CollLast (CurRescanStack)); + } +} + + + static int MacName (char* Ident) /* Get a macro symbol name into Ident. If we have an error, print a ** diagnostic message and clear the line. @@ -431,6 +846,32 @@ static int SkipWhitespace (int SkipLines) { int Skipped = 0; int NewLine = 0; + + if (CurRescanStack != 0 && + CollCount (CurRescanStack) > 1 && + Line == CollConstLast (CurRescanStack)) { + /* Rescanning */ + while (1) { + if (IsSpace (CurC)) { + NextChar (); + Skipped = 1; + } else if (CurC == '/' && NextC == '*') { + OldStyleComment (); + Skipped = 1; + } else if (IS_Get (&Standard) >= STD_C99 && CurC == '/' && NextC == '/') { + NewStyleComment (); + Skipped = 1; + } else if (CurC == '\0') { + /* End of line, switch back input */ + PopRescanLine (); + break; + } else { + /* No more white space */ + break; + } + } + } + while (1) { if (IsSpace (CurC)) { NextChar (); @@ -521,6 +962,235 @@ static void CopyQuotedString (StrBuf* Target) +static int GetPunc (char* S) +/* Parse a punctuator token. Return 1 and store the parsed token string into S +** on success, otherwise just return 0. +*/ +{ + char C; + switch (CurC) { + + case '[': + case ']': + case '(': + case ')': + case '{': + case '}': + case '~': + case '?': + case ':': + case ';': + case ',': + /* C */ + *S++ = CurC; + NextChar (); + break; + + case '=': + case '#': + /* C or CC */ + C = *S++ = CurC; + NextChar (); + if (CurC == C) { + *S++ = C; + NextChar (); + } + break; + + case '*': + case '/': + case '%': + case '^': + case '!': + /* C or C= */ + *S++ = CurC; + NextChar (); + if (CurC == '=') { + *S++ = CurC; + NextChar (); + } + break; + + case '+': + case '&': + case '|': + /* C, CC or C= */ + C = *S++ = CurC; + NextChar (); + if (CurC == C || CurC == '=') { + *S++ = CurC; + NextChar (); + } + break; + + case '<': + case '>': + /* C, CC, C= or CC= */ + C = *S++ = CurC; + NextChar (); + if (CurC == C) { + *S++ = CurC; + if (NextC == '=') { + *S++ = NextC; + NextChar (); + } + NextChar (); + } else if (CurC == '=') { + *S++ = CurC; + NextChar (); + } + break; + + case '-': + /* C, CC, C= or C> */ + *S++ = CurC; + NextChar (); + switch (CurC) { + case '-': + case '=': + case '>': + *S++ = CurC; + NextChar (); + break; + default: + break; + } + break; + + case '.': + /* C or CCC */ + *S++ = CurC; + NextChar (); + if (CurC == '.' && NextC == '.') { + *S++ = CurC; + *S++ = NextC; + NextChar (); + NextChar (); + } + break; + + default: + return 0; + + } + + *S = '\0'; + return 1; +} + + + +static int TryPastePPTok (StrBuf* Target, + StrBuf* Appended, + unsigned FirstTokLen, + unsigned SecondTokLen) +/* Paste the whole appened pp-token sequence onto the end of the target +** pp-token sequence. Diagnose if it fails to form a valid pp-token with the +** two pp-tokens pasted together. Return 1 if succeeds. +*/ +{ + unsigned TokLen; + StrBuf* OldSource; + StrBuf Src = AUTO_STRBUF_INITIALIZER; + StrBuf Buf = AUTO_STRBUF_INITIALIZER; + + if (FirstTokLen == 0 || SecondTokLen == 0) { + SB_Append (Target, Appended); + return 1; + } + + PRECONDITION (SB_GetLen (Target) >= FirstTokLen && + SB_GetLen (Appended) >= SecondTokLen); + + /* Special casing "..", "//" and "/*" */ + if (FirstTokLen == 1) { + char C = SB_LookAt (Target, SB_GetLen (Target) - FirstTokLen); + char N = SB_LookAt (Appended, 0); + /* Avoid forming a comment introducer or an ellipsis. Note that an + ** ellipsis pp-token cannot be formed with macros anyway. + */ + if ((C == '.' && N == '.') || (C == '/' && (N == '/' || N == '*'))) { + SB_AppendChar (Target, ' '); + SB_Append (Target, Appended); + PPWarning ("Pasting formed '%c%c', an invalid preprocessing token", C, N); + + return 0; + } + } + + SB_CopyBuf (&Src, SB_GetConstBuf (Target) + SB_GetLen (Target) - FirstTokLen, FirstTokLen); + if (SecondTokLen == SB_GetLen (Appended) || IsSpace (SB_LookAt (Appended, SecondTokLen))) { + SB_AppendBuf (&Src, SB_GetConstBuf (Appended), SecondTokLen); + } else { + SB_AppendBuf (&Src, SB_GetConstBuf (Appended), SecondTokLen + 1); + } + + SB_Reset (&Src); + OldSource = InitLine (&Src); + + if (IsPPNumber (CurC, NextC)) { + /* PP-number */ + CopyPPNumber (&Buf); + } else if (IsQuote (CurC)) { + /* Quoted string */ + CopyQuotedString (&Buf); + } else { + ident Ident; + if (GetPunc (Ident)) { + /* Punctuator */ + SB_CopyStr (&Buf, Ident); + } else if (IsSym (Ident)) { + /* Identifier */ + SB_CopyStr (&Buf, Ident); + } else { + /* Unknown */ + } + } + + TokLen = SB_GetLen (&Buf); + if (TokLen < FirstTokLen + SecondTokLen) { + /* The pasting doesn't form a valid pp-token */ + while (SB_GetLen (&Buf) < FirstTokLen + SecondTokLen) { + SB_AppendChar (&Buf, CurC); + NextChar (); + } + SB_Terminate (&Buf); + PPWarning ("Pasting formed '%s', an invalid preprocessing token", + SB_GetConstBuf (&Buf)); + + /* Add a space between the tokens to avoid problems in rescanning */ + if (TokLen > FirstTokLen) { + SB_AppendChar (Target, ' '); + } + /* Append all remaining tokens */ + SB_Append (Target, Appended); + + /* No concatenation */ + TokLen = FirstTokLen; + } else { + /* Add a space after the merged token if necessary */ + SB_AppendBuf (Target, SB_GetConstBuf (Appended), SecondTokLen); + if (TokLen > FirstTokLen + SecondTokLen) { + SB_AppendChar (Target, ' '); + } + /* Append all remaining tokens */ + SB_AppendBuf (Target, + SB_GetConstBuf (Appended) + SecondTokLen, + SB_GetLen (Appended) - SecondTokLen); + } + + SB_Done (&Buf); + SB_Done (&Src); + + /* Restore old source */ + InitLine (OldSource); + + /* Return if concatenation succeeded */ + return TokLen != FirstTokLen; +} + + + static int CheckExtraTokens (const char* Name) /* Check for extra tokens at the end of the directive. Return 1 if there are ** extra tokens, otherwise 0. @@ -542,181 +1212,298 @@ static int CheckExtraTokens (const char* Name) -static void ReadMacroArgs (MacroExp* E, const Macro* M, int MultiLine) -/* Identify the arguments to a macro call as-is */ +static unsigned ReadMacroArgs (unsigned NameIdx, MacroExp* E, const Macro* M, int MultiLine) +/* Identify the arguments to a macro call as-is. Return the total count of +** identifiers in the read argument list. +*/ { - int MissingParen = 0; - unsigned Parens; /* Number of open parenthesis */ - StrBuf Arg = AUTO_STRBUF_INITIALIZER; + unsigned Idx = 0; + unsigned CountInArg = 0; + unsigned Parens = 0; /* Number of open parenthesis */ + ident Ident; + MacroExp Arg; + + InitMacroExp (&Arg); /* Eat the left paren */ NextChar (); /* Read the actual macro arguments */ - Parens = 0; while (1) { /* Squeeze runs of blanks within an arg */ int OldPendingNewLines = PendingNewLines; int Skipped = SkipWhitespace (MultiLine); - if (MultiLine && CurC == '#') { + + /* Directives can only be found in an argument list that spans + ** multiple lines. + */ + if (MultiLine && OldPendingNewLines < PendingNewLines && CurC == '#') { int Newlines = 0; - while (CurC == '#') { + while (OldPendingNewLines < PendingNewLines && CurC == '#') { Newlines += PendingNewLines - OldPendingNewLines; PendingNewLines = OldPendingNewLines; OldPendingNewLines = 0; Skipped = ParseDirectives (MSM_IN_ARG_LIST) || Skipped; - Skipped = SkipWhitespace (MultiLine) || Skipped; } PendingNewLines += Newlines; } - if (Skipped && SB_NotEmpty (&Arg)) { - SB_AppendChar (&Arg, ' '); + + /* Append a space as a separator */ + if (Skipped && SB_NotEmpty (&Arg.Tokens)) { + SB_AppendChar (&Arg.Tokens, ' '); + Skipped = 1; + } else { + Skipped = 0; } - if (CurC == '(') { - /* Nested parenthesis */ - SB_AppendChar (&Arg, CurC); - NextChar (); - ++Parens; + /* Finish reading the current argument if we are not inside nested + ** parentheses or a variadic macro argument. + */ + if (Parens == 0 && + ((CurC == ',' && !ME_IsNextArgVariadic (E, M)) || CurC == ')')) { - } else if (IsQuote (CurC)) { - - /* Quoted string - just copy */ - CopyQuotedString (&Arg); - - } else if (CurC == ',' || CurC == ')') { - - if (Parens) { - /* Comma or right paren inside nested parenthesis */ - if (CurC == ')') { - --Parens; - } - SB_AppendChar (&Arg, CurC); - NextChar (); - } else if (CurC == ',' && ME_ArgIsVariadic (E, M)) { - /* It's a comma, but we're inside a variadic macro argument, so - ** just copy it and proceed. - */ - SB_AppendChar (&Arg, CurC); - NextChar (); - } else { - /* End of actual argument. Remove whitespace from the end. */ - while (IsSpace (SB_LookAtLast (&Arg))) { - SB_Drop (&Arg, 1); - } - - /* If this is not the single empty argument for a macro with - ** an empty argument list, remember it. - */ - if (CurC != ')' || SB_NotEmpty (&Arg) || M->ArgCount > 0) { - ME_AppendActual (E, &Arg); - } - - /* Check for end of macro param list */ - if (CurC == ')') { - NextChar (); - break; - } - - /* Start the next param */ - NextChar (); - SB_Clear (&Arg); + /* End of actual argument. Remove whitespace from the end. */ + while (IsSpace (SB_LookAtLast (&Arg.Tokens))) { + SB_Drop (&Arg.Tokens, 1); } + + /* If this is not the single empty argument for a macro with an + ** empty argument list, remember it. + */ + if (CurC != ')' || SB_NotEmpty (&Arg.Tokens) || M->ParamCount > 0) { + MacroExp* A = ME_AppendArg (E, &Arg); + unsigned I; + + /* Copy the hide sets from the argument list */ + for (I = 0; I < CollCount (&E->HideSets); ++I) { + HiddenMacro* MHS = CollAtUnchecked (&E->HideSets, I); + HideRange* HS; + + for (HS = MHS->HS; HS != 0; HS = HS->Next) { + /* Get the correct hide range */ + unsigned Start = NameIdx + 1 + Idx; + unsigned Len; + if (HS->Start < Start) { + if (HS->End > Start) { + Len = HS->End - Start; + } else { + /* Out of the range */ + continue; + } + Start = 0; + } else { + Len = HS->End - HS->Start; + Start = HS->Start - Start; + } + if (Start + Len > Idx + CountInArg) { + if (Idx + CountInArg > Start) { + Len = Idx + CountInArg - Start; + } else { + /* Out of the range */ + break; + } + } + ME_HideMacro (Start, Len, A, MHS->M); + } + } + + /* More argument info */ + A->IdentCount = CountInArg; + } + + Idx += CountInArg; + + /* Check for end of macro param list */ + if (CurC == ')') { + NextChar (); + break; + } + + /* Start the next param */ + NextChar (); + DoneMacroExp (&Arg); + InitMacroExp (&Arg); + CountInArg = 0; + + continue; + } else if (CurC == '\0') { + /* End of input inside macro argument list */ PPError ("Unterminated argument list invoking macro '%s'", M->Name); - MissingParen = 1; + Parens = -1; ClearLine (); + E->Flags |= MES_ERROR; + Idx = 0; break; + } else { - /* Just copy the character */ - SB_AppendChar (&Arg, CurC); - NextChar (); + unsigned LastLen = SB_GetLen (&Arg.Tokens); + + if (IsSym (Ident)) { + /* Just copy the identifier */ + SB_AppendStr (&Arg.Tokens, Ident); + + /* Count identifiers */ + ++CountInArg; + + /* Used for concatentation check */ + if ((Arg.Flags & MES_FIRST_TOKEN) != 0) { + Arg.Flags |= MES_BEGIN_WITH_IDENT; + } + } else if (IsPPNumber (CurC, NextC)) { + /* Copy a pp-number */ + CopyPPNumber (&Arg.Tokens); + } else if (IsQuote (CurC)) { + /* Quoted string - just copy */ + CopyQuotedString (&Arg.Tokens); + } else if (GetPunc (Ident)) { + /* Check nested parentheses */ + if (Ident[0] == '(') { + /* Opening nested parenthesis */ + ++Parens; + } else if (Ident[0] == ')') { + /* Closing nested parenthesis */ + --Parens; + } + /* Just copy the punctuator */ + SB_AppendStr (&Arg.Tokens, Ident); + } else { + /* Just copy the character */ + SB_AppendChar (&Arg.Tokens, CurC); + NextChar (); + + /* But don't count it */ + ++LastLen; + } + + /* Used for concatentation check */ + ME_SetTokLens (&Arg, SB_GetLen (&Arg.Tokens) - LastLen - Skipped); } } /* Compare formal and actual argument count */ - if (CollCount (&E->ActualArgs) != (unsigned) M->ArgCount) { + if (CollCount (&E->Args) != (unsigned) M->ParamCount) { - if (!MissingParen) { + if (Parens == 0) { /* Argument count mismatch */ PPError ("Macro argument count mismatch"); } /* Be sure to make enough empty arguments available */ - SB_Clear (&Arg); - while (CollCount (&E->ActualArgs) < (unsigned) M->ArgCount) { - ME_AppendActual (E, &Arg); + DoneMacroExp (&Arg); + InitMacroExp (&Arg); + Arg.Flags |= MES_HAS_REPLACEMENT; + while (CollCount (&E->Args) < (unsigned) M->ParamCount) { + ME_AppendArg (E, &Arg); } } - /* Deallocate string buf resources */ - SB_Done (&Arg); + /* Deallocate argument resources */ + DoneMacroExp (&Arg); + + /* Return the total count of identifiers in the argument list */ + return Idx; } -static void SubstMacroArgs (MacroExp* E, Macro* M) -/* Argument substitution according to ISO/IEC 9899:1999 (E), 6.10.3.1ff */ +static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, Macro* M, unsigned IdentCount) +/* Argument substitution according to ISO/IEC 9899:1999 (E), 6.10.3.1ff. +** Return the count of identifiers found in the result. +*/ { + unsigned Idx = NameIdx; ident Ident; - int ArgIdx; + unsigned TokLen = 0; + int ParamIdx; StrBuf* OldSource; - StrBuf* Arg; - int HaveSpace; + int HaveSpace = 0; + StrBuf Buf = AUTO_STRBUF_INITIALIZER; /* Temporary buffer */ + /* Remember the current input stack and disable it for now */ + Collection* OldInputStack = UseInputStack (0); + + /* Remember the current input and switch to the macro replacement */ + unsigned OldIndex = SB_GetIndex (&M->Replacement); - /* Remember the current input and switch to the macro replacement. */ - int OldIndex = SB_GetIndex (&M->Replacement); SB_Reset (&M->Replacement); OldSource = InitLine (&M->Replacement); - /* Argument handling loop */ + /* Substitution loop */ while (CurC != '\0') { + int NeedPaste = 0; /* If we have an identifier, check if it's a macro */ if (IsSym (Ident)) { - /* Check if it's a macro argument */ - if ((ArgIdx = FindMacroArg (M, Ident)) >= 0) { + /* Remember and skip any following whitespace */ + HaveSpace = SkipWhitespace (0); - /* A macro argument. Get the corresponding actual argument. */ - Arg = ME_GetActual (E, ArgIdx); - - /* Copy any following whitespace */ - HaveSpace = SkipWhitespace (0); + /* Check if it's a macro parameter */ + if ((ParamIdx = FindMacroParam (M, Ident)) >= 0) { /* If a ## operator follows, we have to insert the actual - ** argument as is, otherwise it must be macro replaced. + ** argument as-is, otherwise it must be macro-replaced. */ if (CurC == '#' && NextC == '#') { - /* ### Add placemarker if necessary */ - SB_Append (&E->Replacement, Arg); + /* Get the corresponding actual argument */ + const MacroExp* A = ME_GetOriginalArg (E, ParamIdx); + + /* For now we need no placemarkers */ + SB_Append (Target, &A->Tokens); + + /* Adjust tracking */ + ME_OffsetHideSets (Idx, A->IdentCount, E); + Idx += A->IdentCount; + + /* This will be used for concatenation */ + TokLen = A->LastTokLen; } else { - /* Replace the formal argument by a macro replaced copy - ** of the actual. - */ - SB_Reset (Arg); - MacroReplacement (Arg, &E->Replacement, 0); + /* Get the corresponding macro-replaced argument */ + const MacroExp* A = ME_GetReplacedArg (E, ParamIdx); - /* If we skipped whitespace before, re-add it now */ - if (HaveSpace) { - SB_AppendChar (&E->Replacement, ' '); - } + /* Append the replaced string */ + SB_Append (Target, &A->Tokens); + + /* Insert the range of identifiers to parent preceding this argument */ + ME_OffsetHideSets (Idx, A->IdentCount, E); + + /* Add hide range */ + ME_AddArgHideSets (Idx, A, E); + + /* Adjust tracking */ + Idx += A->IdentCount; + + /* May be used for later pp-token merge check */ + TokLen = A->LastTokLen; } - } else { /* An identifier, keep it */ - SB_AppendStr (&E->Replacement, Ident); + SB_AppendStr (Target, Ident); + /* Adjust tracking */ + ME_OffsetHideSets (Idx, 1, E); + ++Idx; + + /* May be used for later concatenation */ + TokLen = strlen (Ident); } + /* Squeeze and add the skipped whitespace back for consistency */ + if (HaveSpace) { + SB_AppendChar (Target, ' '); + } + + /* Done with this substituted argument */ + continue; + } else if (CurC == '#' && NextC == '#') { /* ## operator. */ @@ -724,127 +1511,257 @@ static void SubstMacroArgs (MacroExp* E, Macro* M) NextChar (); SkipWhitespace (0); - /* Since we need to concatenate the token sequences, remove - ** any whitespace that was added to target, since it must come + /* Since we need to concatenate the token sequences, remove the + ** last whitespace that was added to target, since it must come ** from the input. */ - while (IsSpace (SB_LookAtLast (&E->Replacement))) { - SB_Drop (&E->Replacement, 1); + if (IsBlank (SB_LookAtLast (Target))) { + SB_Drop (Target, 1); + HaveSpace = 0; } /* If the next token is an identifier which is a macro argument, - ** replace it, otherwise do nothing. + ** replace it, otherwise just add it. */ if (IsSym (Ident)) { + unsigned NewCount = 1; - /* Check if it's a macro argument */ - if ((ArgIdx = FindMacroArg (M, Ident)) >= 0) { + /* Check if it's a macro parameter */ + if ((ParamIdx = FindMacroParam (M, Ident)) >= 0) { - /* Get the corresponding actual argument and add it. */ - SB_Append (&E->Replacement, ME_GetActual (E, ArgIdx)); + /* Get the corresponding actual argument */ + MacroExp* A = ME_GetOriginalArg (E, ParamIdx); + + /* Insert the range of identifiers to parent preceding this argument */ + ME_OffsetHideSets (Idx, A->IdentCount, E); + + /* Add hide range */ + ME_AddArgHideSets (Idx, A, E); + + /* Adjust tracking */ + NewCount = A->IdentCount; + + /* If the preceding pp-token is not a placemarker and is + ** concatenated to with an identifier, the count of tracked + ** identifiers is then one less. + */ + if (TryPastePPTok (Target, &A->Tokens, TokLen, A->FirstTokLen)) { + if (TokLen > 0 && (A->Flags & MES_BEGIN_WITH_IDENT) != 0) { + --NewCount; + ME_RemoveToken (Idx, 1, E); + } + if ((A->Flags & MES_MULTIPLE_TOKEN) == 0) { + TokLen += A->FirstTokLen; + } else { + TokLen = A->LastTokLen; + } + } else { + TokLen = A->LastTokLen; + } } else { - /* Just an ordinary identifier - add as is */ - SB_AppendStr (&E->Replacement, Ident); + unsigned Len; + + /* Just an ordinary identifier - add as-is */ + SB_CopyStr (&Buf, Ident); + + /* If the preceding pp-token is not a placemarker and is + ** concatenated to with an identifier, the count of tracked + ** identifiers is then one less. + */ + Len = SB_GetLen (&Buf); + if (TryPastePPTok (Target, &Buf, TokLen, Len)) { + if (TokLen > 0) { + --NewCount; + } + TokLen += Len; + } else { + TokLen = Len; + } + + /* Adjust tracking */ + ME_OffsetHideSets (Idx, NewCount, E); } + + /* Adjust tracking */ + Idx += NewCount; + + /* Keep the whitespace for consistency */ + HaveSpace = SkipWhitespace (0); + if (HaveSpace) { + SB_AppendChar (Target, ' '); + } + + /* Done with this concatenated identifier */ + continue; } - } else if (CurC == '#' && M->ArgCount >= 0) { + if (CurC != '\0') { + /* Non-identifiers may still be pasted together */ + NeedPaste = 1; + } - /* A # operator within a macro expansion of a function like + } else if (CurC == '#' && M->ParamCount >= 0) { + + /* A # operator within a macro expansion of a function-like ** macro. Read the following identifier and check if it's a ** macro parameter. */ + unsigned LastLen = SB_GetLen (Target); + NextChar (); SkipWhitespace (0); - if (!IsSym (Ident) || (ArgIdx = FindMacroArg (M, Ident)) < 0) { + if (!IsSym (Ident) || (ParamIdx = FindMacroParam (M, Ident)) < 0) { PPError ("'#' is not followed by a macro parameter"); } else { /* Make a valid string from Replacement */ - Arg = ME_GetActual (E, ArgIdx); - SB_Reset (Arg); - Stringize (Arg, &E->Replacement); + MacroExp* A = ME_GetOriginalArg (E, ParamIdx); + SB_Reset (&A->Tokens); + Stringize (&A->Tokens, Target); } - } else if (IsQuote (CurC)) { - CopyQuotedString (&E->Replacement); - } else { - SB_AppendChar (&E->Replacement, CurC); - NextChar (); + TokLen = SB_GetLen (Target) - LastLen; + + /* Done with this stringized argument */ + continue; + } + + /* Use the temporary buffer */ + SB_Clear (&Buf); + if (IsPPNumber (CurC, NextC)) { + CopyPPNumber (&Buf); + } else if (IsQuote (CurC)) { + CopyQuotedString (&Buf); + } else { + if (GetPunc (Ident)) { + SB_AppendStr (&Buf, Ident); + } else if (CurC != '\0') { + SB_AppendChar (&Buf, CurC); + NextChar (); + } + } + + /* Squeeze any whitespace for consistency. Especially, comments must + ** be consumed before fed to the punctuator parser, or their leading + ** '/' characters would be parsed wrongly as division operators. + */ + HaveSpace = SkipWhitespace (0); + if (HaveSpace) { + SB_AppendChar (&Buf, ' '); + } + + if (NeedPaste) { + unsigned Len = SB_GetLen (&Buf); + + /* Concatenate pp-tokens */ + if (TryPastePPTok (Target, &Buf, TokLen, Len)) { + TokLen += Len - HaveSpace; + } else { + TokLen = Len - HaveSpace; + } + } else { + /* Just append the token */ + SB_Append (Target, &Buf); + TokLen = SB_GetLen (&Buf) - HaveSpace; + } + } -#if 0 - /* Remove whitespace from the end of the line */ - while (IsSpace (SB_LookAtLast (&E->Replacement))) { - SB_Drop (&E->Replacement, 1); - } -#endif + /* Done with the temporary buffer */ + SB_Done (&Buf); + + /* Remove the macro name itself together with the arguments (if any) */ + ME_RemoveToken (Idx, 1 + IdentCount, E); /* Switch back the input */ + UseInputStack (OldInputStack); InitLine (OldSource); SB_SetIndex (&M->Replacement, OldIndex); + + /* Return the count of substituted identifiers */ + return Idx - NameIdx; } -static void ExpandMacro (StrBuf* Target, Macro* M, int MultiLine) -/* Expand a macro into Target */ +static unsigned ExpandMacro (unsigned Idx, StrBuf* Target, MacroExp* E, Macro* M, int MultiLine) +/* Expand a macro into Target. Return the count of identifiers in the result +** of the expansion. +*/ { - MacroExp E; + /* Count of identifiers */ + unsigned Count = 0; -#if 0 +#if DEV_CC65_DEBUG static unsigned V = 0; - printf ("Expanding %s(%u)\n", M->Name, ++V); + printf ("Expanding (%u) %s\n", ++V, M->Name); #endif - /* Initialize our MacroExp structure */ - InitMacroExp (&E); - /* Check if this is a function like macro */ - if (M->ArgCount >= 0) { - + if (M->ParamCount >= 0) { /* Read the actual macro arguments (with the enclosing parentheses) */ - ReadMacroArgs (&E, M, MultiLine); - + Count = ReadMacroArgs (Idx, E, M, MultiLine); } - /* Replace macro arguments handling the # and ## operators */ - SubstMacroArgs (&E, M); + if ((E->Flags & MES_ERROR) == 0) { + /* Replace macro parameters with arguments handling the # and ## operators */ + Count = SubstMacroArgs (Idx, Target, E, M, Count); + } else { + SB_CopyStr (Target, M->Name); + } - /* Forbide repeated expansion of the same macro in use */ - M->Expanding = 1; - MacroReplacement (&E.Replacement, Target, 0); - M->Expanding = 0; + if (CollCount (&E->Args) > 0) { + /* Clear all arguments */ + ME_ClearArgs (E); + } -#if 0 - printf ("Done with %s(%u)\n", E.M->Name, V--); + /* Hide this macro for the whole result of this expansion */ + ME_HideMacro (Idx, Count, E, M); + +#if DEV_CC65_DEBUG + printf ("Expanded (%u) %s to %d ident(s) at %u: %s\n", + V--, M->Name, Count, Idx, SB_GetConstBuf (Target)); #endif - /* Free memory allocated for the macro expansion structure */ - DoneMacroExp (&E); + return Count; } -static void MacroReplacement (StrBuf* Source, StrBuf* Target, unsigned ModeFlags) -/* Scan for and perform macro replacement */ +static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsigned ModeFlags) +/* Scan for and perform macro replacement. Return the count of identifiers in +** the replacement result. +*/ { - ident Ident; + unsigned Count = 0; + StrBuf* TmpTarget = NewStrBuf (); /* Remember the current input and switch to Source */ - StrBuf* OldSource = InitLine (Source); + StrBuf* OldSource = InitLine (Source); + Collection RescanStack = AUTO_COLLECTION_INITIALIZER; + Collection* OldRescanStack = CurRescanStack; + + + CurRescanStack = &RescanStack; + CollAppend (CurRescanStack, Line); /* Loop substituting macros */ while (CurC != '\0') { + int Skipped = 0; + ident Ident; + /* If we have an identifier, check if it's a macro */ if (IsSym (Ident)) { if ((ModeFlags & MSM_OP_DEFINED) != 0 && strcmp (Ident, "defined") == 0) { /* Handle the "defined" operator */ int HaveParen = 0; + /* Eat the "defined" operator */ + ME_RemoveToken (Count, 1, E); + SkipWhitespace (0); if (CurC == '(') { HaveParen = 1; @@ -853,6 +1770,7 @@ static void MacroReplacement (StrBuf* Source, StrBuf* Target, unsigned ModeFlags } if (IsSym (Ident)) { /* Eat the identifier */ + ME_RemoveToken (Count, 1, E); SB_AppendChar (Target, IsMacro (Ident) ? '1' : '0'); if (HaveParen) { SkipWhitespace (0); @@ -869,25 +1787,46 @@ static void MacroReplacement (StrBuf* Source, StrBuf* Target, unsigned ModeFlags SB_AppendChar (Target, '0'); } } else { - /* Check if it's an expandable macro */ Macro* M = FindMacro (Ident); - if (M != 0 && !M->Expanding) { + + /* Check if it's an expandable macro */ + if (M != 0 && ME_CanExpand (Count, E, M)) { + int MultiLine = (ModeFlags & MSM_MULTILINE) != 0; + /* Check if this is a function-like macro */ - if (M->ArgCount >= 0) { - int MultiLine = (ModeFlags & MSM_MULTILINE) != 0; - int Whitespace = SkipWhitespace (MultiLine); + if (M->ParamCount >= 0) { + int OldPendingNewLines = PendingNewLines; + int HaveSpace = SkipWhitespace (MultiLine) > 0; + + /* A function-like macro name without an immediately + ** following argument list is not subject to expansion. + */ if (CurC != '(') { - /* Function-like macro without an argument list is not replaced */ + /* No expansion */ + ++Count; + + /* Just keep the macro name */ SB_AppendStr (Target, M->Name); - if (Whitespace > 0) { + + /* Keep tracking pp-token lengths */ + if ((ModeFlags & MSM_IN_ARG_EXPANSION) != 0) { + /* Used for concatentation check */ + if ((E->Flags & MES_FIRST_TOKEN) != 0) { + E->Flags |= MES_BEGIN_WITH_IDENT; + } + ME_SetTokLens (E, strlen (M->Name)); + } + + /* Append back the whitespace */ + if (HaveSpace) { SB_AppendChar (Target, ' '); } - /* Directives can only be found in an argument list - ** that spans multiple lines. + /* Since we have already got on hold of the next + ** line, we have to go on preprocessing them. */ if (MultiLine) { - if (CurC == '#') { + if (OldPendingNewLines < PendingNewLines && CurC == '#') { /* If we were going to support #pragma in ** macro argument list, it would be output ** to OLine. @@ -903,49 +1842,143 @@ static void MacroReplacement (StrBuf* Source, StrBuf* Target, unsigned ModeFlags /* Add the source info to preprocessor output if needed */ AddPreLine (Target); } - } else { - /* Function-like macro */ - if (OLine == 0) { - OLine = Target; - ExpandMacro (Target, M, MultiLine); - OLine = 0; - } else { - ExpandMacro (Target, M, MultiLine); - } + + /* Loop */ + goto Loop; } - } else { - /* Object-like macro */ - ExpandMacro (Target, M, 0); } - } else { - /* An identifier, keep it */ - SB_AppendStr (Target, Ident); + + /* Either an object-like or function-like macro */ + MultiLine = MultiLine && M->ParamCount >= 0; + + /* If we were going to support #pragma in macro argument + ** list, it would be output to OLine. + */ + if (MultiLine && OLine == 0) { + OLine = TmpTarget; + ExpandMacro (Count, TmpTarget, E, M, MultiLine); + OLine = 0; + } else { + ExpandMacro (Count, TmpTarget, E, M, MultiLine); + } + + /* Check for errors in expansion */ + if ((E->Flags & MES_ERROR) != 0) { + break; + } + + /* Pop the current line if it is at the end */ + PopRescanLine (); + + if (SB_GetLen (TmpTarget) > 0) { + /* Start rescanning from the temporary result */ + SB_Reset (TmpTarget); + InitLine (TmpTarget); + CollAppend (CurRescanStack, TmpTarget); + + /* Switch the buffers */ + TmpTarget = NewStrBuf (); + } + + /* Since we are rescanning, we needn't add the + ** count of just replaced identifiers right now. + */ + continue; + } + + /* An unexpandable identifier. Keep it. */ + ++Count; + SB_AppendStr (Target, Ident); + + /* Keep tracking pp-token lengths */ + if ((ModeFlags & MSM_IN_ARG_EXPANSION) != 0) { + /* Used for concatentation check */ + if ((E->Flags & MES_FIRST_TOKEN) != 0) { + E->Flags |= MES_BEGIN_WITH_IDENT; + } + ME_SetTokLens (E, strlen (Ident)); } } } else { + unsigned LastLen = SB_GetLen (Target); + if ((ModeFlags & MSM_TOK_HEADER) != 0 && (CurC == '<' || CurC == '\"')) { CopyHeaderNameToken (Target); + } else if (IsPPNumber (CurC, NextC)) { + CopyPPNumber (Target); } else if (IsQuote (CurC)) { CopyQuotedString (Target); } else { - int Whitespace = SkipWhitespace (0); - if (Whitespace) { - SB_AppendChar (Target, ' '); - } else { - SB_AppendChar (Target, CurC); - NextChar (); + Skipped = SkipWhitespace (0); + + /* Punctuators must be checked after whitespace since comments + ** introducers may be misinterpreted as division operators. + */ + if (!Skipped) { + if (GetPunc (Ident)) { + SB_AppendStr (Target, Ident); + } else { + SB_AppendChar (Target, CurC); + NextChar (); + + /* Don't count this character */ + ++LastLen; + } } } + + /* Keep tracking pp-token lengths */ + if ((ModeFlags & MSM_IN_ARG_EXPANSION) != 0) { + ME_SetTokLens (E, SB_GetLen (Target) - LastLen); + } + } + +Loop: + /* Switch back to the previous input stream if we have finished + ** rescanning the current one. + */ + if (CurC == '\0' && CollCount (CurRescanStack) > 1) { + /* Check for rescan sequence end and pp-token pasting */ + Skipped = SkipWhitespace (0) || Skipped; + } + + /* Append a space if there hasn't been one */ + if (Skipped && !IsSpace (SB_LookAtLast (Target))) { + SB_AppendChar (Target, ' '); } } + /* Append the remaining result */ + SB_Append (Target, TmpTarget); + + /* Done with the temporary buffer */ + SB_Done (TmpTarget); + /* Drop whitespace at the end */ if (IsBlank (SB_LookAtLast (Target))) { SB_Drop (Target, 1); } + /* Sanity check */ + if ((E->Flags & MES_ERROR) == 0) { + CHECK (CollCount (CurRescanStack) == 1); + } + + /* Switch back to the old input stack */ + while (CollCount (CurRescanStack) > 1) { + FreeStrBuf (CollPop (CurRescanStack)); + } + CurRescanStack = OldRescanStack; + + /* Done with the current input stack */ + CHECK (CollCount (&RescanStack) == 1); + DoneCollection (&RescanStack); + /* Switch back the input */ InitLine (OldSource); + + /* Return the count of identifiers */ + return Count; } @@ -960,7 +1993,7 @@ static void DoDefine (void) /* Process #define directive */ { ident Ident; - Macro* M; + Macro* M = 0; Macro* Existing; int C89; unsigned Len; @@ -968,7 +2001,7 @@ static void DoDefine (void) /* Read the macro name */ SkipWhitespace (0); if (!MacName (Ident)) { - return; + goto Error_Handler; } /* Remember if we're in C89 mode */ @@ -977,20 +2010,20 @@ static void DoDefine (void) /* Check for forbidden macro names */ if (strcmp (Ident, "defined") == 0) { PPError ("'%s' cannot be used as a macro name", Ident); - return; + goto Error_Handler; } /* Create a new macro definition */ M = NewMacro (Ident); - /* Check if this is a function like macro */ + /* Check if this is a function-like macro */ if (CurC == '(') { /* Skip the left paren */ NextChar (); - /* Set the marker that this is a function like macro */ - M->ArgCount = 0; + /* Set the marker that this is a function-like macro */ + M->ParamCount = 0; /* Read the formal parameter list */ while (1) { @@ -1009,23 +2042,21 @@ static void DoDefine (void) NextChar (); if (CurC != '.' || NextC != '.') { PPError ("'...' expected"); - ClearLine (); - FreeMacro (M); - return; + goto Error_Handler; } NextChar (); NextChar (); /* Remember that the macro is variadic and use __VA_ARGS__ as - ** the argument name. + ** the parameter name. */ - AddMacroArg (M, "__VA_ARGS__"); + AddMacroParam (M, "__VA_ARGS__"); M->Variadic = 1; } else { - /* Must be macro argument name */ + /* Must be macro parameter name */ if (MacName (Ident) == 0) { - return; + goto Error_Handler; } /* __VA_ARGS__ is only allowed in post-C89 mode */ @@ -1034,12 +2065,12 @@ static void DoDefine (void) "of a C99 variadic macro"); } - /* Add the macro argument */ - AddMacroArg (M, Ident); + /* Add the macro parameter */ + AddMacroParam (M, Ident); } /* If we had an ellipsis, or the next char is not a comma, we've - ** reached the end of the macro argument list. + ** reached the end of the macro parameter list. */ SkipWhitespace (0); if (M->Variadic || CurC != ',') { @@ -1051,9 +2082,7 @@ static void DoDefine (void) /* Check for a right paren and eat it if we find one */ if (CurC != ')') { PPError ("')' expected for macro definition"); - ClearLine (); - FreeMacro (M); - return; + goto Error_Handler; } NextChar (); } @@ -1081,14 +2110,12 @@ static void DoDefine (void) SB_LookAt (&M->Replacement, 1) == '#') { /* Diagnose and bail out */ PPError ("'##' cannot appear at start of macro expansion"); - FreeMacro (M); - return; + goto Error_Handler; } else if (SB_LookAt (&M->Replacement, Len - 1) == '#' && SB_LookAt (&M->Replacement, Len - 2) == '#') { /* Diagnose and bail out */ PPError ("'##' cannot appear at end of macro expansion"); - FreeMacro (M); - return; + goto Error_Handler; } } @@ -1108,6 +2135,18 @@ static void DoDefine (void) /* Insert the new macro into the macro table */ InsertMacro (M); + + /* Success */ + return; + +Error_Handler: + + /* Cleanup */ + ClearLine (); + + if (M != 0) { + FreeMacro (M); + } } @@ -1624,7 +2663,7 @@ static int ParseDirectives (unsigned ModeFlags) Whitespace = SkipWhitespace (0) || Whitespace; } - return Whitespace != 0; + return Whitespace; } @@ -1715,7 +2754,7 @@ static void PreprocessDirective (StrBuf* Source, StrBuf* Target, unsigned ModeFl SkipWhitespace (0); InitMacroExp (&E); - MacroReplacement (Source, Target, ModeFlags | MSM_IN_DIRECTIVE); + ReplaceMacros (Source, Target, &E, ModeFlags | MSM_IN_DIRECTIVE); DoneMacroExp (&E); /* Restore the source input index */ @@ -1727,6 +2766,8 @@ static void PreprocessDirective (StrBuf* Source, StrBuf* Target, unsigned ModeFl void Preprocess (void) /* Preprocess lines count of which is affected by directives */ { + MacroExp E; + SB_Clear (PLine); /* Add the source info to preprocessor output if needed */ @@ -1744,7 +2785,9 @@ void Preprocess (void) AppendIndent (PLine, SB_GetIndex (Line)); /* Expand macros if any */ - MacroReplacement (Line, PLine, MSM_MULTILINE); + InitMacroExp (&E); + ReplaceMacros (Line, PLine, &E, MSM_MULTILINE); + DoneMacroExp (&E); /* Add the source info to preprocessor output if needed */ AddPreLine (PLine); From 2f6b5621cc97fb7719a93df2c8630fe90e375e0e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Aug 2022 14:34:50 +0800 Subject: [PATCH 1779/2710] Changed handling on nested macro replacement to match up with the behavior of other major C compilers, which is unspecified by the C standard. --- src/cc65/preproc.c | 87 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 75 insertions(+), 12 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 8b3d43d7f..b3404230a 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -158,8 +158,8 @@ static int ParseDirectives (unsigned ModeFlags); /* Handle directives. Return 1 if any whitespace or newlines are parsed. */ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsigned ModeFlags); -/* Scan for and perform macro replacement. Return the count of identifiers in -** the replacement result. +/* Scan for and perform macro replacement. Return the count of identifiers and +** right parentheses in the replacement result. */ static MacroExp* InitMacroExp (MacroExp* E); @@ -492,6 +492,40 @@ static void ME_RemoveToken (unsigned Idx, unsigned Count, MacroExp* E) +static void ME_HandleSemiNestedMacro (unsigned NameIdx, unsigned LastIdx, MacroExp* E) +/* Unhide the macro name from all hidesets if it was expanded with an unhidden +** right parenthesis. This is unspecified but allowed behavior according to +** ISO/IEC 9899:2018, 6.10.3.4ff. +*/ +{ + unsigned I; + + for (I = 0; I < CollCount (&E->HideSets); ++I) { + HiddenMacro* MHS = CollAtUnchecked (&E->HideSets, I); + HideRange* This; + HideRange** Prev; + + for (Prev = &MHS->HS, This = *Prev; This != 0; This = *Prev) { + if (NameIdx < This->End) { + if (NameIdx >= This->Start && LastIdx >= This->End) { + This->End = NameIdx; + if (This->End == This->Start) { + /* Remove */ + (*Prev) = This->Next; + FreeHideRange (This); + continue; + } + } + Prev = &This->Next; + } else { + break; + } + } + } +} + + + static void ME_AddArgHideSets (unsigned Idx, const MacroExp* A, MacroExp* Parent) /* Propagate the macro hide sets of the substituted argument starting as the ** Idx'th identifier of the result. @@ -1214,7 +1248,7 @@ static int CheckExtraTokens (const char* Name) static unsigned ReadMacroArgs (unsigned NameIdx, MacroExp* E, const Macro* M, int MultiLine) /* Identify the arguments to a macro call as-is. Return the total count of -** identifiers in the read argument list. +** identifiers and right parentheses in the read argument list. */ { unsigned Idx = 0; @@ -1316,6 +1350,8 @@ static unsigned ReadMacroArgs (unsigned NameIdx, MacroExp* E, const Macro* M, in /* Check for end of macro param list */ if (CurC == ')') { + /* Count right parens */ + ++Idx; NextChar (); break; } @@ -1366,6 +1402,9 @@ static unsigned ReadMacroArgs (unsigned NameIdx, MacroExp* E, const Macro* M, in } else if (Ident[0] == ')') { /* Closing nested parenthesis */ --Parens; + + /* Count right parens */ + ++CountInArg; } /* Just copy the punctuator */ SB_AppendStr (&Arg.Tokens, Ident); @@ -1403,7 +1442,9 @@ static unsigned ReadMacroArgs (unsigned NameIdx, MacroExp* E, const Macro* M, in /* Deallocate argument resources */ DoneMacroExp (&Arg); - /* Return the total count of identifiers in the argument list */ + /* Return the total count of identifiers and right parentheses in the + ** argument list. + */ return Idx; } @@ -1411,7 +1452,7 @@ static unsigned ReadMacroArgs (unsigned NameIdx, MacroExp* E, const Macro* M, in static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, Macro* M, unsigned IdentCount) /* Argument substitution according to ISO/IEC 9899:1999 (E), 6.10.3.1ff. -** Return the count of identifiers found in the result. +** Return the count of identifiers and right parentheses in the result. */ { unsigned Idx = NameIdx; @@ -1431,6 +1472,14 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M SB_Reset (&M->Replacement); OldSource = InitLine (&M->Replacement); + /* If the macro expansion replaces an function-like macro with an argument + ** list containing a right parenthesis outside the hidesets of previously + ** replaced macros, stop those hidesets from this replacement. This is not + ** required by the standard but just to match up with other major C + ** compilers. + */ + ME_HandleSemiNestedMacro (NameIdx, NameIdx + IdentCount, E); + /* Substitution loop */ while (CurC != '\0') { int NeedPaste = 0; @@ -1637,6 +1686,14 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M CopyQuotedString (&Buf); } else { if (GetPunc (Ident)) { + /* Count right parens. This is OK since they cannot be pasted + ** to form different punctuators with others. + */ + if (Ident[0] == ')') { + /* Adjust tracking */ + ME_OffsetHideSets (Idx, 1, E); + ++Idx; + } SB_AppendStr (&Buf, Ident); } else if (CurC != '\0') { SB_AppendChar (&Buf, CurC); @@ -1681,18 +1738,18 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M InitLine (OldSource); SB_SetIndex (&M->Replacement, OldIndex); - /* Return the count of substituted identifiers */ + /* Return the count of substituted identifiers and right parentheses */ return Idx - NameIdx; } static unsigned ExpandMacro (unsigned Idx, StrBuf* Target, MacroExp* E, Macro* M, int MultiLine) -/* Expand a macro into Target. Return the count of identifiers in the result -** of the expansion. +/* Expand a macro into Target. Return the count of identifiers and right +** parentheses in the result of the expansion. */ { - /* Count of identifiers */ + /* Count of identifiers and right parentheses */ unsigned Count = 0; #if DEV_CC65_DEBUG @@ -1732,8 +1789,8 @@ static unsigned ExpandMacro (unsigned Idx, StrBuf* Target, MacroExp* E, Macro* M static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsigned ModeFlags) -/* Scan for and perform macro replacement. Return the count of identifiers in -** the replacement result. +/* Scan for and perform macro replacement. Return the count of identifiers and +** right parentheses in the replacement result. */ { unsigned Count = 0; @@ -1778,6 +1835,8 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi PPError ("')' expected"); ClearLine (); } else { + /* Eat the right parenthesis */ + ME_RemoveToken (Count, 1, E); NextChar (); } } @@ -1916,6 +1975,10 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi */ if (!Skipped) { if (GetPunc (Ident)) { + if (Ident[0] == ')') { + /* Count right parens */ + ++Count; + } SB_AppendStr (Target, Ident); } else { SB_AppendChar (Target, CurC); @@ -1977,7 +2040,7 @@ Loop: /* Switch back the input */ InitLine (OldSource); - /* Return the count of identifiers */ + /* Return the count of identifiers and right parentheses */ return Count; } From 6260414136e053ac6d3db2efccfca5a52216cb8c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Aug 2022 14:34:50 +0800 Subject: [PATCH 1780/2710] The '#' operator in macro replacement is now checked at macro definition instead of macro expansion. --- src/cc65/preproc.c | 121 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 95 insertions(+), 26 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index b3404230a..e0788ad0c 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1663,7 +1663,8 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M NextChar (); SkipWhitespace (0); if (!IsSym (Ident) || (ParamIdx = FindMacroParam (M, Ident)) < 0) { - PPError ("'#' is not followed by a macro parameter"); + /* Should not happen, but still */ + Internal ("'#' is not followed by a macro parameter"); } else { /* Make a valid string from Replacement */ MacroExp* A = ME_GetOriginalArg (E, ParamIdx); @@ -2052,6 +2053,96 @@ Loop: +static int ParseMacroReplacement (StrBuf* Source, Macro* M) +/* Check correctness of macro definition while squeezing old and new style +** comments and other non-newline whitespace sequences. Return 1 on success +** or 0 on failure. +*/ +{ + /* Switch to the new input source */ + StrBuf* OldSource = InitLine (Source); + int HasWhiteSpace = 0; + unsigned Len; + ident Ident; + + /* Skip whitespace before the macro replacement */ + SkipWhitespace (0); + + /* Check for ## at start */ + if (CurC == '#' && NextC == '#') { + /* Diagnose and bail out */ + PPError ("'##' cannot appear at start of macro expansion"); + goto Error_Handler; + } + + /* Loop removing ws and comments */ + while (CurC != '\0') { + if (HasWhiteSpace) { + SB_AppendChar (&M->Replacement, ' '); + } else if (IsQuote (CurC)) { + CopyQuotedString (&M->Replacement); + } else { + if (M->ParamCount >= 0 && GetPunc (Ident)) { + Len = strlen (Ident); + /* Check for # */ + if (Len == 1 && Ident[0] == '#') { + HasWhiteSpace = SkipWhitespace (0); + + /* Check next pp-token */ + if (!IsSym (Ident) || FindMacroParam (M, Ident) < 0) { + PPError ("'#' is not followed by a macro parameter"); + goto Error_Handler; + } + + /* Make the replacement */ + SB_AppendChar (&M->Replacement, '#'); + if (HasWhiteSpace) { + SB_AppendChar (&M->Replacement, ' '); + } + SB_AppendStr (&M->Replacement, Ident); + } else { + SB_AppendBuf (&M->Replacement, Ident, Len); + } + } else { + SB_AppendChar (&M->Replacement, CurC); + NextChar (); + } + } + + HasWhiteSpace = SkipWhitespace (0); + } + + /* Check for ## at end */ + Len = SB_GetLen (&M->Replacement); + if (Len >= 2) { + if (SB_LookAt (&M->Replacement, Len - 1) == '#' && + SB_LookAt (&M->Replacement, Len - 2) == '#') { + /* Diagnose and bail out */ + PPError ("'##' cannot appear at end of macro expansion"); + goto Error_Handler; + } + } + + /* Terminate the new input line */ + SB_Terminate (&M->Replacement); + + /* Switch back to the old source */ + InitLine (OldSource); + + /* Success */ + return 1; + +Error_Handler: + + /* Switch back to the old source */ + InitLine (OldSource); + + /* Failure */ + return 0; +} + + + static void DoDefine (void) /* Process #define directive */ { @@ -2059,7 +2150,6 @@ static void DoDefine (void) Macro* M = 0; Macro* Existing; int C89; - unsigned Len; /* Read the macro name */ SkipWhitespace (0); @@ -2150,38 +2240,17 @@ static void DoDefine (void) NextChar (); } - /* Skip whitespace before the macro replacement */ - SkipWhitespace (0); - /* Remove whitespace and comments from the line, store the preprocessed ** line into the macro replacement buffer. */ - TranslationPhase3 (Line, &M->Replacement); - - /* Remove whitespace from the end of the line */ - while (IsSpace (SB_LookAtLast (&M->Replacement))) { - SB_Drop (&M->Replacement, 1); + if (ParseMacroReplacement (Line, M) == 0) { + goto Error_Handler; } + #if 0 printf ("%s: <%.*s>\n", M->Name, SB_GetLen (&M->Replacement), SB_GetConstBuf (&M->Replacement)); #endif - /* Check for ## at start or end */ - Len = SB_GetLen (&M->Replacement); - if (Len >= 2) { - if (SB_LookAt (&M->Replacement, 0) == '#' && - SB_LookAt (&M->Replacement, 1) == '#') { - /* Diagnose and bail out */ - PPError ("'##' cannot appear at start of macro expansion"); - goto Error_Handler; - } else if (SB_LookAt (&M->Replacement, Len - 1) == '#' && - SB_LookAt (&M->Replacement, Len - 2) == '#') { - /* Diagnose and bail out */ - PPError ("'##' cannot appear at end of macro expansion"); - goto Error_Handler; - } - } - /* Get an existing macro definition with this name */ Existing = FindMacro (M->Name); From be95cb8f58e36a8b3129607424b45d861073fea3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Aug 2022 14:34:50 +0800 Subject: [PATCH 1781/2710] Fixed stringized macro argument concatenation. Example: #define s(a) L## #a. --- src/cc65/preproc.c | 43 +++++++++++++++++-------------------------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index e0788ad0c..88ece4b36 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1652,31 +1652,6 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M NeedPaste = 1; } - } else if (CurC == '#' && M->ParamCount >= 0) { - - /* A # operator within a macro expansion of a function-like - ** macro. Read the following identifier and check if it's a - ** macro parameter. - */ - unsigned LastLen = SB_GetLen (Target); - - NextChar (); - SkipWhitespace (0); - if (!IsSym (Ident) || (ParamIdx = FindMacroParam (M, Ident)) < 0) { - /* Should not happen, but still */ - Internal ("'#' is not followed by a macro parameter"); - } else { - /* Make a valid string from Replacement */ - MacroExp* A = ME_GetOriginalArg (E, ParamIdx); - SB_Reset (&A->Tokens); - Stringize (&A->Tokens, Target); - } - - TokLen = SB_GetLen (Target) - LastLen; - - /* Done with this stringized argument */ - continue; - } /* Use the temporary buffer */ @@ -1686,7 +1661,23 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M } else if (IsQuote (CurC)) { CopyQuotedString (&Buf); } else { - if (GetPunc (Ident)) { + if (CurC == '#' && M->ParamCount >= 0) { + /* A # operator within a macro expansion of a function-like + ** macro. Read the following identifier and check if it's a + ** macro parameter. + */ + NextChar (); + SkipWhitespace (0); + if (!IsSym (Ident) || (ParamIdx = FindMacroParam (M, Ident)) < 0) { + /* Should not happen, but still */ + Internal ("'#' is not followed by a macro parameter"); + } else { + /* Make a valid string from Replacement */ + MacroExp* A = ME_GetOriginalArg (E, ParamIdx); + SB_Reset (&A->Tokens); + Stringize (&A->Tokens, &Buf); + } + } else if (GetPunc (Ident)) { /* Count right parens. This is OK since they cannot be pasted ** to form different punctuators with others. */ From c7ff416ce99a09f06f27bf010739a4ae79cc4a80 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Aug 2022 14:34:50 +0800 Subject: [PATCH 1782/2710] Fixed wide strings for preprocessor. --- src/cc65/preproc.c | 36 +++++++++++++++++++++++++++++------- src/cc65/scanner.c | 12 +++++++++++- src/cc65/scanner.h | 5 +++++ 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 88ece4b36..38b818b7d 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -965,11 +965,28 @@ static void CopyHeaderNameToken (StrBuf* Target) +static int IsQuotedString (void) +/* Retrun 1 if the incoming characters indicate a string literal or character +** constant, otherwise return 0. +*/ +{ + return IsQuote (CurC) || IsWideQuoted (CurC, NextC); +} + + + static void CopyQuotedString (StrBuf* Target) /* Copy a single or double quoted string from the input to Target. */ { /* Remember the quote character, copy it to the target buffer and skip it */ - char Quote = CurC; + char Quote; + + if (CurC == 'L') { + SB_AppendChar (Target, CurC); + NextChar (); + } + + Quote = CurC; SB_AppendChar (Target, CurC); NextChar (); @@ -1165,7 +1182,7 @@ static int TryPastePPTok (StrBuf* Target, if (IsPPNumber (CurC, NextC)) { /* PP-number */ CopyPPNumber (&Buf); - } else if (IsQuote (CurC)) { + } else if (IsQuotedString ()) { /* Quoted string */ CopyQuotedString (&Buf); } else { @@ -1391,7 +1408,7 @@ static unsigned ReadMacroArgs (unsigned NameIdx, MacroExp* E, const Macro* M, in } else if (IsPPNumber (CurC, NextC)) { /* Copy a pp-number */ CopyPPNumber (&Arg.Tokens); - } else if (IsQuote (CurC)) { + } else if (IsQuotedString ()) { /* Quoted string - just copy */ CopyQuotedString (&Arg.Tokens); } else if (GetPunc (Ident)) { @@ -1545,6 +1562,11 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M TokLen = strlen (Ident); } + /* Special casing for 'L' prefixing '#' */ + if (TokLen == 1 && SB_LookAtLast (Target) == 'L' && CurC == '#') { + HaveSpace = 1; + } + /* Squeeze and add the skipped whitespace back for consistency */ if (HaveSpace) { SB_AppendChar (Target, ' '); @@ -1658,7 +1680,7 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M SB_Clear (&Buf); if (IsPPNumber (CurC, NextC)) { CopyPPNumber (&Buf); - } else if (IsQuote (CurC)) { + } else if (IsQuotedString ()) { CopyQuotedString (&Buf); } else { if (CurC == '#' && M->ParamCount >= 0) { @@ -1957,7 +1979,7 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi CopyHeaderNameToken (Target); } else if (IsPPNumber (CurC, NextC)) { CopyPPNumber (Target); - } else if (IsQuote (CurC)) { + } else if (IsQuotedString ()) { CopyQuotedString (Target); } else { Skipped = SkipWhitespace (0); @@ -2070,7 +2092,7 @@ static int ParseMacroReplacement (StrBuf* Source, Macro* M) while (CurC != '\0') { if (HasWhiteSpace) { SB_AppendChar (&M->Replacement, ' '); - } else if (IsQuote (CurC)) { + } else if (IsQuotedString ()) { CopyQuotedString (&M->Replacement); } else { if (M->ParamCount >= 0 && GetPunc (Ident)) { @@ -2850,7 +2872,7 @@ static void TranslationPhase3 (StrBuf* Source, StrBuf* Target) } if (HasWhiteSpace) { SB_AppendChar (Target, ' '); - } else if (IsQuote (CurC)) { + } else if (IsQuotedString ()) { CopyQuotedString (Target); } else { SB_AppendChar (Target, CurC); diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 09dd8fef8..66ce6906e 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -235,10 +235,20 @@ void SymName (char* S) +int IsWideQuoted (char First, char Second) +/* Return 1 if the two successive characters indicate a wide string literal or +** a wide char constant, otherwise return 0. +*/ +{ + return First == 'L' && IsQuote(Second); +} + + + int IsSym (char* S) /* If a symbol follows, read it and return 1, otherwise return 0 */ { - if (IsIdent (CurC)) { + if (IsIdent (CurC) && !IsWideQuoted (CurC, NextC)) { SymName (S); return 1; } else { diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h index 7a67b10ed..338ad6a65 100644 --- a/src/cc65/scanner.h +++ b/src/cc65/scanner.h @@ -282,6 +282,11 @@ void SymName (char* S); ** least of size MAX_IDENTLEN+1. */ +int IsWideQuoted (char First, char Second); +/* Return 1 if the two successive characters indicate a wide string literal or +** a wide char constant, otherwise return 0. +*/ + int IsSym (char* S); /* If a symbol follows, read it and return 1, otherwise return 0 */ From 9f8bfb859cca1667ee7df8c0124c476430481c0c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 22 Aug 2022 14:34:50 +0800 Subject: [PATCH 1783/2710] Fixed handling adjacent macro expansions that should not concatenate. Example: F()G /* expansion results of F() shall not be concatenated with G */ --- src/cc65/preproc.c | 449 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 354 insertions(+), 95 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 38b818b7d..0835bac1e 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -97,8 +97,16 @@ /* Current PP if stack */ static PPIfStack* PPStack; +/* Struct for rescan */ +typedef struct RescanInputStack RescanInputStack; +struct RescanInputStack { + Collection Lines; + Collection LastTokLens; + StrBuf* PrevTok; +}; + /* Input backup for rescan */ -static Collection* CurRescanStack; +static RescanInputStack* CurRescanStack; /* Intermediate input buffers */ static StrBuf* PLine; /* Buffer for macro expansion */ @@ -168,6 +176,16 @@ static MacroExp* InitMacroExp (MacroExp* E); static void DoneMacroExp (MacroExp* E); /* Cleanup after use of a MacroExp structure */ +static int CheckPastePPTok (StrBuf* Target, unsigned TokLen, char Next); +/* Return 1 if the last pp-tokens from Source could be concatenated with any +** characters from Appended to form a new valid one. +*/ + +static void LazyCheckNextPPTok (const StrBuf* Prev, unsigned LastTokLen); +/* Memorize the previous pp-token(s) to later check for potential pp-token +** concatenation. +*/ + /*****************************************************************************/ @@ -705,22 +723,69 @@ static void DoneMacroExp (MacroExp* E) /*****************************************************************************/ -/* Code */ +/* Rescan input stack */ /*****************************************************************************/ +static void PushRescanLine (RescanInputStack* RIS, StrBuf* L, unsigned LastTokLen) +/* Push an input line to the rescan input stack */ +{ + CollAppend (&RIS->Lines, L); + /* Abuse the pointer to store an unsigned */ + CollAppend (&RIS->LastTokLens, (void*)(uintptr_t)LastTokLen); +} + + + static void PopRescanLine (void) /* Pop and free a rescan input line if it reaches the end */ { - if (CurC == '\0' && CollCount (CurRescanStack) > 1) { - FreeStrBuf (CollPop (CurRescanStack)); - InitLine (CollLast (CurRescanStack)); + if (CurC == '\0' && CollCount (&CurRescanStack->Lines) > 1) { + FreeStrBuf (CollPop (&CurRescanStack->Lines)); + InitLine (CollLast (&CurRescanStack->Lines)); + CollPop (&CurRescanStack->LastTokLens); } } +static void InitRescanInputStack (RescanInputStack* RIS) +/* Init a RescanInputStack struct */ +{ + InitCollection (&RIS->Lines); + InitCollection (&RIS->LastTokLens); + RIS->PrevTok = 0; +} + + + +static void DoneRescanInputStack (RescanInputStack* RIS) +/* Free a RescanInputStack struct. RIS must be non-NULL. */ +{ + /* Free pushed input lines */ + while (CollCount (&RIS->Lines) > 1) { + FreeStrBuf (CollPop (&RIS->Lines)); + } + /* Switch back to the old input stack */ + InitLine (CollPop (&RIS->Lines)); + + /* Free any remaining pp-tokens used for concatenation check */ + FreeStrBuf (RIS->PrevTok); + + /* Done */ + DoneCollection (&RIS->Lines); + DoneCollection (&RIS->LastTokLens); +} + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + static int MacName (char* Ident) /* Get a macro symbol name into Ident. If we have an error, print a ** diagnostic message and clear the line. @@ -881,31 +946,7 @@ static int SkipWhitespace (int SkipLines) int Skipped = 0; int NewLine = 0; - if (CurRescanStack != 0 && - CollCount (CurRescanStack) > 1 && - Line == CollConstLast (CurRescanStack)) { - /* Rescanning */ - while (1) { - if (IsSpace (CurC)) { - NextChar (); - Skipped = 1; - } else if (CurC == '/' && NextC == '*') { - OldStyleComment (); - Skipped = 1; - } else if (IS_Get (&Standard) >= STD_C99 && CurC == '/' && NextC == '/') { - NewStyleComment (); - Skipped = 1; - } else if (CurC == '\0') { - /* End of line, switch back input */ - PopRescanLine (); - break; - } else { - /* No more white space */ - break; - } - } - } - + /* Rescanning */ while (1) { if (IsSpace (CurC)) { NextChar (); @@ -916,14 +957,51 @@ static int SkipWhitespace (int SkipLines) } else if (CurC == '/' && NextC == '/') { NewStyleComment (); Skipped = 1; - } else if (CurC == '\0' && SkipLines) { - /* End of line, read next */ - if (NextLine () != 0) { - ++PendingNewLines; - NewLine = 1; - Skipped = 0; + } else if (CurC == '\0') { + /* End of line */ + if (CurRescanStack != 0 && + CollCount (&CurRescanStack->Lines) > 1 && + Line == CollLast (&CurRescanStack->Lines)) { + + unsigned LastTokLen = (unsigned)(uintptr_t)CollLast (&CurRescanStack->LastTokLens); + + /* Check for potentially merged tokens */ + if (Skipped == 0 && LastTokLen != 0) { + /* Get the following input */ + StrBuf* Next = CollAtUnchecked (&CurRescanStack->Lines, + CollCount (&CurRescanStack->Lines) - 2); + char C = SB_Peek (Next); + + /* We cannot check right now if the next pp-token may be a + ** macro. + */ + if (IsIdent (C)) { + /* Memorize the previous pp-token and check it later */ + LazyCheckNextPPTok (Line, LastTokLen); + } else if (C != '\0' && !IsSpace (C)) { + /* If the two adjacent pp-tokens could be put together + ** to form a new one, we have to separate them with an + ** additional space. + */ + Skipped = CheckPastePPTok (Line, LastTokLen, SB_Peek (Next)); + } + + } + + /* switch back to previous input */ + PopRescanLine (); + + } else if (SkipLines) { + /* Read next line */ + if (NextLine () != 0) { + ++PendingNewLines; + NewLine = 1; + Skipped = 0; + } else { + /* End of input */ + break; + } } else { - /* End of input */ break; } } else { @@ -931,6 +1009,7 @@ static int SkipWhitespace (int SkipLines) break; } } + return Skipped != 0 ? Skipped : -(NewLine != 0); } @@ -1131,6 +1210,68 @@ static int GetPunc (char* S) +static int CheckPastePPTok (StrBuf* Source, unsigned TokLen, char Next) +/* Return 1 if the last pp-tokens from Source could be concatenated with any +** characters from Appended to form a new valid one. +*/ +{ + char C; + unsigned NewTokLen; + StrBuf* OldSource; + StrBuf Src = AUTO_STRBUF_INITIALIZER; + StrBuf Buf = AUTO_STRBUF_INITIALIZER; + + if (TokLen == 0 || IsBlank (SB_LookAtLast (Source))) { + return 0; + } + + PRECONDITION (SB_GetLen (Source) >= TokLen); + + /* Special casing "..", "/ /" and "/ *" that are not pp-tokens but still + ** need be separated. + */ + C = SB_LookAt (Source, SB_GetLen (Source) - TokLen); + if ((C == '.' && Next == '.') || (C == '/' && (Next == '/' || Next == '*'))) { + return 1; + } + + SB_CopyBuf (&Src, SB_GetConstBuf (Source) + SB_GetLen (Source) - TokLen, TokLen); + SB_AppendChar (&Src, Next); + + SB_Reset (&Src); + OldSource = InitLine (&Src); + + if (IsPPNumber (CurC, NextC)) { + /* PP-number */ + CopyPPNumber (&Buf); + } else if (IsQuotedString ()) { + /* Quoted string */ + CopyQuotedString (&Buf); + } else { + ident Ident; + if (GetPunc (Ident)) { + /* Punctuator */ + SB_CopyStr (&Buf, Ident); + } else if (IsSym (Ident)) { + /* Identifier */ + SB_CopyStr (&Buf, Ident); + } + } + + NewTokLen = SB_GetLen (&Buf); + + SB_Done (&Buf); + SB_Done (&Src); + + /* Restore old source */ + InitLine (OldSource); + + /* Return if concatenation succeeded */ + return NewTokLen != TokLen; +} + + + static int TryPastePPTok (StrBuf* Target, StrBuf* Appended, unsigned FirstTokLen, @@ -1150,10 +1291,18 @@ static int TryPastePPTok (StrBuf* Target, return 1; } + /* Since we need to concatenate the token sequences, remove the + ** last whitespace that was added to target, since it must come + ** from the input. + */ + if (IsBlank (SB_LookAtLast (Target))) { + SB_Drop (Target, 1); + } + PRECONDITION (SB_GetLen (Target) >= FirstTokLen && SB_GetLen (Appended) >= SecondTokLen); - /* Special casing "..", "//" and "/*" */ + /* Special casing "..", "/ /" and "/ *" */ if (FirstTokLen == 1) { char C = SB_LookAt (Target, SB_GetLen (Target) - FirstTokLen); char N = SB_LookAt (Appended, 0); @@ -1163,7 +1312,7 @@ static int TryPastePPTok (StrBuf* Target, if ((C == '.' && N == '.') || (C == '/' && (N == '/' || N == '*'))) { SB_AppendChar (Target, ' '); SB_Append (Target, Appended); - PPWarning ("Pasting formed '%c%c', an invalid preprocessing token", C, N); + PPWarning ("Pasting formed \"%c%c\", an invalid preprocessing token", C, N); return 0; } @@ -1206,7 +1355,7 @@ static int TryPastePPTok (StrBuf* Target, NextChar (); } SB_Terminate (&Buf); - PPWarning ("Pasting formed '%s', an invalid preprocessing token", + PPWarning ("Pasting formed \"%s\", an invalid preprocessing token", SB_GetConstBuf (&Buf)); /* Add a space between the tokens to avoid problems in rescanning */ @@ -1242,6 +1391,85 @@ static int TryPastePPTok (StrBuf* Target, +static void SeparatePPTok (StrBuf* Target, char Next) +/* Add a space to target if the previous pp-token could be concatenated with +** the following character. +*/ +{ + if (CurRescanStack->PrevTok != 0) { + unsigned Len = SB_GetLen (CurRescanStack->PrevTok) - SB_GetIndex (CurRescanStack->PrevTok); + + /* Check for pp-token pasting */ + if (CheckPastePPTok (CurRescanStack->PrevTok, Len, Next)) { + SB_AppendChar (Target, ' '); + } + FreeStrBuf (CurRescanStack->PrevTok); + CurRescanStack->PrevTok = 0; + } +} + + + +static void LazyCheckNextPPTok (const StrBuf* Prev, unsigned LastTokLen) +/* Memorize the previous pp-token(s) to later check for potential pp-token +** concatenation. +*/ +{ + char C; + int CheckEllipsis = 0; + unsigned NewIndex = SB_GetLen (Prev) - LastTokLen; + + PRECONDITION (SB_GetLen (Prev) >= LastTokLen); + + /* Check for some special cases */ + C = SB_AtUnchecked (Prev, NewIndex); + + /* We may exclude certain punctuators for speedups. As newer C standards + ** could add more punctuators such as "[[", "]]", "::" and so on, this + ** check might need changes accordingly. + */ + if (C == '[' || C == ']' || C == '(' || C == ')' || + C == '{' || C == '}' || C == '~' || C == '?' || + C == ':' || C == ';' || C == ',') { + /* These punctuators cannot be concatenated */ + return; + } + + /* Special check for .. */ + if (NewIndex > 0 && + C == '.' && + SB_AtUnchecked (Prev, NewIndex - 1) == '.') { + /* Save the preceding '.' as well */ + CheckEllipsis = 1; + } + + if (CurRescanStack->PrevTok != 0) { + unsigned OldIndex = SB_GetIndex (CurRescanStack->PrevTok); + unsigned OldLen = SB_GetLen (CurRescanStack->PrevTok) - OldIndex; + unsigned NewLen = SB_GetLen (Prev) - NewIndex; + if (OldLen == NewLen && + strncmp (SB_GetConstBuf (CurRescanStack->PrevTok) + OldIndex - CheckEllipsis, + SB_GetConstBuf (Prev) + NewIndex - CheckEllipsis, + OldLen + CheckEllipsis) == 0) { + /* Same pp-token, keep using the old one */ + } else { + /* Logic error */ + SB_Terminate (CurRescanStack->PrevTok); + Internal ("Unchecked pp-token concatenation: \"%s\"", + SB_GetConstBuf (CurRescanStack->PrevTok) + SB_GetIndex (CurRescanStack->PrevTok)); + } + } else { + /* Memorize the current line */ + CurRescanStack->PrevTok = NewStrBuf (); + SB_CopyBuf (CurRescanStack->PrevTok, + SB_GetConstBuf (Prev) + NewIndex - CheckEllipsis, + LastTokLen + CheckEllipsis); + SB_Reset (CurRescanStack->PrevTok); + } +} + + + static int CheckExtraTokens (const char* Name) /* Check for extra tokens at the end of the directive. Return 1 if there are ** extra tokens, otherwise 0. @@ -1315,7 +1543,7 @@ static unsigned ReadMacroArgs (unsigned NameIdx, MacroExp* E, const Macro* M, in ((CurC == ',' && !ME_IsNextArgVariadic (E, M)) || CurC == ')')) { /* End of actual argument. Remove whitespace from the end. */ - while (IsSpace (SB_LookAtLast (&Arg.Tokens))) { + while (IsBlank (SB_LookAtLast (&Arg.Tokens))) { SB_Drop (&Arg.Tokens, 1); } @@ -1467,9 +1695,10 @@ static unsigned ReadMacroArgs (unsigned NameIdx, MacroExp* E, const Macro* M, in -static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, Macro* M, unsigned IdentCount) +static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, Macro* M, unsigned* IdentCount) /* Argument substitution according to ISO/IEC 9899:1999 (E), 6.10.3.1ff. -** Return the count of identifiers and right parentheses in the result. +** Return the length of the last pp-token in the result and output the count +** of identifiers and right parentheses in the result to *IdentCount. */ { unsigned Idx = NameIdx; @@ -1495,7 +1724,7 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M ** required by the standard but just to match up with other major C ** compilers. */ - ME_HandleSemiNestedMacro (NameIdx, NameIdx + IdentCount, E); + ME_HandleSemiNestedMacro (NameIdx, NameIdx + *IdentCount, E); /* Substitution loop */ while (CurC != '\0') { @@ -1518,6 +1747,11 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M /* Get the corresponding actual argument */ const MacroExp* A = ME_GetOriginalArg (E, ParamIdx); + /* Separate with a white space if necessary */ + if (CheckPastePPTok (Target, TokLen, SB_Peek (&A->Tokens))) { + SB_AppendChar (Target, ' '); + } + /* For now we need no placemarkers */ SB_Append (Target, &A->Tokens); @@ -1533,6 +1767,11 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M /* Get the corresponding macro-replaced argument */ const MacroExp* A = ME_GetReplacedArg (E, ParamIdx); + /* Separate with a white space if necessary */ + if (CheckPastePPTok (Target, TokLen, SB_Peek (&A->Tokens))) { + SB_AppendChar (Target, ' '); + } + /* Append the replaced string */ SB_Append (Target, &A->Tokens); @@ -1568,7 +1807,7 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M } /* Squeeze and add the skipped whitespace back for consistency */ - if (HaveSpace) { + if (HaveSpace && !IsBlank (SB_LookAtLast (Target))) { SB_AppendChar (Target, ' '); } @@ -1577,20 +1816,11 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M } else if (CurC == '#' && NextC == '#') { - /* ## operator. */ + /* ## operator */ NextChar (); NextChar (); SkipWhitespace (0); - /* Since we need to concatenate the token sequences, remove the - ** last whitespace that was added to target, since it must come - ** from the input. - */ - if (IsBlank (SB_LookAtLast (Target))) { - SB_Drop (Target, 1); - HaveSpace = 0; - } - /* If the next token is an identifier which is a macro argument, ** replace it, otherwise just add it. */ @@ -1661,7 +1891,7 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M /* Keep the whitespace for consistency */ HaveSpace = SkipWhitespace (0); - if (HaveSpace) { + if (HaveSpace && !IsBlank (SB_LookAtLast (Target))) { SB_AppendChar (Target, ' '); } @@ -1720,23 +1950,24 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M ** '/' characters would be parsed wrongly as division operators. */ HaveSpace = SkipWhitespace (0); - if (HaveSpace) { - SB_AppendChar (&Buf, ' '); - } if (NeedPaste) { unsigned Len = SB_GetLen (&Buf); /* Concatenate pp-tokens */ if (TryPastePPTok (Target, &Buf, TokLen, Len)) { - TokLen += Len - HaveSpace; + TokLen += Len; } else { - TokLen = Len - HaveSpace; + TokLen = Len; } } else { /* Just append the token */ SB_Append (Target, &Buf); - TokLen = SB_GetLen (&Buf) - HaveSpace; + TokLen = SB_GetLen (&Buf); + } + + if (HaveSpace && !IsBlank (SB_LookAtLast (Target))) { + SB_AppendChar (Target, ' '); } } @@ -1745,26 +1976,36 @@ static unsigned SubstMacroArgs (unsigned NameIdx, StrBuf* Target, MacroExp* E, M SB_Done (&Buf); /* Remove the macro name itself together with the arguments (if any) */ - ME_RemoveToken (Idx, 1 + IdentCount, E); + ME_RemoveToken (Idx, 1 + *IdentCount, E); + + /* Hide this macro for the whole result of this expansion */ + ME_HideMacro (NameIdx, Idx - NameIdx, E, M); /* Switch back the input */ UseInputStack (OldInputStack); InitLine (OldSource); SB_SetIndex (&M->Replacement, OldIndex); - /* Return the count of substituted identifiers and right parentheses */ - return Idx - NameIdx; + /* Set the count of identifiers and right parentheses in the result */ + *IdentCount = Idx - NameIdx; + + /* Return the length of the last pp-token */ + return TokLen; } static unsigned ExpandMacro (unsigned Idx, StrBuf* Target, MacroExp* E, Macro* M, int MultiLine) -/* Expand a macro into Target. Return the count of identifiers and right -** parentheses in the result of the expansion. +/* Expand a macro into Target. Return the length of the last pp-token in the +** result of the expansion. */ { - /* Count of identifiers and right parentheses */ - unsigned Count = 0; + unsigned Count = 0; /* Count of identifiers and right parentheses */ + unsigned Len = 0; /* Length of the last pp-token in the result */ + + /* Disable previous pp-token spacing checking */ + StrBuf* PrevTok = CurRescanStack->PrevTok; + CurRescanStack->PrevTok = 0; #if DEV_CC65_DEBUG static unsigned V = 0; @@ -1779,7 +2020,7 @@ static unsigned ExpandMacro (unsigned Idx, StrBuf* Target, MacroExp* E, Macro* M if ((E->Flags & MES_ERROR) == 0) { /* Replace macro parameters with arguments handling the # and ## operators */ - Count = SubstMacroArgs (Idx, Target, E, M, Count); + Len = SubstMacroArgs (Idx, Target, E, M, &Count); } else { SB_CopyStr (Target, M->Name); } @@ -1789,15 +2030,17 @@ static unsigned ExpandMacro (unsigned Idx, StrBuf* Target, MacroExp* E, Macro* M ME_ClearArgs (E); } - /* Hide this macro for the whole result of this expansion */ - ME_HideMacro (Idx, Count, E, M); - #if DEV_CC65_DEBUG printf ("Expanded (%u) %s to %d ident(s) at %u: %s\n", V--, M->Name, Count, Idx, SB_GetConstBuf (Target)); #endif - return Count; + /* Reenable previous pp-token concatenation checking */ + FreeStrBuf (CurRescanStack->PrevTok); + CurRescanStack->PrevTok = PrevTok; + + /* Return the length of the last pp-token in the expansion result */ + return Len; } @@ -1811,13 +2054,13 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi StrBuf* TmpTarget = NewStrBuf (); /* Remember the current input and switch to Source */ - StrBuf* OldSource = InitLine (Source); - Collection RescanStack = AUTO_COLLECTION_INITIALIZER; - Collection* OldRescanStack = CurRescanStack; - + StrBuf* OldSource = InitLine (Source); + RescanInputStack RescanStack; + RescanInputStack* OldRescanStack = CurRescanStack; + InitRescanInputStack (&RescanStack); + PushRescanLine (&RescanStack, Line, 0); CurRescanStack = &RescanStack; - CollAppend (CurRescanStack, Line); /* Loop substituting macros */ while (CurC != '\0') { @@ -1839,6 +2082,10 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi NextChar (); SkipWhitespace (0); } + + /* Add a space to separate the result if necessary */ + SeparatePPTok (Target, '0'); + if (IsSym (Ident)) { /* Eat the identifier */ ME_RemoveToken (Count, 1, E); @@ -1864,7 +2111,8 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi /* Check if it's an expandable macro */ if (M != 0 && ME_CanExpand (Count, E, M)) { - int MultiLine = (ModeFlags & MSM_MULTILINE) != 0; + int MultiLine = (ModeFlags & MSM_MULTILINE) != 0; + unsigned LastTokLen; /* Check if this is a function-like macro */ if (M->ParamCount >= 0) { @@ -1878,7 +2126,8 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi /* No expansion */ ++Count; - /* Just keep the macro name */ + /* Add a space to separate the macro name if necessary */ + SeparatePPTok (Target, M->Name[0]); SB_AppendStr (Target, M->Name); /* Keep tracking pp-token lengths */ @@ -1929,10 +2178,10 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi */ if (MultiLine && OLine == 0) { OLine = TmpTarget; - ExpandMacro (Count, TmpTarget, E, M, MultiLine); + LastTokLen = ExpandMacro (Count, TmpTarget, E, M, MultiLine); OLine = 0; } else { - ExpandMacro (Count, TmpTarget, E, M, MultiLine); + LastTokLen = ExpandMacro (Count, TmpTarget, E, M, MultiLine); } /* Check for errors in expansion */ @@ -1947,7 +2196,7 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi /* Start rescanning from the temporary result */ SB_Reset (TmpTarget); InitLine (TmpTarget); - CollAppend (CurRescanStack, TmpTarget); + PushRescanLine (CurRescanStack, TmpTarget, LastTokLen); /* Switch the buffers */ TmpTarget = NewStrBuf (); @@ -1961,6 +2210,9 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi /* An unexpandable identifier. Keep it. */ ++Count; + + /* Add a space to separate the macro name if necessary */ + SeparatePPTok (Target, Ident[0]); SB_AppendStr (Target, Ident); /* Keep tracking pp-token lengths */ @@ -1973,7 +2225,12 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi } } } else { - unsigned LastLen = SB_GetLen (Target); + unsigned LastLen; + + /* Add a space to separate the macro name if necessary */ + SeparatePPTok (Target, CurC); + + LastLen = SB_GetLen (Target); if ((ModeFlags & MSM_TOK_HEADER) != 0 && (CurC == '<' || CurC == '\"')) { CopyHeaderNameToken (Target); @@ -1994,6 +2251,14 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi ++Count; } SB_AppendStr (Target, Ident); + + /* If an identifier follows immediately, it could be a macro + ** expanded later that occasionally need a space to separate. + */ + if (IsIdent (CurC)) { + /* Memorize the previous pp-token and check it later */ + LazyCheckNextPPTok (Target, strlen (Ident)); + } } else { SB_AppendChar (Target, CurC); NextChar (); @@ -2014,7 +2279,7 @@ Loop: /* Switch back to the previous input stream if we have finished ** rescanning the current one. */ - if (CurC == '\0' && CollCount (CurRescanStack) > 1) { + if (CurC == '\0' && CollCount (&CurRescanStack->Lines) > 1) { /* Check for rescan sequence end and pp-token pasting */ Skipped = SkipWhitespace (0) || Skipped; } @@ -2038,18 +2303,12 @@ Loop: /* Sanity check */ if ((E->Flags & MES_ERROR) == 0) { - CHECK (CollCount (CurRescanStack) == 1); + CHECK (CollCount (&CurRescanStack->Lines) == 1); } - /* Switch back to the old input stack */ - while (CollCount (CurRescanStack) > 1) { - FreeStrBuf (CollPop (CurRescanStack)); - } - CurRescanStack = OldRescanStack; - /* Done with the current input stack */ - CHECK (CollCount (&RescanStack) == 1); - DoneCollection (&RescanStack); + DoneRescanInputStack (CurRescanStack); + CurRescanStack = OldRescanStack; /* Switch back the input */ InitLine (OldSource); From 22ea30c75f02b4c130d42b3c18fe908a66851ef7 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Tue, 23 Aug 2022 11:56:05 +0200 Subject: [PATCH 1784/2710] "cat" result to console on failure (only on *nix right now) --- test/val/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/val/Makefile b/test/val/Makefile index acac670cb..a3722f7bf 100644 --- a/test/val/Makefile +++ b/test/val/Makefile @@ -9,11 +9,13 @@ ifdef CMD_EXE NULLDEV = nul: MKDIR = mkdir $(subst /,\,$1) RMDIR = -rmdir /s /q $(subst /,\,$1) + CATRES = else S = / NULLDEV = /dev/null MKDIR = mkdir -p $1 RMDIR = $(RM) -r $1 + CATRES = || (cat $(WORKDIR)/$$@.out && false) endif ifdef QUIET @@ -51,7 +53,7 @@ $(WORKDIR)/%.$1.$2.prg: %.c | $(WORKDIR) $(CC65) -t sim$2 $$(CC65FLAGS) --add-source -$1 -o $$(@:.prg=.s) $$< $(NULLERR) $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) - $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/$$@.out + $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/$$@.out $(CATRES) endef # PRG_template From 26945c32ac91d30797f0529fc6d567af030db631 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 24 Aug 2022 15:30:52 +0800 Subject: [PATCH 1785/2710] Fixed function parameters declared as function types rather than function pointers. --- src/cc65/expr.c | 8 ++++---- test/val/bug1838.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 test/val/bug1838.c diff --git a/src/cc65/expr.c b/src/cc65/expr.c index f3003507a..afb5e1960 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1133,10 +1133,6 @@ static void Primary (ExprDesc* E) /* Enum or some other numeric constant */ E->Flags = E_LOC_NONE | E_RTYPE_RVAL; E->IVal = Sym->V.ConstVal; - } else if ((Sym->Flags & SC_FUNC) == SC_FUNC) { - /* Function */ - E->Flags = E_LOC_GLOBAL | E_RTYPE_LVAL; - E->Name = (uintptr_t) Sym->Name; } else if ((Sym->Flags & SC_AUTO) == SC_AUTO) { /* Local variable. If this is a parameter for a variadic ** function, we have to add some address calculations, and the @@ -1151,6 +1147,10 @@ static void Primary (ExprDesc* E) E->Flags = E_LOC_STACK | E_RTYPE_LVAL; E->IVal = Sym->V.Offs; } + } else if ((Sym->Flags & SC_FUNC) == SC_FUNC) { + /* Function */ + E->Flags = E_LOC_GLOBAL | E_RTYPE_LVAL; + E->Name = (uintptr_t) Sym->Name; } else if ((Sym->Flags & SC_REGISTER) == SC_REGISTER) { /* Register variable, zero page based */ E->Flags = E_LOC_REGISTER | E_RTYPE_LVAL; diff --git a/test/val/bug1838.c b/test/val/bug1838.c new file mode 100644 index 000000000..ba3c1164f --- /dev/null +++ b/test/val/bug1838.c @@ -0,0 +1,35 @@ +/* Bug 1838 - function parameters declared as function types rather than function pointers */ + +#include <stdio.h> + +static int failures = 0; + +typedef int fn_t(int); + +int main(void) +{ + void foo(fn_t*); + fn_t bar; + + foo(bar); + return 0; +} + +void foo(int func(int)) +{ + int n = func(42); + + if (n != 12) { + printf("n = %d, expected: 12\n", n); + ++failures; + } +} + +int bar(int a) +{ + if (a != 42) { + printf("a = %d, expected: 42\n", a); + ++failures; + } + return 12; +} From 1dbc5cb325c487d50242051029f508b266771602 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 24 Aug 2022 16:39:44 +0800 Subject: [PATCH 1786/2710] Simple testcase for __LINE__, __FILE__ as well as #line. --- test/val/bug1573.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++ test/val/bug1573.h | 14 ++++++++ 2 files changed, 95 insertions(+) create mode 100644 test/val/bug1573.c create mode 100644 test/val/bug1573.h diff --git a/test/val/bug1573.c b/test/val/bug1573.c new file mode 100644 index 000000000..47172c398 --- /dev/null +++ b/test/val/bug1573.c @@ -0,0 +1,81 @@ +/* Tests for predefined macros __LINE__ and __FILE__ as well as #line control */ + +#include <stdio.h> +#include <string.h> + +static int failures = 0; + +#if !defined __LINE__ +#error __LINE__ is not predefined! +#endif + +#if !defined __FILE__ +#error __FILE__ is not predefined! +#endif + +#define CONCAT(a,b) CONCAT_impl_(a,b) +#define CONCAT_impl_(a,b) a##b +#define MKSTR(a) MKSTR_impl_(a) +#define MKSTR_impl_(a) #a +char CONCAT(ident,__LINE__)[0+__LINE__]; +char CONCAT(ident,__LINE__)[0+__LINE__]; + +#define GET_FILE() __FILE__ +#define THIS_FILENAME_1 "bug1573.c" +#define THIS_FILENAME_2 "<<bar>>" +#define INC_FILENAME_1 "bug1573.h" +#define INC_FILENAME_2 "<<foo>>" + +#line __LINE__ THIS_FILENAME_1 /* Note: #line sets the line number of the NEXT line */ +void foo(void) +{ + if (strcmp (GET_FILE(), THIS_FILENAME_1) != 0) { + printf("Expected: %s, got: %s\n", THIS_FILENAME_1, GET_FILE()); + ++failures; + } +} + +#line __LINE__ THIS_FILENAME_2 /* Note: #line sets the line number of the NEXT line */ +#include INC_FILENAME_1 +long line2 = __LINE__; + +int main(void) +{ + if (strcmp (filename1, INC_FILENAME_1) != 0) { + printf("Expected filename1: %s, got: %s\n", INC_FILENAME_1, filename1); + ++failures; + } + + if (strcmp (filename2, INC_FILENAME_2) != 0) { + printf("Expected filename2: %s, got: %s\n", INC_FILENAME_2, filename2); + ++failures; + } + + foo(); + +#line 65535 + if (strcmp (GET_FILE(), THIS_FILENAME_2) != 0) { + printf("Expected: %s, got: %s\n", THIS_FILENAME_2, GET_FILE()); + ++failures; + } + + if (line1 != 5L) { + printf("Expected line1: %ld, got: %ld\n", 5L, line1); + ++failures; + } + + if (line2 != 38L) { + printf("Expected line2: %ld, got: %ld\n", 38L, line2); + ++failures; + } + + if (strcmp (ans1, ans2) != 0 || strcmp (ans1, "42") != 0) { + ++failures; + printf("Expected: 42, ans1: %s, ans2: %s\n", ans1, ans2); + } + + if (failures != 0) { + printf("Failures: %d\n", failures); + } + return failures; +} diff --git a/test/val/bug1573.h b/test/val/bug1573.h new file mode 100644 index 000000000..4e64b5ca2 --- /dev/null +++ b/test/val/bug1573.h @@ -0,0 +1,14 @@ +/* Tests for predefined macros __LINE__ and __FILE__ as well as #line control */ + +#line __LINE__ INC_FILENAME_1 +#define GET_LINE() __LINE__ +char filename1[] = GET_FILE(); +long line1 = GET_LINE(); + +#line 42 +const char ans1[] = MKSTR(GET_LINE()); + +#line 40 INC_FILENAME_2 +char filename2[] = GET_FILE(); +const char ans2[] = \ +MKSTR(GET_LINE()); From 90b9438b48647f573464aede78e7b6e40263cb1d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 27 Aug 2022 01:15:06 +0200 Subject: [PATCH 1787/2710] added testcase related to issue #1768 --- test/misc/Makefile | 6 ++++++ test/misc/bug1768.c | 14 ++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 test/misc/bug1768.c diff --git a/test/misc/Makefile b/test/misc/Makefile index e6c58c5a4..e77d37b29 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -58,6 +58,12 @@ $(ISEQUAL): ../isequal.c | $(WORKDIR) define PRG_template +# should compile, but gives an error +$(WORKDIR)/bug1768.$1.$2.prg: bug1768.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." + $(if $(QUIET),echo misc/bug1768.$1.$2.prg) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # should compile, but gives an error $(WORKDIR)/bug760.$1.$2.prg: bug760.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." diff --git a/test/misc/bug1768.c b/test/misc/bug1768.c new file mode 100644 index 000000000..916aa64bc --- /dev/null +++ b/test/misc/bug1768.c @@ -0,0 +1,14 @@ + +#include <stdlib.h> + +int a = 1 || (8 / 0); +int b = 0 && (8 % 0); +int c = 1 ? 42 : (0 % 0); +int d = 1 || a / 0; +int e = 0 && b % 0; +int f = 1 ? 42 : (a %= 0, b /= 0); + +int main(void) +{ + return EXIT_SUCCESS; +} From 41b29d5c81f26879b79d2093295e2764387951d5 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 27 Aug 2022 02:10:02 +0200 Subject: [PATCH 1788/2710] add testcase related to issue #1252 --- test/misc/Makefile | 8 ++++++++ test/misc/bug1252.c | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 test/misc/bug1252.c diff --git a/test/misc/Makefile b/test/misc/Makefile index e77d37b29..e761b1e3e 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -58,6 +58,14 @@ $(ISEQUAL): ../isequal.c | $(WORKDIR) define PRG_template +# should compile, but gives an error +$(WORKDIR)/bug1252.$1.$2.prg: bug1252.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." + $(if $(QUIET),echo misc/bug1252.$1.$2.prg) + $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + $(NOT) $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) +# $(NOT) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) + # should compile, but gives an error $(WORKDIR)/bug1768.$1.$2.prg: bug1768.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." diff --git a/test/misc/bug1252.c b/test/misc/bug1252.c new file mode 100644 index 000000000..c94508d7d --- /dev/null +++ b/test/misc/bug1252.c @@ -0,0 +1,19 @@ + +#include <stdlib.h> + +int main(void) +{ +// this works +c_label: + asm("inx\n" + "bne %g\n", + c_label); + +// this does not work +c_label2: + asm("inx\n" + "bne %g \n", + c_label2); + + return EXIT_SUCCESS; +} From 168f42bb836ba940ec7aedaf76356d3facf7d595 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 27 Aug 2022 02:14:52 +0200 Subject: [PATCH 1789/2710] fix whitespace --- test/misc/bug1252.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/misc/bug1252.c b/test/misc/bug1252.c index c94508d7d..599aa064b 100644 --- a/test/misc/bug1252.c +++ b/test/misc/bug1252.c @@ -7,13 +7,13 @@ int main(void) c_label: asm("inx\n" "bne %g\n", - c_label); + c_label); // this does not work c_label2: asm("inx\n" "bne %g \n", - c_label2); + c_label2); return EXIT_SUCCESS; } From 6096a24f1dea135e0d435d72df0c714ff5b0b828 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 28 Aug 2022 03:41:48 +0200 Subject: [PATCH 1790/2710] dont add whitespace after a label to the actual label, this fixes the root cause of #1252 --- src/cc65/codeseg.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cc65/codeseg.c b/src/cc65/codeseg.c index e621147ab..5949c0c6f 100644 --- a/src/cc65/codeseg.c +++ b/src/cc65/codeseg.c @@ -399,7 +399,10 @@ static CodeEntry* ParseInsn (CodeSeg* S, LineInfo* LI, const char* L) default: /* Absolute, maybe indexed */ - L = ReadToken (L, ",", Arg, sizeof (Arg)); + L = ReadToken (L, ", ", Arg, sizeof (Arg)); + if (*L == ' ') { + L = SkipSpace (L+1); + } if (*L == '\0') { /* Absolute, zeropage or branch */ if ((OPC->Info & OF_BRA) != 0) { From d371046ae4c95643c69bbe26e8e0f02dce43716c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 28 Aug 2022 03:43:02 +0200 Subject: [PATCH 1791/2710] Despite not technically needed, it seems to be desirable to remove all trailing whitespace from inline assembly --- src/cc65/codegen.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 326d751b6..e521fff73 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -4921,5 +4921,25 @@ void g_switch (Collection* Nodes, unsigned DefaultLabel, unsigned Depth) void g_asmcode (struct StrBuf* B) /* Output one line of assembler code. */ { - AddCodeLine ("%.*s", (int) SB_GetLen (B), SB_GetConstBuf (B)); + int len = (int) SB_GetLen(B); + const char *buf = SB_GetConstBuf(B); + + /* remove whitespace at end of line */ + /* NOTE: This masks problems in ParseInsn(), which in some cases seems to + rely on no whitespace being present at the end of a line in generated + code (see issue #1252). However, it generally seems to be a good + idea to remove trailing whitespace from (inline) assembly, so we + do it anyway. */ + while (len) { + switch (buf[len - 1]) { + case '\n': + case ' ': + case '\t': + --len; + continue; + } + break; + } + + AddCodeLine ("%.*s", len, buf); } From ce6ee1b8919e40a25cd4dddad4eacbc9256160ce Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 28 Aug 2022 03:43:54 +0200 Subject: [PATCH 1792/2710] test some more possible cases and move test into test/val --- test/misc/Makefile | 8 -------- test/misc/bug1252.c | 19 ------------------- test/val/bug1252.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 27 deletions(-) delete mode 100644 test/misc/bug1252.c create mode 100644 test/val/bug1252.c diff --git a/test/misc/Makefile b/test/misc/Makefile index e761b1e3e..e77d37b29 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -58,14 +58,6 @@ $(ISEQUAL): ../isequal.c | $(WORKDIR) define PRG_template -# should compile, but gives an error -$(WORKDIR)/bug1252.$1.$2.prg: bug1252.c | $(WORKDIR) - @echo "FIXME: " $$@ "currently does not compile." - $(if $(QUIET),echo misc/bug1252.$1.$2.prg) - $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - $(NOT) $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) -# $(NOT) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) - # should compile, but gives an error $(WORKDIR)/bug1768.$1.$2.prg: bug1768.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." diff --git a/test/misc/bug1252.c b/test/misc/bug1252.c deleted file mode 100644 index 599aa064b..000000000 --- a/test/misc/bug1252.c +++ /dev/null @@ -1,19 +0,0 @@ - -#include <stdlib.h> - -int main(void) -{ -// this works -c_label: - asm("inx\n" - "bne %g\n", - c_label); - -// this does not work -c_label2: - asm("inx\n" - "bne %g \n", - c_label2); - - return EXIT_SUCCESS; -} diff --git a/test/val/bug1252.c b/test/val/bug1252.c new file mode 100644 index 000000000..ab4fd21fc --- /dev/null +++ b/test/val/bug1252.c @@ -0,0 +1,45 @@ + +// bug #1252 - inline asm: cc65 chokes on label ref if space/tab follows + +#include <stdlib.h> + +int main(void) +{ +// first test the recommended way to use labels in inline assembly: + +// this works +c_label: + asm("inx\n" + "bne %g\n", + c_label); + +// this does not work +c_label2: + asm("inx\n" + "bne %g \n", + c_label2); + +// now the following is from the original bug report. note that using labels +// this way only works by chance - the name of the label may clash with +// generated labels + +// this works + asm("label1: inx\n" + "bne label1\n"); + +// this does not work + asm("label2: inx\n" + "bne label2 \n"); + +// a variant of the above using local labels. + +// this works + asm("@label1: inx\n" + "bne @label1\n"); + +// this does not work + asm("@label2: inx\n" + "bne @label2 \n"); + + return EXIT_SUCCESS; +} From 8e5f6b822d7b5ff3a0d4b601188ebaa68399a4dc Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 28 Aug 2022 20:05:11 +0200 Subject: [PATCH 1793/2710] fix setjmp.h --- include/setjmp.h | 4 ++-- libsrc/common/setjmp.s | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/include/setjmp.h b/include/setjmp.h index 460829e38..5fac25634 100644 --- a/include/setjmp.h +++ b/include/setjmp.h @@ -42,8 +42,8 @@ typedef char jmp_buf [5]; -int __fastcall__ _setjmp (jmp_buf buf); -#define setjmp _setjmp /* ISO insists on a macro */ +int __fastcall__ __setjmp (jmp_buf buf); +#define setjmp __setjmp /* ISO insists on a macro */ void __fastcall__ longjmp (jmp_buf buf, int retval) __attribute__((noreturn)); diff --git a/libsrc/common/setjmp.s b/libsrc/common/setjmp.s index a763ac3ec..886853368 100644 --- a/libsrc/common/setjmp.s +++ b/libsrc/common/setjmp.s @@ -2,15 +2,15 @@ ; 1998-06-06, Ullrich von Bassewitz ; 2015-09-11, Greg King ; -; int __fastcall__ setjmp (jmp_buf buf); +; int __fastcall__ __setjmp (jmp_buf buf); ; - .export __setjmp + .export ___setjmp .import return0 .importzp sp, ptr1 -__setjmp: +___setjmp: sta ptr1 ; Save buf stx ptr1+1 ldy #0 From 9246775ebee5aa5790d09883cb6b52277df24e6e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 28 Aug 2022 20:08:13 +0200 Subject: [PATCH 1794/2710] use __afailed instead of _afailed --- include/assert.h | 4 ++-- libsrc/common/_afailed.c | 2 +- libsrc/geos-common/common/_afailed.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/assert.h b/include/assert.h index a4dcd5d7f..ca8d4acc1 100644 --- a/include/assert.h +++ b/include/assert.h @@ -42,8 +42,8 @@ #ifdef NDEBUG # define assert(expr) #else -extern void __fastcall__ _afailed (const char*, unsigned); -# define assert(expr) ((expr)? (void)0 : _afailed(__FILE__, __LINE__)) +extern void __fastcall__ __afailed (const char*, unsigned); +# define assert(expr) ((expr)? (void)0 : __afailed(__FILE__, __LINE__)) #endif /* TODO: Guard with #if __CC65_STD__ >= __CC65_STD_C11__ if there diff --git a/libsrc/common/_afailed.c b/libsrc/common/_afailed.c index ab8b94ca6..01e8d5397 100644 --- a/libsrc/common/_afailed.c +++ b/libsrc/common/_afailed.c @@ -12,7 +12,7 @@ #include <stdlib.h> -void __fastcall__ _afailed (char* file, unsigned line) +void __fastcall__ __afailed (char* file, unsigned line) { raise (SIGABRT); fprintf (stderr, "ASSERTION FAILED IN %s:%u\n", file, line); diff --git a/libsrc/geos-common/common/_afailed.c b/libsrc/geos-common/common/_afailed.c index 97727d605..acc437fb0 100644 --- a/libsrc/geos-common/common/_afailed.c +++ b/libsrc/geos-common/common/_afailed.c @@ -8,7 +8,7 @@ #include <stdlib.h> #include <geos.h> -void _afailed (char* file, unsigned line) +void __afailed (char* file, unsigned line) { ExitTurbo(); From f70020a2b8b5bf03ddad690191a02eab4697d758 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 28 Aug 2022 20:18:34 +0200 Subject: [PATCH 1795/2710] use __sig_ign and __sig_dft instead of _sig_ign and _sig_dft --- asminc/signal.inc | 4 ++-- include/signal.h | 8 ++++---- libsrc/common/raise.s | 4 ++-- libsrc/common/signal.s | 4 ++-- libsrc/common/sigtable.s | 12 ++++++------ 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/asminc/signal.inc b/asminc/signal.inc index ebde07e42..597cad413 100644 --- a/asminc/signal.inc +++ b/asminc/signal.inc @@ -49,8 +49,8 @@ SIGCOUNT = 6 ; Number of signals .global sigtable ; Function declarations -.global __sig_ign -.global __sig_dfl +.global ___sig_ign +.global ___sig_dfl .global _signal .global _raise diff --git a/include/signal.h b/include/signal.h index 0d5f6ad09..d67cebf7c 100644 --- a/include/signal.h +++ b/include/signal.h @@ -45,12 +45,12 @@ typedef unsigned char sig_atomic_t; typedef void __fastcall__ (*__sigfunc) (int); /* Functions that implement SIG_IGN and SIG_DFL */ -void __fastcall__ _sig_ign (int); -void __fastcall__ _sig_dfl (int); +void __fastcall__ __sig_ign (int); +void __fastcall__ __sig_dfl (int); /* Standard signal handling functions */ -#define SIG_DFL _sig_dfl -#define SIG_IGN _sig_ign +#define SIG_DFL __sig_dfl +#define SIG_IGN __sig_ign #define SIG_ERR ((__sigfunc) 0x0000) /* Signal numbers */ diff --git a/libsrc/common/raise.s b/libsrc/common/raise.s index 07898ef90..205bbd471 100644 --- a/libsrc/common/raise.s +++ b/libsrc/common/raise.s @@ -33,9 +33,9 @@ _raise: ; introduce race conditions, but it's the simplest way to satisfy the ; standard). - lda #<__sig_dfl + lda #<___sig_dfl sta sigtable,x - lda #>__sig_dfl + lda #>___sig_dfl sta sigtable+1,x ; Restore the signal number and call the function diff --git a/libsrc/common/signal.s b/libsrc/common/signal.s index 333072801..40262c457 100644 --- a/libsrc/common/signal.s +++ b/libsrc/common/signal.s @@ -54,7 +54,7 @@ _signal: pla tax pla -__sig_ign: +___sig_ign: rts ; Error entry: We use our knowledge that SIG_ERR is zero here to save a byte @@ -63,6 +63,6 @@ invalidsig: lda #<EINVAL jsr __seterrno ; Returns 0 in A tax ; A/X = 0 -__sig_dfl: +___sig_dfl: rts diff --git a/libsrc/common/sigtable.s b/libsrc/common/sigtable.s index 7780ef634..873d1def3 100644 --- a/libsrc/common/sigtable.s +++ b/libsrc/common/sigtable.s @@ -14,11 +14,11 @@ .data sigtable: - .word __sig_dfl ; SIGABRT - .word __sig_dfl ; SIGFPE - .word __sig_dfl ; SIGILL - .word __sig_dfl ; SIGINT - .word __sig_dfl ; SIGSEGV - .word __sig_dfl ; SIGTERM + .word ___sig_dfl ; SIGABRT + .word ___sig_dfl ; SIGFPE + .word ___sig_dfl ; SIGILL + .word ___sig_dfl ; SIGINT + .word ___sig_dfl ; SIGSEGV + .word ___sig_dfl ; SIGTERM From 6ba3deffa48b030ed14901744eb38933ef7bdf47 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 28 Aug 2022 20:22:25 +0200 Subject: [PATCH 1796/2710] use __clocks_per_sec instead of _clocks_per_sec --- include/time.h | 4 ++-- libsrc/atari/clock.s | 6 +++--- libsrc/atari7800/clocks_per_sec.s | 6 +++--- libsrc/lynx/clock.s | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/include/time.h b/include/time.h index 99bb1c8e3..642d68c4e 100644 --- a/include/time.h +++ b/include/time.h @@ -89,8 +89,8 @@ struct tm { # define CLOCKS_PER_SEC 10 #elif defined(__ATARI__) || defined (__LYNX__) /* Read the clock rate at runtime */ -clock_t _clocks_per_sec (void); -# define CLOCKS_PER_SEC _clocks_per_sec() +clock_t __clocks_per_sec (void); +# define CLOCKS_PER_SEC __clocks_per_sec() #endif #define CLOCK_REALTIME 0 diff --git a/libsrc/atari/clock.s b/libsrc/atari/clock.s index 853870520..42809c4a4 100644 --- a/libsrc/atari/clock.s +++ b/libsrc/atari/clock.s @@ -3,10 +3,10 @@ ; originally by Ullrich von Bassewitz and Sidney Cadot ; ; clock_t clock (void); -; clock_t _clocks_per_sec (void); +; clock_t __clocks_per_sec (void); ; - .export _clock, __clocks_per_sec + .export _clock, ___clocks_per_sec .importzp sreg .include "atari.inc" @@ -28,7 +28,7 @@ .endproc -.proc __clocks_per_sec +.proc ___clocks_per_sec ldx #$00 ; Clear byte 1 of return value stx sreg ; Clear byte 2 of return value diff --git a/libsrc/atari7800/clocks_per_sec.s b/libsrc/atari7800/clocks_per_sec.s index e2c7d9d8d..d9179448f 100644 --- a/libsrc/atari7800/clocks_per_sec.s +++ b/libsrc/atari7800/clocks_per_sec.s @@ -1,10 +1,10 @@ ; ; 2022-03-15, Karri Kaksonen ; -; clock_t _clocks_per_sec (void); +; clock_t __clocks_per_sec (void); ; - .export __clocks_per_sec + .export ___clocks_per_sec .import sreg: zp .import _paldetected @@ -17,7 +17,7 @@ ;----------------------------------------------------------------------------- ; Return the number of clock ticks in one second. ; - .proc __clocks_per_sec + .proc ___clocks_per_sec lda #0 tax diff --git a/libsrc/lynx/clock.s b/libsrc/lynx/clock.s index e29799df6..d881e5a67 100644 --- a/libsrc/lynx/clock.s +++ b/libsrc/lynx/clock.s @@ -3,13 +3,13 @@ ; 2012-02-06, Greg King ; ; clock_t clock (void); -; clock_t _clocks_per_sec (void); +; clock_t __clocks_per_sec (void); ; ; clocks_per_sec()'s test-values are based on the numbers in "set_tv.s". ; If you change the numbers there, then change them here, too. ; - .export _clock, __clocks_per_sec, clock_count + .export _clock, ___clocks_per_sec, clock_count .interruptor update_clock, 2 ; (low priority) .constructor init_clock @@ -38,7 +38,7 @@ ;----------------------------------------------------------------------------- ; Return the number of clock ticks in one second. ; -__clocks_per_sec: +___clocks_per_sec: ldx #$00 ; >50, >60, >75 ldy PBKUP lda #<75 From 5d390489a8f754abfd032af858b6ed5686553187 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 28 Aug 2022 21:36:22 +0200 Subject: [PATCH 1797/2710] fix underscores in errno (and related) headers --- asminc/errno.inc | 8 ++++---- include/cbm.h | 8 ++++---- include/dio.h | 6 +++--- include/errno.h | 30 ++++++++++++++++++++---------- 4 files changed, 31 insertions(+), 21 deletions(-) diff --git a/asminc/errno.inc b/asminc/errno.inc index 1efe88cda..2e876c7ac 100644 --- a/asminc/errno.inc +++ b/asminc/errno.inc @@ -4,10 +4,10 @@ ; Variables and functions - .global __errno, __oserror - .global __osmaperrno - .global __seterrno - .global __directerrno, __mappederrno + .global ___errno, ___oserror + .global ___osmaperrno + .global ___seterrno + .global ___directerrno, ___mappederrno ; Error codes, must match the values in the C headers .enum diff --git a/include/cbm.h b/include/cbm.h index cceb76b1b..0679b2d65 100644 --- a/include/cbm.h +++ b/include/cbm.h @@ -225,7 +225,7 @@ void cbm_k_untlk (void); -/* The cbm_* I/O functions below set _oserror (see errno.h), +/* The cbm_* I/O functions below set __oserror (see errno.h), ** in case of an error. ** ** error-code BASIC error @@ -251,7 +251,7 @@ unsigned int __fastcall__ cbm_load (const char* name, unsigned char device, void ** address of the file if "data" is the null pointer (like load"name",8,1 ** in BASIC). ** Returns number of bytes that were loaded if loading was successful; -** otherwise 0, "_oserror" contains an error-code, then (see table above). +** otherwise 0, "__oserror" contains an error-code, then (see table above). */ unsigned char __fastcall__ cbm_save (const char* name, unsigned char device, @@ -274,7 +274,7 @@ void __fastcall__ cbm_close (unsigned char lfn); int __fastcall__ cbm_read (unsigned char lfn, void* buffer, unsigned int size); /* Reads up to "size" bytes from a file into "buffer". ** Returns the number of actually-read bytes, 0 if there are no bytes left. -** -1 in case of an error; then, _oserror contains an error-code (see table +** -1 in case of an error; then, __oserror contains an error-code (see table ** above). (Remember: 0 means end-of-file; -1 means error.) */ @@ -282,7 +282,7 @@ int __fastcall__ cbm_write (unsigned char lfn, const void* buffer, unsigned int size); /* Writes up to "size" bytes from "buffer" to a file. ** Returns the number of actually-written bytes, or -1 in case of an error; -** _oserror contains an error-code, then (see above table). +** __oserror contains an error-code, then (see above table). */ unsigned char cbm_opendir (unsigned char lfn, unsigned char device, ...); diff --git a/include/dio.h b/include/dio.h index 4201728cc..2521a90ff 100644 --- a/include/dio.h +++ b/include/dio.h @@ -35,9 +35,9 @@ -/* Please note: All functions in this file will set _oserror *and* return its -** value. The only exception is dio_open, which will return NULL, but _oserror -** will be set. All function will also set _oserror in case of successful +/* Please note: All functions in this file will set __oserror *and* return its +** value. The only exception is dio_open, which will return NULL, but __oserror +** will be set. All function will also set __oserror in case of successful ** execution, effectively clearing it. */ diff --git a/include/errno.h b/include/errno.h index 92d304938..c762e8b1c 100644 --- a/include/errno.h +++ b/include/errno.h @@ -45,12 +45,17 @@ /* Operating system specific error code */ -extern unsigned char _oserror; +extern unsigned char __oserror; -extern int _errno; +#if __CC65_STD__ >= __CC65_STD_CC65__ +/* define the name with just one underscore for backwards compatibility */ +#define _oserror __oserror +#endif + +extern int __errno; /* System errors go here */ -#define errno _errno +#define errno __errno /* errno must be a macro */ @@ -83,21 +88,26 @@ extern int _errno; -int __fastcall__ _osmaperrno (unsigned char oserror); -/* Map an operating system specific error code (for example from _oserror) +int __fastcall__ __osmaperrno (unsigned char oserror); +/* Map an operating system specific error code (for example from __oserror) ** into one of the E... codes above. It is user callable. */ -unsigned char __fastcall__ _seterrno (unsigned char code); +#if __CC65_STD__ >= __CC65_STD_CC65__ +/* define the name with just one underscore for backwards compatibility */ +#define _osmaperrno __osmaperrno +#endif + +unsigned char __fastcall__ __seterrno (unsigned char code); /* Set errno to a specific error code and return zero. Used by the library */ -int __fastcall__ _directerrno (unsigned char code); -/* Set errno to a specific error code, clear _oserror and return -1. Used +int __fastcall__ __directerrno (unsigned char code); +/* Set errno to a specific error code, clear __oserror and return -1. Used ** by the library. */ -int __fastcall__ _mappederrno (unsigned char code); -/* Set _oserror to the given platform specific error code. If it is a real +int __fastcall__ __mappederrno (unsigned char code); +/* Set __oserror to the given platform specific error code. If it is a real ** error code (not zero) set errno to the corresponding system error code ** and return -1. Otherwise return zero. ** Used by the library. From 2dabb65ee06cc9875b367dc0cf89f858acee3e59 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 28 Aug 2022 21:52:53 +0200 Subject: [PATCH 1798/2710] fix errno related underscores in all libsrc/*.s files --- libsrc/apple2/close.s | 6 +++--- libsrc/apple2/devicedir.s | 6 +++--- libsrc/apple2/diocommon.s | 2 +- libsrc/apple2/dioopen.s | 4 ++-- libsrc/apple2/diosectcount.s | 6 +++--- libsrc/apple2/diosectsize.s | 2 +- libsrc/apple2/exec.s | 4 ++-- libsrc/apple2/getres.s | 2 +- libsrc/apple2/gettime.s | 6 +++--- libsrc/apple2/lseek.s | 6 +++--- libsrc/apple2/open.s | 8 ++++---- libsrc/apple2/oserror.s | 6 +++--- libsrc/apple2/read.s | 4 ++-- libsrc/apple2/rwcommon.s | 6 +++--- libsrc/apple2/settime.s | 2 +- libsrc/apple2/write.s | 6 +++--- libsrc/atari/close.s | 4 ++-- libsrc/atari/dio_cts.s | 4 ++-- libsrc/atari/dio_stc.s | 4 ++-- libsrc/atari/diopncls.s | 8 ++++---- libsrc/atari/dioqsize.s | 4 ++-- libsrc/atari/do_oserr.s | 4 ++-- libsrc/atari/exec.s | 4 ++-- libsrc/atari/getres.s | 2 +- libsrc/atari/gettime.s | 2 +- libsrc/atari/graphics.s | 8 ++++---- libsrc/atari/inviocb.s | 2 +- libsrc/atari/lseek.s | 6 +++--- libsrc/atari/open.s | 8 ++++---- libsrc/atari/oserror.s | 6 +++--- libsrc/atari/posixdirent.s | 8 ++++---- libsrc/atari/read.s | 4 ++-- libsrc/atari/settime.s | 2 +- libsrc/atari/siocall.s | 4 ++-- libsrc/atari/write.s | 4 ++-- libsrc/atmos/oserror.s | 6 +++--- libsrc/cbm/c_load.s | 4 ++-- libsrc/cbm/cbm_open.s | 6 +++--- libsrc/cbm/cbm_read.s | 8 ++++---- libsrc/cbm/cbm_write.s | 8 ++++---- libsrc/cbm/close.s | 4 ++-- libsrc/cbm/devicedir.s | 6 +++--- libsrc/cbm/open.s | 8 ++++---- libsrc/cbm/oserror.s | 4 ++-- libsrc/cbm/read.s | 8 ++++---- libsrc/cbm/write.s | 8 ++++---- libsrc/common/_directerrno.s | 10 ++++----- libsrc/common/_fopen.s | 4 ++-- libsrc/common/_mappederrno.s | 12 +++++------ libsrc/common/_oserror.s | 6 +++--- libsrc/common/_seterrno.s | 4 ++-- libsrc/common/atexit.s | 2 +- libsrc/common/chdir.s | 4 ++-- libsrc/common/fclose.s | 2 +- libsrc/common/fmisc.s | 2 +- libsrc/common/fopen.s | 2 +- libsrc/common/fread.s | 2 +- libsrc/common/fwrite.s | 2 +- libsrc/common/getcwd.s | 2 +- libsrc/common/mkdir.s | 4 ++-- libsrc/common/putenv.s | 2 +- libsrc/common/remove.s | 4 ++-- libsrc/common/rename.s | 4 ++-- libsrc/common/rmdir.s | 4 ++-- libsrc/common/signal.s | 2 +- libsrc/common/uname.s | 4 ++-- libsrc/common/ungetc.s | 2 +- libsrc/common/vsnprintf.s | 2 +- libsrc/geos-cbm/disk/dio_cts.s | 4 ++-- libsrc/geos-cbm/disk/dio_openclose.s | 6 +++--- libsrc/geos-cbm/disk/dio_qcount.s | 4 ++-- libsrc/geos-cbm/disk/dio_qsize.s | 4 ++-- libsrc/geos-cbm/disk/dio_read.s | 4 ++-- libsrc/geos-cbm/disk/dio_stc.s | 4 ++-- libsrc/geos-cbm/disk/dio_writev.s | 4 ++-- libsrc/geos-common/disk/calcblksfree.s | 4 ++-- libsrc/geos-common/disk/getptrcurdknm.s | 4 ++-- libsrc/geos-common/disk/setnextfree.s | 4 ++-- libsrc/geos-common/drivers/fio_module.s | 26 ++++++++++++------------ libsrc/geos-common/file/get1stdirentry.s | 4 ++-- libsrc/geos-common/file/getnxtdirentry.s | 4 ++-- libsrc/geos-common/file/readbyte.s | 4 ++-- libsrc/geos-common/system/oserror.s | 6 +++--- libsrc/geos-common/system/setoserror.s | 4 ++-- libsrc/lynx/open.s | 4 ++-- libsrc/lynx/oserror.s | 4 ++-- libsrc/osic1p/oserror.s | 6 +++--- libsrc/telestrat/oserror.s | 6 +++--- 88 files changed, 213 insertions(+), 213 deletions(-) diff --git a/libsrc/apple2/close.s b/libsrc/apple2/close.s index cef42b6f8..0002d081d 100644 --- a/libsrc/apple2/close.s +++ b/libsrc/apple2/close.s @@ -33,8 +33,8 @@ zerofd: lda #$00 ; Return success lda #$00 - ; Set __oserror -oserr: jmp __mappederrno + ; Set ___oserror +oserr: jmp ___mappederrno ; Set __errno -errno: jmp __directerrno +errno: jmp ___directerrno diff --git a/libsrc/apple2/devicedir.s b/libsrc/apple2/devicedir.s index 79f4c60de..abe900be1 100644 --- a/libsrc/apple2/devicedir.s +++ b/libsrc/apple2/devicedir.s @@ -45,9 +45,9 @@ _getdevicedir: ; Handle errors erange: lda #<ERANGE - jsr __directerrno + jsr ___directerrno bne :+ ; Branch always -oserr: jsr __mappederrno +oserr: jsr ___mappederrno : lda #$00 ; Return NULL tax rts @@ -73,7 +73,7 @@ oserr: jsr __mappederrno iny lda #$00 sta (ptr1),y - sta __oserror ; Clear _oserror + sta ___oserror ; Clear __oserror ; Success, return buf lda ptr1 diff --git a/libsrc/apple2/diocommon.s b/libsrc/apple2/diocommon.s index 92d274ea8..b18f0e6ef 100644 --- a/libsrc/apple2/diocommon.s +++ b/libsrc/apple2/diocommon.s @@ -30,6 +30,6 @@ diocommon: dioepilog: ; Return success or error - sta __oserror + sta ___oserror ldx #$00 rts diff --git a/libsrc/apple2/dioopen.s b/libsrc/apple2/dioopen.s index 62b2f06a3..d45677945 100644 --- a/libsrc/apple2/dioopen.s +++ b/libsrc/apple2/dioopen.s @@ -24,7 +24,7 @@ _dio_open: lda #$28 ; "No device connected" ; Return oserror -oserr: sta __oserror +oserr: sta ___oserror jmp return0 ; Return success @@ -34,5 +34,5 @@ oserr: sta __oserror asl asl ldx #$00 - stx __oserror + stx ___oserror rts diff --git a/libsrc/apple2/diosectcount.s b/libsrc/apple2/diosectcount.s index 55f7e376c..117e40e75 100644 --- a/libsrc/apple2/diosectcount.s +++ b/libsrc/apple2/diosectcount.s @@ -16,7 +16,7 @@ _dio_query_sectcount: ; Set handle sta mliparam + MLI::ON_LINE::UNIT_NUM - ; Get ProDOS 8 block size (clears __oserror) + ; Get ProDOS 8 block size (clears ___oserror) jsr _dio_query_sectsize ; Alloc buffer @@ -74,7 +74,7 @@ done: lda ptr4 rts nomem: lda #$FF ; Error code for sure not used by MLI -oserr: sta __oserror +oserr: sta ___oserror ; Save total blocks for failure lda #$00 @@ -85,7 +85,7 @@ oserr: sta __oserror ; Check for non-ProDOS disk check: cmp #$52 ; "Not a ProDOS volume" bne oserr - sta __oserror + sta ___oserror ; Save total blocks for a 16-sector disk lda #<280 diff --git a/libsrc/apple2/diosectsize.s b/libsrc/apple2/diosectsize.s index d3ece3779..4730bd611 100644 --- a/libsrc/apple2/diosectsize.s +++ b/libsrc/apple2/diosectsize.s @@ -10,7 +10,7 @@ _dio_query_sectsize: ; Clear error - stx __oserror ; X = 0 + stx ___oserror ; X = 0 ; Return ProDOS 8 block size txa ; X = 0 diff --git a/libsrc/apple2/exec.s b/libsrc/apple2/exec.s index 0ff4bc6f0..d5cbf8788 100644 --- a/libsrc/apple2/exec.s +++ b/libsrc/apple2/exec.s @@ -19,8 +19,8 @@ typerr: lda #$4A ; "Incompatible file format" ; Cleanup name oserr: jsr popname ; Preserves A - ; Set __oserror - jmp __mappederrno + ; Set ___oserror + jmp ___mappederrno _exec: ; Save cmdline diff --git a/libsrc/apple2/getres.s b/libsrc/apple2/getres.s index 4364bc967..75d83cef0 100644 --- a/libsrc/apple2/getres.s +++ b/libsrc/apple2/getres.s @@ -52,7 +52,7 @@ _clock_getres: enosys: lda #ENOSYS ; Set __errno - jmp __directerrno + jmp ___directerrno .rodata diff --git a/libsrc/apple2/gettime.s b/libsrc/apple2/gettime.s index dc00e3b49..7467b0189 100644 --- a/libsrc/apple2/gettime.s +++ b/libsrc/apple2/gettime.s @@ -81,13 +81,13 @@ erange: lda #ERANGE jsr incsp3 ; Preserves A ; Set __errno - jmp __directerrno + jmp ___directerrno ; Cleanup stack oserr: jsr incsp3 ; Preserves A - ; Set __oserror - jmp __mappederrno + ; Set ___oserror + jmp ___mappederrno .bss diff --git a/libsrc/apple2/lseek.s b/libsrc/apple2/lseek.s index b6c31515e..cc6241558 100644 --- a/libsrc/apple2/lseek.s +++ b/libsrc/apple2/lseek.s @@ -107,13 +107,13 @@ seek_common: einval: lda #EINVAL ; Set __errno -errno: jsr __directerrno ; leaves -1 in AX +errno: jsr ___directerrno ; leaves -1 in AX stx sreg ; extend return value to 32 bits stx sreg+1 rts - ; Set __oserror -oserr: jsr __mappederrno ; leaves -1 in AX + ; Set ___oserror +oserr: jsr ___mappederrno ; leaves -1 in AX stx sreg ; extend return value to 32 bits stx sreg+1 rts diff --git a/libsrc/apple2/open.s b/libsrc/apple2/open.s index e47722973..68c203cd6 100644 --- a/libsrc/apple2/open.s +++ b/libsrc/apple2/open.s @@ -64,7 +64,7 @@ _open: errno: jsr incsp4 ; Preserves A ; Set __errno - jmp __directerrno + jmp ___directerrno ; Save fdtab slot found: tya @@ -147,8 +147,8 @@ oserr1: ldy tmp2 ; Restore fdtab slot jsr freebuffer pla ; Restore oserror code - ; Set __oserror - jmp __mappederrno + ; Set ___oserror + jmp ___mappederrno open: ldy tmp2 ; Restore fdtab slot @@ -209,7 +209,7 @@ done: lda tmp1 ; Restore fd ; Return success ldx #$00 - stx __oserror + stx ___oserror rts freebuffer: diff --git a/libsrc/apple2/oserror.s b/libsrc/apple2/oserror.s index ae3efcacc..5f523340f 100644 --- a/libsrc/apple2/oserror.s +++ b/libsrc/apple2/oserror.s @@ -1,14 +1,14 @@ ; ; Ullrich von Bassewitz, 17.05.2000 ; -; int __fastcall__ _osmaperrno (unsigned char oserror); +; int __fastcall__ __osmaperrno (unsigned char oserror); ; - .export __osmaperrno + .export ___osmaperrno .include "errno.inc" -__osmaperrno: +___osmaperrno: ldx #ErrTabSize : cmp ErrTab-2,x ; Search for the error code beq :+ ; Jump if found diff --git a/libsrc/apple2/read.s b/libsrc/apple2/read.s index 99c189cbd..d29d6cdfb 100644 --- a/libsrc/apple2/read.s +++ b/libsrc/apple2/read.s @@ -52,7 +52,7 @@ _read: ; Device succeeds always device: lda #$00 - sta __oserror + sta ___oserror ; Set counter to zero sta ptr3 @@ -107,4 +107,4 @@ check: lda ptr3 einval: lda #EINVAL ; Set __errno -errno: jmp __directerrno +errno: jmp ___directerrno diff --git a/libsrc/apple2/rwcommon.s b/libsrc/apple2/rwcommon.s index e5fd9ae90..302b46457 100644 --- a/libsrc/apple2/rwcommon.s +++ b/libsrc/apple2/rwcommon.s @@ -49,10 +49,10 @@ rwcommon: rwepilog: ; Return success - sta __oserror ; A = 0 + sta ___oserror ; A = 0 lda mliparam + MLI::RW::TRANS_COUNT ldx mliparam + MLI::RW::TRANS_COUNT+1 rts - ; Set __oserror -oserr: jmp __mappederrno + ; Set ___oserror +oserr: jmp ___mappederrno diff --git a/libsrc/apple2/settime.s b/libsrc/apple2/settime.s index f722f6f40..32ec8ee43 100644 --- a/libsrc/apple2/settime.s +++ b/libsrc/apple2/settime.s @@ -68,4 +68,4 @@ enosys: lda #ENOSYS erange: lda #ERANGE ; Set __errno -errno: jmp __directerrno +errno: jmp ___directerrno diff --git a/libsrc/apple2/write.s b/libsrc/apple2/write.s index d9dd73ca9..7b50d0705 100644 --- a/libsrc/apple2/write.s +++ b/libsrc/apple2/write.s @@ -107,8 +107,8 @@ done: lda #$00 einval: lda #EINVAL ; Set __errno -errno: jmp __directerrno +errno: jmp ___directerrno - ; Set __oserror -oserr: jmp __mappederrno + ; Set ___oserror +oserr: jmp ___mappederrno diff --git a/libsrc/atari/close.s b/libsrc/atari/close.s index d18fbec34..63b2948f3 100644 --- a/libsrc/atari/close.s +++ b/libsrc/atari/close.s @@ -6,7 +6,7 @@ .include "atari.inc" .export _close - .import __do_oserror,popax,__oserror + .import __do_oserror,popax,___oserror .import fdtoiocb_down,__inviocb .proc _close @@ -18,7 +18,7 @@ jsr CIOV bmi closerr ok: ldx #0 - stx __oserror ; clear system specific error code + stx ___oserror ; clear system specific error code txa rts diff --git a/libsrc/atari/dio_cts.s b/libsrc/atari/dio_cts.s index 551b9c0f6..22dc8f9fe 100644 --- a/libsrc/atari/dio_cts.s +++ b/libsrc/atari/dio_cts.s @@ -16,7 +16,7 @@ ; .export _dio_phys_to_log - .import popax,__oserror + .import popax,___oserror .importzp ptr1,ptr2,ptr3 .include "atari.inc" @@ -54,7 +54,7 @@ ldx #0 txa ret: - sta __oserror + sta ___oserror rts ; return success ; invalid handle diff --git a/libsrc/atari/dio_stc.s b/libsrc/atari/dio_stc.s index 768aca085..4edb78aa6 100644 --- a/libsrc/atari/dio_stc.s +++ b/libsrc/atari/dio_stc.s @@ -17,7 +17,7 @@ .export _dio_log_to_phys .include "atari.inc" .importzp ptr1,ptr2,ptr3 - .import popax,popptr1,__oserror + .import popax,popptr1,___oserror .proc _dio_log_to_phys @@ -56,7 +56,7 @@ _l1: lda (ptr1,x) txa ret: - sta __oserror + sta ___oserror rts ; return success ; invalid handle diff --git a/libsrc/atari/diopncls.s b/libsrc/atari/diopncls.s index 528c0fad8..37f25049b 100644 --- a/libsrc/atari/diopncls.s +++ b/libsrc/atari/diopncls.s @@ -14,7 +14,7 @@ .export _dio_open, _dio_close .export sectsizetab - .import __oserror, __sio_call, _dio_read + .import ___oserror, __sio_call, _dio_read .import pushax, addysp, subysp .importzp ptr2, sp .include "atari.inc" @@ -31,7 +31,7 @@ sectsizetab: _inv_drive: lda #NONDEV ; non-existent device - sta __oserror + sta ___oserror lda #0 tax rts ; return NULL @@ -49,7 +49,7 @@ _dio_open: sta sectsizetab+sst_flag,x ; set flag that drive is "open" lda #0 sta sectsizetab+sst_sectsize+1,x - sta __oserror ; success + sta ___oserror ; success tya sta sectsizetab+sst_driveno,x stx ptr2 @@ -156,7 +156,7 @@ s128: lda #128 lda #0 ldy #sst_flag sta (ptr2),y - sta __oserror ; success + sta ___oserror ; success tax rts ; return no error diff --git a/libsrc/atari/dioqsize.s b/libsrc/atari/dioqsize.s index caef0588f..3816c249c 100644 --- a/libsrc/atari/dioqsize.s +++ b/libsrc/atari/dioqsize.s @@ -7,7 +7,7 @@ .include "atari.inc" .export _dio_query_sectsize .importzp ptr1,tmp1 - .import popax, __oserror + .import popax, ___oserror .proc _dio_query_sectsize @@ -15,7 +15,7 @@ stx ptr1+1 lda #0 - sta __oserror + sta ___oserror ldy #sst_sectsize+1 lda (ptr1),y diff --git a/libsrc/atari/do_oserr.s b/libsrc/atari/do_oserr.s index eb19dd9d1..9793ff462 100644 --- a/libsrc/atari/do_oserr.s +++ b/libsrc/atari/do_oserr.s @@ -1,5 +1,5 @@ ; -; __do_oserror updates __oserror and errno. Do a JMP here right after +; __do_oserror updates ___oserror and errno. Do a JMP here right after ; calling CIOV. It will return with AX set to -1 ($FFFF). It expects the CIO ; status in Y. ; @@ -9,4 +9,4 @@ __do_oserror: tya - jmp __mappederrno + jmp ___mappederrno diff --git a/libsrc/atari/exec.s b/libsrc/atari/exec.s index 16062a294..88430e9f7 100644 --- a/libsrc/atari/exec.s +++ b/libsrc/atari/exec.s @@ -34,7 +34,7 @@ notsupp:lda #ENOSYS ; "unsupported system call" .byte $2C ; bit opcode, eats the next 2 bytes noiocb: lda #EMFILE ; "too many open files" jsr incsp2 ; clean up stack -seterr: jmp __directerrno +seterr: jmp ___directerrno ; entry point @@ -148,7 +148,7 @@ copycd: lda #ATEOL pha ; remember error code jsr close ; close the IOCB (required even if open failed) pla ; put error code back into A -setmerr:jmp __mappederrno ; update errno from OS specific error code in A +setmerr:jmp ___mappederrno ; update errno from OS specific error code in A openok: lda #>buf sta ICBAH,x ; set buffer address diff --git a/libsrc/atari/getres.s b/libsrc/atari/getres.s index f2e4874f9..9716040d8 100644 --- a/libsrc/atari/getres.s +++ b/libsrc/atari/getres.s @@ -41,7 +41,7 @@ _clock_getres: enosys: lda #ENOSYS ; Set __errno - jmp __directerrno + jmp ___directerrno ;---------------------------------------------------------------------------- ; timespec struct with tv_sec set to 1 second diff --git a/libsrc/atari/gettime.s b/libsrc/atari/gettime.s index 093d34843..df6e24021 100644 --- a/libsrc/atari/gettime.s +++ b/libsrc/atari/gettime.s @@ -105,7 +105,7 @@ errexit:jsr incsp3 ; Preserves A ; set __errno - jmp __directerrno + jmp ___directerrno ; ------- diff --git a/libsrc/atari/graphics.s b/libsrc/atari/graphics.s index ab26ed0da..f35087aea 100644 --- a/libsrc/atari/graphics.s +++ b/libsrc/atari/graphics.s @@ -10,7 +10,7 @@ .export __graphics .import findfreeiocb - .import __oserror + .import ___oserror .import fddecusage .import clriocb .import fdtoiocb @@ -45,7 +45,7 @@ parmok: jsr findfreeiocb beq iocbok ; we found one lda #<EMFILE ; "too many open files" -seterr: jsr __mappederrno ; @@@ probably not correct to set errno here @@@ +seterr: jsr ___mappederrno ; @@@ probably not correct to set errno here @@@ rts ; return -1 ;invmode:ldx #>EINVAL @@ -94,7 +94,7 @@ doopen: txa lda tmp2 ; get fd ldx #0 - stx __oserror + stx ___oserror rts cioerr: sty tmp3 ; remember error code @@ -103,6 +103,6 @@ cioerr: sty tmp3 ; remember error code jsr CIOV ; close IOCB again since open failed jsr fddecusage ; and decrement usage counter of fd lda tmp3 ; put error code into A - jmp __mappederrno + jmp ___mappederrno .endproc ; __graphics diff --git a/libsrc/atari/inviocb.s b/libsrc/atari/inviocb.s index c1c27ee03..2ceb385b1 100644 --- a/libsrc/atari/inviocb.s +++ b/libsrc/atari/inviocb.s @@ -7,4 +7,4 @@ __inviocb: lda #<EINVAL - jmp __directerrno + jmp ___directerrno diff --git a/libsrc/atari/lseek.s b/libsrc/atari/lseek.s index b6a766361..915ec24cf 100644 --- a/libsrc/atari/lseek.s +++ b/libsrc/atari/lseek.s @@ -8,7 +8,7 @@ .export _lseek - .import incsp6,__oserror + .import incsp6,___oserror .import __inviocb,ldax0sp,ldaxysp,fdtoiocb .import __dos_type .import fd_table @@ -21,7 +21,7 @@ ; seeking not supported, return -1 and ENOSYS errno value no_supp:jsr incsp6 lda #<ENOSYS - jsr __directerrno ; returns with $FFFF in AX + jsr ___directerrno ; returns with $FFFF in AX sta sreg sta sreg+1 rts @@ -94,7 +94,7 @@ xxerr: tya pha jsr incsp6 pla - jsr __mappederrno ; returns with $FFFF in AX + jsr ___mappederrno ; returns with $FFFF in AX sta sreg sta sreg+1 rts diff --git a/libsrc/atari/open.s b/libsrc/atari/open.s index 721519525..ed3e40b2f 100644 --- a/libsrc/atari/open.s +++ b/libsrc/atari/open.s @@ -19,7 +19,7 @@ .import findfreeiocb .import incsp4 .import ldaxysp,addysp - .import __oserror + .import ___oserror .ifdef UCASE_FILENAME .import ucase_fn .endif @@ -37,7 +37,7 @@ parmok: jsr findfreeiocb beq iocbok ; we found one lda #<EMFILE ; "too many open files" -seterr: jsr __directerrno +seterr: jsr ___directerrno jsr incsp4 ; clean up stack lda #$FF tax @@ -150,11 +150,11 @@ finish: php jsr CIOV ; close IOCB again since open failed jsr fddecusage ; and decrement usage counter of fd lda tmp3 ; put error code into A - jmp __mappederrno + jmp ___mappederrno ok: lda tmp2 ; get fd ldx #0 - stx __oserror + stx ___oserror rts .endproc diff --git a/libsrc/atari/oserror.s b/libsrc/atari/oserror.s index 1d95dbc36..c3bb214e5 100644 --- a/libsrc/atari/oserror.s +++ b/libsrc/atari/oserror.s @@ -2,13 +2,13 @@ ; Christian Groessler, May-2000 ; ; os specific error code mapping -; int __fastcall__ _osmaperrno (unsigned char oserror); +; int __fastcall__ __osmaperrno (unsigned char oserror); ; .include "errno.inc" - .export __osmaperrno + .export ___osmaperrno -.proc __osmaperrno +.proc ___osmaperrno cmp #$80 ; error or success bcs errcode ; error, jump diff --git a/libsrc/atari/posixdirent.s b/libsrc/atari/posixdirent.s index a722b3b06..56a780d58 100644 --- a/libsrc/atari/posixdirent.s +++ b/libsrc/atari/posixdirent.s @@ -4,7 +4,7 @@ .include "atari.inc" .export _opendir, _readdir, _closedir .import findfreeiocb, clriocb - .import __oserror, return0, __do_oserror + .import ___oserror, return0, __do_oserror .importzp ptr1, tmp1 .ifdef DEFAULT_DEVICE .import __defdev @@ -56,13 +56,13 @@ jsr CIOV bmi cioerr lda #0 - sta __oserror + sta ___oserror tax lda diriocb rts .endproc -cioerr: sty __oserror +cioerr: sty ___oserror lda #CLOSE sta ICCOM,x jsr CIOV ; close IOCB again since open failed @@ -147,7 +147,7 @@ copychar: lda (ptr1),y ; src=y dest=tmp1 jsr CIOV bmi @cioerr ldx #0 - stx __oserror ; clear system specific error code + stx ___oserror ; clear system specific error code txa rts @cioerr: jmp __do_oserror diff --git a/libsrc/atari/read.s b/libsrc/atari/read.s index f8d10fd15..bb086f2b1 100644 --- a/libsrc/atari/read.s +++ b/libsrc/atari/read.s @@ -5,7 +5,7 @@ ; .include "atari.inc" - .import __rwsetup,__do_oserror,__inviocb,__oserror + .import __rwsetup,__do_oserror,__inviocb,___oserror .export _read _read: jsr __rwsetup ; do common setup for read and write @@ -33,7 +33,7 @@ done: lda ICBLL,x ; buf len lo lda ICBLH,x ; get buf len hi tax ; to X okdone: lda #0 - sta __oserror ; clear system dependend error code + sta ___oserror ; clear system dependend error code pla ; get buf len lo rts diff --git a/libsrc/atari/settime.s b/libsrc/atari/settime.s index 7d6fff2c0..2f4228b62 100644 --- a/libsrc/atari/settime.s +++ b/libsrc/atari/settime.s @@ -96,4 +96,4 @@ done: jmp return0 ; load errno code enosys: lda #ENOSYS -drcter: jmp __directerrno +drcter: jmp ___directerrno diff --git a/libsrc/atari/siocall.s b/libsrc/atari/siocall.s index e4fc505e3..38cbb35d5 100644 --- a/libsrc/atari/siocall.s +++ b/libsrc/atari/siocall.s @@ -17,7 +17,7 @@ .export __sio_call .include "atari.inc" .import popa,popax,popptr1 - .import sectsizetab,__oserror + .import sectsizetab,___oserror .importzp ptr1 .proc __sio_call @@ -76,7 +76,7 @@ _cont: lda #DISKID ; SIO bus ID of diskette drive bmi _req_err ; error occurred txa ; no error occurred _req_err: - sta __oserror + sta ___oserror rts _inv_hand: diff --git a/libsrc/atari/write.s b/libsrc/atari/write.s index 1452b2eee..3a8fb23d4 100644 --- a/libsrc/atari/write.s +++ b/libsrc/atari/write.s @@ -2,7 +2,7 @@ ; int __fastcall__ write (int fd, const void* buf, unsigned count); ; .include "atari.inc" - .import __rwsetup,__do_oserror,__inviocb,__oserror + .import __rwsetup,__do_oserror,__inviocb,___oserror .export _write _write: jsr __rwsetup ; do common setup @@ -21,7 +21,7 @@ write9: lda ICBLH,x ; buf len high tax lda #0 - sta __oserror ; clear system dependend error code + sta ___oserror ; clear system dependend error code pla rts diff --git a/libsrc/atmos/oserror.s b/libsrc/atmos/oserror.s index 37c9bd7fc..2e902afdf 100644 --- a/libsrc/atmos/oserror.s +++ b/libsrc/atmos/oserror.s @@ -1,14 +1,14 @@ ; ; Stefan Haubenthal, 2011-04-18 ; -; int __fastcall__ _osmaperrno (unsigned char oserror); +; int __fastcall__ __osmaperrno (unsigned char oserror); ; /* Map a system specific error into a system independent code */ ; .include "errno.inc" - .export __osmaperrno + .export ___osmaperrno -.proc __osmaperrno +.proc ___osmaperrno lda #<EUNKNOWN ldx #>EUNKNOWN diff --git a/libsrc/cbm/c_load.s b/libsrc/cbm/c_load.s index d81430a03..7f2a054bd 100644 --- a/libsrc/cbm/c_load.s +++ b/libsrc/cbm/c_load.s @@ -7,7 +7,7 @@ .include "cbm.inc" .export _cbm_k_load - .import __oserror + .import ___oserror .import popa .importzp ptr1 @@ -19,7 +19,7 @@ _cbm_k_load: ldy ptr1+1 jsr LOAD bcc @Ok - sta __oserror + sta ___oserror ldx ptr1 ldy ptr1+1 @Ok: txa diff --git a/libsrc/cbm/cbm_open.s b/libsrc/cbm/cbm_open.s index db4179db8..c7590af2a 100644 --- a/libsrc/cbm/cbm_open.s +++ b/libsrc/cbm/cbm_open.s @@ -15,7 +15,7 @@ ; { ; cbm_k_setlfs(lfn, device, sec_addr); ; cbm_k_setnam(name); -; return _oserror = cbm_k_open(); +; return __oserror = cbm_k_open(); ; } ; @@ -23,7 +23,7 @@ .import popa .import _cbm_k_setlfs, _cbm_k_setnam, _cbm_k_open - .import __oserror + .import ___oserror _cbm_open: jsr _cbm_k_setnam @@ -32,5 +32,5 @@ _cbm_open: jsr _cbm_k_setlfs ; Call SETLFS, pop all args jsr _cbm_k_open - sta __oserror + sta ___oserror rts diff --git a/libsrc/cbm/cbm_read.s b/libsrc/cbm/cbm_read.s index 29e0e1f19..8a9939eca 100644 --- a/libsrc/cbm/cbm_read.s +++ b/libsrc/cbm/cbm_read.s @@ -6,7 +6,7 @@ ; int __fastcall__ cbm_read (unsigned char lfn, void* buffer, unsigned int size) ; /* Reads up to "size" bytes from a file to "buffer". ; ** Returns the number of actually read bytes, 0 if there are no bytes left -; ** (EOF) or -1 in case of an error. _oserror contains an errorcode then (see +; ** (EOF) or -1 in case of an error. __oserror contains an errorcode then (see ; ** table below). ; */ ; { @@ -14,7 +14,7 @@ ; static unsigned char tmp; ; ; /* if we can't change to the inputchannel #lfn then return an error */ -; if (_oserror = cbm_k_chkin(lfn)) return -1; +; if (__oserror = cbm_k_chkin(lfn)) return -1; ; ; bytesread = 0; ; @@ -41,7 +41,7 @@ .export _cbm_read .importzp ptr1, ptr2, ptr3, tmp1 .import popax, popa - .import __oserror + .import ___oserror _cbm_read: @@ -106,7 +106,7 @@ _cbm_read: ; CHKIN failed -@E1: sta __oserror +@E1: sta ___oserror lda #$FF tax rts ; return -1 diff --git a/libsrc/cbm/cbm_write.s b/libsrc/cbm/cbm_write.s index 5ac07209c..18c6f4684 100644 --- a/libsrc/cbm/cbm_write.s +++ b/libsrc/cbm/cbm_write.s @@ -9,7 +9,7 @@ ; static unsigned int byteswritten; ; ; /* if we can't change to the outputchannel #lfn then return an error */ -; if (_oserror = cbm_k_ckout(lfn)) return -1; +; if (__oserror = cbm_k_ckout(lfn)) return -1; ; ; byteswritten = 0; ; @@ -18,7 +18,7 @@ ; } ; ; if (cbm_k_readst()) { -; _oserror = 5; /* device not present */ +; __oserror = 5; /* device not present */ ; byteswritten = -1; ; } ; @@ -33,7 +33,7 @@ .export _cbm_write .importzp ptr1, ptr2, ptr3 .import popax, popa - .import __oserror + .import ___oserror _cbm_write: @@ -87,7 +87,7 @@ _cbm_write: ; Error entry, error code is in A -@E2: sta __oserror +@E2: sta ___oserror lda #$FF tax rts ; return -1 diff --git a/libsrc/cbm/close.s b/libsrc/cbm/close.s index 7fc600e87..0cd425cf4 100644 --- a/libsrc/cbm/close.s +++ b/libsrc/cbm/close.s @@ -54,12 +54,12 @@ ldx unittab,y jsr closecmdchannel ; Close the disk command channel pla ; Get the error code from the disk - jmp __mappederrno ; Set _oserror and _errno, return 0/-1 + jmp ___mappederrno ; Set __oserror and _errno, return 0/-1 ; Error entry: The given file descriptor is not valid or not open invalidfd: lda #EBADF - jmp __directerrno ; Set _errno, clear _oserror, return -1 + jmp ___directerrno ; Set _errno, clear __oserror, return -1 .endproc diff --git a/libsrc/cbm/devicedir.s b/libsrc/cbm/devicedir.s index 3a4e6d774..25aad556b 100644 --- a/libsrc/cbm/devicedir.s +++ b/libsrc/cbm/devicedir.s @@ -32,7 +32,7 @@ jsr popa jsr diskinit beq size - jsr __mappederrno + jsr ___mappederrno bne fail ; Branch always ; Check for sufficient buf size @@ -43,7 +43,7 @@ size: lda ptr3+1 cmp #3 bcs okay ; Buf >= 3 lda #<ERANGE - jsr __directerrno + jsr ___directerrno fail: lda #0 ; Return NULL tax rts @@ -52,7 +52,7 @@ fail: lda #0 ; Return NULL okay: lda fnunit ; Set by diskinit jsr devicestr ; Returns 0 in A - sta __oserror ; Clear _oserror + sta ___oserror ; Clear __oserror ; Success, return buf diff --git a/libsrc/cbm/open.s b/libsrc/cbm/open.s index e9f0237cc..533c110be 100644 --- a/libsrc/cbm/open.s +++ b/libsrc/cbm/open.s @@ -94,10 +94,10 @@ parmok: jsr popax ; Get flags lda #EINVAL -; Error entry. Sets _errno, clears _oserror, returns -1 +; Error entry. Sets _errno, clears __oserror, returns -1 seterrno: - jmp __directerrno + jmp ___directerrno ; Error entry: Close the file and exit. OS error code is in A on entry @@ -113,7 +113,7 @@ closeandexit: ; Error entry: Set oserror and errno using error code in A and return -1 -oserror:jmp __mappederrno +oserror:jmp ___mappederrno ; Read bit is set. Add an 'r' to the name @@ -189,7 +189,7 @@ nofile: ; ... else use SA=0 (read) txa ; Handle ldx #0 - stx __oserror ; Clear _oserror + stx ___oserror ; Clear __oserror rts .endproc diff --git a/libsrc/cbm/oserror.s b/libsrc/cbm/oserror.s index 872c75912..92da03810 100644 --- a/libsrc/cbm/oserror.s +++ b/libsrc/cbm/oserror.s @@ -2,7 +2,7 @@ ; 2000-05-17, Ullrich von Bassewitz ; 2014-05-28, Greg King ; -; int __fastcall__ _osmaperrno (unsigned char oserror); +; int __fastcall__ __osmaperrno (unsigned char oserror); ; /* Map a system-specific error into a system-independent code. */ ; @@ -10,7 +10,7 @@ .code -__osmaperrno: +___osmaperrno: ldx #ErrTabSize @L1: cmp ErrTab-2,x ; Search for the error code beq @L2 ; Jump if found diff --git a/libsrc/cbm/read.s b/libsrc/cbm/read.s index 1c2c670e7..e6c025ffe 100644 --- a/libsrc/cbm/read.s +++ b/libsrc/cbm/read.s @@ -66,7 +66,7 @@ jsr CHKIN bcc @L3 ; Branch if ok - jmp __mappederrno ; Store into __oserror, map to errno, return -1 + jmp ___mappederrno ; Store into ___oserror, map to errno, return -1 ; Read the next byte @@ -123,10 +123,10 @@ done: jsr CLRCH -; Clear _oserror and return the number of chars read +; Clear __oserror and return the number of chars read eof: lda #0 - sta __oserror + sta ___oserror lda ptr3 ldx ptr3+1 rts @@ -141,7 +141,7 @@ devnotpresent: invalidfd: lda #EBADF - jmp __directerrno ; Sets _errno, clears _oserror, returns -1 + jmp ___directerrno ; Sets _errno, clears __oserror, returns -1 .endproc diff --git a/libsrc/cbm/write.s b/libsrc/cbm/write.s index 93bdda31d..60088e815 100644 --- a/libsrc/cbm/write.s +++ b/libsrc/cbm/write.s @@ -55,7 +55,7 @@ jsr CKOUT bcc @L2 -@error: jmp __mappederrno ; Store into __oserror, map to errno, return -1 +@error: jmp ___mappederrno ; Store into ___oserror, map to errno, return -1 ; Output the next character from the buffer @@ -92,10 +92,10 @@ @L3: jsr CLRCH -; Clear _oserror and return the number of chars written +; Clear __oserror and return the number of chars written lda #0 - sta __oserror + sta ___oserror lda ptr3 ldx ptr3+1 rts @@ -112,6 +112,6 @@ devnotpresent: invalidfd: lda #EBADF - jmp __directerrno ; Sets _errno, clears _oserror, returns -1 + jmp ___directerrno ; Sets _errno, clears __oserror, returns -1 .endproc diff --git a/libsrc/common/_directerrno.s b/libsrc/common/_directerrno.s index 794247148..460c44ffe 100644 --- a/libsrc/common/_directerrno.s +++ b/libsrc/common/_directerrno.s @@ -10,14 +10,14 @@ .macpack cpu ; ---------------------------------------------------------------------------- -; int __fastcall__ _directerrno (unsigned char code); -; /* Set errno to a specific error code, clear _oserror, and return -1. Used +; int __fastcall__ __directerrno (unsigned char code); +; /* Set errno to a specific error code, clear __oserror, and return -1. Used ; ** by the library. ; */ -__directerrno: - jsr __seterrno ; Set errno (returns with .A = 0) - sta __oserror ; Clear __oserror +___directerrno: + jsr ___seterrno ; Set errno (returns with .A = 0) + sta ___oserror ; Clear ___oserror .if (.cpu .bitand CPU_ISET_65SC02) dec a .else diff --git a/libsrc/common/_fopen.s b/libsrc/common/_fopen.s index 29f1c4cd9..f2f03a68c 100644 --- a/libsrc/common/_fopen.s +++ b/libsrc/common/_fopen.s @@ -69,7 +69,7 @@ invmode: lda #EINVAL - jsr __seterrno ; Set __errno, returns zero in A + jsr ___seterrno ; Set __errno, returns zero in A tax ; a/x = 0 jmp incsp4 @@ -91,7 +91,7 @@ modeok: ldy #$00 bne openok cmp #$FF bne openok - jmp return0 ; Failure, errno/_oserror already set + jmp return0 ; Failure, errno/__oserror already set ; Open call succeeded diff --git a/libsrc/common/_mappederrno.s b/libsrc/common/_mappederrno.s index 33f654c29..4b66d7c2c 100644 --- a/libsrc/common/_mappederrno.s +++ b/libsrc/common/_mappederrno.s @@ -11,19 +11,19 @@ .macpack cpu ; ---------------------------------------------------------------------------- -; int __fastcall__ _mappederrno (unsigned char code); -; /* Set _oserror to the given platform-specific error code. If it is a real +; int __fastcall__ __mappederrno (unsigned char code); +; /* Set __oserror to the given platform-specific error code. If it is a real ; ** error code (not zero), set errno to the corresponding system error code, ; ** and return -1. Otherwise, return zero. ; ** Used by the library. ; */ -__mappederrno: - sta __oserror ; Store the error code +___mappederrno: + sta ___oserror ; Store the error code tax ; Did we have an error? bze ok ; Branch if no - jsr __osmaperrno ; Map OS error into errno code - jsr __seterrno ; Save in errno (returns with .A = 0) + jsr ___osmaperrno ; Map OS error into errno code + jsr ___seterrno ; Save in errno (returns with .A = 0) .if (.cpu .bitand CPU_ISET_65SC02) dec a .else diff --git a/libsrc/common/_oserror.s b/libsrc/common/_oserror.s index 256d89658..bd8e40711 100644 --- a/libsrc/common/_oserror.s +++ b/libsrc/common/_oserror.s @@ -1,14 +1,14 @@ ; ; Ullrich von Bassewitz, 16.05.2000 ; -; extern unsigned char _oserror; +; extern unsigned char __oserror; ; /* Operating system specific errors from the low level functions */ - .export __oserror + .export ___oserror .bss -__oserror: +___oserror: .res 1 diff --git a/libsrc/common/_seterrno.s b/libsrc/common/_seterrno.s index 79021143a..30394a9cb 100644 --- a/libsrc/common/_seterrno.s +++ b/libsrc/common/_seterrno.s @@ -1,7 +1,7 @@ ; ; Ullrich von Bassewitz, 2004-05-13 ; -; __seterrno: Will set __errno to the value in A and return zero in A. Other +; ___seterrno: Will set __errno to the value in A and return zero in A. Other ; registers aren't changed. The function is C callable, but ; currently only called from asm code. ; @@ -10,7 +10,7 @@ .code -.proc __seterrno +.proc ___seterrno sta __errno lda #0 diff --git a/libsrc/common/atexit.s b/libsrc/common/atexit.s index 6edfd4a5d..47a1dfd4d 100644 --- a/libsrc/common/atexit.s +++ b/libsrc/common/atexit.s @@ -38,7 +38,7 @@ ; Error, no space left @Error: lda #ENOSPC ; No space left - jsr __seterrno + jsr ___seterrno ldx #$FF ; Return -1 txa rts diff --git a/libsrc/common/chdir.s b/libsrc/common/chdir.s index 3e638cb04..24fc481b4 100644 --- a/libsrc/common/chdir.s +++ b/libsrc/common/chdir.s @@ -7,7 +7,7 @@ .export _chdir .import __syschdir - .import __mappederrno + .import ___mappederrno ;-------------------------------------------------------------------------- @@ -17,7 +17,7 @@ .proc _chdir jsr __syschdir ; Call the machine specific function - jmp __mappederrno ; Store into _oserror, set errno, return 0/-1 + jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 .endproc diff --git a/libsrc/common/fclose.s b/libsrc/common/fclose.s index 5365d70da..2368bf9f6 100644 --- a/libsrc/common/fclose.s +++ b/libsrc/common/fclose.s @@ -31,7 +31,7 @@ ; File is not open lda #EINVAL - jsr __seterrno + jsr ___seterrno lda #$FF ; Return -1 tax rts diff --git a/libsrc/common/fmisc.s b/libsrc/common/fmisc.s index 156a80dbc..90b48e8a6 100644 --- a/libsrc/common/fmisc.s +++ b/libsrc/common/fmisc.s @@ -78,7 +78,7 @@ err: rts ; If the file is not valid, fileno must set errno and return -1 error: lda #<EBADF - jsr __seterrno + jsr ___seterrno lda #$FF tax rts diff --git a/libsrc/common/fopen.s b/libsrc/common/fopen.s index d4d94acee..60d69206f 100644 --- a/libsrc/common/fopen.s +++ b/libsrc/common/fopen.s @@ -36,7 +36,7 @@ ; Failed to allocate a file stream lda #EMFILE - jsr __seterrno ; Set __errno, will return 0 in A + jsr ___seterrno ; Set __errno, will return 0 in A tax rts ; Return zero diff --git a/libsrc/common/fread.s b/libsrc/common/fread.s index c0733994e..647a7f2c8 100644 --- a/libsrc/common/fread.s +++ b/libsrc/common/fread.s @@ -59,7 +59,7 @@ ; File not open or in error state @L1: lda #EINVAL - jsr __seterrno ; Set __errno, return zero in A + jsr ___seterrno ; Set __errno, return zero in A tax ; a/x = 0 jmp @L99 ; Bail out diff --git a/libsrc/common/fwrite.s b/libsrc/common/fwrite.s index b0fa7ec42..311f4ca69 100644 --- a/libsrc/common/fwrite.s +++ b/libsrc/common/fwrite.s @@ -39,7 +39,7 @@ ; File not open @L1: lda #EBADF - jsr __seterrno ; Returns with A = 0 + jsr ___seterrno ; Returns with A = 0 tax ; A = X = 0 jmp incsp6 diff --git a/libsrc/common/getcwd.s b/libsrc/common/getcwd.s index 9b856ea7c..5fc0bbf0a 100644 --- a/libsrc/common/getcwd.s +++ b/libsrc/common/getcwd.s @@ -51,7 +51,7 @@ loop: dec ptr2 overflow: lda #<ERANGE - jsr __seterrno ; Returns 0 in A + jsr ___seterrno ; Returns 0 in A tax ; Return zero rts diff --git a/libsrc/common/mkdir.s b/libsrc/common/mkdir.s index 1144983aa..e592a2740 100644 --- a/libsrc/common/mkdir.s +++ b/libsrc/common/mkdir.s @@ -7,7 +7,7 @@ .export _mkdir .import __sysmkdir - .import __mappederrno + .import ___mappederrno ;-------------------------------------------------------------------------- @@ -15,6 +15,6 @@ .proc _mkdir jsr __sysmkdir ; Call the machine specific function - jmp __mappederrno ; Store into _oserror, set errno, return 0/-1 + jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 .endproc diff --git a/libsrc/common/putenv.s b/libsrc/common/putenv.s index c68d20a32..5febcc71e 100644 --- a/libsrc/common/putenv.s +++ b/libsrc/common/putenv.s @@ -169,7 +169,7 @@ addentry: ; Error entries nomem: lda #ENOMEM -error: jsr __seterrno +error: jsr ___seterrno lda #$FF ; Return -1 tax rts diff --git a/libsrc/common/remove.s b/libsrc/common/remove.s index e66f047ef..88b4b7536 100644 --- a/libsrc/common/remove.s +++ b/libsrc/common/remove.s @@ -7,7 +7,7 @@ .export _remove .import __sysremove - .import __mappederrno + .import ___mappederrno ;-------------------------------------------------------------------------- @@ -15,7 +15,7 @@ .proc _remove jsr __sysremove ; Call the machine specific function - jmp __mappederrno ; Store into _oserror, set errno, return 0/-1 + jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 .endproc diff --git a/libsrc/common/rename.s b/libsrc/common/rename.s index 0fbffa426..122ae1501 100644 --- a/libsrc/common/rename.s +++ b/libsrc/common/rename.s @@ -7,7 +7,7 @@ .export _rename .import __sysrename - .import __mappederrno + .import ___mappederrno ;-------------------------------------------------------------------------- @@ -15,7 +15,7 @@ .proc _rename jsr __sysrename ; Call the machine specific function - jmp __mappederrno ; Store into _oserror, set errno, return 0/-1 + jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 .endproc diff --git a/libsrc/common/rmdir.s b/libsrc/common/rmdir.s index 84ae9a54c..8146199b7 100644 --- a/libsrc/common/rmdir.s +++ b/libsrc/common/rmdir.s @@ -7,7 +7,7 @@ .export _rmdir .import __sysrmdir - .import __mappederrno + .import ___mappederrno ;-------------------------------------------------------------------------- @@ -15,6 +15,6 @@ .proc _rmdir jsr __sysrmdir ; Call the machine specific function - jmp __mappederrno ; Store into _oserror, set errno, return 0/-1 + jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 .endproc diff --git a/libsrc/common/signal.s b/libsrc/common/signal.s index 40262c457..6f8ef2950 100644 --- a/libsrc/common/signal.s +++ b/libsrc/common/signal.s @@ -61,7 +61,7 @@ ___sig_ign: invalidsig: lda #<EINVAL - jsr __seterrno ; Returns 0 in A + jsr ___seterrno ; Returns 0 in A tax ; A/X = 0 ___sig_dfl: rts diff --git a/libsrc/common/uname.s b/libsrc/common/uname.s index 3c1b0840f..633c990ef 100644 --- a/libsrc/common/uname.s +++ b/libsrc/common/uname.s @@ -7,7 +7,7 @@ .export _uname .import __sysuname - .import __mappederrno + .import ___mappederrno ;-------------------------------------------------------------------------- @@ -15,7 +15,7 @@ .proc _uname jsr __sysuname ; Call the machine specific function - jmp __mappederrno ; Store into _oserror, set errno, return 0/-1 + jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 .endproc diff --git a/libsrc/common/ungetc.s b/libsrc/common/ungetc.s index 88595068c..7e8c1f94f 100644 --- a/libsrc/common/ungetc.s +++ b/libsrc/common/ungetc.s @@ -62,7 +62,7 @@ ; File is not open or the character is invalid error: lda #EINVAL - jsr __seterrno + jsr ___seterrno lda #$FF ; Return -1 tax rts diff --git a/libsrc/common/vsnprintf.s b/libsrc/common/vsnprintf.s index 228e531d0..c9784a058 100644 --- a/libsrc/common/vsnprintf.s +++ b/libsrc/common/vsnprintf.s @@ -140,7 +140,7 @@ L0: ldy #EINVAL pla ; Drop ap pla tya - jsr __directerrno ; Return -1 + jsr ___directerrno ; Return -1 jmp incsp6 ; Drop parameters diff --git a/libsrc/geos-cbm/disk/dio_cts.s b/libsrc/geos-cbm/disk/dio_cts.s index 478181b69..81b189f65 100644 --- a/libsrc/geos-cbm/disk/dio_cts.s +++ b/libsrc/geos-cbm/disk/dio_cts.s @@ -10,7 +10,7 @@ .export _dio_phys_to_log .export sectab_1541_l, sectab_1541_h ; for log_to_phys - .import popax,__oserror + .import popax,___oserror .importzp ptr1,ptr2,ptr3,tmp1,tmp2,tmp3,tmp4 .include "dio.inc" @@ -82,7 +82,7 @@ dio_ctsend: ldx #0 txa ret: - sta __oserror + sta ___oserror rts ; return success ; errors diff --git a/libsrc/geos-cbm/disk/dio_openclose.s b/libsrc/geos-cbm/disk/dio_openclose.s index 327503017..69e188dcf 100644 --- a/libsrc/geos-cbm/disk/dio_openclose.s +++ b/libsrc/geos-cbm/disk/dio_openclose.s @@ -11,7 +11,7 @@ ; dio_close does nothing special .export _dio_open, _dio_close - .import __oserror, _OpenDisk + .import ___oserror, _OpenDisk .importzp ptr1, tmp1 .include "dio.inc" @@ -69,7 +69,7 @@ _dio_open: _inv_drive: lda #DEV_NOT_FOUND - sta __oserror + sta ___oserror lda #0 tax rts @@ -80,6 +80,6 @@ _dio_close: lda #0 ldy #sst_flag sta (ptr1),y - sta __oserror ; success + sta ___oserror ; success tax rts ; return no error diff --git a/libsrc/geos-cbm/disk/dio_qcount.s b/libsrc/geos-cbm/disk/dio_qcount.s index 5f10ac247..b5d380825 100644 --- a/libsrc/geos-cbm/disk/dio_qcount.s +++ b/libsrc/geos-cbm/disk/dio_qcount.s @@ -5,11 +5,11 @@ ; .export _dio_query_sectcount - .import __oserror + .import ___oserror _dio_query_sectcount: lda #0 - sta __oserror + sta ___oserror lda #<683 ldx #>683 rts diff --git a/libsrc/geos-cbm/disk/dio_qsize.s b/libsrc/geos-cbm/disk/dio_qsize.s index bf9178035..14c8a460a 100644 --- a/libsrc/geos-cbm/disk/dio_qsize.s +++ b/libsrc/geos-cbm/disk/dio_qsize.s @@ -5,10 +5,10 @@ ; .export _dio_query_sectsize - .import __oserror + .import ___oserror _dio_query_sectsize: lda #<256 ldx #>256 - sta __oserror + sta ___oserror rts diff --git a/libsrc/geos-cbm/disk/dio_read.s b/libsrc/geos-cbm/disk/dio_read.s index ac19f9afa..4c9297e65 100644 --- a/libsrc/geos-cbm/disk/dio_read.s +++ b/libsrc/geos-cbm/disk/dio_read.s @@ -8,7 +8,7 @@ ; .export _dio_read - .import dio_params, __oserror + .import dio_params, ___oserror .include "geossym.inc" .include "jumptab.inc" @@ -18,6 +18,6 @@ _dio_read: tay bne err jsr ReadBlock - stx __oserror + stx ___oserror txa err: rts diff --git a/libsrc/geos-cbm/disk/dio_stc.s b/libsrc/geos-cbm/disk/dio_stc.s index 469df93ca..3c3c9108f 100644 --- a/libsrc/geos-cbm/disk/dio_stc.s +++ b/libsrc/geos-cbm/disk/dio_stc.s @@ -9,7 +9,7 @@ .export _dio_log_to_phys .importzp ptr1,ptr2,ptr3,tmp1,tmp2 - .import popax,__oserror + .import popax,___oserror .import sectab_1541_l, sectab_1541_h .include "dio.inc" @@ -78,7 +78,7 @@ dio_stcend: ldx #0 txa _ret: - sta __oserror + sta ___oserror rts ; return success ; errors diff --git a/libsrc/geos-cbm/disk/dio_writev.s b/libsrc/geos-cbm/disk/dio_writev.s index 9b36ed096..962d7e77f 100644 --- a/libsrc/geos-cbm/disk/dio_writev.s +++ b/libsrc/geos-cbm/disk/dio_writev.s @@ -8,7 +8,7 @@ ; .export _dio_write_verify - .import dio_params, __oserror + .import dio_params, ___oserror .include "geossym.inc" .include "jumptab.inc" @@ -18,6 +18,6 @@ _dio_write_verify: tay bne err jsr VerWriteBlock - stx __oserror + stx ___oserror txa err: rts diff --git a/libsrc/geos-common/disk/calcblksfree.s b/libsrc/geos-common/disk/calcblksfree.s index 7e1bb4f52..fec6d6690 100644 --- a/libsrc/geos-common/disk/calcblksfree.s +++ b/libsrc/geos-common/disk/calcblksfree.s @@ -5,7 +5,7 @@ ; int CalcBlksFree (void); - .import __oserror + .import ___oserror .export _CalcBlksFree .include "jumptab.inc" @@ -18,7 +18,7 @@ _CalcBlksFree: sta r5L stx r5H jsr CalcBlksFree - stx __oserror + stx ___oserror lda r4L ldx r4H rts diff --git a/libsrc/geos-common/disk/getptrcurdknm.s b/libsrc/geos-common/disk/getptrcurdknm.s index d92e5d91e..9112c9f99 100644 --- a/libsrc/geos-common/disk/getptrcurdknm.s +++ b/libsrc/geos-common/disk/getptrcurdknm.s @@ -7,7 +7,7 @@ ; (fills curName[17] with current disk's name) .importzp ptr4, ptr3 - .import __oserror + .import ___oserror .export _GetPtrCurDkNm .include "jumptab.inc" @@ -34,5 +34,5 @@ namelp: lda (ptr4),y bne namelp fin: lda #0 sta (ptr3),y - stx __oserror + stx ___oserror rts diff --git a/libsrc/geos-common/disk/setnextfree.s b/libsrc/geos-common/disk/setnextfree.s index b24f16f6f..2d43c1e36 100644 --- a/libsrc/geos-common/disk/setnextfree.s +++ b/libsrc/geos-common/disk/setnextfree.s @@ -5,7 +5,7 @@ ; struct tr_se SetNextFree (struct tr_se *startTS); - .import __oserror + .import ___oserror .import gettrse .export _SetNextFree @@ -18,7 +18,7 @@ _SetNextFree: sta r3L stx r3H jsr SetNextFree - stx __oserror + stx ___oserror lda r3L ldx r3H rts diff --git a/libsrc/geos-common/drivers/fio_module.s b/libsrc/geos-common/drivers/fio_module.s index 1314fc4c5..d4549b4ab 100644 --- a/libsrc/geos-common/drivers/fio_module.s +++ b/libsrc/geos-common/drivers/fio_module.s @@ -14,7 +14,7 @@ FILEDES = 3 ; first free to use file descriptor .importzp ptr1, ptr2, ptr3, tmp1 .import addysp, popax, popptr1 - .import __oserror + .import ___oserror .import _FindFile, _ReadByte .export _open, _close, _read @@ -65,8 +65,8 @@ _open: stx f_offset stx f_offset+1 lda #0 ; clear errors - sta __oserror - jsr __seterrno + sta ___oserror + jsr ___seterrno lda #FILEDES ; return fd sta filedesc rts @@ -75,14 +75,14 @@ _open: .byte $2c ; skip @alreadyopen: lda #EMFILE ; too many opened files (there can be only one) - jmp __directerrno ; set errno, clear oserror, return -1 + jmp ___directerrno ; set errno, clear oserror, return -1 @oserror: - jmp __mappederrno ; set platform error code, return -1 + jmp ___mappederrno ; set platform error code, return -1 _close: lda #0 - sta __oserror - jsr __seterrno ; clear errors + sta ___oserror + jsr ___seterrno ; clear errors lda #0 ; clear fd sta filedesc tax @@ -92,7 +92,7 @@ _read: ; a/x - number of bytes ; popax - buffer ptr ; popax - fd, must be == to the above one - ; return -1+__oserror or number of bytes read + ; return -1+___oserror or number of bytes read inx stx ptr1+1 @@ -111,14 +111,14 @@ _read: @filenotopen: lda #EBADF - jmp __directerrno ; Sets _errno, clears _oserror, returns -1 + jmp ___directerrno ; Sets _errno, clears __oserror, returns -1 @fileok: lda #0 sta ptr3 sta ptr3+1 ; put 0 into ptr3 (number of bytes read) - sta __oserror ; clear error flags - jsr __seterrno + sta ___oserror ; clear error flags + jsr ___seterrno lda f_track ; restore stuff for ReadByte ldx f_sector @@ -147,11 +147,11 @@ _read: bne @L2 inc ptr3+1 -@L2: lda __oserror ; was there error ? +@L2: lda ___oserror ; was there error ? beq @L3 cmp #BFR_OVERFLOW ; EOF? beq @done ; yes, we're done - jmp __mappederrno ; no, we're screwed + jmp ___mappederrno ; no, we're screwed @L3: dec ptr1 ; decrement the count bne @L0 diff --git a/libsrc/geos-common/file/get1stdirentry.s b/libsrc/geos-common/file/get1stdirentry.s index f0ad59388..2217718ea 100644 --- a/libsrc/geos-common/file/get1stdirentry.s +++ b/libsrc/geos-common/file/get1stdirentry.s @@ -5,7 +5,7 @@ ; struct filehandle* Get1stDirEntry (void); - .import __oserror, return0 + .import ___oserror, return0 .export _Get1stDirEntry .include "diskdrv.inc" @@ -13,7 +13,7 @@ _Get1stDirEntry: jsr Get1stDirEntry - stx __oserror + stx ___oserror txa bne L1 ; jump if disk error lda r5L diff --git a/libsrc/geos-common/file/getnxtdirentry.s b/libsrc/geos-common/file/getnxtdirentry.s index e8ccbf3a2..0f74a0ed8 100644 --- a/libsrc/geos-common/file/getnxtdirentry.s +++ b/libsrc/geos-common/file/getnxtdirentry.s @@ -5,7 +5,7 @@ ; struct filehandle* GetNxtDirEntry (void); - .import __oserror, return0 + .import ___oserror, return0 .export _GetNxtDirEntry .include "diskdrv.inc" @@ -13,7 +13,7 @@ _GetNxtDirEntry: jsr GetNxtDirEntry - stx __oserror + stx ___oserror txa bne L1 ; jump if disk error tya diff --git a/libsrc/geos-common/file/readbyte.s b/libsrc/geos-common/file/readbyte.s index 9a24e68df..90616a426 100644 --- a/libsrc/geos-common/file/readbyte.s +++ b/libsrc/geos-common/file/readbyte.s @@ -5,13 +5,13 @@ ; char ReadByte (void); - .import __oserror + .import ___oserror .export _ReadByte .include "jumptab.inc" _ReadByte: jsr ReadByte - stx __oserror + stx ___oserror ldx #0 rts diff --git a/libsrc/geos-common/system/oserror.s b/libsrc/geos-common/system/oserror.s index f0915fd5b..fa45f3e14 100644 --- a/libsrc/geos-common/system/oserror.s +++ b/libsrc/geos-common/system/oserror.s @@ -3,16 +3,16 @@ ; GEOS port: Maciej 'YTM/Elysium' Witkowiak ; 2.7.2001 ; -; int __fastcall__ _osmaperrno (unsigned char oserror); +; int __fastcall__ __osmaperrno (unsigned char oserror); ; /* Map a system specific error into a system independent code */ ; - .export __osmaperrno + .export ___osmaperrno .include "errno.inc" .include "const.inc" -__osmaperrno: +___osmaperrno: ldx #ErrTabSize @L1: cmp ErrTab-2,x ; Search for the error code beq @L2 ; Jump if found diff --git a/libsrc/geos-common/system/setoserror.s b/libsrc/geos-common/system/setoserror.s index adc6ad017..6fb89e96e 100644 --- a/libsrc/geos-common/system/setoserror.s +++ b/libsrc/geos-common/system/setoserror.s @@ -5,10 +5,10 @@ ; .export setoserror - .import __oserror + .import ___oserror setoserror: - stx __oserror + stx ___oserror txa ldx #0 ; X is cleared (high byte for promoting char to int) tay ; Y register is used just to save flags state diff --git a/libsrc/lynx/open.s b/libsrc/lynx/open.s index c48b8eb95..032f55a99 100644 --- a/libsrc/lynx/open.s +++ b/libsrc/lynx/open.s @@ -66,7 +66,7 @@ parmok: jsr popax beq flagsok jsr popax lda #EINVAL - jmp __directerrno + jmp ___directerrno flagsok: jsr popax @@ -74,7 +74,7 @@ flagsok: jsr _openn ldx #$00 lda #$01 - stx __oserror + stx ___oserror rts .endproc diff --git a/libsrc/lynx/oserror.s b/libsrc/lynx/oserror.s index 5570a3bb7..b2ccbf4f0 100644 --- a/libsrc/lynx/oserror.s +++ b/libsrc/lynx/oserror.s @@ -1,7 +1,7 @@ ; ; Karri Kaksonen, 2010 ; -; int __fastcall__ _osmaperrno (unsigned char oserror); +; int __fastcall__ __osmaperrno (unsigned char oserror); ; /* Map a system specific error into a system independent code */ ; @@ -9,6 +9,6 @@ .code -__osmaperrno: +___osmaperrno: rts diff --git a/libsrc/osic1p/oserror.s b/libsrc/osic1p/oserror.s index 073691a06..380c5ebb9 100644 --- a/libsrc/osic1p/oserror.s +++ b/libsrc/osic1p/oserror.s @@ -4,14 +4,14 @@ ; original by ; Stefan Haubenthal, 2011-04-18 ; -; int __fastcall__ _osmaperrno (unsigned char oserror); +; int __fastcall__ __osmaperrno (unsigned char oserror); ; /* Map a system specific error into a system independent code */ ; .include "errno.inc" - .export __osmaperrno + .export ___osmaperrno -.proc __osmaperrno +.proc ___osmaperrno lda #<EUNKNOWN ldx #>EUNKNOWN diff --git a/libsrc/telestrat/oserror.s b/libsrc/telestrat/oserror.s index e3b9e619a..8fe255656 100644 --- a/libsrc/telestrat/oserror.s +++ b/libsrc/telestrat/oserror.s @@ -1,14 +1,14 @@ ; ; Jede, 2017-10-27 ; -; int __fastcall__ _osmaperrno (unsigned char oserror); +; int __fastcall__ __osmaperrno (unsigned char oserror); ; /* Map a system specific error into a system independent code */ ; .include "errno.inc" - .export __osmaperrno + .export ___osmaperrno -.proc __osmaperrno +.proc ___osmaperrno lda #<EUNKNOWN ldx #>EUNKNOWN From 54aff47513eb19bc115880fc32f14b1d55026f31 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 28 Aug 2022 22:09:44 +0200 Subject: [PATCH 1799/2710] fix some errno related stuff, "make all" works again --- include/errno.h | 15 ++++++++++++++- libsrc/cbm/dir.s | 4 ++-- libsrc/cbm/readdir.c | 2 +- libsrc/common/_seterrno.s | 6 +++--- libsrc/common/errno.s | 4 ++-- libsrc/common/perror.c | 2 +- libsrc/common/strerror.s | 4 ++-- 7 files changed, 25 insertions(+), 12 deletions(-) diff --git a/include/errno.h b/include/errno.h index c762e8b1c..8f329e3cc 100644 --- a/include/errno.h +++ b/include/errno.h @@ -101,11 +101,21 @@ int __fastcall__ __osmaperrno (unsigned char oserror); unsigned char __fastcall__ __seterrno (unsigned char code); /* Set errno to a specific error code and return zero. Used by the library */ +#if __CC65_STD__ >= __CC65_STD_CC65__ +/* define the name with just one underscore for backwards compatibility */ +#define _seterrno __seterrno +#endif + int __fastcall__ __directerrno (unsigned char code); /* Set errno to a specific error code, clear __oserror and return -1. Used ** by the library. */ +#if __CC65_STD__ >= __CC65_STD_CC65__ +/* define the name with just one underscore for backwards compatibility */ +#define _directerrno __directerrno +#endif + int __fastcall__ __mappederrno (unsigned char code); /* Set __oserror to the given platform specific error code. If it is a real ** error code (not zero) set errno to the corresponding system error code @@ -113,7 +123,10 @@ int __fastcall__ __mappederrno (unsigned char code); ** Used by the library. */ - +#if __CC65_STD__ >= __CC65_STD_CC65__ +/* define the name with just one underscore for backwards compatibility */ +#define _mappederrno __mappederrno +#endif /* End of errno.h */ #endif diff --git a/libsrc/cbm/dir.s b/libsrc/cbm/dir.s index 808fcf982..734485aaf 100644 --- a/libsrc/cbm/dir.s +++ b/libsrc/cbm/dir.s @@ -92,8 +92,8 @@ L3: sta tmp1 ; Save returned count ; Didn't read enough bytes. This is an error for us, but errno is not set lda #<EIO - sta __errno - stx __errno+1 ; X is zero + sta ___errno + stx ___errno+1 ; X is zero bne L1 ; Branch always diff --git a/libsrc/cbm/readdir.c b/libsrc/cbm/readdir.c index 1512edc4e..25627a9cb 100644 --- a/libsrc/cbm/readdir.c +++ b/libsrc/cbm/readdir.c @@ -126,7 +126,7 @@ struct dirent* __fastcall__ readdir (register DIR* dir) } /* Something went wrong when parsing the directory entry */ - _errno = EIO; + __errno = EIO; exitpoint: return 0; } diff --git a/libsrc/common/_seterrno.s b/libsrc/common/_seterrno.s index 30394a9cb..4344a3302 100644 --- a/libsrc/common/_seterrno.s +++ b/libsrc/common/_seterrno.s @@ -1,7 +1,7 @@ ; ; Ullrich von Bassewitz, 2004-05-13 ; -; ___seterrno: Will set __errno to the value in A and return zero in A. Other +; ___seterrno: Will set ___errno to the value in A and return zero in A. Other ; registers aren't changed. The function is C callable, but ; currently only called from asm code. ; @@ -12,9 +12,9 @@ .proc ___seterrno - sta __errno + sta ___errno lda #0 - sta __errno+1 + sta ___errno+1 rts .endproc diff --git a/libsrc/common/errno.s b/libsrc/common/errno.s index f448c3c14..43bbe3fb0 100644 --- a/libsrc/common/errno.s +++ b/libsrc/common/errno.s @@ -2,7 +2,7 @@ ; 2003-08-12, Ullrich von Bassewitz ; 2015-09-24, Greg King ; -; extern int _errno; +; extern int __errno; ; /* Library errors go here. */ ; @@ -10,5 +10,5 @@ .bss -__errno: +___errno: .word 0 diff --git a/libsrc/common/perror.c b/libsrc/common/perror.c index ddc015c1e..9b0dac7de 100644 --- a/libsrc/common/perror.c +++ b/libsrc/common/perror.c @@ -42,7 +42,7 @@ void __fastcall__ perror (const char* msg) { /* Fetch the message that corresponds to errno */ - const char* errormsg = strerror (_errno); + const char* errormsg = strerror (__errno); /* Different output depending on msg */ if (msg) { diff --git a/libsrc/common/strerror.s b/libsrc/common/strerror.s index 0f41331ea..8cc7c7441 100644 --- a/libsrc/common/strerror.s +++ b/libsrc/common/strerror.s @@ -19,9 +19,9 @@ _strerror: ; The given error code is invalid @L1: lda #<EINVAL - sta __errno + sta ___errno lda #>EINVAL ; = 0 - sta __errno+1 + sta ___errno+1 ; lda #$00 ; A contains zero: "Unknown error" ; Load the pointer to the error message and return From df4b6f9d144a27ce1aeb1e4ef091f5c4a9548047 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 28 Aug 2022 22:37:33 +0200 Subject: [PATCH 1800/2710] remove extra spaces --- libsrc/apple2/devicedir.s | 2 +- libsrc/apple2/diosectsize.s | 2 +- libsrc/apple2/lseek.s | 4 ++-- libsrc/apple2/rwcommon.s | 2 +- libsrc/atari/close.s | 2 +- libsrc/atari/diopncls.s | 4 ++-- libsrc/atari/exec.s | 2 +- libsrc/atari/graphics.s | 2 +- libsrc/atari/lseek.s | 4 ++-- libsrc/atari/read.s | 2 +- libsrc/atari/write.s | 2 +- libsrc/cbm/close.s | 4 ++-- libsrc/cbm/devicedir.s | 2 +- libsrc/cbm/open.s | 2 +- libsrc/cbm/read.s | 4 ++-- libsrc/cbm/write.s | 4 ++-- libsrc/common/_directerrno.s | 4 ++-- libsrc/common/_fopen.s | 2 +- libsrc/common/_mappederrno.s | 6 +++--- libsrc/common/chdir.s | 2 +- libsrc/common/fopen.s | 2 +- libsrc/common/fwrite.s | 2 +- libsrc/common/mkdir.s | 2 +- libsrc/common/remove.s | 2 +- libsrc/common/rmdir.s | 2 +- libsrc/common/signal.s | 2 +- libsrc/common/sigtable.s | 12 ++++++------ libsrc/common/uname.s | 2 +- libsrc/common/vsnprintf.s | 2 +- libsrc/geos-cbm/disk/dio_openclose.s | 2 +- libsrc/geos-common/drivers/fio_module.s | 14 +++++++------- 31 files changed, 51 insertions(+), 51 deletions(-) diff --git a/libsrc/apple2/devicedir.s b/libsrc/apple2/devicedir.s index abe900be1..21cabf59e 100644 --- a/libsrc/apple2/devicedir.s +++ b/libsrc/apple2/devicedir.s @@ -73,7 +73,7 @@ oserr: jsr ___mappederrno iny lda #$00 sta (ptr1),y - sta ___oserror ; Clear __oserror + sta ___oserror ; Clear __oserror ; Success, return buf lda ptr1 diff --git a/libsrc/apple2/diosectsize.s b/libsrc/apple2/diosectsize.s index 4730bd611..7d2e27a09 100644 --- a/libsrc/apple2/diosectsize.s +++ b/libsrc/apple2/diosectsize.s @@ -10,7 +10,7 @@ _dio_query_sectsize: ; Clear error - stx ___oserror ; X = 0 + stx ___oserror ; X = 0 ; Return ProDOS 8 block size txa ; X = 0 diff --git a/libsrc/apple2/lseek.s b/libsrc/apple2/lseek.s index cc6241558..be0078c1b 100644 --- a/libsrc/apple2/lseek.s +++ b/libsrc/apple2/lseek.s @@ -107,13 +107,13 @@ seek_common: einval: lda #EINVAL ; Set __errno -errno: jsr ___directerrno ; leaves -1 in AX +errno: jsr ___directerrno ; leaves -1 in AX stx sreg ; extend return value to 32 bits stx sreg+1 rts ; Set ___oserror -oserr: jsr ___mappederrno ; leaves -1 in AX +oserr: jsr ___mappederrno ; leaves -1 in AX stx sreg ; extend return value to 32 bits stx sreg+1 rts diff --git a/libsrc/apple2/rwcommon.s b/libsrc/apple2/rwcommon.s index 302b46457..769247e63 100644 --- a/libsrc/apple2/rwcommon.s +++ b/libsrc/apple2/rwcommon.s @@ -49,7 +49,7 @@ rwcommon: rwepilog: ; Return success - sta ___oserror ; A = 0 + sta ___oserror ; A = 0 lda mliparam + MLI::RW::TRANS_COUNT ldx mliparam + MLI::RW::TRANS_COUNT+1 rts diff --git a/libsrc/atari/close.s b/libsrc/atari/close.s index 63b2948f3..b5bff4173 100644 --- a/libsrc/atari/close.s +++ b/libsrc/atari/close.s @@ -18,7 +18,7 @@ jsr CIOV bmi closerr ok: ldx #0 - stx ___oserror ; clear system specific error code + stx ___oserror ; clear system specific error code txa rts diff --git a/libsrc/atari/diopncls.s b/libsrc/atari/diopncls.s index 37f25049b..f40d6bba4 100644 --- a/libsrc/atari/diopncls.s +++ b/libsrc/atari/diopncls.s @@ -49,7 +49,7 @@ _dio_open: sta sectsizetab+sst_flag,x ; set flag that drive is "open" lda #0 sta sectsizetab+sst_sectsize+1,x - sta ___oserror ; success + sta ___oserror ; success tya sta sectsizetab+sst_driveno,x stx ptr2 @@ -156,7 +156,7 @@ s128: lda #128 lda #0 ldy #sst_flag sta (ptr2),y - sta ___oserror ; success + sta ___oserror ; success tax rts ; return no error diff --git a/libsrc/atari/exec.s b/libsrc/atari/exec.s index 88430e9f7..145b28e0d 100644 --- a/libsrc/atari/exec.s +++ b/libsrc/atari/exec.s @@ -148,7 +148,7 @@ copycd: lda #ATEOL pha ; remember error code jsr close ; close the IOCB (required even if open failed) pla ; put error code back into A -setmerr:jmp ___mappederrno ; update errno from OS specific error code in A +setmerr:jmp ___mappederrno ; update errno from OS specific error code in A openok: lda #>buf sta ICBAH,x ; set buffer address diff --git a/libsrc/atari/graphics.s b/libsrc/atari/graphics.s index f35087aea..1f7844c39 100644 --- a/libsrc/atari/graphics.s +++ b/libsrc/atari/graphics.s @@ -45,7 +45,7 @@ parmok: jsr findfreeiocb beq iocbok ; we found one lda #<EMFILE ; "too many open files" -seterr: jsr ___mappederrno ; @@@ probably not correct to set errno here @@@ +seterr: jsr ___mappederrno ; @@@ probably not correct to set errno here @@@ rts ; return -1 ;invmode:ldx #>EINVAL diff --git a/libsrc/atari/lseek.s b/libsrc/atari/lseek.s index 915ec24cf..991a86569 100644 --- a/libsrc/atari/lseek.s +++ b/libsrc/atari/lseek.s @@ -21,7 +21,7 @@ ; seeking not supported, return -1 and ENOSYS errno value no_supp:jsr incsp6 lda #<ENOSYS - jsr ___directerrno ; returns with $FFFF in AX + jsr ___directerrno ; returns with $FFFF in AX sta sreg sta sreg+1 rts @@ -94,7 +94,7 @@ xxerr: tya pha jsr incsp6 pla - jsr ___mappederrno ; returns with $FFFF in AX + jsr ___mappederrno ; returns with $FFFF in AX sta sreg sta sreg+1 rts diff --git a/libsrc/atari/read.s b/libsrc/atari/read.s index bb086f2b1..5078b321d 100644 --- a/libsrc/atari/read.s +++ b/libsrc/atari/read.s @@ -33,7 +33,7 @@ done: lda ICBLL,x ; buf len lo lda ICBLH,x ; get buf len hi tax ; to X okdone: lda #0 - sta ___oserror ; clear system dependend error code + sta ___oserror ; clear system dependend error code pla ; get buf len lo rts diff --git a/libsrc/atari/write.s b/libsrc/atari/write.s index 3a8fb23d4..2ddb88ee3 100644 --- a/libsrc/atari/write.s +++ b/libsrc/atari/write.s @@ -21,7 +21,7 @@ write9: lda ICBLH,x ; buf len high tax lda #0 - sta ___oserror ; clear system dependend error code + sta ___oserror ; clear system dependend error code pla rts diff --git a/libsrc/cbm/close.s b/libsrc/cbm/close.s index 0cd425cf4..d805e37cc 100644 --- a/libsrc/cbm/close.s +++ b/libsrc/cbm/close.s @@ -54,12 +54,12 @@ ldx unittab,y jsr closecmdchannel ; Close the disk command channel pla ; Get the error code from the disk - jmp ___mappederrno ; Set __oserror and _errno, return 0/-1 + jmp ___mappederrno ; Set __oserror and _errno, return 0/-1 ; Error entry: The given file descriptor is not valid or not open invalidfd: lda #EBADF - jmp ___directerrno ; Set _errno, clear __oserror, return -1 + jmp ___directerrno ; Set _errno, clear __oserror, return -1 .endproc diff --git a/libsrc/cbm/devicedir.s b/libsrc/cbm/devicedir.s index 25aad556b..1f2b2166c 100644 --- a/libsrc/cbm/devicedir.s +++ b/libsrc/cbm/devicedir.s @@ -52,7 +52,7 @@ fail: lda #0 ; Return NULL okay: lda fnunit ; Set by diskinit jsr devicestr ; Returns 0 in A - sta ___oserror ; Clear __oserror + sta ___oserror ; Clear __oserror ; Success, return buf diff --git a/libsrc/cbm/open.s b/libsrc/cbm/open.s index 533c110be..47224925d 100644 --- a/libsrc/cbm/open.s +++ b/libsrc/cbm/open.s @@ -189,7 +189,7 @@ nofile: ; ... else use SA=0 (read) txa ; Handle ldx #0 - stx ___oserror ; Clear __oserror + stx ___oserror ; Clear __oserror rts .endproc diff --git a/libsrc/cbm/read.s b/libsrc/cbm/read.s index e6c025ffe..5990ed2d0 100644 --- a/libsrc/cbm/read.s +++ b/libsrc/cbm/read.s @@ -66,7 +66,7 @@ jsr CHKIN bcc @L3 ; Branch if ok - jmp ___mappederrno ; Store into ___oserror, map to errno, return -1 + jmp ___mappederrno ; Store into ___oserror, map to errno, return -1 ; Read the next byte @@ -141,7 +141,7 @@ devnotpresent: invalidfd: lda #EBADF - jmp ___directerrno ; Sets _errno, clears __oserror, returns -1 + jmp ___directerrno ; Sets _errno, clears __oserror, returns -1 .endproc diff --git a/libsrc/cbm/write.s b/libsrc/cbm/write.s index 60088e815..172e45382 100644 --- a/libsrc/cbm/write.s +++ b/libsrc/cbm/write.s @@ -55,7 +55,7 @@ jsr CKOUT bcc @L2 -@error: jmp ___mappederrno ; Store into ___oserror, map to errno, return -1 +@error: jmp ___mappederrno ; Store into ___oserror, map to errno, return -1 ; Output the next character from the buffer @@ -112,6 +112,6 @@ devnotpresent: invalidfd: lda #EBADF - jmp ___directerrno ; Sets _errno, clears __oserror, returns -1 + jmp ___directerrno ; Sets _errno, clears __oserror, returns -1 .endproc diff --git a/libsrc/common/_directerrno.s b/libsrc/common/_directerrno.s index 460c44ffe..20060bdd7 100644 --- a/libsrc/common/_directerrno.s +++ b/libsrc/common/_directerrno.s @@ -16,8 +16,8 @@ ; */ ___directerrno: - jsr ___seterrno ; Set errno (returns with .A = 0) - sta ___oserror ; Clear ___oserror + jsr ___seterrno ; Set errno (returns with .A = 0) + sta ___oserror ; Clear ___oserror .if (.cpu .bitand CPU_ISET_65SC02) dec a .else diff --git a/libsrc/common/_fopen.s b/libsrc/common/_fopen.s index f2f03a68c..17a1ec19b 100644 --- a/libsrc/common/_fopen.s +++ b/libsrc/common/_fopen.s @@ -69,7 +69,7 @@ invmode: lda #EINVAL - jsr ___seterrno ; Set __errno, returns zero in A + jsr ___seterrno ; Set __errno, returns zero in A tax ; a/x = 0 jmp incsp4 diff --git a/libsrc/common/_mappederrno.s b/libsrc/common/_mappederrno.s index 4b66d7c2c..83565b723 100644 --- a/libsrc/common/_mappederrno.s +++ b/libsrc/common/_mappederrno.s @@ -19,11 +19,11 @@ ; */ ___mappederrno: - sta ___oserror ; Store the error code + sta ___oserror ; Store the error code tax ; Did we have an error? bze ok ; Branch if no - jsr ___osmaperrno ; Map OS error into errno code - jsr ___seterrno ; Save in errno (returns with .A = 0) + jsr ___osmaperrno ; Map OS error into errno code + jsr ___seterrno ; Save in errno (returns with .A = 0) .if (.cpu .bitand CPU_ISET_65SC02) dec a .else diff --git a/libsrc/common/chdir.s b/libsrc/common/chdir.s index 24fc481b4..1f10a6804 100644 --- a/libsrc/common/chdir.s +++ b/libsrc/common/chdir.s @@ -17,7 +17,7 @@ .proc _chdir jsr __syschdir ; Call the machine specific function - jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 + jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 .endproc diff --git a/libsrc/common/fopen.s b/libsrc/common/fopen.s index 60d69206f..0f493706b 100644 --- a/libsrc/common/fopen.s +++ b/libsrc/common/fopen.s @@ -36,7 +36,7 @@ ; Failed to allocate a file stream lda #EMFILE - jsr ___seterrno ; Set __errno, will return 0 in A + jsr ___seterrno ; Set __errno, will return 0 in A tax rts ; Return zero diff --git a/libsrc/common/fwrite.s b/libsrc/common/fwrite.s index 311f4ca69..861feb120 100644 --- a/libsrc/common/fwrite.s +++ b/libsrc/common/fwrite.s @@ -39,7 +39,7 @@ ; File not open @L1: lda #EBADF - jsr ___seterrno ; Returns with A = 0 + jsr ___seterrno ; Returns with A = 0 tax ; A = X = 0 jmp incsp6 diff --git a/libsrc/common/mkdir.s b/libsrc/common/mkdir.s index e592a2740..1a5c7551f 100644 --- a/libsrc/common/mkdir.s +++ b/libsrc/common/mkdir.s @@ -15,6 +15,6 @@ .proc _mkdir jsr __sysmkdir ; Call the machine specific function - jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 + jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 .endproc diff --git a/libsrc/common/remove.s b/libsrc/common/remove.s index 88b4b7536..1b8515870 100644 --- a/libsrc/common/remove.s +++ b/libsrc/common/remove.s @@ -15,7 +15,7 @@ .proc _remove jsr __sysremove ; Call the machine specific function - jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 + jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 .endproc diff --git a/libsrc/common/rmdir.s b/libsrc/common/rmdir.s index 8146199b7..ea0780387 100644 --- a/libsrc/common/rmdir.s +++ b/libsrc/common/rmdir.s @@ -15,6 +15,6 @@ .proc _rmdir jsr __sysrmdir ; Call the machine specific function - jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 + jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 .endproc diff --git a/libsrc/common/signal.s b/libsrc/common/signal.s index 6f8ef2950..65d0316b4 100644 --- a/libsrc/common/signal.s +++ b/libsrc/common/signal.s @@ -61,7 +61,7 @@ ___sig_ign: invalidsig: lda #<EINVAL - jsr ___seterrno ; Returns 0 in A + jsr ___seterrno ; Returns 0 in A tax ; A/X = 0 ___sig_dfl: rts diff --git a/libsrc/common/sigtable.s b/libsrc/common/sigtable.s index 873d1def3..5b2d7f80f 100644 --- a/libsrc/common/sigtable.s +++ b/libsrc/common/sigtable.s @@ -14,11 +14,11 @@ .data sigtable: - .word ___sig_dfl ; SIGABRT - .word ___sig_dfl ; SIGFPE - .word ___sig_dfl ; SIGILL - .word ___sig_dfl ; SIGINT - .word ___sig_dfl ; SIGSEGV - .word ___sig_dfl ; SIGTERM + .word ___sig_dfl ; SIGABRT + .word ___sig_dfl ; SIGFPE + .word ___sig_dfl ; SIGILL + .word ___sig_dfl ; SIGINT + .word ___sig_dfl ; SIGSEGV + .word ___sig_dfl ; SIGTERM diff --git a/libsrc/common/uname.s b/libsrc/common/uname.s index 633c990ef..3f2a8ff14 100644 --- a/libsrc/common/uname.s +++ b/libsrc/common/uname.s @@ -15,7 +15,7 @@ .proc _uname jsr __sysuname ; Call the machine specific function - jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 + jmp ___mappederrno ; Store into __oserror, set errno, return 0/-1 .endproc diff --git a/libsrc/common/vsnprintf.s b/libsrc/common/vsnprintf.s index c9784a058..048a756c3 100644 --- a/libsrc/common/vsnprintf.s +++ b/libsrc/common/vsnprintf.s @@ -140,7 +140,7 @@ L0: ldy #EINVAL pla ; Drop ap pla tya - jsr ___directerrno ; Return -1 + jsr ___directerrno ; Return -1 jmp incsp6 ; Drop parameters diff --git a/libsrc/geos-cbm/disk/dio_openclose.s b/libsrc/geos-cbm/disk/dio_openclose.s index 69e188dcf..953aed318 100644 --- a/libsrc/geos-cbm/disk/dio_openclose.s +++ b/libsrc/geos-cbm/disk/dio_openclose.s @@ -80,6 +80,6 @@ _dio_close: lda #0 ldy #sst_flag sta (ptr1),y - sta ___oserror ; success + sta ___oserror ; success tax rts ; return no error diff --git a/libsrc/geos-common/drivers/fio_module.s b/libsrc/geos-common/drivers/fio_module.s index d4549b4ab..affbf6ecc 100644 --- a/libsrc/geos-common/drivers/fio_module.s +++ b/libsrc/geos-common/drivers/fio_module.s @@ -75,14 +75,14 @@ _open: .byte $2c ; skip @alreadyopen: lda #EMFILE ; too many opened files (there can be only one) - jmp ___directerrno ; set errno, clear oserror, return -1 + jmp ___directerrno ; set errno, clear oserror, return -1 @oserror: - jmp ___mappederrno ; set platform error code, return -1 + jmp ___mappederrno ; set platform error code, return -1 _close: lda #0 sta ___oserror - jsr ___seterrno ; clear errors + jsr ___seterrno ; clear errors lda #0 ; clear fd sta filedesc tax @@ -111,13 +111,13 @@ _read: @filenotopen: lda #EBADF - jmp ___directerrno ; Sets _errno, clears __oserror, returns -1 + jmp ___directerrno ; Sets _errno, clears __oserror, returns -1 @fileok: lda #0 sta ptr3 sta ptr3+1 ; put 0 into ptr3 (number of bytes read) - sta ___oserror ; clear error flags + sta ___oserror ; clear error flags jsr ___seterrno lda f_track ; restore stuff for ReadByte @@ -147,11 +147,11 @@ _read: bne @L2 inc ptr3+1 -@L2: lda ___oserror ; was there error ? +@L2: lda ___oserror ; was there error ? beq @L3 cmp #BFR_OVERFLOW ; EOF? beq @done ; yes, we're done - jmp ___mappederrno ; no, we're screwed + jmp ___mappederrno ; no, we're screwed @L3: dec ptr1 ; decrement the count bne @L0 From b09024aa32e3bdfe4dfe15bf6a24b4b736ede9c3 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 29 Aug 2022 19:55:48 +0200 Subject: [PATCH 1801/2710] add extra underscore to heap stuff --- asminc/_heap.inc | 10 +++--- include/_heap.h | 10 +++--- include/stdlib.h | 24 +++++++++++--- libsrc/common/_heap.s | 14 ++++---- libsrc/common/_heapadd.s | 4 +-- libsrc/common/_heapblocksize.s | 4 +-- libsrc/common/_heapmaxavail.s | 16 ++++----- libsrc/common/_heapmemavail.s | 16 ++++----- libsrc/common/free.s | 60 +++++++++++++++++----------------- libsrc/common/malloc.s | 28 ++++++++-------- libsrc/common/realloc.c | 8 ++--- 11 files changed, 105 insertions(+), 89 deletions(-) diff --git a/asminc/_heap.inc b/asminc/_heap.inc index a7d6acea2..1bf80ac82 100644 --- a/asminc/_heap.inc +++ b/asminc/_heap.inc @@ -28,8 +28,8 @@ HEAP_MIN_BLOCKSIZE = .sizeof (freeblock) ; Minimum size of an allocated block HEAP_ADMIN_SPACE = .sizeof (usedblock) ; Additional space for used bock ; Variables -.global __heaporg -.global __heapptr -.global __heapend -.global __heapfirst -.global __heaplast +.global ___heaporg +.global ___heapptr +.global ___heapend +.global ___heapfirst +.global ___heaplast diff --git a/include/_heap.h b/include/_heap.h index c054cfa34..c51f864ac 100644 --- a/include/_heap.h +++ b/include/_heap.h @@ -37,11 +37,11 @@ struct freeblock { /* Variables that describe the heap */ -extern unsigned* _heaporg; /* Bottom of heap */ -extern unsigned* _heapptr; /* Current top */ -extern unsigned* _heapend; /* Upper limit */ -extern struct freeblock* _heapfirst; /* First free block in list */ -extern struct freeblock* _heaplast; /* Last free block in list */ +extern unsigned* __heaporg; /* Bottom of heap */ +extern unsigned* __heapptr; /* Current top */ +extern unsigned* __heapend; /* Upper limit */ +extern struct freeblock* __heapfirst; /* First free block in list */ +extern struct freeblock* __heaplast; /* Last free block in list */ diff --git a/include/stdlib.h b/include/stdlib.h index 99151317f..53d73bb8d 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -92,17 +92,33 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size); */ #endif -void __fastcall__ _heapadd (void* mem, size_t size); +void __fastcall__ __heapadd (void* mem, size_t size); /* Add a block to the heap */ +#if __CC65_STD__ == __CC65_STD_CC65__ +/* define old name with one underscore for backwards compatibility */ +#define _heapadd __heapadd +#endif -size_t __fastcall__ _heapblocksize (const void* block); +size_t __fastcall__ __heapblocksize (const void* block); /* Return the size of an allocated block */ +#if __CC65_STD__ == __CC65_STD_CC65__ +/* define old name with one underscore for backwards compatibility */ +#define _heapblocksize __heapblocksize +#endif -size_t _heapmemavail (void); +size_t __heapmemavail (void); /* Return the total free heap space */ +#if __CC65_STD__ == __CC65_STD_CC65__ +/* define old name with one underscore for backwards compatibility */ +#define _heapmemavail __heapmemavail +#endif -size_t _heapmaxavail (void); +size_t __heapmaxavail (void); /* Return the size of the largest free block on the heap */ +#if __CC65_STD__ == __CC65_STD_CC65__ +/* define old name with one underscore for backwards compatibility */ +#define _heapmaxavail __heapmaxavail +#endif /* Random numbers */ diff --git a/libsrc/common/_heap.s b/libsrc/common/_heap.s index 4ec8c80cd..eb680fa20 100644 --- a/libsrc/common/_heap.s +++ b/libsrc/common/_heap.s @@ -13,15 +13,15 @@ .data -__heaporg: +___heaporg: .word __BSS_RUN__+__BSS_SIZE__ ; Linker calculates this symbol -__heapptr: +___heapptr: .word __BSS_RUN__+__BSS_SIZE__ ; Dito -__heapend: +___heapend: .word __BSS_RUN__+__BSS_SIZE__ -__heapfirst: +___heapfirst: .word 0 -__heaplast: +___heaplast: .word 0 @@ -33,10 +33,10 @@ initheap: sec lda sp sbc #<__STACKSIZE__ - sta __heapend + sta ___heapend lda sp+1 sbc #>__STACKSIZE__ - sta __heapend+1 + sta ___heapend+1 rts diff --git a/libsrc/common/_heapadd.s b/libsrc/common/_heapadd.s index 14080cb5e..7695a732d 100644 --- a/libsrc/common/_heapadd.s +++ b/libsrc/common/_heapadd.s @@ -10,7 +10,7 @@ .importzp ptr1, ptr2 .import popax .import heapadd - .export __heapadd + .export ___heapadd .include "_heap.inc" @@ -19,7 +19,7 @@ ;----------------------------------------------------------------------------- ; Code -__heapadd: +___heapadd: sta ptr1 ; Store size in ptr1 stx ptr1+1 jsr popax ; Get the block pointer diff --git a/libsrc/common/_heapblocksize.s b/libsrc/common/_heapblocksize.s index db33f594c..e9b0cdad9 100644 --- a/libsrc/common/_heapblocksize.s +++ b/libsrc/common/_heapblocksize.s @@ -7,7 +7,7 @@ ; .importzp ptr1, ptr2 - .export __heapblocksize + .export ___heapblocksize .include "_heap.inc" @@ -17,7 +17,7 @@ ;----------------------------------------------------------------------------- ; Code -__heapblocksize: +___heapblocksize: ; Below the user data is a pointer that points to the start of the real ; (raw) memory block. The first word of this block is the size. To access diff --git a/libsrc/common/_heapmaxavail.s b/libsrc/common/_heapmaxavail.s index 19ae18b8d..b4e72f2d4 100644 --- a/libsrc/common/_heapmaxavail.s +++ b/libsrc/common/_heapmaxavail.s @@ -8,7 +8,7 @@ ; .importzp ptr1, ptr2 - .export __heapmaxavail + .export ___heapmaxavail .include "_heap.inc" @@ -17,22 +17,22 @@ ;----------------------------------------------------------------------------- ; Code -__heapmaxavail: +___heapmaxavail: ; size_t Size = (_heapend - _heapptr) * sizeof (*_heapend); - lda __heapend - sub __heapptr + lda ___heapend + sub ___heapptr sta ptr2 - lda __heapend+1 - sbc __heapptr+1 + lda ___heapend+1 + sbc ___heapptr+1 sta ptr2+1 ; struct freeblock* F = _heapfirst; - lda __heapfirst + lda ___heapfirst sta ptr1 - lda __heapfirst+1 + lda ___heapfirst+1 @L1: sta ptr1+1 ; while (F) { diff --git a/libsrc/common/_heapmemavail.s b/libsrc/common/_heapmemavail.s index 69aa75f8a..14ecc853a 100644 --- a/libsrc/common/_heapmemavail.s +++ b/libsrc/common/_heapmemavail.s @@ -8,7 +8,7 @@ ; .importzp ptr1, ptr2 - .export __heapmemavail + .export ___heapmemavail .include "_heap.inc" @@ -17,7 +17,7 @@ ;----------------------------------------------------------------------------- ; Code -__heapmemavail: +___heapmemavail: ; size_t Size = 0; @@ -27,9 +27,9 @@ __heapmemavail: ; struct freeblock* F = _heapfirst; - lda __heapfirst + lda ___heapfirst sta ptr1 - lda __heapfirst+1 + lda ___heapfirst+1 @L1: sta ptr1+1 ; while (F) { @@ -61,17 +61,17 @@ __heapmemavail: ; return Size + (_heapend - _heapptr) * sizeof (*_heapend); @L2: lda ptr2 - add __heapend + add ___heapend sta ptr2 lda ptr2+1 - adc __heapend+1 + adc ___heapend+1 tax lda ptr2 - sub __heapptr + sub ___heapptr sta ptr2 txa - sbc __heapptr+1 + sbc ___heapptr+1 tax lda ptr2 diff --git a/libsrc/common/free.s b/libsrc/common/free.s index 53796303c..709460ff9 100644 --- a/libsrc/common/free.s +++ b/libsrc/common/free.s @@ -105,27 +105,27 @@ _free: sta ptr2 tay lda ptr2+1 adc ptr1+1 - cpy __heapptr + cpy ___heapptr bne heapadd ; Add to free list - cmp __heapptr+1 + cmp ___heapptr+1 bne heapadd ; The pointer is located at the heap top. Lower the heap top pointer to ; release the block. @L3: lda ptr2 - sta __heapptr + sta ___heapptr lda ptr2+1 - sta __heapptr+1 + sta ___heapptr+1 ; Check if the last block in the freelist is now at heap top. If so, remove ; this block from the freelist. - lda __heaplast + lda ___heaplast sta ptr1 - ora __heaplast+1 + ora ___heaplast+1 beq @L9 ; Jump if free list empty - lda __heaplast+1 + lda ___heaplast+1 sta ptr1+1 ; Pointer to last block now in ptr1 ldy #freeblock::size @@ -136,35 +136,35 @@ _free: sta ptr2 lda (ptr1),y adc ptr1+1 - cmp __heapptr+1 + cmp ___heapptr+1 bne @L9 ; Jump if last block not on top of heap - cpx __heapptr + cpx ___heapptr bne @L9 ; Jump if last block not on top of heap ; Remove the last block lda ptr1 - sta __heapptr + sta ___heapptr lda ptr1+1 - sta __heapptr+1 + sta ___heapptr+1 ; Correct the next pointer of the now last block ldy #freeblock::prev+1 ; Offset of ->prev field lda (ptr1),y sta ptr2+1 ; Remember f->prev in ptr2 - sta __heaplast+1 + sta ___heaplast+1 dey lda (ptr1),y sta ptr2 ; Remember f->prev in ptr2 - sta __heaplast - ora __heaplast+1 ; -> prev == 0? + sta ___heaplast + ora ___heaplast+1 ; -> prev == 0? bne @L8 ; Jump if free list not empty ; Free list is now empty (A = 0) - sta __heapfirst - sta __heapfirst+1 + sta ___heapfirst + sta ___heapfirst+1 ; Done @@ -283,9 +283,9 @@ _free: sta ptr2 ; Check if the free list is empty, storing _hfirst into ptr3 for later heapadd: - lda __heapfirst + lda ___heapfirst sta ptr3 - lda __heapfirst+1 + lda ___heapfirst+1 sta ptr3+1 ora ptr3 bne SearchFreeList @@ -301,10 +301,10 @@ heapadd: lda ptr2 ldx ptr2+1 - sta __heapfirst - stx __heapfirst+1 ; _heapfirst = f; - sta __heaplast - stx __heaplast+1 ; _heaplast = f; + sta ___heapfirst + stx ___heapfirst+1 ; _heapfirst = f; + sta ___heaplast + stx ___heaplast+1 ; _heaplast = f; rts ; Done @@ -351,9 +351,9 @@ SearchFreeList: sta (ptr2),y ; Clear low byte of f->next lda ptr2 ; _heaplast = f; - sta __heaplast + sta ___heaplast lda ptr2+1 - sta __heaplast+1 + sta ___heaplast+1 ; Since we have checked the case that the freelist is empty before, if the ; right pointer is NULL, the left *cannot* be NULL here. So skip the @@ -414,9 +414,9 @@ CheckRightMerge: ; f->next is zero, this is now the last block @L1: lda ptr2 ; _heaplast = f; - sta __heaplast + sta ___heaplast lda ptr2+1 - sta __heaplast+1 + sta ___heaplast+1 jmp CheckLeftMerge ; No right merge, just set the link. @@ -451,9 +451,9 @@ CheckLeftMerge: sta (ptr2),y lda ptr2 ; _heapfirst = f; - sta __heapfirst + sta ___heapfirst lda ptr2+1 - sta __heapfirst+1 + sta ___heapfirst+1 rts ; Done @@ -510,9 +510,9 @@ CheckLeftMerge2: ; This is now the last block, do _heaplast = left @L1: lda ptr4 - sta __heaplast + sta ___heaplast lda ptr4+1 - sta __heaplast+1 + sta ___heaplast+1 rts ; Done ; No merge of the left block, just set the link. Y points to size+1 if diff --git a/libsrc/common/malloc.s b/libsrc/common/malloc.s index 3118e2e56..6872f1f2e 100644 --- a/libsrc/common/malloc.s +++ b/libsrc/common/malloc.s @@ -140,9 +140,9 @@ _malloc: ; Load a pointer to the freelist into ptr2 -@L2: lda __heapfirst +@L2: lda ___heapfirst sta ptr2 - lda __heapfirst+1 + lda ___heapfirst+1 sta ptr2+1 ; Search the freelist for a block that is big enough. We will calculate @@ -173,16 +173,16 @@ _malloc: ; We did not find a block big enough. Try to use new space from the heap top. - lda __heapptr + lda ___heapptr add ptr1 ; _heapptr + size tay - lda __heapptr+1 + lda ___heapptr+1 adc ptr1+1 bcs OutOfHeapSpace ; On overflow, we're surely out of space - cmp __heapend+1 + cmp ___heapend+1 bne @L5 - cpy __heapend + cpy ___heapend @L5: bcc TakeFromTop beq TakeFromTop @@ -196,13 +196,13 @@ Done: rts ; There is enough space left, take it from the heap top TakeFromTop: - ldx __heapptr ; p = _heapptr; + ldx ___heapptr ; p = _heapptr; stx ptr2 - ldx __heapptr+1 + ldx ___heapptr+1 stx ptr2+1 - sty __heapptr ; _heapptr += size; - sta __heapptr+1 + sty ___heapptr ; _heapptr += size; + sta ___heapptr+1 jmp FillSizeAndRet ; Done ; We found a block big enough. If the block can hold just the @@ -245,10 +245,10 @@ BlockFound: ; Do _hfirst = f->next @L1: lda (ptr2),y ; Load high byte of f->next - sta __heapfirst+1 + sta ___heapfirst+1 dey ; Points to next lda (ptr2),y ; Load low byte of f->next - sta __heapfirst + sta ___heapfirst ; Check f->next. Y points always to next if we come here @@ -275,10 +275,10 @@ BlockFound: ; Do _hlast = f->prev @L3: lda (ptr2),y ; Load low byte of f->prev - sta __heaplast + sta ___heaplast iny ; Points to prev+1 lda (ptr2),y ; Load high byte of f->prev - sta __heaplast+1 + sta ___heaplast+1 jmp RetUserPtr ; Done ; We must slice the block found. Cut off space from the upper end, so we diff --git a/libsrc/common/realloc.c b/libsrc/common/realloc.c index c47dbbb98..eeb1eeea5 100644 --- a/libsrc/common/realloc.c +++ b/libsrc/common/realloc.c @@ -74,12 +74,12 @@ void* __fastcall__ realloc (void* block, register size_t size) oldsize = b->size; /* Is the block at the current heap top? */ - if (((unsigned) b) + oldsize == ((unsigned) _heapptr)) { + if (((unsigned) b) + oldsize == ((unsigned) __heapptr)) { /* Check if we've enough memory at the heap top */ - newhptr = ((unsigned) _heapptr) - oldsize + size; - if (newhptr <= ((unsigned) _heapend)) { + newhptr = ((unsigned) __heapptr) - oldsize + size; + if (newhptr <= ((unsigned) __heapend)) { /* Ok, there's space enough */ - _heapptr = (unsigned*) newhptr; + __heapptr = (unsigned*) newhptr; b->size = size; b->start = b; return block; From 145adf61eaf482c290f36ed4df190a4f0de2031b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 29 Aug 2022 20:10:21 +0200 Subject: [PATCH 1802/2710] define old names also for heap stuff --- include/_heap.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/include/_heap.h b/include/_heap.h index c51f864ac..62a7f4bed 100644 --- a/include/_heap.h +++ b/include/_heap.h @@ -43,7 +43,14 @@ extern unsigned* __heapend; /* Upper limit */ extern struct freeblock* __heapfirst; /* First free block in list */ extern struct freeblock* __heaplast; /* Last free block in list */ - +#if __CC65_STD__ == __CC65_STD_CC65__ +/* define old name with one underscore for backwards compatibility */ +#define _heaporg __heaporg +#define _heapptr __heapptr +#define _heapend __heapend +#define _heapfirst __heapfirst +#define _heaplast __heaplast +#endif /* End of _heap.h */ From 89c08dc6d438d8fa304b887533589f89595b4542 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 29 Aug 2022 20:52:35 +0200 Subject: [PATCH 1803/2710] extra underscores for _randomize and _swap --- include/stdlib.h | 12 ++++++++++-- include/string.h | 6 +++++- libsrc/apple2/randomize.s | 6 +++--- libsrc/atari/randomize.s | 6 +++--- libsrc/atari5200/randomize.s | 6 +++--- libsrc/c128/randomize.s | 6 +++--- libsrc/c16/randomize.s | 6 +++--- libsrc/c64/randomize.s | 6 +++--- libsrc/cbm510/randomize.s | 6 +++--- libsrc/cbm610/randomize.s | 6 +++--- libsrc/common/_swap.s | 6 +++--- libsrc/common/qsort.c | 4 ++-- libsrc/cx16/randomize.s | 6 +++--- libsrc/geos-common/system/randomize.s | 6 +++--- libsrc/nes/randomize.s | 6 +++--- libsrc/pet/randomize.s | 6 +++--- libsrc/plus4/randomize.s | 6 +++--- libsrc/vic20/randomize.s | 6 +++--- 18 files changed, 62 insertions(+), 50 deletions(-) diff --git a/include/stdlib.h b/include/stdlib.h index 53d73bb8d..4e7ffbd6a 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -125,7 +125,11 @@ size_t __heapmaxavail (void); #define RAND_MAX 0x7FFF int rand (void); void __fastcall__ srand (unsigned seed); -void _randomize (void); /* Non-standard */ +void __randomize (void); /* Non-standard */ +#if __CC65_STD__ == __CC65_STD_CC65__ +/* define old name with one underscore for backwards compatibility */ +#define _randomize __randomize +#endif /* Other standard stuff */ void abort (void) __attribute__ ((noreturn)); @@ -146,7 +150,11 @@ unsigned long __fastcall__ strtoul (const char* nptr, char** endptr, int base); int __fastcall__ system (const char* s); /* Non-ANSI functions */ -void __fastcall__ _swap (void* p, void* q, size_t size); +void __fastcall__ __swap (void* p, void* q, size_t size); +#if __CC65_STD__ == __CC65_STD_CC65__ +/* define old name with one underscore for backwards compatibility */ +#define _swap __swap +#endif #if __CC65_STD__ == __CC65_STD_CC65__ char* __fastcall__ itoa (int val, char* buf, int radix); char* __fastcall__ utoa (unsigned val, char* buf, int radix); diff --git a/include/string.h b/include/string.h index 1bd83b385..bda960173 100644 --- a/include/string.h +++ b/include/string.h @@ -92,8 +92,12 @@ char* __fastcall__ strupper (char* s); char* __fastcall__ strqtok (char* s1, const char* s2); #endif -const char* __fastcall__ _stroserror (unsigned char errcode); +const char* __fastcall__ __stroserror (unsigned char errcode); /* Map an operating system error number to an error message. */ +#if __CC65_STD__ == __CC65_STD_CC65__ +/* define old name with one underscore for backwards compatibility */ +#define _stroserror __stroserror +#endif /* End of string.h */ diff --git a/libsrc/apple2/randomize.s b/libsrc/apple2/randomize.s index 1558d85a7..e9cd063b8 100644 --- a/libsrc/apple2/randomize.s +++ b/libsrc/apple2/randomize.s @@ -1,16 +1,16 @@ ; ; Ullrich von Bassewitz, 07.11.2002 ; -; void _randomize (void); +; void __randomize (void); ; /* Initialize the random number generator */ ; - .export __randomize + .export ___randomize .import _srand .include "apple2.inc" -__randomize: +___randomize: ldx RNDH ; Use random value supplied by ROM lda RNDL jmp _srand ; Initialize generator diff --git a/libsrc/atari/randomize.s b/libsrc/atari/randomize.s index 915fee3bd..d004a7c19 100644 --- a/libsrc/atari/randomize.s +++ b/libsrc/atari/randomize.s @@ -1,16 +1,16 @@ ; ; Christian Groessler, 06.11.2002 ; -; void _randomize (void); +; void __randomize (void); ; /* Initialize the random number generator */ ; - .export __randomize + .export ___randomize .import _srand .include "atari.inc" -__randomize: +___randomize: ldx VCOUNT ; Use vertical line counter as high byte lda RTCLOK+2 ; Use clock as low byte jmp _srand ; Initialize generator diff --git a/libsrc/atari5200/randomize.s b/libsrc/atari5200/randomize.s index 978ccf3f3..5c554b5f8 100644 --- a/libsrc/atari5200/randomize.s +++ b/libsrc/atari5200/randomize.s @@ -1,16 +1,16 @@ ; ; Christian Groessler, 01-Mar-2014 ; -; void _randomize (void); +; void __randomize (void); ; /* Initialize the random number generator */ ; - .export __randomize + .export ___randomize .import _srand .include "atari5200.inc" -__randomize: +___randomize: ldx VCOUNT ; Use vertical line counter as high byte lda RTCLOK+1 ; Use clock as low byte jmp _srand ; Initialize generator diff --git a/libsrc/c128/randomize.s b/libsrc/c128/randomize.s index ae63184a4..2b7754e86 100644 --- a/libsrc/c128/randomize.s +++ b/libsrc/c128/randomize.s @@ -2,16 +2,16 @@ ; 2002-11-05, Ullrich von Bassewitz ; 2015-09-11, Greg King ; -; void _randomize (void); +; void __randomize (void); ; /* Initialize the random number generator */ ; - .export __randomize + .export ___randomize .import _srand .include "c128.inc" -__randomize: +___randomize: ldx VIC_HLINE ; Use VIC rasterline as high byte lda TIME+2 ; Use 60HZ clock as low byte jmp _srand ; Initialize generator diff --git a/libsrc/c16/randomize.s b/libsrc/c16/randomize.s index 796ad118b..0d1ccaf03 100644 --- a/libsrc/c16/randomize.s +++ b/libsrc/c16/randomize.s @@ -2,16 +2,16 @@ ; 2002-11-05, Ullrich von Bassewitz ; 2015-09-11, Greg King ; -; void _randomize (void); +; void __randomize (void); ; /* Initialize the random number generator */ ; - .export __randomize + .export ___randomize .import _srand .include "plus4.inc" -__randomize: +___randomize: ldx TED_VLINELO ; Use TED rasterline as high byte lda TIME+2 ; Use 60HZ clock as low byte jmp _srand ; Initialize generator diff --git a/libsrc/c64/randomize.s b/libsrc/c64/randomize.s index a875203af..da32dfc28 100644 --- a/libsrc/c64/randomize.s +++ b/libsrc/c64/randomize.s @@ -2,16 +2,16 @@ ; 2002-11-05, Ullrich von Bassewitz ; 2015-09-11, Greg King ; -; void _randomize (void); +; void __randomize (void); ; /* Initialize the random number generator */ ; - .export __randomize + .export ___randomize .import _srand .include "c64.inc" -__randomize: +___randomize: ldx VIC_HLINE ; Use VIC rasterline as high byte lda TIME+2 ; Use 60HZ clock as low byte jmp _srand ; Initialize generator diff --git a/libsrc/cbm510/randomize.s b/libsrc/cbm510/randomize.s index 75c419ccb..8d21cde15 100644 --- a/libsrc/cbm510/randomize.s +++ b/libsrc/cbm510/randomize.s @@ -2,15 +2,15 @@ ; 2002-11-05, Ullrich von Bassewitz ; 2015-09-11, Greg King ; -; void _randomize (void); +; void __randomize (void); ; /* Initialize the random number generator */ ; - .export __randomize + .export ___randomize .import _srand .importzp time -__randomize: +___randomize: ldx time+2 ; Use 50/60HZ clock lda time+1 jmp _srand ; Initialize generator diff --git a/libsrc/cbm610/randomize.s b/libsrc/cbm610/randomize.s index 75c419ccb..8d21cde15 100644 --- a/libsrc/cbm610/randomize.s +++ b/libsrc/cbm610/randomize.s @@ -2,15 +2,15 @@ ; 2002-11-05, Ullrich von Bassewitz ; 2015-09-11, Greg King ; -; void _randomize (void); +; void __randomize (void); ; /* Initialize the random number generator */ ; - .export __randomize + .export ___randomize .import _srand .importzp time -__randomize: +___randomize: ldx time+2 ; Use 50/60HZ clock lda time+1 jmp _srand ; Initialize generator diff --git a/libsrc/common/_swap.s b/libsrc/common/_swap.s index 9ad771de1..ba3e5922d 100644 --- a/libsrc/common/_swap.s +++ b/libsrc/common/_swap.s @@ -1,15 +1,15 @@ ; ; Ullrich von Bassewitz, 1998-12-09, 2004-11-30 ; -; void __fastcall__ _swap (void* p, void* q, size_t size); +; void __fastcall__ __swap (void* p, void* q, size_t size); ; - .export __swap + .export ___swap .import popax, popptr1 .importzp ptr1, ptr2, ptr3 -__swap: eor #$FF +___swap: eor #$FF sta ptr3 txa eor #$FF diff --git a/libsrc/common/qsort.c b/libsrc/common/qsort.c index 991db3ba1..913165814 100644 --- a/libsrc/common/qsort.c +++ b/libsrc/common/qsort.c @@ -32,13 +32,13 @@ static void QuickSort (register unsigned char* Base, int Lo, int Hi, J -= Size; } if (I <= J) { - _swap (Base + I, Base + J, Size); + __swap (Base + I, Base + J, Size); I += Size; J -= Size; } } if (J != Lo) { - _swap (Base + J, Base + Lo, Size); + __swap (Base + J, Base + Lo, Size); } if (((unsigned) J) * 2 > (Hi + Lo)) { QuickSort (Base, J + Size, Hi, Size, Compare); diff --git a/libsrc/cx16/randomize.s b/libsrc/cx16/randomize.s index 3d965c82a..49051e012 100644 --- a/libsrc/cx16/randomize.s +++ b/libsrc/cx16/randomize.s @@ -1,14 +1,14 @@ ; ; 2020-05-02, Greg King ; -; void _randomize (void); +; void __randomize (void); ; /* Initialize the random number generator */ ; - .export __randomize + .export ___randomize .import ENTROPY_GET, _srand -__randomize: +___randomize: jsr ENTROPY_GET jmp _srand ; Initialize generator diff --git a/libsrc/geos-common/system/randomize.s b/libsrc/geos-common/system/randomize.s index 67c217d80..d8f821356 100644 --- a/libsrc/geos-common/system/randomize.s +++ b/libsrc/geos-common/system/randomize.s @@ -1,16 +1,16 @@ ; ; Ullrich von Bassewitz, 05.11.2002 ; -; void _randomize (void); +; void __randomize (void); ; /* Initialize the random number generator */ ; - .export __randomize + .export ___randomize .import _srand .include "geossym.inc" -__randomize: +___randomize: lda random ; get random value from internal generator ldx random+1 jmp _srand ; and use it as seed diff --git a/libsrc/nes/randomize.s b/libsrc/nes/randomize.s index 8df4fb88a..a146fef1b 100644 --- a/libsrc/nes/randomize.s +++ b/libsrc/nes/randomize.s @@ -1,16 +1,16 @@ ; ; Ullrich von Bassewitz, 2003-05-02 ; -; void _randomize (void); +; void __randomize (void); ; /* Initialize the random number generator */ ; - .export __randomize + .export ___randomize .import _srand .include "nes.inc" -__randomize: +___randomize: ldx tickcount ; Use tick clock lda tickcount+1 jmp _srand ; Initialize generator diff --git a/libsrc/pet/randomize.s b/libsrc/pet/randomize.s index 44bf4c38e..a173cf076 100644 --- a/libsrc/pet/randomize.s +++ b/libsrc/pet/randomize.s @@ -2,16 +2,16 @@ ; 2002-11-05, Ullrich von Bassewitz ; 2015-09-11, Greg King ; -; void _randomize (void); +; void __randomize (void); ; /* Initialize the random number generator */ ; - .export __randomize + .export ___randomize .import _srand .include "pet.inc" -__randomize: +___randomize: ldx TIME+2 lda TIME+1 ; Use 60HZ clock jmp _srand ; Initialize generator diff --git a/libsrc/plus4/randomize.s b/libsrc/plus4/randomize.s index 796ad118b..0d1ccaf03 100644 --- a/libsrc/plus4/randomize.s +++ b/libsrc/plus4/randomize.s @@ -2,16 +2,16 @@ ; 2002-11-05, Ullrich von Bassewitz ; 2015-09-11, Greg King ; -; void _randomize (void); +; void __randomize (void); ; /* Initialize the random number generator */ ; - .export __randomize + .export ___randomize .import _srand .include "plus4.inc" -__randomize: +___randomize: ldx TED_VLINELO ; Use TED rasterline as high byte lda TIME+2 ; Use 60HZ clock as low byte jmp _srand ; Initialize generator diff --git a/libsrc/vic20/randomize.s b/libsrc/vic20/randomize.s index 69cf07bb3..ac2c09a7d 100644 --- a/libsrc/vic20/randomize.s +++ b/libsrc/vic20/randomize.s @@ -2,16 +2,16 @@ ; 2002-11-05, Ullrich von Bassewitz ; 2015-09-11, Greg King ; -; void _randomize (void); +; void __randomize (void); ; /* Initialize the random number generator */ ; - .export __randomize + .export ___randomize .import _srand .include "vic20.inc" -__randomize: +___randomize: lda VIC_LINES ; Get overflow bit asl a ; Shift bit 7 into carry lda VIC_HLINE ; Get bit 1-8 of rasterline From 3b03a963754d0edb7782d3ca30bbab3e9322a09c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 29 Aug 2022 21:06:48 +0200 Subject: [PATCH 1804/2710] add underscores to _poserror and _stroserror --- include/stdio.h | 6 +++++- libsrc/common/_poserror.c | 4 ++-- libsrc/common/stroserr.s | 6 +++--- libsrc/geos-common/common/_poserror.c | 4 ++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/include/stdio.h b/include/stdio.h index 84a991a98..858dd5059 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -147,7 +147,11 @@ int __fastcall__ vfscanf (FILE* f, const char* format, __va_list ap); FILE* __fastcall__ fdopen (int fd, const char* mode); /* Unix */ int __fastcall__ fileno (FILE* f); /* Unix */ #endif -void __fastcall__ _poserror (const char* msg); /* cc65 */ +void __fastcall__ __poserror (const char* msg); /* cc65 */ +#if __CC65_STD__ == __CC65_STD_CC65__ +/* define old name with one underscore for backwards compatibility */ +#define _poserror __poserror +#endif /* Masking macros for some functions */ #define getc(f) fgetc (f) /* ANSI */ diff --git a/libsrc/common/_poserror.c b/libsrc/common/_poserror.c index 2777fee98..a2a67dd3e 100644 --- a/libsrc/common/_poserror.c +++ b/libsrc/common/_poserror.c @@ -39,10 +39,10 @@ -void __fastcall__ _poserror (const char* msg) +void __fastcall__ __poserror (const char* msg) { /* Fetch the message that corresponds to _oserror */ - const char* errormsg = _stroserror (_oserror); + const char* errormsg = __stroserror (_oserror); /* Different output depending on msg */ if (msg) { diff --git a/libsrc/common/stroserr.s b/libsrc/common/stroserr.s index 25ca30daf..ae8e117f1 100644 --- a/libsrc/common/stroserr.s +++ b/libsrc/common/stroserr.s @@ -1,11 +1,11 @@ ; ; Ullrich von Bassewitz, 17.07.2002 ; -; const char* __fastcall__ _stroserror (unsigned char errcode); +; const char* __fastcall__ __stroserror (unsigned char errcode); ; /* Map an operating system error number to an error message. */ ; - .export __stroserror + .export ___stroserror .import __sys_oserrlist .importzp ptr1, tmp1 @@ -21,7 +21,7 @@ ; and terminated by an entry with length zero that is returned if the ; error code could not be found. -__stroserror: +___stroserror: sta tmp1 ; Save the error code ldy #<__sys_oserrlist diff --git a/libsrc/geos-common/common/_poserror.c b/libsrc/geos-common/common/_poserror.c index eeb3f368e..b47f0a7d9 100644 --- a/libsrc/geos-common/common/_poserror.c +++ b/libsrc/geos-common/common/_poserror.c @@ -9,9 +9,9 @@ #include <errno.h> #include <geos.h> -void __fastcall__ _poserror (const char* msg) +void __fastcall__ __poserror (const char* msg) { - const char *errmsg = _stroserror(_oserror); + const char *errmsg = __stroserror(_oserror); ExitTurbo(); if (msg && *msg) { From 5bda57de87da864e17bce5e5aec79c79420cff9d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 29 Aug 2022 23:20:48 +0200 Subject: [PATCH 1805/2710] add extra underscore to _bzero, add a test for bzero/memset --- include/string.h | 2 +- libsrc/atari7800/clrscr.s | 4 +-- libsrc/atari7800/mono_clrscr.s | 4 +-- libsrc/common/calloc.s | 4 +-- libsrc/common/memset.s | 12 +++---- libsrc/geos-common/common/memset.s | 6 ++-- libsrc/pce/memset.s | 10 +++--- src/cc65/coptstop.c | 2 +- src/cc65/stdfunc.c | 2 +- src/cc65/stdnames.c | 12 +++---- src/cc65/stdnames.h | 12 +++---- test/val/bzero.c | 51 ++++++++++++++++++++++++++++++ 12 files changed, 86 insertions(+), 35 deletions(-) create mode 100644 test/val/bzero.c diff --git a/include/string.h b/include/string.h index bda960173..854359dad 100644 --- a/include/string.h +++ b/include/string.h @@ -74,7 +74,7 @@ void* __fastcall__ memset (void* s, int c, size_t count); /* The following is an internal function, the compiler will replace memset ** with it if the fill value is zero. Never use this one directly! */ -void* __fastcall__ _bzero (void* ptr, size_t n); +void* __fastcall__ __bzero (void* ptr, size_t n); /* Non standard: */ #if __CC65_STD__ == __CC65_STD_CC65__ diff --git a/libsrc/atari7800/clrscr.s b/libsrc/atari7800/clrscr.s index f9d4938b0..a1f663ba7 100644 --- a/libsrc/atari7800/clrscr.s +++ b/libsrc/atari7800/clrscr.s @@ -4,7 +4,7 @@ .export _clrscr .import _screen - .import pushax, __bzero + .import pushax, ___bzero .include "extzp.inc" .code @@ -16,7 +16,7 @@ jsr pushax ldx #>(charsperline * screenrows) lda #<(charsperline * screenrows) - jmp __bzero + jmp ___bzero .endproc diff --git a/libsrc/atari7800/mono_clrscr.s b/libsrc/atari7800/mono_clrscr.s index 19f1fdfd6..f6f6735cb 100644 --- a/libsrc/atari7800/mono_clrscr.s +++ b/libsrc/atari7800/mono_clrscr.s @@ -4,7 +4,7 @@ .export _mono_clrscr .import _mono_screen - .import pushax, __bzero + .import pushax, ___bzero .include "extzp.inc" .code @@ -16,7 +16,7 @@ jsr pushax ldx #>(mono_charsperline * screenrows) lda #<(mono_charsperline * screenrows) - jmp __bzero + jmp ___bzero .endproc diff --git a/libsrc/common/calloc.s b/libsrc/common/calloc.s index 6e3e1bd3f..4cb701146 100644 --- a/libsrc/common/calloc.s +++ b/libsrc/common/calloc.s @@ -7,7 +7,7 @@ ; .export _calloc - .import _malloc, __bzero + .import _malloc, ___bzero .import tosumulax, pushax @@ -48,7 +48,7 @@ ClearBlock: jsr pushax ; ptr lda Size ldx Size+1 ; Size - jmp __bzero + jmp ___bzero .endproc diff --git a/libsrc/common/memset.s b/libsrc/common/memset.s index a57a90e5c..be78fc30d 100644 --- a/libsrc/common/memset.s +++ b/libsrc/common/memset.s @@ -1,6 +1,6 @@ ; ; void* __fastcall__ memset (void* ptr, int c, size_t n); -; void* __fastcall__ _bzero (void* ptr, size_t n); +; void* __fastcall__ __bzero (void* ptr, size_t n); ; void __fastcall__ bzero (void* ptr, size_t n); ; ; Ullrich von Bassewitz, 29.05.1998 @@ -8,19 +8,19 @@ ; Christian Krueger, 12.09.2009, slightly improved 12.01.2011 ; ; NOTE: bzero will return it's first argument as memset does. It is no problem -; to declare the return value as void, since it may be ignored. _bzero -; (note the leading underscore) is declared with the proper return type, -; because the compiler will replace memset by _bzero if the fill value +; to declare the return value as void, since it may be ignored. __bzero +; (note the leading underscores) is declared with the proper return type, +; because the compiler will replace memset by __bzero if the fill value ; is zero, and the optimizer looks at the return type to see if the value ; in a/x is of any use. ; - .export _memset, _bzero, __bzero + .export _memset, _bzero, ___bzero .import popax .importzp sp, ptr1, ptr2, ptr3 _bzero: -__bzero: +___bzero: sta ptr3 stx ptr3+1 ; Save n ldx #0 ; Fill with zeros diff --git a/libsrc/geos-common/common/memset.s b/libsrc/geos-common/common/memset.s index 2cb6732d1..82b7f4a87 100644 --- a/libsrc/geos-common/common/memset.s +++ b/libsrc/geos-common/common/memset.s @@ -1,14 +1,14 @@ ; ; void* memset (void* ptr, int c, size_t n); -; void* _bzero (void* ptr, size_t n); +; void* __bzero (void* ptr, size_t n); ; void bzero (void* ptr, size_t n); ; ; Maciej 'YTM/Elysium' Witkowiak, 20.08.2003 ; - .export _memset, _bzero, __bzero + .export _memset, _bzero, ___bzero .import _ClearRam, _FillRam _bzero = _ClearRam -__bzero = _ClearRam +___bzero = _ClearRam _memset = _FillRam diff --git a/libsrc/pce/memset.s b/libsrc/pce/memset.s index 45a78d533..1148e00c8 100644 --- a/libsrc/pce/memset.s +++ b/libsrc/pce/memset.s @@ -6,21 +6,21 @@ ; 1998-05-29, Ullrich von Bassewitz ; 2015-11-06, Greg King ; -; void* __fastcall__ _bzero (void* ptr, size_t n); +; void* __fastcall__ __bzero (void* ptr, size_t n); ; void __fastcall__ bzero (void* ptr, size_t n); ; void* __fastcall__ memset (void* ptr, int c, size_t n); ; ; NOTE: bzero() will return its first argument, as memset() does. It is no ; problem to declare the return value as void, because it can be ignored. -; _bzero() (note the leading underscore) is declared with the proper -; return type because the compiler will replace memset() by _bzero() if +; __bzero() (note the leading underscores) is declared with the proper +; return type because the compiler will replace memset() by __bzero() if ; the fill value is zero; and, the optimizer looks at the return type ; to see if the value in .XA is of any use. ; ; NOTE: This function uses entry points from "pce/memcpy.s"! ; - .export __bzero, _bzero, _memset + .export ___bzero, _bzero, _memset .import memcpy_getparams, memcpy_increment .import pushax, popax @@ -30,7 +30,7 @@ ; ---------------------------------------------------------------------- -__bzero: +___bzero: _bzero: pha cla ; fill with zeros jsr pushax ; (high byte isn't important) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 08f6c820e..4d0151c55 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -1329,7 +1329,7 @@ static unsigned Opt_a_tosult (StackOpData* D) /* The first column of these two tables must be sorted in lexical order */ static const OptFuncDesc FuncTable[] = { - { "__bzero", Opt___bzero, REG_NONE, OP_X_ZERO | OP_A_KNOWN }, + { "___bzero", Opt___bzero, REG_NONE, OP_X_ZERO | OP_A_KNOWN }, { "staspidx", Opt_staspidx, REG_NONE, OP_NONE }, { "staxspidx", Opt_staxspidx, REG_AX, OP_NONE }, { "tosaddax", Opt_tosaddax, REG_NONE, OP_NONE }, diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index 5ed5ce671..fc19ce7f0 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -604,7 +604,7 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr) DoDeferred (SQP_KEEP_EAX, &Arg3.Expr); /* Emit the actual function call. This will also cleanup the stack. */ - g_call (CF_FIXARGC, MemSet? Func_memset : Func__bzero, ParamSize); + g_call (CF_FIXARGC, MemSet? Func_memset : Func___bzero, ParamSize); if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal == 0) { diff --git a/src/cc65/stdnames.c b/src/cc65/stdnames.c index 687b53894..cdecd61a1 100644 --- a/src/cc65/stdnames.c +++ b/src/cc65/stdnames.c @@ -44,9 +44,9 @@ -const char Func__bzero[] = "_bzero"; /* Asm name of "_bzero" */ -const char Func_memcpy[] = "memcpy"; /* Asm name of "memcpy" */ -const char Func_memset[] = "memset"; /* Asm name of "memset" */ -const char Func_strcmp[] = "strcmp"; /* Asm name of "strcmp" */ -const char Func_strcpy[] = "strcpy"; /* Asm name of "strcpy" */ -const char Func_strlen[] = "strlen"; /* Asm name of "strlen" */ +const char Func___bzero[] = "__bzero"; /* C name of "__bzero" */ +const char Func_memcpy[] = "memcpy"; /* C name of "memcpy" */ +const char Func_memset[] = "memset"; /* C name of "memset" */ +const char Func_strcmp[] = "strcmp"; /* C name of "strcmp" */ +const char Func_strcpy[] = "strcpy"; /* C name of "strcpy" */ +const char Func_strlen[] = "strlen"; /* C name of "strlen" */ diff --git a/src/cc65/stdnames.h b/src/cc65/stdnames.h index dcb323924..e6497e4c3 100644 --- a/src/cc65/stdnames.h +++ b/src/cc65/stdnames.h @@ -44,12 +44,12 @@ -extern const char Func__bzero[]; /* Asm name of "_bzero" */ -extern const char Func_memcpy[]; /* Asm name of "memcpy" */ -extern const char Func_memset[]; /* Asm name of "memset" */ -extern const char Func_strcmp[]; /* Asm name of "strcmp" */ -extern const char Func_strcpy[]; /* Asm name of "strcpy" */ -extern const char Func_strlen[]; /* Asm name of "strlen" */ +extern const char Func___bzero[]; /* C name of "__bzero" */ +extern const char Func_memcpy[]; /* C name of "memcpy" */ +extern const char Func_memset[]; /* C name of "memset" */ +extern const char Func_strcmp[]; /* C name of "strcmp" */ +extern const char Func_strcpy[]; /* C name of "strcpy" */ +extern const char Func_strlen[]; /* C name of "strlen" */ diff --git a/test/val/bzero.c b/test/val/bzero.c new file mode 100644 index 000000000..4e7ed6ac1 --- /dev/null +++ b/test/val/bzero.c @@ -0,0 +1,51 @@ + +// test if memset and bzero work as expected after optimizations + +#include <string.h> + +char s1[10] = { 1,2,3,4,5,6,7,8,9,10 }; +char r1[10] = { 0,0,0,0,0,6,7,8,9,10 }; + +char s2[10] = { 1,2,3,4,5,6,7,8,9,10 }; +char r2[10] = { 0,0,0,0,0,0,7,8,9,10 }; + +char s3[10] = { 1,2,3,4,5,6,7,8,9,10 }; +char r3[10] = { 0,0,0,0,0,0,0,8,9,10 }; + +char *p1, *p2, *p3; + +int res = 0; + +int main(void) +{ + /* regular bzero */ + bzero(s1, 5); + p1 = __AX__; /* this works because bzero jumps into memset */ + /* this gets converted to __bzero */ + p2 = memset(s2, 0, 6); + /* call internal __bzero (we should not do this in real code) */ + p3 = __bzero(s3, 7); + + /* check the results */ + if (memcmp(s1, r1, 10) != 0) { + res++; + } + if (memcmp(s2, r2, 10) != 0) { + res++; + } + if (memcmp(s3, r3, 10) != 0) { + res++; + } + + if (p1 != s1) { + res++; + } + if (p2 != s2) { + res++; + } + if (p3 != s3) { + res++; + } + + return res; +} From dc001cb4beeecff1e5d7bbef0852cc56d213a7a4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 1 Sep 2022 12:56:46 +0800 Subject: [PATCH 1806/2710] Reverted E_ADDRESS_OF logic fix. Added testcase. --- src/cc65/exprdesc.c | 5 +-- src/cc65/exprdesc.h | 3 +- src/cc65/loadexpr.c | 1 - test/val/bug1847-struct-field-access.c | 46 ++++++++++++++++++++++++++ 4 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 test/val/bug1847-struct-field-access.c diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index 7d0ace004..3d7b7c384 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -93,7 +93,8 @@ int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr) int ED_IsIndExpr (const ExprDesc* Expr) /* Check if the expression is a reference to its value */ { - return (Expr->Flags & E_ADDRESS_OF) == 0 && !ED_IsLocNone (Expr); + return (Expr->Flags & E_ADDRESS_OF) == 0 && + !ED_IsLocNone (Expr) && !ED_IsLocPrimary (Expr); } #endif @@ -281,7 +282,7 @@ ExprDesc* ED_AddrExpr (ExprDesc* Expr) case E_LOC_EXPR: Expr->Flags &= ~(E_MASK_LOC | E_MASK_RTYPE); - Expr->Flags |= E_ADDRESS_OF | E_LOC_PRIMARY | E_RTYPE_RVAL; + Expr->Flags |= E_LOC_PRIMARY | E_RTYPE_RVAL; break; default: diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index a1674a7cc..f1f121cc4 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -507,7 +507,8 @@ INLINE int ED_IsAddrExpr (const ExprDesc* Expr) INLINE int ED_IsIndExpr (const ExprDesc* Expr) /* Check if the expression is a reference to its value */ { - return (Expr->Flags & E_ADDRESS_OF) == 0 && !ED_IsLocNone (Expr); + return (Expr->Flags & E_ADDRESS_OF) == 0 && + !ED_IsLocNone (Expr) && !ED_IsLocPrimary (Expr); } #else int ED_IsIndExpr (const ExprDesc* Expr); diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index 0b75e0a9c..ccd694e35 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -92,7 +92,6 @@ static void LoadAddress (unsigned Flags, ExprDesc* Expr) g_leasp (Expr->IVal); break; - case E_LOC_PRIMARY: case E_LOC_EXPR: if (Expr->IVal != 0) { /* We have an expression in the primary plus a constant diff --git a/test/val/bug1847-struct-field-access.c b/test/val/bug1847-struct-field-access.c new file mode 100644 index 000000000..50ae32332 --- /dev/null +++ b/test/val/bug1847-struct-field-access.c @@ -0,0 +1,46 @@ +/* Bug #1847 - struct field access */ + +#include <stdio.h> + +struct TestStruct { + char a; + char b; + char c; +}; + +struct TestStruct s0[2] = { {0xFF, 0, 0xFF}, {0, 0x42, 0xFF} }; +struct TestStruct* s0Ptr = s0; + +#define TEST_READ_SUB(X, E) \ + if ((X) != (E)) { \ + printf(#X ": 0x%X, expected: 0x%X\n", (X), (E)); \ + ++failures; \ + } + +#define TEST_READ(S, I, F, E) \ + TEST_READ_SUB(S[I].F, E) \ + TEST_READ_SUB((&S[I])->F, E) \ + TEST_READ_SUB((&S[I])[0].F, E) \ + TEST_READ_SUB(S##Ptr[I].F, E) \ + TEST_READ_SUB((&S##Ptr[I])->F, E) \ + TEST_READ_SUB((&(S##Ptr[I]))[0].F, E) \ + TEST_READ_SUB((&(*S##Ptr))[I].F, E) \ + TEST_READ_SUB((&(*S##Ptr)+I)->F, E) \ + TEST_READ_SUB((S##Ptr+I)->F, E) \ + TEST_READ_SUB((S##Ptr+I)[0].F, E) + +static unsigned failures = 0; + +int main(void) { + struct TestStruct s1[2] = { {0xFF, 0, 0xFF}, {0, 42, 0xFF} }; + struct TestStruct* s1Ptr = s1; + + TEST_READ(s0, 1, b, 0x42) + TEST_READ(s1, 1, b, 42) + + if (failures > 0) { + printf("Failures: %u\n", failures); + } + + return 0; +} From 942ee47d05479ab8077ed9397ade66ff1037df7c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 1 Sep 2022 12:58:52 +0800 Subject: [PATCH 1807/2710] Changed supposed usage of the original line input stack. It is now used for reusing input lines. --- src/cc65/input.c | 94 +++++++++++++++++++++++++++--------------------- src/cc65/input.h | 3 ++ 2 files changed, 57 insertions(+), 40 deletions(-) diff --git a/src/cc65/input.c b/src/cc65/input.c index 5754b1054..8c8007504 100644 --- a/src/cc65/input.c +++ b/src/cc65/input.c @@ -67,6 +67,9 @@ /* The current input line */ StrBuf* Line; +/* The input line to reuse as the next line */ +static StrBuf* CurReusedLine; + /* Current and next input character */ char CurC = '\0'; char NextC = '\0'; @@ -403,24 +406,6 @@ static void GetInputChar (void) /* NextC is '\0' by default */ NextC = '\0'; - /* Drop all pushed fragments that don't have data left */ - if (CurrentInputStack != 0) { - while (SB_GetIndex (Line) >= SB_GetLen (Line)) { - /* Cannot read more from this line, check next line on stack if any */ - if (CollCount (CurrentInputStack) == 0) { - /* This is THE line */ - break; - } - FreeStrBuf (Line); - Line = CollPop (CurrentInputStack); - } - - /* NextC comes from next fragment */ - if (CollCount (CurrentInputStack) > 0) { - NextC = ' '; - } - } - /* Get CurC from the line */ CurC = SB_LookAt (Line, SB_GetIndex (Line)); } @@ -461,13 +446,17 @@ void PushLine (StrBuf* L) /* Save the current input line and use a new one */ { PRECONDITION (CurrentInputStack != 0); - if (SB_GetIndex (L) < SB_GetLen (L)) { - CollAppend (CurrentInputStack, Line); - Line = L; - GetInputChar (); - } else { - FreeStrBuf (L); - } + CollAppend (CurrentInputStack, Line); + Line = L; + GetInputChar (); +} + + + +void ReuseInputLine (void) +/* Save and reuse the current line as the next line */ +{ + CurReusedLine = Line; } @@ -475,16 +464,6 @@ void PushLine (StrBuf* L) void ClearLine (void) /* Clear the current input line */ { - if (CurrentInputStack != 0) { - unsigned I; - - /* Remove all pushed fragments from the input stack */ - for (I = 0; I < CollCount (CurrentInputStack); ++I) { - FreeStrBuf (Line); - Line = CollPop (CurrentInputStack); - } - } - /* Clear the contents of Line */ SB_Clear (Line); CurC = '\0'; @@ -515,12 +494,47 @@ int NextLine (void) int C; AFile* Input; - /* Clear the current line */ - ClearLine (); - SB_Clear (Line); + /* Overwrite the next input line with the pushed line if there is one */ + if (CurReusedLine != 0) { + /* Use data move to resolve the issue that Line may be impersistent */ + if (Line != CurReusedLine) { + SB_Move (Line, CurReusedLine); + } + /* Continue with this Line */ + InitLine (Line); + CurReusedLine = 0; - /* Must have an input file when called */ - if (CollCount(&AFiles) == 0) { + return 1; + } + + /* If there are pushed input lines, read from them */ + if (CurrentInputStack != 0 && CollCount (CurrentInputStack) > 0) { + /* Drop all pushed fragments that have no data left until one can be + ** used as input. + */ + do { + /* Use data move to resolve the issue that Line may be impersistent */ + if (Line != CollLast (CurrentInputStack)) { + SB_Move (Line, CollPop (CurrentInputStack)); + } else { + CollPop (CurrentInputStack); + } + } while (CollCount (CurrentInputStack) > 0 && + SB_GetIndex (Line) >= SB_GetLen (Line)); + + if (SB_GetIndex (Line) < SB_GetLen (Line)) { + InitLine (Line); + + /* Successive */ + return 1; + } + } + + /* Otherwise, clear the current line */ + ClearLine (); + + /* Must have an input file when going on */ + if (CollCount (&AFiles) == 0) { return 0; } diff --git a/src/cc65/input.h b/src/cc65/input.h index f9565229b..cd73c80b6 100644 --- a/src/cc65/input.h +++ b/src/cc65/input.h @@ -105,6 +105,9 @@ Collection* UseInputStack (Collection* InputStack); void PushLine (StrBuf* L); /* Save the current input line and use a new one */ +void ReuseInputLine (void); +/* Save and reuse the current line as the next line */ + void ClearLine (void); /* Clear the current input line */ From 3d1e322519137968c5c1e6bc5881fc7215dfffbd Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 1 Sep 2022 12:58:52 +0800 Subject: [PATCH 1808/2710] Fixed keeping spacing in certain rare cases. --- src/cc65/preproc.c | 114 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 91 insertions(+), 23 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 99a8af116..4ae41252b 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -2116,7 +2116,6 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi /* Check if this is a function-like macro */ if (M->ParamCount >= 0) { - int OldPendingNewLines = PendingNewLines; int HaveSpace = SkipWhitespace (MultiLine) > 0; /* A function-like macro name without an immediately @@ -2139,32 +2138,50 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi ME_SetTokLens (E, strlen (M->Name)); } + /* Since we have already got on hold of the next + ** line, we have to reuse it as the next line + ** instead of reading a new line from the source. + */ + if (PendingNewLines > 0 && MultiLine) { + unsigned I = SB_GetIndex (Line); + + /* There is no way a function-like macro call + ** detection could span multiple lines within + ** the range of another just expanded macro. + */ + CHECK (CollCount (&CurRescanStack->Lines) == 1); + + /* Revert one newline */ + --PendingNewLines; + + /* Align indention */ + while (I > 0) { + --I; + if (SB_GetBuf (Line)[I] == '\n') { + ++I; + break; + } + SB_GetBuf (Line)[I] = ' '; + } + + /* Set start index */ + SB_SetIndex (Line, I); + + /* Add newlines */ + AddPreLine (Target); + + /* Reuse this line as the next line */ + ReuseInputLine (); + + /* Quit this loop */ + break; + } + /* Append back the whitespace */ if (HaveSpace) { SB_AppendChar (Target, ' '); } - /* Since we have already got on hold of the next - ** line, we have to go on preprocessing them. - */ - if (MultiLine) { - if (OldPendingNewLines < PendingNewLines && CurC == '#') { - /* If we were going to support #pragma in - ** macro argument list, it would be output - ** to OLine. - */ - if (OLine == 0) { - OLine = Target; - ParseDirectives (ModeFlags); - OLine = 0; - } else { - ParseDirectives (ModeFlags); - } - } - /* Add the source info to preprocessor output if needed */ - AddPreLine (Target); - } - /* Loop */ goto Loop; } @@ -2200,6 +2217,27 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi /* Switch the buffers */ TmpTarget = NewStrBuf (); + } else if (PendingNewLines > 0 && MultiLine) { + /* Cancel remaining check for pp-tokens separation + ** if there is since ther have been newlines that + ** can always separate them. + */ + if (CurRescanStack->PrevTok != 0) { + FreeStrBuf (CurRescanStack->PrevTok); + CurRescanStack->PrevTok = 0; + } + + /* Squeeze whitespace */ + SkipWhitespace (0); + + /* Add indention to preprocessor output if needed */ + if (CurC != '\0' && CollCount (&CurRescanStack->Lines) == 1) { + /* Add newlines */ + AddPreLine (Target); + + /* Align indention */ + AppendIndent (Target, SB_GetIndex (Line)); + } } /* Since we are rescanning, we needn't add the @@ -2239,7 +2277,24 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi } else if (IsQuotedString ()) { CopyQuotedString (Target); } else { - Skipped = SkipWhitespace (0); + /* We want to squeeze whitespace until the end of the current + ** input line, so we have to deal with such cases specially. + */ + if (CollCount (&CurRescanStack->Lines) > 1) { + RescanInputStack* RIS = CurRescanStack; + + /* Temporarily disable input popping */ + CurRescanStack = 0; + Skipped = SkipWhitespace (0); + CurRescanStack = RIS; + + if (CurC == '\0') { + /* Now we are at the end of the input line */ + goto Loop; + } + } else { + Skipped = SkipWhitespace (0); + } /* Punctuators must be checked after whitespace since comments ** introducers may be misinterpreted as division operators. @@ -2282,6 +2337,19 @@ Loop: if (CurC == '\0' && CollCount (&CurRescanStack->Lines) > 1) { /* Check for rescan sequence end and pp-token pasting */ Skipped = SkipWhitespace (0) || Skipped; + + /* Add indention to preprocessor output if needed */ + if (CurC != '\0' && + PendingNewLines > 0 && + (ModeFlags & MSM_MULTILINE) != 0 && + CollCount (&CurRescanStack->Lines) == 1) { + /* Add newlines */ + AddPreLine (Target); + + /* Align indention */ + AppendIndent (Target, SB_GetIndex (Line)); + Skipped = 0; + } } /* Append a space if there hasn't been one */ From 770e529b2033ebe5e0fe26f8d2f41d674080f928 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 1 Sep 2022 12:58:52 +0800 Subject: [PATCH 1809/2710] Fixed newline counting inside old C style comments. --- src/cc65/preproc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 4ae41252b..87d6a7878 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -878,7 +878,7 @@ static void Stringize (StrBuf* Source, StrBuf* Target) static void OldStyleComment (void) -/* Remove an old style C comment from line. */ +/* Remove an old style C comment from line */ { /* Remember the current line number, so we can output better error ** messages if the comment is not terminated in the current file. @@ -897,6 +897,7 @@ static void OldStyleComment (void) StartingLine); return; } + ++PendingNewLines; } else { if (CurC == '/' && NextC == '*') { PPWarning ("'/*' found inside a comment"); @@ -913,7 +914,7 @@ static void OldStyleComment (void) static void NewStyleComment (void) -/* Remove a new style C comment from line. */ +/* Remove a new style C comment from line */ { /* Diagnose if this is unsupported */ if (IS_Get (&Standard) < STD_C99) { From 92f94e4e5b271142caaaa8dabf0d21c1a8db1ae2 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 1 Sep 2022 12:58:52 +0800 Subject: [PATCH 1810/2710] A space character will be inserted in front of a leading '#' pp-token as the result of macro expansion. --- src/cc65/preproc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 87d6a7878..833dea9d4 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -2216,6 +2216,13 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi InitLine (TmpTarget); PushRescanLine (CurRescanStack, TmpTarget, LastTokLen); + /* Add a space before a '#' at the beginning of the line */ + if (CurC == '#' && + NextC != '#' && + (SB_IsEmpty (Target) || SB_LookAtLast (Target) == '\n')) { + SB_AppendChar (Target, ' '); + } + /* Switch the buffers */ TmpTarget = NewStrBuf (); } else if (PendingNewLines > 0 && MultiLine) { From 950606d46a45839fe1409e057cc396b5e66e6366 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 1 Sep 2022 12:59:00 +0800 Subject: [PATCH 1811/2710] Improved diagnostics on wrong number of arguments in function-like macro calls. --- src/cc65/preproc.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 833dea9d4..43c2131d1 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -1551,7 +1551,10 @@ static unsigned ReadMacroArgs (unsigned NameIdx, MacroExp* E, const Macro* M, in /* If this is not the single empty argument for a macro with an ** empty argument list, remember it. */ - if (CurC != ')' || SB_NotEmpty (&Arg.Tokens) || M->ParamCount > 0) { + if (CurC != ')' || + CollCount (&E->Args) > 0 || + SB_NotEmpty (&Arg.Tokens) || + M->ParamCount > 0) { MacroExp* A = ME_AppendArg (E, &Arg); unsigned I; @@ -1669,11 +1672,23 @@ static unsigned ReadMacroArgs (unsigned NameIdx, MacroExp* E, const Macro* M, in } /* Compare formal and actual argument count */ - if (CollCount (&E->Args) != (unsigned) M->ParamCount) { - + if (CollCount (&E->Args) < (unsigned) M->ParamCount) { + /* Check further only when the parentheses are paired */ if (Parens == 0) { - /* Argument count mismatch */ - PPError ("Macro argument count mismatch"); + /* Specially casing variable argument */ + if (M->Variadic && + M->ParamCount > 0 && + CollCount (&E->Args) + 1 == (unsigned) M->ParamCount) { + /* The variable argument is left out entirely */ + E->Flags |= MES_NO_VA_COMMA; + if (IS_Get (&Standard) < STD_CC65) { + PPWarning ("ISO C does not permit leaving out the comma before the variable argument"); + } + } else { + /* Too few argument */ + PPError ("Macro \"%s\" passed only %u arguments, but requires %u", + M->Name, CollCount (&E->Args), (unsigned) M->ParamCount); + } } /* Be sure to make enough empty arguments available */ @@ -1683,6 +1698,10 @@ static unsigned ReadMacroArgs (unsigned NameIdx, MacroExp* E, const Macro* M, in while (CollCount (&E->Args) < (unsigned) M->ParamCount) { ME_AppendArg (E, &Arg); } + } else if (Parens == 0 && CollCount (&E->Args) > (unsigned) M->ParamCount) { + /* Too many arguments */ + PPError ("Macro \"%s\" passed %u arguments, but takes just %u", + M->Name, CollCount (&E->Args), (unsigned) M->ParamCount); } /* Deallocate argument resources */ From b4ddd01d78cb20d53fa987cf0cb4d4aad3ee1c77 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 1 Sep 2022 12:58:52 +0800 Subject: [PATCH 1812/2710] Fixed checks on __VA_ARGS__. --- src/cc65/preproc.c | 45 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 43c2131d1..f1a525eae 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -806,6 +806,21 @@ static int MacName (char* Ident) +static void CheckForBadIdent (const char* Ident, int Std, const Macro* M) +/* Check for and warning on problematic identifiers */ +{ + if (Std >= STD_C99 && + (M == 0 || !M->Variadic) && + strcmp (Ident, "__VA_ARGS__") == 0) { + /* __VA_ARGS__ cannot be used as a macro parameter name in post-C89 + ** mode. + */ + PPWarning ("__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"); + } +} + + + static void AddPreLine (StrBuf* Str) /* Add newlines to the string buffer */ { @@ -2089,6 +2104,12 @@ static unsigned ReplaceMacros (StrBuf* Source, StrBuf* Target, MacroExp* E, unsi /* If we have an identifier, check if it's a macro */ if (IsSym (Ident)) { + /* Check for bad identifier names */ + if ((ModeFlags & (MSM_MULTILINE | MSM_IN_DIRECTIVE | MSM_IN_ARG_LIST)) != 0 && + (CollCount (&CurRescanStack->Lines) == 1 || CurC == '\0')) { + CheckForBadIdent (Ident, IS_Get (&Standard), 0); + } + if ((ModeFlags & MSM_OP_DEFINED) != 0 && strcmp (Ident, "defined") == 0) { /* Handle the "defined" operator */ int HaveParen = 0; @@ -2431,6 +2452,7 @@ static int ParseMacroReplacement (StrBuf* Source, Macro* M) int HasWhiteSpace = 0; unsigned Len; ident Ident; + int Std = IS_Get (&Standard); /* Skip whitespace before the macro replacement */ SkipWhitespace (0); @@ -2448,6 +2470,9 @@ static int ParseMacroReplacement (StrBuf* Source, Macro* M) SB_AppendChar (&M->Replacement, ' '); } else if (IsQuotedString ()) { CopyQuotedString (&M->Replacement); + } else if (IsSym (Ident)) { + CheckForBadIdent (Ident, Std, M); + SB_AppendStr (&M->Replacement, Ident); } else { if (M->ParamCount >= 0 && GetPunc (Ident)) { Len = strlen (Ident); @@ -2516,7 +2541,7 @@ static void DoDefine (void) ident Ident; Macro* M = 0; Macro* Existing; - int C89; + int Std; /* Read the macro name */ SkipWhitespace (0); @@ -2524,8 +2549,8 @@ static void DoDefine (void) goto Error_Handler; } - /* Remember if we're in C89 mode */ - C89 = (IS_Get (&Standard) == STD_C89); + /* Remember the language standard we are in */ + Std = IS_Get (&Standard); /* Check for forbidden macro names */ if (strcmp (Ident, "defined") == 0) { @@ -2533,6 +2558,9 @@ static void DoDefine (void) goto Error_Handler; } + /* Check for and warn on special identifiers */ + CheckForBadIdent (Ident, Std, 0); + /* Create a new macro definition */ M = NewMacro (Ident); @@ -2557,7 +2585,7 @@ static void DoDefine (void) /* The next token must be either an identifier, or - if not in ** C89 mode - the ellipsis. */ - if (!C89 && CurC == '.') { + if (Std >= STD_C99 && CurC == '.') { /* Ellipsis */ NextChar (); if (CurC != '.' || NextC != '.') { @@ -2579,11 +2607,8 @@ static void DoDefine (void) goto Error_Handler; } - /* __VA_ARGS__ is only allowed in post-C89 mode */ - if (!C89 && strcmp (Ident, "__VA_ARGS__") == 0) { - PPWarning ("'__VA_ARGS__' can only appear in the expansion " - "of a C99 variadic macro"); - } + /* Check for and warn on special identifiers */ + CheckForBadIdent (Ident, Std, 0); /* Add the macro parameter */ AddMacroParam (M, Ident); @@ -2758,6 +2783,7 @@ static int DoIfDef (int skip, int flag) SkipWhitespace (0); if (MacName (Ident)) { + CheckForBadIdent (Ident, IS_Get (&Standard), 0); Value = IsMacro (Ident); /* Check for extra tokens */ CheckExtraTokens (flag ? "ifdef" : "ifndef"); @@ -2964,6 +2990,7 @@ static void DoUndef (void) SkipWhitespace (0); if (MacName (Ident)) { + CheckForBadIdent (Ident, IS_Get (&Standard), 0); UndefineMacro (Ident); } /* Check for extra tokens */ From 446a785f95143a924ca972e9ef38d62adaf54d29 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Fri, 2 Sep 2022 11:55:54 +0200 Subject: [PATCH 1813/2710] Don't hide errors in error handling You don't want the low byte, see grep _ERR_ libsrc/tgi/* --- libsrc/tgi/tgi_unload.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/tgi/tgi_unload.s b/libsrc/tgi/tgi_unload.s index 1012969d2..c01228080 100644 --- a/libsrc/tgi/tgi_unload.s +++ b/libsrc/tgi/tgi_unload.s @@ -29,6 +29,6 @@ _tgi_unload: jmp _mod_free ; Free the driver no_driver: - lda #<TGI_ERR_NO_DRIVER + lda #TGI_ERR_NO_DRIVER sta _tgi_error rts From 253af1ed07214685dbe1d5a7b042fec30d97831c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 3 Sep 2022 18:36:40 +0200 Subject: [PATCH 1814/2710] Force 16bit address for absolute-indirect-x-indexed in 65816 mode. should fix issue #1846 (and hopefully not break anything :)) --- src/ca65/instr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ca65/instr.c b/src/ca65/instr.c index 834edfb5f..d0d7ce64c 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -1298,7 +1298,7 @@ static void EmitCode (EffAddr* A) break; case 2: - if (CPU == CPU_65816 && (A->AddrModeBit & (AM65_ABS | AM65_ABS_X | AM65_ABS_Y))) { + if (CPU == CPU_65816 && (A->AddrModeBit & (AM65_ABS | AM65_ABS_X | AM65_ABS_Y | AM65_ABS_X_IND))) { /* This is a 16 bit mode that uses an address. If in 65816, ** mode, force this address into 16 bit range to allow ** addressing inside a 64K segment. From 5493c9e7c2595b85d4dd7eb50c57b767ef72e06a Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 8 Sep 2022 17:11:30 +0200 Subject: [PATCH 1815/2710] Don't empty the Receive Data Register on filling the Transmit Data Register The Receive Data Register and the Transmit Data Register share share a single address. Accessing that address with STA abs,X in order to fill the Transmit Data Register causes a 6502 false read which causes the Receive Data Register to be emptied. The simplest way to work around that issue - which I chose here - is to move the base address for all ACIA accesses from page $C0 to page $BF. However, that adds an additional cycle to all read accesses. An alternative approach would be to only modify the single line `sta ACIA_DATA,x`. --- libsrc/apple2/ser/a2.ssc.s | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index a32110ef2..e0cd94597 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -57,7 +57,9 @@ ;---------------------------------------------------------------------------- ; I/O definitions -ACIA = $C088 +Offset = $8F ; Move 6502 false read out of I/O to page $BF + +ACIA = $C088-Offset ACIA_DATA = ACIA+0 ; Data register ACIA_STATUS = ACIA+1 ; Status register ACIA_CMD = ACIA+2 ; Command register @@ -197,6 +199,7 @@ SER_OPEN: asl asl asl + adc Offset ; Assume carry to be clear tax ; Check if the handshake setting is valid From fd6d00a4ddc4f015f089f0e6c64f0d9840c8cf5a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 17 Sep 2022 14:41:59 +0200 Subject: [PATCH 1816/2710] revert 6096a24 - this breaks the case when the "label" is an expression containing spaces. fixes bug #1853 --- src/cc65/codeseg.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/cc65/codeseg.c b/src/cc65/codeseg.c index 5949c0c6f..e621147ab 100644 --- a/src/cc65/codeseg.c +++ b/src/cc65/codeseg.c @@ -399,10 +399,7 @@ static CodeEntry* ParseInsn (CodeSeg* S, LineInfo* LI, const char* L) default: /* Absolute, maybe indexed */ - L = ReadToken (L, ", ", Arg, sizeof (Arg)); - if (*L == ' ') { - L = SkipSpace (L+1); - } + L = ReadToken (L, ",", Arg, sizeof (Arg)); if (*L == '\0') { /* Absolute, zeropage or branch */ if ((OPC->Info & OF_BRA) != 0) { From 6fc2cd9f615b32e9ec2472d00f06d5ccabe8292f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 17 Sep 2022 14:42:18 +0200 Subject: [PATCH 1817/2710] add test related to bug #1853 --- test/val/bug1853-inline-asm.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 test/val/bug1853-inline-asm.c diff --git a/test/val/bug1853-inline-asm.c b/test/val/bug1853-inline-asm.c new file mode 100644 index 000000000..9813566dc --- /dev/null +++ b/test/val/bug1853-inline-asm.c @@ -0,0 +1,21 @@ + +/* #1853 - Regression on inline assembly expression evaluation */ + +int main(void) +{ +/* +compiles with e.g. Git 2f4e2a3 to the expected + + lda 1 + lda 1 + 1 + rts + +However, with the current HEAD, it compiles to + + lda 1 + lda +*/ + __asm__("lda 1"); + __asm__("lda 1 + 1"); + return 0; +} From 16ba232d080cc107842fc5d794073b3edfa96bd7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 18 Sep 2022 22:29:01 +0800 Subject: [PATCH 1818/2710] Fixed some testcases. --- test/val/bug1838.c | 2 +- test/val/bug1847-struct-field-access.c | 2 +- test/val/mult1.c | 17 +++++++++++------ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/test/val/bug1838.c b/test/val/bug1838.c index ba3c1164f..ea2d39a81 100644 --- a/test/val/bug1838.c +++ b/test/val/bug1838.c @@ -12,7 +12,7 @@ int main(void) fn_t bar; foo(bar); - return 0; + return failures; } void foo(int func(int)) diff --git a/test/val/bug1847-struct-field-access.c b/test/val/bug1847-struct-field-access.c index 50ae32332..71575636f 100644 --- a/test/val/bug1847-struct-field-access.c +++ b/test/val/bug1847-struct-field-access.c @@ -42,5 +42,5 @@ int main(void) { printf("Failures: %u\n", failures); } - return 0; + return failures; } diff --git a/test/val/mult1.c b/test/val/mult1.c index 6d491a427..95141d76d 100644 --- a/test/val/mult1.c +++ b/test/val/mult1.c @@ -26,15 +26,17 @@ void done() void m1(void) { - c1 = c1*5; /* char = char * lit */ + c1 = c1*5; /* char = char * lit */ + c2 = c1*c3; /* char = char * char */ - c2 = c1 *c3; /* char = char * char */ - - uc1= uc1*5; /* uchar = uchar * lit * - uc2=uc1*uc3; /* uchar = uchar * uchar */ + uc1 = uc1*3; /* uchar = uchar * lit */ + uc2 = uc1*uc3; /* uchar = uchar * uchar */ if(c2 != 25) failures++; + + if(uc2 != 36) + failures++; } void m2(unsigned char uc) @@ -96,6 +98,9 @@ int main(void) c1 = 1; c3 = 5; + uc1 = 2; + uc3 = 6; + m1(); uc1 = 0x10; @@ -107,7 +112,7 @@ int main(void) ui3 = ui1*ui2; /* uint = uint * unit */ - /*m3(TESTLIT);*/ + m3(TESTLIT); success = failures; done(); From 080ec131d852cae576a2ef0bd2e51a673c1a0cc3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 18 Sep 2022 22:29:30 +0800 Subject: [PATCH 1819/2710] Added testcase for constant operands with side-effects. --- test/val/const-side-effect.c | 160 +++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 test/val/const-side-effect.c diff --git a/test/val/const-side-effect.c b/test/val/const-side-effect.c new file mode 100644 index 000000000..7c2f074f2 --- /dev/null +++ b/test/val/const-side-effect.c @@ -0,0 +1,160 @@ +/* Check code generation for constant operands with side-effects */ + +#include <stdio.h> + +static int failures = 0; + +#define TEST(X, Y, L) \ + if (x != X || y != Y) { \ + printf("Failed: " L "\nExpected: x = " #X ", y = " #Y ", got: x = %d, y = %d\n\n", x, y); \ + ++failures; \ + } + +#define TEST_LINE_UNARY(OP, RH, ID) \ + "x = " #OP "(set(&y, " #ID "), " #RH ")" + +#define TEST_UNARY(OP, RH, RS, ID) \ + x = -!(RS), y = -!(RS); \ + x = OP (set(&y, ID), RH); \ + TEST(RS, ID, TEST_LINE_UNARY(OP, RH, ID)) + +#define TEST_LINE_RHS_EFFECT(LH, OP, RH, ID) \ + "x = " #LH " " #OP " (set(&y, " #ID "), " #RH ")" + +#define TEST_LINE_LHS_EFFECT(LH, OP, RH, ID) \ + "y = (set(&x, " #ID "), " #LH ") " #OP " " #RH + +#define TEST_BINARY(LH, OP, RH, RS, ID) \ + x = -!(RS), y = -!(RS); \ + x = LH OP (set(&y, ID), RH); \ + TEST(RS, ID, TEST_LINE_RHS_EFFECT(LH, OP, RH, ID)) \ + y = -!(RS), x = -!(RS); \ + y = (set(&x, ID), LH) OP RH; \ + TEST(ID, RS, TEST_LINE_LHS_EFFECT(LH, OP, RH, ID)) \ + y = -!(RS); \ + x = (set(&x, LH), x) OP (set(&y, ID), RH); \ + TEST(RS, ID, TEST_LINE_RHS_EFFECT((set(&x, LH), x), OP, RH, ID)) \ + x = -!(RS); \ + y = (set(&x, ID), LH) OP (set(&y, RH), y); \ + TEST(ID, RS, TEST_LINE_LHS_EFFECT(LH, OP, (set(&y, RH), y), ID)) + +#define TEST_LINE_RHS_EFFECT_WITH_CAST(LT, LH, OP, RT, RH, ID) \ + "x = (" #LT ")" #LH " " #OP " (" #RT ")(set(&y, " #ID "), " #RH ")" + +#define TEST_LINE_LHS_EFFECT_WITH_CAST(LT, LH, OP, RT, RH, ID) \ + "y = (" #LT ")(set(&x, " #ID "), " #LH ") " #OP " (" #RT ")" #RH + +#define TEST_BINARY_WITH_CAST(LT, LH, OP, RT, RH, RS, ID) \ + x = -!(RS), y = -!(RS); \ + x = (LT)LH OP (RT)(set(&y, ID), RH); \ + TEST(RS, ID, TEST_LINE_RHS_EFFECT_WITH_CAST(LT, LH, OP, RT, RH, ID)) \ + y = -!(RS), x = -!(RS); \ + y = (LT)(set(&x, ID), LH) OP (RT)RH; \ + TEST(ID, RS, TEST_LINE_LHS_EFFECT_WITH_CAST(LT, LH, OP, RT, RH, ID)) \ + y = -!(RS); \ + x = (LT)(set(&x, LH), x) OP (RT)(set(&y, ID), RH); \ + TEST(RS, ID, TEST_LINE_RHS_EFFECT_WITH_CAST(LT, (set(&x, LH), x), OP, RT, RH, ID)) \ + x = -!(RS); \ + y = (LT)(set(&x, ID), LH) OP (RT)(set(&y, RH), y); \ + TEST(ID, RS, TEST_LINE_LHS_EFFECT_WITH_CAST(LT, LH, OP, RT, (set(&y, RH), y), ID)) + +void set(int *p, int q) +{ + *p = q; +} + +int twice(int a) +{ + return a * 2; +} + +int (*twicep)(int) = twice; + +void test_unary(void) +{ + int x, y; + + TEST_UNARY(+, 42, 42, 1); + TEST_UNARY(-, -42, 42, 2); + TEST_UNARY(~, ~42, 42, 3); + TEST_UNARY(!, 42, 0, 4); +} + +void test_binary_arithmetic(void) +{ + int x, y; + + TEST_BINARY(41, +, 1, 42, 1) + TEST_BINARY(42, +, 0, 42, 1) + + TEST_BINARY(43, -, 1, 42, 2) + TEST_BINARY(42, -, 0, 42, 2) + + TEST_BINARY(6, *, 7, 42, 3) + TEST_BINARY(42, *, 1, 42, 3) + TEST_BINARY(-42, *, -1, 42, 3) + + TEST_BINARY(126, /, 3, 42, 4) + TEST_BINARY(42, /, 1, 42, 4) + TEST_BINARY(-42, /, -1, 42, 4) + + TEST_BINARY(85, %, 43, 42, 5) + TEST_BINARY(10794, %, 256, 42, 5) + + TEST_BINARY(84, >>, 1, 42, 6) + TEST_BINARY(42, >>, 0, 42, 6) + TEST_BINARY(10752, >>, 8, 42, 6) + TEST_BINARY(21504, >>, 9, 42, 6) + + TEST_BINARY(21, <<, 1, 42, 7) + TEST_BINARY(42, <<, 0, 42, 7) + TEST_BINARY(42, <<, 8, 10752, 7) + + TEST_BINARY(59, &, 238, 42, 8) + TEST_BINARY(42, &, 0, 0, 8) + TEST_BINARY(42, &, -1, 42, 8) + + TEST_BINARY(34, |, 10, 42, 9) + TEST_BINARY(42, |, 0, 42, 9) + TEST_BINARY(34, |, -1, -1, 9) + + TEST_BINARY(59, ^, 17, 42, 10) + TEST_BINARY(42, ^, 0, 42, 10) + TEST_BINARY(~42, ^, -1, 42, 10) +} + +void test_binary_comparison(void) +{ + int x, y; + + TEST_BINARY(42, ==, 42, 1, 11) + + TEST_BINARY(42, !=, 43, 1, 12) + TEST_BINARY_WITH_CAST(signed char, 42, !=, long, 65536L, 1, 12) + TEST_BINARY_WITH_CAST(long, 65536L, !=, signed char, 42, 1, 12) + + TEST_BINARY(42, >, 41, 1, 13) + TEST_BINARY_WITH_CAST(int, 0, >, unsigned, 42, 0, 13) + + TEST_BINARY(42, <, 43, 1, 14) + TEST_BINARY_WITH_CAST(unsigned, 42, <, int, 0, 0, 14) + + TEST_BINARY(42, >=, 0, 1, 15) + TEST_BINARY_WITH_CAST(unsigned, 42, >=, int, 0, 1, 15) + + TEST_BINARY(42, <=, 43, 1, 16) + TEST_BINARY_WITH_CAST(int, 0, <=, unsigned, 42, 1, 16) +} + +int main(void) +{ + test_unary(); + test_binary_arithmetic(); + test_binary_comparison(); + + if (failures != 0) { + printf("Failures: %d\n", failures); + } + + return failures; +} From 5e7d9b5fe3c14f5b705e9a17e3e133bf6004296a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 18 Sep 2022 22:29:41 +0800 Subject: [PATCH 1820/2710] Renamed a few testcases. --- test/val/{bug1047.c => bug1047-bitfield-char.c} | 0 test/val/{bug1094.c => bug1094-nested-init.c} | 0 test/val/{bug1095.c => bug1095-bitfield-signed.c} | 0 test/val/{bug1139.c => bug1139-bitfield-in-if.c} | 0 test/val/{bug1178.c => bug1178-struct-copy.c} | 0 test/val/{bug1181.c => bug1181-struct-field-null-cmp.c} | 0 test/val/{bug1267.c => bug1267-bitfield-typedef-signedness.c} | 0 test/val/{bug1332.c => bug1332-bitfield.c} | 0 test/val/{bug1357.c => bug1357-pp.c} | 0 test/val/{bug1451.c => bug1451-struct-ptr-to-local.c} | 0 test/val/{bug1462.c => bug1462-biefield-assign-1.c} | 0 test/val/{bug1462-2.c => bug1462-biefield-assign-2.c} | 0 test/val/{bug1462-3.c => bug1462-biefield-assign-3.c} | 0 test/val/{bug1462-4.c => bug1462-biefield-assign-4.c} | 0 test/val/{anon-struct1.c => struct-anon1.c} | 0 test/val/{anon-struct2.c => struct-anon2.c} | 0 test/val/{return-struct.c => struct-returned.c} | 0 17 files changed, 0 insertions(+), 0 deletions(-) rename test/val/{bug1047.c => bug1047-bitfield-char.c} (100%) rename test/val/{bug1094.c => bug1094-nested-init.c} (100%) rename test/val/{bug1095.c => bug1095-bitfield-signed.c} (100%) rename test/val/{bug1139.c => bug1139-bitfield-in-if.c} (100%) rename test/val/{bug1178.c => bug1178-struct-copy.c} (100%) rename test/val/{bug1181.c => bug1181-struct-field-null-cmp.c} (100%) rename test/val/{bug1267.c => bug1267-bitfield-typedef-signedness.c} (100%) rename test/val/{bug1332.c => bug1332-bitfield.c} (100%) rename test/val/{bug1357.c => bug1357-pp.c} (100%) rename test/val/{bug1451.c => bug1451-struct-ptr-to-local.c} (100%) rename test/val/{bug1462.c => bug1462-biefield-assign-1.c} (100%) rename test/val/{bug1462-2.c => bug1462-biefield-assign-2.c} (100%) rename test/val/{bug1462-3.c => bug1462-biefield-assign-3.c} (100%) rename test/val/{bug1462-4.c => bug1462-biefield-assign-4.c} (100%) rename test/val/{anon-struct1.c => struct-anon1.c} (100%) rename test/val/{anon-struct2.c => struct-anon2.c} (100%) rename test/val/{return-struct.c => struct-returned.c} (100%) diff --git a/test/val/bug1047.c b/test/val/bug1047-bitfield-char.c similarity index 100% rename from test/val/bug1047.c rename to test/val/bug1047-bitfield-char.c diff --git a/test/val/bug1094.c b/test/val/bug1094-nested-init.c similarity index 100% rename from test/val/bug1094.c rename to test/val/bug1094-nested-init.c diff --git a/test/val/bug1095.c b/test/val/bug1095-bitfield-signed.c similarity index 100% rename from test/val/bug1095.c rename to test/val/bug1095-bitfield-signed.c diff --git a/test/val/bug1139.c b/test/val/bug1139-bitfield-in-if.c similarity index 100% rename from test/val/bug1139.c rename to test/val/bug1139-bitfield-in-if.c diff --git a/test/val/bug1178.c b/test/val/bug1178-struct-copy.c similarity index 100% rename from test/val/bug1178.c rename to test/val/bug1178-struct-copy.c diff --git a/test/val/bug1181.c b/test/val/bug1181-struct-field-null-cmp.c similarity index 100% rename from test/val/bug1181.c rename to test/val/bug1181-struct-field-null-cmp.c diff --git a/test/val/bug1267.c b/test/val/bug1267-bitfield-typedef-signedness.c similarity index 100% rename from test/val/bug1267.c rename to test/val/bug1267-bitfield-typedef-signedness.c diff --git a/test/val/bug1332.c b/test/val/bug1332-bitfield.c similarity index 100% rename from test/val/bug1332.c rename to test/val/bug1332-bitfield.c diff --git a/test/val/bug1357.c b/test/val/bug1357-pp.c similarity index 100% rename from test/val/bug1357.c rename to test/val/bug1357-pp.c diff --git a/test/val/bug1451.c b/test/val/bug1451-struct-ptr-to-local.c similarity index 100% rename from test/val/bug1451.c rename to test/val/bug1451-struct-ptr-to-local.c diff --git a/test/val/bug1462.c b/test/val/bug1462-biefield-assign-1.c similarity index 100% rename from test/val/bug1462.c rename to test/val/bug1462-biefield-assign-1.c diff --git a/test/val/bug1462-2.c b/test/val/bug1462-biefield-assign-2.c similarity index 100% rename from test/val/bug1462-2.c rename to test/val/bug1462-biefield-assign-2.c diff --git a/test/val/bug1462-3.c b/test/val/bug1462-biefield-assign-3.c similarity index 100% rename from test/val/bug1462-3.c rename to test/val/bug1462-biefield-assign-3.c diff --git a/test/val/bug1462-4.c b/test/val/bug1462-biefield-assign-4.c similarity index 100% rename from test/val/bug1462-4.c rename to test/val/bug1462-biefield-assign-4.c diff --git a/test/val/anon-struct1.c b/test/val/struct-anon1.c similarity index 100% rename from test/val/anon-struct1.c rename to test/val/struct-anon1.c diff --git a/test/val/anon-struct2.c b/test/val/struct-anon2.c similarity index 100% rename from test/val/anon-struct2.c rename to test/val/struct-anon2.c diff --git a/test/val/return-struct.c b/test/val/struct-returned.c similarity index 100% rename from test/val/return-struct.c rename to test/val/struct-returned.c From cb8cb876ec741c96b506f03539165b12b5d342e7 Mon Sep 17 00:00:00 2001 From: Rutger van Bergen <rbergen@xs4all.nl> Date: Mon, 19 Sep 2022 19:56:57 +0200 Subject: [PATCH 1821/2710] Add documentation, make capitalization uniform --- asminc/kim1.inc | 13 ++-- cfg/kim1-60k.cfg | 6 +- cfg/kim1.cfg | 2 +- doc/index.sgml | 3 + doc/kim1.sgml | 148 ++++++++++++++++++++++++++++++++++++++++ libsrc/kim1/crt0.s | 4 +- samples/kim1/kimHello.c | 2 +- src/common/target.h | 2 +- 8 files changed, 165 insertions(+), 15 deletions(-) create mode 100644 doc/kim1.sgml diff --git a/asminc/kim1.inc b/asminc/kim1.inc index f0d1555a7..b1046b01c 100644 --- a/asminc/kim1.inc +++ b/asminc/kim1.inc @@ -7,22 +7,21 @@ RAMSTART := $0200 ; Entry point + ; --------------------------------------------------------------------------- ; Monitor Functions ; --------------------------------------------------------------------------- - - OUTCHR := $1EA0 ; Output character INTCHR := $1E5A ; Input character without case conversion DUMPT := $1800 ; Dump memory to tape LOADT := $1873 ; Load memory from tape + + +; --------------------------------------------------------------------------- +; System Memory +; --------------------------------------------------------------------------- SAL := $17F5 ; Tape load address low SAH := $17F6 ; Tape load address high EAL := $17F7 ; Tape address end low EAH := $17F8 ; Tape address end high ID := $17F9 ; Tape Identification number - -; --------------------------------------------------------------------------- -; System Memory -; --------------------------------------------------------------------------- - diff --git a/cfg/kim1-60k.cfg b/cfg/kim1-60k.cfg index a6704d9dd..087715560 100644 --- a/cfg/kim1-60k.cfg +++ b/cfg/kim1-60k.cfg @@ -1,8 +1,8 @@ -# kim1.cfg (4k) +# kim1-60k.cfg (4k) # -# for unexpanded Kim-1 +# for expanded KIM-1 # -# ld65 --config kim1.cfg -o <prog>.bin <prog>.o +# ld65 --config kim1-60k.cfg -o <prog>.bin <prog>.o FEATURES { STARTADDRESS: default = $2000; diff --git a/cfg/kim1.cfg b/cfg/kim1.cfg index 69636065e..f48fed80e 100644 --- a/cfg/kim1.cfg +++ b/cfg/kim1.cfg @@ -1,6 +1,6 @@ # kim1.cfg (4k) # -# for unexpanded Kim-1 +# for unexpanded KIM-1 # # ld65 --config kim1.cfg -o <prog>.bin <prog>.o diff --git a/doc/index.sgml b/doc/index.sgml index bb3ad5357..bfce63486 100644 --- a/doc/index.sgml +++ b/doc/index.sgml @@ -154,6 +154,9 @@ <tag><htmlurl url="gamate.html" name="gamate.html"></tag> Topics specific to the Bit Corporation Gamate Console. + <tag><htmlurl url="kim1.html" name="kim1.html"></tag> + Topics specific to the MOS Technology KIM-1. + <tag><htmlurl url="lynx.html" name="lynx.html"></tag> Topics specific to the Atari Lynx Game Console. diff --git a/doc/kim1.sgml b/doc/kim1.sgml new file mode 100644 index 000000000..0c8b54311 --- /dev/null +++ b/doc/kim1.sgml @@ -0,0 +1,148 @@ +<!doctype linuxdoc system> + +<article> +<title>MOS Technology KIM-1 specific information for cc65 +<author><url url="mailto:dave@davepl.com" name="Dave Plummer"> + +<abstract> +An overview over the KIM-1 runtime system as it is implemented for the cc65 C compiler. +</abstract> + +<!-- Table of contents --> +<toc> + +<!-- Begin the document --> + +<sect>Overview<p> + +This file contains an overview of the KIM-1 runtime system as it comes with the cc65 C compiler. +It describes the memory layout, KIM-1 specific header files, available drivers, and any pitfalls +specific to the platform. + +Please note that KIM-1 specific functions are just mentioned here, they are described in detail +in the separate <url url="funcref.html" name="function reference">. Even functions marked as +"platform dependent" may be available on more than one platform. Please see the +function reference for more information. + +<sect>Binary format<p> + +The output format generated by the linker for the KIM-1 target is a raw binary BIN file, which +is essentially a memory image. You can convert this to a papertape format file using +Convert8bithexformat or KIMPaper, which are open-source conversion utility programs. +A papertape format files can be transferred to the KIM-1 using the RS-232 terminal port (TTY), +just as if the machine-code was entered by hand. Enter 'L' in the TTY and start the paper tape file +transfer. + +<p> + +Included with this distribution is a 4k configuration file and a 60k config file. The KIM-1 +on-board memory is limited to 4 kbytes but system memory can be increased to 60 kbytes of +contiguous RAM with aftermarket add-on boards. So choose the config file that matches your +system configuration before compiling and linking user programs. + +<sect>Memory layout<p> + +The ROMs and I/O areas are defined in the configuration files, as are most of the entry points +for useful subroutines in the KIM-1 monitor ROM. cc65 generated programs compiled and linked +using 4k config run in the memory range of $200 - $0FFF. The 60k config expands +this range to $DFFF. The starting memory location and entry point for running the program is +$200, so when the program is transferred to the KIM-1, it is executed by typing '200 G'. + +Special locations: + +<descrip> + <tag/Text screen/ + Conio support is not currently available for the KIM-1. But stdio console functions are available. + + <tag/Stack/ + The C runtime stack is located at $0FFF on 4kb KIM-1s, or at $DFFF for 60kb systems. + The stack always grows downwards. + + <tag/Heap/ + The C heap is located at the end of the program and grows towards the C runtime stack. + +</descrip><p> + +<sect>Platform specific header files<p> + +Programs containing KIM-1 code may use the <tt/kim.h/ header file. See the header file for more information. + +<sect>Loadable drivers<p> + +<sect1>Graphics drivers<p> + +No graphics drivers are currently available for the KIM-1. + +<sect1>Joystick drivers<p> + +No joystick driver is currently available for the KIM-1. + +<sect1>Mouse drivers<p> + +No mouse drivers are currently available for the KIM-1. + +<sect1>RS232 device drivers<p> + +No communication port drivers are currently available for the KIM-1. It has only the "master console" +e.g. stdin and stdout. + +<sect>Limitations<p> + +<sect1>Disk I/O<p> + +The existing library for the KIM-1 doesn't implement C file I/O. + +To be more specific, this limitation means that you cannot use any of the following functions (and a few others): + +<itemize> +<item>fopen +<item>fclose +<item>fread +<item>fwrite +<item>... +</itemize> + +<sect>Other hints<p> + +<sect1>kim1.h<p> +This header exposes KIM-1 specific I/O functions that are useful for reading and writing its ports and front panel. +See the <tt/kim1.h/ include file for a list of the functions available. + +<sect1>Limited memory applications<p> + +As stated earlier, there are config files for 4kb and 60kb systems. If you have 60kb RAM, then you will probably +want to use the kim1-60k configuration, but if not - if you are using the kim1-4k configuration - then you may +want to use functions like getchar, putchar, gets and puts rather than functions like scanf and printf. +Printf, for example, requires about 1KB because it needs to know how to process all the format specifiers. + +<sect1>Sample programs<p> + +These sample programs can be found in the samples/kim1 directory: + +<itemize> +<item>kimHello prints "Hello World!" and then inputs characters, which are echoed on the screen. + This program will run on both 4kb and 60kb systems.</item> +<item>kimSieve finds the prime numbers up to 100,000 using the Sieve of Eratosthenes algorithm, and prints how many + prime numbers were found. This program requires a 60kb system to run.</item> +</itemize> + +<sect>License<p> + +This software is provided 'as-is', without any expressed or implied warranty. In no event will the authors be held +liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter +it and redistribute it freely, subject to the following restrictions: + +<enum> +<item> The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +<item> Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. +<item> This notice may not be removed or altered from any source + distribution. +</enum> + +</article> diff --git a/libsrc/kim1/crt0.s b/libsrc/kim1/crt0.s index aefdc3545..f1fee86c1 100644 --- a/libsrc/kim1/crt0.s +++ b/libsrc/kim1/crt0.s @@ -40,8 +40,8 @@ _init: cld ; Clear decimal mode jsr _main -; Back from main (this is also the _exit entry). There may be a more elegant way to9 -; return to the monitor on the Kim-1, but I don't know it! +; Back from main (this is also the _exit entry). There may be a more elegant way to +; return to the monitor on the KIM-1, but I don't know it! _exit: brk diff --git a/samples/kim1/kimHello.c b/samples/kim1/kimHello.c index dcbfb4e67..0dca1345f 100644 --- a/samples/kim1/kimHello.c +++ b/samples/kim1/kimHello.c @@ -1,5 +1,5 @@ // -------------------------------------------------------------------------- -// Hello World for Kim-1 +// Hello World for KIM-1 // // Dave Plummer based on Sym-1 sample by Wayne Parham // diff --git a/src/common/target.h b/src/common/target.h index 7439fa621..0cec74b6e 100644 --- a/src/common/target.h +++ b/src/common/target.h @@ -87,7 +87,7 @@ typedef enum { TGT_C65, TGT_CX16, TGT_SYM1, - TGT_KIM1, // Added at end so as not to shift existing entries + TGT_KIM1, TGT_COUNT /* Number of target systems */ } target_t; From ab6840712b88e8c0249563d350c0b63d901a4a54 Mon Sep 17 00:00:00 2001 From: David W Plummer <davepl@davepl.com> Date: Mon, 19 Sep 2022 14:17:41 -0700 Subject: [PATCH 1822/2710] Update kim1.sgml --- doc/kim1.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/kim1.sgml b/doc/kim1.sgml index 0c8b54311..6db9fc908 100644 --- a/doc/kim1.sgml +++ b/doc/kim1.sgml @@ -2,10 +2,10 @@ <article> <title>MOS Technology KIM-1 specific information for cc65 -<author><url url="mailto:dave@davepl.com" name="Dave Plummer"> +<author><url url="mailto:davepl@davepl.com" name="Dave Plummer"> <abstract> -An overview over the KIM-1 runtime system as it is implemented for the cc65 C compiler. +An overview of the KIM-1 runtime system as it is implemented for the cc65 C compiler. </abstract> <!-- Table of contents --> From 3b431d9fa3ca4110c23623887338685117b2bec6 Mon Sep 17 00:00:00 2001 From: Rutger van Bergen <rbergen@xs4all.nl> Date: Mon, 19 Sep 2022 23:57:26 +0200 Subject: [PATCH 1823/2710] Remove trailing whitespace --- asminc/kim1.inc | 2 +- doc/kim1.sgml | 12 ++++++------ samples/kim1/kimHello.c | 4 ++-- samples/kim1/kimSieve.c | 10 +++++----- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/asminc/kim1.inc b/asminc/kim1.inc index b1046b01c..68f059490 100644 --- a/asminc/kim1.inc +++ b/asminc/kim1.inc @@ -1,6 +1,6 @@ ; --------------------------------------------------------------------------- ; -; KIM-1 definitions +; KIM-1 definitions ; ; --------------------------------------------------------------------------- diff --git a/doc/kim1.sgml b/doc/kim1.sgml index 6db9fc908..c3494b9b9 100644 --- a/doc/kim1.sgml +++ b/doc/kim1.sgml @@ -27,10 +27,10 @@ function reference for more information. <sect>Binary format<p> The output format generated by the linker for the KIM-1 target is a raw binary BIN file, which -is essentially a memory image. You can convert this to a papertape format file using -Convert8bithexformat or KIMPaper, which are open-source conversion utility programs. -A papertape format files can be transferred to the KIM-1 using the RS-232 terminal port (TTY), -just as if the machine-code was entered by hand. Enter 'L' in the TTY and start the paper tape file +is essentially a memory image. You can convert this to a papertape format file using +Convert8bithexformat or KIMPaper, which are open-source conversion utility programs. +A papertape format files can be transferred to the KIM-1 using the RS-232 terminal port (TTY), +just as if the machine-code was entered by hand. Enter 'L' in the TTY and start the paper tape file transfer. <p> @@ -45,8 +45,8 @@ system configuration before compiling and linking user programs. The ROMs and I/O areas are defined in the configuration files, as are most of the entry points for useful subroutines in the KIM-1 monitor ROM. cc65 generated programs compiled and linked using 4k config run in the memory range of $200 - $0FFF. The 60k config expands -this range to $DFFF. The starting memory location and entry point for running the program is -$200, so when the program is transferred to the KIM-1, it is executed by typing '200 G'. +this range to $DFFF. The starting memory location and entry point for running the program is +$200, so when the program is transferred to the KIM-1, it is executed by typing '200 G'. Special locations: diff --git a/samples/kim1/kimHello.c b/samples/kim1/kimHello.c index 0dca1345f..9e5ca8ab6 100644 --- a/samples/kim1/kimHello.c +++ b/samples/kim1/kimHello.c @@ -9,14 +9,14 @@ #include <stdio.h> #include <kim1.h> -int main (void) +int main (void) { char str[100]; char c = 0x00; printf ("\nHello World!\n\n"); printf ("Type a line and press ENTER, please.\n\n"); - + gets( str ); printf ("\n\nThanks: %s\n\n", str); diff --git a/samples/kim1/kimSieve.c b/samples/kim1/kimSieve.c index 29cd7c7e9..d13f776ea 100644 --- a/samples/kim1/kimSieve.c +++ b/samples/kim1/kimSieve.c @@ -8,11 +8,11 @@ typedef unsigned long int ulong; #define LIMIT 100000L // BITARRAY -// +// // My bit-access macros pre-divide by two on the presumption that you'll never // try try access both odd and even bits! -#define GETBIT(array, bit) (array[bit >> 4] & (1 << ((bit >> 1) & 7))) +#define GETBIT(array, bit) (array[bit >> 4] & (1 << ((bit >> 1) & 7))) #define SETBIT(array, bit) (array[bit >> 4] |= (1 << ((bit >> 1) & 7))) #define CLRBIT(array, bit) (array[bit >> 4] &= ~(1 << ((bit >> 1) & 7))) @@ -65,7 +65,7 @@ int main(void) RepeatChar('*', 70); puts("\r\n** Prime Number Sieve - Dave Plummer 2022 **"); RepeatChar('*', 70); - + printf("\r\n\r\nCalculating primes to %ld using a sqrt of %ld...\r\n", LIMIT, rootOfLimit); // Calculate how much memory should be allocated @@ -80,7 +80,7 @@ int main(void) else { printf("Allocated %ld bytes for %ld slots\r\n", numBytesAllocated, LIMIT); - + // Preset all the bits to true for (iNumber = 0; iNumber < numBytesAllocated; iNumber++) @@ -102,7 +102,7 @@ int main(void) break; } } - + for (n = (ulong) currentFactor * currentFactor; n <= LIMIT; n += currentFactor * 2) CLRBIT(array, n); From 846d51db722509539136b961b982ad6d07747c75 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 22 Sep 2022 20:29:57 +0200 Subject: [PATCH 1824/2710] change line endings to unix style, should fix #1858 --- test/val/bug1408.c | 82 +++---- test/val/bug1451-struct-ptr-to-local.c | 78 +++--- test/val/bug1643.c | 24 +- test/val/bug1643.h | 26 +- test/val/bug1690.c | 60 ++--- test/val/bug1822-pptest.c | 50 ++-- test/val/bug1838.c | 70 +++--- test/val/bug1847-struct-field-access.c | 92 +++---- test/val/const-side-effect.c | 320 ++++++++++++------------- test/val/counter.c | 120 +++++----- test/val/counter.h | 8 +- test/val/opsize.c | 66 ++--- test/val/pr1833.c | 26 +- test/val/uneval.c | 92 +++---- 14 files changed, 557 insertions(+), 557 deletions(-) diff --git a/test/val/bug1408.c b/test/val/bug1408.c index 8ecc1be68..137899315 100644 --- a/test/val/bug1408.c +++ b/test/val/bug1408.c @@ -1,41 +1,41 @@ -/* Bug #1408: Signed char type comparisons with unsigned numeric constants */ - -#include <stdio.h> - -static int failures = 0; -static signed char x = -1; - -int main(void) -{ - if (!(x > -2u)) { - printf("x > -2u should be true\n"); - ++failures; - } - if (!(x > 0u)) { - printf("x > 0u should be true\n"); - ++failures; - } - if (!(x > 255u)) { - printf("x > 255u should be true\n"); - ++failures; - } - - if (!(-2u < x)) { - printf("-2u < x should be true\n"); - ++failures; - } - if (!(0u < x)) { - printf("0u < x should be true\n"); - ++failures; - } - if (!(255u < x)) { - printf("255u < x should be true\n"); - ++failures; - } - - if (failures != 0) { - printf("Failures: %d\n", failures); - } - - return failures; -} +/* Bug #1408: Signed char type comparisons with unsigned numeric constants */ + +#include <stdio.h> + +static int failures = 0; +static signed char x = -1; + +int main(void) +{ + if (!(x > -2u)) { + printf("x > -2u should be true\n"); + ++failures; + } + if (!(x > 0u)) { + printf("x > 0u should be true\n"); + ++failures; + } + if (!(x > 255u)) { + printf("x > 255u should be true\n"); + ++failures; + } + + if (!(-2u < x)) { + printf("-2u < x should be true\n"); + ++failures; + } + if (!(0u < x)) { + printf("0u < x should be true\n"); + ++failures; + } + if (!(255u < x)) { + printf("255u < x should be true\n"); + ++failures; + } + + if (failures != 0) { + printf("Failures: %d\n", failures); + } + + return failures; +} diff --git a/test/val/bug1451-struct-ptr-to-local.c b/test/val/bug1451-struct-ptr-to-local.c index f9cca2561..2148e034d 100644 --- a/test/val/bug1451-struct-ptr-to-local.c +++ b/test/val/bug1451-struct-ptr-to-local.c @@ -1,39 +1,39 @@ -/* Bug #1451 - local struct field access via the address of the struct */ - -#include <stdio.h> - -typedef struct { - int a; - int b; -} S; - -int failures = 0; - -int main(void) -{ - S a = {2, 5}; - S b = {1, 4}; - S m[1] = {{6, 3}}; - S *p = &a; - - (&a)->a += b.a; - p->b += b.b; - m->a += b.a; - - if ((&a)->a != 3) { - ++failures; - printf("Expected 3, got %d\n", (&a)->a); - } - - if (p->b != 9) { - ++failures; - printf("Expected 9, got %d\n", p->b); - } - - if (m->a != 7) { - ++failures; - printf("Expected 7, got %d\n", m->a); - } - - return failures; -} +/* Bug #1451 - local struct field access via the address of the struct */ + +#include <stdio.h> + +typedef struct { + int a; + int b; +} S; + +int failures = 0; + +int main(void) +{ + S a = {2, 5}; + S b = {1, 4}; + S m[1] = {{6, 3}}; + S *p = &a; + + (&a)->a += b.a; + p->b += b.b; + m->a += b.a; + + if ((&a)->a != 3) { + ++failures; + printf("Expected 3, got %d\n", (&a)->a); + } + + if (p->b != 9) { + ++failures; + printf("Expected 9, got %d\n", p->b); + } + + if (m->a != 7) { + ++failures; + printf("Expected 7, got %d\n", m->a); + } + + return failures; +} diff --git a/test/val/bug1643.c b/test/val/bug1643.c index eba733511..c6237b7fb 100644 --- a/test/val/bug1643.c +++ b/test/val/bug1643.c @@ -1,12 +1,12 @@ -/* bug #1643, macro expansion in #include */ - -#define MKSTR(a) MKSTR_IMPL(a) -#define MKSTR_IMPL(a) #a -#define BUG1643_H bug1643.h - -#include MKSTR(BUG1643_H) - -int main(void) -{ - return BUG1643_RESULT; -} +/* bug #1643, macro expansion in #include */ + +#define MKSTR(a) MKSTR_IMPL(a) +#define MKSTR_IMPL(a) #a +#define BUG1643_H bug1643.h + +#include MKSTR(BUG1643_H) + +int main(void) +{ + return BUG1643_RESULT; +} diff --git a/test/val/bug1643.h b/test/val/bug1643.h index fe0423688..068263436 100644 --- a/test/val/bug1643.h +++ b/test/val/bug1643.h @@ -1,13 +1,13 @@ -/* bug #1643, macro expansion in #include */ - -#define STDIO_H <stdio.h> -#include STDIO_H - -#ifdef string -#undef string -#endif - -#define string 0!%^&*/_= -#include <string.h> - -#define BUG1643_RESULT 0 +/* bug #1643, macro expansion in #include */ + +#define STDIO_H <stdio.h> +#include STDIO_H + +#ifdef string +#undef string +#endif + +#define string 0!%^&*/_= +#include <string.h> + +#define BUG1643_RESULT 0 diff --git a/test/val/bug1690.c b/test/val/bug1690.c index 499dc6b35..78c0cda41 100644 --- a/test/val/bug1690.c +++ b/test/val/bug1690.c @@ -1,30 +1,30 @@ -/* OptCmp1 messed up with labels */ - -#include <stdio.h> - -static int failures = 0; -static unsigned int z = 0xFF23; - -int main(void) -{ - register unsigned int x = 0x200; - register unsigned int y = 0; - - do { - ++y; - } while (--x); - if (y != 0x200) { - printf("y should be 0x200, not 0x%X.\n", y); - ++failures;; - } - - if ((z -= 0x23)) { - /* Passed -- non-zero z looks like non-zero. */ - } else { - /* Failed -- only the low byte of z was tested. */ - printf("Test thinks non-zero z is zero.\n"); - ++failures; - } - - return failures; -} +/* OptCmp1 messed up with labels */ + +#include <stdio.h> + +static int failures = 0; +static unsigned int z = 0xFF23; + +int main(void) +{ + register unsigned int x = 0x200; + register unsigned int y = 0; + + do { + ++y; + } while (--x); + if (y != 0x200) { + printf("y should be 0x200, not 0x%X.\n", y); + ++failures;; + } + + if ((z -= 0x23)) { + /* Passed -- non-zero z looks like non-zero. */ + } else { + /* Failed -- only the low byte of z was tested. */ + printf("Test thinks non-zero z is zero.\n"); + ++failures; + } + + return failures; +} diff --git a/test/val/bug1822-pptest.c b/test/val/bug1822-pptest.c index eb4d23391..133d69f6b 100644 --- a/test/val/bug1822-pptest.c +++ b/test/val/bug1822-pptest.c @@ -1,25 +1,25 @@ -/* Bug #1822 - Redefined macros failed to be all undefined with a single #undef */ - -#undef F -#undef F - -#define F 1 -#define F 1 - -#undef F -#if defined F -#error #undef F fails! -#endif - -#define F 0 - -#include <stdio.h> - -int main(void) -{ - if (F != 0) - { - printf("failed: F = %d\n", F); - } - return F; -} +/* Bug #1822 - Redefined macros failed to be all undefined with a single #undef */ + +#undef F +#undef F + +#define F 1 +#define F 1 + +#undef F +#if defined F +#error #undef F fails! +#endif + +#define F 0 + +#include <stdio.h> + +int main(void) +{ + if (F != 0) + { + printf("failed: F = %d\n", F); + } + return F; +} diff --git a/test/val/bug1838.c b/test/val/bug1838.c index ea2d39a81..45978dca4 100644 --- a/test/val/bug1838.c +++ b/test/val/bug1838.c @@ -1,35 +1,35 @@ -/* Bug 1838 - function parameters declared as function types rather than function pointers */ - -#include <stdio.h> - -static int failures = 0; - -typedef int fn_t(int); - -int main(void) -{ - void foo(fn_t*); - fn_t bar; - - foo(bar); - return failures; -} - -void foo(int func(int)) -{ - int n = func(42); - - if (n != 12) { - printf("n = %d, expected: 12\n", n); - ++failures; - } -} - -int bar(int a) -{ - if (a != 42) { - printf("a = %d, expected: 42\n", a); - ++failures; - } - return 12; -} +/* Bug 1838 - function parameters declared as function types rather than function pointers */ + +#include <stdio.h> + +static int failures = 0; + +typedef int fn_t(int); + +int main(void) +{ + void foo(fn_t*); + fn_t bar; + + foo(bar); + return failures; +} + +void foo(int func(int)) +{ + int n = func(42); + + if (n != 12) { + printf("n = %d, expected: 12\n", n); + ++failures; + } +} + +int bar(int a) +{ + if (a != 42) { + printf("a = %d, expected: 42\n", a); + ++failures; + } + return 12; +} diff --git a/test/val/bug1847-struct-field-access.c b/test/val/bug1847-struct-field-access.c index 71575636f..55ead7ec7 100644 --- a/test/val/bug1847-struct-field-access.c +++ b/test/val/bug1847-struct-field-access.c @@ -1,46 +1,46 @@ -/* Bug #1847 - struct field access */ - -#include <stdio.h> - -struct TestStruct { - char a; - char b; - char c; -}; - -struct TestStruct s0[2] = { {0xFF, 0, 0xFF}, {0, 0x42, 0xFF} }; -struct TestStruct* s0Ptr = s0; - -#define TEST_READ_SUB(X, E) \ - if ((X) != (E)) { \ - printf(#X ": 0x%X, expected: 0x%X\n", (X), (E)); \ - ++failures; \ - } - -#define TEST_READ(S, I, F, E) \ - TEST_READ_SUB(S[I].F, E) \ - TEST_READ_SUB((&S[I])->F, E) \ - TEST_READ_SUB((&S[I])[0].F, E) \ - TEST_READ_SUB(S##Ptr[I].F, E) \ - TEST_READ_SUB((&S##Ptr[I])->F, E) \ - TEST_READ_SUB((&(S##Ptr[I]))[0].F, E) \ - TEST_READ_SUB((&(*S##Ptr))[I].F, E) \ - TEST_READ_SUB((&(*S##Ptr)+I)->F, E) \ - TEST_READ_SUB((S##Ptr+I)->F, E) \ - TEST_READ_SUB((S##Ptr+I)[0].F, E) - -static unsigned failures = 0; - -int main(void) { - struct TestStruct s1[2] = { {0xFF, 0, 0xFF}, {0, 42, 0xFF} }; - struct TestStruct* s1Ptr = s1; - - TEST_READ(s0, 1, b, 0x42) - TEST_READ(s1, 1, b, 42) - - if (failures > 0) { - printf("Failures: %u\n", failures); - } - - return failures; -} +/* Bug #1847 - struct field access */ + +#include <stdio.h> + +struct TestStruct { + char a; + char b; + char c; +}; + +struct TestStruct s0[2] = { {0xFF, 0, 0xFF}, {0, 0x42, 0xFF} }; +struct TestStruct* s0Ptr = s0; + +#define TEST_READ_SUB(X, E) \ + if ((X) != (E)) { \ + printf(#X ": 0x%X, expected: 0x%X\n", (X), (E)); \ + ++failures; \ + } + +#define TEST_READ(S, I, F, E) \ + TEST_READ_SUB(S[I].F, E) \ + TEST_READ_SUB((&S[I])->F, E) \ + TEST_READ_SUB((&S[I])[0].F, E) \ + TEST_READ_SUB(S##Ptr[I].F, E) \ + TEST_READ_SUB((&S##Ptr[I])->F, E) \ + TEST_READ_SUB((&(S##Ptr[I]))[0].F, E) \ + TEST_READ_SUB((&(*S##Ptr))[I].F, E) \ + TEST_READ_SUB((&(*S##Ptr)+I)->F, E) \ + TEST_READ_SUB((S##Ptr+I)->F, E) \ + TEST_READ_SUB((S##Ptr+I)[0].F, E) + +static unsigned failures = 0; + +int main(void) { + struct TestStruct s1[2] = { {0xFF, 0, 0xFF}, {0, 42, 0xFF} }; + struct TestStruct* s1Ptr = s1; + + TEST_READ(s0, 1, b, 0x42) + TEST_READ(s1, 1, b, 42) + + if (failures > 0) { + printf("Failures: %u\n", failures); + } + + return failures; +} diff --git a/test/val/const-side-effect.c b/test/val/const-side-effect.c index 7c2f074f2..cebc6f099 100644 --- a/test/val/const-side-effect.c +++ b/test/val/const-side-effect.c @@ -1,160 +1,160 @@ -/* Check code generation for constant operands with side-effects */ - -#include <stdio.h> - -static int failures = 0; - -#define TEST(X, Y, L) \ - if (x != X || y != Y) { \ - printf("Failed: " L "\nExpected: x = " #X ", y = " #Y ", got: x = %d, y = %d\n\n", x, y); \ - ++failures; \ - } - -#define TEST_LINE_UNARY(OP, RH, ID) \ - "x = " #OP "(set(&y, " #ID "), " #RH ")" - -#define TEST_UNARY(OP, RH, RS, ID) \ - x = -!(RS), y = -!(RS); \ - x = OP (set(&y, ID), RH); \ - TEST(RS, ID, TEST_LINE_UNARY(OP, RH, ID)) - -#define TEST_LINE_RHS_EFFECT(LH, OP, RH, ID) \ - "x = " #LH " " #OP " (set(&y, " #ID "), " #RH ")" - -#define TEST_LINE_LHS_EFFECT(LH, OP, RH, ID) \ - "y = (set(&x, " #ID "), " #LH ") " #OP " " #RH - -#define TEST_BINARY(LH, OP, RH, RS, ID) \ - x = -!(RS), y = -!(RS); \ - x = LH OP (set(&y, ID), RH); \ - TEST(RS, ID, TEST_LINE_RHS_EFFECT(LH, OP, RH, ID)) \ - y = -!(RS), x = -!(RS); \ - y = (set(&x, ID), LH) OP RH; \ - TEST(ID, RS, TEST_LINE_LHS_EFFECT(LH, OP, RH, ID)) \ - y = -!(RS); \ - x = (set(&x, LH), x) OP (set(&y, ID), RH); \ - TEST(RS, ID, TEST_LINE_RHS_EFFECT((set(&x, LH), x), OP, RH, ID)) \ - x = -!(RS); \ - y = (set(&x, ID), LH) OP (set(&y, RH), y); \ - TEST(ID, RS, TEST_LINE_LHS_EFFECT(LH, OP, (set(&y, RH), y), ID)) - -#define TEST_LINE_RHS_EFFECT_WITH_CAST(LT, LH, OP, RT, RH, ID) \ - "x = (" #LT ")" #LH " " #OP " (" #RT ")(set(&y, " #ID "), " #RH ")" - -#define TEST_LINE_LHS_EFFECT_WITH_CAST(LT, LH, OP, RT, RH, ID) \ - "y = (" #LT ")(set(&x, " #ID "), " #LH ") " #OP " (" #RT ")" #RH - -#define TEST_BINARY_WITH_CAST(LT, LH, OP, RT, RH, RS, ID) \ - x = -!(RS), y = -!(RS); \ - x = (LT)LH OP (RT)(set(&y, ID), RH); \ - TEST(RS, ID, TEST_LINE_RHS_EFFECT_WITH_CAST(LT, LH, OP, RT, RH, ID)) \ - y = -!(RS), x = -!(RS); \ - y = (LT)(set(&x, ID), LH) OP (RT)RH; \ - TEST(ID, RS, TEST_LINE_LHS_EFFECT_WITH_CAST(LT, LH, OP, RT, RH, ID)) \ - y = -!(RS); \ - x = (LT)(set(&x, LH), x) OP (RT)(set(&y, ID), RH); \ - TEST(RS, ID, TEST_LINE_RHS_EFFECT_WITH_CAST(LT, (set(&x, LH), x), OP, RT, RH, ID)) \ - x = -!(RS); \ - y = (LT)(set(&x, ID), LH) OP (RT)(set(&y, RH), y); \ - TEST(ID, RS, TEST_LINE_LHS_EFFECT_WITH_CAST(LT, LH, OP, RT, (set(&y, RH), y), ID)) - -void set(int *p, int q) -{ - *p = q; -} - -int twice(int a) -{ - return a * 2; -} - -int (*twicep)(int) = twice; - -void test_unary(void) -{ - int x, y; - - TEST_UNARY(+, 42, 42, 1); - TEST_UNARY(-, -42, 42, 2); - TEST_UNARY(~, ~42, 42, 3); - TEST_UNARY(!, 42, 0, 4); -} - -void test_binary_arithmetic(void) -{ - int x, y; - - TEST_BINARY(41, +, 1, 42, 1) - TEST_BINARY(42, +, 0, 42, 1) - - TEST_BINARY(43, -, 1, 42, 2) - TEST_BINARY(42, -, 0, 42, 2) - - TEST_BINARY(6, *, 7, 42, 3) - TEST_BINARY(42, *, 1, 42, 3) - TEST_BINARY(-42, *, -1, 42, 3) - - TEST_BINARY(126, /, 3, 42, 4) - TEST_BINARY(42, /, 1, 42, 4) - TEST_BINARY(-42, /, -1, 42, 4) - - TEST_BINARY(85, %, 43, 42, 5) - TEST_BINARY(10794, %, 256, 42, 5) - - TEST_BINARY(84, >>, 1, 42, 6) - TEST_BINARY(42, >>, 0, 42, 6) - TEST_BINARY(10752, >>, 8, 42, 6) - TEST_BINARY(21504, >>, 9, 42, 6) - - TEST_BINARY(21, <<, 1, 42, 7) - TEST_BINARY(42, <<, 0, 42, 7) - TEST_BINARY(42, <<, 8, 10752, 7) - - TEST_BINARY(59, &, 238, 42, 8) - TEST_BINARY(42, &, 0, 0, 8) - TEST_BINARY(42, &, -1, 42, 8) - - TEST_BINARY(34, |, 10, 42, 9) - TEST_BINARY(42, |, 0, 42, 9) - TEST_BINARY(34, |, -1, -1, 9) - - TEST_BINARY(59, ^, 17, 42, 10) - TEST_BINARY(42, ^, 0, 42, 10) - TEST_BINARY(~42, ^, -1, 42, 10) -} - -void test_binary_comparison(void) -{ - int x, y; - - TEST_BINARY(42, ==, 42, 1, 11) - - TEST_BINARY(42, !=, 43, 1, 12) - TEST_BINARY_WITH_CAST(signed char, 42, !=, long, 65536L, 1, 12) - TEST_BINARY_WITH_CAST(long, 65536L, !=, signed char, 42, 1, 12) - - TEST_BINARY(42, >, 41, 1, 13) - TEST_BINARY_WITH_CAST(int, 0, >, unsigned, 42, 0, 13) - - TEST_BINARY(42, <, 43, 1, 14) - TEST_BINARY_WITH_CAST(unsigned, 42, <, int, 0, 0, 14) - - TEST_BINARY(42, >=, 0, 1, 15) - TEST_BINARY_WITH_CAST(unsigned, 42, >=, int, 0, 1, 15) - - TEST_BINARY(42, <=, 43, 1, 16) - TEST_BINARY_WITH_CAST(int, 0, <=, unsigned, 42, 1, 16) -} - -int main(void) -{ - test_unary(); - test_binary_arithmetic(); - test_binary_comparison(); - - if (failures != 0) { - printf("Failures: %d\n", failures); - } - - return failures; -} +/* Check code generation for constant operands with side-effects */ + +#include <stdio.h> + +static int failures = 0; + +#define TEST(X, Y, L) \ + if (x != X || y != Y) { \ + printf("Failed: " L "\nExpected: x = " #X ", y = " #Y ", got: x = %d, y = %d\n\n", x, y); \ + ++failures; \ + } + +#define TEST_LINE_UNARY(OP, RH, ID) \ + "x = " #OP "(set(&y, " #ID "), " #RH ")" + +#define TEST_UNARY(OP, RH, RS, ID) \ + x = -!(RS), y = -!(RS); \ + x = OP (set(&y, ID), RH); \ + TEST(RS, ID, TEST_LINE_UNARY(OP, RH, ID)) + +#define TEST_LINE_RHS_EFFECT(LH, OP, RH, ID) \ + "x = " #LH " " #OP " (set(&y, " #ID "), " #RH ")" + +#define TEST_LINE_LHS_EFFECT(LH, OP, RH, ID) \ + "y = (set(&x, " #ID "), " #LH ") " #OP " " #RH + +#define TEST_BINARY(LH, OP, RH, RS, ID) \ + x = -!(RS), y = -!(RS); \ + x = LH OP (set(&y, ID), RH); \ + TEST(RS, ID, TEST_LINE_RHS_EFFECT(LH, OP, RH, ID)) \ + y = -!(RS), x = -!(RS); \ + y = (set(&x, ID), LH) OP RH; \ + TEST(ID, RS, TEST_LINE_LHS_EFFECT(LH, OP, RH, ID)) \ + y = -!(RS); \ + x = (set(&x, LH), x) OP (set(&y, ID), RH); \ + TEST(RS, ID, TEST_LINE_RHS_EFFECT((set(&x, LH), x), OP, RH, ID)) \ + x = -!(RS); \ + y = (set(&x, ID), LH) OP (set(&y, RH), y); \ + TEST(ID, RS, TEST_LINE_LHS_EFFECT(LH, OP, (set(&y, RH), y), ID)) + +#define TEST_LINE_RHS_EFFECT_WITH_CAST(LT, LH, OP, RT, RH, ID) \ + "x = (" #LT ")" #LH " " #OP " (" #RT ")(set(&y, " #ID "), " #RH ")" + +#define TEST_LINE_LHS_EFFECT_WITH_CAST(LT, LH, OP, RT, RH, ID) \ + "y = (" #LT ")(set(&x, " #ID "), " #LH ") " #OP " (" #RT ")" #RH + +#define TEST_BINARY_WITH_CAST(LT, LH, OP, RT, RH, RS, ID) \ + x = -!(RS), y = -!(RS); \ + x = (LT)LH OP (RT)(set(&y, ID), RH); \ + TEST(RS, ID, TEST_LINE_RHS_EFFECT_WITH_CAST(LT, LH, OP, RT, RH, ID)) \ + y = -!(RS), x = -!(RS); \ + y = (LT)(set(&x, ID), LH) OP (RT)RH; \ + TEST(ID, RS, TEST_LINE_LHS_EFFECT_WITH_CAST(LT, LH, OP, RT, RH, ID)) \ + y = -!(RS); \ + x = (LT)(set(&x, LH), x) OP (RT)(set(&y, ID), RH); \ + TEST(RS, ID, TEST_LINE_RHS_EFFECT_WITH_CAST(LT, (set(&x, LH), x), OP, RT, RH, ID)) \ + x = -!(RS); \ + y = (LT)(set(&x, ID), LH) OP (RT)(set(&y, RH), y); \ + TEST(ID, RS, TEST_LINE_LHS_EFFECT_WITH_CAST(LT, LH, OP, RT, (set(&y, RH), y), ID)) + +void set(int *p, int q) +{ + *p = q; +} + +int twice(int a) +{ + return a * 2; +} + +int (*twicep)(int) = twice; + +void test_unary(void) +{ + int x, y; + + TEST_UNARY(+, 42, 42, 1); + TEST_UNARY(-, -42, 42, 2); + TEST_UNARY(~, ~42, 42, 3); + TEST_UNARY(!, 42, 0, 4); +} + +void test_binary_arithmetic(void) +{ + int x, y; + + TEST_BINARY(41, +, 1, 42, 1) + TEST_BINARY(42, +, 0, 42, 1) + + TEST_BINARY(43, -, 1, 42, 2) + TEST_BINARY(42, -, 0, 42, 2) + + TEST_BINARY(6, *, 7, 42, 3) + TEST_BINARY(42, *, 1, 42, 3) + TEST_BINARY(-42, *, -1, 42, 3) + + TEST_BINARY(126, /, 3, 42, 4) + TEST_BINARY(42, /, 1, 42, 4) + TEST_BINARY(-42, /, -1, 42, 4) + + TEST_BINARY(85, %, 43, 42, 5) + TEST_BINARY(10794, %, 256, 42, 5) + + TEST_BINARY(84, >>, 1, 42, 6) + TEST_BINARY(42, >>, 0, 42, 6) + TEST_BINARY(10752, >>, 8, 42, 6) + TEST_BINARY(21504, >>, 9, 42, 6) + + TEST_BINARY(21, <<, 1, 42, 7) + TEST_BINARY(42, <<, 0, 42, 7) + TEST_BINARY(42, <<, 8, 10752, 7) + + TEST_BINARY(59, &, 238, 42, 8) + TEST_BINARY(42, &, 0, 0, 8) + TEST_BINARY(42, &, -1, 42, 8) + + TEST_BINARY(34, |, 10, 42, 9) + TEST_BINARY(42, |, 0, 42, 9) + TEST_BINARY(34, |, -1, -1, 9) + + TEST_BINARY(59, ^, 17, 42, 10) + TEST_BINARY(42, ^, 0, 42, 10) + TEST_BINARY(~42, ^, -1, 42, 10) +} + +void test_binary_comparison(void) +{ + int x, y; + + TEST_BINARY(42, ==, 42, 1, 11) + + TEST_BINARY(42, !=, 43, 1, 12) + TEST_BINARY_WITH_CAST(signed char, 42, !=, long, 65536L, 1, 12) + TEST_BINARY_WITH_CAST(long, 65536L, !=, signed char, 42, 1, 12) + + TEST_BINARY(42, >, 41, 1, 13) + TEST_BINARY_WITH_CAST(int, 0, >, unsigned, 42, 0, 13) + + TEST_BINARY(42, <, 43, 1, 14) + TEST_BINARY_WITH_CAST(unsigned, 42, <, int, 0, 0, 14) + + TEST_BINARY(42, >=, 0, 1, 15) + TEST_BINARY_WITH_CAST(unsigned, 42, >=, int, 0, 1, 15) + + TEST_BINARY(42, <=, 43, 1, 16) + TEST_BINARY_WITH_CAST(int, 0, <=, unsigned, 42, 1, 16) +} + +int main(void) +{ + test_unary(); + test_binary_arithmetic(); + test_binary_comparison(); + + if (failures != 0) { + printf("Failures: %d\n", failures); + } + + return failures; +} diff --git a/test/val/counter.c b/test/val/counter.c index 4efa18359..1867b1a66 100644 --- a/test/val/counter.c +++ b/test/val/counter.c @@ -1,60 +1,60 @@ -/* Tests for predefined macro __COUNTER__ */ - -#include <stdio.h> - -static int failures = 0; - -#if __COUNTER__ /* 0 */ -# error __COUNTER__ should begin at 0! -#elif __COUNTER__ == 1 /* 1 */ -# define CONCAT(a,b) CONCAT_impl_(a,b) -# define CONCAT_impl_(a,b) a##b -#endif - -#line 42 "What is the answer?" -int CONCAT(ident,__COUNTER__)[0+__LINE__] = {__LINE__}, CONCAT(ident,__COUNTER__)[0+__LINE__] = {__LINE__}; /* 2,3 */ - -#if __COUNTER__ == 4 ? 1 || __COUNTER__ : 0 && __COUNTER__ /* 4,5,6 */ -_Static_assert(__COUNTER__ == 7, "__COUNTER__ should be 7 here!"); /* 7 */ -# define GET_COUNTER() __COUNTER__ -# define GET_LINE() __LINE__ -# warning __COUNTER__ in #warning is just output as text and will never increase! -#else -# if __COUNTER__ + __COUNTER__ + __COUNTER__ /* Skipped as a whole and not incrementing */ -# endif -# error __COUNTER__ is skipped along with the whole #error line and will never increase anyways! */ -#endif - -#include "counter.h" -#include "counter.h" - -_Static_assert(GET_COUNTER() == 10, "__COUNTER__ should be 10 here!"); /* 10 */ - -int main(void) -{ - if (ident2[0] != 42) { - printf("Expected ident2[0]: %s, got: %s\n", 42, ident2[0]); - ++failures; - } - - if (ident3[0] != 42) { - printf("Expected ident3[0]: %s, got: %s\n", 42, ident3[0]); - ++failures; - } - - if (ident8 != 8) { - printf("Expected ident8: %s, got: %s\n", 8, ident8); - ++failures; - } - - if (ident9 != 9) { - printf("Expected ident9: %s, got: %s\n", 9, ident9); - ++failures; - } - - if (failures != 0) { - printf("Failures: %d\n", failures); - } - - return failures; -} +/* Tests for predefined macro __COUNTER__ */ + +#include <stdio.h> + +static int failures = 0; + +#if __COUNTER__ /* 0 */ +# error __COUNTER__ should begin at 0! +#elif __COUNTER__ == 1 /* 1 */ +# define CONCAT(a,b) CONCAT_impl_(a,b) +# define CONCAT_impl_(a,b) a##b +#endif + +#line 42 "What is the answer?" +int CONCAT(ident,__COUNTER__)[0+__LINE__] = {__LINE__}, CONCAT(ident,__COUNTER__)[0+__LINE__] = {__LINE__}; /* 2,3 */ + +#if __COUNTER__ == 4 ? 1 || __COUNTER__ : 0 && __COUNTER__ /* 4,5,6 */ +_Static_assert(__COUNTER__ == 7, "__COUNTER__ should be 7 here!"); /* 7 */ +# define GET_COUNTER() __COUNTER__ +# define GET_LINE() __LINE__ +# warning __COUNTER__ in #warning is just output as text and will never increase! +#else +# if __COUNTER__ + __COUNTER__ + __COUNTER__ /* Skipped as a whole and not incrementing */ +# endif +# error __COUNTER__ is skipped along with the whole #error line and will never increase anyways! */ +#endif + +#include "counter.h" +#include "counter.h" + +_Static_assert(GET_COUNTER() == 10, "__COUNTER__ should be 10 here!"); /* 10 */ + +int main(void) +{ + if (ident2[0] != 42) { + printf("Expected ident2[0]: %s, got: %s\n", 42, ident2[0]); + ++failures; + } + + if (ident3[0] != 42) { + printf("Expected ident3[0]: %s, got: %s\n", 42, ident3[0]); + ++failures; + } + + if (ident8 != 8) { + printf("Expected ident8: %s, got: %s\n", 8, ident8); + ++failures; + } + + if (ident9 != 9) { + printf("Expected ident9: %s, got: %s\n", 9, ident9); + ++failures; + } + + if (failures != 0) { + printf("Failures: %d\n", failures); + } + + return failures; +} diff --git a/test/val/counter.h b/test/val/counter.h index b6b5a98e2..b97cbf54d 100644 --- a/test/val/counter.h +++ b/test/val/counter.h @@ -1,4 +1,4 @@ -/* Tests for predefined macro __COUNTER__ */ - -#line GET_COUNTER() /* 1st: 8; 2nd: 9 */ -int CONCAT(ident,GET_LINE()) = GET_LINE(); +/* Tests for predefined macro __COUNTER__ */ + +#line GET_COUNTER() /* 1st: 8; 2nd: 9 */ +int CONCAT(ident,GET_LINE()) = GET_LINE(); diff --git a/test/val/opsize.c b/test/val/opsize.c index 20c7f0511..8ec49e8a8 100644 --- a/test/val/opsize.c +++ b/test/val/opsize.c @@ -1,33 +1,33 @@ - -/* Test for result types of certain unary operations */ - -#include <stdio.h> - -signed char x; -struct S { - unsigned char a : 3; - unsigned int b : 3; -} s; - -int main(void) -{ - _Static_assert(sizeof (++x) == sizeof (char), "++x result should not have promoted type"); - _Static_assert(sizeof (--x) == sizeof (char), "--x result should not have promoted type"); - _Static_assert(sizeof (x++) == sizeof (char), "x++ result should not have promoted type"); - _Static_assert(sizeof (x--) == sizeof (char), "x-- result should not have promoted type"); - _Static_assert(sizeof (x=0) == sizeof (char), "x=0 result should not have promoted type"); - - _Static_assert(sizeof (+x) == sizeof (int), "+x result should have promoted type"); - _Static_assert(sizeof (-x) == sizeof (int), "-x result should have promoted type"); - _Static_assert(sizeof (~x) == sizeof (int), "~x result should have promoted type"); - - _Static_assert(sizeof (+s.a) == sizeof (int), "+s.a result should have promoted type"); - _Static_assert(sizeof (-s.a) == sizeof (int), "-s.a result should have promoted type"); - _Static_assert(sizeof (~s.a) == sizeof (int), "~s.a result should have promoted type"); - - _Static_assert(sizeof (+s.b) == sizeof (int), "+s.b result should have promoted type"); - _Static_assert(sizeof (-s.b) == sizeof (int), "-s.b result should have promoted type"); - _Static_assert(sizeof (~s.b) == sizeof (int), "~s.b result should have promoted type"); - - return 0; -} + +/* Test for result types of certain unary operations */ + +#include <stdio.h> + +signed char x; +struct S { + unsigned char a : 3; + unsigned int b : 3; +} s; + +int main(void) +{ + _Static_assert(sizeof (++x) == sizeof (char), "++x result should not have promoted type"); + _Static_assert(sizeof (--x) == sizeof (char), "--x result should not have promoted type"); + _Static_assert(sizeof (x++) == sizeof (char), "x++ result should not have promoted type"); + _Static_assert(sizeof (x--) == sizeof (char), "x-- result should not have promoted type"); + _Static_assert(sizeof (x=0) == sizeof (char), "x=0 result should not have promoted type"); + + _Static_assert(sizeof (+x) == sizeof (int), "+x result should have promoted type"); + _Static_assert(sizeof (-x) == sizeof (int), "-x result should have promoted type"); + _Static_assert(sizeof (~x) == sizeof (int), "~x result should have promoted type"); + + _Static_assert(sizeof (+s.a) == sizeof (int), "+s.a result should have promoted type"); + _Static_assert(sizeof (-s.a) == sizeof (int), "-s.a result should have promoted type"); + _Static_assert(sizeof (~s.a) == sizeof (int), "~s.a result should have promoted type"); + + _Static_assert(sizeof (+s.b) == sizeof (int), "+s.b result should have promoted type"); + _Static_assert(sizeof (-s.b) == sizeof (int), "-s.b result should have promoted type"); + _Static_assert(sizeof (~s.b) == sizeof (int), "~s.b result should have promoted type"); + + return 0; +} diff --git a/test/val/pr1833.c b/test/val/pr1833.c index bdc820811..177069eb4 100644 --- a/test/val/pr1833.c +++ b/test/val/pr1833.c @@ -1,13 +1,13 @@ -/* Test for PR #1833 fixes */ - -#define char 1 - -#if char && !int && L'A' - L'B' == 'A' - 'B' && L'A' == 'A' -#else -#error -#endif - -int main(void) -{ - return 0; -} +/* Test for PR #1833 fixes */ + +#define char 1 + +#if char && !int && L'A' - L'B' == 'A' - 'B' && L'A' == 'A' +#else +#error +#endif + +int main(void) +{ + return 0; +} diff --git a/test/val/uneval.c b/test/val/uneval.c index 50e00973a..fe42cc592 100644 --- a/test/val/uneval.c +++ b/test/val/uneval.c @@ -1,46 +1,46 @@ -/* - Copyright 2021, The cc65 Authors - - This software is provided "as-is", without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications; and, to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated, but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. -*/ - -/* - Test of deferred operations in unevaluated context resulted from 'sizeof' and - short-circuited code-paths in AND, OR and tenary operations. - - https://github.com/cc65/cc65/issues/1406 -*/ - -#include <stdio.h> - -int main(void) -{ - int i = 0; - int j = 0; - - sizeof(i++ | j--); - 0 && (i++ | j--); - 1 || (i++ | j--); - 0 ? i++ | j-- : 0; - 1 ? 0 : i++ | j--; - - if (i != 0 || j != 0) { - printf("i = %d, j = %d\n", i, j); - printf("Failures: %d\n", i - j); - } - return i - j; -} +/* + Copyright 2021, The cc65 Authors + + This software is provided "as-is", without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications; and, to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated, but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Test of deferred operations in unevaluated context resulted from 'sizeof' and + short-circuited code-paths in AND, OR and tenary operations. + + https://github.com/cc65/cc65/issues/1406 +*/ + +#include <stdio.h> + +int main(void) +{ + int i = 0; + int j = 0; + + sizeof(i++ | j--); + 0 && (i++ | j--); + 1 || (i++ | j--); + 0 ? i++ | j-- : 0; + 1 ? 0 : i++ | j--; + + if (i != 0 || j != 0) { + printf("i = %d, j = %d\n", i, j); + printf("Failures: %d\n", i - j); + } + return i - j; +} From 133507b031fe6b5e31fa2732651363521728576f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 29 Sep 2022 17:55:09 +0800 Subject: [PATCH 1825/2710] Fixed line info for #pragma messages and diagnostics. --- src/cc65/preproc.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 0835bac1e..99a8af116 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -3025,6 +3025,7 @@ static int ParseDirectives (unsigned ModeFlags) if (!PPSkip) { if ((ModeFlags & MSM_IN_ARG_LIST) == 0) { DoPragma (); + return Whitespace; } else { PPError ("Embedded #pragma directive within macro arguments is unsupported"); } @@ -3153,16 +3154,12 @@ static void PreprocessDirective (StrBuf* Source, StrBuf* Target, unsigned ModeFl ** whitespace and comments, then do macro replacement. */ { - int OldIndex = SB_GetIndex (Source); MacroExp E; SkipWhitespace (0); InitMacroExp (&E); ReplaceMacros (Source, Target, &E, ModeFlags | MSM_IN_DIRECTIVE); DoneMacroExp (&E); - - /* Restore the source input index */ - SB_SetIndex (Source, OldIndex); } @@ -3186,7 +3183,9 @@ void Preprocess (void) AddPreLine (PLine); /* Add leading whitespace to prettify preprocessor output */ - AppendIndent (PLine, SB_GetIndex (Line)); + if (CurC != '\0') { + AppendIndent (PLine, SB_GetIndex (Line)); + } /* Expand macros if any */ InitMacroExp (&E); From 376afd0edbb3bd152a21e6c686d0300079d75a84 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 29 Sep 2022 18:23:32 +0800 Subject: [PATCH 1826/2710] Fixed trailing spaces in some testcases. --- test/val/bug1838.c | 4 ++-- test/val/bug1847-struct-field-access.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/val/bug1838.c b/test/val/bug1838.c index 45978dca4..38becf5e9 100644 --- a/test/val/bug1838.c +++ b/test/val/bug1838.c @@ -1,11 +1,11 @@ /* Bug 1838 - function parameters declared as function types rather than function pointers */ #include <stdio.h> - + static int failures = 0; typedef int fn_t(int); - + int main(void) { void foo(fn_t*); diff --git a/test/val/bug1847-struct-field-access.c b/test/val/bug1847-struct-field-access.c index 55ead7ec7..f7e19e40b 100644 --- a/test/val/bug1847-struct-field-access.c +++ b/test/val/bug1847-struct-field-access.c @@ -41,6 +41,6 @@ int main(void) { if (failures > 0) { printf("Failures: %u\n", failures); } - + return failures; } From 1cbd6bc3f93ad029d30e5a3062c5db483a7a8c4e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 29 Sep 2022 18:23:41 +0800 Subject: [PATCH 1827/2710] Fixed comments in test/val/bug1462-biefield-assign-4.c. --- test/val/bug1462-biefield-assign-4.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/val/bug1462-biefield-assign-4.c b/test/val/bug1462-biefield-assign-4.c index f811ddbd6..e607dbd25 100644 --- a/test/val/bug1462-biefield-assign-4.c +++ b/test/val/bug1462-biefield-assign-4.c @@ -1,6 +1,6 @@ /* issue #1462 - Bit-fields are still broken */ -/* More tests on "op= expression result value" that a naive fix might fail with */ +/* When (un-)signedness involves with integral promotion */ #include <stdio.h> #include <limits.h> From 96df4e8b5e894b7f3837c4a2f033196ac569f3db Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 29 Sep 2022 19:38:32 +0800 Subject: [PATCH 1828/2710] Added a diagnostic level "note" for infomative messages. --- src/cc65/error.c | 119 +++++++++++++++++++++++++++++++++++------------ src/cc65/error.h | 17 +++++-- 2 files changed, 102 insertions(+), 34 deletions(-) diff --git a/src/cc65/error.c b/src/cc65/error.c index f0e023969..e99465c87 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -108,6 +108,36 @@ Collection DiagnosticStrBufs; +/*****************************************************************************/ +/* Helpers */ +/*****************************************************************************/ + + + +static const char* GetDiagnosticFileName (void) +/* Get the source file name where the diagnostic info refers to */ +{ + if (CurTok.LI) { + return GetInputName (CurTok.LI); + } else { + return GetCurrentFile (); + } +} + + + +static unsigned GetDiagnosticLineNum (void) +/* Get the source line number where the diagnostic info refers to */ +{ + if (CurTok.LI) { + return GetInputLine (CurTok.LI); + } else { + return GetCurrentLine (); + } +} + + + /*****************************************************************************/ /* Handling of fatal errors */ /*****************************************************************************/ @@ -119,17 +149,7 @@ void Fatal (const char* Format, ...) { va_list ap; - const char* FileName; - unsigned LineNum; - if (CurTok.LI) { - FileName = GetInputName (CurTok.LI); - LineNum = GetInputLine (CurTok.LI); - } else { - FileName = GetCurrentFile (); - LineNum = GetCurrentLine (); - } - - fprintf (stderr, "%s:%u: Fatal: ", FileName, LineNum); + fprintf (stderr, "%s:%u: Fatal: ", GetDiagnosticFileName (), GetDiagnosticLineNum ()); va_start (ap, Format); vfprintf (stderr, Format, ap); @@ -145,22 +165,12 @@ void Fatal (const char* Format, ...) void Internal (const char* Format, ...) -/* Print a message about an internal compiler error and die. */ +/* Print a message about an internal compiler error and die */ { va_list ap; - const char* FileName; - unsigned LineNum; - if (CurTok.LI) { - FileName = GetInputName (CurTok.LI); - LineNum = GetInputLine (CurTok.LI); - } else { - FileName = GetCurrentFile (); - LineNum = GetCurrentLine (); - } - fprintf (stderr, "%s:%u: Internal compiler error:\n", - FileName, LineNum); + GetDiagnosticFileName (), GetDiagnosticLineNum ()); va_start (ap, Format); vfprintf (stderr, Format, ap); @@ -184,7 +194,7 @@ void Internal (const char* Format, ...) static void IntError (const char* Filename, unsigned LineNo, const char* Msg, va_list ap) -/* Print an error message - internal function*/ +/* Print an error message - internal function */ { fprintf (stderr, "%s:%u: Error: ", Filename, LineNo); vfprintf (stderr, Msg, ap); @@ -206,7 +216,7 @@ void Error (const char* Format, ...) { va_list ap; va_start (ap, Format); - IntError (GetInputName (CurTok.LI), GetInputLine (CurTok.LI), Format, ap); + IntError (GetDiagnosticFileName (), GetDiagnosticLineNum (), Format, ap); va_end (ap); } @@ -224,7 +234,7 @@ void LIError (const LineInfo* LI, const char* Format, ...) void PPError (const char* Format, ...) -/* Print an error message. For use within the preprocessor. */ +/* Print an error message. For use within the preprocessor */ { va_list ap; va_start (ap, Format); @@ -241,7 +251,7 @@ void PPError (const char* Format, ...) static void IntWarning (const char* Filename, unsigned LineNo, const char* Msg, va_list ap) -/* Print warning message - internal function. */ +/* Print a warning message - internal function */ { if (IS_Get (&WarningsAreErrors)) { @@ -265,11 +275,11 @@ static void IntWarning (const char* Filename, unsigned LineNo, const char* Msg, void Warning (const char* Format, ...) -/* Print warning message. */ +/* Print a warning message */ { va_list ap; va_start (ap, Format); - IntWarning (GetInputName (CurTok.LI), GetInputLine (CurTok.LI), Format, ap); + IntWarning (GetDiagnosticFileName (), GetDiagnosticLineNum (), Format, ap); va_end (ap); } @@ -287,7 +297,7 @@ void LIWarning (const LineInfo* LI, const char* Format, ...) void PPWarning (const char* Format, ...) -/* Print warning message. For use within the preprocessor. */ +/* Print a warning message. For use within the preprocessor */ { va_list ap; va_start (ap, Format); @@ -326,6 +336,55 @@ void ListWarnings (FILE* F) +/*****************************************************************************/ +/* Handling of other infos */ +/*****************************************************************************/ + + + +static void IntNote (const char* Filename, unsigned LineNo, const char* Msg, va_list ap) +/* Print a note message - internal function */ +{ + fprintf (stderr, "%s:%u: Note: ", Filename, LineNo); + vfprintf (stderr, Msg, ap); + fprintf (stderr, "\n"); +} + + + +void Note (const char* Format, ...) +/* Print a note message */ +{ + va_list ap; + va_start (ap, Format); + IntNote (GetDiagnosticFileName (), GetDiagnosticLineNum (), Format, ap); + va_end (ap); +} + + + +void LINote (const LineInfo* LI, const char* Format, ...) +/* Print a note message with the line info given explicitly */ +{ + va_list ap; + va_start (ap, Format); + IntNote (GetInputName (LI), GetInputLine (LI), Format, ap); + va_end (ap); +} + + + +void PPNote (const char* Format, ...) +/* Print a note message. For use within the preprocessor */ +{ + va_list ap; + va_start (ap, Format); + IntNote (GetCurrentFile(), GetCurrentLine(), Format, ap); + va_end (ap); +} + + + /*****************************************************************************/ /* Code */ /*****************************************************************************/ diff --git a/src/cc65/error.h b/src/cc65/error.h index c4420c434..7fcb03467 100644 --- a/src/cc65/error.h +++ b/src/cc65/error.h @@ -92,7 +92,7 @@ void Fatal (const char* Format, ...) attribute ((noreturn, format (printf, 1, 2) /* Print a message about a fatal error and die */ void Internal (const char* Format, ...) attribute ((noreturn, format (printf, 1, 2))); -/* Print a message about an internal compiler error and die. */ +/* Print a message about an internal compiler error and die */ void Error (const char* Format, ...) attribute ((format (printf, 1, 2))); /* Print an error message */ @@ -101,16 +101,16 @@ void LIError (const LineInfo* LI, const char* Format, ...) attribute ((format (p /* Print an error message with the line info given explicitly */ void PPError (const char* Format, ...) attribute ((format (printf, 1, 2))); -/* Print an error message. For use within the preprocessor. */ +/* Print an error message. For use within the preprocessor */ void Warning (const char* Format, ...) attribute ((format (printf, 1, 2))); -/* Print warning message. */ +/* Print a warning message */ void LIWarning (const LineInfo* LI, const char* Format, ...) attribute ((format (printf, 2, 3))); /* Print a warning message with the line info given explicitly */ void PPWarning (const char* Format, ...) attribute ((format (printf, 1, 2))); -/* Print warning message. For use within the preprocessor. */ +/* Print a warning message. For use within the preprocessor */ IntStack* FindWarning (const char* Name); /* Search for a warning in the WarnMap table and return a pointer to the @@ -120,6 +120,15 @@ IntStack* FindWarning (const char* Name); void ListWarnings (FILE* F); /* Print a list of warning types/names to the given file */ +void Note (const char* Format, ...) attribute ((format (printf, 1, 2))); +/* Print a note message */ + +void LINote (const LineInfo* LI, const char* Format, ...) attribute ((format (printf, 2, 3))); +/* Print a note message with the line info given explicitly */ + +void PPNote (const char* Format, ...) attribute ((format (printf, 1, 2))); +/* Print a note message. For use within the preprocessor */ + void ErrorReport (void); /* Report errors (called at end of compile) */ From 29c9cb3e0063c8cfe6fbf64e4ad53dc41d462298 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 29 Sep 2022 19:38:32 +0800 Subject: [PATCH 1829/2710] Improved diagnostics on conflicting type declarations. --- src/cc65/symtab.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index aa4a9a44a..7de889d39 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -702,6 +702,7 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags if (SCType == SC_TYPEDEF) { if (IsDistinctRedef (E_Type, T, TC_IDENTICAL, TCF_MASK_QUAL)) { Error ("Conflicting types for typedef '%s'", Entry->Name); + Note ("'%s' vs '%s'", GetFullTypeName (T), GetFullTypeName (E_Type)); Entry = 0; } } else { @@ -728,7 +729,7 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags /* New type must be compatible with the composite prototype */ if (IsDistinctRedef (E_Type, T, TC_EQUAL, TCF_MASK_QUAL)) { Error ("Conflicting function types for '%s'", Entry->Name); - TypeCompatibilityDiagnostic (T, E_Type, 0, "'%s' vs '%s'"); + Note ("'%s' vs '%s'", GetFullTypeName (T), GetFullTypeName (E_Type)); Entry = 0; } else { /* Refine the existing composite prototype with this new @@ -760,6 +761,7 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags IsDistinctRedef (E_Type + 1, T + 1, TC_IDENTICAL, TCF_MASK_QUAL)) { /* Conflicting element types */ Error ("Conflicting array types for '%s[]'", Entry->Name); + Note ("'%s' vs '%s'", GetFullTypeName (T), GetFullTypeName (E_Type)); Entry = 0; } else { /* Check if we have a size in the existing definition */ @@ -777,6 +779,7 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags Entry = 0; } else if (IsDistinctRedef (E_Type, T, TC_EQUAL, TCF_MASK_QUAL)) { Error ("Conflicting types for '%s'", Entry->Name); + Note ("'%s' vs '%s'", GetFullTypeName (T), GetFullTypeName (E_Type)); Entry = 0; } else if (E_SCType == SC_ENUMERATOR) { /* Enumerators aren't allowed to be redeclared at all, even if From 715aa919e67ab0808d18badd8dac35e6553ba3e5 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 29 Sep 2022 19:47:31 +0800 Subject: [PATCH 1830/2710] C++ style comments in C89 mode will cause errors only once per input file. --- src/cc65/global.c | 1 + src/cc65/global.h | 1 + src/cc65/preproc.c | 7 ++++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/cc65/global.c b/src/cc65/global.c index 8b9838dc5..b2c3ef0a0 100644 --- a/src/cc65/global.c +++ b/src/cc65/global.c @@ -49,6 +49,7 @@ unsigned char DebugInfo = 0; /* Add debug info to the obj */ unsigned char PreprocessOnly = 0; /* Just preprocess the input */ unsigned char DebugOptOutput = 0; /* Output debug stuff */ unsigned RegisterSpace = 6; /* Space available for register vars */ +unsigned AllowNewComments = 0; /* Allow new style comments in C89 mode */ /* Stackable options */ IntStack WritableStrings = INTSTACK(0); /* Literal strings are r/w */ diff --git a/src/cc65/global.h b/src/cc65/global.h index 266035346..ba7105130 100644 --- a/src/cc65/global.h +++ b/src/cc65/global.h @@ -57,6 +57,7 @@ extern unsigned char DebugInfo; /* Add debug info to the obj */ extern unsigned char PreprocessOnly; /* Just preprocess the input */ extern unsigned char DebugOptOutput; /* Output debug stuff */ extern unsigned RegisterSpace; /* Space available for register vars */ +extern unsigned AllowNewComments; /* Allow new style comments in C89 mode */ /* Stackable options */ extern IntStack WritableStrings; /* Literal strings are r/w */ diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 020df011a..56331266f 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -402,8 +402,10 @@ static void NewStyleComment (void) /* Remove a new style C comment from line. */ { /* Diagnose if this is unsupported */ - if (IS_Get (&Standard) < STD_C99) { + if (IS_Get (&Standard) < STD_C99 && !AllowNewComments) { PPError ("C++ style comments are not allowed in C89"); + PPNote ("(this will be reported only once per input file)"); + AllowNewComments = 1; } /* Beware: Because line continuation chars are handled when reading @@ -1800,6 +1802,9 @@ void PreprocessBegin (void) /* Remember to update source file location in preprocess-only mode */ FileChanged = 1; + + /* Enable diagnostics on new style comments in C89 mode */ + AllowNewComments = 0; } From 9900e7361de858198ec7b06f6d770bf8c061d32f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 30 Sep 2022 09:09:09 +0800 Subject: [PATCH 1831/2710] #pragma message now uses the new "note" level message routine. --- src/cc65/pragma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index b0478ce2a..83ed362c8 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -784,7 +784,7 @@ static void IntPragma (StrBuf* B, IntStack* Stack, long Low, long High) static void MakeMessage (const char* Message) { - fprintf (stderr, "%s:%u: Note: %s\n", GetInputName (CurTok.LI), GetInputLine (CurTok.LI), Message); + Note ("%s", Message); } From f6003b8e8c669c7b171f7bebdd91253cd25711a7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 30 Sep 2022 09:41:54 +0800 Subject: [PATCH 1832/2710] Renamed some testcases. --- test/val/{assign-use1.c => assign-shift-use1.c} | 0 test/val/{fields.c => bitfield-1.c} | 0 test/val/{char-bitfield.c => bitfield-char-1.c} | 0 test/val/{call1.c => boolean-call1.c} | 0 test/val/{bool3.c => compare-bool3.c} | 0 test/val/{nestfor.c => for-nested.c} | 0 test/val/{casttochar.c => type-cast-to-char.c} | 0 test/val/{char-promote.c => type-char-promote.c} | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename test/val/{assign-use1.c => assign-shift-use1.c} (100%) rename test/val/{fields.c => bitfield-1.c} (100%) rename test/val/{char-bitfield.c => bitfield-char-1.c} (100%) rename test/val/{call1.c => boolean-call1.c} (100%) rename test/val/{bool3.c => compare-bool3.c} (100%) rename test/val/{nestfor.c => for-nested.c} (100%) rename test/val/{casttochar.c => type-cast-to-char.c} (100%) rename test/val/{char-promote.c => type-char-promote.c} (100%) diff --git a/test/val/assign-use1.c b/test/val/assign-shift-use1.c similarity index 100% rename from test/val/assign-use1.c rename to test/val/assign-shift-use1.c diff --git a/test/val/fields.c b/test/val/bitfield-1.c similarity index 100% rename from test/val/fields.c rename to test/val/bitfield-1.c diff --git a/test/val/char-bitfield.c b/test/val/bitfield-char-1.c similarity index 100% rename from test/val/char-bitfield.c rename to test/val/bitfield-char-1.c diff --git a/test/val/call1.c b/test/val/boolean-call1.c similarity index 100% rename from test/val/call1.c rename to test/val/boolean-call1.c diff --git a/test/val/bool3.c b/test/val/compare-bool3.c similarity index 100% rename from test/val/bool3.c rename to test/val/compare-bool3.c diff --git a/test/val/nestfor.c b/test/val/for-nested.c similarity index 100% rename from test/val/nestfor.c rename to test/val/for-nested.c diff --git a/test/val/casttochar.c b/test/val/type-cast-to-char.c similarity index 100% rename from test/val/casttochar.c rename to test/val/type-cast-to-char.c diff --git a/test/val/char-promote.c b/test/val/type-char-promote.c similarity index 100% rename from test/val/char-promote.c rename to test/val/type-char-promote.c From 9eab36b95a4890f86c5f84e9f4fae7033f933778 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 30 Sep 2022 14:32:08 +0800 Subject: [PATCH 1833/2710] Fixed block-scope extern declarations visibility. Fixed missing file-scope static function codegen output in a rare care. --- src/cc65/locals.c | 8 +++++--- src/cc65/symentry.h | 4 ++-- src/cc65/symtab.c | 49 +++++++++++++++++++++++++++++++++++---------- test/val/extern.c | 31 ++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 16 deletions(-) create mode 100644 test/val/extern.c diff --git a/src/cc65/locals.c b/src/cc65/locals.c index ad36bded0..5f182f061 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -465,8 +465,8 @@ static void ParseOneDecl (const DeclSpec* Spec) /* The default storage class could be wrong. Just clear them */ Decl.StorageClass &= ~SC_STORAGEMASK; - /* This is always a declaration */ - Decl.StorageClass |= SC_DECL; + /* This is always an extern declaration */ + Decl.StorageClass |= SC_DECL | SC_EXTERN; } /* If we don't have a name, this was flagged as an error earlier. @@ -524,7 +524,9 @@ static void ParseOneDecl (const DeclSpec* Spec) if ((Decl.StorageClass & SC_EXTERN) == SC_EXTERN || (Decl.StorageClass & SC_FUNC) == SC_FUNC) { - /* Add the global symbol to the local symbol table */ + /* Add the global symbol to both of the global and local symbol + ** tables. + */ AddGlobalSym (Decl.Ident, Decl.Type, Decl.StorageClass); } else { /* Add the local symbol to the local symbol table */ diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index bcf586510..52e590e2e 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -105,8 +105,8 @@ struct CodeEntry; #define SC_SPADJUSTMENT 0x400000U #define SC_GOTO_IND 0x800000U /* Indirect goto */ -#define SC_ALIAS 0x01000000U /* Alias of anonymous field */ -#define SC_FICTITIOUS 0x02000000U /* Symbol is fictitious */ +#define SC_ALIAS 0x01000000U /* Alias of global or anonymous field */ +#define SC_FICTITIOUS 0x02000000U /* Symbol is fictitious (for error recovery) */ #define SC_HAVEFAM 0x04000000U /* Type has a Flexible Array Member */ diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index aa4a9a44a..4d293ac3c 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -567,6 +567,11 @@ static SymEntry* FindSymInTree (const SymTable* Tab, const char* Name) /* Try to find the symbol in this table */ SymEntry* E = FindSymInTable (Tab, Name, Hash); + while (E != 0 && (E->Flags & SC_ALIAS) == SC_ALIAS) { + /* Get the aliased entry */ + E = E->V.A.Field; + } + /* Bail out if we found it */ if (E != 0) { return E; @@ -1279,6 +1284,11 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs /* Generate the assembler name from the data label number */ Entry->V.L.Label = Offs; Entry->AsmName = xstrdup (LocalDataLabelName (Entry->V.L.Label)); + } else if ((Flags & SC_ALIAS) == SC_ALIAS) { + /* Just clear the info */ + Entry->V.A.Field = 0; + Entry->V.A.ANumber = 0; + Entry->V.A.Offs = 0; } else { Internal ("Invalid flags in AddLocalSym: %04X", Flags); } @@ -1296,13 +1306,26 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) /* Add an external or global symbol to the symbol table and return the entry */ { - /* Start from the local symbol table */ - SymTable* Tab = SymTab; + /* Add the new declaration to the global symbol table if no errors */ + SymTable* Tab = SymTab0; + + /* Only search this name in the local and global symbol tables */ + SymEntry* Entry = 0; + SymEntry* Alias = 0; + + if (SymTab != SymTab0) { + Alias = Entry = FindLocalSym (Name); + while (Entry && (Entry->Flags & SC_ALIAS) == SC_ALIAS) { + /* Get the aliased entry */ + Entry = Entry->V.A.Field; + } + } + + if (Entry == 0) { + Entry = FindGlobalSym (Name); + } - /* Do we have an entry with this name already? */ - SymEntry* Entry = FindSymInTree (Tab, Name); if (Entry) { - /* We have a symbol with this name already */ if (HandleSymRedefinition (Entry, T, Flags)) { Entry = 0; @@ -1317,7 +1340,7 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) ** declaration if both declarations are global, otherwise give an ** error. */ - if (Tab == SymTab0 && + if (SymTab == SymTab0 && (Flags & SC_EXTERN) == 0 && (Entry->Flags & SC_EXTERN) != 0) { Warning ("Static declaration of '%s' follows non-static declaration", Name); @@ -1353,12 +1376,9 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) /* Use the fail-safe table for fictitious symbols */ Tab = FailSafeTab; } - - } else if ((Flags & (SC_EXTERN | SC_FUNC)) != 0) { - /* Add the new declaration to the global symbol table instead */ - Tab = SymTab0; } - if (Entry == 0 || Entry->Owner != Tab) { + + if (Entry == 0) { /* Create a new entry */ Entry = NewSymEntry (Name, Flags); @@ -1376,6 +1396,13 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) /* Add the entry to the symbol table */ AddSymEntry (Tab, Entry); + + } + + /* Add an alias of the global symbol to the local symbol table */ + if (Tab == SymTab0 && SymTab != SymTab0 && Entry->Owner != SymTab && Alias == 0) { + Alias = AddLocalSym (Name, T, SC_ALIAS, 0); + Alias->V.A.Field = Entry; } /* Return the entry */ diff --git a/test/val/extern.c b/test/val/extern.c new file mode 100644 index 000000000..6df3c9d50 --- /dev/null +++ b/test/val/extern.c @@ -0,0 +1,31 @@ +/* Test for shadowing and linkage of file-scope "static" and block-scope "extern" declarations */ + +static int g(int x); /* Generated functions with internal linkage are not always kept in cc65 */ + +int main(void) +{ + char f = 'f'; /* Shadows global "int f(void)" (if any) */ + char c = 'c'; /* Shadows global "int c" (if any) */ + { + void* f = 0; /* Shadows local "char f" */ + void* c = 0; /* Shadows local "char c" */ + { + int f(void); /* Shadows local "char f" and "void* f" */ + extern int g(int); /* Shadows global "int g(int x)" */ + extern int c; /* Shadows local "char c" and "void* c" */ + return f() ^ g(c); /* Link to global "int g(int x)" */ + } + } +} + +int c = 42; + +int f(void) +{ + return 42; +} + +int g(int x) +{ + return x; +} From 959be2c98c11d8098f47c6954a38ea7604a6b22e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 11 Oct 2022 14:14:38 +0800 Subject: [PATCH 1834/2710] SymEntry struct cleanups. --- src/cc65/symentry.c | 8 +++-- src/cc65/symentry.h | 77 +++++++++++++++++++++++---------------------- 2 files changed, 44 insertions(+), 41 deletions(-) diff --git a/src/cc65/symentry.c b/src/cc65/symentry.c index cc790c931..c9402a64b 100644 --- a/src/cc65/symentry.c +++ b/src/cc65/symentry.c @@ -40,6 +40,7 @@ /* cc65 */ #include "anonname.h" +#include "asmlabel.h" #include "declare.h" #include "error.h" #include "symentry.h" @@ -65,13 +66,12 @@ SymEntry* NewSymEntry (const char* Name, unsigned Flags) E->NextHash = 0; E->PrevSym = 0; E->NextSym = 0; - E->Link = 0; E->Owner = 0; E->Flags = Flags; E->Type = 0; E->Attr = 0; E->AsmName = 0; - E->V.BssName = 0; + memset (&E->V, 0, sizeof (E->V)); memcpy (E->Name, Name, Len+1); /* Return the new entry */ @@ -250,7 +250,9 @@ void SymUseAttr (SymEntry* Sym, struct Declaration* D) void SymSetAsmName (SymEntry* Sym) -/* Set the assembler name for an external symbol from the name of the symbol */ +/* Set the assembler name for an external symbol from the name of the symbol. +** The symbol must have no assembler name set yet. +*/ { unsigned Len; diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 52e590e2e..0f4b145be 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -128,7 +128,6 @@ struct SymEntry { SymEntry* NextHash; /* Next entry in hash list */ SymEntry* PrevSym; /* Previous symbol in dl list */ SymEntry* NextSym; /* Next symbol double linked list */ - SymEntry* Link; /* General purpose single linked list */ struct SymTable* Owner; /* Symbol table the symbol is in */ unsigned Flags; /* Symbol flags */ Type* Type; /* Symbol type */ @@ -138,27 +137,9 @@ struct SymEntry { /* Data that differs for the different symbol types */ union { - /* Offset for locals or struct members */ + /* Offset for locals */ int Offs; - /* Data for anonymous struct or union members */ - struct { - int Offs; /* Byte offset into struct */ - unsigned ANumber; /* Numeric ID */ - SymEntry* Field; /* The real field aliased */ - } A; - - - /* Label name for static symbols */ - struct { - unsigned Label; - Collection *DefsOrRefs; - struct CodeEntry *IndJumpFrom; - } L; - - /* Value of SP adjustment needed after forward 'goto' */ - unsigned short SPAdjustment; - /* Register bank offset and offset of the saved copy on stack for ** register variables. */ @@ -167,32 +148,50 @@ struct SymEntry { int SaveOffs; } R; - /* Value for constants (including enums) */ + /* Segment name for tentantive global definitions */ + const char* BssName; + + /* Value for integer constants (including enumerators) */ long ConstVal; - /* Data for structs/unions */ - struct { - struct SymTable* SymTab; /* Member symbol table */ - unsigned Size; /* Size of the union/struct */ - unsigned ACount; /* Count of anonymous fields */ - } S; - - /* Data for enums */ - struct { - struct SymTable* SymTab; /* Member symbol table */ - const Type* Type; /* Underlying type */ - } E; - /* Data for functions */ struct { struct Segments* Seg; /* Segments for this function */ struct LiteralPool* LitPool; /* Literal pool for this function */ } F; - /* Segment name for tentantive global definitions */ - const char* BssName; + /* Label name for static symbols */ + struct { + unsigned Label; + Collection *DefsOrRefs; + struct CodeEntry *IndJumpFrom; + } L; + + /* Value of SP adjustment needed after forward 'goto' */ + unsigned short SPAdjustment; + + /* Data for anonymous struct or union members */ + struct { + int Offs; /* Byte offset into struct */ + unsigned ANumber; /* Numeric ID */ + SymEntry* Field; /* The real field aliased */ + } A; + + /* Data for structs/unions tags */ + struct { + struct SymTable* SymTab; /* Member symbol table */ + unsigned Size; /* Size of the union/struct */ + unsigned ACount; /* Count of anonymous fields */ + } S; + + /* Data for enums tags */ + struct { + struct SymTable* SymTab; /* Member symbol table */ + const Type* Type; /* Underlying type */ + } E; + } V; - char Name[1]; /* Name, dynamically allocated */ + char Name[1]; /* Name, dynamically allocated */ }; @@ -303,7 +302,9 @@ void SymUseAttr (SymEntry* Sym, struct Declaration* D); /* Use the attributes from the declaration for this symbol */ void SymSetAsmName (SymEntry* Sym); -/* Set the assembler name for an external symbol from the name of the symbol */ +/* Set the assembler name for an external symbol from the name of the symbol. +** The symbol must have no assembler name set yet. +*/ void CvtRegVarToAuto (SymEntry* Sym); /* Convert a register variable to an auto variable */ From 2cda47cd36c824a505f66d685ed2f0410ba3873d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 11 Oct 2022 14:14:48 +0800 Subject: [PATCH 1835/2710] More descriptive names for SymEntry usage. --- src/cc65/compile.c | 43 +++++++++---------- src/cc65/datatype.c | 4 +- src/cc65/declare.c | 100 ++++++++++++++++++++++---------------------- src/cc65/expr.c | 5 +-- src/cc65/initdata.c | 48 ++++++++++----------- src/cc65/symtab.c | 82 ++++++++++++++++++------------------ 6 files changed, 140 insertions(+), 142 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 11dcbced0..63c2ef081 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -79,7 +79,7 @@ static void Parse (void) /* Top level parser routine. */ { int comma; - SymEntry* Entry; + SymEntry* Sym; FuncDesc* FuncDef = 0; /* Initialization for deferred operations */ @@ -142,7 +142,7 @@ static void Parse (void) } /* Read declarations for this type */ - Entry = 0; + Sym = 0; comma = 0; while (1) { @@ -196,10 +196,10 @@ static void Parse (void) } /* Add an entry to the symbol table */ - Entry = AddGlobalSym (Decl.Ident, Decl.Type, Decl.StorageClass); + Sym = AddGlobalSym (Decl.Ident, Decl.Type, Decl.StorageClass); /* Add declaration attributes */ - SymUseAttr (Entry, &Decl); + SymUseAttr (Sym, &Decl); /* Reserve storage for the variable if we need to */ if (Decl.StorageClass & SC_STORAGE) { @@ -211,11 +211,11 @@ static void Parse (void) if (CurTok.Tok == TOK_ASSIGN) { /* This is a definition with storage */ - if (SymIsDef (Entry)) { + if (SymIsDef (Sym)) { Error ("Global variable '%s' has already been defined", - Entry->Name); + Sym->Name); } - Entry->Flags |= SC_DEF; + Sym->Flags |= SC_DEF; /* We cannot initialize types of unknown size, or ** void types in ISO modes. @@ -245,21 +245,21 @@ static void Parse (void) } /* Define a label */ - g_defgloblabel (Entry->Name); + g_defgloblabel (Sym->Name); /* Skip the '=' */ NextToken (); /* Parse the initialization */ - ParseInit (Entry->Type); + ParseInit (Sym->Type); } else { /* This is a declaration */ if (IsTypeVoid (Decl.Type)) { /* We cannot declare variables of type void */ Error ("Illegal type for variable '%s'", Decl.Ident); - Entry->Flags &= ~(SC_STORAGE | SC_DEF); - } else if (Size == 0 && SymIsDef (Entry) && !IsEmptiableObjectType (Decl.Type)) { + Sym->Flags &= ~(SC_STORAGE | SC_DEF); + } else if (Size == 0 && SymIsDef (Sym) && !IsEmptiableObjectType (Decl.Type)) { /* Size is unknown. Is it an array? */ if (!IsTypeArray (Decl.Type)) { Error ("Variable '%s' has unknown size", Decl.Ident); @@ -286,11 +286,11 @@ static void Parse (void) */ const char* bssName = GetSegName (SEG_BSS); - if (Entry->V.BssName && strcmp (Entry->V.BssName, bssName) != 0) { + if (Sym->V.BssName && strcmp (Sym->V.BssName, bssName) != 0) { Error ("Global variable '%s' already was defined in the '%s' segment.", - Entry->Name, Entry->V.BssName); + Sym->Name, Sym->V.BssName); } - Entry->V.BssName = xstrdup (bssName); + Sym->V.BssName = xstrdup (bssName); /* This is to make the automatical zeropage setting of the symbol ** work right. @@ -300,9 +300,9 @@ static void Parse (void) } /* Make the symbol zeropage according to the segment address size */ - if ((Entry->Flags & SC_STATIC) != 0) { + if ((Sym->Flags & SC_STATIC) != 0) { if (GetSegAddrSize (GetSegName (CS->CurDSeg)) == ADDR_SIZE_ZP) { - Entry->Flags |= SC_ZEROPAGE; + Sym->Flags |= SC_ZEROPAGE; } } @@ -318,7 +318,7 @@ static void Parse (void) } /* Function declaration? */ - if (Entry && IsTypeFunc (Entry->Type)) { + if (Sym && IsTypeFunc (Sym->Type)) { /* Function */ if (!comma) { @@ -327,7 +327,7 @@ static void Parse (void) NextToken (); } else { /* Parse the function body */ - NewFunc (Entry, FuncDef); + NewFunc (Sym, FuncDef); /* Make sure we aren't omitting any work */ CheckDeferredOpAllDone (); @@ -478,8 +478,9 @@ void Compile (const char* FileName) for (Entry = GetGlobalSymTab ()->SymHead; Entry; Entry = Entry->NextSym) { if ((Entry->Flags & (SC_STORAGE | SC_DEF | SC_STATIC)) == (SC_STORAGE | SC_STATIC)) { /* Assembly definition of uninitialized global variable */ - SymEntry* Sym = GetSymType (Entry->Type); + SymEntry* TagSym = GetSymType (Entry->Type); unsigned Size = SizeOf (Entry->Type); + if (Size == 0 && IsTypeArray (Entry->Type)) { if (GetElementCount (Entry->Type) == UNSPECIFIED) { /* Assume array size of 1 */ @@ -488,11 +489,11 @@ void Compile (const char* FileName) Warning ("Incomplete array '%s[]' assumed to have one element", Entry->Name); } - Sym = GetSymType (GetElementType (Entry->Type)); + TagSym = GetSymType (GetElementType (Entry->Type)); } /* For non-ESU types, Size != 0 */ - if (Size != 0 || (Sym != 0 && SymIsDef (Sym))) { + if (Size != 0 || (TagSym != 0 && SymIsDef (TagSym))) { /* Set the segment name only when it changes */ if (strcmp (GetSegName (SEG_BSS), Entry->V.BssName) != 0) { SetSegName (SEG_BSS, Entry->V.BssName); diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 6d9afa403..471b3d60a 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1307,9 +1307,9 @@ int IsESUType (const Type* T) int IsIncompleteESUType (const Type* T) /* Return true if this is an incomplete ESU type */ { - SymEntry* Sym = GetSymType (T); + SymEntry* TagSym = GetSymType (T); - return Sym != 0 && !SymIsDef (Sym); + return TagSym != 0 && !SymIsDef (TagSym); } diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 7cc7444b6..b88a8db02 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -502,18 +502,18 @@ static SymEntry* ESUForwardDecl (const char* Name, unsigned Flags, unsigned* DSF /* Try to find an enum/struct/union with the given name. If there is none, ** insert a forward declaration into the current lexical level. */ - SymEntry* Entry = FindTagSym (Name); - if (Entry == 0) { + SymEntry* TagEntry = FindTagSym (Name); + if (TagEntry == 0) { if ((Flags & SC_ESUTYPEMASK) != SC_ENUM) { - Entry = AddStructSym (Name, Flags, 0, 0, DSFlags); + TagEntry = AddStructSym (Name, Flags, 0, 0, DSFlags); } else { - Entry = AddEnumSym (Name, Flags, 0, 0, DSFlags); + TagEntry = AddEnumSym (Name, Flags, 0, 0, DSFlags); } - } else if ((Entry->Flags & SC_TYPEMASK) != (Flags & SC_ESUTYPEMASK)) { + } else if ((TagEntry->Flags & SC_TYPEMASK) != (Flags & SC_ESUTYPEMASK)) { /* Already defined, but not the same type class */ Error ("Symbol '%s' is already different kind", Name); } - return Entry; + return TagEntry; } @@ -809,15 +809,13 @@ static unsigned AliasAnonStructFields (const Declaration* D, SymEntry* Anon) */ { unsigned Count = 0; + SymEntry* Field; SymEntry* Alias; - /* Get the pointer to the symbol table entry of the anon struct */ - SymEntry* Entry = GetESUSymEntry (D->Type); - /* Get the symbol table containing the fields. If it is empty, there has ** been an error before, so bail out. */ - SymTable* Tab = Entry->V.S.SymTab; + SymTable* Tab = GetESUSymEntry (D->Type)->V.S.SymTab; if (Tab == 0) { /* Incomplete definition - has been flagged before */ return 0; @@ -826,24 +824,24 @@ static unsigned AliasAnonStructFields (const Declaration* D, SymEntry* Anon) /* Get a pointer to the list of symbols. Then walk the list adding copies ** of the embedded struct to the current level. */ - Entry = Tab->SymHead; - while (Entry) { + Field = Tab->SymHead; + while (Field) { /* Enter an alias of this symbol */ - if (!IsAnonName (Entry->Name)) { - Alias = AddLocalSym (Entry->Name, Entry->Type, SC_STRUCTFIELD|SC_ALIAS, 0); - Alias->V.A.Field = Entry; - Alias->V.A.Offs = Anon->V.Offs + Entry->V.Offs; + if (!IsAnonName (Field->Name)) { + Alias = AddLocalSym (Field->Name, Field->Type, SC_STRUCTFIELD|SC_ALIAS, 0); + Alias->V.A.Field = Field; + Alias->V.A.Offs = Anon->V.Offs + Field->V.Offs; ++Count; } /* Currently, there can not be any attributes, but if there will be ** some in the future, we want to know this. */ - CHECK (Entry->Attr == 0); + CHECK (Field->Attr == 0); /* Next entry */ - Entry = Entry->NextSym; + Field = Field->NextSym; } /* Return the count of created aliases */ @@ -861,7 +859,7 @@ static SymEntry* ParseUnionDecl (const char* Name, unsigned* DSFlags) int FieldWidth; /* Width in bits, -1 if not a bit-field */ SymTable* FieldTab; SymEntry* UnionTagEntry; - SymEntry* Entry; + SymEntry* Field; unsigned Flags = 0; unsigned PrevErrorCount = ErrorCount; @@ -945,17 +943,17 @@ static SymEntry* ParseUnionDecl (const char* Name, unsigned* DSFlags) AddBitField (Decl.Ident, Decl.Type, 0, 0, FieldWidth, SignednessSpecified); } else if (Decl.Ident[0] != '\0') { - Entry = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0); + Field = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0); if (IsAnonName (Decl.Ident)) { - Entry->V.A.ANumber = UnionTagEntry->V.S.ACount++; - AliasAnonStructFields (&Decl, Entry); + Field->V.A.ANumber = UnionTagEntry->V.S.ACount++; + AliasAnonStructFields (&Decl, Field); } /* Check if the field itself has a flexible array member */ if (IsClassStruct (Decl.Type)) { - SymEntry* Sym = GetSymType (Decl.Type); - if (Sym && SymHasFlexibleArrayMember (Sym)) { - Entry->Flags |= SC_HAVEFAM; + SymEntry* TagEntry = GetSymType (Decl.Type); + if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) { + Field->Flags |= SC_HAVEFAM; Flags |= SC_HAVEFAM; } } @@ -1002,7 +1000,7 @@ static SymEntry* ParseStructDecl (const char* Name, unsigned* DSFlags) int FieldWidth; /* Width in bits, -1 if not a bit-field */ SymTable* FieldTab; SymEntry* StructTagEntry; - SymEntry* Entry; + SymEntry* Field; unsigned Flags = 0; unsigned PrevErrorCount = ErrorCount; @@ -1147,17 +1145,17 @@ static SymEntry* ParseStructDecl (const char* Name, unsigned* DSFlags) StructSize += BitOffs / CHAR_BITS; BitOffs %= CHAR_BITS; } else if (Decl.Ident[0] != '\0') { - Entry = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize); + Field = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize); if (IsAnonName (Decl.Ident)) { - Entry->V.A.ANumber = StructTagEntry->V.S.ACount++; - AliasAnonStructFields (&Decl, Entry); + Field->V.A.ANumber = StructTagEntry->V.S.ACount++; + AliasAnonStructFields (&Decl, Field); } /* Check if the field itself has a flexible array member */ if (IsClassStruct (Decl.Type)) { - SymEntry* Sym = GetSymType (Decl.Type); - if (Sym && SymHasFlexibleArrayMember (Sym)) { - Entry->Flags |= SC_HAVEFAM; + SymEntry* TagEntry = GetSymType (Decl.Type); + if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) { + Field->Flags |= SC_HAVEFAM; Flags |= SC_HAVEFAM; } } @@ -1214,7 +1212,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, */ { ident Ident; - SymEntry* Entry; + SymEntry* TagEntry; if (SignednessSpecified != NULL) { *SignednessSpecified = 0; @@ -1384,10 +1382,10 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, /* Remember we have an extra type decl */ D->Flags |= DS_EXTRA_TYPE; /* Declare the union in the current scope */ - Entry = ParseUnionDecl (Ident, &D->Flags); + TagEntry = ParseUnionDecl (Ident, &D->Flags); /* Encode the union entry into the type */ D->Type[0].C = T_UNION; - SetESUSymEntry (D->Type, Entry); + SetESUSymEntry (D->Type, TagEntry); D->Type[1].C = T_END; break; @@ -1403,10 +1401,10 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, /* Remember we have an extra type decl */ D->Flags |= DS_EXTRA_TYPE; /* Declare the struct in the current scope */ - Entry = ParseStructDecl (Ident, &D->Flags); + TagEntry = ParseStructDecl (Ident, &D->Flags); /* Encode the struct entry into the type */ D->Type[0].C = T_STRUCT; - SetESUSymEntry (D->Type, Entry); + SetESUSymEntry (D->Type, TagEntry); D->Type[1].C = T_END; break; @@ -1426,10 +1424,10 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, /* Remember we have an extra type decl */ D->Flags |= DS_EXTRA_TYPE; /* Parse the enum decl */ - Entry = ParseEnumDecl (Ident, &D->Flags); + TagEntry = ParseEnumDecl (Ident, &D->Flags); /* Encode the enum entry into the type */ D->Type[0].C |= T_ENUM; - SetESUSymEntry (D->Type, Entry); + SetESUSymEntry (D->Type, TagEntry); D->Type[1].C = T_END; /* The signedness of enums is determined by the type, so say this is specified to avoid ** the int -> unsigned int handling for plain int bit-fields in AddBitField. @@ -1442,11 +1440,11 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, case TOK_IDENT: /* This could be a label */ if (NextTok.Tok != TOK_COLON || GetLexicalLevel () == LEX_LEVEL_STRUCT) { - Entry = FindSym (CurTok.Ident); - if (Entry && SymIsTypeDef (Entry)) { + TagEntry = FindSym (CurTok.Ident); + if (TagEntry && SymIsTypeDef (TagEntry)) { /* It's a typedef */ NextToken (); - TypeCopy (D->Type, Entry->Type); + TypeCopy (D->Type, TagEntry->Type); /* If it's a typedef, we should actually use whether the signedness was ** specified on the typedef, but that information has been lost. Treat the ** signedness as being specified to work around the ICE in #1267. @@ -1591,19 +1589,19 @@ static void ParseOldStyleParamList (FuncDesc* F) if (Decl.Ident[0] != '\0') { /* We have a name given. Search for the symbol */ - SymEntry* Sym = FindLocalSym (Decl.Ident); - if (Sym) { + SymEntry* Param = FindLocalSym (Decl.Ident); + if (Param) { /* Check if we already changed the type for this ** parameter */ - if (Sym->Flags & SC_DEFTYPE) { + if (Param->Flags & SC_DEFTYPE) { /* Found it, change the default type to the one given */ - ChangeSymType (Sym, ParamTypeCvt (Decl.Type)); + ChangeSymType (Param, ParamTypeCvt (Decl.Type)); /* Reset the "default type" flag */ - Sym->Flags &= ~SC_DEFTYPE; + Param->Flags &= ~SC_DEFTYPE; } else { /* Type has already been changed */ - Error ("Redefinition for parameter '%s'", Sym->Name); + Error ("Redefinition for parameter '%s'", Param->Name); } } else { Error ("Unknown identifier: '%s'", Decl.Ident); @@ -1633,7 +1631,7 @@ static void ParseAnsiParamList (FuncDesc* F) DeclSpec Spec; Declaration Decl; - SymEntry* Sym; + SymEntry* Param; /* Allow an ellipsis as last parameter */ if (CurTok.Tok == TOK_ELLIPSIS) { @@ -1681,10 +1679,10 @@ static void ParseAnsiParamList (FuncDesc* F) ParseAttribute (&Decl); /* Create a symbol table entry */ - Sym = AddLocalSym (Decl.Ident, ParamTypeCvt (Decl.Type), Decl.StorageClass, 0); + Param = AddLocalSym (Decl.Ident, ParamTypeCvt (Decl.Type), Decl.StorageClass, 0); /* Add attributes if we have any */ - SymUseAttr (Sym, &Decl); + SymUseAttr (Param, &Decl); /* If the parameter is a struct or union, emit a warning */ if (IsClassStruct (Decl.Type)) { diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 8c042cc3c..9666877ae 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -280,11 +280,10 @@ static unsigned ExprCheckedSizeOf (const Type* T) /* Specially checked SizeOf() used in 'sizeof' expressions */ { unsigned Size = SizeOf (T); - SymEntry* Sym; if (Size == 0) { - Sym = GetSymType (T); - if (Sym == 0 || !SymIsDef (Sym)) { + SymEntry* TagSym = GetSymType (T); + if (TagSym == 0 || !SymIsDef (TagSym)) { Error ("Cannot apply 'sizeof' to incomplete type '%s'", GetFullTypeName (T)); } } diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c index 99dacdca9..1c5d21460 100644 --- a/src/cc65/initdata.c +++ b/src/cc65/initdata.c @@ -437,7 +437,7 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Parse initialization of a struct or union. Return the number of data bytes. */ { - SymEntry* Sym; + SymEntry* TagSym; SymTable* Tab; StructInitData SI; int HasCurly = 0; @@ -452,15 +452,15 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) } /* Get a pointer to the struct entry from the type */ - Sym = GetESUSymEntry (T); + TagSym = GetESUSymEntry (T); /* Get the size of the struct from the symbol table entry */ - SI.Size = Sym->V.S.Size; + SI.Size = TagSym->V.S.Size; /* Check if this struct definition has a field table. If it doesn't, it ** is an incomplete definition. */ - Tab = Sym->V.S.SymTab; + Tab = TagSym->V.S.SymTab; if (Tab == 0) { Error ("Cannot initialize variables with incomplete type"); /* Try error recovery */ @@ -470,7 +470,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) } /* Get a pointer to the list of symbols */ - Sym = Tab->SymHead; + TagSym = Tab->SymHead; /* Initialize fields */ SI.Offs = 0; @@ -479,7 +479,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) while (CurTok.Tok != TOK_RCURLY) { /* Check for excess elements */ - if (Sym == 0) { + if (TagSym == 0) { /* Is there just one trailing comma before a closing curly? */ if (NextTok.Tok == TOK_RCURLY && CurTok.Tok == TOK_COMMA) { /* Skip comma and exit scope */ @@ -495,7 +495,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) } /* Check for special members that don't consume the initializer */ - if ((Sym->Flags & SC_ALIAS) == SC_ALIAS) { + if ((TagSym->Flags & SC_ALIAS) == SC_ALIAS) { /* Just skip */ goto NextMember; } @@ -503,13 +503,13 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* This may be an anonymous bit-field, in which case it doesn't ** have an initializer. */ - if (SymIsBitField (Sym) && (IsAnonName (Sym->Name))) { + if (SymIsBitField (TagSym) && (IsAnonName (TagSym->Name))) { /* Account for the data and output it if we have at least a full ** byte. We may have more if there was storage unit overlap, for ** example two consecutive 7 bit fields. Those would be packed ** into 2 bytes. */ - SI.ValBits += Sym->Type->A.B.Width; + SI.ValBits += TagSym->Type->A.B.Width; CHECK (SI.ValBits <= CHAR_BIT * sizeof(SI.BitVal)); /* TODO: Generalize this so any type can be used. */ CHECK (SI.ValBits <= LONG_BITS); @@ -526,7 +526,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) SkipComma = 0; } - if (SymIsBitField (Sym)) { + if (SymIsBitField (TagSym)) { /* Parse initialization of one field. Bit-fields need a special ** handling. @@ -537,14 +537,14 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) unsigned Shift; /* Calculate the bitmask from the bit-field data */ - unsigned long Mask = shl_l (1UL, Sym->Type->A.B.Width) - 1UL; + unsigned long Mask = shl_l (1UL, TagSym->Type->A.B.Width) - 1UL; /* Safety ... */ - CHECK (Sym->V.Offs * CHAR_BITS + Sym->Type->A.B.Offs == + CHECK (TagSym->V.Offs * CHAR_BITS + TagSym->Type->A.B.Offs == SI.Offs * CHAR_BITS + SI.ValBits); /* Read the data, check for a constant integer, do a range check */ - Field = ParseScalarInitInternal (IntPromotion (Sym->Type)); + Field = ParseScalarInitInternal (IntPromotion (TagSym->Type)); if (!ED_IsConstAbsInt (&Field)) { Error ("Constant initializer expected"); ED_MakeConstAbsInt (&Field, 1); @@ -554,19 +554,19 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) ** any useful bits. */ Val = (unsigned long) Field.IVal & Mask; - if (IsSignUnsigned (Sym->Type)) { + if (IsSignUnsigned (TagSym->Type)) { if (Field.IVal < 0 || (unsigned long) Field.IVal != Val) { Warning (IsSignUnsigned (Field.Type) ? "Implicit truncation from '%s' to '%s : %u' in bit-field initializer" " changes value from %lu to %lu" : "Implicit truncation from '%s' to '%s : %u' in bit-field initializer" " changes value from %ld to %lu", - GetFullTypeName (Field.Type), GetFullTypeName (Sym->Type), - Sym->Type->A.B.Width, Field.IVal, Val); + GetFullTypeName (Field.Type), GetFullTypeName (TagSym->Type), + TagSym->Type->A.B.Width, Field.IVal, Val); } } else { /* Sign extend back to full width of host long. */ - unsigned ShiftBits = sizeof (long) * CHAR_BIT - Sym->Type->A.B.Width; + unsigned ShiftBits = sizeof (long) * CHAR_BIT - TagSym->Type->A.B.Width; long RestoredVal = asr_l (asl_l (Val, ShiftBits), ShiftBits); if (Field.IVal != RestoredVal) { Warning (IsSignUnsigned (Field.Type) ? @@ -574,17 +574,17 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) " changes value from %lu to %ld" : "Implicit truncation from '%s' to '%s : %u' in bit-field initializer" " changes value from %ld to %ld", - GetFullTypeName (Field.Type), GetFullTypeName (Sym->Type), - Sym->Type->A.B.Width, Field.IVal, RestoredVal); + GetFullTypeName (Field.Type), GetFullTypeName (TagSym->Type), + TagSym->Type->A.B.Width, Field.IVal, RestoredVal); } } /* Add the value to the currently stored bit-field value */ - Shift = (Sym->V.Offs - SI.Offs) * CHAR_BITS + Sym->Type->A.B.Offs; + Shift = (TagSym->V.Offs - SI.Offs) * CHAR_BITS + TagSym->Type->A.B.Offs; SI.BitVal |= (Val << Shift); /* Account for the data and output any full bytes we have. */ - SI.ValBits += Sym->Type->A.B.Width; + SI.ValBits += TagSym->Type->A.B.Width; /* Make sure unsigned is big enough to hold the value, 32 bits. ** This cannot be more than 32 bits because a 16-bit or 32-bit ** bit-field will always be byte-aligned with padding before it @@ -609,7 +609,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Flexible array members may only be initialized if they are ** the last field (or part of the last struct field). */ - SI.Offs += ParseInitInternal (Sym->Type, Braces, AllowFlexibleMembers && Sym->NextSym == 0); + SI.Offs += ParseInitInternal (TagSym->Type, Braces, AllowFlexibleMembers && TagSym->NextSym == 0); } /* More initializers? */ @@ -624,10 +624,10 @@ NextMember: /* Next member. For unions, only the first one can be initialized */ if (IsTypeUnion (T)) { /* Union */ - Sym = 0; + TagSym = 0; } else { /* Struct */ - Sym = Sym->NextSym; + TagSym = TagSym->NextSym; } } diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index e5741ea1d..385b5a831 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -625,8 +625,8 @@ SymEntry FindStructField (const Type* T, const char* Name) ** value, or an empty entry struct if the field is not found. */ { - SymEntry* Entry = 0; - SymEntry Field; + SymEntry* Field = 0; + SymEntry Res; int Offs = 0; /* The given type may actually be a pointer to struct/union */ @@ -637,35 +637,35 @@ SymEntry FindStructField (const Type* T, const char* Name) /* Only structs/unions have struct/union fields... */ if (IsClassStruct (T)) { - /* Get a pointer to the struct/union type */ - const SymEntry* Struct = GetESUSymEntry (T); - CHECK (Struct != 0); + /* Get a pointer to the struct/union tag */ + const SymEntry* TagSym = GetESUSymEntry (T); + CHECK (TagSym != 0); /* Now search in the struct/union symbol table. Beware: The table may ** not exist. */ - if (Struct->V.S.SymTab) { - Entry = FindSymInTable (Struct->V.S.SymTab, Name, HashStr (Name)); + if (TagSym->V.S.SymTab) { + Field = FindSymInTable (TagSym->V.S.SymTab, Name, HashStr (Name)); - if (Entry != 0) { - Offs = Entry->V.Offs; + if (Field != 0) { + Offs = Field->V.Offs; } - while (Entry != 0 && (Entry->Flags & SC_ALIAS) == SC_ALIAS) { + while (Field != 0 && (Field->Flags & SC_ALIAS) == SC_ALIAS) { /* Get the real field */ - Entry = Entry->V.A.Field; + Field = Field->V.A.Field; } } } - if (Entry != 0) { - Field = *Entry; - Field.V.Offs = Offs; + if (Field != 0) { + Res = *Field; + Res.V.Offs = Offs; } else { - memset (&Field, 0, sizeof(SymEntry)); + memset (&Res, 0, sizeof(SymEntry)); } - return Field; + return Res; } @@ -689,15 +689,15 @@ static int IsDistinctRedef (const Type* lhst, const Type* rhst, typecmpcode_t Co } -static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags) +static int HandleSymRedefinition (SymEntry* Sym, const Type* T, unsigned Flags) /* Check and handle redefinition of existing symbols. ** Complete array sizes and function descriptors as well. ** Return true if there *is* an error. */ { /* Get the type info of the existing symbol */ - Type* E_Type = Entry->Type; - unsigned E_SCType = Entry->Flags & SC_TYPEMASK; + Type* E_Type = Sym->Type; + unsigned E_SCType = Sym->Flags & SC_TYPEMASK; unsigned SCType = Flags & SC_TYPEMASK; /* Some symbols may be redeclared if certain requirements are met */ @@ -706,16 +706,16 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags /* Existing typedefs cannot be redeclared as anything different */ if (SCType == SC_TYPEDEF) { if (IsDistinctRedef (E_Type, T, TC_IDENTICAL, TCF_MASK_QUAL)) { - Error ("Conflicting types for typedef '%s'", Entry->Name); + Error ("Conflicting types for typedef '%s'", Sym->Name); Note ("'%s' vs '%s'", GetFullTypeName (T), GetFullTypeName (E_Type)); - Entry = 0; + Sym = 0; } } else { - Error ("Redefinition of typedef '%s' as different kind of symbol", Entry->Name); - Entry = 0; + Error ("Redefinition of typedef '%s' as different kind of symbol", Sym->Name); + Sym = 0; } - } else if ((Entry->Flags & SC_FUNC) == SC_FUNC) { + } else if ((Sym->Flags & SC_FUNC) == SC_FUNC) { /* In case of a function, use the new type descriptor, since it ** contains pointers to the new symbol tables that are needed if @@ -726,27 +726,27 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags if (IsTypeFunc (T)) { /* Check for duplicate function definitions */ - if (SymIsDef (Entry) && (Flags & SC_DEF) == SC_DEF) { + if (SymIsDef (Sym) && (Flags & SC_DEF) == SC_DEF) { Error ("Body for function '%s' has already been defined", - Entry->Name); - Entry = 0; + Sym->Name); + Sym = 0; } else { /* New type must be compatible with the composite prototype */ if (IsDistinctRedef (E_Type, T, TC_EQUAL, TCF_MASK_QUAL)) { - Error ("Conflicting function types for '%s'", Entry->Name); + Error ("Conflicting function types for '%s'", Sym->Name); Note ("'%s' vs '%s'", GetFullTypeName (T), GetFullTypeName (E_Type)); - Entry = 0; + Sym = 0; } else { /* Refine the existing composite prototype with this new ** one. */ - RefineFuncDesc (Entry->Type, T); + RefineFuncDesc (Sym->Type, T); } } } else { - Error ("Redefinition of function '%s' as different kind of symbol", Entry->Name); - Entry = 0; + Error ("Redefinition of function '%s' as different kind of symbol", Sym->Name); + Sym = 0; } } else { @@ -765,9 +765,9 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags if ((Size != UNSPECIFIED && ESize != UNSPECIFIED && Size != ESize) || IsDistinctRedef (E_Type + 1, T + 1, TC_IDENTICAL, TCF_MASK_QUAL)) { /* Conflicting element types */ - Error ("Conflicting array types for '%s[]'", Entry->Name); + Error ("Conflicting array types for '%s[]'", Sym->Name); Note ("'%s' vs '%s'", GetFullTypeName (T), GetFullTypeName (E_Type)); - Entry = 0; + Sym = 0; } else { /* Check if we have a size in the existing definition */ if (ESize == UNSPECIFIED) { @@ -780,25 +780,25 @@ static int HandleSymRedefinition (SymEntry* Entry, const Type* T, unsigned Flags /* New type must be equivalent */ if (SCType != E_SCType) { - Error ("Redefinition of '%s' as different kind of symbol", Entry->Name); - Entry = 0; + Error ("Redefinition of '%s' as different kind of symbol", Sym->Name); + Sym = 0; } else if (IsDistinctRedef (E_Type, T, TC_EQUAL, TCF_MASK_QUAL)) { - Error ("Conflicting types for '%s'", Entry->Name); + Error ("Conflicting types for '%s'", Sym->Name); Note ("'%s' vs '%s'", GetFullTypeName (T), GetFullTypeName (E_Type)); - Entry = 0; + Sym = 0; } else if (E_SCType == SC_ENUMERATOR) { /* Enumerators aren't allowed to be redeclared at all, even if ** all occurences are identical. The current code logic won't ** get here, but let's just do it. */ - Error ("Redeclaration of enumerator constant '%s'", Entry->Name); - Entry = 0; + Error ("Redeclaration of enumerator constant '%s'", Sym->Name); + Sym = 0; } } } /* Return if there are any errors */ - return Entry == 0; + return Sym == 0; } From d1e84a6dae2b867bbf20622171868d0665d4d886 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 11 Oct 2022 14:23:21 +0800 Subject: [PATCH 1836/2710] Avoided unnecessary BSS name duplication for tentative global variables. --- src/cc65/compile.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 9d7fbe20a..713e70d2a 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -285,11 +285,14 @@ static void Parse (void) */ const char* bssName = GetSegName (SEG_BSS); - if (Sym->V.BssName && strcmp (Sym->V.BssName, bssName) != 0) { - Error ("Global variable '%s' already was defined in the '%s' segment.", - Sym->Name, Sym->V.BssName); + if (Sym->V.BssName != 0) { + if (strcmp (Sym->V.BssName, bssName) != 0) { + Error ("Global variable '%s' already was defined in the '%s' segment", + Sym->Name, Sym->V.BssName); + } + } else { + Sym->V.BssName = xstrdup (bssName); } - Sym->V.BssName = xstrdup (bssName); /* This is to make the automatical zeropage setting of the symbol ** work right. From 164eb198cec7e09aef1ca93ff4e53a978bd49a26 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 12 Oct 2022 13:10:17 +0800 Subject: [PATCH 1837/2710] Moved type facility functions for deciding code generation type flags. --- src/cc65/datatype.c | 93 -------------------------------------------- src/cc65/datatype.h | 6 --- src/cc65/expr.c | 94 +++++++++++++++++++++++++++++++++++++++++++++ src/cc65/expr.h | 6 +++ src/cc65/function.c | 1 + src/cc65/loadexpr.c | 1 + 6 files changed, 102 insertions(+), 99 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 0990396af..fe0b9e0a3 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -590,25 +590,6 @@ static unsigned GetBitFieldMinimalTypeSize (unsigned BitWidth) } -static unsigned TypeOfBySize (unsigned Size) -/* Get the code generator replacement type of the object by its size */ -{ - unsigned NewType; - /* If the size is less than or equal to that of a a long, we will copy - ** the struct using the primary register, otherwise we use memcpy. - */ - switch (Size) { - case 1: NewType = CF_CHAR; break; - case 2: NewType = CF_INT; break; - case 3: /* FALLTHROUGH */ - case 4: NewType = CF_LONG; break; - default: NewType = CF_NONE; break; - } - - return NewType; -} - - const Type* GetUnderlyingType (const Type* Type) /* Get the underlying type of an enum or other integer class type */ @@ -858,80 +839,6 @@ unsigned CheckedPSizeOf (const Type* T) -unsigned TypeOf (const Type* T) -/* Get the code generator base type of the object */ -{ - unsigned NewType; - - switch (GetUnderlyingTypeCode (T)) { - - case T_SCHAR: - return CF_CHAR; - - case T_UCHAR: - return CF_CHAR | CF_UNSIGNED; - - case T_SHORT: - case T_INT: - return CF_INT; - - case T_USHORT: - case T_UINT: - case T_PTR: - case T_ARRAY: - return CF_INT | CF_UNSIGNED; - - case T_LONG: - return CF_LONG; - - case T_ULONG: - return CF_LONG | CF_UNSIGNED; - - case T_FLOAT: - case T_DOUBLE: - /* These two are identical in the backend */ - return CF_FLOAT; - - case T_FUNC: - /* Treat this as a function pointer */ - return CF_INT | CF_UNSIGNED; - - case T_STRUCT: - case T_UNION: - NewType = TypeOfBySize (SizeOf (T)); - if (NewType != CF_NONE) { - return NewType; - } - /* Address of ... */ - return CF_INT | CF_UNSIGNED; - - case T_VOID: - case T_ENUM: - /* Incomplete enum type */ - Error ("Incomplete type '%s'", GetFullTypeName (T)); - return CF_INT; - - default: - Error ("Illegal type %04lX", T->C); - return CF_INT; - } -} - - - -unsigned FuncTypeOf (const Type* T) -/* Get the code generator flag for calling the function */ -{ - if (GetUnderlyingTypeCode (T) == T_FUNC) { - return (T->A.F->Flags & FD_VARIADIC) ? 0 : CF_FIXARGC; - } else { - Error ("Illegal function type %04lX", T->C); - return 0; - } -} - - - const Type* Indirect (const Type* T) /* Do one indirection for the given type, that is, return the type where the ** given type points to. diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index d7e8d2e99..be5b4a31c 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -333,12 +333,6 @@ unsigned CheckedPSizeOf (const Type* T); ** rest of the compiler doesn't have to work with invalid sizes). */ -unsigned TypeOf (const Type* T); -/* Get the code generator base type of the object */ - -unsigned FuncTypeOf (const Type* T); -/* Get the code generator flag for calling the function */ - const Type* Indirect (const Type* T); /* Do one indirection for the given type, that is, return the type where the ** given type points to. diff --git a/src/cc65/expr.c b/src/cc65/expr.c index c95a5a401..8f493ad03 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -103,6 +103,100 @@ unsigned GlobalModeFlags (const ExprDesc* Expr) +static unsigned TypeOfBySize (unsigned Size) +/* Get the code generator replacement type of the object by its size */ +{ + unsigned NewType; + /* If the size is less than or equal to that of a a long, we will copy + ** the struct using the primary register, otherwise we use memcpy. + */ + switch (Size) { + case 1: NewType = CF_CHAR; break; + case 2: NewType = CF_INT; break; + case 3: /* FALLTHROUGH */ + case 4: NewType = CF_LONG; break; + default: NewType = CF_NONE; break; + } + + return NewType; +} + + + +unsigned TypeOf (const Type* T) +/* Get the code generator base type of the object */ +{ + unsigned NewType; + + switch (GetUnderlyingTypeCode (T)) { + + case T_SCHAR: + return CF_CHAR; + + case T_UCHAR: + return CF_CHAR | CF_UNSIGNED; + + case T_SHORT: + case T_INT: + return CF_INT; + + case T_USHORT: + case T_UINT: + case T_PTR: + case T_ARRAY: + return CF_INT | CF_UNSIGNED; + + case T_LONG: + return CF_LONG; + + case T_ULONG: + return CF_LONG | CF_UNSIGNED; + + case T_FLOAT: + case T_DOUBLE: + /* These two are identical in the backend */ + return CF_FLOAT; + + case T_FUNC: + /* Treat this as a function pointer */ + return CF_INT | CF_UNSIGNED; + + case T_STRUCT: + case T_UNION: + NewType = TypeOfBySize (SizeOf (T)); + if (NewType != CF_NONE) { + return NewType; + } + /* Address of ... */ + return CF_INT | CF_UNSIGNED; + + case T_VOID: + case T_ENUM: + /* Incomplete enum type */ + Error ("Incomplete type '%s'", GetFullTypeName (T)); + return CF_INT; + + default: + Error ("Illegal type %04lX", T->C); + return CF_INT; + } +} + + + +unsigned FuncTypeOf (const Type* T) +/* Get the code generator flag for calling the function */ +{ + if (GetUnderlyingTypeCode (T) == T_FUNC) { + return (T->A.F->Flags & FD_VARIADIC) ? 0 : CF_FIXARGC; + } else { + Error ("Illegal function type %04lX", T->C); + return 0; + } +} + + + void ExprWithCheck (void (*Func) (ExprDesc*), ExprDesc* Expr) /* Call an expression function with checks. */ { diff --git a/src/cc65/expr.h b/src/cc65/expr.h index 7c2f426d7..5644fb82d 100644 --- a/src/cc65/expr.h +++ b/src/cc65/expr.h @@ -51,6 +51,12 @@ typedef struct GenDesc { unsigned GlobalModeFlags (const ExprDesc* Expr); /* Return the addressing mode flags for the given expression */ +unsigned TypeOf (const Type* T); +/* Get the code generator base type of the object */ + +unsigned FuncTypeOf (const Type* T); +/* Get the code generator flag for calling the function */ + void ExprWithCheck (void (*Func) (ExprDesc*), ExprDesc* Expr); /* Call an expression function with checks. */ diff --git a/src/cc65/function.c b/src/cc65/function.c index 44d566de8..737b068a3 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -42,6 +42,7 @@ #include "asmlabel.h" #include "codegen.h" #include "error.h" +#include "expr.h" #include "funcdesc.h" #include "global.h" #include "litpool.h" diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index ccd694e35..c5ac43f78 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -36,6 +36,7 @@ /* cc65 */ #include "codegen.h" #include "error.h" +#include "expr.h" #include "exprdesc.h" #include "global.h" #include "loadexpr.h" From a2dfa7c721ae0a0c3393c58740e0e286ec7e9b4c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 12 Oct 2022 13:10:17 +0800 Subject: [PATCH 1838/2710] More consistent names for SymEntry functions. --- src/cc65/compile.c | 4 +- src/cc65/datatype.c | 160 +++++++++++++++++++++++++------------------- src/cc65/datatype.h | 10 +-- src/cc65/declare.c | 14 ++-- src/cc65/expr.c | 2 +- src/cc65/function.c | 2 +- src/cc65/initdata.c | 2 +- src/cc65/symentry.c | 51 +++----------- src/cc65/symentry.h | 18 ++--- src/cc65/symtab.c | 94 +++++++++++++------------- src/cc65/symtab.h | 4 +- src/cc65/typecmp.c | 8 +-- 12 files changed, 175 insertions(+), 194 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 63c2ef081..a8ef56af6 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -478,7 +478,7 @@ void Compile (const char* FileName) for (Entry = GetGlobalSymTab ()->SymHead; Entry; Entry = Entry->NextSym) { if ((Entry->Flags & (SC_STORAGE | SC_DEF | SC_STATIC)) == (SC_STORAGE | SC_STATIC)) { /* Assembly definition of uninitialized global variable */ - SymEntry* TagSym = GetSymType (Entry->Type); + SymEntry* TagSym = GetESUTagSym (Entry->Type); unsigned Size = SizeOf (Entry->Type); if (Size == 0 && IsTypeArray (Entry->Type)) { @@ -489,7 +489,7 @@ void Compile (const char* FileName) Warning ("Incomplete array '%s[]' assumed to have one element", Entry->Name); } - TagSym = GetSymType (GetElementType (Entry->Type)); + TagSym = GetESUTagSym (GetElementType (Entry->Type)); } /* For non-ESU types, Size != 0 */ diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 471b3d60a..0990396af 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -48,6 +48,7 @@ #include "fp.h" #include "funcdesc.h" #include "global.h" +#include "ident.h" #include "symtab.h" @@ -86,6 +87,83 @@ const Type type_c_void_p[] = { TYPE(T_PTR), TYPE(T_C_VOID), TYPE(T_END) }; +const char* GetBasicTypeName (const Type* T) +/* Return a const name string of the basic type. +** Return "type" for unknown basic types. +*/ +{ + switch (GetRawType (T)) { + case T_TYPE_ENUM: return "enum"; + case T_TYPE_BITFIELD: return "bit-field"; + case T_TYPE_FLOAT: return "float"; + case T_TYPE_DOUBLE: return "double"; + case T_TYPE_VOID: return "void"; + case T_TYPE_STRUCT: return "struct"; + case T_TYPE_UNION: return "union"; + case T_TYPE_ARRAY: return "array"; + case T_TYPE_PTR: return "pointer"; + case T_TYPE_FUNC: return "function"; + case T_TYPE_NONE: /* FALLTHROUGH */ + default: break; + } + if (IsClassInt (T)) { + if (IsRawSignSigned (T)) { + switch (GetRawType (T)) { + case T_TYPE_CHAR: return "signed char"; + case T_TYPE_SHORT: return "short"; + case T_TYPE_INT: return "int"; + case T_TYPE_LONG: return "long"; + case T_TYPE_LONGLONG: return "long long"; + default: + return "signed integer"; + } + } else if (IsRawSignUnsigned (T)) { + switch (GetRawType (T)) { + case T_TYPE_CHAR: return "unsigned char"; + case T_TYPE_SHORT: return "unsigned short"; + case T_TYPE_INT: return "unsigned int"; + case T_TYPE_LONG: return "unsigned long"; + case T_TYPE_LONGLONG: return "unsigned long long"; + default: + return "unsigned integer"; + } + } else { + switch (GetRawType (T)) { + case T_TYPE_CHAR: return "char"; + case T_TYPE_SHORT: return "short"; + case T_TYPE_INT: return "int"; + case T_TYPE_LONG: return "long"; + case T_TYPE_LONGLONG: return "long long"; + default: + return "integer"; + } + } + } + return "type"; +} + + + +static const char* GetTagSymName (const Type* T) +/* Return a name string of the type or the symbol name if it is an ESU type. +** Note: This may use a static buffer that could be overwritten by other calls. +*/ +{ + static char TypeName [IDENTSIZE + 16]; + SymEntry* TagSym; + + TagSym = GetESUTagSym (T); + if (TagSym == 0) { + return GetBasicTypeName (T); + } + sprintf (TypeName, "%s %s", GetBasicTypeName (T), + TagSym->Name[0] != '\0' ? TagSym->Name : "<unknown>"); + + return TypeName; +} + + + static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBuf* East, const Type* T) /* Return the name string of the given type split into a western part and an ** eastern part. @@ -208,7 +286,7 @@ static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBu } if (!IsTypeBitField (T)) { - SB_AppendStr (&Buf, GetSymTypeName (T)); + SB_AppendStr (&Buf, GetTagSymName (T)); } else { SB_AppendStr (&Buf, GetBasicTypeName (T + 1)); } @@ -228,63 +306,6 @@ static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBu -const char* GetBasicTypeName (const Type* T) -/* Return a const name string of the basic type. -** Return "type" for unknown basic types. -*/ -{ - switch (GetRawType (T)) { - case T_TYPE_ENUM: return "enum"; - case T_TYPE_BITFIELD: return "bit-field"; - case T_TYPE_FLOAT: return "float"; - case T_TYPE_DOUBLE: return "double"; - case T_TYPE_VOID: return "void"; - case T_TYPE_STRUCT: return "struct"; - case T_TYPE_UNION: return "union"; - case T_TYPE_ARRAY: return "array"; - case T_TYPE_PTR: return "pointer"; - case T_TYPE_FUNC: return "function"; - case T_TYPE_NONE: /* FALLTHROUGH */ - default: break; - } - if (IsClassInt (T)) { - if (IsRawSignSigned (T)) { - switch (GetRawType (T)) { - case T_TYPE_CHAR: return "signed char"; - case T_TYPE_SHORT: return "short"; - case T_TYPE_INT: return "int"; - case T_TYPE_LONG: return "long"; - case T_TYPE_LONGLONG: return "long long"; - default: - return "signed integer"; - } - } else if (IsRawSignUnsigned (T)) { - switch (GetRawType (T)) { - case T_TYPE_CHAR: return "unsigned char"; - case T_TYPE_SHORT: return "unsigned short"; - case T_TYPE_INT: return "unsigned int"; - case T_TYPE_LONG: return "unsigned long"; - case T_TYPE_LONGLONG: return "unsigned long long"; - default: - return "unsigned integer"; - } - } else { - switch (GetRawType (T)) { - case T_TYPE_CHAR: return "char"; - case T_TYPE_SHORT: return "short"; - case T_TYPE_INT: return "int"; - case T_TYPE_LONG: return "long"; - case T_TYPE_LONGLONG: return "long long"; - default: - return "integer"; - } - } - } - return "type"; -} - - - const char* GetFullTypeName (const Type* T) /* Return the full name string of the given type */ { @@ -1307,7 +1328,7 @@ int IsESUType (const Type* T) int IsIncompleteESUType (const Type* T) /* Return true if this is an incomplete ESU type */ { - SymEntry* TagSym = GetSymType (T); + SymEntry* TagSym = GetESUTagSym (T); return TagSym != 0 && !SymIsDef (TagSym); } @@ -1486,20 +1507,21 @@ const Type* GetBaseElementType (const Type* T) -struct SymEntry* GetESUSymEntry (const Type* T) -/* Return a SymEntry pointer from an enum/struct/union type */ +struct SymEntry* GetESUTagSym (const Type* T) +/* Get the tag symbol entry of the enum/struct/union type. +** Return 0 if it is not an enum/struct/union. +*/ { - /* Only enums, structs or unions have a SymEntry attribute */ - CHECK (IsClassStruct (T) || IsTypeEnum (T)); - - /* Return the attribute */ - return T->A.S; + if ((IsClassStruct (T) || IsTypeEnum (T))) { + return T->A.S; + } + return 0; } -void SetESUSymEntry (Type* T, struct SymEntry* S) -/* Set the SymEntry pointer for an enum/struct/union type */ +void SetESUTagSym (Type* T, struct SymEntry* S) +/* Set the tag symbol entry of the enum/struct/union type */ { /* Only enums, structs or unions have a SymEntry attribute */ CHECK (IsClassStruct (T) || IsTypeEnum (T)); @@ -1570,7 +1592,7 @@ void PrintFuncSig (FILE* F, const char* Name, const Type* T) if (SymIsRegVar (Param)) { SB_AppendStr (&ParamList, "register "); } - if (!HasAnonName (Param)) { + if (!SymHasAnonName (Param)) { SB_AppendStr (&Buf, Param->Name); } SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index e8ba7b6c0..d7e8d2e99 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -943,11 +943,13 @@ const Type* GetBaseElementType (const Type* T); ** the element type that is not an array. */ -struct SymEntry* GetESUSymEntry (const Type* T) attribute ((const)); -/* Return a SymEntry pointer from an enum/struct/union type */ +struct SymEntry* GetESUTagSym (const Type* T) attribute ((const)); +/* Get the tag symbol entry of the enum/struct/union type. +** Return 0 if it is not an enum/struct/union. +*/ -void SetESUSymEntry (Type* T, struct SymEntry* S); -/* Set the SymEntry pointer for an enum/struct/union type */ +void SetESUTagSym (Type* T, struct SymEntry* S); +/* Set the tag symbol entry of the enum/struct/union type */ TypeCode AddrSizeQualifier (unsigned AddrSize); /* Return T_QUAL_NEAR or T_QUAL_FAR depending on the address size */ diff --git a/src/cc65/declare.c b/src/cc65/declare.c index b88a8db02..2298450b2 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -815,7 +815,7 @@ static unsigned AliasAnonStructFields (const Declaration* D, SymEntry* Anon) /* Get the symbol table containing the fields. If it is empty, there has ** been an error before, so bail out. */ - SymTable* Tab = GetESUSymEntry (D->Type)->V.S.SymTab; + SymTable* Tab = GetESUTagSym (D->Type)->V.S.SymTab; if (Tab == 0) { /* Incomplete definition - has been flagged before */ return 0; @@ -951,7 +951,7 @@ static SymEntry* ParseUnionDecl (const char* Name, unsigned* DSFlags) /* Check if the field itself has a flexible array member */ if (IsClassStruct (Decl.Type)) { - SymEntry* TagEntry = GetSymType (Decl.Type); + SymEntry* TagEntry = GetESUTagSym (Decl.Type); if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) { Field->Flags |= SC_HAVEFAM; Flags |= SC_HAVEFAM; @@ -1153,7 +1153,7 @@ static SymEntry* ParseStructDecl (const char* Name, unsigned* DSFlags) /* Check if the field itself has a flexible array member */ if (IsClassStruct (Decl.Type)) { - SymEntry* TagEntry = GetSymType (Decl.Type); + SymEntry* TagEntry = GetESUTagSym (Decl.Type); if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) { Field->Flags |= SC_HAVEFAM; Flags |= SC_HAVEFAM; @@ -1385,7 +1385,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, TagEntry = ParseUnionDecl (Ident, &D->Flags); /* Encode the union entry into the type */ D->Type[0].C = T_UNION; - SetESUSymEntry (D->Type, TagEntry); + SetESUTagSym (D->Type, TagEntry); D->Type[1].C = T_END; break; @@ -1404,7 +1404,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, TagEntry = ParseStructDecl (Ident, &D->Flags); /* Encode the struct entry into the type */ D->Type[0].C = T_STRUCT; - SetESUSymEntry (D->Type, TagEntry); + SetESUTagSym (D->Type, TagEntry); D->Type[1].C = T_END; break; @@ -1427,7 +1427,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, TagEntry = ParseEnumDecl (Ident, &D->Flags); /* Encode the enum entry into the type */ D->Type[0].C |= T_ENUM; - SetESUSymEntry (D->Type, TagEntry); + SetESUTagSym (D->Type, TagEntry); D->Type[1].C = T_END; /* The signedness of enums is determined by the type, so say this is specified to avoid ** the int -> unsigned int handling for plain int bit-fields in AddBitField. @@ -1596,7 +1596,7 @@ static void ParseOldStyleParamList (FuncDesc* F) */ if (Param->Flags & SC_DEFTYPE) { /* Found it, change the default type to the one given */ - ChangeSymType (Param, ParamTypeCvt (Decl.Type)); + SymChangeType (Param, ParamTypeCvt (Decl.Type)); /* Reset the "default type" flag */ Param->Flags &= ~SC_DEFTYPE; } else { diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 9666877ae..517f53733 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -282,7 +282,7 @@ static unsigned ExprCheckedSizeOf (const Type* T) unsigned Size = SizeOf (T); if (Size == 0) { - SymEntry* TagSym = GetSymType (T); + SymEntry* TagSym = GetESUTagSym (T); if (TagSym == 0 || !SymIsDef (TagSym)) { Error ("Cannot apply 'sizeof' to incomplete type '%s'", GetFullTypeName (T)); } diff --git a/src/cc65/function.c b/src/cc65/function.c index 452181af9..44d566de8 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -613,7 +613,7 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* Could we allocate a register? */ if (Reg < 0) { /* No register available: Convert parameter to auto */ - CvtRegVarToAuto (Param); + SymCvtRegVarToAuto (Param); } else { /* Remember the register offset */ Param->V.R.RegOffs = Reg; diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c index 1c5d21460..6195e0929 100644 --- a/src/cc65/initdata.c +++ b/src/cc65/initdata.c @@ -452,7 +452,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) } /* Get a pointer to the struct entry from the type */ - TagSym = GetESUSymEntry (T); + TagSym = GetESUTagSym (T); /* Get the size of the struct from the symbol table entry */ SI.Size = TagSym->V.S.Size; diff --git a/src/cc65/symentry.c b/src/cc65/symentry.c index c9402a64b..115d47e3f 100644 --- a/src/cc65/symentry.c +++ b/src/cc65/symentry.c @@ -268,7 +268,7 @@ void SymSetAsmName (SymEntry* Sym) -void CvtRegVarToAuto (SymEntry* Sym) +void SymCvtRegVarToAuto (SymEntry* Sym) /* Convert a register variable to an auto variable */ { /* Change the storage class */ @@ -280,59 +280,26 @@ void CvtRegVarToAuto (SymEntry* Sym) -SymEntry* GetSymType (const Type* T) -/* Get the symbol entry of the enum/struct/union type -** Return 0 if it is not an enum/struct/union. -*/ -{ - if ((IsClassStruct (T) || IsTypeEnum (T))) { - return T->A.S; - } - return 0; -} - - - -const char* GetSymTypeName (const Type* T) -/* Return a name string of the type or the symbol name if it is an ESU type. -** Note: This may use a static buffer that could be overwritten by other calls. -*/ -{ - static char TypeName [IDENTSIZE + 16]; - SymEntry* Sym; - - Sym = GetSymType (T); - if (Sym == 0) { - return GetBasicTypeName (T); - } - sprintf (TypeName, "%s %s", GetBasicTypeName (T), - Sym->Name[0] != '\0' ? Sym->Name : "<unknown>"); - - return TypeName; -} - - - -void ChangeSymType (SymEntry* Entry, const Type* T) +void SymChangeType (SymEntry* Sym, const Type* T) /* Change the type of the given symbol */ { - TypeFree (Entry->Type); - Entry->Type = TypeDup (T); + TypeFree (Sym->Type); + Sym->Type = TypeDup (T); } -void ChangeAsmName (SymEntry* Entry, const char* NewAsmName) +void SymChangeAsmName (SymEntry* Sym, const char* NewAsmName) /* Change the assembler name of the symbol */ { - xfree (Entry->AsmName); - Entry->AsmName = xstrdup (NewAsmName); + xfree (Sym->AsmName); + Sym->AsmName = xstrdup (NewAsmName); } -int HasAnonName (const SymEntry* Entry) +int SymHasAnonName (const SymEntry* Sym) /* Return true if the symbol entry has an anonymous name */ { - return IsAnonName (Entry->Name); + return IsAnonName (Sym->Name); } diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 0f4b145be..d973e6586 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -306,26 +306,16 @@ void SymSetAsmName (SymEntry* Sym); ** The symbol must have no assembler name set yet. */ -void CvtRegVarToAuto (SymEntry* Sym); +void SymCvtRegVarToAuto (SymEntry* Sym); /* Convert a register variable to an auto variable */ -SymEntry* GetSymType (const Type* T); -/* Get the symbol entry of the enum/struct/union type -** Return 0 if it is not an enum/struct/union. -*/ - -const char* GetSymTypeName (const Type* T); -/* Return a name string of the type or the symbol name if it is an ESU type. -** Note: This may use a static buffer that could be overwritten by other calls. -*/ - -void ChangeSymType (SymEntry* Entry, const Type* T); +void SymChangeType (SymEntry* Sym, const Type* T); /* Change the type of the given symbol */ -void ChangeAsmName (SymEntry* Entry, const char* NewAsmName); +void SymChangeAsmName (SymEntry* Sym, const char* NewAsmName); /* Change the assembler name of the symbol */ -int HasAnonName (const SymEntry* Entry); +int SymHasAnonName (const SymEntry* Sym); /* Return true if the symbol entry has an anonymous name */ diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 385b5a831..56e267f85 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -638,7 +638,7 @@ SymEntry FindStructField (const Type* T, const char* Name) if (IsClassStruct (T)) { /* Get a pointer to the struct/union tag */ - const SymEntry* TagSym = GetESUSymEntry (T); + const SymEntry* TagSym = GetESUTagSym (T); CHECK (TagSym != 0); /* Now search in the struct/union symbol table. Beware: The table may @@ -832,38 +832,38 @@ static void AddSymEntry (SymTable* T, SymEntry* S) SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTable* Tab, unsigned* DSFlags) -/* Add an enum entry and return it */ +/* Add an enum tag entry and return it */ { SymTable* CurTagTab = TagTab; - SymEntry* Entry; + SymEntry* TagEntry; if ((Flags & SC_FICTITIOUS) == 0) { /* Do we have an entry with this name already? */ - Entry = FindSymInTable (CurTagTab, Name, HashStr (Name)); + TagEntry = FindSymInTable (CurTagTab, Name, HashStr (Name)); } else { /* Add a fictitious symbol in the fail-safe table */ - Entry = 0; + TagEntry = 0; CurTagTab = FailSafeTab; } - if (Entry) { + if (TagEntry) { /* We do have an entry. This may be a forward, so check it. */ - if ((Entry->Flags & SC_TYPEMASK) != SC_ENUM) { + if ((TagEntry->Flags & SC_TYPEMASK) != SC_ENUM) { /* Existing symbol is not an enum */ Error ("Symbol '%s' is already different kind", Name); - Entry = 0; + TagEntry = 0; } else if (Type != 0) { /* Define the struct size if the underlying type is given. */ - if (Entry->V.E.Type != 0) { + if (TagEntry->V.E.Type != 0) { /* Both are definitions. */ Error ("Multiple definition for 'enum %s'", Name); - Entry = 0; + TagEntry = 0; } else { - Entry->V.E.SymTab = Tab; - Entry->V.E.Type = Type; - Entry->Flags &= ~SC_DECL; - Entry->Flags |= SC_DEF; + TagEntry->V.E.SymTab = Tab; + TagEntry->V.E.Type = Type; + TagEntry->Flags &= ~SC_DECL; + TagEntry->Flags |= SC_DEF; /* Remember this is the first definition of this type */ if (DSFlags != 0) { @@ -872,83 +872,83 @@ SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTab } } - if (Entry == 0) { + if (TagEntry == 0) { /* Use the fail-safe table for fictitious symbols */ CurTagTab = FailSafeTab; } } - if (Entry == 0) { + if (TagEntry == 0) { /* Create a new entry */ - Entry = NewSymEntry (Name, SC_ENUM); + TagEntry = NewSymEntry (Name, SC_ENUM); /* Set the enum type data */ - Entry->V.E.SymTab = Tab; - Entry->V.E.Type = Type; + TagEntry->V.E.SymTab = Tab; + TagEntry->V.E.Type = Type; if (Type != 0) { - Entry->Flags |= SC_DEF; + TagEntry->Flags |= SC_DEF; } /* Remember this is the first definition of this type */ if (CurTagTab != FailSafeTab && DSFlags != 0) { - if ((Entry->Flags & SC_DEF) != 0) { + if ((TagEntry->Flags & SC_DEF) != 0) { *DSFlags |= DS_NEW_TYPE_DEF; } *DSFlags |= DS_NEW_TYPE_DECL; } /* Add it to the current table */ - AddSymEntry (CurTagTab, Entry); + AddSymEntry (CurTagTab, TagEntry); } /* Return the entry */ - return Entry; + return TagEntry; } SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTable* Tab, unsigned* DSFlags) -/* Add a struct/union entry and return it */ +/* Add a struct/union tag entry and return it */ { SymTable* CurTagTab = TagTab; - SymEntry* Entry; - unsigned Type = (Flags & SC_TYPEMASK); + SymEntry* TagEntry; + unsigned SCType = (Flags & SC_TYPEMASK); - /* Type must be struct or union */ - PRECONDITION (Type == SC_STRUCT || Type == SC_UNION); + /* SCType must be struct or union */ + PRECONDITION (SCType == SC_STRUCT || SCType == SC_UNION); if ((Flags & SC_FICTITIOUS) == 0) { /* Do we have an entry with this name already? */ - Entry = FindSymInTable (CurTagTab, Name, HashStr (Name)); + TagEntry = FindSymInTable (CurTagTab, Name, HashStr (Name)); } else { /* Add a fictitious symbol in the fail-safe table */ - Entry = 0; + TagEntry = 0; CurTagTab = FailSafeTab; } - if (Entry) { + if (TagEntry) { /* We do have an entry. This may be a forward, so check it. */ - if ((Entry->Flags & SC_TYPEMASK) != Type) { + if ((TagEntry->Flags & SC_TYPEMASK) != SCType) { /* Existing symbol is not a struct */ Error ("Symbol '%s' is already different kind", Name); - Entry = 0; - } else if ((Entry->Flags & Flags & SC_DEF) == SC_DEF) { + TagEntry = 0; + } else if ((TagEntry->Flags & Flags & SC_DEF) == SC_DEF) { /* Both structs are definitions. */ - if (Type == SC_STRUCT) { + if (SCType == SC_STRUCT) { Error ("Multiple definition for 'struct %s'", Name); } else { Error ("Multiple definition for 'union %s'", Name); } - Entry = 0; + TagEntry = 0; } else { /* Define the struct size if it is a definition */ if ((Flags & SC_DEF) == SC_DEF) { - Entry->Flags = Flags; - Entry->V.S.SymTab = Tab; - Entry->V.S.Size = Size; + TagEntry->Flags = Flags; + TagEntry->V.S.SymTab = Tab; + TagEntry->V.S.Size = Size; /* Remember this is the first definition of this type */ if (DSFlags != 0) { @@ -957,35 +957,35 @@ SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTabl } } - if (Entry == 0) { + if (TagEntry == 0) { /* Use the fail-safe table for fictitious symbols */ CurTagTab = FailSafeTab; } } - if (Entry == 0) { + if (TagEntry == 0) { /* Create a new entry */ - Entry = NewSymEntry (Name, Flags); + TagEntry = NewSymEntry (Name, Flags); /* Set the struct data */ - Entry->V.S.SymTab = Tab; - Entry->V.S.Size = Size; + TagEntry->V.S.SymTab = Tab; + TagEntry->V.S.Size = Size; /* Remember this is the first definition of this type */ if (CurTagTab != FailSafeTab && DSFlags != 0) { - if ((Entry->Flags & SC_DEF) != 0) { + if ((TagEntry->Flags & SC_DEF) != 0) { *DSFlags |= DS_NEW_TYPE_DEF; } *DSFlags |= DS_NEW_TYPE_DECL; } /* Add it to the current tag table */ - AddSymEntry (CurTagTab, Entry); + AddSymEntry (CurTagTab, TagEntry); } /* Return the entry */ - return Entry; + return TagEntry; } diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h index 1df61a822..b711fe606 100644 --- a/src/cc65/symtab.h +++ b/src/cc65/symtab.h @@ -169,10 +169,10 @@ unsigned short FindSPAdjustment (const char* Name); SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTable* Tab, unsigned* DSFlags); -/* Add an enum entry and return it */ +/* Add an enum tag entry and return it */ SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTable* Tab, unsigned* DSFlags); -/* Add a struct/union entry and return it */ +/* Add a struct/union tag entry and return it */ SymEntry* AddBitField (const char* Name, const Type* Type, unsigned Offs, unsigned BitOffs, unsigned BitWidth, int SignednessSpecified); diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index 6052f4a84..29c8fe51e 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -303,8 +303,8 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) if ((IsTypeEnum (lhs) || IsTypeEnum (rhs))) { /* Compare the tag types */ - Sym1 = IsTypeEnum (lhs) ? GetESUSymEntry (lhs) : 0; - Sym2 = IsTypeEnum (rhs) ? GetESUSymEntry (rhs) : 0; + Sym1 = IsTypeEnum (lhs) ? GetESUTagSym (lhs) : 0; + Sym2 = IsTypeEnum (rhs) ? GetESUTagSym (rhs) : 0; if (Sym1 != Sym2) { if (Sym1 == 0 || Sym2 == 0) { @@ -420,8 +420,8 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) case T_TYPE_STRUCT: case T_TYPE_UNION: /* Compare the tag types */ - Sym1 = GetESUSymEntry (lhs); - Sym2 = GetESUSymEntry (rhs); + Sym1 = GetESUTagSym (lhs); + Sym2 = GetESUTagSym (rhs); CHECK (Sym1 != 0 || Sym2 != 0); From feaedc5b5031192c7a16f32c0b294030cf0c11b3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 12 Oct 2022 13:10:17 +0800 Subject: [PATCH 1839/2710] Better organized stuff related to C types. --- src/cc65/datatype.c | 1264 ++++++++++++++++++++++--------------------- src/cc65/datatype.h | 389 +++++++------ 2 files changed, 883 insertions(+), 770 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index fe0b9e0a3..9a661c037 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -87,317 +87,6 @@ const Type type_c_void_p[] = { TYPE(T_PTR), TYPE(T_C_VOID), TYPE(T_END) }; -const char* GetBasicTypeName (const Type* T) -/* Return a const name string of the basic type. -** Return "type" for unknown basic types. -*/ -{ - switch (GetRawType (T)) { - case T_TYPE_ENUM: return "enum"; - case T_TYPE_BITFIELD: return "bit-field"; - case T_TYPE_FLOAT: return "float"; - case T_TYPE_DOUBLE: return "double"; - case T_TYPE_VOID: return "void"; - case T_TYPE_STRUCT: return "struct"; - case T_TYPE_UNION: return "union"; - case T_TYPE_ARRAY: return "array"; - case T_TYPE_PTR: return "pointer"; - case T_TYPE_FUNC: return "function"; - case T_TYPE_NONE: /* FALLTHROUGH */ - default: break; - } - if (IsClassInt (T)) { - if (IsRawSignSigned (T)) { - switch (GetRawType (T)) { - case T_TYPE_CHAR: return "signed char"; - case T_TYPE_SHORT: return "short"; - case T_TYPE_INT: return "int"; - case T_TYPE_LONG: return "long"; - case T_TYPE_LONGLONG: return "long long"; - default: - return "signed integer"; - } - } else if (IsRawSignUnsigned (T)) { - switch (GetRawType (T)) { - case T_TYPE_CHAR: return "unsigned char"; - case T_TYPE_SHORT: return "unsigned short"; - case T_TYPE_INT: return "unsigned int"; - case T_TYPE_LONG: return "unsigned long"; - case T_TYPE_LONGLONG: return "unsigned long long"; - default: - return "unsigned integer"; - } - } else { - switch (GetRawType (T)) { - case T_TYPE_CHAR: return "char"; - case T_TYPE_SHORT: return "short"; - case T_TYPE_INT: return "int"; - case T_TYPE_LONG: return "long"; - case T_TYPE_LONGLONG: return "long long"; - default: - return "integer"; - } - } - } - return "type"; -} - - - -static const char* GetTagSymName (const Type* T) -/* Return a name string of the type or the symbol name if it is an ESU type. -** Note: This may use a static buffer that could be overwritten by other calls. -*/ -{ - static char TypeName [IDENTSIZE + 16]; - SymEntry* TagSym; - - TagSym = GetESUTagSym (T); - if (TagSym == 0) { - return GetBasicTypeName (T); - } - sprintf (TypeName, "%s %s", GetBasicTypeName (T), - TagSym->Name[0] != '\0' ? TagSym->Name : "<unknown>"); - - return TypeName; -} - - - -static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBuf* East, const Type* T) -/* Return the name string of the given type split into a western part and an -** eastern part. -*/ -{ - struct StrBuf Buf = AUTO_STRBUF_INITIALIZER; - - if (IsTypeArray (T)) { - - long Count = GetElementCount (T); - if (!SB_IsEmpty (East)) { - if (Count > 0) { - SB_Printf (&Buf, "[%ld]", Count); - } else { - SB_Printf (&Buf, "[]"); - } - SB_Append (East, &Buf); - SB_Terminate (East); - - } else { - if (Count > 0) { - SB_Printf (East, "[%ld]", Count); - } else { - SB_Printf (East, "[]"); - } - - if (!SB_IsEmpty (West)) { - /* Add parentheses to West */ - SB_Printf (&Buf, "(%s)", SB_GetConstBuf (West)); - SB_Copy (West, &Buf); - SB_Terminate (West); - } - } - - /* Get element type */ - GetFullTypeNameWestEast (West, East, T + 1); - - } else if (IsTypeFunc (T)) { - - FuncDesc* D = GetFuncDesc (T); - struct StrBuf ParamList = AUTO_STRBUF_INITIALIZER; - - /* First argument */ - SymEntry* Param = D->SymTab->SymHead; - unsigned I; - for (I = 0; I < D->ParamCount; ++I) { - CHECK (Param != 0 && (Param->Flags & SC_PARAM) != 0); - if (I > 0) { - SB_AppendStr (&ParamList, ", "); - } - SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); - SB_Clear (&Buf); - /* Next argument */ - Param = Param->NextSym; - } - if ((D->Flags & FD_VARIADIC) == 0) { - if (D->ParamCount == 0 && (D->Flags & FD_EMPTY) == 0) { - SB_AppendStr (&ParamList, "void"); - } - } else { - if (D->ParamCount > 0) { - SB_AppendStr (&ParamList, ", ..."); - } else { - SB_AppendStr (&ParamList, "..."); - } - } - SB_Terminate (&ParamList); - - /* Join the existing West and East together */ - if (!SB_IsEmpty (East)) { - SB_Append (West, East); - SB_Terminate (West); - SB_Clear (East); - } - - if (SB_IsEmpty (West)) { - /* Just use the param list */ - SB_Printf (West, "(%s)", SB_GetConstBuf (&ParamList)); - } else { - /* Append the param list to the existing West */ - SB_Printf (&Buf, "(%s)(%s)", SB_GetConstBuf (West), SB_GetConstBuf (&ParamList)); - SB_Printf (West, "%s", SB_GetConstBuf (&Buf)); - } - SB_Done (&ParamList); - - /* Return type */ - GetFullTypeNameWestEast (West, East, T + 1); - - } else if (IsTypePtr (T)) { - - int QualCount = 0; - - SB_Printf (&Buf, "*"); - - /* Add qualifiers */ - if ((GetQualifier (T) & ~T_QUAL_NEAR) != T_QUAL_NONE) { - QualCount = GetQualifierTypeCodeNameBuf (&Buf, T->C, T_QUAL_NEAR); - } - - if (!SB_IsEmpty (West)) { - if (QualCount > 0) { - SB_AppendChar (&Buf, ' '); - } - SB_Append (&Buf, West); - } - - SB_Copy (West, &Buf); - SB_Terminate (West); - - /* Get indirection type */ - GetFullTypeNameWestEast (West, East, T + 1); - - } else { - - /* Add qualifiers */ - if ((GetQualifier (T) & ~T_QUAL_NEAR) != 0) { - if (GetQualifierTypeCodeNameBuf (&Buf, T->C, T_QUAL_NEAR) > 0) { - SB_AppendChar (&Buf, ' '); - } - } - - if (!IsTypeBitField (T)) { - SB_AppendStr (&Buf, GetTagSymName (T)); - } else { - SB_AppendStr (&Buf, GetBasicTypeName (T + 1)); - } - - if (!SB_IsEmpty (West)) { - SB_AppendChar (&Buf, ' '); - SB_Append (&Buf, West); - } - - SB_Copy (West, &Buf); - SB_Terminate (West); - } - - SB_Done (&Buf); - return West; -} - - - -const char* GetFullTypeName (const Type* T) -/* Return the full name string of the given type */ -{ - struct StrBuf* Buf = NewDiagnosticStrBuf (); - GetFullTypeNameBuf (Buf, T); - - return SB_GetConstBuf (Buf); -} - - - -struct StrBuf* GetFullTypeNameBuf (struct StrBuf* S, const Type* T) -/* Return the full name string of the given type */ -{ - struct StrBuf East = AUTO_STRBUF_INITIALIZER; - GetFullTypeNameWestEast (S, &East, T); - - /* Join West and East */ - SB_Append (S, &East); - SB_Terminate (S); - SB_Done (&East); - - return S; -} - - - -int GetQualifierTypeCodeNameBuf (struct StrBuf* S, TypeCode Qual, TypeCode IgnoredQual) -/* Return the names of the qualifiers of the type. -** Qualifiers to be ignored can be specified with the IgnoredQual flags. -** Return the count of added qualifier names. -*/ -{ - int Count = 0; - - Qual &= T_MASK_QUAL & ~IgnoredQual; - if (Qual & T_QUAL_CONST) { - if (!SB_IsEmpty (S)) { - SB_AppendChar (S, ' '); - } - SB_AppendStr (S, "const"); - ++Count; - } - if (Qual & T_QUAL_VOLATILE) { - if (Count > 0) { - SB_AppendChar (S, ' '); - } - SB_AppendStr (S, "volatile"); - ++Count; - } - if (Qual & T_QUAL_RESTRICT) { - if (Count > 0) { - SB_AppendChar (S, ' '); - } - SB_AppendStr (S, "restrict"); - ++Count; - } - if (Qual & T_QUAL_NEAR) { - if (Count > 0) { - SB_AppendChar (S, ' '); - } - SB_AppendStr (S, "__near__"); - ++Count; - } - if (Qual & T_QUAL_FAR) { - SB_AppendStr (S, "__far__"); - ++Count; - } - if (Qual & T_QUAL_FASTCALL) { - if (Count > 0) { - SB_AppendChar (S, ' '); - } - SB_AppendStr (S, "__fastcall__"); - ++Count; - } - if (Qual & T_QUAL_CDECL) { - if (Count > 0) { - SB_AppendChar (S, ' '); - } - SB_AppendStr (S, "__cdecl__"); - ++Count; - } - - if (Count > 0) { - SB_Terminate (S); - } - - return Count; -} - - - unsigned TypeLen (const Type* T) /* Return the length of the type string */ { @@ -454,6 +143,12 @@ void TypeFree (Type* T) +/*****************************************************************************/ +/* Type info extraction */ +/*****************************************************************************/ + + + int SignExtendChar (int C) /* Do correct sign extension of a character */ { @@ -466,70 +161,6 @@ int SignExtendChar (int C) -Type* GetCharArrayType (unsigned Len) -/* Return the type for a char array of the given length */ -{ - /* Allocate memory for the type string */ - Type* T = TypeAlloc (3); /* array/char/terminator */ - - /* Fill the type string */ - T[0].C = T_ARRAY; - T[0].A.L = Len; /* Array length is in the L attribute */ - T[1].C = T_CHAR; - T[2].C = T_END; - - /* Return the new type */ - return T; -} - - - -Type* GetImplicitFuncType (void) -/* Return a type string for an inplicitly declared function */ -{ - /* Get a new function descriptor */ - FuncDesc* F = NewFuncDesc (); - - /* Allocate memory for the type string */ - Type* T = TypeAlloc (3); /* func/returns int/terminator */ - - /* Prepare the function descriptor */ - F->Flags = FD_EMPTY; - F->SymTab = &EmptySymTab; - F->TagTab = &EmptySymTab; - - /* Fill the type string */ - T[0].C = T_FUNC | CodeAddrSizeQualifier (); - T[0].A.F = F; - T[1].C = T_INT; - T[2].C = T_END; - - /* Return the new type */ - return T; -} - - - -const Type* GetStructReplacementType (const Type* SType) -/* Get a replacement type for passing a struct/union in the primary register */ -{ - const Type* NewType; - /* If the size is less than or equal to that of a long, we will copy the - ** struct using the primary register, otherwise we will use memcpy. - */ - switch (SizeOf (SType)) { - case 1: NewType = type_uchar; break; - case 2: NewType = type_uint; break; - case 3: /* FALLTHROUGH */ - case 4: NewType = type_ulong; break; - default: NewType = SType; break; - } - - return NewType; -} - - - long GetIntegerTypeMin (const Type* Type) /* Get the smallest possible value of the integer type. ** The type must have a known size. @@ -572,150 +203,8 @@ unsigned long GetIntegerTypeMax (const Type* Type) -static unsigned GetBitFieldMinimalTypeSize (unsigned BitWidth) -/* Return the size of the smallest integer type that may have BitWidth bits */ -{ - /* Since all integer types supported in cc65 for bit-fields have sizes that - ** are powers of 2, we can just use this bit-twiddling trick. - */ - unsigned V = (int)(BitWidth - 1U) / (int)CHAR_BITS; - V |= V >> 1; - V |= V >> 2; - V |= V >> 4; - V |= V >> 8; - V |= V >> 16; - - /* Return the result size */ - return V + 1U; -} - - - -const Type* GetUnderlyingType (const Type* Type) -/* Get the underlying type of an enum or other integer class type */ -{ - if (IsISOChar (Type)) { - return IS_Get (&SignedChars) ? type_schar : type_uchar; - } else if (IsTypeEnum (Type)) { - /* This should not happen, but just in case */ - if (Type->A.S == 0) { - Internal ("Enum tag type error in GetUnderlyingTypeCode"); - } - - /* If incomplete enum type is used, just return its raw type */ - if (Type->A.S->V.E.Type != 0) { - return Type->A.S->V.E.Type; - } - } else if (IsTypeBitField (Type)) { - /* We consider the smallest type that can represent all values of the - ** bit-field, instead of the type used in the declaration, the truly - ** underlying of the bit-field. - */ - switch (GetBitFieldMinimalTypeSize (Type->A.B.Width)) { - case SIZEOF_CHAR: Type = IsSignSigned (Type) ? type_schar : type_uchar; break; - case SIZEOF_INT: Type = IsSignSigned (Type) ? type_int : type_uint; break; - case SIZEOF_LONG: Type = IsSignSigned (Type) ? type_long : type_ulong; break; - default: Type = IsSignSigned (Type) ? type_int : type_uint; break; - } - } - - return Type; -} - - - -TypeCode GetUnderlyingTypeCode (const Type* Type) -/* Get the type code of the unqualified underlying type of TCode. -** Return UnqualifiedType (TCode) if TCode is not scalar. -*/ -{ - TypeCode Underlying = UnqualifiedType (Type->C); - - if (IsISOChar (Type)) { - - return IS_Get (&SignedChars) ? T_SCHAR : T_UCHAR; - - } else if (IsTypeEnum (Type)) { - TypeCode TCode; - - /* This should not happen, but just in case */ - if (Type->A.S == 0) { - Internal ("Enum tag type error in GetUnderlyingTypeCode"); - } - - /* Inspect the underlying type of the enum */ - if (Type->A.S->V.E.Type == 0) { - /* Incomplete enum type is used */ - return Underlying; - } - TCode = UnqualifiedType (Type->A.S->V.E.Type->C); - - /* Replace the type code with integer */ - Underlying = (TCode & ~T_MASK_TYPE); - switch (TCode & T_MASK_SIZE) { - case T_SIZE_INT: Underlying |= T_TYPE_INT; break; - case T_SIZE_LONG: Underlying |= T_TYPE_LONG; break; - case T_SIZE_SHORT: Underlying |= T_TYPE_SHORT; break; - case T_SIZE_CHAR: Underlying |= T_TYPE_CHAR; break; - case T_SIZE_LONGLONG: Underlying |= T_TYPE_LONGLONG; break; - default: Underlying |= T_TYPE_INT; break; - } - } else if (IsTypeBitField (Type)) { - /* We consider the smallest type that can represent all values of the - ** bit-field, instead of the type used in the declaration, the truly - ** underlying of the bit-field. - */ - switch (GetBitFieldMinimalTypeSize (Type->A.B.Width)) { - case SIZEOF_CHAR: Underlying = T_CHAR; break; - case SIZEOF_INT: Underlying = T_INT; break; - case SIZEOF_LONG: Underlying = T_LONG; break; - case SIZEOF_LONGLONG: Underlying = T_LONGLONG; break; - default: Underlying = T_INT; break; - } - Underlying &= ~T_MASK_SIGN; - Underlying |= Type->C & T_MASK_SIGN; - } - - return Underlying; -} - - - -const Type* GetBitFieldChunkType (const Type* Type) -/* Get the type needed to operate on the byte chunk containing the bit-field */ -{ - unsigned ChunkSize; - if ((Type->A.B.Width - 1U) / CHAR_BITS == - (Type->A.B.Offs + Type->A.B.Width - 1U) / CHAR_BITS) { - /* T bit-field fits within its underlying type */ - return GetUnderlyingType (Type); - } - - ChunkSize = GetBitFieldMinimalTypeSize (Type->A.B.Offs + Type->A.B.Width); - if (ChunkSize < SizeOf (Type + 1)) { - /* The end of the bit-field is offset by some bits so that it requires - ** more bytes to be accessed as a whole than its underlying type does. - ** Note: In cc65 the bit offset is always less than CHAR_BITS. - */ - switch (ChunkSize) { - case SIZEOF_CHAR: return IsSignSigned (Type) ? type_schar : type_uchar; - case SIZEOF_INT: return IsSignSigned (Type) ? type_int : type_uint; - case SIZEOF_LONG: return IsSignSigned (Type) ? type_long : type_ulong; - default: return IsSignSigned (Type) ? type_int : type_uint; - } - } - - /* We can always use the declarartion integer type as the chunk type. - ** Note: A bit-field will not occupy bits located in bytes more than that - ** of its declaration type in cc65. So this is OK. - */ - return Type + 1; -} - - - unsigned SizeOf (const Type* T) -/* Compute size of object represented by type array. */ +/* Compute size (in bytes) of object represented by type array */ { switch (GetUnderlyingTypeCode (T)) { @@ -788,7 +277,7 @@ unsigned SizeOf (const Type* T) unsigned PSizeOf (const Type* T) -/* Compute size of pointer object. */ +/* Compute size (in bytes) of pointee object */ { /* We are expecting a pointer expression */ CHECK (IsClassPtr (T)); @@ -800,9 +289,9 @@ unsigned PSizeOf (const Type* T) unsigned CheckedSizeOf (const Type* T) -/* Return the size of a data type. If the size is zero, emit an error and -** return some valid size instead (so the rest of the compiler doesn't have -** to work with invalid sizes). +/* Return the size (in bytes) of a data type. If the size is zero, emit an +** error and return some valid size instead (so the rest of the compiler +** doesn't have to work with invalid sizes). */ { unsigned Size = SizeOf (T); @@ -820,9 +309,9 @@ unsigned CheckedSizeOf (const Type* T) unsigned CheckedPSizeOf (const Type* T) -/* Return the size of a data type that is pointed to by a pointer. If the -** size is zero, emit an error and return some valid size instead (so the -** rest of the compiler doesn't have to work with invalid sizes). +/* Return the size (in bytes) of a data type that is pointed to by a pointer. +** If the size is zero, emit an error and return some valid size instead (so +** the rest of the compiler doesn't have to work with invalid sizes). */ { unsigned Size = PSizeOf (T); @@ -839,6 +328,205 @@ unsigned CheckedPSizeOf (const Type* T) +static unsigned GetBitFieldMinimalTypeSize (unsigned BitWidth) +/* Return the size of the smallest integer type that may have BitWidth bits */ +{ + /* Since all integer types supported in cc65 for bit-fields have sizes that + ** are powers of 2, we can just use this bit-twiddling trick. + */ + unsigned V = (int)(BitWidth - 1U) / (int)CHAR_BITS; + V |= V >> 1; + V |= V >> 2; + V |= V >> 4; + V |= V >> 8; + V |= V >> 16; + + /* Return the result size */ + return V + 1U; +} + + + +TypeCode GetUnderlyingTypeCode (const Type* Type) +/* Get the type code of the unqualified underlying type of TCode. +** Return UnqualTypeCode (Type) if Type is not scalar. +*/ +{ + TypeCode Underlying = UnqualifiedType (Type->C); + + if (IsISOChar (Type)) { + + return IS_Get (&SignedChars) ? T_SCHAR : T_UCHAR; + + } else if (IsTypeEnum (Type)) { + TypeCode TCode; + + /* This should not happen, but just in case */ + if (Type->A.S == 0) { + Internal ("Enum tag type error in GetUnderlyingTypeCode"); + } + + /* Inspect the underlying type of the enum */ + if (Type->A.S->V.E.Type == 0) { + /* Incomplete enum type is used */ + return Underlying; + } + TCode = UnqualifiedType (Type->A.S->V.E.Type->C); + + /* Replace the type code with integer */ + Underlying = (TCode & ~T_MASK_TYPE); + switch (TCode & T_MASK_SIZE) { + case T_SIZE_INT: Underlying |= T_TYPE_INT; break; + case T_SIZE_LONG: Underlying |= T_TYPE_LONG; break; + case T_SIZE_SHORT: Underlying |= T_TYPE_SHORT; break; + case T_SIZE_CHAR: Underlying |= T_TYPE_CHAR; break; + case T_SIZE_LONGLONG: Underlying |= T_TYPE_LONGLONG; break; + default: Underlying |= T_TYPE_INT; break; + } + } else if (IsTypeBitField (Type)) { + /* We consider the smallest type that can represent all values of the + ** bit-field, instead of the type used in the declaration, the truly + ** underlying of the bit-field. + */ + switch (GetBitFieldMinimalTypeSize (Type->A.B.Width)) { + case SIZEOF_CHAR: Underlying = T_CHAR; break; + case SIZEOF_INT: Underlying = T_INT; break; + case SIZEOF_LONG: Underlying = T_LONG; break; + case SIZEOF_LONGLONG: Underlying = T_LONGLONG; break; + default: Underlying = T_INT; break; + } + Underlying &= ~T_MASK_SIGN; + Underlying |= Type->C & T_MASK_SIGN; + } + + return Underlying; +} + + + +/*****************************************************************************/ +/* Type manipulation */ +/*****************************************************************************/ + + + +Type* GetImplicitFuncType (void) +/* Return a type string for an implicitly declared function */ +{ + /* Get a new function descriptor */ + FuncDesc* F = NewFuncDesc (); + + /* Allocate memory for the type string */ + Type* T = TypeAlloc (3); /* func/returns int/terminator */ + + /* Prepare the function descriptor */ + F->Flags = FD_EMPTY; + F->SymTab = &EmptySymTab; + F->TagTab = &EmptySymTab; + + /* Fill the type string */ + T[0].C = T_FUNC | CodeAddrSizeQualifier (); + T[0].A.F = F; + T[1].C = T_INT; + T[2].C = T_END; + + /* Return the new type */ + return T; +} + + + +Type* GetCharArrayType (unsigned Len) +/* Return the type for a char array of the given length */ +{ + /* Allocate memory for the type string */ + Type* T = TypeAlloc (3); /* array/char/terminator */ + + /* Fill the type string */ + T[0].C = T_ARRAY; + T[0].A.L = Len; /* Array length is in the L attribute */ + T[1].C = T_CHAR; + T[2].C = T_END; + + /* Return the new type */ + return T; +} + + + +Type* NewPointerTo (const Type* T) +/* Return a type string that is "pointer to T". The type string is allocated +** on the heap and may be freed after use. +*/ +{ + /* Get the size of the type string including the terminator */ + unsigned Size = TypeLen (T) + 1; + + /* Allocate the new type string */ + Type* P = TypeAlloc (Size + 1); + + /* Create the return type... */ + P[0].C = T_PTR | (T[0].C & T_QUAL_ADDRSIZE); + memcpy (P+1, T, Size * sizeof (Type)); + + /* ...and return it */ + return P; +} + + + +Type* NewBitFieldType (const Type* T, unsigned BitOffs, unsigned BitWidth) +/* Return a type string that is "T : BitWidth" aligned on BitOffs. The type +** string is allocated on the heap and may be freed after use. +*/ +{ + Type* P; + + /* The type specifier must be integeral */ + CHECK (IsClassInt (T)); + + /* Allocate the new type string */ + P = TypeAlloc (3); + + /* Create the return type... */ + P[0].C = IsSignSigned (T) ? T_SBITFIELD : T_UBITFIELD; + P[0].C |= (T[0].C & T_QUAL_ADDRSIZE); + P[0].A.B.Offs = BitOffs; + P[0].A.B.Width = BitWidth; + + /* Get the declaration type */ + memcpy (&P[1], GetUnderlyingType (T), sizeof (P[1])); + + /* Get done... */ + P[2].C = T_END; + + /* ...and return it */ + return P; +} + + + +const Type* AddressOf (const Type* T) +/* Return a type string that is "address of T". The type string is allocated +** on the heap and may be freed after use. +*/ +{ + /* Get the size of the type string including the terminator */ + unsigned Size = TypeLen (T) + 1; + + /* Allocate the new type string */ + Type* P = TypeAlloc (Size + 1); + + /* Create the return type... */ + P[0].C = T_PTR | (T[0].C & T_QUAL_ADDRSIZE) | T_QUAL_CONST; + memcpy (P+1, T, Size * sizeof (Type)); + + /* ...and return it */ + return P; +} + + + const Type* Indirect (const Type* T) /* Do one indirection for the given type, that is, return the type where the ** given type points to. @@ -867,48 +555,6 @@ Type* IndirectModifiable (Type* T) -Type* NewPointerTo (const Type* T) -/* Return a type string that is "pointer to T". The type string is allocated -** on the heap and may be freed after use. -*/ -{ - /* Get the size of the type string including the terminator */ - unsigned Size = TypeLen (T) + 1; - - /* Allocate the new type string */ - Type* P = TypeAlloc (Size + 1); - - /* Create the return type... */ - P[0].C = T_PTR | (T[0].C & T_QUAL_ADDRSIZE); - memcpy (P+1, T, Size * sizeof (Type)); - - /* ...and return it */ - return P; -} - - - -const Type* AddressOf (const Type* T) -/* Return a type string that is "address of T". The type string is allocated -** on the heap and may be freed after use. -*/ -{ - /* Get the size of the type string including the terminator */ - unsigned Size = TypeLen (T) + 1; - - /* Allocate the new type string */ - Type* P = TypeAlloc (Size + 1); - - /* Create the return type... */ - P[0].C = T_PTR | (T[0].C & T_QUAL_ADDRSIZE) | T_QUAL_CONST; - memcpy (P+1, T, Size * sizeof (Type)); - - /* ...and return it */ - return P; -} - - - Type* ArrayToPtr (const Type* T) /* Convert an array to a pointer to it's first element */ { @@ -1109,37 +755,98 @@ const Type* UnsignedType (const Type* T) -Type* NewBitFieldType (const Type* T, unsigned BitOffs, unsigned BitWidth) -/* Return a type string that is "T : BitWidth" aligned on BitOffs. The type -** string is allocated on the heap and may be freed after use. -*/ +const Type* GetUnderlyingType (const Type* Type) +/* Get the underlying type of an enum or other integer class type */ { - Type* P; + if (IsISOChar (Type)) { + return IS_Get (&SignedChars) ? type_schar : type_uchar; + } else if (IsTypeEnum (Type)) { + /* This should not happen, but just in case */ + if (Type->A.S == 0) { + Internal ("Enum tag type error in GetUnderlyingTypeCode"); + } - /* The type specifier must be integeral */ - CHECK (IsClassInt (T)); + /* If incomplete enum type is used, just return its raw type */ + if (Type->A.S->V.E.Type != 0) { + return Type->A.S->V.E.Type; + } + } else if (IsTypeBitField (Type)) { + /* We consider the smallest type that can represent all values of the + ** bit-field, instead of the type used in the declaration, the truly + ** underlying of the bit-field. + */ + switch (GetBitFieldMinimalTypeSize (Type->A.B.Width)) { + case SIZEOF_CHAR: Type = IsSignSigned (Type) ? type_schar : type_uchar; break; + case SIZEOF_INT: Type = IsSignSigned (Type) ? type_int : type_uint; break; + case SIZEOF_LONG: Type = IsSignSigned (Type) ? type_long : type_ulong; break; + default: Type = IsSignSigned (Type) ? type_int : type_uint; break; + } + } - /* Allocate the new type string */ - P = TypeAlloc (3); - - /* Create the return type... */ - P[0].C = IsSignSigned (T) ? T_SBITFIELD : T_UBITFIELD; - P[0].C |= (T[0].C & T_QUAL_ADDRSIZE); - P[0].A.B.Offs = BitOffs; - P[0].A.B.Width = BitWidth; - - /* Get the declaration type */ - memcpy (&P[1], GetUnderlyingType (T), sizeof (P[1])); - - /* Get done... */ - P[2].C = T_END; - - /* ...and return it */ - return P; + return Type; } +const Type* GetStructReplacementType (const Type* SType) +/* Get a replacement type for passing a struct/union in the primary register */ +{ + const Type* NewType; + /* If the size is less than or equal to that of a long, we will copy the + ** struct using the primary register, otherwise we will use memcpy. + */ + switch (SizeOf (SType)) { + case 1: NewType = type_uchar; break; + case 2: NewType = type_uint; break; + case 3: /* FALLTHROUGH */ + case 4: NewType = type_ulong; break; + default: NewType = SType; break; + } + + return NewType; +} + + + +const Type* GetBitFieldChunkType (const Type* Type) +/* Get the type needed to operate on the byte chunk containing the bit-field */ +{ + unsigned ChunkSize; + if ((Type->A.B.Width - 1U) / CHAR_BITS == + (Type->A.B.Offs + Type->A.B.Width - 1U) / CHAR_BITS) { + /* T bit-field fits within its underlying type */ + return GetUnderlyingType (Type); + } + + ChunkSize = GetBitFieldMinimalTypeSize (Type->A.B.Offs + Type->A.B.Width); + if (ChunkSize < SizeOf (Type + 1)) { + /* The end of the bit-field is offset by some bits so that it requires + ** more bytes to be accessed as a whole than its underlying type does. + ** Note: In cc65 the bit offset is always less than CHAR_BITS. + */ + switch (ChunkSize) { + case SIZEOF_CHAR: return IsSignSigned (Type) ? type_schar : type_uchar; + case SIZEOF_INT: return IsSignSigned (Type) ? type_int : type_uint; + case SIZEOF_LONG: return IsSignSigned (Type) ? type_long : type_ulong; + default: return IsSignSigned (Type) ? type_int : type_uint; + } + } + + /* We can always use the declarartion integer type as the chunk type. + ** Note: A bit-field will not occupy bits located in bytes more than that + ** of its declaration type in cc65. So this is OK. + */ + return Type + 1; +} + + + +/*****************************************************************************/ +/* Type Predicates */ +/*****************************************************************************/ + + + int IsTypeFragBitField (const Type* T) /* Return true if this is a bit-field that shares byte space with other fields */ { @@ -1261,6 +968,46 @@ int HasUnknownSize (const Type* T) +int TypeHasAttr (const Type* T) +/* Return true if the given type has attribute data */ +{ + return IsClassStruct (T) || IsTypeArray (T) || IsClassFunc (T); +} + + + +/*****************************************************************************/ +/* Qualifier helpers */ +/*****************************************************************************/ + + + +TypeCode AddrSizeQualifier (unsigned AddrSize) +/* Return T_QUAL_NEAR or T_QUAL_FAR depending on the address size */ +{ + switch (AddrSize) { + + case ADDR_SIZE_ABS: + return T_QUAL_NEAR; + + case ADDR_SIZE_FAR: + return T_QUAL_FAR; + + default: + Error ("Invalid address size"); + return T_QUAL_NEAR; + + } +} + + + +/*****************************************************************************/ +/* Function type helpers */ +/*****************************************************************************/ + + + int IsVariadicFunc (const Type* T) /* Return true if this is a function type or pointer to function type with ** variable parameter list. @@ -1369,6 +1116,12 @@ const FuncDesc* GetFuncDefinitionDesc (const Type* T) +/*****************************************************************************/ +/* Array type helpers */ +/*****************************************************************************/ + + + long GetElementCount (const Type* T) /* Get the element count of the array specified in T (which must be of ** array type). @@ -1414,6 +1167,12 @@ const Type* GetBaseElementType (const Type* T) +/*****************************************************************************/ +/* ESU types helpers */ +/*****************************************************************************/ + + + struct SymEntry* GetESUTagSym (const Type* T) /* Get the tag symbol entry of the enum/struct/union type. ** Return 0 if it is not an enum/struct/union. @@ -1439,30 +1198,319 @@ void SetESUTagSym (Type* T, struct SymEntry* S) -TypeCode AddrSizeQualifier (unsigned AddrSize) -/* Return T_QUAL_NEAR or T_QUAL_FAR depending on the address size */ +/*****************************************************************************/ +/* Helpers */ +/*****************************************************************************/ + + + +const char* GetBasicTypeName (const Type* T) +/* Return a const name string of the basic type. +** Return "type" for unknown basic types. +*/ { - switch (AddrSize) { - - case ADDR_SIZE_ABS: - return T_QUAL_NEAR; - - case ADDR_SIZE_FAR: - return T_QUAL_FAR; - - default: - Error ("Invalid address size"); - return T_QUAL_NEAR; - + switch (GetRawType (T)) { + case T_TYPE_ENUM: return "enum"; + case T_TYPE_BITFIELD: return "bit-field"; + case T_TYPE_FLOAT: return "float"; + case T_TYPE_DOUBLE: return "double"; + case T_TYPE_VOID: return "void"; + case T_TYPE_STRUCT: return "struct"; + case T_TYPE_UNION: return "union"; + case T_TYPE_ARRAY: return "array"; + case T_TYPE_PTR: return "pointer"; + case T_TYPE_FUNC: return "function"; + case T_TYPE_NONE: /* FALLTHROUGH */ + default: break; } + if (IsClassInt (T)) { + if (IsRawSignSigned (T)) { + switch (GetRawType (T)) { + case T_TYPE_CHAR: return "signed char"; + case T_TYPE_SHORT: return "short"; + case T_TYPE_INT: return "int"; + case T_TYPE_LONG: return "long"; + case T_TYPE_LONGLONG: return "long long"; + default: + return "signed integer"; + } + } else if (IsRawSignUnsigned (T)) { + switch (GetRawType (T)) { + case T_TYPE_CHAR: return "unsigned char"; + case T_TYPE_SHORT: return "unsigned short"; + case T_TYPE_INT: return "unsigned int"; + case T_TYPE_LONG: return "unsigned long"; + case T_TYPE_LONGLONG: return "unsigned long long"; + default: + return "unsigned integer"; + } + } else { + switch (GetRawType (T)) { + case T_TYPE_CHAR: return "char"; + case T_TYPE_SHORT: return "short"; + case T_TYPE_INT: return "int"; + case T_TYPE_LONG: return "long"; + case T_TYPE_LONGLONG: return "long long"; + default: + return "integer"; + } + } + } + return "type"; } -int TypeHasAttr (const Type* T) -/* Return true if the given type has attribute data */ +static const char* GetTagSymName (const Type* T) +/* Return a name string of the type or the symbol name if it is an ESU type. +** Note: This may use a static buffer that could be overwritten by other calls. +*/ { - return IsClassStruct (T) || IsTypeArray (T) || IsClassFunc (T); + static char TypeName [IDENTSIZE + 16]; + SymEntry* Sym; + + Sym = GetESUTagSym (T); + if (Sym == 0) { + return GetBasicTypeName (T); + } + sprintf (TypeName, "%s %s", GetBasicTypeName (T), + Sym->Name[0] != '\0' ? Sym->Name : "<unknown>"); + + return TypeName; +} + + + +const char* GetFullTypeName (const Type* T) +/* Return the full name string of the given type */ +{ + struct StrBuf* Buf = NewDiagnosticStrBuf (); + GetFullTypeNameBuf (Buf, T); + + return SB_GetConstBuf (Buf); +} + + + +static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBuf* East, const Type* T) +/* Return the name string of the given type split into a western part and an +** eastern part. +*/ +{ + struct StrBuf Buf = AUTO_STRBUF_INITIALIZER; + + if (IsTypeArray (T)) { + + long Count = GetElementCount (T); + if (!SB_IsEmpty (East)) { + if (Count > 0) { + SB_Printf (&Buf, "[%ld]", Count); + } else { + SB_Printf (&Buf, "[]"); + } + SB_Append (East, &Buf); + SB_Terminate (East); + + } else { + if (Count > 0) { + SB_Printf (East, "[%ld]", Count); + } else { + SB_Printf (East, "[]"); + } + + if (!SB_IsEmpty (West)) { + /* Add parentheses to West */ + SB_Printf (&Buf, "(%s)", SB_GetConstBuf (West)); + SB_Copy (West, &Buf); + SB_Terminate (West); + } + } + + /* Get element type */ + GetFullTypeNameWestEast (West, East, T + 1); + + } else if (IsTypeFunc (T)) { + + FuncDesc* D = GetFuncDesc (T); + struct StrBuf ParamList = AUTO_STRBUF_INITIALIZER; + + /* First argument */ + SymEntry* Param = D->SymTab->SymHead; + unsigned I; + for (I = 0; I < D->ParamCount; ++I) { + CHECK (Param != 0 && (Param->Flags & SC_PARAM) != 0); + if (I > 0) { + SB_AppendStr (&ParamList, ", "); + } + SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); + SB_Clear (&Buf); + /* Next argument */ + Param = Param->NextSym; + } + if ((D->Flags & FD_VARIADIC) == 0) { + if (D->ParamCount == 0 && (D->Flags & FD_EMPTY) == 0) { + SB_AppendStr (&ParamList, "void"); + } + } else { + if (D->ParamCount > 0) { + SB_AppendStr (&ParamList, ", ..."); + } else { + SB_AppendStr (&ParamList, "..."); + } + } + SB_Terminate (&ParamList); + + /* Join the existing West and East together */ + if (!SB_IsEmpty (East)) { + SB_Append (West, East); + SB_Terminate (West); + SB_Clear (East); + } + + if (SB_IsEmpty (West)) { + /* Just use the param list */ + SB_Printf (West, "(%s)", SB_GetConstBuf (&ParamList)); + } else { + /* Append the param list to the existing West */ + SB_Printf (&Buf, "(%s)(%s)", SB_GetConstBuf (West), SB_GetConstBuf (&ParamList)); + SB_Printf (West, "%s", SB_GetConstBuf (&Buf)); + } + SB_Done (&ParamList); + + /* Return type */ + GetFullTypeNameWestEast (West, East, T + 1); + + } else if (IsTypePtr (T)) { + + int QualCount = 0; + + SB_Printf (&Buf, "*"); + + /* Add qualifiers */ + if ((GetQualifier (T) & ~T_QUAL_NEAR) != T_QUAL_NONE) { + QualCount = GetQualifierTypeCodeNameBuf (&Buf, T->C, T_QUAL_NEAR); + } + + if (!SB_IsEmpty (West)) { + if (QualCount > 0) { + SB_AppendChar (&Buf, ' '); + } + SB_Append (&Buf, West); + } + + SB_Copy (West, &Buf); + SB_Terminate (West); + + /* Get indirection type */ + GetFullTypeNameWestEast (West, East, T + 1); + + } else { + + /* Add qualifiers */ + if ((GetQualifier (T) & ~T_QUAL_NEAR) != 0) { + if (GetQualifierTypeCodeNameBuf (&Buf, T->C, T_QUAL_NEAR) > 0) { + SB_AppendChar (&Buf, ' '); + } + } + + if (!IsTypeBitField (T)) { + SB_AppendStr (&Buf, GetTagSymName (T)); + } else { + SB_AppendStr (&Buf, GetBasicTypeName (T + 1)); + } + + if (!SB_IsEmpty (West)) { + SB_AppendChar (&Buf, ' '); + SB_Append (&Buf, West); + } + + SB_Copy (West, &Buf); + SB_Terminate (West); + } + + SB_Done (&Buf); + return West; +} + + + +struct StrBuf* GetFullTypeNameBuf (struct StrBuf* S, const Type* T) +/* Return the full name string of the given type */ +{ + struct StrBuf East = AUTO_STRBUF_INITIALIZER; + GetFullTypeNameWestEast (S, &East, T); + + /* Join West and East */ + SB_Append (S, &East); + SB_Terminate (S); + SB_Done (&East); + + return S; +} + + + +int GetQualifierTypeCodeNameBuf (struct StrBuf* S, TypeCode Qual, TypeCode IgnoredQual) +/* Return the names of the qualifiers of the type. +** Qualifiers to be ignored can be specified with the IgnoredQual flags. +** Return the count of added qualifier names. +*/ +{ + int Count = 0; + + Qual &= T_MASK_QUAL & ~IgnoredQual; + if (Qual & T_QUAL_CONST) { + if (!SB_IsEmpty (S)) { + SB_AppendChar (S, ' '); + } + SB_AppendStr (S, "const"); + ++Count; + } + if (Qual & T_QUAL_VOLATILE) { + if (Count > 0) { + SB_AppendChar (S, ' '); + } + SB_AppendStr (S, "volatile"); + ++Count; + } + if (Qual & T_QUAL_RESTRICT) { + if (Count > 0) { + SB_AppendChar (S, ' '); + } + SB_AppendStr (S, "restrict"); + ++Count; + } + if (Qual & T_QUAL_NEAR) { + if (Count > 0) { + SB_AppendChar (S, ' '); + } + SB_AppendStr (S, "__near__"); + ++Count; + } + if (Qual & T_QUAL_FAR) { + SB_AppendStr (S, "__far__"); + ++Count; + } + if (Qual & T_QUAL_FASTCALL) { + if (Count > 0) { + SB_AppendChar (S, ' '); + } + SB_AppendStr (S, "__fastcall__"); + ++Count; + } + if (Qual & T_QUAL_CDECL) { + if (Count > 0) { + SB_AppendChar (S, ' '); + } + SB_AppendStr (S, "__cdecl__"); + ++Count; + } + + if (Count > 0) { + SB_Terminate (S); + } + + return Count; } diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index be5b4a31c..5e4e2e39b 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -239,23 +239,6 @@ extern const Type type_c_void_p[]; -const char* GetBasicTypeName (const Type* T); -/* Return a const name string of the basic type. -** Return "type" for unknown basic types. -*/ - -const char* GetFullTypeName (const Type* T); -/* Return the full name string of the given type */ - -struct StrBuf* GetFullTypeNameBuf (struct StrBuf* S, const Type* T); -/* Return the full name string of the given type */ - -int GetQualifierTypeCodeNameBuf (struct StrBuf* S, TypeCode Qual, TypeCode IgnoredQual); -/* Return the names of the qualifiers of the type. -** Qualifiers to be ignored can be specified with the IgnoredQual flags. -** Return the count of added qualifier names. -*/ - unsigned TypeLen (const Type* T); /* Return the length of the type string */ @@ -273,17 +256,26 @@ Type* TypeAlloc (unsigned Len); void TypeFree (Type* T); /* Free a type string */ +#if defined(HAVE_INLINE) +INLINE void CopyTypeAttr (const Type* Src, Type* Dest) +/* Copy attribute data from Src to Dest */ +{ + Dest->A = Src->A; +} +#else +# define CopyTypeAttr(Src, Dest) ((Dest)->A = (Src)->A) +#endif + + + +/*****************************************************************************/ +/* Type info extraction */ +/*****************************************************************************/ + + + int SignExtendChar (int C); -/* Do correct sign extension of a character */ - -Type* GetCharArrayType (unsigned Len); -/* Return the type for a char array of the given length */ - -Type* GetImplicitFuncType (void); -/* Return a type string for an inplicitly declared function */ - -const Type* GetStructReplacementType (const Type* SType); -/* Get a replacement type for passing a struct/union in the primary register */ +/* Do correct sign extension of a character to an int */ long GetIntegerTypeMin (const Type* Type); /* Get the smallest possible value of the integer type. @@ -295,9 +287,42 @@ unsigned long GetIntegerTypeMax (const Type* Type); ** The type must have a known size. */ +unsigned SizeOf (const Type* T); +/* Compute size (in bytes) of object represented by type array */ + +unsigned PSizeOf (const Type* T); +/* Compute size (in bytes) of pointee object */ + +unsigned CheckedSizeOf (const Type* T); +/* Return the size (in bytes) of a data type. If the size is zero, emit an +** error and return some valid size instead (so the rest of the compiler +** doesn't have to work with invalid sizes). +*/ + +unsigned CheckedPSizeOf (const Type* T); +/* Return the size (in bytes) of a data type that is pointed to by a pointer. +** If the size is zero, emit an error and return some valid size instead (so +** the rest of the compiler doesn't have to work with invalid sizes). +*/ + +#if defined(HAVE_INLINE) +INLINE TypeCode GetQualifier (const Type* T) +/* Get the qualifier from the given type string */ +{ + return (T->C & T_MASK_QUAL); +} +#else +# define GetQualifier(T) ((T)->C & T_MASK_QUAL) +#endif + +TypeCode GetUnderlyingTypeCode (const Type* Type); +/* Get the type code of the unqualified underlying type of TCode. +** Return TCode if it is not scalar. +*/ + #if defined(HAVE_INLINE) INLINE TypeCode UnqualifiedType (TypeCode T) -/* Return the unqalified type code */ +/* Return the unqualified type code */ { return (T & ~T_MASK_QUAL); } @@ -305,32 +330,93 @@ INLINE TypeCode UnqualifiedType (TypeCode T) # define UnqualifiedType(T) ((T) & ~T_MASK_QUAL) #endif -const Type* GetUnderlyingType (const Type* Type); -/* Get the underlying type of an enum or other integer class type */ +#if defined(HAVE_INLINE) +INLINE TypeCode GetClass (const Type* T) +/* Get the class of a type string */ +{ + return (T->C & T_MASK_CLASS); +} +#else +# define GetClass(T) ((T)->C & T_MASK_CLASS) +#endif -TypeCode GetUnderlyingTypeCode (const Type* Type); -/* Get the type code of the unqualified underlying type of TCode. -** Return TCode if it is not scalar. +#if defined(HAVE_INLINE) +INLINE TypeCode GetSignedness (const Type* T) +/* Get the signedness of a type */ +{ + return (GetUnderlyingTypeCode (T) & T_MASK_SIGN); +} +#else +# define GetSignedness(T) (GetUnderlyingTypeCode (T) & T_MASK_SIGN) +#endif + +#if defined(HAVE_INLINE) +INLINE TypeCode GetSizeModifier (const Type* T) +/* Get the size modifier of a type */ +{ + return (GetUnderlyingTypeCode (T) & T_MASK_SIZE); +} +#else +# define GetSizeModifier(T) (GetUnderlyingTypeCode (T) & T_MASK_SIZE) +#endif + +#if defined(HAVE_INLINE) +INLINE TypeCode GetRawType (const Type* T) +/* Get the raw type */ +{ + return (T->C & T_MASK_TYPE); +} +#else +# define GetRawType(T) ((T)->C & T_MASK_TYPE) +#endif + +#if defined(HAVE_INLINE) +INLINE TypeCode GetRawSignedness (const Type* T) +/* Get the raw signedness of a type */ +{ + return ((T)->C & T_MASK_SIGN); +} +#else +# define GetRawSignedness(T) ((T)->C & T_MASK_SIGN) +#endif + +#if defined(HAVE_INLINE) +INLINE TypeCode GetRawSizeModifier (const Type* T) +/* Get the size modifier of a raw type */ +{ + return (T->C & T_MASK_SIZE); +} +#else +# define GetRawSizeModifier(T) ((T)->C & T_MASK_SIZE) +#endif + + + +/*****************************************************************************/ +/* Type manipulation */ +/*****************************************************************************/ + + + +Type* GetImplicitFuncType (void); +/* Return a type string for an implicitly declared function */ + +Type* GetCharArrayType (unsigned Len); +/* Return the type for a char array of the given length */ + +Type* NewPointerTo (const Type* T); +/* Return a type string that is "pointer to T". The type string is allocated +** on the heap and may be freed after use. */ -const Type* GetBitFieldChunkType (const Type* Type); -/* Get the type needed to operate on the byte chunk containing the bit-field */ - -unsigned SizeOf (const Type* T); -/* Compute size of object represented by type array. */ - -unsigned PSizeOf (const Type* T); -/* Compute size of pointer object. */ - -unsigned CheckedSizeOf (const Type* T); -/* Return the size of a data type. If the size is zero, emit an error and -** return some valid size instead (so the rest of the compiler doesn't have -** to work with invalid sizes). +Type* NewBitFieldType (const Type* T, unsigned BitOffs, unsigned BitWidth); +/* Return a type string that is "T : BitWidth" aligned on BitOffs. The type +** string is allocated on the heap and may be freed after use. */ -unsigned CheckedPSizeOf (const Type* T); -/* Return the size of a data type that is pointed to by a pointer. If the -** size is zero, emit an error and return some valid size instead (so the -** rest of the compiler doesn't have to work with invalid sizes). + +const Type* AddressOf (const Type* T); +/* Return a type string that is "address of T". The type string is allocated +** on the heap and may be freed after use. */ const Type* Indirect (const Type* T); @@ -343,16 +429,6 @@ Type* IndirectModifiable (Type* T); ** given type points to. */ -Type* NewPointerTo (const Type* T); -/* Return a type string that is "pointer to T". The type string is allocated -** on the heap and may be freed after use. -*/ - -const Type* AddressOf (const Type* T); -/* Return a type string that is "address of T". The type string is allocated -** on the heap and may be freed after use. -*/ - Type* ArrayToPtr (const Type* T); /* Convert an array to a pointer to it's first element */ @@ -382,20 +458,22 @@ const Type* SignedType (const Type* T); const Type* UnsignedType (const Type* T); /* Get unsigned counterpart of the integral type */ -Type* NewBitFieldType (const Type* T, unsigned BitOffs, unsigned BitWidth); -/* Return a type string that is "T : BitWidth" aligned on BitOffs. The type -** string is allocated on the heap and may be freed after use. -*/ +const Type* GetUnderlyingType (const Type* Type); +/* Get the underlying type of an enum or other integer class type */ + +const Type* GetStructReplacementType (const Type* SType); +/* Get a replacement type for passing a struct/union in the primary register */ + +const Type* GetBitFieldChunkType (const Type* Type); +/* Get the type needed to operate on the byte chunk containing the bit-field */ + + + +/*****************************************************************************/ +/* Type Predicates */ +/*****************************************************************************/ + -#if defined(HAVE_INLINE) -INLINE TypeCode GetRawType (const Type* T) -/* Get the raw type */ -{ - return (T->C & T_MASK_TYPE); -} -#else -# define GetRawType(T) ((T)->C & T_MASK_TYPE) -#endif #if defined(HAVE_INLINE) INLINE int IsTypeChar (const Type* T) @@ -414,7 +492,7 @@ INLINE int IsTypeShort (const Type* T) return (GetRawType (GetUnderlyingType (T)) == T_TYPE_SHORT); } #else -# define IsTypeShort(T) (GetRawType (GetUnderlyingType (T)) == T_TYPE_SHORT) +# define IsTypeShort(T) (GetRawType (GetUnderlyingType (T)) == T_TYPE_SHORT) #endif #if defined(HAVE_INLINE) @@ -579,7 +657,7 @@ INLINE int IsTypeUnion (const Type* T) return (GetRawType (T) == T_TYPE_UNION); } #else -# define IsTypeUnion(T) (GetRawType (T) == T_TYPE_UNION) +# define IsTypeUnion(T) (GetRawType (T) == T_TYPE_UNION) #endif #if defined(HAVE_INLINE) @@ -622,16 +700,6 @@ INLINE int IsTypeFuncPtr (const Type* T) # define IsTypeFuncPtr(T) (IsTypePtr (T) && IsTypeFunc (T+1)) #endif -#if defined(HAVE_INLINE) -INLINE TypeCode GetClass (const Type* T) -/* Get the class of a type string */ -{ - return (T->C & T_MASK_CLASS); -} -#else -# define GetClass(T) ((T)->C & T_MASK_CLASS) -#endif - #if defined(HAVE_INLINE) INLINE int IsClassInt (const Type* T) /* Return true if this is an integer type */ @@ -721,25 +789,8 @@ int IsEmptiableObjectType (const Type* T); int HasUnknownSize (const Type* T); /* Return true if this is an incomplete ESU type or an array of unknown size */ -#if defined(HAVE_INLINE) -INLINE TypeCode GetRawSignedness (const Type* T) -/* Get the raw signedness of a type */ -{ - return ((T)->C & T_MASK_SIGN); -} -#else -# define GetRawSignedness(T) ((T)->C & T_MASK_SIGN) -#endif - -#if defined(HAVE_INLINE) -INLINE TypeCode GetSignedness (const Type* T) -/* Get the signedness of a type */ -{ - return (GetUnderlyingTypeCode (T) & T_MASK_SIGN); -} -#else -# define GetSignedness(T) (GetUnderlyingTypeCode (T) & T_MASK_SIGN) -#endif +int TypeHasAttr (const Type* T); +/* Return true if the given type has attribute data */ #if defined(HAVE_INLINE) INLINE int IsRawSignUnsigned (const Type* T) @@ -781,35 +832,13 @@ INLINE int IsSignSigned (const Type* T) # define IsSignSigned(T) (GetSignedness (T) == T_SIGN_SIGNED) #endif -#if defined(HAVE_INLINE) -INLINE TypeCode GetRawSizeModifier (const Type* T) -/* Get the size modifier of a raw type */ -{ - return (T->C & T_MASK_SIZE); -} -#else -# define GetRawSizeModifier(T) ((T)->C & T_MASK_SIZE) -#endif -#if defined(HAVE_INLINE) -INLINE TypeCode GetSizeModifier (const Type* T) -/* Get the size modifier of a type */ -{ - return (GetUnderlyingTypeCode (T) & T_MASK_SIZE); -} -#else -# define GetSizeModifier(T) (GetUnderlyingTypeCode (T) & T_MASK_SIZE) -#endif -#if defined(HAVE_INLINE) -INLINE TypeCode GetQualifier (const Type* T) -/* Get the qualifier from the given type string */ -{ - return (T->C & T_MASK_QUAL); -} -#else -# define GetQualifier(T) ((T)->C & T_MASK_QUAL) -#endif +/*****************************************************************************/ +/* Qualifier helpers */ +/*****************************************************************************/ + + #if defined(HAVE_INLINE) INLINE int IsQualConst (const Type* T) @@ -891,6 +920,37 @@ INLINE int IsQualCConv (const Type* T) # define IsQualCConv(T) (((T)->C & T_QUAL_CCONV) != 0) #endif +TypeCode AddrSizeQualifier (unsigned AddrSize); +/* Return T_QUAL_NEAR or T_QUAL_FAR depending on the address size */ + +#if defined(HAVE_INLINE) +INLINE TypeCode CodeAddrSizeQualifier (void) +/* Return T_QUAL_NEAR or T_QUAL_FAR depending on the code address size */ +{ + return AddrSizeQualifier (CodeAddrSize); +} +#else +# define CodeAddrSizeQualifier() (AddrSizeQualifier (CodeAddrSize)) +#endif + +#if defined(HAVE_INLINE) +INLINE TypeCode DataAddrSizeQualifier (void) +/* Return T_QUAL_NEAR or T_QUAL_FAR depending on the data address size */ +{ + return AddrSizeQualifier (DataAddrSize); +} +#else +# define DataAddrSizeQualifier() (AddrSizeQualifier (DataAddrSize)) +#endif + + + +/*****************************************************************************/ +/* Function type helpers */ +/*****************************************************************************/ + + + int IsVariadicFunc (const Type* T) attribute ((const)); /* Return true if this is a function type or pointer to function type with ** variable parameter list. @@ -918,6 +978,14 @@ Type* GetFuncReturnModifiable (Type* T) attribute ((const)); const FuncDesc* GetFuncDefinitionDesc (const Type* T) attribute ((const)); /* Get the function descriptor of the function definition */ + + +/*****************************************************************************/ +/* Array type helpers */ +/*****************************************************************************/ + + + long GetElementCount (const Type* T); /* Get the element count of the array specified in T (which must be of ** array type). @@ -937,6 +1005,14 @@ const Type* GetBaseElementType (const Type* T); ** the element type that is not an array. */ + + +/*****************************************************************************/ +/* ESU types helpers */ +/*****************************************************************************/ + + + struct SymEntry* GetESUTagSym (const Type* T) attribute ((const)); /* Get the tag symbol entry of the enum/struct/union type. ** Return 0 if it is not an enum/struct/union. @@ -945,41 +1021,30 @@ struct SymEntry* GetESUTagSym (const Type* T) attribute ((const)); void SetESUTagSym (Type* T, struct SymEntry* S); /* Set the tag symbol entry of the enum/struct/union type */ -TypeCode AddrSizeQualifier (unsigned AddrSize); -/* Return T_QUAL_NEAR or T_QUAL_FAR depending on the address size */ -#if defined(HAVE_INLINE) -INLINE TypeCode CodeAddrSizeQualifier (void) -/* Return T_QUAL_NEAR or T_QUAL_FAR depending on the code address size */ -{ - return AddrSizeQualifier (CodeAddrSize); -} -#else -# define CodeAddrSizeQualifier() (AddrSizeQualifier (CodeAddrSize)) -#endif -#if defined(HAVE_INLINE) -INLINE TypeCode DataAddrSizeQualifier (void) -/* Return T_QUAL_NEAR or T_QUAL_FAR depending on the data address size */ -{ - return AddrSizeQualifier (DataAddrSize); -} -#else -# define DataAddrSizeQualifier() (AddrSizeQualifier (DataAddrSize)) -#endif +/*****************************************************************************/ +/* Helpers */ +/*****************************************************************************/ -int TypeHasAttr (const Type* T); -/* Return true if the given type has attribute data */ -#if defined(HAVE_INLINE) -INLINE void CopyTypeAttr (const Type* Src, Type* Dest) -/* Copy attribute data from Src to Dest */ -{ - Dest->A = Src->A; -} -#else -# define CopyTypeAttr(Src, Dest) ((Dest)->A = (Src)->A) -#endif + +const char* GetBasicTypeName (const Type* T); +/* Return a const name string of the basic type. +** Return "type" for unknown basic types. +*/ + +const char* GetFullTypeName (const Type* T); +/* Return the full name string of the given type */ + +struct StrBuf* GetFullTypeNameBuf (struct StrBuf* S, const Type* T); +/* Return the full name string of the given type */ + +int GetQualifierTypeCodeNameBuf (struct StrBuf* S, TypeCode Qual, TypeCode IgnoredQual); +/* Return the names of the qualifiers of the type. +** Qualifiers to be ignored can be specified with the IgnoredQual flags. +** Return the count of added qualifier names. +*/ void PrintType (FILE* F, const Type* T); /* Print fulle name of the type */ From a4a1230c62d8920950b3c2ab0f751a47cd1f0840 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 12 Oct 2022 13:10:17 +0800 Subject: [PATCH 1840/2710] Renamed some C type facility and fixed a few comments. Added some new C type code facility. Removed some unused type predicates. --- src/cc65/assignment.c | 2 +- src/cc65/codeseg.c | 2 +- src/cc65/datatype.c | 231 +++++++++++++++--------------- src/cc65/datatype.h | 324 ++++++++++++++++++++---------------------- src/cc65/declare.c | 16 +-- src/cc65/expr.c | 12 +- src/cc65/function.c | 4 +- src/cc65/initdata.c | 8 +- src/cc65/stdfunc.c | 12 +- src/cc65/swstmt.c | 2 +- src/cc65/symtab.c | 4 +- src/cc65/typecmp.c | 63 ++++---- src/cc65/typeconv.c | 2 +- 13 files changed, 330 insertions(+), 352 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 54ab28d4e..30e2f0fca 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -607,7 +607,7 @@ void OpAssign (const GenDesc* Gen, ExprDesc* Expr, const char* Op) Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; /* Only "=" accept struct/union */ - if (IsClassStruct (ltype) ? Gen != 0 : !IsClassScalar (ltype)) { + if (IsClassStruct (ltype) ? Gen != 0 : !IsScalarType (ltype)) { Error ("Invalid left operand for binary operator '%s'", Op); /* Continue. Wrong code will be generated, but the compiler won't ** break, so this is the best error recovery. diff --git a/src/cc65/codeseg.c b/src/cc65/codeseg.c index e621147ab..9f1bf4cc5 100644 --- a/src/cc65/codeseg.c +++ b/src/cc65/codeseg.c @@ -521,7 +521,7 @@ CodeSeg* NewCodeSeg (const char* SegName, SymEntry* Func) /* If we have a function given, get the return type of the function. ** Assume ANY return type besides void will use the A and X registers. */ - if (S->Func && !IsTypeVoid ((RetType = GetFuncReturn (Func->Type)))) { + if (S->Func && !IsTypeVoid ((RetType = GetFuncReturnType (Func->Type)))) { if (SizeOf (RetType) == SizeOf (type_long)) { S->ExitRegs = REG_EAX; } else { diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 023aefaf7..6907ee099 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -150,7 +150,7 @@ void TypeFree (Type* T) int SignExtendChar (int C) -/* Do correct sign extension of a character */ +/* Do correct sign extension of a character to an int */ { if (IS_Get (&SignedChars) && (C & 0x80) != 0) { return C | ~0xFF; @@ -214,7 +214,7 @@ unsigned BitSizeOf (const Type* T) unsigned SizeOf (const Type* T) /* Compute size (in bytes) of object represented by type array */ { - switch (GetUnderlyingTypeCode (T)) { + switch (GetUnqualTypeCode (T)) { case T_VOID: /* A void variable is a cc65 extension. @@ -347,7 +347,7 @@ unsigned CheckedPSizeOf (const Type* T) -static unsigned GetBitFieldMinimalTypeSize (unsigned BitWidth) +static unsigned GetMinimalTypeSizeByBitWidth (unsigned BitWidth) /* Return the size of the smallest integer type that may have BitWidth bits */ { /* Since all integer types supported in cc65 for bit-fields have sizes that @@ -366,14 +366,14 @@ static unsigned GetBitFieldMinimalTypeSize (unsigned BitWidth) -TypeCode GetUnderlyingTypeCode (const Type* Type) -/* Get the type code of the unqualified underlying type of TCode. -** Return UnqualTypeCode (Type) if Type is not scalar. +TypeCode GetUnqualTypeCode (const Type* Type) +/* Get the type code of the unqualified underlying type of Type. +** Return GetUnqualRawTypeCode (Type) if Type is not scalar. */ { - TypeCode Underlying = UnqualifiedType (Type->C); + TypeCode Underlying = GetUnqualRawTypeCode (Type); - if (IsISOChar (Type)) { + if (IsDeclTypeChar (Type)) { return IS_Get (&SignedChars) ? T_SCHAR : T_UCHAR; @@ -382,7 +382,7 @@ TypeCode GetUnderlyingTypeCode (const Type* Type) /* This should not happen, but just in case */ if (Type->A.S == 0) { - Internal ("Enum tag type error in GetUnderlyingTypeCode"); + Internal ("Enum tag type error in GetUnqualTypeCode"); } /* Inspect the underlying type of the enum */ @@ -390,24 +390,24 @@ TypeCode GetUnderlyingTypeCode (const Type* Type) /* Incomplete enum type is used */ return Underlying; } - TCode = UnqualifiedType (Type->A.S->V.E.Type->C); + TCode = GetUnqualRawTypeCode (Type->A.S->V.E.Type); /* Replace the type code with integer */ - Underlying = (TCode & ~T_MASK_TYPE); + Underlying = (TCode & ~T_MASK_RANK); switch (TCode & T_MASK_SIZE) { - case T_SIZE_INT: Underlying |= T_TYPE_INT; break; - case T_SIZE_LONG: Underlying |= T_TYPE_LONG; break; - case T_SIZE_SHORT: Underlying |= T_TYPE_SHORT; break; - case T_SIZE_CHAR: Underlying |= T_TYPE_CHAR; break; - case T_SIZE_LONGLONG: Underlying |= T_TYPE_LONGLONG; break; - default: Underlying |= T_TYPE_INT; break; + case T_SIZE_INT: Underlying |= T_RANK_INT; break; + case T_SIZE_LONG: Underlying |= T_RANK_LONG; break; + case T_SIZE_SHORT: Underlying |= T_RANK_SHORT; break; + case T_SIZE_CHAR: Underlying |= T_RANK_CHAR; break; + case T_SIZE_LONGLONG: Underlying |= T_RANK_LONGLONG; break; + default: Underlying |= T_RANK_INT; break; } } else if (IsTypeBitField (Type)) { /* We consider the smallest type that can represent all values of the ** bit-field, instead of the type used in the declaration, the truly ** underlying of the bit-field. */ - switch (GetBitFieldMinimalTypeSize (Type->A.B.Width)) { + switch (GetMinimalTypeSizeByBitWidth (Type->A.B.Width)) { case SIZEOF_CHAR: Underlying = T_CHAR; break; case SIZEOF_INT: Underlying = T_INT; break; case SIZEOF_LONG: Underlying = T_LONG; break; @@ -494,7 +494,7 @@ Type* NewPointerTo (const Type* T) -Type* NewBitFieldType (const Type* T, unsigned BitOffs, unsigned BitWidth) +Type* NewBitFieldOf (const Type* T, unsigned BitOffs, unsigned BitWidth) /* Return a type string that is "T : BitWidth" aligned on BitOffs. The type ** string is allocated on the heap and may be freed after use. */ @@ -560,20 +560,6 @@ const Type* Indirect (const Type* T) -Type* IndirectModifiable (Type* T) -/* Do one indirection for the given type, that is, return the type where the -** given type points to. -*/ -{ - /* We are expecting a pointer expression */ - CHECK (IsClassPtr (T)); - - /* Skip the pointer or array token itself */ - return T + 1; -} - - - Type* ArrayToPtr (const Type* T) /* Convert an array to a pointer to it's first element */ { @@ -648,12 +634,12 @@ const Type* IntPromotion (const Type* T) return IsSignUnsigned (T) ? type_ulong : type_long; } return T->A.B.Width == INT_BITS && IsSignUnsigned (T) ? type_uint : type_int; - } else if (IsTypeChar (T)) { + } else if (IsRankChar (T)) { /* An integer can represent all values from either signed or unsigned char, so convert ** chars to int. */ return type_int; - } else if (IsTypeShort (T)) { + } else if (IsRankShort (T)) { /* An integer cannot represent all values from unsigned short, so convert unsigned short ** to unsigned int. */ @@ -690,8 +676,8 @@ const Type* ArithmeticConvert (const Type* lhst, const Type* rhst) /* If either operand has type unsigned long int, the other operand is converted to ** unsigned long int. */ - if ((IsTypeLong (lhst) && IsSignUnsigned (lhst)) || - (IsTypeLong (rhst) && IsSignUnsigned (rhst))) { + if ((IsRankLong (lhst) && IsSignUnsigned (lhst)) || + (IsRankLong (rhst) && IsSignUnsigned (rhst))) { return type_ulong; } @@ -700,74 +686,74 @@ const Type* ArithmeticConvert (const Type* lhst, const Type* rhst) ** is converted to long int ; if a long int cannot represent all the values of an unsigned int, ** both operands are converted to unsigned long int. */ - if ((IsTypeLong (lhst) && IsTypeInt (rhst) && IsSignUnsigned (rhst)) || - (IsTypeLong (rhst) && IsTypeInt (lhst) && IsSignUnsigned (lhst))) { + if ((IsRankLong (lhst) && IsRankInt (rhst) && IsSignUnsigned (rhst)) || + (IsRankLong (rhst) && IsRankInt (lhst) && IsSignUnsigned (lhst))) { /* long can represent all unsigneds, so we are in the first sub-case. */ return type_long; } /* Otherwise, if either operand has type long int, the other operand is converted to long int. */ - if (IsTypeLong (lhst) || IsTypeLong (rhst)) { + if (IsRankLong (lhst) || IsRankLong (rhst)) { return type_long; } /* Otherwise, if either operand has type unsigned int, the other operand is converted to ** unsigned int. */ - if ((IsTypeInt (lhst) && IsSignUnsigned (lhst)) || - (IsTypeInt (rhst) && IsSignUnsigned (rhst))) { + if ((IsRankInt (lhst) && IsSignUnsigned (lhst)) || + (IsRankInt (rhst) && IsSignUnsigned (rhst))) { return type_uint; } /* Otherwise, both operands have type int. */ - CHECK (IsTypeInt (lhst)); + CHECK (IsRankInt (lhst)); CHECK (IsSignSigned (lhst)); - CHECK (IsTypeInt (rhst)); + CHECK (IsRankInt (rhst)); CHECK (IsSignSigned (rhst)); return type_int; } -const Type* SignedType (const Type* T) +const Type* GetSignedType (const Type* T) /* Get signed counterpart of the integral type */ { - switch (GetUnderlyingTypeCode (T) & T_MASK_TYPE) { - case T_TYPE_CHAR: + switch (GetUnqualTypeCode (T) & T_MASK_RANK) { + case T_RANK_CHAR: return type_schar; - case T_TYPE_INT: - case T_TYPE_SHORT: + case T_RANK_INT: + case T_RANK_SHORT: return type_int; - case T_TYPE_LONG: + case T_RANK_LONG: return type_long; default: - Internal ("Unknown type code: %lX", GetUnderlyingTypeCode (T)); + Internal ("Unknown type code: %lX", GetUnqualTypeCode (T)); return T; } } -const Type* UnsignedType (const Type* T) +const Type* GetUnsignedType (const Type* T) /* Get unsigned counterpart of the integral type */ { - switch (GetUnderlyingTypeCode (T) & T_MASK_TYPE) { - case T_TYPE_CHAR: + switch (GetUnqualTypeCode (T) & T_MASK_RANK) { + case T_RANK_CHAR: return type_uchar; - case T_TYPE_INT: - case T_TYPE_SHORT: + case T_RANK_INT: + case T_RANK_SHORT: return type_uint; - case T_TYPE_LONG: + case T_RANK_LONG: return type_ulong; default: - Internal ("Unknown type code: %lX", GetUnderlyingTypeCode (T)); + Internal ("Unknown type code: %lX", GetUnqualTypeCode (T)); return T; } } @@ -777,12 +763,12 @@ const Type* UnsignedType (const Type* T) const Type* GetUnderlyingType (const Type* Type) /* Get the underlying type of an enum or other integer class type */ { - if (IsISOChar (Type)) { + if (IsDeclTypeChar (Type)) { return IS_Get (&SignedChars) ? type_schar : type_uchar; } else if (IsTypeEnum (Type)) { /* This should not happen, but just in case */ if (Type->A.S == 0) { - Internal ("Enum tag type error in GetUnderlyingTypeCode"); + Internal ("Enum tag type error in GetUnderlyingType"); } /* If incomplete enum type is used, just return its raw type */ @@ -794,7 +780,7 @@ const Type* GetUnderlyingType (const Type* Type) ** bit-field, instead of the type used in the declaration, the truly ** underlying of the bit-field. */ - switch (GetBitFieldMinimalTypeSize (Type->A.B.Width)) { + switch (GetMinimalTypeSizeByBitWidth (Type->A.B.Width)) { case SIZEOF_CHAR: Type = IsSignSigned (Type) ? type_schar : type_uchar; break; case SIZEOF_INT: Type = IsSignSigned (Type) ? type_int : type_uint; break; case SIZEOF_LONG: Type = IsSignSigned (Type) ? type_long : type_ulong; break; @@ -808,7 +794,7 @@ const Type* GetUnderlyingType (const Type* Type) const Type* GetStructReplacementType (const Type* SType) -/* Get a replacement type for passing a struct/union in the primary register */ +/* Get a replacement type for passing a struct/union by value in the primary */ { const Type* NewType; /* If the size is less than or equal to that of a long, we will copy the @@ -837,7 +823,7 @@ const Type* GetBitFieldChunkType (const Type* Type) return GetUnderlyingType (Type); } - ChunkSize = GetBitFieldMinimalTypeSize (Type->A.B.Offs + Type->A.B.Width); + ChunkSize = GetMinimalTypeSizeByBitWidth (Type->A.B.Offs + Type->A.B.Width); if (ChunkSize < SizeOf (Type + 1)) { /* The end of the bit-field is offset by some bits so that it requires ** more bytes to be accessed as a whole than its underlying type does. @@ -875,50 +861,50 @@ int IsTypeFragBitField (const Type* T) -int IsClassObject (const Type* T) +int IsObjectType (const Type* T) /* Return true if this is a fully described object type */ { - return !IsTypeFunc (T) && !IsClassIncomplete (T); + return !IsTypeFunc (T) && !IsIncompleteType (T); } -int IsClassIncomplete (const Type* T) +int IsIncompleteType (const Type* T) /* Return true if this is an object type lacking size info */ { if (IsTypeArray (T)) { - return GetElementCount (T) == UNSPECIFIED || IsClassIncomplete (T + 1); + return GetElementCount (T) == UNSPECIFIED || IsIncompleteType (T + 1); } return IsTypeVoid (T) || IsIncompleteESUType (T); } -int IsClassArithmetic (const Type* T) -/* Return true if this is an integer or real floating type */ +int IsArithmeticType (const Type* T) +/* Return true if this is an integer or floating type */ { return IsClassInt (T) || IsClassFloat (T); } -int IsClassBasic (const Type* T) -/* Return true if this is a char, integer or floating type */ +int IsBasicType (const Type* T) +/* Return true if this is a character, integer or floating type */ { - return IsClassChar (T) || IsClassInt (T) || IsClassFloat (T); + return IsDeclRankChar (T) || IsClassInt (T) || IsClassFloat (T); } -int IsClassScalar (const Type* T) +int IsScalarType (const Type* T) /* Return true if this is an arithmetic or pointer type */ { - return IsClassArithmetic (T) || IsTypePtr (T); + return IsArithmeticType (T) || IsTypePtr (T); } -int IsClassDerived (const Type* T) +int IsDerivedType (const Type* T) /* Return true if this is an array, struct, union, function or pointer type */ { return IsTypeArray (T) || IsClassStruct (T) || IsClassFunc (T) || IsTypePtr (T); @@ -926,7 +912,7 @@ int IsClassDerived (const Type* T) -int IsClassAggregate (const Type* T) +int IsAggregateType (const Type* T) /* Return true if this is an array or struct type */ { return IsTypeArray (T) || IsTypeStruct (T); @@ -937,7 +923,7 @@ int IsClassAggregate (const Type* T) int IsRelationType (const Type* T) /* Return true if this is an arithmetic, array or pointer type */ { - return IsClassArithmetic (T) || IsClassPtr (T); + return IsArithmeticType (T) || IsClassPtr (T); } @@ -945,7 +931,7 @@ int IsRelationType (const Type* T) int IsCastType (const Type* T) /* Return true if this type can be used for casting */ { - return IsClassScalar (T) || IsTypeVoid (T); + return IsScalarType (T) || IsTypeVoid (T); } @@ -987,7 +973,7 @@ int HasUnknownSize (const Type* T) -int TypeHasAttr (const Type* T) +int TypeHasAttrData (const Type* T) /* Return true if the given type has attribute data */ { return IsClassStruct (T) || IsTypeArray (T) || IsClassFunc (T); @@ -1044,7 +1030,7 @@ int IsFastcallFunc (const Type* T) ** Check fails if the type is not a function or a pointer to function. */ { - if (UnqualifiedType (T->C) == T_PTR) { + if (GetUnqualRawTypeCode (T) == T_PTR) { /* Pointer to function */ ++T; } @@ -1056,7 +1042,7 @@ int IsFastcallFunc (const Type* T) FuncDesc* GetFuncDesc (const Type* T) /* Get the FuncDesc pointer from a function or pointer-to-function type */ { - if (UnqualifiedType (T->C) == T_PTR) { + if (GetUnqualRawTypeCode (T) == T_PTR) { /* Pointer to function */ ++T; } @@ -1073,7 +1059,7 @@ FuncDesc* GetFuncDesc (const Type* T) void SetFuncDesc (Type* T, FuncDesc* F) /* Set the FuncDesc pointer in a function or pointer-to-function type */ { - if (UnqualifiedType (T->C) == T_PTR) { + if (GetUnqualRawTypeCode (T) == T_PTR) { /* Pointer to function */ ++T; } @@ -1087,10 +1073,10 @@ void SetFuncDesc (Type* T, FuncDesc* F) -const Type* GetFuncReturn (const Type* T) +const Type* GetFuncReturnType (const Type* T) /* Return a pointer to the return type of a function or pointer-to-function type */ { - if (UnqualifiedType (T->C) == T_PTR) { + if (GetUnqualRawTypeCode (T) == T_PTR) { /* Pointer to function */ ++T; } @@ -1104,10 +1090,10 @@ const Type* GetFuncReturn (const Type* T) -Type* GetFuncReturnModifiable (Type* T) +Type* GetFuncReturnTypeModifiable (Type* T) /* Return a non-const pointer to the return type of a function or pointer-to-function type */ { - if (UnqualifiedType (T->C) == T_PTR) { + if (GetUnqualRawTypeCode (T) == T_PTR) { /* Pointer to function */ ++T; } @@ -1164,7 +1150,16 @@ void SetElementCount (Type* T, long Count) const Type* GetElementType (const Type* T) -/* Return the element type of the given array type. */ +/* Return the element type of the given array type */ +{ + CHECK (IsTypeArray (T)); + return T + 1; +} + + + +Type* GetElementTypeModifiable (Type* T) +/* Return the element type of the given array type */ { CHECK (IsTypeArray (T)); return T + 1; @@ -1228,48 +1223,48 @@ const char* GetBasicTypeName (const Type* T) ** Return "type" for unknown basic types. */ { - switch (GetRawType (T)) { - case T_TYPE_ENUM: return "enum"; - case T_TYPE_BITFIELD: return "bit-field"; - case T_TYPE_FLOAT: return "float"; - case T_TYPE_DOUBLE: return "double"; - case T_TYPE_VOID: return "void"; - case T_TYPE_STRUCT: return "struct"; - case T_TYPE_UNION: return "union"; - case T_TYPE_ARRAY: return "array"; - case T_TYPE_PTR: return "pointer"; - case T_TYPE_FUNC: return "function"; - case T_TYPE_NONE: /* FALLTHROUGH */ + switch (GetRawTypeRank (T)) { + case T_RANK_ENUM: return "enum"; + case T_RANK_BITFIELD: return "bit-field"; + case T_RANK_FLOAT: return "float"; + case T_RANK_DOUBLE: return "double"; + case T_RANK_VOID: return "void"; + case T_RANK_STRUCT: return "struct"; + case T_RANK_UNION: return "union"; + case T_RANK_ARRAY: return "array"; + case T_RANK_PTR: return "pointer"; + case T_RANK_FUNC: return "function"; + case T_RANK_NONE: /* FALLTHROUGH */ default: break; } if (IsClassInt (T)) { if (IsRawSignSigned (T)) { - switch (GetRawType (T)) { - case T_TYPE_CHAR: return "signed char"; - case T_TYPE_SHORT: return "short"; - case T_TYPE_INT: return "int"; - case T_TYPE_LONG: return "long"; - case T_TYPE_LONGLONG: return "long long"; + switch (GetRawTypeRank (T)) { + case T_RANK_CHAR: return "signed char"; + case T_RANK_SHORT: return "short"; + case T_RANK_INT: return "int"; + case T_RANK_LONG: return "long"; + case T_RANK_LONGLONG: return "long long"; default: return "signed integer"; } } else if (IsRawSignUnsigned (T)) { - switch (GetRawType (T)) { - case T_TYPE_CHAR: return "unsigned char"; - case T_TYPE_SHORT: return "unsigned short"; - case T_TYPE_INT: return "unsigned int"; - case T_TYPE_LONG: return "unsigned long"; - case T_TYPE_LONGLONG: return "unsigned long long"; + switch (GetRawTypeRank (T)) { + case T_RANK_CHAR: return "unsigned char"; + case T_RANK_SHORT: return "unsigned short"; + case T_RANK_INT: return "unsigned int"; + case T_RANK_LONG: return "unsigned long"; + case T_RANK_LONGLONG: return "unsigned long long"; default: return "unsigned integer"; } } else { - switch (GetRawType (T)) { - case T_TYPE_CHAR: return "char"; - case T_TYPE_SHORT: return "short"; - case T_TYPE_INT: return "int"; - case T_TYPE_LONG: return "long"; - case T_TYPE_LONGLONG: return "long long"; + switch (GetRawTypeRank (T)) { + case T_RANK_CHAR: return "char"; + case T_RANK_SHORT: return "short"; + case T_RANK_INT: return "int"; + case T_RANK_LONG: return "long"; + case T_RANK_LONGLONG: return "long long"; default: return "integer"; } @@ -1600,7 +1595,7 @@ void PrintFuncSig (FILE* F, const char* Name, const Type* T) SB_Done (&ParamList); /* Complete with the return type */ - GetFullTypeNameWestEast (&West, &East, GetFuncReturn (T)); + GetFullTypeNameWestEast (&West, &East, GetFuncReturnType (T)); SB_Append (&West, &East); SB_Terminate (&West); diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 4a20422fb..eebd3abd8 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -71,24 +71,24 @@ struct SymEntry; enum { T_END = 0x000000, - /* Basic types */ - T_TYPE_NONE = 0x000000, - T_TYPE_CHAR = 0x000001, - T_TYPE_SHORT = 0x000002, - T_TYPE_INT = 0x000003, - T_TYPE_LONG = 0x000004, - T_TYPE_LONGLONG = 0x000005, - T_TYPE_ENUM = 0x000008, - T_TYPE_BITFIELD = 0x000009, - T_TYPE_FLOAT = 0x00000A, - T_TYPE_DOUBLE = 0x00000B, - T_TYPE_VOID = 0x000010, - T_TYPE_STRUCT = 0x000011, - T_TYPE_UNION = 0x000012, - T_TYPE_ARRAY = 0x000018, - T_TYPE_PTR = 0x000019, - T_TYPE_FUNC = 0x00001A, - T_MASK_TYPE = 0x00001F, + /* Basic type ranks */ + T_RANK_NONE = 0x000000, + T_RANK_CHAR = 0x000001, + T_RANK_SHORT = 0x000002, + T_RANK_INT = 0x000003, + T_RANK_LONG = 0x000004, + T_RANK_LONGLONG = 0x000005, + T_RANK_ENUM = 0x000008, + T_RANK_BITFIELD = 0x000009, + T_RANK_FLOAT = 0x00000A, + T_RANK_DOUBLE = 0x00000B, + T_RANK_VOID = 0x000010, + T_RANK_STRUCT = 0x000011, + T_RANK_UNION = 0x000012, + T_RANK_ARRAY = 0x000018, + T_RANK_PTR = 0x000019, + T_RANK_FUNC = 0x00001A, + T_MASK_RANK = 0x00001F, /* Type classes */ T_CLASS_NONE = 0x000000, @@ -129,28 +129,28 @@ enum { T_MASK_QUAL = 0x7F0000, /* Types */ - T_CHAR = T_TYPE_CHAR | T_CLASS_INT | T_SIGN_NONE | T_SIZE_CHAR, - T_SCHAR = T_TYPE_CHAR | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_CHAR, - T_UCHAR = T_TYPE_CHAR | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_CHAR, - T_SHORT = T_TYPE_SHORT | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_SHORT, - T_USHORT = T_TYPE_SHORT | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_SHORT, - T_INT = T_TYPE_INT | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_INT, - T_UINT = T_TYPE_INT | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_INT, - T_LONG = T_TYPE_LONG | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_LONG, - T_ULONG = T_TYPE_LONG | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_LONG, - T_LONGLONG = T_TYPE_LONGLONG | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_LONGLONG, - T_ULONGLONG = T_TYPE_LONGLONG | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_LONGLONG, - T_ENUM = T_TYPE_ENUM | T_CLASS_INT | T_SIGN_NONE | T_SIZE_NONE, - T_SBITFIELD = T_TYPE_BITFIELD | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_NONE, - T_UBITFIELD = T_TYPE_BITFIELD | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_NONE, - T_FLOAT = T_TYPE_FLOAT | T_CLASS_FLOAT | T_SIGN_NONE | T_SIZE_NONE, - T_DOUBLE = T_TYPE_DOUBLE | T_CLASS_FLOAT | T_SIGN_NONE | T_SIZE_NONE, - T_VOID = T_TYPE_VOID | T_CLASS_NONE | T_SIGN_NONE | T_SIZE_NONE, - T_STRUCT = T_TYPE_STRUCT | T_CLASS_STRUCT | T_SIGN_NONE | T_SIZE_NONE, - T_UNION = T_TYPE_UNION | T_CLASS_STRUCT | T_SIGN_NONE | T_SIZE_NONE, - T_ARRAY = T_TYPE_ARRAY | T_CLASS_PTR | T_SIGN_NONE | T_SIZE_NONE, - T_PTR = T_TYPE_PTR | T_CLASS_PTR | T_SIGN_NONE | T_SIZE_NONE, - T_FUNC = T_TYPE_FUNC | T_CLASS_FUNC | T_SIGN_NONE | T_SIZE_NONE, + T_CHAR = T_RANK_CHAR | T_CLASS_INT | T_SIGN_NONE | T_SIZE_CHAR, + T_SCHAR = T_RANK_CHAR | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_CHAR, + T_UCHAR = T_RANK_CHAR | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_CHAR, + T_SHORT = T_RANK_SHORT | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_SHORT, + T_USHORT = T_RANK_SHORT | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_SHORT, + T_INT = T_RANK_INT | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_INT, + T_UINT = T_RANK_INT | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_INT, + T_LONG = T_RANK_LONG | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_LONG, + T_ULONG = T_RANK_LONG | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_LONG, + T_LONGLONG = T_RANK_LONGLONG | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_LONGLONG, + T_ULONGLONG = T_RANK_LONGLONG | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_LONGLONG, + T_ENUM = T_RANK_ENUM | T_CLASS_INT | T_SIGN_NONE | T_SIZE_NONE, + T_SBITFIELD = T_RANK_BITFIELD | T_CLASS_INT | T_SIGN_SIGNED | T_SIZE_NONE, + T_UBITFIELD = T_RANK_BITFIELD | T_CLASS_INT | T_SIGN_UNSIGNED | T_SIZE_NONE, + T_FLOAT = T_RANK_FLOAT | T_CLASS_FLOAT | T_SIGN_NONE | T_SIZE_NONE, + T_DOUBLE = T_RANK_DOUBLE | T_CLASS_FLOAT | T_SIGN_NONE | T_SIZE_NONE, + T_VOID = T_RANK_VOID | T_CLASS_NONE | T_SIGN_NONE | T_SIZE_NONE, + T_STRUCT = T_RANK_STRUCT | T_CLASS_STRUCT | T_SIGN_NONE | T_SIZE_NONE, + T_UNION = T_RANK_UNION | T_CLASS_STRUCT | T_SIGN_NONE | T_SIZE_NONE, + T_ARRAY = T_RANK_ARRAY | T_CLASS_PTR | T_SIGN_NONE | T_SIZE_NONE, + T_PTR = T_RANK_PTR | T_CLASS_PTR | T_SIGN_NONE | T_SIZE_NONE, + T_FUNC = T_RANK_FUNC | T_CLASS_FUNC | T_SIGN_NONE | T_SIZE_NONE, /* More types for convenience */ T_C_CHAR = T_CHAR | T_QUAL_CONST, @@ -316,7 +316,9 @@ unsigned CheckedPSizeOf (const Type* T); #if defined(HAVE_INLINE) INLINE TypeCode GetQualifier (const Type* T) -/* Get the qualifier from the given type string */ +/* Get the qualifier from the given type. This doesn't have a "raw" version +** since an underlying type can never be qualified. +*/ { return (T->C & T_MASK_QUAL); } @@ -324,66 +326,78 @@ INLINE TypeCode GetQualifier (const Type* T) # define GetQualifier(T) ((T)->C & T_MASK_QUAL) #endif -TypeCode GetUnderlyingTypeCode (const Type* Type); -/* Get the type code of the unqualified underlying type of TCode. -** Return TCode if it is not scalar. +TypeCode GetUnqualTypeCode (const Type* Type); +/* Get the type code of the unqualified underlying type of Type. +** Return GetUnqualRawTypeCode (Type) if Type is not scalar. */ #if defined(HAVE_INLINE) -INLINE TypeCode UnqualifiedType (TypeCode T) -/* Return the unqualified type code */ +INLINE TypeCode GetUnqualRawTypeCode (const Type* T) +/* Return the unqualified raw type code */ { - return (T & ~T_MASK_QUAL); + return (T->C & ~T_MASK_QUAL); } #else -# define UnqualifiedType(T) ((T) & ~T_MASK_QUAL) +# define GetUnqualRawTypeCode(T) ((T)->C & ~T_MASK_QUAL) #endif #if defined(HAVE_INLINE) -INLINE TypeCode GetClass (const Type* T) -/* Get the class of a type string */ +INLINE TypeCode GetTypeClass (const Type* T) +/* Get the class of a type. This doesn't have a "raw" version since an +** underlying type can never be in a different class. +*/ { return (T->C & T_MASK_CLASS); } #else -# define GetClass(T) ((T)->C & T_MASK_CLASS) +# define GetTypeClass(T) ((T)->C & T_MASK_CLASS) +#endif + +#if defined(HAVE_INLINE) +INLINE TypeCode GetTypeRank (const Type* T) +/* Get the type rank of a type */ +{ + return (GetUnqualTypeCode (T) & T_MASK_RANK); +} +#else +# define GetTypeRank(T) (GetUnqualTypeCode (T) & T_MASK_RANK) #endif #if defined(HAVE_INLINE) INLINE TypeCode GetSignedness (const Type* T) /* Get the signedness of a type */ { - return (GetUnderlyingTypeCode (T) & T_MASK_SIGN); + return (GetUnqualTypeCode (T) & T_MASK_SIGN); } #else -# define GetSignedness(T) (GetUnderlyingTypeCode (T) & T_MASK_SIGN) +# define GetSignedness(T) (GetUnqualTypeCode (T) & T_MASK_SIGN) #endif #if defined(HAVE_INLINE) INLINE TypeCode GetSizeModifier (const Type* T) /* Get the size modifier of a type */ { - return (GetUnderlyingTypeCode (T) & T_MASK_SIZE); + return (GetUnqualTypeCode (T) & T_MASK_SIZE); } #else -# define GetSizeModifier(T) (GetUnderlyingTypeCode (T) & T_MASK_SIZE) +# define GetSizeModifier(T) (GetUnqualTypeCode (T) & T_MASK_SIZE) #endif #if defined(HAVE_INLINE) -INLINE TypeCode GetRawType (const Type* T) -/* Get the raw type */ +INLINE TypeCode GetRawTypeRank (const Type* T) +/* Get the raw type rank of a type */ { - return (T->C & T_MASK_TYPE); + return (T->C & T_MASK_RANK); } #else -# define GetRawType(T) ((T)->C & T_MASK_TYPE) +# define GetRawTypeRank(T) ((T)->C & T_MASK_RANK) #endif #if defined(HAVE_INLINE) INLINE TypeCode GetRawSignedness (const Type* T) /* Get the raw signedness of a type */ { - return ((T)->C & T_MASK_SIGN); + return (T->C & T_MASK_SIGN); } #else # define GetRawSignedness(T) ((T)->C & T_MASK_SIGN) @@ -391,7 +405,7 @@ INLINE TypeCode GetRawSignedness (const Type* T) #if defined(HAVE_INLINE) INLINE TypeCode GetRawSizeModifier (const Type* T) -/* Get the size modifier of a raw type */ +/* Get the raw size modifier of a type */ { return (T->C & T_MASK_SIZE); } @@ -418,7 +432,7 @@ Type* NewPointerTo (const Type* T); ** on the heap and may be freed after use. */ -Type* NewBitFieldType (const Type* T, unsigned BitOffs, unsigned BitWidth); +Type* NewBitFieldOf (const Type* T, unsigned BitOffs, unsigned BitWidth); /* Return a type string that is "T : BitWidth" aligned on BitOffs. The type ** string is allocated on the heap and may be freed after use. */ @@ -433,11 +447,6 @@ const Type* Indirect (const Type* T); ** given type points to. */ -Type* IndirectModifiable (Type* T); -/* Do one indirection for the given type, that is, return the type where the -** given type points to. -*/ - Type* ArrayToPtr (const Type* T); /* Convert an array to a pointer to it's first element */ @@ -461,17 +470,17 @@ const Type* IntPromotion (const Type* T); const Type* ArithmeticConvert (const Type* lhst, const Type* rhst); /* Perform the usual arithmetic conversions for binary operators. */ -const Type* SignedType (const Type* T); +const Type* GetSignedType (const Type* T); /* Get signed counterpart of the integral type */ -const Type* UnsignedType (const Type* T); +const Type* GetUnsignedType (const Type* T); /* Get unsigned counterpart of the integral type */ const Type* GetUnderlyingType (const Type* Type); /* Get the underlying type of an enum or other integer class type */ const Type* GetStructReplacementType (const Type* SType); -/* Get a replacement type for passing a struct/union in the primary register */ +/* Get a replacement type for passing a struct/union by value in the primary */ const Type* GetBitFieldChunkType (const Type* Type); /* Get the type needed to operate on the byte chunk containing the bit-field */ @@ -485,155 +494,127 @@ const Type* GetBitFieldChunkType (const Type* Type); #if defined(HAVE_INLINE) -INLINE int IsTypeChar (const Type* T) -/* Return true if this is a char type */ +INLINE int IsRankChar (const Type* T) +/* Return true if this is a character type */ { - return (GetRawType (GetUnderlyingType (T)) == T_TYPE_CHAR); + return (GetTypeRank (T) == T_RANK_CHAR); } #else -# define IsTypeChar(T) (GetRawType (GetUnderlyingType (T)) == T_TYPE_CHAR) +# define IsRankChar(T) (GetTypeRank (T) == T_RANK_CHAR) #endif #if defined(HAVE_INLINE) -INLINE int IsTypeShort (const Type* T) +INLINE int IsRankShort (const Type* T) /* Return true if this is a short type (signed or unsigned) */ { - return (GetRawType (GetUnderlyingType (T)) == T_TYPE_SHORT); + return (GetTypeRank (T) == T_RANK_SHORT); } #else -# define IsTypeShort(T) (GetRawType (GetUnderlyingType (T)) == T_TYPE_SHORT) +# define IsRankShort(T) (GetTypeRank (T) == T_RANK_SHORT) #endif #if defined(HAVE_INLINE) -INLINE int IsTypeInt (const Type* T) +INLINE int IsRankInt (const Type* T) /* Return true if this is an int type (signed or unsigned) */ { - return (GetRawType (GetUnderlyingType (T)) == T_TYPE_INT); + return (GetTypeRank (T) == T_RANK_INT); } #else -# define IsTypeInt(T) (GetRawType (GetUnderlyingType (T)) == T_TYPE_INT) +# define IsRankInt(T) (GetTypeRank (T) == T_RANK_INT) #endif #if defined(HAVE_INLINE) -INLINE int IsTypeLong (const Type* T) +INLINE int IsRankLong (const Type* T) /* Return true if this is a long int type (signed or unsigned) */ { - return (GetRawType (GetUnderlyingType (T)) == T_TYPE_LONG); + return (GetTypeRank (T) == T_RANK_LONG); } #else -# define IsTypeLong(T) (GetRawType (GetUnderlyingType (T)) == T_TYPE_LONG) +# define IsRankLong(T) (GetTypeRank (T) == T_RANK_LONG) #endif #if defined(HAVE_INLINE) -INLINE int IsISOChar (const Type* T) -/* Return true if this is a narrow character type (without signed/unsigned) */ -{ - return (UnqualifiedType (T->C) == T_CHAR); -} -#else -# define IsISOChar(T) (UnqualifiedType ((T)->C) == T_CHAR) -#endif - -#if defined(HAVE_INLINE) -INLINE int IsClassChar (const Type* T) -/* Return true if this is a narrow character type (including signed/unsigned). -** For now this is the same as IsRawTypeChar(T). +INLINE int IsDeclTypeChar (const Type* T) +/* Return true if this is declared as a char type (without signed/unsigned). +** This function is to exclude enums whose underlying type is char. */ { - return (GetRawType (T) == T_TYPE_CHAR); + return (GetUnqualRawTypeCode (T) == T_CHAR); } #else -# define IsClassChar(T) (GetRawType (T) == T_TYPE_CHAR) +# define IsDeclTypeChar(T) (GetUnqualRawTypeCode (T) == T_CHAR) #endif #if defined(HAVE_INLINE) -INLINE int IsRawTypeChar (const Type* T) -/* Return true if this is a char raw type (including signed/unsigned) */ +INLINE int IsDeclRankChar (const Type* T) +/* Return true if this is declared as a character type (including signed/unsigned). +** This function is to exclude enums whose underlying types are character types. +*/ { - return (GetRawType (T) == T_TYPE_CHAR); + return (GetRawTypeRank (T) == T_RANK_CHAR); } #else -# define IsRawTypeChar(T) (GetRawType (T) == T_TYPE_CHAR) -#endif - -#if defined(HAVE_INLINE) -INLINE int IsRawTypeInt (const Type* T) -/* Return true if this is an int raw type (signed or unsigned) */ -{ - return (GetRawType (T) == T_TYPE_INT); -} -#else -# define IsRawTypeInt(T) (GetRawType (T) == T_TYPE_INT) -#endif - -#if defined(HAVE_INLINE) -INLINE int IsRawTypeLong (const Type* T) -/* Return true if this is a long raw type (signed or unsigned) */ -{ - return (GetRawType (T) == T_TYPE_LONG); -} -#else -# define IsRawTypeLong(T) (GetRawType (T) == T_TYPE_LONG) +# define IsDeclRankChar(T) (GetRawTypeRank (T) == T_RANK_CHAR) #endif #if defined(HAVE_INLINE) INLINE int IsTypeFloat (const Type* T) /* Return true if this is a float type */ { - return (GetRawType (T) == T_TYPE_FLOAT); + return (GetRawTypeRank (T) == T_RANK_FLOAT); } #else -# define IsTypeFloat(T) (GetRawType (T) == T_TYPE_FLOAT) +# define IsTypeFloat(T) (GetRawTypeRank (T) == T_RANK_FLOAT) #endif #if defined(HAVE_INLINE) INLINE int IsTypeDouble (const Type* T) /* Return true if this is a double type */ { - return (GetRawType (T) == T_TYPE_DOUBLE); + return (GetRawTypeRank (T) == T_RANK_DOUBLE); } #else -# define IsTypeDouble(T) (GetRawType (T) == T_TYPE_DOUBLE) +# define IsTypeDouble(T) (GetRawTypeRank (T) == T_RANK_DOUBLE) #endif #if defined(HAVE_INLINE) INLINE int IsTypePtr (const Type* T) /* Return true if this is a pointer type */ { - return (GetRawType (T) == T_TYPE_PTR); + return (GetRawTypeRank (T) == T_RANK_PTR); } #else -# define IsTypePtr(T) (GetRawType (T) == T_TYPE_PTR) +# define IsTypePtr(T) (GetRawTypeRank (T) == T_RANK_PTR) #endif #if defined(HAVE_INLINE) INLINE int IsTypeEnum (const Type* T) /* Return true if this is an enum type */ { - return (GetRawType (T) == T_TYPE_ENUM); + return (GetRawTypeRank (T) == T_RANK_ENUM); } #else -# define IsTypeEnum(T) (GetRawType (T) == T_TYPE_ENUM) +# define IsTypeEnum(T) (GetRawTypeRank (T) == T_RANK_ENUM) #endif #if defined(HAVE_INLINE) INLINE int IsTypeSignedBitField (const Type* T) /* Return true if this is a signed bit-field */ { - return (UnqualifiedType (T->C) == T_SBITFIELD); + return (GetUnqualRawTypeCode (T) == T_SBITFIELD); } #else -# define IsTypeSignedBitField(T) (UnqualifiedType ((T)->C) == T_SBITFIELD) +# define IsTypeSignedBitField(T) (GetUnqualRawTypeCode (T) == T_SBITFIELD) #endif #if defined(HAVE_INLINE) INLINE int IsTypeUnsignedBitField (const Type* T) /* Return true if this is an unsigned bit-field */ { - return (UnqualifiedType (T->C) == T_UBITFIELD); + return (GetUnqualRawTypeCode (T) == T_UBITFIELD); } #else -# define IsTypeUnsignedBitField(T) (UnqualifiedType ((T)->C) == T_UBITFIELD) +# define IsTypeUnsignedBitField(T) (GetUnqualRawTypeCode (T) == T_UBITFIELD) #endif #if defined(HAVE_INLINE) @@ -653,55 +634,55 @@ int IsTypeFragBitField (const Type* T); INLINE int IsTypeStruct (const Type* T) /* Return true if this is a struct type */ { - return (GetRawType (T) == T_TYPE_STRUCT); + return (GetRawTypeRank (T) == T_RANK_STRUCT); } #else -# define IsTypeStruct(T) (GetRawType (T) == T_TYPE_STRUCT) +# define IsTypeStruct(T) (GetRawTypeRank (T) == T_RANK_STRUCT) #endif #if defined(HAVE_INLINE) INLINE int IsTypeUnion (const Type* T) /* Return true if this is a union type */ { - return (GetRawType (T) == T_TYPE_UNION); + return (GetRawTypeRank (T) == T_RANK_UNION); } #else -# define IsTypeUnion(T) (GetRawType (T) == T_TYPE_UNION) +# define IsTypeUnion(T) (GetRawTypeRank (T) == T_RANK_UNION) #endif #if defined(HAVE_INLINE) INLINE int IsTypeArray (const Type* T) /* Return true if this is an array type */ { - return (GetRawType (T) == T_TYPE_ARRAY); + return (GetRawTypeRank (T) == T_RANK_ARRAY); } #else -# define IsTypeArray(T) (GetRawType (T) == T_TYPE_ARRAY) +# define IsTypeArray(T) (GetRawTypeRank (T) == T_RANK_ARRAY) #endif #if defined(HAVE_INLINE) INLINE int IsTypeVoid (const Type* T) /* Return true if this is a void type */ { - return (GetRawType (T) == T_TYPE_VOID); + return (GetRawTypeRank (T) == T_RANK_VOID); } #else -# define IsTypeVoid(T) (GetRawType (T) == T_TYPE_VOID) +# define IsTypeVoid(T) (GetRawTypeRank (T) == T_RANK_VOID) #endif #if defined(HAVE_INLINE) INLINE int IsTypeFunc (const Type* T) -/* Return true if this is a function class */ +/* Return true if this is a function type */ { - return (GetRawType (T) == T_TYPE_FUNC); + return (GetRawTypeRank (T) == T_RANK_FUNC); } #else -# define IsTypeFunc(T) (GetRawType (T) == T_TYPE_FUNC) +# define IsTypeFunc(T) (GetRawTypeRank (T) == T_RANK_FUNC) #endif #if defined(HAVE_INLINE) INLINE int IsTypeFuncPtr (const Type* T) -/* Return true if this is a function pointer */ +/* Return true if this is a function pointer type */ { return (IsTypePtr (T) && IsTypeFunc (T+1)); } @@ -713,71 +694,71 @@ INLINE int IsTypeFuncPtr (const Type* T) INLINE int IsClassInt (const Type* T) /* Return true if this is an integer type */ { - return (GetClass (T) == T_CLASS_INT); + return (GetTypeClass (T) == T_CLASS_INT); } #else -# define IsClassInt(T) (GetClass (T) == T_CLASS_INT) +# define IsClassInt(T) (GetTypeClass (T) == T_CLASS_INT) #endif #if defined(HAVE_INLINE) INLINE int IsClassFloat (const Type* T) -/* Return true if this is a float type */ +/* Return true if this is a floating type */ { - return (GetClass (T) == T_CLASS_FLOAT); + return (GetTypeClass (T) == T_CLASS_FLOAT); } #else -# define IsClassFloat(T) (GetClass (T) == T_CLASS_FLOAT) +# define IsClassFloat(T) (GetTypeClass (T) == T_CLASS_FLOAT) #endif #if defined(HAVE_INLINE) INLINE int IsClassPtr (const Type* T) -/* Return true if this is a pointer type */ +/* Return true if this is a pointer or array type */ { - return (GetClass (T) == T_CLASS_PTR); + return (GetTypeClass (T) == T_CLASS_PTR); } #else -# define IsClassPtr(T) (GetClass (T) == T_CLASS_PTR) +# define IsClassPtr(T) (GetTypeClass (T) == T_CLASS_PTR) #endif #if defined(HAVE_INLINE) INLINE int IsClassStruct (const Type* T) /* Return true if this is a struct or union type */ { - return (GetClass (T) == T_CLASS_STRUCT); + return (GetTypeClass (T) == T_CLASS_STRUCT); } #else -# define IsClassStruct(T) (GetClass (T) == T_CLASS_STRUCT) +# define IsClassStruct(T) (GetTypeClass (T) == T_CLASS_STRUCT) #endif #if defined(HAVE_INLINE) INLINE int IsClassFunc (const Type* T) /* Return true if this is a function type */ { - return (GetClass (T) == T_CLASS_FUNC); + return (GetTypeClass (T) == T_CLASS_FUNC); } #else -# define IsClassFunc(T) (GetClass (T) == T_CLASS_FUNC) +# define IsClassFunc(T) (GetTypeClass (T) == T_CLASS_FUNC) #endif -int IsClassObject (const Type* T); +int IsObjectType (const Type* T); /* Return true if this is a fully described object type */ -int IsClassIncomplete (const Type* T); +int IsIncompleteType (const Type* T); /* Return true if this is an object type lacking size info */ -int IsClassArithmetic (const Type* T); -/* Return true if this is an integer or real floating type */ +int IsArithmeticType (const Type* T); +/* Return true if this is an integer or floating type */ -int IsClassBasic (const Type* T); +int IsBasicType (const Type* T); /* Return true if this is a char, integer or floating type */ -int IsClassScalar (const Type* T); +int IsScalarType (const Type* T); /* Return true if this is an arithmetic or pointer type */ -int IsClassDerived (const Type* T); +int IsDerivedType (const Type* T); /* Return true if this is an array, struct, union, function or pointer type */ -int IsClassAggregate (const Type* T); +int IsAggregateType (const Type* T); /* Return true if this is an array or struct type */ int IsRelationType (const Type* T); @@ -798,7 +779,7 @@ int IsEmptiableObjectType (const Type* T); int HasUnknownSize (const Type* T); /* Return true if this is an incomplete ESU type or an array of unknown size */ -int TypeHasAttr (const Type* T); +int TypeHasAttrData (const Type* T); /* Return true if the given type has attribute data */ #if defined(HAVE_INLINE) @@ -978,10 +959,10 @@ FuncDesc* GetFuncDesc (const Type* T) attribute ((const)); void SetFuncDesc (Type* T, FuncDesc* F); /* Set the FuncDesc pointer in a function or pointer-to-function type */ -const Type* GetFuncReturn (const Type* T) attribute ((const)); +const Type* GetFuncReturnType (const Type* T) attribute ((const)); /* Return a pointer to the return type of a function or pointer-to-function type */ -Type* GetFuncReturnModifiable (Type* T) attribute ((const)); +Type* GetFuncReturnTypeModifiable (Type* T) attribute ((const)); /* Return a non-const pointer to the return type of a function or pointer-to-function type */ const FuncDesc* GetFuncDefinitionDesc (const Type* T) attribute ((const)); @@ -1006,7 +987,10 @@ void SetElementCount (Type* T, long Count); */ const Type* GetElementType (const Type* T); -/* Return the element type of the given array type. */ +/* Return the element type of the given array type */ + +Type* GetElementTypeModifiable (Type* T); +/* Return the element type of the given array type */ const Type* GetBaseElementType (const Type* T); /* Return the base element type of a given type. If T is not an array, this diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 459ffa103..59eb555c4 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -406,7 +406,7 @@ static void FixQualifiers (Type* DataType) if (IsTypeArray (T)) { /* Extract any type qualifiers */ Q |= GetQualifier (T); - T->C = UnqualifiedType (T->C); + T->C = GetUnqualRawTypeCode (T); } else { /* Add extracted type qualifiers here */ T->C |= Q; @@ -646,7 +646,7 @@ static SymEntry* ParseEnumSpec (const char* Name, unsigned* DSFlags) /* Enumerate by adding one to the previous value */ EnumVal = (long)(((unsigned long)EnumVal + 1UL) & 0xFFFFFFFFUL); - if (UnqualifiedType (MemberType->C) == T_ULONG && EnumVal == 0) { + if (GetUnqualRawTypeCode (MemberType) == T_ULONG && EnumVal == 0) { /* Error since the new value cannot be represented in the ** largest unsigned integer type supported by cc65 for enum. */ @@ -688,7 +688,7 @@ static SymEntry* ParseEnumSpec (const char* Name, unsigned* DSFlags) if (PrevErrorCount == ErrorCount && IsIncremented && (!IsSigned || EnumVal >= 0) && - NewType->C != UnqualifiedType (MemberType->C)) { + NewType->C != GetUnqualRawTypeCode (MemberType)) { /* The possible overflow here can only be when EnumVal > 0 */ Warning ("Enumerator '%s' (value = %lu) implies type '%s'", Ident, @@ -959,7 +959,7 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) } /* Check for incomplete types including 'void' */ - if (IsClassIncomplete (Decl.Type)) { + if (IsIncompleteType (Decl.Type)) { Error ("Field '%s' has incomplete type '%s'", Decl.Ident, GetFullTypeName (Decl.Type)); @@ -1159,7 +1159,7 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) } /* Check for incomplete types including 'void' */ - if (IsClassIncomplete (Decl.Type)) { + if (IsIncompleteType (Decl.Type)) { Error ("Field '%s' has incomplete type '%s'", Decl.Ident, GetFullTypeName (Decl.Type)); @@ -2036,7 +2036,7 @@ void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) if (IsTypeFunc (D->Type) || IsTypeFuncPtr (D->Type)) { /* A function. Check the return type */ - Type* RetType = GetFuncReturnModifiable (D->Type); + Type* RetType = GetFuncReturnTypeModifiable (D->Type); /* Functions may not return functions or arrays */ if (IsTypeFunc (RetType)) { @@ -2048,13 +2048,13 @@ void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) /* The return type must not be qualified */ if (GetQualifier (RetType) != T_QUAL_NONE && RetType[1].C == T_END) { - if (GetRawType (RetType) == T_TYPE_VOID) { + if (GetRawTypeRank (RetType) == T_RANK_VOID) { /* A qualified void type is always an error */ Error ("function definition has qualified void return type"); } else { /* For others, qualifiers are ignored */ Warning ("type qualifiers ignored on function return type"); - RetType[0].C = UnqualifiedType (RetType[0].C); + RetType[0].C = GetUnqualRawTypeCode (RetType); } } diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 78a4c516a..691010b0a 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -128,7 +128,7 @@ unsigned TypeOf (const Type* T) { unsigned NewType; - switch (GetUnderlyingTypeCode (T)) { + switch (GetUnqualTypeCode (T)) { case T_SCHAR: return CF_CHAR; @@ -187,7 +187,7 @@ unsigned TypeOf (const Type* T) unsigned FuncTypeOf (const Type* T) /* Get the code generator flag for calling the function */ { - if (GetUnderlyingTypeCode (T) == T_FUNC) { + if (GetUnqualTypeCode (T) == T_FUNC) { return (T->A.F->Flags & FD_VARIADIC) ? 0 : CF_FIXARGC; } else { Error ("Illegal function type %04lX", T->C); @@ -290,7 +290,7 @@ static unsigned typeadjust (ExprDesc* lhs, const ExprDesc* rhs, int NoPush) void LimitExprValue (ExprDesc* Expr, int WarnOverflow) /* Limit the constant value of the expression to the range of its type */ { - switch (GetUnderlyingTypeCode (Expr->Type)) { + switch (GetUnqualTypeCode (Expr->Type)) { case T_INT: case T_SHORT: if (WarnOverflow && ((Expr->IVal < -0x8000) || (Expr->IVal > 0x7FFF))) { @@ -1146,7 +1146,7 @@ static void FunctionCall (ExprDesc* Expr) /* The function result is an rvalue in the primary register */ ED_FinalizeRValLoad (Expr); - ReturnType = GetFuncReturn (Expr->Type); + ReturnType = GetFuncReturnType (Expr->Type); /* Handle struct/union specially */ if (IsClassStruct (ReturnType)) { @@ -2568,7 +2568,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ } /* Determine the type of the operation. */ - if (IsTypeChar (Expr->Type) && rconst && (!LeftSigned || RightSigned)) { + if (IsRankChar (Expr->Type) && rconst && (!LeftSigned || RightSigned)) { /* Left side is unsigned char, right side is constant. ** Determine the minimum and maximum values @@ -2651,7 +2651,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ flags |= CF_UNSIGNED; } - } else if (IsTypeChar (Expr->Type) && IsTypeChar (Expr2.Type) && + } else if (IsRankChar (Expr->Type) && IsRankChar (Expr2.Type) && GetSignedness (Expr->Type) == GetSignedness (Expr2.Type)) { /* Both are chars with the same signedness. We can encode the diff --git a/src/cc65/function.c b/src/cc65/function.c index 737b068a3..39f04843f 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -81,7 +81,7 @@ static Function* NewFunction (struct SymEntry* Sym, FuncDesc* D) /* Initialize the fields */ F->FuncEntry = Sym; - F->ReturnType = GetFuncReturn (Sym->Type); + F->ReturnType = GetFuncReturnType (Sym->Type); F->Desc = D; F->Reserved = 0; F->RetLab = 0; @@ -540,7 +540,7 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* Determine if this is a main function in a C99 environment that ** returns an int. */ - if (IsRawTypeInt (F_GetReturnType (CurrentFunc)) && + if (GetUnqualRawTypeCode (ReturnType) == T_INT && IS_Get (&Standard) == STD_C99) { C99MainFunc = 1; } diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c index 2b151e59e..619fe4897 100644 --- a/src/cc65/initdata.c +++ b/src/cc65/initdata.c @@ -330,12 +330,12 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) int HasCurly = 0; /* Get the array data */ - Type* ElementType = IndirectModifiable (T); + Type* ElementType = GetElementTypeModifiable (T); unsigned ElementSize = SizeOf (ElementType); long ElementCount = GetElementCount (T); /* Special handling for a character array initialized by a literal */ - if (IsClassChar (ElementType) && + if (IsDeclRankChar (ElementType) && (CurTok.Tok == TOK_SCONST || CurTok.Tok == TOK_WCSCONST || (CurTok.Tok == TOK_LCURLY && (NextTok.Tok == TOK_SCONST || NextTok.Tok == TOK_WCSCONST)))) { @@ -669,7 +669,7 @@ static unsigned ParseVoidInit (Type* T) Size = 0; do { ExprDesc Expr = NoCodeConstExpr (hie1); - switch (GetUnderlyingTypeCode (&Expr.Type[0])) { + switch (GetUnqualTypeCode (&Expr.Type[0])) { case T_SCHAR: case T_UCHAR: @@ -737,7 +737,7 @@ static unsigned ParseVoidInit (Type* T) static unsigned ParseInitInternal (Type* T, int *Braces, int AllowFlexibleMembers) /* Parse initialization of variables. Return the number of data bytes. */ { - switch (GetUnderlyingTypeCode (T)) { + switch (GetUnqualTypeCode (T)) { case T_SCHAR: case T_UCHAR: diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index fc19ce7f0..d22c73dcf 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -531,7 +531,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* The function result is an rvalue in the primary register */ ED_FinalizeRValLoad (Expr); - Expr->Type = GetFuncReturn (Expr->Type); + Expr->Type = GetFuncReturnType (Expr->Type); /* Bail out, no need for further processing */ goto ExitPoint; @@ -540,7 +540,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* The function result is an rvalue in the primary register */ ED_FinalizeRValLoad (Expr); - Expr->Type = GetFuncReturn (Expr->Type); + Expr->Type = GetFuncReturnType (Expr->Type); ExitPoint: /* We expect the closing brace */ @@ -757,7 +757,7 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* The function result is an rvalue in the primary register */ ED_FinalizeRValLoad (Expr); - Expr->Type = GetFuncReturn (Expr->Type); + Expr->Type = GetFuncReturnType (Expr->Type); /* Bail out, no need for further processing */ goto ExitPoint; @@ -766,7 +766,7 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* The function result is an rvalue in the primary register */ ED_FinalizeRValLoad (Expr); - Expr->Type = GetFuncReturn (Expr->Type); + Expr->Type = GetFuncReturnType (Expr->Type); ExitPoint: /* We expect the closing brace */ @@ -968,7 +968,7 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* The function result is an rvalue in the primary register */ ED_FinalizeRValLoad (Expr); - Expr->Type = GetFuncReturn (Expr->Type); + Expr->Type = GetFuncReturnType (Expr->Type); /* We expect the closing brace */ ConsumeRParen (); @@ -1165,7 +1165,7 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* The function result is an rvalue in the primary register */ ED_FinalizeRValLoad (Expr); - Expr->Type = GetFuncReturn (Expr->Type); + Expr->Type = GetFuncReturnType (Expr->Type); ExitPoint: /* We expect the closing brace */ diff --git a/src/cc65/swstmt.c b/src/cc65/swstmt.c index 00555ffc3..0466ddf4a 100644 --- a/src/cc65/swstmt.c +++ b/src/cc65/swstmt.c @@ -133,7 +133,7 @@ void SwitchStatement (void) /* Setup the control structure, save the old and activate the new one */ SwitchData.Nodes = NewCollection (); - SwitchData.ExprType = GetUnderlyingTypeCode (&SwitchExpr.Type[0]); + SwitchData.ExprType = GetUnqualTypeCode (&SwitchExpr.Type[0]); SwitchData.Depth = SizeOf (SwitchExpr.Type); SwitchData.DefaultLabel = 0; OldSwitch = Switch; diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 961f36046..72a2ac007 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -1007,7 +1007,7 @@ SymEntry* AddBitField (const char* Name, const Type* T, unsigned Offs, Entry = NewSymEntry (Name, SC_BITFIELD); /* Set the symbol attributes. Bit-fields are always integral types. */ - Entry->Type = NewBitFieldType (T, BitOffs, BitWidth); + Entry->Type = NewBitFieldOf (T, BitOffs, BitWidth); Entry->V.Offs = Offs; if (!SignednessSpecified) { @@ -1019,7 +1019,7 @@ SymEntry* AddBitField (const char* Name, const Type* T, unsigned Offs, ** `char -> unsigned char` adjustment that is performed with other integral types. */ CHECK ((Entry->Type->C & T_MASK_SIGN) == T_SIGN_SIGNED || - IsTypeChar (Entry->Type)); + IsRankChar (Entry->Type)); Entry->Type[0].C &= ~T_MASK_SIGN; Entry->Type[0].C |= T_SIGN_UNSIGNED; Entry->Type[1].C &= ~T_MASK_SIGN; diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index 1a108159f..c3239652f 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -244,7 +244,7 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) SymEntry* Sym2; FuncDesc* F1; FuncDesc* F2; - TypeCode LeftType, RightType; + TypeCode LeftRank, RightRank; long LeftCount, RightCount; @@ -262,9 +262,23 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) return; } - /* Get the left and right types */ - LeftType = (GetUnderlyingTypeCode (lhs) & T_MASK_TYPE); - RightType = (GetUnderlyingTypeCode (rhs) & T_MASK_TYPE); + /* Get the ranks of the left and right hands */ + LeftRank = (GetUnqualTypeCode (lhs) & T_MASK_RANK); + RightRank = (GetUnqualTypeCode (rhs) & T_MASK_RANK); + + /* If one side is a pointer and the other side is an array, both are + ** compatible. + */ + if (Result->Indirections == 0) { + if (LeftRank == T_RANK_PTR && RightRank == T_RANK_ARRAY) { + RightRank = T_RANK_PTR; + SetResult (Result, TC_PTR_DECAY); + } + if (LeftRank == T_RANK_ARRAY && RightRank == T_RANK_PTR) { + LeftRank = T_RANK_PTR; + SetResult (Result, TC_STRICT_COMPATIBLE); + } + } /* Bit-fields are considered compatible if they have the same ** signedness, bit-offset and bit-width. @@ -275,29 +289,14 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) lhs->A.B.Offs != rhs->A.B.Offs || lhs->A.B.Width != rhs->A.B.Width) { SetResult (Result, TC_INCOMPATIBLE); - return; } - if (LeftType != RightType) { + if (LeftRank != RightRank) { SetResult (Result, TC_STRICT_COMPATIBLE); } } - /* If one side is a pointer and the other side is an array, both are - ** compatible. - */ - if (Result->Indirections == 0) { - if (LeftType == T_TYPE_PTR && RightType == T_TYPE_ARRAY) { - RightType = T_TYPE_PTR; - SetResult (Result, TC_PTR_DECAY); - } - if (LeftType == T_TYPE_ARRAY && RightType == T_TYPE_PTR) { - LeftType = T_TYPE_PTR; - SetResult (Result, TC_STRICT_COMPATIBLE); - } - } - - /* If the underlying types are not identical, the types are incompatible */ - if (LeftType != RightType) { + /* If the ranks are different, the types are incompatible */ + if (LeftRank != RightRank) { SetResult (Result, TC_INCOMPATIBLE); return; } @@ -337,8 +336,8 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) } /* 'char' is neither 'signed char' nor 'unsigned char' */ - if ((IsISOChar (lhs) && !IsISOChar (rhs)) || - (!IsISOChar (lhs) && IsISOChar (rhs))) { + if ((IsDeclTypeChar (lhs) && !IsDeclTypeChar (rhs)) || + (!IsDeclTypeChar (lhs) && IsDeclTypeChar (rhs))) { SetResult (Result, TC_SIGN_DIFF); } @@ -350,14 +349,14 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) } /* Check for special type elements */ - switch (LeftType) { - case T_TYPE_PTR: + switch (LeftRank) { + case T_RANK_PTR: ++Result->Indirections; if (Result->Indirections == 1) { - if ((GetUnderlyingTypeCode (lhs + 1) & T_MASK_TYPE) == T_TYPE_VOID) { + if ((GetUnqualTypeCode (lhs + 1) & T_MASK_RANK) == T_RANK_VOID) { Result->F |= TCF_VOID_PTR_ON_LEFT; } - if ((GetUnderlyingTypeCode (rhs + 1) & T_MASK_TYPE) == T_TYPE_VOID) { + if ((GetUnqualTypeCode (rhs + 1) & T_MASK_RANK) == T_RANK_VOID) { Result->F |= TCF_VOID_PTR_ON_RIGHT; } } else { @@ -365,7 +364,7 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) } break; - case T_TYPE_FUNC: + case T_RANK_FUNC: /* Compare the function descriptors */ F1 = GetFuncDesc (lhs); F2 = GetFuncDesc (rhs); @@ -399,7 +398,7 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) /* Keep on and compare the return type */ break; - case T_TYPE_ARRAY: + case T_RANK_ARRAY: /* Check member count */ LeftCount = GetElementCount (lhs); RightCount = GetElementCount (rhs); @@ -420,8 +419,8 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) } break; - case T_TYPE_STRUCT: - case T_TYPE_UNION: + case T_RANK_STRUCT: + case T_RANK_UNION: /* Compare the tag types */ Sym1 = GetESUTagSym (lhs); Sym2 = GetESUTagSym (rhs); diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index c72b2c5eb..18a9f4dfa 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -430,7 +430,7 @@ void TypeComposition (Type* lhs, const Type* rhs) } /* Check for sanity */ - CHECK (GetUnderlyingTypeCode (lhs) == GetUnderlyingTypeCode (rhs)); + CHECK (GetUnqualTypeCode (lhs) == GetUnqualTypeCode (rhs)); /* Check for special type elements */ if (IsTypeFunc (lhs)) { From 5fd91699049d2bafbbdbbe1b1cb5a46451a486cc Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 12 Oct 2022 13:10:17 +0800 Subject: [PATCH 1841/2710] Renamed type facility functions for deciding code generation type flags. --- src/cc65/assignment.c | 28 ++++++++-------- src/cc65/expr.c | 74 +++++++++++++++++++++---------------------- src/cc65/expr.h | 8 ++--- src/cc65/function.c | 6 ++-- src/cc65/initdata.c | 4 +-- src/cc65/loadexpr.c | 8 ++--- src/cc65/locals.c | 6 ++-- src/cc65/shiftexpr.c | 4 +-- src/cc65/stdfunc.c | 2 +- src/cc65/stmt.c | 2 +- src/cc65/typeconv.c | 4 +-- 11 files changed, 73 insertions(+), 73 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 54ab28d4e..ba12cc7e3 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -90,7 +90,7 @@ static void CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) /* Check if the value of the rhs is not in the primary yet */ if (!ED_IsLocPrimary (RExpr)) { /* Just load the value into the primary as the replacement type. */ - LoadExpr (TypeOf (stype) | CF_FORCECHAR, RExpr); + LoadExpr (CG_TypeOf (stype) | CF_FORCECHAR, RExpr); } /* Store it into the location referred in the primary */ @@ -145,8 +145,8 @@ void DoIncDecBitField (ExprDesc* Expr, long Val, unsigned KeepResult) ChunkType = GetBitFieldChunkType (Expr->Type); /* Determine code generator flags */ - Flags = TypeOf (Expr->Type) | CF_FORCECHAR; - ChunkFlags = TypeOf (ChunkType); + Flags = CG_TypeOf (Expr->Type) | CF_FORCECHAR; + ChunkFlags = CG_TypeOf (ChunkType); if ((ChunkFlags & CF_TYPEMASK) == CF_CHAR) { ChunkFlags |= CF_FORCECHAR; } @@ -232,8 +232,8 @@ static void OpAssignBitField (const GenDesc* Gen, ExprDesc* Expr, const char* Op ChunkType = GetBitFieldChunkType (Expr->Type); /* Determine code generator flags */ - Flags = TypeOf (Expr->Type) | CF_FORCECHAR; - ChunkFlags = TypeOf (ChunkType); + Flags = CG_TypeOf (Expr->Type) | CF_FORCECHAR; + ChunkFlags = CG_TypeOf (ChunkType); if ((ChunkFlags & CF_TYPEMASK) == CF_CHAR) { ChunkFlags |= CF_FORCECHAR; } @@ -358,7 +358,7 @@ static void OpAssignBitField (const GenDesc* Gen, ExprDesc* Expr, const char* Op unsigned AdjustedFlags = Flags; if (Expr->Type->A.B.Width < INT_BITS || IsSignSigned (Expr->Type)) { AdjustedFlags = (Flags & ~CF_UNSIGNED) | CF_CONST; - AdjustedFlags = g_typeadjust (AdjustedFlags, TypeOf (Expr2.Type) | CF_CONST); + AdjustedFlags = g_typeadjust (AdjustedFlags, CG_TypeOf (Expr2.Type) | CF_CONST); } Gen->Func (g_typeadjust (Flags, AdjustedFlags) | CF_CONST, Expr2.IVal); } else { @@ -381,11 +381,11 @@ static void OpAssignBitField (const GenDesc* Gen, ExprDesc* Expr, const char* Op unsigned AdjustedFlags = Flags; if (Expr->Type->A.B.Width < INT_BITS || IsSignSigned (Expr->Type)) { AdjustedFlags = (Flags & ~CF_UNSIGNED) | CF_CONST; - AdjustedFlags = g_typeadjust (AdjustedFlags, TypeOf (Expr2.Type) | CF_CONST); + AdjustedFlags = g_typeadjust (AdjustedFlags, CG_TypeOf (Expr2.Type) | CF_CONST); } Gen->Func (g_typeadjust (Flags, AdjustedFlags), 0); } else { - Gen->Func (g_typeadjust (Flags, TypeOf (Expr2.Type)), 0); + Gen->Func (g_typeadjust (Flags, CG_TypeOf (Expr2.Type)), 0); } } else { @@ -452,7 +452,7 @@ static void OpAssignArithmetic (const GenDesc* Gen, ExprDesc* Expr, const char* Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; /* Determine code generator flags */ - Flags = TypeOf (Expr->Type); + Flags = CG_TypeOf (Expr->Type); /* Determine the type of the lhs */ MustScale = Gen != 0 && (Gen->Func == g_add || Gen->Func == g_sub) && @@ -572,7 +572,7 @@ static void OpAssignArithmetic (const GenDesc* Gen, ExprDesc* Expr, const char* if (MustScale) { /* lhs is a pointer, scale rhs */ - g_scale (TypeOf (Expr2.Type), CheckedSizeOf (Expr->Type+1)); + g_scale (CG_TypeOf (Expr2.Type), CheckedSizeOf (Expr->Type+1)); } /* If the lhs is character sized, the operation may be later done @@ -583,7 +583,7 @@ static void OpAssignArithmetic (const GenDesc* Gen, ExprDesc* Expr, const char* } /* Adjust the types of the operands if needed */ - Gen->Func (g_typeadjust (Flags, TypeOf (Expr2.Type)), 0); + Gen->Func (g_typeadjust (Flags, CG_TypeOf (Expr2.Type)), 0); } } @@ -715,8 +715,8 @@ void OpAddSubAssign (const GenDesc* Gen, ExprDesc *Expr, const char* Op) } /* Setup the code generator flags */ - lflags |= TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR; - rflags |= TypeOf (Expr2.Type) | CF_FORCECHAR; + lflags |= CG_TypeOf (Expr->Type) | CG_AddrModeFlags (Expr) | CF_FORCECHAR; + rflags |= CG_TypeOf (Expr2.Type) | CF_FORCECHAR; if (ED_IsConstAbs (&Expr2)) { /* The resulting value is a constant */ @@ -736,7 +736,7 @@ void OpAddSubAssign (const GenDesc* Gen, ExprDesc *Expr, const char* Op) if (MustScale) { /* lhs is a pointer, scale rhs */ - g_scale (TypeOf (Expr2.Type), CheckedSizeOf (Indirect (Expr->Type))); + g_scale (CG_TypeOf (Expr2.Type), CheckedSizeOf (Indirect (Expr->Type))); } } diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 78a4c516a..37611c490 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -80,7 +80,7 @@ static void PostDec (ExprDesc* Expr); -unsigned GlobalModeFlags (const ExprDesc* Expr) +unsigned CG_AddrModeFlags (const ExprDesc* Expr) /* Return the addressing mode flags for the given expression */ { switch (ED_GetLoc (Expr)) { @@ -95,7 +95,7 @@ unsigned GlobalModeFlags (const ExprDesc* Expr) case E_LOC_LITERAL: return CF_LITERAL; case E_LOC_CODE: return CF_CODE; default: - Internal ("GlobalModeFlags: Invalid location flags value: 0x%04X", Expr->Flags); + Internal ("CG_AddrModeFlags: Invalid location flags value: 0x%04X", Expr->Flags); /* NOTREACHED */ return 0; } @@ -103,7 +103,7 @@ unsigned GlobalModeFlags (const ExprDesc* Expr) -static unsigned TypeOfBySize (unsigned Size) +static unsigned CG_TypeOfBySize (unsigned Size) /* Get the code generator replacement type of the object by its size */ { unsigned NewType; @@ -123,7 +123,7 @@ static unsigned TypeOfBySize (unsigned Size) -unsigned TypeOf (const Type* T) +unsigned CG_TypeOf (const Type* T) /* Get the code generator base type of the object */ { unsigned NewType; @@ -163,7 +163,7 @@ unsigned TypeOf (const Type* T) case T_STRUCT: case T_UNION: - NewType = TypeOfBySize (SizeOf (T)); + NewType = CG_TypeOfBySize (SizeOf (T)); if (NewType != CF_NONE) { return NewType; } @@ -184,8 +184,8 @@ unsigned TypeOf (const Type* T) -unsigned FuncTypeOf (const Type* T) -/* Get the code generator flag for calling the function */ +unsigned CG_CallFlags (const Type* T) +/* Get the code generator flags for calling the function */ { if (GetUnderlyingTypeCode (T) == T_FUNC) { return (T->A.F->Flags & FD_VARIADIC) ? 0 : CF_FIXARGC; @@ -254,7 +254,7 @@ static unsigned typeadjust (ExprDesc* lhs, const ExprDesc* rhs, int NoPush) const Type* rhst = rhs->Type; /* Generate type adjustment code if needed */ - ltype = TypeOf (lhst); + ltype = CG_TypeOf (lhst); if (ED_IsConstAbsInt (lhs) && ltype == CF_INT && lhs->IVal >= 0 && lhs->IVal < 256) { /* If the lhs is a int constant that fits in an unsigned char, use unsigned char. ** g_typeadjust will either promote this to int or unsigned int as appropriate @@ -269,7 +269,7 @@ static unsigned typeadjust (ExprDesc* lhs, const ExprDesc* rhs, int NoPush) /* Value is in primary register*/ ltype |= CF_PRIMARY; } - rtype = TypeOf (rhst); + rtype = CG_TypeOf (rhst); if (ED_IsConstAbsInt (rhs) && rtype == CF_INT && rhs->IVal >= 0 && rhs->IVal < 256) { rtype = CF_CHAR | CF_UNSIGNED; } @@ -493,7 +493,7 @@ static void DoInc (ExprDesc* Expr, unsigned KeepResult) } /* Get the flags */ - Flags = TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR | CF_CONST; + Flags = CG_TypeOf (Expr->Type) | CG_AddrModeFlags (Expr) | CF_FORCECHAR | CF_CONST; if (KeepResult != OA_NEED_NEW) { /* No need to get the result */ Flags |= CF_NOKEEP; @@ -580,7 +580,7 @@ static void DoDec (ExprDesc* Expr, unsigned KeepResult) } /* Get the flags */ - Flags = TypeOf (Expr->Type) | GlobalModeFlags (Expr) | CF_FORCECHAR | CF_CONST; + Flags = CG_TypeOf (Expr->Type) | CG_AddrModeFlags (Expr) | CF_FORCECHAR | CF_CONST; if (KeepResult != OA_NEED_NEW) { /* No need to get the result */ Flags |= CF_NOKEEP; @@ -873,7 +873,7 @@ static unsigned FunctionArgList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) /* Handle struct/union specially */ if (IsClassStruct (Expr.Type)) { /* Use the replacement type */ - Flags |= TypeOf (GetStructReplacementType (Expr.Type)); + Flags |= CG_TypeOf (GetStructReplacementType (Expr.Type)); /* Load the value into the primary if it is not already there */ LoadExpr (Flags, &Expr); @@ -882,7 +882,7 @@ static unsigned FunctionArgList (FuncDesc* Func, int IsFastcall, ExprDesc* ED) LoadExpr (CF_NONE, &Expr); /* Use the type of the argument for the push */ - Flags |= TypeOf (Expr.Type); + Flags |= CG_TypeOf (Expr.Type); } /* If this is a fastcall function, don't push the last argument */ @@ -1069,7 +1069,7 @@ static void FunctionCall (ExprDesc* Expr) } /* Call the function */ - g_callind (FuncTypeOf (Expr->Type+1), ArgSize, PtrOffs); + g_callind (CG_CallFlags (Expr->Type+1), ArgSize, PtrOffs); } else { @@ -1137,9 +1137,9 @@ static void FunctionCall (ExprDesc* Expr) SB_Done (&S); - g_call (FuncTypeOf (Expr->Type), Func->WrappedCall->Name, ArgSize); + g_call (CG_CallFlags (Expr->Type), Func->WrappedCall->Name, ArgSize); } else { - g_call (FuncTypeOf (Expr->Type), (const char*) Expr->Name, ArgSize); + g_call (CG_CallFlags (Expr->Type), (const char*) Expr->Name, ArgSize); } } @@ -1665,7 +1665,7 @@ void Store (ExprDesc* Expr, const Type* StoreType) } /* Prepare the code generator flags */ - Flags = TypeOf (StoreType) | GlobalModeFlags (Expr); + Flags = CG_TypeOf (StoreType) | CG_AddrModeFlags (Expr); /* Do the store depending on the location */ switch (ED_GetLoc (Expr)) { @@ -1793,7 +1793,7 @@ static void PostInc (ExprDesc* Expr) } /* Get the data type */ - Flags = TypeOf (Expr->Type); + Flags = CG_TypeOf (Expr->Type); /* We are allowed by the C standard to defer the inc operation until after ** the expression is used, so that we don't need to save and reload @@ -1854,7 +1854,7 @@ static void PostDec (ExprDesc* Expr) } /* Get the data type */ - Flags = TypeOf (Expr->Type); + Flags = CG_TypeOf (Expr->Type); /* Emit smaller code if a char variable is at a constant location */ if ((Flags & CF_TYPEMASK) == CF_CHAR && ED_IsLocConst (Expr) && !IsTypeBitField (Expr->Type)) { @@ -1934,7 +1934,7 @@ static void UnaryOp (ExprDesc* Expr) TypeConversion (Expr, Expr->Type); /* Get code generation flags */ - Flags = TypeOf (Expr->Type); + Flags = CG_TypeOf (Expr->Type); /* Handle the operation */ switch (Tok) { @@ -1984,7 +1984,7 @@ void hie10 (ExprDesc* Expr) } else { /* Not constant, load into the primary */ LoadExpr (CF_NONE, Expr); - g_bneg (TypeOf (Expr->Type)); + g_bneg (CG_TypeOf (Expr->Type)); ED_FinalizeRValLoad (Expr); ED_TestDone (Expr); /* bneg will set cc */ } @@ -2141,7 +2141,7 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ /* Get the lhs on stack */ GetCodePos (&Mark1); - ltype = TypeOf (Expr->Type); + ltype = CG_TypeOf (Expr->Type); lconst = ED_IsConstAbs (Expr); if (lconst) { /* Constant value */ @@ -2255,7 +2255,7 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ ** operation because this allows for better code. */ unsigned rtype = ltype | CF_CONST; - ltype = TypeOf (Expr2.Type); /* Expr2 is now left */ + ltype = CG_TypeOf (Expr2.Type); /* Expr2 is now left */ type = CF_CONST; if ((Gen->Flags & GEN_NOPUSH) == 0) { g_push (ltype, 0); @@ -2279,7 +2279,7 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ ** expects the lhs in the primary, remove the push of the primary ** now. */ - unsigned rtype = TypeOf (Expr2.Type); + unsigned rtype = CG_TypeOf (Expr2.Type); type = 0; if (rconst) { /* As above, but for the RHS. */ @@ -2355,7 +2355,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ /* Get the lhs on stack */ GetCodePos (&Mark1); - ltype = TypeOf (Expr->Type); + ltype = CG_TypeOf (Expr->Type); if (ED_IsConstAbs (Expr)) { /* Numeric constant value */ GetCodePos (&Mark2); @@ -2667,7 +2667,7 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ } } else { - unsigned rtype = TypeOf (Expr2.Type) | (flags & CF_CONST); + unsigned rtype = CG_TypeOf (Expr2.Type) | (flags & CF_CONST); flags |= g_typeadjust (ltype, rtype); } @@ -2887,7 +2887,7 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) g_addaddr_local (flags, Expr->IVal); } else { /* Static address */ - g_addaddr_static (flags | GlobalModeFlags (Expr), Expr->Name, Expr->IVal); + g_addaddr_static (flags | CG_AddrModeFlags (Expr), Expr->Name, Expr->IVal); } } else { /* Lhs is not numeric. Load it. */ @@ -2905,7 +2905,7 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) g_addaddr_local (flags, Expr2.IVal); } else { /* Static address */ - g_addaddr_static (flags | GlobalModeFlags (&Expr2), Expr2.Name, Expr2.IVal); + g_addaddr_static (flags | CG_AddrModeFlags (&Expr2), Expr2.Name, Expr2.IVal); } } @@ -2932,7 +2932,7 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) flags |= CF_CONST; } else { /* Constant address label */ - flags |= GlobalModeFlags (Expr); + flags |= CG_AddrModeFlags (Expr); } /* Check for pointer arithmetic */ @@ -2976,7 +2976,7 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) /* Load lhs */ LoadExpr (CF_NONE, Expr); /* Use new flags */ - flags = CF_CHAR | GlobalModeFlags (&Expr2); + flags = CF_CHAR | CG_AddrModeFlags (&Expr2); /* Add the variable */ if (ED_IsLocStack (&Expr2)) { g_addlocal (flags, Expr2.IVal); @@ -2998,7 +2998,7 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) ** not a numeric constant, and the scale factor is not one ** (no scaling), we must take the long way over the stack. */ - g_push (TypeOf (Expr2.Type), 0); /* rhs --> stack */ + g_push (CG_TypeOf (Expr2.Type), 0); /* rhs --> stack */ LoadExpr (CF_NONE, Expr); g_scale (CF_PTR, lscale); g_add (CF_PTR, 0); @@ -3014,7 +3014,7 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) /* Left hand side is not constant. Get the value onto the stack. */ LoadExpr (CF_NONE, Expr); /* --> primary register */ GetCodePos (&Mark); - flags = TypeOf (Expr->Type); /* default codegen type */ + flags = CG_TypeOf (Expr->Type); /* default codegen type */ g_push (flags, 0); /* --> stack */ /* Evaluate the rhs */ @@ -3078,7 +3078,7 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) g_push (CF_PTR, 0); /* --> stack */ LoadExpr (CF_NONE, &Expr2); /* Load rhs into primary register */ } else { - g_tosint (TypeOf (lhst)); /* Make sure TOS is int */ + g_tosint (CG_TypeOf (lhst)); /* Make sure TOS is int */ LoadExpr (CF_NONE, &Expr2); /* Load rhs into primary register */ if (lscale != 1) { g_swap (CF_INT); /* Swap TOS and primary */ @@ -3198,9 +3198,9 @@ static void parsesub (ExprDesc* Expr) /* Remember the output queue position, then bring the value onto the stack */ GetCodePos (&Mark1); - LoadExpr (CF_NONE, Expr); /* --> primary register */ + LoadExpr (CF_NONE, Expr); /* --> primary register */ GetCodePos (&Mark2); - g_push (TypeOf (lhst), 0); /* --> stack */ + g_push (CG_TypeOf (lhst), 0); /* --> stack */ /* Parse the right hand side */ MarkedExprWithCheck (hie9, &Expr2); @@ -3357,7 +3357,7 @@ static void parsesub (ExprDesc* Expr) } /* Load rhs into the primary */ LoadExpr (CF_NONE, &Expr2); - g_scale (TypeOf (rhst), rscale); + g_scale (CG_TypeOf (rhst), rscale); /* Generate code for the sub (the & is a hack here) */ g_sub (flags & ~CF_CONST, 0); } @@ -3394,7 +3394,7 @@ static void parsesub (ExprDesc* Expr) } /* Load rhs into the primary */ LoadExpr (CF_NONE, &Expr2); - g_scale (TypeOf (rhst), rscale); + g_scale (CG_TypeOf (rhst), rscale); /* Generate code for the sub (the & is a hack here) */ g_sub (flags & ~CF_CONST, 0); } diff --git a/src/cc65/expr.h b/src/cc65/expr.h index 5644fb82d..726ea882b 100644 --- a/src/cc65/expr.h +++ b/src/cc65/expr.h @@ -48,14 +48,14 @@ typedef struct GenDesc { -unsigned GlobalModeFlags (const ExprDesc* Expr); +unsigned CG_AddrModeFlags (const ExprDesc* Expr); /* Return the addressing mode flags for the given expression */ -unsigned TypeOf (const Type* T); +unsigned CG_TypeOf (const Type* T); /* Get the code generator base type of the object */ -unsigned FuncTypeOf (const Type* T); -/* Get the code generator flag for calling the function */ +unsigned CG_CallFlags (const Type* T); +/* Get the code generator flags for calling the function */ void ExprWithCheck (void (*Func) (ExprDesc*), ExprDesc* Expr); /* Call an expression function with checks. */ diff --git a/src/cc65/function.c b/src/cc65/function.c index 737b068a3..cd38c0081 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -565,15 +565,15 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* Generate the push */ /* Handle struct/union specially */ if (IsClassStruct (D->LastParam->Type)) { - Flags = TypeOf (GetStructReplacementType (D->LastParam->Type)) | CF_FORCECHAR; + Flags = CG_TypeOf (GetStructReplacementType (D->LastParam->Type)) | CF_FORCECHAR; } else { - Flags = TypeOf (D->LastParam->Type) | CF_FORCECHAR; + Flags = CG_TypeOf (D->LastParam->Type) | CF_FORCECHAR; } g_push (Flags, 0); } /* Generate function entry code if needed */ - g_enter (FuncTypeOf (Func->Type), F_GetParamSize (CurrentFunc)); + g_enter (CG_CallFlags (Func->Type), F_GetParamSize (CurrentFunc)); /* If stack checking code is requested, emit a call to the helper routine */ if (IS_Get (&CheckStack)) { diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c index 2b151e59e..0c763f616 100644 --- a/src/cc65/initdata.c +++ b/src/cc65/initdata.c @@ -168,12 +168,12 @@ static void DefineData (ExprDesc* Expr) case E_LOC_NONE: /* Immediate numeric value with no storage */ - g_defdata (CF_IMM | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); + g_defdata (CF_IMM | CG_TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); break; case E_LOC_ABS: /* Absolute numeric address */ - g_defdata (CF_ABSOLUTE | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); + g_defdata (CF_ABSOLUTE | CG_TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); break; case E_LOC_GLOBAL: diff --git a/src/cc65/loadexpr.c b/src/cc65/loadexpr.c index c5ac43f78..d06ca9437 100644 --- a/src/cc65/loadexpr.c +++ b/src/cc65/loadexpr.c @@ -133,10 +133,10 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) AdjustBitField = 1; /* Flags we need operate on the whole bit-field, without CF_FORCECHAR. */ - BitFieldFullWidthFlags = Flags | TypeOf (Expr->Type); + BitFieldFullWidthFlags = Flags | CG_TypeOf (Expr->Type); /* Flags we need operate on the whole chunk containing the bit-field. */ - Flags |= TypeOf (GetBitFieldChunkType (Expr->Type)); + Flags |= CG_TypeOf (GetBitFieldChunkType (Expr->Type)); /* If we're adjusting, then only load a char (not an int) and do only char ops; ** We will clear the high byte in the adjustment. CF_FORCECHAR does nothing if @@ -151,7 +151,7 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) if (IsIncompleteESUType (Expr->Type)) { return; } - Flags |= TypeOf (Expr->Type); + Flags |= CG_TypeOf (Expr->Type); } } @@ -175,7 +175,7 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr) case E_LOC_NONE: /* Immediate number constant */ - g_getimmed (Flags | CF_IMM | TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); + g_getimmed (Flags | CF_IMM | CG_TypeOf (Expr->Type) | CF_CONST, Expr->IVal, 0); break; case E_LOC_ABS: diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 68ac00e62..fe88de3a8 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -164,7 +164,7 @@ static void ParseRegisterDecl (Declarator* Decl, int Reg) LoadExpr (CF_NONE, &Expr); /* Store the value into the variable */ - g_putstatic (CF_REGVAR | TypeOf (Sym->Type), Reg, 0); + g_putstatic (CF_REGVAR | CG_TypeOf (Sym->Type), Reg, 0); /* This has to be done at sequence point */ DoDeferred (SQP_KEEP_NONE, &Expr); @@ -274,7 +274,7 @@ static void ParseAutoDecl (Declarator* Decl) } /* Push the value */ - g_push (Flags | TypeOf (Sym->Type), Expr.IVal); + g_push (Flags | CG_TypeOf (Sym->Type), Expr.IVal); /* This has to be done at sequence point */ DoDeferred (SQP_KEEP_NONE, &Expr); @@ -353,7 +353,7 @@ static void ParseAutoDecl (Declarator* Decl) LoadExpr (CF_NONE, &Expr); /* Store the value into the variable */ - g_putstatic (CF_STATIC | TypeOf (Sym->Type), DataLabel, 0); + g_putstatic (CF_STATIC | CG_TypeOf (Sym->Type), DataLabel, 0); /* This has to be done at sequence point */ DoDeferred (SQP_KEEP_NONE, &Expr); diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c index b8fb70434..9fdceb7a2 100644 --- a/src/cc65/shiftexpr.c +++ b/src/cc65/shiftexpr.c @@ -95,14 +95,14 @@ void ShiftExpr (struct ExprDesc* Expr) ResultType = IntPromotion (Expr->Type); /* Prepare the code generator flags */ - GenFlags = TypeOf (ResultType); + GenFlags = CG_TypeOf (ResultType); /* Calculate the number of bits the lhs operand has */ ExprBits = SizeOf (ResultType) * 8; /* Get the lhs on stack */ GetCodePos (&Mark1); - ltype = TypeOf (Expr->Type); + ltype = CG_TypeOf (Expr->Type); lconst = ED_IsConstAbs (Expr); if (lconst) { /* Constant value */ diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index fc19ce7f0..a9b595320 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -184,7 +184,7 @@ static void ParseArg (ArgDesc* Arg, const Type* Type, ExprDesc* Expr) GetCodePos (&Arg->End); /* Use the type of the argument for the push */ - Arg->Flags |= TypeOf (Arg->Expr.Type); + Arg->Flags |= CG_TypeOf (Arg->Expr.Type); /* Propagate from subexpressions */ Expr->Flags |= Arg->Expr.Flags & E_MASK_VIRAL; diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index 7355e88a8..f89f573e4 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -345,7 +345,7 @@ static void ReturnStatement (void) if (ReturnType == Expr.Type) { Error ("Returning '%s' of this size by value is not supported", GetFullTypeName (Expr.Type)); } - LoadExpr (TypeOf (ReturnType), &Expr); + LoadExpr (CG_TypeOf (ReturnType), &Expr); } else { /* Load the value into the primary */ diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index c72b2c5eb..8b23ae0ec 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -111,7 +111,7 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) LoadExpr (CF_NONE, Expr); /* Emit typecast code */ - g_typecast (TypeOf (NewType), TypeOf (OldType)); + g_typecast (CG_TypeOf (NewType), CG_TypeOf (OldType)); /* Value is now in primary and an rvalue */ ED_FinalizeRValLoad (Expr); @@ -162,7 +162,7 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) LoadExpr (CF_NONE, Expr); /* Emit typecast code. */ - g_typecast (TypeOf (NewType), TypeOf (OldType)); + g_typecast (CG_TypeOf (NewType), CG_TypeOf (OldType)); /* Value is now an rvalue in the primary */ ED_FinalizeRValLoad (Expr); From 01d2b809a1411da08b1642f8a0ccf7aee9898a72 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 21 Oct 2023 23:41:36 +0800 Subject: [PATCH 1842/2710] Renamed struct Segments to SegContext as well as some related functions. --- src/cc65/asmlabel.c | 4 ++-- src/cc65/asmlabel.h | 4 ++-- src/cc65/function.c | 4 ++-- src/cc65/segments.c | 48 +++++++++++++++++++++++++-------------------- src/cc65/segments.h | 24 +++++++++++------------ src/cc65/symentry.h | 4 ++-- 6 files changed, 47 insertions(+), 41 deletions(-) diff --git a/src/cc65/asmlabel.c b/src/cc65/asmlabel.c index 7d5db75e6..a07607048 100644 --- a/src/cc65/asmlabel.c +++ b/src/cc65/asmlabel.c @@ -52,7 +52,7 @@ -static struct Segments* CurrentFunctionSegment; +static struct SegContext* CurrentFunctionSegment; @@ -62,7 +62,7 @@ static struct Segments* CurrentFunctionSegment; -void UseLabelPoolFromSegments (struct Segments* Seg) +void UseLabelPoolFromSegments (struct SegContext* Seg) /* Use the info in segments for generating new label numbers */ { CurrentFunctionSegment = Seg; diff --git a/src/cc65/asmlabel.h b/src/cc65/asmlabel.h index dbfe2f443..7e8039cc4 100644 --- a/src/cc65/asmlabel.h +++ b/src/cc65/asmlabel.h @@ -44,7 +44,7 @@ -struct Segments; +struct SegContext; @@ -54,7 +54,7 @@ struct Segments; -void UseLabelPoolFromSegments (struct Segments* Seg); +void UseLabelPoolFromSegments (struct SegContext* Seg); /* Use the info in segments for generating new label numbers */ unsigned GetLocalLabel (void); diff --git a/src/cc65/function.c b/src/cc65/function.c index 38a8f45aa..1fee9b342 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -547,7 +547,7 @@ void NewFunc (SymEntry* Func, FuncDesc* D) } /* Allocate code and data segments for this function */ - Func->V.F.Seg = PushSegments (Func); + Func->V.F.Seg = PushSegContext (Func); /* Use the info in the segments for generating new local labels */ UseLabelPoolFromSegments (Func->V.F.Seg); @@ -696,7 +696,7 @@ void NewFunc (SymEntry* Func, FuncDesc* D) } /* Switch back to the old segments */ - PopSegments (); + PopSegContext (); /* Reset the current function pointer */ FreeFunction (CurrentFunc); diff --git a/src/cc65/segments.c b/src/cc65/segments.c index 8283b9da5..764ae29ea 100644 --- a/src/cc65/segments.c +++ b/src/cc65/segments.c @@ -69,11 +69,11 @@ typedef struct { } SegAddrSize_t; -/* Pointer to the current segment list. Output goes here. */ -Segments* CS = 0; +/* Pointer to the current segment context. Output goes here. */ +SegContext* CS = 0; -/* Pointer to the global segment list */ -Segments* GS = 0; +/* Pointer to the global segment context */ +SegContext* GS = 0; /* Actual names for the segments */ static StrStack SegmentNames[SEG_COUNT]; @@ -86,12 +86,12 @@ static Collection SegmentAddrSizes; ** maximum stack depth is 2, so there is not really a need for a better ** implementation. */ -static Collection SegmentStack = STATIC_COLLECTION_INITIALIZER; +static Collection SegContextStack = STATIC_COLLECTION_INITIALIZER; /*****************************************************************************/ -/* Code */ +/* Segment name and address size */ /*****************************************************************************/ @@ -226,11 +226,17 @@ const char* GetSegName (segment_t Seg) -static Segments* NewSegments (SymEntry* Func) -/* Initialize a Segments structure (set all fields to NULL) */ +/*****************************************************************************/ +/* Segment context */ +/*****************************************************************************/ + + + +static SegContext* NewSegContext (SymEntry* Func) +/* Initialize a SegContext structure (set all fields to NULL) */ { /* Allocate memory */ - Segments* S = xmalloc (sizeof (Segments)); + SegContext* S = xmalloc (sizeof (SegContext)); /* Initialize the fields */ S->Text = NewTextSeg (Func); @@ -248,14 +254,14 @@ static Segments* NewSegments (SymEntry* Func) -Segments* PushSegments (SymEntry* Func) -/* Make the new segment list current but remember the old one */ +SegContext* PushSegContext (SymEntry* Func) +/* Make the new segment context current but remember the old one */ { /* Push the current pointer onto the stack */ - CollAppend (&SegmentStack, CS); + CollAppend (&SegContextStack, CS); - /* Create a new Segments structure */ - CS = NewSegments (Func); + /* Create a new SegContext structure */ + CS = NewSegContext (Func); /* Return the new struct */ return CS; @@ -263,14 +269,14 @@ Segments* PushSegments (SymEntry* Func) -void PopSegments (void) -/* Pop the old segment list (make it current) */ +void PopSegContext (void) +/* Pop the old segment context (make it current) */ { /* Must have something on the stack */ - PRECONDITION (CollCount (&SegmentStack) > 0); + PRECONDITION (CollCount (&SegContextStack) > 0); /* Pop the last segment and set it as current */ - CS = CollPop (&SegmentStack); + CS = CollPop (&SegContextStack); } @@ -278,13 +284,13 @@ void PopSegments (void) void CreateGlobalSegments (void) /* Create the global segments and remember them in GS */ { - GS = PushSegments (0); + GS = PushSegContext (0); } void UseDataSeg (segment_t DSeg) -/* For the current segment list, use the data segment DSeg */ +/* For the current segment context, use the data segment DSeg */ { /* Check the input */ PRECONDITION (CS && DSeg != SEG_CODE); @@ -372,7 +378,7 @@ void RemoveGlobalCode (void) -void OutputSegments (const Segments* S) +void OutputSegments (const SegContext* S) /* Output the given segments to the output file */ { /* Output the function prologue if the segments came from a function */ diff --git a/src/cc65/segments.h b/src/cc65/segments.h index 91d702df6..d7c9e3c11 100644 --- a/src/cc65/segments.h +++ b/src/cc65/segments.h @@ -78,8 +78,8 @@ typedef enum segment_t { } segment_t; /* A list of all segments used when generating code */ -typedef struct Segments Segments; -struct Segments { +typedef struct SegContext SegContext; +struct SegContext { struct TextSeg* Text; /* Text segment */ struct CodeSeg* Code; /* Code segment */ struct DataSeg* Data; /* Data segment */ @@ -90,11 +90,11 @@ struct Segments { unsigned NextDataLabel; /* Number to generate unique data labels */ }; -/* Pointer to the current segment list. Output goes here. */ -extern Segments* CS; +/* Pointer to the current segment context. Output goes here. */ +extern SegContext* CS; -/* Pointer to the global segment list */ -extern Segments* GS; +/* Pointer to the global segment context */ +extern SegContext* GS; @@ -132,17 +132,17 @@ void PopSegName (segment_t Seg); const char* GetSegName (segment_t Seg); /* Get the name of the given segment */ -Segments* PushSegments (struct SymEntry* Func); -/* Make the new segment list current but remember the old one */ +SegContext* PushSegContext (struct SymEntry* Func); +/* Make the new segment context current but remember the old one */ -void PopSegments (void); -/* Pop the old segment list (make it current) */ +void PopSegContext (void); +/* Pop the old segment context (make it current) */ void CreateGlobalSegments (void); /* Create the global segments and remember them in GS */ void UseDataSeg (segment_t DSeg); -/* For the current segment list, use the data segment DSeg */ +/* For the current segment context, use the data segment DSeg */ struct DataSeg* GetDataSeg (void); /* Return the current data segment */ @@ -165,7 +165,7 @@ int HaveGlobalCode (void); void RemoveGlobalCode (void); /* Remove all code from the global code segment. Used for error recovery. */ -void OutputSegments (const Segments* S); +void OutputSegments (const SegContext* S); /* Output the given segments to the output file */ diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 5ebd30a75..76a4272ae 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -56,7 +56,7 @@ -struct Segments; +struct SegContext; struct LiteralPool; struct CodeEntry; @@ -156,7 +156,7 @@ struct SymEntry { /* Data for functions */ struct { - struct Segments* Seg; /* Segments for this function */ + struct SegContext* Seg; /* SegContext for this function */ struct LiteralPool* LitPool; /* Literal pool for this function */ } F; From cf3a0c4a3053b0fd82de735a7df0d5299a458937 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 13 Oct 2022 13:45:22 +0800 Subject: [PATCH 1843/2710] Corrected and entailed comments and cleaned up code with type comparison. --- src/cc65/typecmp.c | 100 ++++++++++++++++++++------------------------- src/cc65/typecmp.h | 5 ++- 2 files changed, 49 insertions(+), 56 deletions(-) diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index c3239652f..bb8bca880 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -141,7 +141,7 @@ static void SetResult (typecmp_t* Result, typecmpcode_t Val) static typecmp_t* CmpQuals (const Type* lhst, const Type* rhst, typecmp_t* Result) -/* Copare the types regarding thier qualifiers. Return the Result */ +/* Compare the types regarding their qualifiers. Return via pointer *Result */ { TypeCode LeftQual, RightQual; @@ -249,16 +249,10 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) /* Compare two types. Determine, where they differ */ - while (lhs->C != T_END) { - - /* Check if the end of the type string is reached */ - if (rhs->C == T_END) { - /* End of comparison reached */ - break; - } - + while (lhs->C != T_END && rhs->C != T_END) { /* Compare qualifiers */ if (CmpQuals (lhs, rhs, Result)->C == TC_INCOMPATIBLE) { + /* No need to compare further */ return; } @@ -266,6 +260,22 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) LeftRank = (GetUnqualTypeCode (lhs) & T_MASK_RANK); RightRank = (GetUnqualTypeCode (rhs) & T_MASK_RANK); + /* Bit-fields are considered compatible if they have the same + ** signedness, bit-offset and bit-width. + */ + if (IsTypeBitField (lhs) || IsTypeBitField (rhs)) { + if (!IsTypeBitField (lhs) || + !IsTypeBitField (rhs) || + lhs->A.B.Offs != rhs->A.B.Offs || + lhs->A.B.Width != rhs->A.B.Width) { + /* Incompatible */ + goto Incompatible; + } + if (LeftRank != RightRank) { + SetResult (Result, TC_STRICT_COMPATIBLE); + } + } + /* If one side is a pointer and the other side is an array, both are ** compatible. */ @@ -280,56 +290,35 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) } } - /* Bit-fields are considered compatible if they have the same - ** signedness, bit-offset and bit-width. - */ - if (IsTypeBitField (lhs) || IsTypeBitField (rhs)) { - if (!IsTypeBitField (lhs) || - !IsTypeBitField (rhs) || - lhs->A.B.Offs != rhs->A.B.Offs || - lhs->A.B.Width != rhs->A.B.Width) { - SetResult (Result, TC_INCOMPATIBLE); - } - if (LeftRank != RightRank) { - SetResult (Result, TC_STRICT_COMPATIBLE); - } - } - /* If the ranks are different, the types are incompatible */ if (LeftRank != RightRank) { - SetResult (Result, TC_INCOMPATIBLE); - return; + goto Incompatible; } /* Enums must be handled specially */ if ((IsTypeEnum (lhs) || IsTypeEnum (rhs))) { /* Compare the tag types */ - Sym1 = IsTypeEnum (lhs) ? GetESUTagSym (lhs) : 0; - Sym2 = IsTypeEnum (rhs) ? GetESUTagSym (rhs) : 0; + Sym1 = GetESUTagSym (lhs); + Sym2 = GetESUTagSym (rhs); + /* For the two to be identical, they must be declared in the same + ** scope and have the same name. + */ if (Sym1 != Sym2) { if (Sym1 == 0 || Sym2 == 0) { - /* Only one is an enum. So they can't be identical */ SetResult (Result, TC_STRICT_COMPATIBLE); - - } else { - /* For the two to be identical, they must be in the same - ** scope and have the same name. + } else if (Sym1->Owner != Sym2->Owner || + strcmp (Sym1->Name, Sym2->Name) != 0) { + /* If any one of the two is incomplete, we can't guess + ** their underlying types and have to assume that they + ** be incompatible. */ - if (Sym1->Owner != Sym2->Owner || - strcmp (Sym1->Name, Sym2->Name) != 0) { - - /* If any one of the two is incomplete, we can't guess - ** their underlying types and have to assume that they - ** be incompatible. - */ - if (SizeOf (lhs) == 0 || SizeOf (rhs) == 0) { - SetResult (Result, TC_INCOMPATIBLE); - return; - } + if (SizeOf (lhs) == 0 || SizeOf (rhs) == 0) { + goto Incompatible; } + SetResult (Result, TC_STRICT_COMPATIBLE); } } @@ -383,15 +372,13 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) /* Check the remaining flags */ if ((F1->Flags & ~FD_IGNORE) != (F2->Flags & ~FD_IGNORE)) { /* Flags differ */ - SetResult (Result, TC_INCOMPATIBLE); - return; + goto Incompatible; } /* Compare the parameter lists */ if (EqualFuncParams (F1, F2) == 0) { /* Parameter list is not identical */ - SetResult (Result, TC_INCOMPATIBLE); - return; + goto Incompatible; } } @@ -406,8 +393,7 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) if (LeftCount != UNSPECIFIED && RightCount != UNSPECIFIED) { /* Member count given but different */ - SetResult (Result, TC_INCOMPATIBLE); - return; + goto Incompatible; } /* We take into account which side is more specified */ @@ -436,8 +422,7 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) /* This shouldn't happen in the current code base, but ** we still handle this case to be future-proof. */ - SetResult (Result, TC_INCOMPATIBLE); - return; + goto Incompatible; } } @@ -453,9 +438,11 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) /* Check if lhs and rhs both reached ends */ if (lhs->C == T_END && rhs->C == T_END) { SetResult (Result, TC_IDENTICAL); - } else { - SetResult (Result, TC_INCOMPATIBLE); + return; } + +Incompatible: + SetResult (Result, TC_INCOMPATIBLE); } @@ -483,7 +470,10 @@ typecmp_t TypeCmp (const Type* lhs, const Type* rhs) void TypeCompatibilityDiagnostic (const Type* NewType, const Type* OldType, int IsError, const char* Msg) -/* Print error or warning message about type compatibility with proper type names */ +/* Print error or warning message about type compatibility with proper type +** names. The format string shall contain two '%s' specifiers for the names of +** the two types. +*/ { StrBuf NewTypeName = STATIC_STRBUF_INITIALIZER; StrBuf OldTypeName = STATIC_STRBUF_INITIALIZER; diff --git a/src/cc65/typecmp.h b/src/cc65/typecmp.h index 367df5245..fa97ca176 100644 --- a/src/cc65/typecmp.h +++ b/src/cc65/typecmp.h @@ -97,7 +97,10 @@ typecmp_t TypeCmp (const Type* lhs, const Type* rhs); /* Compare two types and return the result */ void TypeCompatibilityDiagnostic (const Type* NewType, const Type* OldType, int IsError, const char* Msg); -/* Print error or warning message about type compatibility with proper type names */ +/* Print error or warning message about type compatibility with proper type +** names. The format string shall contain two '%s' specifiers for the names of +** the two types. +*/ From 1dccd1333bebca6d1d64e8b5fbf6b83193ac5509 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 12 Oct 2022 13:10:17 +0800 Subject: [PATCH 1844/2710] Added more type utility functions. Changed result of GetBasicTypeName() for unknown types from "type" to "<type>". --- src/cc65/datatype.c | 43 ++++++++++++++++++++++++++++++++++++++++--- src/cc65/datatype.h | 25 ++++++++++++++++++++++++- src/cc65/expr.c | 12 ++++++------ src/cc65/symtab.c | 11 ++++------- 4 files changed, 74 insertions(+), 17 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 37fe54023..cb013ca21 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -816,6 +816,14 @@ const Type* GetStructReplacementType (const Type* SType) +const Type* GetBitFieldDeclType (const Type* Type) +/* Get the original integer type used to declare the bit-field */ +{ + return Type + 1; +} + + + const Type* GetBitFieldChunkType (const Type* Type) /* Get the type needed to operate on the byte chunk containing the bit-field */ { @@ -864,6 +872,16 @@ int IsTypeFragBitField (const Type* T) +#if !defined(HAVE_INLINE) +int IsTypeFuncLike (const Type* T) +/* Return true if this is a function or a function pointer */ +{ + return IsTypeFunc (T) || IsTypeFuncPtr (T); +} +#endif + + + int IsObjectType (const Type* T) /* Return true if this is a fully described object type */ { @@ -923,6 +941,14 @@ int IsAggregateType (const Type* T) +int IsDerivedDeclaratorType (const Type* T) +/* Return true if this is an array, function or pointer type */ +{ + return IsTypeArray (T) || IsTypeFunc (T) || IsTypePtr (T); +} + + + int IsRelationType (const Type* T) /* Return true if this is an arithmetic, array or pointer type */ { @@ -957,6 +983,17 @@ int IsIncompleteESUType (const Type* T) +int IsPassByRefType (const Type* T) +/* Return true if this is a large struct/union type that doesn't fit in the +** primary. This returns false for the void value extension type since it is +** not passable at all. +*/ +{ + return IsClassStruct (T) && GetStructReplacementType (T) == T; +} + + + int IsEmptiableObjectType (const Type* T) /* Return true if this is a struct/union/void type that can have zero size */ { @@ -1223,7 +1260,7 @@ void SetESUTagSym (Type* T, struct SymEntry* S) const char* GetBasicTypeName (const Type* T) /* Return a const name string of the basic type. -** Return "type" for unknown basic types. +** Return "<type>" for unknown basic types. */ { switch (GetRawTypeRank (T)) { @@ -1273,7 +1310,7 @@ const char* GetBasicTypeName (const Type* T) } } } - return "type"; + return "<type>"; } @@ -1433,7 +1470,7 @@ static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBu if (!IsTypeBitField (T)) { SB_AppendStr (&Buf, GetTagSymName (T)); } else { - SB_AppendStr (&Buf, GetBasicTypeName (T + 1)); + SB_AppendStr (&Buf, GetBasicTypeName (GetBitFieldDeclType (T))); } if (!SB_IsEmpty (West)) { diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index eebd3abd8..06bb9168b 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -482,6 +482,9 @@ const Type* GetUnderlyingType (const Type* Type); const Type* GetStructReplacementType (const Type* SType); /* Get a replacement type for passing a struct/union by value in the primary */ +const Type* GetBitFieldDeclType (const Type* Type); +/* Get the original integer type used to declare the bit-field */ + const Type* GetBitFieldChunkType (const Type* Type); /* Get the type needed to operate on the byte chunk containing the bit-field */ @@ -690,6 +693,17 @@ INLINE int IsTypeFuncPtr (const Type* T) # define IsTypeFuncPtr(T) (IsTypePtr (T) && IsTypeFunc (T+1)) #endif +#if defined(HAVE_INLINE) +INLINE int IsTypeFuncLike (const Type* T) +/* Return true if this is a function or a function pointer */ +{ + return IsTypeFunc (T) || IsTypeFuncPtr (T); +} +#else +int IsTypeFuncLike (const Type* T); +/* Return true if this is a function or a function pointer */ +#endif + #if defined(HAVE_INLINE) INLINE int IsClassInt (const Type* T) /* Return true if this is an integer type */ @@ -761,6 +775,9 @@ int IsDerivedType (const Type* T); int IsAggregateType (const Type* T); /* Return true if this is an array or struct type */ +int IsDerivedDeclaratorType (const Type* T); +/* Return true if this is an array, function or pointer type */ + int IsRelationType (const Type* T); /* Return true if this is an arithmetic, array or pointer type */ @@ -773,6 +790,12 @@ int IsESUType (const Type* T); int IsIncompleteESUType (const Type* T); /* Return true if this is an incomplete ESU type */ +int IsPassByRefType (const Type* T); +/* Return true if this is a large struct/union type that doesn't fit in the +** primary. This returns false for the void value extension type since it is +** not passable at all. +*/ + int IsEmptiableObjectType (const Type* T); /* Return true if this is a struct/union/void type that can have zero size */ @@ -1024,7 +1047,7 @@ void SetESUTagSym (Type* T, struct SymEntry* S); const char* GetBasicTypeName (const Type* T); /* Return a const name string of the basic type. -** Return "type" for unknown basic types. +** Return "<type>" for unknown basic types. */ const char* GetFullTypeName (const Type* T); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index aef0679d4..4a8fd6eab 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1619,9 +1619,9 @@ static void hie11 (ExprDesc *Expr) break; case TOK_LPAREN: - /* Function call. */ - if (!IsTypeFunc (Expr->Type) && !IsTypeFuncPtr (Expr->Type)) { - /* Not a function */ + /* Function call */ + if (!IsTypeFuncLike (Expr->Type)) { + /* Not a function or function pointer */ Error ("Illegal function call"); /* Force the type to be a implicitly defined function, one ** returning an int and taking any number of arguments. @@ -2035,7 +2035,7 @@ void hie10 (ExprDesc* Expr) ** of dereference operators is legal, since the result will ** always be converted to "pointer to function". */ - if (IsTypeFuncPtr (Expr->Type) || IsTypeFunc (Expr->Type)) { + if (IsTypeFuncLike (Expr->Type)) { /* Expression not storable */ ED_MarkExprAsRVal (Expr); } else { @@ -3216,7 +3216,7 @@ static void parsesub (ExprDesc* Expr) Expr2.Flags |= Expr->Flags & E_MASK_KEEP_SUBEXPR; /* lhs cannot be function or pointer to function */ - if (IsTypeFunc (Expr->Type) || IsTypeFuncPtr (Expr->Type)) { + if (IsTypeFuncLike (Expr->Type)) { Error ("Invalid left operand for binary operator '-'"); /* Make it pointer to char to avoid further errors */ Expr->Type = type_uchar; @@ -3241,7 +3241,7 @@ static void parsesub (ExprDesc* Expr) MarkedExprWithCheck (hie9, &Expr2); /* rhs cannot be function or pointer to function */ - if (IsTypeFunc (Expr2.Type) || IsTypeFuncPtr (Expr2.Type)) { + if (IsTypeFuncLike (Expr2.Type)) { Error ("Invalid right operand for binary operator '-'"); /* Make it pointer to char to avoid further errors */ Expr2.Type = type_uchar; diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 951ed9e5e..b54cba2db 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -1009,7 +1009,6 @@ SymEntry* AddBitField (const char* Name, const Type* T, unsigned Offs, Entry = NewSymEntry (Name, SC_BITFIELD); /* Set the symbol attributes. Bit-fields are always integral types. */ - Entry->Type = NewBitFieldOf (T, BitOffs, BitWidth); Entry->V.Offs = Offs; if (!SignednessSpecified) { @@ -1020,12 +1019,10 @@ SymEntry* AddBitField (const char* Name, const Type* T, unsigned Offs, ** is controlled by `--signed-chars`. In bit-fields, however, we perform the same ** `char -> unsigned char` adjustment that is performed with other integral types. */ - CHECK ((Entry->Type->C & T_MASK_SIGN) == T_SIGN_SIGNED || - IsRankChar (Entry->Type)); - Entry->Type[0].C &= ~T_MASK_SIGN; - Entry->Type[0].C |= T_SIGN_UNSIGNED; - Entry->Type[1].C &= ~T_MASK_SIGN; - Entry->Type[1].C |= T_SIGN_UNSIGNED; + CHECK (IsSignSigned (T) || IsRankChar (T)); + Entry->Type = NewBitFieldOf (GetUnsignedType (T), BitOffs, BitWidth); + } else { + Entry->Type = NewBitFieldOf (T, BitOffs, BitWidth); } /* Add the entry to the symbol table */ From 45da20e770fbdd36f5cf313afc6f7e0102ba6d86 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 12 Oct 2022 13:13:37 +0800 Subject: [PATCH 1845/2710] Fixed CheckedSizeOf() for unknown-size types (no such use case yet though). --- src/cc65/datatype.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 37fe54023..2cfb964cc 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -315,7 +315,7 @@ unsigned CheckedSizeOf (const Type* T) { unsigned Size = SizeOf (T); if (Size == 0) { - if (HasUnknownSize (T + 1)) { + if (HasUnknownSize (T)) { Error ("Size of type '%s' is unknown", GetFullTypeName (T)); } else { Error ("Size of type '%s' is 0", GetFullTypeName (T)); From e57c409894ef877bb2d9e5c8cdb04a8f606dacc6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 12 Oct 2022 13:13:15 +0800 Subject: [PATCH 1846/2710] Fixed TypeHasAttrData(), GetSignedType() and GetUnsignedType(), none in use yet though. --- src/cc65/datatype.c | 16 +++++++++++++--- src/cc65/datatype.h | 2 ++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 2cfb964cc..3bcca53a9 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -63,6 +63,8 @@ const Type type_char[] = { TYPE(T_CHAR), TYPE(T_END) }; const Type type_schar[] = { TYPE(T_SCHAR), TYPE(T_END) }; const Type type_uchar[] = { TYPE(T_UCHAR), TYPE(T_END) }; +const Type type_short[] = { TYPE(T_SHORT), TYPE(T_END) }; +const Type type_ushort[] = { TYPE(T_USHORT), TYPE(T_END) }; const Type type_int[] = { TYPE(T_INT), TYPE(T_END) }; const Type type_uint[] = { TYPE(T_UINT), TYPE(T_END) }; const Type type_long[] = { TYPE(T_LONG), TYPE(T_END) }; @@ -727,8 +729,10 @@ const Type* GetSignedType (const Type* T) case T_RANK_CHAR: return type_schar; - case T_RANK_INT: case T_RANK_SHORT: + return type_short; + + case T_RANK_INT: return type_int; case T_RANK_LONG: @@ -749,8 +753,10 @@ const Type* GetUnsignedType (const Type* T) case T_RANK_CHAR: return type_uchar; - case T_RANK_INT: case T_RANK_SHORT: + return type_ushort; + + case T_RANK_INT: return type_uint; case T_RANK_LONG: @@ -979,7 +985,11 @@ int HasUnknownSize (const Type* T) int TypeHasAttrData (const Type* T) /* Return true if the given type has attribute data */ { - return IsClassStruct (T) || IsTypeArray (T) || IsClassFunc (T); + return IsClassStruct (T) || + IsTypeArray (T) || + IsClassFunc (T) || + IsTypeVoid (T) || + IsTypeBitField (T); } diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index eebd3abd8..9d7b5d49d 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -215,6 +215,8 @@ struct Type { extern const Type type_char[]; extern const Type type_schar[]; extern const Type type_uchar[]; +extern const Type type_short[]; +extern const Type type_ushort[]; extern const Type type_int[]; extern const Type type_uint[]; extern const Type type_long[]; From d52ef67d5195d36ff12d7248b035aaea3f51a147 Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Wed, 12 Oct 2022 10:28:14 +0300 Subject: [PATCH 1847/2710] Fix compilation after the postproc merge --- src/cc65/input.h | 3 +-- src/cc65/preproc.h | 12 +----------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/src/cc65/input.h b/src/cc65/input.h index f9565229b..f56f12462 100644 --- a/src/cc65/input.h +++ b/src/cc65/input.h @@ -41,6 +41,7 @@ #include <stdio.h> /* common */ +#include "coll.h" #include "strbuf.h" @@ -70,8 +71,6 @@ extern StrBuf* Line; extern char CurC; extern char NextC; -typedef struct Collection Collection; - /*****************************************************************************/ diff --git a/src/cc65/preproc.h b/src/cc65/preproc.h index a4619e545..153d0d68a 100644 --- a/src/cc65/preproc.h +++ b/src/cc65/preproc.h @@ -36,17 +36,7 @@ #ifndef PREPROC_H #define PREPROC_H - - -/*****************************************************************************/ -/* Forwards */ -/*****************************************************************************/ - - - -typedef struct Macro Macro; - - +#include "macrotab.h" /*****************************************************************************/ /* Data */ From 1e6279aee5c4b427fb935d42709dd8623bcd584a Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Wed, 12 Oct 2022 18:38:33 +0300 Subject: [PATCH 1848/2710] Clarify sprintf-test's output so it doesn't look like the entire test bench summary --- test/todo/sprintf-test.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/todo/sprintf-test.c b/test/todo/sprintf-test.c index bd5de44b4..ea50f418a 100644 --- a/test/todo/sprintf-test.c +++ b/test/todo/sprintf-test.c @@ -564,9 +564,9 @@ int main (void) /* Output the result */ if (Failures) { - printf ("%u tests, %u failures\n", Tests, Failures); + printf ("sprintf-test: %u tests, %u failures\n", Tests, Failures); } else { - printf ("%u tests: Ok\n", Tests); + printf ("sprintf-test: %u tests: Ok\n", Tests); } /* Wait for a key so we can read the result */ From 4540205b0d4ac2785f74369deebdcd80b3642259 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Thu, 13 Oct 2022 23:49:07 -0400 Subject: [PATCH 1849/2710] Emit warning for signed integer constant overflow --- src/cc65/expr.c | 16 +++++++++++----- src/cc65/expr.h | 2 +- src/cc65/shiftexpr.c | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index afb5e1960..8c042cc3c 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -193,12 +193,15 @@ static unsigned typeadjust (ExprDesc* lhs, const ExprDesc* rhs, int NoPush) -void LimitExprValue (ExprDesc* Expr) +void LimitExprValue (ExprDesc* Expr, int WarnOverflow) /* Limit the constant value of the expression to the range of its type */ { switch (GetUnderlyingTypeCode (Expr->Type)) { case T_INT: case T_SHORT: + if (WarnOverflow && ((Expr->IVal < -0x8000) || (Expr->IVal > 0x7FFF))) { + Warning ("Signed integer constant overflow"); + } Expr->IVal = (int16_t)Expr->IVal; break; @@ -218,6 +221,9 @@ void LimitExprValue (ExprDesc* Expr) break; case T_SCHAR: + if (WarnOverflow && ((Expr->IVal < -0x80) || (Expr->IVal > 0x7F))) { + Warning ("Signed character constant overflow"); + } Expr->IVal = (int8_t)Expr->IVal; break; @@ -1822,7 +1828,7 @@ static void UnaryOp (ExprDesc* Expr) Expr->Type = IntPromotion (Expr->Type); /* Limit the calculated value to the range of its type */ - LimitExprValue (Expr); + LimitExprValue (Expr, 1); } else { unsigned Flags; @@ -2162,7 +2168,7 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ } /* Limit the calculated value to the range of its type */ - LimitExprValue (Expr); + LimitExprValue (Expr, 1); } else if (lconst && (Gen->Flags & GEN_COMM) && !rconst) { /* If the LHS constant is an int that fits into an unsigned char, change the @@ -2789,7 +2795,7 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) Expr->Type = rhst; } else { /* Limit the calculated value to the range of its type */ - LimitExprValue (Expr); + LimitExprValue (Expr, 1); } /* The result is always an rvalue */ @@ -3260,7 +3266,7 @@ static void parsesub (ExprDesc* Expr) /* Just adjust the result type */ Expr->Type = ArithmeticConvert (Expr->Type, Expr2.Type); /* And limit the calculated value to the range of it */ - LimitExprValue (Expr); + LimitExprValue (Expr, 1); } /* The result is always an rvalue */ ED_MarkExprAsRVal (Expr); diff --git a/src/cc65/expr.h b/src/cc65/expr.h index abdf8ab0d..7c2f426d7 100644 --- a/src/cc65/expr.h +++ b/src/cc65/expr.h @@ -59,7 +59,7 @@ void MarkedExprWithCheck (void (*Func) (ExprDesc*), ExprDesc* Expr); ** generated code. */ -void LimitExprValue (ExprDesc* Expr); +void LimitExprValue (ExprDesc* Expr, int WarnOverflow); /* Limit the constant value of the expression to the range of its type */ void PushAddr (const ExprDesc* Expr); diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c index eb879a475..312086f3c 100644 --- a/src/cc65/shiftexpr.c +++ b/src/cc65/shiftexpr.c @@ -173,7 +173,7 @@ void ShiftExpr (struct ExprDesc* Expr) } /* Limit the calculated value to the range of its type */ - LimitExprValue (Expr); + LimitExprValue (Expr, 1); } /* Result is already got, remove the generated code */ From 66698d4b1a03dc7fbff8d1f99d1365a17fef56b6 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 14 Oct 2022 16:47:11 -0400 Subject: [PATCH 1850/2710] Rephrasing warnings for suspicious decimal integer constants --- src/cc65/scanner.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 66ce6906e..36fd1301b 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -643,7 +643,7 @@ static void NumericConst (void) if (IVal <= 0xFFFF && (Types & IT_UINT) == 0 && (WarnTypes & IT_LONG) != 0) { - Warning ("Integer constant is long"); + Warning ("Integer constant implies signed long"); } } if (IVal > 0xFFFF) { @@ -660,7 +660,7 @@ static void NumericConst (void) ** a preceding unary op or when it is used in constant calculation. */ if (WarnTypes & IT_ULONG) { - Warning ("Integer constant is unsigned long"); + Warning ("Integer constant implies unsigned long"); } } From b052e64089f0f1b5d5462a17b480bcefbca46f38 Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Mon, 17 Oct 2022 13:32:38 +0300 Subject: [PATCH 1851/2710] Speed up sim65 by 10% --- src/sim65/memory.c | 10 +--------- src/sim65/memory.h | 11 ++++++++++- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/sim65/memory.c b/src/sim65/memory.c index 11f0be55a..68e7bb93b 100644 --- a/src/sim65/memory.c +++ b/src/sim65/memory.c @@ -46,7 +46,7 @@ /* THE memory */ -static unsigned char Mem[0x10000]; +unsigned char Mem[0x10000]; @@ -73,14 +73,6 @@ void MemWriteWord (unsigned Addr, unsigned Val) -unsigned char MemReadByte (unsigned Addr) -/* Read a byte from a memory location */ -{ - return Mem[Addr]; -} - - - unsigned MemReadWord (unsigned Addr) /* Read a word from a memory location */ { diff --git a/src/sim65/memory.h b/src/sim65/memory.h index 41cc800d3..cef786aaa 100644 --- a/src/sim65/memory.h +++ b/src/sim65/memory.h @@ -36,7 +36,9 @@ #ifndef MEMORY_H #define MEMORY_H +#include "inline.h" +extern unsigned char Mem[0x10000]; /*****************************************************************************/ /* Code */ @@ -50,8 +52,15 @@ void MemWriteByte (unsigned Addr, unsigned char Val); void MemWriteWord (unsigned Addr, unsigned Val); /* Write a word to a memory location */ -unsigned char MemReadByte (unsigned Addr); +#if defined(HAVE_INLINE) +INLINE unsigned char MemReadByte (unsigned Addr) /* Read a byte from a memory location */ +{ + return Mem[Addr]; +} +#else +#define MemReadByte(Addr) Mem[Addr] +#endif unsigned MemReadWord (unsigned Addr); /* Read a word from a memory location */ From 03ceeb4ad14fde60594b66e40265caaae9583fad Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 22 Oct 2022 12:45:51 +0800 Subject: [PATCH 1852/2710] Removed warning on implicit "return 0" in C99 standard main function in default cc65 mode. --- src/cc65/function.c | 53 +++++++++++++++---------------- test/ref/custom-reference-error.c | 8 ++--- test/ref/custom-reference.c | 1 - test/ref/custom-reference.cref | 4 +-- 4 files changed, 31 insertions(+), 35 deletions(-) diff --git a/src/cc65/function.c b/src/cc65/function.c index 06800b133..4b4060f2a 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -518,11 +518,21 @@ void NewFunc (SymEntry* Func, FuncDesc* D) Error ("'main' cannot be declared as __fastcall__"); } - /* If cc65 extensions aren't enabled, don't allow a main function that - ** doesn't return an int. - */ - if (IS_Get (&Standard) != STD_CC65 && ReturnType[0].C != T_INT) { - Error ("'main' must always return an int"); + /* Check return type */ + if (GetUnqualRawTypeCode (ReturnType) == T_INT) { + /* Determine if this is a main function in a C99 environment that + ** returns an int. + */ + if (IS_Get (&Standard) >= STD_C99) { + C99MainFunc = 1; + } + } else { + /* If cc65 extensions aren't enabled, don't allow a main function + ** that doesn't return an int. + */ + if (IS_Get (&Standard) != STD_CC65) { + Error ("'main' must always return an int"); + } } /* Add a forced import of a symbol that is contained in the startup @@ -540,14 +550,6 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* The start-up code doesn't fast-call main(). */ Func->Type->C |= T_QUAL_CDECL; } - - /* Determine if this is a main function in a C99 environment that - ** returns an int. - */ - if (GetUnqualRawTypeCode (ReturnType) == T_INT && - IS_Get (&Standard) == STD_C99) { - C99MainFunc = 1; - } } /* Allocate code and data segments for this function */ @@ -652,21 +654,16 @@ void NewFunc (SymEntry* Func, FuncDesc* D) AnyStatement (0); } - /* If this is not a void function, and not the main function in a C99 - ** environment returning int, output a warning if we didn't see a return - ** statement. - */ - if (!F_HasVoidReturn (CurrentFunc) && !F_HasReturn (CurrentFunc) && !C99MainFunc && IS_Get (&WarnReturnType)) { - Warning ("Control reaches end of non-void function [-Wreturn-type]"); - } - - /* If this is the main function in a C99 environment returning an int, let - ** it always return zero. Note: Actual return statements jump to the return - ** label defined below. - ** The code is removed by the optimizer if unused. - */ - if (C99MainFunc) { - g_getimmed (CF_INT | CF_CONST, 0, 0); + /* Check if this function is missing a return value */ + if (!F_HasVoidReturn (CurrentFunc) && !F_HasReturn (CurrentFunc)) { + /* If this is the main function in a C99 environment returning an int, + ** let it always return zero. Otherwise output a warning. + */ + if (C99MainFunc) { + g_getimmed (CF_INT | CF_CONST, 0, 0); + } else if (IS_Get (&WarnReturnType)) { + Warning ("Control reaches end of non-void function [-Wreturn-type]"); + } } /* Output the function exit code label */ diff --git a/test/ref/custom-reference-error.c b/test/ref/custom-reference-error.c index c86a8b9e9..857145fc0 100644 --- a/test/ref/custom-reference-error.c +++ b/test/ref/custom-reference-error.c @@ -13,9 +13,9 @@ and then "make" again to confirm */ -int main(int argc, char* argv[]) +short main(int argc, char* argv[]) { - printf("%02x", 0x42); - n = 0; /* produce an error */ - /* another error */ + printf("%02x", 0x42); /* produce an error */ + n = 0; /* produce an error */ + /* produce a warning */ } diff --git a/test/ref/custom-reference.c b/test/ref/custom-reference.c index 5d9c356df..b48f8eb78 100644 --- a/test/ref/custom-reference.c +++ b/test/ref/custom-reference.c @@ -20,5 +20,4 @@ int main(int argc, char* argv[]) { printf("%02x", 0x42); /* produce a warning */ - return 0; } diff --git a/test/ref/custom-reference.cref b/test/ref/custom-reference.cref index 4dba6009b..868710849 100644 --- a/test/ref/custom-reference.cref +++ b/test/ref/custom-reference.cref @@ -1,2 +1,2 @@ -custom-reference.c:24: Warning: Parameter 'argc' is never used -custom-reference.c:24: Warning: Parameter 'argv' is never used +custom-reference.c:23: Warning: Parameter 'argc' is never used +custom-reference.c:23: Warning: Parameter 'argv' is never used From b81e54c1d2fc784eb33c522f34fe970957cb7975 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 24 Oct 2022 14:55:39 +0800 Subject: [PATCH 1853/2710] Organized ExprDesc functions and fixed several comments. --- src/cc65/exprdesc.c | 405 +++++++++++++++++++++++--------------------- src/cc65/exprdesc.h | 312 +++++++++++++++++++--------------- 2 files changed, 387 insertions(+), 330 deletions(-) diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index 3d7b7c384..5924ab6cf 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -67,75 +67,9 @@ ExprDesc* ED_Init (ExprDesc* Expr) -#if !defined(HAVE_INLINE) -int ED_IsLocQuasiConst (const ExprDesc* Expr) -/* Return true if the expression is a constant location of some sort or on the -** stack. -*/ -{ - return ED_IsLocConst (Expr) || ED_IsLocStack (Expr); -} -#endif - - - -#if !defined(HAVE_INLINE) -int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr) -/* Return true if the expression is E_LOC_PRIMARY or E_LOC_EXPR */ -{ - return ED_IsLocPrimary (Expr) || ED_IsLocExpr (Expr); -} -#endif - - - -#if !defined(HAVE_INLINE) -int ED_IsIndExpr (const ExprDesc* Expr) -/* Check if the expression is a reference to its value */ -{ - return (Expr->Flags & E_ADDRESS_OF) == 0 && - !ED_IsLocNone (Expr) && !ED_IsLocPrimary (Expr); -} -#endif - - - -int ED_YetToLoad (const ExprDesc* Expr) -/* Check if the expression needs to be loaded somehow. */ -{ - return ED_NeedsPrimary (Expr) || - ED_YetToTest (Expr) || - (ED_IsLVal (Expr) && IsQualVolatile (Expr->Type)); -} - - - -void ED_MarkForUneval (ExprDesc* Expr) -/* Mark the expression as not to be evaluated */ -{ - Expr->Flags = (Expr->Flags & ~E_MASK_EVAL) | E_EVAL_UNEVAL; -} - - - -void ED_SetCodeRange (ExprDesc* Expr, const CodeMark* Start, const CodeMark* End) -/* Set the code range for this expression */ -{ - Expr->Flags |= E_HAVE_MARKS; - Expr->Start = *Start; - Expr->End = *End; -} - - - -int ED_CodeRangeIsEmpty (const ExprDesc* Expr) -/* Return true if no code was output for this expression */ -{ - /* We must have code marks */ - PRECONDITION (Expr->Flags & E_HAVE_MARKS); - - return CodeRangeIsEmpty (&Expr->Start, &Expr->End); -} +/*****************************************************************************/ +/* Info Extraction */ +/*****************************************************************************/ @@ -215,6 +149,190 @@ int ED_GetStackOffs (const ExprDesc* Expr, int Offs) +/*****************************************************************************/ +/* Predicates */ +/*****************************************************************************/ + + + +#if !defined(HAVE_INLINE) +int ED_IsLocQuasiConst (const ExprDesc* Expr) +/* Return true if the expression is a constant location of some sort or on the +** stack. +*/ +{ + return ED_IsLocConst (Expr) || ED_IsLocStack (Expr); +} +#endif + + + +#if !defined(HAVE_INLINE) +int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr) +/* Return true if the expression is E_LOC_PRIMARY or E_LOC_EXPR */ +{ + return ED_IsLocPrimary (Expr) || ED_IsLocExpr (Expr); +} +#endif + + + +#if !defined(HAVE_INLINE) +int ED_IsIndExpr (const ExprDesc* Expr) +/* Check if the expression is a reference to its value */ +{ + return (Expr->Flags & E_ADDRESS_OF) == 0 && + !ED_IsLocNone (Expr) && !ED_IsLocPrimary (Expr); +} +#endif + + + +int ED_YetToLoad (const ExprDesc* Expr) +/* Check if the expression needs to be loaded somehow. */ +{ + return ED_NeedsPrimary (Expr) || + ED_YetToTest (Expr) || + (ED_IsLVal (Expr) && IsQualVolatile (Expr->Type)); +} + + + +#if !defined(HAVE_INLINE) +int ED_IsAbs (const ExprDesc* Expr) +/* Return true if the expression denotes a numeric value or address. */ +{ + return (Expr->Flags & (E_MASK_LOC)) == (E_LOC_NONE) || + (Expr->Flags & (E_MASK_LOC|E_ADDRESS_OF)) == (E_LOC_ABS|E_ADDRESS_OF); +} +#endif + + + +#if !defined(HAVE_INLINE) +int ED_IsConstAbs (const ExprDesc* Expr) +/* Return true if the expression denotes a constant absolute value. This can be +** a numeric constant, cast to any type. +*/ +{ + return ED_IsRVal (Expr) && ED_IsAbs (Expr); +} +#endif + + + +int ED_IsConstAbsInt (const ExprDesc* Expr) +/* Return true if the expression is a constant (numeric) integer. */ +{ + return ED_IsConstAbs (Expr) && IsClassInt (Expr->Type); +} + + + +int ED_IsConstBool (const ExprDesc* Expr) +/* Return true if the expression can be constantly evaluated as a boolean. */ +{ + return ED_IsConstAbsInt (Expr) || ED_IsAddrExpr (Expr); +} + + + +int ED_IsConstTrue (const ExprDesc* Expr) +/* Return true if the constant expression can be evaluated as boolean true at +** compile time. +*/ +{ + /* Non-zero arithmetics and objects addresses are boolean true */ + return (ED_IsConstAbsInt (Expr) && Expr->IVal != 0) || + (ED_IsAddrExpr (Expr)); +} + + + +int ED_IsConstFalse (const ExprDesc* Expr) +/* Return true if the constant expression can be evaluated as boolean false at +** compile time. +*/ +{ + /* Zero arithmetics and null pointers are boolean false */ + return (ED_IsConstAbsInt (Expr) && Expr->IVal == 0) || + ED_IsNullPtr (Expr); +} + + + +int ED_IsConst (const ExprDesc* Expr) +/* Return true if the expression denotes a constant of some sort. This can be a +** numeric constant, the address of a global variable (maybe with offset) or +** similar. +*/ +{ + return (Expr->Flags & E_MASK_LOC) == E_LOC_NONE || ED_IsConstAddr (Expr); +} + + + +int ED_IsQuasiConst (const ExprDesc* Expr) +/* Return true if the expression denotes a quasi-constant of some sort. This +** can be a numeric constant, a constant address or a stack variable address. +*/ +{ + return (Expr->Flags & E_MASK_LOC) == E_LOC_NONE || ED_IsQuasiConstAddr (Expr); +} + + + +int ED_IsConstAddr (const ExprDesc* Expr) +/* Return true if the expression denotes a constant address of some sort. This +** can be the address of a global variable (maybe with offset) or similar. +*/ +{ + return ED_IsAddrExpr (Expr) && ED_IsLocConst (Expr); +} + + + +int ED_IsQuasiConstAddr (const ExprDesc* Expr) +/* Return true if the expression denotes a quasi-constant address of some sort. +** This can be a constant address or a stack variable address. +*/ +{ + return ED_IsAddrExpr (Expr) && ED_IsLocQuasiConst (Expr); +} + + + +int ED_IsNullPtr (const ExprDesc* Expr) +/* Return true if the given expression is a NULL pointer constant */ +{ + return (Expr->Flags & (E_MASK_LOC|E_MASK_RTYPE)) == + (E_LOC_NONE|E_RTYPE_RVAL) && + Expr->IVal == 0 && + IsClassInt (Expr->Type); +} + + + +int ED_IsBool (const ExprDesc* Expr) +/* Return true if the expression can be treated as a boolean, that is, it can +** be an operand to a compare operation. +*/ +{ + /* Either ints, floats, or pointers can be used in a boolean context */ + return IsClassInt (Expr->Type) || + IsClassFloat (Expr->Type) || + IsClassPtr (Expr->Type) || + IsClassFunc (Expr->Type); +} + + + +/*****************************************************************************/ +/* Manipulation */ +/*****************************************************************************/ + + + ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, const Type* Type) /* Replace Expr with an absolute const with the given value and type */ { @@ -331,7 +449,7 @@ ExprDesc* ED_IndExpr (ExprDesc* Expr) ** original address. We simply mark this as E_LOC_EXPR so that ** some info about the original location can be retained. ** If it's really meant to dereference a "pointer value", it - ** should be done in two steps where the pointervalue should + ** should be done in two steps where the pointer value should ** be the manually loaded first before a call into this, and ** the offset should be manually cleared somewhere outside. */ @@ -345,131 +463,27 @@ ExprDesc* ED_IndExpr (ExprDesc* Expr) -#if !defined(HAVE_INLINE) -int ED_IsAbs (const ExprDesc* Expr) -/* Return true if the expression denotes a numeric value or address. */ +void ED_MarkForUneval (ExprDesc* Expr) +/* Mark the expression as not to be evaluated */ { - return (Expr->Flags & (E_MASK_LOC)) == (E_LOC_NONE) || - (Expr->Flags & (E_MASK_LOC|E_ADDRESS_OF)) == (E_LOC_ABS|E_ADDRESS_OF); -} -#endif - - - -#if !defined(HAVE_INLINE) -int ED_IsConstAbs (const ExprDesc* Expr) -/* Return true if the expression denotes a constant absolute value. This can be -** a numeric constant, cast to any type. -*/ -{ - return ED_IsRVal (Expr) && ED_IsAbs (Expr); -} -#endif - - - -int ED_IsConstAbsInt (const ExprDesc* Expr) -/* Return true if the expression is a constant (numeric) integer. */ -{ - return ED_IsConstAbs (Expr) && IsClassInt (Expr->Type); + Expr->Flags = (Expr->Flags & ~E_MASK_EVAL) | E_EVAL_UNEVAL; } -int ED_IsConstBool (const ExprDesc* Expr) -/* Return true if the expression can be constantly evaluated as a boolean. */ +const Type* ReplaceType (ExprDesc* Expr, const Type* NewType) +/* Replace the type of Expr by a copy of Newtype and return the old type string */ { - return ED_IsConstAbsInt (Expr) || ED_IsAddrExpr (Expr); + const Type* OldType = Expr->Type; + Expr->Type = TypeDup (NewType); + return OldType; } -int ED_IsConstTrue (const ExprDesc* Expr) -/* Return true if the constant expression can be evaluated as boolean true at -** compile time. -*/ -{ - /* Non-zero arithmetics and objects addresses are boolean true */ - return (ED_IsConstAbsInt (Expr) && Expr->IVal != 0) || - (ED_IsAddrExpr (Expr)); -} - - - -int ED_IsConstFalse (const ExprDesc* Expr) -/* Return true if the constant expression can be evaluated as boolean false at -** compile time. -*/ -{ - /* Zero arithmetics and null pointers are boolean false */ - return (ED_IsConstAbsInt (Expr) && Expr->IVal == 0) || - ED_IsNullPtr (Expr); -} - - - -int ED_IsConst (const ExprDesc* Expr) -/* Return true if the expression denotes a constant of some sort. This can be a -** numeric constant, the address of a global variable (maybe with offset) or -** similar. -*/ -{ - return (Expr->Flags & E_MASK_LOC) == E_LOC_NONE || ED_IsConstAddr (Expr); -} - - - -int ED_IsQuasiConst (const ExprDesc* Expr) -/* Return true if the expression denotes a quasi-constant of some sort. This -** can be a numeric constant, a constant address or a stack variable address. -*/ -{ - return (Expr->Flags & E_MASK_LOC) == E_LOC_NONE || ED_IsQuasiConstAddr (Expr); -} - - -int ED_IsConstAddr (const ExprDesc* Expr) -/* Return true if the expression denotes a constant address of some sort. This -** can be the address of a global variable (maybe with offset) or similar. -*/ -{ - return ED_IsAddrExpr (Expr) && ED_IsLocConst (Expr); -} - - - -int ED_IsQuasiConstAddr (const ExprDesc* Expr) -/* Return true if the expression denotes a quasi-constant address of some sort. -** This can be a constant address or a stack variable address. -*/ -{ - return ED_IsAddrExpr (Expr) && ED_IsLocQuasiConst (Expr); -} - - - -int ED_IsNullPtr (const ExprDesc* Expr) -/* Return true if the given expression is a NULL pointer constant */ -{ - return (Expr->Flags & (E_MASK_LOC|E_MASK_RTYPE)) == - (E_LOC_NONE|E_RTYPE_RVAL) && - Expr->IVal == 0 && - IsClassInt (Expr->Type); -} - - - -int ED_IsBool (const ExprDesc* Expr) -/* Return true if the expression can be treated as a boolean, that is, it can -** be an operand to a compare operation. -*/ -{ - /* Either ints, floats, or pointers can be used in a boolean context */ - return IsClassInt (Expr->Type) || - IsClassFloat (Expr->Type) || - IsClassPtr (Expr->Type) || - IsClassFunc (Expr->Type); -} +/*****************************************************************************/ +/* Other Helpers */ +/*****************************************************************************/ @@ -577,10 +591,21 @@ void PrintExprDesc (FILE* F, ExprDesc* E) -const Type* ReplaceType (ExprDesc* Expr, const Type* NewType) -/* Replace the type of Expr by a copy of Newtype and return the old type string */ +void ED_SetCodeRange (ExprDesc* Expr, const CodeMark* Start, const CodeMark* End) +/* Set the code range for this expression */ { - const Type* OldType = Expr->Type; - Expr->Type = TypeDup (NewType); - return OldType; + Expr->Flags |= E_HAVE_MARKS; + Expr->Start = *Start; + Expr->End = *End; +} + + + +int ED_CodeRangeIsEmpty (const ExprDesc* Expr) +/* Return true if no code was output for this expression */ +{ + /* We must have code marks */ + PRECONDITION (Expr->Flags & E_HAVE_MARKS); + + return CodeRangeIsEmpty (&Expr->Start, &Expr->End); } diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index f1f121cc4..2ef8b617f 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -227,6 +227,14 @@ struct ExprDesc { ExprDesc* ED_Init (ExprDesc* Expr); /* Initialize an ExprDesc */ + + +/*****************************************************************************/ +/* Info Extraction */ +/*****************************************************************************/ + + + #if defined(HAVE_INLINE) INLINE int ED_GetLoc (const ExprDesc* Expr) /* Return the location flags from the expression */ @@ -237,6 +245,35 @@ INLINE int ED_GetLoc (const ExprDesc* Expr) # define ED_GetLoc(Expr) ((Expr)->Flags & E_MASK_LOC) #endif +#if defined(HAVE_INLINE) +INLINE int ED_GetNeeds (const ExprDesc* Expr) +/* Get flags about what the expression needs. */ +{ + return (Expr->Flags & E_MASK_NEED); +} +#else +# define ED_GetNeeds(Expr) ((Expr)->Flags & E_MASK_NEED) +#endif + +const char* ED_GetLabelName (const ExprDesc* Expr, long Offs); +/* Return the assembler label name of the given expression. Beware: This +** function may use a static buffer, so the name may get "lost" on the second +** call to the function. +*/ + +int ED_GetStackOffs (const ExprDesc* Expr, int Offs); +/* Get the stack offset of an address on the stack in Expr taking into account +** an additional offset in Offs. +*/ + + + +/*****************************************************************************/ +/* Predicates */ +/*****************************************************************************/ + + + #if defined(HAVE_INLINE) INLINE int ED_IsLocNone (const ExprDesc* Expr) /* Return true if the expression is an absolute value */ @@ -279,7 +316,7 @@ INLINE int ED_IsLocStack (const ExprDesc* Expr) #if defined(HAVE_INLINE) INLINE int ED_IsLocPrimary (const ExprDesc* Expr) -/* Return true if the expression is an expression in the register pseudo variable */ +/* Return true if the expression is an expression in the primary */ { return (Expr->Flags & E_MASK_LOC) == E_LOC_PRIMARY; } @@ -289,7 +326,7 @@ INLINE int ED_IsLocPrimary (const ExprDesc* Expr) #if defined(HAVE_INLINE) INLINE int ED_IsLocExpr (const ExprDesc* Expr) -/* Return true if the expression is an expression in the primary */ +/* Return true if the expression is an expression referenced in the primary */ { return (Expr->Flags & E_MASK_LOC) == E_LOC_EXPR; } @@ -333,33 +370,14 @@ int ED_IsLocQuasiConst (const ExprDesc* Expr); #endif #if defined(HAVE_INLINE) -INLINE void ED_RequireTest (ExprDesc* Expr) -/* Mark the expression for a test. */ +INLINE int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr) +/* Return true if the expression is E_LOC_PRIMARY or E_LOC_EXPR */ { - Expr->Flags |= E_NEED_TEST; + return ED_IsLocPrimary (Expr) || ED_IsLocExpr (Expr); } #else -# define ED_RequireTest(Expr) do { (Expr)->Flags |= E_NEED_TEST; } while (0) -#endif - -#if defined(HAVE_INLINE) -INLINE void ED_RequireNoTest (ExprDesc* Expr) -/* Mark the expression not for a test. */ -{ - Expr->Flags &= ~E_NEED_TEST; -} -#else -# define ED_RequireNoTest(Expr) do { (Expr)->Flags &= ~E_NEED_TEST; } while (0) -#endif - -#if defined(HAVE_INLINE) -INLINE int ED_GetNeeds (const ExprDesc* Expr) -/* Get flags about what the expression needs. */ -{ - return (Expr->Flags & E_MASK_NEED); -} -#else -# define ED_GetNeeds(Expr) ((Expr)->Flags & E_MASK_NEED) +int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr); +/* Return true if the expression is E_LOC_PRIMARY or E_LOC_EXPR */ #endif #if defined(HAVE_INLINE) @@ -382,27 +400,6 @@ INLINE int ED_NeedsTest (const ExprDesc* Expr) # define ED_NeedsTest(Expr) (((Expr)->Flags & E_NEED_TEST) != 0) #endif -#if defined(HAVE_INLINE) -INLINE int ED_YetToTest (const ExprDesc* Expr) -/* Check if the expression needs to be tested but not yet. */ -{ - return ((Expr)->Flags & (E_NEED_TEST | E_CC_SET)) == E_NEED_TEST; -} -#else -# define ED_YetToTest(Expr) (((Expr)->Flags & (E_NEED_TEST | E_CC_SET)) == E_NEED_TEST) -#endif - -#if defined(HAVE_INLINE) -INLINE void ED_TestDone (ExprDesc* Expr) -/* Mark the expression as tested and condition codes set. */ -{ - Expr->Flags |= E_CC_SET; -} -#else -# define ED_TestDone(Expr) \ - do { (Expr)->Flags |= E_CC_SET; } while (0) -#endif - #if defined(HAVE_INLINE) INLINE int ED_IsTested (const ExprDesc* Expr) /* Check if the expression has set the condition codes. */ @@ -414,13 +411,13 @@ INLINE int ED_IsTested (const ExprDesc* Expr) #endif #if defined(HAVE_INLINE) -INLINE void ED_MarkAsUntested (ExprDesc* Expr) -/* Mark the expression as not tested (condition codes not set). */ +INLINE int ED_YetToTest (const ExprDesc* Expr) +/* Check if the expression needs to be tested but not yet. */ { - Expr->Flags &= ~E_CC_SET; + return ((Expr)->Flags & (E_NEED_TEST | E_CC_SET)) == E_NEED_TEST; } #else -# define ED_MarkAsUntested(Expr) do { (Expr)->Flags &= ~E_CC_SET; } while (0) +# define ED_YetToTest(Expr) (((Expr)->Flags & (E_NEED_TEST | E_CC_SET)) == E_NEED_TEST) #endif #if defined(HAVE_INLINE) @@ -448,9 +445,6 @@ INLINE int ED_NeedsConst (const ExprDesc* Expr) # define ED_NeedsConst(Expr) (((Expr)->Flags & E_EVAL_IMMUTABLE_RESULT) == E_EVAL_IMMUTABLE_RESULT) #endif -void ED_MarkForUneval (ExprDesc* Expr); -/* Mark the expression as not to be evaluated */ - #if defined(HAVE_INLINE) INLINE int ED_IsUneval (const ExprDesc* Expr) /* Check if the expression is not to be evaluated */ @@ -471,27 +465,6 @@ INLINE int ED_MayHaveNoEffect (const ExprDesc* Expr) # define ED_MayHaveNoEffect(Expr) (((Expr)->Flags & E_EVAL_MAYBE_UNUSED) == E_EVAL_MAYBE_UNUSED) #endif -#if defined(HAVE_INLINE) -INLINE void ED_PropagateFrom (ExprDesc* Expr, const ExprDesc* SubExpr) -/* Propagate viral flags from subexpression */ -{ - Expr->Flags |= SubExpr->Flags & E_MASK_VIRAL; -} -#else -# define ED_PropagateFrom(Expr, SubExpr) (void)((Expr)->Flags |= (SubExpr)->Flags & E_MASK_VIRAL) -#endif - -#if defined(HAVE_INLINE) -INLINE int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr) -/* Return true if the expression is E_LOC_PRIMARY or E_LOC_EXPR */ -{ - return ED_IsLocPrimary (Expr) || ED_IsLocExpr (Expr); -} -#else -int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr); -/* Return true if the expression is E_LOC_PRIMARY or E_LOC_EXPR */ -#endif - #if defined(HAVE_INLINE) INLINE int ED_IsAddrExpr (const ExprDesc* Expr) /* Check if the expression is taken address of instead of its value. @@ -515,35 +488,6 @@ int ED_IsIndExpr (const ExprDesc* Expr); /* Check if the expression is a reference to its value */ #endif -void ED_SetCodeRange (ExprDesc* Expr, const CodeMark* Start, const CodeMark* End); -/* Set the code range for this expression */ - -int ED_CodeRangeIsEmpty (const ExprDesc* Expr); -/* Return true if no code was output for this expression */ - -const char* ED_GetLabelName (const ExprDesc* Expr, long Offs); -/* Return the assembler label name of the given expression. Beware: This -** function may use a static buffer, so the name may get "lost" on the second -** call to the function. -*/ - -int ED_GetStackOffs (const ExprDesc* Expr, int Offs); -/* Get the stack offset of an address on the stack in Expr taking into account -** an additional offset in Offs. -*/ - -ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, const Type* Type); -/* Replace Expr with an absolute const with the given value and type */ - -ExprDesc* ED_MakeConstAbsInt (ExprDesc* Expr, long Value); -/* Replace Expr with an constant integer with the given value */ - -ExprDesc* ED_MakeConstBool (ExprDesc* Expr, long Value); -/* Replace Expr with a constant boolean expression with the given value */ - -ExprDesc* ED_FinalizeRValLoad (ExprDesc* Expr); -/* Finalize the result of LoadExpr to be an rvalue in the primary register */ - #if defined(HAVE_INLINE) INLINE int ED_IsLVal (const ExprDesc* Expr) /* Return true if the expression is a reference */ @@ -564,40 +508,6 @@ INLINE int ED_IsRVal (const ExprDesc* Expr) # define ED_IsRVal(Expr) (((Expr)->Flags & E_MASK_RTYPE) == E_RTYPE_RVAL) #endif -#if defined(HAVE_INLINE) -INLINE void ED_MarkExprAsLVal (ExprDesc* Expr) -/* Mark the expression as an lvalue. -** HINT: Consider using ED_IndExpr instead of this, unless you know what -** consequence there will be, as there are both a big part in the code -** assuming rvalue = const and a big part assuming rvalue = address. -*/ -{ - Expr->Flags |= E_RTYPE_LVAL; -} -#else -# define ED_MarkExprAsLVal(Expr) do { (Expr)->Flags |= E_RTYPE_LVAL; } while (0) -#endif - -#if defined(HAVE_INLINE) -INLINE void ED_MarkExprAsRVal (ExprDesc* Expr) -/* Mark the expression as an rvalue. -** HINT: Consider using ED_AddrExpr instead of this, unless you know what -** consequence there will be, as there are both a big part in the code -** assuming rvalue = const and a big part assuming rvalue = address. -*/ -{ - Expr->Flags &= ~E_RTYPE_LVAL; -} -#else -# define ED_MarkExprAsRVal(Expr) do { (Expr)->Flags &= ~E_RTYPE_LVAL; } while (0) -#endif - -ExprDesc* ED_AddrExpr (ExprDesc* Expr); -/* Take address of Expr */ - -ExprDesc* ED_IndExpr (ExprDesc* Expr); -/* Dereference Expr */ - #if defined(HAVE_INLINE) INLINE int ED_IsAbs (const ExprDesc* Expr) /* Return true if the expression denotes a numeric value or address. */ @@ -670,14 +580,136 @@ int ED_IsBool (const ExprDesc* Expr); ** be an operand to a compare operation with 0/NULL. */ -void PrintExprDesc (FILE* F, ExprDesc* Expr); -/* Print an ExprDesc */ + + +/*****************************************************************************/ +/* Manipulation */ +/*****************************************************************************/ + + + +ExprDesc* ED_MakeConstAbs (ExprDesc* Expr, long Value, const Type* Type); +/* Replace Expr with an absolute const with the given value and type */ + +ExprDesc* ED_MakeConstAbsInt (ExprDesc* Expr, long Value); +/* Replace Expr with an constant integer with the given value */ + +ExprDesc* ED_MakeConstBool (ExprDesc* Expr, long Value); +/* Replace Expr with a constant boolean expression with the given value */ + +ExprDesc* ED_FinalizeRValLoad (ExprDesc* Expr); +/* Finalize the result of LoadExpr to be an rvalue in the primary register */ + +#if defined(HAVE_INLINE) +INLINE void ED_MarkExprAsLVal (ExprDesc* Expr) +/* Mark the expression as an lvalue. +** HINT: Consider using ED_IndExpr instead of this, unless you know what +** consequence there will be, as there are both a big part in the code +** assuming rvalue = const and a big part assuming rvalue = address. +*/ +{ + Expr->Flags |= E_RTYPE_LVAL; +} +#else +# define ED_MarkExprAsLVal(Expr) do { (Expr)->Flags |= E_RTYPE_LVAL; } while (0) +#endif + +#if defined(HAVE_INLINE) +INLINE void ED_MarkExprAsRVal (ExprDesc* Expr) +/* Mark the expression as an rvalue. +** HINT: Consider using ED_AddrExpr instead of this, unless you know what +** consequence there will be, as there are both a big part in the code +** assuming rvalue = const and a big part assuming rvalue = address. +*/ +{ + Expr->Flags &= ~E_RTYPE_LVAL; +} +#else +# define ED_MarkExprAsRVal(Expr) do { (Expr)->Flags &= ~E_RTYPE_LVAL; } while (0) +#endif + +ExprDesc* ED_AddrExpr (ExprDesc* Expr); +/* Take address of Expr */ + +ExprDesc* ED_IndExpr (ExprDesc* Expr); +/* Dereference Expr */ + +#if defined(HAVE_INLINE) +INLINE void ED_RequireTest (ExprDesc* Expr) +/* Mark the expression for a test. */ +{ + Expr->Flags |= E_NEED_TEST; +} +#else +# define ED_RequireTest(Expr) do { (Expr)->Flags |= E_NEED_TEST; } while (0) +#endif + +#if defined(HAVE_INLINE) +INLINE void ED_RequireNoTest (ExprDesc* Expr) +/* Mark the expression not for a test. */ +{ + Expr->Flags &= ~E_NEED_TEST; +} +#else +# define ED_RequireNoTest(Expr) do { (Expr)->Flags &= ~E_NEED_TEST; } while (0) +#endif + +#if defined(HAVE_INLINE) +INLINE void ED_TestDone (ExprDesc* Expr) +/* Mark the expression as tested and condition codes set. */ +{ + Expr->Flags |= E_CC_SET; +} +#else +# define ED_TestDone(Expr) \ + do { (Expr)->Flags |= E_CC_SET; } while (0) +#endif + +#if defined(HAVE_INLINE) +INLINE void ED_MarkAsUntested (ExprDesc* Expr) +/* Mark the expression as not tested (condition codes not set). */ +{ + Expr->Flags &= ~E_CC_SET; +} +#else +# define ED_MarkAsUntested(Expr) do { (Expr)->Flags &= ~E_CC_SET; } while (0) +#endif + +void ED_MarkForUneval (ExprDesc* Expr); +/* Mark the expression as not to be evaluated */ + +#if defined(HAVE_INLINE) +INLINE void ED_PropagateFrom (ExprDesc* Expr, const ExprDesc* SubExpr) +/* Propagate viral flags from subexpression */ +{ + Expr->Flags |= SubExpr->Flags & E_MASK_VIRAL; +} +#else +# define ED_PropagateFrom(Expr, SubExpr) (void)((Expr)->Flags |= (SubExpr)->Flags & E_MASK_VIRAL) +#endif const Type* ReplaceType (ExprDesc* Expr, const Type* NewType); /* Replace the type of Expr by a copy of Newtype and return the old type string */ +/*****************************************************************************/ +/* Other Helpers */ +/*****************************************************************************/ + + + +void PrintExprDesc (FILE* F, ExprDesc* Expr); +/* Print an ExprDesc */ + +void ED_SetCodeRange (ExprDesc* Expr, const CodeMark* Start, const CodeMark* End); +/* Set the code range for this expression */ + +int ED_CodeRangeIsEmpty (const ExprDesc* Expr); +/* Return true if no code was output for this expression */ + + + /* End of exprdesc.h */ #endif From c95c9c27496ba0302203f29ec5597c491dddf543 Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Thu, 27 Oct 2022 18:19:44 +0300 Subject: [PATCH 1854/2710] Allow specifying range end as a size --- doc/da65.sgml | 3 ++- src/da65/infofile.c | 16 +++++++++++++--- src/da65/scanner.c | 8 ++++++++ src/da65/scanner.h | 1 + 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/doc/da65.sgml b/doc/da65.sgml index bf074a667..185dbe0e6 100644 --- a/doc/da65.sgml +++ b/doc/da65.sgml @@ -461,7 +461,8 @@ following attributes are recognized: <tag><tt>END</tt></tag> This gives the end address of the range. The end address is inclusive, that means, it is part of the range. Of course, it may not be smaller than the - start address. + start address. Optionally, the end may be given as a decimal offset instead + of an absolute address, "+3", to specify it as a size. <tag><tt>NAME</tt></tag> This is a convenience attribute. It takes a string argument and will cause diff --git a/src/da65/infofile.c b/src/da65/infofile.c index 6db82cb36..48a95c9b0 100644 --- a/src/da65/infofile.c +++ b/src/da65/infofile.c @@ -592,9 +592,19 @@ static void RangeSection (void) case INFOTOK_END: AddAttr ("END", &Attributes, tEnd); InfoNextTok (); - InfoAssureInt (); - InfoRangeCheck (0x0000, 0xFFFF); - End = InfoIVal; + + if (InfoTok == INFOTOK_OFFSET_INTCON) { + InfoRangeCheck (0x0000, 0xFFFF); + if (!(Attributes & tStart)) + InfoError ("When using End with an offset, Start must be specified before"); + End = Start + InfoIVal - 1; + if (End > 0xFFFF) + InfoError ("Range error"); + } else { + InfoAssureInt (); + InfoRangeCheck (0x0000, 0xFFFF); + End = InfoIVal; + } InfoNextTok (); break; diff --git a/src/da65/scanner.c b/src/da65/scanner.c index 33fb3a826..d0301c08a 100644 --- a/src/da65/scanner.c +++ b/src/da65/scanner.c @@ -372,6 +372,14 @@ Again: return; } + /* Decimal number offset? */ + if (C == '+') { + NextChar (); + InfoIVal = GetDecimalToken (); + InfoTok = INFOTOK_OFFSET_INTCON; + return; + } + /* Other characters */ switch (C) { diff --git a/src/da65/scanner.h b/src/da65/scanner.h index d4e38177b..63d3273f6 100644 --- a/src/da65/scanner.h +++ b/src/da65/scanner.h @@ -48,6 +48,7 @@ typedef enum token_t { INFOTOK_NONE, INFOTOK_INTCON, + INFOTOK_OFFSET_INTCON, INFOTOK_STRCON, INFOTOK_CHARCON, INFOTOK_IDENT, From d84cc2d1229831e35af27401a5fd5c647402b40e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 2 Nov 2022 13:56:55 +0800 Subject: [PATCH 1855/2710] Fixed errors in the conditional operator "? :" parser. --- src/cc65/expr.c | 16 +++++++++------- src/cc65/ppexpr.c | 2 +- test/err/bug1893.c | 8 ++++++++ 3 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 test/err/bug1893.c diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 8c042cc3c..b1c5059bc 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3869,9 +3869,9 @@ static void hieQuest (ExprDesc* Expr) ED_FinalizeRValLoad (&Expr2); } else { - /* Constant boolean subexpression could still have deferred inc/ - ** dec operations, so just flush their side-effects at this - ** sequence point. + /* Constant subexpression could still have deferred inc/dec + ** operations, so just flush their side-effects at this sequence + ** point. */ DoDeferred (SQP_KEEP_NONE, &Expr2); } @@ -3907,7 +3907,7 @@ static void hieQuest (ExprDesc* Expr) /* Parse third expression. Remember for later if it is a NULL pointer ** expression, then load it into the primary. */ - ExprWithCheck (hie1, &Expr3); + ExprWithCheck (hieQuest, &Expr3); Expr3IsNULL = ED_IsNullPtr (&Expr3); if (!IsTypeVoid (Expr3.Type) && ED_YetToLoad (&Expr3) && @@ -3920,9 +3920,9 @@ static void hieQuest (ExprDesc* Expr) ED_FinalizeRValLoad (&Expr3); } else { - /* Constant boolean subexpression could still have deferred inc/ - ** dec operations, so just flush their side-effects at this - ** sequence point. + /* Constant subexpression could still have deferred inc/dec + ** operations, so just flush their side-effects at this sequence + ** point. */ DoDeferred (SQP_KEEP_NONE, &Expr3); } @@ -4036,6 +4036,8 @@ static void hieQuest (ExprDesc* Expr) } else { *Expr = Expr3; } + /* The result expression is always an rvalue */ + ED_MarkExprAsRVal (Expr); } /* Setup the target expression */ diff --git a/src/cc65/ppexpr.c b/src/cc65/ppexpr.c index dd129ced9..0942dc8f8 100644 --- a/src/cc65/ppexpr.c +++ b/src/cc65/ppexpr.c @@ -752,7 +752,7 @@ static void PPhieQuest (PPExpr* Expr) /* Parse third expression */ PPExprInit (&Expr3); - PPhie1 (&Expr3); + PPhieQuest (&Expr3); /* Set the result */ Expr->IVal = Expr->IVal ? Expr2.IVal != 0 : Expr3.IVal != 0; diff --git a/test/err/bug1893.c b/test/err/bug1893.c new file mode 100644 index 000000000..455256179 --- /dev/null +++ b/test/err/bug1893.c @@ -0,0 +1,8 @@ +/* bug #1893 - Compiler accepts a ternary expression where it shouldn't */ + +int main(void) +{ + int a, b, c; + a == 1? b : c = 3; + return 0; +} From 8fb25766263ad3a6201666828e5bed3266f35900 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 2 Nov 2022 14:09:15 +0800 Subject: [PATCH 1856/2710] Fixed processing '\\' followed with a newline and line number output (-E) with it. --- src/cc65/input.c | 13 +++++++------ src/cc65/preproc.c | 24 ++++++++++++++++++++---- src/cc65/preproc.h | 3 +++ test/val/bug1891.c | 19 +++++++++++++++++++ 4 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 test/val/bug1891.c diff --git a/src/cc65/input.c b/src/cc65/input.c index 8c8007504..f01723783 100644 --- a/src/cc65/input.c +++ b/src/cc65/input.c @@ -578,15 +578,16 @@ int NextLine (void) SB_Drop (Line, 1); } - /* If we don't have a line continuation character at the end, - ** we're done with this line. Otherwise replace the character - ** by a newline and continue reading. + /* If we don't have a line continuation character at the end, we + ** are done with this line. Otherwise just skip the character and + ** continue reading. */ - if (SB_LookAtLast (Line) == '\\') { - Line->Buf[Line->Len-1] = '\n'; - } else { + if (SB_LookAtLast (Line) != '\\') { Input->MissingNL = 0; break; + } else { + SB_Drop (Line, 1); + ContinueLine (); } } else if (C != '\0') { /* Ignore embedded NULs */ diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 4bde66318..961e20e0d 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -114,7 +114,8 @@ static StrBuf* MLine; /* Buffer for macro expansion in #pragma */ static StrBuf* OLine; /* Buffer for #pragma output */ /* Newlines to be added to preprocessed text */ -static int PendingNewLines; +static unsigned PendingNewLines; +static unsigned ContinuedLines; static int FileChanged; /* Structure used when expanding macros */ @@ -824,18 +825,24 @@ static void CheckForBadIdent (const char* Ident, int Std, const Macro* M) static void AddPreLine (StrBuf* Str) /* Add newlines to the string buffer */ { + /* No need to prettify the non-exist output */ if (!PreprocessOnly) { PendingNewLines = 0; + ContinuedLines = 0; return; } + /* We'll adjust the line number later if necessary */ + PendingNewLines += ContinuedLines; + if (FileChanged || PendingNewLines > 6) { /* Output #line directives as source info */ StrBuf Comment = AUTO_STRBUF_INITIALIZER; if (SB_NotEmpty (Str) && SB_LookAtLast (Str) != '\n') { SB_AppendChar (Str, '\n'); } - SB_Printf (&Comment, "#line %u \"%s\"\n", GetCurrentLine (), GetCurrentFile ()); + SB_Printf (&Comment, "#line %u \"%s\"\n", + GetCurrentLine () - ContinuedLines, GetCurrentFile ()); SB_Append (Str, &Comment); } else { /* Output new lines */ @@ -846,6 +853,7 @@ static void AddPreLine (StrBuf* Str) } FileChanged = 0; PendingNewLines = 0; + ContinuedLines = 0; } @@ -1528,14 +1536,14 @@ static unsigned ReadMacroArgs (unsigned NameIdx, MacroExp* E, const Macro* M, in /* Read the actual macro arguments */ while (1) { /* Squeeze runs of blanks within an arg */ - int OldPendingNewLines = PendingNewLines; + unsigned OldPendingNewLines = PendingNewLines; int Skipped = SkipWhitespace (MultiLine); /* Directives can only be found in an argument list that spans ** multiple lines. */ if (MultiLine && OldPendingNewLines < PendingNewLines && CurC == '#') { - int Newlines = 0; + unsigned Newlines = 0; while (OldPendingNewLines < PendingNewLines && CurC == '#') { Newlines += PendingNewLines - OldPendingNewLines; @@ -3362,6 +3370,14 @@ void SetPPIfStack (PPIfStack* Stack) +void ContinueLine (void) +/* Continue the current line ended with a '\\' */ +{ + ++ContinuedLines; +} + + + void PreprocessBegin (void) /* Initialize preprocessor with current file */ { diff --git a/src/cc65/preproc.h b/src/cc65/preproc.h index 153d0d68a..e2a1b073c 100644 --- a/src/cc65/preproc.h +++ b/src/cc65/preproc.h @@ -68,6 +68,9 @@ void Preprocess (void); void SetPPIfStack (PPIfStack* Stack); /* Specify which PP #if stack to use */ +void ContinueLine (void); +/* Continue the current line ended with a '\\' */ + void PreprocessBegin (void); /* Initialize preprocessor with current file */ diff --git a/test/val/bug1891.c b/test/val/bug1891.c new file mode 100644 index 000000000..0373ba46d --- /dev/null +++ b/test/val/bug1891.c @@ -0,0 +1,19 @@ +/* bug #1891 - backslash/newline sequence in string constants is treated wrong */ + +#include <stdio.h> +#include <string.h> + +const char* a = "hello \ +world"; +const char* b = \ +"hello world"; + +int main(void) +{ + if (strcmp(a, b) != 0) { + printf("a:\n%s\n", a); + printf("b:\n%s\n", b); + return 1; + } + return 0; +} From e9413567d7b10c7eb34f9825378fc3cdeb869c64 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 2 Nov 2022 14:16:15 +0800 Subject: [PATCH 1857/2710] Renamed several functions relevent with input file info. --- src/cc65/error.c | 10 +++++----- src/cc65/input.c | 6 +++--- src/cc65/input.h | 6 +++--- src/cc65/locals.c | 2 +- src/cc65/preproc.c | 12 ++++++------ src/cc65/symtab.c | 4 ++-- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/cc65/error.c b/src/cc65/error.c index e99465c87..3f36d9e97 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -120,7 +120,7 @@ static const char* GetDiagnosticFileName (void) if (CurTok.LI) { return GetInputName (CurTok.LI); } else { - return GetCurrentFile (); + return GetCurrentFilename (); } } @@ -132,7 +132,7 @@ static unsigned GetDiagnosticLineNum (void) if (CurTok.LI) { return GetInputLine (CurTok.LI); } else { - return GetCurrentLine (); + return GetCurrentLineNum (); } } @@ -238,7 +238,7 @@ void PPError (const char* Format, ...) { va_list ap; va_start (ap, Format); - IntError (GetCurrentFile(), GetCurrentLine(), Format, ap); + IntError (GetCurrentFilename(), GetCurrentLineNum(), Format, ap); va_end (ap); } @@ -301,7 +301,7 @@ void PPWarning (const char* Format, ...) { va_list ap; va_start (ap, Format); - IntWarning (GetCurrentFile(), GetCurrentLine(), Format, ap); + IntWarning (GetCurrentFilename(), GetCurrentLineNum(), Format, ap); va_end (ap); } @@ -379,7 +379,7 @@ void PPNote (const char* Format, ...) { va_list ap; va_start (ap, Format); - IntNote (GetCurrentFile(), GetCurrentLine(), Format, ap); + IntNote (GetCurrentFilename(), GetCurrentLineNum(), Format, ap); va_end (ap); } diff --git a/src/cc65/input.c b/src/cc65/input.c index f01723783..89c471687 100644 --- a/src/cc65/input.c +++ b/src/cc65/input.c @@ -653,7 +653,7 @@ const char* GetInputFile (const struct IFile* IF) -const char* GetCurrentFile (void) +const char* GetCurrentFilename (void) /* Return the name of the current input file */ { unsigned AFileCount = CollCount (&AFiles); @@ -668,7 +668,7 @@ const char* GetCurrentFile (void) -unsigned GetCurrentLine (void) +unsigned GetCurrentLineNum (void) /* Return the line number in the current input file */ { unsigned AFileCount = CollCount (&AFiles); @@ -683,7 +683,7 @@ unsigned GetCurrentLine (void) -void SetCurrentLine (unsigned LineNum) +void SetCurrentLineNum (unsigned LineNum) /* Set the line number in the current input file */ { unsigned AFileCount = CollCount (&AFiles); diff --git a/src/cc65/input.h b/src/cc65/input.h index 951ad3b96..9457bdf9b 100644 --- a/src/cc65/input.h +++ b/src/cc65/input.h @@ -128,13 +128,13 @@ int PreprocessNextLine (void); const char* GetInputFile (const struct IFile* IF); /* Return a filename from an IFile struct */ -const char* GetCurrentFile (void); +const char* GetCurrentFilename (void); /* Return the name of the current input file */ -unsigned GetCurrentLine (void); +unsigned GetCurrentLineNum (void); /* Return the line number in the current input file */ -void SetCurrentLine (unsigned LineNum); +void SetCurrentLineNum (unsigned LineNum); /* Set the line number in the current input file */ void SetCurrentFilename (const char* Name); diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 5f182f061..0ec28b6c2 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -287,7 +287,7 @@ static void ParseAutoDecl (Declaration* Decl) ** We abuse the Collection somewhat by using it to store line ** numbers. */ - CollReplace (&CurrentFunc->LocalsBlockStack, (void *)(size_t)GetCurrentLine (), + CollReplace (&CurrentFunc->LocalsBlockStack, (void *)(size_t)GetCurrentLineNum (), CollCount (&CurrentFunc->LocalsBlockStack) - 1); } else { diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 961e20e0d..0a9b94bf2 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -842,7 +842,7 @@ static void AddPreLine (StrBuf* Str) SB_AppendChar (Str, '\n'); } SB_Printf (&Comment, "#line %u \"%s\"\n", - GetCurrentLine () - ContinuedLines, GetCurrentFile ()); + GetCurrentLineNum () - ContinuedLines, GetCurrentFilename ()); SB_Append (Str, &Comment); } else { /* Output new lines */ @@ -906,7 +906,7 @@ static void OldStyleComment (void) /* Remember the current line number, so we can output better error ** messages if the comment is not terminated in the current file. */ - unsigned StartingLine = GetCurrentLine (); + unsigned StartingLine = GetCurrentLineNum (); /* Skip the start of comment chars */ NextChar (); @@ -2953,7 +2953,7 @@ static void DoLine (void) /* #line actually sets the line number of the next line */ if (LineNum > 0) { - SetCurrentLine (LineNum - 1); + SetCurrentLineNum (LineNum - 1); /* Check for extra tokens at the end */ CheckExtraTokens ("line"); } @@ -3216,11 +3216,11 @@ void HandleSpecialMacro (Macro* M, const char* Name) SB_Printf (&M->Replacement, "%u", GetCurrentCounter ()); } else if (strcmp (Name, "__LINE__") == 0) { /* Replace __LINE__ with the current line number */ - SB_Printf (&M->Replacement, "%u", GetCurrentLine ()); + SB_Printf (&M->Replacement, "%u", GetCurrentLineNum ()); } else if (strcmp (Name, "__FILE__") == 0) { /* Replace __FILE__ with the current filename */ StrBuf B = AUTO_STRBUF_INITIALIZER; - SB_InitFromString (&B, GetCurrentFile ()); + SB_InitFromString (&B, GetCurrentFilename ()); SB_Clear (&M->Replacement); Stringize (&B, &M->Replacement); SB_Done (&B); @@ -3332,7 +3332,7 @@ void Preprocess (void) PLine = InitLine (PLine); if (Verbosity > 1 && SB_NotEmpty (Line)) { - printf ("%s:%u: %.*s\n", GetCurrentFile (), GetCurrentLine (), + printf ("%s:%u: %.*s\n", GetCurrentFilename (), GetCurrentLineNum (), (int) SB_GetLen (Line), SB_GetConstBuf (Line)); } diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 56e267f85..961f36046 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -1076,7 +1076,7 @@ DefOrRef* AddDefOrRef (SymEntry* E, unsigned Flags) DOR = xmalloc (sizeof (DefOrRef)); CollAppend (E->V.L.DefsOrRefs, DOR); - DOR->Line = GetCurrentLine (); + DOR->Line = GetCurrentLineNum (); DOR->LocalsBlockId = (size_t)CollLast (&CurrentFunc->LocalsBlockStack); DOR->Flags = Flags; DOR->StackPtr = StackPtr; @@ -1144,7 +1144,7 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags) (size_t)CollAt (AIC, DOR->Depth - 1) != DOR->LocalsBlockId)) { Warning ("Goto at line %d to label %s jumps into a block with " "initialization of an object that has automatic storage duration", - GetCurrentLine (), Name); + GetCurrentLineNum (), Name); } } From deb5e977325959430f95d2f7cbf52421aab52657 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 2 Nov 2022 14:22:21 +0800 Subject: [PATCH 1858/2710] Fixed diagnostic messages on enumerator overflow. An enumerator that would be incremented greater than ULONG_MAX now causes an error. --- src/cc65/declare.c | 25 +++++++++++++------------ test/err/bug1890.c | 9 +++++++++ 2 files changed, 22 insertions(+), 12 deletions(-) create mode 100644 test/err/bug1890.c diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 7cc7444b6..2eedfd386 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -611,20 +611,20 @@ static SymEntry* ParseEnumDecl (const char* Name, unsigned* DSFlags) } else { - /* Defaulted with the same signedness as the previous member's */ + /* Defaulted with the same signedness as the previous member's */ IsSigned = IsSignSigned (MemberType) && (unsigned long)EnumVal != GetIntegerTypeMax (MemberType); - /* Enumerate. Signed integer overflow is UB but unsigned integers - ** are guaranteed to wrap around. - */ - EnumVal = (long)((unsigned long)EnumVal + 1UL); + /* Enumerate by adding one to the previous value */ + EnumVal = (long)(((unsigned long)EnumVal + 1UL) & 0xFFFFFFFFUL); if (UnqualifiedType (MemberType->C) == T_ULONG && EnumVal == 0) { - /* Warn on 'unsigned long' overflow in enumeration */ - Warning ("Enumerator '%s' overflows the range of '%s'", - Ident, - GetBasicTypeName (type_ulong)); + /* Error since the new value cannot be represented in the + ** largest unsigned integer type supported by cc65 for enum. + */ + Error ("Enumerator '%s' overflows the range of '%s'", + Ident, + GetBasicTypeName (type_ulong)); } IsIncremented = 1; @@ -657,11 +657,12 @@ static SymEntry* ParseEnumDecl (const char* Name, unsigned* DSFlags) /* Warn if the incremented value exceeds the range of the previous ** type. */ - if (IsIncremented && - EnumVal >= 0 && + if (PrevErrorCount == ErrorCount && + IsIncremented && + (!IsSigned || EnumVal >= 0) && NewType->C != UnqualifiedType (MemberType->C)) { /* The possible overflow here can only be when EnumVal > 0 */ - Warning ("Enumerator '%s' (value = %lu) is of type '%s'", + Warning ("Enumerator '%s' (value = %lu) implies type '%s'", Ident, (unsigned long)EnumVal, GetBasicTypeName (NewType)); diff --git a/test/err/bug1890.c b/test/err/bug1890.c new file mode 100644 index 000000000..afe04f071 --- /dev/null +++ b/test/err/bug1890.c @@ -0,0 +1,9 @@ +/* bug #1890 - Overflow in enumerator value is not detected */ + +#include <limits.h> +enum { a = ULONG_MAX, b } c = b; + +int main(void) +{ + return 0; +} From d2f74db4d8e0bd03c947cef213110f2340d7503a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 2 Nov 2022 22:44:57 +0800 Subject: [PATCH 1859/2710] Fixed compatibility checks on "pointer to pointer" vs "pointer to array" etc. --- src/cc65/typecmp.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index 6052f4a84..a84fd2e2e 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -266,18 +266,6 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) LeftType = (GetUnderlyingTypeCode (lhs) & T_MASK_TYPE); RightType = (GetUnderlyingTypeCode (rhs) & T_MASK_TYPE); - /* If one side is a pointer and the other side is an array, both are - ** compatible. - */ - if (LeftType == T_TYPE_PTR && RightType == T_TYPE_ARRAY) { - RightType = T_TYPE_PTR; - SetResult (Result, TC_PTR_DECAY); - } - if (LeftType == T_TYPE_ARRAY && RightType == T_TYPE_PTR) { - LeftType = T_TYPE_PTR; - SetResult (Result, TC_STRICT_COMPATIBLE); - } - /* Bit-fields are considered compatible if they have the same ** signedness, bit-offset and bit-width. */ @@ -287,12 +275,27 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) lhs->A.B.Offs != rhs->A.B.Offs || lhs->A.B.Width != rhs->A.B.Width) { SetResult (Result, TC_INCOMPATIBLE); + return; } if (LeftType != RightType) { SetResult (Result, TC_STRICT_COMPATIBLE); } } + /* If one side is a pointer and the other side is an array, both are + ** compatible. + */ + if (Result->Indirections == 0) { + if (LeftType == T_TYPE_PTR && RightType == T_TYPE_ARRAY) { + RightType = T_TYPE_PTR; + SetResult (Result, TC_PTR_DECAY); + } + if (LeftType == T_TYPE_ARRAY && RightType == T_TYPE_PTR) { + LeftType = T_TYPE_PTR; + SetResult (Result, TC_STRICT_COMPATIBLE); + } + } + /* If the underlying types are not identical, the types are incompatible */ if (LeftType != RightType) { SetResult (Result, TC_INCOMPATIBLE); From 9b39c3f9495d63d8cdf004363bb21055c0e8865d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 2 Nov 2022 23:58:18 +0800 Subject: [PATCH 1860/2710] Fixed garbage enum tag name appeared in diagnostic messages if the enum tag declaration failed. --- src/cc65/declare.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 7cc7444b6..2117b0498 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1419,9 +1419,8 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, } else { if (CurTok.Tok != TOK_LCURLY) { Error ("Identifier expected"); - } else { - AnonName (Ident, "enum"); } + AnonName (Ident, "enum"); } /* Remember we have an extra type decl */ D->Flags |= DS_EXTRA_TYPE; From aa5d44b2b0bc2fb8b8649f214eaa203ec4abd5e7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 2 Nov 2022 23:58:20 +0800 Subject: [PATCH 1861/2710] Fixed endlessly repeated error messages when a declaration lacks a required identifier. --- src/cc65/declare.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 2117b0498..5c55bfb5b 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1831,7 +1831,13 @@ static void Declarator (const DeclSpec* Spec, Declaration* D, declmode_t Mode) NextToken (); } else { if (Mode == DM_NEED_IDENT) { + /* Some fix point tokens that are used for error recovery */ + static const token_t TokenList[] = { TOK_COMMA, TOK_SEMI }; + Error ("Identifier expected"); + + /* Try some smart error recovery */ + SkipTokens (TokenList, sizeof(TokenList) / sizeof(TokenList[0])); } D->Ident[0] = '\0'; } From c90d078fb7d5ec262bd89595b5d418ea444b7b28 Mon Sep 17 00:00:00 2001 From: Silver Dream ! <silverdr@srebrnysen.com> Date: Wed, 2 Nov 2022 16:43:21 +0000 Subject: [PATCH 1862/2710] Silencing confusing util/zlib 'warning' target --- util/zlib/Makefile | 10 ++++++---- util/zlib/readme.txt | 2 ++ 2 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 util/zlib/readme.txt diff --git a/util/zlib/Makefile b/util/zlib/Makefile index 3770e1f3c..3b2c7c816 100644 --- a/util/zlib/Makefile +++ b/util/zlib/Makefile @@ -9,17 +9,19 @@ CFLAGS += -O3 -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) .PHONY: mostlyclean clean -zlib: warning +zlib: +#zlib: warning #zlib: deflater warning: - @echo "deflater needs zlib installed, use 'make deflater' to build" + @echo "util/zlib/deflater is no longer built by default" + @echo "use 'make deflater' to build if you need it" + @echo "note that you need zlib installed first" deflater: deflater.c $(CC) $(CFLAGS) -o deflater deflater.c -lz mostlyclean clean: $(RM) deflater - -install zip: +install zip: diff --git a/util/zlib/readme.txt b/util/zlib/readme.txt new file mode 100644 index 000000000..90e15871c --- /dev/null +++ b/util/zlib/readme.txt @@ -0,0 +1,2 @@ +Deflater program in this directory is not built by default +Use 'make deflater' to build. Note that you need zlib installed first From 67384a29b7789875662617eb7c7b56ff1f892385 Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Wed, 12 Oct 2022 11:03:57 +0300 Subject: [PATCH 1863/2710] Start on 65816 --- doc/da65.sgml | 28 +++++++++++++++--- src/da65/code.c | 11 ++++++++ src/da65/code.h | 3 ++ src/da65/handler.c | 57 +++++++++++++++++++++++++++++++------ src/da65/main.c | 9 ++++-- src/da65/opctable.c | 1 + util/parse-bsnes-log.awk | 61 ++++++++++++++++++++++++++++++++++++++++ 7 files changed, 156 insertions(+), 14 deletions(-) create mode 100755 util/parse-bsnes-log.awk diff --git a/doc/da65.sgml b/doc/da65.sgml index 185dbe0e6..aa6ad40bf 100644 --- a/doc/da65.sgml +++ b/doc/da65.sgml @@ -115,14 +115,14 @@ Here is a description of all the command line options: <item>6502dtv <item>65sc02 <item>65c02 + <item>65816 <item>huc6280 <item>4510 </itemize> 6502x is for the NMOS 6502 with unofficial opcodes. 6502dtv is for the emulated CPU of the C64DTV device. huc6280 is the CPU of the PC engine. - 4510 is the CPU of the Commodore C65. Support for the 65816 currently - is not available. + 4510 is the CPU of the Commodore C65. 65816 is the CPU of the SNES. <label id="option--formfeeds"> @@ -263,8 +263,9 @@ can produce output that can not be re-assembled, when one or more of those branches point outside of the disassembled memory. This can happen when text or binary data is processed. -While there is some code for the 65816 in the sources, it is currently -unsupported. +The 65816 support requires annotating ranges with the M and X flag states. +This can be recorded with an emulator that supports Code and Data Logging, +for example. Disassemble one bank at a time. <sect1>Attribute map<p> @@ -521,6 +522,11 @@ following attributes are recognized: </descrip> + <tag><tt>ADDRMODE</tt></tag> + When disassembling 65816 code, this specifies the M and X flag states + for this range. It's a string argument of the form "mx", capital letters + mean the flag is enabled. + </descrip> @@ -693,6 +699,20 @@ directives explained above: +<sect>Helper scripts<p> + +<tt>util/parse-bsnes-log.awk</tt> is a supplied script for 65816 disassembly, +to parse bsnes-plus Code-Data log files and output the RANGE sections +for your info file. For typical usage, you'd check the S-CPU log and trace +log mask boxes in the bsnes-plus debugger, play through the game, then grep +for the bank you're disassembling, and pass that to this script. + +<tscreen><verb> +grep ^83 my-game-log | parse-bsnes-log.awk +</verb></tscreen> + + + <sect>Copyright<p> da65 (and all cc65 binutils) is (C) Copyright 1998-2011, Ullrich von diff --git a/src/da65/code.c b/src/da65/code.c index 3fb6a21d3..a162e6482 100644 --- a/src/da65/code.c +++ b/src/da65/code.c @@ -194,6 +194,17 @@ unsigned long GetCodeDWord (unsigned Addr) +unsigned GetCodeLongAddr (unsigned Addr) +/* Get a word from the given address */ +{ + unsigned Lo = GetCodeByte (Addr); + unsigned Mid = GetCodeByte (Addr+1); + unsigned Hi = GetCodeByte (Addr+2); + return Lo | (Mid << 8) | (Hi << 16); +} + + + unsigned GetRemainingBytes (void) /* Return the number of remaining code bytes */ { diff --git a/src/da65/code.h b/src/da65/code.h index 50e68ebdf..aa3c6a290 100644 --- a/src/da65/code.h +++ b/src/da65/code.h @@ -72,6 +72,9 @@ unsigned GetCodeWord (unsigned Addr); unsigned long GetCodeDWord (unsigned Addr); /* Get a dword from the given address */ +unsigned GetCodeLongAddr (unsigned Addr); +/* Get a 24-bit address from the given address */ + unsigned GetRemainingBytes (void); /* Return the number of remaining code bytes */ diff --git a/src/da65/handler.c b/src/da65/handler.c index 255b8da86..605d6219d 100644 --- a/src/da65/handler.c +++ b/src/da65/handler.c @@ -121,8 +121,10 @@ static const char* GetAddrArg (unsigned Flags, unsigned Addr) static char Buf [32]; if (Addr < 0x100) { xsprintf (Buf, sizeof (Buf), "$%02X", Addr); - } else { + } else if (Addr < 0x10000) { xsprintf (Buf, sizeof (Buf), "$%04X", Addr); + } else { + xsprintf (Buf, sizeof (Buf), "$%06X", Addr); } return Buf; } @@ -322,14 +324,28 @@ void OH_AbsoluteY (const OpcDesc* D) void OH_AbsoluteLong (const OpcDesc* D attribute ((unused))) { - Error ("Not implemented"); + /* Get the operand */ + unsigned Addr = GetCodeLongAddr (PC+1); + + /* Generate a label in pass 1 */ + GenerateLabel (D->Flags, Addr); + + /* Output the line */ + OneLine (D, "%s%s", GetAbsOverride (D->Flags, Addr), GetAddrArg (D->Flags, Addr)); } void OH_AbsoluteLongX (const OpcDesc* D attribute ((unused))) { - Error ("Not implemented"); + /* Get the operand */ + unsigned Addr = GetCodeLongAddr (PC+1); + + /* Generate a label in pass 1 */ + GenerateLabel (D->Flags, Addr); + + /* Output the line */ + OneLine (D, "%s%s,x", GetAbsOverride (D->Flags, Addr), GetAddrArg (D->Flags, Addr)); } @@ -358,7 +374,17 @@ void OH_Relative (const OpcDesc* D) void OH_RelativeLong (const OpcDesc* D attribute ((unused))) { - Error ("Not implemented"); + /* Get the operand */ + signed short Offs = GetCodeWord (PC+1); + + /* Calculate the target address */ + unsigned Addr = (((int) PC+3) + Offs) & 0xFFFF; + + /* Generate a label in pass 1 */ + GenerateLabel (D->Flags, Addr); + + /* Output the line */ + OneLine (D, "%s", GetAddrArg (D->Flags, Addr)); } @@ -541,14 +567,15 @@ void OH_ImmediateAbsoluteX (const OpcDesc* D) void OH_StackRelative (const OpcDesc* D attribute ((unused))) { - Error ("Not implemented"); + /* Output the line */ + OneLine (D, "$%02X,s", GetCodeByte (PC+1)); } void OH_DirectIndirectLongX (const OpcDesc* D attribute ((unused))) { - Error ("Not implemented"); + Error ("Not implemented %s", __FUNCTION__); } @@ -571,14 +598,28 @@ void OH_StackRelativeIndirectY4510 (const OpcDesc* D attribute ((unused))) void OH_DirectIndirectLong (const OpcDesc* D attribute ((unused))) { - Error ("Not implemented"); + /* Get the operand */ + unsigned Addr = GetCodeByte (PC+1); + + /* Generate a label in pass 1 */ + GenerateLabel (D->Flags, Addr); + + /* Output the line */ + OneLine (D, "[%s]", GetAddrArg (D->Flags, Addr)); } void OH_DirectIndirectLongY (const OpcDesc* D attribute ((unused))) { - Error ("Not implemented"); + /* Get the operand */ + unsigned Addr = GetCodeByte (PC+1); + + /* Generate a label in pass 1 */ + GenerateLabel (D->Flags, Addr); + + /* Output the line */ + OneLine (D, "[%s],y", GetAddrArg (D->Flags, Addr)); } diff --git a/src/da65/main.c b/src/da65/main.c index 1fc07f006..772846ad9 100644 --- a/src/da65/main.c +++ b/src/da65/main.c @@ -427,8 +427,13 @@ static void OneOpcode (unsigned RemainingBytes) switch (Style) { case atDefault: - D->Handler (D); - PC += D->Size; + if (CPU == CPU_65816) { + DataByteLine (1); + ++PC; + } else { + D->Handler (D); + PC += D->Size; + } break; case atCode: diff --git a/src/da65/opctable.c b/src/da65/opctable.c index 255a3557f..d9068d253 100644 --- a/src/da65/opctable.c +++ b/src/da65/opctable.c @@ -74,6 +74,7 @@ void SetOpcTable (cpu_t CPU) case CPU_6502DTV: OpcTable = OpcTable_6502DTV; break; case CPU_65SC02: OpcTable = OpcTable_65SC02; break; case CPU_65C02: OpcTable = OpcTable_65C02; break; + case CPU_65816: OpcTable = OpcTable_65816; break; case CPU_HUC6280: OpcTable = OpcTable_HuC6280; break; case CPU_M740: OpcTable = OpcTable_M740; break; case CPU_4510: OpcTable = OpcTable_4510; break; diff --git a/util/parse-bsnes-log.awk b/util/parse-bsnes-log.awk new file mode 100755 index 000000000..d6a014165 --- /dev/null +++ b/util/parse-bsnes-log.awk @@ -0,0 +1,61 @@ +#!/usr/bin/awk -nf +# +# Parse the bsnes-plus cpu log for the 65816 address mode ranges. +# Since the log doesn't show the op size, we have to be careful +# and add +3 to the range end - this may need manual cleanup. +# +# Grep the input for only one bank's content beforehand. +# +# (C) Lauri Kasanen, under the cc65 license +# + +{ + addr = $1 + + IGNORECASE = 1 + if ($9 ~ /^nv/) { + val = $9 + } else if ($10 ~ /^nv/) { + val = $10 + } else { + val = $11 + } + IGNORECASE = 0 + + val = substr(val, 3, 2) + if (val == "1B") # emulation mode + val = "MX" + + addrs["0x" substr(addr, 3)] = val +} + +END { + PROCINFO["sorted_in"] = "@ind_num_asc" + + start = -1 + prevval = "" + + for (addr in addrs) { + cur = addrs[addr] + if (start == -1) { # first range + start = addr + } else { + if (prevval != cur || addr - prevaddr > 4) { # start a new range + #print "diff " addr - prevaddr ", addr " addr ", pa " prevaddr + if (prevaddr + 3 >= addr + 0) + fmt = sprintf("%04x", addr - 1) + else + fmt = sprintf("%04x", prevaddr + 3) + print "RANGE { START $" substr(start, 3) "; END $" fmt "; ADDRMODE \"" prevval "\"; TYPE Code;};" + start = addr + } + } + #print "\t" addr " " addrs[addr] + + prevval = cur + prevaddr = addr + } + + fmt = sprintf("%04x", prevaddr + 3) + print "RANGE { START $" substr(start, 3) "; END $" fmt "; ADDRMODE \"" prevval "\"; TYPE Code;};" +} From ea924ededd0ed3d5ba1bdb133550644c54192d08 Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Wed, 12 Oct 2022 11:41:20 +0300 Subject: [PATCH 1864/2710] Teach attrtab, labels and comments about long addresses --- src/da65/attrtab.c | 58 +++++++++++++++++++++++++++++++-- src/da65/attrtab.h | 3 ++ src/da65/comments.c | 47 ++++++++++++++++++++++++--- src/da65/labels.c | 79 ++++++++++++++++++++++++++++++++++++++------- 4 files changed, 169 insertions(+), 18 deletions(-) diff --git a/src/da65/attrtab.c b/src/da65/attrtab.c index a9143584a..b70e017a1 100644 --- a/src/da65/attrtab.c +++ b/src/da65/attrtab.c @@ -34,6 +34,7 @@ /* da65 */ +#include "cpu.h" #include "error.h" #include "attrtab.h" @@ -48,6 +49,12 @@ /* Attribute table */ static unsigned short AttrTab[0x10000]; +/* 65816 attribute table */ +#define MAX_LONG_ATTRS 256 +static unsigned short LongAttrVal[MAX_LONG_ATTRS]; +static unsigned LongAttrAddr[MAX_LONG_ATTRS]; +static unsigned LongAttrsUsed; + /*****************************************************************************/ @@ -59,12 +66,19 @@ static unsigned short AttrTab[0x10000]; void AddrCheck (unsigned Addr) /* Check if the given address has a valid range */ { - if (Addr >= 0x10000) { + if (Addr >= 0x10000 && CPU != CPU_65816) { Error ("Address out of range: %08X", Addr); } } +unsigned char IsLongAddr (unsigned Addr) +/* Is it 24-bit? */ +{ + return Addr >= 0x10000 && CPU == CPU_65816; +} + + attr_t GetAttr (unsigned Addr) /* Return the attribute for the given address */ @@ -72,6 +86,17 @@ attr_t GetAttr (unsigned Addr) /* Check the given address */ AddrCheck (Addr); + if (IsLongAddr (Addr)) { + unsigned i; + for (i = 0; i < LongAttrsUsed; i++) { + if (LongAttrAddr[i] == Addr) { + return LongAttrVal[i]; + } + } + + return 0; + } + /* Return the attribute */ return AttrTab[Addr]; } @@ -148,6 +173,33 @@ void MarkAddr (unsigned Addr, attr_t Attr) /* Check the given address */ AddrCheck (Addr); + if (IsLongAddr (Addr)) { + unsigned i; + for (i = 0; i < LongAttrsUsed; i++) { + if (LongAttrAddr[i] == Addr) { + + /* We must not have more than one style bit */ + if (Attr & atStyleMask) { + if (LongAttrVal[i] & atStyleMask) { + Error ("Duplicate style for long address %06X", Addr); + } + } + LongAttrVal[i] |= Attr; + + return; + } + } + + if (LongAttrsUsed >= MAX_LONG_ATTRS) { + Error ("Too many long addresses"); + } + LongAttrVal[LongAttrsUsed] |= Attr; + LongAttrAddr[LongAttrsUsed] = Addr; + LongAttrsUsed++; + + return; + } + /* We must not have more than one style bit */ if (Attr & atStyleMask) { if (AttrTab[Addr] & atStyleMask) { @@ -168,7 +220,7 @@ attr_t GetStyleAttr (unsigned Addr) AddrCheck (Addr); /* Return the attribute */ - return (AttrTab[Addr] & atStyleMask); + return (GetAttr (Addr) & atStyleMask); } @@ -180,5 +232,5 @@ attr_t GetLabelAttr (unsigned Addr) AddrCheck (Addr); /* Return the attribute */ - return (AttrTab[Addr] & atLabelMask); + return (GetAttr (Addr) & atLabelMask); } diff --git a/src/da65/attrtab.h b/src/da65/attrtab.h index 18515ce49..c9af89a4d 100644 --- a/src/da65/attrtab.h +++ b/src/da65/attrtab.h @@ -88,6 +88,9 @@ typedef enum attr_t { void AddrCheck (unsigned Addr); /* Check if the given address has a valid range */ +unsigned char IsLongAddr (unsigned Addr); +/* Check if the given address is 24-bit */ + attr_t GetAttr (unsigned Addr); /* Return the attribute for the given address */ diff --git a/src/da65/comments.c b/src/da65/comments.c index 7c671131f..f136ae3d2 100644 --- a/src/da65/comments.c +++ b/src/da65/comments.c @@ -52,6 +52,11 @@ /* Comment table */ static const char* CommentTab[0x10000]; +#define MAX_LONG_COMMENTS 256 +static const char* LongCommentVal[MAX_LONG_COMMENTS]; +static unsigned LongCommentAddr[MAX_LONG_COMMENTS]; +static unsigned LongCommentsUsed; + /*****************************************************************************/ @@ -60,17 +65,43 @@ static const char* CommentTab[0x10000]; +static unsigned FindLongIndex (unsigned Addr) +{ + unsigned i; + for (i = 0; i < LongCommentsUsed; i++) { + if (LongCommentAddr[i] == Addr) { + return i; + } + } + return -1; +} + + + void SetComment (unsigned Addr, const char* Comment) /* Set a comment for the given address */ { /* Check the given address */ AddrCheck (Addr); - /* If we do already have a comment, warn and ignore the new one */ - if (CommentTab[Addr]) { - Warning ("Duplicate comment for address $%04X", Addr); + if (IsLongAddr (Addr)) { + if (FindLongIndex (Addr)) { + Warning ("Duplicate comment for address $%06X", Addr); + } else { + if (LongCommentsUsed >= MAX_LONG_COMMENTS) { + Error("Too many long-address comments"); + } + LongCommentVal[LongCommentsUsed] = xstrdup (Comment); + LongCommentAddr[LongCommentsUsed] = Addr; + LongCommentsUsed++; + } } else { - CommentTab[Addr] = xstrdup (Comment); + /* If we do already have a comment, warn and ignore the new one */ + if (CommentTab[Addr]) { + Warning ("Duplicate comment for address $%04X", Addr); + } else { + CommentTab[Addr] = xstrdup (Comment); + } } } @@ -82,6 +113,14 @@ const char* GetComment (unsigned Addr) /* Check the given address */ AddrCheck (Addr); + if (IsLongAddr (Addr)) { + const unsigned i = FindLongIndex (Addr); + if (i < LongCommentsUsed) { + return LongCommentVal[i]; + } + return NULL; + } + /* Return the label if any */ return CommentTab[Addr]; } diff --git a/src/da65/labels.c b/src/da65/labels.c index 542205c11..5ca303a33 100644 --- a/src/da65/labels.c +++ b/src/da65/labels.c @@ -60,6 +60,12 @@ /* Symbol table */ static const char* SymTab[0x10000]; +/* 65816 symbol table */ +#define MAX_LONG_LABELS 256 +static const char* LongSymVal[MAX_LONG_LABELS]; +static unsigned LongSymAddr[MAX_LONG_LABELS]; +static unsigned LongLabelsUsed; + /*****************************************************************************/ @@ -74,12 +80,27 @@ static const char* MakeLabelName (unsigned Addr) */ { static char LabelBuf [32]; - xsprintf (LabelBuf, sizeof (LabelBuf), "L%04X", Addr); + xsprintf (LabelBuf, sizeof (LabelBuf), + IsLongAddr (Addr) ? "L%06X" : "L%04X", Addr); return LabelBuf; } +static unsigned FindLongIndex (unsigned Addr) +{ + unsigned i; + for (i = 0; i < LongLabelsUsed; i++) { + if (LongSymAddr[i] == Addr) { + return i; + } + } + + return -1; +} + + + static void AddLabel (unsigned Addr, attr_t Attr, const char* Name) /* Add a label */ { @@ -91,19 +112,41 @@ static void AddLabel (unsigned Addr, attr_t Attr, const char* Name) /* Allow redefinition if identical. Beware: Unnamed labels don't ** have a name (you guessed that, didn't you?). */ - if (ExistingAttr == Attr && - ((Name == 0 && SymTab[Addr] == 0) || - (Name != 0 && SymTab[Addr] != 0 && - strcmp (SymTab[Addr], Name) == 0))) { - return; + if (IsLongAddr (Addr)) { + const unsigned i = FindLongIndex (Addr); + if (ExistingAttr == Attr && + ((Name == 0 && LongSymVal[i] == 0) || + (Name != 0 && LongSymVal[i] != 0 && + strcmp (LongSymVal[i], Name) == 0))) { + return; + } + Error ("Duplicate label for address $%06X (%s): '%s'", Addr, + LongSymVal[i] == 0 ? "<unnamed label>" : LongSymVal[i], + Name == 0 ? "<unnamed label>" : Name); + } else { + if (ExistingAttr == Attr && + ((Name == 0 && SymTab[Addr] == 0) || + (Name != 0 && SymTab[Addr] != 0 && + strcmp (SymTab[Addr], Name) == 0))) { + return; + } + Error ("Duplicate label for address $%04X (%s): '%s'", Addr, + SymTab[Addr] == 0 ? "<unnamed label>" : SymTab[Addr], + Name == 0 ? "<unnamed label>" : Name); } - Error ("Duplicate label for address $%04X (%s): '%s'", Addr, - SymTab[Addr] == 0 ? "<unnamed label>" : SymTab[Addr], - Name == 0 ? "<unnamed label>" : Name); } /* Create a new label (xstrdup will return NULL if input NULL) */ - SymTab[Addr] = xstrdup (Name); + if (IsLongAddr (Addr)) { + if (LongLabelsUsed >= MAX_LONG_LABELS) { + Error ("Too many long labels"); + } + LongSymAddr[LongLabelsUsed] = Addr; + LongSymVal[LongLabelsUsed] = xstrdup (Name); + LongLabelsUsed++; + } else { + SymTab[Addr] = xstrdup (Name); + } /* Remember the attribute */ MarkAddr (Addr, Attr); @@ -254,6 +297,10 @@ const char* GetLabelName (unsigned Addr) */ if (A == atUnnamedLabel) { return ""; + } else if (IsLongAddr (Addr)) { + /* Return the label if any */ + const unsigned i = FindLongIndex (Addr); + return i < LongLabelsUsed ? LongSymVal[i] : NULL; } else { /* Return the label if any */ return SymTab[Addr]; @@ -327,6 +374,10 @@ const char* GetLabel (unsigned Addr, unsigned RefFrom) return FwdLabels[Count-1]; } + } else if (IsLongAddr (Addr)) { + /* Return the label if any */ + const unsigned i = FindLongIndex (Addr); + return i < LongLabelsUsed ? LongSymVal[i] : NULL; } else { /* Return the label if any */ return SymTab[Addr]; @@ -371,7 +422,13 @@ static void DefOutOfRangeLabel (unsigned long Addr) case atIntLabel: case atExtLabel: - DefConst (SymTab[Addr], GetComment (Addr), Addr); + if (IsLongAddr (Addr)) { + const unsigned i = FindLongIndex (Addr); + DefConst (i < LongLabelsUsed ? LongSymVal[i] : NULL, + GetComment (Addr), Addr); + } else { + DefConst (SymTab[Addr], GetComment (Addr), Addr); + } break; case atUnnamedLabel: From 89fc5e30c49439f178279be783ef2bac14e05638 Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Wed, 12 Oct 2022 12:19:01 +0300 Subject: [PATCH 1865/2710] Remove unused and conflicting value --- src/da65/attrtab.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/da65/attrtab.h b/src/da65/attrtab.h index c9af89a4d..847f44b8a 100644 --- a/src/da65/attrtab.h +++ b/src/da65/attrtab.h @@ -66,8 +66,6 @@ typedef enum attr_t { atDepLabel = 0x0040, /* Dependent label */ atUnnamedLabel = 0x0080, /* Unnamed label */ - atLabelDefined = 0x0100, /* True if we defined the label */ - atStyleMask = 0x000F, /* Output style */ atLabelMask = 0x00F0, /* Label information */ From e8ee8435e90c191f5e74c4a73e80ad0b708da27d Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Wed, 12 Oct 2022 12:36:26 +0300 Subject: [PATCH 1866/2710] Add addrMode to RANGE --- src/da65/attrtab.h | 15 ++++++++-- src/da65/infofile.c | 68 +++++++++++++++++++++++++++++++++++++-------- src/da65/scanner.h | 1 + 3 files changed, 69 insertions(+), 15 deletions(-) diff --git a/src/da65/attrtab.h b/src/da65/attrtab.h index 847f44b8a..37143c0d1 100644 --- a/src/da65/attrtab.h +++ b/src/da65/attrtab.h @@ -66,13 +66,22 @@ typedef enum attr_t { atDepLabel = 0x0040, /* Dependent label */ atUnnamedLabel = 0x0080, /* Unnamed label */ - atStyleMask = 0x000F, /* Output style */ - atLabelMask = 0x00F0, /* Label information */ - /* Segment */ atSegment = 0x0100, /* Code is in a segment */ atSegmentEnd = 0x0200, /* Segment end */ atSegmentStart = 0x0400, /* Segment start */ + + /* 65816 addressing mode */ + atMem8 = 0x1000, /* M flag enabled, 8-bit */ + atMem16 = 0x2000, /* M flag disabled, 16-bit */ + atIdx8 = 0x4000, /* X flag enabled, 8-bit */ + atIdx16 = 0x8000, /* X flag disabled, 16-bit */ + + atStyleMask = 0x000F, /* Output style */ + atLabelMask = 0x00F0, /* Label information */ + atSegmentMask = 0x0F00, /* Segment information */ + at65816Mask = 0xF000, /* 65816 information */ + } attr_t; diff --git a/src/da65/infofile.c b/src/da65/infofile.c index 48a95c9b0..923cc53c9 100644 --- a/src/da65/infofile.c +++ b/src/da65/infofile.c @@ -35,6 +35,7 @@ #include <stdio.h> #include <string.h> +#include <ctype.h> #include <limits.h> #if defined(_MSC_VER) /* Microsoft compiler */ @@ -521,11 +522,12 @@ static void RangeSection (void) /* Parse a range section */ { static const IdentTok RangeDefs[] = { - { "COMMENT", INFOTOK_COMMENT }, - { "END", INFOTOK_END }, - { "NAME", INFOTOK_NAME }, - { "START", INFOTOK_START }, - { "TYPE", INFOTOK_TYPE }, + { "COMMENT", INFOTOK_COMMENT }, + { "END", INFOTOK_END }, + { "NAME", INFOTOK_NAME }, + { "START", INFOTOK_START }, + { "TYPE", INFOTOK_TYPE }, + { "ADDRMODE", INFOTOK_ADDRMODE }, }; static const IdentTok TypeDefs[] = { @@ -543,12 +545,13 @@ static void RangeSection (void) /* Which values did we get? */ enum { - tNone = 0x00, - tStart = 0x01, - tEnd = 0x02, - tType = 0x04, - tName = 0x08, - tComment= 0x10, + tNone = 0x00, + tStart = 0x01, + tEnd = 0x02, + tType = 0x04, + tName = 0x08, + tComment = 0x10, + tAddrMode = 0x20, tNeeded = (tStart | tEnd | tType) }; unsigned Attributes = tNone; @@ -557,6 +560,7 @@ static void RangeSection (void) unsigned Start = 0; unsigned End = 0; unsigned char Type = 0; + unsigned AddrMode = 0; char* Name = 0; char* Comment = 0; unsigned MemberSize = 0; @@ -647,6 +651,37 @@ static void RangeSection (void) InfoNextTok (); break; + case INFOTOK_ADDRMODE: + AddAttr ("ADDRMODE", &Attributes, tAddrMode); + InfoNextTok (); + InfoAssureStr (); + if (InfoSVal[0] == '\0') { + InfoError ("AddrMode may not be empty"); + } + if (InfoSVal[1] == '\0') { + InfoError ("AddrMode must be two characters long"); + } + if (tolower(InfoSVal[0]) == 'm') { + if (InfoSVal[0] == 'm') { + AddrMode = atMem16; + } else { + AddrMode = atMem8; + } + } else { + InfoError ("AddrMode syntax: mx"); + } + if (tolower(InfoSVal[1]) == 'x') { + if (InfoSVal[1] == 'x') { + AddrMode |= atIdx16; + } else { + AddrMode |= atIdx8; + } + } else { + InfoError ("AddrMode syntax: mx"); + } + InfoNextTok (); + break; + default: Internal ("Unexpected token: %u", InfoTok); } @@ -661,6 +696,15 @@ static void RangeSection (void) InfoError ("Required values missing from this section"); } + if (CPU == CPU_65816) { + if (Type == atCode && !(Attributes & tAddrMode)) { + InfoError ("65816 code sections require addressing mode"); + } + if (Type != atCode && (Attributes & tAddrMode)) { + InfoError ("AddrMode is only valid for code sections"); + } + } + /* Start must be less than end */ if (Start > End) { InfoError ("Start value must not be greater than end value"); @@ -672,7 +716,7 @@ static void RangeSection (void) } /* Set the range */ - MarkRange (Start, End, Type); + MarkRange (Start, End, Type | AddrMode); /* Do we have a label? */ if (Attributes & tName) { diff --git a/src/da65/scanner.h b/src/da65/scanner.h index 63d3273f6..60648a40c 100644 --- a/src/da65/scanner.h +++ b/src/da65/scanner.h @@ -90,6 +90,7 @@ typedef enum token_t { INFOTOK_START, INFOTOK_END, INFOTOK_TYPE, + INFOTOK_ADDRMODE, INFOTOK_CODE, INFOTOK_BYTETAB, From 1294c1c2539396d79a280fb2d51bd4d50ad9e025 Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Wed, 12 Oct 2022 14:45:10 +0300 Subject: [PATCH 1867/2710] Implement changing-size opcodes --- src/da65/handler.c | 22 ++++++++++++++++++++++ src/da65/handler.h | 2 ++ src/da65/main.c | 9 +++++++++ src/da65/opc65816.c | 24 ++++++++++++------------ src/da65/opcdesc.h | 3 ++- 5 files changed, 47 insertions(+), 13 deletions(-) diff --git a/src/da65/handler.c b/src/da65/handler.c index 605d6219d..97c79db6d 100644 --- a/src/da65/handler.c +++ b/src/da65/handler.c @@ -231,6 +231,28 @@ void OH_Immediate (const OpcDesc* D) +void OH_Immediate65816M (const OpcDesc* D) +{ + if (GetAttr (PC) & atMem16) { + OneLine (D, "#$%04X", GetCodeWord (PC+1)); + } else { + OneLine (D, "#$%02X", GetCodeByte (PC+1)); + } +} + + + +void OH_Immediate65816X (const OpcDesc* D) +{ + if (GetAttr (PC) & atIdx16) { + OneLine (D, "#$%04X", GetCodeWord (PC+1)); + } else { + OneLine (D, "#$%02X", GetCodeByte (PC+1)); + } +} + + + void OH_ImmediateWord (const OpcDesc* D) { OneLine (D, "#$%04X", GetCodeWord (PC+1)); diff --git a/src/da65/handler.h b/src/da65/handler.h index eaa66e7fd..2bfaed9c3 100644 --- a/src/da65/handler.h +++ b/src/da65/handler.h @@ -57,6 +57,8 @@ void OH_Illegal (const OpcDesc* D attribute ((unused))); void OH_Accumulator (const OpcDesc*); void OH_Implicit (const OpcDesc*); void OH_Immediate (const OpcDesc*); +void OH_Immediate65816M (const OpcDesc*); +void OH_Immediate65816X (const OpcDesc*); void OH_ImmediateWord (const OpcDesc*); void OH_Direct (const OpcDesc*); void OH_DirectX (const OpcDesc*); diff --git a/src/da65/main.c b/src/da65/main.c index 772846ad9..8d68dc4cc 100644 --- a/src/da65/main.c +++ b/src/da65/main.c @@ -55,6 +55,7 @@ #include "data.h" #include "error.h" #include "global.h" +#include "handler.h" #include "infofile.h" #include "labels.h" #include "opctable.h" @@ -447,6 +448,14 @@ static void OneOpcode (unsigned RemainingBytes) } /* Output the insn */ D->Handler (D); + if (CPU == CPU_65816 && (D->Flags & flSizeChanges)) { + if ((D->Handler == OH_Immediate65816M && + GetAttr (PC) & atMem16) || + (D->Handler == OH_Immediate65816X && + GetAttr (PC) & atIdx16)) { + PC++; + } + } PC += D->Size; break; } diff --git a/src/da65/opc65816.c b/src/da65/opc65816.c index b7775d2e2..877e5536f 100644 --- a/src/da65/opc65816.c +++ b/src/da65/opc65816.c @@ -56,7 +56,7 @@ const OpcDesc OpcTable_65816[256] = { { "asl", 2, flUseLabel, OH_Direct }, /* $06 */ { "ora", 2, flUseLabel, OH_DirectIndirectLong }, /* $07 */ { "php", 1, flNone, OH_Implicit }, /* $08 */ - { "ora", 2, flNone, OH_Immediate }, /* $09 */ + { "ora", 2, flSizeChanges, OH_Immediate65816M }, /* $09 */ { "asl", 1, flNone, OH_Accumulator }, /* $0a */ { "phd", 1, flNone, OH_Implicit }, /* $0b */ { "tsb", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $0c */ @@ -88,7 +88,7 @@ const OpcDesc OpcTable_65816[256] = { { "rol", 2, flUseLabel, OH_Direct }, /* $26 */ { "and", 2, flUseLabel, OH_DirectIndirectLong }, /* $27 */ { "plp", 1, flNone, OH_Implicit }, /* $28 */ - { "and", 2, flNone, OH_Immediate }, /* $29 */ + { "and", 2, flSizeChanges, OH_Immediate65816M }, /* $29 */ { "rol", 1, flNone, OH_Accumulator }, /* $2a */ { "pld", 1, flNone, OH_Implicit }, /* $2b */ { "bit", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $2c */ @@ -120,7 +120,7 @@ const OpcDesc OpcTable_65816[256] = { { "lsr", 2, flUseLabel, OH_Direct }, /* $46 */ { "eor", 2, flUseLabel, OH_DirectIndirectLong }, /* $47 */ { "pha", 1, flNone, OH_Implicit }, /* $48 */ - { "eor", 2, flNone, OH_Immediate }, /* $49 */ + { "eor", 2, flSizeChanges, OH_Immediate65816M }, /* $49 */ { "lsr", 1, flNone, OH_Accumulator }, /* $4a */ { "phk", 1, flNone, OH_Implicit }, /* $4b */ { "jmp", 3, flLabel, OH_JmpAbsolute }, /* $4c */ @@ -152,7 +152,7 @@ const OpcDesc OpcTable_65816[256] = { { "ror", 2, flUseLabel, OH_Direct }, /* $66 */ { "adc", 2, flUseLabel, OH_DirectIndirectLong }, /* $67 */ { "pla", 1, flNone, OH_Implicit }, /* $68 */ - { "adc", 2, flNone, OH_Immediate }, /* $69 */ + { "adc", 2, flSizeChanges, OH_Immediate65816M }, /* $69 */ { "ror", 1, flNone, OH_Accumulator }, /* $6a */ { "rtl", 1, flNone, OH_Implicit }, /* $6b */ { "jmp", 3, flLabel, OH_JmpAbsoluteIndirect }, /* $6c */ @@ -184,7 +184,7 @@ const OpcDesc OpcTable_65816[256] = { { "stx", 2, flUseLabel, OH_Direct }, /* $86 */ { "sta", 2, flUseLabel, OH_DirectIndirectLong }, /* $87 */ { "dey", 1, flNone, OH_Implicit }, /* $88 */ - { "bit", 2, flNone, OH_Immediate }, /* $89 */ + { "bit", 2, flSizeChanges, OH_Immediate65816M }, /* $89 */ { "txa", 1, flNone, OH_Implicit }, /* $8a */ { "phb", 1, flNone, OH_Implicit }, /* $8b */ { "sty", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $8c */ @@ -207,16 +207,16 @@ const OpcDesc OpcTable_65816[256] = { { "sta", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $9d */ { "stz", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $9e */ { "sta", 4, flUseLabel, OH_AbsoluteLongX }, /* $9f */ - { "ldy", 2, flNone, OH_Immediate }, /* $a0 */ + { "ldy", 2, flSizeChanges, OH_Immediate65816X }, /* $a0 */ { "lda", 2, flUseLabel, OH_DirectXIndirect }, /* $a1 */ - { "ldx", 2, flNone, OH_Immediate }, /* $a2 */ + { "ldx", 2, flSizeChanges, OH_Immediate65816X }, /* $a2 */ { "lda", 2, flNone, OH_StackRelative }, /* $a3 */ { "ldy", 2, flUseLabel, OH_Direct }, /* $a4 */ { "lda", 2, flUseLabel, OH_Direct }, /* $a5 */ { "ldx", 2, flUseLabel, OH_Direct }, /* $a6 */ { "lda", 2, flUseLabel, OH_DirectIndirectLong }, /* $a7 */ { "tay", 1, flNone, OH_Implicit }, /* $a8 */ - { "lda", 2, flNone, OH_Immediate }, /* $a9 */ + { "lda", 2, flSizeChanges, OH_Immediate65816M }, /* $a9 */ { "tax", 1, flNone, OH_Implicit }, /* $aa */ { "plb", 1, flNone, OH_Implicit }, /* $ab */ { "ldy", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ac */ @@ -239,7 +239,7 @@ const OpcDesc OpcTable_65816[256] = { { "lda", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $bd */ { "ldx", 3, flUseLabel|flAbsOverride, OH_AbsoluteY }, /* $be */ { "lda", 4, flUseLabel, OH_AbsoluteLongX }, /* $bf */ - { "cpy", 2, flNone, OH_Immediate }, /* $c0 */ + { "cpy", 2, flSizeChanges, OH_Immediate65816X }, /* $c0 */ { "cmp", 2, flUseLabel, OH_DirectXIndirect }, /* $c1 */ { "rep", 2, flNone, OH_Immediate }, /* $c2 */ { "cmp", 2, flNone, OH_StackRelative }, /* $c3 */ @@ -248,7 +248,7 @@ const OpcDesc OpcTable_65816[256] = { { "dec", 2, flUseLabel, OH_Direct }, /* $c6 */ { "cmp", 2, flUseLabel, OH_DirectIndirectLong }, /* $c7 */ { "iny", 1, flNone, OH_Implicit }, /* $c8 */ - { "cmp", 2, flNone, OH_Immediate }, /* $c9 */ + { "cmp", 2, flSizeChanges, OH_Immediate65816M }, /* $c9 */ { "dex", 1, flNone, OH_Implicit }, /* $ca */ { "wai", 1, flNone, OH_Implicit }, /* $cb */ { "cpy", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $cc */ @@ -271,7 +271,7 @@ const OpcDesc OpcTable_65816[256] = { { "cmp", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $dd */ { "dec", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $de */ { "cmp", 4, flUseLabel, OH_AbsoluteLongX }, /* $df */ - { "cpx", 2, flNone, OH_Immediate }, /* $e0 */ + { "cpx", 2, flSizeChanges, OH_Immediate65816X }, /* $e0 */ { "sbc", 2, flUseLabel, OH_DirectXIndirect }, /* $e1 */ { "sep", 2, flNone, OH_Immediate }, /* $e2 */ { "sbc", 2, flNone, OH_StackRelative }, /* $e3 */ @@ -280,7 +280,7 @@ const OpcDesc OpcTable_65816[256] = { { "inc", 2, flUseLabel, OH_Direct }, /* $e6 */ { "sbc", 2, flUseLabel, OH_DirectIndirectLong }, /* $e7 */ { "inx", 1, flNone, OH_Implicit }, /* $e8 */ - { "sbc", 2, flNone, OH_Immediate }, /* $e9 */ + { "sbc", 2, flSizeChanges, OH_Immediate65816M }, /* $e9 */ { "nop", 1, flNone, OH_Implicit }, /* $ea */ { "xba", 1, flNone, OH_Implicit }, /* $eb */ { "cpx", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ec */ diff --git a/src/da65/opcdesc.h b/src/da65/opcdesc.h index 399a0962d..6baffe377 100644 --- a/src/da65/opcdesc.h +++ b/src/da65/opcdesc.h @@ -53,7 +53,8 @@ enum { flLabel = flUseLabel|flGenLabel, /* Generate and use a label */ flIllegal = 0x10, /* Illegal instruction */ flAbsOverride = 0x20, /* Need a: override */ - flFarOverride = 0x40 /* Need f: override */ + flFarOverride = 0x40, /* Need f: override */ + flSizeChanges = 0x80 /* 65816: size may change */ }; /* Forward/typedef for struct OpcDesc */ From 4b04f81d3773321a14d998915d40b408c5e7d4e1 Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Wed, 12 Oct 2022 14:59:51 +0300 Subject: [PATCH 1868/2710] Fix jsl length --- src/da65/opc65816.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/da65/opc65816.c b/src/da65/opc65816.c index 877e5536f..7457a25c2 100644 --- a/src/da65/opc65816.c +++ b/src/da65/opc65816.c @@ -81,7 +81,7 @@ const OpcDesc OpcTable_65816[256] = { { "ora", 4, flUseLabel, OH_AbsoluteLongX }, /* $1f */ { "jsr", 3, flLabel, OH_JsrAbsolute }, /* $20 */ { "and", 2, flUseLabel, OH_DirectXIndirect }, /* $21 */ - { "jsl", 3, flLabel, OH_AbsoluteLong }, /* $22 */ + { "jsl", 4, flLabel, OH_AbsoluteLong }, /* $22 */ { "and", 2, flNone, OH_StackRelative }, /* $23 */ { "bit", 2, flUseLabel, OH_Direct }, /* $24 */ { "and", 2, flUseLabel, OH_Direct }, /* $25 */ From 65907b1f105b52af2b9b263425056cbea2019587 Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Wed, 12 Oct 2022 15:16:24 +0300 Subject: [PATCH 1869/2710] Output MX states --- src/da65/main.c | 20 ++++++++++++++++++++ src/da65/output.c | 20 ++++++++++++++++++++ src/da65/output.h | 6 ++++++ 3 files changed, 46 insertions(+) diff --git a/src/da65/main.c b/src/da65/main.c index 8d68dc4cc..67a01dc3b 100644 --- a/src/da65/main.c +++ b/src/da65/main.c @@ -64,6 +64,8 @@ #include "segment.h" +static unsigned PrevAddrMode; + /*****************************************************************************/ /* Code */ @@ -442,6 +444,22 @@ static void OneOpcode (unsigned RemainingBytes) ** following insn, fall through to byte mode. */ if (D->Size <= RemainingBytes) { + if (CPU == CPU_65816) { + const unsigned AddrMode = GetAttr (PC) & at65816Mask; + if (PrevAddrMode != AddrMode) { + if ((PrevAddrMode & atMem8) != (AddrMode & atMem8) || + (PrevAddrMode & atMem16) != (AddrMode & atMem16)) { + OutputMFlag(!!(AddrMode & atMem8)); + } + if ((PrevAddrMode & atIdx8) != (AddrMode & atIdx8) || + (PrevAddrMode & atIdx16) != (AddrMode & atIdx16)) { + OutputXFlag(!!(AddrMode & atIdx8)); + } + + PrevAddrMode = AddrMode; + } + } + /* Output labels within the next insn */ for (I = 1; I < D->Size; ++I) { ForwardLabel (I); @@ -517,6 +535,8 @@ static void OnePass (void) { unsigned Count; + PrevAddrMode = 0; + /* Disassemble until nothing left */ while ((Count = GetRemainingBytes()) > 0) { OneOpcode (Count); diff --git a/src/da65/output.c b/src/da65/output.c index 5b0b6b79c..8e786e130 100644 --- a/src/da65/output.c +++ b/src/da65/output.c @@ -401,3 +401,23 @@ void OutputSettings (void) LineFeed (); LineFeed (); } + + + +void OutputMFlag (unsigned char enabled) +/* Output the 65816 M-flag state */ +{ + Indent (MCol); + Output (enabled ? ".a8" : ".a16"); + LineFeed (); +} + + + +void OutputXFlag (unsigned char enabled) +/* Output the 65816 X-flag state */ +{ + Indent (MCol); + Output (enabled ? ".i8" : ".i16"); + LineFeed (); +} diff --git a/src/da65/output.h b/src/da65/output.h index 13ea0cc85..bc20aace0 100644 --- a/src/da65/output.h +++ b/src/da65/output.h @@ -108,6 +108,12 @@ void LineComment (unsigned PC, unsigned Count); void OutputSettings (void); /* Output CPU and other settings */ +void OutputMFlag (unsigned char enabled); +/* Output the 65816 M-flag state */ + +void OutputXFlag (unsigned char enabled); +/* Output the 65816 X-flag state */ + /* End of output.h */ From db351b42285e9e4cf9997beeabc84cff00e1cb5a Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Wed, 12 Oct 2022 15:36:28 +0300 Subject: [PATCH 1870/2710] Output remaining long labels --- src/da65/labels.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/da65/labels.c b/src/da65/labels.c index 5ca303a33..4cae0316a 100644 --- a/src/da65/labels.c +++ b/src/da65/labels.c @@ -447,6 +447,7 @@ void DefOutOfRangeLabels (void) /* Output any labels that are out of the loaded code range */ { unsigned long Addr; + unsigned i; SeparatorLine (); @@ -469,5 +470,10 @@ void DefOutOfRangeLabels (void) DefOutOfRangeLabel (Addr++); } + /* 65816 long range */ + for (i = 0; i < LongLabelsUsed; i++) { + DefOutOfRangeLabel (LongSymAddr[i]); + } + SeparatorLine (); } From b90bf258e2e27ca0bf592d9fa5de38adc2781e2d Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Wed, 12 Oct 2022 16:02:37 +0300 Subject: [PATCH 1871/2710] Implement far override --- src/da65/handler.c | 4 +++- src/da65/opc65816.c | 36 ++++++++++++++++++------------------ 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/da65/handler.c b/src/da65/handler.c index 97c79db6d..f2d3ecab3 100644 --- a/src/da65/handler.c +++ b/src/da65/handler.c @@ -99,7 +99,9 @@ static const char* GetAbsOverride (unsigned Flags, unsigned Addr) ** string, otherwise return the empty string. */ { - if ((Flags & flAbsOverride) != 0 && Addr < 0x100) { + if ((Flags & flFarOverride) != 0 && Addr < 0x10000) { + return "f:"; + } else if ((Flags & flAbsOverride) != 0 && Addr < 0x100) { return "a:"; } else { return ""; diff --git a/src/da65/opc65816.c b/src/da65/opc65816.c index 7457a25c2..64629506c 100644 --- a/src/da65/opc65816.c +++ b/src/da65/opc65816.c @@ -62,7 +62,7 @@ const OpcDesc OpcTable_65816[256] = { { "tsb", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $0c */ { "ora", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $0d */ { "asl", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $0e */ - { "ora", 4, flUseLabel, OH_AbsoluteLong }, /* $0f */ + { "ora", 4, flUseLabel|flFarOverride, OH_AbsoluteLong }, /* $0f */ { "bpl", 2, flLabel, OH_Relative }, /* $10 */ { "ora", 2, flUseLabel, OH_DirectIndirectY }, /* $11 */ { "ora", 2, flUseLabel, OH_DirectIndirect }, /* $12 */ @@ -78,10 +78,10 @@ const OpcDesc OpcTable_65816[256] = { { "trb", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $1c */ { "ora", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $1d */ { "asl", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $1e */ - { "ora", 4, flUseLabel, OH_AbsoluteLongX }, /* $1f */ + { "ora", 4, flUseLabel|flFarOverride, OH_AbsoluteLongX }, /* $1f */ { "jsr", 3, flLabel, OH_JsrAbsolute }, /* $20 */ { "and", 2, flUseLabel, OH_DirectXIndirect }, /* $21 */ - { "jsl", 4, flLabel, OH_AbsoluteLong }, /* $22 */ + { "jsl", 4, flLabel|flFarOverride, OH_AbsoluteLong }, /* $22 */ { "and", 2, flNone, OH_StackRelative }, /* $23 */ { "bit", 2, flUseLabel, OH_Direct }, /* $24 */ { "and", 2, flUseLabel, OH_Direct }, /* $25 */ @@ -94,7 +94,7 @@ const OpcDesc OpcTable_65816[256] = { { "bit", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $2c */ { "and", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $2d */ { "rol", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $2e */ - { "and", 4, flUseLabel, OH_AbsoluteLong }, /* $2f */ + { "and", 4, flUseLabel|flFarOverride, OH_AbsoluteLong }, /* $2f */ { "bmi", 2, flLabel, OH_Relative }, /* $30 */ { "and", 2, flUseLabel, OH_DirectIndirectY }, /* $31 */ { "and", 2, flUseLabel, OH_DirectIndirect }, /* $32 */ @@ -110,7 +110,7 @@ const OpcDesc OpcTable_65816[256] = { { "bit", 3, flUseLabel, OH_AbsoluteX }, /* $3c */ { "and", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $3d */ { "rol", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $3e */ - { "and", 4, flUseLabel, OH_AbsoluteLongX }, /* $3f */ + { "and", 4, flUseLabel|flFarOverride, OH_AbsoluteLongX }, /* $3f */ { "rti", 1, flNone, OH_Rts }, /* $40 */ { "eor", 2, flUseLabel, OH_DirectXIndirect }, /* $41 */ { "wdm", 2, flNone, OH_Implicit }, /* $42 */ @@ -126,7 +126,7 @@ const OpcDesc OpcTable_65816[256] = { { "jmp", 3, flLabel, OH_JmpAbsolute }, /* $4c */ { "eor", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $4d */ { "lsr", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $4e */ - { "eor", 4, flUseLabel, OH_AbsoluteLong }, /* $4f */ + { "eor", 4, flUseLabel|flFarOverride, OH_AbsoluteLong }, /* $4f */ { "bvc", 2, flLabel, OH_Relative }, /* $50 */ { "eor", 2, flUseLabel, OH_DirectIndirectY }, /* $51 */ { "eor", 2, flUseLabel, OH_DirectIndirect }, /* $52 */ @@ -139,10 +139,10 @@ const OpcDesc OpcTable_65816[256] = { { "eor", 3, flUseLabel, OH_AbsoluteY }, /* $59 */ { "phy", 1, flNone, OH_Implicit }, /* $5a */ { "tcd", 1, flNone, OH_Implicit }, /* $5b */ - { "jml", 4, flLabel, OH_AbsoluteLong }, /* $5c */ + { "jml", 4, flLabel|flFarOverride, OH_AbsoluteLong }, /* $5c */ { "eor", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $5d */ { "lsr", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $5e */ - { "eor", 4, flUseLabel, OH_AbsoluteLongX }, /* $5f */ + { "eor", 4, flUseLabel|flFarOverride, OH_AbsoluteLongX }, /* $5f */ { "rts", 1, flNone, OH_Rts }, /* $60 */ { "adc", 2, flUseLabel, OH_DirectXIndirect }, /* $61 */ { "per", 3, flLabel, OH_RelativeLong }, /* $62 */ @@ -158,7 +158,7 @@ const OpcDesc OpcTable_65816[256] = { { "jmp", 3, flLabel, OH_JmpAbsoluteIndirect }, /* $6c */ { "adc", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $6d */ { "ror", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $6e */ - { "adc", 4, flUseLabel, OH_AbsoluteLong }, /* $6f */ + { "adc", 4, flUseLabel|flFarOverride, OH_AbsoluteLong }, /* $6f */ { "bvs", 2, flLabel, OH_Relative }, /* $70 */ { "adc", 2, flUseLabel, OH_DirectIndirectY }, /* $71 */ { "adc", 2, flUseLabel, OH_DirectIndirect }, /* $72 */ @@ -174,7 +174,7 @@ const OpcDesc OpcTable_65816[256] = { { "jmp", 3, flLabel, OH_AbsoluteXIndirect }, /* $7c */ { "adc", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $7d */ { "ror", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $7e */ - { "adc", 4, flUseLabel, OH_AbsoluteLongX }, /* $7f */ + { "adc", 4, flUseLabel|flFarOverride, OH_AbsoluteLongX }, /* $7f */ { "bra", 2, flLabel, OH_Relative }, /* $80 */ { "sta", 2, flUseLabel, OH_DirectXIndirect }, /* $81 */ { "brl", 3, flLabel, OH_RelativeLong }, /* $82 */ @@ -190,7 +190,7 @@ const OpcDesc OpcTable_65816[256] = { { "sty", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $8c */ { "sta", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $8d */ { "stx", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $8e */ - { "sta", 4, flUseLabel, OH_AbsoluteLong }, /* $8f */ + { "sta", 4, flUseLabel|flFarOverride, OH_AbsoluteLong }, /* $8f */ { "bcc", 2, flLabel, OH_Relative }, /* $90 */ { "sta", 2, flUseLabel, OH_DirectIndirectY }, /* $91 */ { "sta", 2, flUseLabel, OH_DirectIndirect }, /* $92 */ @@ -206,7 +206,7 @@ const OpcDesc OpcTable_65816[256] = { { "stz", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $9c */ { "sta", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $9d */ { "stz", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $9e */ - { "sta", 4, flUseLabel, OH_AbsoluteLongX }, /* $9f */ + { "sta", 4, flUseLabel|flFarOverride, OH_AbsoluteLongX }, /* $9f */ { "ldy", 2, flSizeChanges, OH_Immediate65816X }, /* $a0 */ { "lda", 2, flUseLabel, OH_DirectXIndirect }, /* $a1 */ { "ldx", 2, flSizeChanges, OH_Immediate65816X }, /* $a2 */ @@ -222,7 +222,7 @@ const OpcDesc OpcTable_65816[256] = { { "ldy", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ac */ { "lda", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ad */ { "ldx", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ae */ - { "lda", 4, flUseLabel, OH_AbsoluteLong }, /* $af */ + { "lda", 4, flUseLabel|flFarOverride, OH_AbsoluteLong }, /* $af */ { "bcs", 2, flLabel, OH_Relative }, /* $b0 */ { "lda", 2, flUseLabel, OH_DirectIndirectY }, /* $b1 */ { "lda", 2, flUseLabel, OH_DirectIndirect }, /* $b2 */ @@ -238,7 +238,7 @@ const OpcDesc OpcTable_65816[256] = { { "ldy", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $bc */ { "lda", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $bd */ { "ldx", 3, flUseLabel|flAbsOverride, OH_AbsoluteY }, /* $be */ - { "lda", 4, flUseLabel, OH_AbsoluteLongX }, /* $bf */ + { "lda", 4, flUseLabel|flFarOverride, OH_AbsoluteLongX }, /* $bf */ { "cpy", 2, flSizeChanges, OH_Immediate65816X }, /* $c0 */ { "cmp", 2, flUseLabel, OH_DirectXIndirect }, /* $c1 */ { "rep", 2, flNone, OH_Immediate }, /* $c2 */ @@ -254,7 +254,7 @@ const OpcDesc OpcTable_65816[256] = { { "cpy", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $cc */ { "cmp", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $cd */ { "dec", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ce */ - { "cmp", 4, flUseLabel, OH_AbsoluteLong }, /* $cf */ + { "cmp", 4, flUseLabel|flFarOverride, OH_AbsoluteLong }, /* $cf */ { "bne", 2, flLabel, OH_Relative }, /* $d0 */ { "cmp", 2, flUseLabel, OH_DirectIndirectY }, /* $d1 */ { "cmp", 2, flUseLabel, OH_DirectIndirect }, /* $d2 */ @@ -270,7 +270,7 @@ const OpcDesc OpcTable_65816[256] = { { "jml", 3, flLabel, OH_AbsoluteIndirect }, /* $dc */ { "cmp", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $dd */ { "dec", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $de */ - { "cmp", 4, flUseLabel, OH_AbsoluteLongX }, /* $df */ + { "cmp", 4, flUseLabel|flFarOverride, OH_AbsoluteLongX }, /* $df */ { "cpx", 2, flSizeChanges, OH_Immediate65816X }, /* $e0 */ { "sbc", 2, flUseLabel, OH_DirectXIndirect }, /* $e1 */ { "sep", 2, flNone, OH_Immediate }, /* $e2 */ @@ -286,7 +286,7 @@ const OpcDesc OpcTable_65816[256] = { { "cpx", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ec */ { "sbc", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ed */ { "inc", 3, flUseLabel|flAbsOverride, OH_Absolute }, /* $ee */ - { "sbc", 4, flUseLabel, OH_AbsoluteLong }, /* $ef */ + { "sbc", 4, flUseLabel|flFarOverride, OH_AbsoluteLong }, /* $ef */ { "beq", 2, flLabel, OH_Relative }, /* $f0 */ { "sbc", 2, flUseLabel, OH_DirectIndirectY }, /* $f1 */ { "sbc", 2, flUseLabel, OH_DirectIndirect }, /* $f2 */ @@ -302,5 +302,5 @@ const OpcDesc OpcTable_65816[256] = { { "jsr", 3, flLabel, OH_AbsoluteXIndirect }, /* $fc */ { "sbc", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $fd */ { "inc", 3, flUseLabel|flAbsOverride, OH_AbsoluteX }, /* $fe */ - { "sbc", 4, flUseLabel, OH_AbsoluteLongX }, /* $ff */ + { "sbc", 4, flUseLabel|flFarOverride, OH_AbsoluteLongX }, /* $ff */ }; From 3ea999f0349d0e8233e95e94d858d9547a309ec2 Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Mon, 17 Oct 2022 12:50:34 +0300 Subject: [PATCH 1872/2710] Correct mvn, mvp, pei --- src/da65/handler.c | 13 +++++++++++++ src/da65/handler.h | 1 + src/da65/opc65816.c | 6 +++--- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/da65/handler.c b/src/da65/handler.c index f2d3ecab3..79b3192de 100644 --- a/src/da65/handler.c +++ b/src/da65/handler.c @@ -678,6 +678,19 @@ void OH_BlockMove (const OpcDesc* D) +void OH_BlockMove65816 (const OpcDesc* D) +{ + /* Get source operand */ + unsigned Src = GetCodeByte (PC+2); + /* Get destination operand */ + unsigned Dst = GetCodeByte (PC+1); + + /* Output the line */ + OneLine (D, "#$%02X, #$%02X", Src, Dst); +} + + + void OH_AbsoluteXIndirect (const OpcDesc* D attribute ((unused))) { /* Get the operand */ diff --git a/src/da65/handler.h b/src/da65/handler.h index 2bfaed9c3..ee9b18bbc 100644 --- a/src/da65/handler.h +++ b/src/da65/handler.h @@ -91,6 +91,7 @@ void OH_StackRelativeIndirectY4510 (const OpcDesc*); void OH_DirectIndirectLong (const OpcDesc*); void OH_DirectIndirectLongY (const OpcDesc*); void OH_BlockMove (const OpcDesc*); +void OH_BlockMove65816 (const OpcDesc*); void OH_AbsoluteXIndirect (const OpcDesc*); /* Mitsubishi 740 */ diff --git a/src/da65/opc65816.c b/src/da65/opc65816.c index 64629506c..06272f318 100644 --- a/src/da65/opc65816.c +++ b/src/da65/opc65816.c @@ -115,7 +115,7 @@ const OpcDesc OpcTable_65816[256] = { { "eor", 2, flUseLabel, OH_DirectXIndirect }, /* $41 */ { "wdm", 2, flNone, OH_Implicit }, /* $42 */ { "eor", 2, flNone, OH_StackRelative }, /* $43 */ - { "mvp", 3, flNone, OH_BlockMove }, /* $44 */ + { "mvp", 3, flNone, OH_BlockMove65816 }, /* $44 */ { "eor", 2, flUseLabel, OH_Direct }, /* $45 */ { "lsr", 2, flUseLabel, OH_Direct }, /* $46 */ { "eor", 2, flUseLabel, OH_DirectIndirectLong }, /* $47 */ @@ -131,7 +131,7 @@ const OpcDesc OpcTable_65816[256] = { { "eor", 2, flUseLabel, OH_DirectIndirectY }, /* $51 */ { "eor", 2, flUseLabel, OH_DirectIndirect }, /* $52 */ { "eor", 2, flNone, OH_StackRelativeIndirectY}, /* $53 */ - { "mvn", 3, flNone, OH_BlockMove }, /* $54 */ + { "mvn", 3, flNone, OH_BlockMove65816 }, /* $54 */ { "eor", 2, flUseLabel, OH_DirectX }, /* $55 */ { "lsr", 2, flUseLabel, OH_DirectX }, /* $56 */ { "eor", 2, flUseLabel, OH_DirectIndirectLongY }, /* $57 */ @@ -259,7 +259,7 @@ const OpcDesc OpcTable_65816[256] = { { "cmp", 2, flUseLabel, OH_DirectIndirectY }, /* $d1 */ { "cmp", 2, flUseLabel, OH_DirectIndirect }, /* $d2 */ { "cmp", 2, flNone, OH_StackRelativeIndirectY}, /* $d3 */ - { "pei", 2, flUseLabel, OH_Direct }, /* $d4 */ + { "pei", 2, flUseLabel, OH_DirectIndirect }, /* $d4 */ { "cmp", 2, flUseLabel, OH_DirectX }, /* $d5 */ { "dec", 2, flUseLabel, OH_DirectX }, /* $d6 */ { "cmp", 2, flUseLabel, OH_DirectIndirectLongY }, /* $d7 */ From 9aae1efd033fea2252670fcaafad2b6cc370d516 Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Mon, 17 Oct 2022 12:50:59 +0300 Subject: [PATCH 1873/2710] Add a da65 65186 test --- test/dasm/65816.cfg | 7 ++ test/dasm/65816.info | 7 ++ test/dasm/Makefile | 17 ++- test/dasm/test65816.s | 273 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 303 insertions(+), 1 deletion(-) create mode 100644 test/dasm/65816.cfg create mode 100644 test/dasm/65816.info create mode 100644 test/dasm/test65816.s diff --git a/test/dasm/65816.cfg b/test/dasm/65816.cfg new file mode 100644 index 000000000..620439c7b --- /dev/null +++ b/test/dasm/65816.cfg @@ -0,0 +1,7 @@ +MEMORY { + ROM: start = $8000, size = $8000; +} + +SEGMENTS { + CODE: load = ROM; +} diff --git a/test/dasm/65816.info b/test/dasm/65816.info new file mode 100644 index 000000000..2a3394680 --- /dev/null +++ b/test/dasm/65816.info @@ -0,0 +1,7 @@ +GLOBAL { + startaddr $8000; +}; + +RANGE { START $8000; END $8229; ADDRMODE "MX"; TYPE Code;}; +RANGE { START $822a; END $824b; ADDRMODE "mx"; TYPE Code;}; + diff --git a/test/dasm/Makefile b/test/dasm/Makefile index 542ce7d5e..d9ac7ac21 100644 --- a/test/dasm/Makefile +++ b/test/dasm/Makefile @@ -19,6 +19,8 @@ ifdef QUIET endif CL65 := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) +CA65 := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) +LD65 := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) DA65 := $(if $(wildcard ../../bin/da65*),../../bin/da65,da65) WORKDIR = ../../testwrk/dasm @@ -33,7 +35,7 @@ START = --start-addr 0x8000 .PHONY: all clean SOURCES := $(wildcard *.s) -BINS = $(SOURCES:%disass.s=$(WORKDIR)/%reass.bin) +BINS = $(SOURCES:%disass.s=$(WORKDIR)/%reass.bin) $(WORKDIR)/65816-reass.bin CPUS = $(SOURCES:%-disass.s=%) all: $(BINS) @@ -61,5 +63,18 @@ endef # DISASS_template $(foreach cpu,$(CPUS),$(eval $(call DISASS_template,$(cpu)))) +$(WORKDIR)/test65816.bin: test65816.s | $(WORKDIR) + $(CA65) -o $(WORKDIR)/test65816.o $< + $(LD65) -o $@ -C 65816.cfg $(WORKDIR)/test65816.o + +$(WORKDIR)/65816-reass.s: $(WORKDIR)/test65816.bin + $(DA65) --cpu 65816 -i 65816.info -o $@ $< + +$(WORKDIR)/65816-reass.bin: $(WORKDIR)/65816-reass.s $(ISEQUAL) + $(if $(QUIET),echo dasm/65816-reass.bin) + $(CA65) -o $(WORKDIR)/65816-reass.o $< + $(LD65) -o $@ -C 65816.cfg $(WORKDIR)/65816-reass.o + $(ISEQUAL) --binary $(WORKDIR)/test65816.bin $@ + clean: @$(call RMDIR,$(WORKDIR)) diff --git a/test/dasm/test65816.s b/test/dasm/test65816.s new file mode 100644 index 000000000..3d764fb6e --- /dev/null +++ b/test/dasm/test65816.s @@ -0,0 +1,273 @@ +.setcpu "65816" + +ADC ($10,X) +ADC $32,S +ADC $10 +ADC [$10] +ADC #$54 +ADC $9876 +ADC $FEDBCA +ADC ($10),Y +ADC ($10) +ADC ($32,S),Y +ADC $10,X +ADC [$10],Y +ADC $9876,Y +ADC $9876,X +ADC $FEDCBA,X +SBC ($10,X) +SBC $32,S +SBC $10 +SBC [$10] +SBC #$54 +SBC $9876 +SBC $FEDBCA +SBC ($10),Y +SBC ($10) +SBC ($32,S),Y +SBC $10,X +SBC [$10],Y +SBC $9876,Y +SBC $9876,X +SBC $FEDCBA,X +CMP ($10,X) +CMP $32,S +CMP $10 +CMP [$10] +CMP #$54 +CMP $9876 +CMP $FEDBCA +CMP ($10),Y +CMP ($10) +CMP ($32,S),Y +CMP $10,X +CMP [$10],Y +CMP $9876,Y +CMP $9876,X +CMP $FEDCBA,X +CPX #$54 +CPX $10 +CPX $9876 +CPY #$54 +CPY $10 +CPY $9876 +DEC +DEC $10 +DEC $9876 +DEC $10,X +DEC $9876,X +DEX +DEY +INC +INC $10 +INC $9876 +INC $10,X +INC $9876,X +INX +INY +AND ($10,X) +AND $32,S +AND $10 +AND [$10] +AND #$54 +AND $9876 +AND $FEDBCA +AND ($10),Y +AND ($10) +AND ($32,S),Y +AND $10,X +AND [$10],Y +AND $9876,Y +AND $9876,X +AND $FEDCBA,X +EOR ($10,X) +EOR $32,S +EOR $10 +EOR [$10] +EOR #$54 +EOR $9876 +EOR $FEDBCA +EOR ($10),Y +EOR ($10) +EOR ($32,S),Y +EOR $10,X +EOR [$10],Y +EOR $9876,Y +EOR $9876,X +EOR $FEDCBA,X +ORA ($10,X) +ORA $32,S +ORA $10 +ORA [$10] +ORA #$54 +ORA $9876 +ORA $FEDBCA +ORA ($10),Y +ORA ($10) +ORA ($32,S),Y +ORA $10,X +ORA [$10],Y +ORA $9876,Y +ORA $9876,X +ORA $FEDCBA,X +BIT $10 +BIT $9876 +BIT $10,X +BIT $9876,X +BIT #$54 +TRB $10 +TRB $9876 +TSB $10 +TSB $9876 +ASL $10 +ASL +ASL $9876 +ASL $10,X +ASL $9876,X +LSR $10 +LSR +LSR $9876 +LSR $10,X +LSR $9876,X +ROL $10 +ROL +ROL $9876 +ROL $10,X +ROL $9876,X +ROR $10 +ROR +ROR $9876 +ROR $10,X +ROR $9876,X +LABEL: +BCC LABEL +BCS LABEL +BEQ LABEL +BMI LABEL +BNE LABEL +BPL LABEL +BRA LABEL +BVC LABEL +BVS LABEL +BRL LABEL +JMP $1234 +JMP $FEDCBA +JMP ($1234) +JMP ($1234,X) +JMP [$1234] +JSL $123456 +JSR $1234 +JSR ($1234,X) +RTL +RTS +BRK +RTI +CLC +CLD +CLI +CLV +SEC +SED +SEI +REP #$12 +SEP #$12 +LDA ($10,X) +LDA $32,S +LDA $10 +LDA [$10] +LDA #$54 +LDA $9876 +LDA $FEDBCA +LDA ($10),Y +LDA ($10) +LDA ($32,S),Y +LDA $10,X +LDA [$10],Y +LDA $9876,Y +LDA $9876,X +LDA $FEDCBA,X +LDX #$54 +LDX $10 +LDX $9876 +LDX $10,Y +LDX $9876,Y +LDY #$54 +LDY $10 +LDY $9876 +LDY $10,X +LDY $9876,X +STA ($10,X) +STA $32,S +STA $10 +STA [$10] +STA $9876 +STA $FEDBCA +STA ($10),Y +STA ($10) +STA ($32,S),Y +STA $10,X +STA [$10],Y +STA $9876,Y +STA $9876,X +STA $FEDCBA,X +STX $10 +STX $9876 +STX $10,Y +STY $10 +STY $9876 +STY $10,X +STZ $10 +STZ $10,X +STZ $9876 +STZ $9876,X +MVN #$12,#$34 +MVP #$12,#$34 +NOP +PEA $1234 +PEI ($12) +PER LABEL +PHA +PHX +PHY +PLA +PLX +PLY +PHB +PHD +PHK +PHP +PLB +PLD +PLP +STP +WAI +TAX +TAY +TSX +TXA +TXS +TXY +TYA +TYX +TCD +TCS +TDC +TSC +XBA +XCE + +.a16 +.i16 +longs: +ADC #$5432 +SBC #$5432 +CMP #$5432 +CPX #$5432 +CPY #$5432 +AND #$5432 +EOR #$5432 +ORA #$5432 +BIT #$5432 +LDA #$5432 +LDX #$5432 +LDY #$5432 From 991af3755bd7b8c38ecd15579275bae20e63b919 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 3 Nov 2022 21:46:41 +0800 Subject: [PATCH 1874/2710] Added support for _Static_assert in unions. --- src/cc65/declare.c | 11 +++++++++-- test/val/staticassert.c | 7 +++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index b141a15ef..4950dc8f8 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -882,12 +882,19 @@ static SymEntry* ParseUnionDecl (const char* Name, unsigned* DSFlags) EnterStructLevel (); /* Parse union fields */ - UnionSize = 0; + UnionSize = 0; while (CurTok.Tok != TOK_RCURLY) { /* Get the type of the entry */ DeclSpec Spec; int SignednessSpecified = 0; + + /* Check for a _Static_assert */ + if (CurTok.Tok == TOK_STATIC_ASSERT) { + ParseStaticAssert (); + continue; + } + InitDeclSpec (&Spec); ParseTypeSpec (&Spec, -1, T_QUAL_NONE, &SignednessSpecified); @@ -1030,6 +1037,7 @@ static SymEntry* ParseStructDecl (const char* Name, unsigned* DSFlags) /* Get the type of the entry */ DeclSpec Spec; + int SignednessSpecified = 0; /* Check for a _Static_assert */ if (CurTok.Tok == TOK_STATIC_ASSERT) { @@ -1037,7 +1045,6 @@ static SymEntry* ParseStructDecl (const char* Name, unsigned* DSFlags) continue; } - int SignednessSpecified = 0; InitDeclSpec (&Spec); ParseTypeSpec (&Spec, -1, T_QUAL_NONE, &SignednessSpecified); diff --git a/test/val/staticassert.c b/test/val/staticassert.c index e43eeec8d..3338f7a4a 100644 --- a/test/val/staticassert.c +++ b/test/val/staticassert.c @@ -65,6 +65,13 @@ struct S { int b; }; +/* _Static_assert can also appear in unions. */ +union U { + int a; + _Static_assert (1, "1 should still be true."); + int b; +}; + int main (void) { From 8a7f5663876d8ffb5f811480f89a5e6af4efd306 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 3 Nov 2022 21:46:42 +0800 Subject: [PATCH 1875/2710] Fixed support for storage class specifiers after type specifiers. --- src/cc65/compile.c | 2 +- src/cc65/declare.c | 248 +++++++++++++++++-------------- src/cc65/declare.h | 18 ++- src/cc65/expr.c | 2 +- src/cc65/locals.c | 2 +- test/misc/int-static-1888.c | 10 -- test/val/decl-mixed-specifiers.c | 19 +++ 7 files changed, 178 insertions(+), 123 deletions(-) delete mode 100644 test/misc/int-static-1888.c create mode 100644 test/val/decl-mixed-specifiers.c diff --git a/src/cc65/compile.c b/src/cc65/compile.c index a8ef56af6..f15c5bc54 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -123,7 +123,7 @@ static void Parse (void) } /* Read variable defs and functions */ - ParseDeclSpec (&Spec, SC_EXTERN | SC_STATIC, T_INT); + ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT, SC_EXTERN | SC_STATIC); /* Don't accept illegal storage classes */ if ((Spec.StorageClass & SC_TYPEMASK) == 0) { diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 4950dc8f8..f3674d711 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -72,8 +72,7 @@ -static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, - int* SignednessSpecified); +static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpecified); /* Parse a type specifier */ @@ -84,6 +83,75 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, +static unsigned ParseOneStorageClass (void) +/* Parse and return a storage class specifier */ +{ + unsigned StorageClass = 0; + + /* Check the storage class given */ + switch (CurTok.Tok) { + + case TOK_EXTERN: + StorageClass = SC_EXTERN | SC_STATIC; + NextToken (); + break; + + case TOK_STATIC: + StorageClass = SC_STATIC; + NextToken (); + break; + + case TOK_REGISTER: + StorageClass = SC_REGISTER | SC_STATIC; + NextToken (); + break; + + case TOK_AUTO: + StorageClass = SC_AUTO; + NextToken (); + break; + + case TOK_TYPEDEF: + StorageClass = SC_TYPEDEF; + NextToken (); + break; + + default: + break; + } + + return StorageClass; +} + + + +static int ParseStorageClass (DeclSpec* D) +/* Parse storage class specifiers. Return true if a specifier is read even if +** it was duplicated or disallowed. */ +{ + /* Check the storage class given */ + unsigned StorageClass = ParseOneStorageClass (); + + if (StorageClass == 0) { + return 0; + } + + while (StorageClass != 0) { + if (D->StorageClass == 0) { + D->StorageClass = StorageClass; + } else if (D->StorageClass == StorageClass) { + Warning ("Duplicate storage class specifier"); + } else { + Error ("Conflicting storage class specifier"); + } + StorageClass = ParseOneStorageClass (); + } + + return 1; +} + + + static void DuplicateQualifier (const char* Name) /* Print an error message */ { @@ -92,9 +160,9 @@ static void DuplicateQualifier (const char* Name) -static TypeCode OptionalQualifiers (TypeCode Allowed) +static TypeCode OptionalQualifiers (TypeCode Qualifiers, TypeCode Allowed) /* Read type qualifiers if we have any. Allowed specifies the allowed -** qualifiers. +** qualifiers. Return any read qualifiers even if they caused errors. */ { /* We start without any qualifiers */ @@ -107,7 +175,7 @@ static TypeCode OptionalQualifiers (TypeCode Allowed) case TOK_CONST: if (Allowed & T_QUAL_CONST) { - if (Q & T_QUAL_CONST) { + if (Qualifiers & T_QUAL_CONST) { DuplicateQualifier ("const"); } Q |= T_QUAL_CONST; @@ -118,7 +186,7 @@ static TypeCode OptionalQualifiers (TypeCode Allowed) case TOK_VOLATILE: if (Allowed & T_QUAL_VOLATILE) { - if (Q & T_QUAL_VOLATILE) { + if (Qualifiers & T_QUAL_VOLATILE) { DuplicateQualifier ("volatile"); } Q |= T_QUAL_VOLATILE; @@ -129,7 +197,7 @@ static TypeCode OptionalQualifiers (TypeCode Allowed) case TOK_RESTRICT: if (Allowed & T_QUAL_RESTRICT) { - if (Q & T_QUAL_RESTRICT) { + if (Qualifiers & T_QUAL_RESTRICT) { DuplicateQualifier ("restrict"); } Q |= T_QUAL_RESTRICT; @@ -140,7 +208,7 @@ static TypeCode OptionalQualifiers (TypeCode Allowed) case TOK_NEAR: if (Allowed & T_QUAL_NEAR) { - if (Q & T_QUAL_NEAR) { + if (Qualifiers & T_QUAL_NEAR) { DuplicateQualifier ("near"); } Q |= T_QUAL_NEAR; @@ -151,7 +219,7 @@ static TypeCode OptionalQualifiers (TypeCode Allowed) case TOK_FAR: if (Allowed & T_QUAL_FAR) { - if (Q & T_QUAL_FAR) { + if (Qualifiers & T_QUAL_FAR) { DuplicateQualifier ("far"); } Q |= T_QUAL_FAR; @@ -162,7 +230,7 @@ static TypeCode OptionalQualifiers (TypeCode Allowed) case TOK_FASTCALL: if (Allowed & T_QUAL_FASTCALL) { - if (Q & T_QUAL_FASTCALL) { + if (Qualifiers & T_QUAL_FASTCALL) { DuplicateQualifier ("fastcall"); } Q |= T_QUAL_FASTCALL; @@ -173,7 +241,7 @@ static TypeCode OptionalQualifiers (TypeCode Allowed) case TOK_CDECL: if (Allowed & T_QUAL_CDECL) { - if (Q & T_QUAL_CDECL) { + if (Qualifiers & T_QUAL_CDECL) { DuplicateQualifier ("cdecl"); } Q |= T_QUAL_CDECL; @@ -187,13 +255,16 @@ static TypeCode OptionalQualifiers (TypeCode Allowed) } + /* Combine with newly read qualifiers */ + Qualifiers |= Q; + /* Skip the token */ NextToken (); } Done: /* We cannot have more than one address size far qualifier */ - switch (Q & T_QUAL_ADDRSIZE) { + switch (Qualifiers & T_QUAL_ADDRSIZE) { case T_QUAL_NONE: case T_QUAL_NEAR: @@ -202,11 +273,11 @@ Done: default: Error ("Cannot specify more than one address size qualifier"); - Q &= ~T_QUAL_ADDRSIZE; + Qualifiers &= ~T_QUAL_ADDRSIZE; } /* We cannot have more than one calling convention specifier */ - switch (Q & T_QUAL_CCONV) { + switch (Qualifiers & T_QUAL_CCONV) { case T_QUAL_NONE: case T_QUAL_FASTCALL: @@ -215,15 +286,41 @@ Done: default: Error ("Cannot specify more than one calling convention qualifier"); - Q &= ~T_QUAL_CCONV; + Qualifiers &= ~T_QUAL_CCONV; } - /* Return the qualifiers read */ + /* Return any qualifiers just read */ return Q; } +static void OptionalSpecifiers (DeclSpec* Spec, TypeCode* Qualifiers, typespec_t TSFlags) +/* Read storage specifiers and/or type qualifiers if we have any. Storage class +** specifiers require the corresponding typespec_t flag set to be allowed, and +** only const and volatile type qualifiers are allowed under any circumstance. +** Read storage class specifiers are output in *Spec and type qualifiers are +** output in *Qualifiers with error checking. +*/ +{ + TypeCode Q = T_QUAL_NONE; + int Continue; + + do { + /* There may be type qualifiers *before* any storage class specifiers */ + Q = OptionalQualifiers (*Qualifiers, T_QUAL_CONST | T_QUAL_VOLATILE); + *Qualifiers |= Q; + + /* Parse storage class specifiers anyway then check */ + Continue = ParseStorageClass (Spec); + if (Continue && (TSFlags & (TS_STORAGE_CLASS_SPEC | TS_FUNCTION_SPEC)) == 0) { + Error ("Unexpected storage class specified"); + } + } while (Continue || Q != T_QUAL_NONE); +} + + + static void OptionalInt (void) /* Eat an optional "int" token */ { @@ -396,48 +493,6 @@ static void FixQualifiers (Type* DataType) -static unsigned ParseOneStorageClass (void) -/* Parse and return a storage class */ -{ - unsigned StorageClass = 0; - - /* Check the storage class given */ - switch (CurTok.Tok) { - - case TOK_EXTERN: - StorageClass = SC_EXTERN | SC_STATIC; - NextToken (); - break; - - case TOK_STATIC: - StorageClass = SC_STATIC; - NextToken (); - break; - - case TOK_REGISTER: - StorageClass = SC_REGISTER | SC_STATIC; - NextToken (); - break; - - case TOK_AUTO: - StorageClass = SC_AUTO; - NextToken (); - break; - - case TOK_TYPEDEF: - StorageClass = SC_TYPEDEF; - NextToken (); - break; - - default: - break; - } - - return StorageClass; -} - - - static void CheckArrayElementType (Type* DataType) /* Check if data type consists of arrays of incomplete element types */ { @@ -469,33 +524,6 @@ static void CheckArrayElementType (Type* DataType) -static void ParseStorageClass (DeclSpec* D, unsigned DefStorage) -/* Parse a storage class */ -{ - /* Assume we're using an explicit storage class */ - D->Flags &= ~DS_DEF_STORAGE; - - /* Check the storage class given */ - D->StorageClass = ParseOneStorageClass (); - if (D->StorageClass == 0) { - /* No storage class given, use default */ - D->Flags |= DS_DEF_STORAGE; - D->StorageClass = DefStorage; - } else { - unsigned StorageClass = ParseOneStorageClass (); - while (StorageClass != 0) { - if (D->StorageClass == StorageClass) { - Warning ("Duplicate storage class specifier"); - } else { - Error ("Conflicting storage class specifier"); - } - StorageClass = ParseOneStorageClass (); - } - } -} - - - static SymEntry* ESUForwardDecl (const char* Name, unsigned Flags, unsigned* DSFlags) /* Handle an enum, struct or union forward decl */ { @@ -896,7 +924,7 @@ static SymEntry* ParseUnionDecl (const char* Name, unsigned* DSFlags) } InitDeclSpec (&Spec); - ParseTypeSpec (&Spec, -1, T_QUAL_NONE, &SignednessSpecified); + ParseTypeSpec (&Spec, TS_DEFAULT_TYPE_NONE, &SignednessSpecified); /* Read fields with this type */ while (1) { @@ -1046,7 +1074,7 @@ static SymEntry* ParseStructDecl (const char* Name, unsigned* DSFlags) } InitDeclSpec (&Spec); - ParseTypeSpec (&Spec, -1, T_QUAL_NONE, &SignednessSpecified); + ParseTypeSpec (&Spec, TS_DEFAULT_TYPE_NONE, &SignednessSpecified); /* Read fields with this type */ while (1) { @@ -1212,8 +1240,7 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { -static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, - int* SignednessSpecified) +static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpecified) /* Parse a type specifier. Store whether one of "signed" or "unsigned" was ** specified, so bit-fields of unspecified signedness can be treated as ** unsigned; without special handling, it would be treated as signed. @@ -1221,6 +1248,7 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, { ident Ident; SymEntry* TagEntry; + TypeCode Qualifiers = T_QUAL_NONE; if (SignednessSpecified != NULL) { *SignednessSpecified = 0; @@ -1229,8 +1257,8 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, /* Assume we have an explicit type */ D->Flags &= ~DS_DEF_TYPE; - /* Read type qualifiers if we have any */ - Qualifiers |= OptionalQualifiers (T_QUAL_CONST | T_QUAL_VOLATILE); + /* Read storage specifiers and/or type qualifiers if we have any */ + OptionalSpecifiers (D, &Qualifiers, TSFlags); /* Look at the data type */ switch (CurTok.Tok) { @@ -1477,20 +1505,21 @@ static void ParseTypeSpec (DeclSpec* D, long Default, TypeCode Qualifiers, /* FALL THROUGH */ default: - if (Default < 0) { + if ((TSFlags & TS_MASK_DEFAULT_TYPE) != TS_DEFAULT_TYPE_INT) { Error ("Type expected"); D->Type[0].C = T_INT; D->Type[1].C = T_END; } else { D->Flags |= DS_DEF_TYPE; - D->Type[0].C = (TypeCode) Default; + D->Type[0].C = T_INT; D->Type[1].C = T_END; } break; } - /* There may also be qualifiers *after* the initial type */ - D->Type[0].C |= (Qualifiers | OptionalQualifiers (T_QUAL_CONST | T_QUAL_VOLATILE)); + /* There may also be specifiers/qualifiers *after* the initial type */ + OptionalSpecifiers (D, &Qualifiers, TSFlags); + D->Type[0].C |= Qualifiers; } @@ -1570,7 +1599,7 @@ static void ParseOldStyleParamList (FuncDesc* F) DeclSpec Spec; /* Read the declaration specifier */ - ParseDeclSpec (&Spec, SC_AUTO, T_INT); + ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_NONE, SC_AUTO); /* We accept only auto and register as storage class specifiers, but ** we ignore all this, since we use auto anyway. @@ -1649,7 +1678,7 @@ static void ParseAnsiParamList (FuncDesc* F) } /* Read the declaration specifier */ - ParseDeclSpec (&Spec, SC_AUTO, T_INT); + ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_NONE, SC_AUTO); /* We accept only auto and register as storage class specifiers */ if ((Spec.StorageClass & SC_AUTO) == SC_AUTO) { @@ -1797,7 +1826,7 @@ static void Declarator (const DeclSpec* Spec, Declaration* D, declmode_t Mode) ** qualifier later will be transfered to the function itself. If it's a ** pointer to something else, it will be flagged as an error. */ - TypeCode Qualifiers = OptionalQualifiers (T_QUAL_ADDRSIZE | T_QUAL_CCONV); + TypeCode Qualifiers = OptionalQualifiers (T_QUAL_NONE, T_QUAL_ADDRSIZE | T_QUAL_CCONV); /* Pointer to something */ if (CurTok.Tok == TOK_STAR) { @@ -1806,7 +1835,7 @@ static void Declarator (const DeclSpec* Spec, Declaration* D, declmode_t Mode) NextToken (); /* Allow const, restrict, and volatile qualifiers */ - Qualifiers |= OptionalQualifiers (T_QUAL_CVR); + Qualifiers |= OptionalQualifiers (Qualifiers, T_QUAL_CVR); /* Parse the type that the pointer points to */ Declarator (Spec, D, Mode); @@ -1951,7 +1980,7 @@ Type* ParseType (Type* T) /* Get a type without a default */ InitDeclSpec (&Spec); - ParseTypeSpec (&Spec, -1, T_QUAL_NONE, NULL); + ParseTypeSpec (&Spec, TS_DEFAULT_TYPE_NONE, NULL); /* Parse additional declarators */ ParseDecl (&Spec, &Decl, DM_NO_IDENT); @@ -2076,22 +2105,23 @@ void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode) -void ParseDeclSpec (DeclSpec* D, unsigned DefStorage, long DefType) +void ParseDeclSpec (DeclSpec* D, typespec_t TSFlags, unsigned DefStorage) /* Parse a declaration specification */ { - TypeCode Qualifiers; - /* Initialize the DeclSpec struct */ InitDeclSpec (D); - /* There may be qualifiers *before* the storage class specifier */ - Qualifiers = OptionalQualifiers (T_QUAL_CONST | T_QUAL_VOLATILE); + /* Assume we're using an explicit storage class */ + D->Flags &= ~DS_DEF_STORAGE; - /* Now get the storage class specifier for this declaration */ - ParseStorageClass (D, DefStorage); + /* Parse the type specifiers */ + ParseTypeSpec (D, TSFlags | TS_STORAGE_CLASS_SPEC | TS_FUNCTION_SPEC, NULL); - /* Parse the type specifiers passing any initial type qualifiers */ - ParseTypeSpec (D, DefType, Qualifiers, NULL); + /* If no explicit storage class is given, use the default */ + if (D->StorageClass == 0) { + D->Flags |= DS_DEF_STORAGE; + D->StorageClass = DefStorage; + } } diff --git a/src/cc65/declare.h b/src/cc65/declare.h index 2b8b36f1c..474a848a9 100644 --- a/src/cc65/declare.h +++ b/src/cc65/declare.h @@ -53,6 +53,22 @@ +/* Type specifier parser flags */ +typedef enum typespec_t typespec_t; +enum typespec_t { + TS_NONE = 0x00, + + /* Default type */ + TS_MASK_DEFAULT_TYPE = 0x03, + TS_DEFAULT_TYPE_NONE = 0x00, /* No default type */ + TS_DEFAULT_TYPE_INT = 0x01, /* Good old int */ + TS_DEFAULT_TYPE_AUTO = 0x02, /* C23 type inference with auto */ + + /* Whether to allow certain kinds of specifiers */ + TS_STORAGE_CLASS_SPEC = 0x04, /* Allow storage storage class specifiers */ + TS_FUNCTION_SPEC = 0x08, /* Allow function specifiers */ +}; + /* Masks for the Flags field in DeclSpec */ #define DS_DEF_STORAGE 0x0001U /* Default storage class used */ #define DS_DEF_TYPE 0x0002U /* Default type used */ @@ -105,7 +121,7 @@ Type* ParseType (Type* Type); void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode); /* Parse a variable, type or function declaration */ -void ParseDeclSpec (DeclSpec* D, unsigned DefStorage, long DefType); +void ParseDeclSpec (DeclSpec* D, typespec_t TSFlags, unsigned DefStorage); /* Parse a declaration specification */ void CheckEmptyDecl (const DeclSpec* D); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 7a22b47b2..c95a5a401 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1301,7 +1301,7 @@ static void Primary (ExprDesc* E) /* Let's see if this is a C99-style declaration */ DeclSpec Spec; InitDeclSpec (&Spec); - ParseDeclSpec (&Spec, -1, T_QUAL_NONE); + ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT, SC_AUTO); if (Spec.Type->C != T_END) { diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 5f182f061..fb5bc2563 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -568,7 +568,7 @@ void DeclareLocals (void) continue; } - ParseDeclSpec (&Spec, SC_AUTO, T_INT); + ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT, SC_AUTO); if ((Spec.Flags & DS_DEF_STORAGE) != 0 && /* No storage spec */ (Spec.Flags & DS_DEF_TYPE) != 0 && /* No type given */ GetQualifier (Spec.Type) == T_QUAL_NONE) { /* No type qualifier */ diff --git a/test/misc/int-static-1888.c b/test/misc/int-static-1888.c deleted file mode 100644 index e5234ab2c..000000000 --- a/test/misc/int-static-1888.c +++ /dev/null @@ -1,10 +0,0 @@ - -/* bug #1888 - The compiler doesn't accept valid data declarations */ - -/* The following is a valid declaration but not accepted by the compiler */ -int static a; - -int main(void) -{ - return 0; -} diff --git a/test/val/decl-mixed-specifiers.c b/test/val/decl-mixed-specifiers.c new file mode 100644 index 000000000..a0fb1596b --- /dev/null +++ b/test/val/decl-mixed-specifiers.c @@ -0,0 +1,19 @@ +/* bug 1888 - cc65 fails with storage class specifiers after type specifiers */ + +#include <stdio.h> + +int const typedef volatile x_type, * const volatile y_type; + +int static failures = 0; + +int extern main(void); + +int main(void) +{ + volatile static x_type const x = 42, * const volatile y[] = { 1 ? &x : (y_type)0 }; + if (**y != 42) { + ++failures; + printf("y = %d, Expected: 42\n", **y); + } + return failures; +} From 44b2e4f3316c34c6b18190af109f120f9eb45cdb Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 3 Nov 2022 17:40:13 +0100 Subject: [PATCH 1876/2710] added examples for tests that compare the compiler output with a reference --- Contributing.md | 1 + test/readme.txt | 22 +++++++++ test/ref/Makefile | 70 ++++++++++++++++++++++++++-- test/ref/custom-reference-error.c | 21 +++++++++ test/ref/custom-reference-error.cref | 5 ++ test/ref/custom-reference.c | 24 ++++++++++ test/ref/custom-reference.cref | 2 + 7 files changed, 140 insertions(+), 5 deletions(-) create mode 100644 test/ref/custom-reference-error.c create mode 100644 test/ref/custom-reference-error.cref create mode 100644 test/ref/custom-reference.c create mode 100644 test/ref/custom-reference.cref diff --git a/Contributing.md b/Contributing.md index ab1e73508..3541979f6 100644 --- a/Contributing.md +++ b/Contributing.md @@ -8,6 +8,7 @@ This document contains all kinds of information that you should know if you want * You must obey these rules when contributing new code or documentation to cc65. We are well aware that not all existing code may respect all rules outlined here - but this is no reason for you not to respect them. * One commit/patch/PR per issue. Do not mix several things unless they are very closely related. +* Sometimes when you make a PR, it may break completely unrelated tests. However, any PR is expected to merge cleanly with no failures. That means in practise that you are expected to fix/update the failing tests if required - for example this might be needed if you make changes to the compiler that changes the format of error- or warning messages. In that case you might have to update some reference files in the testbench. Obviously still check if that is actually the right thing to do ;) # Codestyle rules diff --git a/test/readme.txt b/test/readme.txt index dd87ea9df..41d19aee3 100644 --- a/test/readme.txt +++ b/test/readme.txt @@ -20,6 +20,28 @@ compiler is working as expected (when the tests behave as described): library. /ref - These tests produce output that must be compared with reference output. + Normally the reference output is produced by compiling the program on the + host (using gcc mostly) and then running them on the host. Tests should + be tweaked to produce the same output as on the host in the cases where + it would be different. + + The Makefile also handles some special cases (add the tests to the + respective list in the makefile): + + - Sometimes we want to check the warnings produced by the compiler. In + that case use the CUSTOMSOURCES list. Whatever output the compiler writes + to stderr will be compared against the matching .cref file. There is an + example in custom-reference.c/.cref + + - Sometimes we want to check what kind of output the compiler produces + for a file that does not compile. In that case use the ERRORSOURCES list. + There is an example in custom-reference-error.c/.cref + + Warning: please understand that comparing the compiler output against + a reference produces a moving target, ie the tests may break randomly + at any time when the compiler output changes for whatever reason. So + only ever use this as a last resort when something can not be tested by + other means. /err - contains tests that MUST NOT compile diff --git a/test/ref/Makefile b/test/ref/Makefile index d9c9817ee..3c275e308 100644 --- a/test/ref/Makefile +++ b/test/ref/Makefile @@ -11,12 +11,14 @@ ifdef CMD_EXE NULLDEV = nul: MKDIR = mkdir $(subst /,\,$1) RMDIR = -rmdir /s /q $(subst /,\,$1) + CP=copy else S = / EXE = NULLDEV = /dev/null MKDIR = mkdir -p $1 RMDIR = $(RM) -r $1 + CP=cp endif ifdef QUIET @@ -42,24 +44,47 @@ CFLAGS = -O2 -Wall -W -Wextra -funsigned-char -fwrapv -fno-strict-overflow .PHONY: all clean -SOURCES := $(wildcard *.c) +# list of sources that produces warnings that we want to check. a .cref file +# containing the exact output is required. +CUSTOMSOURCES = \ + custom-reference.c + +# list of sources that produce a compiler error. a .cref files containing the +# exact error output is required +ERRORSOURCES = \ + custom-reference-error.c + +SOURCES := $(filter-out $(CUSTOMSOURCES) $(ERRORSOURCES),$(wildcard *.c)) + REFS = $(SOURCES:%.c=$(WORKDIR)/%.ref) +CUSTOMREFS = $(CUSTOMSOURCES:%.c=$(WORKDIR)/%.cref) $(ERRORSOURCES:%.c=$(WORKDIR)/%.cref) + TESTS = $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).6502.prg)) TESTS += $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).65c02.prg)) -all: $(REFS) $(TESTS) +CUSTOMTESTS = $(foreach option,$(OPTIONS),$(CUSTOMSOURCES:%.c=$(WORKDIR)/%.$(option).6502.custom.prg)) +CUSTOMTESTS += $(foreach option,$(OPTIONS),$(CUSTOMSOURCES:%.c=$(WORKDIR)/%.$(option).65c02.custom.prg)) + +ERRORTESTS = $(foreach option,$(OPTIONS),$(ERRORSOURCES:%.c=$(WORKDIR)/%.$(option).6502.error.prg)) +ERRORTESTS += $(foreach option,$(OPTIONS),$(ERRORSOURCES:%.c=$(WORKDIR)/%.$(option).65c02.error.prg)) + +all: $(CUSTOMREFS) $(REFS) $(TESTS) $(CUSTOMTESTS) $(ERRORTESTS) $(WORKDIR): $(call MKDIR,$(WORKDIR)) +$(ISEQUAL): ../isequal.c | $(WORKDIR) + $(CC) $(CFLAGS) -o $@ $< + +$(WORKDIR)/%.cref: %.cref | $(WORKDIR) + $(if $(QUIET),echo ref/$*.cref) + $(CP) $*.cref $@ + $(WORKDIR)/%.ref: %.c | $(WORKDIR) $(if $(QUIET),echo ref/$*.host) $(CC) $(CFLAGS) -o $(WORKDIR)/$*.host $< $(NULLERR) $(WORKDIR)$S$*.host > $@ -$(ISEQUAL): ../isequal.c | $(WORKDIR) - $(CC) $(CFLAGS) -o $@ $< - # "yaccdbg.c" includes "yacc.c". # yaccdbg's built files must depend on both of them. # @@ -78,8 +103,43 @@ $(WORKDIR)/%.$1.$2.prg: %.c $(WORKDIR)/%.ref $(ISEQUAL) endef # PRG_template +# extra template for the case when compilation works, but we still want to +# compare the warning output with our custom reference +define PRG_custom_template + +$(WORKDIR)/%.$1.$2.custom.prg: %.c $(WORKDIR)/%.ref %.c $(WORKDIR)/%.cref $(ISEQUAL) + $(if $(QUIET),echo cref/$$*.$1.$2.custom.prg) + -$(CC65) -t sim$2 $$(CC65FLAGS) -$1 -o $$(@:.custom.prg=.s) $$< 2> $(WORKDIR)/$$*.$1.$2.cout + $(CA65) -t sim$2 -o $$(@:.custom.prg=.o) $$(@:.custom.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.custom.prg=.o) sim$2.lib $(NULLERR) + $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/$$*.$1.$2.out + $(ISEQUAL) $(WORKDIR)/$$*.$1.$2.cout $(WORKDIR)/$$*.cref + $(ISEQUAL) $(WORKDIR)/$$*.$1.$2.out $(WORKDIR)/$$*.ref + +endef # PRG_error_template + +# extra template for the case when compilation fails, but we still want to +# compare the error output with our custom reference +define PRG_error_template + +$(WORKDIR)/%.$1.$2.error.prg: %.c $(WORKDIR)/%.cref $(ISEQUAL) + $(if $(QUIET),echo cref/$$*.$1.$2.error.prg) + -$(CC65) -t sim$2 $$(CC65FLAGS) -$1 -o $$(@:.error.prg=.s) $$< 2> $(WORKDIR)/$$*.$1.$2.cout +# $(CA65) -t sim$2 -o $$(@:.error.prg=.o) $$(@:.error.prg=.s) $(NULLERR) +# $(LD65) -t sim$2 -o $$@ $$(@:.error.prg=.o) sim$2.lib $(NULLERR) +# $(SIM65) $(SIM65FLAGS) $$@ > $(WORKDIR)/$$*.$1.$2.out + $(ISEQUAL) $(WORKDIR)/$$*.$1.$2.cout $(WORKDIR)/$$*.cref + +endef # PRG_error_template + $(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option),6502))) $(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option),65c02))) +$(foreach option,$(OPTIONS),$(eval $(call PRG_custom_template,$(option),6502))) +$(foreach option,$(OPTIONS),$(eval $(call PRG_custom_template,$(option),65c02))) + +$(foreach option,$(OPTIONS),$(eval $(call PRG_error_template,$(option),6502))) +$(foreach option,$(OPTIONS),$(eval $(call PRG_error_template,$(option),65c02))) + clean: @$(call RMDIR,$(WORKDIR)) diff --git a/test/ref/custom-reference-error.c b/test/ref/custom-reference-error.c new file mode 100644 index 000000000..c86a8b9e9 --- /dev/null +++ b/test/ref/custom-reference-error.c @@ -0,0 +1,21 @@ + +/* + this is an example (not actually a regression test) that shows how to + make a check that compares the compiler (error-) output with a provided + reference. + + to produce a reference file, first make sure your program "works" as intended, + then "make" in this directory once and copy the produced compiler output to + the reference: + + $ cp ../../testwrk/ref/custom-reference-error.g.6502.out custom-reference-error.cref + + and then "make" again to confirm +*/ + +int main(int argc, char* argv[]) +{ + printf("%02x", 0x42); + n = 0; /* produce an error */ + /* another error */ +} diff --git a/test/ref/custom-reference-error.cref b/test/ref/custom-reference-error.cref new file mode 100644 index 000000000..fa584f307 --- /dev/null +++ b/test/ref/custom-reference-error.cref @@ -0,0 +1,5 @@ +custom-reference-error.c:18: Error: Call to undeclared function 'printf' +custom-reference-error.c:19: Error: Undefined symbol: 'n' +custom-reference-error.c:21: Warning: Control reaches end of non-void function [-Wreturn-type] +custom-reference-error.c:21: Warning: Parameter 'argc' is never used +custom-reference-error.c:21: Warning: Parameter 'argv' is never used diff --git a/test/ref/custom-reference.c b/test/ref/custom-reference.c new file mode 100644 index 000000000..5d9c356df --- /dev/null +++ b/test/ref/custom-reference.c @@ -0,0 +1,24 @@ + +/* + this is an example (not actually a regression test) that shows how to + make a check that compares the compiler (error-) output with a provided + reference. + + to produce a reference file, first make sure your program "works" as intended, + then "make" in this directory once and copy the produced compiler output to + the reference: + + $ cp ../../testwrk/ref/custom-reference.g.6502.out custom-reference.cref + + and then "make" again to confirm +*/ + +#include <stdint.h> +#include <stdio.h> + +int main(int argc, char* argv[]) +{ + printf("%02x", 0x42); + /* produce a warning */ + return 0; +} diff --git a/test/ref/custom-reference.cref b/test/ref/custom-reference.cref new file mode 100644 index 000000000..4dba6009b --- /dev/null +++ b/test/ref/custom-reference.cref @@ -0,0 +1,2 @@ +custom-reference.c:24: Warning: Parameter 'argc' is never used +custom-reference.c:24: Warning: Parameter 'argv' is never used From cc450706d13ccde2e6b8d638d1af38edfc292dbf Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 3 Nov 2022 18:03:47 +0100 Subject: [PATCH 1877/2710] testcase related to bug #1888 --- test/misc/Makefile | 6 ++++++ test/misc/int-static-1888.c | 10 ++++++++++ 2 files changed, 16 insertions(+) create mode 100644 test/misc/int-static-1888.c diff --git a/test/misc/Makefile b/test/misc/Makefile index e77d37b29..f18f40da6 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -58,6 +58,12 @@ $(ISEQUAL): ../isequal.c | $(WORKDIR) define PRG_template +# should compile, but gives an error +$(WORKDIR)/int-static-1888.$1.$2.prg: int-static-1888.c | $(WORKDIR) + @echo "FIXME: " $$@ "currently does not compile." + $(if $(QUIET),echo misc/int-static-1888.$1.$2.prg) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # should compile, but gives an error $(WORKDIR)/bug1768.$1.$2.prg: bug1768.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." diff --git a/test/misc/int-static-1888.c b/test/misc/int-static-1888.c new file mode 100644 index 000000000..e5234ab2c --- /dev/null +++ b/test/misc/int-static-1888.c @@ -0,0 +1,10 @@ + +/* bug #1888 - The compiler doesn't accept valid data declarations */ + +/* The following is a valid declaration but not accepted by the compiler */ +int static a; + +int main(void) +{ + return 0; +} From 79fd078ae340da74dbc5111ad04e919d0951c5e9 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 3 Nov 2022 18:27:10 +0100 Subject: [PATCH 1878/2710] add check for line endings containing CR. --- .github/checks/Makefile | 7 +++++-- .github/checks/lineendings.sh | 18 ++++++++++++++++++ Contributing.md | 4 ++++ test/err/bug1890.c | 18 +++++++++--------- 4 files changed, 36 insertions(+), 11 deletions(-) create mode 100755 .github/checks/lineendings.sh diff --git a/.github/checks/Makefile b/.github/checks/Makefile index 18cc153d4..6519eb5b8 100644 --- a/.github/checks/Makefile +++ b/.github/checks/Makefile @@ -1,7 +1,10 @@ -.PHONY: checkstyle tabs lastline spaces noexec +.PHONY: checkstyle lineendings tabs lastline spaces noexec -checkstyle: tabs lastline spaces noexec +checkstyle: lineendings tabs lastline spaces noexec + +lineendings: lineendings.sh + @./lineendings.sh tabs: tabs.sh @./tabs.sh diff --git a/.github/checks/lineendings.sh b/.github/checks/lineendings.sh new file mode 100755 index 000000000..5b445522f --- /dev/null +++ b/.github/checks/lineendings.sh @@ -0,0 +1,18 @@ +#! /bin/bash +OLDCWD=`pwd` +SCRIPT_PATH=`dirname $0` +CHECK_PATH=. + +cd $SCRIPT_PATH/../../ + +FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -IUl $'\r'` + +cd $OLDCWD + +if [ x"$FILES"x != xx ]; then + echo "error: found CR in the following files:" >&2 + for n in $FILES; do + echo $n >&2 + done + exit -1 +fi diff --git a/Contributing.md b/Contributing.md index 3541979f6..e316b9c61 100644 --- a/Contributing.md +++ b/Contributing.md @@ -14,6 +14,10 @@ This document contains all kinds of information that you should know if you want ## All Sources +### Line endings + +All files must only contain Unix style 'LF' line endings. Please configure your editors accordingly. + ### TABs and spaces This is an ongoing controversial topic - everyone knows that. However, the following is how we do it :) diff --git a/test/err/bug1890.c b/test/err/bug1890.c index afe04f071..15d857cdb 100644 --- a/test/err/bug1890.c +++ b/test/err/bug1890.c @@ -1,9 +1,9 @@ -/* bug #1890 - Overflow in enumerator value is not detected */ - -#include <limits.h> -enum { a = ULONG_MAX, b } c = b; - -int main(void) -{ - return 0; -} +/* bug #1890 - Overflow in enumerator value is not detected */ + +#include <limits.h> +enum { a = ULONG_MAX, b } c = b; + +int main(void) +{ + return 0; +} From e608f8a94f2a761b4c97e7fdcbea0a4fdebd9e26 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 5 Nov 2022 18:30:02 +0800 Subject: [PATCH 1879/2710] Renamed several tests. --- test/val/{extern.c => decl-extern-shadow.c} | 0 test/val/{static-1.c => decl-static-extern.c} | 0 test/val/{static-fwd-decl.c => decl-static-fwd.c} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename test/val/{extern.c => decl-extern-shadow.c} (100%) rename test/val/{static-1.c => decl-static-extern.c} (100%) rename test/val/{static-fwd-decl.c => decl-static-fwd.c} (100%) diff --git a/test/val/extern.c b/test/val/decl-extern-shadow.c similarity index 100% rename from test/val/extern.c rename to test/val/decl-extern-shadow.c diff --git a/test/val/static-1.c b/test/val/decl-static-extern.c similarity index 100% rename from test/val/static-1.c rename to test/val/decl-static-extern.c diff --git a/test/val/static-fwd-decl.c b/test/val/decl-static-fwd.c similarity index 100% rename from test/val/static-fwd-decl.c rename to test/val/decl-static-fwd.c From 699ba1fbd6938cfb81d705fdf1f6304433c7b05c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Nov 2022 16:42:01 +0100 Subject: [PATCH 1880/2710] when running on cmd.exe only print a message, the style tests require bash --- .github/checks/Makefile | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.github/checks/Makefile b/.github/checks/Makefile index 6519eb5b8..93eeddd19 100644 --- a/.github/checks/Makefile +++ b/.github/checks/Makefile @@ -1,4 +1,17 @@ +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + +.PHONY: checkstyle + +checkstyle: + $(info INFO: style checks require bash.) + +else + .PHONY: checkstyle lineendings tabs lastline spaces noexec checkstyle: lineendings tabs lastline spaces noexec @@ -17,3 +30,5 @@ spaces: spaces.sh noexec: noexec.sh @./noexec.sh + +endif From bf924395fbd7019c53798a5c7379daa4a071e6e9 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Nov 2022 19:41:02 +0100 Subject: [PATCH 1881/2710] fix some bashisms, hopefully makes "check" work again in cmd.exe --- samples/Makefile | 1 + targettest/Makefile | 1 + targettest/pce/Makefile | 5 ++++- test/asm/listing/Makefile | 43 +++++++++++++++++++++++---------------- 4 files changed, 32 insertions(+), 18 deletions(-) diff --git a/samples/Makefile b/samples/Makefile index 4007e3522..2aa637844 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -414,6 +414,7 @@ TARGETS := \ define TARGET_recipe +@echo making samples for: $(T) @$(MAKE) -j2 SYS:=$(T) @$(MAKE) --no-print-directory clean SYS:=$(T) diff --git a/targettest/Makefile b/targettest/Makefile index 1475d4eb2..a359c7e7a 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -761,6 +761,7 @@ TARGETS := \ define TARGET_recipe +@echo making targettest for: $(T) @$(MAKE) -j2 SYS:=$(T) @$(MAKE) --no-print-directory clean SYS:=$(T) diff --git a/targettest/pce/Makefile b/targettest/pce/Makefile index f757c3062..89abca6b6 100644 --- a/targettest/pce/Makefile +++ b/targettest/pce/Makefile @@ -73,4 +73,7 @@ endif dd if=$< bs=8K count=${COUNT} >> $@ clean: - @$(DEL) conio.o conio.??? 2>$(NULLDEV) + @$(DEL) conio.o 2>$(NULLDEV) + @$(DEL) conio.pce 2>$(NULLDEV) + @$(DEL) conio.bin 2>$(NULLDEV) + @$(DEL) conio.map 2>$(NULLDEV) diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index d3dc21409..10f5a5a97 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -5,25 +5,33 @@ ifneq ($(shell echo),) endif ifdef CMD_EXE + S = $(subst /,\,/) EXE = .exe MKDIR = mkdir $(subst /,\,$1) RMDIR = -rmdir /q /s $(subst /,\,$1) + ERRDIR = 2>&1 + TRUE = exit 0 + CAT = type $(subst /,\,$1) else + S = / EXE = MKDIR = mkdir -p $1 RMDIR = $(RM) -r $1 + ERRDIR = 2>&1 + TRUE = true + CAT = cat endif ifdef QUIET # .SILENT: endif -CA65 := $(if $(wildcard ../../../bin/ca65*),../../../bin/ca65,ca65) -LD65 := $(if $(wildcard ../../../bin/ld65*),../../../bin/ld65,ld65) +CA65 := $(if $(wildcard ../../../bin/ca65*),..$S..$S..$Sbin$Sca65,ca65) +LD65 := $(if $(wildcard ../../../bin/ld65*),..$S..$S..$Sbin$Sld65,ld65) WORKDIR = ../../../testwrk/asm/listing -ISEQUAL = ../../../testwrk/isequal$(EXE) +ISEQUAL = ..$S..$S..$Stestwrk$Sisequal$(EXE) CC = gcc CFLAGS = -O2 @@ -50,14 +58,14 @@ $(WORKDIR)/$1.bin: $1.s $(ISEQUAL) # compile without generating listing ifeq ($(wildcard control/$1.err),) - $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) 2>&1 + $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) $(ERRDIR) ifeq ($(wildcard control/$1.no-ld65),) - $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) 2>&1 + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) $(ERRDIR) endif else - $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) 2>&1 || true + $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) $(ERRDIR) || $(TRUE) ifeq ($(wildcard control/$1.no-ld65),) - $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) 2>&1 || true + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) $(ERRDIR) || $(TRUE) endif endif @@ -71,14 +79,15 @@ ifneq ($(wildcard ref/$1.bin-ref),) $(ISEQUAL) --binary ref/$1.bin-ref $$@ endif +# rem $(indfo $(CAT) $(subst /,$$S,$$$(@:.bin=.ld65-err))) + ifneq ($(wildcard ref/$1.ld65err-ref),) - @echo cat $$(@:.bin=.ld65-err) - cat $$(@:.bin=.ld65-err) - @echo - @echo + @echo $(CAT) $$(@:.bin=.ld65-err) +# FIXME: somehow this refuses to work in cmd.exe +ifndef CMD_EXE + $(call CAT,$$(@:.bin=.ld65-err)) -diff -u ref/$1.ld65err-ref $$(@:.bin=.ld65-err) - @echo - @echo +endif $(ISEQUAL) --wildcards ref/$1.ld65err-ref $$(@:.bin=.ld65-err) else ifneq ($(wildcard $(WORKDIR)/$1.ld65-err),) @@ -88,14 +97,14 @@ endif # compile with listing file ifeq ($(wildcard control/$1.err),) - $(CA65) -t none -l $$(@:.bin=.list-lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 + $(CA65) -t none -l $$(@:.bin=.list-lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) $(ERRDIR) ifeq ($(wildcard control/$1.no-ld65),) - $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) 2>&1 + $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) $(ERRDIR) endif else - $(CA65) -t none -l $$(@:.bin=.list-lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2>&1 || true + $(CA65) -t none -l $$(@:.bin=.list-lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) $(ERRDIR) || $(TRUE) ifeq ($(wildcard control/$1.no-ld65),) - $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) 2>&1 || true + $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) $(ERRDIR) || $(TRUE) endif endif From 1452d8164d4bd9e88a507756642fea5e0180f015 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Nov 2022 20:37:41 +0100 Subject: [PATCH 1882/2710] add ATTR_UNUSED and ATTR_NORETURN --- src/common/attrib.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/common/attrib.h b/src/common/attrib.h index 07e08b2df..a7935d919 100644 --- a/src/common/attrib.h +++ b/src/common/attrib.h @@ -44,14 +44,20 @@ -#if defined(__GNUC__) -# define attribute(a) __attribute__(a) +#ifdef __clang__ +# define attribute(a) __attribute__(a) +# define ATTR_UNUSED(x) +# define ATTR_NORETURN __attribute__((analyzer_noreturn)) +#elif defined(__GNUC__) +# define attribute(a) __attribute__(a) +# define ATTR_UNUSED(x) __attribute__((__unused__)) x +# define ATTR_NORETURN __attribute__((noreturn)) #else # define attribute(a) +# define ATTR_UNUSED(x) +# define ATTR_NORETURN #endif - - /* End of attrib.h */ #endif From e5777f7ccfdef0869845c4a92d3a8dc602371de9 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Nov 2022 20:38:07 +0100 Subject: [PATCH 1883/2710] add ATTR_UNUSED on the flags variable --- src/cc65/codegen.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index e521fff73..00a4738e2 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -41,6 +41,7 @@ /* common */ #include "addrsize.h" +#include "attrib.h" #include "check.h" #include "cpu.h" #include "shift.h" @@ -4561,7 +4562,7 @@ void g_initstatic (unsigned InitLabel, unsigned VarLabel, unsigned Size) -void g_testbitfield (unsigned Flags, unsigned BitOffs, unsigned BitWidth) +void g_testbitfield (ATTR_UNUSED(unsigned Flags), unsigned BitOffs, unsigned BitWidth) /* Test bit-field in primary. */ { /* Since the end is inclusive and cannot be negative here, we subtract 1 from the sum */ From 5d1ad05cb8c6cdf21471f07a1df3e60118869d1c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 5 Nov 2022 20:48:53 +0100 Subject: [PATCH 1884/2710] oops --- src/common/attrib.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/attrib.h b/src/common/attrib.h index a7935d919..a16b94a3b 100644 --- a/src/common/attrib.h +++ b/src/common/attrib.h @@ -46,7 +46,7 @@ #ifdef __clang__ # define attribute(a) __attribute__(a) -# define ATTR_UNUSED(x) +# define ATTR_UNUSED(x) x # define ATTR_NORETURN __attribute__((analyzer_noreturn)) #elif defined(__GNUC__) # define attribute(a) __attribute__(a) @@ -54,7 +54,7 @@ # define ATTR_NORETURN __attribute__((noreturn)) #else # define attribute(a) -# define ATTR_UNUSED(x) +# define ATTR_UNUSED(x) x # define ATTR_NORETURN #endif From 2dcccae036f38950be86a16dffd0b6f6a9ac5548 Mon Sep 17 00:00:00 2001 From: Silver Dream ! <silverdr@srebrnysen.com> Date: Sun, 6 Nov 2022 11:27:08 +0000 Subject: [PATCH 1885/2710] Updated ATTR_UNUSED() for clang --- src/common/attrib.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/attrib.h b/src/common/attrib.h index a16b94a3b..3cdacb9d5 100644 --- a/src/common/attrib.h +++ b/src/common/attrib.h @@ -46,7 +46,7 @@ #ifdef __clang__ # define attribute(a) __attribute__(a) -# define ATTR_UNUSED(x) x +# define ATTR_UNUSED(x) __attribute__((__unused__)) x # define ATTR_NORETURN __attribute__((analyzer_noreturn)) #elif defined(__GNUC__) # define attribute(a) __attribute__(a) From e10b5fd79b0fb2194a7949d5d4316df40d8135a4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 8 Nov 2022 14:42:52 +0800 Subject: [PATCH 1886/2710] Renamed a few functions and struct used for declaration parser. --- src/cc65/compile.c | 2 +- src/cc65/declare.c | 102 ++++++++++++++++++++++---------------------- src/cc65/declare.h | 8 ++-- src/cc65/declattr.c | 18 ++++---- src/cc65/declattr.h | 6 +-- src/cc65/expr.c | 2 +- src/cc65/initdata.c | 2 +- src/cc65/locals.c | 18 ++++---- src/cc65/symentry.c | 4 +- src/cc65/symentry.h | 4 +- 10 files changed, 83 insertions(+), 83 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index f15c5bc54..73380f3df 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -146,7 +146,7 @@ static void Parse (void) comma = 0; while (1) { - Declaration Decl; + Declarator Decl; /* Read the next declaration */ ParseDecl (&Spec, &Decl, DM_NEED_IDENT); diff --git a/src/cc65/declare.c b/src/cc65/declare.c index f3674d711..f317964ad 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -356,8 +356,8 @@ void InitDeclSpec (DeclSpec* D) -static void InitDeclaration (Declaration* D) -/* Initialize the Declaration struct for use */ +static void InitDeclarator (Declarator* D) +/* Initialize the Declarator struct for use */ { D->Ident[0] = '\0'; D->Type[0].C = T_END; @@ -367,7 +367,7 @@ static void InitDeclaration (Declaration* D) -static void NeedTypeSpace (Declaration* D, unsigned Count) +static void NeedTypeSpace (Declarator* D, unsigned Count) /* Check if there is enough space for Count type specifiers within D */ { if (D->Index + Count >= MAXTYPELEN) { @@ -381,8 +381,8 @@ static void NeedTypeSpace (Declaration* D, unsigned Count) -static void AddTypeToDeclaration (Declaration* D, TypeCode T) -/* Add a type specifier to the type of a declaration */ +static void AddTypeCodeToDeclarator (Declarator* D, TypeCode T) +/* Add a type specifier to the type of a declarator */ { NeedTypeSpace (D, 1); D->Type[D->Index++].C = T; @@ -524,8 +524,8 @@ static void CheckArrayElementType (Type* DataType) -static SymEntry* ESUForwardDecl (const char* Name, unsigned Flags, unsigned* DSFlags) -/* Handle an enum, struct or union forward decl */ +static SymEntry* ForwardESU (const char* Name, unsigned Flags, unsigned* DSFlags) +/* Handle an enum, struct or union forward declaration */ { /* Try to find an enum/struct/union with the given name. If there is none, ** insert a forward declaration into the current lexical level. @@ -584,8 +584,8 @@ static const Type* GetEnumeratorType (long Min, unsigned long Max, int Signed) -static SymEntry* ParseEnumDecl (const char* Name, unsigned* DSFlags) -/* Process an enum declaration */ +static SymEntry* ParseEnumSpec (const char* Name, unsigned* DSFlags) +/* Process an enum specifier */ { SymTable* FieldTab; long EnumVal; @@ -602,7 +602,7 @@ static SymEntry* ParseEnumDecl (const char* Name, unsigned* DSFlags) if (CurTok.Tok != TOK_LCURLY) { /* Just a forward definition */ - return ESUForwardDecl (Name, SC_ENUM, DSFlags); + return ForwardESU (Name, SC_ENUM, DSFlags); } /* Add a forward declaration for the enum tag in the current lexical level */ @@ -754,7 +754,7 @@ static SymEntry* ParseEnumDecl (const char* Name, unsigned* DSFlags) -static int ParseFieldWidth (Declaration* D) +static int ParseFieldWidth (Declarator* D) /* Parse an optional field width. Returns -1 if no field width is specified, ** otherwise the width of the field. */ @@ -832,7 +832,7 @@ static unsigned PadWithBitField (unsigned StructSize, unsigned BitOffs) -static unsigned AliasAnonStructFields (const Declaration* D, SymEntry* Anon) +static unsigned AliasAnonStructFields (const Declarator* D, SymEntry* Anon) /* Create alias fields from an anon union/struct in the current lexical level. ** The function returns the count of created aliases. */ @@ -879,8 +879,8 @@ static unsigned AliasAnonStructFields (const Declaration* D, SymEntry* Anon) -static SymEntry* ParseUnionDecl (const char* Name, unsigned* DSFlags) -/* Parse a union declaration. */ +static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) +/* Parse a union specifier */ { unsigned UnionSize; @@ -895,7 +895,7 @@ static SymEntry* ParseUnionDecl (const char* Name, unsigned* DSFlags) if (CurTok.Tok != TOK_LCURLY) { /* Just a forward declaration */ - return ESUForwardDecl (Name, SC_UNION, DSFlags); + return ForwardESU (Name, SC_UNION, DSFlags); } /* Add a forward declaration for the union tag in the current lexical level */ @@ -929,7 +929,7 @@ static SymEntry* ParseUnionDecl (const char* Name, unsigned* DSFlags) /* Read fields with this type */ while (1) { - Declaration Decl; + Declarator Decl; /* Get type and name of the struct field */ ParseDecl (&Spec, &Decl, DM_ACCEPT_IDENT); @@ -1026,8 +1026,8 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { -static SymEntry* ParseStructDecl (const char* Name, unsigned* DSFlags) -/* Parse a struct declaration. */ +static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) +/* Parse a struct specifier */ { unsigned StructSize; @@ -1043,7 +1043,7 @@ static SymEntry* ParseStructDecl (const char* Name, unsigned* DSFlags) if (CurTok.Tok != TOK_LCURLY) { /* Just a forward declaration */ - return ESUForwardDecl (Name, SC_STRUCT, DSFlags); + return ForwardESU (Name, SC_STRUCT, DSFlags); } /* Add a forward declaration for the struct tag in the current lexical level */ @@ -1079,7 +1079,7 @@ static SymEntry* ParseStructDecl (const char* Name, unsigned* DSFlags) /* Read fields with this type */ while (1) { - Declaration Decl; + Declarator Decl; /* If we had a flexible array member before, no other fields can ** follow. @@ -1418,7 +1418,7 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci /* Remember we have an extra type decl */ D->Flags |= DS_EXTRA_TYPE; /* Declare the union in the current scope */ - TagEntry = ParseUnionDecl (Ident, &D->Flags); + TagEntry = ParseUnionSpec (Ident, &D->Flags); /* Encode the union entry into the type */ D->Type[0].C = T_UNION; SetESUTagSym (D->Type, TagEntry); @@ -1437,7 +1437,7 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci /* Remember we have an extra type decl */ D->Flags |= DS_EXTRA_TYPE; /* Declare the struct in the current scope */ - TagEntry = ParseStructDecl (Ident, &D->Flags); + TagEntry = ParseStructSpec (Ident, &D->Flags); /* Encode the struct entry into the type */ D->Type[0].C = T_STRUCT; SetESUTagSym (D->Type, TagEntry); @@ -1460,7 +1460,7 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci /* Remember we have an extra type decl */ D->Flags |= DS_EXTRA_TYPE; /* Parse the enum decl */ - TagEntry = ParseEnumDecl (Ident, &D->Flags); + TagEntry = ParseEnumSpec (Ident, &D->Flags); /* Encode the enum entry into the type */ D->Type[0].C |= T_ENUM; SetESUTagSym (D->Type, TagEntry); @@ -1612,7 +1612,7 @@ static void ParseOldStyleParamList (FuncDesc* F) /* Parse a comma separated variable list */ while (1) { - Declaration Decl; + Declarator Decl; /* Read the parameter */ ParseDecl (&Spec, &Decl, DM_NEED_IDENT); @@ -1667,7 +1667,7 @@ static void ParseAnsiParamList (FuncDesc* F) while (CurTok.Tok != TOK_RPAREN) { DeclSpec Spec; - Declaration Decl; + Declarator Decl; SymEntry* Param; /* Allow an ellipsis as last parameter */ @@ -1748,7 +1748,7 @@ static void ParseAnsiParamList (FuncDesc* F) static FuncDesc* ParseFuncDecl (void) -/* Parse the argument list of a function. */ +/* Parse the argument list of a function with the enclosing parentheses */ { SymEntry* Sym; SymEntry* WrappedCall; @@ -1760,6 +1760,9 @@ static FuncDesc* ParseFuncDecl (void) /* Enter a new lexical level */ EnterFunctionLevel (); + /* Skip the opening paren */ + NextToken (); + /* Check for several special parameter lists */ if (CurTok.Tok == TOK_RPAREN) { /* Parameter list is empty (K&R-style) */ @@ -1817,14 +1820,14 @@ static FuncDesc* ParseFuncDecl (void) -static void Declarator (const DeclSpec* Spec, Declaration* D, declmode_t Mode) -/* Recursively process declarators. Build a type array in reverse order. */ +static void DirectDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) +/* Recursively process direct declarators. Build a type array in reverse order. */ { - /* Read optional function or pointer qualifiers. They modify the - ** identifier or token to the right. For convenience, we allow a calling - ** convention also for pointers here. If it's a pointer-to-function, the - ** qualifier later will be transfered to the function itself. If it's a - ** pointer to something else, it will be flagged as an error. + /* Read optional function or pointer qualifiers that modify the identifier + ** or token to the right. For convenience, we allow a calling convention + ** also for pointers here. If it's a pointer-to-function, the qualifier + ** later will be transfered to the function itself. If it's a pointer to + ** something else, it will be flagged as an error. */ TypeCode Qualifiers = OptionalQualifiers (T_QUAL_NONE, T_QUAL_ADDRSIZE | T_QUAL_CCONV); @@ -1838,16 +1841,16 @@ static void Declarator (const DeclSpec* Spec, Declaration* D, declmode_t Mode) Qualifiers |= OptionalQualifiers (Qualifiers, T_QUAL_CVR); /* Parse the type that the pointer points to */ - Declarator (Spec, D, Mode); + DirectDecl (Spec, D, Mode); /* Add the type */ - AddTypeToDeclaration (D, T_PTR | Qualifiers); + AddTypeCodeToDeclarator (D, T_PTR | Qualifiers); return; } if (CurTok.Tok == TOK_LPAREN) { NextToken (); - Declarator (Spec, D, Mode); + DirectDecl (Spec, D, Mode); ConsumeRParen (); } else { /* Things depend on Mode now: @@ -1876,14 +1879,11 @@ static void Declarator (const DeclSpec* Spec, Declaration* D, declmode_t Mode) while (CurTok.Tok == TOK_LBRACK || CurTok.Tok == TOK_LPAREN) { if (CurTok.Tok == TOK_LPAREN) { - /* Function declaration */ + /* Function declarator */ FuncDesc* F; SymEntry* PrevEntry; - /* Skip the opening paren */ - NextToken (); - - /* Parse the function declaration */ + /* Parse the function declarator */ F = ParseFuncDecl (); /* We cannot specify fastcall for variadic functions */ @@ -1912,7 +1912,7 @@ static void Declarator (const DeclSpec* Spec, Declaration* D, declmode_t Mode) Qualifiers = T_QUAL_NONE; } else { - /* Array declaration. */ + /* Array declarator */ long Size = UNSPECIFIED; /* We cannot have any qualifiers for an array */ @@ -1976,7 +1976,7 @@ Type* ParseType (Type* T) /* Parse a complete type specification */ { DeclSpec Spec; - Declaration Decl; + Declarator Decl; /* Get a type without a default */ InitDeclSpec (&Spec); @@ -1994,19 +1994,19 @@ Type* ParseType (Type* T) -void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode) -/* Parse a variable, type or function declaration */ +void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) +/* Parse a variable, type or function declarator */ { /* Used to check if we have any errors during parsing this */ unsigned PrevErrorCount = ErrorCount; - /* Initialize the Declaration struct */ - InitDeclaration (D); + /* Initialize the Declarator struct */ + InitDeclarator (D); - /* Get additional declarators and the identifier */ - Declarator (Spec, D, Mode); + /* Get additional derivation of the declarator and the identifier */ + DirectDecl (Spec, D, Mode); - /* Add the base type. */ + /* Add the base type */ NeedTypeSpace (D, TypeLen (Spec->Type) + 1); /* Bounds check */ TypeCopy (D->Type + D->Index, Spec->Type); @@ -2024,7 +2024,7 @@ void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode) D->StorageClass |= SC_FUNC; } - /* Parse attributes for this declaration */ + /* Parse attributes for this declarator */ ParseAttribute (D); /* Check several things for function or function pointer types */ diff --git a/src/cc65/declare.h b/src/cc65/declare.h index 474a848a9..ee9e1fc63 100644 --- a/src/cc65/declare.h +++ b/src/cc65/declare.h @@ -86,8 +86,8 @@ struct DeclSpec { }; /* Result of ParseDecl */ -typedef struct Declaration Declaration; -struct Declaration { +typedef struct Declarator Declarator; +struct Declarator { unsigned StorageClass; /* A set of SC_xxx flags */ Type Type[MAXTYPELEN]; /* The type */ ident Ident; /* The identifier, if any*/ @@ -118,8 +118,8 @@ void InitDeclSpec (DeclSpec* D); Type* ParseType (Type* Type); /* Parse a complete type specification */ -void ParseDecl (const DeclSpec* Spec, Declaration* D, declmode_t Mode); -/* Parse a variable, type or function declaration */ +void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode); +/* Parse a variable, type or function declarator */ void ParseDeclSpec (DeclSpec* D, typespec_t TSFlags, unsigned DefStorage); /* Parse a declaration specification */ diff --git a/src/cc65/declattr.c b/src/cc65/declattr.c index 37048e69b..eec89552e 100644 --- a/src/cc65/declattr.c +++ b/src/cc65/declattr.c @@ -2,7 +2,7 @@ /* */ /* declattr.c */ /* */ -/* Declaration attributes */ +/* Declarator attributes */ /* */ /* */ /* */ @@ -55,8 +55,8 @@ /* Forwards for attribute handlers */ -static void NoReturnAttr (Declaration* D); -static void UnusedAttr (Declaration* D); +static void NoReturnAttr (Declarator* D); +static void UnusedAttr (Declarator* D); @@ -64,7 +64,7 @@ static void UnusedAttr (Declaration* D); typedef struct AttrDesc AttrDesc; struct AttrDesc { const char Name[15]; - void (*Handler) (Declaration*); + void (*Handler) (Declarator*); }; static const AttrDesc AttrTable [] = { { "__noreturn__", NoReturnAttr }, @@ -141,8 +141,8 @@ static void ErrorSkip (void) -static void AddAttr (Declaration* D, DeclAttr* A) -/* Add an attribute to a declaration */ +static void AddAttr (Declarator* D, DeclAttr* A) +/* Add an attribute to a declarator */ { /* Allocate the list if necessary, the add the attribute */ if (D->Attributes == 0) { @@ -159,7 +159,7 @@ static void AddAttr (Declaration* D, DeclAttr* A) -static void NoReturnAttr (Declaration* D) +static void NoReturnAttr (Declarator* D) /* Parse the "noreturn" attribute */ { /* Add the noreturn attribute */ @@ -168,7 +168,7 @@ static void NoReturnAttr (Declaration* D) -static void UnusedAttr (Declaration* D) +static void UnusedAttr (Declarator* D) /* Parse the "unused" attribute */ { /* Add the noreturn attribute */ @@ -177,7 +177,7 @@ static void UnusedAttr (Declaration* D) -void ParseAttribute (Declaration* D) +void ParseAttribute (Declarator* D) /* Parse an additional __attribute__ modifier */ { /* Do we have an attribute? */ diff --git a/src/cc65/declattr.h b/src/cc65/declattr.h index 63669cee7..930cd71ff 100644 --- a/src/cc65/declattr.h +++ b/src/cc65/declattr.h @@ -2,7 +2,7 @@ /* */ /* declattr.h */ /* */ -/* Declaration attributes */ +/* Declarator attributes */ /* */ /* */ /* */ @@ -45,7 +45,7 @@ /* Forward */ -struct Declaration; +struct Declarator; /* Supported attribute types */ typedef enum { @@ -67,7 +67,7 @@ struct DeclAttr { -void ParseAttribute (struct Declaration* D); +void ParseAttribute (struct Declarator* D); /* Parse an additional __attribute__ modifier */ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index c95a5a401..7dd19bcad 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1307,7 +1307,7 @@ static void Primary (ExprDesc* E) Error ("Mixed declarations and code are not supported in cc65"); while (CurTok.Tok != TOK_SEMI) { - Declaration Decl; + Declarator Decl; /* Parse one declaration */ ParseDecl (&Spec, &Decl, DM_ACCEPT_IDENT); diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c index 6195e0929..2b151e59e 100644 --- a/src/cc65/initdata.c +++ b/src/cc65/initdata.c @@ -602,7 +602,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Standard member. We should never have stuff from a ** bit-field left because an anonymous member was added - ** for padding by ParseStructDecl. + ** for padding by ParseStructSpec. */ CHECK (SI.ValBits == 0); diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 1d9ca5254..68ac00e62 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -97,8 +97,8 @@ static void AllocStorage (unsigned DataLabel, void (*UseSeg) (), unsigned Size) -static void ParseRegisterDecl (Declaration* Decl, int Reg) -/* Parse the declaration of a register variable. Reg is the offset of the +static void ParseRegisterDecl (Declarator* Decl, int Reg) +/* Parse the declarator of a register variable. Reg is the offset of the ** variable in the register bank. */ { @@ -186,8 +186,8 @@ static void ParseRegisterDecl (Declaration* Decl, int Reg) -static void ParseAutoDecl (Declaration* Decl) -/* Parse the declaration of an auto variable. */ +static void ParseAutoDecl (Declarator* Decl) +/* Parse the declarator of an auto variable. */ { unsigned Flags; SymEntry* Sym; @@ -382,8 +382,8 @@ static void ParseAutoDecl (Declaration* Decl) -static void ParseStaticDecl (Declaration* Decl) -/* Parse the declaration of a static variable. */ +static void ParseStaticDecl (Declarator* Decl) +/* Parse the declarator of a static variable. */ { unsigned Size; @@ -441,12 +441,12 @@ static void ParseStaticDecl (Declaration* Decl) static void ParseOneDecl (const DeclSpec* Spec) -/* Parse one variable declaration */ +/* Parse one variable declarator. */ { - Declaration Decl; /* Declaration data structure */ + Declarator Decl; /* Declarator data structure */ - /* Read the declaration */ + /* Read the declarator */ ParseDecl (Spec, &Decl, DM_NEED_IDENT); /* Check if there are any non-extern storage classes set for function diff --git a/src/cc65/symentry.c b/src/cc65/symentry.c index 115d47e3f..30ebe7dd8 100644 --- a/src/cc65/symentry.c +++ b/src/cc65/symentry.c @@ -230,8 +230,8 @@ const DeclAttr* SymGetAttr (const SymEntry* Sym, DeclAttrType AttrType) -void SymUseAttr (SymEntry* Sym, struct Declaration* D) -/* Use the attributes from the declaration for this symbol */ +void SymUseAttr (SymEntry* Sym, struct Declarator* D) +/* Use the attributes from the declarator for this symbol */ { /* We cannot specify attributes twice */ if ((Sym->Flags & SC_HAVEATTR) != 0) { diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index d973e6586..5ebd30a75 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -298,8 +298,8 @@ INLINE int SymHasAttr (const SymEntry* Sym, DeclAttrType A) # define SymHasAttr(Sym, A) (SymGetAttr (Sym, A) != 0) #endif -void SymUseAttr (SymEntry* Sym, struct Declaration* D); -/* Use the attributes from the declaration for this symbol */ +void SymUseAttr (SymEntry* Sym, struct Declarator* D); +/* Use the attributes from the declarator for this symbol */ void SymSetAsmName (SymEntry* Sym); /* Set the assembler name for an external symbol from the name of the symbol. From a09053ce0b605e82081c10420c9e25fc86e9c1cf Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Wed, 9 Nov 2022 01:07:36 +0100 Subject: [PATCH 1887/2710] make test work again also on linux. why did this not break the github actions? --- test/asm/listing/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index 10f5a5a97..d0d045a02 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -19,7 +19,7 @@ else RMDIR = $(RM) -r $1 ERRDIR = 2>&1 TRUE = true - CAT = cat + CAT = cat $1 endif ifdef QUIET From 9253f0d6bc70d5385021a7b277999ea315645047 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 10 Nov 2022 02:11:54 +0800 Subject: [PATCH 1888/2710] Added testcase for #1889. --- test/misc/Makefile | 5 +++++ test/misc/bug1889-missing-identifier.c | 9 +++++++++ test/misc/bug1889-missing-identifier.ref | 3 +++ 3 files changed, 17 insertions(+) create mode 100644 test/misc/bug1889-missing-identifier.c create mode 100644 test/misc/bug1889-missing-identifier.ref diff --git a/test/misc/Makefile b/test/misc/Makefile index e77d37b29..1a98bd2d1 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -155,6 +155,11 @@ $(WORKDIR)/goto.$1.$2.prg: goto.c $(ISEQUAL) | $(WORKDIR) $(CC65) -t sim$2 -$1 -o $$@ $$< 2>$(WORKDIR)/goto.$1.$2.out $(ISEQUAL) $(WORKDIR)/goto.$1.$2.out goto.ref +$(WORKDIR)/bug1889-missing-identifier.$1.$2.prg: bug1889-missing-identifier.c $(ISEQUAL) | $(WORKDIR) + $(if $(QUIET),echo misc/bug1889-missing-identifier.$1.$2.error.prg) + -$(CC65) -t sim$2 -$1 -o $$(@:.error.prg=.s) $$< 2> $(WORKDIR)/bug1889-missing-identifier.$1.$2.out + $(ISEQUAL) $(WORKDIR)/bug1889-missing-identifier.$1.$2.out bug1889-missing-identifier.ref + # the rest are tests that fail currently for one reason or another $(WORKDIR)/sitest.$1.$2.prg: sitest.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." diff --git a/test/misc/bug1889-missing-identifier.c b/test/misc/bug1889-missing-identifier.c new file mode 100644 index 000000000..d9cf4aa52 --- /dev/null +++ b/test/misc/bug1889-missing-identifier.c @@ -0,0 +1,9 @@ +/* bug 1889 - endless errors due to failure in recovery from missing identifier */ + +int enum { a } x; +inline enum { b }; + +int main(void) +{ + return 0; +} diff --git a/test/misc/bug1889-missing-identifier.ref b/test/misc/bug1889-missing-identifier.ref new file mode 100644 index 000000000..cd3f76849 --- /dev/null +++ b/test/misc/bug1889-missing-identifier.ref @@ -0,0 +1,3 @@ +bug1889-missing-identifier.c:3: Error: Identifier expected +bug1889-missing-identifier.c:4: Error: Identifier expected +bug1889-missing-identifier.c:4: Warning: Implicit 'int' is an obsolete feature From ebb33ee8b445d3531f1b9a787b60c353fecf3f31 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Fri, 11 Nov 2022 20:54:38 +0100 Subject: [PATCH 1889/2710] fix problem with copy command in cmd.exe --- test/ref/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/ref/Makefile b/test/ref/Makefile index 3c275e308..e30d3324c 100644 --- a/test/ref/Makefile +++ b/test/ref/Makefile @@ -11,14 +11,14 @@ ifdef CMD_EXE NULLDEV = nul: MKDIR = mkdir $(subst /,\,$1) RMDIR = -rmdir /s /q $(subst /,\,$1) - CP=copy + COPY = copy $(subst /,\,$1) $(subst /,\,$2) else S = / EXE = NULLDEV = /dev/null MKDIR = mkdir -p $1 RMDIR = $(RM) -r $1 - CP=cp + COPY = cp $1 $2 endif ifdef QUIET @@ -78,7 +78,7 @@ $(ISEQUAL): ../isequal.c | $(WORKDIR) $(WORKDIR)/%.cref: %.cref | $(WORKDIR) $(if $(QUIET),echo ref/$*.cref) - $(CP) $*.cref $@ + $(call COPY,$*.cref,$@) $(WORKDIR)/%.ref: %.c | $(WORKDIR) $(if $(QUIET),echo ref/$*.host) From ace39197e5b4f75d212f858f764988d327278ee6 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Fri, 11 Nov 2022 21:22:20 +0100 Subject: [PATCH 1890/2710] move test to test/ref --- test/misc/Makefile | 5 ----- test/ref/Makefile | 3 ++- test/{misc => ref}/bug1889-missing-identifier.c | 0 .../bug1889-missing-identifier.cref} | 0 4 files changed, 2 insertions(+), 6 deletions(-) rename test/{misc => ref}/bug1889-missing-identifier.c (100%) rename test/{misc/bug1889-missing-identifier.ref => ref/bug1889-missing-identifier.cref} (100%) diff --git a/test/misc/Makefile b/test/misc/Makefile index 6b715f221..f18f40da6 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -161,11 +161,6 @@ $(WORKDIR)/goto.$1.$2.prg: goto.c $(ISEQUAL) | $(WORKDIR) $(CC65) -t sim$2 -$1 -o $$@ $$< 2>$(WORKDIR)/goto.$1.$2.out $(ISEQUAL) $(WORKDIR)/goto.$1.$2.out goto.ref -$(WORKDIR)/bug1889-missing-identifier.$1.$2.prg: bug1889-missing-identifier.c $(ISEQUAL) | $(WORKDIR) - $(if $(QUIET),echo misc/bug1889-missing-identifier.$1.$2.error.prg) - -$(CC65) -t sim$2 -$1 -o $$(@:.error.prg=.s) $$< 2> $(WORKDIR)/bug1889-missing-identifier.$1.$2.out - $(ISEQUAL) $(WORKDIR)/bug1889-missing-identifier.$1.$2.out bug1889-missing-identifier.ref - # the rest are tests that fail currently for one reason or another $(WORKDIR)/sitest.$1.$2.prg: sitest.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." diff --git a/test/ref/Makefile b/test/ref/Makefile index e30d3324c..abd3e9bc0 100644 --- a/test/ref/Makefile +++ b/test/ref/Makefile @@ -52,7 +52,8 @@ CUSTOMSOURCES = \ # list of sources that produce a compiler error. a .cref files containing the # exact error output is required ERRORSOURCES = \ - custom-reference-error.c + custom-reference-error.c \ + bug1889-missing-identifier.c SOURCES := $(filter-out $(CUSTOMSOURCES) $(ERRORSOURCES),$(wildcard *.c)) diff --git a/test/misc/bug1889-missing-identifier.c b/test/ref/bug1889-missing-identifier.c similarity index 100% rename from test/misc/bug1889-missing-identifier.c rename to test/ref/bug1889-missing-identifier.c diff --git a/test/misc/bug1889-missing-identifier.ref b/test/ref/bug1889-missing-identifier.cref similarity index 100% rename from test/misc/bug1889-missing-identifier.ref rename to test/ref/bug1889-missing-identifier.cref From b0ef3572ead29871ea23cd1b2e890e6fe552838f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 12 Nov 2022 12:28:22 +0800 Subject: [PATCH 1891/2710] Improved error messages about missing identifiers. --- src/cc65/declare.c | 4 ++-- src/cc65/expr.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 59eb555c4..543cca421 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1452,7 +1452,7 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci NextToken (); } else { if (CurTok.Tok != TOK_LCURLY) { - Error ("Identifier expected"); + Error ("Identifier expected for enum tag name"); } AnonName (Ident, "enum"); } @@ -1573,7 +1573,7 @@ static void ParseOldStyleParamList (FuncDesc* F) } else { /* Not a parameter name */ - Error ("Identifier expected"); + Error ("Identifier expected for parameter name"); /* Try some smart error recovery */ SkipTokens (TokenList, sizeof(TokenList) / sizeof(TokenList[0])); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index fa6f21fb2..47a05eca0 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1439,7 +1439,7 @@ static void StructRef (ExprDesc* Expr) /* Skip the token and check for an identifier */ NextToken (); if (CurTok.Tok != TOK_IDENT) { - Error ("Identifier expected"); + Error ("Identifier expected for %s member", GetBasicTypeName (Expr->Type)); /* Make the expression an integer at address zero */ ED_MakeConstAbs (Expr, 0, type_int); return; From 894ba49cb59bafe8871042b15287139b145c2c7c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 12 Nov 2022 12:28:24 +0800 Subject: [PATCH 1892/2710] Improved error messages about missing type specifiers. --- src/cc65/declare.c | 29 +++++++++++++++++++++++++---- src/cc65/declare.h | 5 +++-- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 543cca421..3367b04d7 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1504,8 +1504,8 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci /* FALL THROUGH */ default: - if ((TSFlags & TS_MASK_DEFAULT_TYPE) != TS_DEFAULT_TYPE_INT) { - Error ("Type expected"); + if ((TSFlags & TS_MASK_DEFAULT_TYPE) == TS_DEFAULT_TYPE_NONE) { + D->Flags |= DS_NO_TYPE; D->Type[0].C = T_INT; D->Type[1].C = T_END; } else { @@ -1553,8 +1553,7 @@ static const Type* ParamTypeCvt (Type* T) static void ParseOldStyleParamList (FuncDesc* F) /* Parse an old-style (K&R) parameter list */ { - /* Some fix point tokens that are used for error recovery */ - static const token_t TokenList[] = { TOK_COMMA, TOK_RPAREN, TOK_SEMI }; + unsigned PrevErrorCount = ErrorCount; /* Parse params */ while (CurTok.Tok != TOK_RPAREN) { @@ -1572,6 +1571,9 @@ static void ParseOldStyleParamList (FuncDesc* F) NextToken (); } else { + /* Some fix point tokens that are used for error recovery */ + static const token_t TokenList[] = { TOK_COMMA, TOK_RPAREN, TOK_SEMI }; + /* Not a parameter name */ Error ("Identifier expected for parameter name"); @@ -1608,6 +1610,12 @@ static void ParseOldStyleParamList (FuncDesc* F) Error ("Illegal storage class"); } + /* Type must be specified */ + if ((Spec.Flags & DS_NO_TYPE) != 0) { + Error ("Expected declaration specifiers"); + break; + } + /* Parse a comma separated variable list */ while (1) { @@ -1655,6 +1663,14 @@ static void ParseOldStyleParamList (FuncDesc* F) /* Variable list must be semicolon terminated */ ConsumeSemi (); } + + if (PrevErrorCount != ErrorCount) { + /* Some fix point tokens that are used for error recovery */ + static const token_t TokenList[] = { TOK_COMMA, TOK_SEMI }; + + /* Try some smart error recovery */ + SkipTokens (TokenList, sizeof(TokenList) / sizeof(TokenList[0])); + } } @@ -1689,6 +1705,11 @@ static void ParseAnsiParamList (FuncDesc* F) Spec.StorageClass = SC_AUTO | SC_PARAM | SC_DEF; } + /* Type must be specified */ + if ((Spec.Flags & DS_NO_TYPE) != 0) { + Error ("Type specifier missing"); + } + /* Warn about new local type declaration */ if ((Spec.Flags & DS_NEW_TYPE_DECL) != 0) { Warning ("'%s' will be invisible out of this function", diff --git a/src/cc65/declare.h b/src/cc65/declare.h index ee9e1fc63..0facccba3 100644 --- a/src/cc65/declare.h +++ b/src/cc65/declare.h @@ -71,8 +71,9 @@ enum typespec_t { /* Masks for the Flags field in DeclSpec */ #define DS_DEF_STORAGE 0x0001U /* Default storage class used */ -#define DS_DEF_TYPE 0x0002U /* Default type used */ -#define DS_EXTRA_TYPE 0x0004U /* Extra type declared */ +#define DS_NO_TYPE 0x0002U /* No type explicitly specified */ +#define DS_DEF_TYPE 0x0006U /* Default type used */ +#define DS_EXTRA_TYPE 0x0008U /* Extra type declared */ #define DS_NEW_TYPE_DECL 0x0010U /* New type declared */ #define DS_NEW_TYPE_DEF 0x0020U /* New type defined */ #define DS_NEW_TYPE (DS_NEW_TYPE_DECL | DS_NEW_TYPE_DEF) From eb595b1f5f1054072cc5632c1c8be8e3a629f3b4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 12 Nov 2022 12:28:27 +0800 Subject: [PATCH 1893/2710] Improved error recovery with K&R-style function declarations. --- src/cc65/compile.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 73380f3df..1cb109bbe 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -178,7 +178,7 @@ static void Parse (void) ** or semicolon, it must be followed by a function body. */ if ((Decl.StorageClass & SC_FUNC) != 0) { - if (CurTok.Tok != TOK_COMMA && CurTok.Tok != TOK_SEMI) { + if (CurTok.Tok == TOK_LCURLY) { /* A definition */ Decl.StorageClass |= SC_DEF; @@ -190,6 +190,10 @@ static void Parse (void) FuncDef->Flags = (FuncDef->Flags & ~FD_EMPTY) | FD_VOID_PARAM; } } else { + if (CurTok.Tok != TOK_COMMA && CurTok.Tok != TOK_SEMI) { + Error ("Expected ',' or ';' after top level declarator"); + } + /* Just a declaration */ Decl.StorageClass |= SC_DECL; } @@ -325,7 +329,7 @@ static void Parse (void) if (CurTok.Tok == TOK_SEMI) { /* Prototype only */ NextToken (); - } else { + } else if (CurTok.Tok == TOK_LCURLY) { /* Parse the function body */ NewFunc (Sym, FuncDef); From 3af77e73333d34addc3b0e1658d41c265fb74123 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 12 Nov 2022 12:28:29 +0800 Subject: [PATCH 1894/2710] Improved error recovery in declarations with curly braces. --- src/cc65/declare.c | 11 ++++++++++- test/ref/bug1889-missing-identifier.cref | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 3367b04d7..99161e539 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1891,12 +1891,21 @@ static void DirectDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) } else { if (Mode == DM_NEED_IDENT) { /* Some fix point tokens that are used for error recovery */ - static const token_t TokenList[] = { TOK_COMMA, TOK_SEMI }; + static const token_t TokenList[] = { TOK_COMMA, TOK_SEMI, TOK_LCURLY, TOK_RCURLY }; Error ("Identifier expected"); /* Try some smart error recovery */ SkipTokens (TokenList, sizeof(TokenList) / sizeof(TokenList[0])); + + /* Skip curly braces */ + if (CurTok.Tok == TOK_LCURLY) { + static const token_t CurlyToken[] = { TOK_RCURLY }; + SkipTokens (CurlyToken, sizeof(CurlyToken) / sizeof(CurlyToken[0])); + NextToken (); + } else if (CurTok.Tok == TOK_RCURLY) { + NextToken (); + } } D->Ident[0] = '\0'; } diff --git a/test/ref/bug1889-missing-identifier.cref b/test/ref/bug1889-missing-identifier.cref index cd3f76849..acaf53f94 100644 --- a/test/ref/bug1889-missing-identifier.cref +++ b/test/ref/bug1889-missing-identifier.cref @@ -1,3 +1,5 @@ bug1889-missing-identifier.c:3: Error: Identifier expected +bug1889-missing-identifier.c:3: Error: ';' expected +bug1889-missing-identifier.c:3: Warning: Implicit 'int' is an obsolete feature bug1889-missing-identifier.c:4: Error: Identifier expected bug1889-missing-identifier.c:4: Warning: Implicit 'int' is an obsolete feature From 2c3ca15d901f38e7e955903816f0ad298538dcf4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 12 Nov 2022 12:32:27 +0800 Subject: [PATCH 1895/2710] Fixed marking unevaluated subexpressions for conditional operator. --- src/cc65/expr.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 932663b18..f7180c020 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3913,17 +3913,6 @@ static void hieQuest (ExprDesc* Expr) ED_Init (&Expr3); Expr3.Flags = Flags; - NextToken (); - - /* Convert non-integer constant to boolean constant, so that we may just - ** check it in the same way. - */ - if (ED_IsConstTrue (Expr)) { - ED_MakeConstBool (Expr, 1); - } else if (ED_IsConstFalse (Expr)) { - ED_MakeConstBool (Expr, 0); - } - if (!ConstantCond) { /* Condition codes not set, request a test */ ED_RequireTest (Expr); @@ -3935,6 +3924,15 @@ static void hieQuest (ExprDesc* Expr) FalseLab = GetLocalLabel (); g_falsejump (CF_NONE, FalseLab); } else { + /* Convert non-integer constant to boolean constant, so that we + ** may just check it in an easier way later. + */ + if (ED_IsConstTrue (Expr)) { + ED_MakeConstBool (Expr, 1); + } else if (ED_IsConstFalse (Expr)) { + ED_MakeConstBool (Expr, 0); + } + /* Constant boolean subexpression could still have deferred inc/dec ** operations, so just flush their side-effects at this sequence point. */ @@ -3943,9 +3941,18 @@ static void hieQuest (ExprDesc* Expr) if (Expr->IVal == 0) { /* Remember the current code position */ GetCodePos (&SkippedBranch); + + /* Expr2 is unevaluated when the condition is false */ + Expr2.Flags |= E_EVAL_UNEVAL; + } else { + /* Expr3 is unevaluated when the condition is true */ + Expr3.Flags |= E_EVAL_UNEVAL; } } + /* Skip the question mark */ + NextToken (); + /* Parse second expression. Remember for later if it is a NULL pointer ** expression, then load it into the primary. */ @@ -3977,26 +3984,22 @@ static void hieQuest (ExprDesc* Expr) /* Jump around the evaluation of the third expression */ TrueLab = GetLocalLabel (); - ConsumeColon (); - g_jump (TrueLab); /* Jump here if the first expression was false */ g_defcodelabel (FalseLab); } else { if (Expr->IVal == 0) { - /* Expr2 is unevaluated when the condition is false */ - Expr2.Flags |= E_EVAL_UNEVAL; - /* Remove the load code of Expr2 */ RemoveCode (&SkippedBranch); } else { /* Remember the current code position */ GetCodePos (&SkippedBranch); } - ConsumeColon(); } + ConsumeColon (); + /* Parse third expression. Remember for later if it is a NULL pointer ** expression, then load it into the primary. */ @@ -4022,9 +4025,6 @@ static void hieQuest (ExprDesc* Expr) Expr3.Type = PtrConversion (Expr3.Type); if (ConstantCond && Expr->IVal != 0) { - /* Expr3 is unevaluated when the condition is true */ - Expr3.Flags |= E_EVAL_UNEVAL; - /* Remove the load code of Expr3 */ RemoveCode (&SkippedBranch); } From d0c9b2de9902be5d0a33b5d14ceaa1a8144a8f9d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 12 Nov 2022 12:34:16 +0800 Subject: [PATCH 1896/2710] Added basic shift count check for <<= and >>= operations. --- src/cc65/assignment.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 9834ae5d1..549e18e95 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -322,6 +322,12 @@ static void OpAssignBitField (const GenDesc* Gen, ExprDesc* Expr, const char* Op } else if (Gen->Func == g_mod) { Error ("Modulo operation with zero"); } + } else if (Gen->Func == g_asl || Gen->Func == g_asr) { + if (Expr2.IVal < 0) { + Warning ("Shift count '%ld' is negative", Expr2.IVal); + } else if (Expr2.IVal >= (long)(SizeOf (Expr->Type) * 8)) { + Warning ("Shift count '%ld' >= width of type", Expr2.IVal); + } } /* Adjust the types of the operands if needed */ @@ -502,6 +508,12 @@ static void OpAssignArithmetic (const GenDesc* Gen, ExprDesc* Expr, const char* } else if (Gen->Func == g_mod) { Error ("Modulo operation with zero"); } + } else if (Gen->Func == g_asl || Gen->Func == g_asr) { + if (Expr2.IVal < 0) { + Warning ("Shift count '%ld' is negative", Expr2.IVal); + } else if (Expr2.IVal >= (long)(SizeOf (Expr->Type) * 8)) { + Warning ("Shift count '%ld' >= width of type", Expr2.IVal); + } } Gen->Func (Flags | CF_CONST, Expr2.IVal); } From 75be73cc8d4bd24fac6714ef95169555435eeb3e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 12 Nov 2022 12:32:27 +0800 Subject: [PATCH 1897/2710] Added utility functions to acquire bit width of types. --- src/cc65/assignment.c | 86 +++++++++++++++++++--------- src/cc65/datatype.c | 19 +++++++ src/cc65/datatype.h | 9 +++ src/cc65/expr.c | 117 ++++++++++++++++---------------------- src/cc65/ppexpr.c | 127 +++++++++++++++--------------------------- src/cc65/shiftexpr.c | 31 ++++++----- 6 files changed, 199 insertions(+), 190 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 549e18e95..ab501523d 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -315,19 +315,37 @@ static void OpAssignBitField (const GenDesc* Gen, ExprDesc* Expr, const char* Op } else if (Gen->Func == g_sub) { g_dec (Flags | CF_CONST, Expr2.IVal); } else { - if (Expr2.IVal == 0) { - /* Check for div by zero/mod by zero */ - if (Gen->Func == g_div) { - Error ("Division by zero"); - } else if (Gen->Func == g_mod) { - Error ("Modulo operation with zero"); - } - } else if (Gen->Func == g_asl || Gen->Func == g_asr) { - if (Expr2.IVal < 0) { - Warning ("Shift count '%ld' is negative", Expr2.IVal); - } else if (Expr2.IVal >= (long)(SizeOf (Expr->Type) * 8)) { - Warning ("Shift count '%ld' >= width of type", Expr2.IVal); - } + if (!ED_IsUneval (Expr)) { + if (Expr2.IVal == 0) { + /* Check for div by zero/mod by zero */ + if (Gen->Func == g_div) { + Error ("Division by zero"); + } else if (Gen->Func == g_mod) { + Error ("Modulo operation with zero"); + } + } else if (Gen->Func == g_asl || Gen->Func == g_asr) { + const Type* CalType = IntPromotion (Expr->Type); + unsigned ExprBits = BitSizeOf (CalType); + + /* If the shift count is greater than or equal to the width of the + ** promoted left operand, the behaviour is undefined according to + ** the standard. + */ + if (Expr2.IVal < 0) { + Warning ("Negative shift count %ld treated as %u for %s", + Expr2.IVal, + (unsigned)Expr2.IVal & (ExprBits - 1), + GetBasicTypeName (CalType)); + } else if (Expr2.IVal >= (long)ExprBits) { + Warning ("Shift count %ld >= width of %s treated as %u", + Expr2.IVal, + GetBasicTypeName (CalType), + (unsigned)Expr2.IVal & (ExprBits - 1)); + } + + /* Here we simply "wrap" the shift count around the width */ + Expr2.IVal &= ExprBits - 1; + } } /* Adjust the types of the operands if needed */ @@ -501,18 +519,36 @@ static void OpAssignArithmetic (const GenDesc* Gen, ExprDesc* Expr, const char* } else if (Gen->Func == g_sub) { g_dec (Flags | CF_CONST, Expr2.IVal); } else { - if (Expr2.IVal == 0) { - /* Check for div by zero/mod by zero */ - if (Gen->Func == g_div) { - Error ("Division by zero"); - } else if (Gen->Func == g_mod) { - Error ("Modulo operation with zero"); - } - } else if (Gen->Func == g_asl || Gen->Func == g_asr) { - if (Expr2.IVal < 0) { - Warning ("Shift count '%ld' is negative", Expr2.IVal); - } else if (Expr2.IVal >= (long)(SizeOf (Expr->Type) * 8)) { - Warning ("Shift count '%ld' >= width of type", Expr2.IVal); + if (!ED_IsUneval (Expr)) { + if (Expr2.IVal == 0 && !ED_IsUneval (Expr)) { + /* Check for div by zero/mod by zero */ + if (Gen->Func == g_div) { + Error ("Division by zero"); + } else if (Gen->Func == g_mod) { + Error ("Modulo operation with zero"); + } + } else if (Gen->Func == g_asl || Gen->Func == g_asr) { + const Type* CalType = IntPromotion (Expr->Type); + unsigned ExprBits = BitSizeOf (CalType); + + /* If the shift count is greater than or equal to the width of the + ** promoted left operand, the behaviour is undefined according to + ** the standard. + */ + if (Expr2.IVal < 0) { + Warning ("Negative shift count %ld treated as %u for %s", + Expr2.IVal, + (unsigned)Expr2.IVal & (ExprBits - 1), + GetBasicTypeName (CalType)); + } else if (Expr2.IVal >= (long)ExprBits) { + Warning ("Shift count %ld >= width of %s treated as %u", + Expr2.IVal, + GetBasicTypeName (CalType), + (unsigned)Expr2.IVal & (ExprBits - 1)); + } + + /* Here we simply "wrap" the shift count around the width */ + Expr2.IVal &= ExprBits - 1; } } Gen->Func (Flags | CF_CONST, Expr2.IVal); diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 9a661c037..023aefaf7 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -203,6 +203,14 @@ unsigned long GetIntegerTypeMax (const Type* Type) +unsigned BitSizeOf (const Type* T) +/* Return the size (in bit-width) of a data type */ +{ + return IsTypeBitField (T) ? T->A.B.Width : CHAR_BITS * SizeOf (T); +} + + + unsigned SizeOf (const Type* T) /* Compute size (in bytes) of object represented by type array */ { @@ -288,6 +296,17 @@ unsigned PSizeOf (const Type* T) +unsigned CheckedBitSizeOf (const Type* T) +/* Return the size (in bit-width) of a data type. If the size is zero, emit an +** error and return some valid size instead (so the rest of the compiler +** doesn't have to work with invalid sizes). +*/ +{ + return IsTypeBitField (T) ? T->A.B.Width : CHAR_BITS * CheckedSizeOf (T); +} + + + unsigned CheckedSizeOf (const Type* T) /* Return the size (in bytes) of a data type. If the size is zero, emit an ** error and return some valid size instead (so the rest of the compiler diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 5e4e2e39b..4a20422fb 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -287,12 +287,21 @@ unsigned long GetIntegerTypeMax (const Type* Type); ** The type must have a known size. */ +unsigned BitSizeOf (const Type* T); +/* Return the size (in bit-width) of a data type */ + unsigned SizeOf (const Type* T); /* Compute size (in bytes) of object represented by type array */ unsigned PSizeOf (const Type* T); /* Compute size (in bytes) of pointee object */ +unsigned CheckedBitSizeOf (const Type* T); +/* Return the size (in bit-width) of a data type. If the size is zero, emit an +** error and return some valid size instead (so the rest of the compiler +** doesn't have to work with invalid sizes). +*/ + unsigned CheckedSizeOf (const Type* T); /* Return the size (in bytes) of a data type. If the size is zero, emit an ** error and return some valid size instead (so the rest of the compiler diff --git a/src/cc65/expr.c b/src/cc65/expr.c index f7180c020..45dc9cc37 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2177,6 +2177,10 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ /* Check for const operands */ if (lconst && rconst) { + /* Evaluate the result for operands */ + unsigned long Val1 = Expr->IVal; + unsigned long Val2 = Expr2.IVal; + /* Both operands are constant, remove the generated code */ RemoveCode (&Mark1); @@ -2184,80 +2188,51 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ Expr->Type = ArithmeticConvert (Expr->Type, Expr2.Type); /* Handle the op differently for signed and unsigned types */ - if (IsSignSigned (Expr->Type)) { - - /* Evaluate the result for signed operands */ - signed long Val1 = Expr->IVal; - signed long Val2 = Expr2.IVal; - switch (Tok) { - case TOK_OR: - Expr->IVal = (Val1 | Val2); - break; - case TOK_XOR: - Expr->IVal = (Val1 ^ Val2); - break; - case TOK_AND: - Expr->IVal = (Val1 & Val2); - break; - case TOK_STAR: - Expr->IVal = (Val1 * Val2); - break; - case TOK_DIV: - if (Val2 == 0) { + switch (Tok) { + case TOK_OR: + Expr->IVal = (Val1 | Val2); + break; + case TOK_XOR: + Expr->IVal = (Val1 ^ Val2); + break; + case TOK_AND: + Expr->IVal = (Val1 & Val2); + break; + case TOK_STAR: + Expr->IVal = (Val1 * Val2); + break; + case TOK_DIV: + if (Val2 == 0) { + if (!ED_IsUneval (Expr)) { Error ("Division by zero"); - Expr->IVal = 0x7FFFFFFF; + } + Expr->IVal = 0xFFFFFFFF; + } else { + /* Handle signed and unsigned operands differently */ + if (IsSignSigned (Expr->Type)) { + Expr->IVal = ((long)Val1 / (long)Val2); } else { Expr->IVal = (Val1 / Val2); } - break; - case TOK_MOD: - if (Val2 == 0) { + } + break; + case TOK_MOD: + if (Val2 == 0) { + if (!ED_IsUneval (Expr)) { Error ("Modulo operation with zero"); - Expr->IVal = 0; + } + Expr->IVal = 0; + } else { + /* Handle signed and unsigned operands differently */ + if (IsSignSigned (Expr->Type)) { + Expr->IVal = ((long)Val1 % (long)Val2); } else { Expr->IVal = (Val1 % Val2); } - break; - default: - Internal ("hie_internal: got token 0x%X\n", Tok); - } - } else { - - /* Evaluate the result for unsigned operands */ - unsigned long Val1 = Expr->IVal; - unsigned long Val2 = Expr2.IVal; - switch (Tok) { - case TOK_OR: - Expr->IVal = (Val1 | Val2); - break; - case TOK_XOR: - Expr->IVal = (Val1 ^ Val2); - break; - case TOK_AND: - Expr->IVal = (Val1 & Val2); - break; - case TOK_STAR: - Expr->IVal = (Val1 * Val2); - break; - case TOK_DIV: - if (Val2 == 0) { - Error ("Division by zero"); - Expr->IVal = 0xFFFFFFFF; - } else { - Expr->IVal = (Val1 / Val2); - } - break; - case TOK_MOD: - if (Val2 == 0) { - Error ("Modulo operation with zero"); - Expr->IVal = 0; - } else { - Expr->IVal = (Val1 % Val2); - } - break; - default: - Internal ("hie_internal: got token 0x%X\n", Tok); - } + } + break; + default: + Internal ("hie_internal: got token 0x%X\n", Tok); } /* Limit the calculated value to the range of its type */ @@ -2314,10 +2289,12 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ /* Second value is constant - check for div */ type |= CF_CONST; rtype |= CF_CONST; - if (Tok == TOK_DIV && Expr2.IVal == 0) { - Error ("Division by zero"); - } else if (Tok == TOK_MOD && Expr2.IVal == 0) { - Error ("Modulo operation with zero"); + if (Expr2.IVal == 0 && !ED_IsUneval (Expr)) { + if (Tok == TOK_DIV) { + Error ("Division by zero"); + } else if (Tok == TOK_MOD) { + Error ("Modulo operation with zero"); + } } if ((Gen->Flags & GEN_NOPUSH) != 0) { RemoveCode (&Mark2); diff --git a/src/cc65/ppexpr.c b/src/cc65/ppexpr.c index 0942dc8f8..73ec69de8 100644 --- a/src/cc65/ppexpr.c +++ b/src/cc65/ppexpr.c @@ -305,97 +305,60 @@ static void PPhie_internal (const token_t* Ops, /* List of generators */ if (PPEvaluationEnabled && !PPEvaluationFailed) { + /* Evaluate the result for operands */ + unsigned long Val1 = Expr->IVal; + unsigned long Val2 = Rhs.IVal; + /* If either side is unsigned, the result is unsigned */ Expr->Flags |= Rhs.Flags & PPEXPR_UNSIGNED; - /* Handle the op differently for signed and unsigned integers */ - if ((Expr->Flags & PPEXPR_UNSIGNED) == 0) { - - /* Evaluate the result for signed operands */ - signed long Val1 = Expr->IVal; - signed long Val2 = Rhs.IVal; - switch (Tok) { - case TOK_OR: - Expr->IVal = (Val1 | Val2); - break; - case TOK_XOR: - Expr->IVal = (Val1 ^ Val2); - break; - case TOK_AND: - Expr->IVal = (Val1 & Val2); - break; - case TOK_PLUS: - Expr->IVal = (Val1 + Val2); - break; - case TOK_MINUS: - Expr->IVal = (Val1 - Val2); - break; - case TOK_MUL: - Expr->IVal = (Val1 * Val2); - break; - case TOK_DIV: - if (Val2 == 0) { - PPError ("Division by zero"); - Expr->IVal = 0; + switch (Tok) { + case TOK_OR: + Expr->IVal = (Val1 | Val2); + break; + case TOK_XOR: + Expr->IVal = (Val1 ^ Val2); + break; + case TOK_AND: + Expr->IVal = (Val1 & Val2); + break; + case TOK_PLUS: + Expr->IVal = (Val1 + Val2); + break; + case TOK_MINUS: + Expr->IVal = (Val1 - Val2); + break; + case TOK_MUL: + Expr->IVal = (Val1 * Val2); + break; + case TOK_DIV: + if (Val2 == 0) { + PPError ("Division by zero"); + Expr->IVal = 0; + } else { + /* Handle signed and unsigned operands differently */ + if ((Expr->Flags & PPEXPR_UNSIGNED) == 0) { + Expr->IVal = ((long)Val1 / (long)Val2); } else { Expr->IVal = (Val1 / Val2); } - break; - case TOK_MOD: - if (Val2 == 0) { - PPError ("Modulo operation with zero"); - Expr->IVal = 0; + } + break; + case TOK_MOD: + if (Val2 == 0) { + PPError ("Modulo operation with zero"); + Expr->IVal = 0; + } else { + /* Handle signed and unsigned operands differently */ + if ((Expr->Flags & PPEXPR_UNSIGNED) == 0) { + Expr->IVal = ((long)Val1 % (long)Val2); } else { Expr->IVal = (Val1 % Val2); } - break; - default: - Internal ("PPhie_internal: got token 0x%X\n", Tok); - } - - } else { - - /* Evaluate the result for unsigned operands */ - unsigned long Val1 = Expr->IVal; - unsigned long Val2 = Rhs.IVal; - switch (Tok) { - case TOK_OR: - Expr->IVal = (Val1 | Val2); - break; - case TOK_XOR: - Expr->IVal = (Val1 ^ Val2); - break; - case TOK_AND: - Expr->IVal = (Val1 & Val2); - break; - case TOK_PLUS: - Expr->IVal = (Val1 + Val2); - break; - case TOK_MINUS: - Expr->IVal = (Val1 - Val2); - break; - case TOK_MUL: - Expr->IVal = (Val1 * Val2); - break; - case TOK_DIV: - if (Val2 == 0) { - PPError ("Division by zero"); - Expr->IVal = 0; - } else { - Expr->IVal = (Val1 / Val2); - } - break; - case TOK_MOD: - if (Val2 == 0) { - PPError ("Modulo operation with zero"); - Expr->IVal = 0; - } else { - Expr->IVal = (Val1 % Val2); - } - break; - default: - Internal ("PPhie_internal: got token 0x%X\n", Tok); - } + } + break; + default: + Internal ("PPhie_internal: got token 0x%X\n", Tok); } } } diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c index 312086f3c..48426f1f2 100644 --- a/src/cc65/shiftexpr.c +++ b/src/cc65/shiftexpr.c @@ -139,22 +139,27 @@ void ShiftExpr (struct ExprDesc* Expr) /* Remove the code that pushes the rhs onto the stack. */ RemoveCode (&Mark2); - /* If the shift count is greater or equal than the bit count of - ** the operand, the behaviour is undefined according to the - ** standard. + /* If the shift count is greater than or equal to the width of the + ** promoted left operand, the behaviour is undefined according to + ** the standard. */ - if (Expr2.IVal < 0) { - - Warning ("Shift count '%ld' is negative", Expr2.IVal); - Expr2.IVal &= ExprBits - 1; - - } else if (Expr2.IVal >= (long) ExprBits) { - - Warning ("Shift count '%ld' >= width of type", Expr2.IVal); - Expr2.IVal &= ExprBits - 1; - + if (!ED_IsUneval (Expr)) { + if (Expr2.IVal < 0) { + Warning ("Negative shift count %ld treated as %u for %s", + Expr2.IVal, + (unsigned)Expr2.IVal & (ExprBits - 1), + GetBasicTypeName (ResultType)); + } else if (Expr2.IVal >= (long) ExprBits) { + Warning ("Shift count %ld >= width of %s treated as %u", + Expr2.IVal, + GetBasicTypeName (ResultType), + (unsigned)Expr2.IVal & (ExprBits - 1)); + } } + /* Here we simply "wrap" the shift count around the width */ + Expr2.IVal &= ExprBits - 1; + /* If the shift count is zero, nothing happens. If the left hand ** side is a constant, the result is constant. */ From 73897afacea77ef59c4d7c906f021c8dd6a7ca6b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 12 Nov 2022 12:36:22 +0800 Subject: [PATCH 1898/2710] Additional check for out of ranges of bit-fields in bitwise-shifts. --- src/cc65/assignment.c | 13 ++++++++++++- src/cc65/shiftexpr.c | 9 +++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index ab501523d..2adb1c20e 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -345,7 +345,12 @@ static void OpAssignBitField (const GenDesc* Gen, ExprDesc* Expr, const char* Op /* Here we simply "wrap" the shift count around the width */ Expr2.IVal &= ExprBits - 1; - } + + /* Additional check for bit-fields */ + if (Expr2.IVal >= (long)Expr->Type->A.B.Width) { + Warning ("Shift count %ld >= width of bit-field", Expr2.IVal); + } + } } /* Adjust the types of the operands if needed */ @@ -549,6 +554,12 @@ static void OpAssignArithmetic (const GenDesc* Gen, ExprDesc* Expr, const char* /* Here we simply "wrap" the shift count around the width */ Expr2.IVal &= ExprBits - 1; + + /* Additional check for bit width */ + if (Expr2.IVal >= (long)BitSizeOf (Expr->Type)) { + Warning ("Shift count %ld >= width of %s", + Expr2.IVal, GetBasicTypeName (Expr->Type)); + } } } Gen->Func (Flags | CF_CONST, Expr2.IVal); diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c index 48426f1f2..b8fb70434 100644 --- a/src/cc65/shiftexpr.c +++ b/src/cc65/shiftexpr.c @@ -160,6 +160,15 @@ void ShiftExpr (struct ExprDesc* Expr) /* Here we simply "wrap" the shift count around the width */ Expr2.IVal &= ExprBits - 1; + /* Additional check for bit-fields */ + if (IsTypeBitField (Expr->Type) && + Tok == TOK_SHR && + Expr2.IVal >= (long) Expr->Type->A.B.Width) { + if (!ED_IsUneval (Expr)) { + Warning ("Right-shift count %ld >= width of bit-field", Expr2.IVal); + } + } + /* If the shift count is zero, nothing happens. If the left hand ** side is a constant, the result is constant. */ From cc177208b465cd24dfd1f1a198a26913b571086f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 12 Nov 2022 21:05:01 +0800 Subject: [PATCH 1899/2710] Added tests for diagnostics in unevaluated context. --- test/misc/Makefile | 14 +++-- test/misc/bug1768.c | 149 +++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 149 insertions(+), 14 deletions(-) diff --git a/test/misc/Makefile b/test/misc/Makefile index f18f40da6..d0b8979b0 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -64,12 +64,6 @@ $(WORKDIR)/int-static-1888.$1.$2.prg: int-static-1888.c | $(WORKDIR) $(if $(QUIET),echo misc/int-static-1888.$1.$2.prg) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) -# should compile, but gives an error -$(WORKDIR)/bug1768.$1.$2.prg: bug1768.c | $(WORKDIR) - @echo "FIXME: " $$@ "currently does not compile." - $(if $(QUIET),echo misc/bug1768.$1.$2.prg) - $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - # should compile, but gives an error $(WORKDIR)/bug760.$1.$2.prg: bug760.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." @@ -138,6 +132,14 @@ $(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) +# this one requires -Werror +$(WORKDIR)/bug1768.$1.$2.prg: bug1768.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug1768.$1.$2.prg) + $(CC65) -Werror -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) + $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) + $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) + $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) + # should compile, but then hangs in an endless loop $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) $(if $(QUIET),echo misc/endless.$1.$2.prg) diff --git a/test/misc/bug1768.c b/test/misc/bug1768.c index 916aa64bc..35cee1049 100644 --- a/test/misc/bug1768.c +++ b/test/misc/bug1768.c @@ -1,14 +1,147 @@ +/* + Copyright 2021-2022, The cc65 Authors -#include <stdlib.h> + This software is provided "as-is", without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. -int a = 1 || (8 / 0); -int b = 0 && (8 % 0); -int c = 1 ? 42 : (0 % 0); -int d = 1 || a / 0; -int e = 0 && b % 0; -int f = 1 ? 42 : (a %= 0, b /= 0); + Permission is granted to anyone to use this software for any purpose, + including commercial applications; and, to alter it and redistribute it + freely, subject to the following restrictions: + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated, but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Test of operations in unevaluated context resulted from 'sizeof' and + short-circuited code-paths in AND, OR and conditional operations. + + See also: + https://github.com/cc65/cc65/issues/1768#issuecomment-1175221466 +*/ + +#include <stdio.h> + +static int failures; + +#define TEST(EXPR)\ + {\ + int acc = 0;\ + acc += sizeof((EXPR), 0);\ + acc += (0 && (EXPR));\ + acc += (1 || (EXPR));\ + acc += (0 ? (EXPR) : 0);\ + acc += (1 ? 0 : (EXPR));\ + if (acc == 0) {\ + printf("acc = %d\n", acc);\ + ++failures;\ + }\ + } + +/* Division by zero/modulo with zero */ +void test_1(void) +{ + int i; + int j; + TEST((i / 0) | (j % 0)) +} + +/* Division by zero/modulo with zero */ +void test_2(void) +{ + int i; + int j; + TEST((i /= 0) | (j %= 0)) +} + +/* Shift by too wide counts */ +void test_3(void) +{ + int i; + int j; + TEST((i << 32) | (j >> 32)) +} + +/* Shift by too wide counts */ +void test_4(void) +{ + int i; + int j; + TEST((i <<= 32) | (j >>= 32)) +} + +/* Shift by negative counts */ +void test_5(void) +{ + int i; + int j; + TEST((i << -1) | (j >> -1)) +} + +/* Shift by negative counts */ +void test_6(void) +{ + int i; + int j; + TEST((i <<= -1) | (j >>= -1)) +} + +/* Shift bit-fields */ +void test_7(void) +{ + struct S { + long i : 24; /* Will be promoted to 32-bit integer in calculation */ + long j : 8; /* Will be promoted to 16-bit integer in calculation */ + } s; + long k; + + s.i = 1; + printf("%u\n", sizeof(s.i << 24)); + s.i = 2; + k = s.i << 16; + if (k != 0x00020000L) { + printf("k = %ld, expected: %ld\n", k, 0x00020000L); + } + TEST(s.j >> 16) +} + +/* Shift bit-fields */ +void test_8(void) +{ + struct S { + long i : 24; /* Will be promoted to 32-bit integer in calculation */ + long j : 8; /* Will be promoted to 16-bit integer in calculation */ + } s; + long k; + + s.i = 3; + printf("%u\n", sizeof(s.i << 24)); + s.i = 4; + k = s.i <<= 16; + if (k != 0x00040000L) { + printf("k = %ld, expected: %ld\n", k, 0x00040000L); + } + TEST(s.j >>= 8) +} + +/* Do all tests */ int main(void) { - return EXIT_SUCCESS; + test_1(); + test_2(); + test_3(); + test_4(); + test_5(); + test_6(); + test_7(); + test_8(); + + printf("Failures: %d\n", failures); + return failures; } From 9d693d2c80029461e7650c5d17bcd22f19db268a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 12 Nov 2022 22:13:56 +0800 Subject: [PATCH 1900/2710] Warnings instead of errors for division-by-zero/modulo-with-zero in evaluation. --- src/cc65/assignment.c | 8 ++++---- src/cc65/expr.c | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index 2adb1c20e..54ab28d4e 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -319,9 +319,9 @@ static void OpAssignBitField (const GenDesc* Gen, ExprDesc* Expr, const char* Op if (Expr2.IVal == 0) { /* Check for div by zero/mod by zero */ if (Gen->Func == g_div) { - Error ("Division by zero"); + Warning ("Division by zero"); } else if (Gen->Func == g_mod) { - Error ("Modulo operation with zero"); + Warning ("Modulo operation with zero"); } } else if (Gen->Func == g_asl || Gen->Func == g_asr) { const Type* CalType = IntPromotion (Expr->Type); @@ -528,9 +528,9 @@ static void OpAssignArithmetic (const GenDesc* Gen, ExprDesc* Expr, const char* if (Expr2.IVal == 0 && !ED_IsUneval (Expr)) { /* Check for div by zero/mod by zero */ if (Gen->Func == g_div) { - Error ("Division by zero"); + Warning ("Division by zero"); } else if (Gen->Func == g_mod) { - Error ("Modulo operation with zero"); + Warning ("Modulo operation with zero"); } } else if (Gen->Func == g_asl || Gen->Func == g_asr) { const Type* CalType = IntPromotion (Expr->Type); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 45dc9cc37..78a4c516a 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -2204,7 +2204,7 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ case TOK_DIV: if (Val2 == 0) { if (!ED_IsUneval (Expr)) { - Error ("Division by zero"); + Warning ("Division by zero"); } Expr->IVal = 0xFFFFFFFF; } else { @@ -2219,7 +2219,7 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ case TOK_MOD: if (Val2 == 0) { if (!ED_IsUneval (Expr)) { - Error ("Modulo operation with zero"); + Warning ("Modulo operation with zero"); } Expr->IVal = 0; } else { @@ -2291,9 +2291,9 @@ static void hie_internal (const GenDesc* Ops, /* List of generators */ rtype |= CF_CONST; if (Expr2.IVal == 0 && !ED_IsUneval (Expr)) { if (Tok == TOK_DIV) { - Error ("Division by zero"); + Warning ("Division by zero"); } else if (Tok == TOK_MOD) { - Error ("Modulo operation with zero"); + Warning ("Modulo operation with zero"); } } if ((Gen->Flags & GEN_NOPUSH) != 0) { From 7b436e982322d09c4ee51bf377165fb1716fe83b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 13 Nov 2022 01:01:24 +0800 Subject: [PATCH 1901/2710] Added tests for #1895 fix. --- test/err/bug1895-assign1a.c | 5 + test/err/bug1895-assign1b.c | 5 + test/err/bug1895-assign2a.c | 5 + test/err/bug1895-assign2b.c | 5 + test/err/bug1895-assign4a.c | 5 + test/err/bug1895-assign4b.c | 5 + test/err/bug1895-assign5a.c | 5 + test/err/bug1895-assign5b.c | 5 + test/err/bug1895-common.h | 196 ++++++++++++++++++++++++++++++++++ test/err/bug1895-cond1.c | 5 + test/err/bug1895-cond2.c | 5 + test/err/bug1895-cond3.c | 5 + test/err/bug1895-cond4.c | 5 + test/err/bug1895-cond5.c | 5 + test/err/bug1895-prototype1.c | 5 + test/err/bug1895-prototype2.c | 5 + test/err/bug1895-prototype3.c | 5 + test/err/bug1895-prototype4.c | 5 + test/err/bug1895-prototype5.c | 5 + 19 files changed, 286 insertions(+) create mode 100644 test/err/bug1895-assign1a.c create mode 100644 test/err/bug1895-assign1b.c create mode 100644 test/err/bug1895-assign2a.c create mode 100644 test/err/bug1895-assign2b.c create mode 100644 test/err/bug1895-assign4a.c create mode 100644 test/err/bug1895-assign4b.c create mode 100644 test/err/bug1895-assign5a.c create mode 100644 test/err/bug1895-assign5b.c create mode 100644 test/err/bug1895-common.h create mode 100644 test/err/bug1895-cond1.c create mode 100644 test/err/bug1895-cond2.c create mode 100644 test/err/bug1895-cond3.c create mode 100644 test/err/bug1895-cond4.c create mode 100644 test/err/bug1895-cond5.c create mode 100644 test/err/bug1895-prototype1.c create mode 100644 test/err/bug1895-prototype2.c create mode 100644 test/err/bug1895-prototype3.c create mode 100644 test/err/bug1895-prototype4.c create mode 100644 test/err/bug1895-prototype5.c diff --git a/test/err/bug1895-assign1a.c b/test/err/bug1895-assign1a.c new file mode 100644 index 000000000..223964104 --- /dev/null +++ b/test/err/bug1895-assign1a.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_1_SUB_1_A + +#include "bug1895-common.h" diff --git a/test/err/bug1895-assign1b.c b/test/err/bug1895-assign1b.c new file mode 100644 index 000000000..cccc0a318 --- /dev/null +++ b/test/err/bug1895-assign1b.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_1_SUB_1_B + +#include "bug1895-common.h" diff --git a/test/err/bug1895-assign2a.c b/test/err/bug1895-assign2a.c new file mode 100644 index 000000000..512b658a9 --- /dev/null +++ b/test/err/bug1895-assign2a.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_1_SUB_2_A + +#include "bug1895-common.h" diff --git a/test/err/bug1895-assign2b.c b/test/err/bug1895-assign2b.c new file mode 100644 index 000000000..d07191206 --- /dev/null +++ b/test/err/bug1895-assign2b.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_1_SUB_2_B + +#include "bug1895-common.h" diff --git a/test/err/bug1895-assign4a.c b/test/err/bug1895-assign4a.c new file mode 100644 index 000000000..c2a6f25de --- /dev/null +++ b/test/err/bug1895-assign4a.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_1_SUB_4_A + +#include "bug1895-common.h" diff --git a/test/err/bug1895-assign4b.c b/test/err/bug1895-assign4b.c new file mode 100644 index 000000000..740e10b04 --- /dev/null +++ b/test/err/bug1895-assign4b.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_1_SUB_4_B + +#include "bug1895-common.h" diff --git a/test/err/bug1895-assign5a.c b/test/err/bug1895-assign5a.c new file mode 100644 index 000000000..fed4e07d9 --- /dev/null +++ b/test/err/bug1895-assign5a.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_1_SUB_5_A + +#include "bug1895-common.h" diff --git a/test/err/bug1895-assign5b.c b/test/err/bug1895-assign5b.c new file mode 100644 index 000000000..ed8498e34 --- /dev/null +++ b/test/err/bug1895-assign5b.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_1_SUB_5_B + +#include "bug1895-common.h" diff --git a/test/err/bug1895-common.h b/test/err/bug1895-common.h new file mode 100644 index 000000000..03f02e2de --- /dev/null +++ b/test/err/bug1895-common.h @@ -0,0 +1,196 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types + + Test of incompatible pointer/array types in assignment ans conditional + expressions, as well as function prototypes. + + In each source file, define a single macro and include this file to perform + a coresponding test individually. + + https://github.com/cc65/cc65/issues/1895 +*/ + +/* Test 1 suite */ +#ifdef DO_TEST_1_SUB_1_A +#define TEST_1_SUB_1_A CMP_TYPES_1 +#else +#define TEST_1_SUB_1_A BLANK +#endif + +#ifdef DO_TEST_1_SUB_1_B +#define TEST_1_SUB_1_B CMP_TYPES_1 +#else +#define TEST_1_SUB_1_B BLANK +#endif + +#ifdef DO_TEST_1_SUB_2_A +#define TEST_1_SUB_2_A CMP_TYPES_1 +#else +#define TEST_1_SUB_2_A BLANK +#endif + +#ifdef DO_TEST_1_SUB_2_B +#define TEST_1_SUB_2_B CMP_TYPES_1 +#else +#define TEST_1_SUB_2_B BLANK +#endif + +#ifdef DO_TEST_1_SUB_4_A +#define TEST_1_SUB_4_A CMP_TYPES_1 +#else +#define TEST_1_SUB_4_A BLANK +#endif + +#ifdef DO_TEST_1_SUB_4_B +#define TEST_1_SUB_4_B CMP_TYPES_1 +#else +#define TEST_1_SUB_4_B BLANK +#endif + +#ifdef DO_TEST_1_SUB_5_A +#define TEST_1_SUB_5_A CMP_TYPES_1 +#else +#define TEST_1_SUB_5_A BLANK +#endif + +#ifdef DO_TEST_1_SUB_5_B +#define TEST_1_SUB_5_B CMP_TYPES_1 +#else +#define TEST_1_SUB_5_B BLANK +#endif + +/* Test 2 suite */ +#ifdef DO_TEST_2_SUB_1 +#define TEST_2_SUB_1 CMP_TYPES_2 +#else +#define TEST_2_SUB_1 BLANK +#endif + +#ifdef DO_TEST_2_SUB_2 +#define TEST_2_SUB_2 CMP_TYPES_2 +#else +#define TEST_2_SUB_2 BLANK +#endif + +#ifdef DO_TEST_2_SUB_3 +#define TEST_2_SUB_3 CMP_TYPES_2 +#else +#define TEST_2_SUB_3 BLANK +#endif + +#ifdef DO_TEST_2_SUB_4 +#define TEST_2_SUB_4 CMP_TYPES_2 +#else +#define TEST_2_SUB_4 BLANK +#endif + +#ifdef DO_TEST_2_SUB_5 +#define TEST_2_SUB_5 CMP_TYPES_2 +#else +#define TEST_2_SUB_5 BLANK +#endif + +/* Test 3 suite */ +#ifdef DO_TEST_3_SUB_1 +#define TEST_3_SUB_1 CMP_TYPES_3 +#else +#define TEST_3_SUB_1 BLANK +#endif + +#ifdef DO_TEST_3_SUB_2 +#define TEST_3_SUB_2 CMP_TYPES_3 +#else +#define TEST_3_SUB_2 BLANK +#endif + +#ifdef DO_TEST_3_SUB_3 +#define TEST_3_SUB_3 CMP_TYPES_3 +#else +#define TEST_3_SUB_3 BLANK +#endif + +#ifdef DO_TEST_3_SUB_4 +#define TEST_3_SUB_4 CMP_TYPES_3 +#else +#define TEST_3_SUB_4 BLANK +#endif + +#ifdef DO_TEST_3_SUB_5 +#define TEST_3_SUB_5 CMP_TYPES_3 +#else +#define TEST_3_SUB_5 BLANK +#endif + +/* Implementation */ +#define CONCAT(a, b) CONCAT_impl_(a, b) +#define CONCAT_impl_(a, b) a##b +#define BLANK(...) +#define DECL_FUNCS(A, B)\ + void CONCAT(foo_,__LINE__)(A); void CONCAT(foo_,__LINE__)(B); + +/* Test with assignment */ +#define CMP_TYPES_1(A, B)\ + do {\ + A p; B q;\ +_Pragma("warn(error, on)")\ + p = q;\ +_Pragma("warn(error, off)")\ + } while (0) + +/* Test with conditional expression */ +#define CMP_TYPES_2(A, B)\ + do {\ + A p; B q;\ +_Pragma("warn(error, on)")\ + v = v ? p : q;\ +_Pragma("warn(error, off)")\ + } while (0) + +/* Test with function prototype */ +#define CMP_TYPES_3(A, B)\ + do {\ + DECL_FUNCS(A,B);\ + } while (0) + +static void *v; + +typedef int (*p1)[3]; /* pointer to array */ +typedef int **q1; /* pointer to pointer */ +typedef int (**p2)[3]; /* pointer to pointer to array */ +typedef int ***q2; /* pointer to pointer to pointer */ +typedef int p3[1][3]; /* array of array */ +typedef int *q3[1]; /* array of pointer */ +typedef int const **p4; /* pointer to pointer to const */ +typedef int **q4; /* pointer to pointer to non-const */ +typedef int (*p5)(int (*)(p3)); /* pointer to function taking pointer to function taking pointer to array */ +typedef int (*q5)(int (*)(q3)); /* pointer to function taking pointer to function taking pointer to pointer */ + +int main(void) +{ + /* Warnings */ + TEST_1_SUB_1_A(p1, q1); + TEST_1_SUB_1_B(q1, p1); + TEST_1_SUB_2_A(p2, q2); + TEST_1_SUB_2_B(q2, p2); + /* TEST_1_SUB_3_A(p3, q3); */ + /* TEST_1_SUB_3_B(q3, p3); */ + TEST_1_SUB_4_A(p4, q4); + TEST_1_SUB_4_B(q4, p4); + TEST_1_SUB_5_A(p5, q5); + TEST_1_SUB_5_B(q5, p5); + + /* GCC and clang give warnings while cc65 gives errors */ + TEST_2_SUB_1(p1, q1); + TEST_2_SUB_2(p2, q2); + TEST_2_SUB_3(p3, q3); + TEST_2_SUB_4(p4, q4); + TEST_2_SUB_5(p5, q5); + + /* Errors */ + TEST_3_SUB_1(p1, q1); + TEST_3_SUB_2(p2, q2); + TEST_3_SUB_3(p3, q3); + TEST_3_SUB_4(p4, q4); + TEST_3_SUB_5(p5, q5); + + return 0; +} diff --git a/test/err/bug1895-cond1.c b/test/err/bug1895-cond1.c new file mode 100644 index 000000000..ac6a301c9 --- /dev/null +++ b/test/err/bug1895-cond1.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_2_SUB_1 + +#include "bug1895-common.h" diff --git a/test/err/bug1895-cond2.c b/test/err/bug1895-cond2.c new file mode 100644 index 000000000..81b8b2912 --- /dev/null +++ b/test/err/bug1895-cond2.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_2_SUB_2 + +#include "bug1895-common.h" diff --git a/test/err/bug1895-cond3.c b/test/err/bug1895-cond3.c new file mode 100644 index 000000000..f1571acbf --- /dev/null +++ b/test/err/bug1895-cond3.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_2_SUB_3 + +#include "bug1895-common.h" diff --git a/test/err/bug1895-cond4.c b/test/err/bug1895-cond4.c new file mode 100644 index 000000000..e7ef77964 --- /dev/null +++ b/test/err/bug1895-cond4.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_2_SUB_4 + +#include "bug1895-common.h" diff --git a/test/err/bug1895-cond5.c b/test/err/bug1895-cond5.c new file mode 100644 index 000000000..1625c599b --- /dev/null +++ b/test/err/bug1895-cond5.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_2_SUB_5 + +#include "bug1895-common.h" diff --git a/test/err/bug1895-prototype1.c b/test/err/bug1895-prototype1.c new file mode 100644 index 000000000..30331e757 --- /dev/null +++ b/test/err/bug1895-prototype1.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_3_SUB_1 + +#include "bug1895-common.h" diff --git a/test/err/bug1895-prototype2.c b/test/err/bug1895-prototype2.c new file mode 100644 index 000000000..c8fe213f4 --- /dev/null +++ b/test/err/bug1895-prototype2.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_3_SUB_2 + +#include "bug1895-common.h" diff --git a/test/err/bug1895-prototype3.c b/test/err/bug1895-prototype3.c new file mode 100644 index 000000000..f7d2b79e4 --- /dev/null +++ b/test/err/bug1895-prototype3.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_3_SUB_3 + +#include "bug1895-common.h" diff --git a/test/err/bug1895-prototype4.c b/test/err/bug1895-prototype4.c new file mode 100644 index 000000000..3d0fe2c05 --- /dev/null +++ b/test/err/bug1895-prototype4.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_3_SUB_4 + +#include "bug1895-common.h" diff --git a/test/err/bug1895-prototype5.c b/test/err/bug1895-prototype5.c new file mode 100644 index 000000000..ba9b997c9 --- /dev/null +++ b/test/err/bug1895-prototype5.c @@ -0,0 +1,5 @@ +/* Bug #1895 - missing diagnostics on incompatible pointer/array types */ + +#define DO_TEST_3_SUB_5 + +#include "bug1895-common.h" From d7a804d120812401b389163996af28551cc2013b Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Sat, 12 Nov 2022 23:12:25 +0100 Subject: [PATCH 1902/2710] Split stdin and stdout in test/asm/ Some tests pipe the stdout and stderr of the compiler or assembler into a file and compare the result with a reference. This has the subtle problem that both stdout and stderr and buffered i/o streams that may or may not work the same on different OSs or even shells. That means the order of the lines in the resulting file is not guaranteed. In practise it is "mostly" not an issue, but "we" still stumbled about one test where different behaviour can be triggered depending on running it in cmd.exe or bash (msys): test/asm/listing output of 010-paramcount.bin differs from the reference output when running the test from cmd.exe. The solution is most likely to have two reference files and not redirect into one file. This patch fixes the issue (cf. #1912) for the directory test/asm/. --- test/asm/listing/Makefile | 54 +++++++++++++++---- test/asm/listing/ref/010-paramcount.err-ref | 9 ---- test/asm/listing/ref/010-paramcount.err2-ref | 9 ++++ ...ss.err-ref => 030-assert-success.err2-ref} | 0 ...rr-ref => 030-assert-success.ld65err2-ref} | 0 ...rror.err-ref => 031-assert-error.err2-ref} | 0 ...err-ref => 032-assert-error2.ld65err2-ref} | 0 ...err-ref => 032-assert-error3.ld65err2-ref} | 0 ...err-ref => 032-assert-error4.ld65err2-ref} | 0 ...err-ref => 032-assert-error5.ld65err2-ref} | 0 ...err-ref => 032-assert-error6.ld65err2-ref} | 0 ...err-ref => 032-assert-error7.ld65err2-ref} | 0 ...err-ref => 032-assert-error8.ld65err2-ref} | 0 ...033-assert-ldwarning-success.ld65err2-ref} | 0 ...1.err-ref => 034-assert-lderror1.err2-ref} | 0 ...r-ref => 034-assert-lderror2.ld65err2-ref} | 0 ...r-ref => 034-assert-lderror3.ld65err2-ref} | 0 ...r-ref => 034-assert-lderror4.ld65err2-ref} | 0 ...r-ref => 034-assert-lderror6.ld65err2-ref} | 0 ...r-ref => 034-assert-lderror7.ld65err2-ref} | 0 ...r-ref => 034-assert-lderror8.ld65err2-ref} | 0 ...ign.ld65err-ref => 040-align.ld65err2-ref} | 0 ...se-on-1.err-ref => 050-case-on-1.err2-ref} | 0 ...se-on-2.err-ref => 050-case-on-2.err2-ref} | 0 ...se-on-3.err-ref => 050-case-on-3.err2-ref} | 0 ...se-on-4.err-ref => 050-case-on-4.err2-ref} | 0 ...se-on-5.err-ref => 050-case-on-5.err2-ref} | 0 27 files changed, 53 insertions(+), 19 deletions(-) create mode 100644 test/asm/listing/ref/010-paramcount.err2-ref rename test/asm/listing/ref/{030-assert-success.err-ref => 030-assert-success.err2-ref} (100%) rename test/asm/listing/ref/{030-assert-success.ld65err-ref => 030-assert-success.ld65err2-ref} (100%) rename test/asm/listing/ref/{031-assert-error.err-ref => 031-assert-error.err2-ref} (100%) rename test/asm/listing/ref/{032-assert-error2.ld65err-ref => 032-assert-error2.ld65err2-ref} (100%) rename test/asm/listing/ref/{032-assert-error3.ld65err-ref => 032-assert-error3.ld65err2-ref} (100%) rename test/asm/listing/ref/{032-assert-error4.ld65err-ref => 032-assert-error4.ld65err2-ref} (100%) rename test/asm/listing/ref/{032-assert-error5.ld65err-ref => 032-assert-error5.ld65err2-ref} (100%) rename test/asm/listing/ref/{032-assert-error6.ld65err-ref => 032-assert-error6.ld65err2-ref} (100%) rename test/asm/listing/ref/{032-assert-error7.ld65err-ref => 032-assert-error7.ld65err2-ref} (100%) rename test/asm/listing/ref/{032-assert-error8.ld65err-ref => 032-assert-error8.ld65err2-ref} (100%) rename test/asm/listing/ref/{033-assert-ldwarning-success.ld65err-ref => 033-assert-ldwarning-success.ld65err2-ref} (100%) rename test/asm/listing/ref/{034-assert-lderror1.err-ref => 034-assert-lderror1.err2-ref} (100%) rename test/asm/listing/ref/{034-assert-lderror2.ld65err-ref => 034-assert-lderror2.ld65err2-ref} (100%) rename test/asm/listing/ref/{034-assert-lderror3.ld65err-ref => 034-assert-lderror3.ld65err2-ref} (100%) rename test/asm/listing/ref/{034-assert-lderror4.ld65err-ref => 034-assert-lderror4.ld65err2-ref} (100%) rename test/asm/listing/ref/{034-assert-lderror6.ld65err-ref => 034-assert-lderror6.ld65err2-ref} (100%) rename test/asm/listing/ref/{034-assert-lderror7.ld65err-ref => 034-assert-lderror7.ld65err2-ref} (100%) rename test/asm/listing/ref/{034-assert-lderror8.ld65err-ref => 034-assert-lderror8.ld65err2-ref} (100%) rename test/asm/listing/ref/{040-align.ld65err-ref => 040-align.ld65err2-ref} (100%) rename test/asm/listing/ref/{050-case-on-1.err-ref => 050-case-on-1.err2-ref} (100%) rename test/asm/listing/ref/{050-case-on-2.err-ref => 050-case-on-2.err2-ref} (100%) rename test/asm/listing/ref/{050-case-on-3.err-ref => 050-case-on-3.err2-ref} (100%) rename test/asm/listing/ref/{050-case-on-4.err-ref => 050-case-on-4.err2-ref} (100%) rename test/asm/listing/ref/{050-case-on-5.err-ref => 050-case-on-5.err2-ref} (100%) diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index d0d045a02..3c4c404af 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -9,7 +9,6 @@ ifdef CMD_EXE EXE = .exe MKDIR = mkdir $(subst /,\,$1) RMDIR = -rmdir /q /s $(subst /,\,$1) - ERRDIR = 2>&1 TRUE = exit 0 CAT = type $(subst /,\,$1) else @@ -17,7 +16,6 @@ else EXE = MKDIR = mkdir -p $1 RMDIR = $(RM) -r $1 - ERRDIR = 2>&1 TRUE = true CAT = cat $1 endif @@ -58,14 +56,14 @@ $(WORKDIR)/$1.bin: $1.s $(ISEQUAL) # compile without generating listing ifeq ($(wildcard control/$1.err),) - $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) $(ERRDIR) + $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) 2> $$(@:.bin=.err2) ifeq ($(wildcard control/$1.no-ld65),) - $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) $(ERRDIR) + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) 2> $$(@:.bin=.ld65-err2) endif else - $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) $(ERRDIR) || $(TRUE) + $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) 2> $$(@:.bin=.err2) || $(TRUE) ifeq ($(wildcard control/$1.no-ld65),) - $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) $(ERRDIR) || $(TRUE) + $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) 2> $$(@:.bin=.ld65-err2) || $(TRUE) endif endif @@ -75,6 +73,12 @@ else $(ISEQUAL) --empty $$(@:.bin=.err) endif +ifneq ($(wildcard ref/$1.err2-ref),) + $(ISEQUAL) ref/$1.err2-ref $$(@:.bin=.err2) +else + $(ISEQUAL) --empty $$(@:.bin=.err2) +endif + ifneq ($(wildcard ref/$1.bin-ref),) $(ISEQUAL) --binary ref/$1.bin-ref $$@ endif @@ -95,16 +99,30 @@ ifneq ($(wildcard $(WORKDIR)/$1.ld65-err),) endif endif +ifneq ($(wildcard ref/$1.ld65err2-ref),) + @echo $(CAT) $$(@:.bin=.ld65-err2) +# FIXME: somehow this refuses to work in cmd.exe +ifndef CMD_EXE + $(call CAT,$$(@:.bin=.ld65-err2)) + -diff -u ref/$1.ld65err2-ref $$(@:.bin=.ld65-err2) +endif + $(ISEQUAL) --wildcards ref/$1.ld65err2-ref $$(@:.bin=.ld65-err2) +else +ifneq ($(wildcard $(WORKDIR)/$1.ld65-err2),) + $(ISEQUAL) --empty $$(@:.bin=.ld65-err2) +endif +endif + # compile with listing file ifeq ($(wildcard control/$1.err),) - $(CA65) -t none -l $$(@:.bin=.list-lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) $(ERRDIR) + $(CA65) -t none -l $$(@:.bin=.list-lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2> $$(@:.bin=.list-err2) ifeq ($(wildcard control/$1.no-ld65),) - $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) $(ERRDIR) + $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) 2> $$(@:.bin=.list-ld65-err2) endif else - $(CA65) -t none -l $$(@:.bin=.list-lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) $(ERRDIR) || $(TRUE) + $(CA65) -t none -l $$(@:.bin=.list-lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2> $$(@:.bin=.list-err2) || $(TRUE) ifeq ($(wildcard control/$1.no-ld65),) - $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) $(ERRDIR) || $(TRUE) + $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) 2> $$(@:.bin=.list-ld65-err2) || $(TRUE) endif endif @@ -122,10 +140,26 @@ ifneq ($(wildcard $(WORKDIR)/$1.list-ld65-err),) endif endif +ifneq ($(wildcard ref/$1.err2-ref),) + $(ISEQUAL) ref/$1.err2-ref $$(@:.bin=.list-err2) +else + $(ISEQUAL) --empty $$(@:.bin=.list-err2) +endif + +ifneq ($(wildcard ref/$1.ld65err2-ref),) + $(ISEQUAL) --wildcards ref/$1.ld65err2-ref $$(@:.bin=.list-ld65-err2) +else +ifneq ($(wildcard $(WORKDIR)/$1.list-ld65-err2),) + $(ISEQUAL) --empty $$(@:.bin=.list-ld65-err2) +endif +endif + # check if the result bin is the same as without listing file ifeq ($(wildcard control/$1.err),) +ifeq ($(wildcard control/$1.err2),) $(ISEQUAL) $$@ $$(@:.bin=.list-bin) endif +endif ifneq ($(wildcard ref/$1.list-ref),) # we have a reference file, compare that, too diff --git a/test/asm/listing/ref/010-paramcount.err-ref b/test/asm/listing/ref/010-paramcount.err-ref index a66162eb5..baf73f50f 100644 --- a/test/asm/listing/ref/010-paramcount.err-ref +++ b/test/asm/listing/ref/010-paramcount.err-ref @@ -1,15 +1,6 @@ .paramcount = 3 .paramcount = 5 -010-paramcount.s:18: Warning: User warning: r1 is blank! -010-paramcount.s:14: Note: Macro was defined here -010-paramcount.s:8: Note: Macro was defined here .paramcount = 3 .paramcount = 5 -010-paramcount.s:19: Warning: User warning: r1 is blank! -010-paramcount.s:14: Note: Macro was defined here -010-paramcount.s:8: Note: Macro was defined here .paramcount = 1 .paramcount = 5 -010-paramcount.s:20: Warning: User warning: r1 is blank! -010-paramcount.s:14: Note: Macro was defined here -010-paramcount.s:8: Note: Macro was defined here diff --git a/test/asm/listing/ref/010-paramcount.err2-ref b/test/asm/listing/ref/010-paramcount.err2-ref new file mode 100644 index 000000000..304c9de61 --- /dev/null +++ b/test/asm/listing/ref/010-paramcount.err2-ref @@ -0,0 +1,9 @@ +010-paramcount.s:18: Warning: User warning: r1 is blank! +010-paramcount.s:14: Note: Macro was defined here +010-paramcount.s:8: Note: Macro was defined here +010-paramcount.s:19: Warning: User warning: r1 is blank! +010-paramcount.s:14: Note: Macro was defined here +010-paramcount.s:8: Note: Macro was defined here +010-paramcount.s:20: Warning: User warning: r1 is blank! +010-paramcount.s:14: Note: Macro was defined here +010-paramcount.s:8: Note: Macro was defined here diff --git a/test/asm/listing/ref/030-assert-success.err-ref b/test/asm/listing/ref/030-assert-success.err2-ref similarity index 100% rename from test/asm/listing/ref/030-assert-success.err-ref rename to test/asm/listing/ref/030-assert-success.err2-ref diff --git a/test/asm/listing/ref/030-assert-success.ld65err-ref b/test/asm/listing/ref/030-assert-success.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/030-assert-success.ld65err-ref rename to test/asm/listing/ref/030-assert-success.ld65err2-ref diff --git a/test/asm/listing/ref/031-assert-error.err-ref b/test/asm/listing/ref/031-assert-error.err2-ref similarity index 100% rename from test/asm/listing/ref/031-assert-error.err-ref rename to test/asm/listing/ref/031-assert-error.err2-ref diff --git a/test/asm/listing/ref/032-assert-error2.ld65err-ref b/test/asm/listing/ref/032-assert-error2.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/032-assert-error2.ld65err-ref rename to test/asm/listing/ref/032-assert-error2.ld65err2-ref diff --git a/test/asm/listing/ref/032-assert-error3.ld65err-ref b/test/asm/listing/ref/032-assert-error3.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/032-assert-error3.ld65err-ref rename to test/asm/listing/ref/032-assert-error3.ld65err2-ref diff --git a/test/asm/listing/ref/032-assert-error4.ld65err-ref b/test/asm/listing/ref/032-assert-error4.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/032-assert-error4.ld65err-ref rename to test/asm/listing/ref/032-assert-error4.ld65err2-ref diff --git a/test/asm/listing/ref/032-assert-error5.ld65err-ref b/test/asm/listing/ref/032-assert-error5.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/032-assert-error5.ld65err-ref rename to test/asm/listing/ref/032-assert-error5.ld65err2-ref diff --git a/test/asm/listing/ref/032-assert-error6.ld65err-ref b/test/asm/listing/ref/032-assert-error6.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/032-assert-error6.ld65err-ref rename to test/asm/listing/ref/032-assert-error6.ld65err2-ref diff --git a/test/asm/listing/ref/032-assert-error7.ld65err-ref b/test/asm/listing/ref/032-assert-error7.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/032-assert-error7.ld65err-ref rename to test/asm/listing/ref/032-assert-error7.ld65err2-ref diff --git a/test/asm/listing/ref/032-assert-error8.ld65err-ref b/test/asm/listing/ref/032-assert-error8.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/032-assert-error8.ld65err-ref rename to test/asm/listing/ref/032-assert-error8.ld65err2-ref diff --git a/test/asm/listing/ref/033-assert-ldwarning-success.ld65err-ref b/test/asm/listing/ref/033-assert-ldwarning-success.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/033-assert-ldwarning-success.ld65err-ref rename to test/asm/listing/ref/033-assert-ldwarning-success.ld65err2-ref diff --git a/test/asm/listing/ref/034-assert-lderror1.err-ref b/test/asm/listing/ref/034-assert-lderror1.err2-ref similarity index 100% rename from test/asm/listing/ref/034-assert-lderror1.err-ref rename to test/asm/listing/ref/034-assert-lderror1.err2-ref diff --git a/test/asm/listing/ref/034-assert-lderror2.ld65err-ref b/test/asm/listing/ref/034-assert-lderror2.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/034-assert-lderror2.ld65err-ref rename to test/asm/listing/ref/034-assert-lderror2.ld65err2-ref diff --git a/test/asm/listing/ref/034-assert-lderror3.ld65err-ref b/test/asm/listing/ref/034-assert-lderror3.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/034-assert-lderror3.ld65err-ref rename to test/asm/listing/ref/034-assert-lderror3.ld65err2-ref diff --git a/test/asm/listing/ref/034-assert-lderror4.ld65err-ref b/test/asm/listing/ref/034-assert-lderror4.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/034-assert-lderror4.ld65err-ref rename to test/asm/listing/ref/034-assert-lderror4.ld65err2-ref diff --git a/test/asm/listing/ref/034-assert-lderror6.ld65err-ref b/test/asm/listing/ref/034-assert-lderror6.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/034-assert-lderror6.ld65err-ref rename to test/asm/listing/ref/034-assert-lderror6.ld65err2-ref diff --git a/test/asm/listing/ref/034-assert-lderror7.ld65err-ref b/test/asm/listing/ref/034-assert-lderror7.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/034-assert-lderror7.ld65err-ref rename to test/asm/listing/ref/034-assert-lderror7.ld65err2-ref diff --git a/test/asm/listing/ref/034-assert-lderror8.ld65err-ref b/test/asm/listing/ref/034-assert-lderror8.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/034-assert-lderror8.ld65err-ref rename to test/asm/listing/ref/034-assert-lderror8.ld65err2-ref diff --git a/test/asm/listing/ref/040-align.ld65err-ref b/test/asm/listing/ref/040-align.ld65err2-ref similarity index 100% rename from test/asm/listing/ref/040-align.ld65err-ref rename to test/asm/listing/ref/040-align.ld65err2-ref diff --git a/test/asm/listing/ref/050-case-on-1.err-ref b/test/asm/listing/ref/050-case-on-1.err2-ref similarity index 100% rename from test/asm/listing/ref/050-case-on-1.err-ref rename to test/asm/listing/ref/050-case-on-1.err2-ref diff --git a/test/asm/listing/ref/050-case-on-2.err-ref b/test/asm/listing/ref/050-case-on-2.err2-ref similarity index 100% rename from test/asm/listing/ref/050-case-on-2.err-ref rename to test/asm/listing/ref/050-case-on-2.err2-ref diff --git a/test/asm/listing/ref/050-case-on-3.err-ref b/test/asm/listing/ref/050-case-on-3.err2-ref similarity index 100% rename from test/asm/listing/ref/050-case-on-3.err-ref rename to test/asm/listing/ref/050-case-on-3.err2-ref diff --git a/test/asm/listing/ref/050-case-on-4.err-ref b/test/asm/listing/ref/050-case-on-4.err2-ref similarity index 100% rename from test/asm/listing/ref/050-case-on-4.err-ref rename to test/asm/listing/ref/050-case-on-4.err2-ref diff --git a/test/asm/listing/ref/050-case-on-5.err-ref b/test/asm/listing/ref/050-case-on-5.err2-ref similarity index 100% rename from test/asm/listing/ref/050-case-on-5.err-ref rename to test/asm/listing/ref/050-case-on-5.err2-ref From 3bcfa735cb0f8d78a56dd88d3370d4dfea02f652 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 13 Nov 2022 14:57:48 +0800 Subject: [PATCH 1903/2710] clearer comments on and usage of code generator flags with type conversions in the primary register. --- src/cc65/codegen.c | 117 +++++++++++++++++++++++++++------------------ src/cc65/codegen.h | 18 ++++--- 2 files changed, 81 insertions(+), 54 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 00a4738e2..c9e71de64 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -1283,34 +1283,49 @@ void g_tosint (unsigned flags) -static void g_regchar (unsigned Flags) -/* Make sure, the value in the primary register is in the range of char. Truncate if necessary */ +static void g_regchar (unsigned to) +/* Treat the value in the primary register as a char with specified signedness +** and convert it to an int (whose representation is irrelevent of signedness). +*/ { - unsigned L; - - AddCodeLine ("ldx #$00"); - - if ((Flags & CF_UNSIGNED) == 0) { - /* Sign extend */ - L = GetLocalLabel(); - AddCodeLine ("cmp #$80"); - AddCodeLine ("bcc %s", LocalLabelName (L)); - AddCodeLine ("dex"); - g_defcodelabel (L); - } + /* Since char is the smallest type supported here, we never need any info + ** about the original type to "promote from it". However, we have to make + ** sure the entire AX contains the correct char value as an int, since we + ** will almost always use the char value as an int in AX directly in code + ** generation (unless CF_FORCECHAR is specified). That is to say, we don't + ** need the original "from" flags for the first conversion to char, but do + ** need the original "to" flags as the new "from" flags for the conversion + ** to int. + */ + g_regint (to | CF_FORCECHAR); } -void g_regint (unsigned Flags) -/* Make sure, the value in the primary register an int. Convert if necessary */ +void g_regint (unsigned from) +/* Convert the value in the primary register to an int (whose representation +** is irrelevent of signedness). +*/ { - switch (Flags & CF_TYPEMASK) { + switch (from & CF_TYPEMASK) { case CF_CHAR: - if (Flags & CF_FORCECHAR) { - /* Conversion is from char */ - g_regchar (Flags); + /* If the original value was forced to use only A, it must be + ** extended from char to fill AX. Otherwise nothing to do here + ** since AX would already have the correct int value. + */ + if (from & CF_FORCECHAR) { + AddCodeLine ("ldx #$00"); + + if ((from & CF_UNSIGNED) == 0) { + /* Sign extend */ + unsigned L = GetLocalLabel(); + AddCodeLine ("cmp #$80"); + AddCodeLine ("bcc %s", LocalLabelName (L)); + AddCodeLine ("dex"); + g_defcodelabel (L); + } + break; } /* FALLTHROUGH */ @@ -1319,21 +1334,27 @@ void g_regint (unsigned Flags) break; default: - typeerror (Flags); + typeerror (from); } } -void g_reglong (unsigned Flags) -/* Make sure, the value in the primary register a long. Convert if necessary */ +void g_reglong (unsigned from) +/* Convert the value in the primary register to a long (whose representation +** is irrelevent of signedness). +*/ { - switch (Flags & CF_TYPEMASK) { + switch (from & CF_TYPEMASK) { case CF_CHAR: - if (Flags & CF_FORCECHAR) { + /* If the original value was forced to use only A, it must be + ** extended from char to long. Otherwise AX would already have + ** the correct int value to be extened to long. + */ + if (from & CF_FORCECHAR) { /* Conversion is from char */ - if (Flags & CF_UNSIGNED) { + if (from & CF_UNSIGNED) { if (IS_Get (&CodeSizeFactor) >= 200) { AddCodeLine ("ldx #$00"); AddCodeLine ("stx sreg"); @@ -1343,18 +1364,19 @@ void g_reglong (unsigned Flags) } } else { if (IS_Get (&CodeSizeFactor) >= 366) { - g_regchar (Flags); + g_regint (from); AddCodeLine ("stx sreg"); AddCodeLine ("stx sreg+1"); } else { AddCodeLine ("jsr along"); } } + break; } /* FALLTHROUGH */ case CF_INT: - if (Flags & CF_UNSIGNED) { + if (from & CF_UNSIGNED) { if (IS_Get (&CodeSizeFactor) >= 200) { AddCodeLine ("ldy #$00"); AddCodeLine ("sty sreg"); @@ -1371,7 +1393,7 @@ void g_reglong (unsigned Flags) break; default: - typeerror (Flags); + typeerror (from); } } @@ -1508,48 +1530,49 @@ unsigned g_typeadjust (unsigned lhs, unsigned rhs) -unsigned g_typecast (unsigned lhs, unsigned rhs) -/* Cast the value in the primary register to the operand size that is flagged -** by the lhs value. Return the result value. +unsigned g_typecast (unsigned to, unsigned from) +/* Cast the value in the primary register to the specified operand size and +** signedness. Return the result flags. */ { /* Check if a conversion is needed */ - if ((rhs & CF_CONST) == 0) { - switch (lhs & CF_TYPEMASK) { + if ((from & CF_CONST) == 0) { + switch (to & CF_TYPEMASK) { case CF_LONG: - /* We must promote the primary register to long */ - g_reglong (rhs); + /* We must promote the primary register to long in EAX */ + g_reglong (from); break; case CF_INT: - /* We must promote the primary register to int */ - g_regint (rhs); + /* We must promote the primary register to int in AX */ + g_regint (from); break; case CF_CHAR: - /* We must truncate the primary register to char */ - g_regchar (lhs); + /* We must truncate the primary register to char and then + ** sign-extend it to signed int in AX. + */ + g_regchar (to); break; default: - typeerror (lhs); + /* Since we are switching on "to", report an error on it */ + typeerror (to); } } - /* Do not need any other action. If the left type is int, and the primary + /* Do not need any other action. If the "to" type is int, and the primary ** register is long, it will be automagically truncated. If the right hand ** side is const, it is not located in the primary register and handled by ** the expression parser code. */ /* Result is const if the right hand side was const */ - lhs |= (rhs & CF_CONST); + to |= (from & CF_CONST); - /* The resulting type is that of the left hand side (that's why you called - ** this function :-) - */ - return lhs; + /* The resulting type is "to" (that's why you called this function :-) */ + return to; } diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index cb62d78bd..8e04b45e4 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -208,11 +208,15 @@ void g_toslong (unsigned flags); void g_tosint (unsigned flags); /* Make sure, the value on TOS is an int. Convert if necessary */ -void g_regint (unsigned Flags); -/* Make sure, the value in the primary register an int. Convert if necessary */ +void g_regint (unsigned from); +/* Convert the value in the primary register to an int (whose representation +** is irrelevent of signedness). +*/ -void g_reglong (unsigned Flags); -/* Make sure, the value in the primary register a long. Convert if necessary */ +void g_reglong (unsigned from); +/* Convert the value in the primary register to a long (whose representation +** is irrelevent of signedness). +*/ unsigned g_typeadjust (unsigned lhs, unsigned rhs); /* Adjust the integer operands before doing a binary operation. lhs is a flags @@ -220,9 +224,9 @@ unsigned g_typeadjust (unsigned lhs, unsigned rhs); ** in (e)ax. The return value is the flags value for the resulting type. */ -unsigned g_typecast (unsigned lhs, unsigned rhs); -/* Cast the value in the primary register to the operand size that is flagged -** by the lhs value. Return the result value. +unsigned g_typecast (unsigned to, unsigned from); +/* Cast the value in the primary register to the specified operand size and +** signedness. Return the result flags. */ void g_scale (unsigned flags, long val); From dadca9e033383ccf1609015f4106e7d05686ada9 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 13 Nov 2022 16:32:41 +0800 Subject: [PATCH 1904/2710] Fixed bitwise-shift in PP. --- src/cc65/ppexpr.c | 28 +++++++---- test/val/ppshift.c | 120 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 138 insertions(+), 10 deletions(-) create mode 100644 test/val/ppshift.c diff --git a/src/cc65/ppexpr.c b/src/cc65/ppexpr.c index 0942dc8f8..1610e9b92 100644 --- a/src/cc65/ppexpr.c +++ b/src/cc65/ppexpr.c @@ -519,12 +519,21 @@ static void PPhie7 (PPExpr* Expr) /* Evaluate */ if (PPEvaluationEnabled && !PPEvaluationFailed) { - /* To shift by a negative value is equivalent to shift to the - ** opposite direction. - */ - if ((Rhs.Flags & PPEXPR_UNSIGNED) != 0 && Rhs.IVal > (long)LONG_BITS) { + /* For now we use 32-bit integer types for PP integer constants */ + if ((Rhs.Flags & PPEXPR_UNSIGNED) != 0) { + if ((unsigned long)Rhs.IVal > LONG_BITS) { + Rhs.IVal = (long)LONG_BITS; + } + } else if (Rhs.IVal > (long)LONG_BITS) { Rhs.IVal = (long)LONG_BITS; + } else if (Rhs.IVal < -(long)LONG_BITS) { + Rhs.IVal = -(long)LONG_BITS; } + + /* Positive count for left-shift and negative for right-shift. So + ** to shift by a count is equivalent to shift to the opposite + ** direction by the negated count. + */ if (Op == TOK_SHR) { Rhs.IVal = -Rhs.IVal; } @@ -532,27 +541,26 @@ static void PPhie7 (PPExpr* Expr) /* Evaluate the result */ if ((Expr->Flags & PPEXPR_UNSIGNED) != 0) { if (Rhs.IVal >= (long)LONG_BITS) { - /* For now we use (unsigned) long types for integer constants */ PPWarning ("Integer overflow in preprocessor expression"); Expr->IVal = 0; } else if (Rhs.IVal > 0) { Expr->IVal <<= Rhs.IVal; - } else if (Rhs.IVal < -(long)LONG_BITS) { + } else if (Rhs.IVal <= -(long)LONG_BITS) { Expr->IVal = 0; } else if (Rhs.IVal < 0) { Expr->IVal = (unsigned long)Expr->IVal >> -Rhs.IVal; } } else { + /* -1 for sign bit */ if (Rhs.IVal >= (long)(LONG_BITS - 1)) { - /* For now we use (unsigned) long types for integer constants */ PPWarning ("Integer overflow in preprocessor expression"); Expr->IVal = 0; } else if (Rhs.IVal > 0) { Expr->IVal <<= Rhs.IVal; - } else if (Rhs.IVal < -(long)LONG_BITS) { - Expr->IVal = -1; + } else if (Rhs.IVal <= -(long)LONG_BITS) { + Expr->IVal = Expr->IVal >= 0 ? 0 : -1; } else if (Rhs.IVal < 0) { - Expr->IVal >>= Expr->IVal >> -Rhs.IVal; + Expr->IVal = (long)Expr->IVal >> -Rhs.IVal; } } } diff --git a/test/val/ppshift.c b/test/val/ppshift.c new file mode 100644 index 000000000..466b15926 --- /dev/null +++ b/test/val/ppshift.c @@ -0,0 +1,120 @@ +/* + Test of bitwise-shift in preprocessor expressions. + + Note: Keep in mind that integer constants are always 32-bit in PP for cc65. +*/ + +/* Signed lhs */ +#if 1 << 16 != 0x00010000 +#error 1 << 16 != 0x00010000 +#endif + +#if 0x00010000 << -16 != 1 +#error 0x00010000 << -16 != 1 +#endif + +#if 0x10000 >> 16 != 1 +#error 0x10000 >> 16 != 1 +#endif + +#if 1 >> -16 != 0x10000 +#error 1 >> -16 != 0x10000 +#endif + +#if 1 << 32 != 0 +#error 1 << 32 != 0 +#endif + +#if 1 << -32 != 0 +#error 1 << -32 != 0 +#endif + +#if 1 >> 32 != 0 +#error 1 >> 32 != 0 +#endif + +#if 1 >> -32 != 0 +#error 1 >> -32 != 0 +#endif + +#if -1 << 32 != 0 +#error -1 << 32 != 0 +#endif + +#if -1 << -32 != -1 +#error -1 << -32 != -1 +#endif + +#if -1 >> 32 != -1 +#error -1 >> 32 != -1 +#endif + +#if -1 >> -32 != 0 +#error -1 >> -32 != 0 +#endif + +/* NOTE: 2147483648 is an UNSIGNED integer! */ +#if -1 << 2147483648 != 0 +#error -1 << 2147483648 != 0 +#endif + +/* NOTE: -2147483648 is also an UNSIGNED integer! */ +#if -1 << -2147483648 != 0 +#error -1 << -2147483648 != 0 +#endif + +#if -1 << (-2147483647 - 1) != -1 +#error -1 << (-2147483647 - 1) != -1 +#endif + +/* NOTE: 2147483648 is an UNSIGNED integer! */ +#if -1 >> 2147483648 != -1 +#error -1 >> 2147483648 != -1 +#endif + +/* NOTE: -2147483648 is also an UNSIGNED integer! */ +#if -1 >> -2147483648 != -1 +#error -1 >> -2147483648 != 0 +#endif + +#if -1 >> (-2147483647 - 1) != 0 +#error -1 >> (-2147483647 - 1) != 0 +#endif + +/* Unsigned lhs */ +#if 1U << 16 != 0x00010000 +#error 1U << 16 != 0x00010000 +#endif + +#if 0x80000000U << -16 != 0x8000 +#error 0x80000000U << -16 != 0x8000 +#endif + +#if 0x80000000U >> 16 != 0x8000 +#error 0x80000000U >> 16 != 0x8000 +#endif + +#if 1U >> -16 != 0x10000 +#error 1U >> -16 != 0x10000 +#endif + +#if -1U << 32 != 0 +#error -1U << 32 != 0 +#endif + +#if -1U << -32 != 0 +#error -1U << -32 != 0 +#endif + +#if -1U >> 32 != 0 +#error -1U >> 32 != 0 +#endif + +#if -1U >> -32 != 0 +#error -1U >> -32 != 0 +#endif + +int main(void) +{ + return 0; +} From 0408d71cc577f5529238fc79846c4f2fc6976e9e Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 16:28:25 +0100 Subject: [PATCH 1905/2710] fixes so "make clean" will work without failing on cmd.exe --- util/atari/Makefile | 12 +++++++++++- util/gamate/Makefile | 12 +++++++++++- util/zlib/Makefile | 12 +++++++++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/util/atari/Makefile b/util/atari/Makefile index db4226f69..e53c837aa 100644 --- a/util/atari/Makefile +++ b/util/atari/Makefile @@ -5,6 +5,16 @@ ifdef CROSS_COMPILE $(info CC: $(CC)) endif +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + DEL = -del /f +else + DEL = $(RM) +endif + CFLAGS += -O3 -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) .PHONY: mostlyclean clean @@ -15,6 +25,6 @@ ataricvt: ataricvt.c $(CC) $(CFLAGS) -o ataricvt ataricvt.c mostlyclean clean: - $(RM) ataricvt + $(DEL) ataricvt install zip: diff --git a/util/gamate/Makefile b/util/gamate/Makefile index db2a1f059..54fa74191 100644 --- a/util/gamate/Makefile +++ b/util/gamate/Makefile @@ -5,6 +5,16 @@ ifdef CROSS_COMPILE $(info CC: $(CC)) endif +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + DEL = -del /f +else + DEL = $(RM) +endif + CFLAGS += -O3 -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) .PHONY: mostlyclean clean @@ -15,6 +25,6 @@ gamate-fixcart: gamate-fixcart.c $(CC) $(CFLAGS) -o gamate-fixcart gamate-fixcart.c mostlyclean clean: - $(RM) gamate-fixcart + $(DEL) gamate-fixcart install zip: diff --git a/util/zlib/Makefile b/util/zlib/Makefile index 3b2c7c816..f276ddaf2 100644 --- a/util/zlib/Makefile +++ b/util/zlib/Makefile @@ -5,6 +5,16 @@ ifdef CROSS_COMPILE $(info CC: $(CC)) endif +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + DEL = -del /f +else + DEL = $(RM) +endif + CFLAGS += -O3 -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) .PHONY: mostlyclean clean @@ -22,6 +32,6 @@ deflater: deflater.c $(CC) $(CFLAGS) -o deflater deflater.c -lz mostlyclean clean: - $(RM) deflater + $(DEL) deflater install zip: From fdcc683997998610baf9c6bc3462f16395862db5 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 17:13:37 +0100 Subject: [PATCH 1906/2710] shoot in the dark, try to fix ming build issue --- .github/workflows/snapshot-on-push-master.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 769d778d5..192468079 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -75,13 +75,13 @@ jobs: - name: Build and package 64-bit Windows versions of the tools. run: | make -C src clean - make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32- + make -j2 bin USER_CFLAGS="-D __STDC_FORMAT_MACROS -Werror" CROSS_COMPILE=x86_64-w64-mingw32- make zip mv cc65.zip cc65-snapshot-win64.zip - name: Build and package 32-bit Windows versions of the tools. run: | make -C src clean - make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- + make -j2 bin USER_CFLAGS="-D __STDC_FORMAT_MACROS -Werror" CROSS_COMPILE=i686-w64-mingw32- make zip mv cc65.zip cc65-snapshot-win32.zip From d459b5da8732bd44d3d1d2ef3bbf95346622f848 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 17:20:44 +0100 Subject: [PATCH 1907/2710] another try --- .github/workflows/snapshot-on-push-master.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 192468079..45f76b96b 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -46,6 +46,13 @@ jobs: - name: Checkout Source uses: actions/checkout@v2 + - name: Build and package 64-bit Windows versions of the tools. + run: | + make -C src clean + make -j2 bin USER_CFLAGS="-D __USE_MINGW_ANSI_STDIO 1 -Werror" CROSS_COMPILE=x86_64-w64-mingw32- + make zip + mv cc65.zip cc65-snapshot-win64.zip + - name: Do some simple style checks shell: bash run: make -j2 checkstyle @@ -75,13 +82,13 @@ jobs: - name: Build and package 64-bit Windows versions of the tools. run: | make -C src clean - make -j2 bin USER_CFLAGS="-D __STDC_FORMAT_MACROS -Werror" CROSS_COMPILE=x86_64-w64-mingw32- + make -j2 bin USER_CFLAGS="-D __USE_MINGW_ANSI_STDIO 1 -Werror" CROSS_COMPILE=x86_64-w64-mingw32- make zip mv cc65.zip cc65-snapshot-win64.zip - name: Build and package 32-bit Windows versions of the tools. run: | make -C src clean - make -j2 bin USER_CFLAGS="-D __STDC_FORMAT_MACROS -Werror" CROSS_COMPILE=i686-w64-mingw32- + make -j2 bin USER_CFLAGS="-D __USE_MINGW_ANSI_STDIO 1 -Werror" CROSS_COMPILE=i686-w64-mingw32- make zip mv cc65.zip cc65-snapshot-win32.zip From d68598165c1eade5bfdf79a6f960fc95eaac33fd Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 17:24:05 +0100 Subject: [PATCH 1908/2710] and another --- .github/workflows/snapshot-on-push-master.yml | 37 ++++++++----------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 45f76b96b..5aa2999ac 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -46,13 +46,6 @@ jobs: - name: Checkout Source uses: actions/checkout@v2 - - name: Build and package 64-bit Windows versions of the tools. - run: | - make -C src clean - make -j2 bin USER_CFLAGS="-D __USE_MINGW_ANSI_STDIO 1 -Werror" CROSS_COMPILE=x86_64-w64-mingw32- - make zip - mv cc65.zip cc65-snapshot-win64.zip - - name: Do some simple style checks shell: bash run: make -j2 checkstyle @@ -64,21 +57,21 @@ jobs: - name: Build the platform libraries. shell: bash run: make -j2 lib QUIET=1 - - name: Run the regression tests. - shell: bash - run: make test QUIET=1 - - name: Test that the samples can be built. - shell: bash - run: make -j2 samples - - name: Remove the output from the samples tests. - shell: bash - run: make -C samples clean - - name: Remove programs in util directory - shell: bash - run: make -C util clean - - name: Build the document files. - shell: bash - run: make -j2 doc +# - name: Run the regression tests. +# shell: bash +# run: make test QUIET=1 +# - name: Test that the samples can be built. +# shell: bash +# run: make -j2 samples +# - name: Remove the output from the samples tests. +# shell: bash +# run: make -C samples clean +# - name: Remove programs in util directory +# shell: bash +# run: make -C util clean +# - name: Build the document files. +# shell: bash +# run: make -j2 doc - name: Build and package 64-bit Windows versions of the tools. run: | make -C src clean From d1b7768064ecb46ba3eeb3b1ac9b1162c1c09d6b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 17:27:51 +0100 Subject: [PATCH 1909/2710] yeah! --- .github/workflows/snapshot-on-push-master.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 5aa2999ac..674a2cddf 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -75,13 +75,13 @@ jobs: - name: Build and package 64-bit Windows versions of the tools. run: | make -C src clean - make -j2 bin USER_CFLAGS="-D __USE_MINGW_ANSI_STDIO 1 -Werror" CROSS_COMPILE=x86_64-w64-mingw32- + make -j2 bin USER_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 -Werror" CROSS_COMPILE=x86_64-w64-mingw32- make zip mv cc65.zip cc65-snapshot-win64.zip - name: Build and package 32-bit Windows versions of the tools. run: | make -C src clean - make -j2 bin USER_CFLAGS="-D __USE_MINGW_ANSI_STDIO 1 -Werror" CROSS_COMPILE=i686-w64-mingw32- + make -j2 bin USER_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 -Werror" CROSS_COMPILE=i686-w64-mingw32- make zip mv cc65.zip cc65-snapshot-win32.zip From 5638e0916ac301c36c7eb4d499c18e464ed2d30d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 17:39:35 +0100 Subject: [PATCH 1910/2710] =?UTF-8?q?sp=C3=BCl=20es=20noch=20einmal,=20Sam?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/snapshot-on-push-master.yml | 4 ++-- src/cc65/codegen.c | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 674a2cddf..fcefa10d8 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -75,13 +75,13 @@ jobs: - name: Build and package 64-bit Windows versions of the tools. run: | make -C src clean - make -j2 bin USER_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 -Werror" CROSS_COMPILE=x86_64-w64-mingw32- + make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32- make zip mv cc65.zip cc65-snapshot-win64.zip - name: Build and package 32-bit Windows versions of the tools. run: | make -C src clean - make -j2 bin USER_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 -Werror" CROSS_COMPILE=i686-w64-mingw32- + make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32- make zip mv cc65.zip cc65-snapshot-win32.zip diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index c9e71de64..b149b7dda 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -65,7 +65,12 @@ #include "util.h" #include "codegen.h" - +/* this is a terrible hack that tries to combat the ever reoccuring issue with + mingw and PRIXPTR */ +#defined(__MINGW64__) +#undef PRIXPTR +#define PRIXPTR "%p" +#endif /*****************************************************************************/ /* Helpers */ From 5fb20dec9153d94c7c514bdba5d0caaf7c28bda1 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 17:41:22 +0100 Subject: [PATCH 1911/2710] commit message --- src/cc65/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index b149b7dda..c1c6756c1 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -67,7 +67,7 @@ /* this is a terrible hack that tries to combat the ever reoccuring issue with mingw and PRIXPTR */ -#defined(__MINGW64__) +#if defined(__MINGW64__) #undef PRIXPTR #define PRIXPTR "%p" #endif From c6ecee074888fb63d13e5230da6d679e3f58d592 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 17:45:21 +0100 Subject: [PATCH 1912/2710] Babydino sagt: nochmal! --- src/cc65/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index c1c6756c1..eb0edfdbb 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -69,7 +69,7 @@ mingw and PRIXPTR */ #if defined(__MINGW64__) #undef PRIXPTR -#define PRIXPTR "%p" +#define PRIXPTR "p" #endif /*****************************************************************************/ From 8a9029d39331b84c2d28b174d73db3aa2e1e8293 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 17:50:32 +0100 Subject: [PATCH 1913/2710] hnnngg --- src/cc65/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index eb0edfdbb..60b9589f0 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -69,7 +69,7 @@ mingw and PRIXPTR */ #if defined(__MINGW64__) #undef PRIXPTR -#define PRIXPTR "p" +#define PRIXPTR "ul" #endif /*****************************************************************************/ From feb839e7f03849f28b2ca3ecbd121610b561005c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 17:55:22 +0100 Subject: [PATCH 1914/2710] narrisch werd i! --- src/cc65/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 60b9589f0..f4dfd5d5b 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -69,7 +69,7 @@ mingw and PRIXPTR */ #if defined(__MINGW64__) #undef PRIXPTR -#define PRIXPTR "ul" +#define PRIXPTR "l" #endif /*****************************************************************************/ From 4c6fddd3000efb4aa1d105232cdeebd1b122b4ca Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 17:58:12 +0100 Subject: [PATCH 1915/2710] i want a cookie each time i do this --- src/cc65/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index f4dfd5d5b..95735a195 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -69,7 +69,7 @@ mingw and PRIXPTR */ #if defined(__MINGW64__) #undef PRIXPTR -#define PRIXPTR "l" +#define PRIXPTR "lu" #endif /*****************************************************************************/ From ca94cfcbacbe9b50183d9c820599fb1bef541b0a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 18:03:40 +0100 Subject: [PATCH 1916/2710] that perhaps? --- src/cc65/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 95735a195..be90bb8e2 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -69,7 +69,7 @@ mingw and PRIXPTR */ #if defined(__MINGW64__) #undef PRIXPTR -#define PRIXPTR "lu" +#define PRIXPTR "zu" #endif /*****************************************************************************/ From a6feeac5ed1115ffcf5910215699907a24bd8980 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 18:10:07 +0100 Subject: [PATCH 1917/2710] or msvc I64u ? --- src/cc65/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index be90bb8e2..0f276dbbd 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -69,7 +69,7 @@ mingw and PRIXPTR */ #if defined(__MINGW64__) #undef PRIXPTR -#define PRIXPTR "zu" +#define PRIXPTR "%I64u" #endif /*****************************************************************************/ From bbe8c62e9dbc48d89ea0db4dd02b2e40fd4c0629 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 18:13:15 +0100 Subject: [PATCH 1918/2710] coffee --- src/cc65/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 0f276dbbd..ad3a4d99b 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -69,7 +69,7 @@ mingw and PRIXPTR */ #if defined(__MINGW64__) #undef PRIXPTR -#define PRIXPTR "%I64u" +#define PRIXPTR "I64u" #endif /*****************************************************************************/ From 4c047bf11eb2eb2ab4e42bf6db5ebc8bcbc9fe0e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 18:13:54 +0100 Subject: [PATCH 1919/2710] yawn --- .github/workflows/snapshot-on-push-master.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index fcefa10d8..717ad348b 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -49,14 +49,14 @@ jobs: - name: Do some simple style checks shell: bash run: make -j2 checkstyle - - name: Build the tools. - shell: bash - run: | - make -j2 bin USER_CFLAGS=-Werror - make -j2 util - - name: Build the platform libraries. - shell: bash - run: make -j2 lib QUIET=1 +# - name: Build the tools. +# shell: bash +# run: | +# make -j2 bin USER_CFLAGS=-Werror +# make -j2 util +# - name: Build the platform libraries. +# shell: bash +# run: make -j2 lib QUIET=1 # - name: Run the regression tests. # shell: bash # run: make test QUIET=1 From b166dc4261fee8dd7dab7be743dcaca6948831f4 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 18:19:31 +0100 Subject: [PATCH 1920/2710] hopefully thats it --- .github/workflows/snapshot-on-push-master.yml | 46 +++++++++---------- src/cc65/codegen.c | 8 +++- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 717ad348b..769d778d5 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -49,29 +49,29 @@ jobs: - name: Do some simple style checks shell: bash run: make -j2 checkstyle -# - name: Build the tools. -# shell: bash -# run: | -# make -j2 bin USER_CFLAGS=-Werror -# make -j2 util -# - name: Build the platform libraries. -# shell: bash -# run: make -j2 lib QUIET=1 -# - name: Run the regression tests. -# shell: bash -# run: make test QUIET=1 -# - name: Test that the samples can be built. -# shell: bash -# run: make -j2 samples -# - name: Remove the output from the samples tests. -# shell: bash -# run: make -C samples clean -# - name: Remove programs in util directory -# shell: bash -# run: make -C util clean -# - name: Build the document files. -# shell: bash -# run: make -j2 doc + - name: Build the tools. + shell: bash + run: | + make -j2 bin USER_CFLAGS=-Werror + make -j2 util + - name: Build the platform libraries. + shell: bash + run: make -j2 lib QUIET=1 + - name: Run the regression tests. + shell: bash + run: make test QUIET=1 + - name: Test that the samples can be built. + shell: bash + run: make -j2 samples + - name: Remove the output from the samples tests. + shell: bash + run: make -C samples clean + - name: Remove programs in util directory + shell: bash + run: make -C util clean + - name: Build the document files. + shell: bash + run: make -j2 doc - name: Build and package 64-bit Windows versions of the tools. run: | make -C src clean diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index ad3a4d99b..251c973ee 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -65,8 +65,12 @@ #include "util.h" #include "codegen.h" -/* this is a terrible hack that tries to combat the ever reoccuring issue with - mingw and PRIXPTR */ +/* This is a terrible hack that tries to combat the ever reoccuring issue with + Mingw and PRIXPTR - the macro should have been defined like this for us in + the first place. + NOTE: "I64u" works in the github actions now, so if your local mingw64 fails, + you probably have to update. +*/ #if defined(__MINGW64__) #undef PRIXPTR #define PRIXPTR "I64u" From 9d78e10d4b06d965d6fe149943f1c9865308d350 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 18:39:58 +0100 Subject: [PATCH 1921/2710] update actions to use node16 instead of node12 --- .github/workflows/build-on-pull-request.yml | 2 +- .github/workflows/snapshot-on-push-master.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 0ba0c6a1f..4e442107d 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -19,7 +19,7 @@ jobs: - shell: bash run: git config --global core.autocrlf input - name: Checkout Source - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Do some simple style checks shell: bash diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 769d778d5..eb2a5019c 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -44,7 +44,7 @@ jobs: - shell: bash run: git config --global core.autocrlf input - name: Checkout Source - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Do some simple style checks shell: bash From eb8dbcd04dc8765611c31e758ee5539a3289c945 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Fri, 18 Nov 2022 19:00:35 +0100 Subject: [PATCH 1922/2710] really update all jobs --- .github/workflows/build-on-pull-request.yml | 2 +- .github/workflows/snapshot-on-push-master.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 4e442107d..05d6a4a39 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -57,7 +57,7 @@ jobs: run: git config --global core.autocrlf input - name: Checkout Source - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.1 diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index eb2a5019c..e8be4400e 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -18,7 +18,7 @@ jobs: run: git config --global core.autocrlf input - name: Checkout Source - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.1 @@ -97,7 +97,7 @@ jobs: path: cc65-snapshot-win64.zip - name: Get the online documents repo. - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: repository: cc65/doc path: doc.git From 9a9bf9f2eacdc5ad6cb1029b6e5bc174d0ee0a34 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 19 Nov 2022 18:38:00 +0100 Subject: [PATCH 1923/2710] update note on identifiers --- Contributing.md | 100 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 97 insertions(+), 3 deletions(-) diff --git a/Contributing.md b/Contributing.md index e316b9c61..6fa5ba7c2 100644 --- a/Contributing.md +++ b/Contributing.md @@ -29,9 +29,22 @@ This is an ongoing controversial topic - everyone knows that. However, the follo The (bash) scripts used to check the above rules can be found in ```.github/check```. You can also run all checks using ```make check```. -### identifiers and symbol names +### Identifiers and Symbol names -* any symbols that are exported from source files and/or appear in header files should not be in the "_symbol" form in C, or "__symbol" form in assembly. This way we evade the problem that "_symbol" may or may not be reserved by that standard. +The C Standard defines certain identifiers and symbol names, which we can not use +in our code. Since it is not always obvious which parts of the library code will +actually end up in a linked program, the following applies to ALL of the library. + +Any non standard identifier/symbol/function that is exported from source files, +or appears in header files: + +* must not be in the "_symbol" form in C, or "__symbol" form in assembly. +* must start with (at least) two (C Code) or three (assembly code) underscores, unless the symbol appears in a non standard header file. + +This is likely more than the standard dictates us to do - but it is certainly +standard compliant - and easy to remember. + +Also see the discussion in https://github.com/cc65/cc65/issues/1796 ### misc @@ -173,7 +186,88 @@ The only exception to the above are actions that are exclusive to the github act The first step is implementing the datatype "float" as IEEE488 floats. Help welcomed! * WIP compiler/library changes are here: https://github.com/cc65/cc65/pull/1777 -* free software library with testbench is here: http://www.jhauser.us/arithmetic/ + +## Library + +### name clashes in the library + +see "Identifiers and Symbol names" above - not all identifiers have been checked +and renamed yet. The following is a list of those that still might need to be +fixed: + +``` +common + +__argc libsrc/runtime/callmain.s libsrc/cbm610/mainargs.s libsrc/cx16/mainargs.s libsrc/plus4/mainargs.s libsrc/lynx/mainargs.s libsrc/c16/mainargs.s libsrc/geos-common/system/mainargs.s libsrc/sim6502/mainargs.s libsrc/c128/mainargs.s libsrc/vic20/mainargs.s libsrc/nes/mainargs.s libsrc/atari/getargs.s libsrc/apple2/mainargs.s libsrc/cbm510/mainargs.s libsrc/telestrat/mainargs.s libsrc/c64/mainargs.s libsrc/pet/mainargs.s libsrc/atmos/mainargs.s +__argv libsrc/runtime/callmain.s libsrc/cbm610/mainargs.s libsrc/cx16/mainargs.s libsrc/plus4/mainargs.s libsrc/lynx/mainargs.s libsrc/c16/mainargs.s libsrc/geos-common/system/mainargs.s libsrc/sim6502/mainargs.s libsrc/c128/mainargs.s libsrc/vic20/mainargs.s libsrc/nes/mainargs.s libsrc/atari/getargs.s libsrc/apple2/mainargs.s libsrc/cbm510/mainargs.s libsrc/telestrat/mainargs.s libsrc/c64/mainargs.s libsrc/pet/mainargs.s libsrc/atmos/mainargs.s +__cos libsrc/common/sincos.s +__ctypeidx libsrc/common/ctype.s libsrc/common/ctypemask.s libsrc/geos-common/system/ctype.s libsrc/atari/ctype.s libsrc/cbm/ctype.s libsrc/atmos/ctype.s asminc/ctype_common.inc +__cwd libsrc/common/getcwd.s libsrc/common/_cwd.s libsrc/atari/initcwd.s libsrc/apple2/initcwd.s libsrc/apple2/initcwd.s libsrc/telestrat/initcwd.s libsrc/cbm/initcwd.s +__cwd_buf_size libsrc/common/_cwd.s +__envcount libsrc/common/searchenv.s libsrc/common/_environ.s libsrc/common/putenv.s libsrc/common/getenv.s +__environ libsrc/common/searchenv.s libsrc/common/_environ.s libsrc/common/putenv.s libsrc/common/getenv.s +__envsize libsrc/common/_environ.s libsrc/common/putenv.s +__fdesc libsrc/common/_fdesc.s libsrc/common/fopen.s +__filetab libsrc/common/_fdesc.s libsrc/common/_file.s asminc/_file.inc +__fopen libsrc/common/fopen.s libsrc/common/_fopen.s +__printf libsrc/common/vsnprintf.s libsrc/common/_printf.s libsrc/common/vfprintf.s libsrc/conio/vcprintf.s libsrc/pce/_printf.s +__scanf libsrc/common/_scanf.inc libsrc/common/vsscanf.s libsrc/conio/vcscanf.s +__sin libsrc/common/sincos.s +__sys libsrc/common/_sys.s libsrc/apple2/_sys.s +__sys_oserrlist libsrc/common/stroserr.s libsrc/geos-common/system/oserrlist.s libsrc/atari/oserrlist.s libsrc/apple2/oserrlist.s libsrc/cbm/oserrlist.s libsrc/atmos/oserrlist.s +__syschdir libsrc/common/chdir.s libsrc/atari/syschdir.s libsrc/apple2/syschdir.s libsrc/telestrat/syschdir.s libsrc/cbm/syschdir.s +__sysmkdir libsrc/common/mkdir.s libsrc/atari/sysmkdir.s libsrc/apple2/sysmkdir.s libsrc/telestrat/sysmkdir.s +__sysremove libsrc/common/remove.s libsrc/geos-common/file/sysremove.s libsrc/atari/sysremove.s libsrc/atari/sysrmdir.s libsrc/apple2/sysremove.s libsrc/apple2/sysrmdir.s libsrc/telestrat/sysremove.s libsrc/cbm/sysremove.s +__sysrename libsrc/common/rename.s libsrc/geos-common/file/sysrename.s libsrc/atari/sysrename.s libsrc/apple2/sysrename.s libsrc/cbm/sysrename.s +__sysrmdir libsrc/common/rmdir.s libsrc/atari/sysrmdir.s libsrc/apple2/sysrmdir.s +__sysuname libsrc/common/uname.s libsrc/cbm610/sysuname.s libsrc/cx16/sysuname.s libsrc/plus4/sysuname.s libsrc/lynx/sysuname.s libsrc/c16/sysuname.s libsrc/geos-common/system/sysuname.s libsrc/c128/sysuname.s libsrc/creativision/sysuname.s libsrc/vic20/sysuname.s libsrc/nes/sysuname.s libsrc/atari/sysuname.s libsrc/apple2/sysuname.s libsrc/cbm510/sysuname.s libsrc/telestrat/sysuname.s libsrc/c64/sysuname.s libsrc/pet/sysuname.s libsrc/atari5200/sysuname.s libsrc/atmos/sysuname.s + +apple2 + +__auxtype libsrc/apple2/open.s +__datetime libsrc/apple2/open.s +__dos_type libsrc/apple2/dioopen.s libsrc/apple2/curdevice.s libsrc/apple2/mainargs.s libsrc/apple2/settime.s libsrc/apple2/getdevice.s libsrc/apple2/dosdetect.s libsrc/apple2/irq.s libsrc/apple2/open.s libsrc/apple2/mli.s libsrc/apple2/getres.s +__filetype libsrc/apple2/open.s libsrc/apple2/exehdr.s + + +atari + +__defdev libsrc/atari/posixdirent.s libsrc/atari/ucase_fn.s libsrc/atari/getdefdev.s +__dos_type libsrc/atari/getargs.s libsrc/atari/exec.s libsrc/atari/settime.s libsrc/atari/syschdir.s libsrc/atari/dosdetect.s libsrc/atari/is_cmdline_dos.s libsrc/atari/sysrmdir.s libsrc/atari/gettime.s libsrc/atari/lseek.s libsrc/atari/getres.s libsrc/atari/getdefdev.s +__do_oserror libsrc/atari/posixdirent.s libsrc/atari/do_oserr.s libsrc/atari/serref.s libsrc/atari/read.s libsrc/atari/write.s libsrc/atari/close.s +__getcolor libsrc/atari/setcolor.s +__getdefdev libsrc/atari/getdefdev.s +__graphics libsrc/atari/graphics.s +__inviocb libsrc/atari/serref.s libsrc/atari/ser/atrrdev.s libsrc/atari/inviocb.s libsrc/atari/read.s libsrc/atari/write.s libsrc/atari/lseek.s libsrc/atari/close.s +__is_cmdline_dos libsrc/atari/is_cmdline_dos.s libsrc/atari/doesclrscr.s +__rest_vecs libsrc/atari/savevec.s +__rwsetup libsrc/atari/rwcommon.s libsrc/atari/read.s libsrc/atari/write.s +__save_vecs libsrc/atari/savevec.s +__scroll libsrc/atari/scroll.s +__setcolor libsrc/atari/setcolor.s +__setcolor_low libsrc/atari/setcolor.s +__sio_call libsrc/atari/diowritev.s libsrc/atari/diopncls.s libsrc/atari/siocall.s libsrc/atari/diowrite.s libsrc/atari/dioread.s + + +cbm + +__cbm_filetype libsrc/cbm/cbm_filetype.s asminc/cbm_filetype.in +__dirread libsrc/cbm/dir.inc libsrc/cbm/dir.s +__dirread1 libsrc/cbm/dir.inc libsrc/cbm/dir.s + + +lynx + +__iodat libsrc/lynx/lynx-cart.s libsrc/lynx/bootldr.s libsrc/lynx/extzp.s libsrc/lynx/crt0.s libsrc/lynx/extzp.inc +__iodir libsrc/lynx/extzp.s libsrc/lynx/crt0.s libsrc/lynx/extzp.inc +__sprsys libsrc/lynx/tgi/lynx-160-102-16.s libsrc/lynx/extzp.s libsrc/lynx/crt0.s libsrc/lynx/extzp.inc +__viddma libsrc/lynx/tgi/lynx-160-102-16.s libsrc/lynx/extzp.s libsrc/lynx/crt0.s libsrc/lynx/extzp.inc + + +pce + +__nmi libsrc/pce/irq.s libsrc/pce/crt0.s +``` ## Test suite From ec652367d0857217b270b59f7e9d225756c91edc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChlstrasser?= <stephan.muehlstrasser@web.de> Date: Sun, 20 Nov 2022 13:28:45 +0100 Subject: [PATCH 1924/2710] Support targets without cursor keys Not all targets to have cursor keys on their keyboard. Add corresponding #ifdefs to the conio test program. --- targettest/conio.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/targettest/conio.c b/targettest/conio.c index 49434595b..efe82d7c6 100644 --- a/targettest/conio.c +++ b/targettest/conio.c @@ -130,9 +130,11 @@ void main(void) case CH_ENTER: clrscr(); return; +#ifdef CH_CURS_LEFT case CH_CURS_LEFT: inpos = (inpos - 1) % 8; break; +#endif case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': (void)textcolor(i - '0'); @@ -164,7 +166,9 @@ void main(void) default: cputc(i); /* fallthrough */ +#ifdef CH_CURS_RIGHT case CH_CURS_RIGHT: +#endif inpos = (inpos + 1) % 8; } #endif From 484e1dc9fde4c8407f05ab7f5f6374a4b9c33cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChlstrasser?= <stephan.muehlstrasser@web.de> Date: Sun, 20 Nov 2022 13:30:57 +0100 Subject: [PATCH 1925/2710] Character defines for osic1p target Added character definitions for line graphics and enter character for osic1p target. --- include/osic1p.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/include/osic1p.h b/include/osic1p.h index d6ab5fee1..3a5b4723e 100644 --- a/include/osic1p.h +++ b/include/osic1p.h @@ -44,4 +44,22 @@ #define _bgcolor(color) COLOR_BLACK #define _bordercolor(color) COLOR_BLACK +/* Colors are not functional, display is black and white only. */ +#define COLOR_BLACK 0x00 +#define COLOR_WHITE 0x01 + +#define CH_ULCORNER 0xCC +#define CH_URCORNER 0xCD +#define CH_LLCORNER 0xCB +#define CH_LRCORNER 0xCE +#define CH_TTEE 0xD9 +#define CH_BTEE 0xD7 +#define CH_LTEE 0xD8 +#define CH_RTEE 0xDA +#define CH_CROSS 0xDB +#define CH_HLINE 0x94 +#define CH_VLINE 0x95 + +#define CH_ENTER 0x0D + #endif From a46de2f6d447409878f6cb560e28cf6cec6e33df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20M=C3=BChlstrasser?= <stephan.muehlstrasser@web.de> Date: Sun, 20 Nov 2022 15:22:37 +0100 Subject: [PATCH 1926/2710] Fix macro order --- include/osic1p.h | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/include/osic1p.h b/include/osic1p.h index 3a5b4723e..479d9fd52 100644 --- a/include/osic1p.h +++ b/include/osic1p.h @@ -36,14 +36,6 @@ # error "This module may only be used when compiling for the Challenger 1P!" #endif -/* The following #defines will cause the matching functions calls in conio.h -** to be overlaid by macros with the same names, saving the function call -** overhead. -*/ -#define _textcolor(color) COLOR_WHITE -#define _bgcolor(color) COLOR_BLACK -#define _bordercolor(color) COLOR_BLACK - /* Colors are not functional, display is black and white only. */ #define COLOR_BLACK 0x00 #define COLOR_WHITE 0x01 @@ -62,4 +54,13 @@ #define CH_ENTER 0x0D +/* The following #defines will cause the matching functions calls in conio.h +** to be overlaid by macros with the same names, saving the function call +** overhead. +*/ +#define _textcolor(color) COLOR_WHITE +#define _bgcolor(color) COLOR_BLACK +#define _bordercolor(color) COLOR_BLACK +#define _cpeekcolor(color) COLOR_WHITE + #endif From 05c2530243e2644ccd798e985ce71c705c75d7ef Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 28 Nov 2022 06:25:45 +0100 Subject: [PATCH 1927/2710] it should have been I64x, not I64u --- src/cc65/codegen.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 251c973ee..480cc32ea 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -68,12 +68,12 @@ /* This is a terrible hack that tries to combat the ever reoccuring issue with Mingw and PRIXPTR - the macro should have been defined like this for us in the first place. - NOTE: "I64u" works in the github actions now, so if your local mingw64 fails, + NOTE: "I64x" works in the github actions now, so if your local mingw64 fails, you probably have to update. */ #if defined(__MINGW64__) #undef PRIXPTR -#define PRIXPTR "I64u" +#define PRIXPTR "I64x" #endif /*****************************************************************************/ From 15eb1c5f5edfe161bf083745bbf5f261aa8073d2 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 28 Nov 2022 06:26:14 +0100 Subject: [PATCH 1928/2710] support the msvc specific I64 specifier in our sprintf --- src/common/xsprintf.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/common/xsprintf.c b/src/common/xsprintf.c index a3fbc676b..556e4f359 100644 --- a/src/common/xsprintf.c +++ b/src/common/xsprintf.c @@ -486,6 +486,18 @@ int xvsnprintf (char* Buf, size_t Size, const char* Format, va_list ap) } break; + /* support the MSVC specific I64 for long long */ + case 'I': + F = *Format++; + if (F == '6') { + F = *Format++; + if (F == '4') { + F = *Format++; + P.LengthMod = lmLongLong; + } + } + break; + case 'l': F = *Format++; if (F == 'l') { From 61ee5fe1d5ef9a9355f0f42dc20351514ec28da3 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 28 Nov 2022 06:26:47 +0100 Subject: [PATCH 1929/2710] test for bug #1933 --- test/val/bug1933.c | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 test/val/bug1933.c diff --git a/test/val/bug1933.c b/test/val/bug1933.c new file mode 100644 index 000000000..9302f565a --- /dev/null +++ b/test/val/bug1933.c @@ -0,0 +1,9 @@ + +/* bug #1933 - wrong printf specifier breaks data lines */ + +unsigned char info_signature[3] = {3, 21, 63 | 0x80}; + +int main(void) +{ + return 0; +} \ No newline at end of file From bad961b36f16452dd81ee5ac6c8aca0ad15c9bc4 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 28 Nov 2022 06:34:05 +0100 Subject: [PATCH 1930/2710] add missing newline --- test/val/bug1933.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/val/bug1933.c b/test/val/bug1933.c index 9302f565a..4715f38fe 100644 --- a/test/val/bug1933.c +++ b/test/val/bug1933.c @@ -6,4 +6,4 @@ unsigned char info_signature[3] = {3, 21, 63 | 0x80}; int main(void) { return 0; -} \ No newline at end of file +} From dae4b2d9b0e9b45e5ff633592aecfc8eead30313 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Tue, 6 Dec 2022 14:47:03 +0100 Subject: [PATCH 1931/2710] add note on optimizer --- Contributing.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Contributing.md b/Contributing.md index 6fa5ba7c2..9fe0e0dee 100644 --- a/Contributing.md +++ b/Contributing.md @@ -181,7 +181,11 @@ The only exception to the above are actions that are exclusive to the github act * the printf family of function does not completely implement all printf modifiers and does not behave as expected in some cases - all this should be documented in detail -## Floating point support +## Compiler + +* We need a way that makes it possible to feed arbitrary assembler code into the optimzer, so we can have proper tests for it + +### Floating point support The first step is implementing the datatype "float" as IEEE488 floats. Help welcomed! From 78e6bcf6435809126fac2c702fdb51d16823d044 Mon Sep 17 00:00:00 2001 From: Irgendwer <C.Krueger.B@web.de> Date: Wed, 7 Dec 2022 00:20:20 +0100 Subject: [PATCH 1932/2710] Update Contributing.md --- Contributing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Contributing.md b/Contributing.md index 9fe0e0dee..74e6ead17 100644 --- a/Contributing.md +++ b/Contributing.md @@ -187,7 +187,7 @@ The only exception to the above are actions that are exclusive to the github act ### Floating point support -The first step is implementing the datatype "float" as IEEE488 floats. Help welcomed! +The first step is implementing the datatype "float" as IEEE 754 floats. Help welcomed! * WIP compiler/library changes are here: https://github.com/cc65/cc65/pull/1777 From ddab16007a23c0b489ac63b9d25dac67d5390229 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 11 Dec 2022 12:08:30 +0100 Subject: [PATCH 1933/2710] run branch fixer again after replacing BRA by JMP. should fix #1936 --- src/cc65/codeopt.c | 4 ++ test/misc/bug1936.c | 93 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 test/misc/bug1936.c diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index 440b10751..208ada134 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -850,6 +850,10 @@ static unsigned RunOptGroup7 (CodeSeg* S) C += RunOptFunc (S, &DOptJumpCascades, 1); C += RunOptFunc (S, &DOptBranchDist2, 1); + /* Adjust branch distances again, since the previous step may change code + between branches */ + C += RunOptFunc (S, &DOptBranchDist, 3); + Changes += C; /* If we had changes, we must run dead code elimination again, ** since the changes may have introduced dead code. diff --git a/test/misc/bug1936.c b/test/misc/bug1936.c new file mode 100644 index 000000000..788313bd2 --- /dev/null +++ b/test/misc/bug1936.c @@ -0,0 +1,93 @@ + +/* bug #1936 - Compiler produces broken Assembly (129 operand for bne) */ + +#include <stdint.h> + +static uint8_t item_counter; + + +static uint8_t freeze; +static uint8_t powerUp; + +static uint8_t wall_appeared; +static uint8_t freeze_locked; +static uint8_t zombie_locked; + + +struct ItemStruct +{ + uint8_t _active; + void(*_effect)(void); +} ; +typedef struct ItemStruct Item; + +static Item freezeItem; +static Item powerUpItem; +static Item wallItem; +static Item zombieItem; + + +static Item extraPointsItem[1]; + + +uint8_t find_inactive(Item* itemArray) +{ +} + + +void drop_item(register Item *item, uint8_t max_counter) +{ +} + + +void handle_item_drop(void) +{ + { + if(item_counter==1) + { + if(!powerUpItem._active) + { + drop_item(&powerUpItem,35); + } + } + else if((!freeze_locked)&&(!freeze)) + { + if(!freezeItem._active) + { + drop_item(&freezeItem,45); + } + } + else if(!wall_appeared&&(powerUp>=9)) + { + if(!wallItem._active) + { + drop_item(&wallItem,35); + } + } + else if(!zombie_locked && !zombieItem._active) + { + drop_item(&zombieItem,50); + } + else + { + uint8_t index; + + index = find_inactive(extraPointsItem); + if(index!=1) // REMARK: compilation does not fail with 0 + { + drop_item(&extraPointsItem[index],90); + } + } + } +} + +int main(void) +{ + + while(1) // Game (re-)start + { + } + + return 0; +} + From 2b941e255a45ad30db26f0ce0fef3492ca5f0812 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 11 Dec 2022 12:22:41 +0100 Subject: [PATCH 1934/2710] move test. oops --- test/{misc => val}/bug1936.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/{misc => val}/bug1936.c (100%) diff --git a/test/misc/bug1936.c b/test/val/bug1936.c similarity index 100% rename from test/misc/bug1936.c rename to test/val/bug1936.c From d9ebfa7192b9d161ead58db45300ffd363233495 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 11 Dec 2022 12:29:11 +0100 Subject: [PATCH 1935/2710] all good things are three --- test/val/bug1936.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/test/val/bug1936.c b/test/val/bug1936.c index 788313bd2..e97231797 100644 --- a/test/val/bug1936.c +++ b/test/val/bug1936.c @@ -83,11 +83,6 @@ void handle_item_drop(void) int main(void) { - - while(1) // Game (re-)start - { - } - return 0; } From d90c7e9853c43f6d2dbf241127006e5bb4fc3830 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 22 Dec 2022 18:06:16 +0100 Subject: [PATCH 1936/2710] Introduced the notion of a standard serial driver. There's no target with more than one serial driver (and I don't see that change anytime soon) so it's a no-brainer to apply the standard driver concept to serial drivers. --- include/apple2.h | 2 +- include/apple2enh.h | 2 +- include/atari.h | 4 ++-- include/atmos.h | 2 +- include/c128.h | 2 +- include/c64.h | 2 +- include/cbm510.h | 2 +- include/cbm610.h | 2 +- include/lynx.h | 2 +- include/plus4.h | 2 +- include/serial.h | 7 +++++++ libsrc/apple2/ser_stat_stddrv.s | 22 ++++++++++++++++++++++ libsrc/apple2/ser_stddrv.s | 18 ++++++++++++++++++ libsrc/atari/ser_stat_stddrv.s | 22 ++++++++++++++++++++++ libsrc/atari/ser_stddrv.s | 18 ++++++++++++++++++ libsrc/atmos/ser_stat_stddrv.s | 14 ++++++++++++++ libsrc/atmos/ser_stddrv.s | 13 +++++++++++++ libsrc/c128/ser_stat_stddrv.s | 14 ++++++++++++++ libsrc/c128/ser_stddrv.s | 13 +++++++++++++ libsrc/c64/ser_stat_stddrv.s | 14 ++++++++++++++ libsrc/c64/ser_stddrv.s | 13 +++++++++++++ libsrc/cbm510/ser_stat_stddrv.s | 14 ++++++++++++++ libsrc/cbm510/ser_stddrv.s | 13 +++++++++++++ libsrc/cbm610/ser_stat_stddrv.s | 14 ++++++++++++++ libsrc/cbm610/ser_stddrv.s | 13 +++++++++++++ libsrc/lynx/ser_stat_stddrv.s | 14 ++++++++++++++ libsrc/plus4/ser_stat_stddrv.s | 14 ++++++++++++++ libsrc/plus4/ser_stddrv.s | 13 +++++++++++++ 28 files changed, 274 insertions(+), 11 deletions(-) create mode 100644 libsrc/apple2/ser_stat_stddrv.s create mode 100644 libsrc/apple2/ser_stddrv.s create mode 100644 libsrc/atari/ser_stat_stddrv.s create mode 100644 libsrc/atari/ser_stddrv.s create mode 100644 libsrc/atmos/ser_stat_stddrv.s create mode 100644 libsrc/atmos/ser_stddrv.s create mode 100644 libsrc/c128/ser_stat_stddrv.s create mode 100644 libsrc/c128/ser_stddrv.s create mode 100644 libsrc/c64/ser_stat_stddrv.s create mode 100644 libsrc/c64/ser_stddrv.s create mode 100644 libsrc/cbm510/ser_stat_stddrv.s create mode 100644 libsrc/cbm510/ser_stddrv.s create mode 100644 libsrc/cbm610/ser_stat_stddrv.s create mode 100644 libsrc/cbm610/ser_stddrv.s create mode 100644 libsrc/lynx/ser_stat_stddrv.s create mode 100644 libsrc/plus4/ser_stat_stddrv.s create mode 100644 libsrc/plus4/ser_stddrv.s diff --git a/include/apple2.h b/include/apple2.h index cb15cab97..9f644bc97 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -171,7 +171,7 @@ extern struct { extern void a2_auxmem_emd[]; extern void a2_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */ extern void a2_stdmou_mou[]; /* Referred to by mouse_static_stddrv[] */ -extern void a2_ssc_ser[]; +extern void a2_ssc_ser[]; /* Referred to by ser_static_stddrv[] */ extern void a2_hi_tgi[]; /* Referred to by tgi_static_stddrv[] */ extern void a2_lo_tgi[]; #endif diff --git a/include/apple2enh.h b/include/apple2enh.h index 58e0b397f..bfe5cdb18 100644 --- a/include/apple2enh.h +++ b/include/apple2enh.h @@ -99,7 +99,7 @@ extern void a2e_auxmem_emd[]; extern void a2e_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */ extern void a2e_stdmou_mou[]; /* Referred to by mouse_static_stddrv[] */ -extern void a2e_ssc_ser[]; +extern void a2e_ssc_ser[]; /* Referred to by ser_static_stddrv[] */ extern void a2e_hi_tgi[]; /* Referred to by tgi_static_stddrv[] */ extern void a2e_lo_tgi[]; diff --git a/include/atari.h b/include/atari.h index 781ee7a80..deae8fdf5 100644 --- a/include/atari.h +++ b/include/atari.h @@ -261,7 +261,7 @@ extern void atrst_mou[]; /* referred to by mouse_static_stddrv[] extern void atrami_mou[]; extern void atrtrk_mou[]; extern void atrtt_mou[]; -extern void atrrdev_ser[]; +extern void atrrdev_ser[]; /* referred to by ser_static_stddrv[] */ extern void atr3_tgi[]; extern void atr4_tgi[]; extern void atr5_tgi[]; @@ -286,7 +286,7 @@ extern void atrxst_mou[]; /* referred to by mouse_static_stddrv[] extern void atrxami_mou[]; extern void atrxtrk_mou[]; extern void atrxtt_mou[]; -extern void atrxrdev_ser[]; +extern void atrxrdev_ser[]; /* referred to by ser_static_stddrv[] */ extern void atrx3_tgi[]; extern void atrx4_tgi[]; extern void atrx5_tgi[]; diff --git a/include/atmos.h b/include/atmos.h index 227c387aa..38d423c46 100644 --- a/include/atmos.h +++ b/include/atmos.h @@ -133,7 +133,7 @@ /* The addresses of the static drivers */ extern void atmos_pase_joy[]; /* Referred to by joy_static_stddrv[] */ extern void atmos_ijk_joy[]; -extern void atmos_acia_ser[]; +extern void atmos_acia_ser[]; /* Referred to by ser_static_stddrv[] */ extern void atmos_228_200_3_tgi[]; extern void atmos_240_200_2_tgi[]; /* Referred to by tgi_static_stddrv[] */ diff --git a/include/c128.h b/include/c128.h index ee1dce99e..5a34904e0 100644 --- a/include/c128.h +++ b/include/c128.h @@ -140,7 +140,7 @@ extern void c128_1351_mou[]; /* Referred to by mouse_static_stddrv[] */ extern void c128_joy_mou[]; extern void c128_inkwell_mou[]; extern void c128_pot_mou[]; -extern void c128_swlink_ser[]; +extern void c128_swlink_ser[]; /* Referred to by ser_static_stddrv[] */ extern void c128_hi_tgi[]; extern void c128_vdc_tgi[]; /* Referred to by tgi_static_stddrv[] */ extern void c128_vdc2_tgi[]; diff --git a/include/c64.h b/include/c64.h index 13d252dcb..ffac801ef 100644 --- a/include/c64.h +++ b/include/c64.h @@ -155,7 +155,7 @@ extern void c64_1351_mou[]; /* Referred to by mouse_static_stddrv[] extern void c64_joy_mou[]; extern void c64_inkwell_mou[]; extern void c64_pot_mou[]; -extern void c64_swlink_ser[]; +extern void c64_swlink_ser[]; /* Referred to by ser_static_stddrv[] */ extern void c64_hi_tgi[]; /* Referred to by tgi_static_stddrv[] */ diff --git a/include/cbm510.h b/include/cbm510.h index 20b334ed9..8ebbdf3c1 100644 --- a/include/cbm510.h +++ b/include/cbm510.h @@ -128,7 +128,7 @@ extern void cbm510_inkwl_mou[]; extern void cbm510_joy_mou[]; /* Referred to by mouse_static_stddrv[] */ extern void cbm510_ram_emd[]; extern void cbm510_std_joy[]; /* Referred to by joy_static_stddrv[] */ -extern void cbm510_std_ser[]; +extern void cbm510_std_ser[]; /* Referred to by ser_static_stddrv[] */ diff --git a/include/cbm610.h b/include/cbm610.h index de7aa50f8..64beab9e6 100644 --- a/include/cbm610.h +++ b/include/cbm610.h @@ -105,7 +105,7 @@ /* The addresses of the static drivers */ extern void cbm610_ram_emd[]; -extern void cbm610_std_ser[]; +extern void cbm610_std_ser[]; /* Referred to by ser_static_stddrv[] */ diff --git a/include/lynx.h b/include/lynx.h index 1b4828a72..41dc5acb3 100644 --- a/include/lynx.h +++ b/include/lynx.h @@ -115,7 +115,7 @@ /* The addresses of the static drivers */ extern void lynx_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */ -extern void lynx_comlynx_ser[]; +extern void lynx_comlynx_ser[]; /* Referred to by ser_static_stddrv[] */ extern void lynx_160_102_16_tgi[]; /* Referred to by tgi_static_stddrv[] */ diff --git a/include/plus4.h b/include/plus4.h index 325ba7d89..7730938e8 100644 --- a/include/plus4.h +++ b/include/plus4.h @@ -56,7 +56,7 @@ /* The addresses of the static drivers */ extern void plus4_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */ -extern void plus4_stdser_ser[]; +extern void plus4_stdser_ser[]; /* Referred to by ser_static_stddrv[] */ diff --git a/include/serial.h b/include/serial.h index 35d7b8f66..0510cd219 100644 --- a/include/serial.h +++ b/include/serial.h @@ -123,6 +123,13 @@ struct ser_params { unsigned char handshake; /* Type of handshake to use */ }; +/* The name of the standard serial driver for a platform */ +extern const char ser_stddrv[]; + +/* The address of the static standard serial driver for a platform */ +extern const void ser_static_stddrv[]; + + /*****************************************************************************/ /* Code */ diff --git a/libsrc/apple2/ser_stat_stddrv.s b/libsrc/apple2/ser_stat_stddrv.s new file mode 100644 index 000000000..690fe4853 --- /dev/null +++ b/libsrc/apple2/ser_stat_stddrv.s @@ -0,0 +1,22 @@ +; +; Address of the static standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const void ser_static_stddrv[]; +; + + .export _ser_static_stddrv + .ifdef __APPLE2ENH__ + .import _a2e_ssc_ser + .else + .import _a2_ssc_ser + .endif + +.rodata + + .ifdef __APPLE2ENH__ +_ser_static_stddrv := _a2e_ssc_ser + .else +_ser_static_stddrv := _a2_ssc_ser + .endif diff --git a/libsrc/apple2/ser_stddrv.s b/libsrc/apple2/ser_stddrv.s new file mode 100644 index 000000000..2e8361865 --- /dev/null +++ b/libsrc/apple2/ser_stddrv.s @@ -0,0 +1,18 @@ +; +; Name of the standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const char ser_stddrv[]; +; + + .export _ser_stddrv + +.rodata + +_ser_stddrv: + .ifdef __APPLE2ENH__ + .asciiz "A2E.SSC.SER" + .else + .asciiz "A2.SSC.SER" + .endif diff --git a/libsrc/atari/ser_stat_stddrv.s b/libsrc/atari/ser_stat_stddrv.s new file mode 100644 index 000000000..b054f7f32 --- /dev/null +++ b/libsrc/atari/ser_stat_stddrv.s @@ -0,0 +1,22 @@ +; +; Address of the static standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const void ser_static_stddrv[]; +; + + .export _ser_static_stddrv + .ifdef __ATARIXL__ + .import _atrxrdev_ser + .else + .import _atrrdev_ser + .endif + +.rodata + + .ifdef __ATARIXL__ +_ser_static_stddrv := _atrxrdev_ser + .else +_ser_static_stddrv := _atrrdev_ser + .endif diff --git a/libsrc/atari/ser_stddrv.s b/libsrc/atari/ser_stddrv.s new file mode 100644 index 000000000..e6f4ccd48 --- /dev/null +++ b/libsrc/atari/ser_stddrv.s @@ -0,0 +1,18 @@ +; +; Name of the standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const char ser_stddrv[]; +; + + .export _ser_stddrv + +.rodata + +_ser_stddrv: + .ifdef __ATARIXL__ + .asciiz "atrxrdev.ser" + .else + .asciiz "atrrdev.ser" + .endif diff --git a/libsrc/atmos/ser_stat_stddrv.s b/libsrc/atmos/ser_stat_stddrv.s new file mode 100644 index 000000000..2b4373695 --- /dev/null +++ b/libsrc/atmos/ser_stat_stddrv.s @@ -0,0 +1,14 @@ +; +; Address of the static standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const void ser_static_stddrv[]; +; + + .export _ser_static_stddrv + .import _atmos_acia_ser + +.rodata + +_ser_static_stddrv := _atmos_acia_ser diff --git a/libsrc/atmos/ser_stddrv.s b/libsrc/atmos/ser_stddrv.s new file mode 100644 index 000000000..71e33115a --- /dev/null +++ b/libsrc/atmos/ser_stddrv.s @@ -0,0 +1,13 @@ +; +; Name of the standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const char ser_stddrv[]; +; + + .export _ser_stddrv + +.rodata + +_ser_stddrv: .asciiz "atmos-acia.ser" diff --git a/libsrc/c128/ser_stat_stddrv.s b/libsrc/c128/ser_stat_stddrv.s new file mode 100644 index 000000000..8b0732703 --- /dev/null +++ b/libsrc/c128/ser_stat_stddrv.s @@ -0,0 +1,14 @@ +; +; Address of the static standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const void ser_static_stddrv[]; +; + + .export _ser_static_stddrv + .import _c128_swlink_ser + +.rodata + +_ser_static_stddrv := _c128_swlink_ser diff --git a/libsrc/c128/ser_stddrv.s b/libsrc/c128/ser_stddrv.s new file mode 100644 index 000000000..63f73cadd --- /dev/null +++ b/libsrc/c128/ser_stddrv.s @@ -0,0 +1,13 @@ +; +; Name of the standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const char ser_stddrv[]; +; + + .export _ser_stddrv + +.rodata + +_ser_stddrv: .asciiz "c128_swlink.ser" diff --git a/libsrc/c64/ser_stat_stddrv.s b/libsrc/c64/ser_stat_stddrv.s new file mode 100644 index 000000000..327abbe5f --- /dev/null +++ b/libsrc/c64/ser_stat_stddrv.s @@ -0,0 +1,14 @@ +; +; Address of the static standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const void ser_static_stddrv[]; +; + + .export _ser_static_stddrv + .import _c64_swlink_ser + +.rodata + +_ser_static_stddrv := _c64_swlink_ser diff --git a/libsrc/c64/ser_stddrv.s b/libsrc/c64/ser_stddrv.s new file mode 100644 index 000000000..5b00b7642 --- /dev/null +++ b/libsrc/c64/ser_stddrv.s @@ -0,0 +1,13 @@ +; +; Name of the standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const char ser_stddrv[]; +; + + .export _ser_stddrv + +.rodata + +_ser_stddrv: .asciiz "c64_swlink.ser" diff --git a/libsrc/cbm510/ser_stat_stddrv.s b/libsrc/cbm510/ser_stat_stddrv.s new file mode 100644 index 000000000..a872f19b9 --- /dev/null +++ b/libsrc/cbm510/ser_stat_stddrv.s @@ -0,0 +1,14 @@ +; +; Address of the static standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const void ser_static_stddrv[]; +; + + .export _ser_static_stddrv + .import _cbm510_std_ser + +.rodata + +_ser_static_stddrv := _cbm510_std_ser diff --git a/libsrc/cbm510/ser_stddrv.s b/libsrc/cbm510/ser_stddrv.s new file mode 100644 index 000000000..ed785f914 --- /dev/null +++ b/libsrc/cbm510/ser_stddrv.s @@ -0,0 +1,13 @@ +; +; Name of the standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const char ser_stddrv[]; +; + + .export _ser_stddrv + +.rodata + +_ser_stddrv: .asciiz "cbm510-std.ser" diff --git a/libsrc/cbm610/ser_stat_stddrv.s b/libsrc/cbm610/ser_stat_stddrv.s new file mode 100644 index 000000000..643a74c7d --- /dev/null +++ b/libsrc/cbm610/ser_stat_stddrv.s @@ -0,0 +1,14 @@ +; +; Address of the static standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const void ser_static_stddrv[]; +; + + .export _ser_static_stddrv + .import _cbm610_std_ser + +.rodata + +_ser_static_stddrv := _cbm610_std_ser diff --git a/libsrc/cbm610/ser_stddrv.s b/libsrc/cbm610/ser_stddrv.s new file mode 100644 index 000000000..83702c1ef --- /dev/null +++ b/libsrc/cbm610/ser_stddrv.s @@ -0,0 +1,13 @@ +; +; Name of the standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const char ser_stddrv[]; +; + + .export _ser_stddrv + +.rodata + +_ser_stddrv: .asciiz "cbm610-std.ser" diff --git a/libsrc/lynx/ser_stat_stddrv.s b/libsrc/lynx/ser_stat_stddrv.s new file mode 100644 index 000000000..37f481c47 --- /dev/null +++ b/libsrc/lynx/ser_stat_stddrv.s @@ -0,0 +1,14 @@ +; +; Address of the static standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const void ser_static_stddrv[]; +; + + .export _ser_static_stddrv + .import _lynx_comlynx_ser + +.rodata + +_ser_static_stddrv := _lynx_comlynx_ser diff --git a/libsrc/plus4/ser_stat_stddrv.s b/libsrc/plus4/ser_stat_stddrv.s new file mode 100644 index 000000000..f35b09232 --- /dev/null +++ b/libsrc/plus4/ser_stat_stddrv.s @@ -0,0 +1,14 @@ +; +; Address of the static standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const void ser_static_stddrv[]; +; + + .export _ser_static_stddrv + .import _plus4_stdser_ser + +.rodata + +_ser_static_stddrv := _plus4_stdser_ser diff --git a/libsrc/plus4/ser_stddrv.s b/libsrc/plus4/ser_stddrv.s new file mode 100644 index 000000000..f308d5f40 --- /dev/null +++ b/libsrc/plus4/ser_stddrv.s @@ -0,0 +1,13 @@ +; +; Name of the standard serial driver +; +; Oliver Schmidt, 2022-12-22 +; +; const char ser_stddrv[]; +; + + .export _ser_stddrv + +.rodata + +_ser_stddrv: .asciiz "plus4-stdser.ser" From 1daa445310a5054a63e4985340f6760111e3e097 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 22 Dec 2022 21:50:38 +0100 Subject: [PATCH 1937/2710] Fixed recently introduced addressing mode bug. --- libsrc/apple2/ser/a2.ssc.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index e0cd94597..d49bf3526 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -199,7 +199,7 @@ SER_OPEN: asl asl asl - adc Offset ; Assume carry to be clear + adc #Offset ; Assume carry to be clear tax ; Check if the handshake setting is valid From de30a57c0c9e6186049e2659f88ee395bad25b8b Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Fri, 23 Dec 2022 15:24:28 +0100 Subject: [PATCH 1938/2710] Added minimalistic terminal program. So far there was no sample code at all making use of the serial drivers. --- samples/Makefile | 8 +++++ samples/terminal.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 samples/terminal.c diff --git a/samples/Makefile b/samples/Makefile index 2aa637844..114bbdf6a 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -171,6 +171,7 @@ EXELIST_apple2 = \ multdemo \ ovrldemo \ sieve \ + terminal \ tinyshell \ tgidemo @@ -186,6 +187,7 @@ EXELIST_atari = \ multdemo \ ovrldemo \ sieve \ + terminal \ tinyshell \ tgidemo @@ -203,6 +205,7 @@ EXELIST_atmos = \ hello \ mandelbrot \ sieve \ + terminal \ tgidemo EXELIST_bbc = \ @@ -219,6 +222,7 @@ EXELIST_c64 = \ multdemo \ ovrldemo \ sieve \ + terminal \ tinyshell \ tgidemo @@ -231,6 +235,7 @@ EXELIST_c128 = \ mandelbrot \ mousedemo \ sieve \ + terminal \ tinyshell \ tgidemo @@ -247,6 +252,7 @@ EXELIST_cbm510 = \ gunzip65 \ hello \ mousedemo \ + terminal \ tinyshell \ sieve @@ -255,6 +261,7 @@ EXELIST_cbm610 = \ checkversion \ gunzip65 \ hello \ + terminal \ tinyshell \ sieve @@ -314,6 +321,7 @@ EXELIST_plus4 = \ enumdevdir \ gunzip65 \ hello \ + terminal \ tinyshell \ sieve diff --git a/samples/terminal.c b/samples/terminal.c new file mode 100644 index 000000000..51973f7a3 --- /dev/null +++ b/samples/terminal.c @@ -0,0 +1,76 @@ +/* +** Minimalistic terminal program. +** +** Makes use of the serial drivers. +** +** 2022-12-23, Oliver Schmidt (ol.sc@web.de) +** +*/ + + + +#include <cc65.h> +#include <conio.h> +#include <stdio.h> +#include <stdlib.h> +#include <serial.h> + + +static void check (const char* msg, unsigned char err) +{ + if (err == SER_ERR_OK) { + return; + } + + printf ("%s:0x%02x\n", msg, err); + if (doesclrscrafterexit ()) { + cgetc (); + } + exit (1); +} + + +void main (void) +{ + const struct ser_params par = { + SER_BAUD_9600, + SER_BITS_8, + SER_STOP_1, + SER_PAR_NONE, + SER_HS_HW + }; + + check ("ser_install", ser_install (ser_static_stddrv)); + + check ("ser_open", ser_open (&par)); + + atexit ((void (*)) ser_close); + + printf ("Serial Port: 9600-8-1-N RTS/CTS\n" + "Simple Term: Press ESC for exit\n"); + + while (1) + { + char chr; + + if (kbhit ()) + { + chr = cgetc (); + + if (chr == CH_ESC) { + putchar ('\n'); + return; + } + + if (ser_put (chr) == SER_ERR_OK) { + putchar (chr); + } else { + putchar ('\a'); + } + } + + if (ser_get (&chr) == SER_ERR_OK) { + putchar (chr); + } + } +} From a8c6409689d91c35b647bc566b380c6766635cd9 Mon Sep 17 00:00:00 2001 From: Rutger van Bergen <rbergen@xs4all.nl> Date: Mon, 26 Dec 2022 19:54:00 +0100 Subject: [PATCH 1939/2710] Delete kimHello --- samples/kim1/kimHello | Bin 2789 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 samples/kim1/kimHello diff --git a/samples/kim1/kimHello b/samples/kim1/kimHello deleted file mode 100644 index 5842567557dc9f321409d269970f08832b736d86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2789 zcmbVOTWl2989p<!moqbGW`|^LuiKKGv;}Gss1s;#q)H_X&?OpGQAIB5O9zD|Yicfy zTZvX`id4^PyYa5P4=B(o(lGL@m@VsitJ2o0P$RXt9weHRms}Kq2*Qh942&^glRj+! zGd2QM>PwHj|K(i1^Ur@f{@6caBR^#e^evV4CFt9Pc8bVHbVBy0T$R2rJ0ktL?4Nib zo8J=YZ<8)^P!)bIYN9})f5+@!{>KkCxqxB*K%{?2S`KP<wmO;E>arRkDPJQrCHdD} z0@!q1Hct~T-8U=R>2Yzg!)n|iY!z*Y=9&Z-6I^_pQ(G)ZbVziBX1ZQ%rU7*b56R8W zzS-W9rvhdCYxE5<>*1Q5z-yyl4%@htlkG^!b8X~<mOOr*@3BrTk{gTU_!6=FC6{FO zFOm^q#(ZD)GPQ1C^niF{p0K4Gw+LIXz}^PY#xxBqZs^)riVI-(5T;$23X+G-@8E}& zBF;MTi8MMsO^U{1-cA=f=wFg{XQ7L;OrhIHC##t$_-kg$e<Ym#iFlnh_PT7Ddn;6f zHDPj!-D!2P`D2+}r`<UM?(3Vzw&Hb7%eER<!Zq}G!ijs`RaEpcoXDJDPE<~mDx#+e zeO;_G)s3H-CP&lfj3p~r!@z5tg2U*KMDtgYk6iWLIdabU92PdPcx8@+-NBO}TqmIs zP!MjAFd2M>$(5S~j+uJQr9m%C)In)>Rzec2U&e!Iy&9tvVtJlaZjs>yGJKl==tlO% zXy-%Q-io#@kV>@SXK-OY><E4wt_t>rI55LlFu+v5UA_}tI20RRB<@m$XfCNhAl?vz z*O?A!QC=cGD&HgK$#}2_4)wDQE^2_eqDvcKzUV$#xl8D8#8IhNJ$09aiQy$4dPkw( zl=z_otb=D4E^yChsu-eC#o(0SAX^8=PTeG7SGHipjkp+>v<0Hw1`NNKE{b^vuV5Tv znu{uT$PBp0Kg`wzgN$(7hz7RuOMb#sIwHcIJEJ=fgQ2gno@@ial?cm!4FLHT1GeOY z!%SYuxB&&ugE=eeD@s|{Dk-h8Y)Hr00-4jb#%*%)dP*BlRCH}PrS&!D$#q?;H*OI= z3-PV*Y?p7563}_lm?KQ0-4gw(1Y*cVz%Lsb_;HnHO=UC3a>z!Ia6;a4+Lw-ui%@Ig zkOU<cCjCxVH2(}`^Nx*uV#~l4;Hum7+qU7LnNVxusxrmyw&a$|!j{2qT9**(c(Hy) zB_r_{VPtwz^)raL$m#>rtWm_oNnsLM9_pKo!Oem-DMU)*zQWrOa$|I>LVuZn7Le%? z!UWJnm~h)AlO{pNp$>ErstQ_C2IlG~GW5Lci}Xqo&O<{IsGxu;$pD32=9iL}+H7^u zX5Ac5j#V=pCz8c#<{VdCbOL2z2H8-l$nMUYA0*3<Xg01qszJI4P23|e**7Ro)Xfi* zpvKrdWD#}|H&~`uWhcprOfMv9h~aKMKumGspgW5BNP@ngf)yFCBHiG?jYl=;000d3 zVCHcYzLy?V0Kf4&GB!@kTA~FGYY7&&3|b*-p)d|V$!Z}!D*>*P;ACapa#1FSvZb6* z&s&+D?S3H(nb42wp2(RkdQ!xtyanM{j&+s}CmhL>cq0*kl&UCStRl-ccnebss!a+S zJt%Vx8nZ>ej%(7W@t(q-^TfCu$86Q5BTRGDiQ8&bDH==WUvbG;?Qd{URcR?;zsmbC z4U@d`%(pQB_~2~nBi_H)ifg6yXN{5Aw9&#vHg|I3iVDpgfT0N4Cl1P2l~9^uOCG6d z7E8FOWU<eAh^_Em?;=-2(YP7$*^#Re{}kwY%hpTb#zG2AKQ=0d>mX%~9jU$gh?>da zx+muh+bHcd_U(naBAfN}TFNrF$OU;6*YpA&(j9C*FWWjl@4yFytL@Z|2d7hZs<bz? zkDt9(_jC)EBmj;k?(hj76I+I$+1UJBayYFunq=(v{3-NMO~~v|Yw!+5%?OeJf{XbI zchncuQ)vx?>I>$1-l@<i6yqekzYr8&Jiwrhqb#o>(MIr=3XX6;Y7of>)5}T24^F|l z#REB0Q0p@VWjUUc3X4su;S==xk5T8bo?iq>h60VneFaoFhFh3@+LGBvk?&8ZvrTj~ zod>kj9bD`H(c&56f^khH#8d2EOPyi2k6HY?_zEwPFiratJt9;w?x)ao*&IO5cuGx$ zbhY&;LUdG#9%~=jl4I0T;p03v)~}W7XLV1SPK{t&DoyM47A_Up6<f5T<?+~A9TG?9 ziE{%cp@OdRe>9>}Y<xz>E)&`trCnTRNqAu{5T<!Jv;P7Cv9$jpDPJT|ZdvGuFm;hQ zViT1=BmM>WMvyKOpFlOxSER-TGIo*tPY<r<-w8g89H@W;HBi8Lms+y9OO3qePp@=Q zbkaqk!u{~?mVA!geXlo+b8XSu_0vN+x|<I49{_e>4?Xl|Zg7xp|L(5s-+PK48p!P) z%xzQ@q-1jg0|)7=2j3jn^90wGUHRPyemKbG-lw10wD}v)Zs~jO`ES3lZTpT5&pf?( z%jUjK&u;ERNDzsv7+YU**j^a5Vv)0G$Y^<N;seB&UVeGam+ub|p{?7trB~e_0y?y^ z{r_eUKQBl?f`CNfzro%izb5Yz6QS}Xsr-YK&y&hONpYgxE`PMlJ|x4R5ZZ1#Z8l>e JbXnmD{{hxi-7)|G From 37954dffe78074b9d8c80ef8253fd3f8dcb83f56 Mon Sep 17 00:00:00 2001 From: Rutger van Bergen <rbergen@xs4all.nl> Date: Mon, 26 Dec 2022 20:26:29 +0100 Subject: [PATCH 1940/2710] Specify supported tests --- targettest/Makefile | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/targettest/Makefile b/targettest/Makefile index 7bcbc95f0..4d989d0df 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -693,6 +693,17 @@ EXELIST_bbc = \ EXELIST_lunix = \ notavailable +# omitted: arg-test clock-test clock cpeek-test conio cprintf cursor deb dir-test +# em-test exec-test1 exec-test2 fileio-test ft getopt-test heaptest joy-test +# mouse-test mul-test posixio-test rename-test scanf-test seek ser-test strdup-test +# stroserror-test uname-test +EXELIST_kim1 = \ + minimal \ + div-test \ + moddiv-test \ + strnlen \ + strqtok-test + # Unlisted targets will try to build everything. # That lets us learn what they cannot build, and what settings # we need to use for programs that can be built and run. From 817d129be8a076744a4d2d8d04e0d682f5d99fad Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Thu, 29 Dec 2022 19:18:00 +0200 Subject: [PATCH 1941/2710] Add support for 4 pixels per plane --- src/sp65/pcx.c | 171 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 141 insertions(+), 30 deletions(-) diff --git a/src/sp65/pcx.c b/src/sp65/pcx.c index d721671b3..489c65c5d 100644 --- a/src/sp65/pcx.c +++ b/src/sp65/pcx.c @@ -153,11 +153,12 @@ static PCXHeader* ReadPCXHeader (FILE* F, const char* Name) P->Compressed, Name); } /* We support: - ** - one plane with either 1 or 8 bits per pixel - ** - three planes with 8 bits per pixel - ** - four planes with 8 bits per pixel (does this exist?) - */ + * - one plane with either 1, 4 or 8 bits per pixel + * - three planes with 8 bits per pixel + * - four planes with 8 bits per pixel (does this exist?) + */ if (!((P->BPP == 1 && P->Planes == 1) || + (P->BPP == 4 && P->Planes == 1) || (P->BPP == 8 && (P->Planes == 1 || P->Planes == 3 || P->Planes == 4)))) { /* We could support others, but currently we don't */ Error ("Unsupported PCX format: %u planes, %u bpp in PCX file '%s'", @@ -204,11 +205,14 @@ static void DumpPCXHeader (const PCXHeader* P, const char* Name) static void ReadPlane (FILE* F, PCXHeader* P, unsigned char* L) /* Read one (possibly compressed) plane from the file */ { - if (P->Compressed) { + unsigned i; + if (P->Compressed) { /* Uncompress RLE data */ - unsigned Remaining = P->Width; - while (Remaining) { + signed Remaining = P->BytesPerPlane; + signed WidthCounter = P->Width; + + while (Remaining > 0) { unsigned char C; @@ -224,21 +228,111 @@ static void ReadPlane (FILE* F, PCXHeader* P, unsigned char* L) } /* Write the data to the buffer */ - if (C > Remaining) { - C = Remaining; - } - memset (L, B, C); - - /* Bump counters */ - L += C; - Remaining -= C; - + switch (P->BPP) { + default: + for (i = 0; i < C; i++) { + if (WidthCounter > 0) { + *L = B; + L += 1; + WidthCounter -= 1; + } + Remaining -= 1; + } + break; + case 4: + for (i = 0; i < C; i++) { + if (WidthCounter > 0) { + *L = B >> 4; + L += 1; + WidthCounter -= 1; + } + if (WidthCounter > 0) { + *L = B & 15; + L += 1; + WidthCounter -= 1; + } + Remaining -= 1; + } + break; + case 2: + for (i = 0; i < C; i++) { + if (WidthCounter > 0) { + *L = (B >> 6) & 3; + L += 1; + WidthCounter -= 1; + } + if (WidthCounter > 0) { + *L = (B >> 4) & 3; + L += 1; + WidthCounter -= 1; + } + if (WidthCounter > 0) { + *L = (B >> 2) & 3; + L += 1; + WidthCounter -= 1; + } + if (WidthCounter > 0) { + *L = B & 3; + L += 1; + WidthCounter -= 1; + } + Remaining -= 1; + } + break; + case 1: + for (i = 0; i < C; i++) { + if (WidthCounter > 0) { + *L = (B >> 7) & 1; + L += 1; + WidthCounter -= 1; + } + if (WidthCounter > 0) { + *L = (B >> 6) & 1; + L += 1; + WidthCounter -= 1; + } + if (WidthCounter > 0) { + *L = (B >> 5) & 1; + L += 1; + WidthCounter -= 1; + } + if (WidthCounter > 0) { + *L = (B >> 4) & 1; + L += 1; + WidthCounter -= 1; + } + if (WidthCounter > 0) { + *L = (B >> 3) & 1; + L += 1; + WidthCounter -= 1; + } + if (WidthCounter > 0) { + *L = (B >> 2) & 1; + L += 1; + WidthCounter -= 1; + } + if (WidthCounter > 0) { + *L = (B >> 1) & 1; + L += 1; + WidthCounter -= 1; + } + if (WidthCounter > 0) { + *L = B & 1; + L += 1; + WidthCounter -= 1; + } + Remaining -= 1; + } + break; + } } } else { - /* Just read one line */ - ReadData (F, L, P->Width); - + if (P->BPP == 4) { + printf("Not implemented\n"); + } else { + ReadData (F, L, P->Width); + } } } @@ -309,25 +403,42 @@ Bitmap* ReadPCXFile (const Collection* A) } } else { - /* One plane with 8bpp is indexed */ - for (Y = 0, Px = B->Data; Y < P->Height; ++Y) { + if (P->BPP == 4) { + /* One plane with 8bpp is indexed */ + for (Y = 0, Px = B->Data; Y < P->Height; ++Y) { - /* Read the plane */ - ReadPlane (F, P, L); + /* Read the plane */ + ReadPlane (F, P, L); - /* Create pixels */ - for (X = 0; X < P->Width; ++X, ++Px) { - if (L[X] > MaxIdx) { - MaxIdx = L[X]; + /* Create pixels */ + for (X = 0; X < P->Width; ++X, ++Px) { + if (L[X] > MaxIdx) { + MaxIdx = L[X]; + } + Px->Index = L[X]; + } + } + } else { + /* One plane with 8bpp is indexed */ + for (Y = 0, Px = B->Data; Y < P->Height; ++Y) { + + /* Read the plane */ + ReadPlane (F, P, L); + + /* Create pixels */ + for (X = 0; X < P->Width; ++X, ++Px) { + if (L[X] > MaxIdx) { + MaxIdx = L[X]; + } + Px->Index = L[X]; } - Px->Index = L[X]; } } } /* One plane means we have a palette which is either part of the header - ** or follows. - */ + * or follows. + */ if (P->PalInfo == 0) { /* Create the monochrome palette */ From e953c1aa082a154b991388650bef4a0e46bd76b0 Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Thu, 29 Dec 2022 19:28:16 +0200 Subject: [PATCH 1942/2710] Add support for 4 pixels per plane --- src/sp65/pcx.c | 54 +++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/sp65/pcx.c b/src/sp65/pcx.c index 489c65c5d..4beda045c 100644 --- a/src/sp65/pcx.c +++ b/src/sp65/pcx.c @@ -230,109 +230,109 @@ static void ReadPlane (FILE* F, PCXHeader* P, unsigned char* L) /* Write the data to the buffer */ switch (P->BPP) { default: - for (i = 0; i < C; i++) { + for (i = 0; i < C; i++) { if (WidthCounter > 0) { - *L = B; + *L = B; L += 1; WidthCounter -= 1; } Remaining -= 1; - } + } break; case 4: - for (i = 0; i < C; i++) { + for (i = 0; i < C; i++) { if (WidthCounter > 0) { - *L = B >> 4; + *L = B >> 4; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = B & 15; + *L = B & 15; L += 1; WidthCounter -= 1; } Remaining -= 1; - } + } break; case 2: - for (i = 0; i < C; i++) { + for (i = 0; i < C; i++) { if (WidthCounter > 0) { - *L = (B >> 6) & 3; + *L = (B >> 6) & 3; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 4) & 3; + *L = (B >> 4) & 3; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 2) & 3; + *L = (B >> 2) & 3; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = B & 3; + *L = B & 3; L += 1; WidthCounter -= 1; } Remaining -= 1; - } + } break; case 1: - for (i = 0; i < C; i++) { + for (i = 0; i < C; i++) { if (WidthCounter > 0) { - *L = (B >> 7) & 1; + *L = (B >> 7) & 1; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 6) & 1; + *L = (B >> 6) & 1; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 5) & 1; + *L = (B >> 5) & 1; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 4) & 1; + *L = (B >> 4) & 1; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 3) & 1; + *L = (B >> 3) & 1; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 2) & 1; + *L = (B >> 2) & 1; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 1) & 1; + *L = (B >> 1) & 1; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = B & 1; + *L = B & 1; L += 1; WidthCounter -= 1; } Remaining -= 1; - } + } break; - } + } } } else { /* Just read one line */ if (P->BPP == 4) { - printf("Not implemented\n"); - } else { + printf("Not implemented\n"); + } else { ReadData (F, L, P->Width); - } + } } } From 05766d4bfecddc4e4cd4d468c945ee142a5c163d Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Thu, 29 Dec 2022 19:40:00 +0200 Subject: [PATCH 1943/2710] Add support for 4 pixels per plane --- src/sp65/pcx.c | 54 +++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/sp65/pcx.c b/src/sp65/pcx.c index 4beda045c..519f3bd58 100644 --- a/src/sp65/pcx.c +++ b/src/sp65/pcx.c @@ -230,109 +230,109 @@ static void ReadPlane (FILE* F, PCXHeader* P, unsigned char* L) /* Write the data to the buffer */ switch (P->BPP) { default: - for (i = 0; i < C; i++) { + for (i = 0; i < C; i++) { if (WidthCounter > 0) { - *L = B; + *L = B; L += 1; WidthCounter -= 1; } Remaining -= 1; - } + } break; case 4: - for (i = 0; i < C; i++) { + for (i = 0; i < C; i++) { if (WidthCounter > 0) { - *L = B >> 4; + *L = B >> 4; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = B & 15; + *L = B & 15; L += 1; WidthCounter -= 1; } Remaining -= 1; - } + } break; case 2: - for (i = 0; i < C; i++) { + for (i = 0; i < C; i++) { if (WidthCounter > 0) { - *L = (B >> 6) & 3; + *L = (B >> 6) & 3; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 4) & 3; + *L = (B >> 4) & 3; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 2) & 3; + *L = (B >> 2) & 3; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = B & 3; + *L = B & 3; L += 1; WidthCounter -= 1; } Remaining -= 1; - } + } break; case 1: - for (i = 0; i < C; i++) { + for (i = 0; i < C; i++) { if (WidthCounter > 0) { - *L = (B >> 7) & 1; + *L = (B >> 7) & 1; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 6) & 1; + *L = (B >> 6) & 1; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 5) & 1; + *L = (B >> 5) & 1; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 4) & 1; + *L = (B >> 4) & 1; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 3) & 1; + *L = (B >> 3) & 1; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 2) & 1; + *L = (B >> 2) & 1; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = (B >> 1) & 1; + *L = (B >> 1) & 1; L += 1; WidthCounter -= 1; } if (WidthCounter > 0) { - *L = B & 1; + *L = B & 1; L += 1; WidthCounter -= 1; } Remaining -= 1; - } - break; } + break; + } } } else { /* Just read one line */ if (P->BPP == 4) { - printf("Not implemented\n"); - } else { + printf("Not implemented\n"); + } else { ReadData (F, L, P->Width); - } + } } } From 5ec5050af2cb6b9e51c3c5482aaf67be3f22c1d4 Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Thu, 29 Dec 2022 21:48:28 +0200 Subject: [PATCH 1944/2710] Remove redundant code --- src/sp65/pcx.c | 35 +++++++++-------------------------- 1 file changed, 9 insertions(+), 26 deletions(-) diff --git a/src/sp65/pcx.c b/src/sp65/pcx.c index 519f3bd58..607253c59 100644 --- a/src/sp65/pcx.c +++ b/src/sp65/pcx.c @@ -403,35 +403,18 @@ Bitmap* ReadPCXFile (const Collection* A) } } else { - if (P->BPP == 4) { - /* One plane with 8bpp is indexed */ - for (Y = 0, Px = B->Data; Y < P->Height; ++Y) { + /* One plane with 8bpp is indexed */ + for (Y = 0, Px = B->Data; Y < P->Height; ++Y) { - /* Read the plane */ - ReadPlane (F, P, L); + /* Read the plane */ + ReadPlane (F, P, L); - /* Create pixels */ - for (X = 0; X < P->Width; ++X, ++Px) { - if (L[X] > MaxIdx) { - MaxIdx = L[X]; - } - Px->Index = L[X]; - } - } - } else { - /* One plane with 8bpp is indexed */ - for (Y = 0, Px = B->Data; Y < P->Height; ++Y) { - - /* Read the plane */ - ReadPlane (F, P, L); - - /* Create pixels */ - for (X = 0; X < P->Width; ++X, ++Px) { - if (L[X] > MaxIdx) { - MaxIdx = L[X]; - } - Px->Index = L[X]; + /* Create pixels */ + for (X = 0; X < P->Width; ++X, ++Px) { + if (L[X] > MaxIdx) { + MaxIdx = L[X]; } + Px->Index = L[X]; } } } From 9cb06672602c8d563d021baa7cdc3f871f67668f Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Thu, 29 Dec 2022 21:53:50 +0200 Subject: [PATCH 1945/2710] Use same style in comments --- src/sp65/pcx.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/sp65/pcx.c b/src/sp65/pcx.c index 607253c59..18a60276d 100644 --- a/src/sp65/pcx.c +++ b/src/sp65/pcx.c @@ -153,10 +153,10 @@ static PCXHeader* ReadPCXHeader (FILE* F, const char* Name) P->Compressed, Name); } /* We support: - * - one plane with either 1, 4 or 8 bits per pixel - * - three planes with 8 bits per pixel - * - four planes with 8 bits per pixel (does this exist?) - */ + ** - one plane with either 1, 4 or 8 bits per pixel + ** - three planes with 8 bits per pixel + ** - four planes with 8 bits per pixel (does this exist?) + **/ if (!((P->BPP == 1 && P->Planes == 1) || (P->BPP == 4 && P->Planes == 1) || (P->BPP == 8 && (P->Planes == 1 || P->Planes == 3 || P->Planes == 4)))) { @@ -420,8 +420,8 @@ Bitmap* ReadPCXFile (const Collection* A) } /* One plane means we have a palette which is either part of the header - * or follows. - */ + ** or follows. + **/ if (P->PalInfo == 0) { /* Create the monochrome palette */ From ebd13810307768b422626d91253018e515d8ba06 Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Thu, 29 Dec 2022 21:55:25 +0200 Subject: [PATCH 1946/2710] Use same style in comments --- src/sp65/pcx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sp65/pcx.c b/src/sp65/pcx.c index 18a60276d..e6d99b30b 100644 --- a/src/sp65/pcx.c +++ b/src/sp65/pcx.c @@ -156,7 +156,7 @@ static PCXHeader* ReadPCXHeader (FILE* F, const char* Name) ** - one plane with either 1, 4 or 8 bits per pixel ** - three planes with 8 bits per pixel ** - four planes with 8 bits per pixel (does this exist?) - **/ + */ if (!((P->BPP == 1 && P->Planes == 1) || (P->BPP == 4 && P->Planes == 1) || (P->BPP == 8 && (P->Planes == 1 || P->Planes == 3 || P->Planes == 4)))) { @@ -421,7 +421,7 @@ Bitmap* ReadPCXFile (const Collection* A) /* One plane means we have a palette which is either part of the header ** or follows. - **/ + */ if (P->PalInfo == 0) { /* Create the monochrome palette */ From aed6591b19262c10d13517f7049fad25d03c2d27 Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Fri, 30 Dec 2022 12:16:46 +0200 Subject: [PATCH 1947/2710] Add new method GetBitmapBPP as we need it for sprite math --- src/sp65/bitmap.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/sp65/bitmap.h b/src/sp65/bitmap.h index bf5e60559..e94ec71fd 100644 --- a/src/sp65/bitmap.h +++ b/src/sp65/bitmap.h @@ -75,6 +75,9 @@ struct Bitmap { unsigned Width; unsigned Height; + /* Bits per pixels */ + unsigned BPP; + /* Palette for indexed bitmap types, otherwise NULL */ Palette* Pal; @@ -179,6 +182,17 @@ INLINE unsigned GetBitmapColors (const Bitmap* B) # define GetBitmapColors(B) ((B)->Pal? (B)->Pal->Count : (1U << 24)) #endif +#if defined(HAVE_INLINE) +INLINE unsigned GetBitmapBPP (const Bitmap* B) +/* Get the bits per pixel of the converted sprite + */ +{ + return B->BPP; +} +#else +# define GetBitmapBPP(B) ((B)->BPP +#endif + /* End of bitmap.h */ From b4aa853e6fa15835a0f8cf862cd9639bc7e9dfb2 Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Fri, 30 Dec 2022 12:21:49 +0200 Subject: [PATCH 1948/2710] Add fixed Lynx sprite generation --- src/sp65/lynxsprite.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/sp65/lynxsprite.h b/src/sp65/lynxsprite.h index fe686ec8e..e700b4f46 100644 --- a/src/sp65/lynxsprite.h +++ b/src/sp65/lynxsprite.h @@ -54,9 +54,9 @@ StrBuf* GenLynxSprite (const Bitmap* B, const Collection* A); -/* Generate binary output in packed Lynx sprite format for the bitmap B. The output -** is stored in a string buffer (which is actually a dynamic char array) and -** returned. +/* Generate binary output in packed Lynx sprite format for the bitmap B. +** The output is stored in a string buffer (which is actually a dynamic +** char array) and returned. */ From f6b3bdda21f10b8078217a7679c9b36f441581ea Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Fri, 30 Dec 2022 12:36:49 +0200 Subject: [PATCH 1949/2710] Add fixed Lynx sprite generation --- src/sp65/lynxsprite.c | 785 ++++++++++++++++++++++++++++-------------- 1 file changed, 529 insertions(+), 256 deletions(-) diff --git a/src/sp65/lynxsprite.c b/src/sp65/lynxsprite.c index 4d7669faf..dca42b061 100644 --- a/src/sp65/lynxsprite.c +++ b/src/sp65/lynxsprite.c @@ -88,12 +88,18 @@ static enum Mode GetMode (const Collection* A) } -static unsigned GetActionPointX (const Collection* A) +static unsigned GetActionPointX (const Bitmap* B, const Collection* A) /* Return the sprite mode from the attribute collection A */ { /* Check for a action point x attribute */ const char* ActionPointX = GetAttrVal (A, "ax"); if (ActionPointX) { + if (strcmp (ActionPointX, "mid") == 0) { + return GetBitmapWidth (B) / 2; + } + if (strcmp (ActionPointX, "max") == 0) { + return GetBitmapWidth (B) - 1; + } return atoi(ActionPointX); } else { return 0; @@ -101,12 +107,18 @@ static unsigned GetActionPointX (const Collection* A) } -static unsigned GetActionPointY (const Collection* A) +static unsigned GetActionPointY (const Bitmap* B, const Collection* A) /* Return the sprite mode from the attribute collection A */ { /* Check for a action point y attribute */ const char* ActionPointY = GetAttrVal (A, "ay"); if (ActionPointY) { + if (strcmp (ActionPointY, "mid") == 0) { + return GetBitmapHeight (B) / 2; + } + if (strcmp (ActionPointY, "max") == 0) { + return GetBitmapHeight (B) - 1; + } return atoi(ActionPointY); } else { return 0; @@ -125,6 +137,124 @@ static unsigned GetEdgeIndex (const Collection* A) } } +static unsigned GetQuadrant (const Collection* A) +/* Return the sprite mode from the attribute collection A */ +{ + /* Get index for edge color in shaped mode */ + const char* Quadrant = GetAttrVal (A, "quadrant"); + if (Quadrant) { + return atoi(Quadrant); + } else { + return 0; + } +} + +static void OptimizePenpal (const Bitmap* B, char *PenPal) +/* Create an optimal Penpal */ +{ + char usage[16]; + unsigned I, J, Val; + + memset(usage, 0, sizeof(usage)); + for (J = 0; J < GetBitmapHeight (B); J++) { + for (I = 0; I < GetBitmapWidth (B); I++) { + Val = GetPixel (B, I, J).Index; + if (Val < 16) { + usage[Val] = 1; + } + } + } + J = 0; + for (I = 0; I < 16; I++) { + if (usage[I]) { + switch (I) { + case 0: + PenPal[J] = '0'; + break; + case 1: + PenPal[J] = '1'; + break; + case 2: + PenPal[J] = '2'; + break; + case 3: + PenPal[J] = '3'; + break; + case 4: + PenPal[J] = '4'; + break; + case 5: + PenPal[J] = '5'; + break; + case 6: + PenPal[J] = '6'; + break; + case 7: + PenPal[J] = '7'; + break; + case 8: + PenPal[J] = '8'; + break; + case 9: + PenPal[J] = '9'; + break; + case 10: + PenPal[J] = 'a'; + break; + case 11: + PenPal[J] = 'b'; + break; + case 12: + PenPal[J] = 'c'; + break; + case 13: + PenPal[J] = 'd'; + break; + case 14: + PenPal[J] = 'e'; + break; + case 15: + PenPal[J] = 'f'; + break; + } + J++; + } + } + while (J < 16) { + PenPal[J] = 0; + J++; + } + /* printf("Penpal %s\n", PenPal); */ +} + +static unsigned GetPenpal (const Bitmap* B, const Collection* A, char *PenPal) +/* Return the penpal from the attribute collection A */ +{ + const char* Pen = GetAttrVal (A, "pen"); + if (Pen) { + if (strcmp (Pen, "opt") == 0) { + /* So we need to optimize the penpal and colour depth */ + OptimizePenpal (B, PenPal); + } else { + strncpy(PenPal, Pen, 17); + } + return 1; + } + return 0; +} + +static unsigned GetBPP (const Collection* A) +/* Return the sprite depth from the attribute collection A */ +{ + /* Get index for edge color in shaped mode */ + const char* BPP = GetAttrVal (A, "bpp"); + if (BPP) { + return atoi(BPP); + } else { + return 0; + } +} + static char OutBuffer[512]; /* The maximum size is 508 pixels */ static unsigned char OutIndex; @@ -140,26 +270,16 @@ static void AssembleByte(unsigned bits, char val) return; } /* handle end of line */ - if (bits == 8) { + if (bits == 7) { if (bit_counter != 8) { byte <<= bit_counter; OutBuffer[OutIndex++] = byte; if (!OutIndex) { Error ("Sprite is too large for the Lynx"); } - if (byte & 0x1) { - OutBuffer[OutIndex++] = byte; - if (!OutIndex) { - Error ("Sprite is too large for the Lynx"); - } - } - } - return; - } - /* handle end of line for literal */ - if (bits == 7) { - if (bit_counter != 8) { - byte <<= bit_counter; + } else { + /* Add pad byte */ + byte = 0; OutBuffer[OutIndex++] = byte; if (!OutIndex) { Error ("Sprite is too large for the Lynx"); @@ -189,28 +309,78 @@ static void AssembleByte(unsigned bits, char val) } while (--bits); } -static unsigned char ChoosePackagingMode(signed len, signed index, char ColorBits, char LineBuffer[512]) +static unsigned char AnalyseNextChunks(signed *newlen, signed len, char data[32], char ColorBits) { - --len; - if (!len) { - return 0; + char longest = 1; + char prev = 255; + char count = 0; + char index = 0; + char lindex = 0; + int i; + int literal_cost; + int packed_cost; + + for (i = 0; i < len; i++) { + index = index + 1; + if (data[i] == prev) { + count = count + 1; + if (count >= longest) { + longest = count; + lindex = index - count; + } + } else { + prev = data[i]; + count = 1; + } } - if (LineBuffer[index] != LineBuffer[index + 1]) { - return 0; + if (longest == 1) { + if (len > 16) { + *newlen = 16; + } else { + *newlen = len; + } + return 'L'; } - if (ColorBits > 2) { - return 1; + if ((lindex > 0) && (lindex + longest > 15)) { + /* We cannot pack the stride in this packet */ + *newlen = lindex; + return 'A'; } - if (LineBuffer[index] != LineBuffer[index + 2]) { - return 0; + /* Cost till end of area */ + literal_cost = 5 + lindex * ColorBits + longest * ColorBits; + packed_cost = 5 + lindex * ColorBits + 5 + ColorBits; + if (packed_cost < literal_cost) { + if (lindex == 0) { + /* Use packed data */ + if (longest > 16) { + *newlen = 16; + } else { + *newlen = longest; + } + return 'P'; + } + /* We had a good find, but it was not at the start of the line */ + *newlen = lindex; + return 'A'; } - if (ColorBits > 1) { - return 1; + /* There is no point in packing - use literal */ + if (len > 16) { + *newlen = 16; + } else { + *newlen = len; } - if (LineBuffer[index] != LineBuffer[index + 3]) { - return 0; + return 'L'; +} + +static unsigned char GetNextChunk(signed *newlen, signed len, char data[32], char ColorBits) +{ + char oper = 'A'; + + while (oper == 'A') { + oper = AnalyseNextChunks(newlen, len, data, ColorBits); + len = *newlen; } - return 1; + return oper; /* The packet type is now P or L and the length is in newlen */ } static void WriteOutBuffer(StrBuf *D) @@ -235,27 +405,25 @@ static void WriteOutBuffer(StrBuf *D) static void encodeSprite(StrBuf *D, enum Mode M, char ColorBits, char ColorMask, char LineBuffer[512], int len, int LastOpaquePixel) { /* -** The data starts with a byte count. It tells the number of bytes on this -** line + 1. -** Special case is a count of 1. It will change to next quadrant. -** Other special case is 0. It will end the sprite. -** -** Ordinary data packet. These are bits in a stream. -** 1=literal 0=packed -** 4 bit count (+1) -** for literal you put "count" values -** for packed you repeat the value "count" times -** Never use packed mode for one pixel -** If the last bit on a line is 1 you need to add a byte of zeroes -** A sequence 00000 ends a scan line -** -** All data is high nybble first -*/ + * The data starts with a byte count. It tells the number of bytes on this + * line + 1. + * Special case is a count of 1. It will change to next quadrant. + * Other special case is 0. It will end the sprite. + * + * Ordinary data packet. These are bits in a stream. + * 1=literal 0=packed + * 4 bit count (+1) + * for literal you put "count" values + * for packed you repeat the value "count" times + * Never use packed mode for one pixel + * If the last bit on a line is in use you need to add a byte of zeroes + * A sequence 00000 ends a scan line + * + * All data is high nybble first + */ unsigned char V = 0; signed i; signed count; - unsigned char differ[16]; - unsigned char *d_ptr; AssembleByte(0, 0); switch (M) { @@ -270,100 +438,46 @@ static void encodeSprite(StrBuf *D, enum Mode M, char ColorBits, char ColorMask, WriteOutBuffer(D); break; case smPacked: + case smShaped: + if (M == smShaped) { + if (LastOpaquePixel > -1) { + if (LastOpaquePixel < len - 1) { + len = LastOpaquePixel + 1; + } + } else { + len = 0; + } + } i = 0; while (len) { - if (ChoosePackagingMode(len, i, ColorBits, LineBuffer)) { + signed analyselen; + analyselen = len; + if (analyselen > 32) { + analyselen = 32; + } + if (GetNextChunk(&count, analyselen, LineBuffer + i, ColorBits) == 'P') { /* Make runlength packet */ V = LineBuffer[i]; - ++i; - --len; - count = 0; - do { - ++count; - ++i; - --len; - } while (V == LineBuffer[i] && len && count != 15); - - AssembleByte(5, count); - AssembleByte(ColorBits, V); + i += count; + len -= count; + AssembleByte(5, count-1); + AssembleByte(ColorBits, V & ColorMask); } else { /* Make packed literal packet */ - d_ptr = differ; - V = LineBuffer[i++]; - *d_ptr++ = V; - --len; - count = 0; - while (ChoosePackagingMode(len, i, ColorBits, LineBuffer) == 0 && len && count != 15) { - V = LineBuffer[i++]; - *d_ptr++ = V; - ++count; - --len; - } - - AssembleByte(5, count | 0x10); - d_ptr = differ; + AssembleByte(5, (count-1) | 0x10); do { - AssembleByte(ColorBits, *d_ptr++); - } while (--count >= 0); - + AssembleByte(ColorBits, LineBuffer[i]); + i++; + len--; + } while (--count > 0); } } - AssembleByte(8, 0); + /* Force EOL for shaped? AssembleByte(5, 0); */ + AssembleByte(7, 0); /* Write the buffer to file */ WriteOutBuffer(D); break; - - case smShaped: - if (LastOpaquePixel > -1) { - if (LastOpaquePixel < len - 1) { - len = LastOpaquePixel + 1; - } - i = 0; - while (len) { - if (ChoosePackagingMode(len, i, ColorBits, LineBuffer)) { - /* Make runlength packet */ - V = LineBuffer[i]; - ++i; - --len; - count = 0; - do { - ++count; - ++i; - --len; - } while (V == LineBuffer[i] && len && count != 15); - - AssembleByte(5, count); - AssembleByte(ColorBits, V); - - } else { - /* Make packed literal packet */ - d_ptr = differ; - V = LineBuffer[i++]; - *d_ptr++ = V; - --len; - count = 0; - while (ChoosePackagingMode(len, i, ColorBits, LineBuffer) == 0 && len && count != 15) { - V = LineBuffer[i++]; - *d_ptr++ = V; - ++count; - --len; - } - - AssembleByte(5, count | 0x10); - d_ptr = differ; - do { - AssembleByte(ColorBits, *d_ptr++); - } while (--count >= 0); - - } - } - AssembleByte(5, 0); - AssembleByte(8, 0); - /* Write the buffer to file */ - WriteOutBuffer(D); - } - break; } } @@ -373,10 +487,10 @@ StrBuf* GenLynxSprite (const Bitmap* B, const Collection* A) ** returned. ** ** The Lynx will draw 4 quadrants: -** - Down right -** - Up right -** - Up left -** - Down left +** 0 - Down right +** 1 - Up right +** 2 - Up left +** 3 - Down left ** ** The sprite will end with a byte 0. */ @@ -388,13 +502,24 @@ StrBuf* GenLynxSprite (const Bitmap* B, const Collection* A) char ColorBits; char ColorMask; char EdgeIndex; + char Quadrant; + char quad; + char BPP; + /* The default mapping is 1:1 plus extra colours become 0 */ + char Map[17] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0}; + signed PenColors; + char PenPal[18]; + signed Val; /* Get EdgeIndex */ EdgeIndex = GetEdgeIndex (A); + /* Get Quadrant for starting the draw process */ + Quadrant = GetQuadrant (A) & 3; + /* Action point of the sprite */ - OX = GetActionPointX (A); - OY = GetActionPointY (A); + OX = GetActionPointX (B, A); + OY = GetActionPointY (B, A); if (OX >= GetBitmapWidth (B)) { Error ("Action point X cannot be larger than bitmap width"); } @@ -410,145 +535,293 @@ StrBuf* GenLynxSprite (const Bitmap* B, const Collection* A) /* Get the sprite mode */ M = GetMode (A); - /* Now check if bitmap indexes are ok */ - if (GetBitmapColors (B) > 16) { - Error ("Too many colors for a Lynx sprite"); + /* Now check how to do the mapping */ + if (GetPenpal (B, A, &PenPal[0])) { + signed I; + + /* Modify the map by content of PenPal */ + PenColors = strlen(PenPal); + for (I = 0; I < PenColors; I++) { + switch (PenPal[I]) { + case '0': + Map[0] = I; + break; + case '1': + Map[1] = I; + break; + case '2': + Map[2] = I; + break; + case '3': + Map[3] = I; + break; + case '4': + Map[4] = I; + break; + case '5': + Map[5] = I; + break; + case '6': + Map[6] = I; + break; + case '7': + Map[7] = I; + break; + case '8': + Map[8] = I; + break; + case '9': + Map[9] = I; + break; + case 'a': + case 'A': + Map[10] = I; + break; + case 'b': + case 'B': + Map[11] = I; + break; + case 'c': + case 'C': + Map[12] = I; + break; + case 'd': + case 'D': + Map[13] = I; + break; + case 'e': + case 'E': + Map[14] = I; + break; + case 'f': + case 'F': + Map[15] = I; + break; + /* The X is reserved as transparency. This allows for shaped sprites */ + case 'x': + case 'X': + Map[16] = I; + break; + } + } + } else { + PenColors = GetBitmapColors (B); } ColorBits = 4; - ColorMask = 0x0f; - if (GetBitmapColors (B) < 9) { + if (PenColors < 9) { ColorBits = 3; - ColorMask = 0x07; } - if (GetBitmapColors (B) < 5) { + if (PenColors < 5) { ColorBits = 2; - ColorMask = 0x03; } - if (GetBitmapColors (B) < 3) { + if (PenColors < 3) { ColorBits = 1; - ColorMask = 0x01; } + BPP = GetBPP (A); + if (BPP > 0) { + ColorBits = BPP; + } + switch (ColorBits) { + case 1: + ColorMask = 0x01; + break; + case 2: + ColorMask = 0x03; + break; + case 3: + ColorMask = 0x07; + break; + default: + case 4: + ColorMask = 0x0f; + break; + } + /* B->BPP = ColorBits; */ /* Create the output buffer and resize it to the required size. */ D = NewStrBuf (); SB_Realloc (D, 63); - /* Convert the image for quadrant bottom right */ - for (Y = OY; Y < (signed)GetBitmapHeight (B); ++Y) { - signed i = 0; - signed LastOpaquePixel = -1; - char LineBuffer[512]; /* The maximum size is 508 pixels */ + for (quad = 0; quad < 4; quad++) { + switch ((Quadrant + quad) & 3) { + case 0: + /* Convert the image for quadrant bottom right */ + for (Y = OY; Y < (signed)GetBitmapHeight (B); ++Y) { + signed i = 0; + signed LastOpaquePixel = -1; + char LineBuffer[512]; /* The maximum size is 508 pixels */ - /* Fill the LineBuffer for easier optimisation */ - for (X = OX; X < (signed)GetBitmapWidth (B); ++X) { + /* Fill the LineBuffer for easier optimisation */ + for (X = OX; X < (signed)GetBitmapWidth (B); ++X) { + /* Fetch next bit into byte buffer */ + Val = GetPixel (B, X, Y).Index; + if (Val > 16) Val = 16; + LineBuffer[i] = Map[Val] & ColorMask; - /* Fetch next bit into byte buffer */ - LineBuffer[i] = GetPixel (B, X, Y).Index & ColorMask; + if (Val != EdgeIndex) { + LastOpaquePixel = i; + } + ++i; + } - if (LineBuffer[i] != EdgeIndex) { - LastOpaquePixel = i; - } - ++i; - } + encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); + } + if ((OY == 0) && (OX == 0)) { + /* Trivial case only one quadrant */ - encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); + /* Mark end of sprite */ + SB_AppendChar (D, 0); + + /* Return the converted bitmap */ + return D; + } + if ((quad == 1) && (OY == 0)) { + /* Special case only two quadrants */ + + /* Mark end of sprite */ + SB_AppendChar (D, 0); + + /* Return the converted bitmap */ + return D; + } + break; + case 1: + /* Convert the image for quadrant top right */ + for (Y = OY - 1; Y >= 0; --Y) { + signed i = 0; + signed LastOpaquePixel = -1; + char LineBuffer[512]; /* The maximum size is 508 pixels */ + + /* Fill the LineBuffer for easier optimisation */ + for (X = OX; X < (signed)GetBitmapWidth (B); ++X) { + /* Fetch next bit into byte buffer */ + Val = GetPixel (B, X, Y).Index; + if (Val > 16) Val = 16; + + LineBuffer[i] = Map[Val] & ColorMask; + + if (Val != EdgeIndex) { + LastOpaquePixel = i; + } + ++i; + } + + encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); + } + + if ((OY == GetBitmapHeight (B) - 1) && (OX == 0)) { + /* Trivial case only one quadrant */ + + /* Mark end of sprite */ + SB_AppendChar (D, 0); + + /* Return the converted bitmap */ + return D; + } + if ((quad == 1) && (OX == 0)) { + /* Special case only two quadrants */ + + /* Mark end of sprite */ + SB_AppendChar (D, 0); + + /* Return the converted bitmap */ + return D; + } + break; + case 2: + /* Convert the image for quadrant top left */ + for (Y = OY - 1; Y >= 0; --Y) { + signed i = 0; + signed LastOpaquePixel = -1; + char LineBuffer[512]; /* The maximum size is 508 pixels */ + + /* Fill the LineBuffer for easier optimisation */ + for (X = OX - 1; X >= 0; --X) { + /* Fetch next bit into byte buffer */ + Val = GetPixel (B, X, Y).Index; + if (Val > 16) Val = 16; + + LineBuffer[i] = Map[Val] & ColorMask; + + if (Val != EdgeIndex) { + LastOpaquePixel = i; + } + ++i; + } + + encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); + } + if ((OY == GetBitmapHeight (B) - 1) && (OX == GetBitmapWidth (B) - 1)) { + /* Trivial case only one quadrant */ + + /* Mark end of sprite */ + SB_AppendChar (D, 0); + + /* Return the converted bitmap */ + return D; + } + if ((quad == 1) && (OY == GetBitmapHeight (B) - 1)) { + /* Special case only two quadrants */ + + /* Mark end of sprite */ + SB_AppendChar (D, 0); + + /* Return the converted bitmap */ + return D; + } + break; + case 3: + /* Convert the image for quadrant bottom left */ + for (Y = OY; Y < (signed)GetBitmapHeight (B); ++Y) { + signed i = 0; + signed LastOpaquePixel = -1; + char LineBuffer[512]; /* The maximum size is 508 pixels */ + + /* Fill the LineBuffer for easier optimisation */ + for (X = OX - 1; X >= 0; --X) { + /* Fetch next bit into byte buffer */ + Val = GetPixel (B, X, Y).Index; + if (Val > 16) Val = 16; + + LineBuffer[i] = Map[Val] & ColorMask; + + if (Val != EdgeIndex) { + LastOpaquePixel = i; + } + ++i; + } + + encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); + } + if ((OY == 0) && (OX == GetBitmapWidth (B) - 1)) { + /* Trivial case only one quadrant */ + + /* Mark end of sprite */ + SB_AppendChar (D, 0); + + /* Return the converted bitmap */ + return D; + } + if ((quad == 1) && (OX == GetBitmapWidth (B) - 1)) { + /* Special case only two quadrants */ + + /* Mark end of sprite */ + SB_AppendChar (D, 0); + + /* Return the converted bitmap */ + return D; + } + break; + } + if (quad < 3) { + /* Next quadrant */ + SB_AppendChar (D, 1); + } else { + /* End sprite */ + SB_AppendChar (D, 0); + } } - if ((OY == 0) && (OX == 0)) { - /* Trivial case only one quadrant */ - - /* Mark end of sprite */ - SB_AppendChar (D, 0); - - /* Return the converted bitmap */ - return D; - } - - /* Next quadrant */ - SB_AppendChar (D, 1); - - /* Convert the image for quadrant top right */ - for (Y = OY - 1; Y >= 0; --Y) { - signed i = 0; - signed LastOpaquePixel = -1; - char LineBuffer[512]; /* The maximum size is 508 pixels */ - - /* Fill the LineBuffer for easier optimisation */ - for (X = OX; X < (signed)GetBitmapWidth (B); ++X) { - - /* Fetch next bit into byte buffer */ - LineBuffer[i] = GetPixel (B, X, Y).Index & ColorMask; - - if (LineBuffer[i] != EdgeIndex) { - LastOpaquePixel = i; - } - ++i; - } - - encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); - } - - if (OX == 0) { - /* Special case only two quadrants */ - - /* Mark end of sprite */ - SB_AppendChar (D, 0); - - /* Return the converted bitmap */ - return D; - } - - /* Next quadrant */ - SB_AppendChar (D, 1); - - /* Convert the image for quadrant top left */ - for (Y = OY - 1; Y >= 0; --Y) { - signed i = 0; - signed LastOpaquePixel = -1; - char LineBuffer[512]; /* The maximum size is 508 pixels */ - - /* Fill the LineBuffer for easier optimisation */ - for (X = OX - 1; X >= 0; --X) { - - /* Fetch next bit into byte buffer */ - LineBuffer[i] = GetPixel (B, X, Y).Index & ColorMask; - - if (LineBuffer[i] != EdgeIndex) { - LastOpaquePixel = i; - } - ++i; - } - - encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); - } - - /* Next quadrant */ - SB_AppendChar (D, 1); - - /* Convert the image for quadrant bottom left */ - for (Y = OY; Y < (signed)GetBitmapHeight (B); ++Y) { - signed i = 0; - signed LastOpaquePixel = -1; - char LineBuffer[512]; /* The maximum size is 508 pixels */ - - /* Fill the LineBuffer for easier optimisation */ - for (X = OX - 1; X >= 0; --X) { - - /* Fetch next bit into byte buffer */ - LineBuffer[i] = GetPixel (B, X, Y).Index & ColorMask; - - if (LineBuffer[i] != EdgeIndex) { - LastOpaquePixel = i; - } - ++i; - } - - encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); - } - - /* End sprite */ - SB_AppendChar (D, 0); - /* Return the converted bitmap */ return D; } From c2e9e5961d898e6f0237d40e70853e16d3deac4c Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Fri, 30 Dec 2022 12:57:50 +0200 Subject: [PATCH 1950/2710] Add fixed Lynx sprite generation --- src/sp65/lynxsprite.c | 458 +++++++++++++++++++++--------------------- 1 file changed, 229 insertions(+), 229 deletions(-) diff --git a/src/sp65/lynxsprite.c b/src/sp65/lynxsprite.c index dca42b061..566edacbe 100644 --- a/src/sp65/lynxsprite.c +++ b/src/sp65/lynxsprite.c @@ -96,10 +96,10 @@ static unsigned GetActionPointX (const Bitmap* B, const Collection* A) if (ActionPointX) { if (strcmp (ActionPointX, "mid") == 0) { return GetBitmapWidth (B) / 2; - } + } if (strcmp (ActionPointX, "max") == 0) { return GetBitmapWidth (B) - 1; - } + } return atoi(ActionPointX); } else { return 0; @@ -115,10 +115,10 @@ static unsigned GetActionPointY (const Bitmap* B, const Collection* A) if (ActionPointY) { if (strcmp (ActionPointY, "mid") == 0) { return GetBitmapHeight (B) / 2; - } + } if (strcmp (ActionPointY, "max") == 0) { return GetBitmapHeight (B) - 1; - } + } return atoi(ActionPointY); } else { return 0; @@ -235,10 +235,10 @@ static unsigned GetPenpal (const Bitmap* B, const Collection* A, char *PenPal) if (strcmp (Pen, "opt") == 0) { /* So we need to optimize the penpal and colour depth */ OptimizePenpal (B, PenPal); - } else { - strncpy(PenPal, Pen, 17); + } else { + strncpy(PenPal, Pen, 17); } - return 1; + return 1; } return 0; } @@ -322,52 +322,52 @@ static unsigned char AnalyseNextChunks(signed *newlen, signed len, char data[32] for (i = 0; i < len; i++) { index = index + 1; - if (data[i] == prev) { + if (data[i] == prev) { count = count + 1; - if (count >= longest) { + if (count >= longest) { longest = count; - lindex = index - count; - } - } else { - prev = data[i]; - count = 1; - } + lindex = index - count; + } + } else { + prev = data[i]; + count = 1; + } } if (longest == 1) { - if (len > 16) { - *newlen = 16; - } else { - *newlen = len; - } - return 'L'; + if (len > 16) { + *newlen = 16; + } else { + *newlen = len; + } + return 'L'; } if ((lindex > 0) && (lindex + longest > 15)) { /* We cannot pack the stride in this packet */ *newlen = lindex; - return 'A'; + return 'A'; } /* Cost till end of area */ literal_cost = 5 + lindex * ColorBits + longest * ColorBits; packed_cost = 5 + lindex * ColorBits + 5 + ColorBits; if (packed_cost < literal_cost) { if (lindex == 0) { - /* Use packed data */ - if (longest > 16) { - *newlen = 16; - } else { - *newlen = longest; + /* Use packed data */ + if (longest > 16) { + *newlen = 16; + } else { + *newlen = longest; } - return 'P'; - } - /* We had a good find, but it was not at the start of the line */ - *newlen = lindex; - return 'A'; + return 'P'; + } + /* We had a good find, but it was not at the start of the line */ + *newlen = lindex; + return 'A'; } /* There is no point in packing - use literal */ if (len > 16) { - *newlen = 16; + *newlen = 16; } else { - *newlen = len; + *newlen = len; } return 'L'; } @@ -378,7 +378,7 @@ static unsigned char GetNextChunk(signed *newlen, signed len, char data[32], cha while (oper == 'A') { oper = AnalyseNextChunks(newlen, len, data, ColorBits); - len = *newlen; + len = *newlen; } return oper; /* The packet type is now P or L and the length is in newlen */ } @@ -439,27 +439,27 @@ static void encodeSprite(StrBuf *D, enum Mode M, char ColorBits, char ColorMask, break; case smPacked: case smShaped: - if (M == smShaped) { + if (M == smShaped) { if (LastOpaquePixel > -1) { if (LastOpaquePixel < len - 1) { len = LastOpaquePixel + 1; - } + } } else { len = 0; } } i = 0; while (len) { - signed analyselen; - analyselen = len; - if (analyselen > 32) { + signed analyselen; + analyselen = len; + if (analyselen > 32) { analyselen = 32; - } + } if (GetNextChunk(&count, analyselen, LineBuffer + i, ColorBits) == 'P') { /* Make runlength packet */ V = LineBuffer[i]; - i += count; - len -= count; + i += count; + len -= count; AssembleByte(5, count-1); AssembleByte(ColorBits, V & ColorMask); @@ -468,8 +468,8 @@ static void encodeSprite(StrBuf *D, enum Mode M, char ColorBits, char ColorMask, AssembleByte(5, (count-1) | 0x10); do { AssembleByte(ColorBits, LineBuffer[i]); - i++; - len--; + i++; + len--; } while (--count > 0); } } @@ -537,75 +537,75 @@ StrBuf* GenLynxSprite (const Bitmap* B, const Collection* A) /* Now check how to do the mapping */ if (GetPenpal (B, A, &PenPal[0])) { - signed I; + signed I; - /* Modify the map by content of PenPal */ - PenColors = strlen(PenPal); - for (I = 0; I < PenColors; I++) { - switch (PenPal[I]) { + /* Modify the map by content of PenPal */ + PenColors = strlen(PenPal); + for (I = 0; I < PenColors; I++) { + switch (PenPal[I]) { case '0': - Map[0] = I; - break; + Map[0] = I; + break; case '1': - Map[1] = I; - break; + Map[1] = I; + break; case '2': - Map[2] = I; - break; + Map[2] = I; + break; case '3': - Map[3] = I; - break; + Map[3] = I; + break; case '4': - Map[4] = I; - break; + Map[4] = I; + break; case '5': - Map[5] = I; - break; + Map[5] = I; + break; case '6': - Map[6] = I; - break; + Map[6] = I; + break; case '7': - Map[7] = I; - break; + Map[7] = I; + break; case '8': - Map[8] = I; - break; + Map[8] = I; + break; case '9': - Map[9] = I; - break; + Map[9] = I; + break; case 'a': case 'A': - Map[10] = I; - break; + Map[10] = I; + break; case 'b': case 'B': - Map[11] = I; - break; + Map[11] = I; + break; case 'c': case 'C': - Map[12] = I; - break; + Map[12] = I; + break; case 'd': case 'D': - Map[13] = I; - break; + Map[13] = I; + break; case 'e': case 'E': - Map[14] = I; - break; + Map[14] = I; + break; case 'f': case 'F': - Map[15] = I; - break; - /* The X is reserved as transparency. This allows for shaped sprites */ + Map[15] = I; + break; + /* The X is reserved as transparency. This allows for shaped sprites */ case 'x': case 'X': - Map[16] = I; - break; - } - } + Map[16] = I; + break; + } + } } else { - PenColors = GetBitmapColors (B); + PenColors = GetBitmapColors (B); } ColorBits = 4; if (PenColors < 9) { @@ -643,183 +643,183 @@ StrBuf* GenLynxSprite (const Bitmap* B, const Collection* A) SB_Realloc (D, 63); for (quad = 0; quad < 4; quad++) { - switch ((Quadrant + quad) & 3) { - case 0: - /* Convert the image for quadrant bottom right */ - for (Y = OY; Y < (signed)GetBitmapHeight (B); ++Y) { - signed i = 0; - signed LastOpaquePixel = -1; - char LineBuffer[512]; /* The maximum size is 508 pixels */ + switch ((Quadrant + quad) & 3) { + case 0: + /* Convert the image for quadrant bottom right */ + for (Y = OY; Y < (signed)GetBitmapHeight (B); ++Y) { + signed i = 0; + signed LastOpaquePixel = -1; + char LineBuffer[512]; /* The maximum size is 508 pixels */ - /* Fill the LineBuffer for easier optimisation */ - for (X = OX; X < (signed)GetBitmapWidth (B); ++X) { - /* Fetch next bit into byte buffer */ - Val = GetPixel (B, X, Y).Index; - if (Val > 16) Val = 16; - LineBuffer[i] = Map[Val] & ColorMask; + /* Fill the LineBuffer for easier optimisation */ + for (X = OX; X < (signed)GetBitmapWidth (B); ++X) { + /* Fetch next bit into byte buffer */ + Val = GetPixel (B, X, Y).Index; + if (Val > 16) Val = 16; + LineBuffer[i] = Map[Val] & ColorMask; - if (Val != EdgeIndex) { - LastOpaquePixel = i; - } - ++i; - } + if (Val != EdgeIndex) { + LastOpaquePixel = i; + } + ++i; + } - encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); - } - if ((OY == 0) && (OX == 0)) { - /* Trivial case only one quadrant */ + encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); + } + if ((OY == 0) && (OX == 0)) { + /* Trivial case only one quadrant */ - /* Mark end of sprite */ - SB_AppendChar (D, 0); + /* Mark end of sprite */ + SB_AppendChar (D, 0); - /* Return the converted bitmap */ - return D; - } - if ((quad == 1) && (OY == 0)) { - /* Special case only two quadrants */ + /* Return the converted bitmap */ + return D; + } + if ((quad == 1) && (OY == 0)) { + /* Special case only two quadrants */ - /* Mark end of sprite */ - SB_AppendChar (D, 0); + /* Mark end of sprite */ + SB_AppendChar (D, 0); - /* Return the converted bitmap */ - return D; - } - break; - case 1: - /* Convert the image for quadrant top right */ - for (Y = OY - 1; Y >= 0; --Y) { - signed i = 0; - signed LastOpaquePixel = -1; - char LineBuffer[512]; /* The maximum size is 508 pixels */ + /* Return the converted bitmap */ + return D; + } + break; + case 1: + /* Convert the image for quadrant top right */ + for (Y = OY - 1; Y >= 0; --Y) { + signed i = 0; + signed LastOpaquePixel = -1; + char LineBuffer[512]; /* The maximum size is 508 pixels */ - /* Fill the LineBuffer for easier optimisation */ - for (X = OX; X < (signed)GetBitmapWidth (B); ++X) { - /* Fetch next bit into byte buffer */ - Val = GetPixel (B, X, Y).Index; - if (Val > 16) Val = 16; + /* Fill the LineBuffer for easier optimisation */ + for (X = OX; X < (signed)GetBitmapWidth (B); ++X) { + /* Fetch next bit into byte buffer */ + Val = GetPixel (B, X, Y).Index; + if (Val > 16) Val = 16; - LineBuffer[i] = Map[Val] & ColorMask; + LineBuffer[i] = Map[Val] & ColorMask; - if (Val != EdgeIndex) { - LastOpaquePixel = i; - } - ++i; - } + if (Val != EdgeIndex) { + LastOpaquePixel = i; + } + ++i; + } - encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); - } + encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); + } - if ((OY == GetBitmapHeight (B) - 1) && (OX == 0)) { - /* Trivial case only one quadrant */ + if ((OY == GetBitmapHeight (B) - 1) && (OX == 0)) { + /* Trivial case only one quadrant */ - /* Mark end of sprite */ - SB_AppendChar (D, 0); + /* Mark end of sprite */ + SB_AppendChar (D, 0); - /* Return the converted bitmap */ - return D; - } - if ((quad == 1) && (OX == 0)) { - /* Special case only two quadrants */ + /* Return the converted bitmap */ + return D; + } + if ((quad == 1) && (OX == 0)) { + /* Special case only two quadrants */ - /* Mark end of sprite */ - SB_AppendChar (D, 0); + /* Mark end of sprite */ + SB_AppendChar (D, 0); - /* Return the converted bitmap */ - return D; - } - break; - case 2: - /* Convert the image for quadrant top left */ - for (Y = OY - 1; Y >= 0; --Y) { - signed i = 0; - signed LastOpaquePixel = -1; - char LineBuffer[512]; /* The maximum size is 508 pixels */ + /* Return the converted bitmap */ + return D; + } + break; + case 2: + /* Convert the image for quadrant top left */ + for (Y = OY - 1; Y >= 0; --Y) { + signed i = 0; + signed LastOpaquePixel = -1; + char LineBuffer[512]; /* The maximum size is 508 pixels */ - /* Fill the LineBuffer for easier optimisation */ - for (X = OX - 1; X >= 0; --X) { - /* Fetch next bit into byte buffer */ - Val = GetPixel (B, X, Y).Index; - if (Val > 16) Val = 16; + /* Fill the LineBuffer for easier optimisation */ + for (X = OX - 1; X >= 0; --X) { + /* Fetch next bit into byte buffer */ + Val = GetPixel (B, X, Y).Index; + if (Val > 16) Val = 16; - LineBuffer[i] = Map[Val] & ColorMask; + LineBuffer[i] = Map[Val] & ColorMask; - if (Val != EdgeIndex) { - LastOpaquePixel = i; - } - ++i; - } + if (Val != EdgeIndex) { + LastOpaquePixel = i; + } + ++i; + } - encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); - } - if ((OY == GetBitmapHeight (B) - 1) && (OX == GetBitmapWidth (B) - 1)) { - /* Trivial case only one quadrant */ + encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); + } + if ((OY == GetBitmapHeight (B) - 1) && (OX == GetBitmapWidth (B) - 1)) { + /* Trivial case only one quadrant */ - /* Mark end of sprite */ - SB_AppendChar (D, 0); + /* Mark end of sprite */ + SB_AppendChar (D, 0); - /* Return the converted bitmap */ - return D; - } - if ((quad == 1) && (OY == GetBitmapHeight (B) - 1)) { - /* Special case only two quadrants */ + /* Return the converted bitmap */ + return D; + } + if ((quad == 1) && (OY == GetBitmapHeight (B) - 1)) { + /* Special case only two quadrants */ - /* Mark end of sprite */ - SB_AppendChar (D, 0); + /* Mark end of sprite */ + SB_AppendChar (D, 0); - /* Return the converted bitmap */ - return D; - } - break; - case 3: - /* Convert the image for quadrant bottom left */ - for (Y = OY; Y < (signed)GetBitmapHeight (B); ++Y) { - signed i = 0; - signed LastOpaquePixel = -1; - char LineBuffer[512]; /* The maximum size is 508 pixels */ + /* Return the converted bitmap */ + return D; + } + break; + case 3: + /* Convert the image for quadrant bottom left */ + for (Y = OY; Y < (signed)GetBitmapHeight (B); ++Y) { + signed i = 0; + signed LastOpaquePixel = -1; + char LineBuffer[512]; /* The maximum size is 508 pixels */ - /* Fill the LineBuffer for easier optimisation */ - for (X = OX - 1; X >= 0; --X) { - /* Fetch next bit into byte buffer */ - Val = GetPixel (B, X, Y).Index; - if (Val > 16) Val = 16; + /* Fill the LineBuffer for easier optimisation */ + for (X = OX - 1; X >= 0; --X) { + /* Fetch next bit into byte buffer */ + Val = GetPixel (B, X, Y).Index; + if (Val > 16) Val = 16; - LineBuffer[i] = Map[Val] & ColorMask; + LineBuffer[i] = Map[Val] & ColorMask; - if (Val != EdgeIndex) { - LastOpaquePixel = i; - } - ++i; - } + if (Val != EdgeIndex) { + LastOpaquePixel = i; + } + ++i; + } - encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); - } - if ((OY == 0) && (OX == GetBitmapWidth (B) - 1)) { - /* Trivial case only one quadrant */ + encodeSprite(D, M, ColorBits, ColorMask, LineBuffer, i, LastOpaquePixel); + } + if ((OY == 0) && (OX == GetBitmapWidth (B) - 1)) { + /* Trivial case only one quadrant */ - /* Mark end of sprite */ - SB_AppendChar (D, 0); + /* Mark end of sprite */ + SB_AppendChar (D, 0); - /* Return the converted bitmap */ - return D; - } - if ((quad == 1) && (OX == GetBitmapWidth (B) - 1)) { - /* Special case only two quadrants */ + /* Return the converted bitmap */ + return D; + } + if ((quad == 1) && (OX == GetBitmapWidth (B) - 1)) { + /* Special case only two quadrants */ - /* Mark end of sprite */ - SB_AppendChar (D, 0); + /* Mark end of sprite */ + SB_AppendChar (D, 0); - /* Return the converted bitmap */ - return D; - } - break; - } - if (quad < 3) { + /* Return the converted bitmap */ + return D; + } + break; + } + if (quad < 3) { /* Next quadrant */ SB_AppendChar (D, 1); - } else { + } else { /* End sprite */ SB_AppendChar (D, 0); - } + } } /* Return the converted bitmap */ From 4117e94ed59e9a8c47f05eddad27bd746fba6d42 Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Fri, 30 Dec 2022 14:44:18 +0200 Subject: [PATCH 1951/2710] Add palette extraction functions --- src/sp65/lynxpalette.c | 90 +++++++++++++++++++++++++++++++++++ src/sp65/lynxpalette.h | 66 ++++++++++++++++++++++++++ src/sp65/main.c | 64 +++++++++++++++++++++++-- src/sp65/palconv.c | 104 +++++++++++++++++++++++++++++++++++++++++ src/sp65/palconv.h | 72 ++++++++++++++++++++++++++++ 5 files changed, 391 insertions(+), 5 deletions(-) create mode 100644 src/sp65/lynxpalette.c create mode 100644 src/sp65/lynxpalette.h create mode 100644 src/sp65/palconv.c create mode 100644 src/sp65/palconv.h diff --git a/src/sp65/lynxpalette.c b/src/sp65/lynxpalette.c new file mode 100644 index 000000000..e822fa5ee --- /dev/null +++ b/src/sp65/lynxpalette.c @@ -0,0 +1,90 @@ +/*****************************************************************************/ +/* */ +/* lynxpalette.c */ +/* */ +/* Lynx palette backend for the sp65 sprite and bitmap utility */ +/* */ +/* */ +/* */ +/* (C) 2022, Karri Kaksonen */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#include <stdlib.h> + +/* common */ +#include "attrib.h" +#include "print.h" + +/* sp65 */ +#include "attr.h" +#include "error.h" +#include "palette.h" +#include "lynxpalette.h" + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + +StrBuf* GenLynxPalette (const Bitmap* B, const Collection* A) +/* Generate binary output in Lynx palette format for the bitmap B. The output +** is stored in a string buffer (which is actually a dynamic char array) and +** returned. +** +*/ +{ + StrBuf* D; + Palette* P; + unsigned I; + + P = GetBitmapPalette (B); + D = NewStrBuf (); + for (I = 0; I < 16; ++I) { + + /* Get the color entry */ + const Color* C = P->Entries + I; + + /* Add the green component */ + SB_AppendChar (D, C->G >> 4); + } + for (I = 0; I < 16; ++I) { + + /* Get the color entry */ + const Color* C = P->Entries + I; + + /* Add the blue,red component */ + SB_AppendChar (D, (C->B & 0xF0) | (C->R >> 4)); + } + + /* Return the converted palette */ + return D; +} + diff --git a/src/sp65/lynxpalette.h b/src/sp65/lynxpalette.h new file mode 100644 index 000000000..3ba4526fb --- /dev/null +++ b/src/sp65/lynxpalette.h @@ -0,0 +1,66 @@ +/*****************************************************************************/ +/* */ +/* lynxpalette.h */ +/* */ +/* Lynx palette format backend for the sp65 sprite and bitmap utility */ +/* */ +/* */ +/* */ +/* (C) 2022, Karri Kaksonen */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef LYNXPALETTE_H +#define LYNXPALETTE_H + + + +/* common */ +#include "coll.h" +#include "strbuf.h" + +/* sp65 */ +#include "bitmap.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +StrBuf* GenLynxPalette (const Bitmap* B, const Collection* A); +/* Generate binary output in Lynx palette format for the bitmap B. The output + * is stored in a string buffer (which is actually a dynamic char array) and + * returned. + */ + + + +/* End of lynxpalette.h */ + +#endif + + + diff --git a/src/sp65/main.c b/src/sp65/main.c index 1dda696d6..62dec0952 100644 --- a/src/sp65/main.c +++ b/src/sp65/main.c @@ -1,6 +1,6 @@ /*****************************************************************************/ /* */ -/* main.c */ +/* main.c */ /* */ /* Main program of the sp65 sprite and bitmap utility */ /* */ @@ -47,6 +47,7 @@ /* sp65 */ #include "attr.h" #include "convert.h" +#include "palconv.h" #include "error.h" #include "input.h" #include "output.h" @@ -68,10 +69,13 @@ static Bitmap* C; /* Output data from convertion */ static StrBuf* D; +/* Output data from palconv */ +static StrBuf* E; + /*****************************************************************************/ -/* Code */ +/* Code */ /*****************************************************************************/ @@ -88,11 +92,11 @@ static void Usage (void) " -lc\t\t\t\tList all possible conversions\n" " -r file[,attrlist]\t\tRead an input file\n" " -v\t\t\t\tIncrease verbosity\n" + " -p tgt,file[,attrlist]\t\tWrite the palette to a file\n" " -w file[,attrlist]\t\tWrite the output to a file\n" "\n" "Long options:\n" " --convert-to fmt[,attrlist]\tConvert into target format\n" - " --dump-palette\t\tDump palette as table\n" " --help\t\t\tHelp (this text)\n" " --list-conversions\t\tList all possible conversions\n" " --pop\t\t\t\tRestore the original loaded image\n" @@ -100,6 +104,7 @@ static void Usage (void) " --slice x,y,w,h\t\tGenerate a slice from the loaded bitmap\n" " --verbose\t\t\tIncrease verbosity\n" " --version\t\t\tPrint the version number and exit\n" + " --palette tgt,file[,attrlist]\tWrite the palette to a file\n" " --write file[,attrlist]\tWrite the output to a file\n", ProgName); } @@ -137,6 +142,21 @@ static void SetOutputData (StrBuf* N) } +static void SetPalOutputData (StrBuf* N) +/* Delete the old output data and replace it by the given one. The new one +** may be NULL to clear it. +*/ +{ + /* Delete the old output data */ + if (E != 0) { + FreeStrBuf (E); + } + + /* Set the new one */ + E = N; +} + + static void OptConvertTo (const char* Opt attribute ((unused)), const char* Arg) /* Convert the bitmap into a target format */ @@ -282,15 +302,45 @@ static void OptVerbose (const char* Opt attribute ((unused)), static void OptVersion (const char* Opt attribute ((unused)), - const char* Arg attribute ((unused))) + const char* Arg attribute ((unused))) /* Print the assembler version */ { fprintf (stderr, "%s V%s\n", ProgName, GetVersionAsString ()); - exit(EXIT_SUCCESS); } +static void OptPalette (const char* Opt attribute ((unused)), const char* Arg) +/* Write an output file */ +{ + static const char* const NameList[] = { + "target", "name", "format" + }; + + + /* Parse the argument */ + Collection* A = ParseAttrList (Arg, NameList, 2); + + /* We must have a bitmap ... */ + if (C == 0) { + Error ("No bitmap"); + } + + /* ... which must be indexed */ + if (!BitmapIsIndexed (C)) { + Error ("Current bitmap is not indexed"); + } + + /* Convert the palette */ + SetPalOutputData (PaletteTo (C, A)); + + /* Write the file */ + WriteOutputFile (E, A, C); + + /* Delete the attribute list */ + FreeAttrList (A); +} + static void OptWrite (const char* Opt attribute ((unused)), const char* Arg) /* Write an output file */ { @@ -381,6 +431,10 @@ int main (int argc, char* argv []) OptVerbose (Arg, 0); break; + case 'p': + OptPalette (Arg, GetArg (&I, 2)); + break; + case 'w': OptWrite (Arg, GetArg (&I, 2)); break; diff --git a/src/sp65/palconv.c b/src/sp65/palconv.c new file mode 100644 index 000000000..e92f3c22e --- /dev/null +++ b/src/sp65/palconv.c @@ -0,0 +1,104 @@ +/*****************************************************************************/ +/* */ +/* palconv.c */ +/* */ +/* Color palette conversions for the sp65 sprite and bitmap utility */ +/* */ +/* */ +/* */ +/* (C) 2022, Karri Kaksonen */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#include <string.h> +#include <stdlib.h> + +/* common */ +#include "check.h" +#include "xmalloc.h" + +/* sp65 */ +#include "attr.h" +#include "error.h" +#include "palette.h" +#include "lynxpalette.h" + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + +/* Type of the entry in the palette table */ +typedef struct PaletteMapEntry PaletteMapEntry; +struct PaletteMapEntry { + const char* Format; + StrBuf* (*PaletteFunc) (const Bitmap*, const Collection*); +}; + +/* Converter table, alphabetically sorted */ +static const PaletteMapEntry PaletteMap[] = { + { "lynx-palette", GenLynxPalette }, +}; + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + +static int Compare (const void* Key, const void* MapEntry) +/* Compare function for bsearch */ +{ + return strcmp (Key, ((const PaletteMapEntry*) MapEntry)->Format); +} + + + +StrBuf* PaletteTo (const Bitmap* B, const Collection* A) +/* Convert the palette of bitmap B into some sort of other binary format. +** The output is stored in a string buffer (which is actually a dynamic +** char array) and returned. The actual output format is taken from the +** "format" attribute in the attribute collection A. +*/ +{ + const PaletteMapEntry* E; + + /* Get the format to convert to */ + const char* Format = NeedAttrVal (A, "target", "palette"); + + /* Search for the matching converter */ + E = bsearch (Format, + PaletteMap, + sizeof (PaletteMap) / sizeof (PaletteMap[0]), + sizeof (PaletteMap[0]), + Compare); + if (E == 0) { + Error ("No such target format: '%s'", Format); + } + + /* Do the conversion */ + return E->PaletteFunc (B, A); +} + diff --git a/src/sp65/palconv.h b/src/sp65/palconv.h new file mode 100644 index 000000000..693281c20 --- /dev/null +++ b/src/sp65/palconv.h @@ -0,0 +1,72 @@ +/*****************************************************************************/ +/* */ +/* palconv.h */ +/* */ +/* Color palette conversions for the sp65 sprite and bitmap utility */ +/* */ +/* */ +/* */ +/* (C) 2022, Karri Kaksonen */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef PALCONV_H +#define PALCONV_H + + + +#include <stdio.h> + +/* common */ +#include "coll.h" +#include "strbuf.h" + +/* sp65 */ +#include "bitmap.h" + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + +StrBuf* PaletteTo (const Bitmap* B, const Collection* A); +/* Convert the palette of bitmap B into some sort of other binary format. +** The output is stored in a string buffer (which is actually a dynamic char +** array) and returned. The actual output format is taken from the "target" +** attribute in the attribute collection A. +*/ + +void ListPaletteTargets (FILE* F); +/* Output a list of palette targets */ + +/* End of palette.h */ + +#endif + + + From f85951ab2497dec2bac535ae569382b20e89d9fe Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Fri, 30 Dec 2022 15:06:22 +0200 Subject: [PATCH 1952/2710] Add to build --- src/sp65.vcxproj | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/sp65.vcxproj b/src/sp65.vcxproj index 1b7a18427..a9f0919a3 100644 --- a/src/sp65.vcxproj +++ b/src/sp65.vcxproj @@ -62,9 +62,11 @@ <ClCompile Include="sp65\geosicon.c" /> <ClCompile Include="sp65\input.c" /> <ClCompile Include="sp65\koala.c" /> + <ClCompile Include="sp65\lynxpalette.c" /> <ClCompile Include="sp65\lynxsprite.c" /> <ClCompile Include="sp65\main.c" /> <ClCompile Include="sp65\output.c" /> + <ClCompile Include="sp65\palconv.c" /> <ClCompile Include="sp65\palette.c" /> <ClCompile Include="sp65\pcx.c" /> <ClCompile Include="sp65\raw.c" /> @@ -84,8 +86,10 @@ <ClInclude Include="sp65\geosicon.h" /> <ClInclude Include="sp65\input.h" /> <ClInclude Include="sp65\koala.h" /> + <ClInclude Include="sp65\lynxpalette.h" /> <ClInclude Include="sp65\lynxsprite.h" /> <ClInclude Include="sp65\output.h" /> + <ClInclude Include="sp65\palconv.h" /> <ClInclude Include="sp65\palette.h" /> <ClInclude Include="sp65\pcx.h" /> <ClInclude Include="sp65\pixel.h" /> @@ -95,4 +99,4 @@ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> -</Project> \ No newline at end of file +</Project> From b6d06288e0e918dbad2b724caca5a2b0a4ba1e83 Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Fri, 30 Dec 2022 15:20:54 +0200 Subject: [PATCH 1953/2710] Fix warnings --- src/sp65/lynxpalette.c | 7 +++++-- src/sp65/lynxpalette.h | 9 +++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/sp65/lynxpalette.c b/src/sp65/lynxpalette.c index e822fa5ee..b084af26e 100644 --- a/src/sp65/lynxpalette.c +++ b/src/sp65/lynxpalette.c @@ -62,10 +62,13 @@ StrBuf* GenLynxPalette (const Bitmap* B, const Collection* A) */ { StrBuf* D; - Palette* P; + const Palette* P = GetBitmapPalette (B); + const char* Format = GetAttrVal(A, "format"); unsigned I; - P = GetBitmapPalette (B); + if (Format == 0) { + /* No format specified */ + } D = NewStrBuf (); for (I = 0; I < 16; ++I) { diff --git a/src/sp65/lynxpalette.h b/src/sp65/lynxpalette.h index 3ba4526fb..805db0d74 100644 --- a/src/sp65/lynxpalette.h +++ b/src/sp65/lynxpalette.h @@ -52,15 +52,12 @@ StrBuf* GenLynxPalette (const Bitmap* B, const Collection* A); /* Generate binary output in Lynx palette format for the bitmap B. The output - * is stored in a string buffer (which is actually a dynamic char array) and - * returned. - */ +** is stored in a string buffer (which is actually a dynamic char array) and +** returned. +*/ /* End of lynxpalette.h */ #endif - - - From 878a20ab59b8ba5104220dc4bcc08927816ae6d4 Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Fri, 30 Dec 2022 15:27:17 +0200 Subject: [PATCH 1954/2710] Fix dangling space --- src/sp65/lynxpalette.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sp65/lynxpalette.h b/src/sp65/lynxpalette.h index 805db0d74..b4e3defe3 100644 --- a/src/sp65/lynxpalette.h +++ b/src/sp65/lynxpalette.h @@ -51,7 +51,7 @@ StrBuf* GenLynxPalette (const Bitmap* B, const Collection* A); -/* Generate binary output in Lynx palette format for the bitmap B. The output +/* Generate binary output in Lynx palette format for the bitmap B. The output ** is stored in a string buffer (which is actually a dynamic char array) and ** returned. */ From 56a414593aad29ddc2f2cff1ffc9205d297db79c Mon Sep 17 00:00:00 2001 From: Lauri Kasanen <cand@gmx.com> Date: Tue, 8 Nov 2022 19:04:46 +0200 Subject: [PATCH 1955/2710] Teach da65 about table units --- doc/da65.sgml | 5 +++++ src/da65/attrtab.h | 5 ++++- src/da65/data.c | 2 +- src/da65/infofile.c | 32 ++++++++++++++++++++++++++++++++ src/da65/scanner.h | 1 + 5 files changed, 43 insertions(+), 2 deletions(-) diff --git a/doc/da65.sgml b/doc/da65.sgml index aa6ad40bf..3a01ce4f5 100644 --- a/doc/da65.sgml +++ b/doc/da65.sgml @@ -522,6 +522,11 @@ following attributes are recognized: </descrip> + <tag><tt>UNIT</tt></tag> + Split the table into sections of this size. For example, if you have a + ByteTable of size 48, but it has logical groups of size 16, specifying + 16 for UNIT adds newlines after every 16 bytes. UNIT is always in bytes. + <tag><tt>ADDRMODE</tt></tag> When disassembling 65816 code, this specifies the M and X flag states for this range. It's a string argument of the form "mx", capital letters diff --git a/src/da65/attrtab.h b/src/da65/attrtab.h index 37143c0d1..4a0ea8225 100644 --- a/src/da65/attrtab.h +++ b/src/da65/attrtab.h @@ -71,6 +71,9 @@ typedef enum attr_t { atSegmentEnd = 0x0200, /* Segment end */ atSegmentStart = 0x0400, /* Segment start */ + /* Table unit separator */ + atTableUnit = 0x0800, + /* 65816 addressing mode */ atMem8 = 0x1000, /* M flag enabled, 8-bit */ atMem16 = 0x2000, /* M flag disabled, 16-bit */ @@ -79,7 +82,7 @@ typedef enum attr_t { atStyleMask = 0x000F, /* Output style */ atLabelMask = 0x00F0, /* Label information */ - atSegmentMask = 0x0F00, /* Segment information */ + atSegmentMask = 0x0700, /* Segment information */ at65816Mask = 0xF000, /* 65816 information */ } attr_t; diff --git a/src/da65/data.c b/src/da65/data.c index 7355e60d1..f85cd327d 100644 --- a/src/da65/data.c +++ b/src/da65/data.c @@ -70,7 +70,7 @@ static unsigned GetSpan (attr_t Style) if ((Attr & atStyleMask) != Style) { break; } - if ((Attr & (atSegmentStart | atSegmentEnd))) { + if ((Attr & (atSegmentStart | atSegmentEnd | atTableUnit))) { break; } ++Count; diff --git a/src/da65/infofile.c b/src/da65/infofile.c index 923cc53c9..fbf367cc9 100644 --- a/src/da65/infofile.c +++ b/src/da65/infofile.c @@ -528,6 +528,7 @@ static void RangeSection (void) { "START", INFOTOK_START }, { "TYPE", INFOTOK_TYPE }, { "ADDRMODE", INFOTOK_ADDRMODE }, + { "UNIT", INFOTOK_UNIT }, }; static const IdentTok TypeDefs[] = { @@ -552,6 +553,7 @@ static void RangeSection (void) tName = 0x08, tComment = 0x10, tAddrMode = 0x20, + tUnit = 0x40, tNeeded = (tStart | tEnd | tType) }; unsigned Attributes = tNone; @@ -564,6 +566,7 @@ static void RangeSection (void) char* Name = 0; char* Comment = 0; unsigned MemberSize = 0; + unsigned Unit = 0; /* Skip the token */ @@ -682,6 +685,15 @@ static void RangeSection (void) InfoNextTok (); break; + case INFOTOK_UNIT: + AddAttr ("UNIT", &Attributes, tUnit); + InfoNextTok (); + InfoAssureInt (); + InfoRangeCheck (0x0002, 0xFFFF); + Unit = InfoIVal; + InfoNextTok (); + break; + default: Internal ("Unexpected token: %u", InfoTok); } @@ -705,6 +717,26 @@ static void RangeSection (void) } } + /* Only tables support unit sizes */ + if ((Attributes & tUnit) && + Type != atAddrTab && + Type != atByteTab && + Type != atDByteTab && + Type != atDWordTab && + Type != atRtsTab && + Type != atTextTab && + Type != atWordTab) { + InfoError ("Only table types support unit size"); + } + + /* Mark each unit separator */ + if (Attributes & tUnit) { + unsigned i; + for (i = Start; i < End; i += Unit) { + MarkAddr(i, atTableUnit); + } + } + /* Start must be less than end */ if (Start > End) { InfoError ("Start value must not be greater than end value"); diff --git a/src/da65/scanner.h b/src/da65/scanner.h index 60648a40c..ce76d4a98 100644 --- a/src/da65/scanner.h +++ b/src/da65/scanner.h @@ -91,6 +91,7 @@ typedef enum token_t { INFOTOK_END, INFOTOK_TYPE, INFOTOK_ADDRMODE, + INFOTOK_UNIT, INFOTOK_CODE, INFOTOK_BYTETAB, From e2c6d06b0d5be4f77deb3994c601f362ae1326f1 Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Wed, 4 Jan 2023 12:14:37 +0200 Subject: [PATCH 1956/2710] Update dosc --- doc/sp65.sgml | 43 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/doc/sp65.sgml b/doc/sp65.sgml index 255d7a552..e1bcdd558 100644 --- a/doc/sp65.sgml +++ b/doc/sp65.sgml @@ -44,6 +44,7 @@ Short options: -lc List all possible conversions -r file[,attrlist] Read an input file -v Increase verbosity + -p tgt,file[,attrlist] Write the palette to a file -w file[,attrlist] Write the output to a file Long options: @@ -56,6 +57,7 @@ Long options: --slice x,y,w,h Generate a slice from the loaded bitmap --verbose Increase verbosity --version Print the version number and exit + --palette tgt,file{,attrlist] Write the palette to a file --write file[,attrlist] Write the output to a file --------------------------------------------------------------------------- </verb></tscreen> @@ -124,6 +126,13 @@ attribute lists see <ref id="attr-lists" name="below">. bugfixes, please include the version number. + <label id="option--palette"> + <tag><tt>-p, --palette target,filename[,attrlist]</tt></tag> + + Write the palette of the input bitmap to a file in a format suitable of + the target. + + <label id="option--write"> <tag><tt>-w, --write filename[,attrlist]</tt></tag> @@ -265,6 +274,7 @@ of a sprite is roughly 508 pixels but in reality the Lynx screen is only 160 by 102 pixels which makes very large sprites useless. The number per pixels is taken from the number of colors of the input bitmap. +You can also force the number of pens used in the conversion. There are a few attributes that you can give to the conversion software. @@ -273,7 +283,7 @@ There are a few attributes that you can give to the conversion software. <tag/mode/ The first is what kind of encoding to use for the sprite. The attribute for this is called "mode" and the possible values are "literal", "packed" or - "transparent". The default is "packed" if no mode is specified. + "shaped". The default is "packed" if no mode is specified. The "literal" is a totally literal mode with no packing. In this mode the number of pixels per scanline will be a multiple of 8 both right and left from @@ -290,10 +300,26 @@ There are a few attributes that you can give to the conversion software. using run-length encoding and literal coding mixed for optimisation to produce a small sprite. - The last encoding mode "transparent" is like packed. But here we know that - the index 0 will be transparent so we can clip off all 0 pixels from the left - and right edge of the sprite. This will produce the smallest sprite possible - on the Lynx. The sprite is not rectangular anymore. + The last encoding mode "shaped" is like packed. But we can stop the conversion + to the right abd left edge when we get the first "edge" colour. If no edge + colour is specified we stop at the first index 0 colour. + If your edge index is outside the range 0..15 then your sprite can use all + the colours in the defined palette. + This will also produce the smallest sprite possible on the Lynx. The sprite + is not rectangular anymore. + + <tag/edge/ + This keyword is only meaningful for shaped sprites. By default it is 0. + The shaped sprite outer edge is defined by the colour index "edge". + + <tag/pen/ + This keyword defines the order the colours in the original bitmap is + mapped to the Lynx sprite. The length of the pen also defines the depth + of the generated sprite. + If you want to create a 1 BPP sprite you can define the two indices used + in the sprite like pen=34. Now areas in colour index 3 will be mapped as 0. + Areas in colour index 4 will be mapped as 1. + The default pen=0123456789abcdef. <tag/ax/ The sprite is painted around the Anchor point. The anchor point x can be @@ -301,7 +327,9 @@ There are a few attributes that you can give to the conversion software. painting the sprite in location 10,20 will set the left edge of the sprite 10 pixels from the left of the Lynx screen. When the sprite is scaled by hardware the anchor point stays in place and the sprite grows or shrinks - around the anchor point. The default value is 0 (left). + around the anchor point. You can also define the location using the words + "mid" for the center or "max" for the right edge. + The default value is 0 (left). <tag/ay/ The sprite is painted around the Anchor point. The anchor point y can be @@ -309,7 +337,8 @@ There are a few attributes that you can give to the conversion software. painting the sprite in location 10,20 will set the top of the sprite 20 pixels from the top of the Lynx screen. When the sprite is scaled by hardware the anchor point stays in place and the sprite grows or shrinks - around the anchor point. The default value is 0 (top). + around the anchor point. You can also define the location using the words + "mid" for the center or "max" for the bottom. The default value is 0 (top). </descrip> From 7ea2d8ab180ba38ba05952862034acc5aaccf109 Mon Sep 17 00:00:00 2001 From: Rutger van Bergen <rbergen@xs4all.nl> Date: Wed, 4 Jan 2023 19:05:08 +0100 Subject: [PATCH 1957/2710] Address review comment --- include/kim1.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/include/kim1.h b/include/kim1.h index bb616f7a0..dae246944 100644 --- a/include/kim1.h +++ b/include/kim1.h @@ -46,13 +46,6 @@ /* Hardware */ /*****************************************************************************/ - -// Todo (davepl) -// -// #include <_6530.h> -// #define RIOT3 (*(struct __6530*)0x1700) // U25 -// #define RIOT2 (*(struct __6530*)0x1740) // U28 - /*****************************************************************************/ /* Code */ /*****************************************************************************/ From f9024d132a33ffb62257fbb2bb84b63436eb8996 Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Thu, 5 Jan 2023 21:12:58 -0800 Subject: [PATCH 1958/2710] add sound command this behives the same as BASIC sound(voice, pitch, distortion, volume) --- include/atari.h | 6 ++++++ libsrc/atari/sound.s | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 libsrc/atari/sound.s diff --git a/include/atari.h b/include/atari.h index deae8fdf5..e31463991 100644 --- a/include/atari.h +++ b/include/atari.h @@ -235,6 +235,12 @@ extern void __fastcall__ _scroll (signed char numlines); /* numlines < 0 scrolls down */ +/*****************************************************************************/ +/* Sound function */ +/*****************************************************************************/ + +extern void __fastcall__ sound (unsigned char voice, unsigned char frequency, unsigned char distortion, unsigned char volume); /* plays a sound in the specidied voice, to silence call with in other params*/ + /*****************************************************************************/ /* Misc. functions */ /*****************************************************************************/ diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s new file mode 100644 index 000000000..53cb717ff --- /dev/null +++ b/libsrc/atari/sound.s @@ -0,0 +1,43 @@ +; +; Mariano Domínguez +; 2022-12-4 +; +; atari lib +; + .include "atari.inc" + + .export _sound + .import popa +; play sound, arguments: voice, pitch, distortion, volume. same as BASIC +.proc _sound + sta STORE2 ;save volume + jsr popa ;get distortion + sta STORE1 ;save distortion + jsr popa ;get pitch + pha ;save in stack + jsr popa ;get voice + + asl a ;adjust voice *2 for offset in x + tax + pla ;get pitch from stack + sta AUDF1,x ; store pitch + + lda #0 + sta AUDCTL + lda #3 + stx SKCTL ; init sound + + lda STORE1 ;get distortion + asl a ;ignore the high nibble + asl a + asl a + asl a + clc ; setup for adding volume + adc STORE2 ; add volume + sta AUDC1,x ; volume + distortion in control channel + rts +.endproc +; reserve 2 bytes for temp storage + .bss +STORE1: .res 1 +STORE2: .res 1 \ No newline at end of file From fa05294054a441be49d247d1a72a9cf53d2de9d6 Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Thu, 5 Jan 2023 21:16:58 -0800 Subject: [PATCH 1959/2710] add newline for style --- libsrc/atari/sound.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s index 53cb717ff..94b7a2d8a 100644 --- a/libsrc/atari/sound.s +++ b/libsrc/atari/sound.s @@ -40,4 +40,4 @@ ; reserve 2 bytes for temp storage .bss STORE1: .res 1 -STORE2: .res 1 \ No newline at end of file +STORE2: .res 1 From 30df733c3156893e8f3b113718ed393750cb8daa Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Thu, 5 Jan 2023 21:20:16 -0800 Subject: [PATCH 1960/2710] remove dangling spaces --- libsrc/atari/sound.s | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s index 94b7a2d8a..eb90662ad 100644 --- a/libsrc/atari/sound.s +++ b/libsrc/atari/sound.s @@ -5,7 +5,6 @@ ; atari lib ; .include "atari.inc" - .export _sound .import popa ; play sound, arguments: voice, pitch, distortion, volume. same as BASIC @@ -15,18 +14,15 @@ sta STORE1 ;save distortion jsr popa ;get pitch pha ;save in stack - jsr popa ;get voice - - asl a ;adjust voice *2 for offset in x + jsr popa ;get voice + asl a ;adjust voice *2 for offset in x tax - pla ;get pitch from stack - sta AUDF1,x ; store pitch - + pla ;get pitch from stack + sta AUDF1,x ; store pitch lda #0 sta AUDCTL lda #3 - stx SKCTL ; init sound - + stx SKCTL ;init sound lda STORE1 ;get distortion asl a ;ignore the high nibble asl a From 29a80065cca2e36639d773f773ddf799f5808969 Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Thu, 5 Jan 2023 21:27:54 -0800 Subject: [PATCH 1961/2710] fix tab indentation --- libsrc/atari/sound.s | 52 ++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s index eb90662ad..756d0e02d 100644 --- a/libsrc/atari/sound.s +++ b/libsrc/atari/sound.s @@ -9,31 +9,31 @@ .import popa ; play sound, arguments: voice, pitch, distortion, volume. same as BASIC .proc _sound - sta STORE2 ;save volume - jsr popa ;get distortion - sta STORE1 ;save distortion - jsr popa ;get pitch - pha ;save in stack - jsr popa ;get voice - asl a ;adjust voice *2 for offset in x - tax - pla ;get pitch from stack - sta AUDF1,x ; store pitch - lda #0 - sta AUDCTL - lda #3 - stx SKCTL ;init sound - lda STORE1 ;get distortion - asl a ;ignore the high nibble - asl a - asl a - asl a - clc ; setup for adding volume - adc STORE2 ; add volume - sta AUDC1,x ; volume + distortion in control channel - rts + sta STORE2 ;save volume + jsr popa ;get distortion + sta STORE1 ;save distortion + jsr popa ;get pitch + pha ;save in stack + jsr popa ;get voice + asl a ;adjust voice *2 for offset in x + tax + pla ;get pitch from stack + sta AUDF1,x ;store pitch + lda #0 + sta AUDCTL + lda #3 + stx SKCTL ;init sound + lda STORE1 ;get distortion + asl a ;ignore the high nibble + asl a + asl a + asl a + clc ;setup for adding volume + adc STORE2 ;add volume + sta AUDC1,x ;volume + distortion in control channel + rts .endproc -; reserve 2 bytes for temp storage + ;reserve 2 bytes for temp storage .bss -STORE1: .res 1 -STORE2: .res 1 +STORE1: .res 1 +STORE2: .res 1 From 4e8b18c035775344519fde47b2571027abe2944c Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Thu, 5 Jan 2023 21:29:33 -0800 Subject: [PATCH 1962/2710] missing tab --- libsrc/atari/sound.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s index 756d0e02d..880af3ee7 100644 --- a/libsrc/atari/sound.s +++ b/libsrc/atari/sound.s @@ -34,6 +34,6 @@ rts .endproc ;reserve 2 bytes for temp storage - .bss + .bss STORE1: .res 1 STORE2: .res 1 From 85f657b35e2c141ebccc1d99445c4f2ca4a50e56 Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Thu, 5 Jan 2023 21:30:31 -0800 Subject: [PATCH 1963/2710] missing space --- libsrc/atari/sound.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s index 880af3ee7..0fc1dad07 100644 --- a/libsrc/atari/sound.s +++ b/libsrc/atari/sound.s @@ -16,7 +16,7 @@ pha ;save in stack jsr popa ;get voice asl a ;adjust voice *2 for offset in x - tax + tax pla ;get pitch from stack sta AUDF1,x ;store pitch lda #0 From 658c1ad71195e7cfd5544dabfa2dc7408454f30b Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Thu, 5 Jan 2023 21:33:40 -0800 Subject: [PATCH 1964/2710] only missing space --- libsrc/atari/sound.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s index 0fc1dad07..90fed6f70 100644 --- a/libsrc/atari/sound.s +++ b/libsrc/atari/sound.s @@ -8,7 +8,7 @@ .export _sound .import popa ; play sound, arguments: voice, pitch, distortion, volume. same as BASIC -.proc _sound +.proc _sound sta STORE2 ;save volume jsr popa ;get distortion sta STORE1 ;save distortion From 8c97b54f5d5391322692436bb854913bbf02c957 Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Thu, 5 Jan 2023 21:34:43 -0800 Subject: [PATCH 1965/2710] more trailing spaces :( --- libsrc/atari/sound.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s index 90fed6f70..80f89a0c4 100644 --- a/libsrc/atari/sound.s +++ b/libsrc/atari/sound.s @@ -25,8 +25,8 @@ stx SKCTL ;init sound lda STORE1 ;get distortion asl a ;ignore the high nibble - asl a - asl a + asl a + asl a asl a clc ;setup for adding volume adc STORE2 ;add volume From c3e1ae3478bc848a9ab16219aee4e8fd1c9d3424 Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Thu, 5 Jan 2023 21:36:44 -0800 Subject: [PATCH 1966/2710] last trailing space --- libsrc/atari/sound.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s index 80f89a0c4..9b0984ad7 100644 --- a/libsrc/atari/sound.s +++ b/libsrc/atari/sound.s @@ -28,7 +28,7 @@ asl a asl a asl a - clc ;setup for adding volume + clc ;setup for adding volume adc STORE2 ;add volume sta AUDC1,x ;volume + distortion in control channel rts From 2a961a870b2486bf1a4edd2eb4e00faf57fe1064 Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Fri, 6 Jan 2023 09:56:15 -0800 Subject: [PATCH 1967/2710] add target test --- targettest/atari/Makefile | 5 ++++- targettest/atari/sound.c | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 targettest/atari/sound.c diff --git a/targettest/atari/Makefile b/targettest/atari/Makefile index dd4f6078f..d5b4d9593 100644 --- a/targettest/atari/Makefile +++ b/targettest/atari/Makefile @@ -39,6 +39,7 @@ EXELIST_atari = \ multi.xex \ ostype.xex \ scrcode.com \ + sound.xex \ sys.xex ifneq ($(EXELIST_$(SYS)),) @@ -74,7 +75,8 @@ scrcode.com: scrcode.s $(CL) -t atari -C atari-asm.cfg -o scrcode.com scrcode.s sys.xex: sys.c $(CL) -t atari -o sys.xex sys.c - +sound.xex: sound.c + $(CL) -t atari -o sound.xex sound.c clean: @$(DEL) charmapping.xex 2>$(NULLDEV) @$(DEL) defdev.xex 2>$(NULLDEV) @@ -85,3 +87,4 @@ clean: @$(DEL) scrcode.o 2>$(NULLDEV) @$(DEL) scrcode.com 2>$(NULLDEV) @$(DEL) sys.xex 2>$(NULLDEV) + @$(DEL) sound.xex 2>$(NULLDEV) diff --git a/targettest/atari/sound.c b/targettest/atari/sound.c new file mode 100644 index 000000000..e0cec7f3b --- /dev/null +++ b/targettest/atari/sound.c @@ -0,0 +1,20 @@ +/* +** testprogram printing the default device +** +** January 6 2023 Mariano Domínguez +*/ + +#include <stdio.h> +#include <conio.h> +#include <atari.h> +#include <cc65.h> + +int main(void) +{ + int i=0; + printf("playing sound \n"); + sound(1,121,10,15); + for(i=0;i<90;i++); + sound(1,0,0,0); + return 0; +} From 196962adac43b17a4df99da6f27bc801ae0e2fa7 Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Fri, 6 Jan 2023 10:54:16 -0800 Subject: [PATCH 1968/2710] remove lasy pesky space --- libsrc/atari/sound.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s index 9b0984ad7..95431bbb4 100644 --- a/libsrc/atari/sound.s +++ b/libsrc/atari/sound.s @@ -11,7 +11,7 @@ .proc _sound sta STORE2 ;save volume jsr popa ;get distortion - sta STORE1 ;save distortion + sta STORE1 ;save distortion jsr popa ;get pitch pha ;save in stack jsr popa ;get voice From bf9fb6dcdb3717abb25dbd0dad6935f5a6d0e30d Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Fri, 6 Jan 2023 11:23:33 -0800 Subject: [PATCH 1969/2710] increase delay in sound test --- targettest/atari/sound.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targettest/atari/sound.c b/targettest/atari/sound.c index e0cec7f3b..66d0ee3e3 100644 --- a/targettest/atari/sound.c +++ b/targettest/atari/sound.c @@ -14,7 +14,7 @@ int main(void) int i=0; printf("playing sound \n"); sound(1,121,10,15); - for(i=0;i<90;i++); + for(i=0;i<9000;i++); sound(1,0,0,0); return 0; } From e4d9dbf0c005951d39e8013659772aa8ba3b69be Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 8 Jan 2023 17:47:04 +0100 Subject: [PATCH 1970/2710] Wrong file "geover.cvt" See line 106 --- samples/geos/Makefile | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/samples/geos/Makefile b/samples/geos/Makefile index 1fc49a873..7b78b1064 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -94,37 +94,37 @@ bitmap.c: logo.pcx $(SP) -r logo.pcx -c geos-bitmap -w bitmap.c,ident=bitmap bitmap-demo.cvt: bitmap.c bitmap-demores.grc bitmap-demo.c - $(CL) -t $(SYS) -O -o bitmap-demo.cvt -m bitmap-demo.map bitmap-demores.grc bitmap-demo.c + $(CL) -t $(SYS) -O -o $@ -m bitmap-demo.map bitmap-demores.grc bitmap-demo.c filesel.cvt: fileselres.grc filesel.c - $(CL) -t $(SYS) -O -o filesel.cvt -m filesel.map fileselres.grc filesel.c + $(CL) -t $(SYS) -O -o $@ -m filesel.map fileselres.grc filesel.c geosconio.cvt: geosconiores.grc geosconio.c - $(CL) -t $(SYS) -O -o geosconio.cvt -m geosconio.map geosconiores.grc geosconio.c + $(CL) -t $(SYS) -O -o $@ -m geosconio.map geosconiores.grc geosconio.c geosver.cvt: geosverres.grc geosver.c - $(CL) -t $(SYS) -O -o geover.cvt -m geosver.map geosverres.grc geosver.c + $(CL) -t $(SYS) -O -o $@ -m geosver.map geosverres.grc geosver.c getid.cvt: getidres.grc getid.c - $(CL) -t $(SYS) -O -o getid.cvt -m getid.map getidres.grc getid.c + $(CL) -t $(SYS) -O -o $@ -m getid.map getidres.grc getid.c hello1.cvt: hello1res.grc hello1.c - $(CL) -t $(SYS) -O -o hello1.cvt -m hello1.map hello1res.grc hello1.c + $(CL) -t $(SYS) -O -o $@ -m hello1.map hello1res.grc hello1.c hello2.cvt: hello2res.grc hello2.c - $(CL) -t $(SYS) -O -o hello2.cvt -m hello2.map hello2res.grc hello2.c + $(CL) -t $(SYS) -O -o $@ -m hello2.map hello2res.grc hello2.c overlay-demo.cvt: overlay-demores.grc overlay-demo.c - $(CL) -t $(SYS) -O -o overlay-demo.cvt -m overlay-demo.map overlay-demores.grc overlay-demo.c + $(CL) -t $(SYS) -O -o $@ -m overlay-demo.map overlay-demores.grc overlay-demo.c rmvprot.cvt: rmvprotres.grc rmvprot.c - $(CL) -t $(SYS) -O -o rmvprot.cvt -m rmvprot.map rmvprotres.grc rmvprot.c + $(CL) -t $(SYS) -O -o $@ -m rmvprot.map rmvprotres.grc rmvprot.c vector-demo.cvt: vector-demores.grc vector-demo.c - $(CL) -t $(SYS) -O -o vector-demo.cvt -m vector-demo.map vector-demores.grc vector-demo.c + $(CL) -t $(SYS) -O -o $@ -m vector-demo.map vector-demores.grc vector-demo.c yesno.cvt: yesnores.grc yesno.c - $(CL) -t $(SYS) -O -o yesno.cvt -m yesno.map yesnores.grc yesno.c + $(CL) -t $(SYS) -O -o $@ -m yesno.map yesnores.grc yesno.c clean: From 27ecb555eab378f9c7aacabd5d1a302a042becca Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <marianod@wepay.com> Date: Tue, 10 Jan 2023 11:16:36 -0800 Subject: [PATCH 1971/2710] Rename sound to _sound. remove extra comments. --- include/atari.h | 2 +- libsrc/atari/sound.s | 4 ++-- targettest/atari/sound.c | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/atari.h b/include/atari.h index e31463991..08b671ff4 100644 --- a/include/atari.h +++ b/include/atari.h @@ -239,7 +239,7 @@ extern void __fastcall__ _scroll (signed char numlines); /* Sound function */ /*****************************************************************************/ -extern void __fastcall__ sound (unsigned char voice, unsigned char frequency, unsigned char distortion, unsigned char volume); /* plays a sound in the specidied voice, to silence call with in other params*/ +extern void __fastcall__ _sound (unsigned char voice, unsigned char frequency, unsigned char distortion, unsigned char volume); /*****************************************************************************/ /* Misc. functions */ diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s index 95431bbb4..a8b712770 100644 --- a/libsrc/atari/sound.s +++ b/libsrc/atari/sound.s @@ -5,10 +5,10 @@ ; atari lib ; .include "atari.inc" - .export _sound + .export __sound .import popa ; play sound, arguments: voice, pitch, distortion, volume. same as BASIC -.proc _sound +.proc __sound sta STORE2 ;save volume jsr popa ;get distortion sta STORE1 ;save distortion diff --git a/targettest/atari/sound.c b/targettest/atari/sound.c index 66d0ee3e3..d1c50e1b4 100644 --- a/targettest/atari/sound.c +++ b/targettest/atari/sound.c @@ -1,5 +1,5 @@ /* -** testprogram printing the default device +** Test program for _sound for atari ** ** January 6 2023 Mariano Domínguez */ @@ -13,8 +13,8 @@ int main(void) { int i=0; printf("playing sound \n"); - sound(1,121,10,15); + _sound(1,121,10,15); //voice, pitch, distortion, volume for(i=0;i<9000;i++); - sound(1,0,0,0); + _sound(1,0,0,0); //silencing, same as Atari Basic return 0; } From 42c39c6bfcdc111b927c0f82895f11071e0ed6d0 Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Tue, 10 Jan 2023 11:26:12 -0800 Subject: [PATCH 1972/2710] remove trailing spacew, use correct user --- include/atari.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/atari.h b/include/atari.h index 08b671ff4..04cacab33 100644 --- a/include/atari.h +++ b/include/atari.h @@ -239,7 +239,7 @@ extern void __fastcall__ _scroll (signed char numlines); /* Sound function */ /*****************************************************************************/ -extern void __fastcall__ _sound (unsigned char voice, unsigned char frequency, unsigned char distortion, unsigned char volume); +extern void __fastcall__ _sound (unsigned char voice, unsigned char frequency, unsigned char distortion, unsigned char volume); /*****************************************************************************/ /* Misc. functions */ From 8ea0dfe45395f9357eb7e523044344d09db490e5 Mon Sep 17 00:00:00 2001 From: Matt Seabold <matt.seabold@gmail.com> Date: Wed, 11 Jan 2023 20:18:51 -0500 Subject: [PATCH 1973/2710] Allow line_bynumber to return more than one result --- src/dbginfo/dbginfo.c | 54 +++++++++++++++++++++++++++++++------------ 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/src/dbginfo/dbginfo.c b/src/dbginfo/dbginfo.c index fdebe6910..c8db5bea6 100644 --- a/src/dbginfo/dbginfo.c +++ b/src/dbginfo/dbginfo.c @@ -4736,14 +4736,18 @@ static SpanInfoListEntry* FindSpanInfoByAddr (const SpanInfoList* L, cc65_addr A -static LineInfo* FindLineInfoByLine (const Collection* LineInfos, cc65_line Line) -/* Find the LineInfo for a given line number. The function returns the line -** info or NULL if none was found. +static int FindLineInfoByLine (const Collection* LineInfos, cc65_line Line, + unsigned *Index) +/* Find the LineInfo for a given line number. The function returns true if the +** name was found. In this case, Index contains the index of the first item +** that matches. If the item wasn't found, the function returns false and +** Index contains the insert position for Name. */ { /* Do a binary search */ int Lo = 0; int Hi = (int) CollCount (LineInfos) - 1; + int Found = 0; while (Lo <= Hi) { /* Mid of range */ @@ -4755,16 +4759,20 @@ static LineInfo* FindLineInfoByLine (const Collection* LineInfos, cc65_line Line /* Found? */ if (Line > CurItem->Line) { Lo = Cur + 1; - } else if (Line < CurItem->Line) { - Hi = Cur - 1; } else { - /* Found */ - return CurItem; + Hi = Cur - 1; + /* Since we may have duplicates, repeat the search until we've + ** the first item that has a match. + */ + if(Line == CurItem->Line) { + Found = 1; + } } } - /* Not found */ - return 0; + /* Pass back the index. This is also the insert position */ + *Index = Lo; + return Found; } @@ -6134,6 +6142,9 @@ const cc65_lineinfo* cc65_line_bynumber (cc65_dbginfo Handle, unsigned FileId, const FileInfo* F; cc65_lineinfo* D; LineInfo* L = 0; + unsigned I; + unsigned Index; + unsigned Count; /* Check the parameter */ assert (Handle != 0); @@ -6150,18 +6161,31 @@ const cc65_lineinfo* cc65_line_bynumber (cc65_dbginfo Handle, unsigned FileId, F = CollAt (&Info->FileInfoById, FileId); /* Search in the file for the given line */ - L = FindLineInfoByLine (&F->LineInfoByLine, Line); - - /* Bail out if we didn't find the line */ - if (L == 0) { + if(!FindLineInfoByLine (&F->LineInfoByLine, Line, &Index)) { + /* Not found */ return 0; } + /* Index contains the first position. Count how many lines with this number + ** we have. Skip the first one, since we have at least one. + */ + Count = 1; + + while ((unsigned) Index + Count < CollCount( &F->LineInfoByLine)) { + L = CollAt (&F->LineInfoByLine, (unsigned) Index + Count); + if (L->Line != Line) { + break; + } + ++Count; + } + /* Prepare the struct we will return to the caller */ - D = new_cc65_lineinfo (1); + D = new_cc65_lineinfo (Count); /* Copy the data */ - CopyLineInfo (D->data, L); + for (I = 0; I < Count; ++I) { + CopyLineInfo (D->data + I, CollAt (&F->LineInfoByLine, Index++)); + } /* Return the allocated struct */ return D; From a5a8225a58addbd8e1532d378163786cb2ebafa7 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sat, 14 Jan 2023 13:49:16 +0100 Subject: [PATCH 1974/2710] Create disk of GEOS samples You don't need to convert anymore. --- samples/geos/Makefile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/samples/geos/Makefile b/samples/geos/Makefile index 7b78b1064..03f6b8cdc 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -80,6 +80,14 @@ EXELIST_geos-apple = \ ifneq ($(EXELIST_$(SYS)),) samples: $(EXELIST_$(SYS)) $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) + +define samples-geos +c1541 -attach $(0).d64 -geoswrite $(1); +endef + +samples-geos: $(EXELIST_$(SYS)) + c1541 -format "$@,01" d64 $@.d64 + $(foreach tool,$(EXELIST_$(SYS)),$(call samples-geos,$(tool))) else samples: ifeq ($(MAKELEVEL),0) From 6236e828504bde60b0206fe6e710dfa34bcd7feb Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Sun, 15 Jan 2023 17:00:05 -0800 Subject: [PATCH 1975/2710] change storage to pager zero fix bug that kills keyboard. --- libsrc/atari/sound.s | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s index a8b712770..746ebc2bb 100644 --- a/libsrc/atari/sound.s +++ b/libsrc/atari/sound.s @@ -7,11 +7,13 @@ .include "atari.inc" .export __sound .import popa + .importzp tmp1,tmp2 + ; play sound, arguments: voice, pitch, distortion, volume. same as BASIC .proc __sound - sta STORE2 ;save volume + sta tmp2 ;save volume jsr popa ;get distortion - sta STORE1 ;save distortion + sta tmp1 ;save distortion jsr popa ;get pitch pha ;save in stack jsr popa ;get voice @@ -22,18 +24,14 @@ lda #0 sta AUDCTL lda #3 - stx SKCTL ;init sound - lda STORE1 ;get distortion + sta SKCTL ;init sound + lda tmp1 ;get distortion asl a ;ignore the high nibble asl a asl a asl a clc ;setup for adding volume - adc STORE2 ;add volume + adc tmp2 ;add volume sta AUDC1,x ;volume + distortion in control channel rts .endproc - ;reserve 2 bytes for temp storage - .bss -STORE1: .res 1 -STORE2: .res 1 From 40656ffb6e829da3abace9503020de5e8754a6d3 Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Sun, 15 Jan 2023 17:05:24 -0800 Subject: [PATCH 1976/2710] more style --- libsrc/atari/sound.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s index 746ebc2bb..0c1e80db5 100644 --- a/libsrc/atari/sound.s +++ b/libsrc/atari/sound.s @@ -7,7 +7,7 @@ .include "atari.inc" .export __sound .import popa - .importzp tmp1,tmp2 + .importzp tmp1,tmp2 ; play sound, arguments: voice, pitch, distortion, volume. same as BASIC .proc __sound From 67564d83c8a549be4ad963037dd2e1038c023ce6 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Mon, 16 Jan 2023 18:01:11 +0100 Subject: [PATCH 1977/2710] libsrc/atari/sound.s: fix indentation --- libsrc/atari/sound.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s index 0c1e80db5..0d2362318 100644 --- a/libsrc/atari/sound.s +++ b/libsrc/atari/sound.s @@ -31,7 +31,7 @@ asl a asl a clc ;setup for adding volume - adc tmp2 ;add volume + adc tmp2 ;add volume sta AUDC1,x ;volume + distortion in control channel rts .endproc From c6d183c31b72dd710adaf35d4d6773165be077f1 Mon Sep 17 00:00:00 2001 From: Mariano Dominguez <mariano.dm@gmail.com> Date: Mon, 16 Jan 2023 19:09:01 -0800 Subject: [PATCH 1978/2710] add documentation for _sound. --- doc/atari.sgml | 1 + doc/funcref.sgml | 39 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/doc/atari.sgml b/doc/atari.sgml index 2e2db0402..3057cd8a6 100644 --- a/doc/atari.sgml +++ b/doc/atari.sgml @@ -332,6 +332,7 @@ See the <url url="funcref.html" name="function reference"> for declaration and u <item>_scroll <item>_setcolor <item>_setcolor_low +<item>_sound <item>waitvsync </itemize> diff --git a/doc/funcref.sgml b/doc/funcref.sgml index a8593ebb5..2df86289e 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -126,6 +126,7 @@ function. <!-- <item><ref id="_scroll" name="_scroll"> --> <!-- <item><ref id="_setcolor" name="_setcolor"> --> <!-- <item><ref id="_setcolor_low" name="_setcolor_low"> --> +<item><ref id="_sound" name="_sound"> <item><ref id="get_ostype" name="get_ostype"> <!-- <item><ref id="get_tv" name="get_tv"> --> </itemize> @@ -1108,6 +1109,43 @@ considered random to a certain degree. </descrip> </quote> +<sect1>_sound<label id="_sound"><p> +<quote> +<descrip> +<tag/Function/Use the speaker to produce sound in a specified voice. (Atari only) +<tag/Header/<tt/<ref id="atari.h" name="atari.h">/ +<tag/Declaration/<tt/void _sound (unsigned char voice, unsigned char pitch, unsigned char distortion, unsigned char volume);/ +<tag/Description/The function produces a sound with the specified parameters. using any of the 4 availble oscillators (voices) controlled by POKEY chip. Sound is non cpu-blocking and it keeps oscillating until program sends 0 in all the other parameters. + +<tag/Notes/<itemize> +<item>The function is specific to the Atari 8 bit. +<item> Voice can be any of 0-3 different sound channels. +<item> Pitch goes from 0-255 (about 125 Hz to 32 Khz). +<item> Distortion (0-14) uses poly dividers to reshape wave in order to create a noise effect. Use 10 for a "pure" square-wave sound. +<item>Volume (0-15) is the intensity for the wave. +<item>Extra bits in those parameters will be ignored. +</itemize> +<tag/Availability/cc65 (not all platforms) +<tag/Example/ +<verb> + +#include <stdio.h> +int main(void) +{ + int i=0; + unsigned char j; + printf("playing sound \n"); + for (j=0; j<144; j++) { + _sound(1,144-j,10,8); //change the pitch for voice 1 + for (i=0; i<50; i++); //pause for sound duration + } + _sound(1,0,0,0); //use zero in other parameters to stop the sound + return 0; +} + +</verb> +</descrip> +</quote> <sect1>_stroserror<label id="_stroserror"><p> @@ -6908,7 +6946,6 @@ switching the CPU into single clock mode. </descrip> </quote> - <sect1>srand<label id="srand"><p> <quote> From 9ee0c835e5f7698f1376b58d38a6cfd5f1514bfc Mon Sep 17 00:00:00 2001 From: Matt Seabold <matt.seabold@gmail.com> Date: Tue, 17 Jan 2023 22:15:27 -0500 Subject: [PATCH 1979/2710] Update documentation for line_bynumber --- src/dbginfo/dbginfo.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/dbginfo/dbginfo.h b/src/dbginfo/dbginfo.h index 38d891e7c..95aae837c 100644 --- a/src/dbginfo/dbginfo.h +++ b/src/dbginfo/dbginfo.h @@ -258,7 +258,8 @@ const cc65_lineinfo* cc65_line_bynumber (cc65_dbginfo handle, unsigned source_id, cc65_line line); /* Return line information for a source file/line number combination. The -** function returns NULL if no line information was found. +** function returns NULL if no line information was found, otherwise a list +** of line infos. */ const cc65_lineinfo* cc65_line_bysource (cc65_dbginfo Handle, unsigned source_id); From 3360734487a08e32e473476b29c5ea4c6207c752 Mon Sep 17 00:00:00 2001 From: Matt Seabold <matt.seabold@gmail.com> Date: Tue, 17 Jan 2023 22:17:23 -0500 Subject: [PATCH 1980/2710] Update comment to match in source file --- src/dbginfo/dbginfo.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/dbginfo/dbginfo.c b/src/dbginfo/dbginfo.c index c8db5bea6..fee41012c 100644 --- a/src/dbginfo/dbginfo.c +++ b/src/dbginfo/dbginfo.c @@ -6135,7 +6135,8 @@ const cc65_lineinfo* cc65_line_byid (cc65_dbginfo Handle, unsigned Id) const cc65_lineinfo* cc65_line_bynumber (cc65_dbginfo Handle, unsigned FileId, cc65_line Line) /* Return line information for a source file/line number combination. The -** function returns NULL if no line information was found. +** function returns NULL if no line information was found, otherwise a list +** of line infos. */ { const DbgInfo* Info; From 60f56c43c769f39089f5005f736a06aacd393224 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Wed, 18 Jan 2023 11:55:52 +0100 Subject: [PATCH 1981/2710] some documentation fixes --- doc/funcref.sgml | 11 +++++++---- libsrc/atari/sound.s | 6 ++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 2df86289e..6418723b5 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -1114,18 +1114,21 @@ considered random to a certain degree. <descrip> <tag/Function/Use the speaker to produce sound in a specified voice. (Atari only) <tag/Header/<tt/<ref id="atari.h" name="atari.h">/ -<tag/Declaration/<tt/void _sound (unsigned char voice, unsigned char pitch, unsigned char distortion, unsigned char volume);/ -<tag/Description/The function produces a sound with the specified parameters. using any of the 4 availble oscillators (voices) controlled by POKEY chip. Sound is non cpu-blocking and it keeps oscillating until program sends 0 in all the other parameters. +<tag/Declaration/<tt/void __fastcall__ _sound (unsigned char voice, unsigned char pitch, unsigned char distortion, unsigned char volume);/ +<tag/Description/The function produces a sound with the specified parameters using any of the 4 available oscillators (voices) controlled by the POKEY chip. Sound is non cpu-blocking and it keeps oscillating until program sends 0 in all the other parameters. <tag/Notes/<itemize> +<item>The function is available only as a fastcall function; so, it may be used +only in the presence of a prototype. <item>The function is specific to the Atari 8 bit. <item> Voice can be any of 0-3 different sound channels. <item> Pitch goes from 0-255 (about 125 Hz to 32 Khz). <item> Distortion (0-14) uses poly dividers to reshape wave in order to create a noise effect. Use 10 for a "pure" square-wave sound. <item>Volume (0-15) is the intensity for the wave. <item>Extra bits in those parameters will be ignored. +<item>Parameters are the same as for the AtariBASIC SOUND statement. </itemize> -<tag/Availability/cc65 (not all platforms) +<tag/Availability/cc65 (<tt/atari/ and <tt/atarixl/ platforms) <tag/Example/ <verb> @@ -4186,7 +4189,7 @@ be used in presence of a prototype. <tag/Example/<verb> chdir (getdevicedir (device, buf, sizeof buf)); </verb> -cf. <tt/samples/enumdevdir.c/ +cf. <tt/samples/enumdevdir.c/ </descrip> </quote> diff --git a/libsrc/atari/sound.s b/libsrc/atari/sound.s index 0d2362318..a8d11fd82 100644 --- a/libsrc/atari/sound.s +++ b/libsrc/atari/sound.s @@ -2,14 +2,16 @@ ; Mariano Domínguez ; 2022-12-4 ; -; atari lib +; this file provides an equivalent to the BASIC SOUND function +; +; void __fastcall__ _sound (unsigned char voice, unsigned char frequency, unsigned char distortion, unsigned char volume); ; .include "atari.inc" .export __sound .import popa .importzp tmp1,tmp2 -; play sound, arguments: voice, pitch, distortion, volume. same as BASIC +; play sound, arguments: voice, pitch, distortion, volume .proc __sound sta tmp2 ;save volume jsr popa ;get distortion From ed909dba1d819f324f2cf77eb9862946b64474f2 Mon Sep 17 00:00:00 2001 From: tomas <93524600+TommiRommi@users.noreply.github.com> Date: Fri, 27 Jan 2023 10:52:20 +0000 Subject: [PATCH 1982/2710] fixed spelling mistake there was a spelling mistake in one of pointer warnings --- src/cc65/typeconv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 18a9f4dfa..683cb2356 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -238,10 +238,10 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) ** void pointers, just with warnings. */ if (Result.C == TC_PTR_SIGN_DIFF) { - /* Specific warning for pointee signedness difference */ + /* Specific warning for pointer signess difference */ if (IS_Get (&WarnPointerSign)) { TypeCompatibilityDiagnostic (NewType, Expr->Type, - 0, "Pointer conversion to '%s' from '%s' changes pointee signedness"); + 0, "Pointer conversion to '%s' from '%s' changes pointer signess"); } } else if ((Result.C <= TC_PTR_INCOMPATIBLE || (Result.F & TCF_INCOMPATIBLE_QUAL) != 0)) { From 1d73c8d2592f0153138f3c5706d24abd293f70b5 Mon Sep 17 00:00:00 2001 From: tomas <93524600+TommiRommi@users.noreply.github.com> Date: Fri, 27 Jan 2023 16:53:36 +0000 Subject: [PATCH 1983/2710] Update typeconv.c --- src/cc65/typeconv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 683cb2356..f77ec3951 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -238,10 +238,10 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) ** void pointers, just with warnings. */ if (Result.C == TC_PTR_SIGN_DIFF) { - /* Specific warning for pointer signess difference */ + /* Specific warning for pointer signedness difference */ if (IS_Get (&WarnPointerSign)) { TypeCompatibilityDiagnostic (NewType, Expr->Type, - 0, "Pointer conversion to '%s' from '%s' changes pointer signess"); + 0, "Pointer conversion to '%s' from '%s' changes pointer signedness"); } } else if ((Result.C <= TC_PTR_INCOMPATIBLE || (Result.F & TCF_INCOMPATIBLE_QUAL) != 0)) { From 1764b7aca9cbcf822649e5c69694c1f4158dab64 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 28 Jan 2023 12:29:05 +0100 Subject: [PATCH 1984/2710] fix for #1941, taken from https://github.com/acqn/cc65/commit/22d435b68966b86929d3c393f3bbc1593b261cee --- src/cc65/shiftexpr.c | 37 +++++++++++++++++--------------- test/val/bug1941-shift-by-zero.c | 28 ++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 17 deletions(-) create mode 100644 test/val/bug1941-shift-by-zero.c diff --git a/src/cc65/shiftexpr.c b/src/cc65/shiftexpr.c index b8fb70434..1224bfecb 100644 --- a/src/cc65/shiftexpr.c +++ b/src/cc65/shiftexpr.c @@ -169,27 +169,21 @@ void ShiftExpr (struct ExprDesc* Expr) } } - /* If the shift count is zero, nothing happens. If the left hand - ** side is a constant, the result is constant. - */ - if (Expr2.IVal == 0 || lconst) { - - /* Set the type */ + /* If the left hand side is a constant, the result is constant */ + if (lconst) { + /* Set the result type */ Expr->Type = ResultType; - if (lconst) { - - /* Evaluate the result */ - switch (Tok) { - case TOK_SHL: Expr->IVal <<= Expr2.IVal; break; - case TOK_SHR: Expr->IVal >>= Expr2.IVal; break; - default: /* Shutup gcc */ break; - } - - /* Limit the calculated value to the range of its type */ - LimitExprValue (Expr, 1); + /* Evaluate the result */ + switch (Tok) { + case TOK_SHL: Expr->IVal <<= Expr2.IVal; break; + case TOK_SHR: Expr->IVal >>= Expr2.IVal; break; + default: /* Shutup gcc */ break; } + /* Limit the calculated value to the range of its type */ + LimitExprValue (Expr, 1); + /* Result is already got, remove the generated code */ RemoveCode (&Mark1); @@ -197,6 +191,15 @@ void ShiftExpr (struct ExprDesc* Expr) continue; } + /* If the shift count is zero, nothing happens */ + if (Expr2.IVal == 0) { + /* Result is already got, remove the pushing code */ + RemoveCode (&Mark2); + + /* Be sure to mark the value as in the primary */ + goto MakeRVal; + } + /* If we're shifting an integer or unsigned to the right, the lhs ** has a quasi-const address, and the shift count is larger than 8, ** we can load just the high byte as a char with the correct diff --git a/test/val/bug1941-shift-by-zero.c b/test/val/bug1941-shift-by-zero.c new file mode 100644 index 000000000..eaeba814f --- /dev/null +++ b/test/val/bug1941-shift-by-zero.c @@ -0,0 +1,28 @@ +/* Bug 1941 - Bitwise shift char types by 0 count results in out-of-range access */ + +#include <stdio.h> +#include <stdint.h> + +uint8_t foo = 42U; /* "Low byte" */ +uint8_t goo = 1U; /* "High byte" - you need it to reproduce the issue */ +int16_t bar = 256; /* ...or just do it with this */ + +_Static_assert (sizeof (foo >> 0) == sizeof (int), "Shift result should be int-promoted"); +_Static_assert (sizeof ((int8_t)bar << 0) == sizeof (int), "Shift result should be int-promoted"); + +unsigned failures; + +int main(void) +{ + if (foo >> 0 != foo) { + ++failures; + printf("foo failed\n"); + } + + if ((int8_t)bar << 0 != (int8_t)bar) { + ++failures; + printf("bar failed\n"); + } + + return failures; +} From 8ac5e2f7b6292b594cdde0bcfe66b426eb8c5741 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 28 Jan 2023 15:08:00 +0100 Subject: [PATCH 1985/2710] fix devicestr call, so related posix function work on cbm targets --- libsrc/cbm/initcwd.s | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/libsrc/cbm/initcwd.s b/libsrc/cbm/initcwd.s index d5e5b9296..7064c16e1 100644 --- a/libsrc/cbm/initcwd.s +++ b/libsrc/cbm/initcwd.s @@ -9,8 +9,6 @@ .import pusha0, tosudiva0 .importzp sreg, ptr1, ptr2 - .macpack generic - initcwd: lda #<__cwd ldx #>__cwd @@ -27,15 +25,20 @@ devicestr: lda #10 jsr tosudiva0 ldy #0 - lda sreg - beq @L0 ; >=10 - add #'0' + tax ; result of the division (lsb) + beq @L0 ; < 10 + + clc + adc #'0' sta (ptr2),y iny -@L0: lda ptr1 ; rem - add #'0' +@L0: + lda sreg ; reminder of the division + clc + adc #'0' sta (ptr2),y iny - lda #0 + + lda #0 ; terminating 0 sta (ptr2),y rts From 727b3288d67ffc0642f2ef5b424a3e4cd4b39c00 Mon Sep 17 00:00:00 2001 From: Spiro Trikaliotis <spiro.trikaliotis@gmx.de> Date: Fri, 17 Feb 2023 17:22:55 +0100 Subject: [PATCH 1986/2710] Remove .exe from file output Whenever a tool like ld65 wants to output its name into a log file, it uses the name of command-line parameter 0. However, this parameter also includes the .exe suffix if it is on Windows. This patch removes the .exe suffix, so that the output is clean and consistent across platforms. This fixes #1990. --- src/common/cmdline.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/common/cmdline.c b/src/common/cmdline.c index 4de79a419..6b24a75fb 100644 --- a/src/common/cmdline.c +++ b/src/common/cmdline.c @@ -181,6 +181,17 @@ void InitCmdLine (int* aArgCount, char*** aArgVec, const char* aProgName) /* Use the default */ ProgName = aProgName; } + else { + /* remove .exe extension, if there is any + ** + ** Note: This creates a new string that is + ** never free()d. + ** As this is exactly only string, and it + ** lives for the whole lifetime of the tool, + ** this is not an issue. + */ + ProgName = MakeFilename (ProgName, ""); + } } /* Make a CmdLine struct */ From 78263cd24b301406f9567f3e0a4fa03488445656 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 17 Feb 2023 23:48:32 -0500 Subject: [PATCH 1987/2710] Fix OptStackOps label migration case for toscmpbool, add test case --- src/cc65/coptstop.c | 2 ++ test/val/bug1989.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 test/val/bug1989.c diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 4d0151c55..8b2821dcd 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -1153,6 +1153,8 @@ static unsigned Opt_a_toscmpbool (StackOpData* D, const char* BoolTransformer) /* Save lhs into zeropage */ AddStoreLhsA (D); + /* AddStoreLhsA may have moved the OpIndex, recalculate insertion point to prevent label migration. */ + D->IP = D->OpIndex + 1; /* cmp */ X = NewCodeEntry (OP65_CMP, AM65_ZP, D->ZPLo, 0, D->OpEntry->LI); diff --git a/test/val/bug1989.c b/test/val/bug1989.c new file mode 100644 index 000000000..b3e3d4c8d --- /dev/null +++ b/test/val/bug1989.c @@ -0,0 +1,40 @@ + +/* bug #1989 - OptStackOps Opt_a_toscmpbool bypassed a comparison, discovered in 544a49c */ + +#include <stdlib.h> + +unsigned char i,r,j; + +void fail() // for the r=0 case, the == comparison was getting jumped over by OptStackOps +{ + if ((i & 0x1f) == (r ? 0 : 16)) j -=8; +} + +void pass() +{ + if ((i & 0x1f) == (unsigned char)(r ? 0 : 16)) j -= 8; +} + +void test(unsigned char ti, unsigned char tr, unsigned char tj) +{ + unsigned char rj; + i = ti; + r = tr; + j = tj; + pass(); + rj = j; + i = ti; + r = tr; + j = tj; + fail(); + if (j != rj) exit(1); +} + +int main(void) +{ + test( 1,0,33); + test( 0,0,33); + test( 1,1,33); + test(16,1,33); + return 0; +} From 4e411e8526df0c627c5ab0e6338853a82a51c0b2 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 18 Feb 2023 00:13:34 -0500 Subject: [PATCH 1988/2710] Opt_a_tosicmp likely has a bug which will incorrectly migrate a label on a replaced op in one case. --- src/cc65/coptstop.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 8b2821dcd..ae40a55e9 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -1208,6 +1208,8 @@ static unsigned Opt_a_tosicmp (StackOpData* D) /* RHS src is not directly comparable */ X = NewCodeEntry (OP65_STA, AM65_ZP, D->ZPHi, 0, D->OpEntry->LI); InsertEntry (D, X, D->Rhs.A.ChgIndex + 1); + /* RHS insertion may have moved the OpIndex, recalculate insertion point to prevent label migration. */ + D->IP = D->OpIndex + 1; /* Cmp with stored RHS */ X = NewCodeEntry (OP65_CMP, AM65_ZP, D->ZPHi, 0, D->OpEntry->LI); From 4d30333099d84dc9266bd6cc3febbdb559e7a5e6 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sun, 19 Feb 2023 05:31:46 -0500 Subject: [PATCH 1989/2710] sim65 path length safety for PVOpen --- src/sim65/paravirt.c | 13 ++++++++++--- src/sim65/paravirt.h | 3 +++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index db4120326..9e5c28432 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -63,6 +63,7 @@ /* sim65 */ #include "6502.h" +#include "error.h" #include "memory.h" #include "paravirt.h" @@ -166,7 +167,7 @@ static void PVArgs (CPURegs* Regs) static void PVOpen (CPURegs* Regs) { - char Path[1024]; + char Path[PVOPEN_PATH_SIZE]; int OFlag = O_INITIAL; int OMode = 0; unsigned RetVal, I = 0; @@ -183,9 +184,15 @@ static void PVOpen (CPURegs* Regs) } do { - Path[I] = MemReadByte (Name++); + if (!(Path[I] = MemReadByte ((Name + I) & 0xFFFF))) { + break; + } + ++I; + if (I >= PVOPEN_PATH_SIZE) { + Error("PVOpen path too long at address $%04X",Name); + } } - while (Path[I++]); + while (1); Print (stderr, 2, "PVOpen (\"%s\", $%04X)\n", Path, Flags); diff --git a/src/sim65/paravirt.h b/src/sim65/paravirt.h index bfa38e047..3badb50ea 100644 --- a/src/sim65/paravirt.h +++ b/src/sim65/paravirt.h @@ -47,6 +47,9 @@ #define PARAVIRT_BASE 0xFFF4 /* Lowest address used by a paravirtualization hook */ +#define PVOPEN_PATH_SIZE 1024 +/* Maximum path size supported by PVOpen */ + /*****************************************************************************/ From 5c12659cf499343deff1d81c0c4ac235a74192c3 Mon Sep 17 00:00:00 2001 From: compyx <b.wassink@ziggo.nl> Date: Sun, 19 Feb 2023 14:01:14 +0100 Subject: [PATCH 1990/2710] make avail: check for presence of binaries before creating symbolic links To avoid creating broken symlinks, first check if the binaries exists in bin/ and exit when they don't, with a message to first run `make`. --- src/Makefile | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Makefile b/src/Makefile index 8356d0001..a37fa5811 100644 --- a/src/Makefile +++ b/src/Makefile @@ -110,11 +110,21 @@ $(RM) /usr/local/bin/$(prog) endef # UNAVAIL_recipe +define AVAIL_check_prog + +@if [ ! -e ../bin/$(prog) ]; then \ + echo "failed to locate $(prog), please run make first"; \ + false; \ +fi + +endef # AVAIL_check_prog + install: $(INSTALL) -d $(DESTDIR)$(bindir) $(INSTALL) ../bin/* $(DESTDIR)$(bindir) avail: + $(foreach prog,$(PROGS),$(AVAIL_check_prog)) $(foreach prog,$(PROGS),$(AVAIL_recipe)) unavail: From 2ac055383f4619cea09988aa79c2b4324c1bfb40 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sun, 19 Feb 2023 08:14:04 -0500 Subject: [PATCH 1991/2710] ld65 fix overwrite segments adding wrong padding or causing internal errors --- src/ld65/config.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/ld65/config.c b/src/ld65/config.c index c22ced1ef..c101bd1c6 100644 --- a/src/ld65/config.c +++ b/src/ld65/config.c @@ -1945,6 +1945,10 @@ unsigned CfgProcess (void) /* Remember the start address before handling this segment */ unsigned long StartAddr = Addr; + /* For computing FillLevel */ + unsigned long FillLevel; + unsigned long FillAdded = 0; + /* Take note of "overwrite" segments and make sure there are no ** other segment types following them in current memory region. */ @@ -2081,14 +2085,19 @@ unsigned CfgProcess (void) /* Increment the fill level of the memory area; and, check for an ** overflow. */ - M->FillLevel = Addr + S->Seg->Size - M->Start; - if (M->FillLevel > M->Size && (M->Flags & MF_OVERFLOW) == 0) { + FillLevel = Addr + S->Seg->Size - M->Start; + if (FillLevel > M->Size && (M->Flags & MF_OVERFLOW) == 0) { ++Overflows; M->Flags |= MF_OVERFLOW; CfgWarning (GetSourcePos (M->LI), "Segment '%s' overflows memory area '%s' by %lu byte%c", GetString (S->Name), GetString (M->Name), - M->FillLevel - M->Size, (M->FillLevel - M->Size == 1) ? ' ' : 's'); + FillLevel - M->Size, (FillLevel - M->Size == 1) ? ' ' : 's'); + } + if (FillLevel > M->FillLevel) { + /* Regular segments increase FillLevel. Overwrite segments may increase but not decrease FillLevel. */ + FillAdded = FillLevel - M->FillLevel; + M->FillLevel = FillLevel; } /* If requested, define symbols for the start and size of the @@ -2107,13 +2116,14 @@ unsigned CfgProcess (void) Addr += S->Seg->Size; /* If this segment will go out to the file, or its place - ** in the file will be filled, then increase the file size, - ** unless it's an OVERWRITE segment. + ** in the file will be filled, then increase the file size. + ** An OVERWRITE segment will only increase the size if it overlapped some of the fill area. */ if (S->Load == M && - ((S->Flags & SF_BSS) == 0 || (M->Flags & MF_FILL) != 0) && - (S->Flags & SF_OVERWRITE) == 0) { - M->F->Size += Addr - StartAddr; + ((S->Flags & SF_BSS) == 0 || (M->Flags & MF_FILL) != 0)) { + M->F->Size += (!(S->Flags & SF_OVERWRITE)) ? + (Addr - StartAddr) : + FillAdded; } } From 4fc19a3d4c27d193297e928171f85ab361ac2ae7 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sun, 19 Feb 2023 08:37:07 -0500 Subject: [PATCH 1992/2710] ld65 overwrite segment should pad with fill value if the desired seek position is beyond the end of the file so far --- src/ld65/bin.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/ld65/bin.c b/src/ld65/bin.c index bd822cc23..15b534f66 100644 --- a/src/ld65/bin.c +++ b/src/ld65/bin.c @@ -193,8 +193,16 @@ static void BinWriteMem (BinDesc* D, MemoryArea* M) NewAddr += M->Start; } if (DoWrite || (M->Flags & MF_FILL) != 0) { - /* Seek in "overwrite" segments */ if (S->Flags & SF_OVERWRITE) { + /* Seek in "overwrite" segments. Fill if the seek position has not been reached yet. */ + unsigned long FileLength; + unsigned long SeekTarget = NewAddr - M->Start + M->FileOffs; + fseek (D->F, 0, SEEK_END); + FileLength = ftell (D->F); + if (SeekTarget > FileLength) { + WriteMult (D->F, M->FillVal, SeekTarget - FileLength); + PrintNumVal ("SF_OVERWRITE", SeekTarget - FileLength); + } fseek (D->F, NewAddr - M->Start + M->FileOffs, SEEK_SET); } else { WriteMult (D->F, M->FillVal, NewAddr-Addr); From 5bc8ff98de9e7d942b7920645ce1a162d93af3ab Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sun, 19 Feb 2023 09:01:17 -0500 Subject: [PATCH 1993/2710] error if computed memory size is negative --- src/ld65/config.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/ld65/config.c b/src/ld65/config.c index c22ced1ef..6606df7e3 100644 --- a/src/ld65/config.c +++ b/src/ld65/config.c @@ -1936,6 +1936,11 @@ unsigned CfgProcess (void) GetString (M->Name)); } M->Size = GetExprVal (M->SizeExpr); + if (M->Size >= 0x80000000) { + CfgError (GetSourcePos (M->LI), + "Size of memory area '%s' is negative: %ld", + GetString (M->Name), (long)M->Size); + } /* Walk through the segments in this memory area */ for (J = 0; J < CollCount (&M->SegList); ++J) { From 3df5b9f41faabcbff982713db485d91cc8ac9a6c Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sun, 19 Feb 2023 09:30:07 -0500 Subject: [PATCH 1994/2710] relocate dasm test start-addr to avoid producing negative memory area size with none.cfg (conflicted with stack position at $8000) --- test/dasm/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/dasm/Makefile b/test/dasm/Makefile index d9ac7ac21..e84560ad2 100644 --- a/test/dasm/Makefile +++ b/test/dasm/Makefile @@ -30,7 +30,7 @@ ISEQUAL = ../../testwrk/isequal$(EXE) CC = gcc CFLAGS = -O2 -START = --start-addr 0x8000 +START = --start-addr 0x7000 .PHONY: all clean From 68ce335f59b9d6d69b6d348ec1e764162021bdbe Mon Sep 17 00:00:00 2001 From: compyx <b.wassink@ziggo.nl> Date: Sun, 19 Feb 2023 19:17:45 +0100 Subject: [PATCH 1995/2710] Replace shell code with GNU Make conditionals and functions Use `ifeq` to provide two rules for the `avail` target: one that reports an error if any of the symlink targets are missing and one that installs the symlinks for the targets if they're all present. --- src/Makefile | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/Makefile b/src/Makefile index a37fa5811..034a2230f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -110,22 +110,16 @@ $(RM) /usr/local/bin/$(prog) endef # UNAVAIL_recipe -define AVAIL_check_prog - -@if [ ! -e ../bin/$(prog) ]; then \ - echo "failed to locate $(prog), please run make first"; \ - false; \ -fi - -endef # AVAIL_check_prog - install: $(INSTALL) -d $(DESTDIR)$(bindir) $(INSTALL) ../bin/* $(DESTDIR)$(bindir) avail: - $(foreach prog,$(PROGS),$(AVAIL_check_prog)) +ifneq ($(patsubst %,../bin/%,$(PROGS)),$(wildcard $(patsubst %,../bin/%,$(PROGS)))) + $(error executables are missing, please run make first) +else $(foreach prog,$(PROGS),$(AVAIL_recipe)) +endif unavail: $(foreach prog,$(PROGS),$(UNAVAIL_recipe)) From 864eecf7c3764741855801de3228f4363b4d69fa Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Mon, 20 Feb 2023 20:08:58 -0500 Subject: [PATCH 1996/2710] ca16 doc for A8/A18/I8/I16: use "assume" instead of "switch" to avoid implying that a hardware state is changed. See: #1759 --- doc/ca65.sgml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 19fd3aa2a..c84c57353 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -2019,7 +2019,7 @@ Here's a list of all control commands and a description, what they do: <sect1><tt>.A16</tt><label id=".A16"><p> - Valid only in 65816 mode. Switch the accumulator to 16 bit. + Valid only in 65816 mode. Assume the accumulator is 16 bit. Note: This command will not emit any code, it will tell the assembler to create 16 bit operands for immediate accumulator addressing mode. @@ -2029,7 +2029,7 @@ Here's a list of all control commands and a description, what they do: <sect1><tt>.A8</tt><label id=".A8"><p> - Valid only in 65816 mode. Switch the accumulator to 8 bit. + Valid only in 65816 mode. Assume the accumulator is 8 bit. Note: This command will not emit any code, it will tell the assembler to create 8 bit operands for immediate accu addressing mode. @@ -3036,7 +3036,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.I16</tt><label id=".I16"><p> - Valid only in 65816 mode. Switch the index registers to 16 bit. + Valid only in 65816 mode. Assume the index registers are 16 bit. Note: This command will not emit any code, it will tell the assembler to create 16 bit operands for immediate operands. @@ -3047,7 +3047,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.I8</tt><label id=".I8"><p> - Valid only in 65816 mode. Switch the index registers to 8 bit. + Valid only in 65816 mode. Assume the index registers are 8 bit. Note: This command will not emit any code, it will tell the assembler to create 8 bit operands for immediate operands. From f1134cc5f18aef555e3c8573d0fa62b17f3908a0 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Mon, 20 Feb 2023 20:42:09 -0500 Subject: [PATCH 1997/2710] ca65 improve error for unclosed scopes See: #1779 --- src/ca65/symtab.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/ca65/symtab.c b/src/ca65/symtab.c index afe7b3ad6..a01d14bd8 100644 --- a/src/ca65/symtab.c +++ b/src/ca65/symtab.c @@ -570,7 +570,18 @@ void SymCheck (void) /* Check for open scopes */ if (CurrentScope->Parent != 0) { - Error ("Local scope was not closed"); + if (CurrentScope->Label) { + /* proc has a label indicating the line it was opened. */ + LIError (&CurrentScope->Label->DefLines, + "Local proc '%s' was not closed", + GetString (CurrentScope->Name)); + } else { + /* scope has no label to track a line number, uses end-of-document line instead. + ** Anonymous scopes will reveal their internal automatic name. + */ + Error ("Local scope '%s' was not closed", + GetString (CurrentScope->Name)); + } } /* First pass: Walk through all symbols, checking for undefined's and From 45d0d603495b7f2181301ed4db4acdc98d7a4e6b Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Mon, 20 Feb 2023 22:24:26 -0500 Subject: [PATCH 1998/2710] --warnings-as-errors for ca65 and ld65 --- doc/ca65.sgml | 8 +++++++ doc/ld65.sgml | 8 +++++++ src/ca65/global.c | 1 + src/ca65/global.h | 1 + src/ca65/main.c | 56 +++++++++++++++++++++++++++++----------------- src/ld65/error.c | 14 ++++++++++++ src/ld65/error.h | 11 +++++++++ src/ld65/global.c | 23 ++++++++++--------- src/ld65/global.h | 23 ++++++++++--------- src/ld65/main.c | 14 ++++++++++++ src/ld65/scanner.c | 3 +++ 11 files changed, 119 insertions(+), 43 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 19fd3aa2a..da094359c 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -125,6 +125,7 @@ Long options: --target sys Set the target system --verbose Increase verbosity --version Print the assembler version + --warnings-as-errors Treat warnings as errors --------------------------------------------------------------------------- </verb></tscreen> @@ -359,6 +360,13 @@ Here is a description of all the command line options: warning level is 1, and it would probably be silly to set it to something lower. + + <label id="option--warnings-as-errors"> + <tag><tt>--warnings-as-errors</tt></tag> + + An error will be generated if any warnings were produced. + + </descrip> <p> diff --git a/doc/ld65.sgml b/doc/ld65.sgml index 307caeaa4..1ad04b395 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -90,6 +90,7 @@ Long options: --start-group Start a library group --target sys Set the target system --version Print the linker version + --warnings-as-errors Treat warnings as errors --------------------------------------------------------------------------- </verb></tscreen> @@ -330,6 +331,13 @@ Here is a description of all of the command-line options: directory, in the list of directories specified using <tt/--obj-path/, in directories given by environment variables, and in a built-in default directory. + + <label id="option--warnings-as-errors"> + <tag><tt>--warnings-as-errors</tt></tag> + + An error will be generated if any warnings were produced. + + </descrip> diff --git a/src/ca65/global.c b/src/ca65/global.c index a216fc406..81ff68a79 100644 --- a/src/ca65/global.c +++ b/src/ca65/global.c @@ -67,6 +67,7 @@ unsigned char LineCont = 0; /* Allow line continuation */ unsigned char LargeAlignment = 0; /* Don't warn about large alignments */ unsigned char RelaxChecks = 0; /* Relax a few assembler checks */ unsigned char StringEscapes = 0; /* Allow C-style escapes in strings */ +unsigned char WarningsAsErrors = 0; /* Error if any warnings */ /* Emulation features */ unsigned char DollarIsPC = 0; /* Allow the $ symbol as current PC */ diff --git a/src/ca65/global.h b/src/ca65/global.h index 77d90beca..26877032e 100644 --- a/src/ca65/global.h +++ b/src/ca65/global.h @@ -69,6 +69,7 @@ extern unsigned char LineCont; /* Allow line continuation */ extern unsigned char LargeAlignment; /* Don't warn about large alignments */ extern unsigned char RelaxChecks; /* Relax a few assembler checks */ extern unsigned char StringEscapes; /* Allow C-style escapes in strings */ +extern unsigned char WarningsAsErrors; /* Error if any warnings */ /* Emulation features */ extern unsigned char DollarIsPC; /* Allow the $ symbol as current PC */ diff --git a/src/ca65/main.c b/src/ca65/main.c index 4146aaf11..9710924bf 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -656,6 +656,15 @@ static void OptVersion (const char* Opt attribute ((unused)), +static void OptWarningsAsErrors (const char* Opt attribute ((unused)), + const char* Arg attribute ((unused))) +/* Generate an error if any warnings occur */ +{ + WarningsAsErrors = 1; +} + + + static void DoPCAssign (void) /* Start absolute code */ { @@ -919,27 +928,28 @@ int main (int argc, char* argv []) { /* Program long options */ static const LongOpt OptTab[] = { - { "--auto-import", 0, OptAutoImport }, - { "--bin-include-dir", 1, OptBinIncludeDir }, - { "--cpu", 1, OptCPU }, - { "--create-dep", 1, OptCreateDep }, - { "--create-full-dep", 1, OptCreateFullDep }, - { "--debug", 0, OptDebug }, - { "--debug-info", 0, OptDebugInfo }, - { "--feature", 1, OptFeature }, - { "--help", 0, OptHelp }, - { "--ignore-case", 0, OptIgnoreCase }, - { "--include-dir", 1, OptIncludeDir }, - { "--large-alignment", 0, OptLargeAlignment }, - { "--list-bytes", 1, OptListBytes }, - { "--listing", 1, OptListing }, - { "--memory-model", 1, OptMemoryModel }, - { "--pagelength", 1, OptPageLength }, - { "--relax-checks", 0, OptRelaxChecks }, - { "--smart", 0, OptSmart }, - { "--target", 1, OptTarget }, - { "--verbose", 0, OptVerbose }, - { "--version", 0, OptVersion }, + { "--auto-import", 0, OptAutoImport }, + { "--bin-include-dir", 1, OptBinIncludeDir }, + { "--cpu", 1, OptCPU }, + { "--create-dep", 1, OptCreateDep }, + { "--create-full-dep", 1, OptCreateFullDep }, + { "--debug", 0, OptDebug }, + { "--debug-info", 0, OptDebugInfo }, + { "--feature", 1, OptFeature }, + { "--help", 0, OptHelp }, + { "--ignore-case", 0, OptIgnoreCase }, + { "--include-dir", 1, OptIncludeDir }, + { "--large-alignment", 0, OptLargeAlignment }, + { "--list-bytes", 1, OptListBytes }, + { "--listing", 1, OptListing }, + { "--memory-model", 1, OptMemoryModel }, + { "--pagelength", 1, OptPageLength }, + { "--relax-checks", 0, OptRelaxChecks }, + { "--smart", 0, OptSmart }, + { "--target", 1, OptTarget }, + { "--verbose", 0, OptVerbose }, + { "--version", 0, OptVersion }, + { "--warnings-as-errors", 0, OptWarningsAsErrors }, }; /* Name of the global name space */ @@ -1144,6 +1154,10 @@ int main (int argc, char* argv []) SegDump (); } + if (WarningCount > 0 && WarningsAsErrors) { + Error("Warnings as errors"); + } + /* If we didn't have an errors, finish off the line infos */ DoneLineInfo (); diff --git a/src/ld65/error.c b/src/ld65/error.c index 20dfd4537..344e4c1b3 100644 --- a/src/ld65/error.c +++ b/src/ld65/error.c @@ -46,6 +46,17 @@ +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* Statistics */ +unsigned WarningCount = 0; + + + /*****************************************************************************/ /* Code */ /*****************************************************************************/ @@ -66,6 +77,9 @@ void Warning (const char* Format, ...) fprintf (stderr, "%s: Warning: %s\n", ProgName, SB_GetConstBuf (&S)); SB_Done (&S); + + /* Count warnings */ + ++WarningCount; } diff --git a/src/ld65/error.h b/src/ld65/error.h index 75b8e0bc1..1285ca725 100644 --- a/src/ld65/error.h +++ b/src/ld65/error.h @@ -43,6 +43,17 @@ +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* Statistics */ +extern unsigned WarningCount; + + + /*****************************************************************************/ /* Code */ /*****************************************************************************/ diff --git a/src/ld65/global.c b/src/ld65/global.c index 8f43232fe..93dd65958 100644 --- a/src/ld65/global.c +++ b/src/ld65/global.c @@ -43,19 +43,20 @@ -const char* OutputName = "a.out"; /* Name of output file */ -unsigned OutputNameUsed = 0; /* Output name was used by %O */ +const char* OutputName = "a.out"; /* Name of output file */ +unsigned OutputNameUsed = 0; /* Output name was used by %O */ -unsigned ModuleId = 0; /* Id for o65 module */ +unsigned ModuleId = 0; /* Id for o65 module */ /* Start address */ -unsigned char HaveStartAddr = 0; /* Start address not given */ -unsigned long StartAddr = 0x200; /* Start address */ +unsigned char HaveStartAddr = 0; /* Start address not given */ +unsigned long StartAddr = 0x200; /* Start address */ -unsigned char VerboseMap = 0; /* Verbose map file */ -unsigned char AllowMultDef = 0; /* Allow multiple definitions */ -unsigned char LargeAlignment = 0; /* Don't warn about large alignments */ +unsigned char VerboseMap = 0; /* Verbose map file */ +unsigned char AllowMultDef = 0; /* Allow multiple definitions */ +unsigned char LargeAlignment = 0; /* Don't warn about large alignments */ +unsigned char WarningsAsErrors = 0; /* Error if any warnings */ -const char* MapFileName = 0; /* Name of the map file */ -const char* LabelFileName = 0; /* Name of the label file */ -const char* DbgFileName = 0; /* Name of the debug file */ +const char* MapFileName = 0; /* Name of the map file */ +const char* LabelFileName = 0; /* Name of the label file */ +const char* DbgFileName = 0; /* Name of the debug file */ diff --git a/src/ld65/global.h b/src/ld65/global.h index a923f6de5..ad85daf0a 100644 --- a/src/ld65/global.h +++ b/src/ld65/global.h @@ -44,21 +44,22 @@ -extern const char* OutputName; /* Name of output file */ -extern unsigned OutputNameUsed; /* Output name was used by %O */ +extern const char* OutputName; /* Name of output file */ +extern unsigned OutputNameUsed; /* Output name was used by %O */ -extern unsigned ModuleId; /* Id for o65 module */ +extern unsigned ModuleId; /* Id for o65 module */ -extern unsigned char HaveStartAddr; /* True if start address was given */ -extern unsigned long StartAddr; /* Start address */ +extern unsigned char HaveStartAddr; /* True if start address was given */ +extern unsigned long StartAddr; /* Start address */ -extern unsigned char VerboseMap; /* Verbose map file */ -extern unsigned char AllowMultDef; /* Allow multiple definitions */ -extern unsigned char LargeAlignment; /* Don't warn about large alignments */ +extern unsigned char VerboseMap; /* Verbose map file */ +extern unsigned char AllowMultDef; /* Allow multiple definitions */ +extern unsigned char LargeAlignment; /* Don't warn about large alignments */ +extern unsigned char WarningsAsErrors; /* Error if any warnings */ -extern const char* MapFileName; /* Name of the map file */ -extern const char* LabelFileName; /* Name of the label file */ -extern const char* DbgFileName; /* Name of the debug file */ +extern const char* MapFileName; /* Name of the map file */ +extern const char* LabelFileName; /* Name of the label file */ +extern const char* DbgFileName; /* Name of the debug file */ diff --git a/src/ld65/main.c b/src/ld65/main.c index f2415a914..70e9c84d1 100644 --- a/src/ld65/main.c +++ b/src/ld65/main.c @@ -559,6 +559,15 @@ static void OptVersion (const char* Opt attribute ((unused)), +static void OptWarningsAsErrors (const char* Opt attribute ((unused)), + const char* Arg attribute ((unused))) +/* Generate an error if any warnings occur */ +{ + WarningsAsErrors = 1; +} + + + static void OptMultDef (const char* Opt attribute ((unused)), const char* Arg attribute ((unused))) /* Set flag to allow multiple definitions of a global symbol */ @@ -637,6 +646,7 @@ static void ParseCommandLine(void) { "--start-group", 0, CmdlOptStartGroup }, { "--target", 1, CmdlOptTarget }, { "--version", 0, OptVersion }, + { "--warnings-as-errors", 0, OptWarningsAsErrors }, }; unsigned I; @@ -845,6 +855,10 @@ int main (int argc, char* argv []) (MemoryAreaOverflows > 1) ? 's' : ' '); } + if (WarningCount > 0 && WarningsAsErrors) { + Error("Warnings as errors"); + } + /* Create the output file */ CfgWriteTarget (); diff --git a/src/ld65/scanner.c b/src/ld65/scanner.c index 718951aa5..5f53e5765 100644 --- a/src/ld65/scanner.c +++ b/src/ld65/scanner.c @@ -95,6 +95,9 @@ void CfgWarning (const FilePos* Pos, const char* Format, ...) Warning ("%s:%u: %s", GetString (Pos->Name), Pos->Line, SB_GetConstBuf (&Buf)); SB_Done (&Buf); + + /* Count warnings */ + ++WarningCount; } From 99ecd9b69d698ad555d01bae5e3622ec1ca07f7b Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 21 Feb 2023 00:53:55 -0500 Subject: [PATCH 1999/2710] Document expected linker configuration and special segments used by cc65 --- doc/cc65-intern.sgml | 73 +++++++++++++++++++++++++++++++++++++++++++- doc/index.sgml | 2 +- 2 files changed, 73 insertions(+), 2 deletions(-) diff --git a/doc/cc65-intern.sgml b/doc/cc65-intern.sgml index 8e36578b5..904cee070 100644 --- a/doc/cc65-intern.sgml +++ b/doc/cc65-intern.sgml @@ -6,7 +6,8 @@ <abstract> Internal details of cc65 code generation, -such as calling assembly functions from C. +such as the expected linker configuration, +and calling assembly functions from C. </abstract> <!-- Table of contents --> @@ -16,6 +17,76 @@ such as calling assembly functions from C. +<sect>Linker configuration<p> + +The C libraries and code generation depend directly on a suitable linker configuration. +There are premade configuration files in the <tt/cfg// directory, normally chosen by the +linker's selected target. These can be used as a template for customization. + +The C libraries depend on several special segments to be defined in your linker configuration. +Generated code will also use some of them by default. +Some platform libraries have additional special segments. + +Memory areas are free to be defined in a way that is appropriate to each platform, +and the segments they contain are used as a layer of semantics and abstraction, +to allow much of the reorganization to be done with the linker config, +rather than requiring platform-specific code source changes. + +<sect1><tt/ZEROPAGE/ segment<p> + +Used by the C library and generated code for efficient internal and temporary state storage, +also called "pseudo-registers". + +<sect1><tt/STARTUP/ segment<p> + +Used by each platform instance of the C library in <tt/crt0.s/ to contain the entry point +of the program. + +The startup module will export <tt/__STARTUP__ : absolute = 1/ to force the linker to +always include <tt/crt0.s/ from the library. + +<sect1><tt/CODE/ segment<p> + +The default segment for generated code, and most C library code will be located here. + +Use <tt/#pragma code-name/ to redirect generated code to another segment. + +<sect1><tt/BSS/ segment<p> + +Used for uninitialized variables. +Originally an acronym for "Block Started by Symbol", but the meaning of this is now obscure. + +Use <tt/#pragma bss-name/ to redirect uninitialized variables to another segment. + +<sect1><tt/DATA/ segment<p> + +Used for initialized variables. + +On some platforms, this may be initialized as part of the program loading process, +but on others it may have a separate <tt/LOAD/ and <tt/RUN/ address, +allowing <tt/copydata/ to copy the initialization from the loaded location +into their run destination in RAM. + +Use <tt/#pragma data-name/ to redirect initialized variables to another segment. + +<sect1><tt/RODATA/ segment<p> + +Used for read-only (constant) data. + +Use <tt/#pragma rodata-name/ to redirect constant data to another segment. + +<sect1><tt/FEATURES/ table<p> + +This currently defines table locations for the <tt/CONDES/ +constructor, destructor, and interruptor features. +Some platform libraries use these. + +The constructors will be called with <tt/initlib/ at startup, +and the destructors with <tt/donelib/ at program exit. +Interruptors are called with <tt/callirq/. + + + <sect>Calling assembly functions from C<p> <sect1>Calling conventions<p> diff --git a/doc/index.sgml b/doc/index.sgml index bfce63486..727364028 100644 --- a/doc/index.sgml +++ b/doc/index.sgml @@ -59,7 +59,7 @@ Contains hints on creating the most effective code with cc65. <tag><htmlurl url="cc65-intern.html" name="cc65-intern.html"></tag> - Describes internal details of cc65, such as calling conventions. + Describes internal details of cc65: linker configuration, calling conventions, etc. <tag><htmlurl url="using-make.html" name="using-make.html"></tag> Build programs, using the GNU Make utility. From ccf3994e3b6f669d18ce83329adc1998a04923fe Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 21 Feb 2023 04:00:34 -0500 Subject: [PATCH 2000/2710] ca65 jsr/jmp/rts will not promote to jsl/jml/rtl by default, but can still be enabled with new feature long_jsr_jmp_rts --- doc/ca65.sgml | 23 ++++++++++++++++-- src/ca65/feature.c | 2 ++ src/ca65/feature.h | 1 + src/ca65/global.c | 1 + src/ca65/global.h | 1 + src/ca65/instr.c | 60 ++++++++++++++++++++++++++++++++++++++++------ 6 files changed, 79 insertions(+), 9 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 19fd3aa2a..276a2b697 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -183,7 +183,7 @@ Here is a description of all the command line options: Enable an emulation feature. This is identical as using <tt/.FEATURE/ in the source with two exceptions: Feature names must be lower case, and - each feature must be specified by using an extra <tt/--feature/ option, + each feature must be specified by using a separate <tt/--feature/ option, comma separated lists are not allowed. See the discussion of the <tt><ref id=".FEATURE" name=".FEATURE"></tt> @@ -2825,6 +2825,23 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH overridden. When using this feature, you may also get into trouble if later versions of the assembler define new keywords starting with a dot. + <tag><tt>long_jsr_jmp_rts</tt><label id="long_jsr_jmp_rts"></tag> + + Affects 65816 mode only. + + Allows <tt>jsr</tt> and <tt>jmp</tt> to produce long jumps if the target + address has been previously declared in a <tt>far</tt> segment, + or imported as <tt>far</tt>. + Otherwise <tt>jsl</tt> and <tt>jml</tt> must be used instead. + + Also allows <tt><ref id=".SMART" name=".SMART"></tt> to convert <tt>rts</tt> + to a long return <tt>rtl</tt> when the enclosing scope or memory model + indicates returning from a <tt>far</tt> procedure. + + This permits compatibility with the old behavior of this assembler, or other + assemblers which similarly allowed <tt>jsr</tt> and <tt>jmp</tt> to be used + this way. + <tag><tt>loose_char_term</tt><label id="loose_char_term"></tag> Accept single quotes as well as double quotes as terminators for char @@ -3994,7 +4011,9 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE" the assembler cannot trace the execution flow this may lead to false results in some cases. If in doubt, use the <tt/.Inn/ and <tt/.Ann/ instructions to tell the assembler about the current settings. - <item>In 65816 mode, replace a <tt/RTS/ instruction by <tt/RTL/ if it is + <item>In 65816 mode, if the <tt><ref id="long_jsr_jmp_rts" + name="long_jsr_jmp_rts"></tt> feature is enabled, + smart mode will replace a <tt/RTS/ instruction by <tt/RTL/ if it is used within a procedure declared as <tt/far/, or if the procedure has no explicit address specification, but it is <tt/far/ because of the memory model used. diff --git a/src/ca65/feature.c b/src/ca65/feature.c index b11345338..754b645cf 100644 --- a/src/ca65/feature.c +++ b/src/ca65/feature.c @@ -66,6 +66,7 @@ static const char* const FeatureKeys[FEAT_COUNT] = { "addrsize", "bracket_as_indirect", "string_escapes", + "long_jsr_jmp_rts", }; @@ -125,6 +126,7 @@ feature_t SetFeature (const StrBuf* Key) case FEAT_ADDRSIZE: AddrSize = 1; break; case FEAT_BRACKET_AS_INDIRECT: BracketAsIndirect = 1; break; case FEAT_STRING_ESCAPES: StringEscapes = 1; break; + case FEAT_LONG_JSR_JMP_RTS: LongJsrJmpRts = 1; break; default: /* Keep gcc silent */ break; } diff --git a/src/ca65/feature.h b/src/ca65/feature.h index 876f3c4a8..a29ee0172 100644 --- a/src/ca65/feature.h +++ b/src/ca65/feature.h @@ -68,6 +68,7 @@ typedef enum { FEAT_ADDRSIZE, FEAT_BRACKET_AS_INDIRECT, FEAT_STRING_ESCAPES, + FEAT_LONG_JSR_JMP_RTS, /* Special value: Number of features available */ FEAT_COUNT diff --git a/src/ca65/global.c b/src/ca65/global.c index a216fc406..962f368db 100644 --- a/src/ca65/global.c +++ b/src/ca65/global.c @@ -67,6 +67,7 @@ unsigned char LineCont = 0; /* Allow line continuation */ unsigned char LargeAlignment = 0; /* Don't warn about large alignments */ unsigned char RelaxChecks = 0; /* Relax a few assembler checks */ unsigned char StringEscapes = 0; /* Allow C-style escapes in strings */ +unsigned char LongJsrJmpRts = 0; /* Allow JSR/JMP/RTS as alias for JSL/JML/RTL */ /* Emulation features */ unsigned char DollarIsPC = 0; /* Allow the $ symbol as current PC */ diff --git a/src/ca65/global.h b/src/ca65/global.h index 77d90beca..c92291ad3 100644 --- a/src/ca65/global.h +++ b/src/ca65/global.h @@ -69,6 +69,7 @@ extern unsigned char LineCont; /* Allow line continuation */ extern unsigned char LargeAlignment; /* Don't warn about large alignments */ extern unsigned char RelaxChecks; /* Relax a few assembler checks */ extern unsigned char StringEscapes; /* Allow C-style escapes in strings */ +extern unsigned char LongJsrJmpRts; /* Allow JSR/JMP/RTS as alias for JSL/JML/RTL */ /* Emulation features */ extern unsigned char DollarIsPC; /* Allow the $ symbol as current PC */ diff --git a/src/ca65/instr.c b/src/ca65/instr.c index d0d7ce64c..745072a09 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -120,9 +120,21 @@ static void PutJMP (const InsDesc* Ins); ** to check for this case and is otherwise identical to PutAll. */ +static void PutJMP816 (const InsDesc* Ins); +/* Handle the JMP instruction for the 816. +** Allowing the long_jsr_jmp_rts feature to permit a long JMP. +** Note that JMP [abs] and JML [abs] are always both permitted for instruction $DC, +** because the [] notation for long indirection makes the generated instruction unambiguous. +*/ + +static void PutJSR816 (const InsDesc* Ins); +/* Handle the JSR instruction for the 816. +** Allowing the long_jsr_jmp_rts feature to permit a long JSR. +*/ + static void PutRTS (const InsDesc* Ins attribute ((unused))); /* Handle the RTS instruction for the 816. In smart mode emit a RTL opcode if -** the enclosing scope is FAR. +** the enclosing scope is FAR, but only if the long_jsr_jmp_rts feature applies. */ static void PutAll (const InsDesc* Ins); @@ -758,9 +770,9 @@ static const struct { { "INX", 0x0000001, 0xe8, 0, PutAll }, { "INY", 0x0000001, 0xc8, 0, PutAll }, { "JML", 0x4000010, 0x5c, 1, PutAll }, - { "JMP", 0x4010818, 0x4c, 6, PutAll }, + { "JMP", 0x4010818, 0x4c, 6, PutJMP816 }, { "JSL", 0x0000010, 0x20, 7, PutAll }, - { "JSR", 0x0010018, 0x20, 7, PutAll }, + { "JSR", 0x0010018, 0x20, 7, PutJSR816 }, { "LDA", 0x0b8f6fc, 0xa0, 0, PutAll }, { "LDX", 0x0c0030c, 0xa2, 1, PutAll }, { "LDY", 0x0c0006c, 0xa0, 1, PutAll }, @@ -1627,12 +1639,46 @@ static void PutJMP (const InsDesc* Ins) -static void PutRTS (const InsDesc* Ins attribute ((unused))) -/* Handle the RTS instruction for the 816. In smart mode emit a RTL opcode if -** the enclosing scope is FAR. +static void PutJMP816 (const InsDesc* Ins) +/* Handle the JMP instruction for the 816. +** Allowing the long_jsr_jmp_rts feature to permit a long JMP. +** Note that JMP [abs] and JML [abs] are always both permitted for instruction $DC, +** because the [] notation for long indirection makes the generated instruction unambiguous. */ { - if (SmartMode && CurrentScope->AddrSize == ADDR_SIZE_FAR) { + if (LongJsrJmpRts) { + PutJMP (Ins); + } else { + InsDesc InsAbs = *Ins; + InsAbs.AddrMode &= ~(AM65_ABS_LONG); + PutJMP (&InsAbs); + } +} + + + +static void PutJSR816 (const InsDesc* Ins) +/* Handle the JSR instruction for the 816. +** Allowing the long_jsr_jmp_rts feature to permit a long JSR. +*/ +{ + if (LongJsrJmpRts) { + PutAll (Ins); + } else { + InsDesc InsAbs = *Ins; + InsAbs.AddrMode &= ~(AM65_ABS_LONG); + PutJMP (&InsAbs); + } +} + + + +static void PutRTS (const InsDesc* Ins attribute ((unused))) +/* Handle the RTS instruction for the 816. In smart mode emit a RTL opcode if +** the enclosing scope is FAR, but only if the long_jsr_jmp_rts feature applies. +*/ +{ + if (LongJsrJmpRts && SmartMode && CurrentScope->AddrSize == ADDR_SIZE_FAR) { Emit0 (0x6B); /* RTL */ } else { Emit0 (0x60); /* RTS */ From 4b29d257d9c1aaa256b5bf1537daf9eb1e18a8ee Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 21 Feb 2023 04:38:17 -0500 Subject: [PATCH 2001/2710] fix dasm test65816 which relied on JMP automatic promotion, add test of new long_jsr_jmp_rts and smart --- test/dasm/test65816.s | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/test/dasm/test65816.s b/test/dasm/test65816.s index 3d764fb6e..1b447d0fe 100644 --- a/test/dasm/test65816.s +++ b/test/dasm/test65816.s @@ -151,10 +151,11 @@ BVC LABEL BVS LABEL BRL LABEL JMP $1234 -JMP $FEDCBA +JML $FEDCBA JMP ($1234) JMP ($1234,X) JMP [$1234] +JML [$1234] ; alternative to JMP [] JSL $123456 JSR $1234 JSR ($1234,X) @@ -271,3 +272,15 @@ BIT #$5432 LDA #$5432 LDX #$5432 LDY #$5432 + +; test of smart and long_jsr_jmp_rts +.smart +.proc short_rts : far +RTS ; not promoted to RTL +.endproc +.feature long_jsr_jmp_rts +JSR $FEDCBA ; promoted to JSL +JMP $FEDCBA ; promoted to JML +.proc long_rts : far +RTS ; promoted to RTL +.endproc From 2cdab999f54a8c6047657507e2e8a5f0a9242c0e Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 21 Feb 2023 05:22:28 -0500 Subject: [PATCH 2002/2710] dasm test extend 65816.info to include added code --- test/dasm/65816.info | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/dasm/65816.info b/test/dasm/65816.info index 2a3394680..a6d836688 100644 --- a/test/dasm/65816.info +++ b/test/dasm/65816.info @@ -3,5 +3,5 @@ GLOBAL { }; RANGE { START $8000; END $8229; ADDRMODE "MX"; TYPE Code;}; -RANGE { START $822a; END $824b; ADDRMODE "mx"; TYPE Code;}; +RANGE { START $822a; END $825b; ADDRMODE "mx"; TYPE Code;}; From 13f1d37403017a3b399eb9bc2c61e6613a1ebdfa Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 21 Feb 2023 06:48:46 -0500 Subject: [PATCH 2003/2710] suppress spurious "large alignment" warning when the combined alignment is not larger than any of the explictly requested ones --- doc/ca65.sgml | 13 +++++++------ src/ca65/segment.c | 2 +- src/ld65/segments.c | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 19fd3aa2a..f2f7e94c0 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -2112,14 +2112,15 @@ Here's a list of all control commands and a description, what they do: </verb></tscreen> the assembler will force a segment alignment to the least common multiple of - 15, 18 and 251 - which is 22590. To protect the user against errors, the - assembler will issue a warning when the combined alignment exceeds 256. The - command line option <tt><ref id="option--large-alignment" - name="--large-alignment"></tt> will disable this warning. + 15, 18 and 251 - which is 22590. To protect the user against errors, when the + combined alignment is larger than the explicitly requested alignments, + and also exceeds 256, the assembler will issue a warning. The command line + option <tt><ref id="option--large-alignment" name="--large-alignment"></tt> + will disable this warning. Please note that with alignments that are a power of two (which were the - only alignments possible in older versions of the assembler), the problem is - less severe, because the least common multiple of powers to the same base is + only alignments possible in older versions of the assembler) will not cause + a warning, because the least common multiple of powers to the same base is always the larger one. diff --git a/src/ca65/segment.c b/src/ca65/segment.c index 26b568711..aadc35009 100644 --- a/src/ca65/segment.c +++ b/src/ca65/segment.c @@ -306,7 +306,7 @@ void SegAlign (unsigned long Alignment, int FillVal) ActiveSeg->Align = CombinedAlignment; /* Output a warning for larger alignments if not suppressed */ - if (CombinedAlignment >= LARGE_ALIGNMENT && !LargeAlignment) { + if (CombinedAlignment >= LARGE_ALIGNMENT && CombinedAlignment > ActiveSeg->Align && CombinedAlignment > Alignment && !LargeAlignment) { Warning (0, "Combined alignment is suspiciously large (%lu)", CombinedAlignment); } diff --git a/src/ld65/segments.c b/src/ld65/segments.c index 10d2cda2c..255b8ccd1 100644 --- a/src/ld65/segments.c +++ b/src/ld65/segments.c @@ -230,7 +230,7 @@ Section* ReadSection (FILE* F, ObjData* O) "%lu. Last module requiring alignment was '%s'.", GetString (Name), Alignment, MAX_ALIGNMENT, GetObjFileName (O)); - } else if (Alignment >= LARGE_ALIGNMENT && !LargeAlignment) { + } else if (Alignment >= LARGE_ALIGNMENT && Alignment > S->Alignment && Alignment > Sec->Alignment && !LargeAlignment) { Warning ("Combined alignment for segment '%s' is suspiciously " "large (%lu). Last module requiring alignment was '%s'.", GetString (Name), Alignment, GetObjFileName (O)); From 23cc295b08661bab604237582acd5bf5773dd6d3 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 21 Feb 2023 07:32:38 -0500 Subject: [PATCH 2004/2710] improve description of large-alignment warning --- doc/ca65.sgml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index f2f7e94c0..062b6d0c7 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -2114,14 +2114,13 @@ Here's a list of all control commands and a description, what they do: the assembler will force a segment alignment to the least common multiple of 15, 18 and 251 - which is 22590. To protect the user against errors, when the combined alignment is larger than the explicitly requested alignments, - and also exceeds 256, the assembler will issue a warning. The command line + the assembler will issue a warning if it also exceeds 256. The command line option <tt><ref id="option--large-alignment" name="--large-alignment"></tt> will disable this warning. - Please note that with alignments that are a power of two (which were the - only alignments possible in older versions of the assembler) will not cause - a warning, because the least common multiple of powers to the same base is - always the larger one. + Please note that with only alignments that are a power of two, a warning will + never occur, because the least common multiple of powers to the same base is + always simply the larger one. From ba038e921fcd7c224ea144d68af6043afafde537 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 21 Feb 2023 17:06:21 -0500 Subject: [PATCH 2005/2710] jmp (abs) page wrapping should be an error, not a warning, also only applies to 6502 CPU --- src/ca65/instr.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ca65/instr.c b/src/ca65/instr.c index d0d7ce64c..503304b5b 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -1605,11 +1605,12 @@ static void PutJMP (const InsDesc* Ins) if (EvalEA (Ins, &A)) { /* Check for indirect addressing */ - if (A.AddrModeBit & AM65_ABS_IND) { + if (A.AddrModeBit & AM65_ABS_IND && CPU < CPU_65SC02) { /* Compare the low byte of the expression to 0xFF to check for ** a page cross. Be sure to use a copy of the expression otherwise - ** things will go weird later. + ** things will go weird later. This only affects the 6502 CPU, + ** and was corrected in 65C02 and later CPUs in this family. */ ExprNode* E = GenNE (GenByteExpr (CloneExpr (A.Expr)), 0xFF); @@ -1617,7 +1618,7 @@ static void PutJMP (const InsDesc* Ins) unsigned Msg = GetStringId ("\"jmp (abs)\" across page border"); /* Generate the assertion */ - AddAssertion (E, ASSERT_ACT_WARN, Msg); + AddAssertion (E, ASSERT_ACT_ERROR, Msg); } /* No error, output code */ From fedfc3443de7adacb290cc33adb4b8fb63739e41 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Fri, 24 Feb 2023 02:12:19 +0100 Subject: [PATCH 2006/2710] fix for issue #1973 (printf("%c", '\0') doesn't _write '\0' to fd 0) --- libsrc/common/_printf.s | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libsrc/common/_printf.s b/libsrc/common/_printf.s index 840d42127..a0074583e 100644 --- a/libsrc/common/_printf.s +++ b/libsrc/common/_printf.s @@ -502,10 +502,10 @@ DoFormat: ; It is a character jsr GetIntArg ; Get the argument (promoted to int) - sta Buf ; Place it as zero terminated string... - lda #0 - sta Buf+1 ; ...into the buffer - jmp HaveArg ; Done + sta Buf ; Place it into the buffer + ldx #0 + lda #1 ; Buffer length is 1 + jmp HaveArg1 ; Is it an integer? @@ -671,6 +671,7 @@ HaveArg: lda Str ldx Str+1 jsr _strlen ; Get length of argument +HaveArg1: ; Jumped into here from %c handling sta ArgLen stx ArgLen+1 From da150aeeac5e030d34a208bf3efabdaaac23e81b Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 24 Feb 2023 18:00:58 -0500 Subject: [PATCH 2007/2710] allow .feature to both enable and disable --- doc/ca65.sgml | 14 ++++++++----- src/ca65/feature.c | 50 +++++++++++++++++++--------------------------- src/ca65/feature.h | 6 ++---- src/ca65/main.c | 11 ++++++---- src/ca65/pseudo.c | 25 +++++++++++++++-------- 5 files changed, 56 insertions(+), 50 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index b65d337bb..02ed5ad8a 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -2746,15 +2746,19 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH This directive may be used to enable one or more compatibility features of the assembler. While the use of <tt/.FEATURE/ should be avoided when possible, it may be useful when porting sources written for other - assemblers. There is no way to switch a feature off, once you have - enabled it, so using + assemblers. After the feature name an optional '+' or '-' may specify whether + to enable or disable the feature (enable if omitted). Multiple features may be + enabled, separated by commas. Examples: <tscreen><verb> - .FEATURE xxx + ; enable c_comments + .feature c_comments + .feature c_comments + + ; enable force_range, disable underline_in_numbers, enable labels_without_colons + .feature force_range, underline_in_numbers -, labels_without_colons + + .feature force_range +, underline_in_numbers off, labels_without_colons on </verb></tscreen> - will enable the feature until end of assembly is reached. - The following features are available: <descrip> diff --git a/src/ca65/feature.c b/src/ca65/feature.c index 754b645cf..41177d66b 100644 --- a/src/ca65/feature.c +++ b/src/ca65/feature.c @@ -98,38 +98,30 @@ feature_t FindFeature (const StrBuf* Key) -feature_t SetFeature (const StrBuf* Key) -/* Find the feature and set the corresponding flag if the feature is known. -** In any case, return the feature found. An invalid Key will return -** FEAT_UNKNOWN. +void SetFeature (feature_t Feature, unsigned char On) +/* Set the corresponding feature flag if Feature is valid. */ { - /* Map the string to an enum value */ - feature_t Feature = FindFeature (Key); - /* Set the flags */ switch (Feature) { - case FEAT_DOLLAR_IS_PC: DollarIsPC = 1; break; - case FEAT_LABELS_WITHOUT_COLONS: NoColonLabels = 1; break; - case FEAT_LOOSE_STRING_TERM: LooseStringTerm = 1; break; - case FEAT_LOOSE_CHAR_TERM: LooseCharTerm = 1; break; - case FEAT_AT_IN_IDENTIFIERS: AtInIdents = 1; break; - case FEAT_DOLLAR_IN_IDENTIFIERS: DollarInIdents = 1; break; - case FEAT_LEADING_DOT_IN_IDENTIFIERS: LeadingDotInIdents= 1; break; - case FEAT_ORG_PER_SEG: OrgPerSeg = 1; break; - case FEAT_PC_ASSIGNMENT: PCAssignment = 1; break; - case FEAT_MISSING_CHAR_TERM: MissingCharTerm = 1; break; - case FEAT_UBIQUITOUS_IDENTS: UbiquitousIdents = 1; break; - case FEAT_C_COMMENTS: CComments = 1; break; - case FEAT_FORCE_RANGE: ForceRange = 1; break; - case FEAT_UNDERLINE_IN_NUMBERS: UnderlineInNumbers= 1; break; - case FEAT_ADDRSIZE: AddrSize = 1; break; - case FEAT_BRACKET_AS_INDIRECT: BracketAsIndirect = 1; break; - case FEAT_STRING_ESCAPES: StringEscapes = 1; break; - case FEAT_LONG_JSR_JMP_RTS: LongJsrJmpRts = 1; break; - default: /* Keep gcc silent */ break; + case FEAT_DOLLAR_IS_PC: DollarIsPC = On; break; + case FEAT_LABELS_WITHOUT_COLONS: NoColonLabels = On; break; + case FEAT_LOOSE_STRING_TERM: LooseStringTerm = On; break; + case FEAT_LOOSE_CHAR_TERM: LooseCharTerm = On; break; + case FEAT_AT_IN_IDENTIFIERS: AtInIdents = On; break; + case FEAT_DOLLAR_IN_IDENTIFIERS: DollarInIdents = On; break; + case FEAT_LEADING_DOT_IN_IDENTIFIERS: LeadingDotInIdents= On; break; + case FEAT_ORG_PER_SEG: OrgPerSeg = On; break; + case FEAT_PC_ASSIGNMENT: PCAssignment = On; break; + case FEAT_MISSING_CHAR_TERM: MissingCharTerm = On; break; + case FEAT_UBIQUITOUS_IDENTS: UbiquitousIdents = On; break; + case FEAT_C_COMMENTS: CComments = On; break; + case FEAT_FORCE_RANGE: ForceRange = On; break; + case FEAT_UNDERLINE_IN_NUMBERS: UnderlineInNumbers= On; break; + case FEAT_ADDRSIZE: AddrSize = On; break; + case FEAT_BRACKET_AS_INDIRECT: BracketAsIndirect = On; break; + case FEAT_STRING_ESCAPES: StringEscapes = On; break; + case FEAT_LONG_JSR_JMP_RTS: LongJsrJmpRts = On; break; + default: break; } - - /* Return the value found */ - return Feature; } diff --git a/src/ca65/feature.h b/src/ca65/feature.h index a29ee0172..8eeb62e6f 100644 --- a/src/ca65/feature.h +++ b/src/ca65/feature.h @@ -87,10 +87,8 @@ feature_t FindFeature (const StrBuf* Key); ** feature is invalid, return FEAT_UNKNOWN. */ -feature_t SetFeature (const StrBuf* Key); -/* Find the feature and set the corresponding flag if the feature is known. -** In any case, return the feature found. An invalid Key will return -** FEAT_UNKNOWN. +void SetFeature (feature_t Feature, unsigned char On); +/* Set the corresponding feature flag if Feature is valid. */ diff --git a/src/ca65/main.c b/src/ca65/main.c index 9710924bf..7183ff046 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -489,12 +489,15 @@ static void OptDebugInfo (const char* Opt attribute ((unused)), static void OptFeature (const char* Opt attribute ((unused)), const char* Arg) /* Set an emulation feature */ { - /* Make a string buffer from Arg */ - StrBuf Feature; + /* Make a string buffer from Arg and use it to find the feature. */ + StrBuf StrFeature; + feature_t Feature = FindFeature (SB_InitFromString (&StrFeature, Arg)); - /* Set the feature, check for errors */ - if (SetFeature (SB_InitFromString (&Feature, Arg)) == FEAT_UNKNOWN) { + /* Enable the feature, check for errors */ + if (Feature == FEAT_UNKNOWN) { AbEnd ("Illegal emulation feature: '%s'", Arg); + } else { + SetFeature (Feature, 1); } } diff --git a/src/ca65/pseudo.c b/src/ca65/pseudo.c index 843f5b9d2..1877512d5 100644 --- a/src/ca65/pseudo.c +++ b/src/ca65/pseudo.c @@ -1023,7 +1023,10 @@ static void DoFatal (void) static void DoFeature (void) /* Switch the Feature option */ { - /* Allow a list of comma separated keywords */ + feature_t Feature; + unsigned char On; + + /* Allow a list of comma separated feature keywords with optional +/- or ON/OFF */ while (1) { /* We expect an identifier */ @@ -1034,18 +1037,24 @@ static void DoFeature (void) /* Make the string attribute lower case */ LocaseSVal (); - - /* Set the feature and check for errors */ - if (SetFeature (&CurTok.SVal) == FEAT_UNKNOWN) { + Feature = FindFeature(&CurTok.SVal); + if (Feature == FEAT_UNKNOWN) { /* Not found */ ErrorSkip ("Invalid feature: '%m%p'", &CurTok.SVal); return; - } else { - /* Skip the keyword */ - NextTok (); + } + NextTok (); + + /* Optional +/- or ON/OFF */ + On = 1; + if (CurTok.Tok != TOK_COMMA && !TokIsSep (CurTok.Tok)) { + SetBoolOption(&On); } - /* Allow more than one keyword */ + /* Apply feature setting. */ + SetFeature (Feature, On); + + /* Allow more than one feature separated by commas. */ if (CurTok.Tok == TOK_COMMA) { NextTok (); } else { From 230230819eb8a10be5eda01ee646acd8ce57c796 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 24 Feb 2023 19:35:38 -0500 Subject: [PATCH 2008/2710] document the undocumented test/asm/listing behaviours --- test/asm/listing/readme.txt | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/test/asm/listing/readme.txt b/test/asm/listing/readme.txt index e43f2008a..d6280b954 100644 --- a/test/asm/listing/readme.txt +++ b/test/asm/listing/readme.txt @@ -6,22 +6,38 @@ The name of a test is everything in the form <test>.s. The following reference files can be added: -- <test>.bin-ref: +- ref/<test>.bin-ref: This is a reference for the resulting binary. The binary as binary tested against this file. If they are not equal, the test fails. -- <test>.list-ref +- ref/<test>.list-ref This is a reference for the resulting listing output This file *must* have the first line of the listing removed, as that contains a ca65 version string, and almost always this will be changed! +- ref/<test>.err-ref + This is a reference for the resulting ca65 stdout (>) output. + +- ref/<test>.err2-ref + This is a reference for the resulting ca65 stderr (2>) output. + +- ref/<test>.ld65err-ref + This is a reference for the resutling ld65 stdout (>) output. + +- ref/<test>.ld65err2-ref + This is a reference for the resulting ld65 stderr (2>) output. + +The following control files can be added to control the tests. +These files are empty (contents ignored), and only the filename is used: + +- control/<test>.err + Test is expected to produce an error. + +- control/<test>.no-ld65 + Skip the ld65 step. + Note that the resulting .bin file is generated twice: Once with no listing file, and once with listing file. This way, one can find out if the listing file generation changes anything with the resulting binary output. - - -TODO: -- add the possibility to test for specific error output that are to be - expected From c2bc40f2138152c333021cff7d60931d24380f18 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 24 Feb 2023 20:00:56 -0500 Subject: [PATCH 2009/2710] test for all ca65 .feature options --- test/asm/listing/108-long-rts.s | 8 ++ test/asm/listing/ref/108-long-rts.bin-ref | 1 + test/asm/val/feature.s | 147 ++++++++++++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 test/asm/listing/108-long-rts.s create mode 100644 test/asm/listing/ref/108-long-rts.bin-ref create mode 100644 test/asm/val/feature.s diff --git a/test/asm/listing/108-long-rts.s b/test/asm/listing/108-long-rts.s new file mode 100644 index 000000000..a8bf860cd --- /dev/null +++ b/test/asm/listing/108-long-rts.s @@ -0,0 +1,8 @@ +; test of long-rts promotion + +.p816 +.feature long_jsr_jmp_rts +.smart + +.proc farproc : far + rts ; should be $6B (RTL) and not $60 (RTS) +.endproc diff --git a/test/asm/listing/ref/108-long-rts.bin-ref b/test/asm/listing/ref/108-long-rts.bin-ref new file mode 100644 index 000000000..23fa7d31a --- /dev/null +++ b/test/asm/listing/ref/108-long-rts.bin-ref @@ -0,0 +1 @@ +k \ No newline at end of file diff --git a/test/asm/val/feature.s b/test/asm/val/feature.s new file mode 100644 index 000000000..4428cf4c2 --- /dev/null +++ b/test/asm/val/feature.s @@ -0,0 +1,147 @@ +; a simple test of every .feature + +.export _main + +.segment "ZEROPAGE" +zplabel: + +.segment "CODE" +abslabel: + +; exit with 0 + +_main: + ; if any feature needs a runtime test, + ; it can be added here. + lda #0 + tax + rts + + +.feature addrsize + +.assert .addrsize(zplabel) = 1, error, ".addrsize 1 expected for ZEROPAGE" +.assert .addrsize(abslabel) = 2, error, ".addrsize 2 expected for absolute" +.feature addrsize - + + +.feature at_in_identifiers on +ident@with@at: + rts +.feature at_in_identifiers off + + +.feature bracket_as_indirect + lda [$82],y +.feature bracket_as_indirect- + + +.feature c_comments + lda zplabel /* comment */ + /* comment */ +/* multiline +** comment +*/ +.feature c_comments - + + +.feature dollar_in_identifiers +ident$with$dollar: + rts +.feature dollar_in_identifiers - + + +.feature dollar_is_pc +.assert $ = *, error, "dollar_is_pc failure" +.feature dollar_is_pc - + + +.feature force_range + lda #-1 +.feature force_range - + + +.feature labels_without_colons +labelwithoutcolon + jmp labelwithoutcolon +.feature labels_without_colons - + + +.feature leading_dot_in_identifiers +.identifierwithdot: + rts +.feature leading_dot_in_identifiers - + + +.feature long_jsr_jmp_rts +.p816 + ; long addresses require alternate instruction names JSL, JML without this feature + jsr $123456 + jmp $123456 +; smart + far + long_jsr_jmp_rts will promote rts to rtl +.smart + +.proc long_rts : far + rts ; should become RTL ($6B) instead of RTS ($60) + ; the emitted opcode is not verified by this test, + ; see test/asm/listing/108-long-rts +.endproc +.smart - +.p02 +.feature long_jsr_jmp_rts - + + +.feature loose_char_term +.byte 'a' +.byte "a" +.feature loose_char_term - + + +.feature loose_string_term +.asciiz "string" +.asciiz 'string' +.feature loose_string_term - + + +.feature missing_char_term + lda #'a +.feature missing_char_term - + + +.feature org_per_seg +.segment "RODATA" +.org $5678 +.assert * = $5678, error, "org_per_seg failed" +.segment "CODE" +.org $9ABC +.assert * = $9ABC, error, "org_per_seg failed" +.segment "RODATA" +.assert * = $5678, error, "org_per_seg failed" +.reloc +.segment "CODE" +.assert * = $9ABC, error, "org_per_seg failed" +.reloc +.feature org_per_seg - + + +.feature pc_assignment +* = $1234 +.assert * = $1234, error, "pc_assignment failed" +.reloc +.feature pc_assignment - + + +.feature string_escapes +.asciiz "quote:\"" +.feature string_escapes - + + +.feature ubiquitous_idents +.macro bit + brk +.endmacro + bit +.feature ubiquitous_idents - + + +.feature underline_in_numbers +.byte %10_10_10_10 +.feature underline_in_numbers - From cd8fa3906631c6ba4dda3f37077eb0770daf769a Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 24 Feb 2023 22:40:29 -0500 Subject: [PATCH 2010/2710] optional BRK signature on all 6502 CPUs, not just 65816 (also COP) --- src/ca65/instr.c | 16 ++++---- test/asm/listing/109-brk-signature.s | 36 ++++++++++++++++++ .../asm/listing/ref/109-brk-signature.bin-ref | Bin 0 -> 28 bytes 3 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 test/asm/listing/109-brk-signature.s create mode 100644 test/asm/listing/ref/109-brk-signature.bin-ref diff --git a/src/ca65/instr.c b/src/ca65/instr.c index 745072a09..2ed5ba734 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -181,7 +181,7 @@ static const struct { { "BMI", 0x0020000, 0x30, 0, PutPCRel8 }, { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, - { "BRK", 0x0000001, 0x00, 0, PutAll }, + { "BRK", 0x0000005, 0x00, 6, PutAll }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, { "CLC", 0x0000001, 0x18, 0, PutAll }, @@ -252,7 +252,7 @@ static const struct { { "BMI", 0x0020000, 0x30, 0, PutPCRel8 }, { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, - { "BRK", 0x0000001, 0x00, 0, PutAll }, + { "BRK", 0x0000005, 0x00, 6, PutAll }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, { "CLC", 0x0000001, 0x18, 0, PutAll }, @@ -342,7 +342,7 @@ static const struct { { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, { "BRA", 0x0020000, 0x12, 0, PutPCRel8 }, /* DTV */ - { "BRK", 0x0000001, 0x00, 0, PutAll }, + { "BRK", 0x0000005, 0x00, 6, PutAll }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, { "CLC", 0x0000001, 0x18, 0, PutAll }, @@ -418,7 +418,7 @@ static const struct { { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, { "BRA", 0x0020000, 0x80, 0, PutPCRel8 }, - { "BRK", 0x0000001, 0x00, 0, PutAll }, + { "BRK", 0x0000005, 0x00, 6, PutAll }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, { "CLC", 0x0000001, 0x18, 0, PutAll }, @@ -510,7 +510,7 @@ static const struct { { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, { "BRA", 0x0020000, 0x80, 0, PutPCRel8 }, - { "BRK", 0x0000001, 0x00, 0, PutAll }, + { "BRK", 0x0000005, 0x00, 6, PutAll }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, { "CLC", 0x0000001, 0x18, 0, PutAll }, @@ -622,7 +622,7 @@ static const struct { { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, { "BRA", 0x0020000, 0x80, 0, PutPCRel8 }, - { "BRK", 0x0000001, 0x00, 0, PutAll }, + { "BRK", 0x0000005, 0x00, 6, PutAll }, { "BSR", 0x0040000, 0x63, 0, PutPCRel4510 }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, @@ -756,7 +756,7 @@ static const struct { { "CLI", 0x0000001, 0x58, 0, PutAll }, { "CLV", 0x0000001, 0xb8, 0, PutAll }, { "CMP", 0x0b8f6fc, 0xc0, 0, PutAll }, - { "COP", 0x0000004, 0x02, 6, PutAll }, + { "COP", 0x0000005, 0x02, 6, PutAll }, { "CPA", 0x0b8f6fc, 0xc0, 0, PutAll }, /* == CMP */ { "CPX", 0x0c0000c, 0xe0, 1, PutAll }, { "CPY", 0x0c0000c, 0xc0, 1, PutAll }, @@ -909,7 +909,7 @@ static const struct { { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, { "BRA", 0x0020000, 0x80, 0, PutPCRel8 }, - { "BRK", 0x0000001, 0x00, 0, PutAll }, + { "BRK", 0x0000005, 0x00, 6, PutAll }, { "BSR", 0x0020000, 0x44, 0, PutPCRel8 }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, diff --git a/test/asm/listing/109-brk-signature.s b/test/asm/listing/109-brk-signature.s new file mode 100644 index 000000000..b150e088a --- /dev/null +++ b/test/asm/listing/109-brk-signature.s @@ -0,0 +1,36 @@ +; test of optional signature byte for BRK on all 6502-derived CPUs +; and also COP on 65C816 + +.setcpu "6502" +brk ; 1 byte +brk 0 ; 2 bytes +brk $60 ; 2 bytes + +.setcpu "6502X" +brk +brk $60 + +.setcpu "6502DTV" +brk +brk $60 + +.setcpu "65SC02" +brk +brk $60 + +.setcpu "65816" +brk +brk $60 +cop +cop $60 +; WDM is a NOP that gives +2 PC, probably not useful to make its signature byte optional +;wdm +wdm $60 + +.setcpu "4510" +brk +brk $60 + +.setcpu "HuC6280" +brk +brk $60 diff --git a/test/asm/listing/ref/109-brk-signature.bin-ref b/test/asm/listing/ref/109-brk-signature.bin-ref new file mode 100644 index 0000000000000000000000000000000000000000..0f46d29fd39f8d79bd403ca35bd6eb6aa7ced41c GIT binary patch literal 28 TcmZQzU|>i<ModfzPEY{=EA|7Y literal 0 HcmV?d00001 From 3f8252311efaae97cae48b6acb2e76d1a4dcf14f Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 24 Feb 2023 23:00:30 -0500 Subject: [PATCH 2011/2710] 65C816 document brk optional signature, and mvn/mvp syntax --- doc/ca65.sgml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index b65d337bb..d4c002408 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -439,6 +439,14 @@ The assembler accepts <tt><ref id=".P4510" name=".P4510"></tt> command was given). </itemize> +On 6502-derived platforms the <tt/BRK/ instruction has an optional signature +byte. If omitted, the assembler will only produce only 1 byte. + +<tscreen><verb> + brk ; 1-byte: $00 + brk $34 ; 2-bytes: $00 $34 +</verb></tscreen> + <sect1>65816 mode<p> @@ -456,6 +464,17 @@ mnemonics: <item><tt>TSA</tt> is an alias for <tt>TSC</tt> </itemize> +The <tt/MVN/ and <tt/MVP/ instructions accept two different argument forms. +Either two bank bytes may be given with a <tt/#/ prefix, +or two far addresses whose high byte will be used. + +<tscreen><verb> + mvn #^src, #^dst ; bank of src to bank of dst + mvn src, dst ; bank of src to bank of dst + mvp #$12, #$78 ; bank $12 to $78 + mvp $123456, $789ABC ; bank $12 to $78 +</verb></tscreen> + <sect1>6502X mode<label id="6502X-mode"><p> From 3d41a5b51647fbc1c840d2d8167c76456faa3dec Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 25 Feb 2023 08:23:47 -0500 Subject: [PATCH 2012/2710] allow immedite style syntax variation for BRK signature byte --- doc/ca65.sgml | 1 + src/ca65/instr.c | 20 +++++++++--------- test/asm/listing/109-brk-signature.s | 9 ++++++++ .../asm/listing/ref/109-brk-signature.bin-ref | Bin 28 -> 46 bytes 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index d4c002408..1bef0b551 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -445,6 +445,7 @@ byte. If omitted, the assembler will only produce only 1 byte. <tscreen><verb> brk ; 1-byte: $00 brk $34 ; 2-bytes: $00 $34 + brk #$34 ; 2-bytes: $00 $34 </verb></tscreen> diff --git a/src/ca65/instr.c b/src/ca65/instr.c index 2ed5ba734..b72be6711 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -181,7 +181,7 @@ static const struct { { "BMI", 0x0020000, 0x30, 0, PutPCRel8 }, { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, - { "BRK", 0x0000005, 0x00, 6, PutAll }, + { "BRK", 0x0800005, 0x00, 6, PutAll }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, { "CLC", 0x0000001, 0x18, 0, PutAll }, @@ -252,7 +252,7 @@ static const struct { { "BMI", 0x0020000, 0x30, 0, PutPCRel8 }, { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, - { "BRK", 0x0000005, 0x00, 6, PutAll }, + { "BRK", 0x0800005, 0x00, 6, PutAll }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, { "CLC", 0x0000001, 0x18, 0, PutAll }, @@ -342,7 +342,7 @@ static const struct { { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, { "BRA", 0x0020000, 0x12, 0, PutPCRel8 }, /* DTV */ - { "BRK", 0x0000005, 0x00, 6, PutAll }, + { "BRK", 0x0800005, 0x00, 6, PutAll }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, { "CLC", 0x0000001, 0x18, 0, PutAll }, @@ -418,7 +418,7 @@ static const struct { { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, { "BRA", 0x0020000, 0x80, 0, PutPCRel8 }, - { "BRK", 0x0000005, 0x00, 6, PutAll }, + { "BRK", 0x0800005, 0x00, 6, PutAll }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, { "CLC", 0x0000001, 0x18, 0, PutAll }, @@ -510,7 +510,7 @@ static const struct { { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, { "BRA", 0x0020000, 0x80, 0, PutPCRel8 }, - { "BRK", 0x0000005, 0x00, 6, PutAll }, + { "BRK", 0x0800005, 0x00, 6, PutAll }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, { "CLC", 0x0000001, 0x18, 0, PutAll }, @@ -622,7 +622,7 @@ static const struct { { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, { "BRA", 0x0020000, 0x80, 0, PutPCRel8 }, - { "BRK", 0x0000005, 0x00, 6, PutAll }, + { "BRK", 0x0800005, 0x00, 6, PutAll }, { "BSR", 0x0040000, 0x63, 0, PutPCRel4510 }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, @@ -747,7 +747,7 @@ static const struct { { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, { "BRA", 0x0020000, 0x80, 0, PutPCRel8 }, - { "BRK", 0x0000005, 0x00, 6, PutAll }, + { "BRK", 0x0800005, 0x00, 6, PutAll }, { "BRL", 0x0040000, 0x82, 0, PutPCRel16 }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, @@ -756,7 +756,7 @@ static const struct { { "CLI", 0x0000001, 0x58, 0, PutAll }, { "CLV", 0x0000001, 0xb8, 0, PutAll }, { "CMP", 0x0b8f6fc, 0xc0, 0, PutAll }, - { "COP", 0x0000005, 0x02, 6, PutAll }, + { "COP", 0x0800005, 0x02, 6, PutAll }, { "CPA", 0x0b8f6fc, 0xc0, 0, PutAll }, /* == CMP */ { "CPX", 0x0c0000c, 0xe0, 1, PutAll }, { "CPY", 0x0c0000c, 0xc0, 1, PutAll }, @@ -833,7 +833,7 @@ static const struct { { "TYA", 0x0000001, 0x98, 0, PutAll }, { "TYX", 0x0000001, 0xbb, 0, PutAll }, { "WAI", 0x0000001, 0xcb, 0, PutAll }, - { "WDM", 0x0000004, 0x42, 6, PutAll }, + { "WDM", 0x0800004, 0x42, 6, PutAll }, { "XBA", 0x0000001, 0xeb, 0, PutAll }, { "XCE", 0x0000001, 0xfb, 0, PutAll } } @@ -909,7 +909,7 @@ static const struct { { "BNE", 0x0020000, 0xd0, 0, PutPCRel8 }, { "BPL", 0x0020000, 0x10, 0, PutPCRel8 }, { "BRA", 0x0020000, 0x80, 0, PutPCRel8 }, - { "BRK", 0x0000005, 0x00, 6, PutAll }, + { "BRK", 0x0800005, 0x00, 6, PutAll }, { "BSR", 0x0020000, 0x44, 0, PutPCRel8 }, { "BVC", 0x0020000, 0x50, 0, PutPCRel8 }, { "BVS", 0x0020000, 0x70, 0, PutPCRel8 }, diff --git a/test/asm/listing/109-brk-signature.s b/test/asm/listing/109-brk-signature.s index b150e088a..e9c23dd63 100644 --- a/test/asm/listing/109-brk-signature.s +++ b/test/asm/listing/109-brk-signature.s @@ -5,32 +5,41 @@ brk ; 1 byte brk 0 ; 2 bytes brk $60 ; 2 bytes +brk #$60 ; 2 bytes .setcpu "6502X" brk brk $60 +brk #$60 .setcpu "6502DTV" brk brk $60 +brk #$60 .setcpu "65SC02" brk brk $60 +brk #$60 .setcpu "65816" brk brk $60 +brk #$60 cop cop $60 +cop #$60 ; WDM is a NOP that gives +2 PC, probably not useful to make its signature byte optional ;wdm wdm $60 +wdm #$60 .setcpu "4510" brk brk $60 +brk #$60 .setcpu "HuC6280" brk brk $60 +brk #$60 diff --git a/test/asm/listing/ref/109-brk-signature.bin-ref b/test/asm/listing/ref/109-brk-signature.bin-ref index 0f46d29fd39f8d79bd403ca35bd6eb6aa7ced41c..0eaa09faa5e113f3fe15fcb8e23837523fe04edc 100644 GIT binary patch literal 46 YcmZQzU|>i9LM#LmQvy?h6A&UK0hde%O8@`> literal 28 TcmZQzU|>i<ModfzPEY{=EA|7Y From e87325033d04955ea871e367f015b7ec508ae481 Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Sat, 25 Feb 2023 12:39:36 -0500 Subject: [PATCH 2013/2710] Fix .endmacro in a .define in a macro body --- src/ca65/macro.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/ca65/macro.c b/src/ca65/macro.c index 4812b12c4..16d916c88 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -391,6 +391,7 @@ void MacDef (unsigned Style) Macro* M; TokNode* N; int HaveParams; + int DefineActive = 0; /* We expect a macro name here */ if (CurTok.Tok != TOK_IDENT) { @@ -491,8 +492,8 @@ void MacDef (unsigned Style) while (1) { /* Check for end of macro */ if (Style == MAC_STYLE_CLASSIC) { - /* In classic macros, only .endmacro is allowed */ - if (CurTok.Tok == TOK_ENDMACRO) { + /* In classic macros, only .endmacro is allowed, but ignore it if it is in a .define */ + if (CurTok.Tok == TOK_ENDMACRO && !DefineActive) { /* Done */ break; } @@ -573,6 +574,13 @@ void MacDef (unsigned Style) } ++M->TokCount; + /* Mark if .define has been read until end of line has been reached */ + if (CurTok.Tok == TOK_DEFINE) { + DefineActive = 1; + } else if (TokIsSep(CurTok.Tok)) { + DefineActive = 0; + } + /* Read the next token */ NextTok (); } @@ -582,7 +590,7 @@ void MacDef (unsigned Style) NextTok (); } - /* Reset the Incomplete flag now that parsing is done */ +/* Reset the Incomplete flag now that parsing is done */ M->Incomplete = 0; Done: From 429e90dffdc326bbb23a332ea3b7b11dc67f8c67 Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Sat, 25 Feb 2023 12:42:26 -0500 Subject: [PATCH 2014/2710] Fix .endmacro in a .define in a macro body --- src/ca65/macro.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ca65/macro.c b/src/ca65/macro.c index 16d916c88..24cdcad38 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -590,7 +590,7 @@ void MacDef (unsigned Style) NextTok (); } -/* Reset the Incomplete flag now that parsing is done */ + /* Reset the Incomplete flag now that parsing is done */ M->Incomplete = 0; Done: From 0a05f78d47c8a6ea20b97fd570d0f5db054aa387 Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Sat, 25 Feb 2023 13:38:02 -0500 Subject: [PATCH 2015/2710] Fix .endmacro not at the start of the line. --- src/ca65/macro.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/ca65/macro.c b/src/ca65/macro.c index 24cdcad38..c09b2412f 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -391,7 +391,7 @@ void MacDef (unsigned Style) Macro* M; TokNode* N; int HaveParams; - int DefineActive = 0; + int LastTokWasSep = 0; /* We expect a macro name here */ if (CurTok.Tok != TOK_IDENT) { @@ -493,7 +493,7 @@ void MacDef (unsigned Style) /* Check for end of macro */ if (Style == MAC_STYLE_CLASSIC) { /* In classic macros, only .endmacro is allowed, but ignore it if it is in a .define */ - if (CurTok.Tok == TOK_ENDMACRO && !DefineActive) { + if (CurTok.Tok == TOK_ENDMACRO && LastTokWasSep) { /* Done */ break; } @@ -574,12 +574,8 @@ void MacDef (unsigned Style) } ++M->TokCount; - /* Mark if .define has been read until end of line has been reached */ - if (CurTok.Tok == TOK_DEFINE) { - DefineActive = 1; - } else if (TokIsSep(CurTok.Tok)) { - DefineActive = 0; - } + /* Save if last token was a separator to know if .endmacro is valid */ + LastTokWasSep = TokIsSep(CurTok.Tok); /* Read the next token */ NextTok (); From 4b29615f2bad008cc5a7b015616883a4e837972b Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Sat, 25 Feb 2023 13:49:19 -0500 Subject: [PATCH 2016/2710] Fix .endmacro not at the start of the line. Allow empty macro --- src/ca65/macro.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ca65/macro.c b/src/ca65/macro.c index c09b2412f..fa90009b5 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -480,6 +480,7 @@ void MacDef (unsigned Style) */ if (Style == MAC_STYLE_CLASSIC) { ConsumeSep (); + LastTokWasSep = 1; } else if (HaveParams) { ConsumeRParen (); } From 7d894fbe04f64aa0917404412cc5b14a1c970818 Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Sat, 25 Feb 2023 13:52:13 -0500 Subject: [PATCH 2017/2710] Fix .endmacro not at the start of the line. Fix comment --- src/ca65/macro.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ca65/macro.c b/src/ca65/macro.c index fa90009b5..92a0f6e9a 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -493,7 +493,7 @@ void MacDef (unsigned Style) while (1) { /* Check for end of macro */ if (Style == MAC_STYLE_CLASSIC) { - /* In classic macros, only .endmacro is allowed, but ignore it if it is in a .define */ + /* In classic macros, only .endmacro is allowed, but ignore it if it is not at the start of the line */ if (CurTok.Tok == TOK_ENDMACRO && LastTokWasSep) { /* Done */ break; From ffa83c32a4d4cb2f7bd7749aa3e2766c370e60a7 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 26 Feb 2023 20:03:41 +0100 Subject: [PATCH 2018/2710] clean-up of driver return codes --- Contributing.md | 17 +++++++- libsrc/apple2/emd/a2.auxmem.s | 3 +- libsrc/apple2/joy/a2.stdjoy.s | 5 ++- libsrc/apple2/mou/a2.stdmou.s | 4 +- libsrc/apple2/ser/a2.ssc.s | 43 +++++++++++-------- libsrc/atari/joy/atrmj8.s | 3 +- libsrc/atari/joy/atrstd.s | 3 +- libsrc/atari/mou/atrjoy.s | 5 ++- libsrc/atari/mou/atrst.s | 5 ++- libsrc/atari/mou/atrtt.s | 5 ++- libsrc/atari/ser/atrrdev.s | 35 ++++++++------- libsrc/atari5200/joy/atr5200std.s | 3 +- libsrc/atari7800/joy/atari7800-stdjoy.s | 5 ++- libsrc/atmos/joy/atmos-ijk.s | 7 +-- libsrc/atmos/joy/atmos-pase.s | 3 +- libsrc/atmos/ser/atmos-acia.s | 28 ++++++------ libsrc/atmos/tgi/atmos-228-200-3.s | 3 +- libsrc/c128/emd/c128-efnram.s | 7 +-- libsrc/c128/emd/c128-georam.s | 8 ++-- libsrc/c128/emd/c128-ifnram.s | 7 +-- libsrc/c128/emd/c128-ram.s | 3 +- libsrc/c128/emd/c128-ram2.s | 3 +- libsrc/c128/emd/c128-ramcart.s | 9 ++-- libsrc/c128/emd/c128-reu.s | 5 ++- libsrc/c128/emd/c128-vdc.s | 5 ++- libsrc/c128/joy/c128-ptvjoy.s | 5 ++- libsrc/c128/joy/c128-stdjoy.s | 5 ++- libsrc/c128/mou/c128-1351.s | 5 ++- libsrc/c128/mou/c128-inkwell.s | 3 +- libsrc/c128/mou/c128-joy.s | 5 ++- libsrc/c128/mou/c128-pot.s | 5 ++- libsrc/c128/ser/c128-swlink.s | 39 +++++++++-------- libsrc/c16/emd/c16-ram.s | 9 ++-- libsrc/c64/emd/c64-65816.s | 9 ++-- libsrc/c64/emd/c64-c256k.s | 9 ++-- libsrc/c64/emd/c64-dqbb.s | 9 ++-- libsrc/c64/emd/c64-georam.s | 9 ++-- libsrc/c64/emd/c64-isepic.s | 9 ++-- libsrc/c64/emd/c64-kerberos.s | 9 ++-- libsrc/c64/emd/c64-ram.s | 5 ++- libsrc/c64/emd/c64-ramcart.s | 8 ++-- libsrc/c64/emd/c64-reu.s | 6 ++- libsrc/c64/emd/c64-vdc.s | 9 ++-- libsrc/c64/emd/dtv-himem.s | 9 ++-- libsrc/c64/joy/c64-hitjoy.s | 5 ++- libsrc/c64/joy/c64-numpad.s | 10 +++-- libsrc/c64/joy/c64-ptvjoy.s | 5 ++- libsrc/c64/joy/c64-stdjoy.s | 5 ++- libsrc/c64/mou/c64-1351.s | 9 ++-- libsrc/c64/mou/c64-inkwell.s | 5 ++- libsrc/c64/mou/c64-joy.s | 9 ++-- libsrc/c64/mou/c64-pot.s | 9 ++-- libsrc/c64/ser/c64-swlink.s | 39 +++++++++-------- libsrc/cbm510/emd/cbm510-ram.s | 5 ++- libsrc/cbm510/joy/cbm510-std.s | 5 ++- libsrc/cbm510/mou/cbm510-inkwl.s | 5 ++- libsrc/cbm510/mou/cbm510-joy.s | 7 +-- libsrc/cbm510/ser/cbm510-std.s | 34 ++++++++------- libsrc/cbm610/emd/cbm610-ram.s | 5 ++- libsrc/cbm610/ser/cbm610-std.s | 31 +++++++------ libsrc/creativision/joy/creativision-stdjoy.s | 3 +- libsrc/cx16/joy/cx16-std.s | 5 ++- libsrc/cx16/mou/cx16-std.s | 7 +-- libsrc/gamate/joy/gamate-stdjoy.s | 5 ++- libsrc/geos-cbm/emd/geos-vdc.s | 5 ++- libsrc/geos-cbm/joy/geos-stdjoy.s | 5 ++- libsrc/joystick/joy_unload.s | 7 ++- libsrc/lynx/joy/lynx-stdjoy.s | 5 ++- libsrc/lynx/ser/lynx-comlynx.s | 33 +++++++------- libsrc/mouse/mouse_unload.s | 7 ++- libsrc/nes/joy/nes-stdjoy.s | 3 +- libsrc/pce/joy/pce-stdjoy.s | 5 ++- libsrc/pet/joy/pet-ptvjoy.s | 5 ++- libsrc/plus4/joy/plus4-stdjoy.s | 5 ++- libsrc/plus4/ser/plus4-stdser.s | 34 ++++++++------- libsrc/serial/ser_unload.s | 10 ++--- libsrc/supervision/joy/supervision-stdjoy.s | 5 ++- libsrc/telestrat/joy/telestrat.s | 5 ++- libsrc/vic20/emd/vic20-georam.s | 8 ++-- libsrc/vic20/emd/vic20-rama.s | 9 ++-- libsrc/vic20/joy/vic20-ptvjoy.s | 5 ++- libsrc/vic20/joy/vic20-stdjoy.s | 5 ++- 82 files changed, 438 insertions(+), 322 deletions(-) diff --git a/Contributing.md b/Contributing.md index 74e6ead17..eb26e920b 100644 --- a/Contributing.md +++ b/Contributing.md @@ -134,7 +134,22 @@ You can refer to Annex B of the ISO C99 standard ([here](https://www.open-std.or * Hexadecimal number constants should be used except where decimal or binary numbers make much more sense in that constant's context. * Hexadecimal letters should be upper-case. * When you set two registers or two memory locations to an immediate 16-bit zero, you should use the expressions ```#<$0000``` and ```#>$0000``` (they make it obvious where you are putting the lower and upper bytes). -* If a function is declared to return a char-sized value, it actually must return an integer-sized value. (When cc65 promotes a returned value, it sometimes assumes that the value already is an integer.) +* If a function is declared to return a char-sized value, it actually must return an integer-sized value. (When cc65 promotes a returned value, it sometimes assumes that the value already is an integer.) This must be done in one of the following ways: +<pre> + lda #RETURN_VALUE + ldx #0 ; return value is char +</pre> +or, if the value is 0, you can use: +<pre> + lda #RETURN_VALUE + .assert RETURN_VALUE = 0 + tax +</pre> +sometimes jumping to return0 could save a byte: +<pre> + .assert RETURN_VALUE = 0 + jmp return 0 +</pre> * Functions, that are intended for a platform's system library, should be optimized as much as possible. * Sometimes, there must be a trade-off between size and speed. If you think that a library function won't be used often, then you should make it small. Otherwise, you should make it fast. * Comments that are put on the right side of instructions must be aligned (start in the same character columns). diff --git a/libsrc/apple2/emd/a2.auxmem.s b/libsrc/apple2/emd/a2.auxmem.s index 5ef2564b1..c582e9eec 100644 --- a/libsrc/apple2/emd/a2.auxmem.s +++ b/libsrc/apple2/emd/a2.auxmem.s @@ -73,7 +73,8 @@ INSTALL: and #$f0 cmp #$80 bne @L1 - lda #EM_ERR_OK + .assert EM_ERR_OK = 0, error + txa rts @L1: lda #EM_ERR_NO_DEVICE ; rts diff --git a/libsrc/apple2/joy/a2.stdjoy.s b/libsrc/apple2/joy/a2.stdjoy.s index 558013910..11be52eb4 100644 --- a/libsrc/apple2/joy/a2.stdjoy.s +++ b/libsrc/apple2/joy/a2.stdjoy.s @@ -71,8 +71,9 @@ INSTALL: stx gettype+2 gettype:jsr $0000 sta ostype - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; Fall through ; UNINSTALL routine. Is called before the driver is removed from memory. diff --git a/libsrc/apple2/mou/a2.stdmou.s b/libsrc/apple2/mou/a2.stdmou.s index dfc69a942..c54c09d34 100644 --- a/libsrc/apple2/mou/a2.stdmou.s +++ b/libsrc/apple2/mou/a2.stdmou.s @@ -133,8 +133,8 @@ next: inc ptr1+1 bcc :+ ; Mouse firmware not found - lda #<MOUSE_ERR_NO_DEVICE - ldx #>MOUSE_ERR_NO_DEVICE + lda #MOUSE_ERR_NO_DEVICE + ldx #0 ; return value is char rts ; Check Pascal 1.1 Firmware Protocol ID bytes diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index d49bf3526..6ad9c3825 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -168,8 +168,9 @@ SER_CLOSE: sta ACIA_CMD,x ; Done, return an error code -: lda #<SER_ERR_OK - tax ; A is zero +: lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax stx Index ; Mark port as closed rts @@ -256,23 +257,24 @@ SER_OPEN: ; Done stx Index ; Mark port as open - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ; Device (hardware) not found -NoDevice:lda #<SER_ERR_NO_DEVICE - ldx #>SER_ERR_NO_DEVICE +NoDevice:lda #SER_ERR_NO_DEVICE + ldx #0 ; return value is char rts ; Invalid parameter -InvParam:lda #<SER_ERR_INIT_FAILED - ldx #>SER_ERR_INIT_FAILED +InvParam:lda #SER_ERR_INIT_FAILED + ldx #0 ; return value is char rts ; Baud rate not available -InvBaud:lda #<SER_ERR_BAUD_UNAVAIL - ldx #>SER_ERR_BAUD_UNAVAIL +InvBaud:lda #SER_ERR_BAUD_UNAVAIL + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- @@ -292,8 +294,8 @@ SER_GET: : lda RecvFreeCnt ; (25) cmp #$FF bne :+ - lda #<SER_ERR_NO_DATA - ldx #>SER_ERR_NO_DATA + lda #SER_ERR_NO_DATA + ldx #0 ; return value is char rts ; Check for flow stopped & enough free: release flow control @@ -336,8 +338,8 @@ SER_PUT: ; Put byte into send buffer & send : ldy SendFreeCnt bne :+ - lda #<SER_ERR_OVERFLOW - ldx #>SER_ERR_OVERFLOW + lda #SER_ERR_OVERFLOW + ldx #0 ; return value is char rts : ldy SendTail @@ -346,7 +348,8 @@ SER_PUT: dec SendFreeCnt lda #$FF ; TryHard = true jsr TryToSend - lda #<SER_ERR_OK + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error tax rts @@ -359,7 +362,8 @@ SER_STATUS: lda ACIA_STATUS,x ldx #$00 sta (ptr1,x) - txa ; SER_ERR_OK + .assert SER_ERR_OK = 0, error + txa rts ;---------------------------------------------------------------------------- @@ -379,11 +383,12 @@ SER_IOCTL: bcs :+ stx Slot - tax ; SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts -: lda #<SER_ERR_INV_IOCTL - ldx #>SER_ERR_INV_IOCTL +: lda #SER_ERR_INV_IOCTL + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- diff --git a/libsrc/atari/joy/atrmj8.s b/libsrc/atari/joy/atrmj8.s index 3a26c381d..daf11651d 100644 --- a/libsrc/atari/joy/atrmj8.s +++ b/libsrc/atari/joy/atrmj8.s @@ -69,7 +69,8 @@ INSTALL: lda #$34 sta PACTL lda #JOY_ERR_OK - ldx #0 + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/atari/joy/atrstd.s b/libsrc/atari/joy/atrstd.s index fd1d99d31..1a124192f 100644 --- a/libsrc/atari/joy/atrstd.s +++ b/libsrc/atari/joy/atrstd.s @@ -62,7 +62,8 @@ JOY_COUNT = 4 ; Number of joysticks we support INSTALL: lda #JOY_ERR_OK - ldx #0 + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/atari/mou/atrjoy.s b/libsrc/atari/mou/atrjoy.s index 3ea428576..a93c7de13 100644 --- a/libsrc/atari/mou/atrjoy.s +++ b/libsrc/atari/mou/atrjoy.s @@ -137,9 +137,10 @@ INSTALL: ldx YPos+1 jsr CMOVEY -; Done, return zero (= MOUSE_ERR_OK) +; Done - ldx #$00 + ldx #MOUSE_ERR_OK + .assert MOUSE_ERR_OK = 0, error txa rts diff --git a/libsrc/atari/mou/atrst.s b/libsrc/atari/mou/atrst.s index 5d8a5cd12..626b7a8f7 100644 --- a/libsrc/atari/mou/atrst.s +++ b/libsrc/atari/mou/atrst.s @@ -268,9 +268,10 @@ INSTALL: and #$0f sta old_porta_vbi -; Done, return zero (= MOUSE_ERR_OK) +; Done - ldx #$00 + ldx #MOUSE_ERR_OK + .assert MOUSE_ERR_OK = 0, error txa rts diff --git a/libsrc/atari/mou/atrtt.s b/libsrc/atari/mou/atrtt.s index 61963aa61..b1e53935e 100644 --- a/libsrc/atari/mou/atrtt.s +++ b/libsrc/atari/mou/atrtt.s @@ -132,9 +132,10 @@ INSTALL: ldx YPos+1 jsr CMOVEY -; Done, return zero (= MOUSE_ERR_OK) +; Done - ldx #$00 + ldx #MOUSE_ERR_OK + .assert MOUSE_ERR_OK = 0, error txa rts diff --git a/libsrc/atari/ser/atrrdev.s b/libsrc/atari/ser/atrrdev.s index 3a7bc21c2..1d2b98e8d 100644 --- a/libsrc/atari/ser/atrrdev.s +++ b/libsrc/atari/ser/atrrdev.s @@ -135,8 +135,8 @@ my_CIOV: .code invbaud: - lda #<SER_ERR_BAUD_UNAVAIL - ldx #>SER_ERR_BAUD_UNAVAIL + lda #SER_ERR_BAUD_UNAVAIL + ldx #0 ; return value is char openerr: rts @@ -229,8 +229,9 @@ SER_OPEN: jsr my_CIOV bmi cioerr - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts inverr: jmp my___inviocb @@ -240,8 +241,8 @@ cioerr: jsr my_fddecusage ; decrement usage counter of fd as open failed init_err: - ldx #0 lda #SER_ERR_INIT_FAILED + ldx #0 ; return value is char rts ;---- open the device @@ -313,8 +314,9 @@ SER_CLOSE: stx rshand+1 inx stx cm_run -@done: lda #<SER_ERR_OK - ldx #>SER_ERR_OK +@done: lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ;---------------------------------------------------------------------------- @@ -365,16 +367,16 @@ SER_GET: rts @nix_da:lda #SER_ERR_NO_DATA - ldx #0 + ldx #0 ; return value is char rts ser_error: lda #SER_ERR_OVERFLOW ; there is no large selection of serial error codes... :-/ - ldx #0 + ldx #0 ; return value is char rts ni_err: lda #SER_ERR_NOT_OPEN - ldx #0 + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- @@ -427,8 +429,8 @@ SER_STATUS: ; SER_IOCTL: - lda #<SER_ERR_INV_IOCTL ; We don't support ioclts for now - ldx #>SER_ERR_INV_IOCTL + lda #SER_ERR_INV_IOCTL ; We don't support ioclts for now + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- @@ -456,8 +458,8 @@ search: lda HATABS,y ; get device name ; R: device not found, return error - lda #<SER_ERR_NO_DEVICE - ldx #0 + lda #SER_ERR_NO_DEVICE + ldx #0 ; return value is char rts ; R: device found, initialize jump table into main program @@ -554,8 +556,9 @@ found: lda ptr3 pla sta ptr3 - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts diff --git a/libsrc/atari5200/joy/atr5200std.s b/libsrc/atari5200/joy/atr5200std.s index fb7946bea..980428d13 100644 --- a/libsrc/atari5200/joy/atr5200std.s +++ b/libsrc/atari5200/joy/atr5200std.s @@ -47,7 +47,8 @@ INSTALL: lda #$04 ; enable POT input from the joystick ports, see section "GTIA" in sta CONSOL ; http://www.atarimuseum.com/videogames/consoles/5200/conv_to_5200.html lda #JOY_ERR_OK - ldx #0 + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/atari7800/joy/atari7800-stdjoy.s b/libsrc/atari7800/joy/atari7800-stdjoy.s index d76e1d105..59f656ada 100644 --- a/libsrc/atari7800/joy/atari7800-stdjoy.s +++ b/libsrc/atari7800/joy/atari7800-stdjoy.s @@ -62,8 +62,9 @@ INSTALL: sty SWCHB ; enable 2-button 7800 controller 2: pull pin 6 (INPT4) high reset: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/atmos/joy/atmos-ijk.s b/libsrc/atmos/joy/atmos-ijk.s index 6e75a3e0b..c2bdd67ab 100644 --- a/libsrc/atmos/joy/atmos-ijk.s +++ b/libsrc/atmos/joy/atmos-ijk.s @@ -55,11 +55,12 @@ INSTALL: lda VIA::PRA and #%00100000 bne ijkPresent - lda #<JOY_ERR_NO_DEVICE + lda #JOY_ERR_NO_DEVICE .byte $2C ; Skip next opcode ijkPresent: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/atmos/joy/atmos-pase.s b/libsrc/atmos/joy/atmos-pase.s index fd64901c9..d9982cafe 100644 --- a/libsrc/atmos/joy/atmos-pase.s +++ b/libsrc/atmos/joy/atmos-pase.s @@ -58,7 +58,8 @@ temp2: .byte $00 INSTALL: lda #JOY_ERR_OK - ldx #0 + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/atmos/ser/atmos-acia.s b/libsrc/atmos/ser/atmos-acia.s index f84b66a0a..f679125d1 100644 --- a/libsrc/atmos/ser/atmos-acia.s +++ b/libsrc/atmos/ser/atmos-acia.s @@ -141,8 +141,9 @@ SER_CLOSE: sta ACIA::CMD,x ; Done, return an error code -: lda #<SER_ERR_OK - tax ; A is zero +: lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax stx Index ; Mark port as closed rts @@ -205,8 +206,9 @@ SER_OPEN: ; Done stx Index ; Mark port as open - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ; Invalid parameter @@ -235,8 +237,8 @@ SER_GET: : lda RecvFreeCnt ; (25) cmp #$FF bne :+ - lda #<SER_ERR_NO_DATA - ldx #>SER_ERR_NO_DATA + lda #SER_ERR_NO_DATA + ldx #0 ; return value is char rts ; Check for flow stopped & enough free: release flow control @@ -277,8 +279,8 @@ SER_PUT: ; Put byte into send buffer & send : ldy SendFreeCnt bne :+ - lda #<SER_ERR_OVERFLOW - ldx #>SER_ERR_OVERFLOW + lda #SER_ERR_OVERFLOW + ldx #0 ; return value is char rts : ldy SendTail @@ -287,7 +289,8 @@ SER_PUT: dec SendFreeCnt lda #$FF ; TryHard = true jsr TryToSend - lda #<SER_ERR_OK + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error tax rts @@ -299,7 +302,8 @@ SER_STATUS: lda ACIA::STATUS ldx #$00 sta (ptr1,x) - txa ; SER_ERR_OK + .assert SER_ERR_OK = 0, error + txa rts ;---------------------------------------------------------------------------- @@ -308,8 +312,8 @@ SER_STATUS: ; Must return an SER_ERR_xx code in a/x. SER_IOCTL: - lda #<SER_ERR_INV_IOCTL - ldx #>SER_ERR_INV_IOCTL + lda #SER_ERR_INV_IOCTL + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- diff --git a/libsrc/atmos/tgi/atmos-228-200-3.s b/libsrc/atmos/tgi/atmos-228-200-3.s index 98d2cef96..466f6922a 100644 --- a/libsrc/atmos/tgi/atmos-228-200-3.s +++ b/libsrc/atmos/tgi/atmos-228-200-3.s @@ -215,7 +215,8 @@ SETPALETTE: jsr PAPER ldy #1 jsr flipcolor - dey ; TGI_ERR_OK + .assert TGI_ERR_OK = 0, error + dey sty ERROR sty PARAM1+1 jmp INK diff --git a/libsrc/c128/emd/c128-efnram.s b/libsrc/c128/emd/c128-efnram.s index 788c73e0f..909c90048 100644 --- a/libsrc/c128/emd/c128-efnram.s +++ b/libsrc/c128/emd/c128-efnram.s @@ -87,16 +87,17 @@ INSTALL: cli cmp tmp1 beq @ram_present - lda #<EM_ERR_NO_DEVICE - ldx #>EM_ERR_NO_DEVICE + lda #EM_ERR_NO_DEVICE + ldx #0 ; return value is char rts @ram_present: ldx #$FF stx curpage stx curpage+1 ; Invalidate the current page + .assert EM_ERR_OK = 0, error inx - txa ; A = X = EM_ERR_OK + txa ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c128/emd/c128-georam.s b/libsrc/c128/emd/c128-georam.s index 7511c6841..ecf12f6cd 100644 --- a/libsrc/c128/emd/c128-georam.s +++ b/libsrc/c128/emd/c128-georam.s @@ -120,16 +120,16 @@ INSTALL: bne @setok @notpresent: - lda #<EM_ERR_NO_DEVICE - ldx #>EM_ERR_NO_DEVICE + lda #EM_ERR_NO_DEVICE + ldx #0 ; return value is char rts @setok: lda #0 sta pagecount stx pagecount+1 - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax rts check: diff --git a/libsrc/c128/emd/c128-ifnram.s b/libsrc/c128/emd/c128-ifnram.s index 01a4fdf8e..c51b775b2 100644 --- a/libsrc/c128/emd/c128-ifnram.s +++ b/libsrc/c128/emd/c128-ifnram.s @@ -87,16 +87,17 @@ INSTALL: cli cmp tmp1 beq @ram_present - lda #<EM_ERR_NO_DEVICE - ldx #>EM_ERR_NO_DEVICE + lda #EM_ERR_NO_DEVICE + ldx #0 ; return value is char rts @ram_present: ldx #$FF stx curpage stx curpage+1 ; Invalidate the current page + .assert EM_ERR_OK = 0, error inx - txa ; A = X = EM_ERR_OK + txa ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c128/emd/c128-ram.s b/libsrc/c128/emd/c128-ram.s index 3fc52c9cc..0ae504b84 100644 --- a/libsrc/c128/emd/c128-ram.s +++ b/libsrc/c128/emd/c128-ram.s @@ -68,8 +68,9 @@ INSTALL: ldx #$FF stx curpage stx curpage+1 ; Invalidate the current page + .assert EM_ERR_OK = 0, error inx - txa ; A = X = EM_ERR_OK + txa ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c128/emd/c128-ram2.s b/libsrc/c128/emd/c128-ram2.s index 7d2703fa5..92e72700a 100644 --- a/libsrc/c128/emd/c128-ram2.s +++ b/libsrc/c128/emd/c128-ram2.s @@ -107,8 +107,9 @@ INSTALL: ldx #$FF stx curpage stx curpage+1 ; Invalidate the current page + .assert EM_ERR_OK = 0, error inx - txa ; A = X = EM_ERR_OK + txa ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c128/emd/c128-ramcart.s b/libsrc/c128/emd/c128-ramcart.s index e72d053ac..c58c1cd1b 100644 --- a/libsrc/c128/emd/c128-ramcart.s +++ b/libsrc/c128/emd/c128-ramcart.s @@ -97,13 +97,14 @@ INSTALL: lda #0 sta pagecount stx pagecount+1 - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + lda #EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax rts @notpresent: @readonly: - lda #<EM_ERR_NO_DEVICE - ldx #>EM_ERR_NO_DEVICE + lda #EM_ERR_NO_DEVICE + ldx #0 ; return value is char ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c128/emd/c128-reu.s b/libsrc/c128/emd/c128-reu.s index 84e7cb695..8228a0517 100644 --- a/libsrc/c128/emd/c128-reu.s +++ b/libsrc/c128/emd/c128-reu.s @@ -126,8 +126,9 @@ size_found: pagecount_ok: stx pagecount sty pagecount+1 - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + lda #EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax rts ; common REU setup for size check diff --git a/libsrc/c128/emd/c128-vdc.s b/libsrc/c128/emd/c128-vdc.s index accb82154..8d0b77fd2 100644 --- a/libsrc/c128/emd/c128-vdc.s +++ b/libsrc/c128/emd/c128-vdc.s @@ -121,8 +121,9 @@ INSTALL: lda vdc_cset_save jsr vdcputreg @keep64kBit: - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + lda #EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax rts test64k: diff --git a/libsrc/c128/joy/c128-ptvjoy.s b/libsrc/c128/joy/c128-ptvjoy.s index 180f7667d..0a1c53587 100644 --- a/libsrc/c128/joy/c128-ptvjoy.s +++ b/libsrc/c128/joy/c128-ptvjoy.s @@ -53,8 +53,9 @@ JOY_COUNT = 4 ; Number of joysticks we support ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c128/joy/c128-stdjoy.s b/libsrc/c128/joy/c128-stdjoy.s index bf2e2fea7..ee04374ee 100644 --- a/libsrc/c128/joy/c128-stdjoy.s +++ b/libsrc/c128/joy/c128-stdjoy.s @@ -57,8 +57,9 @@ JOY_COUNT = 2 ; Number of joysticks we support ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c128/mou/c128-1351.s b/libsrc/c128/mou/c128-1351.s index 79ccbe0de..76e28d9f7 100644 --- a/libsrc/c128/mou/c128-1351.s +++ b/libsrc/c128/mou/c128-1351.s @@ -194,9 +194,10 @@ INSTALL: sta (ptr3),y cli -; Done, return zero (= MOUSE_ERR_OK) +; Done - ldx #$00 + ldx #MOUSE_ERR_OK + .assert MOUSE_ERR_OK = 0, error txa rts diff --git a/libsrc/c128/mou/c128-inkwell.s b/libsrc/c128/mou/c128-inkwell.s index b8e71bbb1..2aac7d32d 100644 --- a/libsrc/c128/mou/c128-inkwell.s +++ b/libsrc/c128/mou/c128-inkwell.s @@ -228,9 +228,10 @@ INSTALL: jsr MoveX cli -; Done, return zero. +; Done lda #MOUSE_ERR_OK + .assert MOUSE_ERR_OK = 0, error tax rts diff --git a/libsrc/c128/mou/c128-joy.s b/libsrc/c128/mou/c128-joy.s index 065674dc0..d809db526 100644 --- a/libsrc/c128/mou/c128-joy.s +++ b/libsrc/c128/mou/c128-joy.s @@ -195,9 +195,10 @@ INSTALL: sta (ptr3),y cli -; Done, return zero (= MOUSE_ERR_OK) +; Done - ldx #$00 + ldx #MOUSE_ERR_OK + .assert MOUSE_ERR_OK = 0, error txa rts diff --git a/libsrc/c128/mou/c128-pot.s b/libsrc/c128/mou/c128-pot.s index e582d64fb..1cbe4aa18 100644 --- a/libsrc/c128/mou/c128-pot.s +++ b/libsrc/c128/mou/c128-pot.s @@ -195,9 +195,10 @@ INSTALL: sta (ptr3),y cli -; Done, return zero (= MOUSE_ERR_OK) +; Done - ldx #$00 + ldx #MOUSE_ERR_OK + .assert MOUSE_ERR_OK = 0, error txa rts diff --git a/libsrc/c128/ser/c128-swlink.s b/libsrc/c128/ser/c128-swlink.s index 3337e2668..7d36eb5bc 100644 --- a/libsrc/c128/ser/c128-swlink.s +++ b/libsrc/c128/ser/c128-swlink.s @@ -187,8 +187,9 @@ SetNMI: sta NMIVec ; Done, return an error code - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ;---------------------------------------------------------------------------- @@ -264,22 +265,23 @@ SER_OPEN: ; Done - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ; Invalid parameter InvParam: - lda #<SER_ERR_INIT_FAILED - ldx #>SER_ERR_INIT_FAILED + lda #SER_ERR_INIT_FAILED + ldx #0 ; return value is char rts ; Baud rate not available InvBaud: - lda #<SER_ERR_BAUD_UNAVAIL - ldx #>SER_ERR_BAUD_UNAVAIL + lda #SER_ERR_BAUD_UNAVAIL + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- @@ -300,8 +302,9 @@ SER_CLOSE: ; Return OK - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ;---------------------------------------------------------------------------- @@ -322,8 +325,8 @@ SER_GET: @L1: lda RecvFreeCnt ; (25) cmp #$ff bne @L2 - lda #<SER_ERR_NO_DATA - ldx #>SER_ERR_NO_DATA + lda #SER_ERR_NO_DATA + ldx #0 ; return value is char rts ; Check for flow stopped & enough free: release flow control @@ -370,7 +373,7 @@ SER_PUT: @L2: ldx SendFreeCnt bne @L3 - lda #<SER_ERR_OVERFLOW ; X is already zero + lda #SER_ERR_OVERFLOW ; X is already zero rts @L3: ldx SendTail @@ -379,7 +382,8 @@ SER_PUT: dec SendFreeCnt lda #$ff jsr TryToSend - lda #<SER_ERR_OK + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error tax rts @@ -392,7 +396,8 @@ SER_STATUS: lda ACIA_STATUS ldx #0 sta (ptr1,x) - txa ; SER_ERR_OK + .assert SER_ERR_OK = 0, error + txa rts ;---------------------------------------------------------------------------- @@ -402,8 +407,8 @@ SER_STATUS: ; SER_IOCTL: - lda #<SER_ERR_INV_IOCTL ; We don't support ioclts for now - ldx #>SER_ERR_INV_IOCTL + lda #SER_ERR_INV_IOCTL ; We don't support ioclts for now + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- diff --git a/libsrc/c16/emd/c16-ram.s b/libsrc/c16/emd/c16-ram.s index a8083aca4..937019974 100644 --- a/libsrc/c16/emd/c16-ram.s +++ b/libsrc/c16/emd/c16-ram.s @@ -77,12 +77,13 @@ INSTALL: ldx #$FF stx curpage ; Invalidate the current page - inx ; X = 0 - txa ; A = X = EM_ERR_OK + .assert EM_ERR_OK = 0, error + inx + txa rts -nomem: ldx #>EM_ERR_NO_DEVICE - lda #<EM_ERR_NO_DEVICE +nomem: ldx #EM_ERR_NO_DEVICE + lda #0 ; return value is char ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c64/emd/c64-65816.s b/libsrc/c64/emd/c64-65816.s index 39f323d28..ce9491fbe 100644 --- a/libsrc/c64/emd/c64-65816.s +++ b/libsrc/c64/emd/c64-65816.s @@ -120,13 +120,14 @@ INSTALL: dex @noextradex: stx bankcount - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + lda #EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax rts @not_present: cli - lda #<EM_ERR_NO_DEVICE - ldx #>EM_ERR_NO_DEVICE + lda #EM_ERR_NO_DEVICE + ldx #0 ; return value is char ; rts ; Run into UNINSTALL instead diff --git a/libsrc/c64/emd/c64-c256k.s b/libsrc/c64/emd/c64-c256k.s index 79706e8fb..5a4bc54c3 100644 --- a/libsrc/c64/emd/c64-c256k.s +++ b/libsrc/c64/emd/c64-c256k.s @@ -158,13 +158,14 @@ INSTALL: jsr restore_data cpy #$01 beq @present - lda #<EM_ERR_NO_DEVICE - ldx #>EM_ERR_NO_DEVICE + lda #EM_ERR_NO_DEVICE + ldx #0 ; return value is char rts @present: - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + lda #EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c64/emd/c64-dqbb.s b/libsrc/c64/emd/c64-dqbb.s index 986c5939d..6a63b3baa 100644 --- a/libsrc/c64/emd/c64-dqbb.s +++ b/libsrc/c64/emd/c64-dqbb.s @@ -147,13 +147,14 @@ INSTALL: jsr restore_data cpy #$01 beq @present - lda #<EM_ERR_NO_DEVICE - ldx #>EM_ERR_NO_DEVICE + lda #EM_ERR_NO_DEVICE + ldx #0 ; return value is char rts @present: - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + lda #EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c64/emd/c64-georam.s b/libsrc/c64/emd/c64-georam.s index 97f1a7cc4..0116fe8ea 100644 --- a/libsrc/c64/emd/c64-georam.s +++ b/libsrc/c64/emd/c64-georam.s @@ -121,16 +121,17 @@ INSTALL: bne @setok @notpresent: - lda #<EM_ERR_NO_DEVICE - ldx #>EM_ERR_NO_DEVICE + lda #EM_ERR_NO_DEVICE + .assert EM_ERR_OK = 0, error + tax rts @setok: lda #0 sta pagecount stx pagecount+1 - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax rts check: diff --git a/libsrc/c64/emd/c64-isepic.s b/libsrc/c64/emd/c64-isepic.s index 3764443e2..2b7949757 100644 --- a/libsrc/c64/emd/c64-isepic.s +++ b/libsrc/c64/emd/c64-isepic.s @@ -76,13 +76,14 @@ INSTALL: beq @setok @notpresent: - lda #<EM_ERR_NO_DEVICE - ldx #>EM_ERR_NO_DEVICE + lda #EM_ERR_NO_DEVICE + ldx #0 ; return value is char rts @setok: - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + lda #EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c64/emd/c64-kerberos.s b/libsrc/c64/emd/c64-kerberos.s index 30183362f..20be4e409 100644 --- a/libsrc/c64/emd/c64-kerberos.s +++ b/libsrc/c64/emd/c64-kerberos.s @@ -82,13 +82,14 @@ INSTALL: cmp #$AA bne @notpresent - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + lda #EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax rts @notpresent: - lda #<EM_ERR_NO_DEVICE - ldx #>EM_ERR_NO_DEVICE + lda #EM_ERR_NO_DEVICE + ldx #0 ; return value is char ; use rts from UNINSTALL below ; ------------------------------------------------------------------------ diff --git a/libsrc/c64/emd/c64-ram.s b/libsrc/c64/emd/c64-ram.s index 5355b552d..cdd7b8965 100644 --- a/libsrc/c64/emd/c64-ram.s +++ b/libsrc/c64/emd/c64-ram.s @@ -65,8 +65,9 @@ window: .res 256 ; Memory "window" INSTALL: ldx #$FF stx curpage ; Invalidate the current page - inx ; X = 0 - txa ; A = X = EM_ERR_OK + .assert EM_ERR_OK = 0, error + inx + txa ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c64/emd/c64-ramcart.s b/libsrc/c64/emd/c64-ramcart.s index 8998bb6d6..a99f25b4f 100644 --- a/libsrc/c64/emd/c64-ramcart.s +++ b/libsrc/c64/emd/c64-ramcart.s @@ -98,13 +98,13 @@ INSTALL: lda #0 sta pagecount stx pagecount+1 - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax rts @notpresent: @readonly: - lda #<EM_ERR_NO_DEVICE - ldx #>EM_ERR_NO_DEVICE + lda #EM_ERR_NO_DEVICE + ldx #0 ; return value is char ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c64/emd/c64-reu.s b/libsrc/c64/emd/c64-reu.s index 07ac1fbed..832e66f51 100644 --- a/libsrc/c64/emd/c64-reu.s +++ b/libsrc/c64/emd/c64-reu.s @@ -127,8 +127,9 @@ size_found: pagecount_ok: stx pagecount sty pagecount+1 - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + lda #EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax rts ; common REU setup for size check @@ -152,6 +153,7 @@ reu_size_check_common: nodevice: lda #EM_ERR_NO_DEVICE + .assert EM_ERR_OK = 0, error ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c64/emd/c64-vdc.s b/libsrc/c64/emd/c64-vdc.s index 2448f09d4..60fbccbbf 100644 --- a/libsrc/c64/emd/c64-vdc.s +++ b/libsrc/c64/emd/c64-vdc.s @@ -87,8 +87,8 @@ INSTALL: bne @L0 iny bne @L0 - lda #<EM_ERR_NO_DEVICE - ldx #>EM_ERR_NO_DEVICE + lda #EM_ERR_NO_DEVICE +; ldx #0 ; return value is char rts @present: @@ -131,8 +131,9 @@ INSTALL: sta pagecount stx pagecount+1 @endok: - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + lda #EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax rts test64k: diff --git a/libsrc/c64/emd/dtv-himem.s b/libsrc/c64/emd/dtv-himem.s index 6dde874f7..4d19b19d5 100644 --- a/libsrc/c64/emd/dtv-himem.s +++ b/libsrc/c64/emd/dtv-himem.s @@ -93,15 +93,16 @@ INSTALL: ; DTV not found - lda #<EM_ERR_NO_DEVICE - ldx #>EM_ERR_NO_DEVICE + lda #EM_ERR_NO_DEVICE + ldx #0 ; return value is char rts @present: ldx #$FF stx curpage+1 ; Invalidate curpage - inx ; X = 0 - txa ; A/X = EM_ERR_OK + .assert EM_ERR_OK = 0, error + inx + txa ; rts ; Run into UNINSTALL instead diff --git a/libsrc/c64/joy/c64-hitjoy.s b/libsrc/c64/joy/c64-hitjoy.s index 3b4a0b909..a9d454fd0 100644 --- a/libsrc/c64/joy/c64-hitjoy.s +++ b/libsrc/c64/joy/c64-hitjoy.s @@ -59,8 +59,9 @@ temp4: .byte 0 ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead diff --git a/libsrc/c64/joy/c64-numpad.s b/libsrc/c64/joy/c64-numpad.s index 0ccdc4fcd..f6839d6cf 100644 --- a/libsrc/c64/joy/c64-numpad.s +++ b/libsrc/c64/joy/c64-numpad.s @@ -100,12 +100,14 @@ masktable: ; INSTALL: - lda #JOY_ERR_OK ; Assume we have a joystick - ldx VIC_CLK_128 ; Test for a C128 - cpx #$FF + lda #JOY_ERR_OK ; Assume we have a "joystick" + .assert JOY_ERR_OK = 0, error + tax ; Set high byte + ldy VIC_CLK_128 ; Test for a C128 + cpy #$FF bne @C128 ; Jump if we have one lda #JOY_ERR_NO_DEVICE ; No C128 -> no numpad -@C128: ldx #0 ; Set high byte +@C128: ; rts ; Run into UNINSTALL instead diff --git a/libsrc/c64/joy/c64-ptvjoy.s b/libsrc/c64/joy/c64-ptvjoy.s index a772fb5f6..30466b2c2 100644 --- a/libsrc/c64/joy/c64-ptvjoy.s +++ b/libsrc/c64/joy/c64-ptvjoy.s @@ -52,8 +52,9 @@ JOY_COUNT = 4 ; Number of joysticks we support ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/c64/joy/c64-stdjoy.s b/libsrc/c64/joy/c64-stdjoy.s index d11093fba..511032507 100644 --- a/libsrc/c64/joy/c64-stdjoy.s +++ b/libsrc/c64/joy/c64-stdjoy.s @@ -56,8 +56,9 @@ JOY_COUNT = 2 ; Number of joysticks we support ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead diff --git a/libsrc/c64/mou/c64-1351.s b/libsrc/c64/mou/c64-1351.s index a7d042c7b..ce0f18803 100644 --- a/libsrc/c64/mou/c64-1351.s +++ b/libsrc/c64/mou/c64-1351.s @@ -152,9 +152,10 @@ INSTALL: jsr CMOVEY cli -; Done, return zero (= MOUSE_ERR_OK) +; Done - ldx #$00 + ldx #MOUSE_ERR_OK + .assert MOUSE_ERR_OK = 0, error txa rts @@ -307,8 +308,8 @@ INFO: jsr POS ; Must return an error code in a/x. ; -IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioclts for now - ldx #>MOUSE_ERR_INV_IOCTL +IOCTL: lda #MOUSE_ERR_INV_IOCTL ; We don't support ioclts for now + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- diff --git a/libsrc/c64/mou/c64-inkwell.s b/libsrc/c64/mou/c64-inkwell.s index 9c876a7c8..d2f14a6f0 100644 --- a/libsrc/c64/mou/c64-inkwell.s +++ b/libsrc/c64/mou/c64-inkwell.s @@ -168,6 +168,7 @@ INSTALL: ; Done, return zero. lda #MOUSE_ERR_OK + .assert MOUSE_ERR_OK = 0, error tax rts @@ -319,8 +320,8 @@ INFO: jsr POS ; Must return an error code in .XA. ; -IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioctls, for now - ldx #>MOUSE_ERR_INV_IOCTL +IOCTL: lda #MOUSE_ERR_INV_IOCTL ; We don't support ioctls, for now + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- diff --git a/libsrc/c64/mou/c64-joy.s b/libsrc/c64/mou/c64-joy.s index f2a501000..5ee1b4f84 100644 --- a/libsrc/c64/mou/c64-joy.s +++ b/libsrc/c64/mou/c64-joy.s @@ -156,9 +156,10 @@ INSTALL: jsr CMOVEY cli -; Done, return zero (= MOUSE_ERR_OK) +; Done - ldx #$00 + ldx #MOUSE_ERR_OK + .assert MOUSE_ERR_OK = 0, error txa rts @@ -312,8 +313,8 @@ INFO: jsr POS ; Must return an error code in a/x. ; -IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioclts for now - ldx #>MOUSE_ERR_INV_IOCTL +IOCTL: lda #MOUSE_ERR_INV_IOCTL ; We don't support ioclts for now + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- diff --git a/libsrc/c64/mou/c64-pot.s b/libsrc/c64/mou/c64-pot.s index 102ca351c..9bdf24f62 100644 --- a/libsrc/c64/mou/c64-pot.s +++ b/libsrc/c64/mou/c64-pot.s @@ -139,9 +139,10 @@ INSTALL: jsr CMOVEY cli -; Done, return zero (= MOUSE_ERR_OK) +; Done - ldx #$00 + ldx #MOUSE_ERR_OK + .assert MOUSE_ERR_OK = 0, error txa rts @@ -297,8 +298,8 @@ INFO: jsr POS ; Must return an error code in a/x. ; -IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioclts for now - ldx #>MOUSE_ERR_INV_IOCTL +IOCTL: lda #MOUSE_ERR_INV_IOCTL ; We don't support ioclts for now + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- diff --git a/libsrc/c64/ser/c64-swlink.s b/libsrc/c64/ser/c64-swlink.s index 597cf1dd6..81c9916a6 100644 --- a/libsrc/c64/ser/c64-swlink.s +++ b/libsrc/c64/ser/c64-swlink.s @@ -161,8 +161,9 @@ SetNMI: sta NMIVec ; Done, return an error code - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ;---------------------------------------------------------------------------- @@ -238,22 +239,23 @@ SER_OPEN: ; Done - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ; Invalid parameter InvParam: - lda #<SER_ERR_INIT_FAILED - ldx #>SER_ERR_INIT_FAILED + lda #SER_ERR_INIT_FAILED + ldx #0 ; return value is char rts ; Baud rate not available InvBaud: - lda #<SER_ERR_BAUD_UNAVAIL - ldx #>SER_ERR_BAUD_UNAVAIL + lda #SER_ERR_BAUD_UNAVAIL + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- @@ -274,8 +276,9 @@ SER_CLOSE: ; Return OK - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ;---------------------------------------------------------------------------- @@ -296,8 +299,8 @@ SER_GET: @L1: lda RecvFreeCnt ; (25) cmp #$ff bne @L2 - lda #<SER_ERR_NO_DATA - ldx #>SER_ERR_NO_DATA + lda #SER_ERR_NO_DATA + ldx #0 ; return value is char rts ; Check for flow stopped & enough free: release flow control @@ -344,7 +347,7 @@ SER_PUT: @L2: ldx SendFreeCnt bne @L3 - lda #<SER_ERR_OVERFLOW ; X is already zero + lda #SER_ERR_OVERFLOW ; X is already zero rts @L3: ldx SendTail @@ -353,7 +356,8 @@ SER_PUT: dec SendFreeCnt lda #$ff jsr TryToSend - lda #<SER_ERR_OK + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error tax rts @@ -366,7 +370,8 @@ SER_STATUS: lda ACIA_STATUS ldx #0 sta (ptr1,x) - txa ; SER_ERR_OK + .assert SER_ERR_OK = 0, error + txa rts ;---------------------------------------------------------------------------- @@ -376,8 +381,8 @@ SER_STATUS: ; SER_IOCTL: - lda #<SER_ERR_INV_IOCTL ; We don't support ioclts for now - ldx #>SER_ERR_INV_IOCTL + lda #SER_ERR_INV_IOCTL ; We don't support ioclts for now + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- diff --git a/libsrc/cbm510/emd/cbm510-ram.s b/libsrc/cbm510/emd/cbm510-ram.s index f724c7360..6cc319b7f 100644 --- a/libsrc/cbm510/emd/cbm510-ram.s +++ b/libsrc/cbm510/emd/cbm510-ram.s @@ -81,8 +81,9 @@ INSTALL: sbc #$00 sta pagecount -@L1: lda #<EM_ERR_OK - ldx #>EM_ERR_OK +@L1: lda #EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/cbm510/joy/cbm510-std.s b/libsrc/cbm510/joy/cbm510-std.s index 4e47fc1a0..f7cbb2cdc 100644 --- a/libsrc/cbm510/joy/cbm510-std.s +++ b/libsrc/cbm510/joy/cbm510-std.s @@ -57,8 +57,9 @@ JOY_COUNT = 2 ; Number of joysticks we support ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/cbm510/mou/cbm510-inkwl.s b/libsrc/cbm510/mou/cbm510-inkwl.s index 91bc52fcd..ea6d95934 100644 --- a/libsrc/cbm510/mou/cbm510-inkwl.s +++ b/libsrc/cbm510/mou/cbm510-inkwl.s @@ -175,6 +175,7 @@ INSTALL: ; Done, return zero. lda #MOUSE_ERR_OK + .assert MOUSE_ERR_OK = 0, error tax rts @@ -331,8 +332,8 @@ INFO: jsr POS ; Must return an error code in .XA. ; -IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioctls, for now - ldx #>MOUSE_ERR_INV_IOCTL +IOCTL: lda #MOUSE_ERR_INV_IOCTL ; We don't support ioctls, for now + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- diff --git a/libsrc/cbm510/mou/cbm510-joy.s b/libsrc/cbm510/mou/cbm510-joy.s index 8aa3a778e..4daa49272 100644 --- a/libsrc/cbm510/mou/cbm510-joy.s +++ b/libsrc/cbm510/mou/cbm510-joy.s @@ -140,7 +140,8 @@ INSTALL: ; Done, return zero. - ldx #>MOUSE_ERR_OK + ldx #MOUSE_ERR_OK + .assert MOUSE_ERR_OK = 0, error txa rts @@ -315,8 +316,8 @@ POS: ldy #MOUSE_POS::XCOORD ; Structure offset ; Must return an error code in .XA. ; -IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioctls, for now - ldx #>MOUSE_ERR_INV_IOCTL +IOCTL: lda #MOUSE_ERR_INV_IOCTL ; We don't support ioctls, for now + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- diff --git a/libsrc/cbm510/ser/cbm510-std.s b/libsrc/cbm510/ser/cbm510-std.s index 64f613cd5..cc58c1233 100644 --- a/libsrc/cbm510/ser/cbm510-std.s +++ b/libsrc/cbm510/ser/cbm510-std.s @@ -148,8 +148,9 @@ SER_CLOSE: ; Done, return an error code - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ;---------------------------------------------------------------------------- @@ -217,22 +218,23 @@ SER_OPEN: ; Done - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ; Invalid parameter InvParam: - lda #<SER_ERR_INIT_FAILED - ldx #>SER_ERR_INIT_FAILED + lda #SER_ERR_INIT_FAILED + ldx #0 ; return value is char rts ; Baud rate not available InvBaud: - lda #<SER_ERR_BAUD_UNAVAIL - ldx #>SER_ERR_BAUD_UNAVAIL + lda #SER_ERR_BAUD_UNAVAIL + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- @@ -253,8 +255,8 @@ SER_GET: @L1: lda RecvFreeCnt cmp #$ff bne @L2 - lda #<SER_ERR_NO_DATA - ldx #>SER_ERR_NO_DATA + lda #SER_ERR_NO_DATA + ldx #0 ; return value is char rts ; Check for flow stopped & enough free: release flow control @@ -301,7 +303,7 @@ SER_PUT: @L2: ldx SendFreeCnt bne @L3 - lda #<SER_ERR_OVERFLOW ; X is already zero + lda #SER_ERR_OVERFLOW ; X is already zero rts @L3: ldx SendTail @@ -310,7 +312,8 @@ SER_PUT: dec SendFreeCnt lda #$ff jsr TryToSend - lda #<SER_ERR_OK + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error tax rts @@ -328,7 +331,8 @@ SER_STATUS: sta (ptr1,x) lda IndReg sta ExecReg - txa ; SER_ERR_OK + .assert SER_ERR_OK = 0, error + txa rts ;---------------------------------------------------------------------------- @@ -338,8 +342,8 @@ SER_STATUS: ; SER_IOCTL: - lda #<SER_ERR_INV_IOCTL ; We don't support ioclts for now - ldx #>SER_ERR_INV_IOCTL + lda #SER_ERR_INV_IOCTL ; We don't support ioclts for now + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- diff --git a/libsrc/cbm610/emd/cbm610-ram.s b/libsrc/cbm610/emd/cbm610-ram.s index 5c67df7a4..5aa43b0c2 100644 --- a/libsrc/cbm610/emd/cbm610-ram.s +++ b/libsrc/cbm610/emd/cbm610-ram.s @@ -81,8 +81,9 @@ INSTALL: sbc #$00 sta pagecount -@L1: lda #<EM_ERR_OK - ldx #>EM_ERR_OK +@L1: lda #EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/cbm610/ser/cbm610-std.s b/libsrc/cbm610/ser/cbm610-std.s index 7cdb285bd..f7ddde935 100644 --- a/libsrc/cbm610/ser/cbm610-std.s +++ b/libsrc/cbm610/ser/cbm610-std.s @@ -149,8 +149,9 @@ SER_CLOSE: ; Done, return an error code - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ;---------------------------------------------------------------------------- @@ -218,22 +219,23 @@ SER_OPEN: ; Done - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ; Invalid parameter InvParam: - lda #<SER_ERR_INIT_FAILED - ldx #>SER_ERR_INIT_FAILED + lda #SER_ERR_INIT_FAILED + ldx #0 ; return value is char rts ; Baud rate not available InvBaud: - lda #<SER_ERR_BAUD_UNAVAIL - ldx #>SER_ERR_BAUD_UNAVAIL + lda #SER_ERR_BAUD_UNAVAIL + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- @@ -254,8 +256,8 @@ SER_GET: @L1: lda RecvFreeCnt cmp #$ff bne @L2 - lda #<SER_ERR_NO_DATA - ldx #>SER_ERR_NO_DATA + lda #SER_ERR_NO_DATA + ldx #0 ; return value is char rts ; Check for flow stopped & enough free: release flow control @@ -302,7 +304,7 @@ SER_PUT: @L2: ldx SendFreeCnt bne @L3 - lda #<SER_ERR_OVERFLOW ; X is already zero + lda #SER_ERR_OVERFLOW ; X is already zero rts @L3: ldx SendTail @@ -311,7 +313,8 @@ SER_PUT: dec SendFreeCnt lda #$ff jsr TryToSend - lda #<SER_ERR_OK + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error tax rts @@ -339,8 +342,8 @@ SER_STATUS: ; SER_IOCTL: - lda #<SER_ERR_INV_IOCTL ; We don't support ioclts for now - ldx #>SER_ERR_INV_IOCTL + lda #SER_ERR_INV_IOCTL ; We don't support ioclts for now + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- diff --git a/libsrc/creativision/joy/creativision-stdjoy.s b/libsrc/creativision/joy/creativision-stdjoy.s index 73b0c249f..43f9a2b40 100644 --- a/libsrc/creativision/joy/creativision-stdjoy.s +++ b/libsrc/creativision/joy/creativision-stdjoy.s @@ -59,7 +59,8 @@ JOY_RIGHT = $08 ; INSTALL: lda #JOY_ERR_OK - ldx #>$0000 + .assert JOY_ERR_OK = 0, error + tax ; rts ; Fall through ; ------------------------------------------------------------------------ diff --git a/libsrc/cx16/joy/cx16-std.s b/libsrc/cx16/joy/cx16-std.s index a40fcb061..5def55511 100644 --- a/libsrc/cx16/joy/cx16-std.s +++ b/libsrc/cx16/joy/cx16-std.s @@ -55,8 +55,9 @@ JOY_COUNT = $05 ; Number of joysticks we support ; Must return a JOY_ERR_xx code in .XA . INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/cx16/mou/cx16-std.s b/libsrc/cx16/mou/cx16-std.s index 3af7d2eb3..f211815de 100644 --- a/libsrc/cx16/mou/cx16-std.s +++ b/libsrc/cx16/mou/cx16-std.s @@ -139,7 +139,8 @@ INSTALL: ; Done, return zero - ldx #>MOUSE_ERR_OK + ldx #MOUSE_ERR_OK + .assert MOUSE_ERR_OK = 0, error txa rts @@ -300,8 +301,8 @@ INFO: jsr BUTTONS ; Will not touch ptr1 ; specific data in ptr1, and the ioctl code in A. ; Must return an error code in .XA . -IOCTL: lda #<MOUSE_ERR_INV_IOCTL ; We don't support ioctls, for now - ldx #>MOUSE_ERR_INV_IOCTL +IOCTL: lda #MOUSE_ERR_INV_IOCTL ; We don't support ioctls, for now + ldx #0 ; return value is char ; rts ; Fall through ;---------------------------------------------------------------------------- diff --git a/libsrc/gamate/joy/gamate-stdjoy.s b/libsrc/gamate/joy/gamate-stdjoy.s index 8f927cdf5..514f92db4 100644 --- a/libsrc/gamate/joy/gamate-stdjoy.s +++ b/libsrc/gamate/joy/gamate-stdjoy.s @@ -47,8 +47,9 @@ JOY_COUNT = 1 ; Number of joysticks we support ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead diff --git a/libsrc/geos-cbm/emd/geos-vdc.s b/libsrc/geos-cbm/emd/geos-vdc.s index 27316e1a0..2e7d19c03 100644 --- a/libsrc/geos-cbm/emd/geos-vdc.s +++ b/libsrc/geos-cbm/emd/geos-vdc.s @@ -125,8 +125,9 @@ INSTALL: pla sta $01 plp - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + lda #EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax rts test64k: diff --git a/libsrc/geos-cbm/joy/geos-stdjoy.s b/libsrc/geos-cbm/joy/geos-stdjoy.s index 2787cb594..a3fd4ffc8 100644 --- a/libsrc/geos-cbm/joy/geos-stdjoy.s +++ b/libsrc/geos-cbm/joy/geos-stdjoy.s @@ -53,8 +53,9 @@ JOY_COUNT = 2 ; Number of joysticks we support ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/joystick/joy_unload.s b/libsrc/joystick/joy_unload.s index 25d54ff02..f52b7a2c1 100644 --- a/libsrc/joystick/joy_unload.s +++ b/libsrc/joystick/joy_unload.s @@ -10,7 +10,7 @@ .include "modload.inc" .import joy_clear_ptr - .import return0 + .import return0, return1 @@ -31,7 +31,6 @@ _joy_unload: jmp return0 ; Return JOY_ERR_OK no_driver: - tax ; X = 0 pla ; Remove pushed junk - lda #JOY_ERR_NO_DRIVER - rts + .assert JOY_ERR_NO_DRIVER = 1, error + jmp return1 ; Return JOY_ERR_NO_DRIVER diff --git a/libsrc/lynx/joy/lynx-stdjoy.s b/libsrc/lynx/joy/lynx-stdjoy.s index c81a97dbf..45eb8ab4e 100644 --- a/libsrc/lynx/joy/lynx-stdjoy.s +++ b/libsrc/lynx/joy/lynx-stdjoy.s @@ -58,8 +58,9 @@ JOY_COUNT = 1 ; Number of joysticks we support ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/lynx/ser/lynx-comlynx.s b/libsrc/lynx/ser/lynx-comlynx.s index ded862eaa..8aa3c838e 100644 --- a/libsrc/lynx/ser/lynx-comlynx.s +++ b/libsrc/lynx/ser/lynx-comlynx.s @@ -75,8 +75,9 @@ SER_UNINSTALL: SER_CLOSE: ; Disable interrupts ; Done, return an error code - lda #<SER_ERR_OK - ldx #>SER_ERR_OK + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ;---------------------------------------------------------------------------- @@ -190,8 +191,8 @@ SER_OPEN: cmp #SER_BAUD_134_5 beq setbaudrate - lda #<SER_ERR_BAUD_UNAVAIL - ldx #>SER_ERR_BAUD_UNAVAIL + lda #SER_ERR_BAUD_UNAVAIL + ldx #0 ; return value is char rts setprescaler: stx TIM4CTLA @@ -238,12 +239,13 @@ checkhs: lda contrl ora #RxIntEnable|ResetErr sta SERCTL - lda #<SER_ERR_OK - ldx #>SER_ERR_OK + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts invparameter: - lda #<SER_ERR_INIT_FAILED - ldx #>SER_ERR_INIT_FAILED + lda #SER_ERR_INIT_FAILED + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- @@ -255,8 +257,8 @@ SER_GET: lda RxPtrIn cmp RxPtrOut bne GetByte - lda #<SER_ERR_NO_DATA - ldx #>SER_ERR_NO_DATA + lda #SER_ERR_NO_DATA + ldx #0 ; return value is char rts GetByte: ldy RxPtrOut @@ -277,8 +279,8 @@ SER_PUT: ina cmp TxPtrOut bne PutByte - lda #<SER_ERR_OVERFLOW - ldx #>SER_ERR_OVERFLOW + lda #SER_ERR_OVERFLOW + ldx #0 ; return value is char rts PutByte: ldy TxPtrIn @@ -296,7 +298,8 @@ PutByte: sta TxDone plp @L1: - lda #<SER_ERR_OK + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error tax rts @@ -317,8 +320,8 @@ SER_STATUS: ; Must return an SER_ERR_xx code in a/x. SER_IOCTL: - lda #<SER_ERR_INV_IOCTL - ldx #>SER_ERR_INV_IOCTL + lda #SER_ERR_INV_IOCTL + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- diff --git a/libsrc/mouse/mouse_unload.s b/libsrc/mouse/mouse_unload.s index 8c9018484..ecd7846ab 100644 --- a/libsrc/mouse/mouse_unload.s +++ b/libsrc/mouse/mouse_unload.s @@ -8,7 +8,7 @@ .include "mouse-kernel.inc" .include "modload.inc" - .import return0 + .import return0, return1 @@ -29,7 +29,6 @@ _mouse_unload: jmp return0 ; Return MOUSE_ERR_OK no_driver: - tax ; X = 0 pla ; Remove pushed junk - lda #<MOUSE_ERR_NO_DRIVER - rts + .assert MOUSE_ERR_NO_DRIVER = 1, error + jmp return1 ; Return MOUSE_ERR_NO_DRIVER diff --git a/libsrc/nes/joy/nes-stdjoy.s b/libsrc/nes/joy/nes-stdjoy.s index 63caf364b..0d0e7d9ac 100644 --- a/libsrc/nes/joy/nes-stdjoy.s +++ b/libsrc/nes/joy/nes-stdjoy.s @@ -53,7 +53,8 @@ JOY_COUNT = 2 ; Number of joysticks we support INSTALL: lda #JOY_ERR_OK - ldx #0 + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/pce/joy/pce-stdjoy.s b/libsrc/pce/joy/pce-stdjoy.s index 2de3d0c4c..dc8576c87 100644 --- a/libsrc/pce/joy/pce-stdjoy.s +++ b/libsrc/pce/joy/pce-stdjoy.s @@ -50,8 +50,9 @@ padbuffer: .res JOY_COUNT ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead diff --git a/libsrc/pet/joy/pet-ptvjoy.s b/libsrc/pet/joy/pet-ptvjoy.s index c098072fb..ee14c95c8 100644 --- a/libsrc/pet/joy/pet-ptvjoy.s +++ b/libsrc/pet/joy/pet-ptvjoy.s @@ -51,8 +51,9 @@ JOY_COUNT = 2 ; Number of joysticks we support ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/plus4/joy/plus4-stdjoy.s b/libsrc/plus4/joy/plus4-stdjoy.s index e8e85fedc..86f080dae 100644 --- a/libsrc/plus4/joy/plus4-stdjoy.s +++ b/libsrc/plus4/joy/plus4-stdjoy.s @@ -58,8 +58,9 @@ JOY_COUNT = 2 ; Number of joysticks we support ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/plus4/ser/plus4-stdser.s b/libsrc/plus4/ser/plus4-stdser.s index bb44a4cf9..fbdc61b2e 100644 --- a/libsrc/plus4/ser/plus4-stdser.s +++ b/libsrc/plus4/ser/plus4-stdser.s @@ -157,8 +157,9 @@ SER_CLOSE: ; Done, return an error code - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ;---------------------------------------------------------------------------- @@ -225,22 +226,23 @@ SER_OPEN: ; Done - lda #<SER_ERR_OK - tax ; A is zero + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts ; Invalid parameter InvParam: - lda #<SER_ERR_INIT_FAILED - ldx #>SER_ERR_INIT_FAILED + lda #SER_ERR_INIT_FAILED + ldx #0 ; return value is char rts ; Baud rate not available InvBaud: - lda #<SER_ERR_BAUD_UNAVAIL - ldx #>SER_ERR_BAUD_UNAVAIL + lda #SER_ERR_BAUD_UNAVAIL + ldx #0 ; return value is char rts ;---------------------------------------------------------------------------- @@ -261,8 +263,8 @@ SER_GET: @L1: lda RecvFreeCnt ; (25) cmp #$ff bne @L2 - lda #<SER_ERR_NO_DATA - ldx #>SER_ERR_NO_DATA + lda #SER_ERR_NO_DATA + ldx #0 ; return value is char rts ; Check for flow stopped & enough free: release flow control @@ -309,7 +311,7 @@ SER_PUT: @L2: ldx SendFreeCnt bne @L3 - lda #<SER_ERR_OVERFLOW ; X is already zero + lda #SER_ERR_OVERFLOW ; X is already zero rts @L3: ldx SendTail @@ -318,7 +320,8 @@ SER_PUT: dec SendFreeCnt lda #$ff jsr TryToSend - lda #<SER_ERR_OK + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error tax rts @@ -331,7 +334,8 @@ SER_STATUS: lda ACIA_STATUS ldx #0 sta (ptr1,x) - txa ; SER_ERR_OK + .assert SER_ERR_OK = 0, error + txa rts ;---------------------------------------------------------------------------- @@ -341,8 +345,8 @@ SER_STATUS: ; SER_IOCTL: - lda #<SER_ERR_INV_IOCTL ; We don't support ioclts for now - ldx #>SER_ERR_INV_IOCTL + lda #SER_ERR_INV_IOCTL ; We don't support ioclts for now + ldx #0 ; return value is char rts ; Run into IRQ instead ;---------------------------------------------------------------------------- diff --git a/libsrc/serial/ser_unload.s b/libsrc/serial/ser_unload.s index bf7201255..7cd0f7125 100644 --- a/libsrc/serial/ser_unload.s +++ b/libsrc/serial/ser_unload.s @@ -10,7 +10,7 @@ .include "modload.inc" .import ser_clear_ptr - .import return0 + .import return0, return1 @@ -28,10 +28,10 @@ _ser_unload: tax pla ; Get pointer to driver jsr _mod_free ; Free the driver - jmp return0 ; Return SER_ERR_OK + .assert SER_ERR_OK = 0, error + jmp return0 no_driver: - tax ; X = 0 pla ; Remove pushed junk - lda #<SER_ERR_NO_DRIVER - rts + .assert SER_ERR_NO_DRIVER = 1, error + jmp return1 diff --git a/libsrc/supervision/joy/supervision-stdjoy.s b/libsrc/supervision/joy/supervision-stdjoy.s index ef790ec0b..2469abf31 100644 --- a/libsrc/supervision/joy/supervision-stdjoy.s +++ b/libsrc/supervision/joy/supervision-stdjoy.s @@ -46,8 +46,9 @@ JOY_COUNT = 1 ; Number of joysticks we support ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead diff --git a/libsrc/telestrat/joy/telestrat.s b/libsrc/telestrat/joy/telestrat.s index 0f5d28651..7472ab187 100644 --- a/libsrc/telestrat/joy/telestrat.s +++ b/libsrc/telestrat/joy/telestrat.s @@ -54,8 +54,9 @@ INSTALL: sta VIA2::PRB ; We could detect joysticks because with previous command bit0,1,2,3,4 should be set to 1 after ; But if some one press fire or press direction, we could reach others values which could break joystick detection. - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/vic20/emd/vic20-georam.s b/libsrc/vic20/emd/vic20-georam.s index a960e9a1a..4e3121c05 100644 --- a/libsrc/vic20/emd/vic20-georam.s +++ b/libsrc/vic20/emd/vic20-georam.s @@ -119,16 +119,16 @@ INSTALL: bne @setok @notpresent: - lda #<EM_ERR_NO_DEVICE - ldx #>EM_ERR_NO_DEVICE + lda #EM_ERR_NO_DEVICE + ldx #0 ; return value is char rts @setok: lda #0 sta pagecount stx pagecount+1 - lda #<EM_ERR_OK - ldx #>EM_ERR_OK + .assert EM_ERR_OK = 0, error + tax rts check: diff --git a/libsrc/vic20/emd/vic20-rama.s b/libsrc/vic20/emd/vic20-rama.s index 133c3974b..4264e2caf 100644 --- a/libsrc/vic20/emd/vic20-rama.s +++ b/libsrc/vic20/emd/vic20-rama.s @@ -71,12 +71,13 @@ INSTALL: ldx #$FF stx curpage ; Invalidate the current page - inx ; X = 0 - txa ; A = X = EM_ERR_OK + .assert EM_ERR_OK = 0, error + inx + txa rts -nomem: ldx #>EM_ERR_NO_DEVICE - lda #<EM_ERR_NO_DEVICE +nomem: ldx #0 ; return value is char + lda #EM_ERR_NO_DEVICE ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/vic20/joy/vic20-ptvjoy.s b/libsrc/vic20/joy/vic20-ptvjoy.s index 496653e9d..c29d1d5ed 100644 --- a/libsrc/vic20/joy/vic20-ptvjoy.s +++ b/libsrc/vic20/joy/vic20-ptvjoy.s @@ -53,8 +53,9 @@ JOY_COUNT = 3 ; Number of joysticks we support ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ diff --git a/libsrc/vic20/joy/vic20-stdjoy.s b/libsrc/vic20/joy/vic20-stdjoy.s index ee8dc93d7..b3de8766c 100644 --- a/libsrc/vic20/joy/vic20-stdjoy.s +++ b/libsrc/vic20/joy/vic20-stdjoy.s @@ -57,8 +57,9 @@ JOY_COUNT = 1 ; Number of joysticks we support ; INSTALL: - lda #<JOY_ERR_OK - ldx #>JOY_ERR_OK + lda #JOY_ERR_OK + .assert JOY_ERR_OK = 0, error + tax ; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ From 993054c9d300a222e3a7abbf9d7217fa4e47e4b3 Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Wed, 1 Mar 2023 11:58:42 -0500 Subject: [PATCH 2019/2710] Fix .endmacro not at the start of the line. .ENDMACRO error with line number of macro definition start --- src/ca65/macro.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/ca65/macro.c b/src/ca65/macro.c index 92a0f6e9a..84f0e8bcd 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -364,7 +364,7 @@ static void FreeMacExp (MacExp* E) -static void MacSkipDef (unsigned Style) +static void MacSkipDef (unsigned Style, FilePos Pos) /* Skip a macro definition */ { if (Style == MAC_STYLE_CLASSIC) { @@ -375,7 +375,7 @@ static void MacSkipDef (unsigned Style) if (CurTok.Tok != TOK_EOF) { SkipUntilSep (); } else { - Error ("'.ENDMACRO' expected"); + PError (&Pos, "'.ENDMACRO' expected"); } } else { /* Skip until end of line */ @@ -391,19 +391,26 @@ void MacDef (unsigned Style) Macro* M; TokNode* N; int HaveParams; - int LastTokWasSep = 0; + + /* Remember if we are at the beginning of the line. If the macro name + ** and parameters pass then this will be set, so set it now */ + int LastTokWasSep = 1; + + /* Save the position of the start of the macro definition to allow + ** using Perror to display the error if .ENDMACRO isn't found */ + FilePos Pos = CurTok.Pos; /* We expect a macro name here */ if (CurTok.Tok != TOK_IDENT) { Error ("Identifier expected"); - MacSkipDef (Style); + MacSkipDef (Style, Pos); return; } else if (!UbiquitousIdents && FindInstruction (&CurTok.SVal) >= 0) { /* The identifier is a name of a 6502 instruction, which is not ** allowed if not explicitly enabled. */ Error ("Cannot use an instruction as macro name"); - MacSkipDef (Style); + MacSkipDef (Style, Pos); return; } @@ -412,7 +419,7 @@ void MacDef (unsigned Style) /* Macro is already defined */ Error ("A macro named '%m%p' is already defined", &CurTok.SVal); /* Skip tokens until we reach the final .endmacro */ - MacSkipDef (Style); + MacSkipDef (Style, Pos); return; } @@ -480,7 +487,6 @@ void MacDef (unsigned Style) */ if (Style == MAC_STYLE_CLASSIC) { ConsumeSep (); - LastTokWasSep = 1; } else if (HaveParams) { ConsumeRParen (); } @@ -493,14 +499,14 @@ void MacDef (unsigned Style) while (1) { /* Check for end of macro */ if (Style == MAC_STYLE_CLASSIC) { - /* In classic macros, only .endmacro is allowed, but ignore it if it is not at the start of the line */ + /* In classic macros, only .endmacro is allowed, but do no exit the macro definition if not at the start of a line */ if (CurTok.Tok == TOK_ENDMACRO && LastTokWasSep) { /* Done */ break; } /* May not have end of file in a macro definition */ if (CurTok.Tok == TOK_EOF) { - Error ("'.ENDMACRO' expected"); + PError (&Pos, "'.ENDMACRO' expected"); goto Done; } } else { From 1c60bc50098ac981f05131eb4e85556f0cd0a5be Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Wed, 1 Mar 2023 21:47:50 -0500 Subject: [PATCH 2020/2710] Fix .endmacro not at the start of the line. Fix style, add doc., add tests --- doc/ca65.sgml | 14 +++++++++++++- src/ca65/macro.c | 35 ++++++++++++++++++++++------------- 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index b65d337bb..b19a66a2d 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -2522,7 +2522,19 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.ENDMAC, .ENDMACRO</tt><label id=".ENDMACRO"><p> - Marks the end of a macro definition. + Marks the end of a macro definition. Note, <tt>.ENDMACRO</tt> should be on + its own line to successfully end the macro definition. It is possible to use + <tt><ref id=".DEFINE" name=".DEFINE"></tt> to create a symbol that references + <tt>.ENDMACRO</tt> without ending the macro definition. + + Example: + + <tscreen><verb> + .macro new_mac + .define startmac .macro + .define endmac .endmacro + .endmacro + </verb></tscreen> See: <tt><ref id=".DELMACRO" name=".DELMACRO"></tt>, <tt><ref id=".EXITMACRO" name=".EXITMACRO"></tt>, diff --git a/src/ca65/macro.c b/src/ca65/macro.c index 84f0e8bcd..72436fdec 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -364,7 +364,7 @@ static void FreeMacExp (MacExp* E) -static void MacSkipDef (unsigned Style, FilePos Pos) +static void MacSkipDef (unsigned Style) /* Skip a macro definition */ { if (Style == MAC_STYLE_CLASSIC) { @@ -375,7 +375,7 @@ static void MacSkipDef (unsigned Style, FilePos Pos) if (CurTok.Tok != TOK_EOF) { SkipUntilSep (); } else { - PError (&Pos, "'.ENDMACRO' expected"); + Error ("'.ENDMACRO' expected"); } } else { /* Skip until end of line */ @@ -390,27 +390,32 @@ void MacDef (unsigned Style) { Macro* M; TokNode* N; + FilePos Pos; int HaveParams; + int LastTokWasSep; - /* Remember if we are at the beginning of the line. If the macro name - ** and parameters pass then this will be set, so set it now */ - int LastTokWasSep = 1; + /* For classic macros, remember if we are at the beginning of the line. + ** If the macro name and parameters pass our checks then we will be on a + ** new line, so set it now + */ + LastTokWasSep = 1; /* Save the position of the start of the macro definition to allow - ** using Perror to display the error if .ENDMACRO isn't found */ - FilePos Pos = CurTok.Pos; + ** using Perror to display the error if .ENDMACRO isn't found + */ + Pos = CurTok.Pos; /* We expect a macro name here */ if (CurTok.Tok != TOK_IDENT) { Error ("Identifier expected"); - MacSkipDef (Style, Pos); + MacSkipDef (Style); return; } else if (!UbiquitousIdents && FindInstruction (&CurTok.SVal) >= 0) { /* The identifier is a name of a 6502 instruction, which is not ** allowed if not explicitly enabled. */ Error ("Cannot use an instruction as macro name"); - MacSkipDef (Style, Pos); + MacSkipDef (Style); return; } @@ -419,7 +424,7 @@ void MacDef (unsigned Style) /* Macro is already defined */ Error ("A macro named '%m%p' is already defined", &CurTok.SVal); /* Skip tokens until we reach the final .endmacro */ - MacSkipDef (Style, Pos); + MacSkipDef (Style); return; } @@ -499,14 +504,16 @@ void MacDef (unsigned Style) while (1) { /* Check for end of macro */ if (Style == MAC_STYLE_CLASSIC) { - /* In classic macros, only .endmacro is allowed, but do no exit the macro definition if not at the start of a line */ + /* In classic macros, if .endmacro is not at the start of the line + ** it will be added to the macro definition instead of closing it. + */ if (CurTok.Tok == TOK_ENDMACRO && LastTokWasSep) { /* Done */ break; } /* May not have end of file in a macro definition */ if (CurTok.Tok == TOK_EOF) { - PError (&Pos, "'.ENDMACRO' expected"); + PError (&Pos, "'.ENDMACRO' expected for macro '%m%p'", &M->Name); goto Done; } } else { @@ -581,7 +588,9 @@ void MacDef (unsigned Style) } ++M->TokCount; - /* Save if last token was a separator to know if .endmacro is valid */ + /* Save if last token was a separator to know if .endmacro is at + ** the start of a line + */ LastTokWasSep = TokIsSep(CurTok.Tok); /* Read the next token */ From 0b71d1cfff0bf3fd7d329701e231fb9b0bbb818a Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Wed, 1 Mar 2023 21:55:14 -0500 Subject: [PATCH 2021/2710] Fix .endmacro not at the start of the line. Fix last commit --- doc/ca65.sgml | 2 +- src/ca65/macro.c | 18 +++++++++--------- test/asm/err/bug2013.s | 6 ++++++ test/asm/val/bug2013.s | 30 ++++++++++++++++++++++++++++++ 4 files changed, 46 insertions(+), 10 deletions(-) create mode 100644 test/asm/err/bug2013.s create mode 100644 test/asm/val/bug2013.s diff --git a/doc/ca65.sgml b/doc/ca65.sgml index b19a66a2d..b68acb639 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -2522,7 +2522,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.ENDMAC, .ENDMACRO</tt><label id=".ENDMACRO"><p> - Marks the end of a macro definition. Note, <tt>.ENDMACRO</tt> should be on + Marks the end of a macro definition. Note, <tt>.ENDMACRO</tt> should be on its own line to successfully end the macro definition. It is possible to use <tt><ref id=".DEFINE" name=".DEFINE"></tt> to create a symbol that references <tt>.ENDMACRO</tt> without ending the macro definition. diff --git a/src/ca65/macro.c b/src/ca65/macro.c index 72436fdec..6e059f421 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -394,14 +394,14 @@ void MacDef (unsigned Style) int HaveParams; int LastTokWasSep; - /* For classic macros, remember if we are at the beginning of the line. - ** If the macro name and parameters pass our checks then we will be on a - ** new line, so set it now + /* For classic macros, remember if we are at the beginning of the line. + ** If the macro name and parameters pass our checks then we will be on a + ** new line, so set it now */ LastTokWasSep = 1; - /* Save the position of the start of the macro definition to allow - ** using Perror to display the error if .ENDMACRO isn't found + /* Save the position of the start of the macro definition to allow + ** using Perror to display the error if .ENDMACRO isn't found */ Pos = CurTok.Pos; @@ -504,8 +504,8 @@ void MacDef (unsigned Style) while (1) { /* Check for end of macro */ if (Style == MAC_STYLE_CLASSIC) { - /* In classic macros, if .endmacro is not at the start of the line - ** it will be added to the macro definition instead of closing it. + /* In classic macros, if .endmacro is not at the start of the line + ** it will be added to the macro definition instead of closing it. */ if (CurTok.Tok == TOK_ENDMACRO && LastTokWasSep) { /* Done */ @@ -588,8 +588,8 @@ void MacDef (unsigned Style) } ++M->TokCount; - /* Save if last token was a separator to know if .endmacro is at - ** the start of a line + /* Save if last token was a separator to know if .endmacro is at + ** the start of a line */ LastTokWasSep = TokIsSep(CurTok.Tok); diff --git a/test/asm/err/bug2013.s b/test/asm/err/bug2013.s new file mode 100644 index 000000000..8907675fb --- /dev/null +++ b/test/asm/err/bug2013.s @@ -0,0 +1,6 @@ +; for PR #2013 +; should produce error output: +; ... Error: '.ENDMACRO' expected for macro 'test' + +.macro test + nop .endmacro diff --git a/test/asm/val/bug2013.s b/test/asm/val/bug2013.s new file mode 100644 index 000000000..b6e9e37e6 --- /dev/null +++ b/test/asm/val/bug2013.s @@ -0,0 +1,30 @@ +; for PR #2013 + .import _exit + .export _main + + ; this macro is invalid, but should not cause an error (if it is never expanded) + .macro invalid + nop .endmacro + .endmacro + + .define temp_endmac .endmacro + .macro new_mac + .define startmac .macro + .define endmac .endmacro + temp_endmac + + .undefine temp_endmac + + new_mac + + startmac dex2 + dex + dex + endmac + +_main: + ldx #$02 + dex2 + ; x should be zero + txa + jmp _exit \ No newline at end of file From 98d2d9ee4e3d86c1d44d9a1d696d631031cdeffe Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Wed, 1 Mar 2023 21:59:00 -0500 Subject: [PATCH 2022/2710] Fix .endmacro not at the start of the line. Fix style --- test/asm/val/bug2013.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/asm/val/bug2013.s b/test/asm/val/bug2013.s index b6e9e37e6..cfb8efefb 100644 --- a/test/asm/val/bug2013.s +++ b/test/asm/val/bug2013.s @@ -27,4 +27,4 @@ _main: dex2 ; x should be zero txa - jmp _exit \ No newline at end of file + jmp _exit From 3f2129894be43d2840c28c5a33cd39c306984c1e Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Thu, 2 Mar 2023 15:12:30 -0500 Subject: [PATCH 2023/2710] Fix .endmacro not at the start of the line. Rename test files. --- test/asm/err/{bug2013.s => endmacro.s} | 0 test/asm/val/{bug2013.s => endmacro.s} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename test/asm/err/{bug2013.s => endmacro.s} (100%) rename test/asm/val/{bug2013.s => endmacro.s} (100%) diff --git a/test/asm/err/bug2013.s b/test/asm/err/endmacro.s similarity index 100% rename from test/asm/err/bug2013.s rename to test/asm/err/endmacro.s diff --git a/test/asm/val/bug2013.s b/test/asm/val/endmacro.s similarity index 100% rename from test/asm/val/bug2013.s rename to test/asm/val/endmacro.s From 90d5f41b377dfe810758c3cfdd0dd42d735a3bc7 Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Thu, 2 Mar 2023 17:26:05 -0500 Subject: [PATCH 2024/2710] Consistent case for .endmacro in comments --- src/ca65/macro.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/ca65/macro.c b/src/ca65/macro.c index 6e059f421..d776411be 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -394,14 +394,14 @@ void MacDef (unsigned Style) int HaveParams; int LastTokWasSep; - /* For classic macros, remember if we are at the beginning of the line. - ** If the macro name and parameters pass our checks then we will be on a - ** new line, so set it now + /* For classic macros, remember if we are at the beginning of the line. + ** If the macro name and parameters pass our checks then we will be on a + ** new line, so set it now */ LastTokWasSep = 1; - /* Save the position of the start of the macro definition to allow - ** using Perror to display the error if .ENDMACRO isn't found + /* Save the position of the start of the macro definition to allow + ** using Perror to display the error if .endmacro isn't found */ Pos = CurTok.Pos; @@ -504,8 +504,8 @@ void MacDef (unsigned Style) while (1) { /* Check for end of macro */ if (Style == MAC_STYLE_CLASSIC) { - /* In classic macros, if .endmacro is not at the start of the line - ** it will be added to the macro definition instead of closing it. + /* In classic macros, if .endmacro is not at the start of the line + ** it will be added to the macro definition instead of closing it. */ if (CurTok.Tok == TOK_ENDMACRO && LastTokWasSep) { /* Done */ @@ -588,8 +588,8 @@ void MacDef (unsigned Style) } ++M->TokCount; - /* Save if last token was a separator to know if .endmacro is at - ** the start of a line + /* Save if last token was a separator to know if .endmacro is at + ** the start of a line */ LastTokWasSep = TokIsSep(CurTok.Tok); From c092f57b73a92b6db55d43a4b4f649059d77bf2e Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Thu, 2 Mar 2023 17:31:55 -0500 Subject: [PATCH 2025/2710] Consistent case for .endmacro in comments, remove trailing spaces --- src/ca65/macro.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/ca65/macro.c b/src/ca65/macro.c index d776411be..904c80756 100644 --- a/src/ca65/macro.c +++ b/src/ca65/macro.c @@ -394,13 +394,13 @@ void MacDef (unsigned Style) int HaveParams; int LastTokWasSep; - /* For classic macros, remember if we are at the beginning of the line. - ** If the macro name and parameters pass our checks then we will be on a - ** new line, so set it now + /* For classic macros, remember if we are at the beginning of the line. + ** If the macro name and parameters pass our checks then we will be on a + ** new line, so set it now */ LastTokWasSep = 1; - /* Save the position of the start of the macro definition to allow + /* Save the position of the start of the macro definition to allow ** using Perror to display the error if .endmacro isn't found */ Pos = CurTok.Pos; @@ -504,8 +504,8 @@ void MacDef (unsigned Style) while (1) { /* Check for end of macro */ if (Style == MAC_STYLE_CLASSIC) { - /* In classic macros, if .endmacro is not at the start of the line - ** it will be added to the macro definition instead of closing it. + /* In classic macros, if .endmacro is not at the start of the line + ** it will be added to the macro definition instead of closing it. */ if (CurTok.Tok == TOK_ENDMACRO && LastTokWasSep) { /* Done */ @@ -588,8 +588,8 @@ void MacDef (unsigned Style) } ++M->TokCount; - /* Save if last token was a separator to know if .endmacro is at - ** the start of a line + /* Save if last token was a separator to know if .endmacro is at + ** the start of a line */ LastTokWasSep = TokIsSep(CurTok.Tok); From 016b03e3562666db24e5364b8034ad07314a96fc Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 7 Mar 2023 17:00:38 -0500 Subject: [PATCH 2026/2710] ca65 jmp (abs) wrap warning only applies to 6502, later CPUs do not have this bug --- src/ca65/instr.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ca65/instr.c b/src/ca65/instr.c index b72be6711..7cbefaecf 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -1617,11 +1617,12 @@ static void PutJMP (const InsDesc* Ins) if (EvalEA (Ins, &A)) { /* Check for indirect addressing */ - if (A.AddrModeBit & AM65_ABS_IND) { + if (A.AddrModeBit & AM65_ABS_IND && CPU < CPU_65SC02) { /* Compare the low byte of the expression to 0xFF to check for ** a page cross. Be sure to use a copy of the expression otherwise - ** things will go weird later. + ** things will go weird later. This only affects the 6502 CPU, + ** and was corrected in 65C02 and later CPUs in this family. */ ExprNode* E = GenNE (GenByteExpr (CloneExpr (A.Expr)), 0xFF); From 8b818aac673b186a9a1558f1f6dfd7559f056f1f Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 7 Mar 2023 18:42:20 -0500 Subject: [PATCH 2027/2710] remove trailing space on segment "bytes" warning plural --- src/ld65/config.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ld65/config.c b/src/ld65/config.c index 38b4f96d0..6c1f6ad4c 100644 --- a/src/ld65/config.c +++ b/src/ld65/config.c @@ -2043,14 +2043,14 @@ unsigned CfgProcess (void) ++Overflows; if (S->Flags & SF_OFFSET) { CfgWarning (GetSourcePos (S->LI), - "Segment '%s' offset is too small in '%s' by %lu byte%c", + "Segment '%s' offset is too small in '%s' by %lu byte%s", GetString (S->Name), GetString (M->Name), - Addr - NewAddr, (Addr - NewAddr == 1) ? ' ' : 's'); + Addr - NewAddr, (Addr - NewAddr == 1) ? "" : "s"); } else { CfgWarning (GetSourcePos (S->LI), - "Segment '%s' start address is too low in '%s' by %lu byte%c", + "Segment '%s' start address is too low in '%s' by %lu byte%s", GetString (S->Name), GetString (M->Name), - Addr - NewAddr, (Addr - NewAddr == 1) ? ' ' : 's'); + Addr - NewAddr, (Addr - NewAddr == 1) ? "" : "s"); } } else { Addr = NewAddr; @@ -2095,9 +2095,9 @@ unsigned CfgProcess (void) ++Overflows; M->Flags |= MF_OVERFLOW; CfgWarning (GetSourcePos (M->LI), - "Segment '%s' overflows memory area '%s' by %lu byte%c", + "Segment '%s' overflows memory area '%s' by %lu byte%s", GetString (S->Name), GetString (M->Name), - FillLevel - M->Size, (FillLevel - M->Size == 1) ? ' ' : 's'); + FillLevel - M->Size, (FillLevel - M->Size == 1) ? "" : "s"); } if (FillLevel > M->FillLevel) { /* Regular segments increase FillLevel. Overwrite segments may increase but not decrease FillLevel. */ From 4732e937ad0aee2bdc2f693861e67eab263e6880 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 7 Mar 2023 18:44:56 -0500 Subject: [PATCH 2028/2710] overwrite segment tests asm/listing linker CFG support asm and asm/listing test documentation --- test/asm/listing/200-overwrite.cfg | 20 ++++++++ test/asm/listing/200-overwrite.s | 29 +++++++++++ test/asm/listing/201-overwrite-overflow.cfg | 12 +++++ test/asm/listing/201-overwrite-overflow.s | 13 +++++ test/asm/listing/Makefile | 16 ++++++ .../control/201-overwrite-overflow.err | 0 test/asm/listing/readme.txt | 2 + test/asm/listing/ref/200-overwrite.bin-ref | Bin 0 -> 30 bytes .../ref/201-overwrite-overflow.ld65err2-ref | 3 ++ test/asm/readme.txt | 46 ++++++++++-------- 10 files changed, 121 insertions(+), 20 deletions(-) create mode 100644 test/asm/listing/200-overwrite.cfg create mode 100644 test/asm/listing/200-overwrite.s create mode 100644 test/asm/listing/201-overwrite-overflow.cfg create mode 100644 test/asm/listing/201-overwrite-overflow.s create mode 100644 test/asm/listing/control/201-overwrite-overflow.err create mode 100644 test/asm/listing/ref/200-overwrite.bin-ref create mode 100644 test/asm/listing/ref/201-overwrite-overflow.ld65err2-ref diff --git a/test/asm/listing/200-overwrite.cfg b/test/asm/listing/200-overwrite.cfg new file mode 100644 index 000000000..b7b2fee49 --- /dev/null +++ b/test/asm/listing/200-overwrite.cfg @@ -0,0 +1,20 @@ +MEMORY +{ + A: start = 0, size = 8, file = %O, fill = yes, fillval = $33; + B: start = 8, size = 8, file = %O, fill = yes, fillval = $44; + C: start = 0, size = 8, file = %O, fill = yes, fillval = $55; + D: start = 8, size = 8, file = %O, fill = no, fillval = $66; +} +SEGMENTS +{ + A: load = A, type = ro; + B: load = B, type = ro; + C0: load = C, type = ro; + C1: load = C, type = ro, start = 5; + D: load = D, type = ro; + + AO: load = A, type = overwrite, start = 4; + BO: load = B, type = overwrite, start = 8+5; + CO: load = C, type = overwrite, start = 2; + DO: load = D, type = overwrite, start = 8+4; +} diff --git a/test/asm/listing/200-overwrite.s b/test/asm/listing/200-overwrite.s new file mode 100644 index 000000000..cd2349c6a --- /dev/null +++ b/test/asm/listing/200-overwrite.s @@ -0,0 +1,29 @@ +; verification of overwrite segment feature +; See: https://github.com/cc65/cc65/issues/1366 + +; A: full memory area which is overwritten to the end +.segment "A" +.byte 0,1,2,3,4,5,6,7 +.segment "AO" +.byte $24,$25,$26,$27 + +; B: incomplete memory area overwritten in the fill area +.segment "B" +.byte 0,1,2 +.segment "BO" +.byte $25,$26 + +; C: memory area with gap overwritten across the gap +.segment "C0" +.byte 0,1,2 +.segment "C1" +.byte 5,6,7 +.segment "CO" +.byte $22,$23,$24,$25 + +; D: incomplete memory area without fill, +; but overwrite extends past existing segments +.segment "D" +.byte 0,1,2 +.segment "DO" +.byte $24,$25 diff --git a/test/asm/listing/201-overwrite-overflow.cfg b/test/asm/listing/201-overwrite-overflow.cfg new file mode 100644 index 000000000..cada57d5a --- /dev/null +++ b/test/asm/listing/201-overwrite-overflow.cfg @@ -0,0 +1,12 @@ +MEMORY +{ + A: start = 0, size = 8, file = %O, fill = yes, fillval = $33; + B: start = 8, size = 8, file = %O, fill = yes, fillval = $44; +} +SEGMENTS +{ + A: load = A, type = ro; + B: load = B, type = ro; + AO: load = A, type = overwrite, start = 6; + BO: load = B, type = overwrite, start = 8+6; +} diff --git a/test/asm/listing/201-overwrite-overflow.s b/test/asm/listing/201-overwrite-overflow.s new file mode 100644 index 000000000..156388ab5 --- /dev/null +++ b/test/asm/listing/201-overwrite-overflow.s @@ -0,0 +1,13 @@ +; verification of overwrite segment overflow cases + +; error: overflow past end of A memory area +.segment "A" +.byte 0,1,2,3 +.segment "AO" +.byte $26,$27,$28 + +; error: overflow past end of B memory area +.segment "B" +.byte 0,1,2,3 +.segment "BO" +.byte $26,$27,$28 diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index 3c4c404af..204984b64 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -58,12 +58,20 @@ $(WORKDIR)/$1.bin: $1.s $(ISEQUAL) ifeq ($(wildcard control/$1.err),) $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) 2> $$(@:.bin=.err2) ifeq ($(wildcard control/$1.no-ld65),) +ifeq ($(wildcard $1.cfg),) $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) 2> $$(@:.bin=.ld65-err2) +else + $(LD65) -C $$(<:.s=.cfg) -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) 2> $$(@:.bin=.ld65-err2) +endif endif else $(CA65) -t none -o $$(@:.bin=.o) $$< > $$(@:.bin=.err) 2> $$(@:.bin=.err2) || $(TRUE) ifeq ($(wildcard control/$1.no-ld65),) +ifeq ($(wildcard $1.cfg),) $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) 2> $$(@:.bin=.ld65-err2) || $(TRUE) +else + $(LD65) -C $$(<:.s=.cfg) -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) 2> $$(@:.bin=.ld65-err2) || $(TRUE) +endif endif endif @@ -117,12 +125,20 @@ endif ifeq ($(wildcard control/$1.err),) $(CA65) -t none -l $$(@:.bin=.list-lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2> $$(@:.bin=.list-err2) ifeq ($(wildcard control/$1.no-ld65),) +ifeq ($(wildcard $1.cfg),) $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) 2> $$(@:.bin=.list-ld65-err2) +else + $(LD65) -C $$(<:.s=.cfg) -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) 2> $$(@:.bin=.list-ld65-err2) +endif endif else $(CA65) -t none -l $$(@:.bin=.list-lst) -o $$(@:.bin=.list-o) $$< > $$(@:.bin=.list-err) 2> $$(@:.bin=.list-err2) || $(TRUE) ifeq ($(wildcard control/$1.no-ld65),) +ifeq ($(wildcard $1.cfg),) $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) 2> $$(@:.bin=.list-ld65-err2) || $(TRUE) +else + $(LD65) -C $$(<:.s=.cfg) -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) 2> $$(@:.bin=.list-ld65-err2) || $(TRUE) +endif endif endif diff --git a/test/asm/listing/control/201-overwrite-overflow.err b/test/asm/listing/control/201-overwrite-overflow.err new file mode 100644 index 000000000..e69de29bb diff --git a/test/asm/listing/readme.txt b/test/asm/listing/readme.txt index d6280b954..5436b234a 100644 --- a/test/asm/listing/readme.txt +++ b/test/asm/listing/readme.txt @@ -4,6 +4,8 @@ Overall test: These testcases can be used to test different aspects of the assembler. The name of a test is everything in the form <test>.s. +If a custom linker configuration is needed, also include <test>.cfg. + The following reference files can be added: - ref/<test>.bin-ref: diff --git a/test/asm/listing/ref/200-overwrite.bin-ref b/test/asm/listing/ref/200-overwrite.bin-ref new file mode 100644 index 0000000000000000000000000000000000000000..b3a6f4f63cbcf5aa6c02e3980227eac3edd378f2 GIT binary patch literal 30 jcmZQzWMWoPRa0kRWO8v)RdZorR8m$^Wn%~O(^OOeDdYnM literal 0 HcmV?d00001 diff --git a/test/asm/listing/ref/201-overwrite-overflow.ld65err2-ref b/test/asm/listing/ref/201-overwrite-overflow.ld65err2-ref new file mode 100644 index 000000000..e372938ef --- /dev/null +++ b/test/asm/listing/ref/201-overwrite-overflow.ld65err2-ref @@ -0,0 +1,3 @@ +ld65: Warning: 201-overwrite-overflow.cfg:3: Segment 'AO' overflows memory area 'A' by 1 byte +ld65: Warning: 201-overwrite-overflow.cfg:4: Segment 'BO' overflows memory area 'B' by 1 byte +ld65: Error: Cannot generate most of the files due to memory area overflows diff --git a/test/asm/readme.txt b/test/asm/readme.txt index c3198c12a..db7f64504 100644 --- a/test/asm/readme.txt +++ b/test/asm/readme.txt @@ -1,32 +1,38 @@ Assembler Testcases =================== -Opcode Tests: -------------- +cpudetect +--------- -these go into opcodes/. Refer to opcodes/readme.txt +Tests the --cpu command line option of ca65/ld65. +Refer to cpudetect/readme.txt -CPU Detect Tests ----------------- +opcodes +------- -these go into cpudetect/. Refer to cpudetect/readme.txt +Test of assembler opcodes for each CPU. +Refer to opcodes/readme.txt -Overall tests: --------------- - -These go into listing/. Refer to listing/readme.txt - -val: ----- - -Works very much like the /val directory used to test the compiler - individual -tests are run in the simulator and should exit with an exit code of 0 when they -pass, or either -1 or a number indicating what part of the test failed on error. - err: ---- -Works very much like the /err directory used to test the compiler - individual -tests are assembled and MUST NOT assemble without error. +Used to test assembler errors. These tests MUST NOT assemble without error. + + +listing: +-------- + +This is the most versatile assembler test form, allowing control customizations, +reference tests for binary output, stdout and error text ouput, error tests, +listings, custom linker configuration, etc. as needed. +Refer to listing/readme.txt + + +val: +---- + +Runtime assembly tests using sim65 that should exit with an exit code of 0 when +the pass, or either -1 or a number indicating what part of the test failed on +error. From 6be7c160133d4315686d49149029149e7106a958 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 7 Mar 2023 18:48:30 -0500 Subject: [PATCH 2029/2710] linkter test with custom config should not use none.lib --- test/asm/listing/Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/asm/listing/Makefile b/test/asm/listing/Makefile index 204984b64..23aa3969c 100644 --- a/test/asm/listing/Makefile +++ b/test/asm/listing/Makefile @@ -61,7 +61,7 @@ ifeq ($(wildcard control/$1.no-ld65),) ifeq ($(wildcard $1.cfg),) $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) 2> $$(@:.bin=.ld65-err2) else - $(LD65) -C $$(<:.s=.cfg) -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) 2> $$(@:.bin=.ld65-err2) + $(LD65) -C $$(<:.s=.cfg) -o $$@ $$(@:.bin=.o) > $$(@:.bin=.ld65-err) 2> $$(@:.bin=.ld65-err2) endif endif else @@ -70,7 +70,7 @@ ifeq ($(wildcard control/$1.no-ld65),) ifeq ($(wildcard $1.cfg),) $(LD65) -t none -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) 2> $$(@:.bin=.ld65-err2) || $(TRUE) else - $(LD65) -C $$(<:.s=.cfg) -o $$@ $$(@:.bin=.o) none.lib > $$(@:.bin=.ld65-err) 2> $$(@:.bin=.ld65-err2) || $(TRUE) + $(LD65) -C $$(<:.s=.cfg) -o $$@ $$(@:.bin=.o) > $$(@:.bin=.ld65-err) 2> $$(@:.bin=.ld65-err2) || $(TRUE) endif endif endif @@ -128,7 +128,7 @@ ifeq ($(wildcard control/$1.no-ld65),) ifeq ($(wildcard $1.cfg),) $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) 2> $$(@:.bin=.list-ld65-err2) else - $(LD65) -C $$(<:.s=.cfg) -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) 2> $$(@:.bin=.list-ld65-err2) + $(LD65) -C $$(<:.s=.cfg) -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) > $$(@:.bin=.list-ld65-err) 2> $$(@:.bin=.list-ld65-err2) endif endif else @@ -137,7 +137,7 @@ ifeq ($(wildcard control/$1.no-ld65),) ifeq ($(wildcard $1.cfg),) $(LD65) -t none -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) 2> $$(@:.bin=.list-ld65-err2) || $(TRUE) else - $(LD65) -C $$(<:.s=.cfg) -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) none.lib > $$(@:.bin=.list-ld65-err) 2> $$(@:.bin=.list-ld65-err2) || $(TRUE) + $(LD65) -C $$(<:.s=.cfg) -o $$(@:.bin=.list-bin) $$(@:.bin=.list-o) > $$(@:.bin=.list-ld65-err) 2> $$(@:.bin=.list-ld65-err2) || $(TRUE) endif endif endif From 99220f60af8fca4817bde91a9dce8fb20e83e53f Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 7 Mar 2023 18:53:30 -0500 Subject: [PATCH 2030/2710] test/asm readme val description revision --- test/asm/readme.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/asm/readme.txt b/test/asm/readme.txt index db7f64504..49b530d1c 100644 --- a/test/asm/readme.txt +++ b/test/asm/readme.txt @@ -33,6 +33,6 @@ Refer to listing/readme.txt val: ---- -Runtime assembly tests using sim65 that should exit with an exit code of 0 when -the pass, or either -1 or a number indicating what part of the test failed on -error. +Runtime assembly tests using sim65 that should end with an exit code of 0 if +they pass. If they fail the exit code should be either -1, or a number +indicating what part of the test failed. From c8c6fc6a4064efb1a69a99fe75b37cdf5944f60f Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Fri, 17 Mar 2023 23:10:15 +0100 Subject: [PATCH 2031/2710] add xfseek --- asminc/telestrat.inc | 2 ++ libsrc/telestrat/lseek.s | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 libsrc/telestrat/lseek.s diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index 682696887..c57bd3de8 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -277,6 +277,8 @@ XRECLK = $3C ; Reset clock XCLCL = $3D ; Close clock XWRCLK = $3E ; Displays clock in the address in A & Y registers +XFSEEK = $3F ; Only in Orix + ; Sound primitives XSONPS = $40 ; Send data to PSG register (14 values) XOUPS = $42 ; Send Oups sound into PSG diff --git a/libsrc/telestrat/lseek.s b/libsrc/telestrat/lseek.s new file mode 100644 index 000000000..11d1fad33 --- /dev/null +++ b/libsrc/telestrat/lseek.s @@ -0,0 +1,39 @@ +; +; Jede (jede@oric.org), 2023-03-13 +; + +; off_t __fastcall__ lseek(int fd, off_t offset, int whence); + + .export _lseek + + .include "telestrat.inc" + .include "zeropage.inc" + + .import popax + +.proc _lseek + ; Save whence + sta tmp1 + ; Skip X + + ; Get offset and store + + jsr popax + sta tmp2 + stx tmp3 + + jsr popax + sta RESB + stx RESB+1 + + ; Get FD + jsr popax + ; Does not need X + sta RES ; Save FD + + lda tmp2 + ldy tmp3 + ldx tmp1 ; Get whence + BRK_TELEMON XFSEEK + rts +.endproc From fcbcbea4ad7653b279012b948b463bc6aa096080 Mon Sep 17 00:00:00 2001 From: Jeff Tranter <tranter@pobox.com> Date: Mon, 27 Mar 2023 09:23:40 -0400 Subject: [PATCH 2032/2710] Make some documentation fixes for KIM-1 platform. --- doc/kim1.sgml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/kim1.sgml b/doc/kim1.sgml index c3494b9b9..1387d3b19 100644 --- a/doc/kim1.sgml +++ b/doc/kim1.sgml @@ -45,8 +45,10 @@ system configuration before compiling and linking user programs. The ROMs and I/O areas are defined in the configuration files, as are most of the entry points for useful subroutines in the KIM-1 monitor ROM. cc65 generated programs compiled and linked using 4k config run in the memory range of $200 - $0FFF. The 60k config expands -this range to $DFFF. The starting memory location and entry point for running the program is -$200, so when the program is transferred to the KIM-1, it is executed by typing '200 G'. +this range to $DFFF. When using the 4k config the starting memory location and entry point +for running the program is $200, so when the program is transferred to the KIM-1, it is +executed by typing '200 G'. With the 60k config the default starting memory location and entry +point is $2000. Special locations: @@ -65,7 +67,7 @@ Special locations: <sect>Platform specific header files<p> -Programs containing KIM-1 code may use the <tt/kim.h/ header file. See the header file for more information. +Programs containing KIM-1 code may use the <tt/kim1.h/ header file. See the header file for more information. <sect>Loadable drivers<p> From 806ffe56757ee192d478565f9fb438f1e146ab08 Mon Sep 17 00:00:00 2001 From: Jeff Tranter <tranter@pobox.com> Date: Mon, 27 Mar 2023 17:56:25 -0400 Subject: [PATCH 2033/2710] Fixes and improvements to KIM-1 i/o routines. Tested on real KIM-1 hardware. read.s: - Remove commented out line. - Remove unused check for bell character. - Remove echo of newline (hardware always echoes entered characters). - This fixes gets() and fgets() so they return when CR is entered. write.s: - Fix check for adding return after linefeed (failed to work because OUTCHR changes A) - Remove unused check for bell character. kim1.inc: - Add symbol for monitor entry crt0.s: - Jump to KIM-1 monitor by address rather than using BRK (which relies on vector being set in RAM) --- asminc/kim1.inc | 2 +- libsrc/kim1/crt0.s | 6 ++---- libsrc/kim1/read.s | 7 +------ libsrc/kim1/write.s | 7 +++---- 4 files changed, 7 insertions(+), 15 deletions(-) diff --git a/asminc/kim1.inc b/asminc/kim1.inc index 68f059490..2fb1117fa 100644 --- a/asminc/kim1.inc +++ b/asminc/kim1.inc @@ -15,7 +15,7 @@ OUTCHR := $1EA0 ; Output character INTCHR := $1E5A ; Input character without case conversion DUMPT := $1800 ; Dump memory to tape LOADT := $1873 ; Load memory from tape - +START := $1C4F ; Enter KIM-1 monitor ; --------------------------------------------------------------------------- ; System Memory diff --git a/libsrc/kim1/crt0.s b/libsrc/kim1/crt0.s index f1fee86c1..906b3b980 100644 --- a/libsrc/kim1/crt0.s +++ b/libsrc/kim1/crt0.s @@ -40,8 +40,6 @@ _init: cld ; Clear decimal mode jsr _main -; Back from main (this is also the _exit entry). There may be a more elegant way to -; return to the monitor on the KIM-1, but I don't know it! - -_exit: brk +; Back from main (this is also the _exit entry). Jumps to the KIM-1 monitor. +_exit: jmp START diff --git a/libsrc/kim1/read.s b/libsrc/kim1/read.s index 5566a9f27..dd178ee98 100644 --- a/libsrc/kim1/read.s +++ b/libsrc/kim1/read.s @@ -27,15 +27,10 @@ begin: dec ptr2 beq done ; If buffer full, return getch: jsr INTCHR ; Get character using Monitor ROM call - ;jsr OUTCHR ; Echo it and #$7F ; Clear top bit - cmp #$07 ; Check for '\a' - bne chkcr ; ...if BEL character - ;jsr BEEP ; Make beep sound TODO -chkcr: cmp #$0D ; Check for '\r' + cmp #$0D ; Check for '\r' bne putch ; ...if CR character lda #$0A ; Replace with '\n' - jsr OUTCHR ; and echo it putch: ldy #$00 ; Put char into return buffer sta (ptr1),y diff --git a/libsrc/kim1/write.s b/libsrc/kim1/write.s index 216f5031c..96bcc91d1 100644 --- a/libsrc/kim1/write.s +++ b/libsrc/kim1/write.s @@ -28,11 +28,10 @@ begin: dec ptr2 outch: ldy #0 lda (ptr1),y + pha ; Save A (changed by OUTCHR) jsr OUTCHR ; Send character using Monitor call - cmp #$07 ; Check for '\a' - bne chklf ; ...if BEL character -;jsr BEEP ; Make beep sound -chklf: cmp #$0A ; Check for 'n' + pla ; Restore A + cmp #$0A ; Check for '\n' bne next ; ...if LF character lda #$0D ; Add a carriage return jsr OUTCHR From 2dd558eae9cc31e794beeda3a3e31278ee971977 Mon Sep 17 00:00:00 2001 From: mooinglemur <mooinglemur@users.noreply.github.com> Date: Tue, 28 Mar 2023 21:18:02 -0700 Subject: [PATCH 2034/2710] cx16: update RAM constants for ROM ver R42 --- asminc/cx16.inc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/asminc/cx16.inc b/asminc/cx16.inc index 1a916ecdb..be63780c8 100644 --- a/asminc/cx16.inc +++ b/asminc/cx16.inc @@ -239,12 +239,12 @@ BASIC_BUF := $0200 ; Location of command-line BASIC_BUF_LEN = 81 ; Maximum length of command-line SCREEN_PTR := $0262 ; Pointer to current row on text screen (16 bits) -STATUS := $0289 ; Status from previous I/O operation -IN_DEV := $028D ; Current input device number -OUT_DEV := $028E ; Current output device number -FNAM_LEN := $0291 ; Length of filename -SECADR := $0293 ; Secondary address -DEVNUM := $0294 ; Device number +STATUS := $0287 ; Status from previous I/O operation +IN_DEV := $028B ; Current input device number +OUT_DEV := $028C ; Current output device number +FNAM_LEN := $028F ; Length of filename +SECADR := $0291 ; Secondary address +DEVNUM := $0292 ; Device number CURS_COLOR := $0373 ; Color under the cursor CHARCOLOR := $0376 ; Cursor's color nybbles (high: background, low: foreground) RVS := $0377 ; Reverse flag @@ -258,8 +258,8 @@ LLEN := $0386 ; Line length NLINES := $0387 ; Number of screen lines ; BASIC -VARTAB := $03E2 ; Pointer to start of BASIC variables -MEMSIZE := $03EA ; Pointer to highest BASIC RAM location (+1) +VARTAB := $03E1 ; Pointer to start of BASIC variables +MEMSIZE := $03E9 ; Pointer to highest BASIC RAM location (+1) ; --------------------------------------------------------------------------- ; Vector and other locations From 3a5fbd34da2daf0004a51fd24f853ebfb90e7307 Mon Sep 17 00:00:00 2001 From: Jeff Tranter <tranter@pobox.com> Date: Wed, 29 Mar 2023 18:40:10 -0400 Subject: [PATCH 2035/2710] Add KIM-1 functions to write to the 7-segment LED display and get keypresses from the keypad. Includes sample program illustrating how to use them. Tested on real KIM-1 hardware. --- asminc/kim1.inc | 4 +++ include/kim1.h | 13 ++++++++++ libsrc/kim1/getkey.s | 18 ++++++++++++++ libsrc/kim1/scandisplay.s | 21 ++++++++++++++++ samples/kim1/kimKeyDisp.c | 52 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 108 insertions(+) create mode 100644 libsrc/kim1/getkey.s create mode 100644 libsrc/kim1/scandisplay.s create mode 100644 samples/kim1/kimKeyDisp.c diff --git a/asminc/kim1.inc b/asminc/kim1.inc index 2fb1117fa..81e83b83c 100644 --- a/asminc/kim1.inc +++ b/asminc/kim1.inc @@ -16,6 +16,10 @@ INTCHR := $1E5A ; Input character without case conversion DUMPT := $1800 ; Dump memory to tape LOADT := $1873 ; Load memory from tape START := $1C4F ; Enter KIM-1 monitor +SCANDS := $1F1F ; Scan 7-segment display +KEYIN := $1F40 ; Open up keyboard channel +GETKEY := $1F6A ; Return key from keyboard + ; --------------------------------------------------------------------------- ; System Memory diff --git a/include/kim1.h b/include/kim1.h index dae246944..99843f8f8 100644 --- a/include/kim1.h +++ b/include/kim1.h @@ -56,5 +56,18 @@ int __fastcall__ loadt (unsigned char); /* Write to tape */ int __fastcall__ dumpt (unsigned char, const void*, const void*); + +/* Write to 7-segment LED display. Due to hardware limitations it only +** displays briefly, so must be called repeatedly to update the +** display. +**/ +void __fastcall__ scandisplay(unsigned char left, unsigned char middle, unsigned char right); + +/* +** Get a keypress from the keypad. Returns $00-$0F(0-F), $10(AD), $11(DA), $12(+), +** $13(GO), $14(PC) or $15 for no keypress. +**/ +int __fastcall__ getkey(); + /* End of sym1.h */ #endif diff --git a/libsrc/kim1/getkey.s b/libsrc/kim1/getkey.s new file mode 100644 index 000000000..b36cd4b4c --- /dev/null +++ b/libsrc/kim1/getkey.s @@ -0,0 +1,18 @@ +; +; int __fastcall__ getkey(); +; + +.include "kim1.inc" + +.import popa + +.export _getkey + +.proc _getkey + + jsr KEYIN ; Open up keyboard channel + jsr GETKEY ; Get key code + ldx #0 ; MSB of return value is zero + rts + +.endproc diff --git a/libsrc/kim1/scandisplay.s b/libsrc/kim1/scandisplay.s new file mode 100644 index 000000000..0f46a5de4 --- /dev/null +++ b/libsrc/kim1/scandisplay.s @@ -0,0 +1,21 @@ +; +; void __fastcall__ scandisplay(unsigned char left, unsigned char middle, unsigned char right); +; + +.include "kim1.inc" + +.import popa + +.export _scandisplay + +.proc _scandisplay + + sta $F9 ; Rightmost display data + jsr popa + sta $FA ; Middle display data + jsr popa + sta $FB ; Leftmost display data + jsr SCANDS + rts + +.endproc diff --git a/samples/kim1/kimKeyDisp.c b/samples/kim1/kimKeyDisp.c new file mode 100644 index 000000000..63839d19e --- /dev/null +++ b/samples/kim1/kimKeyDisp.c @@ -0,0 +1,52 @@ +/* Example illustrating scandisplay() and getkey() functions. */ + +#include <stdio.h> +#include <kim1.h> + +int main (void) +{ + int i, j, k, l; + int last = 15; + + printf("\nKIM-1 Demo\n"); + + for (i = 0; i < 16; i++) { + for (j = 0; j < 16; j++) { + for (k = 0; k < 16; k++) { + scandisplay(i, j, k); + + l = getkey(); + + if (l != last) { + switch (l) { + case 0x0: case 0x1: case 0x2: case 0x3: + case 0x4: case 0x5: case 0x6: case 0x7: + case 0x8: case 0x9: case 0xa: case 0xb: + case 0xc: case 0xd: case 0xe: case 0xf: + printf("Key pressed: %X\n", l); + break; + case 0x10: + printf("Key pressed: AD\n"); + break; + case 0x11: + printf("Key pressed: DA\n"); + break; + case 0x12: + printf("Key pressed: +\n"); + break; + case 0x13: + printf("Key pressed: GO\n"); + break; + case 0x14: + printf("Key pressed: PC\n"); + break; + } + + last = l; + } + } + } + } + + return 0; +} From ed4edd908b8274a13ca1b8f988dfe5cdbb194d02 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Tue, 4 Apr 2023 00:40:33 +0200 Subject: [PATCH 2036/2710] fix copy'n'paste typo --- include/kim1.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/kim1.h b/include/kim1.h index 99843f8f8..03c496223 100644 --- a/include/kim1.h +++ b/include/kim1.h @@ -69,5 +69,5 @@ void __fastcall__ scandisplay(unsigned char left, unsigned char middle, unsigned **/ int __fastcall__ getkey(); -/* End of sym1.h */ +/* End of kim1.h */ #endif From 19349acdcf731fe54d28f839385a4f431ee62d20 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Tue, 4 Apr 2023 00:57:52 +0200 Subject: [PATCH 2037/2710] fix typo in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 697132fde..e0e2c24e7 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Core team members: * [Christian Groessler](https://github.com/groessler): Atari, Atari5200, and CreatiVision library Maintainer * [dqh](https://github.com/dqh-au): GHA help * [Greg King](https://github.com/greg-king5): all around hackery -* [groepaz](https://github.com/mrdudz): CBM libary, Project Maintainer +* [groepaz](https://github.com/mrdudz): CBM library, Project Maintainer * [Oliver Schmidt](https://github.com/oliverschmidt): Apple II library Maintainer External contributors: From 2a7533268cfcec42f217b7cf521a567da866e29f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ola=20S=C3=B6der?= <rolfkopman@gmail.com> Date: Fri, 7 Apr 2023 23:44:30 +0200 Subject: [PATCH 2038/2710] Don't use hardcoded paths on Amiga Hardcoded paths don't make sense on AmigaOS, AROS and MorphOS. --- src/ca65/incpath.c | 2 +- src/cc65/incpath.c | 2 +- src/cl65/main.c | 2 +- src/ld65/filepath.c | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ca65/incpath.c b/src/ca65/incpath.c index 8ea67df6f..461f1ad79 100644 --- a/src/ca65/incpath.c +++ b/src/ca65/incpath.c @@ -75,7 +75,7 @@ void FinishIncludePaths (void) AddSubSearchPathFromEnv (IncSearchPath, "CC65_HOME", "asminc"); /* Add some compiled-in search paths if defined at compile time. */ -#if defined(CA65_INC) && !defined(_WIN32) +#if defined(CA65_INC) && !defined(_WIN32) && !defined(_AMIGA) AddSearchPath (IncSearchPath, CA65_INC); #endif diff --git a/src/cc65/incpath.c b/src/cc65/incpath.c index 85f6e070b..3069079ac 100644 --- a/src/cc65/incpath.c +++ b/src/cc65/incpath.c @@ -76,7 +76,7 @@ void FinishIncludePaths (void) AddSubSearchPathFromEnv (SysIncSearchPath, "CC65_HOME", "include"); /* Add some compiled-in search paths if defined at compile time. */ -#if defined(CC65_INC) && !defined(_WIN32) +#if defined(CC65_INC) && !defined(_WIN32) && !defined(_AMIGA) AddSearchPath (SysIncSearchPath, CC65_INC); #endif diff --git a/src/cl65/main.c b/src/cl65/main.c index 67e9444f4..553fb9ca6 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -1216,7 +1216,7 @@ static void OptPrintTargetPath (const char* Opt attribute ((unused)), SearchPaths* TargetPaths = NewSearchPath (); AddSubSearchPathFromEnv (TargetPaths, "CC65_HOME", "target"); -#if defined(CL65_TGT) && !defined(_WIN32) +#if defined(CL65_TGT) && !defined(_WIN32) && !defined(_AMIGA) AddSearchPath (TargetPaths, CL65_TGT); #endif AddSubSearchPathFromBin (TargetPaths, "target"); diff --git a/src/ld65/filepath.c b/src/ld65/filepath.c index 1ceb2333e..c84fe6f46 100644 --- a/src/ld65/filepath.c +++ b/src/ld65/filepath.c @@ -88,13 +88,13 @@ void InitSearchPaths (void) AddSubSearchPathFromEnv (CfgDefaultPath, "CC65_HOME", "cfg"); /* Add some compiled-in search paths if defined at compile time. */ -#if defined(LD65_LIB) && !defined(_WIN32) +#if defined(LD65_LIB) && !defined(_WIN32) && !defined(_AMIGA) AddSearchPath (LibDefaultPath, LD65_LIB); #endif -#if defined(LD65_OBJ) && !defined(_WIN32) +#if defined(LD65_OBJ) && !defined(_WIN32) && !defined(_AMIGA) AddSearchPath (ObjDefaultPath, LD65_OBJ); #endif -#if defined(LD65_CFG) && !defined(_WIN32) +#if defined(LD65_CFG) && !defined(_WIN32) && !defined(_AMIGA) AddSearchPath (CfgDefaultPath, LD65_CFG); #endif From 1f9594560ed0392bd0420dc79e1f586cc8c63218 Mon Sep 17 00:00:00 2001 From: Janne Johansson <icepic.dz@gmail.com> Date: Wed, 19 Apr 2023 09:15:03 +0200 Subject: [PATCH 2039/2710] Update lynxsprite.c Remove compiler warning about (signed) char wrapping around to -1 when set to 255. --- src/sp65/lynxsprite.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sp65/lynxsprite.c b/src/sp65/lynxsprite.c index 566edacbe..6bd9b03de 100644 --- a/src/sp65/lynxsprite.c +++ b/src/sp65/lynxsprite.c @@ -312,7 +312,7 @@ static void AssembleByte(unsigned bits, char val) static unsigned char AnalyseNextChunks(signed *newlen, signed len, char data[32], char ColorBits) { char longest = 1; - char prev = 255; + unsigned char prev = 255; char count = 0; char index = 0; char lindex = 0; From 613ee94f445463c76135c5cb9ebffad6b9027cae Mon Sep 17 00:00:00 2001 From: Jeff Tranter <tranter@pobox.com> Date: Sun, 30 Apr 2023 18:40:09 -0400 Subject: [PATCH 2040/2710] Source listing in bootstrap.s is incorrect. The OSI C1P alternative boot file format works, but the code in the source listing does not match the ASCII-coded hex translation (which is actually used). This is confusing to anyone trying to maintain the code. Also, the source code does not assemble when ASM is defined. With these changes the source file should correctly match what is used at run time. --- libsrc/osic1p/bootstrap.s | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/libsrc/osic1p/bootstrap.s b/libsrc/osic1p/bootstrap.s index e88e257fd..292f98914 100644 --- a/libsrc/osic1p/bootstrap.s +++ b/libsrc/osic1p/bootstrap.s @@ -34,7 +34,7 @@ ram_top := __MAIN_START__ + __MAIN_SIZE__ .ifdef ASM - .include "osic1p.inc" + .include "screen-c1p-24x24.s" .macpack generic load := $08 ; private variables @@ -45,20 +45,22 @@ GETCHAR := $FFBF ; gets one character from ACIA FIRSTVISC = $85 ; Offset of first visible character in video RAM LINEDIST = $20 ; Offset in video RAM between two lines - ldy #<$0000 + ldy #<$00 lda #<load_addr ldx #>load_addr sta load stx load+1 - ldx #(<load_size) + 1 - stx count - ldx #(>load_size) + 1 - stx count+1 ; save size with each byte incremented separately + lda #<load_size + eor #$FF + sta count + lda #>load_size + eor #$FF + sta count+1 -L1: dec count +L1: inc count bnz L2 - dec count+1 + inc count+1 bze L3 L2: jsr GETCHAR ; (doesn't change .Y) sta (load),y @@ -70,7 +72,7 @@ L2: jsr GETCHAR ; (doesn't change .Y) lsr a and #8 - 1 ora #$10 ; eight arrow characters - sta SCRNBASE + FIRSTVISC + 2 * LINEDIST + 11 + sta C1P_SCR_BASE + FIRSTVISC + 2 * LINEDIST + 11 iny bnz L1 From 4d97e30b557172d32435c83b1cb41f8eb5106042 Mon Sep 17 00:00:00 2001 From: Jeff Tranter <tranter@pobox.com> Date: Sun, 30 Apr 2023 18:40:09 -0400 Subject: [PATCH 2041/2710] Source listing in bootstrap.s is incorrect. The OSI C1P alternative boot file format works, but the code in the source listing does not match the ASCII-coded hex translation (which is actually used). This is confusing to anyone trying to maintain the code. Also, the source code did not assemble when ASM is defined. Also removed use of branch macros and an unnecessary "<" operator. With these changes the source file should correctly match what is used at run time. --- libsrc/osic1p/bootstrap.s | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/libsrc/osic1p/bootstrap.s b/libsrc/osic1p/bootstrap.s index e88e257fd..52ce31f84 100644 --- a/libsrc/osic1p/bootstrap.s +++ b/libsrc/osic1p/bootstrap.s @@ -34,7 +34,7 @@ ram_top := __MAIN_START__ + __MAIN_SIZE__ .ifdef ASM - .include "osic1p.inc" + .include "screen-c1p-24x24.s" .macpack generic load := $08 ; private variables @@ -45,21 +45,23 @@ GETCHAR := $FFBF ; gets one character from ACIA FIRSTVISC = $85 ; Offset of first visible character in video RAM LINEDIST = $20 ; Offset in video RAM between two lines - ldy #<$0000 + ldy #$00 lda #<load_addr ldx #>load_addr sta load stx load+1 - ldx #(<load_size) + 1 - stx count - ldx #(>load_size) + 1 - stx count+1 ; save size with each byte incremented separately + lda #<load_size + eor #$FF + sta count + lda #>load_size + eor #$FF + sta count+1 -L1: dec count - bnz L2 - dec count+1 - bze L3 +L1: inc count + bne L2 + inc count+1 + beq L3 L2: jsr GETCHAR ; (doesn't change .Y) sta (load),y @@ -70,12 +72,12 @@ L2: jsr GETCHAR ; (doesn't change .Y) lsr a and #8 - 1 ora #$10 ; eight arrow characters - sta SCRNBASE + FIRSTVISC + 2 * LINEDIST + 11 + sta C1P_SCR_BASE + FIRSTVISC + 2 * LINEDIST + 11 iny - bnz L1 + bne L1 inc load+1 - bnz L1 ; branch always + bne L1 ; branch always L3: jmp load_addr From 08223360d539aede5719696be9d287747950500b Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Tue, 2 May 2023 12:43:50 +0200 Subject: [PATCH 2042/2710] Update instr.c --- src/ca65/instr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ca65/instr.c b/src/ca65/instr.c index 7cbefaecf..4f95ec75c 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -1617,7 +1617,7 @@ static void PutJMP (const InsDesc* Ins) if (EvalEA (Ins, &A)) { /* Check for indirect addressing */ - if (A.AddrModeBit & AM65_ABS_IND && CPU < CPU_65SC02) { + if ((A.AddrModeBit & AM65_ABS_IND) && (CPU < CPU_65SC02)) { /* Compare the low byte of the expression to 0xFF to check for ** a page cross. Be sure to use a copy of the expression otherwise From 1c26b1cf1b90172f16f7f7b0eed7ab36baa49165 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 2 May 2023 14:42:00 -0400 Subject: [PATCH 2043/2710] RHS primary integer promotion must happen after loading the primary, not before. See: #2060 --- src/cc65/expr.c | 3 ++- test/val/bug2060.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 test/val/bug2060.c diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 691010b0a..9460569ed 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3090,9 +3090,10 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) Expr->Type = Expr2.Type; } else if (!DoArrayRef && IsClassInt (lhst) && IsClassInt (rhst)) { /* Integer addition */ - flags = typeadjust (Expr, &Expr2, 0); /* Load rhs into the primary */ LoadExpr (CF_NONE, &Expr2); + /* Adjust rhs primary if needed */ + flags = typeadjust (Expr, &Expr2, 0); } else { /* OOPS */ AddDone = -1; diff --git a/test/val/bug2060.c b/test/val/bug2060.c new file mode 100644 index 000000000..59b4774a4 --- /dev/null +++ b/test/val/bug2060.c @@ -0,0 +1,56 @@ +/* Test of bug: https://github.com/cc65/cc65/issues/2060 */ + +#include <stdio.h> + +#define W 320 + +unsigned long test1(unsigned char* p, unsigned long n) +{ + (void)p; + return n; +} + +unsigned long test0(unsigned char* p, int x, int y, unsigned char b) +{ + (void)b; + return test1(p, (long)y * W + x); +} + +#define TEST(ta,tb) \ + expect = (long)tb * W + ta; \ + result = test0(p,ta,tb,0x56); \ + printf("%4d * %3d + %4d = %08lx",tb,W,ta,result); \ + if (expect != result) { printf(" expected: %08lx\n",expect); ++fail; } \ + else printf("\n"); + +int main(void) +{ + unsigned char* p = (unsigned char*)0x1234; + unsigned long expect, result; + int fail = 0; + + TEST(1,3); + TEST(50,60); + TEST(99,88); + TEST(128,102); + TEST(129,102); + TEST(320,102); + /* Bug 2060 indicated failure when y > 102. + Because: (y * 320) > 32767 + The promotion of x from int to long had an incorrect high word, + because it was done before loading x into AX, rather than after. + */ + TEST(0,103); + TEST(150,170); + TEST(300,180); + /* x < 0 also fails because its high word sign extend is incorrect. */ + TEST(-100,50); + TEST(-49,99); + TEST(-300,-180); + /* This passed despite the bug, because y * 320 coincidentally had the + same high word. + */ + TEST(-1,-1); + + return fail; +} From 2c47ea45af0ad91a611c866b9f99a5c7eae4e5f1 Mon Sep 17 00:00:00 2001 From: Brad Smith <bbbradsmith@users.noreply.github.com> Date: Tue, 2 May 2023 18:18:10 -0400 Subject: [PATCH 2044/2710] bug895.c compliant token pasting syntax to remove warnings Gets rid of some unnecessary warning spam in the test log of lines like this: ``` bug895.c:95: Warning: Pasting formed "unsigned_long_14(", an invalid preprocessing token ``` --- test/val/bug895.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/val/bug895.c b/test/val/bug895.c index c4892d7b1..3c0331a6d 100644 --- a/test/val/bug895.c +++ b/test/val/bug895.c @@ -21,7 +21,7 @@ unsigned int uia, uib; unsigned long ula, ulb; #define OPTCMP8TEST_SINGLE(num,cmpop,asmprefix,vara,varb,b0,b1,a0,a1,typename,name) \ - typename name ## _ ## num ## (void) { \ + typename name ## _ ## num(void) { \ varb = b0; \ asm( asmprefix ); \ vara = a0; \ @@ -30,7 +30,7 @@ unsigned long ula, ulb; } #define OPTCMP8TEST_VERIFY(num,b,desc,printterm,name) \ - ASSERT_AreEqual(name ## _ ## num ##(),b,printterm,"Incorrect optimization of const comparison (" #name "_" #num ": " desc ")."); + ASSERT_AreEqual(name ## _ ## num(),b,printterm,"Incorrect optimization of const comparison (" #name "_" #num ": " desc ")."); /* Generates a set of comparison tests for one type and set of test values. ** name = a name for this test (no spaces) From e7046a02ff392d793647fccd76245ce1bc00c4cc Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 2 May 2023 19:00:34 -0400 Subject: [PATCH 2045/2710] Disallow pass/return of 3-byte struct (#2022), document capability added in #1102. --- doc/cc65.sgml | 5 ++--- src/cc65/datatype.c | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 683249bda..2e99f3201 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -806,9 +806,8 @@ and the one defined by the ISO standard: <item> The datatypes "float" and "double" are not available. <p> -<item> C Functions may not return structs (or unions), and structs may not - be passed as parameters by value. However, struct assignment *is* - possible. +<item> C Functions may return structs (or unions) by value, but only of + 1, 2 or 4 byte sizes. <p> <item> Most of the C library is available with only the fastcall calling convention (<ref id="extension-fastcall" name="see below">). It means diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 6907ee099..caa41a7a4 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -803,7 +803,6 @@ const Type* GetStructReplacementType (const Type* SType) switch (SizeOf (SType)) { case 1: NewType = type_uchar; break; case 2: NewType = type_uint; break; - case 3: /* FALLTHROUGH */ case 4: NewType = type_ulong; break; default: NewType = SType; break; } From af11d4d947d090419827907604d8751a3eb01411 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 2 May 2023 19:21:21 -0400 Subject: [PATCH 2046/2710] Document that struct-param is default off since: 3129266 --- doc/cc65.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 2e99f3201..023204f4d 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -741,7 +741,7 @@ Here is a description of all the command line options: <tag><tt/return-type/</tag> Warn about no return statement in function returning non-void. <tag><tt/struct-param/</tag> - Warn when passing structs by value. + Warn when passing structs by value. (Disabled by default.) <tag><tt/unknown-pragma/</tag> Warn about #pragmas that aren't recognized by cc65. <tag><tt/unreachable-code/</tag> From bf22f94a436345334e81fe70d196a8e805b7a778 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 2 May 2023 20:02:58 -0400 Subject: [PATCH 2047/2710] struct pass and return by value test --- test/val/struct-by-value.c | 144 +++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 test/val/struct-by-value.c diff --git a/test/val/struct-by-value.c b/test/val/struct-by-value.c new file mode 100644 index 000000000..0e846c117 --- /dev/null +++ b/test/val/struct-by-value.c @@ -0,0 +1,144 @@ +/* Test of passing and returning structs by value. + Structs of 1, 2 and 4 bytes are supported. + Note that structs of 3 bytes are disabled, see: + https://github.com/cc65/cc65/issues/2022 +*/ + +int fail = 0; + +struct s1 { char a; }; +struct s2 { char a, b; }; +struct s3 { char a, b, c; }; +struct s4 { char a, b, c, d; }; + +const struct s1 c1 = { 1 }; +const struct s2 c2 = { 2, 3 }; +const struct s3 c3 = { 4, 5, 6 }; +const struct s4 c4 = { 7, 8, 9, 10 }; + +struct s1 return1() { return c1; } +struct s2 return2() { return c2; } +/*struct s3 return3() { return c3; }*/ +struct s4 return4() { return c4; } + +int compare1(struct s1 a, struct s1 b) +{ + if (a.a != b.a) return 1; + return 0; +} + +int compare2(struct s2 a, struct s2 b) +{ + if (a.a != b.a) return 1; + if (a.b != b.b) return 1; + return 0; +} + +/*int compare3(struct s3 a, struct s3 b) +{ + if (a.a != b.a) return 1; + if (a.b != b.b) return 1; + if (a.c != b.c) return 1; + return 0; +}*/ + +int compare4(struct s4 a, struct s4 b) +{ + if (a.a != b.a) return 1; + if (a.b != b.b) return 1; + if (a.c != b.c) return 1; + if (a.d != b.d) return 1; + return 0; +} + +int pass1(struct s1 p1) +{ + struct s1 a1; + a1 = p1; + if (a1.a != c1.a) return 1; + return 0; +} + +int pass2(struct s2 p2) +{ + struct s2 a2; + a2 = p2; + if (a2.a != c2.a) return 1; + if (a2.b != c2.b) return 1; + return 0; +} + +/*int pass3(struct s3 p3) +{ + struct s3 a3; + a3 = p3; + if (a3.a != c3.a) return 1; + if (a3.b != c3.b) return 1; + if (a3.c != c3.c) return 1; + return 0; +}*/ + +int pass4(struct s4 p4) +{ + struct s4 a4; + a4 = p4; + if (a4.a != c4.a) return 1; + if (a4.b != c4.b) return 1; + if (a4.c != c4.c) return 1; + if (a4.d != c4.d) return 1; + return 0; +} + +void reset(char* gg) +{ + char i; + for (i=0;i<5;++i) gg[i] = 128+i; +} + +int test(char* gg, char start) +{ + char i; + for (i=start;i<5;++i) + if (gg[i] != 128+i) return 1; + return 0; +} + +int main() +{ + /* Used to check #2022 bug condition of extra bytes being overwritten. */ + union + { + char gg[5]; + struct s1 g1; + struct s2 g2; + struct s3 g3; + struct s4 g4; + } guard; + + reset(guard.gg); + guard.g1 = return1(); + fail += compare1(guard.g1,c1); + fail += test(guard.gg,1); + + reset(guard.gg); + guard.g2 = return2(); + fail += compare2(guard.g2,c2); + fail += test(guard.gg,2); + + /*reset(guard.gg); + guard.g3 = return3(); + fail += compare3(guard.g3,c3); + fail += test(guard.gg,3);*/ + + reset(guard.gg); + guard.g4 = return4(); + fail += compare4(guard.g4,c4); + fail += test(guard.gg,4); + + fail += pass1(c1); + fail += pass2(c2); + /*fail += pass3(c3);*/ + fail += pass4(c4); + + return fail; +} From bf5b37a3b2b0a286e3cc14d1435f0ddbaa6cee4d Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 2 May 2023 21:27:02 -0400 Subject: [PATCH 2048/2710] Error check for internal overflow of numerical constant See bug #2026 --- src/cc65/scanner.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 36fd1301b..055c02450 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -522,6 +522,7 @@ static void NumericConst (void) char C; unsigned DigitVal; unsigned long IVal; /* Value */ + int Overflow; /* Get the pp-number first, then parse on it */ CopyPPNumber (&Src); @@ -575,6 +576,7 @@ static void NumericConst (void) /* Since we now know the correct base, convert the input into a number */ SB_SetIndex (&Src, Index); IVal = 0; + Overflow = 0; while ((C = SB_Peek (&Src)) != '\0' && (Base <= 10 ? IsDigit (C) : IsXDigit (C))) { DigitVal = HexVal (C); if (DigitVal >= Base) { @@ -582,9 +584,17 @@ static void NumericConst (void) SB_Clear (&Src); break; } - IVal = (IVal * Base) + DigitVal; + if ((((unsigned long)(IVal * Base)) / Base) != IVal) + Overflow = 1; + IVal = IVal * Base; + if (((unsigned long)(IVal + DigitVal)) < IVal) + Overflow = 1; + IVal += DigitVal; SB_Skip (&Src); } + if (Overflow) + Error ("Numerical constant \"%s\" too large for internal 32-bit representation", + SB_GetConstBuf (&Src)); /* Distinguish between integer and floating point constants */ if (!IsFloat) { From 409235aee65ce5fd807a50b32a2a4ba664aaab70 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 2 May 2023 22:27:28 -0400 Subject: [PATCH 2049/2710] Optional warning for implicit constant conversion overflow --- doc/cc65.sgml | 2 ++ src/cc65/error.c | 2 ++ src/cc65/error.h | 1 + src/cc65/typeconv.c | 5 +++++ 4 files changed, 10 insertions(+) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 683249bda..5a094571a 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -754,6 +754,8 @@ Here is a description of all the command line options: Warn about unused function parameters. <tag><tt/unused-var/</tag> Warn about unused variables. + <tag><tt/const-overflow/</tag> + Warn if numerical constant conversion implies overflow. (Disabled by default.) </descrip> The full list of available warning names can be retrieved by using the diff --git a/src/cc65/error.c b/src/cc65/error.c index 3f36d9e97..6ac3e594b 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -79,6 +79,7 @@ IntStack WarnUnusedLabel = INTSTACK(1); /* - unused labels */ IntStack WarnUnusedParam = INTSTACK(1); /* - unused parameters */ IntStack WarnUnusedVar = INTSTACK(1); /* - unused variables */ IntStack WarnUnusedFunc = INTSTACK(1); /* - unused functions */ +IntStack WarnConstOverflow = INTSTACK(0); /* - overflow conversion of numerical constants */ /* Map the name of a warning to the intstack that holds its state */ typedef struct WarnMapEntry WarnMapEntry; @@ -102,6 +103,7 @@ static WarnMapEntry WarnMap[] = { { &WarnUnusedLabel, "unused-label" }, { &WarnUnusedParam, "unused-param" }, { &WarnUnusedVar, "unused-var" }, + { &WarnConstOverflow, "const-overflow" }, }; Collection DiagnosticStrBufs; diff --git a/src/cc65/error.h b/src/cc65/error.h index 7fcb03467..83be8c782 100644 --- a/src/cc65/error.h +++ b/src/cc65/error.h @@ -76,6 +76,7 @@ extern IntStack WarnUnusedLabel; /* - unused labels */ extern IntStack WarnUnusedParam; /* - unused parameters */ extern IntStack WarnUnusedVar; /* - unused variables */ extern IntStack WarnUnusedFunc; /* - unused functions */ +extern IntStack WarnConstOverflow; /* - overflow conversion of numerical constants */ /* Forward */ struct StrBuf; diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index f77ec3951..49dfcc597 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -128,6 +128,7 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) ** internally already represented by a long. */ if (NewBits <= OldBits) { + unsigned long OldVal = Expr->IVal; /* Cut the value to the new size */ Expr->IVal &= (0xFFFFFFFFUL >> (32 - NewBits)); @@ -139,6 +140,10 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) Expr->IVal |= shl_l (~0UL, NewBits); } } + + if ((OldVal != Expr->IVal) && IS_Get (&WarnConstOverflow)) { + Warning ("Implicit conversion of constant overflows %d-bit destination", NewBits); + } } /* Do the integer constant <-> absolute address conversion if necessary */ From 65f773f5ee96d3d872fe6fd06fba079fa6b64c6a Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 01:01:21 -0400 Subject: [PATCH 2050/2710] Explicit z: should suppress "Suspicious address expression" warning #194 --- src/ca65/ea.h | 5 +++++ src/ca65/ea65.c | 2 ++ src/ca65/instr.c | 3 ++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/ca65/ea.h b/src/ca65/ea.h index d861e9a6c..487027c02 100644 --- a/src/ca65/ea.h +++ b/src/ca65/ea.h @@ -43,6 +43,10 @@ /*****************************************************************************/ +/* EffAddr Flags */ +#define EFFADDR_OVERRIDE_ZP 0x00000001UL + + /* GetEA result struct */ typedef struct EffAddr EffAddr; @@ -51,6 +55,7 @@ struct EffAddr { unsigned long AddrModeSet; /* Possible addressing modes */ struct ExprNode* Expr; /* Expression if any (NULL otherwise) */ unsigned Reg; /* Register number in sweet16 mode */ + unsigned long Flags; /* Other properties */ /* The following fields are used inside instr.c */ unsigned AddrMode; /* Actual addressing mode used */ diff --git a/src/ca65/ea65.c b/src/ca65/ea65.c index 275d90b56..5bd2ba82b 100644 --- a/src/ca65/ea65.c +++ b/src/ca65/ea65.c @@ -72,11 +72,13 @@ void GetEA (EffAddr* A) /* Clear the output struct */ A->AddrModeSet = 0; A->Expr = 0; + A->Flags = 0; /* Handle an addressing size override */ switch (CurTok.Tok) { case TOK_OVERRIDE_ZP: Restrictions = AM65_DIR | AM65_DIR_X | AM65_DIR_Y; + A->Flags |= EFFADDR_OVERRIDE_ZP; NextTok (); break; diff --git a/src/ca65/instr.c b/src/ca65/instr.c index 4f95ec75c..89162c3c6 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -1269,7 +1269,8 @@ static int EvalEA (const InsDesc* Ins, EffAddr* A) ExprNode* Left = A->Expr->Left; if ((A->Expr->Op == EXPR_BYTE0 || A->Expr->Op == EXPR_BYTE1) && Left->Op == EXPR_SYMBOL && - GetSymAddrSize (Left->V.Sym) != ADDR_SIZE_ZP) { + GetSymAddrSize (Left->V.Sym) != ADDR_SIZE_ZP && + !(A->Flags & EFFADDR_OVERRIDE_ZP)) { /* Output a warning */ Warning (1, "Suspicious address expression"); From 56c715af40ed1cad1a3b2a29de50e7ceaa9911e4 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 01:14:27 -0400 Subject: [PATCH 2051/2710] Error for struct/union with a duplicate member #2015 --- src/cc65/symtab.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 72a2ac007..d9270f604 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -793,6 +793,8 @@ static int HandleSymRedefinition (SymEntry* Sym, const Type* T, unsigned Flags) */ Error ("Redeclaration of enumerator constant '%s'", Sym->Name); Sym = 0; + } else if (Flags & SC_STRUCTFIELD) { + Error ("Duplicate member '%s'", Sym->Name); } } } From 4d698bf18c89e8426e4ba8a37e4b72d1d51ee7ba Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 03:05:14 -0400 Subject: [PATCH 2052/2710] Don't use a,x,y in macro parameter example, document why not. #392 --- doc/ca65.sgml | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 360b0bab2..2f95a032e 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -4262,8 +4262,13 @@ macro actually takes in the definition. You may also leave intermediate parameters empty. Empty parameters are replaced by empty space (that is, they are removed when the macro is expanded). If you have a look at our macro definition above, you will see, that replacing the "addr" parameter -by nothing will lead to wrong code in most lines. To help you, writing -macros with a variable parameter list, there are some control commands: +by nothing will lead to wrong code in most lines. + +The names "a", "x" and "y" should be avoided for macro parameters, as these +will usually conflict with the 6502 registers. + +For writing macros with a variable parameter list, control commands are +available: <tt><ref id=".IFBLANK" name=".IFBLANK"></tt> tests the rest of the line and returns true, if there are any tokens on the remainder of the line. Since @@ -4274,15 +4279,15 @@ opposite. Look at this example: <tscreen><verb> -.macro ldaxy a, x, y -.ifnblank a - lda #a +.macro ldaxy i, j, k +.ifnblank i + lda #i .endif -.ifnblank x - ldx #x +.ifnblank j + ldx #j .endif -.ifnblank y - ldy #y +.ifnblank k + ldy #k .endif .endmacro </verb></tscreen> From 2b60adfa11ad6b348b70cc224337f1cac6b4c125 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 03:26:10 -0400 Subject: [PATCH 2053/2710] Document directives that use SetBoolOption "can" use +/- rather than "must" #1772 --- doc/ca65.sgml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 360b0bab2..72a133299 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -2283,7 +2283,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH Switch on or off case sensitivity on identifiers. The default is off (that is, identifiers are case sensitive), but may be changed by the -i switch on the command line. - The command must be followed by a '+' or '-' character to switch the + The command can be followed by a '+' or '-' character to switch the option on or off respectively. Example: @@ -2432,7 +2432,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH Switch on or off debug info generation. The default is off (that is, the object file will not contain debug infos), but may be changed by the -g switch on the command line. - The command must be followed by a '+' or '-' character to switch the + The command can be followed by a '+' or '-' character to switch the option on or off respectively. Example: @@ -3380,7 +3380,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH Note: Line continuations do not work in a comment. A backslash at the end of a comment is treated as part of the comment and does not trigger line continuation. - The command must be followed by a '+' or '-' character to switch the + The command can be followed by a '+' or '-' character to switch the option on or off respectively. Example: @@ -3395,7 +3395,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <sect1><tt>.LIST</tt><label id=".LIST"><p> - Enable output to the listing. The command must be followed by a boolean + Enable output to the listing. The command can be followed by a boolean switch ("on", "off", "+" or "-") and will enable or disable listing output. The option has no effect if the listing is not enabled by the command line @@ -4040,7 +4040,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE" <sect1><tt>.SMART</tt><label id=".SMART"><p> - Switch on or off smart mode. The command must be followed by a '+' or '-' + Switch on or off smart mode. The command can be followed by a '+' or '-' character to switch the option on or off respectively. The default is off (that is, the assembler doesn't try to be smart), but this default may be changed by the -s switch on the command line. From 86e3a640d5f785311dea52a266ef16bf290d9e0c Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 05:03:11 -0400 Subject: [PATCH 2054/2710] Support for three line ending types: \r, \r\n, \n. #1894 --- src/ca65/scanner.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c index bf0a85183..d32939646 100644 --- a/src/ca65/scanner.c +++ b/src/ca65/scanner.c @@ -112,6 +112,7 @@ struct CharSource { CharSource* Next; /* Linked list of char sources */ token_t Tok; /* Last token */ int C; /* Last character */ + int SkipN; /* For '\r\n' line endings, skip '\n\ if next */ const CharSourceFunctions* Func; /* Pointer to function table */ union { InputFile File; /* File data */ @@ -325,6 +326,7 @@ static void UseCharSource (CharSource* S) Source = S; /* Read the first character from the new file */ + S->SkipN = 0; S->Func->NextChar (S); /* Setup the next token so it will be skipped on the next call to @@ -386,6 +388,10 @@ static void IFNextChar (CharSource* S) while (1) { int N = fgetc (S->V.File.F); + if (N == '\n' && S->SkipN) + N = fgetc (S->V.File.F); + S->SkipN = 0; + if (N == EOF) { /* End of file. Accept files without a newline at the end */ if (SB_NotEmpty (&S->V.File.Line)) { @@ -401,9 +407,12 @@ static void IFNextChar (CharSource* S) /* Check for end of line */ } else if (N == '\n') { - /* End of line */ break; + } else if (N == '\r') { + /* End of line, skip '\n' if it's the next character */ + S->SkipN = 1; + break; /* Collect other stuff */ } else { From 456fa9f963dcba838a135416a5d52957b54c3ffb Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 05:36:37 -0400 Subject: [PATCH 2055/2710] cc65 document: both pass and return of structs are allowed --- doc/cc65.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 023204f4d..1476b40a3 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -806,8 +806,8 @@ and the one defined by the ISO standard: <item> The datatypes "float" and "double" are not available. <p> -<item> C Functions may return structs (or unions) by value, but only of - 1, 2 or 4 byte sizes. +<item> C Functions may pass and return structs (or unions) by value, but only + of 1, 2 or 4 byte sizes. <p> <item> Most of the C library is available with only the fastcall calling convention (<ref id="extension-fastcall" name="see below">). It means From 6ffc4004d7d7bbae4ba48aba53263545d651d750 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Wed, 3 May 2023 14:24:13 +0200 Subject: [PATCH 2056/2710] Revert "Forbid 3-byte struct pass/return by value, document struct value pass/return" --- doc/cc65.sgml | 7 +- src/cc65/datatype.c | 1 + test/val/struct-by-value.c | 144 ------------------------------------- 3 files changed, 5 insertions(+), 147 deletions(-) delete mode 100644 test/val/struct-by-value.c diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 1476b40a3..683249bda 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -741,7 +741,7 @@ Here is a description of all the command line options: <tag><tt/return-type/</tag> Warn about no return statement in function returning non-void. <tag><tt/struct-param/</tag> - Warn when passing structs by value. (Disabled by default.) + Warn when passing structs by value. <tag><tt/unknown-pragma/</tag> Warn about #pragmas that aren't recognized by cc65. <tag><tt/unreachable-code/</tag> @@ -806,8 +806,9 @@ and the one defined by the ISO standard: <item> The datatypes "float" and "double" are not available. <p> -<item> C Functions may pass and return structs (or unions) by value, but only - of 1, 2 or 4 byte sizes. +<item> C Functions may not return structs (or unions), and structs may not + be passed as parameters by value. However, struct assignment *is* + possible. <p> <item> Most of the C library is available with only the fastcall calling convention (<ref id="extension-fastcall" name="see below">). It means diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index caa41a7a4..6907ee099 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -803,6 +803,7 @@ const Type* GetStructReplacementType (const Type* SType) switch (SizeOf (SType)) { case 1: NewType = type_uchar; break; case 2: NewType = type_uint; break; + case 3: /* FALLTHROUGH */ case 4: NewType = type_ulong; break; default: NewType = SType; break; } diff --git a/test/val/struct-by-value.c b/test/val/struct-by-value.c deleted file mode 100644 index 0e846c117..000000000 --- a/test/val/struct-by-value.c +++ /dev/null @@ -1,144 +0,0 @@ -/* Test of passing and returning structs by value. - Structs of 1, 2 and 4 bytes are supported. - Note that structs of 3 bytes are disabled, see: - https://github.com/cc65/cc65/issues/2022 -*/ - -int fail = 0; - -struct s1 { char a; }; -struct s2 { char a, b; }; -struct s3 { char a, b, c; }; -struct s4 { char a, b, c, d; }; - -const struct s1 c1 = { 1 }; -const struct s2 c2 = { 2, 3 }; -const struct s3 c3 = { 4, 5, 6 }; -const struct s4 c4 = { 7, 8, 9, 10 }; - -struct s1 return1() { return c1; } -struct s2 return2() { return c2; } -/*struct s3 return3() { return c3; }*/ -struct s4 return4() { return c4; } - -int compare1(struct s1 a, struct s1 b) -{ - if (a.a != b.a) return 1; - return 0; -} - -int compare2(struct s2 a, struct s2 b) -{ - if (a.a != b.a) return 1; - if (a.b != b.b) return 1; - return 0; -} - -/*int compare3(struct s3 a, struct s3 b) -{ - if (a.a != b.a) return 1; - if (a.b != b.b) return 1; - if (a.c != b.c) return 1; - return 0; -}*/ - -int compare4(struct s4 a, struct s4 b) -{ - if (a.a != b.a) return 1; - if (a.b != b.b) return 1; - if (a.c != b.c) return 1; - if (a.d != b.d) return 1; - return 0; -} - -int pass1(struct s1 p1) -{ - struct s1 a1; - a1 = p1; - if (a1.a != c1.a) return 1; - return 0; -} - -int pass2(struct s2 p2) -{ - struct s2 a2; - a2 = p2; - if (a2.a != c2.a) return 1; - if (a2.b != c2.b) return 1; - return 0; -} - -/*int pass3(struct s3 p3) -{ - struct s3 a3; - a3 = p3; - if (a3.a != c3.a) return 1; - if (a3.b != c3.b) return 1; - if (a3.c != c3.c) return 1; - return 0; -}*/ - -int pass4(struct s4 p4) -{ - struct s4 a4; - a4 = p4; - if (a4.a != c4.a) return 1; - if (a4.b != c4.b) return 1; - if (a4.c != c4.c) return 1; - if (a4.d != c4.d) return 1; - return 0; -} - -void reset(char* gg) -{ - char i; - for (i=0;i<5;++i) gg[i] = 128+i; -} - -int test(char* gg, char start) -{ - char i; - for (i=start;i<5;++i) - if (gg[i] != 128+i) return 1; - return 0; -} - -int main() -{ - /* Used to check #2022 bug condition of extra bytes being overwritten. */ - union - { - char gg[5]; - struct s1 g1; - struct s2 g2; - struct s3 g3; - struct s4 g4; - } guard; - - reset(guard.gg); - guard.g1 = return1(); - fail += compare1(guard.g1,c1); - fail += test(guard.gg,1); - - reset(guard.gg); - guard.g2 = return2(); - fail += compare2(guard.g2,c2); - fail += test(guard.gg,2); - - /*reset(guard.gg); - guard.g3 = return3(); - fail += compare3(guard.g3,c3); - fail += test(guard.gg,3);*/ - - reset(guard.gg); - guard.g4 = return4(); - fail += compare4(guard.g4,c4); - fail += test(guard.gg,4); - - fail += pass1(c1); - fail += pass2(c2); - /*fail += pass3(c3);*/ - fail += pass4(c4); - - return fail; -} From 387d455cb45d7fc7249ffe1e1d927fb0300e897d Mon Sep 17 00:00:00 2001 From: Jeff Tranter <tranter@pobox.com> Date: Wed, 3 May 2023 11:16:22 -0400 Subject: [PATCH 2057/2710] Revised patch. Uses code in source listing. Tested on a real OSI C1P machine. --- libsrc/osic1p/bootstrap.s | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/libsrc/osic1p/bootstrap.s b/libsrc/osic1p/bootstrap.s index 52ce31f84..0d8a74eb7 100644 --- a/libsrc/osic1p/bootstrap.s +++ b/libsrc/osic1p/bootstrap.s @@ -35,7 +35,6 @@ ram_top := __MAIN_START__ + __MAIN_SIZE__ .ifdef ASM .include "screen-c1p-24x24.s" - .macpack generic load := $08 ; private variables count := $0A @@ -51,16 +50,14 @@ LINEDIST = $20 ; Offset in video RAM between two lines sta load stx load+1 - lda #<load_size - eor #$FF - sta count - lda #>load_size - eor #$FF - sta count+1 + ldx #(<load_size) + 1 + stx count + ldx #(>load_size) + 1 + stx count+1 ; save size with each byte incremented separately -L1: inc count +L1: dec count bne L2 - inc count+1 + dec count+1 beq L3 L2: jsr GETCHAR ; (doesn't change .Y) sta (load),y @@ -114,18 +111,15 @@ CR = $0D hex2 >load_addr .byte CR, "85", CR, "08", CR .byte "86", CR, "09", CR - .byte "A9", CR - hex2 <load_size - .byte CR, "49", CR, "FF", CR - .byte "85", CR, "0A", CR - .byte "A9", CR - hex2 >load_size - .byte CR, "49", CR, "FF", CR - .byte "85", CR, "0B", CR - - .byte "E6", CR, "0A", CR + .byte "A2", CR + hex2 (<load_size) + 1 + .byte CR, "86", CR, "0A", CR + .byte "A2", CR + hex2 (>load_size) + 1 + .byte CR, "86", CR, "0B", CR + .byte "C6", CR, "0A", CR .byte "D0", CR, "04", CR - .byte "E6", CR, "0B", CR + .byte "C6", CR, "0B", CR .byte "F0", CR, "16", CR .byte "20", CR, "BF", CR, "FF", CR .byte "91", CR, "08", CR From 016008b6df5a1a0283a29ba1e18255e39a229dd5 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 11:57:50 -0400 Subject: [PATCH 2058/2710] ca65: Suppress '.size' error for multiply-defined symbols --- src/ca65/main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ca65/main.c b/src/ca65/main.c index 7183ff046..d45201cad 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -858,7 +858,11 @@ static void OneLine (void) /* The line has switched the segment */ Size = 0; } - DefSizeOfSymbol (Sym, Size); + /* Suppress .size Symbol if this Symbol already has a multiply-defined error, + ** as it will only create its own additional unnecessary error. + */ + if ((Sym->Flags & SF_MULTDEF) == 0) + DefSizeOfSymbol (Sym, Size); } /* Line separator must come here */ From 4e6b94de5cf3e073897c610e09c372d9ac36e57c Mon Sep 17 00:00:00 2001 From: Brad Smith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 12:19:05 -0400 Subject: [PATCH 2059/2710] braces --- src/ca65/scanner.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c index d32939646..add365e84 100644 --- a/src/ca65/scanner.c +++ b/src/ca65/scanner.c @@ -388,8 +388,9 @@ static void IFNextChar (CharSource* S) while (1) { int N = fgetc (S->V.File.F); - if (N == '\n' && S->SkipN) + if (N == '\n' && S->SkipN) { N = fgetc (S->V.File.F); + } S->SkipN = 0; if (N == EOF) { From 1f18ab218ed96d9d7eaf3aecb97d1a7764bb15fd Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 13:35:51 -0400 Subject: [PATCH 2060/2710] Improve struct size error message to include the detected size --- src/cc65/function.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/function.c b/src/cc65/function.c index 39f04843f..38a8f45aa 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -601,7 +601,7 @@ void NewFunc (SymEntry* Func, FuncDesc* D) ** We don't currently support this case. */ if (RType == Param->Type) { - Error ("Passing '%s' of this size by value is not supported", GetFullTypeName (Param->Type)); + Error ("Passing '%s' of this size (%d) by value is not supported", GetFullTypeName (Param->Type), SizeOf (RType)); } } From ae7a1416fe53de39b991c26a8dc2050a6e98fbe4 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Wed, 3 May 2023 20:02:12 +0200 Subject: [PATCH 2061/2710] Revert "Revert "Forbid 3-byte struct pass/return by value, document struct value pass/return"" --- doc/cc65.sgml | 7 +- src/cc65/datatype.c | 1 - test/val/struct-by-value.c | 144 +++++++++++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+), 5 deletions(-) create mode 100644 test/val/struct-by-value.c diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 683249bda..1476b40a3 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -741,7 +741,7 @@ Here is a description of all the command line options: <tag><tt/return-type/</tag> Warn about no return statement in function returning non-void. <tag><tt/struct-param/</tag> - Warn when passing structs by value. + Warn when passing structs by value. (Disabled by default.) <tag><tt/unknown-pragma/</tag> Warn about #pragmas that aren't recognized by cc65. <tag><tt/unreachable-code/</tag> @@ -806,9 +806,8 @@ and the one defined by the ISO standard: <item> The datatypes "float" and "double" are not available. <p> -<item> C Functions may not return structs (or unions), and structs may not - be passed as parameters by value. However, struct assignment *is* - possible. +<item> C Functions may pass and return structs (or unions) by value, but only + of 1, 2 or 4 byte sizes. <p> <item> Most of the C library is available with only the fastcall calling convention (<ref id="extension-fastcall" name="see below">). It means diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 6907ee099..caa41a7a4 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -803,7 +803,6 @@ const Type* GetStructReplacementType (const Type* SType) switch (SizeOf (SType)) { case 1: NewType = type_uchar; break; case 2: NewType = type_uint; break; - case 3: /* FALLTHROUGH */ case 4: NewType = type_ulong; break; default: NewType = SType; break; } diff --git a/test/val/struct-by-value.c b/test/val/struct-by-value.c new file mode 100644 index 000000000..0e846c117 --- /dev/null +++ b/test/val/struct-by-value.c @@ -0,0 +1,144 @@ +/* Test of passing and returning structs by value. + Structs of 1, 2 and 4 bytes are supported. + Note that structs of 3 bytes are disabled, see: + https://github.com/cc65/cc65/issues/2022 +*/ + +int fail = 0; + +struct s1 { char a; }; +struct s2 { char a, b; }; +struct s3 { char a, b, c; }; +struct s4 { char a, b, c, d; }; + +const struct s1 c1 = { 1 }; +const struct s2 c2 = { 2, 3 }; +const struct s3 c3 = { 4, 5, 6 }; +const struct s4 c4 = { 7, 8, 9, 10 }; + +struct s1 return1() { return c1; } +struct s2 return2() { return c2; } +/*struct s3 return3() { return c3; }*/ +struct s4 return4() { return c4; } + +int compare1(struct s1 a, struct s1 b) +{ + if (a.a != b.a) return 1; + return 0; +} + +int compare2(struct s2 a, struct s2 b) +{ + if (a.a != b.a) return 1; + if (a.b != b.b) return 1; + return 0; +} + +/*int compare3(struct s3 a, struct s3 b) +{ + if (a.a != b.a) return 1; + if (a.b != b.b) return 1; + if (a.c != b.c) return 1; + return 0; +}*/ + +int compare4(struct s4 a, struct s4 b) +{ + if (a.a != b.a) return 1; + if (a.b != b.b) return 1; + if (a.c != b.c) return 1; + if (a.d != b.d) return 1; + return 0; +} + +int pass1(struct s1 p1) +{ + struct s1 a1; + a1 = p1; + if (a1.a != c1.a) return 1; + return 0; +} + +int pass2(struct s2 p2) +{ + struct s2 a2; + a2 = p2; + if (a2.a != c2.a) return 1; + if (a2.b != c2.b) return 1; + return 0; +} + +/*int pass3(struct s3 p3) +{ + struct s3 a3; + a3 = p3; + if (a3.a != c3.a) return 1; + if (a3.b != c3.b) return 1; + if (a3.c != c3.c) return 1; + return 0; +}*/ + +int pass4(struct s4 p4) +{ + struct s4 a4; + a4 = p4; + if (a4.a != c4.a) return 1; + if (a4.b != c4.b) return 1; + if (a4.c != c4.c) return 1; + if (a4.d != c4.d) return 1; + return 0; +} + +void reset(char* gg) +{ + char i; + for (i=0;i<5;++i) gg[i] = 128+i; +} + +int test(char* gg, char start) +{ + char i; + for (i=start;i<5;++i) + if (gg[i] != 128+i) return 1; + return 0; +} + +int main() +{ + /* Used to check #2022 bug condition of extra bytes being overwritten. */ + union + { + char gg[5]; + struct s1 g1; + struct s2 g2; + struct s3 g3; + struct s4 g4; + } guard; + + reset(guard.gg); + guard.g1 = return1(); + fail += compare1(guard.g1,c1); + fail += test(guard.gg,1); + + reset(guard.gg); + guard.g2 = return2(); + fail += compare2(guard.g2,c2); + fail += test(guard.gg,2); + + /*reset(guard.gg); + guard.g3 = return3(); + fail += compare3(guard.g3,c3); + fail += test(guard.gg,3);*/ + + reset(guard.gg); + guard.g4 = return4(); + fail += compare4(guard.g4,c4); + fail += test(guard.gg,4); + + fail += pass1(c1); + fail += pass2(c2); + /*fail += pass3(c3);*/ + fail += pass4(c4); + + return fail; +} From 440c91fad96e6b94cdec1e4cf249dc0ca0d28fe6 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 14:11:30 -0400 Subject: [PATCH 2062/2710] braces for 1-line if --- src/ca65/main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ca65/main.c b/src/ca65/main.c index d45201cad..fedbb0d4b 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -861,8 +861,9 @@ static void OneLine (void) /* Suppress .size Symbol if this Symbol already has a multiply-defined error, ** as it will only create its own additional unnecessary error. */ - if ((Sym->Flags & SF_MULTDEF) == 0) + if ((Sym->Flags & SF_MULTDEF) == 0) { DefSizeOfSymbol (Sym, Size); + } } /* Line separator must come here */ From 9a502c69dc9d3c4c29791b75d9f03796487e3cc7 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 16:46:59 -0400 Subject: [PATCH 2063/2710] fix tab, braces for 1-line if, Expr->Ival is signed --- src/cc65/error.c | 2 +- src/cc65/scanner.c | 9 ++++++--- src/cc65/typeconv.c | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/cc65/error.c b/src/cc65/error.c index 6ac3e594b..39b067825 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -103,7 +103,7 @@ static WarnMapEntry WarnMap[] = { { &WarnUnusedLabel, "unused-label" }, { &WarnUnusedParam, "unused-param" }, { &WarnUnusedVar, "unused-var" }, - { &WarnConstOverflow, "const-overflow" }, + { &WarnConstOverflow, "const-overflow" }, }; Collection DiagnosticStrBufs; diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 055c02450..ec49d0e3c 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -584,17 +584,20 @@ static void NumericConst (void) SB_Clear (&Src); break; } - if ((((unsigned long)(IVal * Base)) / Base) != IVal) + if ((((unsigned long)(IVal * Base)) / Base) != IVal) { Overflow = 1; + } IVal = IVal * Base; - if (((unsigned long)(IVal + DigitVal)) < IVal) + if (((unsigned long)(IVal + DigitVal)) < IVal) { Overflow = 1; + } IVal += DigitVal; SB_Skip (&Src); } - if (Overflow) + if (Overflow) { Error ("Numerical constant \"%s\" too large for internal 32-bit representation", SB_GetConstBuf (&Src)); + } /* Distinguish between integer and floating point constants */ if (!IsFloat) { diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 49dfcc597..e1d95ff63 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -128,7 +128,7 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) ** internally already represented by a long. */ if (NewBits <= OldBits) { - unsigned long OldVal = Expr->IVal; + long OldVal = Expr->IVal; /* Cut the value to the new size */ Expr->IVal &= (0xFFFFFFFFUL >> (32 - NewBits)); From a109f475ed362729c6c5aa109cac6ba759e12330 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 2 May 2023 23:49:40 -0400 Subject: [PATCH 2064/2710] Fix broken/incomplete floating point parsing - Fractional digit scale was broken - Base was partially ignored - Exponent sign was ignored - Exponent for hex float is 2 not 10 --- src/cc65/scanner.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 36fd1301b..634ec39bb 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -687,20 +687,21 @@ static void NumericConst (void) /* Check for a fractional part and read it */ if (SB_Peek (&Src) == '.') { - Double Scale; + Double Scale, ScaleDigit; /* Skip the dot */ SB_Skip (&Src); /* Read fractional digits */ - Scale = FP_D_Make (1.0); + ScaleDigit = FP_D_Div (FP_D_Make (1.0), FP_D_FromInt (Base)); + Scale = ScaleDigit; while (IsXDigit (SB_Peek (&Src)) && (DigitVal = HexVal (SB_Peek (&Src))) < Base) { /* Get the value of this digit */ - Double FracVal = FP_D_Div (FP_D_FromInt (DigitVal * Base), Scale); + Double FracVal = FP_D_Mul (FP_D_FromInt (DigitVal), Scale); /* Add it to the float value */ FVal = FP_D_Add (FVal, FracVal); - /* Scale base */ - Scale = FP_D_Mul (Scale, FP_D_FromInt (DigitVal)); + /* Adjust Scale for next digit */ + Scale = FP_D_Mul (Scale, ScaleDigit); /* Skip the digit */ SB_Skip (&Src); } @@ -712,12 +713,15 @@ static void NumericConst (void) unsigned Digits; unsigned Exp; + int Sign; /* Skip the exponent notifier */ SB_Skip (&Src); /* Read an optional sign */ + Sign = 0; if (SB_Peek (&Src) == '-') { + Sign = 1; SB_Skip (&Src); } else if (SB_Peek (&Src) == '+') { SB_Skip (&Src); @@ -747,9 +751,11 @@ static void NumericConst (void) Warning ("Floating constant exponent is too large"); } - /* Scale the exponent and adjust the value accordingly */ + /* Scale the exponent and adjust the value accordingly. + ** Decimal exponents are base 10, hexadecimal exponents are base 2 (C99). + */ if (Exp) { - FVal = FP_D_Mul (FVal, FP_D_Make (pow (10, Exp))); + FVal = FP_D_Mul (FVal, FP_D_Make (pow ((Base == 16) ? 2.0 : 10.0, (Sign ? -1.0 : 1.0) * Exp))); } } From a686d1fa8e4a69cca3761411201874dce3a3059c Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 2 May 2023 23:50:01 -0400 Subject: [PATCH 2065/2710] Allow unary +/- for floating point constants --- src/cc65/expr.c | 51 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 691010b0a..42b9cda53 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1901,31 +1901,46 @@ static void UnaryOp (ExprDesc* Expr) /* Get the expression */ hie10 (Expr); - /* We can only handle integer types */ - if (!IsClassInt (Expr->Type)) { - Error ("Argument must have integer type"); - ED_MakeConstAbsInt (Expr, 1); - } - /* Check for a constant numeric expression */ if (ED_IsConstAbs (Expr)) { - /* Value is numeric */ - switch (Tok) { - case TOK_MINUS: Expr->IVal = -Expr->IVal; break; - case TOK_PLUS: break; - case TOK_COMP: Expr->IVal = ~Expr->IVal; break; - default: Internal ("Unexpected token: %d", Tok); + + if (IsClassFloat (Expr->Type)) { + switch (Tok) { + case TOK_MINUS: Expr->V.FVal = FP_D_Sub(FP_D_Make(0.0),Expr->V.FVal); break; + case TOK_PLUS: break; + case TOK_COMP: Error ("Unary ~ operator not valid for floating point constant"); break; + default: Internal ("Unexpected token: %d", Tok); + } + } else { + if (!IsClassInt (Expr->Type)) { + Error ("Constant argument must have integer or float type"); + ED_MakeConstAbsInt (Expr, 1); + } + + /* Value is numeric */ + switch (Tok) { + case TOK_MINUS: Expr->IVal = -Expr->IVal; break; + case TOK_PLUS: break; + case TOK_COMP: Expr->IVal = ~Expr->IVal; break; + default: Internal ("Unexpected token: %d", Tok); + } + + /* Adjust the type of the expression */ + Expr->Type = IntPromotion (Expr->Type); + + /* Limit the calculated value to the range of its type */ + LimitExprValue (Expr, 1); } - /* Adjust the type of the expression */ - Expr->Type = IntPromotion (Expr->Type); - - /* Limit the calculated value to the range of its type */ - LimitExprValue (Expr, 1); - } else { unsigned Flags; + /* If not constant, we can only handle integer types */ + if (!IsClassInt (Expr->Type)) { + Error ("Non-constant argument must have integer type"); + ED_MakeConstAbsInt (Expr, 1); + } + /* Value is not constant */ LoadExpr (CF_NONE, Expr); From 52f0e6a29cb946da2fca88740012981de3814f51 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 2 May 2023 23:57:32 -0400 Subject: [PATCH 2066/2710] Allow floating point constants to be converted to integer (warning if loss of precision) --- src/cc65/typeconv.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index f77ec3951..004072c03 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -123,6 +123,16 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) ** to handle sign extension correctly. */ + /* If this is a floating point constant, convert to integer, + ** and warn if precision is discarded. + */ + if (IsClassFloat (OldType) && IsClassInt (NewType)) { + long IVal = (long)Expr->V.FVal.V; + if (Expr->V.FVal.V != FP_D_FromInt(IVal).V) + Warning ("Floating point constant (%f) converted to integer loses precision (%d)",Expr->V.FVal.V,IVal); + Expr->IVal = IVal; + } + /* Check if the new datatype will have a smaller range. If it ** has a larger range, things are OK, since the value is ** internally already represented by a long. From 7ff74b2c472d5feff62e228a8eebb22d6ccdbc2b Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 00:06:09 -0400 Subject: [PATCH 2067/2710] Give a better error for unsupported floating point arithmetic, instead of internal "Precondition violated" error. --- src/cc65/datatype.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 6907ee099..103a3a634 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -670,6 +670,10 @@ const Type* ArithmeticConvert (const Type* lhst, const Type* rhst) ** floating point types are not (yet) supported. ** The integral promotions are performed on both operands. */ + if (IsClassFloat(lhst) || IsClassFloat(rhst)) { + Error ("Floating point arithmetic not supported."); + return type_long; + } lhst = IntPromotion (lhst); rhst = IntPromotion (rhst); From e3887d7ead27ac092045b0e54e639b288513b163 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 00:12:36 -0400 Subject: [PATCH 2068/2710] Test to demonstrate availability of floating point constants, document the possibility. --- doc/cc65.sgml | 3 +++ test/val/float-const-convert.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 test/val/float-const-convert.c diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 683249bda..af85a057f 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -805,6 +805,9 @@ and the one defined by the ISO standard: <itemize> <item> The datatypes "float" and "double" are not available. + Floating point constants may be used, though they will have to be + converted and stored into integer values. + Floating point arithmetic expressions are not supported. <p> <item> C Functions may not return structs (or unions), and structs may not be passed as parameters by value. However, struct assignment *is* diff --git a/test/val/float-const-convert.c b/test/val/float-const-convert.c new file mode 100644 index 000000000..729595e0f --- /dev/null +++ b/test/val/float-const-convert.c @@ -0,0 +1,14 @@ +/* Demonstrates that floating point constants are allowed in a limited way. + Value will be converted to an int, with a warning if precision is lost. */ + +int a = 3.0; +int b = 23.1; +int c = -5.0; + +int main(void) +{ + if (a != 3) return 1; + if (b != 23) return 2; + if (c != -5) return 3; + return 0; +} From 2ac9c6f51efd8a6a89e147d2f4a3de13696cbfcd Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 01:44:49 -0400 Subject: [PATCH 2069/2710] Suppress the floating point precision warning if an explicit cast is used --- src/cc65/typeconv.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 004072c03..4e2249836 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -55,7 +55,7 @@ -static void DoConversion (ExprDesc* Expr, const Type* NewType) +static void DoConversion (ExprDesc* Expr, const Type* NewType, int Explicit) /* Emit code to convert the given expression to a new type. */ { const Type* OldType; @@ -128,8 +128,9 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) */ if (IsClassFloat (OldType) && IsClassInt (NewType)) { long IVal = (long)Expr->V.FVal.V; - if (Expr->V.FVal.V != FP_D_FromInt(IVal).V) + if ((Expr->V.FVal.V != FP_D_FromInt(IVal).V) && !Explicit) { Warning ("Floating point constant (%f) converted to integer loses precision (%d)",Expr->V.FVal.V,IVal); + } Expr->IVal = IVal; } @@ -293,7 +294,7 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) /* Both types must be complete */ if (!IsIncompleteESUType (NewType) && !IsIncompleteESUType (Expr->Type)) { /* Do the actual conversion */ - DoConversion (Expr, NewType); + DoConversion (Expr, NewType, 0); } else { /* We should have already generated error elsewhere so that we ** could just silently fail here to avoid excess errors, but to @@ -340,7 +341,7 @@ void TypeCast (ExprDesc* Expr) ReplaceType (Expr, NewType); } else if (IsCastType (Expr->Type)) { /* Convert the value. The result has always the new type */ - DoConversion (Expr, NewType); + DoConversion (Expr, NewType, 1); } else { TypeCompatibilityDiagnostic (NewType, Expr->Type, 1, "Cast to incompatible type '%s' from '%s'"); From dbdadaa3f3c647476723b5ed2bb80806e5543457 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 16:59:48 -0400 Subject: [PATCH 2070/2710] accidental tabs, printf long expectts explicit %ld --- src/cc65/datatype.c | 4 ++-- src/cc65/typeconv.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 103a3a634..9334db40b 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -671,8 +671,8 @@ const Type* ArithmeticConvert (const Type* lhst, const Type* rhst) ** The integral promotions are performed on both operands. */ if (IsClassFloat(lhst) || IsClassFloat(rhst)) { - Error ("Floating point arithmetic not supported."); - return type_long; + Error ("Floating point arithmetic not supported."); + return type_long; } lhst = IntPromotion (lhst); rhst = IntPromotion (rhst); diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 4e2249836..1003b3c90 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -129,7 +129,7 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType, int Explicit) if (IsClassFloat (OldType) && IsClassInt (NewType)) { long IVal = (long)Expr->V.FVal.V; if ((Expr->V.FVal.V != FP_D_FromInt(IVal).V) && !Explicit) { - Warning ("Floating point constant (%f) converted to integer loses precision (%d)",Expr->V.FVal.V,IVal); + Warning ("Floating point constant (%f) converted to integer loses precision (%ld)",Expr->V.FVal.V,IVal); } Expr->IVal = IVal; } From 49bd5681136fc4afff5f46f796eeb777c0e691d1 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 17:55:02 -0400 Subject: [PATCH 2071/2710] error test for integer constant too large for internal representation --- test/err/huge-integer-constant.c | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 test/err/huge-integer-constant.c diff --git a/test/err/huge-integer-constant.c b/test/err/huge-integer-constant.c new file mode 100644 index 000000000..1f423347c --- /dev/null +++ b/test/err/huge-integer-constant.c @@ -0,0 +1,7 @@ +/* too big for internal integer representation */ +unsigned long huge = 4294967296; + +int main(void) +{ + return 0; +} From e3cb8dfb9be6e4f9244fdecba6610f6a72116763 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 19:27:37 -0400 Subject: [PATCH 2072/2710] Numerical constant scanner requires explicitly 32-bit sized type for cross-platform consistency --- src/cc65/scanner.c | 16 +++++++++++----- test/val/common.h | 1 + test/val/cq241.c | 19 +++++++++++++++++-- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index ec49d0e3c..f747fb458 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -39,6 +39,7 @@ #include <errno.h> #include <ctype.h> #include <math.h> +#include <inttypes.h> /* common */ #include "chartype.h" @@ -151,6 +152,11 @@ static const struct Keyword { #define IT_ULONG 0x08 +/* Internal type for numeric constant scanning. +** Size must be explicit for cross-platform uniformity. +*/ +typedef uint32_t scan_t; + /*****************************************************************************/ /* code */ @@ -521,7 +527,7 @@ static void NumericConst (void) int IsFloat; char C; unsigned DigitVal; - unsigned long IVal; /* Value */ + scan_t IVal; /* Scanned value. */ int Overflow; /* Get the pp-number first, then parse on it */ @@ -584,19 +590,19 @@ static void NumericConst (void) SB_Clear (&Src); break; } - if ((((unsigned long)(IVal * Base)) / Base) != IVal) { + if (((scan_t)(IVal * Base) / Base) != IVal) { Overflow = 1; } IVal = IVal * Base; - if (((unsigned long)(IVal + DigitVal)) < IVal) { + if (((scan_t)(IVal + DigitVal)) < IVal) { Overflow = 1; } IVal += DigitVal; SB_Skip (&Src); } if (Overflow) { - Error ("Numerical constant \"%s\" too large for internal 32-bit representation", - SB_GetConstBuf (&Src)); + Error ("Numerical constant \"%s\" too large for internal %d-bit representation", + SB_GetConstBuf (&Src), (int)(sizeof(IVal)*8)); } /* Distinguish between integer and floating point constants */ diff --git a/test/val/common.h b/test/val/common.h index dada61a14..61da6c325 100644 --- a/test/val/common.h +++ b/test/val/common.h @@ -20,3 +20,4 @@ #define SIZEOF_LONG_32BIT #define UNSIGNED_CHARS #define UNSIGNED_BITFIELDS +#define INTEGER_CONSTANT_MAX_32BIT diff --git a/test/val/cq241.c b/test/val/cq241.c index 611b5a376..a6d6c5324 100644 --- a/test/val/cq241.c +++ b/test/val/cq241.c @@ -4,6 +4,14 @@ !!LICENCE!! own, freely distributeable for non-profit. read CPYRIGHT.LCC */ +/* INTEGER_CONSTANT_MAX_32BIT +** This suppresses constants longer than 32-bit, which are now an error: +** https://github.com/cc65/cc65/pull/2084 +** Because cc65's internal representation is implicitly/explicitly +** 32-bit in many places, values larger than this aren't representable, +** but also can't be checked for overflow once accepted. +*/ + #include "common.h" struct defs { @@ -62,7 +70,12 @@ long pow2(long n) { return s; } - long d[39], o[39], x[39]; +#ifndef INTEGER_CONSTANT_MAX_32BIT +#define CTCOUNT 39 +#else +#define CTCOUNT 36 +#endif + long d[CTCOUNT], o[CTCOUNT], x[CTCOUNT]; #ifndef NO_OLD_FUNC_DECL s241(pd0) @@ -212,13 +225,15 @@ int s241(struct defs *pd0) { d[33] = 1073741823; o[33] = 07777777777; x[33] = 0x3fffffff; d[34] = 1073741824; o[34] = 010000000000; x[34] = 0x40000000; d[35] = 4294967295; o[35] = 037777777777; x[35] = 0xffffffff; +#if CTCOUNT > 36 d[36] = 4294967296; o[36] = 040000000000; x[36] = 0x100000000; d[37] = 68719476735; o[37] = 0777777777777; x[37] = 0xfffffffff; d[38] = 68719476736; o[38] = 01000000000000; x[38] = 0x1000000000; +#endif /* WHEW! */ - for (j=0; j<39; j++){ + for (j=0; j<CTCOUNT; j++){ if ( g[j] != d[j] || d[j] != o[j] || o[j] != x[j]) { From 8e75e5b51a03d1df40e0f052d838dade6a0a6200 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 19:42:05 -0400 Subject: [PATCH 2073/2710] Suppress overflow warning when conversion is an explicit cast --- src/cc65/typeconv.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index e1d95ff63..6bdb45b5f 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -55,7 +55,7 @@ -static void DoConversion (ExprDesc* Expr, const Type* NewType) +static void DoConversion (ExprDesc* Expr, const Type* NewType, int Explicit) /* Emit code to convert the given expression to a new type. */ { const Type* OldType; @@ -141,7 +141,7 @@ static void DoConversion (ExprDesc* Expr, const Type* NewType) } } - if ((OldVal != Expr->IVal) && IS_Get (&WarnConstOverflow)) { + if ((OldVal != Expr->IVal) && IS_Get (&WarnConstOverflow) && !Explicit) { Warning ("Implicit conversion of constant overflows %d-bit destination", NewBits); } } @@ -288,7 +288,7 @@ void TypeConversion (ExprDesc* Expr, const Type* NewType) /* Both types must be complete */ if (!IsIncompleteESUType (NewType) && !IsIncompleteESUType (Expr->Type)) { /* Do the actual conversion */ - DoConversion (Expr, NewType); + DoConversion (Expr, NewType, 0); } else { /* We should have already generated error elsewhere so that we ** could just silently fail here to avoid excess errors, but to @@ -335,7 +335,7 @@ void TypeCast (ExprDesc* Expr) ReplaceType (Expr, NewType); } else if (IsCastType (Expr->Type)) { /* Convert the value. The result has always the new type */ - DoConversion (Expr, NewType); + DoConversion (Expr, NewType, 1); } else { TypeCompatibilityDiagnostic (NewType, Expr->Type, 1, "Cast to incompatible type '%s' from '%s'"); From b5f255f9123dc898e494321406edd434b89a6d49 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 19:54:40 -0400 Subject: [PATCH 2074/2710] Test case for const-overflow warnings --- test/err/integer-const-overflow.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 test/err/integer-const-overflow.c diff --git a/test/err/integer-const-overflow.c b/test/err/integer-const-overflow.c new file mode 100644 index 000000000..37cc0f01e --- /dev/null +++ b/test/err/integer-const-overflow.c @@ -0,0 +1,20 @@ +/* Integer constant overflow warnings. */ + +/* Warnings as errors. */ +#pragma warn(error,on) + +/* Warn on const overflow */ +#pragma warn(const-overflow,on) + +unsigned char a = 256; +signed char b = 128; +unsigned char c = -129; +unsigned short int d = 0x00010000; +unsigned short int e = 0x80000000; +signed short int f = 32768L; +signed short int g = -32769L; + +int main(void) +{ + return 0; +} From 84eafb7f9c255d6a82a8062a6d8a8f3c0eb60a72 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Wed, 3 May 2023 21:09:03 -0400 Subject: [PATCH 2075/2710] err test for struct with duplicate member --- test/err/struct-duplicate-member.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 test/err/struct-duplicate-member.c diff --git a/test/err/struct-duplicate-member.c b/test/err/struct-duplicate-member.c new file mode 100644 index 000000000..30cd06207 --- /dev/null +++ b/test/err/struct-duplicate-member.c @@ -0,0 +1,17 @@ +/* Ensure that a duplicate member in a struct produces an error. +** https://github.com/cc65/cc65/issues/2015 +*/ + +struct bads { + int a; + int a; /* this is an error */ +}; + +union badu { + int a, a; /* also an error */ +}; + +int main(void) +{ + return 0; +} From 13f317e660b543ec6037e69c17f3226dbee3d171 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 09:18:33 +0200 Subject: [PATCH 2076/2710] Update Contributing.md --- Contributing.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Contributing.md b/Contributing.md index eb26e920b..3b355373c 100644 --- a/Contributing.md +++ b/Contributing.md @@ -74,10 +74,12 @@ color := $0787 The following is still very incomplete - if in doubt please look at existing sourcefiles and adapt to the existing style -* Your files should obey the C89 standard. +* Your files should generally obey the C89 standard, with a few C99 things (this is a bit similar to what cc65 itself supports). The exceptions are: + * use stdint.h for variables that require a certain bit size + * In printf-style functions use the PRIX64 (and similar) macros to deal with 64bit values (from inttypes.h) +This list is not necessarily complete - if in doubt, please ask. * We generally have a "no warnings" policy -* Warnings must not be hidden by using typecasts - fix the code instead - * In printf-style functions use the PRIX64 (and similar) macros to deal with 64bit values + * Warnings must not be hidden by using typecasts - fix the code instead * The normal indentation width should be four spaces. * You must use ANSI C comments (```/* */```); you must not use C++ comments (```//```). * When you add functions to an existing file, you should separate them by the same number of blank lines that separate the functions that already are in that file. From ca8201a314bc0b6539a49518c334cc297e651764 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Thu, 4 May 2023 05:44:20 -0400 Subject: [PATCH 2077/2710] Overflow test optimization suggested by kugelfuhr User CHAR_BIT instead of 8 --- src/cc65/scanner.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index f747fb458..54ce02158 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -590,19 +590,15 @@ static void NumericConst (void) SB_Clear (&Src); break; } - if (((scan_t)(IVal * Base) / Base) != IVal) { + if (((scan_t)(IVal * Base + DigitVal) / Base) != IVal) { Overflow = 1; } - IVal = IVal * Base; - if (((scan_t)(IVal + DigitVal)) < IVal) { - Overflow = 1; - } - IVal += DigitVal; + IVal = IVal * Base + DigitVal; SB_Skip (&Src); } if (Overflow) { Error ("Numerical constant \"%s\" too large for internal %d-bit representation", - SB_GetConstBuf (&Src), (int)(sizeof(IVal)*8)); + SB_GetConstBuf (&Src), (int)(sizeof(IVal)*CHAR_BIT)); } /* Distinguish between integer and floating point constants */ From 69f4cd184779925ca399823acc56e50dcff1dc29 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Thu, 4 May 2023 05:48:48 -0400 Subject: [PATCH 2078/2710] limits.h was apparently already included somewhere on windows but not linux --- src/cc65/scanner.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 54ce02158..ede77cb2c 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -40,6 +40,7 @@ #include <ctype.h> #include <math.h> #include <inttypes.h> +#include <limits.h> /* common */ #include "chartype.h" @@ -590,6 +591,7 @@ static void NumericConst (void) SB_Clear (&Src); break; } + /* Test result of adding digit for overflow. */ if (((scan_t)(IVal * Base + DigitVal) / Base) != IVal) { Overflow = 1; } From 0957c36115126f067d42ed5a74210993a6e1e710 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 14:19:27 +0200 Subject: [PATCH 2079/2710] try verbose dry run to see what it does :) --- .github/workflows/snapshot-on-push-master.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index e8be4400e..38158b384 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -111,7 +111,7 @@ jobs: git config push.default simple git add -A git commit -m "Updated from cc65 commit ${GITHUB_SHA}." - #git push -v + git push -n -v # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From 45258d060dc614a2ed07a08711bb4341d19cdb19 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 14:47:02 +0200 Subject: [PATCH 2080/2710] lets see if this works --- .github/workflows/snapshot-on-push-master.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 38158b384..dc7e6007e 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -7,6 +7,10 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +# suggested at https://jonathansoma.com/everything/git/github-actions-403-error/ +permissions: + contents: write + jobs: build_windows: name: Build (Windows) From 7c5595efbc008aa32645cdb12ad52b186e6e0c67 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 15:02:32 +0200 Subject: [PATCH 2081/2710] another try --- .github/workflows/snapshot-on-push-master.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index dc7e6007e..759446dc2 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -39,6 +39,8 @@ jobs: runs-on: ubuntu-latest steps: +# inspired by https://github.com/JuliaRegistries/TagBot/blob/master/example.yml + token: ${{ secrets.GITHUB_TOKEN }} - name: Install Dependencies shell: bash run: | From c0dd3b9d9ac9f5e19c6341ae23e75278b0cecf82 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 15:10:10 +0200 Subject: [PATCH 2082/2710] like this? awesome how everyone does something different :) --- .github/workflows/snapshot-on-push-master.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 759446dc2..933bc05ba 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -39,8 +39,6 @@ jobs: runs-on: ubuntu-latest steps: -# inspired by https://github.com/JuliaRegistries/TagBot/blob/master/example.yml - token: ${{ secrets.GITHUB_TOKEN }} - name: Install Dependencies shell: bash run: | @@ -108,6 +106,8 @@ jobs: repository: cc65/doc path: doc.git - name: Update the online documents. + with: + github_token: ${{ secrets.GITHUB_TOKEN }} run: | cd doc.git rm *.* From 681c51b37e3fa3be8d6518c40506fd62ef4dff6d Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 15:12:46 +0200 Subject: [PATCH 2083/2710] yawn --- .github/workflows/snapshot-on-push-master.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 933bc05ba..7baa69ba7 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -8,8 +8,13 @@ concurrency: cancel-in-progress: true # suggested at https://jonathansoma.com/everything/git/github-actions-403-error/ +# https://github.com/orgs/community/discussions/26694 permissions: + deployments: write contents: write + statuses: write + actions: write + checks: read jobs: build_windows: @@ -106,8 +111,6 @@ jobs: repository: cc65/doc path: doc.git - name: Update the online documents. - with: - github_token: ${{ secrets.GITHUB_TOKEN }} run: | cd doc.git rm *.* From 20f0427fa42278bac6790f3a1bc0d2d2c8b634e1 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 15:20:33 +0200 Subject: [PATCH 2084/2710] comment out the push again. who knows whats wrong. sigh --- .github/workflows/snapshot-on-push-master.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 7baa69ba7..75e93b0f8 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -120,7 +120,7 @@ jobs: git config push.default simple git add -A git commit -m "Updated from cc65 commit ${GITHUB_SHA}." - git push -n -v + #git push -n -v # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From 99a0d64b935ad2c0aaa85d35d4c7cbb68d8d3b18 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 20:03:27 +0200 Subject: [PATCH 2085/2710] lets see if that token stuff works --- .github/workflows/snapshot-on-push-master.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 75e93b0f8..3a69ab44b 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -109,6 +109,8 @@ jobs: uses: actions/checkout@v3 with: repository: cc65/doc + # this token will expire, if it does, generate a new one as decribed in https://github.com/cc65/cc65/issues/2065 + token: ${{ secrets.DOC_PAT }} # use secret token instead of default path: doc.git - name: Update the online documents. run: | @@ -120,7 +122,7 @@ jobs: git config push.default simple git add -A git commit -m "Updated from cc65 commit ${GITHUB_SHA}." - #git push -n -v + git push -n -v # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From 3536761110067f79231775d304f73dcccf42e355 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 20:30:28 +0200 Subject: [PATCH 2086/2710] another try --- .github/workflows/snapshot-on-push-master.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 3a69ab44b..c562ad0dd 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -9,12 +9,12 @@ concurrency: # suggested at https://jonathansoma.com/everything/git/github-actions-403-error/ # https://github.com/orgs/community/discussions/26694 -permissions: - deployments: write - contents: write - statuses: write - actions: write - checks: read +#permissions: +# deployments: write +# contents: write +# statuses: write +# actions: write +# checks: read jobs: build_windows: From 0369838f24aece6035321de618f8992c46e9ee91 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 20:45:35 +0200 Subject: [PATCH 2087/2710] bleh --- .github/workflows/snapshot-on-push-master.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index c562ad0dd..f5f690083 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -122,7 +122,7 @@ jobs: git config push.default simple git add -A git commit -m "Updated from cc65 commit ${GITHUB_SHA}." - git push -n -v + -git push -v # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From 926d09a14d812509102f722232d6ffd88d18af1f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 20:48:52 +0200 Subject: [PATCH 2088/2710] i'm not patient enough --- .github/workflows/snapshot-on-push-master.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index f5f690083..2b346f1d3 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -66,15 +66,15 @@ jobs: - name: Build the platform libraries. shell: bash run: make -j2 lib QUIET=1 - - name: Run the regression tests. - shell: bash - run: make test QUIET=1 - - name: Test that the samples can be built. - shell: bash - run: make -j2 samples - - name: Remove the output from the samples tests. - shell: bash - run: make -C samples clean +# - name: Run the regression tests. +# shell: bash +# run: make test QUIET=1 +# - name: Test that the samples can be built. +# shell: bash +# run: make -j2 samples +# - name: Remove the output from the samples tests. +# shell: bash +# run: make -C samples clean - name: Remove programs in util directory shell: bash run: make -C util clean From 17f58d934fd2a5bc7b709de36a718e0938cd48d5 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 20:52:50 +0200 Subject: [PATCH 2089/2710] AGAIN --- .github/workflows/snapshot-on-push-master.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 2b346f1d3..f5340495e 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -122,7 +122,7 @@ jobs: git config push.default simple git add -A git commit -m "Updated from cc65 commit ${GITHUB_SHA}." - -git push -v + git push -v # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From ea90c934d7fd1fccfce4302c2ed0426297ccbc1e Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 20:59:18 +0200 Subject: [PATCH 2090/2710] try gain with classic token --- .github/workflows/snapshot-on-push-master.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index f5340495e..d859054ec 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -122,7 +122,7 @@ jobs: git config push.default simple git add -A git commit -m "Updated from cc65 commit ${GITHUB_SHA}." - git push -v + git push -n -v # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From 610dfbb41ca54b6d0fc8a4661b2f88d79b101ca5 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 21:07:23 +0200 Subject: [PATCH 2091/2710] try normal push, also try actions/upload-artifact@v3 --- .github/workflows/snapshot-on-push-master.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index d859054ec..20b1ea8f7 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -95,12 +95,12 @@ jobs: mv cc65.zip cc65-snapshot-win32.zip - name: Upload a 32-bit Snapshot Zip - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: cc65-snapshot-win32.zip path: cc65-snapshot-win32.zip - name: Upload a 64-bit Snapshot Zip - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: cc65-snapshot-win64.zip path: cc65-snapshot-win64.zip @@ -122,7 +122,7 @@ jobs: git config push.default simple git add -A git commit -m "Updated from cc65 commit ${GITHUB_SHA}." - git push -n -v + git push # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From 7053dac3a99625d169b25a1b7a479d1a17a87091 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 21:13:37 +0200 Subject: [PATCH 2092/2710] remove token from cc65/doc, reenable the tests again --- .github/workflows/snapshot-on-push-master.yml | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 20b1ea8f7..62d6c6adb 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -7,15 +7,6 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true -# suggested at https://jonathansoma.com/everything/git/github-actions-403-error/ -# https://github.com/orgs/community/discussions/26694 -#permissions: -# deployments: write -# contents: write -# statuses: write -# actions: write -# checks: read - jobs: build_windows: name: Build (Windows) @@ -66,15 +57,15 @@ jobs: - name: Build the platform libraries. shell: bash run: make -j2 lib QUIET=1 -# - name: Run the regression tests. -# shell: bash -# run: make test QUIET=1 -# - name: Test that the samples can be built. -# shell: bash -# run: make -j2 samples -# - name: Remove the output from the samples tests. -# shell: bash -# run: make -C samples clean + - name: Run the regression tests. + shell: bash + run: make test QUIET=1 + - name: Test that the samples can be built. + shell: bash + run: make -j2 samples + - name: Remove the output from the samples tests. + shell: bash + run: make -C samples clean - name: Remove programs in util directory shell: bash run: make -C util clean @@ -110,6 +101,8 @@ jobs: with: repository: cc65/doc # this token will expire, if it does, generate a new one as decribed in https://github.com/cc65/cc65/issues/2065 + # - apparently only a "classic" token works here + # - the token must exist in the cc65/cc65 repo token: ${{ secrets.DOC_PAT }} # use secret token instead of default path: doc.git - name: Update the online documents. From 769b31637689c0ead7983cddf85b5ca019804f3b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 21:27:48 +0200 Subject: [PATCH 2093/2710] lets see if this will not fail when there are no changes in the docs --- .github/workflows/snapshot-on-push-master.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 62d6c6adb..9883003fb 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -114,8 +114,8 @@ jobs: git config user.email "cc65.nomail@github.com" git config push.default simple git add -A - git commit -m "Updated from cc65 commit ${GITHUB_SHA}." - git push + git diff-index --quiet HEAD || git commit -m "Updated from cc65 commit ${GITHUB_SHA}." + git diff-index --quiet HEAD || git push # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From 4ef849cb81c2a00e8716d8827eb45e27e8575269 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 21:44:57 +0200 Subject: [PATCH 2094/2710] Force background image to snap left, adapted from https://github.com/cc65/doc/pull/1 --- doc/doc.css | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/doc.css b/doc/doc.css index e4c316e16..6bd538681 100644 --- a/doc/doc.css +++ b/doc/doc.css @@ -2,12 +2,14 @@ body { font-family: arial, helvetica, sans-serif; font-size: 100%; text-align: justify; - margin-left: 110px; - margin-top: 10px; - margin-right: 30px; - margin-bottom: 10px; + margin: 0px; + padding-left: 110px; + padding-top: 10px; + padding-right: 30px; + padding-bottom: 10px; background-image: url(doc.png); background-repeat: repeat-y; + background-position:left top; } h1, h2, h2 a:link, h2 a:active, h2 a:visited { From e228e4d65c3edd22488a90a8878fb6aa71f42a9f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 21:58:37 +0200 Subject: [PATCH 2095/2710] try something else, again --- .github/workflows/snapshot-on-push-master.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 9883003fb..fb42bfcb3 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -114,8 +114,9 @@ jobs: git config user.email "cc65.nomail@github.com" git config push.default simple git add -A - git diff-index --quiet HEAD || git commit -m "Updated from cc65 commit ${GITHUB_SHA}." - git diff-index --quiet HEAD || git push + if git commit -m "Updated from cc65 commit ${GITHUB_SHA}." ; then + git push + fi # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From 71bb11bee120872d911b98e58ce869df60b3610f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 22:09:22 +0200 Subject: [PATCH 2096/2710] make the commit message a url, also check if it really doesnt fail when there is nothing to commit --- .github/workflows/snapshot-on-push-master.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index fb42bfcb3..50f5cd296 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -114,7 +114,8 @@ jobs: git config user.email "cc65.nomail@github.com" git config push.default simple git add -A - if git commit -m "Updated from cc65 commit ${GITHUB_SHA}." ; then + # prevent failure when there is nothing to commit + if git commit -m "Updated from https://github.com/cc65/cc65/commit/${GITHUB_SHA}" ; then git push fi From 69fd3d79985f09b41edb59c83fdc7c9b0bdfe9dc Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 4 May 2023 22:21:36 +0200 Subject: [PATCH 2097/2710] tweak --- doc/doc.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/doc.css b/doc/doc.css index 6bd538681..0f6e90d67 100644 --- a/doc/doc.css +++ b/doc/doc.css @@ -27,7 +27,7 @@ h1 { } h2 { - font-size: 160%; + font-size: 150%; text-shadow: 1px 1px 3px #303030; letter-spacing: 1px; margin-top: 2em; From cfc8a41a031c244ebf5162b08ac88817e7dd175e Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Thu, 4 May 2023 17:07:34 -0400 Subject: [PATCH 2098/2710] guard test to ensure 3-byte struct isn't re-enabled without evaluation by accident --- test/misc/Makefile | 5 ++ test/misc/struct-by-value.c | 156 ++++++++++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+) create mode 100644 test/misc/struct-by-value.c diff --git a/test/misc/Makefile b/test/misc/Makefile index d0b8979b0..c708b160b 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -163,6 +163,11 @@ $(WORKDIR)/goto.$1.$2.prg: goto.c $(ISEQUAL) | $(WORKDIR) $(CC65) -t sim$2 -$1 -o $$@ $$< 2>$(WORKDIR)/goto.$1.$2.out $(ISEQUAL) $(WORKDIR)/goto.$1.$2.out goto.ref +# should not compile until 3-byte struct by value tests are re-enabled +$(WORKDIR)/struct-by-value.$1.$2.prg: struct-by-value.c | $(WORKDIR) + $(if $(QUIET),echo misc/struct-by-value.$1.$2.prg) + $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # the rest are tests that fail currently for one reason or another $(WORKDIR)/sitest.$1.$2.prg: sitest.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." diff --git a/test/misc/struct-by-value.c b/test/misc/struct-by-value.c new file mode 100644 index 000000000..fc44f8729 --- /dev/null +++ b/test/misc/struct-by-value.c @@ -0,0 +1,156 @@ +/* This test ensures that compilation fails if a 3-byte struct by value +** is attempted, to avoid re-introducting a bug by accident: +** https://github.com/cc65/cc65/issues/2022 +** When 3-byte structs are re-enabled, this test will compile, +** which should trigger a "misc" test failure. +** When this happens: +** Delete this comment from the top. +** Replace test/val/struct-by-value.c with this one. +** See: +** https://github.com/cc65/cc65/issues/2086 +*/ + +/* Test of passing and returning structs by value. + Structs of 1, 2, 3, 4 bytes are supported. + Note that structs of 3 bytes had a past issue: + https://github.com/cc65/cc65/issues/2022 +*/ + +int fail = 0; + +struct s1 { char a; }; +struct s2 { char a, b; }; +struct s3 { char a, b, c; }; +struct s4 { char a, b, c, d; }; + +const struct s1 c1 = { 1 }; +const struct s2 c2 = { 2, 3 }; +const struct s3 c3 = { 4, 5, 6 }; +const struct s4 c4 = { 7, 8, 9, 10 }; + +struct s1 return1() { return c1; } +struct s2 return2() { return c2; } +struct s3 return3() { return c3; } +struct s4 return4() { return c4; } + +int compare1(struct s1 a, struct s1 b) +{ + if (a.a != b.a) return 1; + return 0; +} + +int compare2(struct s2 a, struct s2 b) +{ + if (a.a != b.a) return 1; + if (a.b != b.b) return 1; + return 0; +} + +int compare3(struct s3 a, struct s3 b) +{ + if (a.a != b.a) return 1; + if (a.b != b.b) return 1; + if (a.c != b.c) return 1; + return 0; +} + +int compare4(struct s4 a, struct s4 b) +{ + if (a.a != b.a) return 1; + if (a.b != b.b) return 1; + if (a.c != b.c) return 1; + if (a.d != b.d) return 1; + return 0; +} + +int pass1(struct s1 p1) +{ + struct s1 a1; + a1 = p1; + if (a1.a != c1.a) return 1; + return 0; +} + +int pass2(struct s2 p2) +{ + struct s2 a2; + a2 = p2; + if (a2.a != c2.a) return 1; + if (a2.b != c2.b) return 1; + return 0; +} + +int pass3(struct s3 p3) +{ + struct s3 a3; + a3 = p3; + if (a3.a != c3.a) return 1; + if (a3.b != c3.b) return 1; + if (a3.c != c3.c) return 1; + return 0; +} + +int pass4(struct s4 p4) +{ + struct s4 a4; + a4 = p4; + if (a4.a != c4.a) return 1; + if (a4.b != c4.b) return 1; + if (a4.c != c4.c) return 1; + if (a4.d != c4.d) return 1; + return 0; +} + +void reset(char* gg) +{ + char i; + for (i=0;i<5;++i) gg[i] = 128+i; +} + +int test(char* gg, char start) +{ + char i; + for (i=start;i<5;++i) + if (gg[i] != 128+i) return 1; + return 0; +} + +int main() +{ + /* Used to check #2022 bug condition of extra bytes being overwritten. */ + union + { + char gg[5]; + struct s1 g1; + struct s2 g2; + struct s3 g3; + struct s4 g4; + } guard; + + reset(guard.gg); + guard.g1 = return1(); + fail += compare1(guard.g1,c1); + fail += test(guard.gg,1); + + reset(guard.gg); + guard.g2 = return2(); + fail += compare2(guard.g2,c2); + fail += test(guard.gg,2); + + reset(guard.gg); + guard.g3 = return3(); + fail += compare3(guard.g3,c3); + fail += test(guard.gg,3); + + reset(guard.gg); + guard.g4 = return4(); + fail += compare4(guard.g4,c4); + fail += test(guard.gg,4); + + fail += pass1(c1); + fail += pass2(c2); + fail += pass3(c3); + fail += pass4(c4); + + return fail; +} From e57c991de791a0677177cd2e68ab02a05414aa9f Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 5 May 2023 10:56:43 -0400 Subject: [PATCH 2099/2710] master push workflow can include a docs snapshot --- .github/workflows/snapshot-on-push-master.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 50f5cd296..5b37e3645 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -118,9 +118,16 @@ jobs: if git commit -m "Updated from https://github.com/cc65/cc65/commit/${GITHUB_SHA}" ; then git push fi + - name: Package offline documents. + run: 7z a cc65-snapshot-docs.zip ./html/*.* + - name: Upload a Documents Snapshot Zip + uses: actions/upload-artifact@v3 + with: + name: cc65-snapshot-docs.zip + path: cc65-snapshot-docs.zip # enter secrets under "repository secrets" - - name: Upload snapshot to sourceforge + - name: Upload 32-bit Windows snapshot to sourceforge uses: nogsantos/scp-deploy@master with: src: cc65-snapshot-win32.zip @@ -129,5 +136,14 @@ jobs: port: ${{ secrets.SSH_PORT }} user: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_KEY }} + - name: Upload documents snapshot to sourceforge + uses: nogsantos/scp-deploy@master + with: + src: cc65-snapshot-docs.zip + host: ${{ secrets.SSH_HOST }} + remote: ${{ secrets.SSH_DIR }} + port: ${{ secrets.SSH_PORT }} + user: ${{ secrets.SSH_USER }} + key: ${{ secrets.SSH_KEY }} # TODO: Publish snapshot zip at https://github.com/cc65/cc65.github.io From 0cad5bef8169b634f288874e324f838a5da89884 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 5 May 2023 10:58:18 -0400 Subject: [PATCH 2100/2710] include docs snapshot with pull request build so that PRs can preview it easily --- .github/workflows/build-on-pull-request.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 05d6a4a39..55be5db1e 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -43,6 +43,11 @@ jobs: - name: Build the document files. shell: bash run: make -j2 doc + - name: Upload a documents snapshot. + uses: actions/upload-artifact@v3 + with: + name: docs + path: ./html - name: Build 64-bit Windows versions of the tools. run: | make -C src clean From 8f356f5093e7c9bbae33fe5103e3812f73eb8c30 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 5 May 2023 11:00:06 -0400 Subject: [PATCH 2101/2710] artifact upload should not end with .zip as it is appended automatically fixes ".zip.zip" artifact filenames --- .github/workflows/snapshot-on-push-master.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 5b37e3645..408bdbb63 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -88,12 +88,12 @@ jobs: - name: Upload a 32-bit Snapshot Zip uses: actions/upload-artifact@v3 with: - name: cc65-snapshot-win32.zip + name: cc65-snapshot-win32 path: cc65-snapshot-win32.zip - name: Upload a 64-bit Snapshot Zip uses: actions/upload-artifact@v3 with: - name: cc65-snapshot-win64.zip + name: cc65-snapshot-win64 path: cc65-snapshot-win64.zip - name: Get the online documents repo. @@ -123,7 +123,7 @@ jobs: - name: Upload a Documents Snapshot Zip uses: actions/upload-artifact@v3 with: - name: cc65-snapshot-docs.zip + name: cc65-snapshot-docs path: cc65-snapshot-docs.zip # enter secrets under "repository secrets" From 9f3e47e9c93d1aa5b439a5ecf2f38ec0a5a41b4c Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 5 May 2023 11:04:31 -0400 Subject: [PATCH 2102/2710] test/standard was never added to test makefile --- test/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/Makefile b/test/Makefile index abc70d58f..22e425c9c 100644 --- a/test/Makefile +++ b/test/Makefile @@ -22,6 +22,7 @@ continue: @$(MAKE) -C val all @$(MAKE) -C ref all @$(MAKE) -C err all + @$(MAKE) -C standard all @$(MAKE) -C misc all @$(MAKE) -C todo all @@ -31,6 +32,7 @@ mostlyclean: @$(MAKE) -C val clean @$(MAKE) -C ref clean @$(MAKE) -C err clean + @$(MAKE) -C standard clean @$(MAKE) -C misc clean @$(MAKE) -C todo clean From 5c20fb28123bd938c18618d321766d85b9ecb4fc Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 5 May 2023 11:28:42 -0400 Subject: [PATCH 2103/2710] test/todo makefile uses testwrk/val by mistake --- test/todo/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/todo/Makefile b/test/todo/Makefile index 17561f8f4..062b899ce 100644 --- a/test/todo/Makefile +++ b/test/todo/Makefile @@ -31,7 +31,7 @@ CA65 := $(if $(wildcard ../../bin/ca65*),..$S..$Sbin$Sca65,ca65) LD65 := $(if $(wildcard ../../bin/ld65*),..$S..$Sbin$Sld65,ld65) SIM65 := $(if $(wildcard ../../bin/sim65*),..$S..$Sbin$Ssim65,sim65) -WORKDIR = ../../testwrk/val +WORKDIR = ../../testwrk/todo OPTIONS = g O Os Osi Osir Osr Oi Oir Or @@ -49,7 +49,7 @@ $(WORKDIR): define PRG_template $(WORKDIR)/%.$1.$2.prg: %.c | $(WORKDIR) - $(if $(QUIET),echo val/$$*.$1.$2.prg) + $(if $(QUIET),echo todo/$$*.$1.$2.prg) $(CC65) -t sim$2 $$(CC65FLAGS) -$1 -o $$(@:.prg=.s) $$< $(NULLERR) $(CA65) -t sim$2 -o $$(@:.prg=.o) $$(@:.prg=.s) $(NULLERR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) From c662c7a36f6c31c15858e7656c652f864c9d5aaf Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 5 May 2023 12:02:50 -0400 Subject: [PATCH 2104/2710] use diff-index to prevent commit instead of bash if preferred because the if suppresses all git commit errors, instead of the one error we need to suppress (commit with no changes) --- .github/workflows/snapshot-on-push-master.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 50f5cd296..cba5b89dd 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -115,9 +115,8 @@ jobs: git config push.default simple git add -A # prevent failure when there is nothing to commit - if git commit -m "Updated from https://github.com/cc65/cc65/commit/${GITHUB_SHA}" ; then - git push - fi + git diff-index --quiet HEAD || git commit -m "Updated from https://github.com/cc65/cc65/commit/${GITHUB_SHA}" + git push # enter secrets under "repository secrets" - name: Upload snapshot to sourceforge From 1c58b302d8857928832931dfb2fd23a7c448919a Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Fri, 5 May 2023 12:31:19 -0400 Subject: [PATCH 2105/2710] Bugfix for the .ISMNEMONIC, .ISMNEM builtin function --- src/ca65/expr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ca65/expr.c b/src/ca65/expr.c index 812b6e90c..5dcf5ca71 100644 --- a/src/ca65/expr.c +++ b/src/ca65/expr.c @@ -496,7 +496,7 @@ static ExprNode* FuncIsMnemonic (void) /* Skip the name */ NextTok (); - return GenLiteralExpr (Instr > 0); + return GenLiteralExpr (Instr >= 0); } From 17706208e80de82dff33a6e5feef53d330de4d9d Mon Sep 17 00:00:00 2001 From: Jeff Tranter <tranter@pobox.com> Date: Fri, 5 May 2023 18:02:42 -0400 Subject: [PATCH 2106/2710] Add support for 48x12 video mode on Challenger 1P. Tested on real C1P hardware. --- doc/osi.sgml | 13 +++++++++++++ libsrc/osic1p/extra/screen-c1p-48x12.s | 16 ++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 libsrc/osic1p/extra/screen-c1p-48x12.s diff --git a/doc/osi.sgml b/doc/osi.sgml index eeaee4a97..62d466406 100644 --- a/doc/osi.sgml +++ b/doc/osi.sgml @@ -187,8 +187,21 @@ Currently the following extra screen configuration modules are implemented: <itemize> <item><tt>osic1p-screen-s3-32x28.o</tt>: 32 columns by 28 lines mode for Briel Superboard ///</item> +<item><tt>osic1p-screen-c1p-48x12.s</tt>: 48 columns by 12 lines mode +for Challenger 1P</item> </itemize> +On the Briel Superboard /// you enter 32 column mode by holding down +the BREAK key on powerup. + +On the Challenger 1P you can enable 48 column mode by writing a 1 to +bit 0 of address $D800, and writing a 0 to go back to 24 column mode. +You can use code like the following to do this: + +<tscreen><verb> +*(char*)0xd800 = 1; /* Switch to 48 column mode */ +</verb></tscreen> + <sect>Limitations<p> <sect1>stdio implementation<p> diff --git a/libsrc/osic1p/extra/screen-c1p-48x12.s b/libsrc/osic1p/extra/screen-c1p-48x12.s new file mode 100644 index 000000000..91a61338b --- /dev/null +++ b/libsrc/osic1p/extra/screen-c1p-48x12.s @@ -0,0 +1,16 @@ +; +; Implementation of screen-layout related functions for Challenger 1P in 48x12 mode. +; + + .include "../osiscreen.inc" + +C1P_SCR_BASE := $D000 ; Base of C1P video RAM +C1P_VRAM_SIZE = $0400 ; Size of C1P video RAM (1 kB) +C1P_SCR_WIDTH = $30 ; Screen width +C1P_SCR_HEIGHT = $0C ; Screen height +C1P_SCR_FIRSTCHAR = $8B ; Offset of cursor position (0, 0) from base + ; of video RAM +C1P_SCROLL_DIST = $40 ; Memory distance for scrolling by one line + +osi_screen_funcs C1P_SCR_BASE, C1P_VRAM_SIZE, C1P_SCR_FIRSTCHAR, \ + C1P_SCR_WIDTH, C1P_SCR_HEIGHT, C1P_SCROLL_DIST From 18570d18b811ed325972db70b8a21d3668e1e80a Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Fri, 5 May 2023 18:43:10 -0400 Subject: [PATCH 2107/2710] add test --- test/asm/err/ismnemonic.s | 808 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 808 insertions(+) create mode 100644 test/asm/err/ismnemonic.s diff --git a/test/asm/err/ismnemonic.s b/test/asm/err/ismnemonic.s new file mode 100644 index 000000000..438afed70 --- /dev/null +++ b/test/asm/err/ismnemonic.s @@ -0,0 +1,808 @@ +; Tests to ensure .ismnemonic is working correctly +; The .ismnemonic function calls FindInstruction internally, +; which is how the assembler detects all instructions +; +; Currently supported CPUs: +; "6502" +; "6502X" +; "6502DTV" +; "65SC02" +; "65C02" +; "4510" +; "huc6280" +; "65816" +; "sweet16" + +.macro test_Ismnemonic instr + .if .ismnemonic(instr) + ; do nothing + .else + .error .sprintf(".ISMNEMONIC failed for instruction: %s", .string(instr)) + .endif +.endmacro + +; there is no instruction table for "none", make sure 'adc' (common to all CPUs) and 'add' (sweet16) doesn't match +.setcpu "none" +.if .ismnemonic(adc) || .ismnemonic(add) + .error ".ISMNEMONIC with CPU set to 'none' should not match any instructions." +.endif + +.setcpu "6502" +test_Ismnemonic adc +test_Ismnemonic and +test_Ismnemonic asl +test_Ismnemonic bcc +test_Ismnemonic bcs +test_Ismnemonic beq +test_Ismnemonic bit +test_Ismnemonic bmi +test_Ismnemonic bne +test_Ismnemonic bpl +test_Ismnemonic brk +test_Ismnemonic bvc +test_Ismnemonic bvs +test_Ismnemonic clc +test_Ismnemonic cld +test_Ismnemonic cli +test_Ismnemonic clv +test_Ismnemonic cmp +test_Ismnemonic cpx +test_Ismnemonic cpy +test_Ismnemonic dec +test_Ismnemonic dex +test_Ismnemonic dey +test_Ismnemonic eor +test_Ismnemonic inc +test_Ismnemonic inx +test_Ismnemonic iny +test_Ismnemonic jmp +test_Ismnemonic jsr +test_Ismnemonic lda +test_Ismnemonic ldx +test_Ismnemonic ldy +test_Ismnemonic lsr +test_Ismnemonic nop +test_Ismnemonic ora +test_Ismnemonic pha +test_Ismnemonic php +test_Ismnemonic pla +test_Ismnemonic plp +test_Ismnemonic rol +test_Ismnemonic ror +test_Ismnemonic rti +test_Ismnemonic rts +test_Ismnemonic sbc +test_Ismnemonic sec +test_Ismnemonic sed +test_Ismnemonic sei +test_Ismnemonic sta +test_Ismnemonic stx +test_Ismnemonic sty +test_Ismnemonic tax +test_Ismnemonic tay +test_Ismnemonic tsx +test_Ismnemonic txa +test_Ismnemonic txs +test_Ismnemonic tya + +.setcpu "6502X" +test_Ismnemonic adc +test_Ismnemonic alr +test_Ismnemonic anc +test_Ismnemonic and +test_Ismnemonic ane +test_Ismnemonic arr +test_Ismnemonic asl +test_Ismnemonic axs +test_Ismnemonic bcc +test_Ismnemonic bcs +test_Ismnemonic beq +test_Ismnemonic bit +test_Ismnemonic bmi +test_Ismnemonic bne +test_Ismnemonic bpl +test_Ismnemonic brk +test_Ismnemonic bvc +test_Ismnemonic bvs +test_Ismnemonic clc +test_Ismnemonic cld +test_Ismnemonic cli +test_Ismnemonic clv +test_Ismnemonic cmp +test_Ismnemonic cpx +test_Ismnemonic cpy +test_Ismnemonic dcp +test_Ismnemonic dec +test_Ismnemonic dex +test_Ismnemonic dey +test_Ismnemonic eor +test_Ismnemonic inc +test_Ismnemonic inx +test_Ismnemonic iny +test_Ismnemonic isc +test_Ismnemonic jam +test_Ismnemonic jmp +test_Ismnemonic jsr +test_Ismnemonic las +test_Ismnemonic lax +test_Ismnemonic lda +test_Ismnemonic ldx +test_Ismnemonic ldy +test_Ismnemonic lsr +test_Ismnemonic nop +test_Ismnemonic ora +test_Ismnemonic pha +test_Ismnemonic php +test_Ismnemonic pla +test_Ismnemonic plp +test_Ismnemonic rla +test_Ismnemonic rol +test_Ismnemonic ror +test_Ismnemonic rra +test_Ismnemonic rti +test_Ismnemonic rts +test_Ismnemonic sax +test_Ismnemonic sbc +test_Ismnemonic sec +test_Ismnemonic sed +test_Ismnemonic sei +test_Ismnemonic sha +test_Ismnemonic shx +test_Ismnemonic shy +test_Ismnemonic slo +test_Ismnemonic sre +test_Ismnemonic sta +test_Ismnemonic stx +test_Ismnemonic sty +test_Ismnemonic tas +test_Ismnemonic tax +test_Ismnemonic tay +test_Ismnemonic tsx +test_Ismnemonic txa +test_Ismnemonic txs +test_Ismnemonic tya + +.setcpu "6502DTV" +test_Ismnemonic adc +test_Ismnemonic alr +test_Ismnemonic anc +test_Ismnemonic and +test_Ismnemonic ane +test_Ismnemonic arr +test_Ismnemonic asl +test_Ismnemonic axs +test_Ismnemonic bcc +test_Ismnemonic bcs +test_Ismnemonic beq +test_Ismnemonic bit +test_Ismnemonic bmi +test_Ismnemonic bne +test_Ismnemonic bpl +test_Ismnemonic bra +test_Ismnemonic brk +test_Ismnemonic bvc +test_Ismnemonic bvs +test_Ismnemonic clc +test_Ismnemonic cld +test_Ismnemonic cli +test_Ismnemonic clv +test_Ismnemonic cmp +test_Ismnemonic cpx +test_Ismnemonic cpy +test_Ismnemonic dec +test_Ismnemonic dex +test_Ismnemonic dey +test_Ismnemonic eor +test_Ismnemonic inc +test_Ismnemonic inx +test_Ismnemonic iny +test_Ismnemonic jmp +test_Ismnemonic jsr +test_Ismnemonic las +test_Ismnemonic lax +test_Ismnemonic lda +test_Ismnemonic ldx +test_Ismnemonic ldy +test_Ismnemonic lsr +test_Ismnemonic nop +test_Ismnemonic ora +test_Ismnemonic pha +test_Ismnemonic php +test_Ismnemonic pla +test_Ismnemonic plp +test_Ismnemonic rla +test_Ismnemonic rol +test_Ismnemonic ror +test_Ismnemonic rra +test_Ismnemonic rti +test_Ismnemonic rts +test_Ismnemonic sac +test_Ismnemonic sbc +test_Ismnemonic sec +test_Ismnemonic sed +test_Ismnemonic sei +test_Ismnemonic sha +test_Ismnemonic shx +test_Ismnemonic shy +test_Ismnemonic sir +test_Ismnemonic sta +test_Ismnemonic stx +test_Ismnemonic sty +test_Ismnemonic tax +test_Ismnemonic tay +test_Ismnemonic tsx +test_Ismnemonic txa +test_Ismnemonic txs +test_Ismnemonic tya + +.setcpu "65SC02" +test_Ismnemonic adc +test_Ismnemonic and +test_Ismnemonic asl +test_Ismnemonic bcc +test_Ismnemonic bcs +test_Ismnemonic beq +test_Ismnemonic bit +test_Ismnemonic bmi +test_Ismnemonic bne +test_Ismnemonic bpl +test_Ismnemonic bra +test_Ismnemonic brk +test_Ismnemonic bvc +test_Ismnemonic bvs +test_Ismnemonic clc +test_Ismnemonic cld +test_Ismnemonic cli +test_Ismnemonic clv +test_Ismnemonic cmp +test_Ismnemonic cpx +test_Ismnemonic cpy +test_Ismnemonic dea +test_Ismnemonic dec +test_Ismnemonic dex +test_Ismnemonic dey +test_Ismnemonic eor +test_Ismnemonic ina +test_Ismnemonic inc +test_Ismnemonic inx +test_Ismnemonic iny +test_Ismnemonic jmp +test_Ismnemonic jsr +test_Ismnemonic lda +test_Ismnemonic ldx +test_Ismnemonic ldy +test_Ismnemonic lsr +test_Ismnemonic nop +test_Ismnemonic ora +test_Ismnemonic pha +test_Ismnemonic php +test_Ismnemonic phx +test_Ismnemonic phy +test_Ismnemonic pla +test_Ismnemonic plp +test_Ismnemonic plx +test_Ismnemonic ply +test_Ismnemonic rol +test_Ismnemonic ror +test_Ismnemonic rti +test_Ismnemonic rts +test_Ismnemonic sbc +test_Ismnemonic sec +test_Ismnemonic sed +test_Ismnemonic sei +test_Ismnemonic sta +test_Ismnemonic stx +test_Ismnemonic sty +test_Ismnemonic stz +test_Ismnemonic tax +test_Ismnemonic tay +test_Ismnemonic trb +test_Ismnemonic tsb +test_Ismnemonic tsx +test_Ismnemonic txa +test_Ismnemonic txs +test_Ismnemonic tya + +.setcpu "65C02" +test_Ismnemonic adc +test_Ismnemonic and +test_Ismnemonic asl +test_Ismnemonic bbr0 +test_Ismnemonic bbr1 +test_Ismnemonic bbr2 +test_Ismnemonic bbr3 +test_Ismnemonic bbr4 +test_Ismnemonic bbr5 +test_Ismnemonic bbr6 +test_Ismnemonic bbr7 +test_Ismnemonic bbs0 +test_Ismnemonic bbs1 +test_Ismnemonic bbs2 +test_Ismnemonic bbs3 +test_Ismnemonic bbs4 +test_Ismnemonic bbs5 +test_Ismnemonic bbs6 +test_Ismnemonic bbs7 +test_Ismnemonic bcc +test_Ismnemonic bcs +test_Ismnemonic beq +test_Ismnemonic bit +test_Ismnemonic bmi +test_Ismnemonic bne +test_Ismnemonic bpl +test_Ismnemonic bra +test_Ismnemonic brk +test_Ismnemonic bvc +test_Ismnemonic bvs +test_Ismnemonic clc +test_Ismnemonic cld +test_Ismnemonic cli +test_Ismnemonic clv +test_Ismnemonic cmp +test_Ismnemonic cpx +test_Ismnemonic cpy +test_Ismnemonic dea +test_Ismnemonic dec +test_Ismnemonic dex +test_Ismnemonic dey +test_Ismnemonic eor +test_Ismnemonic ina +test_Ismnemonic inc +test_Ismnemonic inx +test_Ismnemonic iny +test_Ismnemonic jmp +test_Ismnemonic jsr +test_Ismnemonic lda +test_Ismnemonic ldx +test_Ismnemonic ldy +test_Ismnemonic lsr +test_Ismnemonic nop +test_Ismnemonic ora +test_Ismnemonic pha +test_Ismnemonic php +test_Ismnemonic phx +test_Ismnemonic phy +test_Ismnemonic pla +test_Ismnemonic plp +test_Ismnemonic plx +test_Ismnemonic ply +test_Ismnemonic rmb0 +test_Ismnemonic rmb1 +test_Ismnemonic rmb2 +test_Ismnemonic rmb3 +test_Ismnemonic rmb4 +test_Ismnemonic rmb5 +test_Ismnemonic rmb6 +test_Ismnemonic rmb7 +test_Ismnemonic rol +test_Ismnemonic ror +test_Ismnemonic rti +test_Ismnemonic rts +test_Ismnemonic sbc +test_Ismnemonic sec +test_Ismnemonic sed +test_Ismnemonic sei +test_Ismnemonic smb0 +test_Ismnemonic smb1 +test_Ismnemonic smb2 +test_Ismnemonic smb3 +test_Ismnemonic smb4 +test_Ismnemonic smb5 +test_Ismnemonic smb6 +test_Ismnemonic smb7 +test_Ismnemonic sta +test_Ismnemonic stp +test_Ismnemonic stx +test_Ismnemonic sty +test_Ismnemonic stz +test_Ismnemonic tax +test_Ismnemonic tay +test_Ismnemonic trb +test_Ismnemonic tsb +test_Ismnemonic tsx +test_Ismnemonic txa +test_Ismnemonic txs +test_Ismnemonic tya +test_Ismnemonic wai + +.setcpu "4510" +test_Ismnemonic adc +test_Ismnemonic and +test_Ismnemonic asl +test_Ismnemonic asr +test_Ismnemonic asw +test_Ismnemonic bbr0 +test_Ismnemonic bbr1 +test_Ismnemonic bbr2 +test_Ismnemonic bbr3 +test_Ismnemonic bbr4 +test_Ismnemonic bbr5 +test_Ismnemonic bbr6 +test_Ismnemonic bbr7 +test_Ismnemonic bbs0 +test_Ismnemonic bbs1 +test_Ismnemonic bbs2 +test_Ismnemonic bbs3 +test_Ismnemonic bbs4 +test_Ismnemonic bbs5 +test_Ismnemonic bbs6 +test_Ismnemonic bbs7 +test_Ismnemonic bcc +test_Ismnemonic bcs +test_Ismnemonic beq +test_Ismnemonic bit +test_Ismnemonic bmi +test_Ismnemonic bne +test_Ismnemonic bpl +test_Ismnemonic bra +test_Ismnemonic brk +test_Ismnemonic bsr +test_Ismnemonic bvc +test_Ismnemonic bvs +test_Ismnemonic clc +test_Ismnemonic cld +test_Ismnemonic cle +test_Ismnemonic cli +test_Ismnemonic clv +test_Ismnemonic cmp +test_Ismnemonic cpx +test_Ismnemonic cpy +test_Ismnemonic cpz +test_Ismnemonic dea +test_Ismnemonic dec +test_Ismnemonic dew +test_Ismnemonic dex +test_Ismnemonic dey +test_Ismnemonic dez +test_Ismnemonic eom +test_Ismnemonic eor +test_Ismnemonic ina +test_Ismnemonic inc +test_Ismnemonic inw +test_Ismnemonic inx +test_Ismnemonic iny +test_Ismnemonic inz +test_Ismnemonic jmp +test_Ismnemonic jsr +test_Ismnemonic lbcc +test_Ismnemonic lbcs +test_Ismnemonic lbeq +test_Ismnemonic lbmi +test_Ismnemonic lbne +test_Ismnemonic lbpl +test_Ismnemonic lbra +test_Ismnemonic lbvc +test_Ismnemonic lbvs +test_Ismnemonic lda +test_Ismnemonic ldx +test_Ismnemonic ldy +test_Ismnemonic ldz +test_Ismnemonic lsr +test_Ismnemonic map +test_Ismnemonic neg +test_Ismnemonic nop +test_Ismnemonic ora +test_Ismnemonic pha +test_Ismnemonic phd +test_Ismnemonic php +test_Ismnemonic phw +test_Ismnemonic phx +test_Ismnemonic phy +test_Ismnemonic phz +test_Ismnemonic pla +test_Ismnemonic plp +test_Ismnemonic plx +test_Ismnemonic ply +test_Ismnemonic plz +test_Ismnemonic rmb0 +test_Ismnemonic rmb1 +test_Ismnemonic rmb2 +test_Ismnemonic rmb3 +test_Ismnemonic rmb4 +test_Ismnemonic rmb5 +test_Ismnemonic rmb6 +test_Ismnemonic rmb7 +test_Ismnemonic rol +test_Ismnemonic ror +test_Ismnemonic row +test_Ismnemonic rti +test_Ismnemonic rtn +test_Ismnemonic rts +test_Ismnemonic sbc +test_Ismnemonic sec +test_Ismnemonic sed +test_Ismnemonic see +test_Ismnemonic sei +test_Ismnemonic smb0 +test_Ismnemonic smb1 +test_Ismnemonic smb2 +test_Ismnemonic smb3 +test_Ismnemonic smb4 +test_Ismnemonic smb5 +test_Ismnemonic smb6 +test_Ismnemonic smb7 +test_Ismnemonic sta +test_Ismnemonic stx +test_Ismnemonic sty +test_Ismnemonic stz +test_Ismnemonic tab +test_Ismnemonic tax +test_Ismnemonic tay +test_Ismnemonic taz +test_Ismnemonic tba +test_Ismnemonic trb +test_Ismnemonic tsb +test_Ismnemonic tsx +test_Ismnemonic tsy +test_Ismnemonic txa +test_Ismnemonic txs +test_Ismnemonic tya +test_Ismnemonic tys +test_Ismnemonic tza + +.setcpu "HuC6280" +test_Ismnemonic adc +test_Ismnemonic and +test_Ismnemonic asl +test_Ismnemonic bbr0 +test_Ismnemonic bbr1 +test_Ismnemonic bbr2 +test_Ismnemonic bbr3 +test_Ismnemonic bbr4 +test_Ismnemonic bbr5 +test_Ismnemonic bbr6 +test_Ismnemonic bbr7 +test_Ismnemonic bbs0 +test_Ismnemonic bbs1 +test_Ismnemonic bbs2 +test_Ismnemonic bbs3 +test_Ismnemonic bbs4 +test_Ismnemonic bbs5 +test_Ismnemonic bbs6 +test_Ismnemonic bbs7 +test_Ismnemonic bcc +test_Ismnemonic bcs +test_Ismnemonic beq +test_Ismnemonic bit +test_Ismnemonic bmi +test_Ismnemonic bne +test_Ismnemonic bpl +test_Ismnemonic bra +test_Ismnemonic brk +test_Ismnemonic bsr +test_Ismnemonic bvc +test_Ismnemonic bvs +test_Ismnemonic cla +test_Ismnemonic clc +test_Ismnemonic cld +test_Ismnemonic cli +test_Ismnemonic clv +test_Ismnemonic clx +test_Ismnemonic cly +test_Ismnemonic cmp +test_Ismnemonic cpx +test_Ismnemonic cpy +test_Ismnemonic csh +test_Ismnemonic csl +test_Ismnemonic dea +test_Ismnemonic dec +test_Ismnemonic dex +test_Ismnemonic dey +test_Ismnemonic eor +test_Ismnemonic ina +test_Ismnemonic inc +test_Ismnemonic inx +test_Ismnemonic iny +test_Ismnemonic jmp +test_Ismnemonic jsr +test_Ismnemonic lda +test_Ismnemonic ldx +test_Ismnemonic ldy +test_Ismnemonic lsr +test_Ismnemonic nop +test_Ismnemonic ora +test_Ismnemonic pha +test_Ismnemonic php +test_Ismnemonic phx +test_Ismnemonic phy +test_Ismnemonic pla +test_Ismnemonic plp +test_Ismnemonic plx +test_Ismnemonic ply +test_Ismnemonic rmb0 +test_Ismnemonic rmb1 +test_Ismnemonic rmb2 +test_Ismnemonic rmb3 +test_Ismnemonic rmb4 +test_Ismnemonic rmb5 +test_Ismnemonic rmb6 +test_Ismnemonic rmb7 +test_Ismnemonic rol +test_Ismnemonic ror +test_Ismnemonic rti +test_Ismnemonic rts +test_Ismnemonic sax +test_Ismnemonic say +test_Ismnemonic sbc +test_Ismnemonic sec +test_Ismnemonic sed +test_Ismnemonic sei +test_Ismnemonic set +test_Ismnemonic smb0 +test_Ismnemonic smb1 +test_Ismnemonic smb2 +test_Ismnemonic smb3 +test_Ismnemonic smb4 +test_Ismnemonic smb5 +test_Ismnemonic smb6 +test_Ismnemonic smb7 +test_Ismnemonic st0 +test_Ismnemonic st1 +test_Ismnemonic st2 +test_Ismnemonic sta +test_Ismnemonic stx +test_Ismnemonic sty +test_Ismnemonic stz +test_Ismnemonic sxy +test_Ismnemonic tai +test_Ismnemonic tam +test_Ismnemonic tam0 +test_Ismnemonic tam1 +test_Ismnemonic tam2 +test_Ismnemonic tam3 +test_Ismnemonic tam4 +test_Ismnemonic tam5 +test_Ismnemonic tam6 +test_Ismnemonic tam7 +test_Ismnemonic tax +test_Ismnemonic tay +test_Ismnemonic tdd +test_Ismnemonic tia +test_Ismnemonic tii +test_Ismnemonic tin +test_Ismnemonic tma +test_Ismnemonic tma0 +test_Ismnemonic tma1 +test_Ismnemonic tma2 +test_Ismnemonic tma3 +test_Ismnemonic tma4 +test_Ismnemonic tma5 +test_Ismnemonic tma6 +test_Ismnemonic tma7 +test_Ismnemonic trb +test_Ismnemonic tsb +test_Ismnemonic tst +test_Ismnemonic tsx +test_Ismnemonic txa +test_Ismnemonic txs +test_Ismnemonic tya + +.setcpu "65816" +test_Ismnemonic adc +test_Ismnemonic and +test_Ismnemonic asl +test_Ismnemonic bcc +test_Ismnemonic bcs +test_Ismnemonic beq +test_Ismnemonic bit +test_Ismnemonic bmi +test_Ismnemonic bne +test_Ismnemonic bpl +test_Ismnemonic bra +test_Ismnemonic brk +test_Ismnemonic brl +test_Ismnemonic bvc +test_Ismnemonic bvs +test_Ismnemonic clc +test_Ismnemonic cld +test_Ismnemonic cli +test_Ismnemonic clv +test_Ismnemonic cmp +test_Ismnemonic cop +test_Ismnemonic cpa +test_Ismnemonic cpx +test_Ismnemonic cpy +test_Ismnemonic dea +test_Ismnemonic dec +test_Ismnemonic dex +test_Ismnemonic dey +test_Ismnemonic eor +test_Ismnemonic ina +test_Ismnemonic inc +test_Ismnemonic inx +test_Ismnemonic iny +test_Ismnemonic jml +test_Ismnemonic jmp +test_Ismnemonic jsl +test_Ismnemonic jsr +test_Ismnemonic lda +test_Ismnemonic ldx +test_Ismnemonic ldy +test_Ismnemonic lsr +test_Ismnemonic mvn +test_Ismnemonic mvp +test_Ismnemonic nop +test_Ismnemonic ora +test_Ismnemonic pea +test_Ismnemonic pei +test_Ismnemonic per +test_Ismnemonic pha +test_Ismnemonic phb +test_Ismnemonic phd +test_Ismnemonic phk +test_Ismnemonic php +test_Ismnemonic phx +test_Ismnemonic phy +test_Ismnemonic pla +test_Ismnemonic plb +test_Ismnemonic pld +test_Ismnemonic plp +test_Ismnemonic plx +test_Ismnemonic ply +test_Ismnemonic rep +test_Ismnemonic rol +test_Ismnemonic ror +test_Ismnemonic rti +test_Ismnemonic rtl +test_Ismnemonic rts +test_Ismnemonic sbc +test_Ismnemonic sec +test_Ismnemonic sed +test_Ismnemonic sei +test_Ismnemonic sep +test_Ismnemonic sta +test_Ismnemonic stp +test_Ismnemonic stx +test_Ismnemonic sty +test_Ismnemonic stz +test_Ismnemonic swa +test_Ismnemonic tad +test_Ismnemonic tas +test_Ismnemonic tax +test_Ismnemonic tay +test_Ismnemonic tcd +test_Ismnemonic tcs +test_Ismnemonic tda +test_Ismnemonic tdc +test_Ismnemonic trb +test_Ismnemonic tsa +test_Ismnemonic tsb +test_Ismnemonic tsc +test_Ismnemonic tsx +test_Ismnemonic txa +test_Ismnemonic txs +test_Ismnemonic txy +test_Ismnemonic tya +test_Ismnemonic tyx +test_Ismnemonic wai +test_Ismnemonic wdm +test_Ismnemonic xba +test_Ismnemonic xce + +.setcpu "sweet16" +test_Ismnemonic add +test_Ismnemonic bc +test_Ismnemonic bk +test_Ismnemonic bm +test_Ismnemonic bm1 +test_Ismnemonic bnc +test_Ismnemonic bnm1 +test_Ismnemonic bnz +test_Ismnemonic bp +test_Ismnemonic br +test_Ismnemonic bs +test_Ismnemonic bz +test_Ismnemonic cpr +test_Ismnemonic dcr +test_Ismnemonic inr +test_Ismnemonic ld +test_Ismnemonic ldd +test_Ismnemonic pop +test_Ismnemonic popd +test_Ismnemonic rs +test_Ismnemonic rtn +test_Ismnemonic set +test_Ismnemonic st +test_Ismnemonic std +test_Ismnemonic stp +test_Ismnemonic sub From c5cf32ac47836b770e73323c10a5aa6b5e8d1195 Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Fri, 5 May 2023 18:50:44 -0400 Subject: [PATCH 2108/2710] add test - fix --- test/asm/{err => val}/ismnemonic.s | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/asm/{err => val}/ismnemonic.s (100%) diff --git a/test/asm/err/ismnemonic.s b/test/asm/val/ismnemonic.s similarity index 100% rename from test/asm/err/ismnemonic.s rename to test/asm/val/ismnemonic.s From 7994889213352a82c904efd06f5b82bbfdf193e7 Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Fri, 5 May 2023 19:07:14 -0400 Subject: [PATCH 2109/2710] add test - fix again --- test/asm/val/ismnemonic.s | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/test/asm/val/ismnemonic.s b/test/asm/val/ismnemonic.s index 438afed70..4ba74c97f 100644 --- a/test/asm/val/ismnemonic.s +++ b/test/asm/val/ismnemonic.s @@ -13,18 +13,22 @@ ; "65816" ; "sweet16" +; count any errors: +ismnemonic_error .set 0 + +; macro to test an instruction .macro test_Ismnemonic instr .if .ismnemonic(instr) ; do nothing .else - .error .sprintf(".ISMNEMONIC failed for instruction: %s", .string(instr)) + ismnemonic_error .set ismnemonic_error + 1 .endif .endmacro ; there is no instruction table for "none", make sure 'adc' (common to all CPUs) and 'add' (sweet16) doesn't match .setcpu "none" .if .ismnemonic(adc) || .ismnemonic(add) - .error ".ISMNEMONIC with CPU set to 'none' should not match any instructions." + ismnemonic_error .set ismnemonic_error + 1 .endif .setcpu "6502" @@ -806,3 +810,17 @@ test_Ismnemonic st test_Ismnemonic std test_Ismnemonic stp test_Ismnemonic sub + + .setcpu "6502" + + .import _exit + .export _main + +_main: + .if ismnemonic_error + ldx #$01 + .else + ldx #$00 + .endif + txa + jmp _exit From dd0a2bf1bc78188b75a22003590f20a4fedac941 Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Fri, 5 May 2023 19:10:16 -0400 Subject: [PATCH 2110/2710] add test - fix stlye --- test/asm/val/ismnemonic.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/asm/val/ismnemonic.s b/test/asm/val/ismnemonic.s index 4ba74c97f..a4534a9c4 100644 --- a/test/asm/val/ismnemonic.s +++ b/test/asm/val/ismnemonic.s @@ -815,7 +815,7 @@ test_Ismnemonic sub .import _exit .export _main - + _main: .if ismnemonic_error ldx #$01 From 8d048699ee6b33c68f06bc6d0a16e521a733a386 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 5 May 2023 21:32:34 -0400 Subject: [PATCH 2111/2710] grc65 fix flawed text parsing Was using fseek(F,-1,SEEK_CUR) which is invalid for text files, behaviour unreliable across platforms. Added check for internal buffer overflow. --- src/grc65/main.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/grc65/main.c b/src/grc65/main.c index 349b5c110..ac654300d 100644 --- a/src/grc65/main.c +++ b/src/grc65/main.c @@ -850,8 +850,12 @@ static char *filterInput (FILE *F, char *tbl) /* loads file into buffer filtering it out */ int a, prevchar = -1, i = 0, bracket = 0, quote = 1; - for (;;) { - a = getc(F); + a = getc(F); + while (1) + { + if (i >= BLOODY_BIG_BUFFER) { + AbEnd ("File too large for internal parsing buffer (%d bytes).",BLOODY_BIG_BUFFER); + } if ((a == '\n') || (a == '\015')) a = ' '; if (a == ',' && quote) a = ' '; if (a == '\042') quote =! quote; @@ -873,13 +877,18 @@ static char *filterInput (FILE *F, char *tbl) if (a == ';' && quote) { do { a = getc (F); - } while (a != '\n'); - fseek (F, -1, SEEK_CUR); + } while (a != '\n' && a != EOF); + /* Don't discard this newline/EOF, continue to next loop. + ** A previous implementation used fseek(F,-1,SEEK_CUR), + ** which is invalid for text mode files, and was unreliable across platforms. + */ + continue; } else { tbl[i++] = a; prevchar = a; } } + a = getc(F); } if (bracket != 0) AbEnd ("There are unclosed brackets!"); From f2e7609046b4febb23a5726f2f4dbd1489aac929 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 5 May 2023 21:45:57 -0400 Subject: [PATCH 2112/2710] sim65 cycles 32-bit range fix long is 64-bit on some platforms, making this inconsistent, added range check to catch overflow. reduced tests requesting 5 billion cycles to 2^32-1 so they can fun on 32-bit long sim65. --- src/sim65/main.c | 5 +++++ test/asm/val/Makefile | 3 ++- test/standard/Makefile | 3 ++- test/val/Makefile | 3 ++- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/sim65/main.c b/src/sim65/main.c index f2daf9295..9e371fd5d 100644 --- a/src/sim65/main.c +++ b/src/sim65/main.c @@ -36,6 +36,7 @@ #include <string.h> #include <stdlib.h> #include <errno.h> +#include <limits.h> /* common */ #include "abend.h" @@ -140,6 +141,10 @@ static void OptQuitXIns (const char* Opt attribute ((unused)), /* quit after MaxCycles cycles */ { MaxCycles = strtoul(Arg, NULL, 0); + /* Guard against overflow. */ + if (MaxCycles == ULONG_MAX && errno == ERANGE) { + Error("'-x parameter out of range. Max: %lu",ULONG_MAX); + } } static unsigned char ReadProgramFile (void) diff --git a/test/asm/val/Makefile b/test/asm/val/Makefile index 91dae9afd..49b6d5290 100644 --- a/test/asm/val/Makefile +++ b/test/asm/val/Makefile @@ -22,7 +22,8 @@ ifdef QUIET NULLERR = 2>$(NULLDEV) endif -SIM65FLAGS = -x 5000000000 +# sim65 can support 64-bit cycle counts on some platforms, but not all. This must fit in 32-bit. +SIM65FLAGS = -x 4294967295 CA65 := $(if $(wildcard ../../../bin/ca65*),..$S..$S..$Sbin$Sca65,ca65) LD65 := $(if $(wildcard ../../../bin/ld65*),..$S..$S..$Sbin$Sld65,ld65) diff --git a/test/standard/Makefile b/test/standard/Makefile index 054623b79..9993ba699 100644 --- a/test/standard/Makefile +++ b/test/standard/Makefile @@ -22,7 +22,8 @@ ifdef QUIET NULLERR = 2>$(NULLDEV) endif -SIM65FLAGS = -x 5000000000 -c +# sim65 can support 64-bit cycle counts on some platforms, but not all. This must fit in 32-bit. +SIM65FLAGS = -x 4294967295 -c CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) CA65 := $(if $(wildcard ../../bin/ca65*),..$S..$Sbin$Sca65,ca65) diff --git a/test/val/Makefile b/test/val/Makefile index a3722f7bf..8820e535a 100644 --- a/test/val/Makefile +++ b/test/val/Makefile @@ -24,7 +24,8 @@ ifdef QUIET NULLERR = 2>$(NULLDEV) endif -SIM65FLAGS = -x 5000000000 -c +# sim65 can support 64-bit cycle counts on some platforms, but not all. This must fit in 32-bit. +SIM65FLAGS = -x 4294967295 -c CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) CA65 := $(if $(wildcard ../../bin/ca65*),..$S..$Sbin$Sca65,ca65) From 773716c32ae0f19a78264c511d89758600288dce Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 5 May 2023 21:46:11 -0400 Subject: [PATCH 2113/2710] sim65 close(-1) crash fix test/val/constexpr.c relies on close(-1) to return -1 for some reason (comment says "abuse"), but on MSVC close(-1) is treated as a security issue and terminates the program instead of returning -1 simulating this desire for sim65, though constexpr.c may also warrant a review --- src/sim65/paravirt.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index 9e5c28432..0b16f89e9 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -242,7 +242,15 @@ static void PVClose (CPURegs* Regs) Print (stderr, 2, "PVClose ($%04X)\n", FD); - RetVal = close (FD); + if (FD != 0xFFFF) { + RetVal = close (FD); + } else { + /* test/val/constexpr.c "abuses" close, expecting close(-1) to return -1. + ** This behaviour is not the same on all target platforms. + ** MSVC's close treats it as a fatal error instead and terminates. + */ + RetVal = 0xFFFF; + } SetAX (Regs, RetVal); } From c03d00bc805ffdda6afe1866d6263e7eef098a39 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 5 May 2023 21:46:42 -0400 Subject: [PATCH 2114/2710] sim65 suppress uninitialized variable warning the EOF check was protecting uninitialized Val2 but the compiler can't figure that out --- src/sim65/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sim65/main.c b/src/sim65/main.c index 9e371fd5d..27299168e 100644 --- a/src/sim65/main.c +++ b/src/sim65/main.c @@ -189,6 +189,7 @@ static unsigned char ReadProgramFile (void) } /* Get load address */ + Val2 = 0; /* suppress uninitialized variable warning */ if (((Val = fgetc(F)) == EOF) || ((Val2 = fgetc(F)) == EOF)) { Error ("'%s': Header missing load address", ProgramFile); From df749abbfba01458907fd954beb47e96756d4fe7 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 5 May 2023 21:56:52 -0400 Subject: [PATCH 2115/2710] libtest target alternative to libs saves me about 20 minutes if I only want to run tests --- Makefile | 4 ++-- libsrc/Makefile | 8 +++++++- test/readme.txt | 6 +++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 909de81ec..29fcbbf96 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ mostlyclean clean: avail unavail bin: @$(MAKE) -C src --no-print-directory $@ -lib: +lib libtest: @$(MAKE) -C libsrc --no-print-directory $@ doc html info: @@ -43,7 +43,7 @@ util: checkstyle: @$(MAKE) -C .github/checks --no-print-directory $@ -# simple "test" target, only run regression tests for c64 target +# runs regression tests, requires libtest target libraries test: @$(MAKE) -C test --no-print-directory $@ diff --git a/libsrc/Makefile b/libsrc/Makefile index 627897d9b..732fa1d0e 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -39,6 +39,10 @@ TARGETS = apple2 \ sym1 \ telestrat +TARGETTEST = none \ + sim6502 \ + sim65c02 + DRVTYPES = emd \ joy \ mou \ @@ -53,7 +57,7 @@ OUTPUTDIRS := lib $(subst ../,,$(wildcard ../target/*/drv/*)) \ $(subst ../,,$(wildcard ../target/*/util)) -.PHONY: all mostlyclean clean install zip lib $(TARGETS) +.PHONY: all mostlyclean clean install zip lib libtest $(TARGETS) .SUFFIXES: @@ -81,6 +85,8 @@ datadir = $(PREFIX)/share/cc65 all lib: $(TARGETS) +libtest: $(TARGETTEST) + mostlyclean: $(call RMDIR,../libwrk) diff --git a/test/readme.txt b/test/readme.txt index 41d19aee3..d3f17148e 100644 --- a/test/readme.txt +++ b/test/readme.txt @@ -68,7 +68,11 @@ compiler is working as expected (when the tests behave as described): which will require additional changes to the makefile(s). -To run the tests use "make" in this (top) directory, the makefile should exit +These tests only require a subset of the platform libraries. In the (top) +directory above this one, "make libtest" can be used to build only those +libraries needed for testing, instead of "make lib". + +To run the tests use "make" in this (test) directory, the makefile should exit with no error. When a test failed you can use "make continue" to run further tests. From a022f7203dca1b7b4a00a2fdfff577b9f08ec90d Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Fri, 5 May 2023 22:05:10 -0400 Subject: [PATCH 2116/2710] workflow for manually dispatched Windows build and test --- .github/workflows/build-on-pull-request.yml | 4 ++ .github/workflows/snapshot-on-push-master.yml | 4 ++ .github/workflows/windows-test-manual.yml | 43 +++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 .github/workflows/windows-test-manual.yml diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 05d6a4a39..57f00751d 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -67,3 +67,7 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release + + # The regression tests are currently too slow to run for this Windows build, + # but the "Windows Test Manual" workflow (windows-test-manual.yml) can by + # manually dispatched from the Actions menu to test as needed. diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 50f5cd296..43fcce0a8 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -29,6 +29,10 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release + # The regression tests are currently too slow to run for this Windows build, + # but the "Windows Test Manual" workflow (windows-test-manual.yml) can by + # manually dispatched from the Actions menu to test as needed. + build_linux: name: Build, Test, and Snapshot (Linux) if: github.repository == 'cc65/cc65' diff --git a/.github/workflows/windows-test-manual.yml b/.github/workflows/windows-test-manual.yml new file mode 100644 index 000000000..854327726 --- /dev/null +++ b/.github/workflows/windows-test-manual.yml @@ -0,0 +1,43 @@ +name: Windows Test Manual +# Manually dispatched because it's much slower than the Linux test. + +on: + workflow_dispatch: + +jobs: + build_windows: + name: Build, Test (Windows MSVC) + runs-on: windows-latest + + steps: + - name: Git Setup + shell: bash + run: git config --global core.autocrlf input + + - name: Checkout source + uses: actions/checkout@v3 + + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.1 + + - name: Build app (MSVC debug) + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug + + - name: Build app (MSVC release) + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release + + - name: Build utils (MinGW) + shell: cmd + run: make -j2 util + + - name: Build the platform libraries (make lib) + shell: cmd + run: make -j2 lib QUIET=1 + + - name: Run the regression tests (make test) + shell: cmd + run: make test QUIET=1 + + - name: Test that the samples can be built (make samples) + shell: cmd + run: make -j2 samples From 1df7ab0352a43546c6ece76830594a687681c938 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 6 May 2023 11:55:21 -0400 Subject: [PATCH 2117/2710] opening brace on same line as while other AbEnd messages don't end in . --- src/grc65/main.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/grc65/main.c b/src/grc65/main.c index ac654300d..adce3dc47 100644 --- a/src/grc65/main.c +++ b/src/grc65/main.c @@ -851,10 +851,9 @@ static char *filterInput (FILE *F, char *tbl) int a, prevchar = -1, i = 0, bracket = 0, quote = 1; a = getc(F); - while (1) - { + while (1) { if (i >= BLOODY_BIG_BUFFER) { - AbEnd ("File too large for internal parsing buffer (%d bytes).",BLOODY_BIG_BUFFER); + AbEnd ("File too large for internal parsing buffer (%d bytes)",BLOODY_BIG_BUFFER); } if ((a == '\n') || (a == '\015')) a = ' '; if (a == ',' && quote) a = ' '; From 532681c9613af15b1993e08db12761855c9707c6 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 6 May 2023 12:06:06 -0400 Subject: [PATCH 2118/2710] braces were requested combining the two a = ' ' cases was requested --- src/grc65/main.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/grc65/main.c b/src/grc65/main.c index adce3dc47..7d31bfc52 100644 --- a/src/grc65/main.c +++ b/src/grc65/main.c @@ -855,12 +855,20 @@ static char *filterInput (FILE *F, char *tbl) if (i >= BLOODY_BIG_BUFFER) { AbEnd ("File too large for internal parsing buffer (%d bytes)",BLOODY_BIG_BUFFER); } - if ((a == '\n') || (a == '\015')) a = ' '; - if (a == ',' && quote) a = ' '; - if (a == '\042') quote =! quote; + if (((a == '\n') || (a == '\015')) || + (a == ',' && quote)) { + a = ' '; + } + if (a == '\042') { + quote =! quote; + } if (quote) { - if ((a == '{') || (a == '(')) bracket++; - if ((a == '}') || (a == ')')) bracket--; + if ((a == '{') || (a == '(')) { + bracket++; + } + if ((a == '}') || (a == ')')) { + bracket--; + } } if (a == EOF) { tbl[i] = '\0'; From fe35386b794b5359c726a5867b26f8dc58c26615 Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Sat, 6 May 2023 12:56:34 -0400 Subject: [PATCH 2119/2710] add test - add overloading instruction test --- test/asm/val/ismnemonic.s | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/test/asm/val/ismnemonic.s b/test/asm/val/ismnemonic.s index a4534a9c4..2d131e7a9 100644 --- a/test/asm/val/ismnemonic.s +++ b/test/asm/val/ismnemonic.s @@ -21,14 +21,34 @@ ismnemonic_error .set 0 .if .ismnemonic(instr) ; do nothing .else - ismnemonic_error .set ismnemonic_error + 1 + ismnemonic_error .set 1 .endif .endmacro +; test .feature ubiquitous_idents + + ; allow overloading mnemonics +.feature ubiquitous_idents + +.setcpu "6502" + +; make an adc macro +.macro adc +.endmacro + +; should not match +.if .ismnemonic(adc) + ismnemonic_error .set 1 +.endif + +.delmac adc + +; test all instructions: + ; there is no instruction table for "none", make sure 'adc' (common to all CPUs) and 'add' (sweet16) doesn't match .setcpu "none" .if .ismnemonic(adc) || .ismnemonic(add) - ismnemonic_error .set ismnemonic_error + 1 + ismnemonic_error .set 1 .endif .setcpu "6502" From 84f0ab322d4b056191fd09d8fbc792ba1e045453 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 6 May 2023 13:54:28 -0400 Subject: [PATCH 2120/2710] sim65: cycles does not increment 1 at a time, so some small overhead is needed in range check --- src/sim65/main.c | 11 ++++++++--- test/asm/val/Makefile | 2 +- test/standard/Makefile | 2 +- test/val/Makefile | 2 +- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/sim65/main.c b/src/sim65/main.c index 27299168e..d92d52ef6 100644 --- a/src/sim65/main.c +++ b/src/sim65/main.c @@ -64,6 +64,12 @@ const char* ProgramFile; /* exit simulator after MaxCycles Cycles */ unsigned long MaxCycles; +/* maximum number of cycles that can be tested, +** requires overhead for longest possible instruction, +** which should be 7, using 16 for safety. +*/ +#define MAXCYCLES_LIMIT (ULONG_MAX-16) + /* Header signature 'sim65' */ static const unsigned char HeaderSignature[] = { 0x73, 0x69, 0x6D, 0x36, 0x35 @@ -73,7 +79,6 @@ static const unsigned char HeaderSignature[] = { static const unsigned char HeaderVersion = 2; - /*****************************************************************************/ /* Code */ /*****************************************************************************/ @@ -142,8 +147,8 @@ static void OptQuitXIns (const char* Opt attribute ((unused)), { MaxCycles = strtoul(Arg, NULL, 0); /* Guard against overflow. */ - if (MaxCycles == ULONG_MAX && errno == ERANGE) { - Error("'-x parameter out of range. Max: %lu",ULONG_MAX); + if (MaxCycles >= MAXCYCLES_LIMIT) { + Error("'-x parameter out of range. Max: %lu",MAXCYCLES_LIMIT); } } diff --git a/test/asm/val/Makefile b/test/asm/val/Makefile index 49b6d5290..09a6b91bc 100644 --- a/test/asm/val/Makefile +++ b/test/asm/val/Makefile @@ -23,7 +23,7 @@ ifdef QUIET endif # sim65 can support 64-bit cycle counts on some platforms, but not all. This must fit in 32-bit. -SIM65FLAGS = -x 4294967295 +SIM65FLAGS = -x 4000000000 CA65 := $(if $(wildcard ../../../bin/ca65*),..$S..$S..$Sbin$Sca65,ca65) LD65 := $(if $(wildcard ../../../bin/ld65*),..$S..$S..$Sbin$Sld65,ld65) diff --git a/test/standard/Makefile b/test/standard/Makefile index 9993ba699..40299c1bf 100644 --- a/test/standard/Makefile +++ b/test/standard/Makefile @@ -23,7 +23,7 @@ ifdef QUIET endif # sim65 can support 64-bit cycle counts on some platforms, but not all. This must fit in 32-bit. -SIM65FLAGS = -x 4294967295 -c +SIM65FLAGS = -x 4000000000 -c CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) CA65 := $(if $(wildcard ../../bin/ca65*),..$S..$Sbin$Sca65,ca65) diff --git a/test/val/Makefile b/test/val/Makefile index 8820e535a..158967f9e 100644 --- a/test/val/Makefile +++ b/test/val/Makefile @@ -25,7 +25,7 @@ ifdef QUIET endif # sim65 can support 64-bit cycle counts on some platforms, but not all. This must fit in 32-bit. -SIM65FLAGS = -x 4294967295 -c +SIM65FLAGS = -x 4000000000 -c CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) CA65 := $(if $(wildcard ../../bin/ca65*),..$S..$Sbin$Sca65,ca65) From 11cc5b6f06ca9bf1341eb6cc6e5055e5d01c2bc8 Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Sat, 6 May 2023 14:24:53 -0400 Subject: [PATCH 2121/2710] remove .feature requirment for addrsize function, silently ignore '.feature addrsize' --- doc/ca65.sgml | 10 ---------- src/ca65/feature.c | 3 ++- src/ca65/global.c | 1 - src/ca65/global.h | 1 - src/ca65/scanner.c | 17 ----------------- 5 files changed, 2 insertions(+), 30 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 258808998..b4ef3e188 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -1409,10 +1409,6 @@ either a string or an expression value. .endmacro </verb></tscreen> - This command is new and must be enabled with the <tt/.FEATURE addrsize/ command. - - See: <tt><ref id=".FEATURE" name=".FEATURE"></tt> - <sect1><tt>.BANK</tt><label id=".BANK"><p> @@ -2795,12 +2791,6 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH <descrip> - <tag><tt>addrsize</tt><label id="addrsize"></tag> - - Enables the .ADDRSIZE pseudo function. This function is experimental and not enabled by default. - - See also: <tt><ref id=".ADDRSIZE" name=".ADDRSIZE"></tt> - <tag><tt>at_in_identifiers</tt><label id="at_in_identifiers"></tag> Accept the at character ('@') as a valid character in identifiers. The diff --git a/src/ca65/feature.c b/src/ca65/feature.c index 41177d66b..8b915cfda 100644 --- a/src/ca65/feature.c +++ b/src/ca65/feature.c @@ -118,10 +118,11 @@ void SetFeature (feature_t Feature, unsigned char On) case FEAT_C_COMMENTS: CComments = On; break; case FEAT_FORCE_RANGE: ForceRange = On; break; case FEAT_UNDERLINE_IN_NUMBERS: UnderlineInNumbers= On; break; - case FEAT_ADDRSIZE: AddrSize = On; break; case FEAT_BRACKET_AS_INDIRECT: BracketAsIndirect = On; break; case FEAT_STRING_ESCAPES: StringEscapes = On; break; case FEAT_LONG_JSR_JMP_RTS: LongJsrJmpRts = On; break; + /* Accept, but ignore addrsize */ + case FEAT_ADDRSIZE: break; default: break; } } diff --git a/src/ca65/global.c b/src/ca65/global.c index 337677e31..050d19e09 100644 --- a/src/ca65/global.c +++ b/src/ca65/global.c @@ -85,5 +85,4 @@ unsigned char OrgPerSeg = 0; /* Make .org local to current seg */ unsigned char CComments = 0; /* Allow C like comments */ unsigned char ForceRange = 0; /* Force values into expected range */ unsigned char UnderlineInNumbers = 0; /* Allow underlines in numbers */ -unsigned char AddrSize = 0; /* Allow .ADDRSIZE function */ unsigned char BracketAsIndirect = 0; /* Use '[]' not '()' for indirection */ diff --git a/src/ca65/global.h b/src/ca65/global.h index 46fb6c763..b3de99df5 100644 --- a/src/ca65/global.h +++ b/src/ca65/global.h @@ -87,7 +87,6 @@ extern unsigned char OrgPerSeg; /* Make .org local to current seg */ extern unsigned char CComments; /* Allow C like comments */ extern unsigned char ForceRange; /* Force values into expected range */ extern unsigned char UnderlineInNumbers; /* Allow underlines in numbers */ -extern unsigned char AddrSize; /* Allow .ADDRSIZE function */ extern unsigned char BracketAsIndirect; /* Use '[]' not '()' for indirection */ diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c index add365e84..185100025 100644 --- a/src/ca65/scanner.c +++ b/src/ca65/scanner.c @@ -748,24 +748,7 @@ static token_t FindDotKeyword (void) R = bsearch (&K, DotKeywords, sizeof (DotKeywords) / sizeof (DotKeywords [0]), sizeof (DotKeywords [0]), CmpDotKeyword); if (R != 0) { - - /* By default, disable any somewhat experiemental DotKeyword. */ - - switch (R->Tok) { - - case TOK_ADDRSIZE: - /* Disallow .ADDRSIZE function by default */ - if (AddrSize == 0) { - return TOK_NONE; - } - break; - - default: - break; - } - return R->Tok; - } else { return TOK_NONE; } From 560085cb1763c331ab5e0e47272b66026e59a36b Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Sat, 6 May 2023 16:22:04 -0400 Subject: [PATCH 2122/2710] modify and add tests --- test/asm/val/addrsize.s | 32 ++++++++++++++++++++++++++++++++ test/asm/val/feature.s | 13 ------------- 2 files changed, 32 insertions(+), 13 deletions(-) create mode 100644 test/asm/val/addrsize.s diff --git a/test/asm/val/addrsize.s b/test/asm/val/addrsize.s new file mode 100644 index 000000000..932090df0 --- /dev/null +++ b/test/asm/val/addrsize.s @@ -0,0 +1,32 @@ +; test .addrsize and ensure .feature addrsize is allowed, but inactive + +.export _main + +.segment "ZEROPAGE" +zplabel: + +.segment "CODE" +abslabel: + +; exit with 0 + +_main: + lda #0 + tax + rts + + +.assert .addrsize(zplabel) = 1, error, ".addrsize 1 expected for ZEROPAGE" +.assert .addrsize(abslabel) = 2, error, ".addrsize 2 expected for absolute" + +.feature addrsize +.assert .addrsize(zplabel) = 1, error, ".addrsize 1 expected for ZEROPAGE" +.assert .addrsize(abslabel) = 2, error, ".addrsize 2 expected for absolute" + +.feature addrsize + +.assert .addrsize(zplabel) = 1, error, ".addrsize 1 expected for ZEROPAGE" +.assert .addrsize(abslabel) = 2, error, ".addrsize 2 expected for absolute" + +.feature addrsize - +.assert .addrsize(zplabel) = 1, error, ".addrsize 1 expected for ZEROPAGE" +.assert .addrsize(abslabel) = 2, error, ".addrsize 2 expected for absolute" diff --git a/test/asm/val/feature.s b/test/asm/val/feature.s index 4428cf4c2..39e3a7862 100644 --- a/test/asm/val/feature.s +++ b/test/asm/val/feature.s @@ -2,12 +2,6 @@ .export _main -.segment "ZEROPAGE" -zplabel: - -.segment "CODE" -abslabel: - ; exit with 0 _main: @@ -17,13 +11,6 @@ _main: tax rts - -.feature addrsize + -.assert .addrsize(zplabel) = 1, error, ".addrsize 1 expected for ZEROPAGE" -.assert .addrsize(abslabel) = 2, error, ".addrsize 2 expected for absolute" -.feature addrsize - - - .feature at_in_identifiers on ident@with@at: rts From bee29dedd17841d77c861fb737874e8905ebe7d3 Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Sat, 6 May 2023 17:11:57 -0400 Subject: [PATCH 2123/2710] fix feature.s test --- test/asm/val/feature.s | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/asm/val/feature.s b/test/asm/val/feature.s index 39e3a7862..0def9d92c 100644 --- a/test/asm/val/feature.s +++ b/test/asm/val/feature.s @@ -2,6 +2,11 @@ .export _main +.segment "ZEROPAGE" +zplabel: + +.segment "CODE" + ; exit with 0 _main: From 56df849101318a9a2aa61b407d5c0f9fb7fd2eb6 Mon Sep 17 00:00:00 2001 From: mvax <big.jt@protonmail.com> Date: Sun, 7 May 2023 14:53:44 -0400 Subject: [PATCH 2124/2710] add warning for .feature addrsize, clean up switch in SetFeature --- src/ca65/feature.c | 2 -- src/ca65/pseudo.c | 6 ++++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/ca65/feature.c b/src/ca65/feature.c index 8b915cfda..9f5ca5876 100644 --- a/src/ca65/feature.c +++ b/src/ca65/feature.c @@ -121,8 +121,6 @@ void SetFeature (feature_t Feature, unsigned char On) case FEAT_BRACKET_AS_INDIRECT: BracketAsIndirect = On; break; case FEAT_STRING_ESCAPES: StringEscapes = On; break; case FEAT_LONG_JSR_JMP_RTS: LongJsrJmpRts = On; break; - /* Accept, but ignore addrsize */ - case FEAT_ADDRSIZE: break; default: break; } } diff --git a/src/ca65/pseudo.c b/src/ca65/pseudo.c index 1877512d5..cf4d1f64b 100644 --- a/src/ca65/pseudo.c +++ b/src/ca65/pseudo.c @@ -1043,6 +1043,12 @@ static void DoFeature (void) ErrorSkip ("Invalid feature: '%m%p'", &CurTok.SVal); return; } + + if (Feature == FEAT_ADDRSIZE) { + /* Warn for depreciated .feature addrsize */ + Warning (1, "Depreciated feature: '.feature addrsize'. Pseudo function .addrsize is always available."); + } + NextTok (); /* Optional +/- or ON/OFF */ From 0081fe548ce3908dee2624a322d89af8d06ed4bb Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sun, 7 May 2023 16:26:42 -0400 Subject: [PATCH 2125/2710] sim64 universal 64-bit cycle count support: MaxCycleCount is accounted by countdown, eliminating the 1-instruction-overhead issue, and removing the need to compare against a growing TotalCycles. Makes main.c responsible for counting total cycles, instead of 6502.c, so the size of MaxCycleCount etc. is fully determined in one location. Makes error.c responsible for PrintCycles instead of paravirt.c, so that it can be treated globally instead of Return value of main() should be SIM65_ERROR because it is unreachable by design. --- src/sim65/6502.c | 18 ------------------ src/sim65/6502.h | 6 ------ src/sim65/error.c | 25 +++++++++++++++++++++++++ src/sim65/error.h | 6 ++++++ src/sim65/main.c | 40 +++++++++++++++++++++------------------- src/sim65/paravirt.c | 6 +----- 6 files changed, 53 insertions(+), 48 deletions(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index 6c23b0dfc..9d2c93da8 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -64,18 +64,12 @@ static CPURegs Regs; /* Cycles for the current insn */ static unsigned Cycles; -/* Total number of CPU cycles exec'd */ -static unsigned long TotalCycles; - /* NMI request active */ static unsigned HaveNMIRequest; /* IRQ request active */ static unsigned HaveIRQRequest; -/* flag to print cycles at program termination */ -int PrintCycles; - /*****************************************************************************/ /* Helper functions and macros */ @@ -3277,18 +3271,6 @@ unsigned ExecuteInsn (void) Handlers[CPU][OPC] (); } - /* Count cycles */ - TotalCycles += Cycles; - /* Return the number of clock cycles needed by this insn */ return Cycles; } - - - -unsigned long GetCycles (void) -/* Return the total number of cycles executed */ -{ - /* Return the total number of cycles */ - return TotalCycles; -} diff --git a/src/sim65/6502.h b/src/sim65/6502.h index f8e894567..39b995793 100644 --- a/src/sim65/6502.h +++ b/src/sim65/6502.h @@ -96,12 +96,6 @@ unsigned ExecuteInsn (void); ** executed instruction. */ -unsigned long GetCycles (void); -/* Return the total number of clock cycles executed */ - -extern int PrintCycles; -/* flag to print cycles at program termination */ - /* End of 6502.h */ diff --git a/src/sim65/error.c b/src/sim65/error.c index 441b07d2a..fc24ca006 100644 --- a/src/sim65/error.c +++ b/src/sim65/error.c @@ -41,6 +41,20 @@ +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* flag to print cycles at program termination */ +int PrintCycles = 0; + +/* cycles are counted by main.c */ +extern unsigned long long TotalCycles; + + + /*****************************************************************************/ /* Code */ /*****************************************************************************/ @@ -99,3 +113,14 @@ void Internal (const char* Format, ...) va_end (ap); exit (SIM65_ERROR); } + + + +void SimExit (int Code) +/* Exit the simulation with an exit code */ +{ + if (PrintCycles) { + fprintf (stdout, "%llu cycles\n", TotalCycles); + } + exit (Code); +} diff --git a/src/sim65/error.h b/src/sim65/error.h index ea54fa048..a016881c6 100644 --- a/src/sim65/error.h +++ b/src/sim65/error.h @@ -55,6 +55,9 @@ #define SIM65_ERROR_TIMEOUT 0x7E /* An error result for max CPU instructions exceeded. */ +extern int PrintCycles; +/* flag to print cycles at program termination */ + /*****************************************************************************/ @@ -75,6 +78,9 @@ void ErrorCode (int Code, const char* Format, ...) attribute((noreturn, format(p void Internal (const char* Format, ...) attribute((noreturn, format(printf,1,2))); /* Print an internal error message and die */ +void SimExit (int Code); +/* Exit the simulation with an exit code */ + /* End of error.h */ diff --git a/src/sim65/main.c b/src/sim65/main.c index d92d52ef6..f5ace1909 100644 --- a/src/sim65/main.c +++ b/src/sim65/main.c @@ -36,7 +36,6 @@ #include <string.h> #include <stdlib.h> #include <errno.h> -#include <limits.h> /* common */ #include "abend.h" @@ -61,14 +60,14 @@ /* Name of program file */ const char* ProgramFile; -/* exit simulator after MaxCycles Cycles */ -unsigned long MaxCycles; +/* count of total cycles executed */ +unsigned long long TotalCycles = 0; -/* maximum number of cycles that can be tested, -** requires overhead for longest possible instruction, -** which should be 7, using 16 for safety. -*/ -#define MAXCYCLES_LIMIT (ULONG_MAX-16) +/* exit simulator after MaxCycles Cccles */ +unsigned long long MaxCycles = 0; + +/* countdown from MaxCycles */ +unsigned long long RemainCycles; /* Header signature 'sim65' */ static const unsigned char HeaderSignature[] = { @@ -145,11 +144,7 @@ static void OptQuitXIns (const char* Opt attribute ((unused)), const char* Arg attribute ((unused))) /* quit after MaxCycles cycles */ { - MaxCycles = strtoul(Arg, NULL, 0); - /* Guard against overflow. */ - if (MaxCycles >= MAXCYCLES_LIMIT) { - Error("'-x parameter out of range. Max: %lu",MAXCYCLES_LIMIT); - } + MaxCycles = strtoull(Arg, NULL, 0); } static unsigned char ReadProgramFile (void) @@ -247,6 +242,7 @@ int main (int argc, char* argv[]) unsigned I; unsigned char SPAddr; + unsigned int Cycles; /* Initialize the cmdline module */ InitCmdLine (&argc, &argv, "sim65"); @@ -309,18 +305,24 @@ int main (int argc, char* argv[]) MemInit (); SPAddr = ReadProgramFile (); - ParaVirtInit (I, SPAddr); Reset (); + RemainCycles = MaxCycles; while (1) { - ExecuteInsn (); - if (MaxCycles && (GetCycles () >= MaxCycles)) { - ErrorCode (SIM65_ERROR_TIMEOUT, "Maximum number of cycles reached."); + Cycles = ExecuteInsn (); + TotalCycles += Cycles; + if (MaxCycles) { + if (Cycles > RemainCycles) { + ErrorCode (SIM65_ERROR_TIMEOUT, "Maximum number of cycles (%llu) reached.", MaxCycles); + } + RemainCycles -= Cycles; } } - /* Return an apropriate exit code */ - return EXIT_SUCCESS; + /* Unreachable. sim65 program must exit through paravirtual PVExit + ** or timeout from MaxCycles producing an error. + */ + return SIM65_ERROR; } diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index 0b16f89e9..af162acfa 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -124,11 +124,7 @@ static unsigned PopParam (unsigned char Incr) static void PVExit (CPURegs* Regs) { Print (stderr, 1, "PVExit ($%02X)\n", Regs->AC); - if (PrintCycles) { - Print (stdout, 0, "%lu cycles\n", GetCycles ()); - } - - exit (Regs->AC); + SimExit (Regs->AC); } From aad64063c97d2b379955f90d006c244c744c559e Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sun, 7 May 2023 16:33:07 -0400 Subject: [PATCH 2126/2710] makefiles no longer need comment about sim65 64-bit support --- test/asm/val/Makefile | 1 - test/standard/Makefile | 1 - test/val/Makefile | 1 - 3 files changed, 3 deletions(-) diff --git a/test/asm/val/Makefile b/test/asm/val/Makefile index 09a6b91bc..54b1100ec 100644 --- a/test/asm/val/Makefile +++ b/test/asm/val/Makefile @@ -22,7 +22,6 @@ ifdef QUIET NULLERR = 2>$(NULLDEV) endif -# sim65 can support 64-bit cycle counts on some platforms, but not all. This must fit in 32-bit. SIM65FLAGS = -x 4000000000 CA65 := $(if $(wildcard ../../../bin/ca65*),..$S..$S..$Sbin$Sca65,ca65) diff --git a/test/standard/Makefile b/test/standard/Makefile index 40299c1bf..bf513c84e 100644 --- a/test/standard/Makefile +++ b/test/standard/Makefile @@ -22,7 +22,6 @@ ifdef QUIET NULLERR = 2>$(NULLDEV) endif -# sim65 can support 64-bit cycle counts on some platforms, but not all. This must fit in 32-bit. SIM65FLAGS = -x 4000000000 -c CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) diff --git a/test/val/Makefile b/test/val/Makefile index 158967f9e..56d8e5ff9 100644 --- a/test/val/Makefile +++ b/test/val/Makefile @@ -24,7 +24,6 @@ ifdef QUIET NULLERR = 2>$(NULLDEV) endif -# sim65 can support 64-bit cycle counts on some platforms, but not all. This must fit in 32-bit. SIM65FLAGS = -x 4000000000 -c CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) From 3419cbd3484427ad732289c5ff7cab41639cf1ca Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sun, 7 May 2023 16:33:47 -0400 Subject: [PATCH 2127/2710] sim65 64-bit cycle count tests These take ~10 seconds to run locally --- test/asm/Makefile | 2 +- test/asm/misc/Makefile | 70 +++++++++++++++++++++++++++++++ test/asm/misc/sim65-time-wait.inc | 55 ++++++++++++++++++++++++ test/asm/misc/sim65-timein.s | 17 ++++++++ test/asm/misc/sim65-timeout.s | 17 ++++++++ test/asm/readme.txt | 6 +++ 6 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 test/asm/misc/Makefile create mode 100644 test/asm/misc/sim65-time-wait.inc create mode 100644 test/asm/misc/sim65-timein.s create mode 100644 test/asm/misc/sim65-timeout.s diff --git a/test/asm/Makefile b/test/asm/Makefile index 3481dae78..dea53f6b2 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -12,7 +12,7 @@ endif WORKDIR = ../testwrk/asm -SUBDIRS = cpudetect opcodes listing val err +SUBDIRS = cpudetect opcodes listing val err misc .PHONY: all continue mostlyclean clean diff --git a/test/asm/misc/Makefile b/test/asm/misc/Makefile new file mode 100644 index 000000000..5a9d4f3ef --- /dev/null +++ b/test/asm/misc/Makefile @@ -0,0 +1,70 @@ +# Makefile for the remaining asm tests that need special care in one way or another + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + S = $(subst /,\,/) + NOT = - # Hack + EXE = .exe + NULLDEV = nul: + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /s /q $(subst /,\,$1) +else + S = / + NOT = ! + EXE = + NULLDEV = /dev/null + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +ifdef QUIET + .SILENT: + NULLOUT = >$(NULLDEV) + NULLERR = 2>$(NULLDEV) +endif + +SIM65FLAGS = -x 200000000 + +CA65 := $(if $(wildcard ../../../bin/ca65*),..$S..$S..$Sbin$Sca65,ca65) +LD65 := $(if $(wildcard ../../../bin/ld65*),..$S..$S..$Sbin$Sld65,ld65) +SIM65 := $(if $(wildcard ../../../bin/sim65*),..$S..$S..$Sbin$Ssim65,sim65) + +WORKDIR = ..$S..$S..$Stestwrk$Sasm$Smisc + +.PHONY: all clean + +SOURCES := $(wildcard *.s) +TESTS = $(SOURCES:%.s=$(WORKDIR)/%.6502.prg) +TESTS += $(SOURCES:%.s=$(WORKDIR)/%.65c02.prg) + +all: $(TESTS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +define PRG_template + +# sim65 ensure 64-bit wait time does not timeout +$(WORKDIR)/sim65-timein.$1.prg: sim65-timein.s | $(WORKDIR) + $(if $(QUIET),echo misc/sim65-timein.$1.prg) + $(CA65) -t sim$1 -o $$(@:.prg=.o) $$< $(NULLERR) + $(LD65) -t sim$1 -o $$@ $$(@:.prg=.o) sim$1.lib $(NULLERR) + $(SIM65) -x 4400000000 -c $$@ $(NULLOUT) $(NULLERR) + +# sim65 ensure 64-bit wait time does timeout +$(WORKDIR)/sim65-timeout.$1.prg: sim65-timeout.s | $(WORKDIR) + $(if $(QUIET),echo misc/sim65-timeout.$1.prg) + $(CA65) -t sim$1 -o $$(@:.prg=.o) $$< $(NULLERR) + $(LD65) -t sim$1 -o $$@ $$(@:.prg=.o) sim$1.lib $(NULLERR) + $(NOT) $(SIM65) -x 4400000000 -c $$@ $(NULLOUT) $(NULLERR) + +endef # PRG_template + +$(eval $(call PRG_template,6502)) +$(eval $(call PRG_template,65c02)) + +clean: + @$(call RMDIR,$(WORKDIR)) diff --git a/test/asm/misc/sim65-time-wait.inc b/test/asm/misc/sim65-time-wait.inc new file mode 100644 index 000000000..bc761ac16 --- /dev/null +++ b/test/asm/misc/sim65-time-wait.inc @@ -0,0 +1,55 @@ +; Shared timer for: +; sim65-timein.s +; sim65-timeout.s + +; wait A * 100,000,000 cycles, plus small amount of overhead +wait100m: + tay + bne :+ + rts ; return quickly if A=0 +: + jsr wait50331648 ; 50331648 + jsr wait25165824 ; 75497472 + jsr wait12582912 ; 88080384 + jsr wait6291456 ; 94371840 + jsr wait3145728 ; 97517568 + jsr wait1572864 ; 99090432 + jsr wait786432 ; 99876864 + jsr wait98304 ; 99975168 + jsr wait24576 ; 99999744 + jsr wait192 ; 99999936 + jsr wait48 ; 99999984 + nop ; 99999986 + nop ; 99999988 + php ; 99999991 + plp ; 99999995 + dey ; 99999997 + bne :- ; 100000000 + rts +; Note that this branch could cross a page if poorly aligned, +; adding an additional 1 cycle per loop. +; This precision is not important for the tests used. + +wait50331648: jsr wait25165824 +wait25165824: jsr wait12582912 +wait12582912: jsr wait6291456 +wait6291456: jsr wait3145728 +wait3145728: jsr wait1572864 +wait1572864: jsr wait786432 +wait786432: jsr wait393216 +wait393216: jsr wait196608 +wait196608: jsr wait98304 +wait98304: jsr wait49152 +wait49152: jsr wait24576 +wait24576: jsr wait12288 +wait12288: jsr wait6144 +wait6144: jsr wait3072 +wait3072: jsr wait1536 +wait1536: jsr wait768 +wait768: jsr wait384 +wait384: jsr wait192 +wait192: jsr wait96 +wait96: jsr wait48 +wait48: jsr wait24 +wait24: jsr wait12 +wait12: rts diff --git a/test/asm/misc/sim65-timein.s b/test/asm/misc/sim65-timein.s new file mode 100644 index 000000000..13365f0a8 --- /dev/null +++ b/test/asm/misc/sim65-timein.s @@ -0,0 +1,17 @@ +; Verifies that sim65 can handle 64-bit timeout counter. +; sim65 sim65-timein.prg -x 4400000000 + +.export _main +.import exit + +_main: + ; wait ~4,300,000,000 cycles + lda #43 + jsr wait100m + ; This is a positive test. + ; If the timeout did not occur, returning 0 reports success. + lda #0 + rts + +; wait100m +.include "sim65-time-wait.inc" diff --git a/test/asm/misc/sim65-timeout.s b/test/asm/misc/sim65-timeout.s new file mode 100644 index 000000000..6f1778dcd --- /dev/null +++ b/test/asm/misc/sim65-timeout.s @@ -0,0 +1,17 @@ +; Verifies that sim65 can handle 64-bit timeout counter. +; sim65 sim65-timeout.prg -x 4400000000 + +.export _main +.import exit + +_main: + ; wait ~4,500,000,000 cycles + lda #45 + jsr wait100m + ; This is a negative test. + ; If the timeout did not occur, returning 0 reports failure. + lda #0 + rts + +; wait100m +.include "sim65-time-wait.inc" diff --git a/test/asm/readme.txt b/test/asm/readme.txt index 49b530d1c..9b716e60c 100644 --- a/test/asm/readme.txt +++ b/test/asm/readme.txt @@ -36,3 +36,9 @@ val: Runtime assembly tests using sim65 that should end with an exit code of 0 if they pass. If they fail the exit code should be either -1, or a number indicating what part of the test failed. + + +misc: +----- + +This is for tests that require special make steps or conditions. From 7f0baff792bd4f5b4937dc1d19811f310ba7b29f Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sun, 7 May 2023 16:35:05 -0400 Subject: [PATCH 2128/2710] document how to return from assembly sim65 test --- doc/sim65.sgml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/doc/sim65.sgml b/doc/sim65.sgml index 310de4667..c838cd3b0 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -126,9 +126,17 @@ a set of built-in paravirtualization functions (<ref id="paravirt-internal" name <sect>Creating a Test in Assembly<p> Assembly tests may similarly be assembled and linked with -<tt/--target sim6502/ or <tt/--target sim65c02/, -and the sim65 library provides an <tt/exit/ symbol that the program may <tt/JMP/ -to terminate with the current A register value as an exit code. +<tt/--target sim6502/ or <tt/--target sim65c02/. +Define and export <tt/_main/ as an entry point, +and the sim65 library provides two ways to return an 8-bit exit code: + +<itemize> + +<item>Return from <tt/_main/ with the exit code in <tt/A/. + +<item><tt/jmp exit/ with the code in <tt/A/. + +</itemize> The binary file has a 12 byte header: From 2cb457b85f8019e6437907ddd19e3d2c5f2546c6 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sun, 7 May 2023 16:51:12 -0400 Subject: [PATCH 2129/2710] sim65 use error codes outside the simulated program's range for non-sim errors --- doc/sim65.sgml | 7 +++++++ src/sim65/error.h | 8 +++++--- src/sim65/paravirt.c | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/doc/sim65.sgml b/doc/sim65.sgml index c838cd3b0..b1e5afbdc 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -44,6 +44,13 @@ The simulator is called as follows: --version Print the simulator version number </verb></tscreen> +sim65 will exit with the error code of the simulated program, +which is limited to an 8-bit result 0-255. + +An error in sim65, like bad arguments or an internal problem will exit with <tt/1/. + +A timeout from <tt/-x/ will exist with <tt/2/. + <sect1>Command line options in detail<p> diff --git a/src/sim65/error.h b/src/sim65/error.h index a016881c6..6dbee974c 100644 --- a/src/sim65/error.h +++ b/src/sim65/error.h @@ -49,10 +49,12 @@ -#define SIM65_ERROR 0x7F -/* Does not use EXIT_FAILURE because it may overlap with test results. */ +#define SIM65_ERROR -1 +/* An error result for errors that are not part of the simulated test. +** Note that set simulated test can only return 8-bit errors 0-255. +*/ -#define SIM65_ERROR_TIMEOUT 0x7E +#define SIM65_ERROR_TIMEOUT -2 /* An error result for max CPU instructions exceeded. */ extern int PrintCycles; diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index af162acfa..2e52d6e7e 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -124,7 +124,7 @@ static unsigned PopParam (unsigned char Incr) static void PVExit (CPURegs* Regs) { Print (stderr, 1, "PVExit ($%02X)\n", Regs->AC); - SimExit (Regs->AC); + SimExit (Regs->AC); /* Error code in range 0-255. */ } From f15e9c41593cec0aed3eb17b01a91985e778f1e7 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sun, 7 May 2023 17:41:54 -0400 Subject: [PATCH 2130/2710] Linux build rejects %llu in ErrorCode --- src/sim65/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sim65/main.c b/src/sim65/main.c index f5ace1909..3c7cdc157 100644 --- a/src/sim65/main.c +++ b/src/sim65/main.c @@ -315,7 +315,7 @@ int main (int argc, char* argv[]) TotalCycles += Cycles; if (MaxCycles) { if (Cycles > RemainCycles) { - ErrorCode (SIM65_ERROR_TIMEOUT, "Maximum number of cycles (%llu) reached.", MaxCycles); + ErrorCode (SIM65_ERROR_TIMEOUT, "Maximum number of cycles reached."); } RemainCycles -= Cycles; } From 02d38ae17eb9705f9afeb8a50661b3ab8860971b Mon Sep 17 00:00:00 2001 From: Irgendwer <C.Krueger.B@web.de> Date: Mon, 8 May 2023 15:28:22 +0200 Subject: [PATCH 2131/2710] Fixed comments for Atari OS memory location --- include/_atarios.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/include/_atarios.h b/include/_atarios.h index ec33b98c9..cbf33bda6 100644 --- a/include/_atarios.h +++ b/include/_atarios.h @@ -334,17 +334,17 @@ struct __os { void (*vserin)(void); // = $020A/$020B POKEY SERIAL INPUT READY IRQ void (*vseror)(void); // = $020C/$020D POKEY SERIAL OUTPUT READY IRQ void (*vseroc)(void); // = $020E/$020F POKEY SERIAL OUTPUT COMPLETE IRQ - void (*vtimr1)(void); // = $0210/$0201 POKEY TIMER 1 IRQ - void (*vtimr2)(void); // = $0212/$0203 POKEY TIMER 2 IRQ - void (*vtimr4)(void); // = $0214/$0205 POKEY TIMER 4 IRQ - void (*vimirq)(void); // = $0216/$0207 IMMEDIATE IRQ VECTOR - unsigned int cdtmv1; // = $0218/$0210 COUNT DOWN TIMER 1 + void (*vtimr1)(void); // = $0210/$0211 POKEY TIMER 1 IRQ + void (*vtimr2)(void); // = $0212/$0213 POKEY TIMER 2 IRQ + void (*vtimr4)(void); // = $0214/$0215 POKEY TIMER 4 IRQ + void (*vimirq)(void); // = $0216/$0217 IMMEDIATE IRQ VECTOR + unsigned int cdtmv1; // = $0218/$0219 COUNT DOWN TIMER 1 unsigned int cdtmv2; // = $021A/$021B COUNT DOWN TIMER 2 unsigned int cdtmv3; // = $021C/$021D COUNT DOWN TIMER 3 unsigned int cdtmv4; // = $021E/$021F COUNT DOWN TIMER 4 unsigned int cdtmv5; // = $0220/$0221 COUNT DOWN TIMER 5 void (*vvblki)(void); // = $0222/$0223 IMMEDIATE VERTICAL BLANK NMI VECTOR - void (*vvblkd)(void); // = $0224/$0224 DEFERRED VERTICAL BLANK NMI VECTOR + void (*vvblkd)(void); // = $0224/$0225 DEFERRED VERTICAL BLANK NMI VECTOR void (*cdtma1)(void); // = $0226/$0227 COUNT DOWN TIMER 1 JSR ADDRESS void (*cdtma2)(void); // = $0228/$0229 COUNT DOWN TIMER 2 JSR ADDRESS unsigned char cdtmf3; // = $022A COUNT DOWN TIMER 3 FLAG From a058d4a2f3bd0361a0b03ffecb39b22d8cc0eb93 Mon Sep 17 00:00:00 2001 From: Movax12 <jeremiah.turner@gmail.com> Date: Mon, 8 May 2023 16:55:54 -0400 Subject: [PATCH 2132/2710] Fix warning message, remove comment --- src/ca65/pseudo.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ca65/pseudo.c b/src/ca65/pseudo.c index cf4d1f64b..2ce1ae087 100644 --- a/src/ca65/pseudo.c +++ b/src/ca65/pseudo.c @@ -1045,8 +1045,7 @@ static void DoFeature (void) } if (Feature == FEAT_ADDRSIZE) { - /* Warn for depreciated .feature addrsize */ - Warning (1, "Depreciated feature: '.feature addrsize'. Pseudo function .addrsize is always available."); + Warning (1, "Deprecated feature: '.feature addrsize'. Pseudo function .addrsize is always available."); } NextTok (); From ce6097ea7ebf4d37abc6865c1afc806876e5e2f5 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Mon, 8 May 2023 18:12:57 -0400 Subject: [PATCH 2133/2710] rename windows-test-manual to windows-test-scheduled --- .../{windows-test-manual.yml => windows-test-scheduled.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{windows-test-manual.yml => windows-test-scheduled.yml} (100%) diff --git a/.github/workflows/windows-test-manual.yml b/.github/workflows/windows-test-scheduled.yml similarity index 100% rename from .github/workflows/windows-test-manual.yml rename to .github/workflows/windows-test-scheduled.yml From 07963abd52ff5ccf3c5ef7790451454e1c0f3d0b Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Mon, 8 May 2023 18:21:21 -0400 Subject: [PATCH 2134/2710] replace manual-only tests with scheduled test and manual dispatch cache is used to prevent unnecessary rebuild if the previous build was successful make steps now use SHELL=cmd to provide cmd.exe subshell --- .github/workflows/windows-test-scheduled.yml | 48 +++++++++++++++++--- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/.github/workflows/windows-test-scheduled.yml b/.github/workflows/windows-test-scheduled.yml index 854327726..c3516772b 100644 --- a/.github/workflows/windows-test-scheduled.yml +++ b/.github/workflows/windows-test-scheduled.yml @@ -1,8 +1,16 @@ -name: Windows Test Manual -# Manually dispatched because it's much slower than the Linux test. +name: Windows Test Scheduled +# Scheduled or manually dispatched because it's slower than the Linux test. on: + schedule: + - cron: '0 0 */1 * *' + # every 1 days workflow_dispatch: + # allow manual dispatch +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + # don't run more than once at a time jobs: build_windows: @@ -10,34 +18,62 @@ jobs: runs-on: windows-latest steps: + + # This cache is used to remember the last build. + # If there are no changes and the last build was successful, + # the build and test steps will be omitted. + # If the last build failed, the full attempt will be repeated. + # Github Actions will retain the last build cache for up to 7 days. + + - name: Create Cache + shell: bash + run: mkdir ~/.cache-sha + + - name: Cache SHA + uses: actions/cache@v3 + id: check-sha + with: + path: ~/.cache-sha + key: cache-sha-wintest-${{ github.sha }} + - name: Git Setup + if: steps.check-sha.outputs.cache-hit != 'true' shell: bash run: git config --global core.autocrlf input - name: Checkout source + if: steps.check-sha.outputs.cache-hit != 'true' uses: actions/checkout@v3 - name: Add msbuild to PATH + if: steps.check-sha.outputs.cache-hit != 'true' uses: microsoft/setup-msbuild@v1.1 - name: Build app (MSVC debug) + if: steps.check-sha.outputs.cache-hit != 'true' run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug - name: Build app (MSVC release) + if: steps.check-sha.outputs.cache-hit != 'true' run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release - name: Build utils (MinGW) + if: steps.check-sha.outputs.cache-hit != 'true' shell: cmd - run: make -j2 util + run: make -j2 util SHELL=cmd - name: Build the platform libraries (make lib) + if: steps.check-sha.outputs.cache-hit != 'true' shell: cmd - run: make -j2 lib QUIET=1 + run: make lib QUIET=1 SHELL=cmd + # make -j2 lib fails with SHELL=cmd (not sure why) - name: Run the regression tests (make test) + if: steps.check-sha.outputs.cache-hit != 'true' shell: cmd - run: make test QUIET=1 + run: make test QUIET=1 SHELL=cmd - name: Test that the samples can be built (make samples) + if: steps.check-sha.outputs.cache-hit != 'true' shell: cmd - run: make -j2 samples + run: make -j2 samples SHELL=cmd From 76328da6824493b75a0d9863c1730e0dcf418ad5 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Mon, 8 May 2023 20:57:50 -0400 Subject: [PATCH 2135/2710] librsc/Makefile: ../lib directory must be created globally before make lib targets in parallel prevents conflict of individual targets each trying to create ../lib enable -j2 in make lib windows action --- .github/workflows/windows-test-scheduled.yml | 3 +-- libsrc/Makefile | 10 ++++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/windows-test-scheduled.yml b/.github/workflows/windows-test-scheduled.yml index c3516772b..451b37f79 100644 --- a/.github/workflows/windows-test-scheduled.yml +++ b/.github/workflows/windows-test-scheduled.yml @@ -65,8 +65,7 @@ jobs: - name: Build the platform libraries (make lib) if: steps.check-sha.outputs.cache-hit != 'true' shell: cmd - run: make lib QUIET=1 SHELL=cmd - # make -j2 lib fails with SHELL=cmd (not sure why) + run: make -j2 lib QUIET=1 SHELL=cmd - name: Run the regression tests (make test) if: steps.check-sha.outputs.cache-hit != 'true' diff --git a/libsrc/Makefile b/libsrc/Makefile index 732fa1d0e..0873d019f 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -122,9 +122,13 @@ endef # ZIP_recipe zip: $(foreach dir,$(OUTPUTDIRS),$(ZIP_recipe)) -$(TARGETS): +$(TARGETS): | ../lib @$(MAKE) --no-print-directory $@ +# ../lib must be created globally before doing lib targets in parallel +../lib: + @$(call MKDIR,$@) + else # TARGET CA65FLAGS = @@ -293,10 +297,12 @@ $(EXTRA_OBJPAT): $(EXTRA_SRCPAT) | ../libwrk/$(TARGET) ../lib @echo $(TARGET) - $(<F) @$(CA65) -t $(TARGET) $(CA65FLAGS) --create-dep $(@:../lib/%.o=../libwrk/$(TARGET)/%.d) -o $@ $< +$(EXTRA_OBJS): | ../lib + ../lib/$(TARGET).lib: $(OBJS) | ../lib $(AR65) a $@ $? -../libwrk/$(TARGET) ../lib ../target/$(TARGET)/util: +../libwrk/$(TARGET) ../target/$(TARGET)/util: @$(call MKDIR,$@) $(TARGET): $(EXTRA_OBJS) ../lib/$(TARGET).lib From eb2b013d6246ea6e112b769ea0e281ea9d926ff1 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Mon, 8 May 2023 21:22:18 -0400 Subject: [PATCH 2136/2710] remove workflow comments this obsoletes --- .github/workflows/build-on-pull-request.yml | 4 ---- .github/workflows/snapshot-on-push-master.yml | 4 ---- 2 files changed, 8 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 1ad810382..55be5db1e 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -72,7 +72,3 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release - - # The regression tests are currently too slow to run for this Windows build, - # but the "Windows Test Manual" workflow (windows-test-manual.yml) can by - # manually dispatched from the Actions menu to test as needed. diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 6ba6b63ed..2aedb0e25 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -29,10 +29,6 @@ jobs: - name: Build app (release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release - # The regression tests are currently too slow to run for this Windows build, - # but the "Windows Test Manual" workflow (windows-test-manual.yml) can by - # manually dispatched from the Actions menu to test as needed. - build_linux: name: Build, Test, and Snapshot (Linux) if: github.repository == 'cc65/cc65' From 3b7be09a7f7a70bff6ee463b24d5514ec52ca1d4 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Thu, 11 May 2023 19:50:58 -0400 Subject: [PATCH 2137/2710] extern redeclared as static = error (C spec: undefined) static redeclared as extern = warning (C spec: ignore extern) See: #2111 --- src/cc65/symtab.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index d9270f604..a2bbf13dd 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -1340,15 +1340,14 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) Name); Entry = 0; } else if ((Flags & SC_ESUTYPEMASK) != SC_TYPEDEF) { - /* If a static declaration follows a non-static declaration, then - ** diagnose the conflict. It will warn and compile an extern - ** declaration if both declarations are global, otherwise give an - ** error. + /* If a static declaration follows a non-static declaration, then the result is undefined. + ** Most compilers choose to either give an error at compile time, + ** or remove the extern property for a link time error if used. */ if (SymTab == SymTab0 && (Flags & SC_EXTERN) == 0 && (Entry->Flags & SC_EXTERN) != 0) { - Warning ("Static declaration of '%s' follows non-static declaration", Name); + Error ("Static declaration of '%s' follows non-static declaration", Name); } else if ((Flags & SC_EXTERN) != 0 && (Entry->Owner == SymTab0 || (Entry->Flags & SC_DEF) != 0) && (Entry->Flags & SC_EXTERN) == 0) { @@ -1360,8 +1359,12 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) */ if (Entry->Owner == SymTab0) { if ((Flags & SC_STORAGE) == 0) { - /* Linkage must be unchanged */ + /* Linkage must be unchanged. + ** The C standard specifies that a later extern declaration will be ignored, + ** and will use the previous linkage instead. Giving a warning for this case. + */ Flags &= ~SC_EXTERN; + Warning ("Extern declaration of '%s' follows static declaration, extern ignored", Name); } else { Error ("Non-static declaration of '%s' follows static declaration", Name); } From 5a30d746b404d00463efe909a9d69b3d23f3a30b Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Thu, 11 May 2023 20:15:27 -0400 Subject: [PATCH 2138/2710] extern/static conflict test: remove warning as errors to match the new expected cases --- test/val/decl-static-extern.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/test/val/decl-static-extern.c b/test/val/decl-static-extern.c index 6918e0033..2be4d336f 100644 --- a/test/val/decl-static-extern.c +++ b/test/val/decl-static-extern.c @@ -7,13 +7,12 @@ /* see: https://github.com/cc65/cc65/issues/191 + https://github.com/cc65/cc65/issues/2111 */ -#pragma warn(error, on) - static int n = 0; -extern int n; /* should not give an error */ -static int n; /* should not give an error */ +extern int n; /* extern is ignored, gives a warning but keeps previous static definiton */ +static int n; /* no error or warning, the previous static is still in effect */ int main(void) { From 5d9306fed35babfe0061ae31e7f90d5228367203 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Fri, 12 May 2023 02:32:14 +0200 Subject: [PATCH 2139/2710] Fixed header #2110 --- include/stdlib.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/include/stdlib.h b/include/stdlib.h index 4e7ffbd6a..05148d7da 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -44,6 +44,12 @@ typedef unsigned size_t; #define _HAVE_size_t #endif +/* NULL pointer */ +#ifndef _HAVE_NULL +#define NULL ((void *) 0) +#define _HAVE_NULL +#endif + /* Standard exit codes */ #define EXIT_SUCCESS 0 #define EXIT_FAILURE 1 @@ -167,6 +173,3 @@ int __fastcall__ putenv (char* s); /* End of stdlib.h */ #endif - - - From 6579df4e91981e0516da5216e7cb9a8b82a288b9 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 14 May 2023 02:43:35 +0200 Subject: [PATCH 2140/2710] Update stdlib.h --- include/stdlib.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/include/stdlib.h b/include/stdlib.h index 05148d7da..e789f732b 100644 --- a/include/stdlib.h +++ b/include/stdlib.h @@ -45,9 +45,8 @@ typedef unsigned size_t; #endif /* NULL pointer */ -#ifndef _HAVE_NULL -#define NULL ((void *) 0) -#define _HAVE_NULL +#ifndef NULL +#define NULL ((void *) 0) #endif /* Standard exit codes */ From 680ddaf37d034deededf7a9c814d7a9a6d3ee7c5 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 14 May 2023 17:27:04 +0200 Subject: [PATCH 2141/2710] Update locale.h --- include/locale.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/include/locale.h b/include/locale.h index 3f23e01d2..f408e1ef3 100644 --- a/include/locale.h +++ b/include/locale.h @@ -39,9 +39,8 @@ /* NULL pointer */ -#ifndef _HAVE_NULL -#define NULL 0 -#define _HAVE_NULL +#ifndef NULL +#define NULL ((void *) 0) #endif /* Locale information constants */ @@ -82,6 +81,3 @@ char* __fastcall__ setlocale (int category, const char* locale); /* End of locale.h */ #endif - - - From fd74e6b005bb2d5482310cb5286081065e750310 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 14 May 2023 17:28:09 +0200 Subject: [PATCH 2142/2710] Update stdio.h --- include/stdio.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/include/stdio.h b/include/stdio.h index 858dd5059..012b8e2ba 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -38,9 +38,8 @@ /* NULL pointer */ -#ifndef _HAVE_NULL -#define NULL 0 -#define _HAVE_NULL +#ifndef NULL +#define NULL ((void *) 0) #endif /* size_t is needed */ From c55459b287ec0c5fddbb6c695ea14e7222db1052 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 14 May 2023 17:28:48 +0200 Subject: [PATCH 2143/2710] Update string.h --- include/string.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/include/string.h b/include/string.h index 854359dad..abaf80e7d 100644 --- a/include/string.h +++ b/include/string.h @@ -37,9 +37,8 @@ #define _STRING_H /* NULL pointer */ -#ifndef _HAVE_NULL -#define NULL 0 -#define _HAVE_NULL +#ifndef NULL +#define NULL ((void *) 0) #endif /* size_t is needed */ From ba6747f5da0dd0c3c0cfab96098ad8cc4bfec11a Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 14 May 2023 17:29:42 +0200 Subject: [PATCH 2144/2710] Update time.h --- include/time.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/include/time.h b/include/time.h index 642d68c4e..bfc2ac435 100644 --- a/include/time.h +++ b/include/time.h @@ -39,9 +39,8 @@ /* NULL pointer */ -#ifndef _HAVE_NULL -#define NULL 0 -#define _HAVE_NULL +#ifndef NULL +#define NULL ((void *) 0) #endif /* size_t is needed */ From dd58c7ff5002ad1da1522c2764d60acac27a5546 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 14 May 2023 17:32:30 +0200 Subject: [PATCH 2145/2710] Update stddef.h --- include/stddef.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/include/stddef.h b/include/stddef.h index ca93edf62..d2bfd6138 100644 --- a/include/stddef.h +++ b/include/stddef.h @@ -53,9 +53,8 @@ typedef unsigned size_t; #endif /* NULL pointer */ -#ifndef _HAVE_NULL -#define NULL ((void *) 0) -#define _HAVE_NULL +#ifndef NULL +#define NULL ((void *) 0) #endif /* offsetof macro */ @@ -65,6 +64,3 @@ typedef unsigned size_t; /* End of stddef.h */ #endif - - - From 19436f515938e4b16afc214073ff40f5e1e9a45e Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Wed, 17 May 2023 20:24:36 +0200 Subject: [PATCH 2146/2710] Update gconst.h --- include/geos/gconst.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/geos/gconst.h b/include/geos/gconst.h index e70eb9304..55a99a21f 100644 --- a/include/geos/gconst.h +++ b/include/geos/gconst.h @@ -4,14 +4,14 @@ reassembled by Maciej 'YTM/Elysium' Witkowiak */ -/* Here are constants which didn't fit into any other cathegory... */ +/* Here are constants which didn't fit into any other category... */ #ifndef _GCONST_H #define _GCONST_H -#define NULL 0 -#define FALSE NULL +#define NULL ((void *) 0) #define TRUE 0xff +#define FALSE ~TRUE #define MOUSE_SPRNUM 0 #define DISK_DRV_LGH 0x0d80 From 767875b5a73f5630e75fe60a70473a17dda6a10f Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Thu, 18 May 2023 00:08:26 +0200 Subject: [PATCH 2147/2710] Added guard --- include/geos/gconst.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/geos/gconst.h b/include/geos/gconst.h index 55a99a21f..a1b6a1d86 100644 --- a/include/geos/gconst.h +++ b/include/geos/gconst.h @@ -9,7 +9,9 @@ #ifndef _GCONST_H #define _GCONST_H +#ifndef NULL #define NULL ((void *) 0) +#endif #define TRUE 0xff #define FALSE ~TRUE #define MOUSE_SPRNUM 0 From 8ff008722b97790fa65aa464b01107b8ba58967d Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Fri, 19 May 2023 02:49:49 +0200 Subject: [PATCH 2148/2710] Fixed test Don't define NULL yourself. QED --- test/val/add4.c | 1 - 1 file changed, 1 deletion(-) diff --git a/test/val/add4.c b/test/val/add4.c index f02a7fb9c..2371aea69 100644 --- a/test/val/add4.c +++ b/test/val/add4.c @@ -22,7 +22,6 @@ long long0 = 0; long long1 = 0; unsigned long ulong0 = 0; unsigned long ulong1 = 0; -#define NULL 0 char *cP0=NULL; char *cP1=NULL; int *iP0=NULL; From accd57460b5b7961b579368a49969f0888ccbbc1 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Fri, 19 May 2023 15:48:31 +0200 Subject: [PATCH 2149/2710] Reverted gconst.h --- include/geos/gconst.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/geos/gconst.h b/include/geos/gconst.h index a1b6a1d86..3e42feed7 100644 --- a/include/geos/gconst.h +++ b/include/geos/gconst.h @@ -12,8 +12,8 @@ #ifndef NULL #define NULL ((void *) 0) #endif +#define FALSE 0 #define TRUE 0xff -#define FALSE ~TRUE #define MOUSE_SPRNUM 0 #define DISK_DRV_LGH 0x0d80 From 3831feba758c16386dd2c61404e6a09aefcf3806 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Fri, 19 May 2023 16:32:09 +0200 Subject: [PATCH 2150/2710] Fixed typo --- doc/grc65.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/grc65.sgml b/doc/grc65.sgml index c03815ade..d256c31e6 100644 --- a/doc/grc65.sgml +++ b/doc/grc65.sgml @@ -270,7 +270,7 @@ required for the correct process of GEOS sequential application building. <p>Large GEOS applications typically don't fit in one piece in their designated memory area. They are therefore split into overlays which are loaded into memory on demand. The individual overlays are stored as records of a VLIR (Variable -Length Index Record) file. When GEOS starts a VLIR overlay appliation it loads +Length Index Record) file. When GEOS starts a VLIR overlay application it loads record number 0 which is supposed to contain the main program. The record numbers starting with 1 are to be used for the actual overlays. From 40ff9281c6ea020726cd8deb1ffb7b0a2b8bf6e9 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Fri, 19 May 2023 16:36:19 +0200 Subject: [PATCH 2151/2710] Fixed typo --- doc/funcref.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 6418723b5..2a6d77adc 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -976,7 +976,7 @@ previously been allocated by <tt/<ref id="malloc" name="malloc">/, <tt/<ref id="calloc" name="calloc">/ or <tt/<ref id="realloc" name="realloc">/. <tag/Notes/<itemize> <item>Passing a pointer to a block that was is not the result of one of the -allocation functions, or that has been free'd will give unpredicable results. +allocation functions, or that has been free'd will give unpredictable results. <item>The function is available only as a fastcall function; so, it may be used only in the presence of a prototype. </itemize> From 1377ba0d360aaa0cb505c7bd78129c2c7d4c4cb4 Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 23 May 2023 23:08:56 +0200 Subject: [PATCH 2152/2710] fix compute length for read and write for telestrat target --- libsrc/telestrat/read.s | 15 ++++++++------- libsrc/telestrat/write.s | 16 ++++++++-------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index f31909f45..b89f246cc 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -30,13 +30,14 @@ ldy ptr1+1 BRK_TELEMON XFREAD ; compute nb of bytes read - lda PTR_READ_DEST+1 sec - sbc ptr2+1 - tax - lda PTR_READ_DEST - sec - sbc ptr2 - ; here A and X contains number of bytes read + lda PTR_READ_DEST + sbc ptr2 + sta tmp1 + lda PTR_READ_DEST+1 + sbc ptr2+1 + tax + lda tmp1 + rts .endproc diff --git a/libsrc/telestrat/write.s b/libsrc/telestrat/write.s index 2ce2657ac..06524f749 100644 --- a/libsrc/telestrat/write.s +++ b/libsrc/telestrat/write.s @@ -42,16 +42,16 @@ next: ldy ptr3+1 ldx tmp1 ; send fd in X BRK_TELEMON XFWRITE + ; compute nb of bytes written - - - lda PTR_READ_DEST+1 sec - sbc ptr1+1 - tax - lda PTR_READ_DEST - sec - sbc ptr1 + lda PTR_READ_DEST + sbc ptr1 + sta tmp1 + lda PTR_READ_DEST+1 + sbc ptr1+1 + tax + lda tmp1 rts From 1ca9d7e9e707658e2777784fb607d3cabb48b25c Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Tue, 23 May 2023 23:15:23 +0200 Subject: [PATCH 2153/2710] fix tab --- libsrc/telestrat/read.s | 12 ++++++------ libsrc/telestrat/write.s | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index b89f246cc..1d2315dce 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -31,12 +31,12 @@ BRK_TELEMON XFREAD ; compute nb of bytes read sec - lda PTR_READ_DEST - sbc ptr2 - sta tmp1 - lda PTR_READ_DEST+1 - sbc ptr2+1 - tax + lda PTR_READ_DEST + sbc ptr2 + sta tmp1 + lda PTR_READ_DEST+1 + sbc ptr2+1 + tax lda tmp1 rts diff --git a/libsrc/telestrat/write.s b/libsrc/telestrat/write.s index 06524f749..16bc64d69 100644 --- a/libsrc/telestrat/write.s +++ b/libsrc/telestrat/write.s @@ -45,12 +45,12 @@ next: ; compute nb of bytes written sec - lda PTR_READ_DEST - sbc ptr1 - sta tmp1 - lda PTR_READ_DEST+1 - sbc ptr1+1 - tax + lda PTR_READ_DEST + sbc ptr1 + sta tmp1 + lda PTR_READ_DEST+1 + sbc ptr1+1 + tax lda tmp1 rts From 480600093cef2d67d5e39253364c258d6266300e Mon Sep 17 00:00:00 2001 From: jede <jede@oric.org> Date: Thu, 25 May 2023 18:09:03 +0200 Subject: [PATCH 2154/2710] fix pla/pha instead of tmp1 --- libsrc/telestrat/read.s | 4 ++-- libsrc/telestrat/write.s | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/telestrat/read.s b/libsrc/telestrat/read.s index 1d2315dce..736546363 100644 --- a/libsrc/telestrat/read.s +++ b/libsrc/telestrat/read.s @@ -33,11 +33,11 @@ sec lda PTR_READ_DEST sbc ptr2 - sta tmp1 + pha lda PTR_READ_DEST+1 sbc ptr2+1 tax - lda tmp1 + pla rts .endproc diff --git a/libsrc/telestrat/write.s b/libsrc/telestrat/write.s index 16bc64d69..37a896696 100644 --- a/libsrc/telestrat/write.s +++ b/libsrc/telestrat/write.s @@ -47,11 +47,11 @@ next: sec lda PTR_READ_DEST sbc ptr1 - sta tmp1 + pha lda PTR_READ_DEST+1 sbc ptr1+1 tax - lda tmp1 + pla rts From c8aa9cc70372accedf5c506ab48090d0890caf4f Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 29 May 2023 17:20:09 +0200 Subject: [PATCH 2155/2710] add struct assign check related to #2079 --- test/val/bug2079-struct-assign.c | 66 ++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 test/val/bug2079-struct-assign.c diff --git a/test/val/bug2079-struct-assign.c b/test/val/bug2079-struct-assign.c new file mode 100644 index 000000000..b8a41fe8b --- /dev/null +++ b/test/val/bug2079-struct-assign.c @@ -0,0 +1,66 @@ + +/* test struct assignment, of structs with a length of 3, which happen to be + a special case eg when passing/returning structs + related to bugs #2022, #2079 */ + +#include <stdio.h> +#include <stdlib.h> + +int failures = 0; + +struct foo { char a; char b; char c; }; +struct foo foo, bar; +void f3(void) +{ + foo.a = 6; + foo.b = 6; + foo.c = 6; + bar.a = 1; + bar.b = 2; + bar.c = 3; + foo = bar; + printf("%d %d %d, %d %d %d (1,2,3 1,2,3)\n", + foo.a, foo.b, foo.c, + bar.a, bar.b, bar.c); + if ((foo.a != 1) || (foo.b != 2) || (foo.c != 3) || + (bar.a != 1) || (bar.b != 2) || (bar.c != 3)) { + failures++; + } + foo.a = 3; + foo.b = 2; + foo.c = 1; + printf("%d %d %d, %d %d %d (3,2,1 1,2,3)\n", + foo.a, foo.b, foo.c, + bar.a, bar.b, bar.c); + if ((foo.a != 3) || (foo.b != 2) || (foo.c != 1) || + (bar.a != 1) || (bar.b != 2) || (bar.c != 3)) { + failures++; + } + bar.a = 5; + bar.b = 6; + bar.c = 7; + printf("%d %d %d, %d %d %d (3,2,1 5,6,7)\n", + foo.a, foo.b, foo.c, + bar.a, bar.b, bar.c); + if ((foo.a != 3) || (foo.b != 2) || (foo.c != 1) || + (bar.a != 5) || (bar.b != 6) || (bar.c != 7)) { + failures++; + } + bar = foo; + foo.a = 6; + foo.b = 6; + foo.c = 6; + printf("%d %d %d, %d %d %d (6,6,6 3,2,1)\n", + foo.a, foo.b, foo.c, + bar.a, bar.b, bar.c); + if ((foo.a != 6) || (foo.b != 6) || (foo.c != 6) || + (bar.a != 3) || (bar.b != 2) || (bar.c != 1)) { + failures++; + } +} + +int main(void) +{ + f3(); + return failures; +} From 59941d94642a6fc25c6392486fca2b7e4aae46bf Mon Sep 17 00:00:00 2001 From: MooingLemur <mooinglemur@users.noreply.github.com> Date: Thu, 15 Jun 2023 21:30:26 -0400 Subject: [PATCH 2156/2710] cx16: use KERNAL memsiz for MEMSIZE in asminc/cx16.inc --- asminc/cx16.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asminc/cx16.inc b/asminc/cx16.inc index be63780c8..d264add38 100644 --- a/asminc/cx16.inc +++ b/asminc/cx16.inc @@ -259,7 +259,7 @@ NLINES := $0387 ; Number of screen lines ; BASIC VARTAB := $03E1 ; Pointer to start of BASIC variables -MEMSIZE := $03E9 ; Pointer to highest BASIC RAM location (+1) +MEMSIZE := $0259 ; Pointer to highest BASIC RAM location (+1) ; --------------------------------------------------------------------------- ; Vector and other locations From 3e166c760dcd7dd071aa86f464ce480bf07504e9 Mon Sep 17 00:00:00 2001 From: baktragh <zylon@post.cz> Date: Mon, 26 Jun 2023 16:38:41 +0200 Subject: [PATCH 2157/2710] Update _atari5200os.h with POT shadows Update the OS struct with POT shadow registers, according to the https://web.archive.org/web/20120830055323/http://www.atarimuseum.com/videogames/consoles/5200/conv_to_5200.html document --- include/_atari5200os.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/include/_atari5200os.h b/include/_atari5200os.h index 5bba43016..88636dc7f 100644 --- a/include/_atari5200os.h +++ b/include/_atari5200os.h @@ -54,7 +54,15 @@ struct __os { unsigned char color2; // = $0E PF color 2 unsigned char color3; // = $0F PF color 3 unsigned char color4; // = $10 PF color 4 - unsigned char _free_1[0xEF]; // = $11-$FF User space + unsigned char pot0; // = $11 POT0 shadow + unsigned char pot1; // = $12 POT1 shadow + unsigned char pot2; // = $13 POT2 shadow + unsigned char pot3; // = $14 POT3 shadow + unsigned char pot4; // = $15 POT4 shadow + unsigned char pot5; // = $16 POT5 shadow + unsigned char pot6; // = $17 POT6 shadow + unsigned char pot7; // = $18 POT7 shadow + unsigned char _free_1[0xE7]; // = $19-$FF User space /*Stack*/ unsigned char stack[0x100]; // = $100-$1FF Stack From aaec2a627092f4bad90aa408258559ec341a209a Mon Sep 17 00:00:00 2001 From: baktragh <zylon@post.cz> Date: Mon, 26 Jun 2023 16:46:42 +0200 Subject: [PATCH 2158/2710] Update _atari5200os.h - Remove dangling spaces --- include/_atari5200os.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/include/_atari5200os.h b/include/_atari5200os.h index 88636dc7f..2e861e797 100644 --- a/include/_atari5200os.h +++ b/include/_atari5200os.h @@ -54,14 +54,14 @@ struct __os { unsigned char color2; // = $0E PF color 2 unsigned char color3; // = $0F PF color 3 unsigned char color4; // = $10 PF color 4 - unsigned char pot0; // = $11 POT0 shadow - unsigned char pot1; // = $12 POT1 shadow - unsigned char pot2; // = $13 POT2 shadow - unsigned char pot3; // = $14 POT3 shadow - unsigned char pot4; // = $15 POT4 shadow - unsigned char pot5; // = $16 POT5 shadow - unsigned char pot6; // = $17 POT6 shadow - unsigned char pot7; // = $18 POT7 shadow + unsigned char pot0; // = $11 POT0 shadow + unsigned char pot1; // = $12 POT1 shadow + unsigned char pot2; // = $13 POT2 shadow + unsigned char pot3; // = $14 POT3 shadow + unsigned char pot4; // = $15 POT4 shadow + unsigned char pot5; // = $16 POT5 shadow + unsigned char pot6; // = $17 POT6 shadow + unsigned char pot7; // = $18 POT7 shadow unsigned char _free_1[0xE7]; // = $19-$FF User space /*Stack*/ From 6c127d6a836ee409f9839224cf74f35eeafb96d7 Mon Sep 17 00:00:00 2001 From: baktragh <zylon@post.cz> Date: Sun, 2 Jul 2023 14:59:00 +0200 Subject: [PATCH 2159/2710] Update _atari5200os.h Update the page 0 symbols, synchronize the names with the _atarios.h, add locations used by Atari 5200 conio --- include/_atari5200os.h | 44 ++++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/include/_atari5200os.h b/include/_atari5200os.h index 2e861e797..d6f7d3875 100644 --- a/include/_atari5200os.h +++ b/include/_atari5200os.h @@ -44,25 +44,31 @@ struct __os { void* sdlst; // = $05,$06 Display list shadow }; - unsigned char sdmctl; // = $07 DMACTL shadow - unsigned char pcolr0; // = $08 PM color 0 - unsigned char pcolr1; // = $09 PM color 1 - unsigned char pcolr2; // = $0A PM color 2 - unsigned char pcolr3; // = $0B PM color 3 - unsigned char color0; // = $0C PF color 0 - unsigned char color1; // = $0D PF color 1 - unsigned char color2; // = $0E PF color 2 - unsigned char color3; // = $0F PF color 3 - unsigned char color4; // = $10 PF color 4 - unsigned char pot0; // = $11 POT0 shadow - unsigned char pot1; // = $12 POT1 shadow - unsigned char pot2; // = $13 POT2 shadow - unsigned char pot3; // = $14 POT3 shadow - unsigned char pot4; // = $15 POT4 shadow - unsigned char pot5; // = $16 POT5 shadow - unsigned char pot6; // = $17 POT6 shadow - unsigned char pot7; // = $18 POT7 shadow - unsigned char _free_1[0xE7]; // = $19-$FF User space + unsigned char sdmctl; // = $07 DMACTL shadow + unsigned char pcolr0; // = $08 PM color 0 + unsigned char pcolr1; // = $09 PM color 1 + unsigned char pcolr2; // = $0A PM color 2 + unsigned char pcolr3; // = $0B PM color 3 + unsigned char color0; // = $0C PF color 0 + unsigned char color1; // = $0D PF color 1 + unsigned char color2; // = $0E PF color 2 + unsigned char color3; // = $0F PF color 3 + unsigned char color4; // = $10 PF color 4 + unsigned char paddl0; // = $11 POT0 Shadow + unsigned char paddl1; // = $12 POT1 Shadow + unsigned char paddl2; // = $13 POT2 Shadow + unsigned char paddl3; // = $14 POT3 Shadow + unsigned char paddl4; // = $15 POT4 Shadow + unsigned char paddl5; // = $16 POT5 Shadow + unsigned char paddl6; // = $17 POT6 Shadow + unsigned char paddl7; // = $18 POT7 Shadow + + /*cc65 runtime zero page variables*/ + unsigned char rowcrs_5200; // = $19 Cursor row (conio) + unsigned char colcrs_5200; // = $1A Cursor column (conio) + unsigned char* savmsc; // = $1B/$1C Pointer to screen memory (conio) + + unsigned char _filler_1[0xE3]; // = $1D-$FF Filler /*Stack*/ unsigned char stack[0x100]; // = $100-$1FF Stack From 7a85473cb0dfcc180048c1c8892cb9bf039ca406 Mon Sep 17 00:00:00 2001 From: baktragh <zylon@post.cz> Date: Sun, 2 Jul 2023 15:16:33 +0200 Subject: [PATCH 2160/2710] Update _atari5200os.h Remove dangling spaces --- include/_atari5200os.h | 50 +++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/include/_atari5200os.h b/include/_atari5200os.h index d6f7d3875..196b69e56 100644 --- a/include/_atari5200os.h +++ b/include/_atari5200os.h @@ -44,31 +44,31 @@ struct __os { void* sdlst; // = $05,$06 Display list shadow }; - unsigned char sdmctl; // = $07 DMACTL shadow - unsigned char pcolr0; // = $08 PM color 0 - unsigned char pcolr1; // = $09 PM color 1 - unsigned char pcolr2; // = $0A PM color 2 - unsigned char pcolr3; // = $0B PM color 3 - unsigned char color0; // = $0C PF color 0 - unsigned char color1; // = $0D PF color 1 - unsigned char color2; // = $0E PF color 2 - unsigned char color3; // = $0F PF color 3 - unsigned char color4; // = $10 PF color 4 - unsigned char paddl0; // = $11 POT0 Shadow - unsigned char paddl1; // = $12 POT1 Shadow - unsigned char paddl2; // = $13 POT2 Shadow - unsigned char paddl3; // = $14 POT3 Shadow - unsigned char paddl4; // = $15 POT4 Shadow - unsigned char paddl5; // = $16 POT5 Shadow - unsigned char paddl6; // = $17 POT6 Shadow - unsigned char paddl7; // = $18 POT7 Shadow - - /*cc65 runtime zero page variables*/ - unsigned char rowcrs_5200; // = $19 Cursor row (conio) - unsigned char colcrs_5200; // = $1A Cursor column (conio) - unsigned char* savmsc; // = $1B/$1C Pointer to screen memory (conio) - - unsigned char _filler_1[0xE3]; // = $1D-$FF Filler + unsigned char sdmctl; // = $07 DMACTL shadow + unsigned char pcolr0; // = $08 PM color 0 + unsigned char pcolr1; // = $09 PM color 1 + unsigned char pcolr2; // = $0A PM color 2 + unsigned char pcolr3; // = $0B PM color 3 + unsigned char color0; // = $0C PF color 0 + unsigned char color1; // = $0D PF color 1 + unsigned char color2; // = $0E PF color 2 + unsigned char color3; // = $0F PF color 3 + unsigned char color4; // = $10 PF color 4 + unsigned char paddl0; // = $11 POT0 Shadow + unsigned char paddl1; // = $12 POT1 Shadow + unsigned char paddl2; // = $13 POT2 Shadow + unsigned char paddl3; // = $14 POT3 Shadow + unsigned char paddl4; // = $15 POT4 Shadow + unsigned char paddl5; // = $16 POT5 Shadow + unsigned char paddl6; // = $17 POT6 Shadow + unsigned char paddl7; // = $18 POT7 Shadow + + /*cc65 runtime zero page variables*/ + unsigned char rowcrs_5200; // = $19 Cursor row (conio) + unsigned char colcrs_5200; // = $1A Cursor column (conio) + unsigned char* savmsc; // = $1B/$1C Pointer to screen memory (conio) + + unsigned char _filler_1[0xE3]; // = $1D-$FF Filler /*Stack*/ unsigned char stack[0x100]; // = $100-$1FF Stack From 1f68846116fd1b1bb6b7ca1ae8e9c45974bce6b9 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin.leroy-mira@sigfox.com> Date: Fri, 18 Aug 2023 11:12:16 +0200 Subject: [PATCH 2161/2710] Avoid using mli.s to initcwd --- libsrc/apple2/initcwd.s | 43 ++++++++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 11 deletions(-) diff --git a/libsrc/apple2/initcwd.s b/libsrc/apple2/initcwd.s index 7a12bc52a..75224d019 100644 --- a/libsrc/apple2/initcwd.s +++ b/libsrc/apple2/initcwd.s @@ -3,22 +3,39 @@ ; .export initcwd - .import __cwd + .import __cwd, __dos_type .include "zeropage.inc" + .include "apple2.inc" .include "mli.inc" -initcwd: - ; Set static prefix buffer - lda #<__cwd - ldx #>__cwd - sta mliparam + MLI::PREFIX::PATHNAME - stx mliparam + MLI::PREFIX::PATHNAME+1 +mli_parameters: + .byte $01 ; number of parameters + .addr __cwd ; address of parameter - ; Get current working directory - lda #GET_PREFIX_CALL - ldx #PREFIX_COUNT - jsr callmli +initcwd: + ; Check for ProDOS 8 + lda __dos_type + beq oserr + + ; Save random counter + lda RNDL + pha + lda RNDH + pha + + ; Call MLI + jsr $BF00 ; MLI call entry point + .byte GET_PREFIX_CALL ; MLI command + .addr mli_parameters ; MLI parameter + + ; Restore random counter + tax + pla + sta RNDH + pla + sta RNDL + txa ; Check for null prefix ldx __cwd @@ -39,3 +56,7 @@ initcwd: sta __cwd,x done: rts + +oserr: lda #$01 ; "Bad system call number" + sec + rts From 148be69f9705ce78900b2f9bbfb560da8c027b39 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin.leroy-mira@sigfox.com> Date: Fri, 18 Aug 2023 14:36:52 +0200 Subject: [PATCH 2162/2710] Optimize and fix comments (thanks to Oliver Schmidt) --- libsrc/apple2/initcwd.s | 20 ++++++++++---------- libsrc/apple2/syschdir.s | 3 ++- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/libsrc/apple2/initcwd.s b/libsrc/apple2/initcwd.s index 75224d019..03e13bcfb 100644 --- a/libsrc/apple2/initcwd.s +++ b/libsrc/apple2/initcwd.s @@ -9,14 +9,10 @@ .include "apple2.inc" .include "mli.inc" -mli_parameters: - .byte $01 ; number of parameters - .addr __cwd ; address of parameter - initcwd: ; Check for ProDOS 8 lda __dos_type - beq oserr + beq done ; Save random counter lda RNDL @@ -25,17 +21,19 @@ initcwd: pha ; Call MLI + ; We're not using mli.s' callmli because its + ; mliparam is in BSS and this will be called + ; before LC code is moved to the Language Card. + jsr $BF00 ; MLI call entry point .byte GET_PREFIX_CALL ; MLI command .addr mli_parameters ; MLI parameter ; Restore random counter - tax pla sta RNDH pla sta RNDL - txa ; Check for null prefix ldx __cwd @@ -57,6 +55,8 @@ initcwd: done: rts -oserr: lda #$01 ; "Bad system call number" - sec - rts + .rodata + +mli_parameters: + .byte $01 ; Number of parameters + .addr __cwd ; Address of parameter diff --git a/libsrc/apple2/syschdir.s b/libsrc/apple2/syschdir.s index 8afc3af0b..b3f81e2a5 100644 --- a/libsrc/apple2/syschdir.s +++ b/libsrc/apple2/syschdir.s @@ -29,7 +29,8 @@ __syschdir: bcs cleanup ; Update current working directory - jsr initcwd ; Returns with A = 0 + jsr initcwd + lda #$00 ; Cleanup name cleanup:jsr popname ; Preserves A From 39619b629d3614f6b284865f5c254ebda5272f2b Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 19 Aug 2023 15:39:16 +0200 Subject: [PATCH 2163/2710] fix docs on .version (forgot to update it when __CC65__ was fixed) --- doc/ca65.sgml | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index b4ef3e188..982c68949 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -1367,17 +1367,22 @@ writable. Reading this pseudo variable will give the assembler version according to the following formula: - VER_MAJOR*$100 + VER_MINOR*$10 + <tt>(VER_MAJOR * 0x100) + VER_MINOR</tt> - It may be used to encode the assembler version or check the assembler for - special features not available with older versions. + The upper 8 bits are the major-, the lower 8 bits are the minor version. Example: - Version 2.14 of the assembler will return $2E0 as numerical constant when - reading the pseudo variable <tt/.VERSION/. - + For example, version 47.11 of the assembler would have this macro defined as + <tt/0x2f0b/. + Note: until 2.19 this pseudo variable was defined as <tt>(VER_MAJOR * 0x100) + VER_MINOR * 0x10</tt> - + which resulted in broken values starting at version 2.16 of the assembler. For + this reason the value of this pseudo variable is considered purely informal - you should + not use it to check for a specific assembler version and use different code + according to the detected version - please update your code to work with the + recent version of the assembler instead (There is very little reason to not use + the most recent version - and even less to support older versions in your code). <sect>Pseudo functions<label id="pseudo-functions"><p> From 2431fb7d85b8aa74153e6e8343bb577e28cc8832 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 19 Aug 2023 13:08:46 -0400 Subject: [PATCH 2164/2710] correct INIT segment semantic is bss, make this consistent across all default cfg --- cfg/apple2-hgr.cfg | 2 +- cfg/apple2-overlay.cfg | 2 +- cfg/apple2-system.cfg | 2 +- cfg/apple2.cfg | 2 +- cfg/apple2enh-hgr.cfg | 2 +- cfg/apple2enh-overlay.cfg | 2 +- cfg/apple2enh-system.cfg | 2 +- cfg/apple2enh.cfg | 2 +- cfg/atari-overlay.cfg | 2 +- cfg/atari-xex.cfg | 2 +- cfg/atari.cfg | 2 +- cfg/atarixl-largehimem.cfg | 2 +- cfg/atarixl-overlay.cfg | 2 +- cfg/atarixl-xex.cfg | 2 +- cfg/atarixl.cfg | 2 +- cfg/atmos.cfg | 2 +- cfg/c64-overlay.cfg | 2 +- cfg/c64.cfg | 2 +- cfg/creativision.cfg | 2 +- cfg/cx16-bank.cfg | 2 +- cfg/cx16.cfg | 2 +- cfg/telestrat.cfg | 2 +- libsrc/creativision/cputc.s | 6 ------ 23 files changed, 22 insertions(+), 28 deletions(-) diff --git a/cfg/apple2-hgr.cfg b/cfg/apple2-hgr.cfg index cfe577e00..55072ad89 100644 --- a/cfg/apple2-hgr.cfg +++ b/cfg/apple2-hgr.cfg @@ -27,7 +27,7 @@ SEGMENTS { CODE: load = MAIN, type = ro start = $4000; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw; + INIT: load = MAIN, type = bss; ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/apple2-overlay.cfg b/cfg/apple2-overlay.cfg index a0b7678c1..2ec798bd9 100644 --- a/cfg/apple2-overlay.cfg +++ b/cfg/apple2-overlay.cfg @@ -43,7 +43,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw; + INIT: load = MAIN, type = bss; ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/apple2-system.cfg b/cfg/apple2-system.cfg index 0170feb93..1c11b6949 100644 --- a/cfg/apple2-system.cfg +++ b/cfg/apple2-system.cfg @@ -22,7 +22,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw; + INIT: load = MAIN, type = bss; ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/apple2.cfg b/cfg/apple2.cfg index a6809cf89..14e3a8f55 100644 --- a/cfg/apple2.cfg +++ b/cfg/apple2.cfg @@ -26,7 +26,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw; + INIT: load = MAIN, type = bss; ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/apple2enh-hgr.cfg b/cfg/apple2enh-hgr.cfg index cfe577e00..55072ad89 100644 --- a/cfg/apple2enh-hgr.cfg +++ b/cfg/apple2enh-hgr.cfg @@ -27,7 +27,7 @@ SEGMENTS { CODE: load = MAIN, type = ro start = $4000; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw; + INIT: load = MAIN, type = bss; ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/apple2enh-overlay.cfg b/cfg/apple2enh-overlay.cfg index a0b7678c1..2ec798bd9 100644 --- a/cfg/apple2enh-overlay.cfg +++ b/cfg/apple2enh-overlay.cfg @@ -43,7 +43,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw; + INIT: load = MAIN, type = bss; ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/apple2enh-system.cfg b/cfg/apple2enh-system.cfg index 0170feb93..1c11b6949 100644 --- a/cfg/apple2enh-system.cfg +++ b/cfg/apple2enh-system.cfg @@ -22,7 +22,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw; + INIT: load = MAIN, type = bss; ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/apple2enh.cfg b/cfg/apple2enh.cfg index a6809cf89..14e3a8f55 100644 --- a/cfg/apple2enh.cfg +++ b/cfg/apple2enh.cfg @@ -26,7 +26,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw; + INIT: load = MAIN, type = bss; ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/atari-overlay.cfg b/cfg/atari-overlay.cfg index 9311a1b22..60f98e453 100644 --- a/cfg/atari-overlay.cfg +++ b/cfg/atari-overlay.cfg @@ -52,7 +52,7 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw, optional = yes; + INIT: load = MAIN, type = bss, optional = yes; BSS: load = MAIN, type = bss, define = yes; AUTOSTRT: load = TRAILER, type = ro; OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes; diff --git a/cfg/atari-xex.cfg b/cfg/atari-xex.cfg index cabde3708..deab5c7a5 100644 --- a/cfg/atari-xex.cfg +++ b/cfg/atari-xex.cfg @@ -36,7 +36,7 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw, optional = yes; + INIT: load = MAIN, type = bss, optional = yes; BSS: load = MAIN, type = bss, define = yes; } FEATURES { diff --git a/cfg/atari.cfg b/cfg/atari.cfg index 106c75e63..37337ea53 100644 --- a/cfg/atari.cfg +++ b/cfg/atari.cfg @@ -40,7 +40,7 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw, optional = yes; + INIT: load = MAIN, type = bss, optional = yes; BSS: load = MAIN, type = bss, define = yes; AUTOSTRT: load = TRAILER, type = ro; } diff --git a/cfg/atarixl-largehimem.cfg b/cfg/atarixl-largehimem.cfg index 38fb68db9..8f70597aa 100644 --- a/cfg/atarixl-largehimem.cfg +++ b/cfg/atarixl-largehimem.cfg @@ -67,7 +67,7 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw, optional = yes; + INIT: load = MAIN, type = bss, optional = yes; BSS: load = MAIN, type = bss, define = yes; AUTOSTRT: load = TRAILER, type = ro; } diff --git a/cfg/atarixl-overlay.cfg b/cfg/atarixl-overlay.cfg index 339228ea0..3b8da4256 100644 --- a/cfg/atarixl-overlay.cfg +++ b/cfg/atarixl-overlay.cfg @@ -78,7 +78,7 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw, optional = yes; + INIT: load = MAIN, type = bss, optional = yes; BSS: load = MAIN, type = bss, define = yes; AUTOSTRT: load = TRAILER, type = ro; diff --git a/cfg/atarixl-xex.cfg b/cfg/atarixl-xex.cfg index 1b76855d0..853096c6f 100644 --- a/cfg/atarixl-xex.cfg +++ b/cfg/atarixl-xex.cfg @@ -58,7 +58,7 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw, optional = yes; + INIT: load = MAIN, type = bss, optional = yes; BSS: load = MAIN, type = bss, define = yes; SRPREPHDR: load = UNUSED, type = ro; SRPREPTRL: load = UNUSED, type = ro; diff --git a/cfg/atarixl.cfg b/cfg/atarixl.cfg index cece23555..1517afb5a 100644 --- a/cfg/atarixl.cfg +++ b/cfg/atarixl.cfg @@ -65,7 +65,7 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw, optional = yes; + INIT: load = MAIN, type = bss, optional = yes; BSS: load = MAIN, type = bss, define = yes; AUTOSTRT: load = TRAILER, type = ro; } diff --git a/cfg/atmos.cfg b/cfg/atmos.cfg index 35f184f4f..b06366fee 100644 --- a/cfg/atmos.cfg +++ b/cfg/atmos.cfg @@ -23,7 +23,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw; + INIT: load = MAIN, type = bss; ONCE: load = MAIN, type = ro, define = yes; BASTAIL: load = MAIN, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/c64-overlay.cfg b/cfg/c64-overlay.cfg index 0f42434ad..39d8f68e8 100644 --- a/cfg/c64-overlay.cfg +++ b/cfg/c64-overlay.cfg @@ -44,7 +44,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw; + INIT: load = MAIN, type = bss; ONCE: load = MAIN, type = ro, define = yes; BSS: load = BSS, type = bss, define = yes; OVL1ADDR: load = OVL1ADDR, type = ro; diff --git a/cfg/c64.cfg b/cfg/c64.cfg index 5bd8d8240..00a050524 100644 --- a/cfg/c64.cfg +++ b/cfg/c64.cfg @@ -23,7 +23,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw; + INIT: load = MAIN, type = bss; ONCE: load = MAIN, type = ro, define = yes; BSS: load = BSS, type = bss, define = yes; } diff --git a/cfg/creativision.cfg b/cfg/creativision.cfg index 2eb9ac427..f3b7ac0f4 100644 --- a/cfg/creativision.cfg +++ b/cfg/creativision.cfg @@ -11,10 +11,10 @@ SEGMENTS { ZP: load = ZP, type = zp, optional = yes; VECTORS: load = ROM, run = RAM, type = rw, define = yes; DATA: load = ROM, run = RAM, type = rw, define = yes, start = $0204; + INIT: load = RAM, type = bss, optional = yes; BSS: load = RAM, type = bss, define = yes; ONCE: load = ROM, type = ro, optional = yes; CODE: load = ROM, type = ro; - INIT: load = ROM, type = ro; RODATA: load = ROM, type = ro; AUDIO: load = ROM, type = ro, optional = yes, start = $BF00; SETUP: load = ROM, type = ro, start = $BFE8; diff --git a/cfg/cx16-bank.cfg b/cfg/cx16-bank.cfg index d3c2c02ae..0aa6fc555 100644 --- a/cfg/cx16-bank.cfg +++ b/cfg/cx16-bank.cfg @@ -57,7 +57,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw, optional = yes; + INIT: load = MAIN, type = bss,optional = yes; ONCE: load = MAIN, type = ro, define = yes; BSS: load = BSS, type = bss, define = yes; BRAM01ADDR: load = BRAM01ADDR, type = ro, optional = yes; diff --git a/cfg/cx16.cfg b/cfg/cx16.cfg index 4b6025fb6..0f83d4c20 100644 --- a/cfg/cx16.cfg +++ b/cfg/cx16.cfg @@ -24,7 +24,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw, optional = yes; + INIT: load = MAIN, type = bss,optional = yes; ONCE: load = MAIN, type = ro, define = yes; BSS: load = BSS, type = bss, define = yes; } diff --git a/cfg/telestrat.cfg b/cfg/telestrat.cfg index bd720fb8d..593197866 100644 --- a/cfg/telestrat.cfg +++ b/cfg/telestrat.cfg @@ -22,7 +22,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = rw; + INIT: load = MAIN, type = bss; ONCE: load = MAIN, type = ro, define = yes; BASTAIL: load = MAIN, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/libsrc/creativision/cputc.s b/libsrc/creativision/cputc.s index 437b738b2..4389234c1 100644 --- a/libsrc/creativision/cputc.s +++ b/libsrc/creativision/cputc.s @@ -95,12 +95,6 @@ IS_UPPER: BAD_CHAR: jmp plot -;----------------------------------------------------------------------------- -; Initialize the conio subsystem. "INIT" segment is nothing special on the -; Creativision, it is part of the "ROM" memory. - -.segment "INIT" - initconio: lda #$0 sta SCREEN_PTR From 07f08fc547b7e0f5b37aef23dd482a3d5f483352 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 19 Aug 2023 14:36:30 -0400 Subject: [PATCH 2165/2710] tests verifying jmp (indirect) page crossing error on 6502, and the lack of error for other CPU types --- test/asm/err/jmp-indirect-6502-error.s | 4 ++++ test/asm/val/jmp-indirect-success.s | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 test/asm/err/jmp-indirect-6502-error.s create mode 100644 test/asm/val/jmp-indirect-success.s diff --git a/test/asm/err/jmp-indirect-6502-error.s b/test/asm/err/jmp-indirect-6502-error.s new file mode 100644 index 000000000..aadc37b30 --- /dev/null +++ b/test/asm/err/jmp-indirect-6502-error.s @@ -0,0 +1,4 @@ +; test that jmp (indirect) on a page boundary will give an error for 6502 CPU + +.p02 +jmp ($10FF) diff --git a/test/asm/val/jmp-indirect-success.s b/test/asm/val/jmp-indirect-success.s new file mode 100644 index 000000000..0cdc8c32c --- /dev/null +++ b/test/asm/val/jmp-indirect-success.s @@ -0,0 +1,18 @@ +; test that jmp (indirect) on a page boundary will not give an error for non-6502 CPUs + +.pc02 +jmp ($10FF) + +.psc02 +jmp ($10FF) + +.p816 +jmp ($10FF) + +; main always returns success (the tested issue is only whether the assembly errors) +.import _exit +.export _main +_main: + lda #0 + tax + jmp _exit From f31d8efc1e8a921b098142ec4d501753e59cc4d2 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 19 Aug 2023 15:07:32 -0400 Subject: [PATCH 2166/2710] tabs are forbidden --- test/asm/val/jmp-indirect-success.s | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/asm/val/jmp-indirect-success.s b/test/asm/val/jmp-indirect-success.s index 0cdc8c32c..592666576 100644 --- a/test/asm/val/jmp-indirect-success.s +++ b/test/asm/val/jmp-indirect-success.s @@ -13,6 +13,6 @@ jmp ($10FF) .import _exit .export _main _main: - lda #0 - tax - jmp _exit + lda #0 + tax + jmp _exit From 28ffe2f59bfc988ea7f3b7f0ed8adf3d3ec8b43e Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 19 Aug 2023 15:39:51 -0400 Subject: [PATCH 2167/2710] add jmp page crossing to --relax-checks, document it, fix --relax-checks documentation (segment branch error is not suppressed) --- doc/ca65.sgml | 13 ++++++++----- src/ca65/instr.c | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index b4ef3e188..29e04a29e 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -120,7 +120,7 @@ Long options: --list-bytes n Maximum number of bytes per listing line --memory-model model Set the memory model --pagelength n Set the page length for the listing - --relax-checks Relax some checks (see docs) + --relax-checks Disables some error checks (see <ref id="option--relax-checks" name="below">) --smart Enable smart mode --target sys Set the target system --verbose Increase verbosity @@ -265,14 +265,17 @@ Here is a description of all the command line options: <label id="option--relax-checks"> <tag><tt>--relax-checks</tt></tag> - Relax some checks done by the assembler. This will allow code that is an + Disables some error checks done by the assembler. This will allow code that is an error in most cases and flagged as such by the assembler, but can be valid in special situations. - Examples are: + Disabled checks are: <itemize> -<item>Short branches between two different segments. -<item>Byte sized address loads where the address is not a zeropage address. +<item>Address vs. fragment size: a byte sized load from an non-zeropage + address is truncated instead of producing an error. +<item>Indirect jump on page boundary: <tt>jmp (label)</tt> on a label that + resides on a page boundary (<tt>$xxFF</tt>) fetches the second byte from the + wrong address on 6502 CPUs, now allowed instead of producing an error. </itemize> diff --git a/src/ca65/instr.c b/src/ca65/instr.c index 0afa281b4..da6bd6e44 100644 --- a/src/ca65/instr.c +++ b/src/ca65/instr.c @@ -1618,7 +1618,7 @@ static void PutJMP (const InsDesc* Ins) if (EvalEA (Ins, &A)) { /* Check for indirect addressing */ - if ((A.AddrModeBit & AM65_ABS_IND) && (CPU < CPU_65SC02)) { + if ((A.AddrModeBit & AM65_ABS_IND) && (CPU < CPU_65SC02) && (RelaxChecks == 0)) { /* Compare the low byte of the expression to 0xFF to check for ** a page cross. Be sure to use a copy of the expression otherwise From 97e59b0756eead4faa5a75185928c3c9e6cdd0fe Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 19 Aug 2023 15:50:22 -0400 Subject: [PATCH 2168/2710] ref link doesn't work within the usage verb --- doc/ca65.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 29e04a29e..dc727eb49 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -120,7 +120,7 @@ Long options: --list-bytes n Maximum number of bytes per listing line --memory-model model Set the memory model --pagelength n Set the page length for the listing - --relax-checks Disables some error checks (see <ref id="option--relax-checks" name="below">) + --relax-checks Disables some error checks --smart Enable smart mode --target sys Set the target system --verbose Increase verbosity From a2c115fc3effb3b7290478c5e01bab7e156eba23 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin.leroy-mira@sigfox.com> Date: Sat, 26 Aug 2023 15:35:28 +0200 Subject: [PATCH 2169/2710] Build libs with debug symbols --- libsrc/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/Makefile b/libsrc/Makefile index 0873d019f..cf7389d51 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -131,8 +131,8 @@ $(TARGETS): | ../lib else # TARGET -CA65FLAGS = -CC65FLAGS = -Or -W error +CA65FLAGS = -g +CC65FLAGS = -g -Or -W error EXTZP = cbm510 \ cbm610 \ From 8a140e6503a1972214fdeb1f28f47b966f786794 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin.leroy-mira@sigfox.com> Date: Sat, 2 Sep 2023 11:08:15 +0200 Subject: [PATCH 2170/2710] Conio: 65c02 optimisations cputc: -2 cycles per char, -2 cycles per carriage return cputs: -5 cycles per char, -3 cycles on cputsxy vcprintf: -6 cycles per char --- libsrc/apple2/cputc.s | 18 +++++++++++++----- libsrc/conio/cputs.s | 38 ++++++++++++++++++++++++++++---------- libsrc/conio/vcprintf.s | 37 ++++++++++++++++++++++++++++--------- 3 files changed, 69 insertions(+), 24 deletions(-) diff --git a/libsrc/apple2/cputc.s b/libsrc/apple2/cputc.s index 30383fcfe..035b1c047 100644 --- a/libsrc/apple2/cputc.s +++ b/libsrc/apple2/cputc.s @@ -14,6 +14,8 @@ .include "apple2.inc" + .macpack cpu + .segment "ONCE" .ifdef __APPLE2ENH__ @@ -51,8 +53,13 @@ cputdirect: cmp WNDWDTH bcc :+ jsr newline -left: lda #$00 ; Goto left edge of screen +left: + .if (.cpu .bitand CPU_ISET_65SC02) + stz CH ; Goto left edge of screen + .else + lda #$00 ; Goto left edge of screen sta CH + .endif : rts newline: @@ -78,17 +85,18 @@ mask: and INVFLG ; Apply normal, inverse, flash putchardirect: pha - ldy CH .ifdef __APPLE2ENH__ + lda CH bit RD80VID ; In 80 column mode? bpl put ; No, just go ahead - tya lsr ; Div by 2 - tay bcs put ; Odd cols go in main memory bit HISCR ; Assume SET80COL +put: tay + .else + ldy CH .endif -put: lda (BASL),Y ; Get current character + lda (BASL),Y ; Get current character tax ; Return old character for _cgetc pla sta (BASL),Y diff --git a/libsrc/conio/cputs.s b/libsrc/conio/cputs.s index 41191a0b0..62e757b84 100644 --- a/libsrc/conio/cputs.s +++ b/libsrc/conio/cputs.s @@ -8,28 +8,46 @@ .export _cputsxy, _cputs .import gotoxy, _cputc .importzp ptr1, tmp1 + .macpack cpu _cputsxy: sta ptr1 ; Save s for later stx ptr1+1 jsr gotoxy ; Set cursor, pop x and y +.if (.cpu .bitand CPU_ISET_65SC02) + bra L0 ; Same as cputs... +.else jmp L0 ; Same as cputs... +.endif _cputs: sta ptr1 ; Save s stx ptr1+1 -L0: ldy #0 -L1: lda (ptr1),y - beq L9 ; Jump if done + +.if (.cpu .bitand CPU_ISET_65SC02) + +L0: lda (ptr1) ; (5) + beq L9 ; (7) Jump if done + jsr _cputc ; (13) Output char, advance cursor + inc ptr1 ; (18) Bump low byte + bne L0 ; (20) Next char + inc ptr1+1 ; (25) Bump high byte + bne L0 + +.else + +L0: ldy #0 ; (2) +L1: lda (ptr1),y ; (7) + beq L9 ; (9) Jump if done iny - sty tmp1 ; Save offset - jsr _cputc ; Output char, advance cursor - ldy tmp1 ; Get offset - bne L1 ; Next char - inc ptr1+1 ; Bump high byte + sty tmp1 ; (14) Save offset + jsr _cputc ; (20) Output char, advance cursor + ldy tmp1 ; (23) Get offset + bne L1 ; (25) Next char + inc ptr1+1 ; (30) Bump high byte bne L1 +.endif + ; Done L9: rts - - diff --git a/libsrc/conio/vcprintf.s b/libsrc/conio/vcprintf.s index 084efe089..595a2d2c5 100644 --- a/libsrc/conio/vcprintf.s +++ b/libsrc/conio/vcprintf.s @@ -10,7 +10,7 @@ .importzp sp, ptr1, ptr2, ptr3, tmp1 .macpack generic - + .macpack cpu .data @@ -74,21 +74,40 @@ out: jsr popax ; count ; Loop outputting characters +.if (.cpu .bitand CPU_ISET_65SC02) + @L1: dec outdesc+6 beq @L4 -@L2: ldy tmp1 - lda (ptr1),y - iny - bne @L3 - inc ptr1+1 -@L3: sty tmp1 - jsr _cputc - jmp @L1 +@L2: lda (ptr1) ; (5) + inc ptr1 ; (10) + bne @L3 ; (12) + inc ptr1+1 ; (17) +@L3: jsr _cputc ; (23) + bra @L1 ; (26) @L4: dec outdesc+7 bne @L2 rts +.else + +@L1: dec outdesc+6 + beq @L4 +@L2: ldy tmp1 ; (3) + lda (ptr1),y ; (8) + iny ; (10) + bne @L3 ; (12) + inc ptr1+1 ; (17) +@L3: sty tmp1 ; (20) + jsr _cputc ; (26) + jmp @L1 ; (32) + +@L4: dec outdesc+7 + bne @L2 + rts + +.endif + ; ---------------------------------------------------------------------------- ; vcprintf - formatted console i/o ; From 4ebc3b8b044ec1e48ea98a96b4355c42c0d7fa14 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Sun, 3 Sep 2023 20:47:48 +0200 Subject: [PATCH 2171/2710] Don't mix apple2 and apple2enh --- doc/apple2.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index 63b40c6f8..0d3ec34e5 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -603,7 +603,7 @@ url="ca65.html" name="assembler manual">. The header file <tt/apple2_filetype.h/ also defines many values that can be used to set these variables. It is included in - <tt/apple2.h/, which is in turn included in <tt/apple2enh.h/. + <tt/apple2.h/. <tag>Example</tag> From e28e32129ae5deef0c8ae18886d403f72b4eea68 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Mon, 4 Sep 2023 20:38:05 +0200 Subject: [PATCH 2172/2710] Added missing detail --- doc/apple2enh.sgml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 15ceed04f..932aae52d 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -21,7 +21,8 @@ as it comes with the cc65 C compiler. It describes the memory layout, enhanced Apple //e specific header files, available drivers, and any pitfalls specific to that platform. -Please note that enhanced Apple //e specific functions are just mentioned +Please note that this target requires a 65C02 or 65816 CPU, +enhanced Apple //e specific functions are just mentioned here, they are described in detail in the separate <url url="funcref.html" name="function reference">. Even functions marked as "platform dependent" may be available on more than one platform. Please see the function reference for From d4c4786ff045e38876c9b9bd399524b44f115505 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 5 Sep 2023 00:24:18 -0400 Subject: [PATCH 2173/2710] undo change of INIT to bss for configurations that were also using rw to reserve space, add a comment documenting the reason --- cfg/apple2-hgr.cfg | 2 +- cfg/apple2-overlay.cfg | 2 +- cfg/apple2-system.cfg | 2 +- cfg/apple2.cfg | 2 +- cfg/apple2enh-hgr.cfg | 2 +- cfg/apple2enh-overlay.cfg | 2 +- cfg/apple2enh-system.cfg | 2 +- cfg/apple2enh.cfg | 2 +- cfg/atmos.cfg | 2 +- cfg/c64-overlay.cfg | 2 +- cfg/c64.cfg | 2 +- cfg/cx16-bank.cfg | 2 +- cfg/cx16.cfg | 2 +- cfg/telestrat.cfg | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/cfg/apple2-hgr.cfg b/cfg/apple2-hgr.cfg index 55072ad89..109fbe4f6 100644 --- a/cfg/apple2-hgr.cfg +++ b/cfg/apple2-hgr.cfg @@ -27,7 +27,7 @@ SEGMENTS { CODE: load = MAIN, type = ro start = $4000; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss; + INIT: load = MAIN, type = rw; # uninitialized, but reserves output space ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/apple2-overlay.cfg b/cfg/apple2-overlay.cfg index 2ec798bd9..754ece90f 100644 --- a/cfg/apple2-overlay.cfg +++ b/cfg/apple2-overlay.cfg @@ -43,7 +43,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss; + INIT: load = MAIN, type = rw; # uninitialized, but reserves output space ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/apple2-system.cfg b/cfg/apple2-system.cfg index 1c11b6949..3dd94d793 100644 --- a/cfg/apple2-system.cfg +++ b/cfg/apple2-system.cfg @@ -22,7 +22,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss; + INIT: load = MAIN, type = rw; # uninitialized, but reserves output space ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/apple2.cfg b/cfg/apple2.cfg index 14e3a8f55..19932b1f9 100644 --- a/cfg/apple2.cfg +++ b/cfg/apple2.cfg @@ -26,7 +26,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss; + INIT: load = MAIN, type = rw; # uninitialized, but reserves output space ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/apple2enh-hgr.cfg b/cfg/apple2enh-hgr.cfg index 55072ad89..109fbe4f6 100644 --- a/cfg/apple2enh-hgr.cfg +++ b/cfg/apple2enh-hgr.cfg @@ -27,7 +27,7 @@ SEGMENTS { CODE: load = MAIN, type = ro start = $4000; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss; + INIT: load = MAIN, type = rw; # uninitialized, but reserves output space ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/apple2enh-overlay.cfg b/cfg/apple2enh-overlay.cfg index 2ec798bd9..754ece90f 100644 --- a/cfg/apple2enh-overlay.cfg +++ b/cfg/apple2enh-overlay.cfg @@ -43,7 +43,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss; + INIT: load = MAIN, type = rw; # uninitialized, but reserves output space ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/apple2enh-system.cfg b/cfg/apple2enh-system.cfg index 1c11b6949..3dd94d793 100644 --- a/cfg/apple2enh-system.cfg +++ b/cfg/apple2enh-system.cfg @@ -22,7 +22,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss; + INIT: load = MAIN, type = rw; # uninitialized, but reserves output space ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/apple2enh.cfg b/cfg/apple2enh.cfg index 14e3a8f55..19932b1f9 100644 --- a/cfg/apple2enh.cfg +++ b/cfg/apple2enh.cfg @@ -26,7 +26,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss; + INIT: load = MAIN, type = rw; # uninitialized, but reserves output space ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/atmos.cfg b/cfg/atmos.cfg index b06366fee..4c370903a 100644 --- a/cfg/atmos.cfg +++ b/cfg/atmos.cfg @@ -23,7 +23,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss; + INIT: load = MAIN, type = rw; # uninitialized, but reserves output space ONCE: load = MAIN, type = ro, define = yes; BASTAIL: load = MAIN, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; diff --git a/cfg/c64-overlay.cfg b/cfg/c64-overlay.cfg index 39d8f68e8..ae760b30c 100644 --- a/cfg/c64-overlay.cfg +++ b/cfg/c64-overlay.cfg @@ -44,7 +44,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss; + INIT: load = MAIN, type = rw; # uninitialized, but reserves output space ONCE: load = MAIN, type = ro, define = yes; BSS: load = BSS, type = bss, define = yes; OVL1ADDR: load = OVL1ADDR, type = ro; diff --git a/cfg/c64.cfg b/cfg/c64.cfg index 00a050524..59cadd46b 100644 --- a/cfg/c64.cfg +++ b/cfg/c64.cfg @@ -23,7 +23,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss; + INIT: load = MAIN, type = rw; # uninitialized, but reserves output space ONCE: load = MAIN, type = ro, define = yes; BSS: load = BSS, type = bss, define = yes; } diff --git a/cfg/cx16-bank.cfg b/cfg/cx16-bank.cfg index 0aa6fc555..264b6fcba 100644 --- a/cfg/cx16-bank.cfg +++ b/cfg/cx16-bank.cfg @@ -57,7 +57,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss,optional = yes; + INIT: load = MAIN, type = rw, optional = yes; # uninitialized, but reserves output space ONCE: load = MAIN, type = ro, define = yes; BSS: load = BSS, type = bss, define = yes; BRAM01ADDR: load = BRAM01ADDR, type = ro, optional = yes; diff --git a/cfg/cx16.cfg b/cfg/cx16.cfg index 0f83d4c20..a160a6718 100644 --- a/cfg/cx16.cfg +++ b/cfg/cx16.cfg @@ -24,7 +24,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss,optional = yes; + INIT: load = MAIN, type = rw, optional = yes; # uninitialized, but reserves output space ONCE: load = MAIN, type = ro, define = yes; BSS: load = BSS, type = bss, define = yes; } diff --git a/cfg/telestrat.cfg b/cfg/telestrat.cfg index 593197866..52b982eef 100644 --- a/cfg/telestrat.cfg +++ b/cfg/telestrat.cfg @@ -22,7 +22,7 @@ SEGMENTS { CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss; + INIT: load = MAIN, type = rw; # uninitialized, but reserves output space ONCE: load = MAIN, type = ro, define = yes; BASTAIL: load = MAIN, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; From 30b80548d4871cb0dea952a70b608d24dcb5fe91 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Wed, 6 Sep 2023 12:16:14 +0200 Subject: [PATCH 2174/2710] Update README.md For the sake of completeness --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index e0e2c24e7..16e246342 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,10 @@ For details look at the [Website](https://cc65.github.io). ## People +Project founder: + +* Ulrich von Bassewitz + Core team members: * [Christian Groessler](https://github.com/groessler): Atari, Atari5200, and CreatiVision library Maintainer From 1a6e20ca6e8a95238e0a9ef848e52698bfeedf46 Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Wed, 6 Sep 2023 14:47:14 +0200 Subject: [PATCH 2175/2710] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 16e246342..3e04158e1 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ For details look at the [Website](https://cc65.github.io). Project founder: -* Ulrich von Bassewitz +* Ullrich von Bassewitz Core team members: From dfe7562f76185b141795f1db1bad905a5f4b1acc Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 6 Sep 2023 08:09:00 +0200 Subject: [PATCH 2176/2710] Add ntohs, htons, ntohl, htons. --- doc/funcref.sgml | 87 +++++++++++++++++++++++++++++++++++++ include/arpa/inet.h | 10 +++++ libsrc/common/ntohl.s | 34 +++++++++++++++ libsrc/common/ntohs.s | 18 ++++++++ test/val/lib_common_htonl.c | 34 +++++++++++++++ test/val/lib_common_htons.c | 34 +++++++++++++++ 6 files changed, 217 insertions(+) create mode 100644 include/arpa/inet.h create mode 100644 libsrc/common/ntohl.s create mode 100644 libsrc/common/ntohs.s create mode 100644 test/val/lib_common_htonl.c create mode 100644 test/val/lib_common_htons.c diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 2a6d77adc..ae25851e8 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -435,6 +435,16 @@ see also <tt>testcode/lib/em-test.c</tt> and <tt>samples/multidemo.c</tt>. (incomplete) +<sect1><tt/inet.h/<label id="inet.h"><p> + +<itemize> +<item><ref id="htonl" name="htonl"> +<item><ref id="htons" name="htons"> +<item><ref id="ntohl" name="ntohl"> +<item><ref id="ntohs" name="ntohs"> +</itemize> + + <sect1><tt/geos.h/<label id="geos.h"><p> <url url="geos.html" name="GEOS API">. @@ -4388,6 +4398,45 @@ to undefined behaviour. </descrip> </quote> +<sect1>htonl<label id="htonl"><p> + +<quote> +<descrip> +<tag/Function/Swaps byte order in a 32 bit word. +<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/ +<tag/Declaration/<tt/int htonl(val)/ +<tag/Description/Converts a 32 bit word from from network byte order +(big endian) to little endian (or vice-versa). +<tag/Notes/<itemize> +<item>The function is only available as fastcall function, so it may only +be used in presence of a prototype. +</itemize> +<tag/See also/ +<ref id="ntohl" name="ntohl"> +<tag/Availability/cc65 +</descrip> +</quote> + + +<sect1>htons<label id="htons"><p> + +<quote> +<descrip> +<tag/Function/Swaps byte order in a 16 bit word. +<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/ +<tag/Declaration/<tt/int htons(val)/ +<tag/Description/Converts a 16 bit word from from network byte order +(big endian) to little endian (or vice-versa) by swapping both its bytes. +<tag/Notes/<itemize> +<item>The function is only available as fastcall function, so it may only +be used in presence of a prototype. +</itemize> +<tag/See also/ +<ref id="ntohs" name="ntohs"> +<tag/Availability/cc65 +</descrip> +</quote> + <sect1>isalnum<label id="isalnum"><p> @@ -5757,6 +5806,44 @@ memory allocated for the driver. </descrip> </quote> +<sect1>ntohl<label id="ntohl"><p> + +<quote> +<descrip> +<tag/Function/Swaps byte order in a 32 bit word. +<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/ +<tag/Declaration/<tt/int __fastcall__ ntohl (int val);/ +<tag/Description/Converts a 32 bit word from from host byte order (little endian) +to big endian (or vice-versa). +<tag/Notes/<itemize> +<item>The function is only available as fastcall function, so it may only +be used in presence of a prototype. +</itemize> +<tag/See also/ +<ref id="htonl" name="htonl"> +<tag/Availability/cc65 +</descrip> +</quote> + +<sect1>ntohs<label id="ntohs"><p> + +<quote> +<descrip> +<tag/Function/Swaps byte order in a 16 bit word. +<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/ +<tag/Declaration/<tt/int __fastcall__ ntohs (int val);/ +<tag/Description/Converts a 16 bit word from from host byte order (little endian) +to big endian (or vice-versa) by swapping both its bytes. +<tag/Notes/<itemize> +<item>The function is only available as fastcall function, so it may only +be used in presence of a prototype. +</itemize> +<tag/See also/ +<ref id="htons" name="htons"> +<tag/Availability/cc65 +</descrip> +</quote> + <sect1>offsetof<label id="offsetof"><p> <quote> diff --git a/include/arpa/inet.h b/include/arpa/inet.h new file mode 100644 index 000000000..ddcea2446 --- /dev/null +++ b/include/arpa/inet.h @@ -0,0 +1,10 @@ +#ifndef _ARPA_INET_H +#define _ARPA_INET_H + +int __fastcall__ ntohs (int val); +int __fastcall__ htons (int val); + +long __fastcall__ ntohl (long val); +long __fastcall__ htonl (long val); + +#endif diff --git a/libsrc/common/ntohl.s b/libsrc/common/ntohl.s new file mode 100644 index 000000000..6bf959b95 --- /dev/null +++ b/libsrc/common/ntohl.s @@ -0,0 +1,34 @@ +; +; Colin Leroy-Mira <colin@colino.net>, 2023-09-06 +; +; int __fastcall__ ntohl (long val); +; + +.export _ntohl, _htonl +.import popa +.importzp tmp1, tmp2, sreg + +_htonl := _ntohl +.code + +_ntohl: + ; The parts of our 32 bit word + ; are in sreg+1, sreg, X, A. + + + ; Save A and X + stx tmp1 + sta tmp2 + + ; Invert high word + lda sreg+1 + ldx sreg + + ; Invert low word + ldy tmp1 + sty sreg + + ldy tmp2 + sty sreg+1 + + rts diff --git a/libsrc/common/ntohs.s b/libsrc/common/ntohs.s new file mode 100644 index 000000000..e1914770e --- /dev/null +++ b/libsrc/common/ntohs.s @@ -0,0 +1,18 @@ +; +; Colin Leroy-Mira <colin@colino.net>, 2023-09-06 +; +; int __fastcall__ ntohs (int val); +; + +.export _ntohs, _htons +.importzp tmp1 + +_htons := _ntohs + +.code + +_ntohs: + sta tmp1 + txa + ldx tmp1 + rts diff --git a/test/val/lib_common_htonl.c b/test/val/lib_common_htonl.c new file mode 100644 index 000000000..53a210a84 --- /dev/null +++ b/test/val/lib_common_htonl.c @@ -0,0 +1,34 @@ +/* + !!DESCRIPTION!! A small test for htons. + !!ORIGIN!! + !!LICENCE!! + !!AUTHOR!! Colin Leroy-Mira +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <arpa/inet.h> + +static unsigned int Failures = 0; + +static void CheckHtonl (long input, long expected) +{ + long result = htonl(input); + if (result != expected) { + printf ("htonl error:\n" + " result = %ld for %ld, should be %ld\n", result, input, expected); + ++Failures; + } +} + +int main (void) +{ + CheckHtonl(0x00000000, 0x00000000); + CheckHtonl(0x12345678, 0x78563412); + CheckHtonl(0xAABBCCDD, 0xDDCCBBAA); + CheckHtonl(0xFFFFFFFF, 0xFFFFFFFF); + + printf ("Failures: %u\n", Failures); + + return Failures; +} diff --git a/test/val/lib_common_htons.c b/test/val/lib_common_htons.c new file mode 100644 index 000000000..42bbb3d6b --- /dev/null +++ b/test/val/lib_common_htons.c @@ -0,0 +1,34 @@ +/* + !!DESCRIPTION!! A small test for htons. + !!ORIGIN!! + !!LICENCE!! + !!AUTHOR!! Colin Leroy-Mira +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <arpa/inet.h> + +static unsigned int Failures = 0; + +static void CheckHtons (int input, int expected) +{ + int result = htons(input); + if (result != expected) { + printf ("htons error:\n" + " result = %d for %d, should be %d\n", result, input, expected); + ++Failures; + } +} + +int main (void) +{ + CheckHtons(0x0000, 0x0000); + CheckHtons(0x1234, 0x3412); + CheckHtons(0xA0F2, 0xF2A0); + CheckHtons(0xFFFF, 0xFFFF); + + printf ("Failures: %u\n", Failures); + + return Failures; +} From 3f3b6123b9b5242f581085d3932ed5fb63ddbd04 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 30 Aug 2023 21:28:09 +0200 Subject: [PATCH 2177/2710] Serial: Optimize TryToSend We don't need to reload SendFreeCnt each time we loop to wait for the ACIA to be ready. --- libsrc/apple2/ser/a2.ssc.s | 7 ++++--- libsrc/atmos/ser/atmos-acia.s | 7 ++++--- libsrc/c128/ser/c128-swlink.s | 14 +++++++------- libsrc/c64/ser/c64-swlink.s | 14 +++++++------- libsrc/cbm510/ser/cbm510-std.s | 14 +++++++------- libsrc/cbm610/ser/cbm610-std.s | 14 +++++++------- libsrc/plus4/ser/plus4-stdser.s | 14 +++++++------- 7 files changed, 43 insertions(+), 41 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 6ad9c3825..c2b0bf321 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -427,12 +427,13 @@ Done: rts TryToSend: sta tmp1 ; Remember tryHard flag -Again: lda SendFreeCnt +NextByte: + lda SendFreeCnt cmp #$FF beq Quit ; Bail out ; Check for flow stopped - lda Stopped +Again: lda Stopped bne Quit ; Bail out ; Check that ACIA is ready to send @@ -449,4 +450,4 @@ Send: ldy SendHead sta ACIA_DATA,x inc SendHead inc SendFreeCnt - jmp Again + jmp NextByte diff --git a/libsrc/atmos/ser/atmos-acia.s b/libsrc/atmos/ser/atmos-acia.s index f679125d1..ed5386471 100644 --- a/libsrc/atmos/ser/atmos-acia.s +++ b/libsrc/atmos/ser/atmos-acia.s @@ -352,12 +352,13 @@ Done: rts TryToSend: sta tmp1 ; Remember tryHard flag -Again: lda SendFreeCnt +NextByte: + lda SendFreeCnt cmp #$FF beq Quit ; Bail out ; Check for flow stopped - lda Stopped +Again: lda Stopped bne Quit ; Bail out ; Check that ACIA is ready to send @@ -374,4 +375,4 @@ Send: ldy SendHead sta ACIA::DATA inc SendHead inc SendFreeCnt - jmp Again + jmp NextByte diff --git a/libsrc/c128/ser/c128-swlink.s b/libsrc/c128/ser/c128-swlink.s index 7d36eb5bc..57b5ea3b2 100644 --- a/libsrc/c128/ser/c128-swlink.s +++ b/libsrc/c128/ser/c128-swlink.s @@ -466,25 +466,25 @@ NmiHandler: sta tmp1 ; Remember tryHard flag @L0: lda SendFreeCnt cmp #$ff - beq @L3 ; Bail out + beq @L2 ; Bail out ; Check for flow stopped @L1: lda Stopped - bne @L3 ; Bail out + bne @L2 ; Bail out ; Check that swiftlink is ready to send -@L2: lda ACIA_STATUS + lda ACIA_STATUS and #$10 - bne @L4 + bne @L3 bit tmp1 ;keep trying if must try hard - bmi @L0 -@L3: rts + bmi @L1 +@L2: rts ; Send byte and try again -@L4: ldx SendHead +@L3: ldx SendHead lda SendBuf,x sta ACIA_DATA inc SendHead diff --git a/libsrc/c64/ser/c64-swlink.s b/libsrc/c64/ser/c64-swlink.s index 81c9916a6..8c8b8bf39 100644 --- a/libsrc/c64/ser/c64-swlink.s +++ b/libsrc/c64/ser/c64-swlink.s @@ -443,25 +443,25 @@ NmiHandler: sta tmp1 ; Remember tryHard flag @L0: lda SendFreeCnt cmp #$ff - beq @L3 ; Bail out + beq @L2 ; Bail out ; Check for flow stopped @L1: lda Stopped - bne @L3 ; Bail out + bne @L2 ; Bail out ; Check that swiftlink is ready to send -@L2: lda ACIA_STATUS + lda ACIA_STATUS and #$10 - bne @L4 + bne @L3 bit tmp1 ;keep trying if must try hard - bmi @L0 -@L3: rts + bmi @L1 +@L2: rts ; Send byte and try again -@L4: ldx SendHead +@L3: ldx SendHead lda SendBuf,x sta ACIA_DATA inc SendHead diff --git a/libsrc/cbm510/ser/cbm510-std.s b/libsrc/cbm510/ser/cbm510-std.s index cc58c1233..34fe02d0f 100644 --- a/libsrc/cbm510/ser/cbm510-std.s +++ b/libsrc/cbm510/ser/cbm510-std.s @@ -395,31 +395,31 @@ SER_IRQ: sta IndReg ; Switch to the system bank @L0: lda SendFreeCnt cmp #$ff - beq @L3 ; Bail out + beq @L2 ; Bail out ; Check for flow stopped @L1: lda Stopped - bne @L3 ; Bail out + bne @L2 ; Bail out ; Check that swiftlink is ready to send -@L2: ldy #ACIA::STATUS + ldy #ACIA::STATUS lda (acia),y and #$10 - bne @L4 + bne @L3 bit tmp1 ; Keep trying if must try hard - bmi @L0 + bmi @L1 ; Switch back the bank and return -@L3: lda ExecReg +@L2: lda ExecReg sta IndReg rts ; Send byte and try again -@L4: ldx SendHead +@L3: ldx SendHead lda SendBuf,x ldy #ACIA::DATA sta (acia),y diff --git a/libsrc/cbm610/ser/cbm610-std.s b/libsrc/cbm610/ser/cbm610-std.s index f7ddde935..c241d5908 100644 --- a/libsrc/cbm610/ser/cbm610-std.s +++ b/libsrc/cbm610/ser/cbm610-std.s @@ -395,31 +395,31 @@ SER_IRQ: sta IndReg ; Switch to the system bank @L0: lda SendFreeCnt cmp #$ff - beq @L3 ; Bail out + beq @L2 ; Bail out ; Check for flow stopped @L1: lda Stopped - bne @L3 ; Bail out + bne @L2 ; Bail out ; Check that swiftlink is ready to send -@L2: ldy #ACIA::STATUS + ldy #ACIA::STATUS lda (acia),y and #$10 - bne @L4 + bne @L3 bit tmp1 ; Keep trying if must try hard - bmi @L0 + bmi @L1 ; Switch back the bank and return -@L3: lda ExecReg +@L2: lda ExecReg sta IndReg rts ; Send byte and try again -@L4: ldx SendHead +@L3: ldx SendHead lda SendBuf,x ldy #ACIA::DATA sta (acia),y diff --git a/libsrc/plus4/ser/plus4-stdser.s b/libsrc/plus4/ser/plus4-stdser.s index fbdc61b2e..5c4c550e6 100644 --- a/libsrc/plus4/ser/plus4-stdser.s +++ b/libsrc/plus4/ser/plus4-stdser.s @@ -387,25 +387,25 @@ SER_IRQ: sta tmp1 ; Remember tryHard flag @L0: lda SendFreeCnt cmp #$ff - beq @L3 ; Bail out + beq @L2 ; Bail out ; Check for flow stopped @L1: lda Stopped - bne @L3 ; Bail out + bne @L2 ; Bail out ; Check that swiftlink is ready to send -@L2: lda ACIA_STATUS + lda ACIA_STATUS and #$10 - bne @L4 + bne @L3 bit tmp1 ;keep trying if must try hard - bmi @L0 -@L3: rts + bmi @L1 +@L2: rts ; Send byte and try again -@L4: ldx SendHead +@L3: ldx SendHead lda SendBuf,x sta ACIA_DATA inc SendHead From 89af42e5cbcb98f43fc2269fc5ca5bb0e43f6bf1 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 30 Aug 2023 21:14:07 +0200 Subject: [PATCH 2178/2710] Serial: Optimize SER_IRQ Apple2 and Atmos have Index in X, but can still use it for the best-case path as long as we reload it in the worst-case part (when we assert flow control). Also, standardize the free space to trigger flow control to 32 characters left (compare with RecvFreeCnt before decrement) --- libsrc/apple2/ser/a2.ssc.s | 8 ++++---- libsrc/atmos/ser/atmos-acia.s | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index c2b0bf321..1dbf5f3a4 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -404,19 +404,19 @@ SER_IRQ: and #$08 beq Done ; Jump if no ACIA interrupt lda ACIA_DATA,x ; Get byte from ACIA - ldy RecvFreeCnt ; Check if we have free space left + ldx RecvFreeCnt ; Check if we have free space left beq Flow ; Jump if no space in receive buffer ldy RecvTail ; Load buffer pointer sta RecvBuf,y ; Store received byte in buffer inc RecvTail ; Increment buffer pointer dec RecvFreeCnt ; Decrement free space counter - ldy RecvFreeCnt ; Check for buffer space low - cpy #33 + cpx #33 ; Check for buffer space low bcc Flow ; Assert flow control if buffer space low rts ; Interrupt handled (carry already set) ; Assert flow control if buffer space too low -Flow: lda RtsOff +Flow: ldx Index +lda RtsOff sta ACIA_CMD,x sta Stopped sec ; Interrupt handled diff --git a/libsrc/atmos/ser/atmos-acia.s b/libsrc/atmos/ser/atmos-acia.s index ed5386471..774a337bd 100644 --- a/libsrc/atmos/ser/atmos-acia.s +++ b/libsrc/atmos/ser/atmos-acia.s @@ -329,19 +329,19 @@ SER_IRQ: and #$08 beq Done ; Jump if no ACIA interrupt lda ACIA::DATA,x ; Get byte from ACIA - ldy RecvFreeCnt ; Check if we have free space left + ldx RecvFreeCnt ; Check if we have free space left beq Flow ; Jump if no space in receive buffer ldy RecvTail ; Load buffer pointer sta RecvBuf,y ; Store received byte in buffer inc RecvTail ; Increment buffer pointer dec RecvFreeCnt ; Decrement free space counter - ldy RecvFreeCnt ; Check for buffer space low - cpy #33 + cpx #33 bcc Flow ; Assert flow control if buffer space low rts ; Interrupt handled (carry already set) ; Assert flow control if buffer space too low -Flow: lda RtsOff +Flow: ldx Index ; Reload port + lda RtsOff sta ACIA::CMD,x sta Stopped sec ; Interrupt handled From e8f5ad24712f9ebad8b308ab57b673aebacd9c0a Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 30 Aug 2023 21:02:47 +0200 Subject: [PATCH 2179/2710] Serial: Optimize SER_PUT We don't need to reload SendFreeCnt if we don't jsr TryToSend. --- libsrc/apple2/ser/a2.ssc.s | 7 ++++--- libsrc/atmos/ser/atmos-acia.s | 7 ++++--- libsrc/c128/ser/c128-swlink.s | 12 +++++++----- libsrc/c64/ser/c64-swlink.s | 12 +++++++----- libsrc/cbm510/ser/cbm510-std.s | 12 +++++++----- libsrc/cbm610/ser/cbm610-std.s | 12 +++++++----- libsrc/plus4/ser/plus4-stdser.s | 12 +++++++----- 7 files changed, 43 insertions(+), 31 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 1dbf5f3a4..7705f0933 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -328,20 +328,21 @@ SER_PUT: ; Try to send ldy SendFreeCnt - iny ; Y = $FF? + cpy #$FF ; Nothing to flush beq :+ pha lda #$00 ; TryHard = false jsr TryToSend pla - ; Put byte into send buffer & send -: ldy SendFreeCnt + ; Reload SendFreeCnt after TryToSend + ldy SendFreeCnt bne :+ lda #SER_ERR_OVERFLOW ldx #0 ; return value is char rts + ; Put byte into send buffer & send : ldy SendTail sta SendBuf,y inc SendTail diff --git a/libsrc/atmos/ser/atmos-acia.s b/libsrc/atmos/ser/atmos-acia.s index 774a337bd..c918fe995 100644 --- a/libsrc/atmos/ser/atmos-acia.s +++ b/libsrc/atmos/ser/atmos-acia.s @@ -269,20 +269,21 @@ SER_GET: SER_PUT: ; Try to send ldy SendFreeCnt - iny ; Y = $FF? + cpy #$FF ; Nothing to flush beq :+ pha lda #$00 ; TryHard = false jsr TryToSend pla - ; Put byte into send buffer & send -: ldy SendFreeCnt + ; Reload SendFreeCnt after TryToSend + ldy SendFreeCnt bne :+ lda #SER_ERR_OVERFLOW ldx #0 ; return value is char rts + ; Put byte into send buffer & send : ldy SendTail sta SendBuf,y inc SendTail diff --git a/libsrc/c128/ser/c128-swlink.s b/libsrc/c128/ser/c128-swlink.s index 57b5ea3b2..a0fc43050 100644 --- a/libsrc/c128/ser/c128-swlink.s +++ b/libsrc/c128/ser/c128-swlink.s @@ -362,21 +362,23 @@ SER_PUT: ; Try to send ldx SendFreeCnt - inx ; X = $ff? + cpx #$FF ; Nothing to flush beq @L2 pha lda #$00 jsr TryToSend pla -; Put byte into send buffer & send +; Reload SendFreeCnt after TryToSend -@L2: ldx SendFreeCnt - bne @L3 + ldx SendFreeCnt + bne @L2 lda #SER_ERR_OVERFLOW ; X is already zero rts -@L3: ldx SendTail +; Put byte into send buffer & send + +@L2: ldx SendTail sta SendBuf,x inc SendTail dec SendFreeCnt diff --git a/libsrc/c64/ser/c64-swlink.s b/libsrc/c64/ser/c64-swlink.s index 8c8b8bf39..c2934e669 100644 --- a/libsrc/c64/ser/c64-swlink.s +++ b/libsrc/c64/ser/c64-swlink.s @@ -336,21 +336,23 @@ SER_PUT: ; Try to send ldx SendFreeCnt - inx ; X = $ff? + cpx #$FF ; Nothing to flush beq @L2 pha lda #$00 jsr TryToSend pla -; Put byte into send buffer & send +; Reload SendFreeCnt after TryToSend -@L2: ldx SendFreeCnt - bne @L3 + ldx SendFreeCnt + bne @L2 lda #SER_ERR_OVERFLOW ; X is already zero rts -@L3: ldx SendTail +; Put byte into send buffer & send + +@L2: ldx SendTail sta SendBuf,x inc SendTail dec SendFreeCnt diff --git a/libsrc/cbm510/ser/cbm510-std.s b/libsrc/cbm510/ser/cbm510-std.s index 34fe02d0f..633a392c7 100644 --- a/libsrc/cbm510/ser/cbm510-std.s +++ b/libsrc/cbm510/ser/cbm510-std.s @@ -292,21 +292,23 @@ SER_PUT: ; Try to send ldx SendFreeCnt - inx ; X = $ff? + cpx #$FF ; Nothing to flush beq @L2 pha lda #$00 jsr TryToSend pla -; Put byte into send buffer & send +; Reload SendFreeCnt after TryToSend -@L2: ldx SendFreeCnt - bne @L3 + ldx SendFreeCnt + bne @L2 lda #SER_ERR_OVERFLOW ; X is already zero rts -@L3: ldx SendTail +; Put byte into send buffer & send + +@L2: ldx SendTail sta SendBuf,x inc SendTail dec SendFreeCnt diff --git a/libsrc/cbm610/ser/cbm610-std.s b/libsrc/cbm610/ser/cbm610-std.s index c241d5908..1216e3794 100644 --- a/libsrc/cbm610/ser/cbm610-std.s +++ b/libsrc/cbm610/ser/cbm610-std.s @@ -293,21 +293,23 @@ SER_PUT: ; Try to send ldx SendFreeCnt - inx ; X = $ff? + cpx #$ff ; Nothing to flush beq @L2 pha lda #$00 jsr TryToSend pla -; Put byte into send buffer & send +; Reload SendFreeCnt after TryToSend -@L2: ldx SendFreeCnt - bne @L3 + ldx SendFreeCnt + bne @L2 lda #SER_ERR_OVERFLOW ; X is already zero rts -@L3: ldx SendTail +; Put byte into send buffer & send + +@L2: ldx SendTail sta SendBuf,x inc SendTail dec SendFreeCnt diff --git a/libsrc/plus4/ser/plus4-stdser.s b/libsrc/plus4/ser/plus4-stdser.s index 5c4c550e6..d1d84267f 100644 --- a/libsrc/plus4/ser/plus4-stdser.s +++ b/libsrc/plus4/ser/plus4-stdser.s @@ -300,21 +300,23 @@ SER_PUT: ; Try to send ldx SendFreeCnt - inx ; X = $ff? + cpx #$ff ; Nothing to flush beq @L2 pha lda #$00 jsr TryToSend pla -; Put byte into send buffer & send +; Reload SendFreeCnt after TryToSend -@L2: ldx SendFreeCnt - bne @L3 + ldx SendFreeCnt + bne @L2 lda #SER_ERR_OVERFLOW ; X is already zero rts -@L3: ldx SendTail +; Put byte into send buffer & send + +@L2: ldx SendTail sta SendBuf,x inc SendTail dec SendFreeCnt From a89a311abfda385b1c1a9a0bb654180681c23d74 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 30 Aug 2023 20:51:48 +0200 Subject: [PATCH 2180/2710] Serial: Micro-optimisation for apple2enh On 65C02 we can spare one cycle on sta (abs); we also not have to care about the 6502 false reads --- libsrc/apple2/ser/a2.ssc.s | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 7705f0933..12e975965 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -26,6 +26,7 @@ .include "ser-error.inc" .macpack module + .macpack cpu ; ------------------------------------------------------------------------ ; Header. Includes jump table @@ -57,9 +58,13 @@ ;---------------------------------------------------------------------------- ; I/O definitions +.if (.cpu .bitand CPU_ISET_65C02) +ACIA = $C088 +.else Offset = $8F ; Move 6502 false read out of I/O to page $BF - ACIA = $C088-Offset +.endif + ACIA_DATA = ACIA+0 ; Data register ACIA_STATUS = ACIA+1 ; Status register ACIA_CMD = ACIA+2 ; Command register @@ -200,7 +205,9 @@ SER_OPEN: asl asl asl +.if .not (.cpu .bitand CPU_ISET_65C02) adc #Offset ; Assume carry to be clear +.endif tax ; Check if the handshake setting is valid @@ -315,7 +322,11 @@ SER_GET: inc RecvHead inc RecvFreeCnt ldx #$00 ; (59) +.if (.cpu .bitand CPU_ISET_65C02) + sta (ptr1) +.else sta (ptr1,x) +.endif txa ; Return code = 0 rts From 734541ee05000bad9e9dd2f903a2db754e8c36f3 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 30 Aug 2023 20:49:39 +0200 Subject: [PATCH 2181/2710] Serial: Optimize SER_GET There is no need to TryToSend before getting the character. We send bytes during SER_PUT, and if interrupted during sending, we still try to do it at the beginning of the next SER_PUT. --- libsrc/apple2/ser/a2.ssc.s | 7 +------ libsrc/atmos/ser/atmos-acia.s | 8 +------- libsrc/c128/ser/c128-swlink.s | 7 +------ libsrc/c64/ser/c64-swlink.s | 7 +------ libsrc/cbm510/ser/cbm510-std.s | 7 +------ libsrc/cbm610/ser/cbm610-std.s | 7 +------ libsrc/plus4/ser/plus4-stdser.s | 7 +------ 7 files changed, 7 insertions(+), 43 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 12e975965..5942d43e9 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -291,14 +291,9 @@ InvBaud:lda #SER_ERR_BAUD_UNAVAIL SER_GET: ldx Index - ldy SendFreeCnt ; Send data if necessary - iny ; Y == $FF? - beq :+ - lda #$00 ; TryHard = false - jsr TryToSend ; Check for buffer empty -: lda RecvFreeCnt ; (25) + lda RecvFreeCnt ; (25) cmp #$FF bne :+ lda #SER_ERR_NO_DATA diff --git a/libsrc/atmos/ser/atmos-acia.s b/libsrc/atmos/ser/atmos-acia.s index c918fe995..1509803d2 100644 --- a/libsrc/atmos/ser/atmos-acia.s +++ b/libsrc/atmos/ser/atmos-acia.s @@ -227,14 +227,8 @@ InvBaud:lda #<SER_ERR_BAUD_UNAVAIL ; returned. SER_GET: - ldy SendFreeCnt ; Send data if necessary - iny ; Y == $FF? - beq :+ - lda #$00 ; TryHard = false - jsr TryToSend - ; Check for buffer empty -: lda RecvFreeCnt ; (25) + lda RecvFreeCnt ; (25) cmp #$FF bne :+ lda #SER_ERR_NO_DATA diff --git a/libsrc/c128/ser/c128-swlink.s b/libsrc/c128/ser/c128-swlink.s index a0fc43050..b8f08159b 100644 --- a/libsrc/c128/ser/c128-swlink.s +++ b/libsrc/c128/ser/c128-swlink.s @@ -314,15 +314,10 @@ SER_CLOSE: ; SER_GET: - ldx SendFreeCnt ; Send data if necessary - inx ; X == $FF? - beq @L1 - lda #$00 - jsr TryToSend ; Check for buffer empty -@L1: lda RecvFreeCnt ; (25) + lda RecvFreeCnt ; (25) cmp #$ff bne @L2 lda #SER_ERR_NO_DATA diff --git a/libsrc/c64/ser/c64-swlink.s b/libsrc/c64/ser/c64-swlink.s index c2934e669..067a7ca92 100644 --- a/libsrc/c64/ser/c64-swlink.s +++ b/libsrc/c64/ser/c64-swlink.s @@ -288,15 +288,10 @@ SER_CLOSE: ; SER_GET: - ldx SendFreeCnt ; Send data if necessary - inx ; X == $FF? - beq @L1 - lda #$00 - jsr TryToSend ; Check for buffer empty -@L1: lda RecvFreeCnt ; (25) + lda RecvFreeCnt ; (25) cmp #$ff bne @L2 lda #SER_ERR_NO_DATA diff --git a/libsrc/cbm510/ser/cbm510-std.s b/libsrc/cbm510/ser/cbm510-std.s index 633a392c7..800007492 100644 --- a/libsrc/cbm510/ser/cbm510-std.s +++ b/libsrc/cbm510/ser/cbm510-std.s @@ -244,15 +244,10 @@ InvBaud: ; SER_GET: - ldx SendFreeCnt ; Send data if necessary - inx ; X == $FF? - beq @L1 - lda #$00 - jsr TryToSend ; Check for buffer empty -@L1: lda RecvFreeCnt + lda RecvFreeCnt cmp #$ff bne @L2 lda #SER_ERR_NO_DATA diff --git a/libsrc/cbm610/ser/cbm610-std.s b/libsrc/cbm610/ser/cbm610-std.s index 1216e3794..45b18eadf 100644 --- a/libsrc/cbm610/ser/cbm610-std.s +++ b/libsrc/cbm610/ser/cbm610-std.s @@ -245,15 +245,10 @@ InvBaud: ; SER_GET: - ldx SendFreeCnt ; Send data if necessary - inx ; X == $FF? - beq @L1 - lda #$00 - jsr TryToSend ; Check for buffer empty -@L1: lda RecvFreeCnt + lda RecvFreeCnt cmp #$ff bne @L2 lda #SER_ERR_NO_DATA diff --git a/libsrc/plus4/ser/plus4-stdser.s b/libsrc/plus4/ser/plus4-stdser.s index d1d84267f..77445c7a2 100644 --- a/libsrc/plus4/ser/plus4-stdser.s +++ b/libsrc/plus4/ser/plus4-stdser.s @@ -252,15 +252,10 @@ InvBaud: ; SER_GET: - ldx SendFreeCnt ; Send data if necessary - inx ; X == $FF? - beq @L1 - lda #$00 - jsr TryToSend ; Check for buffer empty -@L1: lda RecvFreeCnt ; (25) + lda RecvFreeCnt ; (25) cmp #$ff bne @L2 lda #SER_ERR_NO_DATA From a90aa575105b5a1f33c99e7feab8d1921aee99d4 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 7 Sep 2023 16:48:56 +0200 Subject: [PATCH 2182/2710] Address Oliver's comments --- doc/funcref.sgml | 8 ++++---- include/arpa/inet.h | 30 ++++++++++++++++++++++++++++++ libsrc/common/ntohl.s | 2 -- libsrc/common/ntohs.s | 2 -- 4 files changed, 34 insertions(+), 8 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index ae25851e8..5fa1720e4 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -4403,7 +4403,7 @@ to undefined behaviour. <quote> <descrip> <tag/Function/Swaps byte order in a 32 bit word. -<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/ +<tag/Header/<tt/<ref id="inet.h" name="arpa/inet.h">/ <tag/Declaration/<tt/int htonl(val)/ <tag/Description/Converts a 32 bit word from from network byte order (big endian) to little endian (or vice-versa). @@ -4423,7 +4423,7 @@ be used in presence of a prototype. <quote> <descrip> <tag/Function/Swaps byte order in a 16 bit word. -<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/ +<tag/Header/<tt/<ref id="inet.h" name="arpa/inet.h">/ <tag/Declaration/<tt/int htons(val)/ <tag/Description/Converts a 16 bit word from from network byte order (big endian) to little endian (or vice-versa) by swapping both its bytes. @@ -5811,7 +5811,7 @@ memory allocated for the driver. <quote> <descrip> <tag/Function/Swaps byte order in a 32 bit word. -<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/ +<tag/Header/<tt/<ref id="inet.h" name="arpa/inet.h">/ <tag/Declaration/<tt/int __fastcall__ ntohl (int val);/ <tag/Description/Converts a 32 bit word from from host byte order (little endian) to big endian (or vice-versa). @@ -5830,7 +5830,7 @@ be used in presence of a prototype. <quote> <descrip> <tag/Function/Swaps byte order in a 16 bit word. -<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/ +<tag/Header/<tt/<ref id="inet.h" name="arpa/inet.h">/ <tag/Declaration/<tt/int __fastcall__ ntohs (int val);/ <tag/Description/Converts a 16 bit word from from host byte order (little endian) to big endian (or vice-versa) by swapping both its bytes. diff --git a/include/arpa/inet.h b/include/arpa/inet.h index ddcea2446..e1e970e07 100644 --- a/include/arpa/inet.h +++ b/include/arpa/inet.h @@ -1,3 +1,33 @@ +/*****************************************************************************/ +/* */ +/* arpa/inet.h */ +/* */ +/* Endianness utilities for cc65 */ +/* */ +/* */ +/* */ +/* (C) 2023 Colin Leroy-Mira, <colin@colino.net> */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + #ifndef _ARPA_INET_H #define _ARPA_INET_H diff --git a/libsrc/common/ntohl.s b/libsrc/common/ntohl.s index 6bf959b95..77adba253 100644 --- a/libsrc/common/ntohl.s +++ b/libsrc/common/ntohl.s @@ -9,13 +9,11 @@ .importzp tmp1, tmp2, sreg _htonl := _ntohl -.code _ntohl: ; The parts of our 32 bit word ; are in sreg+1, sreg, X, A. - ; Save A and X stx tmp1 sta tmp2 diff --git a/libsrc/common/ntohs.s b/libsrc/common/ntohs.s index e1914770e..042ddb005 100644 --- a/libsrc/common/ntohs.s +++ b/libsrc/common/ntohs.s @@ -9,8 +9,6 @@ _htons := _ntohs -.code - _ntohs: sta tmp1 txa From cbc5603d631cff1f1ba8aaa78909c56bbd1387f9 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 7 Sep 2023 21:00:30 +0200 Subject: [PATCH 2183/2710] Inline ntohs/htons as a macro if -i is passed --- include/arpa/inet.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/include/arpa/inet.h b/include/arpa/inet.h index e1e970e07..2fb47388d 100644 --- a/include/arpa/inet.h +++ b/include/arpa/inet.h @@ -31,8 +31,22 @@ #ifndef _ARPA_INET_H #define _ARPA_INET_H +#ifndef __OPT_i__ int __fastcall__ ntohs (int val); int __fastcall__ htons (int val); +#else + +#define ntohs(x) \ + ( \ + __AX__=(x), \ + asm("sta tmp1"), \ + asm("txa"), \ + asm("ldx tmp1"), \ + __AX__ \ + ) +#define htons(x) ntohs(x) + +#endif long __fastcall__ ntohl (long val); long __fastcall__ htonl (long val); From 9669710cc3bd047b8a3a4a8d0e5490c31d4fd5bf Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 7 Sep 2023 21:36:39 +0200 Subject: [PATCH 2184/2710] Fix usage of __OPT_i__ --- include/arpa/inet.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/arpa/inet.h b/include/arpa/inet.h index 2fb47388d..5f4b994e8 100644 --- a/include/arpa/inet.h +++ b/include/arpa/inet.h @@ -31,7 +31,7 @@ #ifndef _ARPA_INET_H #define _ARPA_INET_H -#ifndef __OPT_i__ +#if (__OPT_i__ < 200) int __fastcall__ ntohs (int val); int __fastcall__ htons (int val); #else From 9e5620f127c636afe0e2c3901ca5cbfdf39fa96e Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 7 Sep 2023 22:37:30 +0200 Subject: [PATCH 2185/2710] Fix coding-style on header --- include/arpa/inet.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/arpa/inet.h b/include/arpa/inet.h index 5f4b994e8..cd353a2bb 100644 --- a/include/arpa/inet.h +++ b/include/arpa/inet.h @@ -28,9 +28,19 @@ /* */ /*****************************************************************************/ + + #ifndef _ARPA_INET_H #define _ARPA_INET_H + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + #if (__OPT_i__ < 200) int __fastcall__ ntohs (int val); int __fastcall__ htons (int val); @@ -51,4 +61,7 @@ int __fastcall__ htons (int val); long __fastcall__ ntohl (long val); long __fastcall__ htonl (long val); + + +/* End of arpa/inet.h */ #endif From 38f7daf40e13696cf5db56874a8fee38ce76db8a Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 10 Sep 2023 21:13:27 +0200 Subject: [PATCH 2186/2710] Make sure not to load ACIA driver on IIgs' Z8530 The Pascal Firmware Protocol Bytes ID are not enough to differentiate an SSC card from a IIgs serial firmware: http://www.1000bit.it/support/manuali/apple/technotes/misc/tn.misc.08.html Loading a2(e).ssc.ser on a IIgs succeeds, then goes to limbo when one tries to use the serial port. Check first byte on the slot's firmware in addition to the four existing ones, as it's supposed to be $2C (BIT instruction) on an SSC card, and $EF (65C816 SEP instruction) on the IIgs' serial firmware (ROM revisions 0, 1, 3). --- libsrc/apple2/ser/a2.ssc.s | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 5942d43e9..b58afb7d0 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -132,16 +132,33 @@ ParityTable: .byte $60 ; SER_PAR_EVEN .byte $A0 ; SER_PAR_MARK .byte $E0 ; SER_PAR_SPACE + + ; (*): The first byte we'll check at offset 0 is + ; expected to be a BIT instruction on any Apple2 + ; machine with an ACIA 6551, including the //c + ; and //c+. + ; The IIgs, on the other hand, has a + ; Zilog Z8530 chip and its firmware starts with + ; a SEP instruction. We don't want to load this + ; driver on the IIgs' serial port. + ; + ; The next four bytes we check are the Pascal + ; Firmware Protocol Bytes that identify a + ; serial card. + IdOfsTable: + .byte $00 ; First instruction .byte $05 ; Pascal 1.0 ID byte .byte $07 ; Pascal 1.0 ID byte .byte $0B ; Pascal 1.1 generic signature byte .byte $0C ; Device signature byte IdValTable: - .byte $38 ; Fixed - .byte $18 ; Fixed - .byte $01 ; Fixed - .byte $31 ; Serial or parallel I/O card type 1 + .byte $2C ; BIT + .byte $38 ; ID Byte 0 (from Pascal 1.0), fixed + .byte $18 ; ID Byte 1 (from Pascal 1.0), fixed + .byte $01 ; Generic signature for Pascal 1.1, fixed + .byte $31 ; Device signature byte (serial or + ; parallel I/O card type 1) IdTableLen = * - IdValTable From aa5ee8423a0fd741eed4b598211c25cf3c8d829d Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 10 Sep 2023 22:34:03 +0200 Subject: [PATCH 2187/2710] Clearer wording for the firmware check --- libsrc/apple2/ser/a2.ssc.s | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index b58afb7d0..13f903597 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -133,18 +133,26 @@ ParityTable: .byte $A0 ; SER_PAR_MARK .byte $E0 ; SER_PAR_SPACE - ; (*): The first byte we'll check at offset 0 is - ; expected to be a BIT instruction on any Apple2 - ; machine with an ACIA 6551, including the //c - ; and //c+. + ; Check five bytes at known positions on the + ; slot's firmware to make sure this is an SSC + ; (or Apple //c comm port) firmware that drives + ; an ACIA 6551 chip. + ; + ; The SSC firmware and the Apple //c(+) comm + ; port firmware all begin with a BIT instruction. ; The IIgs, on the other hand, has a ; Zilog Z8530 chip and its firmware starts with ; a SEP instruction. We don't want to load this - ; driver on the IIgs' serial port. + ; driver on the IIgs' serial port. We'll + ; differentiate the firmware on this byte. ; ; The next four bytes we check are the Pascal ; Firmware Protocol Bytes that identify a - ; serial card. + ; serial card. Those are the same bytes for + ; SSC firmwares, Apple //c firmwares and IIgs + ; Zilog Z8530 firmwares - which is the reason + ; we have to check for the firmware's first + ; instruction too. IdOfsTable: .byte $00 ; First instruction From 3fc074014ef780b7e0ed9d48817fd3c1473afa0f Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 12 Sep 2023 20:54:32 +0200 Subject: [PATCH 2188/2710] Serial kernel: Fix driver lifecycle - Make sure we don't install a driver on top of another one - Make sure we don't uninstall a driver twice - Make sure we uninstall a driver if needed at exit --- doc/funcref.sgml | 3 ++- libsrc/serial/ser-kernel.s | 22 ++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 5fa1720e4..12b45db2b 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -6693,7 +6693,8 @@ be used in presence of a prototype. <tag/Function/Uninstall the currently loaded driver but do not unload it. <tag/Header/<tt/<ref id="serial.h" name="serial.h">/ <tag/Declaration/<tt/unsigned char ser_uninstall (void);/ -<tag/Description/Uninstall the currently loaded driver but do not unload it. +<tag/Description/Uninstall the currently loaded driver but do not unload it. This +function returns SER_ERR_NO_DRIVER if no driver was installed, 0 otherwise. <tag/Availability/cc65 <tag/See also/Other serial functions. <tag/Example/None. diff --git a/libsrc/serial/ser-kernel.s b/libsrc/serial/ser-kernel.s index b6c57a3b5..1514bcf77 100644 --- a/libsrc/serial/ser-kernel.s +++ b/libsrc/serial/ser-kernel.s @@ -7,6 +7,7 @@ .import return0, ser_libref .importzp ptr1 .interruptor ser_irq, 29 ; Export as high priority IRQ handler + .destructor _ser_uninstall .include "ser-kernel.inc" .include "ser-error.inc" @@ -44,7 +45,16 @@ ser_sig: .byte $73, $65, $72, SER_API_VERSION ; "ser", version _ser_install: - sta _ser_drv + ldy _ser_drv ; Check no driver is installed + bne ErrInstalled + ldy _ser_drv+1 + beq :+ +ErrInstalled: + ldx #$00 + lda #SER_ERR_INSTALLED + rts + +: sta _ser_drv sta ptr1 stx _ser_drv+1 stx ptr1+1 @@ -107,7 +117,14 @@ copy: lda (ptr1),y ; */ _ser_uninstall: - jsr ser_uninstall ; Call driver routine + ldx _ser_drv ; Check a driver is installed + bne :+ + ldx _ser_drv+1 + bne :+ + lda #SER_ERR_NO_DRIVER + rts + +: jsr ser_uninstall ; Call driver routine lda #$60 ; RTS opcode sta ser_irq ; Disable IRQ entry point @@ -117,5 +134,6 @@ _ser_clear_ptr: ; External entry point sta _ser_drv sta _ser_drv+1 ; Clear the driver pointer +done: tax rts ; Return zero From 8e62cbf0925f323cd15cef7cf58e3fe7437499d7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 13 Sep 2023 22:26:41 +0800 Subject: [PATCH 2189/2710] Improved checks on function return types. --- src/cc65/function.c | 8 ++++++-- src/cc65/stmt.c | 33 ++++++++++----------------------- 2 files changed, 16 insertions(+), 25 deletions(-) diff --git a/src/cc65/function.c b/src/cc65/function.c index 1ad89b111..06800b133 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -466,11 +466,15 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* Check return type */ ReturnType = F_GetReturnType (CurrentFunc); - if (IsIncompleteESUType (ReturnType)) { + if (!IsTypeArray (ReturnType) && !IsTypeFunc (ReturnType)) { /* There are already diagnostics on returning arrays or functions */ - if (!IsTypeArray (ReturnType) && !IsTypeFunc (ReturnType)) { + if (IsIncompleteESUType (ReturnType)) { Error ("Function has incomplete return type '%s'", GetFullTypeName (ReturnType)); + } else if (IsPassByRefType (ReturnType)) { + /* Handle struct/union specially */ + Error ("Function return type '%s' of size %u is unsupported", + GetFullTypeName (ReturnType), SizeOf (ReturnType)); } } diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index e1add990e..c86f25f8a 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -311,7 +311,6 @@ static void ReturnStatement (void) /* Handle the 'return' statement */ { ExprDesc Expr; - const Type* ReturnType; ED_Init (&Expr); NextToken (); @@ -327,31 +326,19 @@ static void ReturnStatement (void) if (F_HasVoidReturn (CurrentFunc)) { Error ("Returning a value in function with return type 'void'"); } else { - /* Check the return type first */ - ReturnType = F_GetReturnType (CurrentFunc); - if (IsIncompleteESUType (ReturnType)) { - /* Avoid excess errors */ - if (ErrorCount == 0) { - Error ("Returning a value in function with incomplete return type"); - } + const Type* ReturnType = F_GetReturnType (CurrentFunc); + + /* Convert the return value to the type of the function result */ + TypeConversion (&Expr, ReturnType); + + /* Load the value into the primary */ + if (IsClassStruct (Expr.Type)) { + /* Handle struct/union specially */ + LoadExpr (CG_TypeOf (GetStructReplacementType (ReturnType)), &Expr); } else { - /* Convert the return value to the type of the function result */ - TypeConversion (&Expr, ReturnType); - /* Load the value into the primary */ - if (IsClassStruct (Expr.Type)) { - /* Handle struct/union specially */ - ReturnType = GetStructReplacementType (Expr.Type); - if (ReturnType == Expr.Type) { - Error ("Returning '%s' of this size by value is not supported", GetFullTypeName (Expr.Type)); - } - LoadExpr (CG_TypeOf (ReturnType), &Expr); - - } else { - /* Load the value into the primary */ - LoadExpr (CF_NONE, &Expr); - } + LoadExpr (CF_NONE, &Expr); } /* Append deferred inc/dec at sequence point */ From 878264d948e6eafec068f13616b3c9b3b7454d1f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 13 Sep 2023 22:26:41 +0800 Subject: [PATCH 2190/2710] Minor consistency improvement for AddEnumSym() usage. No impact. --- src/cc65/declare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index cd174c92d..644291869 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -756,7 +756,7 @@ static SymEntry* ParseEnumSpec (const char* Name, unsigned* DSFlags) Flags |= SC_FICTITIOUS; } - return AddEnumSym (Name, Flags, MemberType, FieldTab, DSFlags); + return AddEnumSym (Name, SC_DEF | Flags, MemberType, FieldTab, DSFlags); } From 2e9843b32d43a84f4fc5826fd811370d8e2a6a5b Mon Sep 17 00:00:00 2001 From: polluks2 <74630735+polluks2@users.noreply.github.com> Date: Fri, 15 Sep 2023 10:35:36 +0200 Subject: [PATCH 2191/2710] optimisation scandisplay --- libsrc/kim1/scandisplay.s | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libsrc/kim1/scandisplay.s b/libsrc/kim1/scandisplay.s index 0f46a5de4..768adb2b9 100644 --- a/libsrc/kim1/scandisplay.s +++ b/libsrc/kim1/scandisplay.s @@ -15,7 +15,6 @@ sta $FA ; Middle display data jsr popa sta $FB ; Leftmost display data - jsr SCANDS - rts + jmp SCANDS .endproc From e145145fbb9faada2c7879962b54ded7a4f79d3f Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Sat, 16 Sep 2023 21:01:37 +0200 Subject: [PATCH 2192/2710] Added KIM-1 refs some clean-up --- doc/funcref.sgml | 50 ++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 5fa1720e4..a3f847867 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -435,6 +435,11 @@ see also <tt>testcode/lib/em-test.c</tt> and <tt>samples/multidemo.c</tt>. (incomplete) +<sect1><tt/geos.h/<label id="geos.h"><p> + +<url url="geos.html" name="GEOS API">. + + <sect1><tt/inet.h/<label id="inet.h"><p> <itemize> @@ -445,11 +450,6 @@ see also <tt>testcode/lib/em-test.c</tt> and <tt>samples/multidemo.c</tt>. </itemize> -<sect1><tt/geos.h/<label id="geos.h"><p> - -<url url="geos.html" name="GEOS API">. - - <sect1><tt/joystick.h/<label id="joystick.h"><p> <itemize> @@ -462,6 +462,18 @@ see also <tt>testcode/lib/em-test.c</tt> and <tt>samples/multidemo.c</tt>. </itemize> +<sect1><tt/kim1.h/<label id="kim1.h"><p> + +<itemize> +<!-- <item><ref id="getkey" name="getkey"> --> +<!-- <item><ref id="scandisplay" name="scandisplay"> --> +<item><ref id="loadt" name="loadt"> +<item><ref id="dumpt" name="dumpt"> +</itemize> + +(incomplete) + + <sect1><tt/locale.h/<label id="locale.h"><p> <itemize> @@ -1745,7 +1757,7 @@ used in presence of a prototype. <tag/See also/ <ref id="fdisp" name="fdisp">, <ref id="loadt" name="loadt">, -<ref id="dumpt" name="dumpt">, +<ref id="dumpt" name="dumpt"> <tag/Example/None. </descrip> </quote> @@ -1890,7 +1902,7 @@ be used in presence of a prototype. <ref id="_swap" name="_swap">, <ref id="memcpy" name="memcpy">, <ref id="memmove" name="memmove">, -<ref id="memset" name="memset">, +<ref id="memset" name="memset"> <tag/Example/None. </descrip> </quote> @@ -1963,7 +1975,7 @@ sent a command to TALK and a secondary address if it needs one. </itemize> <tag/Availability/cc65 <tag/See also/ -<ref id="cbm_k_talk" name="cbm_k_talk">, +<ref id="cbm_k_talk" name="cbm_k_talk"> <tag/Example/None. </descrip> </quote> @@ -2365,8 +2377,8 @@ function, in order to provide input from the keyboard. <tag/See also/ <ref id="cbm_k_getin" name="cbm_k_getin">, <ref id="cbm_k_udtim" name="cbm_k_udtim">, -<ref id="cgetc" name="cgetc">, -<!-- <ref id="getc" name="getc"> --> +<ref id="cgetc" name="cgetc"> +<!-- <ref id="getc" name="getc">, --> <!-- <ref id="getchar" name="getchar"> --> <tag/Example/None. </descrip> @@ -3284,7 +3296,7 @@ used in presence of a prototype. <tag/Availability/cc65 (not all platforms) <tag/See also/ <ref id="get_c128_speed" name="get_c128_speed">, -<ref id="set_c128_speed" name="set_c128_speed">, +<ref id="set_c128_speed" name="set_c128_speed"> <tag/Example/None. </descrip> </quote> @@ -3324,7 +3336,7 @@ used in presence of a prototype. <tag/Availability/cc65 (not all platforms) <tag/See also/ <ref id="get_c65_speed" name="get_c65_speed">, -<ref id="set_c65_speed" name="set_c65_speed">, +<ref id="set_c65_speed" name="set_c65_speed"> <tag/Example/None. </descrip> </quote> @@ -3450,11 +3462,11 @@ int main(void) <quote> <descrip> <tag/Function/Dump memory to tape. -<tag/Header/<tt/<ref id="sym1.h" name="sym1.h">/ +<tag/Header/<tt/<ref id="sym1.h" name="sym1.h">/, <tt/<ref id="kim1.h" name="kim1.h">/ <tag/Declaration/<tt/int __fastcall__ dumpt (unsigned char id, const void* start, const void* end);/ <tag/Description/<tt/dumpt/ saves memory onto data tape. <tag/Notes/<itemize> -<item>The function is specific to the Sym-1. +<item>The function is specific to the Sym-1 and KIM-1. <item>The return value is status. Non-zero status indicates an error. <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. @@ -3463,7 +3475,7 @@ be used in presence of a prototype. <tag/See also/ <ref id="beep" name="beep">, <ref id="fdisp" name="fdisp">, -<ref id="loadt" name="loadt">, +<ref id="loadt" name="loadt"> <tag/Example/None. </descrip> </quote> @@ -3843,7 +3855,7 @@ switching the CPU into double clock mode. <tag/See also/ <ref id="beep" name="beep">, <ref id="loadt" name="loadt">, -<ref id="dumpt" name="dumpt">, +<ref id="dumpt" name="dumpt"> <tag/Example/None. </descrip> </quote> @@ -5133,11 +5145,11 @@ used in presence of a prototype. <quote> <descrip> <tag/Function/Load memory from tape. -<tag/Header/<tt/<ref id="sym1.h" name="sym1.h">/ +<tag/Header/<tt/<ref id="sym1.h" name="sym1.h">/, <tt/<ref id="kim1.h" name="kim1.h">/ <tag/Declaration/<tt/int __fastcall__ loadt (unsigned char id);/ <tag/Description/<tt/loadt/ loads memory from data tape. <tag/Notes/<itemize> -<item>The function is specific to the Sym-1. +<item>The function is specific to the Sym-1 and KIM-1. <item>The return value is status. Non-zero status indicates an error. <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. @@ -5146,7 +5158,7 @@ be used in presence of a prototype. <tag/See also/ <ref id="beep" name="beep">, <ref id="fdisp" name="fdisp">, -<ref id="dumpt" name="dumpt">, +<ref id="dumpt" name="dumpt"> <tag/Example/None. </descrip> </quote> From 39abd233fe6124c1549e377b150eb51d974e7ef6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 17 Sep 2023 23:47:22 +0800 Subject: [PATCH 2193/2710] Fixed check for conflicting extern vs no-linkage/static declarations in functions. --- src/cc65/symtab.c | 43 ++++++++++++++----------- test/err/bug2162-none-extern-auto.c | 8 +++++ test/err/bug2162-none-static-extern.c | 8 +++++ test/err/bug2162-static-extern-auto.c | 10 ++++++ test/err/bug2162-static-static-extern.c | 10 ++++++ 5 files changed, 61 insertions(+), 18 deletions(-) create mode 100644 test/err/bug2162-none-extern-auto.c create mode 100644 test/err/bug2162-none-static-extern.c create mode 100644 test/err/bug2162-static-extern-auto.c create mode 100644 test/err/bug2162-static-static-extern.c diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index a2bbf13dd..951ed9e5e 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -1225,6 +1225,15 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs /* Do we have an entry with this name already? */ SymEntry* Entry = FindSymInTable (Tab, Name, HashStr (Name)); if (Entry) { + int CheckExtern = 0; + if ((Flags & SC_STRUCTFIELD) == 0) { + while (Entry && (Entry->Flags & SC_ALIAS) == SC_ALIAS) { + /* Get the aliased entry */ + Entry = Entry->V.A.Field; + /* Check for conflict with local storage class */ + CheckExtern = 1; + } + } /* We have a symbol with this name already */ if (HandleSymRedefinition (Entry, T, Flags)) { @@ -1234,19 +1243,14 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs if (SymIsDef (Entry) && (Flags & SC_DEF) == SC_DEF) { Error ("Multiple definition of '%s'", Entry->Name); Entry = 0; - } else if ((Flags & (SC_AUTO | SC_REGISTER)) != 0 && - (Entry->Flags & SC_EXTERN) != 0) { - /* Check for local storage class conflict */ - Error ("Declaration of '%s' with no linkage follows extern declaration", - Name); - Entry = 0; - } else { - /* If a static declaration follows a non-static declaration, - ** then it is an error. - */ - if ((Flags & SC_DEF) && - (Flags & SC_EXTERN) == 0 && - (Entry->Flags & SC_EXTERN) != 0) { + } else if (CheckExtern) { + if ((Flags & (SC_AUTO | SC_REGISTER)) != 0) { + Error ("Declaration of '%s' with no linkage follows extern declaration", Name); + Entry = 0; + } else if ((Flags & SC_DEF) != 0 && (Flags & SC_EXTERN) == 0) { + /* If a static declaration follows a non-static declaration, + ** then it is an error. + */ Error ("Static declaration of '%s' follows extern declaration", Name); Entry = 0; } @@ -1340,7 +1344,8 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) Name); Entry = 0; } else if ((Flags & SC_ESUTYPEMASK) != SC_TYPEDEF) { - /* If a static declaration follows a non-static declaration, then the result is undefined. + /* If a static declaration follows a non-static declaration, then + ** the result is undefined. ** Most compilers choose to either give an error at compile time, ** or remove the extern property for a link time error if used. */ @@ -1348,6 +1353,7 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) (Flags & SC_EXTERN) == 0 && (Entry->Flags & SC_EXTERN) != 0) { Error ("Static declaration of '%s' follows non-static declaration", Name); + Entry = 0; } else if ((Flags & SC_EXTERN) != 0 && (Entry->Owner == SymTab0 || (Entry->Flags & SC_DEF) != 0) && (Entry->Flags & SC_EXTERN) == 0) { @@ -1359,14 +1365,15 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) */ if (Entry->Owner == SymTab0) { if ((Flags & SC_STORAGE) == 0) { - /* Linkage must be unchanged. - ** The C standard specifies that a later extern declaration will be ignored, - ** and will use the previous linkage instead. Giving a warning for this case. + /* The C standard specifies that a later extern declaration will keep + ** the previously declared internal or external linkage unchanged. + ** Though not required by the standard, we are warning on this case. */ Flags &= ~SC_EXTERN; - Warning ("Extern declaration of '%s' follows static declaration, extern ignored", Name); + Warning ("Extern declaration of '%s' follows static declaration, linkage unchanged", Name); } else { Error ("Non-static declaration of '%s' follows static declaration", Name); + Entry = 0; } } else { Error ("Extern declaration of '%s' follows static declaration", Name); diff --git a/test/err/bug2162-none-extern-auto.c b/test/err/bug2162-none-extern-auto.c new file mode 100644 index 000000000..777fc48e7 --- /dev/null +++ b/test/err/bug2162-none-extern-auto.c @@ -0,0 +1,8 @@ +/* Bug #2162 - conflicting declarations in functions */ + +int main(void) +{ + extern int i; + int i = 42; /* Error */ + return i; +} diff --git a/test/err/bug2162-none-static-extern.c b/test/err/bug2162-none-static-extern.c new file mode 100644 index 000000000..cffb6a3bf --- /dev/null +++ b/test/err/bug2162-none-static-extern.c @@ -0,0 +1,8 @@ +/* Bug #2162 - conflicting declarations in functions */ + +int main(void) +{ + static int i = 42; + extern int i; /* Error */ + return i; +} diff --git a/test/err/bug2162-static-extern-auto.c b/test/err/bug2162-static-extern-auto.c new file mode 100644 index 000000000..08d91e0e1 --- /dev/null +++ b/test/err/bug2162-static-extern-auto.c @@ -0,0 +1,10 @@ +/* Bug #2162 - conflicting declarations in functions */ + +static int i; + +int main(void) +{ + extern int i; /* cc65 allows this */ + int i = 42; /* Error - if this were accepted, it would be confusing which object i refers to */ + return i; +} diff --git a/test/err/bug2162-static-static-extern.c b/test/err/bug2162-static-static-extern.c new file mode 100644 index 000000000..e0a536d6c --- /dev/null +++ b/test/err/bug2162-static-static-extern.c @@ -0,0 +1,10 @@ +/* Bug #2162 - conflicting declarations in functions */ + +static int i; + +int main(void) +{ + static int i = 42; /* OK - this shadows the i in file scope */ + extern int i; /* Error - if this were accepted, it would be confusing which object i refers to */ + return i; +} From 3626c94c975a5145d874ae32666f41450c896897 Mon Sep 17 00:00:00 2001 From: ToboterXP <55210408+ToboterXP@users.noreply.github.com> Date: Sun, 17 Sep 2023 22:48:47 +0200 Subject: [PATCH 2194/2710] Added FX registers to cx16.h --- include/cx16.h | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/include/cx16.h b/include/cx16.h index 66f21843e..620b9801d 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -256,6 +256,42 @@ struct __vera { unsigned char vstart; /* Vertical start position */ unsigned char vstop; /* Vertical stop position */ }; + struct { /* Visible when DCSEL flag = 2 */ + unsigned char fxctrl; + unsigned char fxtilebase; + unsigned char fxmapbase; + unsigned char fxmult; + }; + struct { /* Visible when DCSEL flag = 3 */ + unsigned char fxxincrl; + unsigned char fxxincrh; + unsigned char fxyincrl; + unsigned char fxyincrh; + }; + struct { /* Visible when DCSEL flag = 4 */ + unsigned char fxxposl; + unsigned char fxxposh; + unsigned char fxyposl; + unsigned char fxyposh; + }; + struct { /* Visible when DCSEL flag = 5 */ + unsigned char fxxposs; + unsigned char fxyposs; + unsigned char fxpolyfilll; + unsigned char fxpolyfillh; + }; + struct { /* Visible when DCSEL flag = 6 */ + unsigned char fxcachel; + unsigned char fxcachem; + unsigned char fxcacheh; + unsigned char fxcacheu; + }; + struct { /* Visible when DCSEL flag = 63 */ + unsigned char dcver0; + unsigned char dcver1; + unsigned char dcver2; + unsigned char dcver3; + } } display; struct { unsigned char config; /* Layer map geometry */ From d251bd46c817710c268432b895a73e26c66b51b9 Mon Sep 17 00:00:00 2001 From: ToboterXP <55210408+ToboterXP@users.noreply.github.com> Date: Sun, 17 Sep 2023 22:54:48 +0200 Subject: [PATCH 2195/2710] Removed dangling spaces --- include/cx16.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/cx16.h b/include/cx16.h index 620b9801d..5971cc2f6 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -290,7 +290,7 @@ struct __vera { unsigned char dcver0; unsigned char dcver1; unsigned char dcver2; - unsigned char dcver3; + unsigned char dcver3; } } display; struct { From 0815c8890b5d4d472dfd563706efc5b295489908 Mon Sep 17 00:00:00 2001 From: ToboterXP <55210408+ToboterXP@users.noreply.github.com> Date: Sun, 17 Sep 2023 22:57:42 +0200 Subject: [PATCH 2196/2710] Added semicolon --- include/cx16.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/cx16.h b/include/cx16.h index 5971cc2f6..5bbd21247 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -291,7 +291,7 @@ struct __vera { unsigned char dcver1; unsigned char dcver2; unsigned char dcver3; - } + }; } display; struct { unsigned char config; /* Layer map geometry */ From fc603129da73bd5b3daed358479b99f140b521f0 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 18 Sep 2023 15:44:58 +0800 Subject: [PATCH 2197/2710] A structure with a flexible array member shall not be a member of a structure or an element of an array according to the ISO C Standard. --- src/cc65/declare.c | 10 ++++++++++ test/err/bug2016-fam-member.c | 11 +++++++++++ test/err/bug2017-fam-element.c | 9 +++++++++ 3 files changed, 30 insertions(+) create mode 100644 test/err/bug2016-fam-member.c create mode 100644 test/err/bug2017-fam-element.c diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 59eb555c4..80be9ceb7 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -515,6 +515,13 @@ static void CheckArrayElementType (Type* DataType) if (!IsTypeVoid (T) || IS_Get (&Standard) != STD_CC65) { Error ("Array of 0-size element type '%s'", GetFullTypeName (T)); } + } else { + if (IsTypeStruct (T)) { + SymEntry* TagEntry = GetESUTagSym (T); + if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) { + Error ("Invalid use of struct with flexible array member"); + } + } } } else { ++T; @@ -1193,6 +1200,9 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) { Field->Flags |= SC_HAVEFAM; Flags |= SC_HAVEFAM; + if (IsTypeStruct (Decl.Type)) { + Error ("Invalid use of struct with flexible array member"); + } } } diff --git a/test/err/bug2016-fam-member.c b/test/err/bug2016-fam-member.c new file mode 100644 index 000000000..02c9ec275 --- /dev/null +++ b/test/err/bug2016-fam-member.c @@ -0,0 +1,11 @@ +/* Bug #2016 - cc65 erroneously allows struct fields that are structs with flexible array members */ + +typedef struct x { + int a; + int b[]; /* Ok: Flexible array member can be last */ +} x; + +struct y { + x x; /* Not ok: Contains flexible array member */ + int a; +}; diff --git a/test/err/bug2017-fam-element.c b/test/err/bug2017-fam-element.c new file mode 100644 index 000000000..195ca6597 --- /dev/null +++ b/test/err/bug2017-fam-element.c @@ -0,0 +1,9 @@ +/* Bug #2017 - cc65 erroneously allows arrays of structs with flexible array members */ + +struct z { + int a; + int c; + int b[]; +}; + +struct z y[3]; /* Should be an error */ From 51e304f10f6a184f39f1f69d2f0d52e7cd9e5347 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 18 Sep 2023 16:44:04 +0800 Subject: [PATCH 2198/2710] Added check for total arguments size for variadic functions. --- src/cc65/expr.c | 4 ++++ test/err/bug2144.c | 13 +++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 test/err/bug2144.c diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 47a05eca0..37af494b5 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1035,6 +1035,10 @@ static void FunctionCall (ExprDesc* Expr) /* Parse the argument list and pass them to the called function */ ArgSize = FunctionArgList (Func, IsFastcall, Expr); + if (ArgSize > 0xFF && (Func->Flags & FD_VARIADIC) != 0) { + Error ("Total size of all arguments passed to a variadic function cannot exceed 255 bytes"); + } + /* We need the closing paren here */ ConsumeRParen (); diff --git a/test/err/bug2144.c b/test/err/bug2144.c new file mode 100644 index 000000000..eb27d672b --- /dev/null +++ b/test/err/bug2144.c @@ -0,0 +1,13 @@ +/* Bug #2144 - Maximum parameter size is not checked for variadic functions */ + +void a(...) {} + +void b() +{ + /* Argument size > 255 */ + a(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, + 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, + 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, + 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, + 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L); +} From 13e1ed3e7bb3540fcb17141fbbd3496d29e3f7bc Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 22 Sep 2023 10:29:52 +0800 Subject: [PATCH 2199/2710] Fixed compound initialization with omitted enclosing curly braces when an array/struct/union to initialize is nested. --- src/cc65/initdata.c | 26 +++++++++++++++++-------- test/val/bug2135.c | 47 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 test/val/bug2135.c diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c index 619fe4897..f63e9e95c 100644 --- a/src/cc65/initdata.c +++ b/src/cc65/initdata.c @@ -343,8 +343,8 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Char array initialized by string constant */ int NeedParen; - /* If we initializer is enclosed in brackets, remember this fact and - ** skip the opening bracket. + /* If the initializer is enclosed in curly braces, remember this fact + ** and skip the opening one. */ NeedParen = (CurTok.Tok == TOK_LCURLY); if (NeedParen) { @@ -377,7 +377,9 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) } else { - /* Arrays can be initialized without a pair of curly braces */ + /* An array can be initialized without a pair of enclosing curly braces + ** if it is itself a member of a struct/union or an element of an array. + */ if (*Braces == 0 || CurTok.Tok == TOK_LCURLY) { /* Consume the opening curly brace */ HasCurly = ConsumeLCurly (); @@ -387,14 +389,22 @@ static unsigned ParseArrayInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Initialize the array members */ Count = 0; while (CurTok.Tok != TOK_RCURLY) { - /* Flexible array members may not be initialized within - ** an array (because the size of each element may differ - ** otherwise). + /* Flexible array members cannot be initialized within an array. + ** (Otherwise the size of each element may differ.) */ ParseInitInternal (ElementType, Braces, 0); ++Count; - if (CurTok.Tok != TOK_COMMA) + if (CurTok.Tok != TOK_COMMA) { break; + } + + if (!HasCurly && ElementCount > 0 && Count >= ElementCount) { + /* If the array is initialized without enclosing curly braces, + ** it only accepts how many elements initializers up to its + ** count of elements, leaving any following initializers out. + */ + break; + } NextToken (); } @@ -491,7 +501,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) Error ("Excess elements in %s initializer", GetBasicTypeName (T)); SkipInitializer (HasCurly); } - return SI.Offs; + break; } /* Check for special members that don't consume the initializer */ diff --git a/test/val/bug2135.c b/test/val/bug2135.c new file mode 100644 index 000000000..1da0d2316 --- /dev/null +++ b/test/val/bug2135.c @@ -0,0 +1,47 @@ +/* Bug #2135 - Compound initialization consumes wrong amount of initializers with omitted +** enclosing curly braces when an array/struct/union to initialize is itself +** a member/element of a struct/union/array. +*/ + +#include <stdint.h> +#include <stdio.h> + +struct s { + union { + int8_t a[2][2]; + char c[sizeof (int8_t) * 2 * 2 + sizeof (int16_t) * 4]; + }; + int16_t b[4]; +}; +struct s x = { 1, 2, 3, 4, 5, 6 }; +struct s y = { {{{1, 2}, {3, 4}}}, {5, 6} }; + +unsigned failures; + +int main(void) +{ + unsigned i, j; + + for (i = 0; i < 2; ++i) + { + for (j = 0; j < 2; ++j) + { + if (x.a[i][j] != y.a[i][j]) + { + ++failures; + printf("x.a[%u][%u] = %d\n, expected %d\n", i, j, x.a[i][j], y.a[i][j]); + } + } + } + + for (i = 0; i < 4; ++i) + { + if (x.b[i] != y.b[i]) + { + ++failures; + printf("x.b[%u] = %d\n, expected %d\n", i, x.b[i], y.b[i]); + } + } + + return failures; +} From e3bc143f27caef2cdd761f43a2f2b2d9e4a87637 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 13 Sep 2023 08:18:31 +0200 Subject: [PATCH 2200/2710] Another two bytes saved --- libsrc/apple2/ser/a2.ssc.s | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 13f903597..5b81128f9 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -330,8 +330,12 @@ SER_GET: beq :+ cmp #63 bcc :+ +.if (.cpu .bitand CPU_ISET_65C02) + stz Stopped +.else lda #$00 sta Stopped +.endif lda RtsOff ora #%00001000 sta ACIA_CMD,x From b81e5d00f205efc8d19a11841b5be16da109349d Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Fri, 22 Sep 2023 16:43:03 +0200 Subject: [PATCH 2201/2710] Update funcref cx16 --- doc/funcref.sgml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 067736e7c..524818b19 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -334,9 +334,11 @@ function. <itemize> <!-- <item><ref id="get_numbanks" name="get_numbanks"> --> -<!-- <item><ref id="get_ostype" name="get_ostype"> --> +<item><ref id="get_ostype" name="get_ostype"> <!-- <item><ref id="get_tv" name="get_tv"> --> <!-- <item><ref id="set_tv" name="set_tv"> --> +<!-- <item><ref id="vera_layer_enable" name="vera_layer_enable"> --> +<!-- <item><ref id="vera_sprites_enable" name="vera_sprites_enable"> --> <item><ref id="videomode" name="videomode"> <!-- <item><ref id="vpeek" name="vpeek"> --> <!-- <item><ref id="vpoke" name="vpoke"> --> @@ -3971,7 +3973,8 @@ be used in presence of a prototype. <descrip> <tag/Function/The function returns the operating system, the program runs on. <tag/Header/<tt/<ref id="apple2.h" name="apple2.h">, -<ref id="atari.h" name="atari.h">, <ref id="c64.h" name="c64.h">/ +<ref id="atari.h" name="atari.h">, <ref id="c64.h" name="c64.h">, +<ref id="cx16.h" name="cx16.h">/ <tag/Declaration/<tt/unsigned char get_ostype (void);/ <tag/Description/<tt/get_ostype/ is machine dependent and does not exist for all supported targets. If it exists, it returns a number that identifies the From d83354a8dd4887690535b649189e9bb1d98093ae Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sat, 23 Sep 2023 14:16:21 +0300 Subject: [PATCH 2202/2710] Fix default VS project settings. --- src/cc65.props | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cc65.props b/src/cc65.props index ef5a37fea..19fb0b646 100644 --- a/src/cc65.props +++ b/src/cc65.props @@ -21,6 +21,7 @@ <TreatWarningAsError>true</TreatWarningAsError> <PreprocessorDefinitions>_CRT_NONSTDC_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_WIN32_WINNT=0x0601;WINVER=0x0601;NTDDI_VERSION=0x06010000;%(PreprocessorDefinitions)</PreprocessorDefinitions> <AdditionalIncludeDirectories Condition="$(MSBuildProjectName) != 'common'">common</AdditionalIncludeDirectories> + <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions> </ClCompile> <Link> <AdditionalDependencies Condition="$(MSBuildProjectName) != 'common'">$(IntDir)..\..\common\$(Configuration)\common.lib</AdditionalDependencies> @@ -42,13 +43,13 @@ <!-- Release settings. --> <PropertyGroup Condition="'$(Configuration)'=='Release'"> <LinkIncremental>false</LinkIncremental> - <WholeProgramOptimization>true</WholeProgramOptimization> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)'=='Release'"> <ClCompile> <RuntimeLibrary>MultiThreaded</RuntimeLibrary> <FunctionLevelLinking>true</FunctionLevelLinking> <Optimization>MaxSpeed</Optimization> + <WholeProgramOptimization>true</WholeProgramOptimization> <BufferSecurityCheck>false</BufferSecurityCheck> <ControlFlowGuard>false</ControlFlowGuard> </ClCompile> @@ -57,6 +58,7 @@ <EnableCOMDATFolding>true</EnableCOMDATFolding> <OptimizeReferences>true</OptimizeReferences> <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration> + <AdditionalOptions>/EMITTOOLVERSIONINFO:NO /NOVCFEATURE /NOCOFFGRPINFO %(AdditionalOptions)</AdditionalOptions> </Link> </ItemDefinitionGroup> </Project> From 9b9e955eb11e0e86b4dfc73a81005d61905b773a Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sat, 23 Sep 2023 14:16:50 +0300 Subject: [PATCH 2203/2710] Add basic .editorconfig. --- .editorconfig | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..3920829e6 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +root = true + +[*] +charset = utf-8 +end_of_line = crlf +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true +insert_final_newline = true +guidelines = 80, 120 + +[*.{c,h}] +cpp_new_line_before_open_brace_block=same_line +cpp_new_line_before_open_brace_function=new_line +cpp_space_before_function_open_parenthesis=insert +cpp_new_line_before_else=false From 148942ff1dce082928f66e3a510b33def4817b44 Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sat, 23 Sep 2023 14:25:22 +0300 Subject: [PATCH 2204/2710] Don't use hardcoded Visual Studio installation path in msbuild.cmd. --- src/msbuild.cmd | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/msbuild.cmd b/src/msbuild.cmd index 2e1821f0a..092bfb578 100644 --- a/src/msbuild.cmd +++ b/src/msbuild.cmd @@ -1,18 +1,23 @@ @echo off +setlocal -if exist "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\Tools\VsDevCmd.bat" goto vs2017 -if exist "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat" goto vs2019 +where msbuild.exe 1>nul 2>&1 && goto :ready -echo Error: VsDevCmd.bat not found! -goto:eof +set VSWHERE_PATH=%ProgramFiles%\Microsoft Visual Studio\Installer\vswhere.exe +if not exist "%VSWHERE_PATH%" set VSWHERE_PATH=%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe +if not exist "%VSWHERE_PATH%" goto :error +for /f "usebackq delims=#" %%a in (`"%VSWHERE_PATH%" -latest -property installationPath`) do set VSDEVCMD_PATH=%%a\Common7\Tools\VsDevCmd.bat +if not exist "%VSDEVCMD_PATH%" goto :error +set VSCMD_SKIP_SENDTELEMETRY=1 +call "%VSDEVCMD_PATH%" -no_logo -startdir=none -:vs2017 -call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\Tools\VsDevCmd.bat" -goto run +where msbuild.exe 1>nul 2>&1 && goto :ready -:vs2019 -call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat" -goto run +:error + +echo Error: Can't find MSBuild. +exit /b 1 + +:ready -:run msbuild.exe %* From 4ff917816e5b0895b2525d18d35f9f7a9a57eed3 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 26 Sep 2023 22:27:17 +0200 Subject: [PATCH 2205/2710] Apple2: Always copy cmdline Otherwise, the last exec() cmdline lingers around for the next exec("file", NULL). --- libsrc/apple2/exec.s | 2 -- 1 file changed, 2 deletions(-) diff --git a/libsrc/apple2/exec.s b/libsrc/apple2/exec.s index d5cbf8788..27a6487bd 100644 --- a/libsrc/apple2/exec.s +++ b/libsrc/apple2/exec.s @@ -213,8 +213,6 @@ source: jsr $BF00 bcs error ; Check for cmdline handling - lda $0100 ; Valid cmdline? - beq jump ; No, jump to program right away ldx file_type ; SYS file? bne system ; Yes, check for startup filename From df4902157aebc48a86bac266df01efe8143179a0 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sat, 30 Sep 2023 11:09:27 +0200 Subject: [PATCH 2206/2710] Cleanup coding style a bit --- libsrc/apple2/ser/a2.ssc.s | 235 ++++++++++++++++++------------------- 1 file changed, 114 insertions(+), 121 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 5b81128f9..f81155543 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -38,8 +38,8 @@ .endif ; Driver signature - .byte $73, $65, $72 ; "ser" - .byte SER_API_VERSION ; Serial API version number + .byte $73, $65, $72 ; "ser" + .byte SER_API_VERSION ; Serial API version number ; Library reference .addr $0000 @@ -59,16 +59,16 @@ ; I/O definitions .if (.cpu .bitand CPU_ISET_65C02) -ACIA = $C088 +ACIA := $C088 .else Offset = $8F ; Move 6502 false read out of I/O to page $BF -ACIA = $C088-Offset +ACIA := $C088-Offset .endif -ACIA_DATA = ACIA+0 ; Data register -ACIA_STATUS = ACIA+1 ; Status register -ACIA_CMD = ACIA+2 ; Command register -ACIA_CTRL = ACIA+3 ; Control register +ACIA_DATA := ACIA+0 ; Data register +ACIA_STATUS := ACIA+1 ; Status register +ACIA_CMD := ACIA+2 ; Command register +ACIA_CTRL := ACIA+3 ; Control register ;---------------------------------------------------------------------------- ; Global variables @@ -77,16 +77,17 @@ ACIA_CTRL = ACIA+3 ; Control register RecvHead: .res 1 ; Head of receive buffer RecvTail: .res 1 ; Tail of receive buffer -RecvFreeCnt: .res 1 ; Number of bytes in receive buffer +RecvFreeCnt: .res 1 ; Number of free bytes in receive buffer SendHead: .res 1 ; Head of send buffer SendTail: .res 1 ; Tail of send buffer -SendFreeCnt: .res 1 ; Number of bytes in send buffer +SendFreeCnt: .res 1 ; Number of free bytes in send buffer Stopped: .res 1 ; Flow-stopped flag -RtsOff: .res 1 ; +RtsOff: .res 1 ; Cached value of command register with + ; flow stopped -RecvBuf: .res 256 ; Receive buffers: 256 bytes -SendBuf: .res 256 ; Send buffers: 256 bytes +RecvBuf: .res 256 ; Receive buffer: 256 bytes +SendBuf: .res 256 ; Send buffer: 256 bytes Index: .res 1 ; I/O register index @@ -96,8 +97,9 @@ Slot: .byte $02 ; Default to SSC in slot 2 .rodata - ; Tables used to translate RS232 params into register values -BaudTable: ; bit7 = 1 means setting is invalid +BaudTable: ; Table used to translate RS232 baudrate param + ; into control register value + ; bit7 = 1 means setting is invalid .byte $FF ; SER_BAUD_45_5 .byte $01 ; SER_BAUD_50 .byte $02 ; SER_BAUD_75 @@ -118,49 +120,55 @@ BaudTable: ; bit7 = 1 means setting is invalid .byte $FF ; SER_BAUD_57600 .byte $FF ; SER_BAUD_115200 .byte $FF ; SER_BAUD_230400 -BitTable: + +BitTable: ; Table used to translate RS232 databits param + ; into control register value .byte $60 ; SER_BITS_5 .byte $40 ; SER_BITS_6 .byte $20 ; SER_BITS_7 .byte $00 ; SER_BITS_8 -StopTable: + +StopTable: ; Table used to translate RS232 stopbits param + ; into control register value .byte $00 ; SER_STOP_1 .byte $80 ; SER_STOP_2 -ParityTable: + +ParityTable: ; Table used to translate RS232 parity param + ; into command register value .byte $00 ; SER_PAR_NONE .byte $20 ; SER_PAR_ODD .byte $60 ; SER_PAR_EVEN .byte $A0 ; SER_PAR_MARK .byte $E0 ; SER_PAR_SPACE - ; Check five bytes at known positions on the - ; slot's firmware to make sure this is an SSC - ; (or Apple //c comm port) firmware that drives - ; an ACIA 6551 chip. - ; - ; The SSC firmware and the Apple //c(+) comm - ; port firmware all begin with a BIT instruction. - ; The IIgs, on the other hand, has a - ; Zilog Z8530 chip and its firmware starts with - ; a SEP instruction. We don't want to load this - ; driver on the IIgs' serial port. We'll - ; differentiate the firmware on this byte. - ; - ; The next four bytes we check are the Pascal - ; Firmware Protocol Bytes that identify a - ; serial card. Those are the same bytes for - ; SSC firmwares, Apple //c firmwares and IIgs - ; Zilog Z8530 firmwares - which is the reason - ; we have to check for the firmware's first - ; instruction too. - -IdOfsTable: +IdOfsTable: ; Table of bytes positions, used to check five + ; specific bytes on the slot's firmware to make + ; sure this is an SSC (or Apple //c comm port) + ; firmware that drives an ACIA 6551 chip. + ; + ; The SSC firmware and the Apple //c(+) comm + ; port firmware all begin with a BIT instruction. + ; The IIgs, on the other hand, has a + ; Zilog Z8530 chip and its firmware starts with + ; a SEP instruction. We don't want to load this + ; driver on the IIgs' serial port. We'll + ; differentiate the firmware on this byte. + ; + ; The next four bytes we check are the Pascal + ; Firmware Protocol Bytes that identify a + ; serial card. Those are the same bytes for + ; SSC firmwares, Apple //c firmwares and IIgs + ; Zilog Z8530 firmwares - which is the reason + ; we have to check for the firmware's first + ; instruction too. .byte $00 ; First instruction .byte $05 ; Pascal 1.0 ID byte .byte $07 ; Pascal 1.0 ID byte .byte $0B ; Pascal 1.1 generic signature byte .byte $0C ; Device signature byte -IdValTable: + +IdValTable: ; Table of expected values for the five checked + ; bytes .byte $2C ; BIT .byte $38 ; ID Byte 0 (from Pascal 1.0), fixed .byte $18 ; ID Byte 1 (from Pascal 1.0), fixed @@ -193,12 +201,10 @@ SER_CLOSE: ldx Index ; Check for open port beq :+ - ; Deactivate DTR and disable 6551 interrupts - lda #%00001010 + lda #%00001010 ; Deactivate DTR and disable 6551 interrupts sta ACIA_CMD,x - ; Done, return an error code -: lda #SER_ERR_OK +: lda #SER_ERR_OK ; Done, return an error code .assert SER_ERR_OK = 0, error tax stx Index ; Mark port as closed @@ -215,98 +221,96 @@ SER_OPEN: ora Slot sta ptr2+1 - ; Check Pascal 1.1 Firmware Protocol ID bytes -: ldy IdOfsTable,x +: ldy IdOfsTable,x ; Check Pascal 1.1 Firmware Protocol ID bytes lda IdValTable,x cmp (ptr2),y - bne NoDevice + bne NoDev inx cpx #IdTableLen bcc :- - ; Convert slot to I/O register index - lda Slot + lda Slot ; Convert slot to I/O register index asl asl asl asl .if .not (.cpu .bitand CPU_ISET_65C02) - adc #Offset ; Assume carry to be clear + adc #Offset ; Assume carry to be clear .endif tax ; Check if the handshake setting is valid - ldy #SER_PARAMS::HANDSHAKE ; Handshake + ldy #SER_PARAMS::HANDSHAKE lda (ptr1),y - cmp #SER_HS_HW ; This is all we support - bne InvParam + cmp #SER_HS_HW ; This is all we support + bne InvParm - ; Initialize buffers - ldy #$00 + ldy #$00 ; Initialize buffers sty Stopped sty RecvHead sty RecvTail sty SendHead sty SendTail - dey ; Y = 255 + dey ; Y = 255 sty RecvFreeCnt sty SendFreeCnt ; Set the value for the control register, which contains stop bits, ; word length and the baud rate. ldy #SER_PARAMS::BAUDRATE - lda (ptr1),y ; Baudrate index + lda (ptr1),y ; Baudrate index tay - lda BaudTable,y ; Get 6551 value - bmi InvBaud ; Branch if rate not supported + lda BaudTable,y ; Get 6551 value + bmi InvBaud ; Branch if rate not supported sta tmp1 - ldy #SER_PARAMS::DATABITS ; Databits - lda (ptr1),y + ldy #SER_PARAMS::DATABITS + lda (ptr1),y ; Databits index tay - lda BitTable,y + lda BitTable,y ; Get 6551 value ora tmp1 sta tmp1 - ldy #SER_PARAMS::STOPBITS ; Stopbits - lda (ptr1),y + ldy #SER_PARAMS::STOPBITS + lda (ptr1),y ; Stopbits index tay - lda StopTable,y + lda StopTable,y ; Get 6551 value ora tmp1 - ora #%00010000 ; Receiver clock source = baudrate + ora #%00010000 ; Set receiver clock source = baudrate sta ACIA_CTRL,x ; Set the value for the command register. We remember the base value ; in RtsOff, since we will have to manipulate ACIA_CMD often. - ldy #SER_PARAMS::PARITY ; Parity - lda (ptr1),y + ldy #SER_PARAMS::PARITY + lda (ptr1),y ; Parity index tay - lda ParityTable,y - ora #%00000001 ; DTR active - sta RtsOff - ora #%00001000 ; Enable receive interrupts + lda ParityTable,y ; Get 6551 value + + ora #%00000001 ; Set DTR active + sta RtsOff ; Store value to easily handle flow control later + ora #%00001000 ; Enable receive interrupts (RTS low) sta ACIA_CMD,x ; Done - stx Index ; Mark port as open + stx Index ; Mark port as open lda #SER_ERR_OK .assert SER_ERR_OK = 0, error tax rts ; Device (hardware) not found -NoDevice:lda #SER_ERR_NO_DEVICE - ldx #0 ; return value is char +NoDev: lda #SER_ERR_NO_DEVICE + ldx #$00 ; return value is char rts ; Invalid parameter -InvParam:lda #SER_ERR_INIT_FAILED - ldx #0 ; return value is char +InvParm:lda #SER_ERR_INIT_FAILED + ldx #$00 ; return value is char rts ; Baud rate not available InvBaud:lda #SER_ERR_BAUD_UNAVAIL - ldx #0 ; return value is char + ldx #$00 ; return value is char rts ;---------------------------------------------------------------------------- @@ -317,21 +321,19 @@ InvBaud:lda #SER_ERR_BAUD_UNAVAIL SER_GET: ldx Index - ; Check for buffer empty - lda RecvFreeCnt ; (25) + lda RecvFreeCnt ; Check for buffer empty cmp #$FF bne :+ lda #SER_ERR_NO_DATA - ldx #0 ; return value is char + ldx #$00 ; return value is char rts - ; Check for flow stopped & enough free: release flow control -: ldy Stopped ; (34) +: ldy Stopped ; Check for flow stopped beq :+ - cmp #63 + cmp #63 ; Enough free? bcc :+ .if (.cpu .bitand CPU_ISET_65C02) - stz Stopped + stz Stopped ; Release flow control .else lda #$00 sta Stopped @@ -340,14 +342,13 @@ SER_GET: ora #%00001000 sta ACIA_CMD,x - ; Get byte from buffer -: ldy RecvHead ; (41) +: ldy RecvHead ; Get byte from buffer lda RecvBuf,y inc RecvHead inc RecvFreeCnt - ldx #$00 ; (59) + ldx #$00 .if (.cpu .bitand CPU_ISET_65C02) - sta (ptr1) + sta (ptr1) ; Store it for caller .else sta (ptr1,x) .endif @@ -361,29 +362,26 @@ SER_GET: SER_PUT: ldx Index - ; Try to send - ldy SendFreeCnt - cpy #$FF ; Nothing to flush + ldy SendFreeCnt ; Anything to send first? + cpy #$FF ; No beq :+ pha lda #$00 ; TryHard = false - jsr TryToSend + jsr TryToSend ; Try to flush send buffer pla - ; Reload SendFreeCnt after TryToSend - ldy SendFreeCnt + ldy SendFreeCnt ; Reload SendFreeCnt after TryToSend bne :+ lda #SER_ERR_OVERFLOW - ldx #0 ; return value is char + ldx #$00 ; return value is char rts - ; Put byte into send buffer & send -: ldy SendTail +: ldy SendTail ; Put byte into send buffer sta SendBuf,y inc SendTail dec SendFreeCnt lda #$FF ; TryHard = true - jsr TryToSend + jsr TryToSend ; Flush send buffer lda #SER_ERR_OK .assert SER_ERR_OK = 0, error tax @@ -405,26 +403,25 @@ SER_STATUS: ;---------------------------------------------------------------------------- ; SER_IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl ; specific data in ptr1, and the ioctl code in A. +; The ioctl data is the slot number to open. ; Must return an SER_ERR_xx code in a/x. SER_IOCTL: - ; Check data msb and code to be 0 - ora ptr1+1 + ora ptr1+1 ; Check data msb and code to be 0 bne :+ - ; Check data lsb to be [1..7] - ldx ptr1 + ldx ptr1 ; Check data lsb to be [1..7] beq :+ cpx #7+1 bcs :+ - stx Slot + stx Slot ; Store slot .assert SER_ERR_OK = 0, error tax rts : lda #SER_ERR_INV_IOCTL - ldx #0 ; return value is char + ldx #$00 ; return value is char rts ;---------------------------------------------------------------------------- @@ -450,8 +447,7 @@ SER_IRQ: bcc Flow ; Assert flow control if buffer space low rts ; Interrupt handled (carry already set) - ; Assert flow control if buffer space too low -Flow: ldx Index +Flow: ldx Index ; Assert flow control if buffer space too low lda RtsOff sta ACIA_CMD,x sta Stopped @@ -464,26 +460,23 @@ Done: rts TryToSend: sta tmp1 ; Remember tryHard flag NextByte: - lda SendFreeCnt - cmp #$FF - beq Quit ; Bail out + lda SendFreeCnt ; Is there anything to send? This can happen if + cmp #$FF ; we got interrupted by RX while sending, and + beq Quit ; flow control was asserted. - ; Check for flow stopped -Again: lda Stopped - bne Quit ; Bail out +Again: lda Stopped ; Is flow stopped? + bne Quit ; Yes, Bail out - ; Check that ACIA is ready to send - lda ACIA_STATUS,x + lda ACIA_STATUS,x ; Check that ACIA is ready to send and #$10 - bne Send + bne Send ; It is! bit tmp1 ; Keep trying if must try hard bmi Again Quit: rts - ; Send byte and try again -Send: ldy SendHead +Send: ldy SendHead ; Get first byte to send lda SendBuf,y - sta ACIA_DATA,x + sta ACIA_DATA,x ; Send it inc SendHead inc SendFreeCnt - jmp NextByte + jmp NextByte ; And try next one From 330b1ab3f90af82b79c8c2a709f638304338cfd2 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 3 Oct 2023 13:36:04 +0200 Subject: [PATCH 2207/2710] Remove useless comments --- libsrc/apple2/ser/a2.ssc.s | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index f81155543..942adad82 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -300,17 +300,17 @@ SER_OPEN: ; Device (hardware) not found NoDev: lda #SER_ERR_NO_DEVICE - ldx #$00 ; return value is char + ldx #$00 rts ; Invalid parameter InvParm:lda #SER_ERR_INIT_FAILED - ldx #$00 ; return value is char + ldx #$00 rts ; Baud rate not available InvBaud:lda #SER_ERR_BAUD_UNAVAIL - ldx #$00 ; return value is char + ldx #$00 rts ;---------------------------------------------------------------------------- @@ -325,7 +325,7 @@ SER_GET: cmp #$FF bne :+ lda #SER_ERR_NO_DATA - ldx #$00 ; return value is char + ldx #$00 rts : ldy Stopped ; Check for flow stopped @@ -373,7 +373,7 @@ SER_PUT: ldy SendFreeCnt ; Reload SendFreeCnt after TryToSend bne :+ lda #SER_ERR_OVERFLOW - ldx #$00 ; return value is char + ldx #$00 rts : ldy SendTail ; Put byte into send buffer @@ -421,7 +421,7 @@ SER_IOCTL: rts : lda #SER_ERR_INV_IOCTL - ldx #$00 ; return value is char + ldx #$00 rts ;---------------------------------------------------------------------------- From e16a5e0dbefb90325ed043f0d2edd795e2d97056 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 7 Sep 2023 21:30:01 +0200 Subject: [PATCH 2208/2710] Add Apple IIgs serial driver --- doc/apple2.sgml | 27 +- doc/apple2enh.sgml | 27 +- include/apple2.h | 1 + include/apple2enh.h | 1 + libsrc/apple2/ser/a2.gs.s | 692 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 744 insertions(+), 4 deletions(-) create mode 100644 libsrc/apple2/ser/a2.gs.s diff --git a/doc/apple2.sgml b/doc/apple2.sgml index 0d3ec34e5..a3ddb1d39 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -427,8 +427,12 @@ The names in the parentheses denote the symbols to be used for static linking of <descrip> <tag><tt/a2.ssc.ser (a2_ssc_ser)/</tag> - Driver for the Apple II Super Serial Card. Supports up to 19200 baud, - requires hardware flow control (RTS/CTS) and does interrupt driven receives. + Driver for the Apple II Super Serial Card. + They are extension cards for the II, II+, IIe, and the Apple //c and //c+ have + the same hardware and firmware integrated. + It supports up to 9600 baud, requires hardware flow control (RTS/CTS) and + does interrupt driven receives. Speeds faster than 9600 baud aren't reachable + because the ROM and ProDOS IRQ handlers are too slow. Note that because of the peculiarities of the 6551 chip transmits are not interrupt driven, and the transceiver blocks if the receiver asserts flow control because of a full buffer. @@ -438,6 +442,25 @@ The names in the parentheses denote the symbols to be used for static linking of succeeds for all Apple II slots, but <tt/ser_open()/ fails with <tt/SER_ERR_NO_DEVICE/ if there's no SSC firmware found in the selected slot. + In the Apple //c and //c+, slot 1 is the printer port, and slot 2 is the modem + port. + + Never call <tt/ser_apple2_slot()/ after <tt/ser_open()/. + + <tag><tt/a2.gs.ser (a2_gs_ser)/</tag> + Driver for the Apple IIgs serial ports (printer and modem). + It supports up to 9600 baud, requires hardware flow control (RTS/CTS) and + does interrupt driven receives. Speeds faster than 9600 baud aren't reachable + because the ROM and ProDOS IRQ handlers are too slow. + Note that transmits are not interrupt driven, and the transceiver blocks if + the receiver asserts flow control because of a full buffer. + + The driver defaults to opening the modem port. Calling <tt/ser_apple2_slot()/ + prior to <tt/ser_open()/ allows to select the printer port (1) or the modem + port (0). + + Never call <tt/ser_apple2_slot()/ after <tt/ser_open()/. + </descrip><p> diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 932aae52d..6bc6a3adf 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -428,8 +428,12 @@ The names in the parentheses denote the symbols to be used for static linking of <descrip> <tag><tt/a2e.ssc.ser (a2e_ssc_ser)/</tag> - Driver for the Apple II Super Serial Card. Supports up to 19200 baud, - requires hardware flow control (RTS/CTS) and does interrupt driven receives. + Driver for the Apple II Super Serial Card. + They are extension cards for the II, II+, IIe, and the Apple //c and //c+ have + the same hardware and firmware integrated. + It supports up to 9600 baud, requires hardware flow control (RTS/CTS) and + does interrupt driven receives. Speeds faster than 9600 baud aren't reachable + because the ROM and ProDOS IRQ handlers are too slow. Note that because of the peculiarities of the 6551 chip transmits are not interrupt driven, and the transceiver blocks if the receiver asserts flow control because of a full buffer. @@ -439,6 +443,25 @@ The names in the parentheses denote the symbols to be used for static linking of succeeds for all Apple II slots, but <tt/ser_open()/ fails with <tt/SER_ERR_NO_DEVICE/ if there's no SSC firmware found in the selected slot. + In the Apple //c and //c+, slot 1 is the printer port, and slot 2 is the modem + port. + + Never call <tt/ser_apple2_slot()/ after <tt/ser_open()/. + + <tag><tt/a2e.gs.ser (a2e_gs_ser)/</tag> + Driver for the Apple IIgs serial ports (printer and modem). + It supports up to 9600 baud, requires hardware flow control (RTS/CTS) and + does interrupt driven receives. Speeds faster than 9600 baud aren't reachable + because the ROM and ProDOS IRQ handlers are too slow. + Note that transmits are not interrupt driven, and the transceiver blocks if + the receiver asserts flow control because of a full buffer. + + The driver defaults to opening the modem port. Calling <tt/ser_apple2_slot()/ + prior to <tt/ser_open()/ allows to select the printer port (1) or the modem + port (0). + + Never call <tt/ser_apple2_slot()/ after <tt/ser_open()/. + </descrip><p> diff --git a/include/apple2.h b/include/apple2.h index 9f644bc97..8b9a3e0ea 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -172,6 +172,7 @@ extern void a2_auxmem_emd[]; extern void a2_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */ extern void a2_stdmou_mou[]; /* Referred to by mouse_static_stddrv[] */ extern void a2_ssc_ser[]; /* Referred to by ser_static_stddrv[] */ +extern void a2_gs_ser[]; /* IIgs serial driver */ extern void a2_hi_tgi[]; /* Referred to by tgi_static_stddrv[] */ extern void a2_lo_tgi[]; #endif diff --git a/include/apple2enh.h b/include/apple2enh.h index bfe5cdb18..3989d0b8d 100644 --- a/include/apple2enh.h +++ b/include/apple2enh.h @@ -100,6 +100,7 @@ extern void a2e_auxmem_emd[]; extern void a2e_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */ extern void a2e_stdmou_mou[]; /* Referred to by mouse_static_stddrv[] */ extern void a2e_ssc_ser[]; /* Referred to by ser_static_stddrv[] */ +extern void a2e_gs_ser[]; /* IIgs serial driver */ extern void a2e_hi_tgi[]; /* Referred to by tgi_static_stddrv[] */ extern void a2e_lo_tgi[]; diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s new file mode 100644 index 000000000..5cb3ea322 --- /dev/null +++ b/libsrc/apple2/ser/a2.gs.s @@ -0,0 +1,692 @@ +; +; Serial driver for the Apple IIgs Zilog Z8530. +; +; Colin Leroy-Mira <colin@colino.net>, 2023 +; +; This software is licensed under the same license as cc65, +; the zlib license (see LICENSE file). +; +; Documentation from http://www.applelogic.org/files/Z8530UM.pdf (pages +; referred to where applicable) +; and https://gswv.apple2.org.za/a2zine/Utils/Z8530_SCCsamples_info.txt + + + + .setcpu "65816" + + .include "zeropage.inc" + .include "ser-kernel.inc" + .include "ser-error.inc" + + .macpack module + +; ------------------------------------------------------------------------ +; Header. Includes jump table + + .ifdef __APPLE2ENH__ + module_header _a2e_gs_ser + .else + module_header _a2_gs_ser + .endif + + ; Driver signature + .byte $73, $65, $72 ; "ser" + .byte SER_API_VERSION ; Serial API version number + + ; Library reference + .addr $0000 + + ; Jump table + .addr SER_INSTALL + .addr SER_UNINSTALL + .addr SER_OPEN + .addr SER_CLOSE + .addr SER_GET + .addr SER_PUT + .addr SER_STATUS + .addr SER_IOCTL + .addr SER_IRQ + +;---------------------------------------------------------------------------- +; Global variables + + .bss + +RecvHead: .res 1 ; Head of receive buffer +RecvTail: .res 1 ; Tail of receive buffer +RecvFreeCnt: .res 1 ; Number of bytes in receive buffer +SendHead: .res 1 ; Head of send buffer +SendTail: .res 1 ; Tail of send buffer +SendFreeCnt: .res 1 ; Number of bytes in send buffer + +Stopped: .res 1 ; Flow-stopped flag +RtsOff: .res 1 + +RecvBuf: .res 256 ; Receive buffers: 256 bytes +SendBuf: .res 256 ; Send buffers: 256 bytes + + .data + +Slot: .byte $00 ; 2 when opened +Channel: .byte $00 ; Channel B by default +CurChanIrqFlags:.byte INTR_PENDING_RX_EXT_B + +SerFlagOrig: .byte $00 + +; Tables used to translate RS232 params into register values +; (Ref page 5-18 and 5-19) +BaudLowTable: + .byte $7E ; SER_BAUD_300 + .byte $5E ; SER_BAUD_1200 + .byte $2E ; SER_BAUD_2400 + .byte $16 ; SER_BAUD_4800 + .byte $0A ; SER_BAUD_9600 + .byte $04 ; SER_BAUD_19200 + .byte $01 ; SER_BAUD_38400 + .byte $00 ; SER_BAUD_57600 + +BaudHighTable: + .byte $01 ; SER_BAUD_300 + .byte $00 ; SER_BAUD_1200 + .byte $00 ; SER_BAUD_2400 + .byte $00 ; SER_BAUD_4800 + .byte $00 ; SER_BAUD_9600 + .byte $00 ; SER_BAUD_19200 + .byte $00 ; SER_BAUD_38400 + .byte $00 ; SER_BAUD_57600 + +RxBitTable: + .byte %00000000 ; SER_BITS_5, in WR_RX_CTRL (WR3) + .byte %10000000 ; SER_BITS_6 (Ref page 5-7) + .byte %01000000 ; SER_BITS_7 + .byte %11000000 ; SER_BITS_8 +TxBitTable: + .byte %00000000 ; SER_BITS_5, in WR_TX_CTRL (WR5) + .byte %01000000 ; SER_BITS_6 (Ref page 5-9) + .byte %00100000 ; SER_BITS_7 + .byte %01100000 ; SER_BITS_8 + + .rodata + +BaudTable: ; bit7 = 1 means setting is invalid + ; Otherwise refers to the index in + ; Baud(Low/High)Table + .byte $FF ; SER_BAUD_45_5 + .byte $FF ; SER_BAUD_50 + .byte $FF ; SER_BAUD_75 + .byte $FF ; SER_BAUD_110 + .byte $FF ; SER_BAUD_134_5 + .byte $FF ; SER_BAUD_150 + .byte $00 ; SER_BAUD_300 + .byte $FF ; SER_BAUD_600 + .byte $01 ; SER_BAUD_1200 + .byte $FF ; SER_BAUD_1800 + .byte $02 ; SER_BAUD_2400 + .byte $FF ; SER_BAUD_3600 + .byte $03 ; SER_BAUD_4800 + .byte $FF ; SER_BAUD_7200 + .byte $04 ; SER_BAUD_9600 + .byte $05 ; SER_BAUD_19200 + .byte $06 ; SER_BAUD_38400 + .byte $07 ; SER_BAUD_57600 + .byte $FF ; SER_BAUD_115200 + .byte $FF ; SER_BAUD_230400 + +StopTable: + .byte %00000100 ; SER_STOP_1, in WR_TX_RX_CTRL (WR4) + .byte %00001100 ; SER_STOP_2 (Ref page 5-8) +ParityTable: + .byte %00000000 ; SER_PAR_NONE, in WR_TX_RX_CTRL (WR4) + .byte %00000001 ; SER_PAR_ODD (Ref page 5-8) + .byte %00000011 ; SER_PAR_EVEN + .byte $FF ; SER_PAR_MARK + .byte $FF ; SER_PAR_SPACE +IdOfsTable: + .byte $00 ; First firmware instruction + .byte $05 ; Pascal 1.0 ID byte + .byte $07 ; Pascal 1.0 ID byte + .byte $0B ; Pascal 1.1 generic signature byte + .byte $0C ; Device signature byte +IdValTable: + .byte $E2 ; SEP instruction + .byte $38 ; Fixed + .byte $18 ; Fixed + .byte $01 ; Fixed + .byte $31 ; Serial or parallel I/O card type 1 + +IdTableLen = * - IdValTable + +; ------------------------------------------------------------------------ +; Addresses + +ZILOG_BASE := $C200 + +SCCAREG := $C039 +SCCBREG := $C038 +SCCADATA := $C03B +SCCBDATA := $C03A + +; We're supposed to get SerFlag's address using GetAddr on ROMs 1 and 3. +; (https://archive.org/details/IIgs_2523018_SCC_Access, page 9) +; But, it's the same value as on ROM0. As we don't expect a ROM 4 anytime +; soon with a different value, let's keep it simple. + +SER_FLAG := $E10104 + +; ------------------------------------------------------------------------ +; Write registers, read registers, and values that interest us + +WR_INIT_CTRL = 0 +RR_INIT_STATUS = 0 +INIT_CTRL_CLEAR_EIRQ = %00010000 +INIT_CTRL_CLEAR_ERR = %00110000 +INIT_STATUS_READY = %00000100 +INIT_STATUS_RTS = %00100000 + +WR_TX_RX_MODE_CTRL = 1 +TX_RX_MODE_OFF = %00000000 +TX_RX_MODE_RXIRQ = %00010001 + +WR_RX_CTRL = 3 ; (Ref page 5-7) +RR_RX_STATUS = 9 ; Corresponding status register +RX_CTRL_ON = %00000001 ; ORed, Rx enabled +RX_CTRL_OFF = %11111110 ; ANDed,Rx disabled + +WR_TX_RX_CTRL = 4 +RR_TX_RX_STATUS = 4 +TX_RX_CLOCK_MUL = %01000000 ; Clock x16 (Ref page 5-8) + +WR_TX_CTRL = 5 ; (Ref page 5-9) +RR_TX_STATUS = 5 ; Corresponding status register +TX_CTRL_ON = %00001000 ; ORed, Tx enabled +TX_CTRL_OFF = %11110111 ; ANDed,Tx disabled +TX_DTR_ON = %01111111 ; ANDed,DTR ON (high) +TX_DTR_OFF = %10000000 ; ORed, DTR OFF +TX_RTS_ON = %00000010 ; ORed, RTS ON (low) +TX_RTS_OFF = %11111101 ; ANDed, RTS OFF + +WR_MASTER_IRQ_RST = 9 ; (Ref page 5-14) +MASTER_IRQ_SHUTDOWN = %00000010 ; STA'd +MASTER_IRQ_MIE_RST = %00001010 ; STA'd +MASTER_IRQ_SET = %00011001 ; STA'd + +WR_CLOCK_CTRL = 11 ; (Ref page 5-17) +CLOCK_CTRL_CH_A = %11010000 +CLOCK_CTRL_CH_B = %01010000 + +WR_BAUDL_CTRL = 12 ; (Ref page 5-18) +WR_BAUDH_CTRL = 13 ; (Ref page 5-19) + +WR_MISC_CTRL = 14 ; (Ref page 5-19) +MISC_CTRL_RATE_GEN_ON = %00000001 ; ORed +MISC_CTRL_RATE_GEN_OFF = %11111110 ; ANDed + +WR_IRQ_CTRL = 15 ; (Ref page 5-20) +IRQ_CLEANUP_EIRQ = %00001000 + +RR_SPEC_COND_STATUS = 1 ; (Ref page 5-23) +SPEC_COND_FRAMING_ERR = %01000000 +SPEC_COND_OVERRUN_ERR = %00100000 + +RR_IRQ_STATUS = 2 ; (Ref page 5-24) +IRQ_MASQ = %01110000 ; ANDed +IRQ_RX = %00100000 +IRQ_SPECIAL = %01100000 + +RR_INTR_PENDING_STATUS = 3 ; (Ref page 5-25) +INTR_PENDING_RX_EXT_A = %00101000 ; ANDed (RX or special IRQ) +INTR_PENDING_RX_EXT_B = %00000101 ; ANDed (RX or special IRQ) +INTR_IS_RX = %00100100 ; ANDed (RX IRQ, channel A or B) + +SER_FLAG_CH_A = %00111000 +SER_FLAG_CH_B = %00000111 + + .code + +; Read a register +; Input: X as channel +; Output result in A +.macro rra In,Reg + lda Reg + sta In,x + lda In,x +.endmacro + +; Write value of A to a register. +; Input: X as channel +.macro wra Out,Reg + pha + lda Reg + sta Out,x + pla + sta Out,x +.endmacro + +; Write value passed as parameter to a register. +; Input: X as channel +.macro wrr Out,Reg,Val + lda Reg + sta Out,x + lda Val + sta Out,x +.endmacro + +;---------------------------------------------------------------------------- +; SER_INSTALL: Is called after the driver is loaded into memory. If possible, +; check if the hardware is present. Must return an SER_ERR_xx code in a/x. +; +; Since we don't have to manage the IRQ vector on the Apple II, this is +; actually the same as: +; +; SER_UNINSTALL: Is called before the driver is removed from memory. +; No return code required (the driver is removed from memory on return). +; +; and: +; +; SER_CLOSE: Close the port and disable interrupts. Called without parameters. +; Must return an SER_ERR_xx code in a/x. + +SER_INSTALL: +SER_UNINSTALL: +SER_CLOSE: + ldx Slot ; Check for open port + beq :+ + ldx Channel + + ; Deactivate interrupts + sei + wrr SCCBREG, #WR_MASTER_IRQ_RST, #MASTER_IRQ_SHUTDOWN + wrr SCCBREG, #WR_TX_RX_MODE_CTRL, #TX_RX_MODE_OFF + + ; Reset SerFlag to what it was + lda SerFlagOrig + sta SER_FLAG + + lda SCCBDATA + + ; Clear external interrupts (twice) + ldy #WR_INIT_CTRL + lda #INIT_CTRL_CLEAR_EIRQ + + sty SCCBREG + sta SCCBREG + sty SCCBREG + sta SCCBREG + + ; Reset MIE for firmware use + wrr SCCBREG, #WR_MASTER_IRQ_RST, #MASTER_IRQ_MIE_RST + + ldx #$00 + stx Slot ; Mark port as closed + + cli +: txa + rts + +;---------------------------------------------------------------------------- +; SER_OPEN: A pointer to a ser_params structure is passed in ptr1. +; Must return an SER_ERR_xx code in a/x. + +SER_OPEN: + ; Check Pascal 1.1 Firmware Protocol ID bytes + ldx #$00 +Check: ldy IdOfsTable,x + lda IdValTable,x + cmp ZILOG_BASE,y + bne NoDevice + inx + cpx #IdTableLen + bcc Check + + beq HardwareFound + + ; Device (hardware) not found +NoDevice: + lda #SER_ERR_NO_DEVICE +SetupErrOut: + cli + ldx #$00 ; Return value is char + stx Slot ; Mark port closed + rts + +HardwareFound: + ; Check if the handshake setting is valid + ldy #SER_PARAMS::HANDSHAKE ; Handshake + lda (ptr1),y + cmp #SER_HS_HW ; This is all we support + beq SetupBufs + +InvParam: + lda #SER_ERR_INIT_FAILED + jmp SetupErrOut + +SetupBufs: + ; Initialize buffers + ldy #$00 + sty Stopped + sty RecvHead + sty RecvTail + sty SendHead + sty SendTail + dey ; Y = 255 + sty RecvFreeCnt + sty SendFreeCnt + + ldx Channel + + rra SCCBREG,#$00 ; Hit rr0 once to sync up + + ldy #SER_PARAMS::STOPBITS + lda (ptr1),y ; Stop bits + tay + lda StopTable,y ; Get value + + pha + ldy #SER_PARAMS::PARITY + lda (ptr1),y ; Parity bits + tay + cmp #$FF + beq InvParam + pla + ora ParityTable,y ; Get value + + ora #TX_RX_CLOCK_MUL + + wra SCCBREG,#WR_TX_RX_CTRL + + cpx #$00 + bne ClockA +ClockB: + wrr SCCBREG,#WR_CLOCK_CTRL,#CLOCK_CTRL_CH_B + + lda #INTR_PENDING_RX_EXT_B ; Store which IRQ bits we'll check + sta CurChanIrqFlags + + bra SetBaud +ClockA: + wrr SCCBREG,#WR_CLOCK_CTRL,#CLOCK_CTRL_CH_A + + lda #INTR_PENDING_RX_EXT_A ; Store which IRQ bits we'll check + sta CurChanIrqFlags + +SetBaud: + ldy #SER_PARAMS::BAUDRATE + lda (ptr1),y ; Baudrate index - cc65 value + tay + + lda BaudTable,y ; Get chip value from Low/High tables + tay + + lda BaudLowTable,y ; Get low byte + bmi InvParam ; Branch if rate not supported + + wra SCCBREG,#WR_BAUDL_CTRL + + lda BaudHighTable,y ; Get high byte + wra SCCBREG,#WR_BAUDH_CTRL + + lda #$00 + wra SCCBREG,#WR_MISC_CTRL + + ora #MISC_CTRL_RATE_GEN_ON ; Time to turn this thing on + wra SCCBREG,#WR_MISC_CTRL + + ; Final write to RX_CTRL + ldy #SER_PARAMS::DATABITS + lda (ptr1),y ; Data bits + tay + lda RxBitTable,y ; Data bits for RX + ora #RX_CTRL_ON ; Plus turn on + wra SCCBREG,#WR_RX_CTRL + + lda TxBitTable,y ; Data bits for TX + ora #TX_CTRL_ON ; Plus turn on + and #TX_DTR_ON + + sta RtsOff ; Save value for flow control + + ora #TX_RTS_ON + wra SCCBREG,#WR_TX_CTRL + + wrr SCCBREG,#WR_IRQ_CTRL,#IRQ_CLEANUP_EIRQ + + lda #WR_INIT_CTRL ; Clear ext status (write twice) + sta SCCBREG,x + lda #INIT_CTRL_CLEAR_EIRQ + sta SCCBREG,x + + lda #WR_INIT_CTRL + sta SCCBREG,x + lda #INIT_CTRL_CLEAR_EIRQ + sta SCCBREG,x + + ; Activate RX IRQ + wrr SCCBREG,#WR_TX_RX_MODE_CTRL,#TX_RX_MODE_RXIRQ + + wrr SCCBREG,#WR_MASTER_IRQ_RST,#MASTER_IRQ_SET + + lda SER_FLAG ; Get SerFlag's current value + sta SerFlagOrig ; and save it + + cpx #$00 + bne IntA +IntB: + ora #SER_FLAG_CH_B ; Inform firmware we want channel B IRQs + bra StoreFlag +IntA: + ora #SER_FLAG_CH_A ; Inform firmware we want channel A IRQs +StoreFlag: + sta SER_FLAG + + ldy #$02 ; Mark port opened + sty Slot + cli + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax + rts + +;---------------------------------------------------------------------------- +; SER_GET: Will fetch a character from the receive buffer and store it into the +; variable pointed to by ptr1. If no data is available, SER_ERR_NO_DATA is +; returned. + +SER_GET: + ldx Channel + + lda RecvFreeCnt ; Check for buffer empty + cmp #$FF + beq NoData + + ldy Stopped ; Check for flow stopped + beq :+ + cmp #63 ; Enough free? + bcc :+ + stz Stopped ; Release flow control + + lda RtsOff + ora #TX_RTS_ON + wra SCCBREG,#WR_TX_CTRL + +: ldy RecvHead ; Get byte from buffer + lda RecvBuf,y + inc RecvHead + inc RecvFreeCnt + sta (ptr1) + ldx #$00 + txa ; Return code = 0 + rts +NoData: + lda #SER_ERR_NO_DATA + ldx #$00 + rts + +;---------------------------------------------------------------------------- +; SER_PUT: Output character in A. +; Must return an SER_ERR_xx code in a/x. + +SER_PUT: + ldx Channel + + ldy SendFreeCnt ; Anything to send first? + iny ; Y = $FF? + beq :+ + pha + lda #$00 ; TryHard = false + jsr TryToSend + pla + +: ldy SendFreeCnt ; Do we have room to store byte? + bne :+ + lda #SER_ERR_OVERFLOW + ldx #$00 ; Return value is char + rts + +: ldy SendTail ; Put byte into send buffer & send + sta SendBuf,y + inc SendTail + dec SendFreeCnt + lda #$FF ; TryHard = true + jsr TryToSend + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax + rts + +;---------------------------------------------------------------------------- +; SER_STATUS: Return the status in the variable pointed to by ptr1. +; Must return an SER_ERR_xx code in a/x. +; We provide the read register 0, containing interesting info like +; INIT_STATUS_READY (hardware handshake status) or INIT_STATUS_RTS +; (ready to send). + +SER_STATUS: + ldx Channel + lda SCCBREG,x + ldx #$00 + sta (ptr1) + .assert SER_ERR_OK = 0, error + txa + rts + +;---------------------------------------------------------------------------- +; SER_IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl +; specific data in ptr1, and the ioctl code in A. +; Sets communication channel A or B (A = 1, B = 0) +; Must return an SER_ERR_xx code in a/x. + +SER_IOCTL: + ora ptr1+1 ; Check data msb and code to be 0 + bne :+ + + ldx ptr1 ; Check data lsb to be 0 or 1 + bmi :+ + cpx #$02 + bcs :+ + + stx Channel + .assert SER_ERR_OK = 0, error + tax + rts + +: lda #SER_ERR_INV_IOCTL + ldx #$00 ; Return value is char + rts + +;---------------------------------------------------------------------------- +; SER_IRQ: Called from the builtin runtime IRQ handler as a subroutine. All +; registers are already saved, no parameters are passed, but the carry flag +; is clear on entry. The routine must return with carry set if the interrupt +; was handled, otherwise with carry clear. + +SER_IRQ: + ldx #$00 ; IRQ status is always in A reg + rra SCCAREG,#RR_INTR_PENDING_STATUS + and CurChanIrqFlags ; Is this ours? + beq Done + + and #INTR_IS_RX ; Is this an RX irq? + beq CheckSpecial + + ldx Channel + lda SCCBDATA,x ; Get byte + ldx RecvFreeCnt ; Check if we have free space left + beq Flow ; Jump if no space in receive buffer + ldy RecvTail ; Load buffer pointer + sta RecvBuf,y ; Store received byte in buffer + inc RecvTail ; Increment buffer pointer + dec RecvFreeCnt ; Decrement free space counter + cpx #33 + bcc Flow ; Assert flow control if buffer space low + rts ; Interrupt handled (carry already set) + +CheckSpecial: + ; Always check IRQ special flags from Channel B (Ref page 5-24) + ; X is still 0 there. + rra SCCBREG,#RR_IRQ_STATUS + + and #IRQ_MASQ + cmp #IRQ_SPECIAL + beq Special + + ; Clear exint + ldx Channel + wrr SCCBREG,#WR_INIT_CTRL,#INIT_CTRL_CLEAR_EIRQ + sec + rts + +Flow: ldx Channel ; Assert flow control if buffer space too low + lda RtsOff + wra SCCBREG,#WR_TX_CTRL + sta Stopped + sec ; Interrupt handled +Done: rts + +Special: + rra SCCBREG,#RR_SPEC_COND_STATUS + tax + and #SPEC_COND_FRAMING_ERR + bne BadChar + txa + and #SPEC_COND_OVERRUN_ERR + beq BadChar + + wrr SCCBREG,#WR_INIT_CTRL,#INIT_CTRL_CLEAR_ERR + sec + rts + +BadChar: + lda SCCBDATA,x ; Remove char in error + sec + rts + +;---------------------------------------------------------------------------- +; Try to send a byte. Internal routine. A = TryHard, X = Channel + +TryToSend: + sta tmp1 ; Remember tryHard flag +Again: lda SendFreeCnt ; Anything to send? + cmp #$FF + beq Quit ; No + + lda Stopped ; Check for flow stopped + bne Quit ; Bail out if it is + + lda SCCBREG,x ; Check that we're ready to send + tay + and #INIT_STATUS_READY + bne Send + tya + and #INIT_STATUS_RTS ; Ready to send + bit tmp1 ; Keep trying if must try hard + bmi Again +Quit: rts + +Send: ldy SendHead ; Send byte + lda SendBuf,y + + sta SCCBDATA,x + + inc SendHead + inc SendFreeCnt + jmp Again ; Continue flushing TX buffer From 996a2659d51b8807af297cd246c42002c93fb472 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 3 Oct 2023 13:34:02 +0200 Subject: [PATCH 2209/2710] Address code review comments --- doc/apple2.sgml | 2 +- doc/apple2enh.sgml | 2 +- libsrc/apple2/ser/a2.gs.s | 139 ++++++++++++++++++++------------------ 3 files changed, 74 insertions(+), 69 deletions(-) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index a3ddb1d39..063cfc71f 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -428,7 +428,7 @@ The names in the parentheses denote the symbols to be used for static linking of <tag><tt/a2.ssc.ser (a2_ssc_ser)/</tag> Driver for the Apple II Super Serial Card. - They are extension cards for the II, II+, IIe, and the Apple //c and //c+ have + The SSC is an extension card for the II, II+, IIe; the Apple //c and //c+ have the same hardware and firmware integrated. It supports up to 9600 baud, requires hardware flow control (RTS/CTS) and does interrupt driven receives. Speeds faster than 9600 baud aren't reachable diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 6bc6a3adf..30088521a 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -429,7 +429,7 @@ The names in the parentheses denote the symbols to be used for static linking of <tag><tt/a2e.ssc.ser (a2e_ssc_ser)/</tag> Driver for the Apple II Super Serial Card. - They are extension cards for the II, II+, IIe, and the Apple //c and //c+ have + The SSC is an extension card for the II, II+, IIe; the Apple //c and //c+ have the same hardware and firmware integrated. It supports up to 9600 baud, requires hardware flow control (RTS/CTS) and does interrupt driven receives. Speeds faster than 9600 baud aren't reachable diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index 5cb3ea322..946778f92 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -73,86 +73,90 @@ CurChanIrqFlags:.byte INTR_PENDING_RX_EXT_B SerFlagOrig: .byte $00 -; Tables used to translate RS232 params into register values +; Tables used to translate cc65 RS232 params into register values ; (Ref page 5-18 and 5-19) BaudLowTable: - .byte $7E ; SER_BAUD_300 - .byte $5E ; SER_BAUD_1200 - .byte $2E ; SER_BAUD_2400 - .byte $16 ; SER_BAUD_4800 - .byte $0A ; SER_BAUD_9600 - .byte $04 ; SER_BAUD_19200 - .byte $01 ; SER_BAUD_38400 - .byte $00 ; SER_BAUD_57600 + .byte $7E ; SER_BAUD_300 + .byte $5E ; SER_BAUD_1200 + .byte $2E ; SER_BAUD_2400 + .byte $16 ; SER_BAUD_4800 + .byte $0A ; SER_BAUD_9600 + .byte $04 ; SER_BAUD_19200 + .byte $01 ; SER_BAUD_38400 + .byte $00 ; SER_BAUD_57600 BaudHighTable: - .byte $01 ; SER_BAUD_300 - .byte $00 ; SER_BAUD_1200 - .byte $00 ; SER_BAUD_2400 - .byte $00 ; SER_BAUD_4800 - .byte $00 ; SER_BAUD_9600 - .byte $00 ; SER_BAUD_19200 - .byte $00 ; SER_BAUD_38400 - .byte $00 ; SER_BAUD_57600 + .byte $01 ; SER_BAUD_300 + .byte $00 ; SER_BAUD_1200 + .byte $00 ; SER_BAUD_2400 + .byte $00 ; SER_BAUD_4800 + .byte $00 ; SER_BAUD_9600 + .byte $00 ; SER_BAUD_19200 + .byte $00 ; SER_BAUD_38400 + .byte $00 ; SER_BAUD_57600 RxBitTable: - .byte %00000000 ; SER_BITS_5, in WR_RX_CTRL (WR3) - .byte %10000000 ; SER_BITS_6 (Ref page 5-7) - .byte %01000000 ; SER_BITS_7 - .byte %11000000 ; SER_BITS_8 + .byte %00000000 ; SER_BITS_5, in WR_RX_CTRL (WR3) + .byte %10000000 ; SER_BITS_6 (Ref page 5-7) + .byte %01000000 ; SER_BITS_7 + .byte %11000000 ; SER_BITS_8 + TxBitTable: - .byte %00000000 ; SER_BITS_5, in WR_TX_CTRL (WR5) - .byte %01000000 ; SER_BITS_6 (Ref page 5-9) - .byte %00100000 ; SER_BITS_7 - .byte %01100000 ; SER_BITS_8 + .byte %00000000 ; SER_BITS_5, in WR_TX_CTRL (WR5) + .byte %01000000 ; SER_BITS_6 (Ref page 5-9) + .byte %00100000 ; SER_BITS_7 + .byte %01100000 ; SER_BITS_8 .rodata BaudTable: ; bit7 = 1 means setting is invalid ; Otherwise refers to the index in ; Baud(Low/High)Table - .byte $FF ; SER_BAUD_45_5 - .byte $FF ; SER_BAUD_50 - .byte $FF ; SER_BAUD_75 - .byte $FF ; SER_BAUD_110 - .byte $FF ; SER_BAUD_134_5 - .byte $FF ; SER_BAUD_150 - .byte $00 ; SER_BAUD_300 - .byte $FF ; SER_BAUD_600 - .byte $01 ; SER_BAUD_1200 - .byte $FF ; SER_BAUD_1800 - .byte $02 ; SER_BAUD_2400 - .byte $FF ; SER_BAUD_3600 - .byte $03 ; SER_BAUD_4800 - .byte $FF ; SER_BAUD_7200 - .byte $04 ; SER_BAUD_9600 - .byte $05 ; SER_BAUD_19200 - .byte $06 ; SER_BAUD_38400 - .byte $07 ; SER_BAUD_57600 - .byte $FF ; SER_BAUD_115200 - .byte $FF ; SER_BAUD_230400 + .byte $FF ; SER_BAUD_45_5 + .byte $FF ; SER_BAUD_50 + .byte $FF ; SER_BAUD_75 + .byte $FF ; SER_BAUD_110 + .byte $FF ; SER_BAUD_134_5 + .byte $FF ; SER_BAUD_150 + .byte $00 ; SER_BAUD_300 + .byte $FF ; SER_BAUD_600 + .byte $01 ; SER_BAUD_1200 + .byte $FF ; SER_BAUD_1800 + .byte $02 ; SER_BAUD_2400 + .byte $FF ; SER_BAUD_3600 + .byte $03 ; SER_BAUD_4800 + .byte $FF ; SER_BAUD_7200 + .byte $04 ; SER_BAUD_9600 + .byte $05 ; SER_BAUD_19200 + .byte $06 ; SER_BAUD_38400 + .byte $07 ; SER_BAUD_57600 + .byte $FF ; SER_BAUD_115200 + .byte $FF ; SER_BAUD_230400 StopTable: - .byte %00000100 ; SER_STOP_1, in WR_TX_RX_CTRL (WR4) - .byte %00001100 ; SER_STOP_2 (Ref page 5-8) + .byte %00000100 ; SER_STOP_1, in WR_TX_RX_CTRL (WR4) + .byte %00001100 ; SER_STOP_2 (Ref page 5-8) + ParityTable: - .byte %00000000 ; SER_PAR_NONE, in WR_TX_RX_CTRL (WR4) - .byte %00000001 ; SER_PAR_ODD (Ref page 5-8) - .byte %00000011 ; SER_PAR_EVEN - .byte $FF ; SER_PAR_MARK - .byte $FF ; SER_PAR_SPACE + .byte %00000000 ; SER_PAR_NONE, in WR_TX_RX_CTRL (WR4) + .byte %00000001 ; SER_PAR_ODD (Ref page 5-8) + .byte %00000011 ; SER_PAR_EVEN + .byte $FF ; SER_PAR_MARK + .byte $FF ; SER_PAR_SPACE + IdOfsTable: - .byte $00 ; First firmware instruction - .byte $05 ; Pascal 1.0 ID byte - .byte $07 ; Pascal 1.0 ID byte - .byte $0B ; Pascal 1.1 generic signature byte - .byte $0C ; Device signature byte + .byte $00 ; First firmware instruction + .byte $05 ; Pascal 1.0 ID byte + .byte $07 ; Pascal 1.0 ID byte + .byte $0B ; Pascal 1.1 generic signature byte + .byte $0C ; Device signature byte + IdValTable: - .byte $E2 ; SEP instruction - .byte $38 ; Fixed - .byte $18 ; Fixed - .byte $01 ; Fixed - .byte $31 ; Serial or parallel I/O card type 1 + .byte $E2 ; SEP instruction + .byte $38 ; Fixed + .byte $18 ; Fixed + .byte $01 ; Fixed + .byte $31 ; Serial or parallel I/O card type 1 IdTableLen = * - IdValTable @@ -345,7 +349,7 @@ NoDevice: lda #SER_ERR_NO_DEVICE SetupErrOut: cli - ldx #$00 ; Return value is char + ldx #$00 stx Slot ; Mark port closed rts @@ -513,8 +517,9 @@ SER_GET: inc RecvHead inc RecvFreeCnt sta (ptr1) - ldx #$00 - txa ; Return code = 0 + lda #SER_ERR_OK + .assert SER_ERR_OK = 0, error + tax rts NoData: lda #SER_ERR_NO_DATA @@ -539,7 +544,7 @@ SER_PUT: : ldy SendFreeCnt ; Do we have room to store byte? bne :+ lda #SER_ERR_OVERFLOW - ldx #$00 ; Return value is char + ldx #$00 rts : ldy SendTail ; Put byte into send buffer & send @@ -590,7 +595,7 @@ SER_IOCTL: rts : lda #SER_ERR_INV_IOCTL - ldx #$00 ; Return value is char + ldx #$00 rts ;---------------------------------------------------------------------------- From 3c17c133575b894fd93d26e3d76db3374548da84 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 3 Oct 2023 17:56:20 +0200 Subject: [PATCH 2210/2710] Address latest comments --- libsrc/apple2/ser/a2.gs.s | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index 946778f92..5d5ca5e09 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -75,8 +75,7 @@ SerFlagOrig: .byte $00 ; Tables used to translate cc65 RS232 params into register values ; (Ref page 5-18 and 5-19) -BaudLowTable: - .byte $7E ; SER_BAUD_300 +BaudLowTable: .byte $7E ; SER_BAUD_300 .byte $5E ; SER_BAUD_1200 .byte $2E ; SER_BAUD_2400 .byte $16 ; SER_BAUD_4800 @@ -85,8 +84,7 @@ BaudLowTable: .byte $01 ; SER_BAUD_38400 .byte $00 ; SER_BAUD_57600 -BaudHighTable: - .byte $01 ; SER_BAUD_300 +BaudHighTable: .byte $01 ; SER_BAUD_300 .byte $00 ; SER_BAUD_1200 .byte $00 ; SER_BAUD_2400 .byte $00 ; SER_BAUD_4800 @@ -95,14 +93,12 @@ BaudHighTable: .byte $00 ; SER_BAUD_38400 .byte $00 ; SER_BAUD_57600 -RxBitTable: - .byte %00000000 ; SER_BITS_5, in WR_RX_CTRL (WR3) +RxBitTable: .byte %00000000 ; SER_BITS_5, in WR_RX_CTRL (WR3) .byte %10000000 ; SER_BITS_6 (Ref page 5-7) .byte %01000000 ; SER_BITS_7 .byte %11000000 ; SER_BITS_8 -TxBitTable: - .byte %00000000 ; SER_BITS_5, in WR_TX_CTRL (WR5) +TxBitTable: .byte %00000000 ; SER_BITS_5, in WR_TX_CTRL (WR5) .byte %01000000 ; SER_BITS_6 (Ref page 5-9) .byte %00100000 ; SER_BITS_7 .byte %01100000 ; SER_BITS_8 @@ -133,26 +129,22 @@ BaudTable: ; bit7 = 1 means setting is invalid .byte $FF ; SER_BAUD_115200 .byte $FF ; SER_BAUD_230400 -StopTable: - .byte %00000100 ; SER_STOP_1, in WR_TX_RX_CTRL (WR4) +StopTable: .byte %00000100 ; SER_STOP_1, in WR_TX_RX_CTRL (WR4) .byte %00001100 ; SER_STOP_2 (Ref page 5-8) -ParityTable: - .byte %00000000 ; SER_PAR_NONE, in WR_TX_RX_CTRL (WR4) +ParityTable: .byte %00000000 ; SER_PAR_NONE, in WR_TX_RX_CTRL (WR4) .byte %00000001 ; SER_PAR_ODD (Ref page 5-8) .byte %00000011 ; SER_PAR_EVEN .byte $FF ; SER_PAR_MARK .byte $FF ; SER_PAR_SPACE -IdOfsTable: - .byte $00 ; First firmware instruction +IdOfsTable: .byte $00 ; First firmware instruction .byte $05 ; Pascal 1.0 ID byte .byte $07 ; Pascal 1.0 ID byte .byte $0B ; Pascal 1.1 generic signature byte .byte $0C ; Device signature byte -IdValTable: - .byte $E2 ; SEP instruction +IdValTable: .byte $E2 ; SEP instruction .byte $38 ; Fixed .byte $18 ; Fixed .byte $01 ; Fixed @@ -349,7 +341,7 @@ NoDevice: lda #SER_ERR_NO_DEVICE SetupErrOut: cli - ldx #$00 + ldx #$00 ; Promote char return value stx Slot ; Mark port closed rts @@ -523,7 +515,7 @@ SER_GET: rts NoData: lda #SER_ERR_NO_DATA - ldx #$00 + ldx #$00 ; Promote char return value rts ;---------------------------------------------------------------------------- @@ -595,7 +587,7 @@ SER_IOCTL: rts : lda #SER_ERR_INV_IOCTL - ldx #$00 + ldx #$00 ; Promote char return value rts ;---------------------------------------------------------------------------- From 9667a5f9914d1f6bb8bb5be6ea889aa9be620092 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 3 Oct 2023 17:48:54 +0200 Subject: [PATCH 2211/2710] Re-introduce necessary comments, wit a clearer wording --- Contributing.md | 2 +- libsrc/apple2/ser/a2.ssc.s | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Contributing.md b/Contributing.md index 3b355373c..25c6217aa 100644 --- a/Contributing.md +++ b/Contributing.md @@ -139,7 +139,7 @@ You can refer to Annex B of the ISO C99 standard ([here](https://www.open-std.or * If a function is declared to return a char-sized value, it actually must return an integer-sized value. (When cc65 promotes a returned value, it sometimes assumes that the value already is an integer.) This must be done in one of the following ways: <pre> lda #RETURN_VALUE - ldx #0 ; return value is char + ldx #0 ; Promote char return value </pre> or, if the value is 0, you can use: <pre> diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 942adad82..022ef2fd5 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -300,17 +300,17 @@ SER_OPEN: ; Device (hardware) not found NoDev: lda #SER_ERR_NO_DEVICE - ldx #$00 + ldx #$00 ; Promote char return value rts ; Invalid parameter InvParm:lda #SER_ERR_INIT_FAILED - ldx #$00 + ldx #$00 ; Promote char return value rts ; Baud rate not available InvBaud:lda #SER_ERR_BAUD_UNAVAIL - ldx #$00 + ldx #$00 ; Promote char return value rts ;---------------------------------------------------------------------------- @@ -325,7 +325,7 @@ SER_GET: cmp #$FF bne :+ lda #SER_ERR_NO_DATA - ldx #$00 + ldx #$00 ; Promote char return value rts : ldy Stopped ; Check for flow stopped @@ -373,7 +373,7 @@ SER_PUT: ldy SendFreeCnt ; Reload SendFreeCnt after TryToSend bne :+ lda #SER_ERR_OVERFLOW - ldx #$00 + ldx #$00 ; Promote char return value rts : ldy SendTail ; Put byte into send buffer @@ -421,7 +421,7 @@ SER_IOCTL: rts : lda #SER_ERR_INV_IOCTL - ldx #$00 + ldx #$00 ; Promote char return value rts ;---------------------------------------------------------------------------- From 20c3e994c6126a6d81dbe5854e9444779afe4a6f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 4 Oct 2023 21:22:04 +0800 Subject: [PATCH 2212/2710] Fixed compiling with pragmas in the middle of declarations or statements. --- src/cc65/compile.c | 6 - src/cc65/pragma.c | 290 +++++++++++++++++++++++++++++++-------------- src/cc65/pragma.h | 6 +- src/cc65/scanner.c | 48 +++++--- src/cc65/scanner.h | 4 +- src/cc65/stmt.c | 4 - test/val/bug2151.c | 29 +++++ 7 files changed, 271 insertions(+), 116 deletions(-) create mode 100644 test/val/bug2151.c diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 7bf3cd8ab..9d7fbe20a 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -111,12 +111,6 @@ static void Parse (void) continue; } - /* Check for a #pragma */ - if (CurTok.Tok == TOK_PRAGMA) { - DoPragma (); - continue; - } - /* Check for a _Static_assert */ if (CurTok.Tok == TOK_STATIC_ASSERT) { ParseStaticAssert (); diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index 83ed362c8..21d426a26 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -41,12 +41,11 @@ #include "chartype.h" #include "segnames.h" #include "tgttrans.h" +#include "xmalloc.h" /* cc65 */ #include "codegen.h" #include "error.h" -#include "expr.h" -#include "funcdesc.h" #include "global.h" #include "litpool.h" #include "scanner.h" @@ -58,7 +57,7 @@ /*****************************************************************************/ -/* data */ +/* Data */ /*****************************************************************************/ @@ -142,6 +141,21 @@ typedef enum { PP_ERROR, } PushPopResult; +/* Effective scope of the pragma. +** This talks about how far the pragma has effects on whenever it shows up, +** even in the middle of an expression, statement or something. +*/ +typedef enum { + PES_NONE, + PES_IMM, /* No way back */ + PES_EXPR, /* Current expression/declarator */ + PES_STMT, /* Current statement/declaration */ + PES_SCOPE, /* Current scope */ + PES_FUNC, /* Current function */ + PES_FILE, /* Current file */ + PES_ALL, /* All */ +} pragma_scope_t; + /*****************************************************************************/ @@ -339,7 +353,7 @@ static void PushInt (IntStack* S, long Val) -static int BoolKeyword (StrBuf* Ident) +static int IsBoolKeyword (StrBuf* Ident) /* Check if the identifier in Ident is a keyword for a boolean value. Currently ** accepted are true/false/on/off. */ @@ -364,17 +378,92 @@ static int BoolKeyword (StrBuf* Ident) +static void ApplyPragma (int PushPop, IntStack* Stack, long Val) +/* Apply a pragma immediately */ +{ + if (PushPop > 0) { + /* Push the new value */ + PushInt (Stack, Val); + } else if (PushPop < 0) { + /* Pop the old value */ + PopInt (Stack); + } else { + /* Set the new value */ + IS_Set (Stack, Val); + } +} + + + +static void ApplySegNamePragma (pragma_t Token, int PushPop, const char* Name, unsigned char AddrSize) +/* Process a segname pragma */ +{ + segment_t Seg = SEG_CODE; + + switch (Token) { + case PRAGMA_CODE_NAME: + case PRAGMA_CODESEG: + Seg = SEG_CODE; + break; + + case PRAGMA_RODATA_NAME: + case PRAGMA_RODATASEG: + Seg = SEG_RODATA; + break; + + case PRAGMA_DATA_NAME: + case PRAGMA_DATASEG: + Seg = SEG_DATA; + break; + + case PRAGMA_BSS_NAME: + case PRAGMA_BSSSEG: + Seg = SEG_BSS; + break; + + default: + Internal ("Unknown segment name pragma: %02X", Token); + break; + } + + /* Set the new name */ + if (PushPop > 0) { + PushSegName (Seg, Name); + } else if (PushPop < 0) { + PopSegName (Seg); + } else { + SetSegName (Seg, Name); + } + + /* Set the optional address size for the segment if valid */ + if (PushPop >= 0 && AddrSize != ADDR_SIZE_INVALID) { + SetSegAddrSize (Name, AddrSize); + } + + /* BSS variables are output at the end of the compilation. Don't + ** bother to change their segment, now. + */ + if (Seg != SEG_BSS) { + g_segname (Seg); + } +} + + + /*****************************************************************************/ /* Pragma handling functions */ /*****************************************************************************/ -static void StringPragma (StrBuf* B, void (*Func) (const char*)) +static void StringPragma (pragma_scope_t Scope, StrBuf* B, void (*Func) (const char*)) /* Handle a pragma that expects a string parameter */ { StrBuf S = AUTO_STRBUF_INITIALIZER; + /* Only PES_IMM is supported */ + CHECK (Scope == PES_IMM); + /* We expect a string here */ if (GetString (B, &S)) { /* Call the given function with the string argument */ @@ -387,14 +476,17 @@ static void StringPragma (StrBuf* B, void (*Func) (const char*)) -static void SegNamePragma (StrBuf* B, segment_t Seg) +static void SegNamePragma (pragma_scope_t Scope, pragma_t Token, StrBuf* B) /* Handle a pragma that expects a segment name parameter */ { const char* Name; unsigned char AddrSize = ADDR_SIZE_INVALID; StrBuf S = AUTO_STRBUF_INITIALIZER; StrBuf A = AUTO_STRBUF_INITIALIZER; - int Push = 0; + int PushPop = 0; + + /* Unused at the moment */ + (void)Scope; /* Check for the "push" or "pop" keywords */ switch (ParsePushPop (B)) { @@ -403,19 +495,12 @@ static void SegNamePragma (StrBuf* B, segment_t Seg) break; case PP_PUSH: - Push = 1; + PushPop = 1; break; case PP_POP: /* Pop the old value and output it */ - PopSegName (Seg); - - /* BSS variables are output at the end of the compilation. Don't - ** bother to change their segment, now. - */ - if (Seg != SEG_BSS) { - g_segname (Seg); - } + ApplySegNamePragma (Token, -1, 0, 0); /* Done */ goto ExitPoint; @@ -454,27 +539,14 @@ static void SegNamePragma (StrBuf* B, segment_t Seg) /* Get the address size for the segment */ AddrSize = AddrSizeFromStr (SB_GetConstBuf (&A)); - /* Set the address size for the segment if valid */ - if (AddrSize != ADDR_SIZE_INVALID) { - SetSegAddrSize (Name, AddrSize); - } else { - Warning ("Invalid address size for segment!"); + /* Check the address size for the segment */ + if (AddrSize == ADDR_SIZE_INVALID) { + Warning ("Invalid address size for segment"); } } /* Set the new name and optionally address size */ - if (Push) { - PushSegName (Seg, Name); - } else { - SetSegName (Seg, Name); - } - - /* BSS variables are output at the end of the compilation. Don't - ** bother to change their segment, now. - */ - if (Seg != SEG_BSS) { - g_segname (Seg); - } + ApplySegNamePragma (Token, PushPop, Name, AddrSize); } else { @@ -484,13 +556,15 @@ static void SegNamePragma (StrBuf* B, segment_t Seg) } ExitPoint: + /* Call the string buf destructor */ SB_Done (&S); SB_Done (&A); } -static void WrappedCallPragma (StrBuf* B) + +static void WrappedCallPragma (pragma_scope_t Scope, StrBuf* B) /* Handle the wrapped-call pragma */ { StrBuf S = AUTO_STRBUF_INITIALIZER; @@ -498,6 +572,9 @@ static void WrappedCallPragma (StrBuf* B) long Val; SymEntry *Entry; + /* Only PES_IMM is supported */ + CHECK (Scope == PES_IMM); + /* Check for the "push" or "pop" keywords */ switch (ParsePushPop (B)) { @@ -573,11 +650,14 @@ ExitPoint: -static void CharMapPragma (StrBuf* B) +static void CharMapPragma (pragma_scope_t Scope, StrBuf* B) /* Change the character map */ { long Index, C; + /* Only PES_IMM is supported */ + CHECK (Scope == PES_IMM); + /* Read the character index */ if (!GetNumber (B, &Index)) { return; @@ -619,7 +699,7 @@ static void CharMapPragma (StrBuf* B) -static void WarnPragma (StrBuf* B) +static void WarnPragma (pragma_scope_t Scope, StrBuf* B) /* Enable/disable warnings */ { long Val; @@ -627,6 +707,10 @@ static void WarnPragma (StrBuf* B) /* A warning name must follow */ IntStack* S = GetWarning (B); + + /* Only PES_IMM is supported */ + CHECK (Scope == PES_IMM); + if (S == 0) { return; } @@ -680,48 +764,47 @@ static void WarnPragma (StrBuf* B) -static void FlagPragma (StrBuf* B, IntStack* Stack) +static void FlagPragma (pragma_scope_t Scope, pragma_t Token, StrBuf* B, IntStack* Stack) /* Handle a pragma that expects a boolean parameter */ { StrBuf Ident = AUTO_STRBUF_INITIALIZER; long Val; - int Push; + int PushPop = 0; + /* Unused at the moment */ + (void)Scope; + (void)Token; /* Try to read an identifier */ int IsIdent = SB_GetSym (B, &Ident, 0); /* Check if we have a first argument named "pop" */ if (IsIdent && SB_CompareStr (&Ident, "pop") == 0) { - PopInt (Stack); + /* Pop the old value and bail out */ + ApplyPragma (-1, Stack, 0); + /* No other arguments allowed */ return; } /* Check if we have a first argument named "push" */ if (IsIdent && SB_CompareStr (&Ident, "push") == 0) { - Push = 1; + PushPop = 1; if (!GetComma (B)) { goto ExitPoint; } IsIdent = SB_GetSym (B, &Ident, 0); - } else { - Push = 0; } /* Boolean argument follows */ if (IsIdent) { - Val = BoolKeyword (&Ident); + Val = IsBoolKeyword (&Ident); } else if (!GetNumber (B, &Val)) { goto ExitPoint; } - /* Set/push the new value */ - if (Push) { - PushInt (Stack, Val); - } else { - IS_Set (Stack, Val); - } + /* Add this pragma and apply it whenever appropriately */ + ApplyPragma (PushPop, Stack, Val); ExitPoint: /* Free the identifier */ @@ -730,12 +813,16 @@ ExitPoint: -static void IntPragma (StrBuf* B, IntStack* Stack, long Low, long High) +static void IntPragma (pragma_scope_t Scope, pragma_t Token, StrBuf* B, IntStack* Stack, long Low, long High) /* Handle a pragma that expects an int parameter */ { long Val; int Push; + /* Unused at the moment */ + (void)Scope; + (void)Token; + /* Check for the "push" or "pop" keywords */ switch (ParsePushPop (B)) { @@ -749,7 +836,7 @@ static void IntPragma (StrBuf* B, IntStack* Stack, long Low, long High) case PP_POP: /* Pop the old value and bail out */ - PopInt (Stack); + ApplyPragma (-1, Stack, 0); return; case PP_ERROR: @@ -772,31 +859,32 @@ static void IntPragma (StrBuf* B, IntStack* Stack, long Low, long High) return; } - /* Set/push the new value */ - if (Push) { - PushInt (Stack, Val); - } else { - IS_Set (Stack, Val); - } + /* Add this pragma and apply it whenever appropriately */ + ApplyPragma (Push, Stack, Val); } -static void MakeMessage (const char* Message) +static void NoteMessagePragma (const char* Message) +/* Wrapper for printf-like Note() function protected from user-provided format +** specifiers. +*/ { Note ("%s", Message); } -static void ParsePragma (void) -/* Parse the contents of the _Pragma statement */ +static void ParsePragmaString (void) +/* Parse the contents of _Pragma */ { pragma_t Pragma; StrBuf Ident = AUTO_STRBUF_INITIALIZER; /* Create a string buffer from the string literal */ StrBuf B = AUTO_STRBUF_INITIALIZER; + + SB_Append (&B, GetLiteralStrBuf (CurTok.SVal)); /* Skip the string token */ @@ -837,111 +925,130 @@ static void ParsePragma (void) switch (Pragma) { case PRAGMA_ALIGN: - IntPragma (&B, &DataAlignment, 1, 4096); + /* TODO: PES_EXPR (PES_DECL) */ + IntPragma (PES_STMT, Pragma, &B, &DataAlignment, 1, 4096); break; case PRAGMA_ALLOW_EAGER_INLINE: - FlagPragma (&B, &EagerlyInlineFuncs); + FlagPragma (PES_STMT, Pragma, &B, &EagerlyInlineFuncs); break; case PRAGMA_BSSSEG: Warning ("#pragma bssseg is obsolete, please use #pragma bss-name instead"); /* FALLTHROUGH */ case PRAGMA_BSS_NAME: - SegNamePragma (&B, SEG_BSS); + /* TODO: PES_STMT or even PES_EXPR (PES_DECL) maybe? */ + SegNamePragma (PES_FUNC, PRAGMA_BSS_NAME, &B); break; case PRAGMA_CHARMAP: - CharMapPragma (&B); + CharMapPragma (PES_IMM, &B); break; case PRAGMA_CHECKSTACK: Warning ("#pragma checkstack is obsolete, please use #pragma check-stack instead"); /* FALLTHROUGH */ case PRAGMA_CHECK_STACK: - FlagPragma (&B, &CheckStack); + /* TODO: PES_SCOPE maybe? */ + FlagPragma (PES_FUNC, Pragma, &B, &CheckStack); break; case PRAGMA_CODESEG: Warning ("#pragma codeseg is obsolete, please use #pragma code-name instead"); /* FALLTHROUGH */ case PRAGMA_CODE_NAME: - SegNamePragma (&B, SEG_CODE); + /* PES_FUNC is the only sensible option so far */ + SegNamePragma (PES_FUNC, PRAGMA_CODE_NAME, &B); break; case PRAGMA_CODESIZE: - IntPragma (&B, &CodeSizeFactor, 10, 1000); + /* PES_EXPR would be optimization nightmare */ + IntPragma (PES_STMT, Pragma, &B, &CodeSizeFactor, 10, 1000); break; case PRAGMA_DATASEG: Warning ("#pragma dataseg is obsolete, please use #pragma data-name instead"); /* FALLTHROUGH */ case PRAGMA_DATA_NAME: - SegNamePragma (&B, SEG_DATA); + /* TODO: PES_STMT or even PES_EXPR (PES_DECL) maybe? */ + SegNamePragma (PES_FUNC, PRAGMA_DATA_NAME, &B); break; case PRAGMA_INLINE_STDFUNCS: - FlagPragma (&B, &InlineStdFuncs); + /* TODO: PES_EXPR maybe? */ + FlagPragma (PES_STMT, Pragma, &B, &InlineStdFuncs); break; case PRAGMA_LOCAL_STRINGS: - FlagPragma (&B, &LocalStrings); + /* TODO: PES_STMT or even PES_EXPR */ + FlagPragma (PES_FUNC, Pragma, &B, &LocalStrings); break; case PRAGMA_MESSAGE: - StringPragma (&B, MakeMessage); + /* PES_IMM is the only sensible option */ + StringPragma (PES_IMM, &B, NoteMessagePragma); break; case PRAGMA_OPTIMIZE: - FlagPragma (&B, &Optimize); + /* TODO: PES_STMT or even PES_EXPR maybe? */ + FlagPragma (PES_STMT, Pragma, &B, &Optimize); break; case PRAGMA_REGVARADDR: - FlagPragma (&B, &AllowRegVarAddr); + /* TODO: PES_STMT or even PES_EXPR maybe? */ + FlagPragma (PES_FUNC, Pragma, &B, &AllowRegVarAddr); break; case PRAGMA_REGVARS: Warning ("#pragma regvars is obsolete, please use #pragma register-vars instead"); /* FALLTHROUGH */ case PRAGMA_REGISTER_VARS: - FlagPragma (&B, &EnableRegVars); + /* TODO: PES_STMT or even PES_EXPR (PES_DECL) maybe? */ + FlagPragma (PES_FUNC, Pragma, &B, &EnableRegVars); break; case PRAGMA_RODATASEG: Warning ("#pragma rodataseg is obsolete, please use #pragma rodata-name instead"); /* FALLTHROUGH */ case PRAGMA_RODATA_NAME: - SegNamePragma (&B, SEG_RODATA); + /* TODO: PES_STMT or even PES_EXPR maybe? */ + SegNamePragma (PES_FUNC, PRAGMA_RODATA_NAME, &B); break; case PRAGMA_SIGNEDCHARS: Warning ("#pragma signedchars is obsolete, please use #pragma signed-chars instead"); /* FALLTHROUGH */ case PRAGMA_SIGNED_CHARS: - FlagPragma (&B, &SignedChars); + /* TODO: PES_STMT or even PES_EXPR maybe? */ + FlagPragma (PES_FUNC, Pragma, &B, &SignedChars); break; case PRAGMA_STATICLOCALS: Warning ("#pragma staticlocals is obsolete, please use #pragma static-locals instead"); /* FALLTHROUGH */ case PRAGMA_STATIC_LOCALS: - FlagPragma (&B, &StaticLocals); + /* TODO: PES_STMT or even PES_EXPR (PES_DECL) maybe? */ + FlagPragma (PES_FUNC, Pragma, &B, &StaticLocals); break; case PRAGMA_WRAPPED_CALL: - WrappedCallPragma(&B); + /* PES_IMM is the only sensible option */ + WrappedCallPragma (PES_IMM, &B); break; case PRAGMA_WARN: - WarnPragma (&B); + /* PES_IMM is the only sensible option */ + WarnPragma (PES_IMM, &B); break; case PRAGMA_WRITABLE_STRINGS: - FlagPragma (&B, &WritableStrings); + /* TODO: PES_STMT or even PES_EXPR maybe? */ + FlagPragma (PES_FUNC, Pragma, &B, &WritableStrings); break; case PRAGMA_ZPSYM: - StringPragma (&B, MakeZPSym); + /* PES_IMM is the only sensible option */ + StringPragma (PES_IMM, &B, MakeZPSym); break; default: @@ -975,10 +1082,18 @@ ExitPoint: -void DoPragma (void) -/* Handle pragmas. These come always in form of the new C99 _Pragma() operator. */ +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +void ConsumePragma (void) +/* Parse a pragma. The pragma comes always in the form of the new C99 _Pragma() +** operator. +*/ { - /* Skip the token itself */ + /* Skip the _Pragma token */ NextToken (); /* We expect an opening paren */ @@ -988,7 +1103,6 @@ void DoPragma (void) /* String literal */ if (CurTok.Tok != TOK_SCONST) { - /* Print a diagnostic */ Error ("String literal expected"); @@ -996,11 +1110,9 @@ void DoPragma (void) ** enclosing paren, or a semicolon. */ PragmaErrorSkip (); - } else { - - /* Parse the _Pragma statement */ - ParsePragma (); + /* Parse the pragma */ + ParsePragmaString (); } /* Closing paren needed */ diff --git a/src/cc65/pragma.h b/src/cc65/pragma.h index d1b94fa23..55e907453 100644 --- a/src/cc65/pragma.h +++ b/src/cc65/pragma.h @@ -44,8 +44,10 @@ -void DoPragma (void); -/* Handle pragmas. These come always in form of the new C99 _Pragma() operator. */ +void ConsumePragma (void); +/* Parse a pragma. The pragma comes always in the form of the new C99 _Pragma() +** operator. +*/ diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index bf3d9365d..4591f86a2 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -56,6 +56,7 @@ #include "ident.h" #include "input.h" #include "litpool.h" +#include "pragma.h" #include "preproc.h" #include "scanner.h" #include "standard.h" @@ -800,36 +801,30 @@ static void NumericConst (void) -void NextToken (void) +static void GetNextInputToken (void) /* Get next token from input stream */ { ident token; /* We have to skip white space here before shifting tokens, since the ** tokens and the current line info is invalid at startup and will get - ** initialized by reading the first time from the file. Remember if - ** we were at end of input and handle that later. + ** initialized by reading the first time from the file. Remember if we + ** were at end of input and handle that later. */ - int GotEOF = (SkipWhite() == 0); + int GotEOF = (SkipWhite () == 0); /* Current token is the lookahead token */ if (CurTok.LI) { ReleaseLineInfo (CurTok.LI); } - CurTok = NextTok; - /* When reading the first time from the file, the line info in NextTok, - ** which was copied to CurTok is invalid. Since the information from - ** the token is used for error messages, we must make it valid. - */ - if (CurTok.LI == 0) { - CurTok.LI = UseLineInfo (GetCurLineInfo ()); - } + /* Get the current token */ + CurTok = NextTok; /* Remember the starting position of the next token */ NextTok.LI = UseLineInfo (GetCurLineInfo ()); - /* Now handle end of input. */ + /* Now handle end of input */ if (GotEOF) { /* End of file reached */ NextTok.Tok = TOK_CEOF; @@ -859,7 +854,8 @@ void NextToken (void) if (!PPParserRunning) { /* Check for a keyword */ - if ((NextTok.Tok = FindKey (token)) != TOK_IDENT) { + NextTok.Tok = FindKey (token); + if (NextTok.Tok != TOK_IDENT) { /* Reserved word found */ return; } @@ -1117,7 +1113,31 @@ void NextToken (void) UnknownChar (CurC); } +} + + +void NextToken (void) +/* Get next non-pragma token from input stream consuming any pragmas +** encountered. Adjacent string literal tokens will be concatenated. +*/ +{ + /* When reading the first time from the file, the line info in NextTok, + ** which will be copied to CurTok is invalid. Since the information from + ** the token is used for error messages, we must make it valid. + */ + if (NextTok.LI == 0) { + NextTok.LI = UseLineInfo (GetCurLineInfo ()); + } + + /* Read the next token from the file */ + GetNextInputToken (); + + /* Consume all pragmas at hand, including those nested in a _Pragma() */ + if (CurTok.Tok == TOK_PRAGMA) { + /* Repeated and/or nested _Pragma()'s will be handled recursively */ + ConsumePragma (); + } } diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h index 338ad6a65..cff2b0347 100644 --- a/src/cc65/scanner.h +++ b/src/cc65/scanner.h @@ -299,7 +299,9 @@ void CopyPPNumber (StrBuf* Target); /* Copy a pp-number from the input to Target */ void NextToken (void); -/* Get next token from input stream */ +/* Get next non-pragma token from input stream consuming any pragmas +** encountered. Adjacent string literal tokens will be concatenated. +*/ void SkipTokens (const token_t* TokenList, unsigned TokenCount); /* Skip tokens until we reach TOK_CEOF or a token in the given token list. diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index 613129e1b..18df2b2b1 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -735,10 +735,6 @@ int AnyStatement (int* PendingToken) GotBreak = 1; break; - case TOK_PRAGMA: - DoPragma (); - break; - case TOK_SEMI: /* Empty statement. Ignore it */ CheckSemi (PendingToken); diff --git a/test/val/bug2151.c b/test/val/bug2151.c new file mode 100644 index 000000000..905eeac39 --- /dev/null +++ b/test/val/bug2151.c @@ -0,0 +1,29 @@ +/* Bug #2151 - #pragma causes errors when used within functions */ + +#pragma bss-name("BSS1") +int +#pragma code-name("CODE_WUT") +main _Pragma("message(\"_Pragma note\")") +( +void +_Pragma _Pragma ( +#pragma message("nested message 1") +"message(\"nested message 2\")" +) +( +"message(\"_Pragma in function parentheses\")") +#pragma code-name("CODE") +) +#pragma bss-name("BSS") +{ + extern int y; +#pragma bss-name("BSS2") + static +#pragma zpsym ("y") + int x; // TODO: currently in "BSS", but supposed to be in "BSS2"? + x = 0; + return x + y; +#pragma bss-name("BSS") +} + +int y; From c8df241337756d88526ea3589b0ceaa53c4a10d3 Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sat, 23 Sep 2023 14:19:11 +0300 Subject: [PATCH 2213/2710] Add line_continuations feature that works as .LINECONT but in a consistent way with other features. --- src/ca65/feature.c | 2 ++ src/ca65/feature.h | 1 + 2 files changed, 3 insertions(+) diff --git a/src/ca65/feature.c b/src/ca65/feature.c index 9f5ca5876..6a38900b5 100644 --- a/src/ca65/feature.c +++ b/src/ca65/feature.c @@ -67,6 +67,7 @@ static const char* const FeatureKeys[FEAT_COUNT] = { "bracket_as_indirect", "string_escapes", "long_jsr_jmp_rts", + "line_continuations", }; @@ -121,6 +122,7 @@ void SetFeature (feature_t Feature, unsigned char On) case FEAT_BRACKET_AS_INDIRECT: BracketAsIndirect = On; break; case FEAT_STRING_ESCAPES: StringEscapes = On; break; case FEAT_LONG_JSR_JMP_RTS: LongJsrJmpRts = On; break; + case FEAT_LINE_CONTINUATIONS: LineCont = On; break; default: break; } } diff --git a/src/ca65/feature.h b/src/ca65/feature.h index 8eeb62e6f..4d307f74d 100644 --- a/src/ca65/feature.h +++ b/src/ca65/feature.h @@ -69,6 +69,7 @@ typedef enum { FEAT_BRACKET_AS_INDIRECT, FEAT_STRING_ESCAPES, FEAT_LONG_JSR_JMP_RTS, + FEAT_LINE_CONTINUATIONS, /* Special value: Number of features available */ FEAT_COUNT From 850007cb441f89646ee42be047a87e80b30568ca Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sat, 23 Sep 2023 18:45:27 +0300 Subject: [PATCH 2214/2710] Document line_continuations feature. --- doc/ca65.sgml | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index b0ccf6f5e..104c59bbd 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -2867,6 +2867,26 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH overridden. When using this feature, you may also get into trouble if later versions of the assembler define new keywords starting with a dot. + <tag><tt>line_continuations</tt><label id="line_continuations"></tag> + + Switch on or off line continuations using the backslash character + before a newline. The option is off by default. + Note: Line continuations do not work in a comment. A backslash at the + end of a comment is treated as part of the comment and does not trigger + line continuation. + + Example: + + <tscreen><verb> + .feature line_continuations + ; Allow line continuations + + lda \ + #$20 ; This is legal now + </verb></tscreen> + + For backward compatibility reasons, the <tt>.LINECONT +</tt> control command + is also supported and enables the same feature. + <tag><tt>long_jsr_jmp_rts</tt><label id="long_jsr_jmp_rts"></tag> Affects 65816 mode only. @@ -3371,26 +3391,6 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CH the feature in more detail. -<sect1><tt>.LINECONT</tt><label id=".LINECONT"><p> - - Switch on or off line continuations using the backslash character - before a newline. The option is off by default. - Note: Line continuations do not work in a comment. A backslash at the - end of a comment is treated as part of the comment and does not trigger - line continuation. - The command can be followed by a '+' or '-' character to switch the - option on or off respectively. - - Example: - - <tscreen><verb> - .linecont + ; Allow line continuations - - lda \ - #$20 ; This is legal now - </verb></tscreen> - - <sect1><tt>.LIST</tt><label id=".LIST"><p> Enable output to the listing. The command can be followed by a boolean @@ -4489,9 +4489,9 @@ different: <item> Macros defined with <tt><ref id=".DEFINE" name=".DEFINE"></tt> may not span more than a line. You may use line continuation (see <tt><ref - id=".LINECONT" name=".LINECONT"></tt>) to spread the definition over - more than one line for increased readability, but the macro itself - may not contain an end-of-line token. + id="line_continuations" name="line_continuations"></tt>) to spread the + definition over more than one line for increased readability, but the + macro itself may not contain an end-of-line token. <item> Macros defined with <tt><ref id=".DEFINE" name=".DEFINE"></tt> share the name space with classic macros, but they are detected and replaced From 0028b14071bd102e79be22abcbe1f555e9ffa3e2 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 5 Oct 2023 17:48:16 +0800 Subject: [PATCH 2215/2710] The type category in a function definition cannot be inherited from a typedef. --- src/cc65/compile.c | 28 ++++++++++++++++++---------- test/err/bug2020-definition.c | 6 ++++++ test/val/bug2020-ok.c | 16 ++++++++++++++++ 3 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 test/err/bug2020-definition.c create mode 100644 test/val/bug2020-ok.c diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 1cb109bbe..7bf3cd8ab 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -65,6 +65,7 @@ #include "preproc.h" #include "standard.h" #include "staticassert.h" +#include "typecmp.h" #include "symtab.h" @@ -325,17 +326,24 @@ static void Parse (void) if (Sym && IsTypeFunc (Sym->Type)) { /* Function */ - if (!comma) { - if (CurTok.Tok == TOK_SEMI) { - /* Prototype only */ - NextToken (); - } else if (CurTok.Tok == TOK_LCURLY) { - /* Parse the function body */ - NewFunc (Sym, FuncDef); - - /* Make sure we aren't omitting any work */ - CheckDeferredOpAllDone (); + if (CurTok.Tok == TOK_SEMI) { + /* Prototype only */ + NextToken (); + } else if (CurTok.Tok == TOK_LCURLY) { + /* ISO C: The type category in a function definition cannot be + ** inherited from a typedef. + */ + if (IsTypeFunc (Spec.Type) && TypeCmp (Sym->Type, Spec.Type).C >= TC_EQUAL) { + Error ("Function cannot be defined with a typedef"); + } else if (comma) { + Error ("';' expected after top level declarator"); } + + /* Parse the function body anyways */ + NewFunc (Sym, FuncDef); + + /* Make sure we aren't omitting any work */ + CheckDeferredOpAllDone (); } } else { diff --git a/test/err/bug2020-definition.c b/test/err/bug2020-definition.c new file mode 100644 index 000000000..7443e3a9a --- /dev/null +++ b/test/err/bug2020-definition.c @@ -0,0 +1,6 @@ +/* Bug #2020 - ISO/IEC 9899:1999 (E), 6.9.1 footnote 137: +** "The intent is that the type category in a function definition cannot be inherited from a typedef" + */ + +typedef void F(void); +F c { } /* Should fail */ diff --git a/test/val/bug2020-ok.c b/test/val/bug2020-ok.c new file mode 100644 index 000000000..6c52a9498 --- /dev/null +++ b/test/val/bug2020-ok.c @@ -0,0 +1,16 @@ +/* Bug #2020 - Right cases */ + +typedef int F(void); // type F is "function with no parameters returning int" + +F f, g; // f and g both have type compatible with F +int f(void) { return 0; } // RIGHT: f has type compatible with F +int g() { return 0; } // RIGHT: g has type compatible with F +F *e(void) { return 0; } // e returns a pointer to a function +F *((h))(void) { return 0; } // similar: parentheses irrelevant +int (*fp)(void); // fp points to a function that has type F +F *Fp; // Fp points to a function that has type + +int main(void) +{ + return 0; +} From 32a20cf5caf51594f7d6e6ea1e3fb36a51ac945b Mon Sep 17 00:00:00 2001 From: Brian Peek <2321675+BrianPeek@users.noreply.github.com> Date: Fri, 6 Oct 2023 19:51:36 -0700 Subject: [PATCH 2216/2710] remove abc ptrs --- libsrc/lynx/extzp.inc | 7 ------- libsrc/lynx/extzp.s | 8 -------- 2 files changed, 15 deletions(-) diff --git a/libsrc/lynx/extzp.inc b/libsrc/lynx/extzp.inc index 2b0f68701..7103ff5b6 100644 --- a/libsrc/lynx/extzp.inc +++ b/libsrc/lynx/extzp.inc @@ -12,10 +12,6 @@ .global __iodir: zp .global __viddma: zp .global __sprsys: zp - .global _abc_score_ptr0: zp - .global _abc_score_ptr1: zp - .global _abc_score_ptr2: zp - .global _abc_score_ptr3: zp .global _FileEntry: zp .global _FileStartBlock: zp .global _FileBlockOffset: zp @@ -25,6 +21,3 @@ .global _FileCurrBlock: zp .global _FileBlockByte: zp .global _FileDestPtr: zp - - - diff --git a/libsrc/lynx/extzp.s b/libsrc/lynx/extzp.s index f22cfaefb..df53c3d9a 100644 --- a/libsrc/lynx/extzp.s +++ b/libsrc/lynx/extzp.s @@ -16,13 +16,6 @@ __iodir: .res 1 __viddma: .res 1 __sprsys: .res 1 -; ------------------------------------------------------------------------ -; sound effect pointers for multitimbral Lynx music hardware -_abc_score_ptr0: .res 2 -_abc_score_ptr1: .res 2 -_abc_score_ptr2: .res 2 -_abc_score_ptr3: .res 2 - ; ------------------------------------------------------------------------ ; Filesystem variables needed for reading stuff from the Lynx cart _FileEntry: ; The file directory entry is 8 bytes @@ -35,4 +28,3 @@ _FileFileLen: .res 2 _FileCurrBlock: .res 1 _FileBlockByte: .res 2 _FileDestPtr: .res 2 - From 7b6f8249a0280b9f9ec82912eed3fffd790170c5 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 11 Oct 2023 22:29:15 +0800 Subject: [PATCH 2217/2710] General fixes for prerequisites for optimization on certain std functions. Added utility functions for extracting expression info. --- src/cc65/exprdesc.c | 28 ++++++++++++++++ src/cc65/exprdesc.h | 9 +++++ src/cc65/stdfunc.c | 82 ++++++++++++++++++++------------------------- 3 files changed, 74 insertions(+), 45 deletions(-) diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index 5924ab6cf..a1af0bb8b 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -167,6 +167,17 @@ int ED_IsLocQuasiConst (const ExprDesc* Expr) +int ED_IsLocZP (const ExprDesc* Expr) +/* Return true if the expression is in a location on a zeropage */ +{ + return ED_IsLocRegister (Expr) || + (ED_IsLocConst (Expr) && + Expr->Sym != 0 && + (Expr->Sym->Flags & SC_ZEROPAGE) != 0); +} + + + #if !defined(HAVE_INLINE) int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr) /* Return true if the expression is E_LOC_PRIMARY or E_LOC_EXPR */ @@ -302,6 +313,23 @@ int ED_IsQuasiConstAddr (const ExprDesc* Expr) + +int ED_IsStackAddr (const ExprDesc* Expr) +/* Return true if the expression denotes a fixed address on stack */ +{ + return ED_IsAddrExpr (Expr) && ED_IsLocStack (Expr); +} + + + +int ED_IsZPInd (const ExprDesc* Expr) +/* Return true if the expression is located on the zeropage */ +{ + return ED_IsIndExpr (Expr) && ED_IsLocZP (Expr); +} + + + int ED_IsNullPtr (const ExprDesc* Expr) /* Return true if the given expression is a NULL pointer constant */ { diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index 2ef8b617f..93a8604c9 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -369,6 +369,9 @@ int ED_IsLocQuasiConst (const ExprDesc* Expr); */ #endif +int ED_IsLocZP (const ExprDesc* Expr); +/* Return true if the expression is in a location on a zeropage */ + #if defined(HAVE_INLINE) INLINE int ED_IsLocPrimaryOrExpr (const ExprDesc* Expr) /* Return true if the expression is E_LOC_PRIMARY or E_LOC_EXPR */ @@ -572,6 +575,12 @@ int ED_IsQuasiConstAddr (const ExprDesc* Expr); ** This can be a constant address or a stack variable address. */ +int ED_IsStackAddr (const ExprDesc* Expr); +/* Return true if the expression denotes a fixed address on stack */ + +int ED_IsZPInd (const ExprDesc* Expr); +/* Return true if the expression is located on the zeropage */ + int ED_IsNullPtr (const ExprDesc* Expr); /* Return true if the given expression is a NULL pointer constant */ diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index e968aaf1f..246bce192 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -280,13 +280,11 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** generated, and emit better code. */ if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal <= 256 && - ((ED_IsRVal (&Arg2.Expr) && ED_IsLocConst (&Arg2.Expr)) || - (ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr))) && - ((ED_IsRVal (&Arg1.Expr) && ED_IsLocConst (&Arg1.Expr)) || - (ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr)))) { + (ED_IsConstAddr (&Arg2.Expr) || ED_IsZPInd (&Arg2.Expr)) && + (ED_IsConstAddr (&Arg1.Expr) || ED_IsZPInd (&Arg1.Expr))) { - int Reg1 = ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr); - int Reg2 = ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr); + int Reg1 = ED_IsZPInd (&Arg1.Expr); + int Reg2 = ED_IsZPInd (&Arg2.Expr); /* Drop the generated code */ RemoveCode (&Arg1.Expr.Start); @@ -342,9 +340,9 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) } if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal <= 256 && - ED_IsRVal (&Arg2.Expr) && ED_IsLocConst (&Arg2.Expr) && - ED_IsRVal (&Arg1.Expr) && ED_IsLocStack (&Arg1.Expr) && - (Arg1.Expr.IVal - StackPtr) + Arg3.Expr.IVal < 256) { + ED_IsConstAddr (&Arg2.Expr) && + ED_IsStackAddr (&Arg1.Expr) && + ED_GetStackOffs (&Arg1.Expr, Arg3.Expr.IVal) < 256) { /* It is possible to just use one index register even if the stack ** offset is not zero, by adjusting the offset to the constant @@ -353,7 +351,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** than 256. Register space is zero page, which means that the ** address calculation could overflow in the linker. */ - int AllowOneIndex = !ED_IsLocRegister (&Arg2.Expr) && + int AllowOneIndex = !ED_IsLocZP (&Arg2.Expr) && !(ED_IsLocNone (&Arg2.Expr) && Arg2.Expr.IVal < 256); /* Calculate the real stack offset */ @@ -420,9 +418,9 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) } if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal <= 256 && - ED_IsRVal (&Arg2.Expr) && ED_IsLocStack (&Arg2.Expr) && - (Arg2.Expr.IVal - StackPtr) + Arg3.Expr.IVal < 256 && - ED_IsRVal (&Arg1.Expr) && ED_IsLocConst (&Arg1.Expr)) { + ED_IsStackAddr (&Arg2.Expr) && + ED_GetStackOffs (&Arg2.Expr, Arg3.Expr.IVal) < 256 && + ED_IsConstAddr (&Arg1.Expr)) { /* It is possible to just use one index register even if the stack ** offset is not zero, by adjusting the offset to the constant @@ -431,7 +429,7 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** than 256. Register space is zero page, which means that the ** address calculation could overflow in the linker. */ - int AllowOneIndex = !ED_IsLocRegister (&Arg1.Expr) && + int AllowOneIndex = !ED_IsLocZP (&Arg1.Expr) && !(ED_IsLocNone (&Arg1.Expr) && Arg1.Expr.IVal < 256); /* Calculate the real stack offset */ @@ -497,8 +495,8 @@ static void StdFunc_memcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) goto ExitPoint; } - if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal <= 256 && - ED_IsRVal (&Arg2.Expr) && ED_IsLocStack (&Arg2.Expr) && + if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal <= 256 && + ED_IsStackAddr (&Arg2.Expr) && (Offs = ED_GetStackOffs (&Arg2.Expr, 0)) == 0) { /* Drop the generated code but leave the load of the first argument*/ @@ -637,10 +635,9 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr) */ if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal <= 256 && ED_IsConstAbsInt (&Arg2.Expr) && - ((ED_IsRVal (&Arg1.Expr) && ED_IsLocConst (&Arg1.Expr)) || - (ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr)))) { + (ED_IsConstAddr (&Arg1.Expr) || ED_IsZPInd (&Arg1.Expr))) { - int Reg = ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr); + int Reg = ED_IsZPInd (&Arg1.Expr); /* Drop the generated code */ RemoveCode (&Arg1.Expr.Start); @@ -689,8 +686,8 @@ static void StdFunc_memset (FuncDesc* F attribute ((unused)), ExprDesc* Expr) if (ED_IsConstAbsInt (&Arg3.Expr) && Arg3.Expr.IVal <= 256 && ED_IsConstAbsInt (&Arg2.Expr) && - ED_IsRVal (&Arg1.Expr) && ED_IsLocStack (&Arg1.Expr) && - (Arg1.Expr.IVal - StackPtr) + Arg3.Expr.IVal < 256) { + ED_IsStackAddr (&Arg1.Expr) && + ED_GetStackOffs (&Arg1.Expr, Arg3.Expr.IVal) < 256) { /* Calculate the real stack offset */ int Offs = ED_GetStackOffs (&Arg1.Expr, 0); @@ -850,7 +847,7 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr) /* We do now have Arg1 in the primary. Load the first character from ** this string and cast to int. This is the function result. */ - IsArray = IsTypeArray (Arg1.Type) && ED_IsRVal (&Arg1.Expr); + IsArray = IsTypeArray (Arg1.Type) && ED_IsAddrExpr (&Arg1.Expr); if (IsArray && ED_IsLocStack (&Arg1.Expr) && (Offs = ED_GetStackOffs (&Arg1.Expr, 0) < 256)) { /* Drop the generated code */ @@ -878,22 +875,20 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr) } } else if ((IS_Get (&CodeSizeFactor) >= 165) && - ((ED_IsRVal (&Arg2.Expr) && ED_IsLocConst (&Arg2.Expr)) || - (ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr))) && - ((ED_IsRVal (&Arg1.Expr) && ED_IsLocConst (&Arg1.Expr)) || - (ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr))) && + (ED_IsConstAddr (&Arg2.Expr) || ED_IsZPInd (&Arg2.Expr)) && + (ED_IsConstAddr (&Arg1.Expr) || ED_IsZPInd (&Arg1.Expr)) && (IS_Get (&EagerlyInlineFuncs) || (ECount1 > 0 && ECount1 < 256))) { unsigned Entry, Loop, Fin; /* Labels */ const char* Load; const char* Compare; - if (ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr)) { + if (ED_IsZPInd (&Arg1.Expr)) { Load = "lda (%s),y"; } else { Load = "lda %s,y"; } - if (ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr)) { + if (ED_IsZPInd (&Arg2.Expr)) { Compare = "cmp (%s),y"; } else { Compare = "cmp %s,y"; @@ -924,14 +919,13 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr) g_defcodelabel (Fin); } else if ((IS_Get (&CodeSizeFactor) > 190) && - ((ED_IsRVal (&Arg2.Expr) && ED_IsLocConst (&Arg2.Expr)) || - (ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr))) && + (ED_IsConstAddr (&Arg2.Expr) || ED_IsZPInd (&Arg2.Expr)) && (IS_Get (&EagerlyInlineFuncs) || (ECount1 > 0 && ECount1 < 256))) { unsigned Entry, Loop, Fin; /* Labels */ const char* Compare; - if (ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr)) { + if (ED_IsZPInd (&Arg2.Expr)) { Compare = "cmp (%s),y"; } else { Compare = "cmp %s,y"; @@ -1028,21 +1022,19 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** be generated. If such a situation is detected, throw away the ** generated, and emit better code. */ - if (((ED_IsRVal (&Arg2.Expr) && ED_IsLocConst (&Arg2.Expr)) || - (ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr))) && - ((ED_IsRVal (&Arg1.Expr) && ED_IsLocConst (&Arg1.Expr)) || - (ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr))) && + if ((ED_IsConstAddr (&Arg2.Expr) || ED_IsZPInd (&Arg2.Expr)) && + (ED_IsConstAddr (&Arg1.Expr) || ED_IsZPInd (&Arg1.Expr)) && (IS_Get (&EagerlyInlineFuncs) || (ECount != UNSPECIFIED && ECount < 256))) { const char* Load; const char* Store; - if (ED_IsLVal (&Arg2.Expr) && ED_IsLocRegister (&Arg2.Expr)) { + if (ED_IsZPInd (&Arg2.Expr)) { Load = "lda (%s),y"; } else { Load = "lda %s,y"; } - if (ED_IsLVal (&Arg1.Expr) && ED_IsLocRegister (&Arg1.Expr)) { + if (ED_IsZPInd (&Arg1.Expr)) { Store = "sta (%s),y"; } else { Store = "sta %s,y"; @@ -1069,9 +1061,9 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) goto ExitPoint; } - if (ED_IsRVal (&Arg2.Expr) && ED_IsLocStack (&Arg2.Expr) && + if (ED_IsStackAddr (&Arg2.Expr) && StackPtr >= -255 && - ED_IsRVal (&Arg1.Expr) && ED_IsLocConst (&Arg1.Expr)) { + ED_IsConstAddr (&Arg1.Expr)) { /* It is possible to just use one index register even if the stack ** offset is not zero, by adjusting the offset to the constant @@ -1080,7 +1072,7 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** than 256. Register space is zero page, which means that the ** address calculation could overflow in the linker. */ - int AllowOneIndex = !ED_IsLocRegister (&Arg1.Expr) && + int AllowOneIndex = !ED_IsLocZP (&Arg1.Expr) && !(ED_IsLocNone (&Arg1.Expr) && Arg1.Expr.IVal < 256); /* Calculate the real stack offset */ @@ -1116,8 +1108,8 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) goto ExitPoint; } - if (ED_IsRVal (&Arg2.Expr) && ED_IsLocConst (&Arg2.Expr) && - ED_IsRVal (&Arg1.Expr) && ED_IsLocStack (&Arg1.Expr) && + if (ED_IsConstAddr (&Arg2.Expr) && + ED_IsStackAddr (&Arg1.Expr) && StackPtr >= -255) { /* It is possible to just use one index register even if the stack @@ -1127,7 +1119,7 @@ static void StdFunc_strcpy (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** than 256. Register space is zero page, which means that the ** address calculation could overflow in the linker. */ - int AllowOneIndex = !ED_IsLocRegister (&Arg2.Expr) && + int AllowOneIndex = !ED_IsLocZP (&Arg2.Expr) && !(ED_IsLocNone (&Arg2.Expr) && Arg2.Expr.IVal < 256); /* Calculate the real stack offset */ @@ -1276,7 +1268,7 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** completely within the reach of a byte sized index register. */ if (ED_IsLocStack (&Arg) && IsArray && IsByteIndex && - (Arg.IVal - StackPtr) + ECount < 256) { + ED_GetStackOffs (&Arg, ECount) < 256) { /* Calculate the true stack offset */ int Offs = ED_GetStackOffs (&Arg, 0); @@ -1305,7 +1297,7 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** get inlined if requested on the command line, since we cannot know how ** big the buffer actually is, so inlining is not always safe. */ - if (ED_IsLocRegister (&Arg) && ED_IsLVal (&Arg) && IsPtr && + if (ED_IsZPInd (&Arg) && IsPtr && IS_Get (&EagerlyInlineFuncs)) { /* Generate the strlen code */ From b14efbb57836c142129e0a647aed471e56472b89 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 11 Oct 2023 23:57:45 +0800 Subject: [PATCH 2218/2710] Fixed EOL settings (LF vs CRLF) for Visual Studio. --- .editorconfig | 1 - 1 file changed, 1 deletion(-) diff --git a/.editorconfig b/.editorconfig index 3920829e6..1a6397284 100644 --- a/.editorconfig +++ b/.editorconfig @@ -2,7 +2,6 @@ root = true [*] charset = utf-8 -end_of_line = crlf indent_style = space indent_size = 4 trim_trailing_whitespace = true From 74922afa7cb662dcaffd9896d671b865fbf0d7cf Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 12 Oct 2023 17:31:49 +0800 Subject: [PATCH 2219/2710] Made the intension of functions in src/cc65/declare.c less confusing. --- src/cc65/declare.c | 181 ++++++++++++++++++++++----------------------- src/cc65/declare.h | 7 +- src/cc65/expr.c | 6 +- 3 files changed, 95 insertions(+), 99 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index eab0ff0d6..cd174c92d 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -72,7 +72,7 @@ -static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpecified); +static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSpecified); /* Parse a type specifier */ @@ -125,7 +125,7 @@ static unsigned ParseOneStorageClass (void) -static int ParseStorageClass (DeclSpec* D) +static int ParseStorageClass (DeclSpec* Spec) /* Parse storage class specifiers. Return true if a specifier is read even if ** it was duplicated or disallowed. */ { @@ -137,9 +137,9 @@ static int ParseStorageClass (DeclSpec* D) } while (StorageClass != 0) { - if (D->StorageClass == 0) { - D->StorageClass = StorageClass; - } else if (D->StorageClass == StorageClass) { + if (Spec->StorageClass == 0) { + Spec->StorageClass = StorageClass; + } else if (Spec->StorageClass == StorageClass) { Warning ("Duplicate storage class specifier"); } else { Error ("Conflicting storage class specifier"); @@ -346,12 +346,12 @@ static void OptionalSigned (int* SignednessSpecified) -void InitDeclSpec (DeclSpec* D) +static void InitDeclSpec (DeclSpec* Spec) /* Initialize the DeclSpec struct for use */ { - D->StorageClass = 0; - D->Type[0].C = T_END; - D->Flags = 0; + Spec->StorageClass = 0; + Spec->Type[0].C = T_END; + Spec->Flags = 0; } @@ -1250,7 +1250,7 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { -static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpecified) +static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSpecified) /* Parse a type specifier. Store whether one of "signed" or "unsigned" was ** specified, so bit-fields of unspecified signedness can be treated as ** unsigned; without special handling, it would be treated as signed. @@ -1265,25 +1265,25 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci } /* Assume we have an explicit type */ - D->Flags &= ~DS_DEF_TYPE; + Spec->Flags &= ~DS_DEF_TYPE; /* Read storage specifiers and/or type qualifiers if we have any */ - OptionalSpecifiers (D, &Qualifiers, TSFlags); + OptionalSpecifiers (Spec, &Qualifiers, TSFlags); /* Look at the data type */ switch (CurTok.Tok) { case TOK_VOID: NextToken (); - D->Type[0].C = T_VOID; - D->Type[0].A.U = 0; - D->Type[1].C = T_END; + Spec->Type[0].C = T_VOID; + Spec->Type[0].A.U = 0; + Spec->Type[1].C = T_END; break; case TOK_CHAR: NextToken (); - D->Type[0].C = T_CHAR; - D->Type[1].C = T_END; + Spec->Type[0].C = T_CHAR; + Spec->Type[1].C = T_END; break; case TOK_LONG: @@ -1294,13 +1294,13 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci } NextToken (); OptionalInt (); - D->Type[0].C = T_ULONG; - D->Type[1].C = T_END; + Spec->Type[0].C = T_ULONG; + Spec->Type[1].C = T_END; } else { OptionalSigned (SignednessSpecified); OptionalInt (); - D->Type[0].C = T_LONG; - D->Type[1].C = T_END; + Spec->Type[0].C = T_LONG; + Spec->Type[1].C = T_END; } break; @@ -1312,20 +1312,20 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci } NextToken (); OptionalInt (); - D->Type[0].C = T_USHORT; - D->Type[1].C = T_END; + Spec->Type[0].C = T_USHORT; + Spec->Type[1].C = T_END; } else { OptionalSigned (SignednessSpecified); OptionalInt (); - D->Type[0].C = T_SHORT; - D->Type[1].C = T_END; + Spec->Type[0].C = T_SHORT; + Spec->Type[1].C = T_END; } break; case TOK_INT: NextToken (); - D->Type[0].C = T_INT; - D->Type[1].C = T_END; + Spec->Type[0].C = T_INT; + Spec->Type[1].C = T_END; break; case TOK_SIGNED: @@ -1337,22 +1337,22 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci case TOK_CHAR: NextToken (); - D->Type[0].C = T_SCHAR; - D->Type[1].C = T_END; + Spec->Type[0].C = T_SCHAR; + Spec->Type[1].C = T_END; break; case TOK_SHORT: NextToken (); OptionalInt (); - D->Type[0].C = T_SHORT; - D->Type[1].C = T_END; + Spec->Type[0].C = T_SHORT; + Spec->Type[1].C = T_END; break; case TOK_LONG: NextToken (); OptionalInt (); - D->Type[0].C = T_LONG; - D->Type[1].C = T_END; + Spec->Type[0].C = T_LONG; + Spec->Type[1].C = T_END; break; case TOK_INT: @@ -1360,8 +1360,8 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci /* FALL THROUGH */ default: - D->Type[0].C = T_INT; - D->Type[1].C = T_END; + Spec->Type[0].C = T_INT; + Spec->Type[1].C = T_END; break; } break; @@ -1375,22 +1375,22 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci case TOK_CHAR: NextToken (); - D->Type[0].C = T_UCHAR; - D->Type[1].C = T_END; + Spec->Type[0].C = T_UCHAR; + Spec->Type[1].C = T_END; break; case TOK_SHORT: NextToken (); OptionalInt (); - D->Type[0].C = T_USHORT; - D->Type[1].C = T_END; + Spec->Type[0].C = T_USHORT; + Spec->Type[1].C = T_END; break; case TOK_LONG: NextToken (); OptionalInt (); - D->Type[0].C = T_ULONG; - D->Type[1].C = T_END; + Spec->Type[0].C = T_ULONG; + Spec->Type[1].C = T_END; break; case TOK_INT: @@ -1398,22 +1398,22 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci /* FALL THROUGH */ default: - D->Type[0].C = T_UINT; - D->Type[1].C = T_END; + Spec->Type[0].C = T_UINT; + Spec->Type[1].C = T_END; break; } break; case TOK_FLOAT: NextToken (); - D->Type[0].C = T_FLOAT; - D->Type[1].C = T_END; + Spec->Type[0].C = T_FLOAT; + Spec->Type[1].C = T_END; break; case TOK_DOUBLE: NextToken (); - D->Type[0].C = T_DOUBLE; - D->Type[1].C = T_END; + Spec->Type[0].C = T_DOUBLE; + Spec->Type[1].C = T_END; break; case TOK_UNION: @@ -1426,13 +1426,13 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci AnonName (Ident, "union"); } /* Remember we have an extra type decl */ - D->Flags |= DS_EXTRA_TYPE; + Spec->Flags |= DS_EXTRA_TYPE; /* Declare the union in the current scope */ - TagEntry = ParseUnionSpec (Ident, &D->Flags); + TagEntry = ParseUnionSpec (Ident, &Spec->Flags); /* Encode the union entry into the type */ - D->Type[0].C = T_UNION; - SetESUTagSym (D->Type, TagEntry); - D->Type[1].C = T_END; + Spec->Type[0].C = T_UNION; + SetESUTagSym (Spec->Type, TagEntry); + Spec->Type[1].C = T_END; break; case TOK_STRUCT: @@ -1445,13 +1445,13 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci AnonName (Ident, "struct"); } /* Remember we have an extra type decl */ - D->Flags |= DS_EXTRA_TYPE; + Spec->Flags |= DS_EXTRA_TYPE; /* Declare the struct in the current scope */ - TagEntry = ParseStructSpec (Ident, &D->Flags); + TagEntry = ParseStructSpec (Ident, &Spec->Flags); /* Encode the struct entry into the type */ - D->Type[0].C = T_STRUCT; - SetESUTagSym (D->Type, TagEntry); - D->Type[1].C = T_END; + Spec->Type[0].C = T_STRUCT; + SetESUTagSym (Spec->Type, TagEntry); + Spec->Type[1].C = T_END; break; case TOK_ENUM: @@ -1467,13 +1467,13 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci AnonName (Ident, "enum"); } /* Remember we have an extra type decl */ - D->Flags |= DS_EXTRA_TYPE; + Spec->Flags |= DS_EXTRA_TYPE; /* Parse the enum decl */ - TagEntry = ParseEnumSpec (Ident, &D->Flags); + TagEntry = ParseEnumSpec (Ident, &Spec->Flags); /* Encode the enum entry into the type */ - D->Type[0].C |= T_ENUM; - SetESUTagSym (D->Type, TagEntry); - D->Type[1].C = T_END; + Spec->Type[0].C |= T_ENUM; + SetESUTagSym (Spec->Type, TagEntry); + Spec->Type[1].C = T_END; /* The signedness of enums is determined by the type, so say this is specified to avoid ** the int -> unsigned int handling for plain int bit-fields in AddBitField. */ @@ -1489,7 +1489,7 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci if (TagEntry && SymIsTypeDef (TagEntry)) { /* It's a typedef */ NextToken (); - TypeCopy (D->Type, TagEntry->Type); + TypeCopy (Spec->Type, TagEntry->Type); /* If it's a typedef, we should actually use whether the signedness was ** specified on the typedef, but that information has been lost. Treat the ** signedness as being specified to work around the ICE in #1267. @@ -1506,29 +1506,29 @@ static void ParseTypeSpec (DeclSpec* D, typespec_t TSFlags, int* SignednessSpeci ** in DeclareLocals. The type code used here doesn't matter as ** long as it has no qualifiers. */ - D->Flags |= DS_DEF_TYPE; - D->Type[0].C = T_INT; - D->Type[1].C = T_END; + Spec->Flags |= DS_DEF_TYPE; + Spec->Type[0].C = T_INT; + Spec->Type[1].C = T_END; break; } /* FALL THROUGH */ default: if ((TSFlags & TS_MASK_DEFAULT_TYPE) == TS_DEFAULT_TYPE_NONE) { - D->Flags |= DS_NO_TYPE; - D->Type[0].C = T_INT; - D->Type[1].C = T_END; + Spec->Flags |= DS_NO_TYPE; + Spec->Type[0].C = T_INT; + Spec->Type[1].C = T_END; } else { - D->Flags |= DS_DEF_TYPE; - D->Type[0].C = T_INT; - D->Type[1].C = T_END; + Spec->Flags |= DS_DEF_TYPE; + Spec->Type[0].C = T_INT; + Spec->Type[1].C = T_END; } break; } /* There may also be specifiers/qualifiers *after* the initial type */ - OptionalSpecifiers (D, &Qualifiers, TSFlags); - D->Type[0].C |= Qualifiers; + OptionalSpecifiers (Spec, &Qualifiers, TSFlags); + Spec->Type[0].C |= Qualifiers; } @@ -1629,7 +1629,7 @@ static void ParseOldStyleParamList (FuncDesc* F) /* Parse a comma separated variable list */ while (1) { - Declarator Decl; + Declarator Decl; /* Read the parameter */ ParseDecl (&Spec, &Decl, DM_NEED_IDENT); @@ -1646,7 +1646,7 @@ static void ParseOldStyleParamList (FuncDesc* F) SymEntry* Param = FindLocalSym (Decl.Ident); if (Param) { /* Check if we already changed the type for this - ** parameter + ** parameter. */ if (Param->Flags & SC_DEFTYPE) { /* Found it, change the default type to the one given */ @@ -1691,9 +1691,9 @@ static void ParseAnsiParamList (FuncDesc* F) /* Parse params */ while (CurTok.Tok != TOK_RPAREN) { - DeclSpec Spec; - Declarator Decl; - SymEntry* Param; + DeclSpec Spec; + Declarator Decl; + SymEntry* Param; /* Allow an ellipsis as last parameter */ if (CurTok.Tok == TOK_ELLIPSIS) { @@ -1780,7 +1780,6 @@ static void ParseAnsiParamList (FuncDesc* F) static FuncDesc* ParseFuncDecl (void) /* Parse the argument list of a function with the enclosing parentheses */ { - SymEntry* Sym; SymEntry* WrappedCall; unsigned int WrappedCallData; @@ -1806,7 +1805,7 @@ static FuncDesc* ParseFuncDecl (void) /* If the identifier is a typedef, we have a new-style parameter list; ** if it's some other identifier, it's an old-style parameter list. */ - Sym = FindSym (CurTok.Ident); + SymEntry* Sym = FindSym (CurTok.Ident); if (Sym == 0 || !SymIsTypeDef (Sym)) { /* Old-style (K&R) function. */ F->Flags |= FD_OLDSTYLE; @@ -2012,7 +2011,7 @@ static void DirectDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) /*****************************************************************************/ -/* code */ +/* Code */ /*****************************************************************************/ @@ -2150,34 +2149,34 @@ void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) -void ParseDeclSpec (DeclSpec* D, typespec_t TSFlags, unsigned DefStorage) +void ParseDeclSpec (DeclSpec* Spec, typespec_t TSFlags, unsigned DefStorage) /* Parse a declaration specification */ { /* Initialize the DeclSpec struct */ - InitDeclSpec (D); + InitDeclSpec (Spec); /* Assume we're using an explicit storage class */ - D->Flags &= ~DS_DEF_STORAGE; + Spec->Flags &= ~DS_DEF_STORAGE; /* Parse the type specifiers */ - ParseTypeSpec (D, TSFlags | TS_STORAGE_CLASS_SPEC | TS_FUNCTION_SPEC, NULL); + ParseTypeSpec (Spec, TSFlags | TS_STORAGE_CLASS_SPEC | TS_FUNCTION_SPEC, NULL); /* If no explicit storage class is given, use the default */ - if (D->StorageClass == 0) { - D->Flags |= DS_DEF_STORAGE; - D->StorageClass = DefStorage; + if (Spec->StorageClass == 0) { + Spec->Flags |= DS_DEF_STORAGE; + Spec->StorageClass = DefStorage; } } -void CheckEmptyDecl (const DeclSpec* D) +void CheckEmptyDecl (const DeclSpec* Spec) /* Called after an empty type declaration (that is, a type declaration without ** a variable). Checks if the declaration does really make sense and issues a ** warning if not. */ { - if ((D->Flags & DS_EXTRA_TYPE) == 0) { + if ((Spec->Flags & DS_EXTRA_TYPE) == 0) { Warning ("Useless declaration"); } } diff --git a/src/cc65/declare.h b/src/cc65/declare.h index 0facccba3..89d7be7ea 100644 --- a/src/cc65/declare.h +++ b/src/cc65/declare.h @@ -113,19 +113,16 @@ typedef enum { -void InitDeclSpec (DeclSpec* D); -/* Initialize the DeclSpec struct for use */ - Type* ParseType (Type* Type); /* Parse a complete type specification */ void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode); /* Parse a variable, type or function declarator */ -void ParseDeclSpec (DeclSpec* D, typespec_t TSFlags, unsigned DefStorage); +void ParseDeclSpec (DeclSpec* Spec, typespec_t TSFlags, unsigned DefStorage); /* Parse a declaration specification */ -void CheckEmptyDecl (const DeclSpec* D); +void CheckEmptyDecl (const DeclSpec* Spec); /* Called after an empty type declaration (that is, a type declaration without ** a variable). Checks if the declaration does really make sense and issues a ** warning if not. diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 37af494b5..5e8c48c1a 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1397,13 +1397,13 @@ static void Primary (ExprDesc* E) break; } else { /* Let's see if this is a C99-style declaration */ - DeclSpec Spec; - InitDeclSpec (&Spec); + DeclSpec Spec; ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT, SC_AUTO); if (Spec.Type->C != T_END) { - + /* Recognized but not supported */ Error ("Mixed declarations and code are not supported in cc65"); + while (CurTok.Tok != TOK_SEMI) { Declarator Decl; From c6ead99b002fc2e6e0c61f8ee54f11353fa696fb Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 13 Oct 2023 16:32:05 +0800 Subject: [PATCH 2220/2710] Fixed string literal concatenation with pragmas in between. --- src/cc65/litpool.c | 13 +++- src/cc65/litpool.h | 5 +- src/cc65/scanner.c | 163 ++++++++++++++++++++++++++++++--------------- 3 files changed, 124 insertions(+), 57 deletions(-) diff --git a/src/cc65/litpool.c b/src/cc65/litpool.c index d741f87d0..5433f6d95 100644 --- a/src/cc65/litpool.c +++ b/src/cc65/litpool.c @@ -160,13 +160,24 @@ void ReleaseLiteral (Literal* L) void TranslateLiteral (Literal* L) -/* Translate a literal into the target charset. */ +/* Translate a literal into the target charset */ { TgtTranslateBuf (SB_GetBuf (&L->Data), SB_GetLen (&L->Data)); } +void ConcatLiteral (Literal* L, const Literal* Appended) +/* Concatenate string literals */ +{ + if (SB_GetLen (&L->Data) > 0 && SB_LookAtLast (&L->Data) == '\0') { + SB_Drop (&L->Data, 1); + } + SB_Append (&L->Data, &Appended->Data); +} + + + unsigned GetLiteralLabel (const Literal* L) /* Return the asm label for a literal */ { diff --git a/src/cc65/litpool.h b/src/cc65/litpool.h index 78f432138..5f444bfb8 100644 --- a/src/cc65/litpool.h +++ b/src/cc65/litpool.h @@ -75,7 +75,10 @@ void ReleaseLiteral (Literal* L); /* Decrement the reference counter for the literal */ void TranslateLiteral (Literal* L); -/* Translate a literal into the target charset. */ +/* Translate a literal into the target charset */ + +void ConcatLiteral (Literal* L, const Literal* Appended); +/* Concatenate string literals */ unsigned GetLiteralLabel (const Literal* L); /* Return the asm label for a literal */ diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 4591f86a2..e9ef34173 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -70,6 +70,7 @@ +static Token SavedTok; /* Saved token */ Token CurTok; /* The current token */ Token NextTok; /* The next token */ int PPParserRunning; /* Is tokenizer used by the preprocessor */ @@ -324,7 +325,7 @@ static void SetTok (int tok) static int ParseChar (void) -/* Parse a character. Converts escape chars into character codes. */ +/* Parse a character token. Converts escape chars into character codes. */ { int C; int HadError; @@ -426,7 +427,7 @@ static int ParseChar (void) static void CharConst (void) -/* Parse a character constant. */ +/* Parse a character constant token */ { int C; @@ -463,7 +464,7 @@ static void CharConst (void) static void StringConst (void) -/* Parse a quoted string */ +/* Parse a quoted string token */ { /* String buffer */ StrBuf S = AUTO_STRBUF_INITIALIZER; @@ -471,43 +472,34 @@ static void StringConst (void) /* Assume next token is a string constant */ NextTok.Tok = TOK_SCONST; - /* Concatenate strings. If at least one of the concenated strings is a wide - ** character literal, the whole string is a wide char literal, otherwise - ** it's a normal string literal. - */ - while (1) { + /* Check if this is a normal or a wide char string */ + if (CurC == 'L' && NextC == '\"') { + /* Wide character literal */ + NextTok.Tok = TOK_WCSCONST; + NextChar (); + NextChar (); + } else if (CurC == '\"') { + /* Skip the quote char */ + NextChar (); + } else { + /* No string */ + goto ExitPoint; + } - /* Check if this is a normal or a wide char string */ - if (CurC == 'L' && NextC == '\"') { - /* Wide character literal */ - NextTok.Tok = TOK_WCSCONST; - NextChar (); - NextChar (); - } else if (CurC == '\"') { - /* Skip the quote char */ - NextChar (); - } else { - /* No string */ + /* Read until end of string */ + while (CurC != '\"') { + if (CurC == '\0') { + Error ("Unexpected newline"); break; } - - /* Read until end of string */ - while (CurC != '\"') { - if (CurC == '\0') { - Error ("Unexpected newline"); - break; - } - SB_AppendChar (&S, ParseChar ()); - } - - /* Skip closing quote char if there was one */ - NextChar (); - - /* Skip white space, read new input */ - SkipWhite (); - + SB_AppendChar (&S, ParseChar ()); } + /* Skip closing quote char if there was one */ + NextChar (); + +ExitPoint: + /* Terminate the string */ SB_AppendChar (&S, '\0'); @@ -521,7 +513,7 @@ static void StringConst (void) static void NumericConst (void) -/* Parse a numeric constant */ +/* Parse a numeric constant token */ { unsigned Base; /* Temporary number base according to prefix */ unsigned Index; @@ -806,13 +798,6 @@ static void GetNextInputToken (void) { ident token; - /* We have to skip white space here before shifting tokens, since the - ** tokens and the current line info is invalid at startup and will get - ** initialized by reading the first time from the file. Remember if we - ** were at end of input and handle that later. - */ - int GotEOF = (SkipWhite () == 0); - /* Current token is the lookahead token */ if (CurTok.LI) { ReleaseLineInfo (CurTok.LI); @@ -821,13 +806,27 @@ static void GetNextInputToken (void) /* Get the current token */ CurTok = NextTok; - /* Remember the starting position of the next token */ - NextTok.LI = UseLineInfo (GetCurLineInfo ()); + if (SavedTok.Tok == TOK_INVALID) { + /* We have to skip white space here before shifting tokens, since the + ** tokens and the current line info is invalid at startup and will get + ** initialized by reading the first time from the file. Remember if we + ** were at end of input and handle that later. + */ + int GotEOF = (SkipWhite () == 0); - /* Now handle end of input */ - if (GotEOF) { - /* End of file reached */ - NextTok.Tok = TOK_CEOF; + /* Remember the starting position of the next token */ + NextTok.LI = UseLineInfo (GetCurLineInfo ()); + + /* Now handle end of input */ + if (GotEOF) { + /* End of file reached */ + NextTok.Tok = TOK_CEOF; + return; + } + } else { + /* Just use the saved token */ + NextTok = SavedTok; + SavedTok.Tok = TOK_INVALID; return; } @@ -1122,6 +1121,9 @@ void NextToken (void) ** encountered. Adjacent string literal tokens will be concatenated. */ { + /* Used for string literal concatenation */ + Token PrevTok; + /* When reading the first time from the file, the line info in NextTok, ** which will be copied to CurTok is invalid. Since the information from ** the token is used for error messages, we must make it valid. @@ -1130,13 +1132,64 @@ void NextToken (void) NextTok.LI = UseLineInfo (GetCurLineInfo ()); } - /* Read the next token from the file */ - GetNextInputToken (); + PrevTok.Tok = TOK_INVALID; + while (1) { + /* Read the next token from the file */ + GetNextInputToken (); - /* Consume all pragmas at hand, including those nested in a _Pragma() */ - if (CurTok.Tok == TOK_PRAGMA) { - /* Repeated and/or nested _Pragma()'s will be handled recursively */ - ConsumePragma (); + /* Consume all pragmas at hand, including those nested in a _Pragma() */ + if (CurTok.Tok == TOK_PRAGMA) { + /* Repeated and/or nested _Pragma()'s will be handled recursively */ + ConsumePragma (); + } + + /* Check for string concatenation */ + if (CurTok.Tok == TOK_SCONST || CurTok.Tok == TOK_WCSCONST) { + if (PrevTok.Tok == TOK_SCONST || PrevTok.Tok == TOK_WCSCONST) { + /* Concatenate strings */ + ConcatLiteral (PrevTok.SVal, CurTok.SVal); + + /* If at least one of the concatenated strings is a wide + ** character literal, the whole string is a wide char + ** literal, otherwise it is a normal string literal. + */ + if (CurTok.Tok == TOK_WCSCONST) { + PrevTok.Tok = TOK_WCSCONST; + PrevTok.Type = CurTok.Type; + } + } + + if (NextTok.Tok == TOK_SCONST || + NextTok.Tok == TOK_WCSCONST || + NextTok.Tok == TOK_PRAGMA) { + /* Remember current string literal token */ + if (PrevTok.Tok == TOK_INVALID) { + PrevTok = CurTok; + PrevTok.LI = UseLineInfo (PrevTok.LI); + } + + /* Keep looping */ + continue; + } + } + + break; + } + + /* Use the concatenated string literal token if there is one */ + if (PrevTok.Tok == TOK_SCONST || PrevTok.Tok == TOK_WCSCONST) { + if (CurTok.Tok != TOK_SCONST && CurTok.Tok != TOK_WCSCONST) { + /* Push back the incoming tokens */ + SavedTok = NextTok; + NextTok = CurTok; + } else { + /* The last string literal token can be just replaced */ + if (CurTok.LI) { + ReleaseLineInfo (CurTok.LI); + } + } + /* Replace the current token with the concatenated string literal */ + CurTok = PrevTok; } } From 25832ef5fcd5509a8b91accbaa8dabdefce595a6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 13 Oct 2023 16:32:06 +0800 Subject: [PATCH 2221/2710] Fixed timing of #pragma charmap. Now it is immediately applied and affects almost all characters and string literals after it. Exceptions: - String literals as the message of a static assertion or inline assembler code (only the required one, not any optional formatted arguments) in an asm() expression are not translated with either #pragma charmap or target presets. - String literals used for preprocessor directives or as the result of stringized macro arguments are never translated. --- src/cc65/asmstmt.c | 9 +++++++ src/cc65/expr.c | 2 -- src/cc65/initdata.c | 3 --- src/cc65/pragma.c | 6 +++++ src/cc65/scanner.c | 21 ++++++++++++---- src/cc65/scanner.h | 8 +++--- src/cc65/staticassert.c | 8 +++++- test/val/bug2151.c | 54 ++++++++++++++++++++++++++++++++++++++--- 8 files changed, 94 insertions(+), 17 deletions(-) diff --git a/src/cc65/asmstmt.c b/src/cc65/asmstmt.c index d182140fd..6cb6f2ef7 100644 --- a/src/cc65/asmstmt.c +++ b/src/cc65/asmstmt.c @@ -417,6 +417,9 @@ void AsmStatement (void) ** a string literal in parenthesis. */ { + /* Prevent from translating the inline code string literal in asm */ + NoCharMap = 1; + /* Skip the ASM */ NextToken (); @@ -431,9 +434,15 @@ void AsmStatement (void) /* Need left parenthesis */ if (!ConsumeLParen ()) { + NoCharMap = 0; return; } + /* We have got the inline code string untranslated, now reenable string + ** literal translation for string arguments (if any). + */ + NoCharMap = 0; + /* String literal */ if (CurTok.Tok != TOK_SCONST) { diff --git a/src/cc65/expr.c b/src/cc65/expr.c index f6b069f3f..8b0824c31 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1336,8 +1336,6 @@ static void Primary (ExprDesc* E) /* String literal */ if ((Flags & E_EVAL_UNEVAL) != E_EVAL_UNEVAL) { E->V.LVal = UseLiteral (CurTok.SVal); - /* Translate into target charset */ - TranslateLiteral (E->V.LVal); } else { E->V.LVal = CurTok.SVal; } diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c index f576c0255..5702d57c1 100644 --- a/src/cc65/initdata.c +++ b/src/cc65/initdata.c @@ -245,9 +245,6 @@ static void DefineBitFieldData (StructInitData* SI) static void DefineStrData (Literal* Lit, unsigned Count) { - /* Translate into target charset */ - TranslateLiteral (Lit); - /* Output the data */ g_defbytes (GetLiteralStr (Lit), Count); } diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index 21d426a26..db306040d 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -1096,8 +1096,12 @@ void ConsumePragma (void) /* Skip the _Pragma token */ NextToken (); + /* Prevent from translating string literals in _Pragma */ + ++InPragmaParser; + /* We expect an opening paren */ if (!ConsumeLParen ()) { + --InPragmaParser; return; } @@ -1115,6 +1119,8 @@ void ConsumePragma (void) ParsePragmaString (); } + --InPragmaParser; + /* Closing paren needed */ ConsumeRParen (); } diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index e9ef34173..409e778ab 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -70,10 +70,12 @@ -static Token SavedTok; /* Saved token */ -Token CurTok; /* The current token */ -Token NextTok; /* The next token */ -int PPParserRunning; /* Is tokenizer used by the preprocessor */ +static Token SavedTok; /* Saved token */ +Token CurTok; /* The current token */ +Token NextTok; /* The next token */ +int PPParserRunning; /* Is tokenizer used by the preprocessor */ +int NoCharMap; /* Disable literal translation */ +unsigned InPragmaParser; /* Depth of pragma parser calling */ @@ -455,7 +457,7 @@ static void CharConst (void) } /* Translate into target charset */ - NextTok.IVal = SignExtendChar (TgtTranslateChar (C)); + NextTok.IVal = SignExtendChar (C); /* Character constants have type int */ NextTok.Type = type_int; @@ -798,6 +800,15 @@ static void GetNextInputToken (void) { ident token; + if (!NoCharMap && !InPragmaParser) { + /* Translate string and character literals into target charset */ + if (NextTok.Tok == TOK_SCONST || NextTok.Tok == TOK_WCSCONST) { + TranslateLiteral (NextTok.SVal); + } else if (NextTok.Tok == TOK_CCONST || NextTok.Tok == TOK_WCCONST) { + NextTok.IVal = SignExtendChar (TgtTranslateChar (NextTok.IVal)); + } + } + /* Current token is the lookahead token */ if (CurTok.LI) { ReleaseLineInfo (CurTok.LI); diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h index cff2b0347..e6b788660 100644 --- a/src/cc65/scanner.h +++ b/src/cc65/scanner.h @@ -219,9 +219,11 @@ struct Token { const Type* Type; /* Type if integer or float constant */ }; -extern Token CurTok; /* The current token */ -extern Token NextTok; /* The next token */ -extern int PPParserRunning; /* Is tokenizer used by the preprocessor */ +extern Token CurTok; /* The current token */ +extern Token NextTok; /* The next token */ +extern int PPParserRunning; /* Is tokenizer used by the preprocessor */ +extern int NoCharMap; /* Disable literal translation */ +extern unsigned InPragmaParser; /* Depth of pragma parser calling */ diff --git a/src/cc65/staticassert.c b/src/cc65/staticassert.c index 1bf8dd4c5..abb2c57ca 100644 --- a/src/cc65/staticassert.c +++ b/src/cc65/staticassert.c @@ -72,9 +72,15 @@ void ParseStaticAssert () ** support the C2X syntax with only an expression. */ if (CurTok.Tok == TOK_COMMA) { - /* Skip the comma. */ + /* Prevent from translating the message string literal */ + NoCharMap = 1; + + /* Skip the comma and get the next token */ NextToken (); + /* Reenable string literal translation */ + NoCharMap = 0; + /* String literal */ if (CurTok.Tok != TOK_SCONST) { Error ("String literal expected for static_assert message"); diff --git a/test/val/bug2151.c b/test/val/bug2151.c index 905eeac39..25f145506 100644 --- a/test/val/bug2151.c +++ b/test/val/bug2151.c @@ -1,9 +1,39 @@ /* Bug #2151 - #pragma causes errors when used within functions */ +#include <stdio.h> +#include <string.h> + +#pragma charmap(0x61, 0x61) +_Static_assert('A'== +#pragma charmap(0x61, 0x41) +'a' +#pragma charmap(0x61, 0x42) +, +#pragma charmap(0x61, 0x61) +"charmap failed"); + +char str[] = +"a" +#pragma charmap(0x61, 0x42) +"a" +#pragma charmap(0x61, 0x43) +"a" +#pragma charmap(0x61, 0x61) +; + +unsigned failures; + #pragma bss-name("BSS1") int #pragma code-name("CODE_WUT") -main _Pragma("message(\"_Pragma note\")") +main _Pragma +#pragma charmap(0x61, 0x32) +( +"message(\"_Pragma string" +/* Concatenated string literals in _Pragma is a cc65 extension */ +" unaffected by charmap\")" +) +#pragma charmap(0x61, 0x61) ( void _Pragma _Pragma ( @@ -20,9 +50,27 @@ _Pragma _Pragma ( #pragma bss-name("BSS2") static #pragma zpsym ("y") - int x; // TODO: currently in "BSS", but supposed to be in "BSS2"? + int x; // TODO: currently in "BSS", but supposed to be in "BSS2"? x = 0; - return x + y; + + if (memcmp(str, "aBC", 3)) + { + ++failures; + printf("%3s\n", str); + } + + if (x + y != 0) + { + ++failures; + printf("%d\n", x + y); + } + + if (failures != 0) + { + printf("faiures: %d\n", failures); + } + + return failures; #pragma bss-name("BSS") } From 7b0d1d9679d22235bf91c096bf061c02fc3ef1a6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 13 Oct 2023 14:54:54 +0800 Subject: [PATCH 2222/2710] Added warning on concatenated string literals in _Pragma operations. --- src/cc65/scanner.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 409e778ab..00dde9e83 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -1157,6 +1157,11 @@ void NextToken (void) /* Check for string concatenation */ if (CurTok.Tok == TOK_SCONST || CurTok.Tok == TOK_WCSCONST) { if (PrevTok.Tok == TOK_SCONST || PrevTok.Tok == TOK_WCSCONST) { + /* Warn on non-ISO behavior */ + if (InPragmaParser) { + Warning ("Concatenated string literals in _Pragma operation"); + } + /* Concatenate strings */ ConcatLiteral (PrevTok.SVal, CurTok.SVal); From 9e87e558d28ee166f8c373f31cfe691b1b2e83c8 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 9 Oct 2023 22:03:08 +0200 Subject: [PATCH 2223/2710] Fix register r/w timing --- libsrc/apple2/ser/a2.gs.s | 189 ++++++++++++++++++++++++-------------- 1 file changed, 118 insertions(+), 71 deletions(-) diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index 5d5ca5e09..18ee1c307 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -239,33 +239,34 @@ SER_FLAG_CH_B = %00000111 .code -; Read a register -; Input: X as channel -; Output result in A -.macro rra In,Reg - lda Reg - sta In,x - lda In,x -.endmacro +; Read register value to A. +; Input: X as channel +; Y as register +; Output: A +readSSCReg: + cpx #0 + bne ReadAreg + sty SCCBREG + lda SCCBREG + rts +ReadAreg: + sty SCCAREG + lda SCCAREG + rts ; Write value of A to a register. ; Input: X as channel -.macro wra Out,Reg - pha - lda Reg - sta Out,x - pla - sta Out,x -.endmacro - -; Write value passed as parameter to a register. -; Input: X as channel -.macro wrr Out,Reg,Val - lda Reg - sta Out,x - lda Val - sta Out,x -.endmacro +; Y as register +writeSCCReg: + cpx #0 + bne WriteAreg + sty SCCBREG + sta SCCBREG + rts +WriteAreg: + sty SCCAREG + sta SCCAREG + rts ;---------------------------------------------------------------------------- ; SER_INSTALL: Is called after the driver is loaded into memory. If possible, @@ -291,8 +292,13 @@ SER_CLOSE: ; Deactivate interrupts sei - wrr SCCBREG, #WR_MASTER_IRQ_RST, #MASTER_IRQ_SHUTDOWN - wrr SCCBREG, #WR_TX_RX_MODE_CTRL, #TX_RX_MODE_OFF + ldy #WR_MASTER_IRQ_RST + lda #MASTER_IRQ_SHUTDOWN + jsr writeSCCReg + + ldy #WR_TX_RX_MODE_CTRL + lda #TX_RX_MODE_OFF + jsr writeSCCReg ; Reset SerFlag to what it was lda SerFlagOrig @@ -303,14 +309,13 @@ SER_CLOSE: ; Clear external interrupts (twice) ldy #WR_INIT_CTRL lda #INIT_CTRL_CLEAR_EIRQ - - sty SCCBREG - sta SCCBREG - sty SCCBREG - sta SCCBREG + jsr writeSCCReg + jsr writeSCCReg ; Reset MIE for firmware use - wrr SCCBREG, #WR_MASTER_IRQ_RST, #MASTER_IRQ_MIE_RST + ldy #WR_MASTER_IRQ_RST + lda #MASTER_IRQ_MIE_RST + jsr writeSCCReg ldx #$00 stx Slot ; Mark port as closed @@ -346,6 +351,8 @@ SetupErrOut: rts HardwareFound: + sei ; Disable interrupts + ; Check if the handshake setting is valid ldy #SER_PARAMS::HANDSHAKE ; Handshake lda (ptr1),y @@ -370,7 +377,12 @@ SetupBufs: ldx Channel - rra SCCBREG,#$00 ; Hit rr0 once to sync up + ldy #RR_INIT_STATUS ; Hit rr0 once to sync up + jsr readSSCReg + + ldy #WR_MISC_CTRL ; Turn everything off + lda #$00 + jsr writeSCCReg ldy #SER_PARAMS::STOPBITS lda (ptr1),y ; Stop bits @@ -388,19 +400,24 @@ SetupBufs: ora #TX_RX_CLOCK_MUL - wra SCCBREG,#WR_TX_RX_CTRL + ldy #WR_TX_RX_CTRL ; Setup stop & parity bits + jsr writeSCCReg cpx #$00 bne ClockA ClockB: - wrr SCCBREG,#WR_CLOCK_CTRL,#CLOCK_CTRL_CH_B + ldy #WR_CLOCK_CTRL + lda #CLOCK_CTRL_CH_B + jsr writeSCCReg lda #INTR_PENDING_RX_EXT_B ; Store which IRQ bits we'll check sta CurChanIrqFlags bra SetBaud ClockA: - wrr SCCBREG,#WR_CLOCK_CTRL,#CLOCK_CTRL_CH_A + ldy #WR_CLOCK_CTRL + lda #CLOCK_CTRL_CH_A + jsr writeSCCReg lda #INTR_PENDING_RX_EXT_A ; Store which IRQ bits we'll check sta CurChanIrqFlags @@ -416,50 +433,58 @@ SetBaud: lda BaudLowTable,y ; Get low byte bmi InvParam ; Branch if rate not supported - wra SCCBREG,#WR_BAUDL_CTRL + phy + ldy #WR_BAUDL_CTRL + jsr writeSCCReg + ply lda BaudHighTable,y ; Get high byte - wra SCCBREG,#WR_BAUDH_CTRL + ldy #WR_BAUDH_CTRL + jsr writeSCCReg - lda #$00 - wra SCCBREG,#WR_MISC_CTRL + ldy #WR_MISC_CTRL ; Time to turn this thing on + lda #MISC_CTRL_RATE_GEN_ON + jsr writeSCCReg - ora #MISC_CTRL_RATE_GEN_ON ; Time to turn this thing on - wra SCCBREG,#WR_MISC_CTRL - - ; Final write to RX_CTRL ldy #SER_PARAMS::DATABITS lda (ptr1),y ; Data bits tay lda RxBitTable,y ; Data bits for RX - ora #RX_CTRL_ON ; Plus turn on - wra SCCBREG,#WR_RX_CTRL + ora #RX_CTRL_ON ; and turn RX on + + phy + ldy #WR_RX_CTRL + jsr writeSCCReg + ply lda TxBitTable,y ; Data bits for TX - ora #TX_CTRL_ON ; Plus turn on + ora #TX_CTRL_ON ; and turn TX on and #TX_DTR_ON sta RtsOff ; Save value for flow control ora #TX_RTS_ON - wra SCCBREG,#WR_TX_CTRL - wrr SCCBREG,#WR_IRQ_CTRL,#IRQ_CLEANUP_EIRQ + ldy #WR_TX_CTRL + jsr writeSCCReg - lda #WR_INIT_CTRL ; Clear ext status (write twice) - sta SCCBREG,x + ldy #WR_IRQ_CTRL + lda #IRQ_CLEANUP_EIRQ + jsr writeSCCReg + + ldy #WR_INIT_CTRL ; Clear ext status (write twice) lda #INIT_CTRL_CLEAR_EIRQ - sta SCCBREG,x + jsr writeSCCReg + jsr writeSCCReg - lda #WR_INIT_CTRL - sta SCCBREG,x - lda #INIT_CTRL_CLEAR_EIRQ - sta SCCBREG,x + ldy #WR_TX_RX_MODE_CTRL ; Activate RX IRQ + lda #TX_RX_MODE_RXIRQ + jsr writeSCCReg - ; Activate RX IRQ - wrr SCCBREG,#WR_TX_RX_MODE_CTRL,#TX_RX_MODE_RXIRQ - - wrr SCCBREG,#WR_MASTER_IRQ_RST,#MASTER_IRQ_SET + lda SCCBREG ; Activate master IRQ + ldy #WR_MASTER_IRQ_RST + lda #MASTER_IRQ_SET + jsr writeSCCReg lda SER_FLAG ; Get SerFlag's current value sta SerFlagOrig ; and save it @@ -502,7 +527,9 @@ SER_GET: lda RtsOff ora #TX_RTS_ON - wra SCCBREG,#WR_TX_CTRL + + ldy #WR_TX_CTRL + jsr writeSCCReg : ldy RecvHead ; Get byte from buffer lda RecvBuf,y @@ -597,8 +624,10 @@ SER_IOCTL: ; was handled, otherwise with carry clear. SER_IRQ: - ldx #$00 ; IRQ status is always in A reg - rra SCCAREG,#RR_INTR_PENDING_STATUS + ldx #$01 ; IRQ status is always in A reg + ldy #RR_INTR_PENDING_STATUS + jsr readSSCReg + and CurChanIrqFlags ; Is this ours? beq Done @@ -620,7 +649,8 @@ SER_IRQ: CheckSpecial: ; Always check IRQ special flags from Channel B (Ref page 5-24) ; X is still 0 there. - rra SCCBREG,#RR_IRQ_STATUS + ldy #RR_IRQ_STATUS + jsr readSSCReg and #IRQ_MASQ cmp #IRQ_SPECIAL @@ -628,19 +658,28 @@ CheckSpecial: ; Clear exint ldx Channel - wrr SCCBREG,#WR_INIT_CTRL,#INIT_CTRL_CLEAR_EIRQ + + ldy #WR_INIT_CTRL + lda #INIT_CTRL_CLEAR_EIRQ + jsr writeSCCReg + sec rts Flow: ldx Channel ; Assert flow control if buffer space too low + + ldy #WR_TX_CTRL lda RtsOff - wra SCCBREG,#WR_TX_CTRL + jsr writeSCCReg + sta Stopped sec ; Interrupt handled Done: rts -Special: - rra SCCBREG,#RR_SPEC_COND_STATUS +Special:ldx Channel + ldy #RR_SPEC_COND_STATUS + jsr readSSCReg + tax and #SPEC_COND_FRAMING_ERR bne BadChar @@ -648,7 +687,10 @@ Special: and #SPEC_COND_OVERRUN_ERR beq BadChar - wrr SCCBREG,#WR_INIT_CTRL,#INIT_CTRL_CLEAR_ERR + ldy #WR_INIT_CTRL + lda #INIT_CTRL_CLEAR_ERR + jsr writeSCCReg + sec rts @@ -669,14 +711,19 @@ Again: lda SendFreeCnt ; Anything to send? lda Stopped ; Check for flow stopped bne Quit ; Bail out if it is +Wait: lda SCCBREG,x ; Check that we're ready to send tay and #INIT_STATUS_READY - bne Send + beq NotReady + tya and #INIT_STATUS_RTS ; Ready to send + bne Send + +NotReady: bit tmp1 ; Keep trying if must try hard - bmi Again + bmi Wait Quit: rts Send: ldy SendHead ; Send byte From 65ce3a6792dd73da62046a056e9793e3ff2f9a41 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 10 Oct 2023 21:17:44 +0200 Subject: [PATCH 2224/2710] Don't check firmware at $C200, as we don't use it Just check that we're on a IIgs instead. --- libsrc/apple2/ser/a2.gs.s | 46 ++++++++++----------------------------- 1 file changed, 12 insertions(+), 34 deletions(-) diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index 18ee1c307..6b64252b3 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -67,7 +67,7 @@ SendBuf: .res 256 ; Send buffers: 256 bytes .data -Slot: .byte $00 ; 2 when opened +Opened: .byte $00 ; 1 when opened Channel: .byte $00 ; Channel B by default CurChanIrqFlags:.byte INTR_PENDING_RX_EXT_B @@ -138,25 +138,9 @@ ParityTable: .byte %00000000 ; SER_PAR_NONE, in WR_TX_RX_CTRL (WR4) .byte $FF ; SER_PAR_MARK .byte $FF ; SER_PAR_SPACE -IdOfsTable: .byte $00 ; First firmware instruction - .byte $05 ; Pascal 1.0 ID byte - .byte $07 ; Pascal 1.0 ID byte - .byte $0B ; Pascal 1.1 generic signature byte - .byte $0C ; Device signature byte - -IdValTable: .byte $E2 ; SEP instruction - .byte $38 ; Fixed - .byte $18 ; Fixed - .byte $01 ; Fixed - .byte $31 ; Serial or parallel I/O card type 1 - -IdTableLen = * - IdValTable - ; ------------------------------------------------------------------------ ; Addresses -ZILOG_BASE := $C200 - SCCAREG := $C039 SCCBREG := $C038 SCCADATA := $C03B @@ -286,7 +270,7 @@ WriteAreg: SER_INSTALL: SER_UNINSTALL: SER_CLOSE: - ldx Slot ; Check for open port + ldx Opened ; Check for open port beq :+ ldx Channel @@ -318,7 +302,7 @@ SER_CLOSE: jsr writeSCCReg ldx #$00 - stx Slot ; Mark port as closed + stx Opened ; Mark port as closed cli : txa @@ -329,28 +313,22 @@ SER_CLOSE: ; Must return an SER_ERR_xx code in a/x. SER_OPEN: - ; Check Pascal 1.1 Firmware Protocol ID bytes - ldx #$00 -Check: ldy IdOfsTable,x - lda IdValTable,x - cmp ZILOG_BASE,y - bne NoDevice - inx - cpx #IdTableLen - bcc Check - - beq HardwareFound + bit $C082 ; Check if this is a IIgs + lda $FE1F ; https://prodos8.com/docs/technote/misc/07/ + cmp #$60 ; Everything but the IIgs has an RTS there + bne HardwareFound ; Device (hardware) not found -NoDevice: + bit $C080 lda #SER_ERR_NO_DEVICE SetupErrOut: cli ldx #$00 ; Promote char return value - stx Slot ; Mark port closed + stx Opened ; Mark port closed rts HardwareFound: + bit $C080 sei ; Disable interrupts ; Check if the handshake setting is valid @@ -499,8 +477,8 @@ IntA: StoreFlag: sta SER_FLAG - ldy #$02 ; Mark port opened - sty Slot + ldy #$01 ; Mark port opened + sty Opened cli lda #SER_ERR_OK .assert SER_ERR_OK = 0, error From e3759a3eadf5053217566ef3d4d9256837e4b39b Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 10 Oct 2023 21:33:17 +0200 Subject: [PATCH 2225/2710] Spare cycles on IRQ path --- libsrc/apple2/ser/a2.gs.s | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index 6b64252b3..f2dff98d1 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -602,9 +602,9 @@ SER_IOCTL: ; was handled, otherwise with carry clear. SER_IRQ: - ldx #$01 ; IRQ status is always in A reg - ldy #RR_INTR_PENDING_STATUS - jsr readSSCReg + ldy #RR_INTR_PENDING_STATUS ; IRQ status is always in A reg + sty SCCAREG + lda SCCAREG and CurChanIrqFlags ; Is this ours? beq Done @@ -626,9 +626,9 @@ SER_IRQ: CheckSpecial: ; Always check IRQ special flags from Channel B (Ref page 5-24) - ; X is still 0 there. ldy #RR_IRQ_STATUS - jsr readSSCReg + sty SCCBREG + lda SCCBREG and #IRQ_MASQ cmp #IRQ_SPECIAL @@ -636,7 +636,6 @@ CheckSpecial: ; Clear exint ldx Channel - ldy #WR_INIT_CTRL lda #INIT_CTRL_CLEAR_EIRQ jsr writeSCCReg @@ -645,7 +644,6 @@ CheckSpecial: rts Flow: ldx Channel ; Assert flow control if buffer space too low - ldy #WR_TX_CTRL lda RtsOff jsr writeSCCReg From 39d60809458f59a1198222e4307e3c9008fbe12c Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 11 Oct 2023 08:47:45 +0200 Subject: [PATCH 2226/2710] Do the IIgs check as documented --- libsrc/apple2/ser/a2.gs.s | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index f2dff98d1..7c4085f3c 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -314,20 +314,19 @@ SER_CLOSE: SER_OPEN: bit $C082 ; Check if this is a IIgs - lda $FE1F ; https://prodos8.com/docs/technote/misc/07/ - cmp #$60 ; Everything but the IIgs has an RTS there - bne HardwareFound + sec + jsr $FE1F ; https://prodos8.com/docs/technote/misc/07/ + bcc IIgs - ; Device (hardware) not found bit $C080 - lda #SER_ERR_NO_DEVICE + lda #SER_ERR_NO_DEVICE ; Not a IIgs SetupErrOut: cli ldx #$00 ; Promote char return value stx Opened ; Mark port closed rts -HardwareFound: +IIgs: bit $C080 sei ; Disable interrupts From e90a8f3123a14736e5f37ea38feef487dac3931b Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 11 Oct 2023 12:54:12 +0200 Subject: [PATCH 2227/2710] Address code review comments --- libsrc/apple2/ser/a2.gs.s | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index 7c4085f3c..a47b115bf 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -305,7 +305,7 @@ SER_CLOSE: stx Opened ; Mark port as closed cli -: txa +: txa ; Promote char return value rts ;---------------------------------------------------------------------------- @@ -313,13 +313,17 @@ SER_CLOSE: ; Must return an SER_ERR_xx code in a/x. SER_OPEN: - bit $C082 ; Check if this is a IIgs + ; Check if this is a IIgs (Apple II Miscellaneous TechNote #7, + ; Apple II Family Identification) sec - jsr $FE1F ; https://prodos8.com/docs/technote/misc/07/ + bit $C082 + jsr $FE1F + bit $C080 + bcc IIgs - bit $C080 lda #SER_ERR_NO_DEVICE ; Not a IIgs + SetupErrOut: cli ldx #$00 ; Promote char return value @@ -327,8 +331,7 @@ SetupErrOut: rts IIgs: - bit $C080 - sei ; Disable interrupts + sei ; Check if the handshake setting is valid ldy #SER_PARAMS::HANDSHAKE ; Handshake From c7db08b4e3c80fc0ff647a3ab83387ff77674097 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 12 Oct 2023 08:39:35 +0200 Subject: [PATCH 2228/2710] Move hardware check to ser_install --- libsrc/apple2/ser/a2.gs.s | 46 +++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index a47b115bf..060f42735 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -270,8 +270,23 @@ WriteAreg: SER_INSTALL: SER_UNINSTALL: SER_CLOSE: + ; Check if this is a IIgs (Apple II Miscellaneous TechNote #7, + ; Apple II Family Identification) + sec + bit $C082 + jsr $FE1F + bit $C080 + + bcc IIgs + + lda #SER_ERR_NO_DEVICE ; Not a IIgs + ldx #$00 ; Promote char return value + rts + +IIgs: ldx Opened ; Check for open port beq :+ + ldx Channel ; Deactivate interrupts @@ -313,24 +328,6 @@ SER_CLOSE: ; Must return an SER_ERR_xx code in a/x. SER_OPEN: - ; Check if this is a IIgs (Apple II Miscellaneous TechNote #7, - ; Apple II Family Identification) - sec - bit $C082 - jsr $FE1F - bit $C080 - - bcc IIgs - - lda #SER_ERR_NO_DEVICE ; Not a IIgs - -SetupErrOut: - cli - ldx #$00 ; Promote char return value - stx Opened ; Mark port closed - rts - -IIgs: sei ; Check if the handshake setting is valid @@ -341,7 +338,8 @@ IIgs: InvParam: lda #SER_ERR_INIT_FAILED - jmp SetupErrOut + ldy #$00 ; Mark port closed + jmp SetupOut SetupBufs: ; Initialize buffers @@ -479,12 +477,14 @@ IntA: StoreFlag: sta SER_FLAG - ldy #$01 ; Mark port opened - sty Opened cli + + ldy #$01 ; Mark port opened lda #SER_ERR_OK - .assert SER_ERR_OK = 0, error - tax + +SetupOut: + ldx #$00 ; Promote char return value + sty Opened rts ;---------------------------------------------------------------------------- From 6e0bbb00ee3040f6aac73f15471d440d92b642f4 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 12 Oct 2023 08:53:05 +0200 Subject: [PATCH 2229/2710] Fix logic error on parameters checks --- libsrc/apple2/ser/a2.gs.s | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index 060f42735..540bc2705 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -334,14 +334,8 @@ SER_OPEN: ldy #SER_PARAMS::HANDSHAKE ; Handshake lda (ptr1),y cmp #SER_HS_HW ; This is all we support - beq SetupBufs + bne InvParam -InvParam: - lda #SER_ERR_INIT_FAILED - ldy #$00 ; Mark port closed - jmp SetupOut - -SetupBufs: ; Initialize buffers ldy #$00 sty Stopped @@ -371,10 +365,9 @@ SetupBufs: ldy #SER_PARAMS::PARITY lda (ptr1),y ; Parity bits tay - cmp #$FF - beq InvParam pla ora ParityTable,y ; Get value + bmi InvParam ora #TX_RX_CLOCK_MUL @@ -406,10 +399,17 @@ SetBaud: tay lda BaudTable,y ; Get chip value from Low/High tables + bpl BaudOK ; Verify baudrate is supported + +InvParam: + lda #SER_ERR_INIT_FAILED + ldy #$00 ; Mark port closed + bra SetupOut + +BaudOK: tay lda BaudLowTable,y ; Get low byte - bmi InvParam ; Branch if rate not supported phy ldy #WR_BAUDL_CTRL From e138403727c1e0c80550deb5e9204f136a0e92e1 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 12 Oct 2023 08:56:50 +0200 Subject: [PATCH 2230/2710] Move cli in common out path --- libsrc/apple2/ser/a2.gs.s | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index 540bc2705..7f6bc824d 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -477,14 +477,13 @@ IntA: StoreFlag: sta SER_FLAG - cli - ldy #$01 ; Mark port opened lda #SER_ERR_OK SetupOut: ldx #$00 ; Promote char return value sty Opened + cli rts ;---------------------------------------------------------------------------- From bb92144717373670bbbe11b5f0c562e3d7c008a7 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 14 Oct 2023 16:21:08 +0200 Subject: [PATCH 2231/2710] changed "inline assembler statement" to "inline assembler expression" as suggested in #2191 --- doc/cc65.sgml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index e1e9214e5..6d036c149 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -837,7 +837,7 @@ This cc65 version has some extensions to the ISO C standard. <itemize> -<item> The compiler allows to insert assembler statements into the output +<item> The compiler allows to insert assembler expressions into the output file. The syntax is <tscreen><verb> @@ -851,7 +851,7 @@ This cc65 version has some extensions to the ISO C standard. The first form is in the user namespace; and, is disabled if the <tt/-A/ switch is given. - There is a whole section covering inline assembler statements, + There is a whole section covering inline assembler expressions, <ref id="inline-asm" name="see there">. <p> @@ -1714,7 +1714,7 @@ bloated code and a slowdown. <sect>Inline assembler<label id="inline-asm"><p> -The compiler allows to insert assembler statements into the output file. The +The compiler allows to insert assembler expressions into the output file. The syntax is <tscreen><verb> @@ -1729,7 +1729,7 @@ or The first form is in the user namespace; and, is disabled by <tt><ref id="option--standard" name="--standard"></tt> if the argument is not <tt/cc65/. -The <tt/asm/ statement can be used only inside a function. Please note that +The <tt/asm/ expression can be used only inside a function. Please note that the result of an inline assembler expression is always of type <tt/void/. The contents of the string literal are preparsed by the compiler; and, inserted @@ -1741,15 +1741,15 @@ even if the ca65 assembler (which is used to translate the generated assembler code) would accept them. The built-in inline assembler is not a replacement for the full-blown macro assembler which comes with the compiler. -Note: Inline assembler statements are subject to all optimizations done by the -compiler. There currently is no way to protect an inline assembler statement +Note: Inline assembler expressions are subject to all optimizations done by the +compiler. There currently is no way to protect an inline assembler expression -- alone -- from being moved or removed completely by the optimizer. If in doubt, check the generated assembler output; or, disable optimizations (for that function). As a shortcut, you can put the <tt/volatile/ qualifier in your <tt/asm/ -statements. It will disable optimization for the functions in which those -<tt/asm volatile/ statements sit. The effect is the same as though you put +expressions. It will disable optimization for the functions in which those +<tt/asm volatile/ expressions sit. The effect is the same as though you put <tt/#pragma optimize(push, off)/ above those functions, and <tt/#pragma optimize(pop)/ below those functions. @@ -1844,7 +1844,7 @@ Arrays also can be accessed: <p> Note: Do not embed the assembler labels that are used as names of global -variables or functions into your <tt/asm/ statements. Code such as this: +variables or functions into your <tt/asm/ expressions. Code such as this: <tscreen><verb> int foo; From 6222cd91156ea037b0b654daeab814be1f900b7a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 14 Oct 2023 23:04:12 +0200 Subject: [PATCH 2232/2710] don't use a label in the bgt macro, as that may cause subtle problems. fixes #2222 --- asminc/generic.mac | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/asminc/generic.mac b/asminc/generic.mac index bc6f5924e..5e5b210f5 100644 --- a/asminc/generic.mac +++ b/asminc/generic.mac @@ -31,10 +31,8 @@ ; bgt - jump if unsigned greater .macro bgt Arg - .local L - beq L + beq *+4 bcs Arg -L: .endmacro ; ble - jump if unsigned less or equal From 8111946731a0e12462328a51b8d751f3ea58a095 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 15 Oct 2023 15:53:03 +0800 Subject: [PATCH 2233/2710] Fixed array subscript with a bit-field with patch by kugelfuhr. --- src/cc65/expr.c | 5 +++-- test/val/bug2186.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 test/val/bug2186.c diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 8b0824c31..aef0679d4 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3001,8 +3001,9 @@ static void parseadd (ExprDesc* Expr, int DoArrayRef) } if (!AddDone) { - if (ED_IsLocQuasiConst (&Expr2) && - rscale == 1 && + if (ED_IsLocQuasiConst (&Expr2) && + !IsTypeBitField (Expr2.Type) && + rscale == 1 && CheckedSizeOf (rhst) == SIZEOF_CHAR) { /* Change the order back */ RemoveCode (&Mark); diff --git a/test/val/bug2186.c b/test/val/bug2186.c new file mode 100644 index 000000000..143111d97 --- /dev/null +++ b/test/val/bug2186.c @@ -0,0 +1,39 @@ +/* Bug #2186 - Wrong array indexing when index comes from bit-field */ + +#include <stdio.h> + +unsigned failures; + +typedef struct { + char flag : 1; + char index : 7; +} weird_type; + +const char array[] = { '6', '5', '0', '2' }; + +weird_type data; + +int main(void) { + data.flag = 1; + + data.index = 0; + if (array[data.index] != array[0]) + { + ++failures; + printf("Got '%c', expected '%c'\n", array[data.index], array[0]); + } + + data.index = 1; + if (array[data.index] != array[1]) + { + ++failures; + printf("Got '%c', expected '%c'\n", array[data.index], array[1]); + } + + if (failures > 0) + { + printf("Failures: %u\n", failures); + } + + return failures; +} \ No newline at end of file From 21b6cbb66e63ff6b7c76cf04f3d1e45463d61183 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 15 Oct 2023 16:43:40 +0800 Subject: [PATCH 2234/2710] Updated documentation on string literal translation in asm() and _Static_assert(). --- doc/cc65.sgml | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 6d036c149..37e3e493d 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -837,21 +837,21 @@ This cc65 version has some extensions to the ISO C standard. <itemize> -<item> The compiler allows to insert assembler expressions into the output - file. The syntax is +<item> The compiler allows to insert inline assembler code in the form of the + <tt/asm/ expression into the output file. The syntax is <tscreen><verb> - asm [optional volatile] (<string literal>[, optional parameters]) ; + asm [optional volatile] (<string literal>[, optional parameters]) </verb></tscreen> or <tscreen><verb> - __asm__ [optional volatile] (<string literal>[, optional parameters]) ; + __asm__ [optional volatile] (<string literal>[, optional parameters]) </verb></tscreen> The first form is in the user namespace; and, is disabled if the <tt/-A/ switch is given. - There is a whole section covering inline assembler expressions, + There is a whole section covering the inline assembler, <ref id="inline-asm" name="see there">. <p> @@ -1008,6 +1008,13 @@ This cc65 version has some extensions to the ISO C standard. <tt/_Static_assert/ is also available as the macro <tt/static_assert/ in <tt/assert.h/. + Note: The string literal as the message in the <tt/_Static_assert/ + declaration is not subject to string literal translation (see + <tt/<ref id="pragma-charmap" name="#pragma charmap()">/) and will + always be in the host encoding. On the other hand, any character or + string literals present in the condition expression of the + <tt/_Static_assert/ declaration will be translated as usual. + <item> cc65 supports bit-fields of any integral type that is int-sized or smaller, and enumerated types with those types as their underlying type. (Only <tt/int/, <tt/signed int/, and <tt/unsigned int/ are @@ -1317,7 +1324,9 @@ parameter with the <tt/#pragma/. <sect1><tt>#pragma charmap (<index>, <code>)</tt><label id="pragma-charmap"><p> - Each literal string and each literal character in the source is translated + Each literal string and each literal character in the preprocessed source, + except when used in an <tt/asm/ expression as the inline assembler code or + in a <tt/_Static_assert/ declaration as the failure message, is translated by use of a translation table. That translation table is preset when the compiler is started, depending on the target system; for example, to map ISO-8859-1 characters into PETSCII if the target is a Commodore machine. @@ -1714,23 +1723,23 @@ bloated code and a slowdown. <sect>Inline assembler<label id="inline-asm"><p> -The compiler allows to insert assembler expressions into the output file. The -syntax is +The compiler allows to insert inline assembler code in the form of the <tt/asm/ +expression into the output file. The syntax is <tscreen><verb> - asm [optional volatile] (<string literal>[, optional parameters]) ; + asm [optional volatile] (<string literal>[, optional parameters]) </verb></tscreen> or <tscreen><verb> - __asm__ [optional volatile] (<string literal>[, optional parameters]) ; + __asm__ [optional volatile] (<string literal>[, optional parameters]) </verb></tscreen> <p> The first form is in the user namespace; and, is disabled by <tt><ref id="option--standard" name="--standard"></tt> if the argument is not <tt/cc65/. -The <tt/asm/ expression can be used only inside a function. Please note that -the result of an inline assembler expression is always of type <tt/void/. +The <tt/asm/ expression can be used only inside a function. The result of an +<tt/asm/ expression is always of type <tt/void/. The contents of the string literal are preparsed by the compiler; and, inserted into the generated assembly output, so that it can be processed further by @@ -1757,6 +1766,13 @@ The string literal may contain format specifiers from the following list. For each format specifier, an argument is expected which is inserted instead of the format specifier, before passing the assembly code line to the backend. +Note: The string literal as the inline assembler code itself in the <tt/asm/ +expression is not subject to string literal translation (see +<tt/<ref id="pragma-charmap" name="#pragma charmap()">/) and will always +be in the host encoding. On the other hand, all character and string literals +as the arguments for replacing the format specifiers will be translated as +usual. + <itemize> <item><tt/%b/ - Numerical 8-bit value <item><tt/%w/ - Numerical 16-bit value From 96e893795b5aa992068d82f33bbc19428c55acc3 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 9 Oct 2023 10:48:01 +0200 Subject: [PATCH 2235/2710] Better check for 6551 --- libsrc/apple2/ser/a2.ssc.s | 72 ++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 22 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 022ef2fd5..82ac6690f 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -25,6 +25,8 @@ .include "ser-kernel.inc" .include "ser-error.inc" + .importzp tmp1, tmp2 + .macpack module .macpack cpu @@ -141,35 +143,16 @@ ParityTable: ; Table used to translate RS232 parity param .byte $A0 ; SER_PAR_MARK .byte $E0 ; SER_PAR_SPACE -IdOfsTable: ; Table of bytes positions, used to check five +IdOfsTable: ; Table of bytes positions, used to check four ; specific bytes on the slot's firmware to make - ; sure this is an SSC (or Apple //c comm port) - ; firmware that drives an ACIA 6551 chip. - ; - ; The SSC firmware and the Apple //c(+) comm - ; port firmware all begin with a BIT instruction. - ; The IIgs, on the other hand, has a - ; Zilog Z8530 chip and its firmware starts with - ; a SEP instruction. We don't want to load this - ; driver on the IIgs' serial port. We'll - ; differentiate the firmware on this byte. - ; - ; The next four bytes we check are the Pascal - ; Firmware Protocol Bytes that identify a - ; serial card. Those are the same bytes for - ; SSC firmwares, Apple //c firmwares and IIgs - ; Zilog Z8530 firmwares - which is the reason - ; we have to check for the firmware's first - ; instruction too. - .byte $00 ; First instruction + ; sure this is an SSC (or Apple //c comm port). .byte $05 ; Pascal 1.0 ID byte .byte $07 ; Pascal 1.0 ID byte .byte $0B ; Pascal 1.1 generic signature byte .byte $0C ; Device signature byte -IdValTable: ; Table of expected values for the five checked +IdValTable: ; Table of expected values for the four checked ; bytes - .byte $2C ; BIT .byte $38 ; ID Byte 0 (from Pascal 1.0), fixed .byte $18 ; ID Byte 1 (from Pascal 1.0), fixed .byte $01 ; Generic signature for Pascal 1.1, fixed @@ -210,6 +193,48 @@ SER_CLOSE: stx Index ; Mark port as closed rts +;---------------------------------------------------------------------------- +; Internal function to test whether we're really talking with a 6551, +; or at least it really looks like it. +; Input: X= Index +; Output: carry set if this is very probably a 6551, clear if not + +Verify6551: + lda ACIA_STATUS,x ; Save current values in what we expect to be + pha ; the ACIA status register + lda ACIA_CMD,x ; and command register. So we can restore them + sta tmp1 ; if this isn't a 6551. + + and #$01 + bne NotAcia ; We expect command register bit 0 to be 0 + + lda tmp1 + ora #$01 ; Enable receiver/transmitter + sta ACIA_CMD,x + sta tmp2 ; Store it for comparison + + lda ACIA_CMD,x ; Is command register what we wrote? + cmp tmp2 + bne NotAcia + + sta ACIA_STATUS,x ; Reset Acia (value written is not important) + + lda ACIA_CMD,x ; Is the value back to the original value? + cmp tmp1 + bne NotAcia + + pla ; Clear stack of leftovers + clc + rts + +NotAcia: + lda tmp1 ; Restore saved bytes, they're probably needed + sta ACIA_CMD,x + pla + sta ACIA_STATUS,x + sec + rts + ;---------------------------------------------------------------------------- ; SER_OPEN: A pointer to a ser_params structure is passed in ptr1. ; Must return an SER_ERR_xx code in a/x. @@ -239,6 +264,9 @@ SER_OPEN: .endif tax + jsr Verify6551 + bcs NoDev + ; Check if the handshake setting is valid ldy #SER_PARAMS::HANDSHAKE lda (ptr1),y From 6e035c864e06560d560ecaca4aeb019e156576e7 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 12 Oct 2023 07:58:40 +0200 Subject: [PATCH 2236/2710] Apple2 SSC: on IIgs, verify slot mode If the slot is not in "Your Card" mode, there's no way it is an SSC --- libsrc/apple2/ser/a2.ssc.s | 112 ++++++++++++++----------------------- 1 file changed, 43 insertions(+), 69 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 82ac6690f..411c72dcd 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -25,8 +25,6 @@ .include "ser-kernel.inc" .include "ser-error.inc" - .importzp tmp1, tmp2 - .macpack module .macpack cpu @@ -72,6 +70,8 @@ ACIA_STATUS := ACIA+1 ; Status register ACIA_CMD := ACIA+2 ; Command register ACIA_CTRL := ACIA+3 ; Control register +SLTROMSEL := $C02D ; For Apple IIgs slot verification + ;---------------------------------------------------------------------------- ; Global variables @@ -193,54 +193,35 @@ SER_CLOSE: stx Index ; Mark port as closed rts -;---------------------------------------------------------------------------- -; Internal function to test whether we're really talking with a 6551, -; or at least it really looks like it. -; Input: X= Index -; Output: carry set if this is very probably a 6551, clear if not - -Verify6551: - lda ACIA_STATUS,x ; Save current values in what we expect to be - pha ; the ACIA status register - lda ACIA_CMD,x ; and command register. So we can restore them - sta tmp1 ; if this isn't a 6551. - - and #$01 - bne NotAcia ; We expect command register bit 0 to be 0 - - lda tmp1 - ora #$01 ; Enable receiver/transmitter - sta ACIA_CMD,x - sta tmp2 ; Store it for comparison - - lda ACIA_CMD,x ; Is command register what we wrote? - cmp tmp2 - bne NotAcia - - sta ACIA_STATUS,x ; Reset Acia (value written is not important) - - lda ACIA_CMD,x ; Is the value back to the original value? - cmp tmp1 - bne NotAcia - - pla ; Clear stack of leftovers - clc - rts - -NotAcia: - lda tmp1 ; Restore saved bytes, they're probably needed - sta ACIA_CMD,x - pla - sta ACIA_STATUS,x - sec - rts - ;---------------------------------------------------------------------------- ; SER_OPEN: A pointer to a ser_params structure is passed in ptr1. ; Must return an SER_ERR_xx code in a/x. +; Note: Hardware checks are done in SER_OPEN instead of SER_INSTALL, +; because they depend on the selected slot, and we can't select the slot +; before SER_INSTALL. SER_OPEN: - ldx #<$C000 + ; Check if this is a IIgs (Apple II Miscellaneous TechNote #7, + ; Apple II Family Identification) + sec + bit $C082 + jsr $FE1F + bit $C080 + + bcs NotIIgs + + ; We're on a IIgs. For every slot N, either bit N of $C02D is + ; 0 for the internal ROM, or 1 for "Your Card". Let's make sure + ; that slot N's bit is set to 1, otherwise, that can't be an SSC. + + ldy Slot + lda SLTROMSEL +: lsr + dey + bpl :- ; Shift until slot's bit ends in carry + bcc NoDev + +NotIIgs:ldx #<$C000 stx ptr2 lda #>$C000 ora Slot @@ -249,8 +230,12 @@ SER_OPEN: : ldy IdOfsTable,x ; Check Pascal 1.1 Firmware Protocol ID bytes lda IdValTable,x cmp (ptr2),y - bne NoDev - inx + beq ByteOK + +NoDev: lda #SER_ERR_NO_DEVICE + bne Out + +ByteOK: inx cpx #IdTableLen bcc :- @@ -264,15 +249,16 @@ SER_OPEN: .endif tax - jsr Verify6551 - bcs NoDev - ; Check if the handshake setting is valid ldy #SER_PARAMS::HANDSHAKE lda (ptr1),y cmp #SER_HS_HW ; This is all we support - bne InvParm + beq HandshakeOK + lda #SER_ERR_INIT_FAILED + bne Out + +HandshakeOK: ldy #$00 ; Initialize buffers sty Stopped sty RecvHead @@ -289,9 +275,12 @@ SER_OPEN: lda (ptr1),y ; Baudrate index tay lda BaudTable,y ; Get 6551 value - bmi InvBaud ; Branch if rate not supported - sta tmp1 + bpl BaudOK ; Check that baudrate is supported + lda #SER_ERR_BAUD_UNAVAIL + bne Out + +BaudOK: sta tmp1 ldy #SER_PARAMS::DATABITS lda (ptr1),y ; Databits index tay @@ -322,22 +311,7 @@ SER_OPEN: ; Done stx Index ; Mark port as open lda #SER_ERR_OK - .assert SER_ERR_OK = 0, error - tax - rts - - ; Device (hardware) not found -NoDev: lda #SER_ERR_NO_DEVICE - ldx #$00 ; Promote char return value - rts - - ; Invalid parameter -InvParm:lda #SER_ERR_INIT_FAILED - ldx #$00 ; Promote char return value - rts - - ; Baud rate not available -InvBaud:lda #SER_ERR_BAUD_UNAVAIL +Out: ldx #$00 ; Promote char return value rts From 3107f34ec9e9aba16c94be986d9a971166f9dd1b Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sat, 14 Oct 2023 21:51:31 +0200 Subject: [PATCH 2237/2710] Put back 6551 test as a last verification --- libsrc/apple2/ser/a2.ssc.s | 51 +++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 411c72dcd..c7890c591 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -145,7 +145,7 @@ ParityTable: ; Table used to translate RS232 parity param IdOfsTable: ; Table of bytes positions, used to check four ; specific bytes on the slot's firmware to make - ; sure this is an SSC (or Apple //c comm port). + ; sure this is a serial card. .byte $05 ; Pascal 1.0 ID byte .byte $07 ; Pascal 1.0 ID byte .byte $0B ; Pascal 1.1 generic signature byte @@ -230,12 +230,8 @@ NotIIgs:ldx #<$C000 : ldy IdOfsTable,x ; Check Pascal 1.1 Firmware Protocol ID bytes lda IdValTable,x cmp (ptr2),y - beq ByteOK - -NoDev: lda #SER_ERR_NO_DEVICE - bne Out - -ByteOK: inx + bne NoDev + inx cpx #IdTableLen bcc :- @@ -249,8 +245,45 @@ ByteOK: inx .endif tax + ; Check that this works like an ACIA 6551 is expected to work + + lda ACIA_STATUS,x ; Save current values in what we expect to be + sta tmp1 ; the ACIA status register + lda ACIA_CMD,x ; and command register. So we can restore them + sta tmp2 ; if this isn't a 6551. + + and #%11111110 + sta ACIA_CMD,x ; Disable receiver/transmitter + + lda ACIA_CMD,x ; Reload register + and #%00000001 + bne NotAcia ; We expect command register bit 0 to be 0 + + lda tmp2 + ora #%00000001 ; Enable receiver/transmitter + sta ACIA_CMD,x + sta tmp3 ; Store it for comparison + + lda ACIA_CMD,x ; Is command register what we wrote? + cmp tmp3 + bne NotAcia + + sta ACIA_STATUS,x ; Reset Acia (value written is not important) + + lda ACIA_CMD,x ; Is the Acia disabled now? + and #%00000001 + beq AciaOK + +NotAcia:lda tmp2 ; Restore original values + sta ACIA_CMD,x + lda tmp1 + sta ACIA_STATUS,x + +NoDev: lda #SER_ERR_NO_DEVICE + bne Out + ; Check if the handshake setting is valid - ldy #SER_PARAMS::HANDSHAKE +AciaOK: ldy #SER_PARAMS::HANDSHAKE lda (ptr1),y cmp #SER_HS_HW ; This is all we support beq HandshakeOK @@ -481,4 +514,4 @@ Send: ldy SendHead ; Get first byte to send sta ACIA_DATA,x ; Send it inc SendHead inc SendFreeCnt - jmp NextByte ; And try next one + bne NextByte ; And try next one From 882f6fd10342529e7f6407fe8bdbe77a9663dbaf Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 15 Oct 2023 15:26:58 +0200 Subject: [PATCH 2238/2710] Fix ACIA check so we don't enable RX/TX with IRQs on --- libsrc/apple2/ser/a2.ssc.s | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index c7890c591..762050a66 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -252,32 +252,23 @@ NotIIgs:ldx #<$C000 lda ACIA_CMD,x ; and command register. So we can restore them sta tmp2 ; if this isn't a 6551. - and #%11111110 - sta ACIA_CMD,x ; Disable receiver/transmitter - - lda ACIA_CMD,x ; Reload register - and #%00000001 - bne NotAcia ; We expect command register bit 0 to be 0 - - lda tmp2 - ora #%00000001 ; Enable receiver/transmitter + ldy #%00000010 ; Disable TX/RX, disable IRQ +: tya sta ACIA_CMD,x - sta tmp3 ; Store it for comparison - - lda ACIA_CMD,x ; Is command register what we wrote? - cmp tmp3 + cmp ACIA_CMD,x ; Verify what we stored is there bne NotAcia + iny ; Enable TX/RX, disable IRQ + cpy #%00000100 + bne :- + sta ACIA_STATUS,x ; Reset ACIA + lda ACIA_CMD,x ; Check that RX/TX is disabled + lsr + bcc AciaOK - sta ACIA_STATUS,x ; Reset Acia (value written is not important) - - lda ACIA_CMD,x ; Is the Acia disabled now? - and #%00000001 - beq AciaOK - -NotAcia:lda tmp2 ; Restore original values - sta ACIA_CMD,x - lda tmp1 - sta ACIA_STATUS,x +NotAcia:lda tmp2 ; Restore original values + sta ACIA_CMD,x + lda tmp1 + sta ACIA_STATUS,x NoDev: lda #SER_ERR_NO_DEVICE bne Out From 3c864fc7d8fc91a11acc8818fcb60b485b0001f4 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 15 Oct 2023 17:00:15 +0200 Subject: [PATCH 2239/2710] Minimal style adjustment --- libsrc/apple2/ser/a2.ssc.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 762050a66..f48e948ed 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -265,7 +265,7 @@ NotIIgs:ldx #<$C000 lsr bcc AciaOK -NotAcia:lda tmp2 ; Restore original values +NotAcia:lda tmp2 ; Restore original values sta ACIA_CMD,x lda tmp1 sta ACIA_STATUS,x From 178573a12863d7d50149f01892193eada528b206 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 17 Oct 2023 17:57:19 +0800 Subject: [PATCH 2240/2710] Fixed inlined strlen when it takes a string literal with extra characters after the first '\0'. Added testcases. --- src/cc65/stdfunc.c | 8 +- test/val/bug2207.c | 569 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 575 insertions(+), 2 deletions(-) create mode 100644 test/val/bug2207.c diff --git a/src/cc65/stdfunc.c b/src/cc65/stdfunc.c index 246bce192..6d74dd386 100644 --- a/src/cc65/stdfunc.c +++ b/src/cc65/stdfunc.c @@ -833,7 +833,7 @@ static void StdFunc_strcmp (FuncDesc* F attribute ((unused)), ExprDesc* Expr) */ if (ED_IsLocLiteral (&Arg2.Expr) && IS_Get (&WritableStrings) == 0 && - GetLiteralSize (Arg2.Expr.V.LVal) == 1 && + GetLiteralSize (Arg2.Expr.V.LVal) >= 1 && GetLiteralStr (Arg2.Expr.V.LVal)[0] == '\0') { /* Drop the generated code so we have the first argument in the @@ -1226,9 +1226,13 @@ static void StdFunc_strlen (FuncDesc* F attribute ((unused)), ExprDesc* Expr) ** at runtime. */ if (ED_IsLocLiteral (&Arg) && IS_Get (&WritableStrings) == 0) { + /* Get the length of the C string within the string literal. + ** Note: Keep in mind that the literal could contain '\0' in it. + */ + size_t Len = strnlen (GetLiteralStr (Arg.V.LVal), GetLiteralSize (Arg.V.LVal) - 1); /* Constant string literal */ - ED_MakeConstAbs (Expr, GetLiteralSize (Arg.V.LVal) - 1, type_size_t); + ED_MakeConstAbs (Expr, Len, type_size_t); /* We don't need the literal any longer */ ReleaseLiteral (Arg.V.LVal); diff --git a/test/val/bug2207.c b/test/val/bug2207.c new file mode 100644 index 000000000..df4887fe3 --- /dev/null +++ b/test/val/bug2207.c @@ -0,0 +1,569 @@ +#include <assert.h> +#include <stdio.h> +#include <stdint.h> +#include <string.h> + + + +/********* Macros *********/ + +#define DEBUG_DETAIL 0 + +/* TODO: enable these when they can be compiled */ +#define SKIP_VOID_RETURN_VALUE_TESTS 1 +#define SKIP_INLINED_ARG_SIDE_EFFECT_TESTS 1 + +#define CHECK(C) \ + if (!(C)) { \ + ++failures; \ + print_header(); \ + printf(" failed: expected %s\n", #C); \ + } + +#define CHECK_RANGE(L, R, D, N) \ + index = my_memcmp(L, R, D, N); \ + if (index >= 0) { \ + ++failures; \ + print_header(); \ + printf(" failed: %s vs %s dismatch at [%d]\n", #L, #R, index); \ + } + +#define MEM_SIZE 512 +#define STACK_SIZE 160 +#define ZP_SIZE 8 +#define MAGIC_SIZE 129 + +#define BROKEN_STR "hello\0!" +#define BROKEN_STR_SIZE 6 +#define BROKEN_STR_LEN 5 + + + +/********* Data *********/ + +unsigned failures; +int need_header = 1; +const char* test_header; + +static int x; +static int y; +static int z; +static int index; + +static char mem_dst[MEM_SIZE]; +static char mem_src[MEM_SIZE]; +static char mem_ori[MEM_SIZE]; + +#pragma data-name(push, "ZEROPAGE", "zp") +#pragma bss-name(push, "ZEROPAGE", "zp") +static char zp_src[ZP_SIZE]; +static char zp_dst[ZP_SIZE]; +static char zp_ori[ZP_SIZE]; +static char* p_zp_src; +static char* p_zp_dst; +static char* p_zp_ori; +#pragma bss-name(pop) +#pragma data-name(pop) + + + +/********* Helpers *********/ + +void my_memfill(void *dst, int init, size_t size) +{ + unsigned i; + + for (i = 0; i < size; ++i) + { + ((char*)dst)[i] = init; + init += 3; + } +} + +void my_memset(void *dst, int val, size_t size) +{ + unsigned i; + + for (i = 0; i < size; ++i) + { + ((unsigned char *)dst)[i] = val; + } +} + +void my_memcpy(void *dst, const void *src, size_t size) +{ + unsigned i; + + for (i = 0; i < size; ++i) + { + ((char*)dst)[i] = ((char*)src)[i]; + } +} + +int my_memcmp(const void *dst, const void *src, int diff, size_t size) +{ + unsigned i; + + diff %= 256; + for (i = 0; i < size; ++i) + { + if ((unsigned char)(((unsigned char*)dst)[i] - ((unsigned char*)src)[i]) != diff) + { +#if DEBUG_DETAIL + /* DEBUG */ + printf("%d vs %d\n", (unsigned char)(((unsigned char*)dst)[i] - ((unsigned char*)src)[i]), diff); +#endif + return i; + } + } + + return -1; +} + +void* mul_two(void* p, int* px) +{ + *px *= 2; + return p; +} + +void* add_one(void* p, int* px) +{ + *px += 1; + return p; +} + +void* negate(void* p, int* px) +{ + *px = -*px; + return p; +} + +void set_header(const char* name) +{ + if (need_header == 0) + { + printf("\n"); + } + test_header = name; + need_header = 1; +} + +void print_header(void) +{ + if (need_header) + { + need_header = 0; + printf("%s test\n", test_header); + } +} + + + +/********* Tests *********/ + +/* memcpy */ +void test_memcpy(void) +{ + const char *name = 0; + unsigned size = 0; + void *p; + + /* init */ + my_memfill(mem_ori, 1000, sizeof mem_ori); + my_memfill(zp_ori, 1000, sizeof zp_ori); + p_zp_src = zp_src; + p_zp_dst = zp_dst; + p_zp_ori = zp_ori; + +#if !SKIP_INLINED_ARG_SIDE_EFFECT_TESTS + /* arg3 == 0 */ + set_header("p = memcpy(arg1, arg2, 0)"); + size = MEM_SIZE; + my_memfill(mem_dst, 3000, size); + my_memfill(mem_src, 2000, size); + x = 42; + y = -42; + z = 36; + p = memcpy(mul_two(mem_dst, &x), add_one(mem_src, &y), (negate(0, &z), 0)); + CHECK(p == mem_dst); + CHECK(x == 84); + CHECK(y == -41); + CHECK(z == -36); + CHECK_RANGE(mem_dst, mem_ori, 2000, size); + CHECK_RANGE(mem_src, mem_ori, 1000, size); +#endif + +#if !SKIP_INLINED_ARG_SIDE_EFFECT_TESTS + /* Check if the arguments are still generated if the return value is unused. + ** We have this question since the first argument could be directly used as + ** the return value when this function gets inlined. + */ +#if !SKIP_VOID_RETURN_VALUE_TESTS + set_header("(void)memcpy(arg1, arg2, 0)"); +#else + set_header("memcpy(arg1, arg2, 0)"); +#endif + size = MEM_SIZE; + my_memfill(mem_dst, 3000, size); + my_memfill(mem_src, 2000, size); + x = 42; + y = -42; + z = 36; +#if !SKIP_VOID_RETURN_VALUE_TESTS + (void) +#endif + memcpy(mul_two(mem_dst, &x), add_one(mem_src, &y), (negate(0, &z), 0)); + CHECK(x == 84); + CHECK(y == -41); + CHECK(z == -36); + CHECK_RANGE(mem_dst, mem_ori, 2000, size); + CHECK_RANGE(mem_src, mem_ori, 1000, size); +#endif + + /* The memcpy inliner will give up with further optimizations if any of + ** the arguments have side effects. + */ + + /* arg1: const addr, arg2: const addr, arg3 <= 129 */ + set_header("memcpy(const_addr_1, const_addr_2, 129) w/ side-effects"); + size = MEM_SIZE; + my_memfill(mem_dst, 3000, size); + my_memfill(mem_src, 2000, size); + x = 42; + y = -42; + z = 36; + /* memcpy size here must be an integer constant to allow the optimization */ + p = memcpy(mul_two(mem_dst, &x), add_one(mem_src, &y), (negate(0, &z), MAGIC_SIZE)); + size = MAGIC_SIZE; + CHECK(p == mem_dst); + CHECK(x == 84); + CHECK(y == -41); + CHECK(z == -36); + CHECK_RANGE(mem_dst, mem_ori, 1000, size); + CHECK_RANGE(mem_dst + size, mem_ori + size, 2000, MEM_SIZE - size); + + /* arg1: (void*)ptr, arg2: const_addr_2 */ + set_header("memcpy((void*)ptr, const_addr_2, 129)"); + { + void *ptr = mem_dst; + size = MEM_SIZE; + my_memfill(mem_dst, 3000, size); + my_memfill(mem_src, 2000, size); + /* memcpy size here must be an integer constant to allow the optimization */ + p = memcpy((void*)ptr, mem_src, MAGIC_SIZE); + size = MAGIC_SIZE; + CHECK(p == mem_dst); + CHECK_RANGE(mem_dst, mem_ori, 1000, size); + CHECK_RANGE(mem_dst + size, mem_ori + size, 2000, MEM_SIZE - size); + } + + /* arg1: const addr, arg2: const addr, arg3 <= 129 */ + set_header("memcpy(const_addr_1, const_addr_2, 129)"); + size = MEM_SIZE; + my_memfill(mem_dst, 3000, size); + my_memfill(mem_src, 2000, size); + /* memcpy size here must be an integer constant to allow the optimization */ + p = memcpy(mem_dst, mem_src, MAGIC_SIZE); + size = MAGIC_SIZE; + CHECK(p == mem_dst); + CHECK_RANGE(mem_dst, mem_ori, 1000, size); + CHECK_RANGE(mem_dst + size, mem_ori + size, 2000, MEM_SIZE - size); + + /* arg1: const addr, arg2: const addr, arg3 <= 256 */ + set_header("memcpy(const_addr_1, const_addr_2, 256)"); + size = MEM_SIZE; + my_memfill(mem_dst, 3000, size); + my_memfill(mem_src, 2000, size); + /* memcpy size here must be an integer constant to allow the optimization */ + p = memcpy(mem_dst, mem_src, 256); + size = 256; + CHECK(p == mem_dst); + CHECK_RANGE(mem_dst, mem_ori, 1000, size); + CHECK_RANGE(mem_dst + size, mem_ori + size, 2000, size - size); + + /* arg1: ptr on zp, arg2: ptr on zp, arg3 <= 256 */ + set_header("memcpy(p_on_zp_1, p_on_zp_2, 4)"); + /* We cannot allocate 256 bytes on the zeropage, unfortunately */ + my_memfill(zp_dst, 3000, ZP_SIZE); + my_memfill(zp_src, 2000, ZP_SIZE); + /* memcpy size here must be an integer constant to allow the optimization */ + p = memcpy(p_zp_dst, p_zp_src, ZP_SIZE / 2); + size = ZP_SIZE / 2; + CHECK(p == zp_dst); + CHECK_RANGE(zp_dst, zp_ori, 1000, size); + CHECK_RANGE(zp_dst + size, zp_ori + size, 2000, ZP_SIZE - size); + + /* arg1: on stack, arg2: const addr, arg3 <= 129 */ + set_header("memcpy(on_stack_1, const_addr_2, 129)"); + { + char sp_dst[STACK_SIZE]; + my_memfill(sp_dst, 3000, STACK_SIZE); + my_memfill(mem_src, 2000, STACK_SIZE); + /* memcpy size here must be an integer constant to allow the optimization */ + p = memcpy(sp_dst, mem_src, MAGIC_SIZE); + size = MAGIC_SIZE; + CHECK(p == sp_dst); + CHECK_RANGE(sp_dst, mem_ori, 1000, size); + CHECK_RANGE(sp_dst + size, mem_ori + size, 2000, STACK_SIZE - size); + } + + /* arg1: on stack, arg2: const addr, arg3 <= 256 */ + set_header("memcpy(on_stack_1, const_addr_2, 144)"); + { + char sp_dst[STACK_SIZE]; + /* We cannot allocate 256 bytes on the stack, unfortunately */ + my_memfill(sp_dst, 3000, STACK_SIZE); + my_memfill(mem_src, 2000, STACK_SIZE); + /* memcpy size here must be an integer constant to allow the optimization */ + p = memcpy(sp_dst, mem_src, 144); + size = 144; + CHECK(p == sp_dst); + CHECK_RANGE(sp_dst, mem_ori, 1000, size); + CHECK_RANGE(sp_dst + size, mem_ori + size, 2000, STACK_SIZE - size); + } + + /* arg1: const addr, arg2: on stack, arg3 <= 129 */ + set_header("memcpy(const_addr_1, on_stack_2, 129)"); + { + char sp_src[STACK_SIZE]; + /* We cannot allocate 256 bytes on the stack, unfortunately */ + my_memfill(mem_dst, 3000, STACK_SIZE); + my_memfill(sp_src, 2000, STACK_SIZE); + /* memcpy size here must be an integer constant to allow the optimization */ + p = memcpy(mem_dst, sp_src, 129); + size = 129; + CHECK(p == mem_dst); + CHECK_RANGE(mem_dst, mem_ori, 1000, size); + CHECK_RANGE(mem_dst + size, mem_ori + size, 2000, STACK_SIZE - size); + } + + /* arg1: const addr, arg2: on stack, arg3 <= 256 */ + set_header("memcpy(const_addr_1, on_stack_2, 144)"); + { + char sp_src[STACK_SIZE]; + /* We cannot allocate 256 bytes on the stack, unfortunately */ + my_memfill(mem_dst, 3000, STACK_SIZE); + my_memfill(sp_src, 2000, STACK_SIZE); + /* memcpy size here must be an integer constant to allow the optimization */ + p = memcpy(mem_dst, sp_src, 144); + size = 144; + CHECK(p == mem_dst); + CHECK_RANGE(mem_dst, mem_ori, 1000, size); + CHECK_RANGE(mem_dst + size, mem_ori + size, 2000, STACK_SIZE - size); + } +} + +/* memset */ +void test_memset(void) +{ + const char *name = 0; + unsigned size = 0; + void *p; + + /* init */ + my_memfill(mem_ori, 1000, sizeof mem_ori); + my_memfill(zp_ori, 1000, sizeof zp_ori); + p_zp_dst = zp_dst; + p_zp_ori = zp_ori; + +#if !SKIP_INLINED_ARG_SIDE_EFFECT_TESTS + /* arg3 == 0 */ + set_header("p = memset(arg1, arg2, 0)"); + size = MEM_SIZE; + my_memfill(mem_dst, 3000, size); + x = 42; + y = -42; + z = 36; + p = memset(mul_two(mem_dst, &x), (add_one(0, &y), 42), (negate(0, &z), 0)); + CHECK(p == mem_dst); + CHECK(x == 84); + CHECK(y == -41); + CHECK(z == -36); + CHECK_RANGE(mem_dst, mem_ori, 2000, size); +#endif + +#if !SKIP_INLINED_ARG_SIDE_EFFECT_TESTS + /* Check if the arguments are still generated if the return value is unused. + ** We have this question since the first argument could be directly used as + ** the return value when this function gets inlined. + */ +#if !SKIP_VOID_RETURN_VALUE_TESTS + set_header("(void)memset(arg1, arg2, 0)"); +#else + set_header("memset(arg1, arg2, 0)"); +#endif + size = MEM_SIZE; + my_memfill(mem_dst, 3000, size); + x = 42; + y = -42; + z = 36; +#if !SKIP_VOID_RETURN_VALUE_TESTS + (void) +#endif + memset(mul_two(mem_dst, &x), (add_one(0, &y), 42), (negate(0, &z), 0)); + CHECK(x == 84); + CHECK(y == -41); + CHECK(z == -36); + CHECK_RANGE(mem_dst, mem_ori, 2000, size); +#endif +} + +/* strcmp */ +void test_strcmp(void) +{ + const char *name = 0; + unsigned size = 0; + int res = 0; + + /* init */ + p_zp_dst = zp_dst; + + /* Compared to zero-length C string literal */ + set_header("strcmp(arg1, \"\\0Z\")"); + { + char str[] = "AA"; + size = sizeof str; + my_memcpy(zp_dst, str, size); + x = 42; + y = -42; + + res = strcmp(zp_dst, "\0Z"); + CHECK(res > 0); + +#if !SKIP_INLINED_ARG_SIDE_EFFECT_TESTS + res = strcmp(mul_two(p_zp_dst, &x), (add_one(0, &y), "\0Z")); + CHECK(res > 0); + CHECK(x == 84); + CHECK(y == -41); +#endif + } +} + +/* strcpy */ +void test_strcpy(void) +{ + const char *name = 0; + unsigned size = 0; + void *p; + char stack_dst[ZP_SIZE]; + char stack_src[ZP_SIZE]; + + /* init */ + { + char str[] = BROKEN_STR; + size = BROKEN_STR_LEN + 1; + my_memfill(mem_src, 1000, ZP_SIZE); + my_memfill(stack_src, 1000, ZP_SIZE); + my_memfill(zp_src, 1000, ZP_SIZE); + my_memcpy(mem_src, str, size); + my_memcpy(stack_src, str, size); + my_memcpy(zp_src, str, size); + p_zp_src = zp_src; + p_zp_dst = zp_dst; + p_zp_dst = zp_dst; + } + + /* arg1: const addr, arg2: const addr */ + set_header("strcpy(const_addr_1, const_addr_2)"); + my_memfill(mem_dst, 2000, ZP_SIZE); + size = BROKEN_STR_LEN + 1; + p = strcpy(mem_dst, mem_src); + CHECK(p == mem_dst); + CHECK_RANGE(mem_dst, mem_src, 0, size); + CHECK_RANGE(mem_dst + size, mem_src + size, 1000, ZP_SIZE - size); + + /* arg1: ptr on zp, arg2: ptr on zp */ + set_header("strcpy(p_on_zp_1, p_on_zp_2)"); + my_memfill(zp_dst, 2000, ZP_SIZE); + size = BROKEN_STR_LEN + 1; + p = strcpy(zp_dst, zp_src); + CHECK(p == zp_dst); + CHECK_RANGE(zp_dst, zp_src, 0, size); + CHECK_RANGE(zp_dst + size, zp_src + size, 1000, ZP_SIZE - size); + + /* arg1: on stack, arg2: on stack */ + set_header("strcpy(on_stack_1, on_stack_2)"); + my_memfill(stack_dst, 2000, ZP_SIZE); + size = BROKEN_STR_LEN + 1; + p = strcpy(stack_dst, stack_src); + CHECK(p == stack_dst); + CHECK_RANGE(stack_dst, stack_src, 0, size); + CHECK_RANGE(stack_dst + size, stack_src + size, 1000, ZP_SIZE - size); + + /* TODO: args side-effects tests */ +} + +/* strlen */ +void test_strlen(void) +{ + const char *name = 0; + size_t len; + + /* init */ + { + char str[] = BROKEN_STR; + my_memcpy(mem_ori, str, ZP_SIZE); + //my_memcpy(stack_ori, str, ZP_SIZE); + my_memcpy(zp_ori, str, ZP_SIZE); + p_zp_ori = zp_ori; + } + + /* arg1: string_literal */ + set_header("strlen(\"hello\\0!\")"); + x = 42; + y = -42; + len = strlen((mul_two(0, &x), BROKEN_STR)); + (void)strlen((add_one(0, &y), BROKEN_STR)); + CHECK(len == BROKEN_STR_LEN); + CHECK(x == 84); + CHECK(y == -41); + + /* arg1: array with const addr */ + set_header("strlen(array_const_addr[8])"); + x = 42; + y = -42; + len = strlen((mul_two(0, &x), zp_ori)); + (void)strlen((add_one(0, &y), zp_ori)); + CHECK(len == BROKEN_STR_LEN); + CHECK(x == 84); + CHECK(y == -41); + + /* arg1: array on stack */ + set_header("strlen(array_on_stack[8])"); + { + char p_on_stack[] = BROKEN_STR; + x = 42; + y = -42; + len = strlen((mul_two(0, &x), p_on_stack)); + strlen((add_one(0, &y), p_on_stack)); + CHECK(sizeof p_on_stack == 8); + CHECK(len == BROKEN_STR_LEN); + CHECK(x == 84); + CHECK(y == -41); + } + + /* arg1: ptr on zp */ + set_header("strlen(ptr_on_zp)"); + x = 42; + y = -42; + len = strlen((mul_two(0, &x), p_zp_ori)); + (void)strlen((add_one(0, &y), p_zp_ori)); + CHECK(len == BROKEN_STR_LEN); + CHECK(x == 84); + CHECK(y == -41); +} + +int main(void) +{ + test_memcpy(); + test_memset(); + test_strcmp(); + test_strcpy(); + test_strlen(); + + if (failures > 0) + { + printf("failed items: %u\n", failures); + } + return failures; +} From 3e602682438c6916d6ae0e50d833d026f8201ef7 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Tue, 17 Oct 2023 20:39:15 +0200 Subject: [PATCH 2241/2710] add newline at the end --- test/val/bug2186.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/val/bug2186.c b/test/val/bug2186.c index 143111d97..24546fb3d 100644 --- a/test/val/bug2186.c +++ b/test/val/bug2186.c @@ -36,4 +36,4 @@ int main(void) { } return failures; -} \ No newline at end of file +} From c52427fc65e565d32d9adc2857b669f36211bd9f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 21 Oct 2023 23:52:14 +0800 Subject: [PATCH 2242/2710] Minor fix for error recovery from duplicated struct members. --- src/cc65/symtab.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 951ed9e5e..5efed63e8 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -793,8 +793,6 @@ static int HandleSymRedefinition (SymEntry* Sym, const Type* T, unsigned Flags) */ Error ("Redeclaration of enumerator constant '%s'", Sym->Name); Sym = 0; - } else if (Flags & SC_STRUCTFIELD) { - Error ("Duplicate member '%s'", Sym->Name); } } } @@ -998,6 +996,7 @@ SymEntry* AddBitField (const char* Name, const Type* T, unsigned Offs, { /* Do we have an entry with this name already? */ SymEntry* Entry = FindSymInTable (FieldTab, Name, HashStr (Name)); + if (Entry) { /* We have a symbol with this name already */ @@ -1044,6 +1043,7 @@ SymEntry* AddConstSym (const char* Name, const Type* T, unsigned Flags, long Val { /* Do we have an entry with this name already? */ SymEntry* Entry = FindSymInTable (SymTab, Name, HashStr (Name)); + if (Entry) { if ((Entry->Flags & SC_CONST) != SC_CONST) { Error ("Symbol '%s' is already different kind", Name); @@ -1114,6 +1114,7 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags) /* Do we have an entry with this name already? */ SymEntry* Entry = FindSymInTable (LabelTab, Name, HashStr (Name)); + if (Entry) { if (SymIsDef (Entry) && (Flags & SC_DEF) != 0) { @@ -1224,6 +1225,7 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs /* Do we have an entry with this name already? */ SymEntry* Entry = FindSymInTable (Tab, Name, HashStr (Name)); + if (Entry) { int CheckExtern = 0; if ((Flags & SC_STRUCTFIELD) == 0) { @@ -1254,6 +1256,9 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs Error ("Static declaration of '%s' follows extern declaration", Name); Entry = 0; } + } else if ((Flags & SC_STRUCTFIELD) != 0) { + Error ("Duplicate member '%s'", Entry->Name); + Entry = 0; } } From e5bbdfa995bcef1618d17c485dbb1eb081d5f59b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 21 Oct 2023 23:56:01 +0800 Subject: [PATCH 2243/2710] Separated boolean optimizers from bitwise unary operator optimizers. Renamed OptCmp6 to OptBoolCmp. --- src/cc65.vcxproj | 6 +- src/cc65/codeopt.c | 9 +- src/cc65/{coptneg.c => coptbool.c} | 453 ++++++++++++++++------------- src/cc65/{coptneg.h => coptbool.h} | 78 ++--- src/cc65/coptcmp.c | 243 ---------------- src/cc65/coptcmp.h | 20 -- src/cc65/coptunary.c | 236 +++++++++++++++ src/cc65/coptunary.h | 96 ++++++ 8 files changed, 619 insertions(+), 522 deletions(-) rename src/cc65/{coptneg.c => coptbool.c} (66%) rename src/cc65/{coptneg.h => coptbool.h} (80%) create mode 100644 src/cc65/coptunary.c create mode 100644 src/cc65/coptunary.h diff --git a/src/cc65.vcxproj b/src/cc65.vcxproj index 556c616b0..6f3f8e4e4 100644 --- a/src/cc65.vcxproj +++ b/src/cc65.vcxproj @@ -64,12 +64,12 @@ <ClInclude Include="cc65\codeseg.h" /> <ClInclude Include="cc65\compile.h" /> <ClInclude Include="cc65\coptadd.h" /> + <ClInclude Include="cc65\coptbool.h" /> <ClInclude Include="cc65\coptc02.h" /> <ClInclude Include="cc65\coptcmp.h" /> <ClInclude Include="cc65\coptind.h" /> <ClInclude Include="cc65\coptjmp.h" /> <ClInclude Include="cc65\coptmisc.h" /> - <ClInclude Include="cc65\coptneg.h" /> <ClInclude Include="cc65\coptptrload.h" /> <ClInclude Include="cc65\coptptrstore.h" /> <ClInclude Include="cc65\coptpush.h" /> @@ -79,6 +79,7 @@ <ClInclude Include="cc65\coptstore.h" /> <ClInclude Include="cc65\coptsub.h" /> <ClInclude Include="cc65\copttest.h" /> + <ClInclude Include="cc65\coptunary.h" /> <ClInclude Include="cc65\dataseg.h" /> <ClInclude Include="cc65\datatype.h" /> <ClInclude Include="cc65\declare.h" /> @@ -144,12 +145,12 @@ <ClCompile Include="cc65\codeseg.c" /> <ClCompile Include="cc65\compile.c" /> <ClCompile Include="cc65\coptadd.c" /> + <ClCompile Include="cc65\coptbool.c" /> <ClCompile Include="cc65\coptc02.c" /> <ClCompile Include="cc65\coptcmp.c" /> <ClCompile Include="cc65\coptind.c" /> <ClCompile Include="cc65\coptjmp.c" /> <ClCompile Include="cc65\coptmisc.c" /> - <ClCompile Include="cc65\coptneg.c" /> <ClCompile Include="cc65\coptptrload.c" /> <ClCompile Include="cc65\coptptrstore.c" /> <ClCompile Include="cc65\coptpush.c" /> @@ -159,6 +160,7 @@ <ClCompile Include="cc65\coptstore.c" /> <ClCompile Include="cc65\coptsub.c" /> <ClCompile Include="cc65\copttest.c" /> + <ClCompile Include="cc65\coptunary.c" /> <ClCompile Include="cc65\dataseg.c" /> <ClCompile Include="cc65\datatype.c" /> <ClCompile Include="cc65\declare.c" /> diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index 208ada134..6c2a1fddd 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -52,12 +52,12 @@ #include "codeinfo.h" #include "codeopt.h" #include "coptadd.h" +#include "coptbool.h" #include "coptc02.h" #include "coptcmp.h" #include "coptind.h" #include "coptjmp.h" #include "coptmisc.h" -#include "coptneg.h" #include "coptptrload.h" #include "coptptrstore.h" #include "coptpush.h" @@ -67,6 +67,7 @@ #include "coptstore.h" #include "coptsub.h" #include "copttest.h" +#include "coptunary.h" #include "error.h" #include "global.h" #include "output.h" @@ -115,6 +116,7 @@ static OptFunc DOptBNegAX1 = { OptBNegAX1, "OptBNegAX1", 100, 0, static OptFunc DOptBNegAX2 = { OptBNegAX2, "OptBNegAX2", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptBNegAX3 = { OptBNegAX3, "OptBNegAX3", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptBNegAX4 = { OptBNegAX4, "OptBNegAX4", 100, 0, 0, 0, 0, 0 }; +static OptFunc DOptBoolCmp = { OptBoolCmp, "OptBoolCmp", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptBoolTrans = { OptBoolTrans, "OptBoolTrans", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptBranchDist = { OptBranchDist, "OptBranchDist", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptBranchDist2 = { OptBranchDist2, "OptBranchDist2", 0, 0, 0, 0, 0, 0 }; @@ -123,7 +125,6 @@ static OptFunc DOptCmp2 = { OptCmp2, "OptCmp2", 85, 0, static OptFunc DOptCmp3 = { OptCmp3, "OptCmp3", 75, 0, 0, 0, 0, 0 }; static OptFunc DOptCmp4 = { OptCmp4, "OptCmp4", 75, 0, 0, 0, 0, 0 }; static OptFunc DOptCmp5 = { OptCmp5, "OptCmp5", 100, 0, 0, 0, 0, 0 }; -static OptFunc DOptCmp6 = { OptCmp6, "OptCmp6", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptCmp7 = { OptCmp7, "OptCmp7", 85, 0, 0, 0, 0, 0 }; static OptFunc DOptCmp8 = { OptCmp8, "OptCmp8", 50, 0, 0, 0, 0, 0 }; static OptFunc DOptCmp9 = { OptCmp9, "OptCmp9", 85, 0, 0, 0, 0, 0 }; @@ -221,6 +222,7 @@ static OptFunc* OptFuncs[] = { &DOptBNegAX2, &DOptBNegAX3, &DOptBNegAX4, + &DOptBoolCmp, &DOptBoolTrans, &DOptBranchDist, &DOptBranchDist2, @@ -229,7 +231,6 @@ static OptFunc* OptFuncs[] = { &DOptCmp3, &DOptCmp4, &DOptCmp5, - &DOptCmp6, &DOptCmp7, &DOptCmp8, &DOptCmp9, @@ -684,6 +685,7 @@ static unsigned RunOptGroup3 (CodeSeg* S) C += RunOptFunc (S, &DOptJumpCascades, 1); C += RunOptFunc (S, &DOptDeadJumps, 1); C += RunOptFunc (S, &DOptDeadCode, 1); + C += RunOptFunc (S, &DOptBoolCmp, 1); C += RunOptFunc (S, &DOptBoolTrans, 1); C += RunOptFunc (S, &DOptJumpTarget1, 1); C += RunOptFunc (S, &DOptJumpTarget2, 1); @@ -696,7 +698,6 @@ static unsigned RunOptGroup3 (CodeSeg* S) C += RunOptFunc (S, &DOptCmp3, 1); C += RunOptFunc (S, &DOptCmp4, 1); C += RunOptFunc (S, &DOptCmp5, 1); - C += RunOptFunc (S, &DOptCmp6, 1); C += RunOptFunc (S, &DOptCmp7, 1); C += RunOptFunc (S, &DOptCmp9, 1); C += RunOptFunc (S, &DOptTest1, 1); diff --git a/src/cc65/coptneg.c b/src/cc65/coptbool.c similarity index 66% rename from src/cc65/coptneg.c rename to src/cc65/coptbool.c index 27171c68d..ee88cac0d 100644 --- a/src/cc65/coptneg.c +++ b/src/cc65/coptbool.c @@ -1,8 +1,8 @@ /*****************************************************************************/ /* */ -/* coptneg.c */ +/* coptbool.c */ /* */ -/* Optimize negation sequences */ +/* Optimize boolean sequences */ /* */ /* */ /* */ @@ -36,7 +36,257 @@ /* cc65 */ #include "codeent.h" #include "codeinfo.h" -#include "coptneg.h" +#include "error.h" +#include "coptbool.h" + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* Table used to invert a condition, indexed by condition */ +static const unsigned char CmpInvertTab[] = { + CMP_NE, CMP_EQ, + CMP_LE, CMP_LT, CMP_GE, CMP_GT, + CMP_ULE, CMP_ULT, CMP_UGE, CMP_UGT +}; + + + +/*****************************************************************************/ +/* Helper functions */ +/*****************************************************************************/ + + + +static void ReplaceBranchCond (CodeSeg* S, unsigned I, cmp_t Cond) +/* Helper function for the replacement of routines that return a boolean +** followed by a conditional jump. Instead of the boolean value, the condition +** codes are evaluated directly. +** I is the index of the conditional branch, the sequence is already checked +** to be correct. +*/ +{ + CodeEntry* N; + CodeLabel* L; + + /* Get the entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Replace the conditional branch */ + switch (Cond) { + + case CMP_EQ: + CE_ReplaceOPC (E, OP65_JEQ); + break; + + case CMP_NE: + CE_ReplaceOPC (E, OP65_JNE); + break; + + case CMP_GT: + /* Replace by + ** beq @L + ** jpl Target + ** @L: ... + */ + if ((N = CS_GetNextEntry (S, I)) == 0) { + /* No such entry */ + Internal ("Invalid program flow"); + } + L = CS_GenLabel (S, N); + N = NewCodeEntry (OP65_BEQ, AM65_BRA, L->Name, L, E->LI); + CS_InsertEntry (S, N, I); + CE_ReplaceOPC (E, OP65_JPL); + break; + + case CMP_GE: + CE_ReplaceOPC (E, OP65_JPL); + break; + + case CMP_LT: + CE_ReplaceOPC (E, OP65_JMI); + break; + + case CMP_LE: + /* Replace by + ** jmi Target + ** jeq Target + */ + CE_ReplaceOPC (E, OP65_JMI); + L = E->JumpTo; + N = NewCodeEntry (OP65_JEQ, AM65_BRA, L->Name, L, E->LI); + CS_InsertEntry (S, N, I+1); + break; + + case CMP_UGT: + /* Replace by + ** beq @L + ** jcs Target + ** @L: ... + */ + if ((N = CS_GetNextEntry (S, I)) == 0) { + /* No such entry */ + Internal ("Invalid program flow"); + } + L = CS_GenLabel (S, N); + N = NewCodeEntry (OP65_BEQ, AM65_BRA, L->Name, L, E->LI); + CS_InsertEntry (S, N, I); + CE_ReplaceOPC (E, OP65_JCS); + break; + + case CMP_UGE: + CE_ReplaceOPC (E, OP65_JCS); + break; + + case CMP_ULT: + CE_ReplaceOPC (E, OP65_JCC); + break; + + case CMP_ULE: + /* Replace by + ** jcc Target + ** jeq Target + */ + CE_ReplaceOPC (E, OP65_JCC); + L = E->JumpTo; + N = NewCodeEntry (OP65_JEQ, AM65_BRA, L->Name, L, E->LI); + CS_InsertEntry (S, N, I+1); + break; + + default: + Internal ("Unknown jump condition: %d", Cond); + + } + +} + + + +/*****************************************************************************/ +/* Optimize bool comparison and transformer subroutines */ +/*****************************************************************************/ + + + +unsigned OptBoolCmp (CodeSeg* S) +/* Search for calls to compare subroutines followed by a conditional branch +** and replace them by cheaper versions, since the branch means that the +** boolean value returned by these routines is not needed (we may also check +** that explicitly, but for the current code generator it is always true). +*/ +{ + unsigned Changes = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* N; + cmp_t Cond; + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check for the sequence */ + if (E->OPC == OP65_JSR && + (Cond = FindTosCmpCond (E->Arg)) != CMP_INV && + (N = CS_GetNextEntry (S, I)) != 0 && + (N->Info & OF_ZBRA) != 0 && + !CE_HasLabel (N)) { + + /* The tos... functions will return a boolean value in a/x and + ** the Z flag says if this value is zero or not. We will call + ** a cheaper subroutine instead, one that does not return a + ** boolean value but only valid flags. Note: jeq jumps if + ** the condition is not met, jne jumps if the condition is met. + ** Invert the code if we jump on condition not met. + */ + if (GetBranchCond (N->OPC) == BC_EQ) { + /* Jumps if condition false, invert condition */ + Cond = CmpInvertTab [Cond]; + } + + /* Replace the subroutine call. */ + E = NewCodeEntry (OP65_JSR, AM65_ABS, "tosicmp", 0, E->LI); + CS_InsertEntry (S, E, I+1); + CS_DelEntry (S, I); + + /* Replace the conditional branch */ + ReplaceBranchCond (S, I+1, Cond); + + /* Remember, we had changes */ + ++Changes; + + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +unsigned OptBoolTrans (CodeSeg* S) +/* Try to remove the call to boolean transformer routines where the call is +** not really needed and change following branch condition accordingly. +*/ +{ + unsigned Changes = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* N; + cmp_t Cond; + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check for a boolean transformer */ + if (E->OPC == OP65_JSR && + (Cond = FindBoolCmpCond (E->Arg)) != CMP_INV && + (N = CS_GetNextEntry (S, I)) != 0 && + (N->Info & OF_ZBRA) != 0) { + + /* Make the boolean transformer unnecessary by changing the + ** the conditional jump to evaluate the condition flags that + ** are set after the compare directly. Note: jeq jumps if + ** the condition is not met, jne jumps if the condition is met. + ** Invert the code if we jump on condition not met. + */ + if (GetBranchCond (N->OPC) == BC_EQ) { + /* Jumps if condition false, invert condition */ + Cond = CmpInvertTab [Cond]; + } + + /* Check if we can replace the code by something better */ + ReplaceBranchCond (S, I+1, Cond); + + /* Remove the call to the bool transformer */ + CS_DelEntry (S, I); + + /* Remember, we had changes */ + ++Changes; + + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} @@ -408,200 +658,3 @@ unsigned OptBNegAX4 (CodeSeg* S) /* Return the number of changes made */ return Changes; } - - - -/*****************************************************************************/ -/* negax optimizations */ -/*****************************************************************************/ - - - -unsigned OptNegAX1 (CodeSeg* S) -/* Search for a call to negax and replace it by -** -** eor #$FF -** clc -** adc #$01 -** -** if X isn't used later. -*/ -{ - unsigned Changes = 0; - unsigned I; - - /* Walk over the entries */ - I = 0; - while (I < CS_GetEntryCount (S)) { - - /* Get next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if this is a call to negax, and if X isn't used later */ - if (CE_IsCallTo (E, "negax") && !RegXUsed (S, I+1)) { - - CodeEntry* X; - - /* Add replacement code behind */ - X = NewCodeEntry (OP65_EOR, AM65_IMM, "$FF", 0, E->LI); - CS_InsertEntry (S, X, I+1); - - X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, E->LI); - CS_InsertEntry (S, X, I+2); - - X = NewCodeEntry (OP65_ADC, AM65_IMM, "$01", 0, E->LI); - CS_InsertEntry (S, X, I+3); - - /* Delete the call to negax */ - CS_DelEntry (S, I); - - /* Skip the generated code */ - I += 2; - - /* We had changes */ - ++Changes; - } - - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} - - - -unsigned OptNegAX2 (CodeSeg* S) -/* Search for a call to negax and replace it by -** -** ldx #$FF -** eor #$FF -** clc -** adc #$01 -** bcc L1 -** inx -** L1: -** -** if X is known and zero on entry. -*/ -{ - unsigned Changes = 0; - unsigned I; - - /* Walk over the entries */ - I = 0; - while (I < CS_GetEntryCount (S)) { - - CodeEntry* P; - - /* Get next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if this is a call to negax, and if X is known and zero */ - if (E->RI->In.RegX == 0 && - CE_IsCallTo (E, "negax") && - (P = CS_GetNextEntry (S, I)) != 0) { - - CodeEntry* X; - CodeLabel* L; - - /* Add replacement code behind */ - - /* ldx #$FF */ - X = NewCodeEntry (OP65_LDX, AM65_IMM, "$FF", 0, E->LI); - CS_InsertEntry (S, X, I+1); - - /* eor #$FF */ - X = NewCodeEntry (OP65_EOR, AM65_IMM, "$FF", 0, E->LI); - CS_InsertEntry (S, X, I+2); - - /* clc */ - X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, E->LI); - CS_InsertEntry (S, X, I+3); - - /* adc #$01 */ - X = NewCodeEntry (OP65_ADC, AM65_IMM, "$01", 0, E->LI); - CS_InsertEntry (S, X, I+4); - - /* Get the label attached to the insn following the call */ - L = CS_GenLabel (S, P); - - /* bcc L */ - X = NewCodeEntry (OP65_BCC, AM65_BRA, L->Name, L, E->LI); - CS_InsertEntry (S, X, I+5); - - /* inx */ - X = NewCodeEntry (OP65_INX, AM65_IMP, 0, 0, E->LI); - CS_InsertEntry (S, X, I+6); - - /* Delete the call to negax */ - CS_DelEntry (S, I); - - /* Skip the generated code */ - I += 5; - - /* We had changes */ - ++Changes; - } - - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} - - - -/*****************************************************************************/ -/* complax optimizations */ -/*****************************************************************************/ - - - -unsigned OptComplAX1 (CodeSeg* S) -/* Search for a call to complax and replace it by -** -** eor #$FF -** -** if X isn't used later. -*/ -{ - unsigned Changes = 0; - unsigned I; - - /* Walk over the entries */ - I = 0; - while (I < CS_GetEntryCount (S)) { - - /* Get next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check if this is a call to negax, and if X isn't used later */ - if (CE_IsCallTo (E, "complax") && !RegXUsed (S, I+1)) { - - CodeEntry* X; - - /* Add replacement code behind */ - X = NewCodeEntry (OP65_EOR, AM65_IMM, "$FF", 0, E->LI); - CS_InsertEntry (S, X, I+1); - - /* Delete the call to negax */ - CS_DelEntry (S, I); - - /* We had changes */ - ++Changes; - } - - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} diff --git a/src/cc65/coptneg.h b/src/cc65/coptbool.h similarity index 80% rename from src/cc65/coptneg.h rename to src/cc65/coptbool.h index 844d8b886..195751a02 100644 --- a/src/cc65/coptneg.h +++ b/src/cc65/coptbool.h @@ -1,8 +1,8 @@ /*****************************************************************************/ /* */ -/* coptneg.h */ +/* coptbool.h */ /* */ -/* Optimize negation sequences */ +/* Optimize boolean sequences */ /* */ /* */ /* */ @@ -33,8 +33,8 @@ -#ifndef COPTNEG_H -#define COPTNEG_H +#ifndef COPTBOOL_H +#define COPTBOOL_H @@ -43,6 +43,26 @@ +/*****************************************************************************/ +/* Optimize bool comparison and transformer subroutines */ +/*****************************************************************************/ + + + +unsigned OptBoolCmp (CodeSeg* S); +/* Search for calls to compare subroutines followed by a conditional branch +** and replace them by cheaper versions, since the branch means that the +** boolean value returned by these routines is not needed (we may also check +** that explicitly, but for the current code generator it is always true). +*/ + +unsigned OptBoolTrans (CodeSeg* S); +/* Try to remove the call to boolean transformer routines where the call is +** not really needed and change following branch condition accordingly. +*/ + + + /*****************************************************************************/ /* bnega optimizations */ /*****************************************************************************/ @@ -132,54 +152,6 @@ unsigned OptBNegAX4 (CodeSeg* S); -/*****************************************************************************/ -/* negax optimizations */ -/*****************************************************************************/ - - - -unsigned OptNegAX1 (CodeSeg* S); -/* Search for a call to negax and replace it by -** -** eor #$FF -** clc -** adc #$01 -** -** if X isn't used later. -*/ - -unsigned OptNegAX2 (CodeSeg* S); -/* Search for a call to negax and replace it by -** -** ldx #$FF -** eor #$FF -** clc -** adc #$01 -** bcc L1 -** inx -** L1: -** -** if X is known and zero on entry. -*/ - - - -/*****************************************************************************/ -/* complax optimizations */ -/*****************************************************************************/ - - - -unsigned OptComplAX1 (CodeSeg* S); -/* Search for a call to complax and replace it by -** -** eor #$FF -** -** if X isn't used later. -*/ - - - -/* End of coptneg.h */ +/* End of coptbool.h */ #endif diff --git a/src/cc65/coptcmp.c b/src/cc65/coptcmp.c index 92401a858..2970b363b 100644 --- a/src/cc65/coptcmp.c +++ b/src/cc65/coptcmp.c @@ -43,131 +43,12 @@ -/*****************************************************************************/ -/* Data */ -/*****************************************************************************/ - - - -/* Table used to invert a condition, indexed by condition */ -static const unsigned char CmpInvertTab [] = { - CMP_NE, CMP_EQ, - CMP_LE, CMP_LT, CMP_GE, CMP_GT, - CMP_ULE, CMP_ULT, CMP_UGE, CMP_UGT -}; - - - /*****************************************************************************/ /* Helper functions */ /*****************************************************************************/ -static void ReplaceCmp (CodeSeg* S, unsigned I, cmp_t Cond) -/* Helper function for the replacement of routines that return a boolean -** followed by a conditional jump. Instead of the boolean value, the condition -** codes are evaluated directly. -** I is the index of the conditional branch, the sequence is already checked -** to be correct. -*/ -{ - CodeEntry* N; - CodeLabel* L; - - /* Get the entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Replace the conditional branch */ - switch (Cond) { - - case CMP_EQ: - CE_ReplaceOPC (E, OP65_JEQ); - break; - - case CMP_NE: - CE_ReplaceOPC (E, OP65_JNE); - break; - - case CMP_GT: - /* Replace by - ** beq @L - ** jpl Target - ** @L: ... - */ - if ((N = CS_GetNextEntry (S, I)) == 0) { - /* No such entry */ - Internal ("Invalid program flow"); - } - L = CS_GenLabel (S, N); - N = NewCodeEntry (OP65_BEQ, AM65_BRA, L->Name, L, E->LI); - CS_InsertEntry (S, N, I); - CE_ReplaceOPC (E, OP65_JPL); - break; - - case CMP_GE: - CE_ReplaceOPC (E, OP65_JPL); - break; - - case CMP_LT: - CE_ReplaceOPC (E, OP65_JMI); - break; - - case CMP_LE: - /* Replace by - ** jmi Target - ** jeq Target - */ - CE_ReplaceOPC (E, OP65_JMI); - L = E->JumpTo; - N = NewCodeEntry (OP65_JEQ, AM65_BRA, L->Name, L, E->LI); - CS_InsertEntry (S, N, I+1); - break; - - case CMP_UGT: - /* Replace by - ** beq @L - ** jcs Target - ** @L: ... - */ - if ((N = CS_GetNextEntry (S, I)) == 0) { - /* No such entry */ - Internal ("Invalid program flow"); - } - L = CS_GenLabel (S, N); - N = NewCodeEntry (OP65_BEQ, AM65_BRA, L->Name, L, E->LI); - CS_InsertEntry (S, N, I); - CE_ReplaceOPC (E, OP65_JCS); - break; - - case CMP_UGE: - CE_ReplaceOPC (E, OP65_JCS); - break; - - case CMP_ULT: - CE_ReplaceOPC (E, OP65_JCC); - break; - - case CMP_ULE: - /* Replace by - ** jcc Target - ** jeq Target - */ - CE_ReplaceOPC (E, OP65_JCC); - L = E->JumpTo; - N = NewCodeEntry (OP65_JEQ, AM65_BRA, L->Name, L, E->LI); - CS_InsertEntry (S, N, I+1); - break; - - default: - Internal ("Unknown jump condition: %d", Cond); - - } - -} - - - static int IsImmCmp16 (CodeEntry** L) /* Check if the instructions at L are an immediate compare of a/x: ** @@ -205,68 +86,6 @@ static int GetCmpRegVal (const CodeEntry* E) -/*****************************************************************************/ -/* Remove calls to the bool transformer subroutines */ -/*****************************************************************************/ - - - -unsigned OptBoolTrans (CodeSeg* S) -/* Try to remove the call to boolean transformer routines where the call is -** not really needed. -*/ -{ - unsigned Changes = 0; - - /* Walk over the entries */ - unsigned I = 0; - while (I < CS_GetEntryCount (S)) { - - CodeEntry* N; - cmp_t Cond; - - /* Get next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check for a boolean transformer */ - if (E->OPC == OP65_JSR && - (Cond = FindBoolCmpCond (E->Arg)) != CMP_INV && - (N = CS_GetNextEntry (S, I)) != 0 && - (N->Info & OF_ZBRA) != 0) { - - /* Make the boolean transformer unnecessary by changing the - ** the conditional jump to evaluate the condition flags that - ** are set after the compare directly. Note: jeq jumps if - ** the condition is not met, jne jumps if the condition is met. - ** Invert the code if we jump on condition not met. - */ - if (GetBranchCond (N->OPC) == BC_EQ) { - /* Jumps if condition false, invert condition */ - Cond = CmpInvertTab [Cond]; - } - - /* Check if we can replace the code by something better */ - ReplaceCmp (S, I+1, Cond); - - /* Remove the call to the bool transformer */ - CS_DelEntry (S, I); - - /* Remember, we had changes */ - ++Changes; - - } - - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} - - - /*****************************************************************************/ /* Optimizations for compares */ /*****************************************************************************/ @@ -684,68 +503,6 @@ unsigned OptCmp5 (CodeSeg* S) -unsigned OptCmp6 (CodeSeg* S) -/* Search for calls to compare subroutines followed by a conditional branch -** and replace them by cheaper versions, since the branch means that the -** boolean value returned by these routines is not needed (we may also check -** that explicitly, but for the current code generator it is always true). -*/ -{ - unsigned Changes = 0; - - /* Walk over the entries */ - unsigned I = 0; - while (I < CS_GetEntryCount (S)) { - - CodeEntry* N; - cmp_t Cond; - - /* Get next entry */ - CodeEntry* E = CS_GetEntry (S, I); - - /* Check for the sequence */ - if (E->OPC == OP65_JSR && - (Cond = FindTosCmpCond (E->Arg)) != CMP_INV && - (N = CS_GetNextEntry (S, I)) != 0 && - (N->Info & OF_ZBRA) != 0 && - !CE_HasLabel (N)) { - - /* The tos... functions will return a boolean value in a/x and - ** the Z flag says if this value is zero or not. We will call - ** a cheaper subroutine instead, one that does not return a - ** boolean value but only valid flags. Note: jeq jumps if - ** the condition is not met, jne jumps if the condition is met. - ** Invert the code if we jump on condition not met. - */ - if (GetBranchCond (N->OPC) == BC_EQ) { - /* Jumps if condition false, invert condition */ - Cond = CmpInvertTab [Cond]; - } - - /* Replace the subroutine call. */ - E = NewCodeEntry (OP65_JSR, AM65_ABS, "tosicmp", 0, E->LI); - CS_InsertEntry (S, E, I+1); - CS_DelEntry (S, I); - - /* Replace the conditional branch */ - ReplaceCmp (S, I+1, Cond); - - /* Remember, we had changes */ - ++Changes; - - } - - /* Next entry */ - ++I; - - } - - /* Return the number of changes made */ - return Changes; -} - - - unsigned OptCmp7 (CodeSeg* S) /* Search for a sequence ldx/txa/branch and remove the txa if A is not ** used later. diff --git a/src/cc65/coptcmp.h b/src/cc65/coptcmp.h index 0cdcf2d3d..dd188f7fc 100644 --- a/src/cc65/coptcmp.h +++ b/src/cc65/coptcmp.h @@ -43,19 +43,6 @@ -/*****************************************************************************/ -/* Remove calls to the bool transformer subroutines */ -/*****************************************************************************/ - - - -unsigned OptBoolTrans (CodeSeg* S); -/* Try to remove the call to boolean transformer routines where the call is -** not really needed. -*/ - - - /*****************************************************************************/ /* Optimizations for compares */ /*****************************************************************************/ @@ -136,13 +123,6 @@ unsigned OptCmp5 (CodeSeg* S); ** jne/jeq L2 */ -unsigned OptCmp6 (CodeSeg* S); -/* Search for calls to compare subroutines followed by a conditional branch -** and replace them by cheaper versions, since the branch means that the -** boolean value returned by these routines is not needed (we may also check -** that explicitly, but for the current code generator it is always true). -*/ - unsigned OptCmp7 (CodeSeg* S); /* Search for a sequence ldx/txa/branch and remove the txa if A is not ** used later. diff --git a/src/cc65/coptunary.c b/src/cc65/coptunary.c new file mode 100644 index 000000000..4d92f9d4a --- /dev/null +++ b/src/cc65/coptunary.c @@ -0,0 +1,236 @@ +/*****************************************************************************/ +/* */ +/* coptunary.c */ +/* */ +/* Optimize bitwise unary sequences */ +/* */ +/* */ +/* */ +/* (C) 2001-2012, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +/* cc65 */ +#include "codeent.h" +#include "codeinfo.h" +#include "coptbool.h" + + + +/*****************************************************************************/ +/* negax optimizations */ +/*****************************************************************************/ + + + +unsigned OptNegAX1 (CodeSeg* S) +/* Search for a call to negax and replace it by +** +** eor #$FF +** clc +** adc #$01 +** +** if X isn't used later. +*/ +{ + unsigned Changes = 0; + unsigned I; + + /* Walk over the entries */ + I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if this is a call to negax, and if X isn't used later */ + if (CE_IsCallTo (E, "negax") && !RegXUsed (S, I+1)) { + + CodeEntry* X; + + /* Add replacement code behind */ + X = NewCodeEntry (OP65_EOR, AM65_IMM, "$FF", 0, E->LI); + CS_InsertEntry (S, X, I+1); + + X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, I+2); + + X = NewCodeEntry (OP65_ADC, AM65_IMM, "$01", 0, E->LI); + CS_InsertEntry (S, X, I+3); + + /* Delete the call to negax */ + CS_DelEntry (S, I); + + /* Skip the generated code */ + I += 2; + + /* We had changes */ + ++Changes; + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +unsigned OptNegAX2 (CodeSeg* S) +/* Search for a call to negax and replace it by +** +** ldx #$FF +** eor #$FF +** clc +** adc #$01 +** bcc L1 +** inx +** L1: +** +** if X is known and zero on entry. +*/ +{ + unsigned Changes = 0; + unsigned I; + + /* Walk over the entries */ + I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* P; + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if this is a call to negax, and if X is known and zero */ + if (E->RI->In.RegX == 0 && + CE_IsCallTo (E, "negax") && + (P = CS_GetNextEntry (S, I)) != 0) { + + CodeEntry* X; + CodeLabel* L; + + /* Add replacement code behind */ + + /* ldx #$FF */ + X = NewCodeEntry (OP65_LDX, AM65_IMM, "$FF", 0, E->LI); + CS_InsertEntry (S, X, I+1); + + /* eor #$FF */ + X = NewCodeEntry (OP65_EOR, AM65_IMM, "$FF", 0, E->LI); + CS_InsertEntry (S, X, I+2); + + /* clc */ + X = NewCodeEntry (OP65_CLC, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, I+3); + + /* adc #$01 */ + X = NewCodeEntry (OP65_ADC, AM65_IMM, "$01", 0, E->LI); + CS_InsertEntry (S, X, I+4); + + /* Get the label attached to the insn following the call */ + L = CS_GenLabel (S, P); + + /* bcc L */ + X = NewCodeEntry (OP65_BCC, AM65_BRA, L->Name, L, E->LI); + CS_InsertEntry (S, X, I+5); + + /* inx */ + X = NewCodeEntry (OP65_INX, AM65_IMP, 0, 0, E->LI); + CS_InsertEntry (S, X, I+6); + + /* Delete the call to negax */ + CS_DelEntry (S, I); + + /* Skip the generated code */ + I += 5; + + /* We had changes */ + ++Changes; + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +/*****************************************************************************/ +/* complax optimizations */ +/*****************************************************************************/ + + + +unsigned OptComplAX1 (CodeSeg* S) +/* Search for a call to complax and replace it by +** +** eor #$FF +** +** if X isn't used later. +*/ +{ + unsigned Changes = 0; + unsigned I; + + /* Walk over the entries */ + I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if this is a call to negax, and if X isn't used later */ + if (CE_IsCallTo (E, "complax") && !RegXUsed (S, I+1)) { + + CodeEntry* X; + + /* Add replacement code behind */ + X = NewCodeEntry (OP65_EOR, AM65_IMM, "$FF", 0, E->LI); + CS_InsertEntry (S, X, I+1); + + /* Delete the call to negax */ + CS_DelEntry (S, I); + + /* We had changes */ + ++Changes; + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} diff --git a/src/cc65/coptunary.h b/src/cc65/coptunary.h new file mode 100644 index 000000000..a7fd6d7b4 --- /dev/null +++ b/src/cc65/coptunary.h @@ -0,0 +1,96 @@ +/*****************************************************************************/ +/* */ +/* coptunary.h */ +/* */ +/* Optimize bitwise unary sequences */ +/* */ +/* */ +/* */ +/* (C) 2001-2012, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef COPTUNARY_H +#define COPTUNARY_H + + + +/* cc65 */ +#include "codeseg.h" + + + +/*****************************************************************************/ +/* negax optimizations */ +/*****************************************************************************/ + + + +unsigned OptNegAX1 (CodeSeg* S); +/* Search for a call to negax and replace it by +** +** eor #$FF +** clc +** adc #$01 +** +** if X isn't used later. +*/ + +unsigned OptNegAX2 (CodeSeg* S); +/* Search for a call to negax and replace it by +** +** ldx #$FF +** eor #$FF +** clc +** adc #$01 +** bcc L1 +** inx +** L1: +** +** if X is known and zero on entry. +*/ + + + +/*****************************************************************************/ +/* complax optimizations */ +/*****************************************************************************/ + + + +unsigned OptComplAX1 (CodeSeg* S); +/* Search for a call to complax and replace it by +** +** eor #$FF +** +** if X isn't used later. +*/ + + + +/* End of coptunary.h */ + +#endif From 79c52e742f32d4e52d6dce9ed85a17f21bb4c102 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 21 Oct 2023 23:56:04 +0800 Subject: [PATCH 2244/2710] Added new opts OptBoolUnary1/OptBoolUnary2 to remove unnecessary cmp + bcastax/bnegax, as well as OptBoolUnary3 to "strength-reduce" certain bcastax/bnegax to boolne/booleq. --- src/cc65/codeopt.c | 14 ++- src/cc65/coptbool.c | 221 ++++++++++++++++++++++++++++++++++++++++++++ src/cc65/coptbool.h | 30 ++++++ 3 files changed, 263 insertions(+), 2 deletions(-) diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index 6c2a1fddd..ab3111a9b 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -118,6 +118,9 @@ static OptFunc DOptBNegAX3 = { OptBNegAX3, "OptBNegAX3", 100, 0, static OptFunc DOptBNegAX4 = { OptBNegAX4, "OptBNegAX4", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptBoolCmp = { OptBoolCmp, "OptBoolCmp", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptBoolTrans = { OptBoolTrans, "OptBoolTrans", 100, 0, 0, 0, 0, 0 }; +static OptFunc DOptBoolUnary1 = { OptBoolUnary1, "OptBoolUnary1", 40, 0, 0, 0, 0, 0 }; +static OptFunc DOptBoolUnary2 = { OptBoolUnary2, "OptBoolUnary2", 40, 0, 0, 0, 0, 0 }; +static OptFunc DOptBoolUnary3 = { OptBoolUnary3, "OptBoolUnary3", 40, 0, 0, 0, 0, 0 }; static OptFunc DOptBranchDist = { OptBranchDist, "OptBranchDist", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptBranchDist2 = { OptBranchDist2, "OptBranchDist2", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptCmp1 = { OptCmp1, "OptCmp1", 42, 0, 0, 0, 0, 0 }; @@ -224,6 +227,9 @@ static OptFunc* OptFuncs[] = { &DOptBNegAX4, &DOptBoolCmp, &DOptBoolTrans, + &DOptBoolUnary1, + &DOptBoolUnary2, + &DOptBoolUnary3, &DOptBranchDist, &DOptBranchDist2, &DOptCmp1, @@ -613,7 +619,6 @@ static unsigned RunOptGroup1 (CodeSeg* S) Changes += RunOptFunc (S, &DOptPtrLoad15, 1); Changes += RunOptFunc (S, &DOptPtrLoad16, 1); Changes += RunOptFunc (S, &DOptPtrLoad17, 1); - Changes += RunOptFunc (S, &DOptBNegAX1, 1); Changes += RunOptFunc (S, &DOptBNegAX2, 1); Changes += RunOptFunc (S, &DOptBNegAX3, 1); Changes += RunOptFunc (S, &DOptBNegAX4, 1); @@ -673,7 +678,12 @@ static unsigned RunOptGroup3 (CodeSeg* S) C += RunOptFunc (S, &DOptBNegA2, 1); C += RunOptFunc (S, &DOptNegAX1, 1); C += RunOptFunc (S, &DOptNegAX2, 1); - C += RunOptFunc (S, &DOptStackOps, 3); + C += RunOptFunc (S, &DOptStackOps, 3); /* Before OptBoolUnary1 */ + C += RunOptFunc (S, &DOptCmp8, 1); /* Before OptBoolUnary1 */ + C += RunOptFunc (S, &DOptBoolUnary1, 3); + C += RunOptFunc (S, &DOptBoolUnary2, 3); + C += RunOptFunc (S, &DOptBoolUnary3, 1); + C += RunOptFunc (S, &DOptBNegAX1, 1); /* After OptBoolUnary2 */ C += RunOptFunc (S, &DOptShift1, 1); C += RunOptFunc (S, &DOptShift4, 1); C += RunOptFunc (S, &DOptComplAX1, 1); diff --git a/src/cc65/coptbool.c b/src/cc65/coptbool.c index ee88cac0d..331fa77ab 100644 --- a/src/cc65/coptbool.c +++ b/src/cc65/coptbool.c @@ -290,6 +290,227 @@ unsigned OptBoolTrans (CodeSeg* S) +/*****************************************************************************/ +/* Remove calls to the boolean cast/negation subroutines */ +/*****************************************************************************/ + + + +unsigned OptBoolUnary1 (CodeSeg* S) +/* Search for and remove cmp #0/bcastax/boolne following a bcastax/bnegax. +** Or search for and remove cmp #1/bnegax/booleq following a bcastax/bnegax +** and invert the bcastax/bnegax. +*/ +{ + unsigned Changes = 0; + int Neg = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* L[2]; + + /* Get next entry */ + L[0] = CS_GetEntry (S, I); + + /* Check for the sequence. + ** We allow the first entry to have labels. + */ + if (L[0]->OPC == OP65_JSR && + (L[1] = CS_GetNextEntry (S, I)) != 0 && + !CE_HasLabel (L[1])) { + if (strcmp (L[0]->Arg, "bnegax") == 0) { + Neg = 1; + } else if (strcmp (L[0]->Arg, "bcastax") == 0) { + Neg = 0; + } else { + /* Next entry */ + ++I; + continue; + } + if ((L[1]->OPC == OP65_CMP && CE_IsKnownImm (L[1], 0x0)) || + CE_IsCallTo (L[1], "boolne") || + CE_IsCallTo (L[1], "bcastax")) { + /* Delete the entry no longer needed. */ + CS_DelEntry (S, I + 1); + + /* Remember, we had changes */ + ++Changes; + + /* We are still at this index */ + continue; + + } else if ((L[1]->OPC == OP65_CMP && CE_IsKnownImm (L[1], 0x1)) || + CE_IsCallTo (L[1], "booleq") || + CE_IsCallTo (L[1], "bnegax")) { + /* Invert the previous bool conversion */ + CE_SetArg (L[0], Neg ? "bcastax" : "bnegax"); + + /* Delete the entry no longer needed */ + CS_DelEntry (S, I + 1); + + /* Remember, we had changes */ + ++Changes; + + /* We are still at this index */ + continue; + } + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +unsigned OptBoolUnary2 (CodeSeg* S) +/* Search for and remove cmp #0/bcastax/boolne following a boolean transformer. +** Or search for and remove cmp #1/bnegax/booleq following a boolean transformer +** and invert the boolean transformer. +*/ +{ + unsigned Changes = 0; + cmp_t Cond; + char Buf[16]; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* L[2]; + + /* Get next entry */ + L[0] = CS_GetEntry (S, I); + + /* Check for the sequence. + ** We allow the first entry to have labels. + */ + if (L[0]->OPC == OP65_JSR && + (L[1] = CS_GetNextEntry (S, I)) != 0 && + !CE_HasLabel (L[1]) && + (Cond = FindBoolCmpCond (L[0]->Arg)) != CMP_INV) { + if ((L[1]->OPC == OP65_CMP && CE_IsKnownImm (L[1], 0x0)) || + CE_IsCallTo (L[1], "boolne") || + CE_IsCallTo (L[1], "bcastax")) { + /* Delete the entry no longer needed */ + CS_DelEntry (S, I + 1); + + /* Remember, we had changes */ + ++Changes; + + /* We are still at this index */ + continue; + + } else if ((L[1]->OPC == OP65_CMP && CE_IsKnownImm (L[1], 0x1)) || + CE_IsCallTo (L[1], "booleq") || + CE_IsCallTo (L[1], "bnegax")) { + /* Invert the bool conversion */ + if (GetBoolCmpSuffix (Buf, GetNegatedCond (Cond)) == 0) { + Internal ("No inverted boolean transformer for: %s", L[0]->Arg); + } + CE_SetArg (L[0], Buf); + + /* Delete the entry no longer needed */ + CS_DelEntry (S, I + 1); + + /* Remember, we had changes */ + ++Changes; + + /* We are still at this index */ + continue; + } + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +unsigned OptBoolUnary3 (CodeSeg* S) +/* If A == 0, replace bcastax/bnegax with +** +** cpx #0 +** jsr boolne/booleq +** +** Or if X == 0, replace bcastax/bnegax with +** +** cmp #0 +** jsr boolne/booleq +** +*/ +{ + unsigned Changes = 0; + opc_t Op = OP65_COUNT; + const char* Sub = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* E; + CodeEntry* X; + + /* Get next entry */ + E = CS_GetEntry (S, I); + + /* Check for the sequence */ + if (!CE_HasLabel (E)) { + /* Choose the right subroutine */ + if (CE_IsCallTo (E, "bnegax")) { + Sub = "booleq"; + } else if (CE_IsCallTo (E, "bcastax")) { + Sub = "boolne"; + } + /* Choose the right opcode */ + if (RegValIsKnown (E->RI->In.RegA) && E->RI->In.RegA == 0) { + Op = OP65_CPX; + } else if (RegValIsKnown (E->RI->In.RegX) && E->RI->In.RegX == 0) { + Op = OP65_CMP; + } + /* Replace the sequence if all requirements are met*/ + if (Op != OP65_COUNT && Sub != 0) { + /* Replace bcastax/bnegax with boolne/booleq */ + CE_SetArg (E, Sub); + + /* Insert the compare */ + X = NewCodeEntry (Op, AM65_IMM, "$00", 0, E->LI); + CS_InsertEntry (S, X, I); + + /* Remember, we had changes */ + ++Changes; + + /* Correct the index */ + ++I; + } + + /* Reset the choices */ + Op = OP65_COUNT; + Sub = 0; + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + /*****************************************************************************/ /* bnega optimizations */ /*****************************************************************************/ diff --git a/src/cc65/coptbool.h b/src/cc65/coptbool.h index 195751a02..19554482e 100644 --- a/src/cc65/coptbool.h +++ b/src/cc65/coptbool.h @@ -63,6 +63,36 @@ unsigned OptBoolTrans (CodeSeg* S); +/*****************************************************************************/ +/* Remove calls to the boolean cast/negation subroutines */ +/*****************************************************************************/ + + + +unsigned OptBoolUnary1 (CodeSeg* S); +/* Search for and remove bcastax adjacent to bnegax */ + +unsigned OptBoolUnary2 (CodeSeg* S); +/* Search for and remove bcastax/bnegax following a boolean transformer. +** Invert the boolean transformer if it is bnegax to be removed. +*/ + +unsigned OptBoolUnary3 (CodeSeg* S); +/* Replace bcastax/bnegax with +** +** cpx #0 +** jsr boolne/booleq +** +** if A == 0, or replace bcastax/bnegax with +** +** cmp #0 +** jsr boolne/booleq +** +** if X == 0. +*/ + + + /*****************************************************************************/ /* bnega optimizations */ /*****************************************************************************/ From f321bb16e56f0bfc7c0b1747162f566f46a1b220 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 21 Oct 2023 23:56:07 +0800 Subject: [PATCH 2245/2710] Fixed potential bugs with boolean branch optimizers when more than one jeq/jne follows. --- src/cc65/coptbool.c | 15 ++-- test/val/booltrans.c | 161 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 171 insertions(+), 5 deletions(-) create mode 100644 test/val/booltrans.c diff --git a/src/cc65/coptbool.c b/src/cc65/coptbool.c index 331fa77ab..663e4e85e 100644 --- a/src/cc65/coptbool.c +++ b/src/cc65/coptbool.c @@ -255,7 +255,8 @@ unsigned OptBoolTrans (CodeSeg* S) if (E->OPC == OP65_JSR && (Cond = FindBoolCmpCond (E->Arg)) != CMP_INV && (N = CS_GetNextEntry (S, I)) != 0 && - (N->Info & OF_ZBRA) != 0) { + (N->Info & OF_ZBRA) != 0 && + (GetRegInfo (S, I + 2, PSTATE_Z) & PSTATE_Z) == 0) { /* Make the boolean transformer unnecessary by changing the ** the conditional jump to evaluate the condition flags that @@ -606,7 +607,8 @@ unsigned OptBNegA2 (CodeSeg* S) CE_IsCallTo (L[0], "bnega") && !CE_HasLabel (L[0]) && (L[1]->Info & OF_ZBRA) != 0 && - !CE_HasLabel (L[1])) { + !CE_HasLabel (L[1]) && + (GetRegInfo (S, I + 3, PSTATE_Z) & PSTATE_Z) == 0) { /* Invert the branch */ CE_ReplaceOPC (L[1], GetInverseBranch (L[1]->OPC)); @@ -709,7 +711,8 @@ unsigned OptBNegAX2 (CodeSeg* S) CS_GetEntries (S, L+1, I+1, 3) && CE_IsCallTo (L[1], "ldaxysp") && CE_IsCallTo (L[2], "bnegax") && - (L[3]->Info & OF_ZBRA) != 0) { + (L[3]->Info & OF_ZBRA) != 0 && + (GetRegInfo (S, I + 4, PSTATE_Z) & PSTATE_Z) == 0) { CodeEntry* X; @@ -781,7 +784,8 @@ unsigned OptBNegAX3 (CodeSeg* S) CE_IsCallTo (L[1], "bnegax") && !CE_HasLabel (L[1]) && (L[2]->Info & OF_ZBRA) != 0 && - !CE_HasLabel (L[2])) { + !CE_HasLabel (L[2]) && + (GetRegInfo (S, I + 4, PSTATE_Z) & PSTATE_Z) == 0) { /* ldx --> ora */ CE_ReplaceOPC (L[0], OP65_ORA); @@ -840,7 +844,8 @@ unsigned OptBNegAX4 (CodeSeg* S) strncmp (L[0]->Arg,"bnega",5) == 0 && !CE_HasLabel (L[0]) && (L[1]->Info & OF_ZBRA) != 0 && - !CE_HasLabel (L[1])) { + !CE_HasLabel (L[1]) && + (GetRegInfo (S, I + 3, PSTATE_Z) & PSTATE_Z) == 0) { CodeEntry* X; diff --git a/test/val/booltrans.c b/test/val/booltrans.c new file mode 100644 index 000000000..51439d45b --- /dev/null +++ b/test/val/booltrans.c @@ -0,0 +1,161 @@ +/* Optimization bugs with multiple inverse Z branches following one boolean transformer */ + +#include <stdint.h> +#include <stdio.h> + +unsigned failures; + +int a; + +/* To reveal the bug, the second Z branch must jump over the destination of the first Z branch */ + +int test_booltrans(int8_t x) +{ + a = x; + __asm__("lda #$00"); + __asm__("cmp %v", a); + __asm__("jsr booleq"); + __asm__("jeq %g", L1); + __asm__("jne %g", L0); +L1: + return 1; +L0: + return 0; +} + +int test_bnega2(int8_t x) +{ + a = x; + __asm__("lda %v", a); + __asm__("jsr bnega"); + __asm__("jeq %g", L1); + __asm__("jne %g", L0); +L1: + return 1; +L0: + return 0; +} + +int test_bnegax2(int16_t x) +{ + int a = x; + __asm__("ldy #%o+1", a); + __asm__("jsr ldaxysp"); + __asm__("jsr bnegax"); + __asm__("jeq %g", L1); + __asm__("jne %g", L0); +L1: + return 1; +L0: + return 0; +} + +void __fastcall__ f(void) {} + +int test_bnegax3(int16_t x) +{ + a = x; + __asm__("lda %v", a); + __asm__("ldx %v+1", a); + __asm__("jsr %v", f); + __asm__("jsr bnegax"); + __asm__("jeq %g", L1); + __asm__("jne %g", L0); +L1: + return 1; +L0: + return 0; +} + +int test_bnegax4(int16_t x) +{ + a = x; + __asm__("lda %v", a); + __asm__("ldx %v+1", a); + __asm__("jsr bnegax"); + __asm__("jeq %g", L1); + __asm__("jne %g", L0); +L1: + return 1; +L0: + return 0; +} + +int main(void) +{ + a = test_booltrans(0); + if (a != 0) + { + ++failures; + printf("test_booltrans(0): %d, expected: 0\n", a); + } + + a = test_booltrans(1); + if (a != 1) + { + ++failures; + printf("test_booltrans(1): %d, expected: 1\n", a); + } + + a = test_bnega2(0); + if (a != 0) + { + ++failures; + printf("test_bnega2(0): %d, expected: 0\n", a); + } + + a = test_bnega2(1); + if (a != 1) + { + ++failures; + printf("test_bnega2(1): %d, expected: 1\n", a); + } + + a = test_bnegax2(0); + if (a != 0) + { + ++failures; + printf("test_bnegax2(0): %d, expected: 0\n", a); + } + + a = test_bnegax2(1); + if (a != 1) + { + ++failures; + printf("test_bnegax2(1): %d, expected: 1\n", a); + } + + a = test_bnegax3(0); + if (a != 0) + { + ++failures; + printf("test_bnegax3(0): %d, expected: 0\n", a); + } + + a = test_bnegax3(1); + if (a != 1) + { + ++failures; + printf("test_bnegax3(1): %d, expected: 1\n", a); + } + + a = test_bnegax4(0); + if (a != 0) + { + ++failures; + printf("test_bnegax4(0): %d, expected: 0\n", a); + } + + a = test_bnegax4(1); + if (a != 1) + { + ++failures; + printf("test_bnegax4(1): %d, expected: 1\n", a); + } + + if (failures > 0) + { + printf("failures: %u\n", failures); + } + return failures; +} From 70549e868edba97c3cb3271c2993aeafc41fd232 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 21 Oct 2023 23:56:13 +0800 Subject: [PATCH 2246/2710] New optimizer steps to restore some possibly lost optimization with boolean due to the previous fix. --- src/cc65/codeopt.c | 36 +++++++++++-------- src/cc65/coptbool.c | 58 ++++++++++++++++++++++++++++++- src/cc65/coptjmp.c | 84 ++++++++++++++++++++++++++++++++++++++++----- src/cc65/coptjmp.h | 24 ++++++++++--- 4 files changed, 173 insertions(+), 29 deletions(-) diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index ab3111a9b..baa44f99e 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -132,8 +132,10 @@ static OptFunc DOptCmp7 = { OptCmp7, "OptCmp7", 85, 0, static OptFunc DOptCmp8 = { OptCmp8, "OptCmp8", 50, 0, 0, 0, 0, 0 }; static OptFunc DOptCmp9 = { OptCmp9, "OptCmp9", 85, 0, 0, 0, 0, 0 }; static OptFunc DOptComplAX1 = { OptComplAX1, "OptComplAX1", 65, 0, 0, 0, 0, 0 }; -static OptFunc DOptCondBranches1= { OptCondBranches1,"OptCondBranches1", 80, 0, 0, 0, 0, 0 }; -static OptFunc DOptCondBranches2= { OptCondBranches2,"OptCondBranches2", 0, 0, 0, 0, 0, 0 }; +static OptFunc DOptCondBranch1 = { OptCondBranch1, "OptCondBranch1", 80, 0, 0, 0, 0, 0 }; +static OptFunc DOptCondBranch2 = { OptCondBranch2, "OptCondBranch2", 40, 0, 0, 0, 0, 0 }; +static OptFunc DOptCondBranch3 = { OptCondBranch3, "OptCondBranch3", 40, 0, 0, 0, 0, 0 }; +static OptFunc DOptCondBranchC = { OptCondBranchC, "OptCondBranchC", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptDeadCode = { OptDeadCode, "OptDeadCode", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptDeadJumps = { OptDeadJumps, "OptDeadJumps", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptDecouple = { OptDecouple, "OptDecouple", 100, 0, 0, 0, 0, 0 }; @@ -241,8 +243,10 @@ static OptFunc* OptFuncs[] = { &DOptCmp8, &DOptCmp9, &DOptComplAX1, - &DOptCondBranches1, - &DOptCondBranches2, + &DOptCondBranch1, + &DOptCondBranch2, + &DOptCondBranch3, + &DOptCondBranchC, &DOptDeadCode, &DOptDeadJumps, &DOptDecouple, @@ -619,9 +623,6 @@ static unsigned RunOptGroup1 (CodeSeg* S) Changes += RunOptFunc (S, &DOptPtrLoad15, 1); Changes += RunOptFunc (S, &DOptPtrLoad16, 1); Changes += RunOptFunc (S, &DOptPtrLoad17, 1); - Changes += RunOptFunc (S, &DOptBNegAX2, 1); - Changes += RunOptFunc (S, &DOptBNegAX3, 1); - Changes += RunOptFunc (S, &DOptBNegAX4, 1); Changes += RunOptFunc (S, &DOptAdd1, 1); Changes += RunOptFunc (S, &DOptAdd2, 1); Changes += RunOptFunc (S, &DOptAdd4, 1); @@ -674,8 +675,6 @@ static unsigned RunOptGroup3 (CodeSeg* S) do { C = 0; - C += RunOptFunc (S, &DOptBNegA1, 1); - C += RunOptFunc (S, &DOptBNegA2, 1); C += RunOptFunc (S, &DOptNegAX1, 1); C += RunOptFunc (S, &DOptNegAX2, 1); C += RunOptFunc (S, &DOptStackOps, 3); /* Before OptBoolUnary1 */ @@ -683,6 +682,7 @@ static unsigned RunOptGroup3 (CodeSeg* S) C += RunOptFunc (S, &DOptBoolUnary1, 3); C += RunOptFunc (S, &DOptBoolUnary2, 3); C += RunOptFunc (S, &DOptBoolUnary3, 1); + C += RunOptFunc (S, &DOptBNegA1, 1); C += RunOptFunc (S, &DOptBNegAX1, 1); /* After OptBoolUnary2 */ C += RunOptFunc (S, &DOptShift1, 1); C += RunOptFunc (S, &DOptShift4, 1); @@ -695,16 +695,22 @@ static unsigned RunOptGroup3 (CodeSeg* S) C += RunOptFunc (S, &DOptJumpCascades, 1); C += RunOptFunc (S, &DOptDeadJumps, 1); C += RunOptFunc (S, &DOptDeadCode, 1); - C += RunOptFunc (S, &DOptBoolCmp, 1); - C += RunOptFunc (S, &DOptBoolTrans, 1); C += RunOptFunc (S, &DOptJumpTarget1, 1); C += RunOptFunc (S, &DOptJumpTarget2, 1); - C += RunOptFunc (S, &DOptCondBranches1, 1); - C += RunOptFunc (S, &DOptCondBranches2, 1); + C += RunOptFunc (S, &DOptCondBranch1, 1); + C += RunOptFunc (S, &DOptCondBranch2, 1); + C += RunOptFunc (S, &DOptCondBranch3, 1); + C += RunOptFunc (S, &DOptCondBranchC, 1); C += RunOptFunc (S, &DOptRTSJumps1, 1); + C += RunOptFunc (S, &DOptBoolCmp, 1); + C += RunOptFunc (S, &DOptBoolTrans, 1); + C += RunOptFunc (S, &DOptBNegA2, 1); /* After OptCondBranch's */ + C += RunOptFunc (S, &DOptBNegAX2, 1); /* After OptCondBranch's */ + C += RunOptFunc (S, &DOptBNegAX3, 1); /* After OptCondBranch's */ + C += RunOptFunc (S, &DOptBNegAX4, 1); /* After OptCondBranch's */ C += RunOptFunc (S, &DOptCmp1, 1); C += RunOptFunc (S, &DOptCmp2, 1); - C += RunOptFunc (S, &DOptCmp8, 1); /* Must run before OptCmp3 */ + C += RunOptFunc (S, &DOptCmp8, 1); /* Must run before OptCmp3 */ C += RunOptFunc (S, &DOptCmp3, 1); C += RunOptFunc (S, &DOptCmp4, 1); C += RunOptFunc (S, &DOptCmp5, 1); @@ -712,7 +718,7 @@ static unsigned RunOptGroup3 (CodeSeg* S) C += RunOptFunc (S, &DOptCmp9, 1); C += RunOptFunc (S, &DOptTest1, 1); C += RunOptFunc (S, &DOptLoad1, 1); - C += RunOptFunc (S, &DOptJumpTarget3, 1); /* After OptCondBranches2 */ + C += RunOptFunc (S, &DOptJumpTarget3, 1); /* After OptCondBranches2 */ C += RunOptFunc (S, &DOptUnusedLoads, 1); C += RunOptFunc (S, &DOptUnusedStores, 1); C += RunOptFunc (S, &DOptDupLoads, 1); diff --git a/src/cc65/coptbool.c b/src/cc65/coptbool.c index 663e4e85e..3a3b3fa7c 100644 --- a/src/cc65/coptbool.c +++ b/src/cc65/coptbool.c @@ -167,7 +167,7 @@ static void ReplaceBranchCond (CodeSeg* S, unsigned I, cmp_t Cond) /*****************************************************************************/ -/* Optimize bool comparison and transformer subroutines */ +/* Optimize bool comparison and transformer subroutines with branches */ /*****************************************************************************/ @@ -291,6 +291,62 @@ unsigned OptBoolTrans (CodeSeg* S) +unsigned OptBoolUnary (CodeSeg* S) +/* Try to remove the call to a bcastax/bnegax routines where the call is +** not really needed and change following branch condition accordingly. +*/ +{ + unsigned Changes = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* N; + cmp_t Cond; + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check for a boolean transformer */ + if (E->OPC == OP65_JSR && + (Cond = FindBoolCmpCond (E->Arg)) != CMP_INV && + (N = CS_GetNextEntry (S, I)) != 0 && + (N->Info & OF_ZBRA) != 0) { + + /* Make the boolean transformer unnecessary by changing the + ** the conditional jump to evaluate the condition flags that + ** are set after the compare directly. Note: jeq jumps if + ** the condition is not met, jne jumps if the condition is met. + ** Invert the code if we jump on condition not met. + */ + if (GetBranchCond (N->OPC) == BC_EQ) { + /* Jumps if condition false, invert condition */ + Cond = CmpInvertTab [Cond]; + } + + /* Check if we can replace the code by something better */ + ReplaceBranchCond (S, I+1, Cond); + + /* Remove the call to the bool transformer */ + CS_DelEntry (S, I); + + /* Remember, we had changes */ + ++Changes; + + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + /*****************************************************************************/ /* Remove calls to the boolean cast/negation subroutines */ /*****************************************************************************/ diff --git a/src/cc65/coptjmp.c b/src/cc65/coptjmp.c index 9dd4a29c5..e0b53ad91 100644 --- a/src/cc65/coptjmp.c +++ b/src/cc65/coptjmp.c @@ -898,17 +898,13 @@ unsigned OptJumpTarget3 (CodeSeg* S) -unsigned OptCondBranches1 (CodeSeg* S) -/* Performs several optimization steps: -** +unsigned OptCondBranch1 (CodeSeg* S) +/* Performs some optimization steps: ** - If an immediate load of a register is followed by a conditional jump that ** is never taken because the load of the register sets the flags in such a ** manner, remove the conditional branch. ** - If the conditional branch is always taken because of the register load, ** replace it by a jmp. -** - If a conditional branch jumps around an unconditional branch, remove the -** conditional branch and make the jump a conditional branch with the -** inverse condition of the first one. */ { unsigned Changes = 0; @@ -918,7 +914,6 @@ unsigned OptCondBranches1 (CodeSeg* S) while (I < CS_GetEntryCount (S)) { CodeEntry* N; - CodeLabel* L; /* Get next entry */ CodeEntry* E = CS_GetEntry (S, I); @@ -960,6 +955,35 @@ unsigned OptCondBranches1 (CodeSeg* S) } + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +unsigned OptCondBranch2 (CodeSeg* S) +/* If a conditional branch jumps around an unconditional branch, remove the +** conditional branch and make the jump a conditional branch with the inverse +** condition of the first one. +*/ +{ + unsigned Changes = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* N; + CodeLabel* L; + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + if ((E->Info & OF_CBRA) != 0 && /* It's a conditional branch */ (L = E->JumpTo) != 0 && /* ..referencing a local label */ (N = CS_GetNextEntry (S, I)) != 0 && /* There is a following entry */ @@ -991,7 +1015,51 @@ unsigned OptCondBranches1 (CodeSeg* S) -unsigned OptCondBranches2 (CodeSeg* S) +unsigned OptCondBranch3 (CodeSeg* S) +/* If the conditional branch is always taken because it follows an inverse +** conditional branch, replace it by a jmp. +*/ +{ + unsigned Changes = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* N; + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Check if it's a conditional branch */ + if ((E->Info & OF_CBRA) != 0 && /* It's a conditional branch */ + (N = CS_GetNextEntry (S, I)) != 0 && /* There is a following entry */ + (N->Info & OF_CBRA) != 0 && /* ..which is a conditional branch */ + !CE_HasLabel (N)) { /* ..and does not have a label */ + + /* Check if the branches conditions are inverse of each other */ + if (GetInverseCond (GetBranchCond (N->OPC)) == GetBranchCond (E->OPC)) { + /* The branch is always taken, replace it by a jump */ + CE_ReplaceOPC (N, OP65_JMP); + + /* Remember, we had changes */ + ++Changes; + } + + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + +unsigned OptCondBranchC (CodeSeg* S) /* If on entry to a "rol a" instruction the accu is zero, and a beq/bne follows, ** we can remove the rol and branch on the state of the carry flag. */ diff --git a/src/cc65/coptjmp.h b/src/cc65/coptjmp.h index 8df53415d..194117729 100644 --- a/src/cc65/coptjmp.h +++ b/src/cc65/coptjmp.h @@ -101,13 +101,27 @@ unsigned OptJumpTarget3 (CodeSeg* S); ** done. */ -unsigned OptCondBranches1 (CodeSeg* S); -/* If an immidiate load of a register is followed by a conditional jump that -** is never taken because the load of the register sets the flags in such a -** manner, remove the conditional branch. +unsigned OptCondBranch1 (CodeSeg* S); +/* Performs some optimization steps: +** - If an immediate load of a register is followed by a conditional jump that +** is never taken because the load of the register sets the flags in such a +** manner, remove the conditional branch. +** - If the conditional branch is always taken because of the register load, +** replace it by a jmp. */ -unsigned OptCondBranches2 (CodeSeg* S); +unsigned OptCondBranch2 (CodeSeg* S); +/* If a conditional branch jumps around an unconditional branch, remove the +** conditional branch and make the jump a conditional branch with the inverse +** condition of the first one. +*/ + +unsigned OptCondBranch3 (CodeSeg* S); +/* If the conditional branch is always taken because it follows an inverse +** conditional branch, replace it by a jmp. +*/ + +unsigned OptCondBranchC (CodeSeg* S); /* If on entry to a "rol a" instruction the accu is zero, and a beq/bne follows, ** we can remove the rol and branch on the state of the carry. */ From a31b35b2a655372f161c9e7d4c45e3d7a694ad9f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 22 Oct 2023 10:42:17 +0800 Subject: [PATCH 2247/2710] Fixed naming of local variables in CG_TypeOfBySize and CG_TypeOf. --- src/cc65/expr.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 37611c490..7502835e0 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -106,19 +106,19 @@ unsigned CG_AddrModeFlags (const ExprDesc* Expr) static unsigned CG_TypeOfBySize (unsigned Size) /* Get the code generator replacement type of the object by its size */ { - unsigned NewType; + unsigned CG_Type; /* If the size is less than or equal to that of a a long, we will copy ** the struct using the primary register, otherwise we use memcpy. */ switch (Size) { - case 1: NewType = CF_CHAR; break; - case 2: NewType = CF_INT; break; + case 1: CG_Type = CF_CHAR; break; + case 2: CG_Type = CF_INT; break; case 3: /* FALLTHROUGH */ - case 4: NewType = CF_LONG; break; - default: NewType = CF_NONE; break; + case 4: CG_Type = CF_LONG; break; + default: CG_Type = CF_NONE; break; } - return NewType; + return CG_Type; } @@ -126,7 +126,7 @@ static unsigned CG_TypeOfBySize (unsigned Size) unsigned CG_TypeOf (const Type* T) /* Get the code generator base type of the object */ { - unsigned NewType; + unsigned CG_Type; switch (GetUnderlyingTypeCode (T)) { @@ -163,9 +163,9 @@ unsigned CG_TypeOf (const Type* T) case T_STRUCT: case T_UNION: - NewType = CG_TypeOfBySize (SizeOf (T)); - if (NewType != CF_NONE) { - return NewType; + CG_Type = CG_TypeOfBySize (SizeOf (T)); + if (CG_Type != CF_NONE) { + return CG_Type; } /* Address of ... */ return CF_INT | CF_UNSIGNED; From df392fc10454669e04c630afb107b2f21efde16b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 25 Oct 2023 22:38:21 +0800 Subject: [PATCH 2248/2710] Fixed type promotion of switch case values. --- src/cc65/swstmt.c | 88 ++++++++++++++++++----------------- test/val/bug2019-case-value.c | 77 ++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+), 43 deletions(-) create mode 100644 test/val/bug2019-case-value.c diff --git a/src/cc65/swstmt.c b/src/cc65/swstmt.c index 0466ddf4a..fc213c9a1 100644 --- a/src/cc65/swstmt.c +++ b/src/cc65/swstmt.c @@ -64,7 +64,7 @@ typedef struct SwitchCtrl SwitchCtrl; struct SwitchCtrl { Collection* Nodes; /* CaseNode tree */ - TypeCode ExprType; /* Basic switch expression type */ + const Type* ExprType; /* Switch controlling expression type */ unsigned Depth; /* Number of bytes the selector type has */ unsigned DefaultLabel; /* Label for the default branch */ @@ -133,7 +133,7 @@ void SwitchStatement (void) /* Setup the control structure, save the old and activate the new one */ SwitchData.Nodes = NewCollection (); - SwitchData.ExprType = GetUnqualTypeCode (&SwitchExpr.Type[0]); + SwitchData.ExprType = SwitchExpr.Type; SwitchData.Depth = SizeOf (SwitchExpr.Type); SwitchData.DefaultLabel = 0; OldSwitch = Switch; @@ -152,7 +152,7 @@ void SwitchStatement (void) /* Check if we had any labels */ if (CollCount (SwitchData.Nodes) == 0 && SwitchData.DefaultLabel == 0) { - Warning ("No case labels"); + Warning ("No reachable case labels for switch"); } /* If the last statement did not have a break, we may have an open @@ -209,62 +209,64 @@ void CaseLabel (void) /* Handle a case label */ { ExprDesc CaseExpr; /* Case label expression */ - long Val; /* Case label value */ - unsigned CodeLabel; /* Code label for this case */ /* Skip the "case" token */ NextToken (); /* Read the selector expression */ CaseExpr = NoCodeConstAbsIntExpr (hie1); - Val = CaseExpr.IVal; /* Now check if we're inside a switch statement */ if (Switch != 0) { /* Check the range of the expression */ - switch (Switch->ExprType) { + const Type* CaseT = CaseExpr.Type; + long CaseVal = CaseExpr.IVal; + int OutOfRange = 0; + const char* DiagMsg = 0; - case T_SCHAR: - /* Signed char */ - if (Val < -128 || Val > 127) { - Error ("Range error"); - } - break; + CaseExpr.Type = IntPromotion (Switch->ExprType); + LimitExprValue (&CaseExpr, 1); - case T_UCHAR: - if (Val < 0 || Val > 255) { - Error ("Range error"); - } - break; - - case T_SHORT: - case T_INT: - if (Val < -32768 || Val > 32767) { - Error ("Range error"); - } - break; - - case T_USHORT: - case T_UINT: - if (Val < 0 || Val > 65535) { - Error ("Range error"); - } - break; - - case T_LONG: - case T_ULONG: - break; - - default: - Internal ("Invalid type: %06lX", Switch->ExprType); + if (CaseVal != CaseExpr.IVal || + (IsSignSigned (CaseT) != IsSignSigned (CaseExpr.Type) && + (IsSignSigned (CaseT) ? CaseVal < 0 : CaseExpr.IVal < 0))) { + Warning (IsSignSigned (CaseT) ? + IsSignSigned (CaseExpr.Type) ? + "Case value is implicitly converted (%ld to %ld)" : + "Case value is implicitly converted (%ld to %lu)" : + IsSignSigned (CaseExpr.Type) ? + "Case value is implicitly converted (%lu to %ld)" : + "Case value is implicitly converted (%lu to %lu)", + CaseVal, CaseExpr.IVal); } - /* Insert the case selector into the selector table */ - CodeLabel = InsertCaseValue (Switch->Nodes, Val, Switch->Depth); + /* Check the range of the expression */ + if (IsSignSigned (CaseExpr.Type)) { + if (CaseExpr.IVal < GetIntegerTypeMin (Switch->ExprType)) { + DiagMsg = "Case value (%ld) out of range for switch condition type"; + OutOfRange = 1; + } else if (IsSignSigned (Switch->ExprType) ? + CaseExpr.IVal > (long)GetIntegerTypeMax (Switch->ExprType) : + SizeOf (CaseExpr.Type) > SizeOf (Switch->ExprType) && + (unsigned long)CaseExpr.IVal > GetIntegerTypeMax (Switch->ExprType)) { + DiagMsg = "Case value (%ld) out of range for switch condition type"; + OutOfRange = 1; + } + } else if ((unsigned long)CaseExpr.IVal > GetIntegerTypeMax (Switch->ExprType)) { + DiagMsg = "Case value (%lu) out of range for switch condition type"; + OutOfRange = 1; + } - /* Define this label */ - g_defcodelabel (CodeLabel); + if (OutOfRange == 0) { + /* Insert the case selector into the selector table */ + unsigned CodeLabel = InsertCaseValue (Switch->Nodes, CaseExpr.IVal, Switch->Depth); + + /* Define this label */ + g_defcodelabel (CodeLabel); + } else { + Warning (DiagMsg, CaseExpr.IVal); + } } else { diff --git a/test/val/bug2019-case-value.c b/test/val/bug2019-case-value.c new file mode 100644 index 000000000..b604e083a --- /dev/null +++ b/test/val/bug2019-case-value.c @@ -0,0 +1,77 @@ +/* Bug #2019 - Type promotion in switch statements seems to be broken */ + +#include <limits.h> +#include <stdio.h> + +unsigned failures; + +int f1(void) +{ + unsigned char c = 0xFF; + switch (c) { + case (signed char)0xFF: break; + case (unsigned char)0xFF: return 0; + } + return -1; +} + +int f2(void) +{ + signed char c = SCHAR_MIN; + switch (c) { + case (unsigned char)SCHAR_MIN: break; + case SCHAR_MIN: return 0; + } + return -1; +} + +int f3(void) +{ + signed int c = (int)UINT_MAX; + switch (c) { + case UINT_MAX: return 0; + } + return -1; +} + +int f4(void) +{ + unsigned int c = UINT_MAX; + switch (c) { + case -1L: return 0; + } + return -1; +} + +int main(void) +{ + if (f1()) + { + ++failures; + printf("f1() failed\n"); + } + + if (f2()) + { + ++failures; + printf("f2() failed\n"); + } + + if (f3()) + { + ++failures; + printf("f3() failed\n"); + } + + if (f4()) + { + ++failures; + printf("f4() failed\n"); + } + + if (failures > 0) + { + printf("failures: %u\n", failures); + } + return failures; +} From 85e63e99a66e71c561aaf6b5fdb5d794bf89acf8 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 27 Oct 2023 21:51:45 +0800 Subject: [PATCH 2249/2710] Fixed regression: array element of incomplete type. --- src/cc65/compile.c | 2 +- src/cc65/declare.c | 34 ++++++++++++++++++---------------- test/err/zero-size.c | 6 ++++++ 3 files changed, 25 insertions(+), 17 deletions(-) create mode 100644 test/err/zero-size.c diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 9d7fbe20a..edd00022c 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -511,7 +511,7 @@ void Compile (const char* FileName) /* Mark as defined; so that it will be exported, not imported */ Entry->Flags |= SC_DEF; - } else { + } else if (!IsTypeArray (Entry->Type)) { /* Tentative declared variable is still of incomplete type */ Error ("Definition of '%s' has type '%s' that is never completed", Entry->Name, diff --git a/src/cc65/declare.c b/src/cc65/declare.c index cd174c92d..cf9c13059 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -493,33 +493,35 @@ static void FixQualifiers (Type* DataType) -static void CheckArrayElementType (Type* DataType) +static void CheckArrayElementType (const Type* T) /* Check if data type consists of arrays of incomplete element types */ { - Type* T = DataType; - while (T->C != T_END) { if (IsTypeArray (T)) { + /* If the array is multi-dimensional, keep going until we get the + ** true element type. + */ ++T; - if (IsIncompleteESUType (T)) { - /* We cannot have an array of incomplete elements */ - Error ("Array of incomplete element type '%s'", GetFullTypeName (T)); - } else if (SizeOf (T) == 0) { - /* If the array is multi-dimensional, try to get the true - ** element type. - */ - if (IsTypeArray (T)) { - continue; - } - /* We could support certain 0-size element types as an extension */ - if (!IsTypeVoid (T) || IS_Get (&Standard) != STD_CC65) { - Error ("Array of 0-size element type '%s'", GetFullTypeName (T)); + if (SizeOf (T) == 0) { + if (IsTypeArray (T) || IsIncompleteESUType (T)) { + /* We cannot have an array of incomplete elements */ + if (!IsTypeArray (T) || GetElementCount (T) == UNSPECIFIED) { + Error ("Array of incomplete element type '%s'", + GetFullTypeName (T)); + return; + } + } else if (!IsTypeVoid (T) || IS_Get (&Standard) != STD_CC65) { + /* We could support certain 0-size element types as an extension */ + Error ("Array of 0-size element type '%s'", + GetFullTypeName (T)); + return; } } else { if (IsTypeStruct (T)) { SymEntry* TagEntry = GetESUTagSym (T); if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) { Error ("Invalid use of struct with flexible array member"); + return; } } } diff --git a/test/err/zero-size.c b/test/err/zero-size.c new file mode 100644 index 000000000..9e7510c91 --- /dev/null +++ b/test/err/zero-size.c @@ -0,0 +1,6 @@ +char a[][] = { 0, 0 }; /* Error: Array type has incomplete element type 'char[]' */ + +int main(void) +{ + return 0; +} From 8e45a4c960b2366a0c6d1d83539be3b029b1bcbe Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 27 Oct 2023 23:46:10 +0800 Subject: [PATCH 2250/2710] Fixed the bug that a union type containing a struct with a flexible array member was accepted as a struct member or array element type. --- src/cc65/declare.c | 7 +++---- test/err/bug2016-fam-member.c | 7 ++++++- test/err/bug2017-fam-element.c | 14 +++++++++----- test/val/fam.c | 31 +++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 test/val/fam.c diff --git a/src/cc65/declare.c b/src/cc65/declare.c index cf9c13059..b09c2ea17 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -517,7 +517,8 @@ static void CheckArrayElementType (const Type* T) return; } } else { - if (IsTypeStruct (T)) { + /* Elements cannot contain flexible array members themselves */ + if (IsClassStruct (T)) { SymEntry* TagEntry = GetESUTagSym (T); if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) { Error ("Invalid use of struct with flexible array member"); @@ -1202,9 +1203,7 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) { Field->Flags |= SC_HAVEFAM; Flags |= SC_HAVEFAM; - if (IsTypeStruct (Decl.Type)) { - Error ("Invalid use of struct with flexible array member"); - } + Error ("Invalid use of struct with flexible array member"); } } diff --git a/test/err/bug2016-fam-member.c b/test/err/bug2016-fam-member.c index 02c9ec275..473aae702 100644 --- a/test/err/bug2016-fam-member.c +++ b/test/err/bug2016-fam-member.c @@ -5,7 +5,12 @@ typedef struct x { int b[]; /* Ok: Flexible array member can be last */ } x; +typedef union u { + int a; + x x; /* Ok: Union member can contain flexible array member */ +} u; + struct y { - x x; /* Not ok: Contains flexible array member */ + u u; /* Not ok: Contains union that contains flexible array member */ int a; }; diff --git a/test/err/bug2017-fam-element.c b/test/err/bug2017-fam-element.c index 195ca6597..c97ae42ec 100644 --- a/test/err/bug2017-fam-element.c +++ b/test/err/bug2017-fam-element.c @@ -1,9 +1,13 @@ /* Bug #2017 - cc65 erroneously allows arrays of structs with flexible array members */ -struct z { +typedef struct x { int a; - int c; - int b[]; -}; + int b[]; /* Ok: Flexible array member can be last */ +} x; -struct z y[3]; /* Should be an error */ +typedef union u { + int a; + x x; /* Ok: Union member can contain flexible array member */ +} u; + +union u y[3]; /* Should be an error */ diff --git a/test/val/fam.c b/test/val/fam.c new file mode 100644 index 000000000..df5df2876 --- /dev/null +++ b/test/val/fam.c @@ -0,0 +1,31 @@ +/* Bug #2016 and #2017 - flexible array members */ + +typedef struct { + int a; + int b[]; /* Ok: Flexible array member can be last */ +} X; + +typedef union { + X x; /* Ok: Contains flexible array member */ + int a; +} U; + +typedef struct { + struct { + int a; + }; + int b[]; /* Ok: Flexible array member can be last */ +} Y; + +X x; +U u; +Y y; + +_Static_assert(sizeof x == sizeof (int), "sizeof x != sizeof (int)"); +_Static_assert(sizeof u == sizeof (int), "sizeof u != sizeof (int)"); +_Static_assert(sizeof y == sizeof (int), "sizeof y != sizeof (int)"); + +int main(void) +{ + return 0; +} From d424883716263569bb1828f0d2c25fe13e27313a Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 28 Oct 2023 15:24:13 +0800 Subject: [PATCH 2251/2710] Fixed diagnostics on qualifiers of function return types. --- src/cc65/declare.c | 118 +++++++++++++++++++++++++-------------------- 1 file changed, 67 insertions(+), 51 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 8fc314342..4bfd52c5e 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -493,8 +493,44 @@ static void FixQualifiers (Type* DataType) +static void FixFunctionReturnType (Type* T) +/* Check if the data type consists of any functions returning forbidden return +** types and remove qualifiers from the return types if they are not void. +*/ +{ + while (T->C != T_END) { + if (IsTypeFunc (T)) { + ++T; + + /* Functions may not return functions or arrays */ + if (IsTypeFunc (T)) { + Error ("Functions are not allowed to return functions"); + } else if (IsTypeArray (T)) { + Error ("Functions are not allowed to return arrays"); + } + + /* The return type must not be qualified */ + if ((GetQualifier (T) & T_QUAL_CVR) != T_QUAL_NONE) { + /* We are stricter than the standard here */ + if (GetRawTypeRank (T) == T_RANK_VOID) { + /* A qualified void type is always an error */ + Error ("Function definition has qualified void return type"); + } else { + /* For others, qualifiers are ignored */ + Warning ("Type qualifiers ignored on function return type"); + T[0].C &= ~T_QUAL_CVR; + } + } + } else { + ++T; + } + } +} + + + static void CheckArrayElementType (const Type* T) -/* Check if data type consists of arrays of incomplete element types */ +/* Check recursively if type consists of arrays of forbidden element types */ { while (T->C != T_END) { if (IsTypeArray (T)) { @@ -2061,46 +2097,39 @@ void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) /* Do several fixes on qualifiers */ FixQualifiers (D->Type); - /* Check if the data type consists of any arrays of forbidden types */ - CheckArrayElementType (D->Type); + /* Check if the data type consists of any functions returning forbidden return + ** types and remove qualifiers from the return types if they are not void. + */ + FixFunctionReturnType (D->Type); - /* If we have a function, add a special storage class */ - if (IsTypeFunc (D->Type)) { - D->StorageClass |= SC_FUNC; - } + /* Check recursively if the data type consists of arrays of forbidden types */ + CheckArrayElementType (D->Type); /* Parse attributes for this declarator */ ParseAttribute (D); - /* Check several things for function or function pointer types */ - if (IsTypeFunc (D->Type) || IsTypeFuncPtr (D->Type)) { + /* If we have a function, add a special storage class */ + if (IsTypeFunc (D->Type)) { - /* A function. Check the return type */ - Type* RetType = GetFuncReturnTypeModifiable (D->Type); + D->StorageClass |= SC_FUNC; - /* Functions may not return functions or arrays */ - if (IsTypeFunc (RetType)) { - Error ("Functions are not allowed to return functions"); - } else if (IsTypeArray (RetType)) { - Error ("Functions are not allowed to return arrays"); - } + } else if (!IsTypeVoid (D->Type)) { + /* Check the size of the generated type */ + unsigned Size = SizeOf (D->Type); - /* The return type must not be qualified */ - if (GetQualifier (RetType) != T_QUAL_NONE && RetType[1].C == T_END) { - - if (GetRawTypeRank (RetType) == T_RANK_VOID) { - /* A qualified void type is always an error */ - Error ("function definition has qualified void return type"); + if (Size >= 0x10000) { + if (D->Ident[0] != '\0') { + Error ("Size of '%s' is invalid (0x%06X)", D->Ident, Size); } else { - /* For others, qualifiers are ignored */ - Warning ("type qualifiers ignored on function return type"); - RetType[0].C = GetUnqualRawTypeCode (RetType); + Error ("Invalid size in declaration (0x%06X)", Size); } } + } - /* Warn about an implicit int return in the function */ - if ((Spec->Flags & DS_DEF_TYPE) != 0 && - RetType[0].C == T_INT && RetType[1].C == T_END) { + /* Check a few pre-C99 things */ + if ((Spec->Flags & DS_DEF_TYPE) != 0) { + /* Check and warn about an implicit int return in the function */ + if (IsTypeFunc (D->Type) && IsRankInt (GetFuncReturnType (D->Type))) { /* Function has an implicit int return. Output a warning if we don't ** have the C89 standard enabled explicitly. */ @@ -2110,29 +2139,16 @@ void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) GetFuncDesc (D->Type)->Flags |= FD_OLDSTYLE_INTRET; } - } - - /* For anthing that is not a function or typedef, check for an implicit - ** int declaration. - */ - if ((D->StorageClass & SC_FUNC) != SC_FUNC && - (D->StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { - /* If the standard was not set explicitly to C89, print a warning - ** for variables with implicit int type. + /* For anthing that is not a function or typedef, check for an implicit + ** int declaration. */ - if ((Spec->Flags & DS_DEF_TYPE) != 0 && IS_Get (&Standard) >= STD_C99) { - Warning ("Implicit 'int' is an obsolete feature"); - } - } - - if (!IsTypeFunc (D->Type) && !IsTypeVoid (D->Type)) { - /* Check the size of the generated type */ - unsigned Size = SizeOf (D->Type); - if (Size >= 0x10000) { - if (D->Ident[0] != '\0') { - Error ("Size of '%s' is invalid (0x%06X)", D->Ident, Size); - } else { - Error ("Invalid size in declaration (0x%06X)", Size); + if ((D->StorageClass & SC_FUNC) != SC_FUNC && + (D->StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { + /* If the standard was not set explicitly to C89, print a warning + ** for variables with implicit int type. + */ + if (IS_Get (&Standard) >= STD_C99) { + Warning ("Implicit 'int' is an obsolete feature"); } } } From 94239525ca30c052b757a7938031a20189fc2fb5 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Fri, 27 Oct 2023 07:07:38 +0200 Subject: [PATCH 2252/2710] Apple2 SSC: Implement no flow control --- libsrc/apple2/ser/a2.ssc.s | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index f48e948ed..c8aa6e9a5 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -87,6 +87,7 @@ SendFreeCnt: .res 1 ; Number of free bytes in send buffer Stopped: .res 1 ; Flow-stopped flag RtsOff: .res 1 ; Cached value of command register with ; flow stopped +HSType: .res 1 ; Flow-control type RecvBuf: .res 256 ; Receive buffer: 256 bytes SendBuf: .res 256 ; Send buffer: 256 bytes @@ -276,13 +277,15 @@ NoDev: lda #SER_ERR_NO_DEVICE ; Check if the handshake setting is valid AciaOK: ldy #SER_PARAMS::HANDSHAKE lda (ptr1),y - cmp #SER_HS_HW ; This is all we support - beq HandshakeOK + cmp #SER_HS_SW ; Not supported + bne HandshakeOK lda #SER_ERR_INIT_FAILED bne Out HandshakeOK: + sta HSType ; Store flow control type + ldy #$00 ; Initialize buffers sty Stopped sty RecvHead @@ -473,11 +476,14 @@ SER_IRQ: bcc Flow ; Assert flow control if buffer space low rts ; Interrupt handled (carry already set) -Flow: ldx Index ; Assert flow control if buffer space too low -lda RtsOff +Flow: lda HSType ; Don't touch if no flow control + beq IRQDone + + ldx Index ; Assert flow control if buffer space too low + lda RtsOff sta ACIA_CMD,x sta Stopped - sec ; Interrupt handled +IRQDone:sec ; Interrupt handled Done: rts ;---------------------------------------------------------------------------- From 8a797095c1983b2704331eafac3291336454f6c9 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Fri, 3 Nov 2023 07:50:28 +0100 Subject: [PATCH 2253/2710] Apple 2 SSC: Handle SER_HS_NONE with no performance impact --- libsrc/apple2/ser/a2.ssc.s | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index c8aa6e9a5..9897593e3 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -87,7 +87,6 @@ SendFreeCnt: .res 1 ; Number of free bytes in send buffer Stopped: .res 1 ; Flow-stopped flag RtsOff: .res 1 ; Cached value of command register with ; flow stopped -HSType: .res 1 ; Flow-control type RecvBuf: .res 256 ; Receive buffer: 256 bytes SendBuf: .res 256 ; Send buffer: 256 bytes @@ -284,7 +283,7 @@ AciaOK: ldy #SER_PARAMS::HANDSHAKE bne Out HandshakeOK: - sta HSType ; Store flow control type + sta tmp2 ; Store flow control type ldy #$00 ; Initialize buffers sty Stopped @@ -335,8 +334,12 @@ BaudOK: sta tmp1 ora #%00001000 ; Enable receive interrupts (RTS low) sta ACIA_CMD,x + ldy tmp2 ; Check flow control type + bne Opened + sta RtsOff ; Disable flow control if required + ; Done - stx Index ; Mark port as open +Opened: stx Index ; Mark port as open lda #SER_ERR_OK Out: ldx #$00 ; Promote char return value @@ -476,14 +479,11 @@ SER_IRQ: bcc Flow ; Assert flow control if buffer space low rts ; Interrupt handled (carry already set) -Flow: lda HSType ; Don't touch if no flow control - beq IRQDone - - ldx Index ; Assert flow control if buffer space too low +Flow: ldx Index ; Assert flow control if buffer space too low lda RtsOff sta ACIA_CMD,x sta Stopped -IRQDone:sec ; Interrupt handled + sec ; Interrupt handled Done: rts ;---------------------------------------------------------------------------- From fe115fb621cdbaefd04c63696fa73e3bf19e8acd Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Fri, 3 Nov 2023 14:58:32 +0100 Subject: [PATCH 2254/2710] Revert "Apple 2 SSC: Handle SER_HS_NONE with no performance impact" This reverts commit 0eafb6d1d50a3428d0f518a849c2b45e78b542df. This was buggy, as we sta Stopped when asserting flow, and this stops SER_GET. --- libsrc/apple2/ser/a2.ssc.s | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 9897593e3..c8aa6e9a5 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -87,6 +87,7 @@ SendFreeCnt: .res 1 ; Number of free bytes in send buffer Stopped: .res 1 ; Flow-stopped flag RtsOff: .res 1 ; Cached value of command register with ; flow stopped +HSType: .res 1 ; Flow-control type RecvBuf: .res 256 ; Receive buffer: 256 bytes SendBuf: .res 256 ; Send buffer: 256 bytes @@ -283,7 +284,7 @@ AciaOK: ldy #SER_PARAMS::HANDSHAKE bne Out HandshakeOK: - sta tmp2 ; Store flow control type + sta HSType ; Store flow control type ldy #$00 ; Initialize buffers sty Stopped @@ -334,12 +335,8 @@ BaudOK: sta tmp1 ora #%00001000 ; Enable receive interrupts (RTS low) sta ACIA_CMD,x - ldy tmp2 ; Check flow control type - bne Opened - sta RtsOff ; Disable flow control if required - ; Done -Opened: stx Index ; Mark port as open + stx Index ; Mark port as open lda #SER_ERR_OK Out: ldx #$00 ; Promote char return value @@ -479,11 +476,14 @@ SER_IRQ: bcc Flow ; Assert flow control if buffer space low rts ; Interrupt handled (carry already set) -Flow: ldx Index ; Assert flow control if buffer space too low +Flow: lda HSType ; Don't touch if no flow control + beq IRQDone + + ldx Index ; Assert flow control if buffer space too low lda RtsOff sta ACIA_CMD,x sta Stopped - sec ; Interrupt handled +IRQDone:sec ; Interrupt handled Done: rts ;---------------------------------------------------------------------------- From cff611711ba54d6bd7b0ab02426419ceab4f7f07 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 5 Nov 2023 21:03:06 +0100 Subject: [PATCH 2255/2710] Optimize multiplication by zero --- src/cc65/codegen.c | 14 +++++++++++++- test/val/mult1.c | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 480cc32ea..f923ac8c9 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -2726,7 +2726,12 @@ void g_mul (unsigned flags, unsigned long val) if (flags & CF_FORCECHAR) { /* Handle some special cases */ switch (val) { - + case 0: + AddCodeLine ("lda #$00"); + return; + case 1: + /* Nothing to do */ + return; case 3: AddCodeLine ("sta tmp1"); AddCodeLine ("asl a"); @@ -2764,6 +2769,13 @@ void g_mul (unsigned flags, unsigned long val) case CF_INT: switch (val) { + case 0: + AddCodeLine ("lda #$00"); + AddCodeLine ("tax"); + return; + case 1: + /* Nothing to do */ + return; case 3: AddCodeLine ("jsr mulax3"); return; diff --git a/test/val/mult1.c b/test/val/mult1.c index 95141d76d..b1a074e41 100644 --- a/test/val/mult1.c +++ b/test/val/mult1.c @@ -55,6 +55,7 @@ void m3(unsigned char uc) /* testing literal multiply with same source and destination */ vuc = uc; uc2 = 0; + uc1 = vuc; uc1 = uc1*0; if( uc1 != 0 ) failures++; uc1 = vuc; uc1 = uc1*1; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*2; if( uc1 != (uc2+=TESTLIT) ) failures++; uc1 = vuc; uc1 = uc1*3; if( uc1 != (uc2+=TESTLIT) ) failures++; From 23f37c40aa81d5336cf8018ba7c988fb8655f369 Mon Sep 17 00:00:00 2001 From: Brian <18603393+brian6932@users.noreply.github.com> Date: Mon, 6 Nov 2023 21:36:58 -0500 Subject: [PATCH 2256/2710] Upload 64-bit Windows snapshot to Sourceforge --- .github/workflows/snapshot-on-push-master.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 2aedb0e25..571947c9b 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -135,6 +135,15 @@ jobs: port: ${{ secrets.SSH_PORT }} user: ${{ secrets.SSH_USER }} key: ${{ secrets.SSH_KEY }} + - name: Upload 64-bit Windows snapshot to sourceforge + uses: nogsantos/scp-deploy@master + with: + src: cc65-snapshot-win64.zip + host: ${{ secrets.SSH_HOST }} + remote: ${{ secrets.SSH_DIR }} + port: ${{ secrets.SSH_PORT }} + user: ${{ secrets.SSH_USER }} + key: ${{ secrets.SSH_KEY }} - name: Upload documents snapshot to sourceforge uses: nogsantos/scp-deploy@master with: From 83f51b1e3c5a210f84f95e6a161ce5e062de502a Mon Sep 17 00:00:00 2001 From: Brian <18603393+brian6932@users.noreply.github.com> Date: Mon, 6 Nov 2023 21:53:14 -0500 Subject: [PATCH 2257/2710] mention in readme --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3e04158e1..f8a0d4ff2 100644 --- a/README.md +++ b/README.md @@ -49,8 +49,10 @@ Some of us may also be around on IRC [#cc65](https://web.libera.chat/#cc65) on l # Downloads -* [Windows Snapshot](https://sourceforge.net/projects/cc65/files/cc65-snapshot-win32.zip) +* [Windows 64bit Snapshot](https://sourceforge.net/projects/cc65/files/cc65-snapshot-win64.zip) -* [Linux Snapshot DEB and RPM](https://software.opensuse.org//download.html?project=home%3Astrik&package=cc65) +* [Windows 32bit Snapshot](https://sourceforge.net/projects/cc65/files/cc65-snapshot-win32.zip) + +* [Linux Snapshot DEB and RPM](https://software.opensuse.org/download.html?project=home%3Astrik&package=cc65) [![Snapshot Build](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml/badge.svg?branch=master)](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml) From f8d7c0cd4c4f0c111180d87852c51d9710cd3ba6 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Wed, 8 Nov 2023 11:13:31 +0100 Subject: [PATCH 2258/2710] Fixed typo --- doc/smc.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/smc.sgml b/doc/smc.sgml index 71de20208..ed9b1ba20 100644 --- a/doc/smc.sgml +++ b/doc/smc.sgml @@ -104,7 +104,7 @@ placeholder has two advantages: <item> The code is better documented. It is clearly visible that the given value is about to be changed. <item> When examining an (initial) disassembly (e.g. in a debugger), these - placegolders can be better identified: They are fixed and, you may + placeholders can be better identified: They are fixed and, you may notice that below, quite eye catching defined. </enum> From 86d498b7b3f21a8475b10fe3694fbc054b0e544b Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 6 Nov 2023 20:05:35 +0100 Subject: [PATCH 2259/2710] Implement SER_HS_NONE on Apple IIgs serial driver --- libsrc/apple2/ser/a2.gs.s | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index 7f6bc824d..20018abe4 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -61,6 +61,7 @@ SendFreeCnt: .res 1 ; Number of bytes in send buffer Stopped: .res 1 ; Flow-stopped flag RtsOff: .res 1 +HSType: .res 1 ; Flow-control type RecvBuf: .res 256 ; Receive buffers: 256 bytes SendBuf: .res 256 ; Send buffers: 256 bytes @@ -333,8 +334,10 @@ SER_OPEN: ; Check if the handshake setting is valid ldy #SER_PARAMS::HANDSHAKE ; Handshake lda (ptr1),y - cmp #SER_HS_HW ; This is all we support - bne InvParam + cmp #SER_HS_SW ; Not supported + beq InvParam + + sta HSType ; Store flow control type ; Initialize buffers ldy #$00 @@ -644,13 +647,16 @@ CheckSpecial: sec rts -Flow: ldx Channel ; Assert flow control if buffer space too low +Flow: lda HSType ; Don't touch if no flow control + beq IRQDone + + ldx Channel ; Assert flow control if buffer space too low ldy #WR_TX_CTRL lda RtsOff jsr writeSCCReg sta Stopped - sec ; Interrupt handled +IRQDone:sec ; Interrupt handled Done: rts Special:ldx Channel From d00a23feff3b1ec1277e9345554659e468b7a701 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sat, 11 Nov 2023 21:00:12 +0100 Subject: [PATCH 2260/2710] Update Apple 2 serial documentation Reflect the new support of SER_HS_NONE. --- doc/apple2.sgml | 14 ++++++++------ doc/apple2enh.sgml | 14 ++++++++------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index 063cfc71f..97724c147 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -430,9 +430,10 @@ The names in the parentheses denote the symbols to be used for static linking of Driver for the Apple II Super Serial Card. The SSC is an extension card for the II, II+, IIe; the Apple //c and //c+ have the same hardware and firmware integrated. - It supports up to 9600 baud, requires hardware flow control (RTS/CTS) and - does interrupt driven receives. Speeds faster than 9600 baud aren't reachable - because the ROM and ProDOS IRQ handlers are too slow. + It supports up to 9600 baud, supports no flow control and hardware flow control + (RTS/CTS) and does interrupt driven receives. Speeds faster than 9600 baud + aren't reachable because the ROM and ProDOS IRQ handlers are too slow. + Software flow control (XON/XOFF) is not supported. Note that because of the peculiarities of the 6551 chip transmits are not interrupt driven, and the transceiver blocks if the receiver asserts flow control because of a full buffer. @@ -449,9 +450,10 @@ The names in the parentheses denote the symbols to be used for static linking of <tag><tt/a2.gs.ser (a2_gs_ser)/</tag> Driver for the Apple IIgs serial ports (printer and modem). - It supports up to 9600 baud, requires hardware flow control (RTS/CTS) and - does interrupt driven receives. Speeds faster than 9600 baud aren't reachable - because the ROM and ProDOS IRQ handlers are too slow. + It supports up to 9600 baud, supports no flow control and hardware flow control + (RTS/CTS) and does interrupt driven receives. Speeds faster than 9600 baud + aren't reachable because the ROM and ProDOS IRQ handlers are too slow. + Software flow control (XON/XOFF) is not supported. Note that transmits are not interrupt driven, and the transceiver blocks if the receiver asserts flow control because of a full buffer. diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 30088521a..11d4feb7e 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -431,9 +431,10 @@ The names in the parentheses denote the symbols to be used for static linking of Driver for the Apple II Super Serial Card. The SSC is an extension card for the II, II+, IIe; the Apple //c and //c+ have the same hardware and firmware integrated. - It supports up to 9600 baud, requires hardware flow control (RTS/CTS) and - does interrupt driven receives. Speeds faster than 9600 baud aren't reachable - because the ROM and ProDOS IRQ handlers are too slow. + It supports up to 9600 baud, supports no flow control and hardware flow control + (RTS/CTS) and does interrupt driven receives. Speeds faster than 9600 baud + aren't reachable because the ROM and ProDOS IRQ handlers are too slow. + Software flow control (XON/XOFF) is not supported. Note that because of the peculiarities of the 6551 chip transmits are not interrupt driven, and the transceiver blocks if the receiver asserts flow control because of a full buffer. @@ -450,9 +451,10 @@ The names in the parentheses denote the symbols to be used for static linking of <tag><tt/a2e.gs.ser (a2e_gs_ser)/</tag> Driver for the Apple IIgs serial ports (printer and modem). - It supports up to 9600 baud, requires hardware flow control (RTS/CTS) and - does interrupt driven receives. Speeds faster than 9600 baud aren't reachable - because the ROM and ProDOS IRQ handlers are too slow. + It supports up to 9600 baud, supports no flow control and hardware flow control + (RTS/CTS) and does interrupt driven receives. Speeds faster than 9600 baud + aren't reachable because the ROM and ProDOS IRQ handlers are too slow. + Software flow control (XON/XOFF) is not supported. Note that transmits are not interrupt driven, and the transceiver blocks if the receiver asserts flow control because of a full buffer. From 0eb38770bdc18b46e6ea34c57063a8af3e3646ec Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 13 Nov 2023 17:17:46 +0800 Subject: [PATCH 2261/2710] Fixed const qualifiers on named structs/unions members that should prevent assignments to the whole structs/unions. Added warning on ignored qualifiers on anonymous structs/unions. --- src/cc65/assignment.c | 7 ++-- src/cc65/declare.c | 80 ++++++++++++++++++++++++++++++++----------- src/cc65/symentry.h | 13 ++++++- test/err/bug2018.c | 25 ++++++++++++++ test/val/bug2018-ok.c | 61 +++++++++++++++++++++++++++++++++ 5 files changed, 163 insertions(+), 23 deletions(-) create mode 100644 test/err/bug2018.c create mode 100644 test/val/bug2018-ok.c diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index e0ec80fde..e51dde9ab 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -44,6 +44,7 @@ #include "scanner.h" #include "stackptr.h" #include "stdnames.h" +#include "symentry.h" #include "typecmp.h" #include "typeconv.h" @@ -82,6 +83,8 @@ static void CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) if (TypeCmp (ltype, RExpr->Type).C < TC_STRICT_COMPATIBLE) { TypeCompatibilityDiagnostic (ltype, RExpr->Type, 1, "Incompatible types in assignment to '%s' from '%s'"); + } else if (SymHasConstMember (ltype->A.S)) { + Error ("Assignment to read only variable"); } /* Do we copy the value directly using the primary? */ @@ -627,7 +630,7 @@ void OpAssign (const GenDesc* Gen, ExprDesc* Expr, const char* Op) } } else if (IsQualConst (ltype)) { /* Check for assignment to const */ - Error ("Assignment to const"); + Error ("Assignment to const variable"); } } @@ -686,7 +689,7 @@ void OpAddSubAssign (const GenDesc* Gen, ExprDesc *Expr, const char* Op) Error ("Invalid lvalue in assignment"); } else if (IsQualConst (Expr->Type)) { /* The left side must not be const qualified */ - Error ("Assignment to const"); + Error ("Assignment to const variable"); } } diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 4bfd52c5e..ccea0098a 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -994,10 +994,14 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) ** a union. */ if (IS_Get (&Standard) >= STD_CC65 && IsClassStruct (Decl.Type)) { - /* This is an anonymous struct or union. Copy the fields - ** into the current level. - */ - AnonFieldName (Decl.Ident, "field", UnionTagEntry->V.S.ACount); + /* This is an anonymous struct or union */ + AnonFieldName (Decl.Ident, GetBasicTypeName (Decl.Type), UnionTagEntry->V.S.ACount); + + /* Ignore CVR qualifiers */ + if (IsQualConst (Decl.Type) || IsQualVolatile (Decl.Type) || IsQualRestrict (Decl.Type)) { + Warning ("Anonymous %s qualifiers are ignored", GetBasicTypeName (Decl.Type)); + Decl.Type[0].C &= ~T_QUAL_CVR; + } } else { /* A non bit-field without a name is legal but useless */ Warning ("Declaration does not declare anything"); @@ -1011,13 +1015,18 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) GetFullTypeName (Decl.Type)); } + /* Check for const types */ + if (IsQualConst (Decl.Type)) { + Flags |= SC_HAVECONST; + } + /* Handle sizes */ FieldSize = SizeOf (Decl.Type); if (FieldSize > UnionSize) { UnionSize = FieldSize; } - /* Add a field entry to the table. */ + /* Add a field entry to the table */ if (FieldWidth > 0) { /* For a union, allocate space for the type specified by the ** bit-field. @@ -1025,19 +1034,30 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) AddBitField (Decl.Ident, Decl.Type, 0, 0, FieldWidth, SignednessSpecified); } else if (Decl.Ident[0] != '\0') { + /* Add the new field to the table */ Field = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0); - if (IsAnonName (Decl.Ident)) { - Field->V.A.ANumber = UnionTagEntry->V.S.ACount++; - AliasAnonStructFields (&Decl, Field); - } - /* Check if the field itself has a flexible array member */ + /* Check the new field for certain kinds of members */ if (IsClassStruct (Decl.Type)) { SymEntry* TagEntry = GetESUTagSym (Decl.Type); + + /* Alias the fields of the anonymous member on the current level */ + if (IsAnonName (Decl.Ident)) { + Field->V.A.ANumber = UnionTagEntry->V.S.ACount++; + AliasAnonStructFields (&Decl, Field); + } + + /* Check if the field itself has a flexible array member */ if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) { Field->Flags |= SC_HAVEFAM; Flags |= SC_HAVEFAM; } + + /* Check if the field itself has a const member */ + if (TagEntry && SymHasConstMember (TagEntry)) { + Field->Flags |= SC_HAVECONST; + Flags |= SC_HAVECONST; + } } } @@ -1190,10 +1210,14 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) */ if (IS_Get (&Standard) >= STD_CC65 && IsClassStruct (Decl.Type)) { - /* This is an anonymous struct or union. Copy the - ** fields into the current level. - */ - AnonFieldName (Decl.Ident, "field", StructTagEntry->V.S.ACount); + /* This is an anonymous struct or union */ + AnonFieldName (Decl.Ident, GetBasicTypeName (Decl.Type), StructTagEntry->V.S.ACount); + + /* Ignore CVR qualifiers */ + if (IsQualConst (Decl.Type) || IsQualVolatile (Decl.Type) || IsQualRestrict (Decl.Type)) { + Warning ("Anonymous %s qualifiers are ignored", GetBasicTypeName (Decl.Type)); + Decl.Type[0].C &= ~T_QUAL_CVR; + } } else { /* A non bit-field without a name is legal but useless */ Warning ("Declaration does not declare anything"); @@ -1211,6 +1235,11 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) GetFullTypeName (Decl.Type)); } + /* Check for const types */ + if (IsQualConst (Decl.Type)) { + Flags |= SC_HAVECONST; + } + /* Add a field entry to the table */ if (FieldWidth > 0) { /* Full bytes have already been added to the StructSize, @@ -1223,24 +1252,35 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) FieldWidth, SignednessSpecified); BitOffs += FieldWidth; CHECK (BitOffs <= CHAR_BITS * SizeOf (Decl.Type)); - /* Add any full bytes to the struct size. */ + /* Add any full bytes to the struct size */ StructSize += BitOffs / CHAR_BITS; BitOffs %= CHAR_BITS; } else if (Decl.Ident[0] != '\0') { + /* Add the new field to the table */ Field = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, StructSize); - if (IsAnonName (Decl.Ident)) { - Field->V.A.ANumber = StructTagEntry->V.S.ACount++; - AliasAnonStructFields (&Decl, Field); - } - /* Check if the field itself has a flexible array member */ + /* Check the new field for certain kinds of members */ if (IsClassStruct (Decl.Type)) { SymEntry* TagEntry = GetESUTagSym (Decl.Type); + + /* Alias the fields of the anonymous member on the current level */ + if (IsAnonName (Decl.Ident)) { + Field->V.A.ANumber = StructTagEntry->V.S.ACount++; + AliasAnonStructFields (&Decl, Field); + } + + /* Check if the field itself has a flexible array member */ if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) { Field->Flags |= SC_HAVEFAM; Flags |= SC_HAVEFAM; Error ("Invalid use of struct with flexible array member"); } + + /* Check if the field itself has a const member */ + if (TagEntry && SymHasConstMember (TagEntry)) { + Field->Flags |= SC_HAVECONST; + Flags |= SC_HAVECONST; + } } if (!FlexibleMember) { diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 76a4272ae..715c036d6 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -108,6 +108,7 @@ struct CodeEntry; #define SC_ALIAS 0x01000000U /* Alias of global or anonymous field */ #define SC_FICTITIOUS 0x02000000U /* Symbol is fictitious (for error recovery) */ #define SC_HAVEFAM 0x04000000U /* Type has a Flexible Array Member */ +#define SC_HAVECONST 0x08000000U /* Type has a const member */ @@ -275,6 +276,16 @@ INLINE int SymHasFlexibleArrayMember (const SymEntry* Sym) # define SymHasFlexibleArrayMember(Sym) (((Sym)->Flags & SC_HAVEFAM) == SC_HAVEFAM) #endif +#if defined(HAVE_INLINE) +INLINE int SymHasConstMember (const SymEntry* Sym) +/* Return true if the given entry has a const member */ +{ + return ((Sym->Flags & SC_HAVECONST) == SC_HAVECONST); +} +#else +# define SymHasConstMember(Sym) (((Sym)->Flags & SC_HAVECONST) == SC_HAVECONST) +#endif + #if defined(HAVE_INLINE) INLINE const char* SymGetAsmName (const SymEntry* Sym) /* Return the assembler label name for the symbol (beware: may be NULL!) */ @@ -282,7 +293,7 @@ INLINE const char* SymGetAsmName (const SymEntry* Sym) return Sym->AsmName; } #else -# define SymGetAsmName(Sym) ((Sym)->AsmName) +# define SymGetAsmName(Sym) ((Sym)->AsmName) #endif const DeclAttr* SymGetAttr (const SymEntry* Sym, DeclAttrType AttrType); diff --git a/test/err/bug2018.c b/test/err/bug2018.c new file mode 100644 index 000000000..61892992e --- /dev/null +++ b/test/err/bug2018.c @@ -0,0 +1,25 @@ +/* Bug #2018 - Compiler has problems with const struct fields */ + +struct X { + struct { + int a; + } a; + union { + int a; + const int b; + } b; +}; + +struct X f(void) +{ + struct X x = { 42 }; + return x; +} + +int main(void) +{ + struct X x = { 0 }; + x = f(); /* Error since X is read only */ + + return 0; +} diff --git a/test/val/bug2018-ok.c b/test/val/bug2018-ok.c new file mode 100644 index 000000000..7046e1d1f --- /dev/null +++ b/test/val/bug2018-ok.c @@ -0,0 +1,61 @@ +/* Bug #2018 - Compiler has problems with const struct fields */ + +#include <stdio.h> + +unsigned failures; + +struct X { + const struct { /* Qualifier ignored in cc65 */ + int a; + }; + const union { /* Qualifier ignored in cc65 */ + int b; + }; +}; + +union Y { + const struct { /* Qualifier ignored in cc65 */ + int a; + }; + const union { /* Qualifier ignored in cc65 */ + int b; + }; +}; + +struct X f(struct X a) +{ + struct X x = { 42 }; + return --a.a ? a : x; +} + +union Y g(union Y a) +{ + union Y y = { 42 }; + return --a.a ? a : y; +} + +int main(void) +{ + struct X x = { 1 }; + union Y y = { 1 }; + + x = f(x); /* Allowed in cc65 since X is not read only */ + y = g(y); /* Allowed in cc65 since Y is not read only */ + + if (x.a != 42) + { + ++failures; + } + + if (y.a != 42) + { + ++failures; + } + + if (failures > 0) + { + printf("failures: %u\n", failures); + } + + return failures; +} From 9242508abf6d03221837fb1063eff855aabf6c81 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 12 Nov 2023 22:15:03 +0100 Subject: [PATCH 2262/2710] Optimize substraction of 1 --- src/cc65/codegen.c | 70 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 53 insertions(+), 17 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index f923ac8c9..0f45f66d9 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -2000,25 +2000,55 @@ void g_subeqstatic (unsigned flags, uintptr_t label, long offs, case CF_INT: if (flags & CF_CONST) { - AddCodeLine ("lda %s", lbuf); - AddCodeLine ("sec"); - AddCodeLine ("sbc #$%02X", (unsigned char)val); - AddCodeLine ("sta %s", lbuf); - if (val < 0x100) { - unsigned L = GetLocalLabel (); - AddCodeLine ("bcs %s", LocalLabelName (L)); - AddCodeLine ("dec %s+1", lbuf); - g_defcodelabel (L); + if (val == 1) { + unsigned L = GetLocalLabel(); if ((flags & CF_NOKEEP) == 0) { - AddCodeLine ("ldx %s+1", lbuf); + if ((CPUIsets[CPU] & CPU_ISET_65SC02) != 0) { + AddCodeLine ("lda %s", lbuf); + AddCodeLine ("bne %s", LocalLabelName (L)); + AddCodeLine ("dec %s+1", lbuf); + g_defcodelabel (L); + AddCodeLine ("dea"); + AddCodeLine ("sta %s", lbuf); + AddCodeLine ("ldx %s+1", lbuf); + } else { + AddCodeLine ("ldx %s", lbuf); + AddCodeLine ("bne %s", LocalLabelName (L)); + AddCodeLine ("dec %s+1", lbuf); + g_defcodelabel (L); + AddCodeLine ("dex"); + AddCodeLine ("stx %s", lbuf); + AddCodeLine ("txa"); + AddCodeLine ("ldx %s+1", lbuf); + } + } else { + AddCodeLine ("lda %s", lbuf); + AddCodeLine ("bne %s", LocalLabelName (L)); + AddCodeLine ("dec %s+1", lbuf); + g_defcodelabel (L); + AddCodeLine ("dec %s", lbuf); } } else { - AddCodeLine ("lda %s+1", lbuf); - AddCodeLine ("sbc #$%02X", (unsigned char)(val >> 8)); - AddCodeLine ("sta %s+1", lbuf); - if ((flags & CF_NOKEEP) == 0) { - AddCodeLine ("tax"); - AddCodeLine ("lda %s", lbuf); + AddCodeLine ("lda %s", lbuf); + AddCodeLine ("sec"); + AddCodeLine ("sbc #$%02X", (unsigned char)val); + AddCodeLine ("sta %s", lbuf); + if (val < 0x100) { + unsigned L = GetLocalLabel (); + AddCodeLine ("bcs %s", LocalLabelName (L)); + AddCodeLine ("dec %s+1", lbuf); + g_defcodelabel (L); + if ((flags & CF_NOKEEP) == 0) { + AddCodeLine ("ldx %s+1", lbuf); + } + } else { + AddCodeLine ("lda %s+1", lbuf); + AddCodeLine ("sbc #$%02X", (unsigned char)(val >> 8)); + AddCodeLine ("sta %s+1", lbuf); + if ((flags & CF_NOKEEP) == 0) { + AddCodeLine ("tax"); + AddCodeLine ("lda %s", lbuf); + } } } } else { @@ -3693,7 +3723,13 @@ void g_dec (unsigned flags, unsigned long val) } else { /* Inline the code */ if (val < 0x300) { - if ((val & 0xFF) != 0) { + if ((CPUIsets[CPU] & CPU_ISET_65SC02) != 0 && val == 1) { + unsigned L = GetLocalLabel(); + AddCodeLine ("bne %s", LocalLabelName (L)); + AddCodeLine ("dex"); + g_defcodelabel (L); + AddCodeLine ("dea"); + } else if ((val & 0xFF) != 0) { unsigned L = GetLocalLabel(); AddCodeLine ("sec"); AddCodeLine ("sbc #$%02X", (unsigned char) val); From 076137f41b01f8ca4da5fe2b5242b156c769dd36 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 12 Nov 2023 22:35:24 +0100 Subject: [PATCH 2263/2710] Optimize lda/sta/lda and friends --- src/cc65/codeopt.c | 3 +++ src/cc65/coptind.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++ src/cc65/coptind.h | 3 +++ 3 files changed, 60 insertions(+) diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index baa44f99e..3a2c2a35d 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -197,6 +197,7 @@ static OptFunc DOptStore3 = { OptStore3, "OptStore3", 120, 0, static OptFunc DOptStore4 = { OptStore4, "OptStore4", 50, 0, 0, 0, 0, 0 }; static OptFunc DOptStore5 = { OptStore5, "OptStore5", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptStoreLoad = { OptStoreLoad, "OptStoreLoad", 0, 0, 0, 0, 0, 0 }; +static OptFunc DOptLoadStoreLoad= { OptLoadStoreLoad,"OptLoadStoreLoad", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptSub1 = { OptSub1, "OptSub1", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptSub2 = { OptSub2, "OptSub2", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptSub3 = { OptSub3, "OptSub3", 100, 0, 0, 0, 0, 0 }; @@ -307,6 +308,7 @@ static OptFunc* OptFuncs[] = { &DOptStore4, &DOptStore5, &DOptStoreLoad, + &DOptLoadStoreLoad, &DOptSub1, &DOptSub2, &DOptSub3, @@ -723,6 +725,7 @@ static unsigned RunOptGroup3 (CodeSeg* S) C += RunOptFunc (S, &DOptUnusedStores, 1); C += RunOptFunc (S, &DOptDupLoads, 1); C += RunOptFunc (S, &DOptStoreLoad, 1); + C += RunOptFunc (S, &DOptLoadStoreLoad, 1); C += RunOptFunc (S, &DOptTransfers1, 1); C += RunOptFunc (S, &DOptTransfers3, 1); C += RunOptFunc (S, &DOptTransfers4, 1); diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index a080cfb20..9e9985c10 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -581,6 +581,60 @@ unsigned OptStoreLoad (CodeSeg* S) +unsigned OptLoadStoreLoad (CodeSeg* S) +/* Search for the sequence +** +** ld. xx +** st. yy +** ld. xx +** +** and remove the useless load. +*/ +{ + unsigned Changes = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* L[3]; + + /* Get next entry */ + L[0] = CS_GetEntry (S, I); + + /* Check for the sequence */ + if ((L[0]->OPC == OP65_LDA || + L[0]->OPC == OP65_LDX || + L[0]->OPC == OP65_LDY) && + (L[0]->AM == AM65_ABS || L[0]->AM == AM65_ZP) && + !CS_RangeHasLabel (S, I+1, 3) && + CS_GetEntries (S, L+1, I+1, 2) && + (L[1]->OPC == OP65_STA || + L[1]->OPC == OP65_STX || + L[1]->OPC == OP65_STY) && + L[2]->OPC == L[0]->OPC && + L[2]->AM == L[0]->AM && + strcmp (L[0]->Arg, L[2]->Arg) == 0) { + + /* Remove the second load */ + CS_DelEntries (S, I+2, 1); + + /* Remember, we had changes */ + ++Changes; + + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + + + unsigned OptTransfers1 (CodeSeg* S) /* Remove transfers from one register to another and back */ { diff --git a/src/cc65/coptind.h b/src/cc65/coptind.h index c7ecf4194..6d39ee1f8 100644 --- a/src/cc65/coptind.h +++ b/src/cc65/coptind.h @@ -64,6 +64,9 @@ unsigned OptDupLoads (CodeSeg* S); unsigned OptStoreLoad (CodeSeg* S); /* Remove a store followed by a load from the same location. */ +unsigned OptLoadStoreLoad (CodeSeg* S); +/* Remove a load, store followed by a reload of the same location. */ + unsigned OptTransfers1 (CodeSeg* S); /* Remove transfers from one register to another and back */ From b3eca512643ceab4790959c962e85d9678da3e8f Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 12 Nov 2023 22:48:58 +0100 Subject: [PATCH 2264/2710] Add int decrement tests --- test/val/sub3.c | 192 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 test/val/sub3.c diff --git a/test/val/sub3.c b/test/val/sub3.c new file mode 100644 index 000000000..2a3646f9a --- /dev/null +++ b/test/val/sub3.c @@ -0,0 +1,192 @@ +/* + !!DESCRIPTION!! Subtraction Test + !!ORIGIN!! SDCC regression tests + !!LICENCE!! GPL, read COPYING.GPL +*/ + +#include <stdio.h> +#include <limits.h> + +unsigned char failures=0; + +int int0 = 5; +unsigned int int1 = 5; + +void pre_dec_test(void) +{ + if(int0 != 5) + failures++; + if(int1 != 5) + failures++; + + --int0; + --int1; + + if(int0 != 4) + failures++; + if(int1 != 4) + failures++; + + --int0; + --int1; + --int0; + --int1; + --int0; + --int1; + --int0; + --int1; + + if(int0 != 0) + failures++; + if(int1 != 0) + failures++; + + --int0; + --int1; + + if(int0 != -1) + failures++; + if(int1 != 65535U) + failures++; +} + +void post_dec_test(void) +{ + if(int0 != 5) + failures++; + if(int1 != 5) + failures++; + + int0--; + int1--; + + if(int0 != 4) + failures++; + if(int1 != 4) + failures++; + + int0--; + int1--; + int0--; + int1--; + int0--; + int1--; + int0--; + int1--; + + if(int0 != 0) + failures++; + if(int1 != 0) + failures++; + + int0--; + int1--; + + if(int0 != -1) + failures++; + if(int1 != 65535U) + failures++; +} + +void pre_dec_assign_test(void) +{ + int a; + unsigned int b; + if(int0 != 5) + failures++; + if(int1 != 5) + failures++; + + a = --int0; + b = --int1; + + if(int0 != 4 || a != int0) + failures++; + if(int1 != 4 || b != int1) + failures++; + + a = --int0; + b = --int1; + a = --int0; + b = --int1; + a = --int0; + b = --int1; + a = --int0; + b = --int1; + + if(int0 != 0 || a != int0) + failures++; + if(int1 != 0 || b != int1) + failures++; + + a = --int0; + b = --int1; + + if(int0 != -1 || a != int0) + failures++; + if(int1 != 65535U || b != int1) + failures++; +} + +void post_dec_assign_test(void) +{ + int a; + unsigned int b; + if(int0 != 5) + failures++; + if(int1 != 5) + failures++; + + a = int0--; + b = int1--; + + if(int0 != 4 || a != 5) + failures++; + if(int1 != 4 || b != 5) + failures++; + + a = int0--; + b = int1--; + a = int0--; + b = int1--; + a = int0--; + b = int1--; + a = int0--; + b = int1--; + + if(int0 != 0 || a != 1) + failures++; + if(int1 != 0 || b != 1) + failures++; + + a = int0--; + b = int1--; + + if(int0 != -1 || a != 0) + failures++; + if(int1 != 65535U || b != 0) + failures++; +} + +int main(void) +{ + int0 = 5; + int1 = 5; + pre_dec_test(); + + int0 = 5; + int1 = 5; + post_dec_test(); + + int0 = 5; + int1 = 5; + pre_dec_assign_test(); + + int0 = 5; + int1 = 5; + post_dec_assign_test(); + + printf("failures: %d\n",failures); + + return failures; +} From 913ab3607fc95e8448c6004fb0348ceb351622cb Mon Sep 17 00:00:00 2001 From: Ryan Carsten Schmidt <git@ryandesign.com> Date: Tue, 14 Nov 2023 00:22:36 -0600 Subject: [PATCH 2265/2710] Fix typo --- doc/sim65.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sim65.sgml b/doc/sim65.sgml index b1e5afbdc..c2740bbad 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -49,7 +49,7 @@ which is limited to an 8-bit result 0-255. An error in sim65, like bad arguments or an internal problem will exit with <tt/1/. -A timeout from <tt/-x/ will exist with <tt/2/. +A timeout from <tt/-x/ will exit with <tt/2/. <sect1>Command line options in detail<p> From e9e3cd969e6059aa2baa659bce695fa71fd91c87 Mon Sep 17 00:00:00 2001 From: Ryan Carsten Schmidt <git@ryandesign.com> Date: Tue, 14 Nov 2023 00:57:07 -0600 Subject: [PATCH 2266/2710] Fix typos; other copyediting --- doc/da65.sgml | 52 +++++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/doc/da65.sgml b/doc/da65.sgml index 3a01ce4f5..113eb6f97 100644 --- a/doc/da65.sgml +++ b/doc/da65.sgml @@ -184,7 +184,7 @@ Here is a description of all the command line options: <label id="option--mnemonic-column"> <tag><tt>--mnemonic-column n</tt></tag> - Specifies the column where a mnemonic or pseudo instrcuction is output. + Specifies the column where a mnemonic or pseudo instruction is output. <label id="option--pagelength"> @@ -283,7 +283,7 @@ Some instructions may generate labels in the first pass, while most other instructions do not generate labels, but use them if they are available. Among others, the branch and jump instructions will generate labels for the target of the branch in the first pass. External labels (taken from the info file) -have precedence over internally generated ones, They must be valid identifiers +have precedence over internally generated ones. They must be valid identifiers as specified for the ca65 assembler. Internal labels (generated by the disassembler) have the form <tt/Labcd/, where <tt/abcd/ is the hexadecimal address of the label in upper case letters. You should probably avoid using @@ -304,7 +304,7 @@ name="next section"> for more information. The info file contains lists of specifications grouped together. Each group directive has an identifying token and an attribute list enclosed in curly braces. Attributes have a name followed by a value. The syntax of the value -depends on the type of the attribute. String attributes are places in double +depends on the type of the attribute. String attributes are placed in double quotes, numeric attributes may be specified as decimal numbers or hexadecimal with a leading dollar sign. There are also attributes where the attribute value is a keyword; in this case, the keyword is given as-is (without quotes or @@ -317,8 +317,8 @@ anything). Each attribute is terminated by a semicolon. <sect1>Comments<p> -Comments start with a hash mark (<tt/#/) or a double slash (<tt>//</tt>); -and, extend from the position of the mark to the end of the current line. +Comments start with a hash mark (<tt/#/) or a double slash (<tt>//</tt>) +and extend from the position of the mark to the end of the current line. Hash marks or double slashes inside of strings will <em/not/ start a comment, of course. @@ -359,20 +359,20 @@ following attributes are recognized: <tag><tt/HEXOFFS/</tag> - The attribute is followed by a boolean value. If true, offsets to labels are + This attribute is followed by a boolean value. If true, offsets to labels are output in hex, otherwise they're output in decimal notation. The default is false. The attribute may be changed on the command line using the <tt><ref id="option--hexoffs" name="--hexoffs"></tt> option. <tag><tt/INPUTNAME/</tag> - The attribute is followed by a string value, which gives the name of the + This attribute is followed by a string value, which gives the name of the input file to read. If it is present, the disassembler does not accept an input file name on the command line. <tag><tt/INPUTOFFS/</tag> - The attribute is followed by a numerical value that gives an offset into + This attribute is followed by a numerical value that gives an offset into the input file which is skipped before reading data. The attribute may be used to skip headers or unwanted code sections in the input file. @@ -412,7 +412,7 @@ following attributes are recognized: <label id="OUTPUTNAME"> <tag><tt/OUTPUTNAME/</tag> - The attribute is followed by string value, which gives the name of the + This attribute is followed by string value, which gives the name of the output file to write. If it is present, specification of an output file on the command line using the <tt><ref id="option-o" name="-o"></tt> option is not allowed. @@ -433,8 +433,8 @@ following attributes are recognized: This attribute may be used instead of the <tt><ref id="option--start-addr" name="--start-addr"></tt> option on the command line. It takes a numerical parameter. The default for the start address is $10000 minus the size of - the input file (this assumes that the input file is a ROM that contains the - reset and irq vectors). + the input file. (This assumes that the input file is a ROM that contains the + reset and irq vectors.) <tag><tt/TEXTCOLUMN/</tag> @@ -468,7 +468,7 @@ following attributes are recognized: <tag><tt>NAME</tt></tag> This is a convenience attribute. It takes a string argument and will cause the disassembler to define a label for the start of the range with the - given name. So a separate <tt><ref id="infofile-label" name="LABEL"></tt> + given name so a separate <tt><ref id="infofile-label" name="LABEL"></tt> directive is not needed. <tag><tt>START</tt></tag> @@ -509,8 +509,8 @@ following attributes are recognized: <tag><tt>SKIP</tt></tag> The range is simply ignored when generating the output file. Please note that this means that reassembling the output file will <em/not/ generate - the original file, not only because the missing piece in between, but also - because the following code will be located on wrong addresses. Output + the original file, not only because of the missing piece in between, but + also because the following code will be located on wrong addresses. Output generated with <tt/SKIP/ ranges will need manual rework. <tag><tt>TEXTTABLE</tt></tag> @@ -529,7 +529,7 @@ following attributes are recognized: <tag><tt>ADDRMODE</tt></tag> When disassembling 65816 code, this specifies the M and X flag states - for this range. It's a string argument of the form "mx", capital letters + for this range. It's a string argument of the form "mx". Capital letters mean the flag is enabled. </descrip> @@ -561,9 +561,9 @@ code. The following attributes are recognized: <tag><tt>NAME</tt></tag> The attribute is followed by a string value which gives the name of the - label. Empty names are allowed, in this case the disassembler will create - an unnamed label (see the assembler docs for more information about unnamed - labels). + label. Empty names are allowed; in this case the disassembler will create + an unnamed label. (See the assembler docs for more information about unnamed + labels.) <tag><tt>SIZE</tt></tag> This attribute is optional and may be used to specify the size of the data @@ -595,15 +595,18 @@ disassembled code. The following attributes are recognized: <descrip> <tag><tt>START</tt></tag> - Followed by a numerical value. Specifies the start address of the segment. + This attribute is followed by a numerical value which specifies the start + address of the segment. <tag><tt>END</tt></tag> - Followed by a numerical value. Specifies the end address of the segment. The - end address is the last address that is a part of the segment. + This attribute is followed by a numerical value which specifies the end + address of the segment. The end address is the last address that is a part of + the segment. <tag><tt>NAME</tt></tag> - The attribute is followed by a string value which gives the name of the + This attribute is followed by a string value which gives the name of the segment. + </descrip> All attributes are mandatory. Segments must not overlap. The disassembler will @@ -635,10 +638,11 @@ The following attributes are recognized: <descrip> <tag><tt>FILE</tt></tag> - Followed by a string value. Specifies the name of the file to read. + This attribute is followed by a string value. It specifies the name of the + file to read. <tag><tt>COMMENTSTART</tt></tag> - The optional attribute is followed by a character constant. It specifies the + This optional attribute is followed by a character constant. It specifies the character that starts a comment. The default value is a semicolon. This value is ignored if <tt/IGNOREUNKNOWN/ is true. From 5332eeecc24cfca8777471fd3839f26579b8e52e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 15 Nov 2023 18:17:36 +0800 Subject: [PATCH 2267/2710] Fixed empty declarations in structs/unions. --- src/cc65/declare.c | 120 +++++++++++++++++++++++------------------- test/val/bug2018-ok.c | 10 ++++ 2 files changed, 76 insertions(+), 54 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index ccea0098a..6615998ce 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -983,33 +983,36 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) /* Check for a bit-field declaration */ FieldWidth = ParseFieldWidth (&Decl); - /* Ignore zero sized bit fields in a union */ - if (FieldWidth == 0) { - goto NextMember; - } - - /* Check for fields without a name */ + /* Check for fields without names */ if (Decl.Ident[0] == '\0') { - /* In cc65 mode, we allow anonymous structs/unions within - ** a union. - */ - if (IS_Get (&Standard) >= STD_CC65 && IsClassStruct (Decl.Type)) { - /* This is an anonymous struct or union */ - AnonFieldName (Decl.Ident, GetBasicTypeName (Decl.Type), UnionTagEntry->V.S.ACount); + if (FieldWidth < 0) { + /* In cc65 mode, we allow anonymous structs/unions within + ** a union. + */ + SymEntry* TagEntry; + if (IS_Get (&Standard) >= STD_CC65 && + IsClassStruct (Decl.Type) && + (TagEntry = GetESUTagSym (Decl.Type)) && + SymHasAnonName (TagEntry)) { + /* This is an anonymous struct or union */ + AnonFieldName (Decl.Ident, GetBasicTypeName (Decl.Type), UnionTagEntry->V.S.ACount); - /* Ignore CVR qualifiers */ - if (IsQualConst (Decl.Type) || IsQualVolatile (Decl.Type) || IsQualRestrict (Decl.Type)) { - Warning ("Anonymous %s qualifiers are ignored", GetBasicTypeName (Decl.Type)); - Decl.Type[0].C &= ~T_QUAL_CVR; + /* Ignore CVR qualifiers */ + if (IsQualConst (Decl.Type) || IsQualVolatile (Decl.Type) || IsQualRestrict (Decl.Type)) { + Warning ("Anonymous %s qualifiers are ignored", GetBasicTypeName (Decl.Type)); + Decl.Type[0].C &= ~T_QUAL_CVR; + } + } else { + /* A non bit-field without a name is legal but useless */ + Warning ("Declaration does not declare anything"); + + goto NextMember; } - } else { - /* A non bit-field without a name is legal but useless */ - Warning ("Declaration does not declare anything"); + } else if (FieldWidth > 0) { + /* A bit-field without a name will get an anonymous one */ + AnonName (Decl.Ident, "bit-field"); } - } - - /* Check for incomplete types including 'void' */ - if (IsIncompleteType (Decl.Type)) { + } else if (IsIncompleteType (Decl.Type)) { Error ("Field '%s' has incomplete type '%s'", Decl.Ident, GetFullTypeName (Decl.Type)); @@ -1020,6 +1023,11 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) Flags |= SC_HAVECONST; } + /* Ignore zero sized bit fields in a union */ + if (FieldWidth == 0) { + goto NextMember; + } + /* Handle sizes */ FieldSize = SizeOf (Decl.Type); if (FieldSize > UnionSize) { @@ -1180,36 +1188,17 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) } } - /* Apart from the above, a bit field with width 0 is not processed - ** further. - */ - if (FieldWidth == 0) { - goto NextMember; - } - - /* Check if this field is a flexible array member, and - ** calculate the size of the field. - */ - if (IsTypeArray (Decl.Type) && GetElementCount (Decl.Type) == UNSPECIFIED) { - /* Array with unspecified size */ - if (StructSize == 0) { - Error ("Flexible array member cannot be first struct field"); - } - FlexibleMember = 1; - Flags |= SC_HAVEFAM; - - /* Assume zero for size calculations */ - SetElementCount (Decl.Type, FLEXIBLE); - } - /* Check for fields without names */ if (Decl.Ident[0] == '\0') { if (FieldWidth < 0) { /* In cc65 mode, we allow anonymous structs/unions within ** a struct. */ - if (IS_Get (&Standard) >= STD_CC65 && IsClassStruct (Decl.Type)) { - + SymEntry* TagEntry; + if (IS_Get (&Standard) >= STD_CC65 && + IsClassStruct (Decl.Type) && + (TagEntry = GetESUTagSym (Decl.Type)) && + SymHasAnonName (TagEntry)) { /* This is an anonymous struct or union */ AnonFieldName (Decl.Ident, GetBasicTypeName (Decl.Type), StructTagEntry->V.S.ACount); @@ -1221,18 +1210,34 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) } else { /* A non bit-field without a name is legal but useless */ Warning ("Declaration does not declare anything"); + + goto NextMember; } - } else { + } else if (FieldWidth > 0) { /* A bit-field without a name will get an anonymous one */ AnonName (Decl.Ident, "bit-field"); } - } + } else { + /* Check if this field is a flexible array member, and + ** calculate the size of the field. + */ + if (IsTypeArray (Decl.Type) && GetElementCount (Decl.Type) == UNSPECIFIED) { + /* Array with unspecified size */ + if (StructSize == 0) { + Error ("Flexible array member cannot be first struct field"); + } + FlexibleMember = 1; + Flags |= SC_HAVEFAM; - /* Check for incomplete types including 'void' */ - if (IsIncompleteType (Decl.Type)) { - Error ("Field '%s' has incomplete type '%s'", - Decl.Ident, - GetFullTypeName (Decl.Type)); + /* Assume zero for size calculations */ + SetElementCount (Decl.Type, FLEXIBLE); + } + + if (IsIncompleteType (Decl.Type)) { + Error ("Field '%s' has incomplete type '%s'", + Decl.Ident, + GetFullTypeName (Decl.Type)); + } } /* Check for const types */ @@ -1240,6 +1245,13 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) Flags |= SC_HAVECONST; } + /* Apart from the above, a bit field with width 0 is not processed + ** further. + */ + if (FieldWidth == 0) { + goto NextMember; + } + /* Add a field entry to the table */ if (FieldWidth > 0) { /* Full bytes have already been added to the StructSize, diff --git a/test/val/bug2018-ok.c b/test/val/bug2018-ok.c index 7046e1d1f..567beb301 100644 --- a/test/val/bug2018-ok.c +++ b/test/val/bug2018-ok.c @@ -5,6 +5,11 @@ unsigned failures; struct X { + const int; /* Useless empty declaration */ + const void; /* Useless empty declaration */ + const struct U; /* Useless(?) declaration */ + const struct V { int a; }; /* Useless(?) declaration */ + const struct { /* Qualifier ignored in cc65 */ int a; }; @@ -14,6 +19,11 @@ struct X { }; union Y { + const int; /* Useless empty declaration */ + const void; /* Useless empty declaration */ + const union W; /* Useless(?) declaration */ + const union T { int a; }; /* Useless(?) declaration */ + const struct { /* Qualifier ignored in cc65 */ int a; }; From f6c3a1b209caaa2f21b5cbd1e1c00d7f9b29d7d7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 15 Nov 2023 21:17:05 +0800 Subject: [PATCH 2268/2710] Removed the extra "'}' expected" error message following a "Excess elements in struct/union initializer" error message. --- src/cc65/initdata.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c index ba1298db3..e9442737c 100644 --- a/src/cc65/initdata.c +++ b/src/cc65/initdata.c @@ -497,7 +497,7 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) if (HasCurly) { Error ("Excess elements in %s initializer", GetBasicTypeName (T)); - SkipInitializer (HasCurly); + SkipInitializer (0); } break; } From 3b7af398a989e876b1e7afb48d6b6a81fcfcb7c9 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 15 Nov 2023 21:32:24 +0800 Subject: [PATCH 2269/2710] Fixed initialization of union when it has an anonymous bit-field as the first member declaration. --- src/cc65/initdata.c | 38 ++++++++++++++++++++------------------ test/val/bitfield-union.c | 9 +++++++-- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c index e9442737c..5401e577c 100644 --- a/src/cc65/initdata.c +++ b/src/cc65/initdata.c @@ -511,18 +511,20 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* This may be an anonymous bit-field, in which case it doesn't ** have an initializer. */ - if (SymIsBitField (TagSym) && (IsAnonName (TagSym->Name))) { - /* Account for the data and output it if we have at least a full - ** byte. We may have more if there was storage unit overlap, for - ** example two consecutive 7 bit fields. Those would be packed - ** into 2 bytes. - */ - SI.ValBits += TagSym->Type->A.B.Width; - CHECK (SI.ValBits <= CHAR_BIT * sizeof(SI.BitVal)); - /* TODO: Generalize this so any type can be used. */ - CHECK (SI.ValBits <= LONG_BITS); - while (SI.ValBits >= CHAR_BITS) { - DefineBitFieldData (&SI); + if (SymIsBitField (TagSym) && IsAnonName (TagSym->Name)) { + if (!IsTypeUnion (T)) { + /* Account for the data and output it if we have at least a full + ** byte. We may have more if there was storage unit overlap, for + ** example two consecutive 7 bit fields. Those would be packed + ** into 2 bytes. + */ + SI.ValBits += TagSym->Type->A.B.Width; + CHECK (SI.ValBits <= CHAR_BIT * sizeof(SI.BitVal)); + /* TODO: Generalize this so any type can be used. */ + CHECK (SI.ValBits <= LONG_BITS); + while (SI.ValBits >= CHAR_BITS) { + DefineBitFieldData (&SI); + } } /* Avoid consuming the comma if any */ goto NextMember; @@ -628,15 +630,15 @@ static unsigned ParseStructInit (Type* T, int* Braces, int AllowFlexibleMembers) /* Skip the comma next round */ SkipComma = 1; -NextMember: - /* Next member. For unions, only the first one can be initialized */ + /* For unions, only the first named member can be initialized */ if (IsTypeUnion (T)) { - /* Union */ TagSym = 0; - } else { - /* Struct */ - TagSym = TagSym->NextSym; + continue; } + +NextMember: + /* Next member */ + TagSym = TagSym->NextSym; } if (HasCurly) { diff --git a/test/val/bitfield-union.c b/test/val/bitfield-union.c index 1fd201456..4c01d2183 100644 --- a/test/val/bitfield-union.c +++ b/test/val/bitfield-union.c @@ -1,5 +1,5 @@ /* - Copyright 2020 The cc65 Authors + Copyright 2020-2023 The cc65 Authors This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -25,6 +25,7 @@ #include <stdio.h> typedef union { + const unsigned int : 1; unsigned int bf; struct { @@ -38,8 +39,12 @@ static unsigned char failures = 0; int main (void) { - bitfield_t bitfield = {0}; + bitfield_t bitfield = { 42 }; + printf ("Bitfield: %u\n", bitfield.bf); + if (bitfield.bf != 42) failures++; + + bitfield.bf ^= 42; printf ("Bitfield: %u\n", bitfield.bf); if (bitfield.bf != 0) failures++; From b17c4d3434682e0797fbb6d2c2e24c4e957efbcb Mon Sep 17 00:00:00 2001 From: rumbledethumps <16963588+rumbledethumps@users.noreply.github.com> Date: Thu, 16 Nov 2023 18:46:16 -0800 Subject: [PATCH 2270/2710] add rp6502 target --- asminc/rp6502.inc | 101 ++++++++++++++ cfg/rp6502.cfg | 42 ++++++ include/rp6502.h | 246 +++++++++++++++++++++++++++++++++++ libsrc/Makefile | 1 + libsrc/rp6502/close.c | 16 +++ libsrc/rp6502/codepage.c | 14 ++ libsrc/rp6502/crt0.s | 54 ++++++++ libsrc/rp6502/getres.c | 18 +++ libsrc/rp6502/gettime.c | 20 +++ libsrc/rp6502/gettimespec.c | 22 ++++ libsrc/rp6502/gettimezone.c | 24 ++++ libsrc/rp6502/initenv.s | 16 +++ libsrc/rp6502/irq.s | 51 ++++++++ libsrc/rp6502/lrand.c | 14 ++ libsrc/rp6502/lseek.c | 19 +++ libsrc/rp6502/mainargs.s | 16 +++ libsrc/rp6502/open.c | 26 ++++ libsrc/rp6502/oserrlist.s | 86 ++++++++++++ libsrc/rp6502/oserror.s | 66 ++++++++++ libsrc/rp6502/phi2.c | 14 ++ libsrc/rp6502/randomize.c | 16 +++ libsrc/rp6502/read.c | 31 +++++ libsrc/rp6502/read_xram.c | 17 +++ libsrc/rp6502/read_xstack.c | 22 ++++ libsrc/rp6502/ria.s | 90 +++++++++++++ libsrc/rp6502/settime.c | 18 +++ libsrc/rp6502/stdin_opt.c | 16 +++ libsrc/rp6502/sysremove.c | 26 ++++ libsrc/rp6502/sysrename.c | 32 +++++ libsrc/rp6502/write.c | 31 +++++ libsrc/rp6502/write_xram.c | 17 +++ libsrc/rp6502/write_xstack.c | 20 +++ libsrc/rp6502/xreg.s | 40 ++++++ src/ca65/main.c | 4 + src/cc65/main.c | 4 + src/common/target.c | 2 + src/common/target.h | 1 + 37 files changed, 1253 insertions(+) create mode 100644 asminc/rp6502.inc create mode 100644 cfg/rp6502.cfg create mode 100644 include/rp6502.h create mode 100644 libsrc/rp6502/close.c create mode 100644 libsrc/rp6502/codepage.c create mode 100644 libsrc/rp6502/crt0.s create mode 100644 libsrc/rp6502/getres.c create mode 100644 libsrc/rp6502/gettime.c create mode 100644 libsrc/rp6502/gettimespec.c create mode 100644 libsrc/rp6502/gettimezone.c create mode 100644 libsrc/rp6502/initenv.s create mode 100644 libsrc/rp6502/irq.s create mode 100644 libsrc/rp6502/lrand.c create mode 100644 libsrc/rp6502/lseek.c create mode 100644 libsrc/rp6502/mainargs.s create mode 100644 libsrc/rp6502/open.c create mode 100644 libsrc/rp6502/oserrlist.s create mode 100644 libsrc/rp6502/oserror.s create mode 100644 libsrc/rp6502/phi2.c create mode 100644 libsrc/rp6502/randomize.c create mode 100644 libsrc/rp6502/read.c create mode 100644 libsrc/rp6502/read_xram.c create mode 100644 libsrc/rp6502/read_xstack.c create mode 100644 libsrc/rp6502/ria.s create mode 100644 libsrc/rp6502/settime.c create mode 100644 libsrc/rp6502/stdin_opt.c create mode 100644 libsrc/rp6502/sysremove.c create mode 100644 libsrc/rp6502/sysrename.c create mode 100644 libsrc/rp6502/write.c create mode 100644 libsrc/rp6502/write_xram.c create mode 100644 libsrc/rp6502/write_xstack.c create mode 100644 libsrc/rp6502/xreg.s diff --git a/asminc/rp6502.inc b/asminc/rp6502.inc new file mode 100644 index 000000000..3fa493331 --- /dev/null +++ b/asminc/rp6502.inc @@ -0,0 +1,101 @@ +; Copyright (c) 2023 Rumbledethumps +; +; SPDX-License-Identifier: Zlib +; SPDX-License-Identifier: BSD-3-Clause +; SPDX-License-Identifier: Unlicense + +; RIA UART +RIA_READY := $FFE0 ; TX=$80 RX=$40 +RIA_TX := $FFE1 +RIA_RX := $FFE2 + +; VSYNC from PIX VGA +RIA_VSYNC := $FFE3 + +; RIA XRAM portal 0 +RIA_RW0 := $FFE4 +RIA_STEP0 := $FFE5 +RIA_ADDR0 := $FFE6 + +; RIA XRAM portal 1 +RIA_RW1 := $FFE8 +RIA_STEP1 := $FFE9 +RIA_ADDR1 := $FFEA + +; RIA OS fastcall +RIA_XSTACK := $FFEC +RIA_ERRNO := $FFED +RIA_OP := $FFEF +RIA_IRQ := $FFF0 +RIA_SPIN := $FFF1 +RIA_BUSY := $FFF2 ; Bit $80 +RIA_A := $FFF4 +RIA_X := $FFF6 +RIA_SREG := $FFF8 + +; RIA OS operation numbers +RIA_OP_EXIT := $FF +RIA_OP_ZXSTACK := $00 +RIA_OP_XREG := $01 +RIA_OP_PHI2 := $02 +RIA_OP_CODEPAGE := $03 +RIA_OP_LRAND := $04 +RIA_OP_STDIN_OPT := $05 +RIA_OP_CLOCK_GETRES := $10 +RIA_OP_CLOCK_GETTIME := $11 +RIA_OP_CLOCK_SETTIME := $12 +RIA_OP_CLOCK_GETTIMEZONE := $13 +RIA_OP_OPEN := $14 +RIA_OP_CLOSE := $15 +RIA_OP_READ_XSTACK := $16 +RIA_OP_READ_XRAM := $17 +RIA_OP_WRITE_XSTACK := $18 +RIA_OP_WRITE_XRAM := $19 +RIA_OP_LSEEK := $1A +RIA_OP_UNLINK := $1B +RIA_OP_RENAME := $1C + +; 6522 VIA +VIA := $FFD0 ; VIA base address +VIA_PB := VIA+$0 ; Port register B +VIA_PA1 := VIA+$1 ; Port register A +VIA_PRB := VIA+$0 ; *** Deprecated *** +VIA_PRA := VIA+$1 ; *** Deprecated *** +VIA_DDRB := VIA+$2 ; Data direction register B +VIA_DDRA := VIA+$3 ; Data direction register A +VIA_T1CL := VIA+$4 ; Timer 1, low byte +VIA_T1CH := VIA+$5 ; Timer 1, high byte +VIA_T1LL := VIA+$6 ; Timer 1 latch, low byte +VIA_T1LH := VIA+$7 ; Timer 1 latch, high byte +VIA_T2CL := VIA+$8 ; Timer 2, low byte +VIA_T2CH := VIA+$9 ; Timer 2, high byte +VIA_SR := VIA+$A ; Shift register +VIA_CR := VIA+$B ; Auxiliary control register +VIA_PCR := VIA+$C ; Peripheral control register +VIA_IFR := VIA+$D ; Interrupt flag register +VIA_IER := VIA+$E ; Interrupt enable register +VIA_PA2 := VIA+$F ; Port register A w/o handshake + +; Values in ___oserror are the union of these FatFs errors and errno.inc +.enum + FR_OK = 32 ; Succeeded + FR_DISK_ERR ; A hard error occurred in the low level disk I/O layer + FR_INT_ERR ; Assertion failed + FR_NOT_READY ; The physical drive cannot work + FR_NO_FILE ; Could not find the file + FR_NO_PATH ; Could not find the path + FR_INVALID_NAME ; The path name format is invalid + FR_DENIED ; Access denied due to prohibited access or directory full + FR_EXIST ; Access denied due to prohibited access + FR_INVALID_OBJECT ; The file/directory object is invalid + FR_WRITE_PROTECTED ; The physical drive is write protected + FR_INVALID_DRIVE ; The logical drive number is invalid + FR_NOT_ENABLED ; The volume has no work area + FR_NO_FILESYSTEM ; There is no valid FAT volume + FR_MKFS_ABORTED ; The f_mkfs() aborted due to any problem + FR_TIMEOUT ; Could not get a grant to access the volume within defined period + FR_LOCKED ; The operation is rejected according to the file sharing policy + FR_NOT_ENOUGH_CORE ; LFN working buffer could not be allocated + FR_TOO_MANY_OPEN_FILES ; Number of open files > FF_FS_LOCK + FR_INVALID_PARAMETER ; Given parameter is invalid +.endenum diff --git a/cfg/rp6502.cfg b/cfg/rp6502.cfg new file mode 100644 index 000000000..a3e3b29ce --- /dev/null +++ b/cfg/rp6502.cfg @@ -0,0 +1,42 @@ +# +# Copyright (c) 2023 Rumbledethumps +# +# SPDX-License-Identifier: Zlib +# SPDX-License-Identifier: BSD-3-Clause +# SPDX-License-Identifier: Unlicense +# + +SYMBOLS { + __STARTUP__: type = import; + __STACKSIZE__: type = weak, value = $0800; +} +MEMORY { + ZP: file = "", define = yes, start = $0000, size = $0100; + CPUSTACK: file = "", start = $0100, size = $0100; + RAM: file = %O, define = yes, start = $0200, size = $FD00 - __STACKSIZE__; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp; + STARTUP: load = RAM, type = ro; + LOWCODE: load = RAM, type = ro, optional = yes; + ONCE: load = RAM, type = ro, optional = yes; + CODE: load = RAM, type = ro; + RODATA: load = RAM, type = ro; + DATA: load = RAM, type = rw, define = yes; + BSS: load = RAM, 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/include/rp6502.h b/include/rp6502.h new file mode 100644 index 000000000..0c2ba3881 --- /dev/null +++ b/include/rp6502.h @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#ifndef _RP6502_H +#define _RP6502_H + +/* RP6502 VIA $FFD0-$FFDF */ + +#include <_6522.h> +#define VIA (*(volatile struct __6522 *)0xFFD0) + +/* RP6502 RIA $FFE0-$FFF9 */ + +struct __RP6502 +{ + const unsigned char ready; + unsigned char tx; + const unsigned char rx; + const unsigned char vsync; + unsigned char rw0; + unsigned char step0; + unsigned int addr0; + unsigned char rw1; + unsigned char step1; + unsigned int addr1; + unsigned char xstack; + unsigned char errno_lo; + unsigned char errno_hi; + unsigned char op; + unsigned char irq; + const unsigned char spin; + const unsigned char busy; + const unsigned char lda; + unsigned char a; + const unsigned char ldx; + unsigned char x; + const unsigned char rts; + unsigned int sreg; +}; +#define RIA (*(volatile struct __RP6502 *)0xFFE0) + +#define RIA_READY_TX_BIT 0x80 +#define RIA_READY_RX_BIT 0x40 +#define RIA_BUSY_BIT 0x80 + +/* XSTACK helpers */ + +void __fastcall__ ria_push_long(unsigned long val); +void __fastcall__ ria_push_int(unsigned int val); +#define ria_push_char(v) RIA.xstack = v + +long __fastcall__ ria_pop_long(void); +int __fastcall__ ria_pop_int(void); +#define ria_pop_char() RIA.xstack + +/* Set the RIA fastcall register */ + +void __fastcall__ ria_set_axsreg(unsigned long axsreg); +void __fastcall__ ria_set_ax(unsigned int ax); +#define ria_set_a(v) RIA.a = v + +/* Run an OS operation */ + +int __fastcall__ ria_call_int(unsigned char op); +long __fastcall__ ria_call_long(unsigned char op); + +/* These run _mappederrno() on error */ + +int __fastcall__ ria_call_int_errno(unsigned char op); +long __fastcall__ ria_call_long_errno(unsigned char op); + +/* OS operation numbers */ + +#define RIA_OP_EXIT 0xFF +#define RIA_OP_ZXSTACK 0x00 +#define RIA_OP_XREG 0x01 +#define RIA_OP_PHI2 0x02 +#define RIA_OP_CODEPAGE 0x03 +#define RIA_OP_LRAND 0x04 +#define RIA_OP_STDIN_OPT 0x05 +#define RIA_OP_CLOCK_GETRES 0x10 +#define RIA_OP_CLOCK_GETTIME 0x11 +#define RIA_OP_CLOCK_SETTIME 0x12 +#define RIA_OP_CLOCK_GETTIMEZONE 0x13 +#define RIA_OP_OPEN 0x14 +#define RIA_OP_CLOSE 0x15 +#define RIA_OP_READ_XSTACK 0x16 +#define RIA_OP_READ_XRAM 0x17 +#define RIA_OP_WRITE_XSTACK 0x18 +#define RIA_OP_WRITE_XRAM 0x19 +#define RIA_OP_LSEEK 0x1A +#define RIA_OP_UNLINK 0x1B +#define RIA_OP_RENAME 0x1C + +/* C API for the operating system. */ + +int __cdecl__ xreg(char device, char channel, unsigned char address, ...); +int __fastcall__ phi2(void); +int __fastcall__ codepage(void); +long __fastcall__ lrand(void); +int __fastcall__ stdin_opt(unsigned long ctrl_bits, unsigned char str_length); +int __fastcall__ read_xstack(void *buf, unsigned count, int fildes); +int __fastcall__ read_xram(unsigned buf, unsigned count, int fildes); +int __fastcall__ write_xstack(const void *buf, unsigned count, int fildes); +int __fastcall__ write_xram(unsigned buf, unsigned count, int fildes); + +/* XREG location helpers */ + +#define xreg_ria_keyboard(...) xreg(0, 0, 0, __VA_ARGS__) +#define xreg_ria_mouse(...) xreg(0, 0, 1, __VA_ARGS__) +#define xreg_vga_canvas(...) xreg(1, 0, 0, __VA_ARGS__) +#define xreg_vga_mode(...) xreg(1, 0, 1, __VA_ARGS__) + +/* XRAM structure helpers */ + +#define xram0_struct_set(addr, type, member, val) \ + RIA.addr0 = (unsigned)(&((type *)0)->member) + (unsigned)addr; \ + switch (sizeof(((type *)0)->member)) \ + { \ + case 1: \ + RIA.rw0 = val; \ + break; \ + case 2: \ + RIA.step0 = 1; \ + RIA.rw0 = val & 0xff; \ + RIA.rw0 = (val >> 8) & 0xff; \ + break; \ + case 4: \ + RIA.step0 = 1; \ + RIA.rw0 = (unsigned long)val & 0xff; \ + RIA.rw0 = ((unsigned long)val >> 8) & 0xff; \ + RIA.rw0 = ((unsigned long)val >> 16) & 0xff; \ + RIA.rw0 = ((unsigned long)val >> 24) & 0xff; \ + break; \ + } + +#define xram1_struct_set(addr, type, member, val) \ + RIA.addr1 = (unsigned)(&((type *)0)->member) + (unsigned)addr; \ + switch (sizeof(((type *)0)->member)) \ + { \ + case 1: \ + RIA.rw1 = val; \ + break; \ + case 2: \ + RIA.step1 = 1; \ + RIA.rw1 = val & 0xff; \ + RIA.rw1 = (val >> 8) & 0xff; \ + break; \ + case 4: \ + RIA.step1 = 1; \ + RIA.rw1 = (unsigned long)val & 0xff; \ + RIA.rw1 = ((unsigned long)val >> 8) & 0xff; \ + RIA.rw1 = ((unsigned long)val >> 16) & 0xff; \ + RIA.rw1 = ((unsigned long)val >> 24) & 0xff; \ + break; \ + } + +typedef struct +{ + unsigned char x_wrap; // bool + unsigned char y_wrap; // bool + int x_pos_px; + int y_pos_px; + int width_chars; + int height_chars; + unsigned xram_data_ptr; + unsigned xram_palette_ptr; + unsigned xram_font_ptr; +} vga_mode1_config_t; + +typedef struct +{ + unsigned char x_wrap; // bool + unsigned char y_wrap; // bool + int x_pos_px; + int y_pos_px; + int width_tiles; + int height_tiles; + unsigned xram_data_ptr; + unsigned xram_palette_ptr; + unsigned xram_tile_ptr; +} vga_mode2_config_t; + +typedef struct +{ + unsigned char x_wrap; // bool + unsigned char y_wrap; // bool + int x_pos_px; + int y_pos_px; + int width_px; + int height_px; + unsigned xram_data_ptr; + unsigned xram_palette_ptr; +} vga_mode3_config_t; + +typedef struct +{ + int x_pos_px; + int y_pos_px; + unsigned xram_sprite_ptr; + unsigned char log_size; + unsigned char has_opacity_metadata; // bool +} vga_mode4_sprite_t; + +typedef struct +{ + int transform[6]; + int x_pos_px; + int y_pos_px; + unsigned xram_sprite_ptr; + unsigned char log_size; + unsigned char has_opacity_metadata; // bool +} vga_mode4_asprite_t; + +/* Values in __oserror are the union of these FatFs errors and errno.h */ + +typedef enum +{ + FR_OK = 32, /* Succeeded */ + FR_DISK_ERR, /* A hard error occurred in the low level disk I/O layer */ + FR_INT_ERR, /* Assertion failed */ + FR_NOT_READY, /* The physical drive cannot work */ + FR_NO_FILE, /* Could not find the file */ + FR_NO_PATH, /* Could not find the path */ + FR_INVALID_NAME, /* The path name format is invalid */ + FR_DENIED, /* Access denied due to prohibited access or directory full */ + FR_EXIST, /* Access denied due to prohibited access */ + FR_INVALID_OBJECT, /* The file/directory object is invalid */ + FR_WRITE_PROTECTED, /* The physical drive is write protected */ + FR_INVALID_DRIVE, /* The logical drive number is invalid */ + FR_NOT_ENABLED, /* The volume has no work area */ + FR_NO_FILESYSTEM, /* There is no valid FAT volume */ + FR_MKFS_ABORTED, /* The f_mkfs() aborted due to any problem */ + FR_TIMEOUT, /* Could not get a grant to access the volume within defined period */ + FR_LOCKED, /* The operation is rejected according to the file sharing policy */ + FR_NOT_ENOUGH_CORE, /* LFN working buffer could not be allocated */ + FR_TOO_MANY_OPEN_FILES, /* Number of open files > FF_FS_LOCK */ + FR_INVALID_PARAMETER /* Given parameter is invalid */ +} FRESULT; + +#endif /* _RP6502_H */ diff --git a/libsrc/Makefile b/libsrc/Makefile index cf7389d51..8a4f11414 100644 --- a/libsrc/Makefile +++ b/libsrc/Makefile @@ -33,6 +33,7 @@ TARGETS = apple2 \ none \ osic1p \ pce \ + rp6502 \ sim6502 \ sim65c02 \ supervision \ diff --git a/libsrc/rp6502/close.c b/libsrc/rp6502/close.c new file mode 100644 index 000000000..1fdc40545 --- /dev/null +++ b/libsrc/rp6502/close.c @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> +#include <errno.h> + +int __fastcall__ close(int fd) +{ + ria_set_ax(fd); + return ria_call_int_errno(RIA_OP_CLOSE); +} diff --git a/libsrc/rp6502/codepage.c b/libsrc/rp6502/codepage.c new file mode 100644 index 000000000..c0914651d --- /dev/null +++ b/libsrc/rp6502/codepage.c @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> + +int __fastcall__ codepage(void) +{ + return ria_call_int(RIA_OP_CODEPAGE); +} diff --git a/libsrc/rp6502/crt0.s b/libsrc/rp6502/crt0.s new file mode 100644 index 000000000..e6406fe5e --- /dev/null +++ b/libsrc/rp6502/crt0.s @@ -0,0 +1,54 @@ +; Copyright (c) 2023 Rumbledethumps +; +; SPDX-License-Identifier: Zlib +; SPDX-License-Identifier: BSD-3-Clause +; SPDX-License-Identifier: Unlicense + +; Boilerplate crt0.s + +.export _init, _exit +.import _main + +.export __STARTUP__ : absolute = 1 +.import __RAM_START__, __RAM_SIZE__ + +.import copydata, zerobss, initlib, donelib + +.include "rp6502.inc" +.include "zeropage.inc" + +.segment "STARTUP" + +; Essential 6502 startup the CPU doesn't do +_init: + ldx #$FF + txs + cld + +; Set cc65 argument stack pointer + lda #<(__RAM_START__ + __RAM_SIZE__) + sta sp + lda #>(__RAM_START__ + __RAM_SIZE__) + sta sp+1 + +; Initialize memory storage + jsr zerobss ; Clear BSS segment + jsr copydata ; Initialize DATA segment + jsr initlib ; Run constructors + +; Call main() + jsr _main + +; Back from main() also the _exit entry +; Stack the exit value in case destructors call OS +_exit: + phx + pha + jsr donelib ; Run destructors + pla + sta RIA_A + plx + stx RIA_X + lda #$FF ; exit() + sta RIA_OP + stp diff --git a/libsrc/rp6502/getres.c b/libsrc/rp6502/getres.c new file mode 100644 index 000000000..c60bbd38d --- /dev/null +++ b/libsrc/rp6502/getres.c @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> +#include <time.h> + +extern int __clock_gettimespec(struct timespec *ts, unsigned char op); + +int clock_getres(clockid_t clock_id, struct timespec *res) +{ + ria_set_ax(clock_id); + return __clock_gettimespec(res, RIA_OP_CLOCK_GETRES); +} diff --git a/libsrc/rp6502/gettime.c b/libsrc/rp6502/gettime.c new file mode 100644 index 000000000..b40615e9e --- /dev/null +++ b/libsrc/rp6502/gettime.c @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> +#include <time.h> + +extern int __clock_gettimespec(struct timespec *ts, unsigned char op); + +int clock_gettime(clockid_t clock_id, struct timespec *tp) +{ + (void)clock_id; + /* time.s doesn't set the stack value for clock_id (bug?) */ + ria_set_ax(CLOCK_REALTIME); + return __clock_gettimespec(tp, RIA_OP_CLOCK_GETTIME); +} diff --git a/libsrc/rp6502/gettimespec.c b/libsrc/rp6502/gettimespec.c new file mode 100644 index 000000000..ef136c6fe --- /dev/null +++ b/libsrc/rp6502/gettimespec.c @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> +#include <time.h> + +int __clock_gettimespec(struct timespec *ts, unsigned char op) +/* Internal method shared by clock_getres and clock_gettime. */ +{ + int ax = ria_call_int_errno(op); + if (ax >= 0) + { + ts->tv_sec = ria_pop_long(); + ts->tv_nsec = ria_pop_long(); + } + return ax; +} diff --git a/libsrc/rp6502/gettimezone.c b/libsrc/rp6502/gettimezone.c new file mode 100644 index 000000000..db9060967 --- /dev/null +++ b/libsrc/rp6502/gettimezone.c @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> +#include <time.h> + +int clock_gettimezone(clockid_t clock_id, struct _timezone *tz) +{ + int ax; + ria_set_ax(clock_id); + ax = ria_call_int_errno(RIA_OP_CLOCK_GETTIMEZONE); + if (ax >= 0) + { + char i; + for (i = 0; i < sizeof(struct _timezone); i++) + ((char *)tz)[i] = ria_pop_char(); + } + return ax; +} diff --git a/libsrc/rp6502/initenv.s b/libsrc/rp6502/initenv.s new file mode 100644 index 000000000..b6546e320 --- /dev/null +++ b/libsrc/rp6502/initenv.s @@ -0,0 +1,16 @@ +; Copyright (c) 2023 Rumbledethumps +; +; SPDX-License-Identifier: Zlib +; SPDX-License-Identifier: BSD-3-Clause +; SPDX-License-Identifier: Unlicense + +.constructor initenv, 24 +.import __environ, __envcount, __envsize + +.segment "ONCE" + +.proc initenv + + rts + +.endproc diff --git a/libsrc/rp6502/irq.s b/libsrc/rp6502/irq.s new file mode 100644 index 000000000..ffc152aac --- /dev/null +++ b/libsrc/rp6502/irq.s @@ -0,0 +1,51 @@ +; Copyright (c) 2023 Rumbledethumps +; +; SPDX-License-Identifier: Zlib +; SPDX-License-Identifier: BSD-3-Clause +; SPDX-License-Identifier: Unlicense + +.export initirq, doneirq +.import callirq, _exit + +.include "rp6502.inc" + +.segment "ONCE" + +initirq: + lda #<handler + ldx #>handler + sei + sta $FFFE + stx $FFFF + cli + rts + +.code + +doneirq: + sei + rts + +.segment "LOWCODE" + +handler: + cld + phx + tsx + pha + inx + inx + lda $100,X + and #$10 + bne break + phy + jsr callirq + ply + pla + plx + rti + +break: + lda #$FF + sta RIA_A + jmp _exit diff --git a/libsrc/rp6502/lrand.c b/libsrc/rp6502/lrand.c new file mode 100644 index 000000000..9a23390e5 --- /dev/null +++ b/libsrc/rp6502/lrand.c @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> + +long __fastcall__ lrand(void) +{ + return ria_call_long(RIA_OP_LRAND); +} diff --git a/libsrc/rp6502/lseek.c b/libsrc/rp6502/lseek.c new file mode 100644 index 000000000..afa590e63 --- /dev/null +++ b/libsrc/rp6502/lseek.c @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> +#include <unistd.h> + +off_t __fastcall__ lseek(int fd, off_t offset, int whence) +{ + /* Modified argument order for short stacking offset */ + ria_push_long(offset); + ria_push_char(whence); + ria_set_ax(fd); + return ria_call_long_errno(RIA_OP_LSEEK); +} diff --git a/libsrc/rp6502/mainargs.s b/libsrc/rp6502/mainargs.s new file mode 100644 index 000000000..886e39e02 --- /dev/null +++ b/libsrc/rp6502/mainargs.s @@ -0,0 +1,16 @@ +; Copyright (c) 2023 Rumbledethumps +; +; SPDX-License-Identifier: Zlib +; SPDX-License-Identifier: BSD-3-Clause +; SPDX-License-Identifier: Unlicense + +.constructor initmainargs, 24 +.import __argc, __argv + +.segment "ONCE" + +.proc initmainargs + + rts + +.endproc diff --git a/libsrc/rp6502/open.c b/libsrc/rp6502/open.c new file mode 100644 index 000000000..962614045 --- /dev/null +++ b/libsrc/rp6502/open.c @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> +#include <errno.h> +#include <string.h> + +int __cdecl__ open(const char *name, int flags, ...) +{ + size_t namelen = strlen(name); + if (namelen > 255) + { + return _mappederrno(EINVAL); + } + while (namelen) + { + ria_push_char(name[--namelen]); + } + ria_set_ax(flags); + return ria_call_int_errno(RIA_OP_OPEN); +} diff --git a/libsrc/rp6502/oserrlist.s b/libsrc/rp6502/oserrlist.s new file mode 100644 index 000000000..ef322e293 --- /dev/null +++ b/libsrc/rp6502/oserrlist.s @@ -0,0 +1,86 @@ +; +; 2002-07-18, Ullrich von Bassewitz +; 2022, ChaN +; 2023, Rumbledethumps +; +; Defines the platform-specific error list. +; +; The table is built as a list of entries: +; +; .byte entrylen +; .byte errorcode +; .asciiz errormsg +; +; and, terminated by an entry with length zero that is returned if the +; error code could not be found. +; + +.export __sys_oserrlist + +.include "rp6502.inc" +.include "errno.inc" + +;---------------------------------------------------------------------------- +; Macros used to generate the list (may get moved to an include file?) + +; Regular entry +.macro sys_oserr_entry code, msg + .local Start, End +Start: + .byte End - Start + .byte code + .asciiz msg +End: +.endmacro + +; Sentinel entry +.macro sys_oserr_sentinel msg + .byte 0 ; Length is always zero + .byte 0 ; Code is unused + .asciiz msg +.endmacro + +;---------------------------------------------------------------------------- +; The error message table + +.rodata +__sys_oserrlist: + + sys_oserr_entry ENOENT , "No such file or directory" + sys_oserr_entry ENOMEM , "Out of memory" + sys_oserr_entry EACCES , "Permission denied" + sys_oserr_entry ENODEV , "No such device" + sys_oserr_entry EMFILE , "Too many open files" + sys_oserr_entry EBUSY , "Device or resource busy" + sys_oserr_entry EINVAL , "Invalid argument" + sys_oserr_entry ENOSPC , "No space left on device" + sys_oserr_entry EEXIST , "File exists" + sys_oserr_entry EAGAIN , "Try again" + sys_oserr_entry EIO , "I/O error" + sys_oserr_entry EINTR , "Interrupted system call" + sys_oserr_entry ENOSYS , "Function not implemented" + sys_oserr_entry ESPIPE , "Illegal seek" + sys_oserr_entry ERANGE , "Range error" + sys_oserr_entry EBADF , "Bad file number" + sys_oserr_entry ENOEXEC , "Exec format error" + sys_oserr_entry EUNKNOWN , "Unknown OS specific error" + sys_oserr_entry FR_DISK_ERR , "A hard error occurred in the low level disk I/O layer" + sys_oserr_entry FR_INT_ERR , "Assertion failed" + sys_oserr_entry FR_NOT_READY , "The physical drive cannot work" + sys_oserr_entry FR_NO_FILE , "Could not find the file" + sys_oserr_entry FR_NO_PATH , "Could not find the path" + sys_oserr_entry FR_INVALID_NAME , "The path name format is invalid" + sys_oserr_entry FR_DENIED , "Access denied due to prohibited access or directory full" + sys_oserr_entry FR_EXIST , "Access denied due to prohibited access" + sys_oserr_entry FR_INVALID_OBJECT , "The file/directory object is invalid" + sys_oserr_entry FR_WRITE_PROTECTED , "The physical drive is write protected" + sys_oserr_entry FR_INVALID_DRIVE , "The logical drive number is invalid" + sys_oserr_entry FR_NOT_ENABLED , "The volume has no work area" + sys_oserr_entry FR_NO_FILESYSTEM , "There is no valid FAT volume" + sys_oserr_entry FR_MKFS_ABORTED , "The f_mkfs() aborted due to any problem" + sys_oserr_entry FR_TIMEOUT , "Could not get a grant to access the volume within defined period" + sys_oserr_entry FR_LOCKED , "The operation is rejected according to the file sharing policy" + sys_oserr_entry FR_NOT_ENOUGH_CORE , "LFN working buffer could not be allocated" + sys_oserr_entry FR_TOO_MANY_OPEN_FILES , "Number of open files > FF_FS_LOCK" + sys_oserr_entry FR_INVALID_PARAMETER , "Given parameter is invalid" + sys_oserr_sentinel "Unknown error" diff --git a/libsrc/rp6502/oserror.s b/libsrc/rp6502/oserror.s new file mode 100644 index 000000000..706bcfa65 --- /dev/null +++ b/libsrc/rp6502/oserror.s @@ -0,0 +1,66 @@ +; +; 2000-05-17, Ullrich von Bassewitz +; 2022, ChaN +; 2023, Rumbledethumps +; +; int __fastcall__ __osmaperrno (unsigned char oserror); +; +; RP6502 will respond with a union of CC65 and FatFs errnos. +; This will map FatFs errors into the CC65 range for portable code. + +EFATFS_START := 32 + +.include "rp6502.inc" +.include "errno.inc" + +.code + +___osmaperrno: + cmp #EFATFS_START + bmi @L2 + + ldx #ErrTabSize +@L1: + cmp ErrTab-2,x ; Search for the error code + beq @L3 ; Jump if found + dex + dex + bne @L1 ; Next entry + +; Code not found, return EUNKNOWN + lda #<EUNKNOWN + ldx #>EUNKNOWN +@L2: + rts + +; Found the code +@L3: + lda ErrTab-1,x + ldx #$00 ; High byte always zero + rts + +.rodata + +ErrTab: + + .byte FR_DISK_ERR , EIO ; A hard error occurred in the low level disk I/O layer +; .byte FR_INT_ERR , EUNKNOWN ; Assertion failed + .byte FR_NOT_READY , EBUSY ; The physical drive cannot work + .byte FR_NO_FILE , ENOENT ; Could not find the file + .byte FR_NO_PATH , ENOENT ; Could not find the path + .byte FR_INVALID_NAME , EINVAL ; The path name format is invalid + .byte FR_DENIED , EACCES ; Access denied due to prohibited access or directory full + .byte FR_EXIST , EEXIST ; Access denied due to prohibited access + .byte FR_INVALID_OBJECT , EINVAL ; The file/directory object is invalid + .byte FR_WRITE_PROTECTED , EACCES ; The physical drive is write protected + .byte FR_INVALID_DRIVE , ENODEV ; The logical drive number is invalid +; .byte FR_NOT_ENABLED , EUNKNOWN ; The volume has no work area +; .byte FR_NO_FILESYSTEM , EUNKNOWN ; There is no valid FAT volume +; .byte FR_MKFS_ABORTED , EUNKNOWN ; The f_mkfs() aborted due to any problem +; .byte FR_TIMEOUT , EUNKNOWN ; Could not get a grant to access the volume within defined period + .byte FR_LOCKED , EBUSY ; The operation is rejected according to the file sharing policy + .byte FR_NOT_ENOUGH_CORE , ENOMEM ; LFN working buffer could not be allocated + .byte FR_TOO_MANY_OPEN_FILES , EMFILE ; Number of open files > FF_FS_LOCK + .byte FR_INVALID_PARAMETER , EINVAL ; Given parameter is invalid + +ErrTabSize = (* - ErrTab) diff --git a/libsrc/rp6502/phi2.c b/libsrc/rp6502/phi2.c new file mode 100644 index 000000000..095580c97 --- /dev/null +++ b/libsrc/rp6502/phi2.c @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> + +int __fastcall__ phi2(void) +{ + return ria_call_int(RIA_OP_PHI2); +} diff --git a/libsrc/rp6502/randomize.c b/libsrc/rp6502/randomize.c new file mode 100644 index 000000000..a2050c4aa --- /dev/null +++ b/libsrc/rp6502/randomize.c @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> +#include <stdlib.h> + +// Non-standard cc65 +void _randomize(void) +{ + srand(ria_call_int(RIA_OP_LRAND)); +} diff --git a/libsrc/rp6502/read.c b/libsrc/rp6502/read.c new file mode 100644 index 000000000..d0b389c4a --- /dev/null +++ b/libsrc/rp6502/read.c @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> +#include <unistd.h> + +int __fastcall__ read(int fildes, void *buf, unsigned count) +{ + int total = 0; + while (count) + { + unsigned blockcount = (count > 256) ? 256 : count; + int bytes_read = read_xstack(&((char *)buf)[total], blockcount, fildes); + if (bytes_read < 0) + { + return bytes_read; + } + total += bytes_read; + count -= bytes_read; + if (bytes_read < blockcount) + { + break; + } + } + return total; +} diff --git a/libsrc/rp6502/read_xram.c b/libsrc/rp6502/read_xram.c new file mode 100644 index 000000000..565744e11 --- /dev/null +++ b/libsrc/rp6502/read_xram.c @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> + +int __fastcall__ read_xram(unsigned buf, unsigned count, int fildes) +{ + ria_push_int(buf); + ria_push_int(count); + ria_set_ax(fildes); + return ria_call_int_errno(RIA_OP_READ_XRAM); +} diff --git a/libsrc/rp6502/read_xstack.c b/libsrc/rp6502/read_xstack.c new file mode 100644 index 000000000..c3b6d098e --- /dev/null +++ b/libsrc/rp6502/read_xstack.c @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> + +int __fastcall__ read_xstack(void *buf, unsigned count, int fildes) +{ + int i, ax; + ria_push_int(count); + ria_set_ax(fildes); + ax = ria_call_int_errno(RIA_OP_READ_XSTACK); + for (i = 0; i < ax; i++) + { + ((char *)buf)[i] = ria_pop_char(); + } + return ax; +} diff --git a/libsrc/rp6502/ria.s b/libsrc/rp6502/ria.s new file mode 100644 index 000000000..f040fca61 --- /dev/null +++ b/libsrc/rp6502/ria.s @@ -0,0 +1,90 @@ +; Copyright (c) 2023 Rumbledethumps +; +; SPDX-License-Identifier: Zlib +; SPDX-License-Identifier: BSD-3-Clause +; SPDX-License-Identifier: Unlicense + +.include "rp6502.inc" + +.export _ria_push_long, _ria_push_int +.export _ria_pop_long, _ria_pop_int +.export _ria_set_axsreg, _ria_set_ax +.export _ria_call_int, _ria_call_long +.export _ria_call_int_errno, _ria_call_long_errno + +.importzp sp, sreg +.import ___mappederrno, incsp1 + +.code + +; void __fastcall__ ria_push_long(unsigned long val); +_ria_push_long: + ldy sreg+1 + sty RIA_XSTACK + ldy sreg + sty RIA_XSTACK +; void __fastcall__ ria_push_int(unsigned int val); +_ria_push_int: + stx RIA_XSTACK + sta RIA_XSTACK + rts + +; long __fastcall__ ria_pop_long(void); +_ria_pop_long: + jsr _ria_pop_int + ldy RIA_XSTACK + sty sreg + ldy RIA_XSTACK + sty sreg+1 + rts + +; int __fastcall__ ria_pop_int(void); +_ria_pop_int: + lda RIA_XSTACK + ldx RIA_XSTACK + rts + +; void __fastcall__ ria_set_axsreg(unsigned long axsreg); +_ria_set_axsreg: + ldy sreg + sty RIA_SREG + ldy sreg+1 + sty RIA_SREG+1 +; void __fastcall__ ria_set_ax(unsigned int ax); +_ria_set_ax: + stx RIA_X + sta RIA_A + rts + +; int __fastcall__ ria_call_int(unsigned char op); +_ria_call_int: + sta RIA_OP + jmp RIA_SPIN + +; long __fastcall__ ria_call_long(unsigned char op); +_ria_call_long: + sta RIA_OP + jsr RIA_SPIN + ldy RIA_SREG + sty sreg + ldy RIA_SREG+1 + sty sreg+1 + rts + +; int __fastcall__ ria_call_int_errno(unsigned char op); +_ria_call_int_errno: + sta RIA_OP + jsr RIA_SPIN + ldx RIA_X + bmi ERROR + rts + +; long __fastcall__ ria_call_long_errno(unsigned char op); +_ria_call_long_errno: + jsr _ria_call_long + bmi ERROR + rts + +ERROR: + lda RIA_ERRNO + jmp ___mappederrno diff --git a/libsrc/rp6502/settime.c b/libsrc/rp6502/settime.c new file mode 100644 index 000000000..69d4dafe5 --- /dev/null +++ b/libsrc/rp6502/settime.c @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> +#include <time.h> + +int clock_settime(clockid_t clock_id, const struct timespec *tp) +{ + ria_set_ax(clock_id); + ria_push_long(tp->tv_nsec); + ria_push_long(tp->tv_sec); + return ria_call_int_errno(RIA_OP_CLOCK_SETTIME); +} diff --git a/libsrc/rp6502/stdin_opt.c b/libsrc/rp6502/stdin_opt.c new file mode 100644 index 000000000..f01d1036c --- /dev/null +++ b/libsrc/rp6502/stdin_opt.c @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> + +int __fastcall__ stdin_opt(unsigned long ctrl_bits, unsigned char str_length) +{ + ria_push_long(ctrl_bits); + ria_set_a(str_length); + return ria_call_int_errno(RIA_OP_STDIN_OPT); +} diff --git a/libsrc/rp6502/sysremove.c b/libsrc/rp6502/sysremove.c new file mode 100644 index 000000000..6b143d672 --- /dev/null +++ b/libsrc/rp6502/sysremove.c @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> +#include <errno.h> +#include <string.h> + +unsigned char __fastcall__ _sysremove(const char *name) +{ + size_t namelen; + namelen = strlen(name); + if (namelen > 255) + { + return _mappederrno(EINVAL); + } + while (namelen) + { + ria_push_char(name[--namelen]); + } + return ria_call_int_errno(RIA_OP_UNLINK); +} diff --git a/libsrc/rp6502/sysrename.c b/libsrc/rp6502/sysrename.c new file mode 100644 index 000000000..6d42752ae --- /dev/null +++ b/libsrc/rp6502/sysrename.c @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> +#include <errno.h> +#include <string.h> + +unsigned char __fastcall__ _sysrename(const char *oldpath, const char *newpath) +{ + size_t oldpathlen, newpathlen; + oldpathlen = strlen(oldpath); + newpathlen = strlen(newpath); + if (oldpathlen + newpathlen > 254) + { + return _mappederrno(EINVAL); + } + while (oldpathlen) + { + ria_push_char(oldpath[--oldpathlen]); + } + ria_push_char(0); + while (newpathlen) + { + ria_push_char(newpath[--newpathlen]); + } + return ria_call_int_errno(RIA_OP_RENAME); +} diff --git a/libsrc/rp6502/write.c b/libsrc/rp6502/write.c new file mode 100644 index 000000000..f14c91e59 --- /dev/null +++ b/libsrc/rp6502/write.c @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> +#include <unistd.h> + +int __fastcall__ write(int fildes, const void *buf, unsigned count) +{ + int ax, total = 0; + while (count) + { + int blockcount = (count > 256) ? 256 : count; + ax = write_xstack(&((char *)buf)[total], blockcount, fildes); + if (ax < 0) + { + return ax; + } + total += ax; + count -= ax; + if (ax < blockcount) + { + break; + } + } + return total; +} diff --git a/libsrc/rp6502/write_xram.c b/libsrc/rp6502/write_xram.c new file mode 100644 index 000000000..379e5a667 --- /dev/null +++ b/libsrc/rp6502/write_xram.c @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> + +int __fastcall__ write_xram(unsigned buf, unsigned count, int fildes) +{ + ria_push_int(buf); + ria_push_int(count); + ria_set_ax(fildes); + return ria_call_int_errno(RIA_OP_WRITE_XRAM); +} diff --git a/libsrc/rp6502/write_xstack.c b/libsrc/rp6502/write_xstack.c new file mode 100644 index 000000000..4507193ea --- /dev/null +++ b/libsrc/rp6502/write_xstack.c @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2023 Rumbledethumps + * + * SPDX-License-Identifier: Zlib + * SPDX-License-Identifier: BSD-3-Clause + * SPDX-License-Identifier: Unlicense + */ + +#include <rp6502.h> + +int __fastcall__ write_xstack(const void *buf, unsigned count, int fildes) +{ + unsigned i; + for (i = count; i;) + { + ria_push_char(((char *)buf)[--i]); + } + ria_set_ax(fildes); + return ria_call_int_errno(RIA_OP_WRITE_XSTACK); +} diff --git a/libsrc/rp6502/xreg.s b/libsrc/rp6502/xreg.s new file mode 100644 index 000000000..81cba6733 --- /dev/null +++ b/libsrc/rp6502/xreg.s @@ -0,0 +1,40 @@ +; Copyright (c) 2023 Rumbledethumps +; +; SPDX-License-Identifier: Zlib +; SPDX-License-Identifier: BSD-3-Clause +; SPDX-License-Identifier: Unlicense + +; CC65 will promote variadic char arguments to int. It will not demote longs. +; int __cdecl__ xreg(char device, char channel, unsigned char address, ...); + +.export _xreg +.importzp sp +.import addysp, _ria_call_int_errno + +.include "rp6502.inc" + +.code + +.proc _xreg + + ; save variadic size in X + tya + tax + +@copy: ; copy stack + dey + lda (sp),y + sta RIA_XSTACK + tya + bne @copy + + ; recover variadic size and move sp + txa + tay + jsr addysp + + ; run RIA operation + lda #RIA_OP_XREG + jmp _ria_call_int_errno + +.endproc diff --git a/src/ca65/main.c b/src/ca65/main.c index fedbb0d4b..3ec6c84ee 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -346,6 +346,10 @@ static void SetSys (const char* Sys) NewSymbol ("__KIM1__", 1); break; + case TGT_RP6502: + NewSymbol ("__RP6502__", 1); + break; + default: AbEnd ("Invalid target name: '%s'", Sys); diff --git a/src/cc65/main.c b/src/cc65/main.c index f800ac43e..bef646cdd 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -303,6 +303,10 @@ static void SetSys (const char* Sys) DefineNumericMacro ("__KIM1__", 1); break; + case TGT_RP6502: + DefineNumericMacro ("__RP6502__", 1); + break; + default: AbEnd ("Unknown target system '%s'", Sys); } diff --git a/src/common/target.c b/src/common/target.c index ad62990bd..b50478e16 100644 --- a/src/common/target.c +++ b/src/common/target.c @@ -173,6 +173,7 @@ static const TargetEntry TargetMap[] = { { "pce", TGT_PCENGINE }, { "pet", TGT_PET }, { "plus4", TGT_PLUS4 }, + { "rp6502", TGT_RP6502 }, { "sim6502", TGT_SIM6502 }, { "sim65c02", TGT_SIM65C02 }, { "supervision", TGT_SUPERVISION }, @@ -221,6 +222,7 @@ static const TargetProperties PropertyTable[TGT_COUNT] = { { "cx16", CPU_65C02, BINFMT_BINARY, CTPET }, { "sym1", CPU_6502, BINFMT_BINARY, CTNone }, { "kim1", CPU_6502, BINFMT_BINARY, CTNone }, + { "rp6502", CPU_65C02, BINFMT_BINARY, CTNone }, }; /* Target system */ diff --git a/src/common/target.h b/src/common/target.h index 0cec74b6e..730b8211e 100644 --- a/src/common/target.h +++ b/src/common/target.h @@ -88,6 +88,7 @@ typedef enum { TGT_CX16, TGT_SYM1, TGT_KIM1, + TGT_RP6502, TGT_COUNT /* Number of target systems */ } target_t; From 564c85235fa7f776915333a29205128e3fca3f74 Mon Sep 17 00:00:00 2001 From: rumbledethumps <16963588+rumbledethumps@users.noreply.github.com> Date: Fri, 17 Nov 2023 11:08:51 -0800 Subject: [PATCH 2271/2710] style update and add rp6502 doc --- asminc/rp6502.inc | 6 +-- cfg/rp6502.cfg | 8 --- doc/index.sgml | 3 ++ doc/rp6502.sgml | 96 ++++++++++++++++++++++++++++++++++++ include/rp6502.h | 70 ++++++++++++++++---------- libsrc/rp6502/close.c | 14 ++---- libsrc/rp6502/codepage.c | 12 +---- libsrc/rp6502/crt0.s | 9 ++-- libsrc/rp6502/getres.c | 16 ++---- libsrc/rp6502/gettime.c | 16 ++---- libsrc/rp6502/gettimespec.c | 19 ++----- libsrc/rp6502/gettimezone.c | 21 +++----- libsrc/rp6502/initenv.s | 6 +-- libsrc/rp6502/irq.s | 7 ++- libsrc/rp6502/lrand.c | 12 +---- libsrc/rp6502/lseek.c | 18 ++----- libsrc/rp6502/mainargs.s | 7 ++- libsrc/rp6502/open.c | 26 +++------- libsrc/rp6502/phi2.c | 12 +---- libsrc/rp6502/randomize.c | 12 +---- libsrc/rp6502/read.c | 21 ++------ libsrc/rp6502/read_xram.c | 18 ++----- libsrc/rp6502/read_xstack.c | 21 +++----- libsrc/rp6502/ria.s | 7 ++- libsrc/rp6502/settime.c | 18 ++----- libsrc/rp6502/stdin_opt.c | 15 ++---- libsrc/rp6502/sysremove.c | 24 +++------ libsrc/rp6502/sysrename.c | 33 +++++-------- libsrc/rp6502/write.c | 21 ++------ libsrc/rp6502/write_xram.c | 18 ++----- libsrc/rp6502/write_xstack.c | 19 ++----- libsrc/rp6502/xreg.s | 7 +-- 32 files changed, 261 insertions(+), 351 deletions(-) create mode 100644 doc/rp6502.sgml diff --git a/asminc/rp6502.inc b/asminc/rp6502.inc index 3fa493331..7dd1b8fcd 100644 --- a/asminc/rp6502.inc +++ b/asminc/rp6502.inc @@ -1,8 +1,4 @@ -; Copyright (c) 2023 Rumbledethumps -; -; SPDX-License-Identifier: Zlib -; SPDX-License-Identifier: BSD-3-Clause -; SPDX-License-Identifier: Unlicense +; Picocomputer 6502 general defines ; RIA UART RIA_READY := $FFE0 ; TX=$80 RX=$40 diff --git a/cfg/rp6502.cfg b/cfg/rp6502.cfg index a3e3b29ce..ed40e467d 100644 --- a/cfg/rp6502.cfg +++ b/cfg/rp6502.cfg @@ -1,11 +1,3 @@ -# -# Copyright (c) 2023 Rumbledethumps -# -# SPDX-License-Identifier: Zlib -# SPDX-License-Identifier: BSD-3-Clause -# SPDX-License-Identifier: Unlicense -# - SYMBOLS { __STARTUP__: type = import; __STACKSIZE__: type = weak, value = $0800; diff --git a/doc/index.sgml b/doc/index.sgml index 727364028..92df5e018 100644 --- a/doc/index.sgml +++ b/doc/index.sgml @@ -175,6 +175,9 @@ <tag><htmlurl url="plus4.html" name="plus4.html"></tag> Topics specific to the Commodore Plus/4. + <tag><htmlurl url="rp6502.html" name="rp6502.html"></tag> + Topics specific to the Picocomputer 6502. + <tag><htmlurl url="supervision.html" name="supervision.html"></tag> Topics specific to the Watara Supervision Console. diff --git a/doc/rp6502.sgml b/doc/rp6502.sgml new file mode 100644 index 000000000..201f0a06b --- /dev/null +++ b/doc/rp6502.sgml @@ -0,0 +1,96 @@ +<!doctype linuxdoc system> + +<article> +<title>Picocomputer 6502 - specific information for cc65 +<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz"> + +<abstract> +An overview over the Picocomputer 6502 and its interfaces to the cc65 C +compiler. +</abstract> + +<!-- Table of contents --> +<toc> + +<!-- Begin the document --> + +<sect>Overview<p> + +The Picocomputer 6502 is a modern W65C02S computer with a custom operating +system designed to be POSIX-like. The reference design includes a W65C02S, +W65C22S, RP6502-RIA, and optionally a RP6502-VGA. Peripheral devices like +keyboards, mice, and flash storage are connected by USB to the RP6502-RIA. +Audio is generated by the RP6502-RIA. Video is generated by the RP6502-VGA. + + + +<sect>Binary format<p> + +The standard binary output format generated by the linker for the RP6502 target +is a plain machine language program without any prefix or postfix. + +The RP6502 Integrated Development Environment, based on Visual Studio Code, +will convert the cc65 binary output into RP6502 ROM files that can be loaded +directly from the RP6502 monitor or installed on the RIA to be loaded at boot. + + + +<sect>Memory layout<p> + +<descrip> + <tag/Stack/ + The C run-time stack is located at $FEFF, and grows downward. + + <tag/Heap/ + The C heap is located at the end of the program, and grows toward the C + run-time stack. + + <tag/RAM/ + RAM is located at $0000 - $FEFF. Default binaries load and + start at $0200. + + <tag/ROM/ + The RP6502 is designed with no ROM in the 6502 address space. + + <tag/VIA/ + A Versatile Interface Adapter (6522) is 16 registers located + at $FFD0. + + <tag/RIA/ + The RP6502 Interface Adapter is 32 registers located at $FFE0. + + <tag/User/ + User I/O expansion is from $FF00 to $FFCF. + +</descrip><p> + + + +<sect>Platform-specific header files<p> + +Programs containing RP6502-specific code may use the <tt/rp6502.h/ or +<tt/rp6502.inc/ include files. + + + +<sect>License<p> + +This software is provided "as-is", without any expressed or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: +<enum> +<item> The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated, but is not required. +<item> Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. +<item> This notice may not be removed or altered from any source + distribution. +</enum> + +</article> diff --git a/include/rp6502.h b/include/rp6502.h index 0c2ba3881..033684b72 100644 --- a/include/rp6502.h +++ b/include/rp6502.h @@ -1,10 +1,28 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ +/*****************************************************************************/ +/* */ +/* rp6502.h */ +/* */ +/* Picocomputer 6502 */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ #ifndef _RP6502_H #define _RP6502_H @@ -50,29 +68,29 @@ struct __RP6502 /* XSTACK helpers */ -void __fastcall__ ria_push_long(unsigned long val); -void __fastcall__ ria_push_int(unsigned int val); +void __fastcall__ ria_push_long (unsigned long val); +void __fastcall__ ria_push_int (unsigned int val); #define ria_push_char(v) RIA.xstack = v -long __fastcall__ ria_pop_long(void); -int __fastcall__ ria_pop_int(void); +long __fastcall__ ria_pop_long (void); +int __fastcall__ ria_pop_int (void); #define ria_pop_char() RIA.xstack /* Set the RIA fastcall register */ -void __fastcall__ ria_set_axsreg(unsigned long axsreg); -void __fastcall__ ria_set_ax(unsigned int ax); +void __fastcall__ ria_set_axsreg (unsigned long axsreg); +void __fastcall__ ria_set_ax (unsigned int ax); #define ria_set_a(v) RIA.a = v /* Run an OS operation */ -int __fastcall__ ria_call_int(unsigned char op); -long __fastcall__ ria_call_long(unsigned char op); +int __fastcall__ ria_call_int (unsigned char op); +long __fastcall__ ria_call_long (unsigned char op); /* These run _mappederrno() on error */ -int __fastcall__ ria_call_int_errno(unsigned char op); -long __fastcall__ ria_call_long_errno(unsigned char op); +int __fastcall__ ria_call_int_errno (unsigned char op); +long __fastcall__ ria_call_long_errno (unsigned char op); /* OS operation numbers */ @@ -99,15 +117,15 @@ long __fastcall__ ria_call_long_errno(unsigned char op); /* C API for the operating system. */ -int __cdecl__ xreg(char device, char channel, unsigned char address, ...); -int __fastcall__ phi2(void); -int __fastcall__ codepage(void); -long __fastcall__ lrand(void); -int __fastcall__ stdin_opt(unsigned long ctrl_bits, unsigned char str_length); -int __fastcall__ read_xstack(void *buf, unsigned count, int fildes); -int __fastcall__ read_xram(unsigned buf, unsigned count, int fildes); -int __fastcall__ write_xstack(const void *buf, unsigned count, int fildes); -int __fastcall__ write_xram(unsigned buf, unsigned count, int fildes); +int __cdecl__ xreg (char device, char channel, unsigned char address, ...); +int __fastcall__ phi2 (void); +int __fastcall__ codepage (void); +long __fastcall__ lrand (void); +int __fastcall__ stdin_opt (unsigned long ctrl_bits, unsigned char str_length); +int __fastcall__ read_xstack (void* buf, unsigned count, int fildes); +int __fastcall__ read_xram (unsigned buf, unsigned count, int fildes); +int __fastcall__ write_xstack (const void* buf, unsigned count, int fildes); +int __fastcall__ write_xram (unsigned buf, unsigned count, int fildes); /* XREG location helpers */ diff --git a/libsrc/rp6502/close.c b/libsrc/rp6502/close.c index 1fdc40545..dd7e38115 100644 --- a/libsrc/rp6502/close.c +++ b/libsrc/rp6502/close.c @@ -1,16 +1,8 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> #include <errno.h> -int __fastcall__ close(int fd) +int __fastcall__ close (int fd) { - ria_set_ax(fd); - return ria_call_int_errno(RIA_OP_CLOSE); + ria_set_ax (fd); + return ria_call_int_errno (RIA_OP_CLOSE); } diff --git a/libsrc/rp6502/codepage.c b/libsrc/rp6502/codepage.c index c0914651d..e28726f04 100644 --- a/libsrc/rp6502/codepage.c +++ b/libsrc/rp6502/codepage.c @@ -1,14 +1,6 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> -int __fastcall__ codepage(void) +int __fastcall__ codepage (void) { - return ria_call_int(RIA_OP_CODEPAGE); + return ria_call_int (RIA_OP_CODEPAGE); } diff --git a/libsrc/rp6502/crt0.s b/libsrc/rp6502/crt0.s index e6406fe5e..165ecf0a2 100644 --- a/libsrc/rp6502/crt0.s +++ b/libsrc/rp6502/crt0.s @@ -1,10 +1,7 @@ -; Copyright (c) 2023 Rumbledethumps ; -; SPDX-License-Identifier: Zlib -; SPDX-License-Identifier: BSD-3-Clause -; SPDX-License-Identifier: Unlicense - -; Boilerplate crt0.s +; 2023, Rumbledethumps +; +; crt0.s .export _init, _exit .import _main diff --git a/libsrc/rp6502/getres.c b/libsrc/rp6502/getres.c index c60bbd38d..394c32e76 100644 --- a/libsrc/rp6502/getres.c +++ b/libsrc/rp6502/getres.c @@ -1,18 +1,10 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> #include <time.h> -extern int __clock_gettimespec(struct timespec *ts, unsigned char op); +extern int __clock_gettimespec (struct timespec* ts, unsigned char op); -int clock_getres(clockid_t clock_id, struct timespec *res) +int clock_getres (clockid_t clock_id, struct timespec* res) { - ria_set_ax(clock_id); - return __clock_gettimespec(res, RIA_OP_CLOCK_GETRES); + ria_set_ax (clock_id); + return __clock_gettimespec (res, RIA_OP_CLOCK_GETRES); } diff --git a/libsrc/rp6502/gettime.c b/libsrc/rp6502/gettime.c index b40615e9e..ee63c31ec 100644 --- a/libsrc/rp6502/gettime.c +++ b/libsrc/rp6502/gettime.c @@ -1,20 +1,12 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> #include <time.h> -extern int __clock_gettimespec(struct timespec *ts, unsigned char op); +extern int __clock_gettimespec (struct timespec* ts, unsigned char op); -int clock_gettime(clockid_t clock_id, struct timespec *tp) +int clock_gettime (clockid_t clock_id, struct timespec* tp) { (void)clock_id; /* time.s doesn't set the stack value for clock_id (bug?) */ - ria_set_ax(CLOCK_REALTIME); - return __clock_gettimespec(tp, RIA_OP_CLOCK_GETTIME); + ria_set_ax (CLOCK_REALTIME); + return __clock_gettimespec (tp, RIA_OP_CLOCK_GETTIME); } diff --git a/libsrc/rp6502/gettimespec.c b/libsrc/rp6502/gettimespec.c index ef136c6fe..4dc3a0db3 100644 --- a/libsrc/rp6502/gettimespec.c +++ b/libsrc/rp6502/gettimespec.c @@ -1,22 +1,13 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> #include <time.h> -int __clock_gettimespec(struct timespec *ts, unsigned char op) +int __clock_gettimespec (struct timespec* ts, unsigned char op) /* Internal method shared by clock_getres and clock_gettime. */ { - int ax = ria_call_int_errno(op); - if (ax >= 0) - { - ts->tv_sec = ria_pop_long(); - ts->tv_nsec = ria_pop_long(); + int ax = ria_call_int_errno (op); + if (ax >= 0) { + ts->tv_sec = ria_pop_long (); + ts->tv_nsec = ria_pop_long (); } return ax; } diff --git a/libsrc/rp6502/gettimezone.c b/libsrc/rp6502/gettimezone.c index db9060967..90b2e568f 100644 --- a/libsrc/rp6502/gettimezone.c +++ b/libsrc/rp6502/gettimezone.c @@ -1,24 +1,15 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> #include <time.h> -int clock_gettimezone(clockid_t clock_id, struct _timezone *tz) +int clock_gettimezone (clockid_t clock_id, struct _timezone* tz) { int ax; - ria_set_ax(clock_id); - ax = ria_call_int_errno(RIA_OP_CLOCK_GETTIMEZONE); - if (ax >= 0) - { + ria_set_ax (clock_id); + ax = ria_call_int_errno (RIA_OP_CLOCK_GETTIMEZONE); + if (ax >= 0) { char i; - for (i = 0; i < sizeof(struct _timezone); i++) - ((char *)tz)[i] = ria_pop_char(); + for (i = 0; i < sizeof (struct _timezone); i++) + ((char*)tz)[i] = ria_pop_char (); } return ax; } diff --git a/libsrc/rp6502/initenv.s b/libsrc/rp6502/initenv.s index b6546e320..180b25c67 100644 --- a/libsrc/rp6502/initenv.s +++ b/libsrc/rp6502/initenv.s @@ -1,8 +1,6 @@ -; Copyright (c) 2023 Rumbledethumps ; -; SPDX-License-Identifier: Zlib -; SPDX-License-Identifier: BSD-3-Clause -; SPDX-License-Identifier: Unlicense +; 2023, Rumbledethumps +; .constructor initenv, 24 .import __environ, __envcount, __envsize diff --git a/libsrc/rp6502/irq.s b/libsrc/rp6502/irq.s index ffc152aac..d7d2e6ec5 100644 --- a/libsrc/rp6502/irq.s +++ b/libsrc/rp6502/irq.s @@ -1,8 +1,7 @@ -; Copyright (c) 2023 Rumbledethumps ; -; SPDX-License-Identifier: Zlib -; SPDX-License-Identifier: BSD-3-Clause -; SPDX-License-Identifier: Unlicense +; 2023, Rumbledethumps +; +; Enables the C IRQ tools .export initirq, doneirq .import callirq, _exit diff --git a/libsrc/rp6502/lrand.c b/libsrc/rp6502/lrand.c index 9a23390e5..6434425df 100644 --- a/libsrc/rp6502/lrand.c +++ b/libsrc/rp6502/lrand.c @@ -1,14 +1,6 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> -long __fastcall__ lrand(void) +long __fastcall__ lrand (void) { - return ria_call_long(RIA_OP_LRAND); + return ria_call_long (RIA_OP_LRAND); } diff --git a/libsrc/rp6502/lseek.c b/libsrc/rp6502/lseek.c index afa590e63..29506612c 100644 --- a/libsrc/rp6502/lseek.c +++ b/libsrc/rp6502/lseek.c @@ -1,19 +1,11 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> #include <unistd.h> -off_t __fastcall__ lseek(int fd, off_t offset, int whence) +off_t __fastcall__ lseek (int fd, off_t offset, int whence) { /* Modified argument order for short stacking offset */ - ria_push_long(offset); - ria_push_char(whence); - ria_set_ax(fd); - return ria_call_long_errno(RIA_OP_LSEEK); + ria_push_long (offset); + ria_push_char (whence); + ria_set_ax (fd); + return ria_call_long_errno (RIA_OP_LSEEK); } diff --git a/libsrc/rp6502/mainargs.s b/libsrc/rp6502/mainargs.s index 886e39e02..152020022 100644 --- a/libsrc/rp6502/mainargs.s +++ b/libsrc/rp6502/mainargs.s @@ -1,8 +1,7 @@ -; Copyright (c) 2023 Rumbledethumps ; -; SPDX-License-Identifier: Zlib -; SPDX-License-Identifier: BSD-3-Clause -; SPDX-License-Identifier: Unlicense +; 2023, Rumbledethumps +; +; No arguments .constructor initmainargs, 24 .import __argc, __argv diff --git a/libsrc/rp6502/open.c b/libsrc/rp6502/open.c index 962614045..ab3a374a2 100644 --- a/libsrc/rp6502/open.c +++ b/libsrc/rp6502/open.c @@ -1,26 +1,16 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> #include <errno.h> #include <string.h> -int __cdecl__ open(const char *name, int flags, ...) +int __cdecl__ open (const char* name, int flags, ...) { - size_t namelen = strlen(name); - if (namelen > 255) - { - return _mappederrno(EINVAL); + size_t namelen = strlen (name); + if (namelen > 255) { + return _mappederrno (EINVAL); } - while (namelen) - { - ria_push_char(name[--namelen]); + while (namelen) { + ria_push_char (name[--namelen]); } - ria_set_ax(flags); - return ria_call_int_errno(RIA_OP_OPEN); + ria_set_ax (flags); + return ria_call_int_errno (RIA_OP_OPEN); } diff --git a/libsrc/rp6502/phi2.c b/libsrc/rp6502/phi2.c index 095580c97..1275e256e 100644 --- a/libsrc/rp6502/phi2.c +++ b/libsrc/rp6502/phi2.c @@ -1,14 +1,6 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> -int __fastcall__ phi2(void) +int __fastcall__ phi2 (void) { - return ria_call_int(RIA_OP_PHI2); + return ria_call_int (RIA_OP_PHI2); } diff --git a/libsrc/rp6502/randomize.c b/libsrc/rp6502/randomize.c index a2050c4aa..3299e8c68 100644 --- a/libsrc/rp6502/randomize.c +++ b/libsrc/rp6502/randomize.c @@ -1,16 +1,8 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> #include <stdlib.h> // Non-standard cc65 -void _randomize(void) +void _randomize (void) { - srand(ria_call_int(RIA_OP_LRAND)); + srand (ria_call_int (RIA_OP_LRAND)); } diff --git a/libsrc/rp6502/read.c b/libsrc/rp6502/read.c index d0b389c4a..eb96f779c 100644 --- a/libsrc/rp6502/read.c +++ b/libsrc/rp6502/read.c @@ -1,29 +1,18 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> #include <unistd.h> -int __fastcall__ read(int fildes, void *buf, unsigned count) +int __fastcall__ read (int fildes, void* buf, unsigned count) { int total = 0; - while (count) - { + while (count) { unsigned blockcount = (count > 256) ? 256 : count; - int bytes_read = read_xstack(&((char *)buf)[total], blockcount, fildes); - if (bytes_read < 0) - { + int bytes_read = read_xstack (&((char*)buf)[total], blockcount, fildes); + if (bytes_read < 0) { return bytes_read; } total += bytes_read; count -= bytes_read; - if (bytes_read < blockcount) - { + if (bytes_read < blockcount) { break; } } diff --git a/libsrc/rp6502/read_xram.c b/libsrc/rp6502/read_xram.c index 565744e11..f88a036ee 100644 --- a/libsrc/rp6502/read_xram.c +++ b/libsrc/rp6502/read_xram.c @@ -1,17 +1,9 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> -int __fastcall__ read_xram(unsigned buf, unsigned count, int fildes) +int __fastcall__ read_xram (unsigned buf, unsigned count, int fildes) { - ria_push_int(buf); - ria_push_int(count); - ria_set_ax(fildes); - return ria_call_int_errno(RIA_OP_READ_XRAM); + ria_push_int (buf); + ria_push_int (count); + ria_set_ax (fildes); + return ria_call_int_errno (RIA_OP_READ_XRAM); } diff --git a/libsrc/rp6502/read_xstack.c b/libsrc/rp6502/read_xstack.c index c3b6d098e..70eebad2f 100644 --- a/libsrc/rp6502/read_xstack.c +++ b/libsrc/rp6502/read_xstack.c @@ -1,22 +1,13 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> -int __fastcall__ read_xstack(void *buf, unsigned count, int fildes) +int __fastcall__ read_xstack (void* buf, unsigned count, int fildes) { int i, ax; - ria_push_int(count); - ria_set_ax(fildes); - ax = ria_call_int_errno(RIA_OP_READ_XSTACK); - for (i = 0; i < ax; i++) - { - ((char *)buf)[i] = ria_pop_char(); + ria_push_int (count); + ria_set_ax (fildes); + ax = ria_call_int_errno (RIA_OP_READ_XSTACK); + for (i = 0; i < ax; i++) { + ((char*)buf)[i] = ria_pop_char (); } return ax; } diff --git a/libsrc/rp6502/ria.s b/libsrc/rp6502/ria.s index f040fca61..a1b53efb1 100644 --- a/libsrc/rp6502/ria.s +++ b/libsrc/rp6502/ria.s @@ -1,8 +1,7 @@ -; Copyright (c) 2023 Rumbledethumps ; -; SPDX-License-Identifier: Zlib -; SPDX-License-Identifier: BSD-3-Clause -; SPDX-License-Identifier: Unlicense +; 2023, Rumbledethumps +; +; Helpers for building API shims .include "rp6502.inc" diff --git a/libsrc/rp6502/settime.c b/libsrc/rp6502/settime.c index 69d4dafe5..1ba1d2e3e 100644 --- a/libsrc/rp6502/settime.c +++ b/libsrc/rp6502/settime.c @@ -1,18 +1,10 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> #include <time.h> -int clock_settime(clockid_t clock_id, const struct timespec *tp) +int clock_settime (clockid_t clock_id, const struct timespec* tp) { - ria_set_ax(clock_id); - ria_push_long(tp->tv_nsec); - ria_push_long(tp->tv_sec); - return ria_call_int_errno(RIA_OP_CLOCK_SETTIME); + ria_set_ax (clock_id); + ria_push_long (tp->tv_nsec); + ria_push_long (tp->tv_sec); + return ria_call_int_errno (RIA_OP_CLOCK_SETTIME); } diff --git a/libsrc/rp6502/stdin_opt.c b/libsrc/rp6502/stdin_opt.c index f01d1036c..3a9ccfde4 100644 --- a/libsrc/rp6502/stdin_opt.c +++ b/libsrc/rp6502/stdin_opt.c @@ -1,16 +1,9 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ #include <rp6502.h> -int __fastcall__ stdin_opt(unsigned long ctrl_bits, unsigned char str_length) +int __fastcall__ stdin_opt (unsigned long ctrl_bits, unsigned char str_length) { - ria_push_long(ctrl_bits); - ria_set_a(str_length); - return ria_call_int_errno(RIA_OP_STDIN_OPT); + ria_push_long (ctrl_bits); + ria_set_a (str_length); + return ria_call_int_errno (RIA_OP_STDIN_OPT); } diff --git a/libsrc/rp6502/sysremove.c b/libsrc/rp6502/sysremove.c index 6b143d672..d8c1ced98 100644 --- a/libsrc/rp6502/sysremove.c +++ b/libsrc/rp6502/sysremove.c @@ -1,26 +1,16 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> #include <errno.h> #include <string.h> -unsigned char __fastcall__ _sysremove(const char *name) +unsigned char __fastcall__ _sysremove (const char* name) { size_t namelen; - namelen = strlen(name); - if (namelen > 255) - { - return _mappederrno(EINVAL); + namelen = strlen (name); + if (namelen > 255) { + return _mappederrno (EINVAL); } - while (namelen) - { - ria_push_char(name[--namelen]); + while (namelen) { + ria_push_char (name[--namelen]); } - return ria_call_int_errno(RIA_OP_UNLINK); + return ria_call_int_errno (RIA_OP_UNLINK); } diff --git a/libsrc/rp6502/sysrename.c b/libsrc/rp6502/sysrename.c index 6d42752ae..96eca24cf 100644 --- a/libsrc/rp6502/sysrename.c +++ b/libsrc/rp6502/sysrename.c @@ -1,32 +1,21 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> #include <errno.h> #include <string.h> -unsigned char __fastcall__ _sysrename(const char *oldpath, const char *newpath) +unsigned char __fastcall__ _sysrename (const char* oldpath, const char* newpath) { size_t oldpathlen, newpathlen; - oldpathlen = strlen(oldpath); - newpathlen = strlen(newpath); - if (oldpathlen + newpathlen > 254) - { - return _mappederrno(EINVAL); + oldpathlen = strlen (oldpath); + newpathlen = strlen (newpath); + if (oldpathlen + newpathlen > 254) { + return _mappederrno (EINVAL); } - while (oldpathlen) - { - ria_push_char(oldpath[--oldpathlen]); + while (oldpathlen) { + ria_push_char (oldpath[--oldpathlen]); } - ria_push_char(0); - while (newpathlen) - { - ria_push_char(newpath[--newpathlen]); + ria_push_char (0); + while (newpathlen) { + ria_push_char (newpath[--newpathlen]); } - return ria_call_int_errno(RIA_OP_RENAME); + return ria_call_int_errno (RIA_OP_RENAME); } diff --git a/libsrc/rp6502/write.c b/libsrc/rp6502/write.c index f14c91e59..11241dab5 100644 --- a/libsrc/rp6502/write.c +++ b/libsrc/rp6502/write.c @@ -1,29 +1,18 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> #include <unistd.h> -int __fastcall__ write(int fildes, const void *buf, unsigned count) +int __fastcall__ write (int fildes, const void* buf, unsigned count) { int ax, total = 0; - while (count) - { + while (count) { int blockcount = (count > 256) ? 256 : count; - ax = write_xstack(&((char *)buf)[total], blockcount, fildes); - if (ax < 0) - { + ax = write_xstack (&((char*)buf)[total], blockcount, fildes); + if (ax < 0) { return ax; } total += ax; count -= ax; - if (ax < blockcount) - { + if (ax < blockcount) { break; } } diff --git a/libsrc/rp6502/write_xram.c b/libsrc/rp6502/write_xram.c index 379e5a667..31a553813 100644 --- a/libsrc/rp6502/write_xram.c +++ b/libsrc/rp6502/write_xram.c @@ -1,17 +1,9 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> -int __fastcall__ write_xram(unsigned buf, unsigned count, int fildes) +int __fastcall__ write_xram (unsigned buf, unsigned count, int fildes) { - ria_push_int(buf); - ria_push_int(count); - ria_set_ax(fildes); - return ria_call_int_errno(RIA_OP_WRITE_XRAM); + ria_push_int (buf); + ria_push_int (count); + ria_set_ax (fildes); + return ria_call_int_errno (RIA_OP_WRITE_XRAM); } diff --git a/libsrc/rp6502/write_xstack.c b/libsrc/rp6502/write_xstack.c index 4507193ea..b53aa95e7 100644 --- a/libsrc/rp6502/write_xstack.c +++ b/libsrc/rp6502/write_xstack.c @@ -1,20 +1,11 @@ -/* - * Copyright (c) 2023 Rumbledethumps - * - * SPDX-License-Identifier: Zlib - * SPDX-License-Identifier: BSD-3-Clause - * SPDX-License-Identifier: Unlicense - */ - #include <rp6502.h> -int __fastcall__ write_xstack(const void *buf, unsigned count, int fildes) +int __fastcall__ write_xstack (const void* buf, unsigned count, int fildes) { unsigned i; - for (i = count; i;) - { - ria_push_char(((char *)buf)[--i]); + for (i = count; i;) { + ria_push_char (((char*)buf)[--i]); } - ria_set_ax(fildes); - return ria_call_int_errno(RIA_OP_WRITE_XSTACK); + ria_set_ax (fildes); + return ria_call_int_errno (RIA_OP_WRITE_XSTACK); } diff --git a/libsrc/rp6502/xreg.s b/libsrc/rp6502/xreg.s index 81cba6733..40d4a6705 100644 --- a/libsrc/rp6502/xreg.s +++ b/libsrc/rp6502/xreg.s @@ -1,9 +1,6 @@ -; Copyright (c) 2023 Rumbledethumps ; -; SPDX-License-Identifier: Zlib -; SPDX-License-Identifier: BSD-3-Clause -; SPDX-License-Identifier: Unlicense - +; 2023, Rumbledethumps +; ; CC65 will promote variadic char arguments to int. It will not demote longs. ; int __cdecl__ xreg(char device, char channel, unsigned char address, ...); From 3066b1f9b4a73b88a25dd5fa0fad1208df92bfa5 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Fri, 17 Nov 2023 22:49:03 +0100 Subject: [PATCH 2272/2710] Optimize unsigned int and long > 255 --- src/cc65/codegen.c | 18 +++++++--- test/val/compare8.c | 85 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 5 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index f923ac8c9..d98fc85cb 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -4199,10 +4199,14 @@ void g_gt (unsigned flags, unsigned long val) */ g_ne (flags, val); } else if (val < 0xFFFF) { - /* Use >= instead of > because the former gives better - ** code on the 6502 than the latter. - */ - g_ge (flags, val+1); + if (val == 0xFF) { + AddCodeLine ("cpx #$00"); + } else { + /* Use >= instead of > because the former gives better + ** code on the 6502 than the latter. + */ + g_ge (flags, val+1); + } } else { /* Never true */ Warning ("Condition is never true"); @@ -4229,6 +4233,8 @@ void g_gt (unsigned flags, unsigned long val) ** is easier to optimize. */ g_ne (flags, val); + } else if (val == 0xFF) { + AddCodeLine ("cpx #$00"); } else if (val < 0xFFFFFFFF) { /* Use >= instead of > because the former gives better ** code on the 6502 than the latter. @@ -4241,7 +4247,9 @@ void g_gt (unsigned flags, unsigned long val) } } else { /* Signed compare */ - if ((long) val < 0x7FFFFFFF) { + if (val == 0xFF) { + AddCodeLine ("cpx #$00"); + } else if ((long) val < 0x7FFFFFFF) { g_ge (flags, val+1); } else { /* Never true */ diff --git a/test/val/compare8.c b/test/val/compare8.c index 2621dad1d..3004787ff 100644 --- a/test/val/compare8.c +++ b/test/val/compare8.c @@ -23,6 +23,8 @@ bit bit0 = 0; #endif int int0 = 0; int int1 = 0; +unsigned int uint0 = 0; +unsigned int uint1 = 0; unsigned char uchar0 = 0; unsigned char uchar1 = 0; signed char char0 = 0; @@ -296,12 +298,95 @@ void int_compare2(void) c_int_gt_lit2(0xff); } +void c_uint_gt_lit1(unsigned char expected_result) +{ + result = 0; + + if(uint0 > 0) + result |= 1; + + if(uint0 > 1) + result |= 2; + + if(uint0 > 0xff) + result |= 4; + + if(uint0 > 0x100) + result |= 8; + + if(uint0 > 0x0101) + result |= 0x10; + + if(uint0 > 0x01ff) + result |= 0x20; + + if(uint0 > 0x0200) + result |= 0x40; + + if(uint0 > 0x0201) + result |= 0x80; + + if(result != expected_result) + failures=1; +} + +void uint_compare1(void) +{ + uint0 = 0; + c_uint_gt_lit1(0x00); + + uint0 = 1; + c_uint_gt_lit1(0x01); + + uint0 = 2; + c_uint_gt_lit1(0x03); + + uint0 = 0xfe; + c_uint_gt_lit1(0x03); + + uint0 = 0xff; + c_uint_gt_lit1(0x03); + + uint0 = 0x100; + c_uint_gt_lit1(0x07); + + uint0 = 0x101; + c_uint_gt_lit1(0x0f); + + uint0 = 0x102; + c_uint_gt_lit1(0x1f); + + uint0 = 0x1fe; + c_uint_gt_lit1(0x1f); + + uint0 = 0x1ff; + c_uint_gt_lit1(0x1f); + + uint0 = 0x200; + c_uint_gt_lit1(0x3f); + + uint0 = 0x201; + c_uint_gt_lit1(0x7f); + + uint0 = 0x7f00; + c_uint_gt_lit1(0xff); + + /* now check contiguous ranges */ + + for(uint0 = 2; uint0 != 0xff; uint0++) + c_uint_gt_lit1(0x03); + + for(uint0 = 0x202; uint0 != 0xffff; uint0++) + c_uint_gt_lit1(0xff); +} + int main (void) { char_compare(); int_compare1(); int_compare2(); + uint_compare1(); success = failures; done (); From f1b0fbebd53d3a94e80be5702e3855aec004c40f Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 23 Nov 2023 20:01:47 +0100 Subject: [PATCH 2273/2710] Remove all indexed accesses to SCC registers Some IIgs models had issues sending bytes out. Also make channel tests clearer. --- libsrc/apple2/ser/a2.gs.s | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index 20018abe4..3a2db1926 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -154,6 +154,11 @@ SCCBDATA := $C03A SER_FLAG := $E10104 +; ------------------------------------------------------------------------ +; Channels +CHANNEL_B = 0 +CHANNEL_A = 1 + ; ------------------------------------------------------------------------ ; Write registers, read registers, and values that interest us @@ -377,7 +382,7 @@ SER_OPEN: ldy #WR_TX_RX_CTRL ; Setup stop & parity bits jsr writeSCCReg - cpx #$00 + cpx #CHANNEL_B bne ClockA ClockB: ldy #WR_CLOCK_CTRL @@ -470,7 +475,7 @@ BaudOK: lda SER_FLAG ; Get SerFlag's current value sta SerFlagOrig ; and save it - cpx #$00 + cpx #CHANNEL_B bne IntA IntB: ora #SER_FLAG_CH_B ; Inform firmware we want channel B IRQs @@ -568,7 +573,8 @@ SER_PUT: SER_STATUS: ldx Channel - lda SCCBREG,x + ldy #RR_INIT_STATUS + jsr readSSCReg ldx #$00 sta (ptr1) .assert SER_ERR_OK = 0, error @@ -617,7 +623,12 @@ SER_IRQ: beq CheckSpecial ldx Channel - lda SCCBDATA,x ; Get byte + beq ReadBdata + lda SCCADATA + bra ReadDone +ReadBdata: + lda SCCBDATA ; Get byte +ReadDone: ldx RecvFreeCnt ; Check if we have free space left beq Flow ; Jump if no space in receive buffer ldy RecvTail ; Load buffer pointer @@ -678,7 +689,13 @@ Special:ldx Channel rts BadChar: - lda SCCBDATA,x ; Remove char in error + cpx #CHANNEL_B + beq BadCharB + lda SCCADATA + bra BadCharDone +BadCharB: + lda SCCBDATA ; Remove char in error +BadCharDone: sec rts @@ -695,7 +712,8 @@ Again: lda SendFreeCnt ; Anything to send? bne Quit ; Bail out if it is Wait: - lda SCCBREG,x ; Check that we're ready to send + ldy #RR_INIT_STATUS + jsr readSSCReg ; Check that we're ready to send tay and #INIT_STATUS_READY beq NotReady @@ -712,8 +730,13 @@ Quit: rts Send: ldy SendHead ; Send byte lda SendBuf,y - sta SCCBDATA,x - + cpx #CHANNEL_B + beq WriteBdata + sta SCCADATA + bra WriteDone +WriteBdata: + sta SCCBDATA +WriteDone: inc SendHead inc SendFreeCnt jmp Again ; Continue flushing TX buffer From 3905e430680869169cd820589b95bb6d9974176e Mon Sep 17 00:00:00 2001 From: rumbledethumps <16963588+rumbledethumps@users.noreply.github.com> Date: Sun, 26 Nov 2023 15:12:20 -0800 Subject: [PATCH 2274/2710] style update --- libsrc/rp6502/gettimezone.c | 3 ++- libsrc/rp6502/randomize.c | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/rp6502/gettimezone.c b/libsrc/rp6502/gettimezone.c index 90b2e568f..f3cb2a061 100644 --- a/libsrc/rp6502/gettimezone.c +++ b/libsrc/rp6502/gettimezone.c @@ -8,8 +8,9 @@ int clock_gettimezone (clockid_t clock_id, struct _timezone* tz) ax = ria_call_int_errno (RIA_OP_CLOCK_GETTIMEZONE); if (ax >= 0) { char i; - for (i = 0; i < sizeof (struct _timezone); i++) + for (i = 0; i < sizeof (struct _timezone); i++) { ((char*)tz)[i] = ria_pop_char (); + } } return ax; } diff --git a/libsrc/rp6502/randomize.c b/libsrc/rp6502/randomize.c index 3299e8c68..569387d14 100644 --- a/libsrc/rp6502/randomize.c +++ b/libsrc/rp6502/randomize.c @@ -1,7 +1,6 @@ #include <rp6502.h> #include <stdlib.h> -// Non-standard cc65 void _randomize (void) { srand (ria_call_int (RIA_OP_LRAND)); From 79214530e01e751773da6627142e40f0d5a6d5c6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 27 Nov 2023 20:39:15 +0800 Subject: [PATCH 2275/2710] Maximum total count of errors before the compiler unconditionally bails out is now 200. If more than 20 errors occur on the same source line, the compiler will immediately bail out. --- src/cc65/error.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/cc65/error.c b/src/cc65/error.c index 39b067825..2ad7133ed 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -61,6 +61,8 @@ /* Count of errors/warnings */ unsigned ErrorCount = 0; unsigned WarningCount = 0; +unsigned RecentLineNo = 0; +unsigned RecentErrorCount = 0; /* Warning and error options */ IntStack WarnEnable = INTSTACK(1); /* Enable warnings */ @@ -205,8 +207,16 @@ static void IntError (const char* Filename, unsigned LineNo, const char* Msg, va if (Line) { Print (stderr, 1, "Input: %.*s\n", (int) SB_GetLen (Line), SB_GetConstBuf (Line)); } + ++ErrorCount; - if (ErrorCount > 20) { + if (RecentLineNo != LineNo) { + RecentLineNo = LineNo; + RecentErrorCount = 0; + } else { + ++RecentErrorCount; + } + + if (RecentErrorCount > 20 || ErrorCount > 200) { Fatal ("Too many errors"); } } From ac04394254be9bc7d0ec58c572d5d07c6e808792 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 27 Nov 2023 20:39:15 +0800 Subject: [PATCH 2276/2710] Fixed and improved diagnostics about declaration errors. --- src/cc65/declare.c | 110 +++++++++++++++++++++++++++------------------ src/cc65/declare.h | 23 ++++++++-- 2 files changed, 85 insertions(+), 48 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 4bfd52c5e..1d60053e9 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1766,7 +1766,7 @@ static void ParseAnsiParamList (FuncDesc* F) /* Allow parameters without a name, but remember if we had some to ** eventually print an error message later. */ - ParseDecl (&Spec, &Decl, DM_ACCEPT_IDENT); + ParseDecl (&Spec, &Decl, DM_ACCEPT_PARAM_IDENT); if (Decl.Ident[0] == '\0') { /* Unnamed symbol. Generate a name that is not user accessible, @@ -1886,7 +1886,7 @@ static FuncDesc* ParseFuncDecl (void) -static void DirectDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) +static declmode_t DirectDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) /* Recursively process direct declarators. Build a type array in reverse order. */ { /* Read optional function or pointer qualifiers that modify the identifier @@ -1903,61 +1903,49 @@ static void DirectDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) /* Skip the star */ NextToken (); + /* A pointer type cannot be used as an empty declaration */ + if (Mode == DM_ACCEPT_IDENT) { + Mode = DM_NEED_IDENT; + } + /* Allow const, restrict, and volatile qualifiers */ Qualifiers |= OptionalQualifiers (Qualifiers, T_QUAL_CVR); /* Parse the type that the pointer points to */ - DirectDecl (Spec, D, Mode); + Mode = DirectDecl (Spec, D, Mode); /* Add the type */ AddTypeCodeToDeclarator (D, T_PTR | Qualifiers); - return; + return Mode; } if (CurTok.Tok == TOK_LPAREN) { NextToken (); - DirectDecl (Spec, D, Mode); - ConsumeRParen (); - } else { - /* Things depend on Mode now: - ** - Mode == DM_NEED_IDENT means: - ** we *must* have a type and a variable identifer. - ** - Mode == DM_NO_IDENT means: - ** we must have a type but no variable identifer - ** (if there is one, it's not read). - ** - Mode == DM_ACCEPT_IDENT means: - ** we *may* have an identifier. If there is an identifier, - ** it is read, but it is no error, if there is none. + /* An empty declaration cannot contain parentheses where an identifier + ** would show up if it were a non-empty declaration. */ - if (Mode == DM_NO_IDENT) { - D->Ident[0] = '\0'; - } else if (CurTok.Tok == TOK_IDENT) { - strcpy (D->Ident, CurTok.Ident); - NextToken (); - } else { - if (Mode == DM_NEED_IDENT) { - /* Some fix point tokens that are used for error recovery */ - static const token_t TokenList[] = { TOK_COMMA, TOK_SEMI, TOK_LCURLY, TOK_RCURLY }; - - Error ("Identifier expected"); - - /* Try some smart error recovery */ - SkipTokens (TokenList, sizeof(TokenList) / sizeof(TokenList[0])); - - /* Skip curly braces */ - if (CurTok.Tok == TOK_LCURLY) { - static const token_t CurlyToken[] = { TOK_RCURLY }; - SkipTokens (CurlyToken, sizeof(CurlyToken) / sizeof(CurlyToken[0])); - NextToken (); - } else if (CurTok.Tok == TOK_RCURLY) { - NextToken (); - } - } - D->Ident[0] = '\0'; + if (Mode == DM_ACCEPT_IDENT) { + Mode = DM_NEED_IDENT; + } + Mode = DirectDecl (Spec, D, Mode); + ConsumeRParen (); + } else if (CurTok.Tok == TOK_IDENT) { + strcpy (D->Ident, CurTok.Ident); + NextToken (); + } else { + D->Ident[0] = '\0'; + if (Mode == DM_NEED_IDENT) { + Error ("Identifier expected"); } } while (CurTok.Tok == TOK_LBRACK || CurTok.Tok == TOK_LPAREN) { + /* An array or function type cannot be used as an empty declaration */ + if (Mode == DM_ACCEPT_IDENT && D->Ident[0] == '\0') { + Mode = DM_NEED_IDENT; + Error ("Identifier expected"); + } + if (CurTok.Tok == TOK_LPAREN) { /* Function declarator */ @@ -2043,6 +2031,8 @@ static void DirectDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) if (Qualifiers & T_QUAL_CDECL) { Error ("Invalid '__cdecl__' qualifier"); } + + return Mode; } @@ -2154,12 +2144,44 @@ void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) } if (PrevErrorCount != ErrorCount) { - /* Make the declaration fictitious if is is not parsed correctly */ - D->StorageClass |= SC_FICTITIOUS; + /* Some fix point tokens that are used for error recovery */ + static const token_t TokenList[] = { TOK_COMMA, TOK_SEMI, TOK_LCURLY, TOK_RCURLY }; + + /* Try some smart error recovery */ + SkipTokens (TokenList, sizeof (TokenList) / sizeof (TokenList[0])); + + /* Skip curly braces */ + if (CurTok.Tok == TOK_LCURLY) { + static const token_t CurlyToken[] = { TOK_RCURLY }; + SkipTokens (CurlyToken, sizeof (CurlyToken) / sizeof (CurlyToken[0])); + NextToken (); + } else if (CurTok.Tok == TOK_RCURLY) { + NextToken (); + } if (Mode == DM_NEED_IDENT && D->Ident[0] == '\0') { + /* Make the declaration fictitious if is is not parsed correctly */ + D->StorageClass |= SC_FICTITIOUS; + /* Use a fictitious name for the identifier if it is missing */ - AnonName (D->Ident, "global"); + const char* Level = ""; + + switch (GetLexicalLevel ()) { + case LEX_LEVEL_GLOBAL: + Level = "global"; + break; + case LEX_LEVEL_FUNCTION: + case LEX_LEVEL_BLOCK: + Level = "local"; + break; + case LEX_LEVEL_STRUCT: + Level = "field"; + break; + default: + Level = "unknown"; + break; + } + AnonName (D->Ident, Level); } } } diff --git a/src/cc65/declare.h b/src/cc65/declare.h index 89d7be7ea..ca1b88165 100644 --- a/src/cc65/declare.h +++ b/src/cc65/declare.h @@ -98,11 +98,26 @@ struct Declarator { unsigned Index; /* Used to build Type */ }; -/* Modes for ParseDecl */ +/* Modes for ParseDecl: +** - DM_NEED_IDENT means: +** we *must* have a type and a variable identifer. +** - DM_NO_IDENT means: +** we must have a type but no variable identifer +** (if there is one, it's not read). +** - DM_ACCEPT_IDENT means: +** we *may* have an identifier, or none. If it is the latter case, +** the type must be used as an empty declaration, or it is an error. +** Note: this is used for struct/union members. +** - DM_IGNORE_IDENT means: +** we *may* have an identifier. If there is an identifier, +** it is read, but it is no error, if there is none. +** Note: this is used for function parameter type lists. +*/ typedef enum { - DM_NEED_IDENT, /* We must have an identifier */ - DM_NO_IDENT, /* We won't read an identifier */ - DM_ACCEPT_IDENT, /* We will accept an id if there is one */ + DM_NEED_IDENT, + DM_NO_IDENT, + DM_ACCEPT_IDENT, + DM_ACCEPT_PARAM_IDENT, } declmode_t; From 7574e36e95324afa8f50559838227d9660c2afae Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 27 Nov 2023 20:39:15 +0800 Subject: [PATCH 2277/2710] Improved error recovery with function declarations. Fixed some rare cases when a single file-scope error could get reapeated endlessly until the maximum total count of errors allowed is reached. --- src/cc65/compile.c | 32 ++++- src/cc65/declare.c | 160 +++++++++++++++++++---- src/cc65/declare.h | 12 +- test/ref/bug1889-missing-identifier.cref | 2 - 4 files changed, 170 insertions(+), 36 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index a591a60b8..02d37c53e 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -94,6 +94,8 @@ static void Parse (void) while (CurTok.Tok != TOK_CEOF) { DeclSpec Spec; + int NeedClean = 0; + unsigned PrevErrorCount = ErrorCount; /* Check for empty statements */ if (CurTok.Tok == TOK_SEMI) { @@ -144,7 +146,11 @@ static void Parse (void) Declarator Decl; /* Read the next declaration */ - ParseDecl (&Spec, &Decl, DM_NEED_IDENT); + NeedClean = ParseDecl (&Spec, &Decl, DM_NEED_IDENT); + if (Decl.Ident[0] == '\0') { + Sym = 0; + goto NextDecl; + } /* Check if we must reserve storage for the variable. We do this, ** @@ -310,6 +316,7 @@ static void Parse (void) } +NextDecl: /* Check for end of declaration list */ if (CurTok.Tok == TOK_COMMA) { NextToken (); @@ -325,6 +332,7 @@ static void Parse (void) /* Function */ if (CurTok.Tok == TOK_SEMI) { /* Prototype only */ + NeedClean = 0; NextToken (); } else if (CurTok.Tok == TOK_LCURLY) { /* ISO C: The type category in a function definition cannot be @@ -337,6 +345,7 @@ static void Parse (void) } /* Parse the function body anyways */ + NeedClean = 0; NewFunc (Sym, FuncDef); /* Make sure we aren't omitting any work */ @@ -345,10 +354,27 @@ static void Parse (void) } else { - /* Must be followed by a semicolon */ - ConsumeSemi (); + if (Sym) { + /* Must be followed by a semicolon */ + if (CurTok.Tok != TOK_SEMI) { + NeedClean = -1; + } + ConsumeSemi (); + } } + + /* Try some smart error recovery */ + if (PrevErrorCount != ErrorCount && NeedClean < 0) { + /* Some fix point tokens that are used for error recovery */ + static const token_t TokenList[] = { TOK_SEMI, TOK_RCURLY }; + + SmartErrorSkip (); + SkipTokens (TokenList, sizeof (TokenList) / sizeof (TokenList[0])); + if (CurTok.Tok == TOK_SEMI || CurTok.Tok == TOK_RCURLY) { + NextToken (); + } + } } /* Done with deferred operations */ diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 1d60053e9..31a0df2c3 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -83,6 +83,104 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSp +static void OpenBrace (Collection* C, token_t Tok) +/* Consume an opening parenthesis/bracket/curly brace and remember that */ +{ + switch (Tok) { + case TOK_LPAREN: Tok = TOK_RPAREN; break; + case TOK_LBRACK: Tok = TOK_RBRACK; break; + case TOK_LCURLY: Tok = TOK_RCURLY; break; + default: Internal ("Unexpected opening token: %02X", (unsigned)Tok); + } + CollAppend (C, (void*)Tok); + NextToken (); +} + + + +static int CloseBrace (Collection* C, token_t Tok) +/* Consume a closing parenthesis/bracket/curly brace if it is matched with an +** opening one and return 0, or bail out and return -1 if it is not matched. +*/ +{ + if (CollCount (C) > 0) { + token_t LastTok = (token_t)CollLast (C); + if (LastTok == Tok) { + CollPop (C); + NextToken (); + return 0; + } + } + + return -1; +} + + + +int SmartErrorSkip (void) +/* Try some smart error recovery. Skip tokens until either a comma or semicolon +** that is not enclosed in an open parenthesis/bracket/curly brace, or until an +** unpaired right parenthesis/bracket/curly brace is reached. Return 0 if it is +** the former case, or -1 if it is the latter case. */ +{ + Collection C = AUTO_COLLECTION_INITIALIZER; + int Res = 0; + + /* Some fix point tokens that are used for error recovery */ + static const token_t TokenList[] = { TOK_COMMA, TOK_SEMI, + TOK_LPAREN, TOK_RPAREN, TOK_LBRACK, TOK_RBRACK, TOK_LCURLY, TOK_RCURLY }; + + while (CurTok.Tok != TOK_CEOF) { + SkipTokens (TokenList, sizeof (TokenList) / sizeof (TokenList[0])); + + switch (CurTok.Tok) { + case TOK_LPAREN: + case TOK_LBRACK: + case TOK_LCURLY: + OpenBrace (&C, CurTok.Tok); + break; + + case TOK_RPAREN: + case TOK_RBRACK: + if (CloseBrace (&C, CurTok.Tok)) { + Res = -1; + goto ExitPoint; + } + break; + + case TOK_RCURLY: + if (CloseBrace (&C, CurTok.Tok)) { + Res = -1; + goto ExitPoint; + } else if (CollCount (&C) == 0) { + goto ExitPoint; + } + break; + + case TOK_COMMA: + if (CollCount (&C) == 0) { + goto ExitPoint; + } + NextToken (); + break; + + case TOK_SEMI: + case TOK_CEOF: + Res = -1; + goto ExitPoint; + + default: + Internal ("Unexpected token: %02X", (unsigned)CurTok.Tok); + } + } + +ExitPoint: + DoneCollection (&C); + return Res; +} + + + static unsigned ParseOneStorageClass (void) /* Parse and return a storage class specifier */ { @@ -1537,6 +1635,12 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSp *SignednessSpecified = 1; } break; + } else if ((TSFlags & TS_MASK_DEFAULT_TYPE) == TS_DEFAULT_TYPE_NONE) { + /* Treat this identifier as an unknown type */ + Error ("Unknown type name '%s'", CurTok.Ident); + TypeCopy (Spec->Type, type_int); + NextToken (); + break; } } else { /* This is a label. Use the default type flag to end the loop @@ -1618,14 +1722,13 @@ static void ParseOldStyleParamList (FuncDesc* F) NextToken (); } else { - /* Some fix point tokens that are used for error recovery */ - static const token_t TokenList[] = { TOK_COMMA, TOK_RPAREN, TOK_SEMI }; - /* Not a parameter name */ Error ("Identifier expected for parameter name"); /* Try some smart error recovery */ - SkipTokens (TokenList, sizeof(TokenList) / sizeof(TokenList[0])); + if (SmartErrorSkip () < 0) { + break; + } } /* Check for more parameters */ @@ -1711,12 +1814,9 @@ static void ParseOldStyleParamList (FuncDesc* F) ConsumeSemi (); } - if (PrevErrorCount != ErrorCount) { - /* Some fix point tokens that are used for error recovery */ - static const token_t TokenList[] = { TOK_COMMA, TOK_SEMI }; - + if (PrevErrorCount != ErrorCount && CurTok.Tok != TOK_LCURLY) { /* Try some smart error recovery */ - SkipTokens (TokenList, sizeof(TokenList) / sizeof(TokenList[0])); + SmartErrorSkip (); } } @@ -1731,6 +1831,7 @@ static void ParseAnsiParamList (FuncDesc* F) DeclSpec Spec; Declarator Decl; SymEntry* Param; + unsigned PrevErrorCount = ErrorCount; /* Allow an ellipsis as last parameter */ if (CurTok.Tok == TOK_ELLIPSIS) { @@ -1798,6 +1899,13 @@ static void ParseAnsiParamList (FuncDesc* F) /* Count arguments */ ++F->ParamCount; + if (PrevErrorCount != ErrorCount) { + /* Try some smart error recovery */ + if (SmartErrorSkip () < 0) { + break; + } + } + /* Check for more parameters */ if (CurTok.Tok == TOK_COMMA) { NextToken (); @@ -2065,8 +2173,10 @@ Type* ParseType (Type* T) -void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) -/* Parse a variable, type or function declarator */ +int ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) +/* Parse a variable, type or function declarator. Return -1 if this stops at +** an unpaired right parenthesis/bracket/curly brace. +*/ { /* Used to check if we have any errors during parsing this */ unsigned PrevErrorCount = ErrorCount; @@ -2117,7 +2227,7 @@ void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) } /* Check a few pre-C99 things */ - if ((Spec->Flags & DS_DEF_TYPE) != 0) { + if (D->Ident[0] != '\0' && (Spec->Flags & DS_DEF_TYPE) != 0) { /* Check and warn about an implicit int return in the function */ if (IsTypeFunc (D->Type) && IsRankInt (GetFuncReturnType (D->Type))) { /* Function has an implicit int return. Output a warning if we don't @@ -2129,7 +2239,7 @@ void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) GetFuncDesc (D->Type)->Flags |= FD_OLDSTYLE_INTRET; } - /* For anthing that is not a function or typedef, check for an implicit + /* For anything that is not a function or typedef, check for an implicit ** int declaration. */ if ((D->StorageClass & SC_FUNC) != SC_FUNC && @@ -2144,22 +2254,7 @@ void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) } if (PrevErrorCount != ErrorCount) { - /* Some fix point tokens that are used for error recovery */ - static const token_t TokenList[] = { TOK_COMMA, TOK_SEMI, TOK_LCURLY, TOK_RCURLY }; - - /* Try some smart error recovery */ - SkipTokens (TokenList, sizeof (TokenList) / sizeof (TokenList[0])); - - /* Skip curly braces */ - if (CurTok.Tok == TOK_LCURLY) { - static const token_t CurlyToken[] = { TOK_RCURLY }; - SkipTokens (CurlyToken, sizeof (CurlyToken) / sizeof (CurlyToken[0])); - NextToken (); - } else if (CurTok.Tok == TOK_RCURLY) { - NextToken (); - } - - if (Mode == DM_NEED_IDENT && D->Ident[0] == '\0') { + if ((Spec->Flags & DS_DEF_TYPE) == 0 && Mode == DM_NEED_IDENT && D->Ident[0] == '\0') { /* Make the declaration fictitious if is is not parsed correctly */ D->StorageClass |= SC_FICTITIOUS; @@ -2183,7 +2278,14 @@ void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) } AnonName (D->Ident, Level); } + + /* Try some smart error recovery */ + if (CurTok.Tok != TOK_LCURLY || !IsTypeFunc (D->Type)) { + return SmartErrorSkip (); + } } + + return 0; } diff --git a/src/cc65/declare.h b/src/cc65/declare.h index ca1b88165..add86594d 100644 --- a/src/cc65/declare.h +++ b/src/cc65/declare.h @@ -128,11 +128,19 @@ typedef enum { +int SmartErrorSkip (void); +/* Try some smart error recovery. Skip tokens until either a comma or semicolon +** that is not enclosed in an open parenthesis/bracket/curly brace, or until an +** unpaired right parenthesis/bracket/curly brace is reached. Return 0 if it is +** the former case, or -1 if it is the latter case. */ + Type* ParseType (Type* Type); /* Parse a complete type specification */ -void ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode); -/* Parse a variable, type or function declarator */ +int ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode); +/* Parse a variable, type or function declarator. Return -1 if this stops at +** an unpaired right parenthesis/bracket/curly brace. +*/ void ParseDeclSpec (DeclSpec* Spec, typespec_t TSFlags, unsigned DefStorage); /* Parse a declaration specification */ diff --git a/test/ref/bug1889-missing-identifier.cref b/test/ref/bug1889-missing-identifier.cref index acaf53f94..534c6aaba 100644 --- a/test/ref/bug1889-missing-identifier.cref +++ b/test/ref/bug1889-missing-identifier.cref @@ -1,5 +1,3 @@ bug1889-missing-identifier.c:3: Error: Identifier expected bug1889-missing-identifier.c:3: Error: ';' expected -bug1889-missing-identifier.c:3: Warning: Implicit 'int' is an obsolete feature bug1889-missing-identifier.c:4: Error: Identifier expected -bug1889-missing-identifier.c:4: Warning: Implicit 'int' is an obsolete feature From b99ebc1256ff5400e70c7df8d97a708b45b23620 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 27 Nov 2023 20:39:15 +0800 Subject: [PATCH 2278/2710] Fixed diagnostic messages about undeclared identifiers. --- src/cc65/asmstmt.c | 2 +- src/cc65/expr.c | 2 +- src/cc65/symtab.c | 2 +- test/ref/custom-reference-error.cref | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cc65/asmstmt.c b/src/cc65/asmstmt.c index 6cb6f2ef7..166d05434 100644 --- a/src/cc65/asmstmt.c +++ b/src/cc65/asmstmt.c @@ -102,7 +102,7 @@ static SymEntry* AsmGetSym (unsigned Arg, unsigned Type) /* Did we find a symbol with this name? */ if (Sym == 0) { - Error ("Undefined symbol '%s' for argument %u", CurTok.Ident, Arg); + Error ("Undeclared symbol '%s' for argument %u", CurTok.Ident, Arg); AsmErrorSkip (); return 0; } diff --git a/src/cc65/expr.c b/src/cc65/expr.c index f7ad5affc..6d4b04892 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1322,10 +1322,10 @@ static void Primary (ExprDesc* E) E->Name = (uintptr_t) Sym->Name; } else { /* Undeclared Variable */ + Error ("Undeclared identifier '%s'", Ident); Sym = AddLocalSym (Ident, type_int, SC_AUTO | SC_REF, 0); E->Flags = E_LOC_STACK | E_RTYPE_LVAL; E->Type = type_int; - Error ("Undefined symbol: '%s'", Ident); } } diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index a7436b6b6..ee8e0bbf8 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -1484,7 +1484,7 @@ void MakeZPSym (const char* Name) if (Entry) { Entry->Flags |= SC_ZEROPAGE; } else { - Error ("Undefined symbol: '%s'", Name); + Error ("Undeclared symbol: '%s'", Name); } } diff --git a/test/ref/custom-reference-error.cref b/test/ref/custom-reference-error.cref index fa584f307..728cc0e15 100644 --- a/test/ref/custom-reference-error.cref +++ b/test/ref/custom-reference-error.cref @@ -1,5 +1,5 @@ custom-reference-error.c:18: Error: Call to undeclared function 'printf' -custom-reference-error.c:19: Error: Undefined symbol: 'n' +custom-reference-error.c:19: Error: Undeclared identifier 'n' custom-reference-error.c:21: Warning: Control reaches end of non-void function [-Wreturn-type] custom-reference-error.c:21: Warning: Parameter 'argc' is never used custom-reference-error.c:21: Warning: Parameter 'argv' is never used From 546be1d5ddb1238edd891f96a0d4d64436879e8d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 27 Nov 2023 20:42:50 +0800 Subject: [PATCH 2279/2710] Fixed assertion failure when there is an undefined symbol used in a parameter list. --- src/cc65/declare.c | 2 ++ src/cc65/symtab.c | 13 +++++++++++-- src/cc65/symtab.h | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 4bfd52c5e..376f25845 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1850,6 +1850,7 @@ static FuncDesc* ParseFuncDecl (void) } /* Parse params */ + PushLexicalLevel (LEX_LEVEL_PARAM_LIST); if ((F->Flags & FD_OLDSTYLE) == 0) { /* New-style function */ ParseAnsiParamList (F); @@ -1857,6 +1858,7 @@ static FuncDesc* ParseFuncDecl (void) /* Old-style function */ ParseOldStyleParamList (F); } + PopLexicalLevel (); /* Remember the last function parameter. We need it later for several ** purposes, for example when passing stuff to fastcall functions. Since diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index a7436b6b6..47e4b3153 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -1221,7 +1221,14 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs ident Ident; /* Do we have an entry with this name already? */ - SymEntry* Entry = FindSymInTable (Tab, Name, HashStr (Name)); + SymEntry* Entry; + + /* HACK: only allows to add parameter symbols in a parameter list */ + if ((Flags & SC_PARAM) == 0 && GetLexicalLevel () == LEX_LEVEL_PARAM_LIST) { + return 0; + } + + Entry = FindSymInTable (Tab, Name, HashStr (Name)); if (Entry) { int CheckExtern = 0; @@ -1419,7 +1426,9 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) /* Add an alias of the global symbol to the local symbol table */ if (Tab == SymTab0 && SymTab != SymTab0 && Entry->Owner != SymTab && Alias == 0) { Alias = AddLocalSym (Name, T, SC_ALIAS, 0); - Alias->V.A.Field = Entry; + if (Alias != 0) { + Alias->V.A.Field = Entry; + } } /* Return the entry */ diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h index b711fe606..38edddcb0 100644 --- a/src/cc65/symtab.h +++ b/src/cc65/symtab.h @@ -78,6 +78,7 @@ struct LexicalLevel { #define LEX_LEVEL_FUNCTION 2U #define LEX_LEVEL_BLOCK 3U #define LEX_LEVEL_STRUCT 4U +#define LEX_LEVEL_PARAM_LIST 5U /* HACK for error recovery */ /* Forwards */ struct FuncDesc; From 6434176909002b3183a7c82d2909d8c740407bf4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 29 Nov 2023 12:27:01 +0800 Subject: [PATCH 2280/2710] Fixed constness of bit-fields. --- src/cc65/datatype.c | 4 ++-- src/cc65/datatype.h | 4 ++-- src/cc65/symtab.c | 1 + test/err/bug2018-bitfield.c | 14 ++++++++++++++ 4 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 test/err/bug2018-bitfield.c diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 81727e491..9e0652526 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -497,8 +497,8 @@ Type* NewPointerTo (const Type* T) Type* NewBitFieldOf (const Type* T, unsigned BitOffs, unsigned BitWidth) -/* Return a type string that is "T : BitWidth" aligned on BitOffs. The type -** string is allocated on the heap and may be freed after use. +/* Return a type string that is "unqualified T : BitWidth" aligned on BitOffs. +** The type string is allocated on the heap and may be freed after use. */ { Type* P; diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 0890c4d12..4f4b6f25e 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -435,8 +435,8 @@ Type* NewPointerTo (const Type* T); */ Type* NewBitFieldOf (const Type* T, unsigned BitOffs, unsigned BitWidth); -/* Return a type string that is "T : BitWidth" aligned on BitOffs. The type -** string is allocated on the heap and may be freed after use. +/* Return a type string that is "unqualified T : BitWidth" aligned on BitOffs. +** The type string is allocated on the heap and may be freed after use. */ const Type* AddressOf (const Type* T); diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index d30e591c9..a4ca9e23d 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -1023,6 +1023,7 @@ SymEntry* AddBitField (const char* Name, const Type* T, unsigned Offs, } else { Entry->Type = NewBitFieldOf (T, BitOffs, BitWidth); } + Entry->Type[0].C |= GetQualifier (T) & T_MASK_QUAL; /* Add the entry to the symbol table */ AddSymEntry (FieldTab, Entry); diff --git a/test/err/bug2018-bitfield.c b/test/err/bug2018-bitfield.c new file mode 100644 index 000000000..ea2928659 --- /dev/null +++ b/test/err/bug2018-bitfield.c @@ -0,0 +1,14 @@ +/* Bug #2018 - Compiler has problems with const struct fields */ + +typedef union U { + int a : 16; + const int b : 16; +} U; + +int main(void) +{ + U x = { 42 }; + x.b = 0; + + return 0; +} From c0a2021d9ae8a68989a873452085eda76b6b7a39 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 30 Nov 2023 00:35:30 +0800 Subject: [PATCH 2281/2710] Fixed endlessly repeated disgnostics when there are some certain patterns of syntax errors in a struct/union declaration. --- src/cc65/compile.c | 44 ++++++++------------- src/cc65/declare.c | 95 ++++++++++++++++++++++++++++++++++------------ src/cc65/declare.h | 21 +++++++--- 3 files changed, 102 insertions(+), 58 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 02d37c53e..bef55e375 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -257,6 +257,7 @@ static void Parse (void) /* Parse the initialization */ ParseInit (Sym->Type); + } else { /* This is a declaration */ @@ -326,21 +327,19 @@ NextDecl: } } - /* Function declaration? */ - if (Sym && IsTypeFunc (Sym->Type)) { - - /* Function */ - if (CurTok.Tok == TOK_SEMI) { - /* Prototype only */ - NeedClean = 0; - NextToken (); - } else if (CurTok.Tok == TOK_LCURLY) { - /* ISO C: The type category in a function definition cannot be - ** inherited from a typedef. - */ + /* Finish the declaration */ + if (Sym) { + /* Function definition? */ + if (IsTypeFunc (Sym->Type) && CurTok.Tok == TOK_LCURLY) { if (IsTypeFunc (Spec.Type) && TypeCmp (Sym->Type, Spec.Type).C >= TC_EQUAL) { + /* ISO C: The type category in a function definition cannot be + ** inherited from a typedef. + */ Error ("Function cannot be defined with a typedef"); } else if (comma) { + /* ISO C: A function definition cannot shall its return type + ** specifier with other declarators. + */ Error ("';' expected after top level declarator"); } @@ -350,30 +349,19 @@ NextDecl: /* Make sure we aren't omitting any work */ CheckDeferredOpAllDone (); - } - - } else { - - if (Sym) { + } else { /* Must be followed by a semicolon */ - if (CurTok.Tok != TOK_SEMI) { + if (ConsumeSemi ()) { + NeedClean = 0; + } else { NeedClean = -1; } - ConsumeSemi (); } - } /* Try some smart error recovery */ if (PrevErrorCount != ErrorCount && NeedClean < 0) { - /* Some fix point tokens that are used for error recovery */ - static const token_t TokenList[] = { TOK_SEMI, TOK_RCURLY }; - - SmartErrorSkip (); - SkipTokens (TokenList, sizeof (TokenList) / sizeof (TokenList[0])); - if (CurTok.Tok == TOK_SEMI || CurTok.Tok == TOK_RCURLY) { - NextToken (); - } + SmartErrorSkip (1); } } diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 45d031ff2..b6620785f 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -117,11 +117,22 @@ static int CloseBrace (Collection* C, token_t Tok) -int SmartErrorSkip (void) -/* Try some smart error recovery. Skip tokens until either a comma or semicolon -** that is not enclosed in an open parenthesis/bracket/curly brace, or until an -** unpaired right parenthesis/bracket/curly brace is reached. Return 0 if it is -** the former case, or -1 if it is the latter case. */ +int SmartErrorSkip (int WholeDecl) +/* Try some smart error recovery. +** +** - If WholeDecl is 0: +** Skip tokens until a comma or closing curly brace that is not enclosed in +** an open parenthesis/bracket/curly brace, or until a semicolon, EOF or +** unpaired right parenthesis/bracket/curly brace is reached. +** +** - If WholeDecl is non-0: +** Skip tokens until a closing curly brace that is not enclosed in an open +** parenthesis/bracket/curly brace, or until a semicolon or EOF is reached. +** +** Return 0 if this exits as soon as it reaches an EOF. Return 0 as well if +** this exits with no open parentheses/brackets/curly braces. Otherwise, return +** -1. +*/ { Collection C = AUTO_COLLECTION_INITIALIZER; int Res = 0; @@ -142,31 +153,41 @@ int SmartErrorSkip (void) case TOK_RPAREN: case TOK_RBRACK: - if (CloseBrace (&C, CurTok.Tok)) { - Res = -1; - goto ExitPoint; + if (CloseBrace (&C, CurTok.Tok) < 0) { + if (!WholeDecl) { + Res = -1; + goto ExitPoint; + } + NextToken (); } break; case TOK_RCURLY: - if (CloseBrace (&C, CurTok.Tok)) { - Res = -1; - goto ExitPoint; + if (CloseBrace (&C, CurTok.Tok) < 0) { + if (!WholeDecl) { + Res = -1; + goto ExitPoint; + } + NextToken (); } else if (CollCount (&C) == 0) { goto ExitPoint; } break; case TOK_COMMA: - if (CollCount (&C) == 0) { + if (CollCount (&C) == 0 && !WholeDecl) { goto ExitPoint; } NextToken (); break; case TOK_SEMI: + if (CollCount (&C) != 0) { + Res = -1; + } + goto ExitPoint; + case TOK_CEOF: - Res = -1; goto ExitPoint; default: @@ -1058,8 +1079,9 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) while (CurTok.Tok != TOK_RCURLY) { /* Get the type of the entry */ - DeclSpec Spec; - int SignednessSpecified = 0; + DeclSpec Spec; + int SignednessSpecified = 0; + int NeedClean = 0; /* Check for a _Static_assert */ if (CurTok.Tok == TOK_STATIC_ASSERT) { @@ -1076,7 +1098,7 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) Declarator Decl; /* Get type and name of the struct field */ - ParseDecl (&Spec, &Decl, DM_ACCEPT_IDENT); + NeedClean = ParseDecl (&Spec, &Decl, DM_ACCEPT_IDENT); /* Check for a bit-field declaration */ FieldWidth = ParseFieldWidth (&Decl); @@ -1172,7 +1194,18 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { } NextToken (); } - ConsumeSemi (); + + /* Must be followed by a semicolon */ + if (NeedClean >= 0 && ConsumeSemi ()) { + NeedClean = 0; + } else { + NeedClean = -1; + } + + /* Try some smart error recovery */ + if (NeedClean < 0) { + SmartErrorSkip (1); + } } /* Skip the closing brace */ @@ -1236,8 +1269,9 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) while (CurTok.Tok != TOK_RCURLY) { /* Get the type of the entry */ - DeclSpec Spec; - int SignednessSpecified = 0; + DeclSpec Spec; + int SignednessSpecified = 0; + int NeedClean = 0; /* Check for a _Static_assert */ if (CurTok.Tok == TOK_STATIC_ASSERT) { @@ -1262,7 +1296,7 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) } /* Get type and name of the struct field */ - ParseDecl (&Spec, &Decl, DM_ACCEPT_IDENT); + NeedClean = ParseDecl (&Spec, &Decl, DM_ACCEPT_IDENT); /* Check for a bit-field declaration */ FieldWidth = ParseFieldWidth (&Decl); @@ -1403,7 +1437,18 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { } NextToken (); } - ConsumeSemi (); + + /* Must be followed by a semicolon */ + if (NeedClean >= 0 && ConsumeSemi ()) { + NeedClean = 0; + } else { + NeedClean = -1; + } + + /* Try some smart error recovery */ + if (NeedClean < 0) { + SmartErrorSkip (1); + } } if (BitOffs > 0) { @@ -1778,7 +1823,7 @@ static void ParseOldStyleParamList (FuncDesc* F) Error ("Identifier expected for parameter name"); /* Try some smart error recovery */ - if (SmartErrorSkip () < 0) { + if (SmartErrorSkip (0) < 0) { break; } } @@ -1868,7 +1913,7 @@ static void ParseOldStyleParamList (FuncDesc* F) if (PrevErrorCount != ErrorCount && CurTok.Tok != TOK_LCURLY) { /* Try some smart error recovery */ - SmartErrorSkip (); + SmartErrorSkip (0); } } @@ -1953,7 +1998,7 @@ static void ParseAnsiParamList (FuncDesc* F) if (PrevErrorCount != ErrorCount) { /* Try some smart error recovery */ - if (SmartErrorSkip () < 0) { + if (SmartErrorSkip (0) < 0) { break; } } @@ -2335,7 +2380,7 @@ int ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) /* Try some smart error recovery */ if (CurTok.Tok != TOK_LCURLY || !IsTypeFunc (D->Type)) { - return SmartErrorSkip (); + return SmartErrorSkip (0); } } diff --git a/src/cc65/declare.h b/src/cc65/declare.h index add86594d..1ce764f7a 100644 --- a/src/cc65/declare.h +++ b/src/cc65/declare.h @@ -128,11 +128,22 @@ typedef enum { -int SmartErrorSkip (void); -/* Try some smart error recovery. Skip tokens until either a comma or semicolon -** that is not enclosed in an open parenthesis/bracket/curly brace, or until an -** unpaired right parenthesis/bracket/curly brace is reached. Return 0 if it is -** the former case, or -1 if it is the latter case. */ +int SmartErrorSkip (int WholeDecl); +/* Try some smart error recovery. +** +** - If WholeDecl is 0: +** Skip tokens until a comma or closing curly brace that is not enclosed in +** an open parenthesis/bracket/curly brace, or until a semicolon, EOF or +** unpaired right parenthesis/bracket/curly brace is reached. +** +** - If WholeDecl is non-0: +** Skip tokens until a closing curly brace that is not enclosed in an open +** parenthesis/bracket/curly brace, or until a semicolon or EOF is reached. +** +** Return 0 if this exits as soon as it reaches an EOF. Return 0 as well if +** this exits with no open parentheses/brackets/curly braces. Otherwise, return +** -1. +*/ Type* ParseType (Type* Type); /* Parse a complete type specification */ From 47e7ed2f560c991959e4d3c09254e820ecd1fe25 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 30 Nov 2023 00:36:13 +0800 Subject: [PATCH 2282/2710] Fixed wrong "Mixed declarations and code are not supported in cc65" error message when it should be "Expression expected". --- src/cc65/expr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 6d4b04892..54984230c 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1412,9 +1412,9 @@ static void Primary (ExprDesc* E) } else { /* Let's see if this is a C99-style declaration */ DeclSpec Spec; - ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT, SC_AUTO); + ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_NONE, SC_AUTO); - if (Spec.Type->C != T_END) { + if ((Spec.Flags & DS_DEF_TYPE) == 0) { /* Recognized but not supported */ Error ("Mixed declarations and code are not supported in cc65"); From d8a3938f2b8d6c53c2f75b5a07964e8beef746a5 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 13 Nov 2023 20:24:14 +0100 Subject: [PATCH 2283/2710] Optimize a bit static long assignation --- src/Makefile | 2 +- src/cc65.vcxproj | 4 +- src/cc65/codegen.c | 42 ++------- src/cc65/codeopt.c | 7 ++ src/cc65/coptlong.c | 210 +++++++++++++++++++++++++++++++++++++++++ src/cc65/coptlong.h | 63 +++++++++++++ test/val/long.c | 41 ++++++++ test/val/static-long.c | 41 ++++++++ 8 files changed, 374 insertions(+), 36 deletions(-) create mode 100644 src/cc65/coptlong.c create mode 100644 src/cc65/coptlong.h create mode 100644 test/val/long.c create mode 100644 test/val/static-long.c diff --git a/src/Makefile b/src/Makefile index 034a2230f..4b993c881 100644 --- a/src/Makefile +++ b/src/Makefile @@ -66,7 +66,7 @@ ifndef BUILD_ID endif $(info BUILD_ID: $(BUILD_ID)) -CFLAGS += -MMD -MP -O3 -I common \ +CFLAGS += -MMD -MP -O0 -g -I common \ -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) \ -DCA65_INC="\"$(CA65_INC)\"" -DCC65_INC="\"$(CC65_INC)\"" -DCL65_TGT="\"$(CL65_TGT)\"" \ -DLD65_LIB="\"$(LD65_LIB)\"" -DLD65_OBJ="\"$(LD65_OBJ)\"" -DLD65_CFG="\"$(LD65_CFG)\"" \ diff --git a/src/cc65.vcxproj b/src/cc65.vcxproj index 6f3f8e4e4..9c1719538 100644 --- a/src/cc65.vcxproj +++ b/src/cc65.vcxproj @@ -69,6 +69,7 @@ <ClInclude Include="cc65\coptcmp.h" /> <ClInclude Include="cc65\coptind.h" /> <ClInclude Include="cc65\coptjmp.h" /> + <ClInclude Include="cc65\coptlong.h" /> <ClInclude Include="cc65\coptmisc.h" /> <ClInclude Include="cc65\coptptrload.h" /> <ClInclude Include="cc65\coptptrstore.h" /> @@ -150,6 +151,7 @@ <ClCompile Include="cc65\coptcmp.c" /> <ClCompile Include="cc65\coptind.c" /> <ClCompile Include="cc65\coptjmp.c" /> + <ClCompile Include="cc65\coptlong.c" /> <ClCompile Include="cc65\coptmisc.c" /> <ClCompile Include="cc65\coptptrload.c" /> <ClCompile Include="cc65\coptptrstore.c" /> @@ -214,4 +216,4 @@ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> -</Project> \ No newline at end of file +</Project> diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 2721f8e96..db487ca40 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -705,7 +705,6 @@ void g_getimmed (unsigned Flags, uintptr_t Val, long Offs) /* Load a constant into the primary register */ { unsigned char B1, B2, B3, B4; - unsigned Done; if ((Flags & CF_CONST) != 0) { @@ -731,40 +730,15 @@ void g_getimmed (unsigned Flags, uintptr_t Val, long Offs) B3 = (unsigned char) (Val >> 16); B4 = (unsigned char) (Val >> 24); - /* Remember which bytes are done */ - Done = 0; - - /* Load the value */ - AddCodeLine ("ldx #$%02X", B2); - Done |= 0x02; - if (B2 == B3) { - AddCodeLine ("stx sreg"); - Done |= 0x04; - } - if (B2 == B4) { - AddCodeLine ("stx sreg+1"); - Done |= 0x08; - } - if ((Done & 0x04) == 0 && B1 != B3) { - AddCodeLine ("lda #$%02X", B3); - AddCodeLine ("sta sreg"); - Done |= 0x04; - } - if ((Done & 0x08) == 0 && B1 != B4) { - AddCodeLine ("lda #$%02X", B4); - AddCodeLine ("sta sreg+1"); - Done |= 0x08; - } + /* Load the value. Don't be too smart here and let + * the optimizer do its job. + */ + AddCodeLine ("lda #$%02X", B4); + AddCodeLine ("sta sreg+1"); + AddCodeLine ("lda #$%02X", B3); + AddCodeLine ("sta sreg"); AddCodeLine ("lda #$%02X", B1); - Done |= 0x01; - if ((Done & 0x04) == 0) { - CHECK (B1 == B3); - AddCodeLine ("sta sreg"); - } - if ((Done & 0x08) == 0) { - CHECK (B1 == B4); - AddCodeLine ("sta sreg+1"); - } + AddCodeLine ("ldx #$%02X", B2); break; default: diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index 3a2c2a35d..c9c1592bc 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -57,6 +57,7 @@ #include "coptcmp.h" #include "coptind.h" #include "coptjmp.h" +#include "coptlong.h" #include "coptmisc.h" #include "coptptrload.h" #include "coptptrstore.h" @@ -150,6 +151,8 @@ static OptFunc DOptJumpTarget3 = { OptJumpTarget3, "OptJumpTarget3", 100, 0, static OptFunc DOptLoad1 = { OptLoad1, "OptLoad1", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptLoad2 = { OptLoad2, "OptLoad2", 200, 0, 0, 0, 0, 0 }; static OptFunc DOptLoad3 = { OptLoad3, "OptLoad3", 0, 0, 0, 0, 0, 0 }; +static OptFunc DOptLongAssign = { OptLongAssign, "OptLongAssign", 100, 0, 0, 0, 0, 0 }; +static OptFunc DOptLongCopy = { OptLongCopy, "OptLongCopy", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptNegAX1 = { OptNegAX1, "OptNegAX1", 165, 0, 0, 0, 0, 0 }; static OptFunc DOptNegAX2 = { OptNegAX2, "OptNegAX2", 200, 0, 0, 0, 0, 0 }; static OptFunc DOptPrecalc = { OptPrecalc, "OptPrecalc", 100, 0, 0, 0, 0, 0 }; @@ -262,6 +265,8 @@ static OptFunc* OptFuncs[] = { &DOptLoad1, &DOptLoad2, &DOptLoad3, + &DOptLongAssign, + &DOptLongCopy, &DOptNegAX1, &DOptNegAX2, &DOptPrecalc, @@ -632,6 +637,7 @@ static unsigned RunOptGroup1 (CodeSeg* S) Changes += RunOptFunc (S, &DOptAdd6, 1); Changes += RunOptFunc (S, &DOptSub1, 1); Changes += RunOptFunc (S, &DOptSub3, 1); + Changes += RunOptFunc (S, &DOptLongAssign, 1); Changes += RunOptFunc (S, &DOptStore4, 1); Changes += RunOptFunc (S, &DOptStore5, 1); Changes += RunOptFunc (S, &DOptShift1, 1); @@ -641,6 +647,7 @@ static unsigned RunOptGroup1 (CodeSeg* S) Changes += RunOptFunc (S, &DOptStore1, 1); Changes += RunOptFunc (S, &DOptStore2, 5); Changes += RunOptFunc (S, &DOptStore3, 5); + Changes += RunOptFunc (S, &DOptLongCopy, 1); /* Return the number of changes */ return Changes; diff --git a/src/cc65/coptlong.c b/src/cc65/coptlong.c new file mode 100644 index 000000000..16f089e49 --- /dev/null +++ b/src/cc65/coptlong.c @@ -0,0 +1,210 @@ +/*****************************************************************************/ +/* */ +/* coptlong.c */ +/* */ +/* Long integers optimizations */ +/* */ +/* */ +/* */ +/* (C) 2001-2009, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* (C) 2023, Colin Leroy-Mira <colin@colino.net */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +/* common */ +#include "cpu.h" + +/* cc65 */ +#include "codeent.h" +#include "coptind.h" +#include "codeinfo.h" +#include "codeopt.h" +#include "error.h" + + +/*****************************************************************************/ +/* Remove unused loads and stores */ +/*****************************************************************************/ + + + +unsigned OptLongAssign (CodeSeg* S) +/* Simplify long assignments. +** Recognize +** lda ... 0 +** sta sreg+1 1 +** lda ... 2 +** sta sreg 3 +** lda ... 4 +** ldx ... 5 +** sta M0002 6 +** stx M0002+1 7 +** ldy sreg 8 +** sty M0002+2 9 +** ldy sreg+1 10 +** sty M0002+3 11 +** and simplify if not used right after. +*/ +{ + unsigned Changes = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* L[12]; + + /* Get next entry */ + L[0] = CS_GetEntry (S, I); + + if (CS_GetEntries (S, L+1, I+1, 11)) { + if (L[0]->OPC == OP65_LDA && + L[1]->OPC == OP65_STA && + !strcmp (L[1]->Arg, "sreg+1") && + L[2]->OPC == OP65_LDA && + L[3]->OPC == OP65_STA && + !strcmp (L[3]->Arg, "sreg") && + L[4]->OPC == OP65_LDA && + L[5]->OPC == OP65_LDX && + L[6]->OPC == OP65_STA && + L[7]->OPC == OP65_STX && + !strncmp(L[7]->Arg, L[6]->Arg, strlen(L[6]->Arg)) && + !strcmp(L[7]->Arg + strlen(L[6]->Arg), "+1") && + L[8]->OPC == OP65_LDY && + !strcmp (L[8]->Arg, "sreg") && + L[9]->OPC == OP65_STY && + !strncmp(L[9]->Arg, L[6]->Arg, strlen(L[6]->Arg)) && + !strcmp(L[9]->Arg + strlen(L[6]->Arg), "+2") && + L[10]->OPC == OP65_LDY && + !strcmp (L[10]->Arg, "sreg+1") && + L[11]->OPC == OP65_STY && + !strncmp(L[11]->Arg, L[6]->Arg, strlen(L[6]->Arg)) && + !strcmp(L[11]->Arg + strlen(L[6]->Arg), "+3") && + !RegXUsed (S, I+11)) { + + L[1]->AM = L[11]->AM; + CE_SetArg(L[1], L[11]->Arg); + + L[3]->AM = L[9]->AM; + CE_SetArg(L[3], L[9]->Arg); + + CS_DelEntries (S, I+8, 4); + + /* Remember, we had changes */ + ++Changes; + } + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} + +unsigned OptLongCopy (CodeSeg* S) +/* Simplify long copies. +** Recognize +** lda XXX+3 0 +** sta sreg+1 1 +** lda XXX+2 2 +** sta sreg 3 +** ldx XXX+1 4 +** lda XXX 5 +** sta YYY 6 +** stx YYY+1 7 +** ldy sreg 8 +** sty YYY+2 9 +** ldy sreg+1 10 +** sty YYY+3 11 +** and simplify if not used right after. +*/ +{ + unsigned Changes = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + CodeEntry* L[12]; + + /* Get next entry */ + L[0] = CS_GetEntry (S, I); + + if (CS_GetEntries (S, L+1, I+1, 11)) { + if (L[0]->OPC == OP65_LDA && + !strncmp(L[0]->Arg, L[5]->Arg, strlen(L[5]->Arg)) && + !strcmp(L[0]->Arg + strlen(L[5]->Arg), "+3") && + L[1]->OPC == OP65_STA && + !strcmp (L[1]->Arg, "sreg+1") && + L[2]->OPC == OP65_LDA && + !strncmp(L[2]->Arg, L[5]->Arg, strlen(L[5]->Arg)) && + !strcmp(L[2]->Arg + strlen(L[5]->Arg), "+2") && + L[3]->OPC == OP65_STA && + !strcmp (L[3]->Arg, "sreg") && + L[4]->OPC == OP65_LDX && + !strncmp(L[4]->Arg, L[5]->Arg, strlen(L[5]->Arg)) && + !strcmp(L[4]->Arg + strlen(L[5]->Arg), "+1") && + L[5]->OPC == OP65_LDA && + L[6]->OPC == OP65_STA && + L[7]->OPC == OP65_STX && + !strncmp(L[7]->Arg, L[6]->Arg, strlen(L[6]->Arg)) && + !strcmp(L[7]->Arg + strlen(L[6]->Arg), "+1") && + L[8]->OPC == OP65_LDY && + !strcmp (L[8]->Arg, "sreg") && + L[9]->OPC == OP65_STY && + !strncmp(L[9]->Arg, L[6]->Arg, strlen(L[6]->Arg)) && + !strcmp(L[9]->Arg + strlen(L[6]->Arg), "+2") && + L[10]->OPC == OP65_LDY && + !strcmp (L[10]->Arg, "sreg+1") && + L[11]->OPC == OP65_STY && + !strncmp(L[11]->Arg, L[6]->Arg, strlen(L[6]->Arg)) && + !strcmp(L[11]->Arg + strlen(L[6]->Arg), "+3") && + !RegXUsed (S, I+11)) { + + L[1]->AM = L[11]->AM; + CE_SetArg(L[1], L[11]->Arg); + + L[3]->AM = L[9]->AM; + CE_SetArg(L[3], L[9]->Arg); + + CS_DelEntries (S, I+8, 4); + + /* Remember, we had changes */ + ++Changes; + } + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} diff --git a/src/cc65/coptlong.h b/src/cc65/coptlong.h new file mode 100644 index 000000000..c0233c299 --- /dev/null +++ b/src/cc65/coptlong.h @@ -0,0 +1,63 @@ +/*****************************************************************************/ +/* */ +/* coptlong.h */ +/* */ +/* Long integers optimizations */ +/* */ +/* */ +/* */ +/* (C) 2001-2009, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* (C) 2023, Colin Leroy-Mira <colin@colino.net */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef COPTLONG_H +#define COPTLONG_H + + + +/* cc65 */ +#include "codeseg.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +unsigned OptLongAssign (CodeSeg* S); +/* Simplify long assigns. */ + +unsigned OptLongCopy (CodeSeg* S); +/* Simplify long copy. */ + + + +/* End of coptind.h */ + +#endif diff --git a/test/val/long.c b/test/val/long.c new file mode 100644 index 000000000..076483c9b --- /dev/null +++ b/test/val/long.c @@ -0,0 +1,41 @@ +#include <stdint.h> +#include <stdio.h> + +int res = 0; + +int main(void) +{ + long a, b; + + a = 0x12345678L; + + /* Test assignment */ + b = a; + if (b != a) { + res++; + } + + /* Test increment */ + b++; + if (b != 0x12345679L) { + res++; + } + + /* Test decrement */ + b--; + if (b != 0x12345678L) { + res++; + } + + /* Test pre-decrement with test */ + if (--b != 0x12345677L) { + res++; + } + + a = --b; + if (a != 0x12345676L) { + res++; + } + + return res; +} diff --git a/test/val/static-long.c b/test/val/static-long.c new file mode 100644 index 000000000..a2e4e53a3 --- /dev/null +++ b/test/val/static-long.c @@ -0,0 +1,41 @@ +#include <stdint.h> +#include <stdio.h> + +int res = 0; + +int main(void) +{ + static long a, b; + + a = 0x12345678L; + + /* Test assignment */ + b = a; + if (b != a) { + res++; + } + + /* Test increment */ + b++; + if (b != 0x12345679L) { + res++; + } + + /* Test decrement */ + b--; + if (b != 0x12345678L) { + res++; + } + + /* Test pre-decrement with test */ + if (--b != 0x12345677L) { + res++; + } + + a = --b; + if (a != 0x12345676L) { + res++; + } + + return res; +} From 63861766e1fc9907536ab4f211652c62b908faba Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Fri, 1 Dec 2023 14:22:30 +0100 Subject: [PATCH 2284/2710] Fix Makefile change --- src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 4b993c881..034a2230f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -66,7 +66,7 @@ ifndef BUILD_ID endif $(info BUILD_ID: $(BUILD_ID)) -CFLAGS += -MMD -MP -O0 -g -I common \ +CFLAGS += -MMD -MP -O3 -I common \ -Wall -Wextra -Wno-char-subscripts $(USER_CFLAGS) \ -DCA65_INC="\"$(CA65_INC)\"" -DCC65_INC="\"$(CC65_INC)\"" -DCL65_TGT="\"$(CL65_TGT)\"" \ -DLD65_LIB="\"$(LD65_LIB)\"" -DLD65_OBJ="\"$(LD65_OBJ)\"" -DLD65_CFG="\"$(LD65_CFG)\"" \ From b7e7bb7489bb1509b4c67a8d0242a690f3a3a2c3 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 9 Dec 2023 14:34:37 +0800 Subject: [PATCH 2285/2710] Fixed the issue that qualifiers of pointees of function parameters were ignored for type compatibility check. --- src/cc65/typecmp.c | 8 +++++--- src/cc65/typecmp.h | 12 +++++++----- test/err/bug2286-param-qualifier.c | 4 ++++ 3 files changed, 16 insertions(+), 8 deletions(-) create mode 100644 test/err/bug2286-param-qualifier.c diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index bb8bca880..e8b790a69 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -69,6 +69,7 @@ static int EqualFuncParams (const FuncDesc* F1, const FuncDesc* F2) /* Get the symbol types */ const Type* Type1 = Sym1->Type; const Type* Type2 = Sym2->Type; + typecmp_t CmpResult; /* If either of both functions is old style, apply the default ** promotions to the parameter type. @@ -84,9 +85,10 @@ static int EqualFuncParams (const FuncDesc* F1, const FuncDesc* F2) } } - /* Compare this field */ - if (TypeCmp (Type1, Type2).C < TC_EQUAL) { - /* Field types not equal */ + /* Compare types of this parameter */ + CmpResult = TypeCmp (Type1, Type2); + if (CmpResult.C < TC_EQUAL || (CmpResult.F & TCF_MASK_PARAM_DIFF) != 0) { + /* The types are not compatible */ return 0; } diff --git a/src/cc65/typecmp.h b/src/cc65/typecmp.h index fa97ca176..43acc7ea5 100644 --- a/src/cc65/typecmp.h +++ b/src/cc65/typecmp.h @@ -68,15 +68,17 @@ typedef enum { TCF_VOID_PTR_ON_LEFT = 0x01, /* lhs is a void pointer */ TCF_VOID_PTR_ON_RIGHT = 0x02, /* rhs is a void pointer */ TCF_MASK_VOID_PTR = TCF_VOID_PTR_ON_LEFT | TCF_VOID_PTR_ON_RIGHT, - TCF_QUAL_DIFF = 0x04, /* CVR qualifiers differ in a way that doesn't matter */ + TCF_QUAL_DIFF = 0x04, /* lhs doesn't have all of CVR qualifiers of rhs */ TCF_QUAL_IMPLICIT = 0x08, /* CVR qualifiers of lhs are stricter than those of rhs */ - TCF_PTR_QUAL_DIFF = 0x10, /* CVR qualifiers of pointers differ */ - TCF_PTR_QUAL_IMPLICIT = 0x20, /* CVR qualifiers of pointers are stricter on lhs than those on rhs */ - TCF_MASK_C_QUAL_DIFF = 0x3C, /* All C Standard qualifiers */ + TCF_MASK_CVR_DIFF = 0x0C, /* All CVR qualifiers */ + TCF_PTR_QUAL_DIFF = 0x10, /* lhs pointee doesn't have all of CVR qualifiers of rhs pointee */ + TCF_PTR_QUAL_IMPLICIT = 0x20, /* CVR qualifiers of pointees are stricter on lhs than those on rhs */ + TCF_MASK_PTR_QUAL_DIFF = 0x30, /* All CVR qualifiers of pointees */ TCF_ADDRSIZE_QUAL_DIFF = 0x40, /* Address size qualifiers differ */ TCF_CCONV_QUAL_DIFF = 0x80, /* Function calling conventions differ. Unused now */ TCF_INCOMPATIBLE_QUAL = TCF_ADDRSIZE_QUAL_DIFF | TCF_CCONV_QUAL_DIFF, - TCF_MASK_QUAL = TCF_MASK_C_QUAL_DIFF | TCF_INCOMPATIBLE_QUAL, + TCF_MASK_PARAM_DIFF = TCF_MASK_PTR_QUAL_DIFF | TCF_INCOMPATIBLE_QUAL, + TCF_MASK_QUAL = TCF_MASK_CVR_DIFF | TCF_MASK_PTR_QUAL_DIFF | TCF_INCOMPATIBLE_QUAL, } typecmpflag_t; typedef struct { diff --git a/test/err/bug2286-param-qualifier.c b/test/err/bug2286-param-qualifier.c new file mode 100644 index 000000000..a014d0a0c --- /dev/null +++ b/test/err/bug2286-param-qualifier.c @@ -0,0 +1,4 @@ +/* Bug #2286 - Qualifiers of pointees of function parameters ignored for type compatibility check */ + +void woo(int* p); +void woo(const int* p); /* WRONG: Should be an error */ From 98ffc031d16efe00b4338e79f903382aa54af957 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 9 Dec 2023 14:35:00 +0800 Subject: [PATCH 2286/2710] Fixed an iteration bug in type composition. --- src/cc65/expr.c | 3 ++- src/cc65/typeconv.c | 7 ------- test/err/bug2285-composite-type.c | 5 +++++ 3 files changed, 7 insertions(+), 8 deletions(-) create mode 100644 test/err/bug2285-composite-type.c diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 54984230c..a87335f42 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -4102,9 +4102,10 @@ static void hieQuest (ExprDesc* Expr) /* Avoid further errors */ ResultType = NewPointerTo (type_void); } else { - /* Result has the composite type */ + /* Result has the properly qualified composite type */ ResultType = TypeDup (Expr2.Type); TypeComposition (ResultType, Expr3.Type); + ResultType[1].C |= GetQualifier (Indirect (Expr3.Type)); } } } else if (IsClassPtr (Expr2.Type) && Expr3IsNULL) { diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index e5b054148..e5b6749d6 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -485,13 +485,6 @@ void TypeComposition (Type* lhs, const Type* rhs) } else if (RightCount != UNSPECIFIED) { SetElementCount (lhs, RightCount); } - } else { - /* Combine the qualifiers */ - if (IsClassPtr (lhs)) { - ++lhs; - ++rhs; - lhs->C |= GetQualifier (rhs); - } } /* Next type string element */ diff --git a/test/err/bug2285-composite-type.c b/test/err/bug2285-composite-type.c new file mode 100644 index 000000000..18a7b80a5 --- /dev/null +++ b/test/err/bug2285-composite-type.c @@ -0,0 +1,5 @@ +/* Bug #2285 - Regression in type composition */ + +void foo(); /* OK */ +void foo(int (*)(int)); /* OK */ +void foo(int (*)(long)); /* WRONG: Should be an error */ From 87f8893886570364ce18776490f470232860772e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 9 Dec 2023 17:33:46 +0800 Subject: [PATCH 2287/2710] Avoided "Variable 'XXX' is defined but never used" error message resulted from an earlier error. --- src/cc65/symtab.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index a4ca9e23d..86a92a019 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -178,7 +178,7 @@ static void CheckSymTable (SymTable* Tab) if (IS_Get (&WarnUnusedFunc)) { Warning ("Function '%s' is defined but never used", Entry->Name); } - } else { + } else if (!IsAnonName (Entry->Name)) { if (IS_Get (&WarnUnusedVar)) { Warning ("Variable '%s' is defined but never used", Entry->Name); } From d8a722b63826ea4a1df2bb7a7f4e1197f7707117 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 9 Dec 2023 17:34:01 +0800 Subject: [PATCH 2288/2710] Improved diagnostics on multiple definition of struct/union types. --- src/cc65/declare.c | 10 ---------- src/cc65/symtab.c | 19 +++++++++++-------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index b6620785f..96e1f1074 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1220,11 +1220,6 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { Flags |= SC_FICTITIOUS; } - /* Empty union is not supported now */ - if (UnionSize == 0) { - Error ("Empty union type '%s' is not supported", Name); - } - /* Make a real entry from the forward decl and return it */ return AddStructSym (Name, SC_UNION | SC_DEF | Flags, UnionSize, FieldTab, DSFlags); } @@ -1471,11 +1466,6 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { Flags |= SC_FICTITIOUS; } - /* Empty struct is not supported now */ - if (StructSize == 0) { - Error ("Empty struct type '%s' is not supported", Name); - } - /* Make a real entry from the forward decl and return it */ return AddStructSym (Name, SC_STRUCT | SC_DEF | Flags, StructSize, FieldTab, DSFlags); } diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 86a92a019..1b5c1e0b5 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -919,14 +919,8 @@ SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTabl /* SCType must be struct or union */ PRECONDITION (SCType == SC_STRUCT || SCType == SC_UNION); - if ((Flags & SC_FICTITIOUS) == 0) { - /* Do we have an entry with this name already? */ - TagEntry = FindSymInTable (CurTagTab, Name, HashStr (Name)); - } else { - /* Add a fictitious symbol in the fail-safe table */ - TagEntry = 0; - CurTagTab = FailSafeTab; - } + /* Do we have an entry with this name already? */ + TagEntry = FindSymInTable (CurTagTab, Name, HashStr (Name)); if (TagEntry) { @@ -954,6 +948,15 @@ SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTabl if (DSFlags != 0) { *DSFlags |= DS_NEW_TYPE_DEF; } + + if ((Flags & SC_FICTITIOUS) == SC_FICTITIOUS) { + /* Add a fictitious symbol in the fail-safe table */ + TagEntry = 0; + } else if (Size == 0) { + /* Empty struct is not supported now */ + Error ("Empty %s type '%s' is not supported", SCType == SC_STRUCT ? "struct" : "union", Name); + TagEntry = 0; + } } } From d8e61552be196bee3bb7fca6d23d92b1a3ffedc4 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 9 Dec 2023 18:04:29 +0800 Subject: [PATCH 2289/2710] Removed outdated testcases no longer in the directory from test/misc/Makefile. --- test/misc/Makefile | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/test/misc/Makefile b/test/misc/Makefile index c708b160b..811f7f462 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -58,24 +58,6 @@ $(ISEQUAL): ../isequal.c | $(WORKDIR) define PRG_template -# should compile, but gives an error -$(WORKDIR)/int-static-1888.$1.$2.prg: int-static-1888.c | $(WORKDIR) - @echo "FIXME: " $$@ "currently does not compile." - $(if $(QUIET),echo misc/int-static-1888.$1.$2.prg) - $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - -# should compile, but gives an error -$(WORKDIR)/bug760.$1.$2.prg: bug760.c | $(WORKDIR) - @echo "FIXME: " $$@ "currently does not compile." - $(if $(QUIET),echo misc/bug760.$1.$2.prg) - $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - -# should compile, but gives an error -$(WORKDIR)/bug1437.$1.$2.prg: bug1437.c | $(WORKDIR) - @echo "FIXME: " $$@ "currently does not compile." - $(if $(QUIET),echo misc/bug1437.$1.$2.prg) - $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - # should compile, but gives an error $(WORKDIR)/bug1209-ind-goto-rev.$1.$2.prg: bug1209-ind-goto-rev.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." @@ -106,18 +88,6 @@ $(WORKDIR)/pptest2.$1.$2.prg: pptest2.c | $(WORKDIR) $(if $(QUIET),echo misc/pptest2.$1.$2.prg) $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) -# should compile, but gives an error -$(WORKDIR)/bug1263.$1.$2.prg: bug1263.c | $(WORKDIR) - @echo "FIXME: " $$@ "currently does not compile." - $(if $(QUIET),echo misc/bug1263.$1.$2.prg) - $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - -# should compile, but gives an error -$(WORKDIR)/bug1357.$1.$2.prg: bug1357.c | $(WORKDIR) - @echo "FIXME: " $$@ "currently does not compile." - $(if $(QUIET),echo misc/bug1357.$1.$2.prg) - $(NOT) $(CC65) -t sim$2 -$1 -o $$@ $$< $(NULLERR) - # should compile, but compiler exits with internal error $(WORKDIR)/bug1211-ice-move-refs-2.$1.$2.prg: bug1211-ice-move-refs-2.c | $(WORKDIR) @echo "FIXME: " $$@ "currently does not compile." From 2a2cc6cad69dd83ebd02b314f253119461ec7cfb Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sat, 9 Dec 2023 16:43:23 +0100 Subject: [PATCH 2290/2710] Fix bug introduced in #2260 bne should have applied to A, not X, but adding a cmp #$00 before makes the change less optimized than the existing. --- src/cc65/codegen.c | 8 +------- test/val/sub3.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index db487ca40..c2bdfcd63 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -3697,13 +3697,7 @@ void g_dec (unsigned flags, unsigned long val) } else { /* Inline the code */ if (val < 0x300) { - if ((CPUIsets[CPU] & CPU_ISET_65SC02) != 0 && val == 1) { - unsigned L = GetLocalLabel(); - AddCodeLine ("bne %s", LocalLabelName (L)); - AddCodeLine ("dex"); - g_defcodelabel (L); - AddCodeLine ("dea"); - } else if ((val & 0xFF) != 0) { + if ((val & 0xFF) != 0) { unsigned L = GetLocalLabel(); AddCodeLine ("sec"); AddCodeLine ("sbc #$%02X", (unsigned char) val); diff --git a/test/val/sub3.c b/test/val/sub3.c index 2a3646f9a..dd050224e 100644 --- a/test/val/sub3.c +++ b/test/val/sub3.c @@ -168,6 +168,31 @@ void post_dec_assign_test(void) failures++; } +void dex_tests(void) { + static unsigned int a, b; + + a = 257; + b = a - 1; + if (b != 256) { + printf("fail 257 => 256\n"); + failures++; + } + + a = 256; + b = a - 1; + if (b != 255) { + printf("fail 256 => 255\n"); + failures++; + } + + a = 255; + b = a - 1; + if (b != 254) { + printf("fail 255 => 254\n"); + failures++; + } +} + int main(void) { int0 = 5; @@ -186,6 +211,8 @@ int main(void) int1 = 5; post_dec_assign_test(); + dex_tests(); + printf("failures: %d\n",failures); return failures; From b66682a05b01ed0c1bae4e51758e26b4257ab6db Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 10 Dec 2023 00:47:10 +0800 Subject: [PATCH 2291/2710] Fixed wrapped call when the function to wrap has already got defined before it is wrapped with the pragma. --- doc/cc65.sgml | 9 +++++++-- src/cc65/declare.c | 22 ---------------------- src/cc65/expr.c | 14 +++++--------- src/cc65/funcdesc.c | 2 -- src/cc65/funcdesc.h | 2 -- src/cc65/symentry.h | 2 ++ src/cc65/symtab.c | 19 +++++++++++++------ test/val/trampoline.c | 14 +++++++------- 8 files changed, 34 insertions(+), 50 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 37e3e493d..efe48b61b 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1613,13 +1613,13 @@ parameter with the <tt/#pragma/. This pragma sets a wrapper for functions, often used for trampolines. - The name is a function returning <tt/void/, and taking no parameters. + The <tt/name/ is a wrapper function returning <tt/void/, and taking no parameters. It must preserve the CPU's <tt/A/ and <tt/X/ registers if it wraps any <tt/__fastcall__/ functions that have parameters. It must preserve the <tt/Y/ register if it wraps any variadic functions (they have "<tt/.../" in their prototypes). - The identifier is an 8-bit number that's set into <tt/tmp4/. If the identifier + The <tt/identifier/ is an 8-bit number that's set into <tt/tmp4/. If the <tt/identifier/ is "bank", then ca65's <tt><url url="ca65.html#.BANK" name=".bank"></tt> function will be used to determine the number from the bank attribute defined in the linker config, see <url url="ld65.html#MEMORY" name="Other MEMORY area attributes">. Note that @@ -1629,6 +1629,11 @@ parameter with the <tt/#pragma/. The address of a wrapped function is passed in <tt/ptr4/. The wrapper can call that function by using "<tt/jsr callptr4/". + All functions ever declared or defined when this pragma is in effect will be wrapped + when they are called explicitly by their names later in the same translation unit. + Invocation of these functions in any other ways, for example, that via a function + pointer or in inline assembly code, will not be wrapped. + This feature is useful, for example, with banked memory, to switch banks automatically to where a wrapped function resides, and then to restore the previous bank when it returns. diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 076e94aa8..66cae8fa3 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -61,7 +61,6 @@ #include "standard.h" #include "staticassert.h" #include "symtab.h" -#include "wrappedcall.h" #include "typeconv.h" @@ -1965,9 +1964,6 @@ static void ParseAnsiParamList (FuncDesc* F) static FuncDesc* ParseFuncDecl (void) /* Parse the argument list of a function with the enclosing parentheses */ { - SymEntry* WrappedCall; - unsigned int WrappedCallData; - /* Create a new function descriptor */ FuncDesc* F = NewFuncDesc (); @@ -2023,13 +2019,6 @@ static FuncDesc* ParseFuncDecl (void) /* Leave the lexical level remembering the symbol tables */ RememberFunctionLevel (F); - /* Did we have a WrappedCall for this function? */ - GetWrappedCall((void **) &WrappedCall, &WrappedCallData); - if (WrappedCall) { - F->WrappedCall = WrappedCall; - F->WrappedCallData = WrappedCallData; - } - /* Return the function descriptor */ return F; } @@ -2099,7 +2088,6 @@ static void DirectDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) /* Function declarator */ FuncDesc* F; - SymEntry* PrevEntry; /* Parse the function declarator */ F = ParseFuncDecl (); @@ -2110,16 +2098,6 @@ static void DirectDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) Qualifiers &= ~T_QUAL_FASTCALL; } - /* Was there a previous entry? If so, copy WrappedCall info from it */ - PrevEntry = FindGlobalSym (D->Ident); - if (PrevEntry && PrevEntry->Flags & SC_FUNC) { - FuncDesc* D = GetFuncDesc (PrevEntry->Type); - if (D->WrappedCall && !F->WrappedCall) { - F->WrappedCall = D->WrappedCall; - F->WrappedCallData = D->WrappedCallData; - } - } - /* Add the function type. Be sure to bounds check the type buffer */ NeedTypeSpace (D, 1); D->Type[D->Index].C = T_FUNC | Qualifiers; diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 963ea8bd6..af39a79f9 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1057,11 +1057,6 @@ static void FunctionCall (ExprDesc* Expr) /* Special handling for function pointers */ if (IsFuncPtr) { - - if (Func->WrappedCall) { - Warning ("Calling a wrapped function via a pointer, wrapped-call will not be used"); - } - /* If the function is not a fastcall function, load the pointer to ** the function into the primary. */ @@ -1110,18 +1105,18 @@ static void FunctionCall (ExprDesc* Expr) } else { /* Normal function */ - if (Func->WrappedCall) { + if (Expr->Sym && Expr->Sym->V.F.WrappedCall) { char tmp[64]; StrBuf S = AUTO_STRBUF_INITIALIZER; - if (Func->WrappedCallData == WRAPPED_CALL_USE_BANK) { + if (Expr->Sym->V.F.WrappedCallData == WRAPPED_CALL_USE_BANK) { /* Store the bank attribute in tmp4 */ SB_AppendStr (&S, "ldy #<.bank(_"); SB_AppendStr (&S, (const char*) Expr->Name); SB_AppendChar (&S, ')'); } else { /* Store the WrappedCall data in tmp4 */ - sprintf(tmp, "ldy #%u", Func->WrappedCallData); + sprintf(tmp, "ldy #%u", Expr->Sym->V.F.WrappedCallData); SB_AppendStr (&S, tmp); } g_asmcode (&S); @@ -1154,7 +1149,7 @@ static void FunctionCall (ExprDesc* Expr) SB_Done (&S); - g_call (CG_CallFlags (Expr->Type), Func->WrappedCall->Name, ArgSize); + g_call (CG_CallFlags (Expr->Type), Expr->Sym->V.F.WrappedCall->Name, ArgSize); } else { g_call (CG_CallFlags (Expr->Type), (const char*) Expr->Name, ArgSize); } @@ -1328,6 +1323,7 @@ static void Primary (ExprDesc* E) E->Type = type_int; } + E->Sym = Sym; } break; diff --git a/src/cc65/funcdesc.c b/src/cc65/funcdesc.c index 2291b35ee..de881167d 100644 --- a/src/cc65/funcdesc.c +++ b/src/cc65/funcdesc.c @@ -61,8 +61,6 @@ FuncDesc* NewFuncDesc (void) F->ParamSize = 0; F->LastParam = 0; F->FuncDef = 0; - F->WrappedCall = 0; - F->WrappedCallData = 0; /* Return the new struct */ return F; diff --git a/src/cc65/funcdesc.h b/src/cc65/funcdesc.h index e065c7602..8d21d3080 100644 --- a/src/cc65/funcdesc.h +++ b/src/cc65/funcdesc.h @@ -70,8 +70,6 @@ struct FuncDesc { unsigned ParamSize; /* Size of the parameters */ struct SymEntry* LastParam; /* Pointer to last parameter */ struct FuncDesc* FuncDef; /* Descriptor used in definition */ - struct SymEntry* WrappedCall; /* Pointer to the WrappedCall */ - unsigned int WrappedCallData; /* The WrappedCall's user data */ }; diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 715c036d6..639221625 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -159,6 +159,8 @@ struct SymEntry { struct { struct SegContext* Seg; /* SegContext for this function */ struct LiteralPool* LitPool; /* Literal pool for this function */ + struct SymEntry* WrappedCall; /* Pointer to the WrappedCall */ + unsigned int WrappedCallData; /* The WrappedCall's user data */ } F; /* Label name for static symbols */ diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 1b5c1e0b5..3018c910d 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -61,6 +61,7 @@ #include "symentry.h" #include "typecmp.h" #include "typeconv.h" +#include "wrappedcall.h" #include "symtab.h" @@ -1407,24 +1408,30 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) } if (Entry == 0) { - /* Create a new entry */ Entry = NewSymEntry (Name, Flags); /* Set the symbol attributes */ Entry->Type = TypeDup (T); - /* If this is a function, clear additional fields */ - if (IsTypeFunc (T)) { - Entry->V.F.Seg = 0; - } - /* Add the assembler name of the symbol */ SymSetAsmName (Entry); /* Add the entry to the symbol table */ AddSymEntry (Tab, Entry); + } + /* If this is a function, do we wrap calls to it? */ + if (IsTypeFunc (Entry->Type)) { + SymEntry* WrappedCall; + unsigned int WrappedCallData; + + /* Always use the latest wrapper data for it */ + GetWrappedCall ((void**)&WrappedCall, &WrappedCallData); + if (WrappedCall) { + Entry->V.F.WrappedCall = WrappedCall; + Entry->V.F.WrappedCallData = WrappedCallData; + } } /* Add an alias of the global symbol to the local symbol table */ diff --git a/test/val/trampoline.c b/test/val/trampoline.c index 8f1e1547c..d3e73b47d 100644 --- a/test/val/trampoline.c +++ b/test/val/trampoline.c @@ -22,23 +22,23 @@ void func3() { } -#pragma wrapped-call(push, trampoline_inc, 0) - void func2() { func3(); } +#pragma wrapped-call(push, trampoline_inc, 0) + +void func2(void); + #pragma wrapped-call(push, trampoline_set, 4) -void func1(void); - -#pragma wrapped-call(pop) -#pragma wrapped-call(pop) - void func1(void) { func2(); } +#pragma wrapped-call(pop) +#pragma wrapped-call(pop) + int main(void) { flag = 0; From 79b4690077cb41ff53bf48a126f48a53c8af1600 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 10 Dec 2023 15:43:24 +0800 Subject: [PATCH 2292/2710] Fixed missing diagnostics on empty enum/struct/union declareations without tag names. Improved error recovery with local declarations and _Static_assert. --- src/cc65/compile.c | 84 +++-- src/cc65/declare.c | 436 ++++++++++------------- src/cc65/declare.h | 44 +-- src/cc65/expr.c | 2 +- src/cc65/locals.c | 54 ++- src/cc65/scanner.c | 157 ++++++++ src/cc65/scanner.h | 29 ++ src/cc65/staticassert.c | 61 ++-- test/ref/bug1889-missing-identifier.cref | 4 +- 9 files changed, 514 insertions(+), 357 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index bef55e375..5101eccd4 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -79,7 +79,6 @@ static void Parse (void) /* Top level parser routine. */ { - int comma; SymEntry* Sym; FuncDesc* FuncDef = 0; @@ -94,8 +93,8 @@ static void Parse (void) while (CurTok.Tok != TOK_CEOF) { DeclSpec Spec; + int Comma; int NeedClean = 0; - unsigned PrevErrorCount = ErrorCount; /* Check for empty statements */ if (CurTok.Tok == TOK_SEMI) { @@ -119,7 +118,7 @@ static void Parse (void) continue; } - /* Read variable defs and functions */ + /* Read the declaration specifier */ ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT, SC_EXTERN | SC_STATIC); /* Don't accept illegal storage classes */ @@ -139,17 +138,19 @@ static void Parse (void) } /* Read declarations for this type */ - Sym = 0; - comma = 0; + Comma = 0; while (1) { Declarator Decl; + Sym = 0; + /* Read the next declaration */ - NeedClean = ParseDecl (&Spec, &Decl, DM_NEED_IDENT); - if (Decl.Ident[0] == '\0') { - Sym = 0; - goto NextDecl; + NeedClean = ParseDecl (&Spec, &Decl, DM_IDENT_OR_EMPTY); + + /* Bail out if there are errors */ + if (NeedClean <= 0) { + break; } /* Check if we must reserve storage for the variable. We do this, @@ -191,10 +192,6 @@ static void Parse (void) FuncDef->Flags = (FuncDef->Flags & ~FD_EMPTY) | FD_VOID_PARAM; } } else { - if (CurTok.Tok != TOK_COMMA && CurTok.Tok != TOK_SEMI) { - Error ("Expected ',' or ';' after top level declarator"); - } - /* Just a declaration */ Decl.StorageClass |= SC_DECL; } @@ -317,50 +314,49 @@ static void Parse (void) } -NextDecl: /* Check for end of declaration list */ - if (CurTok.Tok == TOK_COMMA) { - NextToken (); - comma = 1; - } else { + if (CurTok.Tok != TOK_COMMA) { break; } + Comma = 1; + Spec.Flags |= DS_NO_EMPTY_DECL; + NextToken (); } /* Finish the declaration */ - if (Sym) { - /* Function definition? */ - if (IsTypeFunc (Sym->Type) && CurTok.Tok == TOK_LCURLY) { - if (IsTypeFunc (Spec.Type) && TypeCmp (Sym->Type, Spec.Type).C >= TC_EQUAL) { - /* ISO C: The type category in a function definition cannot be - ** inherited from a typedef. - */ - Error ("Function cannot be defined with a typedef"); - } else if (comma) { - /* ISO C: A function definition cannot shall its return type - ** specifier with other declarators. - */ - Error ("';' expected after top level declarator"); - } + if (Sym && IsTypeFunc (Sym->Type) && CurTok.Tok == TOK_LCURLY) { + /* A function definition is not terminated with a semicolon */ + if (IsTypeFunc (Spec.Type) && TypeCmp (Sym->Type, Spec.Type).C >= TC_EQUAL) { + /* ISO C: The type category in a function definition cannot be + ** inherited from a typedef. + */ + Error ("Function cannot be defined with a typedef"); + } else if (Comma) { + /* ISO C: A function definition cannot shall its return type + ** specifier with other declarators. + */ + Error ("';' expected after top level declarator"); + } - /* Parse the function body anyways */ - NeedClean = 0; - NewFunc (Sym, FuncDef); + /* Parse the function body anyways */ + NeedClean = 0; + NewFunc (Sym, FuncDef); - /* Make sure we aren't omitting any work */ - CheckDeferredOpAllDone (); + /* Make sure we aren't omitting any work */ + CheckDeferredOpAllDone (); + } else if (NeedClean > 0) { + /* Must be followed by a semicolon */ + if (CurTok.Tok != TOK_SEMI) { + Error ("',' or ';' expected after top level declarator"); + NeedClean = -1; } else { - /* Must be followed by a semicolon */ - if (ConsumeSemi ()) { - NeedClean = 0; - } else { - NeedClean = -1; - } + NextToken (); + NeedClean = 0; } } /* Try some smart error recovery */ - if (PrevErrorCount != ErrorCount && NeedClean < 0) { + if (NeedClean < 0) { SmartErrorSkip (1); } } diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 96e1f1074..efca09d7f 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -72,7 +72,7 @@ -static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSpecified); +static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags); /* Parse a type specifier */ @@ -83,125 +83,6 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSp -static void OpenBrace (Collection* C, token_t Tok) -/* Consume an opening parenthesis/bracket/curly brace and remember that */ -{ - switch (Tok) { - case TOK_LPAREN: Tok = TOK_RPAREN; break; - case TOK_LBRACK: Tok = TOK_RBRACK; break; - case TOK_LCURLY: Tok = TOK_RCURLY; break; - default: Internal ("Unexpected opening token: %02X", (unsigned)Tok); - } - CollAppend (C, (void*)Tok); - NextToken (); -} - - - -static int CloseBrace (Collection* C, token_t Tok) -/* Consume a closing parenthesis/bracket/curly brace if it is matched with an -** opening one and return 0, or bail out and return -1 if it is not matched. -*/ -{ - if (CollCount (C) > 0) { - token_t LastTok = (token_t)CollLast (C); - if (LastTok == Tok) { - CollPop (C); - NextToken (); - return 0; - } - } - - return -1; -} - - - -int SmartErrorSkip (int WholeDecl) -/* Try some smart error recovery. -** -** - If WholeDecl is 0: -** Skip tokens until a comma or closing curly brace that is not enclosed in -** an open parenthesis/bracket/curly brace, or until a semicolon, EOF or -** unpaired right parenthesis/bracket/curly brace is reached. -** -** - If WholeDecl is non-0: -** Skip tokens until a closing curly brace that is not enclosed in an open -** parenthesis/bracket/curly brace, or until a semicolon or EOF is reached. -** -** Return 0 if this exits as soon as it reaches an EOF. Return 0 as well if -** this exits with no open parentheses/brackets/curly braces. Otherwise, return -** -1. -*/ -{ - Collection C = AUTO_COLLECTION_INITIALIZER; - int Res = 0; - - /* Some fix point tokens that are used for error recovery */ - static const token_t TokenList[] = { TOK_COMMA, TOK_SEMI, - TOK_LPAREN, TOK_RPAREN, TOK_LBRACK, TOK_RBRACK, TOK_LCURLY, TOK_RCURLY }; - - while (CurTok.Tok != TOK_CEOF) { - SkipTokens (TokenList, sizeof (TokenList) / sizeof (TokenList[0])); - - switch (CurTok.Tok) { - case TOK_LPAREN: - case TOK_LBRACK: - case TOK_LCURLY: - OpenBrace (&C, CurTok.Tok); - break; - - case TOK_RPAREN: - case TOK_RBRACK: - if (CloseBrace (&C, CurTok.Tok) < 0) { - if (!WholeDecl) { - Res = -1; - goto ExitPoint; - } - NextToken (); - } - break; - - case TOK_RCURLY: - if (CloseBrace (&C, CurTok.Tok) < 0) { - if (!WholeDecl) { - Res = -1; - goto ExitPoint; - } - NextToken (); - } else if (CollCount (&C) == 0) { - goto ExitPoint; - } - break; - - case TOK_COMMA: - if (CollCount (&C) == 0 && !WholeDecl) { - goto ExitPoint; - } - NextToken (); - break; - - case TOK_SEMI: - if (CollCount (&C) != 0) { - Res = -1; - } - goto ExitPoint; - - case TOK_CEOF: - goto ExitPoint; - - default: - Internal ("Unexpected token: %02X", (unsigned)CurTok.Tok); - } - } - -ExitPoint: - DoneCollection (&C); - return Res; -} - - - static unsigned ParseOneStorageClass (void) /* Parse and return a storage class specifier */ { @@ -451,20 +332,36 @@ static void OptionalInt (void) -static void OptionalSigned (int* SignednessSpecified) +static void OptionalSigned (DeclSpec* Spec) /* Eat an optional "signed" token */ { if (CurTok.Tok == TOK_SIGNED) { /* Skip it */ NextToken (); - if (SignednessSpecified != NULL) { - *SignednessSpecified = 1; + if (Spec != NULL) { + Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; } } } +static void UseDefaultType (DeclSpec* Spec, typespec_t TSFlags) +/* Use the default type for the type specifier */ +{ + if ((TSFlags & TS_MASK_DEFAULT_TYPE) == TS_DEFAULT_TYPE_NONE) { + Spec->Flags |= DS_NO_TYPE; + Spec->Type[0].C = T_INT; + Spec->Type[1].C = T_END; + } else { + Spec->Flags |= DS_DEF_TYPE; + Spec->Type[0].C = T_INT; + Spec->Type[1].C = T_END; + } +} + + + static void InitDeclSpec (DeclSpec* Spec) /* Initialize the DeclSpec struct for use */ { @@ -1080,7 +977,6 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) /* Get the type of the entry */ DeclSpec Spec; - int SignednessSpecified = 0; int NeedClean = 0; /* Check for a _Static_assert */ @@ -1090,7 +986,17 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) } InitDeclSpec (&Spec); - ParseTypeSpec (&Spec, TS_DEFAULT_TYPE_NONE, &SignednessSpecified); + ParseTypeSpec (&Spec, TS_DEFAULT_TYPE_NONE); + + /* Check if this is only a type declaration */ + if (CurTok.Tok == TOK_SEMI && (Spec.Flags & DS_EXTRA_TYPE) == 0) { + CheckEmptyDecl (&Spec); + NextToken (); + continue; + } + + /* Allow anonymous bit-fields */ + Spec.Flags |= DS_ALLOW_BITFIELD; /* Read fields with this type */ while (1) { @@ -1098,7 +1004,12 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) Declarator Decl; /* Get type and name of the struct field */ - NeedClean = ParseDecl (&Spec, &Decl, DM_ACCEPT_IDENT); + NeedClean = ParseDecl (&Spec, &Decl, DM_IDENT_OR_EMPTY); + + /* Bail out if there are errors */ + if (NeedClean <= 0) { + break; + } /* Check for a bit-field declaration */ FieldWidth = ParseFieldWidth (&Decl); @@ -1123,9 +1034,7 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) Decl.Type[0].C &= ~T_QUAL_CVR; } } else { - /* A non bit-field without a name is legal but useless */ - Warning ("Declaration does not declare anything"); - + /* Invalid member */ goto NextMember; } } else if (FieldWidth > 0) { @@ -1160,7 +1069,7 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) ** bit-field. */ AddBitField (Decl.Ident, Decl.Type, 0, 0, FieldWidth, - SignednessSpecified); + (Spec.Flags & DS_EXPLICIT_SIGNEDNESS) != 0); } else if (Decl.Ident[0] != '\0') { /* Add the new field to the table */ Field = AddLocalSym (Decl.Ident, Decl.Type, SC_STRUCTFIELD, 0); @@ -1189,17 +1098,22 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) } } -NextMember: if (CurTok.Tok != TOK_COMMA) { +NextMember: + /* Check for end of declaration list */ + if (CurTok.Tok != TOK_COMMA) { break; } + Spec.Flags |= DS_NO_EMPTY_DECL; NextToken (); } - /* Must be followed by a semicolon */ - if (NeedClean >= 0 && ConsumeSemi ()) { - NeedClean = 0; - } else { - NeedClean = -1; + if (NeedClean > 0) { + /* Must be followed by a semicolon */ + if (ConsumeSemi ()) { + NeedClean = 0; + } else { + NeedClean = -1; + } } /* Try some smart error recovery */ @@ -1265,7 +1179,6 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) /* Get the type of the entry */ DeclSpec Spec; - int SignednessSpecified = 0; int NeedClean = 0; /* Check for a _Static_assert */ @@ -1275,7 +1188,17 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) } InitDeclSpec (&Spec); - ParseTypeSpec (&Spec, TS_DEFAULT_TYPE_NONE, &SignednessSpecified); + ParseTypeSpec (&Spec, TS_DEFAULT_TYPE_NONE); + + /* Check if this is only a type declaration */ + if (CurTok.Tok == TOK_SEMI && (Spec.Flags & DS_EXTRA_TYPE) == 0) { + CheckEmptyDecl (&Spec); + NextToken (); + continue; + } + + /* Allow anonymous bit-fields */ + Spec.Flags |= DS_ALLOW_BITFIELD; /* Read fields with this type */ while (1) { @@ -1291,7 +1214,12 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) } /* Get type and name of the struct field */ - NeedClean = ParseDecl (&Spec, &Decl, DM_ACCEPT_IDENT); + NeedClean = ParseDecl (&Spec, &Decl, DM_IDENT_OR_EMPTY); + + /* Bail out if there are errors */ + if (NeedClean <= 0) { + break; + } /* Check for a bit-field declaration */ FieldWidth = ParseFieldWidth (&Decl); @@ -1335,9 +1263,7 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) Decl.Type[0].C &= ~T_QUAL_CVR; } } else { - /* A non bit-field without a name is legal but useless */ - Warning ("Declaration does not declare anything"); - + /* Invalid member */ goto NextMember; } } else if (FieldWidth > 0) { @@ -1387,8 +1313,8 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) ** bit-field as a char type in expressions. */ CHECK (BitOffs < CHAR_BITS); - AddBitField (Decl.Ident, Decl.Type, StructSize, BitOffs, - FieldWidth, SignednessSpecified); + AddBitField (Decl.Ident, Decl.Type, StructSize, BitOffs, FieldWidth, + (Spec.Flags & DS_EXPLICIT_SIGNEDNESS) != 0); BitOffs += FieldWidth; CHECK (BitOffs <= CHAR_BITS * SizeOf (Decl.Type)); /* Add any full bytes to the struct size */ @@ -1427,17 +1353,22 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) } } -NextMember: if (CurTok.Tok != TOK_COMMA) { +NextMember: + /* Check for end of declaration list */ + if (CurTok.Tok != TOK_COMMA) { break; } + Spec.Flags |= DS_NO_EMPTY_DECL; NextToken (); } - /* Must be followed by a semicolon */ - if (NeedClean >= 0 && ConsumeSemi ()) { - NeedClean = 0; - } else { - NeedClean = -1; + if (NeedClean > 0) { + /* Must be followed by a semicolon */ + if (ConsumeSemi ()) { + NeedClean = 0; + } else { + NeedClean = -1; + } } /* Try some smart error recovery */ @@ -1472,7 +1403,7 @@ NextMember: if (CurTok.Tok != TOK_COMMA) { -static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSpecified) +static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags) /* Parse a type specifier. Store whether one of "signed" or "unsigned" was ** specified, so bit-fields of unspecified signedness can be treated as ** unsigned; without special handling, it would be treated as signed. @@ -1482,10 +1413,6 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSp SymEntry* TagEntry; TypeCode Qualifiers = T_QUAL_NONE; - if (SignednessSpecified != NULL) { - *SignednessSpecified = 0; - } - /* Assume we have an explicit type */ Spec->Flags &= ~DS_DEF_TYPE; @@ -1511,15 +1438,13 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSp case TOK_LONG: NextToken (); if (CurTok.Tok == TOK_UNSIGNED) { - if (SignednessSpecified != NULL) { - *SignednessSpecified = 1; - } + Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; NextToken (); OptionalInt (); Spec->Type[0].C = T_ULONG; Spec->Type[1].C = T_END; } else { - OptionalSigned (SignednessSpecified); + OptionalSigned (Spec); OptionalInt (); Spec->Type[0].C = T_LONG; Spec->Type[1].C = T_END; @@ -1529,15 +1454,13 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSp case TOK_SHORT: NextToken (); if (CurTok.Tok == TOK_UNSIGNED) { - if (SignednessSpecified != NULL) { - *SignednessSpecified = 1; - } + Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; NextToken (); OptionalInt (); Spec->Type[0].C = T_USHORT; Spec->Type[1].C = T_END; } else { - OptionalSigned (SignednessSpecified); + OptionalSigned (Spec); OptionalInt (); Spec->Type[0].C = T_SHORT; Spec->Type[1].C = T_END; @@ -1550,10 +1473,8 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSp Spec->Type[1].C = T_END; break; - case TOK_SIGNED: - if (SignednessSpecified != NULL) { - *SignednessSpecified = 1; - } + case TOK_SIGNED: + Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; NextToken (); switch (CurTok.Tok) { @@ -1589,9 +1510,7 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSp break; case TOK_UNSIGNED: - if (SignednessSpecified != NULL) { - *SignednessSpecified = 1; - } + Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; NextToken (); switch (CurTok.Tok) { @@ -1640,12 +1559,16 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSp case TOK_UNION: NextToken (); - /* */ + /* Check for tag name */ if (CurTok.Tok == TOK_IDENT) { strcpy (Ident, CurTok.Ident); NextToken (); - } else { + } else if (CurTok.Tok == TOK_LCURLY) { AnonName (Ident, "union"); + } else { + Error ("Tag name identifier or '{' expected"); + UseDefaultType (Spec, TS_DEFAULT_TYPE_NONE); + break; } /* Remember we have an extra type decl */ Spec->Flags |= DS_EXTRA_TYPE; @@ -1659,12 +1582,16 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSp case TOK_STRUCT: NextToken (); - /* */ + /* Check for tag name */ if (CurTok.Tok == TOK_IDENT) { strcpy (Ident, CurTok.Ident); NextToken (); - } else { + } else if (CurTok.Tok == TOK_LCURLY) { AnonName (Ident, "struct"); + } else { + Error ("Tag name identifier or '{' expected"); + UseDefaultType (Spec, TS_DEFAULT_TYPE_NONE); + break; } /* Remember we have an extra type decl */ Spec->Flags |= DS_EXTRA_TYPE; @@ -1678,15 +1605,16 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSp case TOK_ENUM: NextToken (); - /* Named enum */ + /* Check for tag name */ if (CurTok.Tok == TOK_IDENT) { strcpy (Ident, CurTok.Ident); NextToken (); - } else { - if (CurTok.Tok != TOK_LCURLY) { - Error ("Identifier expected for enum tag name"); - } + } else if (CurTok.Tok == TOK_LCURLY) { AnonName (Ident, "enum"); + } else { + Error ("Tag name identifier or '{' expected"); + UseDefaultType (Spec, TS_DEFAULT_TYPE_NONE); + break; } /* Remember we have an extra type decl */ Spec->Flags |= DS_EXTRA_TYPE; @@ -1699,9 +1627,7 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSp /* The signedness of enums is determined by the type, so say this is specified to avoid ** the int -> unsigned int handling for plain int bit-fields in AddBitField. */ - if (SignednessSpecified) { - *SignednessSpecified = 1; - } + Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; break; case TOK_IDENT: @@ -1718,9 +1644,7 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSp ** Unforunately, this will cause plain int bit-fields defined via typedefs ** to be treated as signed rather than unsigned. */ - if (SignednessSpecified) { - *SignednessSpecified = 1; - } + Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; break; } else if ((TSFlags & TS_MASK_DEFAULT_TYPE) == TS_DEFAULT_TYPE_NONE) { /* Treat this identifier as an unknown type */ @@ -1742,15 +1666,7 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags, int* SignednessSp /* FALL THROUGH */ default: - if ((TSFlags & TS_MASK_DEFAULT_TYPE) == TS_DEFAULT_TYPE_NONE) { - Spec->Flags |= DS_NO_TYPE; - Spec->Type[0].C = T_INT; - Spec->Type[1].C = T_END; - } else { - Spec->Flags |= DS_DEF_TYPE; - Spec->Type[0].C = T_INT; - Spec->Type[1].C = T_END; - } + UseDefaultType (Spec, TSFlags); break; } @@ -1839,6 +1755,9 @@ static void ParseOldStyleParamList (FuncDesc* F) /* Read the declaration specifier */ ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_NONE, SC_AUTO); + /* Paremeters must have identifiers as names */ + Spec.Flags |= DS_NO_EMPTY_DECL; + /* We accept only auto and register as storage class specifiers, but ** we ignore all this, since we use auto anyway. */ @@ -1859,7 +1778,7 @@ static void ParseOldStyleParamList (FuncDesc* F) Declarator Decl; /* Read the parameter */ - ParseDecl (&Spec, &Decl, DM_NEED_IDENT); + ParseDecl (&Spec, &Decl, DM_IDENT_OR_EMPTY); /* Warn about new local type declaration */ if ((Spec.Flags & DS_NEW_TYPE_DECL) != 0) { @@ -2083,7 +2002,7 @@ static FuncDesc* ParseFuncDecl (void) -static declmode_t DirectDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) +static void DirectDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) /* Recursively process direct declarators. Build a type array in reverse order. */ { /* Read optional function or pointer qualifiers that modify the identifier @@ -2101,19 +2020,19 @@ static declmode_t DirectDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mo NextToken (); /* A pointer type cannot be used as an empty declaration */ - if (Mode == DM_ACCEPT_IDENT) { - Mode = DM_NEED_IDENT; + if (Mode == DM_IDENT_OR_EMPTY) { + Spec->Flags |= DS_NO_EMPTY_DECL; } /* Allow const, restrict, and volatile qualifiers */ Qualifiers |= OptionalQualifiers (Qualifiers, T_QUAL_CVR); /* Parse the type that the pointer points to */ - Mode = DirectDecl (Spec, D, Mode); + DirectDecl (Spec, D, Mode); /* Add the type */ AddTypeCodeToDeclarator (D, T_PTR | Qualifiers); - return Mode; + return; } if (CurTok.Tok == TOK_LPAREN) { @@ -2121,28 +2040,24 @@ static declmode_t DirectDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mo /* An empty declaration cannot contain parentheses where an identifier ** would show up if it were a non-empty declaration. */ - if (Mode == DM_ACCEPT_IDENT) { - Mode = DM_NEED_IDENT; + if (Mode == DM_IDENT_OR_EMPTY) { + Spec->Flags |= DS_NO_EMPTY_DECL; } - Mode = DirectDecl (Spec, D, Mode); + DirectDecl (Spec, D, Mode); ConsumeRParen (); } else if (CurTok.Tok == TOK_IDENT) { strcpy (D->Ident, CurTok.Ident); NextToken (); } else { D->Ident[0] = '\0'; - if (Mode == DM_NEED_IDENT) { + if ((Spec->Flags & DS_NO_EMPTY_DECL) != 0 && + CurTok.Tok != TOK_LBRACK && + ((Spec->Flags & DS_ALLOW_BITFIELD) == 0 || CurTok.Tok != TOK_COLON)) { Error ("Identifier expected"); } } while (CurTok.Tok == TOK_LBRACK || CurTok.Tok == TOK_LPAREN) { - /* An array or function type cannot be used as an empty declaration */ - if (Mode == DM_ACCEPT_IDENT && D->Ident[0] == '\0') { - Mode = DM_NEED_IDENT; - Error ("Identifier expected"); - } - if (CurTok.Tok == TOK_LPAREN) { /* Function declarator */ @@ -2181,6 +2096,18 @@ static declmode_t DirectDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mo /* Array declarator */ long Size = UNSPECIFIED; + /* An array type cannot be used as an empty declaration */ + if (Mode == DM_IDENT_OR_EMPTY) { + Spec->Flags |= DS_NO_EMPTY_DECL; + if (D->Ident[0] == '\0') { + if ((Spec->Flags & DS_DEF_TYPE) == 0) { + Error ("Identifier or ';' expected after declaration specifiers"); + } else { + Error ("Identifier expected"); + } + } + } + /* We cannot have any qualifiers for an array */ if (Qualifiers != T_QUAL_NONE) { Error ("Invalid qualifiers for array"); @@ -2228,8 +2155,6 @@ static declmode_t DirectDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mo if (Qualifiers & T_QUAL_CDECL) { Error ("Invalid '__cdecl__' qualifier"); } - - return Mode; } @@ -2248,7 +2173,7 @@ Type* ParseType (Type* T) /* Get a type without a default */ InitDeclSpec (&Spec); - ParseTypeSpec (&Spec, TS_DEFAULT_TYPE_NONE, NULL); + ParseTypeSpec (&Spec, TS_DEFAULT_TYPE_NONE); /* Parse additional declarators */ ParseDecl (&Spec, &Decl, DM_NO_IDENT); @@ -2262,14 +2187,23 @@ Type* ParseType (Type* T) -int ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) +int ParseDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) /* Parse a variable, type or function declarator. Return -1 if this stops at -** an unpaired right parenthesis/bracket/curly brace. +** an unpaired right parenthesis/bracket/curly brace. Return 0 if this stops +** after consuming a semicolon or closing curly brace, or reaching an EOF. +** Return 1 otherwise. */ { /* Used to check if we have any errors during parsing this */ unsigned PrevErrorCount = ErrorCount; + /* If there is no explicit type specifier, an optional identifier becomes + ** required. + */ + if (Mode == DM_IDENT_OR_EMPTY && (Spec->Flags & DS_DEF_TYPE) != 0) { + Spec->Flags |= DS_NO_EMPTY_DECL; + } + /* Initialize the Declarator struct */ InitDeclarator (D); @@ -2283,6 +2217,11 @@ int ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) /* Use the storage class from the declspec */ D->StorageClass = Spec->StorageClass; + /* If we have a function, add a special symbol type */ + if (IsTypeFunc (D->Type)) { + D->StorageClass |= SC_FUNC; + } + /* Do several fixes on qualifiers */ FixQualifiers (D->Type); @@ -2297,24 +2236,6 @@ int ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) /* Parse attributes for this declarator */ ParseAttribute (D); - /* If we have a function, add a special storage class */ - if (IsTypeFunc (D->Type)) { - - D->StorageClass |= SC_FUNC; - - } else if (!IsTypeVoid (D->Type)) { - /* Check the size of the generated type */ - unsigned Size = SizeOf (D->Type); - - if (Size >= 0x10000) { - if (D->Ident[0] != '\0') { - Error ("Size of '%s' is invalid (0x%06X)", D->Ident, Size); - } else { - Error ("Invalid size in declaration (0x%06X)", Size); - } - } - } - /* Check a few pre-C99 things */ if (D->Ident[0] != '\0' && (Spec->Flags & DS_DEF_TYPE) != 0) { /* Check and warn about an implicit int return in the function */ @@ -2331,7 +2252,7 @@ int ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) /* For anything that is not a function or typedef, check for an implicit ** int declaration. */ - if ((D->StorageClass & SC_FUNC) != SC_FUNC && + if (!IsTypeFunc (D->Type) && (D->StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { /* If the standard was not set explicitly to C89, print a warning ** for variables with implicit int type. @@ -2342,11 +2263,32 @@ int ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) } } - if (PrevErrorCount != ErrorCount) { - if ((Spec->Flags & DS_DEF_TYPE) == 0 && Mode == DM_NEED_IDENT && D->Ident[0] == '\0') { - /* Make the declaration fictitious if is is not parsed correctly */ - D->StorageClass |= SC_FICTITIOUS; + /* Check the size of the declared type */ + if (IsObjectType (D->Type)) { + unsigned Size = SizeOf (D->Type); + if (Size >= 0x10000) { + if (D->Ident[0] != '\0') { + Error ("Size of '%s' is too large (0x%06X)", D->Ident, Size); + } else { + Error ("Size in declaration is too large (0x%06X)", Size); + } + } + } + + /* An empty declaration must be terminated with a semicolon */ + if (PrevErrorCount == ErrorCount && + Mode == DM_IDENT_OR_EMPTY && + D->Ident[0] == '\0' && + CurTok.Tok != TOK_SEMI && + ((Spec->Flags & DS_ALLOW_BITFIELD) == 0 || CurTok.Tok != TOK_COLON)) { + Error ("Identifier or ';' expected after declaration specifiers"); + } + + if (PrevErrorCount != ErrorCount) { + if ((Spec->Flags & DS_DEF_TYPE) == 0 && + (Spec->Flags & DS_NO_EMPTY_DECL) != 0 && + D->Ident[0] == '\0') { /* Use a fictitious name for the identifier if it is missing */ const char* Level = ""; @@ -2366,15 +2308,21 @@ int ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode) break; } AnonName (D->Ident, Level); + + /* Make the declarator fictitious */ + D->StorageClass |= SC_FICTITIOUS; } /* Try some smart error recovery */ if (CurTok.Tok != TOK_LCURLY || !IsTypeFunc (D->Type)) { - return SmartErrorSkip (0); + /* Skip to the end of the whole declaration if it is not part of a + ** parameter list or a type cast. + */ + return SmartErrorSkip (Mode == DM_IDENT_OR_EMPTY); } } - return 0; + return 1; } @@ -2389,7 +2337,7 @@ void ParseDeclSpec (DeclSpec* Spec, typespec_t TSFlags, unsigned DefStorage) Spec->Flags &= ~DS_DEF_STORAGE; /* Parse the type specifiers */ - ParseTypeSpec (Spec, TSFlags | TS_STORAGE_CLASS_SPEC | TS_FUNCTION_SPEC, NULL); + ParseTypeSpec (Spec, TSFlags | TS_STORAGE_CLASS_SPEC | TS_FUNCTION_SPEC); /* If no explicit storage class is given, use the default */ if (Spec->StorageClass == 0) { @@ -2407,6 +2355,10 @@ void CheckEmptyDecl (const DeclSpec* Spec) */ { if ((Spec->Flags & DS_EXTRA_TYPE) == 0) { - Warning ("Useless declaration"); + Warning ("Declaration does not declare anything"); + } else if (IsClassStruct (Spec->Type) && + !IsIncompleteESUType (Spec->Type) && + SymHasAnonName (GetESUTagSym (Spec->Type))) { + Warning ("Unnamed %s that defines no instances", GetBasicTypeName (Spec->Type)); } } diff --git a/src/cc65/declare.h b/src/cc65/declare.h index 1ce764f7a..36de40311 100644 --- a/src/cc65/declare.h +++ b/src/cc65/declare.h @@ -77,6 +77,11 @@ enum typespec_t { #define DS_NEW_TYPE_DECL 0x0010U /* New type declared */ #define DS_NEW_TYPE_DEF 0x0020U /* New type defined */ #define DS_NEW_TYPE (DS_NEW_TYPE_DECL | DS_NEW_TYPE_DEF) +#define DS_EXPLICIT_SIGNEDNESS 0x0040U /* Signedness specified */ +#define DS_NO_EMPTY_DECL 0x0100U /* Disallow empty declaration */ +#define DS_ALLOW_BITFIELD 0x0200U /* Allow anonymous bit-fields */ + + /* Result of ParseDeclSpec */ typedef struct DeclSpec DeclSpec; @@ -99,24 +104,22 @@ struct Declarator { }; /* Modes for ParseDecl: -** - DM_NEED_IDENT means: -** we *must* have a type and a variable identifer. +** - DM_IDENT_OR_EMPTY means: +** we *may* have an identifier, or none. If it is the latter case, +** the type specifier must be used for an empty declaration, +** or it is an error. ** - DM_NO_IDENT means: ** we must have a type but no variable identifer ** (if there is one, it's not read). -** - DM_ACCEPT_IDENT means: -** we *may* have an identifier, or none. If it is the latter case, -** the type must be used as an empty declaration, or it is an error. -** Note: this is used for struct/union members. -** - DM_IGNORE_IDENT means: +** Note: this is used for type names. +** - DM_ACCEPT_PARAM_IDENT means: ** we *may* have an identifier. If there is an identifier, ** it is read, but it is no error, if there is none. ** Note: this is used for function parameter type lists. */ typedef enum { - DM_NEED_IDENT, + DM_IDENT_OR_EMPTY, DM_NO_IDENT, - DM_ACCEPT_IDENT, DM_ACCEPT_PARAM_IDENT, } declmode_t; @@ -128,29 +131,14 @@ typedef enum { -int SmartErrorSkip (int WholeDecl); -/* Try some smart error recovery. -** -** - If WholeDecl is 0: -** Skip tokens until a comma or closing curly brace that is not enclosed in -** an open parenthesis/bracket/curly brace, or until a semicolon, EOF or -** unpaired right parenthesis/bracket/curly brace is reached. -** -** - If WholeDecl is non-0: -** Skip tokens until a closing curly brace that is not enclosed in an open -** parenthesis/bracket/curly brace, or until a semicolon or EOF is reached. -** -** Return 0 if this exits as soon as it reaches an EOF. Return 0 as well if -** this exits with no open parentheses/brackets/curly braces. Otherwise, return -** -1. -*/ - Type* ParseType (Type* Type); /* Parse a complete type specification */ -int ParseDecl (const DeclSpec* Spec, Declarator* D, declmode_t Mode); +int ParseDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode); /* Parse a variable, type or function declarator. Return -1 if this stops at -** an unpaired right parenthesis/bracket/curly brace. +** an unpaired right parenthesis/bracket/curly brace. Return 0 if this stops +** after consuming a semicolon or closing curly brace, or reaching an EOF. +** Return 1 otherwise. */ void ParseDeclSpec (DeclSpec* Spec, typespec_t TSFlags, unsigned DefStorage); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index a87335f42..d672b032e 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1422,7 +1422,7 @@ static void Primary (ExprDesc* E) Declarator Decl; /* Parse one declaration */ - ParseDecl (&Spec, &Decl, DM_ACCEPT_IDENT); + ParseDecl (&Spec, &Decl, DM_IDENT_OR_EMPTY); if (CurTok.Tok == TOK_ASSIGN) { NextToken (); ParseInit (Decl.Type); diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 381477faa..701dcb806 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -441,14 +441,15 @@ static void ParseStaticDecl (Declarator* Decl) -static void ParseOneDecl (const DeclSpec* Spec) +static int ParseOneDecl (DeclSpec* Spec) /* Parse one variable declarator. */ { - Declarator Decl; /* Declarator data structure */ + Declarator Decl; /* Declarator data structure */ + int NeedClean; /* Read the declarator */ - ParseDecl (Spec, &Decl, DM_NEED_IDENT); + NeedClean = ParseDecl (Spec, &Decl, DM_IDENT_OR_EMPTY); /* Check if there are any non-extern storage classes set for function ** declarations. Function can only be declared inside functions with the @@ -538,6 +539,8 @@ static void ParseOneDecl (const DeclSpec* Spec) /* Make sure we aren't missing some work */ CheckDeferredOpAllDone (); + + return NeedClean; } @@ -553,15 +556,8 @@ void DeclareLocals (void) /* Loop until we don't find any more variables */ while (1) { - - /* Check variable declarations. We need to distinguish between a - ** default int type and the end of variable declarations. So we - ** will do the following: If there is no explicit storage class - ** specifier *and* no explicit type given, *and* no type qualifiers - ** have been read, it is assumed that we have reached the end of - ** declarations. - */ DeclSpec Spec; + int NeedClean; /* Check for a _Static_assert */ if (CurTok.Tok == TOK_STATIC_ASSERT) { @@ -569,10 +565,18 @@ void DeclareLocals (void) continue; } + /* Read the declaration specifier */ ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT, SC_AUTO); - if ((Spec.Flags & DS_DEF_STORAGE) != 0 && /* No storage spec */ - (Spec.Flags & DS_DEF_TYPE) != 0 && /* No type given */ - GetQualifier (Spec.Type) == T_QUAL_NONE) { /* No type qualifier */ + + /* Check variable declarations. We need distinguish between a default + ** int type and the end of variable declarations. So we will do the + ** following: If there is no explicit storage class specifier *and* no + ** explicit type given, *and* no type qualifiers have been read, it is + ** assumed that we have reached the end of declarations. + */ + if ((Spec.Flags & DS_DEF_STORAGE) != 0 && /* No storage spec */ + (Spec.Flags & DS_DEF_TYPE) == DS_DEF_TYPE && /* No type given */ + GetQualifier (Spec.Type) == T_QUAL_NONE) { /* No type qualifier */ break; } @@ -587,8 +591,11 @@ void DeclareLocals (void) /* Parse a comma separated variable list */ while (1) { - /* Parse one declaration */ - ParseOneDecl (&Spec); + /* Parse one declarator */ + NeedClean = ParseOneDecl (&Spec); + if (NeedClean <= 0) { + break; + } /* Check if there is more */ if (CurTok.Tok == TOK_COMMA) { @@ -600,8 +607,19 @@ void DeclareLocals (void) } } - /* A semicolon must follow */ - ConsumeSemi (); + if (NeedClean > 0) { + /* Must be followed by a semicolon */ + if (ConsumeSemi ()) { + NeedClean = 0; + } else { + NeedClean = -1; + } + } + + /* Try some smart error recovery */ + if (NeedClean < 0) { + SmartErrorSkip (1); + } } /* Be sure to allocate any reserved space for locals */ diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 00dde9e83..6af9bc4be 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -1235,6 +1235,163 @@ void SkipTokens (const token_t* TokenList, unsigned TokenCount) +static void OpenBrace (Collection* C, token_t Tok) +/* Consume an opening parenthesis/bracket/curly brace and remember that */ +{ + switch (Tok) { + case TOK_LPAREN: Tok = TOK_RPAREN; break; + case TOK_LBRACK: Tok = TOK_RBRACK; break; + case TOK_LCURLY: Tok = TOK_RCURLY; break; + default: Internal ("Unexpected opening token: %02X", (unsigned)Tok); + } + CollAppend (C, (void*)Tok); + NextToken (); +} + + + +static void PopBrace (Collection* C) +/* Close the latest open parenthesis/bracket/curly brace */ +{ + if (CollCount (C) > 0) { + CollPop (C); + } +} + + + +static int CloseBrace (Collection* C, token_t Tok) +/* Consume a closing parenthesis/bracket/curly brace if it is matched with an +** opening one to close and return 0, or bail out and return -1 if it is not +** matched. +*/ +{ + if (CollCount (C) > 0) { + token_t LastTok = (token_t)CollLast (C); + if (LastTok == Tok) { + CollPop (C); + NextToken (); + return 0; + } + } + + return -1; +} + + + +int SmartErrorSkip (int TillEnd) +/* Try some smart error recovery. +** +** - If TillEnd == 0: +** Skip tokens until a comma or closing curly brace that is not enclosed in +** an open parenthesis/bracket/curly brace, or until a semicolon, EOF or +** unpaired right parenthesis/bracket/curly brace is reached. The closing +** curly brace is consumed in the former case. +** +** - If TillEnd != 0: +** Skip tokens until a right curly brace or semicolon is reached and consumed +** while there are no open parentheses/brackets/curly braces, or until an EOF +** is reached anytime. Any open parenthesis/bracket/curly brace is considered +** to be closed by consuming a right parenthesis/bracket/curly brace even if +** they didn't match. +** +** - Return -1: +** If this exits at a semicolon or unpaired right parenthesis/bracket/curly +** brace while there are still open parentheses/brackets/curly braces. +** +** - Return 0: +** If this exits as soon as it reaches an EOF; +** Or if this exits right after consuming a semicolon or right curly brace +** while there are no open parentheses/brackets/curly braces. +** +** - Return 1: +** If this exits at a non-EOF without consuming it. +*/ +{ + Collection C = AUTO_COLLECTION_INITIALIZER; + int Res = 0; + + /* Some fix point tokens that are used for error recovery */ + static const token_t TokenList[] = { TOK_COMMA, TOK_SEMI, + TOK_LPAREN, TOK_RPAREN, TOK_LBRACK, TOK_RBRACK, TOK_LCURLY, TOK_RCURLY }; + + while (CurTok.Tok != TOK_CEOF) { + SkipTokens (TokenList, sizeof (TokenList) / sizeof (TokenList[0])); + + switch (CurTok.Tok) { + case TOK_LPAREN: + case TOK_LBRACK: + case TOK_LCURLY: + OpenBrace (&C, CurTok.Tok); + break; + + case TOK_RPAREN: + case TOK_RBRACK: + if (CloseBrace (&C, CurTok.Tok) < 0) { + if (!TillEnd) { + Res = -1; + goto ExitPoint; + } + PopBrace (&C); + NextToken (); + } + break; + + case TOK_RCURLY: + if (CloseBrace (&C, CurTok.Tok) < 0) { + if (!TillEnd) { + Res = -1; + goto ExitPoint; + } + PopBrace (&C); + NextToken (); + } + if (CollCount (&C) == 0) { + /* We consider this as a terminator as well */ + Res = 0; + goto ExitPoint; + } + break; + + case TOK_COMMA: + if (CollCount (&C) == 0 && !TillEnd) { + Res = 1; + goto ExitPoint; + } + NextToken (); + break; + + case TOK_SEMI: + if (CollCount (&C) == 0) { + if (TillEnd) { + NextToken (); + Res = 0; + } else { + Res = 1; + } + goto ExitPoint; + } + NextToken (); + break; + + case TOK_CEOF: + /* We cannot consume this */ + Res = 0; + goto ExitPoint; + + default: + Internal ("Unexpected token: %02X", (unsigned)CurTok.Tok); + } + } + +ExitPoint: + DoneCollection (&C); + return Res; +} + + + int Consume (token_t Token, const char* ErrorMsg) /* Eat token if it is the next in the input stream, otherwise print an error ** message. Returns true if the token was found and false otherwise. diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h index e6b788660..808b96c5e 100644 --- a/src/cc65/scanner.h +++ b/src/cc65/scanner.h @@ -310,6 +310,35 @@ void SkipTokens (const token_t* TokenList, unsigned TokenCount); ** This routine is used for error recovery. */ +int SmartErrorSkip (int TillEnd); +/* Try some smart error recovery. +** +** - If TillEnd == 0: +** Skip tokens until a comma or closing curly brace that is not enclosed in +** an open parenthesis/bracket/curly brace, or until a semicolon, EOF or +** unpaired right parenthesis/bracket/curly brace is reached. The closing +** curly brace is consumed in the former case. +** +** - If TillEnd != 0: +** Skip tokens until a right curly brace or semicolon is reached and consumed +** while there are no open parentheses/brackets/curly braces, or until an EOF +** is reached anytime. Any open parenthesis/bracket/curly brace is considered +** to be closed by consuming a right parenthesis/bracket/curly brace even if +** they didn't match. +** +** - Return -1: +** If this exits at a semicolon or unpaired right parenthesis/bracket/curly +** brace while there are still open parentheses/brackets/curly braces. +** +** - Return 0: +** If this exits as soon as it reaches an EOF; +** Or if this exits right after consuming a semicolon or right curly brace +** while there are no open parentheses/brackets/curly braces. +** +** - Return 1: +** If this exits at a non-EOF without consuming it. +*/ + int Consume (token_t Token, const char* ErrorMsg); /* Eat token if it is the next in the input stream, otherwise print an error ** message. Returns true if the token was found and false otherwise. diff --git a/src/cc65/staticassert.c b/src/cc65/staticassert.c index abb2c57ca..9df9af7da 100644 --- a/src/cc65/staticassert.c +++ b/src/cc65/staticassert.c @@ -45,7 +45,7 @@ -void ParseStaticAssert () +void ParseStaticAssert (void) { /* ** static_assert-declaration ::= @@ -53,20 +53,23 @@ void ParseStaticAssert () ** _Static_assert ( constant-expression , string-literal ) ; */ ExprDesc Expr; - int failed; + unsigned PrevErrorCount = ErrorCount; + int failed = 0; /* Skip the _Static_assert token itself */ CHECK (CurTok.Tok == TOK_STATIC_ASSERT); NextToken (); /* We expect an opening paren */ - if (!ConsumeLParen ()) { - return; + if (ConsumeLParen ()) { + /* Parse assertion condition */ + Expr = NoCodeConstAbsIntExpr (hie1); + failed = !Expr.IVal; } - /* Parse assertion condition */ - Expr = NoCodeConstAbsIntExpr (hie1); - failed = !Expr.IVal; + if (PrevErrorCount != ErrorCount) { + goto ExitPoint; + } /* If there is a comma, we also have an error message. The message is optional because we ** support the C2X syntax with only an expression. @@ -84,19 +87,16 @@ void ParseStaticAssert () /* String literal */ if (CurTok.Tok != TOK_SCONST) { Error ("String literal expected for static_assert message"); - return; - } + } else { + /* Issue an error including the message if the static_assert failed. */ + if (failed) { + Error ("static_assert failed '%s'", GetLiteralStr (CurTok.SVal)); + } - /* Issue an error including the message if the static_assert failed. */ - if (failed) { - Error ("static_assert failed '%s'", GetLiteralStr (CurTok.SVal)); - } - - /* Consume the string constant, now that we don't need it anymore. - ** This should never fail since we checked the token type above. - */ - if (!Consume (TOK_SCONST, "String literal expected")) { - return; + /* Consume the string constant, now that we don't need it anymore. + ** This should never fail since we checked the token type above. + */ + Consume (TOK_SCONST, "String literal expected"); } } else { /* No message. */ @@ -105,7 +105,24 @@ void ParseStaticAssert () } } - /* Closing paren and semi-colon needed */ - ConsumeRParen (); - ConsumeSemi (); + /* The assertion failure error is not a syntax error */ + if (failed) { + ++PrevErrorCount; + } + + if (PrevErrorCount == ErrorCount) { + /* Closing paren needed */ + ConsumeRParen (); + } + + if (PrevErrorCount == ErrorCount) { + /* Must be followed by a semicolon */ + ConsumeSemi (); + } + +ExitPoint: + /* Try some smart error recovery */ + if (PrevErrorCount != ErrorCount) { + SmartErrorSkip (1); + } } diff --git a/test/ref/bug1889-missing-identifier.cref b/test/ref/bug1889-missing-identifier.cref index 534c6aaba..2d92ff263 100644 --- a/test/ref/bug1889-missing-identifier.cref +++ b/test/ref/bug1889-missing-identifier.cref @@ -1,3 +1,3 @@ -bug1889-missing-identifier.c:3: Error: Identifier expected -bug1889-missing-identifier.c:3: Error: ';' expected +bug1889-missing-identifier.c:3: Error: Identifier or ';' expected after declaration specifiers +bug1889-missing-identifier.c:3: Warning: Implicit 'int' is an obsolete feature bug1889-missing-identifier.c:4: Error: Identifier expected From a1a060c29151c1571a93922575fabe2f582ff16c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 10 Dec 2023 15:43:24 +0800 Subject: [PATCH 2293/2710] Declaration specifier flags cleanup. --- src/cc65/declare.c | 23 ++++++++++++----------- src/cc65/declare.h | 13 ++++++++----- src/cc65/expr.c | 2 +- src/cc65/locals.c | 2 +- 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index efca09d7f..62c2bdfa3 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -350,11 +350,11 @@ static void UseDefaultType (DeclSpec* Spec, typespec_t TSFlags) /* Use the default type for the type specifier */ { if ((TSFlags & TS_MASK_DEFAULT_TYPE) == TS_DEFAULT_TYPE_NONE) { - Spec->Flags |= DS_NO_TYPE; + Spec->Flags = (Spec->Flags & ~DS_TYPE_MASK) | DS_NONE; Spec->Type[0].C = T_INT; Spec->Type[1].C = T_END; } else { - Spec->Flags |= DS_DEF_TYPE; + Spec->Flags = (Spec->Flags & ~DS_TYPE_MASK) | DS_DEF_TYPE; Spec->Type[0].C = T_INT; Spec->Type[1].C = T_END; } @@ -1413,8 +1413,8 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags) SymEntry* TagEntry; TypeCode Qualifiers = T_QUAL_NONE; - /* Assume we have an explicit type */ - Spec->Flags &= ~DS_DEF_TYPE; + /* Assume we have an explicitly specified type */ + Spec->Flags = (Spec->Flags & ~DS_TYPE_MASK) | DS_EXPLICIT_TYPE; /* Read storage specifiers and/or type qualifiers if we have any */ OptionalSpecifiers (Spec, &Qualifiers, TSFlags); @@ -1767,7 +1767,7 @@ static void ParseOldStyleParamList (FuncDesc* F) } /* Type must be specified */ - if ((Spec.Flags & DS_NO_TYPE) != 0) { + if ((Spec.Flags & DS_TYPE_MASK) == DS_NONE) { Error ("Expected declaration specifiers"); break; } @@ -1860,7 +1860,7 @@ static void ParseAnsiParamList (FuncDesc* F) } /* Type must be specified */ - if ((Spec.Flags & DS_NO_TYPE) != 0) { + if ((Spec.Flags & DS_TYPE_MASK) == DS_NONE) { Error ("Type specifier missing"); } @@ -2100,7 +2100,7 @@ static void DirectDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) if (Mode == DM_IDENT_OR_EMPTY) { Spec->Flags |= DS_NO_EMPTY_DECL; if (D->Ident[0] == '\0') { - if ((Spec->Flags & DS_DEF_TYPE) == 0) { + if ((Spec->Flags & DS_TYPE_MASK) != DS_NONE) { Error ("Identifier or ';' expected after declaration specifiers"); } else { Error ("Identifier expected"); @@ -2200,7 +2200,8 @@ int ParseDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) /* If there is no explicit type specifier, an optional identifier becomes ** required. */ - if (Mode == DM_IDENT_OR_EMPTY && (Spec->Flags & DS_DEF_TYPE) != 0) { + if (Mode == DM_IDENT_OR_EMPTY && + (Spec->Flags & DS_TYPE_MASK) == DS_DEF_TYPE) { Spec->Flags |= DS_NO_EMPTY_DECL; } @@ -2237,7 +2238,7 @@ int ParseDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) ParseAttribute (D); /* Check a few pre-C99 things */ - if (D->Ident[0] != '\0' && (Spec->Flags & DS_DEF_TYPE) != 0) { + if (D->Ident[0] != '\0' && (Spec->Flags & DS_TYPE_MASK) == DS_DEF_TYPE) { /* Check and warn about an implicit int return in the function */ if (IsTypeFunc (D->Type) && IsRankInt (GetFuncReturnType (D->Type))) { /* Function has an implicit int return. Output a warning if we don't @@ -2286,8 +2287,8 @@ int ParseDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) } if (PrevErrorCount != ErrorCount) { - if ((Spec->Flags & DS_DEF_TYPE) == 0 && - (Spec->Flags & DS_NO_EMPTY_DECL) != 0 && + if ((Spec->Flags & DS_TYPE_MASK) != DS_DEF_TYPE && + (Spec->Flags & DS_NO_EMPTY_DECL) != 0 && D->Ident[0] == '\0') { /* Use a fictitious name for the identifier if it is missing */ const char* Level = ""; diff --git a/src/cc65/declare.h b/src/cc65/declare.h index 36de40311..6185a111e 100644 --- a/src/cc65/declare.h +++ b/src/cc65/declare.h @@ -65,15 +65,18 @@ enum typespec_t { TS_DEFAULT_TYPE_AUTO = 0x02, /* C23 type inference with auto */ /* Whether to allow certain kinds of specifiers */ - TS_STORAGE_CLASS_SPEC = 0x04, /* Allow storage storage class specifiers */ - TS_FUNCTION_SPEC = 0x08, /* Allow function specifiers */ + TS_STORAGE_CLASS_SPEC = 0x04, /* Allow storage class specifiers */ + TS_FUNCTION_SPEC = 0x08, /* Allow function specifiers */ }; /* Masks for the Flags field in DeclSpec */ +#define DS_NONE 0x0000U /* Nothing specified or used */ #define DS_DEF_STORAGE 0x0001U /* Default storage class used */ -#define DS_NO_TYPE 0x0002U /* No type explicitly specified */ -#define DS_DEF_TYPE 0x0006U /* Default type used */ -#define DS_EXTRA_TYPE 0x0008U /* Extra type declared */ +#define DS_EXPLICIT_TYPE 0x0002U /* Type specified */ +#define DS_DEF_TYPE 0x0004U /* Implicit type used */ +#define DS_AUTO_TYPE 0x0006U /* C23 auto type used */ +#define DS_TYPE_MASK 0x0006U /* Mask for type of spec decl */ +#define DS_EXTRA_TYPE 0x0008U /* ESU type in declaration */ #define DS_NEW_TYPE_DECL 0x0010U /* New type declared */ #define DS_NEW_TYPE_DEF 0x0020U /* New type defined */ #define DS_NEW_TYPE (DS_NEW_TYPE_DECL | DS_NEW_TYPE_DEF) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index d672b032e..a0902ed82 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1414,7 +1414,7 @@ static void Primary (ExprDesc* E) DeclSpec Spec; ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_NONE, SC_AUTO); - if ((Spec.Flags & DS_DEF_TYPE) == 0) { + if ((Spec.Flags & DS_TYPE_MASK) != DS_NONE) { /* Recognized but not supported */ Error ("Mixed declarations and code are not supported in cc65"); diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 701dcb806..79bbd4573 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -575,7 +575,7 @@ void DeclareLocals (void) ** assumed that we have reached the end of declarations. */ if ((Spec.Flags & DS_DEF_STORAGE) != 0 && /* No storage spec */ - (Spec.Flags & DS_DEF_TYPE) == DS_DEF_TYPE && /* No type given */ + (Spec.Flags & DS_TYPE_MASK) == DS_DEF_TYPE && /* No type given */ GetQualifier (Spec.Type) == T_QUAL_NONE) { /* No type qualifier */ break; } From cadf8012f6b861d67b5e68a54f7b65b9fe71c633 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 10 Dec 2023 15:43:24 +0800 Subject: [PATCH 2294/2710] Improved error recovery with type cast and sizeof. --- src/cc65/declare.c | 31 +++++++++++++++++++++++----- src/cc65/declare.h | 2 +- src/cc65/expr.c | 20 +----------------- src/cc65/scanner.c | 49 +++++++++++++++++++++++++++++++++++++++++++++ src/cc65/scanner.h | 5 +++++ src/cc65/typeconv.c | 8 +------- 6 files changed, 83 insertions(+), 32 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 62c2bdfa3..fdc481ce1 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2166,20 +2166,41 @@ static void DirectDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) Type* ParseType (Type* T) -/* Parse a complete type specification */ +/* Parse a complete type specification in parentheses */ { DeclSpec Spec; Declarator Decl; + int NeedClean = -1; + + /* Skip the left paren */ + NextToken (); /* Get a type without a default */ InitDeclSpec (&Spec); ParseTypeSpec (&Spec, TS_DEFAULT_TYPE_NONE); - /* Parse additional declarators */ - ParseDecl (&Spec, &Decl, DM_NO_IDENT); + /* Only parse further if there is a type specifier */ + if ((Spec.Flags & DS_TYPE_MASK) != DS_NONE) { + /* Parse additional declarators */ + NeedClean = ParseDecl (&Spec, &Decl, DM_NO_IDENT); - /* Copy the type to the target buffer */ - TypeCopy (T, Decl.Type); + /* Copy the type to the target buffer */ + TypeCopy (T, Decl.Type); + } else { + /* Fail-safe */ + TypeCopy (T, type_int); + } + + /* Try some smart error recovery */ + if (NeedClean < 0) { + SimpleErrorSkip (); + } + + /* Closing paren */ + if (!ConsumeRParen ()) { + SimpleErrorSkip (); + NextToken (); + } /* Return a pointer to the target buffer */ return T; diff --git a/src/cc65/declare.h b/src/cc65/declare.h index 6185a111e..4cfc48c68 100644 --- a/src/cc65/declare.h +++ b/src/cc65/declare.h @@ -135,7 +135,7 @@ typedef enum { Type* ParseType (Type* Type); -/* Parse a complete type specification */ +/* Parse a complete type specification in parentheses */ int ParseDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode); /* Parse a variable, type or function declarator. Return -1 if this stops at diff --git a/src/cc65/expr.c b/src/cc65/expr.c index a0902ed82..963ea8bd6 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1415,24 +1415,8 @@ static void Primary (ExprDesc* E) ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_NONE, SC_AUTO); if ((Spec.Flags & DS_TYPE_MASK) != DS_NONE) { - /* Recognized but not supported */ Error ("Mixed declarations and code are not supported in cc65"); - - while (CurTok.Tok != TOK_SEMI) { - Declarator Decl; - - /* Parse one declaration */ - ParseDecl (&Spec, &Decl, DM_IDENT_OR_EMPTY); - if (CurTok.Tok == TOK_ASSIGN) { - NextToken (); - ParseInit (Decl.Type); - } - if (CurTok.Tok == TOK_COMMA) { - NextToken (); - } else { - break; - } - } + SmartErrorSkip (0); } else { Error ("Expression expected"); E->Flags |= E_EVAL_MAYBE_UNUSED; @@ -2089,9 +2073,7 @@ void hie10 (ExprDesc* Expr) NextToken (); if (TypeSpecAhead ()) { Type T[MAXTYPELEN]; - NextToken (); Size = ExprCheckedSizeOf (ParseType (T)); - ConsumeRParen (); } else { /* Remember the output queue pointer */ CodeMark Mark; diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 6af9bc4be..6b5235679 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -1392,6 +1392,55 @@ ExitPoint: +int SimpleErrorSkip (void) +/* Skip tokens until an EOF or unpaired right parenthesis/bracket/curly brace +** is reached. Return 0 If this exits at an EOF. Otherwise return -1. +*/ +{ + Collection C = AUTO_COLLECTION_INITIALIZER; + int Res = 0; + + /* Some fix point tokens that are used for error recovery */ + static const token_t TokenList[] = { + TOK_LPAREN, TOK_RPAREN, TOK_LBRACK, TOK_RBRACK, TOK_LCURLY, TOK_RCURLY }; + + while (CurTok.Tok != TOK_CEOF) { + SkipTokens (TokenList, sizeof (TokenList) / sizeof (TokenList[0])); + + switch (CurTok.Tok) { + case TOK_LPAREN: + case TOK_LBRACK: + case TOK_LCURLY: + OpenBrace (&C, CurTok.Tok); + break; + + case TOK_RPAREN: + case TOK_RBRACK: + case TOK_RCURLY: + if (CloseBrace (&C, CurTok.Tok) < 0) { + /* Found a terminator */ + Res = -1; + goto ExitPoint; + } + break; + + case TOK_CEOF: + /* We cannot go any farther */ + Res = 0; + goto ExitPoint; + + default: + Internal ("Unexpected token: %02X", (unsigned)CurTok.Tok); + } + } + +ExitPoint: + DoneCollection (&C); + return Res; +} + + + int Consume (token_t Token, const char* ErrorMsg) /* Eat token if it is the next in the input stream, otherwise print an error ** message. Returns true if the token was found and false otherwise. diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h index 808b96c5e..ccf3a8805 100644 --- a/src/cc65/scanner.h +++ b/src/cc65/scanner.h @@ -339,6 +339,11 @@ int SmartErrorSkip (int TillEnd); ** If this exits at a non-EOF without consuming it. */ +int SimpleErrorSkip (void); +/* Skip tokens until an EOF or unpaired right parenthesis/bracket/curly brace +** is reached. Return 0 If this exits at an EOF. Otherwise return -1. +*/ + int Consume (token_t Token, const char* ErrorMsg); /* Eat token if it is the next in the input stream, otherwise print an error ** message. Returns true if the token was found and false otherwise. diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index e5b6749d6..76658502d 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -321,15 +321,9 @@ void TypeCast (ExprDesc* Expr) { Type NewType[MAXTYPELEN]; - /* Skip the left paren */ - NextToken (); - - /* Read the type */ + /* Read the type enclosed in parentheses */ ParseType (NewType); - /* Closing paren */ - ConsumeRParen (); - /* Read the expression we have to cast */ hie10 (Expr); From 3215d377ea27cf404126ef4c33a4a48008bbf015 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 10 Dec 2023 15:46:48 +0800 Subject: [PATCH 2295/2710] More accurate diagnostic messages on wrong missing declaration specifiers. --- src/cc65/compile.c | 13 +++++++++++ src/cc65/declare.c | 56 +++++++++++++++++++++++++++++++++++++--------- src/cc65/locals.c | 11 +++++++++ 3 files changed, 70 insertions(+), 10 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 5101eccd4..0dc75273d 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -88,6 +88,7 @@ static void Parse (void) /* Fill up the next token with a bogus semicolon and start the tokenizer */ NextTok.Tok = TOK_SEMI; NextToken (); + NextToken (); /* Parse until end of input */ while (CurTok.Tok != TOK_CEOF) { @@ -98,6 +99,7 @@ static void Parse (void) /* Check for empty statements */ if (CurTok.Tok == TOK_SEMI) { + /* TODO: warn on this if we have a pedantic mode */ NextToken (); continue; } @@ -137,6 +139,16 @@ static void Parse (void) continue; } + /* If we haven't got a type specifier yet, something must be wrong */ + if ((Spec.Flags & DS_TYPE_MASK) == DS_NONE) { + /* Avoid extra errors if it was a failed type specifier */ + if ((Spec.Flags & DS_EXTRA_TYPE) == 0) { + Error ("Declaration specifier expected"); + } + NeedClean = -1; + goto EndOfDecl; + } + /* Read declarations for this type */ Comma = 0; while (1) { @@ -355,6 +367,7 @@ static void Parse (void) } } +EndOfDecl: /* Try some smart error recovery */ if (NeedClean < 0) { SmartErrorSkip (1); diff --git a/src/cc65/declare.c b/src/cc65/declare.c index fdc481ce1..029e22069 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -979,6 +979,13 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) DeclSpec Spec; int NeedClean = 0; + /* Check for extra semicolons */ + if (CurTok.Tok == TOK_SEMI) { + /* TODO: warn on this if we have a pedantic mode */ + NextToken (); + continue; + } + /* Check for a _Static_assert */ if (CurTok.Tok == TOK_STATIC_ASSERT) { ParseStaticAssert (); @@ -995,6 +1002,16 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) continue; } + /* If we haven't got a type specifier yet, something must be wrong */ + if ((Spec.Flags & DS_TYPE_MASK) == DS_NONE) { + /* Avoid extra errors if it was a failed type specifier */ + if ((Spec.Flags & DS_EXTRA_TYPE) == 0) { + Error ("Declaration specifier expected"); + } + NeedClean = -1; + goto EndOfDecl; + } + /* Allow anonymous bit-fields */ Spec.Flags |= DS_ALLOW_BITFIELD; @@ -1107,6 +1124,7 @@ NextMember: NextToken (); } +EndOfDecl: if (NeedClean > 0) { /* Must be followed by a semicolon */ if (ConsumeSemi ()) { @@ -1181,6 +1199,13 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) DeclSpec Spec; int NeedClean = 0; + /* Check for extra semicolons */ + if (CurTok.Tok == TOK_SEMI) { + /* TODO: warn on this if we have a pedantic mode */ + NextToken (); + continue; + } + /* Check for a _Static_assert */ if (CurTok.Tok == TOK_STATIC_ASSERT) { ParseStaticAssert (); @@ -1197,6 +1222,16 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) continue; } + /* If we haven't got a type specifier yet, something must be wrong */ + if ((Spec.Flags & DS_TYPE_MASK) == DS_NONE) { + /* Avoid extra errors if it was a failed type specifier */ + if ((Spec.Flags & DS_EXTRA_TYPE) == 0) { + Error ("Declaration specifier expected"); + } + NeedClean = -1; + goto EndOfDecl; + } + /* Allow anonymous bit-fields */ Spec.Flags |= DS_ALLOW_BITFIELD; @@ -1362,6 +1397,7 @@ NextMember: NextToken (); } +EndOfDecl: if (NeedClean > 0) { /* Must be followed by a semicolon */ if (ConsumeSemi ()) { @@ -1559,6 +1595,8 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags) case TOK_UNION: NextToken (); + /* Remember we have an extra type decl */ + Spec->Flags |= DS_EXTRA_TYPE; /* Check for tag name */ if (CurTok.Tok == TOK_IDENT) { strcpy (Ident, CurTok.Ident); @@ -1570,8 +1608,6 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags) UseDefaultType (Spec, TS_DEFAULT_TYPE_NONE); break; } - /* Remember we have an extra type decl */ - Spec->Flags |= DS_EXTRA_TYPE; /* Declare the union in the current scope */ TagEntry = ParseUnionSpec (Ident, &Spec->Flags); /* Encode the union entry into the type */ @@ -1582,6 +1618,8 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags) case TOK_STRUCT: NextToken (); + /* Remember we have an extra type decl */ + Spec->Flags |= DS_EXTRA_TYPE; /* Check for tag name */ if (CurTok.Tok == TOK_IDENT) { strcpy (Ident, CurTok.Ident); @@ -1593,8 +1631,6 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags) UseDefaultType (Spec, TS_DEFAULT_TYPE_NONE); break; } - /* Remember we have an extra type decl */ - Spec->Flags |= DS_EXTRA_TYPE; /* Declare the struct in the current scope */ TagEntry = ParseStructSpec (Ident, &Spec->Flags); /* Encode the struct entry into the type */ @@ -1605,6 +1641,8 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags) case TOK_ENUM: NextToken (); + /* Remember we have an extra type decl */ + Spec->Flags |= DS_EXTRA_TYPE; /* Check for tag name */ if (CurTok.Tok == TOK_IDENT) { strcpy (Ident, CurTok.Ident); @@ -1616,8 +1654,6 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags) UseDefaultType (Spec, TS_DEFAULT_TYPE_NONE); break; } - /* Remember we have an extra type decl */ - Spec->Flags |= DS_EXTRA_TYPE; /* Parse the enum decl */ TagEntry = ParseEnumSpec (Ident, &Spec->Flags); /* Encode the enum entry into the type */ @@ -1658,9 +1694,7 @@ static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags) ** in DeclareLocals. The type code used here doesn't matter as ** long as it has no qualifiers. */ - Spec->Flags |= DS_DEF_TYPE; - Spec->Type[0].C = T_INT; - Spec->Type[1].C = T_END; + UseDefaultType (Spec, TS_DEFAULT_TYPE_INT); break; } /* FALL THROUGH */ @@ -2376,7 +2410,9 @@ void CheckEmptyDecl (const DeclSpec* Spec) ** warning if not. */ { - if ((Spec->Flags & DS_EXTRA_TYPE) == 0) { + if ((Spec->Flags & DS_TYPE_MASK) == DS_NONE) { + /* No declaration at all */ + } else if ((Spec->Flags & DS_EXTRA_TYPE) == 0) { Warning ("Declaration does not declare anything"); } else if (IsClassStruct (Spec->Type) && !IsIncompleteESUType (Spec->Type) && diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 79bbd4573..b8738992f 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -588,6 +588,16 @@ void DeclareLocals (void) continue; } + /* If we haven't got a type specifier yet, something must be wrong */ + if ((Spec.Flags & DS_TYPE_MASK) == DS_NONE) { + /* Avoid extra errors if it was a failed type specifier */ + if ((Spec.Flags & DS_EXTRA_TYPE) == 0) { + Error ("Declaration specifier expected"); + } + NeedClean = -1; + goto EndOfDecl; + } + /* Parse a comma separated variable list */ while (1) { @@ -616,6 +626,7 @@ void DeclareLocals (void) } } +EndOfDecl: /* Try some smart error recovery */ if (NeedClean < 0) { SmartErrorSkip (1); From 07c71541f43f70e59cf440dc1d9c9e085f9f577c Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 10 Dec 2023 09:30:41 +0100 Subject: [PATCH 2296/2710] Fix #2262: Make sure there's no branching after the sequence Also better check that arguments match --- src/cc65/coptlong.c | 79 +++++++++++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 28 deletions(-) diff --git a/src/cc65/coptlong.c b/src/cc65/coptlong.c index 16f089e49..29cf4d353 100644 --- a/src/cc65/coptlong.c +++ b/src/cc65/coptlong.c @@ -49,24 +49,30 @@ /* Remove unused loads and stores */ /*****************************************************************************/ - - unsigned OptLongAssign (CodeSeg* S) /* Simplify long assignments. ** Recognize -** lda ... 0 +** lda #IMM 0 ** sta sreg+1 1 -** lda ... 2 +** lda #IMM 2 ** sta sreg 3 -** lda ... 4 -** ldx ... 5 -** sta M0002 6 -** stx M0002+1 7 +** lda #IMM 4 +** ldx #IMM 5 +** sta YYY 6 +** stx YYY+1 7 ** ldy sreg 8 -** sty M0002+2 9 +** sty YYY+2 9 ** ldy sreg+1 10 -** sty M0002+3 11 -** and simplify if not used right after. +** sty YYY+3 11 +** and simplify, if not used right after and no branching occurs, to +** lda XXX+3 +** sta YYY+3 +** lda XXX+2 +** sta YYY+2 +** ldx XXX +** lda XXX+1 +** sta YYY +** stx YYY+1 */ { unsigned Changes = 0; @@ -75,35 +81,43 @@ unsigned OptLongAssign (CodeSeg* S) unsigned I = 0; while (I < CS_GetEntryCount (S)) { - CodeEntry* L[12]; + CodeEntry* L[13]; /* Get next entry */ L[0] = CS_GetEntry (S, I); - if (CS_GetEntries (S, L+1, I+1, 11)) { - if (L[0]->OPC == OP65_LDA && + if (CS_GetEntries (S, L+1, I+1, 12)) { + if (/* Check the opcode sequence */ + L[0]->OPC == OP65_LDA && L[1]->OPC == OP65_STA && - !strcmp (L[1]->Arg, "sreg+1") && L[2]->OPC == OP65_LDA && L[3]->OPC == OP65_STA && - !strcmp (L[3]->Arg, "sreg") && L[4]->OPC == OP65_LDA && L[5]->OPC == OP65_LDX && L[6]->OPC == OP65_STA && L[7]->OPC == OP65_STX && - !strncmp(L[7]->Arg, L[6]->Arg, strlen(L[6]->Arg)) && - !strcmp(L[7]->Arg + strlen(L[6]->Arg), "+1") && L[8]->OPC == OP65_LDY && - !strcmp (L[8]->Arg, "sreg") && L[9]->OPC == OP65_STY && - !strncmp(L[9]->Arg, L[6]->Arg, strlen(L[6]->Arg)) && - !strcmp(L[9]->Arg + strlen(L[6]->Arg), "+2") && L[10]->OPC == OP65_LDY && - !strcmp (L[10]->Arg, "sreg+1") && L[11]->OPC == OP65_STY && - !strncmp(L[11]->Arg, L[6]->Arg, strlen(L[6]->Arg)) && + /* Check the arguments match */ + L[0]->AM == AM65_IMM && + !strcmp (L[1]->Arg, "sreg+1") && + L[2]->AM == AM65_IMM && + !strcmp (L[3]->Arg, "sreg") && + L[4]->AM == AM65_IMM && + L[5]->AM == AM65_IMM && + !strncmp(L[7]->Arg, L[6]->Arg, strlen(L[6]->Arg)) && + !strcmp(L[7]->Arg + strlen(L[6]->Arg), "+1") && + !strcmp (L[8]->Arg, "sreg") && + !strncmp(L[9]->Arg, L[6]->Arg, strlen(L[6]->Arg)) && + !strcmp(L[9]->Arg + strlen(L[6]->Arg), "+2") && + !strcmp (L[10]->Arg, "sreg+1") && + !strncmp(L[11]->Arg, L[6]->Arg, strlen(L[6]->Arg)) && !strcmp(L[11]->Arg + strlen(L[6]->Arg), "+3") && - !RegXUsed (S, I+11)) { + /* Check there's nothing more */ + !RegXUsed (S, I+12) && + !CS_RangeHasLabel(S, I, 12)) { L[1]->AM = L[11]->AM; CE_SetArg(L[1], L[11]->Arg); @@ -142,7 +156,15 @@ unsigned OptLongCopy (CodeSeg* S) ** sty YYY+2 9 ** ldy sreg+1 10 ** sty YYY+3 11 -** and simplify if not used right after. +** and simplify, if not used right after and no branching occurs, to +** lda XXX+3 +** sta YYY+3 +** lda XXX+2 +** sta YYY+2 +** ldx XXX +** lda XXX+1 +** sta YYY +** stx YYY+1 */ { unsigned Changes = 0; @@ -151,12 +173,12 @@ unsigned OptLongCopy (CodeSeg* S) unsigned I = 0; while (I < CS_GetEntryCount (S)) { - CodeEntry* L[12]; + CodeEntry* L[13]; /* Get next entry */ L[0] = CS_GetEntry (S, I); - if (CS_GetEntries (S, L+1, I+1, 11)) { + if (CS_GetEntries (S, L+1, I+1, 12)) { if (L[0]->OPC == OP65_LDA && !strncmp(L[0]->Arg, L[5]->Arg, strlen(L[5]->Arg)) && !strcmp(L[0]->Arg + strlen(L[5]->Arg), "+3") && @@ -185,7 +207,8 @@ unsigned OptLongCopy (CodeSeg* S) L[11]->OPC == OP65_STY && !strncmp(L[11]->Arg, L[6]->Arg, strlen(L[6]->Arg)) && !strcmp(L[11]->Arg + strlen(L[6]->Arg), "+3") && - !RegXUsed (S, I+11)) { + !RegXUsed (S, I+11) && + !CS_RangeHasLabel(S, I, 12)) { L[1]->AM = L[11]->AM; CE_SetArg(L[1], L[11]->Arg); From bbd542fac7fd78d6cb2b7c53cf198c3c79b3047d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 10 Dec 2023 17:01:54 +0800 Subject: [PATCH 2297/2710] Fixed missing diagnosis on extra identifiers in type names. --- src/cc65/declare.c | 3 +++ test/err/type-name-extra-identifier.c | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 test/err/type-name-extra-identifier.c diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 029e22069..076e94aa8 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2080,6 +2080,9 @@ static void DirectDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) DirectDecl (Spec, D, Mode); ConsumeRParen (); } else if (CurTok.Tok == TOK_IDENT) { + if (Mode == DM_NO_IDENT) { + Error ("Unexpected identifier in type name"); + } strcpy (D->Ident, CurTok.Ident); NextToken (); } else { diff --git a/test/err/type-name-extra-identifier.c b/test/err/type-name-extra-identifier.c new file mode 100644 index 000000000..72de4778d --- /dev/null +++ b/test/err/type-name-extra-identifier.c @@ -0,0 +1,25 @@ +/* + Copyright 2023 The cc65 Authors + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + Test of type name with extra identifier +*/ + +int a = sizeof (int b); From befc9533c6195e9cc18aa4873b823d486dba0abd Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 10 Dec 2023 20:21:50 +0800 Subject: [PATCH 2298/2710] More accurate diagnostic messages on empty declarations without any type specifiers. --- src/cc65/declare.c | 9 ++++++--- src/cc65/expr.c | 2 +- test/ref/bug1889-missing-identifier.cref | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 076e94aa8..ec5116ead 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2087,10 +2087,13 @@ static void DirectDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) NextToken (); } else { D->Ident[0] = '\0'; - if ((Spec->Flags & DS_NO_EMPTY_DECL) != 0 && - CurTok.Tok != TOK_LBRACK && + if (CurTok.Tok != TOK_LBRACK && ((Spec->Flags & DS_ALLOW_BITFIELD) == 0 || CurTok.Tok != TOK_COLON)) { - Error ("Identifier expected"); + if ((Spec->Flags & DS_TYPE_MASK) == DS_DEF_TYPE) { + Error ("Declaration specifier or identifier expected"); + } else if ((Spec->Flags & DS_NO_EMPTY_DECL) != 0) { + Error ("Identifier expected"); + } } } diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 963ea8bd6..ed918b4ee 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1412,7 +1412,7 @@ static void Primary (ExprDesc* E) } else { /* Let's see if this is a C99-style declaration */ DeclSpec Spec; - ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_NONE, SC_AUTO); + ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT, SC_AUTO); if ((Spec.Flags & DS_TYPE_MASK) != DS_NONE) { Error ("Mixed declarations and code are not supported in cc65"); diff --git a/test/ref/bug1889-missing-identifier.cref b/test/ref/bug1889-missing-identifier.cref index 2d92ff263..7381d2032 100644 --- a/test/ref/bug1889-missing-identifier.cref +++ b/test/ref/bug1889-missing-identifier.cref @@ -1,3 +1,3 @@ bug1889-missing-identifier.c:3: Error: Identifier or ';' expected after declaration specifiers bug1889-missing-identifier.c:3: Warning: Implicit 'int' is an obsolete feature -bug1889-missing-identifier.c:4: Error: Identifier expected +bug1889-missing-identifier.c:4: Error: Declaration specifier or identifier expected From b31a1c7c0c25de087e272c045eb2370a03856c93 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 10 Dec 2023 22:16:30 +0100 Subject: [PATCH 2299/2710] test for regression that occured after #2262 --- test/val/optimizer-bug-pr2262.c | 53 +++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 test/val/optimizer-bug-pr2262.c diff --git a/test/val/optimizer-bug-pr2262.c b/test/val/optimizer-bug-pr2262.c new file mode 100644 index 000000000..f2c08a98c --- /dev/null +++ b/test/val/optimizer-bug-pr2262.c @@ -0,0 +1,53 @@ + +// optimizer bug that occured after PR #2262, fixed by PR #2295 + +#include <stdio.h> + +unsigned char n; +unsigned long fp1; + +int failures = 0; + +void test1(void) +{ + asm("lda _n"); + asm("jeq %g", L0004); + + asm("lda #$3F"); + asm("sta sreg+1"); + asm("lda #$C0"); + asm("sta sreg"); + asm("lda #$00"); + asm("ldx #$00"); + asm("jmp %g", L0005); + +L0004: + asm("lda #$3F"); + asm("sta sreg+1"); + asm("lda #$00"); + asm("sta sreg"); + asm("lda #$00"); + asm("ldx #$00"); + +L0005: + asm("sta _fp1"); + asm("stx _fp1+1"); + asm("ldy sreg"); + asm("sty _fp1+2"); + asm("ldy sreg+1"); + asm("sty _fp1+3"); +} + +int main(void) +{ + n = 0; + test1(); + printf("fp1:%08lx\n", fp1); + if (fp1 != 0x3f000000) failures++; + n = 0xff; + test1(); + printf("fp1:%08lx\n", fp1); + if (fp1 != 0x3fc00000) failures++; + printf("failures:%d\n", failures); + return failures; +} From 0b077f561f890c74045dc72598243d01c5384fc0 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 10 Dec 2023 22:43:47 +0100 Subject: [PATCH 2300/2710] exclude test directory from some style checks - it makes no sense to enforce these things in the test bench, we need to be able to test all kinds of spaces and tabs :) --- .github/checks/spaces.sh | 2 +- .github/checks/tabs.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/checks/spaces.sh b/.github/checks/spaces.sh index 945e9acc3..e231f6c2d 100755 --- a/.github/checks/spaces.sh +++ b/.github/checks/spaces.sh @@ -5,7 +5,7 @@ CHECK_PATH=. cd $SCRIPT_PATH/../../ -FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l ' $'` +FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | grep -v "test/" | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l ' $'` cd $OLDCWD diff --git a/.github/checks/tabs.sh b/.github/checks/tabs.sh index 1c32def17..80dac3f2d 100755 --- a/.github/checks/tabs.sh +++ b/.github/checks/tabs.sh @@ -5,7 +5,7 @@ CHECK_PATH=. cd $SCRIPT_PATH/../../ -FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l $'\t'` +FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | grep -v "test/" | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l $'\t'` cd $OLDCWD From 6b855d562aa16b1e36ef7270b0dcfdb27398bd24 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 10 Dec 2023 23:18:55 +0100 Subject: [PATCH 2301/2710] use -std=gnu17 for the references, so the test bench will not break with GCC 14. see #2277 --- test/ref/Makefile | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/test/ref/Makefile b/test/ref/Makefile index abd3e9bc0..9538fdee7 100644 --- a/test/ref/Makefile +++ b/test/ref/Makefile @@ -39,8 +39,18 @@ OPTIONS = g O Os Osi Osir Osr Oi Oir Or ISEQUAL = ..$S..$Stestwrk$Sisequal$(EXE) +# NOTE: the current test bench may include K&R style C, C89 style C, C99 - and +# even things from later standards. Technically C99 removed certain C89 +# constructs - However, so far GCC would still compile them and issue a +# warning (instead of an error). Now, GCC 14 will be more strict about this, +# and by default make those things an error instead. We use -std=gnu17 here +# so we can still build the references with a modern compiler, and don't +# have to deal with special-casing individual tests that use constructs +# from those old standards. Should this become a problem in the future, we +# will have to change that, and create said special cases here. +# see discussion in https://github.com/cc65/cc65/issues/2277 CC = gcc -CFLAGS = -O2 -Wall -W -Wextra -funsigned-char -fwrapv -fno-strict-overflow +CFLAGS = -std=gnu17 -O2 -Wall -W -Wextra -funsigned-char -fwrapv -fno-strict-overflow .PHONY: all clean From 9985ee7f61f9c0e1b1256d16e3fb901c87531019 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 11 Dec 2023 00:18:40 +0100 Subject: [PATCH 2302/2710] fix %hhn and %hn in the internal xvsnprintf function --- src/common/xsprintf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/xsprintf.c b/src/common/xsprintf.c index 556e4f359..2e811a5b1 100644 --- a/src/common/xsprintf.c +++ b/src/common/xsprintf.c @@ -352,8 +352,8 @@ static void StoreOffset (PrintfCtrl* P) /* Store the current output offset (%n format spec) */ { switch (P->LengthMod) { - case lmChar: *va_arg (P->ap, int*) = P->BufFill; break; - case lmShort: *va_arg (P->ap, int*) = P->BufFill; break; + case lmChar: *va_arg (P->ap, char*) = P->BufFill; break; + case lmShort: *va_arg (P->ap, short*) = P->BufFill; break; case lmInt: *va_arg (P->ap, int*) = P->BufFill; break; case lmLong: *va_arg (P->ap, long*) = P->BufFill; break; case lmIntMax: *va_arg (P->ap, intmax_t*) = P->BufFill; break; From b1c150249495d35b299c46579efc47a7b3cbc717 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Mon, 11 Dec 2023 00:35:07 +0100 Subject: [PATCH 2303/2710] MS compiler insists on those typecasts apparently --- src/common/xsprintf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/xsprintf.c b/src/common/xsprintf.c index 2e811a5b1..aa3183752 100644 --- a/src/common/xsprintf.c +++ b/src/common/xsprintf.c @@ -352,8 +352,8 @@ static void StoreOffset (PrintfCtrl* P) /* Store the current output offset (%n format spec) */ { switch (P->LengthMod) { - case lmChar: *va_arg (P->ap, char*) = P->BufFill; break; - case lmShort: *va_arg (P->ap, short*) = P->BufFill; break; + case lmChar: *va_arg (P->ap, char*) = (char)P->BufFill; break; + case lmShort: *va_arg (P->ap, short*) = (short)P->BufFill; break; case lmInt: *va_arg (P->ap, int*) = P->BufFill; break; case lmLong: *va_arg (P->ap, long*) = P->BufFill; break; case lmIntMax: *va_arg (P->ap, intmax_t*) = P->BufFill; break; From f8fe1d1560aa79d497393771fa10ef09663da7bb Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 13 Dec 2023 22:57:32 +0800 Subject: [PATCH 2304/2710] Fixed missing diagnosis on function parameter lists with trailing commas. --- src/cc65/declare.c | 107 +++++++++++++++++++---------- test/err/bug2301-trailing-coma-1.c | 3 + test/err/bug2301-trailing-coma-2.c | 6 ++ 3 files changed, 78 insertions(+), 38 deletions(-) create mode 100644 test/err/bug2301-trailing-coma-1.c create mode 100644 test/err/bug2301-trailing-coma-2.c diff --git a/src/cc65/declare.c b/src/cc65/declare.c index eee6dff9f..2746d1326 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1740,10 +1740,12 @@ static const Type* ParamTypeCvt (Type* T) static void ParseOldStyleParamList (FuncDesc* F) /* Parse an old-style (K&R) parameter list */ { - unsigned PrevErrorCount = ErrorCount; + if (CurTok.Tok == TOK_RPAREN) { + return; + } /* Parse params */ - while (CurTok.Tok != TOK_RPAREN) { + while (1) { /* List of identifiers expected */ if (CurTok.Tok == TOK_IDENT) { @@ -1768,29 +1770,33 @@ static void ParseOldStyleParamList (FuncDesc* F) } /* Check for more parameters */ - if (CurTok.Tok == TOK_COMMA) { - NextToken (); - } else { + if (CurTok.Tok != TOK_COMMA) { break; } - } + NextToken (); - /* Skip right paren. We must explicitly check for one here, since some of - ** the breaks above bail out without checking. - */ - ConsumeRParen (); + } +} + + + +static void ParseOldStyleParamDeclList (FuncDesc* F attribute ((unused))) +/* Parse an old-style (K&R) function declarator declaration list */ +{ + if (CurTok.Tok == TOK_SEMI) { + /* No parameter declaration list */ + return; + } /* An optional list of type specifications follows */ while (CurTok.Tok != TOK_LCURLY) { DeclSpec Spec; + int NeedClean; /* Read the declaration specifier */ ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_NONE, SC_AUTO); - /* Paremeters must have identifiers as names */ - Spec.Flags |= DS_NO_EMPTY_DECL; - /* We accept only auto and register as storage class specifiers, but ** we ignore all this, since we use auto anyway. */ @@ -1799,10 +1805,14 @@ static void ParseOldStyleParamList (FuncDesc* F) Error ("Illegal storage class"); } - /* Type must be specified */ + /* If we haven't got a type specifier yet, something must be wrong */ if ((Spec.Flags & DS_TYPE_MASK) == DS_NONE) { - Error ("Expected declaration specifiers"); - break; + /* Avoid extra errors if it was a failed type specifier */ + if ((Spec.Flags & DS_EXTRA_TYPE) == 0) { + Error ("Declaration specifier expected"); + } + NeedClean = -1; + goto EndOfDecl; } /* Parse a comma separated variable list */ @@ -1811,7 +1821,12 @@ static void ParseOldStyleParamList (FuncDesc* F) Declarator Decl; /* Read the parameter */ - ParseDecl (&Spec, &Decl, DM_IDENT_OR_EMPTY); + NeedClean = ParseDecl (&Spec, &Decl, DM_IDENT_OR_EMPTY); + + /* Bail out if there are errors */ + if (NeedClean <= 0) { + break; + } /* Warn about new local type declaration */ if ((Spec.Flags & DS_NEW_TYPE_DECL) != 0) { @@ -1820,9 +1835,9 @@ static void ParseOldStyleParamList (FuncDesc* F) } if (Decl.Ident[0] != '\0') { - /* We have a name given. Search for the symbol */ SymEntry* Param = FindLocalSym (Decl.Ident); + if (Param) { /* Check if we already changed the type for this ** parameter. @@ -1837,25 +1852,40 @@ static void ParseOldStyleParamList (FuncDesc* F) Error ("Redefinition for parameter '%s'", Param->Name); } } else { - Error ("Unknown identifier: '%s'", Decl.Ident); + Error ("Unknown parameter '%s'", Decl.Ident); + } + + /* Initialization is not allowed */ + if (CurTok.Tok == TOK_ASSIGN) { + Error ("Parameter '%s' cannot be initialized", Decl.Ident); + + /* Try some smart error recovery */ + SmartErrorSkip (0); } } - if (CurTok.Tok == TOK_COMMA) { - NextToken (); - } else { + /* Check for more declarators */ + if (CurTok.Tok != TOK_COMMA) { break; } + NextToken (); } - /* Variable list must be semicolon terminated */ - ConsumeSemi (); - } +EndOfDecl: + if (NeedClean > 0) { + /* Must be followed by a semicolon */ + if (ConsumeSemi ()) { + NeedClean = 0; + } else { + NeedClean = -1; + } + } - if (PrevErrorCount != ErrorCount && CurTok.Tok != TOK_LCURLY) { /* Try some smart error recovery */ - SmartErrorSkip (0); + if (NeedClean < 0) { + SmartErrorSkip (1); + } } } @@ -1864,8 +1894,12 @@ static void ParseOldStyleParamList (FuncDesc* F) static void ParseAnsiParamList (FuncDesc* F) /* Parse a new-style (ANSI) parameter list */ { + if (CurTok.Tok == TOK_RPAREN) { + return; + } + /* Parse params */ - while (CurTok.Tok != TOK_RPAREN) { + while (1) { DeclSpec Spec; Declarator Decl; @@ -1894,7 +1928,7 @@ static void ParseAnsiParamList (FuncDesc* F) /* Type must be specified */ if ((Spec.Flags & DS_TYPE_MASK) == DS_NONE) { - Error ("Type specifier missing"); + Error ("Declaration specifier or '...' expected"); } /* Warn about new local type declaration */ @@ -1945,18 +1979,12 @@ static void ParseAnsiParamList (FuncDesc* F) } } - /* Check for more parameters */ - if (CurTok.Tok == TOK_COMMA) { - NextToken (); - } else { + /* Check for end of parameter type list */ + if (CurTok.Tok != TOK_COMMA) { break; } + NextToken (); } - - /* Skip right paren. We must explicitly check for one here, since some of - ** the breaks above bail out without checking. - */ - ConsumeRParen (); } @@ -1998,9 +2026,12 @@ static FuncDesc* ParseFuncDecl (void) if ((F->Flags & FD_OLDSTYLE) == 0) { /* New-style function */ ParseAnsiParamList (F); + ConsumeRParen (); } else { /* Old-style function */ ParseOldStyleParamList (F); + ConsumeRParen (); + ParseOldStyleParamDeclList (F); } PopLexicalLevel (); diff --git a/test/err/bug2301-trailing-coma-1.c b/test/err/bug2301-trailing-coma-1.c new file mode 100644 index 000000000..66cd4fae3 --- /dev/null +++ b/test/err/bug2301-trailing-coma-1.c @@ -0,0 +1,3 @@ +/* Bug #2301 - Function parameter list with an extra trailing comma should not compile */ + +int foo(int a,); /* Should fail */ diff --git a/test/err/bug2301-trailing-coma-2.c b/test/err/bug2301-trailing-coma-2.c new file mode 100644 index 000000000..40ca3d0ca --- /dev/null +++ b/test/err/bug2301-trailing-coma-2.c @@ -0,0 +1,6 @@ +/* Bug #2301 - Function parameter list with an extra trailing comma should not compile */ + +int bar(a,) int a; /* Should fail */ +{ + return a; +} From 1e4d1b4311149ca84cbd35267e447d58ae47f9e6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 14 Dec 2023 02:34:03 +0800 Subject: [PATCH 2305/2710] Fixed function declarator parser when a parameter has a function type. Ensured check on parameter lists without types in non-definition declarations. --- src/cc65/compile.c | 8 ++++ src/cc65/declare.c | 92 +++++++++++++++++++++++++++++----------------- test/err/bug2303.c | 1 + test/val/bug2302.c | 32 ++++++++++++++++ 4 files changed, 100 insertions(+), 33 deletions(-) create mode 100644 test/err/bug2303.c create mode 100644 test/val/bug2302.c diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 0dc75273d..b996c78df 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -206,6 +206,14 @@ static void Parse (void) } else { /* Just a declaration */ Decl.StorageClass |= SC_DECL; + + FuncDef = GetFuncDesc (Decl.Type); + if ((FuncDef->Flags & (FD_EMPTY | FD_OLDSTYLE)) == FD_OLDSTYLE) { + /* A parameter list without types is only allowed in a + ** function definition. + */ + Error ("Parameter names without types in function declaration"); + } } } diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 2746d1326..8b7512730 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1989,7 +1989,7 @@ static void ParseAnsiParamList (FuncDesc* F) -static FuncDesc* ParseFuncDecl (void) +static void ParseFuncDecl (Declarator* D, declmode_t Mode, TypeCode Qualifiers) /* Parse the argument list of a function with the enclosing parentheses */ { /* Create a new function descriptor */ @@ -2009,14 +2009,17 @@ static FuncDesc* ParseFuncDecl (void) /* Parameter list declared as void */ NextToken (); F->Flags |= FD_VOID_PARAM; - } else if (CurTok.Tok == TOK_IDENT && + } else if (Mode != DM_NO_IDENT && + CurTok.Tok == TOK_IDENT && (NextTok.Tok == TOK_COMMA || NextTok.Tok == TOK_RPAREN)) { /* If the identifier is a typedef, we have a new-style parameter list; ** if it's some other identifier, it's an old-style parameter list. + ** Note: Non-empty Old-style (K&R) parameter list is not allowed in + ** type names. */ SymEntry* Sym = FindSym (CurTok.Ident); if (Sym == 0 || !SymIsTypeDef (Sym)) { - /* Old-style (K&R) function. */ + /* Old-style (K&R) function */ F->Flags |= FD_OLDSTYLE; } } @@ -2026,13 +2029,20 @@ static FuncDesc* ParseFuncDecl (void) if ((F->Flags & FD_OLDSTYLE) == 0) { /* New-style function */ ParseAnsiParamList (F); - ConsumeRParen (); } else { /* Old-style function */ ParseOldStyleParamList (F); - ConsumeRParen (); + } + + if (!ConsumeRParen ()) { + /* Try some smart error recovery */ + SimpleErrorSkip (); + NextToken (); + } else if (Mode == DM_IDENT_OR_EMPTY && (F->Flags & FD_OLDSTYLE) != 0) { + /* Parameter declaration list is only allowed in function definitions */ ParseOldStyleParamDeclList (F); } + PopLexicalLevel (); /* Remember the last function parameter. We need it later for several @@ -2040,18 +2050,27 @@ static FuncDesc* ParseFuncDecl (void) ** more symbols are added to the table, it is easier if we remember it ** now, since it is currently the last entry in the symbol table. */ - F->LastParam = GetSymTab()->SymTail; + F->LastParam = GetSymTab ()->SymTail; + + /* Leave the lexical level remembering the symbol tables */ + RememberFunctionLevel (F); /* It is allowed to use incomplete types in function prototypes, so we ** won't always get to know the parameter sizes here and may do that later. */ F->Flags |= FD_INCOMPLETE_PARAM; - /* Leave the lexical level remembering the symbol tables */ - RememberFunctionLevel (F); + /* We cannot specify fastcall for variadic functions */ + if ((F->Flags & FD_VARIADIC) && (Qualifiers & T_QUAL_FASTCALL)) { + Error ("Variadic functions cannot be __fastcall__"); + Qualifiers &= ~T_QUAL_FASTCALL; + } - /* Return the function descriptor */ - return F; + /* Add the function type. Be sure to bounds check the type buffer */ + NeedTypeSpace (D, 1); + D->Type[D->Index].C = T_FUNC | Qualifiers; + D->Type[D->Index].A.F = F; + ++D->Index; } @@ -2090,15 +2109,37 @@ static void DirectDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) } if (CurTok.Tok == TOK_LPAREN) { - NextToken (); + SymEntry* Entry; + /* An empty declaration cannot contain parentheses where an identifier ** would show up if it were a non-empty declaration. */ if (Mode == DM_IDENT_OR_EMPTY) { Spec->Flags |= DS_NO_EMPTY_DECL; } - DirectDecl (Spec, D, Mode); - ConsumeRParen (); + + /* We have to disambiguate the meanings of 'type (identifier' when + ** the identifier can be a typedef'ed parameter type specifier or + ** a declarator enclosed in parentheses in some cases. + */ + if (Mode == DM_IDENT_OR_EMPTY || /* If we are in a declaration... */ + NextTok.Tok == TOK_LPAREN || /* or the next token is one more paren... */ + NextTok.Tok == TOK_STAR || /* or a '*' ... */ + (NextTok.Tok == TOK_IDENT && /* or an identifier that... */ + ((Entry = FindSym (NextTok.Ident)) == 0 || /* is not a typedef. */ + !SymIsTypeDef (Entry)))) { + /* Parse the direct declarator in parentheses */ + NextToken (); + DirectDecl (Spec, D, Mode); + ConsumeRParen (); + } else { + /* This is a parameter type list in parentheses */ + ParseFuncDecl (D, Mode, Qualifiers); + + /* Qualifiers now used */ + Qualifiers = T_QUAL_NONE; + } + } else if (CurTok.Tok == TOK_IDENT) { if (Mode == DM_NO_IDENT) { Error ("Unexpected identifier in type name"); @@ -2119,28 +2160,11 @@ static void DirectDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) while (CurTok.Tok == TOK_LBRACK || CurTok.Tok == TOK_LPAREN) { if (CurTok.Tok == TOK_LPAREN) { - /* Function declarator */ - FuncDesc* F; - - /* Parse the function declarator */ - F = ParseFuncDecl (); - - /* We cannot specify fastcall for variadic functions */ - if ((F->Flags & FD_VARIADIC) && (Qualifiers & T_QUAL_FASTCALL)) { - Error ("Variadic functions cannot be __fastcall__"); - Qualifiers &= ~T_QUAL_FASTCALL; - } - - /* Add the function type. Be sure to bounds check the type buffer */ - NeedTypeSpace (D, 1); - D->Type[D->Index].C = T_FUNC | Qualifiers; - D->Type[D->Index].A.F = F; - ++D->Index; + ParseFuncDecl (D, Mode, Qualifiers); /* Qualifiers now used */ Qualifiers = T_QUAL_NONE; - } else { /* Array declarator */ long Size = UNSPECIFIED; @@ -2385,9 +2409,11 @@ int ParseDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) } /* Try some smart error recovery */ - if (CurTok.Tok != TOK_LCURLY || !IsTypeFunc (D->Type)) { + if (Mode == DM_NO_IDENT) { + return SimpleErrorSkip (); + } else if (CurTok.Tok != TOK_LCURLY || !IsTypeFunc (D->Type)) { /* Skip to the end of the whole declaration if it is not part of a - ** parameter list or a type cast. + ** parameter list. */ return SmartErrorSkip (Mode == DM_IDENT_OR_EMPTY); } diff --git a/test/err/bug2303.c b/test/err/bug2303.c new file mode 100644 index 000000000..609725ad8 --- /dev/null +++ b/test/err/bug2303.c @@ -0,0 +1 @@ +int f(a); /* Should be an error */ diff --git a/test/val/bug2302.c b/test/val/bug2302.c new file mode 100644 index 000000000..3ca8a5572 --- /dev/null +++ b/test/val/bug2302.c @@ -0,0 +1,32 @@ +/* Bug #2302 - Parameters of function types not parsed correctly */ + +#include <stdio.h> + +typedef int A; +int zoo(A ()); /* OK: int zoo(int (*)()) */ +int zoo(A (())); /* OK: int zoo(int ((*)())) aka. int zoo(int (*)()) */ +int zoo(A (A)); /* OK: int zoo(int (*)(int)) */ +int zoo(A ((A))); /* OK: int zoo(int ((*)(int))) aka. int zoo(int (*)(int)) */ +int zoo(A A(A)); /* OK: int zoo(int (*A)(int)) */ +int zoo(A (*)(A)); /* OK: int zoo(int (*)(int)) */ +int zoo(A (*A)(A)); /* OK: int zoo(int (*A)(int)) */ +int zoo(A ((*A))(A)); /* OK: int zoo(int (*A)(int)) */ +int zoo(A ((((*((fp))))(A A)))) /* OK: int zoo(int (*fp)(int A)) */ +{ + return fp(42); +} + +int bar(int a) +{ + return a ^ 42; +} + +int main(void) +{ + int a = zoo((int (*)())bar); + if (a != 0) + { + printf("failed: a = %d\n", a); + } + return a; +} From a5746227dc15b2961b91350ae52a29df13227770 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 14 Dec 2023 21:27:48 +0800 Subject: [PATCH 2306/2710] Added warning on static functions that are used but not defined. --- src/cc65/compile.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 0dc75273d..94e389292 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -273,11 +273,12 @@ static void Parse (void) if (IsTypeVoid (Decl.Type)) { /* We cannot declare variables of type void */ Error ("Illegal type for variable '%s'", Decl.Ident); - Sym->Flags &= ~(SC_STORAGE | SC_DEF); + Sym->Flags |= SC_DEF; } else if (Size == 0 && SymIsDef (Sym) && !IsEmptiableObjectType (Decl.Type)) { /* Size is unknown. Is it an array? */ if (!IsTypeArray (Decl.Type)) { Error ("Variable '%s' has unknown size", Decl.Ident); + Sym->Flags |= SC_DEF; } } else { /* Check for enum forward declaration. @@ -539,10 +540,16 @@ void Compile (const char* FileName) Entry->Flags |= SC_DEF; } else if (!IsTypeArray (Entry->Type)) { /* Tentative declared variable is still of incomplete type */ - Error ("Definition of '%s' has type '%s' that is never completed", + Error ("Definition of '%s' never has its type '%s' completed", Entry->Name, GetFullTypeName (Entry->Type)); } + } else if (!SymIsDef (Entry) && (Entry->Flags & SC_FUNC) == SC_FUNC) { + /* Check for undefined functions */ + if ((Entry->Flags & (SC_EXTERN | SC_STATIC)) == SC_STATIC && SymIsRef (Entry)) { + Warning ("Static function '%s' used but never defined", + Entry->Name); + } } } From 1093d169ad3f03de4b86a69dba200bad62a1f261 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 12 Dec 2023 18:03:00 +0100 Subject: [PATCH 2307/2710] Fix BSS obliteration by mliparam during exec(). Using mliparam at this time could lead to corruption at the start of the new executed program if BSS is real full and mliparam is over $BB00. The fix is to open the file from the loader stub instead of doing it before the C library shutdown. --- libsrc/apple2/exec.s | 65 +++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/libsrc/apple2/exec.s b/libsrc/apple2/exec.s index 27a6487bd..b8875e9ca 100644 --- a/libsrc/apple2/exec.s +++ b/libsrc/apple2/exec.s @@ -121,35 +121,9 @@ setbuf: lda #$00 ; Low byte dex dex - ; Set I/O buffer - sta mliparam + MLI::OPEN::IO_BUFFER - stx mliparam + MLI::OPEN::IO_BUFFER+1 - - ; PATHNAME already set - .assert MLI::OPEN::PATHNAME = MLI::INFO::PATHNAME, error - - ; Lower file level to avoid program file - ; being closed by C library shutdown code - ldx LEVEL - stx level - beq :+ - dec LEVEL - - ; Open file -: lda #OPEN_CALL - ldx #OPEN_COUNT - jsr callmli - - ; Restore file level - ldx level - stx LEVEL - bcc :+ - jmp oserr - - ; Get and save fd -: lda mliparam + MLI::OPEN::REF_NUM - sta read_ref - sta close_ref + ; Set OPEN MLI call I/O buffer parameter + sta io_buffer + stx io_buffer+1 .ifdef __APPLE2ENH__ ; Calling the 80 column firmware needs the ROM switched @@ -194,14 +168,25 @@ setbuf: lda #$00 ; Low byte ; Initiate C library shutdown jmp _exit - .bss - -level : .res 1 - .rodata +source: + ; Open program file + ; PATHNAME parameter is already set (we reuse + ; the copy at $0280); IO_BUFFER has been setup + ; before shutting down the C library + jsr $BF00 + .byte OPEN_CALL + .word open_param + bcs error + + ; Copy REF_NUM to MLI READ and CLOSE parameters + lda open_ref + sta read_ref + sta close_ref + ; Read whole program file -source: jsr $BF00 + jsr $BF00 .byte READ_CALL .word read_param bcs error @@ -254,6 +239,14 @@ jump: jmp (data_buffer) file_type = * - source + target .byte $00 +open_param = * - source + target + .byte $03 ; PARAM_COUNT + .addr $0280 ; PATHNAME +io_buffer = * - source + target + .addr $0000 ; IO_BUFFER +open_ref = * - source + target + .byte $00 ; REF_NUM + read_param = * - source + target .byte $04 ; PARAM_COUNT read_ref = * - source + target @@ -285,4 +278,8 @@ size = * - source target = DOSWARM - size + ; Make sure that the loader isn't too big, and + ; fits in $300-$3D0 + .assert target >= $300, error + dosvec: jmp quit From 08341aae3026453cf1b7777e7fc31ef2395772af Mon Sep 17 00:00:00 2001 From: paul moore <paulmoore100@hotmail.com> Date: Thu, 14 Dec 2023 14:25:35 -0800 Subject: [PATCH 2308/2710] second try at fixing win64 build --- .github/workflows/build-on-pull-request.yml | 16 ++++-- src/ar65.vcxproj | 33 ++++++++++++ src/ca65.vcxproj | 33 ++++++++++++ src/cc65.sln | 60 ++++++++++++++++++++- src/cc65.vcxproj | 35 +++++++++++- src/chrcvt65.vcxproj | 33 ++++++++++++ src/cl65.vcxproj | 33 ++++++++++++ src/cl65/main.c | 2 +- src/co65.vcxproj | 31 +++++++++++ src/common.vcxproj | 29 ++++++++++ src/common/filetype.c | 3 +- src/common/filetype.h | 2 +- src/da65.vcxproj | 33 ++++++++++++ src/grc65.vcxproj | 33 ++++++++++++ src/ld65.vcxproj | 39 +++++++++++++- src/ld65/main.c | 2 +- src/od65.vcxproj | 33 ++++++++++++ src/sim65.vcxproj | 33 ++++++++++++ src/sp65.vcxproj | 35 +++++++++++- 19 files changed, 504 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 55be5db1e..55ee3df2d 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -67,8 +67,16 @@ jobs: - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.1 - - name: Build app (debug) - run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug + - name: Build app (x86 debug) + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug Platform=Win32 + + - name: Build app (x86 release) + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release Platform=Win32 + + - name: Build app (x64 release) + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug Platform=x64 + + - name: Build app (x64 release) + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release Platform=x64 + - - name: Build app (release) - run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release diff --git a/src/ar65.vcxproj b/src/ar65.vcxproj index 27d12dadc..0fd788e06 100644 --- a/src/ar65.vcxproj +++ b/src/ar65.vcxproj @@ -5,10 +5,18 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{5E8C19C6-B167-440C-8BEF-3CBF109CDB49}</ProjectGuid> @@ -21,15 +29,22 @@ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <UseDebugLibraries>true</UseDebugLibraries> + </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <UseDebugLibraries>false</UseDebugLibraries> + </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -40,6 +55,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> @@ -48,6 +72,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClInclude Include="ar65\add.h" /> <ClInclude Include="ar65\del.h" /> diff --git a/src/ca65.vcxproj b/src/ca65.vcxproj index 3cc6019f2..d8fd39303 100644 --- a/src/ca65.vcxproj +++ b/src/ca65.vcxproj @@ -5,10 +5,18 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}</ProjectGuid> @@ -21,15 +29,22 @@ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <UseDebugLibraries>true</UseDebugLibraries> + </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <UseDebugLibraries>false</UseDebugLibraries> + </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -40,6 +55,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> @@ -48,6 +72,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClInclude Include="ca65\anonname.h" /> <ClInclude Include="ca65\asserts.h" /> diff --git a/src/cc65.sln b/src/cc65.sln index 4ae2816ad..8e31ef909 100644 --- a/src/cc65.sln +++ b/src/cc65.sln @@ -1,6 +1,8 @@  -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual C++ Express 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.6.33829.357 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "common.vcxproj", "{71DC1F68-BFC4-478C-8655-C8E9C9654D2B}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cc65", "cc65.vcxproj", "{B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}" @@ -66,61 +68,115 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 Release|Win32 = Release|Win32 + Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}.Debug|Win32.ActiveCfg = Debug|Win32 {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}.Debug|Win32.Build.0 = Debug|Win32 + {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}.Debug|x64.ActiveCfg = Debug|x64 + {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}.Debug|x64.Build.0 = Debug|x64 {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}.Release|Win32.ActiveCfg = Release|Win32 {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}.Release|Win32.Build.0 = Release|Win32 + {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}.Release|x64.ActiveCfg = Release|x64 + {71DC1F68-BFC4-478C-8655-C8E9C9654D2B}.Release|x64.Build.0 = Release|x64 {B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}.Debug|Win32.ActiveCfg = Debug|Win32 {B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}.Debug|Win32.Build.0 = Debug|Win32 + {B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}.Debug|x64.ActiveCfg = Debug|x64 + {B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}.Debug|x64.Build.0 = Debug|x64 {B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}.Release|Win32.ActiveCfg = Release|Win32 {B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}.Release|Win32.Build.0 = Release|Win32 + {B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}.Release|x64.ActiveCfg = Release|x64 + {B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}.Release|x64.Build.0 = Release|x64 {D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}.Debug|Win32.ActiveCfg = Debug|Win32 {D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}.Debug|Win32.Build.0 = Debug|Win32 + {D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}.Debug|x64.ActiveCfg = Debug|x64 + {D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}.Debug|x64.Build.0 = Debug|x64 {D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}.Release|Win32.ActiveCfg = Release|Win32 {D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}.Release|Win32.Build.0 = Release|Win32 + {D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}.Release|x64.ActiveCfg = Release|x64 + {D28CB737-E6CA-49C4-8CE9-FF05F86DD4EC}.Release|x64.Build.0 = Release|x64 {5E8C19C6-B167-440C-8BEF-3CBF109CDB49}.Debug|Win32.ActiveCfg = Debug|Win32 {5E8C19C6-B167-440C-8BEF-3CBF109CDB49}.Debug|Win32.Build.0 = Debug|Win32 + {5E8C19C6-B167-440C-8BEF-3CBF109CDB49}.Debug|x64.ActiveCfg = Debug|x64 + {5E8C19C6-B167-440C-8BEF-3CBF109CDB49}.Debug|x64.Build.0 = Debug|x64 {5E8C19C6-B167-440C-8BEF-3CBF109CDB49}.Release|Win32.ActiveCfg = Release|Win32 {5E8C19C6-B167-440C-8BEF-3CBF109CDB49}.Release|Win32.Build.0 = Release|Win32 + {5E8C19C6-B167-440C-8BEF-3CBF109CDB49}.Release|x64.ActiveCfg = Release|x64 + {5E8C19C6-B167-440C-8BEF-3CBF109CDB49}.Release|x64.Build.0 = Release|x64 {26C749A0-814C-47A2-9D36-AE92AE932FE4}.Debug|Win32.ActiveCfg = Debug|Win32 {26C749A0-814C-47A2-9D36-AE92AE932FE4}.Debug|Win32.Build.0 = Debug|Win32 + {26C749A0-814C-47A2-9D36-AE92AE932FE4}.Debug|x64.ActiveCfg = Debug|x64 + {26C749A0-814C-47A2-9D36-AE92AE932FE4}.Debug|x64.Build.0 = Debug|x64 {26C749A0-814C-47A2-9D36-AE92AE932FE4}.Release|Win32.ActiveCfg = Release|Win32 {26C749A0-814C-47A2-9D36-AE92AE932FE4}.Release|Win32.Build.0 = Release|Win32 + {26C749A0-814C-47A2-9D36-AE92AE932FE4}.Release|x64.ActiveCfg = Release|x64 + {26C749A0-814C-47A2-9D36-AE92AE932FE4}.Release|x64.Build.0 = Release|x64 {F657912F-050A-488B-B203-50ED5715CDD7}.Debug|Win32.ActiveCfg = Debug|Win32 {F657912F-050A-488B-B203-50ED5715CDD7}.Debug|Win32.Build.0 = Debug|Win32 + {F657912F-050A-488B-B203-50ED5715CDD7}.Debug|x64.ActiveCfg = Debug|x64 + {F657912F-050A-488B-B203-50ED5715CDD7}.Debug|x64.Build.0 = Debug|x64 {F657912F-050A-488B-B203-50ED5715CDD7}.Release|Win32.ActiveCfg = Release|Win32 {F657912F-050A-488B-B203-50ED5715CDD7}.Release|Win32.Build.0 = Release|Win32 + {F657912F-050A-488B-B203-50ED5715CDD7}.Release|x64.ActiveCfg = Release|x64 + {F657912F-050A-488B-B203-50ED5715CDD7}.Release|x64.Build.0 = Release|x64 {0BCFB793-2B25-40E2-B265-75848824AC4C}.Debug|Win32.ActiveCfg = Debug|Win32 {0BCFB793-2B25-40E2-B265-75848824AC4C}.Debug|Win32.Build.0 = Debug|Win32 + {0BCFB793-2B25-40E2-B265-75848824AC4C}.Debug|x64.ActiveCfg = Debug|x64 + {0BCFB793-2B25-40E2-B265-75848824AC4C}.Debug|x64.Build.0 = Debug|x64 {0BCFB793-2B25-40E2-B265-75848824AC4C}.Release|Win32.ActiveCfg = Release|Win32 {0BCFB793-2B25-40E2-B265-75848824AC4C}.Release|Win32.Build.0 = Release|Win32 + {0BCFB793-2B25-40E2-B265-75848824AC4C}.Release|x64.ActiveCfg = Release|x64 + {0BCFB793-2B25-40E2-B265-75848824AC4C}.Release|x64.Build.0 = Release|x64 {F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}.Debug|Win32.ActiveCfg = Debug|Win32 {F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}.Debug|Win32.Build.0 = Debug|Win32 + {F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}.Debug|x64.ActiveCfg = Debug|x64 + {F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}.Debug|x64.Build.0 = Debug|x64 {F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}.Release|Win32.ActiveCfg = Release|Win32 {F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}.Release|Win32.Build.0 = Release|Win32 + {F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}.Release|x64.ActiveCfg = Release|x64 + {F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}.Release|x64.Build.0 = Release|x64 {E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}.Debug|Win32.ActiveCfg = Debug|Win32 {E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}.Debug|Win32.Build.0 = Debug|Win32 + {E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}.Debug|x64.ActiveCfg = Debug|x64 + {E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}.Debug|x64.Build.0 = Debug|x64 {E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}.Release|Win32.ActiveCfg = Release|Win32 {E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}.Release|Win32.Build.0 = Release|Win32 + {E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}.Release|x64.ActiveCfg = Release|x64 + {E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}.Release|x64.Build.0 = Release|x64 {FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}.Debug|Win32.ActiveCfg = Debug|Win32 {FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}.Debug|Win32.Build.0 = Debug|Win32 + {FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}.Debug|x64.ActiveCfg = Debug|x64 + {FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}.Debug|x64.Build.0 = Debug|x64 {FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}.Release|Win32.ActiveCfg = Release|Win32 {FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}.Release|Win32.Build.0 = Release|Win32 + {FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}.Release|x64.ActiveCfg = Release|x64 + {FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}.Release|x64.Build.0 = Release|x64 {4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}.Debug|Win32.ActiveCfg = Debug|Win32 {4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}.Debug|Win32.Build.0 = Debug|Win32 + {4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}.Debug|x64.ActiveCfg = Debug|x64 + {4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}.Debug|x64.Build.0 = Debug|x64 {4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}.Release|Win32.ActiveCfg = Release|Win32 {4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}.Release|Win32.Build.0 = Release|Win32 + {4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}.Release|x64.ActiveCfg = Release|x64 + {4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}.Release|x64.Build.0 = Release|x64 {002A366E-2863-46A8-BDDE-DDF534AAEC73}.Debug|Win32.ActiveCfg = Debug|Win32 {002A366E-2863-46A8-BDDE-DDF534AAEC73}.Debug|Win32.Build.0 = Debug|Win32 + {002A366E-2863-46A8-BDDE-DDF534AAEC73}.Debug|x64.ActiveCfg = Debug|x64 + {002A366E-2863-46A8-BDDE-DDF534AAEC73}.Debug|x64.Build.0 = Debug|x64 {002A366E-2863-46A8-BDDE-DDF534AAEC73}.Release|Win32.ActiveCfg = Release|Win32 {002A366E-2863-46A8-BDDE-DDF534AAEC73}.Release|Win32.Build.0 = Release|Win32 + {002A366E-2863-46A8-BDDE-DDF534AAEC73}.Release|x64.ActiveCfg = Release|x64 + {002A366E-2863-46A8-BDDE-DDF534AAEC73}.Release|x64.Build.0 = Release|x64 {1C7A3FEF-DD0B-4B10-BC33-C3BE29BF67CC}.Debug|Win32.ActiveCfg = Debug|Win32 {1C7A3FEF-DD0B-4B10-BC33-C3BE29BF67CC}.Debug|Win32.Build.0 = Debug|Win32 + {1C7A3FEF-DD0B-4B10-BC33-C3BE29BF67CC}.Debug|x64.ActiveCfg = Debug|x64 + {1C7A3FEF-DD0B-4B10-BC33-C3BE29BF67CC}.Debug|x64.Build.0 = Debug|x64 {1C7A3FEF-DD0B-4B10-BC33-C3BE29BF67CC}.Release|Win32.ActiveCfg = Release|Win32 {1C7A3FEF-DD0B-4B10-BC33-C3BE29BF67CC}.Release|Win32.Build.0 = Release|Win32 + {1C7A3FEF-DD0B-4B10-BC33-C3BE29BF67CC}.Release|x64.ActiveCfg = Release|x64 + {1C7A3FEF-DD0B-4B10-BC33-C3BE29BF67CC}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/cc65.vcxproj b/src/cc65.vcxproj index 9c1719538..75ee92276 100644 --- a/src/cc65.vcxproj +++ b/src/cc65.vcxproj @@ -5,10 +5,18 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{B17EDBD5-DC04-4970-9CBD-56A98B6A3FCA}</ProjectGuid> @@ -21,15 +29,22 @@ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <UseDebugLibraries>true</UseDebugLibraries> + </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <UseDebugLibraries>false</UseDebugLibraries> + </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -40,6 +55,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> @@ -48,6 +72,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClInclude Include="cc65\anonname.h" /> <ClInclude Include="cc65\asmcode.h" /> @@ -216,4 +249,4 @@ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> -</Project> +</Project> \ No newline at end of file diff --git a/src/chrcvt65.vcxproj b/src/chrcvt65.vcxproj index 1e5c753b5..d44380c4e 100644 --- a/src/chrcvt65.vcxproj +++ b/src/chrcvt65.vcxproj @@ -5,10 +5,18 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{1C7A3FEF-DD0B-4B10-BC33-C3BE29BF67CC}</ProjectGuid> @@ -21,15 +29,22 @@ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <UseDebugLibraries>true</UseDebugLibraries> + </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <UseDebugLibraries>false</UseDebugLibraries> + </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -40,6 +55,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> @@ -48,6 +72,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="chrcvt65\error.c" /> <ClCompile Include="chrcvt65\main.c" /> diff --git a/src/cl65.vcxproj b/src/cl65.vcxproj index 67b7eb087..688926557 100644 --- a/src/cl65.vcxproj +++ b/src/cl65.vcxproj @@ -5,10 +5,18 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{F657912F-050A-488B-B203-50ED5715CDD7}</ProjectGuid> @@ -21,15 +29,22 @@ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <UseDebugLibraries>true</UseDebugLibraries> + </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <UseDebugLibraries>false</UseDebugLibraries> + </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -40,6 +55,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> @@ -48,6 +72,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="cl65\error.c" /> <ClCompile Include="cl65\global.c" /> diff --git a/src/cl65/main.c b/src/cl65/main.c index 553fb9ca6..0148ad1e3 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -1610,7 +1610,7 @@ int main (int argc, char* argv []) } /* Determine the file type by the extension */ - switch (GetFileType (Arg)) { + switch (GetTypeOfFile (Arg)) { case FILETYPE_C: /* Compile the file */ diff --git a/src/co65.vcxproj b/src/co65.vcxproj index 9f5959d89..fa6a1e315 100644 --- a/src/co65.vcxproj +++ b/src/co65.vcxproj @@ -5,10 +5,18 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{F5DB5D1A-05BC-48FE-B346-4E96DD522AA2}</ProjectGuid> @@ -21,15 +29,22 @@ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <UseDebugLibraries>true</UseDebugLibraries> + </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <UseDebugLibraries>false</UseDebugLibraries> + </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -40,6 +55,14 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> @@ -48,6 +71,14 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="co65\convert.c" /> <ClCompile Include="co65\error.c" /> diff --git a/src/common.vcxproj b/src/common.vcxproj index df99fc4a9..6098c98a0 100644 --- a/src/common.vcxproj +++ b/src/common.vcxproj @@ -5,10 +5,18 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{71DC1F68-BFC4-478C-8655-C8E9C9654D2B}</ProjectGuid> @@ -22,16 +30,25 @@ <ConfigurationType>StaticLibrary</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <ConfigurationType>StaticLibrary</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -39,11 +56,23 @@ <PreprocessorDefinitions>_LIB;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PreprocessorDefinitions>_LIB;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <PreprocessorDefinitions>_LIB;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> </ClCompile> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PreprocessorDefinitions>_LIB;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + </ItemDefinitionGroup> <ItemGroup> <ClInclude Include="common\abend.h" /> <ClInclude Include="common\addrsize.h" /> diff --git a/src/common/filetype.c b/src/common/filetype.c index a5bac640d..ae8b636dc 100644 --- a/src/common/filetype.c +++ b/src/common/filetype.c @@ -92,8 +92,7 @@ static const FileId TypeTable[] = { /*****************************************************************************/ - -FILETYPE GetFileType (const char* Name) +FILETYPE GetTypeOfFile (const char* Name) /* Determine the type of the given file by looking at the name. If the file ** type could not be determined, the function returns FILETYPE_UNKOWN. */ diff --git a/src/common/filetype.h b/src/common/filetype.h index f4beae73a..0738078ba 100644 --- a/src/common/filetype.h +++ b/src/common/filetype.h @@ -63,7 +63,7 @@ typedef enum { -FILETYPE GetFileType (const char* Name); +FILETYPE GetTypeOfFile (const char* Name); /* Determine the type of the given file by looking at the name. If the file ** type could not be determined, the function returns FILETYPE_UNKOWN. */ diff --git a/src/da65.vcxproj b/src/da65.vcxproj index a40daf1d6..9d2b0ded6 100644 --- a/src/da65.vcxproj +++ b/src/da65.vcxproj @@ -5,10 +5,18 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{0BCFB793-2B25-40E2-B265-75848824AC4C}</ProjectGuid> @@ -21,15 +29,22 @@ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <UseDebugLibraries>true</UseDebugLibraries> + </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <UseDebugLibraries>false</UseDebugLibraries> + </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -40,6 +55,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> @@ -48,6 +72,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="da65\asminc.c" /> <ClCompile Include="da65\attrtab.c" /> diff --git a/src/grc65.vcxproj b/src/grc65.vcxproj index fbd44fa3e..742003899 100644 --- a/src/grc65.vcxproj +++ b/src/grc65.vcxproj @@ -5,10 +5,18 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{E0FD0AB3-3BEE-496F-8108-A8E0F8933F39}</ProjectGuid> @@ -21,15 +29,22 @@ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <UseDebugLibraries>true</UseDebugLibraries> + </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <UseDebugLibraries>false</UseDebugLibraries> + </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -40,6 +55,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> @@ -48,6 +72,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="grc65\main.c" /> </ItemGroup> diff --git a/src/ld65.vcxproj b/src/ld65.vcxproj index 9e4b08621..e2f06b198 100644 --- a/src/ld65.vcxproj +++ b/src/ld65.vcxproj @@ -5,10 +5,18 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{26C749A0-814C-47A2-9D36-AE92AE932FE4}</ProjectGuid> @@ -21,15 +29,22 @@ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <UseDebugLibraries>true</UseDebugLibraries> + </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <UseDebugLibraries>false</UseDebugLibraries> + </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -38,6 +53,19 @@ </ClCompile> <Link> <SubSystem>Console</SubSystem> + <MapFileName>ld65.map</MapFileName> + <MapExports>true</MapExports> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + <MapFileName>ld65.map</MapFileName> + <MapExports>true</MapExports> </Link> </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> @@ -48,6 +76,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClInclude Include="ld65\asserts.h" /> <ClInclude Include="ld65\bin.h" /> @@ -118,4 +155,4 @@ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> -</Project> +</Project> \ No newline at end of file diff --git a/src/ld65/main.c b/src/ld65/main.c index 70e9c84d1..5632f4961 100644 --- a/src/ld65/main.c +++ b/src/ld65/main.c @@ -189,7 +189,7 @@ static void LinkFile (const char* Name, FILETYPE Type) /* If we don't know the file type, determine it from the extension */ if (Type == FILETYPE_UNKNOWN) { - Type = GetFileType (Name); + Type = GetTypeOfFile (Name); } /* For known file types, search the file in the directory list */ diff --git a/src/od65.vcxproj b/src/od65.vcxproj index 1a1527067..409b5038e 100644 --- a/src/od65.vcxproj +++ b/src/od65.vcxproj @@ -5,10 +5,18 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{FF8576C2-1253-44FE-A51B-D9AE35F3CEAD}</ProjectGuid> @@ -21,15 +29,22 @@ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <UseDebugLibraries>true</UseDebugLibraries> + </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <UseDebugLibraries>false</UseDebugLibraries> + </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -40,6 +55,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> @@ -48,6 +72,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="od65\dump.c" /> <ClCompile Include="od65\error.c" /> diff --git a/src/sim65.vcxproj b/src/sim65.vcxproj index 97fc3855a..7bc489398 100644 --- a/src/sim65.vcxproj +++ b/src/sim65.vcxproj @@ -5,10 +5,18 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{002A366E-2863-46A8-BDDE-DDF534AAEC73}</ProjectGuid> @@ -21,15 +29,22 @@ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <UseDebugLibraries>true</UseDebugLibraries> + </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <UseDebugLibraries>false</UseDebugLibraries> + </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -40,6 +55,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> @@ -48,6 +72,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClInclude Include="sim65\6502.h" /> <ClInclude Include="sim65\error.h" /> diff --git a/src/sp65.vcxproj b/src/sp65.vcxproj index a9f0919a3..21816ee2b 100644 --- a/src/sp65.vcxproj +++ b/src/sp65.vcxproj @@ -5,10 +5,18 @@ <Configuration>Debug</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> <ProjectConfiguration Include="Release|Win32"> <Configuration>Release</Configuration> <Platform>Win32</Platform> </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> <ProjectGuid>{4388D1AF-C7EA-4AD4-8E80-CA1FB7BF76BF}</ProjectGuid> @@ -21,15 +29,22 @@ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <UseDebugLibraries>true</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <UseDebugLibraries>true</UseDebugLibraries> + </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <UseDebugLibraries>false</UseDebugLibraries> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <UseDebugLibraries>false</UseDebugLibraries> + </PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings"> </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> </PropertyGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> @@ -40,6 +55,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile> <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> @@ -48,6 +72,15 @@ <SubSystem>Console</SubSystem> </Link> </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <PreprocessorDefinitions>_CONSOLE;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <DisableSpecificWarnings>4244;4267;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <SubSystem>Console</SubSystem> + </Link> + </ItemDefinitionGroup> <ItemGroup> <ClCompile Include="sp65\asm.c" /> <ClCompile Include="sp65\attr.c" /> @@ -99,4 +132,4 @@ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> -</Project> +</Project> \ No newline at end of file From 269786a5aeefc7171dfd22662a26513443b98817 Mon Sep 17 00:00:00 2001 From: paul moore <paulmoore100@hotmail.com> Date: Thu, 14 Dec 2023 14:38:24 -0800 Subject: [PATCH 2309/2710] fix msbuild syntax --- .github/workflows/build-on-pull-request.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 55ee3df2d..f1dd58ee5 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -68,15 +68,15 @@ jobs: uses: microsoft/setup-msbuild@v1.1 - name: Build app (x86 debug) - run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug Platform=Win32 + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug -Platform=Win32 - name: Build app (x86 release) - run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release Platform=Win32 + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -Platform=Win32 - name: Build app (x64 release) - run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug Platform=x64 + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug -Platform=x64 - name: Build app (x64 release) - run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release Platform=x64 + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -Platform=x64 From 103d4b82c5889ae3acf34c6b281f3f9879d853d4 Mon Sep 17 00:00:00 2001 From: paul moore <paulmoore100@hotmail.com> Date: Thu, 14 Dec 2023 14:43:58 -0800 Subject: [PATCH 2310/2710] more msbuild syntax fixes --- .github/workflows/build-on-pull-request.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index f1dd58ee5..045bc048d 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -68,15 +68,15 @@ jobs: uses: microsoft/setup-msbuild@v1.1 - name: Build app (x86 debug) - run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug -Platform=Win32 + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug -property:Platform=Win32 - name: Build app (x86 release) - run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -Platform=Win32 + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -property:Platform=Win32 - name: Build app (x64 release) - run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug -Platform=x64 + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug -property:Platform=x64 - name: Build app (x64 release) - run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -Platform=x64 + run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -property:Platform=x64 From 0d74b84ce4c484f0ef4a23326c4327d05ac4358a Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 16 Dec 2023 19:18:25 -0500 Subject: [PATCH 2311/2710] Test of .struct and .union features. Update documentation with more examples, better clarity, and fixes to incorrect data. --- doc/ca65.sgml | 76 ++++++++++++--- test/asm/val/struct.s | 222 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 286 insertions(+), 12 deletions(-) create mode 100644 test/asm/val/struct.s diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 104c59bbd..e54b308d4 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -4086,8 +4086,10 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE" <sect1><tt>.TAG</tt><label id=".TAG"><p> - Allocate space for a struct or union. - + Allocate space for a struct or union. This is equivalent to + <tt><ref id=".RES" name=".RES"></tt> with the + <tt><ref id=".SIZEOF" name=".SIZEOF"></tt> of a struct. + Example: <tscreen><verb> @@ -4100,6 +4102,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE" .tag Point ; Allocate 4 bytes </verb></tscreen> + See: <ref id="structs" name=""Structs and unions""> <sect1><tt>.UNDEF, .UNDEFINE</tt><label id=".UNDEFINE"><p> @@ -4865,10 +4868,15 @@ compiler, depending on the target system selected: Structs and unions are special forms of <ref id="scopes" name="scopes">. They are, to some degree, comparable to their C counterparts. Both have a list of -members. Each member allocates storage, and optionally may have a name whose -value, in the case of a struct, usually is the storage offset from the -beginning, and in the case of a union, doesn't change, and usually is zero. +members. Each member allocates storage, and optionally may have a name. +Each named member has a constant value equal to the storage offset from the +beginning of the structure. In the case of a union, all members are placed at +the same offset, typically 0. + +Each named member also has a storage size which can be accessed with the +<ref id=".SIZEOF" name=".SIZEOF"></tt> operator. The struct or union itself also +has a <tt/.SIZEOF/ indicating its total storage size. <sect1>Declaration<p> @@ -4895,8 +4903,9 @@ A struct or union may not necessarily have a name. If it is anonymous, no local scope is opened; the identifiers used to name the members are placed into the current scope instead. -A struct may contain unnamed members and definitions of local structs/unions. -The storage allocators may contain a multiplier, as in the example below: +Storage allocators may contain a multiplier. A struct may also contain members +and definitions of local structs/unions. Example: + <tscreen><verb> .struct Circle .struct Point @@ -4905,7 +4914,8 @@ The storage allocators may contain a multiplier, as in the example below: Radius .word .endstruct </verb></tscreen> -The size of the Circle struct is 6 (three words). + +In this example the size of the Circle struct is 6 (three words). <sect1>The storage allocator keywords<p> @@ -4915,7 +4925,7 @@ The size of the Circle struct is 6 (three words). <tag/.BYTE, .RES/ Allocates multiples of 1 byte. <tt/.RES/ requires an operand. - <tag/.DBYTE, .WORD, .ADDR/ + <tag/.DBYT, .WORD, .ADDR/ Allocates multiples of 2 bytes. <tag/.FARADDR/ @@ -4924,6 +4934,15 @@ The size of the Circle struct is 6 (three words). <tag/.DWORD/ Allocates multiples of 4 bytes. + <tag/.TAG/ + Allocates a previously defined struct. + + <tag/.STRUCT, .UNION/ + Begins a nested .struct or .union definition, and allocates it. + Note that its member offset values will begin at 0, unless this nested + structure is anonymous, in which case they will instead become members of + the enclosing scope. + </descrip> @@ -4968,13 +4987,46 @@ name=".TAG"> directive. C: .tag Circle </verb></tscreen> -Currently, members are just offsets from the start of the struct or union. To +Members are just offsets from the start of the struct or union. To access a field of a struct, the member offset must be added to the address of the struct variable itself: <tscreen><verb> - lda C+Circle::Radius ; Load circle radius into A + lda C + Circle::Radius ; Load circle radius + lda C + Circle::Origin + Point::ycoord ; Load circle origin.ycoord </verb></tscreen> -That may change in a future version of the assembler. + +Nested structures or unions are treated differently depending on whether they +are anonymous. If named, a new structure definition is created within the +enclosing scope, with its offsets beginning at 0. If anonymous, the members of +the new structure are added to the enclosing scope instead. Example: + +<tscreen><verb> + .struct Object + member .byte ; Object::member = 0 + named .struct Point ; Object::named = 1 + xcoord .word ; Object::Point::xcoord = 0 + ycoord .word ; Object::Point::ycoord = 2 + .endstruct + unnamed .struct ; Object::unnamed = 5 + un1 .word ; Object::un1 = 5 + un2 .word ; Object::un2 = 7 + .endstruct + .struct + un3 .word ; Object::un3 = 9 + .endstruct + .endstruct + + lda O + Object::named + Object::Point::ycoord + lda O + Object::un2 +</verb></tscreen> + +In this example, the first nested structure is named "Point", and its member +offsets begin at 0. On the other hand, the two anonymous structures simply +continue to add members to the enclosing Object structure. + +Note that an anonymous structure does not need a member name, since all of its +members become part of the enclosing structure. The "unnamed" member in the +example is redundantly the same offset as its first member "un1. <sect1>Limitations<p> diff --git a/test/asm/val/struct.s b/test/asm/val/struct.s new file mode 100644 index 000000000..b2bf08ea0 --- /dev/null +++ b/test/asm/val/struct.s @@ -0,0 +1,222 @@ +; test .struct feature + +.code + +; exit with 0 +.export _main +_main: + lda #0 + tax + rts + +; test storage allocator sizes and offsets + +.struct Storage + mb1 .byte + mb5 .byte 5 + mr1 .res 1 + mr5 .res 5 + mdb1 .dbyt + mdb5 .dbyt 5 + mw1 .word + mw5 .word 5 + ma1 .addr + ma5 .addr 5 + mf1 .faraddr + mf5 .faraddr 5 + mdw1 .dword + mdw5 .dword 5 +.endstruct + +.assert .sizeof(Storage::mb1) = 1, error, ".struct .byte member has unexpected .sizeof" +.assert .sizeof(Storage::mb5) = 5, error, ".struct .byte 5 member has unexpected .sizeof" +.assert .sizeof(Storage::mr1) = 1, error, ".struct .res 1 member has unexpected .sizeof" +.assert .sizeof(Storage::mr5) = 5, error, ".struct .res 5 member has unexpected .sizeof" +.assert .sizeof(Storage::mdb1) = 2, error, ".struct .dbyt member has unexpected .sizeof" +.assert .sizeof(Storage::mdb5) = 10, error, ".struct .dbyt 5 member has unexpected .sizeof" +.assert .sizeof(Storage::mw1) = 2, error, ".struct .word member has unexpected .sizeof" +.assert .sizeof(Storage::mw5) = 10, error, ".struct .word 5 member has unexpected .sizeof" +.assert .sizeof(Storage::ma1) = 2, error, ".struct .addr member has unexpected .sizeof" +.assert .sizeof(Storage::ma5) = 10, error, ".struct .addr 5 member has unexpected .sizeof" +.assert .sizeof(Storage::mf1) = 3, error, ".struct .faraddr member has unexpected .sizeof" +.assert .sizeof(Storage::mf5) = 15, error, ".struct .faraddr 5 member has unexpected .sizeof" +.assert .sizeof(Storage::mdw1) = 4, error, ".struct .dword member has unexpected .sizeof" +.assert .sizeof(Storage::mdw5) = 20, error, ".struct .dword 5 member has unexpected .sizeof" + +.assert Storage::mb1 = 0, error, ".struct storage offset is incorrect" +.assert Storage::mb5 = Storage::mb1 + .sizeof(Storage::mb1), error, ".struct storage offset is incorrect" +.assert Storage::mr1 = Storage::mb5 + .sizeof(Storage::mb5), error, ".struct storage offset is incorrect" +.assert Storage::mr5 = Storage::mr1 + .sizeof(Storage::mr1), error, ".struct storage offset is incorrect" +.assert Storage::mdb1 = Storage::mr5 + .sizeof(Storage::mr5), error, ".struct storage offset is incorrect" +.assert Storage::mdb5 = Storage::mdb1 + .sizeof(Storage::mdb1), error, ".struct storage offset is incorrect" +.assert Storage::mw1 = Storage::mdb5 + .sizeof(Storage::mdb5), error, ".struct storage offset is incorrect" +.assert Storage::mw5 = Storage::mw1 + .sizeof(Storage::mw1), error, ".struct storage offset is incorrect" +.assert Storage::ma1 = Storage::mw5 + .sizeof(Storage::mw5), error, ".struct storage offset is incorrect" +.assert Storage::ma5 = Storage::ma1 + .sizeof(Storage::ma1), error, ".struct storage offset is incorrect" +.assert Storage::mf1 = Storage::ma5 + .sizeof(Storage::ma5), error, ".struct storage offset is incorrect" +.assert Storage::mf5 = Storage::mf1 + .sizeof(Storage::mf1), error, ".struct storage offset is incorrect" +.assert Storage::mdw1 = Storage::mf5 + .sizeof(Storage::mf5), error, ".struct storage offset is incorrect" +.assert Storage::mdw5 = Storage::mdw1 + .sizeof(Storage::mdw1), error, ".struct storage offset is incorrect" +.assert .sizeof(Storage) = Storage::mdw5 + .sizeof(Storage::mdw5), error, ".struct has unexpected .sizeof" + +; test union offset and size + +.union UStorage + mb1 .byte + mb5 .byte 5 + mr1 .res 1 + mr5 .res 5 + mdb1 .dbyt + mdb5 .dbyt 5 + mw1 .word + mw5 .word 5 + ma1 .addr + ma5 .addr 5 + mf1 .faraddr + mf5 .faraddr 5 + mdw1 .dword + mdw5 .dword 5 +.endunion + +.assert .sizeof(UStorage::mb1) = 1, error, ".union .byte member has unexpected .sizeof" +.assert .sizeof(UStorage::mb5) = 5, error, ".union .byte 5 member has unexpected .sizeof" +.assert .sizeof(UStorage::mr1) = 1, error, ".union .res 1 member has unexpected .sizeof" +.assert .sizeof(UStorage::mr5) = 5, error, ".union .res 5 member has unexpected .sizeof" +.assert .sizeof(UStorage::mdb1) = 2, error, ".union .dbyt member has unexpected .sizeof" +.assert .sizeof(UStorage::mdb5) = 10, error, ".union .dbyt 5 member has unexpected .sizeof" +.assert .sizeof(UStorage::mw1) = 2, error, ".union .word member has unexpected .sizeof" +.assert .sizeof(UStorage::mw5) = 10, error, ".union .word 5 member has unexpected .sizeof" +.assert .sizeof(UStorage::ma1) = 2, error, ".union .addr member has unexpected .sizeof" +.assert .sizeof(UStorage::ma5) = 10, error, ".union .addr 5 member has unexpected .sizeof" +.assert .sizeof(UStorage::mf1) = 3, error, ".union .faraddr member has unexpected .sizeof" +.assert .sizeof(UStorage::mf5) = 15, error, ".union .faraddr 5 member has unexpected .sizeof" +.assert .sizeof(UStorage::mdw1) = 4, error, ".union .dword member has unexpected .sizeof" +.assert .sizeof(UStorage::mdw5) = 20, error, ".union .dword 5 member has unexpected .sizeof" +.assert .sizeof(UStorage) = 20, error, ".union has unexpected .sizeof" + +.assert UStorage::mb1 = 0, error, ".union storage offset is incorrect" +.assert UStorage::mb5 = 0, error, ".union storage offset is incorrect" +.assert UStorage::mr1 = 0, error, ".union storage offset is incorrect" +.assert UStorage::mr5 = 0, error, ".union storage offset is incorrect" +.assert UStorage::mdb1 = 0, error, ".union storage offset is incorrect" +.assert UStorage::mdb5 = 0, error, ".union storage offset is incorrect" +.assert UStorage::mw1 = 0, error, ".union storage offset is incorrect" +.assert UStorage::mw5 = 0, error, ".union storage offset is incorrect" +.assert UStorage::ma1 = 0, error, ".union storage offset is incorrect" +.assert UStorage::ma5 = 0, error, ".union storage offset is incorrect" +.assert UStorage::mf1 = 0, error, ".union storage offset is incorrect" +.assert UStorage::mf5 = 0, error, ".union storage offset is incorrect" +.assert UStorage::mdw1 = 0, error, ".union storage offset is incorrect" +.assert UStorage::mdw5 = 0, error, ".union storage offset is incorrect" + +; test tag + +storage: .tag Storage +.assert (*-storage)=.sizeof(Storage), error, ".tag reserved size incorrect" + +; test nested structures + +.struct Point + xc .word + yc .word +.endstruct + +.struct Nested + pad .res 13 + tag .tag Point + ch .struct Child + ca .word ; offset = 0 + gch .struct Grandchild + gca .word ; offset = 0 + gcb .byte + .endstruct + cb .byte + .endstruct + anon .struct + aa .dword ; offset = Nested::anon (anonymous .struct) + ab .dword + .endstruct + chu .union Chunion + ua .byte ; offset = 0 + ub .dword + .endunion + chanon .union + uc .byte ; offset = Nested::chanon + ud .dword + .endunion + last .byte +.endstruct + +.assert Nested::pad = 0, error, "Nested .struct has unexpected starting offset" +.assert Nested::Child::ca = 0, error, "Nested .struct has unexpected starting offset" +.assert Nested::Child::Grandchild::gca = 0, error, "Nested .struct has unexpected starting offset" + +.assert .sizeof(Nested::tag) = .sizeof(Point), error, ".tag in .struct has unexpected .sizeof" +.assert .sizeof(Nested::Child::Grandchild) = 2 + 1, error, "Nested .struct has unexpected .sizeof" +.assert .sizeof(Nested::Child) = 2 + 1 + .sizeof(Nested::Child::Grandchild), error, "Nested .struct has unpexpected .sizeof" +.assert .sizeof(Nested::ch) = .sizeof(Nested::Child), error, "Nested .struct has unexpected member .sizeof" +.assert .sizeof(Nested::Child::gch) = .sizeof(Nested::Child::Grandchild), error, "Nested .struct has unexpected member .sizeof" +.assert .sizeof(Nested::anon) = 8, error, "Nested anonymous member .struct has unexpected .sizeof" +.assert .sizeof(Nested::aa) = 4, error, "Nested anonymous .struct member has unexpected .sizeof" +.assert .sizeof(Nested::ab) = 4, error, "Nested anonymous .struct member has unexpected .sizeof" +.assert .sizeof(Nested::Chunion) = 4, error, "Nested .union has unexpected .sizeof" +.assert .sizeof(Nested::chu) = .sizeof(Nested::Chunion), error, "Nested member .union has unexpected .sizeof" +.assert .sizeof(Nested::chanon) = 4, error, "Nested anonymous member .union as unexpected .sizeof" + +.assert Nested::tag = Nested::pad + .sizeof(Nested::pad), error, ".tag within .struct has unexpected offset" +.assert Nested::ch = Nested::tag + .sizeof(Nested::tag), error, "Nested .struct has unexpected offset" +.assert Nested::anon = Nested::ch + .sizeof(Nested::ch), error, "Nested anonymous member .struct has unexpected offset" +.assert Nested::aa = Nested::anon, error, "Nested anonymous .struct member has unexpected offset" +.assert Nested::ab = Nested::aa + .sizeof(Nested::aa), error, "Nested anonymous .struct member has unexpected offset" +.assert Nested::chu = Nested::ab + .sizeof(Nested::ab), error, "Nested member .union has unexpected offset" +.assert Nested::chanon = Nested::chu + .sizeof(Nested::Chunion), error, "Nested anonymous member .union has unexpected offset" +.assert Nested::uc = Nested::chanon, error, "Nested anonymous .union member has unexpected offset" +.assert Nested::ud = Nested::chanon, error, "Nested anonymous .union member has unexpected offset" +.assert Nested::last = Nested::ud + .sizeof(Nested::ud), error, ".struct member has unexpected offset after anonymous nested .struct" + +; test .org + +start: + +.struct OrgStruct + ma .byte + mb .byte + .org $1234 + mc .byte + md .byte + .struct Nested + me .byte + .org $5678 + mf .byte + mg .byte + .endstruct + mh .byte +.endstruct + +.assert start <> (OrgStruct::mh+1), error, "Fatal test error: accidental code position conflict, move OrgStruct .org to another arbitrary address." +.assert * = start, error, ".org within .struct does not return to previous location at .endstruct" +.assert OrgStruct::ma = 0, error, ".struct with .org has unexpected offset" +.assert OrgStruct::mb = 1, error, ".struct with .org has unexpected offset" +.assert OrgStruct::mc = $1234, error, ".struct with .org has unexpected offset" +.assert OrgStruct::md = $1235, error, ".struct with .org has unexpected offset" +.assert OrgStruct::Nested::me = 0, error, "Nested .struct with .org has unexpected offset" +.assert OrgStruct::Nested::mf = $5678, error, "Nested .struct with .org has unexpected offset" +.assert OrgStruct::Nested::mg = $5679, error, "Nested .struct with .org has unexpected offset" +.assert OrgStruct::mh = $1239, error, ".struct with .org has unexpected offset" +.assert .sizeof(OrgStruct) = 8, error, ".struct with .org has unexpected .sizeof" + +.union OrgUnion + ma .byte + mb .word + .org $1234 + mc .byte + md .word +.endunion + +.assert start <> OrgUnion::md, error, "Fatal test error: accidental code position conflict, move OrgUnion .org to another arbitrary address." +.assert * = start, error, ".org within .union does not return to previous location at .endunion" +.assert OrgUnion::ma = 0, error, ".union with .org has unexpected offset" +.assert OrgUnion::mb = 0, error, ".union with .org has unexpected offset" +.assert OrgUnion::mc = $1234, error, ".union with .org has unexpected offset" +.assert OrgUnion::md = $1234, error, ".union with .org has unexpected offset" +.assert .sizeof(OrgUnion) = 2, error, ".union with .org has unexpected .sizeof" From 6cb8717c24d415448f451edbe3f949e9188fe1c1 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 16 Dec 2023 19:25:21 -0500 Subject: [PATCH 2312/2710] fix dangling space, mention .union in test comment --- doc/ca65.sgml | 2 +- test/asm/val/struct.s | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index e54b308d4..dde782a57 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -4089,7 +4089,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE" Allocate space for a struct or union. This is equivalent to <tt><ref id=".RES" name=".RES"></tt> with the <tt><ref id=".SIZEOF" name=".SIZEOF"></tt> of a struct. - + Example: <tscreen><verb> diff --git a/test/asm/val/struct.s b/test/asm/val/struct.s index b2bf08ea0..b6ef6f45d 100644 --- a/test/asm/val/struct.s +++ b/test/asm/val/struct.s @@ -1,4 +1,4 @@ -; test .struct feature +; test .struct and .union features .code From f6838be1621f4ef57c1224209c50e41ee0bcfe4d Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 16 Dec 2023 19:32:52 -0500 Subject: [PATCH 2313/2710] missing <tt> --- doc/ca65.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index dde782a57..9be63d035 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -4875,8 +4875,8 @@ beginning of the structure. In the case of a union, all members are placed at the same offset, typically 0. Each named member also has a storage size which can be accessed with the -<ref id=".SIZEOF" name=".SIZEOF"></tt> operator. The struct or union itself also -has a <tt/.SIZEOF/ indicating its total storage size. +<tt><ref id=".SIZEOF" name=".SIZEOF"></tt> operator. The struct or union itself +also has a <tt/.SIZEOF/ indicating its total storage size. <sect1>Declaration<p> From 0ff1b20f2a2420bbff8e162c54e52fa24561de3e Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sat, 16 Dec 2023 19:52:57 -0500 Subject: [PATCH 2314/2710] nested struct example needs a .tag --- doc/ca65.sgml | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 9be63d035..3d4899366 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -5016,6 +5016,7 @@ the new structure are added to the enclosing scope instead. Example: .endstruct .endstruct +O: .tag Object lda O + Object::named + Object::Point::ycoord lda O + Object::un2 </verb></tscreen> From 302c4f7409b898ea5c1d63009b883e5887c2ea78 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sun, 17 Dec 2023 05:01:06 -0500 Subject: [PATCH 2315/2710] clarify offsets of anonymous nested scope, missing quotes for names --- doc/ca65.sgml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 3d4899366..3120d9dd4 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -4998,7 +4998,8 @@ the struct variable itself: Nested structures or unions are treated differently depending on whether they are anonymous. If named, a new structure definition is created within the enclosing scope, with its offsets beginning at 0. If anonymous, the members of -the new structure are added to the enclosing scope instead. Example: +the new structure are added to the enclosing scope instead, with offsets +continuing through that scope. Example: <tscreen><verb> .struct Object @@ -5023,11 +5024,11 @@ O: .tag Object In this example, the first nested structure is named "Point", and its member offsets begin at 0. On the other hand, the two anonymous structures simply -continue to add members to the enclosing Object structure. +continue to add members to the enclosing "Object" structure. Note that an anonymous structure does not need a member name, since all of its members become part of the enclosing structure. The "unnamed" member in the -example is redundantly the same offset as its first member "un1. +example is redundantly the same offset as its first member "un1". <sect1>Limitations<p> From 9892c8f6c45f3ad61c49ce78d22881161d21dbab Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Sun, 17 Dec 2023 05:40:00 -0500 Subject: [PATCH 2316/2710] using less generic names for the example to avoid confusion, adding cautionary example for what I think is the most error prone case --- doc/ca65.sgml | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 3120d9dd4..c5c6893da 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -5003,23 +5003,29 @@ continuing through that scope. Example: <tscreen><verb> .struct Object - member .byte ; Object::member = 0 - named .struct Point ; Object::named = 1 + id .byte ; Object::id = 0 + target .struct Point ; Object::target = 1 xcoord .word ; Object::Point::xcoord = 0 ycoord .word ; Object::Point::ycoord = 2 .endstruct - unnamed .struct ; Object::unnamed = 5 - un1 .word ; Object::un1 = 5 - un2 .word ; Object::un2 = 7 + cost .struct ; Object::cost = 5 + price .word ; Object::price = 5 + tax .word ; Object::tax = 7 .endstruct .struct - un3 .word ; Object::un3 = 9 + radius .word ; Object::radius = 9 .endstruct .endstruct O: .tag Object - lda O + Object::named + Object::Point::ycoord - lda O + Object::un2 + lda O + Object::target + Object::Point::ycoord ; Named struct + lda O + Object::tax ; Anonymous + lda O + Object::radius ; Anonymous + + ; Be careful not to use a named nested structure without also adding the + ; offset to the nested structure itself. + lda O + Object::Point::ycoord ; Incorrect! + lda O + Object::target + Object::Point::ycoord ; Correct </verb></tscreen> In this example, the first nested structure is named "Point", and its member @@ -5027,8 +5033,8 @@ offsets begin at 0. On the other hand, the two anonymous structures simply continue to add members to the enclosing "Object" structure. Note that an anonymous structure does not need a member name, since all of its -members become part of the enclosing structure. The "unnamed" member in the -example is redundantly the same offset as its first member "un1". +members become part of the enclosing structure. The "cost" member in the +example is redundantly the same offset as its first member "price". <sect1>Limitations<p> From cd7c688dff5b0dfed2dec0fde9f2f24cd1b73ae9 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 18 Dec 2023 15:30:53 +0800 Subject: [PATCH 2317/2710] Separated C preprocessor errors from other errors. --- src/cc65/error.c | 67 +++++++++++++++++------- src/cc65/error.h | 25 +++++++-- test/ref/Makefile | 3 +- test/ref/bug2312-preprocessor-error.c | 8 +++ test/ref/bug2312-preprocessor-error.cref | 2 + test/ref/custom-reference-error.c | 5 +- test/ref/custom-reference-error.cref | 11 ++-- 7 files changed, 91 insertions(+), 30 deletions(-) create mode 100644 test/ref/bug2312-preprocessor-error.c create mode 100644 test/ref/bug2312-preprocessor-error.cref diff --git a/src/cc65/error.c b/src/cc65/error.c index 2ad7133ed..5cd29b388 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -59,8 +59,10 @@ /* Count of errors/warnings */ -unsigned ErrorCount = 0; -unsigned WarningCount = 0; +unsigned PPErrorCount = 0; /* Pre-parser errors */ +unsigned PPWarningCount = 0; /* Pre-parser warnings */ +unsigned ErrorCount = 0; /* Errors occurred in parser and later translation phases */ +unsigned WarningCount = 0; /* Warnings occurred in parser and later translation phases */ unsigned RecentLineNo = 0; unsigned RecentErrorCount = 0; @@ -197,7 +199,7 @@ void Internal (const char* Format, ...) -static void IntError (const char* Filename, unsigned LineNo, const char* Msg, va_list ap) +static void IntError (errcat_t EC, const char* Filename, unsigned LineNo, const char* Msg, va_list ap) /* Print an error message - internal function */ { fprintf (stderr, "%s:%u: Error: ", Filename, LineNo); @@ -208,7 +210,11 @@ static void IntError (const char* Filename, unsigned LineNo, const char* Msg, va Print (stderr, 1, "Input: %.*s\n", (int) SB_GetLen (Line), SB_GetConstBuf (Line)); } - ++ErrorCount; + if (EC != EC_PP) { + ++ErrorCount; + } else { + ++PPErrorCount; + } if (RecentLineNo != LineNo) { RecentLineNo = LineNo; RecentErrorCount = 0; @@ -216,7 +222,7 @@ static void IntError (const char* Filename, unsigned LineNo, const char* Msg, va ++RecentErrorCount; } - if (RecentErrorCount > 20 || ErrorCount > 200) { + if (RecentErrorCount > 20 || GetTotalErrors () > 200) { Fatal ("Too many errors"); } } @@ -228,18 +234,18 @@ void Error (const char* Format, ...) { va_list ap; va_start (ap, Format); - IntError (GetDiagnosticFileName (), GetDiagnosticLineNum (), Format, ap); + IntError (EC_PARSER, GetDiagnosticFileName (), GetDiagnosticLineNum (), Format, ap); va_end (ap); } -void LIError (const LineInfo* LI, const char* Format, ...) +void LIError (errcat_t EC, const LineInfo* LI, const char* Format, ...) /* Print an error message with the line info given explicitly */ { va_list ap; va_start (ap, Format); - IntError (GetInputName (LI), GetInputLine (LI), Format, ap); + IntError (EC, GetInputName (LI), GetInputLine (LI), Format, ap); va_end (ap); } @@ -250,7 +256,7 @@ void PPError (const char* Format, ...) { va_list ap; va_start (ap, Format); - IntError (GetCurrentFilename(), GetCurrentLineNum(), Format, ap); + IntError (EC_PP, GetCurrentFilename(), GetCurrentLineNum(), Format, ap); va_end (ap); } @@ -262,13 +268,13 @@ void PPError (const char* Format, ...) -static void IntWarning (const char* Filename, unsigned LineNo, const char* Msg, va_list ap) +static void IntWarning (errcat_t EC, const char* Filename, unsigned LineNo, const char* Msg, va_list ap) /* Print a warning message - internal function */ { if (IS_Get (&WarningsAreErrors)) { /* Treat the warning as an error */ - IntError (Filename, LineNo, Msg, ap); + IntError (EC, Filename, LineNo, Msg, ap); } else if (IS_Get (&WarnEnable)) { @@ -279,7 +285,12 @@ static void IntWarning (const char* Filename, unsigned LineNo, const char* Msg, if (Line) { Print (stderr, 1, "Input: %.*s\n", (int) SB_GetLen (Line), SB_GetConstBuf (Line)); } - ++WarningCount; + + if (EC != EC_PP) { + ++WarningCount; + } else { + ++PPWarningCount; + } } } @@ -291,18 +302,18 @@ void Warning (const char* Format, ...) { va_list ap; va_start (ap, Format); - IntWarning (GetDiagnosticFileName (), GetDiagnosticLineNum (), Format, ap); + IntWarning (EC_PARSER, GetDiagnosticFileName (), GetDiagnosticLineNum (), Format, ap); va_end (ap); } -void LIWarning (const LineInfo* LI, const char* Format, ...) +void LIWarning (errcat_t EC, const LineInfo* LI, const char* Format, ...) /* Print a warning message with the line info given explicitly */ { va_list ap; va_start (ap, Format); - IntWarning (GetInputName (LI), GetInputLine (LI), Format, ap); + IntWarning (EC, GetInputName (LI), GetInputLine (LI), Format, ap); va_end (ap); } @@ -313,7 +324,7 @@ void PPWarning (const char* Format, ...) { va_list ap; va_start (ap, Format); - IntWarning (GetCurrentFilename(), GetCurrentLineNum(), Format, ap); + IntWarning (EC_PP, GetCurrentFilename(), GetCurrentLineNum(), Format, ap); va_end (ap); } @@ -398,16 +409,34 @@ void PPNote (const char* Format, ...) /*****************************************************************************/ -/* Code */ +/* Error summary */ /*****************************************************************************/ +unsigned GetTotalErrors (void) +/* Get total count of errors of all categories */ +{ + return PPErrorCount + ErrorCount; +} + + + +unsigned GetTotalWarnings (void) +/* Get total count of warnings of all categories */ +{ + return PPWarningCount + WarningCount; +} + + + void ErrorReport (void) /* Report errors (called at end of compile) */ { - unsigned int V = (ErrorCount != 0 ? 0 : 1); - Print (stdout, V, "%u errors and %u warnings generated.\n", ErrorCount, WarningCount); + unsigned TotalErrors = GetTotalErrors (); + unsigned TotalWarnings = GetTotalWarnings (); + unsigned int V = (TotalErrors != 0 ? 0 : 1); + Print (stdout, V, "%u errors and %u warnings generated.\n", TotalErrors, TotalWarnings); } diff --git a/src/cc65/error.h b/src/cc65/error.h index 83be8c782..4dce6cf91 100644 --- a/src/cc65/error.h +++ b/src/cc65/error.h @@ -55,9 +55,20 @@ +/* Error categories */ +typedef enum errcat_t errcat_t; +enum errcat_t { + EC_PP, /* Pre-parser phases */ + EC_PARSER, /* Parser and later phases */ +}; + + + /* Count of errors/warnings */ -extern unsigned ErrorCount; -extern unsigned WarningCount; +extern unsigned PPErrorCount; /* Pre-parser errors */ +extern unsigned PPWarningCount; /* Pre-parser warnings */ +extern unsigned ErrorCount; /* Errors occurred in parser and later translation phases */ +extern unsigned WarningCount; /* Warnings occurred in parser and later translation phases */ /* Warning and error options */ extern IntStack WarnEnable; /* Enable warnings */ @@ -98,7 +109,7 @@ void Internal (const char* Format, ...) attribute ((noreturn, format (printf, 1, void Error (const char* Format, ...) attribute ((format (printf, 1, 2))); /* Print an error message */ -void LIError (const LineInfo* LI, const char* Format, ...) attribute ((format (printf, 2, 3))); +void LIError (errcat_t EC, const LineInfo* LI, const char* Format, ...) attribute ((format (printf, 3, 4))); /* Print an error message with the line info given explicitly */ void PPError (const char* Format, ...) attribute ((format (printf, 1, 2))); @@ -107,7 +118,7 @@ void PPError (const char* Format, ...) attribute ((format (printf, 1, 2))); void Warning (const char* Format, ...) attribute ((format (printf, 1, 2))); /* Print a warning message */ -void LIWarning (const LineInfo* LI, const char* Format, ...) attribute ((format (printf, 2, 3))); +void LIWarning (errcat_t EC, const LineInfo* LI, const char* Format, ...) attribute ((format (printf, 3, 4))); /* Print a warning message with the line info given explicitly */ void PPWarning (const char* Format, ...) attribute ((format (printf, 1, 2))); @@ -130,6 +141,12 @@ void LINote (const LineInfo* LI, const char* Format, ...) attribute ((format (pr void PPNote (const char* Format, ...) attribute ((format (printf, 1, 2))); /* Print a note message. For use within the preprocessor */ +unsigned GetTotalErrors (void); +/* Get total count of errors of all categories */ + +unsigned GetTotalWarnings (void); +/* Get total count of warnings of all categories */ + void ErrorReport (void); /* Report errors (called at end of compile) */ diff --git a/test/ref/Makefile b/test/ref/Makefile index 9538fdee7..9ecb33c00 100644 --- a/test/ref/Makefile +++ b/test/ref/Makefile @@ -63,7 +63,8 @@ CUSTOMSOURCES = \ # exact error output is required ERRORSOURCES = \ custom-reference-error.c \ - bug1889-missing-identifier.c + bug1889-missing-identifier.c \ + bug2312-preprocessor-error.c SOURCES := $(filter-out $(CUSTOMSOURCES) $(ERRORSOURCES),$(wildcard *.c)) diff --git a/test/ref/bug2312-preprocessor-error.c b/test/ref/bug2312-preprocessor-error.c new file mode 100644 index 000000000..b7872f514 --- /dev/null +++ b/test/ref/bug2312-preprocessor-error.c @@ -0,0 +1,8 @@ +/* Bug #2312 - Error recovery from preprocessor errors at the end of a declaration */ + +typedef int A; /* ';' consumption triggers PP below */ + +#define /* PP error during ';' consumption */ + +A f(void); /* Should be OK */ +int A(void); /* Should be an error */ diff --git a/test/ref/bug2312-preprocessor-error.cref b/test/ref/bug2312-preprocessor-error.cref new file mode 100644 index 000000000..680950fd6 --- /dev/null +++ b/test/ref/bug2312-preprocessor-error.cref @@ -0,0 +1,2 @@ +bug2312-preprocessor-error.c:5: Error: Missing macro name +bug2312-preprocessor-error.c:8: Error: Redefinition of typedef 'A' as different kind of symbol diff --git a/test/ref/custom-reference-error.c b/test/ref/custom-reference-error.c index 857145fc0..a7c1b6c56 100644 --- a/test/ref/custom-reference-error.c +++ b/test/ref/custom-reference-error.c @@ -13,7 +13,10 @@ and then "make" again to confirm */ -short main(int argc, char* argv[]) +typedef short return_t; +#error /* produce an error */ + +return_t main(int argc, char* argv[]) { printf("%02x", 0x42); /* produce an error */ n = 0; /* produce an error */ diff --git a/test/ref/custom-reference-error.cref b/test/ref/custom-reference-error.cref index 728cc0e15..b21c72dce 100644 --- a/test/ref/custom-reference-error.cref +++ b/test/ref/custom-reference-error.cref @@ -1,5 +1,6 @@ -custom-reference-error.c:18: Error: Call to undeclared function 'printf' -custom-reference-error.c:19: Error: Undeclared identifier 'n' -custom-reference-error.c:21: Warning: Control reaches end of non-void function [-Wreturn-type] -custom-reference-error.c:21: Warning: Parameter 'argc' is never used -custom-reference-error.c:21: Warning: Parameter 'argv' is never used +custom-reference-error.c:17: Error: #error +custom-reference-error.c:21: Error: Call to undeclared function 'printf' +custom-reference-error.c:22: Error: Undeclared identifier 'n' +custom-reference-error.c:24: Warning: Control reaches end of non-void function [-Wreturn-type] +custom-reference-error.c:24: Warning: Parameter 'argc' is never used +custom-reference-error.c:24: Warning: Parameter 'argv' is never used From b876a6b213eb4fb8d821f4dba77079a3e7cb8917 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 19 Dec 2023 19:30:50 +0800 Subject: [PATCH 2318/2710] Fixed cc65 exitcode when there are only preprocessor errors. --- src/cc65/main.c | 4 ++-- test/err/bug2312-pperror-only.c | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 test/err/bug2312-pperror-only.c diff --git a/src/cc65/main.c b/src/cc65/main.c index bef646cdd..7dc5417f6 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -1089,7 +1089,7 @@ int main (int argc, char* argv[]) Compile (InputFile); /* Create the output file if we didn't had any errors */ - if (PreprocessOnly == 0 && (ErrorCount == 0 || Debug)) { + if (PreprocessOnly == 0 && (GetTotalErrors () == 0 || Debug)) { /* Emit literals, do cleanup and optimizations */ FinishCompile (); @@ -1115,5 +1115,5 @@ int main (int argc, char* argv[]) DoneSegAddrSizes (); /* Return an apropriate exit code */ - return (ErrorCount > 0)? EXIT_FAILURE : EXIT_SUCCESS; + return (GetTotalErrors () > 0)? EXIT_FAILURE : EXIT_SUCCESS; } diff --git a/test/err/bug2312-pperror-only.c b/test/err/bug2312-pperror-only.c new file mode 100644 index 000000000..bdec33956 --- /dev/null +++ b/test/err/bug2312-pperror-only.c @@ -0,0 +1,8 @@ +/* Bug #2312 */ + +#error "Compiler should exit with failure" + +int main(void) +{ + return 0; +} From e5f9def572ae7f203ddee540f58b5e04e93567f9 Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps.nl> Date: Fri, 29 Dec 2023 22:37:18 +0100 Subject: [PATCH 2319/2710] Added SPRCTL0 and SPRCTL1 bit definitions for ca65 --- asminc/lynx.inc | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/asminc/lynx.inc b/asminc/lynx.inc index 403d15d07..a24044713 100644 --- a/asminc/lynx.inc +++ b/asminc/lynx.inc @@ -81,8 +81,42 @@ MATHJ = $FC6F ; Suzy Misc -SPRCTL0 = $FC80 -SPRCTL1 = $FC81 +SPRCTL0 = $FC80 +; Sprite bits-per-pixel definitions +BPP_MASK = %11000000 ; Mask for settings bits per pixel +BPP_1 = %00000000 +BPP_2 = %01000000 +BPP_3 = %10000000 +BPP_4 = %11000000 +; More sprite control 0 bit definitions +HFLIP = %00100000 +VFLIP = %00010000 +; Sprite types - redefined to reflect the reality caused by the shadow error +TYPE_SHADOW = %00000111 +TYPE_XOR = %00000110 +TYPE_NONCOLL = %00000101 ; Non-colliding +TYPE_NORMAL = %00000100 +TYPE_BOUNDARY = %00000011 +TYPE_BSHADOW = %00000010 ; Background shadow +TYPE_BACKNONCOLL = %00000001 ; Background non-colliding +TYPE_BACKGROUND = %00000000 + +SPRCTL1 = $FC81 +LITERAL = %10000000 +PACKED = %00000000 +ALGO3 = %01000000 ; Broken, do not set this bit! +; Sprite reload mask definitions +RELOAD_MASK = %00110000 +RENONE = %00000000 ; Reload nothing +REHV = %00010000 ; Reload hsize, vsize +REHVS = %00100000 ; Reload hsize, vsize, stretch +REHVST = %00110000 ; Reload hsize, vsize, stretch, tilt +; More sprite control 1 bit definitions +REUSEPAL = %00001000 +SKIP = %00000100 +DRAWUP = %00000010 +DRAWLEFT = %00000001 + SPRCOLL = $FC82 SPRINIT = $FC83 SUZYHREV = $FC88 From 061d907a11599cf3ad565ffbc155ce0e93156a72 Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps.nl> Date: Fri, 29 Dec 2023 22:46:15 +0100 Subject: [PATCH 2320/2710] Fixed tabs instead of spaces --- asminc/lynx.inc | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/asminc/lynx.inc b/asminc/lynx.inc index a24044713..198af415b 100644 --- a/asminc/lynx.inc +++ b/asminc/lynx.inc @@ -81,41 +81,41 @@ MATHJ = $FC6F ; Suzy Misc -SPRCTL0 = $FC80 +SPRCTL0 = $FC80 ; Sprite bits-per-pixel definitions -BPP_MASK = %11000000 ; Mask for settings bits per pixel -BPP_1 = %00000000 -BPP_2 = %01000000 -BPP_3 = %10000000 -BPP_4 = %11000000 +BPP_MASK = %11000000 ; Mask for settings bits per pixel +BPP_1 = %00000000 +BPP_2 = %01000000 +BPP_3 = %10000000 +BPP_4 = %11000000 ; More sprite control 0 bit definitions -HFLIP = %00100000 -VFLIP = %00010000 +HFLIP = %00100000 +VFLIP = %00010000 ; Sprite types - redefined to reflect the reality caused by the shadow error -TYPE_SHADOW = %00000111 -TYPE_XOR = %00000110 +TYPE_SHADOW = %00000111 +TYPE_XOR = %00000110 TYPE_NONCOLL = %00000101 ; Non-colliding -TYPE_NORMAL = %00000100 +TYPE_NORMAL = %00000100 TYPE_BOUNDARY = %00000011 TYPE_BSHADOW = %00000010 ; Background shadow TYPE_BACKNONCOLL = %00000001 ; Background non-colliding TYPE_BACKGROUND = %00000000 -SPRCTL1 = $FC81 -LITERAL = %10000000 -PACKED = %00000000 -ALGO3 = %01000000 ; Broken, do not set this bit! +SPRCTL1 = $FC81 +LITERAL = %10000000 +PACKED = %00000000 +ALGO3 = %01000000 ; Broken, do not set this bit! ; Sprite reload mask definitions -RELOAD_MASK = %00110000 -RENONE = %00000000 ; Reload nothing -REHV = %00010000 ; Reload hsize, vsize -REHVS = %00100000 ; Reload hsize, vsize, stretch -REHVST = %00110000 ; Reload hsize, vsize, stretch, tilt +RELOAD_MASK = %00110000 +RENONE = %00000000 ; Reload nothing +REHV = %00010000 ; Reload hsize, vsize +REHVS = %00100000 ; Reload hsize, vsize, stretch +REHVST = %00110000 ; Reload hsize, vsize, stretch, tilt ; More sprite control 1 bit definitions -REUSEPAL = %00001000 -SKIP = %00000100 -DRAWUP = %00000010 -DRAWLEFT = %00000001 +REUSEPAL = %00001000 +SKIP = %00000100 +DRAWUP = %00000010 +DRAWLEFT = %00000001 SPRCOLL = $FC82 SPRINIT = $FC83 From 66e354961c659bf7466542d577f0bf16811bb875 Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps.nl> Date: Fri, 29 Dec 2023 22:48:36 +0100 Subject: [PATCH 2321/2710] Missed some tabs --- asminc/lynx.inc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/asminc/lynx.inc b/asminc/lynx.inc index 198af415b..5ae17f6ef 100644 --- a/asminc/lynx.inc +++ b/asminc/lynx.inc @@ -95,22 +95,22 @@ VFLIP = %00010000 TYPE_SHADOW = %00000111 TYPE_XOR = %00000110 TYPE_NONCOLL = %00000101 ; Non-colliding -TYPE_NORMAL = %00000100 -TYPE_BOUNDARY = %00000011 +TYPE_NORMAL = %00000100 +TYPE_BOUNDARY = %00000011 TYPE_BSHADOW = %00000010 ; Background shadow TYPE_BACKNONCOLL = %00000001 ; Background non-colliding -TYPE_BACKGROUND = %00000000 +TYPE_BACKGROUND = %00000000 SPRCTL1 = $FC81 LITERAL = %10000000 PACKED = %00000000 -ALGO3 = %01000000 ; Broken, do not set this bit! +ALGO3 = %01000000 ; Broken, do not set this bit! ; Sprite reload mask definitions RELOAD_MASK = %00110000 -RENONE = %00000000 ; Reload nothing -REHV = %00010000 ; Reload hsize, vsize -REHVS = %00100000 ; Reload hsize, vsize, stretch -REHVST = %00110000 ; Reload hsize, vsize, stretch, tilt +RENONE = %00000000 ; Reload nothing +REHV = %00010000 ; Reload hsize, vsize +REHVS = %00100000 ; Reload hsize, vsize, stretch +REHVST = %00110000 ; Reload hsize, vsize, stretch, tilt ; More sprite control 1 bit definitions REUSEPAL = %00001000 SKIP = %00000100 From 096bd0b633a4a5c9086faaf50a4e86afcfee542c Mon Sep 17 00:00:00 2001 From: paul moore <paulmoore100@hotmail.com> Date: Fri, 29 Dec 2023 17:02:45 -0800 Subject: [PATCH 2322/2710] bug 2319 --- src/cl65/main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cl65/main.c b/src/cl65/main.c index 553fb9ca6..cd245470a 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -1305,6 +1305,9 @@ static void OptStaticLocals (const char* Opt attribute ((unused)), static void OptTarget (const char* Opt attribute ((unused)), const char* Arg) /* Set the target system */ { + if (FirstInput) { + Error ("Target must be specified before input files"); + } Target = FindTarget (Arg); if (Target == TGT_UNKNOWN) { Error ("No such target system: '%s'", Arg); From c262929a626d4c191046da85c480513a6d109c5e Mon Sep 17 00:00:00 2001 From: paul moore <paulmoore100@hotmail.com> Date: Sun, 31 Dec 2023 10:14:53 -0800 Subject: [PATCH 2323/2710] doc cl65 change --- doc/cl65.sgml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/cl65.sgml b/doc/cl65.sgml index 24d2f5927..f48e1353c 100644 --- a/doc/cl65.sgml +++ b/doc/cl65.sgml @@ -261,6 +261,9 @@ different options for different files on the command line. As an example. translates main.c with full optimization and module.c with less optimization and debug info enabled. +Note that the target system (-t , --target) must be specified before any file +unless using the default target of c64 + The type of an input file is derived from its extension: <itemize> From f3199e430857663528a1a10b5b5c908d4ff802bb Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 1 Jan 2024 14:48:03 +0800 Subject: [PATCH 2324/2710] Fixed type name output with K&R-style functions. --- src/cc65/datatype.c | 155 +++++++++++++++++++++++++++----------------- 1 file changed, 95 insertions(+), 60 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 9e0652526..e00e0c64d 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1356,6 +1356,65 @@ const char* GetFullTypeName (const Type* T) +static void GetParameterList (StrBuf* ParamList, StrBuf* Buf, const FuncDesc* D, int Detailed) +{ + /* First argument */ + const SymEntry* Param = D->SymTab->SymHead; + unsigned I; + + if ((D->Flags & FD_OLDSTYLE) == 0) { + /* ANSI style */ + for (I = 0; I < D->ParamCount; ++I) { + CHECK (Param != 0 && (Param->Flags & SC_PARAM) != 0); + if (I > 0) { + SB_AppendStr (ParamList, ", "); + } + if (Detailed) { + if (SymIsRegVar (Param)) { + SB_AppendStr (ParamList, "register "); + } + if (!SymHasAnonName (Param)) { + SB_AppendStr (Buf, Param->Name); + } + } + SB_AppendStr (ParamList, SB_GetConstBuf (GetFullTypeNameBuf (Buf, Param->Type))); + SB_Clear (Buf); + /* Next argument */ + Param = Param->NextSym; + } + if ((D->Flags & FD_VARIADIC) == 0) { + if (D->ParamCount == 0 && (D->Flags & FD_EMPTY) == 0) { + SB_AppendStr (ParamList, "void"); + } + } else { + if (D->ParamCount > 0) { + SB_AppendStr (ParamList, ", ..."); + } else { + SB_AppendStr (ParamList, "..."); + } + } + } else { + /* K&R style */ + if (Detailed) { + for (I = 0; I < D->ParamCount; ++I) { + CHECK (Param != 0 && (Param->Flags & SC_PARAM) != 0); + if (I > 0) { + SB_AppendStr (ParamList, ", "); + } + if (!SymHasAnonName (Param)) { + SB_AppendStr (ParamList, Param->Name); + } + /* Next argument */ + Param = Param->NextSym; + } + } + SB_Clear (Buf); + } + SB_Terminate (ParamList); +} + + + static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBuf* East, const Type* T) /* Return the name string of the given type split into a western part and an ** eastern part. @@ -1395,34 +1454,11 @@ static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBu } else if (IsTypeFunc (T)) { - FuncDesc* D = GetFuncDesc (T); - struct StrBuf ParamList = AUTO_STRBUF_INITIALIZER; + struct StrBuf ParamList = AUTO_STRBUF_INITIALIZER; + const FuncDesc* D = GetFuncDesc (T); - /* First argument */ - SymEntry* Param = D->SymTab->SymHead; - unsigned I; - for (I = 0; I < D->ParamCount; ++I) { - CHECK (Param != 0 && (Param->Flags & SC_PARAM) != 0); - if (I > 0) { - SB_AppendStr (&ParamList, ", "); - } - SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); - SB_Clear (&Buf); - /* Next argument */ - Param = Param->NextSym; - } - if ((D->Flags & FD_VARIADIC) == 0) { - if (D->ParamCount == 0 && (D->Flags & FD_EMPTY) == 0) { - SB_AppendStr (&ParamList, "void"); - } - } else { - if (D->ParamCount > 0) { - SB_AppendStr (&ParamList, ", ..."); - } else { - SB_AppendStr (&ParamList, "..."); - } - } - SB_Terminate (&ParamList); + /* Get the parameter list string */ + GetParameterList (&ParamList, &Buf, D, 0); /* Join the existing West and East together */ if (!SB_IsEmpty (East)) { @@ -1600,37 +1636,8 @@ void PrintFuncSig (FILE* F, const char* Name, const Type* T) /* Get the function descriptor used in definition */ const FuncDesc* D = GetFuncDefinitionDesc (T); - /* Get the parameter list string. Start from the first parameter */ - SymEntry* Param = D->SymTab->SymHead; - unsigned I; - for (I = 0; I < D->ParamCount; ++I) { - CHECK (Param != 0 && (Param->Flags & SC_PARAM) != 0); - if (I > 0) { - SB_AppendStr (&ParamList, ", "); - } - if (SymIsRegVar (Param)) { - SB_AppendStr (&ParamList, "register "); - } - if (!SymHasAnonName (Param)) { - SB_AppendStr (&Buf, Param->Name); - } - SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); - SB_Clear (&Buf); - /* Next argument */ - Param = Param->NextSym; - } - if ((D->Flags & FD_VARIADIC) == 0) { - if (D->ParamCount == 0 && (D->Flags & FD_EMPTY) == 0) { - SB_AppendStr (&ParamList, "void"); - } - } else { - if (D->ParamCount > 0) { - SB_AppendStr (&ParamList, ", ..."); - } else { - SB_AppendStr (&ParamList, "..."); - } - } - SB_Terminate (&ParamList); + /* Get the parameter list string */ + GetParameterList (&ParamList, &Buf, D, 1); /* Get the function qualifiers */ if (GetQualifierTypeCodeNameBuf (&Buf, T->C, T_QUAL_NONE) > 0) { @@ -1641,16 +1648,44 @@ void PrintFuncSig (FILE* F, const char* Name, const Type* T) /* Get the signature string without the return type */ SB_Printf (&West, "%s%s (%s)", SB_GetConstBuf (&Buf), Name, SB_GetConstBuf (&ParamList)); - SB_Done (&Buf); - SB_Done (&ParamList); /* Complete with the return type */ GetFullTypeNameWestEast (&West, &East, GetFuncReturnType (T)); SB_Append (&West, &East); + + /* Check if the function is defined in K&R style */ + if ((D->Flags & FD_OLDSTYLE) != 0 && D->ParamCount > 0) { + /* First argument */ + const SymEntry* Param = D->SymTab->SymHead; + unsigned I; + + SB_Clear (&ParamList); + SB_Clear (&Buf); + for (I = 0; I < D->ParamCount; ++I) { + CHECK (Param != 0 && (Param->Flags & SC_PARAM) != 0); + SB_AppendChar (&ParamList, ' '); + if (SymIsRegVar (Param)) { + SB_AppendStr (&ParamList, "register "); + } + if (!SymHasAnonName (Param)) { + SB_AppendStr (&Buf, Param->Name); + } + SB_AppendStr (&ParamList, SB_GetConstBuf (GetFullTypeNameBuf (&Buf, Param->Type))); + SB_AppendChar (&ParamList, ';'); + SB_Clear (&Buf); + + /* Next argument */ + Param = Param->NextSym; + } + SB_Append (&West, &ParamList); + } + SB_Terminate (&West); /* Output */ fprintf (F, "%s", SB_GetConstBuf (&West)); + SB_Done (&ParamList); + SB_Done (&Buf); SB_Done (&East); SB_Done (&West); } From f734f43a35d05cb5a8980febdd62fafa86eb1c6c Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 1 Jan 2024 14:48:05 +0800 Subject: [PATCH 2325/2710] Removed extra 'const' qualifier in array-to-pointer and function-to-pointer conversions. --- src/cc65/datatype.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index e00e0c64d..a8b7735b0 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -539,7 +539,7 @@ const Type* AddressOf (const Type* T) Type* P = TypeAlloc (Size + 1); /* Create the return type... */ - P[0].C = T_PTR | (T[0].C & T_QUAL_ADDRSIZE) | T_QUAL_CONST; + P[0].C = T_PTR | (T[0].C & T_QUAL_ADDRSIZE); memcpy (P+1, T, Size * sizeof (Type)); /* ...and return it */ From 0b7d9d8216a4f94d76cad6f587f9277b50410836 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 1 Jan 2024 14:48:05 +0800 Subject: [PATCH 2326/2710] Fixed missing calling convention and address size qualifiers in diagnosis on function types. --- src/cc65/datatype.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index a8b7735b0..b2511cf1b 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -1454,6 +1454,7 @@ static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBu } else if (IsTypeFunc (T)) { + int QualCount = 0; struct StrBuf ParamList = AUTO_STRBUF_INITIALIZER; const FuncDesc* D = GetFuncDesc (T); @@ -1467,13 +1468,27 @@ static struct StrBuf* GetFullTypeNameWestEast (struct StrBuf* West, struct StrBu SB_Clear (East); } + /* Add qualifiers */ + if ((GetQualifier (T) & ~T_QUAL_NEAR) != T_QUAL_NONE) { + QualCount = GetQualifierTypeCodeNameBuf (&Buf, T->C, T_QUAL_NEAR); + if (QualCount > 0) { + SB_AppendChar (&Buf, ' '); + } + } + if (SB_IsEmpty (West)) { - /* Just use the param list */ - SB_Printf (West, "(%s)", SB_GetConstBuf (&ParamList)); + /* Use no parentheses */ + SB_Terminate (&Buf); + + /* Append the param list to the West */ + SB_Printf (West, "%s(%s)", SB_GetConstBuf (&Buf), SB_GetConstBuf (&ParamList)); } else { - /* Append the param list to the existing West */ - SB_Printf (&Buf, "(%s)(%s)", SB_GetConstBuf (West), SB_GetConstBuf (&ParamList)); - SB_Printf (West, "%s", SB_GetConstBuf (&Buf)); + /* Append the existing West */ + SB_Append (&Buf, West); + SB_Terminate (&Buf); + + /* Append the param list to the West */ + SB_Printf (West, "(%s)(%s)", SB_GetConstBuf (&Buf), SB_GetConstBuf (&ParamList)); } SB_Done (&ParamList); From 4e820677ee1b6cce52505da7ff042eb8a9520ff7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 1 Jan 2024 15:03:45 +0800 Subject: [PATCH 2327/2710] ED_AddrExpr() and ED_IndExpr() need no return values. --- src/cc65/exprdesc.c | 6 ++---- src/cc65/exprdesc.h | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index a1af0bb8b..a21e56623 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -418,7 +418,7 @@ ExprDesc* ED_FinalizeRValLoad (ExprDesc* Expr) -ExprDesc* ED_AddrExpr (ExprDesc* Expr) +void ED_AddrExpr (ExprDesc* Expr) /* Take address of Expr. The result is always an rvalue */ { switch (Expr->Flags & E_MASK_LOC) { @@ -447,12 +447,11 @@ ExprDesc* ED_AddrExpr (ExprDesc* Expr) } break; } - return Expr; } -ExprDesc* ED_IndExpr (ExprDesc* Expr) +void ED_IndExpr (ExprDesc* Expr) /* Dereference Expr */ { switch (Expr->Flags & E_MASK_LOC) { @@ -486,7 +485,6 @@ ExprDesc* ED_IndExpr (ExprDesc* Expr) } break; } - return Expr; } diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index 93a8604c9..148485764 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -637,10 +637,10 @@ INLINE void ED_MarkExprAsRVal (ExprDesc* Expr) # define ED_MarkExprAsRVal(Expr) do { (Expr)->Flags &= ~E_RTYPE_LVAL; } while (0) #endif -ExprDesc* ED_AddrExpr (ExprDesc* Expr); +void ED_AddrExpr (ExprDesc* Expr); /* Take address of Expr */ -ExprDesc* ED_IndExpr (ExprDesc* Expr); +void ED_IndExpr (ExprDesc* Expr); /* Dereference Expr */ #if defined(HAVE_INLINE) From 88246f852d73bc52e4ac37ea1927e3d9e9c70c3d Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 1 Jan 2024 15:04:50 +0800 Subject: [PATCH 2328/2710] Removed RefineFuncDesc() as an unnecessary wrapper. --- src/cc65/symtab.c | 2 +- src/cc65/typeconv.c | 36 ++++-------------------------------- src/cc65/typeconv.h | 3 --- 3 files changed, 5 insertions(+), 36 deletions(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index 3018c910d..c2c6bab27 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -741,7 +741,7 @@ static int HandleSymRedefinition (SymEntry* Sym, const Type* T, unsigned Flags) /* Refine the existing composite prototype with this new ** one. */ - RefineFuncDesc (Sym->Type, T); + TypeComposition (Sym->Type, T); } } diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 76658502d..25b693511 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -427,10 +427,6 @@ void TypeComposition (Type* lhs, const Type* rhs) ** type or this fails with a critical check. */ { - FuncDesc* F1; - FuncDesc* F2; - long LeftCount, RightCount; - /* Compose two types */ while (lhs->C != T_END) { @@ -445,8 +441,8 @@ void TypeComposition (Type* lhs, const Type* rhs) /* Check for special type elements */ if (IsTypeFunc (lhs)) { /* Compose the function descriptors */ - F1 = GetFuncDesc (lhs); - F2 = GetFuncDesc (rhs); + FuncDesc* F1 = GetFuncDesc (lhs); + FuncDesc* F2 = GetFuncDesc (rhs); /* If F1 has an empty parameter list (which does also mean, it is ** not a function definition, because the flag is reset in this @@ -470,8 +466,8 @@ void TypeComposition (Type* lhs, const Type* rhs) } } else if (IsTypeArray (lhs)) { /* Check member count */ - LeftCount = GetElementCount (lhs); - RightCount = GetElementCount (rhs); + long LeftCount = GetElementCount (lhs); + long RightCount = GetElementCount (rhs); /* Set composite type if it is requested */ if (LeftCount != UNSPECIFIED) { @@ -485,28 +481,4 @@ void TypeComposition (Type* lhs, const Type* rhs) ++lhs; ++rhs; } - - return; -} - - - -FuncDesc* RefineFuncDesc (Type* OldType, const Type* NewType) -/* Refine the existing function descriptor with a new one */ -{ - FuncDesc* Old = GetFuncDesc (OldType); - FuncDesc* New = GetFuncDesc (NewType); - - CHECK (Old != 0 && New != 0); - - if ((New->Flags & FD_EMPTY) == 0) { - if ((Old->Flags & FD_EMPTY) == 0) { - TypeComposition (OldType, NewType); - } else { - TypeCopy (OldType, NewType); - Old->Flags &= ~FD_EMPTY; - } - } - - return Old; } diff --git a/src/cc65/typeconv.h b/src/cc65/typeconv.h index 839c5e43e..1d79a446c 100644 --- a/src/cc65/typeconv.h +++ b/src/cc65/typeconv.h @@ -63,9 +63,6 @@ void TypeComposition (Type* lhs, const Type* rhs); ** type or this fails with a critical check. */ -FuncDesc* RefineFuncDesc (Type* OldType, const Type* NewType); -/* Refine the existing function descriptor with a new one */ - /* End of typeconv.h */ From acbd87b5764005b7798ae9b3f29c8a7b9e3eaf6b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 1 Jan 2024 15:27:57 +0800 Subject: [PATCH 2329/2710] Renamed GetUnqualTypeCode() to GetUnderlyingTypeCode() for consistency with GetUnderlyingType(). --- src/cc65/datatype.c | 12 ++++++------ src/cc65/datatype.h | 14 +++++++------- src/cc65/expr.c | 6 +++--- src/cc65/initdata.c | 4 ++-- src/cc65/typecmp.c | 8 ++++---- src/cc65/typeconv.c | 2 +- 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 9e0652526..46f62e922 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -216,7 +216,7 @@ unsigned BitSizeOf (const Type* T) unsigned SizeOf (const Type* T) /* Compute size (in bytes) of object represented by type array */ { - switch (GetUnqualTypeCode (T)) { + switch (GetUnderlyingTypeCode (T)) { case T_VOID: /* A void variable is a cc65 extension. @@ -368,7 +368,7 @@ static unsigned GetMinimalTypeSizeByBitWidth (unsigned BitWidth) -TypeCode GetUnqualTypeCode (const Type* Type) +TypeCode GetUnderlyingTypeCode (const Type* Type) /* Get the type code of the unqualified underlying type of Type. ** Return GetUnqualRawTypeCode (Type) if Type is not scalar. */ @@ -725,7 +725,7 @@ const Type* ArithmeticConvert (const Type* lhst, const Type* rhst) const Type* GetSignedType (const Type* T) /* Get signed counterpart of the integral type */ { - switch (GetUnqualTypeCode (T) & T_MASK_RANK) { + switch (GetUnderlyingTypeCode (T) & T_MASK_RANK) { case T_RANK_CHAR: return type_schar; @@ -739,7 +739,7 @@ const Type* GetSignedType (const Type* T) return type_long; default: - Internal ("Unknown type code: %lX", GetUnqualTypeCode (T)); + Internal ("Unknown type code: %lX", GetUnderlyingTypeCode (T)); return T; } } @@ -749,7 +749,7 @@ const Type* GetSignedType (const Type* T) const Type* GetUnsignedType (const Type* T) /* Get unsigned counterpart of the integral type */ { - switch (GetUnqualTypeCode (T) & T_MASK_RANK) { + switch (GetUnderlyingTypeCode (T) & T_MASK_RANK) { case T_RANK_CHAR: return type_uchar; @@ -763,7 +763,7 @@ const Type* GetUnsignedType (const Type* T) return type_ulong; default: - Internal ("Unknown type code: %lX", GetUnqualTypeCode (T)); + Internal ("Unknown type code: %lX", GetUnderlyingTypeCode (T)); return T; } } diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index 4f4b6f25e..dbe0eedaa 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -328,7 +328,7 @@ INLINE TypeCode GetQualifier (const Type* T) # define GetQualifier(T) ((T)->C & T_MASK_QUAL) #endif -TypeCode GetUnqualTypeCode (const Type* Type); +TypeCode GetUnderlyingTypeCode (const Type* Type); /* Get the type code of the unqualified underlying type of Type. ** Return GetUnqualRawTypeCode (Type) if Type is not scalar. */ @@ -359,30 +359,30 @@ INLINE TypeCode GetTypeClass (const Type* T) INLINE TypeCode GetTypeRank (const Type* T) /* Get the type rank of a type */ { - return (GetUnqualTypeCode (T) & T_MASK_RANK); + return (GetUnderlyingTypeCode (T) & T_MASK_RANK); } #else -# define GetTypeRank(T) (GetUnqualTypeCode (T) & T_MASK_RANK) +# define GetTypeRank(T) (GetUnderlyingTypeCode (T) & T_MASK_RANK) #endif #if defined(HAVE_INLINE) INLINE TypeCode GetSignedness (const Type* T) /* Get the signedness of a type */ { - return (GetUnqualTypeCode (T) & T_MASK_SIGN); + return (GetUnderlyingTypeCode (T) & T_MASK_SIGN); } #else -# define GetSignedness(T) (GetUnqualTypeCode (T) & T_MASK_SIGN) +# define GetSignedness(T) (GetUnderlyingTypeCode (T) & T_MASK_SIGN) #endif #if defined(HAVE_INLINE) INLINE TypeCode GetSizeModifier (const Type* T) /* Get the size modifier of a type */ { - return (GetUnqualTypeCode (T) & T_MASK_SIZE); + return (GetUnderlyingTypeCode (T) & T_MASK_SIZE); } #else -# define GetSizeModifier(T) (GetUnqualTypeCode (T) & T_MASK_SIZE) +# define GetSizeModifier(T) (GetUnderlyingTypeCode (T) & T_MASK_SIZE) #endif #if defined(HAVE_INLINE) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index cfddfa24e..0f3a6e110 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -129,7 +129,7 @@ unsigned CG_TypeOf (const Type* T) { unsigned CG_Type; - switch (GetUnqualTypeCode (T)) { + switch (GetUnderlyingTypeCode (T)) { case T_SCHAR: return CF_CHAR; @@ -188,7 +188,7 @@ unsigned CG_TypeOf (const Type* T) unsigned CG_CallFlags (const Type* T) /* Get the code generator flags for calling the function */ { - if (GetUnqualTypeCode (T) == T_FUNC) { + if (GetUnderlyingTypeCode (T) == T_FUNC) { return (T->A.F->Flags & FD_VARIADIC) ? 0 : CF_FIXARGC; } else { Error ("Illegal function type %04lX", T->C); @@ -291,7 +291,7 @@ static unsigned typeadjust (ExprDesc* lhs, const ExprDesc* rhs, int NoPush) void LimitExprValue (ExprDesc* Expr, int WarnOverflow) /* Limit the constant value of the expression to the range of its type */ { - switch (GetUnqualTypeCode (Expr->Type)) { + switch (GetUnderlyingTypeCode (Expr->Type)) { case T_INT: case T_SHORT: if (WarnOverflow && ((Expr->IVal < -0x8000) || (Expr->IVal > 0x7FFF))) { diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c index 5401e577c..82cebefc2 100644 --- a/src/cc65/initdata.c +++ b/src/cc65/initdata.c @@ -679,7 +679,7 @@ static unsigned ParseVoidInit (Type* T) Size = 0; do { ExprDesc Expr = NoCodeConstExpr (hie1); - switch (GetUnqualTypeCode (&Expr.Type[0])) { + switch (GetUnderlyingTypeCode (&Expr.Type[0])) { case T_SCHAR: case T_UCHAR: @@ -747,7 +747,7 @@ static unsigned ParseVoidInit (Type* T) static unsigned ParseInitInternal (Type* T, int *Braces, int AllowFlexibleMembers) /* Parse initialization of variables. Return the number of data bytes. */ { - switch (GetUnqualTypeCode (T)) { + switch (GetUnderlyingTypeCode (T)) { case T_SCHAR: case T_UCHAR: diff --git a/src/cc65/typecmp.c b/src/cc65/typecmp.c index e8b790a69..a09c80304 100644 --- a/src/cc65/typecmp.c +++ b/src/cc65/typecmp.c @@ -259,8 +259,8 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) } /* Get the ranks of the left and right hands */ - LeftRank = (GetUnqualTypeCode (lhs) & T_MASK_RANK); - RightRank = (GetUnqualTypeCode (rhs) & T_MASK_RANK); + LeftRank = (GetUnderlyingTypeCode (lhs) & T_MASK_RANK); + RightRank = (GetUnderlyingTypeCode (rhs) & T_MASK_RANK); /* Bit-fields are considered compatible if they have the same ** signedness, bit-offset and bit-width. @@ -344,10 +344,10 @@ static void DoCompare (const Type* lhs, const Type* rhs, typecmp_t* Result) case T_RANK_PTR: ++Result->Indirections; if (Result->Indirections == 1) { - if ((GetUnqualTypeCode (lhs + 1) & T_MASK_RANK) == T_RANK_VOID) { + if ((GetUnderlyingTypeCode (lhs + 1) & T_MASK_RANK) == T_RANK_VOID) { Result->F |= TCF_VOID_PTR_ON_LEFT; } - if ((GetUnqualTypeCode (rhs + 1) & T_MASK_RANK) == T_RANK_VOID) { + if ((GetUnderlyingTypeCode (rhs + 1) & T_MASK_RANK) == T_RANK_VOID) { Result->F |= TCF_VOID_PTR_ON_RIGHT; } } else { diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index 25b693511..6e9fad69a 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -436,7 +436,7 @@ void TypeComposition (Type* lhs, const Type* rhs) } /* Check for sanity */ - CHECK (GetUnqualTypeCode (lhs) == GetUnqualTypeCode (rhs)); + CHECK (GetUnderlyingTypeCode (lhs) == GetUnderlyingTypeCode (rhs)); /* Check for special type elements */ if (IsTypeFunc (lhs)) { From 7aab84628dad035e3e14d0b837d99496723a1c67 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 1 Jan 2024 16:11:30 +0800 Subject: [PATCH 2330/2710] Fixed calling convention parsing in type names and function parameter types. --- src/cc65/declare.c | 112 +++++++++++++++++++++++----------- test/val/bug2327-cconv-type.c | 111 +++++++++++++++++++++++++++++++++ 2 files changed, 188 insertions(+), 35 deletions(-) create mode 100644 test/val/bug2327-cconv-type.c diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 8b7512730..2666a8d31 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -501,6 +501,31 @@ static void FixQualifiers (Type* DataType) T[0].C |= CodeAddrSizeQualifier (); } + } else { + + /* If we have remaining qualifiers, flag them as invalid */ + Q = T[0].C; + + if (Q & T_QUAL_NEAR) { + Error ("Invalid '__near__' qualifier"); + Q &= ~T_QUAL_NEAR; + } + if (Q & T_QUAL_FAR) { + Error ("Invalid '__far__' qualifier"); + Q &= ~T_QUAL_FAR; + } + if (Q & T_QUAL_FASTCALL) { + Error ("Invalid '__fastcall__' qualifier"); + Q &= ~T_QUAL_FASTCALL; + } + if (Q & T_QUAL_CDECL) { + Error ("Invalid '__cdecl__' qualifier"); + Q &= ~T_QUAL_CDECL; + } + + /* Clear the invalid qualifiers */ + T[0].C &= Q; + } ++T; } @@ -1990,7 +2015,7 @@ static void ParseAnsiParamList (FuncDesc* F) static void ParseFuncDecl (Declarator* D, declmode_t Mode, TypeCode Qualifiers) -/* Parse the argument list of a function with the enclosing parentheses */ +/* Parse the argument list of a function with the closing parenthesis */ { /* Create a new function descriptor */ FuncDesc* F = NewFuncDesc (); @@ -1998,9 +2023,6 @@ static void ParseFuncDecl (Declarator* D, declmode_t Mode, TypeCode Qualifiers) /* Enter a new lexical level */ EnterFunctionLevel (); - /* Skip the opening paren */ - NextToken (); - /* Check for several special parameter lists */ if (CurTok.Tok == TOK_RPAREN) { /* Parameter list is empty (K&R-style) */ @@ -2075,19 +2097,18 @@ static void ParseFuncDecl (Declarator* D, declmode_t Mode, TypeCode Qualifiers) -static void DirectDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) +static void DirectDecl (DeclSpec* Spec, Declarator* D, TypeCode* RemQ, declmode_t Mode) /* Recursively process direct declarators. Build a type array in reverse order. */ { /* Read optional function or pointer qualifiers that modify the identifier - ** or token to the right. For convenience, we allow a calling convention - ** also for pointers here. If it's a pointer-to-function, the qualifier - ** later will be transfered to the function itself. If it's a pointer to - ** something else, it will be flagged as an error. + ** or token to the right. */ - TypeCode Qualifiers = OptionalQualifiers (T_QUAL_NONE, T_QUAL_ADDRSIZE | T_QUAL_CCONV); + TypeCode Qualifiers = *RemQ | OptionalQualifiers (*RemQ, T_QUAL_ADDRSIZE | T_QUAL_CCONV); /* Pointer to something */ if (CurTok.Tok == TOK_STAR) { + /* Qualifiers on the pointer itself */ + TypeCode Q = T_QUAL_NONE; /* Skip the star */ NextToken (); @@ -2098,17 +2119,30 @@ static void DirectDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) } /* Allow const, restrict, and volatile qualifiers */ - Qualifiers |= OptionalQualifiers (Qualifiers, T_QUAL_CVR); + Q |= OptionalQualifiers (Qualifiers, T_QUAL_CVR); - /* Parse the type that the pointer points to */ - DirectDecl (Spec, D, Mode); + /* For convenience, we allow a calling convention also for pointers + ** here. If it's a pointer-to-function, the qualifier later will be + ** transfered to the function itself. If it's a pointer to something + ** else, it will be flagged as an error. + */ + *RemQ = T_QUAL_NONE; + + /* Parse the type that derives from the pointer */ + DirectDecl (Spec, D, RemQ, Mode); /* Add the type */ - AddTypeCodeToDeclarator (D, T_PTR | Qualifiers); + AddTypeCodeToDeclarator (D, T_PTR | Q | *RemQ); + + /* Return the calling convention and address size specifiers on the + ** pointee type. + */ + *RemQ = Qualifiers; return; } if (CurTok.Tok == TOK_LPAREN) { + int Nested = 0; SymEntry* Entry; /* An empty declaration cannot contain parentheses where an identifier @@ -2118,19 +2152,33 @@ static void DirectDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) Spec->Flags |= DS_NO_EMPTY_DECL; } + /* Skip the opening paren */ + NextToken (); + /* We have to disambiguate the meanings of 'type (identifier' when ** the identifier can be a typedef'ed parameter type specifier or ** a declarator enclosed in parentheses in some cases. */ if (Mode == DM_IDENT_OR_EMPTY || /* If we are in a declaration... */ - NextTok.Tok == TOK_LPAREN || /* or the next token is one more paren... */ - NextTok.Tok == TOK_STAR || /* or a '*' ... */ - (NextTok.Tok == TOK_IDENT && /* or an identifier that... */ - ((Entry = FindSym (NextTok.Ident)) == 0 || /* is not a typedef. */ - !SymIsTypeDef (Entry)))) { + CurTok.Tok == TOK_LPAREN || /* or the next token is one more paren... */ + CurTok.Tok == TOK_STAR || /* or a '*' ... */ + (CurTok.Tok == TOK_IDENT && /* or an identifier that... */ + ((Entry = FindSym (CurTok.Ident)) == 0 || /* is not a typedef. */ + !SymIsTypeDef (Entry)))) { + Nested = 1; + } else { + /* Check for qualifiers */ + TypeCode Q = OptionalQualifiers (T_QUAL_NONE, T_QUAL_ADDRSIZE | T_QUAL_CCONV); + + if (Q != T_QUAL_NONE) { + Qualifiers |= Q; + Nested = 1; + } + } + + if (Nested) { /* Parse the direct declarator in parentheses */ - NextToken (); - DirectDecl (Spec, D, Mode); + DirectDecl (Spec, D, &Qualifiers, Mode); ConsumeRParen (); } else { /* This is a parameter type list in parentheses */ @@ -2160,6 +2208,9 @@ static void DirectDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) while (CurTok.Tok == TOK_LBRACK || CurTok.Tok == TOK_LPAREN) { if (CurTok.Tok == TOK_LPAREN) { + /* Skip the opening paren */ + NextToken (); + /* Function declarator */ ParseFuncDecl (D, Mode, Qualifiers); @@ -2215,19 +2266,7 @@ static void DirectDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) } } - /* If we have remaining qualifiers, flag them as invalid */ - if (Qualifiers & T_QUAL_NEAR) { - Error ("Invalid '__near__' qualifier"); - } - if (Qualifiers & T_QUAL_FAR) { - Error ("Invalid '__far__' qualifier"); - } - if (Qualifiers & T_QUAL_FASTCALL) { - Error ("Invalid '__fastcall__' qualifier"); - } - if (Qualifiers & T_QUAL_CDECL) { - Error ("Invalid '__cdecl__' qualifier"); - } + *RemQ = Qualifiers; } @@ -2288,6 +2327,8 @@ int ParseDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) ** Return 1 otherwise. */ { + TypeCode Q = T_QUAL_NONE; + /* Used to check if we have any errors during parsing this */ unsigned PrevErrorCount = ErrorCount; @@ -2303,11 +2344,12 @@ int ParseDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) InitDeclarator (D); /* Get additional derivation of the declarator and the identifier */ - DirectDecl (Spec, D, Mode); + DirectDecl (Spec, D, &Q, Mode); /* Add the base type */ NeedTypeSpace (D, TypeLen (Spec->Type) + 1); /* Bounds check */ TypeCopy (D->Type + D->Index, Spec->Type); + D->Type[D->Index].C |= Q; /* Use the storage class from the declspec */ D->StorageClass = Spec->StorageClass; diff --git a/test/val/bug2327-cconv-type.c b/test/val/bug2327-cconv-type.c new file mode 100644 index 000000000..678727278 --- /dev/null +++ b/test/val/bug2327-cconv-type.c @@ -0,0 +1,111 @@ +/* Bug #2327 - Calling conventions and address size specifiers of functions in type names and parameter types are not parsed correctly */ + +#include <stdint.h> +#include <stdio.h> + +unsigned failures; +int need_header = 1; +const char* test_header; + +/* Helpers */ +void set_header(const char* name) +{ + if (need_header == 0) + { + printf("\n"); + } + test_header = name; + need_header = 1; +} + +void print_header(void) +{ + if (need_header) + { + need_header = 0; + printf("<%s test>\n", test_header); + } +} + +#define CHECK(R, E) \ + do { \ + if ((R) != (E)) { \ + ++failures; \ + print_header(); \ + printf(" fail: %s = %d\n", #R, (R)); \ + } \ + } while (0); + +#define CHECK_RV() CHECK(rv, 42) +#define CHECK_SP() CHECK(x - (intptr_t)&x, 0) + +#define FUNC_QUAL __cdecl__ __near__ + +typedef int hoo_t(int __far__ __cdecl__ ()); +typedef int hoo_t(int __far__ (__cdecl__)()); /* Question: should this be rejected? */ +typedef int hoo_t(int __far__ (__cdecl__ ())); +typedef int hoo_t(int __far__ (__cdecl__ *)()); +typedef int hoo_t(int __far__ (__cdecl__ (*)())); +typedef int hoo_t(int __far__ ((__cdecl__ *)())); + +typedef int hoo_t(int __cdecl__ __far__ ()); +typedef int hoo_t(int (__cdecl__ __far__)()); /* Question: should this be rejected? */ +typedef int hoo_t(int (__cdecl__ __far__ ())); +typedef int hoo_t(int (__cdecl__ __far__ *)()); +typedef int hoo_t(int (__cdecl__ (__far__ *)())); +typedef int hoo_t(int ((__cdecl__ __far__ *)())); + +typedef int (FUNC_QUAL foo_t)(int, int); +typedef int (FUNC_QUAL *pfoo_t)(int, int); + +int FUNC_QUAL foo(int a, int b) +{ + return a * b; +} + +int (FUNC_QUAL * const pfoo)() = (int (FUNC_QUAL *)())foo; + +/* Incompatible and not working for cc65 if used as-is */ +int (*qfoo)(int, ...) = foo; + +int main(void) +{ + int rv; + intptr_t x; + + set_header("init"); + x = (intptr_t)&x; + CHECK_SP() + + set_header("foo"); + rv = foo((int8_t)-3, (int32_t)-14); + CHECK_RV() + CHECK_SP() + + set_header("pfoo"); +#if 0 + /* This would fail */ + rv = pfoo((int8_t)-6, (int32_t)-7); +#else + rv = ((pfoo_t)pfoo)((int8_t)-6, (int32_t)-7); +#endif + CHECK_RV() + CHECK_SP() + + set_header("qfoo"); +#if 0 + /* This would fail */ + rv = (qfoo)((int32_t)-6, (int8_t)-7); +#else + rv = ((foo_t *)qfoo)((int32_t)-6, (int8_t)-7); +#endif + CHECK_RV() + CHECK_SP() + + if (failures > 0) + { + printf("\nfailures: %u\n", failures); + } + + return failures; +} From 75461e13190976534eec4a1b8ce89f6ed03773ac Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 28 Dec 2023 21:50:13 +0100 Subject: [PATCH 2331/2710] Apple2: implement stat(2) and statvfs(3) --- asminc/stat.inc | 64 ++++++++++ asminc/statvfs.inc | 46 +++++++ doc/apple2.sgml | 37 +++++- doc/apple2enh.sgml | 39 +++++- doc/funcref.sgml | 171 +++++++++++++++++++++++++++ include/apple2.h | 42 +++++-- include/dirent.h | 36 ++---- include/sys/stat.h | 37 +++++- include/sys/statvfs.h | 74 ++++++++++++ include/sys/types.h | 43 ++++++- include/time.h | 12 +- libsrc/apple2/exec.s | 26 ++-- libsrc/apple2/filename.s | 11 +- libsrc/apple2/gettime.s | 56 ++------- libsrc/apple2/gmtime_dt.s | 73 ++++++++++++ libsrc/apple2/mktime_dt.s | 37 ++++++ libsrc/apple2/mli.inc | 7 +- libsrc/apple2/mli_file_info.s | 33 ++++++ libsrc/apple2/mli_file_info_direct.s | 22 ++++ libsrc/apple2/open.s | 1 + libsrc/apple2/stat.s | 129 ++++++++++++++++++++ libsrc/apple2/statvfs.s | 125 ++++++++++++++++++++ libsrc/apple2/targetutil/convert.c | 2 +- 23 files changed, 999 insertions(+), 124 deletions(-) create mode 100644 asminc/stat.inc create mode 100644 asminc/statvfs.inc create mode 100644 include/sys/statvfs.h create mode 100644 libsrc/apple2/gmtime_dt.s create mode 100644 libsrc/apple2/mktime_dt.s create mode 100644 libsrc/apple2/mli_file_info.s create mode 100644 libsrc/apple2/mli_file_info_direct.s create mode 100644 libsrc/apple2/stat.s create mode 100644 libsrc/apple2/statvfs.s diff --git a/asminc/stat.inc b/asminc/stat.inc new file mode 100644 index 000000000..e5248f06d --- /dev/null +++ b/asminc/stat.inc @@ -0,0 +1,64 @@ +;**************************************************************************** +;* * +;* stat.inc * +;* * +;* Stat struct * +;* * +;* * +;* * +;*(C) 2023 Colin Leroy-Mira <colin@colino.net> * +;* * +;* * +;*This software is provided 'as-is', without any expressed or implied * +;*warranty. In no event will the authors be held liable for any damages * +;*arising from the use of this software. * +;* * +;*Permission is granted to anyone to use this software for any purpose, * +;*including commercial applications, and to alter it and redistribute it * +;*freely, subject to the following restrictions: * +;* * +;*1. The origin of this software must not be misrepresented; you must not * +;* claim that you wrote the original software. If you use this software * +;* in a product, an acknowledgment in the product documentation would be * +;* appreciated but is not required. * +;*2. Altered source versions must be plainly marked as such, and must not * +;* be misrepresented as being the original software. * +;*3. This notice may not be removed or altered from any source * +;* distribution. * +;* * +;**************************************************************************** + + .include "time.inc" + +;------------------------------------------------------------------------------ +; st_mode values + +S_IFDIR = $01 +S_IFREG = $02 + +;------------------------------------------------------------------------------ +; struct stat + +.struct stat + st_dev .dword + st_ino .dword + st_mode .byte + st_nlink .dword + st_uid .byte + st_gid .byte + st_size .dword + st_atim .tag timespec + st_ctim .tag timespec + st_mtim .tag timespec + .ifdef __APPLE2__ + st_access .byte + st_type .byte + st_auxtype .word + st_storagetype .byte + st_blocks .word + st_mod_date .word + st_mod_time .word + st_create_date .word + st_create_time .word + .endif +.endstruct diff --git a/asminc/statvfs.inc b/asminc/statvfs.inc new file mode 100644 index 000000000..8674b045d --- /dev/null +++ b/asminc/statvfs.inc @@ -0,0 +1,46 @@ +;**************************************************************************** +;* * +;* statvfs.inc * +;* * +;* Statvfs struct * +;* * +;* * +;* * +;*(C) 2023 Colin Leroy-Mira <colin@colino.net> * +;* * +;* * +;*This software is provided 'as-is', without any expressed or implied * +;*warranty. In no event will the authors be held liable for any damages * +;*arising from the use of this software. * +;* * +;*Permission is granted to anyone to use this software for any purpose, * +;*including commercial applications, and to alter it and redistribute it * +;*freely, subject to the following restrictions: * +;* * +;*1. The origin of this software must not be misrepresented; you must not * +;* claim that you wrote the original software. If you use this software * +;* in a product, an acknowledgment in the product documentation would be * +;* appreciated but is not required. * +;*2. Altered source versions must be plainly marked as such, and must not * +;* be misrepresented as being the original software. * +;*3. This notice may not be removed or altered from any source * +;* distribution. * +;* * +;**************************************************************************** + +;------------------------------------------------------------------------------ +; struct statvfs + +.struct statvfs + f_bsize .dword + f_frsize .dword + f_blocks .dword + f_bfree .dword + f_bavail .dword + f_files .dword + f_ffree .dword + f_favail .dword + f_fsid .dword + f_flag .dword + f_namemax .dword +.endstruct diff --git a/doc/apple2.sgml b/doc/apple2.sgml index 97724c147..f1603c428 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -321,14 +321,15 @@ Programs containing Apple ][ specific code may use the <sect1>Apple ][ specific functions<p> -The functions listed below are special for the Apple ][. See -the <url url="funcref.html" name="function reference"> for declaration and +The functions and variables listed below are special for the Apple ][. +See the <url url="funcref.html" name="function reference"> for declaration and usage. <itemize> <item>_auxtype <item>_dos_type <item>_filetype +<item>_datetime <item>get_ostype <item>rebootafterexit <item>ser_apple2_slot @@ -569,6 +570,28 @@ program. See the discussion of the <tt/.CONDES/ feature in the <url url="ca65.html" name="assembler manual">. +<sect1>ProDOS date/time manipulation<p> + +<descrip> +The readdir and stat function return ProDOS timestamps in their file +creation/modification time attributes. You can convert them to more portable +time representations using either: + +<tag/struct tm/ +<tt/struct tm* __fastcall__ gmtime_dt (const struct datetime* dt);/ + +Converts a <tt/struct datetime/ into a <tt/struct tm/. Returns NULL in case +of error and sets errno. + +<tag/time_t/ +<tt/time_t __fastcall__ mktime_dt (const struct datetime* dt);/ + +Parses a <tt/struct datetime/ and returns a UNIX timestamp. Returns 0 on error and +sets errno. + +</descrip> + + <sect1>DIO<p> <descrip> @@ -630,6 +653,16 @@ url="ca65.html" name="assembler manual">. that can be used to set these variables. It is included in <tt/apple2.h/. + The global variable <tt/_datetime/ allows the file creation date/time + to be set before a call to <tt/fopen()/ + or <tt/open()/ that creates the file. It is defined in <tt/apple2.h/: + + <tscreen> + <verb> + extern struct datetime _datetime; + </verb> + </tscreen> + <tag>Example</tag> A text file cannot be created with just the diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 11d4feb7e..e27501577 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -322,14 +322,15 @@ Programs containing enhanced Apple //e specific code may use the <sect1>Enhanced Apple //e specific functions<p> -The functions listed below are special for the enhanced Apple //e. See -the <url url="funcref.html" name="function reference"> for declaration and +The functions and variables listed below are special for the Apple ][. +See the <url url="funcref.html" name="function reference"> for declaration and usage. <itemize> <item>_auxtype <item>_dos_type <item>_filetype +<item>_datetime <item>get_ostype <item>rebootafterexit <item>ser_apple2_slot @@ -575,6 +576,28 @@ program. See the discussion of the <tt/.CONDES/ feature in the <url url="ca65.html" name="assembler manual">. +<sect1>ProDOS date/time manipulation<p> + +<descrip> +The readdir and stat function return ProDOS timestamps in their file +creation/modification time attributes. You can convert them to more portable +time representations using either: + +<tag/struct tm/ +<tt/struct tm* __fastcall__ gmtime_dt (const struct datetime* dt);/ + +Converts a <tt/struct datetime/ into a <tt/struct tm/. Returns -1 in case +of error and sets errno, 0 on success. + +<tag/time_t/ +<tt/time_t __fastcall__ mktime_dt (const struct datetime* dt);/ + +Parses a <tt/struct datetime/ and returns a UNIX timestamp. Returns 0 on error and +sets errno. + +</descrip> + + <sect1>DIO<p> <descrip> @@ -619,7 +642,7 @@ url="ca65.html" name="assembler manual">. auxiliary type. Therefore, some additional mechanism for specifying the file types is needed. - <tag>Specifying the File Type and Auxiliary Type</tag> + <tag>Specifying the File Type, Auxiliary Type and creation date</tag> There are two global variables provided that allow the file type and auxiliary type to be specified before a call to <tt/fopen()/ @@ -636,6 +659,16 @@ url="ca65.html" name="assembler manual">. that can be used to set these variables. It is included in <tt/apple2.h/, which is in turn included in <tt/apple2enh.h/. + The global variable <tt/_datetime/ allows the file creation date/time + to be set before a call to <tt/fopen()/ + or <tt/open()/ that creates the file. It is defined in <tt/apple2.h/: + + <tscreen> + <verb> + extern struct datetime _datetime; + </verb> + </tscreen> + <tag>Example</tag> A text file cannot be created with just the diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 524818b19..c8a818295 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -93,6 +93,8 @@ function. <itemize> <item>_dos_type <item><ref id="get_ostype" name="get_ostype"> +<item><ref id="gmtime_dt" name="gmtime_dt"> +<item><ref id="mktime_dt" name="mktime_dt"> <item>rebootafterexit </itemize> @@ -846,6 +848,20 @@ communication, see also <tt>testcode/lib/ser-test.c</tt>. (incomplete) +<sect1><tt/stat.h/<label id="sys/stat.h"><p> + +<itemize> +<item><ref id="stat" name="stat"> +</itemize> + + +<sect1><tt/statvfs.h/<label id="sys/statvfs.h"><p> + +<itemize> +<item><ref id="statvfs" name="statvfs"> +</itemize> + + <sect1><tt/vic20.h/<label id="vic20.h"><p> (incomplete) @@ -2851,6 +2867,79 @@ setting the time may not work. See also the platform-specific information. </quote> +<sect1>gmtime_dt<label id="gmtime_dt"><p> + +<quote> +<descrip> +<tag/Function/Converts a ProDOS date to a struct tm. +<tag/Header/<tt/<ref id="apple2.h" name="apple2.h">/ +<tag/Declaration/<tt/struct tm* __fastcall__ gmtime_dt (const struct datetime* dt);/ +<tag/Description/The <tt/gmtime_dt/ function converts the given +proDOS date/time to a struct tm. On error, NULL is returned and <tt/errno/ is set +to an error code describing the reason for the failure. +<tag/Notes/<itemize> +<item>The function is only available as fastcall function, so it may only +be used in presence of a prototype. +<item>This function is only available on Apple II. +<item>On Apple II, you can't stat() an opened file. stat() before opening. +</itemize> +<tag/Availability/cc65 +<tag/Example/ +<verb> + +#include <stdio.h> +#include <time.h> +#include <sys/stat.h> +int main(void) +{ + struct stat st; + struct tm* tm; + if (stat ("/disk/file", &st) == 0) { + tm = gmtime_dt (&st.st_ctime); + if (tm) + printf ("File created on %s\n", asctime(tm)); + } +} +</verb> +</descrip> +</quote> + + +<sect1>mktime_dt<label id="mktime_dt"><p> + +<quote> +<descrip> +<tag/Function/Converts a ProDOS date to a time_t. +<tag/Header/<tt/<ref id="apple2.h" name="apple2.h">/ +<tag/Declaration/<tt/time_t __fastcall__ mktime_dt (const struct datetime* dt);/ +<tag/Description/The <tt/mktime_dt/ function parses the given +proDOS date/time and returns a time_t timestamp. On error, 0 is returned, +and errno is set. +<tag/Notes/<itemize> +<item>The function is only available as fastcall function, so it may only +be used in presence of a prototype. +<item>This function is only available on Apple II. +</itemize> +<tag/Availability/cc65 +<tag/Example/ +<verb> + +#include <stdio.h> +#include <time.h> +#include <sys/stat.h> +int main(void) +{ + struct stat st; + if (stat ("/disk/file", &st) == 0) { + printf ("File created on %s\n", + localtime (mktime_dt (&st.st_ctime))); + } +} +</verb> +</descrip> +</quote> + + <sect1>clrscr<label id="clrscr"><p> <quote> @@ -6229,6 +6318,9 @@ be used in presence of a prototype. <item>The returned pointer may point to a statically allocated instance of <tt/struct dirent/, so it may get overwritten by subsequent calls to <tt/readdir/. +<item>On the Apple II platform, the d_ctime and d_mtime returned are in the +ProDOS format. You can convert them to more portable time representations using +the ProDOS datetime conversion functions. <item>On several platforms, namely the CBMs and the Atari, the disk drives get confused when opening/closing files between directory reads. So for example a program that reads the list of files on a disk, and after each call to @@ -7075,6 +7167,85 @@ be used in presence of a prototype. </quote> +<sect1>stat<label id="stat"><p> + +<quote> +<descrip> +<tag/Function/Get file status. +<tag/Header/<tt/<ref id="sys/stat.h" name="sys/stat.h">/ +<tag/Declaration/<tt/int __fastcall__ stat (const char* pathname, struct stat* statbuf);/ +<tag/Description/<tt/stat/ gets information for the file with the given name. On success, +zero is returned. On error, -1 is returned and <tt/errno/ is set to an error +code describing the reason for the failure. +<tag/Notes/<itemize> +<item>The function is only available as fastcall function, so it may only +be used in presence of a prototype. +<item>On the Apple II platform, the st_ctim, st_mtim and st_atim members are left +to zero, for size and performance reasons. The ProDOS creation and modification dates +are returned in the ProDOS format in st_ctime and st_mtime. The access date does +not exist. You can convert them to POSIX-style time representations using +the <url url="apple2.html#ss9.3" name="ProDOS datetime conversion functions">. +</itemize> +<tag/Availability/POSIX 1003.1 +<tag/See also/ +<ref id="statvfs" name="statvfs"> +<tag/Example/ +<verb> +#include <sys/stat.h> + +#define FILENAME "helloworld" +struct stat stbuf; +if (stat (FILENAME, &stbuf) == 0) { + printf ("%s size is %lu bytes (created on %s)\n", FILENAME, stbuf.st_size, +#ifndef __APPLE2__ + localtime (&stbuf.st_ctim.tv_sec) +#else + localtime (mktime_dt (&stbuf.st_ctime)) +#endif + ); +} else { + printf ("There was a problem stat'ing %s: %d\n", FILENAME, errno); +} +</verb> +</descrip> +</quote> + + +<sect1>statvfs<label id="statvfs"><p> + +<quote> +<descrip> +<tag/Function/Get filesystem statistics. +<tag/Header/<tt/<ref id="sys/statvfs.h" name="sys/statvfs.h">/ +<tag/Declaration/<tt/int __fastcall__ statvfs (const char* pathname, struct statvfs* buf);/ +<tag/Description/<tt/statvfs/ gets information for the filesytem on which the given file +resides. On success, +zero is returned. On error, -1 is returned and <tt/errno/ is set to an error +code describing the reason for the failure. +<tag/Notes/<itemize> +<item>The function is only available as fastcall function, so it may only +be used in presence of a prototype. +<item>The function requires an absolute pathname. +</itemize> +<tag/Availability/POSIX 1003.1 +<tag/See also/ +<ref id="stat" name="stat"> +<tag/Example/ +<verb> +#include <sys/statvfs.h> + +#define FILENAME "/disk/helloworld" +struct statvfs stvbuf; +if (statvfs (FILENAME, &stvbuf) == 0) { + printf ("%s filesystem has %u blocks of %u size, %u of them free.\n", FILENAME, stvbuf.f_blocks, stvbuf.f_bsize, stvbuf.f_bfree); +} else { + printf ("There was a problem statvfs'ing %s: %d\n", FILENAME, errno); +} +</verb> +</descrip> +</quote> + + <sect1>strcasecmp<label id="strcasecmp"><p> <quote> diff --git a/include/apple2.h b/include/apple2.h index 8b9a3e0ea..25995eec2 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -41,6 +41,7 @@ # error This module may only be used when compiling for the Apple ][! #endif +#include <time.h> #include <apple2_filetype.h> @@ -142,6 +143,27 @@ extern unsigned char _dos_type; ** ProDOS 8 2.4.x - 0x24 */ +/* struct stat.st_mode values */ +#define S_IFDIR 0x01 +#define S_IFREG 0x02 +#define S_IFBLK 0xFF +#define S_IFCHR 0xFF +#define S_IFIFO 0xFF +#define S_IFLNK 0xFF +#define S_IFSOCK 0xFF + +struct datetime { + struct { + unsigned day :5; + unsigned mon :4; + unsigned year :7; + } date; + struct { + unsigned char min; + unsigned char hour; + } time; +}; + /*****************************************************************************/ @@ -151,20 +173,10 @@ extern unsigned char _dos_type; /* The file stream implementation and the POSIX I/O functions will use the -** following struct to set the date and time stamp on files. This specificially +** following struct to set the date and time stamp on files. This specifically ** applies to the open and fopen functions. */ -extern struct { - struct { - unsigned day :5; - unsigned mon :4; - unsigned year :7; - } createdate; /* Current date: 0 */ - struct { - unsigned char min; - unsigned char hour; - } createtime; /* Current time: 0 */ -} _datetime; +extern struct datetime _datetime; /* The addresses of the static drivers */ #if !defined(__APPLE2ENH__) @@ -211,6 +223,12 @@ void rebootafterexit (void); #define _cpeekcolor() COLOR_WHITE #define _cpeekrevers() 0 +struct tm* __fastcall__ gmtime_dt (const struct datetime* dt); +/* Converts a ProDOS date/time structure to a struct tm */ + +time_t __fastcall__ mktime_dt (const struct datetime* dt); +/* Converts a ProDOS date/time structure to a time_t UNIX timestamp */ + /* End of apple2.h */ diff --git a/include/dirent.h b/include/dirent.h index 124c7f224..b95646833 100644 --- a/include/dirent.h +++ b/include/dirent.h @@ -33,6 +33,8 @@ #ifndef _DIRENT_H #define _DIRENT_H +#include <target.h> + /*****************************************************************************/ @@ -46,31 +48,15 @@ typedef struct DIR DIR; #if defined(__APPLE2__) struct dirent { - char d_name[16]; - unsigned d_ino; - unsigned d_blocks; - unsigned long d_size; - unsigned char d_type; - struct { - unsigned day :5; - unsigned mon :4; - unsigned year :7; - } d_cdate; - struct { - unsigned char min; - unsigned char hour; - } d_ctime; - unsigned char d_access; - unsigned d_auxtype; - struct { - unsigned day :5; - unsigned mon :4; - unsigned year :7; - } d_mdate; - struct { - unsigned char min; - unsigned char hour; - } d_mtime; + char d_name[16]; + unsigned d_ino; + unsigned d_blocks; + unsigned long d_size; + unsigned char d_type; + struct datetime d_ctime; + unsigned char d_access; + unsigned d_auxtype; + struct datetime d_mtime; }; #define _DE_ISREG(t) ((t) != 0x0F) diff --git a/include/sys/stat.h b/include/sys/stat.h index d8fc09c75..0e1589d52 100644 --- a/include/sys/stat.h +++ b/include/sys/stat.h @@ -2,7 +2,7 @@ /* */ /* stat.h */ /* */ -/* Constants for the mode argument of open and creat */ +/* stat(2) definition */ /* */ /* */ /* */ @@ -11,6 +11,9 @@ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ +/* (C) 2023 Colin Leroy-Mira */ +/* EMail: colin@colino.net */ +/* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ /* warranty. In no event will the authors be held liable for any damages */ @@ -36,6 +39,10 @@ #ifndef _STAT_H #define _STAT_H +#include <time.h> +#include <target.h> +#include <sys/types.h> + /*****************************************************************************/ @@ -47,6 +54,30 @@ #define S_IREAD 0x01 #define S_IWRITE 0x02 +#define S_IFMT 0x03 + +struct stat { + dev_t st_dev; + ino_t st_ino; + mode_t st_mode; + nlink_t st_nlink; + uid_t st_uid; + gid_t st_gid; + off_t st_size; + struct timespec st_atim; + struct timespec st_ctim; + struct timespec st_mtim; + #ifdef __APPLE2__ + unsigned char st_access; + unsigned char st_type; + unsigned int st_auxtype; + unsigned char st_storagetype; + unsigned int st_blocks; + struct datetime st_mtime; + struct datetime st_ctime; + #endif +}; + /*****************************************************************************/ @@ -55,5 +86,9 @@ +int __fastcall__ stat (const char* pathname, struct stat* statbuf); + + + /* End of stat.h */ #endif diff --git a/include/sys/statvfs.h b/include/sys/statvfs.h new file mode 100644 index 000000000..d9edc2f23 --- /dev/null +++ b/include/sys/statvfs.h @@ -0,0 +1,74 @@ +/*****************************************************************************/ +/* */ +/* statvfs.h */ +/* */ +/* statvfs(3) definition */ +/* */ +/* */ +/* */ +/* (C) 2023 Colin Leroy-Mira */ +/* EMail: colin@colino.net */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef _STATVFS_H +#define _STATVFS_H + +#include <sys/types.h> + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +struct statvfs { + unsigned long f_bsize; + unsigned long f_frsize; + fsblkcnt_t f_blocks; + fsblkcnt_t f_bfree; + fsblkcnt_t f_bavail; + fsfilcnt_t f_files; + fsfilcnt_t f_ffree; + fsfilcnt_t f_favail; + unsigned long f_fsid; + unsigned long f_flag; + unsigned long f_namemax; +}; + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +int __fastcall__ statvfs (const char* pathname, struct statvfs* buf); + + + +/* End of statvfs.h */ +#endif diff --git a/include/sys/types.h b/include/sys/types.h index e75dd7d46..89b91c5b4 100644 --- a/include/sys/types.h +++ b/include/sys/types.h @@ -50,6 +50,46 @@ typedef long int off_t; #endif +#ifndef _HAVE_dev_t +#define _HAVE_dev_t +typedef unsigned long int dev_t; +#endif + +#ifndef _HAVE_ino_t +#define _HAVE_ino_t +typedef unsigned long int ino_t; +#endif + +#ifndef _HAVE_nlink_t +#define _HAVE_nlink_t +typedef unsigned long int nlink_t; +#endif + +#ifndef _HAVE_uid_t +#define _HAVE_uid_t +typedef unsigned char uid_t; +#endif + +#ifndef _HAVE_gid_t +#define _HAVE_gid_t +typedef unsigned char gid_t; +#endif + +#ifndef _HAVE_mode_t +#define _HAVE_mode_t +typedef unsigned char mode_t; +#endif + +#ifndef _HAVE_fsblkcnt_t +#define _HAVE_fsblkcnt_t +typedef unsigned long int fsblkcnt_t; +#endif + +#ifndef _HAVE_fsfilcnt_t +#define _HAVE_fsfilcnt_t +typedef unsigned long int fsfilcnt_t; +#endif + /*****************************************************************************/ @@ -60,6 +100,3 @@ typedef long int off_t; /* End of types.h */ #endif - - - diff --git a/include/time.h b/include/time.h index bfc2ac435..6cd0c8068 100644 --- a/include/time.h +++ b/include/time.h @@ -37,6 +37,15 @@ #define _TIME_H +/* Forward declaration for target.h */ +typedef unsigned long time_t; +typedef unsigned long clock_t; + + + +#include <target.h> + + /* NULL pointer */ #ifndef NULL @@ -49,9 +58,6 @@ typedef unsigned size_t; #endif -typedef unsigned long time_t; -typedef unsigned long clock_t; - /* Structure for broken down time */ struct tm { int tm_sec; diff --git a/libsrc/apple2/exec.s b/libsrc/apple2/exec.s index b8875e9ca..ec90f19bb 100644 --- a/libsrc/apple2/exec.s +++ b/libsrc/apple2/exec.s @@ -5,8 +5,8 @@ ; .export _exec - .import pushname, popname - .import popax, done, _exit + .import mli_file_info_direct + .import pushname, popname, popax, done, _exit .include "zeropage.inc" .include "errno.inc" @@ -17,13 +17,12 @@ typerr: lda #$4A ; "Incompatible file format" ; Cleanup name -oserr: jsr popname ; Preserves A - ; Set ___oserror - jmp ___mappederrno +mlierr: jsr popname +oserr: jmp ___mappederrno _exec: - ; Save cmdline + ; Store cmdline sta ptr4 stx ptr4+1 @@ -32,6 +31,9 @@ _exec: jsr pushname bne oserr + jsr mli_file_info_direct + bcs mlierr + ; ProDOS TechRefMan, chapter 5.1.5.1: ; "The complete or partial pathname of the system program ; is stored at $280, starting with a length byte." @@ -46,18 +48,6 @@ _exec: dey bpl :- - ; Set pushed name - lda sp - ldx sp+1 - sta mliparam + MLI::INFO::PATHNAME - stx mliparam + MLI::INFO::PATHNAME+1 - - ; Get file_type and aux_type - lda #GET_INFO_CALL - ldx #GET_INFO_COUNT - jsr callmli - bcs oserr - ; If we get here the program file at least exists so we copy ; the loader stub right now and patch it later to set params ldx #size - 1 diff --git a/libsrc/apple2/filename.s b/libsrc/apple2/filename.s index aaef6ec2d..0d4b6bedd 100644 --- a/libsrc/apple2/filename.s +++ b/libsrc/apple2/filename.s @@ -8,6 +8,7 @@ .import subysp, addysp, decsp1 .include "zeropage.inc" + .include "apple2.inc" .include "mli.inc" pushname: @@ -15,7 +16,7 @@ pushname: stx ptr1+1 ; Alloc pathname buffer - ldy #64+1 ; Max pathname length + zero + ldy #FILENAME_MAX jsr subysp ; Check for full pathname @@ -71,14 +72,14 @@ copy: lda (ptr1),y sta (sp),y beq setlen iny - cpy #64+1 ; Max pathname length + zero + cpy #FILENAME_MAX bcc copy ; Load oserror code lda #$40 ; "Invalid pathname" ; Free pathname buffer -addsp65:ldy #64+1 +addsp65:ldy #FILENAME_MAX bne addsp ; Branch always ; Alloc and set length byte @@ -93,5 +94,5 @@ setlen: tya popname: ; Cleanup stack - ldy #1 + 64+1 ; Length byte + max pathname length + zero -addsp: jmp addysp ; Preserves A + ldy #1 + FILENAME_MAX +addsp: jmp addysp ; Preserves A and X diff --git a/libsrc/apple2/gettime.s b/libsrc/apple2/gettime.s index 7467b0189..829aaab3b 100644 --- a/libsrc/apple2/gettime.s +++ b/libsrc/apple2/gettime.s @@ -4,7 +4,8 @@ ; int __fastcall__ clock_gettime (clockid_t clk_id, struct timespec *tp); ; - .import pushax, steaxspidx, incsp1, incsp3, return0 + .import pushax, incsp1, incsp3, steaxspidx, return0 + .import _mktime_dt .include "time.inc" .include "zeropage.inc" @@ -29,42 +30,12 @@ _clock_gettime: jsr callmli bcs oserr - ; Get date - lda DATELO+1 - lsr - php ; Save month msb - cmp #70 ; Year < 70? - bcs :+ ; No, leave alone - adc #100 ; Move 19xx to 20xx -: sta TM + tm::tm_year - lda DATELO - tax ; Save day - plp ; Restore month msb - ror - lsr - lsr - lsr - lsr - beq erange ; [1..12] allows for validity check - tay - dey ; Move [1..12] to [0..11] - sty TM + tm::tm_mon - txa ; Restore day - and #%00011111 - sta TM + tm::tm_mday + ; Convert DATELO/TIMELO to time_t + lda #<DATELO + ldx #>DATELO + jsr _mktime_dt - ; Get time - lda TIMELO+1 - sta TM + tm::tm_hour - lda TIMELO - sta TM + tm::tm_min - - ; Make time_t - lda #<TM - ldx #>TM - jsr _mktime - - ; Store tv_sec + ; Store ldy #timespec::tv_sec jsr steaxspidx @@ -74,21 +45,8 @@ _clock_gettime: ; Return success jmp return0 - ; Load errno code -erange: lda #ERANGE - - ; Cleanup stack - jsr incsp3 ; Preserves A - - ; Set __errno - jmp ___directerrno - ; Cleanup stack oserr: jsr incsp3 ; Preserves A ; Set ___oserror jmp ___mappederrno - - .bss - -TM: .tag tm diff --git a/libsrc/apple2/gmtime_dt.s b/libsrc/apple2/gmtime_dt.s new file mode 100644 index 000000000..a0b8e9f4d --- /dev/null +++ b/libsrc/apple2/gmtime_dt.s @@ -0,0 +1,73 @@ +; +; Oliver Schmidt, 14.08.2018 +; Colin Leroy-Mira, 2023 <colin@colino.net> +; +; struct tm * __fastcall__ gmtime_dt(const struct datetime *dt) +; + + .export _gmtime_dt, tm_buf + + .include "time.inc" + .include "zeropage.inc" + .include "errno.inc" + .include "mli.inc" + + ; Convert ProDOS date/time to a struct tm + ; source date address in AX + ; on stack: + ; destination struct + +_gmtime_dt: + sta ptr1 + stx ptr1+1 + + ; Get time + ldy #$03 + lda (ptr1),y + sta tm_buf + tm::tm_hour + dey + lda (ptr1),y + sta tm_buf + tm::tm_min + + ; Get date + dey + lda (ptr1),y + lsr + php ; Save month msb + cmp #70 ; Year < 70? + bcs :+ ; No, leave alone + adc #100 ; Move 19xx to 20xx +: sta tm_buf + tm::tm_year + + dey + lda (ptr1),y + tax ; Save day + plp ; Restore month msb + ror + lsr + lsr + lsr + lsr + beq erange ; [1..12] allows for validity check + tay + dey ; Move [1..12] to [0..11] + sty tm_buf + tm::tm_mon + txa ; Restore day + and #%00011111 + sta tm_buf + tm::tm_mday + + lda #<tm_buf ; Return pointer to tm_buf + ldx #>tm_buf + rts + + ; Load errno code and return NULL +erange: lda #ERANGE + sta ___errno + lda #$00 + tax + rts + + .bss + +tm_buf: + .tag tm diff --git a/libsrc/apple2/mktime_dt.s b/libsrc/apple2/mktime_dt.s new file mode 100644 index 000000000..415f52b9e --- /dev/null +++ b/libsrc/apple2/mktime_dt.s @@ -0,0 +1,37 @@ +; +; Oliver Schmidt, 14.08.2018 +; Colin Leroy-Mira, 2023 <colin@colino.net> +; +; time_t __fastcall__ mktime_dt(const struct datetime *dt) +; + + .import steaxspidx, pushax, incsp2, _gmtime_dt + .import tm_buf + .export _mktime_dt + + .include "time.inc" + .include "zeropage.inc" + .include "errno.inc" + .include "mli.inc" + + ; Convert ProDOS date/time to UNIX timestamp + ; source date address in AX + +_mktime_dt: + ; Convert to internal tm + jsr _gmtime_dt + cpx #$00 + bne :+ + cmp #$00 + beq err + + ; Make time_t +: lda #<tm_buf + ldx #>tm_buf + jmp _mktime + +err: lda #$00 + tax + sta sreg + sta sreg+1 + rts diff --git a/libsrc/apple2/mli.inc b/libsrc/apple2/mli.inc index 42363d9c9..382a071b0 100644 --- a/libsrc/apple2/mli.inc +++ b/libsrc/apple2/mli.inc @@ -83,8 +83,8 @@ EOF_COUNT = 2 AUX_TYPE .word STORAGE_TYPE .byte BLOCKS .word - MODE_DATE .word - MODE_TIME .word + MOD_DATE .word + MOD_TIME .word CREATE_DATE .word CREATE_TIME .word .endstruct @@ -139,3 +139,6 @@ LEVEL := $BF94 ; File level: used in open, flush, close MACHID := $BF98 ; Machine identification PFIXPTR := $BF9A ; If = 0, no prefix active KVERSION:= $BFFF ; Kernel version number + +; Max filename length +FILENAME_MAX = 64+1 diff --git a/libsrc/apple2/mli_file_info.s b/libsrc/apple2/mli_file_info.s new file mode 100644 index 000000000..16e01c07f --- /dev/null +++ b/libsrc/apple2/mli_file_info.s @@ -0,0 +1,33 @@ +; +; Colin Leroy-Mira, 2023 <colin@colino.net> +; + + .export mli_file_info + .import pushname, popname, mli_file_info_direct + .import popax + .include "zeropage.inc" + .include "errno.inc" + .include "mli.inc" + + ; Calls ProDOS MLI GET_FILE_INFO on the filename + ; stored as C string in AX at top of stack + ; Returns with carry set on error, and sets errno +mli_file_info: + ; Get pathname + jsr popax + jsr pushname + bne oserr + + jsr mli_file_info_direct + php ; Save return status + + jsr popname ; Preserves A + + plp + bcs oserr + rts + +oserr: + jsr ___mappederrno + sec + rts diff --git a/libsrc/apple2/mli_file_info_direct.s b/libsrc/apple2/mli_file_info_direct.s new file mode 100644 index 000000000..c15ebc28f --- /dev/null +++ b/libsrc/apple2/mli_file_info_direct.s @@ -0,0 +1,22 @@ +; +; Colin Leroy-Mira, 2023 <colin@colino.net> +; + + .export mli_file_info_direct + .include "zeropage.inc" + .include "mli.inc" + + ; Calls ProDOS MLI GET_FILE_INFO on the ProDOS style + ; filename stored on top of stack + ; Returns with carry set on error, and sets errno +mli_file_info_direct: + ; Set pushed name + lda sp + ldx sp+1 + sta mliparam + MLI::INFO::PATHNAME + stx mliparam + MLI::INFO::PATHNAME+1 + + ; Get file information + lda #GET_INFO_CALL + ldx #GET_INFO_COUNT + jmp callmli diff --git a/libsrc/apple2/open.s b/libsrc/apple2/open.s index 68c203cd6..38793a13e 100644 --- a/libsrc/apple2/open.s +++ b/libsrc/apple2/open.s @@ -18,6 +18,7 @@ .include "fcntl.inc" .include "mli.inc" .include "filedes.inc" + .include "time.inc" .segment "ONCE" diff --git a/libsrc/apple2/stat.s b/libsrc/apple2/stat.s new file mode 100644 index 000000000..f655b3e3f --- /dev/null +++ b/libsrc/apple2/stat.s @@ -0,0 +1,129 @@ +; +; Colin Leroy-Mira, 2023 <colin@colino.net> +; +; int __fastcall__ stat(const char *pathname, struct stat *statbuf); +; + + .export _stat + .import __errno, _open,_close + .import mli_file_info + .import popax, pushax, pusha0, incsp2 + .include "zeropage.inc" + .include "errno.inc" + .include "fcntl.inc" + .include "filedes.inc" + .include "mli.inc" + .include "stat.inc" + +_stat: + ; Store statbuf pointer + sta ptr4 + sta stbuf + stx ptr4+1 + stx stbuf+1 + + ; Clear statbuf + lda #$00 + ldy #.sizeof(stat)-1 +: sta (ptr4),y + dey + bpl :- + + ; Reset errno + sta ___errno + + ; Store pathname + jsr popax + jsr pushax ; Push it back for mli_file_info + jsr pushax ; and for open + + jsr mli_file_info + + bcc got_info + jmp incsp2 ; Drop filename copy for open + +got_info: + ; st_dev + lda DEVNUM + lsr ; Shift right to cc65 representation + lsr + lsr + lsr + ldy #stat::st_dev + sta (ptr4),y + + ; st_mode (S_IFDIR/S_IFREG only) + lda mliparam + MLI::INFO::FILE_TYPE + ldy #stat::st_mode + cmp #$0f + bne is_reg + lda #S_IFDIR + bne set_st_mode + +is_reg: lda #S_IFREG + +set_st_mode: + sta (ptr4),y + + ; st_access through st_create_time + ldx #MLI::INFO::ACCESS + ldy #stat::st_access +: lda mliparam,x + sta (ptr4),y + inx + iny + cpy #stat::st_create_time + .sizeof(stat::st_create_time) + bne :- + + ; st_size + lda #O_RDONLY + jsr pusha0 + ldy #$04 + jsr _open + cmp #$FF + beq done + pha ; Save file descriptor for closing + + ; Get ProDOS's REF_NUM from file descriptor + jsr getfd + ; Get file information + sta mliparam + MLI::EOF::REF_NUM + lda #GET_EOF_CALL + ldx #EOF_COUNT + jsr callmli + bcs eoferr + + ; Get struct stat in ptr4 back, open destroyed it + lda stbuf + ldx stbuf+1 + sta ptr4 + stx ptr4+1 + + ; Store size + ldy #stat::st_size + lda mliparam + MLI::EOF::EOF + sta (ptr4),y + lda mliparam + MLI::EOF::EOF+1 + iny + sta (ptr4),y + lda mliparam + MLI::EOF::EOF+2 + iny + sta (ptr4),y + + ; Close file +eoferr: + pla + ldx #$00 + jsr _close + + ; Set return value if we had an error + lda ___errno + beq done + lda #$FF +done: + tax + rts + + .bss + +stbuf: .res 2 diff --git a/libsrc/apple2/statvfs.s b/libsrc/apple2/statvfs.s new file mode 100644 index 000000000..6274bb52b --- /dev/null +++ b/libsrc/apple2/statvfs.s @@ -0,0 +1,125 @@ +; +; Colin Leroy-Mira, 2023 <colin@colino.net> +; +; int __fastcall__ statvfs(const char *pathname, struct statvfs *statvfsbuf); +; + + .export _statvfs + .import _dio_query_sectsize + .import mli_file_info, pushax, popax, popptr1 + .include "zeropage.inc" + .include "apple2.inc" + .include "errno.inc" + .include "mli.inc" + .include "statvfs.inc" + +_statvfs: + ; Store statbuf + sta ptr4 + stx ptr4+1 + + ; Clear statbuf + lda #$00 + ldy #.sizeof(statvfs)-1 +: sta (ptr4),y + dey + bpl :- + + ; Store pathname, keeping only volume name + jsr popptr1 + ldy #$00 + sty vol_sep + lda (ptr1),y + cmp #'/' ; Is the path absolute? + beq :+ + lda #EINVAL + jmp ___directerrno + +: iny + lda (ptr1),y + beq :+ ; End of string, no other / + cpy #FILENAME_MAX + beq :+ ; Max filename length reached + cmp #'/' + bne :- ; Not a slash, keep looking + sty vol_sep ; Register '/' index + lda #$00 + sta (ptr1),y ; Cut pathname at first slash +: lda ptr1 + ldx ptr1+1 + jsr pushax + + jsr mli_file_info + + php + ldy vol_sep ; Put slash back in pathname + lda #'/' + sta (ptr1),y + plp + + bcc got_info + + jmp ___mappederrno + +got_info: + ; f_fsid + lda DEVNUM + lsr ; Shift right to cc65 representation + lsr + lsr + lsr + ldy #statvfs::f_fsid + sta (ptr4),y + + ; total number of blocks + lda mliparam + MLI::INFO::AUX_TYPE + ldy #statvfs::f_blocks + sta (ptr4),y + lda mliparam + MLI::INFO::AUX_TYPE+1 + iny + sta (ptr4),y + + ; blocks free & avail + sec + lda mliparam + MLI::INFO::AUX_TYPE + sbc mliparam + MLI::INFO::BLOCKS + ldy #statvfs::f_bfree + sta (ptr4),y + ldy #statvfs::f_bavail + sta (ptr4),y + + lda mliparam + MLI::INFO::AUX_TYPE+1 + sbc mliparam + MLI::INFO::BLOCKS+1 + iny + sta (ptr4),y + ldy #statvfs::f_bfree+1 + sta (ptr4),y + + ; block sizes + jsr _dio_query_sectsize + ; low bytes + ldy #statvfs::f_bsize + sta (ptr4),y + ldy #statvfs::f_frsize + sta (ptr4),y + ; f_frsize high byte + iny + txa + sta (ptr4),y + ; f_bsize high byte + ldy #statvfs::f_bsize+1 + sta (ptr4),y + + ; f_namemax + lda #FILENAME_MAX + ldy #statvfs::f_namemax + sta (ptr4),y + + lda #$00 + sta ___errno + tax + rts + + .bss + +vol_sep:.res 1 diff --git a/libsrc/apple2/targetutil/convert.c b/libsrc/apple2/targetutil/convert.c index ea9273fc3..52dffa745 100644 --- a/libsrc/apple2/targetutil/convert.c +++ b/libsrc/apple2/targetutil/convert.c @@ -108,7 +108,7 @@ static unsigned get_dir_entry(char* p_name) } /* Field header_pointer directly follows field last_mod */ - cur_addr = *(unsigned*)(&dirent->d_mtime.hour + 1); + cur_addr = *(unsigned*)(&dirent->d_mtime.time.hour + 1); dhandle = dio_open(getcurrentdevice()); if (!dhandle) { From 075ece5fafef1834cf2c349c1e08658f452410d5 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Wed, 3 Jan 2024 16:35:12 +0100 Subject: [PATCH 2332/2710] Clean-up void is always fast --- include/rp6502.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/include/rp6502.h b/include/rp6502.h index 033684b72..2b40cfc71 100644 --- a/include/rp6502.h +++ b/include/rp6502.h @@ -72,8 +72,8 @@ void __fastcall__ ria_push_long (unsigned long val); void __fastcall__ ria_push_int (unsigned int val); #define ria_push_char(v) RIA.xstack = v -long __fastcall__ ria_pop_long (void); -int __fastcall__ ria_pop_int (void); +long ria_pop_long (void); +int ria_pop_int (void); #define ria_pop_char() RIA.xstack /* Set the RIA fastcall register */ @@ -118,9 +118,9 @@ long __fastcall__ ria_call_long_errno (unsigned char op); /* C API for the operating system. */ int __cdecl__ xreg (char device, char channel, unsigned char address, ...); -int __fastcall__ phi2 (void); -int __fastcall__ codepage (void); -long __fastcall__ lrand (void); +int phi2 (void); +int codepage (void); +long lrand (void); int __fastcall__ stdin_opt (unsigned long ctrl_bits, unsigned char str_length); int __fastcall__ read_xstack (void* buf, unsigned count, int fildes); int __fastcall__ read_xram (unsigned buf, unsigned count, int fildes); From dc9d2f0dbd2a7969e5e86501fa6727421512a8a1 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Wed, 3 Jan 2024 16:46:07 +0100 Subject: [PATCH 2333/2710] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index f8a0d4ff2..eff5049f9 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ External contributors: * [Stephan Mühlstrasser](https://github.com/smuehlst): osic1p target * [Wayne Parham](https://github.com/WayneParham): Sym-1 target * [Dave Plummer](https://github.com/davepl): KIM-1 target +* [rumbledethumps](https://github.com/rumbledethumps): Picocomputer target *(The above list is incomplete, if you feel left out - please speak up or add yourself in a PR)* From 726b70a5342e57fe7744db55ed98a6e9c5cc884b Mon Sep 17 00:00:00 2001 From: jedeoric <plifplouf78@hotmail.com> Date: Fri, 5 Jan 2024 00:45:03 +0100 Subject: [PATCH 2334/2710] add XMAINARGS and XGETARGV for Telestrat --- asminc/telestrat.inc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index c57bd3de8..7623c4d05 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -257,8 +257,11 @@ XBINDX = $28 ; Convert a number into hex and displays on chan XDECIM = $29 XHEXA = $2A ; Convert a number into hex +XMAINARGS = $2C ; Only available for Orix (Alternative OS) + XEDT = $2D ; Launch editor XINSER = $2E +XGETARGV = $2E ; Only available for Orix (Alternative OS) XSCELG = $2F ; Search a line in editor mode XOPEN = $30 ; Only in Orix From bcea5dfa8f353c0aa64c90cdbc4a05e19540d5ff Mon Sep 17 00:00:00 2001 From: jedeoric <plifplouf78@hotmail.com> Date: Fri, 5 Jan 2024 00:46:15 +0100 Subject: [PATCH 2335/2710] fix comment telestrat --- asminc/telestrat.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index 7623c4d05..bbfabdf40 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -257,11 +257,11 @@ XBINDX = $28 ; Convert a number into hex and displays on chan XDECIM = $29 XHEXA = $2A ; Convert a number into hex -XMAINARGS = $2C ; Only available for Orix (Alternative OS) +XMAINARGS = $2C ; Only available for Orix XEDT = $2D ; Launch editor XINSER = $2E -XGETARGV = $2E ; Only available for Orix (Alternative OS) +XGETARGV = $2E ; Only available for Orix XSCELG = $2F ; Search a line in editor mode XOPEN = $30 ; Only in Orix From 169c9c0da0c86a2067a927af34a64f528ec2d31e Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Fri, 5 Jan 2024 19:38:51 +0100 Subject: [PATCH 2336/2710] Add strdup tests --- test/val/lib_common_strdup.c | 60 ++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 test/val/lib_common_strdup.c diff --git a/test/val/lib_common_strdup.c b/test/val/lib_common_strdup.c new file mode 100644 index 000000000..748317017 --- /dev/null +++ b/test/val/lib_common_strdup.c @@ -0,0 +1,60 @@ +#include <string.h> +#include "unittest.h" + +#define SHORT_STR "abcdefghijklmnopqrstuvwxyz" + +#define MID_STR_LEN 700 /* Two pages and something */ +#define LONG_STR_LEN 40000UL /* Two long to duplicate */ +TEST +{ + char *dst; + char *src; + int i; + + dst = strdup(""); + ASSERT_IsTrue(dst != NULL, "strdup returned NULL") + ASSERT_IsTrue(!strcmp(dst, ""), "strings differ"); + free(dst); + + dst = strdup(SHORT_STR); + ASSERT_IsTrue(dst != NULL, "strdup returned NULL"); + ASSERT_IsTrue(strlen(dst) == strlen(SHORT_STR), "string lengths differ"); + ASSERT_IsTrue(!strcmp(dst, SHORT_STR), "strings differ"); + free(dst); + + src = malloc(MID_STR_LEN+1); + ASSERT_IsTrue(src != NULL, "Could not allocate source string"); + memset(src, 'a', MID_STR_LEN-1); + src[MID_STR_LEN] = '\0'; + + dst = strdup(src); + ASSERT_IsTrue(dst != NULL, "strdup returned NULL"); + printf("strlens %zu %zu\n", strlen(src), strlen(dst)); + ASSERT_IsTrue(strlen(dst) == strlen(src), "string lengths differ"); + ASSERT_IsTrue(!strcmp(dst, src), "strings differ"); + free(dst); + free(src); + + src = malloc(LONG_STR_LEN+1); + ASSERT_IsTrue(src != NULL, "Could not allocate source string"); + memset(src, 'a', LONG_STR_LEN-1); + src[LONG_STR_LEN] = '\0'; + + dst = strdup(src); + ASSERT_IsTrue(dst == NULL, "strdup did not return NULL"); + free(src); + + for (i = 254; i < 258; i++) { + src = malloc(i+1); + memset(src, 'a', i-1); + src[i] = '\0'; + + dst = strdup(src); + ASSERT_IsTrue(dst != NULL, "strdup returned NULL"); + ASSERT_IsTrue(strlen(dst) == strlen(src), "string lengths differ"); + ASSERT_IsTrue(!strcmp(dst, src), "strings differ"); + free (dst); + free(src); + } +} +ENDTEST From 29801a2fde4a78c9bc489d5367e109957411e5eb Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 6 Jan 2024 17:53:24 +0100 Subject: [PATCH 2337/2710] remove extra format specifier, fixed #2330 --- test/val/bug1178-struct-copy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/val/bug1178-struct-copy.c b/test/val/bug1178-struct-copy.c index 7fb7e7803..322002c02 100644 --- a/test/val/bug1178-struct-copy.c +++ b/test/val/bug1178-struct-copy.c @@ -62,7 +62,7 @@ void dotest2(void) StructArray2[0] = test2; - printf ("test2: %d, %d, %d, %d, %d\n", + printf ("test2: %d, %d, %d, %d\n", (int)StructArray2[0].a, (int)StructArray2[0].b, (int)StructArray2[0].c, (int)StructArray2[0].d); if ((StructArray2[0].a != 42) || From 7ce982cc68212977cf86ed2cf0f123439393751e Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 7 Jan 2024 10:19:48 +0100 Subject: [PATCH 2338/2710] Remove non-standard (and useless) include Fixes #2337 --- include/time.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/include/time.h b/include/time.h index 6cd0c8068..f8977ab0c 100644 --- a/include/time.h +++ b/include/time.h @@ -43,10 +43,6 @@ typedef unsigned long clock_t; -#include <target.h> - - - /* NULL pointer */ #ifndef NULL #define NULL ((void *) 0) From 3a439e0e1b9c98fba7c3791d3bfb1074296ecb61 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Fri, 5 Jan 2024 19:39:03 +0100 Subject: [PATCH 2339/2710] Little strdup optimisation -12 bytes on disk -20 cycles per strdup -6 cycles per strlen called from strdup --- libsrc/common/strcspn.s | 8 ++-- libsrc/common/strdup.s | 93 ++++++++++++++++------------------------- libsrc/common/strlen.s | 15 +++---- libsrc/common/strspn.s | 8 ++-- 4 files changed, 51 insertions(+), 73 deletions(-) diff --git a/libsrc/common/strcspn.s b/libsrc/common/strcspn.s index 4bb01479a..418bf6ac2 100644 --- a/libsrc/common/strcspn.s +++ b/libsrc/common/strcspn.s @@ -7,13 +7,13 @@ .export _strcspn .import popptr1, _strlen - .importzp ptr1, ptr2, tmp1, tmp2 + .importzp ptr1, ptr4, tmp1, tmp2 _strcspn: - jsr _strlen ; get length in a/x and transfer s2 to ptr2 + jsr _strlen ; get length in a/x and transfer s2 to ptr4 ; Note: It does not make sense to ; have more than 255 test chars, so - ; we don't support a high byte here! (ptr2+1 is + ; we don't support a high byte here! (ptr4+1 is ; also unchanged in strlen then (important!)) ; -> the original implementation also ; ignored this case @@ -38,7 +38,7 @@ checkNext: iny check: cpy tmp1 ; compare with length of test character string beq endOfTestChars - cmp (ptr2),y ; found matching char? + cmp (ptr4),y ; found matching char? bne checkNext leave: txa ; restore position of finding diff --git a/libsrc/common/strdup.s b/libsrc/common/strdup.s index 3ab07bda1..94f2cd338 100644 --- a/libsrc/common/strdup.s +++ b/libsrc/common/strdup.s @@ -1,85 +1,62 @@ ; ; Ullrich von Bassewitz, 18.07.2000 +; Colin Leroy-Mira, 05.01.2024 ; ; char* __fastcall__ strdup (const char* S); ; -; Note: The code knowns which zero page locations are used by malloc. +; Note: The code knowns which zero page locations are used by malloc, +; memcpy and strlen. ; - .importzp sp, tmp1, ptr4 - .import pushax, decsp4, incsp4 - .import _strlen, _malloc, _memcpy + .importzp ptr2, ptr3, ptr4, tmp1, tmp2, tmp3 + .import _strlen_ptr4, _malloc, _memcpy, pushax .export _strdup .macpack cpu - .macpack generic _strdup: + ; Get length (and store source in ptr4) + sta ptr4 + stx ptr4+1 + stx tmp1 ; Backup high byte, which + jsr _strlen_ptr4 ; strlen may increment -; Since we need some place to store the intermediate results, allocate a -; stack frame. To make this somewhat more efficient, create the stackframe -; as needed for the final call to the memcpy function. - - pha ; decsp will destroy A (but not X) - jsr decsp4 ; Target/source - -; Store the pointer into the source slot - - ldy #1 - txa - sta (sp),y - pla -.if (.cpu .bitand CPU_ISET_65SC02) - sta (sp) + ; Add null byte for terminator +.if (.cpu .bitand ::CPU_ISET_65SC02) + inc a .else - dey - sta (sp),y + clc + adc #1 .endif - -; Get length of S (which is still in a/x) - - jsr _strlen - -; Calculate strlen(S)+1 (the space needed) - - add #1 - bcc @L1 + bne :+ inx -; Save the space we're about to allocate in ptr4 - -@L1: sta ptr4 - stx ptr4+1 - -; Allocate memory. _malloc will not use ptr4 + ; Store length +: sta tmp2 + stx tmp3 + ; Allocate memory jsr _malloc -; Store the result into the target stack slot - - ldy #2 - sta (sp),y ; Store low byte - sta tmp1 - txa ; Get high byte - iny - sta (sp),y ; Store high byte - -; Check for a NULL pointer - - ora tmp1 + ; Check for NULL + bne :+ + cpx #$00 beq OutOfMemory -; Copy the string. memcpy will return the target string which is exactly -; what we need here. It will also drop the allocated stack frame. + ; Push dest +: jsr pushax + ; Push source lda ptr4 - ldx ptr4+1 ; Load size - jmp _memcpy ; Copy string, drop stackframe + ldx tmp1 + jsr pushax -; Out of memory, return NULL (A = 0) + ; Push length + lda tmp2 + ldx tmp3 + + ; Copy and return the dest pointer + jmp _memcpy OutOfMemory: - tax - jmp incsp4 ; Drop stack frame - - + rts diff --git a/libsrc/common/strlen.s b/libsrc/common/strlen.s index 8d5bc20fc..c20ab78f9 100644 --- a/libsrc/common/strlen.s +++ b/libsrc/common/strlen.s @@ -2,19 +2,20 @@ ; Ullrich von Bassewitz, 31.05.1998 ; ; Note: strspn & strcspn call internally this function and rely on -; the usage of only ptr2 here! Keep in mind when appling changes +; the usage of only ptr4 here! Keep in mind when appling changes ; and check the other implementations too! ; ; size_t __fastcall__ strlen (const char* s); ; - .export _strlen - .importzp ptr2 + .export _strlen, _strlen_ptr4 + .importzp ptr4 .macpack cpu _strlen: - sta ptr2 ; Save s - stx ptr2+1 + sta ptr4 ; Save s + stx ptr4+1 +_strlen_ptr4: .if (.cpu .bitand ::CPU_ISET_HUC6280) clx cly @@ -27,11 +28,11 @@ _strlen: .endif .endif -L1: lda (ptr2),y +L1: lda (ptr4),y beq L9 iny bne L1 - inc ptr2+1 + inc ptr4+1 inx bne L1 diff --git a/libsrc/common/strspn.s b/libsrc/common/strspn.s index 6fda716be..7e3f707d1 100644 --- a/libsrc/common/strspn.s +++ b/libsrc/common/strspn.s @@ -7,13 +7,13 @@ .export _strspn .import popptr1, _strlen - .importzp ptr1, ptr2, tmp1, tmp2 + .importzp ptr1, ptr4, tmp1, tmp2 _strspn: - jsr _strlen ; get length in a/x and transfer s2 to ptr2 + jsr _strlen ; get length in a/x and transfer s2 to ptr4 ; Note: It does not make sense to ; have more than 255 test chars, so - ; we don't support a high byte here! (ptr2+1 is + ; we don't support a high byte here! (ptr4+1 is ; also unchanged in strlen then (important!)) ; -> the original implementation also ; ignored this case @@ -38,7 +38,7 @@ checkNext: iny check: cpy tmp1 ; compare with length of test character string beq leave - cmp (ptr2),y ; found matching char? + cmp (ptr4),y ; found matching char? bne checkNext foundTestChar: From df193c0947b890ea433e590e9042b0a9c6b537c0 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 7 Jan 2024 22:58:45 +0100 Subject: [PATCH 2340/2710] Rework time functions a bit - mktime: Work unsigned as time_t's type implies (shifting Y2K38 bug to 2106) - mktime: Add unit tests - gmtime/localtime: factorize - gmtime/localtime: Add unit tests - mktime/gmtime/localtime: Size optimisation (-130 bytes wrt master) - mktime: Speed optimisation (from 23M cycles on the unit test to 2M) --- libsrc/common/_is_leap_year.h | 22 ++++++ libsrc/common/_is_leap_year.s | 23 ++++++ libsrc/common/{gmtime.c => _time_t_to_tm.c} | 11 +-- libsrc/common/gmtime.s | 20 +++++ libsrc/common/localtime.c | 60 --------------- libsrc/common/localtime.s | 29 +++++++ libsrc/common/mktime.c | 64 +++++++--------- test/val/lib_common_gmtime_localtime.c | 84 +++++++++++++++++++++ test/val/lib_common_mktime.c | 61 +++++++++++++++ 9 files changed, 268 insertions(+), 106 deletions(-) create mode 100644 libsrc/common/_is_leap_year.h create mode 100644 libsrc/common/_is_leap_year.s rename libsrc/common/{gmtime.c => _time_t_to_tm.c} (94%) create mode 100644 libsrc/common/gmtime.s delete mode 100644 libsrc/common/localtime.c create mode 100644 libsrc/common/localtime.s create mode 100644 test/val/lib_common_gmtime_localtime.c create mode 100644 test/val/lib_common_mktime.c diff --git a/libsrc/common/_is_leap_year.h b/libsrc/common/_is_leap_year.h new file mode 100644 index 000000000..378c462ff --- /dev/null +++ b/libsrc/common/_is_leap_year.h @@ -0,0 +1,22 @@ +/* +** _is_leap_year.h +** +** (C) Copyright 2024, Colin Leroy-Mira <colin@colino.net> +** +*/ + + + +#ifndef __IS_LEAP_YEAR_H +#define __IS_LEAP_YEAR_H + + + +unsigned char __fastcall__ IsLeapYear (unsigned char Year); +/* Returns 1 if the given year is a leap year. Expects a year from 0 to 206, + * without 1900 added */ + + + +/* End of _is_leap_year.h */ +#endif diff --git a/libsrc/common/_is_leap_year.s b/libsrc/common/_is_leap_year.s new file mode 100644 index 000000000..d3136c1c8 --- /dev/null +++ b/libsrc/common/_is_leap_year.s @@ -0,0 +1,23 @@ +; +; Colin Leroy-Mira, 2024 +; +; unsigned char __fastcall__ IsLeapYear (unsigned char Year) +; Returns 1 in A if the given year is a leap year. Expects a year from 0 to 206, +; without 1900 added. +; + + .export _IsLeapYear + +_IsLeapYear: + ldx #$00 ; Prepare X for rts + cmp #$00 ; Y 0 (1900) is not a leap year + beq NotLeap + cmp #$C8 ; Y 200 (2100) is not a leap year + beq NotLeap + and #$03 ; Year % 4 == 0 means leap year + bne NotLeap + lda #$01 ; Return 1 + rts +NotLeap: + lda #$00 ; Return 0 + rts diff --git a/libsrc/common/gmtime.c b/libsrc/common/_time_t_to_tm.c similarity index 94% rename from libsrc/common/gmtime.c rename to libsrc/common/_time_t_to_tm.c index 85e9de3d0..684cff752 100644 --- a/libsrc/common/gmtime.c +++ b/libsrc/common/_time_t_to_tm.c @@ -42,18 +42,9 @@ /*****************************************************************************/ - -struct tm* __fastcall__ gmtime (const time_t* timep) +struct tm* __fastcall__ _time_t_to_tm (const time_t t) { static struct tm timebuf; - time_t t; - - /* Check the argument */ - if (timep == 0 || (long) (t = *timep) < 0) { - /* Invalid arg */ - return 0; - } - /* Since our ints are just 16 bits, split the given time into seconds, ** hours and days. Each of the values will fit in a 16 bit variable. ** The mktime routine will then do the rest. diff --git a/libsrc/common/gmtime.s b/libsrc/common/gmtime.s new file mode 100644 index 000000000..288b285eb --- /dev/null +++ b/libsrc/common/gmtime.s @@ -0,0 +1,20 @@ +; +; Colin Leroy-Mira, 2024 +; +; struct tm* __fastcall__ gmtime (const time_t* timep); +; + + .export _gmtime + .import __time_t_to_tm + .import ldeaxi + +_gmtime: + cpx #$00 ; Check for null pointer + bne :+ + cmp #$00 + beq no_pointer +: jsr ldeaxi ; Load value from pointer + jmp __time_t_to_tm ; Convert it + +no_pointer: + rts ; A/X already set diff --git a/libsrc/common/localtime.c b/libsrc/common/localtime.c deleted file mode 100644 index 48931ea62..000000000 --- a/libsrc/common/localtime.c +++ /dev/null @@ -1,60 +0,0 @@ -/*****************************************************************************/ -/* */ -/* localtime.c */ -/* */ -/* Convert calendar time into broken down local time */ -/* */ -/* */ -/* */ -/* (C) 2002 Ullrich von Bassewitz */ -/* Wacholderweg 14 */ -/* D-70597 Stuttgart */ -/* EMail: uz@musoftware.de */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#include <time.h> - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -struct tm* __fastcall__ localtime (const time_t* timep) -{ - time_t t; - - /* Check for a valid time spec */ - if (timep == 0) { - return 0; - } - - /* Get the time and correct for the time zone offset */ - t = *timep + _tz.timezone; - - /* Use gmtime for conversion */ - return gmtime (&t); -} diff --git a/libsrc/common/localtime.s b/libsrc/common/localtime.s new file mode 100644 index 000000000..279442c9d --- /dev/null +++ b/libsrc/common/localtime.s @@ -0,0 +1,29 @@ +; +; Colin Leroy-Mira, 2024 +; +; struct tm* __fastcall__ localtime (const time_t* timep); +; + + .export _localtime + .import __time_t_to_tm, __tz + .import ldeaxi, tosaddeax, pusheax + .importzp sreg + +_localtime: + cpx #$00 ; Check for null pointer + bne :+ + cmp #$00 + beq no_pointer +: jsr ldeaxi ; Load value + jsr pusheax ; Push it + lda __tz+1+3 + sta sreg+1 + lda __tz+1+2 + sta sreg + ldx __tz+1+1 + lda __tz+1 + jsr tosaddeax ; Add _tz.timezone + jmp __time_t_to_tm ; Convert to struct tm + +no_pointer: + rts ; A/X already set diff --git a/libsrc/common/mktime.c b/libsrc/common/mktime.c index 275589dbb..c9ac1652c 100644 --- a/libsrc/common/mktime.c +++ b/libsrc/common/mktime.c @@ -36,7 +36,7 @@ #include <limits.h> #include <stdlib.h> #include <time.h> - +#include "_is_leap_year.h" /*****************************************************************************/ @@ -67,14 +67,6 @@ static const unsigned MonthDays [] = { -static unsigned char __fastcall__ IsLeapYear (unsigned Year) -/* Returns 1 if the given year is a leap year */ -{ - return (((Year % 4) == 0) && ((Year % 100) != 0 || (Year % 400) == 0)); -} - - - time_t __fastcall__ mktime (register struct tm* TM) /* Make a time in seconds since 1/1/1970 from the broken down time in TM. ** A call to mktime does also correct the time in TM to contain correct @@ -82,13 +74,13 @@ time_t __fastcall__ mktime (register struct tm* TM) */ { register div_t D; - int Max; - unsigned DayCount; + static int Max; + static unsigned DayCount; /* Check if TM is valid */ if (TM == 0) { /* Invalid data */ - goto Error; + return (time_t) -1L; } /* Adjust seconds. */ @@ -96,27 +88,29 @@ time_t __fastcall__ mktime (register struct tm* TM) TM->tm_sec = D.rem; /* Adjust minutes */ - if (TM->tm_min + D.quot < 0) { - goto Error; - } TM->tm_min += D.quot; D = div (TM->tm_min, 60); TM->tm_min = D.rem; /* Adjust hours */ - if (TM->tm_hour + D.quot < 0) { - goto Error; - } TM->tm_hour += D.quot; D = div (TM->tm_hour, 24); TM->tm_hour = D.rem; /* Adjust days */ - if (TM->tm_mday + D.quot < 0) { - goto Error; - } TM->tm_mday += D.quot; + /* Adjust year */ + while (1) { + Max = 365UL + IsLeapYear (TM->tm_year); + if ((unsigned int)TM->tm_mday > Max) { + ++TM->tm_year; + TM->tm_mday -= Max; + } else { + break; + } + } + /* Adjust month and year. This is an iterative process, since changing ** the month will change the allowed days for this month. */ @@ -125,20 +119,17 @@ time_t __fastcall__ mktime (register struct tm* TM) /* Make sure, month is in the range 0..11 */ D = div (TM->tm_mon, 12); TM->tm_mon = D.rem; - if (TM->tm_year + D.quot < 0) { - goto Error; - } TM->tm_year += D.quot; /* Now check if mday is in the correct range, if not, correct month ** and eventually year and repeat the process. */ - if (TM->tm_mon == FEBRUARY && IsLeapYear (TM->tm_year + 1900)) { + if (TM->tm_mon == FEBRUARY && IsLeapYear (TM->tm_year)) { Max = 29; } else { Max = MonthLength[TM->tm_mon]; } - if (TM->tm_mday > Max) { + if ((unsigned int)TM->tm_mday > Max) { /* Must correct month and eventually, year */ if (TM->tm_mon == DECEMBER) { TM->tm_mon = JANUARY; @@ -157,19 +148,27 @@ time_t __fastcall__ mktime (register struct tm* TM) ** year. */ TM->tm_yday = MonthDays[TM->tm_mon] + TM->tm_mday - 1; - if (TM->tm_mon > FEBRUARY && IsLeapYear (TM->tm_year + 1900)) { + if (TM->tm_mon > FEBRUARY && IsLeapYear (TM->tm_year)) { ++TM->tm_yday; } /* Calculate days since 1/1/1970. In the complete epoch (1/1/1970 to - ** somewhere in 2038) all years dividable by 4 are leap years, so - ** dividing by 4 gives the days that must be added cause of leap years. + ** somewhere in 2106) all years dividable by 4 are leap years(1), + ** so dividing by 4 gives the days that must be added because of leap years. ** (and the last leap year before 1970 was 1968) + ** (1): Exception on 2100, which is not leap, and handled just after. */ DayCount = ((unsigned) (TM->tm_year-70)) * 365U + (((unsigned) (TM->tm_year-(68+1))) / 4) + TM->tm_yday; + /* Handle the 2100 exception */ + if (TM->tm_year == 200 && TM->tm_mon > FEBRUARY) { + DayCount--; + } else if (TM->tm_year > 200) { + DayCount--; + } + /* Calculate the weekday */ TM->tm_wday = (JAN_1_1970 + DayCount) % 7; @@ -182,11 +181,4 @@ time_t __fastcall__ mktime (register struct tm* TM) ((unsigned) TM->tm_min) * 60U + ((unsigned) TM->tm_sec) - _tz.timezone; - -Error: - /* Error exit */ - return (time_t) -1L; } - - - diff --git a/test/val/lib_common_gmtime_localtime.c b/test/val/lib_common_gmtime_localtime.c new file mode 100644 index 000000000..143d15831 --- /dev/null +++ b/test/val/lib_common_gmtime_localtime.c @@ -0,0 +1,84 @@ +#include <stdio.h> +#include <string.h> +#include <time.h> + +int fails = 0; + +time_t timestamps[] = { + 0, + 0x2FFFFFFF, + 0x6FFFFFFF, + 0xF48656FF, + 0xF4865700, + 0xFC5A3EFF, + 0x6D6739FF, + 0x6D673A00, + 0xFFFFFFFF, +}; + +/* Values checked against glibc 2.37's implementation of ctime() */ +const char *dates_gmt[] = { + "Thu Jan 1 00:00:00 1970\n", + "Sun Jul 9 16:12:47 1995\n", + "Wed Jul 18 05:49:51 2029\n", + "Thu Dec 31 23:59:59 2099\n", + "Fri Jan 1 00:00:00 2100\n", + "Fri Feb 29 23:59:59 2104\n", + "Tue Feb 29 23:59:59 2028\n", + "Wed Mar 1 00:00:00 2028\n", + "Sun Feb 7 06:28:15 2106\n", + NULL +}; + +const char *dates_gmt_plus_one[] = { + "Thu Jan 1 01:00:00 1970\n", + "Sun Jul 9 17:12:47 1995\n", + "Wed Jul 18 06:49:51 2029\n", + "Fri Jan 1 00:59:59 2100\n", + "Fri Jan 1 01:00:00 2100\n", + "Sat Mar 1 00:59:59 2104\n", + "Wed Mar 1 00:59:59 2028\n", + "Wed Mar 1 01:00:00 2028\n", + "Thu Jan 1 00:59:59 1970\n", + NULL +}; + +int main (void) +{ + int i; + + for (i = 0; dates_gmt[i] != NULL; i++) { + struct tm *tm; + char *str; + + /* Check gmtime */ + tm = gmtime(×tamps[i]); + str = asctime(tm); + if (strcmp(str, dates_gmt[i])) { + fails++; + printf("gmtime: Unexpected result for t %lx: Expected \"%s\", got \"%s\"\n", + timestamps[i], dates_gmt[i], str); + } + + /* Check localtime with UTC timezone */ + _tz.timezone = 0; + tm = localtime(×tamps[i]); + str = asctime(tm); + if (strcmp(str, dates_gmt[i])) { + fails++; + printf("localtime: Unexpected result for t %lx: Expected \"%s\", got \"%s\"\n", + timestamps[i], dates_gmt[i], str); + } + + /* Check localtime at UTC+1 */ + _tz.timezone = 3600; + tm = localtime(×tamps[i]); + str = asctime(tm); + if (strcmp(str, dates_gmt_plus_one[i])) { + fails++; + printf("localtime: Unexpected result for t %lx: Expected \"%s\", got \"%s\"\n", + timestamps[i], dates_gmt_plus_one[i], str); + } + } + return fails; +} diff --git a/test/val/lib_common_mktime.c b/test/val/lib_common_mktime.c new file mode 100644 index 000000000..832ce3834 --- /dev/null +++ b/test/val/lib_common_mktime.c @@ -0,0 +1,61 @@ +#include <stdio.h> +#include <string.h> +#include <time.h> + +int fails = 0; + +time_t timestamps[] = { + 0, + 0x2FFFFFFF, + 0x6FFFFFFF, + 0xF48656FF, + 0xF4865700, + 0xFC5A3EFF, + 0x6D6739FF, + 0x6D673A00, + 0xFFFFFFFF, +}; + +/* Values checked against glibc 2.37's implementation of ctime() */ +const char *dates[] = { + "Thu Jan 1 00:00:00 1970\n", + "Sun Jul 9 16:12:47 1995\n", + "Wed Jul 18 05:49:51 2029\n", + "Thu Dec 31 23:59:59 2099\n", + "Fri Jan 1 00:00:00 2100\n", + "Fri Feb 29 23:59:59 2104\n", + "Tue Feb 29 23:59:59 2028\n", + "Wed Mar 1 00:00:00 2028\n", + "Sun Feb 7 06:28:15 2106\n", + NULL +}; + +int main (void) +{ + struct tm tm; + time_t t; + int i; + + /* Verify conversion both ways */ + for (t = 0x0FFFFFFF; ; t += 0x10000000) { + struct tm *tm = gmtime(&t); + time_t r = mktime(tm); + if (t != r) { + fails++; + printf("Unexpected result for t %lx: %lx\n", t, r); + } + if (t == 0xFFFFFFFF) { + break; + } + } + + for (i = 0; dates[i] != NULL; i++) { + char *str = ctime(×tamps[i]); + if (strcmp(str, dates[i])) { + fails++; + printf("Unexpected result for t %lx: Expected \"%s\", got \"%s\"\n", + timestamps[i], dates[i], str); + } + } + return fails; +} From 2564aaa12c92e188f748ae59b7aae58c0c1dc4bd Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 10 Jan 2024 04:48:27 +0800 Subject: [PATCH 2341/2710] Refix for diagnosis on expected expressions. --- src/cc65/expr.c | 2 +- test/ref/bug1889-missing-identifier.c | 2 ++ test/ref/bug1889-missing-identifier.cref | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 0f3a6e110..3ef141300 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1408,7 +1408,7 @@ static void Primary (ExprDesc* E) } else { /* Let's see if this is a C99-style declaration */ DeclSpec Spec; - ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT, SC_AUTO); + ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_NONE, SC_AUTO); if ((Spec.Flags & DS_TYPE_MASK) != DS_NONE) { Error ("Mixed declarations and code are not supported in cc65"); diff --git a/test/ref/bug1889-missing-identifier.c b/test/ref/bug1889-missing-identifier.c index d9cf4aa52..a8140565f 100644 --- a/test/ref/bug1889-missing-identifier.c +++ b/test/ref/bug1889-missing-identifier.c @@ -3,6 +3,8 @@ int enum { a } x; inline enum { b }; +_Static_assert(); + int main(void) { return 0; diff --git a/test/ref/bug1889-missing-identifier.cref b/test/ref/bug1889-missing-identifier.cref index 7381d2032..6317657d1 100644 --- a/test/ref/bug1889-missing-identifier.cref +++ b/test/ref/bug1889-missing-identifier.cref @@ -1,3 +1,4 @@ bug1889-missing-identifier.c:3: Error: Identifier or ';' expected after declaration specifiers bug1889-missing-identifier.c:3: Warning: Implicit 'int' is an obsolete feature bug1889-missing-identifier.c:4: Error: Declaration specifier or identifier expected +bug1889-missing-identifier.c:6: Error: Expression expected From 94dfc08c0e439b46b0f1a0e625bca9609b02ff94 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 10 Jan 2024 04:43:50 +0800 Subject: [PATCH 2342/2710] Fixed false "Non constant initializers" error messages on wrong places, which could be resulted from failed array declarations etc. --- src/cc65/expr.c | 12 +++++++++++- test/ref/custom-reference-error.c | 5 ++++- test/ref/custom-reference-error.cref | 3 ++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 3ef141300..9cf05d2dc 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -4305,8 +4305,13 @@ ExprDesc NoCodeConstExpr (void (*Func) (ExprDesc*)) if (!ED_IsConst (&Expr) || !ED_CodeRangeIsEmpty (&Expr)) { Error ("Constant expression expected"); /* To avoid any compiler errors, make the expression a valid const */ - Expr.Flags &= E_MASK_RTYPE | E_MASK_KEEP_RESULT; + Expr.Flags &= E_MASK_RTYPE | E_MASK_KEEP_MAKE; Expr.Flags |= E_LOC_NONE; + + /* Remove any non-constant code generated */ + if (!ED_CodeRangeIsEmpty (&Expr)) { + RemoveCodeRange (&Expr.Start, &Expr.End); + } } /* Return by value */ @@ -4331,6 +4336,11 @@ ExprDesc NoCodeConstAbsIntExpr (void (*Func) (ExprDesc*)) Error ("Constant integer expression expected"); /* To avoid any compiler errors, make the expression a valid const */ ED_MakeConstAbsInt (&Expr, 1); + + /* Remove any non-constant code generated */ + if (!ED_CodeRangeIsEmpty (&Expr)) { + RemoveCodeRange (&Expr.Start, &Expr.End); + } } /* Return by value */ diff --git a/test/ref/custom-reference-error.c b/test/ref/custom-reference-error.c index a7c1b6c56..e98fb024d 100644 --- a/test/ref/custom-reference-error.c +++ b/test/ref/custom-reference-error.c @@ -14,7 +14,7 @@ */ typedef short return_t; -#error /* produce an error */ +#error This is an/* produce an error */error return_t main(int argc, char* argv[]) { @@ -22,3 +22,6 @@ return_t main(int argc, char* argv[]) n = 0; /* produce an error */ /* produce a warning */ } + +int arr[main(0, 0)]; /* produce an error */ +int b = 0; diff --git a/test/ref/custom-reference-error.cref b/test/ref/custom-reference-error.cref index b21c72dce..9ffa581cd 100644 --- a/test/ref/custom-reference-error.cref +++ b/test/ref/custom-reference-error.cref @@ -1,6 +1,7 @@ -custom-reference-error.c:17: Error: #error +custom-reference-error.c:17: Error: #error: This is an error custom-reference-error.c:21: Error: Call to undeclared function 'printf' custom-reference-error.c:22: Error: Undeclared identifier 'n' custom-reference-error.c:24: Warning: Control reaches end of non-void function [-Wreturn-type] custom-reference-error.c:24: Warning: Parameter 'argc' is never used custom-reference-error.c:24: Warning: Parameter 'argv' is never used +custom-reference-error.c:26: Error: Constant integer expression expected From 8e43c4706f0b7cffa34155af8a2705a2c7ef8aae Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 10 Jan 2024 04:50:42 +0800 Subject: [PATCH 2343/2710] Added hierarchy info about source file inclusion in diagnostic output. Fixed presumed names of source files in disgnosis. Fixed line number of source files in debug output. --- src/cc65/codeseg.c | 2 +- src/cc65/error.c | 123 +++++++++++++++++++++++---------- src/cc65/error.h | 7 +- src/cc65/input.c | 165 +++++++++++++++++++++++++++++++++++++++----- src/cc65/input.h | 24 +++++-- src/cc65/lineinfo.c | 66 ++++++++++++++---- src/cc65/lineinfo.h | 41 ++++++++--- src/cc65/preproc.c | 8 +-- 8 files changed, 347 insertions(+), 89 deletions(-) diff --git a/src/cc65/codeseg.c b/src/cc65/codeseg.c index 9f1bf4cc5..f4970b586 100644 --- a/src/cc65/codeseg.c +++ b/src/cc65/codeseg.c @@ -1471,7 +1471,7 @@ void CS_Output (CodeSeg* S) /* Add line debug info */ if (DebugInfo) { WriteOutput ("\t.dbg\tline, \"%s\", %u\n", - GetInputName (LI), GetInputLine (LI)); + GetActualFileName (LI), GetActualLineNum (LI)); } } /* Output the code */ diff --git a/src/cc65/error.c b/src/cc65/error.c index 5cd29b388..d6e7d7cbd 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -120,13 +120,46 @@ Collection DiagnosticStrBufs; +void PrintFileInclusionInfo (const LineInfo* LI) +/* Print hierarchy of file inclusion */ +{ + if (LI->IncFiles != 0) { + unsigned FileCount = CollCount (LI->IncFiles); + if (FileCount > 0) { + const char* Str = "In file included from %s:%u%c\n"; + + while (FileCount-- > 0) { + LineInfoFile* LIF = CollAtUnchecked (LI->IncFiles, FileCount); + char C = FileCount > 0 ? ',' : ':'; + + fprintf (stderr, Str, LIF->Name, LIF->LineNum, C); + Str = " from %s:%u%c\n"; + } + } + } +} + + + +static LineInfo* GetDiagnosticLI (void) +/* Get the line info where the diagnostic info refers to */ +{ + if (CurTok.LI) { + return CurTok.LI; + } else { + return GetCurLineInfo (); + } +} + + + static const char* GetDiagnosticFileName (void) /* Get the source file name where the diagnostic info refers to */ { if (CurTok.LI) { - return GetInputName (CurTok.LI); + return GetPresumedFileName (CurTok.LI); } else { - return GetCurrentFilename (); + return GetCurrentFileName (); } } @@ -136,7 +169,7 @@ static unsigned GetDiagnosticLineNum (void) /* Get the source line number where the diagnostic info refers to */ { if (CurTok.LI) { - return GetInputLine (CurTok.LI); + return GetPresumedLineNum (CurTok.LI); } else { return GetCurrentLineNum (); } @@ -199,10 +232,18 @@ void Internal (const char* Format, ...) -static void IntError (errcat_t EC, const char* Filename, unsigned LineNo, const char* Msg, va_list ap) +static void IntError (errcat_t EC, LineInfo* LI, const char* Msg, va_list ap) /* Print an error message - internal function */ { - fprintf (stderr, "%s:%u: Error: ", Filename, LineNo); + unsigned LineNo = GetPresumedLineNum (LI); + + /* Print file inclusion if appropriate */ + if (HasFileInclusionChanged (LI)) { + PrintFileInclusionInfo (LI); + } + RememberCheckedLI (LI); + + fprintf (stderr, "%s:%u: Error: ", GetPresumedFileName (LI), LineNo); vfprintf (stderr, Msg, ap); fprintf (stderr, "\n"); @@ -229,23 +270,23 @@ static void IntError (errcat_t EC, const char* Filename, unsigned LineNo, const -void Error (const char* Format, ...) -/* Print an error message */ +void LIError (errcat_t EC, LineInfo* LI, const char* Format, ...) +/* Print an error message with the line info given explicitly */ { va_list ap; va_start (ap, Format); - IntError (EC_PARSER, GetDiagnosticFileName (), GetDiagnosticLineNum (), Format, ap); + IntError (EC, LI, Format, ap); va_end (ap); } -void LIError (errcat_t EC, const LineInfo* LI, const char* Format, ...) -/* Print an error message with the line info given explicitly */ +void Error (const char* Format, ...) +/* Print an error message */ { va_list ap; va_start (ap, Format); - IntError (EC, GetInputName (LI), GetInputLine (LI), Format, ap); + IntError (EC_PARSER, GetDiagnosticLI (), Format, ap); va_end (ap); } @@ -256,7 +297,7 @@ void PPError (const char* Format, ...) { va_list ap; va_start (ap, Format); - IntError (EC_PP, GetCurrentFilename(), GetCurrentLineNum(), Format, ap); + IntError (EC_PP, GetCurLineInfo (), Format, ap); va_end (ap); } @@ -268,17 +309,25 @@ void PPError (const char* Format, ...) -static void IntWarning (errcat_t EC, const char* Filename, unsigned LineNo, const char* Msg, va_list ap) +static void IntWarning (errcat_t EC, LineInfo* LI, const char* Msg, va_list ap) /* Print a warning message - internal function */ { if (IS_Get (&WarningsAreErrors)) { /* Treat the warning as an error */ - IntError (EC, Filename, LineNo, Msg, ap); + IntError (EC, LI, Msg, ap); } else if (IS_Get (&WarnEnable)) { - fprintf (stderr, "%s:%u: Warning: ", Filename, LineNo); + unsigned LineNo = GetPresumedLineNum (LI); + + /* Print file inclusion if appropriate */ + if (HasFileInclusionChanged (LI)) { + PrintFileInclusionInfo (LI); + } + RememberCheckedLI (LI); + + fprintf (stderr, "%s:%u: Warning: ", GetPresumedFileName (LI), LineNo); vfprintf (stderr, Msg, ap); fprintf (stderr, "\n"); @@ -297,23 +346,23 @@ static void IntWarning (errcat_t EC, const char* Filename, unsigned LineNo, cons -void Warning (const char* Format, ...) -/* Print a warning message */ +void LIWarning (errcat_t EC, LineInfo* LI, const char* Format, ...) +/* Print a warning message with the line info given explicitly */ { va_list ap; va_start (ap, Format); - IntWarning (EC_PARSER, GetDiagnosticFileName (), GetDiagnosticLineNum (), Format, ap); + IntWarning (EC, LI, Format, ap); va_end (ap); } -void LIWarning (errcat_t EC, const LineInfo* LI, const char* Format, ...) -/* Print a warning message with the line info given explicitly */ +void Warning (const char* Format, ...) +/* Print a warning message */ { va_list ap; va_start (ap, Format); - IntWarning (EC, GetInputName (LI), GetInputLine (LI), Format, ap); + IntWarning (EC_PARSER, GetDiagnosticLI (), Format, ap); va_end (ap); } @@ -324,7 +373,7 @@ void PPWarning (const char* Format, ...) { va_list ap; va_start (ap, Format); - IntWarning (EC_PP, GetCurrentFilename(), GetCurrentLineNum(), Format, ap); + IntWarning (EC_PP, GetCurLineInfo (), Format, ap); va_end (ap); } @@ -365,33 +414,33 @@ void ListWarnings (FILE* F) -static void IntNote (const char* Filename, unsigned LineNo, const char* Msg, va_list ap) +static void IntNote (const LineInfo* LI, const char* Msg, va_list ap) /* Print a note message - internal function */ { - fprintf (stderr, "%s:%u: Note: ", Filename, LineNo); + fprintf (stderr, "%s:%u: Note: ", GetPresumedFileName (LI), GetPresumedLineNum (LI)); vfprintf (stderr, Msg, ap); fprintf (stderr, "\n"); } -void Note (const char* Format, ...) -/* Print a note message */ -{ - va_list ap; - va_start (ap, Format); - IntNote (GetDiagnosticFileName (), GetDiagnosticLineNum (), Format, ap); - va_end (ap); -} - - - void LINote (const LineInfo* LI, const char* Format, ...) /* Print a note message with the line info given explicitly */ { va_list ap; va_start (ap, Format); - IntNote (GetInputName (LI), GetInputLine (LI), Format, ap); + IntNote (LI, Format, ap); + va_end (ap); +} + + + +void Note (const char* Format, ...) +/* Print a note message */ +{ + va_list ap; + va_start (ap, Format); + IntNote (GetDiagnosticLI (), Format, ap); va_end (ap); } @@ -402,7 +451,7 @@ void PPNote (const char* Format, ...) { va_list ap; va_start (ap, Format); - IntNote (GetCurrentFilename(), GetCurrentLineNum(), Format, ap); + IntNote (GetDiagnosticLI (), Format, ap); va_end (ap); } diff --git a/src/cc65/error.h b/src/cc65/error.h index 4dce6cf91..5af862f9f 100644 --- a/src/cc65/error.h +++ b/src/cc65/error.h @@ -100,6 +100,9 @@ struct StrBuf; +void PrintFileInclusionInfo (const LineInfo* LI); +/* Print hierarchy of file inclusion */ + void Fatal (const char* Format, ...) attribute ((noreturn, format (printf, 1, 2))); /* Print a message about a fatal error and die */ @@ -109,7 +112,7 @@ void Internal (const char* Format, ...) attribute ((noreturn, format (printf, 1, void Error (const char* Format, ...) attribute ((format (printf, 1, 2))); /* Print an error message */ -void LIError (errcat_t EC, const LineInfo* LI, const char* Format, ...) attribute ((format (printf, 3, 4))); +void LIError (errcat_t EC, LineInfo* LI, const char* Format, ...) attribute ((format (printf, 3, 4))); /* Print an error message with the line info given explicitly */ void PPError (const char* Format, ...) attribute ((format (printf, 1, 2))); @@ -118,7 +121,7 @@ void PPError (const char* Format, ...) attribute ((format (printf, 1, 2))); void Warning (const char* Format, ...) attribute ((format (printf, 1, 2))); /* Print a warning message */ -void LIWarning (errcat_t EC, const LineInfo* LI, const char* Format, ...) attribute ((format (printf, 3, 4))); +void LIWarning (errcat_t EC, LineInfo* LI, const char* Format, ...) attribute ((format (printf, 3, 4))); /* Print a warning message with the line info given explicitly */ void PPWarning (const char* Format, ...) attribute ((format (printf, 1, 2))); diff --git a/src/cc65/input.c b/src/cc65/input.c index 89c471687..fcf7f32f3 100644 --- a/src/cc65/input.c +++ b/src/cc65/input.c @@ -91,10 +91,11 @@ struct IFile { /* Struct that describes an active input file */ typedef struct AFile AFile; struct AFile { - unsigned Line; /* Line number for this file */ + unsigned LineNum; /* Actual line number for this file */ FILE* F; /* Input file stream */ IFile* Input; /* Points to corresponding IFile */ int SearchPath; /* True if we've added a path for this file */ + unsigned LineOffs; /* Offset to presumed line number for this file */ char* PName; /* Presumed name of the file */ PPIfStack IfStack; /* PP #if stack */ int MissingNL; /* Last input line was missing a newline */ @@ -111,6 +112,7 @@ static Collection* CurrentInputStack; /* Counter for the __COUNTER__ macro */ static unsigned MainFileCounter; +LineInfo* PrevDiagnosticLI; @@ -163,10 +165,11 @@ static AFile* NewAFile (IFile* IF, FILE* F) AFile* AF = (AFile*) xmalloc (sizeof (AFile)); /* Initialize the fields */ - AF->Line = 0; - AF->F = F; - AF->Input = IF; - AF->PName = 0; + AF->LineNum = 0; + AF->F = F; + AF->Input = IF; + AF->LineOffs = 0; + AF->PName = 0; AF->IfStack.Index = -1; AF->MissingNL = 0; @@ -285,7 +288,7 @@ void OpenMainFile (const char* Name) /* Update the line infos, so we have a valid line info even at start of ** the main file before the first line is read. */ - UpdateLineInfo (MainFile->Input, MainFile->Line, Line); + UpdateCurrentLineInfo (Line); /* Initialize the __COUNTER__ counter */ MainFileCounter = 0; @@ -553,7 +556,7 @@ int NextLine (void) if (!Input->MissingNL || SB_NotEmpty (Line)) { /* Accept files without a newline at the end */ - ++Input->Line; + ++Input->LineNum; /* Assume no new line */ Input->MissingNL = 1; @@ -569,7 +572,7 @@ int NextLine (void) if (C == '\n') { /* We got a new line */ - ++Input->Line; + ++Input->LineNum; /* If the \n is preceeded by a \r, remove the \r, so we can read ** DOS/Windows files under *nix. @@ -605,7 +608,7 @@ int NextLine (void) InitLine (Line); /* Create line information for this line */ - UpdateLineInfo (Input->Input, Input->Line, Line); + UpdateCurrentLineInfo (Line); /* Done */ return C != EOF || SB_NotEmpty (Line); @@ -645,15 +648,145 @@ int PreprocessNextLine (void) -const char* GetInputFile (const struct IFile* IF) -/* Return a filename from an IFile struct */ +static LineInfoFile* NewLineInfoFile (const AFile* AF) +{ + const char* Name = AF->PName == 0 ? AF->Input->Name : AF->PName; + unsigned Len = strlen (Name); + + /* Allocate memory for the file info and the file name */ + LineInfoFile* LIF = xmalloc (sizeof (LineInfoFile) + Len); + + /* Copy info */ + LIF->InputFile = AF->Input; + LIF->LineNum = AF->LineNum + AF->LineOffs; + memcpy (LIF->Name, Name, Len + 1); + + return LIF; +} + + + +void GetFileInclusionInfo (struct LineInfo* LI) +/* Get info about source file inclusion for LineInfo struct */ +{ + unsigned FileCount = CollCount (&AFiles); + + CHECK (FileCount > 0); + + /* Get the correct index */ + --FileCount; + + if (LI->IncFiles != 0) { + FreeFileInclusionInfo (LI); + } + LI->IncFiles = 0; + + if (LI->File != 0) { + xfree (LI->File); + } + + /* Copy info from the AFile */ + LI->File = NewLineInfoFile (CollAtUnchecked (&AFiles, FileCount)); + + /* Remember the actual line number */ + LI->ActualLineNum = ((AFile*)CollAtUnchecked (&AFiles, FileCount))->LineNum; + + if (FileCount > 0) { + /* The file is included from another */ + + /* Always use a new collection */ + LI->IncFiles = NewCollection (); + + while (FileCount-- > 0) { + /* Copy info from the AFile */ + LineInfoFile* LIF = NewLineInfoFile (CollAtUnchecked (&AFiles, FileCount)); + + /* Add this file */ + CollAppend (LI->IncFiles, LIF); + } + } +} + + + +void FreeFileInclusionInfo (struct LineInfo* LI) +/* Free info about source file inclusion for LineInfo struct */ +{ + if (LI->File != 0) { + xfree (LI->File); + LI->File = 0; + } + + if (LI->IncFiles != 0) { + unsigned I; + for (I = 0; I < CollCount (LI->IncFiles); ++I) { + CollAtUnchecked (LI->IncFiles, I); + } + FreeCollection (LI->IncFiles); + LI->IncFiles = 0; + } +} + + + +static int IsDifferentLineInfoFile (const LineInfoFile* Lhs, const LineInfoFile* Rhs) +/* Return true if the two files are different */ +{ + /* If the input files are the same but their presumed names are different, + ** we still consider the files same. + */ + return Lhs->InputFile != Rhs->InputFile || Lhs->LineNum != Rhs->LineNum; +} + + + +int HasFileInclusionChanged (const struct LineInfo* LI) +/* Return true if file inclusion has changed from last time */ +{ + if (LI->File != 0) { + LineInfo* PrevLI = GetPrevCheckedLI (); + + if (LI == PrevLI) { + return 0; + } + + if (PrevLI == 0) { + return 1; + } + + if (LI->IncFiles != 0) { + unsigned I; + + if (PrevLI->IncFiles == 0 || + CollCount (LI->IncFiles) != CollCount (PrevLI->IncFiles)) { + return 1; + } + + for (I = 0; I < CollCount (LI->IncFiles); ++I) { + /* If this refers to a different file, then the inclusion has changed */ + if (IsDifferentLineInfoFile (CollAtUnchecked (LI->IncFiles, I), + CollAtUnchecked (PrevLI->IncFiles, I))) { + return 1; + } + } + } + } + + /* Unchanged */ + return 0; +} + + + +const char* GetInputFileName (const struct IFile* IF) +/* Return the name of the file from an IFile struct */ { return IF->Name; } -const char* GetCurrentFilename (void) +const char* GetCurrentFileName (void) /* Return the name of the current input file */ { unsigned AFileCount = CollCount (&AFiles); @@ -674,7 +807,7 @@ unsigned GetCurrentLineNum (void) unsigned AFileCount = CollCount (&AFiles); if (AFileCount > 0) { const AFile* AF = CollLast (&AFiles); - return AF->Line; + return AF->LineNum + AF->LineOffs; } else { /* No open file */ return 0; @@ -684,18 +817,18 @@ unsigned GetCurrentLineNum (void) void SetCurrentLineNum (unsigned LineNum) -/* Set the line number in the current input file */ +/* Set the presumed line number in the current input file */ { unsigned AFileCount = CollCount (&AFiles); if (AFileCount > 0) { AFile* AF = CollLast (&AFiles); - AF->Line = LineNum; + AF->LineOffs = LineNum - AF->LineNum; } } -void SetCurrentFilename (const char* Name) +void SetCurrentFileName (const char* Name) /* Set the presumed name of the current input file */ { unsigned AFileCount = CollCount (&AFiles); diff --git a/src/cc65/input.h b/src/cc65/input.h index 9457bdf9b..9a5a76949 100644 --- a/src/cc65/input.h +++ b/src/cc65/input.h @@ -52,6 +52,10 @@ +/* Forwards */ +struct IFile; +struct LineInfo; + /* An enum that describes different types of input files. The members are ** choosen so that it is possible to combine them to bitsets */ @@ -61,9 +65,6 @@ typedef enum { IT_USRINC = 0x04, /* User include file (using "") */ } InputType; -/* Forward for an IFile structure */ -struct IFile; - /* The current input line */ extern StrBuf* Line; @@ -125,10 +126,19 @@ int PreprocessNextLine (void); ** main file. */ -const char* GetInputFile (const struct IFile* IF); -/* Return a filename from an IFile struct */ +void GetFileInclusionInfo (struct LineInfo* LI); +/* Get info about source file inclusion for LineInfo struct */ -const char* GetCurrentFilename (void); +void FreeFileInclusionInfo (struct LineInfo* LI); +/* Free info about source file inclusion for LineInfo struct */ + +int HasFileInclusionChanged (const struct LineInfo* LI); +/* Return true if file inclusion has changed from last time */ + +const char* GetInputFileName (const struct IFile* IF); +/* Return the name of the file from an IFile struct */ + +const char* GetCurrentFileName (void); /* Return the name of the current input file */ unsigned GetCurrentLineNum (void); @@ -137,7 +147,7 @@ unsigned GetCurrentLineNum (void); void SetCurrentLineNum (unsigned LineNum); /* Set the line number in the current input file */ -void SetCurrentFilename (const char* Name); +void SetCurrentFileName (const char* Name); /* Set the presumed name of the current input file */ unsigned GetCurrentCounter (void); diff --git a/src/cc65/lineinfo.c b/src/cc65/lineinfo.c index f5c2e2689..8639d27e9 100644 --- a/src/cc65/lineinfo.c +++ b/src/cc65/lineinfo.c @@ -56,6 +56,9 @@ /* Global pointer to line information for the current line */ static LineInfo* CurLineInfo = 0; +/* Global pointer to previously checked line information about file inclusion hierarchy */ +static LineInfo* PrevCheckedLI = 0; + /*****************************************************************************/ @@ -64,7 +67,7 @@ static LineInfo* CurLineInfo = 0; -static LineInfo* NewLineInfo (struct IFile* F, unsigned LineNum, const StrBuf* Line) +static LineInfo* NewLineInfo (const StrBuf* Line) /* Create and return a new line info. Ref count will be 1. */ { unsigned Len; @@ -87,8 +90,9 @@ static LineInfo* NewLineInfo (struct IFile* F, unsigned LineNum, const StrBuf* L /* Initialize the fields */ LI->RefCount = 1; - LI->InputFile = F; - LI->LineNum = LineNum; + LI->File = 0; + LI->IncFiles = 0; + GetFileInclusionInfo (LI); /* Copy the line, replacing tabs by spaces in the given line since tabs ** will give rather arbitrary results when used in the output later, and @@ -117,6 +121,7 @@ static LineInfo* NewLineInfo (struct IFile* F, unsigned LineNum, const StrBuf* L static void FreeLineInfo (LineInfo* LI) /* Free a LineInfo structure */ { + FreeFileInclusionInfo (LI); xfree (LI); } @@ -156,8 +161,8 @@ LineInfo* GetCurLineInfo (void) -void UpdateLineInfo (struct IFile* F, unsigned LineNum, const StrBuf* Line) -/* Update the line info - called if a new line is read */ +void UpdateCurrentLineInfo (const StrBuf* Line) +/* Update the current line info - called if a new line is read */ { /* If a current line info exists, release it */ if (CurLineInfo) { @@ -172,23 +177,60 @@ void UpdateLineInfo (struct IFile* F, unsigned LineNum, const StrBuf* Line) } /* Create a new line info */ - CurLineInfo = NewLineInfo (F, LineNum, Line); + CurLineInfo = NewLineInfo (Line); } -const char* GetInputName (const LineInfo* LI) -/* Return the file name from a line info */ +void RememberCheckedLI (LineInfo* LI) +/* Remember the latest checked line info struct */ +{ + if (PrevCheckedLI != LI) { + if (PrevCheckedLI != 0) { + ReleaseLineInfo (PrevCheckedLI); + } + PrevCheckedLI = UseLineInfo (LI); + } +} + + + +LineInfo* GetPrevCheckedLI (void) +/* Get the latest checked line info struct */ +{ + return PrevCheckedLI; +} + + + +const char* GetPresumedFileName (const LineInfo* LI) +/* Return the presumed file name from a line info */ { PRECONDITION (LI != 0); - return GetInputFile (LI->InputFile); + return LI->File->Name; } -unsigned GetInputLine (const LineInfo* LI) -/* Return the line number from a line info */ +unsigned GetPresumedLineNum (const LineInfo* LI) +/* Return the presumed line number from a line info */ { PRECONDITION (LI != 0); - return LI->LineNum; + return LI->File->LineNum; +} + + + +const char* GetActualFileName (const struct LineInfo* LI) +/* Return the actual name of the source file from a line info struct */ +{ + return LI->File != 0 ? GetInputFileName (LI->File->InputFile) : "<out of filescope>"; +} + + + +unsigned GetActualLineNum (const struct LineInfo* LI) +/* Return the actual line number of the source file from a line info struct */ +{ + return LI->ActualLineNum; } diff --git a/src/cc65/lineinfo.h b/src/cc65/lineinfo.h index f365b4f01..02e77cd9c 100644 --- a/src/cc65/lineinfo.h +++ b/src/cc65/lineinfo.h @@ -60,15 +60,24 @@ struct IFile; +/* Struct that describes an input file for line info */ +typedef struct LineInfoFile LineInfoFile; +struct LineInfoFile { + struct IFile* InputFile; /* Points to corresponding IFile */ + unsigned LineNum; /* Presumed line number for this file */ + char Name[1]; /* Presumed name of the file */ +}; + /* The text for the actual line is allocated at the end of the structure, so ** the size of the structure varies. */ typedef struct LineInfo LineInfo; struct LineInfo { - unsigned RefCount; /* Reference counter */ - struct IFile* InputFile; /* Input file for this line */ - unsigned LineNum; /* Line number */ - char Line[1]; /* Source code line */ + unsigned RefCount; /* Reference counter */ + LineInfoFile* File; /* Presumed input files for this line */ + unsigned ActualLineNum; /* Actual line number for this file */ + struct Collection* IncFiles; /* Presumed inclusion input files */ + char Line[1]; /* Text of source code line */ }; @@ -92,14 +101,26 @@ LineInfo* GetCurLineInfo (void); ** increased, use UseLineInfo for that purpose. */ -void UpdateLineInfo (struct IFile* F, unsigned LineNum, const StrBuf* Line); -/* Update the line info - called if a new line is read */ +void UpdateCurrentLineInfo (const StrBuf* Line); +/* Update the current line info - called if a new line is read */ -const char* GetInputName (const LineInfo* LI); -/* Return the file name from a line info */ +void RememberCheckedLI (struct LineInfo* LI); +/* Remember the latest checked line info struct */ -unsigned GetInputLine (const LineInfo* LI); -/* Return the line number from a line info */ +LineInfo* GetPrevCheckedLI (void); +/* Get the latest checked line info struct */ + +const char* GetPresumedFileName (const LineInfo* LI); +/* Return the presumed file name from a line info */ + +unsigned GetPresumedLineNum (const LineInfo* LI); +/* Return the presumed line number from a line info */ + +const char* GetActualFileName (const struct LineInfo* LI); +/* Return the actual name of the source file from a line info struct */ + +unsigned GetActualLineNum (const struct LineInfo* LI); +/* Return the actual line number of the source file from a line info struct */ diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 0a9b94bf2..66cbb2a9d 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -842,7 +842,7 @@ static void AddPreLine (StrBuf* Str) SB_AppendChar (Str, '\n'); } SB_Printf (&Comment, "#line %u \"%s\"\n", - GetCurrentLineNum () - ContinuedLines, GetCurrentFilename ()); + GetCurrentLineNum () - ContinuedLines, GetCurrentFileName ()); SB_Append (Str, &Comment); } else { /* Output new lines */ @@ -2943,7 +2943,7 @@ static void DoLine (void) StrBuf Filename = AUTO_STRBUF_INITIALIZER; if (SB_GetString (Line, &Filename)) { SB_Terminate (&Filename); - SetCurrentFilename (SB_GetConstBuf (&Filename)); + SetCurrentFileName (SB_GetConstBuf (&Filename)); } else { PPError ("Invalid filename for #line directive"); LineNum = 0; @@ -3220,7 +3220,7 @@ void HandleSpecialMacro (Macro* M, const char* Name) } else if (strcmp (Name, "__FILE__") == 0) { /* Replace __FILE__ with the current filename */ StrBuf B = AUTO_STRBUF_INITIALIZER; - SB_InitFromString (&B, GetCurrentFilename ()); + SB_InitFromString (&B, GetCurrentFileName ()); SB_Clear (&M->Replacement); Stringize (&B, &M->Replacement); SB_Done (&B); @@ -3332,7 +3332,7 @@ void Preprocess (void) PLine = InitLine (PLine); if (Verbosity > 1 && SB_NotEmpty (Line)) { - printf ("%s:%u: %.*s\n", GetCurrentFilename (), GetCurrentLineNum (), + printf ("%s:%u: %.*s\n", GetCurrentFileName (), GetCurrentLineNum (), (int) SB_GetLen (Line), SB_GetConstBuf (Line)); } From 2682fc0b7934743f59b564e550b7bc3d262f494e Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 10 Jan 2024 04:51:20 +0800 Subject: [PATCH 2344/2710] Fixed regression on comparison to null pointer. --- src/cc65/expr.c | 18 ++++++------ src/cc65/exprdesc.c | 41 ++++++++++++++++++++++---- src/cc65/exprdesc.h | 16 +++++++++- test/val/nullptr.c | 71 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 130 insertions(+), 16 deletions(-) create mode 100644 test/val/nullptr.c diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 0f3a6e110..74005cb04 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1991,7 +1991,7 @@ void hie10 (ExprDesc* Expr) if (ED_IsConstAbs (Expr)) { /* Constant numeric expression */ Expr->IVal = !Expr->IVal; - } else if (ED_IsAddrExpr (Expr)) { + } else if (ED_IsEntityAddr (Expr)) { /* Address != NULL, so !Address == 0 */ ED_MakeConstBool (Expr, 0); } else { @@ -2445,8 +2445,8 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ } /* Check for numeric constant operands */ - if ((ED_IsAddrExpr (Expr) && ED_IsNullPtr (&Expr2)) || - (ED_IsNullPtr (Expr) && ED_IsAddrExpr (&Expr2))) { + if ((ED_IsEntityAddr (Expr) && ED_IsNullPtr (&Expr2)) || + (ED_IsNullPtr (Expr) && ED_IsEntityAddr (&Expr2))) { /* Object addresses are inequal to null pointer */ Expr->IVal = (Tok != TOK_EQ); @@ -2477,8 +2477,8 @@ static void hie_compare (const GenDesc* Ops, /* List of generators */ pop (ltype); } - } else if (ED_IsAddrExpr (Expr) && - ED_IsAddrExpr (&Expr2) && + } else if (ED_IsEntityAddr (Expr) && + ED_IsEntityAddr (&Expr2) && Expr->Sym == Expr2.Sym) { /* Evaluate the result for static addresses */ @@ -3944,10 +3944,10 @@ static void hieQuest (ExprDesc* Expr) NextToken (); /* Parse second expression. Remember for later if it is a NULL pointer - ** expression, then load it into the primary. + ** constant expression, then load it into the primary. */ ExprWithCheck (hie0, &Expr2); - Expr2IsNULL = ED_IsNullPtr (&Expr2); + Expr2IsNULL = ED_IsNullPtrConstant (&Expr2); if (!IsTypeVoid (Expr2.Type) && ED_YetToLoad (&Expr2) && (!ConstantCond || !ED_IsConst (&Expr2))) { @@ -3991,10 +3991,10 @@ static void hieQuest (ExprDesc* Expr) ConsumeColon (); /* Parse third expression. Remember for later if it is a NULL pointer - ** expression, then load it into the primary. + ** constant expression, then load it into the primary. */ ExprWithCheck (hieQuest, &Expr3); - Expr3IsNULL = ED_IsNullPtr (&Expr3); + Expr3IsNULL = ED_IsNullPtrConstant (&Expr3); if (!IsTypeVoid (Expr3.Type) && ED_YetToLoad (&Expr3) && (!ConstantCond || !ED_IsConst (&Expr3))) { diff --git a/src/cc65/exprdesc.c b/src/cc65/exprdesc.c index a21e56623..08be1091d 100644 --- a/src/cc65/exprdesc.c +++ b/src/cc65/exprdesc.c @@ -255,7 +255,7 @@ int ED_IsConstTrue (const ExprDesc* Expr) { /* Non-zero arithmetics and objects addresses are boolean true */ return (ED_IsConstAbsInt (Expr) && Expr->IVal != 0) || - (ED_IsAddrExpr (Expr)); + ED_IsEntityAddr (Expr); } @@ -331,12 +331,41 @@ int ED_IsZPInd (const ExprDesc* Expr) int ED_IsNullPtr (const ExprDesc* Expr) -/* Return true if the given expression is a NULL pointer constant */ +/* Return true if the given expression is a null pointer. +** Note: A null pointer constant converted to a pointer type is a null pointer. +*/ { - return (Expr->Flags & (E_MASK_LOC|E_MASK_RTYPE)) == - (E_LOC_NONE|E_RTYPE_RVAL) && - Expr->IVal == 0 && - IsClassInt (Expr->Type); + return ED_IsConstAbs (Expr) && + Expr->IVal == 0 && + (IsClassInt (Expr->Type) || IsTypePtr (Expr->Type)); +} + + + +int ED_IsNullPtrConstant (const ExprDesc* Expr) +/* Return true if the given expression is a null pointer constant. +** Note: An integer constant expression with value 0, or such an +** expression cast to void* is a null pointer constant. However, a +** null pointer constant converted to a pointer type is just a null +** pointer, not necessarily a constant in ISO C. +*/ +{ + return ED_IsConstAbs (Expr) && + Expr->IVal == 0 && + (IsClassInt (Expr->Type) || + (IsTypePtr (Expr->Type) && IsTypeVoid (Expr->Type + 1) && + GetQualifier (Expr->Type + 1) == T_QUAL_NONE)); +} + + + +int ED_IsEntityAddr (const ExprDesc* Expr) +/* Return true if the expression denotes the address of an object or function. +*/ +{ + return ED_IsAddrExpr (Expr) && + Expr->Sym != 0 && + (IsClassPtr (Expr->Type) || IsTypeFunc (Expr->Type)); } diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index 148485764..f6009a8a9 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -582,7 +582,21 @@ int ED_IsZPInd (const ExprDesc* Expr); /* Return true if the expression is located on the zeropage */ int ED_IsNullPtr (const ExprDesc* Expr); -/* Return true if the given expression is a NULL pointer constant */ +/* Return true if the given expression is a null pointer. +** Note: A null pointer constant converted to a pointer type is a null pointer. +*/ + +int ED_IsNullPtrConstant (const ExprDesc* Expr); +/* Return true if the given expression is a null pointer constant. +** Note: An integer constant expression with value 0, or such an +** expression cast to void* is a null pointer constant. However, a +** null pointer constant converted to a pointer type is just a null +** pointer, not necessarily a constant in ISO C. +*/ + +int ED_IsEntityAddr (const ExprDesc* Expr); +/* Return true if the expression denotes the address of an object or function. +*/ int ED_IsBool (const ExprDesc* Expr); /* Return true if the expression can be treated as a boolean, that is, it can diff --git a/test/val/nullptr.c b/test/val/nullptr.c new file mode 100644 index 000000000..e64b82ee2 --- /dev/null +++ b/test/val/nullptr.c @@ -0,0 +1,71 @@ +/* Bug # - Pointer compared to null pointer constant */ + +#include <stdio.h> + +unsigned failures; + +struct S { + char a[4]; +} *p; + +#define TEST_NULL(E) \ + do { \ + a = (E) == 0 && !(E); \ + if (!a) \ + { \ + ++failures; \ + printf("failed: " #E " should be null\n"); \ + } \ + } while(0); + +#define TEST_NON_NULL(E) \ + do { \ + a = (E) != 0 && !!(E) && (E); \ + if (!a) \ + { \ + ++failures; \ + printf("failed: " #E " should be non-null\n"); \ + } \ + } while(0); + +int main() +{ + int a; + + /* Null pointer constant (per ISO C) compared equal to null pointer constant */ + TEST_NULL((void*)0) + + /* Null pointer compared equal to null pointer constant */ + TEST_NULL((char*)0) + + /* Null pointer obtained with -> */ + TEST_NULL(((struct S*)0)->a) + + /* Null pointer obtained with -> */ + TEST_NULL(p->a) + + /* Null pointer obtained with cast and -> */ + TEST_NULL(((struct S*)(a = 0))->a) + + /* Null pointer obtained with cast and -> */ + TEST_NULL((a = 0, ((struct S*)a)->a)) + + /* Non-null pointer obtained with cast and -> */ + TEST_NON_NULL(((struct S*)(long)(a = 0x1234))->a) + + /* Non-null pointer obtained with cast and -> */ + TEST_NON_NULL((a = 0x1234, ((struct S*)a)->a)) + + /* Non-null pointer obtained with cast and -> */ + TEST_NON_NULL(((struct S*)&a)->a) + + /* Non-null pointer obtained with cast and -> */ + TEST_NON_NULL(((struct S*)&main)->a) + + if (failures != 0) + { + printf("failures: %u\n", failures); + } + + return failures; +} From 38dac907e8f3afcf269601a977f65a55cb44ad42 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Wed, 10 Jan 2024 04:51:59 +0800 Subject: [PATCH 2345/2710] Cleanup for symbol types and flags. --- src/cc65/asmstmt.c | 25 +++---- src/cc65/compile.c | 57 ++++++++------- src/cc65/declare.c | 38 +++++----- src/cc65/expr.c | 31 ++++---- src/cc65/exprdesc.h | 2 +- src/cc65/goto.c | 2 +- src/cc65/locals.c | 47 ++++++------ src/cc65/pragma.c | 2 +- src/cc65/symentry.c | 97 ++++++++++++++++--------- src/cc65/symentry.h | 142 ++++++++++++++++++++++++++----------- src/cc65/symtab.c | 169 ++++++++++++++++++++++++-------------------- src/cc65/symtab.h | 7 +- 12 files changed, 364 insertions(+), 255 deletions(-) diff --git a/src/cc65/asmstmt.c b/src/cc65/asmstmt.c index 166d05434..8521f0a81 100644 --- a/src/cc65/asmstmt.c +++ b/src/cc65/asmstmt.c @@ -80,9 +80,9 @@ static void AsmErrorSkip (void) -static SymEntry* AsmGetSym (unsigned Arg, unsigned Type) -/* Find the symbol with the name currently in NextTok. The symbol must be of -** the given type. On errors, NULL is returned. +static SymEntry* AsmGetSym (unsigned Arg, int OnStack) +/* Find the symbol with the name currently in NextTok. The symbol must be on +** the stack if OnStack is true. On errors, NULL is returned. */ { SymEntry* Sym; @@ -110,8 +110,8 @@ static SymEntry* AsmGetSym (unsigned Arg, unsigned Type) /* We found the symbol - skip the name token */ NextToken (); - /* Check if we have a global symbol */ - if ((Sym->Flags & Type) != Type) { + /* Check if the symbol is on the stack */ + if ((Sym->Flags & SC_STORAGEMASK) != SC_AUTO ? OnStack : !OnStack) { Error ("Type of argument %u differs from format specifier", Arg); AsmErrorSkip (); return 0; @@ -218,23 +218,24 @@ static void ParseGVarArg (StrBuf* T, unsigned Arg) */ { /* Parse the symbol name parameter and check the type */ - SymEntry* Sym = AsmGetSym (Arg, SC_STATIC); + SymEntry* Sym = AsmGetSym (Arg, 0); if (Sym == 0) { /* Some sort of error */ return; } - /* Check for external linkage */ - if (Sym->Flags & (SC_EXTERN | SC_STORAGE | SC_FUNC)) { - /* External linkage or a function */ + /* Get the correct asm name */ + if ((Sym->Flags & SC_TYPEMASK) == SC_FUNC || SymIsGlobal (Sym)) { + /* External or internal linkage or a function */ SB_AppendChar (T, '_'); SB_AppendStr (T, Sym->Name); - } else if (Sym->Flags & SC_REGISTER) { + } else if ((Sym->Flags & SC_STORAGEMASK) == SC_REGISTER) { + /* Register variable */ char Buf[32]; xsprintf (Buf, sizeof (Buf), "regbank+%d", Sym->V.R.RegOffs); SB_AppendStr (T, Buf); } else { - /* Static variable */ + /* Local static variable */ SB_AppendStr (T, LocalDataLabelName (Sym->V.L.Label)); } } @@ -248,7 +249,7 @@ static void ParseLVarArg (StrBuf* T, unsigned Arg) char Buf [16]; /* Parse the symbol name parameter and check the type */ - SymEntry* Sym = AsmGetSym (Arg, SC_AUTO); + SymEntry* Sym = AsmGetSym (Arg, 1); if (Sym == 0) { /* Some sort of error */ return; diff --git a/src/cc65/compile.c b/src/cc65/compile.c index aaa017453..108c80a28 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -121,15 +121,13 @@ static void Parse (void) } /* Read the declaration specifier */ - ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT, SC_EXTERN | SC_STATIC); + ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT, SC_NONE); /* Don't accept illegal storage classes */ - if ((Spec.StorageClass & SC_TYPEMASK) == 0) { - if ((Spec.StorageClass & SC_AUTO) != 0 || - (Spec.StorageClass & SC_REGISTER) != 0) { - Error ("Illegal storage class"); - Spec.StorageClass = SC_EXTERN | SC_STATIC; - } + if ((Spec.StorageClass & SC_STORAGEMASK) == SC_AUTO || + (Spec.StorageClass & SC_STORAGEMASK) == SC_REGISTER) { + Error ("Illegal storage class"); + Spec.StorageClass &= ~SC_STORAGEMASK; } /* Check if this is only a type declaration */ @@ -172,26 +170,26 @@ static void Parse (void) ** - if the storage class is explicitly specified as static, ** - or if there is an initialization. ** - ** This means that "extern int i;" will not get storage allocated. + ** This means that "extern int i;" will not get storage allocated + ** in this translation unit. */ - if ((Decl.StorageClass & SC_FUNC) != SC_FUNC && + if ((Decl.StorageClass & SC_TYPEMASK) != SC_FUNC && (Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { - if ((Spec.Flags & DS_DEF_STORAGE) != 0 || - (Decl.StorageClass & (SC_EXTERN|SC_STATIC)) == SC_STATIC || - ((Decl.StorageClass & SC_EXTERN) != 0 && + /* The variable is visible in the file scope */ + if ((Decl.StorageClass & SC_STORAGEMASK) == SC_NONE || + (Decl.StorageClass & SC_STORAGEMASK) == SC_STATIC || + ((Decl.StorageClass & SC_STORAGEMASK) == SC_EXTERN && CurTok.Tok == TOK_ASSIGN)) { - /* We will allocate storage */ - Decl.StorageClass |= SC_STORAGE; - } else { - /* It's a declaration */ - Decl.StorageClass |= SC_DECL; + /* We will allocate storage in this translation unit */ + Decl.StorageClass |= SC_TU_STORAGE; } } /* If this is a function declarator that is not followed by a comma ** or semicolon, it must be followed by a function body. */ - if ((Decl.StorageClass & SC_FUNC) != 0) { + if ((Decl.StorageClass & SC_TYPEMASK) == SC_FUNC) { + /* The function is now visible in the file scope */ if (CurTok.Tok == TOK_LCURLY) { /* A definition */ Decl.StorageClass |= SC_DEF; @@ -205,8 +203,6 @@ static void Parse (void) } } else { /* Just a declaration */ - Decl.StorageClass |= SC_DECL; - FuncDef = GetFuncDesc (Decl.Type); if ((FuncDef->Flags & (FD_EMPTY | FD_OLDSTYLE)) == FD_OLDSTYLE) { /* A parameter list without types is only allowed in a @@ -224,7 +220,7 @@ static void Parse (void) SymUseAttr (Sym, &Decl); /* Reserve storage for the variable if we need to */ - if (Decl.StorageClass & SC_STORAGE) { + if (Decl.StorageClass & SC_TU_STORAGE) { /* Get the size of the variable */ unsigned Size = SizeOf (Decl.Type); @@ -327,9 +323,13 @@ static void Parse (void) } /* Make the symbol zeropage according to the segment address size */ - if ((Sym->Flags & SC_STATIC) != 0) { - if (GetSegAddrSize (GetSegName (CS->CurDSeg)) == ADDR_SIZE_ZP) { - Sym->Flags |= SC_ZEROPAGE; + if ((Sym->Flags & SC_TYPEMASK) == SC_NONE) { + if (SymIsGlobal (Sym) || + (Sym->Flags & SC_STORAGEMASK) == SC_STATIC || + (Sym->Flags & SC_STORAGEMASK) == SC_REGISTER) { + if (GetSegAddrSize (GetSegName (CS->CurDSeg)) == ADDR_SIZE_ZP) { + Sym->Flags |= SC_ZEROPAGE; + } } } @@ -517,7 +517,10 @@ void Compile (const char* FileName) ** global variables. */ for (Entry = GetGlobalSymTab ()->SymHead; Entry; Entry = Entry->NextSym) { - if ((Entry->Flags & (SC_STORAGE | SC_DEF | SC_STATIC)) == (SC_STORAGE | SC_STATIC)) { + /* Is it a global (with or without static) tentative declaration of + ** an uninitialized variable? + */ + if ((Entry->Flags & (SC_TU_STORAGE | SC_DEF)) == SC_TU_STORAGE) { /* Assembly definition of uninitialized global variable */ SymEntry* TagSym = GetESUTagSym (Entry->Type); unsigned Size = SizeOf (Entry->Type); @@ -552,9 +555,9 @@ void Compile (const char* FileName) Entry->Name, GetFullTypeName (Entry->Type)); } - } else if (!SymIsDef (Entry) && (Entry->Flags & SC_FUNC) == SC_FUNC) { + } else if (!SymIsDef (Entry) && (Entry->Flags & SC_TYPEMASK) == SC_FUNC) { /* Check for undefined functions */ - if ((Entry->Flags & (SC_EXTERN | SC_STATIC)) == SC_STATIC && SymIsRef (Entry)) { + if ((Entry->Flags & SC_STORAGEMASK) == SC_STATIC && SymIsRef (Entry)) { Warning ("Static function '%s' used but never defined", Entry->Name); } diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 2666a8d31..f93305f01 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -91,7 +91,7 @@ static unsigned ParseOneStorageClass (void) switch (CurTok.Tok) { case TOK_EXTERN: - StorageClass = SC_EXTERN | SC_STATIC; + StorageClass = SC_EXTERN; NextToken (); break; @@ -101,7 +101,7 @@ static unsigned ParseOneStorageClass (void) break; case TOK_REGISTER: - StorageClass = SC_REGISTER | SC_STATIC; + StorageClass = SC_REGISTER; NextToken (); break; @@ -136,9 +136,9 @@ static int ParseStorageClass (DeclSpec* Spec) } while (StorageClass != 0) { - if (Spec->StorageClass == 0) { - Spec->StorageClass = StorageClass; - } else if (Spec->StorageClass == StorageClass) { + if ((Spec->StorageClass & SC_STORAGEMASK) == 0) { + Spec->StorageClass |= StorageClass; + } else if ((Spec->StorageClass & SC_STORAGEMASK) == StorageClass) { Warning ("Duplicate storage class specifier"); } else { Error ("Conflicting storage class specifier"); @@ -618,12 +618,12 @@ static SymEntry* ForwardESU (const char* Name, unsigned Flags, unsigned* DSFlags */ SymEntry* TagEntry = FindTagSym (Name); if (TagEntry == 0) { - if ((Flags & SC_ESUTYPEMASK) != SC_ENUM) { + if ((Flags & SC_TYPEMASK) != SC_ENUM) { TagEntry = AddStructSym (Name, Flags, 0, 0, DSFlags); } else { TagEntry = AddEnumSym (Name, Flags, 0, 0, DSFlags); } - } else if ((TagEntry->Flags & SC_TYPEMASK) != (Flags & SC_ESUTYPEMASK)) { + } else if ((TagEntry->Flags & SC_TYPEMASK) != (Flags & SC_TYPEMASK)) { /* Already defined, but not the same type class */ Error ("Symbol '%s' is already different kind", Name); } @@ -798,7 +798,7 @@ static SymEntry* ParseEnumSpec (const char* Name, unsigned* DSFlags) } /* Add an entry of the enumerator to the symbol table */ - AddConstSym (Ident, NewType, SC_ENUMERATOR | SC_CONST, EnumVal); + AddConstSym (Ident, NewType, SC_DEF | SC_ENUMERATOR, EnumVal); /* Use this type for following members */ MemberType = NewType; @@ -1825,8 +1825,8 @@ static void ParseOldStyleParamDeclList (FuncDesc* F attribute ((unused))) /* We accept only auto and register as storage class specifiers, but ** we ignore all this, since we use auto anyway. */ - if ((Spec.StorageClass & SC_AUTO) == 0 && - (Spec.StorageClass & SC_REGISTER) == 0) { + if ((Spec.StorageClass & SC_STORAGEMASK) != SC_AUTO && + (Spec.StorageClass & SC_STORAGEMASK) != SC_REGISTER) { Error ("Illegal storage class"); } @@ -1942,12 +1942,12 @@ static void ParseAnsiParamList (FuncDesc* F) ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_NONE, SC_AUTO); /* We accept only auto and register as storage class specifiers */ - if ((Spec.StorageClass & SC_AUTO) == SC_AUTO) { - Spec.StorageClass = SC_AUTO | SC_PARAM | SC_DEF; - } else if ((Spec.StorageClass & SC_REGISTER) == SC_REGISTER) { - Spec.StorageClass = SC_REGISTER | SC_STATIC | SC_PARAM | SC_DEF; + if ((Spec.StorageClass & SC_STORAGEMASK) == SC_REGISTER) { + Spec.StorageClass = SC_REGISTER | SC_PARAM | SC_DEF; } else { - Error ("Illegal storage class"); + if ((Spec.StorageClass & SC_STORAGEMASK) != SC_AUTO) { + Error ("Illegal storage class"); + } Spec.StorageClass = SC_AUTO | SC_PARAM | SC_DEF; } @@ -2355,7 +2355,9 @@ int ParseDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) D->StorageClass = Spec->StorageClass; /* If we have a function, add a special symbol type */ - if (IsTypeFunc (D->Type)) { + if (Mode != DM_ACCEPT_PARAM_IDENT && + IsTypeFunc (D->Type) && + (D->StorageClass & SC_TYPEMASK) == SC_NONE) { D->StorageClass |= SC_FUNC; } @@ -2479,9 +2481,9 @@ void ParseDeclSpec (DeclSpec* Spec, typespec_t TSFlags, unsigned DefStorage) ParseTypeSpec (Spec, TSFlags | TS_STORAGE_CLASS_SPEC | TS_FUNCTION_SPEC); /* If no explicit storage class is given, use the default */ - if (Spec->StorageClass == 0) { + if ((Spec->StorageClass & SC_STORAGEMASK) == 0) { Spec->Flags |= DS_DEF_STORAGE; - Spec->StorageClass = DefStorage; + Spec->StorageClass |= DefStorage; } } diff --git a/src/cc65/expr.c b/src/cc65/expr.c index 0f3a6e110..64b6d30bf 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1223,8 +1223,8 @@ static void Primary (ExprDesc* E) NextToken (); /* Check for illegal symbol types */ - CHECK ((Sym->Flags & SC_LABEL) != SC_LABEL); - if (Sym->Flags & SC_ESUTYPEMASK) { + CHECK ((Sym->Flags & SC_TYPEMASK) != SC_LABEL); + if ((Sym->Flags & SC_TYPEMASK) == SC_TYPEDEF) { /* Cannot use type symbols */ Error ("Variable identifier expected"); /* Assume an int type to make E valid */ @@ -1244,7 +1244,7 @@ static void Primary (ExprDesc* E) /* Enum or some other numeric constant */ E->Flags = E_LOC_NONE | E_RTYPE_RVAL; E->IVal = Sym->V.ConstVal; - } else if ((Sym->Flags & SC_AUTO) == SC_AUTO) { + } else if ((Sym->Flags & SC_STORAGEMASK) == SC_AUTO) { /* Local variable. If this is a parameter for a variadic ** function, we have to add some address calculations, and the ** address is not const. @@ -1258,26 +1258,25 @@ static void Primary (ExprDesc* E) E->Flags = E_LOC_STACK | E_RTYPE_LVAL; E->IVal = Sym->V.Offs; } - } else if ((Sym->Flags & SC_FUNC) == SC_FUNC) { + } else if ((Sym->Flags & SC_TYPEMASK) == SC_FUNC) { /* Function */ E->Flags = E_LOC_GLOBAL | E_RTYPE_LVAL; E->Name = (uintptr_t) Sym->Name; - } else if ((Sym->Flags & SC_REGISTER) == SC_REGISTER) { + } else if ((Sym->Flags & SC_STORAGEMASK) == SC_REGISTER) { /* Register variable, zero page based */ E->Flags = E_LOC_REGISTER | E_RTYPE_LVAL; E->Name = Sym->V.R.RegOffs; - } else if ((Sym->Flags & SC_STATIC) == SC_STATIC) { - /* Static variable */ - if (Sym->Flags & (SC_EXTERN | SC_STORAGE | SC_DECL)) { - E->Flags = E_LOC_GLOBAL | E_RTYPE_LVAL; - E->Name = (uintptr_t) Sym->Name; - } else { - E->Flags = E_LOC_STATIC | E_RTYPE_LVAL; - E->Name = Sym->V.L.Label; - } - } else { + } else if (SymIsGlobal (Sym)) { + /* Global variable */ + E->Flags = E_LOC_GLOBAL | E_RTYPE_LVAL; + E->Name = (uintptr_t) Sym->Name; + } else if ((Sym->Flags & SC_STORAGEMASK) == SC_STATIC) { /* Local static variable */ E->Flags = E_LOC_STATIC | E_RTYPE_LVAL; + E->Name = Sym->V.L.Label; + } else { + /* Other */ + E->Flags = E_LOC_STATIC | E_RTYPE_LVAL; E->Name = Sym->V.Offs; } @@ -1311,7 +1310,7 @@ static void Primary (ExprDesc* E) } else { Warning ("Call to undeclared function '%s'", Ident); } - Sym = AddGlobalSym (Ident, GetImplicitFuncType(), SC_EXTERN | SC_REF | SC_FUNC); + Sym = AddGlobalSym (Ident, GetImplicitFuncType(), SC_REF | SC_FUNC); E->Type = Sym->Type; E->Flags = E_LOC_GLOBAL | E_RTYPE_RVAL; E->Name = (uintptr_t) Sym->Name; diff --git a/src/cc65/exprdesc.h b/src/cc65/exprdesc.h index 148485764..936bd591d 100644 --- a/src/cc65/exprdesc.h +++ b/src/cc65/exprdesc.h @@ -98,7 +98,7 @@ enum { E_LOC_NONE = 0x0000, /* Pure rvalue with no storage */ E_LOC_ABS = 0x0001, /* Absolute numeric addressed variable */ E_LOC_GLOBAL = 0x0002, /* Global variable */ - E_LOC_STATIC = 0x0004, /* Static variable */ + E_LOC_STATIC = 0x0004, /* Local static variable */ E_LOC_REGISTER = 0x0008, /* Register variable */ E_LOC_STACK = 0x0010, /* Value on the stack */ E_LOC_PRIMARY = 0x0020, /* Temporary in primary register */ diff --git a/src/cc65/goto.c b/src/cc65/goto.c index 44ae0595e..e96ad6c4c 100644 --- a/src/cc65/goto.c +++ b/src/cc65/goto.c @@ -92,7 +92,7 @@ void GotoStatement (void) /* Find array size */ if (!IsTypeArray (arr->Type) || SizeOf (arr->Type) == 0 || - !(arr->Flags & SC_STATIC) || + (arr->Flags & SC_STORAGEMASK) != SC_STATIC || SizeOf (GetElementType(arr->Type)) != 2) { Error ("Expected a static array"); } else if (GetElementCount (arr->Type) > 127) { diff --git a/src/cc65/locals.c b/src/cc65/locals.c index b8738992f..28e263bb8 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -304,7 +304,7 @@ static void ParseAutoDecl (Declarator* Decl) /* Static local variables. */ - Decl->StorageClass = (Decl->StorageClass & ~SC_AUTO) | SC_STATIC; + Decl->StorageClass = (Decl->StorageClass & ~SC_STORAGEMASK) | SC_STATIC; /* Generate a label, but don't define it */ DataLabel = GetLocalDataLabel (); @@ -451,24 +451,27 @@ static int ParseOneDecl (DeclSpec* Spec) /* Read the declarator */ NeedClean = ParseDecl (Spec, &Decl, DM_IDENT_OR_EMPTY); - /* Check if there are any non-extern storage classes set for function - ** declarations. Function can only be declared inside functions with the - ** 'extern' storage class specifier or no storage class specifier at all. + /* Check if there are explicitly specified non-external storage classes + ** for function declarations. */ - if ((Decl.StorageClass & SC_FUNC) == SC_FUNC) { - - /* Check if there are explicitly specified non-external storage classes */ + if ((Decl.StorageClass & SC_TYPEMASK) == SC_FUNC) { + /* Function can only be declared inside functions with the 'extern' + ** storage class specifier or no storage class specifier at all. + ** Note: this declaration is always checked for compatibility with + ** other declarations of the same symbol, but does not necessarily + ** make the symbol globally visible. This is tricky. + */ if ((Spec->Flags & DS_DEF_STORAGE) != DS_DEF_STORAGE && - (Decl.StorageClass & SC_EXTERN) == 0 && + (Decl.StorageClass & SC_STORAGEMASK) != SC_EXTERN && (Decl.StorageClass & SC_STORAGEMASK) != 0) { Error ("Illegal storage class on function"); } /* The default storage class could be wrong. Just clear them */ Decl.StorageClass &= ~SC_STORAGEMASK; - - /* This is always an extern declaration */ - Decl.StorageClass |= SC_DECL | SC_EXTERN; + } else if ((Decl.StorageClass & SC_STORAGEMASK) != SC_EXTERN) { + /* If the symbol is not marked as external, it will be defined now */ + Decl.StorageClass |= SC_DEF; } /* If we don't have a name, this was flagged as an error earlier. @@ -478,12 +481,6 @@ static int ParseOneDecl (DeclSpec* Spec) AnonName (Decl.Ident, "param"); } - /* If the symbol is not marked as external, it will be defined now */ - if ((Decl.StorageClass & SC_DECL) == 0 && - (Decl.StorageClass & SC_EXTERN) == 0) { - Decl.StorageClass |= SC_DEF; - } - /* Handle anything that needs storage (no functions, no typdefs) */ if ((Decl.StorageClass & SC_DEF) == SC_DEF && (Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { @@ -492,20 +489,20 @@ static int ParseOneDecl (DeclSpec* Spec) ** convert the declaration to "auto" if this is not possible. */ int Reg = 0; /* Initialize to avoid gcc complains */ - if ((Decl.StorageClass & SC_REGISTER) != 0 && + if ((Decl.StorageClass & SC_STORAGEMASK) == SC_REGISTER && (Reg = F_AllocRegVar (CurrentFunc, Decl.Type)) < 0) { /* No space for this register variable, convert to auto */ - Decl.StorageClass = (Decl.StorageClass & ~SC_REGISTER) | SC_AUTO; + Decl.StorageClass = (Decl.StorageClass & ~SC_STORAGEMASK) | SC_AUTO; } /* Check the variable type */ - if ((Decl.StorageClass & SC_REGISTER) == SC_REGISTER) { + if ((Decl.StorageClass & SC_STORAGEMASK) == SC_REGISTER) { /* Register variable */ ParseRegisterDecl (&Decl, Reg); - } else if ((Decl.StorageClass & SC_AUTO) == SC_AUTO) { + } else if ((Decl.StorageClass & SC_STORAGEMASK) == SC_AUTO) { /* Auto variable */ ParseAutoDecl (&Decl); - } else if ((Decl.StorageClass & SC_STATIC) == SC_STATIC) { + } else if ((Decl.StorageClass & SC_STORAGEMASK) == SC_STATIC) { /* Static variable */ ParseStaticDecl (&Decl); } else { @@ -514,7 +511,7 @@ static int ParseOneDecl (DeclSpec* Spec) } else { - if ((Decl.StorageClass & SC_EXTERN) == SC_EXTERN) { + if ((Decl.StorageClass & SC_STORAGEMASK) == SC_EXTERN) { /* External identifier - may not get initialized */ if (CurTok.Tok == TOK_ASSIGN) { Error ("Cannot initialize extern variable '%s'", Decl.Ident); @@ -524,8 +521,8 @@ static int ParseOneDecl (DeclSpec* Spec) } } - if ((Decl.StorageClass & SC_EXTERN) == SC_EXTERN || - (Decl.StorageClass & SC_FUNC) == SC_FUNC) { + if ((Decl.StorageClass & SC_STORAGEMASK) == SC_EXTERN || + (Decl.StorageClass & SC_TYPEMASK) == SC_FUNC) { /* Add the global symbol to both of the global and local symbol ** tables. */ diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index db306040d..b9394494b 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -630,7 +630,7 @@ static void WrappedCallPragma (pragma_scope_t Scope, StrBuf* B) Entry = FindSym(Name); /* Check if the name is valid */ - if (Entry && (Entry->Flags & SC_FUNC) == SC_FUNC) { + if (Entry && (Entry->Flags & SC_TYPEMASK) == SC_FUNC) { PushWrappedCall(Entry, (unsigned int) Val); Entry->Flags |= SC_REF; diff --git a/src/cc65/symentry.c b/src/cc65/symentry.c index 30ebe7dd8..56f6ffbb0 100644 --- a/src/cc65/symentry.c +++ b/src/cc65/symentry.c @@ -88,7 +88,7 @@ void FreeSymEntry (SymEntry* E) TypeFree (E->Type); xfree (E->AsmName); - if (E->Flags & SC_LABEL) { + if ((E->Flags & SC_TYPEMASK) == SC_LABEL) { for (i = 0; i < CollCount (E->V.L.DefsOrRefs); i++) { xfree (CollAt (E->V.L.DefsOrRefs, i)); } @@ -109,21 +109,17 @@ void DumpSymEntry (FILE* F, const SymEntry* E) unsigned Val; } SCFlagTable; - static SCFlagTable ESUTypes[] = { - { "SC_TYPEDEF", SC_TYPEDEF }, - { "SC_UNION", SC_UNION }, - { "SC_STRUCT", SC_STRUCT }, - { "SC_ENUM", SC_ENUM }, - }; - static SCFlagTable Types[] = { - { "SC_BITFIELD", SC_BITFIELD }, - { "SC_STRUCTFIELD", SC_STRUCTFIELD }, - { "SC_ENUMERATOR", SC_ENUMERATOR }, - { "SC_CONST", SC_CONST }, + { "SC_NONE", SC_NONE }, + { "SC_STRUCT", SC_STRUCT }, + { "SC_UNION", SC_UNION }, + { "SC_ENUM", SC_ENUM }, { "SC_LABEL", SC_LABEL }, - { "SC_PARAM", SC_PARAM }, + { "SC_BITFIELD", SC_BITFIELD }, + { "SC_TYPEDEF", SC_TYPEDEF }, + { "SC_ENUMERATOR", SC_ENUMERATOR }, { "SC_FUNC", SC_FUNC }, + { "SC_ARRAY", SC_ARRAY }, }; static SCFlagTable Storages[] = { @@ -131,11 +127,31 @@ void DumpSymEntry (FILE* F, const SymEntry* E) { "SC_REGISTER", SC_REGISTER }, { "SC_STATIC", SC_STATIC }, { "SC_EXTERN", SC_EXTERN }, - { "SC_STORAGE", SC_STORAGE }, + }; + + static SCFlagTable Properties[] = { + { "SC_CONST", SC_CONST }, + { "SC_STRUCTFIELD", SC_STRUCTFIELD }, + { "SC_PARAM", SC_PARAM }, + { "SC_DEFTYPE", SC_DEFTYPE }, { "SC_ZEROPAGE", SC_ZEROPAGE }, - { "SC_DECL", SC_DECL }, + { "SC_HAVEALIGN", SC_HAVEALIGN }, + { "SC_HAVEATTR", SC_HAVEATTR }, + { "SC_TU_STORAGE", SC_TU_STORAGE }, + { "SC_ASSIGN_INIT", SC_ASSIGN_INIT }, + { "SC_ALIAS", SC_ALIAS }, + { "SC_FICTITIOUS", SC_FICTITIOUS }, + { "SC_HAVEFAM", SC_HAVEFAM }, + { "SC_HAVECONST", SC_HAVECONST }, + }; + + static SCFlagTable Status[] = { { "SC_DEF", SC_DEF }, { "SC_REF", SC_REF }, + { "SC_GOTO", SC_GOTO }, + { "SC_GOTO_IND", SC_GOTO_IND }, + { "SC_LOCALSCOPE", SC_LOCALSCOPE }, + { "SC_NOINLINEDEF", SC_NOINLINEDEF }, }; unsigned I; @@ -152,28 +168,38 @@ void DumpSymEntry (FILE* F, const SymEntry* E) /* Print the flags */ SymFlags = E->Flags; fprintf (F, " Flags:"); - /* Enum, struct, union and typedefs */ - if ((SymFlags & SC_ESUTYPEMASK) != 0) { - for (I = 0; I < sizeof (ESUTypes) / sizeof (ESUTypes[0]); ++I) { - if ((SymFlags & SC_ESUTYPEMASK) == ESUTypes[I].Val) { - SymFlags &= ~SC_ESUTYPEMASK; - fprintf (F, " %s", ESUTypes[I].Name); + /* Symbol types */ + if ((SymFlags & SC_TYPEMASK) != 0) { + for (I = 0; I < sizeof (Types) / sizeof (Types[0]); ++I) { + if ((SymFlags & SC_TYPEMASK) == Types[I].Val) { + SymFlags &= ~SC_TYPEMASK; + fprintf (F, " %s", Types[I].Name); break; } } } - /* Other type flags */ - for (I = 0; I < sizeof (Types) / sizeof (Types[0]) && SymFlags != 0; ++I) { - if ((SymFlags & Types[I].Val) == Types[I].Val) { - SymFlags &= ~Types[I].Val; - fprintf (F, " %s", Types[I].Name); + /* Storage classes */ + if ((SymFlags & SC_STORAGEMASK) != 0) { + for (I = 0; I < sizeof (Storages) / sizeof (Storages[0]); ++I) { + if ((SymFlags & SC_STORAGEMASK) == Storages[I].Val) { + SymFlags &= ~SC_STORAGEMASK; + fprintf (F, " %s", Storages[I].Name); + break; + } } } - /* Storage flags */ - for (I = 0; I < sizeof (Storages) / sizeof (Storages[0]) && SymFlags != 0; ++I) { - if ((SymFlags & Storages[I].Val) == Storages[I].Val) { - SymFlags &= ~Storages[I].Val; - fprintf (F, " %s", Storages[I].Name); + /* Special property flags */ + for (I = 0; I < sizeof (Properties) / sizeof (Properties[0]) && SymFlags != 0; ++I) { + if ((SymFlags & Properties[I].Val) == Properties[I].Val) { + SymFlags &= ~Properties[I].Val; + fprintf (F, " %s", Properties[I].Name); + } + } + /* Status flags */ + for (I = 0; I < sizeof (Status) / sizeof (Status[0]) && SymFlags != 0; ++I) { + if ((SymFlags & Status[I].Val) == Status[I].Val) { + SymFlags &= ~Status[I].Val; + fprintf (F, " %s", Status[I].Name); } } if (SymFlags != 0) { @@ -199,9 +225,10 @@ int SymIsOutputFunc (const SymEntry* Sym) /* Symbol must be a function which is defined and either extern or ** static and referenced. */ - return IsTypeFunc (Sym->Type) && - SymIsDef (Sym) && - (Sym->Flags & (SC_REF | SC_EXTERN)); + return IsTypeFunc (Sym->Type) && + SymIsDef (Sym) && + ((Sym->Flags & SC_REF) || + (Sym->Flags & SC_STORAGEMASK) != SC_STATIC); } @@ -272,7 +299,7 @@ void SymCvtRegVarToAuto (SymEntry* Sym) /* Convert a register variable to an auto variable */ { /* Change the storage class */ - Sym->Flags = (Sym->Flags & ~(SC_REGISTER | SC_STATIC | SC_EXTERN)) | SC_AUTO; + Sym->Flags = (Sym->Flags & ~SC_STORAGEMASK) | SC_AUTO; /* Transfer the stack offset from register save area to actual offset */ Sym->V.Offs = Sym->V.R.SaveOffs; diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 639221625..7bfc18ea4 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -68,47 +68,88 @@ struct CodeEntry; -/* Storage classes and flags */ +/* Symbol types and flags */ #define SC_NONE 0x0000U /* Nothing */ -#define SC_STRUCT 0x0001U /* Struct */ -#define SC_UNION 0x0002U /* Union */ -#define SC_ENUM 0x0003U /* Enum */ -#define SC_TYPEDEF 0x0004U /* Typedef */ -#define SC_ESUTYPEMASK 0x0007U /* Mask for above types */ -#define SC_ENUMERATOR 0x0008U /* An enumerator */ -#define SC_BITFIELD 0x0010U /* A bit-field inside a struct or union */ -#define SC_TYPEMASK 0x001FU /* Mask for above types */ -#define SC_FUNC 0x0020U /* A function */ -#define SC_LABEL 0x0040U /* A goto code label */ -#define SC_CONST 0x0080U /* A numeric constant with a type */ -#define SC_PARAM 0x0100U /* A function parameter */ -#define SC_DEFTYPE 0x0200U /* Parameter has default type (=int, old style) */ -#define SC_STRUCTFIELD 0x0400U /* Struct or union field */ +/* Types of symbols */ +#define SC_STRUCT 0x0001U /* Struct tag */ +#define SC_UNION 0x0002U /* Union tag */ +#define SC_ENUM 0x0003U /* Enum tag */ +#define SC_LABEL 0x0004U /* A goto code label */ +#define SC_BITFIELD 0x0005U /* A bit-field inside a struct or union */ +#define SC_TYPEDEF 0x0006U /* A typedef */ +#define SC_ENUMERATOR 0x0007U /* An enumerator */ -#define SC_ZEROPAGE 0x0800U /* Symbol marked as zeropage */ +/* Note: These symbol types might be checked as bit-flags occasionally. +** So don't share their unique bits with other symbol types. +*/ +#define SC_FUNC 0x0008U /* A function */ +#define SC_ARRAY 0x0010U /* UNUSED: An array */ +#define SC_TYPEMASK 0x001FU /* Mask for symbol types all above */ -#define SC_DEF 0x1000U /* Symbol is defined */ -#define SC_REF 0x2000U /* Symbol is referenced */ -#define SC_DECL 0x4000U /* Symbol is declared in global scope */ -#define SC_STORAGE 0x8000U /* Symbol with associated storage */ +/* Additional property of the symbols */ +#define SC_CONST 0x0020U /* A numeric constant with a type */ +#define SC_STRUCTFIELD 0x0040U /* A struct or union field */ +#define SC_PARAM 0x0080U /* A function parameter */ +#define SC_DEFTYPE 0x0100U /* An old-style parameter with default type (=int) */ -#define SC_AUTO 0x010000U /* Auto variable */ -#define SC_REGISTER 0x020000U /* Register variable */ -#define SC_STATIC 0x040000U /* Static - not to be confused with other *_STATIC */ -#define SC_EXTERN 0x080000U /* Extern linkage */ -#define SC_STORAGEMASK 0x0F0000U /* Storage type mask */ +/* Address property of the symbol */ +#define SC_ZEROPAGE 0x0200U /* Symbol marked as on zeropage */ -#define SC_HAVEATTR 0x100000U /* Symbol has attributes */ +/* Additional attributes of the symbol */ +#define SC_HAVEALIGN 0x0400U /* UNUSED: Symbol has special alignment */ +#define SC_HAVEATTR 0x0800U /* Symbol has attributes */ -#define SC_GOTO 0x200000U -#define SC_SPADJUSTMENT 0x400000U -#define SC_GOTO_IND 0x800000U /* Indirect goto */ +/* Special property of declaration */ +#define SC_TU_STORAGE 0x1000U /* Symbol has allocated storage in the TU */ +#define SC_ASSIGN_INIT 0x2000U /* Symbol is to be initialized with assignment code */ -#define SC_ALIAS 0x01000000U /* Alias of global or anonymous field */ -#define SC_FICTITIOUS 0x02000000U /* Symbol is fictitious (for error recovery) */ -#define SC_HAVEFAM 0x04000000U /* Type has a Flexible Array Member */ -#define SC_HAVECONST 0x08000000U /* Type has a const member */ +#define SC_ALIAS 0x4000U /* Symbol is an alias */ +#define SC_FICTITIOUS 0x8000U /* Symbol is fictitious (for error recovery) */ +#define SC_HAVEFAM 0x010000U /* Struct/union has a Flexible Array Member */ +#define SC_HAVECONST 0x020000U /* Struct/union has a const member */ + +/* Status of the symbol */ +#define SC_DEF 0x040000U /* Symbol is defined */ +#define SC_REF 0x080000U /* Symbol is referenced */ +#define SC_GOTO 0x100000U /* Symbol is destination of a goto */ +#define SC_GOTO_IND 0x200000U /* Symbol is destination of an indirect goto */ +#define SC_LOCALSCOPE 0x400000U /* Symbol is invisible in file scope */ +#define SC_NOINLINEDEF 0x800000U /* Symbol may never have an inline definition */ + +/* To figure out the linkage of an object or function symbol Sym: +** - external linkage: +** SymIsGlobal (Sym) && (Sym->Flags & SC_STORAGEMASK) != SC_STATIC +** - internal linkage: +** SymIsGlobal (Sym) && (Sym->Flags & SC_STORAGEMASK) == SC_STATIC +** - no linkage: +** !SymIsGlobal (Sym) +** +** To figure out the storage class of a symbol by its SC_ flags: +** +** - no explicit storage class specifiers (in file scope): +** (flags & SC_STORAGEMASK) == SC_NONE +** - no explicit storage class specifiers (in block scope): +** (flags & SC_STORAGEMASK) == SC_AUTO +** - extern: +** (flags & SC_STORAGEMASK) == SC_EXTERN +** - static: +** (flags & SC_STORAGEMASK) == SC_STATIC +** - auto: +** (flags & SC_STORAGEMASK) == SC_AUTO +** - register: +** (flags & SC_STORAGEMASK) == SC_REGISTER +** - typedef (per ISO C): +** (flags & SC_TYPEMASK) == SC_TYPEDEF +** +** Note: SC_TYPEDEF can be also used as a flag. +*/ +#define SC_AUTO 0x01000000U /* Auto storage class */ +#define SC_REGISTER 0x02000000U /* Register storage class */ +#define SC_STATIC 0x03000000U /* Static storage class */ +#define SC_EXTERN 0x04000000U /* Extern storage class */ +#define SC_THREAD 0x08000000U /* UNSUPPORTED: Thread-local storage class */ +#define SC_STORAGEMASK 0x0F000000U /* Storage type mask */ @@ -214,14 +255,37 @@ void FreeSymEntry (SymEntry* E); void DumpSymEntry (FILE* F, const SymEntry* E); /* Dump the given symbol table entry to the file in readable form */ +int SymIsOutputFunc (const SymEntry* Sym); +/* Return true if this is a function that must be output */ + +#if defined(HAVE_INLINE) +INLINE int SymIsArray (const SymEntry* Sym) +/* Return true if the given entry is an array entry */ +{ + return ((Sym->Flags & SC_TYPEMASK) == SC_ARRAY); +} +#else +# define SymIsArray(Sym) (((Sym)->Flags & SC_TYPEMASK) == SC_ARRAY) +#endif + #if defined(HAVE_INLINE) INLINE int SymIsBitField (const SymEntry* Sym) /* Return true if the given entry is a bit-field entry */ { - return ((Sym->Flags & SC_BITFIELD) == SC_BITFIELD); + return ((Sym->Flags & SC_TYPEMASK) == SC_BITFIELD); } #else -# define SymIsBitField(Sym) (((Sym)->Flags & SC_BITFIELD) == SC_BITFIELD) +# define SymIsBitField(Sym) (((Sym)->Flags & SC_TYPEMASK) == SC_BITFIELD) +#endif + +#if defined(HAVE_INLINE) +INLINE int SymIsLabel (const SymEntry* Sym) +/* Return true if the given entry is a label entry */ +{ + return ((Sym)->Flags & SC_TYPEMASK) == SC_LABEL; +} +#else +# define SymIsLabel(Sym) (((Sym)->Flags & SC_TYPEMASK) == SC_LABEL) #endif #if defined(HAVE_INLINE) @@ -257,17 +321,13 @@ INLINE int SymIsRef (const SymEntry* Sym) #if defined(HAVE_INLINE) INLINE int SymIsRegVar (const SymEntry* Sym) /* Return true if the given entry is a register variable */ -/* ### HACK! Fix the ugly type flags! */ { - return ((Sym->Flags & (SC_REGISTER | SC_TYPEMASK)) == SC_REGISTER); + return ((Sym->Flags & (SC_STORAGEMASK | SC_TYPEMASK)) == (SC_REGISTER | SC_NONE)); } #else -# define SymIsRegVar(Sym) (((Sym)->Flags & (SC_REGISTER | SC_TYPEMASK)) == SC_REGISTER) +# define SymIsRegVar(Sym) (((Sym)->Flags & (SC_STORAGEMASK | SC_TYPEMASK)) == (SC_REGISTER | SC_NONE)) #endif -int SymIsOutputFunc (const SymEntry* Sym); -/* Return true if this is a function that must be output */ - #if defined(HAVE_INLINE) INLINE int SymHasFlexibleArrayMember (const SymEntry* Sym) /* Return true if the given entry has a flexible array member */ diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index c2c6bab27..a76e60450 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -165,22 +165,22 @@ static void CheckSymTable (SymTable* Tab) /* Ignore typedef entries */ if (!SymIsTypeDef (Entry)) { - /* Check if the symbol is one with storage, and it if it was - ** defined but not used. - */ - if (((Flags & SC_AUTO) || (Flags & SC_STATIC)) && (Flags & SC_EXTERN) == 0) { + /* Check if the symbol has non-external linkage and is defined but not used */ + if (!SymIsGlobal (Entry) || (Flags & SC_STORAGEMASK) == SC_STATIC) { if (SymIsDef (Entry) && !SymIsRef (Entry) && !SymHasAttr (Entry, atUnused)) { if (Flags & SC_PARAM) { if (IS_Get (&WarnUnusedParam)) { Warning ("Parameter '%s' is never used", Entry->Name); } - } else if (Flags & SC_FUNC) { + } else if ((Flags & SC_TYPEMASK) == SC_FUNC) { if (IS_Get (&WarnUnusedFunc)) { Warning ("Function '%s' is defined but never used", Entry->Name); } - } else if (!IsAnonName (Entry->Name)) { - if (IS_Get (&WarnUnusedVar)) { + } else if ((Flags & SC_TYPEMASK) == SC_NONE) { + if (IS_Get (&WarnUnusedVar) && + !IsAnonName (Entry->Name) && + (Flags & SC_CONST) != SC_CONST) { Warning ("Variable '%s' is defined but never used", Entry->Name); } } @@ -188,7 +188,7 @@ static void CheckSymTable (SymTable* Tab) } /* If the entry is a label, check if it was defined in the function */ - if (Flags & SC_LABEL) { + if ((Flags & SC_TYPEMASK) == SC_LABEL) { if (!SymIsDef (Entry)) { /* Undefined label */ Error ("Undefined label: '%s'", Entry->Name); @@ -716,7 +716,7 @@ static int HandleSymRedefinition (SymEntry* Sym, const Type* T, unsigned Flags) Sym = 0; } - } else if ((Sym->Flags & SC_FUNC) == SC_FUNC) { + } else if ((Sym->Flags & SC_TYPEMASK) == SC_FUNC) { /* In case of a function, use the new type descriptor, since it ** contains pointers to the new symbol tables that are needed if @@ -863,7 +863,6 @@ SymEntry* AddEnumSym (const char* Name, unsigned Flags, const Type* Type, SymTab } else { TagEntry->V.E.SymTab = Tab; TagEntry->V.E.Type = Type; - TagEntry->Flags &= ~SC_DECL; TagEntry->Flags |= SC_DEF; /* Remember this is the first definition of this type */ @@ -1047,7 +1046,7 @@ SymEntry* AddConstSym (const char* Name, const Type* T, unsigned Flags, long Val SymEntry* Entry = FindSymInTable (SymTab, Name, HashStr (Name)); if (Entry) { - if ((Entry->Flags & SC_CONST) != SC_CONST) { + if ((Entry->Flags & SC_TYPEMASK) != (Flags & SC_TYPEMASK)) { Error ("Symbol '%s' is already different kind", Name); } else { Error ("Multiple definition for constant '%s'", Name); @@ -1056,7 +1055,7 @@ SymEntry* AddConstSym (const char* Name, const Type* T, unsigned Flags, long Val } /* Create a new entry */ - Entry = NewSymEntry (Name, Flags); + Entry = NewSymEntry (Name, Flags | SC_CONST); /* We only have integer constants for now */ Entry->Type = TypeDup (T); @@ -1167,7 +1166,7 @@ SymEntry* AddLabelSym (const char* Name, unsigned Flags) /* Optimizer will need the information about the value of SP adjustment ** later, so let's preserve it. */ - E = NewSymEntry (LocalDataLabelName (DOR->LateSP_Label), SC_SPADJUSTMENT); + E = NewSymEntry (LocalDataLabelName (DOR->LateSP_Label), 0); E->V.SPAdjustment = StackPtr - DOR->StackPtr; AddSymEntry (SPAdjustTab, E); } @@ -1236,38 +1235,32 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs Entry = FindSymInTable (Tab, Name, HashStr (Name)); if (Entry) { - int CheckExtern = 0; if ((Flags & SC_STRUCTFIELD) == 0) { while (Entry && (Entry->Flags & SC_ALIAS) == SC_ALIAS) { /* Get the aliased entry */ Entry = Entry->V.A.Field; - /* Check for conflict with local storage class */ - CheckExtern = 1; } } /* We have a symbol with this name already */ if (HandleSymRedefinition (Entry, T, Flags)) { Entry = 0; - } else if ((Flags & SC_ESUTYPEMASK) != SC_TYPEDEF) { + } else if ((Flags & SC_TYPEMASK) != SC_TYPEDEF) { /* Redefinitions are not allowed */ if (SymIsDef (Entry) && (Flags & SC_DEF) == SC_DEF) { Error ("Multiple definition of '%s'", Entry->Name); Entry = 0; - } else if (CheckExtern) { - if ((Flags & (SC_AUTO | SC_REGISTER)) != 0) { - Error ("Declaration of '%s' with no linkage follows extern declaration", Name); - Entry = 0; - } else if ((Flags & SC_DEF) != 0 && (Flags & SC_EXTERN) == 0) { - /* If a static declaration follows a non-static declaration, - ** then it is an error. - */ - Error ("Static declaration of '%s' follows extern declaration", Name); - Entry = 0; - } } else if ((Flags & SC_STRUCTFIELD) != 0) { Error ("Duplicate member '%s'", Entry->Name); Entry = 0; + } else if (Entry->Owner == SymTab0) { + if ((Flags & SC_STORAGEMASK) == SC_AUTO || + (Flags & SC_STORAGEMASK) == SC_REGISTER || + (Flags & SC_STORAGEMASK) == SC_STATIC) { + Error ("Declaration of '%s' with no linkage follows extern declaration", + Name); + Entry = 0; + } } } @@ -1290,20 +1283,20 @@ SymEntry* AddLocalSym (const char* Name, const Type* T, unsigned Flags, int Offs Entry->Type = TypeDup (T); if ((Flags & SC_STRUCTFIELD) == SC_STRUCTFIELD || - (Flags & SC_ESUTYPEMASK) == SC_TYPEDEF) { + (Flags & SC_TYPEMASK) == SC_TYPEDEF) { if ((Flags & SC_ALIAS) != SC_ALIAS) { Entry->V.Offs = Offs; } - } else if ((Flags & SC_AUTO) == SC_AUTO) { + } else if ((Flags & SC_STORAGEMASK) == SC_AUTO) { Entry->V.Offs = Offs; - } else if ((Flags & SC_REGISTER) == SC_REGISTER) { + } else if ((Flags & SC_STORAGEMASK) == SC_REGISTER) { Entry->V.R.RegOffs = Offs; Entry->V.R.SaveOffs = StackPtr; - } else if ((Flags & SC_EXTERN) == SC_EXTERN || - (Flags & SC_FUNC) == SC_FUNC) { + } else if ((Flags & SC_STORAGEMASK) == SC_EXTERN || + (Flags & SC_TYPEMASK) == SC_FUNC) { Entry->V.L.Label = Offs; SymSetAsmName (Entry); - } else if ((Flags & SC_STATIC) == SC_STATIC) { + } else if ((Flags & SC_STORAGEMASK) == SC_STATIC) { /* Generate the assembler name from the data label number */ Entry->V.L.Label = Offs; Entry->AsmName = xstrdup (LocalDataLabelName (Entry->V.L.Label)); @@ -1348,49 +1341,63 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) Entry = FindGlobalSym (Name); } + /* Do we have a symbol with this name already? */ if (Entry) { - /* We have a symbol with this name already */ + /* Check if the symbol refers to some different type of things */ if (HandleSymRedefinition (Entry, T, Flags)) { Entry = 0; - } else if ((Entry->Flags & (SC_AUTO | SC_REGISTER)) != 0) { - /* Check for local storage class conflict */ + } else if (Entry->Owner != SymTab0) { + /* The previous declaration has no linkage. The current declaration + ** has either external or internal linkage. Either way it is an + ** error since the two declarations would be referring to different + ** objects with the same identifier. + */ Error ("Extern declaration of '%s' follows declaration with no linkage", Name); Entry = 0; - } else if ((Flags & SC_ESUTYPEMASK) != SC_TYPEDEF) { - /* If a static declaration follows a non-static declaration, then - ** the result is undefined. - ** Most compilers choose to either give an error at compile time, - ** or remove the extern property for a link time error if used. + } else if ((Flags & SC_TYPEMASK) != SC_TYPEDEF) { + /* The C standard specifies that the result is undefined if the + ** same thing has both internal and external linkage. Most + ** compilers choose to either give an error at compile time, or + ** remove the external linkage for a link time error if used + ** outside the current translation unit. We choose to give an + ** error at compile time in this case. */ - if (SymTab == SymTab0 && - (Flags & SC_EXTERN) == 0 && - (Entry->Flags & SC_EXTERN) != 0) { - Error ("Static declaration of '%s' follows non-static declaration", Name); - Entry = 0; - } else if ((Flags & SC_EXTERN) != 0 && - (Entry->Owner == SymTab0 || (Entry->Flags & SC_DEF) != 0) && - (Entry->Flags & SC_EXTERN) == 0) { - /* It is OK if a global extern declaration follows a global - ** non-static declaration, but an error if either of them is - ** local, as the two would be referring to different objects. - ** It is an error as well if a global non-static declaration - ** follows a global static declaration. + if ((Entry->Flags & SC_STORAGEMASK) != SC_STATIC) { + /* The previous declaration is a non-static declaration of an + ** object or function that has external linkage. */ - if (Entry->Owner == SymTab0) { - if ((Flags & SC_STORAGE) == 0) { - /* The C standard specifies that a later extern declaration will keep - ** the previously declared internal or external linkage unchanged. - ** Though not required by the standard, we are warning on this case. - */ - Flags &= ~SC_EXTERN; - Warning ("Extern declaration of '%s' follows static declaration, linkage unchanged", Name); - } else { - Error ("Non-static declaration of '%s' follows static declaration", Name); - Entry = 0; - } - } else { - Error ("Extern declaration of '%s' follows static declaration", Name); + if ((Flags & SC_STORAGEMASK) == SC_STATIC) { + /* It is a static declaration of an object or function that + ** has internal linkage. Conflicted wih the previous one. + */ + Error ("Static declaration of '%s' follows non-static declaration", + Name); + Entry = 0; + } + } else if ((Flags & SC_STORAGEMASK) != SC_STATIC) { + /* The previous declaration is a static declaration of an + ** object or function that has internal linkage. + */ + if ((Flags & SC_STORAGEMASK) == SC_EXTERN || + (Flags & SC_TYPEMASK) == SC_FUNC) { + /* The C standard specifies that an extern declaration + ** shall keep the previously declared internal linkage + ** unchanged. For a function declaration with no storage + ** class specifiers, it is treated as if with 'extern'. + ** We give a warning although it is not required by the + ** standard. + */ + Flags &= ~SC_STORAGEMASK; + Warning ("Extern declaration of '%s' follows static declaration", + Name); + } else if ((Flags & SC_STORAGEMASK) == SC_NONE) { + /* It is a non-extern-or-static declaration of an object in + ** file scope that has external linkage. Conflicted wih the + ** previous one. + */ + Error ("Non-static declaration of '%s' follows static declaration", + Name); Entry = 0; } } @@ -1486,14 +1493,22 @@ SymTable* GetLabelSymTab (void) -int SymIsLocal (SymEntry* Sym) -/* Return true if the symbol is defined in the highest lexical level */ +int SymIsLocal (const SymEntry* Sym) +/* Return true if the symbol is declared in the highest lexical level */ { return (Sym->Owner == SymTab || Sym->Owner == TagTab); } +int SymIsGlobal (const SymEntry* Sym) +/* Return true if the symbol is declared in the file scope level */ +{ + return (Sym->Owner == SymTab0 || Sym->Owner == TagTab0); +} + + + void MakeZPSym (const char* Name) /* Mark the given symbol as zero page symbol */ { @@ -1553,7 +1568,9 @@ void EmitExternals (void) Entry = SymTab->SymHead; while (Entry) { unsigned Flags = Entry->Flags; - if (Flags & SC_EXTERN) { + if (Entry->Owner == SymTab0 && + (Flags & SC_STORAGEMASK) != SC_STATIC && + ((Flags & SC_TYPEMASK) == SC_FUNC || (Flags & SC_TYPEMASK) == SC_NONE)) { /* Only defined or referenced externs */ if (SymIsRef (Entry) && !SymIsDef (Entry)) { /* An import */ @@ -1587,18 +1604,18 @@ void EmitDebugInfo (void) } Sym = SymTab->SymHead; while (Sym) { - if ((Sym->Flags & (SC_CONST | SC_TYPEMASK)) == 0) { - if (Sym->Flags & SC_AUTO) { + if ((Sym->Flags & SC_TYPEMASK) == 0) { + if ((Sym->Flags & SC_STORAGEMASK) == SC_AUTO) { AddTextLine ("%s, \"%s\", \"00\", auto, %d", Head, Sym->Name, Sym->V.Offs); - } else if (Sym->Flags & SC_REGISTER) { + } else if ((Sym->Flags & SC_STORAGEMASK) == SC_REGISTER) { AddTextLine ("%s, \"%s\", \"00\", register, \"regbank\", %d", Head, Sym->Name, Sym->V.R.RegOffs); } else if (SymIsRef (Sym) && !SymIsDef (Sym)) { AddTextLine ("%s, \"%s\", \"00\", %s, \"%s\"", Head, Sym->Name, - (Sym->Flags & SC_EXTERN)? "extern" : "static", + (Sym->Flags & SC_STORAGEMASK) != SC_STATIC ? "extern" : "static", Sym->AsmName); } } diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h index 38edddcb0..53b0df4eb 100644 --- a/src/cc65/symtab.h +++ b/src/cc65/symtab.h @@ -211,8 +211,11 @@ SymTable* GetFieldSymTab (void); SymTable* GetLabelSymTab (void); /* Return the label symbol table */ -int SymIsLocal (SymEntry* Sym); -/* Return true if the symbol is defined in the highest lexical level */ +int SymIsLocal (const SymEntry* Sym); +/* Return true if the symbol is declared in the highest lexical level */ + +int SymIsGlobal (const SymEntry* Sym); +/* Return true if the symbol is declared in the file scope level */ void MakeZPSym (const char* Name); /* Mark the given symbol as zero page symbol */ From 2138f3c902f2bcbe538a62fae5e7e36c36ea2c2a Mon Sep 17 00:00:00 2001 From: rumbledethumps <16963588+rumbledethumps@users.noreply.github.com> Date: Wed, 10 Jan 2024 21:24:55 -0800 Subject: [PATCH 2346/2710] add clock() to RP6502 --- include/rp6502.h | 1 + include/time.h | 2 ++ libsrc/rp6502/clock.c | 7 +++++++ 3 files changed, 10 insertions(+) create mode 100644 libsrc/rp6502/clock.c diff --git a/include/rp6502.h b/include/rp6502.h index 2b40cfc71..61664c78f 100644 --- a/include/rp6502.h +++ b/include/rp6502.h @@ -101,6 +101,7 @@ long __fastcall__ ria_call_long_errno (unsigned char op); #define RIA_OP_CODEPAGE 0x03 #define RIA_OP_LRAND 0x04 #define RIA_OP_STDIN_OPT 0x05 +#define RIA_OP_CLOCK 0x0F #define RIA_OP_CLOCK_GETRES 0x10 #define RIA_OP_CLOCK_GETTIME 0x11 #define RIA_OP_CLOCK_SETTIME 0x12 diff --git a/include/time.h b/include/time.h index f8977ab0c..5eb6f144a 100644 --- a/include/time.h +++ b/include/time.h @@ -86,6 +86,8 @@ struct tm { # define CLOCKS_PER_SEC 135 /* FIXME */ #elif defined(__GEOS__) # define CLOCKS_PER_SEC 1 +#elif defined (__RP6502__) +# define CLOCKS_PER_SEC 100 #elif defined(__TELESTRAT__) # define CLOCKS_PER_SEC 10 #elif defined(__ATARI__) || defined (__LYNX__) diff --git a/libsrc/rp6502/clock.c b/libsrc/rp6502/clock.c new file mode 100644 index 000000000..f8756f553 --- /dev/null +++ b/libsrc/rp6502/clock.c @@ -0,0 +1,7 @@ +#include <rp6502.h> +#include <time.h> + +clock_t __fastcall__ clock (void) +{ + return ria_call_long (RIA_OP_CLOCK); +} From 44b2e48e3ef556b9b462106152ad2a4bc89bf39c Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Thu, 11 Jan 2024 17:40:27 +0100 Subject: [PATCH 2347/2710] mention John Dunning as original author --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index eff5049f9..500299730 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,10 @@ For details look at the [Website](https://cc65.github.io). ## People -Project founder: +Project founders: -* Ullrich von Bassewitz +* John R. Dunning: original implementation of the C compiler and runtime library, Atari hosted +* Ullrich von Bassewitz: move the code to modern systems, completely rewritten runtime library Core team members: From 6ab3c0c75fe921e55f841cc357832173044bfe81 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Thu, 11 Jan 2024 19:40:41 +0100 Subject: [PATCH 2348/2710] elaborate more about Uz's contributions --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 500299730..11c3bb0ff 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,10 @@ For details look at the [Website](https://cc65.github.io). Project founders: * John R. Dunning: original implementation of the C compiler and runtime library, Atari hosted -* Ullrich von Bassewitz: move the code to modern systems, completely rewritten runtime library +* Ullrich von Bassewitz: + * move the code to modern systems + * rewrite most parts of the compiler + * complete rewrite of the runtime library Core team members: From 3d0dc5815329de351f72b75afe9f01184464ff3b Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 13 Jan 2024 00:46:14 +0800 Subject: [PATCH 2349/2710] Fixed visibility of undeclared functions and objects. --- src/cc65/compile.c | 23 +++++++++++------------ src/cc65/symtab.c | 30 +++++++++++++++++++++++------- src/cc65/symtab.h | 4 ++-- test/err/bug2304-var-use.c | 15 +++++++++++++++ test/misc/Makefile | 6 ++++++ test/misc/bug2304-implicit-func.c | 21 +++++++++++++++++++++ 6 files changed, 78 insertions(+), 21 deletions(-) create mode 100644 test/err/bug2304-var-use.c create mode 100644 test/misc/bug2304-implicit-func.c diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 108c80a28..f14774658 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -163,19 +163,19 @@ static void Parse (void) break; } - /* Check if we must reserve storage for the variable. We do this, - ** - ** - if it is not a typedef or function, - ** - if we don't had a storage class given ("int i") - ** - if the storage class is explicitly specified as static, - ** - or if there is an initialization. - ** - ** This means that "extern int i;" will not get storage allocated - ** in this translation unit. - */ + /* The symbol is now visible in the file scope */ if ((Decl.StorageClass & SC_TYPEMASK) != SC_FUNC && (Decl.StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { - /* The variable is visible in the file scope */ + /* Check if we must reserve storage for the variable. We do this, + ** + ** - if it is not a typedef or function, + ** - if we don't had a storage class given ("int i") + ** - if the storage class is explicitly specified as static, + ** - or if there is an initialization. + ** + ** This means that "extern int i;" will not get storage allocated + ** in this translation unit. + */ if ((Decl.StorageClass & SC_STORAGEMASK) == SC_NONE || (Decl.StorageClass & SC_STORAGEMASK) == SC_STATIC || ((Decl.StorageClass & SC_STORAGEMASK) == SC_EXTERN && @@ -189,7 +189,6 @@ static void Parse (void) ** or semicolon, it must be followed by a function body. */ if ((Decl.StorageClass & SC_TYPEMASK) == SC_FUNC) { - /* The function is now visible in the file scope */ if (CurTok.Tok == TOK_LCURLY) { /* A definition */ Decl.StorageClass |= SC_DEF; diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index a76e60450..69484456f 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -557,8 +557,10 @@ static SymEntry* FindSymInTable (const SymTable* T, const char* Name, unsigned H -static SymEntry* FindSymInTree (const SymTable* Tab, const char* Name) -/* Find the symbol with the given name in the table tree that starts with T */ +static SymEntry* FindVisibleSymInTree (const SymTable* Tab, const char* Name) +/* Find the visible symbol with the given name in the table tree that starts +** with Tab. +*/ { /* Get the hash over the name */ unsigned Hash = HashStr (Name); @@ -574,7 +576,7 @@ static SymEntry* FindSymInTree (const SymTable* Tab, const char* Name) } /* Bail out if we found it */ - if (E != 0) { + if (E != 0 && (Tab != SymTab0 || (E->Flags & SC_LOCALSCOPE) == 0)) { return E; } @@ -589,9 +591,9 @@ static SymEntry* FindSymInTree (const SymTable* Tab, const char* Name) SymEntry* FindSym (const char* Name) -/* Find the symbol with the given name */ +/* Find with the given name the symbol visible in the current scope */ { - return FindSymInTree (SymTab, Name); + return FindVisibleSymInTree (SymTab, Name); } @@ -613,9 +615,9 @@ SymEntry* FindLocalSym (const char* Name) SymEntry* FindTagSym (const char* Name) -/* Find the symbol with the given name in the tag table */ +/* Find with the given name the tag symbol visible in the current scope */ { - return FindSymInTree (TagTab, Name); + return FindVisibleSymInTree (TagTab, Name); } @@ -1356,6 +1358,13 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) Name); Entry = 0; } else if ((Flags & SC_TYPEMASK) != SC_TYPEDEF) { + /* If we are adding the symbol in the file scope, it is now + ** visible there. + */ + if (SymTab == SymTab0) { + Entry->Flags &= ~SC_LOCALSCOPE; + } + /* The C standard specifies that the result is undefined if the ** same thing has both internal and external linkage. Most ** compilers choose to either give an error at compile time, or @@ -1415,6 +1424,13 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) } if (Entry == 0) { + /* Hide the symbol in the file scope if we are declaring it in a + ** local scope. + */ + if (Tab == SymTab0 && SymTab != SymTab0) { + Flags |= SC_LOCALSCOPE; + } + /* Create a new entry */ Entry = NewSymEntry (Name, Flags); diff --git a/src/cc65/symtab.h b/src/cc65/symtab.h index 53b0df4eb..236bc090a 100644 --- a/src/cc65/symtab.h +++ b/src/cc65/symtab.h @@ -142,7 +142,7 @@ void LeaveStructLevel (void); SymEntry* FindSym (const char* Name); -/* Find the symbol with the given name */ +/* Find with the given name the symbol visible in the current scope */ SymEntry* FindGlobalSym (const char* Name); /* Find the symbol with the given name in the global symbol table only */ @@ -151,7 +151,7 @@ SymEntry* FindLocalSym (const char* Name); /* Find the symbol with the given name in the current symbol table only */ SymEntry* FindTagSym (const char* Name); -/* Find the symbol with the given name in the tag table */ +/* Find with the given name the tag symbol visible in the current scope */ SymEntry FindStructField (const Type* TypeArray, const char* Name); /* Find a struct/union field in the fields list. diff --git a/test/err/bug2304-var-use.c b/test/err/bug2304-var-use.c new file mode 100644 index 000000000..8a88405e2 --- /dev/null +++ b/test/err/bug2304-var-use.c @@ -0,0 +1,15 @@ +/* Bug 2304 - Visibility of objects/functions undeclared in file scope but 'extern'-declared in unrelated block scopes */ + +void f1(void) +{ + extern int a; +} + +/* 'a' is still invisible in the file scope */ + +int main(void) +{ + return a * 0; /* Usage of 'a' should be an error */ +} + +int a = 42; diff --git a/test/misc/Makefile b/test/misc/Makefile index 811f7f462..cfcae0530 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -133,6 +133,12 @@ $(WORKDIR)/goto.$1.$2.prg: goto.c $(ISEQUAL) | $(WORKDIR) $(CC65) -t sim$2 -$1 -o $$@ $$< 2>$(WORKDIR)/goto.$1.$2.out $(ISEQUAL) $(WORKDIR)/goto.$1.$2.out goto.ref +# this one requires failure with --std=c89, it fails with --std=cc65 due to +# stricter checks +$(WORKDIR)/bug2304-implicit-func.$1.$2.prg: bug2304-implicit-func.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug2304-implicit-func.$1.$2.prg) + $(NOT) $(CC65) --standard c89 -t sim$2 -$1 -o $$@ $$< $(NULLERR) + # should not compile until 3-byte struct by value tests are re-enabled $(WORKDIR)/struct-by-value.$1.$2.prg: struct-by-value.c | $(WORKDIR) $(if $(QUIET),echo misc/struct-by-value.$1.$2.prg) diff --git a/test/misc/bug2304-implicit-func.c b/test/misc/bug2304-implicit-func.c new file mode 100644 index 000000000..f6b7450ff --- /dev/null +++ b/test/misc/bug2304-implicit-func.c @@ -0,0 +1,21 @@ +/* Bug 2304 - Visibility of objects/functions undeclared in file scope but 'extern'-declared in unrelated block scopes */ + +/* This one should fail even in C89 */ + +void f1(void) +{ + extern unsigned int f(); +} + +/* 'f' is still invisible in the file scope */ + +int main(void) +{ + f(); /* Should be a conflict since the implicit function type is incompatible */ + return 0; +} + +unsigned int f() +{ + return 42; +} From 7e80e55b6d12138024d44557ed878fa3c50c6fda Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 13 Jan 2024 16:40:44 +0800 Subject: [PATCH 2350/2710] Added a warning on implicit int in typedefs. --- src/cc65/declare.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index f93305f01..7f1d8b948 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2388,16 +2388,26 @@ int ParseDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) GetFuncDesc (D->Type)->Flags |= FD_OLDSTYLE_INTRET; } - /* For anything that is not a function or typedef, check for an implicit - ** int declaration. + /* For anything that is not a function, check for an implicit int + ** declaration. */ - if (!IsTypeFunc (D->Type) && - (D->StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { - /* If the standard was not set explicitly to C89, print a warning - ** for variables with implicit int type. - */ - if (IS_Get (&Standard) >= STD_C99) { - Warning ("Implicit 'int' is an obsolete feature"); + if (!IsTypeFunc (D->Type) && IsRankInt (D->Type)) { + if ((D->StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { + /* If the standard was not set explicitly to C89, print a warning + ** for variables with implicit int type. + */ + if (IS_Get (&Standard) >= STD_C99) { + Warning ("Implicit 'int' is an obsolete feature"); + } + } else { + /* If the standard was not set explicitly to C89, print a warning + ** for typedefs with implicit int type. + */ + if (IS_Get (&Standard) >= STD_C99) { + Warning ("Type defaults to 'int' in typedef of '%s'", + D->Ident); + Note ("Implicit 'int' is an obsolete feature"); + } } } } From 0b06c34dfc89271a135c24573352715da1aaf187 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 14 Jan 2024 00:08:41 +0800 Subject: [PATCH 2351/2710] Added primitive support for the ISO C99 inline feature as well as the __inline__ extension. No inlining is actually done but that part is not required by the standard. --- src/cc65/compile.c | 6 +- src/cc65/declare.c | 84 ++++++++++++++++++++++-- src/cc65/expr.c | 2 +- src/cc65/function.c | 6 ++ src/cc65/locals.c | 2 +- src/cc65/scanner.h | 1 + src/cc65/symentry.h | 4 ++ src/cc65/symtab.c | 12 +++- test/ref/Makefile | 1 + test/ref/bug1889-missing-identifier.cref | 2 +- test/ref/inline-error.c | 36 ++++++++++ test/ref/inline-error.cref | 20 ++++++ test/val/inline-func.c | 20 ++++++ 13 files changed, 184 insertions(+), 12 deletions(-) create mode 100644 test/ref/inline-error.c create mode 100644 test/ref/inline-error.cref create mode 100644 test/val/inline-func.c diff --git a/src/cc65/compile.c b/src/cc65/compile.c index 108c80a28..b24751b59 100644 --- a/src/cc65/compile.c +++ b/src/cc65/compile.c @@ -121,7 +121,7 @@ static void Parse (void) } /* Read the declaration specifier */ - ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT, SC_NONE); + ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT | TS_FUNCTION_SPEC, SC_NONE); /* Don't accept illegal storage classes */ if ((Spec.StorageClass & SC_STORAGEMASK) == SC_AUTO || @@ -560,6 +560,10 @@ void Compile (const char* FileName) if ((Entry->Flags & SC_STORAGEMASK) == SC_STATIC && SymIsRef (Entry)) { Warning ("Static function '%s' used but never defined", Entry->Name); + } else if ((Entry->Flags & SC_INLINE) != 0) { + Warning ("Inline function '%s' %s but never defined", + Entry->Name, + SymIsRef (Entry) ? "used" : "declared"); } } } diff --git a/src/cc65/declare.c b/src/cc65/declare.c index f93305f01..6173b5460 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -124,9 +124,37 @@ static unsigned ParseOneStorageClass (void) +static unsigned ParseOneFuncSpec (void) +/* Parse and return a function specifier */ +{ + unsigned FuncSpec = 0; + + /* Check the function specifier given */ + switch (CurTok.Tok) { + + case TOK_INLINE: + FuncSpec = SC_INLINE; + NextToken (); + break; + + case TOK_NORETURN: + FuncSpec = SC_NORETURN; + NextToken (); + break; + + default: + break; + } + + return FuncSpec; +} + + + static int ParseStorageClass (DeclSpec* Spec) /* Parse storage class specifiers. Return true if a specifier is read even if -** it was duplicated or disallowed. */ +** it was duplicated or disallowed. +*/ { /* Check the storage class given */ unsigned StorageClass = ParseOneStorageClass (); @@ -151,6 +179,31 @@ static int ParseStorageClass (DeclSpec* Spec) +static int ParseFuncSpecClass (DeclSpec* Spec) +/* Parse function specifiers. Return true if a specifier is read even if it +** was duplicated or disallowed. +*/ +{ + /* Check the function specifiers given */ + unsigned FuncSpec = ParseOneFuncSpec (); + + if (FuncSpec == 0) { + return 0; + } + + while (FuncSpec != 0) { + if ((Spec->StorageClass & FuncSpec) != 0) { + Warning ("Duplicate function specifier"); + } + Spec->StorageClass |= FuncSpec; + FuncSpec = ParseOneFuncSpec (); + } + + return 1; +} + + + static void DuplicateQualifier (const char* Name) /* Print an error message */ { @@ -303,7 +356,8 @@ static void OptionalSpecifiers (DeclSpec* Spec, TypeCode* Qualifiers, typespec_t */ { TypeCode Q = T_QUAL_NONE; - int Continue; + int HasStorageClass; + int HasFuncSpec; do { /* There may be type qualifiers *before* any storage class specifiers */ @@ -311,11 +365,17 @@ static void OptionalSpecifiers (DeclSpec* Spec, TypeCode* Qualifiers, typespec_t *Qualifiers |= Q; /* Parse storage class specifiers anyway then check */ - Continue = ParseStorageClass (Spec); - if (Continue && (TSFlags & (TS_STORAGE_CLASS_SPEC | TS_FUNCTION_SPEC)) == 0) { + HasStorageClass = ParseStorageClass (Spec); + if (HasStorageClass && (TSFlags & TS_STORAGE_CLASS_SPEC) == 0) { Error ("Unexpected storage class specified"); } - } while (Continue || Q != T_QUAL_NONE); + + /* Parse function specifiers anyway then check */ + HasFuncSpec = ParseFuncSpecClass (Spec); + if (HasFuncSpec && (TSFlags & TS_FUNCTION_SPEC) == 0) { + Error ("Unexpected function specifiers"); + } + } while (Q != T_QUAL_NONE || HasStorageClass || HasFuncSpec); } @@ -2375,6 +2435,14 @@ int ParseDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) /* Parse attributes for this declarator */ ParseAttribute (D); + /* 'inline' is only allowed on functions */ + if (Mode != DM_ACCEPT_PARAM_IDENT && + (D->StorageClass & SC_TYPEMASK) != SC_FUNC && + (D->StorageClass & SC_INLINE) == SC_INLINE) { + Error ("'inline' on non-function declaration"); + D->StorageClass &= ~SC_INLINE; + } + /* Check a few pre-C99 things */ if (D->Ident[0] != '\0' && (Spec->Flags & DS_TYPE_MASK) == DS_DEF_TYPE) { /* Check and warn about an implicit int return in the function */ @@ -2478,7 +2546,7 @@ void ParseDeclSpec (DeclSpec* Spec, typespec_t TSFlags, unsigned DefStorage) Spec->Flags &= ~DS_DEF_STORAGE; /* Parse the type specifiers */ - ParseTypeSpec (Spec, TSFlags | TS_STORAGE_CLASS_SPEC | TS_FUNCTION_SPEC); + ParseTypeSpec (Spec, TSFlags | TS_STORAGE_CLASS_SPEC); /* If no explicit storage class is given, use the default */ if ((Spec->StorageClass & SC_STORAGEMASK) == 0) { @@ -2495,7 +2563,9 @@ void CheckEmptyDecl (const DeclSpec* Spec) ** warning if not. */ { - if ((Spec->Flags & DS_TYPE_MASK) == DS_NONE) { + if ((Spec->StorageClass & SC_INLINE) == SC_INLINE) { + Error ("'inline' on empty declaration"); + } else if ((Spec->Flags & DS_TYPE_MASK) == DS_NONE) { /* No declaration at all */ } else if ((Spec->Flags & DS_EXTRA_TYPE) == 0) { Warning ("Declaration does not declare anything"); diff --git a/src/cc65/expr.c b/src/cc65/expr.c index e5e5cc62e..a855e5b3c 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1407,7 +1407,7 @@ static void Primary (ExprDesc* E) } else { /* Let's see if this is a C99-style declaration */ DeclSpec Spec; - ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_NONE, SC_AUTO); + ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_NONE | TS_FUNCTION_SPEC, SC_AUTO); if ((Spec.Flags & DS_TYPE_MASK) != DS_NONE) { Error ("Mixed declarations and code are not supported in cc65"); diff --git a/src/cc65/function.c b/src/cc65/function.c index d570c2dde..596f9b617 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -518,6 +518,12 @@ void NewFunc (SymEntry* Func, FuncDesc* D) Error ("'main' cannot be declared as __fastcall__"); } + /* main() cannot be an inline function */ + if ((Func->Flags & SC_INLINE) == SC_INLINE) { + Error ("'main' cannot be declared inline"); + Func->Flags &= ~SC_INLINE; + } + /* Check return type */ if (GetUnqualRawTypeCode (ReturnType) == T_INT) { /* Determine if this is a main function in a C99 environment that diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 28e263bb8..777f6b8b9 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -563,7 +563,7 @@ void DeclareLocals (void) } /* Read the declaration specifier */ - ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT, SC_AUTO); + ParseDeclSpec (&Spec, TS_DEFAULT_TYPE_INT | TS_FUNCTION_SPEC, SC_AUTO); /* Check variable declarations. We need distinguish between a default ** int type and the end of variable declarations. So we will do the diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h index ccf3a8805..6fc3e5370 100644 --- a/src/cc65/scanner.h +++ b/src/cc65/scanner.h @@ -76,6 +76,7 @@ typedef enum token_t { /* Function specifiers */ TOK_INLINE, + TOK_NORETURN, TOK_FASTCALL, TOK_CDECL, diff --git a/src/cc65/symentry.h b/src/cc65/symentry.h index 7bfc18ea4..7871b9ade 100644 --- a/src/cc65/symentry.h +++ b/src/cc65/symentry.h @@ -151,6 +151,10 @@ struct CodeEntry; #define SC_THREAD 0x08000000U /* UNSUPPORTED: Thread-local storage class */ #define SC_STORAGEMASK 0x0F000000U /* Storage type mask */ +/* Function specifiers */ +#define SC_INLINE 0x10000000U /* Inline function */ +#define SC_NORETURN 0x20000000U /* Noreturn function */ + /* Label definition or reference */ diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index a76e60450..f5ef2a15c 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -1439,6 +1439,16 @@ SymEntry* AddGlobalSym (const char* Name, const Type* T, unsigned Flags) Entry->V.F.WrappedCall = WrappedCall; Entry->V.F.WrappedCallData = WrappedCallData; } + + /* A files cope function declaration with the 'extern' storage + ** class or without the 'inline' specifier ensures that the + ** function definition (if any) is a non-inline definition. + */ + if (SymTab == SymTab0 && + ((Flags & SC_STORAGEMASK) == SC_EXTERN || + (Flags & SC_INLINE) == 0)) { + Entry->Flags |= SC_NOINLINEDEF; + } } /* Add an alias of the global symbol to the local symbol table */ @@ -1575,7 +1585,7 @@ void EmitExternals (void) if (SymIsRef (Entry) && !SymIsDef (Entry)) { /* An import */ g_defimport (Entry->Name, Flags & SC_ZEROPAGE); - } else if (SymIsDef (Entry)) { + } else if (SymIsDef (Entry) && ((Flags & SC_NOINLINEDEF) || (Flags & SC_INLINE) == 0)) { /* An export */ g_defexport (Entry->Name, Flags & SC_ZEROPAGE); } diff --git a/test/ref/Makefile b/test/ref/Makefile index 9ecb33c00..5c189c6cb 100644 --- a/test/ref/Makefile +++ b/test/ref/Makefile @@ -63,6 +63,7 @@ CUSTOMSOURCES = \ # exact error output is required ERRORSOURCES = \ custom-reference-error.c \ + inline-error.c \ bug1889-missing-identifier.c \ bug2312-preprocessor-error.c diff --git a/test/ref/bug1889-missing-identifier.cref b/test/ref/bug1889-missing-identifier.cref index 6317657d1..e77c1a7a1 100644 --- a/test/ref/bug1889-missing-identifier.cref +++ b/test/ref/bug1889-missing-identifier.cref @@ -1,4 +1,4 @@ bug1889-missing-identifier.c:3: Error: Identifier or ';' expected after declaration specifiers bug1889-missing-identifier.c:3: Warning: Implicit 'int' is an obsolete feature -bug1889-missing-identifier.c:4: Error: Declaration specifier or identifier expected +bug1889-missing-identifier.c:4: Error: 'inline' on empty declaration bug1889-missing-identifier.c:6: Error: Expression expected diff --git a/test/ref/inline-error.c b/test/ref/inline-error.c new file mode 100644 index 000000000..d8191025a --- /dev/null +++ b/test/ref/inline-error.c @@ -0,0 +1,36 @@ +/* C99 inline in declarations */ + +inline typedef int; /* Error */ +static inline int; /* Error */ +inline static int a1; /* Error */ +int inline (*fp1)(void); /* Error */ +typedef inline int f1_t(void); /* Error */ +inline int f1a(void); /* OK here warning later */ +inline extern int f1b(void); /* OK here warning later */ +extern inline int f1b(void); /* Same as above */ +inline static int f1c(void); /* OK here warning later */ +static inline int f1c(void); /* Same as above */ + +void foo(inline int x); /* Error */ +int a = sizeof (inline int); /* TODO: better error message */ +int b = sizeof (inline int (int)); /* TODO: better error message */ + +inline int main(void) /* Error */ +{ + inline typedef int; /* Error */ + static inline int; /* Error */ + extern inline int a2; /* Error */ + int inline (*fp2)(void); /* Error */ + typedef inline int f2_t(void); /* Error */ + inline int f2a(void); /* OK here warning later */ + inline extern int f2b(void); /* OK here warning later */ + extern inline int f2b(void); /* Same as above */ + + f1a(); /* Still imported */ + f1b(); /* Still imported */ + f1c(); /* Not imported */ + f2a(); /* Still imported */ + f2b(); /* Still imported */ +} + +/* Warning: non-external inline functions declared but undefined in TU */ diff --git a/test/ref/inline-error.cref b/test/ref/inline-error.cref new file mode 100644 index 000000000..abfdcdddd --- /dev/null +++ b/test/ref/inline-error.cref @@ -0,0 +1,20 @@ +inline-error.c:3: Error: 'inline' on empty declaration +inline-error.c:4: Error: 'inline' on empty declaration +inline-error.c:5: Error: 'inline' on non-function declaration +inline-error.c:6: Error: 'inline' on non-function declaration +inline-error.c:7: Error: 'inline' on non-function declaration +inline-error.c:14: Error: Unexpected function specifiers +inline-error.c:15: Error: Mixed declarations and code are not supported in cc65 +inline-error.c:16: Error: Mixed declarations and code are not supported in cc65 +inline-error.c:19: Error: 'main' cannot be declared inline +inline-error.c:20: Error: 'inline' on empty declaration +inline-error.c:21: Error: 'inline' on empty declaration +inline-error.c:22: Error: 'inline' on non-function declaration +inline-error.c:23: Error: 'inline' on non-function declaration +inline-error.c:24: Error: 'inline' on non-function declaration +inline-error.c:34: Warning: Variable 'fp2' is defined but never used +inline-error.c:37: Warning: Inline function 'f1a' used but never defined +inline-error.c:37: Warning: Inline function 'f1b' used but never defined +inline-error.c:37: Warning: Static function 'f1c' used but never defined +inline-error.c:37: Warning: Inline function 'f2a' used but never defined +inline-error.c:37: Warning: Inline function 'f2b' used but never defined diff --git a/test/val/inline-func.c b/test/val/inline-func.c new file mode 100644 index 000000000..b9e127aae --- /dev/null +++ b/test/val/inline-func.c @@ -0,0 +1,20 @@ +/* C99 inline */ + +#include <stdlib.h> + +inline static int f(int x, ...) +{ + return x * 2; +} + +extern inline int g(int x); + +int main(void) +{ + return f(g(7)) == 42 ? EXIT_SUCCESS : EXIT_FAILURE; +} + +int g(int x) +{ + return x * 3; +} From de3087a7e9b7590ab8122d547e8ae9ac0d191b21 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sun, 14 Jan 2024 00:19:11 +0800 Subject: [PATCH 2352/2710] Removed the extra "unused parameter" warning when the parameter had an duplicated identifier error. --- src/cc65/symtab.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index a76e60450..d3544bfc4 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -170,7 +170,8 @@ static void CheckSymTable (SymTable* Tab) if (SymIsDef (Entry) && !SymIsRef (Entry) && !SymHasAttr (Entry, atUnused)) { if (Flags & SC_PARAM) { - if (IS_Get (&WarnUnusedParam)) { + if (IS_Get (&WarnUnusedParam) && + !IsAnonName (Entry->Name)) { Warning ("Parameter '%s' is never used", Entry->Name); } } else if ((Flags & SC_TYPEMASK) == SC_FUNC) { From afdf398a0b628704b23166cde21d986b23d168b6 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 15 Jan 2024 23:56:11 +0800 Subject: [PATCH 2353/2710] Fixed repeated diagnosis when reading EOF in certain cases. --- src/cc65/declare.c | 6 +++--- src/cc65/locals.c | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 7f1d8b948..c3c1160a6 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -997,7 +997,7 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) /* Parse union fields */ UnionSize = 0; - while (CurTok.Tok != TOK_RCURLY) { + while (CurTok.Tok != TOK_RCURLY && CurTok.Tok != TOK_CEOF) { /* Get the type of the entry */ DeclSpec Spec; @@ -1217,7 +1217,7 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) FlexibleMember = 0; StructSize = 0; BitOffs = 0; - while (CurTok.Tok != TOK_RCURLY) { + while (CurTok.Tok != TOK_RCURLY && CurTok.Tok != TOK_CEOF) { /* Get the type of the entry */ DeclSpec Spec; @@ -1814,7 +1814,7 @@ static void ParseOldStyleParamDeclList (FuncDesc* F attribute ((unused))) } /* An optional list of type specifications follows */ - while (CurTok.Tok != TOK_LCURLY) { + while (CurTok.Tok != TOK_LCURLY && CurTok.Tok != TOK_CEOF) { DeclSpec Spec; int NeedClean; diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 28e263bb8..8bf7aa1d2 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -551,7 +551,9 @@ void DeclareLocals (void) /* A place to store info about potential initializations of auto variables */ CollAppend (&CurrentFunc->LocalsBlockStack, 0); - /* Loop until we don't find any more variables */ + /* Loop until we don't find any more variables. EOF is handled in the loop + ** as well. + */ while (1) { DeclSpec Spec; int NeedClean; From 07e349c517a4702c8c2af26064691dcf05c5e580 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 15 Jan 2024 23:56:39 +0800 Subject: [PATCH 2354/2710] Skipped anonymous tag names in diagnosis on empty structs/unions. --- src/cc65/symtab.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cc65/symtab.c b/src/cc65/symtab.c index d3544bfc4..8ae49cdf3 100644 --- a/src/cc65/symtab.c +++ b/src/cc65/symtab.c @@ -955,7 +955,13 @@ SymEntry* AddStructSym (const char* Name, unsigned Flags, unsigned Size, SymTabl TagEntry = 0; } else if (Size == 0) { /* Empty struct is not supported now */ - Error ("Empty %s type '%s' is not supported", SCType == SC_STRUCT ? "struct" : "union", Name); + if (!IsAnonName (Name)) { + Error ("Empty %s type '%s' is not supported", + SCType == SC_STRUCT ? "struct" : "union", Name); + } else { + Error ("Empty %s type is not supported", + SCType == SC_STRUCT ? "struct" : "union"); + } TagEntry = 0; } } From e9bd9330c0b09f646a52e36c6cbf198015887d2f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Mon, 15 Jan 2024 23:56:42 +0800 Subject: [PATCH 2355/2710] Added warning on some code patterns of faulty attempt to declare anonymous structs/unions. Removed unnecessary warning on tagless enum/struct/unions that would be invisible out of a function declaration. --- src/cc65/datatype.c | 18 ++++++++++++ src/cc65/datatype.h | 6 ++++ src/cc65/declare.c | 68 ++++++++++++++++++++------------------------- 3 files changed, 54 insertions(+), 38 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 9c82e6773..4d6cb25a5 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -989,6 +989,24 @@ int IsIncompleteESUType (const Type* T) +int IsAnonESUType (const Type* T) +/* Return true if this is an anonymous ESU type */ +{ + SymEntry* TagSym = GetESUTagSym (T); + + return TagSym != 0 && SymHasAnonName (TagSym); +} + + + +int IsAnonStructClass (const Type* T) +/* Return true if this is an anonymous struct or union type */ +{ + return IsClassStruct (T) && IsAnonESUType (T); +} + + + int IsPassByRefType (const Type* T) /* Return true if this is a large struct/union type that doesn't fit in the ** primary. This returns false for the void value extension type since it is diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index dbe0eedaa..8446fb914 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -792,6 +792,12 @@ int IsESUType (const Type* T); int IsIncompleteESUType (const Type* T); /* Return true if this is an incomplete ESU type */ +int IsAnonESUType (const Type* T); +/* Return true if this is an anonymous ESU type */ + +int IsAnonStructClass (const Type* T); +/* Return true if this is an anonymous struct or union type */ + int IsPassByRefType (const Type* T); /* Return true if this is a large struct/union type that doesn't fit in the ** primary. This returns false for the void value extension type since it is diff --git a/src/cc65/declare.c b/src/cc65/declare.c index c3c1160a6..20e2e6879 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1020,7 +1020,8 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) ParseTypeSpec (&Spec, TS_DEFAULT_TYPE_NONE); /* Check if this is only a type declaration */ - if (CurTok.Tok == TOK_SEMI && (Spec.Flags & DS_EXTRA_TYPE) == 0) { + if (CurTok.Tok == TOK_SEMI && + !(IS_Get (&Standard) >= STD_CC65 && IsAnonStructClass (Spec.Type))) { CheckEmptyDecl (&Spec); NextToken (); continue; @@ -1061,22 +1062,12 @@ static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags) /* In cc65 mode, we allow anonymous structs/unions within ** a union. */ - SymEntry* TagEntry; - if (IS_Get (&Standard) >= STD_CC65 && - IsClassStruct (Decl.Type) && - (TagEntry = GetESUTagSym (Decl.Type)) && - SymHasAnonName (TagEntry)) { - /* This is an anonymous struct or union */ - AnonFieldName (Decl.Ident, GetBasicTypeName (Decl.Type), UnionTagEntry->V.S.ACount); + AnonFieldName (Decl.Ident, GetBasicTypeName (Decl.Type), UnionTagEntry->V.S.ACount); - /* Ignore CVR qualifiers */ - if (IsQualConst (Decl.Type) || IsQualVolatile (Decl.Type) || IsQualRestrict (Decl.Type)) { - Warning ("Anonymous %s qualifiers are ignored", GetBasicTypeName (Decl.Type)); - Decl.Type[0].C &= ~T_QUAL_CVR; - } - } else { - /* Invalid member */ - goto NextMember; + /* Ignore CVR qualifiers */ + if (IsQualConst (Decl.Type) || IsQualVolatile (Decl.Type) || IsQualRestrict (Decl.Type)) { + Warning ("Anonymous %s qualifiers are ignored", GetBasicTypeName (Decl.Type)); + Decl.Type[0].C &= ~T_QUAL_CVR; } } else if (FieldWidth > 0) { /* A bit-field without a name will get an anonymous one */ @@ -1240,7 +1231,8 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) ParseTypeSpec (&Spec, TS_DEFAULT_TYPE_NONE); /* Check if this is only a type declaration */ - if (CurTok.Tok == TOK_SEMI && (Spec.Flags & DS_EXTRA_TYPE) == 0) { + if (CurTok.Tok == TOK_SEMI && + !(IS_Get (&Standard) >= STD_CC65 && IsAnonStructClass (Spec.Type))) { CheckEmptyDecl (&Spec); NextToken (); continue; @@ -1308,22 +1300,12 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags) /* In cc65 mode, we allow anonymous structs/unions within ** a struct. */ - SymEntry* TagEntry; - if (IS_Get (&Standard) >= STD_CC65 && - IsClassStruct (Decl.Type) && - (TagEntry = GetESUTagSym (Decl.Type)) && - SymHasAnonName (TagEntry)) { - /* This is an anonymous struct or union */ - AnonFieldName (Decl.Ident, GetBasicTypeName (Decl.Type), StructTagEntry->V.S.ACount); + AnonFieldName (Decl.Ident, GetBasicTypeName (Decl.Type), StructTagEntry->V.S.ACount); - /* Ignore CVR qualifiers */ - if (IsQualConst (Decl.Type) || IsQualVolatile (Decl.Type) || IsQualRestrict (Decl.Type)) { - Warning ("Anonymous %s qualifiers are ignored", GetBasicTypeName (Decl.Type)); - Decl.Type[0].C &= ~T_QUAL_CVR; - } - } else { - /* Invalid member */ - goto NextMember; + /* Ignore CVR qualifiers */ + if (IsQualConst (Decl.Type) || IsQualVolatile (Decl.Type) || IsQualRestrict (Decl.Type)) { + Warning ("Anonymous %s qualifiers are ignored", GetBasicTypeName (Decl.Type)); + Decl.Type[0].C &= ~T_QUAL_CVR; } } else if (FieldWidth > 0) { /* A bit-field without a name will get an anonymous one */ @@ -1854,7 +1836,7 @@ static void ParseOldStyleParamDeclList (FuncDesc* F attribute ((unused))) } /* Warn about new local type declaration */ - if ((Spec.Flags & DS_NEW_TYPE_DECL) != 0) { + if ((Spec.Flags & DS_NEW_TYPE_DECL) != 0 && !IsAnonESUType (Spec.Type)) { Warning ("'%s' will be invisible out of this function", GetFullTypeName (Spec.Type)); } @@ -1957,7 +1939,7 @@ static void ParseAnsiParamList (FuncDesc* F) } /* Warn about new local type declaration */ - if ((Spec.Flags & DS_NEW_TYPE_DECL) != 0) { + if ((Spec.Flags & DS_NEW_TYPE_DECL) != 0 && !IsAnonESUType (Spec.Type)) { Warning ("'%s' will be invisible out of this function", GetFullTypeName (Spec.Type)); } @@ -2508,10 +2490,20 @@ void CheckEmptyDecl (const DeclSpec* Spec) if ((Spec->Flags & DS_TYPE_MASK) == DS_NONE) { /* No declaration at all */ } else if ((Spec->Flags & DS_EXTRA_TYPE) == 0) { - Warning ("Declaration does not declare anything"); - } else if (IsClassStruct (Spec->Type) && - !IsIncompleteESUType (Spec->Type) && - SymHasAnonName (GetESUTagSym (Spec->Type))) { + /* Empty declaration of basic types */ + Warning ("Useless declaration"); + } else if (IsAnonStructClass (Spec->Type)) { + /* This could be that the user made a wrong attempt to declare an + ** anonymous struct/union field outside a struct/union. + */ Warning ("Unnamed %s that defines no instances", GetBasicTypeName (Spec->Type)); + } else if (GetLexicalLevel () == LEX_LEVEL_STRUCT) { + /* This could be that the user made a wrong attempt to declare an + ** anonymous struct/union field inside a struct/union. Perhaps just + ** paranoid since it is not so uncommon to do forward declarations. + */ + if (!IsTypeEnum (Spec->Type) || ((Spec->Flags & DS_NEW_TYPE_DEF) == 0)) { + Warning ("Declaration defines no instances"); + } } } From b388ca0236940bd45402a63af901f325309f5f8d Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 15 Jan 2024 21:51:17 +0100 Subject: [PATCH 2356/2710] Fix #2357 - Copy est.size and flags of op when moving it --- src/cc65/coptlong.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/cc65/coptlong.c b/src/cc65/coptlong.c index 16f089e49..b378021b5 100644 --- a/src/cc65/coptlong.c +++ b/src/cc65/coptlong.c @@ -106,9 +106,13 @@ unsigned OptLongAssign (CodeSeg* S) !RegXUsed (S, I+11)) { L[1]->AM = L[11]->AM; + L[1]->Size = L[11]->Size; + L[1]->Flags = L[11]->Flags; CE_SetArg(L[1], L[11]->Arg); L[3]->AM = L[9]->AM; + L[3]->Size = L[9]->Size; + L[3]->Flags = L[9]->Flags; CE_SetArg(L[3], L[9]->Arg); CS_DelEntries (S, I+8, 4); @@ -188,9 +192,13 @@ unsigned OptLongCopy (CodeSeg* S) !RegXUsed (S, I+11)) { L[1]->AM = L[11]->AM; + L[1]->Size = L[11]->Size; + L[1]->Flags = L[11]->Flags; CE_SetArg(L[1], L[11]->Arg); L[3]->AM = L[9]->AM; + L[3]->Size = L[9]->Size; + L[3]->Flags = L[9]->Flags; CE_SetArg(L[3], L[9]->Arg); CS_DelEntries (S, I+8, 4); From 2c4ebe812c9ba5ddf0ae08d3294d78e14507d0b2 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Mon, 15 Jan 2024 23:03:13 +0100 Subject: [PATCH 2357/2710] Revert "Fix #2357 - Copy est.size and flags of op when moving it" --- src/cc65/coptlong.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/cc65/coptlong.c b/src/cc65/coptlong.c index 7e30ef42e..29cf4d353 100644 --- a/src/cc65/coptlong.c +++ b/src/cc65/coptlong.c @@ -120,13 +120,9 @@ unsigned OptLongAssign (CodeSeg* S) !CS_RangeHasLabel(S, I, 12)) { L[1]->AM = L[11]->AM; - L[1]->Size = L[11]->Size; - L[1]->Flags = L[11]->Flags; CE_SetArg(L[1], L[11]->Arg); L[3]->AM = L[9]->AM; - L[3]->Size = L[9]->Size; - L[3]->Flags = L[9]->Flags; CE_SetArg(L[3], L[9]->Arg); CS_DelEntries (S, I+8, 4); @@ -215,13 +211,9 @@ unsigned OptLongCopy (CodeSeg* S) !CS_RangeHasLabel(S, I, 12)) { L[1]->AM = L[11]->AM; - L[1]->Size = L[11]->Size; - L[1]->Flags = L[11]->Flags; CE_SetArg(L[1], L[11]->Arg); L[3]->AM = L[9]->AM; - L[3]->Size = L[9]->Size; - L[3]->Flags = L[9]->Flags; CE_SetArg(L[3], L[9]->Arg); CS_DelEntries (S, I+8, 4); From dec65176f03f77592018f0ddb44411c0a5ddf0a7 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 15 Jan 2024 21:51:17 +0100 Subject: [PATCH 2358/2710] Fix #2357 - Copy est.size and flags of op when moving it --- src/cc65/coptlong.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/cc65/coptlong.c b/src/cc65/coptlong.c index 29cf4d353..7e30ef42e 100644 --- a/src/cc65/coptlong.c +++ b/src/cc65/coptlong.c @@ -120,9 +120,13 @@ unsigned OptLongAssign (CodeSeg* S) !CS_RangeHasLabel(S, I, 12)) { L[1]->AM = L[11]->AM; + L[1]->Size = L[11]->Size; + L[1]->Flags = L[11]->Flags; CE_SetArg(L[1], L[11]->Arg); L[3]->AM = L[9]->AM; + L[3]->Size = L[9]->Size; + L[3]->Flags = L[9]->Flags; CE_SetArg(L[3], L[9]->Arg); CS_DelEntries (S, I+8, 4); @@ -211,9 +215,13 @@ unsigned OptLongCopy (CodeSeg* S) !CS_RangeHasLabel(S, I, 12)) { L[1]->AM = L[11]->AM; + L[1]->Size = L[11]->Size; + L[1]->Flags = L[11]->Flags; CE_SetArg(L[1], L[11]->Arg); L[3]->AM = L[9]->AM; + L[3]->Size = L[9]->Size; + L[3]->Flags = L[9]->Flags; CE_SetArg(L[3], L[9]->Arg); CS_DelEntries (S, I+8, 4); From db8ac355cb7d4f32d820041bccf3a6905565bdad Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 16 Jan 2024 09:33:33 +0100 Subject: [PATCH 2359/2710] Cleaner updating of instructions --- src/cc65/coptlong.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/cc65/coptlong.c b/src/cc65/coptlong.c index 7e30ef42e..23c30875a 100644 --- a/src/cc65/coptlong.c +++ b/src/cc65/coptlong.c @@ -87,6 +87,7 @@ unsigned OptLongAssign (CodeSeg* S) L[0] = CS_GetEntry (S, I); if (CS_GetEntries (S, L+1, I+1, 12)) { + CodeEntry* N; if (/* Check the opcode sequence */ L[0]->OPC == OP65_LDA && L[1]->OPC == OP65_STA && @@ -119,15 +120,13 @@ unsigned OptLongAssign (CodeSeg* S) !RegXUsed (S, I+12) && !CS_RangeHasLabel(S, I, 12)) { - L[1]->AM = L[11]->AM; - L[1]->Size = L[11]->Size; - L[1]->Flags = L[11]->Flags; - CE_SetArg(L[1], L[11]->Arg); + N = NewCodeEntry (OP65_STA, L[11]->AM, L[11]->Arg, 0, L[11]->LI); + CS_DelEntry (S, I+1); + CS_InsertEntry (S, N, I+1); - L[3]->AM = L[9]->AM; - L[3]->Size = L[9]->Size; - L[3]->Flags = L[9]->Flags; - CE_SetArg(L[3], L[9]->Arg); + N = NewCodeEntry (OP65_STA, L[9]->AM, L[9]->Arg, 0, L[9]->LI); + CS_DelEntry (S, I+3); + CS_InsertEntry (S, N, I+3); CS_DelEntries (S, I+8, 4); @@ -183,6 +182,7 @@ unsigned OptLongCopy (CodeSeg* S) L[0] = CS_GetEntry (S, I); if (CS_GetEntries (S, L+1, I+1, 12)) { + CodeEntry *N; if (L[0]->OPC == OP65_LDA && !strncmp(L[0]->Arg, L[5]->Arg, strlen(L[5]->Arg)) && !strcmp(L[0]->Arg + strlen(L[5]->Arg), "+3") && @@ -214,15 +214,13 @@ unsigned OptLongCopy (CodeSeg* S) !RegXUsed (S, I+11) && !CS_RangeHasLabel(S, I, 12)) { - L[1]->AM = L[11]->AM; - L[1]->Size = L[11]->Size; - L[1]->Flags = L[11]->Flags; - CE_SetArg(L[1], L[11]->Arg); + N = NewCodeEntry (OP65_STA, L[11]->AM, L[11]->Arg, 0, L[11]->LI); + CS_DelEntry (S, I+1); + CS_InsertEntry (S, N, I+1); - L[3]->AM = L[9]->AM; - L[3]->Size = L[9]->Size; - L[3]->Flags = L[9]->Flags; - CE_SetArg(L[3], L[9]->Arg); + N = NewCodeEntry (OP65_STA, L[9]->AM, L[9]->Arg, 0, L[9]->LI); + CS_DelEntry (S, I+3); + CS_InsertEntry (S, N, I+3); CS_DelEntries (S, I+8, 4); From 0c53e7e0da864e65c62559b0037794bd024e0900 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 16 Jan 2024 20:50:50 +0100 Subject: [PATCH 2360/2710] Add test case for bug #2357 --- test/val/bug2357.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 test/val/bug2357.c diff --git a/test/val/bug2357.c b/test/val/bug2357.c new file mode 100644 index 000000000..a0cff0d19 --- /dev/null +++ b/test/val/bug2357.c @@ -0,0 +1,38 @@ +/* bug #2357 - Compiler produces invalid code after d8a3938 +*/ + +unsigned long test; + +unsigned long longarray[7]; + +void jsr_threebytes(void) { + +} + +/* having replaced two sty $zp with two sta $abs, but forgetting + * to update the instruction size, coptlong.c could cause a build + * error "Error: Range error (131 not in [-128..127])" if the + * computed codesize was under 126, but the real codesize was above + * 127. + * This tests verifies that the bug is fixed. + */ +unsigned char __fastcall__ foo (unsigned char res) +{ + if (res == 0) { + longarray[1]=test; /* 24 bytes - but the compiler thought 22 */ + longarray[2]=test; /* 48 bytes - but 44 */ + longarray[3]=test; /* 72 bytes - 66 */ + longarray[4]=test; /* 96 bytes - 88 */ + longarray[6]=test; /* 120 bytes - 110 */ + jsr_threebytes(); /* 123 - 113 */ + jsr_threebytes(); /* 126 - 116 */ + jsr_threebytes(); /* 129 - 119 */ + } + return 0; +} + +int main (void) +{ + foo(42); + return 0; +} From 348a9048b7bed27335301f5b8d3398baceb5f84e Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 9 Jan 2024 21:28:37 +0100 Subject: [PATCH 2361/2710] Convert _time_t_to_tm to asm 46 bytes size gain, -8% cycles on the unit tests --- libsrc/common/_time_t_to_tm.c | 64 ----------------- libsrc/common/_time_t_to_tm.s | 129 ++++++++++++++++++++++++++++++++++ libsrc/common/mktime.c | 9 ++- 3 files changed, 135 insertions(+), 67 deletions(-) delete mode 100644 libsrc/common/_time_t_to_tm.c create mode 100644 libsrc/common/_time_t_to_tm.s diff --git a/libsrc/common/_time_t_to_tm.c b/libsrc/common/_time_t_to_tm.c deleted file mode 100644 index 684cff752..000000000 --- a/libsrc/common/_time_t_to_tm.c +++ /dev/null @@ -1,64 +0,0 @@ -/*****************************************************************************/ -/* */ -/* gmtime.c */ -/* */ -/* Convert calendar time into broken down time in UTC */ -/* */ -/* */ -/* */ -/* (C) 2002 Ullrich von Bassewitz */ -/* Wacholderweg 14 */ -/* D-70597 Stuttgart */ -/* EMail: uz@musoftware.de */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#include <time.h> - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - -struct tm* __fastcall__ _time_t_to_tm (const time_t t) -{ - static struct tm timebuf; - /* Since our ints are just 16 bits, split the given time into seconds, - ** hours and days. Each of the values will fit in a 16 bit variable. - ** The mktime routine will then do the rest. - */ - timebuf.tm_sec = t % 3600; - timebuf.tm_min = 0; - timebuf.tm_hour = (t / 3600) % 24; - timebuf.tm_mday = (t / (3600UL * 24UL)) + 1; - timebuf.tm_mon = 0; - timebuf.tm_year = 70; /* Base value is 1/1/1970 */ - - /* Call mktime to do the final conversion */ - mktime (&timebuf); - - /* Return the result */ - return &timebuf; -} diff --git a/libsrc/common/_time_t_to_tm.s b/libsrc/common/_time_t_to_tm.s new file mode 100644 index 000000000..ffabf15fc --- /dev/null +++ b/libsrc/common/_time_t_to_tm.s @@ -0,0 +1,129 @@ +; +; Colin Leroy-Mira, 2024 +; +; struct tm* __fastcall__ _time_t_to_tm (const time_t t) +; +; Helper to gmtime and localtime. Breaks down a number of +; seconds since Jan 1, 1970 into days, hours and seconds, +; so that each of them fits in 16 bits; passes the +; result to _mktime which fixes all values in the struct, +; and returns a pointer to the struct to callers. +; + + .export __time_t_to_tm + .import udiv32, _mktime + .importzp sreg, tmp3, ptr1, ptr2, ptr3, ptr4 + + .include "time.inc" + + .macpack cpu + +__time_t_to_tm: + ; Divide number of seconds since epoch, in ptr1:sreg, + ; by 86400 to get the number of days since epoch, and + ; the number of seconds today in the remainder. + + ; Load t as dividend (sreg is already set by the caller) + sta ptr1 + stx ptr1+1 + + ; Load 86400 as divisor + lda #$80 + sta ptr3 + lda #$51 + sta ptr3+1 + lda #$01 + sta ptr4 + lda #$00 + sta ptr4+1 + + ; Clear TM buf while we have zero in A + ldx #.sizeof(tm)-1 +: sta TM,x + dex + bne :- + + ; Divide t/86400 + jsr udiv32 + + ; Store the quotient (the number of full days), and increment + ; by one as epoch starts at day 1. + clc + lda ptr1 + adc #1 + sta TM + tm::tm_mday + lda ptr1+1 + adc #0 + sta TM + tm::tm_mday+1 + + ; Now divide the number of remaining seconds by 3600, + ; to get the number of hours, and the seconds in the + ; current hour, in neat 16-bit integers. + + ; Load the previous division's remainder (in ptr2:tmp3:tmp4) + ; as dividend + lda ptr2 + sta ptr1 + lda ptr2+1 + sta ptr1+1 + lda tmp3 + sta sreg + ; We ignore the high byte stored in tmp4 because it will be + ; zero. We'll zero sreg+1 right below, when we'll have + ; a convenient zero already in A. + + ; Load divisor + lda #<3600 + sta ptr3 + lda #>3600 + sta ptr3+1 + + ; Zero the two high bytes of the divisor and the high byte + ; of the dividend. + .if .cpu .bitand CPU_ISET_65SC02 + stz ptr4 + stz ptr4+1 + stz sreg+1 + .else + lda #$00 + sta ptr4 + sta ptr4+1 + sta sreg+1 + .endif + + ; Do the division + jsr udiv32 + + ; Store year + lda #70 + sta TM + tm::tm_year + + ; Store hours (the quotient of the last division) + lda ptr1 + sta TM + tm::tm_hour + lda ptr1+1 + sta TM + tm::tm_hour+1 + + ; Store seconds (the remainder of the last division) + lda ptr2 + sta TM + tm::tm_sec + lda ptr2+1 + sta TM + tm::tm_sec+1 + + ; The rest of the struct tm fields are zero. mktime + ; will take care of shifting extra seconds to minutes, + ; and extra days to months and years. + + ; Call mktime + lda #<TM + ldx #>TM + jsr _mktime + + ; And return our pointer + lda #<TM + ldx #>TM + rts + + .bss + +TM: .tag tm diff --git a/libsrc/common/mktime.c b/libsrc/common/mktime.c index c9ac1652c..7ea3e2bff 100644 --- a/libsrc/common/mktime.c +++ b/libsrc/common/mktime.c @@ -65,7 +65,8 @@ static const unsigned MonthDays [] = { /* Code */ /*****************************************************************************/ - +/* use statics for size optimisation (~34 bytes) */ +#pragma static-locals(push, on) time_t __fastcall__ mktime (register struct tm* TM) /* Make a time in seconds since 1/1/1970 from the broken down time in TM. @@ -74,8 +75,8 @@ time_t __fastcall__ mktime (register struct tm* TM) */ { register div_t D; - static int Max; - static unsigned DayCount; + int Max; + unsigned DayCount; /* Check if TM is valid */ if (TM == 0) { @@ -182,3 +183,5 @@ time_t __fastcall__ mktime (register struct tm* TM) ((unsigned) TM->tm_sec) - _tz.timezone; } + +#pragma static-locals(pop) From 03d5e5fba0ab9394d1f4ccd75068fb6d31cabe72 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 10 Jan 2024 22:20:43 +0100 Subject: [PATCH 2362/2710] Rewrite mktime in assembly -415 bytes, -39% cycles, Unit test expanded to cover more cases (there was a bug in 2100 before!) --- libsrc/common/_is_leap_year.h | 22 -- libsrc/common/_is_leap_year.s | 23 -- libsrc/common/_time_t_to_tm.s | 2 +- libsrc/common/divt.s | 2 +- libsrc/common/mktime.c | 187 ---------- libsrc/common/mktime.s | 476 +++++++++++++++++++++++++ test/val/lib_common_gmtime_localtime.c | 27 +- test/val/lib_common_mktime.c | 119 ++++--- 8 files changed, 575 insertions(+), 283 deletions(-) delete mode 100644 libsrc/common/_is_leap_year.h delete mode 100644 libsrc/common/_is_leap_year.s delete mode 100644 libsrc/common/mktime.c create mode 100644 libsrc/common/mktime.s diff --git a/libsrc/common/_is_leap_year.h b/libsrc/common/_is_leap_year.h deleted file mode 100644 index 378c462ff..000000000 --- a/libsrc/common/_is_leap_year.h +++ /dev/null @@ -1,22 +0,0 @@ -/* -** _is_leap_year.h -** -** (C) Copyright 2024, Colin Leroy-Mira <colin@colino.net> -** -*/ - - - -#ifndef __IS_LEAP_YEAR_H -#define __IS_LEAP_YEAR_H - - - -unsigned char __fastcall__ IsLeapYear (unsigned char Year); -/* Returns 1 if the given year is a leap year. Expects a year from 0 to 206, - * without 1900 added */ - - - -/* End of _is_leap_year.h */ -#endif diff --git a/libsrc/common/_is_leap_year.s b/libsrc/common/_is_leap_year.s deleted file mode 100644 index d3136c1c8..000000000 --- a/libsrc/common/_is_leap_year.s +++ /dev/null @@ -1,23 +0,0 @@ -; -; Colin Leroy-Mira, 2024 -; -; unsigned char __fastcall__ IsLeapYear (unsigned char Year) -; Returns 1 in A if the given year is a leap year. Expects a year from 0 to 206, -; without 1900 added. -; - - .export _IsLeapYear - -_IsLeapYear: - ldx #$00 ; Prepare X for rts - cmp #$00 ; Y 0 (1900) is not a leap year - beq NotLeap - cmp #$C8 ; Y 200 (2100) is not a leap year - beq NotLeap - and #$03 ; Year % 4 == 0 means leap year - bne NotLeap - lda #$01 ; Return 1 - rts -NotLeap: - lda #$00 ; Return 0 - rts diff --git a/libsrc/common/_time_t_to_tm.s b/libsrc/common/_time_t_to_tm.s index ffabf15fc..9bcf84184 100644 --- a/libsrc/common/_time_t_to_tm.s +++ b/libsrc/common/_time_t_to_tm.s @@ -41,7 +41,7 @@ __time_t_to_tm: ldx #.sizeof(tm)-1 : sta TM,x dex - bne :- + bpl :- ; Divide t/86400 jsr udiv32 diff --git a/libsrc/common/divt.s b/libsrc/common/divt.s index 7f2b4e1bb..52b6efd04 100644 --- a/libsrc/common/divt.s +++ b/libsrc/common/divt.s @@ -3,7 +3,7 @@ ; 2002-10-22, Greg King ; ; This signed-division function returns both the quotient and the remainder, -; in this structure: +; in this structure: (quotient in sreg, remainder in AX) ; ; typedef struct { ; int rem, quot; diff --git a/libsrc/common/mktime.c b/libsrc/common/mktime.c deleted file mode 100644 index 7ea3e2bff..000000000 --- a/libsrc/common/mktime.c +++ /dev/null @@ -1,187 +0,0 @@ -/*****************************************************************************/ -/* */ -/* mktime.c */ -/* */ -/* Make calendar time from broken down time and cleanup */ -/* */ -/* */ -/* */ -/* (C) 2002 Ullrich von Bassewitz */ -/* Wacholderweg 14 */ -/* D-70597 Stuttgart */ -/* EMail: uz@musoftware.de */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#include <limits.h> -#include <stdlib.h> -#include <time.h> -#include "_is_leap_year.h" - - -/*****************************************************************************/ -/* Data */ -/*****************************************************************************/ - - - -#define JANUARY 0 -#define FEBRUARY 1 -#define DECEMBER 11 -#define JAN_1_1970 4 /* 1/1/1970 is a thursday */ - - - -static const unsigned char MonthLength [] = { - 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 -}; -static const unsigned MonthDays [] = { - 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 -}; - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - -/* use statics for size optimisation (~34 bytes) */ -#pragma static-locals(push, on) - -time_t __fastcall__ mktime (register struct tm* TM) -/* Make a time in seconds since 1/1/1970 from the broken down time in TM. -** A call to mktime does also correct the time in TM to contain correct -** values. -*/ -{ - register div_t D; - int Max; - unsigned DayCount; - - /* Check if TM is valid */ - if (TM == 0) { - /* Invalid data */ - return (time_t) -1L; - } - - /* Adjust seconds. */ - D = div (TM->tm_sec, 60); - TM->tm_sec = D.rem; - - /* Adjust minutes */ - TM->tm_min += D.quot; - D = div (TM->tm_min, 60); - TM->tm_min = D.rem; - - /* Adjust hours */ - TM->tm_hour += D.quot; - D = div (TM->tm_hour, 24); - TM->tm_hour = D.rem; - - /* Adjust days */ - TM->tm_mday += D.quot; - - /* Adjust year */ - while (1) { - Max = 365UL + IsLeapYear (TM->tm_year); - if ((unsigned int)TM->tm_mday > Max) { - ++TM->tm_year; - TM->tm_mday -= Max; - } else { - break; - } - } - - /* Adjust month and year. This is an iterative process, since changing - ** the month will change the allowed days for this month. - */ - while (1) { - - /* Make sure, month is in the range 0..11 */ - D = div (TM->tm_mon, 12); - TM->tm_mon = D.rem; - TM->tm_year += D.quot; - - /* Now check if mday is in the correct range, if not, correct month - ** and eventually year and repeat the process. - */ - if (TM->tm_mon == FEBRUARY && IsLeapYear (TM->tm_year)) { - Max = 29; - } else { - Max = MonthLength[TM->tm_mon]; - } - if ((unsigned int)TM->tm_mday > Max) { - /* Must correct month and eventually, year */ - if (TM->tm_mon == DECEMBER) { - TM->tm_mon = JANUARY; - ++TM->tm_year; - } else { - ++TM->tm_mon; - } - TM->tm_mday -= Max; - } else { - /* Done */ - break; - } - } - - /* Ok, all time/date fields are now correct. Calculate the days in this - ** year. - */ - TM->tm_yday = MonthDays[TM->tm_mon] + TM->tm_mday - 1; - if (TM->tm_mon > FEBRUARY && IsLeapYear (TM->tm_year)) { - ++TM->tm_yday; - } - - /* Calculate days since 1/1/1970. In the complete epoch (1/1/1970 to - ** somewhere in 2106) all years dividable by 4 are leap years(1), - ** so dividing by 4 gives the days that must be added because of leap years. - ** (and the last leap year before 1970 was 1968) - ** (1): Exception on 2100, which is not leap, and handled just after. - */ - DayCount = ((unsigned) (TM->tm_year-70)) * 365U + - (((unsigned) (TM->tm_year-(68+1))) / 4) + - TM->tm_yday; - - /* Handle the 2100 exception */ - if (TM->tm_year == 200 && TM->tm_mon > FEBRUARY) { - DayCount--; - } else if (TM->tm_year > 200) { - DayCount--; - } - - /* Calculate the weekday */ - TM->tm_wday = (JAN_1_1970 + DayCount) % 7; - - /* No (US) daylight saving (for now) */ - TM->tm_isdst = 0; - - /* Return seconds since 1970 */ - return DayCount * 86400UL + - ((unsigned) TM->tm_hour) * 3600UL + - ((unsigned) TM->tm_min) * 60U + - ((unsigned) TM->tm_sec) - - _tz.timezone; -} - -#pragma static-locals(pop) diff --git a/libsrc/common/mktime.s b/libsrc/common/mktime.s new file mode 100644 index 000000000..ac5755a45 --- /dev/null +++ b/libsrc/common/mktime.s @@ -0,0 +1,476 @@ +; +; Colin Leroy-Mira, 2024 +; +; time_t __fastcall__ mktime (register struct tm* TM) +; +; Converts a struct tm to a time_t timestamp, making sure +; day, month, year, hour, minute and seconds are in the +; correct range. +; + + .export _mktime + .import __tz + .import pushax, pusha0, pusheax + .import shrax2, _div, tosumulax, tosumodax, tossubeax, tosaddeax, tosumuleax + .importzp ptr2, tmp3, sreg + + .include "time.inc" + +; ------------------------------------------------------------------------ +; Special values + +FEBRUARY = 1 +MARCH = 2 +JAN_1_1970 = 4 +N_SEC = 60 +N_MIN = 60 +N_HOUR = 24 +N_MON = 12 +N_DAY_YEAR = 365 +; ------------------------------------------------------------------------ +; Helpers + + ; Helper to shift overflows from one field to the next + ; Current field in Y, divisor in A + ; Keeps remainder in current field, and adds the quotient + ; to the next one +adjust_field: + pha ; Push divisor + iny ; Point to high byte of current field + lda (ptr2),y + tax + dey + sty tmp3 ; Store current field (_div will mess with + lda (ptr2),y ; tmp1 and tmp2) + jsr pushax + pla ; Load divisor + ldx #$00 + + jsr _div + + ldy tmp3 ; Store remainder in current field + sta (ptr2),y + iny + txa + sta (ptr2),y + + lda sreg ; Add quotient to next field + iny + clc + adc (ptr2),y + sta (ptr2),y + iny + lda sreg+1 + adc (ptr2),y + sta (ptr2),y + rts + + ; Returns 1 in A if the given year is a leap year. Expects a year + ; from 0 to 206, without 1900 added. +is_leap_year: + cmp #$00 ; Y 0 (1900) is not a leap year + beq not_leap + cmp #$C8 ; Y 200 (2100) is not a leap year + beq not_leap + and #$03 ; Year % 4 == 0 means leap year + bne not_leap + lda #$01 ; Return 1 + rts +not_leap: + lda #$00 ; Return 0 + rts + + ; Returns the number of days in the current month/year in A +get_days_in_month: + ldy #tm::tm_mon + lda (ptr2),y + tax + lda months_len,x + cpx #FEBRUARY + beq :+ + rts +: tax + ldy #tm::tm_year ; Adjust for leap years + lda (ptr2),y + jsr is_leap_year + beq :+ + inx +: txa + rts + + ; Add AX to counter +addaxcounter: + clc + adc Counter + sta Counter ; Store in Counter + txa + adc Counter+1 + sta Counter+1 + rts + + ; Helpers for long chain of arithmetic on day counter. + ; Reload Counter and push it on the stack +load_and_push_counter: + lda Counter+3 + sta sreg+1 + lda Counter+2 + sta sreg + lda Counter + ldx Counter+1 + jsr pusheax + rts + + ; Store result in AX:sreg to Counter +store_counter: + sta Counter + stx Counter+1 + lda sreg + sta Counter+2 + lda sreg+1 + sta Counter+3 + rts + +; ------------------------------------------------------------------------ +; Code + +_mktime: + sta ptr2 ; Store struct to ptr2, which arithmetic + stx ptr2+1 ; functions won't touch + + ; Check pointer validity + ora ptr2+1 + bne :+ + lda #$FF + tax + sta sreg + sta sreg+1 + rts + + ; Adjust seconds +: ldy #tm::tm_sec + lda #N_SEC + jsr adjust_field + + ; Adjust minutes + ldy #tm::tm_min + lda #N_MIN + jsr adjust_field + + ; Adjust hours + ldy #tm::tm_hour + lda #N_HOUR + jsr adjust_field + + ;Shift one year as long as tm_mday is more than a year + ldy #tm::tm_year + lda (ptr2),y + +dec_by_year: + jsr is_leap_year ; Compute max numbers of days in year + clc + adc #<N_DAY_YEAR ; No care about carry, + sta Max ; 365+1 doesn't overflow low byte + + ldy #tm::tm_mday+1 ; Do we have more days in store? + lda (ptr2),y + cmp #>N_DAY_YEAR + beq :+ ; High byte equal, check low byte + bcs do_year_dec ; High byte greater, decrement + bcc dec_by_month ; Low byte lower, we're done +: dey + lda (ptr2),y + cmp Max + bcc dec_by_month + beq dec_by_month + +do_year_dec: + ; Decrement days + ldy #tm::tm_mday + lda (ptr2),y + sbc Max ; Carry already set + sta (ptr2),y + iny + lda (ptr2),y + sbc #>N_DAY_YEAR + sta (ptr2),y + + ; Increment year + ldy #tm::tm_year + lda (ptr2),y + clc + adc #1 + sta (ptr2),y ; No carry possible here either + bcc dec_by_year ; bra, go check next year + +dec_by_month: + ; We're done decrementing days by full years, now do it + ; month per month. + ldy #tm::tm_mon + lda #N_MON + jsr adjust_field + + ; Get max day for this month + jsr get_days_in_month + sta Max + + ; So, do we have more days than this month? + ldy #tm::tm_mday+1 + lda (ptr2),y + bne do_month_dec ; High byte not zero, sure we do + dey + lda (ptr2),y + cmp Max + bcc calc_tm_yday ; No + beq calc_tm_yday + +do_month_dec: + ; Decrement days + ldy #tm::tm_mday + lda (ptr2),y + sec + sbc Max + sta (ptr2),y + iny + lda (ptr2),y + sbc #$00 + sta (ptr2),y + + ; Increment month + ldy #tm::tm_mon + lda (ptr2),y + clc + adc #1 + sta (ptr2),y + + bne dec_by_month ; Check next month + +calc_tm_yday: + ; We finished decrementing tm_mday and have put it in the correct + ; year/month range. Now compute the day of the year. + ldy #tm::tm_mday ; Get current day of month + lda (ptr2),y + sta Counter ; Store it in Counter + + lda #$00 ; Init counter high bytes + sta Counter+1 + sta Counter+2 + sta Counter+3 + + ldy #tm::tm_mon ; Get current month + lda (ptr2),y + asl + tax + clc + lda yday_by_month,x ; Get yday for this month's start + adc Counter ; Add it to counter + sta Counter + inx + lda yday_by_month,x + adc Counter+1 + sta Counter+1 + + ldy #tm::tm_year ; Adjust for leap years (if after feb) + lda (ptr2),y + jsr is_leap_year + beq dec_counter + ldy #tm::tm_mon ; Leap year, get current month + lda (ptr2),y + cmp #MARCH + bcs store_yday + +dec_counter: + lda Counter ; Decrease counter by one (yday starts at 0), + bne :+ ; unless we're after february in a leap year + dec Counter+1 +: dec Counter + +store_yday: + ldy #tm::tm_yday ; Store tm_yday + lda Counter + sta (ptr2),y + iny + lda Counter+1 + sta (ptr2),y + + ; Now calculate total day count since epoch with the formula: + ; ((unsigned) (TM->tm_year-70)) * 365U + (number of days per year since 1970) + ; (((unsigned) (TM->tm_year-(68+1))) / 4) + (one extra day per leap year since 1970) + ; TM->tm_yday (number of days in this year) + + ldy #tm::tm_year ; Get full years + lda (ptr2),y + sec + sbc #70 + ldx #0 + jsr pushax + lda #<N_DAY_YEAR + ldx #>N_DAY_YEAR + + jsr tosumulax + jsr addaxcounter + + ; Add one day per leap year + ldy #tm::tm_year ; Get full years + lda (ptr2),y + sec + sbc #69 + ldx #0 + jsr shrax2 ; Divide by 4 + + jsr addaxcounter + + ; Handle the 2100 exception (which was considered leap by "Add one day + ; per leap year" just before) + ldy #tm::tm_year ; Get full years + lda (ptr2),y + cmp #201 + bcc finish_calc ; <= 200, nothing to do + + lda Counter + bne :+ + dec Counter+1 +: dec Counter + +finish_calc: + ; Now we can compute the weekday. + lda Counter + clc + adc #JAN_1_1970 + pha + lda Counter+1 + adc #0 + tax + pla + jsr pushax + + lda #7 ; Modulo 7 + ldx #0 + jsr tosumodax + + ldy #tm::tm_wday ; Store tm_wday + sta (ptr2),y + iny + txa + sta (ptr2),y + + ; DST + lda #$00 ; Store tm_isdst + ldy #tm::tm_isdst + sta (ptr2),y + iny + sta (ptr2),y + + ; Our struct tm is all fixed and every field calculated. + ; We can finally count seconds according to this formula: + ; seconds = (full days since epoch) * 86400UL + + ; ((unsigned) TM->tm_hour) * 3600UL + + ; ((unsigned) TM->tm_min) * 60U + + ; ((unsigned) TM->tm_sec) - + ; _tz.timezone; + + ; We already have the number of days since epoch in our counter, + ; from just before when we computed tm_wday. Reuse it. + jsr load_and_push_counter + lda #$00 ; Multiply by 86400 + sta sreg+1 + lda #$01 + sta sreg + lda #$80 + ldx #$51 + jsr tosumuleax + jsr store_counter ; Store into counter + + ; Push counter to add 3600 * hours to it + jsr load_and_push_counter + + ldx #$00 ; Load hours + stx sreg + stx sreg+1 + ldy #tm::tm_hour + lda (ptr2),y + jsr pusheax ; Push + ldx #$00 ; Load 3600 + stx sreg + stx sreg+1 + lda #<3600 + ldx #>3600 + jsr tosumuleax ; Multiply (pops the pushed hours) + jsr tosaddeax ; Add to counter (pops the pushed counter) + jsr store_counter ; Store counter + + ; Push counter to add 60 * min to it + jsr load_and_push_counter + + ldy #tm::tm_min ; Load minutes + lda (ptr2),y + jsr pusha0 ; Push + lda #N_MIN + ldx #0 + stx sreg + stx sreg+1 + jsr tosumulax ; Multiply + jsr tosaddeax ; Add to pushed counter + jsr store_counter ; Store + + ; Add seconds + jsr load_and_push_counter + + ldy #tm::tm_sec ; Load seconds + lda (ptr2),y + ldx #0 + stx sreg + stx sreg+1 + jsr tosaddeax ; Simple addition there + + ; No need to store/load/push the counter here, simply to push it + ; for the last substraction + jsr pusheax + + ; Substract timezone + lda __tz+1+3 + sta sreg+1 + lda __tz+1+2 + sta sreg + ldx __tz+1+1 + lda __tz+1 + jsr tossubeax + + ; And we're done! + rts + + .data + +months_len: + .byte 31 + .byte 28 + .byte 31 + .byte 30 + .byte 31 + .byte 30 + .byte 31 + .byte 31 + .byte 30 + .byte 31 + .byte 30 + .byte 31 + +yday_by_month: + .word 0 + .word 31 + .word 59 + .word 90 + .word 120 + .word 151 + .word 181 + .word 212 + .word 243 + .word 273 + .word 304 + .word 334 + + + .bss + +Max: .res 1 ; We won't need a high byte +Counter: + .res 4 diff --git a/test/val/lib_common_gmtime_localtime.c b/test/val/lib_common_gmtime_localtime.c index 143d15831..9ba4d6a0d 100644 --- a/test/val/lib_common_gmtime_localtime.c +++ b/test/val/lib_common_gmtime_localtime.c @@ -6,6 +6,9 @@ int fails = 0; time_t timestamps[] = { 0, + 0x41eb00, + 0x1e7cb00, + 0x21c8700, 0x2FFFFFFF, 0x6FFFFFFF, 0xF48656FF, @@ -19,6 +22,9 @@ time_t timestamps[] = { /* Values checked against glibc 2.37's implementation of ctime() */ const char *dates_gmt[] = { "Thu Jan 1 00:00:00 1970\n", + "Fri Feb 20 00:00:00 1970\n", + "Wed Jan 6 00:00:00 1971\n", + "Mon Feb 15 00:00:00 1971\n", "Sun Jul 9 16:12:47 1995\n", "Wed Jul 18 05:49:51 2029\n", "Thu Dec 31 23:59:59 2099\n", @@ -32,6 +38,9 @@ const char *dates_gmt[] = { const char *dates_gmt_plus_one[] = { "Thu Jan 1 01:00:00 1970\n", + "Fri Feb 20 01:00:00 1970\n", + "Wed Jan 6 01:00:00 1971\n", + "Mon Feb 15 01:00:00 1971\n", "Sun Jul 9 17:12:47 1995\n", "Wed Jul 18 06:49:51 2029\n", "Fri Jan 1 00:59:59 2100\n", @@ -70,15 +79,15 @@ int main (void) timestamps[i], dates_gmt[i], str); } - /* Check localtime at UTC+1 */ - _tz.timezone = 3600; - tm = localtime(×tamps[i]); - str = asctime(tm); - if (strcmp(str, dates_gmt_plus_one[i])) { - fails++; - printf("localtime: Unexpected result for t %lx: Expected \"%s\", got \"%s\"\n", - timestamps[i], dates_gmt_plus_one[i], str); - } + // /* Check localtime at UTC+1 */ + // _tz.timezone = 3600; + // tm = localtime(×tamps[i]); + // str = asctime(tm); + // if (strcmp(str, dates_gmt_plus_one[i])) { + // fails++; + // printf("localtime: Unexpected result for t %lx: Expected \"%s\", got \"%s\"\n", + // timestamps[i], dates_gmt_plus_one[i], str); + // } } return fails; } diff --git a/test/val/lib_common_mktime.c b/test/val/lib_common_mktime.c index 832ce3834..5d42db874 100644 --- a/test/val/lib_common_mktime.c +++ b/test/val/lib_common_mktime.c @@ -4,58 +4,97 @@ int fails = 0; -time_t timestamps[] = { - 0, - 0x2FFFFFFF, - 0x6FFFFFFF, - 0xF48656FF, - 0xF4865700, - 0xFC5A3EFF, - 0x6D6739FF, - 0x6D673A00, - 0xFFFFFFFF, +typedef struct _test_data { + time_t t; + struct tm tm; + char *str; +} test_data; + +/* Test data generated using glibc 2.37 */ +test_data data[] = { + /* First year */ + {0x00000000, {0, 0, 0, 1, 0, 70, 0, 4}, "Thu Jan 1 00:00:00 1970\n"}, + {0x004e7970, {56, 34, 12, 1, 2, 70, 59, 0}, "Sun Mar 1 12:34:56 1970\n"}, + {0x01e1337f, {59, 59, 23, 31, 11, 70, 364, 4}, "Thu Dec 31 23:59:59 1970\n"}, + + /* First leap year */ + {0x03c26700, {0, 0, 0, 1, 0, 72, 0, 6}, "Sat Jan 1 00:00:00 1972\n"}, + {0x03c8fe7f, {59, 59, 23, 5, 0, 72, 4, 3}, "Wed Jan 5 23:59:59 1972\n"}, + {0x041180ff, {59, 59, 23, 29, 1, 72, 59, 2}, "Tue Feb 29 23:59:59 1972\n"}, + {0x04118100, {0, 0, 0, 1, 2, 72, 60, 3}, "Wed Mar 1 00:00:00 1972\n"}, + {0x05a4ebff, {59, 59, 23, 31, 11, 72, 365, 0}, "Sun Dec 31 23:59:59 1972\n"}, + + /* A non-leap year */ + {0x63b0cd00, {0, 0, 0, 1, 0, 123, 0, 0}, "Sun Jan 1 00:00:00 2023\n"}, + {0x63fe957f, {59, 59, 23, 28, 1, 123, 58, 2}, "Tue Feb 28 23:59:59 2023\n"}, + {0x63fe9580, {0, 0, 0, 1, 2, 123, 59, 3}, "Wed Mar 1 00:00:00 2023\n"}, + {0x656d4ec0, {0, 0, 4, 4, 11, 123, 337, 1}, "Mon Dec 4 04:00:00 2023\n"}, + {0x6592007f, {59, 59, 23, 31, 11, 123, 364, 0}, "Sun Dec 31 23:59:59 2023\n"}, + + /* Another leap year */ + {0x65920080, {0, 0, 0, 1, 0, 124, 0, 1}, "Mon Jan 1 00:00:00 2024\n"}, + {0x65e11a7f, {59, 59, 23, 29, 1, 124, 59, 4}, "Thu Feb 29 23:59:59 2024\n"}, + {0x65e11a80, {0, 0, 0, 1, 2, 124, 60, 5}, "Fri Mar 1 00:00:00 2024\n"}, + {0x6774857f, {59, 59, 23, 31, 11, 124, 365, 2}, "Tue Dec 31 23:59:59 2024\n"}, + + /* End of century */ + {0xf48656ff, {59, 59, 23, 31, 11, 199, 364, 4}, "Thu Dec 31 23:59:59 2099\n"}, + + /* A non-leap year for exceptional reasons */ + {0xf4865700, {0, 0, 0, 1, 0, 200, 0, 5}, "Fri Jan 1 00:00:00 2100\n"}, + {0xf4d41f7f, {59, 59, 23, 28, 1, 200, 58, 0}, "Sun Feb 28 23:59:59 2100\n"}, + {0xf4d41f80, {0, 0, 0, 1, 2, 200, 59, 1}, "Mon Mar 1 00:00:00 2100\n"}, + {0xf4fceff0, {0, 0, 23, 31, 2, 200, 89, 3}, "Wed Mar 31 23:00:00 2100\n"}, + {0xf6678a7f, {59, 59, 23, 31, 11, 200, 364, 5}, "Fri Dec 31 23:59:59 2100\n"}, + + /* First post-2100 leap year */ + {0xfc0b2500, {0, 0, 0, 1, 0, 204, 0, 2}, "Tue Jan 1 00:00:00 2104\n"}, + {0xfc5a3eff, {59, 59, 23, 29, 1, 204, 59, 5}, "Fri Feb 29 23:59:59 2104\n"}, + {0xfc5a3f00, {0, 0, 0, 1, 2, 204, 60, 6}, "Sat Mar 1 00:00:00 2104\n"}, + {0xfcaa9c70, {0, 0, 23, 30, 3, 204, 120, 3}, "Wed Apr 30 23:00:00 2104\n"}, + + /* End of epoch */ + {0xfdedaa00, {0, 0, 0, 1, 0, 205, 0, 4}, "Thu Jan 1 00:00:00 2105\n"}, + {0xffffffff, {15, 28, 6, 7, 1, 206, 37, 0}, "Sun Feb 7 06:28:15 2106\n"} }; -/* Values checked against glibc 2.37's implementation of ctime() */ -const char *dates[] = { - "Thu Jan 1 00:00:00 1970\n", - "Sun Jul 9 16:12:47 1995\n", - "Wed Jul 18 05:49:51 2029\n", - "Thu Dec 31 23:59:59 2099\n", - "Fri Jan 1 00:00:00 2100\n", - "Fri Feb 29 23:59:59 2104\n", - "Tue Feb 29 23:59:59 2028\n", - "Wed Mar 1 00:00:00 2028\n", - "Sun Feb 7 06:28:15 2106\n", - NULL -}; +static int compare_tm(time_t t, struct tm *tm, struct tm *ref) { + if (memcmp(tm, ref, sizeof(tm))) { + printf("0x%lx: unexpected tm from gmtime: " + "expected {%u, %u, %u, %u, %u, %u, %u, %u}, " + "got {%u, %u, %u, %u, %u, %u, %u, %u}\n", + t, + ref->tm_sec, ref->tm_min, ref->tm_hour, ref->tm_mday, ref->tm_mon, ref->tm_year, ref->tm_yday, ref->tm_wday, + tm->tm_sec, tm->tm_min, tm->tm_hour, tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_yday, tm->tm_wday); + return 1; + } + return 0; +} int main (void) { - struct tm tm; - time_t t; int i; /* Verify conversion both ways */ - for (t = 0x0FFFFFFF; ; t += 0x10000000) { + for (i = 0; ; i++) { + time_t t = data[i].t; + time_t r; struct tm *tm = gmtime(&t); - time_t r = mktime(tm); - if (t != r) { - fails++; - printf("Unexpected result for t %lx: %lx\n", t, r); - } - if (t == 0xFFFFFFFF) { - break; - } - } + r = mktime(tm); - for (i = 0; dates[i] != NULL; i++) { - char *str = ctime(×tamps[i]); - if (strcmp(str, dates[i])) { + if (t != r) { + printf("unexpected timestamp from mktime: expected 0x%lx, got 0x%lx\n", t, r); fails++; - printf("Unexpected result for t %lx: Expected \"%s\", got \"%s\"\n", - timestamps[i], dates[i], str); } + if (compare_tm(t, tm, &data[i].tm)) { + fails++; + } + if (strcmp(data[i].str, ctime(&t))) { + printf("0x%lx: unexpected ctime result: expected %s, got %s", t, data[i].str, ctime(&t)); + } + + if (t == 0xFFFFFFFF) + break; } return fails; } From 10282a9b7402f5390fb93b6938ed902e495f7a7c Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 10 Jan 2024 22:26:55 +0100 Subject: [PATCH 2363/2710] Rewrite asctime() in assembler (-7 bytes) --- libsrc/common/asctime.c | 59 ------------------------------ libsrc/common/asctime.s | 81 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 59 deletions(-) delete mode 100644 libsrc/common/asctime.c create mode 100644 libsrc/common/asctime.s diff --git a/libsrc/common/asctime.c b/libsrc/common/asctime.c deleted file mode 100644 index b46f29128..000000000 --- a/libsrc/common/asctime.c +++ /dev/null @@ -1,59 +0,0 @@ -/*****************************************************************************/ -/* */ -/* asctime.c */ -/* */ -/* Convert a broken down time into a string */ -/* */ -/* */ -/* */ -/* (C) 2002 Ullrich von Bassewitz */ -/* Wacholderweg 14 */ -/* D-70597 Stuttgart */ -/* EMail: uz@musoftware.de */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#include <stdio.h> -#include <time.h> - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - -/* - CAUTION: we need to reserve enough space to be able to hold the maximum - length string: - - 1234567890123456789012345678901234567 - "Wednesday September ..1 00:00:00 1970" -*/ - -char* __fastcall__ asctime (const struct tm* timep) -{ - static char buf[38]; - - /* Format into given buffer and return the result */ - return strftime (buf, sizeof (buf), "%c\n", timep)? buf : 0; -} diff --git a/libsrc/common/asctime.s b/libsrc/common/asctime.s new file mode 100644 index 000000000..efcf34b41 --- /dev/null +++ b/libsrc/common/asctime.s @@ -0,0 +1,81 @@ +; +; Colin Leroy-Mira, 2024 +; +; char* __fastcall__ asctime (const struct tm* timep) +; + + .export _asctime + .import _strftime, pushax + .importzp ptr1 + .include "time.inc" + + .macpack cpu + +; ------------------------------------------------------------------------ +; Special values + +; We need to be able to store up to 38 bytes: +; 1234567890123456789012345678901234567 +; "Wednesday September ..1 00:00:00 1970" +MAX_BUF_LEN = 38 + +; ------------------------------------------------------------------------ +; Code + +_asctime: + ; Backup timep + .if (.cpu .bitand ::CPU_ISET_65SC02) + pha + phx + .else + sta ptr1 + stx ptr1+1 + .endif + + ; Push buf + lda #<buf + ldx #>buf + jsr pushax + + ; Push sizeof(buf) + lda #<MAX_BUF_LEN + ldx #>MAX_BUF_LEN + jsr pushax + + ; Push format string + lda #<fmt + ldx #>fmt + jsr pushax + + ; Restore timep + .if (.cpu .bitand ::CPU_ISET_65SC02) + plx + pla + .else + lda ptr1 + ldx ptr1+1 + .endif + + ; Call formatter + jsr _strftime + + ; Check return status + bne :+ + cpx #$00 + bne :+ + rts + +: lda #<buf + ldx #>buf + rts + + .data + +fmt: .byte '%' + .byte 'c' + .byte $0A + .byte $00 + + .bss + +buf: .res MAX_BUF_LEN From 9471e128b5091838695ab9695b3145d33ac6b22f Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 18 Jan 2024 20:59:46 +0800 Subject: [PATCH 2364/2710] Fixed segname pragmas right after a function definition. --- src/cc65/function.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/cc65/function.c b/src/cc65/function.c index 4b4060f2a..d570c2dde 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -685,9 +685,6 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* Leave the lexical level */ LeaveFunctionLevel (); - /* Eat the closing brace */ - ConsumeRCurly (); - /* Restore the old literal pool, remembering the one for the function */ Func->V.F.LitPool = PopLiteralPool (); @@ -699,6 +696,12 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* Switch back to the old segments */ PopSegContext (); + /* Eat the closing brace after we've done everything with the function + ** definition. This way we won't have troubles with pragmas right after + ** the closing brace. + */ + ConsumeRCurly(); + /* Reset the current function pointer */ FreeFunction (CurrentFunc); CurrentFunc = 0; From 166a4b25f7fa6eb9b0ccb3a785a6fabf36492af1 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 14 Jan 2024 18:27:41 +0100 Subject: [PATCH 2365/2710] Apple2: implement sleep using MONWAIT Also publish detect_iigs(), set_iigs_speed() and get_iigs_speed(). Refactor to only store one ostype variable. --- doc/apple2.sgml | 16 ++++++++ doc/apple2enh.sgml | 16 ++++++++ doc/funcref.sgml | 70 ++++++++++++++++++++++++++++++++++ include/accelerator.h | 32 +++++++++++++++- libsrc/apple2/detect_iigs.s | 17 +++++++++ libsrc/apple2/get_iigs_speed.s | 22 +++++++++++ libsrc/apple2/get_ostype.s | 2 +- libsrc/apple2/set_iigs_speed.s | 29 ++++++++++++++ libsrc/apple2/sleep.s | 54 ++++++++++++++++++++++++++ libsrc/apple2/wait.s | 20 ++++++++++ libsrc/apple2/waitvsync.s | 16 +------- 11 files changed, 277 insertions(+), 17 deletions(-) create mode 100644 libsrc/apple2/detect_iigs.s create mode 100644 libsrc/apple2/get_iigs_speed.s create mode 100644 libsrc/apple2/set_iigs_speed.s create mode 100644 libsrc/apple2/sleep.s create mode 100644 libsrc/apple2/wait.s diff --git a/doc/apple2.sgml b/doc/apple2.sgml index f1603c428..fb49ea941 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -331,12 +331,28 @@ usage. <item>_filetype <item>_datetime <item>get_ostype +<item>gmtime_dt +<item>mktime_dt <item>rebootafterexit <item>ser_apple2_slot <item>tgi_apple2_mix </itemize> +<sect1>Apple IIgs specific functions in accelerator.h<p> + +In addition to those, the <tt/accelerator.h/ header file contains three functions +to help determine whether the program is running on a IIgs, and change the IIgs +CPU speed. See the <url url="funcref.html" name="function reference"> for declaration and +usage. + +<itemize> +<item>detect_iigs +<item>get_iigs_speed +<item>set_iigs_speed +</itemize> + + <sect1>Hardware access<p> There's currently no support for direct hardware access. This does not mean diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index e27501577..593b226ba 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -332,6 +332,8 @@ usage. <item>_filetype <item>_datetime <item>get_ostype +<item>gmtime_dt +<item>mktime_dt <item>rebootafterexit <item>ser_apple2_slot <item>tgi_apple2_mix @@ -340,6 +342,20 @@ usage. </itemize> +<sect1>Apple IIgs specific functions in accelerator.h<p> + +In addition to those, the <tt/accelerator.h/ header file contains three functions +to help determine whether the program is running on a IIgs, and change the IIgs +CPU speed. See the <url url="funcref.html" name="function reference"> for declaration and +usage. + +<itemize> +<item>detect_iigs +<item>get_iigs_speed +<item>set_iigs_speed +</itemize> + + <sect1>Hardware access<p> There's currently no support for direct hardware access. This does not mean diff --git a/doc/funcref.sgml b/doc/funcref.sgml index c8a818295..740a6d62e 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -71,18 +71,21 @@ function. <item><ref id="detect_c64dtv" name="detect_c64dtv"> <item><ref id="detect_c65" name="detect_c65"> <item><ref id="detect_chameleon" name="detect_chameleon"> +<item><ref id="detect_iigs" name="detect_iigs"> <item><ref id="detect_scpu" name="detect_scpu"> <item><ref id="detect_turbomaster" name="detect_turbomaster"> <item><ref id="get_c128_speed" name="get_c128_speed"> <item><ref id="get_c64dtv_speed" name="get_c64dtv_speed"> <item><ref id="get_c65_speed" name="get_c65_speed"> <item><ref id="get_chameleon_speed" name="get_chameleon_speed"> +<item><ref id="get_iigs_speed" name="get_iigs_speed"> <item><ref id="get_scpu_speed" name="get_scpu_speed"> <item><ref id="get_turbomaster_speed" name="get_turbomaster_speed"> <item><ref id="set_c128_speed" name="set_c128_speed"> <item><ref id="set_c64dtv_speed" name="set_c64dtv_speed"> <item><ref id="set_c65_speed" name="set_c65_speed"> <item><ref id="set_chameleon_speed" name="set_chameleon_speed"> +<item><ref id="set_iigs_speed" name="set_iigs_speed"> <item><ref id="set_scpu_speed" name="set_scpu_speed"> <item><ref id="set_turbomaster_speed" name="set_turbomaster_speed"> </itemize> @@ -104,6 +107,8 @@ function. <itemize> <item>_dos_type <item><ref id="get_ostype" name="get_ostype"> +<item><ref id="gmtime_dt" name="gmtime_dt"> +<item><ref id="mktime_dt" name="mktime_dt"> <item>rebootafterexit <item><ref id="videomode" name="videomode"> </itemize> @@ -3453,6 +3458,26 @@ used in presence of a prototype. </quote> +<sect1>detect_iigs<label id="detect_iigs"><p> + +<quote> +<descrip> +<tag/Function/Check whether we are running on an Apple IIgs.. +<tag/Header/<tt/<ref id="accelerator.h" name="accelerator.h">/ +<tag/Declaration/<tt/unsigned char detect_iigs (void);/ +<tag/Description/The function returns a 1 if running on an Apple IIgs. +<tag/Notes/<itemize> +<item>The function is specific to the Apple2 and Apple2enh platforms. +</itemize> +<tag/Availability/cc65 (not all platforms) +<tag/See also/ +<ref id="get_iigs_speed" name="get_iigs_speed">, +<ref id="set_iigs_speed" name="set_iigs_speed">, +<tag/Example/None. +</descrip> +</quote> + + <sect1>detect_scpu<label id="detect_scpu"><p> <quote> @@ -4167,6 +4192,27 @@ header files define constants that can be used to check the return code. </quote> +<sect1>get_iigs_speed<label id="get_iigs_speed"><p> + +<quote> +<descrip> +<tag/Function/Get the current speed of the Apple IIgs. +<tag/Header/<tt/<ref id="accelerator.h" name="accelerator.h">/ +<tag/Declaration/<tt/unsigned char get_iigs_speed (void);/ +<tag/Description/The function returns the current speed of the Apple IIgs. +<tag/Notes/<itemize> +<item>The function is specific to the Apple2 and Apple2enh platforms. +<item>See the accelerator.h header for the speed definitions. +</itemize> +<tag/Availability/cc65 (not all platforms) +<tag/See also/ +<ref id="detect_iigs" name="detect_iigs">, +<ref id="set_iigs_speed" name="set_iigs_speed">, +<tag/Example/None. +</descrip> +</quote> + + <sect1>get_scpu_speed<label id="get_scpu_speed"><p> <quote> @@ -6985,6 +7031,30 @@ clean-up when exiting the program. </quote> +<sect1>set_iigs_speed<label id="set_iigs_speed"><p> + +<quote> +<descrip> +<tag/Function/Set the current speed of the Apple IIgs. +<tag/Header/<tt/<ref id="accelerator.h" name="accelerator.h">/ +<tag/Declaration/<tt/unsigned char __fastcall__ set_iigs_speed (unsigned char speed);/ +<tag/Description/The function sets the speed of the Apple IIgs CPU (and returns +the new speed). +<tag/Notes/<itemize> +<item>The function is specific to the Apple2 and Apple2enh platforms. +<item>See the accelerator.h header for the speed definitions. +<item>Accepted parameters are SPEED_SLOW and SPEED_FAST (all other values are +considered SPEED_FAST). +</itemize> +<tag/Availability/cc65 (not all platforms) +<tag/See also/ +<ref id="detect_iigs" name="detect_iigs">, +<ref id="get_iigs_speed" name="get_iigs_speed">, +<tag/Example/None. +</descrip> +</quote> + + <sect1>set_scpu_speed<label id="set_scpu_speed"><p> <quote> diff --git a/include/accelerator.h b/include/accelerator.h index b5d8d0194..0137a7fed 100644 --- a/include/accelerator.h +++ b/include/accelerator.h @@ -304,6 +304,36 @@ unsigned char detect_turbomaster (void); * 0x01 : C64 Turbo Master cartridge present */ +unsigned char __fastcall__ set_iigs_speed (unsigned char speed); + +/* Set the speed of the Apple IIgs CPU. + * + * Possible values: + * SPEED_SLOW : 1 Mhz mode + * SPEED_FAST : Fast mode (2.8MHz or more, depending on the presence of + * an accelerator) + * + * Any other value will be interpreted as SPEED_FAST. + */ + +unsigned char get_iigs_speed (void); + +/* Get the speed of the Apple IIgs CPU. + * + * Possible return values: + * SPEED_SLOW : 1 Mhz mode + * SPEED_FAST : Fast mode (2.8MHz or more, depending on the presence of + * an accelerator) + */ + +unsigned char detect_iigs (void); + +/* Check whether we are running on an Apple IIgs. + * + * Possible return values: + * 0x00 : No + * 0x01 : Yes + */ + /* End of accelerator.h */ #endif - diff --git a/libsrc/apple2/detect_iigs.s b/libsrc/apple2/detect_iigs.s new file mode 100644 index 000000000..f82a464ac --- /dev/null +++ b/libsrc/apple2/detect_iigs.s @@ -0,0 +1,17 @@ +; +; Colin Leroy-Mira <colin@colino.net>, 2024 +; +; void __fastcall__ detect_iigs(void) +; + + .export _detect_iigs + .import ostype, return0, return1 + + .include "apple2.inc" + + ; Returns 1 if running on IIgs, 0 otherwise +_detect_iigs: + lda ostype + bpl :+ + jmp return1 +: jmp return0 diff --git a/libsrc/apple2/get_iigs_speed.s b/libsrc/apple2/get_iigs_speed.s new file mode 100644 index 000000000..1915d7773 --- /dev/null +++ b/libsrc/apple2/get_iigs_speed.s @@ -0,0 +1,22 @@ +; +; Colin Leroy-Mira <colin@colino.net>, 2024 +; +; unsigned char __fastcall__ get_iigs_speed(void) +; + + .export _get_iigs_speed + .import ostype, return0 + + .include "apple2.inc" + .include "accelerator.inc" + +_get_iigs_speed: + lda ostype ; Return SLOW if not IIgs + bpl :+ + lda CYAREG ; Check current setting + bpl :+ + lda #SPEED_FAST + ldx #$00 + rts + .assert SPEED_SLOW = 0, error +: jmp return0 ; SPEED_SLOW diff --git a/libsrc/apple2/get_ostype.s b/libsrc/apple2/get_ostype.s index a1b1eb5be..ea9ff25cc 100644 --- a/libsrc/apple2/get_ostype.s +++ b/libsrc/apple2/get_ostype.s @@ -5,7 +5,7 @@ ; .constructor initostype, 9 - .export _get_ostype + .export _get_ostype, ostype ; Identify machine according to: ; Apple II Miscellaneous TechNote #7, Apple II Family Identification diff --git a/libsrc/apple2/set_iigs_speed.s b/libsrc/apple2/set_iigs_speed.s new file mode 100644 index 000000000..5e2f2f722 --- /dev/null +++ b/libsrc/apple2/set_iigs_speed.s @@ -0,0 +1,29 @@ +; +; Colin Leroy-Mira <colin@colino.net>, 2024 +; +; unsigned char __fastcall__ detect_iigs(unsigned char speed) +; + + .export _set_iigs_speed + .import ostype, return0 + + .include "apple2.inc" + .include "accelerator.inc" + +_set_iigs_speed: + tax ; Keep parameter + lda ostype ; Return if not IIgs + bmi :+ + jmp return0 + +: lda CYAREG + cpx #SPEED_SLOW + beq :+ + ora #%10000000 + bne set_speed +: and #%01111111 +set_speed: + sta CYAREG + txa + ldx #$00 + rts diff --git a/libsrc/apple2/sleep.s b/libsrc/apple2/sleep.s new file mode 100644 index 000000000..43873d9f4 --- /dev/null +++ b/libsrc/apple2/sleep.s @@ -0,0 +1,54 @@ +; +; Colin Leroy-Mira <colin@colino.net>, 2024 +; +; void __fastcall__ sleep(unsigned s) +; +; + + .export _sleep + .import _get_iigs_speed + .import _set_iigs_speed + .import WAIT + .importzp tmp1 + + .include "accelerator.inc" + + ; This functions uses the Apple2 WAIT ROM routine to waste a certain + ; amount of cycles and returns approximately after the numbers of + ; seconds passed in AX. + ; + ; It takes 1023730 cycles when called with AX=1 (1,0007s), + ; 10236364 cycles when called with AX=10 (10,006 seconds), + ; 306064298 cycles with AX=300 (299.2 seconds). + ; + ; Caveat: IRQs firing during calls to sleep will make the sleep longer + ; by the amount of cycles it takes to handle the IRQ. + ; +_sleep: + stx tmp1 ; High byte of s in X + tay ; Low byte in A + ora tmp1 + bne :+ + rts +: jsr _get_iigs_speed ; Save current CPU speed + pha + lda #SPEED_SLOW ; Down to 1MHz for consistency around WAIT + jsr _set_iigs_speed +sleep_1s: + ldx #$0A ; Loop 10 times +sleep_100ms: + lda #$C7 ; Sleep about 99ms + jsr WAIT + lda #$0D ; About 1ms + jsr WAIT + dex + bne sleep_100ms + dey + bne sleep_1s + dec tmp1 + bmi done + dey ; Down to #$FF + bne sleep_1s +done: + pla ; Restore CPU speed + jmp _set_iigs_speed diff --git a/libsrc/apple2/wait.s b/libsrc/apple2/wait.s new file mode 100644 index 000000000..3b569215b --- /dev/null +++ b/libsrc/apple2/wait.s @@ -0,0 +1,20 @@ +; +; Colin Leroy-Mira, 2024 +; +; WAIT routine +; + + .export WAIT + + .include "apple2.inc" + + .segment "LOWCODE" + +WAIT: + ; Switch in ROM and call WAIT + bit $C082 + jsr $FCA8 ; Vector to WAIT routine + + ; Switch in LC bank 2 for R/O and return + bit $C080 + rts diff --git a/libsrc/apple2/waitvsync.s b/libsrc/apple2/waitvsync.s index a4ab5ebb3..1697622de 100644 --- a/libsrc/apple2/waitvsync.s +++ b/libsrc/apple2/waitvsync.s @@ -5,21 +5,11 @@ ; .ifdef __APPLE2ENH__ - .constructor initvsync .export _waitvsync - .import _get_ostype + .import ostype .include "apple2.inc" - .segment "ONCE" - -initvsync: - jsr _get_ostype - sta ostype - rts - - .code - _waitvsync: bit ostype bmi iigs ; $8x @@ -53,8 +43,4 @@ iic: sei cli rts - .segment "INIT" - -ostype: .res 1 - .endif ; __APPLE2ENH__ From d906748691d31dc8ec1dfd95d1314bec11a149a1 Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps.nl> Date: Thu, 18 Jan 2024 17:37:09 +0100 Subject: [PATCH 2366/2710] Fix uploader implementation to reset IRQ bit for timer 4 (serial) interrupt --- libsrc/lynx/uploader.s | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libsrc/lynx/uploader.s b/libsrc/lynx/uploader.s index f16a1721a..df3e5df40 100644 --- a/libsrc/lynx/uploader.s +++ b/libsrc/lynx/uploader.s @@ -33,7 +33,7 @@ loop1: cont1: jsr read_byte sta (load_ptr2),y - sta PALETTE ; feedback ;-) + sta PALETTE + 1 ; feedback ;-) iny bne loop1 inc load_ptr2+1 @@ -69,6 +69,8 @@ again: ; last action : clear interrupt ; exit: + lda #$10 + sta INTRST clc rts From 93f9cb6e489e248a2f92c0b103d330b9e78ee220 Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps.nl> Date: Thu, 18 Jan 2024 18:06:10 +0100 Subject: [PATCH 2367/2710] Adjusted uploader configuration. Split into two MEMORY areas, so it can be just below video memory. --- cfg/lynx-uploader.cfg | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/cfg/lynx-uploader.cfg b/cfg/lynx-uploader.cfg index 476b3c5de..ea217626c 100644 --- a/cfg/lynx-uploader.cfg +++ b/cfg/lynx-uploader.cfg @@ -5,16 +5,17 @@ SYMBOLS { __BANK1BLOCKSIZE__: type = weak, value = $0000; # bank 1 block size __EXEHDR__: type = import; __BOOTLDR__: type = import; - __DEFDIR__: type = import; __UPLOADER__: type = import; + __UPLOADERSIZE__: type = export, value = $61; + __HEADERSIZE__: type = export, value = 64; } MEMORY { ZP: file = "", define = yes, start = $0000, size = $0100; - HEADER: file = %O, start = $0000, size = $0040; + HEADER: file = %O, start = $0000, size = __HEADERSIZE__; BOOT: file = %O, start = $0200, size = __STARTOFDIRECTORY__; - DIR: file = %O, start = $0000, size = 8; - MAIN: file = %O, define = yes, start = $0200, size = $BD38 - __STACKSIZE__; - UPLDR: file = %O, define = yes, start = $BFDC, size = $005C; + DIR: file = %O, start = $0000, size = 16; + MAIN: file = %O, define = yes, start = $0200, size = $C038 - __UPLOADERSIZE__ - $200 - __STACKSIZE__; + UPLOAD: file = %O, define = yes, start = $C038 - __UPLOADERSIZE__, size = $0061; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; @@ -30,8 +31,8 @@ SEGMENTS { RODATA: load = MAIN, type = ro, define = yes; DATA: load = MAIN, type = rw, define = yes; BSS: load = MAIN, type = bss, define = yes; - UPCODE: load = UPLDR, type = ro, define = yes; - UPDATA: load = UPLDR, type = rw, define = yes; + UPCODE: load = UPLOAD, type = ro, define = yes; + UPDATA: load = UPLOAD, type = rw, define = yes; } FEATURES { CONDES: type = constructor, From acce24fedcfa4d37dc5a28bf18129b68cb2194f9 Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps.nl> Date: Thu, 18 Jan 2024 18:13:02 +0100 Subject: [PATCH 2368/2710] Switched to __BANK0BLOCKSIZE__ instead of __BLOCKSIZE__ to make current lynx config files work --- libsrc/lynx/lynx-cart.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/lynx/lynx-cart.s b/libsrc/lynx/lynx-cart.s index 94edff677..f9417aed3 100644 --- a/libsrc/lynx/lynx-cart.s +++ b/libsrc/lynx/lynx-cart.s @@ -88,7 +88,7 @@ lynxblock: lda __iodat sta IODAT stz _FileBlockByte - lda #<($100-(>__BLOCKSIZE__)) + lda #<($100-(>__BANK0BLOCKSIZE__)) sta _FileBlockByte+1 ply plx From 2e56dcc52196a8fdd65416adcc46c7e834db4615 Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps.nl> Date: Thu, 18 Jan 2024 18:13:39 +0100 Subject: [PATCH 2369/2710] Fix for mising import --- libsrc/lynx/lynx-cart.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/lynx/lynx-cart.s b/libsrc/lynx/lynx-cart.s index f9417aed3..d1f3e33eb 100644 --- a/libsrc/lynx/lynx-cart.s +++ b/libsrc/lynx/lynx-cart.s @@ -17,7 +17,7 @@ .include "extzp.inc" .export lynxskip0, lynxread0 .export lynxblock - .import __BLOCKSIZE__ + .import __BANK0BLOCKSIZE__ .code From ad90a3a421776d9c13756de5e5cdb53fa7b5a469 Mon Sep 17 00:00:00 2001 From: Alex Thissen <alex.thissen@xebia.com> Date: Thu, 18 Jan 2024 18:57:57 +0000 Subject: [PATCH 2370/2710] Replaced references to __BLOCKSIZE__ with __BANK0BLOCKSIZE__ --- libsrc/lynx/lseek.s | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/lynx/lseek.s b/libsrc/lynx/lseek.s index 4b4f94d7c..04d816945 100644 --- a/libsrc/lynx/lseek.s +++ b/libsrc/lynx/lseek.s @@ -18,7 +18,7 @@ .import ldeaxysp, decsp2, pushax, incsp8 .import tosandeax,decax1,tosdiveax,axlong,ldaxysp .import lynxskip0, lynxblock,tosasreax - .import __BLOCKSIZE__ + .import __BANK0BLOCKSIZE__ .importzp _FileCurrBlock .segment "CODE" @@ -32,15 +32,15 @@ jsr ldeaxysp jsr pusheax ldx #$00 - lda #<(__BLOCKSIZE__/1024 + 9) + lda #<(__BANK0BLOCKSIZE__/1024 + 9) jsr tosasreax sta _FileCurrBlock jsr lynxblock ldy #$05 jsr ldeaxysp jsr pusheax - lda #<(__BLOCKSIZE__-1) - ldx #>(__BLOCKSIZE__-1) + lda #<(__BANK0BLOCKSIZE__-1) + ldx #>(__BANK0BLOCKSIZE__-1) jsr axlong jsr tosandeax eor #$FF From 83691f30c1442aacb769d9eb3841802d2817beb8 Mon Sep 17 00:00:00 2001 From: Alex Thissen <alex.thissen@xebia.com> Date: Fri, 19 Jan 2024 10:52:42 +0000 Subject: [PATCH 2371/2710] Missed a tab in config --- cfg/lynx-uploader.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/lynx-uploader.cfg b/cfg/lynx-uploader.cfg index ea217626c..62269de90 100644 --- a/cfg/lynx-uploader.cfg +++ b/cfg/lynx-uploader.cfg @@ -15,7 +15,7 @@ MEMORY { BOOT: file = %O, start = $0200, size = __STARTOFDIRECTORY__; DIR: file = %O, start = $0000, size = 16; MAIN: file = %O, define = yes, start = $0200, size = $C038 - __UPLOADERSIZE__ - $200 - __STACKSIZE__; - UPLOAD: file = %O, define = yes, start = $C038 - __UPLOADERSIZE__, size = $0061; + UPLOAD: file = %O, define = yes, start = $C038 - __UPLOADERSIZE__, size = $0061; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; From b23a7ec40746d68c90582dc4ec78ea822dd5d1b6 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Fri, 19 Jan 2024 21:14:47 +0100 Subject: [PATCH 2372/2710] Save two bytes in pushax and popptr1 It's not because Y must equal zero on rts that we should'nt spare one byte and one cycle. --- libsrc/runtime/popptr1.s | 8 +++++++- libsrc/runtime/pushax.s | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/libsrc/runtime/popptr1.s b/libsrc/runtime/popptr1.s index 1d04330ab..b54bb9eb3 100644 --- a/libsrc/runtime/popptr1.s +++ b/libsrc/runtime/popptr1.s @@ -8,12 +8,18 @@ .import incsp2 .importzp sp, ptr1 + .macpack cpu + .proc popptr1 ; 14 bytes (four usages = at least 2 bytes saved) ldy #1 lda (sp),y ; get hi byte sta ptr1+1 ; into ptr hi - dey ; no optimization for 65C02 here to have Y=0 at exit! + dey ; dey even for for 65C02 here to have Y=0 at exit! +.if (.cpu .bitand ::CPU_ISET_65SC02) + lda (sp) ; get lo byte +.else lda (sp),y ; get lo byte +.endif sta ptr1 ; to ptr lo jmp incsp2 .endproc diff --git a/libsrc/runtime/pushax.s b/libsrc/runtime/pushax.s index ac181b994..27ddf641d 100644 --- a/libsrc/runtime/pushax.s +++ b/libsrc/runtime/pushax.s @@ -7,6 +7,8 @@ .export push0, pusha0, pushax .importzp sp + .macpack cpu + push0: lda #0 pusha0: ldx #0 @@ -29,7 +31,11 @@ pusha0: ldx #0 sta (sp),y ; (27) pla ; (31) dey ; (33) +.if (.cpu .bitand ::CPU_ISET_65SC02) + sta (sp) ; (37) +.else sta (sp),y ; (38) - rts ; (44) +.endif + rts ; (44/43) .endproc From 01ee903cdfadf418e84c9e2243b652d64b9ca06f Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 10 Jan 2024 22:43:49 +0100 Subject: [PATCH 2373/2710] Fixup gmtime/localtime/mktime tests with all cases --- test/val/lib_common_gmtime_localtime.c | 151 ++++++++++++++----------- test/val/lib_common_mktime.c | 6 + 2 files changed, 90 insertions(+), 67 deletions(-) diff --git a/test/val/lib_common_gmtime_localtime.c b/test/val/lib_common_gmtime_localtime.c index 9ba4d6a0d..f0d9a8332 100644 --- a/test/val/lib_common_gmtime_localtime.c +++ b/test/val/lib_common_gmtime_localtime.c @@ -4,90 +4,107 @@ int fails = 0; -time_t timestamps[] = { - 0, - 0x41eb00, - 0x1e7cb00, - 0x21c8700, - 0x2FFFFFFF, - 0x6FFFFFFF, - 0xF48656FF, - 0xF4865700, - 0xFC5A3EFF, - 0x6D6739FF, - 0x6D673A00, - 0xFFFFFFFF, -}; +typedef struct _test_data { + time_t t; + char *gmt; + char *local; +} test_data; -/* Values checked against glibc 2.37's implementation of ctime() */ -const char *dates_gmt[] = { - "Thu Jan 1 00:00:00 1970\n", - "Fri Feb 20 00:00:00 1970\n", - "Wed Jan 6 00:00:00 1971\n", - "Mon Feb 15 00:00:00 1971\n", - "Sun Jul 9 16:12:47 1995\n", - "Wed Jul 18 05:49:51 2029\n", - "Thu Dec 31 23:59:59 2099\n", - "Fri Jan 1 00:00:00 2100\n", - "Fri Feb 29 23:59:59 2104\n", - "Tue Feb 29 23:59:59 2028\n", - "Wed Mar 1 00:00:00 2028\n", - "Sun Feb 7 06:28:15 2106\n", - NULL -}; +/* Test data generated using glibc 2.37 */ +test_data data[] = { + /* First year */ + {0x00000000, "Thu Jan 1 00:00:00 1970\n", "Thu Jan 1 01:00:00 1970\n"}, + {0x004e7970, "Sun Mar 1 12:34:56 1970\n", "Sun Mar 1 13:34:56 1970\n"}, + {0x01e1337f, "Thu Dec 31 23:59:59 1970\n", "Fri Jan 1 00:59:59 1971\n"}, -const char *dates_gmt_plus_one[] = { - "Thu Jan 1 01:00:00 1970\n", - "Fri Feb 20 01:00:00 1970\n", - "Wed Jan 6 01:00:00 1971\n", - "Mon Feb 15 01:00:00 1971\n", - "Sun Jul 9 17:12:47 1995\n", - "Wed Jul 18 06:49:51 2029\n", - "Fri Jan 1 00:59:59 2100\n", - "Fri Jan 1 01:00:00 2100\n", - "Sat Mar 1 00:59:59 2104\n", - "Wed Mar 1 00:59:59 2028\n", - "Wed Mar 1 01:00:00 2028\n", - "Thu Jan 1 00:59:59 1970\n", - NULL + /* First leap year */ + {0x03c26700, "Sat Jan 1 00:00:00 1972\n", "Sat Jan 1 01:00:00 1972\n"}, + {0x03c8fe7f, "Wed Jan 5 23:59:59 1972\n", "Thu Jan 6 00:59:59 1972\n"}, + {0x041180ff, "Tue Feb 29 23:59:59 1972\n", "Wed Mar 1 00:59:59 1972\n"}, + {0x04118100, "Wed Mar 1 00:00:00 1972\n", "Wed Mar 1 01:00:00 1972\n"}, + {0x05a4ebff, "Sun Dec 31 23:59:59 1972\n", "Mon Jan 1 00:59:59 1973\n"}, + + /* A non-leap year */ + {0x63b0cd00, "Sun Jan 1 00:00:00 2023\n", "Sun Jan 1 01:00:00 2023\n"}, + {0x63fe957f, "Tue Feb 28 23:59:59 2023\n", "Wed Mar 1 00:59:59 2023\n"}, + {0x63fe9580, "Wed Mar 1 00:00:00 2023\n", "Wed Mar 1 01:00:00 2023\n"}, + {0x656d4ec0, "Mon Dec 4 04:00:00 2023\n", "Mon Dec 4 05:00:00 2023\n"}, + {0x6592007f, "Sun Dec 31 23:59:59 2023\n", "Mon Jan 1 00:59:59 2024\n"}, + + /* Another leap year */ + {0x65920080, "Mon Jan 1 00:00:00 2024\n", "Mon Jan 1 01:00:00 2024\n"}, + {0x65e11a7f, "Thu Feb 29 23:59:59 2024\n", "Fri Mar 1 00:59:59 2024\n"}, + {0x65e11a80, "Fri Mar 1 00:00:00 2024\n", "Fri Mar 1 01:00:00 2024\n"}, + {0x6774857f, "Tue Dec 31 23:59:59 2024\n", "Wed Jan 1 00:59:59 2025\n"}, + + /* End of century */ + {0xf48656ff, "Thu Dec 31 23:59:59 2099\n", "Fri Jan 1 00:59:59 2100\n"}, + + /* A non-leap year for exceptional reasons */ + {0xf4865700, "Fri Jan 1 00:00:00 2100\n", "Fri Jan 1 01:00:00 2100\n"}, + {0xf4d41f7f, "Sun Feb 28 23:59:59 2100\n", "Mon Mar 1 00:59:59 2100\n"}, + {0xf4d41f80, "Mon Mar 1 00:00:00 2100\n", "Mon Mar 1 01:00:00 2100\n"}, + {0xf4fceff0, "Wed Mar 31 23:00:00 2100\n", "Thu Apr 1 00:00:00 2100\n"}, + {0xf6678a7f, "Fri Dec 31 23:59:59 2100\n", "Sat Jan 1 00:59:59 2101\n"}, + + /* First post-2100 leap year */ + {0xfc0b2500, "Tue Jan 1 00:00:00 2104\n", "Tue Jan 1 01:00:00 2104\n"}, + {0xfc5a3eff, "Fri Feb 29 23:59:59 2104\n", "Sat Mar 1 00:59:59 2104\n"}, + {0xfc5a3f00, "Sat Mar 1 00:00:00 2104\n", "Sat Mar 1 01:00:00 2104\n"}, + {0xfcaa9c70, "Wed Apr 30 23:00:00 2104\n", "Thu May 1 00:00:00 2104\n"}, + + /* End of epoch */ + {0xfdedaa00, "Thu Jan 1 00:00:00 2105\n", "Thu Jan 1 01:00:00 2105\n"}, + {0xffffffff, "Sun Feb 7 06:28:15 2106\n", "Thu Jan 1 00:59:59 1970\n"} }; int main (void) { int i; + struct tm *tm; + char *str; - for (i = 0; dates_gmt[i] != NULL; i++) { - struct tm *tm; - char *str; + tm = gmtime(NULL); + if (tm != NULL) { + printf("gmtime should return NULL with a NULL parameter\n"); + fails++; + } - /* Check gmtime */ - tm = gmtime(×tamps[i]); + tm = localtime(NULL); + if (tm != NULL) { + printf("localtime should return NULL with a NULL parameter\n"); + fails++; + } + + /* Verify conversion both ways */ + for (i = 0; ; i++) { + time_t t = data[i].t; + + tm = gmtime(&t); str = asctime(tm); - if (strcmp(str, dates_gmt[i])) { + if (strcmp(data[i].gmt, str)) { + printf("0x%lx: gmtime: unexpected result: expected %s, got %s\n", t, data[i].gmt, str); fails++; - printf("gmtime: Unexpected result for t %lx: Expected \"%s\", got \"%s\"\n", - timestamps[i], dates_gmt[i], str); } - - /* Check localtime with UTC timezone */ + _tz.timezone = 0; - tm = localtime(×tamps[i]); + tm = localtime(&t); str = asctime(tm); - if (strcmp(str, dates_gmt[i])) { + if (strcmp(data[i].gmt, str)) { + printf("0x%lx: localtime (UTC+0): unexpected result: expected %s, got %s\n", t, data[i].gmt, str); fails++; - printf("localtime: Unexpected result for t %lx: Expected \"%s\", got \"%s\"\n", - timestamps[i], dates_gmt[i], str); } - // /* Check localtime at UTC+1 */ - // _tz.timezone = 3600; - // tm = localtime(×tamps[i]); - // str = asctime(tm); - // if (strcmp(str, dates_gmt_plus_one[i])) { - // fails++; - // printf("localtime: Unexpected result for t %lx: Expected \"%s\", got \"%s\"\n", - // timestamps[i], dates_gmt_plus_one[i], str); - // } + _tz.timezone = 3600; + tm = localtime(&t); + str = asctime(tm); + if (strcmp(data[i].local, str)) { + printf("0x%lx: localtime (UTC+1): unexpected result: expected %s, got %s\n", t, data[i].local, str); + fails++; + } + + if (t == 0xFFFFFFFF) + break; } return fails; } diff --git a/test/val/lib_common_mktime.c b/test/val/lib_common_mktime.c index 5d42db874..6cabef2be 100644 --- a/test/val/lib_common_mktime.c +++ b/test/val/lib_common_mktime.c @@ -75,6 +75,11 @@ int main (void) { int i; + if (mktime(NULL) != (time_t)-1) { + printf("mktime should return -1 with a NULL parameter\n"); + fails++; + } + /* Verify conversion both ways */ for (i = 0; ; i++) { time_t t = data[i].t; @@ -91,6 +96,7 @@ int main (void) } if (strcmp(data[i].str, ctime(&t))) { printf("0x%lx: unexpected ctime result: expected %s, got %s", t, data[i].str, ctime(&t)); + fails++; } if (t == 0xFFFFFFFF) From ba75a2ac267fee6adc7a581612ca878efec44e38 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Tue, 23 Jan 2024 14:33:05 +0800 Subject: [PATCH 2374/2710] Added missing checks for forward declarations of the main() function. More accurate diagnosis on implicit 'int' type specifiers. --- src/cc65/declare.c | 74 +++++++++++++----------- src/cc65/function.c | 31 +--------- test/ref/bug1889-missing-identifier.cref | 2 +- test/ref/inline-error.c | 2 + test/ref/inline-error.cref | 11 ++-- 5 files changed, 50 insertions(+), 70 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index 29827d3aa..e1e66ab85 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -2417,48 +2417,54 @@ int ParseDecl (DeclSpec* Spec, Declarator* D, declmode_t Mode) /* Parse attributes for this declarator */ ParseAttribute (D); - /* 'inline' is only allowed on functions */ - if (Mode != DM_ACCEPT_PARAM_IDENT && - (D->StorageClass & SC_TYPEMASK) != SC_FUNC && - (D->StorageClass & SC_INLINE) == SC_INLINE) { - Error ("'inline' on non-function declaration"); - D->StorageClass &= ~SC_INLINE; - } - - /* Check a few pre-C99 things */ - if (D->Ident[0] != '\0' && (Spec->Flags & DS_TYPE_MASK) == DS_DEF_TYPE) { - /* Check and warn about an implicit int return in the function */ - if (IsTypeFunc (D->Type) && IsRankInt (GetFuncReturnType (D->Type))) { - /* Function has an implicit int return. Output a warning if we don't - ** have the C89 standard enabled explicitly. + /* Check a few things for the instance (rather than the type) */ + if (D->Ident[0] != '\0') { + /* Check a few pre-C99 things */ + if ((Spec->Flags & DS_TYPE_MASK) == DS_DEF_TYPE && IsRankInt (Spec->Type)) { + /* If the standard was not set explicitly to C89, print a warning + ** for typedefs with implicit int type specifier. */ if (IS_Get (&Standard) >= STD_C99) { - Warning ("Implicit 'int' return type is an obsolete feature"); + if ((D->StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { + Warning ("Implicit 'int' type specifier is an obsolete feature"); + } else { + Warning ("Type specifier defaults to 'int' in typedef of '%s'", + D->Ident); + Note ("Implicit 'int' type specifier is an obsolete feature"); + } } - GetFuncDesc (D->Type)->Flags |= FD_OLDSTYLE_INTRET; } - /* For anything that is not a function, check for an implicit int - ** declaration. - */ - if (!IsTypeFunc (D->Type) && IsRankInt (D->Type)) { - if ((D->StorageClass & SC_TYPEMASK) != SC_TYPEDEF) { - /* If the standard was not set explicitly to C89, print a warning - ** for variables with implicit int type. - */ - if (IS_Get (&Standard) >= STD_C99) { - Warning ("Implicit 'int' is an obsolete feature"); + /* Check other things depending on the "kind" of the instance */ + if ((D->StorageClass & SC_TYPEMASK) == SC_FUNC) { + /* Special handling for main() */ + if (strcmp (D->Ident, "main") == 0) { + /* main() cannot be a fastcall function */ + if (IsQualFastcall (D->Type)) { + Error ("'main' cannot be declared __fastcall__"); } - } else { - /* If the standard was not set explicitly to C89, print a warning - ** for typedefs with implicit int type. - */ - if (IS_Get (&Standard) >= STD_C99) { - Warning ("Type defaults to 'int' in typedef of '%s'", - D->Ident); - Note ("Implicit 'int' is an obsolete feature"); + + /* main() cannot be an inline function */ + if ((D->StorageClass & SC_INLINE) == SC_INLINE) { + Error ("'main' cannot be declared inline"); + D->StorageClass &= ~SC_INLINE; + } + + /* Check return type */ + if (GetUnqualRawTypeCode (GetFuncReturnType (D->Type)) != T_INT) { + /* If cc65 extensions aren't enabled, don't allow a main function + ** that doesn't return an int. + */ + if (IS_Get (&Standard) != STD_CC65) { + Error ("'main' must always return an int"); + } } } + } else if (Mode != DM_ACCEPT_PARAM_IDENT && + (D->StorageClass & SC_INLINE) == SC_INLINE) { + /* 'inline' is only allowed on functions */ + Error ("'inline' on non-function declaration"); + D->StorageClass &= ~SC_INLINE; } } diff --git a/src/cc65/function.c b/src/cc65/function.c index 596f9b617..a4b860251 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -450,7 +450,6 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* Parse argument declarations and function body. */ { int ParamComplete; /* If all paramemters have complete types */ - int C99MainFunc = 0;/* Flag for C99 main function returning int */ SymEntry* Param; const Type* RType; /* Real type used for struct parameters */ const Type* ReturnType; /* Return type */ @@ -513,34 +512,6 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* Mark this as the main function */ CurrentFunc->Flags |= FF_IS_MAIN; - /* Main cannot be a fastcall function */ - if (IsQualFastcall (Func->Type)) { - Error ("'main' cannot be declared as __fastcall__"); - } - - /* main() cannot be an inline function */ - if ((Func->Flags & SC_INLINE) == SC_INLINE) { - Error ("'main' cannot be declared inline"); - Func->Flags &= ~SC_INLINE; - } - - /* Check return type */ - if (GetUnqualRawTypeCode (ReturnType) == T_INT) { - /* Determine if this is a main function in a C99 environment that - ** returns an int. - */ - if (IS_Get (&Standard) >= STD_C99) { - C99MainFunc = 1; - } - } else { - /* If cc65 extensions aren't enabled, don't allow a main function - ** that doesn't return an int. - */ - if (IS_Get (&Standard) != STD_CC65) { - Error ("'main' must always return an int"); - } - } - /* Add a forced import of a symbol that is contained in the startup ** code. This will force the startup code to be linked in. */ @@ -665,7 +636,7 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* If this is the main function in a C99 environment returning an int, ** let it always return zero. Otherwise output a warning. */ - if (C99MainFunc) { + if (IS_Get (&Standard) >= STD_C99 && GetUnqualRawTypeCode (ReturnType) == T_INT) { g_getimmed (CF_INT | CF_CONST, 0, 0); } else if (IS_Get (&WarnReturnType)) { Warning ("Control reaches end of non-void function [-Wreturn-type]"); diff --git a/test/ref/bug1889-missing-identifier.cref b/test/ref/bug1889-missing-identifier.cref index e77c1a7a1..70c485fab 100644 --- a/test/ref/bug1889-missing-identifier.cref +++ b/test/ref/bug1889-missing-identifier.cref @@ -1,4 +1,4 @@ bug1889-missing-identifier.c:3: Error: Identifier or ';' expected after declaration specifiers -bug1889-missing-identifier.c:3: Warning: Implicit 'int' is an obsolete feature +bug1889-missing-identifier.c:3: Warning: Implicit 'int' type specifier is an obsolete feature bug1889-missing-identifier.c:4: Error: 'inline' on empty declaration bug1889-missing-identifier.c:6: Error: Expression expected diff --git a/test/ref/inline-error.c b/test/ref/inline-error.c index d8191025a..2dad41b6d 100644 --- a/test/ref/inline-error.c +++ b/test/ref/inline-error.c @@ -33,4 +33,6 @@ inline int main(void) /* Error */ f2b(); /* Still imported */ } +inline int main(void); /* Error */ + /* Warning: non-external inline functions declared but undefined in TU */ diff --git a/test/ref/inline-error.cref b/test/ref/inline-error.cref index abfdcdddd..4ce1d7073 100644 --- a/test/ref/inline-error.cref +++ b/test/ref/inline-error.cref @@ -13,8 +13,9 @@ inline-error.c:22: Error: 'inline' on non-function declaration inline-error.c:23: Error: 'inline' on non-function declaration inline-error.c:24: Error: 'inline' on non-function declaration inline-error.c:34: Warning: Variable 'fp2' is defined but never used -inline-error.c:37: Warning: Inline function 'f1a' used but never defined -inline-error.c:37: Warning: Inline function 'f1b' used but never defined -inline-error.c:37: Warning: Static function 'f1c' used but never defined -inline-error.c:37: Warning: Inline function 'f2a' used but never defined -inline-error.c:37: Warning: Inline function 'f2b' used but never defined +inline-error.c:36: Error: 'main' cannot be declared inline +inline-error.c:39: Warning: Inline function 'f1a' used but never defined +inline-error.c:39: Warning: Inline function 'f1b' used but never defined +inline-error.c:39: Warning: Static function 'f1c' used but never defined +inline-error.c:39: Warning: Inline function 'f2a' used but never defined +inline-error.c:39: Warning: Inline function 'f2b' used but never defined From 2ba176372e5b2643703e3c68e2f8e1cee54a4ec7 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 18 Jan 2024 13:55:18 +0100 Subject: [PATCH 2375/2710] Add beep for apple2 --- doc/apple2.sgml | 1 + doc/apple2enh.sgml | 1 + doc/funcref.sgml | 5 ++++- include/apple2.h | 3 +++ libsrc/apple2/beep.s | 20 ++++++++++++++++++++ libsrc/apple2/bell.s | 20 ++++++++++++++++++++ 6 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 libsrc/apple2/beep.s create mode 100644 libsrc/apple2/bell.s diff --git a/doc/apple2.sgml b/doc/apple2.sgml index fb49ea941..3a3ec3666 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -330,6 +330,7 @@ usage. <item>_dos_type <item>_filetype <item>_datetime +<item>beep <item>get_ostype <item>gmtime_dt <item>mktime_dt diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 593b226ba..738e5b8af 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -331,6 +331,7 @@ usage. <item>_dos_type <item>_filetype <item>_datetime +<item>beep <item>get_ostype <item>gmtime_dt <item>mktime_dt diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 740a6d62e..81c63a38b 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -95,6 +95,7 @@ function. <itemize> <item>_dos_type +<item><ref id="beep" name="beep"> <item><ref id="get_ostype" name="get_ostype"> <item><ref id="gmtime_dt" name="gmtime_dt"> <item><ref id="mktime_dt" name="mktime_dt"> @@ -106,6 +107,7 @@ function. <itemize> <item>_dos_type +<item><ref id="beep" name="beep"> <item><ref id="get_ostype" name="get_ostype"> <item><ref id="gmtime_dt" name="gmtime_dt"> <item><ref id="mktime_dt" name="mktime_dt"> @@ -1771,10 +1773,11 @@ used in presence of a prototype. <descrip> <tag/Function/Beep sound. <tag/Header/<tt/<ref id="sym1.h" name="sym1.h">/ +<tag/Header/<tt/<ref id="apple2.h" name="apple2.h">/ <tag/Declaration/<tt/void beep(void);/ <tag/Description/<tt/beep/ makes a brief tone. <tag/Notes/<itemize> -<item>The function is specific to the Sym-1. +<item>The function is specific to the Sym-1 and Apple2 platforms. </itemize> <tag/Availability/cc65 <tag/See also/ diff --git a/include/apple2.h b/include/apple2.h index 25995eec2..875c10661 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -197,6 +197,9 @@ extern void a2_lo_tgi[]; +void beep (void); +/* Beep beep. */ + unsigned char get_ostype (void); /* Get the machine type. Returns one of the APPLE_xxx codes. */ diff --git a/libsrc/apple2/beep.s b/libsrc/apple2/beep.s new file mode 100644 index 000000000..ebebb6e3f --- /dev/null +++ b/libsrc/apple2/beep.s @@ -0,0 +1,20 @@ +; +; Colin Leroy-Mira, 2024 +; +; void beep(void) +; + + .export _beep + .import BELL + + .include "apple2.inc" + + .segment "LOWCODE" + +_beep: + lda CH ; Bell scrambles CH in 80col mode on IIgs, storing + pha ; it in OURCH and resetting CH to 0. Save it. + jsr BELL + pla + sta CH ; Restore CH + rts diff --git a/libsrc/apple2/bell.s b/libsrc/apple2/bell.s new file mode 100644 index 000000000..28e6d24f8 --- /dev/null +++ b/libsrc/apple2/bell.s @@ -0,0 +1,20 @@ +; +; Colin Leroy-Mira, 2024 +; +; BELL routine +; + + .export BELL + + .include "apple2.inc" + + .segment "LOWCODE" + +BELL: + ; Switch in ROM and call BELL + bit $C082 + jsr $FF3A ; BELL + + ; Switch in LC bank 2 for R/O and return + bit $C080 + rts From 13ddd734db8b978fe6eaaa1cc1812a23b47a3544 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Tue, 23 Jan 2024 23:26:26 +0100 Subject: [PATCH 2376/2710] Add note about contacting the devs when starting to work on huge patches --- Contributing.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Contributing.md b/Contributing.md index 25c6217aa..1fde873f2 100644 --- a/Contributing.md +++ b/Contributing.md @@ -1,4 +1,6 @@ -This document contains all kinds of information that you should know if you want to contribute to the cc65 project. Before you start, please read all of it. If something is not clear to you, please ask - this document is an ongoing effort and may well be incomplete. +This document contains all kinds of information that you should know if you want to contribute to the cc65 project. Before you start, please read all of it. If something is not clear to you, please ask - this document is an ongoing effort and may well be incomplete. + +Also, before you put a lot of work into implementing something you want to contribute, please get in touch with one of the developers and ask if what you are going to do is actually wanted and has a chance of being merged. Perhaps someone else is already working on it, or perhaps what you have in mind is not how we'd expect it to be - talking to us before you start might save you a lot of work in those cases. (''Note:'' The word "must" indicates a requirement. The word "should" indicates a recomendation.) From 3e01ac9b04f2bf7da1b1be46cc502b8f0423b08d Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 15 Jan 2024 20:30:20 +0100 Subject: [PATCH 2377/2710] Fix malloc and realloc overflow If user requests a size >= 65532, adding the heap admin size overflows size. Fixes #2358. --- libsrc/common/malloc.s | 2 +- libsrc/common/realloc.c | 8 ++-- test/val/lib_common_malloc.c | 34 +++++++++++++++ test/val/lib_common_realloc.c | 81 +++++++++++++++++++++++++++++++++++ 4 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 test/val/lib_common_malloc.c create mode 100644 test/val/lib_common_realloc.c diff --git a/libsrc/common/malloc.s b/libsrc/common/malloc.s index 6872f1f2e..72c4aedaa 100644 --- a/libsrc/common/malloc.s +++ b/libsrc/common/malloc.s @@ -131,6 +131,7 @@ _malloc: sta ptr1 bcc @L1 inc ptr1+1 + beq OutOfHeapSpace ; if high byte's 0, we overflowed! @L1: ldx ptr1+1 bne @L2 cmp #HEAP_MIN_BLOCKSIZE+1 @@ -336,4 +337,3 @@ RetUserPtr: bcc @L9 inx @L9: rts - diff --git a/libsrc/common/realloc.c b/libsrc/common/realloc.c index eeb1eeea5..b5429b3c2 100644 --- a/libsrc/common/realloc.c +++ b/libsrc/common/realloc.c @@ -59,6 +59,11 @@ void* __fastcall__ realloc (void* block, register size_t size) return 0; } + /* Don't overflow! */ + if (size > 0xFFFF - HEAP_ADMIN_SPACE) { + return 0; + } + /* Make the internal used size from the given size */ size += HEAP_ADMIN_SPACE; if (size < sizeof (struct freeblock)) { @@ -107,6 +112,3 @@ void* __fastcall__ realloc (void* block, register size_t size) } return newblock; } - - - diff --git a/test/val/lib_common_malloc.c b/test/val/lib_common_malloc.c new file mode 100644 index 000000000..5c68dc39a --- /dev/null +++ b/test/val/lib_common_malloc.c @@ -0,0 +1,34 @@ +#include <errno.h> +#include <stdlib.h> +#include <string.h> +#include "unittest.h" + +TEST +{ + char *buf, *buf2; + unsigned int i; + + buf = malloc(0); + ASSERT_IsTrue (buf == NULL, "malloc (0) returned something"); + + for (i = 1; i < 10; i++) { + buf = malloc(i); + ASSERT_IsTrue (buf != NULL, "small returned nothing"); + } + + buf = malloc(4096); + ASSERT_IsTrue (buf != NULL, "malloc (4096) returned nothing"); + + buf = malloc(61000UL); + ASSERT_IsTrue (buf == NULL, "malloc (61000) returned something"); + + for (i = 65535UL; i > _heapmaxavail(); i--) { + buf = malloc(i); + ASSERT_IsTrue (buf == NULL, "malloc returned something but shouldn't have"); + } + + buf = malloc(i); + ASSERT_IsTrue (buf != NULL, "malloc returned nothing but should have"); + ASSERT_IsTrue(_heapmaxavail() == 0, "heapmaxavail should be 0"); +} +ENDTEST diff --git a/test/val/lib_common_realloc.c b/test/val/lib_common_realloc.c new file mode 100644 index 000000000..d1e4fa3eb --- /dev/null +++ b/test/val/lib_common_realloc.c @@ -0,0 +1,81 @@ +#include <errno.h> +#include <stdlib.h> +#include <string.h> +#include "unittest.h" + +TEST +{ + char *buf, *buf2; + unsigned int i; + + buf = realloc(NULL, 0); + ASSERT_IsTrue (buf == NULL, "realloc (NULL, 0) returned something"); + + for (i = 1; i < 10; i++) { + buf2 = realloc(buf, i); + ASSERT_IsTrue (buf2 != NULL, "small realloc returned nothing"); + if (i > 1) { + ASSERT_IsTrue (buf2 == buf, "buf shouldn't have moved"); + } + buf = buf2; + } + + buf = realloc(NULL, 15); + ASSERT_IsTrue (buf != NULL, "realloc (NULL, 15) returned nothing"); + + buf = realloc(buf, 0); + ASSERT_IsTrue (buf == NULL, "realloc (buf, 0) returned something"); + + buf = realloc(buf, 32); + memset(buf, 'a', 32); + for (i = 0; i < 32; i++) { + ASSERT_IsTrue(buf[i] == 'a', "wrong contents in buf"); + } + + /* Now realloc larger, while there's nothing else in the heap */ + buf = realloc(buf, 64); + memset(buf+32, 'b', 32); + for (i = 0; i < 32; i++) { + ASSERT_IsTrue(buf[i] == 'a', "wrong contents in start of buf"); + } + for (i = 32; i < 64; i++) { + ASSERT_IsTrue(buf[i] == 'b', "wrong contents in end of buf"); + } + + /* Now realloc smaller, while there's nothing else in the heap */ + buf = realloc(buf, 40); + for (i = 0; i < 32; i++) { + ASSERT_IsTrue(buf[i] == 'a', "wrong contents in start of buf"); + } + for (i = 32; i < 40; i++) { + ASSERT_IsTrue(buf[i] == 'b', "wrong contents in end of buf"); + } + + /* Allocate something else, so next realloc has to change block */ + malloc(50); + + /* Now realloc larger, with something else in the heap */ + buf = realloc(buf, 128); + for (i = 0; i < 32; i++) { + ASSERT_IsTrue(buf[i] == 'a', "wrong contents in start of buf"); + } + for (i = 32; i < 40; i++) { + ASSERT_IsTrue(buf[i] == 'b', "wrong contents in end of buf"); + } + + for (i = 129; i < 8192; i++) { + buf = realloc(buf, i); + ASSERT_IsTrue(buf != NULL, "realloc failed"); + } + + malloc(4096); + + buf2 = realloc(buf, 58000UL); + ASSERT_IsTrue (buf2 == NULL, "realloc (buf, 58000) returned something"); + + for (i = 65535UL; i > 65527UL; i--) { + buf2 = realloc(buf, i); + ASSERT_IsTrue (buf2 == NULL, "realloc returned something but shouldn't have"); + } +} +ENDTEST From 5d49fde788ba7adcee87d5eb050fe8269fa6103a Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 11 Jan 2024 18:19:13 +0100 Subject: [PATCH 2378/2710] add a return -1 helper --- libsrc/atari/open.s | 6 ++---- libsrc/cbm/cbm_read.s | 7 ++----- libsrc/cbm/cbm_write.s | 7 ++----- libsrc/common/fclose.s | 8 ++------ libsrc/common/fmisc.s | 9 ++------- libsrc/common/putenv.s | 9 ++------- libsrc/common/ungetc.s | 6 +----- libsrc/runtime/returnFFFF.s | 15 +++++++++++++++ 8 files changed, 28 insertions(+), 39 deletions(-) create mode 100644 libsrc/runtime/returnFFFF.s diff --git a/libsrc/atari/open.s b/libsrc/atari/open.s index ed3e40b2f..e7e55c54c 100644 --- a/libsrc/atari/open.s +++ b/libsrc/atari/open.s @@ -19,7 +19,7 @@ .import findfreeiocb .import incsp4 .import ldaxysp,addysp - .import ___oserror + .import ___oserror, returnFFFF .ifdef UCASE_FILENAME .import ucase_fn .endif @@ -39,9 +39,7 @@ parmok: jsr findfreeiocb lda #<EMFILE ; "too many open files" seterr: jsr ___directerrno jsr incsp4 ; clean up stack - lda #$FF - tax - rts ; return -1 + jmp returnFFFF ; process the mode argument diff --git a/libsrc/cbm/cbm_read.s b/libsrc/cbm/cbm_read.s index 8a9939eca..98e3c25c9 100644 --- a/libsrc/cbm/cbm_read.s +++ b/libsrc/cbm/cbm_read.s @@ -40,7 +40,7 @@ .export _cbm_read .importzp ptr1, ptr2, ptr3, tmp1 - .import popax, popa + .import popax, popa, returnFFFF .import ___oserror @@ -107,7 +107,4 @@ _cbm_read: ; CHKIN failed @E1: sta ___oserror - lda #$FF - tax - rts ; return -1 - + jmp returnFFFF diff --git a/libsrc/cbm/cbm_write.s b/libsrc/cbm/cbm_write.s index 18c6f4684..a4ecfbe3f 100644 --- a/libsrc/cbm/cbm_write.s +++ b/libsrc/cbm/cbm_write.s @@ -32,7 +32,7 @@ .export _cbm_write .importzp ptr1, ptr2, ptr3 - .import popax, popa + .import popax, popa, returnFFFF .import ___oserror @@ -88,7 +88,4 @@ _cbm_write: ; Error entry, error code is in A @E2: sta ___oserror - lda #$FF - tax - rts ; return -1 - + jmp returnFFFF diff --git a/libsrc/common/fclose.s b/libsrc/common/fclose.s index 2368bf9f6..f6c57841e 100644 --- a/libsrc/common/fclose.s +++ b/libsrc/common/fclose.s @@ -7,7 +7,7 @@ .export _fclose - .import _close + .import _close, ___directerrno .importzp ptr1 .include "errno.inc" @@ -31,10 +31,7 @@ ; File is not open lda #EINVAL - jsr ___seterrno - lda #$FF ; Return -1 - tax - rts + jmp ___directerrno ; File is open. Reset the flags and close the file. @@ -47,4 +44,3 @@ jmp _close ; Will set errno and return an error flag .endproc - diff --git a/libsrc/common/fmisc.s b/libsrc/common/fmisc.s index 90b48e8a6..d189db8a8 100644 --- a/libsrc/common/fmisc.s +++ b/libsrc/common/fmisc.s @@ -5,7 +5,7 @@ ; .export _clearerr, _feof, _ferror, _fileno, _fflush - .import return0 + .import return0, ___directerrno .importzp ptr1 .include "_file.inc" @@ -78,10 +78,7 @@ err: rts ; If the file is not valid, fileno must set errno and return -1 error: lda #<EBADF - jsr ___seterrno - lda #$FF - tax - rts + jmp ___directerrno .endproc ; @@ -89,5 +86,3 @@ error: lda #<EBADF ; _fflush = return0 - - diff --git a/libsrc/common/putenv.s b/libsrc/common/putenv.s index 5febcc71e..13f0e7dc4 100644 --- a/libsrc/common/putenv.s +++ b/libsrc/common/putenv.s @@ -10,7 +10,7 @@ .import _malloc, _free .import searchenv, copyenvptr .import __environ, __envcount, __envsize - .import return0 + .import return0, ___directerrno .import ptr1:zp, ptr2:zp, ptr3:zp, tmp1:zp .include "errno.inc" @@ -169,10 +169,7 @@ addentry: ; Error entries nomem: lda #ENOMEM -error: jsr ___seterrno - lda #$FF ; Return -1 - tax - rts +error: jmp ___directerrno .endproc @@ -184,5 +181,3 @@ error: jsr ___seterrno name: .addr 0 ; Pointer to name newsize: .byte 0 ; New environment size - - diff --git a/libsrc/common/ungetc.s b/libsrc/common/ungetc.s index 7e8c1f94f..c661600af 100644 --- a/libsrc/common/ungetc.s +++ b/libsrc/common/ungetc.s @@ -62,10 +62,6 @@ ; File is not open or the character is invalid error: lda #EINVAL - jsr ___seterrno - lda #$FF ; Return -1 - tax - rts + jmp ___directerrno .endproc - diff --git a/libsrc/runtime/returnFFFF.s b/libsrc/runtime/returnFFFF.s new file mode 100644 index 000000000..41180651b --- /dev/null +++ b/libsrc/runtime/returnFFFF.s @@ -0,0 +1,15 @@ +; +; Ullrich von Bassewitz, 25.10.2000 +; +; CC65 runtime: Return -1 in a/x +; + + .export returnFFFF + +.proc returnFFFF + + lda #$FF + tax + rts + +.endproc From 1f820d0ae813694c40da9639aa7ec048b79fecbd Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 11 Jan 2024 19:31:04 +0100 Subject: [PATCH 2379/2710] Rewrite fgets in asm -104 bytes, -1% cycles --- libsrc/apple2/statvfs.s | 6 +- libsrc/common/fgets.c | 68 ---------------------- libsrc/common/fgets.s | 119 ++++++++++++++++++++++++++++++++++++++ libsrc/runtime/pushptr1.s | 14 +++++ 4 files changed, 135 insertions(+), 72 deletions(-) delete mode 100644 libsrc/common/fgets.c create mode 100644 libsrc/common/fgets.s create mode 100644 libsrc/runtime/pushptr1.s diff --git a/libsrc/apple2/statvfs.s b/libsrc/apple2/statvfs.s index 6274bb52b..8fcf46af8 100644 --- a/libsrc/apple2/statvfs.s +++ b/libsrc/apple2/statvfs.s @@ -6,7 +6,7 @@ .export _statvfs .import _dio_query_sectsize - .import mli_file_info, pushax, popax, popptr1 + .import mli_file_info, pushax, popax, popptr1, pushptr1 .include "zeropage.inc" .include "apple2.inc" .include "errno.inc" @@ -45,9 +45,7 @@ _statvfs: sty vol_sep ; Register '/' index lda #$00 sta (ptr1),y ; Cut pathname at first slash -: lda ptr1 - ldx ptr1+1 - jsr pushax +: jsr pushptr1 jsr mli_file_info diff --git a/libsrc/common/fgets.c b/libsrc/common/fgets.c deleted file mode 100644 index 21a991fd6..000000000 --- a/libsrc/common/fgets.c +++ /dev/null @@ -1,68 +0,0 @@ -/* -** Ullrich von Bassewitz, 11.08.1998 -** -** char* fgets (char* s, int size, FILE* f); -*/ - - - -#include <stdio.h> -#include <errno.h> -#include "_file.h" - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -char* __fastcall__ fgets (char* s, unsigned size, register FILE* f) -{ - register char* p = s; - unsigned i; - int c; - - if (size == 0) { - /* Invalid size */ - return (char*) _seterrno (EINVAL); - } - - /* Read input */ - i = 0; - while (--size) { - - /* Get next character */ - if ((c = fgetc (f)) == EOF) { - /* Error or EOF */ - if ((f->f_flags & _FERROR) != 0 || i == 0) { - /* ERROR or EOF on first char */ - *p = '\0'; - return 0; - } else { - /* EOF with data already read */ - break; - } - } - - /* One char more */ - *p = c; - ++p; - ++i; - - /* Stop at end of line */ - if ((char)c == '\n') { - break; - } - } - - /* Terminate the string */ - *p = '\0'; - - /* Done */ - return s; -} - - - diff --git a/libsrc/common/fgets.s b/libsrc/common/fgets.s new file mode 100644 index 000000000..465658191 --- /dev/null +++ b/libsrc/common/fgets.s @@ -0,0 +1,119 @@ +; +; Colin Leroy-Mira, 2024 +; +; char* __fastcall__ fgets (char* s, unsigned size, register FILE* f) +; + + .export _fgets + .import _fgetc, popptr1, pushptr1, popax, pushax, return0, ___errno + .importzp ptr1, ptr4 + + .include "errno.inc" + .include "stdio.inc" + .include "_file.inc" + + .macpack cpu + +terminate_ptr: + lda #$00 + tax + .if (.cpu .bitand ::CPU_ISET_65SC02) + sta (ptr4) + .else + tay + sta (ptr4),y + .endif + rts + +_fgets: + sta ptr1 + stx ptr1+1 + + jsr popax + sta size + stx size+1 + + jsr popax + sta ptr4 + stx ptr4+1 + sta buf + stx buf+1 + + .if (.cpu .bitand ::CPU_ISET_65SC02) + stz didread + .else + lda #$00 ; We have read nothing yet + sta didread + .endif + + ; Check size + lda size + ora size+1 + bne read_loop + lda #EINVAL + sta ___errno + jmp return0 + +read_loop: + lda size ; Dec size + bne :+ + dec size+1 +: dec size + + bne :+ ; Check bound + ldx size+1 + beq done + +: jsr pushptr1 ; Push ptr1 for backup and load it to AX for fgetc + jsr _fgetc ; Read a char + + pha + jsr popptr1 ; Get ptr1 back + pla + + cpx #<EOF + beq got_eof + + ldy #$01 + sty didread ; We read at least one char + + .if (.cpu .bitand ::CPU_ISET_65SC02) + sta (ptr4) + .else + dey + sta (ptr4),y + .endif + + inc ptr4 + bne :+ + inc ptr4+1 + +: cmp #$0A ; Stop at \n + beq done + + clc + bcc read_loop + +got_eof: + lda didread + beq stopped_at_first_char + ldy #_FILE::f_flags + lda (ptr1),y + and #_FERROR + bne stopped_at_first_char + +done: + jsr terminate_ptr + ldx #>buf + lda #<buf + rts + +stopped_at_first_char: + jmp terminate_ptr + + .bss + +c: .res 1 +buf: .res 2 +size: .res 2 +didread:.res 1 diff --git a/libsrc/runtime/pushptr1.s b/libsrc/runtime/pushptr1.s new file mode 100644 index 000000000..ca934d6c1 --- /dev/null +++ b/libsrc/runtime/pushptr1.s @@ -0,0 +1,14 @@ +; +; Colin Leroy-Mira, 2024 +; +; CC65 runtime: Push ptr1 to stack. +; A/X destroyed (set to ptr1) + + .export pushptr1 + .import pushax + .importzp ptr1 + +pushptr1: + lda ptr1 + ldx ptr1+1 + jmp pushax From b87df9e1c6326b4983a821d3035f8bafba221805 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Fri, 12 Jan 2024 23:04:14 +0100 Subject: [PATCH 2380/2710] Optimize -36 bytes out of posix_memalign And add a unit test --- libsrc/common/pmemalign.c | 22 ++++++++++++++-------- test/val/lib_common_pmemalign.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 test/val/lib_common_pmemalign.c diff --git a/libsrc/common/pmemalign.c b/libsrc/common/pmemalign.c index 52adb240d..4499084d1 100644 --- a/libsrc/common/pmemalign.c +++ b/libsrc/common/pmemalign.c @@ -50,7 +50,6 @@ */ - int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size) /* Allocate a block of memory with the given "size", which is aligned to a ** memory address that is a multiple of "alignment". "alignment" MUST NOT be @@ -64,20 +63,27 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size) size_t rawsize; size_t uppersize; size_t lowersize; + char err; register struct usedblock* b; /* points to raw Block */ register struct usedblock* u; /* points to User block */ register struct usedblock* p; /* Points to upper block */ /* Handle requests for zero-sized blocks */ if (size == 0) { +err_einval: + err = EINVAL; +err_out: *memptr = NULL; - return EINVAL; + return err; } - /* Test alignment: is it a power of two? There must be only one bit set. */ - if (alignment == 0 || (alignment & (alignment - 1)) != 0) { - *memptr = NULL; - return EINVAL; + /* Test alignment: is it a power of two? There must be one and only one bit set. */ + if (alignment == 0) { + goto err_einval; + } + + if (alignment & (alignment - 1)) { + goto err_einval; } /* Augment the block size up to the alignment, and allocate memory. @@ -90,8 +96,8 @@ int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size) /* Handle out-of-memory */ if (b == NULL) { - *memptr = NULL; - return ENOMEM; + err = ENOMEM; + goto err_out; } /* Create (and return) a new pointer that points to the user-visible diff --git a/test/val/lib_common_pmemalign.c b/test/val/lib_common_pmemalign.c new file mode 100644 index 000000000..0e9e5f52f --- /dev/null +++ b/test/val/lib_common_pmemalign.c @@ -0,0 +1,31 @@ +#include <errno.h> +#include <stdlib.h> +#include "unittest.h" + +TEST +{ + void *buf; + int r; + + r = posix_memalign(&buf, 123, 1024); + ASSERT_IsTrue(r == EINVAL, "posix_memalign did not return EINVAL with wrong alignment"); + ASSERT_IsTrue(buf == NULL, "posix_memalign did not set buf to NULL with wrong alignment"); + + r = posix_memalign(&buf, 0, 1024); + ASSERT_IsTrue(r == EINVAL, "posix_memalign did not return EINVAL with 0 alignment"); + ASSERT_IsTrue(buf == NULL, "posix_memalign did not set buf to NULL with 0 alignment"); + + r = posix_memalign(&buf, 256, 0); + ASSERT_IsTrue(r == EINVAL, "posix_memalign did not return EINVAL with 0 size"); + ASSERT_IsTrue(buf == NULL, "posix_memalign did not set buf to NULL with 0 size"); + + r = posix_memalign(&buf, 256, 32768U); + ASSERT_IsTrue(r == 0, "posix_memalign did not return 0 on correct call"); + ASSERT_IsTrue(buf != NULL, "posix_memalign left buf set to NULL on correct call"); + ASSERT_IsTrue(((unsigned int)buf & 0x00FF) == 0x00, "posix_memalign did not align memory"); + + r = posix_memalign(&buf, 256, 32768U); + ASSERT_IsTrue(r == ENOMEM, "posix_memalign did not return ENOMEM when no memory is available"); + ASSERT_IsTrue(buf == NULL, "posix_memalign did not set buf to NULL when no memory is available"); +} +ENDTEST From f0b5b0296678dde02aa2c46096a7dee59cc4b9f4 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 21 Jan 2024 16:50:59 +0100 Subject: [PATCH 2381/2710] Swap in LC before destructors, ROM after --- doc/apple2.sgml | 2 +- doc/apple2enh.sgml | 2 +- libsrc/apple2/crt0.s | 7 +++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index 3a3ec3666..e6ec870ee 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -62,7 +62,7 @@ Special locations: </descrip><p> While running <tt/main()/ the Language Card bank 2 is enabled for read access. -However while running module constructors/destructors the Language Card is disabled. +However while running module constructors the Language Card is disabled. Enabling the Language Card allows to use it as additional memory for cc65 generated code. However code is never automatically placed there. Rather code diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 738e5b8af..d47820cc7 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -63,7 +63,7 @@ Special locations: </descrip><p> While running <tt/main()/ the Language Card bank 2 is enabled for read access. -However while running module constructors/destructors the Language Card is disabled. +However while running module constructors the Language Card is disabled. Enabling the Language Card allows to use it as additional memory for cc65 generated code. However code is never automatically placed there. Rather code diff --git a/libsrc/apple2/crt0.s b/libsrc/apple2/crt0.s index 60a8516d1..c129cdbf8 100644 --- a/libsrc/apple2/crt0.s +++ b/libsrc/apple2/crt0.s @@ -40,12 +40,15 @@ _exit: ldx #<exit lda #>exit jsr reset ; Setup RESET vector - ; Switch in ROM, in case it wasn't already switched in by a RESET. - bit $C082 + ; Switch in LC bank 2 for R/O in case it was switched out by a RESET. + bit $C080 ; Call the module destructors. jsr donelib + ; Switch in ROM. + bit $C082 + ; Restore the original RESET vector. exit: ldx #$02 : lda rvsave,x From 34f37c873ebe25e5973f0043b0a99a9867589cd9 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Wed, 24 Jan 2024 16:32:45 +0100 Subject: [PATCH 2382/2710] Fixed comment --- libsrc/geos-common/graph/bitotherclip.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/geos-common/graph/bitotherclip.s b/libsrc/geos-common/graph/bitotherclip.s index 020139da8..fba00d966 100644 --- a/libsrc/geos-common/graph/bitotherclip.s +++ b/libsrc/geos-common/graph/bitotherclip.s @@ -6,7 +6,7 @@ ; void BitOtherClip (void *proc1, void* proc2, char skipl, char skipr, int skipy, ; struct iconpic *myGfx); -; both proc1, proc2 should be: char __fastcall something (void); +; both proc1, proc2 should be: char foo (void); ; proc1 is called before reading a byte (.A returns next data) ; proc2 is called before reading each byte which is not pattern (code >219) From f7388cfb79def6c7fc9c737120553fea7b76b9e0 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 11 Jan 2024 18:30:13 +0100 Subject: [PATCH 2383/2710] add fgets/fgetc test --- include/stdio.h | 4 +++ test/ref/test_fgets.c | 60 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 test/ref/test_fgets.c diff --git a/include/stdio.h b/include/stdio.h index 012b8e2ba..35ebd7784 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -86,6 +86,10 @@ extern FILE* stderr; # define FILENAME_MAX (80+1) #elif defined(__TELESTRAT__) # define FILENAME_MAX (50+1) +#elif defined(__SIM6502__) +# define FILENAME_MAX (1024+1) +#elif defined(__SIM65C02__) +# define FILENAME_MAX (1024+1) #else # define FILENAME_MAX (16+1) #endif diff --git a/test/ref/test_fgets.c b/test/ref/test_fgets.c new file mode 100644 index 000000000..70d30a066 --- /dev/null +++ b/test/ref/test_fgets.c @@ -0,0 +1,60 @@ +/* + !!DESCRIPTION!! fgets test + !!LICENCE!! Public domain +*/ + +#include "common.h" + +#include <ctype.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +FILE *in, *out; +char buf[32]; + +#define INFILE "cf.in" + +int main(int argc,char **argv) +{ + static char outfile_path[FILENAME_MAX+1]; + + sprintf(outfile_path, "%s.test.out", argv[0]); + + out = fopen(outfile_path, "wb"); + if (out == NULL) { + return EXIT_FAILURE; + } + if (fgets(buf, sizeof(buf), out) != NULL) { + printf("Error, could fgets with write-only file\n"); + return 1; + } + if (!ferror(out)) { + printf("Error: file pointer should be in error state\n"); + } + fclose(out); + + in = fopen(INFILE, "rb"); + if (in == NULL) { + return EXIT_FAILURE; + } + + if (fgets(NULL, 0, in) != NULL) { + printf("Error, could fgets with zero size\n"); + return 1; + } + + while (fgets(buf, sizeof(buf), in) != NULL) + { + printf("%s",buf); + } + + if (!feof(in)) + { + printf("We should have EOF!\n"); + } + + fclose(in); + return 0; +} From 476591e8b7f28bd5145c4e81750a969ce83b97ff Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 11 Jan 2024 18:54:42 +0100 Subject: [PATCH 2384/2710] Rewrite fgetc in asm -82 bytes, -20% cycles --- libsrc/common/fgetc.c | 58 --------------------------- libsrc/common/fgetc.s | 92 +++++++++++++++++++++++++++++++++++++++++++ test/ref/test_fgets.c | 5 +++ 3 files changed, 97 insertions(+), 58 deletions(-) delete mode 100644 libsrc/common/fgetc.c create mode 100644 libsrc/common/fgetc.s diff --git a/libsrc/common/fgetc.c b/libsrc/common/fgetc.c deleted file mode 100644 index b4ba18d73..000000000 --- a/libsrc/common/fgetc.c +++ /dev/null @@ -1,58 +0,0 @@ -/* -** fgetc.c -** -** (C) Copyright 1998, 2002 Ullrich von Bassewitz (uz@cc65.org) -** -*/ - - - -#include <stdio.h> -#include <unistd.h> -#include "_file.h" - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -int __fastcall__ fgetc (register FILE* f) -{ - unsigned char c; - - /* Check if the file is open or if there is an error condition */ - if ((f->f_flags & _FOPEN) == 0 || (f->f_flags & (_FERROR | _FEOF)) != 0) { - return EOF; - } - - /* If we have a pushed back character, return it */ - if (f->f_flags & _FPUSHBACK) { - f->f_flags &= ~_FPUSHBACK; - return f->f_pushback; - } - - /* Read one byte */ - switch (read (f->f_fd, &c, 1)) { - - case -1: - /* Error */ - f->f_flags |= _FERROR; - return EOF; - - case 0: - /* EOF */ - f->f_flags |= _FEOF; - return EOF; - - default: - /* Char read */ - return c; - - } -} - - - diff --git a/libsrc/common/fgetc.s b/libsrc/common/fgetc.s new file mode 100644 index 000000000..777696b7a --- /dev/null +++ b/libsrc/common/fgetc.s @@ -0,0 +1,92 @@ +; +; Colin Leroy-Mira, 2024 +; +; int __fastcall__ fgetc (register FILE* f) +; + + .export _fgetc + .import _read, pusha0, pushax, popptr1, incsp2, returnFFFF + .importzp ptr1 + + .include "stdio.inc" + .include "_file.inc" + +_fgetc: + sta ptr1 + stx ptr1+1 + jsr pushax ; Backup our ptr + + ldy #_FILE::f_flags + lda (ptr1),y + tax + and #_FOPEN ; Check for file open + beq ret_eof + txa + and #(_FERROR|_FEOF); Check for error/eof + bne ret_eof + + txa + and #_FPUSHBACK ; Check for pushed back char + beq do_read + + txa + and #<(~_FPUSHBACK) ; Reset flag + sta (ptr1),y + + .assert _FILE::f_pushback = _FILE::f_flags+1, error + iny + jsr incsp2 ; Drop our ptr copy + lda (ptr1),y ; Return pushed back char + ldx #$00 + rts + +do_read: + ; Push _read parameters + ldy #_FILE::f_fd + lda (ptr1),y + jsr pusha0 + + lda #<c + ldx #>c + jsr pushax + + lda #$01 + ldx #$00 + + ; Read + jsr _read + + ; Check for errors + cmp #$00 + beq set_feof + + cmp #<(-1) + beq set_ferror + + jsr incsp2 + ; Return char + ldx #$00 + lda c + rts + +ret_eof: + jsr incsp2 + jmp returnFFFF + +set_ferror: + lda #_FERROR + bne set_err +set_feof: + lda #_FEOF +set_err: + pha + jsr popptr1 + pla + ldy #_FILE::f_flags + ora (ptr1),y + sta (ptr1),y + jmp returnFFFF + + .bss + +c: .res 1 diff --git a/test/ref/test_fgets.c b/test/ref/test_fgets.c index 70d30a066..72ea308dd 100644 --- a/test/ref/test_fgets.c +++ b/test/ref/test_fgets.c @@ -45,6 +45,11 @@ int main(int argc,char **argv) return 1; } + /* Test ungetc while we're at it */ + buf[0] = fgetc(in); + ungetc(buf[0], in); + + while (fgets(buf, sizeof(buf), in) != NULL) { printf("%s",buf); From f1d95f1f07accf0e7912fd862738e4cd66794913 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Thu, 25 Jan 2024 11:27:54 +0100 Subject: [PATCH 2385/2710] Added link for your interest --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 11c3bb0ff..dce9a07bc 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ For details look at the [Website](https://cc65.github.io). Project founders: -* John R. Dunning: original implementation of the C compiler and runtime library, Atari hosted +* John R. Dunning: [original implementation](https://public.websites.umich.edu/~archive/atari/8bit/Languages/Cc65/) of the C compiler and runtime library, Atari hosted * Ullrich von Bassewitz: * move the code to modern systems * rewrite most parts of the compiler From a8b870555e4dd371a718f0de506510b0ee202eff Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 22 Jan 2024 12:57:59 +0100 Subject: [PATCH 2386/2710] Rewrite realloc in asm -80 bytes, -39% cycles --- libsrc/common/realloc.c | 114 --------------------- libsrc/common/realloc.s | 213 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 213 insertions(+), 114 deletions(-) delete mode 100644 libsrc/common/realloc.c create mode 100644 libsrc/common/realloc.s diff --git a/libsrc/common/realloc.c b/libsrc/common/realloc.c deleted file mode 100644 index b5429b3c2..000000000 --- a/libsrc/common/realloc.c +++ /dev/null @@ -1,114 +0,0 @@ -/*****************************************************************************/ -/* */ -/* realloc.c */ -/* */ -/* Change the size of an allocated memory block */ -/* */ -/* */ -/* */ -/* (C) 1998-2004 Ullrich von Bassewitz */ -/* Wacholderweg 14 */ -/* D-70597 Stuttgart */ -/* EMail: uz@musoftware.de */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#include <stdlib.h> -#include <string.h> -#include <_heap.h> - - - -void* __fastcall__ realloc (void* block, register size_t size) -{ - register struct usedblock* b; - struct usedblock* newblock; - unsigned oldsize; - unsigned newhptr; - - /* Check the block parameter */ - if (!block) { - /* Block is NULL, same as malloc */ - return malloc (size); - } - - /* Check the size parameter */ - if (size == 0) { - /* Block is not NULL, but size is: free the block */ - free (block); - return 0; - } - - /* Don't overflow! */ - if (size > 0xFFFF - HEAP_ADMIN_SPACE) { - return 0; - } - - /* Make the internal used size from the given size */ - size += HEAP_ADMIN_SPACE; - if (size < sizeof (struct freeblock)) { - size = sizeof (struct freeblock); - } - - /* The word below the user block contains a pointer to the start of the - ** raw memory block. The first word of this raw memory block is the full - ** size of the block. Get a pointer to the real block, get the old block - ** size. - */ - b = (((struct usedblock*) block) - 1)->start; - oldsize = b->size; - - /* Is the block at the current heap top? */ - if (((unsigned) b) + oldsize == ((unsigned) __heapptr)) { - /* Check if we've enough memory at the heap top */ - newhptr = ((unsigned) __heapptr) - oldsize + size; - if (newhptr <= ((unsigned) __heapend)) { - /* Ok, there's space enough */ - __heapptr = (unsigned*) newhptr; - b->size = size; - b->start = b; - return block; - } - } - - /* The given block was not located on top of the heap, or there's no - ** room left. Try to allocate a new block and copy the data. - */ - if (newblock = malloc (size)) { - - /* Adjust the old size to the user visible portion */ - oldsize -= HEAP_ADMIN_SPACE; - - /* If the new block is larger than the old one, copy the old - ** data only - */ - if (size > oldsize) { - size = oldsize; - } - - /* Copy the block data */ - memcpy (newblock, block, size); - free (block); - } - return newblock; -} diff --git a/libsrc/common/realloc.s b/libsrc/common/realloc.s new file mode 100644 index 000000000..925ac3d19 --- /dev/null +++ b/libsrc/common/realloc.s @@ -0,0 +1,213 @@ +; +; Colin Leroy-Mira, 2024 +; +; void* __fastcall__ realloc (void* block, register size_t size) +; + + .importzp ptr1, ptr2, ptr3, ptr4, tmp1, tmp2, tmp3, tmp4, sp + .import _malloc, _memcpy, _free + .import pushax, popptr1, return0 + .import incsp2, decsp2 + .export _realloc + + .include "_heap.inc" + + .macpack generic + +;---------------------------------------------------------------------------- +; Aliases for clarity + +block = ptr1 +size = ptr2 +ublock = ptr3 +oldsize = ptr4 +newblock = tmp1 ; (and tmp2) +orgblock = tmp3 ; (and tmp4) + +;---------------------------------------------------------------------------- +; Code + +_realloc: + sta size ; Store size + stx size+1 + + jsr popptr1 ; Pop block + + lda block+1 ; Is block null? + tax + ora block + bne :+ + + lda size ; Block is null, just malloc + ldx size+1 + jmp _malloc + +: lda size ; Is size 0? + ora size+1 + bne :+ + + lda block ; It is: free block (high byte already in X) + jsr _free + jmp return0 + +: clc ; Add internal used size + lda size + adc #HEAP_ADMIN_SPACE + sta size + bcc :+ + inc size+1 + bne :+ + + lda #$00 ; Size high byte now 0: We overflowed! + tax + rts + +: ldx size+1 ; Should we round size up? + bne :+ + cmp #.sizeof (freeblock) + bcs :+ + + lda #.sizeof (freeblock) + sta size ; (we presuppose that sizeof (freeblock) is < 256) + +: lda block ; Get pointer to raw memory block + sta orgblock ; Store original pointer + sec + sbc #.sizeof(usedblock) + sta ublock + lda block+1 + sta orgblock+1 ; Finish storing original pointer + sbc #0 + sta ublock+1 ; We have our usedblock struct + + ; Get block start + ldy #usedblock::start+1 + lda (ublock),y + tax ; Backup ublock high + dey + lda (ublock),y + + sta ublock ; Store ublock + stx ublock+1 + + ; Remember oldsize + ldy #usedblock::size+1 + lda (ublock),y + sta oldsize+1 + dey + lda (ublock),y + sta oldsize + + clc ; Is the block at heap top? + adc ublock + tay + lda ublock+1 + adc oldsize+1 + cmp ___heapptr+1 + bne must_malloc_new + cpy ___heapptr + bne must_malloc_new + + tya ; Put ___heapptr back in A + sec ; Check if we have enough memory at heap top + sbc oldsize ; Substract oldsize + sta newblock + lda ___heapptr+1 + sbc oldsize+1 + sta newblock+1 + clc + lda newblock ; And add size + adc size + sta newblock + lda newblock+1 + adc size+1 + sta newblock+1 + bcs must_malloc_new ; If we have a carry there we overflowed + + cmp ___heapend+1 + bne :+ + lda newblock + cmp ___heapend +: bcc :+ + bne must_malloc_new + +: lda newblock ; There is enough space + sta ___heapptr ; Update heapptr + lda newblock+1 + sta ___heapptr+1 + + ldy #usedblock::start+1 + lda ublock+1 + sta (ublock),y ; Update block start + dey + lda ublock + sta (ublock),y + dey + + .assert usedblock::size = usedblock::start-2, error + lda size+1 + sta (ublock),y ; Update block size + dey + lda size + sta (ublock),y + + lda orgblock ; Return original block + ldx orgblock+1 + rts + +must_malloc_new: ; The block is not at heap top, or too big + lda size+1 + pha ; Backup new size (at this point the only ptr + tax ; we'll need after malloc). tmp* are safe + lda size ; from malloc, memcpy and free. + pha + jsr _malloc + + cmp #$00 ; Did malloc succeed? + bne :+ + cpx #$00 + bne :+ + pla ; Pop size backup and return NULL + pla + txa ; X already 0 + rts ; No + +: sta newblock ; Yes, store newblock + stx newblock+1 + jsr pushax ; Push newblock for memcpy + + lda orgblock ; Push orgblock for memcpy + ldx orgblock+1 + jsr pushax + + sec ; Remove admin space from oldsize + lda oldsize + sbc #<HEAP_ADMIN_SPACE + sta oldsize + lda oldsize+1 + sbc #>HEAP_ADMIN_SPACE + sta oldsize+1 + + pla ; Restore new size to AX + tay + pla + tax + tya + + cmp oldsize ; Find the smallest size + bcc :+ + cpx oldsize+1 + bcc :+ + + lda oldsize + ldx oldsize+1 + +: jsr _memcpy ; And copy data + + lda orgblock ; Free old block + ldx orgblock+1 + jsr _free + + lda newblock ; Return new block + ldx newblock+1 + rts From aa6f850b8d2308b99bc13776e6e7937aacb5d711 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 11 Jan 2024 19:51:17 +0100 Subject: [PATCH 2387/2710] Rewrite gets in assembler +19 bytes if used alone, because it pulls in fgets, but as code is factorized, -128 bytes in programs using both fgets and gets. --- libsrc/common/gets.c | 63 -------------------------------------------- libsrc/common/gets.s | 47 +++++++++++++++++++++++++++++++++ test/ref/test_gets.c | 46 ++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 63 deletions(-) delete mode 100644 libsrc/common/gets.c create mode 100644 libsrc/common/gets.s create mode 100644 test/ref/test_gets.c diff --git a/libsrc/common/gets.c b/libsrc/common/gets.c deleted file mode 100644 index 2936c70de..000000000 --- a/libsrc/common/gets.c +++ /dev/null @@ -1,63 +0,0 @@ -/* -** gets.c -** -** Ullrich von Bassewitz, 11.08.1998 -*/ - - - -#include <stdio.h> -#include "_file.h" - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -char* __fastcall__ gets (char* s) -{ - register char* p = s; - int c; - unsigned i = 0; - - while (1) { - - /* Get next character */ - if ((c = fgetc (stdin)) == EOF) { - /* Error or EOF */ - *p = '\0'; - if (stdin->f_flags & _FERROR) { - /* ERROR */ - return 0; - } else { - /* EOF */ - if (i) { - return s; - } else { - return 0; - } - } - } - - /* One char more. Newline ends the input */ - if ((char) c == '\n') { - *p = '\0'; - break; - } else { - *p = c; - ++p; - ++i; - } - - } - - /* Done */ - return s; -} - - - - diff --git a/libsrc/common/gets.s b/libsrc/common/gets.s new file mode 100644 index 000000000..dfaf2def3 --- /dev/null +++ b/libsrc/common/gets.s @@ -0,0 +1,47 @@ +; +; Colin Leroy-Mira, 2024 +; +; char* __fastcall__ gets (char* s) +; + + .export _gets + .import _fgets, _stdin, popax, pushax + .importzp ptr4 + +_gets: + ; Push buffer + sta ptr4 + stx ptr4+1 + jsr pushax + + ; Push size (there's no limit!) + lda #$FF + tax + jsr pushax + + lda _stdin + ldx _stdin+1 + + jsr _fgets + + ; Check return value + bne :+ + cpx #$00 + bne :+ + rts + +: ; At least one byte written. + jsr pushax ; Store returned pointer + + ; Remove \n if there is one. + lda ptr4 ; _fgets returns with ptr4 at + bne :+ ; end of buffer + dec ptr4+1 +: dec ptr4 + lda (ptr4),y ; _fgets returns with Y=0 + cmp #$0A + bne :+ + tya + sta (ptr4),y ; Set terminator over \n + +: jmp popax diff --git a/test/ref/test_gets.c b/test/ref/test_gets.c new file mode 100644 index 000000000..ee5b6fd58 --- /dev/null +++ b/test/ref/test_gets.c @@ -0,0 +1,46 @@ +/* + !!DESCRIPTION!! gets test + !!LICENCE!! Public domain +*/ + +#include "common.h" + +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> +#include <fcntl.h> +#include <ctype.h> + +char buf[512]; + +#define INFILE "cf.in" + +#ifndef __CC65__ +/* Force declaration on host compiler, as gets() is deprecated for + * being dangerous as hell */ +char *gets (char *__s); +#endif + +#ifdef NO_OLD_FUNC_DECL +int main(int argc,char **argv) +#else +main(argc, argv) +int argc; +char *argv[]; +#endif +{ + /* Fake stdin with the reference file */ + fclose(stdin); + stdin = fopen(INFILE, "r"); + if (stdin == NULL) { + return EXIT_FAILURE; + } + + while (gets(buf) != NULL) + { + printf("%s",buf); + } + + fclose(stdin); + return 0; +} From 0dd7b0c3a5204ac96ae6067f3d48cbfc4f62ec05 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 25 Jan 2024 09:12:46 +0100 Subject: [PATCH 2388/2710] Implement __sysremove for sim65 This will allow using unlink()/remove() in sim65 programs Use it to unlink fgets' test output file --- libsrc/sim6502/paravirt.s | 5 ++++ src/sim65/paravirt.c | 43 ++++++++++++++++++++++++++++-- src/sim65/paravirt.h | 6 ++--- test/ref/test_fgets.c | 2 ++ test/val/remove.c | 55 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 test/val/remove.c diff --git a/libsrc/sim6502/paravirt.s b/libsrc/sim6502/paravirt.s index 0d8e528b1..3bd40fbe4 100644 --- a/libsrc/sim6502/paravirt.s +++ b/libsrc/sim6502/paravirt.s @@ -8,10 +8,15 @@ ; .export exit, args, _open, _close, _read, _write + .export __sysremove, ___osmaperrno +__sysremove := $FFF2 +___osmaperrno := $FFF3 _open := $FFF4 _close := $FFF5 _read := $FFF6 _write := $FFF7 args := $FFF8 exit := $FFF9 + + ; $FFFA-FFFF are hardware vectors, extend before not after! diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index 2e52d6e7e..141bcd2bd 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -163,7 +163,7 @@ static void PVArgs (CPURegs* Regs) static void PVOpen (CPURegs* Regs) { - char Path[PVOPEN_PATH_SIZE]; + char Path[PV_PATH_SIZE]; int OFlag = O_INITIAL; int OMode = 0; unsigned RetVal, I = 0; @@ -184,7 +184,7 @@ static void PVOpen (CPURegs* Regs) break; } ++I; - if (I >= PVOPEN_PATH_SIZE) { + if (I >= PV_PATH_SIZE) { Error("PVOpen path too long at address $%04X",Name); } } @@ -253,6 +253,35 @@ static void PVClose (CPURegs* Regs) +static void PVSysRemove (CPURegs* Regs) +{ + char Path[PV_PATH_SIZE]; + unsigned RetVal, I = 0; + + unsigned Name = GetAX (Regs); + + Print (stderr, 2, "PVSysRemove ($%04X)\n", Name); + + do { + if (!(Path[I] = MemReadByte ((Name + I) & 0xFFFF))) { + break; + } + ++I; + if (I >= PV_PATH_SIZE) { + Error("PVSysRemove path too long at address $%04X", Name); + } + } + while (1); + + Print (stderr, 2, "PVSysRemove (\"%s\")\n", Path); + + RetVal = remove (Path); + + SetAX (Regs, RetVal); +} + + + static void PVRead (CPURegs* Regs) { unsigned char* Data; @@ -305,7 +334,17 @@ static void PVWrite (CPURegs* Regs) +static void PVOSMapErrno (CPURegs* Regs) +{ + unsigned err = GetAX(Regs); + SetAX (Regs, err != 0 ? -1 : 0); +} + + + static const PVFunc Hooks[] = { + PVSysRemove, + PVOSMapErrno, PVOpen, PVClose, PVRead, diff --git a/src/sim65/paravirt.h b/src/sim65/paravirt.h index 3badb50ea..f3281705e 100644 --- a/src/sim65/paravirt.h +++ b/src/sim65/paravirt.h @@ -44,11 +44,11 @@ -#define PARAVIRT_BASE 0xFFF4 +#define PARAVIRT_BASE 0xFFF2 /* Lowest address used by a paravirtualization hook */ -#define PVOPEN_PATH_SIZE 1024 -/* Maximum path size supported by PVOpen */ +#define PV_PATH_SIZE 1024 +/* Maximum path size supported by PVOpen/PVSysRemove */ diff --git a/test/ref/test_fgets.c b/test/ref/test_fgets.c index 72ea308dd..0529b1651 100644 --- a/test/ref/test_fgets.c +++ b/test/ref/test_fgets.c @@ -10,6 +10,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <unistd.h> FILE *in, *out; char buf[32]; @@ -34,6 +35,7 @@ int main(int argc,char **argv) printf("Error: file pointer should be in error state\n"); } fclose(out); + unlink(outfile_path); in = fopen(INFILE, "rb"); if (in == NULL) { diff --git a/test/val/remove.c b/test/val/remove.c new file mode 100644 index 000000000..eecf8be8f --- /dev/null +++ b/test/val/remove.c @@ -0,0 +1,55 @@ +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +int fails = 0; + + +static void create_out_file(const char *outfile_path) { + FILE *out; + + + out = fopen(outfile_path, "wb"); + if (out == NULL) { + printf("Could not create %s\n", outfile_path); + fails++; + return; + } + fclose(out); +} + +int main (int argc, char **argv) +{ + int r; + static char outfile_path[FILENAME_MAX+1]; + + sprintf(outfile_path, "%s.test.out", argv[0]); + + create_out_file(outfile_path); + r = remove(outfile_path); + if (r != 0) { + printf("could not remove() %s\n", outfile_path); + fails++; + } + + create_out_file(outfile_path); + r = unlink(outfile_path); + if (r != 0) { + printf("could not unlink() %s\n", outfile_path); + fails++; + } + + r = remove("klsdfjqlsjdflkqjdsoizu"); + if (r == 0) { + printf("remove()ing non-existent file succeeded\n"); + fails++; + } + + r = unlink("klsdfjqlsjdflkqjdsoizu"); + if (r == 0) { + printf("unlink()ing non-existent file succeeded\n"); + fails++; + } + + return fails; +} From 7d7cf2d1e0f13dc095c4b085633772b2fab08eb1 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 28 Jan 2024 21:33:12 +0100 Subject: [PATCH 2389/2710] Implement aslax7/shlax7/asrax7/shrax7 --- libsrc/runtime/aslax7.s | 21 +++++++++++++++++ libsrc/runtime/asrax7.s | 18 ++++++++++++++ libsrc/runtime/shrax7.s | 18 ++++++++++++++ src/cc65/codegen.c | 16 +++++++++++++ src/cc65/codeinfo.c | 4 ++++ test/val/lib_runtime_aslax7.c | 44 +++++++++++++++++++++++++++++++++++ test/val/lib_runtime_asrax7.c | 44 +++++++++++++++++++++++++++++++++++ test/val/lib_runtime_shlax7.c | 44 +++++++++++++++++++++++++++++++++++ test/val/lib_runtime_shrax7.c | 44 +++++++++++++++++++++++++++++++++++ 9 files changed, 253 insertions(+) create mode 100644 libsrc/runtime/aslax7.s create mode 100644 libsrc/runtime/asrax7.s create mode 100644 libsrc/runtime/shrax7.s create mode 100644 test/val/lib_runtime_aslax7.c create mode 100644 test/val/lib_runtime_asrax7.c create mode 100644 test/val/lib_runtime_shlax7.c create mode 100644 test/val/lib_runtime_shrax7.c diff --git a/libsrc/runtime/aslax7.s b/libsrc/runtime/aslax7.s new file mode 100644 index 000000000..533ee55e6 --- /dev/null +++ b/libsrc/runtime/aslax7.s @@ -0,0 +1,21 @@ +; +; Miloslaw Smyk, 2024 +; +; CC65 runtime: Scale the primary register by 128, unsigned +; + + .export shlax7, aslax7 + +aslax7: +shlax7: ; XXXXXXXL AAAAAAAl + tay + txa + lsr ; XXXXXXXL -> 0XXXXXXX, L->C + tya + ror ; AAAAAAAl -> LAAAAAAA, l->C + tax + lda #$00 ; LAAAAAAA 00000000 + ror ; LAAAAAAA l0000000 + rts + + ; 10 bytes, 16 cycles + rts diff --git a/libsrc/runtime/asrax7.s b/libsrc/runtime/asrax7.s new file mode 100644 index 000000000..3c9cce681 --- /dev/null +++ b/libsrc/runtime/asrax7.s @@ -0,0 +1,18 @@ +; +; Miloslaw Smyk, 2024 +; +; CC65 runtime: Scale the primary register by 128, signed +; + + .export asrax7 + +asrax7: ; HXXXXXXL hAAAAAAl + asl ; AAAAAAA0, h->C + txa + rol ; XXXXXXLh, H->C + ldx #$00 ; 00000000 XXXXXXLh + bcc :+ + dex ; 11111111 XXXXXXLh if C +: rts + + ; 12 cycles max, 9 bytes diff --git a/libsrc/runtime/shrax7.s b/libsrc/runtime/shrax7.s new file mode 100644 index 000000000..31712ca72 --- /dev/null +++ b/libsrc/runtime/shrax7.s @@ -0,0 +1,18 @@ +; +; Miloslaw Smyk, 2024 +; +; CC65 runtime: Scale the primary register by 128, unsigned +; + + .export shrax7 + +shrax7: ; HXXXXXXL hAAAAAAl + asl ; AAAAAAA0, h->C + txa + rol ; XXXXXXLh, H->C + ldx #$00 ; 00000000 XXXXXXLh + bcc :+ + inx ; 0000000H XXXXXXLh if C +: rts + + ; 12 cycles max, 9 bytes diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index c2bdfcd63..69dcc1c6c 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -3260,6 +3260,14 @@ void g_asr (unsigned flags, unsigned long val) } val -= 8; } + if (val == 7) { + if (flags & CF_UNSIGNED) { + AddCodeLine ("jsr shrax7"); + } else { + AddCodeLine ("jsr asrax7"); + } + val = 0; + } if (val >= 4) { if (flags & CF_UNSIGNED) { AddCodeLine ("jsr shrax4"); @@ -3402,6 +3410,14 @@ void g_asl (unsigned flags, unsigned long val) AddCodeLine ("lda #$00"); val -= 8; } + if (val == 7) { + if (flags & CF_UNSIGNED) { + AddCodeLine ("jsr shlax7"); + } else { + AddCodeLine ("jsr aslax7"); + } + val = 0; + } if (val >= 4) { if (flags & CF_UNSIGNED) { AddCodeLine ("jsr shlax4"); diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index 88f8a5138..427bfc52b 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -99,6 +99,7 @@ static const FuncInfo FuncInfoTable[] = { { "aslax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, { "aslax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, { "aslax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "aslax7", REG_AX, PSTATE_ALL | REG_AXY }, { "aslaxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, { "asleax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, { "asleax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, @@ -108,6 +109,7 @@ static const FuncInfo FuncInfoTable[] = { { "asrax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, { "asrax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, { "asrax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "asrax7", REG_AX, PSTATE_ALL | REG_AX }, { "asraxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, { "asreax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, { "asreax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, @@ -245,6 +247,7 @@ static const FuncInfo FuncInfoTable[] = { { "shlax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, { "shlax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, { "shlax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shlax7", REG_AX, PSTATE_ALL | REG_AXY }, { "shlaxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, { "shleax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, { "shleax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, @@ -254,6 +257,7 @@ static const FuncInfo FuncInfoTable[] = { { "shrax2", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, { "shrax3", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, { "shrax4", REG_AX, PSTATE_ALL | REG_AX | REG_TMP1 }, + { "shrax7", REG_AX, PSTATE_ALL | REG_AX }, { "shraxy", REG_AXY, PSTATE_ALL | REG_AXY | REG_TMP1 }, { "shreax1", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, { "shreax2", REG_EAX, PSTATE_ALL | REG_EAX | REG_TMP1 }, diff --git a/test/val/lib_runtime_aslax7.c b/test/val/lib_runtime_aslax7.c new file mode 100644 index 000000000..ea8f0b375 --- /dev/null +++ b/test/val/lib_runtime_aslax7.c @@ -0,0 +1,44 @@ +/* + !!DESCRIPTION!! A small test for aslax7. + !!ORIGIN!! + !!LICENCE!! + !!AUTHOR!! +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <limits.h> +#include <errno.h> + +int main (void) +{ + signed int ai = -32768, ti, refi; + signed char ac = -128, tc, refc; + + do { + refi = ai << 4; + refi = refi << 3; + + ti = ai << 7; + + if (ti != refi) { + printf("wrong result on int %d << 7: %04X, expected %04X\n", ai, ti, refi); + return 1; + } + } while (ai != -32768); + + do { + refc = ac << 4; + refc = refc << 3; + + tc = ac << 7; + + if (tc != refc) { + printf("wrong result on char %d << 7: %04X, expected %04X\n", ac, tc, refc); + return 1; + } + } while (ac != -128); + + return 0; +} diff --git a/test/val/lib_runtime_asrax7.c b/test/val/lib_runtime_asrax7.c new file mode 100644 index 000000000..942efea1d --- /dev/null +++ b/test/val/lib_runtime_asrax7.c @@ -0,0 +1,44 @@ +/* + !!DESCRIPTION!! A small test for asrax7. + !!ORIGIN!! + !!LICENCE!! + !!AUTHOR!! +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <limits.h> +#include <errno.h> + +int main (void) +{ + signed int ai = -32768, ti, refi; + signed char ac = -128, tc, refc; + + do { + refi = ai >> 4; + refi = refi >> 3; + + ti = ai >> 7; + + if (ti != refi) { + printf("wrong result on int %d >> 7: %04X, expected %04X\n", ai, ti, refi); + return 1; + } + } while (ai != -32768); + + do { + refc = ac >> 4; + refc = refc >> 3; + + tc = ac >> 7; + + if (tc != refc) { + printf("wrong result on char %d >> 7: %04X, expected %04X\n", ac, tc, refc); + return 1; + } + } while (ac != -128); + + return 0; +} diff --git a/test/val/lib_runtime_shlax7.c b/test/val/lib_runtime_shlax7.c new file mode 100644 index 000000000..9a4869438 --- /dev/null +++ b/test/val/lib_runtime_shlax7.c @@ -0,0 +1,44 @@ +/* + !!DESCRIPTION!! A small test for shlax7. + !!ORIGIN!! + !!LICENCE!! + !!AUTHOR!! +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <limits.h> +#include <errno.h> + +int main (void) +{ + unsigned int ai = 0, ti, refi; + unsigned char ac = 0, tc, refc; + + do { + refi = ai << 4; + refi = refi << 3; + + ti = ai << 7; + + if (ti != refi) { + printf("wrong result on int %u << 7: %04X, expected %04X\n", ai, ti, refi); + return 1; + } + } while (ai != 0); + + do { + refc = ac << 4; + refc = refc << 3; + + tc = ac << 7; + + if (tc != refc) { + printf("wrong result on char %u << 7: %04X, expected %04X\n", ac, tc, refc); + return 1; + } + } while (ac != 0); + + return 0; +} diff --git a/test/val/lib_runtime_shrax7.c b/test/val/lib_runtime_shrax7.c new file mode 100644 index 000000000..db7356d0e --- /dev/null +++ b/test/val/lib_runtime_shrax7.c @@ -0,0 +1,44 @@ +/* + !!DESCRIPTION!! A small test for shrax7. + !!ORIGIN!! + !!LICENCE!! + !!AUTHOR!! +*/ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <limits.h> +#include <errno.h> + +int main (void) +{ + unsigned int ai = 0, ti, refi; + unsigned char ac = 0, tc, refc; + + do { + refi = ai >> 4; + refi = refi >> 3; + + ti = ai >> 7; + + if (ti != refi) { + printf("wrong result on int %d >> 7: %04X, expected %04X\n", ai, ti, refi); + return 1; + } + } while (ai != 0); + + do { + refc = ac >> 4; + refc = refc >> 3; + + tc = ac >> 7; + + if (tc != refc) { + printf("wrong result on char %d >> 7: %04X, expected %04X\n", ac, tc, refc); + return 1; + } + } while (ac != 0); + + return 0; +} From 9ffa2d05e65fd0aa3455235ffc5cc74cd9159c58 Mon Sep 17 00:00:00 2001 From: rumbledethumps <16963588+rumbledethumps@users.noreply.github.com> Date: Tue, 30 Jan 2024 00:17:28 -0800 Subject: [PATCH 2390/2710] rp6502 validate write_xstack count --- include/rp6502.h | 3 +-- libsrc/rp6502/write_xstack.c | 4 ++++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/include/rp6502.h b/include/rp6502.h index 61664c78f..53028c35a 100644 --- a/include/rp6502.h +++ b/include/rp6502.h @@ -47,8 +47,7 @@ struct __RP6502 unsigned char step1; unsigned int addr1; unsigned char xstack; - unsigned char errno_lo; - unsigned char errno_hi; + unsigned int errno; unsigned char op; unsigned char irq; const unsigned char spin; diff --git a/libsrc/rp6502/write_xstack.c b/libsrc/rp6502/write_xstack.c index b53aa95e7..ff979899d 100644 --- a/libsrc/rp6502/write_xstack.c +++ b/libsrc/rp6502/write_xstack.c @@ -1,8 +1,12 @@ #include <rp6502.h> +#include <errno.h> int __fastcall__ write_xstack (const void* buf, unsigned count, int fildes) { unsigned i; + if (count > 256) { + return _mappederrno (EINVAL); + } for (i = count; i;) { ria_push_char (((char*)buf)[--i]); } From 7594af553ae3a189e7a7f9cf2f59c47af51441eb Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 28 Jan 2024 17:00:02 +0100 Subject: [PATCH 2391/2710] Fix #2388 Reopen stdin in binary mode instead of closing/opening --- test/ref/test_gets.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/ref/test_gets.c b/test/ref/test_gets.c index ee5b6fd58..003da5569 100644 --- a/test/ref/test_gets.c +++ b/test/ref/test_gets.c @@ -30,9 +30,7 @@ char *argv[]; #endif { /* Fake stdin with the reference file */ - fclose(stdin); - stdin = fopen(INFILE, "r"); - if (stdin == NULL) { + if (freopen(INFILE, "rb", stdin) == NULL) { return EXIT_FAILURE; } From ba3607102263c73af18105902a8e50063618bd96 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 30 Jan 2024 17:51:00 +0100 Subject: [PATCH 2392/2710] Rewrite fputs in assembly -28 bytes, -1% cycles --- libsrc/common/fputs.c | 28 ---------------------------- libsrc/common/fputs.s | 42 ++++++++++++++++++++++++++++++++++++++++++ test/ref/test_fputs.c | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+), 28 deletions(-) delete mode 100644 libsrc/common/fputs.c create mode 100644 libsrc/common/fputs.s create mode 100644 test/ref/test_fputs.c diff --git a/libsrc/common/fputs.c b/libsrc/common/fputs.c deleted file mode 100644 index be476a3f0..000000000 --- a/libsrc/common/fputs.c +++ /dev/null @@ -1,28 +0,0 @@ -/* -** int fputs (const char* s, FILE* f); -** -** Ullrich von Bassewitz, 11.08.1998 -*/ - - - -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include "_file.h" - - - -int __fastcall__ fputs (const char* s, register FILE* f) -{ - /* Check if the file is open or if there is an error condition */ - if ((f->f_flags & _FOPEN) == 0 || (f->f_flags & (_FERROR | _FEOF)) != 0) { - return EOF; - } - - /* Write the string */ - return write (f->f_fd, s, strlen (s)); -} - - - diff --git a/libsrc/common/fputs.s b/libsrc/common/fputs.s new file mode 100644 index 000000000..e70374058 --- /dev/null +++ b/libsrc/common/fputs.s @@ -0,0 +1,42 @@ +; +; Colin Leroy-Mira, 2024 +; +; int __fastcall__ fputs (const char* s, register FILE* f) +; + + .export _fputs + .importzp ptr1, ptr2 + .import _write, _strlen + .import swapstk, pushax, returnFFFF + + .include "stdio.inc" + .include "_file.inc" + +_fputs: + sta ptr1 + stx ptr1+1 + + ldy #_FILE::f_flags + lda (ptr1),y + tax + and #_FOPEN ; Check for file open + beq ret_eof + txa + and #(_FERROR|_FEOF); Check for error/eof + bne ret_eof + + ; Push _write parameters + ldy #_FILE::f_fd + lda (ptr1),y + ldx #$00 + jsr swapstk ; Push fd, get s + + jsr pushax ; Push s + + jsr _strlen ; Get length + + ; Write + jmp _write + +ret_eof: + jmp returnFFFF diff --git a/test/ref/test_fputs.c b/test/ref/test_fputs.c new file mode 100644 index 000000000..ad0552317 --- /dev/null +++ b/test/ref/test_fputs.c @@ -0,0 +1,40 @@ +/* + !!DESCRIPTION!! fgets test + !!LICENCE!! Public domain +*/ + +#include "common.h" + +#include <ctype.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +FILE *in, *out; +char buf[512], err; + +#define INFILE "cf.in" + +int main(int argc,char **argv) +{ + in = fopen(INFILE, "rb"); + if (in == NULL) { + return EXIT_FAILURE; + } + + strcpy(buf, "test"); + if (fputs(buf, in) != EOF) { + printf("Error: can fputs to a file opened for reading\n"); + return EXIT_FAILURE; + } + clearerr(in); + + while (fgets(buf, 512, in) != NULL) { + fputs(buf, stdout); + } + + fclose(in); + return 0; +} From 1a5a7d67a7ebb4881a90234b596fdee4612b09ef Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 30 Jan 2024 17:59:33 +0100 Subject: [PATCH 2393/2710] Rewrite fputc in assembly -36 bytes, -12% cycles --- libsrc/common/fputc.c | 41 ------------------------ libsrc/common/fputc.s | 72 +++++++++++++++++++++++++++++++++++++++++++ libsrc/common/fputs.s | 4 +-- test/ref/test_fputc.c | 39 +++++++++++++++++++++++ 4 files changed, 113 insertions(+), 43 deletions(-) delete mode 100644 libsrc/common/fputc.c create mode 100644 libsrc/common/fputc.s create mode 100644 test/ref/test_fputc.c diff --git a/libsrc/common/fputc.c b/libsrc/common/fputc.c deleted file mode 100644 index b623949d3..000000000 --- a/libsrc/common/fputc.c +++ /dev/null @@ -1,41 +0,0 @@ -/* -** fputc.c -** -** Ullrich von Bassewitz, 02.06.1998 -*/ - - - -#include <stdio.h> -#include <unistd.h> -#include "_file.h" - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -int __fastcall__ fputc (int c, register FILE* f) -{ - /* Check if the file is open or if there is an error condition */ - if ((f->f_flags & _FOPEN) == 0 || (f->f_flags & (_FERROR | _FEOF)) != 0) { - goto ReturnEOF; - } - - /* Write the byte */ - if (write (f->f_fd, &c, 1) != 1) { - /* Error */ - f->f_flags |= _FERROR; -ReturnEOF: - return EOF; - } - - /* Return the byte written */ - return c & 0xFF; -} - - - diff --git a/libsrc/common/fputc.s b/libsrc/common/fputc.s new file mode 100644 index 000000000..4633f24f1 --- /dev/null +++ b/libsrc/common/fputc.s @@ -0,0 +1,72 @@ +; +; Colin Leroy-Mira, 2024 +; +; int __fastcall__ fputc (int c, FILE* f); +; + + .export _fputc + .importzp ptr1 + .import _write + .import pushax, pusha0, popax, incsp2 + .import pushptr1, popptr1, returnFFFF + + .include "stdio.inc" + .include "_file.inc" + +_fputc: + sta ptr1 + stx ptr1+1 + + jsr popax ; Get char, as we'll have + sta c ; to return it anyway + stx c+1 + + ldy #_FILE::f_flags + lda (ptr1),y + tax + and #_FOPEN ; Check for file open + beq ret_eof + txa + and #(_FERROR|_FEOF); Check for error/eof + bne ret_eof + + jsr pushptr1 ; Backup fp pointer + + ; Push _write parameters + ldy #_FILE::f_fd + lda (ptr1),y + jsr pusha0 + + lda #<c + ldx #>c + jsr pushax + + lda #$01 + ldx #$00 + + ; Write + jsr _write + + ; Check for errors + cmp #$01 + bne set_ferror + + ; Return char + lda c + ldx #$00 + jmp incsp2 ; Drop fp pointer copy + +ret_eof: + jmp returnFFFF + +set_ferror: + jsr popptr1 + lda #_FERROR + ldy #_FILE::f_flags + ora (ptr1),y + sta (ptr1),y + jmp returnFFFF + + .bss + +c: .res 2 diff --git a/libsrc/common/fputs.s b/libsrc/common/fputs.s index e70374058..00415aef1 100644 --- a/libsrc/common/fputs.s +++ b/libsrc/common/fputs.s @@ -32,9 +32,9 @@ _fputs: jsr swapstk ; Push fd, get s jsr pushax ; Push s - + jsr _strlen ; Get length - + ; Write jmp _write diff --git a/test/ref/test_fputc.c b/test/ref/test_fputc.c new file mode 100644 index 000000000..a19aeafaf --- /dev/null +++ b/test/ref/test_fputc.c @@ -0,0 +1,39 @@ +/* + !!DESCRIPTION!! fgets test + !!LICENCE!! Public domain +*/ + +#include "common.h" + +#include <ctype.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +FILE *in, *out; +int c, err; + +#define INFILE "cf.in" + +int main(int argc,char **argv) +{ + in = fopen(INFILE, "rb"); + if (in == NULL) { + return EXIT_FAILURE; + } + + if (fputc(c, in) != EOF) { + printf("Error: can fputc to a file opened for reading\n"); + return EXIT_FAILURE; + } + clearerr(in); + + while ((c = fgetc(in)) != EOF) { + fputc(c, stdout); + } + + fclose(in); + return 0; +} From 2b97735d5d150f1ce9d568b10fd878fa503ca232 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 30 Jan 2024 18:11:10 +0100 Subject: [PATCH 2394/2710] Factorize file pointer check --- libsrc/common/checkferror.s | 24 ++++++++++++++++++++++++ libsrc/common/fgetc.s | 13 ++++--------- libsrc/common/fputc.s | 10 ++-------- libsrc/common/fputs.s | 10 ++-------- 4 files changed, 32 insertions(+), 25 deletions(-) create mode 100644 libsrc/common/checkferror.s diff --git a/libsrc/common/checkferror.s b/libsrc/common/checkferror.s new file mode 100644 index 000000000..736fa3ccd --- /dev/null +++ b/libsrc/common/checkferror.s @@ -0,0 +1,24 @@ +; +; Colin Leroy-Mira, 2024 +; +; Helper to check for file opened, not eof, not ferror +; Expects file pointer in ptr1, +; Returns with Z flag set if everything is OK, +; Destroys A, X, Y, +; Sets file flags in A +; + + .export checkferror + .importzp ptr1 + + .include "_file.inc" + +checkferror: + ldy #_FILE::f_flags + lda (ptr1),y + tax + and #(_FOPEN|_FERROR|_FEOF); Check for file open, error/eof + tay + txa + cpy #_FOPEN + rts diff --git a/libsrc/common/fgetc.s b/libsrc/common/fgetc.s index 777696b7a..98e6bb2f7 100644 --- a/libsrc/common/fgetc.s +++ b/libsrc/common/fgetc.s @@ -5,7 +5,8 @@ ; .export _fgetc - .import _read, pusha0, pushax, popptr1, incsp2, returnFFFF + .import _read, checkferror + .import pusha0, pushax, popptr1, incsp2, returnFFFF .importzp ptr1 .include "stdio.inc" @@ -16,16 +17,10 @@ _fgetc: stx ptr1+1 jsr pushax ; Backup our ptr - ldy #_FILE::f_flags - lda (ptr1),y - tax - and #_FOPEN ; Check for file open - beq ret_eof - txa - and #(_FERROR|_FEOF); Check for error/eof + jsr checkferror bne ret_eof - txa + tax and #_FPUSHBACK ; Check for pushed back char beq do_read diff --git a/libsrc/common/fputc.s b/libsrc/common/fputc.s index 4633f24f1..358723538 100644 --- a/libsrc/common/fputc.s +++ b/libsrc/common/fputc.s @@ -6,7 +6,7 @@ .export _fputc .importzp ptr1 - .import _write + .import _write, checkferror .import pushax, pusha0, popax, incsp2 .import pushptr1, popptr1, returnFFFF @@ -21,13 +21,7 @@ _fputc: sta c ; to return it anyway stx c+1 - ldy #_FILE::f_flags - lda (ptr1),y - tax - and #_FOPEN ; Check for file open - beq ret_eof - txa - and #(_FERROR|_FEOF); Check for error/eof + jsr checkferror bne ret_eof jsr pushptr1 ; Backup fp pointer diff --git a/libsrc/common/fputs.s b/libsrc/common/fputs.s index 00415aef1..b79a4707f 100644 --- a/libsrc/common/fputs.s +++ b/libsrc/common/fputs.s @@ -6,7 +6,7 @@ .export _fputs .importzp ptr1, ptr2 - .import _write, _strlen + .import _write, _strlen, checkferror .import swapstk, pushax, returnFFFF .include "stdio.inc" @@ -16,13 +16,7 @@ _fputs: sta ptr1 stx ptr1+1 - ldy #_FILE::f_flags - lda (ptr1),y - tax - and #_FOPEN ; Check for file open - beq ret_eof - txa - and #(_FERROR|_FEOF); Check for error/eof + jsr checkferror bne ret_eof ; Push _write parameters From afd8ee627e4e71900f9cbacda20e010fa529684d Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 30 Jan 2024 19:52:48 +0100 Subject: [PATCH 2395/2710] Remove useless branching code in fgets --- libsrc/common/fgets.s | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libsrc/common/fgets.s b/libsrc/common/fgets.s index 465658191..172ca10dd 100644 --- a/libsrc/common/fgets.s +++ b/libsrc/common/fgets.s @@ -90,9 +90,7 @@ read_loop: : cmp #$0A ; Stop at \n beq done - - clc - bcc read_loop + bne read_loop got_eof: lda didread From ce606bb19e293339d31d82888fe7659d11b64b9d Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 31 Jan 2024 08:11:46 +0100 Subject: [PATCH 2396/2710] Fix tests... --- test/val/lib_runtime_aslax7.c | 4 ++-- test/val/lib_runtime_asrax7.c | 4 ++-- test/val/lib_runtime_shlax7.c | 4 ++-- test/val/lib_runtime_shrax7.c | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/test/val/lib_runtime_aslax7.c b/test/val/lib_runtime_aslax7.c index ea8f0b375..7e3b4796a 100644 --- a/test/val/lib_runtime_aslax7.c +++ b/test/val/lib_runtime_aslax7.c @@ -26,7 +26,7 @@ int main (void) printf("wrong result on int %d << 7: %04X, expected %04X\n", ai, ti, refi); return 1; } - } while (ai != -32768); + } while (++ai != -32768); do { refc = ac << 4; @@ -38,7 +38,7 @@ int main (void) printf("wrong result on char %d << 7: %04X, expected %04X\n", ac, tc, refc); return 1; } - } while (ac != -128); + } while (++ac != -128); return 0; } diff --git a/test/val/lib_runtime_asrax7.c b/test/val/lib_runtime_asrax7.c index 942efea1d..3cdf2aab8 100644 --- a/test/val/lib_runtime_asrax7.c +++ b/test/val/lib_runtime_asrax7.c @@ -26,7 +26,7 @@ int main (void) printf("wrong result on int %d >> 7: %04X, expected %04X\n", ai, ti, refi); return 1; } - } while (ai != -32768); + } while (++ai != -32768); do { refc = ac >> 4; @@ -38,7 +38,7 @@ int main (void) printf("wrong result on char %d >> 7: %04X, expected %04X\n", ac, tc, refc); return 1; } - } while (ac != -128); + } while (++ac != -128); return 0; } diff --git a/test/val/lib_runtime_shlax7.c b/test/val/lib_runtime_shlax7.c index 9a4869438..d2073ca3a 100644 --- a/test/val/lib_runtime_shlax7.c +++ b/test/val/lib_runtime_shlax7.c @@ -26,7 +26,7 @@ int main (void) printf("wrong result on int %u << 7: %04X, expected %04X\n", ai, ti, refi); return 1; } - } while (ai != 0); + } while (++ai != 0); do { refc = ac << 4; @@ -38,7 +38,7 @@ int main (void) printf("wrong result on char %u << 7: %04X, expected %04X\n", ac, tc, refc); return 1; } - } while (ac != 0); + } while (++ac != 0); return 0; } diff --git a/test/val/lib_runtime_shrax7.c b/test/val/lib_runtime_shrax7.c index db7356d0e..d3bc0db73 100644 --- a/test/val/lib_runtime_shrax7.c +++ b/test/val/lib_runtime_shrax7.c @@ -26,7 +26,7 @@ int main (void) printf("wrong result on int %d >> 7: %04X, expected %04X\n", ai, ti, refi); return 1; } - } while (ai != 0); + } while (++ai != 0); do { refc = ac >> 4; @@ -38,7 +38,7 @@ int main (void) printf("wrong result on char %d >> 7: %04X, expected %04X\n", ac, tc, refc); return 1; } - } while (ac != 0); + } while (++ac != 0); return 0; } From 1e300bf768b949498895062b157d71aa3ac9bbc1 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 1 Feb 2024 20:13:05 +0100 Subject: [PATCH 2397/2710] Add test case for issue #2395 --- test/todo/bug2395.c | 51 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 test/todo/bug2395.c diff --git a/test/todo/bug2395.c b/test/todo/bug2395.c new file mode 100644 index 000000000..4f4d2a6d0 --- /dev/null +++ b/test/todo/bug2395.c @@ -0,0 +1,51 @@ + +/* bug #2395: Bitwise operators with a boolean expression fail when optimized */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +unsigned char a, b; +unsigned char c = 199; +unsigned char d = 100; + +int main(void) { + int fails = 0; + + a = c ^ (d != 0); + b = c ^ 1; + + printf("%u ^ (%u != 0) => %u\n", c, d, a); + if (a != b) { + printf("XOR error: a %d instead of %d\n", a, b); + fails++; + } + + a = c | (d != 0); + b = c | 1; + + printf("%u | (%u != 0) => %u\n", c, d, a); + if (a != b) { + printf("OR error: a %d instead of %d\n", a, b); + fails++; + } + + a = c & (d != 0); + b = c & 1; + + printf("%u & (%u != 0) => %u\n", c, d, a); + if (a != b) { + printf("AND error: a %d instead of %d\n", a, b); + fails++; + } + printf("%d errors\n", fails); + +#ifdef __OPT__ + return fails; +#else + /* Force exit failure on non-optimised version, which works, + * otherwise it breaks the build + */ + return 1; +#endif +} From 96d55e3703de9a9b079cc7f4da8e6b5ed82fb6e5 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Fri, 2 Feb 2024 19:00:33 +0800 Subject: [PATCH 2398/2710] Fixed optimization for char-size bitwise XOR/OR/AND when the rhs operand is complicated. --- src/cc65/coptstop.c | 6 +++--- test/{todo => val}/bug2395.c | 0 2 files changed, 3 insertions(+), 3 deletions(-) rename test/{todo => val}/bug2395.c (100%) diff --git a/src/cc65/coptstop.c b/src/cc65/coptstop.c index 7e024ae88..402f16b97 100644 --- a/src/cc65/coptstop.c +++ b/src/cc65/coptstop.c @@ -1488,7 +1488,7 @@ static const OptFuncDesc FuncTable[] = { }; static const OptFuncDesc FuncRegATable[] = { - { "tosandax", Opt_a_tosand, REG_NONE, OP_NONE }, + { "tosandax", Opt_a_tosand, REG_NONE, OP_RHS_REMOVE_DIRECT | OP_RHS_LOAD_DIRECT }, { "toseqax", Opt_a_toseq, REG_NONE, OP_NONE }, { "tosgeax", Opt_a_tosuge, REG_NONE, OP_NONE }, { "tosgtax", Opt_a_tosugt, REG_NONE, OP_NONE }, @@ -1496,13 +1496,13 @@ static const OptFuncDesc FuncRegATable[] = { { "tosleax", Opt_a_tosule, REG_NONE, OP_NONE }, { "tosltax", Opt_a_tosult, REG_NONE, OP_NONE }, { "tosneax", Opt_a_tosne, REG_NONE, OP_NONE }, - { "tosorax", Opt_a_tosor, REG_NONE, OP_NONE }, + { "tosorax", Opt_a_tosor, REG_NONE, OP_RHS_REMOVE_DIRECT | OP_RHS_LOAD_DIRECT }, { "tossubax", Opt_a_tossub, REG_NONE, OP_RHS_REMOVE_DIRECT | OP_RHS_LOAD_DIRECT }, { "tosugeax", Opt_a_tosuge, REG_NONE, OP_NONE }, { "tosugtax", Opt_a_tosugt, REG_NONE, OP_NONE }, { "tosuleax", Opt_a_tosule, REG_NONE, OP_NONE }, { "tosultax", Opt_a_tosult, REG_NONE, OP_NONE }, - { "tosxorax", Opt_a_tosxor, REG_NONE, OP_NONE }, + { "tosxorax", Opt_a_tosxor, REG_NONE, OP_RHS_REMOVE_DIRECT | OP_RHS_LOAD_DIRECT }, }; #define FUNC_COUNT(Table) (sizeof(Table) / sizeof(Table[0])) diff --git a/test/todo/bug2395.c b/test/val/bug2395.c similarity index 100% rename from test/todo/bug2395.c rename to test/val/bug2395.c From 54b423a99efbfec9634d68cbddc596f13da89f7f Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Fri, 2 Feb 2024 13:13:57 +0100 Subject: [PATCH 2399/2710] fix test --- test/val/bug2395.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/test/val/bug2395.c b/test/val/bug2395.c index 4f4d2a6d0..07c5cd7c5 100644 --- a/test/val/bug2395.c +++ b/test/val/bug2395.c @@ -40,12 +40,5 @@ int main(void) { } printf("%d errors\n", fails); -#ifdef __OPT__ return fails; -#else - /* Force exit failure on non-optimised version, which works, - * otherwise it breaks the build - */ - return 1; -#endif } From c4c6967e4a557915707f549e01cc24205b68265b Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Fri, 2 Feb 2024 19:34:45 +0100 Subject: [PATCH 2400/2710] Enable Windows tests on pull requests --- .github/workflows/build-on-pull-request.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 045bc048d..6217c42a2 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -54,7 +54,7 @@ jobs: make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32- build_windows: - name: Build (Windows) + name: Build and Test (Windows) runs-on: windows-latest steps: @@ -79,4 +79,14 @@ jobs: - name: Build app (x64 release) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -property:Platform=x64 + - name: Build utils (MinGW) + shell: cmd + run: make -j2 util SHELL=cmd + - name: Build the platform libraries (make lib) + shell: cmd + run: make -j2 lib QUIET=1 SHELL=cmd + + - name: Run the regression tests (make test) + shell: cmd + run: make test QUIET=1 SHELL=cmd From 1fab179cb467e13c581ec65f635658cb9acf3264 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 1 Feb 2024 20:05:57 +0100 Subject: [PATCH 2401/2710] a BIT of 65C02 optimisations Use BIT immediate instead of AND when reloading A is required afterwards. Add an fread unit test as the optimisation touches fread. Sprinkle a few zero page indexed while we're at it. --- libsrc/common/_printf.s | 29 +++++++++++++++-- libsrc/common/fgetc.s | 9 +++++- libsrc/common/fread.s | 32 +++++++++++++++++-- libsrc/common/fwrite.s | 15 ++++++--- test/ref/test_fread.c | 70 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 145 insertions(+), 10 deletions(-) create mode 100644 test/ref/test_fread.c diff --git a/libsrc/common/_printf.s b/libsrc/common/_printf.s index a0074583e..d7eeb072d 100644 --- a/libsrc/common/_printf.s +++ b/libsrc/common/_printf.s @@ -13,6 +13,7 @@ .import _strlower, _strlen .macpack generic + .macpack cpu ; ---------------------------------------------------------------------------- ; We will store variables into the register bank in the zeropage. Define @@ -37,7 +38,11 @@ FCount = ptr2 GetFormatChar: ldy #0 + .if (.cpu .bitand ::CPU_ISET_65SC02) + lda (Format) + .else lda (Format),y + .endif IncFormatPtr: inc Format bne @L1 @@ -110,7 +115,11 @@ GetIntArg: lda (ArgList),y tax dey + .if (.cpu .bitand ::CPU_ISET_65SC02) + lda (ArgList) + .else lda (ArgList),y + .endif rts ; ---------------------------------------------------------------------------- @@ -135,9 +144,9 @@ ReadInt: pha ; Save digit value lda ptr1 ldx ptr1+1 - asl ptr1 + asl a rol ptr1+1 ; * 2 - asl ptr1 + asl a rol ptr1+1 ; * 4, assume carry clear adc ptr1 sta ptr1 @@ -265,10 +274,16 @@ Save: lda regbank,y ; Initialize the output counter in the output descriptor to zero lda #0 + .if (.cpu .bitand ::CPU_ISET_65SC02) + sta (OutData) + ldy #$01 + sta (OutData),y + .else tay sta (OutData),y iny sta (OutData),y + .endif ; Get the output function from the output descriptor and remember it @@ -338,7 +353,11 @@ MainLoop: sta (sp),y dey lda FCount + .if (.cpu .bitand ::CPU_ISET_65SC02) + sta (sp) + .else sta (sp),y + .endif jsr CallOutFunc ; Call the output function ; We're back from out(), or we didn't call it. Check for end of string. @@ -551,10 +570,16 @@ CheckCount: jsr GetIntArg sta ptr1 stx ptr1+1 ; Get user supplied pointer + .if (.cpu .bitand ::CPU_ISET_65SC02) + lda (OutData) ; Low byte of OutData->ccount + sta (ptr1) + ldy #1 + .else ldy #0 lda (OutData),y ; Low byte of OutData->ccount sta (ptr1),y iny + .endif lda (OutData),y ; High byte of OutData->ccount sta (ptr1),y jmp MainLoop ; Done diff --git a/libsrc/common/fgetc.s b/libsrc/common/fgetc.s index 98e6bb2f7..34d4df3aa 100644 --- a/libsrc/common/fgetc.s +++ b/libsrc/common/fgetc.s @@ -12,6 +12,8 @@ .include "stdio.inc" .include "_file.inc" + .macpack cpu + _fgetc: sta ptr1 stx ptr1+1 @@ -20,11 +22,16 @@ _fgetc: jsr checkferror bne ret_eof + .if (.cpu .bitand ::CPU_ISET_65SC02) + bit #_FPUSHBACK ; Check for pushed back char + beq do_read + .else tax and #_FPUSHBACK ; Check for pushed back char beq do_read - txa + .endif + and #<(~_FPUSHBACK) ; Reset flag sta (ptr1),y diff --git a/libsrc/common/fread.s b/libsrc/common/fread.s index 647a7f2c8..b39b9d748 100644 --- a/libsrc/common/fread.s +++ b/libsrc/common/fread.s @@ -20,6 +20,7 @@ .include "_file.inc" .macpack generic + .macpack cpu ; ------------------------------------------------------------------------ ; Code @@ -47,13 +48,21 @@ ldy #_FILE::f_flags lda (file),y + .if (.cpu .bitand ::CPU_ISET_65SC02) + bit #_FOPEN ; Is the file open? + .else and #_FOPEN ; Is the file open? + .endif beq @L1 ; Branch if no ; Check if the stream is in an error state + .if (.cpu .bitand ::CPU_ISET_65SC02) + bit #_FERROR + .else lda (file),y ; get file->f_flags again and #_FERROR + .endif beq @L2 ; File not open or in error state @@ -65,11 +74,19 @@ ; Remember if we have a pushed back character and reset the flag. -@L2: tax ; X = 0 +@L2: .if (.cpu .bitand ::CPU_ISET_65SC02) + ldx #$00 + bit #_FPUSHBACK + .else + tax ; X = 0 lda (file),y and #_FPUSHBACK + .endif beq @L3 + + .if (.not .cpu .bitand ::CPU_ISET_65SC02) lda (file),y + .endif and #<~_FPUSHBACK sta (file),y ; file->f_flags &= ~_FPUSHBACK; inx ; X = 1 @@ -118,12 +135,20 @@ ; Copy the buffer pointer into ptr1, and increment the pointer value passed ; to read() by one, so read() starts to store data at buf+1. + .if (.cpu .bitand ::CPU_ISET_65SC02) + lda (sp) + sta ptr1 + add #1 + sta (sp) + ldy #1 + .else ldy #0 lda (sp),y sta ptr1 add #1 sta (sp),y iny + .endif lda (sp),y sta ptr1+1 adc #0 @@ -134,8 +159,12 @@ ldy #_FILE::f_pushback lda (file),y + .if (.cpu .bitand ::CPU_ISET_65SC02) + sta (ptr1) ; *buf = file->f_pushback; + .else ldy #0 sta (ptr1),y ; *buf = file->f_pushback; + .endif ; Restore the low byte of count and decrement count by one. This may result ; in count being zero, so check for that. @@ -210,4 +239,3 @@ .bss save: .res 2 pb: .res 1 - diff --git a/libsrc/common/fwrite.s b/libsrc/common/fwrite.s index 861feb120..e7151da95 100644 --- a/libsrc/common/fwrite.s +++ b/libsrc/common/fwrite.s @@ -8,7 +8,7 @@ .export _fwrite .import _write - .import pushax, incsp6, addysp, ldaxysp, pushwysp, return0 + .import pushax, pusha0, incsp6, addysp, ldaxysp, pushwysp, return0 .import tosumulax, tosudivax .importzp ptr1 @@ -16,6 +16,7 @@ .include "errno.inc" .include "_file.inc" + .macpack cpu ; ------------------------------------------------------------------------ ; Code @@ -33,7 +34,11 @@ ldy #_FILE::f_flags lda (ptr1),y + .if (.cpu .bitand ::CPU_ISET_65SC02) + bit #_FOPEN + .else and #_FOPEN ; Is the file open? + .endif bne @L2 ; Branch if yes ; File not open @@ -45,7 +50,9 @@ ; Check if the stream is in an error state -@L2: lda (ptr1),y ; get file->f_flags again +@L2: .if (.not .cpu .bitand ::CPU_ISET_65SC02) + lda (ptr1),y ; get file->f_flags again + .endif and #_FERROR bne @L1 @@ -53,8 +60,7 @@ ldy #_FILE::f_fd lda (ptr1),y - ldx #$00 - jsr pushax ; file->f_fd + jsr pusha0 ; file->f_fd ldy #9 jsr pushwysp ; buf @@ -123,4 +129,3 @@ .bss file: .res 2 - diff --git a/test/ref/test_fread.c b/test/ref/test_fread.c new file mode 100644 index 000000000..5d180d723 --- /dev/null +++ b/test/ref/test_fread.c @@ -0,0 +1,70 @@ +/* + !!DESCRIPTION!! fgets test + !!LICENCE!! Public domain +*/ + +#include "common.h" + +#include <ctype.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +FILE *in, *out; +char buf[32]; + +#define INFILE "cf.in" + +int main(int argc,char **argv) +{ + static char outfile_path[FILENAME_MAX+1]; + static int r; + + sprintf(outfile_path, "%s.test.out", argv[0]); + + out = fopen(outfile_path, "wb"); + if (out == NULL) { + return EXIT_FAILURE; + } + if (fread(buf, 1, sizeof(buf), out) != NULL) { + printf("Error, could fread with write-only file\n"); + return 1; + } + if (!ferror(out)) { + printf("Error: file pointer should be in error state\n"); + } + fclose(out); + unlink(outfile_path); + + in = fopen(INFILE, "rb"); + if (in == NULL) { + return EXIT_FAILURE; + } + + /* Test that ungetc doesn't break fread */ + buf[0] = fgetc(in); + ungetc(buf[0], in); + + r = fread(buf, 1, sizeof(buf), out); + + if (r == 0) { + printf("Error: could not start reading.\n"); + } + fwrite(buf, 1, r, stdout); + + /* Finish reading file. */ + while ((r = fread(buf, 1, sizeof(buf), out)) != 0) + { + fwrite(buf, 1, r, stdout); + } + + if (!feof(in)) + { + printf("We should have EOF!\n"); + } + + fclose(in); + return 0; +} From 934de685bcc6501631c51ccb96e9f499ecb4709c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 3 Feb 2024 01:34:21 +0100 Subject: [PATCH 2402/2710] this is pr #2194 - removed ramfont.o --- cfg/kim1-mtu60k.cfg | 41 ++ cfg/kim1-mtuE000.cfg | 41 ++ samples/kim1/Makefile | 61 +- samples/kim1/font.rom | 0 samples/kim1/kimGFX.c | 290 ++++++++++ samples/kim1/kimLife.c | 144 +++++ samples/kim1/kimTest.c | 262 +++++++++ samples/kim1/ramfont.asm | 272 +++++++++ samples/kim1/subs.asm | 1140 ++++++++++++++++++++++++++++++++++++++ 9 files changed, 2248 insertions(+), 3 deletions(-) create mode 100644 cfg/kim1-mtu60k.cfg create mode 100644 cfg/kim1-mtuE000.cfg create mode 100644 samples/kim1/font.rom create mode 100644 samples/kim1/kimGFX.c create mode 100644 samples/kim1/kimLife.c create mode 100644 samples/kim1/kimTest.c create mode 100644 samples/kim1/ramfont.asm create mode 100644 samples/kim1/subs.asm diff --git a/cfg/kim1-mtu60k.cfg b/cfg/kim1-mtu60k.cfg new file mode 100644 index 000000000..4f24a4bf4 --- /dev/null +++ b/cfg/kim1-mtu60k.cfg @@ -0,0 +1,41 @@ +# kim1-mtu60k.cfg (4k) +# +# for expanded KIM-1 w/ K-1008 Graphics and 60K RAM +# +# ld65 --config kim1-mtu60k.cfg -o <prog>.bin <prog>.o + +FEATURES { + STARTADDRESS: default = $2000; + CONDES: segment = STARTUP, + type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__; +} + +SYMBOLS { + __STACKSIZE__: type = weak, value = $0080; # 128 byte program stack + __STARTADDRESS__: type = export, value = %S; +} + +MEMORY { + ZP: file = %O, define = yes, start = $0000, size = $00EE; + CPUSTACK: file = "", define = yes, start = $0100, size = $0100; + RAM: file = %O, define = yes, start = %S, size = $E000 - %S - __STACKSIZE__; + MAINROM: file = "", define = yes, start = $E000, size = $1000; + TOP: file = "", define = yes, start = $F000, size = $1000; +} + +SEGMENTS { + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; + BSS: load = RAM, type = bss, define = yes; +} + diff --git a/cfg/kim1-mtuE000.cfg b/cfg/kim1-mtuE000.cfg new file mode 100644 index 000000000..5f93cc13f --- /dev/null +++ b/cfg/kim1-mtuE000.cfg @@ -0,0 +1,41 @@ +# kim1-mtu60k.cfg (4k) +# +# for expanded KIM-1 w/ K-1008 Graphics and 60K RAM +# +# ld65 --config kim1-mtu60k.cfg -o <prog>.bin <prog>.o + +FEATURES { + STARTADDRESS: default = $E000; + CONDES: segment = STARTUP, + type = constructor, + label = __CONSTRUCTOR_TABLE__, + count = __CONSTRUCTOR_COUNT__; + CONDES: segment = STARTUP, + type = destructor, + label = __DESTRUCTOR_TABLE__, + count = __DESTRUCTOR_COUNT__; +} + +SYMBOLS { + __STACKSIZE__: type = weak, value = $0080; # 128 byte program stack + __STARTADDRESS__: type = export, value = %S; +} + +MEMORY { + ZP: file = %O, define = yes, start = $0000, size = $00EE; + CPUSTACK: file = "", define = yes, start = $0100, size = $0100; + RAM: file = %O, define = yes, start = $2000, size = $E000 - $2000 - __STACKSIZE__; + MAINROM: file = "", define = yes, start = $E000, size = $1000; + TOP: file = "", define = yes, start = $F000, size = $1000; +} + +SEGMENTS { + ZEROPAGE: load = ZP, type = zp, define = yes; + STARTUP: load = RAM, type = ro, define = yes; + CODE: load = RAM, type = ro, define = yes; + RODATA: load = RAM, type = ro, define = yes; + ONCE: load = RAM, type = ro, define = yes; + DATA: load = RAM, type = rw, define = yes; + BSS: load = RAM, type = bss, define = yes; +} + diff --git a/samples/kim1/Makefile b/samples/kim1/Makefile index 74c415fdc..08bb2a780 100644 --- a/samples/kim1/Makefile +++ b/samples/kim1/Makefile @@ -31,9 +31,12 @@ else LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) endif -EXELIST_kim1 = \ - kimHello.bin \ - kimSieve.bin +EXELIST_kim1 = \ + kimHello.bin \ + kimSieve.bin \ + kimLife.bin \ + kimTest.bin \ + kimGFX.bin ifneq ($(EXELIST_$(SYS)),) samples: $(EXELIST_$(SYS)) @@ -50,13 +53,65 @@ else @echo > $(NULLDEV) endif +subs.o: subs.asm + $(AS) subs.asm -o subs.o + +ramfont.o: ramfont.asm + $(AS) ramfont.asm -o ramfont.o + +kimLife.bin: kimLife.c + $(CL) -t kim1 -C kim1-60k.cfg -Oi -o kimLife.bin kimLife.c + +kimTest.bin: kimTest.c + $(CL) -t kim1 -C kim1-60k.cfg -Oi -o kimTest.bin kimTest.c + +kimGFX.bin: kimGFX.c subs.o ramfont.o + $(CL) -t kim1 --listing kimGFX.lst -C kim1-mtuE000.cfg -o kimGFX.bin kimGFX.c subs.o ramfont.o -Ln kimgfx.lbl + kimSieve.bin: kimSieve.c $(CL) -t kim1 -C kim1-60k.cfg -O -o kimSieve.bin kimSieve.c kimHello.bin: kimHello.c $(CL) -t kim1 -O -o kimHello.bin kimHello.c +# To build an intel-format file for the CORSHAM SD card reader + +kimLife.hex: kimLife.bin + srec_cat kimLife.bin -binary -offset 0x2000 -o kimLife.hex -Intel -address-length=2 + +kimTest.hex: kimTest.bin + srec_cat kimTest.bin -binary -offset 0x2000 -o kimTest.hex -Intel -address-length=2 + +kimGFX.hex: kimGFX.bin ramfont.o + srec_cat kimGFX.bin -binary -offset 0x2000 -o kimGFX.hex -Intel -address-length=2 + +# To build a paper tape file for uploading to the KIM-1 via terminal + +kimLife.ptp: kimLife.bin + srec_cat kimLife.bin -binary -offset 0x2000 -o kimLife.ptp -MOS_Technologies + +kimGFX.ptp: kimGFX.bin + srec_cat kimGFX.bin -binary -offset 0x2000 -o kimGFX.ptp -MOS_Technologies + +kimTest.ptp: kimTest.bin + srec_cat kimTest.bin -binary -offset 0x2000 -o kimTest.ptp -MOS_Technologies + clean: @$(DEL) kimSieve.bin 2>$(NULLDEV) @$(DEL) kimHello.bin 2>$(NULLDEV) + @$(DEL) kimLife.bin 2>$(NULLDEV) + @$(DEL) kimLife.ptp 2>$(NULLDEV) + @$(DEL) kimLife.hex 2>$(NULLDEV) + @$(DEL) kimTest.bin 2>$(NULLDEV) + @$(DEL) kimTest.ptp 2>$(NULLDEV) + @$(DEL) kimTest.hex 2>$(NULLDEV) + @$(DEL) kimGFX.bin 2>$(NULLDEV) + @$(DEL) kimGFX.ptp 2>$(NULLDEV) + @$(DEL) kimGFX.hex 2>$(NULLDEV) + @$(DEL) kimgfx.lbl 2>$(NULLDEV) + @$(DEL) kimGFX.lst 2>$(NULLDEV) + @$(DEL) subs.o 2>$(NULLDEV) + @$(DEL) ramfont.o 2>$(NULLDEV) + + diff --git a/samples/kim1/font.rom b/samples/kim1/font.rom new file mode 100644 index 000000000..e69de29bb diff --git a/samples/kim1/kimGFX.c b/samples/kim1/kimGFX.c new file mode 100644 index 000000000..45daafa1e --- /dev/null +++ b/samples/kim1/kimGFX.c @@ -0,0 +1,290 @@ +// -------------------------------------------------------------------------- +// Simple Graphics Test for KIM-1 with MTU Visible Memory Board +// +// Assumes the MTU Visible Memory Board mapped at 0xA000 for 8K of video RAM +// +// davepl@davepl.com +// -------------------------------------------------------------------------- + +#include <stdio.h> // For printf +#include <stdlib.h> // For rand, srand +#include <string.h> // For memcpy +#include <ctype.h> + +typedef unsigned char byte; + +extern void ClearScreen(void); // In subs.asm +extern void ScrollScreen(void); +extern void DrawCircle(void); +extern void SetPixel(void); +extern void ClearPixel(void); +extern void DrawChar(void); +extern void Demo(void); +extern void __fastcall__ Delay(byte loops); +extern void __fastcall__ DrawLine(byte bSet); +extern byte __fastcall__ AscToPet(byte in); +extern byte __fastcall__ PetToAsc(byte in); +extern byte __fastcall__ ReverseBits(byte in); +extern void __fastcall__ CharOut(byte asci_char); +extern byte __fastcall__ getch(); +extern unsigned char font8x8_basic[256][8]; + +extern int x1cord; +extern int y1cord; +extern int x2cord; +extern int y2cord; +extern int cursorX; +extern int cursorY; + +// If in zeropage: +// +// #pragma zpsym("x1cord") +// #pragma zpsym("x2cord") +// #pragma zpsym("y1cord") +// #pragma zpsym("y2cord") + +// Screen memory is placed at A000-BFFF, 320x200 pixels, mapped right to left within each horizontal byte + +byte * screen = (byte *) 0xA000; + +// Cursor position + +#define SCREEN_WIDTH 320 +#define SCREEN_HEIGHT 200 +#define CHARWIDTH 8 +#define CHARHEIGHT 8 +#define BYTESPERROW (SCREEN_WIDTH / 8) +#define BYTESPERCHARROW (BYTESPERROW * 8) +#define CHARSPERROW (SCREEN_WIDTH / CHARWIDTH) +#define ROWSPERCOLUMN (SCREEN_HEIGHT / CHARHEIGHT) + +// SETPIXEL +// +// 0 <= x < 320 +// 0 <= y < 200 +// +// Draws a pixel on the screen in white or black at pixel pos x, y + +void SETPIXEL(int x, int y, byte b) +{ + x1cord = x; + y1cord = y; + + if (b) + SetPixel(); + else + ClearPixel(); +} + +// DRAWPIXEL +// +// 0 <= x < 320 +// 0 <= y < 200 +// +// Turns on a screen pixel at pixel pos x,y + +void DRAWPIXEL(int x, int y) +{ + x1cord = x; + y1cord = y; + SetPixel(); +} + +int c; + +void DrawText(char * psz) +{ + while (*psz) + { + while (cursorX >= CHARSPERROW) + { + cursorX -= CHARSPERROW; + cursorY += 1; + } + + // If we've gone off the bottom of the screen, we scroll the screen and back up to the last line again + + if (cursorY >= ROWSPERCOLUMN) + { + cursorY = ROWSPERCOLUMN - 1; + ScrollScreen(); + } + + // If we output a newline we advanced the cursor down one line and reset it to the left + + if (*psz == 0x0A) + { + cursorX = 0; + cursorY++; + psz++; + } + else + { + c = *psz; + + __asm__ ("ldx %v", cursorX); + __asm__ ("ldy %v", cursorY); + __asm__ ("lda %v", c); + DrawChar(); + cursorX++; + psz++; + } + } +} + +void DrawTextAt(int x, int y, char * psz) +{ + cursorX = x; + cursorY = y; + DrawText(psz); +} + +// Something like Bresenham's algorithm for drawing a line +/* +void DrawLine(int x0, int y0, int x1, int y1, byte val) +{ + int dx = abs(x1 - x0), sx = x0 < x1 ? 1 : -1; + int dy = abs(y1 - y0), sy = y0 < y1 ? 1 : -1; + int err = (dx > dy ? dx : -dy) / 2, e2; + + while (1) + { + SETPIXEL(x0, y0, val); + + if (x0 == x1 && y0 == y1) + break; + + e2 = err; + + if (e2 > -dx) + { + err -= dy; + x0 += sx; + } + if (e2 < dy) + { + err += dx; + y0 += sy; + } + } +} +*/ + +// DrawCircle +// +// Draw a circle without sin, cos, or floating point! + +void DrawCircleC(int x0, int y0, int radius, byte) +{ + x1cord = x0; + y1cord = y0; + y2cord = radius; + DrawCircle(); +} + +void DrawLineC(int x1, int y1, int x2, int y2, byte bSet) +{ + x1cord = x1; + y1cord = y1; + x2cord = x2; + y2cord = y2; + DrawLine(bSet); +} + +// MirrorFont +// +// RAM font is backwards left-right relative to the way memory is laid out on the KIM-1, so we swap all the +// bytes in place by reversing the order of the bits in every byte + +void MirrorFont() +{ + int c; + byte * pb = (byte *) font8x8_basic; + + for (c = 0; c < 128 * 8; c++) + pb[c] = ReverseBits(pb[c]); +} + +// DrawScreenMoire +// +// Draws a moire pattern on the screen without clearing it first + +void DrawMoire(int left, int top, int right, int bottom, byte pixel) +{ + int x, y; + + for (x = left; x < right; x += 6) + DrawLineC(x, top, right - x + left, bottom, pixel); + + for (y = top; y < bottom; y += 6) + DrawLineC(left, y, right, bottom - y + top, pixel); +} + +void DrawScreenMoire(int left, int top, int right, int bottom) +{ + int x, y; + + DrawLineC(left, top, right, top, 1); + DrawLineC(left, bottom, right, bottom, 1); + DrawLineC(left, top, left, bottom, 1); + DrawLineC(right, top, right, bottom, 1); + + left++; top++; right--; bottom--; + + for (x = left; x < right; x += 6) + DrawLineC(x, top, right - x + left, bottom, 1); + for (y = top; y < bottom; y += 6) + DrawLineC(left, y, right, bottom - y + top, 1); + for (x = left; x < right; x += 6) + DrawLineC(x, top, right - x + left, bottom, 0); + for (y = top; y < bottom; y += 6) + DrawLineC(left, y, right, bottom - y + top, 0); + +} + +int main (void) +{ + + int i; + int c = 0; + + Demo(); + + CharOut('R'); + CharOut('E'); + CharOut('A'); + CharOut('D'); + CharOut('Y'); + CharOut('.'); + CharOut('\n'); + + + while(1) + { + c = toupper(getch()); + if (c != EOF) + CharOut(c); + } + + // Clear the screen memory + while(1) + { + Demo(); + DrawScreenMoire(0,30, 319, 199); + Delay(10); + + Demo(); + for (i = 5; i < 80; i+=5) + { + DrawCircleC(SCREEN_WIDTH/2, SCREEN_HEIGHT/2 + 20, i, 1); + DrawCircleC(SCREEN_WIDTH/4, SCREEN_HEIGHT/2 + 20, i, 1); + DrawCircleC(SCREEN_WIDTH*3/4, SCREEN_HEIGHT/2 + 20, i, 1); + } + + Delay(10); + + } + + printf("Done, exiting...\r\n"); + return 0; +} diff --git a/samples/kim1/kimLife.c b/samples/kim1/kimLife.c new file mode 100644 index 000000000..fb1696b9e --- /dev/null +++ b/samples/kim1/kimLife.c @@ -0,0 +1,144 @@ +// -------------------------------------------------------------------------- +// Conway's Game of Life for KIM-1 +// +// Assumes the MTU Visible Memory Board mapped at 0x8000 for 8K of video RAM +// +// Dave Plummer on a rainy Thursday +// +// davepl@davepl.com +// -------------------------------------------------------------------------- + +#include <stdio.h> // For printf +#include <stdlib.h> // For rand, srand +#include <string.h> // For memcpy + +typedef unsigned char byte; + +// World size + +#define WIDTH 320 +#define HEIGHT 200 +#define NUMBITS 64000 +#define NUMBYTES 8000 +#define DENSITY 50 + +// Screen memory is placed at 8000, our world copy at A000, and they use the same layout so +// that we can memcpy from one to the other without translating + +byte * world = (byte *) 0x8000; +byte * new_world = (byte *) 0xA000; + +// BITARRAY +// +// Access individual bits in a block of memory + +// Access to the screen bitmap + +byte GETBIT(byte *p, int n) +{ + return (p[n >> 3] & (1 << (n & 7))) ? 1 : 0; +} + +void SETBIT(byte *p, int n) +{ + p[n >> 3] |= (1 << (n & 7)); +} + +void CLRBIT(byte *p, int n) +{ + p[n >> 3] &= ~(1 << (n & 7)); +} + +void SETPIXEL(byte * p, int x, int y, byte b) +{ + if (b) + SETBIT(p, y * WIDTH + x); + else + CLRBIT(p, y * WIDTH + x); +} + +byte GETPIXEL(byte *p, int x, int y) +{ + return GETBIT(p, y * WIDTH + x); +} + +// RandomFillWorld +// +// Populates the initial world with random cells + +void RandomFillWorld() +{ + int x, y; + + // I need a better way to see the RNG or it'll be the same game every time! + srand(0); + for (x = 0; x < WIDTH; x++) + { + for (y = 0; y < HEIGHT; y++) + { + byte b = ((rand() % 100) < DENSITY) ? 1 : 0; + SETPIXEL(world, x, y, b); + } + } +} + +// CountNeighbors +// +// Count the number of live cells around the given spot, excluding the actual spot specified + +int CountNeighbors(int x, int y) +{ + int i, j, nx, ny, count = 0; + + for (j = -1; j <= 1; j++) + { + for (i = -1; i <= 1; i++) + { + if (i != 0 || j != 0) + { + nx = (x + i + WIDTH) % WIDTH; + ny = (y + j + HEIGHT) % HEIGHT; + count += GETPIXEL(world, nx, ny) ? 1 : 0; + } + } + } + return count; +} + +// UpdateWorld +// +// Applies the rules of Conway's Game of Life to the cells + +void UpdateWorld() +{ + int x, y; + + for (y = 0; y < HEIGHT; y++) + { + for (x = 0; x < WIDTH; x++) + { + int neighbors = CountNeighbors(x, y); + if (GETPIXEL(world, x, y)) + SETPIXEL(new_world, x, y, (neighbors == 2 || neighbors == 3)); + else + SETPIXEL(new_world, x, y, (neighbors == 3)); + } + } +} + +int main (void) +{ + printf("\r\nStarting Conway's Game of Life: Randomizing World...\r\n"); + RandomFillWorld(); + printf("World Ready, Running!\r\n"); + + for (;;) + { + UpdateWorld(); + printf("["); + memcpy(world, new_world, NUMBYTES); + printf("]"); + } + + return 0; +} diff --git a/samples/kim1/kimTest.c b/samples/kim1/kimTest.c new file mode 100644 index 000000000..273aeb584 --- /dev/null +++ b/samples/kim1/kimTest.c @@ -0,0 +1,262 @@ +// -------------------------------------------------------------------------- +// Diagnostics Test for KIM-1 +// +// Dave Plummer +// davepl@davepl.com +// +// Memory test examples by Michael Barr +// +// -------------------------------------------------------------------------- + +#include <stdio.h> // For printf +#include <stdlib.h> // For rand, srand +#include <string.h> // For memcpy + +typedef unsigned char byte; + +// RepeatChar +// +// Outputs a given character N times + +void RepeatChar(char c, size_t count) +{ + while (count--) + putc(c, stdout); +} + +/********************************************************************** + * + * Function: memTestDataBus() + * + * Description: Test the data bus wiring in a memory region by + * performing a walking 1's test at a fixed address + * within that region. The address (and hence the + * memory region) is selected by the caller. + * + * Returns: 0 if the test succeeds. + * A non-zero result is the first pattern that failed. + * + **********************************************************************/ + +byte memTestDataBus(volatile byte * address) +{ + byte pattern; + + // Perform a walking 1's test at the given address. + + for (pattern = 1; pattern != 0; pattern <<= 1) + { + // Write the test pattern. + *address = pattern; + + // Read it back and check it + if (*address != pattern) + { + printf("\r\nmemTestDataBus: FAILED at %04x with pattern %02x\r\n", address, pattern); + return (pattern); + } + } + + return (0); +} + +/********************************************************************** + * + * Function: memTestAddressBus() + * + * Description: Test the address bus wiring in a memory region by + * performing a walking 1's test on the relevant bits + * of the address and checking for aliasing. This test + * will find single-bit address failures such as stuck + * -high, stuck-low, and shorted pins. The base address + * and size of the region are selected by the caller. + * + * Notes: For best results, the selected base address should + * have enough LSB 0's to guarantee single address bit + * changes. For example, to test a 64-Kbyte region, + * select a base address on a 64-Kbyte boundary. Also, + * select the region size as a power-of-two--if at all + * possible. + * + * Returns: NULL if the test succeeds. + * A non-zero result is the first address at which an + * aliasing problem was uncovered. By examining the + * contents of memory, it may be possible to gather + * additional information about the problem. + * + **********************************************************************/ + +byte * memTestAddressBus(volatile byte * baseAddress, unsigned long nBytes) +{ + unsigned long addressMask = (nBytes/sizeof(byte) - 1); + unsigned long offset; + unsigned long testOffset; + + byte pattern = (byte) 0xAAAAAAAA; + byte antipattern = (byte) 0x55555555; + + + //Write the default pattern at each of the power-of-two offsets. + + for (offset = 1; (offset & addressMask) != 0; offset <<= 1) + { + baseAddress[offset] = pattern; + } + + // Check for address bits stuck high. + + testOffset = 0; + baseAddress[testOffset] = antipattern; + + for (offset = 1; (offset & addressMask) != 0; offset <<= 1) + { + if (baseAddress[offset] != pattern) + { + printf("\r\nmemTestAddressBus: FAILED at %04x with pattern %02x\r\n", baseAddress+offset, pattern); + return ((byte *) &baseAddress[offset]); + } + if (offset % 1024 == 0) + printf("."); + } + + baseAddress[testOffset] = pattern; + + + // Check for address bits stuck low or shorted. + + for (testOffset = 1; (testOffset & addressMask) != 0; testOffset <<= 1) + { + baseAddress[testOffset] = antipattern; + + if (baseAddress[0] != pattern) + { + return ((byte *) &baseAddress[testOffset]); + } + + for (offset = 1; (offset & addressMask) != 0; offset <<= 1) + { + if ((baseAddress[offset] != pattern) && (offset != testOffset)) + { + printf("\r\nmemTestAddressBus: FAILED at %04x with pattern %02x\r\n", baseAddress+offset, pattern); + return ((byte *) &baseAddress[testOffset]); + } + } + baseAddress[testOffset] = pattern; + } + return (NULL); +} + +/********************************************************************** + * + * Function: memTestDevice() + * + * Description: Test the integrity of a physical memory device by + * performing an increment/decrement test over the + * entire region. In the process every storage bit + * in the device is tested as a zero and a one. The + * base address and the size of the region are + * selected by the caller. + * + * Returns: NULL if the test succeeds. + * + * A non-zero result is the first address at which an + * incorrect value was read back. By examining the + * contents of memory, it may be possible to gather + * additional information about the problem. + * + **********************************************************************/ + +byte * memTestDevice(volatile byte * baseAddress, unsigned long nBytes) +{ + unsigned long offset; + unsigned long nWords = nBytes / sizeof(byte); + + byte pattern; + byte antipattern; + + + // Fill memory with a known pattern. + + for (pattern = 1, offset = 0; offset < nWords; pattern++, offset++) + baseAddress[offset] = pattern; + + // Check each location and invert it for the second pass. + + for (pattern = 1, offset = 0; offset < nWords; pattern++, offset++) + { + if (offset % 1024 == 0) + printf("%04X ", (int) &baseAddress[offset]); + + if (baseAddress[offset] != pattern) + { + printf("\r\nmemTestDevice: FAILED at %04x with pattern %02x\r\n", (int) &baseAddress[offset], pattern); + return ((byte *) &baseAddress[offset]); + } + + antipattern = ~pattern; + baseAddress[offset] = antipattern; + + } + + // Check each location for the inverted pattern and zero it. + + for (pattern = 1, offset = 0; offset < nWords; pattern++, offset++) + { + if (offset % 1024 == 0) + printf("%04X ", (int) &baseAddress[offset]); + + antipattern = ~pattern; + if (baseAddress[offset] != antipattern) + { + printf("\r\nmemTestDevice: FAILED at %04x with antipattern %02x\r\n", (int) &baseAddress[offset], pattern); + return ((byte *) &baseAddress[offset]); + } + } + + return (NULL); +} + +// TestMemory +// +// Run all three memory tests + +byte TestMemory(byte * startAddress, unsigned long size) +{ + if ((memTestDataBus(startAddress) != 0) || + (memTestAddressBus(startAddress, size) != NULL) || + (memTestDevice(startAddress, size) != NULL)) + { + return (-1); + } + else + { + return (0); + } +} + +int main (void) +{ + printf("\r\nTesting KIM-1...\r\n"); + RepeatChar('-', 39); + + printf("\r\nTesting RIOT RAM: 1780-17BF\r\n"); + if (TestMemory((byte *)0x1780, 0x17BF - 0x1780)) + return 0; + + printf("\r\nTesting RIOT RAM: 17C0-17E6\r\n"); + if (TestMemory((byte *)0x17C0, 0x17E6 - 0x17C0)) + return 0; + + printf("\r\nTesting Memory: 0400-13FF\r\n"); + if (TestMemory((byte *)0x0400, 0x13FF - 0x0400)) + return 0; + + printf("\r\nTesting Memory: 4000-DFFF\r\n"); + if (TestMemory((byte *)0x4000, 0xDFFF - 0x4000)) + return 0; + + printf("\r\nPASS!\r\n"); + return 1; +} + + diff --git a/samples/kim1/ramfont.asm b/samples/kim1/ramfont.asm new file mode 100644 index 000000000..ac0b2c9cd --- /dev/null +++ b/samples/kim1/ramfont.asm @@ -0,0 +1,272 @@ +;----------------------------------------------------------------------------------- +; KIMGFX: Simple pixel graphics for the MOS/Commodore KIM-1 +;----------------------------------------------------------------------------------- +; (c) Plummer's Software Ltd, 04/25/2023 Created +; David Plummer +;----------------------------------------------------------------------------------- +; +; File: ramfont.s +; Magnetic OCR (check number style) Font data +; +;----------------------------------------------------------------------------------- + +.segment "CODE" +.export _font8x8_basic + +_font8x8_basic: + .byte $1c, $22, $4a, $56, $4c, $20, $1e, $00 ; PETSCII code 0 + .byte $3c, $24, $24, $7e, $62, $62, $62, $00 ; PETSCII code 1 + .byte $78, $44, $44, $7c, $62, $62, $7e, $00 ; PETSCII code 2 + .byte $7e, $42, $40, $60, $60, $62, $7e, $00 ; PETSCII code 3 + .byte $7c, $46, $42, $62, $62, $66, $7c, $00 ; PETSCII code 4 + .byte $7e, $40, $40, $7c, $60, $60, $7e, $00 ; PETSCII code 5 + .byte $7e, $40, $40, $7e, $60, $60, $60, $00 ; PETSCII code 6 + .byte $7e, $42, $40, $6e, $62, $62, $7e, $00 ; PETSCII code 7 + .byte $42, $42, $42, $7e, $62, $62, $62, $00 ; PETSCII code 8 + .byte $08, $08, $08, $0c, $0c, $0c, $0c, $00 ; PETSCII code 9 + .byte $04, $04, $04, $06, $06, $46, $7e, $00 ; PETSCII code 10 + .byte $42, $44, $48, $7c, $62, $62, $62, $00 ; PETSCII code 11 + .byte $40, $40, $40, $60, $60, $60, $7e, $00 ; PETSCII code 12 + .byte $7e, $4a, $4a, $6a, $6a, $6a, $6a, $00 ; PETSCII code 13 + .byte $7e, $42, $42, $62, $62, $62, $62, $00 ; PETSCII code 14 + .byte $7e, $46, $42, $42, $42, $42, $7e, $00 ; PETSCII code 15 + .byte $7e, $42, $42, $7e, $60, $60, $60, $00 ; PETSCII code 16 + .byte $7e, $42, $42, $42, $4a, $4e, $7e, $00 ; PETSCII code 17 + .byte $7c, $44, $44, $7c, $62, $62, $62, $00 ; PETSCII code 18 + .byte $7e, $42, $40, $7e, $06, $46, $7e, $00 ; PETSCII code 19 + .byte $3e, $10, $10, $18, $18, $18, $18, $00 ; PETSCII code 20 + .byte $42, $42, $42, $62, $62, $62, $7e, $00 ; PETSCII code 21 + .byte $62, $62, $62, $66, $24, $24, $3c, $00 ; PETSCII code 22 + .byte $4a, $4a, $4a, $6a, $6a, $6a, $7e, $00 ; PETSCII code 23 + .byte $42, $42, $66, $18, $66, $62, $62, $00 ; PETSCII code 24 + .byte $22, $22, $22, $3e, $18, $18, $18, $00 ; PETSCII code 25 + .byte $7e, $42, $06, $18, $60, $62, $7e, $00 ; PETSCII code 26 + .byte $3c, $20, $20, $20, $20, $20, $3c, $00 ; PETSCII code 27 + .byte $00, $40, $20, $10, $08, $04, $02, $00 ; PETSCII code 28 + .byte $3c, $04, $04, $04, $04, $04, $3c, $00 ; PETSCII code 29 + .byte $00, $08, $1c, $2a, $08, $08, $14, $14 ; PETSCII code 30 + .byte $00, $00, $10, $20, $7f, $20, $10, $00 ; PETSCII code 31 + .byte $00, $00, $00, $00, $00, $00, $00, $00 ; PETSCII code 32 + .byte $08, $08, $08, $0c, $0c, $00, $0c, $00 ; PETSCII code 33 + .byte $6c, $24, $6c, $00, $00, $00, $00, $00 ; PETSCII code 34 + .byte $24, $24, $7e, $24, $7e, $24, $24, $00 ; PETSCII code 35 + .byte $08, $3e, $20, $3e, $06, $3e, $08, $00 ; PETSCII code 36 + .byte $00, $62, $64, $08, $10, $26, $46, $00 ; PETSCII code 37 + .byte $3c, $20, $24, $7e, $64, $64, $7c, $00 ; PETSCII code 38 + .byte $1c, $18, $10, $00, $00, $00, $00, $00 ; PETSCII code 39 + .byte $04, $08, $10, $10, $10, $08, $04, $00 ; PETSCII code 40 + .byte $20, $10, $08, $08, $08, $10, $20, $00 ; PETSCII code 41 + .byte $08, $2a, $1c, $3e, $1c, $2a, $08, $00 ; PETSCII code 42 + .byte $00, $08, $08, $3e, $08, $08, $00, $00 ; PETSCII code 43 + .byte $00, $00, $00, $00, $00, $18, $18, $08 ; PETSCII code 44 + .byte $00, $00, $00, $7e, $00, $00, $00, $00 ; PETSCII code 45 + .byte $00, $00, $00, $00, $00, $18, $18, $00 ; PETSCII code 46 + .byte $00, $02, $04, $08, $10, $20, $40, $00 ; PETSCII code 47 + .byte $7e, $62, $52, $4a, $46, $46, $7e, $00 ; PETSCII code 48 + .byte $18, $08, $08, $18, $18, $1a, $3e, $00 ; PETSCII code 49 + .byte $7e, $42, $02, $7e, $60, $60, $7e, $00 ; PETSCII code 50 + .byte $7c, $44, $04, $1e, $06, $46, $7e, $00 ; PETSCII code 51 + .byte $44, $44, $44, $44, $7e, $0c, $0c, $00 ; PETSCII code 52 + .byte $7e, $40, $7e, $06, $06, $46, $7e, $00 ; PETSCII code 53 + .byte $7e, $42, $40, $7e, $46, $46, $7e, $00 ; PETSCII code 54 + .byte $7e, $02, $02, $06, $06, $06, $06, $00 ; PETSCII code 55 + .byte $3c, $24, $24, $7e, $46, $46, $7e, $00 ; PETSCII code 56 + .byte $7e, $42, $42, $7e, $06, $06, $06, $00 ; PETSCII code 57 + .byte $00, $00, $18, $00, $00, $18, $00, $00 ; PETSCII code 58 + .byte $00, $00, $18, $00, $00, $18, $18, $08 ; PETSCII code 59 + .byte $0e, $18, $30, $60, $30, $18, $0e, $00 ; PETSCII code 60 + .byte $00, $00, $7e, $00, $7e, $00, $00, $00 ; PETSCII code 61 + .byte $70, $18, $0c, $06, $0c, $18, $70, $00 ; PETSCII code 62 + .byte $7e, $02, $02, $7e, $60, $00, $60, $00 ; PETSCII code 63 + .byte $00, $00, $00, $00, $ff, $00, $00, $00 ; PETSCII code 64 + .byte $08, $1c, $3e, $7f, $7f, $1c, $3e, $00 ; PETSCII code 65 + .byte $10, $10, $10, $10, $10, $10, $10, $10 ; PETSCII code 66 + .byte $00, $00, $00, $ff, $00, $00, $00, $00 ; PETSCII code 67 + .byte $00, $00, $ff, $00, $00, $00, $00, $00 ; PETSCII code 68 + .byte $00, $ff, $00, $00, $00, $00, $00, $00 ; PETSCII code 69 + .byte $00, $00, $00, $00, $00, $ff, $00, $00 ; PETSCII code 70 + .byte $20, $20, $20, $20, $20, $20, $20, $20 ; PETSCII code 71 + .byte $04, $04, $04, $04, $04, $04, $04, $04 ; PETSCII code 72 + .byte $00, $00, $00, $00, $e0, $10, $08, $08 ; PETSCII code 73 + .byte $08, $08, $08, $04, $03, $00, $00, $00 ; PETSCII code 74 + .byte $08, $08, $08, $10, $e0, $00, $00, $00 ; PETSCII code 75 + .byte $80, $80, $80, $80, $80, $80, $80, $ff ; PETSCII code 76 + .byte $80, $40, $20, $10, $08, $04, $02, $01 ; PETSCII code 77 + .byte $01, $02, $04, $08, $10, $20, $40, $80 ; PETSCII code 78 + .byte $ff, $80, $80, $80, $80, $80, $80, $80 ; PETSCII code 79 + .byte $ff, $01, $01, $01, $01, $01, $01, $01 ; PETSCII code 80 + .byte $00, $3c, $7e, $7e, $7e, $7e, $3c, $00 ; PETSCII code 81 + .byte $00, $00, $00, $00, $00, $00, $ff, $00 ; PETSCII code 82 + .byte $36, $7f, $7f, $7f, $3e, $1c, $08, $00 ; PETSCII code 83 + .byte $40, $40, $40, $40, $40, $40, $40, $40 ; PETSCII code 84 + .byte $00, $00, $00, $00, $03, $04, $08, $08 ; PETSCII code 85 + .byte $81, $42, $24, $18, $18, $24, $42, $81 ; PETSCII code 86 + .byte $00, $3c, $42, $42, $42, $42, $3c, $00 ; PETSCII code 87 + .byte $08, $1c, $2a, $77, $2a, $08, $08, $00 ; PETSCII code 88 + .byte $02, $02, $02, $02, $02, $02, $02, $02 ; PETSCII code 89 + .byte $08, $1c, $3e, $7f, $3e, $1c, $08, $00 ; PETSCII code 90 + .byte $08, $08, $08, $08, $ff, $08, $08, $08 ; PETSCII code 91 + .byte $a0, $50, $a0, $50, $a0, $50, $a0, $50 ; PETSCII code 92 + .byte $08, $08, $08, $08, $08, $08, $08, $08 ; PETSCII code 93 + .byte $00, $00, $01, $3e, $54, $14, $14, $00 ; PETSCII code 94 + .byte $ff, $7f, $3f, $1f, $0f, $07, $03, $01 ; PETSCII code 95 + .byte $00, $00, $00, $00, $00, $00, $00, $00 ; PETSCII code 96 + .byte $f0, $f0, $f0, $f0, $f0, $f0, $f0, $f0 ; PETSCII code 97 + .byte $00, $00, $00, $00, $ff, $ff, $ff, $ff ; PETSCII code 98 + .byte $ff, $00, $00, $00, $00, $00, $00, $00 ; PETSCII code 99 + .byte $00, $00, $00, $00, $00, $00, $00, $ff ; PETSCII code 100 + .byte $80, $80, $80, $80, $80, $80, $80, $80 ; PETSCII code 101 + .byte $aa, $55, $aa, $55, $aa, $55, $aa, $55 ; PETSCII code 102 + .byte $01, $01, $01, $01, $01, $01, $01, $01 ; PETSCII code 103 + .byte $00, $00, $00, $00, $aa, $55, $aa, $55 ; PETSCII code 104 + .byte $ff, $fe, $fc, $f8, $f0, $e0, $c0, $80 ; PETSCII code 105 + .byte $03, $03, $03, $03, $03, $03, $03, $03 ; PETSCII code 106 + .byte $08, $08, $08, $08, $0f, $08, $08, $08 ; PETSCII code 107 + .byte $00, $00, $00, $00, $0f, $0f, $0f, $0f ; PETSCII code 108 + .byte $08, $08, $08, $08, $0f, $00, $00, $00 ; PETSCII code 109 + .byte $00, $00, $00, $00, $f8, $08, $08, $08 ; PETSCII code 110 + .byte $00, $00, $00, $00, $00, $00, $ff, $ff ; PETSCII code 111 + .byte $00, $00, $00, $00, $0f, $08, $08, $08 ; PETSCII code 112 + .byte $08, $08, $08, $08, $ff, $00, $00, $00 ; PETSCII code 113 + .byte $00, $00, $00, $00, $ff, $08, $08, $08 ; PETSCII code 114 + .byte $08, $08, $08, $08, $f8, $08, $08, $08 ; PETSCII code 115 + .byte $c0, $c0, $c0, $c0, $c0, $c0, $c0, $c0 ; PETSCII code 116 + .byte $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0 ; PETSCII code 117 + .byte $07, $07, $07, $07, $07, $07, $07, $07 ; PETSCII code 118 + .byte $ff, $ff, $00, $00, $00, $00, $00, $00 ; PETSCII code 119 + .byte $ff, $ff, $ff, $00, $00, $00, $00, $00 ; PETSCII code 120 + .byte $00, $00, $00, $00, $00, $ff, $ff, $ff ; PETSCII code 121 + .byte $01, $01, $01, $01, $01, $01, $01, $ff ; PETSCII code 122 + .byte $00, $00, $00, $00, $f0, $f0, $f0, $f0 ; PETSCII code 123 + .byte $0f, $0f, $0f, $0f, $00, $00, $00, $00 ; PETSCII code 124 + .byte $08, $08, $08, $08, $f8, $00, $00, $00 ; PETSCII code 125 + .byte $f0, $f0, $f0, $f0, $00, $00, $00, $00 ; PETSCII code 126 + .byte $f0, $f0, $f0, $f0, $0f, $0f, $0f, $0f ; PETSCII code 127 + .byte $1c, $22, $4a, $56, $4c, $20, $1e, $00 ; PETSCII code 128 + .byte $00, $00, $3c, $04, $7c, $64, $7c, $00 ; PETSCII code 129 + .byte $40, $40, $7e, $42, $62, $62, $7e, $00 ; PETSCII code 130 + .byte $00, $00, $7e, $42, $60, $62, $7e, $00 ; PETSCII code 131 + .byte $02, $02, $7e, $42, $62, $62, $7e, $00 ; PETSCII code 132 + .byte $00, $00, $7e, $42, $7e, $60, $7e, $00 ; PETSCII code 133 + .byte $1e, $12, $10, $7c, $18, $18, $18, $00 ; PETSCII code 134 + .byte $00, $00, $7e, $42, $62, $7e, $02, $7e ; PETSCII code 135 + .byte $40, $40, $7e, $42, $62, $62, $62, $00 ; PETSCII code 136 + .byte $18, $00, $10, $10, $18, $18, $18, $00 ; PETSCII code 137 + .byte $0c, $00, $08, $0c, $0c, $0c, $44, $7c ; PETSCII code 138 + .byte $40, $40, $44, $48, $78, $64, $64, $00 ; PETSCII code 139 + .byte $10, $10, $10, $10, $18, $18, $18, $00 ; PETSCII code 140 + .byte $00, $00, $7f, $49, $6d, $6d, $6d, $00 ; PETSCII code 141 + .byte $00, $00, $7e, $42, $62, $62, $62, $00 ; PETSCII code 142 + .byte $00, $00, $7e, $42, $62, $62, $7e, $00 ; PETSCII code 143 + .byte $00, $00, $7e, $42, $62, $7e, $40, $40 ; PETSCII code 144 + .byte $00, $00, $7e, $42, $46, $7e, $02, $02 ; PETSCII code 145 + .byte $00, $00, $7e, $40, $60, $60, $60, $00 ; PETSCII code 146 + .byte $00, $00, $7e, $40, $7e, $06, $7e, $00 ; PETSCII code 147 + .byte $10, $10, $7c, $10, $18, $18, $18, $00 ; PETSCII code 148 + .byte $00, $00, $42, $42, $62, $62, $7e, $00 ; PETSCII code 149 + .byte $00, $00, $62, $62, $66, $24, $3c, $00 ; PETSCII code 150 + .byte $00, $00, $49, $49, $6d, $6d, $7f, $00 ; PETSCII code 151 + .byte $00, $00, $42, $42, $3c, $62, $62, $00 ; PETSCII code 152 + .byte $00, $00, $62, $62, $42, $7e, $02, $7e ; PETSCII code 153 + .byte $00, $00, $7e, $06, $18, $60, $7e, $00 ; PETSCII code 154 + .byte $3c, $20, $20, $20, $20, $20, $3c, $00 ; PETSCII code 155 + .byte $00, $40, $20, $10, $08, $04, $02, $00 ; PETSCII code 156 + .byte $3c, $04, $04, $04, $04, $04, $3c, $00 ; PETSCII code 157 + .byte $00, $08, $1c, $2a, $08, $08, $14, $14 ; PETSCII code 158 + .byte $00, $00, $10, $20, $7f, $20, $10, $00 ; PETSCII code 159 + .byte $00, $00, $00, $00, $00, $00, $00, $00 ; PETSCII code 160 + .byte $08, $08, $08, $0c, $0c, $00, $0c, $00 ; PETSCII code 161 + .byte $6c, $24, $6c, $00, $00, $00, $00, $00 ; PETSCII code 162 + .byte $24, $24, $7e, $24, $7e, $24, $24, $00 ; PETSCII code 163 + .byte $08, $3e, $20, $3e, $06, $3e, $08, $00 ; PETSCII code 164 + .byte $00, $62, $64, $08, $10, $26, $46, $00 ; PETSCII code 165 + .byte $3c, $20, $24, $7e, $64, $64, $7c, $00 ; PETSCII code 166 + .byte $1c, $18, $10, $00, $00, $00, $00, $00 ; PETSCII code 167 + .byte $04, $08, $10, $10, $10, $08, $04, $00 ; PETSCII code 168 + .byte $20, $10, $08, $08, $08, $10, $20, $00 ; PETSCII code 169 + .byte $08, $2a, $1c, $3e, $1c, $2a, $08, $00 ; PETSCII code 170 + .byte $00, $08, $08, $3e, $08, $08, $00, $00 ; PETSCII code 171 + .byte $00, $00, $00, $00, $00, $18, $18, $08 ; PETSCII code 172 + .byte $00, $00, $00, $7e, $00, $00, $00, $00 ; PETSCII code 173 + .byte $00, $00, $00, $00, $00, $18, $18, $00 ; PETSCII code 174 + .byte $00, $02, $04, $08, $10, $20, $40, $00 ; PETSCII code 175 + .byte $7e, $62, $52, $4a, $46, $46, $7e, $00 ; PETSCII code 176 + .byte $38, $08, $08, $18, $18, $1a, $3e, $00 ; PETSCII code 177 + .byte $7e, $42, $02, $7e, $60, $60, $7e, $00 ; PETSCII code 178 + .byte $7c, $44, $04, $1e, $06, $46, $7e, $00 ; PETSCII code 179 + .byte $44, $44, $44, $44, $7e, $0c, $0c, $00 ; PETSCII code 180 + .byte $7e, $40, $7e, $06, $06, $46, $7e, $00 ; PETSCII code 181 + .byte $7e, $42, $40, $7e, $46, $46, $7e, $00 ; PETSCII code 182 + .byte $7e, $02, $02, $06, $06, $06, $06, $00 ; PETSCII code 183 + .byte $3c, $24, $24, $7e, $46, $46, $7e, $00 ; PETSCII code 184 + .byte $7e, $42, $42, $7e, $06, $06, $06, $00 ; PETSCII code 185 + .byte $00, $00, $18, $00, $00, $18, $00, $00 ; PETSCII code 186 + .byte $00, $00, $18, $00, $00, $18, $18, $08 ; PETSCII code 187 + .byte $0e, $18, $30, $60, $30, $18, $0e, $00 ; PETSCII code 188 + .byte $00, $00, $7e, $00, $7e, $00, $00, $00 ; PETSCII code 189 + .byte $70, $18, $0c, $06, $0c, $18, $70, $00 ; PETSCII code 190 + .byte $7e, $02, $02, $7e, $60, $00, $60, $00 ; PETSCII code 191 + .byte $00, $00, $00, $00, $ff, $00, $00, $00 ; PETSCII code 192 + .byte $3c, $24, $24, $7e, $62, $62, $62, $00 ; PETSCII code 193 + .byte $78, $44, $44, $7c, $62, $62, $7e, $00 ; PETSCII code 194 + .byte $7e, $42, $40, $60, $60, $62, $7e, $00 ; PETSCII code 195 + .byte $7c, $46, $42, $62, $62, $66, $7c, $00 ; PETSCII code 196 + .byte $7e, $40, $40, $78, $60, $60, $7e, $00 ; PETSCII code 197 + .byte $7e, $40, $40, $7e, $60, $60, $60, $00 ; PETSCII code 198 + .byte $7e, $42, $40, $6e, $62, $62, $7e, $00 ; PETSCII code 199 + .byte $42, $42, $42, $7e, $62, $62, $62, $00 ; PETSCII code 200 + .byte $08, $08, $08, $0c, $0c, $0c, $0c, $00 ; PETSCII code 201 + .byte $04, $04, $04, $06, $06, $46, $7e, $00 ; PETSCII code 202 + .byte $42, $44, $48, $7c, $62, $62, $62, $00 ; PETSCII code 203 + .byte $40, $40, $40, $60, $60, $60, $7e, $00 ; PETSCII code 204 + .byte $7e, $4a, $4a, $6a, $6a, $6a, $6a, $00 ; PETSCII code 205 + .byte $7e, $42, $42, $62, $62, $62, $62, $00 ; PETSCII code 206 + .byte $7e, $46, $42, $42, $42, $42, $7e, $00 ; PETSCII code 207 + .byte $7e, $42, $42, $7e, $60, $60, $60, $00 ; PETSCII code 208 + .byte $7e, $42, $42, $42, $4a, $4e, $7e, $00 ; PETSCII code 209 + .byte $7c, $44, $44, $7c, $62, $62, $62, $00 ; PETSCII code 210 + .byte $7e, $42, $40, $7e, $06, $46, $7e, $00 ; PETSCII code 211 + .byte $3e, $10, $10, $18, $18, $18, $18, $00 ; PETSCII code 212 + .byte $42, $42, $42, $62, $62, $62, $7e, $00 ; PETSCII code 213 + .byte $62, $62, $62, $66, $24, $24, $3c, $00 ; PETSCII code 214 + .byte $4a, $4a, $4a, $6a, $6a, $6a, $7e, $00 ; PETSCII code 215 + .byte $42, $42, $66, $3c, $66, $62, $62, $00 ; PETSCII code 216 + .byte $22, $22, $22, $3e, $18, $18, $18, $00 ; PETSCII code 217 + .byte $7e, $42, $06, $18, $60, $62, $7e, $00 ; PETSCII code 218 + .byte $08, $08, $08, $08, $ff, $08, $08, $08 ; PETSCII code 219 + .byte $a0, $50, $a0, $50, $a0, $50, $a0, $50 ; PETSCII code 220 + .byte $08, $08, $08, $08, $08, $08, $08, $08 ; PETSCII code 221 + .byte $cc, $cc, $33, $33, $cc, $cc, $33, $33 ; PETSCII code 222 + .byte $cc, $66, $33, $99, $cc, $66, $33, $99 ; PETSCII code 223 + .byte $00, $00, $00, $00, $00, $00, $00, $00 ; PETSCII code 224 + .byte $f0, $f0, $f0, $f0, $f0, $f0, $f0, $f0 ; PETSCII code 225 + .byte $00, $00, $00, $00, $ff, $ff, $ff, $ff ; PETSCII code 226 + .byte $ff, $00, $00, $00, $00, $00, $00, $00 ; PETSCII code 227 + .byte $00, $00, $00, $00, $00, $00, $00, $ff ; PETSCII code 228 + .byte $80, $80, $80, $80, $80, $80, $80, $80 ; PETSCII code 229 + .byte $aa, $55, $aa, $55, $aa, $55, $aa, $55 ; PETSCII code 230 + .byte $01, $01, $01, $01, $01, $01, $01, $01 ; PETSCII code 231 + .byte $00, $00, $00, $00, $aa, $55, $aa, $55 ; PETSCII code 232 + .byte $99, $33, $66, $cc, $99, $33, $66, $cc ; PETSCII code 233 + .byte $03, $03, $03, $03, $03, $03, $03, $03 ; PETSCII code 234 + .byte $08, $08, $08, $08, $0f, $08, $08, $08 ; PETSCII code 235 + .byte $00, $00, $00, $00, $0f, $0f, $0f, $0f ; PETSCII code 236 + .byte $08, $08, $08, $08, $0f, $00, $00, $00 ; PETSCII code 237 + .byte $00, $00, $00, $00, $f8, $08, $08, $08 ; PETSCII code 238 + .byte $00, $00, $00, $00, $00, $00, $ff, $ff ; PETSCII code 239 + .byte $00, $00, $00, $00, $0f, $08, $08, $08 ; PETSCII code 240 + .byte $08, $08, $08, $08, $ff, $00, $00, $00 ; PETSCII code 241 + .byte $00, $00, $00, $00, $ff, $08, $08, $08 ; PETSCII code 242 + .byte $08, $08, $08, $08, $f8, $08, $08, $08 ; PETSCII code 243 + .byte $c0, $c0, $c0, $c0, $c0, $c0, $c0, $c0 ; PETSCII code 244 + .byte $e0, $e0, $e0, $e0, $e0, $e0, $e0, $e0 ; PETSCII code 245 + .byte $07, $07, $07, $07, $07, $07, $07, $07 ; PETSCII code 246 + .byte $ff, $ff, $00, $00, $00, $00, $00, $00 ; PETSCII code 247 + .byte $ff, $ff, $ff, $00, $00, $00, $00, $00 ; PETSCII code 248 + .byte $00, $00, $00, $00, $00, $ff, $ff, $ff ; PETSCII code 249 + .byte $01, $02, $44, $48, $50, $60, $40, $00 ; PETSCII code 250 + .byte $00, $00, $00, $00, $f0, $f0, $f0, $f0 ; PETSCII code 251 + .byte $0f, $0f, $0f, $0f, $00, $00, $00, $00 ; PETSCII code 252 + .byte $08, $08, $08, $08, $f8, $00, $00, $00 ; PETSCII code 253 + .byte $f0, $f0, $f0, $f0, $00, $00, $00, $00 ; PETSCII code 254 + .byte $f0, $f0, $f0, $f0, $0f, $0f, $0f, $0f ; PETSCII code 255 diff --git a/samples/kim1/subs.asm b/samples/kim1/subs.asm new file mode 100644 index 000000000..5b525749e --- /dev/null +++ b/samples/kim1/subs.asm @@ -0,0 +1,1140 @@ +;----------------------------------------------------------------------------------- +; KIMGFX: Simple pixel graphics for the MOS/Commodore KIM-1 +;----------------------------------------------------------------------------------- +; (c) Plummer's Software Ltd, 04/25/2023 Created +; David Plummer +;----------------------------------------------------------------------------------- +; +; File: subs.asm Assembly language subroutines for KIMGFX +; +;----------------------------------------------------------------------------------- + + +.SETCPU "6502" + +.export _ClearScreen +.export _ScrollScreen +.export _SetPixel +.export _ClearPixel +.export _DrawCircle +.export _DrawLine +.export _AscToPet +.export _ReverseBits +.export _DrawChar +.export _CharOut +.export _Demo +.export _Delay +.export _getch + + +.import _font8x8_basic + +; This is the assumed location of the MTU visible memory board's 8K of memory. You can adjust this +; constant to refelct other locations as needed. + +SCREEN = $A000 + +; Note that even though these constants are defined here and respected, there are still going to be +; logic assumptions in GetPixelAddress that assume a 320x200 screen. If you change these, you'll +; need to adjust GetPixelAddress to match. + +SCREEN_WIDTH = 320 +SCREEN_HEIGHT = 200 +SCREEN_BYTES = SCREEN_WIDTH * SCREEN_HEIGHT / 8 +CHARWIDTH = 8 +CHARHEIGHT = 8 +BYTESPERROW = (SCREEN_WIDTH / 8) +BYTESPERCHARROW = (BYTESPERROW * 8) +CHARSPERROW = (SCREEN_WIDTH / CHARWIDTH) +ROWSPERCOLUMN = (SCREEN_HEIGHT / CHARHEIGHT) +LASTROW = SCREEN + SCREEN_BYTES - BYTESPERCHARROW + +.segment "ZEROPAGE" + +btpt: .res 1 + +dest: +dest_lo: .res 1 +dest_hi: .res 1 + +src: +src_lo: .res 1 +src_hi: .res 1 + +adp1: +adp1_lo: .res 1 +adp1_hi: .res 1 + +adp2: +adp2_lo: .res 1 +adp2_hi: .res 1 + +scroll_src: +scroll_src_lo: .res 1 +scroll_src_hi: .res 1 + +scroll_dest: +scroll_dest_lo: .res 1 +scroll_dest_hi: .res 1 + + +.segment "DATA" + +; Arguments for graphics functions + +_x1cord: .res 2 +_x2cord: .res 2 +_y1cord: .res 2 +_y2cord: .res 2 +_cursorX: .res 1 +_cursorY: .res 1 + +; Linedraw + +dx: .res 2 +dy: .res 2 +e2: .res 2 +sx: .res 1 +sy: .res 1 +dltemp: .res 2 +pixel: .res 1 + +; DrawCircle + +xval: .res 2 ; These could move to zeropage for perf, but presume we +yval: .res 2 ; we want to minimize the amount we grow zero page use +err: .res 2 +temp: .res 2 +tempa: .res 1 +tempx: .res 1 +tempy: .res 1 +temp2: .res 2 +x0: .res 2 +y0: .res 2 + +; CharOut + +tempstr: .res 2 + +.export _x1cord ; Make sure these show up on the C side as zero page +.export _x2cord +.export _y1cord +.export _y2cord +.export _cursorX +.export _cursorY + +.segment "CODE" + +;----------------------------------------------------------------------------------- +; GetPixelAddress - Calculate the address of a pixel in the video memory +;----------------------------------------------------------------------------------- +; Based on MTU PIXADR code +;----------------------------------------------------------------------------------- +; In: _x1cord (16-bit) +; _y1cord (16-bit) +; Out: adp1 (16-bit) Address of pixel to set +;----------------------------------------------------------------------------------- + +_GetPixelAddress: + lda _x1cord ; compute bit address first + sta adp1 ; also transfer x1cord to adp1 + and #$07 ; + which is simply the low 3 bits of x + sta btpt + lda _x1cord+1 ; finish transferring x1cord to adp1 + sta adp1+1 + lsr adp1+1 ; double shift adp1 right 3 to get + ror adp1 ; int(xcord/8 ) + lsr adp1+1 + ror adp1 + lsr adp1+1 + ror adp1 + sec ; and temporary storage + lda _y1cord + sta adp2 + sta temp + lda #0 + sbc _y1cord+1 + sta adp2+1 + sta temp+1 + asl adp2 ; compute 40*(y1cord) + rol adp2+1 ; 2*(y1cord) + asl adp2 + rol adp2+1 ; 4*(y1cord) + lda adp2 ; add in temporary save of (y1cord) + clc ; to make 5*(y1cord) + adc temp + sta adp2 + lda adp2+1 + adc temp+1 + sta adp2+1 ; 5*(y1cord) + asl adp2 ; 10*(1cord) + rol adp2+1 + asl adp2 ; 20#(y1cord) + rol adp2+1 + asl adp2 ; 40*(y1cord) + rol adp2+1 + lda adp2 ; add in int(x1cord/8) computed earlier + clc + adc adp1 + sta adp1 + lda adp2+1 + adc adp1+1 + adc #>SCREEN ; add in vmorg*256 + sta adp1+1 ; final result + rts ; return + +;----------------------------------------------------------------------------------- +; Mask tables for individual pixel subroutines +; +; MSKTB1 is a table of 1 bits corresponding to bit numbers +; MSKTB2 is a table of 0 bits corresponding to bit numbers +;----------------------------------------------------------------------------------- + +msktb1: .byte $80,$40,$20,$10,$08,$04,$02,$01 +msktb2: .byte $7F,$BF,$DF,$EF,$F7,$FB,$FD,$FE + +_Delay: pha + sta temp + txa + pha + tya + pha + +@loopa: ldx #$ff +@loopx: ldy #$ff +@loopy: dey + bne @loopy + dex + bne @loopx + dec temp + bne @loopa + + pla + tay + pla + tax + pla + rts + +;----------------------------------------------------------------------------------- +; SetPixel - Set a pixel in the video memory +;----------------------------------------------------------------------------------- +; x - _x1cord (16-bit) +; y - _y1cord (16-bit) +;----------------------------------------------------------------------------------- +; Mask tables for individual pixel subroutines +;----------------------------------------------------------------------------------- + +_SetPixel: jsr _GetPixelAddress + ldy btpt ; get bit number in y + lda msktb1,y ; get a byte with that bit =1, others =0 + ldy #0 + ora (adp1),y ; combine the bit with the addressed vm + sta (adp1),y ; byte + rts + +;----------------------------------------------------------------------------------- +; ClearPixel - Clears a pixel in the video memory +;----------------------------------------------------------------------------------- +; x - _x1cord (16-bit) +; y - _y1cord (16-bit) +;----------------------------------------------------------------------------------- + +_ClearPixel: jsr _GetPixelAddress + ldy btpt ; get bit number in y + lda msktb2,y ; get a byte with that bit =0, others =1 + ldy #0 + and (adp1),y ; remove the bit from the addressed vm + sta (adp1),y ; byte + rts + +;----------------------------------------------------------------------------------- +; ClearScreen - Clears the entire video memory (and thus the screen) +;----------------------------------------------------------------------------------- + +_ClearScreen: + lda #$00 + + ldx #<SCREEN + stx dest_lo + ldx #>SCREEN + stx dest_hi + + ldy #0 +: sta (dest), y ; Loop unwound by a factor of 8, which means our iny before the branchh + iny ; will still work as it's on a page crossing boundary. + sta (dest), y ; This will avoid most of the overhead of the branch. + iny + sta (dest), y + iny + sta (dest), y + iny + sta (dest), y + iny + sta (dest), y + iny + sta (dest), y + iny + sta (dest), y + iny + bne :- + + inc dest_hi + ldx dest_hi + cpx #>SCREEN + $20 + bne :- + + rts + +;----------------------------------------------------------------------------------- +; ScrollScreen - Scrolls the entire video memory (and thus the screen) up one row +;----------------------------------------------------------------------------------- + +BYTES_TO_MOVE = SCREEN_BYTES - BYTESPERCHARROW +PAGES_TO_MOVE = BYTES_TO_MOVE / 256 + +_ScrollScreen: + pha + tya + pha + txa + pha + + ; Load the source (A140) and destination (A000) addresses + lda #<(SCREEN+BYTESPERCHARROW) + sta scroll_src_lo + lda #>(SCREEN+BYTESPERCHARROW) + sta scroll_src_hi + lda #<SCREEN + sta scroll_dest_lo + lda #>SCREEN + sta scroll_dest_hi + + ldx #PAGES_TO_MOVE +@outerLoop: + ldy #0 +@innerLoop: ; + ; I could do this faster in self-modifying code (avoiding the zero page overhead) but then it + ; couldn't go into ROM + + lda (scroll_src),y ; I've unwound the loop to do 8 bytes at a time. Since we're doing full pages + sta (scroll_dest),y ; as long as we unwind the loop to do 8 bytes at a time, we know we'll still + iny ; do the final increment on a page boundary. + lda (scroll_src),y + sta (scroll_dest),y + iny + lda (scroll_src),y + sta (scroll_dest),y + iny + lda (scroll_src),y + sta (scroll_dest),y + iny + lda (scroll_src),y + sta (scroll_dest),y + iny + lda (scroll_src),y + sta (scroll_dest),y + iny + lda (scroll_src),y + sta (scroll_dest),y + iny + lda (scroll_src),y + sta (scroll_dest),y + iny + bne @innerLoop ; If Y overflows, it will be 0, so won't branch + inc scroll_src_hi + inc scroll_dest_hi + dex + bne @outerLoop + + ; Clear the last line + lda #<LASTROW + sta scroll_dest_lo + lda #>LASTROW + sta scroll_dest_hi + lda #$00 + ldy #0 +fullPageLoop: + sta (scroll_dest_lo),y + iny + bne fullPageLoop + inc scroll_dest_hi +partialPageLoop: + sta (scroll_dest_lo),y + iny + cpy #BYTESPERCHARROW - 256 ; Only clear up to the 64th byte (256 + 64 == 320) + bne partialPageLoop + + pla + tax + pla + tay + pla + rts + +;----------------------------------------------------------------------------------- +; DrawCircle - Draws a circle in video memory of a given radius at a given coord +;----------------------------------------------------------------------------------- +; x - _x1cord (16-bit) +; y - _y1cord (16-bit) +; radius - _y2cord (16-bit) +;----------------------------------------------------------------------------------- +; Implements the midpoint circle algorithm without floating point or trig functions +;----------------------------------------------------------------------------------- +; int x = radius; +; int y = 0; +; int err = 0; +; +; while (x >= y) +; { +; SETPIXEL(x0 + x, y0 + y, val); +; SETPIXEL(x0 + y, y0 + x, val); +; SETPIXEL(x0 - y, y0 + x, val); +; SETPIXEL(x0 - x, y0 + y, val); +; SETPIXEL(x0 - x, y0 - y, val); +; SETPIXEL(x0 - y, y0 - x, val); +; SETPIXEL(x0 + y, y0 - x, val); +; SETPIXEL(x0 + x, y0 - y, val); +; +; y++; +; err += 1 + 2 * y; +; if (2 * (err - x) + 1 > 0) { +; x--; +; err += 1 - 2 * x; +; } +; } +;----------------------------------------------------------------------------------- + +_DrawCircle: lda _x1cord ; x0 = _x1cord + sta x0 + lda _x1cord+1 + sta x0+1 + lda _y1cord ; y0 = _y1cord + sta y0 + lda _y1cord+1 + sta y0+1 + + lda _y2cord ; x = radius + sta xval + lda _y2cord+1 + sta xval+1 + + lda #$0 ; yval = 0; + sta yval + sta yval+1 + sta err ; err = 0; + sta err+1 +circleloop: + lda xval+1 ; if (xval < yval) we're done; + sec + cmp yval+1 + bcc doneCircle ; if high byteof yval is greater, we can draw + bne doCircle ; it not greater and not equal, is less, so done + lda xval ; in other cases we need to compare the LSB next + cmp yval + bcs doCircle ; if it's less, but MSB was equal, we go draw + +doneCircle: rts + +doCircle: lda x0 ; Draw the first of 8 symmetric quadrant copies + clc + adc yval + sta _x1cord + lda x0+1 + adc yval+1 + sta _x1cord+1 + lda y0 + sec + sbc xval + sta _y1cord + lda y0+1 + sbc xval+1 + sta _y1cord+1 + jsr _SetPixel ; SETPIXEL(x0 + y, y0 - x, val); + + lda x0 + sec + sbc yval + sta _x1cord + lda x0+1 + sbc yval+1 + sta _x1cord+1 + lda y0 + sec + sbc xval + sta _y1cord + lda y0+1 + sbc xval+1 + sta _y1cord+1 + jsr _SetPixel ; SETPIXEL(x0 - y, y0 - x, val); + + lda x0 + sec + sbc xval + sta _x1cord + lda x0+1 + sbc xval+1 + sta _x1cord+1 + lda y0 + sec + sbc yval + sta _y1cord + lda y0+1 + sbc yval+1 + sta _y1cord+1 + jsr _SetPixel ; SETPIXEL(x0 - x, y0 - y, val); + + lda x0 + sec + sbc xval + sta _x1cord + lda x0+1 + sbc xval+1 + sta _x1cord+1 + lda y0 + clc + adc yval + sta _y1cord + lda y0+1 + adc yval+1 + sta _y1cord+1 + jsr _SetPixel ; SETPIXEL(x0 - x, y0 + y, val); + + lda x0 + clc + adc yval + sta _x1cord + lda x0+1 + adc yval+1 + sta _x1cord+1 + lda y0 + clc + adc xval + sta _y1cord + lda y0+1 + adc xval+1 + sta _y1cord+1 + jsr _SetPixel ; SETPIXEL(x0 + y, y0 + x, val); + + lda x0 + clc + adc xval + sta _x1cord + lda x0+1 + adc xval+1 + sta _x1cord+1 + lda y0 + clc + adc yval + sta _y1cord + lda y0+1 + adc yval+1 + sta _y1cord+1 + jsr _SetPixel ; SETPIXEL(x0 + x, y0 + y, val); + + lda x0 + clc + adc xval + sta _x1cord + lda x0+1 + adc xval+1 + sta _x1cord+1 + lda y0 + sec + sbc yval + sta _y1cord + lda y0+1 + sbc yval+1 + sta _y1cord+1 + jsr _SetPixel ; SETPIXEL(x0 + x, y0 - y, val); + + lda x0 + sec + sbc yval + sta _x1cord + lda x0+1 + sbc yval+1 + sta _x1cord+1 + lda y0 + clc + adc xval + sta _y1cord + lda y0+1 + adc xval+1 + sta _y1cord+1 + jsr _SetPixel ; SETPIXEL(x0 - y, y0 + x, val); + + inc yval ; yval++; + bne :+ + inc yval+1 + +: lda yval ; temp = 2 * yval + 1; + asl + sta temp + lda yval+1 + rol + sta temp+1 + inc temp + bne :+ + inc temp+1 +: + lda err ; err += temp + clc + adc temp + sta err + lda err+1 + adc temp+1 + sta err+1 + ; if (2 * (err - xval) + 1 > 0) then dec xval + lda err ; temp = err-xval + sec + sbc xval + sta temp + lda err+1 + sbc xval+1 + sta temp+1 + + asl temp ; temp = 2*(err-xval)+1 + rol temp+1 + inc temp + bne :+ + inc temp+1 +: + lda temp+1 ; if (temp > 0) we'll dec xval + bmi doneLoop ; less than zero, so no dec + bne decxval ; if not zero, go ahead and dec + + lda temp ; MSB is zero so now check the LSB + beq doneLoop ; both bytes are zero, so no dec + +decxval: lda xval ; xval-- + bne :+ + dec xval+1 +: dec xval + +updateerr: lda xval ; temp = xval * 2 + asl + sta temp + lda xval+1 + rol + sta temp+1 + + lda #1 ; temp2 == 1-temp == 1-(xval*2) + sec + sbc temp + sta temp2 + lda #0 + sbc temp+1 + sta temp2+1 + + lda err ; err += 1-(xval*2) + clc + adc temp2 + sta err + lda err+1 + adc temp2+1 + sta err+1 + +doneLoop: jmp circleloop + +;----------------------------------------------------------------------------------- +; Character set translation tables +;----------------------------------------------------------------------------------- + +ascToPetTable: .byte $00,$01,$02,$03,$04,$05,$06,$07,$14,$20,$0d,$11,$93,$0a,$0e,$0f + .byte $10,$0b,$12,$13,$08,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .byte $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f + .byte $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f + .byte $40,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf + .byte $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$5b,$5c,$5d,$5e,$5f + .byte $c0,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f + .byte $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$db,$dc,$dd,$de,$df + .byte $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .byte $90,$91,$92,$0c,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f + .byte $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af + .byte $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf + .byte $60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f + .byte $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$7b,$7c,$7d,$7e,$7f + .byte $e0,$e1,$e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef + .byte $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe,$ff + +; PETSCI to Ascii lookup table - not current used, so commented out, but can be used to map fonts +; +; + petToAscTable: .byte $00,$01,$02,$03,$04,$05,$06,$07,$14,$09,$0d,$11,$93,$0a,$0e,$0f + .byte $10,$0b,$12,$13,$08,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f + .byte $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f + .byte $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f + .byte $40,$61,$62,$63,$64,$65,$66,$67,$68,$69,$6a,$6b,$6c,$6d,$6e,$6f + .byte $70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$7a,$5b,$5c,$5d,$5e,$5f + .byte $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$ca,$cb,$cc,$cd,$ce,$cf + .byte $d0,$d1,$d2,$d3,$d4,$d5,$d6,$d7,$d8,$d9,$da,$db,$dc,$dd,$de,$df + .byte $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8a,$8b,$8c,$8d,$8e,$8f + .byte $90,$91,$92,$0c,$94,$95,$96,$97,$98,$99,$9a,$9b,$9c,$9d,$9e,$9f + .byte $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af + .byte $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf + .byte $60,$41,$42,$43,$44,$45,$46,$47,$48,$49,$4a,$4b,$4c,$4d,$4e,$4f + .byte $50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$5a,$7b,$7c,$7d,$7e,$7f + .byte $a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$aa,$ab,$ac,$ad,$ae,$af + .byte $b0,$b1,$b2,$b3,$b4,$b5,$b6,$b7,$b8,$b9,$ba,$bb,$bc,$bd,$be,$bf + +;----------------------------------------------------------------------------------- +; PetToAsc - Convert a PETSCII character to ASCII +;----------------------------------------------------------------------------------- +; A - Character to convert +;----------------------------------------------------------------------------------- + +_AscToPet: tay + lda ascToPetTable, y + rts + +_PetToAsc: tay + lda petToAscTable, Y + rts + +;----------------------------------------------------------------------------------- +; ReverseBits - Reverse the bits in a byte +;----------------------------------------------------------------------------------- +; A = octet to be reversed +;----------------------------------------------------------------------------------- + +_ReverseBits: + ldx #8 ; set counter to 8 (for 8 bits) + lda #0 ; initialize A to 0 + sta temp ; clear result byte (accumulator for the reversed octet) +: asl ; shift leftmost bit of input into carry + lda temp ; load the temporary result byte into A + ror ; rotate carry into leftmost bit of result + sta temp ; store the updated result back into memory + dex ; decrement counter + bne :- ; repeat until all bits are processed + lda temp ; load the final reversed byte into A + rts ; return with result in A + +;----------------------------------------------------------------------------------- +; LoadFont - Makes sure the font data is ready to use. This usually requires +; reversing the bits so that they match the bit order of the screen +;----------------------------------------------------------------------------------- + +_LoadFont: ldx #3 + lda #<_font8x8_basic + sta adp1_lo + lda #>_font8x8_basic + sta adp1_hi + ldy #0 +@loop: lda (adp1), y + jsr _ReverseBits + sta (adp1), y + iny + bne @loop + + inc adp1_lo + bne :+ + inc adp1_hi +: dex + bne @loop + rts + +ScreenLineAddresses: + .word SCREEN + 0 * BYTESPERCHARROW, SCREEN + 1 * BYTESPERCHARROW + .word SCREEN + 2 * BYTESPERCHARROW, SCREEN + 3 * BYTESPERCHARROW + .word SCREEN + 4 * BYTESPERCHARROW, SCREEN + 5 * BYTESPERCHARROW + .word SCREEN + 6 * BYTESPERCHARROW, SCREEN + 7 * BYTESPERCHARROW + .word SCREEN + 8 * BYTESPERCHARROW, SCREEN + 9 * BYTESPERCHARROW + .word SCREEN + 10 * BYTESPERCHARROW, SCREEN + 11 * BYTESPERCHARROW + .word SCREEN + 12 * BYTESPERCHARROW, SCREEN + 13 * BYTESPERCHARROW + .word SCREEN + 14 * BYTESPERCHARROW, SCREEN + 15 * BYTESPERCHARROW + .word SCREEN + 16 * BYTESPERCHARROW, SCREEN + 17 * BYTESPERCHARROW + .word SCREEN + 18 * BYTESPERCHARROW, SCREEN + 19 * BYTESPERCHARROW + .word SCREEN + 20 * BYTESPERCHARROW, SCREEN + 21 * BYTESPERCHARROW + .word SCREEN + 22 * BYTESPERCHARROW, SCREEN + 23 * BYTESPERCHARROW + .word SCREEN + 24 * BYTESPERCHARROW + .assert( (* - ScreenLineAddresses) = ROWSPERCOLUMN * 2), error + +;----------------------------------------------------------------------------------- +; DrawChar - Draws an ASCII character at char location x, y +;----------------------------------------------------------------------------------- +; 0 <= x < 40 +; 0 <= y < 25 +; Preserves all registers, but its not very threadsafe or reentrant +;----------------------------------------------------------------------------------- + +_DrawChar: sty tempy + stx tempx + sta tempa + + tya ; Get the address in screen memory where this + asl ; character X/Y cursor pos should be drawn + tay + txa + clc + adc ScreenLineAddresses, y + sta dest_lo + lda ScreenLineAddresses+1, y + adc #0 + sta dest_hi + + lda #0 ; Get the address in font memory where this + sta src_hi ; Petscii chracter lives (after conversion from + lda tempa ; ascii) + + sty temp2 + jsr _AscToPet + ldy temp2 + + asl + rol src_hi + asl + rol src_hi + asl + rol src_hi + clc + adc #<_font8x8_basic ; Add the base address of the font table to the offset + sta src_lo + lda src_hi + adc #>_font8x8_basic + sta src_hi + + ldy #0 ; opy the character def to the screen, one byte at a time + ldx #0 +: lda (src), y ; Copy this byte from the character def to the screen target + sta (dest, x) + lda dest_lo ; Advance to the next "scanline", or pixel row, down + clc + adc #<BYTESPERROW + sta dest_lo + lda dest_hi + adc #>BYTESPERROW + sta dest_hi + + iny + cpy #8 + bne :- + + ldy tempy + ldx tempx + lda tempa + rts + +;----------------------------------------------------------------------------------- +; CursorOn - Turns on the text cursor and draws it at the current cursor pos +;----------------------------------------------------------------------------------- + +CursorOn: ldx _cursorX + ldy _cursorY + lda #'_' + jsr _DrawChar + rts + +CursorOff: ldx _cursorX + ldy _cursorY + lda #' ' + jsr _DrawChar + rts + +;----------------------------------------------------------------------------------- +; DrawText - Draws an ASCII char in A at the current cursor pos, saves all regs +;----------------------------------------------------------------------------------- + +_CharOut: sta temp + lda #0 + sta temp+1 + txa + pha + tya + pha + + ldx #<temp + ldy #>temp + jsr _DrawText + + pla + tay + pla + tax + rts + +;----------------------------------------------------------------------------------- +; Backspace - Erase the current character and move back one position. Does not +; move back up to previous line +;----------------------------------------------------------------------------------- + +Backspace: lda _cursorX + beq colzero + jsr CursorOff + dec _cursorX + jsr CursorOn +colzero: rts + +;----------------------------------------------------------------------------------- +; DrawText - Draws an ASCII string at the current cursor position +;----------------------------------------------------------------------------------- +; XY - Pointer to the string to draw, stops on NUL or 255 chars later +;----------------------------------------------------------------------------------- + +_DrawText: stx adp1_lo + sty adp1_hi + jsr CursorOff + + ldy #0 +checkHWrap: lda _cursorX + cmp #CHARSPERROW + bcc checkVWrap + lda #0 + sta _cursorX + inc _cursorY + +checkVWrap: lda _cursorY + cmp #ROWSPERCOLUMN + bcc loadChar + jsr _ScrollScreen + lda #ROWSPERCOLUMN-1 + sta _cursorY + +loadChar: lda (adp1), y + beq doneText + + cmp #$0a + bne :+ + + lda #0 ; Back to the left edge + sta _cursorX + inc _cursorY ; Advance to the next line + iny + bne checkHWrap + +: sty temp + ldx _cursorX + ldy _cursorY + jsr _DrawChar + ldy temp + inc _cursorX + iny + bne checkHWrap + +doneText: jsr CursorOn + rts + +demoText1: .byte " *** COMMODORE KIM-1 SHELL V0.1 ***", $0A, $0A + .byte " 60K RAM SYSTEM. 49152 BYTES FREE.", $0A, $0A, $00 +readyText: .byte $0A,"READY.", $0A, 00 + +_Demo: jsr _ClearScreen + lda #0 + sta _cursorX + sta _cursorY + ldx #<demoText1 + ldy #>demoText1 + jsr _DrawText + rts + +_Ready: ldx #<readyText + ldy #>readyText + jsr _DrawText + rts + + +;----------------------------------------------------------------------------------- +; DrawLine - Draws a line between two points +;----------------------------------------------------------------------------------- +; _x1cord (16-bit) +; _y1cord ( 8-bit) +; _x2cord (16-bit) +; _y2cord ( 8-bit) +;----------------------------------------------------------------------------------- +; Implements something like Bresenham's algorithm for drawing a line: +;----------------------------------------------------------------------------------- +; void DrawLine(int x0, int y0, int x1, int y1, byte val) +; { +; int dx = abs(_x2cord - _x1cord), sx = _x1cord < _x2cord ? 1 : -1; +; int dy = abs(_y2cord - _y1cord), sy = _y1cord < _y2cord ? 1 : -1; +; int err = (dx > dy ? dx : -dy) / 2, e2; +; +; while (1) +; { +; SETPIXEL(_x1cord, _y1cord, val); +; +; if (_x1cord == _x2cord && _y1cord == _y2cord) +; break; +; +; e2 = err; +; +; if (e2 > -dx) +; { +; err -= dy; +; _x1cord += sx; +; } +; if (e2 < dy) +; { +; err += dx; +; _y1cord += sy; +; } +; } +; } +;----------------------------------------------------------------------------------- + +_DrawLine: sta pixel + + ldx #$01 ; positive x-step for now + stx sx + + ; Calculate dx = (x2cord - X1cord) and see if its positive or not + + lda _x2cord ; Calculate dx = (x2cord - X1cord) + sec + sbc _x1cord + sta dx + lda _x2cord+1 + sbc _x1cord+1 + sta dx+1 + bpl calcdy ; dx is positive (dx >= 0), so we're good + + ; dx was negative (dx < 0), so we set sx to -1 and get the absolute + ; value by subtracting the other direction + + ldx #$FF ; negative x-step + stx sx + lda _x1cord ; Calculate dx = (x2cord - X1cord) + sec + sbc _x2cord + sta dx + lda _x1cord+1 + sbc _x2cord+1 + sta dx+1 + + ; Calculate dy = (y2cord - y1cord) and see if its positive or not + +calcdy: ldx #$01 ; positive y-step for now + stx sy + lda _y2cord + sec + sbc _y1cord + sta dy + bcs positivedy ; If y2cord > y1cord, then dy is positive and we're good + + ; dy was negative (dy < 0), so we set sy to -1 and get the absolute value + + ldx #$FF ; negative y-step + stx sy + lda _y1cord + sec + sbc _y2cord + sta dy + + ; Now we have dx and dy, so we can calculate err, but first we need + ; to see if dx > dy or not + +positivedy: lda dx+1 ; Check if dx > dy (both are always positive now) + bne dxgt ; If MSB of dx is greater than zero, then dx > dy since dy is 8-bits + lda dy + cmp dx + bcs dygte + +dxgt: lda dx ; We found dx>dy so set err = dx / 2 + sta err + lda dx+1 + lsr + sta err+1 ; err = dx/2 + ror err + jmp loop + +dygte: lda #0 ; we found dx <= dy so set err = -dy / 2 + sec + sbc dy ; else err = -dy / 2 + ror + ora #$80 + sta err + lda #$FF + sta err+1 + + ; Now we have dx, dy, and err, so we can start drawing pixels + +loop: lda pixel + beq clearpixel + jsr _SetPixel ; Plot the current _x1cord, _y1cord + jmp next +clearpixel: jsr _ClearPixel ; Clear the current _x1cord, _y1cord + +next: lda _x1cord ; if (_x1cord == _x2cord && _y1cord == _y2cord) then we rts + cmp _x2cord + bne noteq + lda _y1cord + cmp _y2cord + bne noteq + lda _x1cord+1 + cmp _x2cord+1 + bne noteq + + rts + +noteq: lda err ; e2 = err + sta e2 + lda err+1 + sta e2+1 + + ; Check the two update conditions for x and y, and update if needed + + lda e2 ; if (e2 > -dx) is the same as if (e2 + dx > 0), so we test that because its easier + clc ; If its true then we dec err and inc _x1cord + adc dx + sta temp + lda e2+1 + adc dx+1 + bmi doneupdatex ; If result is negative, then e2 + dx < 0, so we don't dec err or inc _x1cord + bne stepx ; If MSB is non-zero, then e2 + dx > 0, so we DO dec err and inc _x1cord + lda temp ; If result is zero in MSB, then we check the LSB here + beq doneupdatex ; If LSB is zero, then we don't dec err or inc _x1cord + ; We already know e2 + dx > 0, so LSB can't be negative +stepx: lda sx + bmi decx +incxval: inc _x1cord ; _x1cord += 1 because sx == 1 + bne updatexerr + inc _x1cord+1 + jmp updatexerr + +decx: lda _x1cord ; _x1cord += 1 because sx == 1 + sec + sbc #1 + sta _x1cord + lda _x1cord+1 + sbc #0 + sta _x1cord+1 + +updatexerr: lda err ; err -= dy + sec + sbc dy + sta err + lda err+1 + sbc #0 + sta err+1 + +doneupdatex: lda e2+1 ; if (e2 < dy) then we inc err and inc _y1cord + bmi updateerry ; If MSB is negative, then e2 < dy, so we inc err and inc _y1cord + bne noupdatey ; If the MSB of e2 is set and positive, then we know e2 > dy, so we don't inc err or inc _y1cord + lda e2 + sec + sbc dy + beq noupdatey ; e2 - dy == 0 so we don't inc err or inc _y1cord + bcs noupdatey ; if e2 was large enough that carry never cleared, then e2 > dy do no update + +updateerry: lda err ; err += dx + clc + adc dx + sta err + lda err+1 + adc dx+1 + sta err+1 + +stepy: lda _y1cord + clc + adc sy + sta _y1cord + +noupdatey: jmp loop + +_getch: jsr $1E5A ; Get character using Monitor ROM call + and #$7F ; Clear top bit + cmp #$0D ; Check for '\r' + bne gotch ; ...if CR character + lda #$0A ; Replace with '\n' +gotch: rts From 5acfb027941d3a8adac538078b7ccc587775af60 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 3 Feb 2024 16:20:17 +0100 Subject: [PATCH 2403/2710] update actions/checkout@v3 -> actions/checkout@v4 and microsoft/setup-msbuild@v1.1 -> microsoft/setup-msbuild@v2. lets see what happens :) --- .github/workflows/build-on-pull-request.yml | 6 +++--- .github/workflows/snapshot-on-push-master.yml | 8 ++++---- .github/workflows/windows-test-scheduled.yml | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 6217c42a2..1064776cf 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -19,7 +19,7 @@ jobs: - shell: bash run: git config --global core.autocrlf input - name: Checkout Source - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Do some simple style checks shell: bash @@ -62,10 +62,10 @@ jobs: run: git config --global core.autocrlf input - name: Checkout Source - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.1 + uses: microsoft/setup-msbuild@v2 - name: Build app (x86 debug) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug -property:Platform=Win32 diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index 571947c9b..f66b1a745 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -18,10 +18,10 @@ jobs: run: git config --global core.autocrlf input - name: Checkout Source - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.1 + uses: microsoft/setup-msbuild@v2 - name: Build app (debug) run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug @@ -44,7 +44,7 @@ jobs: - shell: bash run: git config --global core.autocrlf input - name: Checkout Source - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Do some simple style checks shell: bash @@ -97,7 +97,7 @@ jobs: path: cc65-snapshot-win64.zip - name: Get the online documents repo. - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: cc65/doc # this token will expire, if it does, generate a new one as decribed in https://github.com/cc65/cc65/issues/2065 diff --git a/.github/workflows/windows-test-scheduled.yml b/.github/workflows/windows-test-scheduled.yml index 451b37f79..25f0d3e50 100644 --- a/.github/workflows/windows-test-scheduled.yml +++ b/.github/workflows/windows-test-scheduled.yml @@ -43,11 +43,11 @@ jobs: - name: Checkout source if: steps.check-sha.outputs.cache-hit != 'true' - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Add msbuild to PATH if: steps.check-sha.outputs.cache-hit != 'true' - uses: microsoft/setup-msbuild@v1.1 + uses: microsoft/setup-msbuild@v2 - name: Build app (MSVC debug) if: steps.check-sha.outputs.cache-hit != 'true' From 3dfe0330003f19680f2afc9a607bea397b5c9fec Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 3 Feb 2024 17:02:08 +0100 Subject: [PATCH 2404/2710] update actions/upload-artifact@v3->actions/upload-artifact@v4, actions/cache@v3->actions/cache@v4 --- .github/workflows/build-on-pull-request.yml | 2 +- .github/workflows/snapshot-on-push-master.yml | 6 +++--- .github/workflows/windows-test-scheduled.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 1064776cf..146964a30 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -44,7 +44,7 @@ jobs: shell: bash run: make -j2 doc - name: Upload a documents snapshot. - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: docs path: ./html diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index f66b1a745..d58bff8ed 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -86,12 +86,12 @@ jobs: mv cc65.zip cc65-snapshot-win32.zip - name: Upload a 32-bit Snapshot Zip - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: cc65-snapshot-win32 path: cc65-snapshot-win32.zip - name: Upload a 64-bit Snapshot Zip - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: cc65-snapshot-win64 path: cc65-snapshot-win64.zip @@ -120,7 +120,7 @@ jobs: - name: Package offline documents. run: 7z a cc65-snapshot-docs.zip ./html/*.* - name: Upload a Documents Snapshot Zip - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: cc65-snapshot-docs path: cc65-snapshot-docs.zip diff --git a/.github/workflows/windows-test-scheduled.yml b/.github/workflows/windows-test-scheduled.yml index 25f0d3e50..f72254273 100644 --- a/.github/workflows/windows-test-scheduled.yml +++ b/.github/workflows/windows-test-scheduled.yml @@ -30,7 +30,7 @@ jobs: run: mkdir ~/.cache-sha - name: Cache SHA - uses: actions/cache@v3 + uses: actions/cache@v4 id: check-sha with: path: ~/.cache-sha From 7b790cf8833668c21447490b8b84a0e704a3f134 Mon Sep 17 00:00:00 2001 From: rumbledethumps <16963588+rumbledethumps@users.noreply.github.com> Date: Sun, 4 Feb 2024 23:38:44 -0800 Subject: [PATCH 2405/2710] add RIA_OP_CLOCK to asm inc --- asminc/rp6502.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/asminc/rp6502.inc b/asminc/rp6502.inc index 7dd1b8fcd..816712abb 100644 --- a/asminc/rp6502.inc +++ b/asminc/rp6502.inc @@ -37,6 +37,7 @@ RIA_OP_PHI2 := $02 RIA_OP_CODEPAGE := $03 RIA_OP_LRAND := $04 RIA_OP_STDIN_OPT := $05 +RIA_OP_CLOCK := $0F RIA_OP_CLOCK_GETRES := $10 RIA_OP_CLOCK_GETTIME := $11 RIA_OP_CLOCK_SETTIME := $12 From b04d79b1da2bc5b79c4ff78b6819ee0924376ec2 Mon Sep 17 00:00:00 2001 From: Carlo Bramini <carlo_bramini@users.sourceforge.net> Date: Thu, 4 Jan 2024 13:12:52 +0100 Subject: [PATCH 2406/2710] [SIM65] Support undocumented opcodes for 6502 This PR is mostly a complete rewrite of the emulator for 6502/65c02 opcodes. It provides an easier to maintain implementation of the instructions, by using few macros rather than having hand-written code for each function. All undocumented, previously missing opcodes for 6502 are also implemented. The patch also includes a detailed documentation of those opcodes, for reference to developers. This PR should fix one of the milestones listed here for the next version of CC65: https://github.com/cc65/wiki/wiki/Before-the-next-release --- asminc/cpu.mac | 2 +- libsrc/sim6502/exehdr.s | 12 +- src/sim65/6502.c | 2703 ++++++++++++++++++++++++++------------- src/sim65/6502.h | 3 +- src/sim65/main.c | 10 +- 5 files changed, 1805 insertions(+), 925 deletions(-) diff --git a/asminc/cpu.mac b/asminc/cpu.mac index 31170fbed..084a42119 100644 --- a/asminc/cpu.mac +++ b/asminc/cpu.mac @@ -15,7 +15,7 @@ CPU_ISET_4510 = $0400 CPU_NONE = CPU_ISET_NONE CPU_6502 = CPU_ISET_6502 CPU_6502X = CPU_ISET_6502|CPU_ISET_6502X -CPU_6502DTV = CPU_ISET_6502|CPU_ISET_6502X|CPU_ISET_6502DTV +CPU_6502DTV = CPU_ISET_6502|CPU_ISET_6502DTV CPU_65SC02 = CPU_ISET_6502|CPU_ISET_65SC02 CPU_65C02 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02 CPU_65816 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65816 diff --git a/libsrc/sim6502/exehdr.s b/libsrc/sim6502/exehdr.s index 09d099da5..529ad9b94 100644 --- a/libsrc/sim6502/exehdr.s +++ b/libsrc/sim6502/exehdr.s @@ -9,11 +9,21 @@ .import __MAIN_START__ .import startup + .macpack cpu + .segment "EXEHDR" .byte $73, $69, $6D, $36, $35 ; 'sim65' .byte 2 ; header version - .byte .defined(__SIM65C02__) ; CPU type +.if (.cpu .bitand ::CPU_ISET_6502X) + .byte 2 +.elseif (.cpu .bitand ::CPU_ISET_65C02) + .byte 1 +.elseif (.cpu .bitand ::CPU_ISET_6502) + .byte 0 +.else + .error Unknow CPU type. +.endif .byte sp ; sp address .addr __MAIN_START__ ; load address .addr startup ; reset address diff --git a/src/sim65/6502.c b/src/sim65/6502.c index 9d2c93da8..448e81669 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -12,6 +12,8 @@ /* EMail: uz@cc65.org */ /* */ /* Mar-2017, Christian Krueger, added support for 65SC02 */ +/* Dec-2023, Carlo Bramini, rewritten for better maintenance and added */ +/* support for undocumented opcodes for 6502 */ /* */ /* This software is provided 'as-is', without any expressed or implied */ /* warranty. In no event will the authors be held liable for any damages */ @@ -44,7 +46,337 @@ #include "6502.h" #include "paravirt.h" +/* + 6502 opcode map: + + x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF +0x BRK ORA --- SLO NOP ORA ASL SLO PHP ORA ASL ANC NOP ORA ASL SLO + inx inx zp zp zp zp imm acc imm abs abs abs abs + +1x BPL ORA --- SLO NOP ORA ASL SLO CLC ORA NOP SLO NOP ORA ASL SLO + rel iny iny zpx zpx zpx zpy aby aby abx abx abx abx + +2x JSR AND --- RLA BIT AND ROL RLA PLP AND ROL ANC BIT AND ROL RLA + abs inx inx zp zp zp zp imm acc imm abs abs abs abs + +3x BMI AND --- RLA NOP AND ROL RLA SEC AND NOP RLA NOP AND ROL RLA + rel iny iny zpx zpx zpx zpy aby aby abx abx abx abx + +4x RTI EOR --- SRE NOP EOR LSR SRE PHA EOR LSR ASR JMP EOR LSR SRE + inx inx zp zp zp zp imm acc imm abs abs abs abs + +5x BVC EOR --- SRE NOP EOR LSR SRE CLI EOR NOP SRE NOP EOR LSR SRE + rel iny iny zpx zpx zpx zpx aby aby abx abx abx abx + +6x RTS ADC --- RRA NOP ADC ROR RRA PLA ADC ROR ARR JMP ADC ROR RRA + inx inx zp zp zp zp imm acc imm ind abs abs abs + +7x BVS ADC --- RRA NOP ADC ROR RRA SEI ADC NOP RRA NOP ADC ROR RRA + rel iny iny zpx zpx zpx zpx aby aby abx abx abx abx + +8x NOP STA NOP SAX STY STA STX SAX DEY NOP TXA ANE STY STA STX SAX + imm inx imm inx zp zp zp zp imm imm abs abs abs abs + +9x BCC STA --- SHA STY STA STX SAX TYA STA TXS TAS SHY STA SHX SHA + rel iny iny zpx zpx zpy zpy aby aby abx abx aby aby + +Ax LDY LDA LDX LAX LDY LDA LDX LAX TAY LDA TAX LXA LDY LDA LDX LAX + imm inx imm inx zp zp zp zp imm imm abs abs abs abs + +Bx BCS LDA --- LAX LDY LDA LDX LAX CLV LDA TSX LAS LDY LDA LDX LAX + rel iny iny zpx zpx zpy zpy aby aby abx abx aby aby + +Cx CPY CMP NOP DCP CPY CMP DEC DCP INY CMP DEX SBX CPY CMP DEC DCP + imm inx imm inx zp zp zp zp imm imm abs abs abs abs + +Dx BNE CMP --- DCP NOP CMP DEC DCP CLD CMP NOP DCP NOP CMP DEC DCP + rel iny iny zpx zpx zpx zpx aby zpx aby abx abx abx abx + +Ex CPX SBC NOP ISC CPX SBC INC ISC INX SBC NOP SBC CPX SBC INC ISC + imm inx imm inx zp zp zp zp imm imm abs abs abs abs + +Fx BEQ SBC --- ISC NOP SBC INC ISC SED SBC NOP ISC NOP SBC INC ISC + rel iny iny zpx zpx zpx zpx aby zpx aby abx abx abx abx + +--- = CPU JAM/HALT + +*/ + +/* + +65xx ILLEGAL INSTRUCTIONS + + +* SLO: shift left the contents of a memory location and then OR the result with + the accumulator. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X . . . . X X +SLO abs | 0Fh | 6 | +SLO abs,X | 1Fh | 7 | +SLO abs,Y | 1Bh | 7 | +SLO zp | 07h | 5 | +SLO zp,X | 17h | 6 | +SLO (zp,X) | 03h | 8 | +SLO (zp),Y | 13h | 8 | +-------------+--------+--------+ + + +* RLA: rotate left the contents of a memory location and then AND the result with + the accumulator. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X . . . . X X +RLA abs | 2Fh | 6 | +RLA abs,X | 3Fh | 7 | +RLA abs,Y | 3Bh | 7 | +RLA zp | 27h | 5 | +RLA zp,X | 37h | 6 | +RLA (zp,X) | 23h | 8 | +RLA (zp),Y | 33h | 8 | +-------------+--------+--------+ + + +* SRE: shift right the contents of a memory location and then X-OR the result + with the accumulator. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X . . . . X X +SRE abs | 4Fh | 6 | +SRE abs,X | 5Fh | 7 | +SRE abs,Y | 5Bh | 7 | +SRE zp | 47h | 5 | +SRE zp,X | 57h | 6 | +SRE (zp,X) | 43h | 8 | +SRE (zp),Y | 53h | 8 | +-------------+--------+--------+ + + +* RRA: rotate right the contents of a memory location and then adds with carry + the result with the accumulator. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X X . . . X X +RRA abs | 6Fh | 6 | +RRA abs,X | 7Fh | 7 | +RRA abs,Y | 7Bh | 7 | +RRA zp | 67h | 5 | +RRA zp,X | 77h | 6 | +RRA (zp,X) | 63h | 8 | +RRA (zp),Y | 73h | 8 | +-------------+--------+--------+ + + +* SAX: calculate AND between the A and X registers (without changing the + contents of the registers) and stores the result in memory. + Flags into P register are not modified. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: . . . . . . . +SAX abs | 8Fh | 4 | +SAX zp | 87h | 3 | +SAX zp,Y | 97h | 4 | +SAX (zp,X) | 83h | 6 | +-------------+--------+--------+ + + +* LAX: loads both the accumulator and the X register with the content of a memory + location. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X . . . . X . +LAX abs | AFh | 4 | +LAX abs,Y | BFh | 4* | * = adds +1 if page cross is detected. +LAX zp | A7h | 3 | +LAX zp,Y | B7h | 4 | +LAX (zp,X) | A3h | 6 | +LAX (zp),Y | B3h | 5* | +-------------+--------+--------+ + + +* DCP: decrements the contents of a memory location and then compares the result + with the accumulator. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X . . . . X X +DCP abs | CFh | 6 | +DCP abs,X | DFh | 7 | +DCP abs,Y | DBh | 7 | +DCP zp | C7h | 5 | +DCP zp,X | D7h | 6 | +DCP (zp,X) | C3h | 8 | +DCP (zp),Y | D3h | 8 | +-------------+--------+--------+ + + +* ISC: increments the contents of a memory location and then subtract with carry + the result from the accumulator. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X X . . . X X +ISC abs | EFh | 6 | +ISC abs,X | FFh | 7 | +ISC abs,Y | FBh | 7 | +ISC zp | E7h | 5 | +ISC zp,X | F7h | 6 | +ISC (zp,X) | E3h | 8 | +ISC (zp),Y | F3h | 8 | +-------------+--------+--------+ + + +* ASR: calculates the AND between the accumulator and an immediate value and then + shift right the result. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X . . . . X X +ASR #imm | 4Bh | 2 | +-------------+--------+--------+ + + +* ARR: calculates the AND between the accumulator and an immediate value and then + rotate right the result. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X . . . . X X +ARR #imm | 6Bh | 2 | +-------------+--------+--------+ + + +* ANE: calculates the OR of the accumulator with an unstable constant, then it does + an AND with the X register and an immediate value. + The unstable constant varies with temperature, the production batch and + maybe other factors. Experimental measures assume its value to 0xEF. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X . . . . X . +ANE #imm | 8Bh | 2 | +-------------+--------+--------+ + + +* LXA: calculates the OR of the accumulator with an unstable constant, then it does + an AND with an immediate value. The result is copied into the X register and + the accumulator. + The unstable constant varies with temperature, the production batch and + maybe other factors. Experimental measures assume its value to 0xEE. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X . . . . X . +LXA #imm | ABh | 2 | +-------------+--------+--------+ + + +* SBX: calculates the AND of the accumulator with the X register and the subtracts + an immediate value. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X . . . . X X +SBX #imm | CBh | 2 | +-------------+--------+--------+ + + +* NOP: No-Operation. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: . . . . . . . +NOP | 1Ah | 2 | +NOP | 3Ah | 2 | * = adds +1 if page cross is detected. +NOP | 5Ah | 2 | +NOP | 7Ah | 2 | +NOP | DAh | 2 | +NOP | FAh | 2 | +NOP #imm | 80h | 2 | +NOP #imm | 82h | 2 | +NOP #imm | 89h | 2 | +NOP #imm | C2h | 2 | +NOP #imm | E2h | 2 | +NOP zp | 04h | 3 | +NOP zp,x | 14h | 4 | +NOP zp,x | 34h | 4 | +NOP zp | 44h | 3 | +NOP zp,x | 54h | 4 | +NOP zp | 64h | 3 | +NOP zp,x | 74h | 4 | +NOP zp,x | D4h | 4 | +NOP zp,x | F4h | 4 | +NOP abs | 0Ch | 4 | +NOP abs,x | 1Ch | 4* | +NOP abs,x | 3Ch | 4* | +NOP abs,x | 5Ch | 4* | +NOP abs,x | 7Ch | 4* | +NOP abs,x | DCh | 4* | +NOP abs,x | FCh | 4* | +-------------+--------+--------+ + + +* TAS: calculates the AND of the accumulator with the X register and stores the result + into the stack pointer. Then, it calculates the AND of the result with the + high byte of the memory pointer plus 1 and it stores the final result in memory. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: . . . . . . . +TAS abs,y | 9Bh | 5 | +-------------+--------+--------+ + + +* SHY: calculates the AND of the Y register with the high byte of the memory pointer + plus 1 and it stores the final result in memory. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: . . . . . . . +SHY abs,x | 9Ch | 5 | +-------------+--------+--------+ + + +* SHX: calculates the AND of the X register with the high byte of the memory pointer + plus 1 and it stores the final result in memory. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: . . . . . . . +SHX abs,y | 9Eh | 5 | +-------------+--------+--------+ + + +* SHA: calculates the AND of the accumulator with the X register with the high byte + of the memory pointer plus 1 and it stores the final result in memory. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: . . . . . . . +SHX abs,y | 9Fh | 5 | +SHX (zp),y | 93h | 6 | +-------------+--------+--------+ + + +* ANC: calculates the AND of the accumulator with an immediate value and then + updates the status of N and Z bits of the status register. + The N flag is also copied into the Carry flag. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X . . . . X X +ANC #imm | 0Bh | 2 | +ANC #imm | 2Bh | 2 | +-------------+--------+--------+ + + +* LAS: calculates the contents of a memory location with the contents of the +stack pointer register and it stores the result in the accumulator, the X +register, and the stack pointer. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X . . . . X . +LAS abs,y | BBh | 4* | +-------------+--------+--------+ * = adds +1 if page cross is detected. + + +* SBC: alias of the official SBC opcode. + +Address mode | opcode | cycles | N V B D I Z C +-------------+--------+--------+ FLAGS: X X . . . X X +SBC #imm | EBh | 2 | +-------------+--------+--------+ + + +*/ /*****************************************************************************/ /* Data */ @@ -113,118 +445,223 @@ static unsigned HaveIRQRequest; /* Test for page cross */ #define PAGE_CROSS(addr,offs) ((((addr) & 0xFF) + offs) >= 0x100) -/* #imm */ -#define AC_OP_IMM(op) \ - Cycles = 2; \ - Regs.AC = Regs.AC op MemReadByte (Regs.PC+1); \ - TEST_ZF (Regs.AC); \ - TEST_SF (Regs.AC); \ - Regs.PC += 2 +/* Address operators */ /* zp */ -#define AC_OP_ZP(op) \ - Cycles = 3; \ - Regs.AC = Regs.AC op MemReadByte (MemReadByte (Regs.PC+1)); \ - TEST_ZF (Regs.AC); \ - TEST_SF (Regs.AC); \ +#define ADR_ZP(ad) \ + ad = MemReadByte (Regs.PC+1); \ Regs.PC += 2 /* zp,x */ -#define AC_OP_ZPX(op) \ - unsigned char ZPAddr; \ - Cycles = 4; \ - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; \ - Regs.AC = Regs.AC op MemReadByte (ZPAddr); \ - TEST_ZF (Regs.AC); \ - TEST_SF (Regs.AC); \ +#define ADR_ZPX(ad) \ + ad = (MemReadByte (Regs.PC+1) + Regs.XR) & 0xFF; \ Regs.PC += 2 /* zp,y */ -#define AC_OP_ZPY(op) \ - unsigned char ZPAddr; \ - Cycles = 4; \ - ZPAddr = MemReadByte (Regs.PC+1) + Regs.YR; \ - Regs.AC = Regs.AC op MemReadByte (ZPAddr); \ - TEST_ZF (Regs.AC); \ - TEST_SF (Regs.AC); \ +#define ADR_ZPY(ad) \ + ad = (MemReadByte (Regs.PC+1) + Regs.YR) & 0xFF; \ Regs.PC += 2 /* abs */ -#define AC_OP_ABS(op) \ - unsigned Addr; \ - Cycles = 4; \ - Addr = MemReadWord (Regs.PC+1); \ - Regs.AC = Regs.AC op MemReadByte (Addr); \ - TEST_ZF (Regs.AC); \ - TEST_SF (Regs.AC); \ +#define ADR_ABS(ad) \ + ad = MemReadWord (Regs.PC+1); \ Regs.PC += 3 /* abs,x */ -#define AC_OP_ABSX(op) \ - unsigned Addr; \ - Cycles = 4; \ - Addr = MemReadWord (Regs.PC+1); \ - if (PAGE_CROSS (Addr, Regs.XR)) { \ +#define ADR_ABSX(ad) \ + ad = MemReadWord (Regs.PC+1); \ + if (PAGE_CROSS (ad, Regs.XR)) { \ ++Cycles; \ } \ - Regs.AC = Regs.AC op MemReadByte (Addr + Regs.XR); \ - TEST_ZF (Regs.AC); \ - TEST_SF (Regs.AC); \ + ad += Regs.XR; \ Regs.PC += 3 /* abs,y */ -#define AC_OP_ABSY(op) \ - unsigned Addr; \ - Cycles = 4; \ - Addr = MemReadWord (Regs.PC+1); \ - if (PAGE_CROSS (Addr, Regs.YR)) { \ +#define ADR_ABSY(ad) \ + ad = MemReadWord (Regs.PC+1); \ + if (PAGE_CROSS (ad, Regs.YR)) { \ ++Cycles; \ } \ - Regs.AC = Regs.AC op MemReadByte (Addr + Regs.YR); \ - TEST_ZF (Regs.AC); \ - TEST_SF (Regs.AC); \ + ad += Regs.YR; \ Regs.PC += 3 /* (zp,x) */ -#define AC_OP_ZPXIND(op) \ - unsigned char ZPAddr; \ - unsigned Addr; \ - Cycles = 6; \ - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; \ - Addr = MemReadZPWord (ZPAddr); \ - Regs.AC = Regs.AC op MemReadByte (Addr); \ - TEST_ZF (Regs.AC); \ - TEST_SF (Regs.AC); \ +#define ADR_ZPXIND(ad) \ + ad = (MemReadByte (Regs.PC+1) + Regs.XR) & 0xFF; \ + ad = MemReadZPWord (ad); \ Regs.PC += 2 /* (zp),y */ -#define AC_OP_ZPINDY(op) \ - unsigned char ZPAddr; \ - unsigned Addr; \ - Cycles = 5; \ - ZPAddr = MemReadByte (Regs.PC+1); \ - Addr = MemReadZPWord (ZPAddr); \ - if (PAGE_CROSS (Addr, Regs.YR)) { \ +#define ADR_ZPINDY(ad) \ + ad = MemReadZPWord (MemReadByte (Regs.PC+1)); \ + if (PAGE_CROSS (ad, Regs.YR)) { \ ++Cycles; \ } \ - Addr += Regs.YR; \ - Regs.AC = Regs.AC op MemReadByte (Addr); \ - TEST_ZF (Regs.AC); \ - TEST_SF (Regs.AC); \ + ad += Regs.YR; \ Regs.PC += 2 /* (zp) */ -#define AC_OP_ZPIND(op) \ - unsigned char ZPAddr; \ - unsigned Addr; \ - Cycles = 5; \ - ZPAddr = MemReadByte (Regs.PC+1); \ - Addr = MemReadZPWord (ZPAddr); \ - Regs.AC = Regs.AC op MemReadByte (Addr); \ - TEST_ZF (Regs.AC); \ - TEST_SF (Regs.AC); \ +#define ADR_ZPIND(ad) \ + ad = MemReadZPWord (MemReadByte (Regs.PC+1)); \ Regs.PC += 2 +/* Address operators (no penalty on page cross) */ + +/* abs,x - no penalty */ +#define ADR_ABSX_NP(ad) \ + ad = MemReadWord (Regs.PC+1); \ + ad += Regs.XR; \ + Regs.PC += 3 + +/* abs,y - no penalty */ +#define ADR_ABSY_NP(ad) \ + ad = MemReadWord (Regs.PC+1); \ + ad += Regs.YR; \ + Regs.PC += 3 + +/* (zp),y - no penalty */ +#define ADR_ZPINDY_NP(ad) \ + ad = MemReadZPWord (MemReadByte (Regs.PC+1)); \ + ad += Regs.YR; \ + Regs.PC += 2 + + + +/* Memory operators */ + +/* #imm */ +#define MEM_AD_OP_IMM(op) \ + op = MemReadByte (Regs.PC+1); \ + Regs.PC += 2 + +/* zp / zp,x / zp,y / abs / abs,x / abs,y / (zp,x) / (zp),y / (zp) */ +#define MEM_AD_OP(mode, ad, op) \ + ADR_##mode(ad); \ + op = MemReadByte (ad) + +/* ALU opcode helpers */ + +/* Execution cycles for ALU opcodes */ +#define ALU_CY_ZP 3 +#define ALU_CY_ZPX 4 +#define ALU_CY_ZPY 4 +#define ALU_CY_ABS 4 +#define ALU_CY_ABSX 4 +#define ALU_CY_ABSY 4 +#define ALU_CY_ZPXIND 6 +#define ALU_CY_ZPINDY 5 +#define ALU_CY_ZPIND 5 + +/* #imm */ +#define ALU_OP_IMM(op) \ + unsigned char immediate; \ + MEM_AD_OP_IMM(immediate); \ + Cycles = 2; \ + op (immediate) + +/* zp / zp,x / zp,y / abs / abs,x / abs,y / (zp,x) / (zp),y / (zp) */ +#define ALU_OP(mode, op) \ + unsigned address, operand; \ + Cycles = ALU_CY_##mode; \ + MEM_AD_OP (mode, address, operand); \ + op (operand) + +/* Store opcode helpers */ + +/* Execution cycles for store opcodes */ +#define STO_CY_ZP 3 +#define STO_CY_ZPX 4 +#define STO_CY_ZPY 4 +#define STO_CY_ABS 4 +#define STO_CY_ABSX 5 +#define STO_CY_ABSY 5 +#define STO_CY_ZPXIND 6 +#define STO_CY_ZPINDY 6 +#define STO_CY_ZPIND 5 + +/* zp / zp,x / zp,y / abs / abs,x / abs,y / (zp,x) / (zp),y / (zp) */ +#define STO_OP(mode, op) \ + unsigned address; \ + Cycles = STO_CY_##mode; \ + ADR_##mode (address); \ + MemWriteByte(address, op) + +/* zp / zp,x / zp,y / abs / abs,x / abs,y / (zp,x) / (zp),y / (zp) */ +#define STO_CB(mode, cb) \ + unsigned address, operand; \ + Cycles = STO_CY_##mode; \ + ADR_##mode (address); \ + cb (operand); \ + MemWriteByte(address, operand) + +/* Read-Modify-Write opcode helpers */ + +/* Execution cycles for R-M-W opcodes */ +#define RMW_CY_ZP 5 +#define RMW_CY_ZPX 6 +#define RMW_CY_ZPY 6 +#define RMW_CY_ABS 6 +#define RMW_CY_ABSX 7 +#define RMW_CY_ABSY 7 +#define RMW_CY_ZPXIND 6 +#define RMW_CY_ZPINDY 5 +#define RMW_CY_ZPIND 5 + +#define RMW_CY_ABSX_NP RMW_CY_ABSX +#define RMW_CY_ABSY_NP RMW_CY_ABSY +#define RMW_CY_ZPINDY_NP RMW_CY_ZPINDY + +/* zp / zp,x / zp,y / abs / abs,x / abs,y / (zp,x) / (zp),y / (zp) */ +#define MEM_OP(mode, op) \ + unsigned address, operand; \ + Cycles = RMW_CY_##mode; \ + MEM_AD_OP (mode, address, operand); \ + op (operand); \ + MemWriteByte (address, (unsigned char)operand) + +/* 2 x Read-Modify-Write opcode helpers (illegal opcodes) */ + +/* Execution cycles for 2 x R-M-W opcodes */ +#define RMW2_CY_ZP 5 +#define RMW2_CY_ZPX 6 +#define RMW2_CY_ZPY 6 +#define RMW2_CY_ABS 6 +#define RMW2_CY_ABSX 7 +#define RMW2_CY_ABSY 7 +#define RMW2_CY_ZPXIND 8 +#define RMW2_CY_ZPINDY 8 + +/* zp / zp,x / zp,y / abs / abs,x / abs,y / (zp,x) / (zp),y */ +#define ILLx2_OP(mode, op) \ + unsigned address; \ + unsigned operand; \ + Cycles = RMW2_CY_##mode; \ + MEM_AD_OP (mode, address, operand); \ + op (operand); \ + MemWriteByte (address, (unsigned char)operand) + +/* AC opcode helpers */ + +/* #imm */ +#define AC_OP_IMM(op) \ + unsigned char immediate; \ + MEM_AD_OP_IMM(immediate); \ + Cycles = 2; \ + Regs.AC = Regs.AC op immediate; \ + TEST_ZF (Regs.AC); \ + TEST_SF (Regs.AC) + +/* zp / zp,x / zp,y / abs / abs,x / abs,y / (zp,x) / (zp),y / (zp) */ +#define AC_OP(mode, op) \ + unsigned address; \ + unsigned operand; \ + Cycles = ALU_CY_##mode; \ + MEM_AD_OP(mode, address, operand); \ + Regs.AC = Regs.AC op operand; \ + TEST_ZF (Regs.AC); \ + TEST_SF (Regs.AC) + + /* ADC */ #define ADC(v) \ do { \ @@ -248,7 +685,7 @@ static unsigned HaveIRQRequest; } \ TEST_CF (Regs.AC); \ SET_OF ((res < -128) || (res > 127)); \ - if (CPU != CPU_6502) { \ + if (CPU == CPU_65C02) { \ ++Cycles; \ } \ } else { \ @@ -271,7 +708,7 @@ static unsigned HaveIRQRequest; ++Cycles; \ Offs = (signed char) MemReadByte (Regs.PC+1); \ OldPCH = PCH; \ - Regs.PC += 2 + (int) Offs; \ + Regs.PC = (Regs.PC + 2 + (int) Offs) & 0xFFFF; \ if (PCH != OldPCH) { \ ++Cycles; \ } \ @@ -280,14 +717,22 @@ static unsigned HaveIRQRequest; } /* compares */ -#define CMP(v1, v2) \ +#define COMPARE(v1, v2) \ do { \ unsigned Result = v1 - v2; \ - TEST_ZF (Result & 0xFF); \ + TEST_ZF (Result); \ TEST_SF (Result); \ SET_CF (Result <= 0xFF); \ } while (0) +#define CPX(operand) \ + COMPARE (Regs.XR, operand) + +#define CPY(operand) \ + COMPARE (Regs.YR, operand) + +#define CMP(operand) \ + COMPARE (Regs.AC, operand) /* ROL */ #define ROL(Val) \ @@ -309,38 +754,243 @@ static unsigned HaveIRQRequest; TEST_ZF (Val); \ TEST_SF (Val) -/* SBC */ -#define SBC(v) \ +/* ASL */ +#define ASL(Val) \ + SET_CF (Val & 0x80); \ + Val = (Val << 1) & 0xFF; \ + TEST_ZF (Val); \ + TEST_SF (Val) + +/* LSR */ +#define LSR(Val) \ + SET_CF (Val & 0x01); \ + Val >>= 1; \ + TEST_ZF (Val); \ + TEST_SF (Val) + +/* INC */ +#define INC(Val) \ + Val = (Val + 1) & 0xFF; \ + TEST_ZF (Val); \ + TEST_SF (Val) + +/* DEC */ +#define DEC(Val) \ + Val = (Val - 1) & 0xFF; \ + TEST_ZF (Val); \ + TEST_SF (Val) + +/* SLO */ +#define SLO(Val) \ + Val <<= 1; \ + SET_CF (Val & 0x100); \ + Regs.AC |= Val; \ + Regs.AC &= 0xFF; \ + TEST_ZF (Regs.AC); \ + TEST_SF (Regs.AC) + +/* RLA */ +#define RLA(Val) \ + Val <<= 1; \ + if (GET_CF ()) { \ + Val |= 0x01; \ + } \ + SET_CF (Val & 0x100); \ + Regs.AC &= Val; \ + TEST_ZF (Regs.AC); \ + TEST_SF (Regs.AC) + +/* SRE */ +#define SRE(Val) \ + SET_CF (Val & 0x01); \ + Val >>= 1; \ + Regs.AC ^= Val; \ + TEST_ZF (Regs.AC); \ + TEST_SF (Regs.AC) + +/* RRA */ +#define RRA(Val) \ + if (GET_CF ()) { \ + Val |= 0x100; \ + } \ + SET_CF (Val & 0x01); \ + Val >>= 1; \ + ADC (Val) + +/* BIT */ +#define BIT(Val) \ + SET_SF (Val & 0x80); \ + SET_OF (Val & 0x40); \ + SET_ZF ((Val & Regs.AC) == 0) + +/* LDA */ +#define LDA(Val) \ + Regs.AC = Val; \ + TEST_SF (Val); \ + TEST_ZF (Val) + +/* LDX */ +#define LDX(Val) \ + Regs.XR = Val; \ + TEST_SF (Val); \ + TEST_ZF (Val) + +/* LDY */ +#define LDY(Val) \ + Regs.YR = Val; \ + TEST_SF (Val); \ + TEST_ZF (Val) + +/* LAX */ +#define LAX(Val) \ + Regs.AC = Val; \ + Regs.XR = Val; \ + TEST_SF (Val); \ + TEST_ZF (Val) + +/* TSB */ +#define TSB(Val) \ + SET_ZF ((Val & Regs.AC) == 0); \ + Val |= Regs.AC + +/* TRB */ +#define TRB(Val) \ + SET_ZF ((Val & Regs.AC) == 0); \ + Val &= ~Regs.AC + +/* DCP */ +#define DCP(Val) \ + Val = (Val - 1) & 0xFF; \ + COMPARE (Regs.AC, Val) + +/* ISC */ +#define ISC(Val) \ + Val = (Val + 1) & 0xFF; \ + SBC(Val) + +/* ASR */ +#define ASR(Val) \ + Regs.AC &= Val; \ + LSR(Regs.AC) + +/* ARR */ +#define ARR(Val) \ do { \ - unsigned old = Regs.AC; \ - unsigned rhs = (v & 0xFF); \ + unsigned tmp = Regs.AC & Val; \ + Val = tmp >> 1; \ + if (GET_CF ()) { \ + Val |= 0x80; \ + } \ if (GET_DF ()) { \ - unsigned lo; \ - int res; \ - lo = (old & 0x0F) - (rhs & 0x0F) + GET_CF () - 1; \ - if (lo & 0x80) { \ - lo = ((lo - 0x06) & 0x0F) - 0x10; \ + SET_SF (GET_CF ()); \ + TEST_ZF (Val); \ + SET_OF ((Val ^ tmp) & 0x40); \ + if (((tmp & 0x0f) + (tmp & 0x01)) > 0x05) { \ + Val = (Val & 0xf0) | ((Val + 0x06) & 0x0f); \ } \ - Regs.AC = (old & 0xF0) - (rhs & 0xF0) + lo; \ - if (Regs.AC & 0x80) { \ - Regs.AC -= 0x60; \ + if (((tmp & 0xf0) + (tmp & 0x10)) > 0x50) { \ + Val = (Val & 0x0f) | ((Val + 0x60) & 0xf0); \ + SET_CF(1); \ + } else { \ + SET_CF(0); \ } \ - res = Regs.AC - rhs + (!GET_CF ()); \ - TEST_ZF (res); \ - TEST_SF (res); \ - SET_CF (res <= 0xFF); \ - SET_OF (((old^rhs) & (old^res) & 0x80)); \ - if (CPU != CPU_6502) { \ + if (CPU == CPU_65C02) { \ ++Cycles; \ } \ } else { \ - Regs.AC -= rhs + (!GET_CF ()); \ - TEST_ZF (Regs.AC); \ - TEST_SF (Regs.AC); \ - SET_CF (Regs.AC <= 0xFF); \ - SET_OF (((old^rhs) & (old^Regs.AC) & 0x80)); \ - Regs.AC &= 0xFF; \ + TEST_SF (Val); \ + TEST_ZF (Val); \ + SET_CF (Val & 0x40); \ + SET_OF ((Val & 0x40) ^ ((Val & 0x20) << 1)); \ } \ + Regs.AC = Val; \ + } while (0); + +/* ANE */ +#define ANE(Val) \ + Val = (Regs.AC | 0xEF) & Regs.XR & Val; \ + Regs.AC = Val; \ + TEST_SF (Val); \ + TEST_ZF (Val) + +/* LXA */ +#define LXA(Val) \ + Val = (Regs.AC | 0xEE) & Val; \ + Regs.AC = Val; \ + Regs.XR = Val; \ + TEST_SF (Val); \ + TEST_ZF (Val) + +/* SBX */ +#define SBX(Val) \ + do { \ + unsigned tmp = (Regs.AC & Regs.XR) - (Val); \ + SET_CF (tmp < 0x100); \ + tmp &= 0xFF; \ + Regs.XR = tmp; \ + TEST_SF (tmp); \ + TEST_ZF (tmp); \ + } while (0); + +/* NOP */ +#define NOP(Val) \ + (void)Val + +/* TAS */ +#define TAS(Val) \ + Val = Regs.AC & Regs.XR; \ + Regs.SP = Val; \ + Val &= (address >> 8) + 1 + +/* SHA */ +#define SHA(Val) \ + Val = Regs.AC & Regs.XR & ((address >> 8) + 1) + +/* ANC */ +#define ANC(Val) \ + Val = Regs.AC & Val; \ + Regs.AC = Val; \ + SET_CF (Val & 0x80); \ + TEST_SF (Val); \ + TEST_ZF (Val) + + +/* LAS */ +#define LAS(Val) \ + Val = Regs.SP & Val; \ + Regs.AC = Val; \ + Regs.XR = Val; \ + Regs.SP = Val; \ + TEST_SF (Val); \ + TEST_ZF (Val) + + +/* SBC */ +#define SBC(v) \ + do { \ + unsigned r_a = Regs.AC; \ + unsigned src = (v) & 0xFF; \ + unsigned ccc = (Regs.SR & CF) ^ CF; \ + unsigned tmp = r_a - src - ccc; \ + \ + SET_CF(tmp < 0x100); \ + TEST_SF(tmp); \ + TEST_ZF(tmp); \ + SET_OF((r_a ^ tmp) & (r_a ^ src) & 0x80); \ + \ + if (GET_DF ()) { \ + unsigned low = (r_a & 0x0f) - (src & 0x0f) - ccc; \ + tmp = (r_a & 0xf0) - (src & 0xf0); \ + if (low & 0x10) { \ + low -= 6; \ + tmp -= 0x10; \ + } \ + tmp = (low & 0xf) | tmp; \ + if (tmp & 0x100) { \ + tmp -= 0x60; \ + } \ + } \ + Regs.AC = tmp & 0xFF; \ } while (0) @@ -368,7 +1018,7 @@ static void OPC_6502_00 (void) PUSH (PCL); PUSH (Regs.SR); SET_IF (1); - if (CPU != CPU_6502) + if (CPU == CPU_65C02) { SET_DF (0); } @@ -380,7 +1030,27 @@ static void OPC_6502_00 (void) static void OPC_6502_01 (void) /* Opcode $01: ORA (ind,x) */ { - AC_OP_ZPXIND (|); + AC_OP (ZPXIND, |); +} + + + +static void OPC_6502_03 (void) +/* Opcode $03: SLO (zp,x) */ +{ + ILLx2_OP (ZPXIND, SLO); +} + + + +/* Aliases of opcode $04 */ +#define OPC_6502_44 OPC_6502_04 +#define OPC_6502_64 OPC_6502_04 + +static void OPC_6502_04 (void) +/* Opcode $04: NOP zp */ +{ + ALU_OP (ZP, NOP); } @@ -388,14 +1058,7 @@ static void OPC_6502_01 (void) static void OPC_65SC02_04 (void) /* Opcode $04: TSB zp */ { - unsigned char ZPAddr; - unsigned char Val; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Val = MemReadByte (ZPAddr); - SET_ZF ((Val & Regs.AC) == 0); - MemWriteByte (ZPAddr, (unsigned char)(Val | Regs.AC)); - Regs.PC += 2; + MEM_OP (ZP, TSB); } @@ -403,7 +1066,7 @@ static void OPC_65SC02_04 (void) static void OPC_6502_05 (void) /* Opcode $05: ORA zp */ { - AC_OP_ZP (|); + AC_OP (ZP, |); } @@ -411,16 +1074,15 @@ static void OPC_6502_05 (void) static void OPC_6502_06 (void) /* Opcode $06: ASL zp */ { - unsigned char ZPAddr; - unsigned Val; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Val = MemReadByte (ZPAddr) << 1; - MemWriteByte (ZPAddr, (unsigned char) Val); - TEST_ZF (Val & 0xFF); - TEST_SF (Val); - SET_CF (Val & 0x100); - Regs.PC += 2; + MEM_OP (ZP, ASL); +} + + + +static void OPC_6502_07 (void) +/* Opcode $07: SLO zp */ +{ + ILLx2_OP (ZP, SLO); } @@ -447,27 +1109,35 @@ static void OPC_6502_0A (void) /* Opcode $0A: ASL a */ { Cycles = 2; - Regs.AC <<= 1; - TEST_ZF (Regs.AC & 0xFF); - TEST_SF (Regs.AC); - SET_CF (Regs.AC & 0x100); - Regs.AC &= 0xFF; + ASL(Regs.AC); Regs.PC += 1; } +/* Aliases of opcode $0B */ +#define OPC_6502_2B OPC_6502_0B + +static void OPC_6502_0B (void) +/* Opcode $0B: ANC #imm */ +{ + ALU_OP_IMM (ANC); +} + + + +static void OPC_6502_0C (void) +/* Opcode $0C: NOP abs */ +{ + ALU_OP (ABS, NOP); +} + + + static void OPC_65SC02_0C (void) /* Opcode $0C: TSB abs */ { - unsigned Addr; - unsigned char Val; - Cycles = 6; - Addr = MemReadWord (Regs.PC+1); - Val = MemReadByte (Addr); - SET_ZF ((Val & Regs.AC) == 0); - MemWriteByte (Addr, (unsigned char) (Val | Regs.AC)); - Regs.PC += 3; + MEM_OP (ABS, TSB); } @@ -475,24 +1145,23 @@ static void OPC_65SC02_0C (void) static void OPC_6502_0D (void) /* Opcode $0D: ORA abs */ { - AC_OP_ABS (|); + AC_OP (ABS, |); } static void OPC_6502_0E (void) -/* Opcode $0E: ALS abs */ +/* Opcode $0E: ASL abs */ { - unsigned Addr; - unsigned Val; - Cycles = 6; - Addr = MemReadWord (Regs.PC+1); - Val = MemReadByte (Addr) << 1; - MemWriteByte (Addr, (unsigned char) Val); - TEST_ZF (Val & 0xFF); - TEST_SF (Val); - SET_CF (Val & 0x100); - Regs.PC += 3; + MEM_OP (ABS, ASL); +} + + + +static void OPC_6502_0F (void) +/* Opcode $0F: SLO abs */ +{ + ILLx2_OP (ABS, SLO); } @@ -508,7 +1177,7 @@ static void OPC_6502_10 (void) static void OPC_6502_11 (void) /* Opcode $11: ORA (zp),y */ { - AC_OP_ZPINDY (|); + AC_OP (ZPINDY, |); } @@ -516,7 +1185,30 @@ static void OPC_6502_11 (void) static void OPC_65SC02_12 (void) /* Opcode $12: ORA (zp) */ { - AC_OP_ZPIND (|); + AC_OP (ZPIND, |); +} + + + +static void OPC_6502_13 (void) +/* Opcode $03: SLO (zp),y */ +{ + ILLx2_OP (ZPINDY, SLO); +} + + + +/* Aliases of opcode $14 */ +#define OPC_6502_34 OPC_6502_14 +#define OPC_6502_54 OPC_6502_14 +#define OPC_6502_74 OPC_6502_14 +#define OPC_6502_D4 OPC_6502_14 +#define OPC_6502_F4 OPC_6502_14 + +static void OPC_6502_14 (void) +/* Opcode $04: NOP zp,x */ +{ + ALU_OP (ZPX, NOP); } @@ -524,14 +1216,7 @@ static void OPC_65SC02_12 (void) static void OPC_65SC02_14 (void) /* Opcode $14: TRB zp */ { - unsigned char ZPAddr; - unsigned char Val; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Val = MemReadByte (ZPAddr); - SET_ZF ((Val & Regs.AC) == 0); - MemWriteByte (ZPAddr, (unsigned char)(Val & ~Regs.AC)); - Regs.PC += 2; + MEM_OP (ZP, TRB); } @@ -539,7 +1224,7 @@ static void OPC_65SC02_14 (void) static void OPC_6502_15 (void) /* Opcode $15: ORA zp,x */ { - AC_OP_ZPX (|); + AC_OP (ZPX, |); } @@ -547,16 +1232,15 @@ static void OPC_6502_15 (void) static void OPC_6502_16 (void) /* Opcode $16: ASL zp,x */ { - unsigned char ZPAddr; - unsigned Val; - Cycles = 6; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - Val = MemReadByte (ZPAddr) << 1; - MemWriteByte (ZPAddr, (unsigned char) Val); - TEST_ZF (Val & 0xFF); - TEST_SF (Val); - SET_CF (Val & 0x100); - Regs.PC += 2; + MEM_OP (ZPX, ASL); +} + + + +static void OPC_6502_17 (void) +/* Opcode $17: SLO zp,x */ +{ + ILLx2_OP (ZPX, SLO); } @@ -574,7 +1258,7 @@ static void OPC_6502_18 (void) static void OPC_6502_19 (void) /* Opcode $19: ORA abs,y */ { - AC_OP_ABSY (|); + AC_OP (ABSY, |); } @@ -583,25 +1267,39 @@ static void OPC_65SC02_1A (void) /* Opcode $1A: INC a */ { Cycles = 2; - Regs.AC = (Regs.AC + 1) & 0xFF; - TEST_ZF (Regs.AC); - TEST_SF (Regs.AC); + INC(Regs.AC); Regs.PC += 1; } +static void OPC_6502_1B (void) +/* Opcode $1B: SLO abs,y */ +{ + ILLx2_OP (ABSY, SLO); +} + + + +/* Aliases of opcode $1C */ +#define OPC_6502_3C OPC_6502_1C +#define OPC_6502_5C OPC_6502_1C +#define OPC_6502_7C OPC_6502_1C +#define OPC_6502_DC OPC_6502_1C +#define OPC_6502_FC OPC_6502_1C + +static void OPC_6502_1C (void) +/* Opcode $1C: NOP abs,x */ +{ + ALU_OP (ABSX, NOP); +} + + + static void OPC_65SC02_1C (void) /* Opcode $1C: TRB abs */ { - unsigned Addr; - unsigned char Val; - Cycles = 6; - Addr = MemReadWord (Regs.PC+1); - Val = MemReadByte (Addr); - SET_ZF ((Val & Regs.AC) == 0); - MemWriteByte (Addr, (unsigned char) (Val & ~Regs.AC)); - Regs.PC += 3; + MEM_OP (ABS, TRB); } @@ -609,7 +1307,7 @@ static void OPC_65SC02_1C (void) static void OPC_6502_1D (void) /* Opcode $1D: ORA abs,x */ { - AC_OP_ABSX (|); + AC_OP (ABSX, |); } @@ -617,18 +1315,23 @@ static void OPC_6502_1D (void) static void OPC_6502_1E (void) /* Opcode $1E: ASL abs,x */ { - unsigned Addr; - unsigned Val; - Cycles = 7; - Addr = MemReadWord (Regs.PC+1) + Regs.XR; - if (CPU != CPU_6502 && !PAGE_CROSS (Addr, Regs.XR)) - --Cycles; - Val = MemReadByte (Addr) << 1; - MemWriteByte (Addr, (unsigned char) Val); - TEST_ZF (Val & 0xFF); - TEST_SF (Val); - SET_CF (Val & 0x100); - Regs.PC += 3; + MEM_OP (ABSX, ASL); +} + + + +static void OPC_65C02_1E (void) +/* Opcode $1E: ASL abs,x */ +{ + MEM_OP (ABSX_NP, ASL); +} + + + +static void OPC_6502_1F (void) +/* Opcode $1F: SLO abs,x */ +{ + ILLx2_OP (ABSX, SLO); } @@ -652,23 +1355,23 @@ static void OPC_6502_20 (void) static void OPC_6502_21 (void) /* Opcode $21: AND (zp,x) */ { - AC_OP_ZPXIND (&); + AC_OP (ZPXIND, &); +} + + + +static void OPC_6502_23 (void) +/* Opcode $23: RLA (zp,x) */ +{ + ILLx2_OP (ZPXIND, RLA); } static void OPC_6502_24 (void) -/* Opcode $24: BIT zp */ { - unsigned char ZPAddr; - unsigned char Val; - Cycles = 3; - ZPAddr = MemReadByte (Regs.PC+1); - Val = MemReadByte (ZPAddr); - SET_SF (Val & 0x80); - SET_OF (Val & 0x40); - SET_ZF ((Val & Regs.AC) == 0); - Regs.PC += 2; +/* Opcode $24: BIT zp */ + ALU_OP (ZP, BIT); } @@ -676,7 +1379,7 @@ static void OPC_6502_24 (void) static void OPC_6502_25 (void) /* Opcode $25: AND zp */ { - AC_OP_ZP (&); + AC_OP (ZP, &); } @@ -684,14 +1387,15 @@ static void OPC_6502_25 (void) static void OPC_6502_26 (void) /* Opcode $26: ROL zp */ { - unsigned char ZPAddr; - unsigned Val; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Val = MemReadByte (ZPAddr); - ROL (Val); - MemWriteByte (ZPAddr, Val); - Regs.PC += 2; + MEM_OP (ZP, ROL); +} + + + +static void OPC_6502_27 (void) +/* Opcode $27: RLA zp */ +{ + ILLx2_OP (ZP, RLA); } @@ -730,15 +1434,7 @@ static void OPC_6502_2A (void) static void OPC_6502_2C (void) /* Opcode $2C: BIT abs */ { - unsigned Addr; - unsigned char Val; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - Val = MemReadByte (Addr); - SET_SF (Val & 0x80); - SET_OF (Val & 0x40); - SET_ZF ((Val & Regs.AC) == 0); - Regs.PC += 3; + ALU_OP (ABS, BIT); } @@ -746,7 +1442,7 @@ static void OPC_6502_2C (void) static void OPC_6502_2D (void) /* Opcode $2D: AND abs */ { - AC_OP_ABS (&); + AC_OP (ABS, &); } @@ -754,14 +1450,15 @@ static void OPC_6502_2D (void) static void OPC_6502_2E (void) /* Opcode $2E: ROL abs */ { - unsigned Addr; - unsigned Val; - Cycles = 6; - Addr = MemReadWord (Regs.PC+1); - Val = MemReadByte (Addr); - ROL (Val); - MemWriteByte (Addr, Val); - Regs.PC += 3; + MEM_OP (ABS, ROL); +} + + + +static void OPC_6502_2F (void) +/* Opcode $2F: RLA abs */ +{ + ILLx2_OP (ABS, RLA); } @@ -777,7 +1474,7 @@ static void OPC_6502_30 (void) static void OPC_6502_31 (void) /* Opcode $31: AND (zp),y */ { - AC_OP_ZPINDY (&); + AC_OP (ZPINDY, &); } @@ -785,7 +1482,15 @@ static void OPC_6502_31 (void) static void OPC_65SC02_32 (void) /* Opcode $32: AND (zp) */ { - AC_OP_ZPIND (&); + AC_OP (ZPIND, &); +} + + + +static void OPC_6502_33 (void) +/* Opcode $33: RLA (zp),y */ +{ + ILLx2_OP (ZPINDY, RLA); } @@ -793,15 +1498,7 @@ static void OPC_65SC02_32 (void) static void OPC_65SC02_34 (void) /* Opcode $34: BIT zp,x */ { - unsigned char ZPAddr; - unsigned char Val; - Cycles = 4; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - Val = MemReadByte (ZPAddr); - SET_SF (Val & 0x80); - SET_OF (Val & 0x40); - SET_ZF ((Val & Regs.AC) == 0); - Regs.PC += 2; + ALU_OP (ZPX, BIT); } @@ -809,7 +1506,7 @@ static void OPC_65SC02_34 (void) static void OPC_6502_35 (void) /* Opcode $35: AND zp,x */ { - AC_OP_ZPX (&); + AC_OP (ZPX, &); } @@ -817,14 +1514,15 @@ static void OPC_6502_35 (void) static void OPC_6502_36 (void) /* Opcode $36: ROL zp,x */ { - unsigned char ZPAddr; - unsigned Val; - Cycles = 6; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - Val = MemReadByte (ZPAddr); - ROL (Val); - MemWriteByte (ZPAddr, Val); - Regs.PC += 2; + MEM_OP (ZPX, ROL); +} + + + +static void OPC_6502_37 (void) +/* Opcode $37: RLA zp,x */ +{ + ILLx2_OP (ZPX, RLA); } @@ -842,7 +1540,7 @@ static void OPC_6502_38 (void) static void OPC_6502_39 (void) /* Opcode $39: AND abs,y */ { - AC_OP_ABSY (&); + AC_OP (ABSY, &); } @@ -851,28 +1549,24 @@ static void OPC_65SC02_3A (void) /* Opcode $3A: DEC a */ { Cycles = 2; - Regs.AC = (Regs.AC - 1) & 0xFF; - TEST_ZF (Regs.AC); - TEST_SF (Regs.AC); + DEC (Regs.AC); Regs.PC += 1; } +static void OPC_6502_3B (void) +/* Opcode $3B: RLA abs,y */ +{ + ILLx2_OP (ABSY, RLA); +} + + + static void OPC_65SC02_3C (void) /* Opcode $3C: BIT abs,x */ { - unsigned Addr; - unsigned char Val; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - if (PAGE_CROSS (Addr, Regs.XR)) - ++Cycles; - Val = MemReadByte (Addr + Regs.XR); - SET_SF (Val & 0x80); - SET_OF (Val & 0x40); - SET_ZF ((Val & Regs.AC) == 0); - Regs.PC += 3; + ALU_OP (ABSX, BIT); } @@ -880,7 +1574,7 @@ static void OPC_65SC02_3C (void) static void OPC_6502_3D (void) /* Opcode $3D: AND abs,x */ { - AC_OP_ABSX (&); + AC_OP (ABSX, &); } @@ -888,16 +1582,23 @@ static void OPC_6502_3D (void) static void OPC_6502_3E (void) /* Opcode $3E: ROL abs,x */ { - unsigned Addr; - unsigned Val; - Cycles = 7; - Addr = MemReadWord (Regs.PC+1) + Regs.XR; - if (CPU != CPU_6502 && !PAGE_CROSS (Addr, Regs.XR)) - --Cycles; - Val = MemReadByte (Addr); - ROL (Val); - MemWriteByte (Addr, Val); - Regs.PC += 2; + MEM_OP (ABSX, ROL); +} + + + +static void OPC_65C02_3E (void) +/* Opcode $3E: ROL abs,x */ +{ + MEM_OP (ABSX_NP, ROL); +} + + + +static void OPC_6502_3F (void) +/* Opcode $3B: RLA abs,x */ +{ + ILLx2_OP (ABSX, RLA); } @@ -918,16 +1619,15 @@ static void OPC_6502_40 (void) static void OPC_6502_41 (void) /* Opcode $41: EOR (zp,x) */ { - AC_OP_ZPXIND (^); + AC_OP (ZPXIND, ^); } -static void OPC_65C02_44 (void) -/* Opcode $44: 'zp' 3 cycle NOP */ +static void OPC_6502_43 (void) +/* Opcode $43: SRE (zp,x) */ { - Cycles = 3; - Regs.PC += 2; + ILLx2_OP (ZPXIND, SRE); } @@ -935,7 +1635,7 @@ static void OPC_65C02_44 (void) static void OPC_6502_45 (void) /* Opcode $45: EOR zp */ { - AC_OP_ZP (^); + AC_OP (ZP, ^); } @@ -943,17 +1643,15 @@ static void OPC_6502_45 (void) static void OPC_6502_46 (void) /* Opcode $46: LSR zp */ { - unsigned char ZPAddr; - unsigned char Val; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Val = MemReadByte (ZPAddr); - SET_CF (Val & 0x01); - Val >>= 1; - MemWriteByte (ZPAddr, Val); - TEST_ZF (Val); - TEST_SF (Val); - Regs.PC += 2; + MEM_OP (ZP, LSR); +} + + + +static void OPC_6502_47 (void) +/* Opcode $47: SRE zp */ +{ + ILLx2_OP (ZP, SRE); } @@ -980,15 +1678,20 @@ static void OPC_6502_4A (void) /* Opcode $4A: LSR a */ { Cycles = 2; - SET_CF (Regs.AC & 0x01); - Regs.AC >>= 1; - TEST_ZF (Regs.AC); - TEST_SF (Regs.AC); + LSR (Regs.AC); Regs.PC += 1; } +static void OPC_6502_4B (void) +/* Opcode $4B: ASR imm */ +{ + ALU_OP_IMM (ASR); +} + + + static void OPC_6502_4C (void) /* Opcode $4C: JMP abs */ { @@ -1003,7 +1706,7 @@ static void OPC_6502_4C (void) static void OPC_6502_4D (void) /* Opcode $4D: EOR abs */ { - AC_OP_ABS (^); + AC_OP (ABS, ^); } @@ -1011,17 +1714,15 @@ static void OPC_6502_4D (void) static void OPC_6502_4E (void) /* Opcode $4E: LSR abs */ { - unsigned Addr; - unsigned char Val; - Cycles = 6; - Addr = MemReadWord (Regs.PC+1); - Val = MemReadByte (Addr); - SET_CF (Val & 0x01); - Val >>= 1; - MemWriteByte (Addr, Val); - TEST_ZF (Val); - TEST_SF (Val); - Regs.PC += 3; + MEM_OP (ABS, LSR); +} + + + +static void OPC_6502_4F (void) +/* Opcode $4F: SRE abs */ +{ + ILLx2_OP (ABS, SRE); } @@ -1037,7 +1738,7 @@ static void OPC_6502_50 (void) static void OPC_6502_51 (void) /* Opcode $51: EOR (zp),y */ { - AC_OP_ZPINDY (^); + AC_OP (ZPINDY, ^); } @@ -1045,7 +1746,15 @@ static void OPC_6502_51 (void) static void OPC_65SC02_52 (void) /* Opcode $52: EOR (zp) */ { - AC_OP_ZPIND (^); + AC_OP (ZPIND, ^); +} + + + +static void OPC_6502_53 (void) +/* Opcode $43: SRE (zp),y */ +{ + ILLx2_OP (ZPINDY, SRE); } @@ -1053,7 +1762,7 @@ static void OPC_65SC02_52 (void) static void OPC_6502_55 (void) /* Opcode $55: EOR zp,x */ { - AC_OP_ZPX (^); + AC_OP (ZPX, ^); } @@ -1061,17 +1770,15 @@ static void OPC_6502_55 (void) static void OPC_6502_56 (void) /* Opcode $56: LSR zp,x */ { - unsigned char ZPAddr; - unsigned char Val; - Cycles = 6; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - Val = MemReadByte (ZPAddr); - SET_CF (Val & 0x01); - Val >>= 1; - MemWriteByte (ZPAddr, Val); - TEST_ZF (Val); - TEST_SF (Val); - Regs.PC += 2; + MEM_OP (ZPX, LSR); +} + + + +static void OPC_6502_57 (void) +/* Opcode $57: SRE zp,x */ +{ + ILLx2_OP (ZPX, SRE); } @@ -1089,7 +1796,7 @@ static void OPC_6502_58 (void) static void OPC_6502_59 (void) /* Opcode $59: EOR abs,y */ { - AC_OP_ABSY (^); + AC_OP (ABSY, ^); } @@ -1104,6 +1811,14 @@ static void OPC_65SC02_5A (void) +static void OPC_6502_5B (void) +/* Opcode $5B: SRE abs,y */ +{ + ILLx2_OP (ABSY, SRE); +} + + + static void OPC_65C02_5C (void) /* Opcode $5C: 'Absolute' 8 cycle NOP */ { @@ -1116,7 +1831,7 @@ static void OPC_65C02_5C (void) static void OPC_6502_5D (void) /* Opcode $5D: EOR abs,x */ { - AC_OP_ABSX (^); + AC_OP (ABSX, ^); } @@ -1124,19 +1839,23 @@ static void OPC_6502_5D (void) static void OPC_6502_5E (void) /* Opcode $5E: LSR abs,x */ { - unsigned Addr; - unsigned char Val; - Cycles = 7; - Addr = MemReadWord (Regs.PC+1) + Regs.XR; - if (CPU != CPU_6502 && !PAGE_CROSS (Addr, Regs.XR)) - --Cycles; - Val = MemReadByte (Addr); - SET_CF (Val & 0x01); - Val >>= 1; - MemWriteByte (Addr, Val); - TEST_ZF (Val); - TEST_SF (Val); - Regs.PC += 3; + MEM_OP (ABSX, LSR); +} + + + +static void OPC_65C02_5E (void) +/* Opcode $5E: LSR abs,x */ +{ + MEM_OP (ABSX_NP, LSR); +} + + + +static void OPC_6502_5F (void) +/* Opcode $5F: SRE abs,x */ +{ + ILLx2_OP (ABSX, SRE); } @@ -1155,13 +1874,15 @@ static void OPC_6502_60 (void) static void OPC_6502_61 (void) /* Opcode $61: ADC (zp,x) */ { - unsigned char ZPAddr; - unsigned Addr; - Cycles = 6; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - Addr = MemReadZPWord (ZPAddr); - ADC (MemReadByte (Addr)); - Regs.PC += 2; + ALU_OP (ZPXIND, ADC); +} + + + +static void OPC_6502_63 (void) +/* Opcode $63: RRA (zp,x) */ +{ + ILLx2_OP (ZPXIND, RRA); } @@ -1169,11 +1890,7 @@ static void OPC_6502_61 (void) static void OPC_65SC02_64 (void) /* Opcode $64: STZ zp */ { - unsigned char ZPAddr; - Cycles = 3; - ZPAddr = MemReadByte (Regs.PC+1); - MemWriteByte (ZPAddr, 0); - Regs.PC += 2; + STO_OP (ZP, 0); } @@ -1181,11 +1898,7 @@ static void OPC_65SC02_64 (void) static void OPC_6502_65 (void) /* Opcode $65: ADC zp */ { - unsigned char ZPAddr; - Cycles = 3; - ZPAddr = MemReadByte (Regs.PC+1); - ADC (MemReadByte (ZPAddr)); - Regs.PC += 2; + ALU_OP (ZP, ADC); } @@ -1193,14 +1906,15 @@ static void OPC_6502_65 (void) static void OPC_6502_66 (void) /* Opcode $66: ROR zp */ { - unsigned char ZPAddr; - unsigned Val; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Val = MemReadByte (ZPAddr); - ROR (Val); - MemWriteByte (ZPAddr, Val); - Regs.PC += 2; + MEM_OP (ZP, ROR); +} + + + +static void OPC_6502_67 (void) +/* Opcode $67: RRA zp */ +{ + ILLx2_OP (ZP, RRA); } @@ -1220,9 +1934,7 @@ static void OPC_6502_68 (void) static void OPC_6502_69 (void) /* Opcode $69: ADC #imm */ { - Cycles = 2; - ADC (MemReadByte (Regs.PC+1)); - Regs.PC += 2; + ALU_OP_IMM (ADC); } @@ -1237,6 +1949,14 @@ static void OPC_6502_6A (void) +static void OPC_6502_6B (void) +/* Opcode $6B: ARR imm */ +{ + ALU_OP_IMM (ARR); +} + + + static void OPC_6502_6C (void) /* Opcode $6C: JMP (ind) */ { @@ -1285,11 +2005,7 @@ static void OPC_65C02_6C (void) static void OPC_6502_6D (void) /* Opcode $6D: ADC abs */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - ADC (MemReadByte (Addr)); - Regs.PC += 3; + ALU_OP (ABS, ADC); } @@ -1297,14 +2013,15 @@ static void OPC_6502_6D (void) static void OPC_6502_6E (void) /* Opcode $6E: ROR abs */ { - unsigned Addr; - unsigned Val; - Cycles = 6; - Addr = MemReadWord (Regs.PC+1); - Val = MemReadByte (Addr); - ROR (Val); - MemWriteByte (Addr, Val); - Regs.PC += 3; + MEM_OP (ABS, ROR); +} + + + +static void OPC_6502_6F (void) +/* Opcode $6F: RRA abs */ +{ + ILLx2_OP (ABS, RRA); } @@ -1320,16 +2037,7 @@ static void OPC_6502_70 (void) static void OPC_6502_71 (void) /* Opcode $71: ADC (zp),y */ { - unsigned char ZPAddr; - unsigned Addr; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Addr = MemReadZPWord (ZPAddr); - if (PAGE_CROSS (Addr, Regs.YR)) { - ++Cycles; - } - ADC (MemReadByte (Addr + Regs.YR)); - Regs.PC += 2; + ALU_OP (ZPINDY, ADC); } @@ -1337,13 +2045,15 @@ static void OPC_6502_71 (void) static void OPC_65SC02_72 (void) /* Opcode $72: ADC (zp) */ { - unsigned char ZPAddr; - unsigned Addr; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Addr = MemReadZPWord (ZPAddr); - ADC (MemReadByte (Addr)); - Regs.PC += 2; + ALU_OP (ZPIND, ADC); +} + + + +static void OPC_6502_73 (void) +/* Opcode $73: RRA (zp),y */ +{ + ILLx2_OP (ZPINDY, RRA); } @@ -1351,11 +2061,7 @@ static void OPC_65SC02_72 (void) static void OPC_65SC02_74 (void) /* Opcode $74: STZ zp,x */ { - unsigned char ZPAddr; - Cycles = 4; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - MemWriteByte (ZPAddr, 0); - Regs.PC += 2; + STO_OP (ZPX, 0); } @@ -1363,11 +2069,7 @@ static void OPC_65SC02_74 (void) static void OPC_6502_75 (void) /* Opcode $75: ADC zp,x */ { - unsigned char ZPAddr; - Cycles = 4; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - ADC (MemReadByte (ZPAddr)); - Regs.PC += 2; + ALU_OP (ZPX, ADC); } @@ -1375,14 +2077,15 @@ static void OPC_6502_75 (void) static void OPC_6502_76 (void) /* Opcode $76: ROR zp,x */ { - unsigned char ZPAddr; - unsigned Val; - Cycles = 6; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - Val = MemReadByte (ZPAddr); - ROR (Val); - MemWriteByte (ZPAddr, Val); - Regs.PC += 2; + MEM_OP (ZPX, ROR); +} + + + +static void OPC_6502_77 (void) +/* Opcode $77: RRA zp,x */ +{ + ILLx2_OP (ZPX, RRA); } @@ -1400,14 +2103,7 @@ static void OPC_6502_78 (void) static void OPC_6502_79 (void) /* Opcode $79: ADC abs,y */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - if (PAGE_CROSS (Addr, Regs.YR)) { - ++Cycles; - } - ADC (MemReadByte (Addr + Regs.YR)); - Regs.PC += 3; + ALU_OP (ABSY, ADC); } @@ -1424,6 +2120,14 @@ static void OPC_65SC02_7A (void) +static void OPC_6502_7B (void) +/* Opcode $7B: RRA abs,y */ +{ + ILLx2_OP (ABSY, RRA); +} + + + static void OPC_65SC02_7C (void) /* Opcode $7C: JMP (ind,X) */ { @@ -1441,14 +2145,7 @@ static void OPC_65SC02_7C (void) static void OPC_6502_7D (void) /* Opcode $7D: ADC abs,x */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - if (PAGE_CROSS (Addr, Regs.XR)) { - ++Cycles; - } - ADC (MemReadByte (Addr + Regs.XR)); - Regs.PC += 3; + ALU_OP (ABSX, ADC); } @@ -1456,16 +2153,37 @@ static void OPC_6502_7D (void) static void OPC_6502_7E (void) /* Opcode $7E: ROR abs,x */ { - unsigned Addr; - unsigned Val; - Cycles = 7; - Addr = MemReadWord (Regs.PC+1) + Regs.XR; - if (CPU != CPU_6502 && !PAGE_CROSS (Addr, Regs.XR)) - --Cycles; - Val = MemReadByte (Addr); - ROR (Val); - MemWriteByte (Addr, Val); - Regs.PC += 3; + MEM_OP (ABSX, ROR); +} + + + +static void OPC_65C02_7E (void) +/* Opcode $7E: ROR abs,x */ +{ + MEM_OP (ABSX_NP, ROR); +} + + + +static void OPC_6502_7F (void) +/* Opcode $7F: RRA abs,x */ +{ + ILLx2_OP (ABSX, RRA); +} + + + +/* Aliases of opcode $80 */ +#define OPC_6502_82 OPC_6502_80 +#define OPC_6502_C2 OPC_6502_80 +#define OPC_6502_E2 OPC_6502_80 +#define OPC_6502_89 OPC_6502_80 + +static void OPC_6502_80 (void) +/* Opcode $80: NOP imm */ +{ + ALU_OP_IMM (NOP); } @@ -1481,13 +2199,15 @@ static void OPC_65SC02_80 (void) static void OPC_6502_81 (void) /* Opcode $81: STA (zp,x) */ { - unsigned char ZPAddr; - unsigned Addr; - Cycles = 6; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - Addr = MemReadZPWord (ZPAddr); - MemWriteByte (Addr, Regs.AC); - Regs.PC += 2; + STO_OP (ZPXIND, Regs.AC); +} + + + +static void OPC_6502_83 (void) +/* Opcode $83: SAX (zp,x) */ +{ + STO_OP (ZPXIND, Regs.AC & Regs.XR); } @@ -1495,11 +2215,7 @@ static void OPC_6502_81 (void) static void OPC_6502_84 (void) /* Opcode $84: STY zp */ { - unsigned char ZPAddr; - Cycles = 3; - ZPAddr = MemReadByte (Regs.PC+1); - MemWriteByte (ZPAddr, Regs.YR); - Regs.PC += 2; + STO_OP (ZP, Regs.YR); } @@ -1507,11 +2223,7 @@ static void OPC_6502_84 (void) static void OPC_6502_85 (void) /* Opcode $85: STA zp */ { - unsigned char ZPAddr; - Cycles = 3; - ZPAddr = MemReadByte (Regs.PC+1); - MemWriteByte (ZPAddr, Regs.AC); - Regs.PC += 2; + STO_OP (ZP, Regs.AC); } @@ -1519,11 +2231,15 @@ static void OPC_6502_85 (void) static void OPC_6502_86 (void) /* Opcode $86: STX zp */ { - unsigned char ZPAddr; - Cycles = 3; - ZPAddr = MemReadByte (Regs.PC+1); - MemWriteByte (ZPAddr, Regs.XR); - Regs.PC += 2; + STO_OP (ZP, Regs.XR); +} + + + +static void OPC_6502_87 (void) +/* Opcode $87: SAX zp */ +{ + STO_OP (ZP, Regs.AC & Regs.XR); } @@ -1532,9 +2248,7 @@ static void OPC_6502_88 (void) /* Opcode $88: DEY */ { Cycles = 2; - Regs.YR = (Regs.YR - 1) & 0xFF; - TEST_ZF (Regs.YR); - TEST_SF (Regs.YR); + DEC (Regs.YR); Regs.PC += 1; } @@ -1543,13 +2257,7 @@ static void OPC_6502_88 (void) static void OPC_65SC02_89 (void) /* Opcode $89: BIT #imm */ { - unsigned char Val; - Cycles = 2; - Val = MemReadByte (Regs.PC+1); - SET_SF (Val & 0x80); - SET_OF (Val & 0x40); - SET_ZF ((Val & Regs.AC) == 0); - Regs.PC += 2; + ALU_OP_IMM (BIT); } @@ -1566,14 +2274,18 @@ static void OPC_6502_8A (void) +static void OPC_6502_8B (void) +/* Opcode $8B: ANE imm */ +{ + ALU_OP_IMM (ANE); +} + + + static void OPC_6502_8C (void) /* Opcode $8C: STY abs */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - MemWriteByte (Addr, Regs.YR); - Regs.PC += 3; + STO_OP (ABS, Regs.YR); } @@ -1581,11 +2293,7 @@ static void OPC_6502_8C (void) static void OPC_6502_8D (void) /* Opcode $8D: STA abs */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - MemWriteByte (Addr, Regs.AC); - Regs.PC += 3; + STO_OP (ABS, Regs.AC); } @@ -1593,11 +2301,15 @@ static void OPC_6502_8D (void) static void OPC_6502_8E (void) /* Opcode $8E: STX abs */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - MemWriteByte (Addr, Regs.XR); - Regs.PC += 3; + STO_OP (ABS, Regs.XR); +} + + + +static void OPC_6502_8F (void) +/* Opcode $8F: SAX abs */ +{ + STO_OP (ABS, Regs.AC & Regs.XR); } @@ -1613,13 +2325,7 @@ static void OPC_6502_90 (void) static void OPC_6502_91 (void) /* Opcode $91: sta (zp),y */ { - unsigned char ZPAddr; - unsigned Addr; - Cycles = 6; - ZPAddr = MemReadByte (Regs.PC+1); - Addr = MemReadZPWord (ZPAddr) + Regs.YR; - MemWriteByte (Addr, Regs.AC); - Regs.PC += 2; + STO_OP (ZPINDY, Regs.AC); } @@ -1627,13 +2333,15 @@ static void OPC_6502_91 (void) static void OPC_65SC02_92 (void) /* Opcode $92: sta (zp) */ { - unsigned char ZPAddr; - unsigned Addr; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Addr = MemReadZPWord (ZPAddr); - MemWriteByte (Addr, Regs.AC); - Regs.PC += 2; + STO_OP (ZPIND, Regs.AC); +} + + + +static void OPC_6502_93 (void) +/* Opcode $93: SHA (zp),y */ +{ + STO_CB (ZPINDY, SHA); } @@ -1641,11 +2349,7 @@ static void OPC_65SC02_92 (void) static void OPC_6502_94 (void) /* Opcode $94: STY zp,x */ { - unsigned char ZPAddr; - Cycles = 4; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - MemWriteByte (ZPAddr, Regs.YR); - Regs.PC += 2; + STO_OP (ZPX, Regs.YR); } @@ -1653,11 +2357,7 @@ static void OPC_6502_94 (void) static void OPC_6502_95 (void) /* Opcode $95: STA zp,x */ { - unsigned char ZPAddr; - Cycles = 4; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - MemWriteByte (ZPAddr, Regs.AC); - Regs.PC += 2; + STO_OP (ZPX, Regs.AC); } @@ -1665,11 +2365,15 @@ static void OPC_6502_95 (void) static void OPC_6502_96 (void) /* Opcode $96: stx zp,y */ { - unsigned char ZPAddr; - Cycles = 4; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.YR; - MemWriteByte (ZPAddr, Regs.XR); - Regs.PC += 2; + STO_OP (ZPY, Regs.XR); +} + + + +static void OPC_6502_97 (void) +/* Opcode $97: SAX zp,y */ +{ + STO_OP (ZPY, Regs.AC & Regs.XR); } @@ -1689,11 +2393,7 @@ static void OPC_6502_98 (void) static void OPC_6502_99 (void) /* Opcode $99: STA abs,y */ { - unsigned Addr; - Cycles = 5; - Addr = MemReadWord (Regs.PC+1) + Regs.YR; - MemWriteByte (Addr, Regs.AC); - Regs.PC += 3; + STO_OP (ABSY, Regs.AC); } @@ -1708,14 +2408,26 @@ static void OPC_6502_9A (void) +static void OPC_6502_9B (void) +/* Opcode $9B: TAS abs,y */ +{ + STO_CB (ABSY, TAS); +} + + + +static void OPC_6502_9C (void) +/* Opcode $9D: SHY abs,x */ +{ + STO_OP (ABSX, Regs.YR & ((address >> 8) + 1)); +} + + + static void OPC_65SC02_9C (void) /* Opcode $9C: STZ abs */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - MemWriteByte (Addr, 0); - Regs.PC += 3; + STO_OP (ABS, 0); } @@ -1723,11 +2435,23 @@ static void OPC_65SC02_9C (void) static void OPC_6502_9D (void) /* Opcode $9D: STA abs,x */ { - unsigned Addr; - Cycles = 5; - Addr = MemReadWord (Regs.PC+1) + Regs.XR; - MemWriteByte (Addr, Regs.AC); - Regs.PC += 3; + STO_OP (ABSX, Regs.AC); +} + + + +static void OPC_6502_9E (void) +/* Opcode $9E: SHX abs,x */ +{ + STO_OP (ABSY, Regs.XR & ((address >> 8) + 1)); +} + + + +static void OPC_6502_9F (void) +/* Opcode $9F: SHA abs,y */ +{ + STO_CB (ABSY, SHA); } @@ -1735,11 +2459,7 @@ static void OPC_6502_9D (void) static void OPC_65SC02_9E (void) /* Opcode $9E: STZ abs,x */ { - unsigned Addr; - Cycles = 5; - Addr = MemReadWord (Regs.PC+1) + Regs.XR; - MemWriteByte (Addr, 0); - Regs.PC += 3; + STO_OP (ABSX, 0); } @@ -1747,11 +2467,7 @@ static void OPC_65SC02_9E (void) static void OPC_6502_A0 (void) /* Opcode $A0: LDY #imm */ { - Cycles = 2; - Regs.YR = MemReadByte (Regs.PC+1); - TEST_ZF (Regs.YR); - TEST_SF (Regs.YR); - Regs.PC += 2; + ALU_OP_IMM (LDY); } @@ -1759,15 +2475,7 @@ static void OPC_6502_A0 (void) static void OPC_6502_A1 (void) /* Opcode $A1: LDA (zp,x) */ { - unsigned char ZPAddr; - unsigned Addr; - Cycles = 6; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - Addr = MemReadZPWord (ZPAddr); - Regs.AC = MemReadByte (Addr); - TEST_ZF (Regs.AC); - TEST_SF (Regs.AC); - Regs.PC += 2; + ALU_OP (ZPXIND, LDA); } @@ -1775,11 +2483,15 @@ static void OPC_6502_A1 (void) static void OPC_6502_A2 (void) /* Opcode $A2: LDX #imm */ { - Cycles = 2; - Regs.XR = MemReadByte (Regs.PC+1); - TEST_ZF (Regs.XR); - TEST_SF (Regs.XR); - Regs.PC += 2; + ALU_OP_IMM (LDX); +} + + + +static void OPC_6502_A3 (void) +/* Opcode $A3: LAX (zp,x) */ +{ + ALU_OP (ZPXIND, LAX); } @@ -1787,13 +2499,7 @@ static void OPC_6502_A2 (void) static void OPC_6502_A4 (void) /* Opcode $A4: LDY zp */ { - unsigned char ZPAddr; - Cycles = 3; - ZPAddr = MemReadByte (Regs.PC+1); - Regs.YR = MemReadByte (ZPAddr); - TEST_ZF (Regs.YR); - TEST_SF (Regs.YR); - Regs.PC += 2; + ALU_OP (ZP, LDY); } @@ -1801,13 +2507,7 @@ static void OPC_6502_A4 (void) static void OPC_6502_A5 (void) /* Opcode $A5: LDA zp */ { - unsigned char ZPAddr; - Cycles = 3; - ZPAddr = MemReadByte (Regs.PC+1); - Regs.AC = MemReadByte (ZPAddr); - TEST_ZF (Regs.AC); - TEST_SF (Regs.AC); - Regs.PC += 2; + ALU_OP (ZP, LDA); } @@ -1815,13 +2515,15 @@ static void OPC_6502_A5 (void) static void OPC_6502_A6 (void) /* Opcode $A6: LDX zp */ { - unsigned char ZPAddr; - Cycles = 3; - ZPAddr = MemReadByte (Regs.PC+1); - Regs.XR = MemReadByte (ZPAddr); - TEST_ZF (Regs.XR); - TEST_SF (Regs.XR); - Regs.PC += 2; + ALU_OP (ZP, LDX); +} + + + +static void OPC_6502_A7 (void) +/* Opcode $A7: LAX zp */ +{ + ALU_OP (ZP, LAX); } @@ -1841,11 +2543,7 @@ static void OPC_6502_A8 (void) static void OPC_6502_A9 (void) /* Opcode $A9: LDA #imm */ { - Cycles = 2; - Regs.AC = MemReadByte (Regs.PC+1); - TEST_ZF (Regs.AC); - TEST_SF (Regs.AC); - Regs.PC += 2; + ALU_OP_IMM (LDA); } @@ -1862,16 +2560,18 @@ static void OPC_6502_AA (void) +static void OPC_6502_AB (void) +/* Opcode $AB: LXA imm */ +{ + ALU_OP_IMM (LXA); +} + + + static void OPC_6502_AC (void) /* Opcode $Regs.AC: LDY abs */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - Regs.YR = MemReadByte (Addr); - TEST_ZF (Regs.YR); - TEST_SF (Regs.YR); - Regs.PC += 3; + ALU_OP (ABS, LDY); } @@ -1879,13 +2579,7 @@ static void OPC_6502_AC (void) static void OPC_6502_AD (void) /* Opcode $AD: LDA abs */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - Regs.AC = MemReadByte (Addr); - TEST_ZF (Regs.AC); - TEST_SF (Regs.AC); - Regs.PC += 3; + ALU_OP (ABS, LDA); } @@ -1893,13 +2587,15 @@ static void OPC_6502_AD (void) static void OPC_6502_AE (void) /* Opcode $AE: LDX abs */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - Regs.XR = MemReadByte (Addr); - TEST_ZF (Regs.XR); - TEST_SF (Regs.XR); - Regs.PC += 3; + ALU_OP (ABS, LDX); +} + + + +static void OPC_6502_AF (void) +/* Opcode $AF: LAX abs */ +{ + ALU_OP (ABS, LAX); } @@ -1915,18 +2611,7 @@ static void OPC_6502_B0 (void) static void OPC_6502_B1 (void) /* Opcode $B1: LDA (zp),y */ { - unsigned char ZPAddr; - unsigned Addr; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Addr = MemReadZPWord (ZPAddr); - if (PAGE_CROSS (Addr, Regs.YR)) { - ++Cycles; - } - Regs.AC = MemReadByte (Addr + Regs.YR); - TEST_ZF (Regs.AC); - TEST_SF (Regs.AC); - Regs.PC += 2; + ALU_OP (ZPINDY, LDA); } @@ -1934,15 +2619,15 @@ static void OPC_6502_B1 (void) static void OPC_65SC02_B2 (void) /* Opcode $B2: LDA (zp) */ { - unsigned char ZPAddr; - unsigned Addr; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Addr = MemReadZPWord (ZPAddr); - Regs.AC = MemReadByte (Addr); - TEST_ZF (Regs.AC); - TEST_SF (Regs.AC); - Regs.PC += 2; + ALU_OP (ZPIND, LDA); +} + + + +static void OPC_6502_B3 (void) +/* Opcode $B3: LAX (zp),y */ +{ + ALU_OP (ZPINDY, LAX); } @@ -1950,13 +2635,7 @@ static void OPC_65SC02_B2 (void) static void OPC_6502_B4 (void) /* Opcode $B4: LDY zp,x */ { - unsigned char ZPAddr; - Cycles = 4; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - Regs.YR = MemReadByte (ZPAddr); - TEST_ZF (Regs.YR); - TEST_SF (Regs.YR); - Regs.PC += 2; + ALU_OP (ZPX, LDY); } @@ -1964,13 +2643,7 @@ static void OPC_6502_B4 (void) static void OPC_6502_B5 (void) /* Opcode $B5: LDA zp,x */ { - unsigned char ZPAddr; - Cycles = 4; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - Regs.AC = MemReadByte (ZPAddr); - TEST_ZF (Regs.AC); - TEST_SF (Regs.AC); - Regs.PC += 2; + ALU_OP (ZPX, LDA); } @@ -1978,13 +2651,15 @@ static void OPC_6502_B5 (void) static void OPC_6502_B6 (void) /* Opcode $B6: LDX zp,y */ { - unsigned char ZPAddr; - Cycles = 4; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.YR; - Regs.XR = MemReadByte (ZPAddr); - TEST_ZF (Regs.XR); - TEST_SF (Regs.XR); - Regs.PC += 2; + ALU_OP (ZPY, LDX); +} + + + +static void OPC_6502_B7 (void) +/* Opcode $B7: LAX zp,y */ +{ + ALU_OP (ZPY, LAX); } @@ -2002,16 +2677,7 @@ static void OPC_6502_B8 (void) static void OPC_6502_B9 (void) /* Opcode $B9: LDA abs,y */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - if (PAGE_CROSS (Addr, Regs.YR)) { - ++Cycles; - } - Regs.AC = MemReadByte (Addr + Regs.YR); - TEST_ZF (Regs.AC); - TEST_SF (Regs.AC); - Regs.PC += 3; + ALU_OP (ABSY, LDA); } @@ -2028,19 +2694,18 @@ static void OPC_6502_BA (void) +static void OPC_6502_BB (void) +/* Opcode $BB: LAS abs,y */ +{ + ALU_OP (ABSY, LAS); +} + + + static void OPC_6502_BC (void) /* Opcode $BC: LDY abs,x */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - if (PAGE_CROSS (Addr, Regs.XR)) { - ++Cycles; - } - Regs.YR = MemReadByte (Addr + Regs.XR); - TEST_ZF (Regs.YR); - TEST_SF (Regs.YR); - Regs.PC += 3; + ALU_OP (ABSX, LDY); } @@ -2048,16 +2713,7 @@ static void OPC_6502_BC (void) static void OPC_6502_BD (void) /* Opcode $BD: LDA abs,x */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - if (PAGE_CROSS (Addr, Regs.XR)) { - ++Cycles; - } - Regs.AC = MemReadByte (Addr + Regs.XR); - TEST_ZF (Regs.AC); - TEST_SF (Regs.AC); - Regs.PC += 3; + ALU_OP (ABSX, LDA); } @@ -2065,16 +2721,15 @@ static void OPC_6502_BD (void) static void OPC_6502_BE (void) /* Opcode $BE: LDX abs,y */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - if (PAGE_CROSS (Addr, Regs.YR)) { - ++Cycles; - } - Regs.XR = MemReadByte (Addr + Regs.YR); - TEST_ZF (Regs.XR); - TEST_SF (Regs.XR); - Regs.PC += 3; + ALU_OP (ABSY, LDX); +} + + + +static void OPC_6502_BF (void) +/* Opcode $BF: LAX abs,y */ +{ + ALU_OP (ABSY, LAX); } @@ -2082,9 +2737,7 @@ static void OPC_6502_BE (void) static void OPC_6502_C0 (void) /* Opcode $C0: CPY #imm */ { - Cycles = 2; - CMP (Regs.YR, MemReadByte (Regs.PC+1)); - Regs.PC += 2; + ALU_OP_IMM (CPY); } @@ -2092,13 +2745,15 @@ static void OPC_6502_C0 (void) static void OPC_6502_C1 (void) /* Opcode $C1: CMP (zp,x) */ { - unsigned char ZPAddr; - unsigned Addr; - Cycles = 6; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - Addr = MemReadZPWord (ZPAddr); - CMP (Regs.AC, MemReadByte (Addr)); - Regs.PC += 2; + ALU_OP (ZPXIND, CMP); +} + + + +static void OPC_6502_C3 (void) +/* Opcode $C3: DCP (zp,x) */ +{ + MEM_OP (ZPXIND, DCP); } @@ -2106,11 +2761,7 @@ static void OPC_6502_C1 (void) static void OPC_6502_C4 (void) /* Opcode $C4: CPY zp */ { - unsigned char ZPAddr; - Cycles = 3; - ZPAddr = MemReadByte (Regs.PC+1); - CMP (Regs.YR, MemReadByte (ZPAddr)); - Regs.PC += 2; + ALU_OP (ZP, CPY); } @@ -2118,11 +2769,7 @@ static void OPC_6502_C4 (void) static void OPC_6502_C5 (void) /* Opcode $C5: CMP zp */ { - unsigned char ZPAddr; - Cycles = 3; - ZPAddr = MemReadByte (Regs.PC+1); - CMP (Regs.AC, MemReadByte (ZPAddr)); - Regs.PC += 2; + ALU_OP (ZP, CMP); } @@ -2130,15 +2777,15 @@ static void OPC_6502_C5 (void) static void OPC_6502_C6 (void) /* Opcode $C6: DEC zp */ { - unsigned char ZPAddr; - unsigned char Val; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Val = MemReadByte (ZPAddr) - 1; - MemWriteByte (ZPAddr, Val); - TEST_ZF (Val); - TEST_SF (Val); - Regs.PC += 2; + MEM_OP (ZP, DEC); +} + + + +static void OPC_6502_C7 (void) +/* Opcode $C7: DCP zp */ +{ + MEM_OP (ZP, DCP); } @@ -2147,9 +2794,7 @@ static void OPC_6502_C8 (void) /* Opcode $C8: INY */ { Cycles = 2; - Regs.YR = (Regs.YR + 1) & 0xFF; - TEST_ZF (Regs.YR); - TEST_SF (Regs.YR); + INC(Regs.YR); Regs.PC += 1; } @@ -2158,9 +2803,7 @@ static void OPC_6502_C8 (void) static void OPC_6502_C9 (void) /* Opcode $C9: CMP #imm */ { - Cycles = 2; - CMP (Regs.AC, MemReadByte (Regs.PC+1)); - Regs.PC += 2; + ALU_OP_IMM (CMP); } @@ -2169,22 +2812,24 @@ static void OPC_6502_CA (void) /* Opcode $CA: DEX */ { Cycles = 2; - Regs.XR = (Regs.XR - 1) & 0xFF; - TEST_ZF (Regs.XR); - TEST_SF (Regs.XR); + DEC (Regs.XR); Regs.PC += 1; } +static void OPC_6502_CB (void) +/* Opcode $CB: SBX imm */ +{ + ALU_OP_IMM (SBX); +} + + + static void OPC_6502_CC (void) /* Opcode $CC: CPY abs */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - CMP (Regs.YR, MemReadByte (Addr)); - Regs.PC += 3; + ALU_OP (ABS, CPY); } @@ -2192,11 +2837,7 @@ static void OPC_6502_CC (void) static void OPC_6502_CD (void) /* Opcode $CD: CMP abs */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - CMP (Regs.AC, MemReadByte (Addr)); - Regs.PC += 3; + ALU_OP (ABS, CMP); } @@ -2204,15 +2845,15 @@ static void OPC_6502_CD (void) static void OPC_6502_CE (void) /* Opcode $CE: DEC abs */ { - unsigned Addr; - unsigned char Val; - Cycles = 6; - Addr = MemReadWord (Regs.PC+1); - Val = MemReadByte (Addr) - 1; - MemWriteByte (Addr, Val); - TEST_ZF (Val); - TEST_SF (Val); - Regs.PC += 3; + MEM_OP (ABS, DEC); +} + + + +static void OPC_6502_CF (void) +/* Opcode $CF: DCP abs */ +{ + MEM_OP (ABS, DCP); } @@ -2228,16 +2869,7 @@ static void OPC_6502_D0 (void) static void OPC_6502_D1 (void) /* Opcode $D1: CMP (zp),y */ { - unsigned ZPAddr; - unsigned Addr; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Addr = MemReadWord (ZPAddr); - if (PAGE_CROSS (Addr, Regs.YR)) { - ++Cycles; - } - CMP (Regs.AC, MemReadByte (Addr + Regs.YR)); - Regs.PC += 2; + ALU_OP (ZPINDY, CMP); } @@ -2245,13 +2877,15 @@ static void OPC_6502_D1 (void) static void OPC_65SC02_D2 (void) /* Opcode $D2: CMP (zp) */ { - unsigned ZPAddr; - unsigned Addr; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Addr = MemReadWord (ZPAddr); - CMP (Regs.AC, MemReadByte (Addr)); - Regs.PC += 2; + ALU_OP (ZPIND, CMP); +} + + + +static void OPC_6502_D3 (void) +/* Opcode $D3: DCP (zp),y */ +{ + MEM_OP (ZPINDY, DCP); } @@ -2259,11 +2893,7 @@ static void OPC_65SC02_D2 (void) static void OPC_6502_D5 (void) /* Opcode $D5: CMP zp,x */ { - unsigned char ZPAddr; - Cycles = 4; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - CMP (Regs.AC, MemReadByte (ZPAddr)); - Regs.PC += 2; + ALU_OP (ZPX, CMP); } @@ -2271,15 +2901,15 @@ static void OPC_6502_D5 (void) static void OPC_6502_D6 (void) /* Opcode $D6: DEC zp,x */ { - unsigned char ZPAddr; - unsigned char Val; - Cycles = 6; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - Val = MemReadByte (ZPAddr) - 1; - MemWriteByte (ZPAddr, Val); - TEST_ZF (Val); - TEST_SF (Val); - Regs.PC += 2; + MEM_OP (ZPX, DEC); +} + + + +static void OPC_6502_D7 (void) +/* Opcode $D7: DCP zp,x */ +{ + MEM_OP (ZPX, DCP); } @@ -2297,14 +2927,7 @@ static void OPC_6502_D8 (void) static void OPC_6502_D9 (void) /* Opcode $D9: CMP abs,y */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - if (PAGE_CROSS (Addr, Regs.YR)) { - ++Cycles; - } - CMP (Regs.AC, MemReadByte (Addr + Regs.YR)); - Regs.PC += 3; + ALU_OP (ABSY, CMP); } @@ -2319,17 +2942,18 @@ static void OPC_65SC02_DA (void) +static void OPC_6502_DB (void) +/* Opcode $DB: DCP abs,y */ +{ + MEM_OP (ABSY, DCP); +} + + + static void OPC_6502_DD (void) /* Opcode $DD: CMP abs,x */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - if (PAGE_CROSS (Addr, Regs.XR)) { - ++Cycles; - } - CMP (Regs.AC, MemReadByte (Addr + Regs.XR)); - Regs.PC += 3; + ALU_OP (ABSX, CMP); } @@ -2337,15 +2961,15 @@ static void OPC_6502_DD (void) static void OPC_6502_DE (void) /* Opcode $DE: DEC abs,x */ { - unsigned Addr; - unsigned char Val; - Cycles = 7; - Addr = MemReadWord (Regs.PC+1) + Regs.XR; - Val = MemReadByte (Addr) - 1; - MemWriteByte (Addr, Val); - TEST_ZF (Val); - TEST_SF (Val); - Regs.PC += 3; + MEM_OP (ABSX, DEC); +} + + + +static void OPC_6502_DF (void) +/* Opcode $DF: DCP abs,x */ +{ + MEM_OP (ABSX, DCP); } @@ -2353,9 +2977,7 @@ static void OPC_6502_DE (void) static void OPC_6502_E0 (void) /* Opcode $E0: CPX #imm */ { - Cycles = 2; - CMP (Regs.XR, MemReadByte (Regs.PC+1)); - Regs.PC += 2; + ALU_OP_IMM (CPX); } @@ -2363,13 +2985,15 @@ static void OPC_6502_E0 (void) static void OPC_6502_E1 (void) /* Opcode $E1: SBC (zp,x) */ { - unsigned char ZPAddr; - unsigned Addr; - Cycles = 6; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - Addr = MemReadZPWord (ZPAddr); - SBC (MemReadByte (Addr)); - Regs.PC += 2; + ALU_OP (ZPXIND, SBC); +} + + + +static void OPC_6502_E3 (void) +/* Opcode $E3: ISC (zp,x) */ +{ + MEM_OP (ZPXIND, ISC); } @@ -2377,11 +3001,7 @@ static void OPC_6502_E1 (void) static void OPC_6502_E4 (void) /* Opcode $E4: CPX zp */ { - unsigned char ZPAddr; - Cycles = 3; - ZPAddr = MemReadByte (Regs.PC+1); - CMP (Regs.XR, MemReadByte (ZPAddr)); - Regs.PC += 2; + ALU_OP (ZP, CPX); } @@ -2389,11 +3009,7 @@ static void OPC_6502_E4 (void) static void OPC_6502_E5 (void) /* Opcode $E5: SBC zp */ { - unsigned char ZPAddr; - Cycles = 3; - ZPAddr = MemReadByte (Regs.PC+1); - SBC (MemReadByte (ZPAddr)); - Regs.PC += 2; + ALU_OP (ZP, SBC); } @@ -2401,15 +3017,15 @@ static void OPC_6502_E5 (void) static void OPC_6502_E6 (void) /* Opcode $E6: INC zp */ { - unsigned char ZPAddr; - unsigned char Val; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Val = MemReadByte (ZPAddr) + 1; - MemWriteByte (ZPAddr, Val); - TEST_ZF (Val); - TEST_SF (Val); - Regs.PC += 2; + MEM_OP (ZP, INC); +} + + + +static void OPC_6502_E7 (void) +/* Opcode $E7: ISC zp */ +{ + MEM_OP (ZP, ISC); } @@ -2418,24 +3034,31 @@ static void OPC_6502_E8 (void) /* Opcode $E8: INX */ { Cycles = 2; - Regs.XR = (Regs.XR + 1) & 0xFF; - TEST_ZF (Regs.XR); - TEST_SF (Regs.XR); + INC (Regs.XR); Regs.PC += 1; } +/* Aliases of opcode $EA */ +#define OPC_6502_EB OPC_6502_E9 + static void OPC_6502_E9 (void) /* Opcode $E9: SBC #imm */ { - Cycles = 2; - SBC (MemReadByte (Regs.PC+1)); - Regs.PC += 2; + ALU_OP_IMM (SBC); } +/* Aliases of opcode $EA */ +#define OPC_6502_1A OPC_6502_EA +#define OPC_6502_3A OPC_6502_EA +#define OPC_6502_5A OPC_6502_EA +#define OPC_6502_7A OPC_6502_EA +#define OPC_6502_DA OPC_6502_EA +#define OPC_6502_FA OPC_6502_EA + static void OPC_6502_EA (void) /* Opcode $EA: NOP */ { @@ -2485,11 +3108,7 @@ static void OPC_65C02_NOP34 (void) static void OPC_6502_EC (void) /* Opcode $EC: CPX abs */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - CMP (Regs.XR, MemReadByte (Addr)); - Regs.PC += 3; + ALU_OP (ABS, CPX); } @@ -2497,27 +3116,22 @@ static void OPC_6502_EC (void) static void OPC_6502_ED (void) /* Opcode $ED: SBC abs */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - SBC (MemReadByte (Addr)); - Regs.PC += 3; + ALU_OP (ABS, SBC); } - static void OPC_6502_EE (void) /* Opcode $EE: INC abs */ { - unsigned Addr; - unsigned char Val; - Cycles = 6; - Addr = MemReadWord (Regs.PC+1); - Val = MemReadByte (Addr) + 1; - MemWriteByte (Addr, Val); - TEST_ZF (Val); - TEST_SF (Val); - Regs.PC += 3; + MEM_OP (ABS, INC); +} + + + +static void OPC_6502_EF (void) +/* Opcode $EF: ISC abs */ +{ + MEM_OP (ABS, ISC); } @@ -2533,16 +3147,7 @@ static void OPC_6502_F0 (void) static void OPC_6502_F1 (void) /* Opcode $F1: SBC (zp),y */ { - unsigned char ZPAddr; - unsigned Addr; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Addr = MemReadZPWord (ZPAddr); - if (PAGE_CROSS (Addr, Regs.YR)) { - ++Cycles; - } - SBC (MemReadByte (Addr + Regs.YR)); - Regs.PC += 2; + ALU_OP (ZPINDY, SBC); } @@ -2550,13 +3155,15 @@ static void OPC_6502_F1 (void) static void OPC_65SC02_F2 (void) /* Opcode $F2: SBC (zp) */ { - unsigned char ZPAddr; - unsigned Addr; - Cycles = 5; - ZPAddr = MemReadByte (Regs.PC+1); - Addr = MemReadZPWord (ZPAddr); - SBC (MemReadByte (Addr)); - Regs.PC += 2; + ALU_OP (ZPIND, SBC); +} + + + +static void OPC_6502_F3 (void) +/* Opcode $F3: ISC (zp),y */ +{ + MEM_OP (ZPINDY, ISC); } @@ -2564,11 +3171,7 @@ static void OPC_65SC02_F2 (void) static void OPC_6502_F5 (void) /* Opcode $F5: SBC zp,x */ { - unsigned char ZPAddr; - Cycles = 4; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - SBC (MemReadByte (ZPAddr)); - Regs.PC += 2; + ALU_OP (ZPX, SBC); } @@ -2576,15 +3179,15 @@ static void OPC_6502_F5 (void) static void OPC_6502_F6 (void) /* Opcode $F6: INC zp,x */ { - unsigned char ZPAddr; - unsigned char Val; - Cycles = 6; - ZPAddr = MemReadByte (Regs.PC+1) + Regs.XR; - Val = MemReadByte (ZPAddr) + 1; - MemWriteByte (ZPAddr, Val); - TEST_ZF (Val); - TEST_SF (Val); - Regs.PC += 2; + MEM_OP (ZPX, INC); +} + + + +static void OPC_6502_F7 (void) +/* Opcode $F7: ISC zp,x */ +{ + MEM_OP (ZPX, ISC); } @@ -2602,14 +3205,7 @@ static void OPC_6502_F8 (void) static void OPC_6502_F9 (void) /* Opcode $F9: SBC abs,y */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - if (PAGE_CROSS (Addr, Regs.YR)) { - ++Cycles; - } - SBC (MemReadByte (Addr + Regs.YR)); - Regs.PC += 3; + ALU_OP (ABSY, SBC); } @@ -2626,17 +3222,18 @@ static void OPC_65SC02_FA (void) +static void OPC_6502_FB (void) +/* Opcode $FB: ISC abs,y */ +{ + MEM_OP (ABSY, ISC); +} + + + static void OPC_6502_FD (void) /* Opcode $FD: SBC abs,x */ { - unsigned Addr; - Cycles = 4; - Addr = MemReadWord (Regs.PC+1); - if (PAGE_CROSS (Addr, Regs.XR)) { - ++Cycles; - } - SBC (MemReadByte (Addr + Regs.XR)); - Regs.PC += 3; + ALU_OP (ABSX, SBC); } @@ -2644,15 +3241,15 @@ static void OPC_6502_FD (void) static void OPC_6502_FE (void) /* Opcode $FE: INC abs,x */ { - unsigned Addr; - unsigned char Val; - Cycles = 7; - Addr = MemReadWord (Regs.PC+1) + Regs.XR; - Val = MemReadByte (Addr) + 1; - MemWriteByte (Addr, Val); - TEST_ZF (Val); - TEST_SF (Val); - Regs.PC += 3; + MEM_OP (ABSX, INC); +} + + + +static void OPC_6502_FF (void) +/* Opcode $FF: ISC abs,x */ +{ + MEM_OP (ABSX, ISC); } @@ -2925,6 +3522,268 @@ static const OPFunc OP6502Table[256] = { +/* Opcode handler table for the 6502X */ +static const OPFunc OP6502XTable[256] = { + OPC_6502_00, + OPC_6502_01, + OPC_Illegal, + OPC_6502_03, + OPC_6502_04, + OPC_6502_05, + OPC_6502_06, + OPC_6502_07, + OPC_6502_08, + OPC_6502_09, + OPC_6502_0A, + OPC_6502_0B, + OPC_6502_0C, + OPC_6502_0D, + OPC_6502_0E, + OPC_6502_0F, + OPC_6502_10, + OPC_6502_11, + OPC_Illegal, + OPC_6502_13, + OPC_6502_14, + OPC_6502_15, + OPC_6502_16, + OPC_6502_17, + OPC_6502_18, + OPC_6502_19, + OPC_6502_1A, + OPC_6502_1B, + OPC_6502_1C, + OPC_6502_1D, + OPC_6502_1E, + OPC_6502_1F, + OPC_6502_20, + OPC_6502_21, + OPC_Illegal, + OPC_6502_23, + OPC_6502_24, + OPC_6502_25, + OPC_6502_26, + OPC_6502_27, + OPC_6502_28, + OPC_6502_29, + OPC_6502_2A, + OPC_6502_2B, + OPC_6502_2C, + OPC_6502_2D, + OPC_6502_2E, + OPC_6502_2F, + OPC_6502_30, + OPC_6502_31, + OPC_Illegal, + OPC_6502_33, + OPC_6502_34, + OPC_6502_35, + OPC_6502_36, + OPC_6502_37, + OPC_6502_38, + OPC_6502_39, + OPC_6502_3A, + OPC_6502_3B, + OPC_6502_3C, + OPC_6502_3D, + OPC_6502_3E, + OPC_6502_3F, + OPC_6502_40, + OPC_6502_41, + OPC_Illegal, + OPC_6502_43, + OPC_6502_44, + OPC_6502_45, + OPC_6502_46, + OPC_6502_47, + OPC_6502_48, + OPC_6502_49, + OPC_6502_4A, + OPC_6502_4B, + OPC_6502_4C, + OPC_6502_4D, + OPC_6502_4E, + OPC_6502_4F, + OPC_6502_50, + OPC_6502_51, + OPC_Illegal, + OPC_6502_53, + OPC_6502_54, + OPC_6502_55, + OPC_6502_56, + OPC_6502_57, + OPC_6502_58, + OPC_6502_59, + OPC_6502_5A, + OPC_6502_5B, + OPC_6502_5C, + OPC_6502_5D, + OPC_6502_5E, + OPC_6502_5F, + OPC_6502_60, + OPC_6502_61, + OPC_Illegal, + OPC_6502_63, + OPC_6502_64, + OPC_6502_65, + OPC_6502_66, + OPC_6502_67, + OPC_6502_68, + OPC_6502_69, + OPC_6502_6A, + OPC_6502_6B, + OPC_6502_6C, + OPC_6502_6D, + OPC_6502_6E, + OPC_6502_6F, + OPC_6502_70, + OPC_6502_71, + OPC_Illegal, + OPC_6502_73, + OPC_6502_74, + OPC_6502_75, + OPC_6502_76, + OPC_6502_77, + OPC_6502_78, + OPC_6502_79, + OPC_6502_7A, + OPC_6502_7B, + OPC_6502_7C, + OPC_6502_7D, + OPC_6502_7E, + OPC_6502_7F, + OPC_6502_80, + OPC_6502_81, + OPC_6502_82, + OPC_6502_83, + OPC_6502_84, + OPC_6502_85, + OPC_6502_86, + OPC_6502_87, + OPC_6502_88, + OPC_6502_89, + OPC_6502_8A, + OPC_6502_8B, + OPC_6502_8C, + OPC_6502_8D, + OPC_6502_8E, + OPC_6502_8F, + OPC_6502_90, + OPC_6502_91, + OPC_Illegal, + OPC_6502_93, + OPC_6502_94, + OPC_6502_95, + OPC_6502_96, + OPC_6502_97, + OPC_6502_98, + OPC_6502_99, + OPC_6502_9A, + OPC_6502_9B, + OPC_6502_9C, + OPC_6502_9D, + OPC_6502_9E, + OPC_6502_9F, + OPC_6502_A0, + OPC_6502_A1, + OPC_6502_A2, + OPC_6502_A3, + OPC_6502_A4, + OPC_6502_A5, + OPC_6502_A6, + OPC_6502_A7, + OPC_6502_A8, + OPC_6502_A9, + OPC_6502_AA, + OPC_6502_AB, + OPC_6502_AC, + OPC_6502_AD, + OPC_6502_AE, + OPC_6502_AF, + OPC_6502_B0, + OPC_6502_B1, + OPC_Illegal, + OPC_6502_B3, + OPC_6502_B4, + OPC_6502_B5, + OPC_6502_B6, + OPC_6502_B7, + OPC_6502_B8, + OPC_6502_B9, + OPC_6502_BA, + OPC_6502_BB, + OPC_6502_BC, + OPC_6502_BD, + OPC_6502_BE, + OPC_6502_BF, + OPC_6502_C0, + OPC_6502_C1, + OPC_6502_C2, + OPC_6502_C3, + OPC_6502_C4, + OPC_6502_C5, + OPC_6502_C6, + OPC_6502_C7, + OPC_6502_C8, + OPC_6502_C9, + OPC_6502_CA, + OPC_6502_CB, + OPC_6502_CC, + OPC_6502_CD, + OPC_6502_CE, + OPC_6502_CF, + OPC_6502_D0, + OPC_6502_D1, + OPC_Illegal, + OPC_6502_D3, + OPC_6502_D4, + OPC_6502_D5, + OPC_6502_D6, + OPC_6502_D7, + OPC_6502_D8, + OPC_6502_D9, + OPC_6502_DA, + OPC_6502_DB, + OPC_6502_DC, + OPC_6502_DD, + OPC_6502_DE, + OPC_6502_DF, + OPC_6502_E0, + OPC_6502_E1, + OPC_6502_E2, + OPC_6502_E3, + OPC_6502_E4, + OPC_6502_E5, + OPC_6502_E6, + OPC_6502_E7, + OPC_6502_E8, + OPC_6502_E9, + OPC_6502_EA, + OPC_6502_EB, + OPC_6502_EC, + OPC_6502_ED, + OPC_6502_EE, + OPC_6502_EF, + OPC_6502_F0, + OPC_6502_F1, + OPC_Illegal, + OPC_6502_F3, + OPC_6502_F4, + OPC_6502_F5, + OPC_6502_F6, + OPC_6502_F7, + OPC_6502_F8, + OPC_6502_F9, + OPC_6502_FA, + OPC_6502_FB, + OPC_6502_FC, + OPC_6502_FD, + OPC_6502_FE, + OPC_6502_FF +}; + + + /* Opcode handler table for the 65C02 */ static const OPFunc OP65C02Table[256] = { OPC_6502_00, @@ -2957,7 +3816,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_NOP11, // $1B OPC_65SC02_1C, OPC_6502_1D, - OPC_6502_1E, + OPC_65C02_1E, OPC_Illegal, // $1F: BBR1 currently unsupported OPC_6502_20, OPC_6502_21, @@ -2989,13 +3848,13 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_NOP11, // $3B OPC_65SC02_3C, OPC_6502_3D, - OPC_6502_3E, + OPC_65C02_3E, OPC_Illegal, // $3F: BBR3 currently unsupported OPC_6502_40, OPC_6502_41, OPC_65C02_NOP22, // $42 OPC_65C02_NOP11, // $43 - OPC_65C02_44, // $44 + OPC_6502_44, // $44 OPC_6502_45, OPC_6502_46, OPC_Illegal, // $47: RMB4 currently unsupported @@ -3021,7 +3880,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_NOP11, // $5B OPC_65C02_5C, OPC_6502_5D, - OPC_6502_5E, + OPC_65C02_5E, OPC_Illegal, // $5F: BBR5 currently unsupported OPC_6502_60, OPC_6502_61, @@ -3053,7 +3912,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_NOP11, // $7B OPC_65SC02_7C, OPC_6502_7D, - OPC_6502_7E, + OPC_65C02_7E, OPC_Illegal, // $7F: BBR7 currently unsupported OPC_65SC02_80, OPC_6502_81, @@ -3188,7 +4047,11 @@ static const OPFunc OP65C02Table[256] = { /* Tables with opcode handlers */ -static const OPFunc* Handlers[2] = {OP6502Table, OP65C02Table}; +static const OPFunc* Handlers[3] = { + OP6502Table, + OP65C02Table, + OP6502XTable +}; diff --git a/src/sim65/6502.h b/src/sim65/6502.h index 39b995793..a7a702521 100644 --- a/src/sim65/6502.h +++ b/src/sim65/6502.h @@ -47,7 +47,8 @@ /* Supported CPUs */ typedef enum CPUType { CPU_6502, - CPU_65C02 + CPU_65C02, + CPU_6502X } CPUType; /* Current CPU */ diff --git a/src/sim65/main.c b/src/sim65/main.c index 3c7cdc157..76c912c6b 100644 --- a/src/sim65/main.c +++ b/src/sim65/main.c @@ -177,10 +177,16 @@ static unsigned char ReadProgramFile (void) /* Get the CPU type from the file header */ if ((Val = fgetc(F)) != EOF) { - if (Val != CPU_6502 && Val != CPU_65C02) { + switch (Val) { + case CPU_6502: + case CPU_65C02: + case CPU_6502X: + CPU = Val; + break; + + default: Error ("'%s': Invalid CPU type", ProgramFile); } - CPU = Val; } /* Get the address of sp from the file header */ From 788ae82d30bcf29da0e160cd47532594780fe22b Mon Sep 17 00:00:00 2001 From: Alex Thissen <alex.thissen@xebia.com> Date: Fri, 9 Feb 2024 00:09:16 +0000 Subject: [PATCH 2407/2710] Fixes to serial driver implementation --- asminc/lynx.inc | 34 +++++++------- libsrc/lynx/crt0.s | 2 +- libsrc/lynx/ser/lynx-comlynx.s | 81 ++++++++++++++++++++-------------- 3 files changed, 67 insertions(+), 50 deletions(-) diff --git a/asminc/lynx.inc b/asminc/lynx.inc index 5ae17f6ef..d65b7f8a9 100644 --- a/asminc/lynx.inc +++ b/asminc/lynx.inc @@ -267,22 +267,26 @@ MIKEYHREV = $FD88 MIKEYSREV = $FD89 IODIR = $FD8A IODAT = $FD8B -TxIntEnable = %10000000 -RxIntEnable = %01000000 -TxParEnable = %00010000 -ResetErr = %00001000 -TxOpenColl = %00000100 -TxBreak = %00000010 -ParEven = %00000001 -TxReady = %10000000 -RxReady = %01000000 -TxEmpty = %00100000 -RxParityErr = %00010000 -RxOverrun = %00001000 -RxFrameErr = %00000100 -RxBreak = %00000010 -ParityBit = %00000001 + SERCTL = $FD8C +; SERCTL bit definitions for write operations +TXINTEN = $80 +RXINTEN = $40 +PAREN = $10 +RESETERR = $08 +TXOPEN = $04 +TXBRK = $02 +PAREVEN = $01 +; SERCTL bit definitions for read operations +TXRDY = $80 +RXRDY = $40 +TXEMPTY = $20 +PARERR = $10 +OVERRUN = $08 +FRAMERR = $04 +RXBRK = $02 +PARBIT = $01 + SERDAT = $FD8D SDONEACK = $FD90 CPUSLEEP = $FD91 diff --git a/libsrc/lynx/crt0.s b/libsrc/lynx/crt0.s index 238a2c99d..030f523e9 100644 --- a/libsrc/lynx/crt0.s +++ b/libsrc/lynx/crt0.s @@ -68,7 +68,7 @@ MikeyInitData: .byte $9e,$18,$68,$1f,$00,$00,$00,$00,$00,$ff,$1a,$1b,$04,$0d,$2 ; Disable the TX/RX IRQ; set to 8E1. - lda #%00011101 + lda #PAREN|RESETERR|TXOPEN|PAREVEN ; #%00011101 sta SERCTL ; Clear all pending interrupts. diff --git a/libsrc/lynx/ser/lynx-comlynx.s b/libsrc/lynx/ser/lynx-comlynx.s index 8aa3c838e..85703867b 100644 --- a/libsrc/lynx/ser/lynx-comlynx.s +++ b/libsrc/lynx/ser/lynx-comlynx.s @@ -73,7 +73,12 @@ SER_UNINSTALL: ; Must return an SER_ERR_xx code in a/x. SER_CLOSE: - ; Disable interrupts + ; Disable interrupts and stop timer 4 (serial) + lda #$0C ; TXOPEN|RESETERR + sta SERCTL + lda #$00 ; Disable count and no reload + sta TIM4CTLA + ; Done, return an error code lda #SER_ERR_OK .assert SER_ERR_OK = 0, error @@ -108,7 +113,7 @@ SER_OPEN: stz TxPtrIn stz TxPtrOut - ; clock = 8 * 15625 + ; source period is 1 us lda #%00011000 sta TIM4CTLA ldy #SER_PARAMS::BAUDRATE @@ -118,7 +123,7 @@ SER_OPEN: cmp #SER_BAUD_62500 beq setbaudrate - ldx #2 + ldx #3 cmp #SER_BAUD_31250 beq setbaudrate @@ -194,13 +199,14 @@ SER_OPEN: lda #SER_ERR_BAUD_UNAVAIL ldx #0 ; return value is char rts + setprescaler: stx TIM4CTLA bra baudsuccess setbaudrate: stx TIM4BKUP baudsuccess: - ldx #TxOpenColl|ParEven + ldx #TXOPEN|PAREVEN stx contrl ldy #SER_PARAMS::DATABITS ; Databits lda (ptr1),y @@ -218,15 +224,15 @@ baudsuccess: beq checkhs cmp #SER_PAR_SPACE bne @L0 - ldx #TxOpenColl + ldx #TXOPEN stx contrl bra checkhs @L0: - ldx #TxParEnable|TxOpenColl|ParEven + ldx #PAREN|TXOPEN|PAREVEN stx contrl cmp #SER_PAR_EVEN beq checkhs - ldx #TxParEnable|TxOpenColl + ldx #PAREN|TXOPEN stx contrl checkhs: ldx contrl @@ -237,7 +243,7 @@ checkhs: bne invparameter lda SERDAT lda contrl - ora #RxIntEnable|ResetErr + ora #RXINTEN|RESETERR ; Turn on interrupts for receive sta SERCTL lda #SER_ERR_OK .assert SER_ERR_OK = 0, error @@ -279,24 +285,26 @@ SER_PUT: ina cmp TxPtrOut bne PutByte + lda #SER_ERR_OVERFLOW ldx #0 ; return value is char rts + PutByte: ldy TxPtrIn txa sta TxBuffer,y inc TxPtrIn - bit TxDone - bmi @L1 + bit TxDone ; Check bit 7 of TxDone (TXINTEN) + bmi @L1 ; Was TXINTEN already set? php sei - lda contrl - ora #TxIntEnable|ResetErr - sta SERCTL ; Allow TX-IRQ to hang RX-IRQ + lda contrl ; contrl does not include RXINTEN setting + ora #TXINTEN|RESETERR + sta SERCTL ; Allow TX-IRQ to hang RX-IRQ (no receive while transmitting) sta TxDone - plp + plp ; Restore processor and interrupt enable @L1: lda #SER_ERR_OK .assert SER_ERR_OK = 0, error @@ -308,7 +316,7 @@ PutByte: ; Must return an SER_ERR_xx code in a/x. SER_STATUS: - ldy SerialStat + lda SerialStat ldx #$00 sta (ptr1,x) txa ; Return code = 0 @@ -342,27 +350,32 @@ SER_IRQ: @L0: bit TxDone bmi @tx_irq ; Transmit in progress - ldx SERDAT - lda SERCTL - and #RxParityErr|RxOverrun|RxFrameErr|RxBreak - beq @rx_irq + + ldx SERDAT ; Read received data + lda contrl + and #PAREN ; Parity enabled implies SER_PAR_EVEN or SER_PAR_ODD + ora #OVERRUN|FRAMERR|RXBRK + bit SERCTL ; Compare with SERCTL + + beq @rx_irq ; No errors so far + tsb SerialStat ; Save error condition - bit #RxBreak + bit #RXBRK ; Check for break signal beq @noBreak + stz TxPtrIn ; Break received - drop buffers stz TxPtrOut stz RxPtrIn stz RxPtrOut @noBreak: lda contrl - ora #RxIntEnable|ResetErr + ora #RXINTEN|RESETERR sta SERCTL - lda #$10 - sta INTRST bra @IRQexit + @rx_irq: lda contrl - ora #RxIntEnable|ResetErr + ora #RXINTEN|RESETERR sta SERCTL txa ldx RxPtrIn @@ -370,20 +383,22 @@ SER_IRQ: txa inx -@cont0: cpx RxPtrOut beq @1 stx RxPtrIn - lda #SERIAL_INTERRUPT - sta INTRST bra @IRQexit @1: sta RxPtrIn lda #$80 tsb SerialStat + lda contrl + ora #RXINTEN|RESETERR + sta SERCTL + bra @IRQexit + @tx_irq: - ldx TxPtrOut ; Has all bytes been sent? + ldx TxPtrOut ; Have all bytes been sent? cpx TxPtrIn beq @allSent @@ -393,24 +408,22 @@ SER_IRQ: @exit1: lda contrl - ora #TxIntEnable|ResetErr + ora #TXINTEN|RESETERR sta SERCTL - lda #SERIAL_INTERRUPT - sta INTRST bra @IRQexit @allSent: lda SERCTL ; All bytes sent - bit #TxEmpty + bit #TXEMPTY beq @exit1 bvs @exit1 stz TxDone lda contrl - ora #RxIntEnable|ResetErr + ora #RXINTEN|RESETERR ; Re-enable receive interrupt sta SERCTL +@IRQexit: lda #SERIAL_INTERRUPT sta INTRST -@IRQexit: clc rts From 014f85f226b38f434722ecc085d621e9d3d730d1 Mon Sep 17 00:00:00 2001 From: Alex Thissen <alex.thissen@xebia.com> Date: Fri, 9 Feb 2024 10:42:52 +0000 Subject: [PATCH 2408/2710] Fixed baud rates --- libsrc/lynx/ser/lynx-comlynx.s | 86 +++++++++++++--------------------- 1 file changed, 33 insertions(+), 53 deletions(-) diff --git a/libsrc/lynx/ser/lynx-comlynx.s b/libsrc/lynx/ser/lynx-comlynx.s index 85703867b..9564bcb4f 100644 --- a/libsrc/lynx/ser/lynx-comlynx.s +++ b/libsrc/lynx/ser/lynx-comlynx.s @@ -113,12 +113,12 @@ SER_OPEN: stz TxPtrIn stz TxPtrOut - ; source period is 1 us - lda #%00011000 - sta TIM4CTLA ldy #SER_PARAMS::BAUDRATE lda (ptr1),y + ; Source period is 1 us + ldy #%00011000 ; ENABLE_RELOAD|ENABLE_COUNT|AUD_1 + ldx #1 cmp #SER_BAUD_62500 beq setbaudrate @@ -139,6 +139,10 @@ SER_OPEN: cmp #SER_BAUD_2400 beq setbaudrate + ldx #68 + cmp #SER_BAUD_1800 + beq setbaudrate + ldx #103 cmp #SER_BAUD_1200 beq setbaudrate @@ -147,65 +151,48 @@ SER_OPEN: cmp #SER_BAUD_600 beq setbaudrate - ; clock = 6 * 15625 - ldx #%00011010 - stx TIM4CTLA + ; Source period is 4 us + ldy #%00011011 ; ENABLE_RELOAD|ENABLE_COUNT|AUD_8 - ldx #12 - cmp #SER_BAUD_7200 - beq setbaudrate - - ldx #25 - cmp #SER_BAUD_3600 - beq setbaudrate - - ldx #207 - stx TIM4BKUP - - ; clock = 4 * 15625 - ldx #%00011100 + ldx #51 cmp #SER_BAUD_300 - beq setprescaler + beq setbaudrate - ; clock = 6 * 15625 - ldx #%00011110 + ldx #103 cmp #SER_BAUD_150 - beq setprescaler + beq setbaudrate - ; clock = 1 * 15625 - ldx #%00011111 - stx TIM4CTLA - cmp #SER_BAUD_75 - beq baudsuccess + ldx #115 + cmp #SER_BAUD_134_5 + beq setbaudrate ldx #141 cmp #SER_BAUD_110 beq setbaudrate - ; clock = 2 * 15625 - ldx #%00011010 - stx TIM4CTLA - ldx #68 - cmp #SER_BAUD_1800 + ; Source period is 32 us + ldy #%00011101 ; ENABLE_RELOAD|ENABLE_COUNT|AUD_32 + + ldx #51 + cmp #SER_BAUD_75 beq setbaudrate - ; clock = 6 * 15625 - ldx #%00011110 - stx TIM4CTLA - ldx #231 - cmp #SER_BAUD_134_5 + ldx #68 + cmp #SER_BAUD_56_875 + beq setbaudrate + + ldx #77 + cmp #SER_BAUD_50 beq setbaudrate lda #SER_ERR_BAUD_UNAVAIL ldx #0 ; return value is char rts -setprescaler: - stx TIM4CTLA - bra baudsuccess setbaudrate: + sty TIM4CTLA stx TIM4BKUP -baudsuccess: + ldx #TXOPEN|PAREVEN stx contrl ldy #SER_PARAMS::DATABITS ; Databits @@ -368,15 +355,9 @@ SER_IRQ: stz RxPtrIn stz RxPtrOut @noBreak: - lda contrl - ora #RXINTEN|RESETERR - sta SERCTL - bra @IRQexit + bra @exit0 @rx_irq: - lda contrl - ora #RXINTEN|RESETERR - sta SERCTL txa ldx RxPtrIn sta RxBuffer,x @@ -392,10 +373,7 @@ SER_IRQ: sta RxPtrIn lda #$80 tsb SerialStat - lda contrl - ora #RXINTEN|RESETERR - sta SERCTL - bra @IRQexit + bra @exit0 @tx_irq: ldx TxPtrOut ; Have all bytes been sent? @@ -418,6 +396,8 @@ SER_IRQ: beq @exit1 bvs @exit1 stz TxDone + +@exit0: lda contrl ora #RXINTEN|RESETERR ; Re-enable receive interrupt sta SERCTL From 65bce9ecdeda7a2214a27fafa4ccbfcd5daa5449 Mon Sep 17 00:00:00 2001 From: Alex Thissen <alex.thissen@xebia.com> Date: Fri, 9 Feb 2024 12:54:00 +0000 Subject: [PATCH 2409/2710] Implemented mark and space checks. --- libsrc/lynx/ser/lynx-comlynx.s | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/libsrc/lynx/ser/lynx-comlynx.s b/libsrc/lynx/ser/lynx-comlynx.s index 9564bcb4f..3b6f18af6 100644 --- a/libsrc/lynx/ser/lynx-comlynx.s +++ b/libsrc/lynx/ser/lynx-comlynx.s @@ -151,7 +151,7 @@ SER_OPEN: cmp #SER_BAUD_600 beq setbaudrate - ; Source period is 4 us + ; Source period is 8 us ldy #%00011011 ; ENABLE_RELOAD|ENABLE_COUNT|AUD_8 ldx #51 @@ -341,8 +341,9 @@ SER_IRQ: ldx SERDAT ; Read received data lda contrl and #PAREN ; Parity enabled implies SER_PAR_EVEN or SER_PAR_ODD + tay ora #OVERRUN|FRAMERR|RXBRK - bit SERCTL ; Compare with SERCTL + bit SERCTL ; Check error flags in SERCTL beq @rx_irq ; No errors so far @@ -358,6 +359,15 @@ SER_IRQ: bra @exit0 @rx_irq: + tya + bne @2 ; Parity was enabled so no marker bit check needed + + lda contrl + eor SERCTL ; Should match current parity bit + and #PARBIT ; Check for mark or space value + bne @exit0 + +@2: txa ldx RxPtrIn sta RxBuffer,x From 6cf8ee8eb563f50ceef74605a95e202054e2991c Mon Sep 17 00:00:00 2001 From: Alex Thissen <alex.thissen@xebia.com> Date: Sat, 10 Feb 2024 21:15:05 +0000 Subject: [PATCH 2410/2710] Removed baud rates from 150 and lower. Fixed tab Replaced uploader references to SERIAL_INTERRUPT --- libsrc/lynx/ser/lynx-comlynx.s | 31 ++----------------------------- libsrc/lynx/uploader.s | 6 +++--- 2 files changed, 5 insertions(+), 32 deletions(-) diff --git a/libsrc/lynx/ser/lynx-comlynx.s b/libsrc/lynx/ser/lynx-comlynx.s index 3b6f18af6..486981184 100644 --- a/libsrc/lynx/ser/lynx-comlynx.s +++ b/libsrc/lynx/ser/lynx-comlynx.s @@ -158,33 +158,6 @@ SER_OPEN: cmp #SER_BAUD_300 beq setbaudrate - ldx #103 - cmp #SER_BAUD_150 - beq setbaudrate - - ldx #115 - cmp #SER_BAUD_134_5 - beq setbaudrate - - ldx #141 - cmp #SER_BAUD_110 - beq setbaudrate - - ; Source period is 32 us - ldy #%00011101 ; ENABLE_RELOAD|ENABLE_COUNT|AUD_32 - - ldx #51 - cmp #SER_BAUD_75 - beq setbaudrate - - ldx #68 - cmp #SER_BAUD_56_875 - beq setbaudrate - - ldx #77 - cmp #SER_BAUD_50 - beq setbaudrate - lda #SER_ERR_BAUD_UNAVAIL ldx #0 ; return value is char rts @@ -342,8 +315,8 @@ SER_IRQ: lda contrl and #PAREN ; Parity enabled implies SER_PAR_EVEN or SER_PAR_ODD tay - ora #OVERRUN|FRAMERR|RXBRK - bit SERCTL ; Check error flags in SERCTL + ora #OVERRUN|FRAMERR|RXBRK + bit SERCTL ; Check presence of relevant error flags in SERCTL beq @rx_irq ; No errors so far diff --git a/libsrc/lynx/uploader.s b/libsrc/lynx/uploader.s index df3e5df40..5ce21b489 100644 --- a/libsrc/lynx/uploader.s +++ b/libsrc/lynx/uploader.s @@ -40,14 +40,14 @@ cont1: bra loop1 read_byte: - bit SERCTL + bit SERCTL ; Check for RXRDY ($40) bvc read_byte lda SERDAT rts _UpLoaderIRQ: lda INTSET - and #$10 + and #SERIAL_INTERRUPT bne @L0 clc rts @@ -69,7 +69,7 @@ again: ; last action : clear interrupt ; exit: - lda #$10 + lda #SERIAL_INTERRUPT sta INTRST clc rts From acff429eb8788ab6f1b1e40bb8cef0ac7de94930 Mon Sep 17 00:00:00 2001 From: Alex Thissen <alex.thissen@xebia.com> Date: Sun, 11 Feb 2024 15:33:22 +0000 Subject: [PATCH 2411/2710] Added redeye check for SER_HS_SW handshake --- asminc/lynx.inc | 16 +++++++++++++--- libsrc/lynx/ser/lynx-comlynx.s | 12 ++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/asminc/lynx.inc b/asminc/lynx.inc index d65b7f8a9..0d34e1c7c 100644 --- a/asminc/lynx.inc +++ b/asminc/lynx.inc @@ -259,16 +259,26 @@ SND_INTERRUPT = TIMER7_INTERRUPT INTRST = $FD80 INTSET = $FD81 + MAGRDY0 = $FD84 MAGRDY1 = $FD85 AUDIN = $FD86 SYSCTL1 = $FD87 MIKEYHREV = $FD88 MIKEYSREV = $FD89 -IODIR = $FD8A -IODAT = $FD8B -SERCTL = $FD8C +IODIR = $FD8A +IODAT = $FD8B +; IODIR and IODAT bit definitions +AUDIN_BIT = $10 ; Note that there is also the address AUDIN +READ_ENABLE = $10 ; Same bit for AUDIN_BIT +RESTLESS = $08 +NOEXP = $04 ; If set, redeye is not connected +CART_ADDR_DATA = $02 +CART_POWER_OFF = $02 ; Same bit for CART_ADDR_DATA +EXTERNAL_POWER = $01 + +SERCTL = $FD8C ; SERCTL bit definitions for write operations TXINTEN = $80 RXINTEN = $40 diff --git a/libsrc/lynx/ser/lynx-comlynx.s b/libsrc/lynx/ser/lynx-comlynx.s index 486981184..7201264b7 100644 --- a/libsrc/lynx/ser/lynx-comlynx.s +++ b/libsrc/lynx/ser/lynx-comlynx.s @@ -200,7 +200,18 @@ checkhs: ldy #SER_PARAMS::HANDSHAKE ; Handshake lda (ptr1),y cmp #SER_HS_NONE + beq redeye_ok + cmp #SER_HS_SW ; Software handshake will check for connected redeye bne invparameter + + lda IODAT + and #NOEXP ; Check if redeye bit flag is unset + beq redeye_ok + lda #SER_ERR_NO_DEVICE ; ComLynx cable is not inserted + ldx #0 + rts + +redeye_ok: lda SERDAT lda contrl ora #RXINTEN|RESETERR ; Turn on interrupts for receive @@ -209,6 +220,7 @@ checkhs: .assert SER_ERR_OK = 0, error tax rts + invparameter: lda #SER_ERR_INIT_FAILED ldx #0 ; return value is char From 1deb9e52aec938ae338168035c743b04b91e20d0 Mon Sep 17 00:00:00 2001 From: Alex Thissen <alex.thissen@xebia.com> Date: Sun, 11 Feb 2024 15:46:23 +0000 Subject: [PATCH 2412/2710] Replaced last literal value for SERCTL --- libsrc/lynx/ser/lynx-comlynx.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/lynx/ser/lynx-comlynx.s b/libsrc/lynx/ser/lynx-comlynx.s index 7201264b7..9b007c6e0 100644 --- a/libsrc/lynx/ser/lynx-comlynx.s +++ b/libsrc/lynx/ser/lynx-comlynx.s @@ -74,7 +74,7 @@ SER_UNINSTALL: SER_CLOSE: ; Disable interrupts and stop timer 4 (serial) - lda #$0C ; TXOPEN|RESETERR + lda #TXOPEN|RESETERR sta SERCTL lda #$00 ; Disable count and no reload sta TIM4CTLA From 8b172e05bc4c39b53ee1dd05be082c01fea0d7e0 Mon Sep 17 00:00:00 2001 From: Alex Thissen <alex.thissen@xebia.com> Date: Sun, 11 Feb 2024 20:59:08 +0000 Subject: [PATCH 2413/2710] Applied optimization as per review 42Bastian --- libsrc/lynx/ser/lynx-comlynx.s | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libsrc/lynx/ser/lynx-comlynx.s b/libsrc/lynx/ser/lynx-comlynx.s index 9b007c6e0..aa4d71ad3 100644 --- a/libsrc/lynx/ser/lynx-comlynx.s +++ b/libsrc/lynx/ser/lynx-comlynx.s @@ -76,8 +76,7 @@ SER_CLOSE: ; Disable interrupts and stop timer 4 (serial) lda #TXOPEN|RESETERR sta SERCTL - lda #$00 ; Disable count and no reload - sta TIM4CTLA + stz TIM4CTLA ; Disable count and no reload ; Done, return an error code lda #SER_ERR_OK From 7d6f3d24d434953679c176708c67a0abc845eaa0 Mon Sep 17 00:00:00 2001 From: Alex Thissen <alex.thissen@xebia.com> Date: Sun, 11 Feb 2024 23:12:27 +0000 Subject: [PATCH 2414/2710] Changed sta (ptr1,x) to sta (ptr1) Reset serial status on ser_close Fixed error for saving serial state --- libsrc/lynx/ser/lynx-comlynx.s | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libsrc/lynx/ser/lynx-comlynx.s b/libsrc/lynx/ser/lynx-comlynx.s index aa4d71ad3..c4ae3d5b6 100644 --- a/libsrc/lynx/ser/lynx-comlynx.s +++ b/libsrc/lynx/ser/lynx-comlynx.s @@ -76,7 +76,8 @@ SER_CLOSE: ; Disable interrupts and stop timer 4 (serial) lda #TXOPEN|RESETERR sta SERCTL - stz TIM4CTLA ; Disable count and no reload + stz TIM4CTLA ; Disable count and no reload + stz SerialStat ; Reset status ; Done, return an error code lda #SER_ERR_OK @@ -241,8 +242,8 @@ GetByte: ldy RxPtrOut lda RxBuffer,y inc RxPtrOut + sta (ptr1) ldx #$00 - sta (ptr1,x) txa ; Return code = 0 rts @@ -288,8 +289,8 @@ PutByte: SER_STATUS: lda SerialStat + sta (ptr1) ldx #$00 - sta (ptr1,x) txa ; Return code = 0 rts @@ -327,7 +328,7 @@ SER_IRQ: and #PAREN ; Parity enabled implies SER_PAR_EVEN or SER_PAR_ODD tay ora #OVERRUN|FRAMERR|RXBRK - bit SERCTL ; Check presence of relevant error flags in SERCTL + and SERCTL ; Check presence of relevant error flags in SERCTL beq @rx_irq ; No errors so far From 8173c850fd5fe0a0038baa3bf8767c920f127174 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Thu, 15 Feb 2024 00:00:46 +0100 Subject: [PATCH 2415/2710] Fix size of MAIN to end at $1E00. Caused negative size of MAIN in cc65-contrib/quikmans2k8. --- cfg/vic20-asm.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cfg/vic20-asm.cfg b/cfg/vic20-asm.cfg index 286a7f95c..fc9d668e4 100644 --- a/cfg/vic20-asm.cfg +++ b/cfg/vic20-asm.cfg @@ -7,7 +7,7 @@ SYMBOLS { MEMORY { ZP: file = "", start = $0002, size = $001A, define = yes; LOADADDR: file = %O, start = %S - 2, size = $0002; - MAIN: file = %O, start = %S, size = $0DF3 - %S; + MAIN: file = %O, start = %S, size = $1E00 - %S; } SEGMENTS { ZEROPAGE: load = ZP, type = zp, optional = yes; From 3a7bd539568e25f33c64a88fd6e76a9e015c74f2 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Thu, 15 Feb 2024 01:05:35 +0100 Subject: [PATCH 2416/2710] Test strtok(). --- test/ref/strtok.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 test/ref/strtok.c diff --git a/test/ref/strtok.c b/test/ref/strtok.c new file mode 100644 index 000000000..15c3a289d --- /dev/null +++ b/test/ref/strtok.c @@ -0,0 +1,43 @@ +// 2024-02-14 Sven Michael Klose <pixel@hugbox.org> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +void +error (void) +{ + printf ("strtok() test failed!\n"); + exit (-1); +} + +void +test (char * s) +{ + if (strcmp ("test", strtok (s, "/"))) + error (); + if (strcmp ("foo", strtok (NULL, "/"))) + error (); + if (strcmp ("bar", strtok (NULL, "/"))) + error (); + if (strtok (NULL, "/")) + error (); + if (strtok (NULL, "/")) + error (); +} + +int +main (void) +{ + char s1[] = "test/foo/bar"; + char s2[] = "/test/foo/bar"; + char s3[] = "//test/foo/bar"; + char s4[] = "//test/foo/bar//"; + + test (s1); + test (s2); + test (s3); + test (s4); + + return 0; +} From 8d4946b3f451aec4547415ad09419ad90330b2bb Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Thu, 15 Feb 2024 07:52:42 +0100 Subject: [PATCH 2417/2710] Fixed segv touch /tmp/xx grc65 /tmp/xx --- src/grc65/main.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/grc65/main.c b/src/grc65/main.c index 7d31bfc52..6b3ca04de 100644 --- a/src/grc65/main.c +++ b/src/grc65/main.c @@ -231,10 +231,11 @@ static int findToken (const char * const *tokenTbl, const char *token) /* takes as input table of tokens and token, returns position in table or -1 if not found */ int i; - for (i = 0; tokenTbl[i][0]; i++) { - if (strcmp (tokenTbl[i], token) == 0) { - return i; - } + if (token != NULL) { + for (i = 0; tokenTbl[i][0]; i++) { + if (strcmp (tokenTbl[i], token) == 0) { + return i; + } } return -1; From ab0eb4fe58450649c698ebead914a97069dfbe7f Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Thu, 15 Feb 2024 09:03:46 +0100 Subject: [PATCH 2418/2710] oops --- src/grc65/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/grc65/main.c b/src/grc65/main.c index 6b3ca04de..5ef9e9645 100644 --- a/src/grc65/main.c +++ b/src/grc65/main.c @@ -236,6 +236,7 @@ static int findToken (const char * const *tokenTbl, const char *token) if (strcmp (tokenTbl[i], token) == 0) { return i; } + } } return -1; From 294b034920ecf67cc436415fa84fd1529463ae04 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Thu, 15 Feb 2024 17:32:44 +0100 Subject: [PATCH 2419/2710] Add configuration files for expanded VICs. --- cfg/vic20-asm-32k.cfg | 21 +++++++++++++++++++++ cfg/vic20-asm-3k.cfg | 21 +++++++++++++++++++++ cfg/vic20-asm.cfg | 2 ++ 3 files changed, 44 insertions(+) create mode 100644 cfg/vic20-asm-32k.cfg create mode 100644 cfg/vic20-asm-3k.cfg diff --git a/cfg/vic20-asm-32k.cfg b/cfg/vic20-asm-32k.cfg new file mode 100644 index 000000000..622cfb26f --- /dev/null +++ b/cfg/vic20-asm-32k.cfg @@ -0,0 +1,21 @@ +# Assembly program configuration for expanded VICs (>= +8K). + +FEATURES { + STARTADDRESS: default = $1201; +} +SYMBOLS { + __LOADADDR__: type = import; +} +MEMORY { + ZP: file = "", start = $0002, size = $001A, define = yes; + LOADADDR: file = %O, start = %S - 2, size = $0002; + MAIN: file = %O, start = %S, size = $8000 - %S; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp, optional = yes; + LOADADDR: load = LOADADDR, type = ro; + CODE: load = MAIN, type = ro; + RODATA: load = MAIN, type = ro; + DATA: load = MAIN, type = rw; + BSS: load = MAIN, type = bss, optional = yes, define = yes; +} diff --git a/cfg/vic20-asm-3k.cfg b/cfg/vic20-asm-3k.cfg new file mode 100644 index 000000000..1afaf0b30 --- /dev/null +++ b/cfg/vic20-asm-3k.cfg @@ -0,0 +1,21 @@ +# Assembly program configuration for expanded VICs (+3K only). + +FEATURES { + STARTADDRESS: default = $0401; +} +SYMBOLS { + __LOADADDR__: type = import; +} +MEMORY { + ZP: file = "", start = $0002, size = $001A, define = yes; + LOADADDR: file = %O, start = %S - 2, size = $0002; + MAIN: file = %O, start = %S, size = $1E00 - %S; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp, optional = yes; + LOADADDR: load = LOADADDR, type = ro; + CODE: load = MAIN, type = ro; + RODATA: load = MAIN, type = ro; + DATA: load = MAIN, type = rw; + BSS: load = MAIN, type = bss, optional = yes, define = yes; +} diff --git a/cfg/vic20-asm.cfg b/cfg/vic20-asm.cfg index fc9d668e4..5f6c7cc74 100644 --- a/cfg/vic20-asm.cfg +++ b/cfg/vic20-asm.cfg @@ -1,3 +1,5 @@ +# Assembly program configuration for unexpanded VICs. + FEATURES { STARTADDRESS: default = $1001; } From f42e6a26b2b6f5f7df260cec15e21b04c8fee12c Mon Sep 17 00:00:00 2001 From: rumbledethumps <16963588+rumbledethumps@users.noreply.github.com> Date: Sat, 17 Feb 2024 15:47:51 -0800 Subject: [PATCH 2420/2710] xstack bump to 512 --- libsrc/rp6502/read.c | 2 +- libsrc/rp6502/sysrename.c | 2 +- libsrc/rp6502/write.c | 2 +- libsrc/rp6502/write_xstack.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/rp6502/read.c b/libsrc/rp6502/read.c index eb96f779c..87a9bbf7d 100644 --- a/libsrc/rp6502/read.c +++ b/libsrc/rp6502/read.c @@ -5,7 +5,7 @@ int __fastcall__ read (int fildes, void* buf, unsigned count) { int total = 0; while (count) { - unsigned blockcount = (count > 256) ? 256 : count; + unsigned blockcount = (count > 512) ? 512 : count; int bytes_read = read_xstack (&((char*)buf)[total], blockcount, fildes); if (bytes_read < 0) { return bytes_read; diff --git a/libsrc/rp6502/sysrename.c b/libsrc/rp6502/sysrename.c index 96eca24cf..46bdd8b31 100644 --- a/libsrc/rp6502/sysrename.c +++ b/libsrc/rp6502/sysrename.c @@ -7,7 +7,7 @@ unsigned char __fastcall__ _sysrename (const char* oldpath, const char* newpath) size_t oldpathlen, newpathlen; oldpathlen = strlen (oldpath); newpathlen = strlen (newpath); - if (oldpathlen + newpathlen > 254) { + if (oldpathlen + newpathlen > 510) { return _mappederrno (EINVAL); } while (oldpathlen) { diff --git a/libsrc/rp6502/write.c b/libsrc/rp6502/write.c index 11241dab5..23877b6e8 100644 --- a/libsrc/rp6502/write.c +++ b/libsrc/rp6502/write.c @@ -5,7 +5,7 @@ int __fastcall__ write (int fildes, const void* buf, unsigned count) { int ax, total = 0; while (count) { - int blockcount = (count > 256) ? 256 : count; + int blockcount = (count > 512) ? 512 : count; ax = write_xstack (&((char*)buf)[total], blockcount, fildes); if (ax < 0) { return ax; diff --git a/libsrc/rp6502/write_xstack.c b/libsrc/rp6502/write_xstack.c index ff979899d..29285a87e 100644 --- a/libsrc/rp6502/write_xstack.c +++ b/libsrc/rp6502/write_xstack.c @@ -4,7 +4,7 @@ int __fastcall__ write_xstack (const void* buf, unsigned count, int fildes) { unsigned i; - if (count > 256) { + if (count > 512) { return _mappederrno (EINVAL); } for (i = count; i;) { From 4d3153e10e185323ca0d89c4d17b43bdffa803ca Mon Sep 17 00:00:00 2001 From: rumbledethumps <16963588+rumbledethumps@users.noreply.github.com> Date: Sat, 17 Feb 2024 16:02:57 -0800 Subject: [PATCH 2421/2710] add rp6502 xregn --- include/rp6502.h | 2 ++ libsrc/rp6502/xregn.c | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 libsrc/rp6502/xregn.c diff --git a/include/rp6502.h b/include/rp6502.h index 53028c35a..7deeebc4c 100644 --- a/include/rp6502.h +++ b/include/rp6502.h @@ -117,6 +117,8 @@ long __fastcall__ ria_call_long_errno (unsigned char op); /* C API for the operating system. */ +int __cdecl__ xregn (char device, char channel, unsigned char address, unsigned count, + ...); int __cdecl__ xreg (char device, char channel, unsigned char address, ...); int phi2 (void); int codepage (void); diff --git a/libsrc/rp6502/xregn.c b/libsrc/rp6502/xregn.c new file mode 100644 index 000000000..ec040be20 --- /dev/null +++ b/libsrc/rp6502/xregn.c @@ -0,0 +1,19 @@ +#include <rp6502.h> +#include <stdarg.h> + +int __cdecl__ xregn (char device, char channel, unsigned char address, unsigned count, + ...) +{ + va_list args; + va_start (args, count); + RIA.xstack = device; + RIA.xstack = channel; + RIA.xstack = address; + while (count--) { + unsigned v = va_arg (args, unsigned); + RIA.xstack = v >> 8; + RIA.xstack = v; + } + va_end (args); + return ria_call_int_errno (RIA_OP_XREG); +} From 7a12399b39acd656da3d8802dca0ed1ef09d18c3 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 19 Feb 2024 13:27:42 +0100 Subject: [PATCH 2422/2710] Allow choosing 115200bps as the card allows it Of course, that won't work full speed with the standard IRQ-based RX. But that will allow users to setup the port at this speed without duplicating the setup part of the code. Up to them to add hooks to disable IRQs and read directly in a tight asm loop. --- libsrc/apple2/ser/a2.ssc.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index c8aa6e9a5..7053b7bb1 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -121,7 +121,7 @@ BaudTable: ; Table used to translate RS232 baudrate param .byte $0F ; SER_BAUD_19200 .byte $FF ; SER_BAUD_38400 .byte $FF ; SER_BAUD_57600 - .byte $FF ; SER_BAUD_115200 + .byte $00 ; SER_BAUD_115200 .byte $FF ; SER_BAUD_230400 BitTable: ; Table used to translate RS232 databits param From 3fd78208bab5cd7d8fa601a4a94af3f66ed39ec1 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 19 Feb 2024 18:27:34 +0100 Subject: [PATCH 2423/2710] Disable IRQ if opening at 115200 bps --- doc/apple2.sgml | 5 +++++ doc/apple2enh.sgml | 5 +++++ libsrc/apple2/ser/a2.ssc.s | 10 ++++++++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index e6ec870ee..99ff8139e 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -452,10 +452,15 @@ The names in the parentheses denote the symbols to be used for static linking of (RTS/CTS) and does interrupt driven receives. Speeds faster than 9600 baud aren't reachable because the ROM and ProDOS IRQ handlers are too slow. Software flow control (XON/XOFF) is not supported. + Note that because of the peculiarities of the 6551 chip transmits are not interrupt driven, and the transceiver blocks if the receiver asserts flow control because of a full buffer. + Note that using the driver at SER_BAUD_115200 will disable IRQs. It will be up + to the users to use the serial port, either by re-enabling IRQs themselves, + or by directly poll-reading the ACIA DATA register without the help of ser_get(). + The driver defaults to slot 2. Call <tt/ser_apple2_slot()/ prior to <tt/ser_open()/ in order to select a different slot. <tt/ser_apple2_slot()/ succeeds for all Apple II slots, but <tt/ser_open()/ fails with diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index d47820cc7..9c46bd4fb 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -453,10 +453,15 @@ The names in the parentheses denote the symbols to be used for static linking of (RTS/CTS) and does interrupt driven receives. Speeds faster than 9600 baud aren't reachable because the ROM and ProDOS IRQ handlers are too slow. Software flow control (XON/XOFF) is not supported. + Note that because of the peculiarities of the 6551 chip transmits are not interrupt driven, and the transceiver blocks if the receiver asserts flow control because of a full buffer. + Note that using the driver at SER_BAUD_115200 will disable IRQs. It will be up + to the users to use the serial port, either by re-enabling IRQs themselves, + or by directly poll-reading the ACIA DATA register without the help of ser_get(). + The driver defaults to slot 2. Call <tt/ser_apple2_slot()/ prior to <tt/ser_open()/ in order to select a different slot. <tt/ser_apple2_slot()/ succeeds for all Apple II slots, but <tt/ser_open()/ fails with diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 7053b7bb1..88dc4572c 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -302,6 +302,7 @@ HandshakeOK: lda (ptr1),y ; Baudrate index tay lda BaudTable,y ; Get 6551 value + sta tmp2 ; Backup for IRQ setting bpl BaudOK ; Check that baudrate is supported lda #SER_ERR_BAUD_UNAVAIL @@ -332,8 +333,13 @@ BaudOK: sta tmp1 ora #%00000001 ; Set DTR active sta RtsOff ; Store value to easily handle flow control later - ora #%00001000 ; Enable receive interrupts (RTS low) - sta ACIA_CMD,x + + ora #%00001010 ; Disable interrupts and set RTS low + + ldy tmp2 ; Don't enable IRQs if 115200bps + beq :+ + and #%11111101 ; Enable receive IRQs +: sta ACIA_CMD,x ; Done stx Index ; Mark port as open From 8b71fafb84f14763787a5fab5590c69cc7dccc9a Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 19 Feb 2024 21:30:26 +0100 Subject: [PATCH 2424/2710] IIgs SCC: Allow choosing 115200bps as the card allows it Of course, that won't work full speed with the standard IRQ-based RX. But that will allow users to setup the port at this speed without duplicating the setup part of the code. Up to them to add hooks to disable IRQs and read directly in a tight asm loop. --- libsrc/apple2/ser/a2.gs.s | 66 +++++++++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 17 deletions(-) diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index 3a2db1926..c53fe7ecb 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -66,6 +66,8 @@ HSType: .res 1 ; Flow-control type RecvBuf: .res 256 ; Receive buffers: 256 bytes SendBuf: .res 256 ; Send buffers: 256 bytes +ClockSource: .res 1 ; Whether to use BRG or XTAL for clock + .data Opened: .byte $00 ; 1 when opened @@ -106,6 +108,15 @@ TxBitTable: .byte %00000000 ; SER_BITS_5, in WR_TX_CTRL (WR5) .rodata +ClockMultiplier:.byte %01000000 ; Clock x16 (300-57600bps, ref page 5-8) + .byte %10000000 ; Clock x32 (115200bps, ref page 5-8) + +ClockSourceA: .byte %11010000 ; Use baud rate generator (page 5-17) + .byte %10000000 ; Use XTAL (115200bps) + +ClockSourceB: .byte %01010000 ; Use baud rate generator + .byte %00000000 ; Use XTAL (115200bps) + BaudTable: ; bit7 = 1 means setting is invalid ; Otherwise refers to the index in ; Baud(Low/High)Table @@ -127,7 +138,7 @@ BaudTable: ; bit7 = 1 means setting is invalid .byte $05 ; SER_BAUD_19200 .byte $06 ; SER_BAUD_38400 .byte $07 ; SER_BAUD_57600 - .byte $FF ; SER_BAUD_115200 + .byte $00 ; SER_BAUD_115200 .byte $FF ; SER_BAUD_230400 StopTable: .byte %00000100 ; SER_STOP_1, in WR_TX_RX_CTRL (WR4) @@ -180,7 +191,6 @@ RX_CTRL_OFF = %11111110 ; ANDed,Rx disabled WR_TX_RX_CTRL = 4 RR_TX_RX_STATUS = 4 -TX_RX_CLOCK_MUL = %01000000 ; Clock x16 (Ref page 5-8) WR_TX_CTRL = 5 ; (Ref page 5-9) RR_TX_STATUS = 5 ; Corresponding status register @@ -197,15 +207,13 @@ MASTER_IRQ_MIE_RST = %00001010 ; STA'd MASTER_IRQ_SET = %00011001 ; STA'd WR_CLOCK_CTRL = 11 ; (Ref page 5-17) -CLOCK_CTRL_CH_A = %11010000 -CLOCK_CTRL_CH_B = %01010000 WR_BAUDL_CTRL = 12 ; (Ref page 5-18) WR_BAUDH_CTRL = 13 ; (Ref page 5-19) WR_MISC_CTRL = 14 ; (Ref page 5-19) -MISC_CTRL_RATE_GEN_ON = %00000001 ; ORed -MISC_CTRL_RATE_GEN_OFF = %11111110 ; ANDed +MISC_CTRL_RATE_GEN_ON = %00000001 ; STA'd +MISC_CTRL_RATE_GEN_OFF = %00000000 ; STA'd WR_IRQ_CTRL = 15 ; (Ref page 5-20) IRQ_CLEANUP_EIRQ = %00001000 @@ -329,6 +337,16 @@ IIgs: : txa ; Promote char return value rts +getClockSource: + ldy #SER_PARAMS::BAUDRATE + lda (ptr1),y ; Baudrate index - cc65 value + ldy #$01 + cmp #SER_BAUD_115200 + beq :+ + ldy #$00 +: sty ClockSource + rts + ;---------------------------------------------------------------------------- ; SER_OPEN: A pointer to a ser_params structure is passed in ptr1. ; Must return an SER_ERR_xx code in a/x. @@ -364,6 +382,8 @@ SER_OPEN: lda #$00 jsr writeSCCReg + jsr getClockSource ; Should we use BRG or XTAL? + ldy #SER_PARAMS::STOPBITS lda (ptr1),y ; Stop bits tay @@ -377,16 +397,18 @@ SER_OPEN: ora ParityTable,y ; Get value bmi InvParam - ora #TX_RX_CLOCK_MUL + ldy ClockSource ; Setup clock multiplier + ora ClockMultiplier,y ldy #WR_TX_RX_CTRL ; Setup stop & parity bits jsr writeSCCReg + ldy ClockSource cpx #CHANNEL_B bne ClockA ClockB: + lda ClockSourceB,y ldy #WR_CLOCK_CTRL - lda #CLOCK_CTRL_CH_B jsr writeSCCReg lda #INTR_PENDING_RX_EXT_B ; Store which IRQ bits we'll check @@ -394,8 +416,8 @@ ClockB: bra SetBaud ClockA: + lda ClockSourceA,y ldy #WR_CLOCK_CTRL - lda #CLOCK_CTRL_CH_A jsr writeSCCReg lda #INTR_PENDING_RX_EXT_A ; Store which IRQ bits we'll check @@ -411,11 +433,16 @@ SetBaud: InvParam: lda #SER_ERR_INIT_FAILED - ldy #$00 ; Mark port closed - bra SetupOut + ldx #$00 ; Promote char return value + stz Opened ; Mark port closed + cli + rts BaudOK: tay + cpy #SER_BAUD_115200 + beq :+ ; Skip baud rate generator setup: + ; For 115200bps, we use XTAL instead lda BaudLowTable,y ; Get low byte @@ -428,8 +455,13 @@ BaudOK: ldy #WR_BAUDH_CTRL jsr writeSCCReg - ldy #WR_MISC_CTRL ; Time to turn this thing on - lda #MISC_CTRL_RATE_GEN_ON +: lda #MISC_CTRL_RATE_GEN_ON ; Setup BRG according to selected rate + ldy ClockSource + cpy #$00 + beq :+ + lda #MISC_CTRL_RATE_GEN_OFF + +: ldy #WR_MISC_CTRL ; Time to turn this thing on jsr writeSCCReg ldy #SER_PARAMS::DATABITS @@ -486,11 +518,11 @@ StoreFlag: sta SER_FLAG ldy #$01 ; Mark port opened - lda #SER_ERR_OK - -SetupOut: - ldx #$00 ; Promote char return value sty Opened + + lda #SER_ERR_OK + ldx #$00 ; Promote char return value + cli rts From 86317711e0931af0dc735ca7a0715369d0d0310c Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 20 Feb 2024 07:17:12 +0100 Subject: [PATCH 2425/2710] IIgs SCC: Rework branches to X-indexed variables and general cleanup/commenting --- libsrc/apple2/ser/a2.gs.s | 244 +++++++++++++++++--------------------- 1 file changed, 110 insertions(+), 134 deletions(-) diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index c53fe7ecb..e35c6156b 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -66,36 +66,16 @@ HSType: .res 1 ; Flow-control type RecvBuf: .res 256 ; Receive buffers: 256 bytes SendBuf: .res 256 ; Send buffers: 256 bytes -ClockSource: .res 1 ; Whether to use BRG or XTAL for clock +CurClockSource: .res 1 ; Whether to use BRG or RTxC for clock .data Opened: .byte $00 ; 1 when opened Channel: .byte $00 ; Channel B by default -CurChanIrqFlags:.byte INTR_PENDING_RX_EXT_B +CurChanIrqFlags:.byte $00 SerFlagOrig: .byte $00 -; Tables used to translate cc65 RS232 params into register values -; (Ref page 5-18 and 5-19) -BaudLowTable: .byte $7E ; SER_BAUD_300 - .byte $5E ; SER_BAUD_1200 - .byte $2E ; SER_BAUD_2400 - .byte $16 ; SER_BAUD_4800 - .byte $0A ; SER_BAUD_9600 - .byte $04 ; SER_BAUD_19200 - .byte $01 ; SER_BAUD_38400 - .byte $00 ; SER_BAUD_57600 - -BaudHighTable: .byte $01 ; SER_BAUD_300 - .byte $00 ; SER_BAUD_1200 - .byte $00 ; SER_BAUD_2400 - .byte $00 ; SER_BAUD_4800 - .byte $00 ; SER_BAUD_9600 - .byte $00 ; SER_BAUD_19200 - .byte $00 ; SER_BAUD_38400 - .byte $00 ; SER_BAUD_57600 - RxBitTable: .byte %00000000 ; SER_BITS_5, in WR_RX_CTRL (WR3) .byte %10000000 ; SER_BITS_6 (Ref page 5-7) .byte %01000000 ; SER_BITS_7 @@ -108,38 +88,65 @@ TxBitTable: .byte %00000000 ; SER_BITS_5, in WR_TX_CTRL (WR5) .rodata -ClockMultiplier:.byte %01000000 ; Clock x16 (300-57600bps, ref page 5-8) +ClockMultiplier:.byte %01000000 ; Clock x16 (300-57600bps, WR4, ref page 5-8) .byte %10000000 ; Clock x32 (115200bps, ref page 5-8) -ClockSourceA: .byte %11010000 ; Use baud rate generator (page 5-17) - .byte %10000000 ; Use XTAL (115200bps) +ClockSource: .byte %01010000 ; Use baud rate generator (ch. B) (WR11, page 5-17) + .byte %00000000 ; Use RTxC (115200bps) (ch. B) + .byte %11010000 ; Use baud rate generator (ch. A) + .byte %10000000 ; Use RTxC (115200bps) (ch. A) -ClockSourceB: .byte %01010000 ; Use baud rate generator - .byte %00000000 ; Use XTAL (115200bps) +BrgEnabled: .byte %00000001 ; Baud rate generator on (WR14, page 5-19) + .byte %00000000 ; BRG Off + +ChanIrqFlags: .byte %00000101 ; ANDed (RX/special IRQ, ch. B) (page 5-25) + .byte %00101000 ; ANDed (RX/special IRQ, ch. A) + +ChanIrqMask: .byte %00000111 ; Ch. B IRQ flags mask + .byte %00111000 ; Ch. A IRQ flags mask BaudTable: ; bit7 = 1 means setting is invalid - ; Otherwise refers to the index in - ; Baud(Low/High)Table - .byte $FF ; SER_BAUD_45_5 - .byte $FF ; SER_BAUD_50 - .byte $FF ; SER_BAUD_75 - .byte $FF ; SER_BAUD_110 - .byte $FF ; SER_BAUD_134_5 - .byte $FF ; SER_BAUD_150 - .byte $00 ; SER_BAUD_300 - .byte $FF ; SER_BAUD_600 - .byte $01 ; SER_BAUD_1200 - .byte $FF ; SER_BAUD_1800 - .byte $02 ; SER_BAUD_2400 - .byte $FF ; SER_BAUD_3600 - .byte $03 ; SER_BAUD_4800 - .byte $FF ; SER_BAUD_7200 - .byte $04 ; SER_BAUD_9600 - .byte $05 ; SER_BAUD_19200 - .byte $06 ; SER_BAUD_38400 - .byte $07 ; SER_BAUD_57600 - .byte $00 ; SER_BAUD_115200 - .byte $FF ; SER_BAUD_230400 + ; Indexes cc65 RS232 SER_BAUD enum + ; into WR12/13 register values + ; (Ref page 5-18 and 5-19) + .word $FFFF ; SER_BAUD_45_5 + .word $FFFF ; SER_BAUD_50 + .word $FFFF ; SER_BAUD_75 + .word $FFFF ; SER_BAUD_110 + .word $FFFF ; SER_BAUD_134_5 + .word $FFFF ; SER_BAUD_150 + .word $017E ; SER_BAUD_300 + .word $FFFF ; SER_BAUD_600 + .word $005E ; SER_BAUD_1200 + .word $FFFF ; SER_BAUD_1800 + .word $002E ; SER_BAUD_2400 + .word $FFFF ; SER_BAUD_3600 + .word $0016 ; SER_BAUD_4800 + .word $FFFF ; SER_BAUD_7200 + .word $000A ; SER_BAUD_9600 + .word $0004 ; SER_BAUD_19200 + .word $0001 ; SER_BAUD_38400 + .word $0000 ; SER_BAUD_57600 + .word $0000 ; SER_BAUD_115200 (constant unused at that speed) + .word $FFFF ; SER_BAUD_230400 + +; About the speed selection: either we use the baud rate generator: +; - Load the time constants from BaudTable into WR12/WR13 +; - Setup the TX/RX clock source to BRG (ClockSource into WR11) +; - Setup the clock multiplier (WR4) +; - Enable the baud rate generator (WR14) +; In this case, the baud rate will be: +; rate = crystal_clock/(2+BRG_time_constant))/(2*clock_multiplier) +; Example: (3686400/(2+0x0004)) / (2*16) = 19200 bps +; +; Or we don't use the baud rate generator: +; - Setup the TX/RX clock source to RTxC +; - Setup the clock multiplier +; - Disable the baud rate generator +; - WR12 and 13 are ignored +; In this case, the baud rate will be: +; rate = crystal_clock/clock_multiplier +; Example: 3686400/32 = 115200 bps StopTable: .byte %00000100 ; SER_STOP_1, in WR_TX_RX_CTRL (WR4) .byte %00001100 ; SER_STOP_2 (Ref page 5-8) @@ -167,6 +174,7 @@ SER_FLAG := $E10104 ; ------------------------------------------------------------------------ ; Channels + CHANNEL_B = 0 CHANNEL_A = 1 @@ -212,8 +220,6 @@ WR_BAUDL_CTRL = 12 ; (Ref page 5-18) WR_BAUDH_CTRL = 13 ; (Ref page 5-19) WR_MISC_CTRL = 14 ; (Ref page 5-19) -MISC_CTRL_RATE_GEN_ON = %00000001 ; STA'd -MISC_CTRL_RATE_GEN_OFF = %00000000 ; STA'd WR_IRQ_CTRL = 15 ; (Ref page 5-20) IRQ_CLEANUP_EIRQ = %00001000 @@ -228,13 +234,8 @@ IRQ_RX = %00100000 IRQ_SPECIAL = %01100000 RR_INTR_PENDING_STATUS = 3 ; (Ref page 5-25) -INTR_PENDING_RX_EXT_A = %00101000 ; ANDed (RX or special IRQ) -INTR_PENDING_RX_EXT_B = %00000101 ; ANDed (RX or special IRQ) INTR_IS_RX = %00100100 ; ANDed (RX IRQ, channel A or B) -SER_FLAG_CH_A = %00111000 -SER_FLAG_CH_B = %00000111 - .code ; Read register value to A. @@ -338,13 +339,12 @@ IIgs: rts getClockSource: - ldy #SER_PARAMS::BAUDRATE - lda (ptr1),y ; Baudrate index - cc65 value - ldy #$01 + .assert SER_PARAMS::BAUDRATE = 0, error + lda (ptr1) ; Baudrate index - cc65 value cmp #SER_BAUD_115200 - beq :+ - ldy #$00 -: sty ClockSource + lda #$00 + adc #$00 + sta CurClockSource ; 0 = BRG, 1 = RTxC rts ;---------------------------------------------------------------------------- @@ -378,13 +378,13 @@ SER_OPEN: ldy #RR_INIT_STATUS ; Hit rr0 once to sync up jsr readSSCReg - ldy #WR_MISC_CTRL ; Turn everything off + ldy #WR_MISC_CTRL ; WR14: Turn everything off lda #$00 jsr writeSCCReg - jsr getClockSource ; Should we use BRG or XTAL? + jsr getClockSource ; Should we use BRG or RTxC? - ldy #SER_PARAMS::STOPBITS + ldy #SER_PARAMS::STOPBITS ; WR4 setup: clock mult., stop & parity lda (ptr1),y ; Stop bits tay lda StopTable,y ; Get value @@ -397,109 +397,92 @@ SER_OPEN: ora ParityTable,y ; Get value bmi InvParam - ldy ClockSource ; Setup clock multiplier + ldy CurClockSource ; Clock multiplier ora ClockMultiplier,y - ldy #WR_TX_RX_CTRL ; Setup stop & parity bits - jsr writeSCCReg + ldy #WR_TX_RX_CTRL + jsr writeSCCReg ; End of WR4 setup - ldy ClockSource + ldy CurClockSource ; WR11 setup: clock source cpx #CHANNEL_B - bne ClockA -ClockB: - lda ClockSourceB,y + beq SetClock + iny ; Shift to get correct ClockSource val + iny ; depending on our channel + +SetClock: + lda ClockSource,y ldy #WR_CLOCK_CTRL - jsr writeSCCReg + jsr writeSCCReg ; End of WR11 setup - lda #INTR_PENDING_RX_EXT_B ; Store which IRQ bits we'll check - sta CurChanIrqFlags - - bra SetBaud -ClockA: - lda ClockSourceA,y - ldy #WR_CLOCK_CTRL - jsr writeSCCReg - - lda #INTR_PENDING_RX_EXT_A ; Store which IRQ bits we'll check + lda ChanIrqFlags,x ; Store which IRQ bits we'll check sta CurChanIrqFlags SetBaud: - ldy #SER_PARAMS::BAUDRATE - lda (ptr1),y ; Baudrate index - cc65 value + .assert SER_PARAMS::BAUDRATE = 0, error + lda (ptr1) ; Baudrate index - cc65 value + asl tay - lda BaudTable,y ; Get chip value from Low/High tables + lda BaudTable,y ; Get low byte of register value bpl BaudOK ; Verify baudrate is supported InvParam: lda #SER_ERR_INIT_FAILED - ldx #$00 ; Promote char return value - stz Opened ; Mark port closed - cli - rts + ldy #$00 ; Mark port closed + bra SetupOut BaudOK: - tay - cpy #SER_BAUD_115200 - beq :+ ; Skip baud rate generator setup: - ; For 115200bps, we use XTAL instead - - lda BaudLowTable,y ; Get low byte - - phy - ldy #WR_BAUDL_CTRL - jsr writeSCCReg + phy ; WR12 setup: BRG time constant, low byte + ldy #WR_BAUDL_CTRL ; Setting WR12 & 13 is useless if we're using + jsr writeSCCReg ; RTxC, but doing it anyway makes code smaller ply - lda BaudHighTable,y ; Get high byte + iny + lda BaudTable,y ; WR13 setup: BRG time constant, high byte ldy #WR_BAUDH_CTRL jsr writeSCCReg -: lda #MISC_CTRL_RATE_GEN_ON ; Setup BRG according to selected rate - ldy ClockSource - cpy #$00 - beq :+ - lda #MISC_CTRL_RATE_GEN_OFF - -: ldy #WR_MISC_CTRL ; Time to turn this thing on + ldy CurClockSource ; WR14 setup: BRG enabling + lda BrgEnabled,y + ldy #WR_MISC_CTRL ; Time to turn this thing on jsr writeSCCReg - ldy #SER_PARAMS::DATABITS - lda (ptr1),y ; Data bits + ldy #SER_PARAMS::DATABITS ; WR3 setup: RX data bits + lda (ptr1),y tay - lda RxBitTable,y ; Data bits for RX - ora #RX_CTRL_ON ; and turn RX on + lda RxBitTable,y + ora #RX_CTRL_ON ; and turn receiver on phy ldy #WR_RX_CTRL - jsr writeSCCReg + jsr writeSCCReg ; End of WR3 setup ply - lda TxBitTable,y ; Data bits for TX - ora #TX_CTRL_ON ; and turn TX on - and #TX_DTR_ON + lda TxBitTable,y ; WR5 setup: TX data bits + ora #TX_CTRL_ON ; and turn transmitter on + and #TX_DTR_ON ; and turn DTR on sta RtsOff ; Save value for flow control - ora #TX_RTS_ON + ora #TX_RTS_ON ; and turn RTS on ldy #WR_TX_CTRL - jsr writeSCCReg + jsr writeSCCReg ; End of WR5 setup - ldy #WR_IRQ_CTRL + ldy #WR_IRQ_CTRL ; WR15 setup: IRQ lda #IRQ_CLEANUP_EIRQ jsr writeSCCReg - ldy #WR_INIT_CTRL ; Clear ext status (write twice) + ldy #WR_INIT_CTRL ; WR0 setup: clear existing IRQs lda #INIT_CTRL_CLEAR_EIRQ - jsr writeSCCReg + jsr writeSCCReg ; Clear (write twice) jsr writeSCCReg - ldy #WR_TX_RX_MODE_CTRL ; Activate RX IRQ + ldy #WR_TX_RX_MODE_CTRL ; WR1 setup: Activate RX IRQ lda #TX_RX_MODE_RXIRQ jsr writeSCCReg - lda SCCBREG ; Activate master IRQ + lda SCCBREG ; WR9 setup: Activate master IRQ ldy #WR_MASTER_IRQ_RST lda #MASTER_IRQ_SET jsr writeSCCReg @@ -507,22 +490,15 @@ BaudOK: lda SER_FLAG ; Get SerFlag's current value sta SerFlagOrig ; and save it - cpx #CHANNEL_B - bne IntA -IntB: - ora #SER_FLAG_CH_B ; Inform firmware we want channel B IRQs - bra StoreFlag -IntA: - ora #SER_FLAG_CH_A ; Inform firmware we want channel A IRQs -StoreFlag: + ora ChanIrqMask,x ; Tell firmware which channel IRQs we want sta SER_FLAG ldy #$01 ; Mark port opened - sty Opened - lda #SER_ERR_OK - ldx #$00 ; Promote char return value +SetupOut: + ldx #$00 ; Promote char return value + sty Opened cli rts From 23aa562094bdfeca0eb9d2e13b94b5f3208fa575 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Sat, 24 Feb 2024 15:34:38 +0800 Subject: [PATCH 2426/2710] Fixed potential errors with subtraction evaluation of identifiers at different memory locations. --- src/cc65/expr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/expr.c b/src/cc65/expr.c index a855e5b3c..f6c681db8 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -3272,7 +3272,7 @@ static void parsesub (ExprDesc* Expr) /* The right hand side is constant. Check left hand side. */ if (ED_IsQuasiConst (Expr)) { /* We can't do all 'ptr1 - ptr2' constantly at the moment */ - if (Expr->Sym == Expr2.Sym) { + if (ED_GetLoc (Expr) == ED_GetLoc (&Expr2) && Expr->Sym == Expr2.Sym) { Expr->IVal = (Expr->IVal - Expr2.IVal) / rscale; /* Get rid of unneeded flags etc. */ ED_MakeConstAbsInt (Expr, Expr->IVal); From 9b2d27d1e1a24a912978f8fa496f921523e3f909 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 29 Feb 2024 18:23:04 +0800 Subject: [PATCH 2427/2710] Fixed the error recovery integer type used for bit-fields. --- src/cc65/declare.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index e1e66ab85..11e6c5227 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -905,6 +905,8 @@ static int ParseFieldWidth (Declarator* D) ** otherwise the width of the field. */ { + ExprDesc Expr; + if (CurTok.Tok != TOK_COLON) { /* No bit-field declaration */ return -1; @@ -918,7 +920,16 @@ static int ParseFieldWidth (Declarator* D) /* Avoid a diagnostic storm by giving the bit-field the widest valid ** signed type, and continuing to parse. */ - D->Type[0].C = T_INT; + D->Type[0].C = T_LONG; + } + + if (IsTypeEnum (D->Type) && IsIncompleteESUType (D->Type)) { + /* If the type is an enum, it must be complete */ + Error ("Bit-field has incomplete type '%s'", + GetFullTypeName (D->Type)); + + /* Avoid a diagnostic storm */ + D->Type[0].C = T_LONG; } /* We currently support integral types up to long */ @@ -927,12 +938,12 @@ static int ParseFieldWidth (Declarator* D) Error ("cc65 currently supports only long-sized and smaller bit-field types"); /* Avoid a diagnostic storm */ - D->Type[0].C = T_INT; + D->Type[0].C = T_LONG; } /* Read the width */ NextToken (); - ExprDesc Expr = NoCodeConstAbsIntExpr (hie1); + Expr = NoCodeConstAbsIntExpr (hie1); if (Expr.IVal < 0) { Error ("Negative width in bit-field"); From 98767741ced8a3d836cfa12748e91d40ba6ac181 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 29 Feb 2024 18:24:22 +0800 Subject: [PATCH 2428/2710] Reorganized stuff in src/cc65/declare.c. --- src/cc65/declare.c | 996 +++++++++++++++++++++++---------------------- 1 file changed, 507 insertions(+), 489 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index e1e66ab85..bae1a3be8 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -71,17 +71,33 @@ -static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags); -/* Parse a type specifier */ +static SymEntry* ParseEnumSpec (const char* Name, unsigned* DSFlags); +/* Parse an enum specifier */ + +static SymEntry* ParseUnionSpec (const char* Name, unsigned* DSFlags); +/* Parse a union specifier */ + +static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags); +/* Parse a struct specifier */ /*****************************************************************************/ -/* Internal functions */ +/* Type specification parser */ /*****************************************************************************/ +static void InitDeclSpec (DeclSpec* Spec) +/* Initialize the DeclSpec struct for use */ +{ + Spec->StorageClass = 0; + Spec->Type[0].C = T_END; + Spec->Flags = 0; +} + + + static unsigned ParseOneStorageClass (void) /* Parse and return a storage class specifier */ { @@ -421,255 +437,284 @@ static void UseDefaultType (DeclSpec* Spec, typespec_t TSFlags) -static void InitDeclSpec (DeclSpec* Spec) -/* Initialize the DeclSpec struct for use */ -{ - Spec->StorageClass = 0; - Spec->Type[0].C = T_END; - Spec->Flags = 0; -} - - - -static void InitDeclarator (Declarator* D) -/* Initialize the Declarator struct for use */ -{ - D->Ident[0] = '\0'; - D->Type[0].C = T_END; - D->Index = 0; - D->Attributes = 0; -} - - - -static void NeedTypeSpace (Declarator* D, unsigned Count) -/* Check if there is enough space for Count type specifiers within D */ -{ - if (D->Index + Count >= MAXTYPELEN) { - /* We must call Fatal() here, since calling Error() will try to - ** continue, and the declaration type is not correctly terminated - ** in case we come here. - */ - Fatal ("Too many type specifiers"); - } -} - - - -static void AddTypeCodeToDeclarator (Declarator* D, TypeCode T) -/* Add a type specifier to the type of a declarator */ -{ - NeedTypeSpace (D, 1); - D->Type[D->Index++].C = T; -} - - - -static void FixQualifiers (Type* DataType) -/* Apply several fixes to qualifiers */ -{ - Type* T; - TypeCode Q; - - /* Using typedefs, it is possible to generate declarations that have - ** type qualifiers attached to an array, not the element type. Go and - ** fix these here. - */ - T = DataType; - Q = T_QUAL_NONE; - while (T->C != T_END) { - if (IsTypeArray (T)) { - /* Extract any type qualifiers */ - Q |= GetQualifier (T); - T->C = GetUnqualRawTypeCode (T); - } else { - /* Add extracted type qualifiers here */ - T->C |= Q; - Q = T_QUAL_NONE; - } - ++T; - } - /* Q must be empty now */ - CHECK (Q == T_QUAL_NONE); - - /* Do some fixes on pointers and functions. */ - T = DataType; - while (T->C != T_END) { - if (IsTypePtr (T)) { - /* Calling convention qualifier on the pointer? */ - if (IsQualCConv (T)) { - /* Pull the convention off of the pointer */ - Q = T[0].C & T_QUAL_CCONV; - T[0].C &= ~T_QUAL_CCONV; - - /* Pointer to a function which doesn't have an explicit convention? */ - if (IsTypeFunc (T + 1)) { - if (IsQualCConv (T + 1)) { - if ((T[1].C & T_QUAL_CCONV) == Q) { - Warning ("Pointer duplicates function's calling convention"); - } else { - Error ("Function's and pointer's calling conventions are different"); - } - } else { - if (Q == T_QUAL_FASTCALL && IsVariadicFunc (T + 1)) { - Error ("Variadic-function pointers cannot be __fastcall__"); - } else { - /* Move the qualifier from the pointer to the function. */ - T[1].C |= Q; - } - } - } else { - Error ("Not pointer to a function; can't use a calling convention"); - } - } - - /* Apply the default far and near qualifiers if none are given */ - Q = (T[0].C & T_QUAL_ADDRSIZE); - if (Q == T_QUAL_NONE) { - /* No address size qualifiers specified */ - if (IsTypeFunc (T+1)) { - /* Pointer to function. Use the qualifier from the function, - ** or the default if the function doesn't have one. - */ - Q = (T[1].C & T_QUAL_ADDRSIZE); - if (Q == T_QUAL_NONE) { - Q = CodeAddrSizeQualifier (); - } - } else { - Q = DataAddrSizeQualifier (); - } - T[0].C |= Q; - } else { - /* We have address size qualifiers. If followed by a function, - ** apply them to the function also. - */ - if (IsTypeFunc (T+1)) { - TypeCode FQ = (T[1].C & T_QUAL_ADDRSIZE); - if (FQ == T_QUAL_NONE) { - T[1].C |= Q; - } else if (FQ != Q) { - Error ("Address size qualifier mismatch"); - T[1].C = (T[1].C & ~T_QUAL_ADDRSIZE) | Q; - } - } - } - - } else if (IsTypeFunc (T)) { - - /* Apply the default far and near qualifiers if none are given */ - if ((T[0].C & T_QUAL_ADDRSIZE) == 0) { - T[0].C |= CodeAddrSizeQualifier (); - } - - } else { - - /* If we have remaining qualifiers, flag them as invalid */ - Q = T[0].C; - - if (Q & T_QUAL_NEAR) { - Error ("Invalid '__near__' qualifier"); - Q &= ~T_QUAL_NEAR; - } - if (Q & T_QUAL_FAR) { - Error ("Invalid '__far__' qualifier"); - Q &= ~T_QUAL_FAR; - } - if (Q & T_QUAL_FASTCALL) { - Error ("Invalid '__fastcall__' qualifier"); - Q &= ~T_QUAL_FASTCALL; - } - if (Q & T_QUAL_CDECL) { - Error ("Invalid '__cdecl__' qualifier"); - Q &= ~T_QUAL_CDECL; - } - - /* Clear the invalid qualifiers */ - T[0].C &= Q; - - } - ++T; - } -} - - - -static void FixFunctionReturnType (Type* T) -/* Check if the data type consists of any functions returning forbidden return -** types and remove qualifiers from the return types if they are not void. +static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags) +/* Parse a type specifier. Store whether one of "signed" or "unsigned" was +** specified, so bit-fields of unspecified signedness can be treated as +** unsigned; without special handling, it would be treated as signed. */ { - while (T->C != T_END) { - if (IsTypeFunc (T)) { - ++T; + ident Ident; + SymEntry* TagEntry; + TypeCode Qualifiers = T_QUAL_NONE; - /* Functions may not return functions or arrays */ - if (IsTypeFunc (T)) { - Error ("Functions are not allowed to return functions"); - } else if (IsTypeArray (T)) { - Error ("Functions are not allowed to return arrays"); + /* Assume we have an explicitly specified type */ + Spec->Flags = (Spec->Flags & ~DS_TYPE_MASK) | DS_EXPLICIT_TYPE; + + /* Read storage specifiers and/or type qualifiers if we have any */ + OptionalSpecifiers (Spec, &Qualifiers, TSFlags); + + /* Look at the data type */ + switch (CurTok.Tok) { + + case TOK_VOID: + NextToken (); + Spec->Type[0].C = T_VOID; + Spec->Type[0].A.U = 0; + Spec->Type[1].C = T_END; + break; + + case TOK_CHAR: + NextToken (); + Spec->Type[0].C = T_CHAR; + Spec->Type[1].C = T_END; + break; + + case TOK_LONG: + NextToken (); + if (CurTok.Tok == TOK_UNSIGNED) { + Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; + NextToken (); + OptionalInt (); + Spec->Type[0].C = T_ULONG; + Spec->Type[1].C = T_END; + } else { + OptionalSigned (Spec); + OptionalInt (); + Spec->Type[0].C = T_LONG; + Spec->Type[1].C = T_END; } + break; - /* The return type must not be qualified */ - if ((GetQualifier (T) & T_QUAL_CVR) != T_QUAL_NONE) { - /* We are stricter than the standard here */ - if (GetRawTypeRank (T) == T_RANK_VOID) { - /* A qualified void type is always an error */ - Error ("Function definition has qualified void return type"); - } else { - /* For others, qualifiers are ignored */ - Warning ("Type qualifiers ignored on function return type"); - T[0].C &= ~T_QUAL_CVR; - } + case TOK_SHORT: + NextToken (); + if (CurTok.Tok == TOK_UNSIGNED) { + Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; + NextToken (); + OptionalInt (); + Spec->Type[0].C = T_USHORT; + Spec->Type[1].C = T_END; + } else { + OptionalSigned (Spec); + OptionalInt (); + Spec->Type[0].C = T_SHORT; + Spec->Type[1].C = T_END; } - } else { - ++T; - } - } -} + break; + case TOK_INT: + NextToken (); + Spec->Type[0].C = T_INT; + Spec->Type[1].C = T_END; + break; + case TOK_SIGNED: + Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; + NextToken (); + switch (CurTok.Tok) { -static void CheckArrayElementType (const Type* T) -/* Check recursively if type consists of arrays of forbidden element types */ -{ - while (T->C != T_END) { - if (IsTypeArray (T)) { - /* If the array is multi-dimensional, keep going until we get the - ** true element type. + case TOK_CHAR: + NextToken (); + Spec->Type[0].C = T_SCHAR; + Spec->Type[1].C = T_END; + break; + + case TOK_SHORT: + NextToken (); + OptionalInt (); + Spec->Type[0].C = T_SHORT; + Spec->Type[1].C = T_END; + break; + + case TOK_LONG: + NextToken (); + OptionalInt (); + Spec->Type[0].C = T_LONG; + Spec->Type[1].C = T_END; + break; + + case TOK_INT: + NextToken (); + /* FALL THROUGH */ + + default: + Spec->Type[0].C = T_INT; + Spec->Type[1].C = T_END; + break; + } + break; + + case TOK_UNSIGNED: + Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; + NextToken (); + switch (CurTok.Tok) { + + case TOK_CHAR: + NextToken (); + Spec->Type[0].C = T_UCHAR; + Spec->Type[1].C = T_END; + break; + + case TOK_SHORT: + NextToken (); + OptionalInt (); + Spec->Type[0].C = T_USHORT; + Spec->Type[1].C = T_END; + break; + + case TOK_LONG: + NextToken (); + OptionalInt (); + Spec->Type[0].C = T_ULONG; + Spec->Type[1].C = T_END; + break; + + case TOK_INT: + NextToken (); + /* FALL THROUGH */ + + default: + Spec->Type[0].C = T_UINT; + Spec->Type[1].C = T_END; + break; + } + break; + + case TOK_FLOAT: + NextToken (); + Spec->Type[0].C = T_FLOAT; + Spec->Type[1].C = T_END; + break; + + case TOK_DOUBLE: + NextToken (); + Spec->Type[0].C = T_DOUBLE; + Spec->Type[1].C = T_END; + break; + + case TOK_UNION: + NextToken (); + /* Remember we have an extra type decl */ + Spec->Flags |= DS_EXTRA_TYPE; + /* Check for tag name */ + if (CurTok.Tok == TOK_IDENT) { + strcpy (Ident, CurTok.Ident); + NextToken (); + } else if (CurTok.Tok == TOK_LCURLY) { + AnonName (Ident, "union"); + } else { + Error ("Tag name identifier or '{' expected"); + UseDefaultType (Spec, TS_DEFAULT_TYPE_NONE); + break; + } + /* Declare the union in the current scope */ + TagEntry = ParseUnionSpec (Ident, &Spec->Flags); + /* Encode the union entry into the type */ + Spec->Type[0].C = T_UNION; + SetESUTagSym (Spec->Type, TagEntry); + Spec->Type[1].C = T_END; + break; + + case TOK_STRUCT: + NextToken (); + /* Remember we have an extra type decl */ + Spec->Flags |= DS_EXTRA_TYPE; + /* Check for tag name */ + if (CurTok.Tok == TOK_IDENT) { + strcpy (Ident, CurTok.Ident); + NextToken (); + } else if (CurTok.Tok == TOK_LCURLY) { + AnonName (Ident, "struct"); + } else { + Error ("Tag name identifier or '{' expected"); + UseDefaultType (Spec, TS_DEFAULT_TYPE_NONE); + break; + } + /* Declare the struct in the current scope */ + TagEntry = ParseStructSpec (Ident, &Spec->Flags); + /* Encode the struct entry into the type */ + Spec->Type[0].C = T_STRUCT; + SetESUTagSym (Spec->Type, TagEntry); + Spec->Type[1].C = T_END; + break; + + case TOK_ENUM: + NextToken (); + /* Remember we have an extra type decl */ + Spec->Flags |= DS_EXTRA_TYPE; + /* Check for tag name */ + if (CurTok.Tok == TOK_IDENT) { + strcpy (Ident, CurTok.Ident); + NextToken (); + } else if (CurTok.Tok == TOK_LCURLY) { + AnonName (Ident, "enum"); + } else { + Error ("Tag name identifier or '{' expected"); + UseDefaultType (Spec, TS_DEFAULT_TYPE_NONE); + break; + } + /* Parse the enum decl */ + TagEntry = ParseEnumSpec (Ident, &Spec->Flags); + /* Encode the enum entry into the type */ + Spec->Type[0].C |= T_ENUM; + SetESUTagSym (Spec->Type, TagEntry); + Spec->Type[1].C = T_END; + /* The signedness of enums is determined by the type, so say this is specified to avoid + ** the int -> unsigned int handling for plain int bit-fields in AddBitField. */ - ++T; - if (SizeOf (T) == 0) { - if (IsTypeArray (T) || IsIncompleteESUType (T)) { - /* We cannot have an array of incomplete elements */ - if (!IsTypeArray (T) || GetElementCount (T) == UNSPECIFIED) { - Error ("Array of incomplete element type '%s'", - GetFullTypeName (T)); - return; - } - } else if (!IsTypeVoid (T) || IS_Get (&Standard) != STD_CC65) { - /* We could support certain 0-size element types as an extension */ - Error ("Array of 0-size element type '%s'", - GetFullTypeName (T)); - return; + Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; + break; + + case TOK_IDENT: + /* This could be a label */ + if (NextTok.Tok != TOK_COLON || GetLexicalLevel () == LEX_LEVEL_STRUCT) { + TagEntry = FindSym (CurTok.Ident); + if (TagEntry && SymIsTypeDef (TagEntry)) { + /* It's a typedef */ + NextToken (); + TypeCopy (Spec->Type, TagEntry->Type); + /* If it's a typedef, we should actually use whether the signedness was + ** specified on the typedef, but that information has been lost. Treat the + ** signedness as being specified to work around the ICE in #1267. + ** Unforunately, this will cause plain int bit-fields defined via typedefs + ** to be treated as signed rather than unsigned. + */ + Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; + break; + } else if ((TSFlags & TS_MASK_DEFAULT_TYPE) == TS_DEFAULT_TYPE_NONE) { + /* Treat this identifier as an unknown type */ + Error ("Unknown type name '%s'", CurTok.Ident); + TypeCopy (Spec->Type, type_int); + NextToken (); + break; } } else { - /* Elements cannot contain flexible array members themselves */ - if (IsClassStruct (T)) { - SymEntry* TagEntry = GetESUTagSym (T); - if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) { - Error ("Invalid use of struct with flexible array member"); - return; - } - } + /* This is a label. Use the default type flag to end the loop + ** in DeclareLocals. The type code used here doesn't matter as + ** long as it has no qualifiers. + */ + UseDefaultType (Spec, TS_DEFAULT_TYPE_INT); + break; } - } else { - ++T; - } + /* FALL THROUGH */ + + default: + UseDefaultType (Spec, TSFlags); + break; } + + /* There may also be specifiers/qualifiers *after* the initial type */ + OptionalSpecifiers (Spec, &Qualifiers, TSFlags); + Spec->Type[0].C |= Qualifiers; } +/*****************************************************************************/ +/* Enum/struct/union parser */ +/*****************************************************************************/ + + + static SymEntry* ForwardESU (const char* Name, unsigned Flags, unsigned* DSFlags) /* Handle an enum, struct or union forward declaration */ { @@ -731,7 +776,7 @@ static const Type* GetEnumeratorType (long Min, unsigned long Max, int Signed) static SymEntry* ParseEnumSpec (const char* Name, unsigned* DSFlags) -/* Process an enum specifier */ +/* Parse an enum specifier */ { SymTable* FieldTab; long EnumVal; @@ -1505,274 +1550,247 @@ EndOfDecl: -static void ParseTypeSpec (DeclSpec* Spec, typespec_t TSFlags) -/* Parse a type specifier. Store whether one of "signed" or "unsigned" was -** specified, so bit-fields of unspecified signedness can be treated as -** unsigned; without special handling, it would be treated as signed. +/*****************************************************************************/ +/* Declarator parser */ +/*****************************************************************************/ + + + +static void InitDeclarator (Declarator* D) +/* Initialize the Declarator struct for use */ +{ + D->Ident[0] = '\0'; + D->Type[0].C = T_END; + D->Index = 0; + D->Attributes = 0; +} + + + +static void NeedTypeSpace (Declarator* D, unsigned Count) +/* Check if there is enough space for Count type specifiers within D */ +{ + if (D->Index + Count >= MAXTYPELEN) { + /* We must call Fatal() here, since calling Error() will try to + ** continue, and the declaration type is not correctly terminated + ** in case we come here. + */ + Fatal ("Too many type specifiers"); + } +} + + + +static void AddTypeCodeToDeclarator (Declarator* D, TypeCode T) +/* Add a type specifier to the type of a declarator */ +{ + NeedTypeSpace (D, 1); + D->Type[D->Index++].C = T; +} + + + +static void FixQualifiers (Type* DataType) +/* Apply several fixes to qualifiers */ +{ + Type* T; + TypeCode Q; + + /* Using typedefs, it is possible to generate declarations that have + ** type qualifiers attached to an array, not the element type. Go and + ** fix these here. + */ + T = DataType; + Q = T_QUAL_NONE; + while (T->C != T_END) { + if (IsTypeArray (T)) { + /* Extract any type qualifiers */ + Q |= GetQualifier (T); + T->C = GetUnqualRawTypeCode (T); + } else { + /* Add extracted type qualifiers here */ + T->C |= Q; + Q = T_QUAL_NONE; + } + ++T; + } + /* Q must be empty now */ + CHECK (Q == T_QUAL_NONE); + + /* Do some fixes on pointers and functions. */ + T = DataType; + while (T->C != T_END) { + if (IsTypePtr (T)) { + /* Calling convention qualifier on the pointer? */ + if (IsQualCConv (T)) { + /* Pull the convention off of the pointer */ + Q = T[0].C & T_QUAL_CCONV; + T[0].C &= ~T_QUAL_CCONV; + + /* Pointer to a function which doesn't have an explicit convention? */ + if (IsTypeFunc (T + 1)) { + if (IsQualCConv (T + 1)) { + if ((T[1].C & T_QUAL_CCONV) == Q) { + Warning ("Pointer duplicates function's calling convention"); + } else { + Error ("Function's and pointer's calling conventions are different"); + } + } else { + if (Q == T_QUAL_FASTCALL && IsVariadicFunc (T + 1)) { + Error ("Variadic-function pointers cannot be __fastcall__"); + } else { + /* Move the qualifier from the pointer to the function. */ + T[1].C |= Q; + } + } + } else { + Error ("Not pointer to a function; can't use a calling convention"); + } + } + + /* Apply the default far and near qualifiers if none are given */ + Q = (T[0].C & T_QUAL_ADDRSIZE); + if (Q == T_QUAL_NONE) { + /* No address size qualifiers specified */ + if (IsTypeFunc (T+1)) { + /* Pointer to function. Use the qualifier from the function, + ** or the default if the function doesn't have one. + */ + Q = (T[1].C & T_QUAL_ADDRSIZE); + if (Q == T_QUAL_NONE) { + Q = CodeAddrSizeQualifier (); + } + } else { + Q = DataAddrSizeQualifier (); + } + T[0].C |= Q; + } else { + /* We have address size qualifiers. If followed by a function, + ** apply them to the function also. + */ + if (IsTypeFunc (T+1)) { + TypeCode FQ = (T[1].C & T_QUAL_ADDRSIZE); + if (FQ == T_QUAL_NONE) { + T[1].C |= Q; + } else if (FQ != Q) { + Error ("Address size qualifier mismatch"); + T[1].C = (T[1].C & ~T_QUAL_ADDRSIZE) | Q; + } + } + } + + } else if (IsTypeFunc (T)) { + + /* Apply the default far and near qualifiers if none are given */ + if ((T[0].C & T_QUAL_ADDRSIZE) == 0) { + T[0].C |= CodeAddrSizeQualifier (); + } + + } else { + + /* If we have remaining qualifiers, flag them as invalid */ + Q = T[0].C; + + if (Q & T_QUAL_NEAR) { + Error ("Invalid '__near__' qualifier"); + Q &= ~T_QUAL_NEAR; + } + if (Q & T_QUAL_FAR) { + Error ("Invalid '__far__' qualifier"); + Q &= ~T_QUAL_FAR; + } + if (Q & T_QUAL_FASTCALL) { + Error ("Invalid '__fastcall__' qualifier"); + Q &= ~T_QUAL_FASTCALL; + } + if (Q & T_QUAL_CDECL) { + Error ("Invalid '__cdecl__' qualifier"); + Q &= ~T_QUAL_CDECL; + } + + /* Clear the invalid qualifiers */ + T[0].C &= Q; + + } + ++T; + } +} + + + +static void FixFunctionReturnType (Type* T) +/* Check if the data type consists of any functions returning forbidden return +** types and remove qualifiers from the return types if they are not void. */ { - ident Ident; - SymEntry* TagEntry; - TypeCode Qualifiers = T_QUAL_NONE; + while (T->C != T_END) { + if (IsTypeFunc (T)) { + ++T; - /* Assume we have an explicitly specified type */ - Spec->Flags = (Spec->Flags & ~DS_TYPE_MASK) | DS_EXPLICIT_TYPE; - - /* Read storage specifiers and/or type qualifiers if we have any */ - OptionalSpecifiers (Spec, &Qualifiers, TSFlags); - - /* Look at the data type */ - switch (CurTok.Tok) { - - case TOK_VOID: - NextToken (); - Spec->Type[0].C = T_VOID; - Spec->Type[0].A.U = 0; - Spec->Type[1].C = T_END; - break; - - case TOK_CHAR: - NextToken (); - Spec->Type[0].C = T_CHAR; - Spec->Type[1].C = T_END; - break; - - case TOK_LONG: - NextToken (); - if (CurTok.Tok == TOK_UNSIGNED) { - Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; - NextToken (); - OptionalInt (); - Spec->Type[0].C = T_ULONG; - Spec->Type[1].C = T_END; - } else { - OptionalSigned (Spec); - OptionalInt (); - Spec->Type[0].C = T_LONG; - Spec->Type[1].C = T_END; + /* Functions may not return functions or arrays */ + if (IsTypeFunc (T)) { + Error ("Functions are not allowed to return functions"); + } else if (IsTypeArray (T)) { + Error ("Functions are not allowed to return arrays"); } - break; - case TOK_SHORT: - NextToken (); - if (CurTok.Tok == TOK_UNSIGNED) { - Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; - NextToken (); - OptionalInt (); - Spec->Type[0].C = T_USHORT; - Spec->Type[1].C = T_END; - } else { - OptionalSigned (Spec); - OptionalInt (); - Spec->Type[0].C = T_SHORT; - Spec->Type[1].C = T_END; + /* The return type must not be qualified */ + if ((GetQualifier (T) & T_QUAL_CVR) != T_QUAL_NONE) { + /* We are stricter than the standard here */ + if (GetRawTypeRank (T) == T_RANK_VOID) { + /* A qualified void type is always an error */ + Error ("Function definition has qualified void return type"); + } else { + /* For others, qualifiers are ignored */ + Warning ("Type qualifiers ignored on function return type"); + T[0].C &= ~T_QUAL_CVR; + } } - break; + } else { + ++T; + } + } +} - case TOK_INT: - NextToken (); - Spec->Type[0].C = T_INT; - Spec->Type[1].C = T_END; - break; - case TOK_SIGNED: - Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; - NextToken (); - switch (CurTok.Tok) { - case TOK_CHAR: - NextToken (); - Spec->Type[0].C = T_SCHAR; - Spec->Type[1].C = T_END; - break; - - case TOK_SHORT: - NextToken (); - OptionalInt (); - Spec->Type[0].C = T_SHORT; - Spec->Type[1].C = T_END; - break; - - case TOK_LONG: - NextToken (); - OptionalInt (); - Spec->Type[0].C = T_LONG; - Spec->Type[1].C = T_END; - break; - - case TOK_INT: - NextToken (); - /* FALL THROUGH */ - - default: - Spec->Type[0].C = T_INT; - Spec->Type[1].C = T_END; - break; - } - break; - - case TOK_UNSIGNED: - Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; - NextToken (); - switch (CurTok.Tok) { - - case TOK_CHAR: - NextToken (); - Spec->Type[0].C = T_UCHAR; - Spec->Type[1].C = T_END; - break; - - case TOK_SHORT: - NextToken (); - OptionalInt (); - Spec->Type[0].C = T_USHORT; - Spec->Type[1].C = T_END; - break; - - case TOK_LONG: - NextToken (); - OptionalInt (); - Spec->Type[0].C = T_ULONG; - Spec->Type[1].C = T_END; - break; - - case TOK_INT: - NextToken (); - /* FALL THROUGH */ - - default: - Spec->Type[0].C = T_UINT; - Spec->Type[1].C = T_END; - break; - } - break; - - case TOK_FLOAT: - NextToken (); - Spec->Type[0].C = T_FLOAT; - Spec->Type[1].C = T_END; - break; - - case TOK_DOUBLE: - NextToken (); - Spec->Type[0].C = T_DOUBLE; - Spec->Type[1].C = T_END; - break; - - case TOK_UNION: - NextToken (); - /* Remember we have an extra type decl */ - Spec->Flags |= DS_EXTRA_TYPE; - /* Check for tag name */ - if (CurTok.Tok == TOK_IDENT) { - strcpy (Ident, CurTok.Ident); - NextToken (); - } else if (CurTok.Tok == TOK_LCURLY) { - AnonName (Ident, "union"); - } else { - Error ("Tag name identifier or '{' expected"); - UseDefaultType (Spec, TS_DEFAULT_TYPE_NONE); - break; - } - /* Declare the union in the current scope */ - TagEntry = ParseUnionSpec (Ident, &Spec->Flags); - /* Encode the union entry into the type */ - Spec->Type[0].C = T_UNION; - SetESUTagSym (Spec->Type, TagEntry); - Spec->Type[1].C = T_END; - break; - - case TOK_STRUCT: - NextToken (); - /* Remember we have an extra type decl */ - Spec->Flags |= DS_EXTRA_TYPE; - /* Check for tag name */ - if (CurTok.Tok == TOK_IDENT) { - strcpy (Ident, CurTok.Ident); - NextToken (); - } else if (CurTok.Tok == TOK_LCURLY) { - AnonName (Ident, "struct"); - } else { - Error ("Tag name identifier or '{' expected"); - UseDefaultType (Spec, TS_DEFAULT_TYPE_NONE); - break; - } - /* Declare the struct in the current scope */ - TagEntry = ParseStructSpec (Ident, &Spec->Flags); - /* Encode the struct entry into the type */ - Spec->Type[0].C = T_STRUCT; - SetESUTagSym (Spec->Type, TagEntry); - Spec->Type[1].C = T_END; - break; - - case TOK_ENUM: - NextToken (); - /* Remember we have an extra type decl */ - Spec->Flags |= DS_EXTRA_TYPE; - /* Check for tag name */ - if (CurTok.Tok == TOK_IDENT) { - strcpy (Ident, CurTok.Ident); - NextToken (); - } else if (CurTok.Tok == TOK_LCURLY) { - AnonName (Ident, "enum"); - } else { - Error ("Tag name identifier or '{' expected"); - UseDefaultType (Spec, TS_DEFAULT_TYPE_NONE); - break; - } - /* Parse the enum decl */ - TagEntry = ParseEnumSpec (Ident, &Spec->Flags); - /* Encode the enum entry into the type */ - Spec->Type[0].C |= T_ENUM; - SetESUTagSym (Spec->Type, TagEntry); - Spec->Type[1].C = T_END; - /* The signedness of enums is determined by the type, so say this is specified to avoid - ** the int -> unsigned int handling for plain int bit-fields in AddBitField. +static void CheckArrayElementType (const Type* T) +/* Check recursively if type consists of arrays of forbidden element types */ +{ + while (T->C != T_END) { + if (IsTypeArray (T)) { + /* If the array is multi-dimensional, keep going until we get the + ** true element type. */ - Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; - break; - - case TOK_IDENT: - /* This could be a label */ - if (NextTok.Tok != TOK_COLON || GetLexicalLevel () == LEX_LEVEL_STRUCT) { - TagEntry = FindSym (CurTok.Ident); - if (TagEntry && SymIsTypeDef (TagEntry)) { - /* It's a typedef */ - NextToken (); - TypeCopy (Spec->Type, TagEntry->Type); - /* If it's a typedef, we should actually use whether the signedness was - ** specified on the typedef, but that information has been lost. Treat the - ** signedness as being specified to work around the ICE in #1267. - ** Unforunately, this will cause plain int bit-fields defined via typedefs - ** to be treated as signed rather than unsigned. - */ - Spec->Flags |= DS_EXPLICIT_SIGNEDNESS; - break; - } else if ((TSFlags & TS_MASK_DEFAULT_TYPE) == TS_DEFAULT_TYPE_NONE) { - /* Treat this identifier as an unknown type */ - Error ("Unknown type name '%s'", CurTok.Ident); - TypeCopy (Spec->Type, type_int); - NextToken (); - break; + ++T; + if (SizeOf (T) == 0) { + if (IsTypeArray (T) || IsIncompleteESUType (T)) { + /* We cannot have an array of incomplete elements */ + if (!IsTypeArray (T) || GetElementCount (T) == UNSPECIFIED) { + Error ("Array of incomplete element type '%s'", + GetFullTypeName (T)); + return; + } + } else if (!IsTypeVoid (T) || IS_Get (&Standard) != STD_CC65) { + /* We could support certain 0-size element types as an extension */ + Error ("Array of 0-size element type '%s'", + GetFullTypeName (T)); + return; } } else { - /* This is a label. Use the default type flag to end the loop - ** in DeclareLocals. The type code used here doesn't matter as - ** long as it has no qualifiers. - */ - UseDefaultType (Spec, TS_DEFAULT_TYPE_INT); - break; + /* Elements cannot contain flexible array members themselves */ + if (IsClassStruct (T)) { + SymEntry* TagEntry = GetESUTagSym (T); + if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) { + Error ("Invalid use of struct with flexible array member"); + return; + } + } } - /* FALL THROUGH */ - - default: - UseDefaultType (Spec, TSFlags); - break; + } else { + ++T; + } } - - /* There may also be specifiers/qualifiers *after* the initial type */ - OptionalSpecifiers (Spec, &Qualifiers, TSFlags); - Spec->Type[0].C |= Qualifiers; } From 731f349b24ac065f9c140a4cd0ce3ef123fc3cb7 Mon Sep 17 00:00:00 2001 From: acqn <acqn163@outlook.com> Date: Thu, 29 Feb 2024 18:24:22 +0800 Subject: [PATCH 2429/2710] Removed ParamTypeCvt(). --- src/cc65/declare.c | 31 ++----------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index bae1a3be8..a002862b8 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -1795,33 +1795,6 @@ static void CheckArrayElementType (const Type* T) -static const Type* ParamTypeCvt (Type* T) -/* If T is an array or a function, convert it to a pointer else do nothing. -** Return the resulting type. -*/ -{ - Type* Tmp = 0; - - if (IsTypeArray (T)) { - Tmp = ArrayToPtr (T); - } else if (IsTypeFunc (T)) { - Tmp = NewPointerTo (T); - } - - if (Tmp != 0) { - /* Do several fixes on qualifiers */ - FixQualifiers (Tmp); - - /* Replace the type */ - TypeCopy (T, Tmp); - TypeFree (Tmp); - } - - return T; -} - - - static void ParseOldStyleParamList (FuncDesc* F) /* Parse an old-style (K&R) parameter list */ { @@ -1929,7 +1902,7 @@ static void ParseOldStyleParamDeclList (FuncDesc* F attribute ((unused))) */ if (Param->Flags & SC_DEFTYPE) { /* Found it, change the default type to the one given */ - SymChangeType (Param, ParamTypeCvt (Decl.Type)); + SymChangeType (Param, PtrConversion (Decl.Type)); /* Reset the "default type" flag */ Param->Flags &= ~SC_DEFTYPE; } else { @@ -2042,7 +2015,7 @@ static void ParseAnsiParamList (FuncDesc* F) ParseAttribute (&Decl); /* Create a symbol table entry */ - Param = AddLocalSym (Decl.Ident, ParamTypeCvt (Decl.Type), Decl.StorageClass, 0); + Param = AddLocalSym (Decl.Ident, PtrConversion (Decl.Type), Decl.StorageClass, 0); /* Add attributes if we have any */ SymUseAttr (Param, &Decl); From a887b29ffb8b138dba83b00aff4b5ab4d2288e19 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Tue, 5 Mar 2024 07:04:59 +0100 Subject: [PATCH 2430/2710] Revert "Test strtok()." This reverts commit 3a7bd539568e25f33c64a88fd6e76a9e015c74f2. --- test/ref/strtok.c | 43 ------------------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 test/ref/strtok.c diff --git a/test/ref/strtok.c b/test/ref/strtok.c deleted file mode 100644 index 15c3a289d..000000000 --- a/test/ref/strtok.c +++ /dev/null @@ -1,43 +0,0 @@ -// 2024-02-14 Sven Michael Klose <pixel@hugbox.org> - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -void -error (void) -{ - printf ("strtok() test failed!\n"); - exit (-1); -} - -void -test (char * s) -{ - if (strcmp ("test", strtok (s, "/"))) - error (); - if (strcmp ("foo", strtok (NULL, "/"))) - error (); - if (strcmp ("bar", strtok (NULL, "/"))) - error (); - if (strtok (NULL, "/")) - error (); - if (strtok (NULL, "/")) - error (); -} - -int -main (void) -{ - char s1[] = "test/foo/bar"; - char s2[] = "/test/foo/bar"; - char s3[] = "//test/foo/bar"; - char s4[] = "//test/foo/bar//"; - - test (s1); - test (s2); - test (s3); - test (s4); - - return 0; -} From b993d88339d509b8d6a5a13a6bd313e7e42a624a Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 17 Mar 2024 17:19:42 +0100 Subject: [PATCH 2431/2710] second half of #2420 - don't use the loop macro. Fixes -j13 for me --- test/asm/Makefile | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/test/asm/Makefile b/test/asm/Makefile index dea53f6b2..5b3bff3f8 100644 --- a/test/asm/Makefile +++ b/test/asm/Makefile @@ -12,23 +12,25 @@ endif WORKDIR = ../testwrk/asm -SUBDIRS = cpudetect opcodes listing val err misc - .PHONY: all continue mostlyclean clean all: mostlyclean continue -define CALL_template +continue: mostlyclean + @$(MAKE) -C cpudetect all + @$(MAKE) -C opcodes all + @$(MAKE) -C listing all + @$(MAKE) -C val all + @$(MAKE) -C err all + @$(MAKE) -C misc all -continue:: - @$(MAKE) -C $1 all - -mostlyclean:: - @$(MAKE) -C $1 clean - -endef - -$(foreach subdir,$(SUBDIRS),$(eval $(call CALL_template,$(subdir)))) +mostlyclean: + @$(MAKE) -C cpudetect clean + @$(MAKE) -C opcodes clean + @$(MAKE) -C listing clean + @$(MAKE) -C val clean + @$(MAKE) -C err clean + @$(MAKE) -C misc clean clean: mostlyclean @$(call RMDIR,$(WORKDIR)) From 82165c1a7767043aa9cca856aaa57e7686a77975 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 18 Mar 2024 18:40:45 +0100 Subject: [PATCH 2432/2710] Implement strcasestr --- include/string.h | 1 + libsrc/common/strcasestr.c | 36 +++++++++++++++++++++++++++++++++ test/val/strstr-test.c | 41 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 libsrc/common/strcasestr.c create mode 100644 test/val/strstr-test.c diff --git a/include/string.h b/include/string.h index abaf80e7d..b19f44e31 100644 --- a/include/string.h +++ b/include/string.h @@ -81,6 +81,7 @@ void __fastcall__ bzero (void* ptr, size_t n); /* BSD */ char* __fastcall__ strdup (const char* s); /* SYSV/BSD */ int __fastcall__ stricmp (const char* s1, const char* s2); /* DOS/Windows */ int __fastcall__ strcasecmp (const char* s1, const char* s2); /* Same for Unix */ +char* __fastcall__ strcasestr (const char* str, const char* substr); int __fastcall__ strnicmp (const char* s1, const char* s2, size_t count); /* DOS/Windows */ int __fastcall__ strncasecmp (const char* s1, const char* s2, size_t count); /* Same for Unix */ size_t __fastcall__ strnlen (const char* s, size_t maxlen); /* POSIX.1-2008 */ diff --git a/libsrc/common/strcasestr.c b/libsrc/common/strcasestr.c new file mode 100644 index 000000000..693b43a37 --- /dev/null +++ b/libsrc/common/strcasestr.c @@ -0,0 +1,36 @@ +/* +** strcasestr.c +** +** Colin Leroy-Mira, 2024 +*/ + + + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +char* __fastcall__ strcasestr(const char *str, const char *substr) { + size_t len_a = strlen(str); + size_t len_b = strlen(substr); + const char *end_str; + + if (len_a < len_b) + return NULL; + + len_a -= len_b; + + for (end_str = str + len_a + 1; str < end_str; str++) { + if (!strncasecmp(str, substr, len_b)) + return (char *)str; + } + return NULL; +} diff --git a/test/val/strstr-test.c b/test/val/strstr-test.c new file mode 100644 index 000000000..5c8a147b0 --- /dev/null +++ b/test/val/strstr-test.c @@ -0,0 +1,41 @@ +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +int fails = 0; + +#define STRSTR_TEST(needle,expected) \ + if (strstr(haystack, (needle)) != (expected)) { \ + printf("strstr failure: expected %p for \"%s\", " \ + "got %p\n", \ + expected, needle, strstr(haystack, (needle)));\ + fails++; \ + } + +#define STRCASESTR_TEST(needle,expected) \ + if (strcasestr(haystack, (needle)) != (expected)) { \ + printf("strcasestr failure: expected %p for \"%s\", " \ + "got %p\n", \ + expected, needle, strcasestr(haystack, (needle)));\ + fails++; \ + } + +int main (void) +{ + const char *haystack = "This is a string to search in"; + + STRSTR_TEST("This is", haystack + 0); + STRSTR_TEST("a string", haystack + 8); + STRSTR_TEST("This is a string to search in", haystack); + STRSTR_TEST("search in", haystack + 20); + STRSTR_TEST("This is a string to search in with extra chars", NULL); + STRSTR_TEST("nowhere", NULL); + + STRCASESTR_TEST("this is", haystack + 0); + STRCASESTR_TEST("a STRING", haystack + 8); + STRCASESTR_TEST("this is a string TO search in", haystack); + STRCASESTR_TEST("This is a string to search in with extra chars", NULL); + STRCASESTR_TEST("search IN", haystack + 20); + + return fails; +} From b5d259bafb1b3bcf4eb2c1ddc92d14b3c891fd49 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 18 Mar 2024 19:52:04 +0100 Subject: [PATCH 2433/2710] Implement strcasestr as part of strstr --- libsrc/common/strcasestr.c | 36 -------------------------- libsrc/common/strstr.s | 53 +++++++++++++++++++++++++------------- libsrc/common/tolower.s | 6 ++--- 3 files changed, 38 insertions(+), 57 deletions(-) delete mode 100644 libsrc/common/strcasestr.c diff --git a/libsrc/common/strcasestr.c b/libsrc/common/strcasestr.c deleted file mode 100644 index 693b43a37..000000000 --- a/libsrc/common/strcasestr.c +++ /dev/null @@ -1,36 +0,0 @@ -/* -** strcasestr.c -** -** Colin Leroy-Mira, 2024 -*/ - - - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -char* __fastcall__ strcasestr(const char *str, const char *substr) { - size_t len_a = strlen(str); - size_t len_b = strlen(substr); - const char *end_str; - - if (len_a < len_b) - return NULL; - - len_a -= len_b; - - for (end_str = str + len_a + 1; str < end_str; str++) { - if (!strncasecmp(str, substr, len_b)) - return (char *)str; - } - return NULL; -} diff --git a/libsrc/common/strstr.s b/libsrc/common/strstr.s index 84f633245..9cc9c0d33 100644 --- a/libsrc/common/strstr.s +++ b/libsrc/common/strstr.s @@ -4,11 +4,18 @@ ; char* strstr (const char* haystack, const char* needle); ; - .export _strstr - .import popptr1 - .importzp ptr1, ptr2, ptr3, ptr4, tmp1 + .export _strstr, _strcasestr + .import popptr1, _tolower + .importzp ptr1, ptr2, ptr3, ptr4, tmp1, tmp2, tmp3 _strstr: + ldy #$01 + bne :+ +_strcasestr: + ldy #$00 +: + sty tmp2 ; Set case sensitivity + sta ptr2 ; Save needle stx ptr2+1 sta ptr4 ; Setup temp copy for later @@ -24,10 +31,19 @@ _strstr: ; Search for the beginning of the string (this is not an optimal search ; strategy [in fact, it's pretty dumb], but it's simple to implement). - sta tmp1 ; Save start of needle + ldx tmp2 ; Lowercase if needed + bne :+ + jsr _tolower + +: sta tmp1 ; Save start of needle @L1: lda (ptr1),y ; Get next char from haystack beq @NotFound ; Jump if end - cmp tmp1 ; Start of needle found? + + ldx tmp2 ; Lowercase if needed + bne :+ + jsr _tolower + +: cmp tmp1 ; Start of needle found? beq @L2 ; Jump if so iny ; Next char bne @L1 @@ -43,7 +59,7 @@ _strstr: bcc @L3 inc ptr1+1 -; ptr1 points to the start of needle now. Setup temporary pointers for the +; ptr1 points to the start of needle in haystack now. Setup temporary pointers for the ; search. The low byte of ptr4 is already set. @L3: sta ptr3 @@ -57,7 +73,19 @@ _strstr: @L4: lda (ptr4),y ; Get char from needle beq @Found ; Jump if end of needle (-> found) - cmp (ptr3),y ; Compare with haystack + + ldx tmp2 ; Lowercase if needed + bne :+ + jsr _tolower +: sta tmp3 + + lda (ptr3),y ; Compare with haystack + + ldx tmp2 ; Lowercase if needed + bne :+ + jsr _tolower + +: cmp tmp3 bne @L5 ; Jump if not equal iny ; Next char bne @L4 @@ -82,14 +110,3 @@ _strstr: lda #$00 ; return NULL tax rts - - - - - - - - - - - diff --git a/libsrc/common/tolower.s b/libsrc/common/tolower.s index 828be1cb1..22b030da3 100644 --- a/libsrc/common/tolower.s +++ b/libsrc/common/tolower.s @@ -17,12 +17,12 @@ _tolower: cpx #$00 ; out of range? bne @L2 ; if so, return the argument unchanged - tay ; save char + pha ; save char jsr ctypemaskdirect ; get character classification and #CT_UPPER ; upper case char? beq @L1 ; jump if no - tya ; restore char + pla ; restore char adc #<('a'-'A') ; make lower case char (ctypemaskdirect ensures carry clear) rts -@L1: tya ; restore char +@L1: pla ; restore char @L2: rts From 0c681b42ef96c53c429962a47011673e4f6ed88b Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 19 Mar 2024 18:07:17 +0100 Subject: [PATCH 2434/2710] Factorize to save 20 bytes --- libsrc/common/strstr.s | 45 ++++++++++++++++------------------------- libsrc/common/tolower.s | 7 ++++--- 2 files changed, 21 insertions(+), 31 deletions(-) diff --git a/libsrc/common/strstr.s b/libsrc/common/strstr.s index 9cc9c0d33..d24f1b0c9 100644 --- a/libsrc/common/strstr.s +++ b/libsrc/common/strstr.s @@ -5,16 +5,18 @@ ; .export _strstr, _strcasestr - .import popptr1, _tolower - .importzp ptr1, ptr2, ptr3, ptr4, tmp1, tmp2, tmp3 + .import popptr1, return0, tolower_a + .importzp ptr1, ptr2, ptr3, ptr4, tmp1, tmp2 + +maybe_lower: ; Lowercase char in A if needed + jmp tolower_a ; patched on entry with either JMP or RTS _strstr: - ldy #$01 + ldy #$60 ; RTS bne :+ _strcasestr: - ldy #$00 -: - sty tmp2 ; Set case sensitivity + ldy #$4C ; JMP absolute +: sty maybe_lower sta ptr2 ; Save needle stx ptr2+1 @@ -31,19 +33,13 @@ _strcasestr: ; Search for the beginning of the string (this is not an optimal search ; strategy [in fact, it's pretty dumb], but it's simple to implement). - ldx tmp2 ; Lowercase if needed - bne :+ - jsr _tolower - -: sta tmp1 ; Save start of needle + jsr maybe_lower ; Lowercase if needed + sta tmp1 ; Save start of needle @L1: lda (ptr1),y ; Get next char from haystack beq @NotFound ; Jump if end - ldx tmp2 ; Lowercase if needed - bne :+ - jsr _tolower - -: cmp tmp1 ; Start of needle found? + jsr maybe_lower ; Lowercase if needed + cmp tmp1 ; Start of needle found? beq @L2 ; Jump if so iny ; Next char bne @L1 @@ -74,18 +70,13 @@ _strcasestr: @L4: lda (ptr4),y ; Get char from needle beq @Found ; Jump if end of needle (-> found) - ldx tmp2 ; Lowercase if needed - bne :+ - jsr _tolower -: sta tmp3 + jsr maybe_lower ; Lowercase if needed + sta tmp2 lda (ptr3),y ; Compare with haystack - ldx tmp2 ; Lowercase if needed - bne :+ - jsr _tolower - -: cmp tmp3 + jsr maybe_lower ; Lowercase if needed + cmp tmp2 bne @L5 ; Jump if not equal iny ; Next char bne @L4 @@ -107,6 +98,4 @@ _strcasestr: ; We reached end of haystack without finding needle @NotFound: - lda #$00 ; return NULL - tax - rts + jmp return0 ; return NULL diff --git a/libsrc/common/tolower.s b/libsrc/common/tolower.s index 22b030da3..4d02e4dfb 100644 --- a/libsrc/common/tolower.s +++ b/libsrc/common/tolower.s @@ -10,13 +10,14 @@ ; int tolower (int c); ; - .export _tolower + .export _tolower, tolower_a .include "ctype.inc" .import ctypemaskdirect _tolower: cpx #$00 ; out of range? - bne @L2 ; if so, return the argument unchanged + bne out ; if so, return the argument unchanged +tolower_a: pha ; save char jsr ctypemaskdirect ; get character classification and #CT_UPPER ; upper case char? @@ -25,4 +26,4 @@ _tolower: adc #<('a'-'A') ; make lower case char (ctypemaskdirect ensures carry clear) rts @L1: pla ; restore char -@L2: rts +out: rts From 71d82ab5d9eb0adf3719955904549ff4ec547a75 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Fri, 22 Mar 2024 17:19:26 +0100 Subject: [PATCH 2435/2710] Use common naming scheme for tolowerdirect --- libsrc/common/strstr.s | 4 ++-- libsrc/common/tolower.s | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libsrc/common/strstr.s b/libsrc/common/strstr.s index d24f1b0c9..6ab46148c 100644 --- a/libsrc/common/strstr.s +++ b/libsrc/common/strstr.s @@ -5,11 +5,11 @@ ; .export _strstr, _strcasestr - .import popptr1, return0, tolower_a + .import popptr1, return0, tolowerdirect .importzp ptr1, ptr2, ptr3, ptr4, tmp1, tmp2 maybe_lower: ; Lowercase char in A if needed - jmp tolower_a ; patched on entry with either JMP or RTS + jmp tolowerdirect ; patched on entry with either JMP or RTS _strstr: ldy #$60 ; RTS diff --git a/libsrc/common/tolower.s b/libsrc/common/tolower.s index 4d02e4dfb..9c143f1ce 100644 --- a/libsrc/common/tolower.s +++ b/libsrc/common/tolower.s @@ -10,14 +10,14 @@ ; int tolower (int c); ; - .export _tolower, tolower_a + .export _tolower, tolowerdirect .include "ctype.inc" .import ctypemaskdirect _tolower: cpx #$00 ; out of range? bne out ; if so, return the argument unchanged -tolower_a: +tolowerdirect: pha ; save char jsr ctypemaskdirect ; get character classification and #CT_UPPER ; upper case char? From 79585194e655f142e603bd397f86a9aceded5eb0 Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@github.com> Date: Thu, 28 Mar 2024 16:33:20 -0400 Subject: [PATCH 2436/2710] provide simple examples for using sim65 with C and assembly code --- doc/sim65.sgml | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/doc/sim65.sgml b/doc/sim65.sgml index c2740bbad..e4b6762d4 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -124,11 +124,28 @@ Exit codes are limited to 8 bits. The standard C library high level file input and output is functional. A sim65 application can be written like a command line application, -providing arguments to <tt/main/ and using the <tt/stdio.h/ interfaces. +providing command line arguments to <tt/main/ and using the <tt/stdio.h/ interfaces +to interact with the console or access files. Internally, file input and output is provided at a lower level by a set of built-in paravirtualization functions (<ref id="paravirt-internal" name="see below">). +Example: + +<tscreen><verb> +#include <stdio.h> +int main() +{ + printf("Hello!\n"); + return 5; +} + +// Build and run: +// cc65 -o example.s example.c +// ca65 -o example.o example.s +// ld65 -t sim6502 -o example.prg example.o sim6502.lib +// sim65 example.prg +</verb></tscreen> <sect>Creating a Test in Assembly<p> @@ -141,11 +158,25 @@ and the sim65 library provides two ways to return an 8-bit exit code: <item>Return from <tt/_main/ with the exit code in <tt/A/. -<item><tt/jmp exit/ with the code in <tt/A/. +<item><tt/jmp exit/ with the code in <tt/A/. (<tt/.import exit/ from the sim65 library.) </itemize> -The binary file has a 12 byte header: +Example: + +<tscreen><verb> +.export _main +_main: + lda #5 + rts + +; Build and run: +; ca65 -o example.o example.s +; ld65 -t sim6502 -o example.prg example.o sim6502.lib +; sim65 example.prg +</verb></tscreen> + +Internally, the binary program file has a 12 byte header provided by the library: <itemize> @@ -182,6 +213,9 @@ These use cc65 calling conventions, and are intended for use with the sim65 targ <item><tt/IRQ/ and <tt/NMI/ events will not be generated, though <tt/BRK/ can be used if the IRQ vector at <tt/$FFFE/ is manually prepared by the test code. +<item>The sim6502 or sim65c02 targets provide a default configuration, +but if customization is needed, <tt/sim6502.cfg/ or <tt/sim65c02.cfg/ might be used as a template. + </itemize> From 89b709c7f87da4594d93f9a45c1a95b0b72b15bc Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@github.com> Date: Thu, 28 Mar 2024 16:55:55 -0400 Subject: [PATCH 2437/2710] make it clearer that explicit lib is required, note that exit is from stdlib.h, exit codes are unsigned, tweak "see below" for spacing, clarify that assembly can be used with C tests as well --- doc/sim65.sgml | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/doc/sim65.sgml b/doc/sim65.sgml index e4b6762d4..c70e06412 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -115,12 +115,12 @@ PVExit ($01) <sect>Creating a Test in C<p> -For a C test compiled and linked with <tt/--target sim6502/ the +For a C test linked with <tt/--target sim6502/ and the <tt/sim6502.lib/ library, command line arguments to <tt/sim65/ will be passed to <tt/main/, and the return value from <tt/main/ will become sim65's exit code. -The <tt/exit/ function may also be used to terminate with an exit code. +The <tt/stdlib.h/ <tt/exit/ function may also be used to terminate with an exit code. -Exit codes are limited to 8 bits. +Exit codes are limited to an unsigned 8 bit value. The standard C library high level file input and output is functional. A sim65 application can be written like a command line application, @@ -128,7 +128,7 @@ providing command line arguments to <tt/main/ and using the <tt/stdio.h/ interfa to interact with the console or access files. Internally, file input and output is provided at a lower level by -a set of built-in paravirtualization functions (<ref id="paravirt-internal" name="see below">). +a set of built-in paravirtualization functions (see <ref id="paravirt-internal" name="below">). Example: @@ -149,9 +149,11 @@ int main() <sect>Creating a Test in Assembly<p> -Assembly tests may similarly be assembled and linked with -<tt/--target sim6502/ or <tt/--target sim65c02/. -Define and export <tt/_main/ as an entry point, +Though a C test may also link with assembly code, +a pure assembly test can also be created. + +Link with <tt/--target sim6502/ or <tt/--target sim65c02/ and the corresponding library, +define and export <tt/_main/ as an entry point, and the sim65 library provides two ways to return an 8-bit exit code: <itemize> @@ -213,8 +215,8 @@ These use cc65 calling conventions, and are intended for use with the sim65 targ <item><tt/IRQ/ and <tt/NMI/ events will not be generated, though <tt/BRK/ can be used if the IRQ vector at <tt/$FFFE/ is manually prepared by the test code. -<item>The sim6502 or sim65c02 targets provide a default configuration, -but if customization is needed, <tt/sim6502.cfg/ or <tt/sim65c02.cfg/ might be used as a template. +<item>The <tt/sim6502/ or <tt/sim65c02/ targets provide a default configuration, +but if customization is needed <tt/sim6502.cfg/ or <tt/sim65c02.cfg/ might be used as a template. </itemize> From 074ec82126c16a14da2579c6994eec9b7417e119 Mon Sep 17 00:00:00 2001 From: Olli Savia <ops@iki.fi> Date: Tue, 2 Apr 2024 19:25:15 +0300 Subject: [PATCH 2438/2710] Added missing EXEHDR --- cfg/vic20-asm-32k.cfg | 1 + cfg/vic20-asm-3k.cfg | 1 + cfg/vic20-asm.cfg | 1 + 3 files changed, 3 insertions(+) diff --git a/cfg/vic20-asm-32k.cfg b/cfg/vic20-asm-32k.cfg index 622cfb26f..3d0341e71 100644 --- a/cfg/vic20-asm-32k.cfg +++ b/cfg/vic20-asm-32k.cfg @@ -14,6 +14,7 @@ MEMORY { SEGMENTS { ZEROPAGE: load = ZP, type = zp, optional = yes; LOADADDR: load = LOADADDR, type = ro; + EXEHDR: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; diff --git a/cfg/vic20-asm-3k.cfg b/cfg/vic20-asm-3k.cfg index 1afaf0b30..6ef06957e 100644 --- a/cfg/vic20-asm-3k.cfg +++ b/cfg/vic20-asm-3k.cfg @@ -14,6 +14,7 @@ MEMORY { SEGMENTS { ZEROPAGE: load = ZP, type = zp, optional = yes; LOADADDR: load = LOADADDR, type = ro; + EXEHDR: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; diff --git a/cfg/vic20-asm.cfg b/cfg/vic20-asm.cfg index 5f6c7cc74..531d3f010 100644 --- a/cfg/vic20-asm.cfg +++ b/cfg/vic20-asm.cfg @@ -14,6 +14,7 @@ MEMORY { SEGMENTS { ZEROPAGE: load = ZP, type = zp, optional = yes; LOADADDR: load = LOADADDR, type = ro; + EXEHDR: load = MAIN, type = ro, optional = yes; CODE: load = MAIN, type = ro; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; From c500cb90860fa0e7a8280cf834ab88d4f375a470 Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sat, 3 Jun 2023 16:33:18 +0300 Subject: [PATCH 2439/2710] Add support of unnamed labels with @ (.localchar) prefix. --- src/ca65/main.c | 18 ++++++++++++++++++ src/ca65/scanner.c | 44 ++++++++++++++++++++++++++++++++++---------- src/ca65/token.h | 2 +- src/ca65/ulabel.c | 8 ++++++-- 4 files changed, 59 insertions(+), 13 deletions(-) diff --git a/src/ca65/main.c b/src/ca65/main.c index 3ec6c84ee..f3100162a 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -707,6 +707,24 @@ static void OneLine (void) NextTok (); } + /* Handle @-style unnamed labels */ + if (CurTok.Tok == TOK_ULABEL) { + if (CurTok.IVal != 0) { + Error ("Invalid unnamed label definition"); + } + ULabDef (); + NextTok (); + + /* Skip the colon. If NoColonLabels is enabled, allow labels without + ** a colon if there is no whitespace before the identifier. + */ + if (CurTok.Tok == TOK_COLON) { + NextTok (); + } else if (CurTok.WS || !NoColonLabels) { + Error ("':' expected"); + } + } + /* If the first token on the line is an identifier, check for a macro or ** an instruction. */ diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c index 185100025..146c74958 100644 --- a/src/ca65/scanner.c +++ b/src/ca65/scanner.c @@ -1124,17 +1124,33 @@ Again: /* Local symbol? */ if (C == LocalStart) { - /* Read the identifier. */ - ReadIdent (); + NextChar (); - /* Start character alone is not enough */ - if (SB_GetLen (&CurTok.SVal) == 1) { - Error ("Invalid cheap local symbol"); - goto Again; + if (IsIdChar (C)) { + /* Read a local identifier */ + CurTok.Tok = TOK_LOCAL_IDENT; + SB_AppendChar (&CurTok.SVal, LocalStart); + ReadIdent (); + } else { + /* Read an unnamed label */ + CurTok.IVal = 0; + CurTok.Tok = TOK_ULABEL; + + if (C == '-' || C == '<') { + int PrevC = C; + do { + --CurTok.IVal; + NextChar (); + } while (C == PrevC); + } else if (C == '+' || C == '>') { + int PrevC = C; + do { + ++CurTok.IVal; + NextChar (); + } while (C == PrevC); + } } - /* A local identifier */ - CurTok.Tok = TOK_LOCAL_IDENT; return; } @@ -1314,22 +1330,30 @@ CharAgain: break; case '-': + case '<': + { + int PrevC = C; CurTok.IVal = 0; do { --CurTok.IVal; NextChar (); - } while (C == '-'); + } while (C == PrevC); CurTok.Tok = TOK_ULABEL; break; + } case '+': + case '>': + { + int PrevC = C; CurTok.IVal = 0; do { ++CurTok.IVal; NextChar (); - } while (C == '+'); + } while (C == PrevC); CurTok.Tok = TOK_ULABEL; break; + } case '=': NextChar (); diff --git a/src/ca65/token.h b/src/ca65/token.h index b8bbb6d6e..8f935f7a1 100644 --- a/src/ca65/token.h +++ b/src/ca65/token.h @@ -71,7 +71,7 @@ typedef enum token_t { TOK_REG, /* Sweet16 R.. register (in sweet16 mode) */ TOK_ASSIGN, /* := */ - TOK_ULABEL, /* :++ or :-- */ + TOK_ULABEL, /* An unnamed label */ TOK_EQ, /* = */ TOK_NE, /* <> */ diff --git a/src/ca65/ulabel.c b/src/ca65/ulabel.c index 1127c3743..19bec0671 100644 --- a/src/ca65/ulabel.c +++ b/src/ca65/ulabel.c @@ -107,8 +107,12 @@ ExprNode* ULabRef (int Which) int Index; ULabel* L; - /* Which can never be 0 */ - PRECONDITION (Which != 0); + /* Which should not be 0 */ + if (Which == 0) { + Error ("Invalid unnamed label reference"); + /* We must return something valid */ + return GenCurrentPC(); + } /* Get the index of the referenced label */ if (Which > 0) { From 270f3544b53f7ec54ed5556ec90cbf50e6611b28 Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sat, 23 Sep 2023 19:59:28 +0300 Subject: [PATCH 2440/2710] Document changes in unnamed labels. --- doc/ca65.sgml | 55 ++++++++++++++++++++++----------------------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index c5c6893da..2e63e0961 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -829,49 +829,42 @@ names like "Loop". Here is an example: bne @Loop ; ERROR: Unknown identifier! </verb></tscreen> + <sect1>Unnamed labels<p> -If you really want to write messy code, there are also unnamed labels. These -labels do not have a name (you guessed that already, didn't you?). A colon is -used to mark the absence of the name. +If you really want to write messy code, there are also unnamed labels. To define +an unnamed label, use either <tt>@:</tt> (<tt>.LOCALCHAR</tt> is respected if it +is set) or sole <tt>:</tt>. -Unnamed labels may be accessed by using the colon plus several minus or plus -characters as a label designator. Using the '-' characters will create a back -reference (use the n'th label backwards), using '+' will create a forward -reference (use the n'th label in forward direction). An example will help to -understand this: +To reference an unnamed label, use <tt>@</tt> (<tt>.LOCALCHAR</tt> is respected +if it is set) or <tt>:</tt> with several <tt>-</tt> or <tt>+</tt> characters. +The <tt>-</tt> characters will create a back reference (n'th label backwards), +the <tt>+</tt> will create a forward reference (n'th label in forward direction). +As an alternative, angle brackets <tt><</tt> and <tt>></tt> may be used +instead of <tt>-</tt> and <tt>+</tt> with the same meaning. + +Example: <tscreen><verb> - : lda (ptr1),y ; #1 - cmp (ptr2),y - bne :+ ; -> #2 - tax - beq :+++ ; -> #4 - iny - bne :- ; -> #1 - inc ptr1+1 - inc ptr2+1 - bne :- ; -> #1 - - : bcs :+ ; #2 -> #3 - ldx #$FF - rts - - : ldx #$01 ; #3 - : rts ; #4 + cpy #0 + beq @++ + @: + sta $2007 + dey + bne @- + @: + rts </verb></tscreen> -As you can see from the example, unnamed labels will make even short -sections of code hard to understand, because you have to count labels -to find branch targets (this is the reason why I for my part do -prefer the "cheap" local labels). Nevertheless, unnamed labels are -convenient in some situations, so it's your decision. +Unnamed labels may make even short sections of code hard to understand, because +you have to count labels to find branch targets. It's better to prefer the +"cheap" local labels. Nevertheless, unnamed labels are convenient in some +situations, so it's up to your discretion. <em/Note:/ <ref id="scopes" name="Scopes"> organize named symbols, not unnamed ones, so scopes don't have an effect on unnamed labels. - <sect1>Using macros to define labels and constants<p> While there are drawbacks with this approach, it may be handy in a few rare From f789316f862a59250f134015934a16dec5cd74c5 Mon Sep 17 00:00:00 2001 From: Evgeny Vrublevsky <me@veg.by> Date: Sun, 7 Apr 2024 12:59:38 +0300 Subject: [PATCH 2441/2710] Add a test for the unnamed labels. --- test/asm/listing/060-ulabel.s | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 test/asm/listing/060-ulabel.s diff --git a/test/asm/listing/060-ulabel.s b/test/asm/listing/060-ulabel.s new file mode 100644 index 000000000..f2e66da87 --- /dev/null +++ b/test/asm/listing/060-ulabel.s @@ -0,0 +1,25 @@ +; Test new-style (@:) and legacy-style (:) unnamed labels. +; Make sure that they have identical behavior. + +.ORG $0000 + +@: nop +: nop +.ASSERT @<< = $0000, error +.ASSERT @-- = $0000, error +.ASSERT :<< = $0000, error +.ASSERT :-- = $0000, error +.ASSERT @< = $0001, error +.ASSERT @- = $0001, error +.ASSERT :< = $0001, error +.ASSERT :- = $0001, error +.ASSERT @> = $0002, error +.ASSERT @+ = $0002, error +.ASSERT :> = $0002, error +.ASSERT :+ = $0002, error +.ASSERT @>> = $0003, error +.ASSERT @++ = $0003, error +.ASSERT :>> = $0003, error +.ASSERT :++ = $0003, error +@: nop +: nop From fa1a426c2968f1429e7129ea592065c2a57b73ce Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 16 Apr 2024 14:06:45 -0400 Subject: [PATCH 2442/2710] add -t sim6502 to cc65 and ca65 examples --- doc/sim65.sgml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/sim65.sgml b/doc/sim65.sgml index c70e06412..ebd73c2cc 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -141,8 +141,8 @@ int main() } // Build and run: -// cc65 -o example.s example.c -// ca65 -o example.o example.s +// cc65 -t sim6502 -o example.s example.c +// ca65 -t sim6502 -o example.o example.s // ld65 -t sim6502 -o example.prg example.o sim6502.lib // sim65 example.prg </verb></tscreen> @@ -173,7 +173,7 @@ _main: rts ; Build and run: -; ca65 -o example.o example.s +; ca65 -t sim6502 -o example.o example.s ; ld65 -t sim6502 -o example.prg example.o sim6502.lib ; sim65 example.prg </verb></tscreen> From 4bc726ebe2d8148b132170a292291e811c5e4d2a Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 16 Apr 2024 16:41:00 -0400 Subject: [PATCH 2443/2710] clarify the meaning of the exit code unsigned limitation --- doc/sim65.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/sim65.sgml b/doc/sim65.sgml index ebd73c2cc..5cacf87cd 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -120,7 +120,7 @@ command line arguments to <tt/sim65/ will be passed to <tt/main/, and the return value from <tt/main/ will become sim65's exit code. The <tt/stdlib.h/ <tt/exit/ function may also be used to terminate with an exit code. -Exit codes are limited to an unsigned 8 bit value. +Exit codes are limited to an unsigned 8 bit value. (E.g. returning -1 will give an exit code of 255.) The standard C library high level file input and output is functional. A sim65 application can be written like a command line application, From 8804dc7a5836828b40eaa10de333e16886197b7a Mon Sep 17 00:00:00 2001 From: bbbradsmith <bbbradsmith@users.noreply.github.com> Date: Tue, 16 Apr 2024 16:56:13 -0400 Subject: [PATCH 2444/2710] give cl65 alternative --- doc/sim65.sgml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/sim65.sgml b/doc/sim65.sgml index 5cacf87cd..962f07254 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -141,6 +141,10 @@ int main() } // Build and run: +// cl65 -t sim6502 -o example.prg example.c +// sim65 example.prg + +// Build and run, separate steps: // cc65 -t sim6502 -o example.s example.c // ca65 -t sim6502 -o example.o example.s // ld65 -t sim6502 -o example.prg example.o sim6502.lib @@ -173,6 +177,10 @@ _main: rts ; Build and run: +; cl65 -t sim6502 -o example.prg example.s +; sim65 example.prg + +; Build and run, separate steps: ; ca65 -t sim6502 -o example.o example.s ; ld65 -t sim6502 -o example.prg example.o sim6502.lib ; sim65 example.prg From a823d900823056c2109c4de362c6cbcfcc512b7d Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Fri, 19 Apr 2024 07:57:47 +0200 Subject: [PATCH 2445/2710] Separated versions --- libsrc/common/strcasestr.s | 95 ++++++++++++++++++++++++++++++++++++++ libsrc/common/strstr.s | 33 ++++--------- 2 files changed, 103 insertions(+), 25 deletions(-) create mode 100644 libsrc/common/strcasestr.s diff --git a/libsrc/common/strcasestr.s b/libsrc/common/strcasestr.s new file mode 100644 index 000000000..58364f419 --- /dev/null +++ b/libsrc/common/strcasestr.s @@ -0,0 +1,95 @@ +; +; Ullrich von Bassewitz, 11.12.1998 +; +; char* strcasestr (const char* haystack, const char* needle); +; + + .export _strcasestr + .import popptr1, return0, tolowerdirect + .importzp ptr1, ptr2, ptr3, ptr4, tmp1, tmp2, tmp3, tmp4 + .include "ctype.inc" + + .segment "LOWCODE" + +_strcasestr: + sta ptr2 ; Save needle + stx ptr2+1 + sta ptr4 ; Setup temp copy for later + + jsr popptr1 ; Get haystack to ptr1 + +; If needle is empty, return haystack + + ; ldy #$00 Y=0 guaranteed by popptr1 + lda (ptr2),y ; Get first byte of needle + beq @Found ; Needle is empty --> we're done + +; Search for the beginning of the string (this is not an optimal search +; strategy [in fact, it's pretty dumb], but it's simple to implement). + + jsr tolowerdirect ; Lowercase + sta tmp1 ; Save start of needle +@L1: lda (ptr1),y ; Get next char from haystack + beq @NotFound ; Jump if end + + jsr tolowerdirect ; Lowercase + cmp tmp1 ; Start of needle found? + beq @L2 ; Jump if so + iny ; Next char + bne @L1 + inc ptr1+1 ; Bump high byte + bne @L1 ; Branch always + +; We found the start of needle in haystack + +@L2: tya ; Get offset + clc + adc ptr1 + sta ptr1 ; Make ptr1 point to start + bcc @L3 + inc ptr1+1 + +; ptr1 points to the start of needle in haystack now. Setup temporary pointers for the +; search. The low byte of ptr4 is already set. + +@L3: sta ptr3 + lda ptr1+1 + sta ptr3+1 + lda ptr2+1 + sta ptr4+1 + ldy #1 ; First char is identical, so start on second + +; Do the compare + +@L4: lda (ptr4),y ; Get char from needle + beq @Found ; Jump if end of needle (-> found) + + jsr tolowerdirect ; Lowercase + sta tmp2 + + lda (ptr3),y ; Compare with haystack + + jsr tolowerdirect ; Lowercase + cmp tmp2 + bne @L5 ; Jump if not equal + iny ; Next char + bne @L4 + inc ptr3+1 + inc ptr4+1 ; Bump hi byte of pointers + bne @L4 ; Next char (branch always) + +; The strings did not compare equal, search next start of needle + +@L5: ldy #1 ; Start after this char + bne @L1 ; Branch always + +; We found the start of needle + +@Found: lda ptr1 + ldx ptr1+1 + rts + +; We reached end of haystack without finding needle + +@NotFound: + jmp return0 ; return NULL diff --git a/libsrc/common/strstr.s b/libsrc/common/strstr.s index 6ab46148c..691e5ba5c 100644 --- a/libsrc/common/strstr.s +++ b/libsrc/common/strstr.s @@ -4,20 +4,11 @@ ; char* strstr (const char* haystack, const char* needle); ; - .export _strstr, _strcasestr - .import popptr1, return0, tolowerdirect - .importzp ptr1, ptr2, ptr3, ptr4, tmp1, tmp2 - -maybe_lower: ; Lowercase char in A if needed - jmp tolowerdirect ; patched on entry with either JMP or RTS + .export _strstr + .import popptr1 + .importzp ptr1, ptr2, ptr3, ptr4, tmp1 _strstr: - ldy #$60 ; RTS - bne :+ -_strcasestr: - ldy #$4C ; JMP absolute -: sty maybe_lower - sta ptr2 ; Save needle stx ptr2+1 sta ptr4 ; Setup temp copy for later @@ -33,12 +24,9 @@ _strcasestr: ; Search for the beginning of the string (this is not an optimal search ; strategy [in fact, it's pretty dumb], but it's simple to implement). - jsr maybe_lower ; Lowercase if needed sta tmp1 ; Save start of needle @L1: lda (ptr1),y ; Get next char from haystack beq @NotFound ; Jump if end - - jsr maybe_lower ; Lowercase if needed cmp tmp1 ; Start of needle found? beq @L2 ; Jump if so iny ; Next char @@ -55,7 +43,7 @@ _strcasestr: bcc @L3 inc ptr1+1 -; ptr1 points to the start of needle in haystack now. Setup temporary pointers for the +; ptr1 points to the start of needle now. Setup temporary pointers for the ; search. The low byte of ptr4 is already set. @L3: sta ptr3 @@ -69,14 +57,7 @@ _strcasestr: @L4: lda (ptr4),y ; Get char from needle beq @Found ; Jump if end of needle (-> found) - - jsr maybe_lower ; Lowercase if needed - sta tmp2 - - lda (ptr3),y ; Compare with haystack - - jsr maybe_lower ; Lowercase if needed - cmp tmp2 + cmp (ptr3),y ; Compare with haystack bne @L5 ; Jump if not equal iny ; Next char bne @L4 @@ -98,4 +79,6 @@ _strcasestr: ; We reached end of haystack without finding needle @NotFound: - jmp return0 ; return NULL + lda #$00 ; return NULL + tax + rts From 793aa48a4943752e4a24731f652ca0ee1b485b81 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Fri, 19 Apr 2024 08:13:41 +0200 Subject: [PATCH 2446/2710] Add doc --- doc/funcref.sgml | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 81c63a38b..a0a6d7ca8 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -780,6 +780,7 @@ communication, see also <tt>testcode/lib/ser-test.c</tt>. <item><ref id="strqtok" name="strqtok"> <item><ref id="strrchr" name="strrchr"> <item><ref id="strspn" name="strspn"> +<item><ref id="strcasestr" name="strcasestr"> <item><ref id="strstr" name="strstr"> <item><ref id="strtok" name="strtok"> <item><ref id="strxfrm" name="strxfrm"> @@ -7899,22 +7900,47 @@ be used in presence of a prototype. </quote> -<sect1>strstr<label id="strstr"><p> +<sect1>strcasestr<label id="strcasestr"><p> <quote> <descrip> -<tag/Function/Find a substring. +<tag/Function/Find a substring, case-insensitive. <tag/Header/<tt/<ref id="string.h" name="string.h">/ -<tag/Declaration/<tt/char* __fastcall__ strstr (const char* str, const char* substr);/ -<tag/Description/<tt/strstr/ searches for the first occurrence of the string -<tt/substr/ within <tt/str/. If found, it returns a pointer to the copy, -otherwise it returns <tt/NULL/. +<tag/Declaration/<tt/char* __fastcall__ strcasestr (const char* str, const char* substr);/ +<tag/Description/<tt/strcasestr/ searches for the first occurrence of the string +<tt/substr/ within <tt/str/. If found, it returns a pointer to the start of the +match in <tt/str/, otherwise it returns <tt/NULL/. <tag/Notes/<itemize> <item>The function is only available as fastcall function, so it may only be used in presence of a prototype. </itemize> <tag/Availability/ISO 9899 <tag/See also/ +<ref id="strstr" name="strstr">, +<ref id="strcspn" name="strcspn">, +<ref id="strspn" name="strspn"> +<tag/Example/None. +</descrip> +</quote> + + +<sect1>strstr<label id="strstr"><p> + +<quote> +<descrip> +<tag/Function/Find a substring, case-sensitive. +<tag/Header/<tt/<ref id="string.h" name="string.h">/ +<tag/Declaration/<tt/char* __fastcall__ strstr (const char* str, const char* substr);/ +<tag/Description/<tt/strstr/ searches for the first occurrence of the string +<tt/substr/ within <tt/str/. If found, it returns a pointer to the start of the +match in <tt/str/, otherwise it returns <tt/NULL/. +<tag/Notes/<itemize> +<item>The function is only available as fastcall function, so it may only +be used in presence of a prototype. +</itemize> +<tag/Availability/ISO 9899 +<tag/See also/ +<ref id="strcasestr" name="strcasestr">, <ref id="strcspn" name="strcspn">, <ref id="strspn" name="strspn"> <tag/Example/None. From 86e5acd679d8c9c7d5113cc29bfefdff94092914 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 16 May 2024 18:57:08 +0200 Subject: [PATCH 2447/2710] fix race condition as proposed in #2420 --- test/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/Makefile b/test/Makefile index 22e425c9c..fbdf8c5d1 100644 --- a/test/Makefile +++ b/test/Makefile @@ -14,7 +14,9 @@ WORKDIR = ../testwrk .PHONY: test continue mostlyclean clean -test: mostlyclean continue +test: + @$(MAKE) mostlyclean + @$(MAKE) continue continue: @$(MAKE) -C asm all From 2c4d4d331479454b63e7164afe93e609c5d5ef42 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Thu, 16 May 2024 18:57:29 +0200 Subject: [PATCH 2448/2710] add -j2 to make test invocations --- .github/workflows/build-on-pull-request.yml | 4 ++-- .github/workflows/snapshot-on-push-master.yml | 2 +- .github/workflows/windows-test-scheduled.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-on-pull-request.yml b/.github/workflows/build-on-pull-request.yml index 146964a30..7b762844b 100644 --- a/.github/workflows/build-on-pull-request.yml +++ b/.github/workflows/build-on-pull-request.yml @@ -35,7 +35,7 @@ jobs: run: make -j2 lib QUIET=1 - name: Run the regression tests. shell: bash - run: make test QUIET=1 + run: make -j2 test QUIET=1 - name: Test that the samples can be built. run: make -C samples platforms - name: Test that the targettest programs can be built. @@ -89,4 +89,4 @@ jobs: - name: Run the regression tests (make test) shell: cmd - run: make test QUIET=1 SHELL=cmd + run: make -j2 test QUIET=1 SHELL=cmd diff --git a/.github/workflows/snapshot-on-push-master.yml b/.github/workflows/snapshot-on-push-master.yml index d58bff8ed..42794f10b 100644 --- a/.github/workflows/snapshot-on-push-master.yml +++ b/.github/workflows/snapshot-on-push-master.yml @@ -59,7 +59,7 @@ jobs: run: make -j2 lib QUIET=1 - name: Run the regression tests. shell: bash - run: make test QUIET=1 + run: make -j2 test QUIET=1 - name: Test that the samples can be built. shell: bash run: make -j2 samples diff --git a/.github/workflows/windows-test-scheduled.yml b/.github/workflows/windows-test-scheduled.yml index f72254273..fa22473f4 100644 --- a/.github/workflows/windows-test-scheduled.yml +++ b/.github/workflows/windows-test-scheduled.yml @@ -70,7 +70,7 @@ jobs: - name: Run the regression tests (make test) if: steps.check-sha.outputs.cache-hit != 'true' shell: cmd - run: make test QUIET=1 SHELL=cmd + run: make -j2 test QUIET=1 SHELL=cmd - name: Test that the samples can be built (make samples) if: steps.check-sha.outputs.cache-hit != 'true' From 3ea0ded65d59717d7f7e1454bacbd53baac505de Mon Sep 17 00:00:00 2001 From: xlar54 <scott.hutter@gmail.com> Date: Wed, 12 Jun 2024 16:23:30 -0500 Subject: [PATCH 2449/2710] initial --- libsrc/cx16/tgi/cx640p1.s | 664 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 664 insertions(+) create mode 100644 libsrc/cx16/tgi/cx640p1.s diff --git a/libsrc/cx16/tgi/cx640p1.s b/libsrc/cx16/tgi/cx640p1.s new file mode 100644 index 000000000..1fcceecf8 --- /dev/null +++ b/libsrc/cx16/tgi/cx640p1.s @@ -0,0 +1,664 @@ +; +; Graphics driver for the 640 pixels across, 480 pixels down, 2 color mode +; on the Commander X16 +; +; 2024-06-11, Scott Hutter +; Based on code by Greg King +; + + .include "zeropage.inc" + + .include "tgi-kernel.inc" + .include "tgi-error.inc" + + .include "cbm_kernal.inc" + .include "cx16.inc" + + .macpack generic + .macpack module + + +; Macro that copies a word into a pseudo-register + +.mac setReg reg, src + lda src + ldx src+1 + sta gREG::reg + stx gREG::reg+1 +.endmac + + +; ------------------------------------------------------------------------ +; Header. Includes jump table and constants. + + module_header _cx640p1_tgi ; 640 pixels across, 1 pixel per byte + +; First part of the header is a structure that has a signature, +; and defines the capabilities of the driver. + + .byte $74, $67, $69 ; ASCII "tgi" + .byte TGI_API_VERSION ; TGI API version number + .addr $0000 ; Library reference + .word 640 ; X resolution + .word 480 ; Y resolution + .byte 2 ; Number of drawing colors + .byte 0 ; Number of screens available + .byte 8 ; System font X size + .byte 8 ; System font Y size + .word $0100 ; Aspect ratio (based on VGA display) + .byte 0 ; TGI driver flags + +; Next, comes the jump table. Currently, all entries must be valid, +; and may point to an RTS for test versions (function not implemented). + + .addr INSTALL + .addr UNINSTALL + .addr INIT + .addr DONE + .addr GETERROR + .addr CONTROL + .addr CLEAR + .addr SETVIEWPAGE + .addr SETDRAWPAGE + .addr SETCOLOR + .addr SETPALETTE + .addr GETPALETTE + .addr GETDEFPALETTE + .addr SETPIXEL + .addr GETPIXEL + .addr LINE + .addr BAR + .addr TEXTSTYLE + .addr OUTTEXT + + +; ------------------------------------------------------------------------ +; Constant + + + +; ------------------------------------------------------------------------ +; Data. + +; Variables mapped to the zero page segment variables. Some of these are +; used for passing parameters to the driver. + +X1 = ptr1 +Y1 = ptr2 +X2 = ptr3 +Y2 = ptr4 + +ADDR = tmp1 ; ADDR+1,2,3 + +TEMP = tmp3 +TEMP2 = tmp4 ; HORLINE +TEMP3 = sreg ; HORLINE + +tempX: +.byte $00, $00 +tempY: +.byte $00, $00 + +ERR2: +.byte $00 +ERR: +.byte $00 +SY: +.byte $00 +SX: +.byte $00 +DY: +.byte $00 +DX: +.byte $00 +CURRENT_Y: +.byte $00, $00 +CURRENT_X: +.byte $00, $00 +; Absolute variables used in the code + +.bss + +; The colors are indicies into a TGI palette. The TGI palette is indicies into +; VERA's palette. Vera's palette is a table of Red, Green, and Blue levels. +; The first 16 RGB elements mimic the Commodore 64's colors. + +SCRBASE: .res 1 ; High byte of screen base +BITMASK: .res 1 ; $00 = clear, $FF = set pixels +OLDCOLOR: .res 1 ; colors before entering gfx mode + +defpalette: .res $0100 +palette: .res $0100 + +bcolor := palette + 0 ; Background color +color: .res 1 ; Stroke and fill index +text_mode: .res 1 ; Old text mode + +.data + +error: .byte TGI_ERR_OK ; Error code + + +; Constants and tables + +.rodata + +; Bit masks for setting pixels +bitMasks1: + .byte %10000000, %01000000, %00100000, %00010000 + .byte %00001000, %00000100, %00000010, %00000001 +bitMasks2: + .byte %01111111, %10111111, %11011111, %11101111 + .byte %11110111, %11111011, %11111101, %11111110 + + +.code + +; ------------------------------------------------------------------------ +; INSTALL routine. Is called after the driver is loaded into memory. May +; initialize anything that has to be done just once. Is probably empty +; most of the time. +; +; Must set an error code: NO + +INSTALL: +; Create the default palette. + + ldx #$00 +: txa + sta defpalette,x + inx + bnz :- + + ; Fall through. + +; ------------------------------------------------------------------------ +; UNINSTALL routine. Is called before the driver is removed from memory. May +; clean up anything done by INSTALL, but is probably empty most of the time. +; +; Must set an error code: NO + +UNINSTALL: + rts + +; ------------------------------------------------------------------------ +; INIT: Changes an already installed device from text mode to graphics +; mode. +; Note that INIT/DONE may be called multiple times while the driver +; is loaded, while INSTALL is called only once; so, any code that is needed +; to initiate variables and so on must go here. Setting the palette is not +; needed because that is called by the graphics kernel later. +; The graphics kernel never will call INIT when a graphics mode already is +; active, so there is no need to protect against that. +; +; Must set an error code: YES + +INIT: stz error ; #TGI_ERR_OK + +; Save the current text mode. + + sec + jsr SCREEN_MODE + sta text_mode + +; Switch into (640 x 480 x 2) graphics mode. + + lda #%00000000 ; DCSEL = 0, VRAM port 1 + sta VERA::CTRL + lda #%00100001 ; Disable sprites, layer 1 enable, VGA + sta VERA::DISP::VIDEO + lda #%00000100 ; Bitmap mode enable + sta VERA::L1::CONFIG + lda #%00000001 ; Tile width 640 + sta VERA::L1::TILE_BASE + rts + +; ------------------------------------------------------------------------ +; DONE: Will be called to switch the graphics device back into text mode. +; The graphics kernel never will call DONE when no graphics mode is active, +; so there is no need to protect against that. +; +; Must set an error code: NO + +DONE: + jsr CINT + lda text_mode + clc + jmp SCREEN_MODE + +; ------------------------------------------------------------------------ +; GETERROR: Return the error code in .A, and clear it. + +GETERROR: + lda error + stz error + rts + +; ------------------------------------------------------------------------ +; CONTROL: Platform-/driver-specific entry point. +; +; Must set an error code: YES + +CONTROL: + lda #TGI_ERR_INV_FUNC + sta error + rts + +; ------------------------------------------------------------------------ +; CLEAR: Clear the screen. +; +; Must set an error code: NO + +CLEAR : + .scope inner + + ; set up DCSEL=2 + lda #(2 << 1) + sta VERA::CTRL + + ; set cache writes + lda #$40 + tsb $9f29 ;VERA_FX_CTRL + + ; set FX cache to all zeroes + lda #(6 << 1) + sta VERA::CTRL + + lda #$00 ; color + ; $00=black, $01=white + beq ahead + lda #$ff +ahead: + sta VERA::DISP::VIDEO + sta VERA::DISP::HSCALE ;$9f2a + sta VERA::DISP::VSCALE ;$9f2b + sta VERA::DISP::FRAME ;$9f2c + + stz VERA::CTRL + ; set address and increment for bitmap area + stz VERA::ADDR + stz VERA::ADDR + 1 + lda #$30 ; increment +4 + sta VERA::ADDR + 2 + + ldy #240 ; number of rows +blank_outer: + ldx #10 ; 10 iterations of 32 = one line of 320 at 8bpp +blank_loop: + + .repeat 8 + stz VERA::DATA0 ; $9f23 each `stz` writes four zeroes to VRAM (cache contents) for a total of 32 pixels when repeated 8x + .endrep + + dex + bne blank_loop + dey + bne blank_outer + + ; set up DCSEL=2 + lda #(2 << 1) + sta VERA::CTRL ; $9f25 + + ; set FX off (cache write bit 1 -> 0) + stz $9f29 ;VERA_FX_CTRL + stz VERA::CTRL + + .endscope + rts + + +; ------------------------------------------------------------------------ +; SETVIEWPAGE: Set the visible page. Called with the new page in .A (0..n-1). +; The page number already is checked to be valid by the graphics kernel. +; +; Must set an error code: NO (will be called only if page OK) + +SETVIEWPAGE: + + ; Fall through. + +; ------------------------------------------------------------------------ +; SETDRAWPAGE: Set the drawable page. Called with the new page in .A (0..n-1). +; The page number already is checked to be valid by the graphics kernel. +; +; Must set an error code: NO (will be called only if page OK) + +SETDRAWPAGE: + rts + +; ------------------------------------------------------------------------ +; SETPALETTE: Set the palette (not available with all drivers/hardware). +; A pointer to the palette is passed in ptr1. Must set an error if palettes +; are not supported +; +; Must set an error code: YES + +SETPALETTE: + stz error ; #TGI_ERR_OK + ldy #$00 +: lda (ptr1),y + sta palette,y + iny + bnz :- + + lda color ; Get stroke and fill index + + ; Fall through. + +; ------------------------------------------------------------------------ +; SETCOLOR: Set the drawing color (in .A). The new color already is checked +; to be in a valid range (0..maxcolor). +; +; Must set an error code: NO (will be called only if color OK) + +SETCOLOR: + tax + beq @L1 + lda #$FF +@L1: sta BITMASK + rts + +; ------------------------------------------------------------------------ +; GETPALETTE: Return the current palette in .XA. Even drivers that cannot +; set the palette should return the default palette here, so there's no +; way for this function to fail. +; +; Must set an error code: NO + +GETPALETTE: + lda #<palette + ldx #>palette + rts + +; ------------------------------------------------------------------------ +; GETDEFPALETTE: Return the default palette for the driver in .XA. All +; drivers should return something reasonable here, even drivers that don't +; support palettes, otherwise the caller has no way to determine the colors +; of the (not changable) palette. +; +; Must set an error code: NO (all drivers must have a default palette) + +GETDEFPALETTE: + lda #<defpalette + ldx #>defpalette + rts + +; ------------------------------------------------------------------------ +; SETPIXEL: Draw one pixel at X1/Y1 = ptr1/ptr2 with the current drawing +; color. The co-ordinates passed to this function never are outside the +; visible screen area, so there is no need for clipping inside this function. +; +; Must set an error code: NO + +SETPIXEL: + jsr CALC + + stx TEMP + + lda ADDR + ldy ADDR+1 + ldx #$00 + + sta VERA::ADDR + sty VERA::ADDR + 1 + stx VERA::ADDR + 2 + + ldx TEMP + + lda BITMASK + beq @ahead + + ; if COLOR = 1, white is line color + ; Set the bit in the byte at VERA_DATA0 + lda VERA::DATA0 ; Load the byte at memory address + ora bitMasks1,X ; OR with the bit mask + ;lda 0 + sta VERA::DATA0 ; Store back the modified byte + rts + + @ahead: + ; if COLOR = 0, black is line color + lda VERA::DATA0 ; Load the byte at memory address + and bitMasks2,X ; OR with the bit mask + sta VERA::DATA0 ; Store back the modified byte + rts + +; ------------------------------------------------------------------------ +; GETPIXEL: Read the color value of a pixel, and return it in .XA. The +; co-ordinates passed to this function never are outside the visible screen +; area, so there is no need for clipping inside this function. + +GETPIXEL: + jsr CALC + + stx TEMP + + lda ADDR + ldy ADDR+1 + ldx #$00 + + sta VERA::ADDR + sty VERA::ADDR + 1 + stx VERA::ADDR + 2 + + ldx TEMP + lda VERA::DATA0 ; Load the byte at memory address + and bitMasks1,X + + bne @ahead + + ldx #$00 + lda #$00 + rts + + @ahead: + ldx #$00 + lda #$01 + rts + +; ------------------------------------------------------------------------ +; BAR: Draw a filled rectangle with the corners X1/Y1, X2/Y2, where +; X1/Y1 = ptr1/ptr2 and X2/Y2 = ptr3/ptr4, using the current drawing color. +; Contrary to most other functions, the graphics kernel will sort and clip +; the co-ordinates before calling the driver; so on entry, the following +; conditions are valid: +; X1 <= X2 +; Y1 <= Y2 +; (X1 >= 0) && (X1 < XRES) +; (X2 >= 0) && (X2 < XRES) +; (Y1 >= 0) && (Y1 < YRES) +; (Y2 >= 0) && (Y2 < YRES) +; +; Must set an error code: NO + +BAR: + ; Initialize tempY with Y1 + LDA Y1 + STA tempY + LDA Y1+1 + STA tempY+1 + +@outer_loop: + ; Compare tempY with Y2 + LDA tempY+1 + CMP Y2+1 + BCC @outer_continue ; If tempY high byte < Y2 high byte, continue + BNE @outer_end ; If tempY high byte > Y2 high byte, end + LDA tempY + CMP Y2 + BCC @outer_continue ; If tempY low byte < Y2 low byte, continue + BEQ @outer_end ; If tempY low byte = Y2 low byte, end + +@outer_continue: + ; Initialize tempX with X1 + LDA X1 + STA tempX + LDA X1+1 + STA tempX+1 + +@inner_loop: + ; Compare tempX with X2 + LDA tempX+1 + CMP X2+1 + BCC @inner_continue ; If tempX high byte < X2 high byte, continue + BNE @inner_end ; If tempX high byte > X2 high byte, end + LDA tempX + CMP X2 + BCC @inner_continue ; If tempX low byte < X2 low byte, continue + +@inner_end: + ; Increment tempY + INC tempY + BNE @outer_loop ; If no overflow, continue outer loop + INC tempY+1 ; If overflow, increment high byte + +@inner_continue: + ; Call setpixel(tempX, tempY) + LDA X1 + PHA + LDA X1+1 + PHA + LDA Y1 + PHA + LDA Y1+1 + PHA + + LDA tempX + LDX tempX+1 + STA X1 + STX X1+1 + + LDA tempY + LDX tempY+1 + STA Y1 + STX Y1+1 + + JSR SETPIXEL + + PLA + STA Y1+1 + PLA + STA Y1 + PLA + STA X1+1 + PLA + STA X1 + + ; Increment tempX + INC tempX + BNE @inner_loop_check ; If no overflow, continue + INC tempX+1 ; If overflow, increment high byte + +@inner_loop_check: + ; Compare tempX with X2 again after increment + LDA tempX+1 + CMP X2+1 + BCC @inner_continue ; If tempX high byte < X2 high byte, continue + BNE @outer_increment ; If tempX high byte > X2 high byte, increment tempY + LDA tempX + CMP X2 + BCC @inner_continue ; If tempX low byte < X2 low byte, continue + +@outer_increment: + ; Increment tempY + INC tempY + BNE @outer_loop ; If no overflow, continue outer loop + INC tempY+1 ; If overflow, increment high byte + +@outer_end: + ; End of outer loop, continue with program + JMP @done + +@done: + ; Continue with your program + +; ------------------------------------------------------------------------ +; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y +; directions are passed in .X and .Y, the text direction is passed in .A. +; +; Must set an error code: NO + +TEXTSTYLE: + rts + +; ------------------------------------------------------------------------ +; OUTTEXT: Output text at X/Y = ptr1/ptr2 using the current color and the +; current text style. The text to output is given as a zero-terminated +; string with address in ptr3. +; +; Must set an error code: NO + +OUTTEXT: + jsr Point + + ldy #$00 +@next: lda (ptr3),y + bze @end + phy + jsr GRAPH_PUT_CHAR + ply + iny + bnz @next +@end: rts + +; ------------------------------------------------------------------------ +; Point: Set the arguments for the first point of a Kernal graphics function. + +Point: setReg r0, X1 + setReg r1, Y1 + rts + + +; ------------------------------------------------------------------------ +; Calculate all variables to plot the pixel at X1/Y1. +;------------------------ +;< X1,Y1 - pixel +;> ADDR - address of card +;> X - bit number (X1 & 7) +CALC: + lda Y1+1 + sta ADDR+1 + lda Y1 + asl + rol ADDR+1 + asl + rol ADDR+1 ; Y*4 + clc + adc Y1 + sta ADDR + lda Y1+1 + adc ADDR+1 + sta ADDR+1 ; Y*4+Y=Y*5 + lda ADDR + asl + rol ADDR+1 + asl + rol ADDR+1 + asl + rol ADDR+1 + asl + rol ADDR+1 + sta ADDR ; Y*5*16=Y*80 + lda X1+1 + sta TEMP + lda X1 + lsr TEMP + ror + lsr TEMP + ror + lsr TEMP + ror + clc + adc ADDR + sta ADDR + lda ADDR+1 ; ADDR = Y*80+x/8 + adc TEMP + sta ADDR+1 + lda ADDR+1 + lda X1 + and #7 + tax + rts + + +.include "../../tgi/tgidrv_line.inc" \ No newline at end of file From 2c4aca43dfa5d44bc6f0546fd3b402773de3750e Mon Sep 17 00:00:00 2001 From: xlar54 <scott.hutter@gmail.com> Date: Wed, 12 Jun 2024 16:40:23 -0500 Subject: [PATCH 2450/2710] fixed some text alignment --- libsrc/cx16/tgi/cx640p1.s | 149 +++++++++++++++++++------------------- 1 file changed, 74 insertions(+), 75 deletions(-) diff --git a/libsrc/cx16/tgi/cx640p1.s b/libsrc/cx16/tgi/cx640p1.s index 1fcceecf8..8f3777b16 100644 --- a/libsrc/cx16/tgi/cx640p1.s +++ b/libsrc/cx16/tgi/cx640p1.s @@ -472,105 +472,104 @@ GETPIXEL: ; Must set an error code: NO BAR: - ; Initialize tempY with Y1 - LDA Y1 - STA tempY - LDA Y1+1 - STA tempY+1 + ; Initialize tempY with Y1 + lda Y1 + sta tempY + lda Y1+1 + sta tempY+1 @outer_loop: - ; Compare tempY with Y2 - LDA tempY+1 - CMP Y2+1 - BCC @outer_continue ; If tempY high byte < Y2 high byte, continue - BNE @outer_end ; If tempY high byte > Y2 high byte, end - LDA tempY - CMP Y2 - BCC @outer_continue ; If tempY low byte < Y2 low byte, continue - BEQ @outer_end ; If tempY low byte = Y2 low byte, end + ; Compare tempY with Y2 + lda tempY+1 + cmp Y2+1 + bcc @outer_continue ; If tempY high byte < Y2 high byte, continue + bne @outer_end ; If tempY high byte > Y2 high byte, end + lda tempY + cmp Y2 + bcc @outer_continue ; If tempY low byte < Y2 low byte, continue + beq @outer_end ; If tempY low byte = Y2 low byte, end @outer_continue: - ; Initialize tempX with X1 - LDA X1 - STA tempX - LDA X1+1 - STA tempX+1 + ; Initialize tempX with X1 + lda X1 + sta tempX + lda X1+1 + sta tempX+1 @inner_loop: - ; Compare tempX with X2 - LDA tempX+1 - CMP X2+1 - BCC @inner_continue ; If tempX high byte < X2 high byte, continue - BNE @inner_end ; If tempX high byte > X2 high byte, end - LDA tempX - CMP X2 - BCC @inner_continue ; If tempX low byte < X2 low byte, continue + ; Compare tempX with X2 + lda tempX+1 + cmp X2+1 + bcc @inner_continue ; If tempX high byte < X2 high byte, continue + bne @inner_end ; If tempX high byte > X2 high byte, end + lda tempX + cmp X2 + bcc @inner_continue ; If tempX low byte < X2 low byte, continue @inner_end: - ; Increment tempY - INC tempY - BNE @outer_loop ; If no overflow, continue outer loop - INC tempY+1 ; If overflow, increment high byte + ; Increment tempY + inc tempY + bne @outer_loop ; If no overflow, continue outer loop + inc tempY+1 ; If overflow, increment high byte @inner_continue: - ; Call setpixel(tempX, tempY) - LDA X1 - PHA - LDA X1+1 - PHA - LDA Y1 - PHA - LDA Y1+1 - PHA + ; Call setpixel(tempX, tempY) + lda X1 + pha + lda X1+1 + pha + lda Y1 + pha + lda Y1+1 + pha - LDA tempX - LDX tempX+1 - STA X1 - STX X1+1 + lda tempX + ldx tempX+1 + sta X1 + stx X1+1 - LDA tempY - LDX tempY+1 - STA Y1 - STX Y1+1 + lda tempY + ldx tempY+1 + sta Y1 + stx Y1+1 - JSR SETPIXEL + jsr SETPIXEL - PLA - STA Y1+1 - PLA - STA Y1 - PLA - STA X1+1 - PLA - STA X1 + pla + sta Y1+1 + pla + sta Y1 + pla + sta X1+1 + pla + sta X1 ; Increment tempX - INC tempX - BNE @inner_loop_check ; If no overflow, continue - INC tempX+1 ; If overflow, increment high byte + inc tempX + bne @inner_loop_check ; If no overflow, continue + inc tempX+1 ; If overflow, increment high byte @inner_loop_check: - ; Compare tempX with X2 again after increment - LDA tempX+1 - CMP X2+1 - BCC @inner_continue ; If tempX high byte < X2 high byte, continue - BNE @outer_increment ; If tempX high byte > X2 high byte, increment tempY - LDA tempX - CMP X2 - BCC @inner_continue ; If tempX low byte < X2 low byte, continue + ; Compare tempX with X2 again after increment + lda tempX+1 + cmp X2+1 + bcc @inner_continue ; If tempX high byte < X2 high byte, continue + bne @outer_increment ; If tempX high byte > X2 high byte, increment tempY + lda tempX + cmp X2 + bcc @inner_continue ; If tempX low byte < X2 low byte, continue @outer_increment: - ; Increment tempY - INC tempY - BNE @outer_loop ; If no overflow, continue outer loop - INC tempY+1 ; If overflow, increment high byte + ; Increment tempY + inc tempY + bne @outer_loop ; If no overflow, continue outer loop + inc tempY+1 ; If overflow, increment high byte @outer_end: - ; End of outer loop, continue with program - JMP @done + jmp @done @done: - ; Continue with your program + rts ; ------------------------------------------------------------------------ ; TEXTSTYLE: Set the style used when calling OUTTEXT. Text scaling in X and Y From 91cdc0d70542244a3874d5ba3e36917e130465a6 Mon Sep 17 00:00:00 2001 From: xlar54 <scott.hutter@gmail.com> Date: Wed, 12 Jun 2024 16:45:24 -0500 Subject: [PATCH 2451/2710] removed unneeded code --- libsrc/cx16/tgi/cx640p1.s | 29 +---------------------------- 1 file changed, 1 insertion(+), 28 deletions(-) diff --git a/libsrc/cx16/tgi/cx640p1.s b/libsrc/cx16/tgi/cx640p1.s index 8f3777b16..110edba4a 100644 --- a/libsrc/cx16/tgi/cx640p1.s +++ b/libsrc/cx16/tgi/cx640p1.s @@ -18,20 +18,10 @@ .macpack module -; Macro that copies a word into a pseudo-register - -.mac setReg reg, src - lda src - ldx src+1 - sta gREG::reg - stx gREG::reg+1 -.endmac - - ; ------------------------------------------------------------------------ ; Header. Includes jump table and constants. - module_header _cx640p1_tgi ; 640 pixels across, 1 pixel per byte + module_header _cx640p1_tgi ; 640 pixels across, 1 pixel per bit ; First part of the header is a structure that has a signature, ; and defines the capabilities of the driver. @@ -588,23 +578,6 @@ TEXTSTYLE: ; Must set an error code: NO OUTTEXT: - jsr Point - - ldy #$00 -@next: lda (ptr3),y - bze @end - phy - jsr GRAPH_PUT_CHAR - ply - iny - bnz @next -@end: rts - -; ------------------------------------------------------------------------ -; Point: Set the arguments for the first point of a Kernal graphics function. - -Point: setReg r0, X1 - setReg r1, Y1 rts From 5976e3b85d0f8614c97090fa836661fa51f9030a Mon Sep 17 00:00:00 2001 From: Olli Savia <ops@iki.fi> Date: Thu, 13 Jun 2024 16:22:42 +0300 Subject: [PATCH 2452/2710] Add sample assembly program for Commodore machines --- samples/cbm/Makefile | 19 +++++++++++++++---- samples/cbm/hello.s | 15 +++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 samples/cbm/hello.s diff --git a/samples/cbm/Makefile b/samples/cbm/Makefile index 03387a061..71ab93a41 100644 --- a/samples/cbm/Makefile +++ b/samples/cbm/Makefile @@ -80,17 +80,19 @@ ifneq ($(filter disk samples.%,$(MAKECMDGOALS)),) C1541 ?= c1541 endif -DISK_c64 = samples.d64 +DISK_$(SYS) = samples.d64 EXELIST_c64 = \ fire \ plasma \ - nachtm + nachtm \ + hello EXELIST_c128 = \ fire \ plasma \ - nachtm + nachtm \ + hello EXELIST_cbm510 = \ fire \ @@ -110,7 +112,7 @@ EXELIST_pet = \ notavailable EXELIST_vic20 = \ - notavailable + hello ifneq ($(EXELIST_$(SYS)),) samples: $(EXELIST_$(SYS)) @@ -135,6 +137,15 @@ plasma: plasma.c $(CL) -t $(SYS) -O -o plasma -m plasma.map plasma.c nachtm: nachtm.c $(CL) -t $(SYS) -O -o nachtm -m nachtm.map nachtm.c +hello: hello.s + # Use separate assembler ... + $(AS) -t $(SYS) hello.s + # ... and linker commands ... + $(LD) -C $(SYS)-asm.cfg -o hello -m hello.map -u __EXEHDR__ hello.o $(SYS).lib + @$(DEL) hello.o 2>$(NULLDEV) + # ... or compile & link utility +# $(CL) -C $(SYS)-asm.cfg -o hello -m hello.map -u __EXEHDR__ hello.s + # -------------------------------------------------------------------------- # Rule to make a CBM disk with all samples. Needs the c1541 program that comes diff --git a/samples/cbm/hello.s b/samples/cbm/hello.s new file mode 100644 index 000000000..689dcc06b --- /dev/null +++ b/samples/cbm/hello.s @@ -0,0 +1,15 @@ +; +; Sample assembly program for Commodore machines +; + + .include "cbm_kernal.inc" + + ldx #$00 +: lda text,x + beq out + jsr CHROUT + inx + bne :- +out: rts + +text: .asciiz "hello world!" From ff5091202f3022751912762567a3838bb9c3509c Mon Sep 17 00:00:00 2001 From: xlar54 <scott.hutter@gmail.com> Date: Thu, 13 Jun 2024 21:00:40 -0500 Subject: [PATCH 2453/2710] docs --- doc/cx16.sgml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/cx16.sgml b/doc/cx16.sgml index 78a51206b..a718e52fa 100644 --- a/doc/cx16.sgml +++ b/doc/cx16.sgml @@ -243,6 +243,12 @@ point to <tt/cx320p1.tgi (cx320p1_tgi)/. a way that's compatible with some of the other color drivers). </descrip><p> +<descrip> + <tag><tt/cx640p1.tgi (cx640p1_tgi)/</tag> + This driver features a resolution of 640 across and 480 down with 2 colors, + black and white. +</descrip><p> + <sect1>Extended memory drivers<p> From d24a8d7e61623089e54c1a18c1b73a0dac4eeeae Mon Sep 17 00:00:00 2001 From: xlar54 <scott.hutter@gmail.com> Date: Thu, 13 Jun 2024 21:09:02 -0500 Subject: [PATCH 2454/2710] fixed newline --- libsrc/cx16/tgi/cx640p1.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/cx16/tgi/cx640p1.s b/libsrc/cx16/tgi/cx640p1.s index 110edba4a..4d6e267a1 100644 --- a/libsrc/cx16/tgi/cx640p1.s +++ b/libsrc/cx16/tgi/cx640p1.s @@ -633,4 +633,4 @@ CALC: rts -.include "../../tgi/tgidrv_line.inc" \ No newline at end of file +.include "../../tgi/tgidrv_line.inc" From b7f4c1746030c046b819231aab8cfffa072373f3 Mon Sep 17 00:00:00 2001 From: xlar54 <scott.hutter@gmail.com> Date: Thu, 13 Jun 2024 21:23:50 -0500 Subject: [PATCH 2455/2710] dangling spaces --- libsrc/cx16/tgi/cx640p1.s | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libsrc/cx16/tgi/cx640p1.s b/libsrc/cx16/tgi/cx640p1.s index 4d6e267a1..5fc05c22e 100644 --- a/libsrc/cx16/tgi/cx640p1.s +++ b/libsrc/cx16/tgi/cx640p1.s @@ -2,7 +2,7 @@ ; Graphics driver for the 640 pixels across, 480 pixels down, 2 color mode ; on the Commander X16 ; -; 2024-06-11, Scott Hutter +; 2024-06-11, Scott Hutter ; Based on code by Greg King ; @@ -239,7 +239,7 @@ CONTROL: ; ; Must set an error code: NO -CLEAR : +CLEAR: .scope inner ; set up DCSEL=2 @@ -273,13 +273,13 @@ ahead: ldy #240 ; number of rows blank_outer: - ldx #10 ; 10 iterations of 32 = one line of 320 at 8bpp + ldx #10 ; 10 iterations of 32 = one line of 640 blank_loop: - .repeat 8 + .repeat 8 stz VERA::DATA0 ; $9f23 each `stz` writes four zeroes to VRAM (cache contents) for a total of 32 pixels when repeated 8x .endrep - + dex bne blank_loop dey @@ -295,7 +295,7 @@ blank_loop: .endscope rts - + ; ------------------------------------------------------------------------ ; SETVIEWPAGE: Set the visible page. Called with the new page in .A (0..n-1). From 0837f9c25f20c7bf3376dba255145a6e9cf18b46 Mon Sep 17 00:00:00 2001 From: xlar54 <scott.hutter@gmail.com> Date: Thu, 13 Jun 2024 21:29:37 -0500 Subject: [PATCH 2456/2710] spaces --- libsrc/cx16/tgi/cx640p1.s | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/libsrc/cx16/tgi/cx640p1.s b/libsrc/cx16/tgi/cx640p1.s index 5fc05c22e..4f806677c 100644 --- a/libsrc/cx16/tgi/cx640p1.s +++ b/libsrc/cx16/tgi/cx640p1.s @@ -394,7 +394,7 @@ SETPIXEL: stx VERA::ADDR + 2 ldx TEMP - + lda BITMASK beq @ahead @@ -402,7 +402,6 @@ SETPIXEL: ; Set the bit in the byte at VERA_DATA0 lda VERA::DATA0 ; Load the byte at memory address ora bitMasks1,X ; OR with the bit mask - ;lda 0 sta VERA::DATA0 ; Store back the modified byte rts @@ -441,7 +440,7 @@ GETPIXEL: lda #$00 rts - @ahead: + @ahead: ldx #$00 lda #$01 rts From 60f9081ea4e5bad7adac0571e61a194b557837ca Mon Sep 17 00:00:00 2001 From: xlar54 <scott.hutter@gmail.com> Date: Thu, 13 Jun 2024 21:40:51 -0500 Subject: [PATCH 2457/2710] some comment alignment --- libsrc/cx16/tgi/cx640p1.s | 42 +++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/libsrc/cx16/tgi/cx640p1.s b/libsrc/cx16/tgi/cx640p1.s index 4f806677c..9af091c9b 100644 --- a/libsrc/cx16/tgi/cx640p1.s +++ b/libsrc/cx16/tgi/cx640p1.s @@ -113,20 +113,20 @@ CURRENT_X: ; VERA's palette. Vera's palette is a table of Red, Green, and Blue levels. ; The first 16 RGB elements mimic the Commodore 64's colors. -SCRBASE: .res 1 ; High byte of screen base -BITMASK: .res 1 ; $00 = clear, $FF = set pixels -OLDCOLOR: .res 1 ; colors before entering gfx mode +SCRBASE: .res 1 ; High byte of screen base +BITMASK: .res 1 ; $00 = clear, $FF = set pixels +OLDCOLOR: .res 1 ; colors before entering gfx mode defpalette: .res $0100 palette: .res $0100 -bcolor := palette + 0 ; Background color -color: .res 1 ; Stroke and fill index -text_mode: .res 1 ; Old text mode +bcolor := palette + 0 ; Background color +color: .res 1 ; Stroke and fill index +text_mode: .res 1 ; Old text mode .data -error: .byte TGI_ERR_OK ; Error code +error: .byte TGI_ERR_OK ; Error code ; Constants and tables @@ -193,13 +193,13 @@ INIT: stz error ; #TGI_ERR_OK ; Switch into (640 x 480 x 2) graphics mode. - lda #%00000000 ; DCSEL = 0, VRAM port 1 + lda #%00000000 ; DCSEL = 0, VRAM port 1 sta VERA::CTRL - lda #%00100001 ; Disable sprites, layer 1 enable, VGA + lda #%00100001 ; Disable sprites, layer 1 enable, VGA sta VERA::DISP::VIDEO - lda #%00000100 ; Bitmap mode enable + lda #%00000100 ; Bitmap mode enable sta VERA::L1::CONFIG - lda #%00000001 ; Tile width 640 + lda #%00000001 ; Tile width 640 sta VERA::L1::TILE_BASE rts @@ -248,7 +248,7 @@ CLEAR: ; set cache writes lda #$40 - tsb $9f29 ;VERA_FX_CTRL + tsb $9F29 ;VERA_FX_CTRL ; set FX cache to all zeroes lda #(6 << 1) @@ -260,24 +260,24 @@ CLEAR: lda #$ff ahead: sta VERA::DISP::VIDEO - sta VERA::DISP::HSCALE ;$9f2a - sta VERA::DISP::VSCALE ;$9f2b - sta VERA::DISP::FRAME ;$9f2c + sta VERA::DISP::HSCALE + sta VERA::DISP::VSCALE + sta VERA::DISP::FRAME stz VERA::CTRL ; set address and increment for bitmap area stz VERA::ADDR stz VERA::ADDR + 1 - lda #$30 ; increment +4 + lda #$30 ; increment +4 sta VERA::ADDR + 2 - ldy #240 ; number of rows + ldy #$F0 blank_outer: - ldx #10 ; 10 iterations of 32 = one line of 640 + ldx #$0A blank_loop: .repeat 8 - stz VERA::DATA0 ; $9f23 each `stz` writes four zeroes to VRAM (cache contents) for a total of 32 pixels when repeated 8x + stz VERA::DATA0 .endrep dex @@ -287,10 +287,10 @@ blank_loop: ; set up DCSEL=2 lda #(2 << 1) - sta VERA::CTRL ; $9f25 + sta VERA::CTRL ; set FX off (cache write bit 1 -> 0) - stz $9f29 ;VERA_FX_CTRL + stz $9F29 ;VERA_FX_CTRL stz VERA::CTRL .endscope From 550f94b773d8561589229d10d71f86ea3cf2c25a Mon Sep 17 00:00:00 2001 From: xlar54 <scott.hutter@gmail.com> Date: Thu, 13 Jun 2024 23:13:05 -0500 Subject: [PATCH 2458/2710] make setpalette return error --- libsrc/cx16/tgi/cx640p1.s | 64 ++++++++++++++------------------------- 1 file changed, 23 insertions(+), 41 deletions(-) diff --git a/libsrc/cx16/tgi/cx640p1.s b/libsrc/cx16/tgi/cx640p1.s index 9af091c9b..12b732613 100644 --- a/libsrc/cx16/tgi/cx640p1.s +++ b/libsrc/cx16/tgi/cx640p1.s @@ -84,27 +84,7 @@ TEMP = tmp3 TEMP2 = tmp4 ; HORLINE TEMP3 = sreg ; HORLINE -tempX: -.byte $00, $00 -tempY: -.byte $00, $00 -ERR2: -.byte $00 -ERR: -.byte $00 -SY: -.byte $00 -SX: -.byte $00 -DY: -.byte $00 -DX: -.byte $00 -CURRENT_Y: -.byte $00, $00 -CURRENT_X: -.byte $00, $00 ; Absolute variables used in the code .bss @@ -124,9 +104,20 @@ bcolor := palette + 0 ; Background color color: .res 1 ; Stroke and fill index text_mode: .res 1 ; Old text mode +tempX: .res 2 +tempY: .res 2 +ERR2: .res 1 +ERR: .res 1 +SY: .res 1 +SX: .res 1 +DY: .res 1 +DX: .res 1 +CURRENT_Y: .res 2 +CURRENT_X: .res 2 + .data -error: .byte TGI_ERR_OK ; Error code +ERROR: .byte TGI_ERR_OK ; Error code ; Constants and tables @@ -183,7 +174,7 @@ UNINSTALL: ; ; Must set an error code: YES -INIT: stz error ; #TGI_ERR_OK +INIT: stz ERROR ; #TGI_ERR_OK ; Save the current text mode. @@ -220,8 +211,8 @@ DONE: ; GETERROR: Return the error code in .A, and clear it. GETERROR: - lda error - stz error + lda ERROR + stz ERROR rts ; ------------------------------------------------------------------------ @@ -231,7 +222,7 @@ GETERROR: CONTROL: lda #TGI_ERR_INV_FUNC - sta error + sta ERROR rts ; ------------------------------------------------------------------------ @@ -254,10 +245,8 @@ CLEAR: lda #(6 << 1) sta VERA::CTRL - lda #$00 ; color - ; $00=black, $01=white - beq ahead - lda #$ff + lda #$00 + ahead: sta VERA::DISP::VIDEO sta VERA::DISP::HSCALE @@ -324,16 +313,9 @@ SETDRAWPAGE: ; Must set an error code: YES SETPALETTE: - stz error ; #TGI_ERR_OK - ldy #$00 -: lda (ptr1),y - sta palette,y - iny - bnz :- - - lda color ; Get stroke and fill index - - ; Fall through. + lda #TGI_ERR_INV_FUNC + sta ERROR + rts ; ------------------------------------------------------------------------ ; SETCOLOR: Set the drawing color (in .A). The new color already is checked @@ -398,7 +380,7 @@ SETPIXEL: lda BITMASK beq @ahead - ; if COLOR = 1, white is line color + ; if BITMASK = $00, white is line color ; Set the bit in the byte at VERA_DATA0 lda VERA::DATA0 ; Load the byte at memory address ora bitMasks1,X ; OR with the bit mask @@ -406,7 +388,7 @@ SETPIXEL: rts @ahead: - ; if COLOR = 0, black is line color + ; if BITMASK = $FF, black is line color lda VERA::DATA0 ; Load the byte at memory address and bitMasks2,X ; OR with the bit mask sta VERA::DATA0 ; Store back the modified byte From a1ca451e69ce9865c51741561662bb937717f2a6 Mon Sep 17 00:00:00 2001 From: Olli Savia <ops@iki.fi> Date: Sun, 16 Jun 2024 09:35:44 +0300 Subject: [PATCH 2459/2710] Renamed: hello.s -> hello-asm.s --- samples/cbm/Makefile | 10 +++++----- samples/cbm/{hello.s => hello-asm.s} | 0 2 files changed, 5 insertions(+), 5 deletions(-) rename samples/cbm/{hello.s => hello-asm.s} (100%) diff --git a/samples/cbm/Makefile b/samples/cbm/Makefile index 71ab93a41..fe9d349bc 100644 --- a/samples/cbm/Makefile +++ b/samples/cbm/Makefile @@ -137,14 +137,14 @@ plasma: plasma.c $(CL) -t $(SYS) -O -o plasma -m plasma.map plasma.c nachtm: nachtm.c $(CL) -t $(SYS) -O -o nachtm -m nachtm.map nachtm.c -hello: hello.s +hello: hello-asm.s # Use separate assembler ... - $(AS) -t $(SYS) hello.s + $(AS) -t $(SYS) hello-asm.s # ... and linker commands ... - $(LD) -C $(SYS)-asm.cfg -o hello -m hello.map -u __EXEHDR__ hello.o $(SYS).lib - @$(DEL) hello.o 2>$(NULLDEV) + $(LD) -C $(SYS)-asm.cfg -o hello -m hello-asm.map -u __EXEHDR__ hello-asm.o $(SYS).lib + @$(DEL) hello-asm.o 2>$(NULLDEV) # ... or compile & link utility -# $(CL) -C $(SYS)-asm.cfg -o hello -m hello.map -u __EXEHDR__ hello.s +# $(CL) -C $(SYS)-asm.cfg -o hello -m hello-asm.map -u __EXEHDR__ hello-asm.s # -------------------------------------------------------------------------- diff --git a/samples/cbm/hello.s b/samples/cbm/hello-asm.s similarity index 100% rename from samples/cbm/hello.s rename to samples/cbm/hello-asm.s From 64cfb322ccc2eb37ac6decdf49ec1cb7993a829f Mon Sep 17 00:00:00 2001 From: Olli Savia <ops@iki.fi> Date: Sun, 16 Jun 2024 19:14:24 +0300 Subject: [PATCH 2460/2710] Added asm configs for C16 & Plus/4 --- cfg/c16-asm.cfg | 20 ++++++++++++++++++++ cfg/plus4-asm.cfg | 20 ++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 cfg/c16-asm.cfg create mode 100644 cfg/plus4-asm.cfg diff --git a/cfg/c16-asm.cfg b/cfg/c16-asm.cfg new file mode 100644 index 000000000..8cb839304 --- /dev/null +++ b/cfg/c16-asm.cfg @@ -0,0 +1,20 @@ +FEATURES { + STARTADDRESS: default = $1001; +} +SYMBOLS { + __LOADADDR__: type = import; +} +MEMORY { + ZP: file = "", start = $0002, size = $001A; + LOADADDR: file = %O, start = %S - 2, size = $0002; + MAIN: file = %O, start = %S, size = $3000 - %S; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp, optional = yes; + LOADADDR: load = LOADADDR, type = ro; + EXEHDR: load = MAIN, type = ro, optional = yes; + CODE: load = MAIN, type = ro; + RODATA: load = MAIN, type = ro, optional = yes; + DATA: load = MAIN, type = rw, optional = yes; + BSS: load = MAIN, type = bss, define = yes; +} diff --git a/cfg/plus4-asm.cfg b/cfg/plus4-asm.cfg new file mode 100644 index 000000000..df47ba06e --- /dev/null +++ b/cfg/plus4-asm.cfg @@ -0,0 +1,20 @@ +FEATURES { + STARTADDRESS: default = $1001; +} +SYMBOLS { + __LOADADDR__: type = import; +} +MEMORY { + ZP: file = "", start = $0002, size = $001A; + LOADADDR: file = %O, start = %S - 2, size = $0002; + MAIN: file = %O, start = %S, size = $FD00 - %S; +} +SEGMENTS { + ZEROPAGE: load = ZP, type = zp, optional = yes; + LOADADDR: load = LOADADDR, type = ro; + EXEHDR: load = MAIN, type = ro, optional = yes; + CODE: load = MAIN, type = ro; + RODATA: load = MAIN, type = ro, optional = yes; + DATA: load = MAIN, type = rw, optional = yes; + BSS: load = MAIN, type = bss, define = yes; +} From 4989ce485c6f122415d68cef0591c9f7214c3de4 Mon Sep 17 00:00:00 2001 From: Olli Savia <ops@iki.fi> Date: Sun, 16 Jun 2024 19:15:54 +0300 Subject: [PATCH 2461/2710] Build hello-asm.s on C16 & Plus/4 --- samples/cbm/Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/samples/cbm/Makefile b/samples/cbm/Makefile index fe9d349bc..4b89722d2 100644 --- a/samples/cbm/Makefile +++ b/samples/cbm/Makefile @@ -103,10 +103,11 @@ EXELIST_cbm610 = \ nachtm EXELIST_plus4 = \ - plasma + plasma \ + hello EXELIST_c16 = \ - notavailable + hello EXELIST_pet = \ notavailable From 5caed9a15f14c00a920f0ac7c08b8dc41118a7c6 Mon Sep 17 00:00:00 2001 From: xlar54 <scott.hutter@gmail.com> Date: Sun, 16 Jun 2024 14:46:00 -0500 Subject: [PATCH 2462/2710] fixed setpalette --- libsrc/cx16/tgi/cx640p1.s | 87 ++++++++++++++++++++++++++++++++------- 1 file changed, 73 insertions(+), 14 deletions(-) diff --git a/libsrc/cx16/tgi/cx640p1.s b/libsrc/cx16/tgi/cx640p1.s index 12b732613..9a154dfcf 100644 --- a/libsrc/cx16/tgi/cx640p1.s +++ b/libsrc/cx16/tgi/cx640p1.s @@ -31,7 +31,7 @@ .addr $0000 ; Library reference .word 640 ; X resolution .word 480 ; Y resolution - .byte 2 ; Number of drawing colors + .byte 2 ; Number of drawing colors .byte 0 ; Number of screens available .byte 8 ; System font X size .byte 8 ; System font Y size @@ -95,12 +95,9 @@ TEMP3 = sreg ; HORLINE SCRBASE: .res 1 ; High byte of screen base BITMASK: .res 1 ; $00 = clear, $FF = set pixels -OLDCOLOR: .res 1 ; colors before entering gfx mode -defpalette: .res $0100 -palette: .res $0100 +palette: .res 2 -bcolor := palette + 0 ; Background color color: .res 1 ; Stroke and fill index text_mode: .res 1 ; Old text mode @@ -124,6 +121,24 @@ ERROR: .byte TGI_ERR_OK ; Error code .rodata +defpalette: +col_black: .byte %00000000, %00000000 +col_white: .byte %11111111, %00001111 +col_red: .byte %00000000, %00001000 +col_cyan: .byte %11111110, %00001010 +col_purple: .byte %01001100, %00001100 +col_green: .byte %11000101, %00000000 +col_blue: .byte %00001010, %00000000 +col_yellow: .byte %11100111, %00001110 +col_orange: .byte %10000101, %00001101 +col_brown: .byte %01000000, %00000110 +col_lred: .byte %01110111, %00001111 +col_gray1: .byte %00110011, %00000011 +col_gray2: .byte %01110111, %00000111 +col_lgreen: .byte %11110110, %00001010 +col_lblue: .byte %10001111, %00000000 +col_gray3: .byte %10111011, %00001011 + ; Bit masks for setting pixels bitMasks1: .byte %10000000, %01000000, %00100000, %00010000 @@ -144,12 +159,10 @@ bitMasks2: INSTALL: ; Create the default palette. - - ldx #$00 -: txa - sta defpalette,x - inx - bnz :- + lda #$00 + sta palette + lda #$01 + sta palette+1 ; Fall through. @@ -182,7 +195,7 @@ INIT: stz ERROR ; #TGI_ERR_OK jsr SCREEN_MODE sta text_mode -; Switch into (640 x 480 x 2) graphics mode. +; Switch into (640 x 480 x 2 bpp) graphics mode. lda #%00000000 ; DCSEL = 0, VRAM port 1 sta VERA::CTRL @@ -313,8 +326,53 @@ SETDRAWPAGE: ; Must set an error code: YES SETPALETTE: - lda #TGI_ERR_INV_FUNC - sta ERROR + stz ERROR ; #TGI_ERR_OK + ldy #$01 ; Palette size of 2 colors +@L1: lda (ptr1),y ; Copy the palette + sta palette,y + dey + bpl @L1 + + ; set background color from palette color 0 + lda #$00 + sta VERA::ADDR + lda #$FA + sta VERA::ADDR+1 + lda #$01 + sta VERA::ADDR+2 ; write color RAM @ $1FA00 + + lda palette + asl + tay + lda defpalette,y + sta VERA::DATA0 + + inc VERA::ADDR ; $1FA01 + + lda palette + asl + tay + iny ; second byte of color + lda defpalette,y + sta VERA::DATA0 + + ; set foreground color from palette color 1 + inc VERA::ADDR ; $1FA02 + + lda palette+1 + asl + tay + lda defpalette,y + sta VERA::DATA0 + + inc VERA::ADDR ; $1FA03 + + lda palette+1 + asl + tay + iny ; second byte of color + lda defpalette,y + sta VERA::DATA0 rts ; ------------------------------------------------------------------------ @@ -328,6 +386,7 @@ SETCOLOR: beq @L1 lda #$FF @L1: sta BITMASK + stx color rts ; ------------------------------------------------------------------------ From 6dbf5f528ac4f4b8bb2692c156d039f98fa4860f Mon Sep 17 00:00:00 2001 From: xlar54 <scott.hutter@gmail.com> Date: Sun, 16 Jun 2024 14:51:53 -0500 Subject: [PATCH 2463/2710] argh dangling spaces --- libsrc/cx16/tgi/cx640p1.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/cx16/tgi/cx640p1.s b/libsrc/cx16/tgi/cx640p1.s index 9a154dfcf..dde4024e5 100644 --- a/libsrc/cx16/tgi/cx640p1.s +++ b/libsrc/cx16/tgi/cx640p1.s @@ -361,7 +361,7 @@ SETPALETTE: lda palette+1 asl - tay + tay lda defpalette,y sta VERA::DATA0 From 6098ac278821d290b58a966f881de1d94a21534b Mon Sep 17 00:00:00 2001 From: xlar54 <scott.hutter@gmail.com> Date: Sun, 16 Jun 2024 16:06:38 -0500 Subject: [PATCH 2464/2710] fix for getdefpalette --- libsrc/cx16/tgi/cx640p1.s | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/libsrc/cx16/tgi/cx640p1.s b/libsrc/cx16/tgi/cx640p1.s index dde4024e5..034bbb086 100644 --- a/libsrc/cx16/tgi/cx640p1.s +++ b/libsrc/cx16/tgi/cx640p1.s @@ -96,6 +96,7 @@ TEMP3 = sreg ; HORLINE SCRBASE: .res 1 ; High byte of screen base BITMASK: .res 1 ; $00 = clear, $FF = set pixels +defpalette: .res 2 palette: .res 2 color: .res 1 ; Stroke and fill index @@ -121,7 +122,7 @@ ERROR: .byte TGI_ERR_OK ; Error code .rodata -defpalette: +veracolors: col_black: .byte %00000000, %00000000 col_white: .byte %11111111, %00001111 col_red: .byte %00000000, %00001000 @@ -160,9 +161,9 @@ bitMasks2: INSTALL: ; Create the default palette. lda #$00 - sta palette + sta defpalette lda #$01 - sta palette+1 + sta defpalette+1 ; Fall through. @@ -344,7 +345,7 @@ SETPALETTE: lda palette asl tay - lda defpalette,y + lda veracolors,y sta VERA::DATA0 inc VERA::ADDR ; $1FA01 @@ -353,7 +354,7 @@ SETPALETTE: asl tay iny ; second byte of color - lda defpalette,y + lda veracolors,y sta VERA::DATA0 ; set foreground color from palette color 1 @@ -362,7 +363,7 @@ SETPALETTE: lda palette+1 asl tay - lda defpalette,y + lda veracolors,y sta VERA::DATA0 inc VERA::ADDR ; $1FA03 @@ -371,7 +372,7 @@ SETPALETTE: asl tay iny ; second byte of color - lda defpalette,y + lda veracolors,y sta VERA::DATA0 rts From 3b494ad6f2353e0aa9bc142af47371e406fb449b Mon Sep 17 00:00:00 2001 From: xlar54 <scott.hutter@gmail.com> Date: Wed, 19 Jun 2024 23:50:54 -0500 Subject: [PATCH 2465/2710] alignment fixes --- libsrc/cx16/tgi/cx640p1.s | 104 +++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 53 deletions(-) diff --git a/libsrc/cx16/tgi/cx640p1.s b/libsrc/cx16/tgi/cx640p1.s index 034bbb086..93d5cb698 100644 --- a/libsrc/cx16/tgi/cx640p1.s +++ b/libsrc/cx16/tgi/cx640p1.s @@ -31,7 +31,7 @@ .addr $0000 ; Library reference .word 640 ; X resolution .word 480 ; Y resolution - .byte 2 ; Number of drawing colors + .byte 2 ; Number of drawing colors .byte 0 ; Number of screens available .byte 8 ; System font X size .byte 8 ; System font Y size @@ -198,14 +198,14 @@ INIT: stz ERROR ; #TGI_ERR_OK ; Switch into (640 x 480 x 2 bpp) graphics mode. - lda #%00000000 ; DCSEL = 0, VRAM port 1 - sta VERA::CTRL - lda #%00100001 ; Disable sprites, layer 1 enable, VGA - sta VERA::DISP::VIDEO - lda #%00000100 ; Bitmap mode enable - sta VERA::L1::CONFIG - lda #%00000001 ; Tile width 640 - sta VERA::L1::TILE_BASE + lda #%00000000 ; DCSEL = 0, VRAM port 1 + sta VERA::CTRL + lda #%00100001 ; Disable sprites, layer 1 enable, VGA + sta VERA::DISP::VIDEO + lda #%00000100 ; Bitmap mode enable + sta VERA::L1::CONFIG + lda #%00000001 ; Tile width 640 + sta VERA::L1::TILE_BASE rts ; ------------------------------------------------------------------------ @@ -245,59 +245,57 @@ CONTROL: ; Must set an error code: NO CLEAR: - .scope inner + .scope inner - ; set up DCSEL=2 - lda #(2 << 1) - sta VERA::CTRL + ; set up DCSEL=2 + lda #(2 << 1) + sta VERA::CTRL - ; set cache writes - lda #$40 - tsb $9F29 ;VERA_FX_CTRL + ; set cache writes + lda #$40 + tsb VERA::DISP::VIDEO ; VERA_FX_CTRL when DCSEL=2 - ; set FX cache to all zeroes - lda #(6 << 1) - sta VERA::CTRL + ; set FX cache to all zeroes + lda #(6 << 1) + sta VERA::CTRL - lda #$00 + lda #$00 + sta VERA::DISP::VIDEO + sta VERA::DISP::HSCALE + sta VERA::DISP::VSCALE + sta VERA::DISP::FRAME -ahead: - sta VERA::DISP::VIDEO - sta VERA::DISP::HSCALE - sta VERA::DISP::VSCALE - sta VERA::DISP::FRAME + stz VERA::CTRL + ; set address and increment for bitmap area + stz VERA::ADDR + stz VERA::ADDR + 1 + lda #$30 ; increment +4 + sta VERA::ADDR + 2 - stz VERA::CTRL - ; set address and increment for bitmap area - stz VERA::ADDR - stz VERA::ADDR + 1 - lda #$30 ; increment +4 - sta VERA::ADDR + 2 + ldy #$F0 +@blank_outer: + ldx #$0A +@blank_loop: - ldy #$F0 -blank_outer: - ldx #$0A -blank_loop: + .repeat 8 + stz VERA::DATA0 + .endrep - .repeat 8 - stz VERA::DATA0 - .endrep + dex + bne @blank_loop + dey + bne @blank_outer - dex - bne blank_loop - dey - bne blank_outer + ; set up DCSEL=2 + lda #(2 << 1) + sta VERA::CTRL - ; set up DCSEL=2 - lda #(2 << 1) - sta VERA::CTRL + ; set FX off (cache write bit 1 -> 0) + stz $9F29 ;VERA_FX_CTRL + stz VERA::CTRL - ; set FX off (cache write bit 1 -> 0) - stz $9F29 ;VERA_FX_CTRL - stz VERA::CTRL - - .endscope - rts + .endscope + rts ; ------------------------------------------------------------------------ @@ -447,7 +445,7 @@ SETPIXEL: sta VERA::DATA0 ; Store back the modified byte rts - @ahead: +@ahead: ; if BITMASK = $FF, black is line color lda VERA::DATA0 ; Load the byte at memory address and bitMasks2,X ; OR with the bit mask @@ -482,7 +480,7 @@ GETPIXEL: lda #$00 rts - @ahead: +@ahead: ldx #$00 lda #$01 rts From 3d5fd0489e131106044c34f51efb32929092cc81 Mon Sep 17 00:00:00 2001 From: xlar54 <scott.hutter@gmail.com> Date: Wed, 19 Jun 2024 23:52:25 -0500 Subject: [PATCH 2466/2710] replaced constant --- libsrc/cx16/tgi/cx640p1.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/cx16/tgi/cx640p1.s b/libsrc/cx16/tgi/cx640p1.s index 93d5cb698..287160f6b 100644 --- a/libsrc/cx16/tgi/cx640p1.s +++ b/libsrc/cx16/tgi/cx640p1.s @@ -291,7 +291,7 @@ CLEAR: sta VERA::CTRL ; set FX off (cache write bit 1 -> 0) - stz $9F29 ;VERA_FX_CTRL + stz VERA::DISP::VIDEO ; VERA_FX_CTRL when DCSEL=2 stz VERA::CTRL .endscope From 871bafa5b33ca8a13b891f8cd66b282ae8d90cc9 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sun, 7 Jul 2024 00:48:15 +0200 Subject: [PATCH 2467/2710] Keep gcc-14 from aborting with errors due to new defaults. Adds -Wno-error=implicit-int -Wno-error=int-conversion to CFLAGS. Tested with gcc-12.4 and gcc-14.1. --- test/ref/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ref/Makefile b/test/ref/Makefile index 5c189c6cb..e82c6de37 100644 --- a/test/ref/Makefile +++ b/test/ref/Makefile @@ -50,7 +50,7 @@ ISEQUAL = ..$S..$Stestwrk$Sisequal$(EXE) # will have to change that, and create said special cases here. # see discussion in https://github.com/cc65/cc65/issues/2277 CC = gcc -CFLAGS = -std=gnu17 -O2 -Wall -W -Wextra -funsigned-char -fwrapv -fno-strict-overflow +CFLAGS = -std=gnu17 -O2 -Wall -W -Wextra -funsigned-char -fwrapv -fno-strict-overflow -Wno-error=implicit-int -Wno-error=int-conversion .PHONY: all clean From cdb2d49e3a5737c4b4d2ad33bc512aaa4e8aec2a Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sun, 7 Jul 2024 01:02:32 +0200 Subject: [PATCH 2468/2710] Test strtok(). --- test/ref/strtok.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 test/ref/strtok.c diff --git a/test/ref/strtok.c b/test/ref/strtok.c new file mode 100644 index 000000000..15c3a289d --- /dev/null +++ b/test/ref/strtok.c @@ -0,0 +1,43 @@ +// 2024-02-14 Sven Michael Klose <pixel@hugbox.org> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +void +error (void) +{ + printf ("strtok() test failed!\n"); + exit (-1); +} + +void +test (char * s) +{ + if (strcmp ("test", strtok (s, "/"))) + error (); + if (strcmp ("foo", strtok (NULL, "/"))) + error (); + if (strcmp ("bar", strtok (NULL, "/"))) + error (); + if (strtok (NULL, "/")) + error (); + if (strtok (NULL, "/")) + error (); +} + +int +main (void) +{ + char s1[] = "test/foo/bar"; + char s2[] = "/test/foo/bar"; + char s3[] = "//test/foo/bar"; + char s4[] = "//test/foo/bar//"; + + test (s1); + test (s2); + test (s3); + test (s4); + + return 0; +} From 581b79e0b9097592ab32bb00edce33c06d72917b Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sun, 7 Jul 2024 14:04:49 +0200 Subject: [PATCH 2469/2710] Add stpcpy(). Like strcpy() but returning pointer to ending zero of copied string. --- include/string.h | 1 + libsrc/common/stpcpy.c | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 libsrc/common/stpcpy.c diff --git a/include/string.h b/include/string.h index b19f44e31..06c97d464 100644 --- a/include/string.h +++ b/include/string.h @@ -52,6 +52,7 @@ char* __fastcall__ strchr (const char* s, int c); int __fastcall__ strcmp (const char* s1, const char* s2); int __fastcall__ strcoll (const char* s1, const char* s2); char* __fastcall__ strcpy (char* dest, const char* src); +char* __fastcall__ stpcpy (char* dest, const char* src); size_t __fastcall__ strcspn (const char* s1, const char* s2); char* __fastcall__ strerror (int errcode); size_t __fastcall__ strlen (const char* s); diff --git a/libsrc/common/stpcpy.c b/libsrc/common/stpcpy.c new file mode 100644 index 000000000..153a3e361 --- /dev/null +++ b/libsrc/common/stpcpy.c @@ -0,0 +1,8 @@ +#include <string.h> + +char * __fastcall__ +stpcpy (char * dst, const char * src) +{ + strcpy (dst, src); + return dst + strlen (src); +} From af3ac423733637c74400818d5281b3d3ec643df4 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sun, 7 Jul 2024 19:48:44 +0200 Subject: [PATCH 2470/2710] Move stpcpy() to non-standard section. --- include/string.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/string.h b/include/string.h index 06c97d464..3b7ece1d9 100644 --- a/include/string.h +++ b/include/string.h @@ -52,7 +52,6 @@ char* __fastcall__ strchr (const char* s, int c); int __fastcall__ strcmp (const char* s1, const char* s2); int __fastcall__ strcoll (const char* s1, const char* s2); char* __fastcall__ strcpy (char* dest, const char* src); -char* __fastcall__ stpcpy (char* dest, const char* src); size_t __fastcall__ strcspn (const char* s1, const char* s2); char* __fastcall__ strerror (int errcode); size_t __fastcall__ strlen (const char* s); @@ -91,6 +90,7 @@ char* __fastcall__ strlower (char* s); char* __fastcall__ strupr (char* s); char* __fastcall__ strupper (char* s); char* __fastcall__ strqtok (char* s1, const char* s2); +char* __fastcall__ stpcpy (char* dest, const char* src); #endif const char* __fastcall__ __stroserror (unsigned char errcode); From 816bcabe5aeb2b1dd3d884f2f1a091599b41a536 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sun, 14 Jul 2024 23:12:59 +0200 Subject: [PATCH 2471/2710] Move strtok() test to correct section. --- test/{ref => val}/strtok.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/{ref => val}/strtok.c (100%) diff --git a/test/ref/strtok.c b/test/val/strtok.c similarity index 100% rename from test/ref/strtok.c rename to test/val/strtok.c From 9558ebad624ed7c03eb7ddee12445482d1749a19 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Mon, 15 Jul 2024 17:35:28 +0200 Subject: [PATCH 2472/2710] Add test for stpcpy(). --- test/val/stpcpy.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 test/val/stpcpy.c diff --git a/test/val/stpcpy.c b/test/val/stpcpy.c new file mode 100644 index 000000000..8bdbfb926 --- /dev/null +++ b/test/val/stpcpy.c @@ -0,0 +1,44 @@ +// 2024-07-15 Sven Michael Klose <pixel@hugbox.org> + +#include <assert.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#define STR_SHORT "Hello, World!" +#define STR_LONG "This is a longer test string for stpcpy." + +int +main () +{ + char dest[50]; + const char *src_empty; + const char *src_short; + const char *src_long; + char *end; + + src_empty = ""; + end = stpcpy (dest, src_empty); + assert(!strcmp (dest, src_empty)); + assert(!*end); + assert(end == dest); + printf ("Test 1 passed.\n"); + + src_short = STR_SHORT; + end = stpcpy (dest, src_short); + assert(!strcmp (dest, src_short)); + assert(!*end); + assert(end == &dest[sizeof (STR_SHORT) - 1]); + printf ("Test 2 passed.\n"); + + src_long = STR_LONG; + end = stpcpy (dest, src_long); + assert(!strcmp (dest, src_long)); + assert(!*end); + assert(end == &dest[sizeof (STR_LONG) - 1]); + printf ("Test 3 passed.\n"); + + printf ("All tests passed.\n"); + return EXIT_SUCCESS; +} + From 677cd8ff4e2cd699375498baa93487fc756a43e6 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Mon, 15 Jul 2024 17:54:43 +0200 Subject: [PATCH 2473/2710] Use standard library's exit() code constants. --- test/val/strtok.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/val/strtok.c b/test/val/strtok.c index 15c3a289d..4d63bfb2a 100644 --- a/test/val/strtok.c +++ b/test/val/strtok.c @@ -1,5 +1,3 @@ -// 2024-02-14 Sven Michael Klose <pixel@hugbox.org> - #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -8,7 +6,7 @@ void error (void) { printf ("strtok() test failed!\n"); - exit (-1); + exit (EXIT_FAILURE); } void @@ -39,5 +37,5 @@ main (void) test (s3); test (s4); - return 0; + return EXIT_SUCCESS; } From aed94d2dae9755a77040fec396d84edc883892ef Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Tue, 16 Jul 2024 01:33:48 +0200 Subject: [PATCH 2474/2710] Fix code style. Have type, function name and argument declaration on a single line. --- libsrc/common/stpcpy.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libsrc/common/stpcpy.c b/libsrc/common/stpcpy.c index 153a3e361..12af47f2f 100644 --- a/libsrc/common/stpcpy.c +++ b/libsrc/common/stpcpy.c @@ -1,7 +1,6 @@ #include <string.h> -char * __fastcall__ -stpcpy (char * dst, const char * src) +char * __fastcall__ stpcpy (char * dst, const char * src) { strcpy (dst, src); return dst + strlen (src); From d3e0f7b3921e6f96c1b7efe594ef0d57c00ae114 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Thu, 18 Jul 2024 10:00:16 +0200 Subject: [PATCH 2475/2710] Make document human-readable and split out name clashes section. In hope to reduce the pull request comment ping-pong. --- Contributing.md | 459 +++++++++++++++++++++++------------------- libsrc/NameClashes.md | 380 ++++++++++++++++++++++++++++++++++ 2 files changed, 637 insertions(+), 202 deletions(-) create mode 100644 libsrc/NameClashes.md diff --git a/Contributing.md b/Contributing.md index 1fde873f2..2ea50a183 100644 --- a/Contributing.md +++ b/Contributing.md @@ -1,188 +1,308 @@ -This document contains all kinds of information that you should know if you want to contribute to the cc65 project. Before you start, please read all of it. If something is not clear to you, please ask - this document is an ongoing effort and may well be incomplete. +Contributing to cc65 +==================== -Also, before you put a lot of work into implementing something you want to contribute, please get in touch with one of the developers and ask if what you are going to do is actually wanted and has a chance of being merged. Perhaps someone else is already working on it, or perhaps what you have in mind is not how we'd expect it to be - talking to us before you start might save you a lot of work in those cases. +This document contains all kinds of information that you +should know if you want to contribute to the cc65 project. +Before you start, please read all of it. If something is not +clear to you, please ask - this document is an ongoing effort +and may well be incomplete. -(''Note:'' The word "must" indicates a requirement. The word "should" indicates a recomendation.) +Also, before you put a lot of work into implementing +something you want to contribute, please get in touch with +one of the developers and ask if what you are going to do is +actually wanted and has a chance of being merged. Perhaps +someone else is already working on it, or perhaps what you +have in mind is not how we'd expect it to be - talking to us +before you start might save you a lot of work in those cases. -*this is work in progress and is constantly updated - if in doubt, please ask* +(''Note:'' The word "must" indicates a requirement. The word + "should" indicates a recomendation.) -# generally +*this is work in progress and is constantly updated - if in +doubt, please ask* -* You must obey these rules when contributing new code or documentation to cc65. We are well aware that not all existing code may respect all rules outlined here - but this is no reason for you not to respect them. -* One commit/patch/PR per issue. Do not mix several things unless they are very closely related. -* Sometimes when you make a PR, it may break completely unrelated tests. However, any PR is expected to merge cleanly with no failures. That means in practise that you are expected to fix/update the failing tests if required - for example this might be needed if you make changes to the compiler that changes the format of error- or warning messages. In that case you might have to update some reference files in the testbench. Obviously still check if that is actually the right thing to do ;) +# Generally + +* You must obey these rules when contributing new code or + documentation to cc65. We are well aware that not all + existing code may respect all rules outlined here - but this + is no reason for you not to respect them. +* One commit/patch/PR per issue. Do not mix several things + unless they are very closely related. +* Sometimes when you make a PR, it may break completely + unrelated tests. However, any PR is expected to merge + cleanly with no failures. That means in practise that you + are expected to fix/update the failing tests if required - + for example this might be needed if you make changes to the + compiler that changes the format of error- or warning + messages. In that case you might have to update some + reference files in the testbench. Obviously still check if + that is actually the right thing to do. ;) # Codestyle rules -## All Sources +## All sources ### Line endings -All files must only contain Unix style 'LF' line endings. Please configure your editors accordingly. +All files must only contain Unix style 'LF' line endings. +Please configure your editors accordingly. ### TABs and spaces -This is an ongoing controversial topic - everyone knows that. However, the following is how we do it :) +This is an ongoing controversial topic - everyone knows +that. However, the following is how we do it :) * TAB characters must be expanded to spaces. -* 4 spaces per indention level (rather than 8) are preferred, especially if there are many different levels. +* 4 spaces per indention level (rather than 8) are + preferred, especially if there are many different levels. * No extra spaces at the end of lines. -* All text files must end with new-line characters. Don't leave the last line "dangling". +* All text files must end with new-line characters. Don't + leave the last line "dangling". -The (bash) scripts used to check the above rules can be found in ```.github/check```. You can also run all checks using ```make check```. +The (bash) scripts used to check the above rules can be +found in ```.github/check```. You can also run all checks +using ```make check```. -### Identifiers and Symbol names +### Identifiers and symbol names -The C Standard defines certain identifiers and symbol names, which we can not use -in our code. Since it is not always obvious which parts of the library code will -actually end up in a linked program, the following applies to ALL of the library. +The C Standard defines certain identifiers and symbol names, +which we can not use in our code. Since it is not always +obvious which parts of the library code will actually end up +in a linked program, the following applies to ALL of the +library. -Any non standard identifier/symbol/function that is exported from source files, -or appears in header files: +Any non standard identifier/symbol/function that is exported +from source files, or appears in header files: -* must not be in the "_symbol" form in C, or "__symbol" form in assembly. -* must start with (at least) two (C Code) or three (assembly code) underscores, unless the symbol appears in a non standard header file. +* must not be in the "_symbol" form in C, or "__symbol" form + in assembly, +* must start with (at least) two (C Code) or three (assembly + code) underscores, unless the symbol appears in a non + standard header file. -This is likely more than the standard dictates us to do - but it is certainly -standard compliant - and easy to remember. +This is likely more than the standard dictates us to do - +but it is certainly standard compliant - and easy to +remember. -Also see the discussion in https://github.com/cc65/cc65/issues/1796 +Also see the discussion in +https://github.com/cc65/cc65/issues/1796 -### misc +### Miscellaneous -* 80 characters is the desired maximum width of files. But, it isn't a "strong" rule; sometimes, you will want to type longer lines, in order to keep the parts of expressions or comments together on the same line. +* 80 characters is the desired maximum width of files. But, + it isn't a "strong" rule; sometimes, you will want to type + longer lines, in order to keep the parts of expressions or + comments together on the same line. * You should avoid typing non-ASCII characters. -* If you change "normal" source code into comments, then you must add a comment about why that code is a comment. -* When you want to create a comment from several lines of code, you should use preprocessor lines, instead of ```/* */``` or "```;```". Example: -<pre> +* If you change "normal" source code into comments, then you + must add a comment about why that code is a comment. +* When you want to create a comment from several lines of + code, you should use preprocessor lines, instead of ```/* + */``` or "```;```". Example: + +~~~C #if 0 - one (); - two (); - three = two () + one (); + one (); two (); + three = two () + one (); #endif -</pre> +~~~ + * You should type upper case characters for hex values. -* When you type zero-page addresses in hexadecimal, you should type two hex characters (after the hex prefix). When you type non-zero-page addresses in hex, you should type four hex characters. -* When you type lists of addresses, it is a good idea to sort them in ascending numerical order. That makes it easier for readers to build mental pictures of where things are in an address space. And, it is easier to see how big the variables and buffers are. Example: -<pre> +* When you type zero-page addresses in hexadecimal, you + should type two hex characters (after the hex prefix). + When you type non-zero-page addresses in hex, you should + type four hex characters. +* When you type lists of addresses, it is a good idea to + sort them in ascending numerical order. That makes it + easier for readers to build mental pictures of where things + are in an address space. And, it is easier to see how big + the variables and buffers are. Example: + +~~~asm xCoord := $0703 -yCoord := $0705 ; (this address implies that xCoord is 16 bits) -cmdbuf := $0706 ; (this address implies that yCoord is 8 bits) -cmdlen := $0786 ; (this address implies that cmdbuf is 128 bytes) +yCoord := $0705 ; (this address implies that xCoord is 16 bits) +cmdbuf := $0706 ; (this address implies that yCoord is 8 bits) +cmdlen := $0786 ; (this address implies that cmdbuf is 128 bytes) color := $0787 -</pre> +~~~ -## C Sources +## C sources -The following is still very incomplete - if in doubt please look at existing sourcefiles and adapt to the existing style +The following is still very incomplete - if in doubt please +look at existing sourcefiles and adapt to the existing style. -* Your files should generally obey the C89 standard, with a few C99 things (this is a bit similar to what cc65 itself supports). The exceptions are: - * use stdint.h for variables that require a certain bit size - * In printf-style functions use the PRIX64 (and similar) macros to deal with 64bit values (from inttypes.h) -This list is not necessarily complete - if in doubt, please ask. +Your files should generally obey the C89 standard, with a +few C99 things (this is a bit similar to what cc65 itself +supports). The exceptions are: + +* Use stdint.h for variables that require a certain bit size +* In printf-style functions use the PRIX64 (and similar) + macros to deal with 64bit values (from inttypes.h) This + list is not necessarily complete - if in doubt, please ask. * We generally have a "no warnings" policy - * Warnings must not be hidden by using typecasts - fix the code instead +* Warnings must not be hidden by using typecasts - fix the + code instead * The normal indentation width should be four spaces. -* You must use ANSI C comments (```/* */```); you must not use C++ comments (```//```). -* When you add functions to an existing file, you should separate them by the same number of blank lines that separate the functions that already are in that file. -* All function declarations must be followed by a comment block that tells at least briefly what the function does, what the parameters are, and what is returned. This comment must sit between the declaration and the function body, like this: -<pre> -int foo(int bar) -/* Add 1 to bar, takes bar and returns the result */ +* You must use ANSI C comments (```/* */```); you must not + use C++ comments (```//```). +* When you add functions to an existing file, you should + separate them by the same number of blank lines that + separate the functions that already are in that file. +* All function declarations must be followed by a comment + block that tells at least briefly what the function does, + what the parameters are, and what is returned. This comment + must sit between the declaration and the function body, like + this: + +~~~C +int foo(int bar) /* Add 1 to bar, takes bar and returns the result */ { return bar + 1; } -</pre> -* When a function's argument list wraps around to a next line, you should indent that next line by either the normal width or enough spaces to align it with the arguments on the previous line. -* All declarations in a block must be at the beginning of that block. -* You should put a blank line between a list of local variable declarations and the first line of code. -* Always use curly braces even for single statements after ```if```, and the single statement should go into a new line. -* Use "cuddling" braces, ie the opening brace goes in the same line as the ```if```: -<pre> +~~~ + +* When a function's argument list wraps around to a next + line, you should indent that next line by either the + normal width or enough spaces to align it with the arguments + on the previous line. +* All declarations in a block must be at the beginning of + that block. +* You should put a blank line between a list of local + variable declarations and the first line of code. +* Always use curly braces even for single statements after + ```if```, and the single statement should go into a new + line. +* Use "cuddling" braces, ie the opening brace goes in the + same line as the ```if```: + +~~~C if (foo > 42) { bar = 23; } -</pre> -* Should the ```if``` statement be followed by an empty conditional block, there should be a comment telling why this is the case -<pre> -if (check()) { - /* nothing happened, do nothing */ -} -</pre> -* You must separate function names and parameter/argument lists by one space. -* When declaring/defining pointers, you must put the asterisk (```*```) next to the data type, with a space between it and the variable's name. Examples: -<pre> - int* namedPtr[5]; - char* nextLine (FILE* f); -</pre> +~~~ + +* Should the ```if``` statement be followed by an empty + conditional block, there should be a comment telling why + this is the case: + +~~~C +if (check()) { /* nothing happened, do nothing */ } +~~~ + +* You must separate function names and parameter/argument + lists by one space. +* When declaring/defining pointers, you must put the + asterisk (```*```) next to the data type, with a space + between it and the variable's name. Examples: + +~~~C +int* namedPtr[5]; +char* nextLine (FILE* f); +~~~ ### Header files -Headers that belong to the standard library (libc) must conform with the C standard. That means: -* all non standard functions, or functions that only exist in a certain standard, should be in #ifdefs - * the same is true for macros or typedefs -<pre> -#if __CC65_STD__ == __CC65_STD_C99__ -/* stuff that only exists in C99 here */ -#endif -#if __CC65_STD__ == __CC65_STD_CC65__ -/* non standard stuff here */ -#endif -</pre> -You can refer to Annex B of the ISO C99 standard ([here](https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf) is the draft). +Headers that belong to the standard library (libc) must +conform with the C standard. That means: -## Assembly Sources +* All non standard functions, or functions that only exist + in a certain standard, should be in #ifdefs +* The same is true for macros or typedefs. + You can refer to Annex B of the ISO C99 standard + ([here](https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf) + is the draft). Example: -* Op-code mnemonics must have lower-case letters. The names of instruction macroes may have upper-case letters. -* Op-codes must use their official and commonly used mnemonics, ie bcc and bcs and not bgt and blt -* Hexadecimal number constants should be used except where decimal or binary numbers make much more sense in that constant's context. +~~~C +#if __CC65_STD__ == __CC65_STD_C99__ /* stuff that only exists in C99 here */ +#endif +#if __CC65_STD__ == __CC65_STD_CC65__ /* non standard stuff here */ +#endif </pre> +~~~ + +## Assembly sources + +* Opcode mnemonics must have lower-case letters. The names + of instruction macroes may have upper-case letters. +* Opcodes must use their official and commonly used + mnemonics, ie 'bcc' and 'bcs' and not 'bgt' and 'blt'. +* Hexadecimal number constants should be used except where + decimal or binary numbers make much more sense in that + constant's context. * Hexadecimal letters should be upper-case. -* When you set two registers or two memory locations to an immediate 16-bit zero, you should use the expressions ```#<$0000``` and ```#>$0000``` (they make it obvious where you are putting the lower and upper bytes). -* If a function is declared to return a char-sized value, it actually must return an integer-sized value. (When cc65 promotes a returned value, it sometimes assumes that the value already is an integer.) This must be done in one of the following ways: -<pre> +* When you set two registers or two memory locations to an + immediate 16-bit zero, you should use the expressions + ```#<$0000``` and ```#>$0000``` (they make it obvious where + you are putting the lower and upper bytes). +* If a function is declared to return a char-sized value, it + actually must return an integer-sized value. (When cc65 + promotes a returned value, it sometimes assumes that the value + already is an integer.) + This must be done in one of the following ways: + +~~~asm lda #RETURN_VALUE ldx #0 ; Promote char return value -</pre> -or, if the value is 0, you can use: -<pre> + + ; If the value is 0, you can use: lda #RETURN_VALUE .assert RETURN_VALUE = 0 tax -</pre> -sometimes jumping to return0 could save a byte: -<pre> + + ; Sometimes jumping to 'return 0' could save a byte: .assert RETURN_VALUE = 0 jmp return 0 -</pre> -* Functions, that are intended for a platform's system library, should be optimized as much as possible. -* Sometimes, there must be a trade-off between size and speed. If you think that a library function won't be used often, then you should make it small. Otherwise, you should make it fast. -* Comments that are put on the right side of instructions must be aligned (start in the same character columns). -* Assembly source fields (label, operation, operand, comment) should start ''after'' character columns that are multiples of eight (such as 1, 9, 17, 33, and 41). +~~~ + +* Functions, that are intended for a platform's system + library, should be optimized as much as possible. +* Sometimes, there must be a trade-off between size and + speed. If you think that a library function won't be used + often, then you should make it small. Otherwise, you should + make it fast. +* Comments that are put on the right side of instructions + must be aligned (start in the same character columns). +* Assembly source fields (label, operation, operand, + comment) should start ''after'' character columns that are + multiples of eight (such as 1, 9, 17, 33, and 41). -## LinuxDoc Sources +## LinuxDoc sources * TAB characters must be expanded to spaces. -* All text files must end with new-line characters. Don't leave the last line "dangling". +* All text files must end with new-line characters. Don't + leave the last line "dangling". * 80 characters is the desired maximum width of files. * You should avoid typing non-ASCII characters. * You should put blank lines between LinuxDoc sections: - * Three blank lines between ```<sect>``` sections. - * Two blank lines between ```<sect1>``` sections. - * One blank line between other sections. +* Three blank lines between ```<sect>``` sections. +* Two blank lines between ```<sect1>``` sections. +* One blank line between other sections. # Library implementation rules -* By default the toolchain must output a "standard" binary for the platform, no emulator formats, no extra headers used by tools. If the resulting binaries can not be run as is on emulators or eg flash cartridges, the process of converting them to something that can be used with these should be documented in the user manual. -* Generally every function should live in a seperate source file - unless the functions are so closely related that splitting makes no sense. -* Source files should not contain commented out code - if they do, there should be a comment that explains why that commented out code exists. +* By default the toolchain must output a "standard" binary + for the platform, no emulator formats, no extra headers + used by tools. If the resulting binaries can not be run as + is on emulators or eg flash cartridges, the process of + converting them to something that can be used with these + should be documented in the user manual. +* Generally every function should live in a seperate source + file - unless the functions are so closely related that + splitting makes no sense. +* Source files should not contain commented out code - if + they do, there should be a comment that explains why that + commented out code exists. # Makefile rules -* Makefiles must generally work on both *nix (ba)sh and windows cmd.exe. -* Makefiles must not use external tools that are not provided by the cc65 toolchain itself. +* Makefiles must generally work on both *nix (ba)sh and + windows cmd.exe. +* Makefiles must not use external tools that are not + provided by the cc65 toolchain itself. -The only exception to the above are actions that are exclusive to the github actions - those may rely on bash and/or linux tools. +The only exception to the above are actions that are exclusive +to the github actions - those may rely on bash and/or linux tools. # Documentation rules @@ -192,107 +312,42 @@ The only exception to the above are actions that are exclusive to the github act ## Wiki -* The Wiki is strictly for additional information that does not fit into the regular user manual (LinuxDoc). The wiki must not duplicate any information that is present in the user manual +* The Wiki is strictly for additional information that does + not fit into the regular user manual (LinuxDoc). The wiki + must not duplicate any information that is present in the + user manual. -# Roadmap / TODOs / open Ends +# Roadmap / TODOs / open ends ## Documentation -* the printf family of function does not completely implement all printf modifiers and does not behave as expected in some cases - all this should be documented in detail +* The printf() family of functions does not completely + implement all printf() modifiers and does not behave as + expected in some cases - all this should be documented in + detail. ## Compiler -* We need a way that makes it possible to feed arbitrary assembler code into the optimzer, so we can have proper tests for it +* We need a way that makes it possible to feed arbitrary + assembler code into the optimzer, so we can have proper + tests for it. ### Floating point support -The first step is implementing the datatype "float" as IEEE 754 floats. Help welcomed! +The first step is implementing the datatype "float" as IEEE +754 floats. Help welcomed! -* WIP compiler/library changes are here: https://github.com/cc65/cc65/pull/1777 +* WIP compiler/library changes are here: + https://github.com/cc65/cc65/pull/1777 ## Library -### name clashes in the library - -see "Identifiers and Symbol names" above - not all identifiers have been checked -and renamed yet. The following is a list of those that still might need to be -fixed: - -``` -common - -__argc libsrc/runtime/callmain.s libsrc/cbm610/mainargs.s libsrc/cx16/mainargs.s libsrc/plus4/mainargs.s libsrc/lynx/mainargs.s libsrc/c16/mainargs.s libsrc/geos-common/system/mainargs.s libsrc/sim6502/mainargs.s libsrc/c128/mainargs.s libsrc/vic20/mainargs.s libsrc/nes/mainargs.s libsrc/atari/getargs.s libsrc/apple2/mainargs.s libsrc/cbm510/mainargs.s libsrc/telestrat/mainargs.s libsrc/c64/mainargs.s libsrc/pet/mainargs.s libsrc/atmos/mainargs.s -__argv libsrc/runtime/callmain.s libsrc/cbm610/mainargs.s libsrc/cx16/mainargs.s libsrc/plus4/mainargs.s libsrc/lynx/mainargs.s libsrc/c16/mainargs.s libsrc/geos-common/system/mainargs.s libsrc/sim6502/mainargs.s libsrc/c128/mainargs.s libsrc/vic20/mainargs.s libsrc/nes/mainargs.s libsrc/atari/getargs.s libsrc/apple2/mainargs.s libsrc/cbm510/mainargs.s libsrc/telestrat/mainargs.s libsrc/c64/mainargs.s libsrc/pet/mainargs.s libsrc/atmos/mainargs.s -__cos libsrc/common/sincos.s -__ctypeidx libsrc/common/ctype.s libsrc/common/ctypemask.s libsrc/geos-common/system/ctype.s libsrc/atari/ctype.s libsrc/cbm/ctype.s libsrc/atmos/ctype.s asminc/ctype_common.inc -__cwd libsrc/common/getcwd.s libsrc/common/_cwd.s libsrc/atari/initcwd.s libsrc/apple2/initcwd.s libsrc/apple2/initcwd.s libsrc/telestrat/initcwd.s libsrc/cbm/initcwd.s -__cwd_buf_size libsrc/common/_cwd.s -__envcount libsrc/common/searchenv.s libsrc/common/_environ.s libsrc/common/putenv.s libsrc/common/getenv.s -__environ libsrc/common/searchenv.s libsrc/common/_environ.s libsrc/common/putenv.s libsrc/common/getenv.s -__envsize libsrc/common/_environ.s libsrc/common/putenv.s -__fdesc libsrc/common/_fdesc.s libsrc/common/fopen.s -__filetab libsrc/common/_fdesc.s libsrc/common/_file.s asminc/_file.inc -__fopen libsrc/common/fopen.s libsrc/common/_fopen.s -__printf libsrc/common/vsnprintf.s libsrc/common/_printf.s libsrc/common/vfprintf.s libsrc/conio/vcprintf.s libsrc/pce/_printf.s -__scanf libsrc/common/_scanf.inc libsrc/common/vsscanf.s libsrc/conio/vcscanf.s -__sin libsrc/common/sincos.s -__sys libsrc/common/_sys.s libsrc/apple2/_sys.s -__sys_oserrlist libsrc/common/stroserr.s libsrc/geos-common/system/oserrlist.s libsrc/atari/oserrlist.s libsrc/apple2/oserrlist.s libsrc/cbm/oserrlist.s libsrc/atmos/oserrlist.s -__syschdir libsrc/common/chdir.s libsrc/atari/syschdir.s libsrc/apple2/syschdir.s libsrc/telestrat/syschdir.s libsrc/cbm/syschdir.s -__sysmkdir libsrc/common/mkdir.s libsrc/atari/sysmkdir.s libsrc/apple2/sysmkdir.s libsrc/telestrat/sysmkdir.s -__sysremove libsrc/common/remove.s libsrc/geos-common/file/sysremove.s libsrc/atari/sysremove.s libsrc/atari/sysrmdir.s libsrc/apple2/sysremove.s libsrc/apple2/sysrmdir.s libsrc/telestrat/sysremove.s libsrc/cbm/sysremove.s -__sysrename libsrc/common/rename.s libsrc/geos-common/file/sysrename.s libsrc/atari/sysrename.s libsrc/apple2/sysrename.s libsrc/cbm/sysrename.s -__sysrmdir libsrc/common/rmdir.s libsrc/atari/sysrmdir.s libsrc/apple2/sysrmdir.s -__sysuname libsrc/common/uname.s libsrc/cbm610/sysuname.s libsrc/cx16/sysuname.s libsrc/plus4/sysuname.s libsrc/lynx/sysuname.s libsrc/c16/sysuname.s libsrc/geos-common/system/sysuname.s libsrc/c128/sysuname.s libsrc/creativision/sysuname.s libsrc/vic20/sysuname.s libsrc/nes/sysuname.s libsrc/atari/sysuname.s libsrc/apple2/sysuname.s libsrc/cbm510/sysuname.s libsrc/telestrat/sysuname.s libsrc/c64/sysuname.s libsrc/pet/sysuname.s libsrc/atari5200/sysuname.s libsrc/atmos/sysuname.s - -apple2 - -__auxtype libsrc/apple2/open.s -__datetime libsrc/apple2/open.s -__dos_type libsrc/apple2/dioopen.s libsrc/apple2/curdevice.s libsrc/apple2/mainargs.s libsrc/apple2/settime.s libsrc/apple2/getdevice.s libsrc/apple2/dosdetect.s libsrc/apple2/irq.s libsrc/apple2/open.s libsrc/apple2/mli.s libsrc/apple2/getres.s -__filetype libsrc/apple2/open.s libsrc/apple2/exehdr.s - - -atari - -__defdev libsrc/atari/posixdirent.s libsrc/atari/ucase_fn.s libsrc/atari/getdefdev.s -__dos_type libsrc/atari/getargs.s libsrc/atari/exec.s libsrc/atari/settime.s libsrc/atari/syschdir.s libsrc/atari/dosdetect.s libsrc/atari/is_cmdline_dos.s libsrc/atari/sysrmdir.s libsrc/atari/gettime.s libsrc/atari/lseek.s libsrc/atari/getres.s libsrc/atari/getdefdev.s -__do_oserror libsrc/atari/posixdirent.s libsrc/atari/do_oserr.s libsrc/atari/serref.s libsrc/atari/read.s libsrc/atari/write.s libsrc/atari/close.s -__getcolor libsrc/atari/setcolor.s -__getdefdev libsrc/atari/getdefdev.s -__graphics libsrc/atari/graphics.s -__inviocb libsrc/atari/serref.s libsrc/atari/ser/atrrdev.s libsrc/atari/inviocb.s libsrc/atari/read.s libsrc/atari/write.s libsrc/atari/lseek.s libsrc/atari/close.s -__is_cmdline_dos libsrc/atari/is_cmdline_dos.s libsrc/atari/doesclrscr.s -__rest_vecs libsrc/atari/savevec.s -__rwsetup libsrc/atari/rwcommon.s libsrc/atari/read.s libsrc/atari/write.s -__save_vecs libsrc/atari/savevec.s -__scroll libsrc/atari/scroll.s -__setcolor libsrc/atari/setcolor.s -__setcolor_low libsrc/atari/setcolor.s -__sio_call libsrc/atari/diowritev.s libsrc/atari/diopncls.s libsrc/atari/siocall.s libsrc/atari/diowrite.s libsrc/atari/dioread.s - - -cbm - -__cbm_filetype libsrc/cbm/cbm_filetype.s asminc/cbm_filetype.in -__dirread libsrc/cbm/dir.inc libsrc/cbm/dir.s -__dirread1 libsrc/cbm/dir.inc libsrc/cbm/dir.s - - -lynx - -__iodat libsrc/lynx/lynx-cart.s libsrc/lynx/bootldr.s libsrc/lynx/extzp.s libsrc/lynx/crt0.s libsrc/lynx/extzp.inc -__iodir libsrc/lynx/extzp.s libsrc/lynx/crt0.s libsrc/lynx/extzp.inc -__sprsys libsrc/lynx/tgi/lynx-160-102-16.s libsrc/lynx/extzp.s libsrc/lynx/crt0.s libsrc/lynx/extzp.inc -__viddma libsrc/lynx/tgi/lynx-160-102-16.s libsrc/lynx/extzp.s libsrc/lynx/crt0.s libsrc/lynx/extzp.inc - - -pce - -__nmi libsrc/pce/irq.s libsrc/pce/crt0.s -``` +Some name clashes need to be resolved. Please see the +[detailed list of name clashes](libsrc/NameClashes.md). ## Test suite -* specific tests to check the optimizer (rather than the codegenerator) are needed. -* we need more specific tests to check standard conformance of the library headers +* Specific tests to check the optimizer (rather than the code + generator) are needed. +* We need more specific tests to check standard conformance + of the library headers. diff --git a/libsrc/NameClashes.md b/libsrc/NameClashes.md new file mode 100644 index 000000000..ef2105602 --- /dev/null +++ b/libsrc/NameClashes.md @@ -0,0 +1,380 @@ +List of cc65 library name clashes +================================= + +The following is a list of identifiers that might need +to be fixed, sorted by directory and identifier: + +# common + +## \_\_argc + +* libsrc/runtime/callmain.s +* libsrc/cbm610/mainargs.s +* libsrc/cx16/mainargs.s +* libsrc/plus4/mainargs.s +* libsrc/lynx/mainargs.s +* libsrc/c16/mainargs.s +* libsrc/geos-common/system/mainargs.s +* libsrc/sim6502/mainargs.s +* libsrc/c128/mainargs.s +* libsrc/vic20/mainargs.s +* libsrc/nes/mainargs.s +* libsrc/atari/getargs.s +* libsrc/apple2/mainargs.s +* libsrc/cbm510/mainargs.s +* libsrc/telestrat/mainargs.s +* libsrc/c64/mainargs.s +* libsrc/pet/mainargs.s +* libsrc/atmos/mainargs.s + +## \_\_argv + +* libsrc/runtime/callmain.s +* libsrc/cbm610/mainargs.s +* libsrc/cx16/mainargs.s +* libsrc/plus4/mainargs.s +* libsrc/lynx/mainargs.s +* libsrc/c16/mainargs.s +* libsrc/geos-common/system/mainargs.s +* libsrc/sim6502/mainargs.s +* libsrc/c128/mainargs.s +* libsrc/vic20/mainargs.s +* libsrc/nes/mainargs.s +* libsrc/atari/getargs.s +* libsrc/apple2/mainargs.s +* libsrc/cbm510/mainargs.s +* libsrc/telestrat/mainargs.s +* libsrc/c64/mainargs.s +* libsrc/pet/mainargs.s +* libsrc/atmos/mainargs.s + +## \_\_cos + +* libsrc/common/sincos.s + +## \_\_ctypeidx + +* libsrc/common/ctype.s +* libsrc/common/ctypemask.s +* libsrc/geos-common/system/ctype.s +* libsrc/atari/ctype.s +* libsrc/cbm/ctype.s +* libsrc/atmos/ctype.s +* asminc/ctype\_common.inc + +## \_\_cwd + +* libsrc/common/getcwd.s +* libsrc/common/_cwd.s +* libsrc/atari/initcwd.s +* libsrc/apple2/initcwd.s +* libsrc/apple2/initcwd.s +* libsrc/telestrat/initcwd.s +* libsrc/cbm/initcwd.s + +## \_\_cwd\_buf\_size + +* libsrc/common/_cwd.s + +## \_\_envcount + +* libsrc/common/searchenv.s +* libsrc/common/_environ.s +* libsrc/common/putenv.s +* libsrc/common/getenv.s + +## \_\_environ + +* libsrc/common/searchenv.s +* libsrc/common/_environ.s +* libsrc/common/putenv.s +* libsrc/common/getenv.s + +## \_\_envsize + +* libsrc/common/_environ.s +* libsrc/common/putenv.s + +## \_\_fdesc + +* libsrc/common/_fdesc.s +* libsrc/common/fopen.s + +## \_\_filetab + +* libsrc/common/_fdesc.s +* libsrc/common/_file.s +* asminc/_file.inc + +## \_\_fopen + +* libsrc/common/fopen.s +* libsrc/common/_fopen.s + +## \_\_printf + +* libsrc/common/vsnprintf.s +* libsrc/common/_printf.s +* libsrc/common/vfprintf.s +* libsrc/conio/vcprintf.s +* libsrc/pce/_printf.s + +## \_\_scanf + +* libsrc/common/_scanf.inc +* libsrc/common/vsscanf.s +* libsrc/conio/vcscanf.s + +## \_\_sin + +* libsrc/common/sincos.s + +## \_\_sys + +* libsrc/common/_sys.s +* libsrc/apple2/_sys.s + +## \_\_sys\_oserrlist + +* libsrc/common/stroserr.s +* libsrc/geos-common/system/oserrlist.s +* libsrc/atari/oserrlist.s +* libsrc/apple2/oserrlist.s +* libsrc/cbm/oserrlist.s +* libsrc/atmos/oserrlist.s + +## \_\_syschdir + +* libsrc/common/chdir.s +* libsrc/atari/syschdir.s +* libsrc/apple2/syschdir.s +* libsrc/telestrat/syschdir.s +* libsrc/cbm/syschdir.s + +## \_\_sysmkdir + +* libsrc/common/mkdir.s +* libsrc/atari/sysmkdir.s +* libsrc/apple2/sysmkdir.s +* libsrc/telestrat/sysmkdir.s + +## \_\_sysremove + +* libsrc/common/remove.s +* libsrc/geos-common/file/sysremove.s +* libsrc/atari/sysremove.s +* libsrc/atari/sysrmdir.s +* libsrc/apple2/sysremove.s +* libsrc/apple2/sysrmdir.s +* libsrc/telestrat/sysremove.s +* libsrc/cbm/sysremove.s + +## \_\_sysrename + +* libsrc/common/rename.s +* libsrc/geos-common/file/sysrename.s +* libsrc/atari/sysrename.s +* libsrc/apple2/sysrename.s +* libsrc/cbm/sysrename.s + +## \_\_sysrmdir + +* libsrc/common/rmdir.s +* libsrc/atari/sysrmdir.s +* libsrc/apple2/sysrmdir.s + +\_\_sysuname + +* libsrc/common/uname.s +* libsrc/cbm610/sysuname.s +* libsrc/cx16/sysuname.s +* libsrc/plus4/sysuname.s +* libsrc/lynx/sysuname.s +* libsrc/c16/sysuname.s +* libsrc/geos-common/system/sysuname.s +* libsrc/c128/sysuname.s +* libsrc/creativision/sysuname.s +* libsrc/vic20/sysuname.s +* libsrc/nes/sysuname.s +* libsrc/atari/sysuname.s +* libsrc/apple2/sysuname.s +* libsrc/cbm510/sysuname.s +* libsrc/telestrat/sysuname.s +* libsrc/c64/sysuname.s +* libsrc/pet/sysuname.s +* libsrc/atari5200/sysuname.s +* libsrc/atmos/sysuname.s + +# apple2 + +## \_\_auxtype + +* libsrc/apple2/open.s + +## \_\_datetime + +* libsrc/apple2/open.s + +## \_\_dos\_type + +* libsrc/apple2/dioopen.s +* libsrc/apple2/curdevice.s +* libsrc/apple2/mainargs.s +* libsrc/apple2/settime.s +* libsrc/apple2/getdevice.s +* libsrc/apple2/dosdetect.s +* libsrc/apple2/irq.s +* libsrc/apple2/open.s +* libsrc/apple2/mli.s +* libsrc/apple2/getres.s + +## \_\_filetype + +* libsrc/apple2/open.s +* libsrc/apple2/exehdr.s + +## atari + +## \_\_defdev + +* libsrc/atari/posixdirent.s +* libsrc/atari/ucase\_fn.s +* libsrc/atari/getdefdev.s + +## \_\_dos\_type + +* libsrc/atari/getargs.s +* libsrc/atari/exec.s +* libsrc/atari/settime.s +* libsrc/atari/syschdir.s +* libsrc/atari/dosdetect.s +* libsrc/atari/is\_cmdline\_dos.s +* libsrc/atari/sysrmdir.s +* libsrc/atari/gettime.s +* libsrc/atari/lseek.s +* libsrc/atari/getres.s +* libsrc/atari/getdefdev.s + +## \_\_do\_oserror + +* libsrc/atari/posixdirent.s +* libsrc/atari/do\_oserr.s +* libsrc/atari/serref.s +* libsrc/atari/read.s +* libsrc/atari/write.s +* libsrc/atari/close.s + +## \_\_getcolor + +* libsrc/atari/setcolor.s + +## \_\_getdefdev + +* libsrc/atari/getdefdev.s + +## \_\_graphics + +* libsrc/atari/graphics.s + +## \_\_inviocb + +* libsrc/atari/serref.s +* libsrc/atari/ser/atrrdev.s +* libsrc/atari/inviocb.s +* libsrc/atari/read.s +* libsrc/atari/write.s +* libsrc/atari/lseek.s +* libsrc/atari/close.s + +## \_\_is\_cmdline\_dos + +* libsrc/atari/is\_cmdline\_dos.s +* libsrc/atari/doesclrscr.s + +## \_\_rest\_vecs + +* libsrc/atari/savevec.s + +## \_\_rwsetup + +* libsrc/atari/rwcommon.s +* libsrc/atari/read.s +* libsrc/atari/write.s + +## \_\_save\_vecs + +* libsrc/atari/savevec.s + +## \_\_scroll + +* libsrc/atari/scroll.s + +## \_\_setcolor + +* libsrc/atari/setcolor.s + +## \_\_setcolor\_low + +* libsrc/atari/setcolor.s + +## \_\_sio\_call + +* libsrc/atari/diowritev.s +* libsrc/atari/diopncls.s +* libsrc/atari/siocall.s +* libsrc/atari/diowrite.s +* libsrc/atari/dioread.s + +# cbm + +## \_\_cbm\_filetype + +* libsrc/cbm/cbm\_filetype.s +* asminc/cbm\_filetype.in + +## \_\_dirread + +* libsrc/cbm/dir.inc +* libsrc/cbm/dir.s + +## \_\_dirread1 + +* libsrc/cbm/dir.inc +* libsrc/cbm/dir.s + +# lynx + +## \_\_iodat + +* libsrc/lynx/lynx-cart.s +* libsrc/lynx/bootldr.s +* libsrc/lynx/extzp.s +* libsrc/lynx/crt0.s +* libsrc/lynx/extzp.inc + +## \_\_iodir + +* libsrc/lynx/extzp.s +* libsrc/lynx/crt0.s +* libsrc/lynx/extzp.inc + +## \_\_sprsys + +* libsrc/lynx/tgi/lynx-160-102-16.s +* libsrc/lynx/extzp.s +* libsrc/lynx/crt0.s +* libsrc/lynx/extzp.inc + +## \_\_viddma + +* libsrc/lynx/tgi/lynx-160-102-16.s +* libsrc/lynx/extzp.s +* libsrc/lynx/crt0.s +* libsrc/lynx/extzp.inc + +# pce + +## \_\_nmi + +* libsrc/pce/irq.s +* libsrc/pce/crt0.s From d5fecbf10b4711bf5ea15c5431fbc1e3bfcef115 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Thu, 18 Jul 2024 11:24:36 +0200 Subject: [PATCH 2476/2710] Add project origin and people and table of supported targets. Vital information that shouldn't require following links. --- README.md | 88 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 66 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index dce9a07bc..b9d81c35b 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,62 @@ -# About cc65 +The cc65 cross-compiler suite +============================= -cc65 is a complete cross development package for 65(C)02 systems, including -a powerful macro assembler, a C compiler, linker, archiver and several -other tools. cc65 has C and runtime library support for many of the old 6502 machines. -For details look at the [Website](https://cc65.github.io). +cc65 is a complete cross-development package for 65(C)02 systems, +including a powerful macro assembler, a C compiler, linker, archiver, +simulator and several other tools. cc65 has C and runtime library +support for many of the old 6502 machines. For details look at +the [cc65 web site](https://cc65.github.io): + +| Company / People | Machine / Environment | +|-------------------------|-------------------------------------| +| Apple | Apple II | +| | Apple IIe | +| Atari | Atari 400/800 | +| | Atari 2600 | +| | Atari 5200 | +| | Atari 7800 | +| | Atari XL | +| | Lynx | +| Oric | Atmos | +| | Telestrat | +| Acorn | BBC series | +| Commodore | C128 | +| | C16 | +| | C64 | +| | CBM 510/610 | +| | PET | +| | Plus/4 | +| | VIC-20 | +| VTech | CreatiVision | +| Commander X16 Community | Commander X16 | +| Bit Corporation | Gamate | +| Berkeley Softworks | GEOS (Apple/CBM) | +| LUnix Team | LUnix (C64) | +| Nintendo | Nintendo Entertainment System (NES) | +| Ohio Scientific | OSI C1P | +| MOS Technology, Inc. | KIM-1 | +| NEC | PC Engine (PCE) | +| Dr. Jozo Dujmović | Picocomputer (RP6502) | +| Watara | Watura/QuickShot Supervision | +| Synertek | SYM-1 | + +A generic configuration to adapt cc65 to new targets is also around. ## People -Project founders: +cc65 is originally based on the "Small C" compiler by Ron Cain and +enhanced by James E. Hendrix. -* John R. Dunning: [original implementation](https://public.websites.umich.edu/~archive/atari/8bit/Languages/Cc65/) of the C compiler and runtime library, Atari hosted +### Project founders + +* John R. Dunning: [original implementation](https://public.websites.umich.edu/~archive/atari/8bit/Languages/Cc65/) + of the C compiler and runtime library, Atari hosted. * Ullrich von Bassewitz: - * move the code to modern systems - * rewrite most parts of the compiler - * complete rewrite of the runtime library + * moved Dunning's code to modern systems, + * rewrote most parts of the compiler, + * rewrote all of the runtime library. -Core team members: +### Core team members * [Christian Groessler](https://github.com/groessler): Atari, Atari5200, and CreatiVision library Maintainer * [dqh](https://github.com/dqh-au): GHA help @@ -23,7 +64,7 @@ Core team members: * [groepaz](https://github.com/mrdudz): CBM library, Project Maintainer * [Oliver Schmidt](https://github.com/oliverschmidt): Apple II library Maintainer -External contributors: +### External contributors * [acqn](https://github.com/acqn): various compiler fixes * [jedeoric](https://github.com/jedeoric): Telestrat target @@ -36,28 +77,31 @@ External contributors: *(The above list is incomplete, if you feel left out - please speak up or add yourself in a PR)* -For a complete list look at the [full team list](https://github.com/orgs/cc65/teams) or the list of [all contributors](https://github.com/cc65/cc65/graphs/contributors) +For a complete list look at the [full team list](https://github.com/orgs/cc65/teams) +or the list of [all contributors](https://github.com/cc65/cc65/graphs/contributors). # Contact -For general discussion, questions, etc subscribe to the [mailing list](https://cc65.github.io/mailing-lists.html) or use the [github discussions](https://github.com/cc65/cc65/discussions). +For general discussion, questions, etc subscribe to the +[mailing list](https://cc65.github.io/mailing-lists.html) +or use the [github discussions](https://github.com/cc65/cc65/discussions). -Some of us may also be around on IRC [#cc65](https://web.libera.chat/#cc65) on libera.chat +Some of us may also be around on IRC [#cc65](https://web.libera.chat/#cc65) on libera.chat. # Documentation -* The main [Documentation](https://cc65.github.io/doc) for users and developers - -* Info on [Contributing](Contributing.md) to the CC65 project. Please read this before working on something you want to contribute, and before reporting bugs. - -* The [Wiki](https://github.com/cc65/wiki/wiki) contains some extra info that does not fit into the regular documentation. +* The main [Documentation](https://cc65.github.io/doc) for users and + developers. +* Info on [Contributing](Contributing.md) to the CC65 project. Please + read this before working on something you want to contribute, and + before reporting bugs. +* The [Wiki](https://github.com/cc65/wiki/wiki) contains some extra info + that does not fit into the regular documentation. # Downloads * [Windows 64bit Snapshot](https://sourceforge.net/projects/cc65/files/cc65-snapshot-win64.zip) - * [Windows 32bit Snapshot](https://sourceforge.net/projects/cc65/files/cc65-snapshot-win32.zip) - * [Linux Snapshot DEB and RPM](https://software.opensuse.org/download.html?project=home%3Astrik&package=cc65) [![Snapshot Build](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml/badge.svg?branch=master)](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml) From 19899022afaa817185d8aa4bbb349a8609706a66 Mon Sep 17 00:00:00 2001 From: karri <karri@sipo.fi> Date: Sat, 20 Jul 2024 13:14:22 +0300 Subject: [PATCH 2477/2710] Add support for different joysticks --- libsrc/atari7800/joy/atari7800-stdjoy.s | 103 ++++++++++++++++-------- 1 file changed, 69 insertions(+), 34 deletions(-) diff --git a/libsrc/atari7800/joy/atari7800-stdjoy.s b/libsrc/atari7800/joy/atari7800-stdjoy.s index 59f656ada..c24e87e29 100644 --- a/libsrc/atari7800/joy/atari7800-stdjoy.s +++ b/libsrc/atari7800/joy/atari7800-stdjoy.s @@ -53,13 +53,20 @@ JOY_COUNT = 2 ; Number of joysticks we support ; Must return an JOY_ERR_xx code in a/x. ; +PB2 = $04 ; Joystick 0 +PB4 = $10 ; Joystick 1 + INSTALL: ; Assume 7800 2-button controller, can change ; to 2600 1-button later - lda #$14 - sta CTLSWB ; enable 2-button 7800 controller 1: set pin 6 to output + lda #(PB2 | PB4) + ; enable 2-button 7800 controllers on both ports + ; by setting PB2 and PB4 to output + sta CTLSWB + ; enable 2-button 7800 controllers by setting + ; the outputs to 0; (INPT4 and INPT5) high ldy #$00 - sty SWCHB ; enable 2-button 7800 controller 2: pull pin 6 (INPT4) high + sty SWCHB reset: lda #JOY_ERR_OK @@ -88,6 +95,28 @@ COUNT: ; ------------------------------------------------------------------------ ; READ: Read a particular joystick passed in A for 2 fire buttons. +readdualbuttons0: + ldy #0 ; ........ + bit INPT0 ; Check for right button + bpl L1 + ldy #2 ; ......2. +L1: bit INPT1 ; Check for left button + bpl L2 + iny ; ......21 +L2: tya + rts + +readdualbuttons1: + ldy #0 ; ........ + bit INPT2 ; Check for right button + bpl L1 + ldy #2 ; ......2. +L3: bit INPT3 ; Check for left button + bpl L2 + iny ; ......21 +L4: tya + rts + readbuttons: ; Y has joystick of interest 0/1 ; return value: @@ -97,42 +126,48 @@ readbuttons: ; $03: both buttons ; preserves X tya - beq L5 + beq readbuttons0 +readbuttons1: ; Joystick 1 processing - ; 7800 joystick 1 buttons - ldy #0 ; ........ - bit INPT2 ; Check for right button - bpl L1 - ldy #2 ; ......2. -L1: bit INPT3 ;Check for left button - bpl L2 - iny ; ......21 -L2: tya - bne L4 ; 7800 mode joystick worked - ; 2600 Joystick 1 + ; Start by checking for single button 2600 joystick bit INPT5 - bmi L4 -L3: iny ; .......1 - lda #0 ; Fallback to 2600 joystick mode - sta CTLSWB -L4: tya ; ......21 + bpl singlebtn1detected + jmp readdualbuttons1 +singlebtn1detected: + ; Single button joystick detected but could be dual + jsr readdualbuttons1 + bne L5 ; It was a dual button press + ; It was a single button press + bit INPT5 + bmi L5 + iny ; .......1 + lda #PB4 ; Joystick 1 is a single button unit + clc + adc SWCHB + sta SWCHB ; Cut power from the dual button circuit +L5: tya ; ......21 rts -L5: ; Joystick 0 processing - ; 7800 joystick 0 buttons - ldy #0 ; ........ - bit INPT0 ; Check for right button - bpl L6 - ldy #2 ; ......2. -L6: bit INPT1 ;Check for left button - bpl L7 - iny ; ......21 -L7: tya - bne L4 ; 7800 mode joystick worked - ; 2600 Joystick 0 +readbuttons0: + ; Joystick 0 processing + ; Start by checking for single button 2600 joystick bit INPT4 - bmi L4 - bpl L3 + bpl singlebtn0detected + jmp readdualbuttons0 +singlebtn0detected: + ; Single button joystick detected but could be dual + jsr readdualbuttons0 + bne L6 ; It was a dual button press + ; It was a single button press + bit INPT4 + bmi L6 + iny ; .......1 + lda #PB2 ; Joystick 0 is a single button unit + clc + adc SWCHB + sta SWCHB ; Cut power from the dual button circuit +L6: tya ; ......21 + rts READ: tay ; Store joystick 0/1 in Y From 8a1e060b137d0121f1be89ea7a79b0389f7ab123 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Mon, 22 Jul 2024 23:51:16 +0200 Subject: [PATCH 2478/2710] Fix function comment example. Must be on its own line. --- Contributing.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Contributing.md b/Contributing.md index 2ea50a183..5b53e0467 100644 --- a/Contributing.md +++ b/Contributing.md @@ -156,7 +156,8 @@ supports). The exceptions are: this: ~~~C -int foo(int bar) /* Add 1 to bar, takes bar and returns the result */ +int foo(int bar) +/* Add 1 to bar, takes bar and returns the result */ { return bar + 1; } From feb50268236efd2bf563352aa98e1eaa8b978eb9 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Wed, 7 Aug 2024 18:27:09 +0200 Subject: [PATCH 2479/2710] Added option to disable the force-to-uppercase behavior of the apple2 target. (#2474) * Added option to disable the force-to-uppercase behavior of the apple2 target. * Fixed dangling spaces. --- doc/apple2.sgml | 1 + doc/funcref.sgml | 1 + include/apple2.h | 10 ++++++++++ libsrc/apple2/allow_lowercase.s | 23 +++++++++++++++++++++++ libsrc/apple2/cputc.s | 5 ++++- libsrc/apple2/uppercasemask.s | 9 +++++++++ libsrc/apple2/write.s | 5 ++++- 7 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 libsrc/apple2/allow_lowercase.s create mode 100644 libsrc/apple2/uppercasemask.s diff --git a/doc/apple2.sgml b/doc/apple2.sgml index 99ff8139e..c0255c4f7 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -330,6 +330,7 @@ usage. <item>_dos_type <item>_filetype <item>_datetime +<item>allow_lowercase <item>beep <item>get_ostype <item>gmtime_dt diff --git a/doc/funcref.sgml b/doc/funcref.sgml index a0a6d7ca8..130646538 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -95,6 +95,7 @@ function. <itemize> <item>_dos_type +<item>allow_lowercase <item><ref id="beep" name="beep"> <item><ref id="get_ostype" name="get_ostype"> <item><ref id="gmtime_dt" name="gmtime_dt"> diff --git a/include/apple2.h b/include/apple2.h index 875c10661..1a840be6e 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -232,6 +232,16 @@ struct tm* __fastcall__ gmtime_dt (const struct datetime* dt); time_t __fastcall__ mktime_dt (const struct datetime* dt); /* Converts a ProDOS date/time structure to a time_t UNIX timestamp */ +#if !defined(__APPLE2ENH__) +unsigned char __fastcall__ allow_lowercase (unsigned char onoff); +/* If onoff is 0, lowercase characters printed to the screen via STDIO and +** CONIO are forced to uppercase. If onoff is 1, lowercase characters are +** printed to the screen untouched. By default lowercase characters are +** forced to uppercase because a stock Apple ][+ doesn't support lowercase +** display. The function returns the old lowercase setting. +*/ +#endif + /* End of apple2.h */ diff --git a/libsrc/apple2/allow_lowercase.s b/libsrc/apple2/allow_lowercase.s new file mode 100644 index 000000000..648276b4c --- /dev/null +++ b/libsrc/apple2/allow_lowercase.s @@ -0,0 +1,23 @@ +; +; Oliver Schmidt, 2024-08-06 +; +; unsigned char __fastcall__ allow_lowercase (unsigned char onoff); +; + + .export _allow_lowercase + .import uppercasemask, return0, return1 + +_allow_lowercase: + tax + lda values,x + ldx uppercasemask + sta uppercasemask + cpx #$FF + beq :+ + jmp return0 +: jmp return1 + + .rodata + +values: .byte $DF ; Force uppercase + .byte $FF ; Keep lowercase diff --git a/libsrc/apple2/cputc.s b/libsrc/apple2/cputc.s index 035b1c047..0a27abacd 100644 --- a/libsrc/apple2/cputc.s +++ b/libsrc/apple2/cputc.s @@ -11,6 +11,9 @@ .export _cputcxy, _cputc .export cputdirect, newline, putchar, putchardirect .import gotoxy, VTABZ + .ifndef __APPLE2ENH__ + .import uppercasemask + .endif .include "apple2.inc" @@ -43,7 +46,7 @@ _cputc: .ifndef __APPLE2ENH__ cmp #$E0 ; Test for lowercase bcc cputdirect - and #$DF ; Convert to uppercase + and uppercasemask .endif cputdirect: diff --git a/libsrc/apple2/uppercasemask.s b/libsrc/apple2/uppercasemask.s new file mode 100644 index 000000000..8b993bb1e --- /dev/null +++ b/libsrc/apple2/uppercasemask.s @@ -0,0 +1,9 @@ +; +; Oliver Schmidt, 2024-08-06 +; + + .export uppercasemask + + .data + +uppercasemask: .byte $DF ; Convert to uppercase diff --git a/libsrc/apple2/write.s b/libsrc/apple2/write.s index 7b50d0705..5fb51cca6 100644 --- a/libsrc/apple2/write.s +++ b/libsrc/apple2/write.s @@ -7,6 +7,9 @@ .export _write .import rwprolog, rwcommon, rwepilog .import COUT + .ifndef __APPLE2ENH__ + .import uppercasemask + .endif .include "zeropage.inc" .include "errno.inc" @@ -84,7 +87,7 @@ next: lda (ptr1),y .ifndef __APPLE2ENH__ cmp #$E0 ; Test for lowercase bcc output - and #$DF ; Convert to uppercase + and uppercasemask .endif output: jsr COUT ; Preserves X and Y From 0126b34d209d11e58a381346409e9cd4540d55f2 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Sat, 10 Aug 2024 14:53:29 +0200 Subject: [PATCH 2480/2710] Fixed README.md Oric was not a company. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b9d81c35b..755a0d60d 100644 --- a/README.md +++ b/README.md @@ -10,14 +10,14 @@ the [cc65 web site](https://cc65.github.io): | Company / People | Machine / Environment | |-------------------------|-------------------------------------| | Apple | Apple II | -| | Apple IIe | +| | Apple IIe enhanced | | Atari | Atari 400/800 | | | Atari 2600 | | | Atari 5200 | | | Atari 7800 | | | Atari XL | | | Lynx | -| Oric | Atmos | +| Tangerine | Atmos | | | Telestrat | | Acorn | BBC series | | Commodore | C128 | From bf2b5224786df9294fbb632b863240650870ae9a Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Sat, 10 Aug 2024 15:12:34 +0200 Subject: [PATCH 2481/2710] Added company name and warning --- doc/atmos.sgml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/atmos.sgml b/doc/atmos.sgml index cef7770e4..e330d9517 100644 --- a/doc/atmos.sgml +++ b/doc/atmos.sgml @@ -1,15 +1,15 @@ <!doctype linuxdoc system> <article> -<title>Oric Atmos-specific information for cc65 +<title>Tangerine Oric Atmos-specific information for cc65 <author> <url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">,<newline> -<url url="mailto:polluks@sdf.lonestar.org" name="Stefan A. Haubenthal">,<newline> +<url url="mailto:polluks@sdf.org" name="Stefan A. Haubenthal">,<newline> <url url="mailto:greg.king5@verizon.net" name="Greg King"> <abstract> -An overview over the Atmos runtime system as it is implemented for the cc65 C -compiler. +An overview over the Oric Atmos runtime system as it is implemented for the cc65 +C compiler. This target is not Oric-1 compatible. </abstract> <!-- Table of contents --> From 86611f1c9cc899db784ed508339dce58a901fbb3 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Sat, 10 Aug 2024 15:29:50 +0200 Subject: [PATCH 2482/2710] Some clarification --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 755a0d60d..e3f1ab30f 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,8 @@ the [cc65 web site](https://cc65.github.io): | | Atari 7800 | | | Atari XL | | | Lynx | -| Tangerine | Atmos | -| | Telestrat | +| Tangerine | Oric Atmos | +| Eureka | Oric Telestrat | | Acorn | BBC series | | Commodore | C128 | | | C16 | From 3f618d7de96ce32e41544d8a1e7e67f010168cf9 Mon Sep 17 00:00:00 2001 From: Sven Michael Klose <pixel@hugbox.org> Date: Sun, 18 Aug 2024 21:57:06 +0200 Subject: [PATCH 2483/2710] Add Plus/4 wrapper for KERNAL's GETIN. --- libsrc/plus4/kgetin.s | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 libsrc/plus4/kgetin.s diff --git a/libsrc/plus4/kgetin.s b/libsrc/plus4/kgetin.s new file mode 100644 index 000000000..14919f750 --- /dev/null +++ b/libsrc/plus4/kgetin.s @@ -0,0 +1,14 @@ +.export GETIN + +.include "plus4.inc" + +KERNAL_GETIN := $FFE4 + +.segment "LOWCODE" ; Stay out of ROM area. + +.proc GETIN + sta ENABLE_ROM + jsr KERNAL_GETIN + sta ENABLE_RAM + rts +.endproc From 622793e343b6241c00f5a13ce7b74a3a2f93b544 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sat, 24 Aug 2024 17:03:27 +0200 Subject: [PATCH 2484/2710] Apple II: Move _exit out of STARTUP segment --- libsrc/apple2/callmain.s | 75 ++++++++++++++++++++++++++++++++++++++++ libsrc/apple2/crt0.s | 44 +++-------------------- 2 files changed, 79 insertions(+), 40 deletions(-) create mode 100644 libsrc/apple2/callmain.s diff --git a/libsrc/apple2/callmain.s b/libsrc/apple2/callmain.s new file mode 100644 index 000000000..71a8b5611 --- /dev/null +++ b/libsrc/apple2/callmain.s @@ -0,0 +1,75 @@ +; +; Ullrich von Bassewitz, 2003-03-07 +; +; Push arguments and call main() +; + + + .export callmain, _exit + .export __argc, __argv + + .import _main, pushax, done, donelib + .import zpsave, rvsave, reset + + .include "zeropage.inc" + .include "apple2.inc" + + +;--------------------------------------------------------------------------- +; Setup the stack for main(), then jump to it + +callmain: + lda __argc + ldx __argc+1 + jsr pushax ; Push argc + + lda __argv + ldx __argv+1 + jsr pushax ; Push argv + + ldy #4 ; Argument size + jsr _main + + ; Avoid a re-entrance of donelib. This is also the exit() entry. +_exit: ldx #<exit + lda #>exit + jsr reset ; Setup RESET vector + + ; Switch in LC bank 2 for R/O in case it was switched out by a RESET. + bit $C080 + + ; Call the module destructors. + jsr donelib + + ; Switch in ROM. + bit $C082 + + ; Restore the original RESET vector. +exit: ldx #$02 +: lda rvsave,x + sta SOFTEV,x + dex + bpl :- + + ; Copy back the zero-page stuff. + ldx #zpspace-1 +: lda zpsave,x + sta sp,x + dex + bpl :- + + ; ProDOS TechRefMan, chapter 5.2.1: + ; "System programs should set the stack pointer to $FF at the + ; warm-start entry point." + ldx #$FF + txs ; Re-init stack pointer + + ; We're done + jmp done + +;--------------------------------------------------------------------------- +; Data + +.data +__argc: .word 0 +__argv: .addr 0 diff --git a/libsrc/apple2/crt0.s b/libsrc/apple2/crt0.s index c129cdbf8..42e26c27b 100644 --- a/libsrc/apple2/crt0.s +++ b/libsrc/apple2/crt0.s @@ -4,10 +4,11 @@ ; Startup code for cc65 (Apple2 version) ; - .export _exit, done, return + .export done, return + .export zpsave, rvsave, reset .export __STARTUP__ : absolute = 1 ; Mark as startup - .import initlib, donelib + .import initlib, _exit .import zerobss, callmain .import __ONCE_LOAD__, __ONCE_SIZE__ ; Linker generated .import __LC_START__, __LC_LAST__ ; Linker generated @@ -33,44 +34,7 @@ jsr zerobss ; Push the command-line arguments; and, call main(). - jsr callmain - - ; Avoid a re-entrance of donelib. This is also the exit() entry. -_exit: ldx #<exit - lda #>exit - jsr reset ; Setup RESET vector - - ; Switch in LC bank 2 for R/O in case it was switched out by a RESET. - bit $C080 - - ; Call the module destructors. - jsr donelib - - ; Switch in ROM. - bit $C082 - - ; Restore the original RESET vector. -exit: ldx #$02 -: lda rvsave,x - sta SOFTEV,x - dex - bpl :- - - ; Copy back the zero-page stuff. - ldx #zpspace-1 -: lda zpsave,x - sta sp,x - dex - bpl :- - - ; ProDOS TechRefMan, chapter 5.2.1: - ; "System programs should set the stack pointer to $FF at the - ; warm-start entry point." - ldx #$FF - txs ; Re-init stack pointer - - ; We're done - jmp done + jmp callmain ; ------------------------------------------------------------------------ From 58b1c219965754f9a9367d1e75637d54998c8365 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 1 Sep 2024 10:22:40 +0200 Subject: [PATCH 2485/2710] Removed #pragma names that have been obsolete for over a decade. --- src/cc65/pragma.c | 44 -------------------------------------------- 1 file changed, 44 deletions(-) diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index b9394494b..31cfe3b73 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -68,28 +68,20 @@ typedef enum { PRAGMA_ALIGN, PRAGMA_ALLOW_EAGER_INLINE, PRAGMA_BSS_NAME, - PRAGMA_BSSSEG, /* obsolete */ PRAGMA_CHARMAP, PRAGMA_CHECK_STACK, - PRAGMA_CHECKSTACK, /* obsolete */ PRAGMA_CODE_NAME, - PRAGMA_CODESEG, /* obsolete */ PRAGMA_CODESIZE, PRAGMA_DATA_NAME, - PRAGMA_DATASEG, /* obsolete */ PRAGMA_INLINE_STDFUNCS, PRAGMA_LOCAL_STRINGS, PRAGMA_MESSAGE, PRAGMA_OPTIMIZE, PRAGMA_REGISTER_VARS, PRAGMA_REGVARADDR, - PRAGMA_REGVARS, /* obsolete */ PRAGMA_RODATA_NAME, - PRAGMA_RODATASEG, /* obsolete */ PRAGMA_SIGNED_CHARS, - PRAGMA_SIGNEDCHARS, /* obsolete */ PRAGMA_STATIC_LOCALS, - PRAGMA_STATICLOCALS, /* obsolete */ PRAGMA_WARN, PRAGMA_WRAPPED_CALL, PRAGMA_WRITABLE_STRINGS, @@ -105,28 +97,20 @@ static const struct Pragma { { "align", PRAGMA_ALIGN }, { "allow-eager-inline", PRAGMA_ALLOW_EAGER_INLINE }, { "bss-name", PRAGMA_BSS_NAME }, - { "bssseg", PRAGMA_BSSSEG }, /* obsolete */ { "charmap", PRAGMA_CHARMAP }, { "check-stack", PRAGMA_CHECK_STACK }, - { "checkstack", PRAGMA_CHECKSTACK }, /* obsolete */ { "code-name", PRAGMA_CODE_NAME }, - { "codeseg", PRAGMA_CODESEG }, /* obsolete */ { "codesize", PRAGMA_CODESIZE }, { "data-name", PRAGMA_DATA_NAME }, - { "dataseg", PRAGMA_DATASEG }, /* obsolete */ { "inline-stdfuncs", PRAGMA_INLINE_STDFUNCS }, { "local-strings", PRAGMA_LOCAL_STRINGS }, { "message", PRAGMA_MESSAGE }, { "optimize", PRAGMA_OPTIMIZE }, { "register-vars", PRAGMA_REGISTER_VARS }, { "regvaraddr", PRAGMA_REGVARADDR }, - { "regvars", PRAGMA_REGVARS }, /* obsolete */ { "rodata-name", PRAGMA_RODATA_NAME }, - { "rodataseg", PRAGMA_RODATASEG }, /* obsolete */ { "signed-chars", PRAGMA_SIGNED_CHARS }, - { "signedchars", PRAGMA_SIGNEDCHARS }, /* obsolete */ { "static-locals", PRAGMA_STATIC_LOCALS }, - { "staticlocals", PRAGMA_STATICLOCALS }, /* obsolete */ { "warn", PRAGMA_WARN }, { "wrapped-call", PRAGMA_WRAPPED_CALL }, { "writable-strings", PRAGMA_WRITABLE_STRINGS }, @@ -402,22 +386,18 @@ static void ApplySegNamePragma (pragma_t Token, int PushPop, const char* Name, u switch (Token) { case PRAGMA_CODE_NAME: - case PRAGMA_CODESEG: Seg = SEG_CODE; break; case PRAGMA_RODATA_NAME: - case PRAGMA_RODATASEG: Seg = SEG_RODATA; break; case PRAGMA_DATA_NAME: - case PRAGMA_DATASEG: Seg = SEG_DATA; break; case PRAGMA_BSS_NAME: - case PRAGMA_BSSSEG: Seg = SEG_BSS; break; @@ -933,9 +913,6 @@ static void ParsePragmaString (void) FlagPragma (PES_STMT, Pragma, &B, &EagerlyInlineFuncs); break; - case PRAGMA_BSSSEG: - Warning ("#pragma bssseg is obsolete, please use #pragma bss-name instead"); - /* FALLTHROUGH */ case PRAGMA_BSS_NAME: /* TODO: PES_STMT or even PES_EXPR (PES_DECL) maybe? */ SegNamePragma (PES_FUNC, PRAGMA_BSS_NAME, &B); @@ -945,17 +922,11 @@ static void ParsePragmaString (void) CharMapPragma (PES_IMM, &B); break; - case PRAGMA_CHECKSTACK: - Warning ("#pragma checkstack is obsolete, please use #pragma check-stack instead"); - /* FALLTHROUGH */ case PRAGMA_CHECK_STACK: /* TODO: PES_SCOPE maybe? */ FlagPragma (PES_FUNC, Pragma, &B, &CheckStack); break; - case PRAGMA_CODESEG: - Warning ("#pragma codeseg is obsolete, please use #pragma code-name instead"); - /* FALLTHROUGH */ case PRAGMA_CODE_NAME: /* PES_FUNC is the only sensible option so far */ SegNamePragma (PES_FUNC, PRAGMA_CODE_NAME, &B); @@ -966,9 +937,6 @@ static void ParsePragmaString (void) IntPragma (PES_STMT, Pragma, &B, &CodeSizeFactor, 10, 1000); break; - case PRAGMA_DATASEG: - Warning ("#pragma dataseg is obsolete, please use #pragma data-name instead"); - /* FALLTHROUGH */ case PRAGMA_DATA_NAME: /* TODO: PES_STMT or even PES_EXPR (PES_DECL) maybe? */ SegNamePragma (PES_FUNC, PRAGMA_DATA_NAME, &B); @@ -999,33 +967,21 @@ static void ParsePragmaString (void) FlagPragma (PES_FUNC, Pragma, &B, &AllowRegVarAddr); break; - case PRAGMA_REGVARS: - Warning ("#pragma regvars is obsolete, please use #pragma register-vars instead"); - /* FALLTHROUGH */ case PRAGMA_REGISTER_VARS: /* TODO: PES_STMT or even PES_EXPR (PES_DECL) maybe? */ FlagPragma (PES_FUNC, Pragma, &B, &EnableRegVars); break; - case PRAGMA_RODATASEG: - Warning ("#pragma rodataseg is obsolete, please use #pragma rodata-name instead"); - /* FALLTHROUGH */ case PRAGMA_RODATA_NAME: /* TODO: PES_STMT or even PES_EXPR maybe? */ SegNamePragma (PES_FUNC, PRAGMA_RODATA_NAME, &B); break; - case PRAGMA_SIGNEDCHARS: - Warning ("#pragma signedchars is obsolete, please use #pragma signed-chars instead"); - /* FALLTHROUGH */ case PRAGMA_SIGNED_CHARS: /* TODO: PES_STMT or even PES_EXPR maybe? */ FlagPragma (PES_FUNC, Pragma, &B, &SignedChars); break; - case PRAGMA_STATICLOCALS: - Warning ("#pragma staticlocals is obsolete, please use #pragma static-locals instead"); - /* FALLTHROUGH */ case PRAGMA_STATIC_LOCALS: /* TODO: PES_STMT or even PES_EXPR (PES_DECL) maybe? */ FlagPragma (PES_FUNC, Pragma, &B, &StaticLocals); From ba263d13a7c7e99b07e080e68184bc6df17a7146 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 1 Sep 2024 10:22:57 +0200 Subject: [PATCH 2486/2710] Allow alternative #pragma names using underscores. --- src/cc65/pragma.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index 31cfe3b73..ee71b42d8 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -86,36 +86,49 @@ typedef enum { PRAGMA_WRAPPED_CALL, PRAGMA_WRITABLE_STRINGS, PRAGMA_ZPSYM, - PRAGMA_COUNT } pragma_t; /* Pragma table */ static const struct Pragma { const char* Key; /* Keyword */ pragma_t Tok; /* Token */ -} Pragmas[PRAGMA_COUNT] = { +} Pragmas[] = { { "align", PRAGMA_ALIGN }, { "allow-eager-inline", PRAGMA_ALLOW_EAGER_INLINE }, + { "allow_eager_inline", PRAGMA_ALLOW_EAGER_INLINE }, { "bss-name", PRAGMA_BSS_NAME }, + { "bss_name", PRAGMA_BSS_NAME }, { "charmap", PRAGMA_CHARMAP }, { "check-stack", PRAGMA_CHECK_STACK }, + { "check_stack", PRAGMA_CHECK_STACK }, { "code-name", PRAGMA_CODE_NAME }, + { "code_name", PRAGMA_CODE_NAME }, { "codesize", PRAGMA_CODESIZE }, { "data-name", PRAGMA_DATA_NAME }, + { "data_name", PRAGMA_DATA_NAME }, { "inline-stdfuncs", PRAGMA_INLINE_STDFUNCS }, + { "inline_stdfuncs", PRAGMA_INLINE_STDFUNCS }, { "local-strings", PRAGMA_LOCAL_STRINGS }, + { "local_strings", PRAGMA_LOCAL_STRINGS }, { "message", PRAGMA_MESSAGE }, { "optimize", PRAGMA_OPTIMIZE }, { "register-vars", PRAGMA_REGISTER_VARS }, + { "register_vars", PRAGMA_REGISTER_VARS }, { "regvaraddr", PRAGMA_REGVARADDR }, { "rodata-name", PRAGMA_RODATA_NAME }, + { "rodata_name", PRAGMA_RODATA_NAME }, { "signed-chars", PRAGMA_SIGNED_CHARS }, + { "signed_chars", PRAGMA_SIGNED_CHARS }, { "static-locals", PRAGMA_STATIC_LOCALS }, + { "static_locals", PRAGMA_STATIC_LOCALS }, { "warn", PRAGMA_WARN }, { "wrapped-call", PRAGMA_WRAPPED_CALL }, + { "wrapped_call", PRAGMA_WRAPPED_CALL }, { "writable-strings", PRAGMA_WRITABLE_STRINGS }, + { "writable_strings", PRAGMA_WRITABLE_STRINGS }, { "zpsym", PRAGMA_ZPSYM }, }; +#define PRAGMA_COUNT (sizeof (Pragmas) / sizeof (Pragmas[0])) /* Result of ParsePushPop */ typedef enum { From 4008ec581423d5e17ac5e35ca9ee307f79f20a49 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 1 Sep 2024 10:23:10 +0200 Subject: [PATCH 2487/2710] Document the new #pragma names. --- doc/cc65.sgml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index efe48b61b..2219ccf6a 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1273,6 +1273,12 @@ If the first parameter is <tt/push/, the old value is saved onto a stack before changing it. The value may later be restored by using the <tt/pop/ parameter with the <tt/#pragma/. +For all pragma names that contain hyphens, the same name using underlines +instead of the hyphens is available as an alternative. While the former +resembles the corresponding command line option and is more orthogonal, the +latter may be more compatible with external tools that rewrite the token +sequences of the input. + <sect1><tt>#pragma allow-eager-inline ([push,] on|off)</tt><label id="pragma-allow-eager-inline"><p> From e40058257eb3798ea46a47957d95d87e7e78721c Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 1 Sep 2024 10:23:29 +0200 Subject: [PATCH 2488/2710] Added a test for the available #pragmas. --- test/val/pragmas.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 test/val/pragmas.c diff --git a/test/val/pragmas.c b/test/val/pragmas.c new file mode 100644 index 000000000..802c7a5c3 --- /dev/null +++ b/test/val/pragmas.c @@ -0,0 +1,44 @@ +/* Note: This tests just if the #pragmas are understood. It doesn't test if +** they do really work. This would require much more work. +*/ + +void func(void); +#pragma align(push, 1024) +#pragma allow-eager-inline(push, on) +#pragma allow_eager_inline(pop) +#pragma bss-name(push, "BSS") +#pragma bss_name(pop) +#pragma charmap(1, 1) +#pragma check-stack(on) +#pragma check_stack(off) +#pragma code-name(push, "CODE") +#pragma code_name("CODE") +#pragma codesize(200) +#pragma data-name("DATA") +#pragma data_name("DATA") +#pragma inline-stdfuncs(off) +#pragma inline_stdfuncs(on) +#pragma local-strings(off) +#pragma local_strings(off) +#pragma message("in a bottle") +#pragma optimize(off) +#pragma register-vars(off) +#pragma register_vars(on) +#pragma regvaraddr(on) +#pragma rodata-name("RODATA") +#pragma rodata_name("RODATA") +#pragma signed-chars(off) +#pragma signed_chars(on) +#pragma static-locals(off) +#pragma static_locals(on) +#pragma warn(unused-param, on) +#pragma wrapped-call(push, func, 0) // push is required for this #pragma +#pragma wrapped_call(push, func, 1) +#pragma writable-strings(on) +#pragma writable_strings(off) +#pragma zpsym("func") + +int main () +{ + return 0; +} From ef17250c64b2e7842e0807ccb63156c05cde35df Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 1 Sep 2024 10:26:45 +0200 Subject: [PATCH 2489/2710] Fixed a compiler warning. --- src/cc65/scanner.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 6b5235679..879925c7c 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -1267,7 +1267,7 @@ static int CloseBrace (Collection* C, token_t Tok) */ { if (CollCount (C) > 0) { - token_t LastTok = (token_t)CollLast (C); + token_t LastTok = (token_t)(intptr_t)CollLast (C); if (LastTok == Tok) { CollPop (C); NextToken (); From 35c3fe5d0a8710312e5722ad9fad1581784c80fa Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 1 Sep 2024 10:29:59 +0200 Subject: [PATCH 2490/2710] Fix issue #2044. While doing so, cleanup copy&pasted code. --- src/ld65/config.c | 15 +++++--- src/ld65/exports.c | 87 +++++++++++++++++++--------------------------- 2 files changed, 47 insertions(+), 55 deletions(-) diff --git a/src/ld65/config.c b/src/ld65/config.c index 6c1f6ad4c..947302e98 100644 --- a/src/ld65/config.c +++ b/src/ld65/config.c @@ -889,6 +889,7 @@ static void ParseO65 (void) CfgOptionalAssign (); /* Check which attribute was given */ + CfgSymbol* Sym; switch (AttrTok) { case CFGTOK_EXPORT: @@ -896,8 +897,11 @@ static void ParseO65 (void) AttrFlags |= atExport; /* We expect an identifier */ CfgAssureIdent (); - /* Remember it as an export for later */ - NewCfgSymbol (CfgSymO65Export, GetStrBufId (&CfgSVal)); + /* Remember it as an export for later. We do not support o65 + * output for the 65816, so the address size is always 16 bit. + */ + Sym = NewCfgSymbol (CfgSymO65Export, GetStrBufId (&CfgSVal)); + Sym->AddrSize = ADDR_SIZE_ABS; /* Eat the identifier token */ CfgNextTok (); break; @@ -907,8 +911,11 @@ static void ParseO65 (void) AttrFlags |= atImport; /* We expect an identifier */ CfgAssureIdent (); - /* Remember it as an import for later */ - NewCfgSymbol (CfgSymO65Import, GetStrBufId (&CfgSVal)); + /* Remember it as an import for later. We do not support o65 + * output for the 65816, so the address size is always 16 bit. + */ + Sym = NewCfgSymbol (CfgSymO65Import, GetStrBufId (&CfgSVal)); + Sym->AddrSize = ADDR_SIZE_ABS; /* Eat the identifier token */ CfgNextTok (); break; diff --git a/src/ld65/exports.c b/src/ld65/exports.c index 9149f54d1..9fa0e4019 100644 --- a/src/ld65/exports.c +++ b/src/ld65/exports.c @@ -808,6 +808,15 @@ static int CmpExpName (const void* K1, const void* K2) +static int CmpExpValue (const void* K1, const void* K2) +/* Compare function for qsort */ +{ + long Diff = GetExportVal (*(Export**)K1) - GetExportVal (*(Export**)K2); + return Diff < 0? -1 : Diff > 0? 1 : 0; +} + + + static void CreateExportPool (void) /* Create an array with pointer to all exports */ { @@ -880,19 +889,25 @@ static char GetAddrSizeCode (unsigned char AddrSize) -void PrintExportMapByName (FILE* F) -/* Print an export map, sorted by symbol name, to the given file */ +static void PrintExportMap (Export** Pool, unsigned Count, FILE* F) +/* Print an export map to the given file */ { unsigned I; - unsigned Count; /* Print all exports */ - Count = 0; - for (I = 0; I < ExpCount; ++I) { - const Export* E = ExpPool [I]; + unsigned Col = 0; + for (I = 0; I < Count; ++I) { + const Export* E = Pool [I]; - /* Print unreferenced symbols only if explictly requested */ - if (VerboseMap || E->ImpCount > 0 || SYM_IS_CONDES (E->Type)) { + /* Print unreferenced symbols only if explictly requested. If Expr is + ** NULL, the export is undefined. This happens for imports that don't + ** have a matching export, but if we have one of those, we don't come + ** here. It does also happen for imports that where satisfied from + ** elsewhere, like o65 imports defined in the linker config. + ** So ignore exports here that have an invalid Expr. + */ + if (E->Expr != 0 && + (VerboseMap || E->ImpCount > 0 || SYM_IS_CONDES (E->Type))) { fprintf (F, "%-25s %06lX %c%c%c%c ", GetString (E->Name), @@ -901,8 +916,8 @@ void PrintExportMapByName (FILE* F) SYM_IS_LABEL (E->Type)? 'L' : 'E', GetAddrSizeCode ((unsigned char) E->AddrSize), SYM_IS_CONDES (E->Type)? 'I' : ' '); - if (++Count == 2) { - Count = 0; + if (++Col == 2) { + Col = 0; fprintf (F, "\n"); } } @@ -912,13 +927,10 @@ void PrintExportMapByName (FILE* F) -static int CmpExpValue (const void* I1, const void* I2) -/* Compare function for qsort */ +void PrintExportMapByName (FILE* F) +/* Print an export map, sorted by symbol name, to the given file */ { - long V1 = GetExportVal (ExpPool [*(unsigned *)I1]); - long V2 = GetExportVal (ExpPool [*(unsigned *)I2]); - - return V1 < V2 ? -1 : V1 == V2 ? 0 : 1; + PrintExportMap (ExpPool, ExpCount, F); } @@ -926,43 +938,16 @@ static int CmpExpValue (const void* I1, const void* I2) void PrintExportMapByValue (FILE* F) /* Print an export map, sorted by symbol value, to the given file */ { - unsigned I; - unsigned Count; - unsigned *ExpValXlat; + /* Create a new pool that is sorted by value */ + Export** Pool = xmalloc (ExpCount * sizeof (Export*)); + memcpy (Pool, ExpPool, ExpCount * sizeof (Export*)); + qsort (Pool, ExpCount, sizeof (Export*), CmpExpValue); - /* Create a translation table where the symbols are sorted by value. */ - ExpValXlat = xmalloc (ExpCount * sizeof (unsigned)); - for (I = 0; I < ExpCount; ++I) { - /* Initialize table with current sort order. */ - ExpValXlat [I] = I; - } + /* Print the exports */ + PrintExportMap (Pool, ExpCount, F); - /* Sort them by value */ - qsort (ExpValXlat, ExpCount, sizeof (unsigned), CmpExpValue); - - /* Print all exports */ - Count = 0; - for (I = 0; I < ExpCount; ++I) { - const Export* E = ExpPool [ExpValXlat [I]]; - - /* Print unreferenced symbols only if explictly requested */ - if (VerboseMap || E->ImpCount > 0 || SYM_IS_CONDES (E->Type)) { - fprintf (F, - "%-25s %06lX %c%c%c%c ", - GetString (E->Name), - GetExportVal (E), - E->ImpCount? 'R' : ' ', - SYM_IS_LABEL (E->Type)? 'L' : 'E', - GetAddrSizeCode ((unsigned char) E->AddrSize), - SYM_IS_CONDES (E->Type)? 'I' : ' '); - if (++Count == 2) { - Count = 0; - fprintf (F, "\n"); - } - } - } - fprintf (F, "\n"); - xfree (ExpValXlat); + /* Free the allocated buffer */ + xfree (Pool); } From 4b68d19993c41da4f77342e8bc4dea74a9d4f80c Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 1 Sep 2024 10:42:18 +0200 Subject: [PATCH 2491/2710] Fix issue #1663. --- src/ca65/condasm.c | 72 +++++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 32 deletions(-) diff --git a/src/ca65/condasm.c b/src/ca65/condasm.c index 6198f4017..f872ec9ed 100644 --- a/src/ca65/condasm.c +++ b/src/ca65/condasm.c @@ -133,24 +133,26 @@ static void SetIfCond (IfDesc* ID, int C) -static void ElseClause (IfDesc* ID, const char* Directive) -/* Enter an .ELSE clause */ +static int ElseClause (IfDesc* ID, const char* Directive) +/* Enter an .ELSE clause. Return true if this was ok, zero on errors. */ { /* Check if we have an open .IF - otherwise .ELSE is not allowed */ if (ID == 0) { Error ("Unexpected %s", Directive); - return; + return 0; } /* Check for a duplicate else, then remember that we had one */ if (ID->Flags & ifElse) { /* We already had a .ELSE ! */ Error ("Duplicate .ELSE"); + return 0; } ID->Flags |= ifElse; /* Condition is inverted now */ ID->Flags ^= ifCond; + return 1; } @@ -226,46 +228,52 @@ void DoConditionals (void) D = GetCurrentIf (); /* Allow an .ELSE */ - ElseClause (D, ".ELSE"); + if (ElseClause (D, ".ELSE")) { + /* Remember the data for the .ELSE */ + if (D) { + ReleaseFullLineInfo (&D->LineInfos); + GetFullLineInfo (&D->LineInfos); + D->Name = ".ELSE"; + } - /* Remember the data for the .ELSE */ - if (D) { - ReleaseFullLineInfo (&D->LineInfos); - GetFullLineInfo (&D->LineInfos); - D->Name = ".ELSE"; + /* Calculate the new overall condition */ + CalcOverallIfCond (); + + /* Skip .ELSE */ + NextTok (); + ExpectSep (); + } else { + /* Problem with .ELSE, ignore remainder of line */ + SkipUntilSep (); } - - /* Calculate the new overall condition */ - CalcOverallIfCond (); - - /* Skip .ELSE */ - NextTok (); - ExpectSep (); break; case TOK_ELSEIF: D = GetCurrentIf (); /* Handle as if there was an .ELSE first */ - ElseClause (D, ".ELSEIF"); + if (ElseClause (D, ".ELSEIF")) { + /* Calculate the new overall if condition */ + CalcOverallIfCond (); - /* Calculate the new overall if condition */ - CalcOverallIfCond (); + /* Allocate and prepare a new descriptor */ + D = AllocIf (".ELSEIF", 0); + NextTok (); - /* Allocate and prepare a new descriptor */ - D = AllocIf (".ELSEIF", 0); - NextTok (); + /* Ignore the new condition if we are inside a false .ELSE + ** branch. This way we won't get any errors about undefined + ** symbols or similar... + */ + if (IfCond) { + SetIfCond (D, ConstExpression ()); + ExpectSep (); + } - /* Ignore the new condition if we are inside a false .ELSE - ** branch. This way we won't get any errors about undefined - ** symbols or similar... - */ - if (IfCond) { - SetIfCond (D, ConstExpression ()); - ExpectSep (); + /* Get the new overall condition */ + CalcOverallIfCond (); + } else { + /* Problem with .ELSEIF, ignore remainder of line */ + SkipUntilSep (); } - - /* Get the new overall condition */ - CalcOverallIfCond (); break; case TOK_ENDIF: From b5cc68d6e2afe6d249ad31c83bf64382eade7b49 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 1 Sep 2024 12:41:25 +0200 Subject: [PATCH 2492/2710] Do not save any register variables when entering main(). Do not restore the C stack when leaving main(). Both are unnecessary and just bloat the executable. --- src/cc65/codegen.c | 45 +++++++++++++++++++++++++-------------------- src/cc65/codegen.h | 2 +- src/cc65/function.c | 8 +++++--- src/cc65/locals.c | 44 ++++++++++++++++++++++++++++++++++---------- 4 files changed, 65 insertions(+), 34 deletions(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 69dcc1c6c..45823fab6 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -507,34 +507,39 @@ void g_enter (unsigned flags, unsigned argsize) -void g_leave (void) +void g_leave (int IsMainFunc) /* Function epilogue */ { - /* How many bytes of locals do we have to drop? */ - unsigned ToDrop = (unsigned) -StackPtr; + /* In the main function nothing has to be dropped because the program + ** is terminated anyway. + */ + if (!IsMainFunc) { + /* How many bytes of locals do we have to drop? */ + unsigned ToDrop = (unsigned) -StackPtr; - /* If we didn't have a variable argument list, don't call leave */ - if (funcargs >= 0) { + /* If we didn't have a variable argument list, don't call leave */ + if (funcargs >= 0) { - /* Drop stackframe if needed */ - g_drop (ToDrop + funcargs); + /* Drop stackframe if needed */ + g_drop (ToDrop + funcargs); - } else if (StackPtr != 0) { + } else if (StackPtr != 0) { + + /* We've a stack frame to drop */ + if (ToDrop > 255) { + g_drop (ToDrop); /* Inlines the code */ + AddCodeLine ("jsr leave"); + } else { + AddCodeLine ("ldy #$%02X", ToDrop); + AddCodeLine ("jsr leavey"); + } - /* We've a stack frame to drop */ - if (ToDrop > 255) { - g_drop (ToDrop); /* Inlines the code */ - AddCodeLine ("jsr leave"); } else { - AddCodeLine ("ldy #$%02X", ToDrop); - AddCodeLine ("jsr leavey"); + + /* Nothing to drop */ + AddCodeLine ("jsr leave"); + } - - } else { - - /* Nothing to drop */ - AddCodeLine ("jsr leave"); - } /* Add the final rts */ diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index 8e04b45e4..b95df5cfb 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -247,7 +247,7 @@ void g_scale (unsigned flags, long val); void g_enter (unsigned flags, unsigned argsize); /* Function prologue */ -void g_leave (void); +void g_leave (int IsMainFunc); /* Function epilogue */ diff --git a/src/cc65/function.c b/src/cc65/function.c index a4b860251..d5cab3993 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -646,11 +646,13 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* Output the function exit code label */ g_defcodelabel (F_GetRetLab (CurrentFunc)); - /* Restore the register variables */ - F_RestoreRegVars (CurrentFunc); + /* Restore the register variables (not necessary for main function) */ + if (!F_IsMainFunc (CurrentFunc)) { + F_RestoreRegVars (CurrentFunc); + } /* Generate the exit code */ - g_leave (); + g_leave (F_IsMainFunc (CurrentFunc)); /* Emit references to imports/exports */ EmitExternals (); diff --git a/src/cc65/locals.c b/src/cc65/locals.c index 34d762324..c4d0aa25b 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -111,22 +111,31 @@ static void ParseRegisterDecl (Declarator* Decl, int Reg) /* Get the size of the variable */ unsigned Size = SizeOf (Decl->Type); - /* Save the current contents of the register variable on stack */ - F_AllocLocalSpace (CurrentFunc); - g_save_regvars (Reg, Size); - - /* Add the symbol to the symbol table. We do that now, because for register - ** variables the current stack pointer is implicitly used as location for - ** the save area. - */ - Sym = AddLocalSym (Decl->Ident, Decl->Type, Decl->StorageClass, Reg); - /* Check for an optional initialization */ if (CurTok.Tok == TOK_ASSIGN) { /* Skip the '=' */ NextToken (); + /* If the register variable is initialized, the initialization code may + ** access other already declared variables. This means that we have to + ** allocate them now. + */ + F_AllocLocalSpace (CurrentFunc); + + /* Save the current contents of the register variable on stack. This is + ** not necessary for the main function. + */ + if (!F_IsMainFunc (CurrentFunc)) { + g_save_regvars (Reg, Size); + } + + /* Add the symbol to the symbol table. We do that now, because for + ** register variables the current stack pointer is implicitly used + ** as location for the save area (unused in case of main()). + */ + Sym = AddLocalSym (Decl->Ident, Decl->Type, Decl->StorageClass, Reg); + /* Special handling for compound types */ if (IsCompound) { @@ -173,6 +182,21 @@ static void ParseRegisterDecl (Declarator* Decl, int Reg) /* Mark the variable as referenced */ Sym->Flags |= SC_REF; + } else { + + /* Save the current contents of the register variable on stack. This is + ** not necessary for the main function. + */ + if (!F_IsMainFunc (CurrentFunc)) { + F_AllocLocalSpace (CurrentFunc); + g_save_regvars (Reg, Size); + } + + /* Add the symbol to the symbol table. We do that now, because for + ** register variables the current stack pointer is implicitly used + ** as location for the save area (unused in case of main()). + */ + Sym = AddLocalSym (Decl->Ident, Decl->Type, Decl->StorageClass, Reg); } /* Cannot allocate a variable of unknown size */ From b4aef6eac4f81ab2e29fc301559e23b4d464d1cc Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 1 Sep 2024 13:16:35 +0200 Subject: [PATCH 2493/2710] Fix macro preprocessing for #include. Arguments enclosed in "" or <> must not be preprocessed. See ISO/IEC 9899 1990 (E) section 6.8.2. --- src/cc65/preproc.c | 27 +++++++++++++++++++++++---- test/val/bug2458.c | 10 ++++++++++ test/val/bug2458.h | 1 + 3 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 test/val/bug2458.c create mode 100644 test/val/bug2458.h diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 66cbb2a9d..1ee810060 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -2812,11 +2812,30 @@ static void DoInclude (void) InputType IT; StrBuf Filename = AUTO_STRBUF_INITIALIZER; - /* Macro-replace a single line with special support for <filename> */ - SB_Clear (MLine); - PreprocessDirective (Line, MLine, MSM_TOK_HEADER); + /* Skip whitespace so the input pointer points to the argument */ + SkipWhitespace (0); - /* Read from the processed line */ + /* We may have three forms of the #include directive: + ** + ** - # include "q-char-sequence" new-line + ** - # include <h-char-sequence> new-line + ** - # include pp-tokens new-line + ** + ** The former two are processed as is while the latter is preprocessed and + ** must then resemble one of the first two forms. + */ + if (CurC == '"' || CurC == '<') { + /* Copy the argument part over to MLine */ + unsigned Start = SB_GetIndex (Line); + unsigned Length = SB_GetLen (Line) - Start; + SB_Slice (MLine, Line, Start, Length); + } else { + /* Macro-replace a single line with special support for <filename> */ + SB_Clear (MLine); + PreprocessDirective (Line, MLine, MSM_TOK_HEADER); + } + + /* Read from the copied/preprocessed line */ SB_Reset (MLine); MLine = InitLine (MLine); diff --git a/test/val/bug2458.c b/test/val/bug2458.c new file mode 100644 index 000000000..1494a7946 --- /dev/null +++ b/test/val/bug2458.c @@ -0,0 +1,10 @@ +#define str(arg) #arg +#include str(bug2458.h) /* Ok, macro replacement */ + +#define string foo +#include <string.h> /* Ok, no macro replacement */ + +int main() +{ + return 0; +} diff --git a/test/val/bug2458.h b/test/val/bug2458.h new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/test/val/bug2458.h @@ -0,0 +1 @@ + From b2aceaea241d39cc7f821790579e77e70c71fd4a Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 1 Sep 2024 19:58:07 +0200 Subject: [PATCH 2494/2710] Fix behavior of .INCLUDE within a macro or .REPEAT. In the original code .INCLUDE was executed after expansion of the macro or .REPEAT - which was wrong and caused all sorts of unexpected behavior. Related issues/PRs are #231, #1473, #2159 and maybe others. Note: After this change error messages for nested macro/.include statements may be wrong. This is an unrelated bug that was always there and got exposed by this fix. The bug needs to be addressed in a separate PR. --- src/ca65/istack.c | 26 ++++++++++++++++++++++++++ src/ca65/istack.h | 20 ++++++++++++++++++++ src/ca65/scanner.c | 11 +++++++++-- 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/src/ca65/istack.c b/src/ca65/istack.c index 7a95e7e8c..979c09740 100644 --- a/src/ca65/istack.c +++ b/src/ca65/istack.c @@ -156,3 +156,29 @@ void CheckInputStack (void) Error ("Open %s", IStack->Desc); } } + + + +InputStack RetrieveInputStack (void) +/* Retrieve the current input stack. This will also clear it. Used when +** including a file. The current input stack is stored together with the old +** input file and restored when the file is closed. + */ +{ + /* We do not touch the counter so input sources are counted across + ** includes. + */ + InputStack S = IStack; + IStack = 0; + return S; +} + + + +void RestoreInputStack (InputStack S) +/* Restore an old input stack that was retrieved by RetrieveInputStack(). */ +{ + CHECK (IStack == 0); + IStack = S; +} + diff --git a/src/ca65/istack.h b/src/ca65/istack.h index aa37bab14..28c413d39 100644 --- a/src/ca65/istack.h +++ b/src/ca65/istack.h @@ -38,6 +38,17 @@ +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* Opaque pointer to an input stack */ +typedef void* InputStack; + + + /*****************************************************************************/ /* Code */ /*****************************************************************************/ @@ -63,6 +74,15 @@ void CheckInputStack (void); ** stuff on the input stack. */ +InputStack RetrieveInputStack (void); +/* Retrieve the current input stack. This will also clear it. Used when +** including a file. The current input stack is stored together with the old +** input file and restored when the file is closed. + */ + +void RestoreInputStack (InputStack S); +/* Restore an old input stack that was retrieved by RetrieveInputStack(). */ + /* End of istack.h */ diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c index 146c74958..89ff851fc 100644 --- a/src/ca65/scanner.c +++ b/src/ca65/scanner.c @@ -113,6 +113,7 @@ struct CharSource { token_t Tok; /* Last token */ int C; /* Last character */ int SkipN; /* For '\r\n' line endings, skip '\n\ if next */ + InputStack IStack; /* Saved input stack */ const CharSourceFunctions* Func; /* Pointer to function table */ union { InputFile File; /* File data */ @@ -321,6 +322,9 @@ static void UseCharSource (CharSource* S) S->Tok = CurTok.Tok; S->C = C; + /* Remember the current input stack */ + S->IStack = RetrieveInputStack (); + /* Use the new input source */ S->Next = Source; Source = S; @@ -347,7 +351,10 @@ static void DoneCharSource (void) /* Restore the old token */ CurTok.Tok = Source->Tok; - C = Source->C; + C = Source->C; + + /* Restore the old input source */ + RestoreInputStack (Source->IStack); /* Remember the last stacked input source */ S = Source->Next; @@ -1521,7 +1528,7 @@ CharAgain: /* In case of the main file, do not close it, but return EOF. */ if (Source && Source->Next) { DoneCharSource (); - goto Again; + goto Restart; } else { CurTok.Tok = TOK_EOF; } From cc0db26e20d4508f63db539ea619c57863e47d27 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 1 Sep 2024 20:22:29 +0200 Subject: [PATCH 2495/2710] Added some tests. --- test/asm/listing/070-include-macro.inc | 1 + test/asm/listing/070-include-macro.s | 13 +++++++++++++ test/asm/listing/070-include-repeat.inc | 1 + test/asm/listing/070-include-repeat.s | 4 ++++ test/asm/listing/ref/070-include-macro.err-ref | 1 + test/asm/listing/ref/070-include-repeat.err-ref | 6 ++++++ 6 files changed, 26 insertions(+) create mode 100644 test/asm/listing/070-include-macro.inc create mode 100644 test/asm/listing/070-include-macro.s create mode 100644 test/asm/listing/070-include-repeat.inc create mode 100644 test/asm/listing/070-include-repeat.s create mode 100644 test/asm/listing/ref/070-include-macro.err-ref create mode 100644 test/asm/listing/ref/070-include-repeat.err-ref diff --git a/test/asm/listing/070-include-macro.inc b/test/asm/listing/070-include-macro.inc new file mode 100644 index 000000000..0152a7965 --- /dev/null +++ b/test/asm/listing/070-include-macro.inc @@ -0,0 +1 @@ +foo: diff --git a/test/asm/listing/070-include-macro.s b/test/asm/listing/070-include-macro.s new file mode 100644 index 000000000..aad55cb52 --- /dev/null +++ b/test/asm/listing/070-include-macro.s @@ -0,0 +1,13 @@ +.macro IncludeFile FilePath + .proc bar + .include FilePath + .endproc +.endmacro + +IncludeFile "070-include-macro.inc" + +.ifdef bar::foo + .out "bar::foo is defined" +.else + .out "bar::foo is undefined" +.endif diff --git a/test/asm/listing/070-include-repeat.inc b/test/asm/listing/070-include-repeat.inc new file mode 100644 index 000000000..0eb22a710 --- /dev/null +++ b/test/asm/listing/070-include-repeat.inc @@ -0,0 +1 @@ +.out "include file" diff --git a/test/asm/listing/070-include-repeat.s b/test/asm/listing/070-include-repeat.s new file mode 100644 index 000000000..20170255f --- /dev/null +++ b/test/asm/listing/070-include-repeat.s @@ -0,0 +1,4 @@ +.repeat 3 + .include "070-include-repeat.inc" + .out "main file" +.endrepeat diff --git a/test/asm/listing/ref/070-include-macro.err-ref b/test/asm/listing/ref/070-include-macro.err-ref new file mode 100644 index 000000000..5faf98c4b --- /dev/null +++ b/test/asm/listing/ref/070-include-macro.err-ref @@ -0,0 +1 @@ +bar::foo is defined diff --git a/test/asm/listing/ref/070-include-repeat.err-ref b/test/asm/listing/ref/070-include-repeat.err-ref new file mode 100644 index 000000000..d42e70ee7 --- /dev/null +++ b/test/asm/listing/ref/070-include-repeat.err-ref @@ -0,0 +1,6 @@ +include file +main file +include file +main file +include file +main file From e2014611ef7932b7ef8f1e97c637e8fc29a6447a Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Mon, 2 Sep 2024 07:02:41 +0200 Subject: [PATCH 2496/2710] Improve the usage output for the '-W' option. --- doc/cc65.sgml | 5 +++-- src/cc65/main.c | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 2219ccf6a..5c074991b 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -61,7 +61,7 @@ Short options: -Os Inline some standard functions -T Include source as comment -V Print the compiler version number - -W warning[,...] Suppress warnings + -W [-+]warning[,...] Control warnings ('-' disables, '+' enables) -d Debug mode -g Add debug info to object file -h Help (this text) @@ -84,8 +84,9 @@ Long options: --create-full-dep name Create a full make dependency file --data-name seg Set the name of the DATA segment --debug Debug mode + --debug-tables name Write symbol table debug info to a file --debug-info Add debug info to object file - --debug-opt name Configure optimizations with a file + --debug-opt name Debug optimization steps --debug-opt-output Debug output of each optimization step --dep-target target Use this dependency target --disable-opt name Disable an optimization step diff --git a/src/cc65/main.c b/src/cc65/main.c index 7dc5417f6..47435757c 100644 --- a/src/cc65/main.c +++ b/src/cc65/main.c @@ -91,7 +91,7 @@ static void Usage (void) " -Os\t\t\t\tInline some standard functions\n" " -T\t\t\t\tInclude source as comment\n" " -V\t\t\t\tPrint the compiler version number\n" - " -W warning[,...]\t\tSuppress warnings\n" + " -W [-+]warning[,...]\t\tControl warnings ('-' disables, '+' enables)\n" " -d\t\t\t\tDebug mode\n" " -g\t\t\t\tAdd debug info to object file\n" " -h\t\t\t\tHelp (this text)\n" From cd4357057f53a7a7fac0bb9dd39c7bfbe5a7a46a Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Mon, 2 Sep 2024 10:39:42 +0200 Subject: [PATCH 2497/2710] The change from #2495 didn't take into account that recursive calls to main() are legal in C. With the changes from #2495, such calls will usually crash the machine. But recursive calls to main() are rare and on the 6502 every byte saved is precious. So this change limits the effect of #2495 to cc65 mode and at the same time disallows recursive calls to main() in this mode. If recursive calls to main() are actually required, the code must be compiled in c89 or c99 mode. --- doc/cc65.sgml | 5 +++++ src/cc65/codegen.c | 8 ++++---- src/cc65/codegen.h | 2 +- src/cc65/expr.c | 26 ++++++++++++++++++++++---- src/cc65/function.c | 10 +++++++--- src/cc65/locals.c | 15 +++++++++++---- test/ref/custom-reference-error.c | 3 +-- test/val/nullptr.c | 4 +++- 8 files changed, 54 insertions(+), 19 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 2219ccf6a..8dd6d0202 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -823,6 +823,11 @@ and the one defined by the ISO standard: as it sounds, since the 6502 has so few registers that it isn't possible to keep values in registers anyway. <p> +<item> In <tt/cc65/ mode, <tt/main()/ cannot be called recursively. If this + is necessary, the program must be compiled in <tt/c89/ or <tt/c99/ mode + using the <tt><ref id="option--standard" name="--standard"></tt> + command line option. + <p> </itemize> There may be some more minor differences I'm currently not aware of. The diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 45823fab6..166176f5e 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -507,13 +507,13 @@ void g_enter (unsigned flags, unsigned argsize) -void g_leave (int IsMainFunc) +void g_leave (int DoCleanup) /* Function epilogue */ { - /* In the main function nothing has to be dropped because the program - ** is terminated anyway. + /* In the main function in cc65 mode nothing has to be dropped because + ** the program is terminated anyway. */ - if (!IsMainFunc) { + if (DoCleanup) { /* How many bytes of locals do we have to drop? */ unsigned ToDrop = (unsigned) -StackPtr; diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index b95df5cfb..734c95372 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -247,7 +247,7 @@ void g_scale (unsigned flags, long val); void g_enter (unsigned flags, unsigned argsize); /* Function prologue */ -void g_leave (int IsMainFunc); +void g_leave (int DoCleanup); /* Function epilogue */ diff --git a/src/cc65/expr.c b/src/cc65/expr.c index f6c681db8..2939ab1cc 100644 --- a/src/cc65/expr.c +++ b/src/cc65/expr.c @@ -1219,9 +1219,6 @@ static void Primary (ExprDesc* E) /* Is the symbol known? */ if (Sym) { - /* We found the symbol - skip the name token */ - NextToken (); - /* Check for illegal symbol types */ CHECK ((Sym->Flags & SC_TYPEMASK) != SC_LABEL); if ((Sym->Flags & SC_TYPEMASK) == SC_TYPEDEF) { @@ -1230,9 +1227,14 @@ static void Primary (ExprDesc* E) /* Assume an int type to make E valid */ E->Flags = E_LOC_STACK | E_RTYPE_LVAL; E->Type = type_int; + /* Skip the erroneous token */ + NextToken (); break; } + /* Skip the name token */ + NextToken (); + /* Mark the symbol as referenced */ Sym->Flags |= SC_REF; @@ -1286,7 +1288,23 @@ static void Primary (ExprDesc* E) ** rvalue, too, because we cannot store anything in a function. ** So fix the flags depending on the type. */ - if (IsTypeArray (E->Type) || IsTypeFunc (E->Type)) { + if (IsTypeArray (E->Type)) { + ED_AddrExpr (E); + } else if (IsTypeFunc (E->Type)) { + /* In cc65 mode we cannot call or take the address of + ** main(). + */ + if (IS_Get (&Standard) == STD_CC65 && + strcmp (Sym->Name, "main") == 0) { + /* Adjust the error message depending on a call or an + ** address operation. + */ + if (CurTok.Tok == TOK_LPAREN) { + Error ("'main' must not be called recursively"); + } else { + Error ("The address of 'main' cannot be taken"); + } + } ED_AddrExpr (E); } diff --git a/src/cc65/function.c b/src/cc65/function.c index d5cab3993..fed0349dd 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -646,13 +646,17 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* Output the function exit code label */ g_defcodelabel (F_GetRetLab (CurrentFunc)); - /* Restore the register variables (not necessary for main function) */ - if (!F_IsMainFunc (CurrentFunc)) { + /* Restore the register variables (not necessary for the main function in + ** cc65 mode) + */ + int CleanupOnExit = (IS_Get (&Standard) != STD_CC65) || + !F_IsMainFunc (CurrentFunc); + if (CleanupOnExit) { F_RestoreRegVars (CurrentFunc); } /* Generate the exit code */ - g_leave (F_IsMainFunc (CurrentFunc)); + g_leave (CleanupOnExit); /* Emit references to imports/exports */ EmitExternals (); diff --git a/src/cc65/locals.c b/src/cc65/locals.c index c4d0aa25b..08e41918e 100644 --- a/src/cc65/locals.c +++ b/src/cc65/locals.c @@ -111,6 +111,13 @@ static void ParseRegisterDecl (Declarator* Decl, int Reg) /* Get the size of the variable */ unsigned Size = SizeOf (Decl->Type); + /* Check if this is the main function and we are in cc65 mode. If so, we + ** won't save the old contents of the register variables since in cc65 + ** mode main() may not be called recursively. + */ + int SaveRegVars = (IS_Get (&Standard) != STD_CC65) || + !F_IsMainFunc (CurrentFunc); + /* Check for an optional initialization */ if (CurTok.Tok == TOK_ASSIGN) { @@ -126,13 +133,13 @@ static void ParseRegisterDecl (Declarator* Decl, int Reg) /* Save the current contents of the register variable on stack. This is ** not necessary for the main function. */ - if (!F_IsMainFunc (CurrentFunc)) { + if (SaveRegVars) { g_save_regvars (Reg, Size); } /* Add the symbol to the symbol table. We do that now, because for ** register variables the current stack pointer is implicitly used - ** as location for the save area (unused in case of main()). + ** as location for the save area (maybe unused in case of main()). */ Sym = AddLocalSym (Decl->Ident, Decl->Type, Decl->StorageClass, Reg); @@ -187,14 +194,14 @@ static void ParseRegisterDecl (Declarator* Decl, int Reg) /* Save the current contents of the register variable on stack. This is ** not necessary for the main function. */ - if (!F_IsMainFunc (CurrentFunc)) { + if (SaveRegVars) { F_AllocLocalSpace (CurrentFunc); g_save_regvars (Reg, Size); } /* Add the symbol to the symbol table. We do that now, because for ** register variables the current stack pointer is implicitly used - ** as location for the save area (unused in case of main()). + ** as location for the save area (maybe unused in case of main()). */ Sym = AddLocalSym (Decl->Ident, Decl->Type, Decl->StorageClass, Reg); } diff --git a/test/ref/custom-reference-error.c b/test/ref/custom-reference-error.c index e98fb024d..455e0276d 100644 --- a/test/ref/custom-reference-error.c +++ b/test/ref/custom-reference-error.c @@ -22,6 +22,5 @@ return_t main(int argc, char* argv[]) n = 0; /* produce an error */ /* produce a warning */ } - -int arr[main(0, 0)]; /* produce an error */ int b = 0; +int arr[b]; /* produce an error */ diff --git a/test/val/nullptr.c b/test/val/nullptr.c index e64b82ee2..a5b72e8c5 100644 --- a/test/val/nullptr.c +++ b/test/val/nullptr.c @@ -28,6 +28,8 @@ struct S { } \ } while(0); +void func() { } + int main() { int a; @@ -60,7 +62,7 @@ int main() TEST_NON_NULL(((struct S*)&a)->a) /* Non-null pointer obtained with cast and -> */ - TEST_NON_NULL(((struct S*)&main)->a) + TEST_NON_NULL(((struct S*)&func)->a) if (failures != 0) { From 79606c4d20e00db5be257d25bf7ab78109e1df3e Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Mon, 2 Sep 2024 16:55:58 +0200 Subject: [PATCH 2498/2710] Overlooked a few target tests that take the address of main(). --- targettest/atari/mem.c | 4 +++- targettest/pce/conio.c | 4 +++- targettest/scanf-test.c | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/targettest/atari/mem.c b/targettest/atari/mem.c index bc70aded6..b15b215ed 100644 --- a/targettest/atari/mem.c +++ b/targettest/atari/mem.c @@ -21,6 +21,8 @@ unsigned int *MEMTOP = (unsigned int *)741; unsigned int *MEMLO = (unsigned int *)743; void *allocmem; +void code(void) { } + int main(void) { allocmem = malloc(257); @@ -35,7 +37,7 @@ int main(void) printf(" MEMLO = $%04X (%u)\n", *MEMLO, *MEMLO); printf(" ----------------------\n"); - printf(" main: $%04X (code)\n", &main); + printf(" code: $%04X (code)\n", &code); printf(" data: $%04X (data)\n", &data); printf(" _dos_type: $%04X (bss)\n", &_dos_type); printf(" allocmem: $%04X (dyn. data)\n", allocmem); diff --git a/targettest/pce/conio.c b/targettest/pce/conio.c index 55f828f26..819e601be 100644 --- a/targettest/pce/conio.c +++ b/targettest/pce/conio.c @@ -11,6 +11,8 @@ static char hex[16] = { "0123456789abcdef" }; static char charbuf[0x20]; static char colbuf[0x20]; +void func(void) { } + void main(void) { int stackvar = 42; @@ -65,7 +67,7 @@ void main(void) p[8],p[9],p[10],p[11],p[12],p[13],p[14],p[15] ); } - memcpy(p, main, i = 0); /* test that a zero length doesn't copy 64K */ + memcpy(p, func, i = 0); /* test that a zero length doesn't copy 64K */ gotoxy(0,ysize - 1); for (i = 0; i < xsize; ++i) { diff --git a/targettest/scanf-test.c b/targettest/scanf-test.c index f17b62294..e0ab95756 100644 --- a/targettest/scanf-test.c +++ b/targettest/scanf-test.c @@ -159,12 +159,14 @@ static void Pause(void) { #endif } +static void Nil() { } + int main(void) { long n0; unsigned t; int c, n1 = 12345, n2, n3; char s1[80], s2[80]; - void *p1 = main, *p2 = main, *p3 = main, *p4 = main; + void *p1 = Nil, *p2 = Nil, *p3 = Nil, *p4 = Nil; #ifndef USE_STDIO clrscr(); From d996e20c5f187023a39498aa4bf3e2b888aad362 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Tue, 3 Sep 2024 20:21:48 +0200 Subject: [PATCH 2499/2710] Fix issues #2461. This was always wrong even in cases where it seemed to work. If it did, it was by coincidence. --- src/cc65/codeoptutil.c | 6 ++-- test/val/bug2461.c | 67 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 test/val/bug2461.c diff --git a/src/cc65/codeoptutil.c b/src/cc65/codeoptutil.c index 173d5185f..43b1dee22 100644 --- a/src/cc65/codeoptutil.c +++ b/src/cc65/codeoptutil.c @@ -1128,8 +1128,10 @@ void AddOpHigh (StackOpData* D, opc_t OPC, LoadInfo* LI, int KeepResult) InsertEntry (D, X, D->IP++); } - /* In both cases, we can remove the load */ - LI->X.Flags |= LI_REMOVE; + /* If this is the right hand side, we can remove the load. */ + if (LI == &D->Rhs) { + LI->X.Flags |= LI_REMOVE; + } } else { /* opc zphi */ diff --git a/test/val/bug2461.c b/test/val/bug2461.c new file mode 100644 index 000000000..e8340b224 --- /dev/null +++ b/test/val/bug2461.c @@ -0,0 +1,67 @@ +/* related to bug #2461 */ + +/* Note: The values for MASK1, MASK2, the return values of GarbleAX and the + * arguments for CALC() are carefully chosen to elicit the bug. + */ + +#include <stdio.h> + +#define MASK1 0x000FU +#define MASK2 0x00FFU +#define CALC(num, op) (((num) & (~MASK1)) op ((num) & MASK2)) + +static unsigned Failures = 0; +static unsigned TestCount = 0; + +unsigned GarbleAX(void) +{ + static const unsigned Garbage[] = { + 0x1234, 0x0000, 0x1234, 0x1234 + }; + return Garbage[TestCount - 1]; +} + +unsigned WrongAdd(unsigned num) +{ + unsigned ret=GarbleAX(); + return CALC(num, +); +} + +unsigned WrongAnd(unsigned num) +{ + unsigned ret=GarbleAX(); + return CALC(num, &); +} + +unsigned WrongOr(unsigned num) +{ + unsigned ret=GarbleAX(); + return CALC(num, |); +} + +unsigned WrongXor(unsigned num) +{ + unsigned ret=GarbleAX(); + return CALC(num, ^); +} + +void Test(unsigned (*F)(unsigned), unsigned Num, unsigned Ref) +{ + unsigned Res; + ++TestCount; + Res = F(Num); + if (Res != Ref) { + printf("Test %u failed: got %04X, expected %04X\n", TestCount, Res, Ref); + ++Failures; + } +} + +int main(void) +{ + Test(WrongAdd, 0x4715, CALC(0x4715, +)); + Test(WrongAnd, 0x4715, CALC(0x4715, &)); + Test(WrongOr, 0x4715, CALC(0x4715, |)); + Test(WrongXor, 0x4715, CALC(0x4715, ^)); + printf("Failures: %u\n", Failures); + return Failures; +} From 38f54875d053e62e3bab991facb8e13cdbc1e258 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Sat, 7 Sep 2024 17:06:45 +0200 Subject: [PATCH 2500/2710] Add files via upload --- libsrc/atmos/waitvsync.s | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 libsrc/atmos/waitvsync.s diff --git a/libsrc/atmos/waitvsync.s b/libsrc/atmos/waitvsync.s new file mode 100644 index 000000000..6113f3da2 --- /dev/null +++ b/libsrc/atmos/waitvsync.s @@ -0,0 +1,18 @@ +; +; Written by Stefan Haubenthal <polluks@sdf.org>, requires VSync hack +; +; void waitvsync (void); +; + + .export _waitvsync + + .include "atmos.inc" + +.proc _waitvsync + +wait: lda VIA::PRA2 + and #%00010000 ; CB1 + bne wait + rts + +.endproc From 033fd9e0dcc891c00df01dba611b1fffb5fb5591 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Sat, 7 Sep 2024 17:19:21 +0200 Subject: [PATCH 2501/2710] Update funcref.sgml --- doc/funcref.sgml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 130646538..ea2350aad 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -155,6 +155,7 @@ function. <item><ref id="atmos_tick" name="atmos_tick"> <item><ref id="atmos_tock" name="atmos_tock"> <item><ref id="atmos_zap" name="atmos_zap"> +<item><ref id="waitvsync" name="waitvsync"> </itemize> @@ -8358,6 +8359,7 @@ only in the presence of a prototype. <descrip> <tag/Function/Wait until the start of the next video frame. <tag/Header/<tt/ +<ref id="atmos.h" name="atmos.h">, <ref id="cbm.h" name="cbm.h">, <ref id="gamate.h" name="gamate.h">, <ref id="nes.h" name="nes.h">, @@ -8365,6 +8367,7 @@ only in the presence of a prototype. <tag/Declaration/<tt/void waitvsync (void);/ <tag/Description/Wait for vertical sync, to reduce flickering. <tag/Availability/Platforms served by the headers above +(Atmos requires the VSync hack) <tag/Example/None. </descrip> </quote> From f430341d5d46bd11a006b9fdb731d56c746394c7 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Sat, 7 Sep 2024 17:23:17 +0200 Subject: [PATCH 2502/2710] Update atmos.h --- include/atmos.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/atmos.h b/include/atmos.h index 38d423c46..460a0010f 100644 --- a/include/atmos.h +++ b/include/atmos.h @@ -169,6 +169,9 @@ void atmos_tock (void); void atmos_zap (void); /* Raygun sound effect */ +void waitvsync (void); +/* Wait for start of next frame */ + /* End of atmos.h */ From ab4cdafacb66f226afcd1c0ee77b49c670130c79 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Sat, 7 Sep 2024 18:07:35 +0200 Subject: [PATCH 2503/2710] Update atari7800.h --- include/atari7800.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/atari7800.h b/include/atari7800.h index 3cbeedb8b..b289bb41e 100644 --- a/include/atari7800.h +++ b/include/atari7800.h @@ -52,7 +52,7 @@ /* No support for dynamically loadable drivers */ #define DYN_DRV 0 -extern unsigned char get_tv(void); /* get TV system */ +unsigned char get_tv(void); /* get TV system */ #include <_tia.h> #define TIA (*(struct __tia*)0x0000) From c9fa9f00023a1ee6c26e66e5b4ce81b54d465e96 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Sat, 7 Sep 2024 18:08:18 +0200 Subject: [PATCH 2504/2710] Update atari5200.h --- include/atari5200.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/atari5200.h b/include/atari5200.h index ff176c15b..9a0399d0e 100644 --- a/include/atari5200.h +++ b/include/atari5200.h @@ -94,7 +94,7 @@ extern void atr5200std_joy[]; /* referred to by joy_static_stddrv[] */ #define _bordercolor(color) 0 /* wait for start of next frame */ -extern void waitvsync (void); +void waitvsync (void); /* end of atari5200.h */ #endif From 44aa5dca910db8bd96ef09d57d424707f582602f Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Sat, 7 Sep 2024 18:12:37 +0200 Subject: [PATCH 2505/2710] Update atari.h --- include/atari.h | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/include/atari.h b/include/atari.h index 04cacab33..0af109264 100644 --- a/include/atari.h +++ b/include/atari.h @@ -220,17 +220,17 @@ /* Color register functions */ /*****************************************************************************/ -extern void __fastcall__ _setcolor (unsigned char color_reg, unsigned char hue, unsigned char luminance); -extern void __fastcall__ _setcolor_low (unsigned char color_reg, unsigned char color_value); -extern unsigned char __fastcall__ _getcolor (unsigned char color_reg); +void __fastcall__ _setcolor (unsigned char color_reg, unsigned char hue, unsigned char luminance); +void __fastcall__ _setcolor_low (unsigned char color_reg, unsigned char color_value); +unsigned char __fastcall__ _getcolor (unsigned char color_reg); /*****************************************************************************/ /* Other screen functions */ /*****************************************************************************/ -extern void waitvsync (void); /* wait for start of next frame */ -extern int __fastcall__ _graphics (unsigned char mode); /* mode value same as in BASIC */ -extern void __fastcall__ _scroll (signed char numlines); +void waitvsync (void); /* wait for start of next frame */ +int __fastcall__ _graphics (unsigned char mode); /* mode value same as in BASIC */ +void __fastcall__ _scroll (signed char numlines); /* numlines > 0 scrolls up */ /* numlines < 0 scrolls down */ @@ -239,18 +239,18 @@ extern void __fastcall__ _scroll (signed char numlines); /* Sound function */ /*****************************************************************************/ -extern void __fastcall__ _sound (unsigned char voice, unsigned char frequency, unsigned char distortion, unsigned char volume); +void __fastcall__ _sound (unsigned char voice, unsigned char frequency, unsigned char distortion, unsigned char volume); /*****************************************************************************/ /* Misc. functions */ /*****************************************************************************/ -extern unsigned char get_ostype(void); /* get ROM version */ -extern unsigned char get_tv(void); /* get TV system */ -extern void _save_vecs(void); /* save system vectors */ -extern void _rest_vecs(void); /* restore system vectors */ -extern char *_getdefdev(void); /* get default floppy device */ -extern unsigned char _is_cmdline_dos(void); /* does DOS support command lines */ +unsigned char get_ostype(void); /* get ROM version */ +unsigned char get_tv(void); /* get TV system */ +void _save_vecs(void); /* save system vectors */ +void _rest_vecs(void); /* restore system vectors */ +char *_getdefdev(void); /* get default floppy device */ +unsigned char _is_cmdline_dos(void); /* does DOS support command lines */ /*****************************************************************************/ From b355620939a9720da91cb90408439ff90868ab84 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Sat, 7 Sep 2024 18:49:53 +0200 Subject: [PATCH 2506/2710] Optimise waitvsync.s --- libsrc/atmos/waitvsync.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/atmos/waitvsync.s b/libsrc/atmos/waitvsync.s index 6113f3da2..15abe1926 100644 --- a/libsrc/atmos/waitvsync.s +++ b/libsrc/atmos/waitvsync.s @@ -10,8 +10,8 @@ .proc _waitvsync -wait: lda VIA::PRA2 - and #%00010000 ; CB1 + lda #%00010000 +wait: and VIA::PRA2 ; CB1 bne wait rts From be5a9f92ec814868e4eaa432159dc1a6ffe54b2a Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Sat, 7 Sep 2024 18:51:20 +0200 Subject: [PATCH 2507/2710] oops --- libsrc/atmos/waitvsync.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/atmos/waitvsync.s b/libsrc/atmos/waitvsync.s index 15abe1926..85e50a795 100644 --- a/libsrc/atmos/waitvsync.s +++ b/libsrc/atmos/waitvsync.s @@ -10,8 +10,8 @@ .proc _waitvsync - lda #%00010000 -wait: and VIA::PRA2 ; CB1 + lda #%00010000 ; CB1 +wait: and VIA::PRA2 bne wait rts From f5e434c6c815d4816813cafdb817c235946c29cf Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Sat, 7 Sep 2024 19:14:59 +0200 Subject: [PATCH 2508/2710] Update waitvsync.s --- libsrc/pet/waitvsync.s | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libsrc/pet/waitvsync.s b/libsrc/pet/waitvsync.s index 39b562e43..d74f76c9f 100644 --- a/libsrc/pet/waitvsync.s +++ b/libsrc/pet/waitvsync.s @@ -9,8 +9,7 @@ .include "pet.inc" _waitvsync: -@l1: - lda VIA_PB - and #%00100000 - bne @l1 + lda #%00100000 +: and VIA_PB + bne :- rts From 461554e616e41252ffef3e1b337ed2d993613e1a Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Sat, 7 Sep 2024 19:17:00 +0200 Subject: [PATCH 2509/2710] Update waitvsync.s --- libsrc/c128/waitvsync.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/c128/waitvsync.s b/libsrc/c128/waitvsync.s index e4bbbf7c9..573f574a7 100644 --- a/libsrc/c128/waitvsync.s +++ b/libsrc/c128/waitvsync.s @@ -23,8 +23,8 @@ _waitvsync: @c80: ;FIXME: do we have to switch banks? + lda #$20 @l3: - lda VDC_INDEX - and #$20 + and VDC_INDEX beq @l3 rts From 55d3a6ea39c3275958d2ac9a666b7bf8ffeb6ed7 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 4 Sep 2024 22:52:52 +0200 Subject: [PATCH 2510/2710] Optimize stpcpy's size and speed --- libsrc/common/stpcpy.c | 7 ------- libsrc/common/stpcpy.s | 22 ++++++++++++++++++++++ libsrc/common/strcpy.s | 7 +++++-- test/val/stpcpy.c | 13 +++++++++++-- 4 files changed, 38 insertions(+), 11 deletions(-) delete mode 100644 libsrc/common/stpcpy.c create mode 100644 libsrc/common/stpcpy.s diff --git a/libsrc/common/stpcpy.c b/libsrc/common/stpcpy.c deleted file mode 100644 index 12af47f2f..000000000 --- a/libsrc/common/stpcpy.c +++ /dev/null @@ -1,7 +0,0 @@ -#include <string.h> - -char * __fastcall__ stpcpy (char * dst, const char * src) -{ - strcpy (dst, src); - return dst + strlen (src); -} diff --git a/libsrc/common/stpcpy.s b/libsrc/common/stpcpy.s new file mode 100644 index 000000000..c8a10db94 --- /dev/null +++ b/libsrc/common/stpcpy.s @@ -0,0 +1,22 @@ +; +; Colin Leroy-Mira, 4 Sept. 2024 +; +; char* stpcpy (char* dest, const char* src); +; + + .export _stpcpy + .import _strcpy + + .importzp tmp1, ptr2 + +_stpcpy: + jsr _strcpy + + ldx ptr2+1 ; Load dest pointer's last high byte + tya ; Get the last offset strcpy wrote to + + clc + adc ptr2 ; Add to low byte value + bcc :+ + inx +: rts ; Return pointer to dest's terminator diff --git a/libsrc/common/strcpy.s b/libsrc/common/strcpy.s index 77b39fe76..9a100f540 100644 --- a/libsrc/common/strcpy.s +++ b/libsrc/common/strcpy.s @@ -25,6 +25,9 @@ L1: lda (ptr1),y inc ptr2+1 bne L1 -L9: lda ptr2 ; X still contains high byte - rts +L9: lda ptr2 ; X still contains dest's original high byte + ; On exit, we want AX to be dest (as this is what strcpy returns). + ; We also want (ptr2),y to still point to dest's terminator, as this + ; is used by stpcpy(). + rts diff --git a/test/val/stpcpy.c b/test/val/stpcpy.c index 8bdbfb926..1cc6458ed 100644 --- a/test/val/stpcpy.c +++ b/test/val/stpcpy.c @@ -8,10 +8,12 @@ #define STR_SHORT "Hello, World!" #define STR_LONG "This is a longer test string for stpcpy." +char dest[512]; +char multi_page[300]; + int main () { - char dest[50]; const char *src_empty; const char *src_short; const char *src_long; @@ -38,7 +40,14 @@ main () assert(end == &dest[sizeof (STR_LONG) - 1]); printf ("Test 3 passed.\n"); + memset(multi_page, 'a', sizeof(multi_page)-1); + multi_page[sizeof(multi_page)-1] = '\0'; + end = stpcpy (dest, multi_page); + assert(!strcmp (dest, multi_page)); + assert(!*end); + assert(end == &dest[sizeof (multi_page) - 1]); + printf ("Test 4 passed.\n"); + printf ("All tests passed.\n"); return EXIT_SUCCESS; } - From 838c8b48b744460f5cf1ee80164029d6c572878d Mon Sep 17 00:00:00 2001 From: coronax <coronax@gmail.com> Date: Sat, 7 Sep 2024 22:16:22 -0500 Subject: [PATCH 2511/2710] Set the clock id to CLOCK_REALTIME when calling clock_gettime. Previously, time() allocated stack space for the clock id argument, but didn't actually set a value. --- asminc/time.inc | 6 ++++++ libsrc/common/time.s | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/asminc/time.inc b/asminc/time.inc index 6064b4ba3..7c1ab3177 100644 --- a/asminc/time.inc +++ b/asminc/time.inc @@ -66,3 +66,9 @@ .global _clock_settime .global _localtime .global _mktime + + +;------------------------------------------------------------------------------ +; Constants + +CLOCK_REALTIME = 0 diff --git a/libsrc/common/time.s b/libsrc/common/time.s index 40b470f5b..36fd36323 100644 --- a/libsrc/common/time.s +++ b/libsrc/common/time.s @@ -6,7 +6,7 @@ .export _time - .import decsp1, ldeaxi + .import pusha, ldeaxi .importzp ptr1, sreg, tmp1, tmp2 .include "time.inc" @@ -22,7 +22,8 @@ ; Get the time (machine dependent) - jsr decsp1 + lda #CLOCK_REALTIME + jsr pusha lda #<time ldx #>time jsr _clock_gettime From 3c5269dede70a6dbe3ec40952595dd8c82d07a5e Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 8 Sep 2024 09:11:47 +0200 Subject: [PATCH 2512/2710] Warn for braces around a pointer initializer. --- src/cc65/initdata.c | 7 +++++++ test/ref/bug2134.c | 2 ++ test/ref/bug2134.cref | 2 ++ 3 files changed, 11 insertions(+) create mode 100644 test/ref/bug2134.c create mode 100644 test/ref/bug2134.cref diff --git a/src/cc65/initdata.c b/src/cc65/initdata.c index 82cebefc2..addc7421b 100644 --- a/src/cc65/initdata.c +++ b/src/cc65/initdata.c @@ -302,6 +302,13 @@ static unsigned ParsePointerInit (const Type* T) /* Optional opening brace */ unsigned BraceCount = OpeningCurlyBraces (0); + /* We warn if an initializer for a scalar contains braces, because this is + ** quite unusual and often a sign for some problem in the input. + */ + if (BraceCount > 0) { + Warning ("Braces around scalar initializer"); + } + /* Expression */ ExprDesc ED = NoCodeConstExpr (hie1); TypeConversion (&ED, T); diff --git a/test/ref/bug2134.c b/test/ref/bug2134.c new file mode 100644 index 000000000..9e95e1daa --- /dev/null +++ b/test/ref/bug2134.c @@ -0,0 +1,2 @@ +int i = { 0 }; +char* p = { 0 }; diff --git a/test/ref/bug2134.cref b/test/ref/bug2134.cref new file mode 100644 index 000000000..72bbbad04 --- /dev/null +++ b/test/ref/bug2134.cref @@ -0,0 +1,2 @@ +bug2134.c:1: Warning: Braces around scalar initializer +bug2134.c:2: Warning: Braces around scalar initializer From d825a40add4ceb23c3b09840b6f0fe29ebe93b3a Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 8 Sep 2024 09:36:40 +0200 Subject: [PATCH 2513/2710] The test needs a main() function. --- test/ref/bug2134.c | 1 + 1 file changed, 1 insertion(+) diff --git a/test/ref/bug2134.c b/test/ref/bug2134.c index 9e95e1daa..9dd1e5c55 100644 --- a/test/ref/bug2134.c +++ b/test/ref/bug2134.c @@ -1,2 +1,3 @@ int i = { 0 }; char* p = { 0 }; +int main() { return 0; } From aff82483411bc8c505ef024ad18778fc902fdbe3 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Sun, 8 Sep 2024 17:08:40 +0200 Subject: [PATCH 2514/2710] add comment on function prototypes --- Contributing.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Contributing.md b/Contributing.md index 5b53e0467..10d687424 100644 --- a/Contributing.md +++ b/Contributing.md @@ -204,6 +204,18 @@ char* nextLine (FILE* f); ### Header files +* All Headers should start with a copyright/license banner +* Function prototypes must be a single line, not contain the redundant + "extern" keyword, and followed by a brief comment that explains what + the function does, and separated from the next prototype by a blank + line: + +~~~C +void __fastcall__ cclear (unsigned char length); +/* Clear part of a line (write length spaces). */ + +~~~ + Headers that belong to the standard library (libc) must conform with the C standard. That means: From 6113dc5995ed2db57fb38d31cb18bbdf8e4a38ce Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Tue, 10 Sep 2024 08:12:31 +0200 Subject: [PATCH 2515/2710] Removed casts from stdint.h. Added a test. Fixes #2505. --- include/stdint.h | 76 ++++++++++----------- test/val/stdint.c | 167 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 205 insertions(+), 38 deletions(-) create mode 100644 test/val/stdint.c diff --git a/include/stdint.h b/include/stdint.h index 5d6f04769..6d51565e0 100644 --- a/include/stdint.h +++ b/include/stdint.h @@ -52,15 +52,15 @@ typedef unsigned char uint8_t; typedef unsigned uint16_t; typedef unsigned long uint32_t; -#define INT8_MIN ((int8_t) 0x80) -#define INT8_MAX ((int8_t) 0x7F) -#define INT16_MIN ((int16_t) 0x8000) -#define INT16_MAX ((int16_t) 0x7FFF) -#define INT32_MIN ((int32_t) 0x80000000) -#define INT32_MAX ((int32_t) 0x7FFFFFFF) -#define UINT8_MAX ((uint8_t) 0xFF) -#define UINT16_MAX ((uint16_t) 0xFFFF) -#define UINT32_MAX ((uint32_t) 0xFFFFFFFF) +#define INT8_MIN -128 +#define INT8_MAX 127 +#define INT16_MIN (-32767 - 1) +#define INT16_MAX 32767 +#define INT32_MIN (-2147483647L - 1L) +#define INT32_MAX 2147483647L +#define UINT8_MAX 255 +#define UINT16_MAX 65535U +#define UINT32_MAX 4294967295UL /* Minimum-width integer types */ typedef signed char int_least8_t; @@ -70,15 +70,15 @@ typedef unsigned char uint_least8_t; typedef unsigned uint_least16_t; typedef unsigned long uint_least32_t; -#define INT_LEAST8_MIN ((int_least8_t) 0x80) -#define INT_LEAST8_MAX ((int_least8_t) 0x7F) -#define INT_LEAST16_MIN ((int_least16_t) 0x8000) -#define INT_LEAST16_MAX ((int_least16_t) 0x7FFF) -#define INT_LEAST32_MIN ((int_least32_t) 0x80000000) -#define INT_LEAST32_MAX ((int_least32_t) 0x7FFFFFFF) -#define UINT_LEAST8_MAX ((uint_least8_t) 0xFF) -#define UINT_LEAST16_MAX ((uint_least16_t) 0xFFFF) -#define UINT_LEAST32_MAX ((uint_least32_t) 0xFFFFFFFF) +#define INT_LEAST8_MIN INT8_MIN +#define INT_LEAST8_MAX INT8_MAX +#define INT_LEAST16_MIN INT16_MIN +#define INT_LEAST16_MAX INT16_MAX +#define INT_LEAST32_MIN INT32_MIN +#define INT_LEAST32_MAX INT32_MAX +#define UINT_LEAST8_MAX UINT8_MAX +#define UINT_LEAST16_MAX UINT16_MAX +#define UINT_LEAST32_MAX UINT32_MAX /* Fastest minimum-width integer types */ typedef signed char int_fast8_t; @@ -88,40 +88,40 @@ typedef unsigned char uint_fast8_t; typedef unsigned uint_fast16_t; typedef unsigned long uint_fast32_t; -#define INT_FAST8_MIN ((int_fast8_t) 0x80) -#define INT_FAST8_MAX ((int_fast8_t) 0x7F) -#define INT_FAST16_MIN ((int_fast16_t) 0x8000) -#define INT_FAST16_MAX ((int_fast16_t) 0x7FFF) -#define INT_FAST32_MIN ((int_fast32_t) 0x80000000) -#define INT_FAST32_MAX ((int_fast32_t) 0x7FFFFFFF) -#define UINT_FAST8_MAX ((uint_fast8_t) 0xFF) -#define UINT_FAST16_MAX ((uint_fast16_t) 0xFFFF) -#define UINT_FAST32_MAX ((uint_fast32_t) 0xFFFFFFFF) +#define INT_FAST8_MIN INT8_MIN +#define INT_FAST8_MAX INT8_MAX +#define INT_FAST16_MIN INT16_MIN +#define INT_FAST16_MAX INT16_MAX +#define INT_FAST32_MIN INT32_MIN +#define INT_FAST32_MAX INT32_MAX +#define UINT_FAST8_MAX UINT8_MAX +#define UINT_FAST16_MAX UINT16_MAX +#define UINT_FAST32_MAX UINT32_MAX /* Integer types capable of holding object pointers */ typedef int intptr_t; typedef unsigned uintptr_t; -#define INTPTR_MIN ((intptr_t)0x8000) -#define INTPTR_MAX ((intptr_t)0x7FFF) -#define UINTPTR_MAX ((uintptr_t) 0xFFFF) +#define INTPTR_MIN INT16_MIN +#define INTPTR_MAX INT16_MAX +#define UINTPTR_MAX UINT16_MAX /* Greatest width integer types */ typedef long intmax_t; typedef unsigned long uintmax_t; -#define INTMAX_MIN ((intmax_t) 0x80000000) -#define INTMAX_MAX ((intmax_t) 0x7FFFFFFF) -#define UINTMAX_MAX ((uintmax_t) 0xFFFFFFFF) +#define INTMAX_MIN INT32_MIN +#define INTMAX_MAX INT32_MAX +#define UINTMAX_MAX UINT32_MAX /* Limits of other integer types */ -#define PTRDIFF_MIN ((int) 0x8000) -#define PTRDIFF_MAX ((int) 0x7FFF) +#define PTRDIFF_MIN INT16_MIN +#define PTRDIFF_MAX INT16_MAX -#define SIG_ATOMIC_MIN ((unsigned char) 0x00) -#define SIG_ATOMIC_MAX ((unsigned char) 0xFF) +#define SIG_ATOMIC_MIN 0 +#define SIG_ATOMIC_MAX UINT8_MAX -#define SIZE_MAX 0xFFFF +#define SIZE_MAX UINT16_MAX /* Macros for minimum width integer constants */ #define INT8_C(c) c diff --git a/test/val/stdint.c b/test/val/stdint.c new file mode 100644 index 000000000..29b48346a --- /dev/null +++ b/test/val/stdint.c @@ -0,0 +1,167 @@ +/* Test definitions from stdint.h */ + +#include <stdio.h> +#include <stdint.h> +#include <stddef.h> +#include <stdlib.h> +#include <limits.h> +#include <signal.h> + +/* All macros from stdint.h must be evaluatable by the preprocessor */ +#if INT8_MIN +#endif +#if INT8_MAX +#endif +#if INT16_MIN +#endif +#if INT16_MAX +#endif +#if INT32_MIN +#endif +#if INT32_MAX +#endif +#if UINT8_MAX +#endif +#if UINT16_MAX +#endif +#if UINT32_MAX +#endif +#if INT_LEAST8_MIN +#endif +#if INT_LEAST8_MAX +#endif +#if INT_LEAST16_MIN +#endif +#if INT_LEAST16_MAX +#endif +#if INT_LEAST32_MIN +#endif +#if INT_LEAST32_MAX +#endif +#if UINT_LEAST8_MAX +#endif +#if UINT_LEAST16_MAX +#endif +#if UINT_LEAST32_MAX +#endif +#if INT_FAST8_MIN +#endif +#if INT_FAST8_MAX +#endif +#if INT_FAST16_MIN +#endif +#if INT_FAST16_MAX +#endif +#if INT_FAST32_MIN +#endif +#if INT_FAST32_MAX +#endif +#if UINT_FAST8_MAX +#endif +#if UINT_FAST16_MAX +#endif +#if UINT_FAST32_MAX +#endif +#if INTPTR_MIN +#endif +#if INTPTR_MAX +#endif +#if UINTPTR_MAX +#endif +#if INTMAX_MIN +#endif +#if INTMAX_MAX +#endif +#if UINTMAX_MAX +#endif +#if PTRDIFF_MIN +#endif +#if PTRDIFF_MAX +#endif +#if SIG_ATOMIC_MIN +#endif +#if SIG_ATOMIC_MAX +#endif +#if SIZE_MAX +#endif + +#define SMIN(type) ((type)(1L << (sizeof(type) * CHAR_BIT - 1))) +#define SMAX(type) ((type)(~SMIN(type))) +#define UMAX(type) ((type)(~(type)0)) + +#define SMIN_CHECK(type, val) \ + if (SMIN(type) != val) { \ + ++failures; \ + printf("Mismatch for %s, minimum (%ld) is not %s (%ld)\n", \ + #type, (long)SMIN(type), #val, (long)val); \ + } +#define SMAX_CHECK(type, val) \ + if (SMAX(type) != val) { \ + ++failures; \ + printf("Mismatch for %s, maximum (%ld) is not %s (%ld)\n", \ + #type, (long)SMAX(type), #val, (long)val); \ + } +#define UMAX_CHECK(type, val) \ + if (UMAX(type) != val) { \ + ++failures; \ + printf("Mismatch for %s, maximum (%lu) is not %s (%lu)\n", \ + #type, (unsigned long)UMAX(type), #val, \ + (unsigned long)val); \ + } + +static unsigned failures = 0; + +int main() +{ + SMIN_CHECK(int8_t, INT8_MIN); + SMAX_CHECK(int8_t, INT8_MAX); + SMIN_CHECK(int16_t, INT16_MIN); + SMAX_CHECK(int16_t, INT16_MAX); + SMIN_CHECK(int32_t, INT32_MIN); + SMAX_CHECK(int32_t, INT32_MAX); + UMAX_CHECK(uint8_t, UINT8_MAX); + UMAX_CHECK(uint16_t, UINT16_MAX); + UMAX_CHECK(uint32_t, UINT32_MAX); + + SMIN_CHECK(int_least8_t, INT_LEAST8_MIN); + SMAX_CHECK(int_least8_t, INT_LEAST8_MAX); + SMIN_CHECK(int_least16_t, INT_LEAST16_MIN); + SMAX_CHECK(int_least16_t, INT_LEAST16_MAX); + SMIN_CHECK(int_least32_t, INT_LEAST32_MIN); + SMAX_CHECK(int_least32_t, INT_LEAST32_MAX); + UMAX_CHECK(uint_least8_t, UINT_LEAST8_MAX); + UMAX_CHECK(uint_least16_t, UINT_LEAST16_MAX); + UMAX_CHECK(uint_least32_t, UINT_LEAST32_MAX); + + SMIN_CHECK(int_fast8_t, INT_FAST8_MIN); + SMAX_CHECK(int_fast8_t, INT_FAST8_MAX); + SMIN_CHECK(int_fast16_t, INT_FAST16_MIN); + SMAX_CHECK(int_fast16_t, INT_FAST16_MAX); + SMIN_CHECK(int_fast32_t, INT_FAST32_MIN); + SMAX_CHECK(int_fast32_t, INT_FAST32_MAX); + UMAX_CHECK(uint_fast8_t, UINT_FAST8_MAX); + UMAX_CHECK(uint_fast16_t, UINT_FAST16_MAX); + UMAX_CHECK(uint_fast32_t, UINT_FAST32_MAX); + + SMIN_CHECK(intptr_t, INTPTR_MIN); + SMAX_CHECK(intptr_t, INTPTR_MAX); + UMAX_CHECK(uintptr_t, UINTPTR_MAX); + + SMIN_CHECK(intmax_t, INTMAX_MIN); + SMAX_CHECK(intmax_t, INTMAX_MAX); + UMAX_CHECK(uintmax_t, UINTMAX_MAX); + + SMIN_CHECK(ptrdiff_t, PTRDIFF_MIN); + SMAX_CHECK(ptrdiff_t, PTRDIFF_MAX); + +#if SIG_ATOMIC_MIN < 0 + SMIN_CHECK(sig_atomic_t, SIG_ATOMIC_MIN); + SMAX_CHECK(sig_atomic_t, SIG_ATOMIC_MAX); +#else + UMAX_CHECK(sig_atomic_t, SIG_ATOMIC_MAX); +#endif + + UMAX_CHECK(size_t, SIZE_MAX); + + return failures; +} From 2f6f5f0da142f2a21f30449fe6de78d24e2987ae Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Wed, 11 Sep 2024 19:20:01 +0200 Subject: [PATCH 2516/2710] Fix problem with #line when there is no whitespace between line number and filename. y --- src/cc65/preproc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 1ee810060..96db1d8fe 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -2913,7 +2913,7 @@ static unsigned GetLineDirectiveNum (void) /* Ensure the buffer is terminated with a '\0' */ SB_Terminate (&Buf); - if (SkipWhitespace (0) != 0 || CurC == '\0') { + if (SB_GetLen (&Buf) > 0) { const char* Str = SB_GetConstBuf (&Buf); if (Str[0] == '\0') { PPWarning ("#line directive interprets number as decimal, not octal"); @@ -2929,9 +2929,10 @@ static unsigned GetLineDirectiveNum (void) } } } else { - PPError ("#line directive requires a simple decimal digit sequence"); + PPError ("#line directive requires a decimal digit sequence"); ClearLine (); } + SkipWhitespace (0); /* Done with the buffer */ SB_Done (&Buf); From 70ca6d420063c0fe0b9abb731232ca533a1d958e Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Wed, 11 Sep 2024 19:21:19 +0200 Subject: [PATCH 2517/2710] Fixed a standard noncompliance: In C99 and above there must be whitespace between a name of an object like macro and its replacement list. --- src/cc65/preproc.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index 96db1d8fe..d033520b8 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -2640,6 +2640,18 @@ static void DoDefine (void) goto Error_Handler; } NextChar (); + + } else { + + /* Object like macro. Check ISO/IEC 9899:1999 (E) 6.10.3p3: + ** "There shall be white-space between the identifier and the + ** replacement list in the definition of an object-like macro." + ** Note: C89 doesn't have this constraint. + */ + if (Std == STD_C99 && !IsSpace (CurC)) { + PPWarning ("ISO C99 requires whitespace after the macro name"); + } + } /* Remove whitespace and comments from the line, store the preprocessed From 36a810cdb23b903ca4f3771a94b3b9a2489e634a Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Thu, 12 Sep 2024 09:10:37 +0200 Subject: [PATCH 2518/2710] Make lastline.sh ignore empty files. Fixes #2514. --- .github/checks/lastline.sh | 2 +- .gitignore | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/checks/lastline.sh b/.github/checks/lastline.sh index d80d2fb57..d243a01e1 100755 --- a/.github/checks/lastline.sh +++ b/.github/checks/lastline.sh @@ -9,7 +9,7 @@ nl=' ' nl=$'\n' r1="${nl}$" -FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | while read f; do +FILES=`find $CHECK_PATH -type f -size +0 \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | while read f; do t=$(tail -c2 $f; printf x) [[ ${t%x} =~ $r1 ]] || echo "$f" done` diff --git a/.gitignore b/.gitignore index 9112484b8..772a2f204 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,4 @@ /cc65.zip /util/atari/*.exe /util/gamate/*.exe - +targettest/cbm/cbmread.prg From efa2020d932e645de0fa21af4c36db16654ff0b4 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Thu, 12 Sep 2024 09:14:57 +0200 Subject: [PATCH 2519/2710] Improved/fixed the time() function: - When the underlying clock_gettime function returned an error, the value returned via *timep was wrong. - Reduced code size by 7 bytes. - Don't suck in ldeaxi. --- libsrc/common/time.s | 51 ++++++++++++++++-------------------- test/val/time-test2.c | 61 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 28 deletions(-) create mode 100644 test/val/time-test2.c diff --git a/libsrc/common/time.s b/libsrc/common/time.s index 36fd36323..4092e71c6 100644 --- a/libsrc/common/time.s +++ b/libsrc/common/time.s @@ -22,55 +22,50 @@ ; Get the time (machine dependent) + .assert timespec::tv_sec = 0, error lda #CLOCK_REALTIME jsr pusha lda #<time ldx #>time jsr _clock_gettime - sta tmp2 - lda #<time - ldx #>time - .assert timespec::tv_sec = 0, error - jsr ldeaxi - sta tmp1 ; Save low byte of result + +; _clock_gettime returns 0 on success and -1 on error. Check that. + + inx ; Did _clock_gettime return -1? + bne @L2 ; Jump if not + +; We had an error so invalidate time. A contains $FF. + + ldy #3 +@L1: sta time,y + dey + bpl @L1 ; Restore timep and check if it is NULL - pla +@L2: pla sta ptr1+1 pla sta ptr1 ; Restore timep ora ptr1+1 ; timep == 0? - beq @L1 + beq @L4 ; timep is not NULL, store the result there ldy #3 - lda sreg+1 +@L3: lda time,y sta (ptr1),y dey - lda sreg - sta (ptr1),y - dey - txa - sta (ptr1),y - dey - lda tmp1 - sta (ptr1),y + bpl @L3 -; If the result is != 0, return -1 +; Load the final result. -@L1: lda tmp2 - beq @L2 - - tax - sta sreg +@L4: lda time+3 sta sreg+1 - rts - -; Reload the low byte of the result and return - -@L2: lda tmp1 + lda time+2 + sta sreg + ldx time+1 + lda time rts .endproc diff --git a/test/val/time-test2.c b/test/val/time-test2.c new file mode 100644 index 000000000..725bbd0e6 --- /dev/null +++ b/test/val/time-test2.c @@ -0,0 +1,61 @@ +/* Another test for time() */ + +#include <stdio.h> +#include <time.h> + +static int failures = 0; +#define INV_TIME ((time_t)-1) +#define TEST_TIME ((time_t)0x78AB1234) + +/* We supply our own clock_gettime function so we can control the values +** supplied to time() internally. +*/ +static time_t timeval; +static int timeres; +int __fastcall__ clock_gettime (clockid_t, struct timespec *tp) +{ + /* Don't touch tp in case of an error */ + if (timeres != -1) { + tp->tv_sec = timeval; + tp->tv_nsec = 0; + } + return timeres; +} + +int main() +{ + time_t res, pres; + + /* First test: Force time() to return an error. Check that both, the + ** returned value and the value passed via pointer are (time_t)-1. + */ + timeval = 42; + timeres = -1; + res = time(&pres); + if (res != INV_TIME || pres != INV_TIME) { + printf("Error in test 1\n"); + ++failures; + } + + /* Second test: Return a valid value and check both results */ + timeval = TEST_TIME; + timeres = 0; + res = time(&pres); + if (res != TEST_TIME || pres != TEST_TIME) { + printf("Error in test 2\n"); + ++failures; + } + + /* Third test: Return no error but an invalid value and check both + ** results + */ + timeval = INV_TIME; + timeres = 0; + res = time(&pres); + if (res != INV_TIME || pres != INV_TIME) { + printf("Error in test 3\n"); + ++failures; + } + + return failures; +} From 3f83cf81f3c62f91eeed4097f01a91fa020c2c02 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Fri, 13 Sep 2024 19:02:13 +0200 Subject: [PATCH 2520/2710] Revert the change to .gitignore so git status doesn't report a clean status as before. --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 772a2f204..9112484b8 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,4 @@ /cc65.zip /util/atari/*.exe /util/gamate/*.exe -targettest/cbm/cbmread.prg + From 001fa05d48bddc68b8369bbb460e11e333a56f79 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Fri, 13 Sep 2024 19:18:31 +0200 Subject: [PATCH 2521/2710] Move the test to the test/standard directory. --- test/{val => standard}/stdint.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/{val => standard}/stdint.c (100%) diff --git a/test/val/stdint.c b/test/standard/stdint.c similarity index 100% rename from test/val/stdint.c rename to test/standard/stdint.c From 6e18e0880adcaf6201e5c805b3905a8b2e0f7924 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Thu, 5 Sep 2024 19:59:02 +0200 Subject: [PATCH 2522/2710] Added/improved the optimizations: * Added a new pass that optimizes PHA/PLA sequences * Added a new pass that optimizes AND/EOR/ORA when an operand is known * Added a run of an existing pass at later stages to remove code that otherwise goes unchanged. * Handle binary operations in OptUnusedLoads in addition to real loads. --- src/cc65/codeent.c | 18 +++++ src/cc65/codeopt.c | 8 +++ src/cc65/coptind.c | 110 ++++++++++++++++++++++++++-- src/cc65/coptind.h | 7 +- src/cc65/coptmisc.c | 172 ++++++++++++++++++++++++++++++++++++++++++++ src/cc65/coptmisc.h | 6 ++ 6 files changed, 315 insertions(+), 6 deletions(-) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 928815934..a870ee981 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -2445,6 +2445,24 @@ static char* RegContentDesc (const RegContents* RC, char* Buf) sprintf (B, "Y:%02X ", RC->RegY); } B += 5; + if (RegValIsUnknown (RC->Ptr1Lo)) { + strcpy (B, "P1L:XX "); + } else { + sprintf (B, "P1L:%02X ", RC->Ptr1Lo); + } + B += 7; + if (RegValIsUnknown (RC->Ptr1Hi)) { + strcpy (B, "P1H:XX "); + } else { + sprintf (B, "P1H:%02X ", RC->Ptr1Hi); + } + B += 7; + if (RegValIsUnknown (RC->Tmp1)) { + strcpy (B, "T1:XX "); + } else { + sprintf (B, "T1:%02X ", RC->Tmp1); + } + B += 6; if (PStatesAreUnknown (RC->PFlags, PSTATE_C)) { strcpy (B, "~"); } else { diff --git a/src/cc65/codeopt.c b/src/cc65/codeopt.c index c9c1592bc..a716ad431 100644 --- a/src/cc65/codeopt.c +++ b/src/cc65/codeopt.c @@ -117,6 +117,7 @@ static OptFunc DOptBNegAX1 = { OptBNegAX1, "OptBNegAX1", 100, 0, static OptFunc DOptBNegAX2 = { OptBNegAX2, "OptBNegAX2", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptBNegAX3 = { OptBNegAX3, "OptBNegAX3", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptBNegAX4 = { OptBNegAX4, "OptBNegAX4", 100, 0, 0, 0, 0, 0 }; +static OptFunc DOptBinOps = { OptBinOps, "OptBinOps", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptBoolCmp = { OptBoolCmp, "OptBoolCmp", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptBoolTrans = { OptBoolTrans, "OptBoolTrans", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptBoolUnary1 = { OptBoolUnary1, "OptBoolUnary1", 40, 0, 0, 0, 0, 0 }; @@ -179,6 +180,7 @@ static OptFunc DOptPush1 = { OptPush1, "OptPush1", 65, 0, static OptFunc DOptPush2 = { OptPush2, "OptPush2", 50, 0, 0, 0, 0, 0 }; static OptFunc DOptPushPop1 = { OptPushPop1, "OptPushPop1", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptPushPop2 = { OptPushPop2, "OptPushPop2", 0, 0, 0, 0, 0, 0 }; +static OptFunc DOptPushPop3 = { OptPushPop3, "OptPushPop3", 0, 0, 0, 0, 0, 0 }; static OptFunc DOptRTS = { OptRTS, "OptRTS", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptRTSJumps1 = { OptRTSJumps1, "OptRTSJumps1", 100, 0, 0, 0, 0, 0 }; static OptFunc DOptRTSJumps2 = { OptRTSJumps2, "OptRTSJumps2", 100, 0, 0, 0, 0, 0 }; @@ -231,6 +233,7 @@ static OptFunc* OptFuncs[] = { &DOptBNegAX2, &DOptBNegAX3, &DOptBNegAX4, + &DOptBinOps, &DOptBoolCmp, &DOptBoolTrans, &DOptBoolUnary1, @@ -292,6 +295,8 @@ static OptFunc* OptFuncs[] = { &DOptPush1, &DOptPush2, &DOptPushPop1, + &DOptPushPop2, + &DOptPushPop3, &DOptRTS, &DOptRTSJumps1, &DOptRTSJumps2, @@ -740,9 +745,11 @@ static unsigned RunOptGroup3 (CodeSeg* S) C += RunOptFunc (S, &DOptStore5, 1); C += RunOptFunc (S, &DOptPushPop1, 1); C += RunOptFunc (S, &DOptPushPop2, 1); + C += RunOptFunc (S, &DOptPushPop3, 1); C += RunOptFunc (S, &DOptPrecalc, 1); C += RunOptFunc (S, &DOptShiftBack, 1); C += RunOptFunc (S, &DOptSignExtended, 1); + C += RunOptFunc (S, &DOptBinOps, 1); Changes += C; @@ -849,6 +856,7 @@ static unsigned RunOptGroup7 (CodeSeg* S) Changes += RunOptFunc (S, &DOptUnusedStores, 1); Changes += RunOptFunc (S, &DOptJumpTarget1, 5); Changes += RunOptFunc (S, &DOptStore5, 1); + Changes += RunOptFunc (S, &DOptTransfers1, 1); } C = RunOptFunc (S, &DOptSize2, 1); diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index 9e9985c10..49855a345 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -151,7 +151,9 @@ static short ZPRegVal (unsigned short Use, const RegContents* RC) unsigned OptUnusedLoads (CodeSeg* S) -/* Remove loads of registers where the value loaded is not used later. */ +/* Remove loads of or operations with registers where the value loaded or +** produced is not used later. +*/ { unsigned Changes = 0; @@ -164,17 +166,24 @@ unsigned OptUnusedLoads (CodeSeg* S) /* Get next entry */ CodeEntry* E = CS_GetEntry (S, I); - /* Check if it's a register load or transfer insn */ - if ((E->Info & (OF_LOAD | OF_XFR | OF_REG_INCDEC)) != 0 && - (N = CS_GetNextEntry (S, I)) != 0 && - !CE_UseLoadFlags (N)) { + /* Check if this is one of the instruction we can operate on */ + int IsOp = (E->Info & (OF_LOAD | OF_XFR | OF_REG_INCDEC)) != 0 || + E->OPC == OP65_AND || + E->OPC == OP65_EOR || + E->OPC == OP65_ORA; + + /* Check for the necessary preconditions */ + if (IsOp && (N = CS_GetNextEntry (S, I)) != 0 && !CE_UseLoadFlags (N)) { /* Check which sort of load or transfer it is */ unsigned R; switch (E->OPC) { + case OP65_AND: case OP65_DEA: + case OP65_EOR: case OP65_INA: case OP65_LDA: + case OP65_ORA: case OP65_TXA: case OP65_TYA: R = REG_A; break; case OP65_DEX: @@ -1342,6 +1351,97 @@ unsigned OptPushPop2 (CodeSeg* S) +unsigned OptPushPop3 (CodeSeg* S) +/* Remove a pha/pla sequence where the contents of A are known */ +{ + unsigned Changes = 0; + unsigned Pha = 0; /* Index of PHA insn */ + unsigned Pla = 0; /* Index of PLA insn */ + CodeEntry* PhaEntry = 0; /* Pointer to PHA */ + + enum { + Searching, + FoundPha, + FoundPla + } State = Searching; + + /* Walk over the entries. Look for a PHA instruction where the contents + ** of A is known followed by a PLA later. + */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Get the input registers */ + const RegInfo* RI = E->RI; + + + const char* Arg; + CodeEntry* X; + switch (State) { + + case Searching: + if (E->OPC == OP65_PHA && RegValIsKnown (RI->In.RegA)) { + /* Found start of sequence */ + Pha = I; + PhaEntry = E; + State = FoundPha; + } + break; + + case FoundPha: + /* Check for several things that abort the sequence: + ** - End of the basic block + ** - Another PHA or any other stack manipulating instruction + ** If we find something that aborts the sequence, start over + ** searching for the next PHA. + */ + if (CE_HasLabel (E)) { + /* Switch back to searching at this instruction */ + State = Searching; + continue; + } + if (E->OPC == OP65_PHA) { + /* Start over at this instruction */ + State = Searching; + continue; + } + if (E->OPC == OP65_PHP || E->OPC == OP65_PLP || E->OPC == OP65_TXS) { + /* Start over at the next instruction */ + State = Searching; + } else if (E->OPC == OP65_PLA) { + /* Switch state. This will also switch to the next insn + ** which is ok. + */ + Pla = I; + State = FoundPla; + } + break; + + case FoundPla: + /* We found the sequence we were looking for. Replace it. */ + Arg = MakeHexArg (PhaEntry->RI->In.RegA); + X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI); + CS_InsertEntry (S, X, Pla + 1); + CS_DelEntry (S, Pla); + CS_DelEntry (S, Pha); + ++Changes; + State = Searching; + break; + } + + /* Next entry */ + ++I; + } + + /* Return the number of changes made */ + return Changes; +} + + + unsigned OptPrecalc (CodeSeg* S) /* Replace immediate operations with the accu where the current contents are ** known by a load of the final value. diff --git a/src/cc65/coptind.h b/src/cc65/coptind.h index 6d39ee1f8..3493543a4 100644 --- a/src/cc65/coptind.h +++ b/src/cc65/coptind.h @@ -50,7 +50,9 @@ unsigned OptUnusedLoads (CodeSeg* S); -/* Remove loads of registers where the value loaded is not used later. */ +/* Remove loads of or operations with registers where the value loaded or +** produced is not used later. +*/ unsigned OptUnusedStores (CodeSeg* S); /* Remove stores into zero page registers that aren't used later */ @@ -91,6 +93,9 @@ unsigned OptPushPop1 (CodeSeg* S); unsigned OptPushPop2 (CodeSeg* S); /* Remove a PHP/PLP sequence were no processor flags changed inside */ +unsigned OptPushPop3 (CodeSeg* S); +/* Remove a pha/pla sequence where the contents of A are known */ + unsigned OptPrecalc (CodeSeg* S); /* Replace immediate operations with the accu where the current contents are ** known by a load of the final value. diff --git a/src/cc65/coptmisc.c b/src/cc65/coptmisc.c index 523fbf17c..332247cf0 100644 --- a/src/cc65/coptmisc.c +++ b/src/cc65/coptmisc.c @@ -733,3 +733,175 @@ unsigned OptLoad2 (CodeSeg* S) /* Return the number of changes made */ return Changes; } + + + +unsigned OptBinOps (CodeSeg* S) +/* Search for an AND/EOR/ORA where the value of A or the operand is known and +** replace it by something simpler. +*/ +{ + unsigned Changes = 0; + + /* Walk over the entries */ + unsigned I = 0; + while (I < CS_GetEntryCount (S)) { + + /* Get next entry */ + CodeEntry* E = CS_GetEntry (S, I); + + /* Get a pointer to the input registers of the insn */ + const RegContents* In = &E->RI->In; + + /* Check for AND/EOR/ORA and a known value in A */ + int Delete = 0; + CodeEntry* X = 0; + switch (E->OPC) { + + case OP65_AND: + if (In->RegA == 0x00) { + /* Zero AND anything gives zero. The instruction can be + ** replaced by an immediate load of zero. + */ + X = NewCodeEntry (OP65_LDA, AM65_IMM, "$00", 0, E->LI); + } else if (In->RegA == 0xFF) { + /* 0xFF AND anything equals the operand. The instruction + ** can be replaced by a simple load of the operand. + */ + X = NewCodeEntry (OP65_LDA, E->AM, E->Arg, 0, E->LI); + } else if (E->AM == AM65_ZP) { + short Operand = -1; + switch (GetKnownReg (E->Use & REG_ZP, In)) { + case REG_TMP1: Operand = In->Tmp1; break; + case REG_PTR1_LO: Operand = In->Ptr1Lo; break; + case REG_PTR1_HI: Operand = In->Ptr1Hi; break; + case REG_SREG_LO: Operand = In->SRegLo; break; + case REG_SREG_HI: Operand = In->SRegHi; break; + } + if (Operand == 0x00) { + /* AND with zero gives zero. The instruction can be + ** replaced by an immediate load of zero. + */ + X = NewCodeEntry (OP65_LDA, AM65_IMM, "$00", 0, E->LI); + } else if (Operand == 0xFF) { + /* AND with 0xFF is a no-op besides setting the flags. + ** The instruction can be removed if the flags aren't + ** used later. + */ + CodeEntry* N = CS_GetNextEntry (S, I); + if (N && !CE_UseLoadFlags (N)) { + Delete = 1; + } + } else if (Operand >= 0) { + /* The instruction can be replaced by an immediate + ** AND. + */ + const char* Arg = MakeHexArg (Operand); + X = NewCodeEntry (OP65_AND, AM65_IMM, Arg, 0, E->LI); + } + } + break; + + case OP65_EOR: + if (In->RegA == 0x00) { + /* Zero EOR anything equals the operand. The instruction + ** can be replaced by a simple load. + */ + X = NewCodeEntry (OP65_LDA, E->AM, E->Arg, 0, E->LI); + } else if (E->AM == AM65_ZP) { + short Operand = -1; + switch (GetKnownReg (E->Use & REG_ZP, In)) { + case REG_TMP1: Operand = In->Tmp1; break; + case REG_PTR1_LO: Operand = In->Ptr1Lo; break; + case REG_PTR1_HI: Operand = In->Ptr1Hi; break; + case REG_SREG_LO: Operand = In->SRegLo; break; + case REG_SREG_HI: Operand = In->SRegHi; break; + } + if (Operand == 0x00) { + /* EOR with 0x00 is a no-op besides setting the flags. + ** The instruction can be removed if the flags aren't + ** used later. + */ + CodeEntry* N = CS_GetNextEntry (S, I); + if (N && !CE_UseLoadFlags (N)) { + Delete = 1; + } + } else if (Operand >= 0) { + /* The instruction can be replaced by an immediate + ** EOR. + */ + const char* Arg = MakeHexArg (Operand); + X = NewCodeEntry (OP65_EOR, AM65_IMM, Arg, 0, E->LI); + } + } + break; + + case OP65_ORA: + if (In->RegA == 0x00) { + /* ORA with 0x00 is a no-op. The instruction can be + ** replaced by a simple load. + */ + X = NewCodeEntry (OP65_LDA, E->AM, E->Arg, 0, E->LI); + } else if (In->RegA == 0xFF) { + /* ORA with 0xFF gives 0xFF. The instruction can be replaced + ** by an immediate load of 0xFF. + */ + X = NewCodeEntry (OP65_LDA, AM65_IMM, "$FF", 0, E->LI); + } else if (E->AM == AM65_ZP) { + short Operand = -1; + switch (GetKnownReg (E->Use & REG_ZP, In)) { + case REG_TMP1: Operand = In->Tmp1; break; + case REG_PTR1_LO: Operand = In->Ptr1Lo; break; + case REG_PTR1_HI: Operand = In->Ptr1Hi; break; + case REG_SREG_LO: Operand = In->SRegLo; break; + case REG_SREG_HI: Operand = In->SRegHi; break; + } + if (Operand == 0x00) { + /* ORA with 0x00 is a no-op besides setting the flags. + ** The instruction can be removed if the flags aren't + ** used later. + */ + CodeEntry* N = CS_GetNextEntry (S, I); + if (N && !CE_UseLoadFlags (N)) { + Delete = 1; + } + } else if (Operand == 0xFF) { + /* ORA with 0xFF results in 0xFF. The instruction can + ** be replaced by a simple load. + */ + X = NewCodeEntry (OP65_LDA, AM65_IMM, "$FF", 0, E->LI); + } else if (Operand >= 0) { + /* The instruction can be replaced by an immediate + ** ORA. + */ + const char* Arg = MakeHexArg (Operand); + X = NewCodeEntry (OP65_ORA, AM65_IMM, Arg, 0, E->LI); + } + } + break; + + default: + break; + + } + + /* If we must delete the instruction, do that. If we have a replacement + ** entry, place it and remove the old one. + */ + if (X) { + CS_InsertEntry (S, X, I+1); + Delete = 1; + } + if (Delete) { + CS_DelEntry (S, I); + ++Changes; + } + + /* Next entry */ + ++I; + + } + + /* Return the number of changes made */ + return Changes; +} diff --git a/src/cc65/coptmisc.h b/src/cc65/coptmisc.h index 89242351c..418b61e94 100644 --- a/src/cc65/coptmisc.h +++ b/src/cc65/coptmisc.h @@ -107,6 +107,12 @@ unsigned OptLoad1 (CodeSeg* S); unsigned OptLoad2 (CodeSeg* S); /* Replace calls to ldaxysp by inline code */ +unsigned OptBinOps (CodeSeg* S); +/* Search for an AND/EOR/ORA where the value of A or the operand is known and +** replace it by something simpler. +*/ + + /* End of coptmisc.h */ From f43cfd1ad0ad2f668a5808ad000bdc2feea5d6da Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sat, 7 Sep 2024 17:19:13 +0200 Subject: [PATCH 2523/2710] Fix the check for CPU flags being used after an instruction that gets removed. Previously only the next instruction was checked for usage of the CPU flags but this fails for certain code. --- src/cc65/codeinfo.c | 24 +++++++++++++----------- src/cc65/codeinfo.h | 3 +++ src/cc65/coptind.c | 6 +++--- src/cc65/coptmisc.c | 9 +++------ 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/cc65/codeinfo.c b/src/cc65/codeinfo.c index 427bfc52b..435794613 100644 --- a/src/cc65/codeinfo.c +++ b/src/cc65/codeinfo.c @@ -560,11 +560,8 @@ fncls_t GetFuncInfo (const char* Name, unsigned int* Use, unsigned int* Chg) *Use = REG_NONE; } - /* Will destroy all registers */ - *Chg = REG_ALL; - - /* and will destroy all processor flags */ - *Chg |= PSTATE_ALL; + /* Will destroy all registers and processor flags */ + *Chg = (REG_ALL | PSTATE_ALL); /* Done */ return FNCLS_GLOBAL; @@ -577,8 +574,7 @@ fncls_t GetFuncInfo (const char* Name, unsigned int* Use, unsigned int* Chg) ** are used mostly in inline assembly anyway. */ *Use = REG_ALL; - *Chg = REG_ALL; - *Chg |= PSTATE_ALL; + *Chg = (REG_ALL | PSTATE_ALL); return FNCLS_NUMERIC; } else { @@ -605,8 +601,7 @@ fncls_t GetFuncInfo (const char* Name, unsigned int* Use, unsigned int* Chg) fprintf (stderr, "No info about internal function '%s'\n", Name); } *Use = REG_ALL; - *Chg = REG_ALL; - *Chg |= PSTATE_ALL; + *Chg = (REG_ALL | PSTATE_ALL); } return FNCLS_BUILTIN; } @@ -615,8 +610,7 @@ fncls_t GetFuncInfo (const char* Name, unsigned int* Use, unsigned int* Chg) ** registers and processor flags are changed */ *Use = REG_EAXY; - *Chg = REG_ALL; - *Chg |= PSTATE_ALL; + *Chg = (REG_ALL | PSTATE_ALL); return FNCLS_UNKNOWN; } @@ -899,6 +893,14 @@ int RegEAXUsed (struct CodeSeg* S, unsigned Index) +int LoadFlagsUsed (struct CodeSeg* S, unsigned Index) +/* Check if one of the flags set by a register load (Z and N) are used. */ +{ + return (GetRegInfo (S, Index, PSTATE_ZN) & PSTATE_ZN) != 0; +} + + + unsigned GetKnownReg (unsigned Use, const RegContents* RC) /* Return the register or zero page location from the set in Use, thats ** contents are known. If Use does not contain any register, or if the diff --git a/src/cc65/codeinfo.h b/src/cc65/codeinfo.h index 14ef54d8f..c57908dad 100644 --- a/src/cc65/codeinfo.h +++ b/src/cc65/codeinfo.h @@ -201,6 +201,9 @@ int RegAXUsed (struct CodeSeg* S, unsigned Index); int RegEAXUsed (struct CodeSeg* S, unsigned Index); /* Check if any of the four bytes in EAX are used. */ +int LoadFlagsUsed (struct CodeSeg* S, unsigned Index); +/* Check if one of the flags set by a register load (Z and N) are used. */ + unsigned GetKnownReg (unsigned Use, const struct RegContents* RC); /* Return the register or zero page location from the set in Use, thats ** contents are known. If Use does not contain any register, or if the diff --git a/src/cc65/coptind.c b/src/cc65/coptind.c index 49855a345..52c47481e 100644 --- a/src/cc65/coptind.c +++ b/src/cc65/coptind.c @@ -151,8 +151,8 @@ static short ZPRegVal (unsigned short Use, const RegContents* RC) unsigned OptUnusedLoads (CodeSeg* S) -/* Remove loads of or operations with registers where the value loaded or -** produced is not used later. +/* Remove loads of or operations with registers where the value loaded or +** produced is not used later. */ { unsigned Changes = 0; @@ -173,7 +173,7 @@ unsigned OptUnusedLoads (CodeSeg* S) E->OPC == OP65_ORA; /* Check for the necessary preconditions */ - if (IsOp && (N = CS_GetNextEntry (S, I)) != 0 && !CE_UseLoadFlags (N)) { + if (IsOp && (N = CS_GetNextEntry (S, I)) != 0 && !LoadFlagsUsed (S, I+1)) { /* Check which sort of load or transfer it is */ unsigned R; diff --git a/src/cc65/coptmisc.c b/src/cc65/coptmisc.c index 332247cf0..e48d469a1 100644 --- a/src/cc65/coptmisc.c +++ b/src/cc65/coptmisc.c @@ -788,8 +788,7 @@ unsigned OptBinOps (CodeSeg* S) ** The instruction can be removed if the flags aren't ** used later. */ - CodeEntry* N = CS_GetNextEntry (S, I); - if (N && !CE_UseLoadFlags (N)) { + if (!LoadFlagsUsed (S, I+1)) { Delete = 1; } } else if (Operand >= 0) { @@ -822,8 +821,7 @@ unsigned OptBinOps (CodeSeg* S) ** The instruction can be removed if the flags aren't ** used later. */ - CodeEntry* N = CS_GetNextEntry (S, I); - if (N && !CE_UseLoadFlags (N)) { + if (!LoadFlagsUsed (S, I+1)) { Delete = 1; } } else if (Operand >= 0) { @@ -861,8 +859,7 @@ unsigned OptBinOps (CodeSeg* S) ** The instruction can be removed if the flags aren't ** used later. */ - CodeEntry* N = CS_GetNextEntry (S, I); - if (N && !CE_UseLoadFlags (N)) { + if (!LoadFlagsUsed (S, I+1)) { Delete = 1; } } else if (Operand == 0xFF) { From 231ab4169bd54696d3742214eb73a6527f9b7ff1 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sat, 7 Sep 2024 17:20:27 +0200 Subject: [PATCH 2524/2710] Added a test. --- test/val/and-eor-ora-optimizations.c | 86 ++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 test/val/and-eor-ora-optimizations.c diff --git a/test/val/and-eor-ora-optimizations.c b/test/val/and-eor-ora-optimizations.c new file mode 100644 index 000000000..6b5aba68c --- /dev/null +++ b/test/val/and-eor-ora-optimizations.c @@ -0,0 +1,86 @@ +/* Test some new optimization passes */ + +#include <stdio.h> + +static unsigned failures = 0; + +int func0() +{ + unsigned a = 0x1234, b = 0x55AA; + return (a & 0x00FF) & (b & 0xFF00); +} + +int func1() +{ + unsigned a = 0x1234, b = 0x55AA; + return (0x00FF & a) & (0xFF00 & b); +} + +int func2() +{ + unsigned a = 0x1234, b = 0x55AA; + return (a | 0x00FF) & (b | 0xFF00); +} + +int func3() +{ + unsigned a = 0x1234, b = 0x55AA; + return (0x00FF | a) & (0xFF00 | b); +} + +int func4() +{ + unsigned a = 0x1234, b = 0x55AA; + return (a | 0x00FF) | (b | 0xFF00); +} + +int func5() +{ + unsigned a = 0x1234, b = 0x55AA; + return (0x00FF | a) | (0xFF00 | b); +} + +int func6() +{ + unsigned a = 0x1234, b = 0x55AA; + return (a ^ 0x00FF) & (b & 0xFF00); +} + +int func7() +{ + unsigned a = 0x1234, b = 0x55AA; + return (0x00FF ^ a) & (0xFF00 & b); +} + +int func8() +{ + unsigned a = 0x1234, b = 0x55AA; + return (a | 0x00FF) | (b ^ 0xFF00); +} + +int func9() +{ + unsigned a = 0x1234, b = 0x55AA; + return (0x00FF | a) | (0xFF00 ^ b); +} + +void onetest(unsigned count, int (*f1)(void), int (*f2)(void), int result) +{ + int r1 = f1(); + int r2 = f2(); + if (r1 != result || r2 != result) { + printf("Test %u failed! Expected 0x%04X but got 0x%04X/0x%04X\n", + count, result, r1, r2); + ++failures; + } +} + +int main() +{ + onetest(1, func0, func1, 0x0000); + onetest(2, func2, func3, 0x12AA); + onetest(3, func4, func5, 0xFFFF); + onetest(4, func6, func7, 0x1000); + onetest(5, func8, func9, 0xBAFF); + return failures; +} From 175ec65af1324ac5f3737c336e7b7b049b777a27 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sat, 14 Sep 2024 21:12:19 +0200 Subject: [PATCH 2525/2710] Fix #2520. --- src/cc65/ppexpr.c | 2 +- test/val/bug2520.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 test/val/bug2520.c diff --git a/src/cc65/ppexpr.c b/src/cc65/ppexpr.c index 8d8c0b65d..dc6803f91 100644 --- a/src/cc65/ppexpr.c +++ b/src/cc65/ppexpr.c @@ -726,7 +726,7 @@ static void PPhieQuest (PPExpr* Expr) PPhieQuest (&Expr3); /* Set the result */ - Expr->IVal = Expr->IVal ? Expr2.IVal != 0 : Expr3.IVal != 0; + Expr->IVal = Expr->IVal ? Expr2.IVal : Expr3.IVal; /* Restore evaluation as before */ PPEvaluationEnabled = PPEvaluationEnabledPrev; diff --git a/test/val/bug2520.c b/test/val/bug2520.c new file mode 100644 index 000000000..7a216df4d --- /dev/null +++ b/test/val/bug2520.c @@ -0,0 +1,4 @@ +#if (1 ? 2 : 0) != 2 +#error +#endif +int main() { return 0; } From 7dc09fdb05051de5273abb83679924b7b265a680 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 15 Sep 2024 19:22:16 +0200 Subject: [PATCH 2526/2710] add test related to bug#2515 / pr#2518 --- test/misc/Makefile | 8 ++++++++ test/misc/bug2515.c | 4 ++++ test/misc/bug2515.c99.ref | 2 ++ test/misc/bug2515.ref | 1 + 4 files changed, 15 insertions(+) create mode 100644 test/misc/bug2515.c create mode 100644 test/misc/bug2515.c99.ref create mode 100644 test/misc/bug2515.ref diff --git a/test/misc/Makefile b/test/misc/Makefile index cfcae0530..ebae0964e 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -102,6 +102,14 @@ $(WORKDIR)/bug1265.$1.$2.prg: bug1265.c | $(WORKDIR) $(LD65) -t sim$2 -o $$@ $$(@:.prg=.o) sim$2.lib $(NULLERR) $(SIM65) $(SIM65FLAGS) $$@ $(NULLOUT) $(NULLERR) +# should not compile, but gives different diagnostics in C99 mode than in others +$(WORKDIR)/bug2515.$1.$2.prg: bug2515.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug2515.$1.$2.prg) + $(NOT) $(CC65) --standard c99 -t sim$2 -$1 -o $$(@:.prg=.s) $$< 2>$(WORKDIR)/bug2515.$1.$2.out + $(ISEQUAL) $(WORKDIR)/bug2515.$1.$2.out bug2515.c99.ref + $(NOT) $(CC65) -t sim$2 -$1 -o $$(@:.prg=.s) $$< 2>$(WORKDIR)/bug2515.$1.$2.out + $(ISEQUAL) $(WORKDIR)/bug2515.$1.$2.out bug2515.ref + # this one requires -Werror $(WORKDIR)/bug1768.$1.$2.prg: bug1768.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1768.$1.$2.prg) diff --git a/test/misc/bug2515.c b/test/misc/bug2515.c new file mode 100644 index 000000000..62ee52a25 --- /dev/null +++ b/test/misc/bug2515.c @@ -0,0 +1,4 @@ + +#line 13"x" +#define X"y" +int main() { foo; } diff --git a/test/misc/bug2515.c99.ref b/test/misc/bug2515.c99.ref new file mode 100644 index 000000000..f6cf2fcea --- /dev/null +++ b/test/misc/bug2515.c99.ref @@ -0,0 +1,2 @@ +x:13: Warning: ISO C99 requires whitespace after the macro name +x:14: Error: Undeclared identifier 'foo' diff --git a/test/misc/bug2515.ref b/test/misc/bug2515.ref new file mode 100644 index 000000000..affbaebb9 --- /dev/null +++ b/test/misc/bug2515.ref @@ -0,0 +1 @@ +x:14: Error: Undeclared identifier 'foo' From 9c69aac09769810efe1ab92d748e2d93abcfaf19 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Tue, 17 Sep 2024 11:45:46 +0200 Subject: [PATCH 2527/2710] Fix some issues with signedness in preprocessor expressions. Do also disallow comma expressions since the aren't compliant and collide with macro invocations. --- src/cc65/ppexpr.c | 31 +++++++------------------------ test/err/bug2523.c | 3 +++ test/val/bug2523.c | 29 +++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 24 deletions(-) create mode 100644 test/err/bug2523.c create mode 100644 test/val/bug2523.c diff --git a/src/cc65/ppexpr.c b/src/cc65/ppexpr.c index 8d8c0b65d..bedb01507 100644 --- a/src/cc65/ppexpr.c +++ b/src/cc65/ppexpr.c @@ -55,7 +55,6 @@ static int PPEvaluationFailed = 0; -static void PPhie0 (PPExpr* Expr); static void PPhie1 (PPExpr* Expr); @@ -138,7 +137,7 @@ static void PPhiePrimary (PPExpr* Expr) ** recursively. */ NextToken (); - PPhie0 (Expr); + PPhie1 (Expr); ConsumeRParen (); break; @@ -263,6 +262,7 @@ void PPhie10 (PPExpr* Expr) NextToken (); PPhie10 (Expr); Expr->IVal = !Expr->IVal; + Expr->Flags &= ~PPEXPR_UNSIGNED; /* Result is signed */ break; case TOK_CEOF: @@ -424,10 +424,10 @@ static void PPhie_compare (const token_t* Ops, /* List of generators */ } } } - } - /* The result is signed */ - Expr->Flags &= ~PPEXPR_UNSIGNED; + /* The result is signed */ + Expr->Flags &= ~PPEXPR_UNSIGNED; + } } @@ -711,7 +711,7 @@ static void PPhieQuest (PPExpr* Expr) /* Parse second expression */ PPExprInit (&Expr2); - PPhie0 (&Expr2); + PPhie1 (&Expr2); /* Skip the colon */ ConsumeColon (); @@ -809,23 +809,6 @@ static void PPhie1 (PPExpr* Expr) -static void PPhie0 (PPExpr* Expr) -/* Handle the comma "," operator */ -{ - PPhie1 (Expr); - - while (CurTok.Tok == TOK_COMMA) { - /* Skip the comma */ - NextToken (); - /* Reset the expression */ - PPExprInit (Expr); - /* Use the next operand as the value instead */ - PPhie1 (Expr); - } -} - - - void ParsePPExprInLine (PPExpr* Expr) /* Parse a line for PP expression */ { @@ -836,7 +819,7 @@ void ParsePPExprInLine (PPExpr* Expr) /* Parse */ PPExprInit (Expr); - PPhie0 (Expr); + PPhie1 (Expr); /* If the evaluation fails, the result is always zero */ if (PPEvaluationFailed) { diff --git a/test/err/bug2523.c b/test/err/bug2523.c new file mode 100644 index 000000000..7ab798557 --- /dev/null +++ b/test/err/bug2523.c @@ -0,0 +1,3 @@ +#if (1, 0) < 0 +#error +#endif diff --git a/test/val/bug2523.c b/test/val/bug2523.c new file mode 100644 index 000000000..8db72d055 --- /dev/null +++ b/test/val/bug2523.c @@ -0,0 +1,29 @@ +#if (0u - 1) < 0 +#error +#endif + +#if !1u - 1 > 0 +#error +#endif + +#if (1 & 1u) - 2 < 0 +#error +#endif + +#if (1 | 1u) - 2 < 0 +#error +#endif + +#if (1 ^ 1u) - 2 < 0 +#error +#endif + +#if (1u >> 1) - 2 < 0 +#error +#endif + +#if (0u << 1) - 1 < 0 +#error +#endif + +int main() { return 0; } From 41951a1345c301986b473ed113ad20f6497e6bcd Mon Sep 17 00:00:00 2001 From: Sven Oliver Moll <svolli@svolli.de> Date: Thu, 26 Sep 2024 19:33:26 +0200 Subject: [PATCH 2528/2710] updated customizing documentation "weak = yes" is now "type = weak" --- doc/customizing.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/customizing.sgml b/doc/customizing.sgml index e18bcf86c..58631eb3c 100644 --- a/doc/customizing.sgml +++ b/doc/customizing.sgml @@ -140,7 +140,7 @@ FEATURES { SYMBOLS { # Define the stack size for the application - __STACKSIZE__: value = $0200, weak = yes; + __STACKSIZE__: value = $0200, type = weak; } </code></tscreen> From 02840d503c7196ecd528e6ad0109ba1bd772c988 Mon Sep 17 00:00:00 2001 From: lcvgit <121000412+lcvgit@users.noreply.github.com> Date: Mon, 21 Oct 2024 10:00:48 -0500 Subject: [PATCH 2529/2710] Fix checkversion.c Add missing shifts for checking version from __CC65__. --- samples/checkversion.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/checkversion.c b/samples/checkversion.c index 1d3494a87..ca8843921 100644 --- a/samples/checkversion.c +++ b/samples/checkversion.c @@ -10,11 +10,11 @@ #include <stdio.h> #include <stdlib.h> -#if ((__CC65__ & 0xff00) > 3) || ((__CC65__ & 0x000f) > 0) +#if (((__CC65__ & 0xff00) >> 8) > 3) || ((__CC65__ & 0x000f) > 0) /* compiler version is 2.19-git or higher */ # define VER_MAJOR ((__CC65__ >> 8) & 0xff) # define VER_MINOR (__CC65__ & 0xff) -#elif ((__CC65__ & 0xff00) == 3) +#elif (((__CC65__ & 0xff00) >> 8) == 3) /* broken values in version 2.16 - 2.19-git before the bug was fixed */ # define VER_MAJOR 2 # define VER_MINOR (((__CC65__ >> 4) & 0x0f) + 16) From c41eb007e48adcd5890b75111d63438111caf0f5 Mon Sep 17 00:00:00 2001 From: lcvgit <121000412+lcvgit@users.noreply.github.com> Date: Mon, 21 Oct 2024 10:09:00 -0500 Subject: [PATCH 2530/2710] Update checkversion.c Add missing shifts. --- samples/checkversion.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/checkversion.c b/samples/checkversion.c index ca8843921..f2a9d4a49 100644 --- a/samples/checkversion.c +++ b/samples/checkversion.c @@ -10,11 +10,11 @@ #include <stdio.h> #include <stdlib.h> -#if (((__CC65__ & 0xff00) >> 8) > 3) || ((__CC65__ & 0x000f) > 0) +#if ((__CC65__ >> 8) > 3) || ((__CC65__ & 0x000f) > 0) /* compiler version is 2.19-git or higher */ # define VER_MAJOR ((__CC65__ >> 8) & 0xff) # define VER_MINOR (__CC65__ & 0xff) -#elif (((__CC65__ & 0xff00) >> 8) == 3) +#elif ((__CC65__ >> 8) == 3) /* broken values in version 2.16 - 2.19-git before the bug was fixed */ # define VER_MAJOR 2 # define VER_MINOR (((__CC65__ >> 4) & 0x0f) + 16) From eb6003aaf77d91c39e81b7bd54bd206c15a0f19f Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps2.nl> Date: Fri, 9 Aug 2024 13:11:02 +0200 Subject: [PATCH 2531/2710] Mikey enumeration values for cc65 include files and new bit definitions for ca65 --- asminc/lynx.inc | 347 ++++++++++++++++++++++++++++++----------------- include/_mikey.h | 255 +++++++++++++++++++++++++++------- 2 files changed, 430 insertions(+), 172 deletions(-) diff --git a/asminc/lynx.inc b/asminc/lynx.inc index 0d34e1c7c..d6a8cd70a 100644 --- a/asminc/lynx.inc +++ b/asminc/lynx.inc @@ -83,7 +83,7 @@ MATHJ = $FC6F SPRCTL0 = $FC80 ; Sprite bits-per-pixel definitions -BPP_MASK = %11000000 ; Mask for settings bits per pixel +BPP_MASK = %11000000 ; Mask for settings bits per pixel BPP_1 = %00000000 BPP_2 = %01000000 BPP_3 = %10000000 @@ -94,23 +94,23 @@ VFLIP = %00010000 ; Sprite types - redefined to reflect the reality caused by the shadow error TYPE_SHADOW = %00000111 TYPE_XOR = %00000110 -TYPE_NONCOLL = %00000101 ; Non-colliding +TYPE_NONCOLL = %00000101 ; Non-colliding TYPE_NORMAL = %00000100 TYPE_BOUNDARY = %00000011 -TYPE_BSHADOW = %00000010 ; Background shadow -TYPE_BACKNONCOLL = %00000001 ; Background non-colliding +TYPE_BSHADOW = %00000010 ; Background shadow +TYPE_BACKNONCOLL = %00000001 ; Background non-colliding TYPE_BACKGROUND = %00000000 SPRCTL1 = $FC81 LITERAL = %10000000 PACKED = %00000000 -ALGO3 = %01000000 ; Broken, do not set this bit! +ALGO3 = %01000000 ; Broken, do not set this bit! ; Sprite reload mask definitions RELOAD_MASK = %00110000 -RENONE = %00000000 ; Reload nothing -REHV = %00010000 ; Reload hsize, vsize -REHVS = %00100000 ; Reload hsize, vsize, stretch -REHVST = %00110000 ; Reload hsize, vsize, stretch, tilt +RENONE = %00000000 ; Reload nothing +REHV = %00010000 ; Reload hsize, vsize +REHVS = %00100000 ; Reload hsize, vsize, stretch +REHVST = %00110000 ; Reload hsize, vsize, stretch, tilt ; More sprite control 1 bit definitions REUSEPAL = %00001000 SKIP = %00000100 @@ -138,8 +138,9 @@ HOWIE = $FCC4 ; *** Mikey Addresses ; *** -; Mikey Timers +; Mikey timers +; Logical timer names TIMER0 = $FD00 TIMER1 = $FD04 TIMER2 = $FD08 @@ -148,20 +149,20 @@ TIMER4 = $FD10 TIMER5 = $FD14 TIMER6 = $FD18 TIMER7 = $FD1C -HTIMER = $FD00 ; horizontal line timer (timer 0) -VTIMER = $FD08 ; vertical blank timer (timer 2) -STIMER = $FD1C ; sound timer (timer 7) +HTIMER = TIMER0 ; horizontal line timer (timer 0) +VTIMER = TIMER2 ; vertical blank timer (timer 2) +STIMER = TIMER7 ; sound timer (timer 7) -HTIMBKUP = $FD00 ; horizontal line timer (timer 0) +HTIMBKUP = $FD00 ; horizontal line timer (timer 0) HTIMCTLA = $FD01 HTIMCNT = $FD02 HTIMCTLB = $FD03 -VTIMBKUP = $FD08 ; vertical blank timer (timer 2) +VTIMBKUP = $FD08 ; vertical blank timer (timer 2) VTIMCTLA = $FD09 VTIMCNT = $FD0A VTIMCTLB = $FD0B -BAUDBKUP = $FD10 ; serial timer (timer 4) -STIMBKUP = $FD1C ; sound timer (timer 7) +BAUDBKUP = $FD10 ; serial timer (timer 4) +STIMBKUP = $FD1C ; sound timer (timer 7) STIMCTLA = $FD1D STIMCNT = $FD1E STIMCTLB = $FD1F @@ -199,129 +200,227 @@ TIM7CTLA = $FD1D TIM7CNT = $FD1E TIM7CTLB = $FD1F +; Timer offsets +TIM_BACKUP = 0 +TIM_CONTROLA = 1 +TIM_COUNT = 2 +TIM_CONTROLB = 3 + +; TIM_CONTROLA control bits +ENABLE_INT = %10000000 +RESET_DONE = %01000000 +ENABLE_RELOAD = %00010000 +ENABLE_COUNT = %00001000 +AUD_CLOCK_MASK = %00000111 + +; Clock settings +AUD_LINKING = %00000111 +AUD_64 = %00000110 +AUD_32 = %00000101 +AUD_16 = %00000100 +AUD_8 = %00000011 +AUD_4 = %00000010 +AUD_2 = %00000001 +AUD_1 = %00000000 + +; TIM_CONTROLB control bits +TIMER_DONE = %00001000 +LAST_CLOCK = %00000100 +BORROW_IN = %00000010 +BORROW_OUT = %00000001 + ; Mikey Audio -AUDIO0 = $FD20 ; audio channel 0 -AUDIO1 = $FD28 ; audio channel 1 -AUDIO2 = $FD30 ; audio channel 2 -AUDIO3 = $FD38 ; audio channel 3 +AUDIO0 = $FD20 ; audio channel 0 +AUDIO1 = $FD28 ; audio channel 1 +AUDIO2 = $FD30 ; audio channel 2 +AUDIO3 = $FD38 ; audio channel 3 -AUD0VOL = $FD20 -AUD0FEED = $FD21 -AUD0OUT = $FD22 -AUD0SHIFT = $FD23 -AUD0BKUP = $FD24 -AUD0CTLA = $FD25 -AUD0CNT = $FD26 -AUD0CTLB = $FD27 -AUD1VOL = $FD28 -AUD1FEED = $FD29 -AUD1OUT = $FD2A -AUD1SHIFT = $FD2B -AUD1BKUP = $FD2C -AUD1CTLA = $FD2D -AUD1CNT = $FD2E -AUD1CTLB = $FD2F -AUD2VOL = $FD30 -AUD2FEED = $FD31 -AUD2OUT = $FD32 -AUD2SHIFT = $FD33 -AUD2BKUP = $FD34 -AUD2CTLA = $FD35 -AUD2CNT = $FD36 -AUD2CTLB = $FD37 -AUD3VOL = $FD38 -AUD3FEED = $FD39 -AUD3OUT = $FD3A -AUD3SHIFT = $FD3B -AUD3BKUP = $FD3C -AUD3CTLA = $FD3D -AUD3CNT = $FD3E -AUD3CTLB = $FD3F +AUD0VOL = $FD20 +AUD0FEED = $FD21 +AUD0OUT = $FD22 +AUD0SHIFT = $FD23 +AUD0BKUP = $FD24 +AUD0CTLA = $FD25 +AUD0CNT = $FD26 +AUD0CTLB = $FD27 +AUD1VOL = $FD28 +AUD1FEED = $FD29 +AUD1OUT = $FD2A +AUD1SHIFT = $FD2B +AUD1BKUP = $FD2C +AUD1CTLA = $FD2D +AUD1CNT = $FD2E +AUD1CTLB = $FD2F +AUD2VOL = $FD30 +AUD2FEED = $FD31 +AUD2OUT = $FD32 +AUD2SHIFT = $FD33 +AUD2BKUP = $FD34 +AUD2CTLA = $FD35 +AUD2CNT = $FD36 +AUD2CTLB = $FD37 +AUD3VOL = $FD38 +AUD3FEED = $FD39 +AUD3OUT = $FD3A +AUD3SHIFT = $FD3B +AUD3BKUP = $FD3C +AUD3CTLA = $FD3D +AUD3CNT = $FD3E +AUD3CTLB = $FD3F + +; AUD_CONTROL bits are almost identical to TIM_CONTROLA bits. +; See TIM_CONTROLA above for the other definitions +FEEDBACK_7 = %10000000 +ENABLE_INTEGRATE = %00100000 + +; Stereo control registers follow +; Stereo capability does not exist in all Lynxes +; Left and right may be reversed, and if so will be corrected in a later +; release + +ATTENREG0 = $FD40 ; Stereo attenuation registers +ATTENREG1 = $FD41 +ATTENREG2 = $FD42 +ATTENREG3 = $FD43 +LEFT_ATTENMASK = %11110000 +RIGHT_ATTENMASK = %00001111 + +; Bit definitions for MPAN and MSTEREO registers +LEFT3_SELECT = %10000000 +LEFT2_SELECT = %01000000 +LEFT1_SELECT = %00100000 +LEFT0_SELECT = %00010000 +RIGHT3_SELECT = %00001000 +RIGHT2_SELECT = %00000100 +RIGHT1_SELECT = %00000010 +RIGHT0_SELECT = %00000001 + +MPAN = $FD44 MSTEREO = $FD50 -; Mikey Misc - -; Interrupt bits in INTRST and INTSET -TIMER0_INTERRUPT = $01 -TIMER1_INTERRUPT = $02 -TIMER2_INTERRUPT = $04 -TIMER3_INTERRUPT = $08 -TIMER4_INTERRUPT = $10 -TIMER5_INTERRUPT = $20 -TIMER6_INTERRUPT = $40 -TIMER7_INTERRUPT = $80 - -HBL_INTERRUPT = TIMER0_INTERRUPT -VBL_INTERRUPT = TIMER2_INTERRUPT -SERIAL_INTERRUPT = TIMER4_INTERRUPT -SND_INTERRUPT = TIMER7_INTERRUPT +; Mikey interrupts INTRST = $FD80 INTSET = $FD81 -MAGRDY0 = $FD84 -MAGRDY1 = $FD85 -AUDIN = $FD86 -SYSCTL1 = $FD87 -MIKEYHREV = $FD88 -MIKEYSREV = $FD89 +; Interrupt bits in INTRST and INTSET +TIMER0_INTERRUPT = %00000001 +TIMER1_INTERRUPT = %00000010 +TIMER2_INTERRUPT = %00000100 +TIMER3_INTERRUPT = %00001000 +TIMER4_INTERRUPT = %00010000 +TIMER5_INTERRUPT = %00100000 +TIMER6_INTERRUPT = %01000000 +TIMER7_INTERRUPT = %10000000 -IODIR = $FD8A -IODAT = $FD8B +HBL_INTERRUPT = TIMER0_INTERRUPT +VBL_INTERRUPT = TIMER2_INTERRUPT +SERIAL_INTERRUPT = TIMER4_INTERRUPT +SND_INTERRUPT = TIMER7_INTERRUPT + +MAGRDY0 = $FD84 +MAGRDY1 = $FD85 +AUDIN = $FD86 +SYSCTL1 = $FD87 +; SYSCTL1 bit definitions +POWERON = %00000010 +CART_ADDR_STROBE = %00000001 + +MIKEYHREV = $FD88 +MIKEYSREV = $FD89 + +IODIR = $FD8A +IODAT = $FD8B ; IODIR and IODAT bit definitions -AUDIN_BIT = $10 ; Note that there is also the address AUDIN -READ_ENABLE = $10 ; Same bit for AUDIN_BIT -RESTLESS = $08 -NOEXP = $04 ; If set, redeye is not connected -CART_ADDR_DATA = $02 -CART_POWER_OFF = $02 ; Same bit for CART_ADDR_DATA -EXTERNAL_POWER = $01 +AUDIN_BIT = %00010000 ; Note that there is also the address AUDIN +READ_ENABLE = %00010000 ; Same bit for AUDIN_BIT +RESTLESS = %00001000 +NOEXP = %00000100 ; If set, redeye is not connected +CART_ADDR_DATA = %00000010 +CART_POWER_OFF = %00000010 ; Same bit for CART_ADDR_DATA +EXTERNAL_POWER = %00000001 -SERCTL = $FD8C +SERCTL = $FD8C ; SERCTL bit definitions for write operations -TXINTEN = $80 -RXINTEN = $40 -PAREN = $10 -RESETERR = $08 -TXOPEN = $04 -TXBRK = $02 -PAREVEN = $01 +TXINTEN = %10000000 +RXINTEN = %01000000 +PAREN = %00010000 +RESETERR = %00001000 +TXOPEN = %00000100 +TXBRK = %00000010 +PAREVEN = %00000001 ; SERCTL bit definitions for read operations -TXRDY = $80 -RXRDY = $40 -TXEMPTY = $20 -PARERR = $10 -OVERRUN = $08 -FRAMERR = $04 -RXBRK = $02 -PARBIT = $01 +TXRDY = %10000000 +RXRDY = %01000000 +TXEMPTY = %00100000 +PARERR = %00010000 +OVERRUN = %00001000 +FRAMERR = %00000100 +RXBRK = %00000010 +PARBIT = %00000001 -SERDAT = $FD8D -SDONEACK = $FD90 -CPUSLEEP = $FD91 -DISPCTL = $FD92 -PBKUP = $FD93 -DISPADRL = $FD94 -DISPADRH = $FD95 -MTEST0 = $FD9C -MTEST1 = $FD9D -MTEST2 = $FD9E -PALETTE = $FDA0 ; hardware rgb palette -GCOLMAP = $FDA0 ; hardware rgb palette (green) -RBCOLMAP = $FDB0 ; hardware rgb palette (red-blue) +SERDAT = $FD8D +SDONEACK = $FD90 +CPUSLEEP = $FD91 +DISPCTL = $FD92 +; DISPCTL bit definitions +DISP_COLOR = %10000000 ; must be set to 1 +DISP_FOURBIT = %01000000 ; must be set to 1 +DISP_FLIP = %00100000 +DMA_ENABLE = %00010000 ; must be set to 1 +PBKUP = $FD93 +DISPADRL = $FD94 +DISPADRH = $FD95 -; *** -; *** Misc Hardware + 6502 vectors -; *** +MTEST0 = $FD9C +; MTEST0 bit definitions +AT_CNT16 = %10000000 +AT_TEST = %01000000 +XCLKEN = %00100000 +UART_TURBO = %00010000 +ROM_SEL = %00001000 +ROM_TEST = %00000100 +M_TEST = %00000010 +CPU_TEST = %00000001 -MAPCTL = $FFF9 -VECTORS = $FFFB -INTVECTL = $FFFE -INTVECTH = $FFFF -RSTVECTL = $FFFC -RSTVECTH = $FFFD -NMIVECTL = $FFFA -NMIVECTH = $FFFB +MTEST1 = $FD9D +; MTEST1 bit definitions +P_CNT16 = %01000000 +REF_CNT16 = %00100000 +VID_TRIG = %00010000 +REF_TRIG = %00001000 +VID_DMA_DIS = %00000100 +REF_FAST = %00000010 +REF_DIS = %00000001 +MTEST2 = $FD9E +; MTEST2 bit definitions +V_STROBE = %00010000 +V_ZERO = %00001000 +H_120 = %00000100 +H_ZERO = %00000010 +V_BLANKEF = %00000001 + +PALETTE = $FDA0 ; hardware rgb palette +GCOLMAP = $FDA0 ; hardware rgb palette (green) +RBCOLMAP = $FDB0 ; hardware rgb palette (red-blue) + +; Memory mapping control and 6502 vectors + +MAPCTL = $FFF9 +; MAPCTL bit definitions +TURBO_DISABLE = %10000000 +VECTOR_SPACE = %00001000 ; 1 maps RAM into specified space +ROM_SPACE = %00000100 +MIKEY_SPACE = %00000010 +SUZY_SPACE = %00000001 + +VECTORS = $FFFB +INTVECTL = $FFFE +INTVECTH = $FFFF +RSTVECTL = $FFFC +RSTVECTH = $FFFD +NMIVECTL = $FFFA +NMIVECTH = $FFFB diff --git a/include/_mikey.h b/include/_mikey.h index b9b7f6906..9a50745b2 100644 --- a/include/_mikey.h +++ b/include/_mikey.h @@ -27,7 +27,7 @@ #ifndef __MIKEY_H #define __MIKEY_H -/* timer structure */ +/* Timer structure */ typedef struct _mikey_timer { unsigned char reload; unsigned char control; @@ -39,7 +39,7 @@ typedef struct _mikey_all_timers { struct _mikey_timer timer[8]; } _mikey_all_timers; -/* audio channel structure */ +/* Audio channel structure */ typedef struct _mikey_audio { unsigned char volume; unsigned char feedback; @@ -53,54 +53,213 @@ typedef struct _mikey_audio { /* Define a structure with the mikey register offsets */ struct __mikey { - struct _mikey_timer timer0; // 0xFD00 - struct _mikey_timer timer1; // 0xFD04 - struct _mikey_timer timer2; // 0xFD08 - struct _mikey_timer timer3; // 0xFD0C - struct _mikey_timer timer4; // 0xFD10 - struct _mikey_timer timer5; // 0xFD14 - struct _mikey_timer timer6; // 0xFD18 - struct _mikey_timer timer7; // 0xFD1C - struct _mikey_audio channel_a; // 0xFD20 - struct _mikey_audio channel_b; // 0xFD28 - struct _mikey_audio channel_c; // 0xFD30 - struct _mikey_audio channel_d; // 0xFD38 - unsigned char attena; // 0xFD40 ?? not yet allocated? - unsigned char attenb; // 0xFD41 | - unsigned char attenc; // 0xFD42 | - unsigned char attend; // 0xFD43 | - unsigned char panning; // 0xFD44 | - unsigned char unused0[11]; // 0xFD45 - 0xFD4F not used - unsigned char mstereo; // 0xFD50 stereo control bits - unsigned char unused1[47]; // 0xFD51 - 0xFD7F not used - unsigned char intrst; // 0xFD80 interrupt poll 0 - unsigned char intset; // 0xFD81 interrupt poll 1 - unsigned char unused2[2]; // 0xFD82 - 0xFD83 not used - unsigned char magrdy0; // 0xFD84 mag tape channel0 ready bit - unsigned char magrdy1; // 0xFD85 mag tape channel1 ready bit - unsigned char audin; // 0xFD86 audio in - unsigned char sysctl1; // 0xFD87 control bits - unsigned char mikeyrev; // 0xFD88 mikey hardware rev - unsigned char mikeysrev; // 0xFD89 mikey software rev - unsigned char iodir; // 0xFD8A parallel i/o data dir - unsigned char iodat; // 0xFD8B parallel data - unsigned char serctl; // 0xFD8C serial control register - unsigned char serdat; // 0xFD8D serial data - unsigned char unused3[2]; // 0xFD8E - 0xFD8F not used - unsigned char sdoneack; // 0xFD90 suzy done acknowledge - unsigned char cpusleep; // 0xFD91 cpu bus request disable - unsigned char dispctl; // 0xFD92 video bus request enable, viddma - unsigned char pkbkup; // 0xFD93 magic 'P' count - unsigned char *scrbase; // 0xFD94 start address of video display - unsigned char unused4[6]; // 0xFD96 - 0xFD9B not used - unsigned char mtest0; // 0xFD9C - unsigned char mtest1; // 0xFD9D - unsigned char mtest2; // 0xFD9E - unsigned char unused5; // 0xFD9F not used - unsigned char palette[32]; // 0xFDA0 - 0xFDBF palette 32 bytes - // 0xFDC0 - 0xFDFF not used + struct _mikey_timer timer0; // 0xFD00 + struct _mikey_timer timer1; // 0xFD04 + struct _mikey_timer timer2; // 0xFD08 + struct _mikey_timer timer3; // 0xFD0C + struct _mikey_timer timer4; // 0xFD10 + struct _mikey_timer timer5; // 0xFD14 + struct _mikey_timer timer6; // 0xFD18 + struct _mikey_timer timer7; // 0xFD1C + struct _mikey_audio channel_a; // 0xFD20 + struct _mikey_audio channel_b; // 0xFD28 + struct _mikey_audio channel_c; // 0xFD30 + struct _mikey_audio channel_d; // 0xFD38 + unsigned char attena; // 0xFD40 ?? not yet allocated? + unsigned char attenb; // 0xFD41 | + unsigned char attenc; // 0xFD42 | + unsigned char attend; // 0xFD43 | + unsigned char panning; // 0xFD44 | + unsigned char unused0[11]; // 0xFD45 - 0xFD4F not used + unsigned char mstereo; // 0xFD50 stereo control bits + unsigned char unused1[47]; // 0xFD51 - 0xFD7F not used + unsigned char intrst; // 0xFD80 interrupt poll 0 + unsigned char intset; // 0xFD81 interrupt poll 1 + unsigned char unused2[2]; // 0xFD82 - 0xFD83 not used + unsigned char magrdy0; // 0xFD84 mag tape channel0 ready bit + unsigned char magrdy1; // 0xFD85 mag tape channel1 ready bit + unsigned char audin; // 0xFD86 audio in + unsigned char sysctl1; // 0xFD87 control bits + unsigned char mikeyrev; // 0xFD88 mikey hardware rev + unsigned char mikeysrev; // 0xFD89 mikey software rev + unsigned char iodir; // 0xFD8A parallel i/o data dir + unsigned char iodat; // 0xFD8B parallel data + unsigned char serctl; // 0xFD8C serial control register + unsigned char serdat; // 0xFD8D serial data + unsigned char unused3[2]; // 0xFD8E - 0xFD8F not used + unsigned char sdoneack; // 0xFD90 suzy done acknowledge + unsigned char cpusleep; // 0xFD91 cpu bus request disable + unsigned char dispctl; // 0xFD92 video bus request enable, viddma + unsigned char pkbkup; // 0xFD93 magic 'P' count + unsigned char *scrbase; // 0xFD94 start address of video display + unsigned char unused4[6]; // 0xFD96 - 0xFD9B not used + unsigned char mtest0; // 0xFD9C + unsigned char mtest1; // 0xFD9D + unsigned char mtest2; // 0xFD9E + unsigned char unused5; // 0xFD9F not used + unsigned char palette[32]; // 0xFDA0 - 0xFDBF palette 32 bytes + unsigned char unused6[64]; // 0xFDC0 - 0xFDFF not used + unsigned char bootrom[504]; // 0xFE00 - 0xFFD8 boot rom + unsigned char reserved; // 0xFFD8 reserved for future hardware + unsigned char mapctl; // 0xFFF9 map control register + struct { + unsigned char *nmi; // 0xFFFA NMI vector + unsigned char *reset; // 0xFFFB reset vector + unsigned char *irq; // 0xFFFC IRQ vector + } vectors; }; +// TIM_CONTROLA control bit definitions +enum { + ENABLE_INT = 0x80, + RESET_DONE = 0x40, + ENABLE_RELOAD = 0x10, + ENABLE_COUNT = 0x08 +}; + +// AUD_CONTROL control bit definitions +enum { + FEEDBACK_7 = 0x80, + ENABLE_INTEGRATE = 0x20 +}; + +// Audio and timer clock settings for source period +enum { + AUD_LINKING = 0x07, + AUD_64 = 0x06, + AUD_32 = 0x05, + AUD_16 = 0x04, + AUD_8 = 0x03, + AUD_4 = 0x02, + AUD_2 = 0x01, + AUD_1 = 0x00 +}; + +// TIM_CONTROLB control bit definitions +enum { + TIMER_DONE = 0x08, + LAST_CLOCK = 0x04, + BORROW_IN = 0x02, + BORROW_OUT = 0x01 +}; + +// MPAN and MSTEREO registers bit definitions +enum { + LEFT3_SELECT = 0x80, + LEFT2_SELECT = 0x40, + LEFT1_SELECT = 0x20, + LEFT0_SELECT = 0x10, + RIGHT3_SELECT = 0x08, + RIGHT2_SELECT = 0x04, + RIGHT1_SELECT = 0x02, + RIGHT0_SELECT = 0x01, + LEFT_ATTENMASK = 0xF0, + RIGHT_ATTENMASK = 0x0F +}; + +// Interrupt Reset and Set bit definitions +enum { + TIMER7_INT = 0x80, + TIMER6_INT = 0x40, + TIMER5_INT = 0x20, + TIMER4_INT = 0x10, + TIMER3_INT = 0x08, + TIMER2_INT = 0x04, + TIMER1_INT = 0x02, + TIMER0_INT = 0x01, + SERIAL_INT = TIMER4_INT, + VERTICAL_INT = TIMER2_INT, + HORIZONTAL_INT = TIMER0_INT +}; + +// SYSCTL1 bit definitions +enum { + POWERON = 0x02, + CART_ADDR_STROBE = 0x01 +}; + +// IODIR and IODAT bit definitions +enum { + AUDIN_BIT = 0x10, // different from AUDIN address + READ_ENABLE = 0x10, // same bit for AUDIN_BIT + RESTLESS = 0x08, + NOEXP = 0x04, // if set, redeye is not connected + CART_ADDR_DATA = 0x02, // + CART_POWER_OFF = 0x02, // same bit for CART_ADDR_DATA + EXTERNAL_POWER = 0x01 +}; + +// SERCTL bit definitions for write operations +enum { + TXINTEN = 0x80, + RXINTEN = 0x40, + PAREN = 0x10, + RESETERR = 0x08, + TXOPEN = 0x04, + TXBRK = 0x02, + PAREVEN = 0x01 +}; + +// SERCTL bit definitions for read operations +enum { + TXRDY = 0x80, + RXRDY = 0x40, + TXEMPTY = 0x20, + PARERR = 0x10, + OVERRUN = 0x08, + FRAMERR = 0x04, + RXBRK = 0x02, + PARBIT = 0x01 +}; + +// DISPCTL bit definitions +enum { + DISP_COLOR = 0x08, // must be set to 1 + DISP_FOURBIT = 0x04, // must be set to 1 + DISP_FLIP = 0x02, // + DMA_ENABLE = 0x01 // must be set to 1 +}; + +// MTEST0 bit definitions +enum { + AT_CNT16 = 0x80, + AT_TEST = 0x40, + XCLKEN = 0x20, + UART_TURBO = 0x10, + ROM_SEL = 0x08, + ROM_TEST = 0x04, + M_TEST = 0x02, + CPU_TEST = 0x01 +}; + +// MTEST1 bit definitions +enum { + P_CNT16 = 0x40, + REF_CNT16 = 0x20, + VID_TRIG = 0x10, + REF_TRIG = 0x08, + VID_DMA_DIS = 0x04, + REF_FAST = 0x02, + REF_DIS = 0x01 +}; + +// MTEST2 bit definitions +enum { + V_STROBE = 0x10, + V_ZERO = 0x08, + H_120 = 0x04, + H_ZERO = 0x02, + V_BLANKEF = 0x01 +}; + +// MAPCTL bit definitions +enum { + TURBO_DISABLE = 0x80, + VECTOR_SPACE = 0x08, + ROM_SPACE = 0x04, + MIKEY_SPACE = 0x02, + SUZY_SPACE = 0x01 +}; #endif From 3553975b025f2524ec1b9802520c18045f17a799 Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps2.nl> Date: Fri, 9 Aug 2024 13:53:41 +0200 Subject: [PATCH 2532/2710] Math improvements to Suzy include file --- include/_suzy.h | 69 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 52 insertions(+), 17 deletions(-) diff --git a/include/_suzy.h b/include/_suzy.h index 8ab7f68dd..c2c9de49c 100644 --- a/include/_suzy.h +++ b/include/_suzy.h @@ -242,10 +242,38 @@ typedef struct PENPAL_1 { #define MIKEYSPACE 0x02 #define SUZYSPACE 0x01 +// Structures for math registers +struct _math_unsigned_multiply { + unsigned int factor1; // 0xFC52 - 0xFC53 + unsigned int factor2; // 0xFC54 - 0xFC55 write starts multiply + unsigned char unused2[10]; // 0xFC56 - 0xFC5F do not use + unsigned long product; // 0xFC60 - 0xFC63 + unsigned char unused3[8]; // 0xFC64 - 0xFC6B do not use + unsigned long accumulate; // 0xFC6C - 0xFC6F +}; + +struct _math_signed_multiply { + int factor1; // 0xFC52 - 0xFC53 + int factor2; // 0xFC54 - 0xFC55 write starts multiply + unsigned char unused2[10]; // 0xFC56 - 0xFC5F do not use + long product; // 0xFC60 - 0xFC63 + unsigned char unused3[8]; // 0xFC64 - 0xFC6B do not use + long accumulate; // 0xFC6C - 0xFC6F +}; + +struct _math_divide { + unsigned long quotient; // 0xFC52 - 0xFC55 + unsigned int divisor; // 0xFC56 - 0xFC57 + unsigned char unused2[8]; // 0xFC58 - 0xFC5F do not use + unsigned int dividend2; // 0xFC60 - 0xFC61 + unsigned int dividend1; // 0xFC62 - 0xFC63 write starts divide + unsigned char unused3[8]; // 0xFC64 - 0xFC6B do not use + unsigned long remainder; // 0xFC6C - 0xFC6F +}; /* Suzy Hardware Registers */ struct __suzy { - unsigned int tmpadr; // 0xFC00 Temporary address + unsigned char *tmpadr; // 0xFC00 Temporary address unsigned int tiltacc; // 0xFC02 Tilt accumulator unsigned int hoff; // 0xFC04 Offset to H edge of screen unsigned int voff; // 0xFC06 Offset to V edge of screen @@ -271,22 +299,29 @@ struct __suzy { unsigned char *procaddr; // 0xFC2E address of current spr data proc unsigned char unused0[32]; // 0xFC30 - 0xFC4F reserved/unused unsigned char unused1[2]; // 0xFC50 - 0xFC51 do not use - unsigned char mathd; // 0xFC52 - unsigned char mathc; // 0xFC53 - unsigned char mathb; // 0xFC54 - unsigned char matha; // 0xFC55 - unsigned char mathp; // 0xFC56 - unsigned char mathn; // 0xFC57 - unsigned char unused2[8]; // 0xFC58 - 0xFC5F do not use - unsigned char mathh; // 0xFC60 - unsigned char mathg; // 0xFC61 - unsigned char mathf; // 0xFC62 - unsigned char mathe; // 0xFC63 - unsigned char unused3[8]; // 0xFC64 - 0xFC6B do not use - unsigned char mathm; // 0xFC6C - unsigned char mathl; // 0xFC6D - unsigned char mathk; // 0xFC6E - unsigned char mathj; // 0xFC6F + union { + struct { + unsigned char mathd; // 0xFC52 + unsigned char mathc; // 0xFC53 + unsigned char mathb; // 0xFC54 + unsigned char matha; // 0xFC55 write starts a multiply operation + unsigned char mathp; // 0xFC56 + unsigned char mathn; // 0xFC57 + unsigned char unused2[8]; // 0xFC58 - 0xFC5F do not use + unsigned char mathh; // 0xFC60 + unsigned char mathg; // 0xFC61 + unsigned char mathf; // 0xFC62 + unsigned char mathe; // 0xFC63 write starts a divide operation + unsigned char unused3[8]; // 0xFC64 - 0xFC6B do not use + unsigned char mathm; // 0xFC6C + unsigned char mathl; // 0xFC6D + unsigned char mathk; // 0xFC6E + unsigned char mathj; // 0xFC6F + }; + struct _math_unsigned_multiply unsigned_multiply; + struct _math_signed_multiply signed_multiply; + struct _math_divide divide; + }; unsigned char unused4[16]; // 0xFC70 - 0xFC7F do not use unsigned char sprctl0; // 0xFC80 sprite control bits 0 unsigned char sprctl1; // 0xFC81 sprite control bits 1 From 7150fdf4b9608a4377f1c5c26e4c0a66f9faae54 Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps2.nl> Date: Fri, 9 Aug 2024 14:48:13 +0200 Subject: [PATCH 2533/2710] Enumerations and math structures for Suzy --- include/_suzy.h | 192 +++++++++++++++++++++++++----------------------- include/lynx.h | 177 +++++++++++++------------------------------- 2 files changed, 152 insertions(+), 217 deletions(-) diff --git a/include/_suzy.h b/include/_suzy.h index c2c9de49c..29a263880 100644 --- a/include/_suzy.h +++ b/include/_suzy.h @@ -24,73 +24,62 @@ /* */ /*****************************************************************************/ - #ifndef __SUZY_H #define __SUZY_H -/* Joypad $FCB0 */ -#define JOYPAD_RIGHT 0x10 -#define JOYPAD_LEFT 0x20 -#define JOYPAD_DOWN 0x40 -#define JOYPAD_UP 0x80 -#define BUTTON_OPTION1 0x08 -#define BUTTON_OPTION2 0x04 -#define BUTTON_INNER 0x02 -#define BUTTON_OUTER 0x01 +// JOYSTICK bit definitions +enum { + JOYPAD_RIGHT = 0x10, + JOYPAD_LEFT = 0x20, + JOYPAD_DOWN = 0x40, + JOYPAD_UP = 0x80, + BUTTON_OPTION1 = 0x08, + BUTTON_OPTION2 = 0x04, + BUTTON_INNER = 0x02, + BUTTON_OUTER = 0x01 +}; -/* Switches $FCB1 */ -#define BUTTON_PAUSE 0x01 +// SWITCHES bit definitions +enum { + CART1_IO_INACTIVE = 0x04, + CART0_IO_INACTIVE = 0x02, + BUTTON_PAUSE = 0x01 +}; +// SPRCTL0 bit definitions +enum { + BPP_4 = 0xC0, + BPP_3 = 0x80, + BPP_2 = 0x40, + BPP_1 = 0x00, + HFLIP = 0x20, + VFLIP = 0x10, + TYPE_SHADOW = 0x07, + TYPE_XOR = 0x06, + TYPE_NONCOLL = 0x05, + TYPE_NORMAL = 0x04, + TYPE_BOUNDARY = 0x03, + TYPE_BSHADOW = 0x02, + TYPE_BACKNONCOLL = 0x01, + TYPE_BACKGROUND = 0x00 +}; -/* Hardware Math */ -#define FACTOR_A *(unsigned int *) 0xFC54 -#define FACTOR_B *(unsigned int *) 0xFC52 -#define PRODUCT0 *(unsigned int *) 0xFC60 -#define PRODUCT1 *(unsigned int *) 0xFC62 -#define PRODUCT *(long *) 0xFC60 +// SPRCTL1 bit definitions +enum { + LITERAL = 0x80, + PACKED = 0x00, + ALGO3 = 0x40, + RENONE = 0x00, + REHV = 0x10, + REHVS = 0x20, + REHVST = 0x30, + REUSEPAL = 0x08, + SKIP = 0x04, + DRAWUP = 0x02, + DRAWLEFT = 0x01 +}; -#define DIVIDEND0 *(unsigned int *) 0xFC60 -#define DIVIDEND1 *(unsigned int *) 0xFC62 -#define DIVIDEND *(long *) 0xFC60 -#define DIVISOR *(unsigned int *) 0xFC56 -#define QUOTIENT0 *(unsigned int *) 0xFC52 -#define QUOTIENT1 *(unsigned int *) 0xFC54 -#define QUOTIENT *(long *) 0xFC52 -#define REMAINDER0 *(unsigned int *) 0xFC6C -#define REMAINDER1 *(unsigned int *) 0xFC6E -#define REMAINDER *(long *) 0xFC6C - - -/* Sprite control block (SCB) defines */ - -/* SPRCTL0 $FC80 */ -#define BPP_4 0xC0 -#define BPP_3 0x80 -#define BPP_2 0x40 -#define BPP_1 0x00 -#define HFLIP 0x20 -#define VFLIP 0x10 -#define TYPE_SHADOW 0x07 -#define TYPE_XOR 0x06 -#define TYPE_NONCOLL 0x05 -#define TYPE_NORMAL 0x04 -#define TYPE_BOUNDARY 0x03 -#define TYPE_BSHADOW 0x02 -#define TYPE_BACKNONCOLL 0x01 -#define TYPE_BACKGROUND 0x00 - -/* SPRCTL1 $FC81 */ -#define LITERAL 0x80 -#define PACKED 0x00 -#define ALGO3 0x40 -#define RENONE 0x00 -#define REHV 0x10 -#define REHVS 0x20 -#define REHVST 0x30 -#define REUSEPAL 0x08 -#define SKIP 0x04 -#define DRAWUP 0x02 -#define DRAWLEFT 0x01 +// Sprite control block (SCB) definitions typedef struct SCB_REHVST_PAL { // SCB with all attributes unsigned char sprctl0; @@ -210,37 +199,33 @@ typedef struct PENPAL_1 { unsigned char penpal[1]; } PENPAL_1; -/* Misc system defines */ +// SPRGO bit definitions +enum { + SPRITE_GO = 0x01, // sprite process start bit + EVER_ON = 0x04 // everon detector enable +}; -/* SPRGO $FC91 */ -#define EVER_ON 0x04 -#define SPRITE_GO 0x01 - -/* SPRSYS (write) $FC92 */ -#define SIGNMATH 0x80 -#define ACCUMULATE 0x40 -#define NO_COLLIDE 0x20 -#define VSTRETCH 0x10 -#define LEFTHAND 0x08 -#define CLR_UNSAFE 0x04 -#define SPRITESTOP 0x02 - -/* SPRSYS (read) $FC92 */ -#define MATHWORKING 0x80 -#define MATHWARNING 0x40 -#define MATHCARRY 0x20 -#define VSTRETCHING 0x10 -#define LEFTHANDED 0x08 -#define UNSAFE_ACCESS 0x04 -#define SPRITETOSTOP 0x02 -#define SPRITEWORKING 0x01 - -/* MAPCTL $FFF9 */ -#define HIGHSPEED 0x80 -#define VECTORSPACE 0x08 -#define ROMSPACE 0x04 -#define MIKEYSPACE 0x02 -#define SUZYSPACE 0x01 +// SPRSYS bit definitions for write operations +enum { + SIGNMATH = 0x80, // signed math + ACCUMULATE = 0x40, // accumulate multiplication results + NO_COLLIDE = 0x20, // do not collide with any sprites (also SPRCOLL bit definition) + VSTRETCH = 0x10, // stretch v + LEFTHAND = 0x08, + CLR_UNSAFE = 0x04, // unsafe access reset + SPRITESTOP = 0x02 // request to stop sprite process +}; +// SPRSYS bit definitions for read operations +enum { + MATHWORKING = 0x80, // math operation in progress + MATHWARNING = 0x40, // accumulator overflow on multiple or divide by zero + MATHCARRY = 0x20, // last carry bit + VSTRETCHING = 0x10, + LEFTHANDED = 0x08, + UNSAFE_ACCESS = 0x04, // unsafe access performed + SPRITETOSTOP = 0x02, // requested to stop + SPRITEWORKING = 0x01 // sprite process is active +}; // Structures for math registers struct _math_unsigned_multiply { @@ -348,6 +333,31 @@ struct __suzy { // 0xFCC5 - 0xFCFF unused }; +// Deprecated definitions + +/* Hardware Math */ +#define FACTOR_A *(unsigned int *) 0xFC54 +#define FACTOR_B *(unsigned int *) 0xFC52 +#define PRODUCT0 *(unsigned int *) 0xFC60 +#define PRODUCT1 *(unsigned int *) 0xFC62 +#define PRODUCT *(long *) 0xFC60 + +#define DIVIDEND0 *(unsigned int *) 0xFC60 +#define DIVIDEND1 *(unsigned int *) 0xFC62 +#define DIVIDEND *(long *) 0xFC60 +#define DIVISOR *(unsigned int *) 0xFC56 +#define QUOTIENT0 *(unsigned int *) 0xFC52 +#define QUOTIENT1 *(unsigned int *) 0xFC54 +#define QUOTIENT *(long *) 0xFC52 +#define REMAINDER0 *(unsigned int *) 0xFC6C +#define REMAINDER1 *(unsigned int *) 0xFC6E +#define REMAINDER *(long *) 0xFC6C + +/* MAPCTL $FFF9 */ +#define HIGHSPEED 0x80 +#define VECTORSPACE 0x08 +#define ROMSPACE 0x04 +#define MIKEYSPACE 0x02 +#define SUZYSPACE 0x01 #endif - diff --git a/include/lynx.h b/include/lynx.h index 41dc5acb3..e2c0c503f 100644 --- a/include/lynx.h +++ b/include/lynx.h @@ -31,27 +31,15 @@ /* */ /*****************************************************************************/ - - #ifndef _LYNX_H #define _LYNX_H - - /* Check for errors */ #if !defined(__LYNX__) # error This module may only be used when compiling for the Lynx game console! #endif - - -/*****************************************************************************/ -/* Data */ -/*****************************************************************************/ - - - -/* Color defines */ +/* Color definitions */ #define COLOR_TRANSPARENT 0x00 #define COLOR_BLACK 0x01 #define COLOR_RED 0x02 @@ -88,6 +76,56 @@ #define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE #define TGI_COLOR_WHITE COLOR_WHITE +/* No support for dynamically loadable drivers */ +#define DYN_DRV 0 + +// Addresses of static drivers +extern void lynx_stdjoy_joy[]; // Referred to by joy_static_stddrv[] +extern void lynx_comlynx_ser[]; // Referred to by ser_static_stddrv[] +extern void lynx_160_102_16_tgi[]; // Referred to by tgi_static_stddrv[] + +// Sound support +void lynx_snd_init (void); // Initialize the sound driver +void lynx_snd_pause (void); // Pause sound +void lynx_snd_continue (void); // Continue sound after pause +void __fastcall__ lynx_snd_play (unsigned char channel, unsigned char *music); // Play tune on channel +void lynx_snd_stop (void); // Stop sound on all channels +void __fastcall__ lynx_snd_stop_channel (unsigned char channel); // Stop sound on all channels +unsigned char lynx_snd_active(void); // Show which channels are active + +// Cartridge access +void __fastcall__ lynx_load (int file_number); // Load a file into RAM using a zero-based index +void __fastcall__ lynx_exec (int file_number); // Load a file into ram and execute it + +// EEPROM access +unsigned __fastcall__ lynx_eeprom_read (unsigned char cell); // Read a 16 bit word from the given address +unsigned __fastcall__ lynx_eeprom_write (unsigned char cell, unsigned val); // Write the word at the given address +void __fastcall__ lynx_eeprom_erase (unsigned char cell); // Clear the word at the given address +unsigned __fastcall__ lynx_eeread (unsigned cell); // Read a 16 bit word from the given address 93C46, 93C66 or 93C86 +unsigned __fastcall__ lynx_eewrite (unsigned cell, unsigned val); // Write the word at the given address 93C46, 93C66 or 93C86 + +// TGI extras +#define tgi_sprite(spr) tgi_ioctl(0, spr) +#define tgi_flip() tgi_ioctl(1, (void*)0) +#define tgi_setbgcolor(bgcol) tgi_ioctl(2, (void*)(bgcol)) +#define tgi_setframerate(rate) tgi_ioctl(3, (void*)(rate)) +#define tgi_busy() tgi_ioctl(4, (void*)0) +#define tgi_updatedisplay() tgi_ioctl(4, (void*)1) +#define tgi_setcollisiondetection(active) tgi_ioctl(5, (void*)(active)) + +/* Hardware definitions */ +#include <_mikey.h> +#define MIKEY (*(struct __mikey *)0xFD00) + +#define _MIKEY_TIMERS (*(struct _mikey_all_timers *) 0xFD00) // mikey_timers[8] +#define _HBL_TIMER (*(struct _mikey_timer *) 0xFD00) // timer0 (HBL) +#define _VBL_TIMER (*(struct _mikey_timer *) 0xFD08) // timer2 (VBL) +#define _UART_TIMER (*(struct _mikey_timer *) 0xFD14) // timer4 (UART) +#define _VIDDMA (*(unsigned int *) 0xFD92) // dispctl/viddma + +#include <_suzy.h> +#define SUZY (*(volatile struct __suzy*)0xFC00) + /* Masks for joy_read */ #define JOY_UP_MASK 0x80 #define JOY_DOWN_MASK 0x40 @@ -102,118 +140,5 @@ #define JOY_BTN_A(v) ((v) & JOY_BTN_A_MASK) #define JOY_BTN_B(v) ((v) & JOY_BTN_B_MASK) -/* No support for dynamically loadable drivers */ -#define DYN_DRV 0 - - - -/*****************************************************************************/ -/* Variables */ -/*****************************************************************************/ - - - -/* The addresses of the static drivers */ -extern void lynx_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */ -extern void lynx_comlynx_ser[]; /* Referred to by ser_static_stddrv[] */ -extern void lynx_160_102_16_tgi[]; /* Referred to by tgi_static_stddrv[] */ - - - -/*****************************************************************************/ -/* Sound support */ -/*****************************************************************************/ - - - -void lynx_snd_init (void); -/* Initialize the sound driver */ - -void lynx_snd_pause (void); -/* Pause sound */ - -void lynx_snd_continue (void); -/* Continue sound after pause */ - -void __fastcall__ lynx_snd_play (unsigned char channel, unsigned char *music); -/* Play tune on channel */ - -void lynx_snd_stop (void); -/* Stop sound on all channels */ - -void __fastcall__ lynx_snd_stop_channel (unsigned char channel); -/* Stop sound on all channels */ - -unsigned char lynx_snd_active(void); -/* Show which channels are active */ - - - -/*****************************************************************************/ -/* Accessing the cart */ -/*****************************************************************************/ - - - -void __fastcall__ lynx_load (int fileno); -/* Load a file into ram. The first entry is fileno=0. */ - -void __fastcall__ lynx_exec (int fileno); -/* Load a file into ram and execute it. */ - - - -/*****************************************************************************/ -/* Accessing the EEPROM */ -/*****************************************************************************/ - - - -unsigned __fastcall__ lynx_eeprom_read (unsigned char cell); -/* Read a 16 bit word from the given address */ - -unsigned __fastcall__ lynx_eeprom_write (unsigned char cell, unsigned val); -/* Write the word at the given address */ - -void __fastcall__ lynx_eeprom_erase (unsigned char cell); -/* Clear the word at the given address */ - -unsigned __fastcall__ lynx_eeread (unsigned cell); -/* Read a 16 bit word from the given address 93C46 93C66 or 93C86*/ - -unsigned __fastcall__ lynx_eewrite (unsigned cell, unsigned val); -/* Write the word at the given address 93C46 93C66 or 93C86*/ - - - -/*****************************************************************************/ -/* TGI extras */ -/*****************************************************************************/ - - - -#define tgi_sprite(spr) tgi_ioctl(0, spr) -#define tgi_flip() tgi_ioctl(1, (void*)0) -#define tgi_setbgcolor(bgcol) tgi_ioctl(2, (void*)(bgcol)) -#define tgi_setframerate(rate) tgi_ioctl(3, (void*)(rate)) -#define tgi_busy() tgi_ioctl(4, (void*)0) -#define tgi_updatedisplay() tgi_ioctl(4, (void*)1) -#define tgi_setcollisiondetection(active) tgi_ioctl(5, (void*)(active)) - -/* Define Hardware */ -#include <_mikey.h> -#define MIKEY (*(struct __mikey *)0xFD00) - -#define _MIKEY_TIMERS (*(struct _mikey_all_timers *) 0xFD00) // mikey_timers[8] -#define _HBL_TIMER (*(struct _mikey_timer *) 0xFD00) // timer0 (HBL) -#define _VBL_TIMER (*(struct _mikey_timer *) 0xFD08) // timer2 (VBL) -#define _UART_TIMER (*(struct _mikey_timer *) 0xFD14) // timer4 (UART) -#define _VIDDMA (*(unsigned int *) 0xFD92) // dispctl/viddma - -#include <_suzy.h> -#define SUZY (*(struct __suzy*)0xFC00) - - - /* End of lynx.h */ #endif From abcb073a5a30ddfbae8ddcdb1a82a42e047f18b4 Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps2.nl> Date: Fri, 9 Aug 2024 15:10:30 +0200 Subject: [PATCH 2534/2710] Bit definitions for Suzy --- asminc/lynx.inc | 192 ++++++++++++++++++++++++++++-------------------- 1 file changed, 113 insertions(+), 79 deletions(-) diff --git a/asminc/lynx.inc b/asminc/lynx.inc index d6a8cd70a..458cd650f 100644 --- a/asminc/lynx.inc +++ b/asminc/lynx.inc @@ -79,7 +79,7 @@ MATHL = $FC6D MATHK = $FC6E MATHJ = $FC6F -; Suzy Misc +; Suzy sprite engine SPRCTL0 = $FC80 ; Sprite bits-per-pixel definitions @@ -117,15 +117,53 @@ SKIP = %00000100 DRAWUP = %00000010 DRAWLEFT = %00000001 -SPRCOLL = $FC82 -SPRINIT = $FC83 -SUZYHREV = $FC88 -SUZYSREV = $FC89 -SUZYBUSEN = $FC90 -SPRGO = $FC91 -SPRSYS = $FC92 -JOYSTICK = $FCB0 +SPRCOLL = $FC82 +SPRINIT = $FC83 +SUZYHREV = $FC88 +SUZYSREV = $FC89 +SUZYBUSEN = $FC90 + +SPRGO = $FC91 +; SPRGO bit definitions +SPRITE_GO = %00000001 ; sprite process start bit +EVER_ON = %00000100 ; everon detector enable + +SPRSYS = $FC92 +; SPRSYS bit definitions for write operations +SIGNMATH = 0x80 ; signed math +ACCUMULATE = 0x40 ; accumulate multiplication results +NO_COLLIDE = 0x20 ; do not collide with any sprites (also SPRCOLL bit definition) +VSTRETCH = 0x10 ; stretch v +LEFTHAND = 0x08 +CLR_UNSAFE = 0x04 ; unsafe access reset +SPRITESTOP = 0x02 ; request to stop sprite process +; SPRSYS bit definitions for read operations +MATHWORKING = 0x80 ; math operation in progress +MATHWARNING = 0x40 ; accumulator overflow on multiple or divide by zero +MATHCARRY = 0x20 ; last carry bit +VSTRETCHING = 0x10 +LEFTHANDED = 0x08 +UNSAFE_ACCESS = 0x04 ; unsafe access performed +SPRITETOSTOP = 0x02 ; requested to stop +SPRITEWORKING = 0x01 ; sprite process is active + +JOYSTICK = $FCB0 +; JOYSTICK bit definitions +JOYPAD_UP = 0x80 +JOYPAD_DOWN = 0x40 +JOYPAD_LEFT = 0x20 +JOYPAD_RIGHT = 0x10 +BUTTON_OPTION1 = 0x08 +BUTTON_OPTION2 = 0x04 +BUTTON_INNER = 0x02 +BUTTON_OUTER = 0x01 + SWITCHES = $FCB1 +; SWITCHES bit definitions +CART1_IO_INACTIVE = 0x04 +CART0_IO_INACTIVE = 0x02 +BUTTON_PAUSE = 0x01 + RCART0 = $FCB2 RCART1 = $FCB3 LEDS = $FCC0 @@ -133,72 +171,71 @@ PARSTATUS = $FCC2 PARDATA = $FCC3 HOWIE = $FCC4 - -; *** +; ; *** Mikey Addresses ; *** ; Mikey timers ; Logical timer names -TIMER0 = $FD00 -TIMER1 = $FD04 -TIMER2 = $FD08 -TIMER3 = $FD0C -TIMER4 = $FD10 -TIMER5 = $FD14 -TIMER6 = $FD18 -TIMER7 = $FD1C -HTIMER = TIMER0 ; horizontal line timer (timer 0) -VTIMER = TIMER2 ; vertical blank timer (timer 2) -STIMER = TIMER7 ; sound timer (timer 7) +TIMER0 = $FD00 +TIMER1 = $FD04 +TIMER2 = $FD08 +TIMER3 = $FD0C +TIMER4 = $FD10 +TIMER5 = $FD14 +TIMER6 = $FD18 +TIMER7 = $FD1C +HTIMER = TIMER0 ; horizontal line timer (timer 0) +VTIMER = TIMER2 ; vertical blank timer (timer 2) +STIMER = TIMER7 ; sound timer (timer 7) -HTIMBKUP = $FD00 ; horizontal line timer (timer 0) -HTIMCTLA = $FD01 -HTIMCNT = $FD02 -HTIMCTLB = $FD03 -VTIMBKUP = $FD08 ; vertical blank timer (timer 2) -VTIMCTLA = $FD09 -VTIMCNT = $FD0A -VTIMCTLB = $FD0B -BAUDBKUP = $FD10 ; serial timer (timer 4) -STIMBKUP = $FD1C ; sound timer (timer 7) -STIMCTLA = $FD1D -STIMCNT = $FD1E -STIMCTLB = $FD1F +HTIMBKUP = $FD00 ; horizontal line timer (timer 0) +HTIMCTLA = $FD01 +HTIMCNT = $FD02 +HTIMCTLB = $FD03 +VTIMBKUP = $FD08 ; vertical blank timer (timer 2) +VTIMCTLA = $FD09 +VTIMCNT = $FD0A +VTIMCTLB = $FD0B +BAUDBKUP = $FD10 ; serial timer (timer 4) +STIMBKUP = $FD1C ; sound timer (timer 7) +STIMCTLA = $FD1D +STIMCNT = $FD1E +STIMCTLB = $FD1F -TIM0BKUP = $FD00 -TIM0CTLA = $FD01 -TIM0CNT = $FD02 -TIM0CTLB = $FD03 -TIM1BKUP = $FD04 -TIM1CTLA = $FD05 -TIM1CNT = $FD06 -TIM1CTLB = $FD07 -TIM2BKUP = $FD08 -TIM2CTLA = $FD09 -TIM2CNT = $FD0A -TIM2CTLB = $FD0B -TIM3BKUP = $FD0C -TIM3CTLA = $FD0D -TIM3CNT = $FD0E -TIM3CTLB = $FD0F -TIM4BKUP = $FD10 -TIM4CTLA = $FD11 -TIM4CNT = $FD12 -TIM4CTLB = $FD13 -TIM5BKUP = $FD14 -TIM5CTLA = $FD15 -TIM5CNT = $FD16 -TIM5CTLB = $FD17 -TIM6BKUP = $FD18 -TIM6CTLA = $FD19 -TIM6CNT = $FD1A -TIM6CTLB = $FD1B -TIM7BKUP = $FD1C -TIM7CTLA = $FD1D -TIM7CNT = $FD1E -TIM7CTLB = $FD1F +TIM0BKUP = $FD00 +TIM0CTLA = $FD01 +TIM0CNT = $FD02 +TIM0CTLB = $FD03 +TIM1BKUP = $FD04 +TIM1CTLA = $FD05 +TIM1CNT = $FD06 +TIM1CTLB = $FD07 +TIM2BKUP = $FD08 +TIM2CTLA = $FD09 +TIM2CNT = $FD0A +TIM2CTLB = $FD0B +TIM3BKUP = $FD0C +TIM3CTLA = $FD0D +TIM3CNT = $FD0E +TIM3CTLB = $FD0F +TIM4BKUP = $FD10 +TIM4CTLA = $FD11 +TIM4CNT = $FD12 +TIM4CTLB = $FD13 +TIM5BKUP = $FD14 +TIM5CTLA = $FD15 +TIM5CNT = $FD16 +TIM5CTLB = $FD17 +TIM6BKUP = $FD18 +TIM6CTLA = $FD19 +TIM6CNT = $FD1A +TIM6CTLB = $FD1B +TIM7BKUP = $FD1C +TIM7CTLA = $FD1D +TIM7CNT = $FD1E +TIM7CTLB = $FD1F ; Timer offsets TIM_BACKUP = 0 @@ -212,7 +249,6 @@ RESET_DONE = %01000000 ENABLE_RELOAD = %00010000 ENABLE_COUNT = %00001000 AUD_CLOCK_MASK = %00000111 - ; Clock settings AUD_LINKING = %00000111 AUD_64 = %00000110 @@ -278,15 +314,16 @@ ENABLE_INTEGRATE = %00100000 ; Stereo capability does not exist in all Lynxes ; Left and right may be reversed, and if so will be corrected in a later ; release +ATTENREG0 = $FD40 ; Stereo attenuation registers +ATTENREG1 = $FD41 +ATTENREG2 = $FD42 +ATTENREG3 = $FD43 -ATTENREG0 = $FD40 ; Stereo attenuation registers -ATTENREG1 = $FD41 -ATTENREG2 = $FD42 -ATTENREG3 = $FD43 +MPAN = $FD44 +MSTEREO = $FD50 +; Bit definitions for MPAN and MSTEREO registers LEFT_ATTENMASK = %11110000 RIGHT_ATTENMASK = %00001111 - -; Bit definitions for MPAN and MSTEREO registers LEFT3_SELECT = %10000000 LEFT2_SELECT = %01000000 LEFT1_SELECT = %00100000 @@ -296,13 +333,10 @@ RIGHT2_SELECT = %00000100 RIGHT1_SELECT = %00000010 RIGHT0_SELECT = %00000001 -MPAN = $FD44 -MSTEREO = $FD50 - ; Mikey interrupts -INTRST = $FD80 -INTSET = $FD81 +INTRST = $FD80 +INTSET = $FD81 ; Interrupt bits in INTRST and INTSET TIMER0_INTERRUPT = %00000001 From 336c4287c5dc523144315cb40af07db1d9e79ffe Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps2.nl> Date: Fri, 9 Aug 2024 15:17:26 +0200 Subject: [PATCH 2535/2710] Missed some dangles spaces --- asminc/lynx.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/asminc/lynx.inc b/asminc/lynx.inc index 458cd650f..542393847 100644 --- a/asminc/lynx.inc +++ b/asminc/lynx.inc @@ -159,7 +159,7 @@ BUTTON_INNER = 0x02 BUTTON_OUTER = 0x01 SWITCHES = $FCB1 -; SWITCHES bit definitions +; SWITCHES bit definitions CART1_IO_INACTIVE = 0x04 CART0_IO_INACTIVE = 0x02 BUTTON_PAUSE = 0x01 @@ -377,7 +377,7 @@ EXTERNAL_POWER = %00000001 SERCTL = $FD8C ; SERCTL bit definitions for write operations -TXINTEN = %10000000 +TXINTEN = %10000000 RXINTEN = %01000000 PAREN = %00010000 RESETERR = %00001000 From 489989f4c8eabf8b42cae6d6f62ab90d37f652b2 Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps2.nl> Date: Fri, 9 Aug 2024 15:28:54 +0200 Subject: [PATCH 2536/2710] Changed 0x hex values to % binary values --- asminc/lynx.inc | 52 ++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/asminc/lynx.inc b/asminc/lynx.inc index 542393847..150bee6d1 100644 --- a/asminc/lynx.inc +++ b/asminc/lynx.inc @@ -130,39 +130,39 @@ EVER_ON = %00000100 ; everon detector enable SPRSYS = $FC92 ; SPRSYS bit definitions for write operations -SIGNMATH = 0x80 ; signed math -ACCUMULATE = 0x40 ; accumulate multiplication results -NO_COLLIDE = 0x20 ; do not collide with any sprites (also SPRCOLL bit definition) -VSTRETCH = 0x10 ; stretch v -LEFTHAND = 0x08 -CLR_UNSAFE = 0x04 ; unsafe access reset -SPRITESTOP = 0x02 ; request to stop sprite process +SIGNMATH = %10000000 ; signed math +ACCUMULATE = %01000000 ; accumulate multiplication results +NO_COLLIDE = %00100000 ; do not collide with any sprites (also SPRCOLL bit definition) +VSTRETCH = %00010000 ; stretch v +LEFTHAND = %00001000 +CLR_UNSAFE = %00000100 ; unsafe access reset +SPRITESTOP = %00000010 ; request to stop sprite process ; SPRSYS bit definitions for read operations -MATHWORKING = 0x80 ; math operation in progress -MATHWARNING = 0x40 ; accumulator overflow on multiple or divide by zero -MATHCARRY = 0x20 ; last carry bit -VSTRETCHING = 0x10 -LEFTHANDED = 0x08 -UNSAFE_ACCESS = 0x04 ; unsafe access performed -SPRITETOSTOP = 0x02 ; requested to stop -SPRITEWORKING = 0x01 ; sprite process is active +MATHWORKING = %10000000 ; math operation in progress +MATHWARNING = %01000000 ; accumulator overflow on multiple or divide by zero +MATHCARRY = %00100000 ; last carry bit +VSTRETCHING = %00010000 +LEFTHANDED = %00001000 +UNSAFE_ACCESS = %00000100 ; unsafe access performed +SPRITETOSTOP = %00000010 ; requested to stop +SPRITEWORKING = %00000001 ; sprite process is active JOYSTICK = $FCB0 ; JOYSTICK bit definitions -JOYPAD_UP = 0x80 -JOYPAD_DOWN = 0x40 -JOYPAD_LEFT = 0x20 -JOYPAD_RIGHT = 0x10 -BUTTON_OPTION1 = 0x08 -BUTTON_OPTION2 = 0x04 -BUTTON_INNER = 0x02 -BUTTON_OUTER = 0x01 +JOYPAD_UP = %10000000 +JOYPAD_DOWN = %01000000 +JOYPAD_LEFT = %00100000 +JOYPAD_RIGHT = %00010000 +BUTTON_OPTION1 = %00001000 +BUTTON_OPTION2 = %00000100 +BUTTON_INNER = %00000010 +BUTTON_OUTER = %00000001 SWITCHES = $FCB1 ; SWITCHES bit definitions -CART1_IO_INACTIVE = 0x04 -CART0_IO_INACTIVE = 0x02 -BUTTON_PAUSE = 0x01 +CART1_IO_INACTIVE = %00000100 +CART0_IO_INACTIVE = %00000010 +BUTTON_PAUSE = %00000001 RCART0 = $FCB2 RCART1 = $FCB3 From 1f1a004a050fe74e030fcf3b9dfe34faad4c9645 Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps2.nl> Date: Fri, 9 Aug 2024 15:54:05 +0200 Subject: [PATCH 2537/2710] Minor tweaks to Suzy struct types. Named math union --- include/_suzy.h | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/include/_suzy.h b/include/_suzy.h index 29a263880..41029a071 100644 --- a/include/_suzy.h +++ b/include/_suzy.h @@ -258,28 +258,28 @@ struct _math_divide { /* Suzy Hardware Registers */ struct __suzy { - unsigned char *tmpadr; // 0xFC00 Temporary address - unsigned int tiltacc; // 0xFC02 Tilt accumulator - unsigned int hoff; // 0xFC04 Offset to H edge of screen - unsigned int voff; // 0xFC06 Offset to V edge of screen + unsigned char *tmpadr; // 0xFC00 Temporary address + unsigned int tiltacc; // 0xFC02 Tilt accumulator + unsigned int hoff; // 0xFC04 Offset to H edge of screen + unsigned int voff; // 0xFC06 Offset to V edge of screen unsigned char *sprbase; // 0xFC08 Base address of sprite unsigned char *colbase; // 0xFC0A Base address of collision buffer unsigned char *vidadr; // 0xFC0C Current vid buffer address unsigned char *coladr; // 0xFC0E Current col buffer address unsigned char *scbnext; // 0xFC10 Address of next SCB unsigned char *sprdline; // 0xFC12 start of sprite data line address - unsigned char *hposstrt; // 0xFC14 start hpos - unsigned char *vposstrt; // 0xFC16 start vpos - unsigned char *sprhsize; // 0xFC18 sprite h size - unsigned char *sprvsize; // 0xFC1A sprite v size - unsigned int stretchl; // 0xFC1C H size adder - unsigned int tilt; // 0xFC1E H pos adder - unsigned int sprdoff; // 0xFC20 offset to next sprite data line - unsigned int sprvpos; // 0xFC22 current vpos - unsigned int colloff; // 0xFC24 offset to collision depository - unsigned int vsizeacc; // 0xFC26 vertical size accumulator - unsigned int hsizeoff; // 0xFC28 horizontal size offset - unsigned int vsizeoff; // 0xFC2A vertical size offset + unsigned int hposstrt; // 0xFC14 start hpos + unsigned int vposstrt; // 0xFC16 start vpos + unsigned int sprhsize; // 0xFC18 sprite h size + unsigned int sprvsize; // 0xFC1A sprite v size + unsigned int stretchl; // 0xFC1C H size adder + unsigned int tilt; // 0xFC1E H pos adder + unsigned int sprdoff; // 0xFC20 offset to next sprite data line + unsigned int sprvpos; // 0xFC22 current vpos + unsigned int colloff; // 0xFC24 offset to collision depository + unsigned int vsizeacc; // 0xFC26 vertical size accumulator + unsigned int hsizeoff; // 0xFC28 horizontal size offset + unsigned int vsizeoff; // 0xFC2A vertical size offset unsigned char *scbaddr; // 0xFC2C address of current SCB unsigned char *procaddr; // 0xFC2E address of current spr data proc unsigned char unused0[32]; // 0xFC30 - 0xFC4F reserved/unused @@ -306,7 +306,7 @@ struct __suzy { struct _math_unsigned_multiply unsigned_multiply; struct _math_signed_multiply signed_multiply; struct _math_divide divide; - }; + } math; unsigned char unused4[16]; // 0xFC70 - 0xFC7F do not use unsigned char sprctl0; // 0xFC80 sprite control bits 0 unsigned char sprctl1; // 0xFC81 sprite control bits 1 From 0c018919fea8d0fc742311c0e37845a38df0f2df Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps.nl> Date: Mon, 28 Oct 2024 14:20:09 +0100 Subject: [PATCH 2538/2710] Removed union and structures for Suzy math --- include/_suzy.h | 76 +++++++++++++------------------------------------ 1 file changed, 20 insertions(+), 56 deletions(-) diff --git a/include/_suzy.h b/include/_suzy.h index 41029a071..5f4909012 100644 --- a/include/_suzy.h +++ b/include/_suzy.h @@ -227,36 +227,7 @@ enum { SPRITEWORKING = 0x01 // sprite process is active }; -// Structures for math registers -struct _math_unsigned_multiply { - unsigned int factor1; // 0xFC52 - 0xFC53 - unsigned int factor2; // 0xFC54 - 0xFC55 write starts multiply - unsigned char unused2[10]; // 0xFC56 - 0xFC5F do not use - unsigned long product; // 0xFC60 - 0xFC63 - unsigned char unused3[8]; // 0xFC64 - 0xFC6B do not use - unsigned long accumulate; // 0xFC6C - 0xFC6F -}; - -struct _math_signed_multiply { - int factor1; // 0xFC52 - 0xFC53 - int factor2; // 0xFC54 - 0xFC55 write starts multiply - unsigned char unused2[10]; // 0xFC56 - 0xFC5F do not use - long product; // 0xFC60 - 0xFC63 - unsigned char unused3[8]; // 0xFC64 - 0xFC6B do not use - long accumulate; // 0xFC6C - 0xFC6F -}; - -struct _math_divide { - unsigned long quotient; // 0xFC52 - 0xFC55 - unsigned int divisor; // 0xFC56 - 0xFC57 - unsigned char unused2[8]; // 0xFC58 - 0xFC5F do not use - unsigned int dividend2; // 0xFC60 - 0xFC61 - unsigned int dividend1; // 0xFC62 - 0xFC63 write starts divide - unsigned char unused3[8]; // 0xFC64 - 0xFC6B do not use - unsigned long remainder; // 0xFC6C - 0xFC6F -}; - -/* Suzy Hardware Registers */ +// Suzy hardware registers struct __suzy { unsigned char *tmpadr; // 0xFC00 Temporary address unsigned int tiltacc; // 0xFC02 Tilt accumulator @@ -284,29 +255,22 @@ struct __suzy { unsigned char *procaddr; // 0xFC2E address of current spr data proc unsigned char unused0[32]; // 0xFC30 - 0xFC4F reserved/unused unsigned char unused1[2]; // 0xFC50 - 0xFC51 do not use - union { - struct { - unsigned char mathd; // 0xFC52 - unsigned char mathc; // 0xFC53 - unsigned char mathb; // 0xFC54 - unsigned char matha; // 0xFC55 write starts a multiply operation - unsigned char mathp; // 0xFC56 - unsigned char mathn; // 0xFC57 - unsigned char unused2[8]; // 0xFC58 - 0xFC5F do not use - unsigned char mathh; // 0xFC60 - unsigned char mathg; // 0xFC61 - unsigned char mathf; // 0xFC62 - unsigned char mathe; // 0xFC63 write starts a divide operation - unsigned char unused3[8]; // 0xFC64 - 0xFC6B do not use - unsigned char mathm; // 0xFC6C - unsigned char mathl; // 0xFC6D - unsigned char mathk; // 0xFC6E - unsigned char mathj; // 0xFC6F - }; - struct _math_unsigned_multiply unsigned_multiply; - struct _math_signed_multiply signed_multiply; - struct _math_divide divide; - } math; + unsigned char mathd; // 0xFC52 + unsigned char mathc; // 0xFC53 + unsigned char mathb; // 0xFC54 + unsigned char matha; // 0xFC55 write starts a multiply operation + unsigned char mathp; // 0xFC56 + unsigned char mathn; // 0xFC57 + unsigned char unused2[8]; // 0xFC58 - 0xFC5F do not use + unsigned char mathh; // 0xFC60 + unsigned char mathg; // 0xFC61 + unsigned char mathf; // 0xFC62 + unsigned char mathe; // 0xFC63 write starts a divide operation + unsigned char unused3[8]; // 0xFC64 - 0xFC6B do not use + unsigned char mathm; // 0xFC6C + unsigned char mathl; // 0xFC6D + unsigned char mathk; // 0xFC6E + unsigned char mathj; // 0xFC6F unsigned char unused4[16]; // 0xFC70 - 0xFC7F do not use unsigned char sprctl0; // 0xFC80 sprite control bits 0 unsigned char sprctl1; // 0xFC81 sprite control bits 1 @@ -333,9 +297,7 @@ struct __suzy { // 0xFCC5 - 0xFCFF unused }; -// Deprecated definitions - -/* Hardware Math */ +// Hardware math registers #define FACTOR_A *(unsigned int *) 0xFC54 #define FACTOR_B *(unsigned int *) 0xFC52 #define PRODUCT0 *(unsigned int *) 0xFC60 @@ -353,6 +315,8 @@ struct __suzy { #define REMAINDER1 *(unsigned int *) 0xFC6E #define REMAINDER *(long *) 0xFC6C +// Deprecated definitions + /* MAPCTL $FFF9 */ #define HIGHSPEED 0x80 #define VECTORSPACE 0x08 From 3dad6c76fad020c2ffa21be9619bfa8119c3df0f Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps.nl> Date: Sat, 9 Nov 2024 12:01:22 +0100 Subject: [PATCH 2539/2710] Changed to C style comments --- include/_mikey.h | 30 +++++++++++++++--------------- include/_suzy.h | 47 ++++++++++++++++++++++++++++------------------- include/lynx.h | 10 +++++----- 3 files changed, 48 insertions(+), 39 deletions(-) diff --git a/include/_mikey.h b/include/_mikey.h index 9a50745b2..05212aac9 100644 --- a/include/_mikey.h +++ b/include/_mikey.h @@ -109,7 +109,7 @@ struct __mikey { } vectors; }; -// TIM_CONTROLA control bit definitions +/* TIM_CONTROLA control bit definitions */ enum { ENABLE_INT = 0x80, RESET_DONE = 0x40, @@ -117,13 +117,13 @@ enum { ENABLE_COUNT = 0x08 }; -// AUD_CONTROL control bit definitions +/* AUD_CONTROL control bit definitions */ enum { FEEDBACK_7 = 0x80, ENABLE_INTEGRATE = 0x20 }; -// Audio and timer clock settings for source period +/* Audio and timer clock settings for source period */ enum { AUD_LINKING = 0x07, AUD_64 = 0x06, @@ -135,7 +135,7 @@ enum { AUD_1 = 0x00 }; -// TIM_CONTROLB control bit definitions +/* TIM_CONTROLB control bit definitions */ enum { TIMER_DONE = 0x08, LAST_CLOCK = 0x04, @@ -143,7 +143,7 @@ enum { BORROW_OUT = 0x01 }; -// MPAN and MSTEREO registers bit definitions +/* MPAN and MSTEREO registers bit definitions */ enum { LEFT3_SELECT = 0x80, LEFT2_SELECT = 0x40, @@ -157,7 +157,7 @@ enum { RIGHT_ATTENMASK = 0x0F }; -// Interrupt Reset and Set bit definitions +/* Interrupt Reset and Set bit definitions */ enum { TIMER7_INT = 0x80, TIMER6_INT = 0x40, @@ -172,13 +172,13 @@ enum { HORIZONTAL_INT = TIMER0_INT }; -// SYSCTL1 bit definitions +/* SYSCTL1 bit definitions */ enum { POWERON = 0x02, CART_ADDR_STROBE = 0x01 }; -// IODIR and IODAT bit definitions +/* IODIR and IODAT bit definitions */ enum { AUDIN_BIT = 0x10, // different from AUDIN address READ_ENABLE = 0x10, // same bit for AUDIN_BIT @@ -189,7 +189,7 @@ enum { EXTERNAL_POWER = 0x01 }; -// SERCTL bit definitions for write operations +/* SERCTL bit definitions for write operations */ enum { TXINTEN = 0x80, RXINTEN = 0x40, @@ -200,7 +200,7 @@ enum { PAREVEN = 0x01 }; -// SERCTL bit definitions for read operations +/* SERCTL bit definitions for read operations */ enum { TXRDY = 0x80, RXRDY = 0x40, @@ -212,7 +212,7 @@ enum { PARBIT = 0x01 }; -// DISPCTL bit definitions +/* DISPCTL bit definitions */ enum { DISP_COLOR = 0x08, // must be set to 1 DISP_FOURBIT = 0x04, // must be set to 1 @@ -220,7 +220,7 @@ enum { DMA_ENABLE = 0x01 // must be set to 1 }; -// MTEST0 bit definitions +/* MTEST0 bit definitions */ enum { AT_CNT16 = 0x80, AT_TEST = 0x40, @@ -232,7 +232,7 @@ enum { CPU_TEST = 0x01 }; -// MTEST1 bit definitions +/* MTEST1 bit definitions */ enum { P_CNT16 = 0x40, REF_CNT16 = 0x20, @@ -243,7 +243,7 @@ enum { REF_DIS = 0x01 }; -// MTEST2 bit definitions +/* MTEST2 bit definitions */ enum { V_STROBE = 0x10, V_ZERO = 0x08, @@ -252,7 +252,7 @@ enum { V_BLANKEF = 0x01 }; -// MAPCTL bit definitions +/* MAPCTL bit definitions */ enum { TURBO_DISABLE = 0x80, VECTOR_SPACE = 0x08, diff --git a/include/_suzy.h b/include/_suzy.h index 5f4909012..a9d5ddd7b 100644 --- a/include/_suzy.h +++ b/include/_suzy.h @@ -27,7 +27,7 @@ #ifndef __SUZY_H #define __SUZY_H -// JOYSTICK bit definitions +/* JOYSTICK bit definitions */ enum { JOYPAD_RIGHT = 0x10, JOYPAD_LEFT = 0x20, @@ -39,14 +39,14 @@ enum { BUTTON_OUTER = 0x01 }; -// SWITCHES bit definitions +/* SWITCHES bit definitions */ enum { CART1_IO_INACTIVE = 0x04, CART0_IO_INACTIVE = 0x02, BUTTON_PAUSE = 0x01 }; -// SPRCTL0 bit definitions +/* SPRCTL0 bit definitions */ enum { BPP_4 = 0xC0, BPP_3 = 0x80, @@ -64,7 +64,7 @@ enum { TYPE_BACKGROUND = 0x00 }; -// SPRCTL1 bit definitions +/* SPRCTL1 bit definitions */ enum { LITERAL = 0x80, PACKED = 0x00, @@ -79,9 +79,10 @@ enum { DRAWLEFT = 0x01 }; -// Sprite control block (SCB) definitions +/* Sprite control block (SCB) definitions */ -typedef struct SCB_REHVST_PAL { // SCB with all attributes +/* SCB with all attributes */ +typedef struct SCB_REHVST_PAL { unsigned char sprctl0; unsigned char sprctl1; unsigned char sprcoll; @@ -96,7 +97,8 @@ typedef struct SCB_REHVST_PAL { // SCB with all attributes unsigned char penpal[8]; } SCB_REHVST_PAL; -typedef struct SCB_REHVST { // SCB without pallette +/* SCB without pallette */ +typedef struct SCB_REHVST { unsigned char sprctl0; unsigned char sprctl1; unsigned char sprcoll; @@ -110,7 +112,8 @@ typedef struct SCB_REHVST { // SCB without pallette unsigned int tilt; } SCB_REHVST; -typedef struct SCB_REHV { // SCB without stretch/tilt +/* SCB without stretch/tilt */ +typedef struct SCB_REHV { unsigned char sprctl0; unsigned char sprctl1; unsigned char sprcoll; @@ -122,7 +125,8 @@ typedef struct SCB_REHV { // SCB without stretch/tilt unsigned int vsize; } SCB_REHV; -typedef struct SCB_REHV_PAL { // SCB without str/tilt, w/ penpal +/* SCB without stretch/tilt, with penpal */ +typedef struct SCB_REHV_PAL { unsigned char sprctl0; unsigned char sprctl1; unsigned char sprcoll; @@ -135,7 +139,8 @@ typedef struct SCB_REHV_PAL { // SCB without str/tilt, w/ penpal unsigned char penpal[8]; } SCB_REHV_PAL; -typedef struct SCB_REHVS { // SCB w/o tilt & penpal +/* SCB without tilt/penpal */ +typedef struct SCB_REHVS { unsigned char sprctl0; unsigned char sprctl1; unsigned char sprcoll; @@ -148,7 +153,8 @@ typedef struct SCB_REHVS { // SCB w/o tilt & penpal unsigned int stretch; } SCB_REHVS; -typedef struct SCB_REHVS_PAL { // SCB w/o tilt w/penpal +/* SCB without tilt, with penpal */ +typedef struct SCB_REHVS_PAL { unsigned char sprctl0; unsigned char sprctl1; unsigned char sprcoll; @@ -162,7 +168,8 @@ typedef struct SCB_REHVS_PAL { // SCB w/o tilt w/penpal unsigned char penpal[8]; } SCB_REHVS_PAL; -typedef struct SCB_RENONE { // SCB w/o size/stretch/tilt/pal +/* SCB without size/stretch/tilt/penpal */ +typedef struct SCB_RENONE { unsigned char sprctl0; unsigned char sprctl1; unsigned char sprcoll; @@ -172,7 +179,8 @@ typedef struct SCB_RENONE { // SCB w/o size/stretch/tilt/pal signed int vpos; } SCB_RENONE; -typedef struct SCB_RENONE_PAL { // SCB w/o size/str/tilt w/penpal +/* SCB without size/str/tilt, with penpal */ +typedef struct SCB_RENONE_PAL { unsigned char sprctl0; unsigned char sprctl1; unsigned char sprcoll; @@ -199,13 +207,13 @@ typedef struct PENPAL_1 { unsigned char penpal[1]; } PENPAL_1; -// SPRGO bit definitions +/* SPRGO bit definitions */ enum { SPRITE_GO = 0x01, // sprite process start bit EVER_ON = 0x04 // everon detector enable }; -// SPRSYS bit definitions for write operations +/* SPRSYS bit definitions for write operations */ enum { SIGNMATH = 0x80, // signed math ACCUMULATE = 0x40, // accumulate multiplication results @@ -215,7 +223,8 @@ enum { CLR_UNSAFE = 0x04, // unsafe access reset SPRITESTOP = 0x02 // request to stop sprite process }; -// SPRSYS bit definitions for read operations + +/* SPRSYS bit definitions for read operations */ enum { MATHWORKING = 0x80, // math operation in progress MATHWARNING = 0x40, // accumulator overflow on multiple or divide by zero @@ -227,7 +236,7 @@ enum { SPRITEWORKING = 0x01 // sprite process is active }; -// Suzy hardware registers +/* Suzy hardware registers */ struct __suzy { unsigned char *tmpadr; // 0xFC00 Temporary address unsigned int tiltacc; // 0xFC02 Tilt accumulator @@ -297,7 +306,7 @@ struct __suzy { // 0xFCC5 - 0xFCFF unused }; -// Hardware math registers +/* Hardware math registers */ #define FACTOR_A *(unsigned int *) 0xFC54 #define FACTOR_B *(unsigned int *) 0xFC52 #define PRODUCT0 *(unsigned int *) 0xFC60 @@ -315,7 +324,7 @@ struct __suzy { #define REMAINDER1 *(unsigned int *) 0xFC6E #define REMAINDER *(long *) 0xFC6C -// Deprecated definitions +/* Deprecated definitions */ /* MAPCTL $FFF9 */ #define HIGHSPEED 0x80 diff --git a/include/lynx.h b/include/lynx.h index e2c0c503f..fe4006461 100644 --- a/include/lynx.h +++ b/include/lynx.h @@ -79,12 +79,12 @@ /* No support for dynamically loadable drivers */ #define DYN_DRV 0 -// Addresses of static drivers +/* Addresses of static drivers */ extern void lynx_stdjoy_joy[]; // Referred to by joy_static_stddrv[] extern void lynx_comlynx_ser[]; // Referred to by ser_static_stddrv[] extern void lynx_160_102_16_tgi[]; // Referred to by tgi_static_stddrv[] -// Sound support +/* Sound support */ void lynx_snd_init (void); // Initialize the sound driver void lynx_snd_pause (void); // Pause sound void lynx_snd_continue (void); // Continue sound after pause @@ -93,18 +93,18 @@ void lynx_snd_stop (void); // Stop sound on all channels void __fastcall__ lynx_snd_stop_channel (unsigned char channel); // Stop sound on all channels unsigned char lynx_snd_active(void); // Show which channels are active -// Cartridge access +/* Cartridge access */ void __fastcall__ lynx_load (int file_number); // Load a file into RAM using a zero-based index void __fastcall__ lynx_exec (int file_number); // Load a file into ram and execute it -// EEPROM access +/* EEPROM access */ unsigned __fastcall__ lynx_eeprom_read (unsigned char cell); // Read a 16 bit word from the given address unsigned __fastcall__ lynx_eeprom_write (unsigned char cell, unsigned val); // Write the word at the given address void __fastcall__ lynx_eeprom_erase (unsigned char cell); // Clear the word at the given address unsigned __fastcall__ lynx_eeread (unsigned cell); // Read a 16 bit word from the given address 93C46, 93C66 or 93C86 unsigned __fastcall__ lynx_eewrite (unsigned cell, unsigned val); // Write the word at the given address 93C46, 93C66 or 93C86 -// TGI extras +/* TGI extras */ #define tgi_sprite(spr) tgi_ioctl(0, spr) #define tgi_flip() tgi_ioctl(1, (void*)0) #define tgi_setbgcolor(bgcol) tgi_ioctl(2, (void*)(bgcol)) From 40369124636a150a841024f6cf2e44b49a082416 Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps.nl> Date: Sat, 9 Nov 2024 12:06:37 +0100 Subject: [PATCH 2540/2710] Fix to trailing whitespace --- include/_suzy.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/_suzy.h b/include/_suzy.h index a9d5ddd7b..5de8ad678 100644 --- a/include/_suzy.h +++ b/include/_suzy.h @@ -113,7 +113,7 @@ typedef struct SCB_REHVST { } SCB_REHVST; /* SCB without stretch/tilt */ -typedef struct SCB_REHV { +typedef struct SCB_REHV { unsigned char sprctl0; unsigned char sprctl1; unsigned char sprcoll; @@ -180,7 +180,7 @@ typedef struct SCB_RENONE { } SCB_RENONE; /* SCB without size/str/tilt, with penpal */ -typedef struct SCB_RENONE_PAL { +typedef struct SCB_RENONE_PAL { unsigned char sprctl0; unsigned char sprctl1; unsigned char sprcoll; From 819a3145082994603efd00498c7bb883e26403db Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sat, 9 Nov 2024 18:09:09 +0100 Subject: [PATCH 2541/2710] Apple2: Rewrite opendir in assembly 58 bytes size gain --- libsrc/apple2/dir.inc | 15 ++++ libsrc/apple2/opendir.c | 112 ----------------------------- libsrc/apple2/opendir.s | 156 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 171 insertions(+), 112 deletions(-) create mode 100644 libsrc/apple2/dir.inc delete mode 100644 libsrc/apple2/opendir.c create mode 100644 libsrc/apple2/opendir.s diff --git a/libsrc/apple2/dir.inc b/libsrc/apple2/dir.inc new file mode 100644 index 000000000..afad44eb7 --- /dev/null +++ b/libsrc/apple2/dir.inc @@ -0,0 +1,15 @@ +.struct DIR + FD .word + ENTRY_LENGTH .byte + ENTRIES_PER_BLOCK .byte + CURRENT_ENTRY .byte + + .union + BYTES .byte 512 + .struct CONTENT + PREV_BLOCK .word + NEXT_BLOCK .word + ENTRIES .byte + .endstruct + .endunion +.endstruct diff --git a/libsrc/apple2/opendir.c b/libsrc/apple2/opendir.c deleted file mode 100644 index 1144d8511..000000000 --- a/libsrc/apple2/opendir.c +++ /dev/null @@ -1,112 +0,0 @@ -/*****************************************************************************/ -/* */ -/* opendir.h */ -/* */ -/* Open a directory */ -/* */ -/* */ -/* */ -/* (C) 2005 Oliver Schmidt, <ol.sc@web.de> */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#include <stddef.h> -#include <stdlib.h> -#include <stdio.h> -#include <unistd.h> -#include <fcntl.h> -#include <errno.h> -#include <dirent.h> -#include "dir.h" - - - -/*****************************************************************************/ -/* Data */ -/*****************************************************************************/ - - - -extern char _cwd[FILENAME_MAX]; - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -DIR* __fastcall__ opendir (register const char* name) -{ - register DIR* dir; - - /* Alloc DIR */ - if ((dir = malloc (sizeof (*dir))) == NULL) { - - /* May not have been done by malloc() */ - _directerrno (ENOMEM); - - /* Return failure */ - return NULL; - } - - /* Interpret dot as current working directory */ - if (*name == '.') { - name = _cwd; - } - - /* Open directory file */ - if ((dir->fd = open (name, O_RDONLY)) != -1) { - - /* Read directory key block */ - if (read (dir->fd, - dir->block.bytes, - sizeof (dir->block)) == sizeof (dir->block)) { - - /* Get directory entry infos from directory header */ - dir->entry_length = dir->block.bytes[0x23]; - dir->entries_per_block = dir->block.bytes[0x24]; - - /* Skip directory header entry */ - dir->current_entry = 1; - - /* Return success */ - return dir; - } - - /* EOF: Most probably no directory file at all */ - if (_oserror == 0) { - _directerrno (EINVAL); - } - - /* Cleanup directory file */ - close (dir->fd); - } - - /* Cleanup DIR */ - free (dir); - - /* Return failure */ - return NULL; -} diff --git a/libsrc/apple2/opendir.s b/libsrc/apple2/opendir.s new file mode 100644 index 000000000..b75b83636 --- /dev/null +++ b/libsrc/apple2/opendir.s @@ -0,0 +1,156 @@ +; +; Colin Leroy-Mira <colin@colino.net>, 2024 +; +; DIR* __fastcall__ opendir (register const char* name) +; + + .export _opendir + + .import _open, _read, _close + .import _malloc, _free + .import ___directerrno + + .import ___oserror, __cwd + + .import pushptr1, popptr1 + .import pushax, pusha0 + + .importzp ptr1 + + .include "apple2.inc" + .include "dir.inc" + .include "errno.inc" + .include "fcntl.inc" + .include "zeropage.inc" + +.proc _opendir + sta ptr1 + stx ptr1+1 + + ldy #$00 + lda (ptr1),y + cmp #'.' + bne :+ + + lda #<__cwd + ldx #>__cwd + sta ptr1 + stx ptr1+1 + +: ; open directory + jsr pushptr1 + lda #O_RDONLY + jsr pusha0 + + ldy #$04 + jsr _open + + cmp #$FF ; Did we succeed? + beq @return_null + pha ; Yes - Push fd for backup + + ; malloc the dir struct + lda #<.sizeof(DIR) + ldx #>.sizeof(DIR) + jsr _malloc + bne :+ + + ; We failed to allocate + pla ; Get fd back + ldx #$00 + jsr _close ; close it + + lda #ENOMEM ; Set error + jsr ___directerrno + +@return_null: + lda #$00 + tax + rts + +: ; Store dir struct to pointer + sta ptr1 + stx ptr1+1 + + ; Push ptr1, read will destroy it + jsr pushptr1 + + ; Save fd to dir struct + lda #$00 + ldy #DIR::FD + 1 + sta (ptr1),y + + dey + pla ; Get fd back + sta (ptr1),y + + jsr pusha0 ; push fd for read + lda #<DIR::BYTES + clc + adc ptr1 + pha + lda #>DIR::BYTES + adc ptr1+1 + tax + pla + jsr pushax ; Push dir->block.bytes for read + + lda #<.sizeof(DIR::BYTES) + ldx #>.sizeof(DIR::BYTES) + + jsr _read ; Read directory block + cpx #>.sizeof(DIR::BYTES) + bne @err_read + cmp #<.sizeof(DIR::BYTES) + beq @read_ok + +@err_read: + ; Read failed, exit + lda ___oserror + bne :+ + lda #EINVAL + jsr ___directerrno + +: ; Close fd + jsr popptr1 ; Restore our dir pointer + ldy #$00 + lda (ptr1),y ; Get fd + ldx #$00 + jsr _close + + ; Free dir structure + lda ptr1 + ldx ptr1+1 + jsr _free + jmp @return_null + +@read_ok: + ; Read succeeded, populate dir struct + jsr popptr1 ; Restore our dir pointer + + ldy #$24 + DIR::BYTES + lda (ptr1),y ; ENTRIES_PER_BLOCK + pha ; Back it up + + dey + lda (ptr1),y ; ENTRY_LENGTH + + ldy #DIR::ENTRY_LENGTH + sta (ptr1),y + + pla + .assert DIR::ENTRIES_PER_BLOCK = DIR::ENTRY_LENGTH + 1, error + iny + sta (ptr1),y + + ; Skip directory header entry + .assert DIR::CURRENT_ENTRY = DIR::ENTRIES_PER_BLOCK + 1, error + iny + lda #$01 + sta (ptr1),y + + ; Return pointer to dir struct + lda ptr1 + ldx ptr1+1 + rts +.endproc From a945bedefc424f44d205f697ba413fd853854e3d Mon Sep 17 00:00:00 2001 From: Alex Thissen <athissen@killer-apps.nl> Date: Sat, 9 Nov 2024 19:46:11 +0100 Subject: [PATCH 2542/2710] Replaced all C++ style comments from Lynx include files --- include/_mikey.h | 123 ++++++++++++++++++------------------ include/_suzy.h | 160 +++++++++++++++++++++++------------------------ include/lynx.h | 44 ++++++------- 3 files changed, 163 insertions(+), 164 deletions(-) diff --git a/include/_mikey.h b/include/_mikey.h index 05212aac9..6e16e98ca 100644 --- a/include/_mikey.h +++ b/include/_mikey.h @@ -53,59 +53,59 @@ typedef struct _mikey_audio { /* Define a structure with the mikey register offsets */ struct __mikey { - struct _mikey_timer timer0; // 0xFD00 - struct _mikey_timer timer1; // 0xFD04 - struct _mikey_timer timer2; // 0xFD08 - struct _mikey_timer timer3; // 0xFD0C - struct _mikey_timer timer4; // 0xFD10 - struct _mikey_timer timer5; // 0xFD14 - struct _mikey_timer timer6; // 0xFD18 - struct _mikey_timer timer7; // 0xFD1C - struct _mikey_audio channel_a; // 0xFD20 - struct _mikey_audio channel_b; // 0xFD28 - struct _mikey_audio channel_c; // 0xFD30 - struct _mikey_audio channel_d; // 0xFD38 - unsigned char attena; // 0xFD40 ?? not yet allocated? - unsigned char attenb; // 0xFD41 | - unsigned char attenc; // 0xFD42 | - unsigned char attend; // 0xFD43 | - unsigned char panning; // 0xFD44 | - unsigned char unused0[11]; // 0xFD45 - 0xFD4F not used - unsigned char mstereo; // 0xFD50 stereo control bits - unsigned char unused1[47]; // 0xFD51 - 0xFD7F not used - unsigned char intrst; // 0xFD80 interrupt poll 0 - unsigned char intset; // 0xFD81 interrupt poll 1 - unsigned char unused2[2]; // 0xFD82 - 0xFD83 not used - unsigned char magrdy0; // 0xFD84 mag tape channel0 ready bit - unsigned char magrdy1; // 0xFD85 mag tape channel1 ready bit - unsigned char audin; // 0xFD86 audio in - unsigned char sysctl1; // 0xFD87 control bits - unsigned char mikeyrev; // 0xFD88 mikey hardware rev - unsigned char mikeysrev; // 0xFD89 mikey software rev - unsigned char iodir; // 0xFD8A parallel i/o data dir - unsigned char iodat; // 0xFD8B parallel data - unsigned char serctl; // 0xFD8C serial control register - unsigned char serdat; // 0xFD8D serial data - unsigned char unused3[2]; // 0xFD8E - 0xFD8F not used - unsigned char sdoneack; // 0xFD90 suzy done acknowledge - unsigned char cpusleep; // 0xFD91 cpu bus request disable - unsigned char dispctl; // 0xFD92 video bus request enable, viddma - unsigned char pkbkup; // 0xFD93 magic 'P' count - unsigned char *scrbase; // 0xFD94 start address of video display - unsigned char unused4[6]; // 0xFD96 - 0xFD9B not used - unsigned char mtest0; // 0xFD9C - unsigned char mtest1; // 0xFD9D - unsigned char mtest2; // 0xFD9E - unsigned char unused5; // 0xFD9F not used - unsigned char palette[32]; // 0xFDA0 - 0xFDBF palette 32 bytes - unsigned char unused6[64]; // 0xFDC0 - 0xFDFF not used - unsigned char bootrom[504]; // 0xFE00 - 0xFFD8 boot rom - unsigned char reserved; // 0xFFD8 reserved for future hardware - unsigned char mapctl; // 0xFFF9 map control register + struct _mikey_timer timer0; /* 0xFD00 */ + struct _mikey_timer timer1; /* 0xFD04 */ + struct _mikey_timer timer2; /* 0xFD08 */ + struct _mikey_timer timer3; /* 0xFD0C */ + struct _mikey_timer timer4; /* 0xFD10 */ + struct _mikey_timer timer5; /* 0xFD14 */ + struct _mikey_timer timer6; /* 0xFD18 */ + struct _mikey_timer timer7; /* 0xFD1C */ + struct _mikey_audio channel_a; /* 0xFD20 */ + struct _mikey_audio channel_b; /* 0xFD28 */ + struct _mikey_audio channel_c; /* 0xFD30 */ + struct _mikey_audio channel_d; /* 0xFD38 */ + unsigned char attena; /* 0xFD40 ?? not yet allocated? */ + unsigned char attenb; /* 0xFD41 | */ + unsigned char attenc; /* 0xFD42 | */ + unsigned char attend; /* 0xFD43 | */ + unsigned char panning; /* 0xFD44 | */ + unsigned char unused0[11]; /* 0xFD45 - 0xFD4F not used */ + unsigned char mstereo; /* 0xFD50 stereo control bits */ + unsigned char unused1[47]; /* 0xFD51 - 0xFD7F not used */ + unsigned char intrst; /* 0xFD80 interrupt poll 0 */ + unsigned char intset; /* 0xFD81 interrupt poll 1 */ + unsigned char unused2[2]; /* 0xFD82 - 0xFD83 not used */ + unsigned char magrdy0; /* 0xFD84 mag tape channel0 ready bit */ + unsigned char magrdy1; /* 0xFD85 mag tape channel1 ready bit */ + unsigned char audin; /* 0xFD86 audio in */ + unsigned char sysctl1; /* 0xFD87 control bits */ + unsigned char mikeyrev; /* 0xFD88 mikey hardware rev */ + unsigned char mikeysrev; /* 0xFD89 mikey software rev */ + unsigned char iodir; /* 0xFD8A parallel i/o data dir */ + unsigned char iodat; /* 0xFD8B parallel data */ + unsigned char serctl; /* 0xFD8C serial control register */ + unsigned char serdat; /* 0xFD8D serial data */ + unsigned char unused3[2]; /* 0xFD8E - 0xFD8F not used */ + unsigned char sdoneack; /* 0xFD90 suzy done acknowledge */ + unsigned char cpusleep; /* 0xFD91 cpu bus request disable */ + unsigned char dispctl; /* 0xFD92 video bus request enable, viddma */ + unsigned char pkbkup; /* 0xFD93 magic 'P' count */ + unsigned char *scrbase; /* 0xFD94 start address of video display */ + unsigned char unused4[6]; /* 0xFD96 - 0xFD9B not used */ + unsigned char mtest0; /* 0xFD9C */ + unsigned char mtest1; /* 0xFD9D */ + unsigned char mtest2; /* 0xFD9E */ + unsigned char unused5; /* 0xFD9F not used */ + unsigned char palette[32]; /* 0xFDA0 - 0xFDBF palette 32 bytes */ + unsigned char unused6[64]; /* 0xFDC0 - 0xFDFF not used */ + unsigned char bootrom[504]; /* 0xFE00 - 0xFFD8 boot rom */ + unsigned char reserved; /* 0xFFD8 reserved for future hardware */ + unsigned char mapctl; /* 0xFFF9 map control register */ struct { - unsigned char *nmi; // 0xFFFA NMI vector - unsigned char *reset; // 0xFFFB reset vector - unsigned char *irq; // 0xFFFC IRQ vector + unsigned char *nmi; /* 0xFFFA NMI vector */ + unsigned char *reset; /* 0xFFFB reset vector */ + unsigned char *irq; /* 0xFFFC IRQ vector */ } vectors; }; @@ -180,12 +180,12 @@ enum { /* IODIR and IODAT bit definitions */ enum { - AUDIN_BIT = 0x10, // different from AUDIN address - READ_ENABLE = 0x10, // same bit for AUDIN_BIT + AUDIN_BIT = 0x10, /* different from AUDIN address */ + READ_ENABLE = 0x10, /* same bit for AUDIN_BIT */ RESTLESS = 0x08, - NOEXP = 0x04, // if set, redeye is not connected - CART_ADDR_DATA = 0x02, // - CART_POWER_OFF = 0x02, // same bit for CART_ADDR_DATA + NOEXP = 0x04, /* if set, redeye is not connected */ + CART_ADDR_DATA = 0x02, + CART_POWER_OFF = 0x02, /* same bit for CART_ADDR_DATA */ EXTERNAL_POWER = 0x01 }; @@ -214,10 +214,10 @@ enum { /* DISPCTL bit definitions */ enum { - DISP_COLOR = 0x08, // must be set to 1 - DISP_FOURBIT = 0x04, // must be set to 1 - DISP_FLIP = 0x02, // - DMA_ENABLE = 0x01 // must be set to 1 + DISP_COLOR = 0x08, /* must be set to 1 */ + DISP_FOURBIT = 0x04, /* must be set to 1 */ + DISP_FLIP = 0x02, + DMA_ENABLE = 0x01 /* must be set to 1 */ }; /* MTEST0 bit definitions */ @@ -262,4 +262,3 @@ enum { }; #endif - diff --git a/include/_suzy.h b/include/_suzy.h index 5de8ad678..50845c958 100644 --- a/include/_suzy.h +++ b/include/_suzy.h @@ -209,101 +209,101 @@ typedef struct PENPAL_1 { /* SPRGO bit definitions */ enum { - SPRITE_GO = 0x01, // sprite process start bit - EVER_ON = 0x04 // everon detector enable + SPRITE_GO = 0x01, /* sprite process start bit */ + EVER_ON = 0x04 /* everon detector enable */ }; /* SPRSYS bit definitions for write operations */ enum { - SIGNMATH = 0x80, // signed math - ACCUMULATE = 0x40, // accumulate multiplication results - NO_COLLIDE = 0x20, // do not collide with any sprites (also SPRCOLL bit definition) - VSTRETCH = 0x10, // stretch v + SIGNMATH = 0x80, /* signed math */ + ACCUMULATE = 0x40, /* accumulate multiplication results */ + NO_COLLIDE = 0x20, /* do not collide with any sprites (also SPRCOLL bit definition) */ + VSTRETCH = 0x10, /* stretch v */ LEFTHAND = 0x08, - CLR_UNSAFE = 0x04, // unsafe access reset - SPRITESTOP = 0x02 // request to stop sprite process + CLR_UNSAFE = 0x04, /* unsafe access reset */ + SPRITESTOP = 0x02 /* request to stop sprite process */ }; /* SPRSYS bit definitions for read operations */ enum { - MATHWORKING = 0x80, // math operation in progress - MATHWARNING = 0x40, // accumulator overflow on multiple or divide by zero - MATHCARRY = 0x20, // last carry bit + MATHWORKING = 0x80, /* math operation in progress */ + MATHWARNING = 0x40, /* accumulator overflow on multiple or divide by zero */ + MATHCARRY = 0x20, /* last carry bit */ VSTRETCHING = 0x10, LEFTHANDED = 0x08, - UNSAFE_ACCESS = 0x04, // unsafe access performed - SPRITETOSTOP = 0x02, // requested to stop - SPRITEWORKING = 0x01 // sprite process is active + UNSAFE_ACCESS = 0x04, /* unsafe access performed */ + SPRITETOSTOP = 0x02, /* requested to stop */ + SPRITEWORKING = 0x01 /* sprite process is active */ }; /* Suzy hardware registers */ struct __suzy { - unsigned char *tmpadr; // 0xFC00 Temporary address - unsigned int tiltacc; // 0xFC02 Tilt accumulator - unsigned int hoff; // 0xFC04 Offset to H edge of screen - unsigned int voff; // 0xFC06 Offset to V edge of screen - unsigned char *sprbase; // 0xFC08 Base address of sprite - unsigned char *colbase; // 0xFC0A Base address of collision buffer - unsigned char *vidadr; // 0xFC0C Current vid buffer address - unsigned char *coladr; // 0xFC0E Current col buffer address - unsigned char *scbnext; // 0xFC10 Address of next SCB - unsigned char *sprdline; // 0xFC12 start of sprite data line address - unsigned int hposstrt; // 0xFC14 start hpos - unsigned int vposstrt; // 0xFC16 start vpos - unsigned int sprhsize; // 0xFC18 sprite h size - unsigned int sprvsize; // 0xFC1A sprite v size - unsigned int stretchl; // 0xFC1C H size adder - unsigned int tilt; // 0xFC1E H pos adder - unsigned int sprdoff; // 0xFC20 offset to next sprite data line - unsigned int sprvpos; // 0xFC22 current vpos - unsigned int colloff; // 0xFC24 offset to collision depository - unsigned int vsizeacc; // 0xFC26 vertical size accumulator - unsigned int hsizeoff; // 0xFC28 horizontal size offset - unsigned int vsizeoff; // 0xFC2A vertical size offset - unsigned char *scbaddr; // 0xFC2C address of current SCB - unsigned char *procaddr; // 0xFC2E address of current spr data proc - unsigned char unused0[32]; // 0xFC30 - 0xFC4F reserved/unused - unsigned char unused1[2]; // 0xFC50 - 0xFC51 do not use - unsigned char mathd; // 0xFC52 - unsigned char mathc; // 0xFC53 - unsigned char mathb; // 0xFC54 - unsigned char matha; // 0xFC55 write starts a multiply operation - unsigned char mathp; // 0xFC56 - unsigned char mathn; // 0xFC57 - unsigned char unused2[8]; // 0xFC58 - 0xFC5F do not use - unsigned char mathh; // 0xFC60 - unsigned char mathg; // 0xFC61 - unsigned char mathf; // 0xFC62 - unsigned char mathe; // 0xFC63 write starts a divide operation - unsigned char unused3[8]; // 0xFC64 - 0xFC6B do not use - unsigned char mathm; // 0xFC6C - unsigned char mathl; // 0xFC6D - unsigned char mathk; // 0xFC6E - unsigned char mathj; // 0xFC6F - unsigned char unused4[16]; // 0xFC70 - 0xFC7F do not use - unsigned char sprctl0; // 0xFC80 sprite control bits 0 - unsigned char sprctl1; // 0xFC81 sprite control bits 1 - unsigned char sprcoll; // 0xFC82 sprite collision number - unsigned char sprinit; // 0xFC83 sprite initialization bits - unsigned char unused5[4]; // 0xFC84 - 0xFC87 unused - unsigned char suzyhrev; // 0xFC88 suzy hardware rev - unsigned char suzysrev; // 0xFC89 suzy software rev - unsigned char unused6[6]; // 0xFC8A - 0xFC8F unused - unsigned char suzybusen; // 0xFC90 suzy bus enable - unsigned char sprgo; // 0xFC91 sprite process start bit - unsigned char sprsys; // 0xFC92 sprite system control bits - unsigned char unused7[29]; // 0xFC93 - 0xFCAF unused - unsigned char joystick; // 0xFCB0 joystick and buttons - unsigned char switches; // 0xFCB1 other switches - unsigned char cart0; // 0xFCB2 cart0 r/w - unsigned char cart1; // 0xFCB3 cart1 r/w - unsigned char unused8[8]; // 0xFCB4 - 0xFCBF unused - unsigned char leds; // 0xFCC0 leds - unsigned char unused9; // 0xFCC1 unused - unsigned char parstat; // 0xFCC2 parallel port status - unsigned char pardata; // 0xFCC3 parallel port data - unsigned char howie; // 0xFCC4 howie (?) - // 0xFCC5 - 0xFCFF unused + unsigned char *tmpadr; /* 0xFC00 Temporary address */ + unsigned int tiltacc; /* 0xFC02 Tilt accumulator */ + unsigned int hoff; /* 0xFC04 Offset to H edge of screen */ + unsigned int voff; /* 0xFC06 Offset to V edge of screen */ + unsigned char *sprbase; /* 0xFC08 Base address of sprite */ + unsigned char *colbase; /* 0xFC0A Base address of collision buffer */ + unsigned char *vidadr; /* 0xFC0C Current vid buffer address */ + unsigned char *coladr; /* 0xFC0E Current col buffer address */ + unsigned char *scbnext; /* 0xFC10 Address of next SCB */ + unsigned char *sprdline; /* 0xFC12 start of sprite data line address */ + unsigned int hposstrt; /* 0xFC14 start hpos */ + unsigned int vposstrt; /* 0xFC16 start vpos */ + unsigned int sprhsize; /* 0xFC18 sprite h size */ + unsigned int sprvsize; /* 0xFC1A sprite v size */ + unsigned int stretchl; /* 0xFC1C H size adder */ + unsigned int tilt; /* 0xFC1E H pos adder */ + unsigned int sprdoff; /* 0xFC20 offset to next sprite data line */ + unsigned int sprvpos; /* 0xFC22 current vpos */ + unsigned int colloff; /* 0xFC24 offset to collision depository */ + unsigned int vsizeacc; /* 0xFC26 vertical size accumulator */ + unsigned int hsizeoff; /* 0xFC28 horizontal size offset */ + unsigned int vsizeoff; /* 0xFC2A vertical size offset */ + unsigned char *scbaddr; /* 0xFC2C address of current SCB */ + unsigned char *procaddr; /* 0xFC2E address of current spr data proc */ + unsigned char unused0[32]; /* 0xFC30 - 0xFC4F reserved/unused */ + unsigned char unused1[2]; /* 0xFC50 - 0xFC51 do not use */ + unsigned char mathd; /* 0xFC52 */ + unsigned char mathc; /* 0xFC53 */ + unsigned char mathb; /* 0xFC54 */ + unsigned char matha; /* 0xFC55 write starts a multiply operation */ + unsigned char mathp; /* 0xFC56 */ + unsigned char mathn; /* 0xFC57 */ + unsigned char unused2[8]; /* 0xFC58 - 0xFC5F do not use */ + unsigned char mathh; /* 0xFC60 */ + unsigned char mathg; /* 0xFC61 */ + unsigned char mathf; /* 0xFC62 */ + unsigned char mathe; /* 0xFC63 write starts a divide operation */ + unsigned char unused3[8]; /* 0xFC64 - 0xFC6B do not use */ + unsigned char mathm; /* 0xFC6C */ + unsigned char mathl; /* 0xFC6D */ + unsigned char mathk; /* 0xFC6E */ + unsigned char mathj; /* 0xFC6F */ + unsigned char unused4[16]; /* 0xFC70 - 0xFC7F do not use */ + unsigned char sprctl0; /* 0xFC80 sprite control bits 0 */ + unsigned char sprctl1; /* 0xFC81 sprite control bits 1 */ + unsigned char sprcoll; /* 0xFC82 sprite collision number */ + unsigned char sprinit; /* 0xFC83 sprite initialization bits */ + unsigned char unused5[4]; /* 0xFC84 - 0xFC87 unused */ + unsigned char suzyhrev; /* 0xFC88 suzy hardware rev */ + unsigned char suzysrev; /* 0xFC89 suzy software rev */ + unsigned char unused6[6]; /* 0xFC8A - 0xFC8F unused */ + unsigned char suzybusen; /* 0xFC90 suzy bus enable */ + unsigned char sprgo; /* 0xFC91 sprite process start bit */ + unsigned char sprsys; /* 0xFC92 sprite system control bits */ + unsigned char unused7[29]; /* 0xFC93 - 0xFCAF unused */ + unsigned char joystick; /* 0xFCB0 joystick and buttons */ + unsigned char switches; /* 0xFCB1 other switches */ + unsigned char cart0; /* 0xFCB2 cart0 r/w */ + unsigned char cart1; /* 0xFCB3 cart1 r/w */ + unsigned char unused8[8]; /* 0xFCB4 - 0xFCBF unused */ + unsigned char leds; /* 0xFCC0 leds */ + unsigned char unused9; /* 0xFCC1 unused */ + unsigned char parstat; /* 0xFCC2 parallel port status */ + unsigned char pardata; /* 0xFCC3 parallel port data */ + unsigned char howie; /* 0xFCC4 howie (?) */ + /* 0xFCC5 - 0xFCFF unused */ }; /* Hardware math registers */ diff --git a/include/lynx.h b/include/lynx.h index fe4006461..259b3da71 100644 --- a/include/lynx.h +++ b/include/lynx.h @@ -80,29 +80,29 @@ #define DYN_DRV 0 /* Addresses of static drivers */ -extern void lynx_stdjoy_joy[]; // Referred to by joy_static_stddrv[] -extern void lynx_comlynx_ser[]; // Referred to by ser_static_stddrv[] -extern void lynx_160_102_16_tgi[]; // Referred to by tgi_static_stddrv[] +extern void lynx_stdjoy_joy[]; /* Referred to by joy_static_stddrv[] */ +extern void lynx_comlynx_ser[]; /* Referred to by ser_static_stddrv[] */ +extern void lynx_160_102_16_tgi[]; /* Referred to by tgi_static_stddrv[] */ /* Sound support */ -void lynx_snd_init (void); // Initialize the sound driver -void lynx_snd_pause (void); // Pause sound -void lynx_snd_continue (void); // Continue sound after pause -void __fastcall__ lynx_snd_play (unsigned char channel, unsigned char *music); // Play tune on channel -void lynx_snd_stop (void); // Stop sound on all channels -void __fastcall__ lynx_snd_stop_channel (unsigned char channel); // Stop sound on all channels -unsigned char lynx_snd_active(void); // Show which channels are active +void lynx_snd_init (void); /* Initialize the sound driver */ +void lynx_snd_pause (void); /* Pause sound */ +void lynx_snd_continue (void); /* Continue sound after pause */ +void __fastcall__ lynx_snd_play (unsigned char channel, unsigned char *music); /* Play tune on channel */ +void lynx_snd_stop (void); /* Stop sound on all channels */ +void __fastcall__ lynx_snd_stop_channel (unsigned char channel); /* Stop sound on all channels */ +unsigned char lynx_snd_active(void); /* Show which channels are active */ /* Cartridge access */ -void __fastcall__ lynx_load (int file_number); // Load a file into RAM using a zero-based index -void __fastcall__ lynx_exec (int file_number); // Load a file into ram and execute it +void __fastcall__ lynx_load (int file_number); /* Load a file into RAM using a zero-based index */ +void __fastcall__ lynx_exec (int file_number); /* Load a file into ram and execute it */ /* EEPROM access */ -unsigned __fastcall__ lynx_eeprom_read (unsigned char cell); // Read a 16 bit word from the given address -unsigned __fastcall__ lynx_eeprom_write (unsigned char cell, unsigned val); // Write the word at the given address -void __fastcall__ lynx_eeprom_erase (unsigned char cell); // Clear the word at the given address -unsigned __fastcall__ lynx_eeread (unsigned cell); // Read a 16 bit word from the given address 93C46, 93C66 or 93C86 -unsigned __fastcall__ lynx_eewrite (unsigned cell, unsigned val); // Write the word at the given address 93C46, 93C66 or 93C86 +unsigned __fastcall__ lynx_eeprom_read (unsigned char cell); /* Read a 16 bit word from the given address */ +unsigned __fastcall__ lynx_eeprom_write (unsigned char cell, unsigned val); /* Write the word at the given address */ +void __fastcall__ lynx_eeprom_erase (unsigned char cell); /* Clear the word at the given address */ +unsigned __fastcall__ lynx_eeread (unsigned cell); /* Read a 16 bit word from the given address 93C46, 93C66 or 93C86 */ +unsigned __fastcall__ lynx_eewrite (unsigned cell, unsigned val); /* Write the word at the given address 93C46, 93C66 or 93C86 */ /* TGI extras */ #define tgi_sprite(spr) tgi_ioctl(0, spr) @@ -117,11 +117,11 @@ unsigned __fastcall__ lynx_eewrite (unsigned cell, unsigned val); // Write the w #include <_mikey.h> #define MIKEY (*(struct __mikey *)0xFD00) -#define _MIKEY_TIMERS (*(struct _mikey_all_timers *) 0xFD00) // mikey_timers[8] -#define _HBL_TIMER (*(struct _mikey_timer *) 0xFD00) // timer0 (HBL) -#define _VBL_TIMER (*(struct _mikey_timer *) 0xFD08) // timer2 (VBL) -#define _UART_TIMER (*(struct _mikey_timer *) 0xFD14) // timer4 (UART) -#define _VIDDMA (*(unsigned int *) 0xFD92) // dispctl/viddma +#define _MIKEY_TIMERS (*(struct _mikey_all_timers *) 0xFD00) /* mikey_timers[8] */ +#define _HBL_TIMER (*(struct _mikey_timer *) 0xFD00) /* timer0 (HBL) */ +#define _VBL_TIMER (*(struct _mikey_timer *) 0xFD08) /* timer2 (VBL) */ +#define _UART_TIMER (*(struct _mikey_timer *) 0xFD14) /* timer4 (UART) */ +#define _VIDDMA (*(unsigned int *) 0xFD92) /* DISPCTL/VIDDMA */ #include <_suzy.h> #define SUZY (*(volatile struct __suzy*)0xFC00) From fa80e171a21d796d7f9c58d2fabd010dc0cfada5 Mon Sep 17 00:00:00 2001 From: Clyde Shaffer <clydeshaffer@gmail.com> Date: Tue, 12 Nov 2024 01:57:27 -0500 Subject: [PATCH 2543/2710] [LD65] Add bank number to dbgfile --- src/ld65/segments.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/ld65/segments.c b/src/ld65/segments.c index 255b8ccd1..35d178774 100644 --- a/src/ld65/segments.c +++ b/src/ld65/segments.c @@ -638,6 +638,13 @@ void PrintDbgSegments (FILE* F) fprintf (F, ",oname=\"%s\",ooffs=%lu", S->OutputName, S->OutputOffs); } + if (S->MemArea) { + if (S->MemArea->BankExpr) { + if (IsConstExpr (S->MemArea->BankExpr)) { + fprintf (F, ",bank=%lu", GetExprVal(S->MemArea->BankExpr)); + } + } + } fputc ('\n', F); } } From 40d9f3eed513f4263f93aa6400acae931083a183 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 10 Nov 2024 13:38:35 +0100 Subject: [PATCH 2544/2710] Apple2: Provide a way to get directory file count The information is available in the directory key block. Providing it to the user as soon as opendir() is done can save them costly code. --- doc/apple2.sgml | 1 + doc/apple2enh.sgml | 1 + doc/funcref.sgml | 21 +++++++++++++++++++++ include/apple2.h | 5 +++++ include/dirent.h | 2 -- libsrc/apple2/dir.h | 1 + libsrc/apple2/dir.inc | 2 +- libsrc/apple2/dir_file_count.s | 24 ++++++++++++++++++++++++ libsrc/apple2/opendir.s | 21 ++++++++++----------- 9 files changed, 64 insertions(+), 14 deletions(-) create mode 100644 libsrc/apple2/dir_file_count.s diff --git a/doc/apple2.sgml b/doc/apple2.sgml index c0255c4f7..c6b2fe8eb 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -332,6 +332,7 @@ usage. <item>_datetime <item>allow_lowercase <item>beep +<item>dir_file_count <item>get_ostype <item>gmtime_dt <item>mktime_dt diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 9c46bd4fb..ea950fa26 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -332,6 +332,7 @@ usage. <item>_filetype <item>_datetime <item>beep +<item>dir_file_count <item>get_ostype <item>gmtime_dt <item>mktime_dt diff --git a/doc/funcref.sgml b/doc/funcref.sgml index ea2350aad..7664739fe 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -97,6 +97,7 @@ function. <item>_dos_type <item>allow_lowercase <item><ref id="beep" name="beep"> +<item><ref id="dir_file_count" name="dir_file_count"> <item><ref id="get_ostype" name="get_ostype"> <item><ref id="gmtime_dt" name="gmtime_dt"> <item><ref id="mktime_dt" name="mktime_dt"> @@ -109,6 +110,7 @@ function. <itemize> <item>_dos_type <item><ref id="beep" name="beep"> +<item><ref id="dir_file_count" name="dir_file_count"> <item><ref id="get_ostype" name="get_ostype"> <item><ref id="gmtime_dt" name="gmtime_dt"> <item><ref id="mktime_dt" name="mktime_dt"> @@ -3524,6 +3526,25 @@ used in presence of a prototype. </quote> +<sect1>dir_file_count<label id="dir_file_count"><p> + +<quote> +<descrip> +<tag/Function/Returns the number of files in the directory. +<tag/Header/<tt/<ref id="apple2.h" name="apple2.h">/ +<tag/Declaration/<tt/unsigned int __fastcall__ dir_file_count(DIR *dir);/ +<tag/Description/<tt/dir_file_count/ is machine dependent and does not exist for +all supported targets. If it exists, it returns the number of active +(non-deleted) files in the directory. +<tag/Notes/<itemize> +<item>The function does not exist on all platforms. +</itemize> +<tag/Availability/cc65 (not all platforms) +<tag/Example/None. +</descrip> +</quote> + + <sect1>div<label id="div"><p> <quote> diff --git a/include/apple2.h b/include/apple2.h index 1a840be6e..358d44ac4 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -232,6 +232,11 @@ struct tm* __fastcall__ gmtime_dt (const struct datetime* dt); time_t __fastcall__ mktime_dt (const struct datetime* dt); /* Converts a ProDOS date/time structure to a time_t UNIX timestamp */ +typedef struct DIR DIR; + +unsigned int __fastcall__ dir_file_count(DIR *dir); +/* Returns the number of active files in a ProDOS directory */ + #if !defined(__APPLE2ENH__) unsigned char __fastcall__ allow_lowercase (unsigned char onoff); /* If onoff is 0, lowercase characters printed to the screen via STDIO and diff --git a/include/dirent.h b/include/dirent.h index b95646833..60982ba05 100644 --- a/include/dirent.h +++ b/include/dirent.h @@ -147,7 +147,5 @@ void __fastcall__ seekdir (DIR* dir, long offs); void __fastcall__ rewinddir (DIR* dir); - - /* End of dirent.h */ #endif diff --git a/libsrc/apple2/dir.h b/libsrc/apple2/dir.h index 369080c47..ed44f08c6 100644 --- a/libsrc/apple2/dir.h +++ b/libsrc/apple2/dir.h @@ -45,6 +45,7 @@ struct DIR { int fd; unsigned char entry_length; unsigned char entries_per_block; + unsigned int file_count; unsigned char current_entry; union { unsigned char bytes[512]; diff --git a/libsrc/apple2/dir.inc b/libsrc/apple2/dir.inc index afad44eb7..545ae003b 100644 --- a/libsrc/apple2/dir.inc +++ b/libsrc/apple2/dir.inc @@ -2,8 +2,8 @@ FD .word ENTRY_LENGTH .byte ENTRIES_PER_BLOCK .byte + FILE_COUNT .word CURRENT_ENTRY .byte - .union BYTES .byte 512 .struct CONTENT diff --git a/libsrc/apple2/dir_file_count.s b/libsrc/apple2/dir_file_count.s new file mode 100644 index 000000000..aa864e32a --- /dev/null +++ b/libsrc/apple2/dir_file_count.s @@ -0,0 +1,24 @@ +; +; Colin Leroy-Mira <colin@colino.net>, 2024 +; +; unsigned int __fastcall__ dir_file_count(DIR *dir); +; + + .export _dir_file_count + + .importzp ptr1 + + .include "apple2.inc" + .include "dir.inc" + +.proc _dir_file_count + sta ptr1 + stx ptr1+1 + + ldy #DIR::FILE_COUNT + 1 + lda (ptr1),y + tax + dey + lda (ptr1),y + rts +.endproc diff --git a/libsrc/apple2/opendir.s b/libsrc/apple2/opendir.s index b75b83636..38110b680 100644 --- a/libsrc/apple2/opendir.s +++ b/libsrc/apple2/opendir.s @@ -128,24 +128,23 @@ ; Read succeeded, populate dir struct jsr popptr1 ; Restore our dir pointer - ldy #$24 + DIR::BYTES - lda (ptr1),y ; ENTRIES_PER_BLOCK - pha ; Back it up - + ; Get file_count to entry_length from block + ldy #$26 + DIR::BYTES +: lda (ptr1),y + pha dey - lda (ptr1),y ; ENTRY_LENGTH + cpy #$23 + DIR::BYTES - 1 + bne :- + ; Set entry_length to file_count in struct ldy #DIR::ENTRY_LENGTH +: pla sta (ptr1),y - - pla - .assert DIR::ENTRIES_PER_BLOCK = DIR::ENTRY_LENGTH + 1, error iny - sta (ptr1),y + cpy #DIR::CURRENT_ENTRY + bne :- ; Skip directory header entry - .assert DIR::CURRENT_ENTRY = DIR::ENTRIES_PER_BLOCK + 1, error - iny lda #$01 sta (ptr1),y From 700c01fa8b8927e46ddfe92662adb5dc73999dd8 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 14 Nov 2024 21:57:43 +0100 Subject: [PATCH 2545/2710] Rename dir_file_count to dir_entry_count --- doc/apple2.sgml | 2 +- doc/apple2enh.sgml | 2 +- doc/funcref.sgml | 14 +++++++------- include/apple2.h | 2 +- .../apple2/{dir_file_count.s => dir_entry_count.s} | 6 +++--- 5 files changed, 13 insertions(+), 13 deletions(-) rename libsrc/apple2/{dir_file_count.s => dir_entry_count.s} (74%) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index c6b2fe8eb..ffe0e2397 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -332,7 +332,7 @@ usage. <item>_datetime <item>allow_lowercase <item>beep -<item>dir_file_count +<item>dir_entry_count <item>get_ostype <item>gmtime_dt <item>mktime_dt diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index ea950fa26..fce6127bd 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -332,7 +332,7 @@ usage. <item>_filetype <item>_datetime <item>beep -<item>dir_file_count +<item>dir_entry_count <item>get_ostype <item>gmtime_dt <item>mktime_dt diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 7664739fe..f2dd02efc 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -97,7 +97,7 @@ function. <item>_dos_type <item>allow_lowercase <item><ref id="beep" name="beep"> -<item><ref id="dir_file_count" name="dir_file_count"> +<item><ref id="dir_entry_count" name="dir_entry_count"> <item><ref id="get_ostype" name="get_ostype"> <item><ref id="gmtime_dt" name="gmtime_dt"> <item><ref id="mktime_dt" name="mktime_dt"> @@ -110,7 +110,7 @@ function. <itemize> <item>_dos_type <item><ref id="beep" name="beep"> -<item><ref id="dir_file_count" name="dir_file_count"> +<item><ref id="dir_entry_count" name="dir_entry_count"> <item><ref id="get_ostype" name="get_ostype"> <item><ref id="gmtime_dt" name="gmtime_dt"> <item><ref id="mktime_dt" name="mktime_dt"> @@ -3526,16 +3526,16 @@ used in presence of a prototype. </quote> -<sect1>dir_file_count<label id="dir_file_count"><p> +<sect1>dir_entry_count<label id="dir_entry_count"><p> <quote> <descrip> -<tag/Function/Returns the number of files in the directory. +<tag/Function/Returns the number of entries in the directory. <tag/Header/<tt/<ref id="apple2.h" name="apple2.h">/ -<tag/Declaration/<tt/unsigned int __fastcall__ dir_file_count(DIR *dir);/ -<tag/Description/<tt/dir_file_count/ is machine dependent and does not exist for +<tag/Declaration/<tt/unsigned int __fastcall__ dir_entry_count(DIR *dir);/ +<tag/Description/<tt/dir_entry_count/ is machine dependent and does not exist for all supported targets. If it exists, it returns the number of active -(non-deleted) files in the directory. +(non-deleted) files and directories in the directory. <tag/Notes/<itemize> <item>The function does not exist on all platforms. </itemize> diff --git a/include/apple2.h b/include/apple2.h index 358d44ac4..15055f412 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -234,7 +234,7 @@ time_t __fastcall__ mktime_dt (const struct datetime* dt); typedef struct DIR DIR; -unsigned int __fastcall__ dir_file_count(DIR *dir); +unsigned int __fastcall__ dir_entry_count(DIR *dir); /* Returns the number of active files in a ProDOS directory */ #if !defined(__APPLE2ENH__) diff --git a/libsrc/apple2/dir_file_count.s b/libsrc/apple2/dir_entry_count.s similarity index 74% rename from libsrc/apple2/dir_file_count.s rename to libsrc/apple2/dir_entry_count.s index aa864e32a..6a80bef28 100644 --- a/libsrc/apple2/dir_file_count.s +++ b/libsrc/apple2/dir_entry_count.s @@ -1,17 +1,17 @@ ; ; Colin Leroy-Mira <colin@colino.net>, 2024 ; -; unsigned int __fastcall__ dir_file_count(DIR *dir); +; unsigned int __fastcall__ dir_entry_count(DIR *dir); ; - .export _dir_file_count + .export _dir_entry_count .importzp ptr1 .include "apple2.inc" .include "dir.inc" -.proc _dir_file_count +.proc _dir_entry_count sta ptr1 stx ptr1+1 From 90e436095853cc890b8471277ab7fd623041a4cf Mon Sep 17 00:00:00 2001 From: Clyde Shaffer <clydeshaffer@gmail.com> Date: Sat, 16 Nov 2024 17:13:04 -0500 Subject: [PATCH 2546/2710] Parse and report segment bank number in dbginfo module and test shell --- src/dbginfo/dbginfo.c | 30 ++++++++++++++++++++++++------ src/dbginfo/dbginfo.h | 1 + src/dbginfo/dbgsh.c | 3 ++- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/dbginfo/dbginfo.c b/src/dbginfo/dbginfo.c index fee41012c..1f693e513 100644 --- a/src/dbginfo/dbginfo.c +++ b/src/dbginfo/dbginfo.c @@ -127,6 +127,7 @@ typedef enum { TOK_ABSOLUTE = TOK_FIRST_KEYWORD, /* ABSOLUTE keyword */ TOK_ADDRSIZE, /* ADDRSIZE keyword */ TOK_AUTO, /* AUTO keyword */ + TOK_BANK, /* BANK keyword */ TOK_COUNT, /* COUNT keyword */ TOK_CSYM, /* CSYM keyword */ TOK_DEF, /* DEF keyword */ @@ -347,6 +348,7 @@ struct SegInfo { cc65_size Size; /* Size of segment */ char* OutputName; /* Name of output file */ unsigned long OutputOffs; /* Offset in output file */ + unsigned Bank; /* Bank number of memory area */ char Name[1]; /* Name of segment */ }; @@ -1618,7 +1620,8 @@ static int CompareScopeInfoByName (const void* L, const void* R) static SegInfo* NewSegInfo (const StrBuf* Name, unsigned Id, cc65_addr Start, cc65_addr Size, - const StrBuf* OutputName, unsigned long OutputOffs) + const StrBuf* OutputName, unsigned long OutputOffs, + unsigned Bank) /* Create a new SegInfo struct and return it */ { /* Allocate memory */ @@ -1628,6 +1631,7 @@ static SegInfo* NewSegInfo (const StrBuf* Name, unsigned Id, S->Id = Id; S->Start = Start; S->Size = Size; + S->Bank = Bank; if (SB_GetLen (OutputName) > 0) { /* Output file given */ S->OutputName = SB_StrDup (OutputName); @@ -1676,6 +1680,7 @@ static void CopySegInfo (cc65_segmentdata* D, const SegInfo* S) D->segment_size = S->Size; D->output_name = S->OutputName; D->output_offs = S->OutputOffs; + D->segment_bank = S->Bank; } @@ -2528,6 +2533,7 @@ static void NextToken (InputData* D) { "abs", TOK_ABSOLUTE }, { "addrsize", TOK_ADDRSIZE }, { "auto", TOK_AUTO }, + { "bank", TOK_BANK }, { "count", TOK_COUNT }, { "csym", TOK_CSYM }, { "def", TOK_DEF }, @@ -3838,6 +3844,7 @@ static void ParseSegment (InputData* D) StrBuf Name = STRBUF_INITIALIZER; StrBuf OutputName = STRBUF_INITIALIZER; unsigned long OutputOffs = 0; + unsigned Bank = 0; SegInfo* S; enum { ibNone = 0x000, @@ -3850,6 +3857,7 @@ static void ParseSegment (InputData* D) ibSize = 0x020, ibStart = 0x040, ibType = 0x080, + ibBank = 0x100, ibRequired = ibId | ibName | ibStart | ibSize | ibAddrSize | ibType, } InfoBits = ibNone; @@ -3863,10 +3871,11 @@ static void ParseSegment (InputData* D) Token Tok; /* Something we know? */ - if (D->Tok != TOK_ADDRSIZE && D->Tok != TOK_ID && - D->Tok != TOK_NAME && D->Tok != TOK_OUTPUTNAME && - D->Tok != TOK_OUTPUTOFFS && D->Tok != TOK_SIZE && - D->Tok != TOK_START && D->Tok != TOK_TYPE) { + if (D->Tok != TOK_ADDRSIZE && D->Tok != TOK_BANK && + D->Tok != TOK_ID && D->Tok != TOK_NAME && + D->Tok != TOK_OUTPUTNAME && D->Tok != TOK_OUTPUTOFFS && + D->Tok != TOK_SIZE && D->Tok != TOK_START && + D->Tok != TOK_TYPE) { /* Try smart error recovery */ if (D->Tok == TOK_IDENT || TokenIsKeyword (D->Tok)) { @@ -3892,6 +3901,15 @@ static void ParseSegment (InputData* D) InfoBits |= ibAddrSize; break; + case TOK_BANK: + if (!IntConstFollows (D)) { + goto ErrorExit; + } + Bank = D->IVal; + InfoBits |= ibBank; + NextToken (D); + break; + case TOK_ID: if (!IntConstFollows (D)) { goto ErrorExit; @@ -3992,7 +4010,7 @@ static void ParseSegment (InputData* D) } /* Create the segment info and remember it */ - S = NewSegInfo (&Name, Id, Start, Size, &OutputName, OutputOffs); + S = NewSegInfo (&Name, Id, Start, Size, &OutputName, OutputOffs, Bank); CollReplaceExpand (&D->Info->SegInfoById, S, Id); CollAppend (&D->Info->SegInfoByName, S); diff --git a/src/dbginfo/dbginfo.h b/src/dbginfo/dbginfo.h index 95aae837c..07914f238 100644 --- a/src/dbginfo/dbginfo.h +++ b/src/dbginfo/dbginfo.h @@ -521,6 +521,7 @@ struct cc65_segmentdata { cc65_size segment_size; /* Size of segment */ const char* output_name; /* Output file this seg was written to */ unsigned long output_offs; /* Offset of this seg in output file */ + unsigned segment_bank; }; typedef struct cc65_segmentinfo cc65_segmentinfo; diff --git a/src/dbginfo/dbgsh.c b/src/dbginfo/dbgsh.c index ba5d83849..6a95db2af 100644 --- a/src/dbginfo/dbgsh.c +++ b/src/dbginfo/dbgsh.c @@ -721,7 +721,7 @@ static void PrintSegmentHeader (void) /* Output a header for a list of segments */ { /* Header */ - PrintLine (" id name address size output file offs"); + PrintLine (" id name address size output file offs bank"); PrintSeparator (); } @@ -741,6 +741,7 @@ static void PrintSegments (const cc65_segmentinfo* S) PrintSize (D->segment_size, 7); Print ("%-16s", D->output_name? D->output_name : ""); PrintSize (D->output_offs, 6); + PrintId (D->segment_bank, 8); NewLine (); } } From f663ee428d9336b82823112b04cec3e3071e81e2 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sat, 16 Nov 2024 21:59:00 +0100 Subject: [PATCH 2547/2710] Apple2: Rewrite readdir() and closedir() to assembly --- libsrc/apple2/closedir.c | 57 -------------------- libsrc/apple2/closedir.s | 35 ++++++++++++ libsrc/apple2/opendir.s | 104 ++++++++++++++++++----------------- libsrc/apple2/readdir.c | 90 ------------------------------- libsrc/apple2/readdir.s | 113 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 202 insertions(+), 197 deletions(-) delete mode 100644 libsrc/apple2/closedir.c create mode 100644 libsrc/apple2/closedir.s delete mode 100644 libsrc/apple2/readdir.c create mode 100644 libsrc/apple2/readdir.s diff --git a/libsrc/apple2/closedir.c b/libsrc/apple2/closedir.c deleted file mode 100644 index d37d15bba..000000000 --- a/libsrc/apple2/closedir.c +++ /dev/null @@ -1,57 +0,0 @@ -/*****************************************************************************/ -/* */ -/* closedir.c */ -/* */ -/* Close a directory */ -/* */ -/* */ -/* */ -/* (C) 2005 Oliver Schmidt, <ol.sc@web.de> */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#include <stdlib.h> -#include <fcntl.h> -#include <dirent.h> -#include "dir.h" - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -int __fastcall__ closedir (DIR* dir) -{ - int result; - - /* Cleanup directory file */ - result = close (dir->fd); - - /* Cleanup DIR */ - free (dir); - - return result; -} diff --git a/libsrc/apple2/closedir.s b/libsrc/apple2/closedir.s new file mode 100644 index 000000000..1f176092b --- /dev/null +++ b/libsrc/apple2/closedir.s @@ -0,0 +1,35 @@ +; +; Colin Leroy-Mira <colin@colino.net>, 2024 +; +; int __fastcall__ closedir (DIR *dir) +; + + .export _closedir, closedir_ptr1 + + .import _close + .import _free + .import pushax, popax, pushptr1, swapstk + + .importzp ptr1 + + .include "apple2.inc" + .include "dir.inc" + .include "errno.inc" + .include "fcntl.inc" + .include "zeropage.inc" + +_closedir: + sta ptr1 + stx ptr1+1 +closedir_ptr1: + ; Close fd + jsr pushptr1 ; Backup ptr1 + ldy #$00 + lda (ptr1),y ; Get fd + ldx #$00 + jsr _close + jsr swapstk ; Store result, pop ptr1 + + ; Free dir structure + jsr _free + jmp popax ; Return result diff --git a/libsrc/apple2/opendir.s b/libsrc/apple2/opendir.s index 38110b680..317be2755 100644 --- a/libsrc/apple2/opendir.s +++ b/libsrc/apple2/opendir.s @@ -4,16 +4,18 @@ ; DIR* __fastcall__ opendir (register const char* name) ; - .export _opendir + .export _opendir, read_dir_block_ptr1 + .import closedir_ptr1 .import _open, _read, _close - .import _malloc, _free + .import _malloc .import ___directerrno .import ___oserror, __cwd .import pushptr1, popptr1 .import pushax, pusha0 + .import return0, returnFFFF .importzp ptr1 @@ -37,7 +39,7 @@ sta ptr1 stx ptr1+1 -: ; open directory +: ; Open directory jsr pushptr1 lda #O_RDONLY jsr pusha0 @@ -58,23 +60,17 @@ ; We failed to allocate pla ; Get fd back ldx #$00 - jsr _close ; close it + jsr _close ; Close it lda #ENOMEM ; Set error jsr ___directerrno - @return_null: - lda #$00 - tax - rts + jmp return0 : ; Store dir struct to pointer sta ptr1 stx ptr1+1 - ; Push ptr1, read will destroy it - jsr pushptr1 - ; Save fd to dir struct lda #$00 ldy #DIR::FD + 1 @@ -84,49 +80,15 @@ pla ; Get fd back sta (ptr1),y - jsr pusha0 ; push fd for read - lda #<DIR::BYTES - clc - adc ptr1 - pha - lda #>DIR::BYTES - adc ptr1+1 - tax - pla - jsr pushax ; Push dir->block.bytes for read + jsr read_dir_block_ptr1 + bcc @read_ok - lda #<.sizeof(DIR::BYTES) - ldx #>.sizeof(DIR::BYTES) - - jsr _read ; Read directory block - cpx #>.sizeof(DIR::BYTES) - bne @err_read - cmp #<.sizeof(DIR::BYTES) - beq @read_ok - -@err_read: - ; Read failed, exit - lda ___oserror - bne :+ - lda #EINVAL - jsr ___directerrno - -: ; Close fd - jsr popptr1 ; Restore our dir pointer - ldy #$00 - lda (ptr1),y ; Get fd - ldx #$00 - jsr _close - - ; Free dir structure - lda ptr1 - ldx ptr1+1 - jsr _free - jmp @return_null + ; Close directory, free it + jsr closedir_ptr1 + jmp return0 ; Return NULL @read_ok: ; Read succeeded, populate dir struct - jsr popptr1 ; Restore our dir pointer ; Get file_count to entry_length from block ldy #$26 + DIR::BYTES @@ -153,3 +115,45 @@ ldx ptr1+1 rts .endproc + +; Read a directory for the DIR* pointer in ptr1 +; Return with carry clear on success +read_dir_block_ptr1: + ; Push ptr1, read will destroy it + jsr pushptr1 + + ldy #DIR::FD + lda (ptr1),y + + jsr pusha0 ; Push fd for read + lda #<DIR::BYTES + clc + adc ptr1 + pha + lda #>DIR::BYTES + adc ptr1+1 + tax + pla + jsr pushax ; Push dir->block.bytes for read + + lda #<.sizeof(DIR::BYTES) + ldx #>.sizeof(DIR::BYTES) + + jsr _read ; Read directory block + cpx #>.sizeof(DIR::BYTES) + bne @read_err + cmp #<.sizeof(DIR::BYTES) + beq @read_ok + +@read_err: + ; Read failed, exit + lda ___oserror + bne :+ + lda #EINVAL + jsr ___directerrno +: sec + bcs @out +@read_ok: + clc +@out: + jmp popptr1 diff --git a/libsrc/apple2/readdir.c b/libsrc/apple2/readdir.c deleted file mode 100644 index 8acfbbe8b..000000000 --- a/libsrc/apple2/readdir.c +++ /dev/null @@ -1,90 +0,0 @@ -/*****************************************************************************/ -/* */ -/* readdir.c */ -/* */ -/* Read directory entry */ -/* */ -/* */ -/* */ -/* (C) 2005 Oliver Schmidt, <ol.sc@web.de> */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#include <stddef.h> -#include <unistd.h> -#include <dirent.h> -#include "dir.h" - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -struct dirent* __fastcall__ readdir (register DIR* dir) -{ - register unsigned char* entry; - - /* Search for the next active directory entry */ - do { - - /* Read next directory block if necessary */ - if (dir->current_entry == dir->entries_per_block) { - if (read (dir->fd, - dir->block.bytes, - sizeof (dir->block)) != sizeof (dir->block)) { - - /* Just return failure as read() has */ - /* set errno if (and only if) no EOF */ - return NULL; - } - - /* Start with first entry in next block */ - dir->current_entry = 0; - } - - /* Compute pointer to current entry */ - entry = dir->block.content.entries + - dir->current_entry * dir->entry_length; - - /* Switch to next entry */ - ++dir->current_entry; - } while (entry[0x00] == 0); - - /* Move creation date/time to allow for next step below */ - *(unsigned long*)&entry[0x1A] = *(unsigned long*)&entry[0x18]; - - /* Feature unsigned long access to EOF by extension from 3 to 4 bytes */ - entry[0x18] = 0; - - /* Move file type to allow for next step below */ - entry[0x19] = entry[0x10]; - - /* Zero-terminate file name */ - entry[0x01 + (entry[0x00] & 0x0F)] = 0; - - /* Return success */ - return (struct dirent*)&entry[0x01]; -} diff --git a/libsrc/apple2/readdir.s b/libsrc/apple2/readdir.s new file mode 100644 index 000000000..e748055e1 --- /dev/null +++ b/libsrc/apple2/readdir.s @@ -0,0 +1,113 @@ +; +; Colin Leroy-Mira <colin@colino.net>, 2024 +; +; struct dirent * __fastcall__ readdir (DIR *dir) +; + .export _readdir + .import read_dir_block_ptr1 + + .import incax1, return0 + .import tosaddax, tosumula0, incaxy + .import pushax, pusha0, pushptr1, popptr1 + .importzp ptr1, ptr4 + + .include "dir.inc" + +.proc _readdir + sta ptr1 + stx ptr1+1 + +@next_entry: + ; Do we need to read the next directory block? + ldy #DIR::CURRENT_ENTRY + lda (ptr1),y + ldy #DIR::ENTRIES_PER_BLOCK + cmp (ptr1),y + bne @read_entry ; We don't + + jsr read_dir_block_ptr1 + bcc @read_ok + + ; We had a read error + jmp return0 + +@read_ok: + ldy #DIR::CURRENT_ENTRY + lda #$00 + sta (ptr1),y + +@read_entry: + ; Compute pointer to current entry: + ; entry = dir->block.content.entries + + ; dir->current_entry * dir->entry_length + + jsr pushptr1 ; Backup ptr1 + lda ptr1 + ldx ptr1+1 + ldy #DIR::BYTES + DIR::CONTENT::ENTRIES + jsr incaxy + jsr pushax + ldy #DIR::CURRENT_ENTRY + lda (ptr1),y + jsr pusha0 + ldy #DIR::ENTRY_LENGTH + lda (ptr1),y + jsr tosumula0 + jsr tosaddax + ; Store pointer to current entry + sta ptr4 + stx ptr4+1 + jsr popptr1 + + ; Switch to next entry + ldy #DIR::CURRENT_ENTRY + lda (ptr1),y + clc + adc #1 + sta (ptr1),y + + ; Check if entry[0] == 0 + ldy #$00 + lda (ptr4),y + beq @next_entry ; Yes, skip entry + + ; Move creation date/time to allow for next step below + ; 18-19-1A-1B => 1A-1B-1C-1D + ldy #$1B +: lda (ptr4),y + iny + iny + sta (ptr4),y + dey + dey + dey + cpy #$17 + bne :- + + ; Feature unsigned long access to EOF by extension from 3 to 4 bytes + ; entry[0x18] = 0 + iny + lda #$00 + sta (ptr4),y + + ; Move file type to allow for next step below + ; entry[0x19] = entry[0x10] + ldy #$10 + lda (ptr4),y + ldy #$19 + sta (ptr4),y + + ; Zero-terminate file name + ldy #$00 + lda (ptr4),y + and #$0F + tay + iny + lda #$00 + sta (ptr4),y + + ; Return pointer to entry+1 + lda ptr4 + ldx ptr4+1 + jmp incax1 +.endproc From 21030c22a06e57fe5346b490077057ed9273a67b Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sat, 16 Nov 2024 22:01:11 +0100 Subject: [PATCH 2548/2710] Apple2: Rewrite rewinddir() in assembly --- libsrc/apple2/dir.h | 63 ----------------------------------- libsrc/apple2/rewinddir.c | 69 -------------------------------------- libsrc/apple2/rewinddir.s | 70 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 132 deletions(-) delete mode 100644 libsrc/apple2/dir.h delete mode 100644 libsrc/apple2/rewinddir.c create mode 100644 libsrc/apple2/rewinddir.s diff --git a/libsrc/apple2/dir.h b/libsrc/apple2/dir.h deleted file mode 100644 index ed44f08c6..000000000 --- a/libsrc/apple2/dir.h +++ /dev/null @@ -1,63 +0,0 @@ -/*****************************************************************************/ -/* */ -/* dir.h */ -/* */ -/* Apple ][ system specific DIR */ -/* */ -/* */ -/* */ -/* (C) 2005 Oliver Schmidt, <ol.sc@web.de> */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#ifndef _DIR_H -#define _DIR_H - - - -/*****************************************************************************/ -/* Data */ -/*****************************************************************************/ - - - -struct DIR { - int fd; - unsigned char entry_length; - unsigned char entries_per_block; - unsigned int file_count; - unsigned char current_entry; - union { - unsigned char bytes[512]; - struct { - unsigned prev_block; - unsigned next_block; - unsigned char entries[1]; - } content; - } block; -}; - - - -/* End of dir.h */ -#endif diff --git a/libsrc/apple2/rewinddir.c b/libsrc/apple2/rewinddir.c deleted file mode 100644 index 3329852d8..000000000 --- a/libsrc/apple2/rewinddir.c +++ /dev/null @@ -1,69 +0,0 @@ -/*****************************************************************************/ -/* */ -/* rewinddir.c */ -/* */ -/* Reset directory stream */ -/* */ -/* */ -/* */ -/* (C) 2005 Oliver Schmidt, <ol.sc@web.de> */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#include <stdio.h> -#include <unistd.h> -#include <string.h> -#include <dirent.h> -#include "dir.h" - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -void __fastcall__ rewinddir (register DIR* dir) -{ - /* Rewind directory file */ - if (lseek (dir->fd, 0, SEEK_SET)) { - - /* Read directory key block */ - if (read (dir->fd, - dir->block.bytes, - sizeof (dir->block)) == sizeof (dir->block)) { - - /* Skip directory header entry */ - dir->current_entry = 1; - - /* Return success */ - return; - } - } - - /* Assert that no subsequent readdir() finds an active entry */ - memset (dir->block.bytes, 0, sizeof (dir->block)); - - /* Return failure */ -} diff --git a/libsrc/apple2/rewinddir.s b/libsrc/apple2/rewinddir.s new file mode 100644 index 000000000..fd3e5738f --- /dev/null +++ b/libsrc/apple2/rewinddir.s @@ -0,0 +1,70 @@ +; +; Colin Leroy-Mira <colin@colino.net>, 2024 +; +; void __fastcall__ rewinddir (DIR* dir) +; + .export _rewinddir + .import read_dir_block_ptr1 + + .import pusha, pusha0, pushax + .import pushptr1, popptr1 + .import incaxy + .import _lseek, _memset + + .importzp ptr1, sreg + + .include "dir.inc" + .include "stdio.inc" + +.proc _rewinddir + sta ptr1 + stx ptr1+1 + jsr pushptr1 ; Backup ptr1, destroyed by _lseek + + ; Rewind directory file + ldy #DIR::FD + lda (ptr1),y + jsr pusha0 ; Push dir->fd + + tya ; Y = 0 here + jsr pusha0 + jsr pusha0 ; Push 0L + + lda #SEEK_SET ; X = 0 here + jsr _lseek + + ora sreg ; Check lseek returned 0L + ora sreg+1 + bne @rewind_err + txa + bne @rewind_err + + jsr popptr1 ; Restore ptr1 + + ; Read directory key block + jsr read_dir_block_ptr1 + bcs @rewind_err + + ; Skip directory header entry + lda #$01 + ldy #DIR::CURRENT_ENTRY + sta (ptr1),y + rts + +@rewind_err: + jsr popptr1 ; Restore ptr1 + + ; Assert that no subsequent readdir() finds an active entry + lda ptr1 + ldx ptr1+1 + ldy #DIR::BYTES + DIR::CONTENT::ENTRIES + jsr incaxy + jsr pushax + + lda #$00 + jsr pusha + + lda #<.sizeof(DIR::BYTES) + ldx #>.sizeof(DIR::BYTES) + jmp _memset +.endproc From 2abd66ea0ca1c89a9bd928196f74c435a11a123b Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Sat, 30 Nov 2024 12:36:35 +0100 Subject: [PATCH 2549/2710] Fixed the behavior of the JMP (ind) instruction in sim65 when it runs with the "6502X" CPU type. The JMP (ind) bug is present in the 6502 which is emulated by both the "6502" and "6502X" emulation targets of sim65; specifically, the OPC_6502_6C handler. In the old code, the bug-exhibiting code was not executed when the target was set to 6502X, which is incorrect. the patch removes the (CPU == CPU_6502) check, which made no sense. The JMP (ind) bug was actually fixed in the 65c02. Indeed, the OPC_65C02_6C opcode handler has code that implements the 'right' behavior. --- src/sim65/6502.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index 448e81669..3f912b27e 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -1964,25 +1964,17 @@ static void OPC_6502_6C (void) PC = Regs.PC; Lo = MemReadWord (PC+1); - if (CPU == CPU_6502) - { - /* Emulate the 6502 bug */ - Cycles = 5; - Regs.PC = MemReadByte (Lo); - Hi = (Lo & 0xFF00) | ((Lo + 1) & 0xFF); - Regs.PC |= (MemReadByte (Hi) << 8); + /* Emulate the buggy 6502 behavior */ + Cycles = 5; + Regs.PC = MemReadByte (Lo); + Hi = (Lo & 0xFF00) | ((Lo + 1) & 0xFF); + Regs.PC |= (MemReadByte (Hi) << 8); - /* Output a warning if the bug is triggered */ - if (Hi != Lo + 1) - { - Warning ("6502 indirect jump bug triggered at $%04X, ind addr = $%04X", - PC, Lo); - } - } - else + /* Output a warning if the bug is triggered */ + if (Hi != Lo + 1) { - Cycles = 6; - Regs.PC = MemReadWord(Lo); + Warning ("6502 indirect jump bug triggered at $%04X, ind addr = $%04X", + PC, Lo); } ParaVirtHooks (&Regs); From 709d71ef704b51a5729318a9b839293a00b78590 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Sat, 30 Nov 2024 19:56:31 +0100 Subject: [PATCH 2550/2710] Fixed clock-cycle timing of branch (Bxx) instructions. Branch instructions, when taken, take three or four cycles, depending on whether a page is crossed by the branch. The proper check to determine whether the extra cycle must be added is the target address of the branch vs the address immediately following the branch. In the former version of the BRANCH instruction handler, the target address was incorrectly checked vs the address of the branch instruction itself. The corrected behavior was verified against a real 6502 (Atari) and the 65x02 testsuite. --- src/sim65/6502.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index 448e81669..41ffc8329 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -707,8 +707,9 @@ static unsigned HaveIRQRequest; unsigned char OldPCH; \ ++Cycles; \ Offs = (signed char) MemReadByte (Regs.PC+1); \ + Regs.PC +=2; \ OldPCH = PCH; \ - Regs.PC = (Regs.PC + 2 + (int) Offs) & 0xFFFF; \ + Regs.PC = (Regs.PC + (int) Offs) & 0xFFFF; \ if (PCH != OldPCH) { \ ++Cycles; \ } \ From 12f63408789968acbc7ffe72a88227dce72b1f6e Mon Sep 17 00:00:00 2001 From: Clyde Shaffer <clydeshaffer@gmail.com> Date: Sat, 30 Nov 2024 16:09:50 -0500 Subject: [PATCH 2551/2710] Add section to ld65 doc about debug info --- doc/ld65.sgml | 196 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) diff --git a/doc/ld65.sgml b/doc/ld65.sgml index 1ad04b395..66b8eedc7 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -1180,6 +1180,202 @@ The ZPSAVE segment contains the original values of the zeropage locations used by the ZEROPAGE segment. It is placed in its own segment because it must not be initialized. +<sect>Debug Info<p> + +The debug info and the API mirrors closely the items available in the sources +used to build an executable. To use the API efficiently, it is necessary to +understand from which blocks the information is built. + +<itemize> +<item> Libraries +<item> Lines +<item> Modules +<item> Scopes +<item> Segments +<item> Source files +<item> Spans +<item> Symbols +<item> Types +</itemize> + +Each item of each type has something like a primary index called an 'id'. +The ids can be thought of as array indices, so looking up something by its +id is fast. Invalid ids are marked with the special value CC65_INV_ID. +Data passed back for an item may contain ids of other objects. A scope for +example contains the id of the parent scope (or CC65_INV_ID if there is no +parent scope). Most API functions use ids to lookup related objects. + + +<sect1>Libraries<p> + +This information comes from the linker and is currently used in only one +place:To mark the origin of a module. The information available for a library +is its name including the path. + +<itemize> +<item> Library id +<item> Name and path of library +</itemize> + + +<sect1>Lines<p> + +A line is a location in a source file. It is module dependent, which means +that if two modules use the same source file, each one has its own line +information for this file. While the assembler has also column information, +it is dropped early because it would generate much more data. A line may have +one or more spans attached if code or data is generated. + +<itemize> +<item> Line id +<item> Id of the source file, the line is from +<item> The line number in the file (starting with 1) +<item> The type of the line: Assembler/C source or macro +<item> A count for recursive macros if the line comes from a macro +</itemize> + + +<sect1>Modules<p> + +A module is actually an object file. It is generated from one or more source +files and may come from a library. The assembler generates a main scope for +symbols declared outside user generated scopes. The main scope has an empty name. + +<itemize> +<item> Module id +<item> The name of the module including the path +<item> The id of the main source file (the one specified on the command line) +<item> The id of the library the module comes from, or CC65_INV_ID +<item> The id of the main scope for this module +</itemize> + + +<sect1>Scopes<p> + +Each module has a main scope where all symbols live, that are specified outside +other scopes. Additional nested scopes may be specified in the sources. So scopes +have a one to many relation: Each scope (with the exception of the main scope) has +exactly one parent and may have several child scopes. Scopes may not cross modules. + +<itemize> +<item> Scope id +<item> The name of the scope (may be empty) +<item> The type of the scope: Module, .SCOPE or .PROC, .STRUCT and .ENUM +<item> The size of the scope (the size of the span for the active segment) +<item> The id of the parent scope (CC65_INV_ID in case of the main scope) +<item> The id of the attached symbol for .PROC scopes +<item> The id of the module where the scope comes from +</itemize> + + +<sect1>Segments<p> + +<itemize> +<item> Segment id +<item> The name of the segment +<item> The start address of the segment +<item> The size of the segment +<item> The name of the output file, this segment was written to (may be empty) +<item> The offset of the segment in the output file (only if name not empty) +<item> The bank number of the segment's memory area +</itemize> + +It is also possible to retrieve the spans for sections (a section is the part of a +segment that comes from one module). Since the main scope covers a whole module, and +the main scope has spans assigned (if not empty), the spans for the main scope of a +module are also the spans for the sections in the segments. + + +<sect1>Source files<p> + +Modules are generated from source files. Since some source files are used several times +when generating a list of modules (header files for example), the linker will merge +duplicates to reduce redundant information. Source files are considered identical if the +full name including the path is identical, and the size and time of last modification +matches. Please note that there may be still duplicates if files are accessed using +different paths. + +<itemize> +<item> Source file id +<item> The name of the source file including the path +<item> The size of the file at the time when it was read +<item> The time of last modification at the time when the file was read +</itemize> + + +<sect1>Spans<p> + +A span is a small part of a segment. It has a start address and a size. Spans are used +to record sizes of other objects. Line infos and scopes may have spans attached, so it +is possible to lookup which data was generated for these items. + +<itemize> +<item> Span id +<item> The start address of the span. This is an absolute address +<item> The end address of the span. This is inclusive which means if start==end then => size==1 +<item> The id of the segment were the span is located +<item> The type of the data in the span (optional, maybe NULL) +<item> The number of line infos available for this span +<item> The number of scope infos available for this span +</itemize> + +The last two fields will save a call to cc65_line_byspan or cc65_scope_byspan by providing +information about the number of items that can be retrieved by these calls. + + +<sect1>Symbols<p> + +<itemize> +<item> Symbol id +<item> The name of the symbol +<item> The type of the symbol, which may be label, equate or import +<item> The size of the symbol (size of attached code or data). Only for labels. Zero if unknown +<item> The value of the symbol. For an import, this is taken from the corresponding export +<item> The id of the corresponding export. Only valid for imports, CC65_INV_ID for other symbols +<item> The segment id if the symbol is segment based. For an import, taken from the export +<item> The id of the scope this symbols was defined in +<item> The id of the parent symbol. This is only set for cheap locals and CC65_INV_ID otherwise +</itemize> + +Beware: Even for an import, the id of the corresponding export may be CC65_INV_ID. +This happens if the module with the export has no debug information. So make sure +that your application can handle it. + + +<sect1>Types<p> + +A type is somewhat special. You cannot retrieve data about it in a similar way as with the other +items. Instead you have to call a special routine that parses the type data and returns it +in a set of data structures that can be processed by a C or C++ program. + +The type information is language independent and doesn't encode things like 'const' or +'volatile'. Instead it defines a set of simple data types and a few ways to aggregate +them (arrays, structs and unions). + +Type information is currently generated by the assembler for storage allocating commands +like .BYTE or .WORD. For example, the assembler code + +<tscreen><verb> +foo: .byte $01, $02, $03 +</verb></tscreen> + +will assign the symbol foo a size of 3, but will also generate a span with a size of 3 +bytes and a type ARRAY[3] OF BYTE. +Evaluating the type of a span allows a debugger to display the data in the same way as it +was defined in the assembler source. + +<table> +<tabular ca="clc"> +<bf/Assembler Command/| <bf/Generated Type Information//@<hline> +.ADDR| ARRAY OF LITTLE ENDIAN POINTER WITH SIZE 2 TO VOID@ +.BYTE| ARRAY OF UNSIGNED WITH SIZE 1@ +.DBYT| ARRAY OF BIG ENDIAN UNSIGNED WITH SIZE 2@ +.DWORD| ARRAY OF LITTLE ENDIAN UNSIGNED WITH SIZE 4@ +.FARADDR| ARRAY OF LITTLE ENDIAN POINTER WITH SIZE 3 TO VOID@ +.WORD| ARRAY OF LITTLE ENDIAN UNSIGNED WITH SIZE 2@ +</tabular> +</table> + <sect>Copyright<p> From 3fdb1a516c57ee085aff9056d26e555f5ddf8c7a Mon Sep 17 00:00:00 2001 From: Clyde Shaffer <clydeshaffer@gmail.com> Date: Sat, 30 Nov 2024 16:56:25 -0500 Subject: [PATCH 2552/2710] small formatting fixes, and a section rename to get it to build --- doc/ld65.sgml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/ld65.sgml b/doc/ld65.sgml index 66b8eedc7..b889645f5 100644 --- a/doc/ld65.sgml +++ b/doc/ld65.sgml @@ -1268,7 +1268,7 @@ exactly one parent and may have several child scopes. Scopes may not cross modul </itemize> -<sect1>Segments<p> +<sect1>Segment Info<p> <itemize> <item> Segment id @@ -1366,13 +1366,13 @@ was defined in the assembler source. <table> <tabular ca="clc"> -<bf/Assembler Command/| <bf/Generated Type Information//@<hline> +<bf/Assembler Command/| <bf/Generated Type Information/@<hline> .ADDR| ARRAY OF LITTLE ENDIAN POINTER WITH SIZE 2 TO VOID@ .BYTE| ARRAY OF UNSIGNED WITH SIZE 1@ .DBYT| ARRAY OF BIG ENDIAN UNSIGNED WITH SIZE 2@ .DWORD| ARRAY OF LITTLE ENDIAN UNSIGNED WITH SIZE 4@ .FARADDR| ARRAY OF LITTLE ENDIAN POINTER WITH SIZE 3 TO VOID@ -.WORD| ARRAY OF LITTLE ENDIAN UNSIGNED WITH SIZE 2@ +.WORD| ARRAY OF LITTLE ENDIAN UNSIGNED WITH SIZE 2 </tabular> </table> From 1d9d056da5f25c3cd684d7f570ee422bbd0d275d Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Sat, 30 Nov 2024 23:46:19 +0100 Subject: [PATCH 2553/2710] Fixed behavior of the 65C02 "BIT #imm" instruction. The BIT #imm instruction behaves differently from the BIT instruction with other addressing modes, in that it does /not/ set the N and V flags according to the value of its operand. It only sets the Z flag, in accordance to the value of (A & operand). This is corroborated in two ways: - The 65x02 test suite; - Documentation about BIT #imm such as http://www.6502.org/tutorials/65c02opcodes.html This patch implements the correct behavior for BIT with immediate addressing. The patched version passes the 65x02 test suite for 65C02 opcode 0x89. --- src/sim65/6502.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index 448e81669..e15d53042 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -823,6 +823,12 @@ static unsigned HaveIRQRequest; SET_OF (Val & 0x40); \ SET_ZF ((Val & Regs.AC) == 0) +/* BITIMM */ +/* The BIT instruction with immediate mode addressing only sets + the zero flag; the sign and overflow flags are not changed. */ +#define BITIMM(Val) \ + SET_ZF ((Val & Regs.AC) == 0) + /* LDA */ #define LDA(Val) \ Regs.AC = Val; \ @@ -2257,7 +2263,9 @@ static void OPC_6502_88 (void) static void OPC_65SC02_89 (void) /* Opcode $89: BIT #imm */ { - ALU_OP_IMM (BIT); + /* Note: BIT #imm behaves differently from BIT with other addressing modes, + * hence the different 'op' argument to the macro. */ + ALU_OP_IMM (BITIMM); } From e26c17fd502068645c743abc5e6efdbcd5baad54 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Sun, 1 Dec 2024 09:59:10 +0100 Subject: [PATCH 2554/2710] Fixed wrong clearing of D-flag on interrupts for sim65 with 6502X CPU type. The 65C02 clears the D flag on interrupts while the 6502 does not. The old code cleared the D flag also for the 6502X CPU type, which was incorrect. --- src/sim65/6502.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index 448e81669..09dc0ddea 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -4104,7 +4104,7 @@ unsigned ExecuteInsn (void) PUSH (PCL); PUSH (Regs.SR & ~BF); SET_IF (1); - if (CPU != CPU_6502) + if (CPU == CPU_65C02) { SET_DF (0); } @@ -4118,7 +4118,7 @@ unsigned ExecuteInsn (void) PUSH (PCL); PUSH (Regs.SR & ~BF); SET_IF (1); - if (CPU != CPU_6502) + if (CPU == CPU_65C02) { SET_DF (0); } From 3895caae90ffd8b4bdb51891cc01ecfb8a6b2e48 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Mon, 2 Dec 2024 00:25:24 +0100 Subject: [PATCH 2555/2710] Style fix --- src/sim65/6502.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index 41ffc8329..fec730b46 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -707,7 +707,7 @@ static unsigned HaveIRQRequest; unsigned char OldPCH; \ ++Cycles; \ Offs = (signed char) MemReadByte (Regs.PC+1); \ - Regs.PC +=2; \ + Regs.PC += 2; \ OldPCH = PCH; \ Regs.PC = (Regs.PC + (int) Offs) & 0xFFFF; \ if (PCH != OldPCH) { \ From 84c4ea062dd0e7fd28145e318ed452f8359d21f0 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Tue, 3 Dec 2024 01:17:44 +0100 Subject: [PATCH 2556/2710] Sim65: removed ZR register from CPURegs type. --- src/sim65/6502.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/sim65/6502.h b/src/sim65/6502.h index a7a702521..cab734c6a 100644 --- a/src/sim65/6502.h +++ b/src/sim65/6502.h @@ -60,7 +60,6 @@ struct CPURegs { unsigned AC; /* Accumulator */ unsigned XR; /* X register */ unsigned YR; /* Y register */ - unsigned ZR; /* Z register */ unsigned SR; /* Status register */ unsigned SP; /* Stackpointer */ unsigned PC; /* Program counter */ From fbd8961be1df70303bcfb35e7ba7f93671f29c42 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Tue, 3 Dec 2024 21:21:49 +0100 Subject: [PATCH 2557/2710] sim65: changing memory access types to uint8_t and uint16_t. In sim65, simulator memory access to a 64 KB array is implemented via functions defined in src/sim65/memory.h and src/sim65/memory.c. In the old version, the types for both content bytes (8 bits), content words (16 bits), regular addresses (16 bits), and zero-page addresses (8 bits) were all given as bare 'unsigned'. This lead to several cases of address overrun (e.g., when an instruction wraps around from address 0xffff to 0x0000) when running the simulator against a stress test (specifically, the 65x02 test suite). To protect from this, and to more properly express the bit width of the types involved which is a good idea anyway, we start using the fixed-width types provided by 'stdint.h'. In the process, we also change the MemReadByte macro to a full function call. This may impact performance (by a small amount), but it improves memory safety, as cases where the address is accidentally expressed as a value exceeding 0xffff are handled by wrap-around (as it is in the actual hardware), rather than causing access outside of the Mem[] array where the 64 KB of simulated RAM resides. The reason for this patch is twofold. (1) It is a partial patch for issue #2539. Several issues brought to the surface by running the 65x02 testsuite are eliminated by these changes. In the discussion about this issue, it was concluded that it is a Good Idea to use the stdint-types, both for the simulated CPU registers and for the memory. This patch addresses the memory-part of that change. (2) It is a precursor patch for issue #2355. For that issue, we will implement a memory-mapped timer register. This will make handling of memory access in the simulator a bit more complex. Having proper functions with the proper types in place will help to make the timer register patch easier. --- src/sim65/memory.c | 24 ++++++++++++++++-------- src/sim65/memory.h | 21 +++++++-------------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/sim65/memory.c b/src/sim65/memory.c index 68e7bb93b..b93693b91 100644 --- a/src/sim65/memory.c +++ b/src/sim65/memory.c @@ -45,8 +45,8 @@ -/* THE memory */ -unsigned char Mem[0x10000]; +/* The memory */ +uint8_t Mem[0x10000]; @@ -56,7 +56,7 @@ unsigned char Mem[0x10000]; -void MemWriteByte (unsigned Addr, unsigned char Val) +void MemWriteByte (uint16_t Addr, uint8_t Val) /* Write a byte to a memory location */ { Mem[Addr] = Val; @@ -64,7 +64,7 @@ void MemWriteByte (unsigned Addr, unsigned char Val) -void MemWriteWord (unsigned Addr, unsigned Val) +void MemWriteWord (uint16_t Addr, uint16_t Val) /* Write a word to a memory location */ { MemWriteByte (Addr, Val & 0xFF); @@ -73,22 +73,30 @@ void MemWriteWord (unsigned Addr, unsigned Val) -unsigned MemReadWord (unsigned Addr) +uint8_t MemReadByte (uint16_t Addr) +/* Read a byte from a memory location */ +{ + return Mem[Addr]; +} + + + +uint16_t MemReadWord (uint16_t Addr) /* Read a word from a memory location */ { - unsigned W = MemReadByte (Addr++); + uint8_t W = MemReadByte (Addr++); return (W | (MemReadByte (Addr) << 8)); } -unsigned MemReadZPWord (unsigned char Addr) +uint16_t MemReadZPWord (uint8_t Addr) /* Read a word from the zero page. This function differs from MemReadWord in that ** the read will always be in the zero page, even in case of an address ** overflow. */ { - unsigned W = MemReadByte (Addr++); + uint8_t W = MemReadByte (Addr++); return (W | (MemReadByte (Addr) << 8)); } diff --git a/src/sim65/memory.h b/src/sim65/memory.h index cef786aaa..b70c5bd05 100644 --- a/src/sim65/memory.h +++ b/src/sim65/memory.h @@ -36,9 +36,9 @@ #ifndef MEMORY_H #define MEMORY_H -#include "inline.h" +#include <stdint.h> -extern unsigned char Mem[0x10000]; +extern uint8_t Mem[0x10000]; /*****************************************************************************/ /* Code */ @@ -46,26 +46,19 @@ extern unsigned char Mem[0x10000]; -void MemWriteByte (unsigned Addr, unsigned char Val); +void MemWriteByte (uint16_t Addr, uint8_t Val); /* Write a byte to a memory location */ -void MemWriteWord (unsigned Addr, unsigned Val); +void MemWriteWord (uint16_t Addr, uint16_t Val); /* Write a word to a memory location */ -#if defined(HAVE_INLINE) -INLINE unsigned char MemReadByte (unsigned Addr) +uint8_t MemReadByte (uint16_t Addr); /* Read a byte from a memory location */ -{ - return Mem[Addr]; -} -#else -#define MemReadByte(Addr) Mem[Addr] -#endif -unsigned MemReadWord (unsigned Addr); +uint16_t MemReadWord (uint16_t Addr); /* Read a word from a memory location */ -unsigned MemReadZPWord (unsigned char Addr); +uint16_t MemReadZPWord (uint8_t Addr); /* Read a word from the zero page. This function differs from MemReadWord in that ** the read will always be in the zero page, even in case of an address ** overflow. From 05b3825683e065a40710bdad068a9ba62c33d70d Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Tue, 3 Dec 2024 23:33:57 +0100 Subject: [PATCH 2558/2710] sim65 : improve implementation of ROL and ROR operations Issue #2539 brings to light a number of issues in the sim65 simulator. Several issues can be traced back to undesirable side effects of the use of bare 'unsigned' types for the CPU registers in the 'CPURegs' type defined in src/sim65/6502.h. The intention is to tighten the types of the registers defined there to uint8_t and uint16_t, in accordance with the actual number of bits that those registers have in the 6502. However, it turns out that a handful of opcode implementations depend on the fact that the register types currently have more bits than the actual 6502 registers themselves for correct operation. This mostly involves operations that involve the carry bit (ROL, ROR, ADC, SBC). In preparation of fixing the CPURegs field types, we will first make sure that those opcode implementations are changed in such a way that they still work if the underlying register types are tightened to their actual bit width. This PR concerns this specific change for the ROL and ROR operations. The correct functioning of ROL and ROR after this patch has been verified by testing against the 65x02 test suite. --- src/sim65/6502.c | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index cb4e579eb..48a1d560d 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -737,23 +737,29 @@ static unsigned HaveIRQRequest; /* ROL */ #define ROL(Val) \ - Val <<= 1; \ - if (GET_CF ()) { \ - Val |= 0x01; \ - } \ - TEST_ZF (Val); \ - TEST_SF (Val); \ - TEST_CF (Val) + do { \ + unsigned ShiftOut = (Val & 0x80); \ + Val <<= 1; \ + if (GET_CF ()) { \ + Val |= 0x01; \ + } \ + TEST_ZF (Val); \ + TEST_SF (Val); \ + SET_CF (ShiftOut); \ + } while (0) /* ROR */ #define ROR(Val) \ - if (GET_CF ()) { \ - Val |= 0x100; \ - } \ - SET_CF (Val & 0x01); \ - Val >>= 1; \ - TEST_ZF (Val); \ - TEST_SF (Val) + do { \ + unsigned ShiftOut = (Val & 0x01); \ + Val >>= 1; \ + if (GET_CF ()) { \ + Val |= 0x80; \ + } \ + TEST_ZF (Val); \ + TEST_SF (Val); \ + SET_CF (ShiftOut); \ + } while(0) /* ASL */ #define ASL(Val) \ From 3612d90c8e9faa66c09d77e6cb88e967efb54ad3 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Mon, 9 Dec 2024 00:40:41 +0100 Subject: [PATCH 2559/2710] Update fire.c --- samples/cbm/fire.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/cbm/fire.c b/samples/cbm/fire.c index 40eff0707..1eae086da 100644 --- a/samples/cbm/fire.c +++ b/samples/cbm/fire.c @@ -56,7 +56,7 @@ /* Use static local variables for speed */ -#pragma static-locals (1); +#pragma static-locals (1) From be6819ca1fc1fcd93159026ef4097a3987182122 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Mon, 9 Dec 2024 00:41:03 +0100 Subject: [PATCH 2560/2710] Update plasma.c --- samples/cbm/plasma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/cbm/plasma.c b/samples/cbm/plasma.c index f48d6dc77..5c0b901f7 100644 --- a/samples/cbm/plasma.c +++ b/samples/cbm/plasma.c @@ -51,7 +51,7 @@ /* Use static local variables for speed */ -#pragma static-locals (1); +#pragma static-locals (1) static const unsigned char sinustable[0x100] = { From 316ee4ad5bd862b8596002e7865b17debbfba53a Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Mon, 9 Dec 2024 00:42:28 +0100 Subject: [PATCH 2561/2710] Update overlay-demo.c --- samples/geos/overlay-demo.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/samples/geos/overlay-demo.c b/samples/geos/overlay-demo.c index 73ab0e3c0..e3e92e6c2 100644 --- a/samples/geos/overlay-demo.c +++ b/samples/geos/overlay-demo.c @@ -27,7 +27,7 @@ void show(char *name) ** rather place the all the code of certain source files into the overlay by ** compiling them with --code-name OVERLAY1. */ -#pragma code-name(push, "OVERLAY1"); +#pragma code-name(push, "OVERLAY1") void foo(void) { @@ -39,27 +39,27 @@ void foo(void) show("One"); } -#pragma code-name(pop); +#pragma code-name(pop) -#pragma code-name(push, "OVERLAY2"); +#pragma code-name(push, "OVERLAY2") void bar(void) { show("Two"); } -#pragma code-name(pop); +#pragma code-name(pop) -#pragma code-name(push, "OVERLAY3"); +#pragma code-name(push, "OVERLAY3") void foobar (void) { show("Three"); } -#pragma code-name(pop); +#pragma code-name(pop) void main(int /*argc*/, char *argv[]) From 26e671710278948d23569b2bb947b222b6a9c29e Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Mon, 9 Dec 2024 00:43:05 +0100 Subject: [PATCH 2562/2710] Update mandelbrot.c --- samples/lynx/mandelbrot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/lynx/mandelbrot.c b/samples/lynx/mandelbrot.c index ce49fbf7a..27ac7d340 100644 --- a/samples/lynx/mandelbrot.c +++ b/samples/lynx/mandelbrot.c @@ -26,7 +26,7 @@ #define divfp(_a,_b) ((((signed long)_a)<<fpshift)/(_b)) /* Use static local variables for speed */ -#pragma static-locals (1); +#pragma static-locals (1) From 8b008052cbd7f3805e7af05ae694a2c24424c39c Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Mon, 9 Dec 2024 00:43:35 +0100 Subject: [PATCH 2563/2710] Update mandelbrot.c --- samples/mandelbrot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/mandelbrot.c b/samples/mandelbrot.c index 519f3d823..f4e7b83a8 100644 --- a/samples/mandelbrot.c +++ b/samples/mandelbrot.c @@ -41,7 +41,7 @@ #endif /* Use static local variables for speed */ -#pragma static-locals (1); +#pragma static-locals (1) From 5d2730f4b4aad47f2ea5152f7c71b03ef5c22895 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Mon, 9 Dec 2024 00:44:44 +0100 Subject: [PATCH 2564/2710] Update multidemo.c --- samples/multidemo.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/samples/multidemo.c b/samples/multidemo.c index 02bb6fcac..435c1b985 100644 --- a/samples/multidemo.c +++ b/samples/multidemo.c @@ -64,34 +64,34 @@ void log (char *msg) ** rather place all the code of certain source files into the overlay by ** compiling them with --code-name OVERLAY1. */ -#pragma code-name (push, "OVERLAY1"); +#pragma code-name (push, "OVERLAY1") void foo (void) { log ("Calling main from overlay 1"); } -#pragma code-name (pop); +#pragma code-name (pop) -#pragma code-name (push, "OVERLAY2"); +#pragma code-name (push, "OVERLAY2") void bar (void) { log ("Calling main from overlay 2"); } -#pragma code-name (pop); +#pragma code-name (pop) -#pragma code-name (push, "OVERLAY3"); +#pragma code-name (push, "OVERLAY3") void foobar (void) { log ("Calling main from overlay 3"); } -#pragma code-name(pop); +#pragma code-name(pop) unsigned char loademdriver (void) From 5f2c5b58ab4611f13187754ce022255722b1d6fb Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Mon, 9 Dec 2024 18:25:34 +0100 Subject: [PATCH 2565/2710] Update overlaydemo.c --- samples/overlaydemo.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/samples/overlaydemo.c b/samples/overlaydemo.c index dde6b70ab..a37b06d4f 100644 --- a/samples/overlaydemo.c +++ b/samples/overlaydemo.c @@ -39,7 +39,7 @@ void log (char *msg) ** rather place all the code of certain source files into the overlay by ** compiling them with --code-name OVERLAY1. */ -#pragma code-name (push, "OVERLAY1"); +#pragma code-name (push, "OVERLAY1") void foo (void) { @@ -51,27 +51,27 @@ void foo (void) log ("Calling main from overlay 1"); } -#pragma code-name (pop); +#pragma code-name (pop) -#pragma code-name (push, "OVERLAY2"); +#pragma code-name (push, "OVERLAY2") void bar (void) { log ("Calling main from overlay 2"); } -#pragma code-name (pop); +#pragma code-name (pop) -#pragma code-name (push, "OVERLAY3"); +#pragma code-name (push, "OVERLAY3") void foobar (void) { log ("Calling main from overlay 3"); } -#pragma code-name(pop); +#pragma code-name(pop) unsigned char loadfile (char *name, void *addr, void *size) From cf470dd0dff4622f14756bac13b78bbfb2ef692f Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Mon, 9 Dec 2024 18:26:00 +0100 Subject: [PATCH 2566/2710] Update sieve.c --- samples/sieve.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/sieve.c b/samples/sieve.c index 8d0619888..7c3b9cd75 100644 --- a/samples/sieve.c +++ b/samples/sieve.c @@ -38,7 +38,7 @@ static unsigned char Sieve[COUNT]; -#pragma static-locals(1); +#pragma static-locals(1) From d993f3a7663780d41ee4d41186dde56cee23a496 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Mon, 9 Dec 2024 18:36:05 +0100 Subject: [PATCH 2567/2710] Update cc65.sgml --- doc/cc65.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index d08e8418d..781e460a8 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1370,7 +1370,7 @@ sequences of the input. Example: <tscreen><verb> /* Use a space wherever an 'a' occurs in ISO-8859-1 source */ - #pragma charmap (0x61, 0x20); + #pragma charmap (0x61, 0x20) </verb></tscreen> From 0f6b427170eb52cacec58ba11202b9fd009e432d Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Mon, 9 Dec 2024 18:37:02 +0100 Subject: [PATCH 2568/2710] Update strftime.c --- libsrc/common/strftime.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/common/strftime.c b/libsrc/common/strftime.c index 38ea4850e..2f3cadc2e 100644 --- a/libsrc/common/strftime.c +++ b/libsrc/common/strftime.c @@ -40,7 +40,7 @@ /* Use static local variables for speed */ -#pragma static-locals (on); +#pragma static-locals (on) From 852b622c433f71f815f005e7e2d3e0409ca81e28 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 3 Dec 2024 09:01:04 +0100 Subject: [PATCH 2569/2710] Apple2: Don't forcefully re-enable IRQ Avoid enabling IRQ after disabling them in driver code, remember previous state instead (in case user had them disabled already). --- libsrc/apple2/mou/a2.stdmou.s | 19 +++++++++++++------ libsrc/apple2/ser/a2.gs.s | 12 +++++++----- libsrc/apple2/waitvsync.s | 5 +++-- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/libsrc/apple2/mou/a2.stdmou.s b/libsrc/apple2/mou/a2.stdmou.s index c54c09d34..9b84c2f53 100644 --- a/libsrc/apple2/mou/a2.stdmou.s +++ b/libsrc/apple2/mou/a2.stdmou.s @@ -155,6 +155,7 @@ next: inc ptr1+1 ; Disable interrupts now because setting the slot number makes ; the IRQ handler (maybe called due to some non-mouse IRQ) try ; calling the firmware which isn't correctly set up yet + php sei ; Convert to and save slot number @@ -211,7 +212,7 @@ next: inc ptr1+1 common: jsr firmware ; Enable interrupts and return success - cli + plp lda #<MOUSE_ERR_OK ldx #>MOUSE_ERR_OK rts @@ -220,6 +221,7 @@ common: jsr firmware ; No return code required (the driver is removed from memory on return). UNINSTALL: ; Hide cursor + php sei jsr CHIDE @@ -249,7 +251,8 @@ SETBOX: ; Apple II Mouse TechNote #1, Interrupt Environment with the Mouse: ; "Disable interrupts before placing position information in the ; screen holes." -: sei +: php + sei ; Set low clamp lda (ptr1),y @@ -298,6 +301,7 @@ GETBOX: ; the screen). No return code required. MOVE: ldy slot + php sei ; Set y @@ -328,9 +332,10 @@ MOVE: ; no special action is required besides hiding the mouse cursor. ; No return code required. HIDE: + php sei jsr CHIDE - cli + plp rts ; SHOW: Is called to show the mouse cursor. The mouse kernel manages a @@ -339,9 +344,10 @@ HIDE: ; no special action is required besides enabling the mouse cursor. ; No return code required. SHOW: + php sei jsr CSHOW - cli + plp rts ; BUTTONS: Return the button mask in A/X. @@ -360,12 +366,13 @@ POS: ; struct pointed to by ptr1. No return code required. INFO: ldy #.sizeof(MOUSE_INFO)-1 -copy: sei +copy: php + sei : lda info,y sta (ptr1),y dey bpl :- - cli + plp rts ; IOCTL: Driver defined entry point. The wrapper will pass a pointer to ioctl diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index e35c6156b..ea3e54cc1 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -304,8 +304,9 @@ IIgs: ldx Channel - ; Deactivate interrupts - sei + php ; Deactivate interrupts + sei ; if enabled + ldy #WR_MASTER_IRQ_RST lda #MASTER_IRQ_SHUTDOWN jsr writeSCCReg @@ -334,7 +335,7 @@ IIgs: ldx #$00 stx Opened ; Mark port as closed - cli + plp ; Reenable interrupts if needed : txa ; Promote char return value rts @@ -352,7 +353,8 @@ getClockSource: ; Must return an SER_ERR_xx code in a/x. SER_OPEN: - sei + php ; Deactivate interrupts + sei ; if enabled ; Check if the handshake setting is valid ldy #SER_PARAMS::HANDSHAKE ; Handshake @@ -497,9 +499,9 @@ BaudOK: lda #SER_ERR_OK SetupOut: + plp ; Reenable interrupts if needed ldx #$00 ; Promote char return value sty Opened - cli rts ;---------------------------------------------------------------------------- diff --git a/libsrc/apple2/waitvsync.s b/libsrc/apple2/waitvsync.s index 1697622de..486b93a53 100644 --- a/libsrc/apple2/waitvsync.s +++ b/libsrc/apple2/waitvsync.s @@ -29,7 +29,8 @@ iigs: bit RDVBLBAR rts ; Apple IIc TechNote #9, Detecting VBL -iic: sei +iic: php + sei sta IOUDISOFF lda RDVBLMSK bit ENVBL @@ -40,7 +41,7 @@ iic: sei bcs :+ ; VBL interrupts were already enabled bit DISVBL : sta IOUDISON ; IIc Tech Ref Man: The firmware normally leaves IOUDIS on. - cli + plp rts .endif ; __APPLE2ENH__ From 0e640877c2d1a6a5fdf9ce53e46e09d73c265c32 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Wed, 11 Dec 2024 14:30:56 +0100 Subject: [PATCH 2570/2710] Fixed colour #2540 --- include/cbm264.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/cbm264.h b/include/cbm264.h index 4951df518..a6317f384 100644 --- a/include/cbm264.h +++ b/include/cbm264.h @@ -97,7 +97,7 @@ #define COLOR_WHITE (BCOLOR_WHITE | CATTR_LUMA7) #define COLOR_RED (BCOLOR_RED | CATTR_LUMA4) #define COLOR_CYAN (BCOLOR_CYAN | CATTR_LUMA7) -#define COLOR_PURPLE (BCOLOR_VIOLET | CATTR_LUMA7) +#define COLOR_PURPLE (BCOLOR_LIGHVIOLET | CATTR_LUMA7) #define COLOR_GREEN (BCOLOR_GREEN | CATTR_LUMA7) #define COLOR_BLUE (BCOLOR_BLUE | CATTR_LUMA7) #define COLOR_YELLOW (BCOLOR_YELLOW | CATTR_LUMA7) From 3933f329c23a479582808df9ff796d46914d16fa Mon Sep 17 00:00:00 2001 From: Sergio Lindo Mansilla <sergiolindo.empresa@gmail.com> Date: Sun, 15 Dec 2024 14:50:45 +0100 Subject: [PATCH 2571/2710] Improve description of namespace access in ca65 This avoid confusion with referencing global scope with the namespace token. --- doc/ca65.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 2e63e0961..9c54dbb1a 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -1059,7 +1059,7 @@ The namespace token (<tt/::/) is used to access other scopes: .endscope ... - lda foo::bar ; Access foo in scope bar + lda #foo::bar ; Access bar in scope foo </verb></tscreen> The only way to deny access to a scope from the outside is to declare a scope From 17e7e669c9cec299e71e0d5c408b6be4b1036f0b Mon Sep 17 00:00:00 2001 From: Sergio Lindo Mansilla <sergiolindo.empresa@gmail.com> Date: Sun, 15 Dec 2024 15:28:44 +0100 Subject: [PATCH 2572/2710] Fix typo in ca65 doc --- doc/ca65.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index 2e63e0961..d3905ab64 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -3897,7 +3897,7 @@ See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE" Reserve storage. The command is followed by one or two constant expressions. The first one is mandatory and defines, how many bytes of - storage should be defined. The second, optional expression must by a + storage should be defined. The second, optional expression must be a constant byte value that will be used as value of the data. If there is no fill value given, the linker will use the value defined in the linker configuration file (default: zero). From eda8774e08bc431d4683c97429b62b079223752f Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Mon, 16 Dec 2024 16:36:23 +0100 Subject: [PATCH 2573/2710] Fixed ADC/SBC for the 65C02. The current (before-this-patch) version of sim65.c does not correctly implement the ADC and SBC instructions in 65C02 mode. This PR fixes that. The 6502 and 65C02 behave identically in binary mode; in decimal behavior however they diverge, both in the handling of inputs that are not BCD values, and in the handling of processor flags. This fix restructures the original "ADC" and "SBC" macros in versions that are specific for the 6502 and the 65C02, and updates the opcode tables to ensure that they point to the correct implementations. Considering the ADC instruction for a moment, the original "ADC" macro was changed to two macros ADC_6502 and ADC_65C02. These check the D (decimal mode) bit, and defer their implementation to any of three macros ADC_BINARY_MODE, ADC_DECIMAL_MODE_6502, and ADC_DECIMAL_MODE_65C02. This is a bit verbose but it makes it very clear what's going on. (For the SBC changes, the analogous changes were made.) The correctness of the changes made is ensured as follows: First, an in-depth study was made how ADC and SBC work, both in the original 6502 and the later 65C02 processor. The actual behavior of both processors was captured on hardware (an Atari 800 XL with a 6502 and a Neo6502 equipped with a WDC 65C02 processor), and was analyzed. The results were cross-referenced with internet sources, leading to a C implementation that reproduces the exact result of the hardware processors. See: https://github.com/sidneycadot/6502-test/blob/main/functional_test/adc_sbc/c_and_python_implementations/6502_adc_sbc.c Next, these C implementations of ADC and SBC were fitted into sim65's macro- based implementation scheme, replacing the existing 6502-only implementation. Finally, the new sim65 implementation was tested against the 65x02 testsuite, showing that (1) the 6502 implementation was still correct; and (2) that the 65C02 implementation is now also correct. As an added bonus, this new implementation of ADC/SBC no longer relies on a dirty implementation detail in sim65: the previous implementation relied on the fact that currently, the A register in the simulator is implemented as an "unsigned", with more bits than the actual A register (8 bits). In the future we want to change the register width to 8 bits, and this updated ADC/SBC is a necessary precursor to that change. --- src/sim65/6502.c | 465 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 347 insertions(+), 118 deletions(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index cb4e579eb..a424736f3 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -37,10 +37,11 @@ /* Known bugs and limitations of the 65C02 simulation: * support currently only on the level of 65SC02: BBRx, BBSx, RMBx, SMBx, WAI, and STP are unsupported - * BCD flag handling equals 6502 (unchecked if bug is simulated or wrong for - 6502) */ +#include <stdbool.h> +#include <stdint.h> + #include "memory.h" #include "error.h" #include "6502.h" @@ -555,15 +556,15 @@ static unsigned HaveIRQRequest; /* #imm */ #define ALU_OP_IMM(op) \ unsigned char immediate; \ - MEM_AD_OP_IMM(immediate); \ - Cycles = 2; \ + MEM_AD_OP_IMM(immediate); \ + Cycles = 2; \ op (immediate) /* zp / zp,x / zp,y / abs / abs,x / abs,y / (zp,x) / (zp),y / (zp) */ #define ALU_OP(mode, op) \ unsigned address, operand; \ - Cycles = ALU_CY_##mode; \ - MEM_AD_OP (mode, address, operand); \ + Cycles = ALU_CY_##mode; \ + MEM_AD_OP (mode, address, operand); \ op (operand) /* Store opcode helpers */ @@ -662,40 +663,88 @@ static unsigned HaveIRQRequest; TEST_SF (Regs.AC) -/* ADC */ -#define ADC(v) \ +/* ADC, binary mode (6502 and 65C02) */ +/* TODO: once the Regs fields are properly sized, get rid of the + * "& 0xff" in the Regs.AC asignment. + */ +#define ADC_BINARY_MODE(v) \ do { \ - unsigned old = Regs.AC; \ - unsigned rhs = (v & 0xFF); \ - if (GET_DF ()) { \ - unsigned lo; \ - int res; \ - lo = (old & 0x0F) + (rhs & 0x0F) + GET_CF (); \ - if (lo >= 0x0A) { \ - lo = ((lo + 0x06) & 0x0F) + 0x10; \ - } \ - Regs.AC = (old & 0xF0) + (rhs & 0xF0) + lo; \ - res = (signed char)(old & 0xF0) + \ - (signed char)(rhs & 0xF0) + \ - (signed char)lo; \ - TEST_ZF (old + rhs + GET_CF ()); \ - TEST_SF (Regs.AC); \ - if (Regs.AC >= 0xA0) { \ - Regs.AC += 0x60; \ - } \ - TEST_CF (Regs.AC); \ - SET_OF ((res < -128) || (res > 127)); \ - if (CPU == CPU_65C02) { \ - ++Cycles; \ - } \ + const uint8_t op = v; \ + const uint8_t OldAC = Regs.AC; \ + bool carry = GET_CF(); \ + Regs.AC = (OldAC + op + carry) & 0xff; \ + const bool NV = Regs.AC >= 0x80; \ + carry = OldAC + op + carry >= 0x100; \ + SET_SF(NV); \ + SET_OF(((OldAC >= 0x80) ^ NV) & ((op >= 0x80) ^ NV)); \ + SET_ZF(Regs.AC == 0); \ + SET_CF(carry); \ + } while (0) + +/* ADC, decimal mode (6502 behavior) */ +#define ADC_DECIMAL_MODE_6502(v) \ + do { \ + const uint8_t op = v; \ + const uint8_t OldAC = Regs.AC; \ + bool carry = GET_CF(); \ + const uint8_t binary_result = OldAC + op + carry; \ + uint8_t low_nibble = (OldAC & 15) + (op & 15) + carry; \ + if ((carry = low_nibble > 9)) \ + low_nibble = (low_nibble - 10) & 15; \ + uint8_t high_nibble = (OldAC >> 4) + (op >> 4) + carry; \ + const bool NV = (high_nibble & 8) != 0; \ + if ((carry = high_nibble > 9)) \ + high_nibble = (high_nibble - 10) & 15; \ + Regs.AC = (high_nibble << 4) | low_nibble; \ + SET_SF(NV); \ + SET_OF(((OldAC >= 0x80) ^ NV) & ((op >= 0x80) ^ NV)); \ + SET_ZF(binary_result == 0); \ + SET_CF(carry); \ + } while (0) + +/* ADC, decimal mode (65C02 behavior) */ +#define ADC_DECIMAL_MODE_65C02(v) \ + do { \ + const uint8_t op = v; \ + const uint8_t OldAC = Regs.AC; \ + const bool OldCF = GET_CF(); \ + bool carry = OldCF; \ + uint8_t low_nibble = (OldAC & 15) + (op & 15) + carry; \ + if ((carry = low_nibble > 9)) \ + low_nibble = (low_nibble - 10) & 15; \ + uint8_t high_nibble = (OldAC >> 4) + (op >> 4) + carry; \ + const bool PrematureSF = (high_nibble & 8) != 0; \ + if ((carry = high_nibble > 9)) \ + high_nibble = (high_nibble - 10) & 15; \ + Regs.AC = (high_nibble << 4) | low_nibble; \ + const bool NewZF = Regs.AC == 0; \ + const bool NewSF = Regs.AC >= 0x80; \ + const bool NewOF = ((OldAC >= 0x80) ^ PrematureSF) & \ + ((op >= 0x80) ^ PrematureSF); \ + SET_SF(NewSF); \ + SET_OF(NewOF); \ + SET_ZF(NewZF); \ + SET_CF(carry); \ + ++Cycles; \ + } while (0) + +/* ADC, 6502 version */ +#define ADC_6502(v) \ + do { \ + if (GET_DF()) { \ + ADC_DECIMAL_MODE_6502(v); \ } else { \ - Regs.AC += rhs + GET_CF (); \ - TEST_ZF (Regs.AC); \ - TEST_SF (Regs.AC); \ - TEST_CF (Regs.AC); \ - SET_OF (!((old ^ rhs) & 0x80) && \ - ((old ^ Regs.AC) & 0x80)); \ - Regs.AC &= 0xFF; \ + ADC_BINARY_MODE(v); \ + } \ + } while (0) + +/* ADC, 65C02 version */ +#define ADC_65C02(v) \ + do { \ + if (GET_DF()) { \ + ADC_DECIMAL_MODE_65C02(v); \ + } else { \ + ADC_BINARY_MODE(v); \ } \ } while (0) @@ -737,23 +786,29 @@ static unsigned HaveIRQRequest; /* ROL */ #define ROL(Val) \ - Val <<= 1; \ - if (GET_CF ()) { \ - Val |= 0x01; \ - } \ - TEST_ZF (Val); \ - TEST_SF (Val); \ - TEST_CF (Val) + do { \ + unsigned ShiftOut = (Val & 0x80); \ + Val <<= 1; \ + if (GET_CF ()) { \ + Val |= 0x01; \ + } \ + TEST_ZF (Val); \ + TEST_SF (Val); \ + SET_CF (ShiftOut); \ + } while (0) /* ROR */ #define ROR(Val) \ - if (GET_CF ()) { \ - Val |= 0x100; \ - } \ - SET_CF (Val & 0x01); \ - Val >>= 1; \ - TEST_ZF (Val); \ - TEST_SF (Val) + do { \ + unsigned ShiftOut = (Val & 0x01); \ + Val >>= 1; \ + if (GET_CF ()) { \ + Val |= 0x80; \ + } \ + TEST_ZF (Val); \ + TEST_SF (Val); \ + SET_CF (ShiftOut); \ + } while(0) /* ASL */ #define ASL(Val) \ @@ -816,7 +871,7 @@ static unsigned HaveIRQRequest; } \ SET_CF (Val & 0x01); \ Val >>= 1; \ - ADC (Val) + ADC_6502 (Val) /* BIT */ #define BIT(Val) \ @@ -873,7 +928,7 @@ static unsigned HaveIRQRequest; /* ISC */ #define ISC(Val) \ Val = (Val + 1) & 0xFF; \ - SBC(Val) + SBC_6502(Val) /* ASR */ #define ASR(Val) \ @@ -971,33 +1026,88 @@ static unsigned HaveIRQRequest; TEST_SF (Val); \ TEST_ZF (Val) - -/* SBC */ -#define SBC(v) \ +/* SBC, binary mode (6502 and 65C02) */ +/* TODO: once the Regs fields are properly sized, get rid of the + * "& 0xff" in the Regs.AC asignment. + */ +#define SBC_BINARY_MODE(v) \ do { \ - unsigned r_a = Regs.AC; \ - unsigned src = (v) & 0xFF; \ - unsigned ccc = (Regs.SR & CF) ^ CF; \ - unsigned tmp = r_a - src - ccc; \ - \ - SET_CF(tmp < 0x100); \ - TEST_SF(tmp); \ - TEST_ZF(tmp); \ - SET_OF((r_a ^ tmp) & (r_a ^ src) & 0x80); \ - \ - if (GET_DF ()) { \ - unsigned low = (r_a & 0x0f) - (src & 0x0f) - ccc; \ - tmp = (r_a & 0xf0) - (src & 0xf0); \ - if (low & 0x10) { \ - low -= 6; \ - tmp -= 0x10; \ - } \ - tmp = (low & 0xf) | tmp; \ - if (tmp & 0x100) { \ - tmp -= 0x60; \ - } \ + const uint8_t op = v; \ + const uint8_t OldAC = Regs.AC; \ + const bool borrow = !GET_CF(); \ + Regs.AC = (OldAC - op - borrow) & 0xff; \ + const bool NV = Regs.AC >= 0x80; \ + SET_SF(NV); \ + SET_OF(((OldAC >= 0x80) ^ NV) & ((op < 0x80) ^ NV)); \ + SET_ZF(Regs.AC == 0); \ + SET_CF(OldAC >= op + borrow); \ + } while (0) + +/* SBC, decimal mode (6502 behavior) */ +#define SBC_DECIMAL_MODE_6502(v) \ + do { \ + const uint8_t op = v; \ + const uint8_t OldAC = Regs.AC; \ + bool borrow = !GET_CF(); \ + const uint8_t binary_result = OldAC - op - borrow; \ + const bool NV = binary_result >= 0x80; \ + uint8_t low_nibble = (OldAC & 15) - (op & 15) - borrow; \ + if ((borrow = low_nibble >= 0x80)) \ + low_nibble = (low_nibble + 10) & 15; \ + uint8_t high_nibble = (OldAC >> 4) - (op >> 4) - borrow;\ + if ((borrow = high_nibble >= 0x80)) \ + high_nibble = (high_nibble + 10) & 15; \ + Regs.AC = (high_nibble << 4) | low_nibble; \ + SET_SF(NV); \ + SET_OF(((OldAC >= 0x80) ^ NV) & ((op < 0x80) ^ NV)); \ + SET_ZF(binary_result == 0); \ + SET_CF(!borrow); \ + } while (0) + +/* SBC, decimal mode (65C02 behavior) */ +#define SBC_DECIMAL_MODE_65C02(v) \ + do { \ + const uint8_t op = v; \ + const uint8_t OldAC = Regs.AC; \ + bool borrow = !GET_CF(); \ + uint8_t low_nibble = (OldAC & 15) - (op & 15) - borrow; \ + if ((borrow = low_nibble >= 0x80)) \ + low_nibble += 10; \ + const bool low_nibble_still_negative = \ + (low_nibble >= 0x80); \ + low_nibble &= 15; \ + uint8_t high_nibble = (OldAC >> 4) - (op >> 4) - borrow;\ + const bool PN = (high_nibble & 8) != 0; \ + if ((borrow = high_nibble >= 0x80)) \ + high_nibble += 10; \ + high_nibble -= low_nibble_still_negative; \ + high_nibble &= 15; \ + Regs.AC = (high_nibble << 4) | low_nibble; \ + SET_SF(Regs.AC >= 0x80); \ + SET_OF(((OldAC >= 0x80) ^ PN) & ((op < 0x80) ^ PN)); \ + SET_ZF(Regs.AC == 0x00); \ + SET_CF(!borrow); \ + ++Cycles; \ + } while (0) + +/* SBC, 6502 version */ +#define SBC_6502(v) \ + do { \ + if (GET_DF()) { \ + SBC_DECIMAL_MODE_6502(v); \ + } else { \ + SBC_BINARY_MODE(v); \ + } \ + } while (0) + +/* SBC, 65C02 version */ +#define SBC_65C02(v) \ + do { \ + if (GET_DF()) { \ + SBC_DECIMAL_MODE_65C02(v); \ + } else { \ + SBC_BINARY_MODE(v); \ } \ - Regs.AC = tmp & 0xFF; \ } while (0) @@ -1881,11 +1991,17 @@ static void OPC_6502_60 (void) static void OPC_6502_61 (void) /* Opcode $61: ADC (zp,x) */ { - ALU_OP (ZPXIND, ADC); + ALU_OP (ZPXIND, ADC_6502); } +static void OPC_65C02_61 (void) +/* Opcode $61: ADC (zp,x) */ +{ + ALU_OP (ZPXIND, ADC_65C02); +} + static void OPC_6502_63 (void) /* Opcode $63: RRA (zp,x) */ { @@ -1905,7 +2021,15 @@ static void OPC_65SC02_64 (void) static void OPC_6502_65 (void) /* Opcode $65: ADC zp */ { - ALU_OP (ZP, ADC); + ALU_OP (ZP, ADC_6502); +} + + + +static void OPC_65C02_65 (void) +/* Opcode $65: ADC zp */ +{ + ALU_OP (ZP, ADC_65C02); } @@ -1941,11 +2065,17 @@ static void OPC_6502_68 (void) static void OPC_6502_69 (void) /* Opcode $69: ADC #imm */ { - ALU_OP_IMM (ADC); + ALU_OP_IMM (ADC_6502); } +static void OPC_65C02_69 (void) +/* Opcode $69: ADC #imm */ +{ + ALU_OP_IMM (ADC_65C02); +} + static void OPC_6502_6A (void) /* Opcode $6A: ROR a */ { @@ -2004,7 +2134,15 @@ static void OPC_65C02_6C (void) static void OPC_6502_6D (void) /* Opcode $6D: ADC abs */ { - ALU_OP (ABS, ADC); + ALU_OP (ABS, ADC_6502); +} + + + +static void OPC_65C02_6D (void) +/* Opcode $6D: ADC abs */ +{ + ALU_OP (ABS, ADC_65C02); } @@ -2036,15 +2174,23 @@ static void OPC_6502_70 (void) static void OPC_6502_71 (void) /* Opcode $71: ADC (zp),y */ { - ALU_OP (ZPINDY, ADC); + ALU_OP (ZPINDY, ADC_6502); } -static void OPC_65SC02_72 (void) +static void OPC_65C02_71 (void) +/* Opcode $71: ADC (zp),y */ +{ + ALU_OP (ZPINDY, ADC_65C02); +} + + + +static void OPC_65C02_72 (void) /* Opcode $72: ADC (zp) */ { - ALU_OP (ZPIND, ADC); + ALU_OP (ZPIND, ADC_65C02); } @@ -2068,11 +2214,17 @@ static void OPC_65SC02_74 (void) static void OPC_6502_75 (void) /* Opcode $75: ADC zp,x */ { - ALU_OP (ZPX, ADC); + ALU_OP (ZPX, ADC_6502); } +static void OPC_65C02_75 (void) +/* Opcode $75: ADC zp,x */ +{ + ALU_OP (ZPX, ADC_65C02); +} + static void OPC_6502_76 (void) /* Opcode $76: ROR zp,x */ { @@ -2102,7 +2254,15 @@ static void OPC_6502_78 (void) static void OPC_6502_79 (void) /* Opcode $79: ADC abs,y */ { - ALU_OP (ABSY, ADC); + ALU_OP (ABSY, ADC_6502); +} + + + +static void OPC_65C02_79 (void) +/* Opcode $79: ADC abs,y */ +{ + ALU_OP (ABSY, ADC_65C02); } @@ -2144,7 +2304,15 @@ static void OPC_65SC02_7C (void) static void OPC_6502_7D (void) /* Opcode $7D: ADC abs,x */ { - ALU_OP (ABSX, ADC); + ALU_OP (ABSX, ADC_6502); +} + + + +static void OPC_65C02_7D (void) +/* Opcode $7D: ADC abs,x */ +{ + ALU_OP (ABSX, ADC_65C02); } @@ -2986,11 +3154,17 @@ static void OPC_6502_E0 (void) static void OPC_6502_E1 (void) /* Opcode $E1: SBC (zp,x) */ { - ALU_OP (ZPXIND, SBC); + ALU_OP (ZPXIND, SBC_6502); } +static void OPC_65C02_E1 (void) +/* Opcode $E1: SBC (zp,x) */ +{ + ALU_OP (ZPXIND, SBC_65C02); +} + static void OPC_6502_E3 (void) /* Opcode $E3: ISC (zp,x) */ { @@ -3010,7 +3184,15 @@ static void OPC_6502_E4 (void) static void OPC_6502_E5 (void) /* Opcode $E5: SBC zp */ { - ALU_OP (ZP, SBC); + ALU_OP (ZP, SBC_6502); +} + + + +static void OPC_65C02_E5 (void) +/* Opcode $E5: SBC zp */ +{ + ALU_OP (ZP, SBC_65C02); } @@ -3041,17 +3223,23 @@ static void OPC_6502_E8 (void) -/* Aliases of opcode $EA */ +/* Aliases of opcode $E9 */ #define OPC_6502_EB OPC_6502_E9 static void OPC_6502_E9 (void) /* Opcode $E9: SBC #imm */ { - ALU_OP_IMM (SBC); + ALU_OP_IMM (SBC_6502); } +static void OPC_65C02_E9 (void) +/* Opcode $E9: SBC #imm */ +{ + ALU_OP_IMM (SBC_65C02); +} + /* Aliases of opcode $EA */ #define OPC_6502_1A OPC_6502_EA #define OPC_6502_3A OPC_6502_EA @@ -3117,7 +3305,15 @@ static void OPC_6502_EC (void) static void OPC_6502_ED (void) /* Opcode $ED: SBC abs */ { - ALU_OP (ABS, SBC); + ALU_OP (ABS, SBC_6502); +} + + + +static void OPC_65C02_ED (void) +/* Opcode $ED: SBC abs */ +{ + ALU_OP (ABS, SBC_65C02); } @@ -3148,15 +3344,24 @@ static void OPC_6502_F0 (void) static void OPC_6502_F1 (void) /* Opcode $F1: SBC (zp),y */ { - ALU_OP (ZPINDY, SBC); + ALU_OP (ZPINDY, SBC_6502); } -static void OPC_65SC02_F2 (void) + +static void OPC_65C02_F1 (void) +/* Opcode $F1: SBC (zp),y */ +{ + ALU_OP (ZPINDY, SBC_65C02); +} + + + +static void OPC_65C02_F2 (void) /* Opcode $F2: SBC (zp) */ { - ALU_OP (ZPIND, SBC); + ALU_OP (ZPIND, SBC_65C02); } @@ -3172,7 +3377,15 @@ static void OPC_6502_F3 (void) static void OPC_6502_F5 (void) /* Opcode $F5: SBC zp,x */ { - ALU_OP (ZPX, SBC); + ALU_OP (ZPX, SBC_6502); +} + + + +static void OPC_65C02_F5 (void) +/* Opcode $F5: SBC zp,x */ +{ + ALU_OP (ZPX, SBC_65C02); } @@ -3206,7 +3419,15 @@ static void OPC_6502_F8 (void) static void OPC_6502_F9 (void) /* Opcode $F9: SBC abs,y */ { - ALU_OP (ABSY, SBC); + ALU_OP (ABSY, SBC_6502); +} + + + +static void OPC_65C02_F9 (void) +/* Opcode $F9: SBC abs,y */ +{ + ALU_OP (ABSY, SBC_65C02); } @@ -3234,7 +3455,15 @@ static void OPC_6502_FB (void) static void OPC_6502_FD (void) /* Opcode $FD: SBC abs,x */ { - ALU_OP (ABSX, SBC); + ALU_OP (ABSX, SBC_6502); +} + + + +static void OPC_65C02_FD (void) +/* Opcode $FD: SBC abs,x */ +{ + ALU_OP (ABSX, SBC_65C02); } @@ -3884,35 +4113,35 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_5E, OPC_Illegal, // $5F: BBR5 currently unsupported OPC_6502_60, - OPC_6502_61, + OPC_65C02_61, OPC_65C02_NOP22, // $62 OPC_65C02_NOP11, // $63 OPC_65SC02_64, - OPC_6502_65, + OPC_65C02_65, OPC_6502_66, OPC_Illegal, // $67: RMB6 currently unsupported OPC_6502_68, - OPC_6502_69, + OPC_65C02_69, OPC_6502_6A, OPC_65C02_NOP11, // $6B OPC_65C02_6C, - OPC_6502_6D, + OPC_65C02_6D, OPC_6502_6E, OPC_Illegal, // $6F: BBR6 currently unsupported OPC_6502_70, - OPC_6502_71, - OPC_65SC02_72, + OPC_65C02_71, + OPC_65C02_72, OPC_65C02_NOP11, // $73 OPC_65SC02_74, - OPC_6502_75, + OPC_65C02_75, OPC_6502_76, OPC_Illegal, // $77: RMB7 currently unsupported OPC_6502_78, - OPC_6502_79, + OPC_65C02_79, OPC_65SC02_7A, OPC_65C02_NOP11, // $7B OPC_65SC02_7C, - OPC_6502_7D, + OPC_65C02_7D, OPC_65C02_7E, OPC_Illegal, // $7F: BBR7 currently unsupported OPC_65SC02_80, @@ -4012,35 +4241,35 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_DE, OPC_Illegal, // $DF: BBS5 currently unsupported OPC_6502_E0, - OPC_6502_E1, + OPC_65C02_E1, OPC_65C02_NOP22, // $E2 OPC_65C02_NOP11, // $E3 OPC_6502_E4, - OPC_6502_E5, + OPC_65C02_E5, OPC_6502_E6, OPC_Illegal, // $E7: SMB6 currently unsupported OPC_6502_E8, - OPC_6502_E9, + OPC_65C02_E9, OPC_6502_EA, OPC_65C02_NOP11, // $EB OPC_6502_EC, - OPC_6502_ED, + OPC_65C02_ED, OPC_6502_EE, OPC_Illegal, // $EF: BBS6 currently unsupported OPC_6502_F0, - OPC_6502_F1, - OPC_65SC02_F2, + OPC_65C02_F1, + OPC_65C02_F2, OPC_65C02_NOP11, // $F3 OPC_65C02_NOP24, // $F4 - OPC_6502_F5, + OPC_65C02_F5, OPC_6502_F6, OPC_Illegal, // $F7: SMB7 currently unsupported OPC_6502_F8, - OPC_6502_F9, + OPC_65C02_F9, OPC_65SC02_FA, OPC_65C02_NOP11, // $FB OPC_65C02_NOP34, // $FC - OPC_6502_FD, + OPC_65C02_FD, OPC_6502_FE, OPC_Illegal, // $FF: BBS7 currently unsupported }; From fb6745573eb0a063f61417e87807becee03348db Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Mon, 16 Dec 2024 16:55:26 +0100 Subject: [PATCH 2574/2710] Fixed whitespace. --- src/sim65/6502.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index a424736f3..c114c0c89 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -556,15 +556,15 @@ static unsigned HaveIRQRequest; /* #imm */ #define ALU_OP_IMM(op) \ unsigned char immediate; \ - MEM_AD_OP_IMM(immediate); \ - Cycles = 2; \ + MEM_AD_OP_IMM(immediate); \ + Cycles = 2; \ op (immediate) /* zp / zp,x / zp,y / abs / abs,x / abs,y / (zp,x) / (zp),y / (zp) */ #define ALU_OP(mode, op) \ unsigned address, operand; \ - Cycles = ALU_CY_##mode; \ - MEM_AD_OP (mode, address, operand); \ + Cycles = ALU_CY_##mode; \ + MEM_AD_OP (mode, address, operand); \ op (operand) /* Store opcode helpers */ From 86ccf25e81032bcc9a221c775a7dd26b29f132a6 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Mon, 16 Dec 2024 17:12:07 +0100 Subject: [PATCH 2575/2710] CPU registers can be accessed from outside 6502.c. The linkage of the 'Regs' variable in 6502.c was changed from static to extern. This makes the Regs type visible (and even alterable) from the outside. This change helps tools to inspect the CPU state. In particular, it was implemented to facilitate a tool that verifies opcode functionality using the '65x02' testsuite. But the change is also potentially useful for e.g. an online debugger that wants to inspect the CPU state while the 6502 is neing simulated. --- src/sim65/6502.c | 2 +- src/sim65/6502.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index 48a1d560d..9d857a8ed 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -391,7 +391,7 @@ CPUType CPU; typedef void (*OPFunc) (void); /* The CPU registers */ -static CPURegs Regs; +CPURegs Regs; /* Cycles for the current insn */ static unsigned Cycles; diff --git a/src/sim65/6502.h b/src/sim65/6502.h index cab734c6a..b6b621823 100644 --- a/src/sim65/6502.h +++ b/src/sim65/6502.h @@ -65,6 +65,9 @@ struct CPURegs { unsigned PC; /* Program counter */ }; +/* Current CPU registers */ +extern CPURegs Regs; + /* Status register bits */ #define CF 0x01 /* Carry flag */ #define ZF 0x02 /* Zero flag */ From 6f9406bbe3a91ec2b291a4b087390b38807f2997 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Tue, 17 Dec 2024 23:24:35 +0100 Subject: [PATCH 2576/2710] This adds timer functionality to sim65. It provides access to a handful of 64-bit counters that count different things: - clock cycles - instructions - number of IRQ processed - number of NMIs processed - nanoseconds since 1-1-1970. This in not ready yet to be pushed as a merge request into the upstream CC65 repository. What's lacking: - documentation - tests And to be discussed: - do we agree on this implementation direction and interface in principe? - can I include inttypes.h for printing a 64-bit unsigned value? - will clock_gettime() work on a Windows build? --- cfg/sim6502.cfg | 2 +- cfg/sim65c02.cfg | 2 +- src/sim65/6502.c | 13 +++- src/sim65/error.c | 8 +- src/sim65/main.c | 6 +- src/sim65/memory.c | 20 ++++- src/sim65/peripherals.c | 159 ++++++++++++++++++++++++++++++++++++++++ src/sim65/peripherals.h | 98 +++++++++++++++++++++++++ 8 files changed, 293 insertions(+), 15 deletions(-) create mode 100644 src/sim65/peripherals.c create mode 100644 src/sim65/peripherals.h diff --git a/cfg/sim6502.cfg b/cfg/sim6502.cfg index 39c33581c..d393a4aee 100644 --- a/cfg/sim6502.cfg +++ b/cfg/sim6502.cfg @@ -5,7 +5,7 @@ SYMBOLS { MEMORY { ZP: file = "", start = $0000, size = $0100; HEADER: file = %O, start = $0000, size = $000C; - MAIN: file = %O, define = yes, start = $0200, size = $FDF0 - __STACKSIZE__; + MAIN: file = %O, define = yes, start = $0200, size = $FDC0 - __STACKSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; diff --git a/cfg/sim65c02.cfg b/cfg/sim65c02.cfg index 39c33581c..d393a4aee 100644 --- a/cfg/sim65c02.cfg +++ b/cfg/sim65c02.cfg @@ -5,7 +5,7 @@ SYMBOLS { MEMORY { ZP: file = "", start = $0000, size = $0100; HEADER: file = %O, start = $0000, size = $000C; - MAIN: file = %O, define = yes, start = $0200, size = $FDF0 - __STACKSIZE__; + MAIN: file = %O, define = yes, start = $0200, size = $FDC0 - __STACKSIZE__; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; diff --git a/src/sim65/6502.c b/src/sim65/6502.c index 48a1d560d..f48ba8fee 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -42,6 +42,7 @@ */ #include "memory.h" +#include "peripherals.h" #include "error.h" #include "6502.h" #include "paravirt.h" @@ -391,7 +392,7 @@ CPUType CPU; typedef void (*OPFunc) (void); /* The CPU registers */ -static CPURegs Regs; +CPURegs Regs; /* Cycles for the current insn */ static unsigned Cycles; @@ -4107,6 +4108,8 @@ unsigned ExecuteInsn (void) if (HaveNMIRequest) { HaveNMIRequest = 0; + PRegs.counter_nmi_events += 1; + PUSH (PCH); PUSH (PCL); PUSH (Regs.SR & ~BF); @@ -4121,6 +4124,8 @@ unsigned ExecuteInsn (void) } else if (HaveIRQRequest && GET_IF () == 0) { HaveIRQRequest = 0; + PRegs.counter_irq_events += 1; + PUSH (PCH); PUSH (PCL); PUSH (Regs.SR & ~BF); @@ -4139,8 +4144,14 @@ unsigned ExecuteInsn (void) /* Execute it */ Handlers[CPU][OPC] (); + + /* Increment the instruction counter by one.NMIs and IRQs are counted separately. */ + PRegs.counter_instructions += 1; } + /* Increment the 64-bit clock cycle counter with the cycle count for the instruction that we just executed */ + PRegs.counter_clock_cycles += Cycles; + /* Return the number of clock cycles needed by this insn */ return Cycles; } diff --git a/src/sim65/error.c b/src/sim65/error.c index fc24ca006..3618d660f 100644 --- a/src/sim65/error.c +++ b/src/sim65/error.c @@ -36,9 +36,10 @@ #include <stdio.h> #include <stdlib.h> #include <stdarg.h> +#include <inttypes.h> #include "error.h" - +#include "peripherals.h" /*****************************************************************************/ @@ -50,9 +51,6 @@ /* flag to print cycles at program termination */ int PrintCycles = 0; -/* cycles are counted by main.c */ -extern unsigned long long TotalCycles; - /*****************************************************************************/ @@ -120,7 +118,7 @@ void SimExit (int Code) /* Exit the simulation with an exit code */ { if (PrintCycles) { - fprintf (stdout, "%llu cycles\n", TotalCycles); + fprintf (stdout, PRIu64 " cycles\n", PRegs.counter_clock_cycles); } exit (Code); } diff --git a/src/sim65/main.c b/src/sim65/main.c index 76c912c6b..8b41fcc0f 100644 --- a/src/sim65/main.c +++ b/src/sim65/main.c @@ -47,6 +47,7 @@ #include "6502.h" #include "error.h" #include "memory.h" +#include "peripherals.h" #include "paravirt.h" @@ -60,9 +61,6 @@ /* Name of program file */ const char* ProgramFile; -/* count of total cycles executed */ -unsigned long long TotalCycles = 0; - /* exit simulator after MaxCycles Cccles */ unsigned long long MaxCycles = 0; @@ -309,6 +307,7 @@ int main (int argc, char* argv[]) } MemInit (); + PeripheralsInit (); SPAddr = ReadProgramFile (); ParaVirtInit (I, SPAddr); @@ -318,7 +317,6 @@ int main (int argc, char* argv[]) RemainCycles = MaxCycles; while (1) { Cycles = ExecuteInsn (); - TotalCycles += Cycles; if (MaxCycles) { if (Cycles > RemainCycles) { ErrorCode (SIM65_ERROR_TIMEOUT, "Maximum number of cycles reached."); diff --git a/src/sim65/memory.c b/src/sim65/memory.c index b93693b91..c4b6bb220 100644 --- a/src/sim65/memory.c +++ b/src/sim65/memory.c @@ -36,7 +36,7 @@ #include <string.h> #include "memory.h" - +#include "peripherals.h" /*****************************************************************************/ @@ -59,7 +59,14 @@ uint8_t Mem[0x10000]; void MemWriteByte (uint16_t Addr, uint8_t Val) /* Write a byte to a memory location */ { - Mem[Addr] = Val; + if ((PERIPHERALS_APERTURE_BASE_ADDRESS <= Addr) && (Addr <= PERIPHERALS_APERTURE_LAST_ADDRESS)) + { + /* Defer the the memory-mapped peripherals handler for this write. */ + PeripheralWriteByte (Addr - PERIPHERALS_APERTURE_BASE_ADDRESS, Val); + } else { + /* Write to the Mem array. */ + Mem[Addr] = Val; + } } @@ -76,7 +83,14 @@ void MemWriteWord (uint16_t Addr, uint16_t Val) uint8_t MemReadByte (uint16_t Addr) /* Read a byte from a memory location */ { - return Mem[Addr]; + if ((PERIPHERALS_APERTURE_BASE_ADDRESS <= Addr) && (Addr <= PERIPHERALS_APERTURE_LAST_ADDRESS)) + { + /* Defer the the memory-mapped peripherals handler for this read. */ + return PeripheralReadByte (Addr - PERIPHERALS_APERTURE_BASE_ADDRESS); + } else { + /* Read from the Mem array. */ + return Mem[Addr]; + } } diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c new file mode 100644 index 000000000..edf401b02 --- /dev/null +++ b/src/sim65/peripherals.c @@ -0,0 +1,159 @@ +/*****************************************************************************/ +/* */ +/* peripherals.c */ +/* */ +/* Memory-mapped peripheral subsystem for the 6502 simulator */ +/* */ +/* */ +/* */ +/* (C) 2024-2025, Sidney Cadot */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#include <time.h> +#include "peripherals.h" + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* The peripheral registers. */ +PeripheralRegs PRegs; + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +static uint64_t get_uint64_wallclock_time(void) +{ + struct timespec ts; + int result = clock_gettime(CLOCK_REALTIME, &ts); + if (result != 0) + { + // On failure, time will be set to the max value. + return 0xffffffffffffffff; + } + + /* Return time since the 1-1-1970 epoch, in nanoseconds. + * Note that this time may be off by an integer number of seconds, as POSIX + * maintaines that all days are 86,400 seconds long, which is not true due to + * leap seconds. + */ + return ts.tv_sec * 1000000000 + ts.tv_nsec; +} + + + +void PeripheralWriteByte (uint8_t Addr, uint8_t Val) +/* Write a byte to a memory location in the peripheral address aperture. */ +{ + switch (Addr) { + case PERIPHERALS_ADDRESS_OFFSET_LATCH: { + /* A write to the "latch" register performs a simultaneous latch of all registers */ + + /* Latch the current wallclock time first. */ + PRegs.latched_wallclock_time = get_uint64_wallclock_time(); + + /* Now latch all the cycles maintained by the processor. */ + PRegs.latched_counter_clock_cycles = PRegs.latched_counter_clock_cycles; + PRegs.latched_counter_instructions = PRegs.latched_counter_instructions; + PRegs.latched_counter_irq_events = PRegs.latched_counter_irq_events; + PRegs.latched_counter_nmi_events = PRegs.latched_counter_nmi_events; + break; + } + case PERIPHERALS_ADDRESS_OFFSET_SELECT: { + /* Set the value of the visibility-selection register. */ + PRegs.visible_latch_register = Val; + break; + } + default: { + /* Any other write is ignored */ + } + } +} + + + +uint8_t PeripheralReadByte (uint8_t Addr) +/* Read a byte from a memory location in the peripheral address aperture. */ +{ + switch (Addr) { + case PERIPHERALS_ADDRESS_OFFSET_SELECT: { + return PRegs.visible_latch_register; + } + case PERIPHERALS_ADDRESS_OFFSET_REG64 + 0: + case PERIPHERALS_ADDRESS_OFFSET_REG64 + 1: + case PERIPHERALS_ADDRESS_OFFSET_REG64 + 2: + case PERIPHERALS_ADDRESS_OFFSET_REG64 + 3: + case PERIPHERALS_ADDRESS_OFFSET_REG64 + 4: + case PERIPHERALS_ADDRESS_OFFSET_REG64 + 5: + case PERIPHERALS_ADDRESS_OFFSET_REG64 + 6: + case PERIPHERALS_ADDRESS_OFFSET_REG64 + 7: { + /* Read from any of the eight counter bytes. + * The first byte is the 64 bit value's LSB, the seventh byte is its MSB. + */ + unsigned byte_select = Addr - PERIPHERALS_ADDRESS_OFFSET_REG64; /* 0 .. 7 */ + uint64_t value; + switch (PRegs.visible_latch_register) { + case PERIPHERALS_REG64_SELECT_CLOCKCYCLE_COUNTER: value = PRegs.latched_counter_clock_cycles; break; + case PERIPHERALS_REG64_SELECT_INSTRUCTION_COUNTER: value = PRegs.latched_counter_instructions; break; + case PERIPHERALS_REG64_SELECT_IRQ_COUNTER: value = PRegs.latched_counter_irq_events; break; + case PERIPHERALS_REG64_SELECT_NMI_COUNTER: value = PRegs.latched_counter_nmi_events; break; + case PERIPHERALS_REG64_SELECT_WALLCLOCK_TIME: value = PRegs.latched_wallclock_time; break; + default: value = 0; /* Reading from a non-supported register will yield 0. */ + } + /* Return the desired byte of the latched counter. 0==LSB, 7==MSB. */ + return value >> (byte_select * 8); + } + default: { + /* Any other read yields a zero value. */ + return 0; + } + } +} + + + +void PeripheralsInit (void) +/* Initialize the peripheral registers */ +{ + PRegs.counter_clock_cycles = 0; + PRegs.counter_instructions = 0; + PRegs.counter_irq_events = 0; + PRegs.counter_nmi_events = 0; + + PRegs.latched_counter_clock_cycles = 0; + PRegs.latched_counter_instructions = 0; + PRegs.latched_counter_irq_events = 0; + PRegs.latched_counter_nmi_events = 0; + PRegs.latched_wallclock_time = 0; + + PRegs.visible_latch_register = 0; +} diff --git a/src/sim65/peripherals.h b/src/sim65/peripherals.h new file mode 100644 index 000000000..76da6e2f8 --- /dev/null +++ b/src/sim65/peripherals.h @@ -0,0 +1,98 @@ +/*****************************************************************************/ +/* */ +/* peripherals.h */ +/* */ +/* Memory-mapped peripheral subsystem for the 6502 simulator */ +/* */ +/* */ +/* */ +/* (C) 2024-2025, Sidney Cadot */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef PERIPHERALS_H +#define PERIPHERALS_H + +#include <stdint.h> + +#define PERIPHERALS_APERTURE_BASE_ADDRESS 0xffc0 +#define PERIPHERALS_APERTURE_LAST_ADDRESS 0xffc9 + +#define PERIPHERALS_ADDRESS_OFFSET_LATCH 0x00 +#define PERIPHERALS_ADDRESS_OFFSET_SELECT 0x01 +#define PERIPHERALS_ADDRESS_OFFSET_REG64 0x02 + +#define PERIPHERALS_LATCH (PERIPHERALS_APERTURE_BASE_ADDRESS + PERIPHERALS_ADDRESS_OFFSET_LATCH) +#define PERIPHERALS_SELECT (PERIPHERALS_APERTURE_BASE_ADDRESS + PERIPHERALS_ADDRESS_OFFSET_SELECT) +#define PERIPHERALS_REG64 (PERIPHERALS_APERTURE_BASE_ADDRESS + PERIPHERALS_ADDRESS_OFFSET_REG64) + +#define PERIPHERALS_REG64_SELECT_CLOCKCYCLE_COUNTER 0x00 +#define PERIPHERALS_REG64_SELECT_INSTRUCTION_COUNTER 0x01 +#define PERIPHERALS_REG64_SELECT_IRQ_COUNTER 0x02 +#define PERIPHERALS_REG64_SELECT_NMI_COUNTER 0x03 +#define PERIPHERALS_REG64_SELECT_WALLCLOCK_TIME 0x80 + +typedef struct { + /* the invisible counters that are continuously updated */ + uint64_t counter_clock_cycles; + uint64_t counter_instructions; + uint64_t counter_irq_events; + uint64_t counter_nmi_events; + /* latched counters upon a write to the 'latch' address. + * One of these will be visible (read only) through an each-byte aperture. */ + uint64_t latched_counter_clock_cycles; + uint64_t latched_counter_instructions; + uint64_t latched_counter_irq_events; + uint64_t latched_counter_nmi_events; + uint64_t latched_wallclock_time; + /* Select which of the five latched registers will be visible. + * This is a Read/Write byte-wide register. + * If a non-existent register is selected, the 8-byte aperture will read as zero. + */ + uint8_t visible_latch_register; +} PeripheralRegs; + +extern PeripheralRegs PRegs; + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +void PeripheralWriteByte (uint8_t Addr, uint8_t Val); +/* Write a byte to a memory location in the peripheral address aperture. */ + + +uint8_t PeripheralReadByte (uint8_t Addr); +/* Read a byte from a memory location in the peripheral address aperture. */ + + +void PeripheralsInit (void); +/* Initialize the peripheral registers */ + + + +/* End of peripherals.h */ + +#endif From ceac9f87ba639c83139422d5cd93623f774826fb Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Tue, 17 Dec 2024 21:34:05 +0100 Subject: [PATCH 2577/2710] Temporary fix for fgets() not using target-specific newline. This patch provides a temporary fix for the issue where the fgets() function did not use the target-specific newline character to decide if it has reached the end of the line. It defaulted to the value $0a, which is the newline character on only some targets. The Atari, for example, has newline character $9b instead. This patch is ugly, because the ca65 assembler that is used for fgets doesn't currently accept C-type character escape sequences as values. Ideally we'd be able to write: cmp #'\n' And this would end up being translated to a compare-immediate to the target-specific newline character. Since that is impossible, this patch substitutes the equivalent, but ugly, code: .byte $c9, "\n" This works because $c9 is the opcode for cmp #imm, and the "\n" string /is/ translated to the platform-specific newline character, at least when the 'string_escapes' feature is enabled. --- libsrc/common/fgets.s | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/libsrc/common/fgets.s b/libsrc/common/fgets.s index 172ca10dd..671136be2 100644 --- a/libsrc/common/fgets.s +++ b/libsrc/common/fgets.s @@ -8,6 +8,8 @@ .import _fgetc, popptr1, pushptr1, popax, pushax, return0, ___errno .importzp ptr1, ptr4 + .feature string_escapes + .include "errno.inc" .include "stdio.inc" .include "_file.inc" @@ -88,7 +90,22 @@ read_loop: bne :+ inc ptr4+1 -: cmp #$0A ; Stop at \n + ; The next code line: + ; + ; .byte $c9, "\n" + ; + ; corresponds to a CMP #imm with the target-specific newline value as its operand. + ; This works because (with the 'string_escapes' feature enabled), the "\n" string + ; assembles to the target-specific value for the newline character. + ; + ; It would be better if we could just write: + ; + ; cmp #'\n' + ; + ; Unfortunately, ca65 doesn't currently handle escape characters in character + ; constants. In the longer term, fixing that would be the preferred solution. + +: .byte $c9, "\n" ; cmp #'\n' beq done bne read_loop From a3cc9b47571c885f590ec73692f8027870a79222 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Wed, 18 Dec 2024 08:55:30 +0100 Subject: [PATCH 2578/2710] Fixed mistake in the latching code. --- src/sim65/peripherals.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index edf401b02..6ff420a24 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -82,10 +82,10 @@ void PeripheralWriteByte (uint8_t Addr, uint8_t Val) PRegs.latched_wallclock_time = get_uint64_wallclock_time(); /* Now latch all the cycles maintained by the processor. */ - PRegs.latched_counter_clock_cycles = PRegs.latched_counter_clock_cycles; - PRegs.latched_counter_instructions = PRegs.latched_counter_instructions; - PRegs.latched_counter_irq_events = PRegs.latched_counter_irq_events; - PRegs.latched_counter_nmi_events = PRegs.latched_counter_nmi_events; + PRegs.latched_counter_clock_cycles = PRegs.counter_clock_cycles; + PRegs.latched_counter_instructions = PRegs.counter_instructions; + PRegs.latched_counter_irq_events = PRegs.counter_irq_events; + PRegs.latched_counter_nmi_events = PRegs.counter_nmi_events; break; } case PERIPHERALS_ADDRESS_OFFSET_SELECT: { From 8ee93f7e5f726c0a39aa9a4ee396955718c0b6df Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Wed, 18 Dec 2024 09:04:20 +0100 Subject: [PATCH 2579/2710] Fixed indentation inside comment. --- libsrc/common/fgets.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/common/fgets.s b/libsrc/common/fgets.s index 671136be2..d5ea900d0 100644 --- a/libsrc/common/fgets.s +++ b/libsrc/common/fgets.s @@ -100,7 +100,7 @@ read_loop: ; ; It would be better if we could just write: ; - ; cmp #'\n' + ; cmp #'\n' ; ; Unfortunately, ca65 doesn't currently handle escape characters in character ; constants. In the longer term, fixing that would be the preferred solution. From 8a7cd9c632c6090f52aee7925b7611093a73aa73 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Thu, 19 Dec 2024 03:04:55 +0100 Subject: [PATCH 2580/2710] Fixed format string. --- src/sim65/error.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sim65/error.c b/src/sim65/error.c index 3618d660f..58c188676 100644 --- a/src/sim65/error.c +++ b/src/sim65/error.c @@ -118,7 +118,7 @@ void SimExit (int Code) /* Exit the simulation with an exit code */ { if (PrintCycles) { - fprintf (stdout, PRIu64 " cycles\n", PRegs.counter_clock_cycles); + fprintf (stdout, "%" PRIu64 " cycles\n", PRegs.counter_clock_cycles); } exit (Code); } From 5239d3a11b11619d6fb65f2691cea7ac92c136f7 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Thu, 19 Dec 2024 03:48:15 +0100 Subject: [PATCH 2581/2710] Polishing the peripherals (and counter) interface. --- src/sim65/6502.c | 8 +-- src/sim65/error.c | 2 +- src/sim65/memory.c | 4 +- src/sim65/peripherals.c | 123 +++++++++++++++++++--------------------- src/sim65/peripherals.h | 82 +++++++++++++++++---------- 5 files changed, 117 insertions(+), 102 deletions(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index f48ba8fee..7e993a59c 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -4108,7 +4108,7 @@ unsigned ExecuteInsn (void) if (HaveNMIRequest) { HaveNMIRequest = 0; - PRegs.counter_nmi_events += 1; + Peripherals.Counter.nmi_events += 1; PUSH (PCH); PUSH (PCL); @@ -4124,7 +4124,7 @@ unsigned ExecuteInsn (void) } else if (HaveIRQRequest && GET_IF () == 0) { HaveIRQRequest = 0; - PRegs.counter_irq_events += 1; + Peripherals.Counter.irq_events += 1; PUSH (PCH); PUSH (PCL); @@ -4146,11 +4146,11 @@ unsigned ExecuteInsn (void) Handlers[CPU][OPC] (); /* Increment the instruction counter by one.NMIs and IRQs are counted separately. */ - PRegs.counter_instructions += 1; + Peripherals.Counter.cpu_instructions += 1; } /* Increment the 64-bit clock cycle counter with the cycle count for the instruction that we just executed */ - PRegs.counter_clock_cycles += Cycles; + Peripherals.Counter.clock_cycles += Cycles; /* Return the number of clock cycles needed by this insn */ return Cycles; diff --git a/src/sim65/error.c b/src/sim65/error.c index 58c188676..45fb243d8 100644 --- a/src/sim65/error.c +++ b/src/sim65/error.c @@ -118,7 +118,7 @@ void SimExit (int Code) /* Exit the simulation with an exit code */ { if (PrintCycles) { - fprintf (stdout, "%" PRIu64 " cycles\n", PRegs.counter_clock_cycles); + fprintf (stdout, "%" PRIu64 " cycles\n", Peripherals.Counter.clock_cycles); } exit (Code); } diff --git a/src/sim65/memory.c b/src/sim65/memory.c index c4b6bb220..c80bf0f93 100644 --- a/src/sim65/memory.c +++ b/src/sim65/memory.c @@ -62,7 +62,7 @@ void MemWriteByte (uint16_t Addr, uint8_t Val) if ((PERIPHERALS_APERTURE_BASE_ADDRESS <= Addr) && (Addr <= PERIPHERALS_APERTURE_LAST_ADDRESS)) { /* Defer the the memory-mapped peripherals handler for this write. */ - PeripheralWriteByte (Addr - PERIPHERALS_APERTURE_BASE_ADDRESS, Val); + PeripheralsWriteByte (Addr - PERIPHERALS_APERTURE_BASE_ADDRESS, Val); } else { /* Write to the Mem array. */ Mem[Addr] = Val; @@ -86,7 +86,7 @@ uint8_t MemReadByte (uint16_t Addr) if ((PERIPHERALS_APERTURE_BASE_ADDRESS <= Addr) && (Addr <= PERIPHERALS_APERTURE_LAST_ADDRESS)) { /* Defer the the memory-mapped peripherals handler for this read. */ - return PeripheralReadByte (Addr - PERIPHERALS_APERTURE_BASE_ADDRESS); + return PeripheralsReadByte (Addr - PERIPHERALS_APERTURE_BASE_ADDRESS); } else { /* Read from the Mem array. */ return Mem[Addr]; diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 6ff420a24..cc2eb6528 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -40,8 +40,8 @@ -/* The peripheral registers. */ -PeripheralRegs PRegs; +/* The system-wide state of the peripherals */ +Sim65Peripherals Peripherals; @@ -51,46 +51,37 @@ PeripheralRegs PRegs; -static uint64_t get_uint64_wallclock_time(void) -{ - struct timespec ts; - int result = clock_gettime(CLOCK_REALTIME, &ts); - if (result != 0) - { - // On failure, time will be set to the max value. - return 0xffffffffffffffff; - } - - /* Return time since the 1-1-1970 epoch, in nanoseconds. - * Note that this time may be off by an integer number of seconds, as POSIX - * maintaines that all days are 86,400 seconds long, which is not true due to - * leap seconds. - */ - return ts.tv_sec * 1000000000 + ts.tv_nsec; -} - - - -void PeripheralWriteByte (uint8_t Addr, uint8_t Val) -/* Write a byte to a memory location in the peripheral address aperture. */ +void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) +/* Write a byte to a memory location in the peripherals address aperture. */ { switch (Addr) { - case PERIPHERALS_ADDRESS_OFFSET_LATCH: { - /* A write to the "latch" register performs a simultaneous latch of all registers */ + case PERIPHERALS_COUNTER_ADDRESS_OFFSET_LATCH: { + /* A write to the "latch" register performs a simultaneous latch of all registers. */ /* Latch the current wallclock time first. */ - PRegs.latched_wallclock_time = get_uint64_wallclock_time(); + struct timespec ts; + int result = clock_gettime(CLOCK_REALTIME, &ts); + if (result != 0) { + /* Unable to read time. Report max uint64 value for both fields. */ + Peripherals.Counter.latched_wallclock_time = 0xffffffffffffffff; + Peripherals.Counter.latched_wallclock_time_split = 0xffffffffffffffff; + } else { + /* Number of nanoseconds since 1-1-1970. */ + Peripherals.Counter.latched_wallclock_time = 1000000000u * ts.tv_sec + ts.tv_nsec; + /* High word is number of seconds, low word is number of nanoseconds. */ + Peripherals.Counter.latched_wallclock_time_split = (ts.tv_sec << 32) | ts.tv_nsec; + } - /* Now latch all the cycles maintained by the processor. */ - PRegs.latched_counter_clock_cycles = PRegs.counter_clock_cycles; - PRegs.latched_counter_instructions = PRegs.counter_instructions; - PRegs.latched_counter_irq_events = PRegs.counter_irq_events; - PRegs.latched_counter_nmi_events = PRegs.counter_nmi_events; + /* Latch the counters that reflect the state of the processor. */ + Peripherals.Counter.latched_clock_cycles = Peripherals.Counter.clock_cycles; + Peripherals.Counter.latched_cpu_instructions = Peripherals.Counter.cpu_instructions; + Peripherals.Counter.latched_irq_events = Peripherals.Counter.irq_events; + Peripherals.Counter.latched_nmi_events = Peripherals.Counter.nmi_events; break; } - case PERIPHERALS_ADDRESS_OFFSET_SELECT: { + case PERIPHERALS_COUNTER_ADDRESS_OFFSET_SELECT: { /* Set the value of the visibility-selection register. */ - PRegs.visible_latch_register = Val; + Peripherals.Counter.visible_latch_register = Val; break; } default: { @@ -101,33 +92,34 @@ void PeripheralWriteByte (uint8_t Addr, uint8_t Val) -uint8_t PeripheralReadByte (uint8_t Addr) -/* Read a byte from a memory location in the peripheral address aperture. */ +uint8_t PeripheralsReadByte (uint8_t Addr) +/* Read a byte from a memory location in the peripherals address aperture. */ { switch (Addr) { - case PERIPHERALS_ADDRESS_OFFSET_SELECT: { - return PRegs.visible_latch_register; + case PERIPHERALS_COUNTER_ADDRESS_OFFSET_SELECT: { + return Peripherals.Counter.visible_latch_register; } - case PERIPHERALS_ADDRESS_OFFSET_REG64 + 0: - case PERIPHERALS_ADDRESS_OFFSET_REG64 + 1: - case PERIPHERALS_ADDRESS_OFFSET_REG64 + 2: - case PERIPHERALS_ADDRESS_OFFSET_REG64 + 3: - case PERIPHERALS_ADDRESS_OFFSET_REG64 + 4: - case PERIPHERALS_ADDRESS_OFFSET_REG64 + 5: - case PERIPHERALS_ADDRESS_OFFSET_REG64 + 6: - case PERIPHERALS_ADDRESS_OFFSET_REG64 + 7: { + case PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE + 0: + case PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE + 1: + case PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE + 2: + case PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE + 3: + case PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE + 4: + case PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE + 5: + case PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE + 6: + case PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE + 7: { /* Read from any of the eight counter bytes. * The first byte is the 64 bit value's LSB, the seventh byte is its MSB. */ - unsigned byte_select = Addr - PERIPHERALS_ADDRESS_OFFSET_REG64; /* 0 .. 7 */ + unsigned byte_select = Addr - PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE; /* 0 .. 7 */ uint64_t value; - switch (PRegs.visible_latch_register) { - case PERIPHERALS_REG64_SELECT_CLOCKCYCLE_COUNTER: value = PRegs.latched_counter_clock_cycles; break; - case PERIPHERALS_REG64_SELECT_INSTRUCTION_COUNTER: value = PRegs.latched_counter_instructions; break; - case PERIPHERALS_REG64_SELECT_IRQ_COUNTER: value = PRegs.latched_counter_irq_events; break; - case PERIPHERALS_REG64_SELECT_NMI_COUNTER: value = PRegs.latched_counter_nmi_events; break; - case PERIPHERALS_REG64_SELECT_WALLCLOCK_TIME: value = PRegs.latched_wallclock_time; break; - default: value = 0; /* Reading from a non-supported register will yield 0. */ + switch (Peripherals.Counter.visible_latch_register) { + case PERIPHERALS_COUNTER_SELECT_CLOCKCYCLE_COUNTER: value = Peripherals.Counter.latched_clock_cycles; break; + case PERIPHERALS_COUNTER_SELECT_INSTRUCTION_COUNTER: value = Peripherals.Counter.latched_cpu_instructions; break; + case PERIPHERALS_COUNTER_SELECT_IRQ_COUNTER: value = Peripherals.Counter.latched_irq_events; break; + case PERIPHERALS_COUNTER_SELECT_NMI_COUNTER: value = Peripherals.Counter.latched_nmi_events; break; + case PERIPHERALS_COUNTER_SELECT_WALLCLOCK_TIME: value = Peripherals.Counter.latched_wallclock_time; break; + case PERIPHERALS_COUNTER_SELECT_WALLCLOCK_TIME_SPLIT: value = Peripherals.Counter.latched_wallclock_time_split; break; + default: value = 0; /* Reading from a non-existent register will yield 0. */ } /* Return the desired byte of the latched counter. 0==LSB, 7==MSB. */ return value >> (byte_select * 8); @@ -144,16 +136,19 @@ uint8_t PeripheralReadByte (uint8_t Addr) void PeripheralsInit (void) /* Initialize the peripheral registers */ { - PRegs.counter_clock_cycles = 0; - PRegs.counter_instructions = 0; - PRegs.counter_irq_events = 0; - PRegs.counter_nmi_events = 0; + /* Initialize the COUNTER peripheral */ - PRegs.latched_counter_clock_cycles = 0; - PRegs.latched_counter_instructions = 0; - PRegs.latched_counter_irq_events = 0; - PRegs.latched_counter_nmi_events = 0; - PRegs.latched_wallclock_time = 0; + Peripherals.Counter.clock_cycles = 0; + Peripherals.Counter.cpu_instructions = 0; + Peripherals.Counter.irq_events = 0; + Peripherals.Counter.nmi_events = 0; - PRegs.visible_latch_register = 0; + Peripherals.Counter.latched_clock_cycles = 0; + Peripherals.Counter.latched_cpu_instructions = 0; + Peripherals.Counter.latched_irq_events = 0; + Peripherals.Counter.latched_nmi_events = 0; + Peripherals.Counter.latched_wallclock_time = 0; + Peripherals.Counter.latched_wallclock_time_split = 0; + + Peripherals.Counter.visible_latch_register = 0; } diff --git a/src/sim65/peripherals.h b/src/sim65/peripherals.h index 76da6e2f8..988fd2460 100644 --- a/src/sim65/peripherals.h +++ b/src/sim65/peripherals.h @@ -35,44 +35,64 @@ #include <stdint.h> -#define PERIPHERALS_APERTURE_BASE_ADDRESS 0xffc0 -#define PERIPHERALS_APERTURE_LAST_ADDRESS 0xffc9 +/* The memory range where the memory-mapped peripherals can be accessed. */ -#define PERIPHERALS_ADDRESS_OFFSET_LATCH 0x00 -#define PERIPHERALS_ADDRESS_OFFSET_SELECT 0x01 -#define PERIPHERALS_ADDRESS_OFFSET_REG64 0x02 +#define PERIPHERALS_APERTURE_BASE_ADDRESS 0xffc0 +#define PERIPHERALS_APERTURE_LAST_ADDRESS 0xffc9 -#define PERIPHERALS_LATCH (PERIPHERALS_APERTURE_BASE_ADDRESS + PERIPHERALS_ADDRESS_OFFSET_LATCH) -#define PERIPHERALS_SELECT (PERIPHERALS_APERTURE_BASE_ADDRESS + PERIPHERALS_ADDRESS_OFFSET_SELECT) -#define PERIPHERALS_REG64 (PERIPHERALS_APERTURE_BASE_ADDRESS + PERIPHERALS_ADDRESS_OFFSET_REG64) +/* Declarations for the COUNTER peripheral (currently the only peripheral). */ -#define PERIPHERALS_REG64_SELECT_CLOCKCYCLE_COUNTER 0x00 -#define PERIPHERALS_REG64_SELECT_INSTRUCTION_COUNTER 0x01 -#define PERIPHERALS_REG64_SELECT_IRQ_COUNTER 0x02 -#define PERIPHERALS_REG64_SELECT_NMI_COUNTER 0x03 -#define PERIPHERALS_REG64_SELECT_WALLCLOCK_TIME 0x80 +#define PERIPHERALS_COUNTER_ADDRESS_OFFSET_LATCH 0x00 +#define PERIPHERALS_COUNTER_ADDRESS_OFFSET_SELECT 0x01 +#define PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE 0x02 + +#define PERIPHERALS_COUNTER_LATCH (PERIPHERALS_APERTURE_BASE_ADDRESS + PERIPHERALS_ADDRESS_OFFSET_COUNTER_LATCH) +#define PERIPHERALS_COUNTER_SELECT (PERIPHERALS_APERTURE_BASE_ADDRESS + PERIPHERALS_ADDRESS_OFFSET_COUNTER_SELECT) +#define PERIPHERALS_COUNTER_VALUE (PERIPHERALS_APERTURE_BASE_ADDRESS + PERIPHERALS_ADDRESS_OFFSET_COUNTER) + +#define PERIPHERALS_COUNTER_SELECT_CLOCKCYCLE_COUNTER 0x00 +#define PERIPHERALS_COUNTER_SELECT_INSTRUCTION_COUNTER 0x01 +#define PERIPHERALS_COUNTER_SELECT_IRQ_COUNTER 0x02 +#define PERIPHERALS_COUNTER_SELECT_NMI_COUNTER 0x03 +#define PERIPHERALS_COUNTER_SELECT_WALLCLOCK_TIME 0x80 +#define PERIPHERALS_COUNTER_SELECT_WALLCLOCK_TIME_SPLIT 0x81 typedef struct { - /* the invisible counters that are continuously updated */ - uint64_t counter_clock_cycles; - uint64_t counter_instructions; - uint64_t counter_irq_events; - uint64_t counter_nmi_events; - /* latched counters upon a write to the 'latch' address. - * One of these will be visible (read only) through an each-byte aperture. */ - uint64_t latched_counter_clock_cycles; - uint64_t latched_counter_instructions; - uint64_t latched_counter_irq_events; - uint64_t latched_counter_nmi_events; + /* The invisible counters that keep processor state. */ + uint64_t clock_cycles; + uint64_t cpu_instructions; + uint64_t irq_events; + uint64_t nmi_events; + /* Latched counters upon a write to the PERIPHERALS_COUNTER_LATCH address. + * One of these will be visible (read only) through an eight-byte aperture. + * The purpose of these latched registers is to read 64-bit values one byte + * at a time, without having to worry that their content will change along + * the way. + */ + uint64_t latched_clock_cycles; + uint64_t latched_cpu_instructions; + uint64_t latched_irq_events; + uint64_t latched_nmi_events; uint64_t latched_wallclock_time; - /* Select which of the five latched registers will be visible. - * This is a Read/Write byte-wide register. - * If a non-existent register is selected, the 8-byte aperture will read as zero. + uint64_t latched_wallclock_time_split; + /* Select which of the six latched registers will be visible. + * This is a single byte, read/write register, accessible via address PERIPHERALS_COUNTER_SELECT. + * If a non-existent latch register is selected, the PERIPHERALS_REGS64 value will be zero. */ uint8_t visible_latch_register; -} PeripheralRegs; +} CounterPeripheral; -extern PeripheralRegs PRegs; + + +/* Declare the 'Sim65Peripherals' type and its single instance 'Peripherals'. */ + +typedef struct { + /* State of the peripherals simulated by sim65. + * Currently, there is only one: the COUNTER peripheral. */ + CounterPeripheral Counter; +} Sim65Peripherals; + +extern Sim65Peripherals Peripherals; /*****************************************************************************/ /* Code */ @@ -80,11 +100,11 @@ extern PeripheralRegs PRegs; -void PeripheralWriteByte (uint8_t Addr, uint8_t Val); +void PeripheralsWriteByte (uint8_t Addr, uint8_t Val); /* Write a byte to a memory location in the peripheral address aperture. */ -uint8_t PeripheralReadByte (uint8_t Addr); +uint8_t PeripheralsReadByte (uint8_t Addr); /* Read a byte from a memory location in the peripheral address aperture. */ From 3cd7548b59bef554c1ae7c412c3849019691099b Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Thu, 19 Dec 2024 03:50:44 +0100 Subject: [PATCH 2582/2710] Cosmetic fixes. --- src/sim65/peripherals.c | 16 ++++++++-------- src/sim65/peripherals.h | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index cc2eb6528..74fc49d89 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -59,16 +59,16 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) /* A write to the "latch" register performs a simultaneous latch of all registers. */ /* Latch the current wallclock time first. */ - struct timespec ts; + struct timespec ts; int result = clock_gettime(CLOCK_REALTIME, &ts); - if (result != 0) { - /* Unable to read time. Report max uint64 value for both fields. */ - Peripherals.Counter.latched_wallclock_time = 0xffffffffffffffff; + if (result != 0) { + /* Unable to read time. Report max uint64 value for both fields. */ + Peripherals.Counter.latched_wallclock_time = 0xffffffffffffffff; Peripherals.Counter.latched_wallclock_time_split = 0xffffffffffffffff; - } else { - /* Number of nanoseconds since 1-1-1970. */ + } else { + /* Number of nanoseconds since 1-1-1970. */ Peripherals.Counter.latched_wallclock_time = 1000000000u * ts.tv_sec + ts.tv_nsec; - /* High word is number of seconds, low word is number of nanoseconds. */ + /* High word is number of seconds, low word is number of nanoseconds. */ Peripherals.Counter.latched_wallclock_time_split = (ts.tv_sec << 32) | ts.tv_nsec; } @@ -134,7 +134,7 @@ uint8_t PeripheralsReadByte (uint8_t Addr) void PeripheralsInit (void) -/* Initialize the peripheral registers */ +/* Initialize the peripherals. */ { /* Initialize the COUNTER peripheral */ diff --git a/src/sim65/peripherals.h b/src/sim65/peripherals.h index 988fd2460..517931d85 100644 --- a/src/sim65/peripherals.h +++ b/src/sim65/peripherals.h @@ -109,7 +109,7 @@ uint8_t PeripheralsReadByte (uint8_t Addr); void PeripheralsInit (void); -/* Initialize the peripheral registers */ +/* Initialize the peripherals. */ From 743a3dc73518cf862c38df4a88c1e78fe2966358 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Thu, 19 Dec 2024 07:44:01 +0100 Subject: [PATCH 2583/2710] Changed nameing convention of fields (now CamelCase), and improved comments. --- src/sim65/6502.c | 10 ++--- src/sim65/error.c | 2 +- src/sim65/peripherals.c | 87 +++++++++++++++++++++++------------------ src/sim65/peripherals.h | 34 ++++++++-------- 4 files changed, 74 insertions(+), 59 deletions(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index 7e993a59c..84360bad4 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -4108,7 +4108,7 @@ unsigned ExecuteInsn (void) if (HaveNMIRequest) { HaveNMIRequest = 0; - Peripherals.Counter.nmi_events += 1; + Peripherals.Counter.NmiEvents += 1; PUSH (PCH); PUSH (PCL); @@ -4124,7 +4124,7 @@ unsigned ExecuteInsn (void) } else if (HaveIRQRequest && GET_IF () == 0) { HaveIRQRequest = 0; - Peripherals.Counter.irq_events += 1; + Peripherals.Counter.IrqEvents += 1; PUSH (PCH); PUSH (PCL); @@ -4146,11 +4146,11 @@ unsigned ExecuteInsn (void) Handlers[CPU][OPC] (); /* Increment the instruction counter by one.NMIs and IRQs are counted separately. */ - Peripherals.Counter.cpu_instructions += 1; + Peripherals.Counter.CpuInstructions += 1; } - /* Increment the 64-bit clock cycle counter with the cycle count for the instruction that we just executed */ - Peripherals.Counter.clock_cycles += Cycles; + /* Increment the 64-bit clock cycle counter with the cycle count for the instruction that we just executed. */ + Peripherals.Counter.ClockCycles += Cycles; /* Return the number of clock cycles needed by this insn */ return Cycles; diff --git a/src/sim65/error.c b/src/sim65/error.c index 45fb243d8..af8e88413 100644 --- a/src/sim65/error.c +++ b/src/sim65/error.c @@ -118,7 +118,7 @@ void SimExit (int Code) /* Exit the simulation with an exit code */ { if (PrintCycles) { - fprintf (stdout, "%" PRIu64 " cycles\n", Peripherals.Counter.clock_cycles); + fprintf (stdout, "%" PRIu64 " cycles\n", Peripherals.Counter.ClockCycles); } exit (Code); } diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 74fc49d89..fbd4159e3 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -55,6 +55,9 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) /* Write a byte to a memory location in the peripherals address aperture. */ { switch (Addr) { + + /* Handle writes to the Counter peripheral. */ + case PERIPHERALS_COUNTER_ADDRESS_OFFSET_LATCH: { /* A write to the "latch" register performs a simultaneous latch of all registers. */ @@ -63,29 +66,33 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) int result = clock_gettime(CLOCK_REALTIME, &ts); if (result != 0) { /* Unable to read time. Report max uint64 value for both fields. */ - Peripherals.Counter.latched_wallclock_time = 0xffffffffffffffff; - Peripherals.Counter.latched_wallclock_time_split = 0xffffffffffffffff; + Peripherals.Counter.LatchedWallclockTime = 0xffffffffffffffff; + Peripherals.Counter.LatchedWallclockTimeSplit = 0xffffffffffffffff; } else { - /* Number of nanoseconds since 1-1-1970. */ - Peripherals.Counter.latched_wallclock_time = 1000000000u * ts.tv_sec + ts.tv_nsec; - /* High word is number of seconds, low word is number of nanoseconds. */ - Peripherals.Counter.latched_wallclock_time_split = (ts.tv_sec << 32) | ts.tv_nsec; + /* Wallclock time: number of nanoseconds since 1-1-1970. */ + Peripherals.Counter.LatchedWallclockTime = 1000000000u * ts.tv_sec + ts.tv_nsec; + /* Wallclock time, split: high word is number of seconds since 1-1-1970, + * low word is number of nanoseconds since the start of that second. */ + Peripherals.Counter.LatchedWallclockTimeSplit = (ts.tv_sec << 32) | ts.tv_nsec; } /* Latch the counters that reflect the state of the processor. */ - Peripherals.Counter.latched_clock_cycles = Peripherals.Counter.clock_cycles; - Peripherals.Counter.latched_cpu_instructions = Peripherals.Counter.cpu_instructions; - Peripherals.Counter.latched_irq_events = Peripherals.Counter.irq_events; - Peripherals.Counter.latched_nmi_events = Peripherals.Counter.nmi_events; + Peripherals.Counter.LatchedClockCycles = Peripherals.Counter.ClockCycles; + Peripherals.Counter.LatchedCpuInstructions = Peripherals.Counter.CpuInstructions; + Peripherals.Counter.LatchedIrqEvents = Peripherals.Counter.IrqEvents; + Peripherals.Counter.LatchedNmiEvents = Peripherals.Counter.NmiEvents; break; } case PERIPHERALS_COUNTER_ADDRESS_OFFSET_SELECT: { /* Set the value of the visibility-selection register. */ - Peripherals.Counter.visible_latch_register = Val; + Peripherals.Counter.LatchedValueSelected = Val; break; } + + /* Handle writes to unused and read-only peripheral addresses. */ + default: { - /* Any other write is ignored */ + /* No action. */ } } } @@ -96,8 +103,11 @@ uint8_t PeripheralsReadByte (uint8_t Addr) /* Read a byte from a memory location in the peripherals address aperture. */ { switch (Addr) { + + /* Handle reads from the Counter peripheral. */ + case PERIPHERALS_COUNTER_ADDRESS_OFFSET_SELECT: { - return Peripherals.Counter.visible_latch_register; + return Peripherals.Counter.LatchedValueSelected; } case PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE + 0: case PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE + 1: @@ -110,22 +120,25 @@ uint8_t PeripheralsReadByte (uint8_t Addr) /* Read from any of the eight counter bytes. * The first byte is the 64 bit value's LSB, the seventh byte is its MSB. */ - unsigned byte_select = Addr - PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE; /* 0 .. 7 */ - uint64_t value; - switch (Peripherals.Counter.visible_latch_register) { - case PERIPHERALS_COUNTER_SELECT_CLOCKCYCLE_COUNTER: value = Peripherals.Counter.latched_clock_cycles; break; - case PERIPHERALS_COUNTER_SELECT_INSTRUCTION_COUNTER: value = Peripherals.Counter.latched_cpu_instructions; break; - case PERIPHERALS_COUNTER_SELECT_IRQ_COUNTER: value = Peripherals.Counter.latched_irq_events; break; - case PERIPHERALS_COUNTER_SELECT_NMI_COUNTER: value = Peripherals.Counter.latched_nmi_events; break; - case PERIPHERALS_COUNTER_SELECT_WALLCLOCK_TIME: value = Peripherals.Counter.latched_wallclock_time; break; - case PERIPHERALS_COUNTER_SELECT_WALLCLOCK_TIME_SPLIT: value = Peripherals.Counter.latched_wallclock_time_split; break; - default: value = 0; /* Reading from a non-existent register will yield 0. */ + unsigned ByteIndex = Addr - PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE; /* 0 .. 7 */ + uint64_t Value; + switch (Peripherals.Counter.LatchedValueSelected) { + case PERIPHERALS_COUNTER_SELECT_CLOCKCYCLE_COUNTER: Value = Peripherals.Counter.LatchedClockCycles; break; + case PERIPHERALS_COUNTER_SELECT_INSTRUCTION_COUNTER: Value = Peripherals.Counter.LatchedCpuInstructions; break; + case PERIPHERALS_COUNTER_SELECT_IRQ_COUNTER: Value = Peripherals.Counter.LatchedIrqEvents; break; + case PERIPHERALS_COUNTER_SELECT_NMI_COUNTER: Value = Peripherals.Counter.LatchedNmiEvents; break; + case PERIPHERALS_COUNTER_SELECT_WALLCLOCK_TIME: Value = Peripherals.Counter.LatchedWallclockTime; break; + case PERIPHERALS_COUNTER_SELECT_WALLCLOCK_TIME_SPLIT: Value = Peripherals.Counter.LatchedWallclockTimeSplit; break; + default: Value = 0; /* Reading from a non-existent latch register will yield 0. */ } /* Return the desired byte of the latched counter. 0==LSB, 7==MSB. */ - return value >> (byte_select * 8); + return Value >> (ByteIndex * 8); } + + /* Handle reads from unused peripheral and write-only addresses. */ + default: { - /* Any other read yields a zero value. */ + /* Return zero value. */ return 0; } } @@ -136,19 +149,19 @@ uint8_t PeripheralsReadByte (uint8_t Addr) void PeripheralsInit (void) /* Initialize the peripherals. */ { - /* Initialize the COUNTER peripheral */ + /* Initialize the Counter peripheral */ - Peripherals.Counter.clock_cycles = 0; - Peripherals.Counter.cpu_instructions = 0; - Peripherals.Counter.irq_events = 0; - Peripherals.Counter.nmi_events = 0; + Peripherals.Counter.ClockCycles = 0; + Peripherals.Counter.CpuInstructions = 0; + Peripherals.Counter.IrqEvents = 0; + Peripherals.Counter.NmiEvents = 0; - Peripherals.Counter.latched_clock_cycles = 0; - Peripherals.Counter.latched_cpu_instructions = 0; - Peripherals.Counter.latched_irq_events = 0; - Peripherals.Counter.latched_nmi_events = 0; - Peripherals.Counter.latched_wallclock_time = 0; - Peripherals.Counter.latched_wallclock_time_split = 0; + Peripherals.Counter.LatchedClockCycles = 0; + Peripherals.Counter.LatchedCpuInstructions = 0; + Peripherals.Counter.LatchedIrqEvents = 0; + Peripherals.Counter.LatchedNmiEvents = 0; + Peripherals.Counter.LatchedWallclockTime = 0; + Peripherals.Counter.LatchedWallclockTimeSplit = 0; - Peripherals.Counter.visible_latch_register = 0; + Peripherals.Counter.LatchedValueSelected = 0; } diff --git a/src/sim65/peripherals.h b/src/sim65/peripherals.h index 517931d85..16ea83782 100644 --- a/src/sim65/peripherals.h +++ b/src/sim65/peripherals.h @@ -59,27 +59,29 @@ typedef struct { /* The invisible counters that keep processor state. */ - uint64_t clock_cycles; - uint64_t cpu_instructions; - uint64_t irq_events; - uint64_t nmi_events; - /* Latched counters upon a write to the PERIPHERALS_COUNTER_LATCH address. + uint64_t ClockCycles; + uint64_t CpuInstructions; + uint64_t IrqEvents; + uint64_t NmiEvents; + /* The 'latched_...' fields below hold values that are sampled upon a write + * to the PERIPHERALS_COUNTER_LATCH address. * One of these will be visible (read only) through an eight-byte aperture. * The purpose of these latched registers is to read 64-bit values one byte * at a time, without having to worry that their content will change along * the way. */ - uint64_t latched_clock_cycles; - uint64_t latched_cpu_instructions; - uint64_t latched_irq_events; - uint64_t latched_nmi_events; - uint64_t latched_wallclock_time; - uint64_t latched_wallclock_time_split; + uint64_t LatchedClockCycles; + uint64_t LatchedCpuInstructions; + uint64_t LatchedIrqEvents; + uint64_t LatchedNmiEvents; + uint64_t LatchedWallclockTime; + uint64_t LatchedWallclockTimeSplit; /* Select which of the six latched registers will be visible. - * This is a single byte, read/write register, accessible via address PERIPHERALS_COUNTER_SELECT. - * If a non-existent latch register is selected, the PERIPHERALS_REGS64 value will be zero. + * This is a single byte, read/write register, accessible via address + * PERIPHERALS_COUNTER_SELECT. If a non-existent latch register is selected, + * the PERIPHERALS_COUNTER_VALUE will be zero. */ - uint8_t visible_latch_register; + uint8_t LatchedValueSelected; } CounterPeripheral; @@ -87,8 +89,8 @@ typedef struct { /* Declare the 'Sim65Peripherals' type and its single instance 'Peripherals'. */ typedef struct { - /* State of the peripherals simulated by sim65. - * Currently, there is only one: the COUNTER peripheral. */ + /* State of the peripherals available in sim65. + * Currently, there is only one peripheral: the Counter. */ CounterPeripheral Counter; } Sim65Peripherals; From eb8ea0f2c41841a5fe44ea1a40027f90d2dda85e Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Thu, 19 Dec 2024 20:57:34 +0100 Subject: [PATCH 2584/2710] Replaced incidental tab by spaces. --- src/sim65/peripherals.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index fbd4159e3..33e206ff3 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -29,7 +29,6 @@ /*****************************************************************************/ - #include <time.h> #include "peripherals.h" @@ -72,7 +71,7 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) /* Wallclock time: number of nanoseconds since 1-1-1970. */ Peripherals.Counter.LatchedWallclockTime = 1000000000u * ts.tv_sec + ts.tv_nsec; /* Wallclock time, split: high word is number of seconds since 1-1-1970, - * low word is number of nanoseconds since the start of that second. */ + * low word is number of nanoseconds since the start of that second. */ Peripherals.Counter.LatchedWallclockTimeSplit = (ts.tv_sec << 32) | ts.tv_nsec; } @@ -105,7 +104,7 @@ uint8_t PeripheralsReadByte (uint8_t Addr) switch (Addr) { /* Handle reads from the Counter peripheral. */ - + case PERIPHERALS_COUNTER_ADDRESS_OFFSET_SELECT: { return Peripherals.Counter.LatchedValueSelected; } From bad2f54f75e6b4688b3ffd20ee4c77115d1feac3 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Thu, 19 Dec 2024 22:35:15 +0100 Subject: [PATCH 2585/2710] Fix memory access order of the JSR instruction. The obvious way to implement JSR for the 6502 is to (a) read the target address, and then (b) push the return address minus one. Or do (b) first, then (a). However, there is a non-obvious case where this conflicts with the actual order of operations that the 6502 does, which is: (a) Load the LSB of the target address. (b) Push the MSB of the return address, minus one. (c) Push the LSB of the return address, minus one. (d) Load the MSB of the target address. This can make a difference in a pretty esoteric case, if the JSR target is located, wholly or in part, inside the stack page (!). This won't happen in normal code but it can happen in specifically constructed examples. To deal with this, we load the LSB and MSB of the target address separately, with the pushing of the return address sandwiched in between, to mimic the order of the bus operations on a real 6502. --- src/sim65/6502.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index cb3270185..bae23d9c0 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -1456,13 +1456,37 @@ static void OPC_6502_1F (void) static void OPC_6502_20 (void) /* Opcode $20: JSR */ { - unsigned Addr; + /* The obvious way to implement JSR for the 6502 is to (a) read the target address, + * and then (b) push the return address minus one. Or do (b) first, then (a). + * + * However, there is a non-obvious case where this conflicts with the actual order + * of operations that the 6502 does, which is: + * + * (a) Load the LSB of the target address. + * (b) Push the MSB of the return address, minus one. + * (c) Push the LSB of the return address, minus one. + * (d) Load the MSB of the target address. + * + * This can make a difference in a pretty esoteric case, if the JSR target is located, + * wholly or in part, inside the stack page (!). This won't happen in normal code + * but it can happen in specifically constructed examples. + * + * To deal with this, we load the LSB and MSB of the target address separately, + * with the pushing of the return address sandwiched in between, to mimic + * the order of the bus operations on a real 6502. + */ + + unsigned AddrLo, AddrHi; + Cycles = 6; - Addr = MemReadWord (Regs.PC+1); - Regs.PC += 2; + Regs.PC += 1; + AddrLo = MemReadByte(Regs.PC); + Regs.PC += 1; PUSH (PCH); PUSH (PCL); - Regs.PC = Addr; + AddrHi = MemReadByte(Regs.PC); + + Regs.PC = AddrLo + (AddrHi << 8); ParaVirtHooks (&Regs); } From b14f883e7339a0edbd734939cf910b2a5838f8b2 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Thu, 19 Dec 2024 22:58:42 +0100 Subject: [PATCH 2586/2710] sim65: changes constant of the unstable "ANE" instruction to comply with 65x02 test suite. ANE (0x8b) is an unstable illegal opcode that depends on a "constant" value that isn't really constant. It varies between machines, with temperature, and so on. Original sim65 behavior was to use the constant value 0xEF. To get the behavior in line with the 65x02 testsuite, we now use the value 0xEE instead, which is also a reasonable choice that can be observed in practice. --- src/sim65/6502.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index cb3270185..166d54e2e 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -969,8 +969,14 @@ static unsigned HaveIRQRequest; } while (0); /* ANE */ +/* An "unstable" illegal opcode that depends on a "constant" value that isn't + * really constant. It varies between machines, with temperature, and so on. + * Original sim65 behavior was to use the constant 0xEF here. To get behavior + * in line with the 65x02 testsuite, we now use the value 0xEE instead, + * which is also a reasonable choice that can be observed in practice. + */ #define ANE(Val) \ - Val = (Regs.AC | 0xEF) & Regs.XR & Val; \ + Val = (Regs.AC | 0xEE) & Regs.XR & Val; \ Regs.AC = Val; \ TEST_SF (Val); \ TEST_ZF (Val) From 8cb941985dec9d7cf275fa29a0ceb0b45da75b3c Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Thu, 19 Dec 2024 23:13:20 +0100 Subject: [PATCH 2587/2710] sim65: tighten 6502 register types After a lot of preparatory work, we are now in position to finally tighten the types of the 6502 registers defined in the CPURegs struct of sim65. All registers were previously defined as bare 'unsigned', leading to subtle bugs where the bits beyond the 8 or 16 "true" bits in the register could become non-zero. Tightening the types of the registers to uint8_t and uint16_t as appropriate gets rid of these subtle bugs once and for all, assisted by the semantics of C when assigning an unsigned value to an unsigned type with less bits: the high-order bits are simply discarded, which is precisely what we'd want to happen. This change cleans up a lot of spurious failures of sim65 against the 65x02 test-set. For the 6502 and 65C02, we're now *functionally* compliant. For timing (i.e., clock cycle counts for each instruction), some work remains. --- src/sim65/6502.c | 10 ++-------- src/sim65/6502.h | 14 ++++++++------ 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index cb3270185..8b16da2b8 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -664,15 +664,12 @@ static unsigned HaveIRQRequest; /* ADC, binary mode (6502 and 65C02) */ -/* TODO: once the Regs fields are properly sized, get rid of the - * "& 0xff" in the Regs.AC asignment. - */ #define ADC_BINARY_MODE(v) \ do { \ const uint8_t op = v; \ const uint8_t OldAC = Regs.AC; \ bool carry = GET_CF(); \ - Regs.AC = (OldAC + op + carry) & 0xff; \ + Regs.AC = (OldAC + op + carry); \ const bool NV = Regs.AC >= 0x80; \ carry = OldAC + op + carry >= 0x100; \ SET_SF(NV); \ @@ -1027,15 +1024,12 @@ static unsigned HaveIRQRequest; TEST_ZF (Val) /* SBC, binary mode (6502 and 65C02) */ -/* TODO: once the Regs fields are properly sized, get rid of the - * "& 0xff" in the Regs.AC asignment. - */ #define SBC_BINARY_MODE(v) \ do { \ const uint8_t op = v; \ const uint8_t OldAC = Regs.AC; \ const bool borrow = !GET_CF(); \ - Regs.AC = (OldAC - op - borrow) & 0xff; \ + Regs.AC = (OldAC - op - borrow); \ const bool NV = Regs.AC >= 0x80; \ SET_SF(NV); \ SET_OF(((OldAC >= 0x80) ^ NV) & ((op < 0x80) ^ NV)); \ diff --git a/src/sim65/6502.h b/src/sim65/6502.h index b6b621823..0f4d066d0 100644 --- a/src/sim65/6502.h +++ b/src/sim65/6502.h @@ -37,6 +37,8 @@ #define _6502_H +#include <stdint.h> + /*****************************************************************************/ /* Data */ @@ -57,12 +59,12 @@ extern CPUType CPU; /* 6502 CPU registers */ typedef struct CPURegs CPURegs; struct CPURegs { - unsigned AC; /* Accumulator */ - unsigned XR; /* X register */ - unsigned YR; /* Y register */ - unsigned SR; /* Status register */ - unsigned SP; /* Stackpointer */ - unsigned PC; /* Program counter */ + uint8_t AC; /* Accumulator */ + uint8_t XR; /* X register */ + uint8_t YR; /* Y register */ + uint8_t SR; /* Status register */ + uint8_t SP; /* Stackpointer */ + uint16_t PC; /* Program counter */ }; /* Current CPU registers */ From 178ab08fe2d090ef5005277cac716754e8d0dd59 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Fri, 20 Dec 2024 21:47:01 +0100 Subject: [PATCH 2588/2710] Test to demonstrate issue #2566. --- test/todo/bug2566.c | 49 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 test/todo/bug2566.c diff --git a/test/todo/bug2566.c b/test/todo/bug2566.c new file mode 100644 index 000000000..29292c3dd --- /dev/null +++ b/test/todo/bug2566.c @@ -0,0 +1,49 @@ + +/* Regression test for https://github.com/cc65/cc65/issues/2566 + * + * The issue was introduced in an innocious-looking commit back in 2020: + * + * https://github.com/cc65/cc65/commit/c3a6b399456937093eda9994f19b7f722731528d + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <stdbool.h> + +typedef struct { + unsigned long Field1; + unsigned long Field2; +} RecordType; + +typedef struct { + char dummy; // -- Offsets the Rec field by 1 byte. + RecordType Rec; +} StructTypeA; + +typedef struct { + RecordType Rec; +} StructTypeB; + +int main(void) +{ + StructTypeA A, *Aptr; + StructTypeB B; + bool ok; + + A.Rec.Field1 = 0x11111111; + A.Rec.Field2 = 0x22222222; + + Aptr = &A; + B.Rec = Aptr->Rec; + + /* These print statements give some clues as to what's going on. */ + /* + printf("A.Rec: %lx, %lx\n", A.Rec.Field1, A.Rec.Field2); + printf("B.Rec: %lx, %lx\n", B.Rec.Field1, B.Rec.Field2); + */ + + ok = (A.Rec.Field1 == B.Rec.Field1 && A.Rec.Field2 == B.Rec.Field2); + + return ok ? EXIT_SUCCESS : EXIT_FAILURE; +} From d064ca424fe2aaea19725ac2cd32d40100ff23c9 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Sun, 22 Dec 2024 19:15:20 +0100 Subject: [PATCH 2589/2710] sim65: implemented missing 65C02 instructions This PR implements support for 32 65C02-specific instructions to sim65: BBRx, BBSx, RMBx, SMBx, with x = 0..7. These instructions are implemented using two macros: * The "ZP_BITOP" macro implements the RMBx and SMBx isntructions. * The "ZP_BIT_BRANCH" macro implements the BBRx abd BBSx instructions. The implementation of these instructions has been verified usingthe 65x02 test suite. --- src/sim65/6502.c | 386 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 341 insertions(+), 45 deletions(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index bfb3f3e9b..1c915e618 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -35,9 +35,8 @@ /*****************************************************************************/ /* Known bugs and limitations of the 65C02 simulation: - * support currently only on the level of 65SC02: - BBRx, BBSx, RMBx, SMBx, WAI, and STP are unsupported -*/ + * the WAI ($CB) and STP ($DB) instructions are unsupported. + */ #include <stdbool.h> #include <stdint.h> @@ -623,14 +622,14 @@ static unsigned HaveIRQRequest; /* 2 x Read-Modify-Write opcode helpers (illegal opcodes) */ /* Execution cycles for 2 x R-M-W opcodes */ -#define RMW2_CY_ZP 5 -#define RMW2_CY_ZPX 6 +#define RMW2_CY_ZP 5 +#define RMW2_CY_ZPX 6 #define RMW2_CY_ZPY 6 -#define RMW2_CY_ABS 6 -#define RMW2_CY_ABSX 7 -#define RMW2_CY_ABSY 7 -#define RMW2_CY_ZPXIND 8 -#define RMW2_CY_ZPINDY 8 +#define RMW2_CY_ABS 6 +#define RMW2_CY_ABSX 7 +#define RMW2_CY_ABSY 7 +#define RMW2_CY_ZPXIND 8 +#define RMW2_CY_ZPINDY 8 /* zp / zp,x / zp,y / abs / abs,x / abs,y / (zp,x) / (zp),y */ #define ILLx2_OP(mode, op) \ @@ -1112,6 +1111,46 @@ static unsigned HaveIRQRequest; +/* Set/reset a specific bit in a zero-page byte. This macro + * macro is used to implement the 65C02 RMBx and SMBx instructions. + */ +#define ZP_BITOP(bitnr, bitval) \ + do { \ + uint8_t zp_address = MemReadByte (Regs.PC + 1); \ + uint8_t zp_value = MemReadByte (zp_address); \ + if (bitval) { \ + zp_value |= (1 << bitnr); \ + } else { \ + zp_value &= ~(1 << bitnr); \ + } \ + MemWriteByte (zp_address, zp_value); \ + Regs.PC += 2; \ + Cycles = 5; \ + } while (0) + +/* Branch depending on the state of a specific bit of a zero page + * address. This macro is used to implement the 65C02 BBRx and + * BBSx instructions. + */ +#define ZP_BIT_BRANCH(bitnr, bitval) \ + do { \ + uint8_t zp_address = MemReadByte (Regs.PC + 1); \ + uint8_t zp_value = MemReadByte (zp_address); \ + int displacement = (int8_t)MemReadByte (Regs.PC + 2); \ + if (((zp_value & (1 << bitnr)) != 0) == bitval) { \ + Regs.PC += 3; \ + uint8_t OldPCH = PCH; \ + Regs.PC += displacement; \ + Cycles = 6; \ + if (PCH != OldPCH) { \ + Cycles += 1; \ + } \ + } else { \ + Regs.PC += 3; \ + Cycles = 5; \ + } \ + } while (0) + /*****************************************************************************/ /* Opcode handling functions */ /*****************************************************************************/ @@ -1204,6 +1243,14 @@ static void OPC_6502_07 (void) +static void OPC_65C02_07 (void) +/* Opcode $07: RMB0 zp */ +{ + ZP_BITOP(0, 0); +} + + + static void OPC_6502_08 (void) /* Opcode $08: PHP */ { @@ -1283,6 +1330,14 @@ static void OPC_6502_0F (void) +static void OPC_65C02_0F (void) +/* Opcode $0F: BBR0 zp, rel */ +{ + ZP_BIT_BRANCH (0, 0); +} + + + static void OPC_6502_10 (void) /* Opcode $10: BPL */ { @@ -1362,6 +1417,14 @@ static void OPC_6502_17 (void) +static void OPC_65C02_17 (void) +/* Opcode $17: RMB1 zp */ +{ + ZP_BITOP(1, 0); +} + + + static void OPC_6502_18 (void) /* Opcode $18: CLC */ { @@ -1453,6 +1516,15 @@ static void OPC_6502_1F (void) + +static void OPC_65C02_1F (void) +/* Opcode $1F: BBR1 zp, rel */ +{ + ZP_BIT_BRANCH (1, 0); +} + + + static void OPC_6502_20 (void) /* Opcode $20: JSR */ { @@ -1541,6 +1613,14 @@ static void OPC_6502_27 (void) +static void OPC_65C02_27 (void) +/* Opcode $27: RMB2 zp */ +{ + ZP_BITOP(2, 0); +} + + + static void OPC_6502_28 (void) /* Opcode $28: PLP */ { @@ -1604,6 +1684,14 @@ static void OPC_6502_2F (void) +static void OPC_65C02_2F (void) +/* Opcode $2F: BBR2 zp, rel */ +{ + ZP_BIT_BRANCH (2, 0); +} + + + static void OPC_6502_30 (void) /* Opcode $30: BMI */ { @@ -1668,6 +1756,14 @@ static void OPC_6502_37 (void) +static void OPC_65C02_37 (void) +/* Opcode $37: RMB3 zp */ +{ + ZP_BITOP(3, 0); +} + + + static void OPC_6502_38 (void) /* Opcode $38: SEC */ { @@ -1744,6 +1840,14 @@ static void OPC_6502_3F (void) +static void OPC_65C02_3F (void) +/* Opcode $3F: BBR3 zp, rel */ +{ + ZP_BIT_BRANCH (3, 0); +} + + + static void OPC_6502_40 (void) /* Opcode $40: RTI */ { @@ -1797,6 +1901,14 @@ static void OPC_6502_47 (void) +static void OPC_65C02_47 (void) +/* Opcode $47: RMB4 zp */ +{ + ZP_BITOP(4, 0); +} + + + static void OPC_6502_48 (void) /* Opcode $48: PHA */ { @@ -1868,6 +1980,14 @@ static void OPC_6502_4F (void) +static void OPC_65C02_4F (void) +/* Opcode $4F: BBR4 zp, rel */ +{ + ZP_BIT_BRANCH (4, 0); +} + + + static void OPC_6502_50 (void) /* Opcode $50: BVC */ { @@ -1924,6 +2044,14 @@ static void OPC_6502_57 (void) +static void OPC_65C02_57 (void) +/* Opcode $57: RMB5 zp */ +{ + ZP_BITOP(5, 0); +} + + + static void OPC_6502_58 (void) /* Opcode $58: CLI */ { @@ -2001,6 +2129,14 @@ static void OPC_6502_5F (void) +static void OPC_65C02_5F (void) +/* Opcode $5F: BBR5 zp, rel */ +{ + ZP_BIT_BRANCH (5, 0); +} + + + static void OPC_6502_60 (void) /* Opcode $60: RTS */ { @@ -2074,6 +2210,14 @@ static void OPC_6502_67 (void) +static void OPC_65C02_67 (void) +/* Opcode $67: RMB6 zp */ +{ + ZP_BITOP(6, 0); +} + + + static void OPC_6502_68 (void) /* Opcode $68: PLA */ { @@ -2187,6 +2331,14 @@ static void OPC_6502_6F (void) +static void OPC_65C02_6F (void) +/* Opcode $6F: BBR6 zp, rel */ +{ + ZP_BIT_BRANCH (6, 0); +} + + + static void OPC_6502_70 (void) /* Opcode $70: BVS */ { @@ -2265,6 +2417,14 @@ static void OPC_6502_77 (void) +static void OPC_65C02_77 (void) +/* Opcode $77: RMB7 zp */ +{ + ZP_BITOP(7, 0); +} + + + static void OPC_6502_78 (void) /* Opcode $78: SEI */ { @@ -2365,6 +2525,14 @@ static void OPC_6502_7F (void) +static void OPC_65C02_7F (void) +/* Opcode $7F: BBR7 zp, rel */ +{ + ZP_BIT_BRANCH (7, 0); +} + + + /* Aliases of opcode $80 */ #define OPC_6502_82 OPC_6502_80 #define OPC_6502_C2 OPC_6502_80 @@ -2435,6 +2603,14 @@ static void OPC_6502_87 (void) +static void OPC_65C02_87 (void) +/* Opcode $87: SMB0 zp */ +{ + ZP_BITOP(0, 1); +} + + + static void OPC_6502_88 (void) /* Opcode $88: DEY */ { @@ -2507,6 +2683,14 @@ static void OPC_6502_8F (void) +static void OPC_65C02_8F (void) +/* Opcode $8F: BBS0 zp, rel */ +{ + ZP_BIT_BRANCH (0, 1); +} + + + static void OPC_6502_90 (void) /* Opcode $90: BCC */ { @@ -2571,6 +2755,14 @@ static void OPC_6502_97 (void) +static void OPC_65C02_97 (void) +/* Opcode $97: SMB1 zp */ +{ + ZP_BITOP(1, 1); +} + + + static void OPC_6502_98 (void) /* Opcode $98: TYA */ { @@ -2641,6 +2833,14 @@ static void OPC_6502_9E (void) +static void OPC_65SC02_9E (void) +/* Opcode $9E: STZ abs,x */ +{ + STO_OP (ABSX, 0); +} + + + static void OPC_6502_9F (void) /* Opcode $9F: SHA abs,y */ { @@ -2649,10 +2849,10 @@ static void OPC_6502_9F (void) -static void OPC_65SC02_9E (void) -/* Opcode $9E: STZ abs,x */ +static void OPC_65C02_9F (void) +/* Opcode $9F: BBS1 zp, rel */ { - STO_OP (ABSX, 0); + ZP_BIT_BRANCH (1, 1); } @@ -2721,6 +2921,14 @@ static void OPC_6502_A7 (void) +static void OPC_65C02_A7 (void) +/* Opcode $A7: SMB2 zp */ +{ + ZP_BITOP(2, 1); +} + + + static void OPC_6502_A8 (void) /* Opcode $A8: TAY */ { @@ -2793,6 +3001,14 @@ static void OPC_6502_AF (void) +static void OPC_65C02_AF (void) +/* Opcode $AF: BBS2 zp, rel */ +{ + ZP_BIT_BRANCH (2, 1); +} + + + static void OPC_6502_B0 (void) /* Opcode $B0: BCS */ { @@ -2857,6 +3073,14 @@ static void OPC_6502_B7 (void) +static void OPC_65C02_B7 (void) +/* Opcode $B7: SMB3 zp */ +{ + ZP_BITOP(3, 1); +} + + + static void OPC_6502_B8 (void) /* Opcode $B8: CLV */ { @@ -2927,6 +3151,14 @@ static void OPC_6502_BF (void) +static void OPC_65C02_BF (void) +/* Opcode $BF: BBS3 zp, rel */ +{ + ZP_BIT_BRANCH (3, 1); +} + + + static void OPC_6502_C0 (void) /* Opcode $C0: CPY #imm */ { @@ -2983,6 +3215,14 @@ static void OPC_6502_C7 (void) +static void OPC_65C02_C7 (void) +/* Opcode $C7: SMB4 zp */ +{ + ZP_BITOP(4, 1); +} + + + static void OPC_6502_C8 (void) /* Opcode $C8: INY */ { @@ -3051,6 +3291,14 @@ static void OPC_6502_CF (void) +static void OPC_65C02_CF (void) +/* Opcode $CF: BBS4 zp, rel */ +{ + ZP_BIT_BRANCH (4, 1); +} + + + static void OPC_6502_D0 (void) /* Opcode $D0: BNE */ { @@ -3107,6 +3355,14 @@ static void OPC_6502_D7 (void) +static void OPC_65C02_D7 (void) +/* Opcode $D7: SMB5 zp */ +{ + ZP_BITOP(5, 1); +} + + + static void OPC_6502_D8 (void) /* Opcode $D8: CLD */ { @@ -3167,6 +3423,14 @@ static void OPC_6502_DF (void) +static void OPC_65C02_DF (void) +/* Opcode $DF: BBS5 zp, rel */ +{ + ZP_BIT_BRANCH (5, 1); +} + + + static void OPC_6502_E0 (void) /* Opcode $E0: CPX #imm */ { @@ -3237,6 +3501,14 @@ static void OPC_6502_E7 (void) +static void OPC_65C02_E7 (void) +/* Opcode $E7: SMB6 zp */ +{ + ZP_BITOP(6, 1); +} + + + static void OPC_6502_E8 (void) /* Opcode $E8: INX */ { @@ -3357,6 +3629,14 @@ static void OPC_6502_EF (void) +static void OPC_65C02_EF (void) +/* Opcode $EF: BBS6 zp, rel */ +{ + ZP_BIT_BRANCH (6, 1); +} + + + static void OPC_6502_F0 (void) /* Opcode $F0: BEQ */ { @@ -3430,6 +3710,14 @@ static void OPC_6502_F7 (void) +static void OPC_65C02_F7 (void) +/* Opcode $F7: SMB7 zp */ +{ + ZP_BITOP(7, 1); +} + + + static void OPC_6502_F8 (void) /* Opcode $F8: SED */ { @@ -3508,6 +3796,14 @@ static void OPC_6502_FF (void) +static void OPC_65C02_FF (void) +/* Opcode $FF: BBS7 zp, rel */ +{ + ZP_BIT_BRANCH (7, 1); +} + + + /*****************************************************************************/ /* Opcode handler tables */ /*****************************************************************************/ @@ -4047,7 +4343,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65SC02_04, OPC_6502_05, OPC_6502_06, - OPC_Illegal, // $07: RMB0 currently unsupported + OPC_65C02_07, OPC_6502_08, OPC_6502_09, OPC_6502_0A, @@ -4055,7 +4351,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65SC02_0C, OPC_6502_0D, OPC_6502_0E, - OPC_Illegal, // $0F: BBR0 currently unsupported + OPC_65C02_0F, OPC_6502_10, OPC_6502_11, OPC_65SC02_12, @@ -4063,7 +4359,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65SC02_14, OPC_6502_15, OPC_6502_16, - OPC_Illegal, // $17: RMB1 currently unsupported + OPC_65C02_17, OPC_6502_18, OPC_6502_19, OPC_65SC02_1A, @@ -4071,7 +4367,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65SC02_1C, OPC_6502_1D, OPC_65C02_1E, - OPC_Illegal, // $1F: BBR1 currently unsupported + OPC_65C02_1F, OPC_6502_20, OPC_6502_21, OPC_65C02_NOP22, // $22 @@ -4079,7 +4375,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_24, OPC_6502_25, OPC_6502_26, - OPC_Illegal, // $27: RMB2 currently unsupported + OPC_65C02_27, OPC_6502_28, OPC_6502_29, OPC_6502_2A, @@ -4087,7 +4383,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_2C, OPC_6502_2D, OPC_6502_2E, - OPC_Illegal, // $2F: BBR2 currently unsupported + OPC_65C02_2F, OPC_6502_30, OPC_6502_31, OPC_65SC02_32, @@ -4095,7 +4391,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65SC02_34, OPC_6502_35, OPC_6502_36, - OPC_Illegal, // $37: RMB3 currently unsupported + OPC_65C02_37, OPC_6502_38, OPC_6502_39, OPC_65SC02_3A, @@ -4103,7 +4399,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65SC02_3C, OPC_6502_3D, OPC_65C02_3E, - OPC_Illegal, // $3F: BBR3 currently unsupported + OPC_65C02_3F, OPC_6502_40, OPC_6502_41, OPC_65C02_NOP22, // $42 @@ -4111,7 +4407,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_44, // $44 OPC_6502_45, OPC_6502_46, - OPC_Illegal, // $47: RMB4 currently unsupported + OPC_65C02_47, OPC_6502_48, OPC_6502_49, OPC_6502_4A, @@ -4119,7 +4415,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_4C, OPC_6502_4D, OPC_6502_4E, - OPC_Illegal, // $4F: BBR4 currently unsupported + OPC_65C02_4F, OPC_6502_50, OPC_6502_51, OPC_65SC02_52, @@ -4127,7 +4423,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_NOP24, // $54 OPC_6502_55, OPC_6502_56, - OPC_Illegal, // $57: RMB5 currently unsupported + OPC_65C02_57, OPC_6502_58, OPC_6502_59, OPC_65SC02_5A, @@ -4135,7 +4431,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_5C, OPC_6502_5D, OPC_65C02_5E, - OPC_Illegal, // $5F: BBR5 currently unsupported + OPC_65C02_5F, OPC_6502_60, OPC_65C02_61, OPC_65C02_NOP22, // $62 @@ -4143,7 +4439,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65SC02_64, OPC_65C02_65, OPC_6502_66, - OPC_Illegal, // $67: RMB6 currently unsupported + OPC_65C02_67, OPC_6502_68, OPC_65C02_69, OPC_6502_6A, @@ -4151,7 +4447,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_6C, OPC_65C02_6D, OPC_6502_6E, - OPC_Illegal, // $6F: BBR6 currently unsupported + OPC_65C02_6F, OPC_6502_70, OPC_65C02_71, OPC_65C02_72, @@ -4159,7 +4455,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65SC02_74, OPC_65C02_75, OPC_6502_76, - OPC_Illegal, // $77: RMB7 currently unsupported + OPC_65C02_77, OPC_6502_78, OPC_65C02_79, OPC_65SC02_7A, @@ -4167,7 +4463,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65SC02_7C, OPC_65C02_7D, OPC_65C02_7E, - OPC_Illegal, // $7F: BBR7 currently unsupported + OPC_65C02_7F, OPC_65SC02_80, OPC_6502_81, OPC_65C02_NOP22, // $82 @@ -4175,7 +4471,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_84, OPC_6502_85, OPC_6502_86, - OPC_Illegal, // $87: SMB0 currently unsupported + OPC_65C02_87, OPC_6502_88, OPC_65SC02_89, OPC_6502_8A, @@ -4183,7 +4479,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_8C, OPC_6502_8D, OPC_6502_8E, - OPC_Illegal, // $8F: BBS0 currently unsupported + OPC_65C02_8F, OPC_6502_90, OPC_6502_91, OPC_65SC02_92, @@ -4191,7 +4487,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_94, OPC_6502_95, OPC_6502_96, - OPC_Illegal, // $97: SMB1 currently unsupported + OPC_65C02_97, OPC_6502_98, OPC_6502_99, OPC_6502_9A, @@ -4199,7 +4495,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65SC02_9C, OPC_6502_9D, OPC_65SC02_9E, - OPC_Illegal, // $9F: BBS1 currently unsupported + OPC_65C02_9F, OPC_6502_A0, OPC_6502_A1, OPC_6502_A2, @@ -4207,7 +4503,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_A4, OPC_6502_A5, OPC_6502_A6, - OPC_Illegal, // $A7: SMB2 currently unsupported + OPC_65C02_A7, OPC_6502_A8, OPC_6502_A9, OPC_6502_AA, @@ -4215,7 +4511,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_AC, OPC_6502_AD, OPC_6502_AE, - OPC_Illegal, // $AF: BBS2 currently unsupported + OPC_65C02_AF, OPC_6502_B0, OPC_6502_B1, OPC_65SC02_B2, @@ -4223,7 +4519,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_B4, OPC_6502_B5, OPC_6502_B6, - OPC_Illegal, // $B7: SMB3 currently unsupported + OPC_65C02_B7, OPC_6502_B8, OPC_6502_B9, OPC_6502_BA, @@ -4231,7 +4527,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_BC, OPC_6502_BD, OPC_6502_BE, - OPC_Illegal, // $BF: BBS3 currently unsupported + OPC_65C02_BF, OPC_6502_C0, OPC_6502_C1, OPC_65C02_NOP22, // $C2 @@ -4239,7 +4535,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_C4, OPC_6502_C5, OPC_6502_C6, - OPC_Illegal, // $C7: SMB4 currently unsupported + OPC_65C02_C7, OPC_6502_C8, OPC_6502_C9, OPC_6502_CA, @@ -4247,7 +4543,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_CC, OPC_6502_CD, OPC_6502_CE, - OPC_Illegal, // $CF: BBS4 currently unsupported + OPC_65C02_CF, OPC_6502_D0, OPC_6502_D1, OPC_65SC02_D2, @@ -4255,7 +4551,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_NOP24, // $D4 OPC_6502_D5, OPC_6502_D6, - OPC_Illegal, // $D7: SMB5 currently unsupported + OPC_65C02_D7, OPC_6502_D8, OPC_6502_D9, OPC_65SC02_DA, @@ -4263,7 +4559,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_NOP34, // $DC OPC_6502_DD, OPC_6502_DE, - OPC_Illegal, // $DF: BBS5 currently unsupported + OPC_65C02_DF, OPC_6502_E0, OPC_65C02_E1, OPC_65C02_NOP22, // $E2 @@ -4271,7 +4567,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_E4, OPC_65C02_E5, OPC_6502_E6, - OPC_Illegal, // $E7: SMB6 currently unsupported + OPC_65C02_E7, OPC_6502_E8, OPC_65C02_E9, OPC_6502_EA, @@ -4279,7 +4575,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_EC, OPC_65C02_ED, OPC_6502_EE, - OPC_Illegal, // $EF: BBS6 currently unsupported + OPC_65C02_EF, OPC_6502_F0, OPC_65C02_F1, OPC_65C02_F2, @@ -4287,7 +4583,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_NOP24, // $F4 OPC_65C02_F5, OPC_6502_F6, - OPC_Illegal, // $F7: SMB7 currently unsupported + OPC_65C02_F7, OPC_6502_F8, OPC_65C02_F9, OPC_65SC02_FA, @@ -4295,7 +4591,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_NOP34, // $FC OPC_65C02_FD, OPC_6502_FE, - OPC_Illegal, // $FF: BBS7 currently unsupported + OPC_65C02_FF }; From fbf3bde97c1e4d33df72d50db9ff8004afcfa83b Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Sun, 22 Dec 2024 19:48:41 +0100 Subject: [PATCH 2590/2710] sim65: properly implement 5 'illegal' 6502X opcodes. This PR fixes the implementation of 5 illegal opcodes in the 6502, which the 6502X supports: * $93 SHA (zp),y * $9B TAS abs,y * $9C SHY abs,x * $9E SHX abs,x * $9F SHA abs,y The common denominator of the previous implementation was that it didn't correctly handle the case when the Y or X indexing induced a page crossing. In those cases, the effective address calculation of the instructions becomes truly messed up (with the high byte of the address equal to the value being written). The correctness of the implementations in this PR was verified using the 65x02 test suite, and corresponds to a (detailed) reading of the "No More Secrets" document. Stylistically, there is room for improvement in these implementations, specifically in factoring out common behavior into macros. However, for now the "explicit" coding style will suffice. It is clear enough, and we want to reach a situation soon where the sim65 code is able to pass the full '65x02' testsuite. Once we get to that point, we can refactor this code with a lot more confidence, since we will have the benefit of a working exhaustive test to make sure we don't break stuff. --- src/sim65/6502.c | 72 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 67 insertions(+), 5 deletions(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index bfb3f3e9b..fe3489d85 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -2534,7 +2534,20 @@ static void OPC_65SC02_92 (void) static void OPC_6502_93 (void) /* Opcode $93: SHA (zp),y */ { - STO_CB (ZPINDY, SHA); + ++Regs.PC; + uint8_t zp_ptr_lo = MemReadByte(Regs.PC); + ++Regs.PC; + uint8_t zp_ptr_hi = zp_ptr_lo + 1; + uint8_t baselo = MemReadByte(zp_ptr_lo); + uint8_t basehi = MemReadByte(zp_ptr_hi); + uint8_t basehi_incremented = basehi + 1; + uint8_t write_value = Regs.AC & Regs.XR & basehi_incremented; + uint8_t write_address_lo = (baselo + Regs.YR); + bool pagecross = (baselo + Regs.YR) > 0xff; + uint8_t write_address_hi = pagecross ? write_value : basehi; + uint16_t write_address = write_address_lo + (write_address_hi << 8); + MemWriteByte(write_address, write_value); + Cycles=6; } @@ -2604,7 +2617,20 @@ static void OPC_6502_9A (void) static void OPC_6502_9B (void) /* Opcode $9B: TAS abs,y */ { - STO_CB (ABSY, TAS); + ++Regs.PC; + uint8_t baselo = MemReadByte(Regs.PC); + ++Regs.PC; + uint8_t basehi = MemReadByte(Regs.PC); + ++Regs.PC; + uint8_t basehi_incremented = basehi + 1; + uint8_t write_value = Regs.AC & Regs.XR & basehi_incremented; + uint8_t write_address_lo = (baselo + Regs.YR); + bool pagecross = (baselo + Regs.YR) > 0xff; + uint8_t write_address_hi = pagecross ? write_value : basehi; + uint16_t write_address = write_address_lo + (write_address_hi << 8); + MemWriteByte(write_address, write_value); + Regs.SP = Regs.AC & Regs.XR; + Cycles=5; } @@ -2612,7 +2638,19 @@ static void OPC_6502_9B (void) static void OPC_6502_9C (void) /* Opcode $9D: SHY abs,x */ { - STO_OP (ABSX, Regs.YR & ((address >> 8) + 1)); + ++Regs.PC; + uint8_t baselo = MemReadByte(Regs.PC); + ++Regs.PC; + uint8_t basehi = MemReadByte(Regs.PC); + ++Regs.PC; + uint8_t basehi_incremented = basehi + 1; + uint8_t write_value = Regs.YR & basehi_incremented; + uint8_t write_address_lo = (baselo + Regs.XR); + bool pagecross = (baselo + Regs.XR) > 0xff; + uint8_t write_address_hi = pagecross ? write_value : basehi; + uint16_t write_address = write_address_lo + (write_address_hi << 8); + MemWriteByte(write_address, write_value); + Cycles=5; } @@ -2636,7 +2674,19 @@ static void OPC_6502_9D (void) static void OPC_6502_9E (void) /* Opcode $9E: SHX abs,x */ { - STO_OP (ABSY, Regs.XR & ((address >> 8) + 1)); + ++Regs.PC; + uint8_t baselo = MemReadByte(Regs.PC); + ++Regs.PC; + uint8_t basehi = MemReadByte(Regs.PC); + ++Regs.PC; + uint8_t basehi_incremented = basehi + 1; + uint8_t write_value = Regs.XR & basehi_incremented; + uint8_t write_address_lo = (baselo + Regs.YR); + bool pagecross = (baselo + Regs.YR) > 0xff; + uint8_t write_address_hi = pagecross ? write_value : basehi; + uint16_t write_address = write_address_lo + (write_address_hi << 8); + MemWriteByte(write_address, write_value); + Cycles=5; } @@ -2644,7 +2694,19 @@ static void OPC_6502_9E (void) static void OPC_6502_9F (void) /* Opcode $9F: SHA abs,y */ { - STO_CB (ABSY, SHA); + ++Regs.PC; + uint8_t baselo = MemReadByte(Regs.PC); + ++Regs.PC; + uint8_t basehi = MemReadByte(Regs.PC); + ++Regs.PC; + uint8_t basehi_incremented = basehi + 1; + uint8_t write_value = Regs.AC & Regs.XR & basehi_incremented; + uint8_t write_address_lo = (baselo + Regs.YR); + bool pagecross = (baselo + Regs.YR) > 0xff; + uint8_t write_address_hi = pagecross ? write_value : basehi; + uint16_t write_address = write_address_lo + (write_address_hi << 8); + MemWriteByte(write_address, write_value); + Cycles=5; } From 7980b81ddbb2c3c5e538395f8d01d8b4c2cf1e39 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Tue, 24 Dec 2024 09:24:02 +0100 Subject: [PATCH 2591/2710] sim65: Fix instruction timings for 6502 and 65C02. This PR fixes all discrepancies of sim65 instruction timings, for both the 6502 and the 65C02 processors. The timings as implemented in this PR have been verified against actual hardware (Atari 800 XL for 6502; and WDC 65C02 for 65C02). These timings can also be verified against the 65x02 test suite. However, in this case, a single discrepancy arises; the 65x02 testsuite suggests that the 65C02 opcode 0x5c should take 4 clocks. However, tests on a hardware 65C02 have conclusively shown that this instruction takes 8 clock cycles. The 8 clock cycles duration for the 65C02 0xfc opcode is also confirmed by other sources, e.g. Section 9 of http://www.6502.org/tutorials/65c02opcodes.html. This test makes sim65 correct both in terms of functionality (all opcodes now do what they do on hardware) and in terms of timing (all instructions take as long as they would on real hardware). The one discrepancy that remains, is that on a real 6502/65C02, some instructions issue R or W cycles on the bus while the instruction processing is being done. Those spurious bus cycles are not replicated in sim65. Sim65 is thus an instruction-level simulator, rather than a bus-cycle level simulator. In other words, while the clock cycle counts for each instruction are now correct, not all clock cycles are individually simulated. --- src/sim65/6502.c | 98 ++++++++++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 41 deletions(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index b891bd3e8..6d83ef07b 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -579,6 +579,10 @@ static unsigned HaveIRQRequest; #define STO_CY_ZPINDY 6 #define STO_CY_ZPIND 5 +#define STO_CY_ABSX_NP STO_CY_ABSX +#define STO_CY_ABSY_NP STO_CY_ABSY +#define STO_CY_ZPINDY_NP STO_CY_ZPINDY + /* zp / zp,x / zp,y / abs / abs,x / abs,y / (zp,x) / (zp),y / (zp) */ #define STO_OP(mode, op) \ unsigned address; \ @@ -599,13 +603,11 @@ static unsigned HaveIRQRequest; /* Execution cycles for R-M-W opcodes */ #define RMW_CY_ZP 5 #define RMW_CY_ZPX 6 -#define RMW_CY_ZPY 6 #define RMW_CY_ABS 6 #define RMW_CY_ABSX 7 #define RMW_CY_ABSY 7 -#define RMW_CY_ZPXIND 6 -#define RMW_CY_ZPINDY 5 -#define RMW_CY_ZPIND 5 +#define RMW_CY_ZPXIND 8 +#define RMW_CY_ZPINDY 8 #define RMW_CY_ABSX_NP RMW_CY_ABSX #define RMW_CY_ABSY_NP RMW_CY_ABSY @@ -624,13 +626,16 @@ static unsigned HaveIRQRequest; /* Execution cycles for 2 x R-M-W opcodes */ #define RMW2_CY_ZP 5 #define RMW2_CY_ZPX 6 -#define RMW2_CY_ZPY 6 #define RMW2_CY_ABS 6 #define RMW2_CY_ABSX 7 #define RMW2_CY_ABSY 7 #define RMW2_CY_ZPXIND 8 #define RMW2_CY_ZPINDY 8 +#define RMW2_CY_ZPINDY_NP RMW2_CY_ZPINDY +#define RMW2_CY_ABSY_NP RMW2_CY_ABSY +#define RMW2_CY_ABSX_NP RMW2_CY_ABSX + /* zp / zp,x / zp,y / abs / abs,x / abs,y / (zp,x) / (zp),y */ #define ILLx2_OP(mode, op) \ unsigned address; \ @@ -1365,7 +1370,7 @@ static void OPC_65SC02_12 (void) static void OPC_6502_13 (void) /* Opcode $03: SLO (zp),y */ { - ILLx2_OP (ZPINDY, SLO); + ILLx2_OP (ZPINDY_NP, SLO); } @@ -1456,7 +1461,7 @@ static void OPC_65SC02_1A (void) static void OPC_6502_1B (void) /* Opcode $1B: SLO abs,y */ { - ILLx2_OP (ABSY, SLO); + ILLx2_OP (ABSY_NP, SLO); } @@ -1495,7 +1500,7 @@ static void OPC_6502_1D (void) static void OPC_6502_1E (void) /* Opcode $1E: ASL abs,x */ { - MEM_OP (ABSX, ASL); + MEM_OP (ABSX_NP, ASL); } @@ -1503,7 +1508,8 @@ static void OPC_6502_1E (void) static void OPC_65C02_1E (void) /* Opcode $1E: ASL abs,x */ { - MEM_OP (ABSX_NP, ASL); + MEM_OP (ABSX, ASL); + --Cycles; } @@ -1511,12 +1517,11 @@ static void OPC_65C02_1E (void) static void OPC_6502_1F (void) /* Opcode $1F: SLO abs,x */ { - ILLx2_OP (ABSX, SLO); + ILLx2_OP (ABSX_NP, SLO); } - static void OPC_65C02_1F (void) /* Opcode $1F: BBR1 zp, rel */ { @@ -1719,7 +1724,7 @@ static void OPC_65SC02_32 (void) static void OPC_6502_33 (void) /* Opcode $33: RLA (zp),y */ { - ILLx2_OP (ZPINDY, RLA); + ILLx2_OP (ZPINDY_NP, RLA); } @@ -1795,7 +1800,7 @@ static void OPC_65SC02_3A (void) static void OPC_6502_3B (void) /* Opcode $3B: RLA abs,y */ { - ILLx2_OP (ABSY, RLA); + ILLx2_OP (ABSY_NP, RLA); } @@ -1819,7 +1824,7 @@ static void OPC_6502_3D (void) static void OPC_6502_3E (void) /* Opcode $3E: ROL abs,x */ { - MEM_OP (ABSX, ROL); + MEM_OP (ABSX_NP, ROL); } @@ -1827,15 +1832,16 @@ static void OPC_6502_3E (void) static void OPC_65C02_3E (void) /* Opcode $3E: ROL abs,x */ { - MEM_OP (ABSX_NP, ROL); + MEM_OP (ABSX, ROL); + --Cycles; } static void OPC_6502_3F (void) -/* Opcode $3B: RLA abs,x */ +/* Opcode $3F: RLA abs,x */ { - ILLx2_OP (ABSX, RLA); + ILLx2_OP (ABSX_NP, RLA); } @@ -2015,7 +2021,7 @@ static void OPC_65SC02_52 (void) static void OPC_6502_53 (void) /* Opcode $43: SRE (zp),y */ { - ILLx2_OP (ZPINDY, SRE); + ILLx2_OP (ZPINDY_NP, SRE); } @@ -2083,7 +2089,7 @@ static void OPC_65SC02_5A (void) static void OPC_6502_5B (void) /* Opcode $5B: SRE abs,y */ { - ILLx2_OP (ABSY, SRE); + ILLx2_OP (ABSY_NP, SRE); } @@ -2091,6 +2097,14 @@ static void OPC_6502_5B (void) static void OPC_65C02_5C (void) /* Opcode $5C: 'Absolute' 8 cycle NOP */ { + /* This instruction takes 8 cycles, as per the following sources: + * + * - http://www.6502.org/tutorials/65c02opcodes.html + * - Tests on a WDC 65C02 in hardware. + * + * The 65x02 testsuite however claims that this instruction takes 4 cycles. + * See issue: https://github.com/SingleStepTests/65x02/issues/12 + */ Cycles = 8; Regs.PC += 3; } @@ -2108,7 +2122,7 @@ static void OPC_6502_5D (void) static void OPC_6502_5E (void) /* Opcode $5E: LSR abs,x */ { - MEM_OP (ABSX, LSR); + MEM_OP (ABSX_NP, LSR); } @@ -2116,7 +2130,8 @@ static void OPC_6502_5E (void) static void OPC_65C02_5E (void) /* Opcode $5E: LSR abs,x */ { - MEM_OP (ABSX_NP, LSR); + MEM_OP (ABSX, LSR); + --Cycles; } @@ -2124,7 +2139,7 @@ static void OPC_65C02_5E (void) static void OPC_6502_5F (void) /* Opcode $5F: SRE abs,x */ { - ILLx2_OP (ABSX, SRE); + ILLx2_OP (ABSX_NP, SRE); } @@ -2290,8 +2305,8 @@ static void OPC_6502_6C (void) static void OPC_65C02_6C (void) /* Opcode $6C: JMP (ind) */ { - /* 6502 bug fixed here */ - Cycles = 5; + /* The 6502 bug is fixed on the 65C02, at the cost of an extra cycle. */ + Cycles = 6; Regs.PC = MemReadWord (MemReadWord (Regs.PC+1)); ParaVirtHooks (&Regs); @@ -2374,7 +2389,7 @@ static void OPC_65C02_72 (void) static void OPC_6502_73 (void) /* Opcode $73: RRA (zp),y */ { - ILLx2_OP (ZPINDY, RRA); + ILLx2_OP (ZPINDY_NP, RRA); } @@ -2466,7 +2481,7 @@ static void OPC_65SC02_7A (void) static void OPC_6502_7B (void) /* Opcode $7B: RRA abs,y */ { - ILLx2_OP (ABSY, RRA); + ILLx2_OP (ABSY_NP, RRA); } @@ -2504,7 +2519,7 @@ static void OPC_65C02_7D (void) static void OPC_6502_7E (void) /* Opcode $7E: ROR abs,x */ { - MEM_OP (ABSX, ROR); + MEM_OP (ABSX_NP, ROR); } @@ -2512,7 +2527,8 @@ static void OPC_6502_7E (void) static void OPC_65C02_7E (void) /* Opcode $7E: ROR abs,x */ { - MEM_OP (ABSX_NP, ROR); + MEM_OP (ABSX, ROR); + --Cycles; } @@ -2520,7 +2536,7 @@ static void OPC_65C02_7E (void) static void OPC_6502_7F (void) /* Opcode $7F: RRA abs,x */ { - ILLx2_OP (ABSX, RRA); + ILLx2_OP (ABSX_NP, RRA); } @@ -2702,7 +2718,7 @@ static void OPC_6502_90 (void) static void OPC_6502_91 (void) /* Opcode $91: sta (zp),y */ { - STO_OP (ZPINDY, Regs.AC); + STO_OP (ZPINDY_NP, Regs.AC); } @@ -2791,7 +2807,7 @@ static void OPC_6502_98 (void) static void OPC_6502_99 (void) /* Opcode $99: STA abs,y */ { - STO_OP (ABSY, Regs.AC); + STO_OP (ABSY_NP, Regs.AC); } @@ -2858,7 +2874,7 @@ static void OPC_65SC02_9C (void) static void OPC_6502_9D (void) /* Opcode $9D: STA abs,x */ { - STO_OP (ABSX, Regs.AC); + STO_OP (ABSX_NP, Regs.AC); } @@ -2886,7 +2902,7 @@ static void OPC_6502_9E (void) static void OPC_65SC02_9E (void) /* Opcode $9E: STZ abs,x */ { - STO_OP (ABSX, 0); + STO_OP (ABSX_NP, 0); } @@ -3388,7 +3404,7 @@ static void OPC_65SC02_D2 (void) static void OPC_6502_D3 (void) /* Opcode $D3: DCP (zp),y */ { - MEM_OP (ZPINDY, DCP); + MEM_OP (ZPINDY_NP, DCP); } @@ -3456,7 +3472,7 @@ static void OPC_65SC02_DA (void) static void OPC_6502_DB (void) /* Opcode $DB: DCP abs,y */ { - MEM_OP (ABSY, DCP); + MEM_OP (ABSY_NP, DCP); } @@ -3472,7 +3488,7 @@ static void OPC_6502_DD (void) static void OPC_6502_DE (void) /* Opcode $DE: DEC abs,x */ { - MEM_OP (ABSX, DEC); + MEM_OP (ABSX_NP, DEC); } @@ -3480,7 +3496,7 @@ static void OPC_6502_DE (void) static void OPC_6502_DF (void) /* Opcode $DF: DCP abs,x */ { - MEM_OP (ABSX, DCP); + MEM_OP (ABSX_NP, DCP); } @@ -3735,7 +3751,7 @@ static void OPC_65C02_F2 (void) static void OPC_6502_F3 (void) /* Opcode $F3: ISC (zp),y */ { - MEM_OP (ZPINDY, ISC); + MEM_OP (ZPINDY_NP, ISC); } @@ -3821,7 +3837,7 @@ static void OPC_65SC02_FA (void) static void OPC_6502_FB (void) /* Opcode $FB: ISC abs,y */ { - MEM_OP (ABSY, ISC); + MEM_OP (ABSY_NP, ISC); } @@ -3845,7 +3861,7 @@ static void OPC_65C02_FD (void) static void OPC_6502_FE (void) /* Opcode $FE: INC abs,x */ { - MEM_OP (ABSX, INC); + MEM_OP (ABSX_NP, INC); } @@ -3853,7 +3869,7 @@ static void OPC_6502_FE (void) static void OPC_6502_FF (void) /* Opcode $FF: ISC abs,x */ { - MEM_OP (ABSX, ISC); + MEM_OP (ABSX_NP, ISC); } From e149d1dcf69278a47b9afdbc027cc5a3e2e819a9 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Tue, 24 Dec 2024 11:14:30 +0100 Subject: [PATCH 2592/2710] Disable the use of clock_gettime(), to see if this fixes the CC65 CI builds. --- src/sim65/peripherals.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 33e206ff3..516a827b0 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -61,6 +61,7 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) /* A write to the "latch" register performs a simultaneous latch of all registers. */ /* Latch the current wallclock time first. */ +#if 0 struct timespec ts; int result = clock_gettime(CLOCK_REALTIME, &ts); if (result != 0) { @@ -74,6 +75,11 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) * low word is number of nanoseconds since the start of that second. */ Peripherals.Counter.LatchedWallclockTimeSplit = (ts.tv_sec << 32) | ts.tv_nsec; } +#else + /* Temporarily skip call to clock_gettime() to check that we can build for Windows */ + Peripherals.Counter.LatchedWallclockTime = 0xffffffffffffffff; + Peripherals.Counter.LatchedWallclockTimeSplit = 0xffffffffffffffff; +#endif /* Latch the counters that reflect the state of the processor. */ Peripherals.Counter.LatchedClockCycles = Peripherals.Counter.ClockCycles; From d512954fe9ef8299d8982cf8f1dbb37d3f81787d Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Tue, 24 Dec 2024 11:23:05 +0100 Subject: [PATCH 2593/2710] Added peripherals.c and peripherals.h to sim65.vcxproj --- src/sim65.vcxproj | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/sim65.vcxproj b/src/sim65.vcxproj index 7bc489398..b5b642d02 100644 --- a/src/sim65.vcxproj +++ b/src/sim65.vcxproj @@ -86,6 +86,7 @@ <ClInclude Include="sim65\error.h" /> <ClInclude Include="sim65\memory.h" /> <ClInclude Include="sim65\paravirt.h" /> + <ClInclude Include="sim65\peripherals.h" /> </ItemGroup> <ItemGroup> <ClCompile Include="sim65\6502.c" /> @@ -93,8 +94,9 @@ <ClCompile Include="sim65\main.c" /> <ClCompile Include="sim65\memory.c" /> <ClCompile Include="sim65\paravirt.c" /> + <ClInclude Include="sim65\peripherals.c" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> </ImportGroup> -</Project> \ No newline at end of file +</Project> From 073606b858f9858571f5d02028538c24484733c7 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Tue, 24 Dec 2024 11:30:34 +0100 Subject: [PATCH 2594/2710] Trying re-ordering of dependencies to get the Windows version to compile. --- src/sim65.vcxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sim65.vcxproj b/src/sim65.vcxproj index b5b642d02..46260e052 100644 --- a/src/sim65.vcxproj +++ b/src/sim65.vcxproj @@ -82,19 +82,19 @@ </Link> </ItemDefinitionGroup> <ItemGroup> + <ClInclude Include="sim65\peripherals.h" /> <ClInclude Include="sim65\6502.h" /> <ClInclude Include="sim65\error.h" /> <ClInclude Include="sim65\memory.h" /> <ClInclude Include="sim65\paravirt.h" /> - <ClInclude Include="sim65\peripherals.h" /> </ItemGroup> <ItemGroup> + <ClInclude Include="sim65\peripherals.c" /> <ClCompile Include="sim65\6502.c" /> <ClCompile Include="sim65\error.c" /> <ClCompile Include="sim65\main.c" /> <ClCompile Include="sim65\memory.c" /> <ClCompile Include="sim65\paravirt.c" /> - <ClInclude Include="sim65\peripherals.c" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> From ca76db1ee4402c3c54ae41146aef0aee4c070f36 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Tue, 24 Dec 2024 11:59:52 +0100 Subject: [PATCH 2595/2710] peripherals.c now at the back of the dependency list. --- src/sim65.vcxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sim65.vcxproj b/src/sim65.vcxproj index 46260e052..b5b642d02 100644 --- a/src/sim65.vcxproj +++ b/src/sim65.vcxproj @@ -82,19 +82,19 @@ </Link> </ItemDefinitionGroup> <ItemGroup> - <ClInclude Include="sim65\peripherals.h" /> <ClInclude Include="sim65\6502.h" /> <ClInclude Include="sim65\error.h" /> <ClInclude Include="sim65\memory.h" /> <ClInclude Include="sim65\paravirt.h" /> + <ClInclude Include="sim65\peripherals.h" /> </ItemGroup> <ItemGroup> - <ClInclude Include="sim65\peripherals.c" /> <ClCompile Include="sim65\6502.c" /> <ClCompile Include="sim65\error.c" /> <ClCompile Include="sim65\main.c" /> <ClCompile Include="sim65\memory.c" /> <ClCompile Include="sim65\paravirt.c" /> + <ClInclude Include="sim65\peripherals.c" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> From 1096023e00b427bbee2cdf5d29990f636c3dc9c3 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Thu, 26 Dec 2024 22:48:42 +0100 Subject: [PATCH 2596/2710] Update src/sim65.vcxproj Co-authored-by: Matteo Pompili <6500688+matpompili@users.noreply.github.com> --- src/sim65.vcxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sim65.vcxproj b/src/sim65.vcxproj index b5b642d02..07a9f7fb5 100644 --- a/src/sim65.vcxproj +++ b/src/sim65.vcxproj @@ -94,7 +94,7 @@ <ClCompile Include="sim65\main.c" /> <ClCompile Include="sim65\memory.c" /> <ClCompile Include="sim65\paravirt.c" /> - <ClInclude Include="sim65\peripherals.c" /> + <ClCompile Include="sim65\peripherals.c" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> From 9978600d28cc9e408ce0bf939cd8b45c5e1fcf6b Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Thu, 26 Dec 2024 22:55:32 +0100 Subject: [PATCH 2597/2710] Fixed erroneous ClInclude to ClCompile (thanks Matteo Pompili!) --- src/sim65.vcxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sim65.vcxproj b/src/sim65.vcxproj index b5b642d02..07a9f7fb5 100644 --- a/src/sim65.vcxproj +++ b/src/sim65.vcxproj @@ -94,7 +94,7 @@ <ClCompile Include="sim65\main.c" /> <ClCompile Include="sim65\memory.c" /> <ClCompile Include="sim65\paravirt.c" /> - <ClInclude Include="sim65\peripherals.c" /> + <ClCompile Include="sim65\peripherals.c" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> From 61bedbdd55bcd8ede1b1488cba5cd4bd76e3d77b Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Thu, 26 Dec 2024 22:55:52 +0100 Subject: [PATCH 2598/2710] Added explicit cast to uint8_t, to make the Cisual Studio compiler happy. --- src/sim65/peripherals.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 516a827b0..d48cf7137 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -137,7 +137,7 @@ uint8_t PeripheralsReadByte (uint8_t Addr) default: Value = 0; /* Reading from a non-existent latch register will yield 0. */ } /* Return the desired byte of the latched counter. 0==LSB, 7==MSB. */ - return Value >> (ByteIndex * 8); + return (uint8_t)(Value >> (ByteIndex * 8)); } /* Handle reads from unused peripheral and write-only addresses. */ From a90640230855b6f33057ae4a3ef7c3537cf9e597 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Thu, 26 Dec 2024 23:15:41 +0100 Subject: [PATCH 2599/2710] Re-enabling the clock_gettime() code path. --- src/sim65/peripherals.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index d48cf7137..90156aa17 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -61,7 +61,8 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) /* A write to the "latch" register performs a simultaneous latch of all registers. */ /* Latch the current wallclock time first. */ -#if 0 +#if 1 + /* Enabling clock_gettime dependent codepath (expected to fail at least on Windows build.) */ struct timespec ts; int result = clock_gettime(CLOCK_REALTIME, &ts); if (result != 0) { From 8c40568566a8a27987c6208f34c2bc6644d84793 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Thu, 26 Dec 2024 23:32:00 +0100 Subject: [PATCH 2600/2710] Made wallclock time fail on Windows (due to lack of clock_gettime), succeed everywhere else. --- src/sim65/peripherals.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 90156aa17..ac11d7b73 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -58,28 +58,30 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) /* Handle writes to the Counter peripheral. */ case PERIPHERALS_COUNTER_ADDRESS_OFFSET_LATCH: { + /* A write to the "latch" register performs a simultaneous latch of all registers. */ - /* Latch the current wallclock time first. */ -#if 1 - /* Enabling clock_gettime dependent codepath (expected to fail at least on Windows build.) */ + /* Latch the current wallclock time first (if possible). */ + +#if defined(_WIN32) + /* clock_gettime() is not available on Windows. Report max uint64 value for both fields. */ + Peripherals.Counter.LatchedWallclockTime = 0xffffffffffffffff; + Peripherals.Counter.LatchedWallclockTimeSplit = 0xffffffffffffffff; +#else + /* Other targets are presumed to have it. */ struct timespec ts; int result = clock_gettime(CLOCK_REALTIME, &ts); if (result != 0) { - /* Unable to read time. Report max uint64 value for both fields. */ + /* Unable to get time. Report max uint64 value for both fields. */ Peripherals.Counter.LatchedWallclockTime = 0xffffffffffffffff; Peripherals.Counter.LatchedWallclockTimeSplit = 0xffffffffffffffff; } else { /* Wallclock time: number of nanoseconds since 1-1-1970. */ - Peripherals.Counter.LatchedWallclockTime = 1000000000u * ts.tv_sec + ts.tv_nsec; + Peripherals.Counter.LatchedWallclockTime = 1000000000 * (uint64_t)ts.tv_sec + ts.tv_nsec; /* Wallclock time, split: high word is number of seconds since 1-1-1970, * low word is number of nanoseconds since the start of that second. */ - Peripherals.Counter.LatchedWallclockTimeSplit = (ts.tv_sec << 32) | ts.tv_nsec; + Peripherals.Counter.LatchedWallclockTimeSplit = ((uint64_t)ts.tv_sec << 32) | ts.tv_nsec; } -#else - /* Temporarily skip call to clock_gettime() to check that we can build for Windows */ - Peripherals.Counter.LatchedWallclockTime = 0xffffffffffffffff; - Peripherals.Counter.LatchedWallclockTimeSplit = 0xffffffffffffffff; #endif /* Latch the counters that reflect the state of the processor. */ From 1f9e731fc9b16869ff466c77dba7dd7e344b802a Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Thu, 26 Dec 2024 23:48:34 +0100 Subject: [PATCH 2601/2710] Try if gettimeofday() will work in Windows. --- src/sim65/peripherals.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index ac11d7b73..143f72e76 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -29,6 +29,7 @@ /*****************************************************************************/ +#include <sys/time.h> #include <time.h> #include "peripherals.h" @@ -65,8 +66,19 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) #if defined(_WIN32) /* clock_gettime() is not available on Windows. Report max uint64 value for both fields. */ - Peripherals.Counter.LatchedWallclockTime = 0xffffffffffffffff; - Peripherals.Counter.LatchedWallclockTimeSplit = 0xffffffffffffffff; + struct timeval tv; + int result = gettimeofday(&tv, NULL); + if (result != 0) { + /* Unable to get time. Report max uint64 value for both fields. */ + Peripherals.Counter.LatchedWallclockTime = 0xffffffffffffffff; + Peripherals.Counter.LatchedWallclockTimeSplit = 0xffffffffffffffff; + } else { + /* Wallclock time: number of nanoseconds since 1-1-1970. */ + Peripherals.Counter.LatchedWallclockTime = 1000000000 * (uint64_t)ts.tv_sec + 1000 * ts.tv_usec; + /* Wallclock time, split: high word is number of seconds since 1-1-1970, + * low word is number of nanoseconds since the start of that second. */ + Peripherals.Counter.LatchedWallclockTimeSplit = ((uint64_t)ts.tv_sec << 32) | (1000 * ts.tv_usec); + } #else /* Other targets are presumed to have it. */ struct timespec ts; From ae3106af4aa84994f1021d841b4a52d35734edff Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Fri, 27 Dec 2024 00:04:06 +0100 Subject: [PATCH 2602/2710] Windows version now uses timespec_get() as a substitute for clock_gettime(). --- src/sim65/peripherals.c | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 143f72e76..0ad11a5bf 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -28,8 +28,7 @@ /* */ /*****************************************************************************/ - -#include <sys/time.h> +#include <stdbool.h> #include <time.h> #include "peripherals.h" @@ -64,37 +63,25 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) /* Latch the current wallclock time first (if possible). */ -#if defined(_WIN32) - /* clock_gettime() is not available on Windows. Report max uint64 value for both fields. */ - struct timeval tv; - int result = gettimeofday(&tv, NULL); - if (result != 0) { - /* Unable to get time. Report max uint64 value for both fields. */ - Peripherals.Counter.LatchedWallclockTime = 0xffffffffffffffff; - Peripherals.Counter.LatchedWallclockTimeSplit = 0xffffffffffffffff; - } else { - /* Wallclock time: number of nanoseconds since 1-1-1970. */ - Peripherals.Counter.LatchedWallclockTime = 1000000000 * (uint64_t)ts.tv_sec + 1000 * ts.tv_usec; - /* Wallclock time, split: high word is number of seconds since 1-1-1970, - * low word is number of nanoseconds since the start of that second. */ - Peripherals.Counter.LatchedWallclockTimeSplit = ((uint64_t)ts.tv_sec << 32) | (1000 * ts.tv_usec); - } -#else - /* Other targets are presumed to have it. */ struct timespec ts; - int result = clock_gettime(CLOCK_REALTIME, &ts); - if (result != 0) { - /* Unable to get time. Report max uint64 value for both fields. */ - Peripherals.Counter.LatchedWallclockTime = 0xffffffffffffffff; - Peripherals.Counter.LatchedWallclockTimeSplit = 0xffffffffffffffff; - } else { + +#if defined(_WIN32) + /* clock_gettime() is not available on Windows. Use timespec_get() instead. */ + bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; +#else + bool time_valid = clock_gettime(CLOCK_REALTIME, &ts) == 0; +#endif + if (time_valid) { /* Wallclock time: number of nanoseconds since 1-1-1970. */ Peripherals.Counter.LatchedWallclockTime = 1000000000 * (uint64_t)ts.tv_sec + ts.tv_nsec; /* Wallclock time, split: high word is number of seconds since 1-1-1970, * low word is number of nanoseconds since the start of that second. */ Peripherals.Counter.LatchedWallclockTimeSplit = ((uint64_t)ts.tv_sec << 32) | ts.tv_nsec; + } else { + /* Unable to get time. Report max uint64 value for both fields. */ + Peripherals.Counter.LatchedWallclockTime = 0xffffffffffffffff; + Peripherals.Counter.LatchedWallclockTimeSplit = 0xffffffffffffffff; } -#endif /* Latch the counters that reflect the state of the processor. */ Peripherals.Counter.LatchedClockCycles = Peripherals.Counter.ClockCycles; From db0b8c2d2c9fcd1544b93822a676da9a0e252b8a Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Fri, 27 Dec 2024 00:21:50 +0100 Subject: [PATCH 2603/2710] Check if we have it working now on the MinGW32 and 64 compilers. --- src/sim65/peripherals.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 0ad11a5bf..81d397c2f 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -65,10 +65,11 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) struct timespec ts; -#if defined(_WIN32) - /* clock_gettime() is not available on Windows. Use timespec_get() instead. */ +#if defined(_MSC_VER) + /* clock_gettime() is not available in the Visual Studio compiler. Use timespec_get() instead. */ bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; #else + /* clock_gettime() is available on Linux, MacOS, MinGW32, and MinGW64. bool time_valid = clock_gettime(CLOCK_REALTIME, &ts) == 0; #endif if (time_valid) { From f3e8f36f00b1f3363386b5033b28d3eba5c69a91 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Fri, 27 Dec 2024 00:28:19 +0100 Subject: [PATCH 2604/2710] Corrected typo. --- src/sim65/peripherals.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 81d397c2f..22c0b8232 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -69,7 +69,7 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) /* clock_gettime() is not available in the Visual Studio compiler. Use timespec_get() instead. */ bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; #else - /* clock_gettime() is available on Linux, MacOS, MinGW32, and MinGW64. + /* clock_gettime() is available on Linux, MacOS, MinGW32, and MinGW64. */ bool time_valid = clock_gettime(CLOCK_REALTIME, &ts) == 0; #endif if (time_valid) { From 328006e5000a3835e7bc35e1d988d81fff89a9c7 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Fri, 27 Dec 2024 00:42:29 +0100 Subject: [PATCH 2605/2710] Split out cases for MINGW32 and MINGW64 --- src/sim65/peripherals.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 22c0b8232..1606c19b9 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -65,7 +65,11 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) struct timespec ts; -#if defined(_MSC_VER) +#if defined(__MINGW64__) + bool time_valid = false; +#elif defined(__MINGW32__) + bool time_valid = false; +#elif defined(_MSC_VER) /* clock_gettime() is not available in the Visual Studio compiler. Use timespec_get() instead. */ bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; #else From 65d20eaab426f5120c59f1f0c109daaeca250920 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Fri, 27 Dec 2024 00:55:13 +0100 Subject: [PATCH 2606/2710] Enable timespec_get in MINGW64 code path to see if that works. --- src/sim65/peripherals.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 1606c19b9..c7b465872 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -61,19 +61,25 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) /* A write to the "latch" register performs a simultaneous latch of all registers. */ - /* Latch the current wallclock time first (if possible). */ + /* Latch the current wallclock time before doing anything else. */ - struct timespec ts; + struct timespec ts; /* Available on all compilers we use. */ #if defined(__MINGW64__) + /* We check for MINGW64 before MINGW32, since MINGW64 also defines __MINGW32__. */ + /* does timespec_get work? */ + bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; + /* does clock_gettime work? */ bool time_valid = false; #elif defined(__MINGW32__) + /* does timespec_get work? */ + /* does clock_gettime work? */ bool time_valid = false; #elif defined(_MSC_VER) - /* clock_gettime() is not available in the Visual Studio compiler. Use timespec_get() instead. */ + /* clock_gettime() is not available when using the Microsoft compiler. Use timespec_get() instead. */ bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; #else - /* clock_gettime() is available on Linux, MacOS, MinGW32, and MinGW64. */ + /* clock_gettime() is available on Linux and MacOS. */ bool time_valid = clock_gettime(CLOCK_REALTIME, &ts) == 0; #endif if (time_valid) { From 74f12b449888de87396e2f456ce68cca7edca296 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Fri, 27 Dec 2024 01:12:04 +0100 Subject: [PATCH 2607/2710] Enable timespec_get in MINGW64 code path to see if that works (2). --- src/sim65/peripherals.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index c7b465872..7d0df91bc 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -67,10 +67,10 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) #if defined(__MINGW64__) /* We check for MINGW64 before MINGW32, since MINGW64 also defines __MINGW32__. */ - /* does timespec_get work? */ + /* Using timespec_get() in the MinGW64 compiler makes the Linux workflow build fail. */ bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; /* does clock_gettime work? */ - bool time_valid = false; + //bool time_valid = false; #elif defined(__MINGW32__) /* does timespec_get work? */ /* does clock_gettime work? */ From 2743644b02fb106beeafcb3bc8cb4ccda1cf75b8 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Fri, 27 Dec 2024 01:24:44 +0100 Subject: [PATCH 2608/2710] Enable timespec_get in MINGW64 code path to see if that works (3). --- src/sim65/peripherals.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 7d0df91bc..c5c42b87e 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -68,13 +68,14 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) #if defined(__MINGW64__) /* We check for MINGW64 before MINGW32, since MINGW64 also defines __MINGW32__. */ /* Using timespec_get() in the MinGW64 compiler makes the Linux workflow build fail. */ - bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; + //bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; /* does clock_gettime work? */ - //bool time_valid = false; + bool time_valid = false; #elif defined(__MINGW32__) /* does timespec_get work? */ /* does clock_gettime work? */ - bool time_valid = false; + //bool time_valid = false; + bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; #elif defined(_MSC_VER) /* clock_gettime() is not available when using the Microsoft compiler. Use timespec_get() instead. */ bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; From a94b389965d0c0392aa0f22a6717b6fad2f2e6e3 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Fri, 27 Dec 2024 01:39:18 +0100 Subject: [PATCH 2609/2710] Enable timespec_get in MINGW64 code path to see if that works (4). --- src/sim65/peripherals.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index c5c42b87e..1c62b2bfb 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -70,12 +70,13 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) /* Using timespec_get() in the MinGW64 compiler makes the Linux workflow build fail. */ //bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; /* does clock_gettime work? */ - bool time_valid = false; -#elif defined(__MINGW32__) - /* does timespec_get work? */ - /* does clock_gettime work? */ + bool time_valid = clock_gettime(CLOCK_REALTIME, &ts) == 0; //bool time_valid = false; - bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; +#elif defined(__MINGW32__) + /* does timespec_get work? -- yes! */ + /* does clock_gettime work? */ + bool time_valid = false; + //bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; #elif defined(_MSC_VER) /* clock_gettime() is not available when using the Microsoft compiler. Use timespec_get() instead. */ bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; From 083c968885cad634df04a7f4b739241cc6078995 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Fri, 27 Dec 2024 01:53:16 +0100 Subject: [PATCH 2610/2710] Enable timespec_get in MINGW64 code path to see if that works (5). --- src/sim65/peripherals.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 1c62b2bfb..ea402ccb6 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -68,14 +68,13 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) #if defined(__MINGW64__) /* We check for MINGW64 before MINGW32, since MINGW64 also defines __MINGW32__. */ /* Using timespec_get() in the MinGW64 compiler makes the Linux workflow build fail. */ - //bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; - /* does clock_gettime work? */ - bool time_valid = clock_gettime(CLOCK_REALTIME, &ts) == 0; - //bool time_valid = false; + /* Using clock_gettime() in the MinGW64 compiler makes the Linux workflow build fail. */ + bool time_valid = false; #elif defined(__MINGW32__) /* does timespec_get work? -- yes! */ /* does clock_gettime work? */ - bool time_valid = false; + //bool time_valid = false; + bool time_valid = clock_gettime(CLOCK_REALTIME, &ts) == 0; //bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; #elif defined(_MSC_VER) /* clock_gettime() is not available when using the Microsoft compiler. Use timespec_get() instead. */ From 6ccde66c863c0cad8593c0344567c95e55285219 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Fri, 27 Dec 2024 02:06:15 +0100 Subject: [PATCH 2611/2710] Enable timespec_get in MINGW64 code path to see if that works (6). --- src/sim65/peripherals.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index ea402ccb6..20393cc1d 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -72,9 +72,10 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) bool time_valid = false; #elif defined(__MINGW32__) /* does timespec_get work? -- yes! */ - /* does clock_gettime work? */ + /* does clock_gettime work? -- yes! */ //bool time_valid = false; - bool time_valid = clock_gettime(CLOCK_REALTIME, &ts) == 0; + //bool time_valid = clock_gettime(CLOCK_REALTIME, &ts) == 0; + #error "MinGW32 compiler was used; we're not handling it." //bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; #elif defined(_MSC_VER) /* clock_gettime() is not available when using the Microsoft compiler. Use timespec_get() instead. */ From c735a83a98bd8577539e8ec4c57be174f953ec00 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Fri, 27 Dec 2024 02:19:36 +0100 Subject: [PATCH 2612/2710] Enable timespec_get in MINGW64 code path to see if that works (7). --- src/sim65/peripherals.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 20393cc1d..012af3d30 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -32,6 +32,10 @@ #include <time.h> #include "peripherals.h" +#if defined(__MINGW64__) +/* For gettimeofday() */ +#include <sys/time.h> +#endif /*****************************************************************************/ /* Data */ @@ -66,17 +70,18 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) struct timespec ts; /* Available on all compilers we use. */ #if defined(__MINGW64__) - /* We check for MINGW64 before MINGW32, since MINGW64 also defines __MINGW32__. */ + /* Note: we check for MINGW64 before MINGW32, since MINGW64 also defines __MINGW32__. */ /* Using timespec_get() in the MinGW64 compiler makes the Linux workflow build fail. */ /* Using clock_gettime() in the MinGW64 compiler makes the Linux workflow build fail. */ - bool time_valid = false; + struct timeval tv; + bool time_valid = (gettimeofday(&tv, NULL) == 0); + if (time_valid) + { + ts.tv_sec = tv.tv_sec; + ts.tv_nsec = tv.tv_usec * 1000; + } #elif defined(__MINGW32__) - /* does timespec_get work? -- yes! */ - /* does clock_gettime work? -- yes! */ - //bool time_valid = false; - //bool time_valid = clock_gettime(CLOCK_REALTIME, &ts) == 0; - #error "MinGW32 compiler was used; we're not handling it." - //bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; + #error "MinGW32 compiler detected, but we're not handling it." #elif defined(_MSC_VER) /* clock_gettime() is not available when using the Microsoft compiler. Use timespec_get() instead. */ bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; From 58b8c147386093026bd7130401937d17150437e1 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Fri, 27 Dec 2024 08:57:58 +0100 Subject: [PATCH 2613/2710] Split off the compiler-depended wallclock time function in a separate function. --- src/sim65/peripherals.c | 61 +++++++++++++++++++++++++++-------------- 1 file changed, 40 insertions(+), 21 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 012af3d30..e155ba04c 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -52,6 +52,44 @@ Sim65Peripherals Peripherals; /* Code */ /*****************************************************************************/ +static bool GetWallclockTime (struct timespec * ts) +{ + /* Note: the 'struct timespec' type is supported on all compilers we want to support. */ + +#if defined(__MINGW64__) + /* This check comes before the check on symbol __MINGW32__, as MinGW64 defines both. + * + * When using the MinGW64 compiler, neither timespec_get() nor clock_gettime() + * are available; this makes the Linux workflow build fail. + * The gettimeofday() function works, so use that. + */ + struct timeval tv; + bool time_valid = (gettimeofday(&tv, NULL) == 0); + if (time_valid) + { + ts->tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec * 1000; + } +#elif defined(__MINGW32__) + /* The MinGW32 compiler is not used in the build process. + * Support can be added when the need arises. + */ +#error "The MinGW32 compiler is not supported." +#elif defined(_MSC_VER) + /* Using the Microsoft C++ compiler. + * clock_gettime() is not available; use timespec_get() instead. + */ + bool time_valid = timespec_get(ts, TIME_UTC) == TIME_UTC; +#else + /* Other platforms (Linux, MacOS, ...): assume that clock_gettime() + * is available. + */ + bool time_valid = clock_gettime(CLOCK_REALTIME, ts) == 0; +#endif + + return time_valid; +} + void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) @@ -67,28 +105,9 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) /* Latch the current wallclock time before doing anything else. */ - struct timespec ts; /* Available on all compilers we use. */ + struct timespec ts; /* The type is available on all compilers we use. */ + bool time_valid = GetWallclockTime (&ts); -#if defined(__MINGW64__) - /* Note: we check for MINGW64 before MINGW32, since MINGW64 also defines __MINGW32__. */ - /* Using timespec_get() in the MinGW64 compiler makes the Linux workflow build fail. */ - /* Using clock_gettime() in the MinGW64 compiler makes the Linux workflow build fail. */ - struct timeval tv; - bool time_valid = (gettimeofday(&tv, NULL) == 0); - if (time_valid) - { - ts.tv_sec = tv.tv_sec; - ts.tv_nsec = tv.tv_usec * 1000; - } -#elif defined(__MINGW32__) - #error "MinGW32 compiler detected, but we're not handling it." -#elif defined(_MSC_VER) - /* clock_gettime() is not available when using the Microsoft compiler. Use timespec_get() instead. */ - bool time_valid = timespec_get(&ts, TIME_UTC) == TIME_UTC; -#else - /* clock_gettime() is available on Linux and MacOS. */ - bool time_valid = clock_gettime(CLOCK_REALTIME, &ts) == 0; -#endif if (time_valid) { /* Wallclock time: number of nanoseconds since 1-1-1970. */ Peripherals.Counter.LatchedWallclockTime = 1000000000 * (uint64_t)ts.tv_sec + ts.tv_nsec; From e785b88d425cd4ad741d9b7f018a4a9615625ef8 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Fri, 27 Dec 2024 09:21:04 +0100 Subject: [PATCH 2614/2710] Cleaning up the GetWallclockTime function. --- src/sim65/peripherals.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index e155ba04c..bd00c5b3a 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -53,38 +53,34 @@ Sim65Peripherals Peripherals; /*****************************************************************************/ static bool GetWallclockTime (struct timespec * ts) +/* Get the wallclock time with nanosecond resolution. */ { - /* Note: the 'struct timespec' type is supported on all compilers we want to support. */ + /* Note: the 'struct timespec' type is available on all compilers we want to support. */ + + bool time_valid; #if defined(__MINGW64__) - /* This check comes before the check on symbol __MINGW32__, as MinGW64 defines both. - * - * When using the MinGW64 compiler, neither timespec_get() nor clock_gettime() - * are available; this makes the Linux workflow build fail. - * The gettimeofday() function works, so use that. + /* When using the MinGW64 compiler, neither timespec_get() nor clock_gettime() + * are available; using either of them makes the Linux workflow build fail. + * The gettimeofday() function does work, so use that; its microsecond resulution + * is plenty for most applications. */ struct timeval tv; - bool time_valid = (gettimeofday(&tv, NULL) == 0); + time_valid = (gettimeofday(&tv, NULL) == 0); if (time_valid) { ts->tv_sec = tv.tv_sec; ts->tv_nsec = tv.tv_usec * 1000; } -#elif defined(__MINGW32__) - /* The MinGW32 compiler is not used in the build process. - * Support can be added when the need arises. - */ -#error "The MinGW32 compiler is not supported." #elif defined(_MSC_VER) /* Using the Microsoft C++ compiler. * clock_gettime() is not available; use timespec_get() instead. */ - bool time_valid = timespec_get(ts, TIME_UTC) == TIME_UTC; + time_valid = timespec_get(ts, TIME_UTC) == TIME_UTC; #else - /* Other platforms (Linux, MacOS, ...): assume that clock_gettime() - * is available. + /* On all other compilers, assume that the clock_gettime() function is available. */ - bool time_valid = clock_gettime(CLOCK_REALTIME, ts) == 0; + time_valid = clock_gettime(CLOCK_REALTIME, ts) == 0; #endif return time_valid; From 29063021a815a05dca3a0cff9ea057504aae217b Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Sat, 28 Dec 2024 06:49:23 +0100 Subject: [PATCH 2615/2710] Cosmetic improvements. --- src/sim65/peripherals.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index bd00c5b3a..713b8173c 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -2,7 +2,7 @@ /* */ /* peripherals.c */ /* */ -/* Memory-mapped peripheral subsystem for the 6502 simulator */ +/* Memory-mapped peripheral subsystem for the 6502 simulator */ /* */ /* */ /* */ @@ -30,13 +30,15 @@ #include <stdbool.h> #include <time.h> -#include "peripherals.h" - #if defined(__MINGW64__) /* For gettimeofday() */ #include <sys/time.h> #endif + +#include "peripherals.h" + + /*****************************************************************************/ /* Data */ /*****************************************************************************/ @@ -62,13 +64,12 @@ static bool GetWallclockTime (struct timespec * ts) #if defined(__MINGW64__) /* When using the MinGW64 compiler, neither timespec_get() nor clock_gettime() * are available; using either of them makes the Linux workflow build fail. - * The gettimeofday() function does work, so use that; its microsecond resulution - * is plenty for most applications. + * The gettimeofday() function does work, so use that; its microsecond resolution + * is fine for most applications. */ struct timeval tv; time_valid = (gettimeofday(&tv, NULL) == 0); - if (time_valid) - { + if (time_valid) { ts->tv_sec = tv.tv_sec; ts->tv_nsec = tv.tv_usec * 1000; } @@ -78,7 +79,8 @@ static bool GetWallclockTime (struct timespec * ts) */ time_valid = timespec_get(ts, TIME_UTC) == TIME_UTC; #else - /* On all other compilers, assume that the clock_gettime() function is available. + /* On all other compilers, assume that clock_gettime() is available. + * This is true on Linux and MacOS, at least. */ time_valid = clock_gettime(CLOCK_REALTIME, ts) == 0; #endif @@ -101,7 +103,7 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) /* Latch the current wallclock time before doing anything else. */ - struct timespec ts; /* The type is available on all compilers we use. */ + struct timespec ts; bool time_valid = GetWallclockTime (&ts); if (time_valid) { @@ -109,11 +111,11 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) Peripherals.Counter.LatchedWallclockTime = 1000000000 * (uint64_t)ts.tv_sec + ts.tv_nsec; /* Wallclock time, split: high word is number of seconds since 1-1-1970, * low word is number of nanoseconds since the start of that second. */ - Peripherals.Counter.LatchedWallclockTimeSplit = ((uint64_t)ts.tv_sec << 32) | ts.tv_nsec; + Peripherals.Counter.LatchedWallclockTimeSplit = (uint64_t)ts.tv_sec << 32 | ts.tv_nsec; } else { /* Unable to get time. Report max uint64 value for both fields. */ - Peripherals.Counter.LatchedWallclockTime = 0xffffffffffffffff; - Peripherals.Counter.LatchedWallclockTimeSplit = 0xffffffffffffffff; + Peripherals.Counter.LatchedWallclockTime = -1; + Peripherals.Counter.LatchedWallclockTimeSplit = -1; } /* Latch the counters that reflect the state of the processor. */ @@ -160,8 +162,9 @@ uint8_t PeripheralsReadByte (uint8_t Addr) /* Read from any of the eight counter bytes. * The first byte is the 64 bit value's LSB, the seventh byte is its MSB. */ - unsigned ByteIndex = Addr - PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE; /* 0 .. 7 */ + unsigned SelectedByteIndex = Addr - PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE; /* 0 .. 7 */ uint64_t Value; + uint8_t SelectedByteValue; switch (Peripherals.Counter.LatchedValueSelected) { case PERIPHERALS_COUNTER_SELECT_CLOCKCYCLE_COUNTER: Value = Peripherals.Counter.LatchedClockCycles; break; case PERIPHERALS_COUNTER_SELECT_INSTRUCTION_COUNTER: Value = Peripherals.Counter.LatchedCpuInstructions; break; @@ -172,7 +175,8 @@ uint8_t PeripheralsReadByte (uint8_t Addr) default: Value = 0; /* Reading from a non-existent latch register will yield 0. */ } /* Return the desired byte of the latched counter. 0==LSB, 7==MSB. */ - return (uint8_t)(Value >> (ByteIndex * 8)); + SelectedByteValue = Value >> (SelectedByteIndex * 8); + return SelectedByteValue; } /* Handle reads from unused peripheral and write-only addresses. */ From 7576f59e6aa67e5993c737da966267b27493e45e Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Sat, 28 Dec 2024 06:57:37 +0100 Subject: [PATCH 2616/2710] Visual Studio compiler demands an explicit cast from uint64_t to uint8_t. --- src/sim65/peripherals.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 713b8173c..4fa512ed8 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -164,7 +164,6 @@ uint8_t PeripheralsReadByte (uint8_t Addr) */ unsigned SelectedByteIndex = Addr - PERIPHERALS_COUNTER_ADDRESS_OFFSET_VALUE; /* 0 .. 7 */ uint64_t Value; - uint8_t SelectedByteValue; switch (Peripherals.Counter.LatchedValueSelected) { case PERIPHERALS_COUNTER_SELECT_CLOCKCYCLE_COUNTER: Value = Peripherals.Counter.LatchedClockCycles; break; case PERIPHERALS_COUNTER_SELECT_INSTRUCTION_COUNTER: Value = Peripherals.Counter.LatchedCpuInstructions; break; @@ -174,9 +173,8 @@ uint8_t PeripheralsReadByte (uint8_t Addr) case PERIPHERALS_COUNTER_SELECT_WALLCLOCK_TIME_SPLIT: Value = Peripherals.Counter.LatchedWallclockTimeSplit; break; default: Value = 0; /* Reading from a non-existent latch register will yield 0. */ } - /* Return the desired byte of the latched counter. 0==LSB, 7==MSB. */ - SelectedByteValue = Value >> (SelectedByteIndex * 8); - return SelectedByteValue; + /* Return the desired byte of the latched counter; 0==LSB, 7==MSB. */ + return (uint8_t)(Value >> (SelectedByteIndex * 8)); } /* Handle reads from unused peripheral and write-only addresses. */ From 511f4478deec1de16825b0d072e872e823162f23 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Sun, 29 Dec 2024 22:26:38 +0100 Subject: [PATCH 2617/2710] Fixed style issues. --- src/sim65/6502.c | 584 ++++++++++++++++++++++++----------------------- 1 file changed, 293 insertions(+), 291 deletions(-) diff --git a/src/sim65/6502.c b/src/sim65/6502.c index 6d83ef07b..079a2343a 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -11,9 +11,13 @@ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ /* */ -/* Mar-2017, Christian Krueger, added support for 65SC02 */ +/* Mar-2017, Christian Krueger, added support for 65SC02. */ /* Dec-2023, Carlo Bramini, rewritten for better maintenance and added */ -/* support for undocumented opcodes for 6502 */ +/* support for undocumented opcodes for 6502. */ +/* Dec-2024, Sidney Cadot, fixed 65C02 ADC/SBC (decimal mode); implemented */ +/* 65C02 missing instructions; fixed 6502X illegal instructions; */ +/* fixed cycle count for all 6502(X) / 65C02 opcodes; */ +/* achieved full 65x02 test-suite compliance. */ /* */ /* This software is provided 'as-is', without any expressed or implied */ /* warranty. In no event will the authors be held liable for any damages */ @@ -358,7 +362,7 @@ ANC #imm | 2Bh | 2 | -------------+--------+--------+ -* LAS: calculates the contents of a memory location with the contents of the +* LAS: calculates the AND of a memory location with the contents of the stack pointer register and it stores the result in the accumulator, the X register, and the stack pointer. @@ -375,7 +379,6 @@ Address mode | opcode | cycles | N V B D I Z C SBC #imm | EBh | 2 | -------------+--------+--------+ - */ /*****************************************************************************/ @@ -397,10 +400,11 @@ CPURegs Regs; static unsigned Cycles; /* NMI request active */ -static unsigned HaveNMIRequest; +static bool HaveNMIRequest; /* IRQ request active */ -static unsigned HaveIRQRequest; +static bool HaveIRQRequest; + /*****************************************************************************/ @@ -432,7 +436,6 @@ static unsigned HaveIRQRequest; */ #define TEST_ZF(v) SET_ZF (((v) & 0xFF) == 0) #define TEST_SF(v) SET_SF (((v) & 0x80) != 0) -#define TEST_CF(v) SET_CF (((v) & 0xFF00) != 0) /* Program counter halves */ #define PCL (Regs.PC & 0xFF) @@ -554,7 +557,7 @@ static unsigned HaveIRQRequest; /* #imm */ #define ALU_OP_IMM(op) \ - unsigned char immediate; \ + uint8_t immediate; \ MEM_AD_OP_IMM(immediate); \ Cycles = 2; \ op (immediate) @@ -590,14 +593,6 @@ static unsigned HaveIRQRequest; ADR_##mode (address); \ MemWriteByte(address, op) -/* zp / zp,x / zp,y / abs / abs,x / abs,y / (zp,x) / (zp),y / (zp) */ -#define STO_CB(mode, cb) \ - unsigned address, operand; \ - Cycles = STO_CY_##mode; \ - ADR_##mode (address); \ - cb (operand); \ - MemWriteByte(address, operand) - /* Read-Modify-Write opcode helpers */ /* Execution cycles for R-M-W opcodes */ @@ -673,7 +668,7 @@ static unsigned HaveIRQRequest; const uint8_t op = v; \ const uint8_t OldAC = Regs.AC; \ bool carry = GET_CF(); \ - Regs.AC = (OldAC + op + carry); \ + Regs.AC = OldAC + op + carry; \ const bool NV = Regs.AC >= 0x80; \ carry = OldAC + op + carry >= 0x100; \ SET_SF(NV); \ @@ -740,7 +735,7 @@ static unsigned HaveIRQRequest; } while (0) /* ADC, 65C02 version */ -#define ADC_65C02(v) \ +#define ADC_65C02(v) \ do { \ if (GET_DF()) { \ ADC_DECIMAL_MODE_65C02(v); \ @@ -751,21 +746,23 @@ static unsigned HaveIRQRequest; /* branches */ #define BRANCH(cond) \ - Cycles = 2; \ - if (cond) { \ - signed char Offs; \ - unsigned char OldPCH; \ - ++Cycles; \ - Offs = (signed char) MemReadByte (Regs.PC+1); \ - Regs.PC += 2; \ - OldPCH = PCH; \ - Regs.PC = (Regs.PC + (int) Offs) & 0xFFFF; \ - if (PCH != OldPCH) { \ + do { \ + Cycles = 2; \ + if (cond) { \ + int8_t Offs; \ + uint8_t OldPCH; \ ++Cycles; \ + Offs = MemReadByte (Regs.PC+1); \ + Regs.PC += 2; \ + OldPCH = PCH; \ + Regs.PC = (Regs.PC + (int) Offs) & 0xFFFF; \ + if (PCH != OldPCH) { \ + ++Cycles; \ + } \ + } else { \ + Regs.PC += 2; \ } \ - } else { \ - Regs.PC += 2; \ - } + } while (0) /* compares */ #define COMPARE(v1, v2) \ @@ -788,7 +785,7 @@ static unsigned HaveIRQRequest; /* ROL */ #define ROL(Val) \ do { \ - unsigned ShiftOut = (Val & 0x80); \ + const bool ShiftOut = (Val & 0x80) != 0; \ Val <<= 1; \ if (GET_CF ()) { \ Val |= 0x01; \ @@ -801,7 +798,7 @@ static unsigned HaveIRQRequest; /* ROR */ #define ROR(Val) \ do { \ - unsigned ShiftOut = (Val & 0x01); \ + const bool ShiftOut = (Val & 0x01) != 0; \ Val >>= 1; \ if (GET_CF ()) { \ Val |= 0x80; \ @@ -809,7 +806,7 @@ static unsigned HaveIRQRequest; TEST_ZF (Val); \ TEST_SF (Val); \ SET_CF (ShiftOut); \ - } while(0) + } while (0) /* ASL */ #define ASL(Val) \ @@ -967,7 +964,7 @@ static unsigned HaveIRQRequest; SET_OF ((Val & 0x40) ^ ((Val & 0x20) << 1)); \ } \ Regs.AC = Val; \ - } while (0); + } while (0) /* ANE */ /* An "unstable" illegal opcode that depends on a "constant" value that isn't @@ -999,7 +996,7 @@ static unsigned HaveIRQRequest; Regs.XR = tmp; \ TEST_SF (tmp); \ TEST_ZF (tmp); \ - } while (0); + } while (0) /* NOP */ #define NOP(Val) \ @@ -1039,7 +1036,7 @@ static unsigned HaveIRQRequest; const uint8_t op = v; \ const uint8_t OldAC = Regs.AC; \ const bool borrow = !GET_CF(); \ - Regs.AC = (OldAC - op - borrow); \ + Regs.AC = OldAC - op - borrow; \ const bool NV = Regs.AC >= 0x80; \ SET_SF(NV); \ SET_OF(((OldAC >= 0x80) ^ NV) & ((op < 0x80) ^ NV)); \ @@ -1121,7 +1118,7 @@ static unsigned HaveIRQRequest; */ #define ZP_BITOP(bitnr, bitval) \ do { \ - uint8_t zp_address = MemReadByte (Regs.PC + 1); \ + const uint8_t zp_address = MemReadByte (Regs.PC + 1); \ uint8_t zp_value = MemReadByte (zp_address); \ if (bitval) { \ zp_value |= (1 << bitnr); \ @@ -1139,9 +1136,9 @@ static unsigned HaveIRQRequest; */ #define ZP_BIT_BRANCH(bitnr, bitval) \ do { \ - uint8_t zp_address = MemReadByte (Regs.PC + 1); \ - uint8_t zp_value = MemReadByte (zp_address); \ - int displacement = (int8_t)MemReadByte (Regs.PC + 2); \ + const uint8_t zp_address = MemReadByte (Regs.PC + 1); \ + const uint8_t zp_value = MemReadByte (zp_address); \ + const int8_t displacement = MemReadByte (Regs.PC + 2); \ if (((zp_value & (1 << bitnr)) != 0) == bitval) { \ Regs.PC += 3; \ uint8_t OldPCH = PCH; \ @@ -1196,7 +1193,7 @@ static void OPC_6502_01 (void) -static void OPC_6502_03 (void) +static void OPC_6502X_03 (void) /* Opcode $03: SLO (zp,x) */ { ILLx2_OP (ZPXIND, SLO); @@ -1205,10 +1202,10 @@ static void OPC_6502_03 (void) /* Aliases of opcode $04 */ -#define OPC_6502_44 OPC_6502_04 -#define OPC_6502_64 OPC_6502_04 +#define OPC_6502X_44 OPC_6502X_04 +#define OPC_6502X_64 OPC_6502X_04 -static void OPC_6502_04 (void) +static void OPC_6502X_04 (void) /* Opcode $04: NOP zp */ { ALU_OP (ZP, NOP); @@ -1216,7 +1213,7 @@ static void OPC_6502_04 (void) -static void OPC_65SC02_04 (void) +static void OPC_65C02_04 (void) /* Opcode $04: TSB zp */ { MEM_OP (ZP, TSB); @@ -1240,7 +1237,7 @@ static void OPC_6502_06 (void) -static void OPC_6502_07 (void) +static void OPC_6502X_07 (void) /* Opcode $07: SLO zp */ { ILLx2_OP (ZP, SLO); @@ -1285,9 +1282,9 @@ static void OPC_6502_0A (void) /* Aliases of opcode $0B */ -#define OPC_6502_2B OPC_6502_0B +#define OPC_6502X_2B OPC_6502X_0B -static void OPC_6502_0B (void) +static void OPC_6502X_0B (void) /* Opcode $0B: ANC #imm */ { ALU_OP_IMM (ANC); @@ -1295,7 +1292,7 @@ static void OPC_6502_0B (void) -static void OPC_6502_0C (void) +static void OPC_6502X_0C (void) /* Opcode $0C: NOP abs */ { ALU_OP (ABS, NOP); @@ -1303,7 +1300,7 @@ static void OPC_6502_0C (void) -static void OPC_65SC02_0C (void) +static void OPC_65C02_0C (void) /* Opcode $0C: TSB abs */ { MEM_OP (ABS, TSB); @@ -1327,7 +1324,7 @@ static void OPC_6502_0E (void) -static void OPC_6502_0F (void) +static void OPC_6502X_0F (void) /* Opcode $0F: SLO abs */ { ILLx2_OP (ABS, SLO); @@ -1359,7 +1356,7 @@ static void OPC_6502_11 (void) -static void OPC_65SC02_12 (void) +static void OPC_65C02_12 (void) /* Opcode $12: ORA (zp) */ { AC_OP (ZPIND, |); @@ -1367,7 +1364,7 @@ static void OPC_65SC02_12 (void) -static void OPC_6502_13 (void) +static void OPC_6502X_13 (void) /* Opcode $03: SLO (zp),y */ { ILLx2_OP (ZPINDY_NP, SLO); @@ -1376,13 +1373,13 @@ static void OPC_6502_13 (void) /* Aliases of opcode $14 */ -#define OPC_6502_34 OPC_6502_14 -#define OPC_6502_54 OPC_6502_14 -#define OPC_6502_74 OPC_6502_14 -#define OPC_6502_D4 OPC_6502_14 -#define OPC_6502_F4 OPC_6502_14 +#define OPC_6502X_34 OPC_6502X_14 +#define OPC_6502X_54 OPC_6502X_14 +#define OPC_6502X_74 OPC_6502X_14 +#define OPC_6502X_D4 OPC_6502X_14 +#define OPC_6502X_F4 OPC_6502X_14 -static void OPC_6502_14 (void) +static void OPC_6502X_14 (void) /* Opcode $04: NOP zp,x */ { ALU_OP (ZPX, NOP); @@ -1390,7 +1387,7 @@ static void OPC_6502_14 (void) -static void OPC_65SC02_14 (void) +static void OPC_65C02_14 (void) /* Opcode $14: TRB zp */ { MEM_OP (ZP, TRB); @@ -1414,7 +1411,7 @@ static void OPC_6502_16 (void) -static void OPC_6502_17 (void) +static void OPC_6502X_17 (void) /* Opcode $17: SLO zp,x */ { ILLx2_OP (ZPX, SLO); @@ -1448,7 +1445,7 @@ static void OPC_6502_19 (void) -static void OPC_65SC02_1A (void) +static void OPC_65C02_1A (void) /* Opcode $1A: INC a */ { Cycles = 2; @@ -1458,7 +1455,7 @@ static void OPC_65SC02_1A (void) -static void OPC_6502_1B (void) +static void OPC_6502X_1B (void) /* Opcode $1B: SLO abs,y */ { ILLx2_OP (ABSY_NP, SLO); @@ -1467,13 +1464,13 @@ static void OPC_6502_1B (void) /* Aliases of opcode $1C */ -#define OPC_6502_3C OPC_6502_1C -#define OPC_6502_5C OPC_6502_1C -#define OPC_6502_7C OPC_6502_1C -#define OPC_6502_DC OPC_6502_1C -#define OPC_6502_FC OPC_6502_1C +#define OPC_6502X_3C OPC_6502X_1C +#define OPC_6502X_5C OPC_6502X_1C +#define OPC_6502X_7C OPC_6502X_1C +#define OPC_6502X_DC OPC_6502X_1C +#define OPC_6502X_FC OPC_6502X_1C -static void OPC_6502_1C (void) +static void OPC_6502X_1C (void) /* Opcode $1C: NOP abs,x */ { ALU_OP (ABSX, NOP); @@ -1481,7 +1478,7 @@ static void OPC_6502_1C (void) -static void OPC_65SC02_1C (void) +static void OPC_65C02_1C (void) /* Opcode $1C: TRB abs */ { MEM_OP (ABS, TRB); @@ -1514,7 +1511,7 @@ static void OPC_65C02_1E (void) -static void OPC_6502_1F (void) +static void OPC_6502X_1F (void) /* Opcode $1F: SLO abs,x */ { ILLx2_OP (ABSX_NP, SLO); @@ -1553,15 +1550,13 @@ static void OPC_6502_20 (void) * the order of the bus operations on a real 6502. */ - unsigned AddrLo, AddrHi; - Cycles = 6; Regs.PC += 1; - AddrLo = MemReadByte(Regs.PC); + uint8_t AddrLo = MemReadByte(Regs.PC); Regs.PC += 1; PUSH (PCH); PUSH (PCL); - AddrHi = MemReadByte(Regs.PC); + uint8_t AddrHi = MemReadByte(Regs.PC); Regs.PC = AddrLo + (AddrHi << 8); @@ -1578,7 +1573,7 @@ static void OPC_6502_21 (void) -static void OPC_6502_23 (void) +static void OPC_6502X_23 (void) /* Opcode $23: RLA (zp,x) */ { ILLx2_OP (ZPXIND, RLA); @@ -1610,7 +1605,7 @@ static void OPC_6502_26 (void) -static void OPC_6502_27 (void) +static void OPC_6502X_27 (void) /* Opcode $27: RLA zp */ { ILLx2_OP (ZP, RLA); @@ -1681,7 +1676,7 @@ static void OPC_6502_2E (void) -static void OPC_6502_2F (void) +static void OPC_6502X_2F (void) /* Opcode $2F: RLA abs */ { ILLx2_OP (ABS, RLA); @@ -1713,7 +1708,7 @@ static void OPC_6502_31 (void) -static void OPC_65SC02_32 (void) +static void OPC_65C02_32 (void) /* Opcode $32: AND (zp) */ { AC_OP (ZPIND, &); @@ -1721,7 +1716,7 @@ static void OPC_65SC02_32 (void) -static void OPC_6502_33 (void) +static void OPC_6502X_33 (void) /* Opcode $33: RLA (zp),y */ { ILLx2_OP (ZPINDY_NP, RLA); @@ -1729,7 +1724,7 @@ static void OPC_6502_33 (void) -static void OPC_65SC02_34 (void) +static void OPC_65C02_34 (void) /* Opcode $34: BIT zp,x */ { ALU_OP (ZPX, BIT); @@ -1753,7 +1748,7 @@ static void OPC_6502_36 (void) -static void OPC_6502_37 (void) +static void OPC_6502X_37 (void) /* Opcode $37: RLA zp,x */ { ILLx2_OP (ZPX, RLA); @@ -1787,7 +1782,7 @@ static void OPC_6502_39 (void) -static void OPC_65SC02_3A (void) +static void OPC_65C02_3A (void) /* Opcode $3A: DEC a */ { Cycles = 2; @@ -1797,7 +1792,7 @@ static void OPC_65SC02_3A (void) -static void OPC_6502_3B (void) +static void OPC_6502X_3B (void) /* Opcode $3B: RLA abs,y */ { ILLx2_OP (ABSY_NP, RLA); @@ -1805,7 +1800,7 @@ static void OPC_6502_3B (void) -static void OPC_65SC02_3C (void) +static void OPC_65C02_3C (void) /* Opcode $3C: BIT abs,x */ { ALU_OP (ABSX, BIT); @@ -1838,7 +1833,7 @@ static void OPC_65C02_3E (void) -static void OPC_6502_3F (void) +static void OPC_6502X_3F (void) /* Opcode $3F: RLA abs,x */ { ILLx2_OP (ABSX_NP, RLA); @@ -1875,7 +1870,7 @@ static void OPC_6502_41 (void) -static void OPC_6502_43 (void) +static void OPC_6502X_43 (void) /* Opcode $43: SRE (zp,x) */ { ILLx2_OP (ZPXIND, SRE); @@ -1899,7 +1894,7 @@ static void OPC_6502_46 (void) -static void OPC_6502_47 (void) +static void OPC_6502X_47 (void) /* Opcode $47: SRE zp */ { ILLx2_OP (ZP, SRE); @@ -1943,7 +1938,7 @@ static void OPC_6502_4A (void) -static void OPC_6502_4B (void) +static void OPC_6502X_4B (void) /* Opcode $4B: ASR imm */ { ALU_OP_IMM (ASR); @@ -1978,7 +1973,7 @@ static void OPC_6502_4E (void) -static void OPC_6502_4F (void) +static void OPC_6502X_4F (void) /* Opcode $4F: SRE abs */ { ILLx2_OP (ABS, SRE); @@ -2010,7 +2005,7 @@ static void OPC_6502_51 (void) -static void OPC_65SC02_52 (void) +static void OPC_65C02_52 (void) /* Opcode $52: EOR (zp) */ { AC_OP (ZPIND, ^); @@ -2018,7 +2013,7 @@ static void OPC_65SC02_52 (void) -static void OPC_6502_53 (void) +static void OPC_6502X_53 (void) /* Opcode $43: SRE (zp),y */ { ILLx2_OP (ZPINDY_NP, SRE); @@ -2042,7 +2037,7 @@ static void OPC_6502_56 (void) -static void OPC_6502_57 (void) +static void OPC_6502X_57 (void) /* Opcode $57: SRE zp,x */ { ILLx2_OP (ZPX, SRE); @@ -2076,7 +2071,7 @@ static void OPC_6502_59 (void) -static void OPC_65SC02_5A (void) +static void OPC_65C02_5A (void) /* Opcode $5A: PHY */ { Cycles = 3; @@ -2086,7 +2081,7 @@ static void OPC_65SC02_5A (void) -static void OPC_6502_5B (void) +static void OPC_6502X_5B (void) /* Opcode $5B: SRE abs,y */ { ILLx2_OP (ABSY_NP, SRE); @@ -2136,7 +2131,7 @@ static void OPC_65C02_5E (void) -static void OPC_6502_5F (void) +static void OPC_6502X_5F (void) /* Opcode $5F: SRE abs,x */ { ILLx2_OP (ABSX_NP, SRE); @@ -2177,7 +2172,9 @@ static void OPC_65C02_61 (void) ALU_OP (ZPXIND, ADC_65C02); } -static void OPC_6502_63 (void) + + +static void OPC_6502X_63 (void) /* Opcode $63: RRA (zp,x) */ { ILLx2_OP (ZPXIND, RRA); @@ -2185,7 +2182,7 @@ static void OPC_6502_63 (void) -static void OPC_65SC02_64 (void) +static void OPC_65C02_64 (void) /* Opcode $64: STZ zp */ { STO_OP (ZP, 0); @@ -2217,7 +2214,7 @@ static void OPC_6502_66 (void) -static void OPC_6502_67 (void) +static void OPC_6502X_67 (void) /* Opcode $67: RRA zp */ { ILLx2_OP (ZP, RRA); @@ -2259,6 +2256,8 @@ static void OPC_65C02_69 (void) ALU_OP_IMM (ADC_65C02); } + + static void OPC_6502_6A (void) /* Opcode $6A: ROR a */ { @@ -2269,7 +2268,7 @@ static void OPC_6502_6A (void) -static void OPC_6502_6B (void) +static void OPC_6502X_6B (void) /* Opcode $6B: ARR imm */ { ALU_OP_IMM (ARR); @@ -2338,7 +2337,7 @@ static void OPC_6502_6E (void) -static void OPC_6502_6F (void) +static void OPC_6502X_6F (void) /* Opcode $6F: RRA abs */ { ILLx2_OP (ABS, RRA); @@ -2386,7 +2385,7 @@ static void OPC_65C02_72 (void) -static void OPC_6502_73 (void) +static void OPC_6502X_73 (void) /* Opcode $73: RRA (zp),y */ { ILLx2_OP (ZPINDY_NP, RRA); @@ -2394,7 +2393,7 @@ static void OPC_6502_73 (void) -static void OPC_65SC02_74 (void) +static void OPC_65C02_74 (void) /* Opcode $74: STZ zp,x */ { STO_OP (ZPX, 0); @@ -2416,6 +2415,8 @@ static void OPC_65C02_75 (void) ALU_OP (ZPX, ADC_65C02); } + + static void OPC_6502_76 (void) /* Opcode $76: ROR zp,x */ { @@ -2424,7 +2425,7 @@ static void OPC_6502_76 (void) -static void OPC_6502_77 (void) +static void OPC_6502X_77 (void) /* Opcode $77: RRA zp,x */ { ILLx2_OP (ZPX, RRA); @@ -2466,7 +2467,7 @@ static void OPC_65C02_79 (void) -static void OPC_65SC02_7A (void) +static void OPC_65C02_7A (void) /* Opcode $7A: PLY */ { Cycles = 4; @@ -2478,7 +2479,7 @@ static void OPC_65SC02_7A (void) -static void OPC_6502_7B (void) +static void OPC_6502X_7B (void) /* Opcode $7B: RRA abs,y */ { ILLx2_OP (ABSY_NP, RRA); @@ -2486,7 +2487,7 @@ static void OPC_6502_7B (void) -static void OPC_65SC02_7C (void) +static void OPC_65C02_7C (void) /* Opcode $7C: JMP (ind,X) */ { unsigned PC, Adr; @@ -2533,7 +2534,7 @@ static void OPC_65C02_7E (void) -static void OPC_6502_7F (void) +static void OPC_6502X_7F (void) /* Opcode $7F: RRA abs,x */ { ILLx2_OP (ABSX_NP, RRA); @@ -2550,12 +2551,12 @@ static void OPC_65C02_7F (void) /* Aliases of opcode $80 */ -#define OPC_6502_82 OPC_6502_80 -#define OPC_6502_C2 OPC_6502_80 -#define OPC_6502_E2 OPC_6502_80 -#define OPC_6502_89 OPC_6502_80 +#define OPC_6502X_82 OPC_6502X_80 +#define OPC_6502X_C2 OPC_6502X_80 +#define OPC_6502X_E2 OPC_6502X_80 +#define OPC_6502X_89 OPC_6502X_80 -static void OPC_6502_80 (void) +static void OPC_6502X_80 (void) /* Opcode $80: NOP imm */ { ALU_OP_IMM (NOP); @@ -2563,7 +2564,7 @@ static void OPC_6502_80 (void) -static void OPC_65SC02_80 (void) +static void OPC_65C02_80 (void) /* Opcode $80: BRA */ { BRANCH (1); @@ -2579,7 +2580,7 @@ static void OPC_6502_81 (void) -static void OPC_6502_83 (void) +static void OPC_6502X_83 (void) /* Opcode $83: SAX (zp,x) */ { STO_OP (ZPXIND, Regs.AC & Regs.XR); @@ -2611,7 +2612,7 @@ static void OPC_6502_86 (void) -static void OPC_6502_87 (void) +static void OPC_6502X_87 (void) /* Opcode $87: SAX zp */ { STO_OP (ZP, Regs.AC & Regs.XR); @@ -2637,7 +2638,7 @@ static void OPC_6502_88 (void) -static void OPC_65SC02_89 (void) +static void OPC_65C02_89 (void) /* Opcode $89: BIT #imm */ { /* Note: BIT #imm behaves differently from BIT with other addressing modes, @@ -2659,7 +2660,7 @@ static void OPC_6502_8A (void) -static void OPC_6502_8B (void) +static void OPC_6502X_8B (void) /* Opcode $8B: ANE imm */ { ALU_OP_IMM (ANE); @@ -2691,7 +2692,7 @@ static void OPC_6502_8E (void) -static void OPC_6502_8F (void) +static void OPC_6502X_8F (void) /* Opcode $8F: SAX abs */ { STO_OP (ABS, Regs.AC & Regs.XR); @@ -2723,7 +2724,7 @@ static void OPC_6502_91 (void) -static void OPC_65SC02_92 (void) +static void OPC_65C02_92 (void) /* Opcode $92: sta (zp) */ { STO_OP (ZPIND, Regs.AC); @@ -2731,7 +2732,7 @@ static void OPC_65SC02_92 (void) -static void OPC_6502_93 (void) +static void OPC_6502X_93 (void) /* Opcode $93: SHA (zp),y */ { ++Regs.PC; @@ -2776,7 +2777,7 @@ static void OPC_6502_96 (void) -static void OPC_6502_97 (void) +static void OPC_6502X_97 (void) /* Opcode $97: SAX zp,y */ { STO_OP (ZPY, Regs.AC & Regs.XR); @@ -2822,7 +2823,7 @@ static void OPC_6502_9A (void) -static void OPC_6502_9B (void) +static void OPC_6502X_9B (void) /* Opcode $9B: TAS abs,y */ { ++Regs.PC; @@ -2843,7 +2844,7 @@ static void OPC_6502_9B (void) -static void OPC_6502_9C (void) +static void OPC_6502X_9C (void) /* Opcode $9D: SHY abs,x */ { ++Regs.PC; @@ -2863,7 +2864,7 @@ static void OPC_6502_9C (void) -static void OPC_65SC02_9C (void) +static void OPC_65C02_9C (void) /* Opcode $9C: STZ abs */ { STO_OP (ABS, 0); @@ -2879,7 +2880,7 @@ static void OPC_6502_9D (void) -static void OPC_6502_9E (void) +static void OPC_6502X_9E (void) /* Opcode $9E: SHX abs,x */ { ++Regs.PC; @@ -2899,7 +2900,7 @@ static void OPC_6502_9E (void) -static void OPC_65SC02_9E (void) +static void OPC_65C02_9E (void) /* Opcode $9E: STZ abs,x */ { STO_OP (ABSX_NP, 0); @@ -2907,7 +2908,7 @@ static void OPC_65SC02_9E (void) -static void OPC_6502_9F (void) +static void OPC_6502X_9F (void) /* Opcode $9F: SHA abs,y */ { ++Regs.PC; @@ -2959,7 +2960,7 @@ static void OPC_6502_A2 (void) -static void OPC_6502_A3 (void) +static void OPC_6502X_A3 (void) /* Opcode $A3: LAX (zp,x) */ { ALU_OP (ZPXIND, LAX); @@ -2991,7 +2992,7 @@ static void OPC_6502_A6 (void) -static void OPC_6502_A7 (void) +static void OPC_6502X_A7 (void) /* Opcode $A7: LAX zp */ { ALU_OP (ZP, LAX); @@ -3039,7 +3040,7 @@ static void OPC_6502_AA (void) -static void OPC_6502_AB (void) +static void OPC_6502X_AB (void) /* Opcode $AB: LXA imm */ { ALU_OP_IMM (LXA); @@ -3071,7 +3072,7 @@ static void OPC_6502_AE (void) -static void OPC_6502_AF (void) +static void OPC_6502X_AF (void) /* Opcode $AF: LAX abs */ { ALU_OP (ABS, LAX); @@ -3103,7 +3104,7 @@ static void OPC_6502_B1 (void) -static void OPC_65SC02_B2 (void) +static void OPC_65C02_B2 (void) /* Opcode $B2: LDA (zp) */ { ALU_OP (ZPIND, LDA); @@ -3111,7 +3112,7 @@ static void OPC_65SC02_B2 (void) -static void OPC_6502_B3 (void) +static void OPC_6502X_B3 (void) /* Opcode $B3: LAX (zp),y */ { ALU_OP (ZPINDY, LAX); @@ -3143,7 +3144,7 @@ static void OPC_6502_B6 (void) -static void OPC_6502_B7 (void) +static void OPC_6502X_B7 (void) /* Opcode $B7: LAX zp,y */ { ALU_OP (ZPY, LAX); @@ -3189,7 +3190,7 @@ static void OPC_6502_BA (void) -static void OPC_6502_BB (void) +static void OPC_6502X_BB (void) /* Opcode $BB: LAS abs,y */ { ALU_OP (ABSY, LAS); @@ -3221,7 +3222,7 @@ static void OPC_6502_BE (void) -static void OPC_6502_BF (void) +static void OPC_6502X_BF (void) /* Opcode $BF: LAX abs,y */ { ALU_OP (ABSY, LAX); @@ -3253,7 +3254,7 @@ static void OPC_6502_C1 (void) -static void OPC_6502_C3 (void) +static void OPC_6502X_C3 (void) /* Opcode $C3: DCP (zp,x) */ { MEM_OP (ZPXIND, DCP); @@ -3285,7 +3286,7 @@ static void OPC_6502_C6 (void) -static void OPC_6502_C7 (void) +static void OPC_6502X_C7 (void) /* Opcode $C7: DCP zp */ { MEM_OP (ZP, DCP); @@ -3329,7 +3330,7 @@ static void OPC_6502_CA (void) -static void OPC_6502_CB (void) +static void OPC_6502X_CB (void) /* Opcode $CB: SBX imm */ { ALU_OP_IMM (SBX); @@ -3361,7 +3362,7 @@ static void OPC_6502_CE (void) -static void OPC_6502_CF (void) +static void OPC_6502X_CF (void) /* Opcode $CF: DCP abs */ { MEM_OP (ABS, DCP); @@ -3393,7 +3394,7 @@ static void OPC_6502_D1 (void) -static void OPC_65SC02_D2 (void) +static void OPC_65C02_D2 (void) /* Opcode $D2: CMP (zp) */ { ALU_OP (ZPIND, CMP); @@ -3401,7 +3402,7 @@ static void OPC_65SC02_D2 (void) -static void OPC_6502_D3 (void) +static void OPC_6502X_D3 (void) /* Opcode $D3: DCP (zp),y */ { MEM_OP (ZPINDY_NP, DCP); @@ -3425,7 +3426,7 @@ static void OPC_6502_D6 (void) -static void OPC_6502_D7 (void) +static void OPC_6502X_D7 (void) /* Opcode $D7: DCP zp,x */ { MEM_OP (ZPX, DCP); @@ -3459,7 +3460,7 @@ static void OPC_6502_D9 (void) -static void OPC_65SC02_DA (void) +static void OPC_65C02_DA (void) /* Opcode $DA: PHX */ { Cycles = 3; @@ -3469,7 +3470,7 @@ static void OPC_65SC02_DA (void) -static void OPC_6502_DB (void) +static void OPC_6502X_DB (void) /* Opcode $DB: DCP abs,y */ { MEM_OP (ABSY_NP, DCP); @@ -3493,7 +3494,7 @@ static void OPC_6502_DE (void) -static void OPC_6502_DF (void) +static void OPC_6502X_DF (void) /* Opcode $DF: DCP abs,x */ { MEM_OP (ABSX_NP, DCP); @@ -3531,7 +3532,9 @@ static void OPC_65C02_E1 (void) ALU_OP (ZPXIND, SBC_65C02); } -static void OPC_6502_E3 (void) + + +static void OPC_6502X_E3 (void) /* Opcode $E3: ISC (zp,x) */ { MEM_OP (ZPXIND, ISC); @@ -3571,7 +3574,7 @@ static void OPC_6502_E6 (void) -static void OPC_6502_E7 (void) +static void OPC_6502X_E7 (void) /* Opcode $E7: ISC zp */ { MEM_OP (ZP, ISC); @@ -3598,7 +3601,7 @@ static void OPC_6502_E8 (void) /* Aliases of opcode $E9 */ -#define OPC_6502_EB OPC_6502_E9 +#define OPC_6502X_EB OPC_6502_E9 static void OPC_6502_E9 (void) /* Opcode $E9: SBC #imm */ @@ -3615,12 +3618,12 @@ static void OPC_65C02_E9 (void) } /* Aliases of opcode $EA */ -#define OPC_6502_1A OPC_6502_EA -#define OPC_6502_3A OPC_6502_EA -#define OPC_6502_5A OPC_6502_EA -#define OPC_6502_7A OPC_6502_EA -#define OPC_6502_DA OPC_6502_EA -#define OPC_6502_FA OPC_6502_EA +#define OPC_6502X_1A OPC_6502_EA +#define OPC_6502X_3A OPC_6502_EA +#define OPC_6502X_5A OPC_6502_EA +#define OPC_6502X_7A OPC_6502_EA +#define OPC_6502X_DA OPC_6502_EA +#define OPC_6502X_FA OPC_6502_EA static void OPC_6502_EA (void) /* Opcode $EA: NOP */ @@ -3699,7 +3702,7 @@ static void OPC_6502_EE (void) -static void OPC_6502_EF (void) +static void OPC_6502X_EF (void) /* Opcode $EF: ISC abs */ { MEM_OP (ABS, ISC); @@ -3731,7 +3734,6 @@ static void OPC_6502_F1 (void) - static void OPC_65C02_F1 (void) /* Opcode $F1: SBC (zp),y */ { @@ -3748,7 +3750,7 @@ static void OPC_65C02_F2 (void) -static void OPC_6502_F3 (void) +static void OPC_6502X_F3 (void) /* Opcode $F3: ISC (zp),y */ { MEM_OP (ZPINDY_NP, ISC); @@ -3780,7 +3782,7 @@ static void OPC_6502_F6 (void) -static void OPC_6502_F7 (void) +static void OPC_6502X_F7 (void) /* Opcode $F7: ISC zp,x */ { MEM_OP (ZPX, ISC); @@ -3822,7 +3824,7 @@ static void OPC_65C02_F9 (void) -static void OPC_65SC02_FA (void) +static void OPC_65C02_FA (void) /* Opcode $7A: PLX */ { Cycles = 4; @@ -3834,7 +3836,7 @@ static void OPC_65SC02_FA (void) -static void OPC_6502_FB (void) +static void OPC_6502X_FB (void) /* Opcode $FB: ISC abs,y */ { MEM_OP (ABSY_NP, ISC); @@ -3866,7 +3868,7 @@ static void OPC_6502_FE (void) -static void OPC_6502_FF (void) +static void OPC_6502X_FF (void) /* Opcode $FF: ISC abs,x */ { MEM_OP (ABSX_NP, ISC); @@ -4155,259 +4157,259 @@ static const OPFunc OP6502XTable[256] = { OPC_6502_00, OPC_6502_01, OPC_Illegal, - OPC_6502_03, - OPC_6502_04, + OPC_6502X_03, + OPC_6502X_04, OPC_6502_05, OPC_6502_06, - OPC_6502_07, + OPC_6502X_07, OPC_6502_08, OPC_6502_09, OPC_6502_0A, - OPC_6502_0B, - OPC_6502_0C, + OPC_6502X_0B, + OPC_6502X_0C, OPC_6502_0D, OPC_6502_0E, - OPC_6502_0F, + OPC_6502X_0F, OPC_6502_10, OPC_6502_11, OPC_Illegal, - OPC_6502_13, - OPC_6502_14, + OPC_6502X_13, + OPC_6502X_14, OPC_6502_15, OPC_6502_16, - OPC_6502_17, + OPC_6502X_17, OPC_6502_18, OPC_6502_19, - OPC_6502_1A, - OPC_6502_1B, - OPC_6502_1C, + OPC_6502X_1A, + OPC_6502X_1B, + OPC_6502X_1C, OPC_6502_1D, OPC_6502_1E, - OPC_6502_1F, + OPC_6502X_1F, OPC_6502_20, OPC_6502_21, OPC_Illegal, - OPC_6502_23, + OPC_6502X_23, OPC_6502_24, OPC_6502_25, OPC_6502_26, - OPC_6502_27, + OPC_6502X_27, OPC_6502_28, OPC_6502_29, OPC_6502_2A, - OPC_6502_2B, + OPC_6502X_2B, OPC_6502_2C, OPC_6502_2D, OPC_6502_2E, - OPC_6502_2F, + OPC_6502X_2F, OPC_6502_30, OPC_6502_31, OPC_Illegal, - OPC_6502_33, - OPC_6502_34, + OPC_6502X_33, + OPC_6502X_34, OPC_6502_35, OPC_6502_36, - OPC_6502_37, + OPC_6502X_37, OPC_6502_38, OPC_6502_39, - OPC_6502_3A, - OPC_6502_3B, - OPC_6502_3C, + OPC_6502X_3A, + OPC_6502X_3B, + OPC_6502X_3C, OPC_6502_3D, OPC_6502_3E, - OPC_6502_3F, + OPC_6502X_3F, OPC_6502_40, OPC_6502_41, OPC_Illegal, - OPC_6502_43, - OPC_6502_44, + OPC_6502X_43, + OPC_6502X_44, OPC_6502_45, OPC_6502_46, - OPC_6502_47, + OPC_6502X_47, OPC_6502_48, OPC_6502_49, OPC_6502_4A, - OPC_6502_4B, + OPC_6502X_4B, OPC_6502_4C, OPC_6502_4D, OPC_6502_4E, - OPC_6502_4F, + OPC_6502X_4F, OPC_6502_50, OPC_6502_51, OPC_Illegal, - OPC_6502_53, - OPC_6502_54, + OPC_6502X_53, + OPC_6502X_54, OPC_6502_55, OPC_6502_56, - OPC_6502_57, + OPC_6502X_57, OPC_6502_58, OPC_6502_59, - OPC_6502_5A, - OPC_6502_5B, - OPC_6502_5C, + OPC_6502X_5A, + OPC_6502X_5B, + OPC_6502X_5C, OPC_6502_5D, OPC_6502_5E, - OPC_6502_5F, + OPC_6502X_5F, OPC_6502_60, OPC_6502_61, OPC_Illegal, - OPC_6502_63, - OPC_6502_64, + OPC_6502X_63, + OPC_6502X_64, OPC_6502_65, OPC_6502_66, - OPC_6502_67, + OPC_6502X_67, OPC_6502_68, OPC_6502_69, OPC_6502_6A, - OPC_6502_6B, + OPC_6502X_6B, OPC_6502_6C, OPC_6502_6D, OPC_6502_6E, - OPC_6502_6F, + OPC_6502X_6F, OPC_6502_70, OPC_6502_71, OPC_Illegal, - OPC_6502_73, - OPC_6502_74, + OPC_6502X_73, + OPC_6502X_74, OPC_6502_75, OPC_6502_76, - OPC_6502_77, + OPC_6502X_77, OPC_6502_78, OPC_6502_79, - OPC_6502_7A, - OPC_6502_7B, - OPC_6502_7C, + OPC_6502X_7A, + OPC_6502X_7B, + OPC_6502X_7C, OPC_6502_7D, OPC_6502_7E, - OPC_6502_7F, - OPC_6502_80, + OPC_6502X_7F, + OPC_6502X_80, OPC_6502_81, - OPC_6502_82, - OPC_6502_83, + OPC_6502X_82, + OPC_6502X_83, OPC_6502_84, OPC_6502_85, OPC_6502_86, - OPC_6502_87, + OPC_6502X_87, OPC_6502_88, - OPC_6502_89, + OPC_6502X_89, OPC_6502_8A, - OPC_6502_8B, + OPC_6502X_8B, OPC_6502_8C, OPC_6502_8D, OPC_6502_8E, - OPC_6502_8F, + OPC_6502X_8F, OPC_6502_90, OPC_6502_91, OPC_Illegal, - OPC_6502_93, + OPC_6502X_93, OPC_6502_94, OPC_6502_95, OPC_6502_96, - OPC_6502_97, + OPC_6502X_97, OPC_6502_98, OPC_6502_99, OPC_6502_9A, - OPC_6502_9B, - OPC_6502_9C, + OPC_6502X_9B, + OPC_6502X_9C, OPC_6502_9D, - OPC_6502_9E, - OPC_6502_9F, + OPC_6502X_9E, + OPC_6502X_9F, OPC_6502_A0, OPC_6502_A1, OPC_6502_A2, - OPC_6502_A3, + OPC_6502X_A3, OPC_6502_A4, OPC_6502_A5, OPC_6502_A6, - OPC_6502_A7, + OPC_6502X_A7, OPC_6502_A8, OPC_6502_A9, OPC_6502_AA, - OPC_6502_AB, + OPC_6502X_AB, OPC_6502_AC, OPC_6502_AD, OPC_6502_AE, - OPC_6502_AF, + OPC_6502X_AF, OPC_6502_B0, OPC_6502_B1, OPC_Illegal, - OPC_6502_B3, + OPC_6502X_B3, OPC_6502_B4, OPC_6502_B5, OPC_6502_B6, - OPC_6502_B7, + OPC_6502X_B7, OPC_6502_B8, OPC_6502_B9, OPC_6502_BA, - OPC_6502_BB, + OPC_6502X_BB, OPC_6502_BC, OPC_6502_BD, OPC_6502_BE, - OPC_6502_BF, + OPC_6502X_BF, OPC_6502_C0, OPC_6502_C1, - OPC_6502_C2, - OPC_6502_C3, + OPC_6502X_C2, + OPC_6502X_C3, OPC_6502_C4, OPC_6502_C5, OPC_6502_C6, - OPC_6502_C7, + OPC_6502X_C7, OPC_6502_C8, OPC_6502_C9, OPC_6502_CA, - OPC_6502_CB, + OPC_6502X_CB, OPC_6502_CC, OPC_6502_CD, OPC_6502_CE, - OPC_6502_CF, + OPC_6502X_CF, OPC_6502_D0, OPC_6502_D1, OPC_Illegal, - OPC_6502_D3, - OPC_6502_D4, + OPC_6502X_D3, + OPC_6502X_D4, OPC_6502_D5, OPC_6502_D6, - OPC_6502_D7, + OPC_6502X_D7, OPC_6502_D8, OPC_6502_D9, - OPC_6502_DA, - OPC_6502_DB, - OPC_6502_DC, + OPC_6502X_DA, + OPC_6502X_DB, + OPC_6502X_DC, OPC_6502_DD, OPC_6502_DE, - OPC_6502_DF, + OPC_6502X_DF, OPC_6502_E0, OPC_6502_E1, - OPC_6502_E2, - OPC_6502_E3, + OPC_6502X_E2, + OPC_6502X_E3, OPC_6502_E4, OPC_6502_E5, OPC_6502_E6, - OPC_6502_E7, + OPC_6502X_E7, OPC_6502_E8, OPC_6502_E9, OPC_6502_EA, - OPC_6502_EB, + OPC_6502X_EB, OPC_6502_EC, OPC_6502_ED, OPC_6502_EE, - OPC_6502_EF, + OPC_6502X_EF, OPC_6502_F0, OPC_6502_F1, OPC_Illegal, - OPC_6502_F3, - OPC_6502_F4, + OPC_6502X_F3, + OPC_6502X_F4, OPC_6502_F5, OPC_6502_F6, - OPC_6502_F7, + OPC_6502X_F7, OPC_6502_F8, OPC_6502_F9, - OPC_6502_FA, - OPC_6502_FB, - OPC_6502_FC, + OPC_6502X_FA, + OPC_6502X_FB, + OPC_6502X_FC, OPC_6502_FD, OPC_6502_FE, - OPC_6502_FF + OPC_6502X_FF }; @@ -4418,7 +4420,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_01, OPC_65C02_NOP22, // $02 OPC_65C02_NOP11, // $03 - OPC_65SC02_04, + OPC_65C02_04, OPC_6502_05, OPC_6502_06, OPC_65C02_07, @@ -4426,23 +4428,23 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_09, OPC_6502_0A, OPC_65C02_NOP11, // $0B - OPC_65SC02_0C, + OPC_65C02_0C, OPC_6502_0D, OPC_6502_0E, OPC_65C02_0F, OPC_6502_10, OPC_6502_11, - OPC_65SC02_12, + OPC_65C02_12, OPC_65C02_NOP11, // $13 - OPC_65SC02_14, + OPC_65C02_14, OPC_6502_15, OPC_6502_16, OPC_65C02_17, OPC_6502_18, OPC_6502_19, - OPC_65SC02_1A, + OPC_65C02_1A, OPC_65C02_NOP11, // $1B - OPC_65SC02_1C, + OPC_65C02_1C, OPC_6502_1D, OPC_65C02_1E, OPC_65C02_1F, @@ -4464,17 +4466,17 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_2F, OPC_6502_30, OPC_6502_31, - OPC_65SC02_32, + OPC_65C02_32, OPC_65C02_NOP11, // $33 - OPC_65SC02_34, + OPC_65C02_34, OPC_6502_35, OPC_6502_36, OPC_65C02_37, OPC_6502_38, OPC_6502_39, - OPC_65SC02_3A, + OPC_65C02_3A, OPC_65C02_NOP11, // $3B - OPC_65SC02_3C, + OPC_65C02_3C, OPC_6502_3D, OPC_65C02_3E, OPC_65C02_3F, @@ -4482,7 +4484,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_41, OPC_65C02_NOP22, // $42 OPC_65C02_NOP11, // $43 - OPC_6502_44, // $44 + OPC_6502X_44, // $44 OPC_6502_45, OPC_6502_46, OPC_65C02_47, @@ -4496,7 +4498,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_4F, OPC_6502_50, OPC_6502_51, - OPC_65SC02_52, + OPC_65C02_52, OPC_65C02_NOP11, // $53 OPC_65C02_NOP24, // $54 OPC_6502_55, @@ -4504,7 +4506,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_57, OPC_6502_58, OPC_6502_59, - OPC_65SC02_5A, + OPC_65C02_5A, OPC_65C02_NOP11, // $5B OPC_65C02_5C, OPC_6502_5D, @@ -4514,7 +4516,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_61, OPC_65C02_NOP22, // $62 OPC_65C02_NOP11, // $63 - OPC_65SC02_64, + OPC_65C02_64, OPC_65C02_65, OPC_6502_66, OPC_65C02_67, @@ -4530,19 +4532,19 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_71, OPC_65C02_72, OPC_65C02_NOP11, // $73 - OPC_65SC02_74, + OPC_65C02_74, OPC_65C02_75, OPC_6502_76, OPC_65C02_77, OPC_6502_78, OPC_65C02_79, - OPC_65SC02_7A, + OPC_65C02_7A, OPC_65C02_NOP11, // $7B - OPC_65SC02_7C, + OPC_65C02_7C, OPC_65C02_7D, OPC_65C02_7E, OPC_65C02_7F, - OPC_65SC02_80, + OPC_65C02_80, OPC_6502_81, OPC_65C02_NOP22, // $82 OPC_65C02_NOP11, // $83 @@ -4551,7 +4553,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_86, OPC_65C02_87, OPC_6502_88, - OPC_65SC02_89, + OPC_65C02_89, OPC_6502_8A, OPC_65C02_NOP11, // $8B OPC_6502_8C, @@ -4560,7 +4562,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_8F, OPC_6502_90, OPC_6502_91, - OPC_65SC02_92, + OPC_65C02_92, OPC_65C02_NOP11, // $93 OPC_6502_94, OPC_6502_95, @@ -4570,9 +4572,9 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_99, OPC_6502_9A, OPC_65C02_NOP11, // $9B - OPC_65SC02_9C, + OPC_65C02_9C, OPC_6502_9D, - OPC_65SC02_9E, + OPC_65C02_9E, OPC_65C02_9F, OPC_6502_A0, OPC_6502_A1, @@ -4592,7 +4594,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_AF, OPC_6502_B0, OPC_6502_B1, - OPC_65SC02_B2, + OPC_65C02_B2, OPC_65C02_NOP11, // $B3 OPC_6502_B4, OPC_6502_B5, @@ -4624,7 +4626,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_CF, OPC_6502_D0, OPC_6502_D1, - OPC_65SC02_D2, + OPC_65C02_D2, OPC_65C02_NOP11, // $D3 OPC_65C02_NOP24, // $D4 OPC_6502_D5, @@ -4632,7 +4634,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_D7, OPC_6502_D8, OPC_6502_D9, - OPC_65SC02_DA, + OPC_65C02_DA, OPC_Illegal, // $DB: STP currently unsupported OPC_65C02_NOP34, // $DC OPC_6502_DD, @@ -4664,7 +4666,7 @@ static const OPFunc OP65C02Table[256] = { OPC_65C02_F7, OPC_6502_F8, OPC_65C02_F9, - OPC_65SC02_FA, + OPC_65C02_FA, OPC_65C02_NOP11, // $FB OPC_65C02_NOP34, // $FC OPC_65C02_FD, @@ -4693,7 +4695,7 @@ void IRQRequest (void) /* Generate an IRQ */ { /* Remember the request */ - HaveIRQRequest = 1; + HaveIRQRequest = true; } @@ -4702,7 +4704,7 @@ void NMIRequest (void) /* Generate an NMI */ { /* Remember the request */ - HaveNMIRequest = 1; + HaveNMIRequest = true; } @@ -4711,8 +4713,8 @@ void Reset (void) /* Generate a CPU RESET */ { /* Reset the CPU */ - HaveIRQRequest = 0; - HaveNMIRequest = 0; + HaveIRQRequest = false; + HaveNMIRequest = false; /* Bits 5 and 4 aren't used, and always are 1! */ Regs.SR = 0x30; @@ -4727,7 +4729,7 @@ unsigned ExecuteInsn (void) /* If we have an NMI request, handle it */ if (HaveNMIRequest) { - HaveNMIRequest = 0; + HaveNMIRequest = false; PUSH (PCH); PUSH (PCL); PUSH (Regs.SR & ~BF); @@ -4741,7 +4743,7 @@ unsigned ExecuteInsn (void) } else if (HaveIRQRequest && GET_IF () == 0) { - HaveIRQRequest = 0; + HaveIRQRequest = false; PUSH (PCH); PUSH (PCL); PUSH (Regs.SR & ~BF); @@ -4756,12 +4758,12 @@ unsigned ExecuteInsn (void) } else { /* Normal instruction - read the next opcode */ - unsigned char OPC = MemReadByte (Regs.PC); + uint8_t OPC = MemReadByte (Regs.PC); /* Execute it */ Handlers[CPU][OPC] (); } - /* Return the number of clock cycles needed by this insn */ + /* Return the number of clock cycles needed by this instruction */ return Cycles; } From e37a2b1559570d567e35ae55928280b09b3655d1 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Tue, 31 Dec 2024 13:35:16 +0100 Subject: [PATCH 2618/2710] Updated documentation with counter documentation. --- doc/sim65.sgml | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/doc/sim65.sgml b/doc/sim65.sgml index 962f07254..9c54c71f3 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -151,6 +151,71 @@ int main() // sim65 example.prg </verb></tscreen> +<sect>Counter peripheral<p> + +The sim65 simulator supports a memory-mapped counter peripheral that manages +a number of 64-bit counters that are continuously updated as the simulator is +running. For each counter, it also provides a 64 bit "latching" register. + +The functionality of the counter peripheral is accessible through 3 registers: + +* PERIPHERALS_COUNTER_LATCH ($FFC0, write-only) +* PERIPHERALS_COUNTER_SELECT ($FFC1, read/write) +* PERIPHERALS_COUNTER_VALUE ($FFC2..$FFC9, read-only) + +These three registers are used as follows. + +When a program explicitly requests a "counter latch" operation by writing any value +to the PERIPHERALS_COUNTER_LATCH address ($FFC0), all live registers are copied to +the latch registers. They will keep the latched value until another latch operation +updates them. + +The PERIPHERALS_COUNTER_SELECT address ($FFC1) register holds an 8-bit value that +specifies which 64-bit value is currently readable through the PERIPHERALS_COUNTER_VALUE +address range. Possible values are: + +$00: latched clock cycle counter selected. +$01: latched CPU instruction counter selected. +$02: latched IRQ interrupt counter selected. +$03: latched NMI interrupt counter selected. + +In addition to these counters, two other latch registers are available that are also +updated when the PERIPHERALS_COUNTER_LATCH address is written: + +$80: latched wallclock time (nanoseconds) selected. +$81: latched wallclock time (split s/ns) selected. + +When PERIPHERALS_COUNTER_LATCH equals $80, the PERIPHERALS_COUNTER_VALUE will be a +64-bit value corresponding to the number of nanoseconds elapsed since Midnight, Jan 1st, +1970 UTC. + +When PERIPHERALS_COUNTER_LATCH equals $81, the high 32 bits of PERIPHERALS_COUNTER_VALUE +will be a 32-bit value corresponding to the number of seconds elapsed since Midnight, +Jan 1st, 1970 UTC. The low 32 bits of PERIPHERALS_COUNTER_VALUE will hold the +nanoseconds since the start of that seconds. + +The two different wallclock-time latch registers are provided for different applications. +For some applications, the single 64-bit value will be more convenient, while for other +applications, the split 32/32 bits representations with separate seconds and nanoseconds +is more convenient. + +Note that the definition above given as "time since Midnight, Jan 1st, 1970 UTC" is an +approximation, as the implementation depends on the POSIX definition of time which does +not account for leap seconds. + +If the PERIPHERALS_COUNTER_SELECT register holds a value other than one of the six values +described above, all PERIPHERALS_COUNTER_VALUE bytes will read as zero. + +On reset, PERIPHERALS_COUNTER_SELECT is initialized to zero. + +The PERIPHERALS_COUNTER_VALUE addresses ($FFC2..$FFC9) are used to read to currently +selected latch register value. Address $FFF2 holds the least significant byte (LSB), +while address $FFC9 holds the most significant byte (MSB). + +On reset, all latch registers are reset to zero. this means that reading any of the +PERIPHERALS_COUNTER_VALUE bytes before a write to PERIPHERALS_COUNTER_LATCH will +yield zero. + <sect>Creating a Test in Assembly<p> Though a C test may also link with assembly code, From f95a60d5ad7249e0f40e41356595b6839a56d418 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Tue, 31 Dec 2024 13:48:45 +0100 Subject: [PATCH 2619/2710] Updating sim65 docs. --- doc/sim65.sgml | 71 ++++++++++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/doc/sim65.sgml b/doc/sim65.sgml index 9c54c71f3..7d54b87b9 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -151,70 +151,73 @@ int main() // sim65 example.prg </verb></tscreen> -<sect>Counter peripheral<p> +<sect>Counter peripheral -The sim65 simulator supports a memory-mapped counter peripheral that manages +<p>The sim65 simulator supports a memory-mapped counter peripheral that manages a number of 64-bit counters that are continuously updated as the simulator is running. For each counter, it also provides a 64 bit "latching" register. -The functionality of the counter peripheral is accessible through 3 registers: +<p>The functionality of the counter peripheral is accessible through 3 registers: -* PERIPHERALS_COUNTER_LATCH ($FFC0, write-only) -* PERIPHERALS_COUNTER_SELECT ($FFC1, read/write) -* PERIPHERALS_COUNTER_VALUE ($FFC2..$FFC9, read-only) +<itemize> +<item><tt>PERIPHERALS_COUNTER_LATCH</tt> ($FFC0, write-only) +<item><tt>PERIPHERALS_COUNTER_SELECT</tt> ($FFC1, read/write) +<item><tt>PERIPHERALS_COUNTER_VALUE</tt> ($FFC2..$FFC9, read-only) +</itemize> -These three registers are used as follows. +<p>These three registers are used as follows. -When a program explicitly requests a "counter latch" operation by writing any value -to the PERIPHERALS_COUNTER_LATCH address ($FFC0), all live registers are copied to +<p>When a program explicitly requests a "counter latch" operation by writing any value +to the <tt>PERIPHERALS_COUNTER_LATCH</tt> address ($FFC0), all live registers are copied to the latch registers. They will keep the latched value until another latch operation updates them. -The PERIPHERALS_COUNTER_SELECT address ($FFC1) register holds an 8-bit value that -specifies which 64-bit value is currently readable through the PERIPHERALS_COUNTER_VALUE -address range. Possible values are: +<p>The <tt>PERIPHERALS_COUNTER_SELECT</tt> address ($FFC1) register holds an 8-bit value that +specifies which 64-bit value is currently readable through the <tt>PERIPHERALS_COUNTER_VALUE</tt> +address range. Six values are currently defined: -$00: latched clock cycle counter selected. -$01: latched CPU instruction counter selected. -$02: latched IRQ interrupt counter selected. -$03: latched NMI interrupt counter selected. +<itemize> +<item>$00: latched clock cycle counter selected. +<item>$01: latched CPU instruction counter selected. +<item>$02: latched IRQ interrupt counter selected. +<item>$03: latched NMI interrupt counter selected. +<item>$80: latched wallclock time (nanoseconds) selected. +<item>$81: latched wallclock time (split s/ns) selected. +</itemize> -In addition to these counters, two other latch registers are available that are also -updated when the PERIPHERALS_COUNTER_LATCH address is written: +<p>Values $00 to $03 provide access to the latched (frozen) value of their respective live +counters at the time of the last write to <tt>PERIPHERALS_COUNTER_LATCH</tt> . -$80: latched wallclock time (nanoseconds) selected. -$81: latched wallclock time (split s/ns) selected. - -When PERIPHERALS_COUNTER_LATCH equals $80, the PERIPHERALS_COUNTER_VALUE will be a -64-bit value corresponding to the number of nanoseconds elapsed since Midnight, Jan 1st, +<p>When <tt>PERIPHERALS_COUNTER_LATCH</tt> equals $80, the <tt>PERIPHERALS_COUNTER_VALUE</tt> +will be a 64-bit value corresponding to the number of nanoseconds elapsed since Midnight, Jan 1st, 1970 UTC. -When PERIPHERALS_COUNTER_LATCH equals $81, the high 32 bits of PERIPHERALS_COUNTER_VALUE +<p>When <tt>PERIPHERALS_COUNTER_LATCH</tt> equals $81, the high 32 bits of <tt>PERIPHERALS_COUNTER_VALUE</tt> will be a 32-bit value corresponding to the number of seconds elapsed since Midnight, -Jan 1st, 1970 UTC. The low 32 bits of PERIPHERALS_COUNTER_VALUE will hold the +Jan 1st, 1970 UTC. The low 32 bits of <tt>PERIPHERALS_COUNTER_VALUE</tt> will hold the nanoseconds since the start of that seconds. -The two different wallclock-time latch registers are provided for different applications. +<p>The two different wallclock-time latch registers are provided for different applications. For some applications, the single 64-bit value will be more convenient, while for other applications, the split 32/32 bits representations with separate seconds and nanoseconds is more convenient. -Note that the definition above given as "time since Midnight, Jan 1st, 1970 UTC" is an +<p>Note that the definition above given as time since Midnight, Jan 1st, 1970 UTC is an approximation, as the implementation depends on the POSIX definition of time which does not account for leap seconds. -If the PERIPHERALS_COUNTER_SELECT register holds a value other than one of the six values -described above, all PERIPHERALS_COUNTER_VALUE bytes will read as zero. +<p>If the <tt>PERIPHERALS_COUNTER_SELECT</tt> register holds a value other than one of the six +values described above, all <tt>PERIPHERALS_COUNTER_VALUE</tt> bytes will read as zero. -On reset, PERIPHERALS_COUNTER_SELECT is initialized to zero. +<p>On reset, <tt>PERIPHERALS_COUNTER_SELECT</tt> is initialized to zero. -The PERIPHERALS_COUNTER_VALUE addresses ($FFC2..$FFC9) are used to read to currently +<p>The <tt>PERIPHERALS_COUNTER_VALUE</tt> addresses ($FFC2..$FFC9) are used to read to currently selected latch register value. Address $FFF2 holds the least significant byte (LSB), while address $FFC9 holds the most significant byte (MSB). -On reset, all latch registers are reset to zero. this means that reading any of the -PERIPHERALS_COUNTER_VALUE bytes before a write to PERIPHERALS_COUNTER_LATCH will -yield zero. +<p>On reset, all latch registers are reset to zero. this means that reading any of the +<tt>PERIPHERALS_COUNTER_VALUE</tt> bytes before a write to <tt>PERIPHERALS_COUNTER_LATCH</tt> +will yield zero. <sect>Creating a Test in Assembly<p> From d8df73c36d6dfab9033cb24c4e206cb468d1fafd Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Tue, 31 Dec 2024 17:54:58 +0100 Subject: [PATCH 2620/2710] Improved counter peripheral documentation, and moved its documentation to the end of the page just before the copyright notice. --- doc/sim65.sgml | 134 ++++++++++++++++++++++++------------------------- 1 file changed, 66 insertions(+), 68 deletions(-) diff --git a/doc/sim65.sgml b/doc/sim65.sgml index 7d54b87b9..f8e5caf19 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -151,74 +151,6 @@ int main() // sim65 example.prg </verb></tscreen> -<sect>Counter peripheral - -<p>The sim65 simulator supports a memory-mapped counter peripheral that manages -a number of 64-bit counters that are continuously updated as the simulator is -running. For each counter, it also provides a 64 bit "latching" register. - -<p>The functionality of the counter peripheral is accessible through 3 registers: - -<itemize> -<item><tt>PERIPHERALS_COUNTER_LATCH</tt> ($FFC0, write-only) -<item><tt>PERIPHERALS_COUNTER_SELECT</tt> ($FFC1, read/write) -<item><tt>PERIPHERALS_COUNTER_VALUE</tt> ($FFC2..$FFC9, read-only) -</itemize> - -<p>These three registers are used as follows. - -<p>When a program explicitly requests a "counter latch" operation by writing any value -to the <tt>PERIPHERALS_COUNTER_LATCH</tt> address ($FFC0), all live registers are copied to -the latch registers. They will keep the latched value until another latch operation -updates them. - -<p>The <tt>PERIPHERALS_COUNTER_SELECT</tt> address ($FFC1) register holds an 8-bit value that -specifies which 64-bit value is currently readable through the <tt>PERIPHERALS_COUNTER_VALUE</tt> -address range. Six values are currently defined: - -<itemize> -<item>$00: latched clock cycle counter selected. -<item>$01: latched CPU instruction counter selected. -<item>$02: latched IRQ interrupt counter selected. -<item>$03: latched NMI interrupt counter selected. -<item>$80: latched wallclock time (nanoseconds) selected. -<item>$81: latched wallclock time (split s/ns) selected. -</itemize> - -<p>Values $00 to $03 provide access to the latched (frozen) value of their respective live -counters at the time of the last write to <tt>PERIPHERALS_COUNTER_LATCH</tt> . - -<p>When <tt>PERIPHERALS_COUNTER_LATCH</tt> equals $80, the <tt>PERIPHERALS_COUNTER_VALUE</tt> -will be a 64-bit value corresponding to the number of nanoseconds elapsed since Midnight, Jan 1st, -1970 UTC. - -<p>When <tt>PERIPHERALS_COUNTER_LATCH</tt> equals $81, the high 32 bits of <tt>PERIPHERALS_COUNTER_VALUE</tt> -will be a 32-bit value corresponding to the number of seconds elapsed since Midnight, -Jan 1st, 1970 UTC. The low 32 bits of <tt>PERIPHERALS_COUNTER_VALUE</tt> will hold the -nanoseconds since the start of that seconds. - -<p>The two different wallclock-time latch registers are provided for different applications. -For some applications, the single 64-bit value will be more convenient, while for other -applications, the split 32/32 bits representations with separate seconds and nanoseconds -is more convenient. - -<p>Note that the definition above given as time since Midnight, Jan 1st, 1970 UTC is an -approximation, as the implementation depends on the POSIX definition of time which does -not account for leap seconds. - -<p>If the <tt>PERIPHERALS_COUNTER_SELECT</tt> register holds a value other than one of the six -values described above, all <tt>PERIPHERALS_COUNTER_VALUE</tt> bytes will read as zero. - -<p>On reset, <tt>PERIPHERALS_COUNTER_SELECT</tt> is initialized to zero. - -<p>The <tt>PERIPHERALS_COUNTER_VALUE</tt> addresses ($FFC2..$FFC9) are used to read to currently -selected latch register value. Address $FFF2 holds the least significant byte (LSB), -while address $FFC9 holds the most significant byte (MSB). - -<p>On reset, all latch registers are reset to zero. this means that reading any of the -<tt>PERIPHERALS_COUNTER_VALUE</tt> bytes before a write to <tt>PERIPHERALS_COUNTER_LATCH</tt> -will yield zero. - <sect>Creating a Test in Assembly<p> Though a C test may also link with assembly code, @@ -296,6 +228,72 @@ but if customization is needed <tt/sim6502.cfg/ or <tt/sim65c02.cfg/ might be us </itemize> +<sect>Counter peripheral + +<p>The sim65 simulator supports a memory-mapped counter peripheral that manages +a number of 64-bit counters that are continuously updated as the simulator is +running. For each counter, it also provides a 64 bit "latching" register. + +<p>The functionality of the counter peripheral is accessible through 3 registers: + +<itemize> +<item><tt>PERIPHERALS_COUNTER_LATCH</tt> ($FFC0, write-only) +<item><tt>PERIPHERALS_COUNTER_SELECT</tt> ($FFC1, read/write) +<item><tt>PERIPHERALS_COUNTER_VALUE</tt> ($FFC2..$FFC9, read-only) +</itemize> + +<p>These three registers are used as follows. + +<p>When a program explicitly requests a "counter latch" operation by writing any value +to the <tt>PERIPHERALS_COUNTER_LATCH</tt> address ($FFC0), all live registers are simultaneously +copied to the latch registers. They will keep the newly latched value until another latch +operation is requested. + +<p>The <tt>PERIPHERALS_COUNTER_SELECT</tt> address ($FFC1) register holds an 8-bit value that +specifies which 64-bit latch register is currently readable through the <tt>PERIPHERALS_COUNTER_VALUE</tt> +address range. Six values are currently defined: + +<itemize> +<item>$00: latched clock cycle counter selected. +<item>$01: latched CPU instruction counter selected. +<item>$02: latched IRQ interrupt counter selected. +<item>$03: latched NMI interrupt counter selected. +<item>$80: latched wallclock time (nanoseconds) selected. +<item>$81: latched wallclock time (split s/ns) selected. +</itemize> + +<p>Values $00 to $03 provide access to the latched (frozen) value of their respective live +counters at the time of the last write to <tt>PERIPHERALS_COUNTER_LATCH</tt>. + +<p>When <tt>PERIPHERALS_COUNTER_LATCH</tt> equals $80, the <tt>PERIPHERALS_COUNTER_VALUE</tt> +will be a 64-bit value corresponding to the number of nanoseconds elapsed since Midnight, Jan 1st, +1970 UTC, at the time of the last latch operation. + +<p>When <tt>PERIPHERALS_COUNTER_LATCH</tt> equals $81, the high 32 bits of <tt>PERIPHERALS_COUNTER_VALUE</tt> +will be a 32-bit value corresponding to the number of seconds elapsed since Midnight, +Jan 1st, 1970 UTC, at the time of the last latch operation. The low 32 bits of +<tt>PERIPHERALS_COUNTER_VALUE</tt> will hold the nanoseconds since the start of that second. + +<p>The two different wallclock-time latch registers will always refer to precisely the same time instant. +For some applications, the single 64-bit value measured in nanoseconds will be more convenient, while +for other applications, the split 32/32 bits representations with separate seconds and nanosecond +values will be more convenient. + +<p>Note that the definition above, with time elapsed measured since Midnight, Jan 1st, 1970 UTC is +an approximation, as the implementation depends on the way POSIX definition time, which does +not account for leap seconds (POSIX falsely assumes that all days are precisely 86400 seconds +long). + +<p>On reset, <tt>PERIPHERALS_COUNTER_SELECT</tt> is initialized to zero. If the <tt>PERIPHERALS_COUNTER_SELECT</tt> +register holds a value other than one of the six values described above, all <tt>PERIPHERALS_COUNTER_VALUE</tt> +bytes will read as zero. + +<p>The <tt>PERIPHERALS_COUNTER_VALUE</tt> addresses ($FFC2..$FFC9) are used to read to currently +selected 64-bit latch register value. Address $FFC2 holds the least significant byte (LSB), +while address $FFC9 holds the most significant byte (MSB). + +<p>On reset, all latch registers are reset to zero. Reading any of the <tt>PERIPHERALS_COUNTER_VALUE</tt> +bytes before the first write to <tt>PERIPHERALS_COUNTER_LATCH</tt> will yield zero. <sect>Copyright<p> From 915416dc663323dbc9cff2fab404a8395aa6448f Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Tue, 31 Dec 2024 18:11:35 +0100 Subject: [PATCH 2621/2710] Added example. --- doc/sim65.sgml | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/doc/sim65.sgml b/doc/sim65.sgml index f8e5caf19..849d6c65c 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -276,13 +276,12 @@ Jan 1st, 1970 UTC, at the time of the last latch operation. The low 32 bits of <p>The two different wallclock-time latch registers will always refer to precisely the same time instant. For some applications, the single 64-bit value measured in nanoseconds will be more convenient, while -for other applications, the split 32/32 bits representations with separate seconds and nanosecond +for other applications, the split 32/32 bits representations with separate second and nanosecond values will be more convenient. -<p>Note that the definition above, with time elapsed measured since Midnight, Jan 1st, 1970 UTC is -an approximation, as the implementation depends on the way POSIX definition time, which does -not account for leap seconds (POSIX falsely assumes that all days are precisely 86400 seconds -long). +<p>Note that the definition above, with time elapsed measured since Midnight, Jan 1st, 1970 UTC, is +an approximation, as the implementation depends on the way POSIX definition time, and POSIX does +not account for leap seconds; it falsely assumes that all days are precisely 86400 seconds long. <p>On reset, <tt>PERIPHERALS_COUNTER_SELECT</tt> is initialized to zero. If the <tt>PERIPHERALS_COUNTER_SELECT</tt> register holds a value other than one of the six values described above, all <tt>PERIPHERALS_COUNTER_VALUE</tt> @@ -295,6 +294,39 @@ while address $FFC9 holds the most significant byte (MSB). <p>On reset, all latch registers are reset to zero. Reading any of the <tt>PERIPHERALS_COUNTER_VALUE</tt> bytes before the first write to <tt>PERIPHERALS_COUNTER_LATCH</tt> will yield zero. +Example: + +<tscreen><verb> +#include <stdio.h> +#include <stdint.h> + +volatile uint8_t * CounterLatch = (uint8_t *)0xffc0; +volatile uint8_t * CounterSelect = (uint8_t *)0xffc1; +volatile uint32_t * CounterValue = (uint32_t *)0xffc1; + +static void print_current_counters(void) +{ + *CounterLatch = 0; /* latch values */ + + *CounterSelect = 0x00; + printf("clock cycles ............... : %08lx %08lx\n", CounterValue[1], CounterValue[0]); + *CounterSelect = 0x01; + printf("instructions ............... : %08lx %08lx\n", CounterValue[1], CounterValue[0]); + *CounterSelect = 0x80; + printf("wallclock time ............. : %08lx %08lx\n", CounterValue[1], CounterValue[0]); + *CounterSelect = 0x81; + printf("wallclock time, split ...... : %08lx %08lx\n", CounterValue[1], CounterValue[0]); + printf("\n"); +} + +int main(void) +{ + print_current_counters(); + print_current_counters(); + return 0; +} +</verb></tscreen> + <sect>Copyright<p> sim65 (and all cc65 binutils) are (C) Copyright 1998-2000 Ullrich von From b2851be34099b9c3137e5df6fe722a84e47c63e4 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Tue, 31 Dec 2024 18:20:11 +0100 Subject: [PATCH 2622/2710] Fixed several typos. --- doc/sim65.sgml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/doc/sim65.sgml b/doc/sim65.sgml index 849d6c65c..2b99a6682 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -246,7 +246,7 @@ running. For each counter, it also provides a 64 bit "latching" register. <p>When a program explicitly requests a "counter latch" operation by writing any value to the <tt>PERIPHERALS_COUNTER_LATCH</tt> address ($FFC0), all live registers are simultaneously -copied to the latch registers. They will keep the newly latched value until another latch +copied to the latch registers. They will keep their newly latched values until another latch operation is requested. <p>The <tt>PERIPHERALS_COUNTER_SELECT</tt> address ($FFC1) register holds an 8-bit value that @@ -259,7 +259,7 @@ address range. Six values are currently defined: <item>$02: latched IRQ interrupt counter selected. <item>$03: latched NMI interrupt counter selected. <item>$80: latched wallclock time (nanoseconds) selected. -<item>$81: latched wallclock time (split s/ns) selected. +<item>$81: latched wallclock time (split: seconds, nanoseconds) selected. </itemize> <p>Values $00 to $03 provide access to the latched (frozen) value of their respective live @@ -276,12 +276,13 @@ Jan 1st, 1970 UTC, at the time of the last latch operation. The low 32 bits of <p>The two different wallclock-time latch registers will always refer to precisely the same time instant. For some applications, the single 64-bit value measured in nanoseconds will be more convenient, while -for other applications, the split 32/32 bits representations with separate second and nanosecond +for other applications, the split 32/32 bits representation with separate second and nanosecond values will be more convenient. <p>Note that the definition above, with time elapsed measured since Midnight, Jan 1st, 1970 UTC, is -an approximation, as the implementation depends on the way POSIX definition time, and POSIX does -not account for leap seconds; it falsely assumes that all days are precisely 86400 seconds long. +an approximation, as the implementation depends on the way POSIX definition time. Unfortunately, +POSIX does not account for leap seconds; it incorrectly assumes that all days are precisely 86400 seconds +long. <p>On reset, <tt>PERIPHERALS_COUNTER_SELECT</tt> is initialized to zero. If the <tt>PERIPHERALS_COUNTER_SELECT</tt> register holds a value other than one of the six values described above, all <tt>PERIPHERALS_COUNTER_VALUE</tt> @@ -302,7 +303,7 @@ Example: volatile uint8_t * CounterLatch = (uint8_t *)0xffc0; volatile uint8_t * CounterSelect = (uint8_t *)0xffc1; -volatile uint32_t * CounterValue = (uint32_t *)0xffc1; +volatile uint32_t * CounterValue = (uint32_t *)0xffc2; static void print_current_counters(void) { From a8581d042f31aef6fc3c38f2d4b82255dd327285 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Tue, 31 Dec 2024 18:32:11 +0100 Subject: [PATCH 2623/2710] Improved description. --- doc/sim65.sgml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/doc/sim65.sgml b/doc/sim65.sgml index 2b99a6682..9f2914254 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -265,13 +265,13 @@ address range. Six values are currently defined: <p>Values $00 to $03 provide access to the latched (frozen) value of their respective live counters at the time of the last write to <tt>PERIPHERALS_COUNTER_LATCH</tt>. -<p>When <tt>PERIPHERALS_COUNTER_LATCH</tt> equals $80, the <tt>PERIPHERALS_COUNTER_VALUE</tt> -will be a 64-bit value corresponding to the number of nanoseconds elapsed since Midnight, Jan 1st, -1970 UTC, at the time of the last latch operation. +<p>When <tt>PERIPHERALS_COUNTER_SELECT</tt> equals $80, the <tt>PERIPHERALS_COUNTER_VALUE</tt> +will be a 64-bit value corresponding to the number of nanoseconds elapsed since the Unix epoch +(Midnight, Jan 1st, 1970 UTC), at the time of the last latch operation. -<p>When <tt>PERIPHERALS_COUNTER_LATCH</tt> equals $81, the high 32 bits of <tt>PERIPHERALS_COUNTER_VALUE</tt> -will be a 32-bit value corresponding to the number of seconds elapsed since Midnight, -Jan 1st, 1970 UTC, at the time of the last latch operation. The low 32 bits of +<p>When <tt>PERIPHERALS_COUNTER_SELECT</tt> equals $81, the high 32 bits of <tt>PERIPHERALS_COUNTER_VALUE</tt> +will be a 32-bit value corresponding to the number of seconds elapsed since the Unix epoch (Midnight, Jan 1st, +1970 UTC), at the time of the last latch operation. The low 32 bits of <tt>PERIPHERALS_COUNTER_VALUE</tt> will hold the nanoseconds since the start of that second. <p>The two different wallclock-time latch registers will always refer to precisely the same time instant. @@ -279,10 +279,10 @@ For some applications, the single 64-bit value measured in nanoseconds will be m for other applications, the split 32/32 bits representation with separate second and nanosecond values will be more convenient. -<p>Note that the definition above, with time elapsed measured since Midnight, Jan 1st, 1970 UTC, is -an approximation, as the implementation depends on the way POSIX definition time. Unfortunately, -POSIX does not account for leap seconds; it incorrectly assumes that all days are precisely 86400 seconds -long. +<p>Note that the time elapsed since the Unix epoch is an approximation, as the implementation depends on the +way POSIX defines time-since-the-epoch. Unfortunately, POSIX incorrectly assumes that all days are precisely +86400 seconds long, which is not true in case of leap seconds. The way this inconsistency is resolved is +system dependent. <p>On reset, <tt>PERIPHERALS_COUNTER_SELECT</tt> is initialized to zero. If the <tt>PERIPHERALS_COUNTER_SELECT</tt> register holds a value other than one of the six values described above, all <tt>PERIPHERALS_COUNTER_VALUE</tt> From ef18d2cdd97c3c631acf05c30f7ad13ea48e4352 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Wed, 1 Jan 2025 08:28:17 +0100 Subject: [PATCH 2624/2710] Added code path for for MinGW32 builds that happen during snapshot builds, but not during PR builds. --- src/sim65/peripherals.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 4fa512ed8..cc5274f67 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -63,7 +63,22 @@ static bool GetWallclockTime (struct timespec * ts) #if defined(__MINGW64__) /* When using the MinGW64 compiler, neither timespec_get() nor clock_gettime() - * are available; using either of them makes the Linux workflow build fail. + * are available; using either of them makes the Linux PR build workflow build fail. + * The gettimeofday() function does work, so use that; its microsecond resolution + * is fine for most applications. + */ + struct timeval tv; + time_valid = (gettimeofday(&tv, NULL) == 0); + if (time_valid) { + ts->tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec * 1000; + } +#elif defined(__MINGW32__) + /* Note: we test for MinGW32 after the test for MinGW64, as the __MINGW32__ symbol is also + * defined in MinGW64. This allows us to distinguish MinGW32 and MinGW64 build. + * + * When using the MinGW32 compiler, neither timespec_get() nor clock_gettime() + * are available; using either of them makes the Linux snapshot workflow build fail. * The gettimeofday() function does work, so use that; its microsecond resolution * is fine for most applications. */ From 66594d44a56b72dcb4ebc3adde853d5fff5d03e3 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Wed, 1 Jan 2025 08:58:51 +0100 Subject: [PATCH 2625/2710] Forget to include sys/time.h which is needed for MingGW32 builds. --- src/sim65/peripherals.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 4fa512ed8..4f105d87a 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -30,7 +30,7 @@ #include <stdbool.h> #include <time.h> -#if defined(__MINGW64__) +#if defined(__MINGW64__) || defined(__MINGW32__) /* For gettimeofday() */ #include <sys/time.h> #endif @@ -63,7 +63,22 @@ static bool GetWallclockTime (struct timespec * ts) #if defined(__MINGW64__) /* When using the MinGW64 compiler, neither timespec_get() nor clock_gettime() - * are available; using either of them makes the Linux workflow build fail. + * are available; using either of them makes the Linux PR build workflow build fail. + * The gettimeofday() function does work, so use that; its microsecond resolution + * is fine for most applications. + */ + struct timeval tv; + time_valid = (gettimeofday(&tv, NULL) == 0); + if (time_valid) { + ts->tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec * 1000; + } +#elif defined(__MINGW32__) + /* Note: we test for MinGW32 after the test for MinGW64, as the __MINGW32__ symbol is also + * defined in MinGW64. This allows us to distinguish MinGW32 and MinGW64 build. + * + * When using the MinGW32 compiler, neither timespec_get() nor clock_gettime() + * are available; using either of them makes the Linux snapshot workflow build fail. * The gettimeofday() function does work, so use that; its microsecond resolution * is fine for most applications. */ From 50cccc2c3a8f864cd354caf703bc3483718ebadf Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 1 Jan 2025 13:23:03 +0100 Subject: [PATCH 2626/2710] Add lseek to sim6502 paravirt --- libsrc/sim6502/paravirt.s | 3 +- src/sim65/paravirt.c | 25 ++++++++++++++ src/sim65/paravirt.h | 2 +- test/ref/test_fseek.c | 73 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 test/ref/test_fseek.c diff --git a/libsrc/sim6502/paravirt.s b/libsrc/sim6502/paravirt.s index 3bd40fbe4..b9fc38de5 100644 --- a/libsrc/sim6502/paravirt.s +++ b/libsrc/sim6502/paravirt.s @@ -7,9 +7,10 @@ ; int __fastcall__ write (int fd, const void* buf, unsigned count); ; - .export exit, args, _open, _close, _read, _write + .export exit, args, _open, _close, _read, _write, _lseek .export __sysremove, ___osmaperrno +_lseek := $FFF1 __sysremove := $FFF2 ___osmaperrno := $FFF3 _open := $FFF4 diff --git a/src/sim65/paravirt.c b/src/sim65/paravirt.c index 141bcd2bd..4e68a3f0e 100644 --- a/src/sim65/paravirt.c +++ b/src/sim65/paravirt.c @@ -159,6 +159,30 @@ static void PVArgs (CPURegs* Regs) SetAX (Regs, ArgC); } +/* Match between standard POSIX whence and cc65 whence. */ +static unsigned SEEK_MODE_MATCH[3] = { + SEEK_CUR, + SEEK_END, + SEEK_SET +}; + +static void PVLseek (CPURegs* Regs) +{ + unsigned RetVal; + + unsigned Whence = GetAX (Regs); + unsigned Offset = PopParam (4); + unsigned FD = PopParam (2); + + Print (stderr, 2, "PVLseek ($%04X, $%08X, $%04X (%d))\n", + FD, Offset, Whence, SEEK_MODE_MATCH[Whence]); + + RetVal = lseek(FD, (off_t)Offset, SEEK_MODE_MATCH[Whence]); + Print (stderr, 2, "PVLseek returned %04X\n", RetVal); + + SetAX (Regs, RetVal); +} + static void PVOpen (CPURegs* Regs) @@ -343,6 +367,7 @@ static void PVOSMapErrno (CPURegs* Regs) static const PVFunc Hooks[] = { + PVLseek, PVSysRemove, PVOSMapErrno, PVOpen, diff --git a/src/sim65/paravirt.h b/src/sim65/paravirt.h index f3281705e..109fdb847 100644 --- a/src/sim65/paravirt.h +++ b/src/sim65/paravirt.h @@ -44,7 +44,7 @@ -#define PARAVIRT_BASE 0xFFF2 +#define PARAVIRT_BASE 0xFFF1 /* Lowest address used by a paravirtualization hook */ #define PV_PATH_SIZE 1024 diff --git a/test/ref/test_fseek.c b/test/ref/test_fseek.c new file mode 100644 index 000000000..e63dc0c02 --- /dev/null +++ b/test/ref/test_fseek.c @@ -0,0 +1,73 @@ +/* + !!DESCRIPTION!! fgets test + !!LICENCE!! Public domain +*/ + +#include "common.h" + +#include <ctype.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +FILE *in; +char bufA[32]; +char bufB[32]; + +#define INFILE "cf.in" + +int main(int argc,char **argv) +{ + static int r; + + in = fopen(INFILE, "rb"); + if (in == NULL) { + return EXIT_FAILURE; + } + + r = fread(bufA, 1, sizeof(bufA), in); + + if (r == 0) { + printf("Error: could not read.\n"); + return EXIT_FAILURE; + } + fwrite(bufA, 1, r, stdout); + + /* Test SEEK_SET */ + fseek(in, 0, SEEK_SET); + r = fread(bufB, 1, sizeof(bufB), in); + + if (r == 0) { + printf("Error: could not re-read after SEEK_SET.\n"); + return EXIT_FAILURE; + } + fwrite(bufB, 1, r, stdout); + + if (memcmp(bufA, bufB, sizeof(bufA))) { + printf("reads differ.\n"); + return EXIT_FAILURE; + } + + /* Test SEEK_CUR */ + fseek(in, 0, SEEK_SET); + fseek(in, 1, SEEK_CUR); + r = fread(bufB, 1, sizeof(bufB), in); + + if (r == 0) { + printf("Error: could not re-read after SEEK_CUR.\n"); + return EXIT_FAILURE; + } + fwrite(bufB, 1, r, stdout); + + if (memcmp(bufA+1, bufB, sizeof(bufA)-1)) { + printf("reads differ.\n"); + return EXIT_FAILURE; + } + + + fclose(in); + + return 0; +} From 5531320b5123c7632ce50829b30420f791605ecb Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 1 Jan 2025 13:23:30 +0100 Subject: [PATCH 2627/2710] Fix test_fread return value on error --- test/ref/test_fread.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/ref/test_fread.c b/test/ref/test_fread.c index 5d180d723..cf7083760 100644 --- a/test/ref/test_fread.c +++ b/test/ref/test_fread.c @@ -51,6 +51,7 @@ int main(int argc,char **argv) if (r == 0) { printf("Error: could not start reading.\n"); + return EXIT_FAILURE; } fwrite(buf, 1, r, stdout); @@ -63,6 +64,7 @@ int main(int argc,char **argv) if (!feof(in)) { printf("We should have EOF!\n"); + return EXIT_FAILURE; } fclose(in); From adfb42bfa6baaa8c4190a162339d406e928b432a Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 1 Jan 2025 13:23:57 +0100 Subject: [PATCH 2628/2710] Rewrite rewind in assembly --- libsrc/common/rewind.c | 25 ------------------- libsrc/common/rewind.s | 35 ++++++++++++++++++++++++++ test/ref/test_rewind.c | 56 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 25 deletions(-) delete mode 100644 libsrc/common/rewind.c create mode 100644 libsrc/common/rewind.s create mode 100644 test/ref/test_rewind.c diff --git a/libsrc/common/rewind.c b/libsrc/common/rewind.c deleted file mode 100644 index 333230b74..000000000 --- a/libsrc/common/rewind.c +++ /dev/null @@ -1,25 +0,0 @@ -/* -** rewind.c -** -** Christian Groessler, 07-Aug-2000 -*/ - - - -#include <stdio.h> - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -void __fastcall__ rewind (FILE* f) -{ - fseek(f, 0L, SEEK_SET); - clearerr(f); -} - - diff --git a/libsrc/common/rewind.s b/libsrc/common/rewind.s new file mode 100644 index 000000000..e7013505c --- /dev/null +++ b/libsrc/common/rewind.s @@ -0,0 +1,35 @@ +; +; Colin Leroy-Mira <colin@colino.net> +; +; void __fastcall__ rewind (FILE* f) +; /* Rewind a file */ +; + + .export _rewind + + .import _fseek, _clearerr + .import pushax, pushl0, popax + + .include "stdio.inc" + + +; ------------------------------------------------------------------------ +; Code + +.proc _rewind + + ; Push f twice (once for fseek, once for clearerr later) + jsr pushax + jsr pushax + + ; Push offset (long) zero + jsr pushl0 + + lda #SEEK_SET + jsr _fseek + + ; Clear error + jsr popax + jmp _clearerr + +.endproc diff --git a/test/ref/test_rewind.c b/test/ref/test_rewind.c new file mode 100644 index 000000000..80fe08ce1 --- /dev/null +++ b/test/ref/test_rewind.c @@ -0,0 +1,56 @@ +/* + !!DESCRIPTION!! fgets test + !!LICENCE!! Public domain +*/ + +#include "common.h" + +#include <ctype.h> +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +FILE *in; +char bufA[32]; +char bufB[32]; + +#define INFILE "cf.in" + +int main(int argc,char **argv) +{ + static int r; + + in = fopen(INFILE, "rb"); + if (in == NULL) { + return EXIT_FAILURE; + } + + r = fread(bufA, 1, sizeof(bufA), in); + + if (r == 0) { + printf("Error: could not read.\n"); + return EXIT_FAILURE; + } + fwrite(bufA, 1, r, stdout); + + rewind(in); + printf("rewind.\n"); + r = fread(bufB, 1, sizeof(bufB), in); + + if (r == 0) { + printf("Error: could not re-read.\n"); + return EXIT_FAILURE; + } + fwrite(bufB, 1, r, stdout); + + fclose(in); + + if (memcmp(bufA, bufB, sizeof(bufA))) { + printf("reads differ.\n"); + return EXIT_FAILURE; + } + + return 0; +} From 21345bd6da1730b47f22c94da666b5d8d350ce5a Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 1 Jan 2025 13:25:52 +0100 Subject: [PATCH 2629/2710] Fix headers --- test/ref/test_fread.c | 2 +- test/ref/test_fseek.c | 2 +- test/ref/test_rewind.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/ref/test_fread.c b/test/ref/test_fread.c index cf7083760..99411ab28 100644 --- a/test/ref/test_fread.c +++ b/test/ref/test_fread.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! fgets test + !!DESCRIPTION!! fread test !!LICENCE!! Public domain */ diff --git a/test/ref/test_fseek.c b/test/ref/test_fseek.c index e63dc0c02..157d0bdf0 100644 --- a/test/ref/test_fseek.c +++ b/test/ref/test_fseek.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! fgets test + !!DESCRIPTION!! fseek test !!LICENCE!! Public domain */ diff --git a/test/ref/test_rewind.c b/test/ref/test_rewind.c index 80fe08ce1..d1b361983 100644 --- a/test/ref/test_rewind.c +++ b/test/ref/test_rewind.c @@ -1,5 +1,5 @@ /* - !!DESCRIPTION!! fgets test + !!DESCRIPTION!! rewind test !!LICENCE!! Public domain */ From 3047439174bec1d0de79b7c99624e5253e55d647 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Wed, 1 Jan 2025 18:26:11 +0100 Subject: [PATCH 2630/2710] Fixed typo --- doc/da65.sgml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/da65.sgml b/doc/da65.sgml index 113eb6f97..94fbfbd29 100644 --- a/doc/da65.sgml +++ b/doc/da65.sgml @@ -255,7 +255,7 @@ disassembler may be told to recognize either the 65SC02 or 65C02 CPUs. The latter understands the same opcodes as the former, plus 16 additional bit manipulation and bit test-and-branch commands. Using 6502x as CPU the illegal opcodes of 6502 CPU are detected and displayed. 6502dtv setting recognizes the -emulated CPU instructons of the C64DTV device. +emulated CPU instructions of the C64DTV device. When disassembling 4510 code, due to handling of 16-bit wide branches, da65 From 0d8cbbc38b6c99e91f804f0a2b2df95a3a0054c7 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Wed, 1 Jan 2025 18:30:23 +0100 Subject: [PATCH 2631/2710] Fixed typos --- doc/funcref.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index f2dd02efc..bc2424272 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -2436,7 +2436,7 @@ the address must first be ORed with $60. <tag/Availability/cc65 <tag/See also/ <ref id="cbm_k_listen" name="cbm_k_listen"> -<tag/Exampe/None. +<tag/Example/None. </descrip> </quote> @@ -7315,7 +7315,7 @@ if (stat (FILENAME, &stbuf) == 0) { <tag/Function/Get filesystem statistics. <tag/Header/<tt/<ref id="sys/statvfs.h" name="sys/statvfs.h">/ <tag/Declaration/<tt/int __fastcall__ statvfs (const char* pathname, struct statvfs* buf);/ -<tag/Description/<tt/statvfs/ gets information for the filesytem on which the given file +<tag/Description/<tt/statvfs/ gets information for the filesystem on which the given file resides. On success, zero is returned. On error, -1 is returned and <tt/errno/ is set to an error code describing the reason for the failure. From bf8b8343177ecec6ea64b398b1b155d204c5ef3b Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Wed, 1 Jan 2025 18:31:57 +0100 Subject: [PATCH 2632/2710] Fixed typo --- doc/tgi.sgml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/tgi.sgml b/doc/tgi.sgml index 29acd8ce6..3b013664f 100644 --- a/doc/tgi.sgml +++ b/doc/tgi.sgml @@ -477,10 +477,10 @@ be used in presence of a prototype. <quote> <descrip> -<tag/Function/Get number of horisontal pixels on the screen. +<tag/Function/Get number of horizontal pixels on the screen. <tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/ <tag/Declaration/<tt/unsigned tgi_getxres (void);/ -<tag/Description/Get number of horisontal pixels on the screen. +<tag/Description/Get number of horizontal pixels on the screen. This is same as tgi_maxx()+1. <tag/Availability/cc65 <tag/See also/Other tgi functions. From 5be0b10b62c4d95389c7a1caeb66a0ddebf47f0d Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Fri, 3 Jan 2025 21:39:20 +0100 Subject: [PATCH 2633/2710] sim65: add tracing, and a sim65 control peripheral for sim65 runtime control. This PR is the first of two PRs that replaces earlier PRs #2589 and #2590. Due to a git branching mishap it was decided to re-partition the new functionality in two sequential PRs that offer self-contained, new functionality to sim65. The functionality in this first PR extends the sim65 simulator in the following ways: (1) It provides tracing functionality, i.e., the possibility of printing one line of simulator state information per instruction executed. (2) It provides a memory mapped "sim65 control" peripheral that allows control of (a) the tracing functionality, and (b) the cpu mode. (3) It provides command-line options to sim65 to enable the tracing, and to override the CPU mode as specified in the program file header. More detailed information and some discussion can be found in the discussions with the (now retracted) PRs #2589 and #2590. This PR provides the technical infrastructure inside the sim65 simulator program itself. Once this PR is accepted, a follow-up PR will be posted that adds C and assembly-language support for the new tracing and peripheral features so they can be easily accessed from the CC65 compiler and the CA65 assembler; some examples; and the documentation for these features. The lack of the latter, in this pull request, will be addressed then. --- src/sim65.vcxproj | 2 + src/sim65/6502.c | 27 +- src/sim65/6502.h | 6 +- src/sim65/main.c | 98 +++- src/sim65/paravirt.h | 3 +- src/sim65/peripherals.c | 26 + src/sim65/peripherals.h | 13 +- src/sim65/trace.c | 1157 +++++++++++++++++++++++++++++++++++++++ src/sim65/trace.h | 89 +++ 9 files changed, 1389 insertions(+), 32 deletions(-) create mode 100644 src/sim65/trace.c create mode 100644 src/sim65/trace.h diff --git a/src/sim65.vcxproj b/src/sim65.vcxproj index 07a9f7fb5..f1fe6bdd2 100644 --- a/src/sim65.vcxproj +++ b/src/sim65.vcxproj @@ -87,6 +87,7 @@ <ClInclude Include="sim65\memory.h" /> <ClInclude Include="sim65\paravirt.h" /> <ClInclude Include="sim65\peripherals.h" /> + <ClInclude Include="sim65\trace.h" /> </ItemGroup> <ItemGroup> <ClCompile Include="sim65\6502.c" /> @@ -95,6 +96,7 @@ <ClCompile Include="sim65\memory.c" /> <ClCompile Include="sim65\paravirt.c" /> <ClCompile Include="sim65\peripherals.c" /> + <ClCompile Include="sim65\trace.c" /> </ItemGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <ImportGroup Label="ExtensionTargets"> diff --git a/src/sim65/6502.c b/src/sim65/6502.c index be5afc036..a9aa299ff 100644 --- a/src/sim65/6502.c +++ b/src/sim65/6502.c @@ -42,14 +42,16 @@ * the WAI ($CB) and STP ($DB) instructions are unsupported. */ -#include <stdbool.h> #include <stdint.h> +#include <stdbool.h> #include "memory.h" #include "peripherals.h" #include "error.h" -#include "6502.h" #include "paravirt.h" +#include "trace.h" + +#include "6502.h" /* @@ -4485,7 +4487,7 @@ static const OPFunc OP65C02Table[256] = { OPC_6502_41, OPC_65C02_NOP22, // $42 OPC_65C02_NOP11, // $43 - OPC_6502X_44, // $44 + OPC_6502X_44, // $44 OPC_6502_45, OPC_6502_46, OPC_65C02_47, @@ -4730,6 +4732,10 @@ unsigned ExecuteInsn (void) /* If we have an NMI request, handle it */ if (HaveNMIRequest) { + if (TraceMode != TRACE_DISABLED) { + PrintTraceNMI (); + } + HaveNMIRequest = false; Peripherals.Counter.NmiEvents += 1; @@ -4746,6 +4752,10 @@ unsigned ExecuteInsn (void) } else if (HaveIRQRequest && GET_IF () == 0) { + if (TraceMode != TRACE_DISABLED) { + PrintTraceIRQ (); + } + HaveIRQRequest = false; Peripherals.Counter.IrqEvents += 1; @@ -4765,11 +4775,16 @@ unsigned ExecuteInsn (void) /* Normal instruction - read the next opcode */ uint8_t OPC = MemReadByte (Regs.PC); - /* Execute it */ - Handlers[CPU][OPC] (); + /* Print a trace line, if trace mode is enabled. */ + if (TraceMode != TRACE_DISABLED) { + PrintTraceInstruction (); + } - /* Increment the instruction counter by one.NMIs and IRQs are counted separately. */ + /* Increment the instruction counter by one. */ Peripherals.Counter.CpuInstructions += 1; + + /* Execute the instruction. The handler sets the 'Cycles' variable. */ + Handlers[CPU][OPC] (); } /* Increment the 64-bit clock cycle counter with the cycle count for the instruction that we just executed. */ diff --git a/src/sim65/6502.h b/src/sim65/6502.h index 0f4d066d0..d715f3288 100644 --- a/src/sim65/6502.h +++ b/src/sim65/6502.h @@ -48,9 +48,9 @@ /* Supported CPUs */ typedef enum CPUType { - CPU_6502, - CPU_65C02, - CPU_6502X + CPU_6502 = 0, + CPU_65C02 = 1, + CPU_6502X = 2 } CPUType; /* Current CPU */ diff --git a/src/sim65/main.c b/src/sim65/main.c index 8b41fcc0f..828ea498e 100644 --- a/src/sim65/main.c +++ b/src/sim65/main.c @@ -35,6 +35,7 @@ #include <string.h> #include <stdlib.h> +#include <stdbool.h> #include <errno.h> /* common */ @@ -49,6 +50,7 @@ #include "memory.h" #include "peripherals.h" #include "paravirt.h" +#include "trace.h" @@ -61,6 +63,9 @@ /* Name of program file */ const char* ProgramFile; +/* Set to True if CPU mode override is in effect. If set, the CPU is not read from the program file. */ +static bool CPUOverrideActive = false; + /* exit simulator after MaxCycles Cccles */ unsigned long long MaxCycles = 0; @@ -95,6 +100,8 @@ static void Usage (void) "Long options:\n" " --help\t\tHelp (this text)\n" " --cycles\t\tPrint amount of executed CPU cycles\n" + " --cpu <type>\t\tOverride CPU type (6502, 65C02, 6502X)\n" + " --trace\t\tEnable CPU trace\n" " --verbose\t\tIncrease verbosity\n" " --version\t\tPrint the simulator version number\n", ProgName); @@ -112,6 +119,35 @@ static void OptHelp (const char* Opt attribute ((unused)), +static void OptCPU (const char* Opt, const char* Arg) +/* Set CPU type */ +{ + /* Don't use FindCPU here. Enum constants would clash. */ + if (strcmp(Arg, "6502") == 0) { + CPU = CPU_6502; + CPUOverrideActive = true; + } else if (strcmp(Arg, "65C02") == 0 || strcmp(Arg, "65c02") == 0) { + CPU = CPU_65C02; + CPUOverrideActive = true; + } else if (strcmp(Arg, "6502X") == 0 || strcmp(Arg, "6502x") == 0) { + CPU = CPU_6502X; + CPUOverrideActive = true; + } else { + AbEnd ("Invalid argument for %s: '%s'", Opt, Arg); + } +} + + + +static void OptTrace (const char* Opt attribute ((unused)), + const char* Arg attribute ((unused))) +/* Enable trace mode */ +{ + TraceMode = TRACE_ENABLE_FULL; /* Enable full trace mode. */ +} + + + static void OptVerbose (const char* Opt attribute ((unused)), const char* Arg attribute ((unused))) /* Increase verbosity */ @@ -135,16 +171,20 @@ static void OptVersion (const char* Opt attribute ((unused)), /* Print the simulator version */ { fprintf (stderr, "%s V%s\n", ProgName, GetVersionAsString ()); - exit(EXIT_SUCCESS); + exit (EXIT_SUCCESS); } + + static void OptQuitXIns (const char* Opt attribute ((unused)), - const char* Arg attribute ((unused))) -/* quit after MaxCycles cycles */ + const char* Arg) +/* Quit after MaxCycles cycles */ { MaxCycles = strtoull(Arg, NULL, 0); } + + static unsigned char ReadProgramFile (void) /* Load program into memory */ { @@ -173,17 +213,20 @@ static unsigned char ReadProgramFile (void) Error ("'%s': Invalid header version.", ProgramFile); } - /* Get the CPU type from the file header */ + /* Get the CPU type from the file header. + * Use it to set the CPU type, unless CPUOverrideActive is set. + */ if ((Val = fgetc(F)) != EOF) { - switch (Val) { - case CPU_6502: - case CPU_65C02: - case CPU_6502X: - CPU = Val; - break; - - default: - Error ("'%s': Invalid CPU type", ProgramFile); + if (!CPUOverrideActive) { + switch (Val) { + case CPU_6502: + case CPU_65C02: + case CPU_6502X: + CPU = Val; + break; + default: + Error ("'%s': Invalid CPU type", ProgramFile); + } } } @@ -238,16 +281,22 @@ int main (int argc, char* argv[]) { /* Program long options */ static const LongOpt OptTab[] = { - { "--help", 0, OptHelp }, - { "--cycles", 0, OptCycles }, - { "--verbose", 0, OptVerbose }, - { "--version", 0, OptVersion }, + { "--help", 0, OptHelp }, + { "--cycles", 0, OptCycles }, + { "--cpu", 1, OptCPU }, + { "--trace", 0, OptTrace }, + { "--verbose", 0, OptVerbose }, + { "--version", 0, OptVersion }, }; unsigned I; unsigned char SPAddr; unsigned int Cycles; + /* Set reasonable defaults. */ + CPU = CPU_6502; + TraceMode = TRACE_DISABLED; /* Disabled by default */ + /* Initialize the cmdline module */ InitCmdLine (&argc, &argv, "sim65"); @@ -302,16 +351,29 @@ int main (int argc, char* argv[]) } /* Do we have a program file? */ - if (ProgramFile == 0) { + if (ProgramFile == NULL) { AbEnd ("No program file"); } + /* Reset memory */ MemInit (); + + /* Reset peripherals. */ PeripheralsInit (); + /* Read program file into memory. + * This also sets the CPU type, unless a CPU override is in effect. + */ SPAddr = ReadProgramFile (); + + /* Initialize the paravirtualization subsystem. It requires the stack pointer address, to be able to + * simulate 6502 subroutine calls. + */ + + TraceInit(SPAddr); ParaVirtInit (I, SPAddr); + /* Reset the CPU */ Reset (); RemainCycles = MaxCycles; diff --git a/src/sim65/paravirt.h b/src/sim65/paravirt.h index f3281705e..f5d74acc8 100644 --- a/src/sim65/paravirt.h +++ b/src/sim65/paravirt.h @@ -32,11 +32,12 @@ /*****************************************************************************/ - #ifndef PARAVIRT_H #define PARAVIRT_H +#include "6502.h" + /*****************************************************************************/ /* Data */ diff --git a/src/sim65/peripherals.c b/src/sim65/peripherals.c index 4f105d87a..1d7ff6bdb 100644 --- a/src/sim65/peripherals.c +++ b/src/sim65/peripherals.c @@ -37,6 +37,8 @@ #include "peripherals.h" +#include "trace.h" +#include "6502.h" /*****************************************************************************/ @@ -146,6 +148,20 @@ void PeripheralsWriteByte (uint8_t Addr, uint8_t Val) break; } + /* Handle writes to the SimControl peripheral. */ + + case PERIPHERALS_SIMCONTROL_ADDRESS_OFFSET_CPUMODE: { + if (Val == CPU_6502 || Val == CPU_65C02 || Val == CPU_6502X) { + CPU = Val; + } + break; + } + + case PERIPHERALS_SIMCONTROL_ADDRESS_OFFSET_TRACEMODE: { + TraceMode = Val; + break; + } + /* Handle writes to unused and read-only peripheral addresses. */ default: { @@ -192,6 +208,16 @@ uint8_t PeripheralsReadByte (uint8_t Addr) return (uint8_t)(Value >> (SelectedByteIndex * 8)); } + /* Handle reads from the SimControl peripheral. */ + + case PERIPHERALS_SIMCONTROL_ADDRESS_OFFSET_CPUMODE: { + return CPU; + } + + case PERIPHERALS_SIMCONTROL_ADDRESS_OFFSET_TRACEMODE: { + return TraceMode; + } + /* Handle reads from unused peripheral and write-only addresses. */ default: { diff --git a/src/sim65/peripherals.h b/src/sim65/peripherals.h index 16ea83782..dc86e6c6e 100644 --- a/src/sim65/peripherals.h +++ b/src/sim65/peripherals.h @@ -38,9 +38,9 @@ /* The memory range where the memory-mapped peripherals can be accessed. */ #define PERIPHERALS_APERTURE_BASE_ADDRESS 0xffc0 -#define PERIPHERALS_APERTURE_LAST_ADDRESS 0xffc9 +#define PERIPHERALS_APERTURE_LAST_ADDRESS 0xffcb -/* Declarations for the COUNTER peripheral (currently the only peripheral). */ +/* Declarations for the COUNTER peripheral */ #define PERIPHERALS_COUNTER_ADDRESS_OFFSET_LATCH 0x00 #define PERIPHERALS_COUNTER_ADDRESS_OFFSET_SELECT 0x01 @@ -84,13 +84,18 @@ typedef struct { uint8_t LatchedValueSelected; } CounterPeripheral; +/* Declarations for the SIMCONTROL peripheral. */ +#define PERIPHERALS_SIMCONTROL_ADDRESS_OFFSET_CPUMODE 0x0A +#define PERIPHERALS_SIMCONTROL_ADDRESS_OFFSET_TRACEMODE 0x0B + +#define PERIPHERALS_SIMCONTROL_CPUMODE (PERIPHERALS_APERTURE_BASE_ADDRESS + PERIPHERALS_SIMCONTROL_ADDRESS_OFFSET_CPUMODE) +#define PERIPHERALS_SIMCONTROL_TRACEMODE (PERIPHERALS_APERTURE_BASE_ADDRESS + PERIPHERALS_SIMCONTROL_ADDRESS_OFFSET_TRACEMODE) /* Declare the 'Sim65Peripherals' type and its single instance 'Peripherals'. */ typedef struct { - /* State of the peripherals available in sim65. - * Currently, there is only one peripheral: the Counter. */ + /* State of the peripherals available in sim65. */ CounterPeripheral Counter; } Sim65Peripherals; diff --git a/src/sim65/trace.c b/src/sim65/trace.c new file mode 100644 index 000000000..ef1edd0bf --- /dev/null +++ b/src/sim65/trace.c @@ -0,0 +1,1157 @@ +/*****************************************************************************/ +/* */ +/* trace.c */ +/* */ +/* Instruction tracing functionality sim65 6502 simulator */ +/* */ +/* */ +/* */ +/* (C) 2025, Sidney Cadot */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + +#include <stdio.h> +#include <stdlib.h> +#include <stdbool.h> +#include <inttypes.h> + +#include "6502.h" +#include "memory.h" +#include "trace.h" +#include "peripherals.h" + +/* Current Trace Mode. Tracing is off by default, and needs to be explicitly enabled. */ +uint8_t TraceMode = TRACE_DISABLED; + +/* CC65 stack pointer */ +uint8_t StackPointerZPageAddress; + +/* 6502, 65C02 addressing modes. */ +typedef enum { + ILLEGAL, + IMPLIED, + ACCUMULATOR, + IMMEDIATE, + REL, + ZP, + ZP_X, + ZP_Y, + ZP_IND, + ZP_X_IND, + ZP_IND_Y, + ZP_REL, + ABS, + ABS_X, + ABS_Y, + ABS_IND, + ABS_X_IND +} AddressingMode; + +/* Info for a specific opcode and addressing mode, for a specific CPU type. */ +typedef struct { + const char * mnemonic; + AddressingMode adrmode; +} InstructionInfo; + +/* Information for standard 6502 opcodes. */ +static InstructionInfo II_6502[256] = { + { "brk" , IMPLIED }, /* 0x00 to 0x0f */ + { "ora" , ZP_X_IND }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "ora" , ZP }, + { "asl" , ZP }, + { "???" , ILLEGAL }, + { "php" , IMPLIED }, + { "ora" , IMMEDIATE }, + { "asl" , ACCUMULATOR }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "ora" , ABS }, + { "asl" , ABS }, + { "???" , ILLEGAL }, + + { "bpl" , REL }, /* 0x10 to 0x1f */ + { "ora" , ZP_IND_Y }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "ora" , ZP_X }, + { "asl" , ZP_X }, + { "???" , ILLEGAL }, + { "clc" , IMPLIED }, + { "ora" , ABS_Y }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "ora" , ABS_X }, + { "asl" , ABS_X }, + { "???" , ILLEGAL }, + + { "jsr" , ABS }, /* 0x20 to 0x2f */ + { "and" , ZP_X_IND }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "bit" , ZP }, + { "and" , ZP }, + { "rol" , ZP }, + { "???" , ILLEGAL }, + { "plp" , IMPLIED }, + { "and" , IMMEDIATE }, + { "rol" , ACCUMULATOR }, + { "???" , ILLEGAL }, + { "bit" , ABS }, + { "and" , ABS }, + { "rol" , ABS }, + { "???" , ILLEGAL }, + + { "bmi" , REL }, /* 0x30 to 0x3f */ + { "and" , ZP_IND_Y }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "and" , ZP_X }, + { "rol" , ZP_X }, + { "???" , ILLEGAL }, + { "sec" , IMPLIED }, + { "and" , ABS_Y }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "and" , ABS_X }, + { "rol" , ABS_X }, + { "???" , ILLEGAL }, + + { "rti" , IMPLIED }, /* 0x40 to 0x4f */ + { "eor" , ZP_X_IND }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "eor" , ZP }, + { "lsr" , ZP }, + { "???" , ILLEGAL }, + { "pha" , IMPLIED }, + { "eor" , IMMEDIATE }, + { "lsr" , ACCUMULATOR }, + { "???" , ILLEGAL }, + { "jmp" , ABS }, + { "eor" , ABS }, + { "lsr" , ABS }, + { "???" , ILLEGAL }, + + { "bvc" , REL }, /* 0x50 to 0x5f */ + { "eor" , ZP_IND_Y }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "eor" , ZP_X }, + { "lsr" , ZP_X }, + { "???" , ILLEGAL }, + { "cli" , IMPLIED }, + { "eor" , ABS_Y }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "eor" , ABS_X }, + { "lsr" , ABS_X }, + { "???" , ILLEGAL }, + + { "rts" , IMPLIED }, /* 0x60 to 0x6f */ + { "adc" , ZP_X_IND }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "adc" , ZP }, + { "ror" , ZP }, + { "???" , ILLEGAL }, + { "pla" , IMPLIED }, + { "adc" , IMMEDIATE }, + { "ror" , ACCUMULATOR }, + { "???" , ILLEGAL }, + { "jmp" , ABS_IND }, + { "adc" , ABS }, + { "ror" , ABS }, + { "???" , ILLEGAL }, + + { "bvs" , REL }, /* 0x70 to 0x7f */ + { "adc" , ZP_IND_Y }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "adc" , ZP_X }, + { "ror" , ZP_X }, + { "???" , ILLEGAL }, + { "sei" , IMPLIED }, + { "adc" , ABS_Y }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "adc" , ABS_X }, + { "ror" , ABS_X }, + { "???" , ILLEGAL }, + + { "???" , ILLEGAL }, /* 0x80 to 0x8f */ + { "sta" , ZP_X_IND }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "sty" , ZP }, + { "sta" , ZP }, + { "stx" , ZP }, + { "???" , ILLEGAL }, + { "dey" , IMPLIED }, + { "???" , ILLEGAL }, + { "txa" , IMPLIED }, + { "???" , ILLEGAL }, + { "sty" , ABS }, + { "sta" , ABS }, + { "stx" , ABS }, + { "???" , ILLEGAL }, + + { "bcc" , REL }, /* 0x90 to 0x9f */ + { "sta" , ZP_IND_Y }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "sty" , ZP_X }, + { "sta" , ZP_X }, + { "stx" , ZP_Y }, + { "???" , ILLEGAL }, + { "tya" , IMPLIED }, + { "sta" , ABS_Y }, + { "txs" , IMPLIED }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "sta" , ABS_X }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + + { "ldy" , IMMEDIATE }, /* 0xa0 to 0xaf */ + { "lda" , ZP_X_IND }, + { "ldx" , IMMEDIATE }, + { "???" , ILLEGAL }, + { "ldy" , ZP }, + { "lda" , ZP }, + { "ldx" , ZP }, + { "???" , ILLEGAL }, + { "tay" , IMPLIED }, + { "lda" , IMMEDIATE }, + { "tax" , IMPLIED }, + { "???" , ILLEGAL }, + { "ldy" , ABS }, + { "lda" , ABS }, + { "ldx" , ABS }, + { "???" , ILLEGAL }, + + { "bcs" , REL }, /* 0xb0 to 0xbf */ + { "lda" , ZP_IND_Y }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "ldy" , ZP_X }, + { "lda" , ZP_X }, + { "ldx" , ZP_Y }, + { "???" , ILLEGAL }, + { "clv" , IMPLIED }, + { "lda" , ABS_Y }, + { "tsx" , IMPLIED }, + { "???" , ILLEGAL }, + { "ldy" , ABS_X }, + { "lda" , ABS_X }, + { "ldx" , ABS_Y }, + { "???" , ILLEGAL }, + + { "cpy" , IMMEDIATE }, /* 0xc0 to 0xcf */ + { "cmp" , ZP_X_IND }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "cpy" , ZP }, + { "cmp" , ZP }, + { "dec" , ZP }, + { "???" , ILLEGAL }, + { "iny" , IMPLIED }, + { "cmp" , IMMEDIATE }, + { "dex" , IMPLIED }, + { "???" , ILLEGAL }, + { "cpy" , ABS }, + { "cmp" , ABS }, + { "dec" , ABS }, + { "???" , ILLEGAL }, + + { "bne" , REL }, /* 0xd0 to 0xdf */ + { "cmp" , ZP_IND_Y }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "cmp" , ZP_X }, + { "dec" , ZP_X }, + { "???" , ILLEGAL }, + { "cld" , IMPLIED }, + { "cmp" , ABS_Y }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "cmp" , ABS_X }, + { "dec" , ABS_X }, + { "???" , ILLEGAL }, + + { "cpx" , IMMEDIATE }, /* 0xe0 to 0xef */ + { "sbc" , ZP_X_IND }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "cpx" , ZP }, + { "sbc" , ZP }, + { "inc" , ZP }, + { "???" , ILLEGAL }, + { "inx" , IMPLIED }, + { "sbc" , IMMEDIATE }, + { "nop" , IMPLIED }, + { "???" , ILLEGAL }, + { "cpx" , ABS }, + { "sbc" , ABS }, + { "inc" , ABS }, + { "???" , ILLEGAL }, + + { "beq" , REL }, /* 0xf0 to 0xff */ + { "sbc" , ZP_IND_Y }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "sbc" , ZP_X }, + { "inc" , ZP_X }, + { "???" , ILLEGAL }, + { "sed" , IMPLIED }, + { "sbc" , ABS_Y }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "???" , ILLEGAL }, + { "sbc" , ABS_X }, + { "inc" , ABS_X }, + { "???" , ILLEGAL } +}; + +/* Information for 65C02 opcodes. */ +static InstructionInfo II_65C02[256] = { + { "brk" , IMPLIED }, /* 0x00 to 0x0f */ + { "ora" , ZP_X_IND }, + { "nop" , IMMEDIATE }, + { "nop" , IMPLIED }, + { "tsb" , ZP }, + { "ora" , ZP }, + { "asl" , ZP }, + { "rmb0" , ZP }, + { "php" , IMPLIED }, + { "ora" , IMMEDIATE }, + { "asl" , ACCUMULATOR }, + { "nop" , IMPLIED }, + { "tsb" , ABS }, + { "ora" , ABS }, + { "asl" , ABS }, + { "bbr0" , ZP_REL }, + + { "bpl" , REL }, /* 0x10 to 0x1f */ + { "ora" , ZP_IND_Y }, + { "ora" , ZP_IND }, + { "nop" , IMPLIED }, + { "trb" , ZP }, + { "ora" , ZP_X }, + { "asl" , ZP_X }, + { "rmb1" , ZP }, + { "clc" , IMPLIED }, + { "ora" , ABS_Y }, + { "inc" , ACCUMULATOR }, + { "nop" , IMPLIED }, + { "trb" , ABS }, + { "ora" , ABS_X }, + { "asl" , ABS_X }, + { "bbr1" , ZP_REL }, + + { "jsr" , ABS }, /* 0x20 to 0x2f */ + { "and" , ZP_X_IND }, + { "nop" , IMMEDIATE }, + { "nop" , IMPLIED }, + { "bit" , ZP }, + { "and" , ZP }, + { "rol" , ZP }, + { "rmb2" , ZP }, + { "plp" , IMPLIED }, + { "and" , IMMEDIATE }, + { "rol" , ACCUMULATOR }, + { "nop" , IMPLIED }, + { "bit" , ABS }, + { "and" , ABS }, + { "rol" , ABS }, + { "bbr2" , ZP_REL }, + + { "bmi" , REL }, /* 0x30 to 0x3f */ + { "and" , ZP_IND_Y }, + { "and" , ZP_IND }, + { "nop" , IMPLIED }, + { "bit" , ZP_X }, + { "and" , ZP_X }, + { "rol" , ZP_X }, + { "rmb3" , ZP }, + { "sec" , IMPLIED }, + { "and" , ABS_Y }, + { "dec" , ACCUMULATOR }, + { "nop" , IMPLIED }, + { "bit" , ABS_X }, + { "and" , ABS_X }, + { "rol" , ABS_X }, + { "bbr3" , ZP_REL }, + + { "rti" , IMPLIED }, /* 0x40 to 0x4f */ + { "eor" , ZP_X_IND }, + { "nop" , IMMEDIATE }, + { "nop" , ILLEGAL }, + { "nop" , ZP }, + { "eor" , ZP }, + { "lsr" , ZP }, + { "rmb4" , ZP }, + { "pha" , IMPLIED }, + { "eor" , IMMEDIATE }, + { "lsr" , ACCUMULATOR }, + { "nop" , IMPLIED }, + { "jmp" , ABS }, + { "eor" , ABS }, + { "lsr" , ABS }, + { "bbr4" , ZP_REL }, + + { "bvc" , REL }, /* 0x50 to 0x5f */ + { "eor" , ZP_IND_Y }, + { "eor" , ZP_IND }, + { "nop" , IMPLIED }, + { "nop" , ZP_X }, + { "eor" , ZP_X }, + { "lsr" , ZP_X }, + { "rmb5" , ZP }, + { "cli" , IMPLIED }, + { "eor" , ABS_Y }, + { "phy" , IMPLIED }, + { "nop" , IMPLIED }, + { "nop" , ABS }, + { "eor" , ABS_X }, + { "lsr" , ABS_X }, + { "bbr5" , ZP_REL }, + + { "rts" , IMPLIED }, /* 0x60 to 0x6f */ + { "adc" , ZP_X_IND }, + { "nop" , IMMEDIATE }, + { "nop" , IMPLIED }, + { "stz" , ZP }, + { "adc" , ZP }, + { "ror" , ZP }, + { "rmb6" , ZP }, + { "pla" , IMPLIED }, + { "adc" , IMMEDIATE }, + { "ror" , ACCUMULATOR }, + { "nop" , IMPLIED }, + { "jmp" , ABS_IND }, + { "adc" , ABS }, + { "ror" , ABS }, + { "bbr6" , ZP_REL }, + + { "bvs" , REL }, /* 0x70 to 0x7f */ + { "adc" , ZP_IND_Y }, + { "adc" , ZP_IND }, + { "nop" , IMPLIED }, + { "stz" , ZP_X }, + { "adc" , ZP_X }, + { "ror" , ZP_X }, + { "rmb7" , ZP }, + { "sei" , IMPLIED }, + { "adc" , ABS_Y }, + { "ply" , IMPLIED }, + { "nop" , IMPLIED }, + { "jmp" , ABS_X_IND }, + { "adc" , ABS_X }, + { "ror" , ABS_X }, + { "bbr7" , ZP_REL }, + + { "bra" , REL }, /* 0x80 to 0x8f */ + { "sta" , ZP_X_IND }, + { "nop" , IMMEDIATE }, + { "nop" , IMPLIED }, + { "sty" , ZP }, + { "sta" , ZP }, + { "stx" , ZP }, + { "smb0" , ZP }, + { "dey" , IMPLIED }, + { "bit" , IMMEDIATE }, + { "txa" , IMPLIED }, + { "nop" , IMPLIED }, + { "sty" , ABS }, + { "sta" , ABS }, + { "stx" , ABS }, + { "bbs0" , ZP_REL }, + + { "bcc" , REL }, /* 0x90 to 0x9f */ + { "sta" , ZP_IND_Y }, + { "sta" , ZP_IND }, + { "nop" , IMPLIED }, + { "sty" , ZP_X }, + { "sta" , ZP_X }, + { "stx" , ZP_Y }, + { "smb1" , ZP }, + { "tya" , IMPLIED }, + { "sta" , ABS_Y }, + { "txs" , IMPLIED }, + { "nop" , IMPLIED }, + { "stz" , ABS }, + { "sta" , ABS_X }, + { "stz" , ABS_X }, + { "bbs1" , ZP_REL }, + + { "ldy" , IMMEDIATE }, /* 0xa0 to 0xaf */ + { "lda" , ZP_X_IND }, + { "ldx" , IMMEDIATE }, + { "nop" , IMPLIED }, + { "ldy" , ZP }, + { "lda" , ZP }, + { "ldx" , ZP }, + { "smb2" , ZP }, + { "tay" , IMPLIED }, + { "lda" , IMMEDIATE }, + { "tax" , IMPLIED }, + { "nop" , IMPLIED }, + { "ldy" , ABS }, + { "lda" , ABS }, + { "ldx" , ABS }, + { "bbs2" , ZP_REL }, + + { "bcs" , REL }, /* 0xb0 to 0xbf */ + { "lda" , ZP_IND_Y }, + { "lda" , ZP_IND }, + { "nop" , IMPLIED }, + { "ldy" , ZP_X }, + { "lda" , ZP_X }, + { "ldx" , ZP_Y }, + { "smb3" , ZP }, + { "clv" , IMPLIED }, + { "lda" , ABS_Y }, + { "tsx" , IMPLIED }, + { "nop" , IMPLIED }, + { "ldy" , ABS_X }, + { "lda" , ABS_X }, + { "ldx" , ABS_Y }, + { "bbs3" , ZP_REL }, + + { "cpy" , IMMEDIATE }, /* 0xc0 to 0xcf */ + { "cmp" , ZP_X_IND }, + { "nop" , IMMEDIATE }, + { "nop" , IMPLIED }, + { "cpy" , ZP }, + { "cmp" , ZP }, + { "dec" , ZP }, + { "smb4" , ZP }, + { "iny" , IMPLIED }, + { "cmp" , IMMEDIATE }, + { "dex" , IMPLIED }, + { "wai" , IMPLIED }, + { "cpy" , ABS }, + { "cmp" , ABS }, + { "dec" , ABS }, + { "bbs4" , ZP_REL }, + + { "bne" , REL }, /* 0xd0 to 0xdf */ + { "cmp" , ZP_IND_Y }, + { "cmp" , ZP_IND }, + { "nop" , IMPLIED }, + { "nop" , ZP_X }, + { "cmp" , ZP_X }, + { "dec" , ZP_X }, + { "smb5" , ZP }, + { "cld" , IMPLIED }, + { "cmp" , ABS_Y }, + { "phx" , IMPLIED }, + { "stp" , IMPLIED }, + { "nop" , ABS }, + { "cmp" , ABS_X }, + { "dec" , ABS_X }, + { "bbs5" , ZP_REL }, + + { "cpx" , IMMEDIATE }, /* 0xe0 to 0xef */ + { "sbc" , ZP_X_IND }, + { "nop" , IMMEDIATE }, + { "nop" , IMPLIED }, + { "cpx" , ZP }, + { "sbc" , ZP }, + { "inc" , ZP }, + { "smb6" , ZP }, + { "inx" , IMPLIED }, + { "sbc" , IMMEDIATE }, + { "nop" , IMPLIED }, + { "nop" , IMPLIED }, + { "cpx" , ABS }, + { "sbc" , ABS }, + { "inc" , ABS }, + { "bbs6" , ZP_REL }, + + { "beq" , REL }, /* 0xf0 to 0xff */ + { "sbc" , ZP_IND_Y }, + { "sbc" , ZP_IND }, + { "nop" , IMPLIED }, + { "nop" , ZP_X }, + { "sbc" , ZP_X }, + { "inc" , ZP_X }, + { "smb7" , ZP }, + { "sed" , IMPLIED }, + { "sbc" , ABS_Y }, + { "plx" , IMPLIED }, + { "nop" , IMPLIED }, + { "nop" , ABS }, + { "sbc" , ABS_X }, + { "inc" , ABS_X }, + { "bbs7" , ZP_REL } +}; + +/* Information for 6502X (6502 with undocumented instructions) opcodes. */ +static InstructionInfo II_6502X[256] = { + { "brk" , IMPLIED }, /* 0x00 to 0x0f */ + { "ora" , ZP_X_IND }, + { "jam" , IMPLIED }, + { "slo" , ZP_X_IND }, + { "nop" , ZP }, + { "ora" , ZP }, + { "asl" , ZP }, + { "slo" , ZP }, + { "php" , IMPLIED }, + { "ora" , IMMEDIATE }, + { "asl" , ACCUMULATOR }, + { "anc" , IMMEDIATE }, + { "nop" , ABS }, + { "ora" , ABS }, + { "asl" , ABS }, + { "slo" , ABS }, + + { "bpl" , REL }, /* 0x10 to 0x1f */ + { "ora" , ZP_IND_Y }, + { "jam" , IMPLIED }, + { "slo" , ZP_IND_Y }, + { "nop" , ZP_X }, + { "ora" , ZP_X }, + { "asl" , ZP_X }, + { "slo" , ZP }, + { "clc" , IMPLIED }, + { "ora" , ABS_Y }, + { "nop" , IMPLIED }, + { "slo" , ABS_Y }, + { "*nop" , ABS_X }, + { "ora" , ABS_X }, + { "asl" , ABS_X }, + { "slo" , ABS_X }, + + { "jsr" , ABS }, /* 0x20 to 0x2f */ + { "and" , ZP_X_IND }, + { "jam" , IMPLIED }, + { "rla" , ZP_X_IND }, + { "bit" , ZP }, + { "and" , ZP }, + { "rol" , ZP }, + { "rla" , ZP }, + { "plp" , IMPLIED }, + { "and" , IMMEDIATE }, + { "rol" , ACCUMULATOR }, + { "anc" , IMMEDIATE }, + { "bit" , ABS }, + { "and" , ABS }, + { "rol" , ABS }, + { "rla" , ABS }, + + { "bmi" , REL }, /* 0x30 to 0x3f */ + { "and" , ZP_IND_Y }, + { "jam" , IMPLIED }, + { "rla" , ZP_IND_Y }, + { "nop" , ZP_X }, + { "and" , ZP_X }, + { "rol" , ZP_X }, + { "rla" , ZP_X }, + { "sec" , IMPLIED }, + { "and" , ABS_Y }, + { "nop" , IMPLIED }, + { "rla" , ABS_Y }, + { "nop" , ABS_X }, + { "and" , ABS_X }, + { "rol" , ABS_X }, + { "rla" , ABS_X }, + + { "rti" , IMPLIED }, /* 0x40 to 0x4f */ + { "eor" , ZP_X_IND }, + { "jam" , IMPLIED }, + { "sre" , ZP_X_IND }, + { "nop" , ZP }, + { "eor" , ZP }, + { "lsr" , ZP }, + { "sre" , ZP }, + { "pha" , IMPLIED }, + { "eor" , IMMEDIATE }, + { "lsr" , ACCUMULATOR }, + { "alr" , IMMEDIATE }, + { "jmp" , ABS }, + { "eor" , ABS }, + { "lsr" , ABS }, + { "sre" , ABS }, + + { "bvc" , REL }, /* 0x50 to 0x5f */ + { "eor" , ZP_IND_Y }, + { "jam" , IMPLIED }, + { "sre" , ZP_IND_Y }, + { "nop" , ZP_X }, + { "eor" , ZP_X }, + { "lsr" , ZP_X }, + { "sre" , ZP_X }, + { "cli" , IMPLIED }, + { "eor" , ABS_Y }, + { "nop" , IMPLIED }, + { "sre" , ABS_Y }, + { "nop" , ABS_X }, + { "eor" , ABS_X }, + { "lsr" , ABS_X }, + { "sre" , ABS_X }, + + { "rts" , IMPLIED }, /* 0x60 to 0x6f */ + { "adc" , ZP_X_IND }, + { "jam" , IMPLIED }, + { "rra" , ZP_X_IND }, + { "nop" , ZP }, + { "adc" , ZP }, + { "ror" , ZP }, + { "rra" , ZP }, + { "pla" , IMPLIED }, + { "adc" , IMMEDIATE }, + { "ror" , ACCUMULATOR }, + { "arr" , IMMEDIATE }, + { "jmp" , ABS_IND }, + { "adc" , ABS }, + { "ror" , ABS }, + { "rra" , ABS }, + + { "bvs" , REL }, /* 0x70 to 0x7f */ + { "adc" , ZP_IND_Y }, + { "jam" , IMPLIED }, + { "sre" , ZP_IND_Y }, + { "nop" , ZP_X }, + { "adc" , ZP_X }, + { "ror" , ZP_X }, + { "rra" , ZP_X }, + { "sei" , IMPLIED }, + { "adc" , ABS_Y }, + { "nop" , IMPLIED }, + { "rra" , ABS_Y }, + { "nop" , ABS_X }, + { "adc" , ABS_X }, + { "ror" , ABS_X }, + { "rra" , ABS_X }, + + { "nop" , IMMEDIATE }, /* 0x80 to 0x8f */ + { "sta" , ZP_X_IND }, + { "nop" , IMMEDIATE }, + { "sax" , ZP_X_IND }, + { "sty" , ZP }, + { "sta" , ZP }, + { "stx" , ZP }, + { "sax" , ZP }, + { "dey" , IMPLIED }, + { "nop" , IMMEDIATE }, + { "txa" , IMPLIED }, + { "ane" , IMMEDIATE }, + { "sty" , ABS }, + { "sta" , ABS }, + { "stx" , ABS }, + { "sax" , ABS }, + + { "bcc" , REL }, /* 0x90 to 0x9f */ + { "sta" , ZP_IND_Y }, + { "jam" , IMPLIED }, + { "sha" , ZP_IND_Y }, + { "sty" , ZP_X }, + { "sta" , ZP_X }, + { "stx" , ZP_Y }, + { "sax" , ZP_Y }, + { "tya" , IMPLIED }, + { "sta" , ABS_Y }, + { "txs" , IMPLIED }, + { "tas" , ABS_Y }, + { "shy" , ABS_X }, + { "sta" , ABS_X }, + { "shx" , ABS_Y }, + { "sha" , ABS_Y }, + + { "ldy" , IMMEDIATE }, /* 0xa0 to 0xaf */ + { "lda" , ZP_X_IND }, + { "ldx" , IMMEDIATE }, + { "lax" , ZP_X_IND }, + { "ldy" , ZP }, + { "lda" , ZP }, + { "ldx" , ZP }, + { "lax" , ZP }, + { "tay" , IMPLIED }, + { "lda" , IMMEDIATE }, + { "tax" , IMPLIED }, + { "lax" , IMMEDIATE }, + { "ldy" , ABS }, + { "lda" , ABS }, + { "ldx" , ABS }, + { "lax" , ABS }, + + { "bcs" , REL }, /* 0xb0 to 0xbf */ + { "lda" , ZP_IND_Y }, + { "jam" , IMPLIED }, + { "lax" , ZP_IND_Y }, + { "ldy" , ZP_X }, + { "lda" , ZP_X }, + { "ldx" , ZP_Y }, + { "lax" , ZP_Y }, + { "clv" , IMPLIED }, + { "lda" , ABS_Y }, + { "tsx" , IMPLIED }, + { "las" , ABS_Y }, + { "ldy" , ABS_X }, + { "lda" , ABS_X }, + { "ldx" , ABS_Y }, + { "lax" , ABS_Y }, + + { "cpy" , IMMEDIATE }, /* 0xc0 to 0xcf */ + { "cmp" , ZP_X_IND }, + { "nop" , IMMEDIATE }, + { "dcp" , ZP_X_IND }, + { "cpy" , ZP }, + { "cmp" , ZP }, + { "dec" , ZP }, + { "dcp" , ZP }, + { "iny" , IMPLIED }, + { "cmp" , IMMEDIATE }, + { "dex" , IMPLIED }, + { "sbx" , IMMEDIATE }, + { "cpy" , ABS }, + { "cmp" , ABS }, + { "dec" , ABS }, + { "dcp" , ABS }, + + { "bne" , REL }, /* 0xd0 to 0xdf */ + { "cmp" , ZP_IND_Y }, + { "jam" , IMPLIED }, + { "dcp" , ZP_IND_Y }, + { "nop" , ZP_X }, + { "cmp" , ZP_X }, + { "dec" , ZP_X }, + { "dcp" , ZP_X }, + { "cld" , IMPLIED }, + { "cmp" , ABS_Y }, + { "nop" , IMPLIED }, + { "dcp" , ABS_Y }, + { "nop" , ABS_X }, + { "cmp" , ABS_X }, + { "dec" , ABS_X }, + { "dcp" , ABS_X }, + + { "cpx" , IMMEDIATE }, /* 0xe0 to 0xef */ + { "sbc" , ZP_X_IND }, + { "nop" , IMMEDIATE }, + { "isc" , ZP_X_IND }, + { "cpx" , ZP }, + { "sbc" , ZP }, + { "inc" , ZP }, + { "isc" , ZP }, + { "inx" , IMPLIED }, + { "sbc" , IMMEDIATE }, + { "nop" , IMPLIED }, + { "sbc" , IMMEDIATE }, + { "cpx" , ABS }, + { "sbc" , ABS }, + { "inc" , ABS }, + { "isc" , ABS }, + + { "beq" , REL }, /* 0xf0 to 0xff */ + { "sbc" , ZP_IND_Y }, + { "jam" , IMPLIED }, + { "isc" , ZP_IND_Y }, + { "nop" , ZP_X }, + { "sbc" , ZP_X }, + { "inc" , ZP_X }, + { "isc" , ZP_X }, + { "sed" , IMPLIED }, + { "sbc" , ABS_Y }, + { "nop" , IMPLIED }, + { "isc" , ABS_Y }, + { "nop" , ABS_X }, + { "sbc" , ABS_X }, + { "inc" , ABS_X }, + { "isc" , ABS_X } +}; + +static InstructionInfo * II[3] = { II_6502, II_65C02, II_6502X }; + +static unsigned GetInstructionLength (uint8_t opcode) +/* Get the number of bytes in the full instruction. Depends on the addressing mode. */ +{ + switch (II[CPU][opcode].adrmode) { + case ILLEGAL: + case IMPLIED: + case ACCUMULATOR: + return 1; + case IMMEDIATE: + case REL: + case ZP: + case ZP_X: + case ZP_Y: + case ZP_IND: + case ZP_X_IND: + case ZP_IND_Y: + return 2; + case ZP_REL: + case ABS: + case ABS_X: + case ABS_Y: + case ABS_IND: + case ABS_X_IND: + return 3; + } + + /* We should never get here. */ + return -1; +} + + + +static char * PrintAssemblyInstruction (char * ptr) +/* Print assembly instruction: mnemonic and addres-mode specific operand(s). */ +{ + uint8_t opcode; + + /* Print the instruction starting at the current program counter. */ + + opcode = MemReadByte (Regs.PC); + + ptr += sprintf (ptr, "%-4s ", II[CPU][opcode].mnemonic); + + switch (II[CPU][opcode].adrmode) { + case IMPLIED: + case ILLEGAL: + break; + case ACCUMULATOR: + ptr += sprintf (ptr, "A"); + break; + case IMMEDIATE: + ptr += sprintf (ptr, "#$%02X", MemReadByte (Regs.PC + 1)); + break; + case REL: + ptr += sprintf (ptr, "$%04X", Regs.PC + 2 + (int8_t)MemReadByte (Regs.PC + 1)); + break; + case ZP: + ptr += sprintf (ptr, "$%02X", MemReadByte (Regs.PC + 1)); + break; + case ZP_X: + ptr += sprintf (ptr, "$%02X,X", MemReadByte (Regs.PC + 1)); + break; + case ZP_Y: + ptr += sprintf (ptr, "$%02X,Y", MemReadByte (Regs.PC + 1)); + break; + case ZP_IND: + ptr += sprintf (ptr, "($%02X)", MemReadByte (Regs.PC + 1)); + break; + case ZP_X_IND: + ptr += sprintf (ptr, "($%02X,X)", MemReadByte (Regs.PC + 1)); + break; + case ZP_IND_Y: + ptr += sprintf (ptr, "($%02X),Y", MemReadByte (Regs.PC + 1)); + break; + case ZP_REL: + ptr += sprintf (ptr, "$%02X,$%04X", MemReadByte (Regs.PC + 1), Regs.PC + 3 + (int8_t)MemReadByte (Regs.PC + 2)); + break; + case ABS: + ptr += sprintf (ptr, "$%04X", MemReadWord (Regs.PC + 1)); + break; + case ABS_IND: + ptr += sprintf (ptr, "($%04X)", MemReadWord (Regs.PC + 1)); + break; + case ABS_X: + ptr += sprintf (ptr, "$%04X,X", MemReadWord (Regs.PC + 1)); + break; + case ABS_X_IND: + ptr += sprintf (ptr, "($%04X,X)", MemReadWord (Regs.PC + 1)); + break; + case ABS_Y: + ptr += sprintf (ptr, "$%04X,Y", MemReadWord (Regs.PC + 1)); + break; + } + + return ptr; +} + + + +static void PrintTraceInstructionOrInterrupt (const char * InterruptType) +{ + char traceline[200]; + char * traceline_ptr = traceline; + uint8_t opcode; + unsigned k, num_bytes; + + if (TraceMode & TRACE_FIELD_INSTR_COUNTER) { + + if (traceline_ptr != traceline) { + /* Print field separator. */ + traceline_ptr += sprintf (traceline_ptr, " "); + } + + traceline_ptr += sprintf (traceline_ptr, "%12" PRIu64, Peripherals.Counter.CpuInstructions); + } + + if (TraceMode & TRACE_FIELD_CLOCK_COUNTER) { + + if (traceline_ptr != traceline) { + /* Print field separator. */ + traceline_ptr += sprintf (traceline_ptr, " "); + } + + traceline_ptr += sprintf (traceline_ptr, "%12" PRIu64, Peripherals.Counter.ClockCycles); + } + + if (TraceMode & TRACE_FIELD_PC) { + + if (traceline_ptr != traceline) { + /* Print field separator. */ + traceline_ptr += sprintf (traceline_ptr, " "); + } + + traceline_ptr += sprintf (traceline_ptr, "%04X", Regs.PC); + } + + if (TraceMode & TRACE_FIELD_INSTR_BYTES) { + + if (traceline_ptr != traceline) { + /* Print field separator. */ + traceline_ptr += sprintf (traceline_ptr, " "); + } + + if (InterruptType == NULL) + { + /* Get the opcode */ + opcode = MemReadByte (Regs.PC); + + /* How many bytes are in the full instruction? 1, 2 or 3. */ + num_bytes = GetInstructionLength (opcode); + } else { + num_bytes = 0; /* Consider interrupts as instructions that are inserted into the instruction stream. */ + } + + /* Print 0 to 3 bytes for the interrupt/instruction. */ + for (k = 0; k < 3; ++k) { + if (k != 0) { + *traceline_ptr++ = ' '; + } + if (k < num_bytes) { + traceline_ptr += sprintf (traceline_ptr, "%02X", MemReadByte (Regs.PC + k)); + } else { + traceline_ptr += sprintf (traceline_ptr, " "); + } + } + } + + if (TraceMode & TRACE_FIELD_INSTR_ASSEMBLY) { + + if (traceline_ptr != traceline) { + /* Print field separator. */ + traceline_ptr += sprintf (traceline_ptr, " "); + } + + char * save_ptr = traceline_ptr; + + if (InterruptType == NULL) { + traceline_ptr = PrintAssemblyInstruction (traceline_ptr); + } else { + /* Print interrupt message. */ + traceline_ptr += sprintf (traceline_ptr, "*** %s ***", InterruptType); + } + + /* Fill out the field to 16 characters */ + num_bytes = (unsigned)(traceline_ptr - save_ptr); + if (num_bytes < 16) { + traceline_ptr += sprintf (traceline_ptr, "%*s", 16 - num_bytes, ""); + } + } + + if (TraceMode & TRACE_FIELD_CPU_REGISTERS) { + + if (traceline_ptr != traceline) { + /* Print field separator. */ + traceline_ptr += sprintf (traceline_ptr, " "); + } + + traceline_ptr += sprintf (traceline_ptr, + "A=%02X X=%02X Y=%02X S=%02X Flags=%c%c%c%c%c%c", + Regs.AC, + Regs.XR, + Regs.YR, + Regs.SP, + (Regs.SR & SF) ? 'N' : 'n', + (Regs.SR & OF) ? 'V' : 'v', + (Regs.SR & DF) ? 'D' : 'd', + (Regs.SR & IF) ? 'I' : 'i', + (Regs.SR & ZF) ? 'Z' : 'z', + (Regs.SR & CF) ? 'C' : 'c' + ); + } + + if (TraceMode & TRACE_FIELD_CC65_SP) { + + if (traceline_ptr != traceline) { + /* Print field separator. */ + traceline_ptr += sprintf (traceline_ptr, " "); + } + + traceline_ptr += sprintf (traceline_ptr, + " SP=%04X", + MemReadZPWord (StackPointerZPageAddress) + ); + } + + if (traceline_ptr != traceline) { + puts (traceline); + } +} + + + +void TraceInit (uint8_t SPAddr) +{ + StackPointerZPageAddress = SPAddr; +} + + + +void PrintTraceNMI (void) +{ + PrintTraceInstructionOrInterrupt("NMI"); +} + + + +void PrintTraceIRQ (void) +{ + PrintTraceInstructionOrInterrupt("IRQ"); +} + + + +void PrintTraceInstruction (void) +{ + PrintTraceInstructionOrInterrupt(NULL); +} diff --git a/src/sim65/trace.h b/src/sim65/trace.h new file mode 100644 index 000000000..f982460d2 --- /dev/null +++ b/src/sim65/trace.h @@ -0,0 +1,89 @@ +/*****************************************************************************/ +/* */ +/* trace.h */ +/* */ +/* Instruction tracing functionality sim65 6502 simulator */ +/* */ +/* */ +/* */ +/* (C) 2025, Sidney Cadot */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + +#ifndef TRACE_H +#define TRACE_H + + +#include <stdint.h> + + +#include "6502.h" + +/* The trace mode is a bitfield that determines how trace lines are displayed. + * + * The value zero indicates that tracing is disabled (the default). + * + * In case TraceMode is not equal to zero, the value is interpreted as a bitfield: + * + * Bit Bit value Enables + * --- ----------- ------------------------------- + * 6 0x40 ( 64) Print the instruction counter. + * 5 0x20 ( 32) Print the clock cycle counter. + * 4 0x10 ( 16) Print the PC (program counter). + * 3 0x08 ( 8) Print the instruction bytes. + * 2 0x04 ( 4) Print the instruction assembly. + * 1 0x02 ( 2) Print the CPU registers. + * 0 0x01 ( 1) Print the CC65 stack pointer. + * + */ + +#define TRACE_FIELD_INSTR_COUNTER 0x40 +#define TRACE_FIELD_CLOCK_COUNTER 0x20 +#define TRACE_FIELD_PC 0x10 +#define TRACE_FIELD_INSTR_BYTES 0x08 +#define TRACE_FIELD_INSTR_ASSEMBLY 0x04 +#define TRACE_FIELD_CPU_REGISTERS 0x02 +#define TRACE_FIELD_CC65_SP 0x01 + +#define TRACE_DISABLED 0x00 +#define TRACE_ENABLE_FULL 0x7f + +/* Currently active tracing mode. */ +extern uint8_t TraceMode; + +void TraceInit (uint8_t SPAddr); +/* Initialize the trace subsystem. */ + +void PrintTraceNMI(void); +/* Print trace line for an NMI interrupt. */ + +void PrintTraceIRQ(void); +/* Print trace line for an IRQ interrupt. */ + +void PrintTraceInstruction (void); +/* Print trace line for the instruction at the currrent program counter. */ + + + +/* End of trace.h */ + +#endif From 988260c69998743932007e6995067e0ee49a1a50 Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Sun, 5 Jan 2025 15:58:05 +0100 Subject: [PATCH 2634/2710] sim65: add C/assembly support, docs, and samples for the new peripheral functionality. This PR is the second of two PRs that replaces earlier PRs #2589 and #2590. Due to a git branching mishap it was decided to re-partition the new functionality in two sequential PRs that offer self-contained, new functionality to sim65. The functionality in this second and last PR provides the following things in relation to the new "peripheral" support: * C support: there is now an include/sim65.h that can be included from C. It provides access to the memory-mapped peripheral addresses. * Asm support: there is now an asminc/sim65.inc that can be included from assembly. It provides symbolic labels for the memory-mapped peripheral addresses. Note: the two items above are implemented by adding a "_peripherals" symbol to cfg/sim6502.cfg and cfg/sim65c02.cfg, with the fixed base address of the peripherals memory aperture (0xffc0). * Updated the sim65 documentation to describe the peripherals in some detail, with examples that show to use the new features from within C. * Some examples in the new samples/sim5/ directory. These are currently not integrated in the build system (in other words, there's no Makefile there), because I don't know how to do that. I will happily implement that after #2582 is taken care of. If that is not acceptable, the next best thing will be for somebody else (who understands how the Makefiles are set up) to take care of this. If that's not going to happen, and we don't want examples that are not properly integrated with the build system, there's always the option of removing these samples from the PR. --- asminc/sim65.inc | 75 ++++++++++++++++++ cfg/sim6502.cfg | 6 +- cfg/sim65c02.cfg | 6 +- doc/sim65.sgml | 135 +++++++++++++++++++++++++++---- include/sim65.h | 136 ++++++++++++++++++++++++++++++++ samples/sim65/cpumode_example.c | 104 ++++++++++++++++++++++++ samples/sim65/timer_example.c | 117 +++++++++++++++++++++++++++ samples/sim65/trace_example.c | 40 ++++++++++ 8 files changed, 603 insertions(+), 16 deletions(-) create mode 100644 asminc/sim65.inc create mode 100644 include/sim65.h create mode 100644 samples/sim65/cpumode_example.c create mode 100644 samples/sim65/timer_example.c create mode 100644 samples/sim65/trace_example.c diff --git a/asminc/sim65.inc b/asminc/sim65.inc new file mode 100644 index 000000000..b8ea264b7 --- /dev/null +++ b/asminc/sim65.inc @@ -0,0 +1,75 @@ + +; ******************************************************************************* +; ** ** +; ** sim65.inc : assembler definitions for the sim6502 and sim65c02 targets. ** +; ** ** +; ** Sidney Cadot, January 2025 ** +; ** ** +; ******************************************************************************* + + ; The '_peripherals' symbol is defined in the linker configuration + ; file to correspond to the first address in the periperal memory + ; aparture. + ; + ; We use it here as a base address for all peripheral addresses. + + .import _peripherals + +; ************************************************************** +; ** ** +; ** Define assembler symbols for the "counter" peripheral. ** +; ** ** +; ************************************************************** + +peripheral_counter_base := _peripherals + 0 + +peripheral_counter_latch := peripheral_counter_base + 0 +peripheral_counter_select := peripheral_counter_base + 1 +peripheral_counter_value := peripheral_counter_base + 2 + +; Values for the peripheral_counter_select register. + +COUNTER_SELECT_CLOCKCYCLE_COUNTER = $00 +COUNTER_SELECT_INSTRUCTION_COUNTER = $01 +COUNTER_SELECT_IRQ_COUNTER = $02 +COUNTER_SELECT_NMI_COUNTER = $03 +COUNTER_SELECT_WALLCLOCK_TIME = $80 +COUNTER_SELECT_WALLCLOCK_TIME_SPLIT = $81 + +; ******************************************************************** +; ** ** +; ** Define assembler symbols for the "sim65 control" peripheral. ** +; ** ** +; ******************************************************************** + +peripheral_sim65_base := _peripherals + 10 + +peripheral_sim65_cpu_mode := peripheral_sim65_base + 0 +peripheral_sim65_trace_mode := peripheral_sim65_base + 1 + +; Values for the peripheral_sim65_cpu_mode register. + +SIM65_CPU_MODE_6502 = $00 +SIM65_CPU_MODE_65C02 = $01 +SIM65_CPU_MODE_6502X = $02 + +; Bitfield values for the peripheral_sim65_trace_mode field. + +SIM65_TRACE_MODE_FIELD_INSTR_COUNTER = $40 +SIM65_TRACE_MODE_FIELD_CLOCK_COUNTER = $20 +SIM65_TRACE_MODE_FIELD_PC = $10 +SIM65_TRACE_MODE_FIELD_INSTR_BYTES = $08 +SIM65_TRACE_MODE_FIELD_INSTR_ASSEMBLY = $04 +SIM65_TRACE_MODE_FIELD_CPU_REGISTERS = $02 +SIM65_TRACE_MODE_FIELD_CC65_SP = $01 + +; Values for the peripheral_sim65_trace_mode field that fully disable / enable tracing. + +SIM65_TRACE_MODE_DISABLE = $00 +SIM65_TRACE_MODE_ENABLE_FULL = $7F + +; ************************ +; ** ** +; ** End of sim65.inc ** +; ** ** +; ************************ diff --git a/cfg/sim6502.cfg b/cfg/sim6502.cfg index d393a4aee..72098f750 100644 --- a/cfg/sim6502.cfg +++ b/cfg/sim6502.cfg @@ -1,12 +1,15 @@ SYMBOLS { __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0800; # 2k stack + _peripherals: type = export, value = $FFC0; } + MEMORY { ZP: file = "", start = $0000, size = $0100; HEADER: file = %O, start = $0000, size = $000C; - MAIN: file = %O, define = yes, start = $0200, size = $FDC0 - __STACKSIZE__; + MAIN: file = %O, define = yes, start = $0200, size = $FFC0 - $0200 - __STACKSIZE__; } + SEGMENTS { ZEROPAGE: load = ZP, type = zp; EXEHDR: load = HEADER, type = ro; @@ -18,6 +21,7 @@ SEGMENTS { DATA: load = MAIN, type = rw; BSS: load = MAIN, type = bss, define = yes; } + FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, diff --git a/cfg/sim65c02.cfg b/cfg/sim65c02.cfg index d393a4aee..72098f750 100644 --- a/cfg/sim65c02.cfg +++ b/cfg/sim65c02.cfg @@ -1,12 +1,15 @@ SYMBOLS { __EXEHDR__: type = import; __STACKSIZE__: type = weak, value = $0800; # 2k stack + _peripherals: type = export, value = $FFC0; } + MEMORY { ZP: file = "", start = $0000, size = $0100; HEADER: file = %O, start = $0000, size = $000C; - MAIN: file = %O, define = yes, start = $0200, size = $FDC0 - __STACKSIZE__; + MAIN: file = %O, define = yes, start = $0200, size = $FFC0 - $0200 - __STACKSIZE__; } + SEGMENTS { ZEROPAGE: load = ZP, type = zp; EXEHDR: load = HEADER, type = ro; @@ -18,6 +21,7 @@ SEGMENTS { DATA: load = MAIN, type = rw; BSS: load = MAIN, type = bss, define = yes; } + FEATURES { CONDES: type = constructor, label = __CONSTRUCTOR_TABLE__, diff --git a/doc/sim65.sgml b/doc/sim65.sgml index 9f2914254..9c3764e1d 100644 --- a/doc/sim65.sgml +++ b/doc/sim65.sgml @@ -40,6 +40,8 @@ The simulator is called as follows: Long options: --help Help (this text) --cycles Print amount of executed CPU cycles + --cpu <type> Override CPU type (6502, 65C02, 6502X) + --trace Enable CPU trace --verbose Increase verbosity --version Print the simulator version number </verb></tscreen> @@ -70,6 +72,17 @@ Here is a description of all the command line options: count. + <tag><tt>--cpu <type></tt></tag> + + Specify the CPU type to use while executing the program. This CPU type + is normally determined from the program file header, but it can be useful + to override it. + + <tag><tt>--trace</tt></tag> + + Print a single line of information for each instruction or interrupt that + is executed by the CPU to stdout. + <tag><tt>-v, --verbose</tt></tag> Increase the simulator verbosity. @@ -298,25 +311,23 @@ bytes before the first write to <tt>PERIPHERALS_COUNTER_LATCH</tt> will yield ze Example: <tscreen><verb> -#include <stdio.h> -#include <stdint.h> +/* This example uses the peripheral support in sim65.h */ -volatile uint8_t * CounterLatch = (uint8_t *)0xffc0; -volatile uint8_t * CounterSelect = (uint8_t *)0xffc1; -volatile uint32_t * CounterValue = (uint32_t *)0xffc2; +#include <stdio.h> +#include <sim65.h> static void print_current_counters(void) { - *CounterLatch = 0; /* latch values */ + peripherals.counter.latch = 0; /* latch values */ - *CounterSelect = 0x00; - printf("clock cycles ............... : %08lx %08lx\n", CounterValue[1], CounterValue[0]); - *CounterSelect = 0x01; - printf("instructions ............... : %08lx %08lx\n", CounterValue[1], CounterValue[0]); - *CounterSelect = 0x80; - printf("wallclock time ............. : %08lx %08lx\n", CounterValue[1], CounterValue[0]); - *CounterSelect = 0x81; - printf("wallclock time, split ...... : %08lx %08lx\n", CounterValue[1], CounterValue[0]); + peripherals.counter.select = COUNTER_SELECT_CLOCKCYCLE_COUNTER; + printf("clock cycles ............... : %08lx %08lx\n", peripherals.counter.value32[1], peripherals.counter.value32[0]); + peripherals.counter.select = COUNTER_SELECT_INSTRUCTION_COUNTER; + printf("instructions ............... : %08lx %08lx\n", peripherals.counter.value32[1], peripherals.counter.value32[0]); + peripherals.counter.select = COUNTER_SELECT_WALLCLOCK_TIME; + printf("wallclock time ............. : %08lx %08lx\n", peripherals.counter.value32[1], peripherals.counter.value32[0]); + peripherals.counter.select = COUNTER_SELECT_WALLCLOCK_TIME_SPLIT; + printf("wallclock time, split ...... : %08lx %08lx\n", peripherals.counter.value32[1], peripherals.counter.value32[0]); printf("\n"); } @@ -328,6 +339,102 @@ int main(void) } </verb></tscreen> +<sect>SIM65 control peripheral + +<p>The sim65 simulator supports a memory-mapped peripheral that allows control +of the simulator behavior itself. + +<p>The sim65 control peripheral interface consists of 2 registers: + +<itemize> +<item><tt>PERIPHERALS_SIMCONTROL_CPUMODE</tt> ($FFCA, read/write) +<item><tt>PERIPHERALS_SIMCONTROL_TRACEMODE</tt> ($FFCB, read/write) +</itemize> + +<p>Address <tt>PERIPHERALS_SIMCONTROL_CPUMODE</tt> allows access to the currently active CPU mode. + +<p>Possible values are CPU_6502 (0), CPU_65C02 (1), and CPU_6502X (2). For specialized applications, +it may be useful to switch CPU models at runtime; this is supported by writing 0, 1, or 2 to this address. +Writing any other value will be ignored. + +<p>Address <tt>PERIPHERALS_SIMCONTROL_TRACEMODE</tt> allows inspection and control of the currently active +CPU tracing mode. + +<p>A value of 0 means tracing is disabled; a value of $7F fully enables tracing. The 7 +lower bits of the value actually provide control over which fields are printed; see below +for an explanation of the seven fields. + +<p>Having the ability to enable/disable tracing on the fly can be a useful debugging aid. For example, +it can be used to enable tracing for short fragments of code. Consider the following example: + +<tscreen><verb> +/* This example uses the TRACE_ON and TRACE_OFF macros defined in sim65.h */ + +#include <stdio.h> +#include <sim65.h> + +unsigned x; + +int main(void) +{ + TRACE_ON(); + + x = 0x1234; /* We want to see what happens here. */ + + TRACE_OFF(); + + return 0; +} +</verb></tscreen> + +<p>This small test program, when compiled with optimizations enabled (-O), produces the output trace below: + +<tscreen><verb> +70 232 022E A2 12 ldx #$12 A=7F X=00 Y=04 S=FD Flags=nvdizC SP=FFBC +71 234 0230 A9 34 lda #$34 A=7F X=12 Y=04 S=FD Flags=nvdizC SP=FFBC +72 236 0232 8D C8 02 sta $02C8 A=34 X=12 Y=04 S=FD Flags=nvdizC SP=FFBC +73 240 0235 8E C9 02 stx $02C9 A=34 X=12 Y=04 S=FD Flags=nvdizC SP=FFBC +74 244 0238 A9 00 lda #$00 A=34 X=12 Y=04 S=FD Flags=nvdizC SP=FFBC +75 246 023A 8D CB FF sta $FFCB A=00 X=12 Y=04 S=FD Flags=nvdiZC SP=FFBC +</verb></tscreen> + +<p>The example output shows the full trace format, consisting of the following seven fields: + +<itemize> +<item>The first field is an instruction counter. We see here that the assignment '<tt>x = 0x1234;</tt>' +starts at the 70th CPU instruction since the start of the simulator, and takes four 6502 instructions. +The two instructions that follow correspond to the execution of the <tt>TRACE_OFF</tt>' macro +that disables tracing. +<item>The second field shows the clock cycles since the start of the program. Here we see that the +first four instructions take 12 clock cycles in total (262 - 250 = 12). +<item>The third field shows the program counter as a four-digit, i.e., the PC register. Its 16-bit + value is displayed as a 4-digit hecadecimal number. +<item>The fourth field shows one to three hexadecimal byte values that make up the instruction. +<item>The fifth field shows the instruction in human-readable assembly language. +<item>The sixth field shows the CPU registers before execution of the instruction. The A, X, Y, and + S registers are each shown as a single byte value. The six status bits of the CPU are shown in + the order NVDIZC (Negative, Overflow, Decimal, Interrupt, Zero, Carry). They are displayed as + a capital letter if the flag is set, or a small letter if the flag is unset. +<item>The seventh and last field shows the software stack pointer SP as used by CC65 programs that + conform to the CC65 conventions. +</itemize> + +<p>Writing a specific value to <tt>PERIPHERALS_SIMCONTROL_TRACEMODE</tt> will control which of these +seven fields are displayed. The following values are defined to denote the seven fields: + +<itemize> +<item>TRACE_FIELD_INSTR_COUNTER = 0x40 +<item>TRACE_FIELD_CLOCK_COUNTER = 0x20 +<item>TRACE_FIELD_PC = 0x10 +<item>TRACE_FIELD_INSTR_BYTES = 0x08 +<item>TRACE_FIELD_INSTR_ASSEMBLY = 0x04 +<item>TRACE_FIELD_CPU_REGISTERS = 0x02 +<item>TRACE_FIELD_CC65_SP = 0x01 +</itemize> + +<p>For example, writing the value $16 to <tt>PERIPHERALS_SIMCONTROL_TRACEMODE</tt> will only display +the program counter, instruction assembly, and CPU registers fields. + <sect>Copyright<p> sim65 (and all cc65 binutils) are (C) Copyright 1998-2000 Ullrich von diff --git a/include/sim65.h b/include/sim65.h new file mode 100644 index 000000000..ef59955ff --- /dev/null +++ b/include/sim65.h @@ -0,0 +1,136 @@ +/*****************************************************************************/ +/* */ +/* sim65.h */ +/* */ +/* Definitions for the sim6502 and sim65c02 targets */ +/* */ +/* */ +/* */ +/* (C) 2025 Sidney Cadot */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + +#ifndef _SIM65_H +#define _SIM65_H + +/* Check that we include this file while compiling to a compatible target. */ +#if !defined(__SIM6502__) && !defined(__SIM65C02__) +# error This module may only be used when compiling for the sim6502 or sim65c02 targets! +#endif + +#include <stdint.h> + +/* The sim65 targets (sim6502, sim65c02) have a peripheral memory aperture located at + * address range 0xFFC0 .. 0xFFDF. Currently, the following peripherals are located + * inside that memory apeture: + * + * $FFC0 .. $FFC9 "counter" peripheral + * $FFCA .. $FFCB "sim65 control" peripheral + * $FFCC .. $FFDF (currently unused) + * + * The "peripherals" structure below corresponds to the register layout of the currently + * defined peripherals in this memory range. Combined with the fact that the sim6502 and + * sim65c02 linker configuration files define the "peripherals" symbol to be fixed at + * address $FFC0, this provides easy-to-use and efficient access to the peripheral registers. + * + * After including "sim65.h", it is possible for a C program to do things like: + * + * { + * peripherals.counter.latch = 0; + * peripherals.sim65.cpu_mode = SIM65_CPU_MODE_6502X; + * peripherals.sim65.trace_mode = SIM65_TRACE_MODE_ENABLE_FULL; + * } + * + * Note that "peripherals" variable is declared volatile. This instructs a C compiler to + * forego optimizations on memory accesses to the variable. However, CC65 currently ignores + * the volatile attribute. Fortunately, it is not smart with respect to optimizing + * memory accesses, so accessing the "peripherals" fields works fine in practice. + */ + +extern volatile struct { + struct { + uint8_t latch; + uint8_t select; + union { + uint8_t value [8]; /* Access value as eight separate bytes. */ + uint16_t value16 [4]; /* Access value as four 16-bit words. */ + uint32_t value32 [2]; /* Access value as two 32-bit long words. */ + }; + } counter; + struct { + uint8_t cpu_mode; + uint8_t trace_mode; + } sim65; +} peripherals; + +/* Values for the peripherals.counter.select field. */ +#define COUNTER_SELECT_CLOCKCYCLE_COUNTER 0x00 +#define COUNTER_SELECT_INSTRUCTION_COUNTER 0x01 +#define COUNTER_SELECT_IRQ_COUNTER 0x02 +#define COUNTER_SELECT_NMI_COUNTER 0x03 +#define COUNTER_SELECT_WALLCLOCK_TIME 0x80 +#define COUNTER_SELECT_WALLCLOCK_TIME_SPLIT 0x81 + +/* Values for the peripherals.sim65.cpu_mode field. */ +#define SIM65_CPU_MODE_6502 0x00 +#define SIM65_CPU_MODE_65C02 0x01 +#define SIM65_CPU_MODE_6502X 0x02 + +/* Bitfield values for the peripherals.sim65.trace_mode field. */ +#define SIM65_TRACE_MODE_FIELD_INSTR_COUNTER 0x40 +#define SIM65_TRACE_MODE_FIELD_CLOCK_COUNTER 0x20 +#define SIM65_TRACE_MODE_FIELD_PC 0x10 +#define SIM65_TRACE_MODE_FIELD_INSTR_BYTES 0x08 +#define SIM65_TRACE_MODE_FIELD_INSTR_ASSEMBLY 0x04 +#define SIM65_TRACE_MODE_FIELD_CPU_REGISTERS 0x02 +#define SIM65_TRACE_MODE_FIELD_CC65_SP 0x01 + +/* Values for the peripherals.sim65.trace_mode field that fully disable / enable tracing. */ +#define SIM65_TRACE_MODE_DISABLE 0x00 +#define SIM65_TRACE_MODE_ENABLE_FULL 0x7F + +/* Convenience macros to enable / disable tracing at runtime. */ +#define TRACE_ON() do peripherals.sim65.trace_mode = SIM65_TRACE_MODE_ENABLE_FULL; while(0) +#define TRACE_OFF() do peripherals.sim65.trace_mode = SIM65_TRACE_MODE_DISABLE; while(0) + +/* Convenience macro to query the CPU mode at runtime. */ +#define GET_CPU_MODE() peripherals.sim65.cpu_mode + +/* Convenience macro to set the CPU mode at runtime. + * + * Use SIM65_CPU_MODE_6502, SIM65_CPU_MODE_65C02, or SIM65_CPU_MODE_6502 as argument. + * + * Important Note: + * + * When running in a program compiled for the "sim6502" target, it is safe to switch to + * 65C02 or 6502X mode, since the runtime library will only use plain 6502 opcodes, and + * those work the same in 65C02 and 6502X mode. + * + * However, when running in a program compiled for the "sim65c02" target, it is NOT safe + * to switch to 6502 or 6502X mode, since many routines in the runtime library use + * 65C02-specific opcodes, and these will not work as expected when the CPU is switched + * to 6502 or 6502X mode. When such an instruction is encountered, the program will + * exhibit undefined behavior. + */ +#define SET_CPU_MODE(mode) do peripherals.sim65.cpu_mode = mode; while(0) + +/* End of sim65.h */ +#endif diff --git a/samples/sim65/cpumode_example.c b/samples/sim65/cpumode_example.c new file mode 100644 index 000000000..87fce36cd --- /dev/null +++ b/samples/sim65/cpumode_example.c @@ -0,0 +1,104 @@ +/* + * Sim65 cpu-mode switching example. + * + * Description + * ----------- + * + * We can inspect and manipulate the CPU model that sim65 emulates at runtime. + * + * Sim65 always runs in one of three modes: + * + * - 6502 mode: the 151 documented opcodes are supported; if the processor encounters + * one of the 105 undocumented opcodes, the simulator ends with an + * 'illegal opcode' message. + * - 65C02 mode: the 105 undocumented opcodes now have well-defined behavior. Some + * do useful things, while all others are now defined as NOPs. + * - 6502X mode: the 105 undocumented opcodes don't have documented behavior, but + * they /do/ have behavior on a real 6502. This behavior has been + * figured out, and is deterministic (with minor exceptions). + * In this mode, sim65 mimics the behavior of a real 6502 when + * it encounters an undocumented opcode, rather than terminating. + * + * In the example below, we first switch to 6502X mode and execute a small + * assembly code fragment, then repeat this in 65C02 mode. + * + * The code fragment is designed to distinguish between a 6502 and a 65C02 + * processor based on the behavior of the ADC function in decimal mode. + * + * Important Note: + * + * When running in a program compiled for the "sim6502" target, it is safe to switch to + * 65C02 or 6502X mode, since the runtime library will only use plain 6502 opcodes, and + * those work the same in 65C02 and 6502X mode. + * + * However, when running in a program compiled for the "sim65c02" target, it is NOT safe + * to switch to 6502 or 6502X mode, since many routines in the runtime library use + * 65C02-specific opcodes, and these will not work as expected when the CPU is switched + * to 6502 or 6502X mode. When such an instruction is encountered, the program will + * exhibit undefined behavior. + * + * For this reason, this program will only work when compiled for the "sim6502" target. + * + * Running the example + * ------------------- + * + * cl65 -t sim6502 -O cpumode_example.c -o cpumode_example.prg + * sim65 cpumode_example.prg + * + */ + +#include <stdio.h> +#include <stdbool.h> +#include <sim65.h> + +static bool __fastcall__ is_65c02(void) +{ + /* This assembly routine loads 0 into AX on a 6502 (also on a 6502 on which decimal + * mode is not implemented), and 1 on a 65C02. + * + * Note: this implementation triggers a "control reaches end of non-void function" + * warning that can be safely ignored. While no return statement is present, the + * return value is correctly loaded into AX by the assembly code. + */ + __asm__("ldx #0"); + __asm__("sed"); + __asm__("txa"); + __asm__("sbc #28"); + __asm__("asl a"); + __asm__("sbc #28"); + __asm__("and #1"); + __asm__("cld"); +} + +int main(void) +{ + printf("CPU mode at startup ....... : %u\n", GET_CPU_MODE()); + printf("Is 65C02? ................. : %s\n", is_65c02() ? "YES" : "NO"); + + printf("\n"); + + printf("Switching to 6502 mode ....\n"); + SET_CPU_MODE(SIM65_CPU_MODE_6502); + printf("Current CPU mode .......... : %u\n", GET_CPU_MODE()); + printf("Is 65C02? ................. : %s\n", is_65c02() ? "YES" : "NO"); + + printf("\n"); + + printf("Switching to 65C02 mode ...\n"); + SET_CPU_MODE(SIM65_CPU_MODE_65C02); + printf("Current CPU mode .......... : %u\n", GET_CPU_MODE()); + printf("Is 65C02? ................. : %s\n", is_65c02() ? "YES" : "NO"); + + printf("\n"); + + printf("Switching to 6502X mode ...\n"); + SET_CPU_MODE(SIM65_CPU_MODE_6502X); + printf("Current CPU mode .......... : %u\n", GET_CPU_MODE()); + printf("Is 65C02? ................. : %s\n", is_65c02() ? "YES" : "NO"); + + printf("\n"); + + printf("Bye!\n"); + + return 0; +} diff --git a/samples/sim65/timer_example.c b/samples/sim65/timer_example.c new file mode 100644 index 000000000..0675979b1 --- /dev/null +++ b/samples/sim65/timer_example.c @@ -0,0 +1,117 @@ +/* + * Sim65 timer example. + * + * Description + * ----------- + * + * This example tests the clock cycle counter feature of sim65. + * + * The function 'timestamp' obtains the lower 32-bits of the clock cycle counter. + * + * The function 'calc_sum_terms' calculates the sum of a range of integers + * starting at zero. It simply iterates over all terms, which means that its + * runtime is a linear function of its input value. + * + * In the main function, we first derive an 'offset' value by getting two timestamp + * values, with nothing happening in between. Ideally this should yield a 0 clock + * cycle duration, but due to the overhead of calling the 'timestamp' function, + * and the 'timestamp' function itself, the difference between these timestamp + * will be non-zero. We store this value in the 'overhead' variable, and subtract + * this value in later measurements. + * + * Next, we measure the duration of calling the function 'calc_sum_terms' with two + * input values, 0, and 1. The duration includes storing the result in the 'result' + * variable. + * + * Extrapolating from these two measurements, and assuming that the runtime of + * calling 'calc_sum_terms' and storing its result scales linearly with its argument, + * we can predict the duration of a call to 'calc_sum_terms' with a much larger + * argument (max_terms = 10000). + * + * Finally, we actually measure the duration with max_terms = 10000. If the + * duration measured is equal to the predicted value, we exit successfully. If not, + * we exit with failure. + * + * Running the example + * ------------------- + * + * cl65 -t sim6502 -O timer_example.c -o timer_example.prg + * sim65 timer_example.prg + * + */ + +#include <stdio.h> +#include <stdlib.h> +#include <sim65.h> + +static uint32_t timestamp(void) +{ + peripherals.counter.select = COUNTER_SELECT_CLOCKCYCLE_COUNTER; + peripherals.counter.latch = 0; + return peripherals.counter.value32[0]; +} + +static unsigned long calc_sum_terms(unsigned max_term) +/* A function with a runtime that scales linearly with its argument. */ +{ + unsigned k; + unsigned long sum = 0; + for (k = 0; k <= max_term; ++k) + { + sum += k; + } + return sum; +} + +int main(void) +{ + unsigned max_term; + unsigned long result; + uint32_t t1, t2, overhead, duration; + int32_t d0, d1; + int32_t predicted_duration; + + /* Calibration measurement of zero clock cycles, to determine the overhead. */ + + overhead = 0; + t1 = timestamp(); + t2 = timestamp() - overhead; + overhead = (t2 - t1); + + /* Calculate call duration (including assignment of result) for argument value 0. */ + + max_term = 0; + t1 = timestamp(); + result = calc_sum_terms(max_term); + t2 = timestamp(); + d0 = (t2 - t1) - overhead; + printf("max_term = %u -> result = %lu; duration = %ld\n", max_term, result, d0); + + /* Calculate call duration (including assignment of result) for argument value 1. */ + + max_term = 1; + t1 = timestamp(); + result = calc_sum_terms(max_term); + t2 = timestamp(); + d1 = (t2 - t1) - overhead; + printf("max_term = %u -> result = %lu; duration = %ld\n", max_term, result, d1); + + /* Predict runtime for a much bigger argument value, 10000. */ + + max_term = 10000; + predicted_duration = d0 + max_term * (d1 - d0); + + printf("predicted duration for max_term = %u: %lu\n", max_term, predicted_duration); + + /* Do the actual measurement for max_term = 10000. */ + + t1 = timestamp(); + result = calc_sum_terms(max_term); + t2 = timestamp(); + duration = (t2 - t1) - overhead; + printf("max_term = %u -> result = %lu; duration = %ld\n", max_term, result, duration); + + /* Report success or failure. */ + + return (duration == predicted_duration) ? EXIT_SUCCESS : EXIT_FAILURE; +} diff --git a/samples/sim65/trace_example.c b/samples/sim65/trace_example.c new file mode 100644 index 000000000..cd4ec87d7 --- /dev/null +++ b/samples/sim65/trace_example.c @@ -0,0 +1,40 @@ +/* + * Sim65 trace functionailty example. + * + * Description + * ----------- + * + * The easiest way to use tracing in sim65 is to pass the '--trace' option + * to sim65 while starting a program. + * + * However, it is also possiblke to enable and disable the trace functionality + * at runtime, from within the C code itself. This can be useful to produce + * runtime traces of small code fragments for debugging purposes. + * + * In this example, We use the TRACE_ON and TRACE_OFF macros provided in sim65.h + * to trace what the CPU is doing during a single statement: the assignment of + * a constant to a global variable. + * + * Running the example + * ------------------- + * + * cl65 -t sim6502 -O trace_example.c -o trace_example.prg + * sim65 trace_example.prg + * + * Compiling and running the program like this will produce a trace of six 6502 instructions. + * The first four instructions correspond to the 'x = 0x1234' assignment statement. + * The last two instructions (ending in a store to address $FFCB) disable the trace facility. + * + */ + +#include <sim65.h> + +unsigned x; + +int main(void) +{ + TRACE_ON(); + x = 0x1234; + TRACE_OFF(); + return 0; +} From aca6b33af7c41eb8ac82eb4e96d05a2127e6f43d Mon Sep 17 00:00:00 2001 From: sidney <sidney@jigsaw.nl> Date: Sun, 5 Jan 2025 16:16:13 +0100 Subject: [PATCH 2635/2710] Fixed printf format types, and don't act like a test. --- samples/sim65/timer_example.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/samples/sim65/timer_example.c b/samples/sim65/timer_example.c index 0675979b1..8262bdff8 100644 --- a/samples/sim65/timer_example.c +++ b/samples/sim65/timer_example.c @@ -41,7 +41,6 @@ */ #include <stdio.h> -#include <stdlib.h> #include <sim65.h> static uint32_t timestamp(void) @@ -67,9 +66,9 @@ int main(void) { unsigned max_term; unsigned long result; - uint32_t t1, t2, overhead, duration; - int32_t d0, d1; - int32_t predicted_duration; + uint32_t t1, t2, overhead; + int32_t d0, d1, duration; + int32_t predicted_duration; /* Calibration measurement of zero clock cycles, to determine the overhead. */ @@ -101,9 +100,11 @@ int main(void) max_term = 10000; predicted_duration = d0 + max_term * (d1 - d0); - printf("predicted duration for max_term = %u: %lu\n", max_term, predicted_duration); + printf("predicted duration for max_term = %u: %ld\n", max_term, predicted_duration); - /* Do the actual measurement for max_term = 10000. */ + /* Do the actual measurement for max_term = 10000. + * Note: equality between the prediction and the measurement is only achieved if we compile with -O. + */ t1 = timestamp(); result = calc_sum_terms(max_term); @@ -111,7 +112,6 @@ int main(void) duration = (t2 - t1) - overhead; printf("max_term = %u -> result = %lu; duration = %ld\n", max_term, result, duration); - /* Report success or failure. */ - return (duration == predicted_duration) ? EXIT_SUCCESS : EXIT_FAILURE; + return 0; } From 3a52c143fb3b0e2f4d2e9e2ab4bc068a6e775b9a Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 5 Jan 2025 13:25:12 +0100 Subject: [PATCH 2636/2710] Fix #2566. --- src/cc65/assignment.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index e51dde9ab..e9b200b0f 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -104,9 +104,9 @@ static void CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) } else { - /* The rhs cannot happen to be loaded in the primary as it is too big */ + /* Load the address of rhs into the primary */ + ED_AddrExpr (RExpr); if (!ED_IsLocExpr (RExpr)) { - ED_AddrExpr (RExpr); LoadExpr (CF_NONE, RExpr); } From 447b6e557302571e2b96a2a748920c6894f611c8 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 5 Jan 2025 16:27:36 +0100 Subject: [PATCH 2637/2710] More explicit solution. The first one was a bit hackish. --- src/cc65/assignment.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cc65/assignment.c b/src/cc65/assignment.c index e9b200b0f..a66c495da 100644 --- a/src/cc65/assignment.c +++ b/src/cc65/assignment.c @@ -105,9 +105,15 @@ static void CopyStruct (ExprDesc* LExpr, ExprDesc* RExpr) } else { /* Load the address of rhs into the primary */ - ED_AddrExpr (RExpr); if (!ED_IsLocExpr (RExpr)) { + ED_AddrExpr (RExpr); LoadExpr (CF_NONE, RExpr); + } else if (RExpr->IVal != 0) { + /* We have an expression in the primary plus a constant + ** offset. Adjust the value in the primary accordingly. + */ + g_inc (CF_PTR | CF_CONST, RExpr->IVal); + RExpr->IVal = 0; } /* Push the address of the rhs as the source of memcpy */ From 1556c8ac7cec6d0c3de4d9ca9fefb05797ff7d38 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sun, 5 Jan 2025 17:04:31 +0100 Subject: [PATCH 2638/2710] Move the test from "todo" to "val" since it shouldn't fail any longer. --- test/{todo => val}/bug2566.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/{todo => val}/bug2566.c (100%) diff --git a/test/todo/bug2566.c b/test/val/bug2566.c similarity index 100% rename from test/todo/bug2566.c rename to test/val/bug2566.c From aacd64b2bca57bbcb737c777380084f73b949264 Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Sun, 5 Jan 2025 22:29:51 +0100 Subject: [PATCH 2639/2710] Shorteded is_65c02 routine. --- samples/sim65/cpumode_example.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/sim65/cpumode_example.c b/samples/sim65/cpumode_example.c index 87fce36cd..6cc2d0c16 100644 --- a/samples/sim65/cpumode_example.c +++ b/samples/sim65/cpumode_example.c @@ -60,12 +60,12 @@ static bool __fastcall__ is_65c02(void) * warning that can be safely ignored. While no return statement is present, the * return value is correctly loaded into AX by the assembly code. */ - __asm__("ldx #0"); __asm__("sed"); + __asm__("ldx #0"); __asm__("txa"); - __asm__("sbc #28"); - __asm__("asl a"); - __asm__("sbc #28"); + __asm__("sbc #155"); + __asm__("asl"); + __asm__("rol"); __asm__("and #1"); __asm__("cld"); } From e245ae655d0d1f3a9b6c931e3dbbb0c991fb46be Mon Sep 17 00:00:00 2001 From: Sidney Cadot <sidney@jigsaw.nl> Date: Tue, 7 Jan 2025 23:36:17 +0100 Subject: [PATCH 2640/2710] Fixed typo in color symbol definition. Fixes #2594. --- include/cbm264.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/cbm264.h b/include/cbm264.h index a6317f384..ab634b721 100644 --- a/include/cbm264.h +++ b/include/cbm264.h @@ -97,7 +97,7 @@ #define COLOR_WHITE (BCOLOR_WHITE | CATTR_LUMA7) #define COLOR_RED (BCOLOR_RED | CATTR_LUMA4) #define COLOR_CYAN (BCOLOR_CYAN | CATTR_LUMA7) -#define COLOR_PURPLE (BCOLOR_LIGHVIOLET | CATTR_LUMA7) +#define COLOR_PURPLE (BCOLOR_LIGHTVIOLET | CATTR_LUMA7) #define COLOR_GREEN (BCOLOR_GREEN | CATTR_LUMA7) #define COLOR_BLUE (BCOLOR_BLUE | CATTR_LUMA7) #define COLOR_YELLOW (BCOLOR_YELLOW | CATTR_LUMA7) From 67da1e712343d443cd8c69cd2310fd47d108ee59 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 12 Jan 2025 18:57:31 +0100 Subject: [PATCH 2641/2710] add makefile for simulator samples --- samples/sim65/Makefile | 61 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 samples/sim65/Makefile diff --git a/samples/sim65/Makefile b/samples/sim65/Makefile new file mode 100644 index 000000000..865594736 --- /dev/null +++ b/samples/sim65/Makefile @@ -0,0 +1,61 @@ + +# Run 'make SYS=<target>'; or, set a SYS env. +# var. to build for another target system. +SYS ?= sim6502 + +# Just the usual way to find out if we're +# using cmd.exe to execute make rules. +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + NULLDEV = nul: + DEL = -del /f + RMDIR = rmdir /s /q +else + NULLDEV = /dev/null + DEL = $(RM) + RMDIR = $(RM) -r +endif + +ifdef CC65_HOME + AS = $(CC65_HOME)/bin/ca65 + CC = $(CC65_HOME)/bin/cc65 + CL = $(CC65_HOME)/bin/cl65 + LD = $(CC65_HOME)/bin/ld65 +else + AS := $(if $(wildcard ../../bin/ca65*),../../bin/ca65,ca65) + CC := $(if $(wildcard ../../bin/cc65*),../../bin/cc65,cc65) + CL := $(if $(wildcard ../../bin/cl65*),../../bin/cl65,cl65) + LD := $(if $(wildcard ../../bin/ld65*),../../bin/ld65,ld65) +endif + +EXELIST_sim6502 = \ + cpumode_example.bin \ + timer_example.bin \ + trace_example.bin + +ifneq ($(EXELIST_$(SYS)),) +samples: $(EXELIST_$(SYS)) +else +samples: notavailable +endif + +# empty target used to skip systems that will not work with any program in this dir +notavailable: +ifeq ($(MAKELEVEL),0) + @echo "info: sim65 tests not available for" $(SYS) +else +# suppress the "nothing to be done for 'samples' message + @echo > $(NULLDEV) +endif + +.SUFFIXES: +.SUFFIXES: .c .bin + +%.bin : %.c + $(CL) -t $(SYS) -Oris -m $*.map -o $@ $< + +clean: + @$(DEL) *.o *.map *.bin 2>$(NULLDEV) From 734a76c15862b22ccedfe1c4ea1191e70872f134 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 12 Jan 2025 19:03:39 +0100 Subject: [PATCH 2642/2710] added missing directories to "install" target --- samples/Makefile | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/samples/Makefile b/samples/Makefile index 0e5292306..3680f542c 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -562,6 +562,11 @@ install: $(INSTALL) -d $(DESTDIR)$(samplesdir)/cbm $(INSTALL) -d $(DESTDIR)$(samplesdir)/gamate $(INSTALL) -d $(DESTDIR)$(samplesdir)/supervision + $(INSTALL) -d $(DESTDIR)$(samplesdir)/disasm + $(INSTALL) -d $(DESTDIR)$(samplesdir)/kim1 + $(INSTALL) -d $(DESTDIR)$(samplesdir)/lynx + $(INSTALL) -d $(DESTDIR)$(samplesdir)/sim65 + $(INSTALL) -d $(DESTDIR)$(samplesdir)/sym1 $(INSTALL) -m0644 *.* $(DESTDIR)$(samplesdir) $(INSTALL) -m0644 readme.txt $(DESTDIR)$(samplesdir) $(INSTALL) -m0644 Makefile $(DESTDIR)$(samplesdir) @@ -573,6 +578,11 @@ install: $(INSTALL) -m0644 cbm/*.* $(DESTDIR)$(samplesdir)/cbm $(INSTALL) -m0644 gamate/*.* $(DESTDIR)$(samplesdir)/gamate $(INSTALL) -m0644 supervision/*.* $(DESTDIR)$(samplesdir)/supervision + $(INSTALL) -m0644 disasm/*.* $(DESTDIR)$(samplesdir)/disasm + $(INSTALL) -m0644 kim1/*.* $(DESTDIR)$(samplesdir)/kim1 + $(INSTALL) -m0644 lynx/*.* $(DESTDIR)$(samplesdir)/lynx + $(INSTALL) -m0644 sim65/*.* $(DESTDIR)$(samplesdir)/sim65 + $(INSTALL) -m0644 sym1/*.* $(DESTDIR)$(samplesdir)/sym1 # -------------------------------------------------------------------------- # Packaging rules From 99b113de64e4505b85ab5bff1cfc7024c3478b1d Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Sun, 19 Jan 2025 16:51:11 +0100 Subject: [PATCH 2643/2710] Make memory between the end of the text screen and the start of the loaded program available to the linker. --- cfg/apple2-hgr.cfg | 2 ++ cfg/apple2-overlay.cfg | 2 ++ cfg/apple2-system.cfg | 2 ++ cfg/apple2.cfg | 2 ++ cfg/apple2enh-hgr.cfg | 2 ++ cfg/apple2enh-overlay.cfg | 2 ++ cfg/apple2enh-system.cfg | 2 ++ cfg/apple2enh.cfg | 2 ++ 8 files changed, 16 insertions(+) diff --git a/cfg/apple2-hgr.cfg b/cfg/apple2-hgr.cfg index 109fbe4f6..402e53b34 100644 --- a/cfg/apple2-hgr.cfg +++ b/cfg/apple2-hgr.cfg @@ -17,6 +17,7 @@ MEMORY { MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; + LOW: file = "", define = yes, start = $0800, size = %S - $0800; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; @@ -31,6 +32,7 @@ SEGMENTS { ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; + LOWBSS: load = LOW, type = bss, optional = yes; } FEATURES { CONDES: type = constructor, diff --git a/cfg/apple2-overlay.cfg b/cfg/apple2-overlay.cfg index 754ece90f..512b19c16 100644 --- a/cfg/apple2-overlay.cfg +++ b/cfg/apple2-overlay.cfg @@ -25,6 +25,7 @@ MEMORY { MAIN: file = %O, define = yes, start = %S + __OVERLAYSIZE__, size = __HIMEM__ - __OVERLAYSIZE__ - %S; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; + LOW: file = "", define = yes, start = $0800, size = %S - $0800; OVL1: file = "%O.1", start = %S, size = __OVERLAYSIZE__; OVL2: file = "%O.2", start = %S, size = __OVERLAYSIZE__; OVL3: file = "%O.3", start = %S, size = __OVERLAYSIZE__; @@ -47,6 +48,7 @@ SEGMENTS { ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; + LOWBSS: load = LOW, type = bss, optional = yes; OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes; OVERLAY2: load = OVL2, type = ro, define = yes, optional = yes; OVERLAY3: load = OVL3, type = ro, define = yes, optional = yes; diff --git a/cfg/apple2-system.cfg b/cfg/apple2-system.cfg index 3dd94d793..8720ae800 100644 --- a/cfg/apple2-system.cfg +++ b/cfg/apple2-system.cfg @@ -13,6 +13,7 @@ MEMORY { MAIN: file = %O, define = yes, start = $2000, size = $BF00 - $2000; BSS: file = "", start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; + LOW: file = "", define = yes, start = $0800, size = $2000 - $0800; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; @@ -26,6 +27,7 @@ SEGMENTS { ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; + LOWBSS: load = LOW, type = bss, optional = yes; } FEATURES { CONDES: type = constructor, diff --git a/cfg/apple2.cfg b/cfg/apple2.cfg index 19932b1f9..c33bdee2d 100644 --- a/cfg/apple2.cfg +++ b/cfg/apple2.cfg @@ -17,6 +17,7 @@ MEMORY { MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; + LOW: file = "", define = yes, start = $0800, size = %S - $0800; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; @@ -30,6 +31,7 @@ SEGMENTS { ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; + LOWBSS: load = LOW, type = bss, optional = yes; } FEATURES { CONDES: type = constructor, diff --git a/cfg/apple2enh-hgr.cfg b/cfg/apple2enh-hgr.cfg index 109fbe4f6..402e53b34 100644 --- a/cfg/apple2enh-hgr.cfg +++ b/cfg/apple2enh-hgr.cfg @@ -17,6 +17,7 @@ MEMORY { MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; + LOW: file = "", define = yes, start = $0800, size = %S - $0800; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; @@ -31,6 +32,7 @@ SEGMENTS { ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; + LOWBSS: load = LOW, type = bss, optional = yes; } FEATURES { CONDES: type = constructor, diff --git a/cfg/apple2enh-overlay.cfg b/cfg/apple2enh-overlay.cfg index 754ece90f..512b19c16 100644 --- a/cfg/apple2enh-overlay.cfg +++ b/cfg/apple2enh-overlay.cfg @@ -25,6 +25,7 @@ MEMORY { MAIN: file = %O, define = yes, start = %S + __OVERLAYSIZE__, size = __HIMEM__ - __OVERLAYSIZE__ - %S; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; + LOW: file = "", define = yes, start = $0800, size = %S - $0800; OVL1: file = "%O.1", start = %S, size = __OVERLAYSIZE__; OVL2: file = "%O.2", start = %S, size = __OVERLAYSIZE__; OVL3: file = "%O.3", start = %S, size = __OVERLAYSIZE__; @@ -47,6 +48,7 @@ SEGMENTS { ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; + LOWBSS: load = LOW, type = bss, optional = yes; OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes; OVERLAY2: load = OVL2, type = ro, define = yes, optional = yes; OVERLAY3: load = OVL3, type = ro, define = yes, optional = yes; diff --git a/cfg/apple2enh-system.cfg b/cfg/apple2enh-system.cfg index 3dd94d793..8720ae800 100644 --- a/cfg/apple2enh-system.cfg +++ b/cfg/apple2enh-system.cfg @@ -13,6 +13,7 @@ MEMORY { MAIN: file = %O, define = yes, start = $2000, size = $BF00 - $2000; BSS: file = "", start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; + LOW: file = "", define = yes, start = $0800, size = $2000 - $0800; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; @@ -26,6 +27,7 @@ SEGMENTS { ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; + LOWBSS: load = LOW, type = bss, optional = yes; } FEATURES { CONDES: type = constructor, diff --git a/cfg/apple2enh.cfg b/cfg/apple2enh.cfg index 19932b1f9..c33bdee2d 100644 --- a/cfg/apple2enh.cfg +++ b/cfg/apple2enh.cfg @@ -17,6 +17,7 @@ MEMORY { MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S; BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__; LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__; + LOW: file = "", define = yes, start = $0800, size = %S - $0800; } SEGMENTS { ZEROPAGE: load = ZP, type = zp; @@ -30,6 +31,7 @@ SEGMENTS { ONCE: load = MAIN, type = ro, define = yes; LC: load = MAIN, run = LC, type = ro, optional = yes; BSS: load = BSS, type = bss, define = yes; + LOWBSS: load = LOW, type = bss, optional = yes; } FEATURES { CONDES: type = constructor, From fb12363a6a4eb559ab28b12edd57c3d45e535340 Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Fri, 31 Jan 2025 20:26:35 +0100 Subject: [PATCH 2644/2710] Fixed cassette boot file header #2600 --- libsrc/atari/cashdr.s | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libsrc/atari/cashdr.s b/libsrc/atari/cashdr.s index 99aefe68f..d4824f816 100644 --- a/libsrc/atari/cashdr.s +++ b/libsrc/atari/cashdr.s @@ -31,6 +31,8 @@ _cas_hdr: ldy #80 sta (SAVMSC),y .endif + lda #$3c + sta PACTL clc rts From 46b2f95ac892769785408a086da7c015f39f6c4a Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Fri, 31 Jan 2025 20:56:59 +0100 Subject: [PATCH 2645/2710] comment --- libsrc/atari/cashdr.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/atari/cashdr.s b/libsrc/atari/cashdr.s index d4824f816..c00ee98c2 100644 --- a/libsrc/atari/cashdr.s +++ b/libsrc/atari/cashdr.s @@ -31,7 +31,7 @@ _cas_hdr: ldy #80 sta (SAVMSC),y .endif - lda #$3c + lda #$3c ; motor off sta PACTL clc rts From 0082473630675bdc91e323fbadde7d68260cdba5 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Sun, 23 Feb 2025 00:35:23 +0100 Subject: [PATCH 2646/2710] Atari: fix fallout of change of INIT segment to 'bss' type The size of the load chunk was calculated incorrectly in exehdr.s since the INIT segment is no longer being part of the file anymore. While at it, change atari-cassette.cfg so that order of BSS and INIT is the same as in the other configs. See 692f96409d4e809d8 why it was in different order. --- cfg/atari-cassette.cfg | 2 +- cfg/atari-overlay.cfg | 2 +- cfg/atari-xex.cfg | 2 +- cfg/atari.cfg | 2 +- cfg/atarixl-largehimem.cfg | 2 +- cfg/atarixl-overlay.cfg | 2 +- cfg/atarixl-xex.cfg | 2 +- cfg/atarixl.cfg | 2 +- libsrc/atari/cashdr.s | 6 +++--- libsrc/atari/exehdr.s | 4 ++-- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/cfg/atari-cassette.cfg b/cfg/atari-cassette.cfg index 13b34cc73..1d7d02f93 100644 --- a/cfg/atari-cassette.cfg +++ b/cfg/atari-cassette.cfg @@ -22,8 +22,8 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro, optional = yes; DATA: load = MAIN, type = rw, optional = yes; + INIT: load = MAIN, type = bss, define = yes, optional = yes; BSS: load = MAIN, type = bss, define = yes, optional = yes; - INIT: load = MAIN, type = bss, optional = yes; } FEATURES { CONDES: type = constructor, diff --git a/cfg/atari-overlay.cfg b/cfg/atari-overlay.cfg index 60f98e453..1dde26331 100644 --- a/cfg/atari-overlay.cfg +++ b/cfg/atari-overlay.cfg @@ -52,7 +52,7 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss, optional = yes; + INIT: load = MAIN, type = bss, define = yes, optional = yes; BSS: load = MAIN, type = bss, define = yes; AUTOSTRT: load = TRAILER, type = ro; OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes; diff --git a/cfg/atari-xex.cfg b/cfg/atari-xex.cfg index deab5c7a5..1ab60af2e 100644 --- a/cfg/atari-xex.cfg +++ b/cfg/atari-xex.cfg @@ -36,7 +36,7 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss, optional = yes; + INIT: load = MAIN, type = bss, define = yes, optional = yes; BSS: load = MAIN, type = bss, define = yes; } FEATURES { diff --git a/cfg/atari.cfg b/cfg/atari.cfg index 37337ea53..0af121de3 100644 --- a/cfg/atari.cfg +++ b/cfg/atari.cfg @@ -40,7 +40,7 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss, optional = yes; + INIT: load = MAIN, type = bss, define = yes, optional = yes; BSS: load = MAIN, type = bss, define = yes; AUTOSTRT: load = TRAILER, type = ro; } diff --git a/cfg/atarixl-largehimem.cfg b/cfg/atarixl-largehimem.cfg index 8f70597aa..6df9b3f80 100644 --- a/cfg/atarixl-largehimem.cfg +++ b/cfg/atarixl-largehimem.cfg @@ -67,7 +67,7 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss, optional = yes; + INIT: load = MAIN, type = bss, define = yes, optional = yes; BSS: load = MAIN, type = bss, define = yes; AUTOSTRT: load = TRAILER, type = ro; } diff --git a/cfg/atarixl-overlay.cfg b/cfg/atarixl-overlay.cfg index 3b8da4256..5cfdcdbc5 100644 --- a/cfg/atarixl-overlay.cfg +++ b/cfg/atarixl-overlay.cfg @@ -78,7 +78,7 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss, optional = yes; + INIT: load = MAIN, type = bss, define = yes, optional = yes; BSS: load = MAIN, type = bss, define = yes; AUTOSTRT: load = TRAILER, type = ro; diff --git a/cfg/atarixl-xex.cfg b/cfg/atarixl-xex.cfg index 853096c6f..a0a4a971d 100644 --- a/cfg/atarixl-xex.cfg +++ b/cfg/atarixl-xex.cfg @@ -58,7 +58,7 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss, optional = yes; + INIT: load = MAIN, type = bss, define = yes, optional = yes; BSS: load = MAIN, type = bss, define = yes; SRPREPHDR: load = UNUSED, type = ro; SRPREPTRL: load = UNUSED, type = ro; diff --git a/cfg/atarixl.cfg b/cfg/atarixl.cfg index 1517afb5a..5e7199cd3 100644 --- a/cfg/atarixl.cfg +++ b/cfg/atarixl.cfg @@ -65,7 +65,7 @@ SEGMENTS { CODE: load = MAIN, type = ro, define = yes; RODATA: load = MAIN, type = ro; DATA: load = MAIN, type = rw; - INIT: load = MAIN, type = bss, optional = yes; + INIT: load = MAIN, type = bss, define = yes, optional = yes; BSS: load = MAIN, type = bss, define = yes; AUTOSTRT: load = TRAILER, type = ro; } diff --git a/libsrc/atari/cashdr.s b/libsrc/atari/cashdr.s index c00ee98c2..c0d64a56b 100644 --- a/libsrc/atari/cashdr.s +++ b/libsrc/atari/cashdr.s @@ -10,10 +10,10 @@ .include "atari.inc" - .import __BSS_RUN__, __STARTADDRESS__, _cas_init + .import __INIT_RUN__, __STARTADDRESS__, _cas_init .export _cas_hdr -.assert ((__BSS_RUN__ - __STARTADDRESS__ + 127) / 128) < $101, error, "File to big to load from cassette" +.assert ((__INIT_RUN__ - __STARTADDRESS__ + 127) / 128) < $101, error, "File to big to load from cassette" ; for a description of the cassette header, see De Re Atari, appendix C @@ -22,7 +22,7 @@ _cas_hdr: .byte 0 ; ignored - .byte <((__BSS_RUN__ - __STARTADDRESS__ + 127) / 128) ; # of 128-byte records to read + .byte <((__INIT_RUN__ - __STARTADDRESS__ + 127) / 128) ; # of 128-byte records to read .word __STARTADDRESS__ ; load address .word _cas_init ; init address diff --git a/libsrc/atari/exehdr.s b/libsrc/atari/exehdr.s index 7abb7c1ac..fe17aeafd 100644 --- a/libsrc/atari/exehdr.s +++ b/libsrc/atari/exehdr.s @@ -1,11 +1,11 @@ ; This file defines the EXE header and main chunk load header for Atari executables .export __EXEHDR__: absolute = 1 - .import __MAIN_START__, __BSS_LOAD__ + .import __MAIN_START__, __INIT_LOAD__ .segment "EXEHDR" .word $FFFF .segment "MAINHDR" .word __MAIN_START__ - .word __BSS_LOAD__ - 1 + .word __INIT_LOAD__ - 1 From 04ada63935c6ac6eb57ab47ff08fb74ad0f19478 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Sun, 23 Feb 2025 01:06:08 +0100 Subject: [PATCH 2647/2710] Atari: let crt0.s always provide an (empty) INIT segment --- libsrc/atari/crt0.s | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libsrc/atari/crt0.s b/libsrc/atari/crt0.s index 381aa699f..50e3ca7b6 100644 --- a/libsrc/atari/crt0.s +++ b/libsrc/atari/crt0.s @@ -204,6 +204,10 @@ APPMHI_save: .res 2 ; ------------------------------------------------------------------------ +.segment "INIT" ; have at least one (empty) segment of INIT, exehdr.s needs its definition + +; ------------------------------------------------------------------------ + .segment "LOWCODE" ; have at least one (empty) segment of LOWCODE, so that the next line works even if the program doesn't make use of this segment .assert (__LOWCODE_RUN__ + __LOWCODE_SIZE__ <= $4000 || __LOWCODE_RUN__ > $7FFF || __LOWCODE_SIZE__ = 0), warning, "'lowcode area' reaches into $4000..$7FFF bank memory window" ; check for LOWBSS_SIZE = 0 not needed since the only file which uses LOWBSS (irq.s) also uses LOWCODE From b0220e545664d501b6fa2478f66e00567deac4b2 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Sun, 2 Mar 2025 09:26:31 +0100 Subject: [PATCH 2648/2710] fix problem in _get_tv for GEOS CBM Found by mkslack, see #2046 --- libsrc/geos-cbm/system/get_ostype.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsrc/geos-cbm/system/get_ostype.s b/libsrc/geos-cbm/system/get_ostype.s index 6e6731952..9ba8b7982 100644 --- a/libsrc/geos-cbm/system/get_ostype.s +++ b/libsrc/geos-cbm/system/get_ostype.s @@ -82,8 +82,8 @@ tvmode: ; PAL/NTSC check here, result in A pha lda #IO_IN ; enable access to I/O sta CPU_DATA - bit rasreg - bpl tvmode ; wait for rasterline 127<x<256 +: bit rasreg + bpl :- ; wait for rasterline 127<x<256 lda #24 ; (rasterline now >=256!) modelp: cmp rasreg ; wait for rasterline = 24 (or 280 on PAL) From 16224cdd36b30c43d17d2b15a1096de1f24cc763 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Tue, 4 Mar 2025 23:07:13 +0100 Subject: [PATCH 2649/2710] atari5200: fix _clrscr to use correct screen size Could be different than default when linking with atari5200-conioscreen-20x12.o. --- cfg/atari5200.cfg | 2 +- libsrc/atari5200/clrscr.s | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cfg/atari5200.cfg b/cfg/atari5200.cfg index e8f6d44a5..a487bdcab 100644 --- a/cfg/atari5200.cfg +++ b/cfg/atari5200.cfg @@ -15,7 +15,7 @@ MEMORY { SEGMENTS { ZEROPAGE: load = ZP, type = zp, optional = yes; EXTZP: load = ZP, type = zp, optional = yes; - DLIST: load = ROM , type = ro, define = yes, optional = yes; + DLIST: load = ROM, type = ro, define = yes, optional = yes; STARTUP: load = ROM, type = ro, define = yes, optional = yes; LOWCODE: load = ROM, type = ro, define = yes, optional = yes; ONCE: load = ROM, type = ro, optional = yes; diff --git a/libsrc/atari5200/clrscr.s b/libsrc/atari5200/clrscr.s index 041f34a67..d92419b9e 100644 --- a/libsrc/atari5200/clrscr.s +++ b/libsrc/atari5200/clrscr.s @@ -7,8 +7,9 @@ .export _clrscr .include "atari5200.inc" .importzp ptr1 + .importzp screen_width, screen_height -SCRSIZE = 480 ; 20x24: size of default conio atari5200 screen +SCRSIZE = screen_width * screen_height _clrscr:lda SAVMSC ; screen memory sta ptr1 From 02470a23432fe37dec69766319314931a57adb77 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Tue, 4 Mar 2025 23:39:38 +0100 Subject: [PATCH 2650/2710] atari5200: fix conio screen initialization Screen memory clearing was wrong, now uses _clrscr function. --- libsrc/atari5200/conioscreen.s | 20 +++----------------- libsrc/atari5200/extra/conioscreen-20x12.s | 20 +++----------------- 2 files changed, 6 insertions(+), 34 deletions(-) diff --git a/libsrc/atari5200/conioscreen.s b/libsrc/atari5200/conioscreen.s index 8c78fd44f..0c77b14c7 100644 --- a/libsrc/atari5200/conioscreen.s +++ b/libsrc/atari5200/conioscreen.s @@ -7,6 +7,7 @@ SCREEN_BUF_SIZE = 20 * 24 SCREEN_BUF = $4000 - SCREEN_BUF_SIZE + .import _clrscr .export screen_setup .export screen_width, screen_height .export conio_color @@ -26,24 +27,10 @@ screen_setup: lda #>SCREEN_BUF sta SAVMSC+1 - ; initialize cursor position - lda #0 - sta COLCRS_5200 - sta ROWCRS_5200 - ; clear screen buffer - ldy #<(SCREEN_BUF_SIZE-1) - ldx #>(SCREEN_BUF_SIZE-1) -clrscr: sta (SAVMSC),y - dey - cpy #$FF - bne clrscr - dex - cpx #$FF - bne clrscr + jsr _clrscr ; set default colors - lda #GTIA_COLOR_WHITE sta COLOR0 lda #GTIA_COLOR_LIGHTRED @@ -55,7 +42,6 @@ clrscr: sta (SAVMSC),y sta COLOR4 ; background ; set display list - lda #<dlist sta SDLSTL lda #>dlist @@ -82,7 +68,7 @@ dlist: .repeat 3 .byte DL_CHR20x8x2 .endrepeat - .byte DL_JVB + .byte DL_JVB .word dlist ; end of display list diff --git a/libsrc/atari5200/extra/conioscreen-20x12.s b/libsrc/atari5200/extra/conioscreen-20x12.s index aeb11cb43..c2aa0a65f 100644 --- a/libsrc/atari5200/extra/conioscreen-20x12.s +++ b/libsrc/atari5200/extra/conioscreen-20x12.s @@ -7,6 +7,7 @@ SCREEN_BUF_SIZE = 20 * 12 SCREEN_BUF = $4000 - SCREEN_BUF_SIZE + .import _clrscr .export screen_setup .export screen_width, screen_height .export conio_color @@ -26,24 +27,10 @@ screen_setup: lda #>SCREEN_BUF sta SAVMSC+1 - ; initialize cursor position - lda #0 - sta COLCRS_5200 - sta ROWCRS_5200 - ; clear screen buffer - ldy #<(SCREEN_BUF_SIZE-1) - ldx #>(SCREEN_BUF_SIZE-1) -clrscr: sta (SAVMSC),y - dey - cpy #$FF - bne clrscr - dex - cpx #$FF - bne clrscr + jsr _clrscr ; set default colors - lda #GTIA_COLOR_WHITE sta COLOR0 lda #GTIA_COLOR_LIGHTRED @@ -55,7 +42,6 @@ clrscr: sta (SAVMSC),y sta COLOR4 ; background ; set display list - lda #<dlist sta SDLSTL lda #>dlist @@ -82,7 +68,7 @@ dlist: .repeat 3 .byte DL_CHR20x16x2 .endrepeat - .byte DL_JVB + .byte DL_JVB .word dlist ; end of display list From 020fe4028ac2a3c4ca56aa16cca9ca290e91392d Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 5 Mar 2025 18:26:13 +0100 Subject: [PATCH 2651/2710] Fix RANGE ERROR STOPPED AT 8214 On a 48k Apple II, the BLTU2 call throws an error, even when there is nothing to copy in the LC segment. Add an alternative LC copy, based on memcpy, to an extra file that the user can link in as with iobuf-0800. This memcpy-based version allows our programs to run on Integer ROM apple2. It costs 21 bytes in binary size, plus memcpy (60 bytes in binary size + RAM use) if it wasn't already linked in. --- libsrc/apple2/crt0.s | 4 +++- libsrc/apple2/extra/lc-copy-memcpy.s | 33 ++++++++++++++++++++++++++++ libsrc/apple2/lc-copy-applesoft.s | 9 ++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 libsrc/apple2/extra/lc-copy-memcpy.s create mode 100644 libsrc/apple2/lc-copy-applesoft.s diff --git a/libsrc/apple2/crt0.s b/libsrc/apple2/crt0.s index 42e26c27b..4b9a59153 100644 --- a/libsrc/apple2/crt0.s +++ b/libsrc/apple2/crt0.s @@ -10,6 +10,7 @@ .import initlib, _exit .import zerobss, callmain + .import bltu2 .import __ONCE_LOAD__, __ONCE_SIZE__ ; Linker generated .import __LC_START__, __LC_LAST__ ; Linker generated @@ -93,6 +94,7 @@ basic: lda HIMEM ; Call the module constructors. jsr initlib + ; Copy the LC segment to its destination ; Switch in LC bank 2 for W/O. bit $C081 bit $C081 @@ -120,7 +122,7 @@ basic: lda HIMEM ; Call into Applesoft Block Transfer Up -- which handles zero- ; sized blocks well -- to move the content of the LC memory area. - jsr $D39A ; BLTU2 + jsr bltu2 ; BLTU2 ; Switch in LC bank 2 for R/O and return. bit $C080 diff --git a/libsrc/apple2/extra/lc-copy-memcpy.s b/libsrc/apple2/extra/lc-copy-memcpy.s new file mode 100644 index 000000000..c4dc8d8ef --- /dev/null +++ b/libsrc/apple2/extra/lc-copy-memcpy.s @@ -0,0 +1,33 @@ +; +; Colin Leroy-Mira, 06.03.2025 +; +; Copy the LC segment from the end of the binary to the Language Card +; using _memcpy. This allows running apple2 programs on the original +; Integer ROM Apple ][. +; + + .export bltu2 + + .import _memcpy, pushax + .import __ONCE_LOAD__, __ONCE_SIZE__ ; Linker generated + .import __LC_START__, __LC_LAST__ ; Linker generated + + .segment "ONCE" + +bltu2: + ; Get the destination start address. + lda #<__LC_START__ + ldx #>__LC_START__ + jsr pushax + + ; Get the source start address. + lda #<(__ONCE_LOAD__ + __ONCE_SIZE__) + ldx #>(__ONCE_LOAD__ + __ONCE_SIZE__) + jsr pushax + + ; Set the length + lda #<(__LC_LAST__ - __LC_START__) + ldx #>(__LC_LAST__ - __LC_START__) + + ; And do the copy + jmp _memcpy diff --git a/libsrc/apple2/lc-copy-applesoft.s b/libsrc/apple2/lc-copy-applesoft.s new file mode 100644 index 000000000..70a04431d --- /dev/null +++ b/libsrc/apple2/lc-copy-applesoft.s @@ -0,0 +1,9 @@ +; +; Oliver Schmidt, 15.09.2009 +; +; Copy the LC segment from the end of the binary to the Language Card +; using AppleSoft's BLTU2 routine. +; + .export bltu2 + +bltu2 := $D39A From c8eb6e2dd55b4cf1a1e8dd481bfe0b7d66e5ace0 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Thu, 6 Mar 2025 17:20:23 +0100 Subject: [PATCH 2652/2710] Apple II: Document BLTU alternative --- doc/apple2.sgml | 21 +++++++++++++++++++ libsrc/apple2/crt0.s | 2 +- ...c-copy-memcpy.s => integer-basic-compat.s} | 0 3 files changed, 22 insertions(+), 1 deletion(-) rename libsrc/apple2/extra/{lc-copy-memcpy.s => integer-basic-compat.s} (100%) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index ffe0e2397..28120577a 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -92,7 +92,28 @@ several useful settings: </descrip><p> +<descrip> + <tag/Installing your code in the Language Card/ + The code in the LC segment will automatically be copied from the end of the + binary into the Language Card at startup, even if the segment is empty (a + 0-byte copy). This allows for tighter code. This code will be copied using the + Applesoft BLTU2 function that is available starting with the Apple ][+, + but not in the original Apple ][ with an Integer BASIC ROM. This shows as + a "RANGE ERROR. STOPPING AT ..." message on startup. + + If you want to target the Integer BASIC original Apple ][, you can link in an + alternative implementation of the LC segment loading, at the cost of linking + in memcpy (60 bytes): + + Using <tt/apple2-integer-basic-compat.o/ is as simple as placing it on the linker + command line like this: + + <tscreen><verb> + cl65 -t apple2 myprog.c apple2-integer-basic-compat.o + </verb></tscreen> + +</descrip> <sect>Linker configurations<label id="link-configs"><p> diff --git a/libsrc/apple2/crt0.s b/libsrc/apple2/crt0.s index 4b9a59153..628303687 100644 --- a/libsrc/apple2/crt0.s +++ b/libsrc/apple2/crt0.s @@ -122,7 +122,7 @@ basic: lda HIMEM ; Call into Applesoft Block Transfer Up -- which handles zero- ; sized blocks well -- to move the content of the LC memory area. - jsr bltu2 ; BLTU2 + jsr bltu2 ; Switch in LC bank 2 for R/O and return. bit $C080 diff --git a/libsrc/apple2/extra/lc-copy-memcpy.s b/libsrc/apple2/extra/integer-basic-compat.s similarity index 100% rename from libsrc/apple2/extra/lc-copy-memcpy.s rename to libsrc/apple2/extra/integer-basic-compat.s From fd4c1e193dea6a2bc3de79a8c745515e5b84559b Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Wed, 12 Mar 2025 14:19:20 +0100 Subject: [PATCH 2653/2710] Completely disable/enable 80 column firmware. The //e 80 column firmware allows to switch between 80 and 40 clumns without clearing the screen. So far, I made that feature available via videomode(). However thinking about it once more, I don't see a C program making use of it. A C program rather benefits from the consistent behavior of videomode() always clearing the screen. Apart from that, the (default) 40 column display and the 40 column display with 80 column firmware active, behave differently (CH vs. OURCH) which causes subtile issues. Those issues can be avoid altogether by simply always deactivating the 80 column firmware when switching from 80 column display to 40 column display. Of course, those issues are also relevant, if the 40 column display with 80 column firmware is already active when the C program starts. However, I have reasons to believe that running the Apple II in that mode was/is very unpopular. --- include/apple2enh.h | 4 ++-- libsrc/apple2/videomode.s | 42 +++++++-------------------------------- 2 files changed, 9 insertions(+), 37 deletions(-) diff --git a/include/apple2enh.h b/include/apple2enh.h index 3989d0b8d..864d24986 100644 --- a/include/apple2enh.h +++ b/include/apple2enh.h @@ -82,8 +82,8 @@ #define CH_F10 0xB0 /* Video modes */ -#define VIDEOMODE_40x24 0x0011 -#define VIDEOMODE_80x24 0x0012 +#define VIDEOMODE_40x24 0x15 +#define VIDEOMODE_80x24 0x00 #define VIDEOMODE_40COL VIDEOMODE_40x24 #define VIDEOMODE_80COL VIDEOMODE_80x24 diff --git a/libsrc/apple2/videomode.s b/libsrc/apple2/videomode.s index 13151a48a..414105b18 100644 --- a/libsrc/apple2/videomode.s +++ b/libsrc/apple2/videomode.s @@ -6,7 +6,6 @@ .ifdef __APPLE2ENH__ .export _videomode - .import COUT .include "apple2.inc" @@ -17,52 +16,25 @@ _videomode: bit RD80VID php - ; If we are in 80 column mode then the 80 column firmware is - ; known to be active so we can just print the ctrl-char code - ; (even if this only means staying in the current videomode) - bpl :+ - jsr COUT - bra done - - ; If we are in 40 column mode and want to set 40 column mode - ; then we explicitly do nothing as we neither know about the - ; current state of the 80 column firmware nor want to fix it -: cmp #$11 ; Ctrl-char code for 40 cols - beq done - - ; If we are in 40 column mode and want to set 80 column mode - ; then we first presume the 80 column firmware being already - ; active and print the ctrl-char code (this causes a garbage - ; char to be printed on the screen if isn't already active) - jsr COUT - - ; If we successfully switched to 80 column mode then the 80 - ; column firmware was in fact already active and we're done - bit RD80VID - bmi done - - ; The 80 column firmware isn't already active so we need to - ; initialize it - causing the screen to be cleared and thus - ; the garbage char printed above to be erased (but for some - ; reason the cursor horizontal position not to be zeroed) - stz CH - ; Initializing the 80 column firmware needs the ROM switched ; in, otherwise it would copy the F8 ROM to the LC (@ $CEF4) bit $C082 - ; Initialize 80 column firmware - jsr $C300 ; PR#3 + ; Call 80 column firmware with ctrl-char code + jsr $C300 ; Switch in LC bank 2 for R/O bit $C080 + ; Switch in alternate charset again + sta SETALTCHAR + ; Return ctrl-char code for setting previous ; videomode using the saved videomode flag -done: lda #$11 ; Ctrl-char code for 40 cols + lda #$15 ; Ctrl-char code for 40 cols plp bpl :+ - inc a ; Ctrl-char code for 80 cols + lda #$00 ; Ctrl-char code for 80 cols : rts ; X was preserved all the way .endif ; __APPLE2ENH__ From 7c2671be2a8c365f4254abec8682928ff72651de Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Wed, 12 Mar 2025 21:33:13 +0100 Subject: [PATCH 2654/2710] Disable interrupts during aux memory access. Interrupt handlers rather likely access text screen holes. Especially MSLOT is obligatory for every interrupt handler that requires access to an extension ROM ($C800-$CFFE) in order to be able to re-enable the extension ROM that was enabled when the interrupt occured. Those text screen holes only hold valid values in main memory so interrupts must be disabled while the aux memory text screen is mapped. --- libsrc/apple2/cgetc.s | 5 +++-- libsrc/apple2/cpeekc.s | 11 ++++++++--- libsrc/apple2/cputc.s | 16 +++++++++++----- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/libsrc/apple2/cgetc.s b/libsrc/apple2/cgetc.s index ecce9f9de..d2ebe5db8 100644 --- a/libsrc/apple2/cgetc.s +++ b/libsrc/apple2/cgetc.s @@ -9,6 +9,7 @@ .export _cgetc .import cursor, putchardirect + .include "zeropage.inc" .include "apple2.inc" _cgetc: @@ -22,7 +23,7 @@ _cgetc: .else lda #' ' | $40 ; Blank, flashing .endif - jsr putchardirect ; Returns old character in X + jsr putchardirect ; Saves old character in tmp3 ; Wait for keyboard strobe. : inc RNDL ; Increment random counter low @@ -37,7 +38,7 @@ _cgetc: ; Restore old character. pha - txa + lda tmp3 jsr putchardirect pla diff --git a/libsrc/apple2/cpeekc.s b/libsrc/apple2/cpeekc.s index a547f7867..200206177 100644 --- a/libsrc/apple2/cpeekc.s +++ b/libsrc/apple2/cpeekc.s @@ -11,18 +11,23 @@ _cpeekc: ldy CH .ifdef __APPLE2ENH__ + sec ; Assume main memory bit RD80VID ; In 80 column mode? bpl peek ; No, just go ahead tya lsr ; Div by 2 tay bcs peek ; Odd cols are in main memory + php + sei ; No valid MSLOT et al. in aux memory bit HISCR ; Assume SET80COL .endif peek: lda (BASL),Y ; Get character .ifdef __APPLE2ENH__ - bit LOWSCR ; Doesn't hurt in 40 column mode - .endif + bcs :+ ; In main memory + bit LOWSCR + plp +: .endif eor #$80 ; Invert high bit - ldx #$00 + ldx #>$0000 rts diff --git a/libsrc/apple2/cputc.s b/libsrc/apple2/cputc.s index 0a27abacd..2dcfa1e00 100644 --- a/libsrc/apple2/cputc.s +++ b/libsrc/apple2/cputc.s @@ -15,6 +15,7 @@ .import uppercasemask .endif + .include "zeropage.inc" .include "apple2.inc" .macpack cpu @@ -87,23 +88,28 @@ putchar: mask: and INVFLG ; Apply normal, inverse, flash putchardirect: - pha + tax .ifdef __APPLE2ENH__ lda CH + sec ; Assume main memory bit RD80VID ; In 80 column mode? bpl put ; No, just go ahead lsr ; Div by 2 bcs put ; Odd cols go in main memory + php + sei ; No valid MSLOT et al. in aux memory bit HISCR ; Assume SET80COL put: tay .else ldy CH .endif lda (BASL),Y ; Get current character - tax ; Return old character for _cgetc - pla + sta tmp3 ; Save old character for _cgetc + txa sta (BASL),Y .ifdef __APPLE2ENH__ - bit LOWSCR ; Doesn't hurt in 40 column mode - .endif + bcs :+ ; In main memory + bit LOWSCR + plp +: .endif rts From 3edb9592981c6cbcdfffafdf4799d2ae82fe3690 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 13 Mar 2025 21:31:01 +0100 Subject: [PATCH 2655/2710] Finally made CONIO and STDIO fully interoperable in 80 column mode. In order to avoid undefined behaviour of programs not aware of 80 column mode, the 80 column firmware deliberately doesn't use CH but OURCH. So in order to be fully interoperable, CONIO needs to do the same. This changes introduces that behavior. So far so good. But the 80 column firmware can also be active in 40 column mode. This scenario is not detectable with reasonable effort. Therefore the behaviour of CONIO in this scenario is _not_ improved. However, this scenario is supposed to be very uncommon - and a recent update to videomode() makes sure to not activate it anymore ourselves. Notes: * If a program wants to be 100% sure to not run in 40 column mode with 80 column firmware active it can call videomode(VIDEOMODE_40COL) to explicitly deactivate a potentially active 80 column firmware. However, this always implicitly clears the screen. * In 40 column mode (contrast to 80 column mode) the 80 column firmware updates CH to reflect OURCH. So as long as CONIO only reads CH, but doesn't update it, everything works as expected. Interestingly this makes a rather useful scenario of STDIO/CONIO interoperation work: Using STDIO for screen output and CONIO for keyboard input. When cgetc() is called after cursor(1), it has to write to the screen as there's no hardware cursor on the Apple II. Those writes work as expected even in 40 column mode with active 80 column firmware as CH is only read but not written. --- asminc/apple2.inc | 6 ++++++ libsrc/apple2/beep.s | 12 ++++++------ libsrc/apple2/bell.s | 20 -------------------- libsrc/apple2/cpeekc.s | 2 +- libsrc/apple2/cputc.s | 27 ++++++++++++++++++--------- libsrc/apple2/gotoxy.s | 5 +++++ libsrc/apple2/wherex.s | 7 ++++++- 7 files changed, 42 insertions(+), 37 deletions(-) delete mode 100644 libsrc/apple2/bell.s diff --git a/asminc/apple2.inc b/asminc/apple2.inc index 528c463a1..fb4a1b2f0 100644 --- a/asminc/apple2.inc +++ b/asminc/apple2.inc @@ -25,6 +25,12 @@ BRKVec := $03F0 ; Break vector SOFTEV := $03F2 ; Vector for warm start PWREDUP := $03F4 ; This must be = EOR #$A5 of SOFTEV+1 +;----------------------------------------------------------------------------- +; 80 column firmware + +OURCH := $057B ; Cursor horizontal position +OURCV := $05FB ; Cursor vertical position + ;----------------------------------------------------------------------------- ; Hardware diff --git a/libsrc/apple2/beep.s b/libsrc/apple2/beep.s index ebebb6e3f..84d132a3a 100644 --- a/libsrc/apple2/beep.s +++ b/libsrc/apple2/beep.s @@ -5,16 +5,16 @@ ; .export _beep - .import BELL .include "apple2.inc" .segment "LOWCODE" _beep: - lda CH ; Bell scrambles CH in 80col mode on IIgs, storing - pha ; it in OURCH and resetting CH to 0. Save it. - jsr BELL - pla - sta CH ; Restore CH + ; Switch in ROM and call BELL + bit $C082 + jsr $FF3A ; BELL + + ; Switch in LC bank 2 for R/O and return + bit $C080 rts diff --git a/libsrc/apple2/bell.s b/libsrc/apple2/bell.s deleted file mode 100644 index 28e6d24f8..000000000 --- a/libsrc/apple2/bell.s +++ /dev/null @@ -1,20 +0,0 @@ -; -; Colin Leroy-Mira, 2024 -; -; BELL routine -; - - .export BELL - - .include "apple2.inc" - - .segment "LOWCODE" - -BELL: - ; Switch in ROM and call BELL - bit $C082 - jsr $FF3A ; BELL - - ; Switch in LC bank 2 for R/O and return - bit $C080 - rts diff --git a/libsrc/apple2/cpeekc.s b/libsrc/apple2/cpeekc.s index 200206177..a6a082eab 100644 --- a/libsrc/apple2/cpeekc.s +++ b/libsrc/apple2/cpeekc.s @@ -14,7 +14,7 @@ _cpeekc: sec ; Assume main memory bit RD80VID ; In 80 column mode? bpl peek ; No, just go ahead - tya + lda OURCH lsr ; Div by 2 tay bcs peek ; Odd cols are in main memory diff --git a/libsrc/apple2/cputc.s b/libsrc/apple2/cputc.s index 2dcfa1e00..f60965f44 100644 --- a/libsrc/apple2/cputc.s +++ b/libsrc/apple2/cputc.s @@ -52,19 +52,29 @@ _cputc: cputdirect: jsr putchar + .ifdef __APPLE2ENH__ + bit RD80VID ; In 80 column mode? + bpl :+ + inc OURCH ; Bump to next column + lda OURCH + bra check ; Must leave CH alone +: .endif inc CH ; Bump to next column lda CH - cmp WNDWDTH - bcc :+ +check: cmp WNDWDTH + bcc done jsr newline left: - .if (.cpu .bitand CPU_ISET_65SC02) + .ifdef __APPLE2ENH__ stz CH ; Goto left edge of screen + bit RD80VID ; In 80 column mode? + bpl done + stz OURCH ; Goto left edge of screen .else lda #$00 ; Goto left edge of screen sta CH .endif -: rts +done: rts newline: inc CV ; Bump to next line @@ -89,21 +99,20 @@ mask: and INVFLG ; Apply normal, inverse, flash putchardirect: tax + ldy CH .ifdef __APPLE2ENH__ - lda CH sec ; Assume main memory bit RD80VID ; In 80 column mode? bpl put ; No, just go ahead + lda OURCH lsr ; Div by 2 + tay bcs put ; Odd cols go in main memory php sei ; No valid MSLOT et al. in aux memory bit HISCR ; Assume SET80COL -put: tay - .else - ldy CH .endif - lda (BASL),Y ; Get current character +put: lda (BASL),Y ; Get current character sta tmp3 ; Save old character for _cgetc txa sta (BASL),Y diff --git a/libsrc/apple2/gotoxy.s b/libsrc/apple2/gotoxy.s index 6755af8d8..2a0261eba 100644 --- a/libsrc/apple2/gotoxy.s +++ b/libsrc/apple2/gotoxy.s @@ -22,4 +22,9 @@ _gotoxy: _gotox: sta CH ; Store X + .ifdef __APPLE2ENH__ + bit RD80VID ; In 80 column mode? + bpl :+ + sta OURCH ; Store X +: .endif rts diff --git a/libsrc/apple2/wherex.s b/libsrc/apple2/wherex.s index bd717a22b..4d4f856f0 100644 --- a/libsrc/apple2/wherex.s +++ b/libsrc/apple2/wherex.s @@ -10,5 +10,10 @@ _wherex: lda CH - ldx #$00 + .ifdef __APPLE2ENH__ + bit RD80VID ; In 80 column mode? + bpl :+ + lda OURCH +: .endif + ldx #>$0000 rts From ee540678e6cc99aecf05912fec7c7ec21e66d27e Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Thu, 13 Mar 2025 22:03:37 +0100 Subject: [PATCH 2656/2710] Improved consistency of notation for return value promotion. --- libsrc/apple2/curdevice.s | 2 +- libsrc/apple2/diocommon.s | 2 +- libsrc/apple2/get_iigs_speed.s | 2 +- libsrc/apple2/getdevice.s | 2 +- libsrc/apple2/joy/a2.stdjoy.s | 4 ++-- libsrc/apple2/mou/a2.stdmou.s | 2 +- libsrc/apple2/open.s | 2 +- libsrc/apple2/oserror.s | 2 +- libsrc/apple2/revers.s | 2 +- libsrc/apple2/ser/a2.gs.s | 14 +++++++------- libsrc/apple2/ser/a2.ssc.s | 8 ++++---- libsrc/apple2/set_iigs_speed.s | 2 +- libsrc/apple2/stat.s | 2 +- libsrc/apple2/tgi/a2.hi.s | 2 +- libsrc/apple2/tgi/a2.lo.s | 2 +- libsrc/apple2/wherey.s | 2 +- 16 files changed, 26 insertions(+), 26 deletions(-) diff --git a/libsrc/apple2/curdevice.s b/libsrc/apple2/curdevice.s index 9781b8ad0..a450c605f 100644 --- a/libsrc/apple2/curdevice.s +++ b/libsrc/apple2/curdevice.s @@ -23,5 +23,5 @@ _getcurrentdevice: bne :+ lda #$FF ; INVALID_DEVICE -: ldx #$00 +: ldx #>$0000 rts diff --git a/libsrc/apple2/diocommon.s b/libsrc/apple2/diocommon.s index b18f0e6ef..6870ebb51 100644 --- a/libsrc/apple2/diocommon.s +++ b/libsrc/apple2/diocommon.s @@ -31,5 +31,5 @@ diocommon: dioepilog: ; Return success or error sta ___oserror - ldx #$00 + ldx #>$0000 rts diff --git a/libsrc/apple2/get_iigs_speed.s b/libsrc/apple2/get_iigs_speed.s index 1915d7773..b960516fa 100644 --- a/libsrc/apple2/get_iigs_speed.s +++ b/libsrc/apple2/get_iigs_speed.s @@ -16,7 +16,7 @@ _get_iigs_speed: lda CYAREG ; Check current setting bpl :+ lda #SPEED_FAST - ldx #$00 + ldx #>$0000 rts .assert SPEED_SLOW = 0, error : jmp return0 ; SPEED_SLOW diff --git a/libsrc/apple2/getdevice.s b/libsrc/apple2/getdevice.s index 0c674cad0..f3b0d5a86 100644 --- a/libsrc/apple2/getdevice.s +++ b/libsrc/apple2/getdevice.s @@ -30,5 +30,5 @@ next: inx bne next done: txa - ldx #$00 + ldx #>$0000 rts diff --git a/libsrc/apple2/joy/a2.stdjoy.s b/libsrc/apple2/joy/a2.stdjoy.s index 11be52eb4..b5e7a311b 100644 --- a/libsrc/apple2/joy/a2.stdjoy.s +++ b/libsrc/apple2/joy/a2.stdjoy.s @@ -92,7 +92,7 @@ COUNT: bvc noiic ; Not $4x dex ; Only one joystick for the //c noiic: txa ; Number of joysticks we support - ldx #$00 + ldx #>$0000 rts ; READ routine. Read a particular joystick passed in A. @@ -170,5 +170,5 @@ nogs2: lda #$00 ; 0 0 0 0 0 0 0 0 ; Finalize eor #%00010100 ; BTN_2 BTN_1 DOWN UP RIGHT LEFT 0 0 - ldx #$00 + ldx #>$0000 rts diff --git a/libsrc/apple2/mou/a2.stdmou.s b/libsrc/apple2/mou/a2.stdmou.s index 9b84c2f53..e48abbb41 100644 --- a/libsrc/apple2/mou/a2.stdmou.s +++ b/libsrc/apple2/mou/a2.stdmou.s @@ -353,7 +353,7 @@ SHOW: ; BUTTONS: Return the button mask in A/X. BUTTONS: lda info + MOUSE_INFO::BUTTONS - ldx #$00 + ldx #>$0000 rts ; POS: Return the mouse position in the MOUSE_POS struct pointed to by ptr1. diff --git a/libsrc/apple2/open.s b/libsrc/apple2/open.s index 38793a13e..7ece7f18d 100644 --- a/libsrc/apple2/open.s +++ b/libsrc/apple2/open.s @@ -209,7 +209,7 @@ done: lda tmp1 ; Restore fd jsr popname ; Preserves A ; Return success - ldx #$00 + ldx #>$0000 stx ___oserror rts diff --git a/libsrc/apple2/oserror.s b/libsrc/apple2/oserror.s index 5f523340f..db4f146cd 100644 --- a/libsrc/apple2/oserror.s +++ b/libsrc/apple2/oserror.s @@ -23,7 +23,7 @@ ___osmaperrno: ; Found the code : lda ErrTab-1,x - ldx #$00 ; High byte always zero + ldx #>$0000 rts .rodata diff --git a/libsrc/apple2/revers.s b/libsrc/apple2/revers.s index 83fcb2ae7..86dfd0d19 100644 --- a/libsrc/apple2/revers.s +++ b/libsrc/apple2/revers.s @@ -18,5 +18,5 @@ normal: dex ; $00->$FF, $40->$3F stx INVFLG ; Save new flag value bmi :+ ; Jump if current value is $FF (normal) lda #$01 ; Return "inverse" -: ldx #$00 +: ldx #>$0000 rts diff --git a/libsrc/apple2/ser/a2.gs.s b/libsrc/apple2/ser/a2.gs.s index ea3e54cc1..3ad899fc2 100644 --- a/libsrc/apple2/ser/a2.gs.s +++ b/libsrc/apple2/ser/a2.gs.s @@ -295,7 +295,7 @@ SER_CLOSE: bcc IIgs lda #SER_ERR_NO_DEVICE ; Not a IIgs - ldx #$00 ; Promote char return value + ldx #>$0000 rts IIgs: @@ -500,7 +500,7 @@ BaudOK: SetupOut: plp ; Reenable interrupts if needed - ldx #$00 ; Promote char return value + ldx #>$0000 sty Opened rts @@ -539,7 +539,7 @@ SER_GET: rts NoData: lda #SER_ERR_NO_DATA - ldx #$00 ; Promote char return value + ldx #>$0000 rts ;---------------------------------------------------------------------------- @@ -560,7 +560,7 @@ SER_PUT: : ldy SendFreeCnt ; Do we have room to store byte? bne :+ lda #SER_ERR_OVERFLOW - ldx #$00 + ldx #>$0000 rts : ldy SendTail ; Put byte into send buffer & send @@ -571,7 +571,7 @@ SER_PUT: jsr TryToSend lda #SER_ERR_OK .assert SER_ERR_OK = 0, error - tax + tax ; Promote char return value rts ;---------------------------------------------------------------------------- @@ -608,11 +608,11 @@ SER_IOCTL: stx Channel .assert SER_ERR_OK = 0, error - tax + tax ; Promote char return value rts : lda #SER_ERR_INV_IOCTL - ldx #$00 ; Promote char return value + ldx #>$0000 rts ;---------------------------------------------------------------------------- diff --git a/libsrc/apple2/ser/a2.ssc.s b/libsrc/apple2/ser/a2.ssc.s index 88dc4572c..488a32540 100644 --- a/libsrc/apple2/ser/a2.ssc.s +++ b/libsrc/apple2/ser/a2.ssc.s @@ -345,7 +345,7 @@ BaudOK: sta tmp1 stx Index ; Mark port as open lda #SER_ERR_OK Out: - ldx #$00 ; Promote char return value + ldx #>$0000 rts ;---------------------------------------------------------------------------- @@ -360,7 +360,7 @@ SER_GET: cmp #$FF bne :+ lda #SER_ERR_NO_DATA - ldx #$00 ; Promote char return value + ldx #>$0000 rts : ldy Stopped ; Check for flow stopped @@ -408,7 +408,7 @@ SER_PUT: ldy SendFreeCnt ; Reload SendFreeCnt after TryToSend bne :+ lda #SER_ERR_OVERFLOW - ldx #$00 ; Promote char return value + ldx #>$0000 rts : ldy SendTail ; Put byte into send buffer @@ -456,7 +456,7 @@ SER_IOCTL: rts : lda #SER_ERR_INV_IOCTL - ldx #$00 ; Promote char return value + ldx #>$0000 rts ;---------------------------------------------------------------------------- diff --git a/libsrc/apple2/set_iigs_speed.s b/libsrc/apple2/set_iigs_speed.s index 5e2f2f722..f13e8ab6a 100644 --- a/libsrc/apple2/set_iigs_speed.s +++ b/libsrc/apple2/set_iigs_speed.s @@ -25,5 +25,5 @@ _set_iigs_speed: set_speed: sta CYAREG txa - ldx #$00 + ldx #>$0000 rts diff --git a/libsrc/apple2/stat.s b/libsrc/apple2/stat.s index f655b3e3f..e0564ae0c 100644 --- a/libsrc/apple2/stat.s +++ b/libsrc/apple2/stat.s @@ -121,7 +121,7 @@ eoferr: beq done lda #$FF done: - tax + tax ; Promote char return value rts .bss diff --git a/libsrc/apple2/tgi/a2.hi.s b/libsrc/apple2/tgi/a2.hi.s index aeb24f6be..1d5bdb68b 100644 --- a/libsrc/apple2/tgi/a2.hi.s +++ b/libsrc/apple2/tgi/a2.hi.s @@ -342,7 +342,7 @@ GETPIXEL: lda #$03 ; 3 (white) : bcc :+ adc #$03 ; += 4 (black -> black2, white -> white2) -: ldx #$00 +: ldx #>$0000 bit $C080 ; Switch in LC bank 2 for R/O rts diff --git a/libsrc/apple2/tgi/a2.lo.s b/libsrc/apple2/tgi/a2.lo.s index 6d1c6aa4a..8b00c5d20 100644 --- a/libsrc/apple2/tgi/a2.lo.s +++ b/libsrc/apple2/tgi/a2.lo.s @@ -321,7 +321,7 @@ GETPIXEL: jsr SCRN tax lda COL2TGI,x - ldx #$00 + ldx #>$0000 bit $C080 ; Switch in LC bank 2 for R/O rts diff --git a/libsrc/apple2/wherey.s b/libsrc/apple2/wherey.s index daacaaba7..a3843f606 100644 --- a/libsrc/apple2/wherey.s +++ b/libsrc/apple2/wherey.s @@ -12,5 +12,5 @@ _wherey: lda CV sec sbc WNDTOP - ldx #$00 + ldx #>$0000 rts From fb63a839bffd4845287cd5d4f8d4d3db5fb80824 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 12 Mar 2025 20:10:55 +0100 Subject: [PATCH 2657/2710] Optimize LZ4 decompressor Use a walking out pointer instead of &out[written]. This simplifies the code by 27 bytes and spares 15% cycles. Tested with both the unit test and code uncompressing 10kB of data. Renamed the labels for legibility. --- libsrc/common/lz4.s | 158 +++++++++++++++++++++----------------------- 1 file changed, 77 insertions(+), 81 deletions(-) diff --git a/libsrc/common/lz4.s b/libsrc/common/lz4.s index 4702137bc..57773c86a 100644 --- a/libsrc/common/lz4.s +++ b/libsrc/common/lz4.s @@ -14,12 +14,11 @@ .export _decompress_lz4 out = regsave -written = regsave + 2 +end = regsave + 2 tmp = tmp1 token = tmp2 offset = ptr3 in = sreg -outlen = ptr4 ; --------------------------------------------------------------- ; void decompress_lz4 (const u8 *in, u8 * const out, const u16 outlen) @@ -29,37 +28,43 @@ outlen = ptr4 .proc _decompress_lz4: near - sta outlen - stx outlen+1 + sta tmp + stx tmp+1 +; +; end = out + outlen; +; jsr popax sta out - stx out+1 + clc + adc tmp + sta end + txa + sta out+1 + adc tmp+1 + sta end+1 jsr popax sta in stx in+1 ; -; written = 0; +; while (out < end) { ; - lda #$00 - sta written -; -; while (written < outlen) { -; - jmp L0046 + jmp check_len ; ; token = *in++; ; -L0004: ldy #$00 +get_token: + ldy #$00 lda (in),y - sta token + tay ; Backup token to Y inc in - bne L000A + bne :+ inc in+1 -L000A: + +: ; ; offset = token >> 4; ; @@ -74,7 +79,7 @@ L000A: ; token &= 0xf; ; token += 4; // Minmatch ; - lda token + tya ; Get token back from Y and #$0F clc adc #$04 @@ -84,7 +89,8 @@ L000A: ; lda offset cmp #$0F -L0013: bne L001A +moreliterals: + bne check_offset_not_zero ; ; tmp = *in++; ; @@ -93,9 +99,10 @@ L0013: bne L001A sta tmp inc in - bne L0017 + bne :+ inc in+1 -L0017: + +: ; ; offset += tmp; ; @@ -113,24 +120,20 @@ L0017: ; ; goto moreliterals; ; - jmp L0013 + jmp moreliterals ; ; if (offset) { ; -L001A: lda offset +check_offset_not_zero: + lda offset ora offset+1 - beq L001C + beq check_end ; -; memcpy(&out[written], in, offset); +; memcpy(out, in, offset); ; lda out - clc - adc written sta ptr2 - lda out+1 - adc written+1 - tax - lda ptr2 + ldx out+1 stx ptr2+1 jsr pushax lda in @@ -140,15 +143,15 @@ L001A: lda offset ; ldy #$00 - not needed as pushax zeroes Y jsr memcpy_upwards ; -; written += offset; +; out += offset; +; memcpy returned a pointer to out ; - lda offset clc - adc written - sta written - lda offset+1 - adc written+1 - sta written+1 + adc offset + sta out + txa + adc offset+1 + sta out+1 ; ; in += offset; ; @@ -160,21 +163,23 @@ L001A: lda offset adc in+1 sta in+1 ; -; if (written >= outlen) +; if (out >= end) ; -L001C: lda written - cmp outlen - lda written+1 - sbc outlen+1 +check_end: + lda out + cmp end + lda out+1 + sbc end+1 ; ; return; ; - bcc L0047 + bcc end_not_reached rts ; ; memcpy(&offset, in, 2); ; -L0047: ldy #$00 +end_not_reached: + ldy #$00 lda (in),y sta offset iny @@ -187,23 +192,18 @@ L0047: ldy #$00 clc adc in sta in - bcc L002F + bcc :+ inc in+1 + +: ; -; copysrc = out + written - offset; +; copysrc = out - offset; ; -L002F: lda out - clc - adc written - tay - lda out+1 - adc written+1 - tax - tya + lda out sec sbc offset sta ptr1 - txa + lda out+1 sbc offset+1 sta ptr1+1 ; @@ -217,7 +217,8 @@ L002F: lda out ; if (token == 19) { ; cmp #$13 -L0045: bne L003C +morematches: + bne token_not_19 ; ; tmp = *in++; ; @@ -226,9 +227,9 @@ L0045: bne L003C sta tmp inc in - bne L0039 + bne :+ inc in+1 -L0039: +: ; ; offset += tmp; ; @@ -246,41 +247,36 @@ L0039: ; ; goto morematches; ; - jmp L0045 + jmp morematches ; -; memcpy(&out[written], copysrc, offset); +; memcpy(out, copysrc, offset); ; -L003C: lda out - clc - adc written +token_not_19: + lda out sta ptr2 - lda out+1 - adc written+1 - tax - lda ptr2 + ldx out+1 stx ptr2+1 jsr pushax jsr memcpy_upwards ; -; written += offset; +; out += offset; ; - lda offset clc - adc written - sta written - lda offset+1 - adc written+1 -L0046: sta written+1 + adc offset + sta out + txa + adc offset+1 + sta out+1 ; 0 on the first loop iteration +check_len: ; -; while (written < outlen) { +; while (out < end) { ; - lda written - cmp outlen - lda written+1 - sbc outlen+1 - jcc L0004 + lda out + cmp end + lda out+1 + sbc end+1 + jcc get_token rts .endproc - From 1efe1227d6b89f68ee9f15ef55cb1edb1fa17109 Mon Sep 17 00:00:00 2001 From: Oliver Schmidt <ol.sc@web.de> Date: Fri, 14 Mar 2025 16:24:25 +0100 Subject: [PATCH 2658/2710] Added apple2enh to the targets supporting waitvsync(). --- doc/funcref.sgml | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index bc2424272..7c3b92230 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -8380,6 +8380,7 @@ only in the presence of a prototype. <descrip> <tag/Function/Wait until the start of the next video frame. <tag/Header/<tt/ +<ref id="apple2enh.h" name="apple2enh.h">, <ref id="atmos.h" name="atmos.h">, <ref id="cbm.h" name="cbm.h">, <ref id="gamate.h" name="gamate.h">, From 9f5a195dc27d0462fa9cfc0a29e04fedcc9135d4 Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Sat, 22 Mar 2025 00:17:03 +0100 Subject: [PATCH 2659/2710] samples/geos/Makefile: use C1541 variable for c1541 program --- samples/geos/Makefile | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/samples/geos/Makefile b/samples/geos/Makefile index 03f6b8cdc..578927760 100644 --- a/samples/geos/Makefile +++ b/samples/geos/Makefile @@ -3,6 +3,9 @@ # var. to build for another target system. SYS ?= geos-cbm +# Comes with the VICE emulator, see http://vice-emu.sourceforge.net/ +C1541 ?= c1541 + # If SYS was given on the commandline, redirect "c64" to "geos-cbm" and # "apple2enh" to "geos-apple" ifeq ($(origin SYS),command line) @@ -82,11 +85,11 @@ samples: $(EXELIST_$(SYS)) $(foreach dir,$(DIRLIST),$(SUBDIR_recipe)) define samples-geos -c1541 -attach $(0).d64 -geoswrite $(1); +$(C1541) -attach $(0).d64 -geoswrite $(1); endef samples-geos: $(EXELIST_$(SYS)) - c1541 -format "$@,01" d64 $@.d64 + $(C1541) -format "$@,01" d64 $@.d64 $(foreach tool,$(EXELIST_$(SYS)),$(call samples-geos,$(tool))) else samples: @@ -103,7 +106,7 @@ bitmap.c: logo.pcx bitmap-demo.cvt: bitmap.c bitmap-demores.grc bitmap-demo.c $(CL) -t $(SYS) -O -o $@ -m bitmap-demo.map bitmap-demores.grc bitmap-demo.c - + filesel.cvt: fileselres.grc filesel.c $(CL) -t $(SYS) -O -o $@ -m filesel.map fileselres.grc filesel.c @@ -134,7 +137,7 @@ vector-demo.cvt: vector-demores.grc vector-demo.c yesno.cvt: yesnores.grc yesno.c $(CL) -t $(SYS) -O -o $@ -m yesno.map yesnores.grc yesno.c - + clean: @$(DEL) overlay-demores.h 2>$(NULLDEV) @$(DEL) bitmap.c 2>$(NULLDEV) From 774e2759653f2f7ee654ab2987344abaa748e4e6 Mon Sep 17 00:00:00 2001 From: "Stefan A. Haubenthal" <polluks@sdf.org> Date: Mon, 24 Mar 2025 20:52:55 +0100 Subject: [PATCH 2660/2710] Fixed many comments --- libsrc/apple2/cputc.s | 2 +- libsrc/atari/getdevice.s | 2 +- libsrc/atari/graphics.s | 2 +- libsrc/atari/mou/atrtt.s | 6 +++--- libsrc/atari/read.s | 2 +- libsrc/atari/siocall.s | 2 +- libsrc/atari/write.s | 2 +- libsrc/atari5200/joy/atr5200std.s | 10 +++++----- libsrc/c128/break.s | 5 ++--- libsrc/c128/ser/c128-swlink.s | 4 ++-- libsrc/c128/tgi/c128-vdc.s | 2 +- libsrc/c128/tgi/c128-vdc2.s | 2 +- libsrc/c64/emd/c64-rrr.s | 14 +++++++------- libsrc/c64/joy/c64-hitjoy.s | 4 ++-- libsrc/c64/ser/c64-swlink.s | 2 +- libsrc/cbm/cbm_read.s | 2 +- libsrc/cbm/exec.c | 2 +- libsrc/cbm/getdevice.s | 2 +- libsrc/cbm/loadaddr.s | 2 +- libsrc/cbm510/joy/cbm510-std.s | 2 +- libsrc/common/ctype.s | 2 +- libsrc/common/mktime.s | 4 ++-- libsrc/common/realloc.s | 2 +- libsrc/common/strlen.s | 2 +- libsrc/common/vsprintf.s | 2 +- libsrc/cx16/getdevice.s | 2 +- libsrc/cx16/tgi/cx320p1.s | 4 ++-- libsrc/cx16/tgi/cx640p1.s | 4 ++-- libsrc/cx16/waitvsync.s | 2 +- libsrc/dbg/dbgdump.s | 2 +- libsrc/geos-common/const.inc | 2 +- libsrc/geos-common/symbols.txt | 18 +++++++++--------- libsrc/kim1/tapeio.s | 4 ++-- libsrc/lynx/bootldr.s | 2 +- libsrc/lynx/eeprom66.s | 2 +- libsrc/lynx/eeprom86.s | 2 +- libsrc/lynx/tgi/lynx-160-102-16.s | 4 ++-- libsrc/nes/ppubuf.s | 2 +- libsrc/pce/vga.s | 6 +++--- libsrc/pet/cbm_load.c | 4 ++-- libsrc/runtime/callirq.s | 2 +- libsrc/runtime/lshelp.s | 2 +- libsrc/runtime/ludiv.s | 2 +- libsrc/runtime/lumod.s | 2 +- libsrc/sim6502/exehdr.s | 2 +- libsrc/sym1/tapeio.s | 4 ++-- libsrc/telestrat/write.s | 2 +- libsrc/tgi/tgi_clippedline.s | 6 +++--- libsrc/tgi/tgi_init.s | 2 +- libsrc/vic20/joy/vic20-stdjoy.s | 2 +- 50 files changed, 84 insertions(+), 85 deletions(-) diff --git a/libsrc/apple2/cputc.s b/libsrc/apple2/cputc.s index f60965f44..fdf799357 100644 --- a/libsrc/apple2/cputc.s +++ b/libsrc/apple2/cputc.s @@ -39,7 +39,7 @@ _cputcxy: pla ; Restore C and run into _cputc _cputc: - cmp #$0D ; Test for \r = carrage return + cmp #$0D ; Test for \r = carriage return beq left cmp #$0A ; Test for \n = line feed beq newline diff --git a/libsrc/atari/getdevice.s b/libsrc/atari/getdevice.s index e0e700436..b98d3ad5f 100644 --- a/libsrc/atari/getdevice.s +++ b/libsrc/atari/getdevice.s @@ -50,7 +50,7 @@ check_device: lda #SIO_STAT sta DCOMND ; set command into DCB lda #%01000000 ; direction value, "receive data" - sta DSTATS ; set data flow directon + sta DSTATS ; set data flow direction lda #15 sta DTIMLO ; value got from DOS source lda #4 diff --git a/libsrc/atari/graphics.s b/libsrc/atari/graphics.s index 1f7844c39..8b4e8034d 100644 --- a/libsrc/atari/graphics.s +++ b/libsrc/atari/graphics.s @@ -23,7 +23,7 @@ .code -; set new grapics mode +; set new graphics mode ; gets new mode in A ; returns handle or -1 on error ; uses tmp1, tmp2, tmp3, tmp4 (in subroutines) diff --git a/libsrc/atari/mou/atrtt.s b/libsrc/atari/mou/atrtt.s index b1e53935e..f7c56e9f2 100644 --- a/libsrc/atari/mou/atrtt.s +++ b/libsrc/atari/mou/atrtt.s @@ -374,7 +374,7 @@ IRQ: ; The touch pad is read thru the paddle potentiometers. The possible ; values are 1..228. Since the maximum value is less than the X ; dimension we have to "stretch" this value. In order to use only -; divisions by powers of two, we use the following appoximation: +; divisions by powers of two, we use the following approximation: ; 320/227 = 1.4096 ; 1+1/2-1/8+1/32 = 1.4062 ; For Y we subtract 1/8 of it to get in the YMax ballpark. @@ -385,7 +385,7 @@ IRQ: ; X - ldx PADDL0 ; get X postion + ldx PADDL0 ; get X position dex ; decrement, since it's 1-based stx XPos txa @@ -445,7 +445,7 @@ IRQ: ; Y - ldx PADDL1 ; get Y postion + ldx PADDL1 ; get Y position dex ; decrement, since it's 1-based stx YPos lda #228 diff --git a/libsrc/atari/read.s b/libsrc/atari/read.s index 5078b321d..228ca9ee2 100644 --- a/libsrc/atari/read.s +++ b/libsrc/atari/read.s @@ -33,7 +33,7 @@ done: lda ICBLL,x ; buf len lo lda ICBLH,x ; get buf len hi tax ; to X okdone: lda #0 - sta ___oserror ; clear system dependend error code + sta ___oserror ; clear system dependent error code pla ; get buf len lo rts diff --git a/libsrc/atari/siocall.s b/libsrc/atari/siocall.s index 38cbb35d5..b1c19a2d0 100644 --- a/libsrc/atari/siocall.s +++ b/libsrc/atari/siocall.s @@ -23,7 +23,7 @@ .proc __sio_call sta DCOMND ; set command into DCB - stx DSTATS ; set data flow directon + stx DSTATS ; set data flow direction jsr popax ; get buffer address sta DBUFLO ; set buffer address into DCB stx DBUFHI diff --git a/libsrc/atari/write.s b/libsrc/atari/write.s index 2ddb88ee3..b745e5211 100644 --- a/libsrc/atari/write.s +++ b/libsrc/atari/write.s @@ -21,7 +21,7 @@ write9: lda ICBLH,x ; buf len high tax lda #0 - sta ___oserror ; clear system dependend error code + sta ___oserror ; clear system dependent error code pla rts diff --git a/libsrc/atari5200/joy/atr5200std.s b/libsrc/atari5200/joy/atr5200std.s index 980428d13..a717455f2 100644 --- a/libsrc/atari5200/joy/atr5200std.s +++ b/libsrc/atari5200/joy/atr5200std.s @@ -79,7 +79,7 @@ COUNT: ; CENTER = 228 / 2 -SENSIVITY = 16 +SENSITIVITY = 16 READJOY: and #3 ; put joystick number in range, just in case @@ -96,27 +96,27 @@ READJOY: ; Read joystick @notrg: ldy PADDL0,x ; get horizontal position - cpy #CENTER-SENSIVITY + cpy #CENTER-SENSITIVITY bcs @chkleft ora #4 ; JOY_LEFT bne @updown @chkleft: - cpy #CENTER+SENSIVITY + cpy #CENTER+SENSITIVITY bcc @updown ora #8 ; JOY_RIGHT @updown:ldy PADDL0+1,x ; get vertical position - cpy #CENTER-SENSIVITY + cpy #CENTER-SENSITIVITY bcs @chkdown ora #1 ; JOY_UP bne @done @chkdown: - cpy #CENTER+SENSIVITY + cpy #CENTER+SENSITIVITY bcc @done ora #2 ; JOY_DOWN diff --git a/libsrc/c128/break.s b/libsrc/c128/break.s index 092ca3469..450183dc3 100644 --- a/libsrc/c128/break.s +++ b/libsrc/c128/break.s @@ -125,11 +125,10 @@ uservec: jmp $FFFF ; Patched at runtime .data -; Old break vector preceeded by a jump opcode +; Old break vector preceded by a jump opcode brk_old: jmp $0000 -; Indirect vectors preceeded by a jump opcode +; Indirect vectors preceded by a jump opcode brk_ind: jmp $0000 - diff --git a/libsrc/c128/ser/c128-swlink.s b/libsrc/c128/ser/c128-swlink.s index b8f08159b..796dc3b3b 100644 --- a/libsrc/c128/ser/c128-swlink.s +++ b/libsrc/c128/ser/c128-swlink.s @@ -134,7 +134,7 @@ ParityTable: ; Interrupt stub that is copied into low RAM. The startup code uses a special ; memory configuration with just kernal and I/O enabled (anything else is RAM). ; The NMI handler in ROM will switch back to a configuration where just the -; low 16K RAM are accessible. So we have to copy a smal piece of code into +; low 16K RAM are accessible. So we have to copy a small piece of code into ; low RAM that enables the cc65 configuration and then jumps to the real NMI ; handler. @@ -296,7 +296,7 @@ SER_CLOSE: lda #%00001010 sta ACIA_CMD -; Initalize buffers. Returns zero in a +; Initialize buffers. Returns zero in a jsr InitBuffers diff --git a/libsrc/c128/tgi/c128-vdc.s b/libsrc/c128/tgi/c128-vdc.s index f48b530f6..edbdd6cd8 100644 --- a/libsrc/c128/tgi/c128-vdc.s +++ b/libsrc/c128/tgi/c128-vdc.s @@ -268,7 +268,7 @@ INIT: @L1: ldx #$FF stx BITMASK -; Remeber current color value +; Remember current color value ldx #VDC_COLORS jsr VDCReadReg sta OLDCOLOR diff --git a/libsrc/c128/tgi/c128-vdc2.s b/libsrc/c128/tgi/c128-vdc2.s index 4b7b17c57..6b75ee712 100644 --- a/libsrc/c128/tgi/c128-vdc2.s +++ b/libsrc/c128/tgi/c128-vdc2.s @@ -277,7 +277,7 @@ INIT: @L1: ldx #$FF stx BITMASK -; Remeber current color value +; Remember current color value ldx #VDC_COLORS jsr VDCReadReg sta OLDCOLOR diff --git a/libsrc/c64/emd/c64-rrr.s b/libsrc/c64/emd/c64-rrr.s index 4d175cd32..8632e5e64 100644 --- a/libsrc/c64/emd/c64-rrr.s +++ b/libsrc/c64/emd/c64-rrr.s @@ -212,8 +212,8 @@ MAP: cmp pagecount bcs return_null sta curpage - lda #<dummy ; load .A/.X with adress of data for COPYFROM-call (which expects the - ldx #>dummy ; adress in .A/.X) + lda #<dummy ; load .A/.X with address of data for COPYFROM-call (which expects the + ldx #>dummy ; address in .A/.X) jsr COPYFROM bcs return_win ; function returns pointer to window (returns always with carry set!) @@ -224,8 +224,8 @@ COMMIT: lda curpage cmp pagecount bcs return - lda #<dummy ; load .A/.X with adress of data for COPYTO-call (which expects the - ldx #>dummy ; adress in .A/.X) + lda #<dummy ; load .A/.X with address of data for COPYTO-call (which expects the + ldx #>dummy ; address in .A/.X) ;---------------------------------------------------------------------------------------- ;void __fastcall__ em_copyto (struct em_copy *copy_data); @@ -324,7 +324,7 @@ get_struct_data: ;read and process the values from the em_copy struct passed to as parameters rameter to the ;functions em_copyto and em_copyfrom - sta aux ;store adress of struct (passed in .A/.X) into a zp pointer + sta aux ;store address of struct (passed in .A/.X) into a zp pointer stx aux+1 ldy #0 ;index 0 @@ -347,7 +347,7 @@ get_struct_data: lsr lsr ;shift into bits 3 and 4 ora #$23 ;set bit 5 (select ram) and 1+2 (game/exrom setting for ULTIMAX-mode) - tax ;.X has now the value to write into $de00 to acess rr-ram at desired 16k-bank + tax ;.X has now the value to write into $de00 to access rr-ram at desired 16k-bank iny iny ;skip unused byte lda (aux),y ;read length lo-byte @@ -357,7 +357,7 @@ get_struct_data: iny lda (aux),y ;length hi-byte adc c64_ram+1 - sta len+1 ;tmp2: length, tmp3 contains end adress of transfer in c64-ram. + sta len+1 ;tmp2: length, tmp3 contains end address of transfer in c64-ram. rts ;55 bytes diff --git a/libsrc/c64/joy/c64-hitjoy.s b/libsrc/c64/joy/c64-hitjoy.s index a9d454fd0..c57f45780 100644 --- a/libsrc/c64/joy/c64-hitjoy.s +++ b/libsrc/c64/joy/c64-hitjoy.s @@ -102,7 +102,7 @@ readadapter: lda #%00010001 sta $dd0e ; control register a ; timer: start - ; continous + ; continuous ; forced load ; serial port: input @@ -110,7 +110,7 @@ readadapter: lda #%01010001 sta $dc0e ; control register a ; timer: start - ; continous + ; continuous ; forced load ; serial port: output diff --git a/libsrc/c64/ser/c64-swlink.s b/libsrc/c64/ser/c64-swlink.s index 067a7ca92..2c06bb39b 100644 --- a/libsrc/c64/ser/c64-swlink.s +++ b/libsrc/c64/ser/c64-swlink.s @@ -270,7 +270,7 @@ SER_CLOSE: lda #%00001010 sta ACIA_CMD -; Initalize buffers. Returns zero in a +; Initialize buffers. Returns zero in a jsr InitBuffers diff --git a/libsrc/cbm/cbm_read.s b/libsrc/cbm/cbm_read.s index 98e3c25c9..c449567b1 100644 --- a/libsrc/cbm/cbm_read.s +++ b/libsrc/cbm/cbm_read.s @@ -24,7 +24,7 @@ ; /* the kernal routine BASIN sets ST to EOF if the end of file ; ** is reached the first time, then we have store tmp. ; ** every subsequent call returns EOF and READ ERROR in ST, then -; ** we have to exit the loop here immediatly. +; ** we have to exit the loop here immediately. ; */ ; if (cbm_k_readst() & 0xBF) break; ; diff --git a/libsrc/cbm/exec.c b/libsrc/cbm/exec.c index b9c1bdc96..49ab53553 100644 --- a/libsrc/cbm/exec.c +++ b/libsrc/cbm/exec.c @@ -89,7 +89,7 @@ int __fastcall__ exec (const char* progname, const char* cmdline) } utoa (dv, basic.unit, 10); - /* Tape files can be openned only once; skip this test for the Datasette. */ + /* Tape files can be opened only once; skip this test for the Datasette. */ if (dv != 1) { /* Don't try to run a program that can't be found. */ fd = open (progname, O_RDONLY); diff --git a/libsrc/cbm/getdevice.s b/libsrc/cbm/getdevice.s index 08ba6d5f8..b68e716b4 100644 --- a/libsrc/cbm/getdevice.s +++ b/libsrc/cbm/getdevice.s @@ -54,7 +54,7 @@ next: inx lda ST -; Either the Kernal calls above were successfull or there was +; Either the Kernal calls above were successful or there was ; already a cmdchannel to the device open - which is a pretty ; good indication of its existence ;-) diff --git a/libsrc/cbm/loadaddr.s b/libsrc/cbm/loadaddr.s index 0675dd67d..4329f201f 100644 --- a/libsrc/cbm/loadaddr.s +++ b/libsrc/cbm/loadaddr.s @@ -2,7 +2,7 @@ ; Ullrich von Bassewitz, 2010-11-13 ; ; This module supplies the load address that is expected by Commodore -; machines in the first two bytes of an excutable disk file. +; machines in the first two bytes of an executable disk file. ; diff --git a/libsrc/cbm510/joy/cbm510-std.s b/libsrc/cbm510/joy/cbm510-std.s index f7cbb2cdc..640b0d2a8 100644 --- a/libsrc/cbm510/joy/cbm510-std.s +++ b/libsrc/cbm510/joy/cbm510-std.s @@ -117,7 +117,7 @@ READ: ldx #$0F ; Switch to the system bank lsr tmp1 lsr tmp1 -; Mask the relavant bits, get the push button bit +; Mask the relevant bits, get the push button bit @L2: asl a ; push button bit into carry lda tmp1 diff --git a/libsrc/common/ctype.s b/libsrc/common/ctype.s index 220ad79c1..d51b1bf2b 100644 --- a/libsrc/common/ctype.s +++ b/libsrc/common/ctype.s @@ -7,7 +7,7 @@ ; ; See "LICENSE" file for legal information. ; -; Character specification table, matching serveral consoles. +; Character specification table, matching several consoles. ; .include "ctypetable.inc" diff --git a/libsrc/common/mktime.s b/libsrc/common/mktime.s index ac5755a45..e84cee040 100644 --- a/libsrc/common/mktime.s +++ b/libsrc/common/mktime.s @@ -423,10 +423,10 @@ finish_calc: jsr tosaddeax ; Simple addition there ; No need to store/load/push the counter here, simply to push it - ; for the last substraction + ; for the last subtraction jsr pusheax - ; Substract timezone + ; Subtract timezone lda __tz+1+3 sta sreg+1 lda __tz+1+2 diff --git a/libsrc/common/realloc.s b/libsrc/common/realloc.s index 925ac3d19..176871dd5 100644 --- a/libsrc/common/realloc.s +++ b/libsrc/common/realloc.s @@ -110,7 +110,7 @@ _realloc: tya ; Put ___heapptr back in A sec ; Check if we have enough memory at heap top - sbc oldsize ; Substract oldsize + sbc oldsize ; Subtract oldsize sta newblock lda ___heapptr+1 sbc oldsize+1 diff --git a/libsrc/common/strlen.s b/libsrc/common/strlen.s index c20ab78f9..b28bffe7a 100644 --- a/libsrc/common/strlen.s +++ b/libsrc/common/strlen.s @@ -2,7 +2,7 @@ ; Ullrich von Bassewitz, 31.05.1998 ; ; Note: strspn & strcspn call internally this function and rely on -; the usage of only ptr4 here! Keep in mind when appling changes +; the usage of only ptr4 here! Keep in mind when applying changes ; and check the other implementations too! ; ; size_t __fastcall__ strlen (const char* s); diff --git a/libsrc/common/vsprintf.s b/libsrc/common/vsprintf.s index b4cb9c419..65a961955 100644 --- a/libsrc/common/vsprintf.s +++ b/libsrc/common/vsprintf.s @@ -30,7 +30,7 @@ _vsprintf: ldy #2 jsr staxysp -; Contine by jumping to vsnprintf, which expects ap on the CPU stack and will +; Continue by jumping to vsnprintf, which expects ap on the CPU stack and will ; cleanup the C stack jmp vsnprintf diff --git a/libsrc/cx16/getdevice.s b/libsrc/cx16/getdevice.s index 5f2e74af4..70f883db0 100644 --- a/libsrc/cx16/getdevice.s +++ b/libsrc/cx16/getdevice.s @@ -56,7 +56,7 @@ next: inx lda STATUS -; Either the Kernal calls above were successfull, or there was +; Either the Kernal calls above were successful, or there was ; already a cmdchannel to the device open -- which is a pretty ; good indication of its existence. ;-) diff --git a/libsrc/cx16/tgi/cx320p1.s b/libsrc/cx16/tgi/cx320p1.s index 2fcd9adf3..f42d91c33 100644 --- a/libsrc/cx16/tgi/cx320p1.s +++ b/libsrc/cx16/tgi/cx320p1.s @@ -91,7 +91,7 @@ Y2 := ptr4 .bss -; The colors are indicies into a TGI palette. The TGI palette is indicies into +; The colors are indices into a TGI palette. The TGI palette is indices into ; VERA's palette. Vera's palette is a table of Red, Green, and Blue levels. ; The first 16 RGB elements mimic the Commodore 64's colors. @@ -267,7 +267,7 @@ GETPALETTE: ; GETDEFPALETTE: Return the default palette for the driver in .XA. All ; drivers should return something reasonable here, even drivers that don't ; support palettes, otherwise the caller has no way to determine the colors -; of the (not changable) palette. +; of the (not changeable) palette. ; ; Must set an error code: NO (all drivers must have a default palette) diff --git a/libsrc/cx16/tgi/cx640p1.s b/libsrc/cx16/tgi/cx640p1.s index 287160f6b..815c4ab67 100644 --- a/libsrc/cx16/tgi/cx640p1.s +++ b/libsrc/cx16/tgi/cx640p1.s @@ -89,7 +89,7 @@ TEMP3 = sreg ; HORLINE .bss -; The colors are indicies into a TGI palette. The TGI palette is indicies into +; The colors are indices into a TGI palette. The TGI palette is indices into ; VERA's palette. Vera's palette is a table of Red, Green, and Blue levels. ; The first 16 RGB elements mimic the Commodore 64's colors. @@ -404,7 +404,7 @@ GETPALETTE: ; GETDEFPALETTE: Return the default palette for the driver in .XA. All ; drivers should return something reasonable here, even drivers that don't ; support palettes, otherwise the caller has no way to determine the colors -; of the (not changable) palette. +; of the (not changeable) palette. ; ; Must set an error code: NO (all drivers must have a default palette) diff --git a/libsrc/cx16/waitvsync.s b/libsrc/cx16/waitvsync.s index d75a7a735..e0d9f9768 100644 --- a/libsrc/cx16/waitvsync.s +++ b/libsrc/cx16/waitvsync.s @@ -6,7 +6,7 @@ ; ; VERA's vertical sync causes IRQs which increment the jiffy timer. ; -; Updated by ZeroByteOrg to use Kernal API RDTIM to retreive the TIMER variable +; Updated by ZeroByteOrg to use Kernal API RDTIM to retrieve the TIMER variable ; .export _waitvsync diff --git a/libsrc/dbg/dbgdump.s b/libsrc/dbg/dbgdump.s index 8ab646d21..bc6a4bd40 100644 --- a/libsrc/dbg/dbgdump.s +++ b/libsrc/dbg/dbgdump.s @@ -1,7 +1,7 @@ ; ; Ullrich von Bassewitz, 11.08.1998 ; -; char* __cdecl__ DbgMemDump (unsigend Addr, char* Buf, unsigned char Length); +; char* __cdecl__ DbgMemDump (unsigned Addr, char* Buf, unsigned char Length); ; .export _DbgMemDump diff --git a/libsrc/geos-common/const.inc b/libsrc/geos-common/const.inc index c0294e01d..ab45a19a2 100644 --- a/libsrc/geos-common/const.inc +++ b/libsrc/geos-common/const.inc @@ -1,5 +1,5 @@ ; -;GeosConst - various system constans sorted by function +;GeosConst - various system constants sorted by function ;reassembled by Maciej 'YTM/Elysium' Witkowiak ;4-2-99, 18-3-99 diff --git a/libsrc/geos-common/symbols.txt b/libsrc/geos-common/symbols.txt index d1893e376..b82954ec6 100644 --- a/libsrc/geos-common/symbols.txt +++ b/libsrc/geos-common/symbols.txt @@ -26,7 +26,7 @@ cardDataPntr $2c $2c $60 Word This is a pointer to the actual card graphics dat CPU_DATA $01 n/a n/a Word Address of 6510 data register that controls the hardware memory ... CPU_DDR $00 n/a n/a Byte Address of 6510 data direction register. curDevice $ba $ba n/a Byte This holds the current serial device number. -curDirHead $8200 $8200 $fa80 256 | 39 Bytes For CBM, it is the buffer containing header infomation ... +curDirHead $8200 $8200 $fa80 256 | 39 Bytes For CBM, it is the buffer containing header information ... curDrive $8489 $8489 $f60d Byte Holds the device number of the currently active disk drive. curEnable n/a $1300 $0951 Byte This is an image of the C64 mobenble register. curHeight $29 $29 $021b Byte Used to hold the card height in pixels of the current font in ... @@ -48,7 +48,7 @@ dblClickCount $8515 $8515 $0258 Byte Used to determine when an icon is double c devTabHi n/a n/a $fae7 4 Bytes For the Apple, these are the high and low bytes of the four ... devTabLo n/a n/a $faeb 4 Bytes For the Apple, these are the high and low bytes of the four ... devUnitTab n/a n/a $faef 4 Bytes The ProDos unit numbers of the four possible devices are kept ... -dir2Head $8900 $8900 n/a 256 Bytes This is the 2nd directory header block used for larger cpacity ... +dir2Head $8900 $8900 n/a 256 Bytes This is the 2nd directory header block used for larger capacity ... dirBlkno n/a n/a $f620 Word Block number of the key block of the directory containing ... dirEntryBuf $8400 $8400 $fa59 256 | 39 Bytes Buffer used to build a file's directory entry. dirPtr n/a n/a $f622 Word Pointer into diskBlkBuf for this file's entry. @@ -74,7 +74,7 @@ fileWritten $8498 $8498 $f61a Byte Flag indicating if a if the currently open f firstBoot $88c5 $88c5 $0281 Byte This flag is changed from 0 to $FF when the deskTop comes up ... fontData $850c $850c n/a(?) 9 Bytes Buffer for saving the user active font table when going into ... fontTable $26 $26 n/a(?) 8 Bytes fontTable is a label for the beginning of variables for the ... -grcntr12 $d016 $d016 n/a Byte Graphics control reqister #2. +grcntr12 $d016 $d016 n/a Byte Graphics control register #2. grcntrl1 $d011 $d011 n/a Byte Graphics control register #1. grirq $d019 $d019 n/a Byte Graphics chip interrupt register. grirqen $d01a $d01a n/a Byte Graphics chip interrupt enable register. @@ -89,7 +89,7 @@ intBotVector $849f $849f $0204 Word Vector to routine to call after the operati interleave $848c $848c n/a Byte Variable used by BlkAlloc routine as the desired interleave when ... intSource n/a n/a $02c6 Byte Byte to indicate where interrupts are coming from on the Apple. intTopVector $849d $849d $0202 Word Vector to routine to call before the operating system interrupt ... -invertBuffer n/a $1ced n/a 80 Bytes Buffer area used to speed up the 80 colunn InvertLine routine. +invertBuffer n/a $1ced n/a 80 Bytes Buffer area used to speed up the 80 column InvertLine routine. irqvec $0314 $0314 n/a Word IRQ vector. isGEOS $848b $848b n/a Byte Flag to indicate whether the current disk is a GEOS disk. keyData $8504 $8504 $0245 Byte Holds the ASCII value of the current last key that was pressed. @@ -152,7 +152,7 @@ msbxpos $d010 $d010 n/a Byte Most significant bits for x positions of sprites. msePicPtr $31 $31 n/a Word Pointer to the mouse graphics data. nationality $c010 $c010 $e00d Byte Byte to hold nationality of Kernal. nmivec $0318 $0318 n/a Word NMI vector. -noEraseSprites n/a n/a $0240 Byte Flag to stop routine TempHideMouse fron erasing sprites #2 ... +noEraseSprites n/a n/a $0240 Byte Flag to stop routine TempHideMouse from erasing sprites #2 ... numDrives $848d $848d $f60e Byte Set to number of drives on the system. obj0Pointer $8ff8 $8ff8 n/a Byte Pointer to the picture data for sprite 0. obj1Pointer $8ff9 $8ff9 n/a Byte Pointer to the picture data for sprite 1. @@ -169,7 +169,7 @@ PrntDiskName $8476 $8476 n/a 18 Bytes Disk name that current printer driver is o PrntFileName $8465 $8465 $08ac 17 | 16 Bytes Name of the current printer driver. ramBase $88c7 $88c7 n/a 4 Bytes RAM bank for each disk drive to use if the drive type is either ... ramExpSize $88c3 $88c3 n/a Byte Byte for number or RAM banks available in RAM expansion unit. -random $850a $850a $024c Word Variable incremented each interrupt to generate a randon nunber. +random $850a $850a $024c Word Variable incremented each interrupt to generate a randon number. rasreg $d012 $d012 n/a Byte Raster register. RecoverVector $84b1 $84b1 $0216 Word Pointer to routine that is called to recover the background ... reqXpos0 n/a n/a $0800 Word This variable corresponds to the Commodore VIC chip register ... @@ -193,7 +193,7 @@ shiftBuf n/a $1b45 $70 7 Bytes Buffer for shifting/doubling sprites. Located in shiftOutBuf n/a $1b4c $78 7 Bytes Buffer for shifting/doubling/oring sprites. Located in back ... sizeFlags n/a $1b53 $db1c Byte Height of sprite. softOnes n/a $1c2d $d000 192 Bytes Buffer used for putting sprite bitmaps up on screen without ... -softZeros n/a $1b6d $d0e0 192 Bytes Buffer used for putting sprite bitnaps up on screen without ... +softZeros n/a $1b6d $d0e0 192 Bytes Buffer used for putting sprite bitmaps up on screen without ... spr0pic $8a00 $8a00 n/a 64 Bytes This is where the graphics data for sprite 0 is kept on ... spr1pic $8a40 $8a40 n/a 64 Bytes This is where the graphics data for sprite 1 is kept on ... spr2pic $8a80 $8a80 n/a 64 Bytes This is where the graphics data for sprite 2 is kept on ... @@ -353,8 +353,8 @@ i_Rectangle $c19f $c19f $fe3c Inline Rectangle. ImprintLine n/a n/a $ff8f Imprint horizontal line to background buffer. ImprintRectangle $c250 $c250 $fe4e Imprint rectangular area to background buffer. InfoCard n/a n/a $670f Get I/O card attributes. -InitCard n/a n/a $6700 Intialize I/O card. -InitForDialog n/a n/a $ff4a Internal pre-dialog box intialization. +InitCard n/a n/a $6700 Initialize I/O card. +InitForDialog n/a n/a $ff4a Internal pre-dialog box initialization. InitForIO $c25c $c25c n/a Prepare CBM system for I/O across serial bus. InitForPrint $7900 $7900 $6000 Initialize printer (once per document). InitMouse $fe80 $fe80 $f000 Initialize input device. diff --git a/libsrc/kim1/tapeio.s b/libsrc/kim1/tapeio.s index 4a16d6b9c..4af2b3aa2 100644 --- a/libsrc/kim1/tapeio.s +++ b/libsrc/kim1/tapeio.s @@ -16,7 +16,7 @@ sta ID ; Tape record ID to P1L jsr LOADT ; Read data from tape bcs error - jmp return0 ; Return 0 if sucessful + jmp return0 ; Return 0 if successful error: jmp return1 ; or 1 if not .endproc @@ -33,7 +33,7 @@ error: jmp return1 ; or 1 if not ldx #$00 jsr DUMPT ; Write data to tape bcs error - jmp return0 ; Return 0 if sucessful + jmp return0 ; Return 0 if successful error: jmp return1 ; or 1 if not .endproc diff --git a/libsrc/lynx/bootldr.s b/libsrc/lynx/bootldr.s index ddc24faed..a0320886f 100644 --- a/libsrc/lynx/bootldr.s +++ b/libsrc/lynx/bootldr.s @@ -15,7 +15,7 @@ .segment "BOOTLDR" ;********************************** ; Here is the bootloader in plaintext -; The idea is to make the smalles possible encrypted loader as decryption +; The idea is to make the smallest possible encrypted loader as decryption ; is very slow. The minimum size is 49 bytes plus a zero byte. ;********************************** ; EXE = $fb68 diff --git a/libsrc/lynx/eeprom66.s b/libsrc/lynx/eeprom66.s index 6511cf8af..44b365f03 100644 --- a/libsrc/lynx/eeprom66.s +++ b/libsrc/lynx/eeprom66.s @@ -40,7 +40,7 @@ EE_C_WRITE = $14 EE_C_READ = $18 EE_C_ERASE = $1C EE_C_EWEN = $13 -EE_C_EWEN2 = $FF ;; C0 schould be enough +EE_C_EWEN2 = $FF ;; C0 should be enough EE_C_EWDS = $10 EE_C_EWDS2 = $00 diff --git a/libsrc/lynx/eeprom86.s b/libsrc/lynx/eeprom86.s index 73b342fae..8b829c5e8 100644 --- a/libsrc/lynx/eeprom86.s +++ b/libsrc/lynx/eeprom86.s @@ -41,7 +41,7 @@ EE_C_WRITE = $14 EE_C_READ = $18 EE_C_ERASE = $1C EE_C_EWEN = $13 -EE_C_EWEN2 = $FF ;; C0 schould be enough +EE_C_EWEN2 = $FF ;; C0 should be enough EE_C_EWDS = $10 EE_C_EWDS2 = $00 diff --git a/libsrc/lynx/tgi/lynx-160-102-16.s b/libsrc/lynx/tgi/lynx-160-102-16.s index c35b6a5aa..00a2059aa 100644 --- a/libsrc/lynx/tgi/lynx-160-102-16.s +++ b/libsrc/lynx/tgi/lynx-160-102-16.s @@ -43,7 +43,7 @@ libref: .addr $0000 ; Library reference ; to an RTS for test versions (function not implemented). A future version may ; allow for emulation: In this case the vector will be zero. Emulation means ; that the graphics kernel will emulate the function by using lower level -; primitives - for example ploting a line by using calls to SETPIXEL. +; primitives - for example plotting a line by using calls to SETPIXEL. .addr INSTALL .addr UNINSTALL @@ -258,7 +258,7 @@ GETERROR: ; ; The TGI lacks a way to draw sprites. As that functionality is vital to ; Lynx games we borrow this CONTROL function to implement the still -; missing tgi_draw_sprite funtion. To use this in your C-program +; missing tgi_draw_sprite function. To use this in your C-program ; do a #define tgi_draw_sprite(spr) tgi_ioctl(0, spr) ; ; To do a flip-screen call tgi_ioctl(1, 0) diff --git a/libsrc/nes/ppubuf.s b/libsrc/nes/ppubuf.s index f08fc1a71..0de6d1980 100644 --- a/libsrc/nes/ppubuf.s +++ b/libsrc/nes/ppubuf.s @@ -68,7 +68,7 @@ ; ------------------------------------------------------------------------ ; Flush PPU-Memory write buffer -; called from vblank interupt +; called from vblank interrupt .proc ppubuf_flush diff --git a/libsrc/pce/vga.s b/libsrc/pce/vga.s index 630fbe8db..067647cb8 100644 --- a/libsrc/pce/vga.s +++ b/libsrc/pce/vga.s @@ -3,9 +3,9 @@ .export _pce_font -; The character tiles use only two colors from each pallette. Color zero -; comes from pallette zero; color one is different in each pallette. The -; color of a character is set by choosing one of the 16 pallettes. +; The character tiles use only two colors from each palette. Color zero +; comes from palette zero; color one is different in each palette. The +; color of a character is set by choosing one of the 16 palettes. .rodata diff --git a/libsrc/pet/cbm_load.c b/libsrc/pet/cbm_load.c index 1823f6537..2c98d9581 100644 --- a/libsrc/pet/cbm_load.c +++ b/libsrc/pet/cbm_load.c @@ -22,14 +22,14 @@ unsigned int __fastcall__ cbm_load (const char* name, unsigned char device, void unsigned int size = 0; if (cbm_open (1, device, CBM_READ, name) != 0) { - /* Can't load from a file that can't be openned. */ + /* Can't load from a file that can't be opened. */ return 0; } /* Get the file's load address. */ if (cbm_read (1, &load, sizeof load) != sizeof load) { /* Either the file wasn't found, or it was too short. (Note: - ** the computer openned a file even if the drive couldn't open one.) + ** the computer opened a file even if the drive couldn't open one.) */ cbm_close (1); return 0; diff --git a/libsrc/runtime/callirq.s b/libsrc/runtime/callirq.s index 74a12c4db..2096e5c3b 100644 --- a/libsrc/runtime/callirq.s +++ b/libsrc/runtime/callirq.s @@ -12,7 +12,7 @@ ; ; 2. Reentrancy. The condes routines must use self modyfiying code, which ; means it is not reentrant. An IRQ using condes, that interrupts -; another use of condes will cause unpredicatble behaviour. The current +; another use of condes will cause unpredictable behaviour. The current ; code avoids this by using locking mechanisms, but it's complex and ; has a size and performance penalty. ; diff --git a/libsrc/runtime/lshelp.s b/libsrc/runtime/lshelp.s index 8a2fca139..ce1648d28 100644 --- a/libsrc/runtime/lshelp.s +++ b/libsrc/runtime/lshelp.s @@ -39,7 +39,7 @@ poplsargs: adc #$00 sta sreg+1 -L1: lda ptr4+1 ; Is the right operand nagative? +L1: lda ptr4+1 ; Is the right operand negative? sta tmp2 ; Remember the sign for later bpl L2 ; Jump if not diff --git a/libsrc/runtime/ludiv.s b/libsrc/runtime/ludiv.s index e2e27371e..77335d8f5 100644 --- a/libsrc/runtime/ludiv.s +++ b/libsrc/runtime/ludiv.s @@ -22,7 +22,7 @@ tosudiv0ax: .endif tosudiveax: - jsr getlop ; Get the paramameters + jsr getlop ; Get the parameters jsr udiv32 ; Do the division lda ptr1 ; Result is in ptr1:sreg ldx ptr1+1 diff --git a/libsrc/runtime/lumod.s b/libsrc/runtime/lumod.s index 09909c0c9..eb6176b35 100644 --- a/libsrc/runtime/lumod.s +++ b/libsrc/runtime/lumod.s @@ -22,7 +22,7 @@ tosumod0ax: .endif tosumodeax: - jsr getlop ; Get the paramameters + jsr getlop ; Get the parameters jsr udiv32 ; Do the division lda tmp3 ; Remainder is in ptr2:tmp3:tmp4 sta sreg diff --git a/libsrc/sim6502/exehdr.s b/libsrc/sim6502/exehdr.s index 529ad9b94..6487e5b0c 100644 --- a/libsrc/sim6502/exehdr.s +++ b/libsrc/sim6502/exehdr.s @@ -22,7 +22,7 @@ .elseif (.cpu .bitand ::CPU_ISET_6502) .byte 0 .else - .error Unknow CPU type. + .error Unknown CPU type. .endif .byte sp ; sp address .addr __MAIN_START__ ; load address diff --git a/libsrc/sym1/tapeio.s b/libsrc/sym1/tapeio.s index 078ea7abd..f94e1336c 100644 --- a/libsrc/sym1/tapeio.s +++ b/libsrc/sym1/tapeio.s @@ -21,7 +21,7 @@ ldy #$80 jsr LOADT ; Read data from tape bcs error - jmp return0 ; Return 0 if sucessful + jmp return0 ; Return 0 if successful error: jmp return1 ; or 1 if not .endproc @@ -40,7 +40,7 @@ error: jmp return1 ; or 1 if not ldy #$80 jsr DUMPT ; Write data to tape bcs error - jmp return0 ; Return 0 if sucessful + jmp return0 ; Return 0 if successful error: jmp return1 ; or 1 if not .endproc diff --git a/libsrc/telestrat/write.s b/libsrc/telestrat/write.s index 37a896696..8509aa159 100644 --- a/libsrc/telestrat/write.s +++ b/libsrc/telestrat/write.s @@ -65,7 +65,7 @@ L2: ldy #0 cpx #$0A ; check for \n bne L3 BRK_TELEMON XWR0 ; macro send char to screen (channel 0 in telemon terms) - lda #$0D ; return to the beggining of the line + lda #$0D ; return to the beginning of the line BRK_TELEMON XWR0 ; macro diff --git a/libsrc/tgi/tgi_clippedline.s b/libsrc/tgi/tgi_clippedline.s index b0f1dd456..319bb7152 100644 --- a/libsrc/tgi/tgi_clippedline.s +++ b/libsrc/tgi/tgi_clippedline.s @@ -188,7 +188,7 @@ tgi_clip_sign: .res 1 ldx tgi_clip_dx+1 jsr udiv32by16r16 -; Check the sign of the final result and negate it if nessary +; Check the sign of the final result and negate it if necessary done: bit tmp1 jmi negax @@ -228,7 +228,7 @@ done: bit tmp1 ldx tgi_clip_dy+1 jsr udiv32by16r16 -; Check the sign of the final result and negate it if nessary +; Check the sign of the final result and negate it if necessary jmp muldiv_dydx::done @@ -279,7 +279,7 @@ L1: lda tgi_clip_o1 ; We must clip. If we haven't already done so, calculate dx/dy. -L2: lda tgi_clip_d ; Deltas alreay calculated? +L2: lda tgi_clip_d ; Deltas already calculated? bne HaveDeltas ; Jump if yes inc tgi_clip_d jsr calcdeltas diff --git a/libsrc/tgi/tgi_init.s b/libsrc/tgi/tgi_init.s index c8fd355d5..79651cbba 100644 --- a/libsrc/tgi/tgi_init.s +++ b/libsrc/tgi/tgi_init.s @@ -63,7 +63,7 @@ lda #<$100 ldx #>$100 jsr pushax ; Width scale = 1.0 - jsr pushax ; Heigh scale = 1.0 + jsr pushax ; Height scale = 1.0 jsr pusha ; Text direction = TGI_TEXT_HORIZONTAL jmp _tgi_settextstyle ; A = Font = TGI_FONT_BITMAP diff --git a/libsrc/vic20/joy/vic20-stdjoy.s b/libsrc/vic20/joy/vic20-stdjoy.s index b3de8766c..22ec0b638 100644 --- a/libsrc/vic20/joy/vic20-stdjoy.s +++ b/libsrc/vic20/joy/vic20-stdjoy.s @@ -82,7 +82,7 @@ COUNT: ; ------------------------------------------------------------------------ ; READ: Read a particular joystick passed in A. -; The current implemenation will ignore the joystick number because we do only +; The current implementation will ignore the joystick number because we do only ; have one joystick READ: lda #$7F ; mask for VIA2 JOYBIT: sw3 From 5ceb4f0d68c04a046b33e59f75ef80ee5767d22f Mon Sep 17 00:00:00 2001 From: Stefan <stefan.haubenthal@gmail.com> Date: Mon, 24 Mar 2025 21:27:55 +0100 Subject: [PATCH 2661/2710] Revert atr5200std.s --- libsrc/atari5200/joy/atr5200std.s | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libsrc/atari5200/joy/atr5200std.s b/libsrc/atari5200/joy/atr5200std.s index a717455f2..980428d13 100644 --- a/libsrc/atari5200/joy/atr5200std.s +++ b/libsrc/atari5200/joy/atr5200std.s @@ -79,7 +79,7 @@ COUNT: ; CENTER = 228 / 2 -SENSITIVITY = 16 +SENSIVITY = 16 READJOY: and #3 ; put joystick number in range, just in case @@ -96,27 +96,27 @@ READJOY: ; Read joystick @notrg: ldy PADDL0,x ; get horizontal position - cpy #CENTER-SENSITIVITY + cpy #CENTER-SENSIVITY bcs @chkleft ora #4 ; JOY_LEFT bne @updown @chkleft: - cpy #CENTER+SENSITIVITY + cpy #CENTER+SENSIVITY bcc @updown ora #8 ; JOY_RIGHT @updown:ldy PADDL0+1,x ; get vertical position - cpy #CENTER-SENSITIVITY + cpy #CENTER-SENSIVITY bcs @chkdown ora #1 ; JOY_UP bne @done @chkdown: - cpy #CENTER+SENSITIVITY + cpy #CENTER+SENSIVITY bcc @done ora #2 ; JOY_DOWN From 834388a9e1aad70bd7c0fe8afec5147459279f5f Mon Sep 17 00:00:00 2001 From: "Stefan A. Haubenthal" <polluks@sdf.org> Date: Sun, 6 Apr 2025 18:49:11 +0200 Subject: [PATCH 2662/2710] Added doc and some refs #2613 --- doc/apple2.sgml | 6 +++--- doc/apple2enh.sgml | 6 +++--- doc/atari.sgml | 5 +++-- doc/chrcvt65.sgml | 2 +- doc/funcref.sgml | 28 +++++++++++++++++++++++++++- 5 files changed, 37 insertions(+), 10 deletions(-) diff --git a/doc/apple2.sgml b/doc/apple2.sgml index 28120577a..2cc62d7ae 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -310,9 +310,9 @@ the memory from $800 to $1FFF can be added to the heap by calling ProDOS 8 requires for every open file a page-aligned 1 KB I/O buffer. By default these buffers are allocated by the cc65 runtime system on the heap using -<tt/posix_memalign()/. While this is generally the best solution it means quite -some overhead for (especially rather small) cc65 programs which do open files -but don't make use of the heap otherwise. +<url url="funcref.html#posix_memalign" name="posix_memalign()">. While this is +generally the best solution it means quite some overhead for (especially rather +small) cc65 programs which do open files but don't make use of the heap otherwise. The apple2 package comes with the alternative ProDOS 8 I/O buffer allocation module <tt/apple2-iobuf-0800.o/ which uses the memory between $800 and diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index fce6127bd..987b63fd0 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -290,9 +290,9 @@ the memory from $800 to $1FFF can be added to the heap by calling ProDOS 8 requires for every open file a page-aligned 1 KB I/O buffer. By default these buffers are allocated by the cc65 runtime system on the heap using -<tt/posix_memalign()/. While this is generally the best solution it means quite -some overhead for (especially rather small) cc65 programs which do open files -but don't make use of the heap otherwise. +<url url="funcref.html#posix_memalign" name="posix_memalign()">. While this is +generally the best solution it means quite some overhead for (especially rather +small) cc65 programs which do open files but don't make use of the heap otherwise. The apple2enh package comes with the alternative ProDOS 8 I/O buffer allocation module <tt/apple2enh-iobuf-0800.o/ which uses the memory between $800 and diff --git a/doc/atari.sgml b/doc/atari.sgml index 3057cd8a6..060bc8ad4 100644 --- a/doc/atari.sgml +++ b/doc/atari.sgml @@ -412,8 +412,9 @@ Please mind that ANTIC has memory alignment requirements for "player missile graphics"-data, font data, display lists and screen memory. Creation of a special linker configuration with appropriate aligned segments and switching to that segment in the c-code is usually necessary. A more memory -hungry solution consists in using the "<tt/posix_memalign()/" function in -conjunction with copying your data to the allocated memory. +hungry solution consists in using the <url url="funcref.html#posix_memalign" +name="posix_memalign()"> function in conjunction with copying your data to the +allocated memory. <sect1>Character mapping<p> diff --git a/doc/chrcvt65.sgml b/doc/chrcvt65.sgml index a631a0004..00909e12f 100644 --- a/doc/chrcvt65.sgml +++ b/doc/chrcvt65.sgml @@ -19,7 +19,7 @@ the native format. chrcvt65 is a vector font converter. It is able to convert a "BGI Stroked Font" to a compact TGI native vector font. See the function <url -url="funcref.html#tgi_load_vectorfont" name="tgi_load_vectorfont"> for usage. +url="tgi.html#tgi_load_vectorfont" name="tgi_load_vectorfont"> for usage. diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 7c3b92230..5c603b130 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -738,7 +738,7 @@ communication, see also <tt>testcode/lib/ser-test.c</tt>. <item><ref id="ltoa" name="ltoa"> <item><ref id="malloc" name="malloc"> <item><ref id="perror" name="perror"> -<!-- <item><ref id="posix_memalign" name="posix_memalign"> --> +<item><ref id="posix_memalign" name="posix_memalign"> <!-- <item><ref id="putenv" name="putenv"> --> <item><ref id="qsort" name="qsort"> <item><ref id="rand" name="rand"> @@ -6223,6 +6223,32 @@ be used in presence of a prototype. </quote> +<sect1>posix_memalign<label id="posix_memalign"><p> + +<quote> +<descrip> +<tag/Function/Allocate aligned dynamic memory. +<tag/Header/<tt/<ref id="stdlib.h" name="stdlib.h">/ +<tag/Declaration/<tt/int __fastcall__ posix_memalign (void** memptr, size_t alignment, size_t size);/ +<tag/Description/Allocate a block of memory with the given "size", which is aligned to a +memory address that is a multiple of "alignment". "alignment" <em/must not/ be +zero, and <em/must/ be a power of two; otherwise, this function will return +EINVAL. The function returns ENOMEM if not enough memory is available +to satisfy the request. "memptr" must point to a variable; that variable +will return the address of the allocated memory. Use free() to release that +allocated block. +<tag/Notes/<itemize> +<item>The function is only available as fastcall function, so it may only +be used in presence of a prototype. +</itemize> +<tag/Availability/POSIX 1003.1 +<tag/See also/ +<ref id="free" name="free"> +<tag/Example/None. +</descrip> +</quote> + + <sect1>psg_delay<label id="psg_delay"><p> <quote> From f1ed5b7057d101a2297d207cb8c868719c197b06 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Mon, 7 Apr 2025 09:20:51 +0200 Subject: [PATCH 2663/2710] Fixed a typo in g_typeadjust(). Will fix #2611. --- src/cc65/codegen.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/codegen.c b/src/cc65/codegen.c index 166176f5e..e55a318d6 100644 --- a/src/cc65/codegen.c +++ b/src/cc65/codegen.c @@ -1489,7 +1489,7 @@ unsigned g_typeadjust (unsigned lhs, unsigned rhs) ** both operands are converted to unsigned long int. */ if ((ltype == CF_LONG && rtype == CF_INT && (rhs & CF_UNSIGNED)) || - (rtype == CF_LONG && ltype == CF_INT && (rhs & CF_UNSIGNED))) { + (rtype == CF_LONG && ltype == CF_INT && (lhs & CF_UNSIGNED))) { /* long can represent all unsigneds, so we are in the first sub-case. */ return const_flag | CF_LONG; } From caa66aea951e8b0513b4fcc6d0aea4ad9ecbd655 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 7 Apr 2025 21:01:05 +0200 Subject: [PATCH 2664/2710] Add decompress_lz4 C implementation as comment For reference. --- libsrc/common/lz4.s | 54 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/libsrc/common/lz4.s b/libsrc/common/lz4.s index 57773c86a..c53841897 100644 --- a/libsrc/common/lz4.s +++ b/libsrc/common/lz4.s @@ -6,6 +6,60 @@ ; Almost 7 times faster, uses no RAM (vs 14 bytes BSS), and takes 1/4 the space ; vs the official C source. ; +; +; C implementation was: + +; void decompress_lz4 (unsigned char *in, unsigned char *out, const int outlen) { +; unsigned char token, tmp; +; unsigned int offset; +; unsigned char *end = out+outlen; +; unsigned char *copysrc; +; +; while (out < end) { +; token = *in++; +; offset = token >> 4; +; +; token &= 0x0f; +; token += 4; // Minmatch +; +; if (offset == 15) { +; moreliterals: +; tmp = *in++; +; offset += tmp; +; if (tmp == 255) +; goto moreliterals; +; } +; +; if (offset) { +; memcpy(out, in, offset); +; out += offset; +; in += offset; +; } +; +; if (out >= end) { +; return; +; } +; +; offset = (*in); +; in++; +; offset += (*in)<<8; +; in++; +; +; copysrc = out - offset; +; offset = token; +; +; if (token == 19) { +; morematches: +; tmp = *in++; +; offset += tmp; +; if (tmp == 255) +; goto morematches; +; } +; +; memcpy(out, copysrc, offset); +; out += offset; +; } +; } .importzp sp, sreg, regsave, regbank .importzp tmp1, tmp2, tmp3, tmp4, ptr1, ptr2, ptr3, ptr4 From 5cb1bc60fc6079f5fb8ea6c00299671c2d77daeb Mon Sep 17 00:00:00 2001 From: Christian Groessler <chris@groessler.org> Date: Wed, 9 Apr 2025 22:51:11 +0200 Subject: [PATCH 2665/2710] Add 'define=yes' for INIT segment to atari-asm.cfg and atari-asm-xex.cfg linker configs. libsrc/atari/exehdr.s: Add (empty) INIT segment to cover assembler programs which link with exehdr.s. --- cfg/atari-asm-xex.cfg | 1 + cfg/atari-asm.cfg | 1 + libsrc/atari/exehdr.s | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/cfg/atari-asm-xex.cfg b/cfg/atari-asm-xex.cfg index f0a6291db..fddf95dd4 100644 --- a/cfg/atari-asm-xex.cfg +++ b/cfg/atari-asm-xex.cfg @@ -20,5 +20,6 @@ SEGMENTS { CODE: load = MAIN, type = rw, define = yes; RODATA: load = MAIN, type = ro optional = yes; DATA: load = MAIN, type = rw optional = yes; + INIT: load = MAIN, type = bss, optional = yes, define = yes; BSS: load = MAIN, type = bss, optional = yes, define = yes; } diff --git a/cfg/atari-asm.cfg b/cfg/atari-asm.cfg index 6fc1c2caa..f824eb264 100644 --- a/cfg/atari-asm.cfg +++ b/cfg/atari-asm.cfg @@ -25,6 +25,7 @@ SEGMENTS { CODE: load = MAIN, type = rw, define = yes; RODATA: load = MAIN, type = ro optional = yes; DATA: load = MAIN, type = rw optional = yes; + INIT: load = MAIN, type = bss, optional = yes, define = yes; BSS: load = MAIN, type = bss, optional = yes, define = yes; AUTOSTRT: load = TRAILER, type = ro, optional = yes; } diff --git a/libsrc/atari/exehdr.s b/libsrc/atari/exehdr.s index fe17aeafd..1ac9a0fbe 100644 --- a/libsrc/atari/exehdr.s +++ b/libsrc/atari/exehdr.s @@ -9,3 +9,7 @@ .segment "MAINHDR" .word __MAIN_START__ .word __INIT_LOAD__ - 1 + +; Define the INIT segment so that __INIT_LOAD__ from above '.import' is always defined. +; The segment is normally present when linking a C program, but not necessarily when linking an assembler program. +.segment "INIT" From 8cf802cee36808edd11decfeb53b34ce03a6c1f0 Mon Sep 17 00:00:00 2001 From: Max <mczonk@gmail.com> Date: Tue, 15 Apr 2025 16:57:13 +0200 Subject: [PATCH 2666/2710] Fix documentation about unnamed labels using an `@`. --- doc/ca65.sgml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/doc/ca65.sgml b/doc/ca65.sgml index fd15d02a5..80224a84e 100644 --- a/doc/ca65.sgml +++ b/doc/ca65.sgml @@ -833,11 +833,9 @@ names like "Loop". Here is an example: <sect1>Unnamed labels<p> If you really want to write messy code, there are also unnamed labels. To define -an unnamed label, use either <tt>@:</tt> (<tt>.LOCALCHAR</tt> is respected if it -is set) or sole <tt>:</tt>. +an unnamed label, use sole <tt>:</tt>. -To reference an unnamed label, use <tt>@</tt> (<tt>.LOCALCHAR</tt> is respected -if it is set) or <tt>:</tt> with several <tt>-</tt> or <tt>+</tt> characters. +To reference an unnamed label, use <tt>:</tt> with several <tt>-</tt> or <tt>+</tt> characters. The <tt>-</tt> characters will create a back reference (n'th label backwards), the <tt>+</tt> will create a forward reference (n'th label in forward direction). As an alternative, angle brackets <tt><</tt> and <tt>></tt> may be used @@ -847,12 +845,12 @@ Example: <tscreen><verb> cpy #0 - beq @++ - @: + beq :++ + : sta $2007 dey - bne @- - @: + bne :- + : rts </verb></tscreen> From 2085646e57c19f112fd1e986ad24593e82a9f5de Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sat, 26 Apr 2025 12:56:57 +0200 Subject: [PATCH 2667/2710] Apple2: implement get_tv() get_tv() will return TV_NTSC or TV_PAL for any Apple II model with a way of checking vblank. For Apple ][ and ][+ it will return TV_OTHER and let the user figure it out in another way. --- doc/apple2.sgml | 1 + doc/apple2enh.sgml | 1 + doc/funcref.sgml | 39 +++++++-- include/apple2.h | 8 ++ libsrc/apple2/get_tv.s | 189 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 232 insertions(+), 6 deletions(-) create mode 100644 libsrc/apple2/get_tv.s diff --git a/doc/apple2.sgml b/doc/apple2.sgml index 2cc62d7ae..9cff996b7 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -354,6 +354,7 @@ usage. <item>allow_lowercase <item>beep <item>dir_entry_count +<item>get_tv <item>get_ostype <item>gmtime_dt <item>mktime_dt diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml index 987b63fd0..094ddd93e 100644 --- a/doc/apple2enh.sgml +++ b/doc/apple2enh.sgml @@ -333,6 +333,7 @@ usage. <item>_datetime <item>beep <item>dir_entry_count +<item>get_tv <item>get_ostype <item>gmtime_dt <item>mktime_dt diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 5c603b130..eec04b929 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -98,6 +98,7 @@ function. <item>allow_lowercase <item><ref id="beep" name="beep"> <item><ref id="dir_entry_count" name="dir_entry_count"> +<item><ref id="get_tv" name="get_tv"> <item><ref id="get_ostype" name="get_ostype"> <item><ref id="gmtime_dt" name="gmtime_dt"> <item><ref id="mktime_dt" name="mktime_dt"> @@ -111,6 +112,7 @@ function. <item>_dos_type <item><ref id="beep" name="beep"> <item><ref id="dir_entry_count" name="dir_entry_count"> +<item><ref id="get_tv" name="get_tv"> <item><ref id="get_ostype" name="get_ostype"> <item><ref id="gmtime_dt" name="gmtime_dt"> <item><ref id="mktime_dt" name="mktime_dt"> @@ -140,7 +142,7 @@ function. <!-- <item><ref id="_setcolor_low" name="_setcolor_low"> --> <item><ref id="_sound" name="_sound"> <item><ref id="get_ostype" name="get_ostype"> -<!-- <item><ref id="get_tv" name="get_tv"> --> +<item><ref id="get_tv" name="get_tv"> </itemize> (incomplete) @@ -227,7 +229,7 @@ function. <!-- <item><ref id="cbm_readdir" name="cbm_readdir"> --> <!-- <item><ref id="cbm_save" name="cbm_save"> --> <!-- <item><ref id="cbm_write" name="cbm_write"> --> -<!-- <item><ref id="get_tv" name="get_tv"> --> +<item><ref id="get_tv" name="get_tv"> <item><ref id="kbrepeat" name="kbrepeat"> <item><ref id="waitvsync" name="waitvsync"> </itemize> @@ -348,7 +350,7 @@ function. <itemize> <!-- <item><ref id="get_numbanks" name="get_numbanks"> --> <item><ref id="get_ostype" name="get_ostype"> -<!-- <item><ref id="get_tv" name="get_tv"> --> +<item><ref id="get_tv" name="get_tv"> <!-- <item><ref id="set_tv" name="set_tv"> --> <!-- <item><ref id="vera_layer_enable" name="vera_layer_enable"> --> <!-- <item><ref id="vera_sprites_enable" name="vera_sprites_enable"> --> @@ -443,7 +445,7 @@ see also <tt>testcode/lib/em-test.c</tt> and <tt>samples/multidemo.c</tt>. <sect1><tt/gamate.h/<label id="gamate.h"><p> <itemize> -<!-- <item><ref id="get_tv" name="get_tv"> --> +<item><ref id="get_tv" name="get_tv"> <item><ref id="waitvsync" name="waitvsync"> </itemize> @@ -550,7 +552,7 @@ see also <tt>testcode/lib/em-test.c</tt> and <tt>samples/multidemo.c</tt>. <sect1><tt/nes.h/<label id="nes.h"><p> <itemize> -<!-- <item><ref id="get_tv" name="get_tv"> --> +<item><ref id="get_tv" name="get_tv"> <item><ref id="waitvsync" name="waitvsync"> </itemize> @@ -568,7 +570,7 @@ It does not declare any functions. <sect1><tt/pce.h/<label id="pce.h"><p> <itemize> -<!-- <item><ref id="get_tv" name="get_tv"> --> +<item><ref id="get_tv" name="get_tv"> <item><ref id="waitvsync" name="waitvsync"> </itemize> @@ -4108,6 +4110,31 @@ be used in presence of a prototype. </quote> +<sect1>get_tv<label id="get_tv"><p> + +<quote> +<descrip> +<tag/Function/The function returns the system's vertical blank frequency. +<tag/Header/<tt/<ref id="apple2.h" name="apple2.h">, +<ref id="atari.h" name="atari.h">, <ref id="cbm.h" name="cbm.h">, +<ref id="cx16.h" name="cx16.h">, <ref id="gamate.h" name="gamate.h">, +<ref id="nes.h" name="nes.h">, <ref id="pce.h" name="pce.h">/ +<tag/Declaration/<tt/unsigned char get_tv (void);/ +<tag/Description/<tt/get_tv/ is machine dependent and does not exist for +all supported targets. If it exists, it returns a number that identifies the +frequency at which the screen vertical blank happens (either 50 or 60Hz), +if possible. +<tag/Notes/<itemize> +<item>The function does not exist on all platforms. +<item>Return TV_NTSC for 60Hz systems, TV_PAL for 50Hz systems, or +TV_OTHER if the scan frequency can not be determined. +</itemize> +<tag/Availability/cc65 (not all platforms) +<tag/Example/None. +</descrip> +</quote> + + <sect1>get_ostype<label id="get_ostype"><p> <quote> diff --git a/include/apple2.h b/include/apple2.h index 15055f412..9f7526f59 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -122,6 +122,11 @@ #define APPLE_IIGS1 0x81 /* Apple IIgs (ROM 1) */ #define APPLE_IIGS3 0x83 /* Apple IIgs (ROM 3) */ +/* Return codes for get_tv() */ +#define TV_NTSC 0 +#define TV_PAL 1 +#define TV_OTHER 2 + extern unsigned char _dos_type; /* Valid _dos_type values: ** @@ -200,6 +205,9 @@ extern void a2_lo_tgi[]; void beep (void); /* Beep beep. */ +unsigned char get_tv (void); +/* Get the machine vblank frequency. Returns one of the TV_xxx codes. */ + unsigned char get_ostype (void); /* Get the machine type. Returns one of the APPLE_xxx codes. */ diff --git a/libsrc/apple2/get_tv.s b/libsrc/apple2/get_tv.s new file mode 100644 index 000000000..830cc4ac1 --- /dev/null +++ b/libsrc/apple2/get_tv.s @@ -0,0 +1,189 @@ +; +; Colin Leroy-Mira <colin@colino.net>, 2025 +; +; unsigned char __fastcall__ get_tv(void) +; + .export _get_tv + + .import _set_iigs_speed, _get_iigs_speed + .import ostype + + .constructor calibrate_tv, 2 + + .include "accelerator.inc" + .include "apple2.inc" + .include "get_tv.inc" + + .segment "ONCE" + +; Cycle wasters +waste_72: + jsr waste_36 +waste_36: + jsr waste_12 +waste_24: + jsr waste_12 +waste_12: + rts + +.proc calibrate_tv + lda ostype + bmi iigs + cmp #$20 + bcc iip + cmp #$40 + bcc iie + +iic: jmp calibrate_iic +iigs: jmp calibrate_iigs +iie: jmp calibrate_iie +iip: rts ; Keep TV::OTHER. +.endproc + + +; Magic numbers +WASTE_LOOP_CYCLES = 92 ; The wait loop total cycles +NTSC_LOOP_COUNT = 17030/WASTE_LOOP_CYCLES ; How many loops expected on NTSC +PAL_LOOP_COUNT = 20280/WASTE_LOOP_CYCLES ; How many loops expected on PAL +STOP_PTRIG = 16500/WASTE_LOOP_CYCLES ; Stop PTRIG at 16.5ms + +; Carry set at enter: wait for VBL + +; Carry clear at enter: wait for VBL - +; Increments X every 92 cycles. +.proc count_until_vbl_bit + lda #$10 ; BPL + bcc :+ + lda #$30 ; BMI +: sta sign + + ; Wait for VBLsign change with 92 cycles loops. + ; Hit PTRIG repeatedly so that accelerators will slow down. + ; But stop hitting PTRIG after 16.5ms cycles, so that on the //c, + ; the VBLINT will not be reset right before we get it. 16.5ms + ; is a good value because it's far enough from 17ms for NTSC + ; models, and close enough to 20.2ms for PAL models that accelerators + ; will stay slow until there. (5ms usually). + +: cpx #STOP_PTRIG ; 2 - see if we spent 16.5ms already + bcs notrig ; 4 / 5 - if so, stop hitting PTRIG + sta PTRIG ; 8 - otherwise hit it + bcc count ; 11 +notrig: + nop ; 7 - keep cycle count constant when not + nop ; 9 - hitting PTRIG + nop ; 11 +count: + inx ; 13 + jsr waste_72 ; 85 + bit RDVBLBAR ; 89 - Wait for VBL change +sign: + bpl :- ; 92 - patched with bpl/bmi + rts +.endproc + +.proc calibrate_iic + php + sei + + sta IOUDISOFF + lda RDVBLMSK + pha ; Back up for cleanup + + bit ENVBL + bit PTRIG ; Reset VBL interrupt flag +: bit RDVBLBAR ; Wait for one VBL + bpl :- + + bit PTRIG ; Reset VBL interrupt flag again + ldx #$00 + clc + jsr count_until_vbl_bit + + pla ; Cleanup + asl + bcs :+ ; VBL interrupts were already enabled + bit DISVBL +: sta IOUDISON ; IIc Tech Ref Man: The firmware normally leaves IOUDIS on. + + plp + jmp calibrate_done +.endproc + +.proc calibrate_iie +: bit RDVBLBAR ; Wait for bit 7 to be off (VBL start) + bmi :- +: bit RDVBLBAR ; Wait for bit 7 to be on (VBL end) + bpl :- + + ; Wait and count during a full cycle + ldx #$00 + sec + jsr count_until_vbl_bit + clc + jsr count_until_vbl_bit + + jmp calibrate_done +.endproc + +.proc calibrate_iigs + ; Backup speed and slow down + jsr _get_iigs_speed + pha + lda #SPEED_SLOW + jsr _set_iigs_speed + + ; The same as IIe, but reverted, because... something? +: bit RDVBLBAR ; Wait for bit 7 to be on (VBL start) + bpl :- +: bit RDVBLBAR ; Wait for bit 7 to be off (VBL end) + bmi :- + + ; Wait and count during a full cycle + ldx #$00 + clc + jsr count_until_vbl_bit + sec + jsr count_until_vbl_bit + + jsr calibrate_done + + ; Restore user speed + pla + jmp _set_iigs_speed +.endproc + +.proc calibrate_done + ; Consider X +/- 3 to be valid, + ; anything else is unknown. + + lda #TV::NTSC + cpx #NTSC_LOOP_COUNT-3 + bcc unexpected + cpx #NTSC_LOOP_COUNT+3 + bcc matched + + lda #TV::PAL + cpx #PAL_LOOP_COUNT-3 + bcc unexpected + cpx #PAL_LOOP_COUNT+3 + bcs unexpected + +matched: + sta tv + +unexpected: + rts +.endproc + + .code + +; The only thing remaining from that code after init +.proc _get_tv + lda tv + ldx #>$0000 + rts +.endproc + + .segment "INIT" + +tv: .byte TV::OTHER From 6a17aedd812059e3a71e2d3e2e655cc2c643270c Mon Sep 17 00:00:00 2001 From: Gorilla Sapiens <embracetheape@gmail.com> Date: Tue, 25 Feb 2025 02:09:30 -0800 Subject: [PATCH 2668/2710] conform to 6.4.4.4 for hex and octal escapes fixes problem noted in #2610 --- src/cc65/litpool.c | 26 ++++++---------- src/cc65/litpool.h | 5 --- src/cc65/scanner.c | 39 +++++++++++++++++++---- src/cc65/scanner.h | 1 + src/common/strbuf.c | 55 ++++++++++++++++++++++++++++++--- src/common/strbuf.h | 39 ++++++++++++++++++++--- src/common/tgttrans.c | 16 ++++++++-- test/val/bug2609.c | 72 +++++++++++++++++++++++++++++++++++++++++++ test/val/bug2610.c | 15 +++++++++ 9 files changed, 228 insertions(+), 40 deletions(-) create mode 100644 test/val/bug2609.c create mode 100644 test/val/bug2610.c diff --git a/src/cc65/litpool.c b/src/cc65/litpool.c index 5433f6d95..6d8827c60 100644 --- a/src/cc65/litpool.c +++ b/src/cc65/litpool.c @@ -92,7 +92,7 @@ static Collection LPStack = STATIC_COLLECTION_INITIALIZER; -static Literal* NewLiteral (const void* Buf, unsigned Len) +static Literal* NewLiteral (const StrBuf* S) /* Create a new literal and return it */ { /* Allocate memory */ @@ -103,7 +103,7 @@ static Literal* NewLiteral (const void* Buf, unsigned Len) L->RefCount = 0; L->Output = 0; SB_Init (&L->Data); - SB_AppendBuf (&L->Data, Buf, Len); + SB_Append (&L->Data, S); /* Return the new literal */ return L; @@ -162,7 +162,7 @@ void ReleaseLiteral (Literal* L) void TranslateLiteral (Literal* L) /* Translate a literal into the target charset */ { - TgtTranslateBuf (SB_GetBuf (&L->Data), SB_GetLen (&L->Data)); + TgtTranslateStrBuf (&L->Data); } @@ -468,18 +468,18 @@ void OutputGlobalLiteralPool (void) Literal* AddLiteral (const char* S) /* Add a literal string to the literal pool. Return the literal. */ { - return AddLiteralBuf (S, strlen (S) + 1); + StrBuf SB; + SB_InitFromString(&SB, S); + return AddLiteralStr(&SB); } -Literal* AddLiteralBuf (const void* Buf, unsigned Len) -/* Add a buffer containing a literal string to the literal pool. Return the -** literal. -*/ +Literal* AddLiteralStr (const StrBuf* S) +/* Add a literal string to the literal pool. Return the literal. */ { /* Create a new literal */ - Literal* L = NewLiteral (Buf, Len); + Literal* L = NewLiteral (S); /* Add the literal to the correct pool */ if (IS_Get (&WritableStrings)) { @@ -491,11 +491,3 @@ Literal* AddLiteralBuf (const void* Buf, unsigned Len) /* Return the new literal */ return L; } - - - -Literal* AddLiteralStr (const StrBuf* S) -/* Add a literal string to the literal pool. Return the literal. */ -{ - return AddLiteralBuf (SB_GetConstBuf (S), SB_GetLen (S)); -} diff --git a/src/cc65/litpool.h b/src/cc65/litpool.h index 5f444bfb8..959924e94 100644 --- a/src/cc65/litpool.h +++ b/src/cc65/litpool.h @@ -125,11 +125,6 @@ void OutputGlobalLiteralPool (void); Literal* AddLiteral (const char* S); /* Add a literal string to the literal pool. Return the literal. */ -Literal* AddLiteralBuf (const void* Buf, unsigned Len); -/* Add a buffer containing a literal string to the literal pool. Return the -** literal. -*/ - Literal* AddLiteralStr (const StrBuf* S); /* Add a literal string to the literal pool. Return the literal. */ diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 879925c7c..5186ff402 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -163,6 +163,12 @@ static const struct Keyword { typedef uint32_t scan_t; +/* ParseChar return values */ +typedef struct { + int Val; + int Cooked; +} parsedchar_t; + /*****************************************************************************/ /* code */ /*****************************************************************************/ @@ -326,13 +332,16 @@ static void SetTok (int tok) -static int ParseChar (void) +static parsedchar_t ParseChar (void) /* Parse a character token. Converts escape chars into character codes. */ { + parsedchar_t Result; int C; int HadError; int Count; + Result.Cooked = 1; + /* Check for escape chars */ if (CurC == '\\') { NextChar (); @@ -373,6 +382,7 @@ static int ParseChar (void) case 'x': case 'X': /* Hex character constant */ + Result.Cooked = 0; if (!IsXDigit (NextC)) { Error ("\\x used with no following hex digits"); C = ' '; @@ -401,6 +411,7 @@ static int ParseChar (void) case '6': case '7': /* Octal constant */ + Result.Cooked = 0; Count = 1; C = HexVal (CurC); while (IsODigit (NextC) && Count++ < 3) { @@ -423,7 +434,12 @@ static int ParseChar (void) NextChar (); /* Do correct sign extension */ - return SignExtendChar (C); + Result.Val = SignExtendChar(C); + if (Result.Cooked) { + Result.Cooked = Result.Val; + } + + return Result; } @@ -431,7 +447,7 @@ static int ParseChar (void) static void CharConst (void) /* Parse a character constant token */ { - int C; + parsedchar_t C; if (CurC == 'L') { /* Wide character constant */ @@ -457,7 +473,8 @@ static void CharConst (void) } /* Translate into target charset */ - NextTok.IVal = SignExtendChar (C); + NextTok.IVal = SignExtendChar (C.Val); + NextTok.Cooked = C.Cooked; /* Character constants have type int */ NextTok.Type = type_int; @@ -468,6 +485,9 @@ static void CharConst (void) static void StringConst (void) /* Parse a quoted string token */ { + /* result from ParseChar */ + parsedchar_t ParsedChar; + /* String buffer */ StrBuf S = AUTO_STRBUF_INITIALIZER; @@ -494,7 +514,8 @@ static void StringConst (void) Error ("Unexpected newline"); break; } - SB_AppendChar (&S, ParseChar ()); + ParsedChar = ParseChar (); + SB_AppendCharCooked(&S, ParsedChar.Val, ParsedChar.Cooked); } /* Skip closing quote char if there was one */ @@ -689,6 +710,7 @@ static void NumericConst (void) /* Set the value and the token */ NextTok.IVal = IVal; + NextTok.Cooked = 0; NextTok.Tok = TOK_ICONST; } else { @@ -805,7 +827,12 @@ static void GetNextInputToken (void) if (NextTok.Tok == TOK_SCONST || NextTok.Tok == TOK_WCSCONST) { TranslateLiteral (NextTok.SVal); } else if (NextTok.Tok == TOK_CCONST || NextTok.Tok == TOK_WCCONST) { - NextTok.IVal = SignExtendChar (TgtTranslateChar (NextTok.IVal)); + if (NextTok.Cooked) { + NextTok.IVal = SignExtendChar (TgtTranslateChar (NextTok.IVal)); + } + else { + NextTok.IVal = SignExtendChar (NextTok.IVal); + } } } diff --git a/src/cc65/scanner.h b/src/cc65/scanner.h index 6fc3e5370..a8b8a8ab2 100644 --- a/src/cc65/scanner.h +++ b/src/cc65/scanner.h @@ -213,6 +213,7 @@ typedef struct Token Token; struct Token { token_t Tok; /* The token itself */ long IVal; /* The integer attribute */ + int Cooked; /* The "cooked" flag for char constants */ Double FVal; /* The float attribute */ struct Literal* SVal; /* String literal is any */ ident Ident; /* Identifier if IDENT */ diff --git a/src/common/strbuf.c b/src/common/strbuf.c index 79419f1c4..c5b27ee63 100644 --- a/src/common/strbuf.c +++ b/src/common/strbuf.c @@ -82,6 +82,7 @@ StrBuf* SB_InitFromString (StrBuf* B, const char* S) B->Len = strlen (S); B->Index = 0; B->Buf = (char*) S; + B->Cooked = (char*) S; return B; } @@ -92,6 +93,7 @@ void SB_Done (StrBuf* B) { if (B->Allocated) { xfree (B->Buf); + xfree (B->Cooked); } } @@ -146,10 +148,12 @@ void SB_Realloc (StrBuf* B, unsigned NewSize) */ if (B->Allocated) { /* Just reallocate the block */ - B->Buf = xrealloc (B->Buf, NewAllocated); + B->Buf = xrealloc (B->Buf, NewAllocated); + B->Cooked = xrealloc (B->Cooked, NewAllocated); } else { /* Allocate a new block and copy */ - B->Buf = memcpy (xmalloc (NewAllocated), B->Buf, B->Len); + B->Buf = memcpy (xmalloc (NewAllocated), B->Buf, B->Len); + B->Cooked = memcpy (xmalloc (NewAllocated), B->Cooked, B->Len); } /* Remember the new block size */ @@ -178,10 +182,12 @@ static void SB_CheapRealloc (StrBuf* B, unsigned NewSize) /* Free the old buffer if there is one */ if (B->Allocated) { xfree (B->Buf); + xfree (B->Cooked); } /* Allocate a fresh block */ - B->Buf = xmalloc (NewAllocated); + B->Buf = xmalloc (NewAllocated); + B->Cooked = xmalloc (NewAllocated); /* Remember the new block size */ B->Allocated = NewAllocated; @@ -222,6 +228,7 @@ void SB_Terminate (StrBuf* B) SB_Realloc (B, NewLen); } B->Buf[B->Len] = '\0'; + B->Cooked[B->Len] = '\0'; } @@ -234,6 +241,22 @@ void SB_CopyBuf (StrBuf* Target, const char* Buf, unsigned Size) SB_CheapRealloc (Target, Size); } memcpy (Target->Buf, Buf, Size); + memcpy (Target->Cooked, Buf, Size); /* nothing raw */ + } + Target->Len = Size; +} + + + +void SB_CopyBufCooked (StrBuf* Target, const char* Buf, const char* Cooked, unsigned Size) +/* Copy Buf and Cooked to Target, discarding the old contents of Target */ +{ + if (Size) { + if (Target->Allocated < Size) { + SB_CheapRealloc (Target, Size); + } + memcpy (Target->Buf, Buf, Size); + memcpy (Target->Cooked, Cooked, Size); } Target->Len = Size; } @@ -254,7 +277,7 @@ void SB_CopyStr (StrBuf* Target, const char* S) void SB_Copy (StrBuf* Target, const StrBuf* Source) /* Copy Source to Target, discarding the old contents of Target */ { - SB_CopyBuf (Target, Source->Buf, Source->Len); + SB_CopyBufCooked (Target, Source->Buf, Source->Cooked, Source->Len); Target->Index = Source->Index; } #endif @@ -269,6 +292,21 @@ void SB_AppendChar (StrBuf* B, int C) SB_Realloc (B, NewLen); } B->Buf[B->Len] = (char) C; + B->Cooked[B->Len] = (char) C; + B->Len = NewLen; +} + + + +void SB_AppendCharCooked (StrBuf* B, int C, int Cooked) +/* Append a character to a string buffer */ +{ + unsigned NewLen = B->Len + 1; + if (NewLen > B->Allocated) { + SB_Realloc (B, NewLen); + } + B->Buf[B->Len] = (char) C; + B->Cooked[B->Len] = (char) (Cooked ? C : 0); B->Len = NewLen; } @@ -282,6 +320,7 @@ void SB_AppendBuf (StrBuf* B, const char* S, unsigned Size) SB_Realloc (B, NewLen); } memcpy (B->Buf + B->Len, S, Size); + memcpy (B->Cooked + B->Len, S, Size); B->Len = NewLen; } @@ -301,7 +340,13 @@ void SB_AppendStr (StrBuf* B, const char* S) void SB_Append (StrBuf* Target, const StrBuf* Source) /* Append the contents of Source to Target */ { - SB_AppendBuf (Target, Source->Buf, Source->Len); + unsigned NewLen = Target->Len + Source->Len; + if (NewLen > Target->Allocated) { + SB_Realloc (Target, NewLen); + } + memcpy (Target->Buf + Target->Len, Source->Buf, Source->Len); + memcpy (Target->Cooked + Target->Len, Source->Cooked, Source->Len); + Target->Len = NewLen; } #endif diff --git a/src/common/strbuf.h b/src/common/strbuf.h index e0602a6c8..372b1be0b 100644 --- a/src/common/strbuf.h +++ b/src/common/strbuf.h @@ -53,10 +53,17 @@ /*****************************************************************************/ +/* We want to track whether a character is "raw" or not. */ +/* "raw" characters should NOT be translated when translating a string. */ +/* We do this by keeping a second array parallel to "Buf" called "Cooked". */ +/* Think of "cooked" as the inverse of "raw". */ +/* If Cooked[n] is 0, then the character is raw and should not be translated. */ +/* This was done to keep LIT_STR_BUFFER sane. */ typedef struct StrBuf StrBuf; struct StrBuf { char* Buf; /* Pointer to buffer */ + char* Cooked; /* Pointer to cooked buffer */ unsigned Len; /* Length of the string */ unsigned Index; /* Used for reading (Get and friends) */ unsigned Allocated; /* Size of allocated memory */ @@ -66,13 +73,13 @@ struct StrBuf { extern const StrBuf EmptyStrBuf; /* Initializer for static string bufs */ -#define STATIC_STRBUF_INITIALIZER { 0, 0, 0, 0 } +#define STATIC_STRBUF_INITIALIZER { 0, 0, 0, 0, 0 } /* Initializer for auto string bufs */ -#define AUTO_STRBUF_INITIALIZER { 0, 0, 0, 0 } +#define AUTO_STRBUF_INITIALIZER { 0, 0, 0, 0, 0 } /* Initialize with a string literal (beware: evaluates str twice!) */ -#define LIT_STRBUF_INITIALIZER(str) { (char*)str, sizeof(str)-1, 0, 0 } +#define LIT_STRBUF_INITIALIZER(str) { (char*)str, (char *)str, sizeof(str)-1, 0, 0 } @@ -164,6 +171,16 @@ INLINE char* SB_GetBuf (StrBuf* B) # define SB_GetBuf(B) (B)->Buf #endif +#if defined(HAVE_INLINE) +INLINE char* SB_GetCooked (StrBuf* B) +/* Return a cooked pointer */ +{ + return B->Cooked; +} +#else +# define SB_GetCooked(B) (B)->Cooked +#endif + #if defined(HAVE_INLINE) INLINE char SB_At (const StrBuf* B, unsigned Index) /* Get a character from the buffer */ @@ -310,6 +327,9 @@ void SB_Terminate (StrBuf* B); void SB_CopyBuf (StrBuf* Target, const char* Buf, unsigned Size); /* Copy Buf to Target, discarding the old contents of Target */ +void SB_CopyBufCooked (StrBuf* Target, const char* Buf, const char *Cooked, unsigned Size); +/* Copy Buf and Cooked to Target, discarding the old contents of Target */ + #if defined(HAVE_INLINE) INLINE void SB_CopyStr (StrBuf* Target, const char* S) /* Copy S to Target, discarding the old contents of Target */ @@ -325,7 +345,7 @@ void SB_CopyStr (StrBuf* Target, const char* S); INLINE void SB_Copy (StrBuf* Target, const StrBuf* Source) /* Copy Source to Target, discarding the old contents of Target */ { - SB_CopyBuf (Target, Source->Buf, Source->Len); + SB_CopyBufCooked (Target, Source->Buf, Source->Cooked, Source->Len); Target->Index = Source->Index; } #else @@ -336,6 +356,9 @@ void SB_Copy (StrBuf* Target, const StrBuf* Source); void SB_AppendChar (StrBuf* B, int C); /* Append a character to a string buffer */ +void SB_AppendCharCooked (StrBuf* B, int C, int Cooked); +/* Append a character to a string buffer, raw if Cooked == 0 */ + void SB_AppendBuf (StrBuf* B, const char* S, unsigned Size); /* Append a character buffer to the end of the string buffer */ @@ -354,7 +377,13 @@ void SB_AppendStr (StrBuf* B, const char* S); INLINE void SB_Append (StrBuf* Target, const StrBuf* Source) /* Append the contents of Source to Target */ { - SB_AppendBuf (Target, Source->Buf, Source->Len); + unsigned NewLen = Target->Len + Source->Len; + if (NewLen > Target->Allocated) { + SB_Realloc (Target, NewLen); + } + memcpy (Target->Buf + Target->Len, Source->Buf, Source->Len); + memcpy (Target->Cooked + Target->Len, Source->Cooked, Source->Len); + Target->Len = NewLen; } #else void SB_Append (StrBuf* Target, const StrBuf* Source); diff --git a/src/common/tgttrans.c b/src/common/tgttrans.c index 3310eab81..3ac41f09e 100644 --- a/src/common/tgttrans.c +++ b/src/common/tgttrans.c @@ -121,7 +121,19 @@ void TgtTranslateStrBuf (StrBuf* Buf) ** system character set. */ { - TgtTranslateBuf (SB_GetBuf (Buf), SB_GetLen (Buf)); + unsigned char* B = (unsigned char*)SB_GetBuf(Buf); + unsigned char* Cooked = (unsigned char*)SB_GetCooked(Buf); + unsigned Len = SB_GetLen(Buf); + + /* Translate */ + while (Len--) { + if (*Cooked) { + *B = Tab[*B]; + } + /* else { *B = *B; } */ + ++B; + ++Cooked; + } } @@ -129,7 +141,7 @@ void TgtTranslateStrBuf (StrBuf* Buf) void TgtTranslateSet (unsigned Index, unsigned char C) /* Set the translation code for the given character */ { - CHECK (Index < sizeof (Tab)); + CHECK (Index < (sizeof (Tab) / sizeof(Tab[0]))); Tab[Index] = C; } diff --git a/test/val/bug2609.c b/test/val/bug2609.c new file mode 100644 index 000000000..418673e98 --- /dev/null +++ b/test/val/bug2609.c @@ -0,0 +1,72 @@ +/* Bug #2609 - charmap translation violates C specification 6.4.4.4 Character constant */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <assert.h> + +#pragma charmap (0x07, 0x62) /* map \a to b */ +static_assert('\a' == 0x62); +static_assert('\07' == 0x07); +static_assert('\x07' == 0x07); + +#pragma charmap (0x07, 0x63) /* map \a to c */ +static_assert('\a' == 0x63); +static_assert('\07' == 0x07); +static_assert('\x07' == 0x07); + +#pragma charmap (0x07, 0x07) /* map \a back to x07 */ +static_assert('\a' == 0x07); +static_assert('\07' == 0x07); +static_assert('\x07' == 0x07); + +#pragma charmap (0x07, 0x61) /* map \a to a */ + +char *s = "\07\a\x07"; +char t[] = { 7, 0x61, 7, 0 }; + +static_assert('\a' == 0x61); +static_assert('\07' == 0x07); +static_assert('\x07' == 0x07); + +char c_back_a = '\a'; +char c_hex_07 = '\x07'; +char c_oct_07 = '\07'; +int i_back_a = '\a'; +int i_hex_07 = '\x07'; +int i_oct_07 = '\07'; + +#define TEST(a,b) \ + if (a != b) { printf("\n\n !FAIL! %s = %04x not %04x\n\n", #a, a, b); return EXIT_FAILURE; } + +int main (void) { + int i; + + TEST(c_back_a, 0x61) + TEST(c_hex_07, 0x07) + TEST(c_oct_07, 07) + + TEST(i_back_a, 0x61) + TEST(i_hex_07, 0x07) + TEST(i_oct_07, 07) + + assert('\a' == 0x61); + assert('\07' == 0x07); + assert('\x07' == 0x07); + + if (strcmp(s,t) || s[0] == s[1]) { + printf("\n\n !FAIL! strcmp\n"); + for (i = 0; i < 4; i++) { + printf("%02x ", s[i]); + } + printf("\n"); + for (i = 0; i < 4; i++) { + printf("%02x ", t[i]); + } + printf("\n"); + printf("\n"); + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} diff --git a/test/val/bug2610.c b/test/val/bug2610.c new file mode 100644 index 000000000..75169b81d --- /dev/null +++ b/test/val/bug2610.c @@ -0,0 +1,15 @@ +#include <stdio.h> +#if '\x0A' != 0x0A +#error "Suspicious character set translation" +#endif +int main() +{ + char c = '\x0A'; + if (c == 0x0A) { + printf("Ok\n"); + return 0; + } else { + printf("Failed\n"); + return 1; + } +} From 060522a740e6d610a05c4a43e766bade556e391e Mon Sep 17 00:00:00 2001 From: Gorilla Sapiens <embracetheape@gmail.com> Date: Fri, 2 May 2025 05:43:14 +0000 Subject: [PATCH 2669/2710] issue #2633 print unambiguous success message --- test/Makefile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/test/Makefile b/test/Makefile index fbdf8c5d1..24851ee7b 100644 --- a/test/Makefile +++ b/test/Makefile @@ -12,7 +12,7 @@ endif WORKDIR = ../testwrk -.PHONY: test continue mostlyclean clean +.PHONY: test continue mostlyclean clean success_message test: @$(MAKE) mostlyclean @@ -27,6 +27,12 @@ continue: @$(MAKE) -C standard all @$(MAKE) -C misc all @$(MAKE) -C todo all + @$(MAKE) success_message + +success_message: + $(info ###################################) + $(info ### validation suite successful ###) + $(info ###################################) mostlyclean: @$(MAKE) -C asm clean From f13f2cb6196ec0dc2d091c64e6f87cd1f5c5aead Mon Sep 17 00:00:00 2001 From: Gorilla Sapiens <embracetheape@gmail.com> Date: Sat, 3 May 2025 02:36:44 +0000 Subject: [PATCH 2670/2710] fixes issue #2637 --- src/cc65/preproc.c | 3 ++- test/misc/Makefile | 6 ++++++ test/misc/bug2637.c | 15 +++++++++++++++ test/misc/bug2637.ref | 0 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 test/misc/bug2637.c create mode 100644 test/misc/bug2637.ref diff --git a/src/cc65/preproc.c b/src/cc65/preproc.c index d033520b8..5cdec3142 100644 --- a/src/cc65/preproc.c +++ b/src/cc65/preproc.c @@ -2647,8 +2647,9 @@ static void DoDefine (void) ** "There shall be white-space between the identifier and the ** replacement list in the definition of an object-like macro." ** Note: C89 doesn't have this constraint. + ** Note: if there is no replacement list, a space is not required. */ - if (Std == STD_C99 && !IsSpace (CurC)) { + if (Std == STD_C99 && !IsSpace (CurC) && CurC != 0) { PPWarning ("ISO C99 requires whitespace after the macro name"); } diff --git a/test/misc/Makefile b/test/misc/Makefile index ebae0964e..f5225b14b 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -110,6 +110,12 @@ $(WORKDIR)/bug2515.$1.$2.prg: bug2515.c | $(WORKDIR) $(NOT) $(CC65) -t sim$2 -$1 -o $$(@:.prg=.s) $$< 2>$(WORKDIR)/bug2515.$1.$2.out $(ISEQUAL) $(WORKDIR)/bug2515.$1.$2.out bug2515.ref +# should not issue any warnings in C99 mode +$(WORKDIR)/bug2637.$1.$2.prg: bug2637.c | $(WORKDIR) + $(if $(QUIET),echo misc/bug2637.$1.$2.prg) + $(CC65) --standard c99 -t sim$2 -$1 -o $$(@:.prg=.s) $$< 2>$(WORKDIR)/bug2637.$1.$2.out + $(ISEQUAL) $(WORKDIR)/bug2637.$1.$2.out bug2637.ref + # this one requires -Werror $(WORKDIR)/bug1768.$1.$2.prg: bug1768.c | $(WORKDIR) $(if $(QUIET),echo misc/bug1768.$1.$2.prg) diff --git a/test/misc/bug2637.c b/test/misc/bug2637.c new file mode 100644 index 000000000..f6b716465 --- /dev/null +++ b/test/misc/bug2637.c @@ -0,0 +1,15 @@ +#include <stdarg.h> +#include <stdbool.h> +#include <stddef.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <unistd.h> + +// compile with --standard c99 +int main() +{ + return 0; +} diff --git a/test/misc/bug2637.ref b/test/misc/bug2637.ref new file mode 100644 index 000000000..e69de29bb From f48fb035405ca65f9b0a27e2cf2f7b1eb8f15631 Mon Sep 17 00:00:00 2001 From: Gorilla Sapiens <embracetheape@gmail.com> Date: Fri, 2 May 2025 07:02:07 +0000 Subject: [PATCH 2671/2710] issue #2607, enable '\e' character escape for --standard cc65 --- doc/cc65.sgml | 10 +++++ src/cc65/scanner.c | 9 +++++ test/Makefile | 2 + test/readme.txt | 8 +++- test/standard/issue2607_cc65.c | 14 +++++++ test/standard_err/Makefile | 55 ++++++++++++++++++++++++++ test/standard_err/issue2607_not_cc65.c | 14 +++++++ 7 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 test/standard/issue2607_cc65.c create mode 100644 test/standard_err/Makefile create mode 100644 test/standard_err/issue2607_not_cc65.c diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 781e460a8..6793603d5 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -1053,6 +1053,16 @@ This cc65 version has some extensions to the ISO C standard. unsigned char foo = 0b101; // sets it to 5 </verb></tscreen> +<item> The character escape '\e', a GCC C extension, is accepted. + In ASCII this is the escape character 0x1B, which may be + remapped in other character sets via a #pragma charmap. + It can be disabled with the <tt><ref id="option--standard" + name="--standard"></tt> option. + + <tscreen><verb> + unsigned char foo = '\e'; // sets it to 0x1B or equivalent + </verb></tscreen> + </itemize> <p> diff --git a/src/cc65/scanner.c b/src/cc65/scanner.c index 879925c7c..7369d7fde 100644 --- a/src/cc65/scanner.c +++ b/src/cc65/scanner.c @@ -346,6 +346,14 @@ static int ParseChar (void) case 'b': C = '\b'; break; + case 'e': + if (IS_Get(&Standard) != STD_CC65) { + goto IllegalEscape; + } + /* we'd like to use \e here, but */ + /* not all build systems support it */ + C = '\x1B'; + break; case 'f': C = '\f'; break; @@ -411,6 +419,7 @@ static int ParseChar (void) Error ("Octal character constant out of range"); break; default: +IllegalEscape: C = CurC; Error ("Illegal escaped character: 0x%02X", CurC); break; diff --git a/test/Makefile b/test/Makefile index fbdf8c5d1..af18ddd7d 100644 --- a/test/Makefile +++ b/test/Makefile @@ -25,6 +25,7 @@ continue: @$(MAKE) -C ref all @$(MAKE) -C err all @$(MAKE) -C standard all + @$(MAKE) -C standard_err all @$(MAKE) -C misc all @$(MAKE) -C todo all @@ -35,6 +36,7 @@ mostlyclean: @$(MAKE) -C ref clean @$(MAKE) -C err clean @$(MAKE) -C standard clean + @$(MAKE) -C standard_err clean @$(MAKE) -C misc clean @$(MAKE) -C todo clean diff --git a/test/readme.txt b/test/readme.txt index d3f17148e..0aa8799b9 100644 --- a/test/readme.txt +++ b/test/readme.txt @@ -12,6 +12,8 @@ compiler is working as expected (when the tests behave as described): /val - The bulk of tests are contained here, individual tests should exit with an exit code of EXIT_SUCCESS when they pass, or EXIT_FAILURE on error. +/err - contains tests that MUST NOT compile + /standard - like the tests in /val, the tests must exit with EXIT_SUCCESS on success. Unlike the tests in /val these are not compiled for every combination of optimizer options, but instead always with -Osir and then @@ -19,6 +21,10 @@ compiler is working as expected (when the tests behave as described): to check for regressions in standard conformance of the compiler and the library. +/standard_err - like the tests in /err, these tests MUST NOT compile, and like + the tests in /standard, these are compiled -Osir and then for each + supported C-Standard. + /ref - These tests produce output that must be compared with reference output. Normally the reference output is produced by compiling the program on the host (using gcc mostly) and then running them on the host. Tests should @@ -43,8 +49,6 @@ compiler is working as expected (when the tests behave as described): only ever use this as a last resort when something can not be tested by other means. -/err - contains tests that MUST NOT compile - /todo and /misc generally contain the tests that fail because of known bugs: diff --git a/test/standard/issue2607_cc65.c b/test/standard/issue2607_cc65.c new file mode 100644 index 000000000..82ff9d1aa --- /dev/null +++ b/test/standard/issue2607_cc65.c @@ -0,0 +1,14 @@ +#include <stdio.h> +#include <stdlib.h> + +/* this should succeed on all three standards + * yet use only \e on CC65 + */ +int main(void) { + +#if __CC65_STD__ == __CC65_STD_CC65__ + printf("\e"); +#endif + + return EXIT_SUCCESS; +} diff --git a/test/standard_err/Makefile b/test/standard_err/Makefile new file mode 100644 index 000000000..700a52eea --- /dev/null +++ b/test/standard_err/Makefile @@ -0,0 +1,55 @@ +# Makefile for the tests that MUST NOT compile + +ifneq ($(shell echo),) + CMD_EXE = 1 +endif + +ifdef CMD_EXE + S = $(subst /,\,/) + NOT = - # Hack + NULLDEV = nul: + MKDIR = mkdir $(subst /,\,$1) + RMDIR = -rmdir /s /q $(subst /,\,$1) +else + S = / + NOT = ! + NULLDEV = /dev/null + MKDIR = mkdir -p $1 + RMDIR = $(RM) -r $1 +endif + +ifdef QUIET + .SILENT: + NULLERR = 2>$(NULLDEV) +endif + +CC65 := $(if $(wildcard ../../bin/cc65*),..$S..$Sbin$Scc65,cc65) + +WORKDIR = ../../testwrk/standard_err + +OPTIONS = c89 c99 cc65 + +.PHONY: all clean + +SOURCES := $(wildcard *.c) +TESTS = $(foreach option,$(OPTIONS),$(SOURCES:%.c=$(WORKDIR)/%.$(option).6502.prg)) + +all: $(TESTS) + +$(WORKDIR): + $(call MKDIR,$(WORKDIR)) + +define PRG_template + +$(WORKDIR)/%.$1.$2.prg: %.c | $(WORKDIR) + $(if $(QUIET),echo standard_err/$$*.$1.$2.prg) + $(NOT) $(CC65) -t sim$2 $$(CC65FLAGS) -Osir --add-source --standard $1 -o $$(@:.prg=.s) $$< $(NULLERR) + +endef # PRG_template + +$(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option),6502))) + +#$(foreach option,$(OPTIONS),$(eval $(call PRG_template,$(option),65c02))) + +clean: + @$(call RMDIR,$(WORKDIR)) diff --git a/test/standard_err/issue2607_not_cc65.c b/test/standard_err/issue2607_not_cc65.c new file mode 100644 index 000000000..5e56df557 --- /dev/null +++ b/test/standard_err/issue2607_not_cc65.c @@ -0,0 +1,14 @@ +#include <stdio.h> +#include <stdlib.h> + +/* this should fail on all three standards + */ +int main(void) { + +#if __CC65_STD__ != __CC65_STD_CC65__ + printf("\e"); +#else +#error "this needs to error on CC65 to make it through validation" +#endif + return EXIT_SUCCESS; +} From 1b85ab698545c14f14da2b975984f4c9270ced2f Mon Sep 17 00:00:00 2001 From: Gorilla Sapiens <embracetheape@gmail.com> Date: Tue, 6 May 2025 03:02:18 +0000 Subject: [PATCH 2672/2710] C style character translation in ca65 --- libsrc/common/fgets.s | 17 +----- src/ca65/scanner.c | 131 +++++++++++++++++++++++++++++++++--------- 2 files changed, 104 insertions(+), 44 deletions(-) diff --git a/libsrc/common/fgets.s b/libsrc/common/fgets.s index d5ea900d0..c25664f19 100644 --- a/libsrc/common/fgets.s +++ b/libsrc/common/fgets.s @@ -90,22 +90,7 @@ read_loop: bne :+ inc ptr4+1 - ; The next code line: - ; - ; .byte $c9, "\n" - ; - ; corresponds to a CMP #imm with the target-specific newline value as its operand. - ; This works because (with the 'string_escapes' feature enabled), the "\n" string - ; assembles to the target-specific value for the newline character. - ; - ; It would be better if we could just write: - ; - ; cmp #'\n' - ; - ; Unfortunately, ca65 doesn't currently handle escape characters in character - ; constants. In the longer term, fixing that would be the preferred solution. - -: .byte $c9, "\n" ; cmp #'\n' +: cmp #'\n' ; #'\n' should get translated properly beq done bne read_loop diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c index 89ff851fc..8b910e672 100644 --- a/src/ca65/scanner.c +++ b/src/ca65/scanner.c @@ -46,6 +46,7 @@ #include "check.h" #include "filestat.h" #include "fname.h" +#include "tgttrans.h" #include "xmalloc.h" /* ca65 */ @@ -788,14 +789,33 @@ static void ReadIdent (void) static void ReadStringConst (int StringTerm) /* Read a string constant into SVal. */ { + int NeedNext; + /* Skip the leading string terminator */ NextChar (); /* Read the string */ while (1) { + int Cooked = 1; + NeedNext = 1; + + if (StringTerm == 0 && SB_GetLen(&CurTok.SVal) == 1) { + if (C == '\'') { + break; + } + else if (MissingCharTerm) { + NeedNext = 0; + break; + } + else { + Error ("Illegal character constant"); + } + } + if (C == StringTerm) { break; } + if (C == '\n' || C == EOF) { Error ("Newline in string constant"); break; @@ -808,20 +828,74 @@ static void ReadStringConst (int StringTerm) case EOF: Error ("Unterminated escape sequence in string constant"); break; - case '\\': - case '\'': - case '"': + case '?': + C = '\?'; break; - case 't': - C = '\x09'; + case 'a': + C = '\a'; + break; + case 'b': + C = '\b'; + break; + case 'e': + C = '\x1B'; /* see comments in cc65/scanner.c */ + break; + case 'f': + C = '\f'; break; case 'r': - C = '\x0D'; + C = '\r'; break; case 'n': - C = '\x0A'; + C = '\n'; break; + case 't': + C = '\t'; + break; + case 'v': + C = '\v'; + break; + case '\\': + C = '\\'; /* unnecessary but more readable */ + break; + case '\'': + C = '\''; /* unnecessary but more readable */ + if (StringTerm == 0) { + /* special case used by character constants + ** when LooseStringTerm not set. this will + ** cause '\' to be a valid character constant + */ + C = '\\'; + NeedNext = 0; + } + break; + case '\"': + C = '\"'; /* unnecessary but more readable */ + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + { /* brace needed for scoping */ + int Count = 1; + int Final = DigitVal(C); + Cooked = 0; + NextChar (); + while (IsODigit (C) && Count++ < 3) { + Final = (Final << 3) | DigitVal(C); + NextChar(); + } + if (C >= 256) + Error ("Octal character constant out of range"); + } + break; + case 'X': case 'x': + Cooked = 0; NextChar (); if (IsXDigit (C)) { char high_nibble = DigitVal (C) << 4; @@ -839,14 +913,19 @@ static void ReadStringConst (int StringTerm) } /* Append the char to the string */ - SB_AppendChar (&CurTok.SVal, C); + SB_AppendCharCooked (&CurTok.SVal, C, Cooked); - /* Skip the character */ - NextChar (); + if (NeedNext) { + /* Skip the character */ + NextChar (); + NeedNext = 1; + } } - /* Skip the trailing terminator */ - NextChar (); + if (NeedNext) { + /* Skip the trailing terminator */ + NextChar (); + } /* Terminate the string */ SB_Terminate (&CurTok.SVal); @@ -1465,12 +1544,13 @@ CharAgain: return; case '\'': - /* Hack: If we allow ' as terminating character for strings, read - ** the following stuff as a string, and check for a one character - ** string later. - */ if (LooseStringTerm) { + /* Hack: If we allow ' as terminating character for strings, read + ** the following stuff as a string, and check for a one character + ** string later. + */ ReadStringConst ('\''); + TgtTranslateStrBuf(&CurTok.SVal); if (SB_GetLen (&CurTok.SVal) == 1) { CurTok.IVal = SB_AtUnchecked (&CurTok.SVal, 0); CurTok.Tok = TOK_CHARCON; @@ -1478,22 +1558,17 @@ CharAgain: CurTok.Tok = TOK_STRCON; } } else { - /* Always a character constant */ - NextChar (); - if (C == EOF || IsControl (C)) { + /* Always a character constant + ** Hack: Pass 0 to ReadStringConst for special handling. + */ + ReadStringConst(0); + TgtTranslateStrBuf(&CurTok.SVal); + if (SB_GetLen(&CurTok.SVal) != 1) { Error ("Illegal character constant"); goto CharAgain; } - CurTok.IVal = C; + CurTok.IVal = SB_AtUnchecked (&CurTok.SVal, 0); CurTok.Tok = TOK_CHARCON; - NextChar (); - if (C != '\'') { - if (!MissingCharTerm) { - Error ("Illegal character constant"); - } - } else { - NextChar (); - } } return; From c5a3dbdf382c2163abefe5cc403542d297108688 Mon Sep 17 00:00:00 2001 From: Jimmy Dansbo <jimmy@dansbo.dk> Date: Tue, 6 May 2025 09:09:07 +0200 Subject: [PATCH 2673/2710] Add additional video modes that were added in ROM Pre Release 43 --- include/cx16.h | 7 ++++++- libsrc/cx16/videomode.s | 25 ++++++++++++++++--------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/include/cx16.h b/include/cx16.h index 5bbd21247..ad8afe200 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -3,7 +3,7 @@ /* cx16.h */ /* */ /* CX16 system-specific definitions */ -/* For prerelease 39 */ +/* For prerelease 43 */ /* */ /* */ /* This software is provided "as-is", without any expressed or implied */ @@ -176,6 +176,11 @@ enum { #define VIDEOMODE_40x15 0x04 #define VIDEOMODE_20x30 0x05 #define VIDEOMODE_20x15 0x06 +#define VIDEOMODE_22x23 0x07 +#define VIDEOMODE_64x50 0x08 +#define VIDEOMODE_64x25 0x09 +#define VIDEOMODE_32x50 0x0A +#define VIDEOMODE_32x25 0x0B #define VIDEOMODE_80COL VIDEOMODE_80x60 #define VIDEOMODE_40COL VIDEOMODE_40x30 #define VIDEOMODE_320x240 0x80 diff --git a/libsrc/cx16/videomode.s b/libsrc/cx16/videomode.s index 998316858..03374642f 100644 --- a/libsrc/cx16/videomode.s +++ b/libsrc/cx16/videomode.s @@ -2,15 +2,22 @@ ; 2022-03-28, Greg King ; ; /* Video mode defines */ -; #define VIDEOMODE_80x60 0x00 -; #define VIDEOMODE_80x30 0x01 -; #define VIDEOMODE_40x60 0x02 -; #define VIDEOMODE_40x30 0x03 -; #define VIDEOMODE_40x15 0x04 -; #define VIDEOMODE_20x30 0x05 -; #define VIDEOMODE_20x15 0x06 -; #define VIDEOMODE_320x240 0x80 -; #define VIDEOMODE_SWAP (-1) +; #define VIDEOMODE_80x60 0x00 +; #define VIDEOMODE_80x30 0x01 +; #define VIDEOMODE_40x60 0x02 +; #define VIDEOMODE_40x30 0x03 +; #define VIDEOMODE_40x15 0x04 +; #define VIDEOMODE_20x30 0x05 +; #define VIDEOMODE_20x15 0x06 +; #define VIDEOMODE_22x23 0x07 +; #define VIDEOMODE_64x50 0x08 +; #define VIDEOMODE_64x25 0x09 +; #define VIDEOMODE_32x50 0x0A +; #define VIDEOMODE_32x25 0x0B +; #define VIDEOMODE_80COL VIDEOMODE_80x60 +; #define VIDEOMODE_40COL VIDEOMODE_40x30 +; #define VIDEOMODE_320x240 0x80 +; #define VIDEOMODE_SWAP (-1) ; ; signed char __fastcall__ videomode (signed char Mode); ; /* Set the video mode, return the old mode. From d4a37f77778d8925ad707828c3e46562c368e609 Mon Sep 17 00:00:00 2001 From: Jimmy Dansbo <jimmy@dansbo.dk> Date: Tue, 6 May 2025 09:16:12 +0200 Subject: [PATCH 2674/2710] Changed tabs to spaces --- include/cx16.h | 10 +++++----- libsrc/cx16/videomode.s | 32 ++++++++++++++++---------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/include/cx16.h b/include/cx16.h index ad8afe200..6a3705631 100644 --- a/include/cx16.h +++ b/include/cx16.h @@ -176,11 +176,11 @@ enum { #define VIDEOMODE_40x15 0x04 #define VIDEOMODE_20x30 0x05 #define VIDEOMODE_20x15 0x06 -#define VIDEOMODE_22x23 0x07 -#define VIDEOMODE_64x50 0x08 -#define VIDEOMODE_64x25 0x09 -#define VIDEOMODE_32x50 0x0A -#define VIDEOMODE_32x25 0x0B +#define VIDEOMODE_22x23 0x07 +#define VIDEOMODE_64x50 0x08 +#define VIDEOMODE_64x25 0x09 +#define VIDEOMODE_32x50 0x0A +#define VIDEOMODE_32x25 0x0B #define VIDEOMODE_80COL VIDEOMODE_80x60 #define VIDEOMODE_40COL VIDEOMODE_40x30 #define VIDEOMODE_320x240 0x80 diff --git a/libsrc/cx16/videomode.s b/libsrc/cx16/videomode.s index 03374642f..46f461fca 100644 --- a/libsrc/cx16/videomode.s +++ b/libsrc/cx16/videomode.s @@ -2,22 +2,22 @@ ; 2022-03-28, Greg King ; ; /* Video mode defines */ -; #define VIDEOMODE_80x60 0x00 -; #define VIDEOMODE_80x30 0x01 -; #define VIDEOMODE_40x60 0x02 -; #define VIDEOMODE_40x30 0x03 -; #define VIDEOMODE_40x15 0x04 -; #define VIDEOMODE_20x30 0x05 -; #define VIDEOMODE_20x15 0x06 -; #define VIDEOMODE_22x23 0x07 -; #define VIDEOMODE_64x50 0x08 -; #define VIDEOMODE_64x25 0x09 -; #define VIDEOMODE_32x50 0x0A -; #define VIDEOMODE_32x25 0x0B -; #define VIDEOMODE_80COL VIDEOMODE_80x60 -; #define VIDEOMODE_40COL VIDEOMODE_40x30 -; #define VIDEOMODE_320x240 0x80 -; #define VIDEOMODE_SWAP (-1) +; #define VIDEOMODE_80x60 0x00 +; #define VIDEOMODE_80x30 0x01 +; #define VIDEOMODE_40x60 0x02 +; #define VIDEOMODE_40x30 0x03 +; #define VIDEOMODE_40x15 0x04 +; #define VIDEOMODE_20x30 0x05 +; #define VIDEOMODE_20x15 0x06 +; #define VIDEOMODE_22x23 0x07 +; #define VIDEOMODE_64x50 0x08 +; #define VIDEOMODE_64x25 0x09 +; #define VIDEOMODE_32x50 0x0A +; #define VIDEOMODE_32x25 0x0B +; #define VIDEOMODE_80COL VIDEOMODE_80x60 +; #define VIDEOMODE_40COL VIDEOMODE_40x30 +; #define VIDEOMODE_320x240 0x80 +; #define VIDEOMODE_SWAP (-1) ; ; signed char __fastcall__ videomode (signed char Mode); ; /* Set the video mode, return the old mode. From 8fbb4c39c42d0205135cb83175edd74681e1ed29 Mon Sep 17 00:00:00 2001 From: Max <mczonk@gmail.com> Date: Tue, 13 May 2025 09:14:03 +0200 Subject: [PATCH 2675/2710] Fixed a typo in Granularity --- src/da65/attrtab.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/da65/attrtab.c b/src/da65/attrtab.c index b70e017a1..e35530afd 100644 --- a/src/da65/attrtab.c +++ b/src/da65/attrtab.c @@ -149,7 +149,7 @@ unsigned GetGranularity (attr_t Style) case atSkip: default: - Internal ("GetGraularity called for style = %d", Style); + Internal ("GetGranularity called for style = %d", Style); return 0; } } From cfbfaa559cbc75c6af62294dcbaaa4f9dada3306 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 13 May 2025 21:26:47 +0200 Subject: [PATCH 2676/2710] Add ZX02 and LZSA (1,2) decompressors --- doc/funcref.sgml | 79 +++++++ include/lzsa.h | 56 +++++ include/zx02.h | 44 ++++ libsrc/common/lzsa1.s | 207 ++++++++++++++++++ libsrc/common/lzsa2.s | 308 +++++++++++++++++++++++++++ libsrc/common/zx02.s | 148 +++++++++++++ test/val/lzsa1.c | 478 ++++++++++++++++++++++++++++++++++++++++++ test/val/lzsa2.c | 438 ++++++++++++++++++++++++++++++++++++++ test/val/zx02.c | 416 ++++++++++++++++++++++++++++++++++++ 9 files changed, 2174 insertions(+) create mode 100644 include/lzsa.h create mode 100644 include/zx02.h create mode 100644 libsrc/common/lzsa1.s create mode 100644 libsrc/common/lzsa2.s create mode 100644 libsrc/common/zx02.s create mode 100644 test/val/lzsa1.c create mode 100644 test/val/lzsa2.c create mode 100644 test/val/zx02.c diff --git a/doc/funcref.sgml b/doc/funcref.sgml index eec04b929..e534b47be 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -521,6 +521,14 @@ see also <tt>testcode/lib/em-test.c</tt> and <tt>samples/multidemo.c</tt>. </itemize> +<sect1><tt/lzsa.h/<label id="lzsa.h"><p> + +<itemize> +<item><ref id="decompress_lzsa1" name="decompress_lzsa1"> +<item><ref id="decompress_lzsa2" name="decompress_lzsa2"> +</itemize> + + <sect1><tt/modload.h/<label id="modload.h"><p> <itemize> @@ -893,6 +901,13 @@ communication, see also <tt>testcode/lib/ser-test.c</tt>. (incomplete) +<sect1><tt/zx02.h/<label id="zx02.h"><p> + +<itemize> +<item><ref id="decompress_zx02" name="decompress_zx02"> +</itemize> + + <sect>Alphabetical function reference<p> <sect1>_DE_ISDIR<label id="_DE_ISDIR"><p> @@ -3381,6 +3396,70 @@ used in presence of a prototype. <tag/Description/<tt/decompress_lz4/ uncompresses a LZ4-compressed buffer. <tag/Notes/<itemize> <item>Use LZ4_compress_HC with compression level 16 for best compression. +<item>Your program will need to know the uncompressed size of the buffer as +there is no end-of-stream marker. +<item>LZ4 is the biggest and second-slowest decompressor shipped in cc65 runtime. +It is also the least efficient compression algorithm. +</itemize> +<tag/Availability/cc65 +<tag/Example/None. +</descrip> +</quote> + + +<sect1>decompress_lzsa1<label id="decompress_lzsa1"><p> + +<quote> +<descrip> +<tag/Function/Uncompress a LZSA buffer with format 1. +<tag/Header/<tt/<ref id="lzsa.h" name="lzsa.h">/ +<tag/Declaration/<tt/void decompress_lzsa1 (const unsigned char* src, unsigned char* const dst);/ +<tag/Description/<tt/decompress_lz4/ uncompresses a LZSA buffer with format 1. +<tag/Notes/<itemize> +<item>Use <tt/lzsa -f 1 -r input.bin output.lzsa1/ to compress your input. +<item>The project and compressor can be found at <url url="https://github.com/emmanuel-marty/lzsa"> +<item>LZSA1 is the fastest decompressor shipped in cc65 runtime, but data is less +compressed than with LZSA2 and ZX02. +</itemize> +<tag/Availability/cc65 +<tag/Example/None. +</descrip> +</quote> + + +<sect1>decompress_lzsa2<label id="decompress_lzsa2"><p> + +<quote> +<descrip> +<tag/Function/Uncompress a LZSA buffer with format 2. +<tag/Header/<tt/<ref id="lzsa.h" name="lzsa.h">/ +<tag/Declaration/<tt/void decompress_lzsa2 (const unsigned char* src, unsigned char* const dst);/ +<tag/Description/<tt/decompress_lz4/ uncompresses a LZSA buffer with format 2. +<tag/Notes/<itemize> +<item>Use <tt/lzsa -f 2 -r input.bin output.lzsa2/ to compress your input. +<item>The project and compressor can be found at <url url="https://github.com/emmanuel-marty/lzsa"> +<item>LZSA2 is the second fastest decompressor shipped in cc65 runtime, but data is less +compressed than with ZX02. +</itemize> +<tag/Availability/cc65 +<tag/Example/None. +</descrip> +</quote> + + +<sect1>decompress_zx02<label id="decompress_zx02"><p> + +<quote> +<descrip> +<tag/Function/Uncompress a ZX02 buffer. +<tag/Header/<tt/<ref id="zx02.h" name="zx02.h">/ +<tag/Declaration/<tt/void decompress_zx02 (const unsigned char* src, unsigned char* const dst);/ +<tag/Description/<tt/decompress_zx02/ uncompresses a ZX02 buffer with format 2. +<tag/Notes/<itemize> +<item>Use <tt/zx02 input.bin output.zx02/ to compress your input. +<item>The project and compressor can be found at <url url="https://github.com/dmsc/zx02"> +<item>ZX02 is the slowest decompressor shipped with cc65 runtime, but is also the +smallest and has the best compression ratio. </itemize> <tag/Availability/cc65 <tag/Example/None. diff --git a/include/lzsa.h b/include/lzsa.h new file mode 100644 index 000000000..9b0eb82e5 --- /dev/null +++ b/include/lzsa.h @@ -0,0 +1,56 @@ +/*****************************************************************************/ +/* */ +/* lzsa.h */ +/* */ +/* Decompression routine for the 'lzsa' format */ +/* */ +/* */ +/* */ +/* (C) 2022 John Brandwood */ +/* */ +/* */ +/* Boost license: */ +/* Distributed under the Boost Software License, Version 1.0. */ +/* Boost Software License - Version 1.0 - August 17th, 2003 */ +/* */ +/* Permission is hereby granted, free of charge, to any person or */ +/* organization */ +/* obtaining a copy of the software and accompanying documentation covered by*/ +/* this license (the "Software") to use, reproduce, display, distribute, */ +/* execute, and transmit the Software, and to prepare derivative works of the*/ +/* Software, and to permit third-parties to whom the Software is furnished to*/ +/* do so, all subject to the following: */ +/* */ +/* The copyright notices in the Software and this entire statement, including*/ +/* the above license grant, this restriction and the following disclaimer, */ +/* must be included in all copies of the Software, in whole or in part, and */ +/* all derivative works of the Software, unless such copies or derivative */ +/* works are solely in the form of machine-executable object code generated */ +/* by a source language processor. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR*/ +/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, */ +/* FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT */ +/* SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE */ +/* FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR */ +/* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE */ +/* USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*****************************************************************************/ + + + +#ifndef _LZSA_H +#define _LZSA_H + +void __fastcall__ decompress_lzsa1 (const unsigned char* src, unsigned char* const dst); +/* Decompresses the source buffer into the destination buffer. +** compress with lzsa -r -f 1 input.bin output.lzsa1 + */ + +void __fastcall__ decompress_lzsa2 (const unsigned char* src, unsigned char* const dst); +/* Decompresses the source buffer into the destination buffer. +** compress with lzsa -r -f 2 input.bin output.lzsa2 + */ + +/* end of lzsa.h */ +#endif diff --git a/include/zx02.h b/include/zx02.h new file mode 100644 index 000000000..b3e711d56 --- /dev/null +++ b/include/zx02.h @@ -0,0 +1,44 @@ +/*****************************************************************************/ +/* */ +/* zx02.h */ +/* */ +/* Decompression routine for the 'zx02' format */ +/* */ +/* */ +/* */ +/* (C) 2022 DMSC */ +/* */ +/* */ +/* MIT license: */ +/* Permission is hereby granted, free of charge, to any person obtaining a */ +/* copy of this software and associated documentation files (the “Softwareâ€),*/ +/* to deal in the Software without restriction, including without limitation */ +/* the rights to use, copy, modify, merge, publish, distribute, sublicense, */ +/* and/or sell copies of the Software, and to permit persons to whom the */ +/* Software is furnished to do so, subject to the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be included */ +/* in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED “AS ISâ€, WITHOUT WARRANTY OF ANY KIND, EXPRESS */ +/* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN */ +/* NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, */ +/* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR */ +/* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE */ +/* USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*****************************************************************************/ + + + +#ifndef _ZX02_H +#define _ZX02_H + +void __fastcall__ decompress_zx02 (const unsigned char* src, unsigned char* const dst); +/* Decompresses the source buffer into the destination buffer. +** compress with zx02 input.bin output.zx02 + */ + + +/* end of zx02.h */ +#endif diff --git a/libsrc/common/lzsa1.s b/libsrc/common/lzsa1.s new file mode 100644 index 000000000..bbff728f7 --- /dev/null +++ b/libsrc/common/lzsa1.s @@ -0,0 +1,207 @@ +; void __fastcall__ decompress_lzsa1(const void *src, void *dest) +; +; NMOS 6502 decompressor for data stored in Emmanuel Marty's LZSA1 format. +; +; Compress with: +; lzsa -r -f 1 input.bin output.lzsa1 +; +; Copyright John Brandwood 2021. +; +; Distributed under the Boost Software License, Version 1.0. +; Boost Software License - Version 1.0 - August 17th, 2003 +; +; Permission is hereby granted, free of charge, to any person or organization +; obtaining a copy of the software and accompanying documentation covered by +; this license (the "Software") to use, reproduce, display, distribute, +; execute, and transmit the Software, and to prepare derivative works of the +; Software, and to permit third-parties to whom the Software is furnished to +; do so, all subject to the following: +; +; The copyright notices in the Software and this entire statement, including +; the above license grant, this restriction and the following disclaimer, +; must be included in all copies of the Software, in whole or in part, and +; all derivative works of the Software, unless such copies or derivative +; works are solely in the form of machine-executable object code generated by +; a source language processor. +; +; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +; FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +; SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +; FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +; ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +; DEALINGS IN THE SOFTWARE. + + .export _decompress_lzsa1 + + .import popax + .importzp ptr1, ptr2, ptr3, ptr4, tmp1, tmp2, tmp3 + +lzsa_cmdbuf = tmp1 ; 1 byte. +lzsa_winptr = ptr1 ; 1 word. +lzsa_srcptr = ptr2 ; 1 word. +lzsa_dstptr = ptr3 ; 1 word. + +lzsa_offset = lzsa_winptr + +.proc _decompress_lzsa1 + sta lzsa_dstptr + stx lzsa_dstptr+1 + jsr popax + sta lzsa_srcptr + stx lzsa_srcptr+1 + +lzsa1_unpack: ldy #0 ; Initialize source index. + ldx #0 ; Initialize hi-byte of length. + + ; + ; Copy bytes from compressed source data. + ; + ; N.B. X=0 is expected and guaranteed when we get here. + ; + +cp_length: lda (lzsa_srcptr),y + inc lzsa_srcptr + bne cp_skip0 + inc lzsa_srcptr+1 + +cp_skip0: sta lzsa_cmdbuf ; Preserve this for later. + and #$70 ; Extract literal length. + lsr ; Set CC before ... + beq lz_offset ; Skip directly to match? + + lsr ; Get 3-bit literal length. + lsr + lsr + cmp #$07 ; Extended length? + bcc cp_got_len + + jsr get_length ; X=0, CS from CMP, returns CC. + stx cp_npages+1 ; Hi-byte of length. + +cp_got_len: tax ; Lo-byte of length. + +cp_byte: lda (lzsa_srcptr),y ; CC throughout the execution of + sta (lzsa_dstptr),y ; of this .cp_page loop. + inc lzsa_srcptr + bne cp_skip1 + inc lzsa_srcptr+1 +cp_skip1: inc lzsa_dstptr + bne cp_skip2 + inc lzsa_dstptr+1 +cp_skip2: dex + bne cp_byte +cp_npages: lda #0 ; Any full pages left to copy? + beq lz_offset + + dec cp_npages+1 ; Unlikely, so can be slow. + bcc cp_byte ; Always true! + + ; + ; Copy bytes from decompressed window. + ; + ; Longer but faster. + ; + ; N.B. X=0 is expected and guaranteed when we get here. + ; + +lz_offset: lda (lzsa_srcptr),y ; Get offset-lo. + inc lzsa_srcptr + bne offset_lo + inc lzsa_srcptr+1 + +offset_lo: sta lzsa_offset + + lda #$FF ; Get offset-hi. + bit lzsa_cmdbuf + bpl offset_hi + + lda (lzsa_srcptr),y + inc lzsa_srcptr + bne offset_hi + inc lzsa_srcptr+1 + +offset_hi: sta lzsa_offset+1 + +lz_length: lda lzsa_cmdbuf ; X=0 from previous loop. + and #$0F + adc #$03 ; Always CC from .cp_page loop. + cmp #$12 ; Extended length? + bcc got_lz_len + + jsr get_length ; X=0, CS from CMP, returns CC. + +got_lz_len: inx ; Hi-byte of length+256. + + eor #$FF ; Negate the lo-byte of length + tay + eor #$FF + +get_lz_dst: adc lzsa_dstptr ; Calc address of partial page. + sta lzsa_dstptr ; Always CC from previous CMP. + iny + bcs get_lz_win + beq get_lz_win ; Is lo-byte of length zero? + dec lzsa_dstptr+1 + +get_lz_win: clc ; Calc address of match. + adc lzsa_offset ; N.B. Offset is negative! + sta lzsa_winptr + lda lzsa_dstptr+1 + adc lzsa_offset+1 + sta lzsa_winptr+1 + +lz_byte: lda (lzsa_winptr),y + sta (lzsa_dstptr),y + iny + bne lz_byte + inc lzsa_dstptr+1 + dex ; Any full pages left to copy? + bne lz_more + + jmp cp_length ; Loop around to the beginning. + +lz_more: inc lzsa_winptr+1 ; Unlikely, so can be slow. + bne lz_byte ; Always true! + + ; + ; Get 16-bit length in X:A register pair, return with CC. + ; + ; N.B. X=0 is expected and guaranteed when we get here. + ; + +get_length: clc ; Add on the next byte to get + adc (lzsa_srcptr),y ; the length. + inc lzsa_srcptr + bne skip_inc + inc lzsa_srcptr+1 + +skip_inc: bcc got_length ; No overflow means done. + clc ; MUST return CC! + tax ; Preserve overflow value. + +extra_byte: jsr get_byte ; So rare, this can be slow! + pha + txa ; Overflow to 256 or 257? + beq extra_word + +check_length: pla ; Length-lo. + bne got_length ; Check for zero. + dex ; Do one less page loop if so. +got_length: rts + +extra_word: jsr get_byte ; So rare, this can be slow! + tax + bne check_length ; Length-hi == 0 at EOF. + +finished: pla ; Length-lo. + pla ; Decompression completed, pop + pla ; return address. + rts + +get_byte: lda (lzsa_srcptr),y ; Subroutine version for when + inc lzsa_srcptr ; inlining isn't advantageous. + bne got_byte + inc lzsa_srcptr+1 ; Inc & test for bank overflow. +got_byte: rts +.endproc diff --git a/libsrc/common/lzsa2.s b/libsrc/common/lzsa2.s new file mode 100644 index 000000000..e851970e1 --- /dev/null +++ b/libsrc/common/lzsa2.s @@ -0,0 +1,308 @@ +; void __fastcall__ decompress_lzsa2(const void *src, void *dest) +; +; NMOS 6502 decompressor for data stored in Emmanuel Marty's LZSA2 format. +; +; Compress with: +; lzsa -r -f 2 input.bin output.lzsa2 +; +; Copyright John Brandwood 2021. +; +; Distributed under the Boost Software License, Version 1.0. +; Boost Software License - Version 1.0 - August 17th, 2003 +; +; Permission is hereby granted, free of charge, to any person or organization +; obtaining a copy of the software and accompanying documentation covered by +; this license (the "Software") to use, reproduce, display, distribute, +; execute, and transmit the Software, and to prepare derivative works of the +; Software, and to permit third-parties to whom the Software is furnished to +; do so, all subject to the following: +; +; The copyright notices in the Software and this entire statement, including +; the above license grant, this restriction and the following disclaimer, +; must be included in all copies of the Software, in whole or in part, and +; all derivative works of the Software, unless such copies or derivative +; works are solely in the form of machine-executable object code generated by +; a source language processor. +; +; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +; FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +; SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +; FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +; ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +; DEALINGS IN THE SOFTWARE. + + .export _decompress_lzsa2 + + .import popax + .importzp ptr1, ptr2, ptr3, ptr4, tmp1, tmp2, tmp3 + +lzsa_length = lzsa_winptr ; 1 word. + +lzsa_cmdbuf = tmp1 ; 1 byte. +lzsa_nibflg = tmp2 ; 1 byte. +lzsa_nibble = tmp3 ; 1 byte. +lzsa_offset = ptr1 ; 1 word. +lzsa_winptr = ptr2 ; 1 word. +lzsa_srcptr = ptr3 ; 1 word. +lzsa_dstptr = ptr4 ; 1 word. + +.proc _decompress_lzsa2 + sta lzsa_dstptr + stx lzsa_dstptr+1 + jsr popax + sta lzsa_srcptr + stx lzsa_srcptr+1 + +lzsa2_unpack: + ldx #$00 ; Hi-byte of length or offset. + ldy #$00 ; Initialize source index. + sty lzsa_nibflg ; Initialize nibble buffer. + + ; + ; Copy bytes from compressed source data. + ; + ; N.B. X=0 is expected and guaranteed when we get here. + ; + +cp_length: + lda (lzsa_srcptr),y + inc lzsa_srcptr + bne cp_skip0 + inc lzsa_srcptr+1 + +cp_skip0: + sta lzsa_cmdbuf ; Preserve this for later. + and #$18 ; Extract literal length. + beq lz_offset ; Skip directly to match? + + lsr ; Get 2-bit literal length. + lsr + lsr + cmp #$03 ; Extended length? + bcc cp_got_len + + jsr get_length ; X=0 for literals, returns CC. + stx cp_npages+1 ; Hi-byte of length. + +cp_got_len: + tax ; Lo-byte of length. + +cp_byte: + lda (lzsa_srcptr),y ; CC throughout the execution of + sta (lzsa_dstptr),y ; of this .cp_page loop. + inc lzsa_srcptr + bne cp_skip1 + inc lzsa_srcptr+1 +cp_skip1: + inc lzsa_dstptr + bne cp_skip2 + inc lzsa_dstptr+1 +cp_skip2: + dex + bne cp_byte +cp_npages: + lda #0 ; Any full pages left to copy? + beq lz_offset + + dec cp_npages+1 ; Unlikely, so can be slow + bcc cp_byte ; Always true! + + ; + ; Copy bytes from decompressed window. + ; + ; N.B. X=0 is expected and guaranteed when we get here. + ; + ; xyz + ; =========================== + ; 00z 5-bit offset + ; 01z 9-bit offset + ; 10z 13-bit offset + ; 110 16-bit offset + ; 111 repeat offset + ; + +lz_offset: + lda lzsa_cmdbuf + asl + bcs get_13_16_rep + +get_5_9_bits: + dex ; X=$FF for a 5-bit offset. + asl + bcs get_9_bits ; Fall through if 5-bit. + +get_13_bits: + asl ; Both 5-bit and 13-bit read + php ; a nibble. + jsr get_nibble + plp + rol ; Shift into position, clr C. + eor #$E1 + cpx #$00 ; X=$FF for a 5-bit offset. + bne set_offset + sbc #2 ; 13-bit offset from $FE00. + bne set_hi_8 ; Always NZ from previous SBC. + +get_9_bits: + asl ; X=$FF if CC, X=$FE if CS. + bcc get_lo_8 + dex + bcs get_lo_8 ; Always CS from previous BCC. + +get_13_16_rep: + asl + bcc get_13_bits ; Shares code with 5-bit path. + +get_16_rep: + bmi lz_length ; Repeat previous offset. + +get_16_bits: + jsr get_byte ; Get hi-byte of offset. + +set_hi_8: + tax + +get_lo_8: + lda (lzsa_srcptr),y ; Get lo-byte of offset. + inc lzsa_srcptr + bne set_offset + inc lzsa_srcptr+1 + +set_offset: + sta lzsa_offset ; Save new offset. + stx lzsa_offset+1 + +lz_length: + ldx #1 ; Hi-byte of length+256. + + lda lzsa_cmdbuf + and #$07 + clc + adc #$02 + cmp #$09 ; Extended length? + bcc got_lz_len + + jsr get_length ; X=1 for match, returns CC. + inx ; Hi-byte of length+256. + +got_lz_len: + eor #$FF ; Negate the lo-byte of length. + tay + eor #$FF + +get_lz_dst: + adc lzsa_dstptr ; Calc address of partial page. + sta lzsa_dstptr ; Always CC from previous CMP. + iny + bcs get_lz_win + beq get_lz_win ; Is lo-byte of length zero? + dec lzsa_dstptr+1 + +get_lz_win: + clc ; Calc address of match. + adc lzsa_offset ; N.B. Offset is negative! + sta lzsa_winptr + lda lzsa_dstptr+1 + adc lzsa_offset+1 + sta lzsa_winptr+1 + +lz_byte: + lda (lzsa_winptr),y + sta (lzsa_dstptr),y + iny + bne lz_byte + inc lzsa_dstptr+1 + dex ; Any full pages left to copy? + bne lz_more + + jmp cp_length ; Loop around to the beginning. + +lz_more: + inc lzsa_winptr+1 ; Unlikely, so can be slow. + bne lz_byte ; Always true! + + ; + ; Lookup tables to differentiate literal and match lengths. + ; + +nibl_len_tbl: + .byte 3 ; 0+3 (for literal). + .byte 9 ; 2+7 (for match). + +byte_len_tbl: + .byte 18 - 1 ; 0+3+15 - CS (for literal). + .byte 24 - 1 ; 2+7+15 - CS (for match). + + ; + ; Get 16-bit length in X:A register pair, return with CC. + ; + +get_length: + jsr get_nibble + cmp #$0F ; Extended length? + bcs byte_length + adc nibl_len_tbl,x ; Always CC from previous CMP. + +got_length: + ldx #$00 ; Set hi-byte of 4 & 8 bit + rts ; lengths. + +byte_length: + jsr get_byte ; So rare, this can be slow! + adc byte_len_tbl,x ; Always CS from previous CMP + bcc got_length + beq finished + +word_length: + clc ; MUST return CC! + jsr get_byte ; So rare, this can be slow! + pha + jsr get_byte ; So rare, this can be slow! + tax + pla + bne got_word ; Check for zero lo-byte. + dex ; Do one less page loop if so. +got_word: + rts + +get_byte: + lda (lzsa_srcptr),y ; Subroutine version for when + inc lzsa_srcptr ; inlining isn't advantageous. + bne got_byte + inc lzsa_srcptr+1 +got_byte: + rts + +finished: + pla ; Decompression completed, pop + pla ; return address. + rts + + ; + ; Get a nibble value from compressed data in A. + ; + +get_nibble: + lsr lzsa_nibflg ; Is there a nibble waiting? + lda lzsa_nibble ; Extract the lo-nibble. + bcs got_nibble + + inc lzsa_nibflg ; Reset the flag. + + lda (lzsa_srcptr),y + inc lzsa_srcptr + bne set_nibble + inc lzsa_srcptr+1 + +set_nibble: + sta lzsa_nibble ; Preserve for next time. + lsr ; Extract the hi-nibble. + lsr + lsr + lsr + +got_nibble: + and #$0F + rts +.endproc diff --git a/libsrc/common/zx02.s b/libsrc/common/zx02.s new file mode 100644 index 000000000..02256a768 --- /dev/null +++ b/libsrc/common/zx02.s @@ -0,0 +1,148 @@ +; void __fastcall__ decompress_zx02(const void *src, void *dest) +; +; De-compressor for ZX02 files +; +; Compress with: +; zx02 input.bin output.zx0 +; +; (c) 2022 DMSC +; Code under MIT license, see LICENSE file. + + .export _decompress_zx02 + + .import popax + .importzp ptr1, ptr2, ptr3, tmp1, tmp2 + +offset_hi = tmp1 +ZX0_src = ptr1 +ZX0_dst = ptr2 +bitr = tmp2 +pntr = ptr3 + +.proc _decompress_zx02 + sta ZX0_dst + stx ZX0_dst+1 + + jsr popax + sta ZX0_src + stx ZX0_src+1 + + ; Init values + lda #$80 + sta bitr + ldy #$FF + sty pntr + iny + sty offset_hi ; Y = 0 at end of init + +; Decode literal: Copy next N bytes from compressed file +; Elias(length) byte[1] byte[2] ... byte[N] +decode_literal: + ldx #$01 + jsr get_elias + +cop0: + lda (ZX0_src), y + inc ZX0_src + bne :+ + inc ZX0_src+1 + +: sta (ZX0_dst),y + inc ZX0_dst + bne :+ + inc ZX0_dst+1 + +: dex + bne cop0 + + asl bitr + bcs dzx0s_new_offset + + ; Copy from last offset (repeat N bytes from last offset) + ; Elias(length) + inx + jsr get_elias + +dzx0s_copy: + lda ZX0_dst+1 + sbc offset_hi ; C=0 from get_elias + sta pntr+1 + +cop1: + ldy ZX0_dst + lda (pntr), y + ldy #0 + sta (ZX0_dst),y + inc ZX0_dst + bne :+ + inc ZX0_dst+1 + inc pntr+1 +: dex + bne cop1 + + asl bitr + bcc decode_literal + +; Copy from new offset (repeat N bytes from new offset) +; Elias(MSB(offset)) LSB(offset) Elias(length-1) +dzx0s_new_offset: + ; Read elias code for high part of offset + inx + jsr get_elias + beq exit ; Read a 0, signals the end + + ; Decrease and divide by 2 + dex + txa + lsr + sta offset_hi + + ; Get low part of offset, a literal 7 bits + lda (ZX0_src), y + inc ZX0_src + bne :+ + inc ZX0_src+1 + +: ; Divide by 2 + ror + eor #$ff + sta pntr + + ; And get the copy length. + ; Start elias reading with the bit already in carry: + ldx #1 + jsr elias_skip1 + + inx + bcc dzx0s_copy + +; Read an elias-gamma interlaced code. +elias_get: + ; Read next data bit to result + asl bitr + rol + tax + +get_elias: + ; Get one bit + asl bitr + bne elias_skip1 + + ; Read new bit from stream + lda (ZX0_src), y + inc ZX0_src + bne :+ + inc ZX0_src+1 + +: ; sec ; not needed, C=1 guaranteed from last bit + rol + sta bitr + +elias_skip1: + txa + bcs elias_get + + ; Got ending bit, stop reading +exit: + rts +.endproc diff --git a/test/val/lzsa1.c b/test/val/lzsa1.c new file mode 100644 index 000000000..9e627295a --- /dev/null +++ b/test/val/lzsa1.c @@ -0,0 +1,478 @@ +/* + !!DESCRIPTION!! lzsa1 decompression + !!ORIGIN!! cc65 regression tests + !!LICENCE!! BSD 2-clause + !!AUTHOR!! Colin Leroy-Mira +*/ + +#include <zlib.h> +#include <stdio.h> +#include <lzsa.h> + +/* The sample data is the original lz4.h, compressed with: + * lzsa -r -f 1 lz4.h lz4.lzsa1 + * + * We reused lz4.h from the LZ4 test to have a matching adler32 sum. + */ +static const unsigned char compressed[] = { + 0x71, 0x22, 0x2f, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x4c, 0x5a, 0x34, 0x20, 0x2d, 0x20, 0x46, 0x61, + 0x73, 0x74, 0x20, 0x4c, 0x5a, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x20, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0xd9, 0x71, 0x04, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x20, 0x46, 0x69, 0x6c, 0x65, 0xf1, 0x70, 0x16, 0x43, 0x6f, 0x70, 0x79, + 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x32, 0x30, 0x31, 0x31, 0x2d, 0x32, + 0x30, 0x31, 0x35, 0x2c, 0x20, 0x59, 0x61, 0x6e, 0x6e, 0xe2, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, + 0x0a, 0xd6, 0x73, 0x2a, 0x42, 0x53, 0x44, 0x20, 0x32, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, + 0x20, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x20, 0x28, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, + 0x6f, 0x72, 0x67, 0x2f, 0x6c, 0xdd, 0x64, 0x73, 0x2f, 0x62, 0x73, 0x64, 0x2d, 0xf3, 0x52, 0x2e, + 0x70, 0x68, 0x70, 0x29, 0xb2, 0x72, 0x04, 0x52, 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x5d, 0x31, 0x6e, 0x64, 0x20, 0xa8, 0x33, 0x69, 0x6e, 0x20, 0xbd, 0x02, 0xee, 0x70, + 0x08, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2c, 0x20, 0x77, + 0x3d, 0x32, 0x20, 0x6f, 0x72, 0xf8, 0x31, 0x6f, 0x75, 0x74, 0xba, 0x71, 0x01, 0x6d, 0x6f, 0x64, + 0x69, 0x66, 0x69, 0x63, 0x61, 0xbc, 0x70, 0x0f, 0x2c, 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, 0x65, + 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0xf7, 0x40, + 0x74, 0x68, 0x61, 0x74, 0xfb, 0x30, 0x65, 0x20, 0x66, 0x32, 0xd0, 0x6f, 0x77, 0x69, 0x6e, 0x67, + 0xe2, 0xfe, 0x31, 0x6e, 0x64, 0x69, 0xcb, 0x11, 0x73, 0xcb, 0x02, 0xb6, 0x30, 0x65, 0x74, 0x3a, + 0x67, 0x03, 0xff, 0x1c, 0x2a, 0x61, 0x44, 0x73, 0x20, 0x6f, 0x66, 0x68, 0x00, 0xc5, 0xd0, 0x64, + 0x65, 0x20, 0x6d, 0x75, 0x9a, 0xfe, 0x62, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6e, 0xa6, 0x40, 0x61, + 0x62, 0x6f, 0x76, 0xe5, 0x84, 0xb4, 0xfe, 0x02, 0x65, 0x30, 0x6e, 0x6f, 0x74, 0x0c, 0x10, 0x2c, + 0xe1, 0x40, 0x69, 0x73, 0x20, 0x6c, 0xb3, 0x00, 0xbc, 0x0a, 0x88, 0x2c, 0x6e, 0x64, 0x6b, 0x00, + 0x8e, 0x7f, 0x01, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x72, 0x2e, 0x77, 0x08, 0xa9, 0x69, 0x6e, + 0xea, 0xfe, 0x05, 0x77, 0x00, 0x14, 0x46, 0x64, 0x75, 0x63, 0x65, 0x74, 0x01, 0x2d, 0x07, 0x71, + 0x0f, 0x74, 0x2b, 0x01, 0xb6, 0x04, 0x1a, 0xf5, 0x02, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x4d, 0xfe, 0x50, 0x2f, 0x6f, 0x72, 0x20, 0x6f, 0xe6, 0xf6, 0x04, 0x72, 0x20, 0x6d, + 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x89, 0xfe, 0x83, 0x51, 0xfe, 0x22, 0x74, 0x68, + 0x75, 0x09, 0x3c, 0x83, 0xb2, 0xfd, 0x71, 0x3c, 0x54, 0x48, 0x49, 0x53, 0x20, 0x53, 0x4f, 0x46, + 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x49, 0x53, 0x20, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, + 0x44, 0x20, 0x42, 0x59, 0x20, 0x54, 0x48, 0x45, 0x20, 0x43, 0x4f, 0x50, 0x59, 0x52, 0x49, 0x47, + 0x48, 0x54, 0x20, 0x48, 0x4f, 0x4c, 0x44, 0x45, 0x52, 0x53, 0x20, 0x41, 0x4e, 0x44, 0x20, 0x43, + 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x4f, 0x52, 0x53, 0xb9, 0x30, 0x22, 0x41, 0x53, + 0xc3, 0x12, 0x22, 0xe4, 0x70, 0x0d, 0x41, 0x4e, 0x59, 0x20, 0x45, 0x58, 0x50, 0x52, 0x45, 0x53, + 0x53, 0x20, 0x4f, 0x52, 0x20, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0xb0, 0x00, 0x9f, 0x70, 0x0d, 0x52, + 0x41, 0x4e, 0x54, 0x49, 0x45, 0x53, 0x2c, 0x20, 0x49, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x49, 0x4e, + 0x47, 0x2c, 0x20, 0xbc, 0xc2, 0x20, 0x4e, 0x4f, 0x54, 0xc6, 0xfc, 0x40, 0x49, 0x4d, 0x49, 0x54, + 0xd6, 0x32, 0x54, 0x4f, 0x2c, 0x85, 0x0e, 0xc6, 0x00, 0xb0, 0x72, 0x0a, 0x46, 0x20, 0x4d, 0x45, + 0x52, 0x43, 0x48, 0x41, 0x4e, 0x54, 0x41, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x8d, 0x41, 0x46, + 0x49, 0x54, 0x4e, 0x91, 0x31, 0x46, 0x4f, 0x52, 0xb7, 0x71, 0x0e, 0x41, 0x20, 0x50, 0x41, 0x52, + 0x54, 0x49, 0x43, 0x55, 0x4c, 0x41, 0x52, 0x20, 0x50, 0x55, 0x52, 0x50, 0x4f, 0x53, 0x45, 0x20, + 0x20, 0x70, 0x04, 0x44, 0x49, 0x53, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x45, 0x44, 0x2e, 0x7c, 0x00, + 0x88, 0x7a, 0x05, 0x20, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x20, 0x53, 0x48, 0x41, 0x4c, 0x4c, 0x11, + 0x02, 0x6f, 0x50, 0x4f, 0x57, 0x4e, 0x45, 0x52, 0x3c, 0x0a, 0x11, 0x30, 0x20, 0x42, 0x45, 0x56, + 0x41, 0x41, 0x42, 0x4c, 0x45, 0x91, 0x02, 0x12, 0x61, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x29, + 0x07, 0xf6, 0x40, 0x43, 0x49, 0x44, 0x45, 0x5b, 0x21, 0x4c, 0x2c, 0xb7, 0x50, 0x53, 0x50, 0x45, + 0x43, 0x49, 0xf4, 0x60, 0x20, 0x45, 0x58, 0x45, 0x4d, 0x50, 0x6a, 0x24, 0x59, 0x2c, 0xa9, 0x40, + 0x53, 0x45, 0x51, 0x55, 0xd8, 0x00, 0xe3, 0x60, 0x20, 0x44, 0x41, 0x4d, 0x41, 0x47, 0x1c, 0x9f, + 0x28, 0xe2, 0xfe, 0x0f, 0x81, 0x5b, 0xfe, 0x51, 0x43, 0x55, 0x52, 0x45, 0x4d, 0x44, 0xf2, 0x0b, + 0x4f, 0x46, 0x20, 0x53, 0x55, 0x42, 0x53, 0x54, 0x49, 0x54, 0x55, 0x54, 0x45, 0x20, 0x47, 0x4f, + 0x4f, 0x44, 0x89, 0xfe, 0xf2, 0x06, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x53, 0x3b, 0x20, + 0x4c, 0x4f, 0x53, 0xc7, 0xfe, 0x32, 0x55, 0x53, 0x45, 0x73, 0x41, 0x44, 0x41, 0x54, 0x41, 0x81, + 0x01, 0xba, 0x51, 0x46, 0x49, 0x54, 0x53, 0x3b, 0xf4, 0xc2, 0x42, 0x55, 0x53, 0x49, 0xbd, 0xfe, + 0x70, 0x0d, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x55, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x29, 0x20, + 0x48, 0x4f, 0x57, 0x45, 0x56, 0x45, 0x56, 0x10, 0x41, 0xc2, 0x92, 0x44, 0x94, 0xfe, 0x21, 0x4f, + 0x4e, 0x0c, 0x83, 0xc4, 0xfd, 0x41, 0x45, 0x4f, 0x52, 0x59, 0xa5, 0xa4, 0x4c, 0x49, 0x72, 0xfe, + 0x50, 0x2c, 0x20, 0x57, 0x48, 0x45, 0xe8, 0x10, 0x52, 0xb8, 0x83, 0xca, 0xfe, 0x91, 0x41, 0xf1, + 0xfe, 0x69, 0x53, 0x54, 0x52, 0x49, 0x43, 0x54, 0xd9, 0x20, 0x4f, 0x52, 0x37, 0x11, 0x52, 0x27, + 0x08, 0x10, 0x71, 0x04, 0x20, 0x4e, 0x45, 0x47, 0x4c, 0x49, 0x47, 0x45, 0x4e, 0x43, 0x45, 0xdf, + 0x11, 0x4f, 0xb7, 0xd0, 0x57, 0x49, 0x53, 0x45, 0x29, 0x43, 0xfe, 0x21, 0x49, 0x53, 0xdf, 0x12, + 0x49, 0x83, 0x30, 0x20, 0x57, 0x41, 0x89, 0x11, 0x55, 0x04, 0x01, 0x7b, 0x01, 0x26, 0x82, 0x51, + 0xfe, 0x9b, 0x46, 0x31, 0xfd, 0x92, 0x2c, 0x22, 0xfe, 0x70, 0x01, 0x20, 0x49, 0x46, 0x20, 0x41, + 0x44, 0x56, 0x49, 0x40, 0x05, 0xd0, 0x53, 0x50, 0x4f, 0x53, 0x53, 0x49, 0x76, 0x83, 0xc1, 0xfe, + 0xa4, 0x43, 0x48, 0x82, 0xfe, 0x83, 0xeb, 0xfc, 0xf1, 0x00, 0x59, 0x6f, 0x75, 0x20, 0x63, 0x61, + 0x6e, 0x65, 0xfc, 0xc3, 0x74, 0x61, 0x63, 0x74, 0x31, 0xfc, 0xe0, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x20, 0x3d, 0xfb, 0x11, 0x3a, 0xdd, 0x91, 0x2d, 0x18, 0xfa, 0x84, 0x74, 0xfb, 0x81, 0x07, 0xfc, + 0xd0, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0xf2, 0xfb, 0xa1, 0x3a, 0x20, 0x76, 0xfa, 0x77, 0x14, 0x73, + 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x79, + 0x61, 0x6e, 0x34, 0x39, 0x37, 0x33, 0x2f, 0x6c, 0x7a, 0x34, 0xc3, 0xe1, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0xc0, 0xfb, 0x29, 0x75, 0x6d, 0xc8, 0x72, 0x05, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0xc1, 0x02, 0xde, 0x32, 0x2f, 0x23, 0x21, 0xf8, 0x01, 0xbc, + 0x71, 0x20, 0x63, 0x0a, 0x2a, 0x2f, 0x0a, 0x23, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x20, 0x6f, + 0x6e, 0x63, 0x65, 0x0a, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, + 0x20, 0x28, 0x5f, 0x5f, 0x63, 0x70, 0x6c, 0x75, 0x73, 0xfc, 0xf1, 0x10, 0x29, 0x0a, 0x65, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x20, 0x22, 0x43, 0x22, 0x20, 0x7b, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, + 0x66, 0x0a, 0x0a, 0x55, 0xf9, 0x20, 0x2a, 0x20, 0xb5, 0xa5, 0x2e, 0x68, 0xd6, 0xfb, 0xfa, 0x00, + 0x73, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x4e, 0xf9, 0xc2, 0x66, 0x75, 0x6e, 0x63, 0x65, 0xfb, + 0x92, 0x2c, 0x64, 0xfb, 0x50, 0x67, 0x69, 0x76, 0x65, 0x73, 0xeb, 0xf2, 0x02, 0x6c, 0x6c, 0x20, + 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0xde, 0xfe, 0x61, 0x72, 0x6f, 0x6c, 0x20, 0x74, 0x6f, 0xb9, + 0xc3, 0x67, 0x72, 0x61, 0x6d, 0xc9, 0xfa, 0xe0, 0x2a, 0x20, 0x49, 0x66, 0x20, 0x79, 0xb9, 0xfe, + 0x41, 0x6e, 0x65, 0x65, 0x64, 0xe2, 0xf1, 0x00, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0xa6, + 0xf9, 0x00, 0x71, 0x30, 0x2d, 0x6f, 0x70, 0xf2, 0x36, 0x62, 0x6c, 0x65, 0x92, 0x00, 0xda, 0x60, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x28, 0xf3, 0x20, 0x70, 0x65, 0x8b, 0xa2, 0x6e, 0x67, 0xdb, 0xfe, + 0x10, 0x66, 0xad, 0x21, 0x65, 0x20, 0xed, 0x86, 0x9f, 0xf9, 0x20, 0x29, 0x2c, 0xa0, 0x01, 0x70, + 0x82, 0x5c, 0xfe, 0xa3, 0x6c, 0x65, 0x60, 0xfe, 0xc1, 0x6c, 0x69, 0x62, 0x72, 0x71, 0xfa, 0x10, + 0x68, 0xe7, 0x10, 0x6c, 0x99, 0xf1, 0x0e, 0x74, 0x73, 0x20, 0x6f, 0x77, 0x6e, 0x20, 0x6d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x2c, 0x20, 0x70, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x24, 0xf9, 0x01, 0x0a, + 0x02, 0xaa, 0x20, 0x2e, 0x68, 0x73, 0xe1, 0x73, 0x74, 0x65, 0x61, 0x64, 0x2e, 0xb0, 0xfe, 0x3f, + 0x0a, 0x2f, 0x2a, 0xff, 0x13, 0xf1, 0x00, 0x0a, 0x2a, 0x20, 0x20, 0x56, 0x65, 0x72, 0xe0, 0xfe, + 0x1f, 0x0a, 0xce, 0x14, 0xb3, 0x2f, 0x0a, 0x23, 0x65, 0xfe, 0x01, 0x2e, 0xd0, 0x5f, 0x56, 0x45, + 0x52, 0x53, 0xa4, 0xfc, 0xe1, 0x5f, 0x4d, 0x41, 0x4a, 0x4f, 0x52, 0xa3, 0xf9, 0x11, 0x31, 0xfb, + 0xa1, 0x2f, 0x2a, 0xf7, 0xfd, 0x60, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x04, 0x83, 0xd9, 0xfe, + 0xa1, 0x66, 0x61, 0x17, 0xf9, 0x00, 0x2e, 0x5f, 0x67, 0x65, 0x73, 0x20, 0x20, 0xb8, 0x06, 0x23, + 0x49, 0x4e, 0xb8, 0x18, 0x37, 0xb8, 0x75, 0x02, 0x6e, 0x65, 0x77, 0x20, 0x28, 0x6e, 0x6f, 0x6e, + 0x2d, 0xaf, 0x19, 0x29, 0xae, 0xe0, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x8b, 0xf9, 0x2f, 0x65, + 0x73, 0xaa, 0x06, 0x7b, 0x00, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0x62, 0x20, 0x74, 0x77, + 0xb3, 0xa0, 0x73, 0x2c, 0x03, 0xfe, 0x60, 0x67, 0x2d, 0x66, 0x69, 0x78, 0x65, 0xf5, 0x00, 0xea, + 0xf1, 0x00, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6e, 0xf9, 0x0f, 0xb2, 0x06, 0xc0, 0x4e, + 0x55, 0x4d, 0x42, 0xec, 0xfb, 0x1f, 0x28, 0x00, 0x00, 0x41, 0x2a, 0x31, 0x30, 0x30, 0xfc, 0x2f, + 0x20, 0x2b, 0x2b, 0x01, 0x06, 0xe7, 0x0e, 0x68, 0x20, 0x29, 0x0a, 0x31, 0x02, 0xe7, 0x93, 0x76, + 0x75, 0xfe, 0xff, 0x07, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, + 0x29, 0x3b, 0x33, 0xfe, 0x1b, 0xb1, 0x54, 0x75, 0x6e, 0x8e, 0xfe, 0xa1, 0x70, 0x61, 0xeb, 0xfd, + 0xbf, 0x74, 0x65, 0x72, 0x2a, 0xfe, 0x16, 0x83, 0xbb, 0xfc, 0x02, 0x7b, 0xb0, 0x4d, 0x45, 0x4d, + 0xf6, 0xfa, 0xb0, 0x5f, 0x55, 0x53, 0xbd, 0xfb, 0x21, 0x20, 0x3a, 0xea, 0x92, 0x4d, 0x88, 0xfd, + 0xe2, 0x20, 0x75, 0x73, 0x61, 0x67, 0x65, 0xdd, 0xf7, 0x71, 0x25, 0x75, 0x6c, 0x61, 0x20, 0x3a, + 0x20, 0x4e, 0x2d, 0x3e, 0x32, 0x5e, 0x4e, 0x20, 0x42, 0x79, 0x74, 0x65, 0x73, 0x20, 0x28, 0x65, + 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x20, 0x3a, 0x20, 0x31, 0x30, 0x20, 0x2d, 0x3e, 0x20, + 0x31, 0x4b, 0x42, 0x3b, 0x20, 0x31, 0x32, 0xf5, 0x40, 0x34, 0x4b, 0x42, 0x20, 0xf4, 0x11, 0x36, + 0xf4, 0x21, 0x36, 0x34, 0xe8, 0x13, 0x32, 0xdd, 0x10, 0x4d, 0xf5, 0xd2, 0x65, 0x74, 0x63, 0x2e, + 0x29, 0x9a, 0xfc, 0x61, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x40, 0x19, 0x6d, 0x8e, 0xa1, 0x69, + 0x6d, 0x2a, 0xfc, 0xaa, 0x65, 0x73, 0x32, 0xfc, 0x91, 0x72, 0xc1, 0xfc, 0x93, 0x0a, 0x33, 0xf7, + 0x4b, 0x75, 0x63, 0x65, 0x64, 0xcd, 0x34, 0x63, 0x61, 0x6e, 0xc9, 0x82, 0x90, 0xfc, 0xe0, 0x65, + 0x64, 0x2c, 0x20, 0x64, 0x75, 0x35, 0xf7, 0x10, 0x6f, 0xe6, 0xd0, 0x63, 0x68, 0x65, 0x20, 0x65, + 0x0f, 0xfc, 0x21, 0x63, 0x74, 0xc1, 0x70, 0x05, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x95, 0x51, 0x73, 0x20, 0x31, 0x34, 0x2c, 0x1c, 0x00, 0x52, 0xa0, 0x4b, + 0x42, 0xe0, 0xf5, 0xe0, 0x68, 0x69, 0x63, 0x68, 0x20, 0x6e, 0x16, 0xf7, 0xe1, 0x6c, 0x79, 0x20, + 0x66, 0x69, 0x74, 0xd3, 0xf6, 0x20, 0x74, 0x6f, 0x55, 0x73, 0x03, 0x74, 0x65, 0x6c, 0x20, 0x78, + 0x38, 0x36, 0x20, 0x4c, 0x31, 0xad, 0x99, 0x0a, 0xd1, 0xfd, 0x8e, 0xb9, 0xfe, 0xbf, 0x31, 0x34, + 0x0a, 0x39, 0xfe, 0x1b, 0xa1, 0x53, 0x69, 0xb4, 0xfe, 0xa5, 0x20, 0x46, 0x4d, 0xfb, 0x8f, 0x39, + 0xfe, 0x17, 0x86, 0xb5, 0xfd, 0x85, 0xd4, 0xfe, 0x23, 0x5f, 0x64, 0x1f, 0x20, 0x28, 0x63, 0xb9, + 0x91, 0x74, 0x7f, 0xfc, 0xa4, 0x72, 0x2a, 0x15, 0xfa, 0x14, 0x2c, 0xf2, 0x51, 0x64, 0x65, 0x73, + 0x74, 0x2c, 0x28, 0x04, 0xe8, 0x43, 0x53, 0x69, 0x7a, 0x65, 0xf0, 0x40, 0x6d, 0x61, 0x78, 0x44, + 0xe3, 0x01, 0xef, 0x26, 0x29, 0x3b, 0xa5, 0x26, 0x64, 0x65, 0xa3, 0x5f, 0x73, 0x61, 0x66, 0x65, + 0x20, 0xa5, 0x12, 0x88, 0xe4, 0xfa, 0x0c, 0xa1, 0x0b, 0xe7, 0x83, 0x11, 0xfd, 0x1f, 0x0a, 0x3e, + 0x03, 0x93, 0x29, 0x52, 0xf9, 0x25, 0x20, 0x43, 0xce, 0x37, 0x73, 0x20, 0x27, 0x4e, 0xb2, 0x27, + 0x20, 0x62, 0x77, 0xfd, 0xc4, 0x66, 0x72, 0x6f, 0x6d, 0x2e, 0xfa, 0x05, 0xe1, 0x11, 0x27, 0xc9, + 0x83, 0x47, 0xfe, 0xb0, 0x61, 0x6c, 0x72, 0xdc, 0xfa, 0x10, 0x79, 0xf8, 0xc1, 0x6c, 0x6f, 0x63, + 0x61, 0x2d, 0xf4, 0x11, 0x27, 0x5c, 0x14, 0x27, 0xce, 0x82, 0x6c, 0xf4, 0x00, 0xb3, 0x28, 0x20, + 0x27, 0x05, 0x2a, 0x27, 0x2e, 0x89, 0xb1, 0x69, 0x6f, 0x6e, 0xd8, 0xfd, 0xa0, 0x67, 0x75, 0x9c, + 0xfc, 0xa4, 0x6e, 0x74, 0xed, 0xf9, 0x41, 0x73, 0x75, 0x63, 0x63, 0xf5, 0x2b, 0x69, 0x66, 0xc5, + 0xba, 0x20, 0x3e, 0x3d, 0x71, 0xfe, 0x67, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x28, 0x4a, 0x13, 0x29, + 0xa4, 0x20, 0x49, 0x74, 0x6e, 0x60, 0x73, 0x6f, 0x20, 0x72, 0x75, 0x6e, 0x3e, 0xa0, 0x61, 0x73, + 0x46, 0xfc, 0x20, 0x2c, 0x20, 0xf0, 0xb0, 0x69, 0x74, 0x27, 0xb6, 0xf4, 0xa1, 0x20, 0x72, 0xda, + 0xfe, 0xb1, 0x6d, 0x65, 0x6e, 0xfd, 0xf4, 0xb1, 0x73, 0x65, 0x74, 0xaf, 0xf9, 0x04, 0xc8, 0x91, + 0x66, 0x9c, 0xf4, 0x86, 0x25, 0xf9, 0x81, 0x08, 0xfd, 0xa7, 0x6e, 0x6f, 0x93, 0xfe, 0x86, 0xff, + 0xfe, 0x04, 0x03, 0xc1, 0x20, 0x6d, 0x6f, 0x72, 0xa2, 0xf9, 0x2a, 0x6d, 0x69, 0x06, 0xc2, 0x64, + 0x67, 0x65, 0x74, 0xb2, 0xf6, 0x8a, 0x9e, 0xfc, 0xc0, 0x73, 0x74, 0x6f, 0x70, 0xad, 0xfa, 0x10, + 0x69, 0x87, 0xc0, 0x64, 0x69, 0x61, 0x74, 0xff, 0xfc, 0x92, 0x2a, 0xc6, 0xf8, 0x0b, 0x8e, 0x00, + 0xd2, 0xb1, 0x75, 0x6c, 0x74, 0xef, 0xfe, 0x43, 0x7a, 0x65, 0x72, 0x6f, 0x6a, 0x11, 0x41, 0x4c, + 0x81, 0xeb, 0xfd, 0xd0, 0x65, 0x71, 0x75, 0x65, 0x6e, 0xf2, 0xfd, 0x04, 0x95, 0x82, 0x9e, 0xf8, + 0x22, 0x65, 0x6e, 0xd2, 0xa2, 0x6e, 0x6f, 0x8c, 0xfc, 0x23, 0x69, 0x64, 0xcd, 0x47, 0x54, 0x68, + 0x69, 0x73, 0xab, 0xc0, 0x6e, 0x65, 0x76, 0x65, 0x6c, 0xf2, 0xa1, 0x72, 0x69, 0x2f, 0xfe, 0xc0, + 0x6f, 0x75, 0x74, 0x73, 0x2d, 0xf8, 0x8b, 0x57, 0xfe, 0x10, 0x2c, 0xbf, 0xa1, 0x72, 0x20, 0x34, + 0xfe, 0x05, 0xe0, 0x05, 0x14, 0x03, 0xde, 0x88, 0x10, 0xf3, 0x88, 0x2a, 0xfd, 0x90, 0x20, 0x63, + 0xfb, 0xb0, 0x4d, 0x61, 0x78, 0x52, 0xfe, 0xc0, 0x70, 0x70, 0x6f, 0x72, 0xfc, 0xfe, 0x86, 0x09, + 0xfc, 0x83, 0x4d, 0xfc, 0x75, 0x07, 0x41, 0x58, 0x5f, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x56, + 0x41, 0x4c, 0x55, 0x45, 0xbf, 0x89, 0xf9, 0xfc, 0xa3, 0x20, 0x3a, 0xcd, 0xf7, 0xa1, 0x6f, 0x72, + 0x9c, 0xfa, 0xc3, 0x74, 0x69, 0x61, 0x6c, 0xd0, 0xfd, 0x24, 0x6f, 0x66, 0x89, 0x05, 0x59, 0x92, + 0x28, 0xc6, 0xfb, 0x83, 0xb4, 0xf2, 0xaf, 0x62, 0x65, 0x88, 0xfd, 0x00, 0x16, 0x29, 0xa2, 0xc0, + 0x72, 0x65, 0x74, 0x75, 0x2c, 0xf7, 0x92, 0x3a, 0xa8, 0xfe, 0x93, 0x6e, 0x05, 0xfa, 0xa4, 0x6f, + 0x66, 0x32, 0xfd, 0xa1, 0x77, 0x72, 0x87, 0xf1, 0x92, 0x6e, 0x40, 0xfe, 0x0d, 0x9e, 0xb0, 0x6e, + 0x65, 0x63, 0x55, 0xfe, 0xb0, 0x61, 0x72, 0x69, 0x65, 0xfb, 0x21, 0x3c, 0x3d, 0x5a, 0x52, 0x4f, + 0x75, 0x74, 0x70, 0x75, 0x58, 0x00, 0xa1, 0x09, 0xff, 0x01, 0x50, 0xcb, 0x30, 0x20, 0x69, 0x66, + 0xef, 0xf6, 0xef, 0x61, 0x69, 0x6c, 0x73, 0x0a, 0x0a, 0x2d, 0xfc, 0x01, 0x85, 0x95, 0xfc, 0x88, + 0x4a, 0xfc, 0x04, 0x03, 0x22, 0x69, 0x73, 0x59, 0x00, 0xeb, 0xc1, 0x63, 0x69, 0x73, 0x65, 0xf4, + 0xfe, 0x86, 0xff, 0xfe, 0x01, 0xe7, 0x08, 0xcf, 0x83, 0x7e, 0xf6, 0xa6, 0x2e, 0x0a, 0xbf, 0xfe, + 0x0f, 0xb4, 0x05, 0x06, 0xc1, 0x01, 0x2a, 0xa2, 0x69, 0x6e, 0xf8, 0xf1, 0x86, 0x1b, 0xfe, 0x8f, + 0xbb, 0xfe, 0x0d, 0xaf, 0x2e, 0x0a, 0xbf, 0xfe, 0x0f, 0x18, 0x64, 0x88, 0x82, 0xba, 0xfe, 0x0f, + 0x98, 0x01, 0x8e, 0xb5, 0xfe, 0x0e, 0x50, 0x8e, 0xaf, 0xfe, 0x1f, 0x49, 0x50, 0x02, 0x85, 0x28, + 0xfd, 0xc0, 0x6c, 0x61, 0x72, 0x67, 0x9c, 0xf9, 0x62, 0x6e, 0x6f, 0x75, 0x67, 0x68, 0x2c, 0x7e, + 0x91, 0x64, 0x2b, 0xf9, 0xc2, 0x77, 0x69, 0x6c, 0x6c, 0xaa, 0xfc, 0x82, 0xba, 0xfc, 0x92, 0x6f, + 0x54, 0xfe, 0x00, 0xf5, 0xe3, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0xfc, 0xef, 0x5d, 0x28, 0x3c, + 0x30, 0x29, 0x2e, 0x96, 0x01, 0x28, 0x85, 0x62, 0xf4, 0x61, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x97, 0xe1, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x07, 0xf9, 0xa1, 0x61, 0x6c, 0x6c, 0xf8, 0xba, + 0x65, 0x64, 0x2c, 0x66, 0xfc, 0x07, 0x91, 0x06, 0x7e, 0x01, 0x88, 0x85, 0xd2, 0xfe, 0x50, 0x61, + 0x20, 0x6e, 0x65, 0x67, 0x43, 0xa4, 0x76, 0x65, 0x3d, 0xfc, 0x09, 0x89, 0x8e, 0x6f, 0xfc, 0x92, + 0x69, 0x7c, 0xf0, 0x04, 0x8f, 0xb1, 0x61, 0x67, 0x61, 0x94, 0xf5, 0x86, 0xcd, 0xfa, 0xc0, 0x76, + 0x65, 0x72, 0x66, 0x1d, 0xf0, 0xe0, 0x20, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0xdd, 0xf8, 0x81, 0x23, + 0xfa, 0x31, 0x63, 0x6c, 0x75, 0x8e, 0x01, 0x63, 0xe3, 0x69, 0x63, 0x69, 0x6f, 0x75, 0x73, 0xee, + 0xf4, 0x7d, 0x00, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x1d, 0x9f, 0x74, 0x0e, 0xfc, 0x03, + 0x84, 0xdd, 0xfe, 0x8e, 0x0e, 0xfc, 0x07, 0xdf, 0x27, 0x69, 0x6e, 0xe0, 0x81, 0x08, 0xf5, 0x8f, + 0x9b, 0xf8, 0x1c, 0xd0, 0x41, 0x64, 0x76, 0x61, 0x6e, 0xc5, 0xf7, 0x87, 0x99, 0xf8, 0x8f, 0xfc, + 0xf4, 0x1e, 0x8c, 0xca, 0xfb, 0x45, 0x53, 0x49, 0x5a, 0x45, 0x2c, 0x52, 0x30, 0x78, 0x37, 0x45, + 0x30, 0xff, 0x83, 0x8d, 0xf5, 0xf4, 0x06, 0x32, 0x20, 0x31, 0x31, 0x33, 0x20, 0x39, 0x32, 0x39, + 0x20, 0x32, 0x31, 0x36, 0x64, 0xfd, 0x0c, 0xb7, 0xb2, 0x43, 0x4f, 0x4d, 0x97, 0xef, 0xf1, 0x01, + 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x28, 0x69, 0x73, 0x8a, 0xfd, 0xc0, 0x20, 0x20, 0x28, 0x28, 0xec, + 0xf9, 0x65, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x29, 0xec, 0x27, 0x3e, 0x20, 0xec, 0x0f, 0x7e, 0x01, + 0x65, 0x3f, 0x20, 0x30, 0x20, 0x3a, 0x20, 0xd3, 0x34, 0x2b, 0x20, 0x28, 0xf5, 0x41, 0x2f, 0x32, + 0x35, 0x35, 0xf0, 0xb2, 0x31, 0x36, 0x29, 0x9b, 0xf8, 0x8e, 0x68, 0xf9, 0x86, 0x09, 0xfc, 0x95, + 0x50, 0xba, 0xf2, 0xb1, 0x74, 0x68, 0x65, 0xf3, 0xfc, 0xc2, 0x69, 0x6d, 0x75, 0x6d, 0x58, 0xfc, + 0x82, 0x08, 0xed, 0x01, 0x53, 0x8a, 0xb7, 0xfb, 0xb5, 0x6d, 0x61, 0x79, 0x54, 0xfe, 0x91, 0x69, + 0xa6, 0xfd, 0xc1, 0x22, 0x77, 0x6f, 0x72, 0xef, 0xf7, 0xe0, 0x61, 0x73, 0x65, 0x22, 0x20, 0x73, + 0x5b, 0xec, 0xe2, 0x61, 0x72, 0x69, 0x6f, 0x20, 0x28, 0x52, 0xfe, 0x83, 0xf8, 0xfd, 0x89, 0x5b, + 0xf9, 0xef, 0x69, 0x62, 0x6c, 0x65, 0x29, 0x0a, 0x8c, 0xfd, 0x05, 0xa3, 0x69, 0x6d, 0x6b, 0xfc, + 0xe1, 0x75, 0x73, 0x65, 0x66, 0x75, 0x6c, 0x67, 0xf6, 0x83, 0x17, 0xf6, 0x85, 0xfb, 0xfb, 0x02, + 0xd6, 0xe1, 0x70, 0x75, 0x72, 0x70, 0x6f, 0x73, 0x7b, 0xf5, 0x8f, 0x6c, 0xfc, 0x01, 0x97, 0x73, + 0x9a, 0xf8, 0xdf, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x95, 0xfe, 0x01, 0x10, 0x29, 0x94, 0x82, 0x80, + 0xf8, 0x86, 0x97, 0xed, 0x01, 0x97, 0x02, 0x5f, 0x22, 0x69, 0x6c, 0xb3, 0xc0, 0x2d, 0x74, 0x69, + 0x6d, 0x2e, 0xfc, 0x81, 0xd2, 0xf9, 0x03, 0xa3, 0x6f, 0x28, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x74, + 0x00, 0x02, 0xc7, 0x83, 0xf5, 0xf4, 0x05, 0x8a, 0xb4, 0x4e, 0x6f, 0x74, 0xc8, 0xfe, 0x8f, 0x2a, + 0xf7, 0x05, 0x04, 0xed, 0x85, 0x07, 0xf8, 0xd2, 0x20, 0x77, 0x68, 0x65, 0x6e, 0xa2, 0xfb, 0x09, + 0x3d, 0x00, 0x5d, 0x8f, 0xb4, 0xf7, 0x05, 0xaa, 0x72, 0x63, 0x60, 0xfb, 0x83, 0xeb, 0xfc, 0x85, + 0x12, 0xf9, 0x9f, 0x6d, 0x12, 0xf9, 0x05, 0x8e, 0xca, 0xfd, 0x8e, 0x71, 0xf9, 0x85, 0x08, 0xfe, + 0x84, 0x26, 0xfe, 0x02, 0x7b, 0x8f, 0x21, 0xfe, 0x09, 0x8f, 0x90, 0xf9, 0x01, 0x43, 0x2c, 0x20, + 0x69, 0x66, 0x72, 0x06, 0x3e, 0xb4, 0x74, 0x6f, 0x6f, 0xe2, 0xfa, 0x3f, 0x28, 0x20, 0x3e, 0x7a, + 0x01, 0xc3, 0x29, 0x0a, 0x2a, 0x2f, 0x3d, 0xf5, 0x0e, 0x18, 0x00, 0xea, 0x03, 0x25, 0x8f, 0xd9, + 0xf5, 0x06, 0xb7, 0x66, 0x61, 0x73, 0xdc, 0xf5, 0x91, 0x53, 0x96, 0xf0, 0xaf, 0x61, 0x73, 0x8d, + 0xfe, 0x05, 0x81, 0x0a, 0xf2, 0x92, 0x74, 0x4a, 0xfe, 0xa2, 0x77, 0x73, 0x42, 0xf6, 0xc2, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0xfa, 0x40, 0x22, 0x61, 0x63, 0x63, 0xf3, 0x92, 0x72, 0x33, 0xfe, 0xd0, + 0x22, 0x20, 0x66, 0x61, 0x63, 0xf6, 0xee, 0x85, 0x5d, 0xf7, 0x13, 0x65, 0x44, 0x92, 0x72, 0xbc, + 0xee, 0x09, 0xd7, 0x83, 0xa7, 0xfe, 0x83, 0x80, 0xfa, 0x01, 0x79, 0x03, 0xdd, 0x87, 0xdc, 0xe8, + 0x05, 0x90, 0xa3, 0x73, 0x6f, 0x21, 0xf0, 0x00, 0x73, 0x03, 0xdd, 0x89, 0xb9, 0xfc, 0x84, 0xf6, + 0xf5, 0x83, 0x0e, 0xf6, 0xa0, 0x74, 0x72, 0xae, 0xe8, 0x50, 0x2d, 0x6f, 0x66, 0x66, 0x2e, 0xee, + 0x82, 0x31, 0xf3, 0xb2, 0x62, 0x65, 0x20, 0xd6, 0xfb, 0xd4, 0x74, 0x75, 0x6e, 0x65, 0x64, 0x47, + 0xe9, 0xc2, 0x65, 0x61, 0x63, 0x68, 0x85, 0xf5, 0x01, 0xbe, 0x23, 0x76, 0x65, 0x79, 0x83, 0x3b, + 0xfd, 0x82, 0x82, 0xfa, 0x91, 0x72, 0x7e, 0xf9, 0x80, 0xc2, 0xfc, 0x42, 0x2b, 0x7e, 0x33, 0x25, + 0x18, 0xa5, 0x70, 0x65, 0xcb, 0xf8, 0x2f, 0x41, 0x6e, 0x3e, 0x00, 0x82, 0x79, 0xf8, 0xb6, 0x22, + 0x31, 0x22, 0x66, 0xf8, 0x84, 0xbb, 0xfe, 0x40, 0x72, 0x65, 0x67, 0x75, 0x06, 0x8f, 0xb3, 0xfe, + 0x05, 0x02, 0xb1, 0x11, 0x56, 0xc1, 0x91, 0x73, 0xc4, 0xf8, 0x93, 0x30, 0x87, 0xf9, 0x92, 0x62, + 0xb6, 0xed, 0xb1, 0x6c, 0x61, 0x63, 0xf6, 0xf7, 0xd0, 0x79, 0x20, 0x41, 0x43, 0x43, 0x13, 0xf1, + 0xb1, 0x52, 0x41, 0x54, 0x08, 0xf1, 0xf2, 0x05, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x20, + 0x28, 0x73, 0x65, 0x65, 0x48, 0xee, 0xa4, 0x63, 0x29, 0x15, 0xf8, 0x82, 0x7f, 0xf2, 0x95, 0x2e, + 0xfb, 0xfd, 0x8e, 0x21, 0xfe, 0x9f, 0x20, 0x3a, 0xf3, 0x2a, 0x06, 0xef, 0x0a, 0x07, 0xbf, 0x29, + 0x3b, 0x0a, 0xb5, 0xfd, 0x04, 0xe0, 0x5f, 0x65, 0x78, 0x74, 0x53, 0x74, 0x9a, 0xf7, 0x8a, 0xac, + 0xfd, 0x8f, 0xae, 0xed, 0x03, 0xb1, 0x2c, 0x20, 0x6a, 0x5e, 0xf7, 0xa3, 0x75, 0x73, 0x9c, 0xf8, + 0x93, 0x20, 0x5a, 0xed, 0xb6, 0x61, 0x6c, 0x6c, 0x98, 0xf3, 0x87, 0x60, 0xf1, 0xd2, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x74, 0xfe, 0x3b, 0x74, 0x6f, 0x72, 0xb1, 0x11, 0x73, 0x92, 0x83, 0x62, 0xfe, + 0xa3, 0x55, 0x73, 0xed, 0xf9, 0x81, 0xc8, 0xfc, 0x24, 0x6f, 0x66, 0x79, 0x01, 0xca, 0x60, 0x6b, + 0x6e, 0x6f, 0x77, 0x20, 0x68, 0xfc, 0x44, 0x6d, 0x75, 0x63, 0x68, 0xac, 0x85, 0xe0, 0xf6, 0x07, + 0x93, 0x83, 0x33, 0xf4, 0x36, 0x61, 0x6e, 0x64, 0xed, 0x40, 0x20, 0x69, 0x74, 0x20, 0x9d, 0xa3, + 0x38, 0x2d, 0x86, 0xf9, 0x91, 0x62, 0xad, 0xfc, 0xb1, 0x61, 0x72, 0x69, 0xcc, 0xfa, 0x03, 0x49, + 0x12, 0x6d, 0xd6, 0x01, 0x9b, 0x41, 0x79, 0x70, 0x69, 0x63, 0x44, 0x96, 0x29, 0x09, 0xfd, 0xa4, + 0x6e, 0x2c, 0xe7, 0xfa, 0x02, 0xb9, 0xc1, 0x61, 0x73, 0x20, 0x27, 0x66, 0xef, 0x13, 0x2a, 0x4f, + 0x10, 0x27, 0x69, 0x8f, 0xea, 0xfe, 0x03, 0x85, 0x39, 0xfe, 0x0e, 0x37, 0x01, 0xc3, 0x84, 0xb1, + 0xf1, 0x8f, 0x8a, 0xfe, 0x08, 0x28, 0x20, 0x28, 0x9c, 0xaf, 0x2c, 0x20, 0x08, 0xfe, 0x0e, 0x86, + 0xe2, 0xfb, 0x8f, 0x09, 0xfe, 0x2a, 0x13, 0x64, 0xd1, 0x87, 0x0e, 0xfe, 0xa1, 0x52, 0x65, 0x6e, + 0xee, 0x93, 0x65, 0x4b, 0xfc, 0xd0, 0x6f, 0x67, 0x69, 0x63, 0x2c, 0x34, 0xfd, 0x05, 0x13, 0x83, + 0x12, 0xfe, 0x92, 0x73, 0x76, 0xfe, 0x82, 0x2a, 0xf9, 0x01, 0xf3, 0xa3, 0x70, 0x6f, 0x2f, 0xf9, + 0x82, 0x79, 0xf1, 0x8d, 0x6d, 0xf3, 0x8f, 0x79, 0xf1, 0x09, 0x8b, 0x24, 0xf4, 0x87, 0x79, 0xf1, + 0x91, 0x74, 0x8f, 0xfb, 0x99, 0x74, 0x76, 0xf1, 0x8e, 0xd8, 0xf8, 0xa1, 0x65, 0x69, 0xd2, 0xe6, + 0x06, 0x6a, 0x84, 0x4a, 0xf8, 0xd6, 0x65, 0x6e, 0x74, 0x69, 0x72, 0xeb, 0xf2, 0x86, 0x85, 0xf2, + 0x02, 0x81, 0x05, 0x9a, 0xa2, 0x69, 0x66, 0x9f, 0xf1, 0x8b, 0x50, 0xf5, 0x94, 0x0a, 0x41, 0xfa, + 0xc9, 0x66, 0x69, 0x6c, 0x6c, 0xe3, 0xf0, 0x04, 0x9d, 0xa1, 0x6c, 0x65, 0xf6, 0xf1, 0x82, 0x81, + 0xfb, 0x0f, 0x03, 0x15, 0x87, 0x13, 0xf6, 0x97, 0x2a, 0x66, 0xfc, 0xd5, 0x50, 0x74, 0x72, 0x20, + 0x3a, 0xd6, 0xfb, 0x84, 0x8d, 0xe4, 0x83, 0xb6, 0xf0, 0xc1, 0x69, 0x6e, 0x64, 0x69, 0x4e, 0xfd, + 0x83, 0x1a, 0xfd, 0xb5, 0x61, 0x6e, 0x79, 0xf6, 0xf2, 0x00, 0x1b, 0x92, 0x65, 0x0e, 0xf2, 0x0b, + 0xa1, 0x00, 0xcc, 0x08, 0x54, 0x08, 0x92, 0x0e, 0xff, 0xb7, 0x4e, 0x65, 0x77, 0xfe, 0xf8, 0x8c, + 0x0e, 0xf4, 0xa4, 0x6f, 0x6c, 0xe2, 0xf8, 0x9f, 0x2e, 0xf7, 0xf8, 0x00, 0xaf, 0x4e, 0x62, 0x73, + 0xf2, 0x01, 0x8f, 0x7a, 0xf2, 0x06, 0x86, 0x4f, 0xfe, 0x8f, 0x79, 0xf2, 0x1c, 0x88, 0x0d, 0xfb, + 0x8e, 0x70, 0xfd, 0x8f, 0x9e, 0xee, 0x14, 0xaa, 0x2a, 0x20, 0xa2, 0xfe, 0x02, 0xec, 0x0c, 0x72, + 0x89, 0x0b, 0xfd, 0xaf, 0x64, 0x65, 0xc7, 0xf8, 0x04, 0xd0, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x44, + 0xfb, 0x8a, 0x5c, 0xf2, 0x06, 0xea, 0x85, 0x00, 0xf0, 0xb1, 0x72, 0x65, 0x66, 0x42, 0xfb, 0xa7, + 0x75, 0x6e, 0xa3, 0xf2, 0x82, 0x4f, 0xfd, 0x8f, 0x70, 0xf2, 0x0f, 0x87, 0x3f, 0xfe, 0x88, 0x2a, + 0xf3, 0x86, 0x79, 0xf2, 0xa4, 0x69, 0x6e, 0x05, 0xe4, 0xd3, 0x77, 0x6f, 0x72, 0x64, 0x73, 0xb0, + 0xf8, 0x0c, 0x9e, 0x9f, 0x29, 0xe2, 0xf2, 0x73, 0x9e, 0x44, 0x98, 0xf5, 0x8f, 0x5b, 0xf1, 0x09, + 0x42, 0x20, 0x49, 0x74, 0x73, 0x44, 0x07, 0xdc, 0xc3, 0x20, 0x6d, 0x69, 0x6e, 0xa3, 0xf6, 0xb5, + 0x66, 0x20, 0x27, 0x8d, 0xfe, 0x88, 0x3a, 0xed, 0x03, 0x91, 0x91, 0x6e, 0xc6, 0xf5, 0x9c, 0x3a, + 0x11, 0xfc, 0xa1, 0x66, 0x75, 0xa8, 0xf9, 0x84, 0xa6, 0xe7, 0x84, 0xfe, 0xf9, 0x89, 0x30, 0xfa, + 0x91, 0x66, 0x65, 0xef, 0x91, 0x72, 0x6c, 0xe7, 0x00, 0xd9, 0x03, 0x05, 0x8d, 0x67, 0xe7, 0x0a, + 0x33, 0xa2, 0x49, 0x74, 0x02, 0xf5, 0xc7, 0x20, 0x62, 0x69, 0x74, 0x44, 0xf7, 0xbf, 0x61, 0x6e, + 0x20, 0xe9, 0xef, 0x03, 0x0a, 0xc6, 0xb1, 0x48, 0x6f, 0x77, 0xe0, 0xfa, 0x91, 0x2c, 0xeb, 0xf9, + 0xb2, 0x64, 0x6f, 0x65, 0x04, 0xf1, 0x86, 0xd7, 0xf9, 0xb3, 0x61, 0x6e, 0x79, 0xcd, 0xf1, 0x02, + 0x4a, 0x86, 0xcc, 0xf1, 0x92, 0x69, 0x7a, 0xfb, 0xa2, 0x69, 0x6f, 0xe2, 0xf8, 0x84, 0x08, 0xfc, + 0x04, 0x6a, 0x85, 0x42, 0xfe, 0x96, 0x28, 0xcc, 0xf1, 0x83, 0x2e, 0xfa, 0x0b, 0x8b, 0x91, 0x55, + 0x71, 0xfa, 0x8b, 0xd8, 0xf3, 0x50, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x47, 0x90, 0x64, 0x3d, 0xfb, + 0xd2, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x42, 0xe8, 0x20, 0x6f, 0x6e, 0x9f, 0x12, 0x28, 0xa7, 0xa3, + 0x74, 0x6f, 0x1b, 0xfe, 0x82, 0xb3, 0xfd, 0x85, 0xdd, 0xeb, 0x15, 0x61, 0xca, 0x84, 0xc3, 0xfd, + 0x9a, 0x29, 0x50, 0xf9, 0xaf, 0x64, 0x65, 0x87, 0xf7, 0x20, 0x86, 0xc4, 0xfc, 0x8a, 0x5e, 0xf5, + 0x8e, 0xba, 0xfe, 0x94, 0x5f, 0xc7, 0xed, 0x83, 0x8d, 0xfc, 0x8e, 0x31, 0xfa, 0x07, 0xd2, 0xae, + 0x20, 0x61, 0xb1, 0xee, 0x87, 0xe7, 0xf9, 0x8b, 0x62, 0xef, 0x91, 0x27, 0x34, 0xe4, 0x81, 0x48, + 0xe4, 0x01, 0xbd, 0x8a, 0x09, 0xeb, 0x8e, 0x0c, 0xef, 0x8f, 0x96, 0xf9, 0x06, 0x8c, 0x0c, 0xef, + 0x89, 0x91, 0xf9, 0x89, 0xc8, 0xfc, 0x92, 0x74, 0x9b, 0xfd, 0xa5, 0x74, 0x6f, 0xc4, 0xfc, 0x89, + 0xf3, 0xf8, 0xa5, 0x6f, 0x70, 0xb2, 0xf5, 0x52, 0x61, 0x73, 0x20, 0x73, 0x6f, 0xf8, 0x85, 0x3d, + 0xf9, 0x87, 0x65, 0xed, 0x30, 0x27, 0x20, 0x68, 0xe9, 0xe1, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x72, + 0x3f, 0xf5, 0x85, 0x51, 0xf7, 0x91, 0x72, 0x37, 0xe8, 0x00, 0xb9, 0x08, 0xab, 0x02, 0x8f, 0xbf, + 0x69, 0x6d, 0x65, 0x18, 0xee, 0x15, 0xb4, 0x64, 0x65, 0x64, 0xa9, 0xdf, 0x8f, 0x1b, 0xee, 0x2e, + 0x92, 0x4e, 0x86, 0xfc, 0x82, 0x97, 0xfd, 0x04, 0x96, 0x85, 0x7c, 0xf4, 0x1f, 0x3c, 0x2f, 0x02, + 0xef, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0xff, 0xec, 0x03, 0x87, 0x83, 0xfd, 0x01, 0xc2, 0x91, + 0x73, 0x99, 0xf6, 0xac, 0x65, 0x72, 0xb2, 0xfb, 0xe5, 0x41, 0x6c, 0x77, 0x61, 0x79, 0x73, 0x80, + 0xe3, 0x8e, 0x07, 0xf9, 0x35, 0x65, 0x72, 0x65, 0x21, 0x8f, 0xe4, 0xed, 0x81, 0x8f, 0x45, 0xee, + 0x05, 0x9c, 0x66, 0x42, 0xee, 0x01, 0xa0, 0x02, 0xd5, 0x8d, 0x3c, 0xee, 0xab, 0x6f, 0x66, 0x39, + 0xee, 0x83, 0x6f, 0xfb, 0x88, 0x9b, 0xf9, 0x8e, 0x87, 0xed, 0x8f, 0xab, 0xed, 0x04, 0x86, 0xbd, + 0xf8, 0x8f, 0x8d, 0xfc, 0x09, 0x8f, 0x55, 0xe7, 0x28, 0x89, 0x0c, 0xfe, 0x8f, 0x3f, 0xe7, 0x0d, + 0x8a, 0x7b, 0xed, 0x8f, 0x0d, 0xe6, 0x19, 0x82, 0x42, 0xfe, 0xb9, 0x69, 0x6e, 0x67, 0x97, 0xe7, + 0x8f, 0x65, 0xed, 0x02, 0x8f, 0x5c, 0xed, 0x22, 0xe1, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x9e, + 0xf0, 0xc0, 0x5f, 0x55, 0x36, 0x34, 0xee, 0xed, 0xed, 0x31, 0x20, 0x3c, 0x3c, 0x20, 0x28, 0x58, + 0xe5, 0xb1, 0x2d, 0x33, 0x29, 0xdf, 0xed, 0x2f, 0x34, 0x29, 0xc3, 0x01, 0x86, 0x23, 0xed, 0x1f, + 0x28, 0xaf, 0x01, 0xa3, 0x2a, 0x20, 0x1f, 0xf4, 0x30, 0x28, 0x6c, 0x6f, 0x3f, 0x01, 0xfb, 0xa8, + 0x29, 0x29, 0xad, 0xe3, 0x83, 0x66, 0xfd, 0x92, 0x5f, 0x8f, 0xe4, 0xa1, 0x69, 0x6e, 0x6e, 0xfd, + 0x83, 0x66, 0xfc, 0x00, 0xe8, 0xd2, 0x75, 0x63, 0x74, 0x75, 0x72, 0xef, 0xf2, 0xa1, 0x74, 0x72, + 0xae, 0xee, 0x83, 0x86, 0xf9, 0x84, 0x34, 0xfd, 0x12, 0x2e, 0xcf, 0x91, 0x6d, 0x42, 0xef, 0xb1, + 0x61, 0x6e, 0x74, 0x71, 0xf7, 0xb2, 0x6e, 0x69, 0x74, 0x6a, 0xfc, 0x07, 0xc5, 0x86, 0x26, 0xf5, + 0x93, 0x62, 0xd1, 0xfd, 0xd2, 0x66, 0x69, 0x72, 0x73, 0x74, 0xe4, 0xe0, 0x10, 0x21, 0xc2, 0x85, + 0xbc, 0xf8, 0xaa, 0x6f, 0x6e, 0x73, 0xf2, 0x60, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0xed, 0x38, + 0x74, 0x68, 0x65, 0xb5, 0x93, 0x69, 0x18, 0xe0, 0xb2, 0x61, 0x72, 0x65, 0x88, 0xf3, 0x83, 0xf8, + 0xf2, 0xd4, 0x20, 0x6c, 0x69, 0x6e, 0x6b, 0x3d, 0xe0, 0x00, 0xae, 0x86, 0x84, 0xfc, 0x06, 0xd4, + 0x84, 0x07, 0xf2, 0xe1, 0x6c, 0x69, 0x62, 0x6c, 0x7a, 0x34, 0x0d, 0xfb, 0xda, 0x61, 0x20, 0x44, + 0x4c, 0x4c, 0x59, 0xe0, 0x51, 0x62, 0x65, 0x6c, 0x6f, 0x77, 0x56, 0x03, 0x94, 0x82, 0xcb, 0xec, + 0xe6, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x49, 0xe0, 0x82, 0xbf, 0xe3, 0xc0, 0x74, 0x79, 0x70, + 0x65, 0x86, 0xfe, 0x04, 0x6d, 0xb6, 0x20, 0x7b, 0x20, 0xb0, 0xfe, 0xa1, 0x20, 0x74, 0x9d, 0xdf, + 0x9f, 0x5b, 0x84, 0xfe, 0x00, 0xca, 0x5d, 0x3b, 0x20, 0x7d, 0x9b, 0xfe, 0xa8, 0x3b, 0x0a, 0x86, + 0xfe, 0xd3, 0x72, 0x65, 0x73, 0x65, 0x74, 0xa5, 0xfd, 0x01, 0xed, 0x8e, 0xc2, 0xf8, 0x83, 0x8e, + 0xf4, 0x91, 0x69, 0x04, 0xef, 0x87, 0xe1, 0xfe, 0x0a, 0xb1, 0x87, 0xe1, 0xfe, 0x02, 0x5e, 0x81, + 0x6a, 0xf2, 0x0d, 0xa6, 0x29, 0x20, 0x28, 0xcf, 0x94, 0x2a, 0x43, 0xfe, 0x4a, 0x50, 0x74, 0x72, + 0x29, 0x74, 0x81, 0x22, 0xe2, 0x23, 0x74, 0x65, 0xcd, 0x82, 0x7e, 0xfb, 0x05, 0x8e, 0x82, 0x67, + 0xd8, 0x02, 0x79, 0x51, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0xf1, 0x0f, 0x7d, 0x05, 0x05, 0xb5, 0x35, + 0x66, 0x72, 0x65, 0xb7, 0xa2, 0x72, 0x65, 0x99, 0xfe, 0x91, 0x73, 0xda, 0xde, 0x84, 0xf1, 0xf6, + 0x83, 0x4c, 0xde, 0x81, 0xf7, 0xf9, 0x84, 0xe2, 0xfd, 0x91, 0x78, 0x63, 0xd9, 0x83, 0x69, 0xfe, + 0xa3, 0x20, 0x28, 0x58, 0xfe, 0x9a, 0x29, 0x60, 0xfe, 0x20, 0x74, 0x68, 0x32, 0x86, 0x6d, 0xfe, + 0xc5, 0x72, 0x61, 0x74, 0x68, 0xf9, 0xf6, 0xa5, 0x74, 0x68, 0xf4, 0xfd, 0x04, 0x7a, 0x02, 0xa3, + 0xc2, 0x54, 0x68, 0x65, 0x79, 0x05, 0xfe, 0x92, 0x6d, 0x8d, 0xfd, 0xb3, 0x75, 0x74, 0x75, 0x57, + 0xfb, 0xa1, 0x6f, 0x66, 0xe7, 0xfb, 0x82, 0xe5, 0xec, 0x02, 0x8e, 0x83, 0x0f, 0xdf, 0x01, 0xf4, + 0x0c, 0x2f, 0x00, 0x1a, 0x83, 0x0e, 0xfe, 0x09, 0xe9, 0x8f, 0xd9, 0xfe, 0x00, 0x89, 0xd4, 0xf0, + 0x06, 0xff, 0x86, 0xfe, 0xfe, 0x8f, 0x82, 0xfe, 0x1b, 0xff, 0x01, 0x6c, 0x6f, 0x61, 0x64, 0x44, + 0x69, 0x63, 0x74, 0xf9, 0xfd, 0x07, 0x01, 0xdf, 0x25, 0x20, 0x61, 0x13, 0x22, 0x64, 0x69, 0xe7, + 0xb2, 0x61, 0x72, 0x79, 0xbe, 0xf7, 0x02, 0x41, 0x88, 0x6b, 0xfc, 0x92, 0x41, 0x21, 0xf6, 0xa6, + 0x65, 0x76, 0x7a, 0xfa, 0x86, 0x34, 0xf2, 0xd1, 0x66, 0x6f, 0x72, 0x67, 0x6f, 0xd9, 0xf2, 0x93, + 0x2c, 0x8b, 0xfc, 0x17, 0x27, 0xb6, 0x13, 0x27, 0xdb, 0xd1, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x48, + 0xf6, 0x89, 0x51, 0xfe, 0xb3, 0x4c, 0x6f, 0x61, 0x79, 0xf9, 0x86, 0xf0, 0xe5, 0xc3, 0x30, 0x20, + 0x69, 0x73, 0x5c, 0xec, 0x22, 0x65, 0x64, 0xdd, 0x94, 0x52, 0x00, 0xf8, 0x09, 0x64, 0x94, 0x73, + 0x74, 0xfa, 0x83, 0xd4, 0xf8, 0x8e, 0x1c, 0xf8, 0xd0, 0x36, 0x34, 0x20, 0x4b, 0x42, 0xa3, 0xdf, + 0x83, 0xe5, 0xf9, 0x8a, 0xf8, 0xfe, 0x8f, 0xc9, 0xfe, 0x07, 0x8a, 0x93, 0xef, 0x08, 0x94, 0x82, + 0x0d, 0xfa, 0x01, 0xf0, 0x88, 0x7e, 0xeb, 0x02, 0x46, 0x8e, 0x3c, 0xef, 0x81, 0x8c, 0xfd, 0xb1, + 0x69, 0x6e, 0x75, 0x52, 0xfd, 0x86, 0x33, 0xfa, 0x84, 0x9b, 0xdb, 0x86, 0x52, 0xfb, 0xe3, 0x27, + 0x73, 0x72, 0x63, 0x27, 0x2c, 0xc5, 0xfb, 0x82, 0xbf, 0xfe, 0x82, 0x6a, 0xf5, 0x86, 0xac, 0xfe, + 0xae, 0x6c, 0x79, 0xb6, 0xf7, 0x49, 0x73, 0x20, 0x61, 0x73, 0x05, 0xa6, 0x74, 0x6f, 0x1d, 0xdf, + 0x8e, 0xe7, 0xde, 0x83, 0xfe, 0xfc, 0x88, 0xc7, 0xfa, 0x99, 0x50, 0x54, 0xfe, 0x06, 0xb0, 0x91, + 0x72, 0x21, 0xec, 0xb4, 0x73, 0x75, 0x6d, 0x3c, 0xe1, 0x94, 0x74, 0x3d, 0xfe, 0x01, 0xb4, 0x00, + 0x5c, 0x83, 0xbf, 0xd4, 0x95, 0x6e, 0x5b, 0xf4, 0x83, 0xb0, 0xfa, 0xdf, 0x27, 0x64, 0x73, 0x74, + 0x27, 0x0c, 0xf3, 0x0f, 0x84, 0xca, 0xda, 0x82, 0xdf, 0xf8, 0x83, 0x3c, 0xf1, 0x8f, 0x43, 0xe9, + 0x0c, 0xbf, 0x2c, 0x20, 0x63, 0xa2, 0xe0, 0x11, 0x82, 0xbb, 0xf7, 0x89, 0xdc, 0xe0, 0x05, 0x99, + 0x33, 0x6e, 0x6f, 0x74, 0xe4, 0xad, 0x69, 0x66, 0x7b, 0xda, 0x85, 0xed, 0xe0, 0xa3, 0x66, 0x69, + 0x04, 0xef, 0x0a, 0x3f, 0x84, 0xc1, 0xfd, 0x8e, 0x0a, 0xe1, 0x02, 0xb3, 0x89, 0x1c, 0xe1, 0xb1, + 0x74, 0x75, 0x72, 0x2d, 0xd5, 0x85, 0x1c, 0xe1, 0x8d, 0x60, 0xeb, 0x8e, 0x06, 0xfe, 0x8f, 0xa3, + 0xfd, 0x15, 0x00, 0x01, 0x86, 0x81, 0xf7, 0x86, 0x42, 0xeb, 0xab, 0x72, 0x63, 0x9f, 0xf7, 0x8f, + 0x3d, 0xed, 0x09, 0x89, 0x9d, 0xf8, 0xb5, 0x61, 0x76, 0x65, 0x21, 0xfc, 0xaf, 0x49, 0x66, 0xb8, + 0xfd, 0x04, 0x88, 0x03, 0xfe, 0x84, 0x55, 0xe3, 0x8b, 0x98, 0xfe, 0x85, 0x66, 0xfc, 0xd2, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x2e, 0xd9, 0xa8, 0x61, 0x74, 0xa9, 0xfa, 0x95, 0x20, 0x1b, 0xe7, 0x01, + 0x9c, 0x01, 0x90, 0x95, 0x20, 0xac, 0xfe, 0x10, 0x61, 0xf1, 0x81, 0xb1, 0xfe, 0x82, 0x10, 0xea, + 0x22, 0x20, 0x28, 0x23, 0x02, 0xed, 0x92, 0x42, 0x99, 0xfe, 0x81, 0x22, 0xdc, 0x84, 0xad, 0xf4, + 0x82, 0xcc, 0xf8, 0xd6, 0x64, 0x6f, 0x6e, 0x27, 0x74, 0xb2, 0xd8, 0x81, 0x9b, 0xf8, 0x8a, 0x66, + 0xfc, 0xd0, 0x28, 0x29, 0x20, 0x61, 0x66, 0x22, 0xfe, 0xa1, 0x77, 0x61, 0xfb, 0xef, 0x87, 0x8d, + 0xf8, 0x8a, 0x6c, 0xfb, 0xa8, 0x73, 0x20, 0x67, 0xdf, 0x31, 0x20, 0x75, 0x73, 0x51, 0xb3, 0x2c, + 0x20, 0x79, 0x13, 0xd7, 0x87, 0xc2, 0xf5, 0x02, 0xa2, 0x8f, 0x57, 0xfe, 0x09, 0xa9, 0x28, 0x29, + 0xa6, 0xfb, 0x02, 0x2a, 0x9d, 0x64, 0xa0, 0xfb, 0x8f, 0xa1, 0xfb, 0x07, 0x87, 0xf3, 0xfb, 0x95, + 0x2c, 0x26, 0xee, 0x83, 0x33, 0xe2, 0x8a, 0xde, 0xfd, 0x01, 0xac, 0x8f, 0x8f, 0xfb, 0x0d, 0x8d, + 0xcf, 0xfe, 0x86, 0x95, 0xfb, 0x89, 0x49, 0xee, 0x8f, 0xac, 0xf5, 0x2b, 0xbf, 0x44, 0x65, 0x63, + 0xaa, 0xf5, 0x32, 0x00, 0x29, 0x8f, 0xe5, 0xf5, 0x01, 0xe6, 0x44, 0x45, 0x43, 0x4f, 0x44, 0x45, + 0xf3, 0xf5, 0x2f, 0x20, 0x34, 0xdc, 0x07, 0x87, 0xbb, 0xf5, 0x0d, 0xc2, 0x8e, 0xb5, 0xf5, 0x86, + 0x1d, 0xe3, 0x99, 0x20, 0xac, 0xf5, 0x8e, 0xdf, 0xf6, 0x0a, 0xda, 0x8e, 0xd6, 0xf6, 0x0e, 0x9f, + 0x8e, 0xd0, 0xf6, 0x92, 0x44, 0xa7, 0xf2, 0xb3, 0x5f, 0x74, 0x3b, 0x51, 0xf5, 0x0e, 0xe6, 0x8f, + 0x4b, 0xf5, 0x24, 0x8f, 0x57, 0xf5, 0x09, 0x84, 0xd8, 0xe7, 0x03, 0x97, 0x38, 0x65, 0x74, 0x53, + 0x94, 0x93, 0x20, 0x22, 0xe3, 0x00, 0xea, 0xaf, 0x28, 0x29, 0x31, 0xf5, 0x04, 0x8f, 0x27, 0xf7, + 0x12, 0x85, 0x28, 0xf7, 0xe4, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0xef, 0xd8, 0xaf, 0x6f, 0x66, + 0x82, 0xf5, 0x03, 0x83, 0x67, 0xf5, 0x8f, 0x2d, 0xf7, 0x26, 0x8e, 0xd4, 0xfe, 0x87, 0xda, 0xe3, + 0x25, 0x74, 0x68, 0xbc, 0x9b, 0x2e, 0x01, 0xf6, 0x09, 0x10, 0x8f, 0xfb, 0xf5, 0x0e, 0x0e, 0x9f, + 0x8f, 0xf5, 0xf5, 0x05, 0x0a, 0xab, 0x8f, 0xef, 0xf5, 0x06, 0x2f, 0x2f, 0x0a, 0xb2, 0x00, 0x0f, + 0x67, 0x05, 0x8a, 0x5d, 0xe7, 0x0c, 0xff, 0x0f, 0x8c, 0x04, 0x1f, 0x28, 0xa4, 0x01, 0x08, 0x42, + 0x89, 0x55, 0xfa, 0x8e, 0x0a, 0xfe, 0x8f, 0x68, 0xf4, 0x09, 0x03, 0x13, 0x83, 0x05, 0xe9, 0x83, + 0x18, 0xe9, 0x83, 0x81, 0xda, 0x86, 0x5e, 0xfb, 0x84, 0xc3, 0xf6, 0xcf, 0x53, 0x65, 0x74, 0x74, + 0xc3, 0xf6, 0x08, 0xd5, 0x20, 0x28, 0x73, 0x61, 0x6d, 0x0c, 0xd7, 0x83, 0x30, 0xe4, 0x00, 0x7d, + 0x9b, 0x29, 0xac, 0xf6, 0x91, 0x31, 0x43, 0xfb, 0xbf, 0x4f, 0x4b, 0x2c, 0x3a, 0xfb, 0x07, 0x2f, + 0x65, 0x74, 0x0e, 0x10, 0x0d, 0xec, 0x8f, 0xb5, 0xf6, 0x1b, 0x96, 0x2a, 0x6b, 0xfa, 0x88, 0xe6, + 0xec, 0x00, 0x56, 0x86, 0x5d, 0xef, 0x86, 0x3e, 0xd2, 0x04, 0x26, 0x8b, 0xd7, 0xed, 0x01, 0x0a, + 0xd0, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0xc7, 0xd6, 0x85, 0x1f, 0xf7, 0xd5, 0x69, 0x6e, 0x20, 0x22, + 0x73, 0xfc, 0xfa, 0x91, 0x22, 0x91, 0xeb, 0x84, 0xb5, 0xed, 0x96, 0x50, 0xe1, 0xf8, 0x03, 0xa2, + 0x87, 0x9c, 0xf6, 0x91, 0x2a, 0x2c, 0xf7, 0x9f, 0x2a, 0xf6, 0xf8, 0x03, 0xb4, 0x74, 0x68, 0x65, + 0xf6, 0xf8, 0x86, 0x95, 0xec, 0x85, 0x65, 0xfe, 0xba, 0x68, 0x65, 0x79, 0x58, 0xee, 0xc0, 0x20, + 0x28, 0x75, 0x70, 0x4f, 0xfe, 0x86, 0x80, 0xf5, 0xa4, 0x20, 0x20, 0x49, 0xfc, 0x88, 0xb8, 0xfc, + 0x10, 0x72, 0x2d, 0x84, 0x78, 0xf7, 0x97, 0x73, 0xda, 0xdb, 0x8c, 0xa5, 0xf6, 0x84, 0x22, 0xe6, + 0x84, 0xf0, 0xfe, 0xd2, 0x2d, 0x20, 0x45, 0x78, 0x61, 0x48, 0xf1, 0xb4, 0x73, 0x61, 0x6d, 0xc6, + 0xda, 0x5a, 0x61, 0x73, 0x20, 0x65, 0x6e, 0xc4, 0x83, 0xe3, 0xe1, 0x03, 0xdd, 0xb1, 0x75, 0x70, + 0x64, 0xa5, 0xfc, 0x20, 0x72, 0x75, 0x3d, 0x12, 0x28, 0x1d, 0x89, 0xd4, 0xe9, 0x22, 0x61, 0x74, + 0xda, 0x06, 0x31, 0x11, 0x73, 0x55, 0x03, 0x53, 0x83, 0x70, 0xe2, 0x01, 0x51, 0x83, 0x28, 0xe1, + 0x07, 0x5f, 0x16, 0x26, 0x90, 0x07, 0x3d, 0x84, 0xe0, 0xec, 0xb2, 0x68, 0x61, 0x76, 0x06, 0xea, + 0x02, 0x66, 0x89, 0xf9, 0xdb, 0xc3, 0x76, 0x65, 0x72, 0x79, 0x03, 0xed, 0xb1, 0x20, 0x6f, 0x6e, + 0xb7, 0xf8, 0xa4, 0x20, 0x3c, 0xe4, 0xfe, 0x14, 0x2e, 0x27, 0x95, 0x4c, 0xa6, 0xe0, 0x00, 0xb9, + 0x0e, 0x30, 0xab, 0x62, 0x79, 0xcd, 0xe8, 0x41, 0x6d, 0x61, 0x78, 0x42, 0x34, 0xb3, 0x53, 0x69, + 0x7a, 0x50, 0xfb, 0x89, 0xca, 0xe8, 0x1b, 0x20, 0xe1, 0xb2, 0x69, 0x73, 0x20, 0xb3, 0xd4, 0x87, + 0x9b, 0xcb, 0xb1, 0x64, 0x65, 0x70, 0xb5, 0xd6, 0xb3, 0x6e, 0x74, 0x2e, 0x92, 0xe0, 0x8e, 0x1b, + 0xdd, 0xb3, 0x79, 0x6f, 0x75, 0x57, 0xe9, 0x99, 0x64, 0x24, 0xe3, 0x86, 0x15, 0xf7, 0x00, 0x66, + 0x85, 0x9d, 0xfd, 0x9f, 0x2e, 0xd0, 0xfe, 0x04, 0xa7, 0x65, 0x6e, 0xab, 0xec, 0x8d, 0x26, 0xfe, + 0xc0, 0x73, 0x20, 0x64, 0x6f, 0x85, 0xf6, 0x86, 0x00, 0xf7, 0x82, 0xe9, 0xeb, 0xc0, 0x79, 0x6e, + 0x63, 0x68, 0x47, 0xe9, 0xa3, 0x69, 0x7a, 0xf3, 0xea, 0x84, 0x42, 0xe2, 0x8f, 0x97, 0xfe, 0x20, + 0x8f, 0x9c, 0xfe, 0x0c, 0xe1, 0x5f, 0x41, 0x74, 0x20, 0x6c, 0x65, 0x01, 0xf7, 0x03, 0xe7, 0xc4, + 0x20, 0x2b, 0x20, 0x38, 0x26, 0xf7, 0x9a, 0x2b, 0xcb, 0xfe, 0x0f, 0x29, 0x7f, 0x97, 0x6c, 0xe2, + 0xfd, 0x0d, 0x87, 0x03, 0x54, 0xb2, 0x57, 0x68, 0x65, 0xa3, 0xeb, 0x83, 0x36, 0xf0, 0x8c, 0x74, + 0xc8, 0x01, 0x68, 0x86, 0x63, 0xe3, 0x93, 0x2c, 0x45, 0xf5, 0x92, 0x74, 0x32, 0xde, 0xa2, 0x73, + 0x74, 0x70, 0xd1, 0x33, 0x20, 0x6f, 0x66, 0xa9, 0x84, 0xdc, 0xf4, 0x89, 0x2a, 0xf5, 0x04, 0x99, + 0x86, 0xad, 0xe0, 0x86, 0x5f, 0xe3, 0x84, 0x04, 0xfc, 0x91, 0x69, 0x51, 0xeb, 0x83, 0xc7, 0xf5, + 0x8f, 0x26, 0xf8, 0x08, 0xaf, 0x28, 0x29, 0x62, 0xeb, 0x09, 0x85, 0xca, 0xf3, 0x8f, 0xab, 0xfa, + 0x17, 0x8f, 0x90, 0xd2, 0x3b, 0x8f, 0x0d, 0xe7, 0x06, 0x0f, 0x6a, 0x3a, 0x8e, 0xde, 0xe6, 0x89, + 0x72, 0xe3, 0x85, 0x79, 0xd8, 0x8f, 0x18, 0xfa, 0x02, 0xc2, 0x3a, 0x0a, 0x2a, 0x5f, 0xab, 0xfe, + 0x81, 0xe8, 0xf3, 0x8f, 0xe9, 0xf9, 0x10, 0xc9, 0x77, 0x6f, 0x72, 0x6b, 0x46, 0xdd, 0x01, 0xd2, + 0x83, 0xba, 0xe6, 0x95, 0x62, 0xf3, 0xe7, 0xaf, 0x6f, 0x66, 0x60, 0xfe, 0x04, 0x84, 0x58, 0xc7, + 0x82, 0x52, 0xdd, 0x8d, 0xf1, 0xfe, 0x98, 0x78, 0xd1, 0xf3, 0x05, 0x7f, 0x95, 0x79, 0xda, 0xeb, + 0xd0, 0x6e, 0x64, 0x2d, 0x61, 0x6c, 0x8f, 0xfc, 0x12, 0x2e, 0xea, 0x89, 0x24, 0xf3, 0xb3, 0x6e, + 0x6f, 0x72, 0x80, 0xfa, 0x8f, 0x34, 0xf7, 0x0f, 0x9f, 0x2e, 0xe2, 0xfd, 0x09, 0x07, 0x00, 0x8f, + 0x97, 0xd0, 0x3b, 0x8e, 0x65, 0xf8, 0x81, 0x89, 0xde, 0xa7, 0x72, 0x74, 0x66, 0xf8, 0x8f, 0xe2, + 0xfd, 0x0c, 0x06, 0x6a, 0x8f, 0xe5, 0xe4, 0x1d, 0x0f, 0x85, 0x1a, 0x8f, 0x32, 0xd6, 0x1c, 0xc0, + 0x4f, 0x62, 0x73, 0x6f, 0x63, 0xdf, 0x8f, 0xcb, 0xce, 0x22, 0x91, 0x2f, 0xf9, 0xcd, 0x00, 0x24, + 0x82, 0x2a, 0xfc, 0xb1, 0x57, 0x61, 0x72, 0xbd, 0xcc, 0x23, 0x73, 0x20, 0xe7, 0x96, 0x53, 0x25, + 0xe6, 0x45, 0x73, 0x65, 0x20, 0x77, 0xe4, 0xb1, 0x6d, 0x65, 0x73, 0xa9, 0xf4, 0x93, 0x73, 0x33, + 0xe2, 0xc0, 0x70, 0x72, 0x6f, 0x62, 0x9f, 0xf9, 0x81, 0xdd, 0xfb, 0x83, 0xf1, 0xfb, 0x84, 0xde, + 0xc9, 0xb7, 0x6c, 0x6c, 0x79, 0xec, 0xde, 0xa1, 0x74, 0x6f, 0x4e, 0xc5, 0x12, 0x61, 0xf5, 0x13, + 0x68, 0xd3, 0x83, 0x58, 0xf8, 0x65, 0x2d, 0x57, 0x6e, 0x6f, 0x2d, 0x64, 0x80, 0x10, 0x64, 0xf5, + 0xb3, 0x63, 0x6c, 0x61, 0x1d, 0xf0, 0x83, 0x32, 0xe2, 0xc3, 0x67, 0x63, 0x63, 0x0a, 0xc4, 0xdf, + 0xb0, 0x5f, 0x43, 0x52, 0xd8, 0xd8, 0x91, 0x45, 0xd1, 0xc6, 0xc0, 0x5f, 0x4e, 0x4f, 0x5f, 0xe8, + 0xc7, 0xd1, 0x4e, 0x49, 0x4e, 0x47, 0x53, 0x18, 0xf7, 0xe9, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, + 0x81, 0xd7, 0x98, 0x2e, 0x02, 0xc8, 0x83, 0x84, 0xd9, 0x88, 0x6b, 0xf2, 0xb0, 0x44, 0x45, 0x50, + 0x23, 0xc6, 0x35, 0x41, 0x54, 0x45, 0xbb, 0x81, 0x6b, 0xda, 0xe2, 0x42, 0x4c, 0x4f, 0x43, 0x4b, + 0x2e, 0x69, 0xd5, 0x30, 0x69, 0x66, 0x6e, 0xd2, 0x0f, 0xd5, 0x0d, 0x34, 0x0a, 0x23, 0x20, 0xac, + 0x0f, 0xd7, 0x1c, 0xb5, 0x47, 0x43, 0x43, 0xfc, 0xca, 0x81, 0x20, 0xc8, 0xe0, 0x47, 0x4e, 0x55, + 0x43, 0x5f, 0x5f, 0x73, 0xf5, 0x83, 0xde, 0xca, 0x03, 0xef, 0x83, 0xca, 0xca, 0x31, 0x5f, 0x5f, + 0x29, 0xc4, 0x4d, 0x69, 0x66, 0x20, 0x28, 0xc7, 0xd0, 0x3e, 0x3d, 0x20, 0x34, 0x30, 0x30, 0xd5, + 0xa5, 0x7c, 0x7c, 0xd4, 0xc7, 0x81, 0xd5, 0xc7, 0x44, 0x6c, 0x61, 0x6e, 0x67, 0xcb, 0x0f, 0x64, + 0x04, 0xa4, 0x44, 0x28, 0x44, 0xfe, 0x10, 0x29, 0x97, 0xa3, 0x61, 0x74, 0xbe, 0xc3, 0xd7, 0x65, + 0x5f, 0x5f, 0x28, 0x28, 0x7d, 0xfe, 0x06, 0xdd, 0x12, 0x29, 0xb7, 0x2f, 0x65, 0x6c, 0x80, 0x05, + 0x3f, 0x33, 0x30, 0x31, 0x96, 0x2d, 0x07, 0x9f, 0x07, 0x3b, 0x22, 0x4d, 0x53, 0x9b, 0x0f, 0xa6, + 0x16, 0x81, 0xd1, 0xfd, 0x81, 0xf4, 0xdf, 0x0f, 0x40, 0x01, 0x05, 0xa2, 0x23, 0x73, 0x65, 0xb4, + 0x84, 0x9b, 0xc6, 0x04, 0xe2, 0xa4, 0x28, 0x22, 0x59, 0xfe, 0xb7, 0x3a, 0x20, 0x59, 0x23, 0xc7, + 0x87, 0xd3, 0xf6, 0x0c, 0x8c, 0x83, 0xcb, 0xc8, 0xb4, 0x68, 0x69, 0x73, 0xe8, 0xd4, 0x3f, 0x65, + 0x72, 0x22, 0x5d, 0x12, 0x02, 0x7d, 0x82, 0x57, 0xc6, 0x84, 0x50, 0xc6, 0xbf, 0x20, 0x2f, 0x2a, + 0xd2, 0xfd, 0x0d, 0x93, 0x20, 0x3f, 0xc7, 0x85, 0x2e, 0xfc, 0x8f, 0x8c, 0xd8, 0x04, 0x84, 0x60, + 0xfc, 0x83, 0xf4, 0xf9, 0x07, 0xea, 0x83, 0x50, 0xc0, 0xc5, 0x6c, 0x61, 0x6e, 0x6e, 0x2c, 0xeb, + 0xb5, 0x61, 0x72, 0x74, 0x4f, 0xc6, 0x88, 0x3f, 0xfc, 0x90, 0x62, 0xbd, 0xde, 0xe0, 0x31, 0x33, + 0x31, 0x20, 0x61, 0x70, 0x43, 0xfc, 0xb2, 0x78, 0x69, 0x6d, 0xb9, 0xed, 0x8f, 0x28, 0xec, 0x02, + 0x8b, 0x02, 0xf2, 0x8f, 0x7f, 0xd7, 0x1e, 0x8f, 0x19, 0xd9, 0x02, 0x84, 0x81, 0xcc, 0x82, 0xb4, + 0xe3, 0x8f, 0x2e, 0xd7, 0x28, 0x03, 0xc1, 0x0f, 0x9c, 0x06, 0x81, 0xa7, 0xfb, 0x82, 0xb9, 0xd8, + 0x0b, 0x41, 0x8f, 0xab, 0xd8, 0x26, 0x0f, 0x35, 0x13, 0x07, 0x8b, 0x0f, 0x99, 0x26, 0x0f, 0x1f, + 0x18, 0x87, 0x63, 0xf7, 0x0d, 0x1f, 0x8f, 0xb0, 0xe6, 0x00, 0x86, 0x84, 0xea, 0x0f, 0x0f, 0x3e, + 0x06, 0x7b, 0x0f, 0x89, 0x0c, 0x8f, 0xff, 0xfe, 0x32, 0x8b, 0xf0, 0xfc, 0xaf, 0x64, 0x65, 0xee, + 0xfc, 0x18, 0xd2, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0xe9, 0xfc, 0x89, 0x41, 0xd8, 0x87, 0xd4, 0xfb, + 0x81, 0x2d, 0xf5, 0x83, 0x93, 0xf1, 0xa2, 0x6e, 0x6f, 0xc1, 0xec, 0xc2, 0x65, 0x72, 0x20, 0x62, + 0xeb, 0xe4, 0xb8, 0x64, 0x2e, 0x0a, 0x15, 0xf7, 0x82, 0x33, 0xe6, 0x87, 0xe0, 0xd0, 0x81, 0x05, + 0xf5, 0x86, 0xdb, 0xd0, 0xb2, 0x61, 0x74, 0x69, 0x7d, 0xc4, 0x94, 0x79, 0xb1, 0xbc, 0xc5, 0x6c, + 0x64, 0x65, 0x72, 0xbd, 0xc2, 0x96, 0x73, 0x1f, 0xf2, 0xb7, 0x5a, 0x34, 0x5f, 0xd0, 0xd9, 0x8c, + 0x9d, 0xd3, 0x8f, 0x9d, 0xf7, 0x02, 0x0f, 0xc8, 0x03, 0x00, 0xf5, 0x81, 0xfd, 0xd4, 0x97, 0x6e, + 0xe3, 0xfe, 0x0e, 0xb6, 0x8e, 0xbd, 0xf6, 0x81, 0x6a, 0xd9, 0x8c, 0xea, 0xfe, 0x82, 0xab, 0xdf, + 0x91, 0x6f, 0xb3, 0xeb, 0x85, 0xdf, 0xf3, 0x95, 0x77, 0x62, 0xf8, 0xa3, 0x64, 0x3b, 0x29, 0xd9, + 0x81, 0xfd, 0xfa, 0x82, 0x56, 0xf8, 0x02, 0x06, 0x85, 0xe5, 0xe1, 0xa1, 0x72, 0x65, 0x2a, 0xf8, + 0x82, 0xd3, 0xfa, 0x02, 0xe3, 0xa6, 0x2e, 0x0a, 0xbd, 0xda, 0xa1, 0x68, 0x69, 0x94, 0xd2, 0x89, + 0x54, 0xc8, 0x85, 0xd9, 0xdc, 0x83, 0xe8, 0xf3, 0x83, 0xbc, 0xf7, 0x08, 0x86, 0x83, 0x85, 0xfe, + 0xa1, 0x69, 0x67, 0x66, 0xfb, 0x01, 0xd5, 0x81, 0x8e, 0xef, 0xa2, 0x74, 0x61, 0x0a, 0xc1, 0xb5, + 0x6f, 0x6e, 0x65, 0x31, 0xfe, 0x00, 0xec, 0x8c, 0xc4, 0xfe, 0x8f, 0x8e, 0xf6, 0x15, 0x88, 0xc1, + 0xfd, 0x07, 0xb5, 0x8f, 0xb1, 0xfe, 0x0f, 0x0f, 0xa3, 0x14, 0xaf, 0x69, 0x73, 0x56, 0xfd, 0x06, + 0x8c, 0x43, 0xfa, 0x85, 0x6a, 0xdd, 0x8a, 0x58, 0xf4, 0x92, 0x3b, 0x30, 0xeb, 0x34, 0x6e, 0x65, + 0x77, 0xe3, 0x8b, 0xdc, 0xc1, 0x94, 0x77, 0x35, 0xf2, 0x86, 0xc5, 0xf6, 0x01, 0xad, 0x8c, 0xa3, + 0xf9, 0x11, 0x22, 0xbf, 0x8e, 0xd3, 0xe2, 0x95, 0x29, 0xb3, 0xe0, 0xb2, 0x22, 0x29, 0x20, 0x7e, + 0xfb, 0x07, 0xdd, 0x85, 0x6a, 0xe7, 0x83, 0x98, 0xfc, 0x84, 0x69, 0xe7, 0x1f, 0x3b, 0xa9, 0x20, + 0x82, 0xee, 0xeb, 0x88, 0x2e, 0xd3, 0x03, 0xdd, 0x87, 0x28, 0xd3, 0x0f, 0xac, 0x04, 0x89, 0xcf, + 0xe0, 0x0e, 0xad, 0x03, 0xac, 0x07, 0xdd, 0x08, 0xad, 0x8b, 0xb8, 0xfa, 0x0f, 0x3f, 0x15, 0x8a, + 0x8b, 0xe7, 0x0b, 0x96, 0x23, 0x20, 0x20, 0xbb, 0x03, 0xdd, 0x57, 0x6c, 0x69, 0x64, 0x65, 0x49, + 0xb2, 0x8a, 0x4a, 0xfa, 0xaf, 0x29, 0x3b, 0x3a, 0xfe, 0x05, 0x8f, 0x89, 0xf2, 0x01, 0x8f, 0x60, + 0xfe, 0x05, 0x8f, 0x33, 0xf3, 0x08, 0x0e, 0x67, 0x8f, 0x05, 0xf3, 0x05, 0x82, 0xae, 0xf9, 0xb0, + 0x50, 0x72, 0x65, 0x61, 0xc0, 0xdf, 0x36, 0x34, 0x6b, 0x20, 0x28, 0xc5, 0xe4, 0x06, 0x8f, 0x05, + 0xf3, 0x0e, 0x85, 0x02, 0xd5, 0x0f, 0x5a, 0x0e, 0x8e, 0x23, 0xf3, 0x0e, 0x5a, 0x0f, 0xd2, 0x02, + 0x0f, 0x5a, 0x1c, 0x8e, 0xfc, 0xf0, 0x8f, 0x11, 0xbd, 0x0a, 0x95, 0x7d, 0x1c, 0xbd, 0x0f, 0x00, + 0xee, 0x00, 0x00, +}; + +static unsigned char buf[18830]; + +int main() { + + unsigned long cksum = adler32(0, NULL, 0); + + decompress_lzsa1(compressed, buf); + cksum = adler32(cksum, buf, 18830); + + return cksum == 0xf748269d ? 0 : 1; +} diff --git a/test/val/lzsa2.c b/test/val/lzsa2.c new file mode 100644 index 000000000..5babbb38c --- /dev/null +++ b/test/val/lzsa2.c @@ -0,0 +1,438 @@ +/* + !!DESCRIPTION!! lzsa2 decompression + !!ORIGIN!! cc65 regression tests + !!LICENCE!! BSD 2-clause + !!AUTHOR!! Colin Leroy-Mira +*/ + +#include <zlib.h> +#include <stdio.h> +#include <lzsa.h> + +/* The sample data is the original lz4.h, compressed with: + * lzsa -r -f 1 lz4.h lz4.lzsa1 + * + * We reused lz4.h from the LZ4 test to have a matching adler32 sum. + */ +static const unsigned char compressed[] = { + 0x19, 0xda, 0x2f, 0x2a, 0x0a, 0x20, 0x20, 0x20, 0x4c, 0x5a, 0x34, 0x20, 0x2d, 0x20, 0x46, 0x61, + 0x73, 0x74, 0x5a, 0xf8, 0x04, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x20, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0xd9, 0x1a, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x20, 0x46, 0x69, 0x6c, 0x65, 0x81, 0x38, 0x43, 0x6f, 0x70, 0x79, 0x2a, 0x19, + 0x67, 0x68, 0x74, 0x20, 0x28, 0x43, 0x29, 0x20, 0x32, 0x30, 0x31, 0x31, 0x2d, 0xd4, 0x39, 0x35, + 0x2c, 0x20, 0x59, 0x61, 0x6e, 0x6e, 0x13, 0x5a, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x0a, 0xd6, 0x38, + 0x00, 0x42, 0x53, 0x44, 0x39, 0xac, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, + 0x63, 0x65, 0x6e, 0x18, 0x6f, 0x28, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x48, 0x2e, + 0xb6, 0x01, 0x60, 0x38, 0x6f, 0x75, 0x72, 0x3a, 0x00, 0x5c, 0x13, 0x72, 0x67, 0x2f, 0x6c, 0xdd, + 0x1d, 0x73, 0x2f, 0x62, 0x73, 0x64, 0x2d, 0x92, 0x5b, 0x2e, 0x70, 0x68, 0x70, 0x29, 0xb2, 0x5b, + 0x80, 0x52, 0x65, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x5d, 0x5a, 0x6e, 0x64, + 0x20, 0xa8, 0x08, 0x69, 0xa7, 0x44, 0xbd, 0x23, 0x08, 0x62, 0x89, 0x59, 0x61, 0x72, 0x79, 0x20, + 0x66, 0x6f, 0x72, 0x6d, 0x73, 0x2c, 0x20, 0x77, 0x3d, 0x08, 0x20, 0xac, 0x23, 0x48, 0x6f, 0xc9, + 0x42, 0xba, 0xf0, 0x6d, 0x6f, 0x48, 0x66, 0x75, 0x4a, 0x61, 0xbc, 0x50, 0x2c, 0x20, 0xd4, 0xf8, + 0x10, 0x65, 0x20, 0x70, 0x65, 0x20, 0x48, 0x74, 0xa2, 0x20, 0xb2, 0x19, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0xb0, 0x30, 0x74, 0x68, 0x01, 0xd2, 0x20, 0x49, 0x66, 0x32, 0x50, 0x6f, 0x77, 0x9d, 0x69, + 0x67, 0xe2, 0x48, 0x6e, 0x81, 0x42, 0xcb, 0xea, 0x73, 0x43, 0xb6, 0x40, 0x19, 0xe9, 0x3a, 0x04, + 0xf6, 0x4f, 0x2a, 0x61, 0x48, 0x73, 0x89, 0x4e, 0x66, 0x68, 0x48, 0x63, 0x8d, 0x00, 0xd2, 0x71, + 0x6d, 0x75, 0x9a, 0x68, 0x72, 0xe6, 0x48, 0x61, 0x50, 0x43, 0xa6, 0x50, 0x61, 0x62, 0x94, 0x01, + 0x65, 0xb4, 0x43, 0x65, 0x79, 0x00, 0x6e, 0x6f, 0x74, 0xdc, 0x09, 0x2c, 0x48, 0x69, 0xc1, 0x49, + 0x6c, 0x14, 0x41, 0xbc, 0x47, 0x88, 0x4b, 0x20, 0x47, 0x6b, 0x6f, 0x61, 0xef, 0x50, 0x63, 0x6c, + 0xae, 0x48, 0x6d, 0x3e, 0x4f, 0x2e, 0x77, 0x02, 0x77, 0x69, 0x6e, 0xea, 0x3f, 0x46, 0x77, 0x41, + 0x14, 0x51, 0x64, 0x75, 0x63, 0x46, 0x74, 0x63, 0x25, 0xee, 0x63, 0x47, 0x74, 0x25, 0x62, 0x99, + 0x45, 0x1a, 0x38, 0x17, 0x64, 0x6f, 0x63, 0x75, 0x48, 0x6e, 0x0a, 0x66, 0x4d, 0x69, 0x2f, 0x72, + 0x29, 0x6f, 0x3d, 0x20, 0x28, 0x6d, 0x6d, 0x20, 0x7f, 0x10, 0x69, 0x61, 0x6c, 0x73, 0x89, 0x64, + 0x51, 0x00, 0x13, 0x43, 0x75, 0x67, 0x14, 0x84, 0xfb, 0xb2, 0x39, 0x54, 0x48, 0x49, 0x53, 0x20, + 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0xa8, 0x19, 0x50, 0x52, 0x4f, 0x56, 0x49, + 0x44, 0x45, 0x44, 0x20, 0x42, 0x59, 0x16, 0x00, 0x38, 0xa4, 0x43, 0x4f, 0x50, 0x59, 0x52, 0x49, + 0x47, 0x48, 0x54, 0x20, 0x48, 0x4f, 0x4c, 0x39, 0x35, 0x52, 0x53, 0x20, 0x41, 0x4e, 0x44, 0xf0, + 0x4e, 0x54, 0x18, 0x17, 0x42, 0x55, 0x54, 0x4f, 0x42, 0xb9, 0x59, 0x02, 0x22, 0x41, 0x53, 0xc3, + 0x2a, 0x22, 0x21, 0x06, 0x40, 0xc6, 0x50, 0x45, 0x58, 0xb8, 0x30, 0x45, 0x53, 0x00, 0x04, 0x00, + 0x59, 0x12, 0x4d, 0x50, 0x4c, 0x49, 0xb0, 0x41, 0x9f, 0x08, 0x52, 0x10, 0x54, 0x49, 0x46, 0x28, + 0x2c, 0x38, 0x2d, 0x4e, 0x43, 0x4c, 0x55, 0x44, 0x08, 0x47, 0xa1, 0x41, 0xbc, 0xbb, 0x20, 0x4e, + 0x4f, 0x54, 0xfa, 0xc6, 0x40, 0xd5, 0x51, 0x49, 0x54, 0xd6, 0x40, 0xab, 0x4a, 0x2c, 0x85, 0x47, + 0xc6, 0x48, 0x20, 0x57, 0x50, 0x20, 0x4d, 0x7c, 0x11, 0x43, 0x48, 0x80, 0x38, 0x41, 0x42, 0x49, + 0x1b, 0x53, 0x54, 0x59, 0x71, 0x08, 0x46, 0x4a, 0x4e, 0x91, 0x48, 0x46, 0x71, 0x42, 0x2b, 0xf8, + 0x7a, 0x41, 0x20, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x55, 0x4c, 0x00, 0x5a, 0x46, 0x55, 0x52, + 0x50, 0x4f, 0x53, 0x45, 0x20, 0x20, 0x48, 0x44, 0x5c, 0x28, 0x43, 0x50, 0x49, 0x4d, 0x21, 0x49, + 0x2e, 0x7c, 0x41, 0x88, 0x40, 0x57, 0x50, 0x56, 0x45, 0xb5, 0x50, 0x20, 0x53, 0xaf, 0x57, 0x4c, + 0x4c, 0x11, 0x44, 0x43, 0x6f, 0x50, 0x4f, 0x57, 0xaa, 0x49, 0x52, 0x3c, 0x47, 0x11, 0x60, 0xe7, + 0x49, 0x45, 0x56, 0x40, 0x82, 0x52, 0x4c, 0x45, 0x91, 0x43, 0x12, 0x50, 0x44, 0x49, 0x13, 0x52, + 0x43, 0x54, 0x29, 0x27, 0xb1, 0x69, 0x43, 0xbb, 0x41, 0x5b, 0x72, 0x4c, 0x2c, 0x9a, 0x30, 0x53, + 0x50, 0x0a, 0x29, 0x49, 0x61, 0xe8, 0x68, 0x45, 0xf1, 0x41, 0x6a, 0x55, 0x59, 0x2c, 0xa9, 0x40, + 0x67, 0x51, 0x51, 0x55, 0x7e, 0x01, 0x13, 0x59, 0x20, 0x44, 0x41, 0x4d, 0x41, 0x47, 0x1c, 0x6f, + 0x28, 0xe2, 0xf2, 0x09, 0x62, 0x5b, 0x50, 0x43, 0x55, 0x8c, 0x49, 0x4d, 0x44, 0x62, 0xed, 0x18, + 0x53, 0x55, 0x42, 0x53, 0x54, 0x10, 0x08, 0x55, 0x7b, 0x26, 0x20, 0x47, 0x4f, 0x4f, 0x44, 0x89, + 0x68, 0x53, 0x55, 0x68, 0x56, 0xfe, 0x60, 0x93, 0x48, 0x3b, 0x53, 0x73, 0x4f, 0x53, 0xc7, 0x08, + 0x55, 0x43, 0x73, 0x70, 0x44, 0x41, 0xc4, 0x42, 0x81, 0x62, 0x15, 0x61, 0xc7, 0x32, 0x53, 0x3b, + 0xa1, 0x28, 0x42, 0x6b, 0x49, 0xbd, 0x20, 0xd4, 0x70, 0x54, 0x45, 0x57, 0xf0, 0x55, 0x50, 0x40, + 0x63, 0x69, 0x29, 0x0c, 0x69, 0x57, 0xde, 0x61, 0xff, 0x49, 0x41, 0xc2, 0x6b, 0x44, 0x05, 0x00, + 0x62, 0x1e, 0x84, 0xf4, 0xc4, 0x50, 0x45, 0x4f, 0x36, 0x62, 0x6c, 0x75, 0x4c, 0x49, 0x72, 0x60, + 0x47, 0xe8, 0x57, 0x20, 0x61, 0xca, 0xf4, 0x49, 0x4e, 0x6a, 0x41, 0xe7, 0x28, 0x53, 0xc0, 0xe8, + 0x49, 0x47, 0xd9, 0x44, 0x02, 0x61, 0xb3, 0x62, 0x09, 0x47, 0x10, 0x20, 0x68, 0x20, 0x3b, 0x08, + 0x47, 0x30, 0x47, 0x45, 0x8c, 0x4a, 0x45, 0x3d, 0x4a, 0x4f, 0xb7, 0x70, 0x57, 0x49, 0x44, 0x69, + 0x29, 0x43, 0x00, 0x42, 0xdf, 0x4b, 0x49, 0x83, 0x81, 0xff, 0xb4, 0x41, 0x89, 0x4a, 0x55, 0x04, + 0x62, 0x4b, 0x42, 0x26, 0x63, 0x51, 0x8f, 0x46, 0x31, 0x5e, 0x6b, 0x2c, 0x22, 0x40, 0xcc, 0xe8, + 0x46, 0x51, 0x44, 0x56, 0xb9, 0x4e, 0x44, 0xd0, 0x69, 0x50, 0xee, 0x4c, 0x49, 0x4f, 0x64, 0xc1, + 0x75, 0x43, 0x48, 0x82, 0xa4, 0x9d, 0x9a, 0x4e, 0x59, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, 0x61, + 0x80, 0xed, 0xa5, 0xf4, 0x63, 0x74, 0x28, 0x75, 0xa1, 0xfe, 0x99, 0x81, 0x3d, 0x4a, 0x3a, 0x94, + 0xaa, 0x2d, 0xee, 0x18, 0xa6, 0xdc, 0xf9, 0x5e, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0xb2, 0x3a, 0x20, 0x76, 0xa9, 0x73, 0xee, 0x75, 0xa9, 0x67, 0xe1, 0x99, 0x0d, 0x75, 0x62, 0x2e, + 0xff, 0x5f, 0xa1, 0x2f, 0x43, 0x79, 0x61, 0x6e, 0x34, 0x39, 0x37, 0x33, 0x2f, 0x6c, 0x7a, 0x34, + 0xc3, 0x28, 0x70, 0x1e, 0xa1, 0x64, 0xa2, 0xe3, 0xaa, 0x57, 0x75, 0x6d, 0xc8, 0x48, 0x72, 0xab, + 0x00, 0xb4, 0x5b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0xc1, 0x43, 0xde, 0x3b, 0x0c, 0x2f, + 0x23, 0x21, 0x42, 0xbc, 0xb8, 0xae, 0x63, 0x0a, 0x2a, 0x2f, 0x0a, 0x23, 0x70, 0x72, 0x61, 0x67, + 0x6d, 0x61, 0x20, 0x8e, 0xf9, 0xa5, 0x63, 0x65, 0x0a, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x64, 0x65, + 0x66, 0x69, 0x6e, 0x3a, 0x28, 0x5f, 0x5f, 0x63, 0x70, 0x6c, 0x75, 0x73, 0xe1, 0x99, 0x29, 0x0a, + 0x65, 0x78, 0xe8, 0xed, 0xb9, 0x6e, 0x20, 0x22, 0x43, 0x22, 0x20, 0x7b, 0x0a, 0x23, 0x65, 0x6e, + 0xed, 0x56, 0x92, 0x0a, 0x0a, 0x55, 0x51, 0x2a, 0x20, 0xb5, 0xb6, 0x2e, 0x68, 0xe4, 0x5f, 0x9f, + 0x73, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0xd4, 0x4e, 0x50, 0x66, 0x75, 0xa3, 0xa3, 0xed, 0x61, + 0x8b, 0x2c, 0xf8, 0x40, 0x2d, 0x08, 0x76, 0x35, 0x01, 0x7b, 0x60, 0x6c, 0x6c, 0x20, 0x62, 0x75, + 0x66, 0x66, 0x65, 0x72, 0xde, 0xf8, 0x72, 0x6f, 0x6c, 0x4a, 0x6f, 0xb9, 0x48, 0x67, 0x6e, 0xac, + 0x6d, 0xe1, 0xc9, 0x68, 0x2a, 0x8a, 0x40, 0x70, 0x69, 0x79, 0xb9, 0x40, 0x70, 0x32, 0x65, 0x64, + 0x30, 0x67, 0x65, 0xb1, 0x20, 0x8a, 0x74, 0xd0, 0xa6, 0x41, 0x71, 0x39, 0x2d, 0x6f, 0x70, 0x90, + 0x40, 0x01, 0x4f, 0x65, 0x92, 0x41, 0x49, 0x08, 0x64, 0x09, 0x48, 0x61, 0x44, 0x01, 0x20, 0x26, + 0x41, 0x8b, 0x73, 0x6e, 0x67, 0x9e, 0x49, 0x66, 0xad, 0x12, 0x65, 0x20, 0x87, 0xd0, 0x9f, 0x51, + 0x29, 0x2c, 0xa0, 0x42, 0x70, 0x63, 0x5c, 0x74, 0x6c, 0x65, 0x60, 0x60, 0xb5, 0x92, 0x62, 0x72, + 0xd3, 0x5b, 0x09, 0x68, 0x41, 0xa8, 0x91, 0x69, 0x74, 0xdd, 0xd3, 0x91, 0x77, 0x6e, 0xb0, 0x69, + 0x6d, 0x69, 0x48, 0x2c, 0x62, 0x20, 0x6d, 0x48, 0x61, 0x9b, 0x82, 0x24, 0x42, 0x0a, 0x43, 0xaa, + 0x51, 0x2e, 0x68, 0x73, 0xb1, 0x73, 0x74, 0xdf, 0x78, 0x69, 0x2e, 0xb0, 0x62, 0xec, 0x07, 0xff, + 0x0d, 0x70, 0x0a, 0x2a, 0x01, 0x48, 0x56, 0x42, 0x62, 0xe0, 0x4f, 0x0a, 0xce, 0x0d, 0x62, 0x54, + 0x64, 0x65, 0x42, 0x2e, 0xb1, 0x5f, 0x56, 0xef, 0xbc, 0xa1, 0xa4, 0x99, 0x1f, 0x5f, 0x4d, 0x41, + 0x4a, 0x1c, 0x01, 0xfd, 0x0a, 0x31, 0xb2, 0x2f, 0x2a, 0xdd, 0xa1, 0x50, 0x20, 0x62, 0x01, 0x51, + 0x61, 0x6b, 0x04, 0x64, 0xd9, 0x92, 0x66, 0x61, 0x17, 0x41, 0x2e, 0x69, 0x67, 0x62, 0x4f, 0x20, + 0xb8, 0xf2, 0x00, 0xf4, 0x49, 0x4e, 0xef, 0x37, 0x80, 0xf3, 0xf9, 0xe8, 0x77, 0x68, 0x6e, 0xd4, + 0x4e, 0x2d, 0xaf, 0x4f, 0x29, 0xae, 0x70, 0x61, 0x70, 0x84, 0xb1, 0x69, 0x6c, 0xde, 0x87, 0x61, + 0x0b, 0x47, 0x62, 0xff, 0x45, 0x52, 0x45, 0x4c, 0x45, 0x41, 0x53, 0x45, 0xf1, 0x74, 0x77, 0x71, + 0x73, 0x2c, 0x03, 0x50, 0x67, 0x2d, 0xce, 0x11, 0x78, 0x65, 0xa5, 0x21, 0x9a, 0x4d, 0x64, 0x65, + 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6e, 0x47, 0xb2, 0xf1, 0x00, 0x99, 0x4e, 0x55, 0x4d, 0x42, 0xe9, + 0xba, 0x4f, 0x28, 0x00, 0x3a, 0x1e, 0x2a, 0x31, 0x30, 0x30, 0x57, 0x20, 0x2b, 0x2b, 0xa3, 0x04, + 0x47, 0x68, 0xb3, 0x51, 0x29, 0x0a, 0x31, 0x03, 0x6c, 0x76, 0x75, 0x7f, 0xbf, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x20, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x29, 0x3b, 0x33, 0x15, 0x7a, 0x0f, 0x54, + 0x75, 0x6e, 0x8e, 0x92, 0x70, 0x61, 0xeb, 0x61, 0x8a, 0x67, 0x2a, 0xff, 0x10, 0xa4, 0xbb, 0x63, + 0x2c, 0xb8, 0x0e, 0x4d, 0x45, 0x4d, 0xbc, 0xf0, 0x59, 0x5f, 0xa1, 0xe5, 0x3f, 0x32, 0x20, 0x3a, + 0x8b, 0x4d, 0xfc, 0x88, 0xa1, 0xb4, 0x68, 0x61, 0x44, 0xa3, 0xcd, 0xc7, 0x79, 0x75, 0x6c, 0x61, + 0x20, 0x3a, 0x20, 0x4e, 0x2d, 0x3e, 0x32, 0x5e, 0x4e, 0x20, 0x42, 0x79, 0x74, 0x2e, 0x99, 0x2f, + 0x28, 0x65, 0x78, 0x61, 0x6d, 0x67, 0x09, 0x73, 0x32, 0x68, 0x31, 0xfe, 0x00, 0x20, 0xd0, 0x18, + 0x4b, 0x42, 0x3b, 0xaa, 0xea, 0x32, 0xe8, 0x34, 0x29, 0x20, 0xea, 0x36, 0x32, 0x36, 0x34, 0x42, + 0x4c, 0x32, 0xdd, 0xe9, 0x4d, 0xbb, 0x65, 0x74, 0x63, 0x2e, 0x29, 0xff, 0x9a, 0x91, 0x6e, 0x63, + 0xce, 0xea, 0x73, 0x4f, 0x6d, 0x8e, 0x3c, 0xb2, 0x69, 0x6d, 0x89, 0x97, 0x65, 0x73, 0xb4, 0x80, + 0xaa, 0x72, 0xcc, 0x60, 0xab, 0x0a, 0xaa, 0x82, 0xc4, 0x5a, 0x4f, 0x64, 0xcd, 0xa2, 0xff, 0xb3, + 0x45, 0xc9, 0xa3, 0x90, 0x00, 0x0c, 0x60, 0x18, 0x91, 0x64, 0x75, 0x35, 0x29, 0x6f, 0x3c, 0x89, + 0x63, 0x8a, 0xa9, 0x65, 0xfa, 0x0f, 0x52, 0x63, 0x74, 0x24, 0x08, 0x44, 0x59, 0x5c, 0x61, 0x75, + 0x6c, 0x74, 0x20, 0x76, 0x61, 0x6c, 0xdf, 0xa1, 0xa9, 0x5a, 0x0b, 0x31, 0x34, 0x2c, 0x1c, 0x41, + 0x52, 0x91, 0x4b, 0x42, 0xe0, 0x50, 0x68, 0x69, 0xd0, 0x91, 0x20, 0x6e, 0xbb, 0x66, 0x89, 0x6c, + 0xcc, 0xa2, 0xf7, 0x77, 0x61, 0x54, 0x49, 0x6f, 0x55, 0x08, 0x74, 0x5c, 0x4f, 0x20, 0x78, 0x38, + 0x36, 0x20, 0x4c, 0x31, 0xad, 0x8f, 0x0a, 0x2d, 0x28, 0x67, 0xb9, 0x41, 0xab, 0x6f, 0x0a, 0x39, + 0xfe, 0x15, 0x72, 0x53, 0x69, 0xb4, 0x96, 0x20, 0x46, 0x4d, 0x67, 0x39, 0xff, 0x11, 0x87, 0xb5, + 0x0f, 0x66, 0xd4, 0x54, 0x5f, 0x64, 0x1f, 0x51, 0x28, 0x63, 0xb9, 0xaa, 0x74, 0x7f, 0xb5, 0x72, + 0x2a, 0xb9, 0xf1, 0x2d, 0x2c, 0xa1, 0xe4, 0xd1, 0x52, 0x74, 0x2c, 0x28, 0x25, 0x40, 0x83, 0x34, + 0x7a, 0x65, 0x81, 0x19, 0x6d, 0x61, 0x78, 0x44, 0x17, 0x02, 0x56, 0x29, 0x3b, 0xa5, 0x41, 0xae, + 0x47, 0xa3, 0x0f, 0x60, 0x93, 0xe8, 0x66, 0x47, 0xa5, 0x0c, 0xa7, 0xe2, 0xe4, 0x47, 0xa1, 0x63, + 0x07, 0x5f, 0x84, 0x11, 0x4f, 0x0a, 0x3e, 0xcd, 0x8c, 0x29, 0x52, 0x56, 0x20, 0x43, 0xce, 0x60, + 0x53, 0x4f, 0x27, 0x4e, 0x10, 0x9b, 0x27, 0x20, 0x62, 0xf0, 0x77, 0x10, 0x66, 0x72, 0xa5, 0xe0, + 0x2e, 0x06, 0x4a, 0x27, 0xc9, 0x64, 0x47, 0x91, 0x61, 0x6c, 0xec, 0x6b, 0x31, 0x64, 0x79, 0x81, + 0xdb, 0xe0, 0xaa, 0x61, 0x2d, 0x4a, 0x27, 0x01, 0x4d, 0x27, 0xce, 0xa3, 0xb5, 0x6c, 0x41, 0x01, + 0x20, 0x47, 0x05, 0x2a, 0x56, 0x27, 0x2e, 0x89, 0x86, 0x02, 0x82, 0xff, 0xd8, 0xb1, 0x67, 0x75, + 0x9c, 0x95, 0x6e, 0x74, 0xd1, 0xed, 0x1a, 0x73, 0x75, 0x63, 0x63, 0xa5, 0x57, 0x69, 0x66, 0xc5, + 0x7f, 0x04, 0x20, 0x3e, 0x3d, 0x71, 0x70, 0x42, 0x6f, 0x2d, 0x77, 0x64, 0x28, 0x98, 0x15, 0x4c, + 0x29, 0xa4, 0x51, 0x49, 0x74, 0x6e, 0x20, 0x30, 0x20, 0x72, 0x1f, 0x41, 0x3e, 0xb1, 0x61, 0x73, + 0x46, 0x69, 0x2c, 0xb5, 0xa1, 0xea, 0x06, 0x89, 0x27, 0xb2, 0x00, 0x4b, 0x62, 0x8e, 0xa1, 0xda, + 0x82, 0xad, 0x86, 0x60, 0xd7, 0x8a, 0x74, 0xaf, 0x45, 0xc8, 0x8b, 0x66, 0xad, 0x7b, 0x86, 0x25, + 0xa2, 0xd1, 0x17, 0x77, 0x6e, 0x6f, 0x93, 0x67, 0xff, 0x0d, 0x45, 0x03, 0x89, 0x20, 0xc0, 0x82, + 0xd4, 0xa2, 0x57, 0x6d, 0x69, 0x06, 0x50, 0x64, 0x67, 0xac, 0xa3, 0xcf, 0xb2, 0xa7, 0x9e, 0x42, + 0x20, 0xb1, 0x6f, 0x70, 0xe0, 0xad, 0x49, 0x69, 0x87, 0x71, 0x64, 0x69, 0xd5, 0xbb, 0x6c, 0x79, + 0x2a, 0xd5, 0xc6, 0x47, 0x8e, 0x41, 0xd2, 0x61, 0x64, 0x62, 0xef, 0x70, 0x7a, 0x65, 0x86, 0x44, + 0x6a, 0x4a, 0x41, 0x4c, 0x82, 0xf2, 0x90, 0x99, 0x65, 0x71, 0x75, 0x65, 0x6e, 0xfc, 0x97, 0x65, + 0x9b, 0x83, 0x7c, 0x00, 0x7f, 0x43, 0xd2, 0xb3, 0x6e, 0x6f, 0x8c, 0x74, 0x69, 0x64, 0xa3, 0x89, + 0x54, 0xa1, 0x2e, 0x47, 0xab, 0xa9, 0x6e, 0xea, 0x7a, 0xa1, 0x6c, 0x72, 0x72, 0x69, 0x2f, 0xa1, + 0xaa, 0x69, 0xa9, 0x73, 0x8c, 0x67, 0x57, 0x5f, 0xa0, 0x5c, 0xe9, 0x6e, 0x62, 0x34, 0x26, 0x0a, + 0x46, 0x14, 0x44, 0xde, 0x87, 0x10, 0x2f, 0x87, 0x2a, 0x2e, 0x89, 0x20, 0x4a, 0x68, 0x4d, 0x62, + 0x61, 0x52, 0x70, 0x70, 0x70, 0xf6, 0x62, 0x02, 0xa6, 0xfe, 0x09, 0x84, 0x06, 0x5e, 0xbf, 0x41, + 0x58, 0x5f, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0xbf, 0xa7, 0xf9, + 0x3c, 0x94, 0x20, 0x3a, 0xcd, 0xb2, 0x6f, 0x72, 0xea, 0x9c, 0x89, 0x74, 0x62, 0x84, 0xfe, 0xd0, + 0x55, 0x6f, 0x66, 0x67, 0x46, 0x15, 0x8b, 0x28, 0xc6, 0xa4, 0xaf, 0x2b, 0x97, 0x62, 0x65, 0x88, + 0x9a, 0x4e, 0x29, 0xa2, 0xa2, 0x0d, 0xf0, 0x75, 0x72, 0x6b, 0x3a, 0xa8, 0xac, 0x6e, 0xef, 0x05, + 0x94, 0x6f, 0x66, 0x32, 0x63, 0xfc, 0x61, 0xcd, 0x63, 0x40, 0x47, 0x9e, 0x7e, 0x60, 0xda, 0x48, + 0x63, 0xde, 0xf0, 0x73, 0x61, 0x81, 0x65, 0x52, 0x3c, 0x3d, 0x5a, 0x68, 0x4f, 0xd5, 0x53, 0x70, + 0x75, 0x58, 0x46, 0xa1, 0x06, 0xff, 0x61, 0xd3, 0x89, 0x30, 0x63, 0xa7, 0xc5, 0xef, 0xbf, 0x3f, + 0x61, 0x69, 0x6c, 0x73, 0x0a, 0x0a, 0x2d, 0xaf, 0xa6, 0x95, 0xa7, 0xf6, 0x4a, 0x00, 0x55, 0x61, + 0x18, 0x43, 0x59, 0x01, 0x30, 0x63, 0x69, 0x53, 0x63, 0xf4, 0x66, 0xff, 0x02, 0x47, 0xcf, 0x2c, + 0xa4, 0x7e, 0x61, 0x22, 0x66, 0xbf, 0x47, 0xb4, 0xee, 0x46, 0xc1, 0x83, 0x79, 0x94, 0x69, 0x6e, + 0x9f, 0xf8, 0x66, 0x1b, 0x67, 0xbb, 0x07, 0x77, 0x2e, 0x0a, 0xbf, 0xf2, 0x09, 0x4f, 0x64, 0x88, + 0x63, 0xba, 0x47, 0x98, 0xa7, 0x67, 0xb5, 0x47, 0x50, 0x7a, 0x67, 0xaf, 0x4f, 0x49, 0x50, 0xbf, + 0x86, 0x28, 0x68, 0x6c, 0x6c, 0x89, 0x67, 0xda, 0x9c, 0x00, 0x5b, 0x1d, 0x75, 0x67, 0x68, 0x2c, + 0x7e, 0xaa, 0x64, 0x6b, 0x70, 0x77, 0x69, 0xd3, 0xa3, 0xf8, 0xaa, 0x83, 0x78, 0x6b, 0x6f, 0x54, + 0x01, 0xa8, 0x48, 0x20, 0x7f, 0x68, 0x72, 0x61, 0x84, 0xfc, 0x5f, 0x27, 0x28, 0x3c, 0x30, 0x29, + 0x2e, 0x96, 0x62, 0xda, 0xa6, 0xbd, 0x62, 0x71, 0x73, 0x74, 0xfd, 0x6a, 0x6d, 0xc5, 0xa9, 0x64, + 0x21, 0x8a, 0x63, 0xf8, 0x3d, 0xe8, 0x6d, 0x82, 0x33, 0x81, 0xdf, 0x1c, 0xa7, 0x66, 0x42, 0x47, + 0x91, 0x46, 0x7e, 0x42, 0x88, 0x66, 0xd2, 0xa9, 0x61, 0xff, 0x9b, 0x49, 0x67, 0x43, 0xb5, 0x76, + 0x65, 0x3d, 0x47, 0x89, 0x2f, 0xa7, 0x6f, 0x99, 0xab, 0x69, 0x7c, 0x45, 0x8f, 0x48, 0x61, 0xc8, + 0x82, 0xbe, 0x94, 0xa7, 0xcd, 0x0c, 0xa9, 0x76, 0x23, 0xa1, 0x8c, 0xfc, 0x40, 0x38, 0x10, 0x78, + 0x70, 0x81, 0xbd, 0x54, 0x82, 0xb4, 0x5a, 0x0b, 0x63, 0x6c, 0x75, 0x0c, 0x42, 0x63, 0x50, 0x69, + 0x63, 0xbe, 0xb4, 0x75, 0x73, 0xee, 0x5f, 0x47, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x1d, + 0xaf, 0x74, 0xfc, 0x0e, 0x65, 0xdd, 0xa7, 0xf8, 0x0e, 0x47, 0xdf, 0x10, 0x37, 0x69, 0x6e, 0x1b, + 0x82, 0x08, 0xa7, 0xdf, 0x9b, 0x16, 0x99, 0x2c, 0x41, 0x64, 0x76, 0x61, 0x6e, 0xc5, 0xa7, 0xdf, + 0x99, 0x1a, 0xa6, 0xde, 0x17, 0x87, 0xca, 0x61, 0x5e, 0x53, 0x49, 0x5a, 0x45, 0x2c, 0x1b, 0x2f, + 0x30, 0x78, 0x37, 0x45, 0x30, 0xa4, 0xbc, 0xef, 0xa0, 0xf8, 0xf8, 0x6d, 0x31, 0x31, 0x33, 0x20, + 0x39, 0x32, 0x39, 0x20, 0x32, 0x85, 0x55, 0x47, 0xb7, 0x60, 0x9b, 0x43, 0x4f, 0x4d, 0x85, 0x97, + 0xba, 0x42, 0x4f, 0x55, 0x4e, 0x44, 0x28, 0x69, 0x73, 0xf9, 0x39, 0x81, 0xae, 0x89, 0x28, 0xda, + 0xec, 0xb1, 0x69, 0x67, 0xf4, 0x2e, 0x29, 0x61, 0xf7, 0x3e, 0x20, 0x47, 0x7e, 0xaf, 0xa9, 0x3f, + 0x15, 0x56, 0x3a, 0x20, 0xd3, 0xe8, 0x2b, 0x05, 0xa1, 0x3a, 0x2f, 0x32, 0x35, 0x35, 0x8d, 0x40, + 0x80, 0xab, 0x29, 0x9b, 0x87, 0xd9, 0x68, 0xa6, 0xda, 0x9e, 0xac, 0x50, 0xba, 0xa3, 0xfc, 0x14, + 0x82, 0xfb, 0xb1, 0x69, 0x6d, 0xa7, 0x2a, 0x42, 0xbc, 0x83, 0x08, 0x42, 0x53, 0x87, 0x63, 0xf4, + 0x41, 0xde, 0x6e, 0x79, 0x54, 0x8a, 0x69, 0xfc, 0xa6, 0x70, 0x22, 0x77, 0x56, 0x82, 0x94, 0xf8, + 0x17, 0x61, 0x73, 0x65, 0x22, 0xa1, 0x2b, 0x81, 0xef, 0x5c, 0x48, 0x6f, 0x6f, 0x63, 0x52, 0x84, + 0xf8, 0x87, 0xd3, 0x5b, 0xa9, 0x69, 0xaf, 0xc5, 0x97, 0x29, 0x0a, 0x8c, 0xee, 0x93, 0x69, 0x6d, + 0x20, 0xa2, 0x7a, 0x38, 0xa1, 0x55, 0x82, 0xab, 0xf1, 0x84, 0xe4, 0xa6, 0xd9, 0x3e, 0x43, 0xd6, + 0x40, 0xa9, 0x89, 0x72, 0x4c, 0x82, 0xbf, 0x7b, 0xa7, 0x6c, 0xad, 0xaf, 0x73, 0x9a, 0x12, 0x7f, + 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x95, 0xad, 0x49, 0x29, 0x94, 0xa4, 0x80, 0xa6, 0x7d, 0x20, 0x42, + 0x97, 0x43, 0x5f, 0x53, 0x69, 0x6c, 0xb3, 0x08, 0x2d, 0xa9, 0x6d, 0xfb, 0x2e, 0x82, 0xdb, 0x44, + 0xa3, 0xb1, 0x28, 0x73, 0x99, 0xb3, 0x4f, 0x6b, 0x74, 0x43, 0xc7, 0xa4, 0xbc, 0xf5, 0x46, 0x8a, + 0x48, 0x4e, 0x14, 0x65, 0xc8, 0x87, 0x2a, 0xe6, 0x05, 0xa6, 0xdb, 0x07, 0x81, 0x8c, 0xb3, 0x65, + 0x6e, 0xc3, 0x6b, 0x47, 0x3d, 0x61, 0xf1, 0x87, 0xce, 0xb4, 0xb7, 0x72, 0x63, 0xe5, 0x0f, 0x63, + 0x99, 0x86, 0xdc, 0x12, 0xef, 0x6d, 0x87, 0xfa, 0x48, 0x87, 0xd8, 0x71, 0x66, 0x08, 0x65, 0x26, + 0x43, 0x7b, 0x67, 0x21, 0xfd, 0x03, 0x87, 0x90, 0xac, 0xaa, 0x2c, 0xf2, 0x64, 0x0b, 0x46, 0x3e, + 0xbd, 0x0e, 0x74, 0x6f, 0x6f, 0xe2, 0x48, 0x28, 0x32, 0x47, 0x7a, 0xa8, 0x89, 0x29, 0xf3, 0x82, + 0xba, 0x3d, 0x47, 0x18, 0x21, 0x5b, 0x45, 0x25, 0x87, 0xd9, 0xeb, 0x61, 0xc2, 0x87, 0xdc, 0x19, + 0xaa, 0x53, 0x96, 0x00, 0x7e, 0x67, 0x8d, 0xa2, 0xac, 0x0a, 0x6b, 0x74, 0x4a, 0xb3, 0x77, 0x73, + 0x42, 0x68, 0x65, 0x52, 0xab, 0x63, 0xe9, 0x74, 0x68, 0x22, 0x2a, 0x09, 0x63, 0x6b, 0x72, 0x33, + 0x69, 0x22, 0x6e, 0xa9, 0x63, 0x8c, 0xf6, 0x86, 0x5d, 0x4c, 0x65, 0x44, 0xab, 0x72, 0x83, 0xbc, + 0x47, 0xd7, 0x64, 0xa7, 0xa3, 0xea, 0x80, 0x65, 0x3b, 0x02, 0xa7, 0x51, 0xdc, 0x46, 0x90, 0xb4, + 0x73, 0x6f, 0x95, 0x21, 0x41, 0x51, 0x44, 0xba, 0xa7, 0xad, 0x3b, 0x85, 0xf6, 0xa4, 0xc5, 0x0e, + 0xb1, 0x74, 0x72, 0xae, 0x70, 0x2d, 0x6f, 0x01, 0x29, 0x2e, 0x78, 0xa2, 0x40, 0x82, 0xc9, 0xbb, + 0xa3, 0x89, 0x91, 0x74, 0x75, 0xe5, 0xf5, 0x85, 0x47, 0x89, 0x65, 0xab, 0x33, 0x83, 0x85, 0x42, + 0xbe, 0x74, 0x76, 0x65, 0x20, 0x84, 0x5d, 0x5b, 0x83, 0x8e, 0x8a, 0x72, 0xdc, 0x7e, 0x81, 0xe2, + 0x79, 0x1a, 0x2b, 0x7e, 0x33, 0x25, 0x84, 0xa4, 0xf5, 0xa5, 0xc9, 0x5c, 0x4f, 0x6e, 0x3e, 0x83, + 0xc0, 0x39, 0xbf, 0x22, 0x31, 0x22, 0xd0, 0x66, 0x65, 0xbb, 0x40, 0x5f, 0x51, 0x67, 0x75, 0x06, + 0x67, 0xb3, 0xec, 0x63, 0xe3, 0x6a, 0x56, 0xff, 0x8a, 0x73, 0x79, 0x8c, 0x30, 0xd7, 0x18, 0x8b, + 0x62, 0xb6, 0xb2, 0x6c, 0x61, 0xe9, 0xa0, 0x50, 0x62, 0x79, 0x91, 0xb1, 0x43, 0x43, 0x7b, 0xb2, + 0x52, 0x41, 0x75, 0x76, 0xb9, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0xf8, 0xbb, 0xb3, + 0x65, 0x65, 0x48, 0xb5, 0x63, 0x29, 0xaa, 0x96, 0xa3, 0x7f, 0x8e, 0x2e, 0xf8, 0xfb, 0x67, 0x21, + 0x8f, 0x20, 0xaf, 0x3a, 0x25, 0x06, 0x74, 0x67, 0x45, 0xa1, 0x9f, 0xa0, 0x87, 0xb5, 0xd7, 0x89, + 0x5f, 0x94, 0x91, 0x53, 0x74, 0xaf, 0xdd, 0x87, 0xac, 0x47, 0x87, 0xae, 0xc5, 0x40, 0xaa, 0xaa, + 0x6a, 0x44, 0x20, 0xed, 0xa4, 0x9c, 0x8c, 0x20, 0x7a, 0x5a, 0x81, 0x9d, 0x87, 0xa2, 0x98, 0x86, + 0x9f, 0x2d, 0x71, 0x73, 0x70, 0xed, 0x63, 0x74, 0x81, 0xa7, 0x47, 0xb1, 0x5d, 0x4a, 0x73, 0x92, + 0x64, 0x62, 0x94, 0x55, 0x73, 0xed, 0x82, 0xad, 0x74, 0x55, 0x6f, 0x66, 0x79, 0x42, 0xca, 0xb1, + 0x6b, 0x6e, 0x97, 0x29, 0x68, 0xeb, 0x70, 0x6d, 0x75, 0xfb, 0x45, 0xac, 0x86, 0x9b, 0xa7, 0xc1, + 0xe8, 0xea, 0x2c, 0x82, 0x46, 0x00, 0x06, 0x82, 0x7d, 0xbc, 0x49, 0x20, 0x9d, 0x94, 0x38, 0x2d, + 0x86, 0x8a, 0x62, 0xab, 0x79, 0x81, 0xc6, 0xa2, 0x9f, 0x47, 0x44, 0x49, 0x4b, 0x6d, 0xd6, 0x42, + 0x9b, 0x70, 0x79, 0x70, 0x77, 0x42, 0x44, 0x8f, 0x29, 0x09, 0x0e, 0xb5, 0x6e, 0x2c, 0xe7, 0x43, + 0xb9, 0xa9, 0x61, 0xa8, 0x89, 0x82, 0x66, 0x4c, 0x2a, 0x4f, 0x49, 0x27, 0x69, 0x67, 0xea, 0xc7, + 0x66, 0x39, 0x47, 0x37, 0x85, 0x82, 0x29, 0x06, 0x67, 0x8a, 0xe2, 0x57, 0x20, 0x28, 0x9c, 0x77, + 0x2c, 0x20, 0x08, 0xfe, 0x09, 0x86, 0xe2, 0x67, 0x09, 0xf1, 0x24, 0x4c, 0x64, 0xd1, 0x67, 0x0e, + 0xb2, 0x52, 0x65, 0x87, 0x6e, 0xac, 0x65, 0x6c, 0x70, 0x6f, 0x67, 0xe8, 0x89, 0x2c, 0xf7, 0x34, + 0x46, 0x13, 0x64, 0x12, 0x6b, 0x73, 0x76, 0xa3, 0x10, 0x02, 0x9d, 0x94, 0x70, 0x6f, 0x2f, 0x83, + 0x9a, 0x79, 0x87, 0x6d, 0x79, 0x87, 0x79, 0xfa, 0x03, 0x87, 0xc2, 0x59, 0x87, 0x79, 0x1e, 0x8a, + 0x74, 0x8f, 0x8f, 0x74, 0x90, 0x76, 0xa7, 0xab, 0xd3, 0xb3, 0x65, 0x69, 0x4d, 0xd2, 0x46, 0x3a, + 0xa5, 0x4a, 0xa1, 0x48, 0xad, 0x08, 0x69, 0x46, 0x7e, 0xa7, 0xa0, 0x85, 0x43, 0x81, 0x46, 0x9a, + 0x93, 0x69, 0x66, 0x9b, 0x9f, 0x87, 0x50, 0x5a, 0x8d, 0x0a, 0xd1, 0x89, 0x66, 0xb9, 0x52, 0xa7, + 0xe3, 0x39, 0x45, 0x9d, 0x92, 0x6c, 0x65, 0xf6, 0xa3, 0x3f, 0xc8, 0x47, 0x03, 0x0f, 0x87, 0xb1, + 0x30, 0x8f, 0x2a, 0x81, 0xa0, 0x50, 0x50, 0x74, 0x14, 0x8e, 0x3a, 0xe3, 0xd6, 0xa5, 0x8d, 0xa4, + 0x66, 0xa3, 0xa9, 0x69, 0x2b, 0x62, 0xed, 0x84, 0xf0, 0x1a, 0xbe, 0x61, 0x6e, 0x79, 0xaa, 0xf6, + 0x41, 0x1b, 0xab, 0x65, 0x0e, 0x67, 0xa4, 0x62, 0x57, 0x74, 0x6f, 0x54, 0x43, 0x92, 0x27, 0xfe, + 0xbf, 0x08, 0x4e, 0x65, 0x77, 0x19, 0x1a, 0xa7, 0xc3, 0x69, 0x95, 0x6f, 0x6c, 0xf4, 0xaf, 0x2e, + 0xd9, 0xf7, 0xb7, 0x4e, 0x62, 0xab, 0x73, 0xa7, 0xae, 0x7a, 0x67, 0x4f, 0x0a, 0xa7, 0x79, 0xfe, + 0x16, 0x86, 0x0d, 0x87, 0xfb, 0x70, 0xa7, 0x8f, 0x9e, 0x0e, 0x05, 0x36, 0x66, 0xa2, 0x23, 0x47, + 0x72, 0x6e, 0x87, 0x14, 0x3d, 0xb7, 0x64, 0x65, 0xc7, 0xd2, 0xa9, 0x6f, 0x47, 0x89, 0x69, 0xea, + 0x44, 0xa7, 0x5c, 0x55, 0x26, 0x84, 0x28, 0x9e, 0x62, 0x76, 0x8a, 0x66, 0xb6, 0xb7, 0x75, 0x6e, + 0xa1, 0xa3, 0xa3, 0x8a, 0xc8, 0xa7, 0x70, 0xf1, 0x09, 0x67, 0x3f, 0x87, 0xa3, 0x2a, 0xa6, 0xa3, + 0x79, 0xb5, 0x69, 0x6e, 0x05, 0x81, 0xba, 0xbf, 0x94, 0x64, 0x73, 0x30, 0x47, 0x9e, 0x6a, 0xaf, + 0x29, 0xe2, 0xfa, 0x6d, 0xaf, 0x44, 0x04, 0x89, 0x87, 0x5b, 0xfd, 0x02, 0xa2, 0x3e, 0x6b, 0x73, + 0xe2, 0x47, 0xdc, 0x1c, 0xa0, 0xa3, 0xf4, 0x69, 0x6e, 0x81, 0x77, 0xd0, 0x66, 0x8d, 0x87, 0x3a, + 0x2b, 0x84, 0xc6, 0xea, 0x6e, 0xaf, 0x3a, 0xa5, 0x75, 0x01, 0xbd, 0x82, 0xa8, 0x85, 0x4d, 0xa6, + 0x85, 0xfe, 0xa7, 0xe3, 0x30, 0x8a, 0x66, 0x84, 0x65, 0x8a, 0x72, 0x6c, 0x41, 0xd9, 0x44, 0x05, + 0x87, 0x47, 0x67, 0x47, 0x33, 0x4b, 0x93, 0x49, 0x74, 0x02, 0xa1, 0x1c, 0xe8, 0x8f, 0x74, 0x44, + 0x1c, 0x81, 0x90, 0x87, 0x8c, 0xe9, 0x47, 0xc6, 0x40, 0xba, 0x48, 0x6f, 0x77, 0xed, 0xe0, 0x8a, + 0x2c, 0xeb, 0x9c, 0x09, 0x64, 0x6f, 0x65, 0x04, 0x86, 0xdf, 0xd7, 0xa1, 0x47, 0x84, 0x99, 0xcd, + 0x44, 0x4a, 0x86, 0xcc, 0x00, 0xd7, 0x20, 0xe9, 0x6e, 0xa3, 0xdf, 0xe2, 0xa5, 0x08, 0x45, 0x6a, + 0x66, 0x42, 0x8f, 0x28, 0x90, 0xcc, 0xa4, 0xa5, 0x20, 0x47, 0x8b, 0xaa, 0x55, 0xe3, 0x71, 0x67, + 0xef, 0x83, 0x1e, 0xb7, 0x51, 0x72, 0x75, 0x47, 0x89, 0x64, 0x0b, 0xe8, 0x76, 0x00, 0x65, 0xa3, + 0x42, 0x00, 0xc4, 0x41, 0x9f, 0x4b, 0x28, 0xa7, 0x74, 0x74, 0x6f, 0x1b, 0xa3, 0x5e, 0x86, 0x66, + 0xdd, 0x4e, 0x61, 0xca, 0xa5, 0xf2, 0x8e, 0x29, 0xcc, 0x89, 0x45, 0x06, 0x87, 0x87, 0xf6, 0x1b, + 0x66, 0x37, 0x87, 0x37, 0x2a, 0x67, 0xba, 0x8d, 0x5f, 0x7b, 0xc7, 0x86, 0x54, 0x67, 0x20, 0x61, + 0x47, 0xd2, 0xb7, 0x20, 0x61, 0x88, 0xb1, 0x87, 0x61, 0x60, 0xa7, 0x65, 0xc9, 0xa8, 0x27, 0xe0, + 0x81, 0xea, 0x74, 0x83, 0x80, 0x87, 0x64, 0x09, 0x87, 0x89, 0x0c, 0x87, 0xde, 0x96, 0xa7, 0x6a, + 0x73, 0x86, 0xd7, 0x91, 0xa7, 0x10, 0x3c, 0x8b, 0x74, 0xcb, 0x96, 0x74, 0x6f, 0x8d, 0xa6, 0xa7, + 0xf3, 0x33, 0xa3, 0xf7, 0x64, 0x11, 0x69, 0x73, 0xdb, 0x23, 0xcd, 0x86, 0x3d, 0x84, 0x70, 0x65, + 0x44, 0x54, 0x09, 0x68, 0x91, 0x62, 0x65, 0x7b, 0x2a, 0x8a, 0x72, 0x3f, 0x86, 0xc5, 0x51, 0xaa, + 0x72, 0x37, 0x83, 0x06, 0x4c, 0x8f, 0x65, 0x79, 0x3a, 0xa2, 0x86, 0xa7, 0x8f, 0x18, 0x0f, 0xa1, + 0x60, 0xe1, 0x85, 0xa9, 0xa7, 0x8f, 0x1b, 0x28, 0xac, 0x4e, 0xfb, 0x86, 0xe9, 0x74, 0x45, 0x96, + 0xa6, 0x7c, 0x4f, 0x3c, 0x2f, 0xb7, 0xc9, 0x73, 0xdd, 0xc4, 0xb7, 0x6c, 0x64, 0xff, 0xcf, 0x87, + 0x83, 0x1c, 0x42, 0xc2, 0xaa, 0x73, 0x99, 0x83, 0x6f, 0x64, 0x07, 0x33, 0x9e, 0x41, 0x6c, 0x77, + 0x61, 0x79, 0x73, 0x2d, 0x80, 0x87, 0x07, 0x8d, 0x81, 0x08, 0x46, 0x21, 0x87, 0x7f, 0xe4, 0x7b, + 0xa7, 0x8e, 0x45, 0xaf, 0x66, 0x86, 0x42, 0x42, 0xa0, 0x45, 0xd5, 0xa6, 0x88, 0x3c, 0x46, 0xd6, + 0xa7, 0x39, 0x5e, 0x84, 0x6f, 0x87, 0xd1, 0x9b, 0x87, 0x79, 0x87, 0x87, 0x7d, 0xab, 0xa7, 0xd4, + 0xbd, 0xa7, 0xfe, 0x8d, 0x87, 0x4f, 0x55, 0x22, 0x67, 0x0c, 0x34, 0x87, 0x3f, 0xf4, 0x07, 0xa7, + 0x16, 0x44, 0xa7, 0x0d, 0xf4, 0x13, 0x63, 0x42, 0x61, 0x76, 0x87, 0x97, 0x33, 0x87, 0xfe, 0xb7, + 0x87, 0x5c, 0xf0, 0x1c, 0x81, 0x4c, 0xba, 0x09, 0x45, 0x41, 0x4d, 0x9e, 0x18, 0x8c, 0x5f, 0x55, + 0x36, 0x34, 0x20, 0x28, 0x28, 0x31, 0x20, 0x3c, 0x3c, 0xa7, 0x37, 0x11, 0x9a, 0x07, 0x2d, 0x33, + 0x29, 0xcf, 0x57, 0x34, 0x29, 0xc3, 0xea, 0x63, 0x01, 0x4f, 0x28, 0xaf, 0x94, 0x2a, 0x20, 0xa0, + 0x56, 0x59, 0x28, 0x6c, 0x6f, 0x3f, 0x02, 0xd2, 0x97, 0x29, 0x29, 0xad, 0x26, 0x84, 0x4a, 0xab, + 0x5f, 0x3f, 0x8f, 0x92, 0x69, 0x6e, 0x6e, 0xa4, 0x84, 0x47, 0x21, 0x91, 0x75, 0x63, 0x5a, 0x02, + 0xa3, 0xef, 0x20, 0xa8, 0xa2, 0xae, 0x84, 0xd6, 0x86, 0x85, 0x18, 0x4b, 0x2e, 0xcf, 0xaa, 0x6d, + 0x5f, 0x54, 0x69, 0x61, 0x26, 0x69, 0x3a, 0x8b, 0xb3, 0x69, 0x74, 0x6a, 0x47, 0xc5, 0x24, 0x86, + 0xab, 0x8c, 0x62, 0xc7, 0x6c, 0x91, 0x66, 0x69, 0x84, 0xa3, 0x1d, 0xe4, 0x49, 0x21, 0x81, 0xa6, + 0xbc, 0xb7, 0x6f, 0x6e, 0xa4, 0x73, 0xb1, 0x64, 0x69, 0x46, 0xad, 0x08, 0x74, 0x82, 0x52, 0x7f, + 0x47, 0xb5, 0xac, 0x69, 0x1a, 0x18, 0x08, 0x61, 0xa3, 0xaa, 0x73, 0xa4, 0xf8, 0xa1, 0x41, 0xd0, + 0xb5, 0x6e, 0x6b, 0x3d, 0x42, 0xae, 0xa6, 0x60, 0x68, 0x47, 0xd4, 0xa4, 0xa1, 0x07, 0xa2, 0x4b, + 0xa1, 0x07, 0xed, 0x00, 0xa2, 0x40, 0x4f, 0xbf, 0x44, 0x4c, 0x4c, 0x14, 0x59, 0xb1, 0x62, 0x65, + 0x67, 0xdf, 0x42, 0x56, 0x44, 0x0e, 0xa3, 0xcb, 0xa9, 0x65, 0x01, 0x7c, 0xb7, 0x64, 0x73, 0x49, + 0x02, 0x83, 0xbf, 0xa1, 0xad, 0x83, 0x69, 0x65, 0x49, 0x65, 0xe7, 0x73, 0x20, 0x7b, 0xb5, 0x04, + 0x8a, 0x74, 0x09, 0x9d, 0x6f, 0x5b, 0x33, 0x7f, 0x14, 0x5d, 0x3b, 0x20, 0x7d, 0x9b, 0x77, 0x3b, + 0x0a, 0x86, 0x26, 0x00, 0x81, 0x3f, 0xd0, 0x84, 0xa5, 0x01, 0x6d, 0xa7, 0xc2, 0x9b, 0xa4, 0x8e, + 0x8a, 0x69, 0x51, 0x78, 0x67, 0xe1, 0x47, 0xb1, 0x41, 0x67, 0x5b, 0x43, 0x5e, 0x82, 0x17, 0x6c, + 0x47, 0xa6, 0x57, 0x20, 0x28, 0x80, 0x3b, 0x6d, 0x2a, 0x43, 0x81, 0x7b, 0x4f, 0x29, 0x74, 0x42, + 0xa2, 0x22, 0x54, 0x74, 0x65, 0xcd, 0x84, 0x80, 0xdb, 0x66, 0x6f, 0xa2, 0x6f, 0x63, 0x24, 0x89, + 0x69, 0x58, 0xd1, 0x0a, 0x7a, 0x47, 0x7d, 0xed, 0x46, 0xb5, 0xe8, 0x66, 0x46, 0xb7, 0x00, 0x63, + 0x99, 0xaa, 0x73, 0x00, 0xda, 0xa5, 0xde, 0xa4, 0x0d, 0x4c, 0x82, 0xf7, 0x85, 0xf3, 0xe2, 0xca, + 0x78, 0xd8, 0xd7, 0x64, 0x69, 0x74, 0x20, 0x28, 0x58, 0x6f, 0x29, 0x60, 0x42, 0xd6, 0x20, 0xb1, + 0x66, 0x6d, 0x82, 0xa4, 0xae, 0x68, 0xc7, 0xf9, 0x20, 0x86, 0xf9, 0xf4, 0x45, 0x7a, 0x62, 0x57, + 0xa2, 0xeb, 0x6b, 0x79, 0x05, 0x41, 0x91, 0xa2, 0x3e, 0x81, 0x94, 0x74, 0x75, 0x57, 0x92, 0x6f, + 0x66, 0x56, 0x03, 0x83, 0x06, 0x43, 0x8e, 0x84, 0x0a, 0x0f, 0x22, 0x67, 0xac, 0x64, 0x41, 0x1a, + 0x64, 0x0e, 0x07, 0x39, 0x67, 0xd9, 0xa7, 0x93, 0xd4, 0x07, 0xf1, 0x66, 0xfe, 0x67, 0x82, 0xf3, + 0x15, 0x9a, 0x6c, 0x6f, 0x61, 0x64, 0x44, 0x69, 0x1f, 0x0b, 0x87, 0xf9, 0xe3, 0x42, 0xdf, 0x56, + 0x20, 0x61, 0x13, 0x12, 0x64, 0x69, 0xc2, 0xd6, 0xd5, 0x83, 0x1f, 0x0e, 0x46, 0x41, 0xa6, 0x6b, + 0xab, 0x41, 0xc5, 0x21, 0xb7, 0x65, 0x76, 0x25, 0x0a, 0xa5, 0x34, 0x83, 0x03, 0xe0, 0x92, 0x67, + 0x6f, 0x4c, 0xac, 0x2c, 0xc1, 0x7d, 0x4f, 0x27, 0xb6, 0x4b, 0x27, 0xdb, 0xc1, 0xd7, 0x1c, 0xea, + 0x6d, 0x00, 0xe3, 0x67, 0x51, 0x48, 0x4c, 0x61, 0x84, 0x43, 0x5d, 0xa6, 0xb0, 0x82, 0x37, 0x50, + 0xac, 0x73, 0x5c, 0xa1, 0x41, 0x17, 0xa3, 0x16, 0xa5, 0xa3, 0x6f, 0x47, 0x64, 0x8d, 0x73, 0x15, + 0x54, 0xa4, 0xae, 0xa7, 0x38, 0xec, 0x81, 0xe0, 0x14, 0x91, 0x4b, 0x42, 0xa3, 0x84, 0x64, 0xaa, + 0x67, 0xf8, 0x67, 0xc9, 0xf8, 0x01, 0x87, 0x93, 0x42, 0x67, 0xf8, 0x83, 0xd8, 0xe3, 0x22, 0x84, + 0x68, 0x7e, 0x66, 0xa3, 0x87, 0x3c, 0xac, 0x41, 0xc0, 0x81, 0x83, 0x8b, 0x75, 0xf1, 0x52, 0x86, + 0x53, 0x86, 0xa2, 0x1c, 0xa6, 0xfd, 0xa9, 0x27, 0x67, 0x48, 0x94, 0x27, 0x2c, 0xcc, 0x63, 0xbf, + 0xa4, 0xa3, 0xeb, 0x66, 0xac, 0xb7, 0x6c, 0x79, 0xb5, 0x83, 0x61, 0xf3, 0x6f, 0x73, 0x69, 0x96, + 0x74, 0x6f, 0x00, 0x1d, 0xa7, 0xe7, 0x9e, 0xa3, 0xc7, 0xef, 0x49, 0x24, 0x6f, 0x50, 0x54, 0x46, + 0xb0, 0xaa, 0x72, 0x60, 0xdc, 0x9d, 0x73, 0x75, 0x6d, 0x19, 0x3c, 0x6d, 0x74, 0x3d, 0x42, 0xb4, + 0x41, 0x5c, 0xc4, 0xd4, 0xbf, 0xae, 0x6e, 0x63, 0xa4, 0xe8, 0xb0, 0x91, 0x27, 0x64, 0xef, 0x87, + 0xaf, 0x0c, 0x09, 0xc5, 0xda, 0xca, 0x83, 0x02, 0xbf, 0xa4, 0xc7, 0x87, 0x5f, 0x43, 0x06, 0x61, + 0x8c, 0xa7, 0x1f, 0xa2, 0x0b, 0x83, 0xc1, 0xbb, 0xa7, 0xdc, 0x31, 0x45, 0x99, 0x82, 0xb3, 0x24, + 0x2a, 0x97, 0x69, 0x66, 0x14, 0x71, 0xa6, 0xed, 0x94, 0x66, 0x69, 0x84, 0x04, 0x47, 0x3f, 0x84, + 0xf1, 0xc1, 0x87, 0x0a, 0x91, 0x44, 0x97, 0x86, 0x1c, 0xa5, 0x21, 0x5e, 0x61, 0x80, 0x84, 0x1c, + 0x87, 0xf3, 0xb1, 0x67, 0x06, 0xef, 0x87, 0xa3, 0xf0, 0x0f, 0x41, 0x01, 0xa7, 0x7b, 0x00, 0xa5, + 0x7c, 0x22, 0x60, 0xa7, 0x7f, 0x56, 0x87, 0x46, 0xff, 0x00, 0xa7, 0x21, 0x51, 0xfe, 0x73, 0x61, + 0x76, 0x65, 0x97, 0x49, 0x66, 0xfd, 0xb8, 0x67, 0x03, 0x21, 0xa5, 0x7d, 0x67, 0x98, 0x5f, 0xa6, + 0x66, 0x91, 0x61, 0x76, 0x1e, 0xe6, 0xc3, 0xd9, 0x2e, 0xb7, 0x61, 0x74, 0xa9, 0x24, 0xae, 0x20, + 0x8f, 0x42, 0x9c, 0x42, 0x90, 0x6e, 0x20, 0xac, 0x09, 0x61, 0x86, 0x62, 0xb1, 0xa3, 0x10, 0x53, + 0x20, 0x28, 0x23, 0x03, 0x6f, 0x6b, 0x42, 0x99, 0xa2, 0x7f, 0xa5, 0xbd, 0xad, 0xa3, 0xa0, 0x68, + 0x64, 0xfd, 0xe8, 0x27, 0xc6, 0xd8, 0xb2, 0x82, 0x6f, 0x93, 0xa7, 0x66, 0x30, 0xa2, 0x17, 0x71, + 0x61, 0x66, 0x22, 0x92, 0x77, 0x61, 0x8d, 0xfb, 0xa7, 0x8d, 0x1e, 0x87, 0x6c, 0x40, 0x97, 0x73, + 0x20, 0x67, 0x03, 0x83, 0xe1, 0x42, 0x51, 0x4a, 0x2c, 0xa2, 0x62, 0x0f, 0x87, 0x82, 0x5d, 0x46, + 0xa2, 0x67, 0x57, 0xee, 0x97, 0x28, 0x29, 0xa6, 0x3e, 0x43, 0x2a, 0x8f, 0x64, 0xa0, 0x7e, 0x87, + 0xa1, 0xfe, 0x01, 0x87, 0xf3, 0x11, 0xae, 0x2c, 0x9f, 0xa4, 0x2e, 0x33, 0x86, 0x8f, 0x67, 0x66, + 0x0e, 0x87, 0x8f, 0xf7, 0x07, 0x67, 0xcf, 0x87, 0xe8, 0x95, 0x62, 0x16, 0x87, 0xbf, 0xac, 0x25, + 0x81, 0xab, 0x16, 0x87, 0xaa, 0xfb, 0x2c, 0x41, 0x29, 0x87, 0xa8, 0xa1, 0x38, 0x44, 0x45, 0x43, + 0x4f, 0xeb, 0x87, 0xa2, 0x0f, 0x57, 0x20, 0x34, 0xdc, 0x03, 0x86, 0xb3, 0xbb, 0x27, 0x7b, 0x87, + 0xb5, 0x92, 0x86, 0x09, 0x8f, 0x20, 0xb2, 0xac, 0xa7, 0xc9, 0xdf, 0x46, 0xda, 0xa7, 0xc8, 0xd6, + 0x47, 0x61, 0x7c, 0xa7, 0xd0, 0xe8, 0x8b, 0x44, 0xe7, 0xa1, 0xcb, 0xca, 0x84, 0x51, 0x27, 0x38, + 0x87, 0xbf, 0x4b, 0x1e, 0x87, 0xbf, 0x57, 0x03, 0x85, 0x4c, 0xd8, 0x63, 0xe5, 0xa5, 0xbe, 0x46, + 0x7a, 0x8c, 0x20, 0x25, 0x22, 0x21, 0x97, 0x28, 0x29, 0xbd, 0x31, 0x87, 0xcf, 0x27, 0x0c, 0x86, + 0xb2, 0x88, 0x61, 0x12, 0x81, 0x00, 0xc5, 0xd8, 0x4a, 0x97, 0x6f, 0x66, 0xbc, 0x82, 0x84, 0xbc, + 0x67, 0x87, 0x2d, 0xf2, 0x2a, 0x66, 0xba, 0x86, 0xda, 0x41, 0x05, 0x46, 0xbc, 0xaf, 0x2e, 0xc9, + 0x01, 0x46, 0x10, 0x87, 0xbf, 0xfb, 0x11, 0x46, 0x9f, 0x87, 0xbe, 0xf5, 0x47, 0xab, 0x5b, 0x87, + 0xef, 0xe9, 0x77, 0x2f, 0x0a, 0x0b, 0x47, 0x67, 0xe4, 0x87, 0x5d, 0x4f, 0x07, 0x6d, 0x47, 0x8c, + 0x4f, 0x28, 0xa4, 0xd6, 0x26, 0xa7, 0xe0, 0x55, 0x67, 0x0a, 0xbb, 0xa7, 0x68, 0xf5, 0x03, 0x44, + 0x13, 0x84, 0x05, 0x84, 0x56, 0x18, 0xa4, 0x81, 0xa7, 0xc2, 0x62, 0x63, 0xa1, 0xcc, 0x53, 0xd9, + 0xec, 0xa7, 0xce, 0xc3, 0xb1, 0x20, 0x28, 0x33, 0x37, 0xc6, 0xd7, 0x0c, 0xa4, 0x30, 0x41, 0x7d, + 0xaf, 0x29, 0xc5, 0xac, 0xaa, 0x31, 0xd0, 0xc4, 0x9f, 0x4f, 0x4b, 0x2c, 0xea, 0x3a, 0x47, 0x4b, + 0xae, 0x47, 0x0e, 0x27, 0x67, 0xa7, 0xcf, 0xb5, 0x15, 0xaf, 0x2a, 0xe2, 0x6b, 0xa6, 0x7b, 0xe6, + 0xa3, 0x69, 0xa6, 0x60, 0x5f, 0x67, 0xe3, 0x45, 0x26, 0x87, 0x75, 0xd7, 0x42, 0x0a, 0xa9, 0x6d, + 0x6f, 0x56, 0x89, 0x69, 0x01, 0xa6, 0xc2, 0xcf, 0xa9, 0x69, 0x2f, 0xae, 0x73, 0x96, 0xa8, 0x8a, + 0x22, 0x91, 0xa5, 0x3c, 0xa0, 0xaf, 0x50, 0x99, 0x07, 0x86, 0xc7, 0x46, 0xcd, 0x8a, 0x2a, 0xcd, + 0x2c, 0xaf, 0x2a, 0xf6, 0xc0, 0xfe, 0x74, 0x68, 0x65, 0xa6, 0x7a, 0x95, 0x66, 0x65, 0x81, 0xf1, + 0xa7, 0x84, 0x58, 0xa1, 0x3b, 0xaa, 0x6a, 0x70, 0x3d, 0x86, 0x80, 0x00, 0xfa, 0x85, 0x70, 0x87, + 0xa2, 0xe5, 0x69, 0x72, 0x4e, 0x85, 0xc1, 0x78, 0xcf, 0x73, 0xdb, 0xda, 0x87, 0x56, 0xb1, 0xa5, + 0x42, 0x22, 0x65, 0xf0, 0x9b, 0x2d, 0x20, 0x45, 0x78, 0x61, 0x94, 0x48, 0x62, 0x2e, 0x63, 0x13, + 0x62, 0x30, 0x57, 0x65, 0x6e, 0xc4, 0x84, 0x1f, 0xe3, 0x44, 0xdd, 0x40, 0x79, 0xaa, 0x64, 0xa5, + 0x51, 0x72, 0x75, 0x3d, 0x6b, 0x28, 0xea, 0x87, 0x53, 0xd4, 0x00, 0x22, 0x44, 0xb7, 0x46, 0x31, + 0x4a, 0x73, 0x55, 0x44, 0x53, 0xa4, 0x70, 0x42, 0x51, 0x83, 0x12, 0x28, 0x67, 0x7a, 0x4f, 0x26, + 0x90, 0x01, 0x47, 0x3d, 0xa5, 0x7c, 0xe0, 0x8a, 0x68, 0xeb, 0x20, 0xcb, 0xa4, 0x69, 0xc7, 0xdb, + 0xf9, 0x33, 0xa1, 0xb9, 0x8c, 0x79, 0x76, 0x03, 0xa1, 0x68, 0xa2, 0xd1, 0xb7, 0x75, 0x20, 0x3c, + 0xe4, 0x4d, 0x2e, 0x27, 0xae, 0x4c, 0xa6, 0x57, 0x61, 0x6e, 0x30, 0x95, 0xb7, 0x62, 0x79, 0xcd, + 0x3b, 0x83, 0xa9, 0x6a, 0x42, 0x51, 0x81, 0xba, 0xa7, 0xa4, 0x7d, 0xa7, 0x53, 0xca, 0x0f, 0x20, + 0x04, 0x84, 0xce, 0xd6, 0xa1, 0xed, 0xc3, 0xcb, 0x9b, 0xa5, 0x6a, 0x9e, 0x28, 0x70, 0x09, 0x64, + 0x81, 0xaa, 0x2e, 0x92, 0xc7, 0xdd, 0x1b, 0x9c, 0x82, 0x5c, 0x84, 0x52, 0x57, 0x8f, 0x64, 0x24, + 0x3c, 0x86, 0x15, 0xa2, 0xef, 0x42, 0x86, 0x9d, 0x6f, 0x2e, 0xd0, 0xc4, 0x63, 0x6f, 0x86, 0xad, + 0x67, 0x26, 0x7c, 0x89, 0x73, 0x01, 0x82, 0xbc, 0x4f, 0x86, 0x00, 0x83, 0x65, 0xe9, 0x50, 0x79, + 0x6e, 0xc4, 0x81, 0x47, 0xb4, 0x69, 0x7a, 0x22, 0x44, 0xa5, 0x42, 0x67, 0x97, 0xff, 0x1a, 0x67, + 0x9c, 0x06, 0x99, 0x00, 0x5f, 0x41, 0x74, 0x84, 0x82, 0xa3, 0x5e, 0x04, 0xa1, 0x84, 0x15, 0xad, + 0x38, 0x69, 0x6f, 0x2b, 0xac, 0x4f, 0x47, 0x29, 0x79, 0x8f, 0x6c, 0xf1, 0xe2, 0x67, 0xb0, 0x60, + 0xa5, 0x63, 0xe8, 0x57, 0x83, 0x69, 0x78, 0xa4, 0x36, 0xc7, 0xc8, 0x74, 0x62, 0x43, 0x68, 0xa6, + 0x66, 0x8b, 0x2c, 0xb0, 0x45, 0xa3, 0x55, 0xe9, 0x6c, 0xc3, 0xd1, 0x70, 0x81, 0xeb, 0xc4, 0x44, + 0xa9, 0xa5, 0xdc, 0x87, 0xb3, 0x2a, 0x65, 0x49, 0xa7, 0x11, 0xad, 0x86, 0x22, 0x5f, 0x85, 0x6e, + 0x8a, 0x69, 0x6b, 0x51, 0x84, 0xc7, 0xa7, 0xdf, 0x26, 0x02, 0x97, 0x28, 0x29, 0x6f, 0x62, 0x03, + 0x86, 0xae, 0xca, 0xa7, 0xab, 0xff, 0x11, 0xc7, 0xd2, 0x90, 0x36, 0x87, 0x4e, 0x0d, 0x47, 0x6a, + 0xf4, 0x3d, 0xa6, 0xde, 0x87, 0x23, 0x72, 0xc6, 0xd8, 0x79, 0xa7, 0xeb, 0x18, 0x89, 0x3a, 0xda, + 0xea, 0x63, 0xab, 0x82, 0xe8, 0x87, 0xdf, 0xe9, 0x09, 0x82, 0x23, 0xc9, 0xcf, 0x6b, 0xdd, 0x46, + 0x64, 0x4c, 0x62, 0xf4, 0x8e, 0x62, 0x4d, 0xf3, 0x77, 0x6f, 0x66, 0x60, 0xc5, 0xc6, 0x37, 0xc3, + 0xdd, 0x52, 0x67, 0xf1, 0x7a, 0x8f, 0x78, 0xd1, 0x26, 0x46, 0x7f, 0x8e, 0x79, 0xda, 0xf8, 0x0e, + 0x6e, 0x64, 0x2d, 0x81, 0x2b, 0x2b, 0x2e, 0x5a, 0x87, 0x24, 0x2e, 0xc2, 0xd3, 0x5e, 0xa4, 0x80, + 0x87, 0xcf, 0x34, 0x09, 0x8f, 0x2e, 0xff, 0xe2, 0x03, 0x47, 0x00, 0x1f, 0xc7, 0xd0, 0x97, 0x34, + 0xa7, 0xda, 0x65, 0xb0, 0x53, 0x74, 0xd8, 0x66, 0xef, 0x74, 0x87, 0xfe, 0xe2, 0x47, 0x6a, 0xff, + 0x18, 0x66, 0x07, 0x47, 0x85, 0x14, 0xc7, 0xce, 0xcd, 0xf1, 0x16, 0xf8, 0x4f, 0x62, 0x73, 0x6f, + 0xcf, 0x74, 0xce, 0xcb, 0xf6, 0x1c, 0xca, 0x2f, 0xcd, 0xf9, 0x41, 0x24, 0x83, 0x75, 0x48, 0x57, + 0x6b, 0xc2, 0xcc, 0xbd, 0x14, 0x73, 0x20, 0x34, 0xab, 0x53, 0x25, 0x85, 0x62, 0xdf, 0x2e, 0x77, + 0x81, 0x2b, 0xba, 0xa2, 0xa9, 0xab, 0x73, 0x2b, 0x33, 0xa2, 0xda, 0x89, 0x62, 0xde, 0x9f, 0x82, + 0xdd, 0x84, 0xe2, 0xf1, 0xc4, 0xc9, 0xde, 0x83, 0x1d, 0xa6, 0x02, 0xec, 0x83, 0x7b, 0x20, 0x3a, + 0x0b, 0x61, 0x4c, 0x68, 0xd3, 0xa4, 0x03, 0xba, 0x5e, 0x2d, 0x57, 0x6e, 0x6f, 0x2d, 0x64, 0x80, + 0x09, 0x64, 0xa9, 0xc1, 0xc4, 0x4e, 0xa4, 0x1d, 0xa4, 0x21, 0x32, 0xbc, 0x67, 0x63, 0x63, 0x0a, + 0x04, 0x6c, 0xda, 0x5f, 0x43, 0x52, 0x54, 0x5f, 0x53, 0x45, 0xc6, 0xd1, 0x9a, 0x97, 0x5f, 0x4e, + 0x4f, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x53, 0x00, 0xa8, 0x56, 0xc3, 0x10, 0xe8, + 0x75, 0xc7, 0xd7, 0x81, 0xcf, 0x2e, 0xc8, 0x02, 0x2a, 0xc4, 0xd7, 0x22, 0xa7, 0x6b, 0x26, 0x5e, + 0x44, 0x45, 0x50, 0x52, 0x45, 0x43, 0x41, 0x54, 0x45, 0xbb, 0x21, 0x74, 0x59, 0x46, 0x42, 0x4c, + 0x4f, 0x43, 0x4b, 0x2e, 0x07, 0xc2, 0xc8, 0x7e, 0xe9, 0x6e, 0x47, 0xd5, 0xff, 0x07, 0x40, 0xd9, + 0x4d, 0x20, 0xac, 0x47, 0xd7, 0x16, 0xde, 0x00, 0x47, 0x43, 0x43, 0xc9, 0xc6, 0xc2, 0xc8, 0x20, + 0x38, 0x47, 0x4e, 0x55, 0x87, 0xa9, 0x5f, 0xd4, 0xc4, 0xca, 0xc5, 0x04, 0x71, 0xc4, 0xc9, 0xf5, + 0x00, 0x49, 0x29, 0x9b, 0x82, 0xb6, 0x65, 0x4f, 0x28, 0xc7, 0x82, 0x7d, 0xb0, 0xd1, 0x34, 0x30, + 0xd5, 0x30, 0xd6, 0x7c, 0x7c, 0xc7, 0xd4, 0x41, 0xb5, 0x61, 0xc6, 0x55, 0x6e, 0x67, 0xcb, 0x47, + 0x64, 0x75, 0x44, 0x28, 0x44, 0x49, 0x29, 0x97, 0xd4, 0x61, 0x74, 0xc1, 0xd2, 0x08, 0x65, 0xa1, + 0x77, 0x28, 0x28, 0x7d, 0x47, 0xdd, 0x0e, 0x4b, 0x29, 0x82, 0x57, 0x65, 0x6c, 0x80, 0x5f, 0x0f, + 0x33, 0x30, 0x31, 0x96, 0x27, 0x47, 0x9f, 0x11, 0x47, 0x3b, 0x73, 0x4d, 0x53, 0xe2, 0x47, 0x3c, + 0xff, 0x10, 0x82, 0xd1, 0x82, 0x0a, 0xf4, 0x47, 0x40, 0x46, 0x41, 0x74, 0x73, 0x65, 0xf0, 0xc5, + 0xc6, 0x9b, 0x25, 0x1f, 0x75, 0x28, 0x22, 0x59, 0x8a, 0x3a, 0xda, 0xa6, 0xdc, 0x48, 0xa7, 0xd3, + 0x16, 0x67, 0xc8, 0xa2, 0x61, 0x27, 0xa3, 0x86, 0xc5, 0xd4, 0xe8, 0x7f, 0x0f, 0x65, 0x72, 0x22, + 0x99, 0x0c, 0x63, 0xbe, 0xc4, 0xc6, 0x57, 0x0b, 0x23, 0xcf, 0xc1, 0xd2, 0xf3, 0x87, 0x7e, 0xff, + 0x07, 0xcc, 0x20, 0xc7, 0x3f, 0xa6, 0x2e, 0xc7, 0xd8, 0x8c, 0xdf, 0xa5, 0x60, 0x85, 0xa5, 0xdd, + 0x26, 0x84, 0x62, 0x2c, 0xfd, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0x82, 0xef, 0x2b, 0xc6, 0xc6, 0x4f, + 0xa7, 0x3f, 0x20, 0xa9, 0x62, 0xbd, 0xb8, 0x0f, 0x31, 0x33, 0x31, 0x43, 0xe9, 0x70, 0xa1, 0xc7, + 0x05, 0x83, 0xb9, 0xa7, 0x7b, 0x28, 0xa7, 0xa5, 0x02, 0xc7, 0xd7, 0x7f, 0xfb, 0x18, 0xc7, 0xd9, + 0x19, 0xc5, 0xcc, 0x81, 0x83, 0x1f, 0xc0, 0xc7, 0xd7, 0x2e, 0x22, 0xa5, 0x1e, 0xb0, 0x47, 0x9c, + 0x82, 0xef, 0xa7, 0xc4, 0xd8, 0xb9, 0x07, 0x4f, 0xc7, 0xd8, 0xab, 0x20, 0x47, 0x35, 0xf1, 0x0d, + 0x47, 0x8b, 0x47, 0x99, 0xff, 0x20, 0x47, 0x1f, 0x12, 0xa7, 0x61, 0x97, 0x67, 0x60, 0x74, 0xa7, + 0xb0, 0x96, 0xa7, 0x84, 0x0f, 0x47, 0x0f, 0x39, 0x46, 0x7b, 0x47, 0x89, 0xfe, 0x33, 0x67, 0x1e, + 0xa7, 0xf5, 0xf0, 0xb7, 0x64, 0x65, 0xff, 0xee, 0x12, 0xb1, 0x20, 0x6e, 0xc5, 0xf5, 0xa3, 0x15, + 0xc7, 0xd8, 0x41, 0x3e, 0x87, 0x14, 0x1b, 0x82, 0x2d, 0x84, 0x92, 0x93, 0xb2, 0x6e, 0x6f, 0x47, + 0xa2, 0xb2, 0x99, 0x8a, 0x62, 0x4b, 0x85, 0x0c, 0x93, 0x86, 0x15, 0xa3, 0x21, 0xbe, 0xc7, 0xd0, + 0xe0, 0x83, 0xbd, 0x05, 0xc6, 0xd0, 0xdb, 0x81, 0x54, 0xc3, 0xc4, 0x7d, 0xc4, 0xd7, 0xe9, 0xc2, + 0xd8, 0xb4, 0x20, 0x1a, 0xc6, 0xc2, 0xbd, 0xad, 0x73, 0x1f, 0x63, 0xec, 0xc7, 0xd9, 0xd0, 0x16, + 0xc7, 0xd3, 0x9d, 0x87, 0xcb, 0x9d, 0x47, 0xc8, 0xca, 0x01, 0xc2, 0xd4, 0xfd, 0x6f, 0x6e, 0xe3, + 0x16, 0x47, 0xb6, 0xa7, 0xcb, 0xbd, 0x41, 0x38, 0x67, 0xea, 0x60, 0x83, 0xab, 0xaa, 0x6f, 0x2a, + 0x92, 0x86, 0xdf, 0xae, 0x77, 0xd9, 0x62, 0xd4, 0x64, 0x3b, 0xd9, 0x29, 0x82, 0xd0, 0xa3, 0xd1, + 0x56, 0x43, 0x06, 0x86, 0xe5, 0xb2, 0x72, 0x65, 0xd5, 0x2a, 0x83, 0x44, 0x03, 0x10, 0x62, 0xdc, + 0x85, 0x4e, 0xd2, 0x68, 0x69, 0xd2, 0x94, 0xc7, 0xc8, 0x54, 0x31, 0xc6, 0xdc, 0xd9, 0x84, 0xdf, + 0x84, 0xc2, 0xbc, 0x47, 0x86, 0x64, 0x85, 0x69, 0x69, 0xda, 0xab, 0x74, 0x83, 0x22, 0xa2, 0xea, + 0x92, 0x74, 0x61, 0xd9, 0x36, 0xa2, 0xdb, 0x66, 0x31, 0x21, 0x66, 0x67, 0xc4, 0xa7, 0xcf, 0x8e, + 0x0f, 0x87, 0xe2, 0xdf, 0x47, 0xb5, 0xbe, 0x67, 0xb1, 0x47, 0xa3, 0xfe, 0x0e, 0x97, 0x69, 0x73, + 0x74, 0xfe, 0x00, 0xa7, 0x43, 0x71, 0x85, 0xf3, 0xa7, 0x84, 0x41, 0xaa, 0x3b, 0x21, 0x8c, 0xc2, + 0xc2, 0x29, 0x05, 0xc7, 0xc1, 0xdc, 0x5a, 0xae, 0x77, 0x35, 0xa6, 0xad, 0x4e, 0x42, 0xad, 0xa7, + 0x3c, 0x62, 0x49, 0x22, 0xbf, 0xa7, 0xd3, 0x91, 0xae, 0x29, 0xb3, 0x28, 0x22, 0xbe, 0x83, 0x7e, + 0x47, 0xdd, 0x14, 0x86, 0x6a, 0xa4, 0xf4, 0x98, 0x85, 0x69, 0x4f, 0x3b, 0xa9, 0xf2, 0x1a, 0xa3, + 0x77, 0xc7, 0xd2, 0x65, 0x32, 0x43, 0x22, 0xc7, 0xd3, 0x28, 0x47, 0xac, 0xe1, 0xa6, 0xcf, 0x47, + 0xad, 0xa2, 0x46, 0xac, 0x46, 0xdd, 0x47, 0xad, 0xa7, 0xe5, 0x51, 0x47, 0x3f, 0xf3, 0x14, 0x86, + 0xf1, 0x47, 0x96, 0x4f, 0x01, 0x44, 0xbb, 0x44, 0x3f, 0xa9, 0x6c, 0xf1, 0x36, 0x6f, 0x49, 0xf1, + 0x87, 0xd4, 0xe3, 0x77, 0x29, 0x3b, 0x3a, 0xe7, 0xa7, 0x72, 0xae, 0x67, 0x60, 0x87, 0xaf, 0x33, + 0x06, 0x67, 0xaa, 0x7b, 0x47, 0xd2, 0x83, 0xd2, 0x39, 0x81, 0x46, 0x79, 0x33, 0x66, 0x69, 0x78, + 0x36, 0x34, 0x6b, 0x3e, 0xa7, 0xc5, 0xea, 0x87, 0x05, 0x93, 0xa7, 0xbe, 0xbd, 0x67, 0x65, 0x87, + 0xae, 0x23, 0x47, 0x5a, 0xeb, 0x47, 0xd2, 0x47, 0x5a, 0xf9, 0x10, 0xa7, 0xfc, 0xef, 0xc7, 0xbd, + 0x11, 0x04, 0xce, 0x7d, 0xbd, 0x1c, 0xe7, 0xf0, 0xe8, +}; + +static unsigned char buf[18830]; + +int main() { + + unsigned long cksum = adler32(0, NULL, 0); + + decompress_lzsa2(compressed, buf); + cksum = adler32(cksum, buf, 18830); + + return cksum == 0xf748269d ? 0 : 1; +} diff --git a/test/val/zx02.c b/test/val/zx02.c new file mode 100644 index 000000000..0c123f968 --- /dev/null +++ b/test/val/zx02.c @@ -0,0 +1,416 @@ +/* + !!DESCRIPTION!! zx02 decompression + !!ORIGIN!! cc65 regression tests + !!LICENCE!! BSD 2-clause + !!AUTHOR!! Colin Leroy-Mira +*/ + +#include <zlib.h> +#include <stdio.h> +#include <zx02.h> + +/* The sample data is the original lz4.h, compressed with: + * zx02 lz4.h lz4.zx02 + * + * We reused lz4.h from the LZ4 test to have a matching adler32 sum. + */ +static const unsigned char compressed[] = { + 0xa2, 0x2f, 0x2a, 0x0a, 0x20, 0x2e, 0x42, 0x4c, 0x5a, 0x34, 0x20, 0x2d, 0x20, 0x46, 0x61, 0x73, + 0x74, 0x15, 0xf9, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, + 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x4e, 0x4d, 0x4d, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x4e, 0x69, 0x6c, 0x65, 0x4a, 0x1d, 0x41, 0x43, 0x6f, 0x70, 0x79, 0x36, 0x67, 0x2b, + 0x68, 0x43, 0x28, 0x43, 0x29, 0x20, 0x32, 0x30, 0x31, 0x31, 0x2d, 0x09, 0xd0, 0x35, 0x2c, 0x20, + 0x59, 0x61, 0x6e, 0x6e, 0x3b, 0x4d, 0x6c, 0x4c, 0x74, 0x2e, 0x0a, 0x4d, 0x53, 0x42, 0x53, 0x44, + 0x3a, 0x3e, 0x15, 0x2d, 0x43, 0x6c, 0x61, 0x75, 0x73, 0x65, 0x20, 0x4c, 0x69, 0x63, 0x65, 0x0e, + 0x68, 0x39, 0x70, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x14, 0x00, 0x2e, 0x92, 0x25, 0x35, 0x6f, + 0x75, 0x72, 0x32, 0x29, 0x14, 0x72, 0x67, 0x2f, 0x6c, 0x33, 0x45, 0x96, 0x73, 0x2f, 0x62, 0x73, + 0x64, 0x2d, 0x19, 0x2d, 0x2e, 0x70, 0x68, 0x70, 0x29, 0x22, 0x9b, 0x99, 0x52, 0x65, 0x64, 0x69, + 0x52, 0x21, 0xf2, 0x62, 0x75, 0x94, 0x45, 0xd8, 0x14, 0x64, 0xaf, 0x53, 0x69, 0x14, 0x85, 0x48, + 0x23, 0xe0, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x0a, 0x66, 0x06, 0x72, 0x6d, 0x73, 0x2c, 0x77, + 0x05, 0x85, 0x20, 0x14, 0x24, 0x0f, 0x46, 0x52, 0x74, 0x8b, 0x21, 0x6d, 0x6f, 0x66, 0x15, 0xb4, + 0x61, 0x87, 0x56, 0x40, 0x56, 0x6c, 0x51, 0x06, 0x56, 0x3e, 0x74, 0x4c, 0xba, 0x12, 0x72, 0x6f, + 0x76, 0x11, 0x64, 0x11, 0x51, 0x5a, 0x3e, 0x09, 0x58, 0x36, 0x8e, 0x9a, 0x48, 0x6f, 0x8a, 0x6e, + 0x67, 0x15, 0x63, 0x5c, 0x70, 0x42, 0x69, 0x73, 0x92, 0x93, 0x60, 0xcc, 0x3a, 0xd3, 0x01, 0x19, + 0x2a, 0x3d, 0xe4, 0x4a, 0x99, 0x6f, 0x66, 0x2f, 0xd5, 0x74, 0xa6, 0x64, 0x5a, 0x56, 0xa4, 0x45, + 0x72, 0x64, 0x61, 0x98, 0x51, 0xb3, 0x88, 0x62, 0x47, 0xd6, 0x35, 0x76, 0x97, 0x41, 0x35, 0x6e, + 0x44, 0x72, 0x5c, 0x2c, 0x3d, 0x48, 0x90, 0x20, 0x6c, 0x51, 0x5e, 0x87, 0x69, 0xef, 0x67, 0x12, + 0x29, 0x84, 0x64, 0x50, 0x16, 0x63, 0xa2, 0x26, 0x12, 0x72, 0x2e, 0x6b, 0x11, 0x5c, 0x50, 0x2b, + 0xf6, 0x76, 0x11, 0x61, 0xd6, 0x2a, 0x75, 0x62, 0xda, 0x17, 0xd1, 0x81, 0x8b, 0x1d, 0x67, 0x17, + 0xe9, 0x58, 0x93, 0xcb, 0xd3, 0x28, 0x46, 0x6f, 0x63, 0x75, 0x22, 0x6e, 0x69, 0xea, 0x65, 0xc6, + 0x2f, 0x51, 0x04, 0x92, 0x33, 0x14, 0x0a, 0x6d, 0x26, 0x0a, 0x6d, 0x69, 0xd0, 0x77, 0x96, 0xed, + 0x68, 0x5d, 0xd1, 0x39, 0x58, 0x81, 0x87, 0xf6, 0xcc, 0x9b, 0xf9, 0x54, 0x48, 0x49, 0x53, 0x20, + 0x53, 0x4f, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x0a, 0x17, 0x82, 0x50, 0x52, 0x4f, 0x56, + 0x49, 0x44, 0x45, 0x44, 0x44, 0x42, 0x59, 0x39, 0x24, 0xa0, 0x43, 0x4f, 0x50, 0x59, 0xa9, 0x49, + 0x47, 0x48, 0x54, 0x20, 0x48, 0x4f, 0x4c, 0x13, 0x2e, 0x52, 0x42, 0x42, 0x41, 0x4e, 0x44, 0x2b, + 0x22, 0x4e, 0x54, 0x05, 0x42, 0x55, 0x4f, 0x20, 0x4d, 0x8d, 0x22, 0x41, 0x53, 0x05, 0x79, 0x22, + 0x37, 0x44, 0x07, 0x72, 0xd1, 0x45, 0x58, 0x50, 0x9c, 0x53, 0x52, 0x26, 0x3c, 0x2c, 0xc9, 0x4d, + 0x50, 0x4c, 0x49, 0x45, 0x04, 0xc1, 0x52, 0x34, 0x49, 0x54, 0x14, 0x53, 0x2c, 0x20, 0x26, 0x4e, + 0x43, 0x91, 0x55, 0x44, 0x0a, 0x47, 0x50, 0x14, 0x86, 0xb2, 0x4e, 0x1f, 0x54, 0x24, 0x73, 0x54, + 0x91, 0x49, 0x54, 0x53, 0x15, 0xa8, 0x2c, 0xf5, 0x2e, 0x73, 0x40, 0x9e, 0x46, 0x62, 0x4d, 0x06, + 0x43, 0x43, 0x48, 0x1d, 0x45, 0x41, 0x42, 0x49, 0x3a, 0x54, 0xd4, 0x44, 0xe5, 0x46, 0x10, 0x45, + 0x4e, 0xdd, 0x0e, 0x45, 0xde, 0x91, 0x24, 0x94, 0x8a, 0x64, 0x5e, 0xd4, 0x43, 0x55, 0x4c, 0x0c, + 0x14, 0x0d, 0x55, 0x50, 0x4f, 0x53, 0x65, 0x9a, 0xbf, 0x25, 0xe4, 0x53, 0x43, 0x26, 0x46, 0xae, + 0xa8, 0x2e, 0x11, 0x07, 0xef, 0x89, 0x50, 0x56, 0x45, 0x74, 0x94, 0x00, 0xa0, 0x99, 0x4c, 0x4c, + 0xdd, 0xb5, 0x8f, 0x25, 0x4f, 0x57, 0xaa, 0x59, 0x80, 0xa6, 0xdd, 0xa6, 0x54, 0x62, 0x4a, 0xf0, + 0xfa, 0x95, 0x4c, 0x45, 0xdd, 0x94, 0xdb, 0xad, 0x49, 0xb6, 0x43, 0x54, 0x94, 0xad, 0x13, 0xb0, + 0x43, 0x05, 0x44, 0x68, 0x14, 0xac, 0x2c, 0x91, 0xd4, 0x53, 0x50, 0x45, 0x1e, 0x17, 0x41, 0xdc, + 0x58, 0x86, 0xa9, 0x25, 0x14, 0x59, 0x2c, 0xad, 0x98, 0x30, 0x91, 0x51, 0x55, 0x4f, 0x12, 0x39, + 0x8a, 0x9c, 0x41, 0x4d, 0x41, 0x47, 0x3a, 0x8a, 0x20, 0x28, 0xad, 0xa4, 0x49, 0x65, 0x43, 0xac, + 0x94, 0x1c, 0x73, 0x25, 0x46, 0xbc, 0x55, 0xb6, 0x28, 0x04, 0xdc, 0x54, 0x3c, 0xc1, 0x20, 0x47, + 0x4f, 0x44, 0xc9, 0xed, 0x27, 0xb0, 0x52, 0x56, 0x45, 0x02, 0x9c, 0x3b, 0x70, 0x9c, 0xfa, 0x71, + 0x85, 0x55, 0x24, 0x94, 0x19, 0xcf, 0x05, 0x54, 0xfd, 0x57, 0x8b, 0x15, 0x71, 0x42, 0x17, 0x15, + 0x42, 0x3a, 0xe0, 0xd5, 0x85, 0x0a, 0x72, 0x8a, 0xdc, 0x26, 0x55, 0x50, 0x1a, 0x38, 0x29, 0x77, + 0xe6, 0x04, 0x18, 0x43, 0x53, 0x15, 0x41, 0x3e, 0xf6, 0xc9, 0xd7, 0x65, 0x2c, 0xe7, 0x1d, 0x91, + 0x5f, 0x45, 0x72, 0x59, 0xb5, 0x66, 0x36, 0x99, 0x1b, 0xa0, 0x70, 0x57, 0x95, 0x2e, 0x62, 0x1c, + 0x8f, 0x6b, 0xc7, 0x41, 0x44, 0x1d, 0x53, 0x0e, 0x24, 0x49, 0x4d, 0xe5, 0xe5, 0x71, 0x99, 0x96, + 0xb1, 0x38, 0xdf, 0x61, 0x20, 0x02, 0x47, 0x75, 0x3c, 0x06, 0x1e, 0x95, 0x90, 0x38, 0x04, 0x41, + 0x91, 0x57, 0x08, 0xf0, 0x29, 0x55, 0x52, 0x0c, 0x41, 0x56, 0x06, 0xf9, 0xc4, 0x23, 0xed, 0x65, + 0xdc, 0xf5, 0x46, 0x47, 0x55, 0xb3, 0x91, 0x79, 0x1a, 0x9d, 0xb5, 0xca, 0xa5, 0xbb, 0x08, 0x66, + 0x46, 0x76, 0x44, 0x16, 0x17, 0x7f, 0x5f, 0x6c, 0x1f, 0x58, 0x9a, 0x13, 0xdc, 0x7d, 0xdb, 0x76, + 0xa0, 0xfb, 0x7c, 0x29, 0xc6, 0x59, 0xb0, 0xc4, 0x20, 0x7d, 0xae, 0xa9, 0x35, 0x6b, 0x23, 0xb4, + 0x63, 0x74, 0x9b, 0xc0, 0x40, 0x68, 0x24, 0x72, 0x1a, 0x51, 0x3a, 0x45, 0x2d, 0xe9, 0xcf, 0x6e, + 0x66, 0x17, 0xa4, 0xf1, 0x9f, 0x6f, 0x73, 0x44, 0xcc, 0x3c, 0x79, 0x38, 0x7a, 0x20, 0x47, 0x13, + 0x73, 0xa0, 0x15, 0x7c, 0x67, 0xef, 0x37, 0x75, 0x62, 0x2e, 0xb0, 0x01, 0xd2, 0x2f, 0x43, 0x79, + 0x98, 0xa4, 0x34, 0x39, 0x37, 0x33, 0x2f, 0x6c, 0x7a, 0x34, 0x79, 0xb1, 0x70, 0x7a, 0x3a, 0x1a, + 0x1d, 0xd6, 0x7f, 0xa4, 0x9a, 0x6f, 0xf1, 0x72, 0x4f, 0xa8, 0x10, 0x49, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x7d, 0x52, 0x43, 0x0a, 0x49, 0x23, 0x21, 0x0f, 0x4e, 0x87, 0xd9, 0x63, 0x0a, + 0x2a, 0x2f, 0x0a, 0x23, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x20, 0x46, 0x85, 0x02, 0x0a, 0x1a, + 0xbc, 0xfe, 0xa0, 0x20, 0x64, 0x65, 0x66, 0xc2, 0x6e, 0x65, 0x64, 0x81, 0x28, 0x5f, 0x5f, 0x63, + 0x6c, 0xb9, 0x22, 0x5e, 0x07, 0x89, 0xca, 0x65, 0x78, 0xac, 0x25, 0x6b, 0x30, 0x70, 0x22, 0x43, + 0x22, 0x5a, 0x7b, 0x4c, 0xde, 0x6c, 0x85, 0x53, 0x5c, 0xf9, 0x55, 0x04, 0x2a, 0x95, 0x26, 0x2e, + 0x68, 0xb7, 0x53, 0x06, 0x73, 0x01, 0x1c, 0x6f, 0x6b, 0xf9, 0x63, 0xa2, 0x5b, 0x66, 0x75, 0xb8, + 0x88, 0x35, 0x6e, 0x2c, 0x26, 0x37, 0x14, 0xa4, 0x76, 0x30, 0x29, 0x6e, 0x4d, 0x3a, 0x56, 0x75, + 0x66, 0x66, 0x72, 0xac, 0x43, 0x56, 0x7c, 0x1c, 0x51, 0xf6, 0x8d, 0x67, 0x86, 0x22, 0x6d, 0xf5, + 0x6d, 0x46, 0xb7, 0x49, 0x1c, 0x1e, 0x79, 0x8d, 0x66, 0x1e, 0x51, 0x20, 0x3b, 0x67, 0x5d, 0xf0, + 0x30, 0x78, 0xed, 0xb3, 0x60, 0x1d, 0x6f, 0x2d, 0x45, 0x24, 0x1b, 0xde, 0x5d, 0x1c, 0xdb, 0x04, + 0x4b, 0x64, 0x3c, 0x04, 0x61, 0x28, 0x19, 0x56, 0x36, 0xe8, 0xe1, 0xf9, 0xd5, 0x49, 0xd8, 0x15, + 0xa5, 0x4a, 0x25, 0x7b, 0x28, 0xc1, 0x95, 0x29, 0x2c, 0xbf, 0x96, 0x1f, 0x95, 0x47, 0x86, 0xa3, + 0x3f, 0x71, 0x94, 0x62, 0x69, 0x54, 0x00, 0xd1, 0x8c, 0x31, 0x1d, 0xaf, 0xf8, 0x9b, 0x50, 0xd5, + 0x84, 0x3c, 0x78, 0xf9, 0x36, 0x67, 0x2a, 0x7c, 0x7f, 0x16, 0x5f, 0xde, 0xc8, 0x96, 0xb7, 0x52, + 0xeb, 0xab, 0x61, 0xf5, 0x6f, 0xca, 0x49, 0x1e, 0x2e, 0x64, 0x2e, 0xc7, 0x9f, 0x52, 0x27, 0x01, + 0xe9, 0x68, 0x56, 0x80, 0x67, 0x56, 0x7a, 0x54, 0x3f, 0x14, 0x01, 0xaf, 0x69, 0x57, 0x68, 0x35, + 0xd9, 0xa3, 0x1f, 0x5f, 0x07, 0x9d, 0x53, 0xc1, 0xb7, 0x5f, 0xb1, 0xdc, 0x4a, 0xe1, 0xc7, 0x05, + 0x01, 0x31, 0x09, 0x5b, 0xf8, 0x46, 0x11, 0x20, 0x61, 0x86, 0x1c, 0x6b, 0x87, 0xf7, 0x31, 0x4d, + 0x66, 0xb7, 0xf8, 0x19, 0x43, 0xa2, 0x75, 0x1e, 0x28, 0x44, 0x3f, 0x8f, 0x23, 0x49, 0x4e, 0x82, + 0x37, 0xf6, 0xc2, 0x0c, 0x77, 0x18, 0x6e, 0x42, 0x5c, 0x2d, 0xa1, 0x4f, 0x29, 0xa3, 0x27, 0x61, + 0x70, 0x1d, 0xf6, 0x69, 0x60, 0xd4, 0x98, 0xac, 0xab, 0xfd, 0xac, 0xb8, 0x07, 0x4c, 0x41, 0xd9, + 0x64, 0x3b, 0xb2, 0x36, 0x74, 0x77, 0xda, 0x16, 0x09, 0xf9, 0x67, 0x2d, 0x04, 0x62, 0x78, 0x15, + 0x45, 0x2b, 0x7a, 0xb1, 0x2a, 0x6c, 0xa7, 0xa0, 0xe5, 0x23, 0x3f, 0x9b, 0x29, 0x4e, 0x55, 0x4d, + 0x42, 0x66, 0x14, 0x22, 0x2a, 0xff, 0x4d, 0x60, 0x31, 0x30, 0x30, 0x49, 0x07, 0x20, 0x2b, 0x8b, + 0xa9, 0x93, 0x31, 0x62, 0x2f, 0xf7, 0x90, 0xac, 0xc4, 0x74, 0xb1, 0x76, 0xa3, 0x15, 0x1f, 0x4e, + 0x16, 0x32, 0x62, 0x12, 0x07, 0xe6, 0x76, 0x89, 0x94, 0x29, 0x3b, 0xa3, 0x99, 0xe8, 0x79, 0x54, + 0xc8, 0xd7, 0xe3, 0x6d, 0x26, 0x29, 0x71, 0x47, 0xa2, 0xab, 0xfd, 0xf6, 0x89, 0x64, 0x3b, 0x06, + 0x4d, 0x4d, 0xf2, 0x86, 0x26, 0x59, 0x5f, 0xb1, 0x85, 0xa9, 0x94, 0x46, 0x2b, 0x4d, 0xc9, 0xef, + 0xb0, 0xdf, 0x69, 0x61, 0x76, 0xab, 0x27, 0x45, 0xc4, 0x68, 0x61, 0x32, 0xac, 0x20, 0x4e, 0x2d, + 0x3e, 0x32, 0x5e, 0x4e, 0x20, 0x42, 0x46, 0xce, 0x73, 0x6a, 0x58, 0x5e, 0x34, 0xe2, 0x50, 0x30, + 0x12, 0x31, 0x65, 0x31, 0xd0, 0x34, 0x34, 0x0a, 0x4b, 0x42, 0x3b, 0x14, 0x28, 0x32, 0x21, 0x34, + 0x20, 0x02, 0x17, 0x36, 0x84, 0x36, 0x19, 0x44, 0x16, 0x32, 0x45, 0xc3, 0x4d, 0x63, 0x4c, 0x7c, + 0x63, 0x2e, 0x29, 0xcb, 0x9a, 0x9b, 0x3e, 0x02, 0x63, 0x73, 0x84, 0x6d, 0xe3, 0xf6, 0xad, 0x62, + 0xa9, 0xab, 0x5a, 0xb2, 0x9a, 0x9b, 0x1f, 0x72, 0x59, 0x7d, 0x39, 0x06, 0x52, 0xb8, 0x4b, 0x56, + 0x06, 0x65, 0x9f, 0x57, 0x99, 0x6d, 0x7d, 0xdf, 0x5a, 0x3c, 0x58, 0xb8, 0x4a, 0x76, 0x11, 0x74, + 0x33, 0xe5, 0x06, 0x10, 0xa1, 0xaa, 0x66, 0xa8, 0x2f, 0x50, 0x7d, 0x44, 0x6d, 0x8c, 0x80, 0x9c, + 0x74, 0xd5, 0x76, 0x61, 0x6c, 0x40, 0x66, 0x36, 0xc8, 0x31, 0x34, 0x2c, 0x58, 0xc7, 0x5b, 0x66, + 0x4e, 0xb8, 0xba, 0x25, 0x77, 0x5e, 0xe5, 0x02, 0x08, 0xb1, 0x2a, 0x79, 0x6a, 0x2c, 0x59, 0x11, + 0x3c, 0x61, 0x8a, 0x55, 0x80, 0xe6, 0x6c, 0xdc, 0x78, 0x38, 0x36, 0x62, 0x4c, 0x31, 0xa5, 0x6d, + 0x0a, 0x5d, 0xa7, 0x7d, 0x8d, 0x1a, 0xa8, 0x0a, 0x3e, 0x8d, 0x86, 0x53, 0x1a, 0x79, 0x81, 0xf1, + 0x46, 0xb9, 0x65, 0xda, 0x3a, 0x8d, 0x9b, 0x29, 0x95, 0xb9, 0x17, 0xc1, 0x5f, 0x8c, 0xc1, 0x55, + 0x28, 0x20, 0x8c, 0x34, 0x9b, 0x52, 0x1e, 0x32, 0x2a, 0x98, 0xd5, 0x59, 0x2c, 0x1b, 0x54, 0x42, + 0x30, 0x16, 0x71, 0x59, 0x2f, 0x24, 0xf8, 0x7a, 0x65, 0x1f, 0xde, 0x89, 0x22, 0x78, 0x44, 0x15, + 0x39, 0x21, 0xe4, 0x0e, 0xb5, 0xa5, 0x5e, 0x29, 0xb9, 0xc2, 0xd8, 0x66, 0x4a, 0xb5, 0xf6, 0xf3, + 0x37, 0x97, 0xbd, 0x96, 0x31, 0x95, 0xcd, 0xe5, 0x15, 0x8e, 0x83, 0x87, 0x29, 0x97, 0x1b, 0xad, + 0xbd, 0x5d, 0x63, 0xa1, 0x18, 0x27, 0x8b, 0x63, 0x02, 0x27, 0x1e, 0x62, 0x79, 0x93, 0xa3, 0x3d, + 0x72, 0x6f, 0x6d, 0x65, 0x3d, 0x34, 0x5a, 0x6d, 0x36, 0x71, 0x9b, 0xca, 0x09, 0xc5, 0x64, 0x79, + 0x1e, 0x0f, 0xc6, 0x3f, 0xd5, 0x84, 0xe8, 0x46, 0x91, 0x47, 0x27, 0x77, 0x63, 0xa9, 0x27, 0x45, + 0x99, 0x2a, 0x8b, 0xf5, 0x45, 0x7c, 0x2e, 0xed, 0xa6, 0x86, 0x1f, 0xd2, 0x4f, 0x7c, 0x67, 0x75, + 0xc7, 0x5e, 0xa4, 0xcd, 0x25, 0x78, 0x68, 0x06, 0x57, 0x63, 0x15, 0xa5, 0xb0, 0x75, 0xb3, 0x18, + 0x20, 0x3e, 0x3d, 0x99, 0xf1, 0x42, 0x9e, 0x20, 0x86, 0xa4, 0x28, 0x74, 0x6b, 0xb6, 0x38, 0x29, + 0x98, 0x49, 0x74, 0x23, 0x41, 0x2a, 0x20, 0x59, 0x3a, 0xb2, 0xda, 0x67, 0x78, 0x14, 0x46, 0x44, + 0x1f, 0xd9, 0xe0, 0x84, 0x5d, 0x32, 0x2c, 0x4b, 0x79, 0xc0, 0x46, 0x72, 0xc3, 0x1e, 0xec, 0x74, + 0xd5, 0xa1, 0x6f, 0x97, 0xdc, 0xb5, 0x5f, 0xf9, 0xb5, 0xde, 0x5b, 0xef, 0xdc, 0x50, 0xd9, 0xb7, + 0x29, 0x01, 0x99, 0xf9, 0xde, 0xe2, 0x7b, 0xb0, 0x5e, 0xbb, 0xe6, 0x9a, 0x68, 0xf3, 0x86, 0x64, + 0x67, 0x95, 0x4a, 0x9f, 0xf6, 0xc3, 0x96, 0x36, 0xf6, 0x0e, 0xf1, 0xa5, 0x5f, 0x58, 0xf0, 0xdd, + 0xcc, 0x54, 0xf0, 0x01, 0x7f, 0x2a, 0x25, 0x73, 0xe3, 0xb4, 0x5b, 0x68, 0x37, 0x75, 0x21, 0x9d, + 0x98, 0xf2, 0x8c, 0x2b, 0x65, 0x41, 0x67, 0xb4, 0x29, 0xd9, 0x65, 0x71, 0x75, 0x68, 0xb1, 0x1b, + 0x77, 0xd5, 0xf5, 0xc3, 0x49, 0x20, 0x5b, 0x9f, 0x4c, 0x26, 0xe7, 0xe4, 0xc0, 0x65, 0xc9, 0x54, + 0x68, 0x4b, 0x26, 0xa9, 0x06, 0x6e, 0xf1, 0x13, 0xf0, 0xf6, 0x72, 0x69, 0xa1, 0x7e, 0x86, 0x2d, + 0x5a, 0x1e, 0x7e, 0x6d, 0x51, 0x56, 0xa4, 0x80, 0x42, 0x95, 0x97, 0x3f, 0xd9, 0xd7, 0xd7, 0x43, + 0x45, 0xaf, 0x01, 0x9c, 0xdb, 0xb4, 0x1a, 0x06, 0x3a, 0x4d, 0x98, 0x3a, 0xb4, 0x85, 0x75, 0x70, + 0x7c, 0xd6, 0x07, 0xa7, 0xed, 0x6a, 0x33, 0x65, 0x83, 0x41, 0x58, 0x5f, 0x49, 0x4e, 0x50, 0xd7, + 0x54, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x81, 0x7c, 0x0d, 0xf5, 0x80, 0xab, 0x35, 0x65, 0x7a, + 0xbd, 0xc7, 0x65, 0x58, 0x7c, 0xb3, 0x5f, 0x6d, 0x6e, 0x66, 0xed, 0x71, 0x4d, 0x28, 0xac, 0x73, + 0x9e, 0xf3, 0x97, 0x06, 0x62, 0xca, 0xef, 0xc5, 0x29, 0xbb, 0xdf, 0xa5, 0xe5, 0x85, 0x3e, 0x6e, + 0xb0, 0xd6, 0xaf, 0x7a, 0xaa, 0x35, 0xf5, 0x9c, 0xe6, 0x9b, 0x75, 0x07, 0xc6, 0x65, 0x89, 0x7f, + 0x7d, 0xc3, 0xc4, 0x4a, 0x63, 0x42, 0x89, 0x73, 0x61, 0xb8, 0x35, 0x26, 0x3c, 0x3d, 0x47, 0x4b, + 0x4f, 0x6e, 0x14, 0x98, 0x10, 0x4f, 0x91, 0xbd, 0x3d, 0x01, 0x91, 0x5f, 0x30, 0xe1, 0x39, 0xa6, + 0xc1, 0x9b, 0x47, 0xce, 0x72, 0x73, 0xda, 0xdc, 0x8b, 0xa5, 0x9f, 0x76, 0xd5, 0xa7, 0x6b, 0x97, + 0x28, 0x59, 0x53, 0x4d, 0x55, 0x28, 0x60, 0x14, 0x75, 0x0e, 0x17, 0xdd, 0x01, 0x53, 0x31, 0x61, + 0x9b, 0xa3, 0x03, 0x69, 0x0a, 0xca, 0x81, 0x4f, 0x97, 0xd7, 0x7d, 0x65, 0xab, 0x9f, 0xcc, 0xb3, + 0x0f, 0x69, 0xc9, 0xdd, 0x89, 0xf9, 0x77, 0xba, 0x81, 0xf5, 0xaa, 0x39, 0xef, 0xc9, 0x8b, 0x2e, + 0xcf, 0x77, 0x95, 0xd9, 0x5f, 0xf7, 0x2e, 0xa1, 0x18, 0x49, 0x5f, 0xbd, 0xe7, 0xaf, 0x17, 0x6c, + 0x90, 0xe1, 0x07, 0xa6, 0x6a, 0xcd, 0xee, 0x67, 0x68, 0x2c, 0x88, 0x03, 0x7f, 0x64, 0x90, 0xff, + 0x77, 0x67, 0x6e, 0xc9, 0xab, 0xf2, 0x8b, 0x5a, 0x38, 0x55, 0x57, 0x14, 0x78, 0x81, 0x5c, 0x72, + 0x44, 0x76, 0x49, 0x66, 0xda, 0x28, 0x3c, 0x30, 0xd7, 0x22, 0xd3, 0xd9, 0xaf, 0x79, 0x89, 0x91, + 0x7d, 0xc1, 0x05, 0x6d, 0x51, 0xd1, 0x5a, 0x74, 0x79, 0xb0, 0x85, 0x09, 0x6d, 0xaa, 0x5f, 0x27, + 0x86, 0xc7, 0xa6, 0x33, 0x93, 0xdd, 0x99, 0x03, 0xd5, 0xef, 0xdc, 0x5b, 0x18, 0x61, 0xe6, 0x61, + 0x67, 0x79, 0xf6, 0xd0, 0xa6, 0x85, 0x5a, 0xed, 0x6a, 0x7d, 0x21, 0x1f, 0x17, 0xc4, 0x99, 0xe1, + 0xd5, 0x74, 0x6e, 0x5b, 0x98, 0xb0, 0xca, 0x65, 0x5b, 0x84, 0xa3, 0x14, 0x08, 0x6c, 0x6f, 0x77, + 0x65, 0x78, 0x5f, 0x0c, 0xc7, 0x45, 0xa1, 0xb9, 0x7d, 0x6c, 0xac, 0x59, 0xe3, 0x39, 0x69, 0x82, + 0x69, 0x82, 0x80, 0xbf, 0x37, 0x23, 0xdb, 0x66, 0x16, 0x24, 0x65, 0x42, 0x7c, 0xc5, 0x6a, 0x74, + 0x3a, 0xe3, 0x77, 0x45, 0x6a, 0x7d, 0xe3, 0x2d, 0x41, 0x4b, 0xc2, 0x3f, 0x6f, 0x97, 0xef, 0xf3, + 0xc9, 0xec, 0x9a, 0x41, 0x64, 0x99, 0xfa, 0x50, 0x9f, 0xa0, 0xda, 0xcd, 0xb6, 0xa9, 0xd1, 0xda, + 0xde, 0x6b, 0x7e, 0xc1, 0xea, 0x5a, 0xf7, 0xe3, 0x28, 0x30, 0x78, 0x37, 0x45, 0x49, 0x01, 0xbb, + 0x36, 0xe5, 0xbc, 0x0e, 0xac, 0x31, 0x31, 0x33, 0x20, 0x39, 0x32, 0x39, 0x20, 0x32, 0x9e, 0x65, + 0x37, 0x91, 0xe3, 0x6a, 0x43, 0x4f, 0x4d, 0xb2, 0xd1, 0x01, 0x42, 0x55, 0xfe, 0x1d, 0x34, 0x28, + 0xe4, 0xb5, 0xeb, 0x26, 0x76, 0x28, 0x28, 0x6a, 0x3a, 0x06, 0x5c, 0x67, 0xb1, 0x65, 0x72, 0x27, + 0x2e, 0x3e, 0x20, 0x62, 0x03, 0xe0, 0x3f, 0x41, 0xe6, 0x3a, 0x70, 0x59, 0x2b, 0x96, 0x15, 0x29, + 0x2f, 0x32, 0x35, 0x35, 0x51, 0x1f, 0xfe, 0x29, 0xfd, 0xc9, 0x9f, 0x9f, 0x2f, 0x6a, 0x71, 0xed, + 0x50, 0xef, 0x66, 0x8b, 0xd7, 0xa1, 0xd7, 0x19, 0xb7, 0x06, 0xe8, 0xab, 0x56, 0x87, 0xbe, 0x34, + 0xef, 0x71, 0x6b, 0x69, 0x91, 0x1a, 0x42, 0x79, 0x71, 0x57, 0x69, 0xb4, 0xb3, 0x9a, 0x22, 0x77, + 0x6a, 0x52, 0xd7, 0x21, 0xb8, 0x49, 0x17, 0x22, 0x6c, 0x7c, 0xc2, 0x48, 0x26, 0x72, 0x68, 0x0c, + 0x5b, 0xdb, 0x5f, 0x0f, 0x52, 0x4b, 0x83, 0xde, 0xf1, 0x75, 0x9b, 0x20, 0x3e, 0xe7, 0x5a, 0xf2, + 0x8c, 0x29, 0x5a, 0x75, 0x94, 0xc5, 0xd7, 0x38, 0x6e, 0xb0, 0x99, 0xd1, 0xad, 0x09, 0xd5, 0x53, + 0x1f, 0xac, 0x72, 0xe1, 0x67, 0x5a, 0x94, 0xc4, 0x8b, 0x27, 0x99, 0x6d, 0x7d, 0xa7, 0x86, 0x4d, + 0xd9, 0xfa, 0xb0, 0xcb, 0xd5, 0x85, 0x29, 0xd7, 0x7f, 0x5a, 0xff, 0xec, 0xd1, 0xb5, 0xd1, 0x65, + 0x41, 0x48, 0xf6, 0x99, 0x57, 0x2d, 0x08, 0xec, 0x9e, 0xc0, 0xd4, 0x5b, 0xb9, 0xc5, 0x28, 0xce, + 0xe1, 0x95, 0x8b, 0x17, 0x95, 0x71, 0xbf, 0x35, 0x15, 0xeb, 0xc6, 0x4e, 0x76, 0xd6, 0x6f, 0x6b, + 0x8f, 0xab, 0x96, 0x25, 0x6a, 0x9d, 0xf1, 0xf7, 0x0a, 0x59, 0xe8, 0x8e, 0x93, 0x63, 0x85, 0xd8, + 0x45, 0x6a, 0xcf, 0x97, 0x9a, 0xdb, 0x2c, 0x9b, 0x3f, 0x72, 0xcd, 0x7e, 0x70, 0xdb, 0x6d, 0xae, + 0x9b, 0x5f, 0x6b, 0x8a, 0x1d, 0x9a, 0x76, 0xef, 0x9d, 0xb3, 0x96, 0x09, 0x9b, 0xbd, 0x9e, 0xcb, + 0xdf, 0x87, 0x2c, 0xb5, 0xe1, 0x5d, 0x62, 0x79, 0xbd, 0x3b, 0x00, 0x74, 0x6f, 0xf1, 0x28, 0x98, + 0x9a, 0x0b, 0xb9, 0x9f, 0x8a, 0x1e, 0x27, 0x86, 0x4b, 0x2e, 0xcf, 0x44, 0x2b, 0x99, 0xdb, 0xb3, + 0x4d, 0xf7, 0x5e, 0x7b, 0x28, 0x83, 0x7f, 0x53, 0xd5, 0xd3, 0x20, 0xcf, 0xe5, 0x9f, 0xa5, 0xeb, + 0x69, 0x9a, 0x6b, 0x19, 0x77, 0x27, 0x62, 0x3c, 0x07, 0x65, 0x6c, 0x63, 0xa5, 0x17, 0x9a, 0xb6, + 0x10, 0xaa, 0x63, 0x19, 0x68, 0x72, 0x99, 0x99, 0xba, 0x59, 0x5e, 0x2c, 0x94, 0xae, 0x75, 0x45, + 0xa2, 0x95, 0x77, 0x38, 0xf2, 0x2d, 0x4f, 0x51, 0x73, 0xb1, 0x6f, 0x36, 0xff, 0x57, 0x0d, 0x45, + 0x6f, 0xf7, 0x47, 0x5c, 0xdf, 0x15, 0x73, 0x2e, 0x8b, 0x61, 0x19, 0x37, 0x45, 0xcf, 0x8d, 0x6e, + 0xdd, 0x13, 0xba, 0x55, 0xe3, 0x36, 0xb0, 0xbc, 0x00, 0x1a, 0x2d, 0x17, 0xfc, 0x2e, 0x22, 0x5e, + 0xd5, 0x16, 0x9d, 0x58, 0xb2, 0x53, 0x69, 0x3a, 0xa8, 0xed, 0x6f, 0xe6, 0x71, 0x1e, 0x65, 0xb1, + 0xf3, 0xbb, 0x25, 0xf5, 0x83, 0x6f, 0x63, 0x80, 0x0d, 0x79, 0x89, 0x9b, 0xd1, 0xfb, 0x72, 0xf9, + 0x03, 0x7c, 0x7b, 0x29, 0x2b, 0x7e, 0x33, 0x25, 0x87, 0xcf, 0xbc, 0x15, 0xdb, 0xa6, 0x47, 0x18, + 0x6e, 0x83, 0xb9, 0xfd, 0x6d, 0x36, 0x22, 0x31, 0x22, 0xa8, 0x33, 0xa7, 0x66, 0x89, 0xc1, 0x24, + 0x67, 0x87, 0xf3, 0x3e, 0x99, 0x48, 0x9d, 0x57, 0x56, 0x7d, 0x82, 0x42, 0x3c, 0x1e, 0x30, 0xc9, + 0xf1, 0x95, 0x5d, 0x4c, 0xf5, 0x08, 0xc6, 0x6e, 0xe0, 0x12, 0xdb, 0xdc, 0x7f, 0x43, 0x43, 0x83, + 0xd9, 0x7f, 0x52, 0x41, 0x54, 0x90, 0xef, 0x44, 0x2d, 0x46, 0x41, 0x55, 0x4c, 0x54, 0xf1, 0x89, + 0x9a, 0x1c, 0xe8, 0x6f, 0x89, 0x63, 0x29, 0xaa, 0x77, 0xd5, 0xe9, 0x01, 0x1b, 0x2e, 0x76, 0x09, + 0x9f, 0xbd, 0x5e, 0x22, 0xe7, 0x8b, 0xe9, 0x76, 0x21, 0x69, 0xf1, 0xb1, 0x93, 0xb3, 0x95, 0xb1, + 0x5f, 0xa9, 0x8a, 0x11, 0x64, 0x74, 0x46, 0x65, 0xb6, 0xa7, 0x9a, 0xec, 0xa3, 0xe9, 0xa0, 0xbc, + 0x6a, 0x61, 0x2b, 0x7f, 0x06, 0x25, 0xc7, 0x2e, 0xaf, 0x8d, 0x4b, 0xb1, 0xbd, 0xae, 0x39, 0x55, + 0xad, 0x55, 0xda, 0x71, 0x04, 0x25, 0xa2, 0x17, 0x6c, 0xb1, 0x5b, 0x9d, 0x51, 0x22, 0x51, 0xbf, + 0x30, 0x83, 0x55, 0x7b, 0x37, 0x25, 0xd6, 0x6f, 0x99, 0x26, 0x0d, 0x94, 0x6b, 0x6f, 0x6b, 0x01, + 0x72, 0x77, 0x68, 0x1a, 0x07, 0x99, 0x32, 0xec, 0x66, 0xa7, 0xbd, 0x3f, 0xd2, 0xd9, 0xde, 0xa3, + 0x99, 0x6a, 0x95, 0xdb, 0x25, 0xd9, 0xee, 0x42, 0x42, 0xc5, 0x7b, 0x38, 0x2d, 0x25, 0xf3, 0x58, + 0xf5, 0xa5, 0xa8, 0x6d, 0x6f, 0x58, 0x67, 0x6d, 0x94, 0x86, 0x53, 0x94, 0xc9, 0x9a, 0x79, 0x70, + 0x64, 0x10, 0x77, 0x78, 0x29, 0xed, 0xa6, 0x6d, 0xc0, 0xa7, 0x95, 0x8d, 0xb4, 0x21, 0x6a, 0x27, + 0xe4, 0x33, 0x63, 0x2a, 0x61, 0x18, 0x27, 0x2d, 0x73, 0x2b, 0xa6, 0x9d, 0x8d, 0x9f, 0x91, 0x6a, + 0xe7, 0xad, 0x57, 0x35, 0x6b, 0xeb, 0x64, 0x2e, 0xc7, 0xe0, 0x2c, 0x69, 0xef, 0xfd, 0xac, 0x3b, + 0xa6, 0x9e, 0xed, 0xf1, 0x64, 0x36, 0x5d, 0x8b, 0xe3, 0x1a, 0x52, 0xe5, 0x2b, 0xa7, 0x14, 0xc9, + 0x19, 0xc7, 0x3a, 0x67, 0x5d, 0x2e, 0x90, 0x7e, 0x9d, 0xd9, 0xd7, 0x6d, 0x5a, 0x19, 0x5f, 0x13, + 0x89, 0xab, 0x5b, 0x19, 0xdf, 0xd0, 0x8d, 0xa1, 0xfe, 0x27, 0x0d, 0xb9, 0x25, 0xf7, 0xf9, 0x0d, + 0xb9, 0xea, 0x6d, 0xb7, 0xfe, 0x2c, 0x0d, 0x6b, 0x74, 0x47, 0xe1, 0x74, 0xf9, 0x13, 0xa7, 0xf7, + 0x4f, 0xc6, 0x65, 0xb1, 0x13, 0x62, 0x72, 0x2b, 0x9a, 0xa6, 0x6b, 0x69, 0x68, 0x59, 0x38, 0x1c, + 0x03, 0xde, 0xf2, 0xf5, 0xd5, 0xfd, 0x70, 0xcb, 0x69, 0x95, 0x76, 0x42, 0xbe, 0x6d, 0x5f, 0x26, + 0xc3, 0xd6, 0xaa, 0xbe, 0xa1, 0x8b, 0xff, 0x79, 0x39, 0x41, 0xc5, 0x6c, 0xfb, 0x5a, 0x13, 0xc9, + 0xfd, 0x8b, 0xf9, 0xb6, 0x5f, 0x67, 0xa6, 0x13, 0x0b, 0x2a, 0x86, 0x50, 0xe7, 0xc0, 0x6b, 0xc6, + 0x77, 0x53, 0xbf, 0x67, 0xe5, 0xfc, 0x93, 0xd9, 0x40, 0x75, 0x16, 0x25, 0xe3, 0xcb, 0x78, 0x86, + 0x7b, 0x79, 0xdd, 0x13, 0x85, 0xc9, 0x28, 0xd5, 0x6d, 0xbd, 0xb4, 0x67, 0x63, 0x57, 0x95, 0xdb, + 0x3f, 0x01, 0x37, 0x4e, 0x65, 0x77, 0xf2, 0x03, 0xde, 0xa7, 0xe3, 0x89, 0x6f, 0x6c, 0xfd, 0x3b, + 0x97, 0x7e, 0xf7, 0x11, 0xd1, 0x6e, 0x62, 0xfa, 0x2e, 0x19, 0x7e, 0x8f, 0x0b, 0xda, 0x29, 0x61, + 0xfa, 0x3e, 0x0d, 0xdf, 0x77, 0x57, 0x8e, 0x1f, 0x9b, 0x8b, 0xed, 0xa5, 0x14, 0xda, 0xbb, 0x49, + 0x27, 0x9e, 0x1b, 0x78, 0xe9, 0xf5, 0x6e, 0xfc, 0x71, 0xed, 0xf8, 0x61, 0x17, 0x67, 0x72, 0x7e, + 0x12, 0x9b, 0x47, 0x5d, 0x2b, 0xaa, 0x9d, 0xff, 0x1b, 0x6e, 0x66, 0x97, 0x7b, 0x9e, 0x04, 0xf3, + 0xb9, 0x9e, 0x5f, 0x61, 0xa2, 0x1f, 0xa9, 0xa2, 0x81, 0xde, 0xe3, 0xab, 0xdf, 0xa7, 0x0d, 0x55, + 0xc4, 0x50, 0xbb, 0x77, 0xd2, 0xfa, 0x0d, 0x3a, 0x64, 0x57, 0x45, 0xc3, 0x87, 0x29, 0xbc, 0x3b, + 0xab, 0xa1, 0x44, 0xbb, 0x2a, 0xcf, 0x7f, 0x9a, 0x49, 0xda, 0xa4, 0x83, 0x62, 0x73, 0x77, 0x4b, + 0x47, 0x56, 0x12, 0x7a, 0xbc, 0xb9, 0xd8, 0x7e, 0x77, 0x27, 0xb9, 0x6b, 0xe3, 0x8b, 0x9b, 0xb3, + 0x73, 0x0d, 0x6e, 0xda, 0x8c, 0x9e, 0xdd, 0x5e, 0x10, 0xd7, 0xaf, 0xab, 0x67, 0xb3, 0xb6, 0x03, + 0x7a, 0x3d, 0x9f, 0x87, 0xdb, 0xa5, 0x5b, 0x11, 0x3a, 0x72, 0x4d, 0x8d, 0xf5, 0xeb, 0x9f, 0x31, + 0x66, 0x99, 0x99, 0x38, 0xbe, 0x24, 0xfb, 0xee, 0x1a, 0x69, 0xe2, 0x77, 0xdf, 0x86, 0x89, 0xab, + 0x3a, 0x2d, 0x5a, 0x73, 0x1a, 0x48, 0x9b, 0x40, 0xd7, 0x3f, 0x51, 0xb0, 0x72, 0xac, 0x6f, 0x65, + 0x48, 0x5f, 0xec, 0x51, 0xa6, 0xa1, 0x71, 0xfb, 0x76, 0x65, 0x5f, 0x6b, 0xb7, 0x67, 0x50, 0x08, + 0x22, 0x6e, 0xa7, 0xb5, 0xc3, 0xa9, 0xef, 0x99, 0x2b, 0x9a, 0x71, 0x7b, 0x28, 0xfb, 0x29, 0x67, + 0xe8, 0xa3, 0xd6, 0xe9, 0xc7, 0x55, 0xa5, 0x1d, 0xeb, 0x6d, 0x4f, 0x5c, 0x04, 0x70, 0xb1, 0x45, + 0x8d, 0xb4, 0x1b, 0xf6, 0x72, 0x82, 0xd0, 0x6d, 0x95, 0x0c, 0xc0, 0x49, 0x96, 0xb1, 0xa6, 0xca, + 0x8d, 0xc9, 0xb2, 0x99, 0x6e, 0xb7, 0x45, 0x17, 0x61, 0x6b, 0x6d, 0x79, 0x96, 0xcc, 0xa3, 0x07, + 0xd6, 0x56, 0xad, 0xf1, 0xae, 0x69, 0x91, 0xdb, 0xe6, 0x43, 0xdd, 0x8b, 0xf1, 0x5f, 0xae, 0xd9, + 0x71, 0xf7, 0xe5, 0x69, 0xbf, 0xe4, 0x5b, 0xb6, 0x6a, 0x44, 0xf2, 0x9d, 0xa7, 0xb2, 0x31, 0xd2, + 0x33, 0xdb, 0x26, 0x6d, 0xf0, 0xfc, 0x74, 0xd5, 0x34, 0x85, 0x6e, 0xe2, 0xed, 0xe7, 0xbc, 0x2f, + 0xe7, 0xb3, 0xd3, 0xf6, 0xae, 0x79, 0xe7, 0xec, 0xdd, 0xf7, 0xcf, 0x6f, 0x1b, 0x74, 0x25, 0xc9, + 0xa4, 0xf7, 0x77, 0x7f, 0x3d, 0x19, 0xb5, 0xe9, 0x37, 0xc7, 0x71, 0x64, 0x49, 0x27, 0x0f, 0xe7, + 0x85, 0x6b, 0xe2, 0x35, 0xd1, 0xe6, 0x68, 0x7c, 0x2c, 0x53, 0x33, 0x65, 0x6e, 0x20, 0x76, 0x86, + 0xb9, 0x5d, 0x97, 0x18, 0xaa, 0x51, 0x91, 0x8d, 0x3d, 0xa9, 0x1e, 0x85, 0xf5, 0xf3, 0xae, 0x8b, + 0xcf, 0xe7, 0xe9, 0x71, 0x55, 0x80, 0x3d, 0xae, 0x9f, 0xc9, 0xf1, 0x4e, 0xf3, 0xf3, 0x0d, 0x74, + 0x67, 0xd3, 0xa9, 0x07, 0x96, 0x70, 0x2e, 0xa1, 0x70, 0x16, 0x68, 0x21, 0x75, 0x6c, 0xaf, 0xce, + 0x01, 0x9b, 0x39, 0xf9, 0x5a, 0x7a, 0x50, 0xf5, 0xcd, 0x6b, 0x98, 0x78, 0x9b, 0xe7, 0x41, 0x6c, + 0x77, 0x61, 0x79, 0x73, 0xeb, 0x77, 0xff, 0xe2, 0xf1, 0xa6, 0xf1, 0xdb, 0x9d, 0xbd, 0xae, 0xcb, + 0x37, 0xae, 0x6b, 0xa3, 0x75, 0xe1, 0x66, 0xae, 0x9e, 0x7b, 0x55, 0xbf, 0x55, 0x9b, 0xd4, 0x3f, + 0x53, 0xf6, 0xba, 0x6d, 0x8d, 0xb8, 0x21, 0xde, 0xcb, 0xc9, 0x6b, 0xb2, 0xf1, 0xb6, 0xbb, 0x3e, + 0xa9, 0x6a, 0x77, 0x7d, 0xdb, 0xe5, 0x9e, 0xb9, 0x55, 0xeb, 0x68, 0xe7, 0xf7, 0xae, 0x7e, 0x81, + 0x6b, 0xe6, 0x09, 0x9e, 0xe8, 0xe5, 0xee, 0x68, 0x7b, 0x9a, 0x1e, 0x13, 0xac, 0xd1, 0xf6, 0xbe, + 0x2f, 0x35, 0x7f, 0xa6, 0x4f, 0xbc, 0x83, 0x53, 0x54, 0x7f, 0x45, 0x41, 0x4d, 0xd7, 0xc3, 0xbe, + 0x2c, 0x20, 0x36, 0x34, 0x20, 0x28, 0x28, 0x78, 0x90, 0x5e, 0x3c, 0x0c, 0xf9, 0x4f, 0xf3, 0x6b, + 0x2d, 0x33, 0x29, 0xb4, 0x41, 0x93, 0x34, 0x29, 0x79, 0xe6, 0x95, 0xf9, 0x6a, 0x2e, 0xa1, 0x67, + 0x7e, 0xa8, 0xc1, 0xc7, 0x28, 0x98, 0xe4, 0x81, 0x55, 0x09, 0x90, 0xfa, 0xce, 0xa5, 0x78, 0x33, + 0xc9, 0x5f, 0x74, 0x57, 0x1f, 0xaa, 0x96, 0x23, 0xa3, 0x33, 0x46, 0x2f, 0xa6, 0xe4, 0xc7, 0xe5, + 0xbc, 0x21, 0x96, 0x16, 0x86, 0x8f, 0xc5, 0x4d, 0x63, 0x0e, 0x20, 0x12, 0x2e, 0x61, 0x74, 0x1a, + 0x60, 0x1c, 0x74, 0xdd, 0x11, 0x3a, 0x79, 0xb6, 0xca, 0xa2, 0x2b, 0x4e, 0x75, 0x6f, 0x9c, 0xb3, + 0x6c, 0x62, 0x5d, 0xd8, 0x6c, 0x7e, 0x72, 0x89, 0x17, 0x11, 0x12, 0x21, 0x7b, 0xfd, 0x87, 0xd7, + 0x46, 0xe9, 0x19, 0xa7, 0x95, 0xe2, 0x52, 0x7a, 0x6d, 0x24, 0xcd, 0x4e, 0x95, 0x1a, 0x69, 0xaa, + 0x36, 0xcf, 0x95, 0xd6, 0x29, 0x7b, 0x50, 0xcd, 0x0f, 0x97, 0x9c, 0xea, 0xfb, 0x59, 0xeb, 0x2f, + 0x57, 0xa3, 0xdd, 0xf7, 0x2d, 0x57, 0x54, 0xd8, 0x3d, 0x4c, 0x7f, 0x62, 0x85, 0x97, 0x20, 0xe9, + 0x6f, 0x36, 0x44, 0x4c, 0x4c, 0xaa, 0x9a, 0x4d, 0x64, 0x36, 0xf2, 0x65, 0x77, 0x53, 0x5f, 0xd7, + 0x30, 0x6d, 0x6d, 0x48, 0xf6, 0x6f, 0x64, 0x6a, 0xa8, 0x6d, 0xb6, 0xeb, 0x5e, 0x1d, 0xf1, 0xf9, + 0x99, 0x3a, 0x8e, 0x8d, 0x25, 0x81, 0xe0, 0x7b, 0xca, 0x9f, 0x78, 0x03, 0x11, 0x62, 0x9e, 0x5b, + 0xca, 0xf7, 0xc8, 0x5d, 0x3b, 0x1d, 0x7d, 0xc9, 0xa7, 0x9c, 0x00, 0xf3, 0xe6, 0xc5, 0x8f, 0xce, + 0xb3, 0xb5, 0x47, 0x25, 0xf2, 0x7b, 0xe7, 0x73, 0xf0, 0xa9, 0x77, 0xbe, 0x2d, 0x3d, 0x69, 0x9d, + 0xcb, 0x3d, 0x62, 0x43, 0x7e, 0x95, 0x2b, 0xb3, 0xf6, 0xd3, 0x24, 0x61, 0xd4, 0xca, 0x13, 0xc4, + 0x50, 0x0a, 0x66, 0x29, 0x17, 0x85, 0x63, 0x2a, 0x16, 0xbb, 0x65, 0x6e, 0x52, 0x03, 0xe3, 0x9a, + 0xd6, 0x39, 0x5a, 0x0d, 0x96, 0x47, 0xd5, 0x8e, 0x1d, 0x8f, 0x05, 0x97, 0x95, 0x09, 0x66, 0x75, + 0x91, 0x08, 0xc9, 0xcd, 0xc0, 0x91, 0x74, 0x6b, 0xd9, 0x1d, 0xd6, 0x97, 0xf0, 0x36, 0x6e, 0xdb, + 0x60, 0x3b, 0x78, 0x9e, 0x68, 0x36, 0x2d, 0xd9, 0x56, 0xa3, 0x4f, 0x1a, 0x29, 0x3d, 0x3f, 0x56, + 0x53, 0x0a, 0x8a, 0x25, 0x79, 0x10, 0x6b, 0x0e, 0xdd, 0x0d, 0x6d, 0x08, 0x17, 0xd9, 0x0b, 0x95, + 0xb9, 0xfd, 0x25, 0x1a, 0x79, 0x24, 0xf5, 0xdd, 0x6f, 0x59, 0xad, 0x36, 0xb8, 0x51, 0xd6, 0xca, + 0xb5, 0x31, 0x55, 0xe8, 0xaf, 0xe3, 0x6a, 0xb8, 0xe1, 0xd5, 0x17, 0x9e, 0xa1, 0x61, 0xcb, 0xa3, + 0xe3, 0x4f, 0x2d, 0x72, 0x4d, 0xb7, 0xfc, 0x57, 0xf4, 0x01, 0xb7, 0x77, 0x03, 0x3e, 0xfb, 0x9d, + 0xd2, 0xb2, 0xc8, 0x66, 0x44, 0x69, 0x7e, 0xda, 0x0d, 0x95, 0x41, 0x99, 0x62, 0xd9, 0xdf, 0x49, + 0x42, 0x31, 0x86, 0xc6, 0x79, 0xac, 0x83, 0xd2, 0xc7, 0xdc, 0xbb, 0x81, 0x41, 0x82, 0xfe, 0x70, + 0x1e, 0x76, 0x8b, 0x0b, 0x7e, 0x9d, 0x97, 0xa8, 0xbb, 0x21, 0x67, 0x6f, 0xf2, 0xe8, 0x38, 0x6e, + 0x2c, 0x4b, 0x27, 0x93, 0x13, 0x27, 0x49, 0x6e, 0xb8, 0xc6, 0x29, 0x6d, 0x68, 0x04, 0x5d, 0xe5, + 0xbe, 0x7e, 0xfa, 0x37, 0x0d, 0xbb, 0x28, 0x1f, 0x6f, 0x30, 0xa3, 0x2b, 0x7c, 0x71, 0x79, 0x22, + 0x21, 0x45, 0x52, 0xaa, 0x74, 0xff, 0xa3, 0xb4, 0x59, 0x9d, 0xe5, 0x7f, 0x66, 0x57, 0xa9, 0xc7, + 0xf6, 0xe0, 0x35, 0xdd, 0x4b, 0x42, 0x29, 0xd1, 0x75, 0x85, 0xda, 0x0f, 0x76, 0x6d, 0xa6, 0xab, + 0x69, 0xd9, 0x39, 0xd7, 0xe8, 0xe5, 0xd5, 0x1f, 0xba, 0x39, 0xbf, 0x6a, 0xb2, 0xe2, 0x87, 0xe6, + 0xd4, 0xe7, 0x56, 0x79, 0x75, 0x5b, 0x7a, 0x29, 0x99, 0xf9, 0xbd, 0x9f, 0xbc, 0x05, 0xa0, 0x27, + 0x7b, 0x06, 0xf6, 0x27, 0xb6, 0x75, 0x75, 0x81, 0xbe, 0x37, 0x2b, 0x76, 0xa7, 0x6a, 0x7c, 0xca, + 0x93, 0x95, 0x84, 0xb6, 0x8f, 0xf5, 0x69, 0x28, 0xaa, 0xe7, 0xc5, 0x6a, 0xbc, 0x31, 0xad, 0xbc, + 0x71, 0x82, 0x49, 0xf1, 0x50, 0xa6, 0x57, 0x97, 0x9f, 0x55, 0x28, 0x06, 0x6a, 0xae, 0x5b, 0xbe, + 0xc4, 0xa3, 0xa3, 0x69, 0x85, 0x95, 0x97, 0x96, 0x47, 0xa4, 0x2b, 0x1e, 0x75, 0xa7, 0x49, 0x6f, + 0x36, 0x9f, 0x9b, 0x9c, 0xb5, 0x6b, 0xee, 0x7f, 0xe7, 0x6b, 0xbd, 0x6b, 0xdf, 0xd7, 0x41, 0xec, + 0xf7, 0xdb, 0xf9, 0x79, 0xed, 0xc7, 0xe7, 0xff, 0x2b, 0xbb, 0x9a, 0xb2, 0x89, 0x7f, 0xf3, 0x47, + 0xd6, 0xcd, 0x7a, 0x53, 0xc9, 0x37, 0x67, 0x50, 0xb9, 0xd7, 0xf7, 0xff, 0x76, 0x25, 0x6a, 0x82, + 0xe3, 0xf7, 0x66, 0x81, 0x9b, 0x37, 0x7d, 0xfe, 0x2b, 0xeb, 0x4d, 0x99, 0xf7, 0x39, 0x6b, 0xd9, + 0x2d, 0xc7, 0x5f, 0xfe, 0x36, 0xc7, 0xdd, 0x9d, 0xa6, 0xf3, 0xe6, 0xcb, 0xb9, 0xe6, 0x1a, 0xfd, + 0xb2, 0xfd, 0x9a, 0xb6, 0xfb, 0x56, 0x27, 0xad, 0xc1, 0xb6, 0xbe, 0x6e, 0x85, 0x7f, 0x3c, 0xc5, + 0x87, 0x61, 0x76, 0x97, 0xad, 0x36, 0x23, 0xce, 0x8f, 0xda, 0x39, 0xf9, 0xfb, 0x99, 0x55, 0xdb, + 0xcf, 0x6a, 0x75, 0x33, 0x94, 0x1a, 0x0a, 0x6c, 0xfe, 0x25, 0xa3, 0x5e, 0xbc, 0xad, 0xb5, 0x92, + 0xeb, 0x9d, 0xc9, 0x51, 0xc7, 0xdf, 0x77, 0x3c, 0xa7, 0x57, 0xa8, 0x1c, 0x5b, 0x9d, 0xe9, 0xdf, + 0x61, 0xf7, 0x8d, 0xa3, 0x47, 0x25, 0x42, 0x26, 0xcd, 0xa5, 0x01, 0xbf, 0x77, 0xa5, 0xf4, 0x67, + 0x70, 0x64, 0x04, 0x27, 0x56, 0xfc, 0xe9, 0x7f, 0x5a, 0xc9, 0x9a, 0x33, 0x7b, 0xc5, 0x31, 0x74, + 0xa1, 0xbb, 0xbf, 0x6a, 0x28, 0xb5, 0x09, 0xfc, 0xe5, 0xb6, 0xe6, 0x27, 0x99, 0x28, 0xaa, 0xe3, + 0x31, 0x9f, 0x19, 0x8d, 0x5d, 0x15, 0x2c, 0xbb, 0xa5, 0xe1, 0xbb, 0x39, 0x7b, 0x5a, 0xbb, 0x6e, + 0x51, 0x5a, 0xd6, 0xcf, 0xb3, 0x65, 0xab, 0x6b, 0xa6, 0x7d, 0xbf, 0xad, 0xbd, 0xad, 0x5e, 0x51, + 0x66, 0x7f, 0xba, 0x75, 0xb3, 0xee, 0xb0, 0x42, 0x72, 0xed, 0x5a, 0xa7, 0xdf, 0xe1, 0x9d, 0x61, + 0xf6, 0xb2, 0xd5, 0xa6, 0x96, 0xd3, 0xed, 0xa7, 0xfa, 0x6f, 0x86, 0x4d, 0xec, 0xab, 0xab, 0xd8, + 0xad, 0x6e, 0xcb, 0x35, 0x8a, 0x5a, 0x44, 0x45, 0x43, 0x4f, 0x06, 0xe7, 0x21, 0x45, 0xec, 0x34, + 0x47, 0xe9, 0xbb, 0x75, 0x89, 0x33, 0xf6, 0xed, 0x95, 0xf7, 0xee, 0x71, 0xc5, 0x20, 0xbb, 0x39, + 0xa7, 0xaf, 0x2b, 0x41, 0x5d, 0x4b, 0xaf, 0x6a, 0x53, 0x5d, 0xc1, 0xaf, 0x3e, 0x5f, 0x75, 0x31, + 0x6b, 0xa0, 0xc7, 0x6b, 0xd9, 0x97, 0x7d, 0x33, 0xbe, 0x6e, 0x69, 0xdb, 0xe6, 0x51, 0xf7, 0xa6, + 0xe7, 0x56, 0xd1, 0xbd, 0x83, 0x4e, 0xd7, 0x6c, 0x89, 0x7d, 0xd5, 0x47, 0x2b, 0x9b, 0x2c, 0xe3, + 0x9d, 0xb6, 0xb8, 0xb1, 0xaf, 0x6b, 0x9d, 0xaf, 0xa1, 0xdb, 0xb1, 0x95, 0xaf, 0xf6, 0x21, 0x5b, + 0x4a, 0xb3, 0xfb, 0xa6, 0xf8, 0x31, 0xda, 0xe7, 0xa5, 0xad, 0xdf, 0x57, 0x7c, 0x5f, 0xa5, 0xba, + 0x71, 0x87, 0x2e, 0xba, 0x79, 0xfd, 0x39, 0x5f, 0xbb, 0x3a, 0x09, 0x97, 0x61, 0x6e, 0xdb, 0x15, + 0xd7, 0x47, 0x6e, 0xcf, 0x21, 0xde, 0x4a, 0x72, 0x9b, 0xd8, 0x31, 0xfd, 0xaf, 0x3d, 0xed, 0x79, + 0x01, 0x3b, 0xe7, 0x13, 0x28, 0xb7, 0xb5, 0x27, 0xde, 0x9a, 0x55, 0x69, 0xeb, 0xf7, 0xa9, 0x2f, + 0xb9, 0x8d, 0xd9, 0xbf, 0x8d, 0xf5, 0xbf, 0x8d, 0xcf, 0xbb, 0xcd, 0xfd, 0xb8, 0x43, 0xa6, 0xbd, + 0x79, 0x8a, 0x3b, 0x53, 0x65, 0x74, 0x74, 0x98, 0x3a, 0x5b, 0x73, 0xd6, 0xae, 0x77, 0xe7, 0xea, + 0x36, 0x9f, 0x06, 0x05, 0x29, 0xbd, 0xa7, 0xb1, 0x31, 0xb9, 0x79, 0x36, 0x4f, 0x4b, 0x2c, 0xe6, + 0x8b, 0xa5, 0x50, 0x8e, 0xe3, 0xb5, 0x27, 0xda, 0xf3, 0x95, 0xe8, 0x7a, 0x2a, 0x29, 0x29, 0xaf, + 0xce, 0x33, 0x61, 0x53, 0xab, 0x8b, 0x45, 0x77, 0x39, 0x66, 0xb3, 0x6b, 0xb6, 0x51, 0xd9, 0xeb, + 0x6e, 0xf8, 0x31, 0x5e, 0x3e, 0x1a, 0xfd, 0xe6, 0xc1, 0x79, 0x11, 0x18, 0x22, 0x1f, 0xd0, 0x12, + 0x67, 0x56, 0x3c, 0x8c, 0xbb, 0x61, 0x95, 0x50, 0xfc, 0x3d, 0xa6, 0xaf, 0x75, 0xb3, 0x65, 0xc5, + 0x2a, 0x86, 0x1f, 0x62, 0x2a, 0xcb, 0x13, 0xdd, 0xf1, 0x6d, 0x9f, 0x9a, 0xfc, 0xd5, 0xa6, 0x9d, + 0x35, 0xf1, 0x77, 0xae, 0x9a, 0x4f, 0x72, 0x3c, 0x69, 0x75, 0x70, 0x61, 0x6e, 0xdd, 0xff, 0x6a, + 0x00, 0x67, 0x6d, 0xcb, 0x8f, 0x58, 0xc4, 0x27, 0x6b, 0x99, 0x0f, 0xf9, 0xca, 0x8a, 0xc9, 0x6b, + 0xde, 0xb5, 0x7b, 0xa6, 0xbb, 0x76, 0x1f, 0x2d, 0x2d, 0x20, 0x45, 0x78, 0x61, 0xfe, 0x26, 0x6f, + 0x96, 0xa3, 0x8d, 0xd9, 0x45, 0x9e, 0x46, 0x6e, 0x77, 0xa7, 0xfb, 0x34, 0x39, 0x45, 0xd9, 0x0c, + 0xaa, 0x1f, 0xe7, 0x02, 0x27, 0x75, 0x66, 0x26, 0x26, 0xc5, 0xfb, 0x3d, 0x57, 0x4d, 0x34, 0x4b, + 0x9c, 0x9d, 0x65, 0x73, 0x55, 0x8d, 0x59, 0xfe, 0x99, 0x1f, 0x95, 0x5d, 0x9e, 0x68, 0x9a, 0x0b, + 0xe1, 0x26, 0x29, 0xdf, 0x8f, 0x85, 0x7f, 0x21, 0xed, 0x68, 0xdb, 0x5e, 0xe8, 0xf3, 0xd9, 0x33, + 0x6b, 0xac, 0x0d, 0xf5, 0x2c, 0xda, 0x68, 0xf8, 0xf9, 0xc5, 0x20, 0xca, 0xfd, 0x91, 0x7f, 0x76, + 0x7a, 0x37, 0x19, 0x2e, 0xb1, 0x87, 0x4c, 0xff, 0x75, 0xb3, 0x7c, 0x8a, 0x9f, 0x9b, 0xfc, 0x64, + 0x3e, 0x79, 0x49, 0x90, 0x78, 0x42, 0x96, 0x97, 0xc6, 0x7b, 0xe6, 0x5f, 0x6f, 0xf7, 0x6b, 0x55, + 0x01, 0x3d, 0xa6, 0xac, 0x53, 0xdb, 0x1e, 0x27, 0xeb, 0x2d, 0xc9, 0x9e, 0x92, 0xdd, 0x86, 0x02, + 0x1a, 0x1d, 0xed, 0xd7, 0x1a, 0x27, 0xbe, 0x2b, 0xc9, 0x6a, 0xd7, 0x8b, 0x94, 0x41, 0x49, 0x7e, + 0xe3, 0xb7, 0xda, 0xe2, 0xd5, 0x98, 0x33, 0x6d, 0xc5, 0xc7, 0x2e, 0x3b, 0x5f, 0x67, 0x81, 0x6e, + 0x5a, 0xa5, 0x7c, 0xb3, 0x50, 0x73, 0x20, 0xa6, 0x6e, 0x6b, 0x8b, 0xff, 0x69, 0xc8, 0x04, 0xa4, + 0x79, 0x76, 0x65, 0x72, 0x34, 0xf8, 0xbb, 0xd9, 0x19, 0x57, 0x00, 0x75, 0x6a, 0xd1, 0xdd, 0xc7, + 0xec, 0x90, 0x5f, 0x41, 0xea, 0x6c, 0x6b, 0x94, 0xfd, 0x31, 0xda, 0xe8, 0xd5, 0x1c, 0x38, 0x73, + 0xd7, 0x12, 0x69, 0x69, 0x8b, 0xad, 0xaa, 0x1b, 0x6c, 0x2d, 0x3b, 0x7d, 0xf1, 0xff, 0x8c, 0x4b, + 0x36, 0x57, 0xa5, 0xa4, 0x45, 0x6b, 0x5f, 0x65, 0xaa, 0x79, 0x17, 0x97, 0x2f, 0xee, 0x75, 0x39, + 0xac, 0x45, 0xb8, 0xcb, 0x4f, 0x5c, 0xaa, 0x15, 0x71, 0x13, 0xdb, 0x10, 0x13, 0xa7, 0xad, 0x6f, + 0xd9, 0x47, 0xbe, 0x3d, 0xab, 0x67, 0xcd, 0xff, 0x2d, 0xa5, 0xfb, 0x9d, 0x41, 0xa9, 0xf7, 0x96, + 0xcc, 0xc5, 0xc5, 0xa7, 0x5a, 0x76, 0xa6, 0xb3, 0xb6, 0xe6, 0xa2, 0xee, 0x6e, 0x3b, 0x6e, 0x76, + 0xef, 0xf3, 0xa9, 0xa9, 0xbe, 0xf2, 0xdf, 0xfa, 0x7a, 0xe3, 0xe5, 0xf6, 0x3b, 0x2b, 0xa7, 0xaf, + 0x7d, 0x43, 0xe9, 0xef, 0x6e, 0xa9, 0x0d, 0xde, 0x8b, 0xcf, 0xc7, 0x3a, 0xb1, 0x2b, 0xc9, 0xa9, + 0xbf, 0x5e, 0x81, 0xca, 0x2d, 0xb1, 0x77, 0x1a, 0xbe, 0x6b, 0xbe, 0x3d, 0x73, 0xa3, 0x67, 0x74, + 0x17, 0x7a, 0x62, 0xb7, 0x19, 0x69, 0xd2, 0xa3, 0x3f, 0xb7, 0xeb, 0x99, 0x4f, 0xab, 0xe2, 0x5b, + 0x77, 0x1d, 0xc7, 0x78, 0xe3, 0x33, 0x99, 0x01, 0xc6, 0x79, 0xeb, 0x73, 0x4b, 0x25, 0x6e, 0x64, + 0x2d, 0x3c, 0xf4, 0x66, 0x2b, 0x9e, 0xe3, 0xb7, 0x96, 0x08, 0x6f, 0x1a, 0x36, 0xff, 0xb9, 0x97, + 0xfd, 0x6d, 0x76, 0x3b, 0xb9, 0x8b, 0xff, 0x6f, 0xfc, 0xd1, 0xbb, 0xda, 0xa2, 0x35, 0xe7, 0x56, + 0x1e, 0x12, 0x87, 0x56, 0x1d, 0xde, 0x3b, 0xd8, 0x2b, 0xff, 0x69, 0xf1, 0xd3, 0xf5, 0xbd, 0xbb, + 0xa3, 0x9b, 0xec, 0xa8, 0x4f, 0x62, 0x73, 0x6f, 0x6c, 0x65, 0x74, 0x65, 0xeb, 0xd7, 0xca, 0xbc, + 0x3f, 0x61, 0xb7, 0xa8, 0xab, 0x86, 0x57, 0x18, 0x14, 0x6e, 0xb5, 0x6d, 0x98, 0x31, 0x31, 0x53, + 0xee, 0x9d, 0xb5, 0x90, 0x94, 0x36, 0x77, 0xa8, 0x5b, 0x6d, 0x1a, 0xf5, 0xad, 0x6a, 0x10, 0xe5, + 0xf9, 0xbf, 0x5a, 0x4b, 0xc1, 0xb1, 0x6d, 0xad, 0x45, 0x6b, 0x37, 0x1d, 0xbe, 0xd9, 0x43, 0xbe, + 0xd6, 0x79, 0xb7, 0xed, 0x6f, 0x59, 0x25, 0xb6, 0x55, 0x68, 0x15, 0x98, 0x36, 0x59, 0xa8, 0x4f, + 0xc9, 0x2d, 0x57, 0xb2, 0x50, 0x5d, 0x2d, 0x64, 0xff, 0xb7, 0x9a, 0x1b, 0xd3, 0x97, 0x30, 0x78, + 0x8c, 0xa3, 0x24, 0x66, 0x98, 0x95, 0x63, 0x63, 0x59, 0x0f, 0x13, 0x7e, 0x5f, 0x43, 0x52, 0x54, + 0x5f, 0x53, 0x45, 0xbd, 0x5d, 0x2f, 0x1a, 0x5f, 0x4e, 0x4f, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x49, + 0x4e, 0x47, 0xe4, 0xcf, 0x45, 0x56, 0xb6, 0x75, 0xe0, 0xba, 0xb3, 0xfd, 0xc7, 0x2e, 0xea, 0x8e, + 0xfb, 0x6b, 0xec, 0xf7, 0xde, 0xbe, 0x38, 0x3b, 0x09, 0x44, 0x50, 0x52, 0x21, 0x8e, 0x41, 0x54, + 0x74, 0x89, 0x23, 0x3d, 0x46, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x2e, 0x87, 0xf1, 0xea, 0x90, 0x03, + 0x6e, 0xd7, 0x55, 0xe4, 0x4c, 0x59, 0x20, 0xa7, 0x3e, 0x51, 0xcd, 0x47, 0x43, 0x43, 0xee, 0xf7, + 0x07, 0x7e, 0xa9, 0xbf, 0x35, 0x47, 0x4e, 0x55, 0x1e, 0xf9, 0x24, 0xde, 0xd6, 0xef, 0x34, 0x43, + 0x21, 0xde, 0xef, 0x34, 0x6b, 0x16, 0x56, 0x29, 0x77, 0x57, 0x1a, 0x4e, 0x71, 0x9a, 0xed, 0x9f, + 0x3d, 0x34, 0x30, 0x35, 0x29, 0x20, 0x7c, 0x7c, 0x61, 0xb5, 0x64, 0x1c, 0x95, 0x73, 0x69, 0x3c, + 0x66, 0x69, 0x3b, 0x37, 0x26, 0x44, 0x28, 0x99, 0x77, 0x5d, 0x72, 0x4e, 0xc8, 0xfe, 0xb3, 0x83, + 0x12, 0x65, 0x14, 0x68, 0x28, 0x28, 0x05, 0xb4, 0x45, 0xa5, 0x00, 0x5e, 0x91, 0xb4, 0x9e, 0xff, + 0xf8, 0x05, 0x33, 0x31, 0xd3, 0xfe, 0x4b, 0xc1, 0x62, 0x89, 0xc9, 0x4d, 0x53, 0x24, 0xc9, 0xb3, + 0xbf, 0x6d, 0x5d, 0x6a, 0xad, 0x17, 0x62, 0x7f, 0xe5, 0xbb, 0xde, 0x4d, 0x72, 0x97, 0xfa, 0xf6, + 0xc9, 0x58, 0x3b, 0x9a, 0x28, 0x22, 0x61, 0x4d, 0x3a, 0xb5, 0x4b, 0xaa, 0x76, 0x6f, 0xbc, 0x59, + 0xb5, 0xe7, 0xe6, 0xd7, 0xb5, 0xb8, 0x47, 0x9b, 0xbf, 0x67, 0x2f, 0x86, 0xbe, 0x22, 0x2e, 0x45, + 0x95, 0x47, 0xfb, 0xa2, 0x51, 0x52, 0x10, 0x0d, 0x1f, 0x20, 0x6d, 0xa8, 0x5b, 0xf9, 0xe5, 0x01, + 0xf5, 0xf5, 0xa9, 0xa3, 0xda, 0xfb, 0x3a, 0xbb, 0x6a, 0x67, 0x3f, 0xb6, 0x17, 0x5d, 0x2b, 0xbb, + 0x8c, 0xa7, 0xb3, 0x70, 0x6c, 0x61, 0x6e, 0x6e, 0xda, 0xd7, 0xb3, 0xee, 0x9d, 0x61, 0xa8, 0x81, + 0xb7, 0xa4, 0xc9, 0xa6, 0x72, 0x31, 0x33, 0x31, 0xa0, 0x78, 0x70, 0xdb, 0xa1, 0xf5, 0xae, 0xc9, + 0x8d, 0xba, 0x8b, 0xaf, 0xdf, 0xa6, 0xf9, 0xdb, 0xae, 0x3f, 0x01, 0xda, 0xfe, 0x2f, 0xcd, 0x7a, + 0xfd, 0xfd, 0x9f, 0xac, 0x97, 0x9b, 0xae, 0x7a, 0xa3, 0xd3, 0x7d, 0x4f, 0xc7, 0xda, 0xd6, 0xb1, + 0xbf, 0xcd, 0x8d, 0x69, 0x01, 0xaf, 0xf6, 0xa9, 0xfd, 0x8b, 0x95, 0xa4, 0xe9, 0xb5, 0xcd, 0xbf, + 0x63, 0xc1, 0xad, 0xae, 0x2d, 0x39, 0x9f, 0xc1, 0x7a, 0xf2, 0x9f, 0xb6, 0xbf, 0x29, 0xcf, 0x8e, + 0xe1, 0xa9, 0x9d, 0x09, 0x7b, 0xed, 0x72, 0x01, 0xaf, 0x7d, 0x1f, 0xb5, 0x6a, 0xf3, 0x23, 0xac, + 0x80, 0x20, 0x6e, 0x6d, 0x7c, 0x2d, 0x9b, 0xaa, 0x3d, 0x7d, 0xac, 0x57, 0xb6, 0xf9, 0xa5, 0x7e, + 0xcd, 0xd9, 0xf9, 0x0a, 0xaf, 0xd7, 0x7d, 0xe0, 0xa8, 0x72, 0xa5, 0x20, 0xea, 0x96, 0x89, 0xb8, + 0xd5, 0xf5, 0x34, 0x6f, 0x6e, 0xfc, 0x3f, 0xb5, 0x2a, 0x6f, 0x24, 0xfc, 0x49, 0xa7, 0xe1, 0x57, + 0xfe, 0xa2, 0x05, 0x6e, 0xad, 0x2d, 0x9f, 0xef, 0x32, 0x84, 0x64, 0x65, 0x72, 0xa1, 0x73, 0xeb, + 0x77, 0xf9, 0x59, 0x27, 0x26, 0x9d, 0x71, 0xbe, 0xb7, 0xc5, 0x9a, 0xb2, 0xc5, 0xf4, 0x6f, 0xe9, + 0x1b, 0x15, 0xbf, 0x47, 0x05, 0x6e, 0x2d, 0x39, 0x7e, 0x93, 0x6b, 0xd4, 0x85, 0x93, 0x77, 0x2b, + 0x99, 0x3b, 0x6b, 0x61, 0x3a, 0x60, 0x70, 0xd9, 0x35, 0x1a, 0xa5, 0xa7, 0x3b, 0x34, 0x64, 0x3b, + 0x20, 0xdd, 0x9b, 0xd5, 0x05, 0xb1, 0x18, 0x6d, 0xf3, 0x9f, 0xed, 0x35, 0xd6, 0x56, 0xa9, 0xab, + 0x6f, 0x35, 0x59, 0x39, 0x65, 0xbb, 0xaa, 0xe6, 0x63, 0x7b, 0xc1, 0x50, 0x67, 0x7e, 0x34, 0xa9, + 0x57, 0xa6, 0xaf, 0xdd, 0x4d, 0xaf, 0x26, 0x59, 0xac, 0x87, 0xd6, 0xf3, 0x9d, 0xf5, 0x5b, 0x6a, + 0x95, 0x33, 0x55, 0x69, 0xe6, 0xa1, 0xf3, 0x15, 0x07, 0x70, 0xe4, 0x69, 0x08, 0x9d, 0xd1, 0x27, + 0xde, 0x07, 0x6b, 0xcb, 0xe3, 0xe6, 0xce, 0x7d, 0x4e, 0x95, 0x77, 0x9d, 0xf4, 0xb9, 0xbb, 0x67, + 0xdc, 0x8f, 0x53, 0xde, 0x8a, 0x79, 0x9f, 0x37, 0x0f, 0xa9, 0x4f, 0xa5, 0x48, 0xdc, 0x20, 0xe7, + 0x05, 0x65, 0x39, 0x9f, 0xfb, 0x6c, 0x47, 0x7e, 0x77, 0x9d, 0x95, 0xaf, 0x75, 0x75, 0xa5, 0x7b, + 0x78, 0xb9, 0x47, 0x22, 0x81, 0xef, 0x2b, 0x59, 0x1f, 0x29, 0xfd, 0x99, 0xc5, 0x22, 0x12, 0xb8, + 0x03, 0x92, 0x45, 0xde, 0xb9, 0x2b, 0xdf, 0x37, 0xcf, 0xae, 0x61, 0x2d, 0x3b, 0x6a, 0xad, 0xd9, + 0xe3, 0x1b, 0x20, 0xee, 0x69, 0xa3, 0x5b, 0x45, 0xee, 0x2d, 0xaf, 0x6e, 0xa7, 0x7f, 0xf7, 0x61, + 0x5f, 0xa5, 0x5d, 0xa7, 0x74, 0x45, 0xa5, 0xe6, 0xf6, 0x8f, 0xd8, 0x81, 0xef, 0x7a, 0xb7, 0xe9, + 0x5b, 0xd3, 0x53, 0x00, 0x89, 0x4c, 0x45, 0x6a, 0x6c, 0x04, 0x93, 0x49, 0x9b, 0xb7, 0xa6, 0x6b, + 0x96, 0xb4, 0x8f, 0x8b, 0x9e, 0xf2, 0xed, 0xe6, 0x8f, 0x3f, 0x9e, 0xe7, 0x99, 0xb7, 0x7d, 0xab, + 0x3a, 0x5b, 0x6b, 0x47, 0x9d, 0x50, 0x8b, 0x4e, 0x19, 0x66, 0x69, 0x78, 0x36, 0x34, 0x3e, 0xef, + 0xcf, 0x75, 0xde, 0xe7, 0xf5, 0xf5, 0x3e, 0x5d, 0x1f, 0x5b, 0xad, 0xad, 0xf3, 0xf6, 0x3a, 0x4b, + 0xd5, 0x5b, 0x8f, 0x4b, 0xe7, 0xfd, 0x07, 0xf6, 0xab, 0xe6, 0xdd, 0xf1, 0x7d, 0xaa, 0xf9, 0xc7, + 0xda, 0xaa, 0xa0, +}; + +static unsigned char buf[18830]; + +int main() { + + unsigned long cksum = adler32(0, NULL, 0); + + decompress_zx02(compressed, buf); + cksum = adler32(cksum, buf, 18830); + + return cksum == 0xf748269d ? 0 : 1; +} From 13ddd6392cb24b90d585424bfe2fa7f7ca8f5afe Mon Sep 17 00:00:00 2001 From: Piotr Fusik <fox@scene.pl> Date: Wed, 14 May 2025 15:15:32 +0200 Subject: [PATCH 2677/2710] zlib: Make crc32 8 bytes shorter and 3 cycles/byte faster --- libsrc/zlib/crc32.s | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/libsrc/zlib/crc32.s b/libsrc/zlib/crc32.s index 41b5fe9db..f80b1f437 100644 --- a/libsrc/zlib/crc32.s +++ b/libsrc/zlib/crc32.s @@ -1,6 +1,7 @@ ; ; 2001-11-14, Piotr Fusik ; 2018-05-20, Christian Kruger +; 2025-05-14, Piotr Fusik ; ; unsigned long __fastcall__ crc32 (unsigned long crc, ; const unsigned char* buf, @@ -9,7 +10,7 @@ .export _crc32 - .import compleax, incsp2, incsp4, popptr1, popeax + .import compleax, incsp4, popptr1, popeax .importzp sreg, ptr1, ptr2, tmp1, tmp2 POLYNOMIAL = $EDB88320 @@ -58,15 +59,12 @@ make_table: inx bne @L1 inc table_initialised -RET: rts _crc32: -; ptr2 = (len & 0xff) == 0 ? len : len + 0x100; - tay - beq @L1 +; ptr2 = len + 0x100 inx -@L1: sta ptr2 + sta ptr2 stx ptr2+1 ; ptr1 = buf jsr popptr1 @@ -78,20 +76,15 @@ _crc32: bne @dont_make jsr make_table @dont_make: -; eax = crc - jsr popeax -; if (len == 0) return crc; - ldy ptr2 - bne @L2 - ldy ptr2+1 - beq RET -@L2: ; eax = ~crc + jsr popeax jsr compleax stx tmp2 ldy #0 +@L1: cpy ptr2 + beq @low_end ; crc = (crc >> 8) ^ table[(crc & 0xff) ^ *p++]; -@L3: eor (ptr1),y +@L2: eor (ptr1),y tax lda table_0,x eor tmp2 @@ -106,12 +99,12 @@ _crc32: sta sreg+1 lda tmp1 iny - bne @L4 + bne @L1 inc ptr1+1 -@L4: dec ptr2 - bne @L3 + jmp @L1 +@low_end: dec ptr2+1 - bne @L3 + bne @L2 ldx tmp2 jmp compleax From 9cdba1b6d850c50aee2cb559ccffa3cec3910752 Mon Sep 17 00:00:00 2001 From: John Murkerson <john@zifmia.org> Date: Wed, 14 May 2025 14:37:51 -0400 Subject: [PATCH 2678/2710] Fix Atari buffer overrun on keyboard EOF --- libsrc/atari/read.s | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libsrc/atari/read.s b/libsrc/atari/read.s index 228ca9ee2..b50bd2856 100644 --- a/libsrc/atari/read.s +++ b/libsrc/atari/read.s @@ -147,6 +147,7 @@ icbll_copy: sta dataptr+1 lda ICBLL,x sta copylen + beq copied ; length = 0 if EOF pha ; remember for return value ldy #0 ldx index @@ -159,7 +160,7 @@ copy: lda linebuf,x bne copy pla ; length - pha ; save length to return at okdone +copied: pha ; save length to return at okdone clc adc index From 500887ec23e57cd2c4d2db88f3996530eb97ed4f Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Sat, 17 May 2025 17:18:05 +0200 Subject: [PATCH 2679/2710] Fix #2599. The compiler handled all functions returning an int but without a "return" statement by silently adding "return 0" instead of emitting a warning. This is the desired behavior for the "main" function in C99 and above, but the compiler applied it to all functions. --- src/cc65/function.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cc65/function.c b/src/cc65/function.c index fed0349dd..3123079d3 100644 --- a/src/cc65/function.c +++ b/src/cc65/function.c @@ -636,7 +636,9 @@ void NewFunc (SymEntry* Func, FuncDesc* D) /* If this is the main function in a C99 environment returning an int, ** let it always return zero. Otherwise output a warning. */ - if (IS_Get (&Standard) >= STD_C99 && GetUnqualRawTypeCode (ReturnType) == T_INT) { + if (F_IsMainFunc (CurrentFunc) && + IS_Get (&Standard) >= STD_C99 && + GetUnqualRawTypeCode (ReturnType) == T_INT) { g_getimmed (CF_INT | CF_CONST, 0, 0); } else if (IS_Get (&WarnReturnType)) { Warning ("Control reaches end of non-void function [-Wreturn-type]"); From 81e1312416c4e290fefbc4079be8f67850109eb4 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Tue, 20 May 2025 13:50:33 +0200 Subject: [PATCH 2680/2710] Remove the unused function ClearDiagnosticStrBufs(). --- src/cc65/error.c | 13 +------------ src/cc65/error.h | 3 --- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/src/cc65/error.c b/src/cc65/error.c index d6e7d7cbd..6575a1e54 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -506,23 +506,12 @@ void InitDiagnosticStrBufs (void) void DoneDiagnosticStrBufs (void) /* Done with tracked string buffers used for diagnostics */ -{ - ClearDiagnosticStrBufs (); - DoneCollection (&DiagnosticStrBufs); -} - - - -void ClearDiagnosticStrBufs (void) -/* Free all tracked string buffers */ { unsigned I; - for (I = 0; I < CollCount (&DiagnosticStrBufs); ++I) { SB_Done (CollAtUnchecked (&DiagnosticStrBufs, I)); } - - CollDeleteAll (&DiagnosticStrBufs); + DoneCollection (&DiagnosticStrBufs); } diff --git a/src/cc65/error.h b/src/cc65/error.h index 5af862f9f..3cb2f75a9 100644 --- a/src/cc65/error.h +++ b/src/cc65/error.h @@ -159,9 +159,6 @@ void InitDiagnosticStrBufs (void); void DoneDiagnosticStrBufs (void); /* Done with tracked string buffers used for diagnostics */ -void ClearDiagnosticStrBufs (void); -/* Free all tracked string buffers */ - struct StrBuf* NewDiagnosticStrBuf (void); /* Get a new tracked string buffer */ From c7c7377f7aaef38a51ad1bb37f2fda555b9a87d4 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Tue, 20 May 2025 13:50:33 +0200 Subject: [PATCH 2681/2710] Remove the unused function ClearDiagnosticStrBufs(). --- src/cc65/error.c | 13 +------------ src/cc65/error.h | 3 --- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/src/cc65/error.c b/src/cc65/error.c index d6e7d7cbd..6575a1e54 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -506,23 +506,12 @@ void InitDiagnosticStrBufs (void) void DoneDiagnosticStrBufs (void) /* Done with tracked string buffers used for diagnostics */ -{ - ClearDiagnosticStrBufs (); - DoneCollection (&DiagnosticStrBufs); -} - - - -void ClearDiagnosticStrBufs (void) -/* Free all tracked string buffers */ { unsigned I; - for (I = 0; I < CollCount (&DiagnosticStrBufs); ++I) { SB_Done (CollAtUnchecked (&DiagnosticStrBufs, I)); } - - CollDeleteAll (&DiagnosticStrBufs); + DoneCollection (&DiagnosticStrBufs); } diff --git a/src/cc65/error.h b/src/cc65/error.h index 5af862f9f..3cb2f75a9 100644 --- a/src/cc65/error.h +++ b/src/cc65/error.h @@ -159,9 +159,6 @@ void InitDiagnosticStrBufs (void); void DoneDiagnosticStrBufs (void); /* Done with tracked string buffers used for diagnostics */ -void ClearDiagnosticStrBufs (void); -/* Free all tracked string buffers */ - struct StrBuf* NewDiagnosticStrBuf (void); /* Get a new tracked string buffer */ From b5b7ea422e8615399b8653ca10f5752338608ac0 Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Wed, 21 May 2025 11:04:21 +0200 Subject: [PATCH 2682/2710] Make sure, the command line setting for the "Unreachable code" warning is checked in all cases before outputting such a warning. Fixes #2655. --- src/cc65/error.c | 12 ++++++++++++ src/cc65/error.h | 5 +++++ src/cc65/stmt.c | 4 ++-- src/cc65/testexpr.c | 2 +- test/misc/Makefile | 5 +++++ test/misc/bug2655.c | 18 ++++++++++++++++++ test/misc/bug2655.ref | 2 ++ 7 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 test/misc/bug2655.c create mode 100644 test/misc/bug2655.ref diff --git a/src/cc65/error.c b/src/cc65/error.c index 6575a1e54..b67fa1afd 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -379,6 +379,18 @@ void PPWarning (const char* Format, ...) +void UnreachableCodeWarning (void) +/* Print a warning about unreachable code at the current location if these +** warnings are enabled. +*/ +{ + if (IS_Get (&WarnUnreachableCode)) { + Warning ("Unreachable code"); + } +} + + + IntStack* FindWarning (const char* Name) /* Search for a warning in the WarnMap table and return a pointer to the ** intstack that holds its state. Return NULL if there is no such warning. diff --git a/src/cc65/error.h b/src/cc65/error.h index 3cb2f75a9..b3cdc49ab 100644 --- a/src/cc65/error.h +++ b/src/cc65/error.h @@ -127,6 +127,11 @@ void LIWarning (errcat_t EC, LineInfo* LI, const char* Format, ...) attribute (( void PPWarning (const char* Format, ...) attribute ((format (printf, 1, 2))); /* Print a warning message. For use within the preprocessor */ +void UnreachableCodeWarning (void); +/* Print a warning about unreachable code at the current location if these +** warnings are enabled. +*/ + IntStack* FindWarning (const char* Name); /* Search for a warning in the WarnMap table and return a pointer to the ** intstack that holds its state. Return NULL if there is no such warning. diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index c86f25f8a..e28b844b5 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -188,8 +188,8 @@ static int IfStatement (void) /* If the if expression was always true, the code in the else branch ** is never executed. Output a warning if this is the case. */ - if (TestResult == TESTEXPR_TRUE && IS_Get (&WarnUnreachableCode)) { - Warning ("Unreachable code"); + if (TestResult == TESTEXPR_TRUE) { + UnreachableCodeWarning (); } /* Define the target for the first test */ diff --git a/src/cc65/testexpr.c b/src/cc65/testexpr.c index 14160f13f..ced563d01 100644 --- a/src/cc65/testexpr.c +++ b/src/cc65/testexpr.c @@ -76,7 +76,7 @@ unsigned Test (unsigned Label, int Invert) /* Constant rvalue */ if (!Invert && Expr.IVal == 0) { g_jump (Label); - Warning ("Unreachable code"); + UnreachableCodeWarning (); } else if (Invert && Expr.IVal != 0) { g_jump (Label); } diff --git a/test/misc/Makefile b/test/misc/Makefile index f5225b14b..48293e504 100644 --- a/test/misc/Makefile +++ b/test/misc/Makefile @@ -134,6 +134,11 @@ $(WORKDIR)/endless.$1.$2.prg: endless.c | $(WORKDIR) # these need reference data that can't be generated by a host-compiled program, # in a useful way +$(WORKDIR)/bug2655.$1.$2.prg: bug2655.c $(ISEQUAL) | $(WORKDIR) + $(if $(QUIET),echo misc/bug2655.$1.$2.prg) + $(CC65) -t sim$2 -$1 -o $$@ $$< 2>$(WORKDIR)/bug2655.$1.$2.out + $(ISEQUAL) $(WORKDIR)/bug2655.$1.$2.out bug2655.ref + $(WORKDIR)/limits.$1.$2.prg: limits.c $(ISEQUAL) | $(WORKDIR) $(if $(QUIET),echo misc/limits.$1.$2.prg) $(CC65) -t sim$2 -$1 -o $$(@:.prg=.s) $$< $(NULLERR) diff --git a/test/misc/bug2655.c b/test/misc/bug2655.c new file mode 100644 index 000000000..e0b1c939c --- /dev/null +++ b/test/misc/bug2655.c @@ -0,0 +1,18 @@ +void f1(void) +{ + if (1) { + f1(); + } else { + f1(); + } +} + +void f2(void) +{ + if (0) { + f2(); + } else { + f2(); + } +} + diff --git a/test/misc/bug2655.ref b/test/misc/bug2655.ref new file mode 100644 index 000000000..99e2d6698 --- /dev/null +++ b/test/misc/bug2655.ref @@ -0,0 +1,2 @@ +bug2655.c:5: Warning: Unreachable code +bug2655.c:12: Warning: Unreachable code From 7be7ce4e9ba6ec93ac009c6bee12fc27ef36690b Mon Sep 17 00:00:00 2001 From: Kugel Fuhr <98353208+kugelfuhr@users.noreply.github.com> Date: Wed, 21 May 2025 11:21:40 +0200 Subject: [PATCH 2683/2710] Remove tabs. --- src/cc65/error.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/error.c b/src/cc65/error.c index b67fa1afd..db0debf8c 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -385,7 +385,7 @@ void UnreachableCodeWarning (void) */ { if (IS_Get (&WarnUnreachableCode)) { - Warning ("Unreachable code"); + Warning ("Unreachable code"); } } From 6628c4ff4333d82c40fa13db9b6e4356ce405951 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 24 May 2025 18:34:44 +0200 Subject: [PATCH 2684/2710] fix cpeekc/cpeekcolor/cpeekrevers for atari 800 --- libsrc/atari/cpeekc.s | 35 +++++++++++++++++++++++ libsrc/atari/cpeekchar.s | 35 ----------------------- libsrc/atari/cpeekcolor.s | 8 ++++++ libsrc/atari/cpeekrevers.s | 18 ++++++++++++ targettest/conio.c | 57 ++++++++++++++++++++++++++++++++------ 5 files changed, 109 insertions(+), 44 deletions(-) create mode 100644 libsrc/atari/cpeekc.s delete mode 100644 libsrc/atari/cpeekchar.s create mode 100644 libsrc/atari/cpeekcolor.s create mode 100644 libsrc/atari/cpeekrevers.s diff --git a/libsrc/atari/cpeekc.s b/libsrc/atari/cpeekc.s new file mode 100644 index 000000000..a51e477a6 --- /dev/null +++ b/libsrc/atari/cpeekc.s @@ -0,0 +1,35 @@ +; +; 2016-02-28, Groepaz +; 2017-06-21, Greg King +; +; char cpeekc (void); +; + + .export _cpeekc + + .include "atari.inc" + + +_cpeekc: + lda OLDCHR ; get char under cursor + and #<~$80 ; remove reverse bit + + ;; convert internal screen code to AtSCII + + tay + and #%01100000 + asl a + asl a + rol a + rol a + tax + tya + eor intats,x + ldx #>$0000 + rts + + .rodata +intats: .byte %00100000 ; -> %001xxxxx + .byte %01100000 ; -> %010xxxxx + .byte %01000000 ; -> %000xxxxx + .byte %00000000 ; -> %011xxxxx diff --git a/libsrc/atari/cpeekchar.s b/libsrc/atari/cpeekchar.s deleted file mode 100644 index ff502074d..000000000 --- a/libsrc/atari/cpeekchar.s +++ /dev/null @@ -1,35 +0,0 @@ - - .export _cpeekc - - .import mul40 - .importzp ptr4 - - .include "atari.inc" - - .segment "CODE" - -_cpeekc: - - lda ROWCRS - jsr mul40 ; destroys tmp4 - clc - adc SAVMSC ; add start of screen memory - sta ptr4 - txa - adc SAVMSC+1 - sta ptr4+1 - - ldy COLCRS - lda (ptr4),y ; get char - tax - - ;; convert to asc - - ;; FIXME: ugly hack here to make tetris fx work :=P - lda #' ' - cpx #0 - beq @l - lda #0 -@l: - ldx #0 - rts diff --git a/libsrc/atari/cpeekcolor.s b/libsrc/atari/cpeekcolor.s new file mode 100644 index 000000000..ed275ec95 --- /dev/null +++ b/libsrc/atari/cpeekcolor.s @@ -0,0 +1,8 @@ +; +; 2017-06-03, Greg King +; +; unsigned char cpeekcolor (void); +; + + .import return1 + .export _cpeekcolor := return1 ; always COLOR_WHITE diff --git a/libsrc/atari/cpeekrevers.s b/libsrc/atari/cpeekrevers.s new file mode 100644 index 000000000..15b26fcd4 --- /dev/null +++ b/libsrc/atari/cpeekrevers.s @@ -0,0 +1,18 @@ +; +; 2017-06-21, Greg King +; +; unsigned char cpeekrevers (void); +; + + .export _cpeekrevers + + .include "atari.inc" + + +_cpeekrevers: + lda OLDCHR ; get char under cursor + and #$80 ; get reverse bit + asl a + tax ; ldx #>$0000 + rol a ; return boolean value + rts diff --git a/targettest/conio.c b/targettest/conio.c index efe82d7c6..f65f886c5 100644 --- a/targettest/conio.c +++ b/targettest/conio.c @@ -32,6 +32,48 @@ static char grid[5][5] = { {CH_LLCORNER, CH_HLINE, CH_BTEE, CH_HLINE, CH_LRCORNER} }; +void colortest(void) +{ + unsigned int i, j; + cputsxy(0, 2, "Colors:" ); + for (i = 0; i < 3; ++i) { + gotoxy(i, 3 + i); + for (j = 0; j < NUMCOLS; ++j) { + (void)textcolor(j); + cputc('X'); + } + } +} + +#define LINE_PEEKTEST 11 + +void peektest(void) +{ + int j; + char buf[NUMCOLS]; + char cbuf[NUMCOLS]; + char rbuf[NUMCOLS]; + + gotoxy(0, LINE_PEEKTEST); + for (j = 0; j < NUMCOLS; ++j) { + (void)textcolor(j); + revers((j >> 1)&1); + cputc('a' + j); + } + for (j = 0; j < NUMCOLS; ++j) { + gotoxy(j, LINE_PEEKTEST); + buf[j] = cpeekc(); + cbuf[j] = cpeekcolor(); + rbuf[j] = cpeekrevers(); + } + gotoxy(0, (LINE_PEEKTEST+1)); + for (j = 0; j < NUMCOLS; ++j) { + (void)textcolor(cbuf[j]); + revers(rbuf[j]); + cputc(buf[j]); + } +} + void main(void) { unsigned int i, j, n; @@ -52,16 +94,13 @@ void main(void) (void)bordercolor(bcol); (void)bgcolor(bgcol); - cputsxy(0, 2, "Colors:" ); - for (i = 0; i < 3; ++i) { - gotoxy(i, 3 + i); - for (j = 0; j < NUMCOLS; ++j) { - (void)textcolor(j); - cputc('X'); - } - } - (void)textcolor(tcol); + colortest(); + peektest(); + (void)textcolor(tcol); + revers(0); + + gotoxy(4,5); cprintf("\n\n\r Screensize: %ux%u", xsize, ysize); chlinexy(0, 6, xsize); From 228316ff58cd9ac7fd70727713f8a486f09b3a4c Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 24 May 2025 19:19:49 +0200 Subject: [PATCH 2685/2710] NES complete now (tested and conio test updated), replaces what is in #532 --- libsrc/nes/color.s | 4 ++-- libsrc/nes/cpeekc.s | 37 +++++++++++++++++++++++++++++++++++++ libsrc/nes/cpeekchar.s | 34 ---------------------------------- libsrc/nes/cpeekcolor.s | 8 ++++++++ libsrc/nes/cpeekrevers.s | 37 +++++++++++++++++++++++++++++++++++++ targettest/conio.c | 1 + 6 files changed, 85 insertions(+), 36 deletions(-) create mode 100644 libsrc/nes/cpeekc.s delete mode 100644 libsrc/nes/cpeekchar.s create mode 100644 libsrc/nes/cpeekcolor.s create mode 100644 libsrc/nes/cpeekrevers.s diff --git a/libsrc/nes/color.s b/libsrc/nes/color.s index e3aef9a28..cd1a950ea 100644 --- a/libsrc/nes/color.s +++ b/libsrc/nes/color.s @@ -9,11 +9,11 @@ .export _textcolor, _bgcolor, _bordercolor - .import return0, ppubuf_put + .import return0, return1, ppubuf_put .include "nes.inc" -_textcolor = return0 +_textcolor = return1 _bordercolor = return0 .proc _bgcolor diff --git a/libsrc/nes/cpeekc.s b/libsrc/nes/cpeekc.s new file mode 100644 index 000000000..315a2df5c --- /dev/null +++ b/libsrc/nes/cpeekc.s @@ -0,0 +1,37 @@ +; +; 2016-02-28, Groepaz +; 2017-08-17, Greg King +; +; char cpeekc (void); +; + + .export _cpeekc + + .import ppubuf_waitempty + .forceimport initconio + + .include "nes.inc" + + +_cpeekc: + ; wait until all console data has been written + jsr ppubuf_waitempty + + ldy SCREEN_PTR+1 + lda SCREEN_PTR + +; waiting for vblank is incredibly slow :// +vwait: +; ldx PPU_STATUS +; bpl vwait + + ldx #>$0000 + sty PPU_VRAM_ADDR2 + sta PPU_VRAM_ADDR2 + lda PPU_VRAM_IO ; first read is invalid + lda PPU_VRAM_IO ; get data + stx PPU_VRAM_ADDR2 + stx PPU_VRAM_ADDR2 + + and #<~$80 ; remove reverse bit + rts diff --git a/libsrc/nes/cpeekchar.s b/libsrc/nes/cpeekchar.s deleted file mode 100644 index 55230edbc..000000000 --- a/libsrc/nes/cpeekchar.s +++ /dev/null @@ -1,34 +0,0 @@ - - .export _cpeekc - - .import ppubuf_waitempty - - .include "nes.inc" - - .segment "CODE" - -_cpeekc: - - ; wait until all console data has been written - jsr ppubuf_waitempty - - ldy SCREEN_PTR+1 - ldx SCREEN_PTR - -; waiting for vblank is incredibly slow :// -vwait: -; lda $2002 ;wait -; bpl vwait - - lda #0 - sty $2006 - stx $2006 - ldy $2007 ; first read is invalid - ldy $2007 ; get data - sta $2006 - sta $2006 - - tya - and #$7f ; ?!?! - rts - diff --git a/libsrc/nes/cpeekcolor.s b/libsrc/nes/cpeekcolor.s new file mode 100644 index 000000000..ed275ec95 --- /dev/null +++ b/libsrc/nes/cpeekcolor.s @@ -0,0 +1,8 @@ +; +; 2017-06-03, Greg King +; +; unsigned char cpeekcolor (void); +; + + .import return1 + .export _cpeekcolor := return1 ; always COLOR_WHITE diff --git a/libsrc/nes/cpeekrevers.s b/libsrc/nes/cpeekrevers.s new file mode 100644 index 000000000..8b1542bc0 --- /dev/null +++ b/libsrc/nes/cpeekrevers.s @@ -0,0 +1,37 @@ +; +; 2016-02-28, Groepaz +; 2017-08-17, Greg King +; +; char cpeekrevers (void); +; + + .export _cpeekrevers + + .import ppubuf_waitempty + .forceimport initconio + + .include "nes.inc" + + +_cpeekrevers: + ; wait until all console data has been written + jsr ppubuf_waitempty + + ldy SCREEN_PTR+1 + lda SCREEN_PTR + +; waiting for vblank is incredibly slow :// +vwait: +; ldx PPU_STATUS +; bpl vwait + + ldx #>$0000 + sty PPU_VRAM_ADDR2 + sta PPU_VRAM_ADDR2 + lda PPU_VRAM_IO ; first read is invalid + lda PPU_VRAM_IO ; get data + stx PPU_VRAM_ADDR2 + stx PPU_VRAM_ADDR2 + + and #<$80 ; get reverse bit + rts diff --git a/targettest/conio.c b/targettest/conio.c index f65f886c5..e054319e5 100644 --- a/targettest/conio.c +++ b/targettest/conio.c @@ -59,6 +59,7 @@ void peektest(void) (void)textcolor(j); revers((j >> 1)&1); cputc('a' + j); + rbuf[j] = (j >> 1)&1; } for (j = 0; j < NUMCOLS; ++j) { gotoxy(j, LINE_PEEKTEST); From 8d42c4a8c5ea357f9c037cb466c764963545b562 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sat, 24 May 2025 20:03:44 +0200 Subject: [PATCH 2686/2710] fix cpeekc/cpeekcolor/cpeekrevers/cpeeks for atmos, replaces what is in #532 --- include/atmos.h | 11 ++++++++ libsrc/atmos/cpeekc.s | 21 +++++++++++++++ libsrc/atmos/cpeekchar.s | 30 --------------------- libsrc/atmos/cpeekcolor.s | 10 +++++++ libsrc/atmos/cpeekrevers.s | 22 ++++++++++++++++ libsrc/atmos/cpeeks.s | 54 ++++++++++++++++++++++++++++++++++++++ targettest/Makefile | 3 ++- targettest/conio.c | 14 ++++++++++ 8 files changed, 134 insertions(+), 31 deletions(-) create mode 100644 libsrc/atmos/cpeekc.s delete mode 100644 libsrc/atmos/cpeekchar.s create mode 100644 libsrc/atmos/cpeekcolor.s create mode 100644 libsrc/atmos/cpeekrevers.s create mode 100644 libsrc/atmos/cpeeks.s diff --git a/include/atmos.h b/include/atmos.h index 460a0010f..9b1b021c1 100644 --- a/include/atmos.h +++ b/include/atmos.h @@ -169,6 +169,17 @@ void atmos_tock (void); void atmos_zap (void); /* Raygun sound effect */ + +/* The following #defines will cause the matching function prototypes +** in conio.h to be overlaid by macroes with the same names, +** thereby saving the function call overhead. +*/ +#define _textcolor(color) COLOR_WHITE +#define _bgcolor(color) COLOR_BLACK +#define _bordercolor(color) COLOR_BLACK +#define _cpeekcolor(color) COLOR_WHITE + + void waitvsync (void); /* Wait for start of next frame */ diff --git a/libsrc/atmos/cpeekc.s b/libsrc/atmos/cpeekc.s new file mode 100644 index 000000000..f0f5f99b1 --- /dev/null +++ b/libsrc/atmos/cpeekc.s @@ -0,0 +1,21 @@ +; +; 2016-02-28, Groepaz +; 2017-06-19, Greg King +; +; char cpeekc (void); +; +; Atmos version +; + + .export _cpeekc + + .import setscrptr + .importzp ptr2 + + +_cpeekc: + jsr setscrptr ; Set ptr2 and .Y to the cursor's address + lda (ptr2),y ; Get char + and #<~$80 ; Remove revers() bit + ldx #>$0000 + rts diff --git a/libsrc/atmos/cpeekchar.s b/libsrc/atmos/cpeekchar.s deleted file mode 100644 index fba51bf72..000000000 --- a/libsrc/atmos/cpeekchar.s +++ /dev/null @@ -1,30 +0,0 @@ - - .include "atmos.inc" - - .export _cpeekc - -_cpeekc: - - ldy CURS_Y - ldx ScrTabLo,y - stx @l+1 - ldx ScrTabHi,y - stx @l+2 - ldx CURS_X -@l: - lda $bb80,x -;; inc COORDX_TEXT - ldx #0 - rts - - ; FIXME: is that table available elsewhere? -.rodata -ScrTabLo: - .repeat 28, Line - .byte <(SCREEN + Line * 40) - .endrep - -ScrTabHi: - .repeat 28, Line - .byte >(SCREEN + Line * 40) - .endrep diff --git a/libsrc/atmos/cpeekcolor.s b/libsrc/atmos/cpeekcolor.s new file mode 100644 index 000000000..307c04e96 --- /dev/null +++ b/libsrc/atmos/cpeekcolor.s @@ -0,0 +1,10 @@ +; +; 2017-06-03, Greg King +; +; unsigned char cpeekcolor (void); +; +; Atmos version +; + + .import return1 + .export _cpeekcolor := return1 ; always COLOR_WHITE diff --git a/libsrc/atmos/cpeekrevers.s b/libsrc/atmos/cpeekrevers.s new file mode 100644 index 000000000..53f907511 --- /dev/null +++ b/libsrc/atmos/cpeekrevers.s @@ -0,0 +1,22 @@ +; +; 2017-06-08, Greg King +; +; unsigned char cpeekrevers (void); +; +; Atmos version +; + + .export _cpeekrevers + + .import setscrptr + .importzp ptr2 + + +_cpeekrevers: + jsr setscrptr ; Set ptr2 and .Y to the cursor's address + lda (ptr2),y ; Get char + and #$80 ; get reverse bit + asl a + tax ; ldx #>$0000 + rol a ; return boolean value + rts diff --git a/libsrc/atmos/cpeeks.s b/libsrc/atmos/cpeeks.s new file mode 100644 index 000000000..e54563e7d --- /dev/null +++ b/libsrc/atmos/cpeeks.s @@ -0,0 +1,54 @@ +; +; 2017-06-20, Greg King +; +; void cpeeks (char* s, unsigned length); +; + + .export _cpeeks + + .import setscrptr, popax + .importzp ptr1, ptr2, ptr3, tmp1, tmp2 + + .macpack generic + + +_cpeeks: + eor #<$FFFF ; counting a word upward is faster + sta ptr3 ; so, we use -(length + 1) + txa + eor #>$FFFF + sta ptr3+1 + + jsr setscrptr ; Set ptr2 and .Y to the cursor's address + sty tmp2 + + jsr popax + sta tmp1 ; (will be a .Y index) + stx ptr1+1 + ldx #<$0000 + stx ptr1 + bze L3 ; branch always + +L4: ldy tmp2 + lda (ptr2),y ; Get char + iny + bnz L2 + inc ptr2+1 +L2: sty tmp2 + and #<~$80 ; Remove reverse bit + ldy tmp1 + sta (ptr1),y + iny + bnz L1 + inc ptr1+1 +L1: sty tmp1 + +L3: inc ptr3 ; count length + bnz L4 + inc ptr3+1 + bnz L4 + + txa ; terminate the string + ldy tmp1 + sta (ptr1),y + rts diff --git a/targettest/Makefile b/targettest/Makefile index 4d989d0df..35b767727 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -540,12 +540,13 @@ EXELIST_sym1 = \ strnlen \ strqtok-test -# omitted: clock-test cpeek-test conio deb dir-test em-test exec-test1 exec-test2 +# omitted: clock-test cpeek-test deb dir-test em-test exec-test1 exec-test2 # fileio-test ft mouse-test posixio-test rename-test seek ser-test EXELIST_atmos = \ minimal \ arg-test \ clock \ + conio \ cprintf \ cursor \ div-test \ diff --git a/targettest/conio.c b/targettest/conio.c index e054319e5..56fc5dcda 100644 --- a/targettest/conio.c +++ b/targettest/conio.c @@ -24,6 +24,12 @@ #define NUMCOLS 16 #endif +#if defined(__ATMOS__) +// FIXME: those should be defined elsewhere? +#define CH_HLINE '-' +#define CH_VLINE '!' +#endif + static char grid[5][5] = { {CH_ULCORNER, CH_HLINE, CH_TTEE, CH_HLINE, CH_URCORNER}, {CH_VLINE, ' ', CH_VLINE, ' ', CH_VLINE }, @@ -73,6 +79,14 @@ void peektest(void) revers(rbuf[j]); cputc(buf[j]); } + gotoxy(0, LINE_PEEKTEST); + cpeeks(buf, NUMCOLS); + (void)textcolor(1); + revers(0); + gotoxy(20, LINE_PEEKTEST); + for (j = 0; j < NUMCOLS; ++j) { + cputc(buf[j]); + } } void main(void) From 5c72deb0b98ad6e71d64f446a93d3700117bb7d9 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 25 May 2025 01:38:32 +0200 Subject: [PATCH 2687/2710] prepare osic1p cpeekc/cpeekcolor/cpeekrevers, replaces #532 --- libsrc/osic1p/cpeekc.s | 17 +++++++++++++++++ libsrc/osic1p/cpeekcolor.s | 8 ++++++++ libsrc/osic1p/cpeekrevers.s | 9 +++++++++ targettest/Makefile | 1 + targettest/conio.c | 15 ++++++++++++--- 5 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 libsrc/osic1p/cpeekc.s create mode 100644 libsrc/osic1p/cpeekcolor.s create mode 100644 libsrc/osic1p/cpeekrevers.s diff --git a/libsrc/osic1p/cpeekc.s b/libsrc/osic1p/cpeekc.s new file mode 100644 index 000000000..55a170501 --- /dev/null +++ b/libsrc/osic1p/cpeekc.s @@ -0,0 +1,17 @@ +; +; 2017-06-21, Greg King +; +; char cpeekc (void); +; +; Get a character from OSI C1P screen RAM. +; + .export _cpeekc + + .include "extzp.inc" + + +_cpeekc: + ldy CURS_X + lda (SCREEN_PTR),y + ldx #>$0000 + rts diff --git a/libsrc/osic1p/cpeekcolor.s b/libsrc/osic1p/cpeekcolor.s new file mode 100644 index 000000000..ed275ec95 --- /dev/null +++ b/libsrc/osic1p/cpeekcolor.s @@ -0,0 +1,8 @@ +; +; 2017-06-03, Greg King +; +; unsigned char cpeekcolor (void); +; + + .import return1 + .export _cpeekcolor := return1 ; always COLOR_WHITE diff --git a/libsrc/osic1p/cpeekrevers.s b/libsrc/osic1p/cpeekrevers.s new file mode 100644 index 000000000..ab7c68b35 --- /dev/null +++ b/libsrc/osic1p/cpeekrevers.s @@ -0,0 +1,9 @@ +; +; 2017-06-15, Greg King +; +; unsigned char cpeekrevers (void); +; +; Get a reverse attribute from screen RAM +; + .import return0 + .export _cpeekrevers := return0 ; No attribute diff --git a/targettest/Makefile b/targettest/Makefile index 35b767727..f78e22461 100644 --- a/targettest/Makefile +++ b/targettest/Makefile @@ -624,6 +624,7 @@ EXELIST_pce = \ # stroserror-test strqtok-test uname-test EXELIST_osic1p = \ minimal \ + conio \ cursor \ mul-test diff --git a/targettest/conio.c b/targettest/conio.c index 56fc5dcda..8ebb15bd5 100644 --- a/targettest/conio.c +++ b/targettest/conio.c @@ -15,12 +15,16 @@ #include <stdlib.h> #include <joystick.h> -#if defined(__GAMATE__) +#if defined(__GAMATE__) || defined(__OSIC1P__) /* there is not enough screen space to show all 256 characters at the bottom */ #define NUMCHARS 128 -#define NUMCOLS 4 #else #define NUMCHARS 256 +#endif + +#if defined(__GAMATE__) +#define NUMCOLS 4 +#else #define NUMCOLS 16 #endif @@ -79,6 +83,7 @@ void peektest(void) revers(rbuf[j]); cputc(buf[j]); } +#if !defined (__OSIC1P__) gotoxy(0, LINE_PEEKTEST); cpeeks(buf, NUMCOLS); (void)textcolor(1); @@ -87,6 +92,7 @@ void peektest(void) for (j = 0; j < NUMCOLS; ++j) { cputc(buf[j]); } +#endif } void main(void) @@ -134,7 +140,8 @@ void main(void) } } - gotoxy(0, ysize - 2 - ((NUMCHARS + xsize) / xsize)); + gotoxy(0, ysize - 3 - ((NUMCHARS + xsize) / xsize)); + // one line with 0123..pattern revers(1); for (i = 0; i < xsize; ++i) { cputc('0' + i % 10); @@ -147,9 +154,11 @@ void main(void) cputc(' '); } } + // fill last line of the block with '#' while(wherex() > 0) { cputc('#'); } + // one more line with 0123..pattern revers(1); for (i = 0; i < xsize; ++i) { cputc('0' + i % 10); From e9a15af29b406ec9e8ea64fd58997c03f6eb6463 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 25 May 2025 02:52:03 +0200 Subject: [PATCH 2688/2710] cleanup/fix pce cpeekc/cpeekcolor/cpeekrevers/cpeeks, replaces #532 --- libsrc/pce/cpeekc.s | 6 +++--- libsrc/pce/cpeekcolor.s | 6 +++--- libsrc/pce/cpeekrevers.s | 15 ++++++++------- libsrc/pce/cpeeks.s | 28 +++++++++++----------------- 4 files changed, 25 insertions(+), 30 deletions(-) diff --git a/libsrc/pce/cpeekc.s b/libsrc/pce/cpeekc.s index e144f94ac..326fe5203 100644 --- a/libsrc/pce/cpeekc.s +++ b/libsrc/pce/cpeekc.s @@ -14,11 +14,11 @@ _cpeekc: st0 #VDC_MARR ; Memory-Address Read ldy SCREEN_PTR ldx SCREEN_PTR+1 - sty VDC_DATA_LO - stx VDC_DATA_HI + sty a:VDC_DATA_LO + stx a:VDC_DATA_HI st0 #VDC_VRR ; VRAM Read Register - lda VDC_DATA_LO ; character + lda a:VDC_DATA_LO ; character and #<~$80 ; remove reverse bit ldx #0 rts diff --git a/libsrc/pce/cpeekcolor.s b/libsrc/pce/cpeekcolor.s index 8b96d29d4..ecee91ed5 100644 --- a/libsrc/pce/cpeekcolor.s +++ b/libsrc/pce/cpeekcolor.s @@ -14,11 +14,11 @@ _cpeekcolor: st0 #VDC_MARR ; Memory-Address Read ldy SCREEN_PTR ldx SCREEN_PTR+1 - sty VDC_DATA_LO - stx VDC_DATA_HI + sty a:VDC_DATA_LO + stx a:VDC_DATA_HI st0 #VDC_VRR ; VRAM Read Register - lda VDC_DATA_HI + lda a:VDC_DATA_HI and #<~$02 lsr a lsr a diff --git a/libsrc/pce/cpeekrevers.s b/libsrc/pce/cpeekrevers.s index 3f208fd10..8fa173202 100644 --- a/libsrc/pce/cpeekrevers.s +++ b/libsrc/pce/cpeekrevers.s @@ -14,13 +14,14 @@ _cpeekrevers: st0 #VDC_MARR ; Memory-Address Read ldy SCREEN_PTR ldx SCREEN_PTR+1 - sty VDC_DATA_LO - stx VDC_DATA_HI + sty a:VDC_DATA_LO + stx a:VDC_DATA_HI st0 #VDC_VRR ; VRAM Read Register - lda VDC_DATA_LO ; character (bit 7 is revers bit) - rol a - rol a - and #1 - ldx #0 + + lda a:VDC_DATA_LO ; character (bit 7 is revers bit) + and #$80 ; get reverse bit + asl a ; reverse bit to carry, A=0 + tax ; ldx #>$0000 + rol a ; reverse bit from carry rts diff --git a/libsrc/pce/cpeeks.s b/libsrc/pce/cpeeks.s index fe5e28687..322b9ba30 100644 --- a/libsrc/pce/cpeeks.s +++ b/libsrc/pce/cpeeks.s @@ -1,5 +1,6 @@ ; ; 2020-07-14, Groepaz +; 2020-07-15, Greg King ; ; void cpeeks (char* s, unsigned length); ; @@ -8,9 +9,7 @@ .export _cpeeks .import popax - .importzp ptr1, ptr2, tmp1, tmp2 - - .macpack generic + .importzp ptr1, ptr2 .include "pce.inc" .include "extzp.inc" @@ -22,35 +21,31 @@ _cpeeks: eor #>$FFFF sta ptr2+1 + st0 #VDC_CR ; Control Register + st2 #>$0088 ; make VRAM address increment by one + st0 #VDC_MARR ; Memory-Address Read ldy SCREEN_PTR ldx SCREEN_PTR+1 - sty VDC_DATA_LO - stx VDC_DATA_HI + sty a:VDC_DATA_LO + stx a:VDC_DATA_HI st0 #VDC_VRR ; VRAM Read Register jsr popax - sta tmp1 ; (will be a .Y index) + tay ; low byte of address will be used as index stx ptr1+1 - ldx #<$0000 stx ptr1 beq L2 ; branch always -L3: ldy tmp2 - lda VDC_DATA_LO ; get character - bit VDC_DATA_HI ; we need to "read" the highbyte to advance the address - iny - sty tmp2 +L3: lda a:VDC_DATA_LO ; get character + bit a:VDC_DATA_HI ; need to read high byte to advance VDC address and #<~$80 ; remove reverse bit - - ldy tmp1 sta (ptr1),y iny - bne L1 + bne L2 inc ptr1+1 -L1: sty tmp1 L2: inc ptr2 ; count length bne L3 @@ -58,6 +53,5 @@ L2: inc ptr2 ; count length bne L3 txa ; terminate the string - ldy tmp1 sta (ptr1),y rts From c996157f0ebd5b8ccf99a66049d2bf21b1ad35cb Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 25 May 2025 02:53:34 +0200 Subject: [PATCH 2689/2710] update conio test to reflect the state of cpeek implementation(s) --- targettest/conio.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/targettest/conio.c b/targettest/conio.c index 8ebb15bd5..db7752857 100644 --- a/targettest/conio.c +++ b/targettest/conio.c @@ -42,12 +42,15 @@ static char grid[5][5] = { {CH_LLCORNER, CH_HLINE, CH_BTEE, CH_HLINE, CH_LRCORNER} }; +#define LINE_COLORTEST 3 +#define LINE_PEEKTEST 11 + void colortest(void) { unsigned int i, j; cputsxy(0, 2, "Colors:" ); for (i = 0; i < 3; ++i) { - gotoxy(i, 3 + i); + gotoxy(i, LINE_COLORTEST + i); for (j = 0; j < NUMCOLS; ++j) { (void)textcolor(j); cputc('X'); @@ -55,8 +58,6 @@ void colortest(void) } } -#define LINE_PEEKTEST 11 - void peektest(void) { int j; @@ -69,13 +70,24 @@ void peektest(void) (void)textcolor(j); revers((j >> 1)&1); cputc('a' + j); - rbuf[j] = (j >> 1)&1; + buf[j] ='#'; + cbuf[j] = 1; + rbuf[j] = 0; } for (j = 0; j < NUMCOLS; ++j) { gotoxy(j, LINE_PEEKTEST); +// TODO: cpeekc() implementation missing for those: +#if !defined(__TELESTRAT__) buf[j] = cpeekc(); +#endif +// TODO: cpeekcolor() implementation missing for those: +#if !defined(__TELESTRAT__) cbuf[j] = cpeekcolor(); +#endif +// TODO: cpeekrevers() implementation missing for those: +#if !defined(__TELESTRAT__) rbuf[j] = cpeekrevers(); +#endif } gotoxy(0, (LINE_PEEKTEST+1)); for (j = 0; j < NUMCOLS; ++j) { @@ -83,7 +95,14 @@ void peektest(void) revers(rbuf[j]); cputc(buf[j]); } -#if !defined (__OSIC1P__) +// TODO: cpeeks() implementation missing for those: +#if !defined(__APPLE2__) && \ + !defined(__APPLE2ENH__) && \ + !defined(__ATARI__) && \ + !defined(__CX16__) && \ + !defined(__NES__) && \ + !defined(__TELESTRAT__) && \ + !defined(__OSIC1P__) gotoxy(0, LINE_PEEKTEST); cpeeks(buf, NUMCOLS); (void)textcolor(1); From bd63c6aa4b424bee3113772eefb210a7e48535c2 Mon Sep 17 00:00:00 2001 From: mrdudz <mrdudz@users.noreply.github.com> Date: Sun, 25 May 2025 03:23:54 +0200 Subject: [PATCH 2690/2710] move char block printing into function --- targettest/conio.c | 54 +++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/targettest/conio.c b/targettest/conio.c index db7752857..e270d3dab 100644 --- a/targettest/conio.c +++ b/targettest/conio.c @@ -114,6 +114,35 @@ void peektest(void) #endif } +void allchars(int xsize, int ysize) +{ + int i; + gotoxy(0, ysize - 2 - ((NUMCHARS + (xsize-1)) / xsize)); + // one line with 0123..pattern + revers(1); + for (i = 0; i < xsize; ++i) { + cputc('0' + i % 10); + } + revers(0); + for (i = 0; i < NUMCHARS; ++i) { + if ((i != '\n') && (i != '\r')) { + cputc(i); + } else { + cputc(' '); + } + } + // fill last line of the block with '#' + while(wherex() > 0) { + cputc('#'); + } + // one more line with 0123..pattern + revers(1); + for (i = 0; i < xsize; ++i) { + cputc('0' + i % 10); + } + revers(0); +} + void main(void) { unsigned int i, j, n; @@ -159,30 +188,7 @@ void main(void) } } - gotoxy(0, ysize - 3 - ((NUMCHARS + xsize) / xsize)); - // one line with 0123..pattern - revers(1); - for (i = 0; i < xsize; ++i) { - cputc('0' + i % 10); - } - revers(0); - for (i = 0; i < NUMCHARS; ++i) { - if ((i != '\n') && (i != '\r')) { - cputc(i); - } else { - cputc(' '); - } - } - // fill last line of the block with '#' - while(wherex() > 0) { - cputc('#'); - } - // one more line with 0123..pattern - revers(1); - for (i = 0; i < xsize; ++i) { - cputc('0' + i % 10); - } - revers(0); + allchars(xsize, ysize); cursor(1); for (;;) { From 0d9ae7cb708d3948ec02a776d28766b542ed0a58 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Sun, 25 May 2025 03:44:36 +0200 Subject: [PATCH 2691/2710] Update kgetin.s use symbol from cbm_kernal.inc --- libsrc/plus4/kgetin.s | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/libsrc/plus4/kgetin.s b/libsrc/plus4/kgetin.s index 14919f750..e77395b9a 100644 --- a/libsrc/plus4/kgetin.s +++ b/libsrc/plus4/kgetin.s @@ -1,14 +1,17 @@ -.export GETIN -.include "plus4.inc" + .export GETIN -KERNAL_GETIN := $FFE4 +.scope KERNAL + .include "cbm_kernal.inc" +.endscope + + .include "plus4.inc" .segment "LOWCODE" ; Stay out of ROM area. .proc GETIN sta ENABLE_ROM - jsr KERNAL_GETIN + jsr KERNAL::GETIN sta ENABLE_RAM rts .endproc From cd92e4f0af9eb1c1963136da44b74ac56f9be198 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 11 May 2025 11:49:53 +0200 Subject: [PATCH 2692/2710] Apple2: Set mousecard IRQ rate when possible --- libsrc/apple2/get_tv.s | 2 +- libsrc/apple2/libref.s | 3 +-- libsrc/apple2/mou/a2.stdmou.s | 29 ++++++++++++++++++++++++++++- libsrc/apple2/mouseref.s | 25 +++++++++++++++++++++++++ 4 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 libsrc/apple2/mouseref.s diff --git a/libsrc/apple2/get_tv.s b/libsrc/apple2/get_tv.s index 830cc4ac1..b2eb4d857 100644 --- a/libsrc/apple2/get_tv.s +++ b/libsrc/apple2/get_tv.s @@ -8,7 +8,7 @@ .import _set_iigs_speed, _get_iigs_speed .import ostype - .constructor calibrate_tv, 2 + .constructor calibrate_tv, 8 ; After ostype .include "accelerator.inc" .include "apple2.inc" diff --git a/libsrc/apple2/libref.s b/libsrc/apple2/libref.s index 8aa54abab..e3d713a5d 100644 --- a/libsrc/apple2/libref.s +++ b/libsrc/apple2/libref.s @@ -2,10 +2,9 @@ ; Oliver Schmidt, 2013-05-31 ; - .export em_libref, mouse_libref, ser_libref, tgi_libref + .export em_libref, ser_libref, tgi_libref .import _exit em_libref := _exit -mouse_libref := _exit ser_libref := _exit tgi_libref := _exit diff --git a/libsrc/apple2/mou/a2.stdmou.s b/libsrc/apple2/mou/a2.stdmou.s index e48abbb41..9c2f96200 100644 --- a/libsrc/apple2/mou/a2.stdmou.s +++ b/libsrc/apple2/mou/a2.stdmou.s @@ -7,6 +7,7 @@ .include "zeropage.inc" .include "mouse-kernel.inc" .include "apple2.inc" + .include "get_tv.inc" .macpack module @@ -21,6 +22,7 @@ CLAMPMOUSE = $17 ; Sets mouse bounds in a window HOMEMOUSE = $18 ; Sets mouse to upper-left corner of clamp win INITMOUSE = $19 ; Resets mouse clamps to default values and ; sets mouse position to 0,0 +TIMEDATA = $1C ; Set mousecard's interrupt rate pos1_lo := $0478 pos1_hi := $0578 @@ -41,6 +43,7 @@ status := $0778 .byte MOUSE_API_VERSION ; Mouse driver API version number ; Library reference +libref: .addr $0000 ; Jump table @@ -169,7 +172,31 @@ next: inc ptr1+1 asl sta yparam+1 - ; The AppleMouse II Card needs the ROM switched in + ; Apple II technical notes "Varying VBL Interrupt Rate", + lda libref + ldx libref+1 + sta ptr1 + stx ptr1+1 + + .ifdef __APPLE2ENH__ + lda (ptr1) + .else + ldy #$00 + lda (ptr1),y + .endif + + cmp #TV::OTHER + beq :+ + + ; The TV values are aligned with the values the mousecard + ; expect: 0 for 60Hz, 1 for 50Hz. + .assert TV::NTSC = 0, error + .assert TV::PAL = 1, error + + ldx #TIMEDATA + jsr firmware + +: ; The AppleMouse II Card needs the ROM switched in ; to be able to detect an Apple //e and use RDVBL bit $C082 diff --git a/libsrc/apple2/mouseref.s b/libsrc/apple2/mouseref.s new file mode 100644 index 000000000..b0e75c367 --- /dev/null +++ b/libsrc/apple2/mouseref.s @@ -0,0 +1,25 @@ +; +; Colin Leroy-Mira, 2025-05-11 +; + + .export mouse_libref + .import _get_tv, ostype, return0 + + .constructor init_mousetv + + .include "get_tv.inc" + + .segment "ONCE" + +.proc init_mousetv + lda ostype + cmp #$40 ; Technical notes say not to change + bcs :+ ; interrupt rate on IIc/IIgs, so... + jsr _get_tv + sta mouse_libref +: rts ; ...don't update "Other" on those machines +.endproc + + .data + +mouse_libref: .byte TV::OTHER From e451134e233d1c9844f62e61a844ce42dc7c36a1 Mon Sep 17 00:00:00 2001 From: Gorilla Sapiens <embracetheape@gmail.com> Date: Tue, 27 May 2025 05:03:17 +0000 Subject: [PATCH 2693/2710] fixes issue #2446 --- src/cl65/main.c | 14 +++++++++++++- src/common/fname.c | 21 +++++++++++++++++++++ src/common/fname.h | 6 ++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/cl65/main.c b/src/cl65/main.c index 31d805181..4a39263af 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -620,6 +620,9 @@ static void Assemble (const char* File) static void Compile (const char* File) /* Compile the given file */ { + /* A temporary file name passed to the assembler */ + char *TmpFile = NULL; + /* Remember the current compiler argument count */ unsigned ArgCount = CC65.ArgCount; @@ -657,6 +660,12 @@ static void Compile (const char* File) /* Add the file as argument for the compiler */ CmdAddArg (&CC65, File); + if (DoAssemble && DoLink) { + /* set a temporary output file name */ + TmpFile = MakeTmpFilename(File, ".s"); + CmdSetOutput (&CC65, TmpFile); + } + /* Add a NULL pointer to terminate the argument list */ CmdAddArg (&CC65, 0); @@ -671,7 +680,10 @@ static void Compile (const char* File) */ if (DoAssemble) { /* Assemble the intermediate file and remove it */ - AssembleIntermediate (File); + AssembleIntermediate (TmpFile ? TmpFile : File); + if (TmpFile) { + xfree(TmpFile); + } } } diff --git a/src/common/fname.c b/src/common/fname.c index 4e4f7c7fa..c5000bc72 100644 --- a/src/common/fname.c +++ b/src/common/fname.c @@ -33,6 +33,7 @@ +#include <stdio.h> #include <string.h> #include "xmalloc.h" @@ -115,3 +116,23 @@ char* MakeFilename (const char* Origin, const char* Ext) } return Out; } + + + +char* MakeTmpFilename (const char* Origin, const char* Ext) +/* Make a new temporary file name from Ext. tmpnam(3) is called +** and Ext is appended to generate the filename. Origin is ignored. +** The result is placed in a malloc'ed buffer and returned. +*/ +{ + char* Out; + char Buffer[L_tmpnam * 2]; /* a lazy way to ensure we have space for Ext */ + + tmpnam(Buffer); + strcat(Buffer, Ext); + + Out = xmalloc (strlen (Buffer) + 1); + strcpy (Out, Buffer); + + return Out; +} diff --git a/src/common/fname.h b/src/common/fname.h index 1b94d270c..1dc985f93 100644 --- a/src/common/fname.h +++ b/src/common/fname.h @@ -59,6 +59,12 @@ char* MakeFilename (const char* Origin, const char* Ext); ** The function may be used to create "foo.o" from "foo.s". */ +char* MakeTmpFilename (const char* Origin, const char* Ext); +/* Make a new temporary file name from Ext. tmpnam(3) is called +** and Ext is appended to generate the filename. Origin is ignored. +** The result is placed in a malloc'ed buffer and returned. +*/ + /* End of fname.h */ From 11d3338282f815cb579906edc40da179803d8c44 Mon Sep 17 00:00:00 2001 From: Gorilla Sapiens <embracetheape@gmail.com> Date: Tue, 27 May 2025 06:00:24 +0000 Subject: [PATCH 2694/2710] bugfixes --- src/cl65/main.c | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/cl65/main.c b/src/cl65/main.c index 4a39263af..900602c87 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -526,12 +526,15 @@ static void Link (void) -static void AssembleFile (const char* File, unsigned ArgCount) +static void AssembleFile (const char* File, const char* TmpFile, unsigned ArgCount) /* Common routine to assemble a file. Will be called by Assemble() and ** AssembleIntermediate(). Adds options common for both routines and ** assembles the file. Will remove excess arguments after assembly. */ { + /* ObjName may be used for temporary or real filename */ + char *ObjName; + /* Set the target system */ CmdSetTarget (&CA65, Target); @@ -541,7 +544,8 @@ static void AssembleFile (const char* File, unsigned ArgCount) ** to the file list of the linker. The name of the output ** file is that of the input file with ".s" replaced by ".o". */ - char* ObjName = MakeFilename (File, ".o"); + ObjName = MakeFilename (TmpFile ? TmpFile : File, ".o"); + CmdSetOutput (&CA65, ObjName); CmdAddFile (&LD65, ObjName); /* This is just a temporary file, schedule it for removal */ CmdAddFile (&RM, ObjName); @@ -551,10 +555,15 @@ static void AssembleFile (const char* File, unsigned ArgCount) if (OutputName) { CmdSetOutput (&CA65, OutputName); } + else { + ObjName = MakeFilename (File, ".o"); + CmdSetOutput (&CA65, ObjName); + xfree (ObjName); + } } /* Add the file as argument for the assembler */ - CmdAddArg (&CA65, File); + CmdAddArg (&CA65, TmpFile ? TmpFile : File); /* Add a NULL pointer to terminate the argument list */ CmdAddArg (&CA65, 0); @@ -568,7 +577,7 @@ static void AssembleFile (const char* File, unsigned ArgCount) -static void AssembleIntermediate (const char* SourceFile) +static void AssembleIntermediate (const char* SourceFile, const char* TmpFile) /* Assemble an intermediate file which was generated by a previous processing ** step with SourceFile as input. The -dep options won't be added and ** the intermediate assembler file is removed after assembly. @@ -578,18 +587,20 @@ static void AssembleIntermediate (const char* SourceFile) ** name. It's the same name with the extension replaced by ".s" */ char* AsmName = MakeFilename (SourceFile, ".s"); + char* AsmTmpName = TmpFile ? MakeFilename(TmpFile, ".s") : NULL; /* Assemble the intermediate assembler file */ - AssembleFile (AsmName, CA65.ArgCount); + AssembleFile (AsmName, AsmTmpName, CA65.ArgCount); /* Remove the input file */ - if (remove (AsmName) < 0) { + if (remove (AsmTmpName ? AsmTmpName : AsmName) < 0) { Warning ("Cannot remove temporary file '%s': %s", - AsmName, strerror (errno)); + AsmTmpName ? AsmTmpName : AsmName, strerror (errno)); } /* Free the assembler file name which was allocated from the heap */ xfree (AsmName); + xfree (AsmTmpName); } @@ -612,7 +623,7 @@ static void Assemble (const char* File) } /* Use the common routine */ - AssembleFile (File, ArgCount); + AssembleFile (File, NULL, ArgCount); } @@ -660,7 +671,7 @@ static void Compile (const char* File) /* Add the file as argument for the compiler */ CmdAddArg (&CC65, File); - if (DoAssemble && DoLink) { + if (DoAssemble) { /* set a temporary output file name */ TmpFile = MakeTmpFilename(File, ".s"); CmdSetOutput (&CC65, TmpFile); @@ -680,7 +691,7 @@ static void Compile (const char* File) */ if (DoAssemble) { /* Assemble the intermediate file and remove it */ - AssembleIntermediate (TmpFile ? TmpFile : File); + AssembleIntermediate (File, TmpFile); if (TmpFile) { xfree(TmpFile); } @@ -717,7 +728,7 @@ static void CompileRes (const char* File) */ if (DoAssemble) { /* Assemble the intermediate file and remove it */ - AssembleIntermediate (File); + AssembleIntermediate (File, NULL); } } @@ -753,7 +764,7 @@ static void ConvertO65 (const char* File) */ if (DoAssemble) { /* Assemble the intermediate file and remove it */ - AssembleIntermediate (File); + AssembleIntermediate (File, NULL); } } From 9a2f754e8d5ecea6fc17ade5165e64b4f66897c6 Mon Sep 17 00:00:00 2001 From: Gorilla Sapiens <embracetheape@gmail.com> Date: Tue, 27 May 2025 06:18:24 +0000 Subject: [PATCH 2695/2710] fixes problems found by github autobuild --- src/cl65/main.c | 2 +- src/common/fname.c | 16 +++++++++++++--- src/common/fname.h | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/cl65/main.c b/src/cl65/main.c index 900602c87..8d8aac932 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -673,7 +673,7 @@ static void Compile (const char* File) if (DoAssemble) { /* set a temporary output file name */ - TmpFile = MakeTmpFilename(File, ".s"); + TmpFile = MakeTmpFilename(".s"); CmdSetOutput (&CC65, TmpFile); } diff --git a/src/common/fname.c b/src/common/fname.c index c5000bc72..f026f776d 100644 --- a/src/common/fname.c +++ b/src/common/fname.c @@ -119,16 +119,26 @@ char* MakeFilename (const char* Origin, const char* Ext) -char* MakeTmpFilename (const char* Origin, const char* Ext) +char* MakeTmpFilename (const char* Ext) /* Make a new temporary file name from Ext. tmpnam(3) is called -** and Ext is appended to generate the filename. Origin is ignored. +** and Ext is appended to generate the filename. ** The result is placed in a malloc'ed buffer and returned. */ { char* Out; char Buffer[L_tmpnam * 2]; /* a lazy way to ensure we have space for Ext */ - tmpnam(Buffer); + /* + ** gcc emits the following warning here: + ** + ** warning: the use of `tmpnam' is dangerous, better use `mkstemp' + ** + ** however, mkstemp actually opens a file, which we do not want. + ** we could write our own version, but then we would have to struggle + ** with supporting multiple build environments. tmpnam(3) is fine + ** here. + */ + (void) tmpnam(Buffer); strcat(Buffer, Ext); Out = xmalloc (strlen (Buffer) + 1); diff --git a/src/common/fname.h b/src/common/fname.h index 1dc985f93..cd163e4e7 100644 --- a/src/common/fname.h +++ b/src/common/fname.h @@ -59,7 +59,7 @@ char* MakeFilename (const char* Origin, const char* Ext); ** The function may be used to create "foo.o" from "foo.s". */ -char* MakeTmpFilename (const char* Origin, const char* Ext); +char* MakeTmpFilename (const char* Ext); /* Make a new temporary file name from Ext. tmpnam(3) is called ** and Ext is appended to generate the filename. Origin is ignored. ** The result is placed in a malloc'ed buffer and returned. From ca8b0726088083d8e5e08d0472915d6489efd867 Mon Sep 17 00:00:00 2001 From: Gorilla Sapiens <embracetheape@gmail.com> Date: Tue, 27 May 2025 06:30:12 +0000 Subject: [PATCH 2696/2710] fixed another pedantic github build problem --- src/common/fname.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/common/fname.c b/src/common/fname.c index f026f776d..4dc7006f7 100644 --- a/src/common/fname.c +++ b/src/common/fname.c @@ -134,12 +134,17 @@ char* MakeTmpFilename (const char* Ext) ** warning: the use of `tmpnam' is dangerous, better use `mkstemp' ** ** however, mkstemp actually opens a file, which we do not want. + ** tmpfile() is unsuitable for the same reason. + ** ** we could write our own version, but then we would have to struggle - ** with supporting multiple build environments. tmpnam(3) is fine - ** here. + ** with supporting multiple build environments. + ** + ** tmpnam(3) is safe here, because ca65 / cc65 / ld65 will simply clobber + ** an existing file, or exit if with an error if they are unable to. + ** + ** gcc will also complain, if you don't use the return value from tmpnam(3) */ - (void) tmpnam(Buffer); - strcat(Buffer, Ext); + strcat(tmpnam(Buffer), Ext); Out = xmalloc (strlen (Buffer) + 1); strcpy (Out, Buffer); From a1139aa6b8696063fa32e3696295f46db48b2b11 Mon Sep 17 00:00:00 2001 From: Gorilla Sapiens <embracetheape@gmail.com> Date: Tue, 27 May 2025 06:31:54 +0000 Subject: [PATCH 2697/2710] removed dangling space --- src/common/fname.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/fname.c b/src/common/fname.c index 4dc7006f7..e67470b33 100644 --- a/src/common/fname.c +++ b/src/common/fname.c @@ -138,7 +138,7 @@ char* MakeTmpFilename (const char* Ext) ** ** we could write our own version, but then we would have to struggle ** with supporting multiple build environments. - ** + ** ** tmpnam(3) is safe here, because ca65 / cc65 / ld65 will simply clobber ** an existing file, or exit if with an error if they are unable to. ** From 9ae0eaafcc97b25fd145320bac4120c8bd6bb0dd Mon Sep 17 00:00:00 2001 From: Gorilla Sapiens <embracetheape@gmail.com> Date: Tue, 27 May 2025 14:13:52 +0000 Subject: [PATCH 2698/2710] fixed inaccurate comment --- src/common/fname.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/fname.h b/src/common/fname.h index cd163e4e7..852c4ae56 100644 --- a/src/common/fname.h +++ b/src/common/fname.h @@ -61,7 +61,7 @@ char* MakeFilename (const char* Origin, const char* Ext); char* MakeTmpFilename (const char* Ext); /* Make a new temporary file name from Ext. tmpnam(3) is called -** and Ext is appended to generate the filename. Origin is ignored. +** and Ext is appended to generate the filename. ** The result is placed in a malloc'ed buffer and returned. */ From 816666615b6e407ddbd924ee1ee5afaeb314b1b1 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 27 May 2025 16:31:23 +0200 Subject: [PATCH 2699/2710] Apple2: Make 80-columns support dynamic on apple2 target Add a machinetype identifier to help us quickly identify Apple //e (bit 7) and //e enhanced (bit 6). Use it in conio functions for 80-columns code instead of relying entirely on the __APPLE2ENH__ target. Move videomode() to the apple2 target, and have it return an error if 80-columns hardware is not available - this is a lie for now, it is considered available on //e enhanced, which may not be true, and not available on //e, which may also be not true. An ulterior patch will make that check correctly. Adapt the box/line drawing characters so that one can use MouseText on the apple2 target if it is available, by defining DYN_DRAW_BOX. No change by default: MouseText is considered available on apple2enh and not available on apple2. --- doc/apple2.sgml | 5 ++ doc/funcref.sgml | 12 +++-- include/apple2.h | 72 ++++++++++++++++++++++++- include/apple2enh.h | 23 -------- include/conio.h | 13 ++++- libsrc/apple2/boxchars.s | 73 ++++++++++++++++++++++++++ libsrc/apple2/cgetc.s | 13 +++-- libsrc/apple2/cpeekc.s | 19 +++++-- libsrc/apple2/cputc.s | 60 +++++++++++++++------ libsrc/apple2/dynchline.s | 41 +++++++++++++++ libsrc/apple2/dyncvline.s | 40 ++++++++++++++ libsrc/apple2/get_ostype.s | 2 + libsrc/apple2/gotoxy.s | 14 +++-- libsrc/apple2/libref.s | 3 +- libsrc/apple2/machinetype.s | 24 +++++++++ libsrc/apple2/mcbdefault.s | 19 ++++--- libsrc/apple2/{chline.s => mtchline.s} | 19 +++---- libsrc/apple2/{cvline.s => mtcvline.s} | 24 ++++----- libsrc/apple2/tgi/a2.hi.s | 37 ++++++++++--- libsrc/apple2/tgiref.s | 18 +++++++ libsrc/apple2/videomode.s | 39 ++++++++++---- libsrc/apple2/wherex.s | 13 +++-- targettest/conio.c | 47 +++++++++++++++++ 23 files changed, 523 insertions(+), 107 deletions(-) create mode 100644 libsrc/apple2/boxchars.s create mode 100644 libsrc/apple2/dynchline.s create mode 100644 libsrc/apple2/dyncvline.s create mode 100644 libsrc/apple2/machinetype.s rename libsrc/apple2/{chline.s => mtchline.s} (68%) rename libsrc/apple2/{cvline.s => mtcvline.s} (57%) create mode 100644 libsrc/apple2/tgiref.s diff --git a/doc/apple2.sgml b/doc/apple2.sgml index 9cff996b7..719e799f4 100644 --- a/doc/apple2.sgml +++ b/doc/apple2.sgml @@ -361,6 +361,7 @@ usage. <item>rebootafterexit <item>ser_apple2_slot <item>tgi_apple2_mix +<item>videomode </itemize> @@ -406,6 +407,10 @@ The names in the parentheses denote the symbols to be used for static linking of with <tt/-S $4000/ to reserve the first hires page or with <tt/-S $6000/ to reserve both hires pages. + Note that the second hires page is only available if the text display is not in + 80 column mode. This can be asserted by calling <tt/videomode (VIDEOMODE_40COL);/ + before installing the driver. + The function <tt/tgi_apple2_mix()/ allows to activate 4 lines of text. The function doesn't clear the corresponding area at the bottom of the screen. diff --git a/doc/funcref.sgml b/doc/funcref.sgml index e534b47be..07d538781 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -103,6 +103,7 @@ function. <item><ref id="gmtime_dt" name="gmtime_dt"> <item><ref id="mktime_dt" name="mktime_dt"> <item>rebootafterexit +<item><ref id="videomode" name="videomode"> </itemize> @@ -8477,24 +8478,27 @@ used in presence of a prototype. <tag/Function/Switch to either 40- or 80-column text mode, or a standard graphics mode. <tag/Header/<tt/ +<ref id="apple2.h" name="apple2.h">, <ref id="apple2enh.h" name="apple2enh.h">, <ref id="c128.h" name="c128.h">, <ref id="cx16.h" name="cx16.h">/ <tag/Declaration/ -<tt>unsigned __fastcall__ videomode (unsigned Mode); /* for apple2enh and c128 */</tt><newline> -<tt>signed char __fastcall__ videomode (signed char Mode); /* for cx16 */</tt> +<tt>unsigned __fastcall__ videomode (unsigned Mode); /* for c128 */</tt><newline> +<tt>signed char __fastcall__ videomode (signed char Mode); /* for apple2 and cx16 */</tt> <tag/Description/Switch to a 40- or 80-column text or graphics mode, depending on the argument. If the requested mode is already active, nothing happens. The old mode is returned from the call. <tag/Notes/<itemize> -<item>The function is specific to the Commodore 128, the enhanced Apple //e, +<item>The function is specific to the Commodore 128, the Apple II, and the Commander X16. <item>This function replaces <ref id="toggle_videomode" name="toggle_videomode">. <item>The function is available as only a fastcall function, so it may be used only in the presence of a prototype. +<item>On Apple II, this functions returns the previously active video mode, or -1 +if the mode is not supported due to lack of hardware. </itemize> -<tag/Availability/C128, enhanced Apple //e, and CX16 +<tag/Availability/C128, Apple II, and CX16 <tag/See also/ <ref id="fast" name="fast">, <ref id="isfast" name="isfast">, diff --git a/include/apple2.h b/include/apple2.h index 9f7526f59..e4c8d89b1 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -83,7 +83,57 @@ #define CH_CURS_LEFT 0x08 #define CH_CURS_RIGHT 0x15 -#if !defined(__APPLE2ENH__) +#if defined(__APPLE2ENH__) + +/* MouseText-based functions for boxes and lines drawing */ +void mt_chline (unsigned char length); +void mt_cvline (unsigned char length); +void mt_chlinexy (unsigned char x, unsigned char y, unsigned char length); +void mt_cvlinexy (unsigned char x, unsigned char y, unsigned char length); + +#define CH_HLINE 0x5F +#define CH_VLINE 0xDF +#define CH_ULCORNER 0x5F +#define CH_URCORNER 0x20 +#define CH_LLCORNER 0xD4 +#define CH_LRCORNER 0xDF +#define CH_TTEE 0x5F +#define CH_BTEE 0xD4 +#define CH_LTEE 0xD4 +#define CH_RTEE 0xDF +#define CH_CROSS 0xD4 + +#define _chline(length) mt_chline(length) +#define _chlinexy(x,y,length) mt_chlinexy(x,y,length) +#define _cvline(length) mt_cvline(length) +#define _cvlinexy(x,y,length) mt_cvlinexy(x,y,length) + +#else + +/* Functions that don't depend on MouseText to draw boxes and lines */ +void dyn_chline (unsigned char h, unsigned char length); +void dyn_cvline (unsigned char v, unsigned char length); +void dyn_chlinexy (unsigned char h, unsigned char x, unsigned char y, unsigned char length); +void dyn_cvlinexy (unsigned char v, unsigned char x, unsigned char y, unsigned char length); + +#if defined(DYN_BOX_DRAW) +/* When the user defines DYN_BOX_DRAW, we'll adapt to the machine +** we run on. + */ +extern char CH_HLINE; +extern char CH_VLINE; +extern char CH_ULCORNER; +extern char CH_URCORNER; +extern char CH_LLCORNER; +extern char CH_LRCORNER; +extern char CH_TTEE; +extern char CH_BTEE; +extern char CH_LTEE; +extern char CH_RTEE; +extern char CH_CROSS; + +#else +/* Otherwise, fallback to safety and don't use MouseText at all. */ #define CH_HLINE '-' #define CH_VLINE '!' #define CH_ULCORNER '+' @@ -95,7 +145,14 @@ #define CH_LTEE '+' #define CH_RTEE '+' #define CH_CROSS '+' -#endif +#endif /* DYN_BOX_DRAW */ + +#define _chline(length) dyn_chline(CH_HLINE, length) +#define _chlinexy(x, y, length) dyn_chlinexy(CH_HLINE, x ,y, length) +#define _cvline(length) dyn_cvline(CH_VLINE, length) +#define _cvlinexy(x, y, length) dyn_cvlinexy(CH_VLINE, x, y, length) + +#endif /* __APPLE2ENH__ */ /* Masks for joy_read */ #define JOY_UP_MASK 0x10 @@ -127,6 +184,12 @@ #define TV_PAL 1 #define TV_OTHER 2 +/* Video modes */ +#define VIDEOMODE_40x24 0x15 +#define VIDEOMODE_80x24 0x00 +#define VIDEOMODE_40COL VIDEOMODE_40x24 +#define VIDEOMODE_80COL VIDEOMODE_80x24 + extern unsigned char _dos_type; /* Valid _dos_type values: ** @@ -255,6 +318,11 @@ unsigned char __fastcall__ allow_lowercase (unsigned char onoff); */ #endif +signed char __fastcall__ videomode (unsigned mode); +/* Set the video mode, return the old mode, or -1 if 80-column hardware is not +** installed. Call with one of the VIDEOMODE_xx constants. +*/ + /* End of apple2.h */ diff --git a/include/apple2enh.h b/include/apple2enh.h index 864d24986..1dc75ae13 100644 --- a/include/apple2enh.h +++ b/include/apple2enh.h @@ -57,18 +57,6 @@ #define CH_CURS_UP 0x0B #define CH_CURS_DOWN 0x0A -#define CH_HLINE 0x5F -#define CH_VLINE 0xDF -#define CH_ULCORNER 0x5F -#define CH_URCORNER 0x20 -#define CH_LLCORNER 0xD4 -#define CH_LRCORNER 0xDF -#define CH_TTEE 0x5F -#define CH_BTEE 0xD4 -#define CH_LTEE 0xD4 -#define CH_RTEE 0xDF -#define CH_CROSS 0xD4 - /* These are defined to be OpenApple + NumberKey */ #define CH_F1 0xB1 #define CH_F2 0xB2 @@ -81,12 +69,6 @@ #define CH_F9 0xB9 #define CH_F10 0xB0 -/* Video modes */ -#define VIDEOMODE_40x24 0x15 -#define VIDEOMODE_80x24 0x00 -#define VIDEOMODE_40COL VIDEOMODE_40x24 -#define VIDEOMODE_80COL VIDEOMODE_80x24 - /*****************************************************************************/ @@ -112,11 +94,6 @@ extern void a2e_lo_tgi[]; -unsigned __fastcall__ videomode (unsigned mode); -/* Set the video mode, return the old mode. Call with one of the VIDEOMODE_xx -** constants. -*/ - void waitvsync (void); /* Wait for start of next frame */ diff --git a/include/conio.h b/include/conio.h index bac20e3c5..cf84d1742 100644 --- a/include/conio.h +++ b/include/conio.h @@ -216,7 +216,18 @@ void __fastcall__ cputhex16 (unsigned val); # define cpeekrevers() _cpeekrevers() #endif - +#ifdef _chline +# define chline(len) _chline(len) +#endif +#ifdef _cvline +# define cvline(len) _cvline(len) +#endif +#ifdef _chlinexy +# define chlinexy(x, y, len) _chlinexy(x, y, len) +#endif +#ifdef _cvlinexy +# define cvlinexy(x, y, len) _cvlinexy(x, y, len) +#endif /* End of conio.h */ #endif diff --git a/libsrc/apple2/boxchars.s b/libsrc/apple2/boxchars.s new file mode 100644 index 000000000..8feee3bd3 --- /dev/null +++ b/libsrc/apple2/boxchars.s @@ -0,0 +1,73 @@ +; +; Colin Leroy-Mira and Oliver Schmidt, 26.05.2025 +; +; Initialize box-drawing characters according to +; MouseText availability +; + +.ifndef __APPLE2ENH__ + + .constructor initboxchars + .import machinetype + + .export _CH_HLINE + .export _CH_VLINE + .export _CH_ULCORNER + .export _CH_URCORNER + .export _CH_LLCORNER + .export _CH_LRCORNER + .export _CH_TTEE + .export _CH_BTEE + .export _CH_LTEE + .export _CH_RTEE + .export _CH_CROSS + + .segment "ONCE" + +initboxchars: + bit machinetype ; IIe enhanced or newer? + bvs out + + ldx #NUM_BOXCHARS ; No mousetext, patch characters +: lda std_boxchars,x + sta boxchars,x + dex + bpl :- + +out: rts + +; Replacement chars for when MouseText is not available +std_boxchars: .byte '!' + .byte '-' + .byte '+' + .byte '+' + .byte '+' + .byte '+' + + .data + +; MouseText-based box characters +boxchars: +VERT: .byte $DF +HORIZ: .byte $5F +ULCORNER: .byte $5F +URCORNER: .byte $20 +LLCORNER: .byte $D4 +LRCORNER: .byte $DF + +NUM_BOXCHARS = *-boxchars + +; exported symbols, referencing our 6 bytes +_CH_HLINE = HORIZ +_CH_VLINE = VERT +_CH_ULCORNER = ULCORNER +_CH_URCORNER = URCORNER +_CH_LLCORNER = LLCORNER +_CH_LRCORNER = LRCORNER +_CH_TTEE = ULCORNER +_CH_BTEE = LLCORNER +_CH_LTEE = LLCORNER +_CH_RTEE = LRCORNER +_CH_CROSS = LLCORNER + +.endif ; not __APPLE2ENH__ diff --git a/libsrc/apple2/cgetc.s b/libsrc/apple2/cgetc.s index d2ebe5db8..b82238b02 100644 --- a/libsrc/apple2/cgetc.s +++ b/libsrc/apple2/cgetc.s @@ -7,6 +7,10 @@ ; .export _cgetc + + .ifndef __APPLE2ENH__ + .import machinetype + .endif .import cursor, putchardirect .include "zeropage.inc" @@ -18,11 +22,14 @@ _cgetc: beq :+ ; Show caret. - .ifdef __APPLE2ENH__ - lda #$7F | $80 ; Checkerboard, screen code - .else + .ifndef __APPLE2ENH__ lda #' ' | $40 ; Blank, flashing + bit machinetype + bpl put_caret .endif + + lda #$7F | $80 ; Checkerboard, screen code +put_caret: jsr putchardirect ; Saves old character in tmp3 ; Wait for keyboard strobe. diff --git a/libsrc/apple2/cpeekc.s b/libsrc/apple2/cpeekc.s index a6a082eab..4f5361461 100644 --- a/libsrc/apple2/cpeekc.s +++ b/libsrc/apple2/cpeekc.s @@ -4,14 +4,24 @@ ; char cpeekc (void); ; + .ifndef __APPLE2ENH__ + .import machinetype + .endif + .export _cpeekc .include "apple2.inc" _cpeekc: ldy CH - .ifdef __APPLE2ENH__ + sec ; Assume main memory + + .ifndef __APPLE2ENH__ + bit machinetype + bpl peek + .endif + bit RD80VID ; In 80 column mode? bpl peek ; No, just go ahead lda OURCH @@ -21,13 +31,12 @@ _cpeekc: php sei ; No valid MSLOT et al. in aux memory bit HISCR ; Assume SET80COL - .endif + peek: lda (BASL),Y ; Get character - .ifdef __APPLE2ENH__ bcs :+ ; In main memory bit LOWSCR plp -: .endif - eor #$80 ; Invert high bit + +: eor #$80 ; Invert high bit ldx #>$0000 rts diff --git a/libsrc/apple2/cputc.s b/libsrc/apple2/cputc.s index fdf799357..aa4a383b3 100644 --- a/libsrc/apple2/cputc.s +++ b/libsrc/apple2/cputc.s @@ -5,13 +5,13 @@ ; void __fastcall__ cputc (char c); ; - .ifdef __APPLE2ENH__ .constructor initconio - .endif .export _cputcxy, _cputc .export cputdirect, newline, putchar, putchardirect .import gotoxy, VTABZ + .ifndef __APPLE2ENH__ + .import machinetype .import uppercasemask .endif @@ -22,12 +22,16 @@ .segment "ONCE" - .ifdef __APPLE2ENH__ initconio: + .ifndef __APPLE2ENH__ + bit machinetype + bmi :+ + rts +: + .endif sta SETALTCHAR ; Switch in alternate charset bit LORES ; Limit SET80COL-HISCR to text rts - .endif .code @@ -52,14 +56,22 @@ _cputc: cputdirect: jsr putchar - .ifdef __APPLE2ENH__ + + .ifndef __APPLE2ENH__ + bit machinetype + bpl :+ + .endif bit RD80VID ; In 80 column mode? bpl :+ inc OURCH ; Bump to next column lda OURCH + .ifdef __APPLE2ENH__ bra check ; Must leave CH alone -: .endif - inc CH ; Bump to next column + .else + jmp check + .endif + +: inc CH ; Bump to next column lda CH check: cmp WNDWDTH bcc done @@ -67,13 +79,24 @@ check: cmp WNDWDTH left: .ifdef __APPLE2ENH__ stz CH ; Goto left edge of screen - bit RD80VID ; In 80 column mode? - bpl done - stz OURCH ; Goto left edge of screen .else - lda #$00 ; Goto left edge of screen + lda #$00 sta CH .endif + + .ifndef __APPLE2ENH__ + bit machinetype + bpl done + .endif + + bit RD80VID ; In 80 column mode? + bpl done + .ifdef __APPLE2ENH__ + stz OURCH ; Goto left edge of screen + .else + sta OURCH + .endif + done: rts newline: @@ -100,8 +123,14 @@ mask: and INVFLG ; Apply normal, inverse, flash putchardirect: tax ldy CH - .ifdef __APPLE2ENH__ + sec ; Assume main memory + + .ifndef __APPLE2ENH__ + bit machinetype + bpl put + .endif + bit RD80VID ; In 80 column mode? bpl put ; No, just go ahead lda OURCH @@ -111,14 +140,13 @@ putchardirect: php sei ; No valid MSLOT et al. in aux memory bit HISCR ; Assume SET80COL - .endif + put: lda (BASL),Y ; Get current character sta tmp3 ; Save old character for _cgetc txa sta (BASL),Y - .ifdef __APPLE2ENH__ + bcs :+ ; In main memory bit LOWSCR plp -: .endif - rts +: rts diff --git a/libsrc/apple2/dynchline.s b/libsrc/apple2/dynchline.s new file mode 100644 index 000000000..74cc5a41e --- /dev/null +++ b/libsrc/apple2/dynchline.s @@ -0,0 +1,41 @@ +; +; Ullrich von Bassewitz, 08.08.1998 +; Colin Leroy-Mira, 26.05.2025 +; +; void __fastcall__ dyn_chlinexy (unsigned char c, unsigned char x, unsigned char y, unsigned char length); +; void __fastcall__ dyn_chline (unsigned char c, unsigned char length); +; + +.ifndef __APPLE2ENH__ + + .export _dyn_chlinexy, _dyn_chline, chlinedirect + .import gotoxy, cputdirect, popa + .import machinetype + + .include "zeropage.inc" + .include "apple2.inc" + +_dyn_chlinexy: + pha ; Save the length + jsr gotoxy ; Call this one, will pop params + pla ; Restore the length and run into _chline + +_dyn_chline: + pha + jsr popa ; Get the character to draw + eor #$80 ; Invert high bit + tax + pla + +chlinedirect: + stx tmp1 + cmp #$00 ; Is the length zero? + beq done ; Jump if done + sta tmp2 +: lda tmp1 ; Screen code + jsr cputdirect ; Direct output + dec tmp2 + bne :- +done: rts + +.endif diff --git a/libsrc/apple2/dyncvline.s b/libsrc/apple2/dyncvline.s new file mode 100644 index 000000000..b74126a4d --- /dev/null +++ b/libsrc/apple2/dyncvline.s @@ -0,0 +1,40 @@ +; +; Ullrich von Bassewitz, 08.08.1998 +; Colin Leroy-Mira, 26.05.2025 +; +; void __fastcall__ dyn_cvlinexy (unsigned char c, unsigned char x, unsigned char y, unsigned char length); +; void __fastcall__ dyn_cvline (unsigned char c, unsigned char length); +; + +.ifndef __APPLE2ENH__ + + .export _dyn_cvlinexy, _dyn_cvline + .import gotoxy, putchar, newline, popa + .import machinetype + + .include "zeropage.inc" + +_dyn_cvlinexy: + pha ; Save the length + jsr gotoxy ; Call this one, will pop params + pla ; Restore the length and run into _cvline + +_dyn_cvline: + pha + jsr popa ; Get the character to draw + eor #$80 ; Invert high bit + tax + pla + + stx tmp1 + cmp #$00 ; Is the length zero? + beq done ; Jump if done + sta tmp2 +: lda tmp1 ; Screen code + jsr putchar ; Write, no cursor advance + jsr newline ; Advance cursor to next line + dec tmp2 + bne :- +done: rts + +.endif diff --git a/libsrc/apple2/get_ostype.s b/libsrc/apple2/get_ostype.s index ea9ff25cc..0bd53717c 100644 --- a/libsrc/apple2/get_ostype.s +++ b/libsrc/apple2/get_ostype.s @@ -4,6 +4,8 @@ ; unsigned char get_ostype (void) ; + ; Priority higher than the default one so that things depending + ; on ostype can get ostype set when called at normal priority .constructor initostype, 9 .export _get_ostype, ostype diff --git a/libsrc/apple2/gotoxy.s b/libsrc/apple2/gotoxy.s index 2a0261eba..2ecd2a513 100644 --- a/libsrc/apple2/gotoxy.s +++ b/libsrc/apple2/gotoxy.s @@ -8,6 +8,10 @@ .export gotoxy, _gotoxy, _gotox .import popa, VTABZ + .ifndef __APPLE2ENH__ + .import machinetype + .endif + .include "apple2.inc" gotoxy: @@ -22,9 +26,13 @@ _gotoxy: _gotox: sta CH ; Store X - .ifdef __APPLE2ENH__ + + .ifndef __APPLE2ENH__ + bit machinetype + bpl :+ + .endif + bit RD80VID ; In 80 column mode? bpl :+ sta OURCH ; Store X -: .endif - rts +: rts diff --git a/libsrc/apple2/libref.s b/libsrc/apple2/libref.s index e3d713a5d..9c6994a5d 100644 --- a/libsrc/apple2/libref.s +++ b/libsrc/apple2/libref.s @@ -2,9 +2,8 @@ ; Oliver Schmidt, 2013-05-31 ; - .export em_libref, ser_libref, tgi_libref + .export em_libref, ser_libref .import _exit em_libref := _exit ser_libref := _exit -tgi_libref := _exit diff --git a/libsrc/apple2/machinetype.s b/libsrc/apple2/machinetype.s new file mode 100644 index 000000000..7fa70f29f --- /dev/null +++ b/libsrc/apple2/machinetype.s @@ -0,0 +1,24 @@ +.ifndef __APPLE2ENH__ + + .constructor initmachinetype, 8 + + .import ostype + .export machinetype + + .segment "ONCE" + +initmachinetype: + ldx ostype + cpx #$31 ; Apple //e enhanced? + ror machinetype ; Carry to high bit + cpx #$30 ; Apple //e? + ror machinetype + rts + + .data + +; bit 7: Machine is a //e or newer +; bit 6: Machine is a //e enhanced or newer +machinetype: .byte 0 + +.endif diff --git a/libsrc/apple2/mcbdefault.s b/libsrc/apple2/mcbdefault.s index 556a9d8fb..6a369114c 100644 --- a/libsrc/apple2/mcbdefault.s +++ b/libsrc/apple2/mcbdefault.s @@ -9,6 +9,10 @@ .export _mouse_def_callbacks + .ifndef __APPLE2ENH__ + .import machinetype + .endif + .include "apple2.inc" ; ------------------------------------------------------------------------ @@ -42,11 +46,14 @@ cursor = '+' | $40 ; Flashing crosshair .endif getcursor: - .ifdef __APPLE2ENH__ + .ifndef __APPLE2ENH__ + bit machinetype + bpl column + .endif bit RD80VID ; In 80 column mode? bpl column ; No, skip bank switching switch: bit LOWSCR ; Patched at runtime - .endif + column: ldx #$00 ; Patched at runtime getscr: lda $0400,x ; Patched at runtime cmp #cursor @@ -55,9 +62,7 @@ getscr: lda $0400,x ; Patched at runtime setcursor: lda #cursor setscr: sta $0400,x ; Patched at runtime - .ifdef __APPLE2ENH__ bit LOWSCR ; Doesn't hurt in 40 column mode - .endif rts ; ------------------------------------------------------------------------ @@ -65,9 +70,7 @@ setscr: sta $0400,x ; Patched at runtime .code done: - .ifdef __APPLE2ENH__ bit LOWSCR ; Doesn't hurt in 40 column mode - .endif return: rts ; Hide the mouse cursor. @@ -108,14 +111,14 @@ movex: inx bcs :- stx column+1 - .ifdef __APPLE2ENH__ + + ; Patch switch anyway, it will just be skipped over if in 40-col mode adc #7 / 2 ; Left or right half of 40-col column? ldx #<LOWSCR ; Columns 1,3,5..79 bcs :+ .assert LOWSCR + 1 = HISCR, error inx ; Columns 0,2,4..78 : stx switch+1 - .endif rts ; Move the mouse cursor y position to the value in A/X. diff --git a/libsrc/apple2/chline.s b/libsrc/apple2/mtchline.s similarity index 68% rename from libsrc/apple2/chline.s rename to libsrc/apple2/mtchline.s index be157ca9e..71347c563 100644 --- a/libsrc/apple2/chline.s +++ b/libsrc/apple2/mtchline.s @@ -1,27 +1,26 @@ ; ; Ullrich von Bassewitz, 08.08.1998 +; Colin Leroy-Mira, 26.05.2025 ; -; void __fastcall__ chlinexy (unsigned char x, unsigned char y, unsigned char length); -; void __fastcall__ chline (unsigned char length); +; void __fastcall__ mt_chlinexy (unsigned char x, unsigned char y, unsigned char length); +; void __fastcall__ mt_chline (unsigned char length); ; - .export _chlinexy, _chline, chlinedirect +.ifdef __APPLE2ENH__ + + .export _mt_chlinexy, _mt_chline, chlinedirect .import gotoxy, cputdirect .include "zeropage.inc" .include "apple2.inc" -_chlinexy: +_mt_chlinexy: pha ; Save the length jsr gotoxy ; Call this one, will pop params pla ; Restore the length and run into _chline -_chline: - .ifdef __APPLE2ENH__ +_mt_chline: ldx #'_' | $80 ; Underscore, screen code - .else - ldx #'-' | $80 ; Minus, screen code - .endif chlinedirect: stx tmp1 @@ -33,3 +32,5 @@ chlinedirect: dec tmp2 bne :- done: rts + +.endif diff --git a/libsrc/apple2/cvline.s b/libsrc/apple2/mtcvline.s similarity index 57% rename from libsrc/apple2/cvline.s rename to libsrc/apple2/mtcvline.s index 86bbf11f4..03e11bf51 100644 --- a/libsrc/apple2/cvline.s +++ b/libsrc/apple2/mtcvline.s @@ -1,34 +1,32 @@ ; ; Ullrich von Bassewitz, 08.08.1998 +; Colin Leroy-Mira, 26.05.2025 ; -; void __fastcall__ cvlinexy (unsigned char x, unsigned char y, unsigned char length); -; void __fastcall__ cvline (unsigned char length); +; void __fastcall__ mt_cvlinexy (unsigned char x, unsigned char y, unsigned char length); +; void __fastcall__ mt_cvline (unsigned char length); ; - .export _cvlinexy, _cvline +.ifdef __APPLE2ENH__ + + .export _mt_cvlinexy, _mt_cvline .import gotoxy, putchar, newline .include "zeropage.inc" -_cvlinexy: +_mt_cvlinexy: pha ; Save the length jsr gotoxy ; Call this one, will pop params pla ; Restore the length and run into _cvline -_cvline: - .ifdef __APPLE2ENH__ - ldx #$5F ; Left vertical line MouseText character - .else - ldx #'!' | $80 ; Exclamation mark, screen code - .endif - - stx tmp1 +_mt_cvline: cmp #$00 ; Is the length zero? beq done ; Jump if done sta tmp2 -: lda tmp1 ; Screen code +: lda #$5F ; Left vertical line MouseText character jsr putchar ; Write, no cursor advance jsr newline ; Advance cursor to next line dec tmp2 bne :- done: rts + +.endif diff --git a/libsrc/apple2/tgi/a2.hi.s b/libsrc/apple2/tgi/a2.hi.s index 1d5bdb68b..27c494421 100644 --- a/libsrc/apple2/tgi/a2.hi.s +++ b/libsrc/apple2/tgi/a2.hi.s @@ -83,7 +83,10 @@ Y2 := ptr4 .byte $74, $67, $69 ; "tgi" .byte TGI_API_VERSION ; TGI API version number + +libref: .addr $0000 ; Library reference + .word 280 ; X resolution .word 192 ; Y resolution .byte 8 ; Number of drawing colors @@ -120,6 +123,10 @@ pages: .byte 2 ; Number of screens available .bss +.ifndef __APPLE2ENH__ +machinetype: .res 1 +.endif + ; Absolute variables used in the code ERROR: .res 1 ; Error code @@ -146,13 +153,22 @@ FONT: ; most of the time. ; Must set an error code: NO INSTALL: - .ifdef __APPLE2ENH__ + .ifndef __APPLE2ENH__ + lda libref + ldx libref+1 + sta ptr1 + stx ptr1+1 + ldy #$0 + lda (ptr1),y + sta machinetype + bpl :+ + .endif ; No page switching if 80 column store is enabled bit RD80COL bpl :+ lda #$01 sta pages -: .endif +: ; Fall through @@ -175,10 +191,16 @@ INIT: ; Switch into graphics mode bit MIXCLR bit HIRES - .ifdef __APPLE2ENH__ + + .ifndef __APPLE2ENH__ + bit machinetype + bpl clr_txt + .endif + sta IOUDISON bit DHIRESOFF - .endif + +clr_txt: bit TXTCLR ; Beagle Bros Shape Mechanic fonts don't @@ -200,11 +222,14 @@ DONE: bit TXTSET bit LOWSCR - .ifdef __APPLE2ENH__ + .ifndef __APPLE2ENH__ + bit machinetype + bpl reset_wndtop + .endif ; Limit SET80COL-HISCR to text bit LORES - .endif +reset_wndtop: ; Reset the text window top lda #$00 sta WNDTOP diff --git a/libsrc/apple2/tgiref.s b/libsrc/apple2/tgiref.s new file mode 100644 index 000000000..e9bcab5e8 --- /dev/null +++ b/libsrc/apple2/tgiref.s @@ -0,0 +1,18 @@ +; +; Colin Leroy-Mira, 2025-05-10 +; + + .export tgi_libref + .import _exit + +.ifndef __APPLE2ENH__ + + .import machinetype + +tgi_libref := machinetype + +.else + +tgi_libref := _exit + +.endif diff --git a/libsrc/apple2/videomode.s b/libsrc/apple2/videomode.s index 414105b18..d8310427f 100644 --- a/libsrc/apple2/videomode.s +++ b/libsrc/apple2/videomode.s @@ -1,17 +1,40 @@ ; ; Oliver Schmidt, 07.09.2009 ; -; unsigned __fastcall__ videomode (unsigned mode); +; signed char __fastcall__ videomode (unsigned mode); ; - .ifdef __APPLE2ENH__ - .export _videomode + .ifndef __APPLE2ENH__ + .import machinetype + .endif + + .import returnFFFF + .include "apple2.inc" + .include "mli.inc" + + +VIDEOMODE_40x24 = $15 +VIDEOMODE_80x24 = $00 .segment "LOWCODE" _videomode: + ; Functionally equivalent to previous assumption that + ; __APPLE2ENH__ == 80 columns hardware present. Will be + ; correctly checked in the very near future. + .ifndef __APPLE2ENH__ + bit machinetype + bvs set_mode + + ; No 80 column card, return error if requested mode is 80cols + cmp #VIDEOMODE_40x24 + beq out + jmp returnFFFF +set_mode: + .endif + ; Get and save current videomode flag bit RD80VID php @@ -31,10 +54,8 @@ _videomode: ; Return ctrl-char code for setting previous ; videomode using the saved videomode flag - lda #$15 ; Ctrl-char code for 40 cols + lda #VIDEOMODE_40x24 plp - bpl :+ - lda #$00 ; Ctrl-char code for 80 cols -: rts ; X was preserved all the way - - .endif ; __APPLE2ENH__ + bpl out + lda #VIDEOMODE_80x24 +out: rts ; X was preserved all the way diff --git a/libsrc/apple2/wherex.s b/libsrc/apple2/wherex.s index 4d4f856f0..b447ac6e9 100644 --- a/libsrc/apple2/wherex.s +++ b/libsrc/apple2/wherex.s @@ -4,16 +4,23 @@ ; unsigned char wherex (void); ; + .ifndef __APPLE2ENH__ + .import machinetype + .endif + .export _wherex .include "apple2.inc" _wherex: lda CH - .ifdef __APPLE2ENH__ + .ifndef __APPLE2ENH__ + bit machinetype + bpl :+ + .endif bit RD80VID ; In 80 column mode? bpl :+ lda OURCH -: .endif - ldx #>$0000 + +: ldx #>$0000 rts diff --git a/targettest/conio.c b/targettest/conio.c index e270d3dab..09b4a9e44 100644 --- a/targettest/conio.c +++ b/targettest/conio.c @@ -9,6 +9,15 @@ * */ +/* Box drawing characters are usually constant expressions. However, there + * are scenarios where this is not the case. To ensure compatibility with + * code that assumes they are constant expressions, the scenarios in question + * must be explicitly enabled by defining DYN_BOX_DRAW. Currently, the only + * such scenario is the apple2 target. There, DYN_BOX_DRAW can be used to + * enable the use of MouseText characters on exactly those machines that + * support them. + */ +#define DYN_BOX_DRAW #include <conio.h> #include <string.h> @@ -34,6 +43,10 @@ #define CH_VLINE '!' #endif +#if defined(DYN_BOX_DRAW) +static char grid[5][5]; +#else + static char grid[5][5] = { {CH_ULCORNER, CH_HLINE, CH_TTEE, CH_HLINE, CH_URCORNER}, {CH_VLINE, ' ', CH_VLINE, ' ', CH_VLINE }, @@ -41,6 +54,35 @@ static char grid[5][5] = { {CH_VLINE, ' ', CH_VLINE, ' ', CH_VLINE }, {CH_LLCORNER, CH_HLINE, CH_BTEE, CH_HLINE, CH_LRCORNER} }; +#endif + +#if defined(DYN_BOX_DRAW) +static void init_grid(void) +{ + /* Programmatically fill the array with extern chars + * instead of constants. */ + grid[0][0] = CH_ULCORNER; + grid[2][0] = CH_LTEE; + grid[4][0] = CH_LLCORNER; + + grid[0][2] = CH_TTEE; + grid[2][2] = CH_CROSS; + grid[4][2] = CH_BTEE; + + grid[0][4] = CH_URCORNER; + grid[2][4] = CH_RTEE; + grid[4][4] = CH_LRCORNER; + + grid[1][1] = grid[1][3] = + grid[3][1] = grid[3][3] = ' '; + + grid[1][0] = grid[1][2] = grid[1][4] = + grid[3][0] = grid[3][2] = grid[3][4] = CH_VLINE; + grid[0][1] = grid[0][3] = + grid[2][1] = grid[2][3] = + grid[4][1] = grid[4][3] = CH_HLINE; +} +#endif #define LINE_COLORTEST 3 #define LINE_PEEKTEST 11 @@ -152,6 +194,11 @@ void main(void) joy_install(joy_static_stddrv); #endif + +#if defined(DYN_BOX_DRAW) + init_grid(); +#endif + clrscr(); screensize(&xsize, &ysize); cputs("cc65 conio test\n\r"); From e444f4c40e919a5ada2c52fdea8420a9d6dff74c Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 27 May 2025 22:42:07 +0200 Subject: [PATCH 2700/2710] Apple2: Safely check for 80-columns card Check the Pascal ID bytes for an 80-columns card to avoid blindly jumping into a $C300 that could be totally unrelated. --- libsrc/apple2/detect80cols.s | 56 ++++++++++++++++++++++++++++++++++++ libsrc/apple2/exec.s | 7 +++-- libsrc/apple2/videomode.s | 15 ++-------- 3 files changed, 63 insertions(+), 15 deletions(-) create mode 100644 libsrc/apple2/detect80cols.s diff --git a/libsrc/apple2/detect80cols.s b/libsrc/apple2/detect80cols.s new file mode 100644 index 000000000..19e6fda74 --- /dev/null +++ b/libsrc/apple2/detect80cols.s @@ -0,0 +1,56 @@ +; +; Colin Leroy-Mira, 27/05/2025 +; +; Verify the presence of a 80 columns card in slot 3, +; and publish a flag accordingly. +; + .export aux80col + + .ifndef __APPLE2ENH__ + .import machinetype + .endif + + .constructor detect80cols + + .include "apple2.inc" + + .data + +aux80col: .byte 0 + + .segment "ONCE" + +IdOfsTable: ; Table of bytes positions, used to check four + ; specific bytes on the slot's firmware to make + ; sure this is a serial card. + .byte $05 ; Pascal 1.0 ID byte + .byte $07 ; Pascal 1.0 ID byte + .byte $0B ; Pascal 1.1 generic signature byte + .byte $0C ; Device signature byte + +IdValTable: ; Table of expected values for the four checked + ; bytes + .byte $38 ; ID Byte 0 (from Pascal 1.0), fixed + .byte $18 ; ID Byte 1 (from Pascal 1.0), fixed + .byte $01 ; Generic signature for Pascal 1.1, fixed + .byte $88 ; Device signature byte (80 columns card) + +IdTableLen = * - IdValTable + +detect80cols: + .ifndef __APPLE2ENH__ + lda machinetype ; Check we're on a //e at least, otherwise we + bpl NoDev ; handle no 80cols hardware (like Videx) + .endif + + ldx #IdTableLen-1 +: ldy IdOfsTable,x ; Check Pascal 1.1 Firmware Protocol ID bytes + lda IdValTable,x + cmp $C300,y + bne NoDev + dex + bpl :- + + dec aux80col ; We have an 80-columns card! Set flag to $FF + +NoDev: rts diff --git a/libsrc/apple2/exec.s b/libsrc/apple2/exec.s index ec90f19bb..4e5e77a6e 100644 --- a/libsrc/apple2/exec.s +++ b/libsrc/apple2/exec.s @@ -6,6 +6,7 @@ .export _exec .import mli_file_info_direct + .import aux80col .import pushname, popname, popax, done, _exit .include "zeropage.inc" @@ -115,7 +116,8 @@ setbuf: lda #$00 ; Low byte sta io_buffer stx io_buffer+1 - .ifdef __APPLE2ENH__ + bit aux80col + bpl :+ ; Calling the 80 column firmware needs the ROM switched ; in, otherwise it copies the F8 ROM to the LC (@ $CEF4) bit $C082 @@ -128,9 +130,8 @@ setbuf: lda #$00 ; Low byte ; Switch in LC bank 2 for R/O bit $C080 - .endif - ; Reset stack as we already passed +: ; Reset stack as we already passed ; the point of no return anyway ldx #$FF txs diff --git a/libsrc/apple2/videomode.s b/libsrc/apple2/videomode.s index d8310427f..ea9eb28df 100644 --- a/libsrc/apple2/videomode.s +++ b/libsrc/apple2/videomode.s @@ -5,14 +5,10 @@ ; .export _videomode - .ifndef __APPLE2ENH__ - .import machinetype - .endif - + .import aux80col .import returnFFFF .include "apple2.inc" - .include "mli.inc" VIDEOMODE_40x24 = $15 @@ -21,19 +17,14 @@ VIDEOMODE_80x24 = $00 .segment "LOWCODE" _videomode: - ; Functionally equivalent to previous assumption that - ; __APPLE2ENH__ == 80 columns hardware present. Will be - ; correctly checked in the very near future. - .ifndef __APPLE2ENH__ - bit machinetype - bvs set_mode + bit aux80col + bmi set_mode ; No 80 column card, return error if requested mode is 80cols cmp #VIDEOMODE_40x24 beq out jmp returnFFFF set_mode: - .endif ; Get and save current videomode flag bit RD80VID From 842ec4b481513ea54f829132ec2fe842c1c6dbc5 Mon Sep 17 00:00:00 2001 From: Gorilla Sapiens <embracetheape@gmail.com> Date: Thu, 29 May 2025 14:26:25 +0000 Subject: [PATCH 2701/2710] tmpfiles for the *.grc -> *.s -> *.o -> exe path --- src/cl65/main.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/cl65/main.c b/src/cl65/main.c index 8d8aac932..d68e7c7e7 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -378,6 +378,14 @@ static void CmdSetOutput (CmdDesc* Cmd, const char* File) +static void CmdSetAsmOutput (CmdDesc* Cmd, const char* File) +/* Set the output asm file in a command desc for grc65 */ +{ + CmdAddArg2 (Cmd, "-s", File); +} + + + static void CmdSetTarget (CmdDesc* Cmd, target_t Target) /* Set the output file in a command desc */ { @@ -703,6 +711,9 @@ static void Compile (const char* File) static void CompileRes (const char* File) /* Compile the given geos resource file */ { + /* tmp Asm file name, if needed */ + char* AsmName = NULL; + /* Remember the current assembler argument count */ unsigned ArgCount = GRC.ArgCount; @@ -711,6 +722,14 @@ static void CompileRes (const char* File) */ CmdSetTarget (&GRC, Target); + /* Changes to output file name must come + ** BEFORE adding the file + */ + if (DoAssemble && DoLink) { + AsmName = MakeTmpFilename(".s"); + CmdSetAsmOutput(&GRC, AsmName); + } + /* Add the file as argument for the resource compiler */ CmdAddArg (&GRC, File); @@ -728,7 +747,10 @@ static void CompileRes (const char* File) */ if (DoAssemble) { /* Assemble the intermediate file and remove it */ - AssembleIntermediate (File, NULL); + AssembleIntermediate (File, AsmName); + if (AsmName) { + xfree(AsmName); + } } } From 779c393e65fae1c5a64115f8e4673817cdcc5be7 Mon Sep 17 00:00:00 2001 From: Gorilla Sapiens <embracetheape@gmail.com> Date: Thu, 29 May 2025 15:05:03 +0000 Subject: [PATCH 2702/2710] fixes *.s -> *.o -> exe path --- src/cl65/main.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/cl65/main.c b/src/cl65/main.c index d68e7c7e7..b48841149 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -552,7 +552,12 @@ static void AssembleFile (const char* File, const char* TmpFile, unsigned ArgCou ** to the file list of the linker. The name of the output ** file is that of the input file with ".s" replaced by ".o". */ - ObjName = MakeFilename (TmpFile ? TmpFile : File, ".o"); + if (TmpFile) { + ObjName = MakeFilename (TmpFile, ".o"); + } + else { + ObjName = MakeTmpFilename (".o"); + } CmdSetOutput (&CA65, ObjName); CmdAddFile (&LD65, ObjName); /* This is just a temporary file, schedule it for removal */ From f8c51ffd3d7de98e6a4ef6a710cf3cd2975806d2 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Mon, 26 May 2025 18:03:12 +0200 Subject: [PATCH 2703/2710] Spare a few bytes --- libsrc/apple2/extra/iobuf-0800.s | 13 ++++++------ libsrc/conio/cputs.s | 34 ++++++++++---------------------- 2 files changed, 17 insertions(+), 30 deletions(-) diff --git a/libsrc/apple2/extra/iobuf-0800.s b/libsrc/apple2/extra/iobuf-0800.s index 694b91fdb..b00dba6ae 100644 --- a/libsrc/apple2/extra/iobuf-0800.s +++ b/libsrc/apple2/extra/iobuf-0800.s @@ -54,18 +54,20 @@ iobuf_alloc: rts ; Mark table entry as used -: lda #$FF - sta table,x +: dec table,x ; Convert table index to address hibyte txa asl asl - clc + ; Skip clearing carry, it can't be set as long as MAX_FDS*4 is + ; less than 64. + .assert MAX_FDS*4 < $40, error adc #>$0800 ; Store address in "memptr" - ldy #$01 + ; (Y still equals 0 from popptr1) + iny sta (ptr1),y dey tya @@ -82,8 +84,7 @@ iobuf_free: ; Mark table entry as free tax - lda #$00 - sta table,x + inc table,x rts ; ------------------------------------------------------------------------ diff --git a/libsrc/conio/cputs.s b/libsrc/conio/cputs.s index 62e757b84..b822fddee 100644 --- a/libsrc/conio/cputs.s +++ b/libsrc/conio/cputs.s @@ -23,31 +23,17 @@ _cputsxy: _cputs: sta ptr1 ; Save s stx ptr1+1 +L0: .if (.cpu .bitand CPU_ISET_65SC02) - -L0: lda (ptr1) ; (5) - beq L9 ; (7) Jump if done - jsr _cputc ; (13) Output char, advance cursor - inc ptr1 ; (18) Bump low byte - bne L0 ; (20) Next char - inc ptr1+1 ; (25) Bump high byte - bne L0 - + lda (ptr1) ; (5) .else - -L0: ldy #0 ; (2) -L1: lda (ptr1),y ; (7) - beq L9 ; (9) Jump if done - iny - sty tmp1 ; (14) Save offset - jsr _cputc ; (20) Output char, advance cursor - ldy tmp1 ; (23) Get offset - bne L1 ; (25) Next char - inc ptr1+1 ; (30) Bump high byte - bne L1 - + ldy #0 ; (2) + lda (ptr1),y ; (7) .endif - -; Done - + beq L9 ; (7/9) Jump if done + jsr _cputc ; (13/15) Output char, advance cursor + inc ptr1 ; (18/20) Bump low byte + bne L0 ; (20/22) Next char + inc ptr1+1 ; (25/27) Bump high byte + bne L0 L9: rts From 89daccaa435b1d1bdb9e1860cdaa4671718502a8 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 21 May 2025 20:47:21 +0200 Subject: [PATCH 2704/2710] Apple2: automatically enable lowercase starting from //e --- libsrc/apple2/uppercasemask.s | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/libsrc/apple2/uppercasemask.s b/libsrc/apple2/uppercasemask.s index 8b993bb1e..b0f05eee7 100644 --- a/libsrc/apple2/uppercasemask.s +++ b/libsrc/apple2/uppercasemask.s @@ -4,6 +4,25 @@ .export uppercasemask + .ifndef __APPLE2ENH__ + .import machinetype + .constructor detectlowercase + .endif + + .ifndef __APPLE2ENH__ + + .segment "ONCE" + +detectlowercase: + bit machinetype + bpl :+ + + lda #$FF + sta uppercasemask +: rts + + .endif + .data uppercasemask: .byte $DF ; Convert to uppercase From d03529067aaf3898d2e2f1ce42ca90e5f7f2f822 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sat, 31 May 2025 13:27:52 +0200 Subject: [PATCH 2705/2710] Apple2: don't define _allow_lowercase and uppercasemask on APPLE2ENH --- libsrc/apple2/allow_lowercase.s | 7 ++++++- libsrc/apple2/uppercasemask.s | 9 ++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/libsrc/apple2/allow_lowercase.s b/libsrc/apple2/allow_lowercase.s index 648276b4c..b78544a66 100644 --- a/libsrc/apple2/allow_lowercase.s +++ b/libsrc/apple2/allow_lowercase.s @@ -4,8 +4,11 @@ ; unsigned char __fastcall__ allow_lowercase (unsigned char onoff); ; +.ifndef __APPLE2ENH__ + .export _allow_lowercase - .import uppercasemask, return0, return1 + .import return0 + .import uppercasemask, return1 _allow_lowercase: tax @@ -21,3 +24,5 @@ _allow_lowercase: values: .byte $DF ; Force uppercase .byte $FF ; Keep lowercase + +.endif diff --git a/libsrc/apple2/uppercasemask.s b/libsrc/apple2/uppercasemask.s index b0f05eee7..cd818c5bf 100644 --- a/libsrc/apple2/uppercasemask.s +++ b/libsrc/apple2/uppercasemask.s @@ -2,14 +2,12 @@ ; Oliver Schmidt, 2024-08-06 ; +.ifndef __APPLE2ENH__ + .export uppercasemask - .ifndef __APPLE2ENH__ .import machinetype .constructor detectlowercase - .endif - - .ifndef __APPLE2ENH__ .segment "ONCE" @@ -21,8 +19,9 @@ detectlowercase: sta uppercasemask : rts - .endif .data uppercasemask: .byte $DF ; Convert to uppercase + +.endif From c75c305c5919d49f2710d2a1d213244ccf153950 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sat, 31 May 2025 13:22:01 +0200 Subject: [PATCH 2706/2710] Apple2: Fix inconsistency (use bit like everywhere else) --- libsrc/apple2/detect80cols.s | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsrc/apple2/detect80cols.s b/libsrc/apple2/detect80cols.s index 19e6fda74..c6f263566 100644 --- a/libsrc/apple2/detect80cols.s +++ b/libsrc/apple2/detect80cols.s @@ -39,7 +39,7 @@ IdTableLen = * - IdValTable detect80cols: .ifndef __APPLE2ENH__ - lda machinetype ; Check we're on a //e at least, otherwise we + bit machinetype ; Check we're on a //e at least, otherwise we bpl NoDev ; handle no 80cols hardware (like Videx) .endif From df99b9a107b96eb2c43f934866b7c76680496950 Mon Sep 17 00:00:00 2001 From: Bob Andrews <mrdudz@users.noreply.github.com> Date: Sat, 31 May 2025 19:00:11 +0200 Subject: [PATCH 2707/2710] fix codestyle --- src/cl65/main.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/cl65/main.c b/src/cl65/main.c index b48841149..42126e6d7 100644 --- a/src/cl65/main.c +++ b/src/cl65/main.c @@ -554,8 +554,7 @@ static void AssembleFile (const char* File, const char* TmpFile, unsigned ArgCou */ if (TmpFile) { ObjName = MakeFilename (TmpFile, ".o"); - } - else { + } else { ObjName = MakeTmpFilename (".o"); } CmdSetOutput (&CA65, ObjName); @@ -567,8 +566,7 @@ static void AssembleFile (const char* File, const char* TmpFile, unsigned ArgCou /* This is the final step. If an output name is given, set it */ if (OutputName) { CmdSetOutput (&CA65, OutputName); - } - else { + } else { ObjName = MakeFilename (File, ".o"); CmdSetOutput (&CA65, ObjName); xfree (ObjName); From d3ef3e1b62c90901b39bcb04f68d30584c329771 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Sun, 25 May 2025 16:22:24 +0200 Subject: [PATCH 2708/2710] Apple2: Don't depend on apple2enh definition for characters Up, Down and Del, as well as Open-Apple, exist on non-enhanced Apple //e. --- include/apple2.h | 20 ++++++++++++++++++++ include/apple2enh.h | 25 ------------------------- libsrc/apple2/cgetc.s | 10 +++++++--- 3 files changed, 27 insertions(+), 28 deletions(-) diff --git a/include/apple2.h b/include/apple2.h index e4c8d89b1..430a3e1b1 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -83,6 +83,26 @@ #define CH_CURS_LEFT 0x08 #define CH_CURS_RIGHT 0x15 +/* These characters are not available on the ][+, but + * are on the //e. */ +#if defined(__APPLE2ENH__) || defined(APPLE2_INCLUDE_IIE_CHARS) +#define CH_DEL 0x7F +#define CH_CURS_UP 0x0B +#define CH_CURS_DOWN 0x0A + +/* These are defined to be OpenApple + NumberKey */ +#define CH_F1 0xB1 +#define CH_F2 0xB2 +#define CH_F3 0xB3 +#define CH_F4 0xB4 +#define CH_F5 0xB5 +#define CH_F6 0xB6 +#define CH_F7 0xB7 +#define CH_F8 0xB8 +#define CH_F9 0xB9 +#define CH_F10 0xB0 +#endif + #if defined(__APPLE2ENH__) /* MouseText-based functions for boxes and lines drawing */ diff --git a/include/apple2enh.h b/include/apple2enh.h index 1dc75ae13..8c463fccf 100644 --- a/include/apple2enh.h +++ b/include/apple2enh.h @@ -46,31 +46,6 @@ -/*****************************************************************************/ -/* Data */ -/*****************************************************************************/ - - - -/* Characters codes */ -#define CH_DEL 0x7F -#define CH_CURS_UP 0x0B -#define CH_CURS_DOWN 0x0A - -/* These are defined to be OpenApple + NumberKey */ -#define CH_F1 0xB1 -#define CH_F2 0xB2 -#define CH_F3 0xB3 -#define CH_F4 0xB4 -#define CH_F5 0xB5 -#define CH_F6 0xB6 -#define CH_F7 0xB7 -#define CH_F8 0xB8 -#define CH_F9 0xB9 -#define CH_F10 0xB0 - - - /*****************************************************************************/ /* Variables */ /*****************************************************************************/ diff --git a/libsrc/apple2/cgetc.s b/libsrc/apple2/cgetc.s index b82238b02..f0b9566ff 100644 --- a/libsrc/apple2/cgetc.s +++ b/libsrc/apple2/cgetc.s @@ -51,10 +51,14 @@ put_caret: ; At this time, the high bit of the key pressed is set. : bit KBDSTRB ; Clear keyboard strobe - .ifdef __APPLE2ENH__ + + .ifndef __APPLE2ENH__ + bit machinetype ; Apple //e or more recent? + bpl clear + .endif bit BUTN0 ; Check if OpenApple is down bmi done - .endif - and #$7F ; If not down, then clear high bit + +clear: and #$7F ; If not down, then clear high bit done: ldx #>$0000 rts From a9ab23ad51a72db17be9d846b38f5b1a5852b8c7 Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Tue, 27 May 2025 16:22:37 +0200 Subject: [PATCH 2709/2710] Make waitvsync available on apple2 --- doc/funcref.sgml | 12 ++++++++++-- libsrc/apple2/waitvsync.s | 23 +++++++++++++++++------ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index 07d538781..a235eb2e0 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -104,6 +104,7 @@ function. <item><ref id="mktime_dt" name="mktime_dt"> <item>rebootafterexit <item><ref id="videomode" name="videomode"> +<item><ref id="waitvsync" name="waitvsync"> </itemize> @@ -119,6 +120,7 @@ function. <item><ref id="mktime_dt" name="mktime_dt"> <item>rebootafterexit <item><ref id="videomode" name="videomode"> +<item><ref id="waitvsync" name="waitvsync"> </itemize> @@ -8516,14 +8518,20 @@ if the mode is not supported due to lack of hardware. <descrip> <tag/Function/Wait until the start of the next video frame. <tag/Header/<tt/ -<ref id="apple2enh.h" name="apple2enh.h">, +<ref id="apple2.h" name="apple2.h">, <ref id="atmos.h" name="atmos.h">, <ref id="cbm.h" name="cbm.h">, <ref id="gamate.h" name="gamate.h">, <ref id="nes.h" name="nes.h">, <ref id="pce.h" name="pce.h">/ -<tag/Declaration/<tt/void waitvsync (void);/ +<tag/Declaration/ +<tt>void waitvsync (void);</tt><newline> +<tt>signed char waitvsync (void); /* For Apple II */</tt><newline> <tag/Description/Wait for vertical sync, to reduce flickering. +<tag/Notes/<itemize> +<item>The function will return -1 when the feature is not supported, +like on the Apple ][+. +</itemize> <tag/Availability/Platforms served by the headers above (Atmos requires the VSync hack) <tag/Example/None. diff --git a/libsrc/apple2/waitvsync.s b/libsrc/apple2/waitvsync.s index 486b93a53..e03796ad9 100644 --- a/libsrc/apple2/waitvsync.s +++ b/libsrc/apple2/waitvsync.s @@ -3,11 +3,13 @@ ; ; void waitvsync (void); ; - .ifdef __APPLE2ENH__ - .export _waitvsync .import ostype + .ifndef __APPLE2ENH__ + .import machinetype + .endif + .include "apple2.inc" _waitvsync: @@ -15,18 +17,27 @@ _waitvsync: bmi iigs ; $8x bvs iic ; $4x + .ifndef __APPLE2ENH__ + bit machinetype ; IIe/enh? + bmi :+ + + lda #$FF ; ][+ Unsupported + tax + rts + .endif + : bit RDVBLBAR bpl :- ; Blanking : bit RDVBLBAR bmi :- ; Drawing - rts + bpl out ; Apple IIgs TechNote #40, VBL Signal iigs: bit RDVBLBAR bmi iigs ; Blanking : bit RDVBLBAR bpl :- ; Drawing - rts + bmi out ; Apple IIc TechNote #9, Detecting VBL iic: php @@ -42,6 +53,6 @@ iic: php bit DISVBL : sta IOUDISON ; IIc Tech Ref Man: The firmware normally leaves IOUDIS on. plp +out: lda #$00 + tax rts - - .endif ; __APPLE2ENH__ From 01223073992f51481b160e339af0edb09a1ac7bb Mon Sep 17 00:00:00 2001 From: Colin Leroy-Mira <colin@colino.net> Date: Wed, 28 May 2025 08:40:51 +0200 Subject: [PATCH 2710/2710] Apple2: Dynamic IIe check on a2_lo_tgi --- doc/funcref.sgml | 5 ++--- include/apple2.h | 3 +++ include/apple2enh.h | 11 ----------- libsrc/apple2/tgi/a2.lo.s | 26 ++++++++++++++++++++++---- libsrc/apple2/waitvsync.s | 23 +++++++++-------------- 5 files changed, 36 insertions(+), 32 deletions(-) diff --git a/doc/funcref.sgml b/doc/funcref.sgml index a235eb2e0..5eab5adcd 100644 --- a/doc/funcref.sgml +++ b/doc/funcref.sgml @@ -8526,11 +8526,10 @@ if the mode is not supported due to lack of hardware. <ref id="pce.h" name="pce.h">/ <tag/Declaration/ <tt>void waitvsync (void);</tt><newline> -<tt>signed char waitvsync (void); /* For Apple II */</tt><newline> <tag/Description/Wait for vertical sync, to reduce flickering. <tag/Notes/<itemize> -<item>The function will return -1 when the feature is not supported, -like on the Apple ][+. +<item>The function will silently fail when the feature is not +supported, like on the Apple ][+. </itemize> <tag/Availability/Platforms served by the headers above (Atmos requires the VSync hack) diff --git a/include/apple2.h b/include/apple2.h index 430a3e1b1..82f8dd3e4 100644 --- a/include/apple2.h +++ b/include/apple2.h @@ -343,6 +343,9 @@ signed char __fastcall__ videomode (unsigned mode); ** installed. Call with one of the VIDEOMODE_xx constants. */ +void waitvsync (void); +/* Wait for start of next frame */ + /* End of apple2.h */ diff --git a/include/apple2enh.h b/include/apple2enh.h index 8c463fccf..84e6f4ab3 100644 --- a/include/apple2enh.h +++ b/include/apple2enh.h @@ -63,16 +63,5 @@ extern void a2e_lo_tgi[]; -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -void waitvsync (void); -/* Wait for start of next frame */ - - - /* End of apple2enh.h */ #endif diff --git a/libsrc/apple2/tgi/a2.lo.s b/libsrc/apple2/tgi/a2.lo.s index 8b00c5d20..b0f608e86 100644 --- a/libsrc/apple2/tgi/a2.lo.s +++ b/libsrc/apple2/tgi/a2.lo.s @@ -53,7 +53,7 @@ Y2 := ptr4 .byte $74, $67, $69 ; "tgi" .byte TGI_API_VERSION ; TGI API version number - .addr $0000 ; Library reference +libref: .addr $0000 ; Library reference .word 40 ; X resolution .word 48 ; Y resolution .byte 16 ; Number of drawing colors @@ -93,6 +93,10 @@ Y2 := ptr4 ERROR: .res 1 ; Error code MIX: .res 1 ; 4 lines of text +.ifndef __APPLE2ENH__ +machinetype: .res 1 +.endif + ; ------------------------------------------------------------------------ .rodata @@ -126,11 +130,15 @@ INIT: bit $C082 ; Switch in ROM jsr SETGR bit MIXCLR - .ifdef __APPLE2ENH__ + + .ifndef __APPLE2ENH__ + bit machinetype + bpl lc_in + .endif + sta IOUDISON bit DHIRESOFF - .endif - bit $C080 ; Switch in LC bank 2 for R/O +lc_in: bit $C080 ; Switch in LC bank 2 for R/O ; Done, reset the error code lda #TGI_ERR_OK @@ -144,6 +152,16 @@ INIT: ; most of the time. ; Must set an error code: NO INSTALL: + .ifndef __APPLE2ENH__ + lda libref + ldx libref+1 + sta ptr1 + stx ptr1+1 + ldy #$0 + lda (ptr1),y + sta machinetype + bpl :+ + .endif ; Fall through ; UNINSTALL routine. Is called before the driver is removed from memory. May diff --git a/libsrc/apple2/waitvsync.s b/libsrc/apple2/waitvsync.s index e03796ad9..d02071915 100644 --- a/libsrc/apple2/waitvsync.s +++ b/libsrc/apple2/waitvsync.s @@ -13,31 +13,28 @@ .include "apple2.inc" _waitvsync: + .ifndef __APPLE2ENH__ + bit machinetype ; IIe/enh? + bpl out ; No, silently fail + .endif + bit ostype bmi iigs ; $8x bvs iic ; $4x - .ifndef __APPLE2ENH__ - bit machinetype ; IIe/enh? - bmi :+ - - lda #$FF ; ][+ Unsupported - tax - rts - .endif - + ; Apple IIe : bit RDVBLBAR bpl :- ; Blanking : bit RDVBLBAR bmi :- ; Drawing - bpl out + rts ; Apple IIgs TechNote #40, VBL Signal iigs: bit RDVBLBAR bmi iigs ; Blanking : bit RDVBLBAR bpl :- ; Drawing - bmi out + rts ; Apple IIc TechNote #9, Detecting VBL iic: php @@ -53,6 +50,4 @@ iic: php bit DISVBL : sta IOUDISON ; IIc Tech Ref Man: The firmware normally leaves IOUDIS on. plp -out: lda #$00 - tax - rts +out: rts